ZGlmZiAtLWdpdCBhLy5ienJpZ25vcmUgYi8uYnpyaWdub3JlCmluZGV4IDg5NzA4NGQuLjU4NDcxMTAgMTAwNjQ0Ci0tLSBhLy5ienJpZ25vcmUKKysrIGIvLmJ6cmlnbm9yZQpAQCAtMSw0ICsxLDQgQEAKLcK0LnB1cmlmeQorLnB1cmlmeQogYXV0b200dGUuY2FjaGUKIGNvbmZpZy5sb2cKIGNvbmZpZy5jYWNoZQpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggODgwOTQzNS4uYzJiNGZjNyAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xMSwxMyArMTEsMTQgQEAKICoucmVqCiAqLnN3cAogKn4KKyouZ2M/PworKi5wcm9mY2xhbmc/CisqLnByb2ZyYXcKKyouZHluCiAuZ2RiX2hpc3RvcnkKIERvYy9idWlsZC8KLURvYy90b29scy9kb2N1dGlscy8KLURvYy90b29scy9qaW5qYS8KLURvYy90b29scy9qaW5qYTIvCi1Eb2MvdG9vbHMvcHlnbWVudHMvCi1Eb2MvdG9vbHMvc3BoaW54LworRG9jL3ZlbnYvCitMaWIvZGlzdHV0aWxzL2NvbW1hbmQvKi5wZGIKIExpYi9saWIydG8zLyoucGlja2xlCiBMaWIvdGVzdC9kYXRhLyoKIExpYi9fc3lzY29uZmlnZGF0YS5weQpAQCAtMzEsMTggKzMyLDMxIEBACiBNb2R1bGVzL1NldHVwLmxvY2FsCiBNb2R1bGVzL2NvbmZpZy5jCiBNb2R1bGVzL2xkX3NvX2FpeAotTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYgotTW9kdWxlcy9fdGVzdGVtYmVkCi1QQ2J1aWxkLyouYnNjCi1QQ2J1aWxkLyouZGxsCi1QQ2J1aWxkLyouZXhlCi1QQ2J1aWxkLyouZXhwCi1QQ2J1aWxkLyoubGliCi1QQ2J1aWxkLyoubmNiCi1QQ2J1aWxkLyoubwotUENidWlsZC8qLnBkYgotUENidWlsZC9XaW4zMi10ZW1wLSoKK1Byb2dyYW1zL19mcmVlemVfaW1wb3J0bGliCitQcm9ncmFtcy9fdGVzdGVtYmVkCitQQy9weXRob25fbnQqLmgKK1BDL3B5dGhvbm50X3JjKi5oCitQQy8qLyouZXhlCitQQy8qLyouZXhwCitQQy8qLyoubGliCitQQy8qLyouYnNjCitQQy8qLyouZGxsCitQQy8qLyoucGRiCitQQy8qLyoudXNlcgorUEMvKi8qLm5jYgorUEMvKi8qLnN1bworUEMvKi9XaW4zMi10ZW1wLSoKK1BDLyoveDY0LXRlbXAtKgorUEMvKi9hbWQ2NAorUENidWlsZC8qLnVzZXIKK1BDYnVpbGQvKi5zdW8KK1BDYnVpbGQvKi4qc2RmCitQQ2J1aWxkLyotcGdpCitQQ2J1aWxkLyotcGdvCitQQ2J1aWxkLy52cy8KIFBDYnVpbGQvYW1kNjQvCitQQ2J1aWxkL29iai8KK1BDQnVpbGQvd2luMzIvCiAucHVyaWZ5CiBQYXJzZXIvcGdlbgogX19weWNhY2hlX18KQEAgLTY0LDYgKzc4LDcgQEAKIHB5Y29uZmlnLmgKIHB5dGhvbi1jb25maWcKIHB5dGhvbi1jb25maWcucHkKK3B5dGhvbi5iYXQKIHB5dGhvbi5leGUKIHB5dGhvbi1nZGIucHkKIHB5dGhvbi5leGUtZ2RiLnB5CkBAIC03NSwzICs5MCw2IEBACiBjb3ZlcmFnZS8KIGV4dGVybmFscy8KIGh0bWxjb3YvCitUb29scy9tc2kvb2JqCitUb29scy9zc2wvYW1kNjQKK1Rvb2xzL3NzbC93aW4zMgpkaWZmIC0tZ2l0IGEvLmhnaWdub3JlIGIvLmhnaWdub3JlCmluZGV4IDllNWE1ODMuLjU4YzczZmMgMTAwNjQ0Ci0tLSBhLy5oZ2lnbm9yZQorKysgYi8uaGdpZ25vcmUKQEAgLTksNiArOSw3IEBACiBhdXRvbTR0ZS5jYWNoZSQKIF5idWlsZC8KIF5Eb2MvYnVpbGQvCiteRG9jL3ZlbnYvCiBidWlsZG5vJAogY29uZmlnLmNhY2hlCiBjb25maWcubG9nCkBAIC0xOCw2ICsxOSw3IEBACiBwbGF0Zm9ybSQKIHB5Y29uZmlnLmgkCiBweXRob24kCitweXRob24uYmF0JAogcHl0aG9uLmV4ZSQKIHB5dGhvbi1jb25maWckCiBweXRob24tY29uZmlnLnB5JApAQCAtNDgsMTMgKzUwLDE2IEBACiAqLnB5ZAogKi5jb3ZlcgogKn4KKyouZ2M/PworKi5wcm9mY2xhbmc/CisqLnByb2ZyYXcKKyouZHluCitMaWIvZGlzdHV0aWxzL2NvbW1hbmQvKi5wZGIKIExpYi9saWIydG8zLyoucGlja2xlCiBMaWIvdGVzdC9kYXRhLyoKIE1pc2MvKi53cHUKIFBDL3B5dGhvbl9udCouaAogUEMvcHl0aG9ubnRfcmMqLmgKLVBDLyoub2JqCi1QQy8qLmV4ZQogUEMvKi8qLmV4ZQogUEMvKi8qLmV4cAogUEMvKi8qLmxpYgpAQCAtNjcsMjkgKzcyLDIxIEBACiBQQy8qL1dpbjMyLXRlbXAtKgogUEMvKi94NjQtdGVtcC0qCiBQQy8qL2FtZDY0Ci1QQ2J1aWxkLyouZXhlCi1QQ2J1aWxkLyouZGxsCi1QQ2J1aWxkLyoucGRiCi1QQ2J1aWxkLyoubGliCi1QQ2J1aWxkLyouZXhwCi1QQ2J1aWxkLyoubwotUENidWlsZC8qLm5jYgotUENidWlsZC8qLmJzYwogUENidWlsZC8qLnVzZXIKIFBDYnVpbGQvKi5zdW8KIFBDYnVpbGQvKi4qc2RmCi1QQ2J1aWxkL1dpbjMyLXRlbXAtKgotUENidWlsZC94NjQtdGVtcC0qCiBQQ2J1aWxkLyotcGdpCiBQQ2J1aWxkLyotcGdvCitQQ2J1aWxkLy52cwogUENidWlsZC9hbWQ2NAotUENidWlsZC9pcGNoCitQQ2J1aWxkL29iagorUENidWlsZC93aW4zMgogVG9vbHMvdW5pY29kZS9idWlsZC8KIFRvb2xzL3VuaWNvZGUvTUFQUElOR1MvCiBCdWlsZExvZy5odG0KIF9fcHljYWNoZV9fCi1Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliCi1Nb2R1bGVzL190ZXN0ZW1iZWQKK1Byb2dyYW1zL19mcmVlemVfaW1wb3J0bGliCitQcm9ncmFtcy9fdGVzdGVtYmVkCiAuY292ZXJhZ2UKIGNvdmVyYWdlLwogZXh0ZXJuYWxzLwpAQCAtOTgsMyArOTUsNiBAQAogKi5nY25vCiAqLmdjb3YKIGNvdmVyYWdlLmluZm8KK1Rvb2xzL21zaS9vYmoKK1Rvb2xzL3NzbC9hbWQ2NAorVG9vbHMvc3NsL3dpbjMyCmRpZmYgLS1naXQgYS8uaGd0YWdzIGIvLmhndGFncwppbmRleCBlMTQxZDYzLi5lZDRmYzkyIDEwMDY0NAotLS0gYS8uaGd0YWdzCisrKyBiLy5oZ3RhZ3MKQEAgLTE0OCwzICsxNDgsMjAgQEAKIDczN2VmY2FkZjVhNjc4YjE4NGUwZmE0MzFhYWUxMTI3NmJmMDY2NDggdjMuNC40CiAzNjMxYmI0YTI0OTAyOTJlYmY4MWQzZTk0N2FlMzZkYTE0NWRhNTY0IHYzLjQuNXJjMQogNjE5YjYxZTUwNWQwZTJjY2M4NTE2YjM2NmU0ZGRkMTk3MWI0NmE2ZiB2My40LjUKKzVkNGI2YTU3ZDVmZDc1NjRiZjczZjNkYjBlNDZmZTVlZWIwMGJjZDggdjMuNS4wYTEKKzAzMzdiZDdlYmNiNjU1OWQ2OTY3OWJjNzAyNTA1OWFkMWNlNGY0MzIgdjMuNS4wYTIKKzgyNjU2ZTI4YjVlNWM0YWU0OGQ4ZGQ4YjVmMGQ3OTY4OTA4YTgyYjYgdjMuNS4wYTMKKzQxM2UwZTAwMDRmNGY5NTQzMzFjYjgxMjJhYTU1ZmUyMDg5ODQ5NTUgdjMuNS4wYTQKKzA3MWZlZmJiNWUzZGI3NzBjNmMxOWZiYTk5OTQ2OTlmMTIxYjFjZWEgdjMuNS4wYjEKKzdhMDg4YWY1NjE1YmYwNDAyNGU5OTEyMDY4ZjRiZDhmNDNlZDM5MTcgdjMuNS4wYjIKKzAwMzVmY2Q5YjkyNDNhZTUyYzJlODMwMjA0ZmQ5YzFmN2Q1Mjg1MzQgdjMuNS4wYjMKK2MwZDY0MTA1NDYzNTgxZjg1ZDBlMzY4ZThkNmU1OWI3ZmQ4ZjEyYjEgdjMuNS4wYjQKKzFhNThiMTIyNzUwMWUwNDZlZWUxM2Q5MGYxMTM0MTdiNjA4NDMzMDEgdjMuNS4wcmMxCitjYzE1ZDczNmQ4NjAzMDNiOWRhOTBkNDNjZDMyZGIzOWJhYjA0OGRmIHYzLjUuMHJjMgorNjZlZDUyMzc1ZGY4MDJmOWQwYTM0NDgwZGFhYThjZTc5ZmM0MTMxMyB2My41LjByYzMKKzJkMDMzZmVkZmE3ZjFlMzI1ZmQxNGNjZGFhOWNiNDIxNTVkYTIwNmYgdjMuNS4wcmM0CiszNzRmNTAxZjQ1NjdiNzU5NWYyYWQ3Nzk4YWEwOWFmYTI0NTZiYjI4IHYzLjUuMAorOTQ4ZWYxNmE2OTUxM2JhMWZmMTVjOWQ3ZDBiMDEyYjk0OWRmNGM4MCB2My41LjFyYzEKKzM3YTA3Y2VlNTk2OWU2ZDM2NzI1ODMxODdhNzNjZjYzNmZmMjhlMWIgdjMuNS4xCis2OGZlZWM2NDg4YjI2MzI3YTg1YTYzNDYwNWRkMjhlY2E0ZGFhNWYxIHYzLjUuMnJjMQorNGRlZjJhMjkwMWE1NjE4ZWE0NWJjYzhmMmExNDExZWYzM2FmMThhZCB2My41LjIKZGlmZiAtLWdpdCBhLy5oZ3RvdWNoIGIvLmhndG91Y2gKaW5kZXggN2UzYTVlNy4uYjliZTBmMSAxMDA2NDQKLS0tIGEvLmhndG91Y2gKKysrIGIvLmhndG91Y2gKQEAgLTIsNyArMiw5IEBACiAjIERlZmluZSBkZXBlbmRlbmNpZXMgb2YgZ2VuZXJhdGVkIGZpbGVzIHRoYXQgYXJlIGNoZWNrZWQgaW50byBoZy4KICMgVGhlIHN5bnRheCBvZiB0aGlzIGZpbGUgdXNlcyBtYWtlIHJ1bGUgZGVwZW5kZW5jaWVzLCB3aXRob3V0IGFjdGlvbnMKIAotUHl0aG9uL2ltcG9ydGxpYi5oOiBMaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCitQeXRob24vaW1wb3J0bGliLmg6IExpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weSBQcm9ncmFtcy9fZnJlZXplX2ltcG9ydGxpYi5jCisKK0luY2x1ZGUvb3Bjb2RlLmg6ICBMaWIvb3Bjb2RlLnB5IFRvb2xzL3NjcmlwdHMvZ2VuZXJhdGVfb3Bjb2RlX2gucHkKIAogSW5jbHVkZS9QeXRob24tYXN0Lmg6IFBhcnNlci9QeXRob24uYXNkbCBQYXJzZXIvYXNkbC5weSBQYXJzZXIvYXNkbF9jLnB5CiBQeXRob24vUHl0aG9uLWFzdC5jOiBJbmNsdWRlL1B5dGhvbi1hc3QuaApkaWZmIC0tZ2l0IGEvRG9jL01ha2VmaWxlIGIvRG9jL01ha2VmaWxlCmluZGV4IDIyMjBkOTIuLjg3ODY4NWQgMTAwNjQ0Ci0tLSBhL0RvYy9NYWtlZmlsZQorKysgYi9Eb2MvTWFrZWZpbGUKQEAgLTE1LDExICsxNSwxMiBAQAogCiAuUEhPTlk6IGhlbHAgYnVpbGQgaHRtbCBodG1saGVscCBsYXRleCB0ZXh0IGNoYW5nZXMgbGlua2NoZWNrIFwKIAlzdXNwaWNpb3VzIGNvdmVyYWdlIGRvY3Rlc3QgcHlkb2MtdG9waWNzIGh0bWx2aWV3IGNsZWFuIGRpc3QgY2hlY2sgc2VydmUgXAotCWF1dG9idWlsZC1kZXYgYXV0b2J1aWxkLXN0YWJsZQorCWF1dG9idWlsZC1kZXYgYXV0b2J1aWxkLXN0YWJsZSB2ZW52CiAKIGhlbHA6CiAJQGVjaG8gIlBsZWFzZSB1c2UgXGBtYWtlIDx0YXJnZXQ+JyB3aGVyZSA8dGFyZ2V0PiBpcyBvbmUgb2YiCiAJQGVjaG8gIiAgY2xlYW4gICAgICB0byByZW1vdmUgYnVpbGQgZmlsZXMiCisJQGVjaG8gIiAgdmVudiAgICAgICB0byBjcmVhdGUgYSB2ZW52IHdpdGggbmVjZXNzYXJ5IHRvb2xzIgogCUBlY2hvICIgIGh0bWwgICAgICAgdG8gbWFrZSBzdGFuZGFsb25lIEhUTUwgZmlsZXMiCiAJQGVjaG8gIiAgaHRtbHZpZXcgICB0byBvcGVuIHRoZSBpbmRleCBwYWdlIGJ1aWx0IGJ5IHRoZSBodG1sIHRhcmdldCBpbiB5b3VyIGJyb3dzZXIiCiAJQGVjaG8gIiAgaHRtbGhlbHAgICB0byBtYWtlIEhUTUwgZmlsZXMgYW5kIGEgSFRNTCBoZWxwIHByb2plY3QiCkBAIC05NSwxNCArOTYsMTggQEAKIAogcHlkb2MtdG9waWNzOiBCVUlMREVSID0gcHlkb2MtdG9waWNzCiBweWRvYy10b3BpY3M6IGJ1aWxkCi0JQGVjaG8gIkJ1aWxkaW5nIGZpbmlzaGVkOyBub3cgY29weSBidWlsZC9weWRvYy10b3BpY3MvdG9waWNzLnB5IiBcCi0JICAgICAgInRvIC4uL0xpYi9weWRvY19kYXRhL3RvcGljcy5weSIKKwlAZWNobyAiQnVpbGRpbmcgZmluaXNoZWQ7IG5vdyBydW4gdGhpczoiIFwKKwkgICAgICAiY3AgYnVpbGQvcHlkb2MtdG9waWNzL3RvcGljcy5weSAuLi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkiCiAKIGh0bWx2aWV3OiBodG1sCiAJICQoUFlUSE9OKSAtYyAiaW1wb3J0IHdlYmJyb3dzZXI7IHdlYmJyb3dzZXIub3BlbignYnVpbGQvaHRtbC9pbmRleC5odG1sJykiCiAKIGNsZWFuOgotCS1ybSAtcmYgYnVpbGQvKgorCS1ybSAtcmYgYnVpbGQvKiB2ZW52LyoKKwordmVudjoKKwkkKFBZVEhPTikgLW0gdmVudiB2ZW52CisJLi92ZW52L2Jpbi9weXRob24zIC1tIHBpcCBpbnN0YWxsIC1VIFNwaGlueAogCiBkaXN0OgogCXJtIC1yZiBkaXN0CmRpZmYgLS1naXQgYS9Eb2MvUkVBRE1FLnR4dCBiL0RvYy9SRUFETUUudHh0CmluZGV4IGY5ODVlNmUuLjRmOGU5ZjggMTAwNjQ0Ci0tLSBhL0RvYy9SRUFETUUudHh0CisrKyBiL0RvYy9SRUFETUUudHh0CkBAIC0zLDcgKzMsNyBAQAogCiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgcmVTdHJ1Y3R1cmVkVGV4dCAocmVTVCkgc291cmNlcyB0byB0aGUgUHl0aG9uCiBkb2N1bWVudGF0aW9uLiAgWW91IGRvbid0IG5lZWQgdG8gYnVpbGQgdGhlbSB5b3Vyc2VsZiwgcHJlYnVpbHQgdmVyc2lvbnMgYXJlCi1hdmFpbGFibGUgYXQgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuNC9kb3dubG9hZC5odG1sPi4KK2F2YWlsYWJsZSBhdCA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2L2Rvd25sb2FkLmh0bWw+LgogCiBEb2N1bWVudGF0aW9uIG9uIGF1dGhvcmluZyBQeXRob24gZG9jdW1lbnRhdGlvbiwgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0CiBib3RoIHN0eWxlIGFuZCBtYXJrdXAsIGlzIGF2YWlsYWJsZSBpbiB0aGUgIkRvY3VtZW50aW5nIFB5dGhvbiIgY2hhcHRlciBvZiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9idWdzLnJzdCBiL0RvYy9idWdzLnJzdAppbmRleCBmMDFhZTBlLi4xYjBhNWE5IDEwMDY0NAotLS0gYS9Eb2MvYnVncy5yc3QKKysrIGIvRG9jL2J1Z3MucnN0CkBAIC0xLDEzICsxLDE2IEBACiAuLiBfcmVwb3J0aW5nLWJ1Z3M6CiAKLSoqKioqKioqKioqKioqCi1SZXBvcnRpbmcgQnVncwotKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqCitEZWFsaW5nIHdpdGggQnVncworKioqKioqKioqKioqKioqKioKIAogUHl0aG9uIGlzIGEgbWF0dXJlIHByb2dyYW1taW5nIGxhbmd1YWdlIHdoaWNoIGhhcyBlc3RhYmxpc2hlZCBhIHJlcHV0YXRpb24gZm9yCiBzdGFiaWxpdHkuICBJbiBvcmRlciB0byBtYWludGFpbiB0aGlzIHJlcHV0YXRpb24sIHRoZSBkZXZlbG9wZXJzIHdvdWxkIGxpa2UgdG8KIGtub3cgb2YgYW55IGRlZmljaWVuY2llcyB5b3UgZmluZCBpbiBQeXRob24uCiAKK0l0IGNhbiBiZSBzb21ldGltZXMgZmFzdGVyIHRvIGZpeCBidWdzIHlvdXJzZWxmIGFuZCBjb250cmlidXRlIHBhdGNoZXMgdG8KK1B5dGhvbiBhcyBpdCBzdHJlYW1saW5lcyB0aGUgcHJvY2VzcyBhbmQgaW52b2x2ZXMgbGVzcyBwZW9wbGUuIExlYXJuIGhvdyB0bworOnJlZjpgY29udHJpYnV0ZSA8Y29udHJpYnV0aW5nLXRvLXB5dGhvbj5gLgogCiBEb2N1bWVudGF0aW9uIGJ1Z3MKID09PT09PT09PT09PT09PT09PQpAQCAtMTYsNyArMTksOCBAQAogcGxlYXNlIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgb24gdGhlIDpyZWY6YHRyYWNrZXIgPHVzaW5nLXRoZS10cmFja2VyPmAuICBJZiB5b3UKIGhhdmUgYSBzdWdnZXN0aW9uIGhvdyB0byBmaXggaXQsIGluY2x1ZGUgdGhhdCBhcyB3ZWxsLgogCi1JZiB5b3UncmUgc2hvcnQgb24gdGltZSwgeW91IGNhbiBhbHNvIGVtYWlsIHlvdXIgYnVnIHJlcG9ydCB0byBkb2NzQHB5dGhvbi5vcmcuCitJZiB5b3UncmUgc2hvcnQgb24gdGltZSwgeW91IGNhbiBhbHNvIGVtYWlsIGRvY3VtZW50YXRpb24gYnVnIHJlcG9ydHMgdG8KK2RvY3NAcHl0aG9uLm9yZyAoYmVoYXZpb3JhbCBidWdzIGNhbiBiZSBzZW50IHRvIHB5dGhvbi1saXN0QHB5dGhvbi5vcmcpLgogJ2RvY3NAJyBpcyBhIG1haWxpbmcgbGlzdCBydW4gYnkgdm9sdW50ZWVyczsgeW91ciByZXF1ZXN0IHdpbGwgYmUgbm90aWNlZCwKIHRob3VnaCBpdCBtYXkgdGFrZSBhIHdoaWxlIHRvIGJlIHByb2Nlc3NlZC4KIApAQCAtNzIsNiArNzYsNyBAQAogICAgICAgSW5mb3JtYXRpb24gYWJvdXQgd3JpdGluZyBhIGdvb2QgYnVnIHJlcG9ydC4gIFNvbWUgb2YgdGhpcyBpcyBzcGVjaWZpYyB0byB0aGUKICAgICAgIE1vemlsbGEgcHJvamVjdCwgYnV0IGRlc2NyaWJlcyBnZW5lcmFsIGdvb2QgcHJhY3RpY2VzLgogCisuLiBfY29udHJpYnV0aW5nLXRvLXB5dGhvbjoKIAogR2V0dGluZyBzdGFydGVkIGNvbnRyaWJ1dGluZyB0byBQeXRob24geW91cnNlbGYKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYXJnLnJzdCBiL0RvYy9jLWFwaS9hcmcucnN0CmluZGV4IDg0MjdiYzQuLjZkNDkzYWEgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9hcmcucnN0CisrKyBiL0RvYy9jLWFwaS9hcmcucnN0CkBAIC0zMCw3ICszMCw3IEBACiBTdHJpbmdzIGFuZCBidWZmZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZXNlIGZvcm1hdHMgYWxsb3cgdG8gYWNjZXNzIGFuIG9iamVjdCBhcyBhIGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5LgorVGhlc2UgZm9ybWF0cyBhbGxvdyBhY2Nlc3NpbmcgYW4gb2JqZWN0IGFzIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkuCiBZb3UgZG9uJ3QgaGF2ZSB0byBwcm92aWRlIHJhdyBzdG9yYWdlIGZvciB0aGUgcmV0dXJuZWQgdW5pY29kZSBvciBieXRlcwogYXJlYS4gIEFsc28sIHlvdSB3b24ndCBoYXZlIHRvIHJlbGVhc2UgYW55IG1lbW9yeSB5b3Vyc2VsZiwgZXhjZXB0IHdpdGggdGhlCiBgYGVzYGAsIGBgZXMjYGAsIGBgZXRgYCBhbmQgYGBldCNgYCBmb3JtYXRzLgpAQCAtNTksOCArNTksOCBAQAogICAgQ29udmVydCBhIFVuaWNvZGUgb2JqZWN0IHRvIGEgQyBwb2ludGVyIHRvIGEgY2hhcmFjdGVyIHN0cmluZy4KICAgIEEgcG9pbnRlciB0byBhbiBleGlzdGluZyBzdHJpbmcgaXMgc3RvcmVkIGluIHRoZSBjaGFyYWN0ZXIgcG9pbnRlcgogICAgdmFyaWFibGUgd2hvc2UgYWRkcmVzcyB5b3UgcGFzcy4gIFRoZSBDIHN0cmluZyBpcyBOVUwtdGVybWluYXRlZC4KLSAgIFRoZSBQeXRob24gc3RyaW5nIG11c3Qgbm90IGNvbnRhaW4gZW1iZWRkZWQgTlVMIGJ5dGVzOyBpZiBpdCBkb2VzLAotICAgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuIFVuaWNvZGUgb2JqZWN0cyBhcmUgY29udmVydGVkCisgICBUaGUgUHl0aG9uIHN0cmluZyBtdXN0IG5vdCBjb250YWluIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVyczsgaWYgaXQgZG9lcywKKyAgIGEgOmV4YzpgVmFsdWVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gVW5pY29kZSBvYmplY3RzIGFyZSBjb252ZXJ0ZWQKICAgIHRvIEMgc3RyaW5ncyB1c2luZyBgYCd1dGYtOCdgYCBlbmNvZGluZy4gSWYgdGhpcyBjb252ZXJzaW9uIGZhaWxzLCBhCiAgICA6ZXhjOmBVbmljb2RlRXJyb3JgIGlzIHJhaXNlZC4KIApAQCAtNzEsNiArNzEsMTAgQEAKICAgICAgIHByZWZlcmFibGUgdG8gdXNlIHRoZSBgYE8mYGAgZm9ybWF0IHdpdGggOmM6ZnVuYzpgUHlVbmljb2RlX0ZTQ29udmVydGVyYAogICAgICAgYXMgKmNvbnZlcnRlciouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBQcmV2aW91c2x5LCA6ZXhjOmBUeXBlRXJyb3JgIHdhcyByYWlzZWQgd2hlbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMKKyAgICAgIHdlcmUgZW5jb3VudGVyZWQgaW4gdGhlIFB5dGhvbiBzdHJpbmcuCisKIGBgcypgYCAoOmNsYXNzOmBzdHJgIG9yIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGApIFtQeV9idWZmZXJdCiAgICBUaGlzIGZvcm1hdCBhY2NlcHRzIFVuaWNvZGUgb2JqZWN0cyBhcyB3ZWxsIGFzIGJ5dGVzLWxpa2Ugb2JqZWN0cy4KICAgIEl0IGZpbGxzIGEgOmM6dHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KQEAgLTk5LDkgKzEwMywxMyBAQAogYGB5YGAgKHJlYWQtb25seSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSBbY29uc3QgY2hhciBcKl0KICAgIFRoaXMgZm9ybWF0IGNvbnZlcnRzIGEgYnl0ZXMtbGlrZSBvYmplY3QgdG8gYSBDIHBvaW50ZXIgdG8gYSBjaGFyYWN0ZXIKICAgIHN0cmluZzsgaXQgZG9lcyBub3QgYWNjZXB0IFVuaWNvZGUgb2JqZWN0cy4gIFRoZSBieXRlcyBidWZmZXIgbXVzdCBub3QKLSAgIGNvbnRhaW4gZW1iZWRkZWQgTlVMIGJ5dGVzOyBpZiBpdCBkb2VzLCBhIDpleGM6YFR5cGVFcnJvcmAKKyAgIGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBieXRlczsgaWYgaXQgZG9lcywgYSA6ZXhjOmBWYWx1ZUVycm9yYAogICAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFByZXZpb3VzbHksIDpleGM6YFR5cGVFcnJvcmAgd2FzIHJhaXNlZCB3aGVuIGVtYmVkZGVkIG51bGwgYnl0ZXMgd2VyZQorICAgICAgZW5jb3VudGVyZWQgaW4gdGhlIGJ5dGVzIGJ1ZmZlci4KKwogYGB5KmBgICg6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSBbUHlfYnVmZmVyXQogICAgVGhpcyB2YXJpYW50IG9uIGBgcypgYCBkb2Vzbid0IGFjY2VwdCBVbmljb2RlIG9iamVjdHMsIG9ubHkKICAgIGJ5dGVzLWxpa2Ugb2JqZWN0cy4gICoqVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGFjY2VwdApAQCAtMTI3LDE0ICsxMzUsMTggQEAKICAgIHBvaW50ZXIgdmFyaWFibGUsIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHdpdGggdGhlIHBvaW50ZXIgdG8gYW4gZXhpc3RpbmcKICAgIFVuaWNvZGUgYnVmZmVyLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGUgd2lkdGggb2YgYSA6Yzp0eXBlOmBQeV9VTklDT0RFYAogICAgY2hhcmFjdGVyIGRlcGVuZHMgb24gY29tcGlsYXRpb24gb3B0aW9ucyAoaXQgaXMgZWl0aGVyIDE2IG9yIDMyIGJpdHMpLgotICAgVGhlIFB5dGhvbiBzdHJpbmcgbXVzdCBub3QgY29udGFpbiBlbWJlZGRlZCBOVUwgY2hhcmFjdGVyczsgaWYgaXQgZG9lcywKLSAgIGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgVGhlIFB5dGhvbiBzdHJpbmcgbXVzdCBub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnM7IGlmIGl0IGRvZXMsCisgICBhIDpleGM6YFZhbHVlRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKICAgIC4uIG5vdGU6OgogICAgICAgU2luY2UgYGB1YGAgZG9lc24ndCBnaXZlIHlvdSBiYWNrIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgYW5kIGl0CiAgICAgICBtYXkgY29udGFpbiBlbWJlZGRlZCBOVUwgY2hhcmFjdGVycywgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGBgdSNgYAogICAgICAgb3IgYGBVYGAgaW5zdGVhZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFByZXZpb3VzbHksIDpleGM6YFR5cGVFcnJvcmAgd2FzIHJhaXNlZCB3aGVuIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVycworICAgICAgd2VyZSBlbmNvdW50ZXJlZCBpbiB0aGUgUHl0aG9uIHN0cmluZy4KKwogYGB1I2BgICg6Y2xhc3M6YHN0cmApIFtQeV9VTklDT0RFIFwqLCBpbnRdCiAgICBUaGlzIHZhcmlhbnQgb24gYGB1YGAgc3RvcmVzIGludG8gdHdvIEMgdmFyaWFibGVzLCB0aGUgZmlyc3Qgb25lIGEgcG9pbnRlciB0byBhCiAgICBVbmljb2RlIGRhdGEgYnVmZmVyLCB0aGUgc2Vjb25kIG9uZSBpdHMgbGVuZ3RoLgpAQCAtMTUyLDcgKzE2NCw3IEBACiAgICBhbnkgY29udmVyc2lvbi4gIFJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoZSBvYmplY3QgaXMgbm90IGEgVW5pY29kZQogICAgb2JqZWN0LiAgVGhlIEMgdmFyaWFibGUgbWF5IGFsc28gYmUgZGVjbGFyZWQgYXMgOmM6dHlwZTpgUHlPYmplY3RcKmAuCiAKLWBgdypgYCAoOmNsYXNzOmBieXRlYXJyYXlgIG9yIHJlYWQtd3JpdGUgYnl0ZS1vcmllbnRlZCBidWZmZXIpIFtQeV9idWZmZXJdCitgYHcqYGAgKHJlYWQtd3JpdGUgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCkgW1B5X2J1ZmZlcl0KICAgIFRoaXMgZm9ybWF0IGFjY2VwdHMgYW55IG9iamVjdCB3aGljaCBpbXBsZW1lbnRzIHRoZSByZWFkLXdyaXRlIGJ1ZmZlcgogICAgaW50ZXJmYWNlLiBJdCBmaWxscyBhIDpjOnR5cGU6YFB5X2J1ZmZlcmAgc3RydWN0dXJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCiAgICBUaGUgYnVmZmVyIG1heSBjb250YWluIGVtYmVkZGVkIG51bGwgYnl0ZXMuIFRoZSBjYWxsZXIgaGF2ZSB0byBjYWxsCkBAIC0yMDYsNyArMjE4LDggQEAKICAgIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIHdpbGwgdXNlIHRoaXMgbG9jYXRpb24gYXMgdGhlIGJ1ZmZlciBhbmQgaW50ZXJwcmV0IHRoZQogICAgaW5pdGlhbCB2YWx1ZSBvZiAqXCpidWZmZXJfbGVuZ3RoKiBhcyB0aGUgYnVmZmVyIHNpemUuICBJdCB3aWxsIHRoZW4gY29weSB0aGUKICAgIGVuY29kZWQgZGF0YSBpbnRvIHRoZSBidWZmZXIgYW5kIE5VTC10ZXJtaW5hdGUgaXQuICBJZiB0aGUgYnVmZmVyIGlzIG5vdCBsYXJnZQotICAgZW5vdWdoLCBhIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgc2V0LgorICAgZW5vdWdoLCBhIDpleGM6YFR5cGVFcnJvcmAgd2lsbCBiZSBzZXQuCisgICBOb3RlOiBzdGFydGluZyBmcm9tIFB5dGhvbiAzLjYgYSA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHNldC4KIAogICAgSW4gYm90aCBjYXNlcywgKlwqYnVmZmVyX2xlbmd0aCogaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kZWQgZGF0YQogICAgd2l0aG91dCB0aGUgdHJhaWxpbmcgTlVMIGJ5dGUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYnVmZmVyLnJzdCBiL0RvYy9jLWFwaS9idWZmZXIucnN0CmluZGV4IDczNjEwOTkuLjQ1Yzk0ODggMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9idWZmZXIucnN0CisrKyBiL0RvYy9jLWFwaS9idWZmZXIucnN0CkBAIC05Niw4ICs5Niw4IEBACiAgICAgICBibG9jayBvZiB0aGUgZXhwb3J0ZXIuIEZvciBleGFtcGxlLCB3aXRoIG5lZ2F0aXZlIDpjOm1lbWJlcjpgflB5X2J1ZmZlci5zdHJpZGVzYAogICAgICAgdGhlIHZhbHVlIG1heSBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBtZW1vcnkgYmxvY2suCiAKLSAgICAgIEZvciBjb250aWd1b3VzIGFycmF5cywgdGhlIHZhbHVlIHBvaW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtZW1vcnkKLSAgICAgIGJsb2NrLgorICAgICAgRm9yIDp0ZXJtOmBjb250aWd1b3VzYCBhcnJheXMsIHRoZSB2YWx1ZSBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZgorICAgICAgdGhlIG1lbW9yeSBibG9jay4KIAogICAgLi4gYzptZW1iZXI6OiB2b2lkIFwqb2JqCiAKQEAgLTI4MSwxMSArMjgxLDE0IEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogCiAKKy4uIGluZGV4OjogY29udGlndW91cywgQy1jb250aWd1b3VzLCBGb3J0cmFuIGNvbnRpZ3VvdXMKKwogY29udGlndWl0eSByZXF1ZXN0cwogfn5+fn5+fn5+fn5+fn5+fn5+fgogCi1DIG9yIEZvcnRyYW4gY29udGlndWl0eSBjYW4gYmUgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHdpdGggYW5kIHdpdGhvdXQgc3RyaWRlCi1pbmZvcm1hdGlvbi4gV2l0aG91dCBzdHJpZGUgaW5mb3JtYXRpb24sIHRoZSBidWZmZXIgbXVzdCBiZSBDLWNvbnRpZ3VvdXMuCitDIG9yIEZvcnRyYW4gOnRlcm06YGNvbnRpZ3VpdHkgPGNvbnRpZ3VvdXM+YCBjYW4gYmUgZXhwbGljaXRseSByZXF1ZXN0ZWQsCit3aXRoIGFuZCB3aXRob3V0IHN0cmlkZSBpbmZvcm1hdGlvbi4gV2l0aG91dCBzdHJpZGUgaW5mb3JtYXRpb24sIHRoZSBidWZmZXIKK211c3QgYmUgQy1jb250aWd1b3VzLgogCiAuLiB0YWJ1bGFyY29sdW1uczo6IHxwezAuMzVcbGluZXdpZHRofXxsfGx8bHxsfAogCkBAIC00NjYsMTMgKzQ2OSwxMyBAQAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoUHlfYnVmZmVyICp2aWV3LCBjaGFyIG9yZGVyKQogCiAgICBSZXR1cm4gMSBpZiB0aGUgbWVtb3J5IGRlZmluZWQgYnkgdGhlICp2aWV3KiBpcyBDLXN0eWxlICgqb3JkZXIqIGlzCi0gICBgYCdDJ2BgKSBvciBGb3J0cmFuLXN0eWxlICgqb3JkZXIqIGlzIGBgJ0YnYGApIGNvbnRpZ3VvdXMgb3IgZWl0aGVyIG9uZQorICAgYGAnQydgYCkgb3IgRm9ydHJhbi1zdHlsZSAoKm9yZGVyKiBpcyBgYCdGJ2BgKSA6dGVybTpgY29udGlndW91c2Agb3IgZWl0aGVyIG9uZQogICAgKCpvcmRlciogaXMgYGAnQSdgYCkuICBSZXR1cm4gMCBvdGhlcndpc2UuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlCdWZmZXJfRmlsbENvbnRpZ3VvdXNTdHJpZGVzKGludCBuZGltLCBQeV9zc2l6ZV90ICpzaGFwZSwgUHlfc3NpemVfdCAqc3RyaWRlcywgUHlfc3NpemVfdCBpdGVtc2l6ZSwgY2hhciBvcmRlcikKIAotICAgRmlsbCB0aGUgKnN0cmlkZXMqIGFycmF5IHdpdGggYnl0ZS1zdHJpZGVzIG9mIGEgY29udGlndW91cyAoQy1zdHlsZSBpZgorICAgRmlsbCB0aGUgKnN0cmlkZXMqIGFycmF5IHdpdGggYnl0ZS1zdHJpZGVzIG9mIGEgOnRlcm06YGNvbnRpZ3VvdXNgIChDLXN0eWxlIGlmCiAgICAqb3JkZXIqIGlzIGBgJ0MnYGAgb3IgRm9ydHJhbi1zdHlsZSBpZiAqb3JkZXIqIGlzIGBgJ0YnYGApIGFycmF5IG9mIHRoZQogICAgZ2l2ZW4gc2hhcGUgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJ5dGVzIHBlciBlbGVtZW50LgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYnl0ZXMucnN0IGIvRG9jL2MtYXBpL2J5dGVzLnJzdAppbmRleCAyM2I3MTI4Li5kY2Q3MDg4IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvYnl0ZXMucnN0CisrKyBiL0RvYy9jLWFwaS9ieXRlcy5yc3QKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiAgICBJZiAqbGVuZ3RoKiBpcyAqTlVMTCosIHRoZSBieXRlcyBvYmplY3QKICAgIG1heSBub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGJ5dGVzOwotICAgaWYgaXQgZG9lcywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGAtMWBgIGFuZCBhIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkLgorICAgaWYgaXQgZG9lcywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGAtMWBgIGFuZCBhIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgVGhlIGJ1ZmZlciByZWZlcnMgdG8gYW4gaW50ZXJuYWwgYnVmZmVyIG9mICpvYmoqLCB3aGljaCBpbmNsdWRlcyBhbgogICAgYWRkaXRpb25hbCBudWxsIGJ5dGUgYXQgdGhlIGVuZCAobm90IGNvdW50ZWQgaW4gKmxlbmd0aCopLiAgVGhlIGRhdGEKQEAgLTE2Nyw2ICsxNjcsMTAgQEAKICAgICpvYmoqIGlzIG5vdCBhIGJ5dGVzIG9iamVjdCBhdCBhbGwsIDpjOmZ1bmM6YFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplYAogICAgcmV0dXJucyBgYC0xYGAgYW5kIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgUHJldmlvdXNseSwgOmV4YzpgVHlwZUVycm9yYCB3YXMgcmFpc2VkIHdoZW4gZW1iZWRkZWQgbnVsbCBieXRlcyB3ZXJlCisgICAgICBlbmNvdW50ZXJlZCBpbiB0aGUgYnl0ZXMgb2JqZWN0LgorCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5Qnl0ZXNfQ29uY2F0KFB5T2JqZWN0ICoqYnl0ZXMsIFB5T2JqZWN0ICpuZXdwYXJ0KQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29kZS5yc3QgYi9Eb2MvYy1hcGkvY29kZS5yc3QKaW5kZXggOWM5MzU2My4uMTBkODlmMiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2NvZGUucnN0CisrKyBiL0RvYy9jLWFwaS9jb2RlLnJzdApAQCAtMiwxNSArMiwxMyBAQAogCiAuLiBfY29kZW9iamVjdHM6CiAKKy4uIGluZGV4Ojogb2JqZWN0OyBjb2RlLCBjb2RlIG9iamVjdAorCiBDb2RlIE9iamVjdHMKIC0tLS0tLS0tLS0tLQogCiAuLiBzZWN0aW9uYXV0aG9yOjogSmVmZnJleSBZYXNza2luIDxqeWFzc2tpbkBnbWFpbC5jb20+CiAKLQotLi4gaW5kZXg6OgotICAgb2JqZWN0OiBjb2RlCi0KIENvZGUgb2JqZWN0cyBhcmUgYSBsb3ctbGV2ZWwgZGV0YWlsIG9mIHRoZSBDUHl0aG9uIGltcGxlbWVudGF0aW9uLgogRWFjaCBvbmUgcmVwcmVzZW50cyBhIGNodW5rIG9mIGV4ZWN1dGFibGUgY29kZSB0aGF0IGhhc24ndCB5ZXQgYmVlbgogYm91bmQgaW50byBhIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvZGVjLnJzdCBiL0RvYy9jLWFwaS9jb2RlYy5yc3QKaW5kZXggODMyNTJhZi4uZGZlM2Q0MyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2NvZGVjLnJzdAorKysgYi9Eb2MvYy1hcGkvY29kZWMucnN0CkBAIC0xMTYsMyArMTE2LDggQEAKICAgIFJlcGxhY2UgdGhlIHVuaWNvZGUgZW5jb2RlIGVycm9yIHdpdGggYmFja3NsYXNoIGVzY2FwZXMgKGBgXHhgYCwgYGBcdWBgIGFuZAogICAgYGBcVWBgKS4KIAorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX05hbWVSZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpCisKKyAgIFJlcGxhY2UgdGhlIHVuaWNvZGUgZW5jb2RlIGVycm9yIHdpdGggYGBcTnsuLi59YGAgZXNjYXBlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0IGIvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAppbmRleCAyZDU2Mzg2Li40N2RhYjgxIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0CisrKyBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKQEAgLTExMiw1ICsxMTIsNiBAQAogICAgd2Vha3JlZi5yc3QKICAgIGNhcHN1bGUucnN0CiAgICBnZW4ucnN0CisgICBjb3JvLnJzdAogICAgZGF0ZXRpbWUucnN0CiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb3JvLnJzdCBiL0RvYy9jLWFwaS9jb3JvLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmU1MGI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2MtYXBpL2Nvcm8ucnN0CkBAIC0wLDAgKzEsMzQgQEAKKy4uIGhpZ2hsaWdodGxhbmc6OiBjCisKKy4uIF9jb3JvLW9iamVjdHM6CisKK0Nvcm91dGluZSBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworQ29yb3V0aW5lIG9iamVjdHMgYXJlIHdoYXQgZnVuY3Rpb25zIGRlY2xhcmVkIHdpdGggYW4gYGBhc3luY2BgIGtleXdvcmQKK3JldHVybi4KKworCisuLiBjOnR5cGU6OiBQeUNvcm9PYmplY3QKKworICAgVGhlIEMgc3RydWN0dXJlIHVzZWQgZm9yIGNvcm91dGluZSBvYmplY3RzLgorCisKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5Q29yb19UeXBlCisKKyAgIFRoZSB0eXBlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGNvcm91dGluZSBvYmplY3RzLgorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDb3JvX0NoZWNrRXhhY3QoUHlPYmplY3QgKm9iKQorCisgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqJ3MgdHlwZSBpcyAqUHlDb3JvX1R5cGUqOyAqb2IqIG11c3Qgbm90IGJlICpOVUxMKi4KKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29yb19OZXcoUHlGcmFtZU9iamVjdCAqZnJhbWUsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqcXVhbG5hbWUpCisKKyAgIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGNvcm91dGluZSBvYmplY3QgYmFzZWQgb24gdGhlICpmcmFtZSogb2JqZWN0LAorICAgd2l0aCBgYF9fbmFtZV9fYGAgYW5kIGBgX19xdWFsbmFtZV9fYGAgc2V0IHRvICpuYW1lKiBhbmQgKnF1YWxuYW1lKi4KKyAgIEEgcmVmZXJlbmNlIHRvICpmcmFtZSogaXMgc3RvbGVuIGJ5IHRoaXMgZnVuY3Rpb24uICBUaGUgKmZyYW1lKiBhcmd1bWVudAorICAgbXVzdCBub3QgYmUgKk5VTEwqLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2RpY3QucnN0IGIvRG9jL2MtYXBpL2RpY3QucnN0CmluZGV4IGFlZmY2NDAuLmNmYTVlMTMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9kaWN0LnJzdAorKysgYi9Eb2MvYy1hcGkvZGljdC5yc3QKQEAgLTExOCw2ICsxMTgsNyBAQAogICAgaXMgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB0aGUgaGFzaCBmdW5jdGlvbiBvZiAqa2V5KiBvbmx5IG9uY2UsCiAgICBpbnN0ZWFkIG9mIGV2YWx1YXRpbmcgaXQgaW5kZXBlbmRlbnRseSBmb3IgdGhlIGxvb2t1cCBhbmQgdGhlIGluc2VydGlvbi4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X0l0ZW1zKFB5T2JqZWN0ICpwKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKaW5kZXggYzJkZjc2Ny4uMTljYmIzYiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdApAQCAtOSwxMyArOSwxOSBAQAogCiBUaGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiB0aGlzIGNoYXB0ZXIgd2lsbCBsZXQgeW91IGhhbmRsZSBhbmQgcmFpc2UgUHl0aG9uCiBleGNlcHRpb25zLiAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgc29tZSBvZiB0aGUgYmFzaWNzIG9mIFB5dGhvbgotZXhjZXB0aW9uIGhhbmRsaW5nLiAgSXQgd29ya3Mgc29tZXdoYXQgbGlrZSB0aGUgVW5peCA6YzpkYXRhOmBlcnJub2AgdmFyaWFibGU6CitleGNlcHRpb24gaGFuZGxpbmcuICBJdCB3b3JrcyBzb21ld2hhdCBsaWtlIHRoZSBQT1NJWCA6YzpkYXRhOmBlcnJub2AgdmFyaWFibGU6CiB0aGVyZSBpcyBhIGdsb2JhbCBpbmRpY2F0b3IgKHBlciB0aHJlYWQpIG9mIHRoZSBsYXN0IGVycm9yIHRoYXQgb2NjdXJyZWQuICBNb3N0Ci1mdW5jdGlvbnMgZG9uJ3QgY2xlYXIgdGhpcyBvbiBzdWNjZXNzLCBidXQgd2lsbCBzZXQgaXQgdG8gaW5kaWNhdGUgdGhlIGNhdXNlIG9mCi10aGUgZXJyb3Igb24gZmFpbHVyZS4gIE1vc3QgZnVuY3Rpb25zIGFsc28gcmV0dXJuIGFuIGVycm9yIGluZGljYXRvciwgdXN1YWxseQotKk5VTEwqIGlmIHRoZXkgYXJlIHN1cHBvc2VkIHRvIHJldHVybiBhIHBvaW50ZXIsIG9yIGBgLTFgYCBpZiB0aGV5IHJldHVybiBhbgotaW50ZWdlciAoZXhjZXB0aW9uOiB0aGUgOmM6ZnVuYzpgUHlBcmdfXCpgIGZ1bmN0aW9ucyByZXR1cm4gYGAxYGAgZm9yIHN1Y2Nlc3MgYW5kCi1gYDBgYCBmb3IgZmFpbHVyZSkuCitDIEFQSSBmdW5jdGlvbnMgZG9uJ3QgY2xlYXIgdGhpcyBvbiBzdWNjZXNzLCBidXQgd2lsbCBzZXQgaXQgdG8gaW5kaWNhdGUgdGhlCitjYXVzZSBvZiB0aGUgZXJyb3Igb24gZmFpbHVyZS4gIE1vc3QgQyBBUEkgZnVuY3Rpb25zIGFsc28gcmV0dXJuIGFuIGVycm9yCitpbmRpY2F0b3IsIHVzdWFsbHkgKk5VTEwqIGlmIHRoZXkgYXJlIHN1cHBvc2VkIHRvIHJldHVybiBhIHBvaW50ZXIsIG9yIGBgLTFgYAoraWYgdGhleSByZXR1cm4gYW4gaW50ZWdlciAoZXhjZXB0aW9uOiB0aGUgOmM6ZnVuYzpgUHlBcmdfXCpgIGZ1bmN0aW9ucworcmV0dXJuIGBgMWBgIGZvciBzdWNjZXNzIGFuZCBgYDBgYCBmb3IgZmFpbHVyZSkuCisKK0NvbmNyZXRlbHksIHRoZSBlcnJvciBpbmRpY2F0b3IgY29uc2lzdHMgb2YgdGhyZWUgb2JqZWN0IHBvaW50ZXJzOiB0aGUKK2V4Y2VwdGlvbidzIHR5cGUsIHRoZSBleGNlcHRpb24ncyB2YWx1ZSwgYW5kIHRoZSB0cmFjZWJhY2sgb2JqZWN0LiAgQW55CitvZiB0aG9zZSBwb2ludGVycyBjYW4gYmUgTlVMTCBpZiBub24tc2V0IChhbHRob3VnaCBzb21lIGNvbWJpbmF0aW9ucyBhcmUKK2ZvcmJpZGRlbiwgZm9yIGV4YW1wbGUgeW91IGNhbid0IGhhdmUgYSBub24tTlVMTCB0cmFjZWJhY2sgaWYgdGhlIGV4Y2VwdGlvbgordHlwZSBpcyBOVUxMKS4KIAogV2hlbiBhIGZ1bmN0aW9uIG11c3QgZmFpbCBiZWNhdXNlIHNvbWUgZnVuY3Rpb24gaXQgY2FsbGVkIGZhaWxlZCwgaXQgZ2VuZXJhbGx5CiBkb2Vzbid0IHNldCB0aGUgZXJyb3IgaW5kaWNhdG9yOyB0aGUgZnVuY3Rpb24gaXQgY2FsbGVkIGFscmVhZHkgc2V0IGl0LiAgSXQgaXMKQEAgLTI3LDEyICszMywyMSBAQAogcHJvcGFnYXRlZCwgYWRkaXRpb25hbCBjYWxscyBpbnRvIHRoZSBQeXRob24vQyBBUEkgbWF5IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQKIGFuZCBtYXkgZmFpbCBpbiBteXN0ZXJpb3VzIHdheXMuCiAKLVRoZSBlcnJvciBpbmRpY2F0b3IgY29uc2lzdHMgb2YgdGhyZWUgUHl0aG9uIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcmVzdWx0Ci1vZiBgYHN5cy5leGNfaW5mbygpYGAuICBBUEkgZnVuY3Rpb25zIGV4aXN0IHRvIGludGVyYWN0IHdpdGggdGhlIGVycm9yIGluZGljYXRvcgotaW4gdmFyaW91cyB3YXlzLiAgVGhlcmUgaXMgYSBzZXBhcmF0ZSBlcnJvciBpbmRpY2F0b3IgZm9yIGVhY2ggdGhyZWFkLgorLi4gbm90ZTo6CisgICBUaGUgZXJyb3IgaW5kaWNhdG9yIGlzICoqbm90KiogdGhlIHJlc3VsdCBvZiA6ZnVuYzpgc3lzLmV4Y19pbmZvKClgLgorICAgVGhlIGZvcm1lciBjb3JyZXNwb25kcyB0byBhbiBleGNlcHRpb24gdGhhdCBpcyBub3QgeWV0IGNhdWdodCAoYW5kIGlzCisgICB0aGVyZWZvcmUgc3RpbGwgcHJvcGFnYXRpbmcpLCB3aGlsZSB0aGUgbGF0dGVyIHJldHVybnMgYW4gZXhjZXB0aW9uIGFmdGVyCisgICBpdCBpcyBjYXVnaHQgKGFuZCBoYXMgdGhlcmVmb3JlIHN0b3BwZWQgcHJvcGFnYXRpbmcpLgogCi0uLiBYWFggT3JkZXIgb2YgdGhlc2Ugc2hvdWxkIGJlIG1vcmUgdGhvdWdodGZ1bC4KLSAgIEVpdGhlciBhbHBoYWJldGljYWwgb3Igc29tZSBraW5kIG9mIHN0cnVjdHVyZS4KKworUHJpbnRpbmcgYW5kIGNsZWFyaW5nCis9PT09PT09PT09PT09PT09PT09PT0KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9DbGVhcigpCisKKyAgIENsZWFyIHRoZSBlcnJvciBpbmRpY2F0b3IuICBJZiB0aGUgZXJyb3IgaW5kaWNhdG9yIGlzIG5vdCBzZXQsIHRoZXJlIGlzIG5vCisgICBlZmZlY3QuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfUHJpbnRFeChpbnQgc2V0X3N5c19sYXN0X3ZhcnMpCkBAIC01MSwxMjcgKzY2LDI0IEBACiAgICBBbGlhcyBmb3IgYGBQeUVycl9QcmludEV4KDEpYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9PY2N1cnJlZCgpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9Xcml0ZVVucmFpc2FibGUoUHlPYmplY3QgKm9iaikKIAotICAgVGVzdCB3aGV0aGVyIHRoZSBlcnJvciBpbmRpY2F0b3IgaXMgc2V0LiAgSWYgc2V0LCByZXR1cm4gdGhlIGV4Y2VwdGlvbiAqdHlwZSoKLSAgICh0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGxhc3QgY2FsbCB0byBvbmUgb2YgdGhlIDpjOmZ1bmM6YFB5RXJyX1NldFwqYAotICAgZnVuY3Rpb25zIG9yIHRvIDpjOmZ1bmM6YFB5RXJyX1Jlc3RvcmVgKS4gIElmIG5vdCBzZXQsIHJldHVybiAqTlVMTCouICBZb3UgZG8gbm90Ci0gICBvd24gYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybiB2YWx1ZSwgc28geW91IGRvIG5vdCBuZWVkIHRvIDpjOmZ1bmM6YFB5X0RFQ1JFRmAKLSAgIGl0LgorICAgVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIHByaW50cyBhIHdhcm5pbmcgbWVzc2FnZSB0byBgYHN5cy5zdGRlcnJgYCB3aGVuIGFuCisgICBleGNlcHRpb24gaGFzIGJlZW4gc2V0IGJ1dCBpdCBpcyBpbXBvc3NpYmxlIGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gYWN0dWFsbHkKKyAgIHJhaXNlIHRoZSBleGNlcHRpb24uICBJdCBpcyB1c2VkLCBmb3IgZXhhbXBsZSwgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIGFuCisgICA6bWV0aDpgX19kZWxfX2AgbWV0aG9kLgogCi0gICAuLiBub3RlOjoKLQotICAgICAgRG8gbm90IGNvbXBhcmUgdGhlIHJldHVybiB2YWx1ZSB0byBhIHNwZWNpZmljIGV4Y2VwdGlvbjsgdXNlCi0gICAgICA6YzpmdW5jOmBQeUVycl9FeGNlcHRpb25NYXRjaGVzYCBpbnN0ZWFkLCBzaG93biBiZWxvdy4gIChUaGUgY29tcGFyaXNvbiBjb3VsZAotICAgICAgZWFzaWx5IGZhaWwgc2luY2UgdGhlIGV4Y2VwdGlvbiBtYXkgYmUgYW4gaW5zdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzLCBpbiB0aGUKLSAgICAgIGNhc2Ugb2YgYSBjbGFzcyBleGNlcHRpb24sIG9yIGl0IG1heSBiZSBhIHN1YmNsYXNzIG9mIHRoZSBleHBlY3RlZCBleGNlcHRpb24uKQorICAgVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50ICpvYmoqIHRoYXQgaWRlbnRpZmllcyB0aGUgY29udGV4dAorICAgaW4gd2hpY2ggdGhlIHVucmFpc2FibGUgZXhjZXB0aW9uIG9jY3VycmVkLiBJZiBwb3NzaWJsZSwKKyAgIHRoZSByZXByIG9mICpvYmoqIHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgd2FybmluZyBtZXNzYWdlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeU9iamVjdCAqZXhjKQorUmFpc2luZyBleGNlcHRpb25zCis9PT09PT09PT09PT09PT09PT0KIAotICAgRXF1aXZhbGVudCB0byBgYFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhQeUVycl9PY2N1cnJlZCgpLCBleGMpYGAuICBUaGlzCi0gICBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhbiBleGNlcHRpb24gaXMgYWN0dWFsbHkgc2V0OyBhIG1lbW9yeSBhY2Nlc3MKLSAgIHZpb2xhdGlvbiB3aWxsIG9jY3VyIGlmIG5vIGV4Y2VwdGlvbiBoYXMgYmVlbiByYWlzZWQuCi0KLQotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoUHlPYmplY3QgKmdpdmVuLCBQeU9iamVjdCAqZXhjKQotCi0gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgKmdpdmVuKiBleGNlcHRpb24gbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGluICpleGMqLiAgSWYKLSAgICpleGMqIGlzIGEgY2xhc3Mgb2JqZWN0LCB0aGlzIGFsc28gcmV0dXJucyB0cnVlIHdoZW4gKmdpdmVuKiBpcyBhbiBpbnN0YW5jZQotICAgb2YgYSBzdWJjbGFzcy4gIElmICpleGMqIGlzIGEgdHVwbGUsIGFsbCBleGNlcHRpb25zIGluIHRoZSB0dXBsZSAoYW5kCi0gICByZWN1cnNpdmVseSBpbiBzdWJ0dXBsZXMpIGFyZSBzZWFyY2hlZCBmb3IgYSBtYXRjaC4KLQotCi0uLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oUHlPYmplY3QqKmV4YywgUHlPYmplY3QqKnZhbCwgUHlPYmplY3QqKnRiKQotCi0gICBVbmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgOmM6ZnVuYzpgUHlFcnJfRmV0Y2hgIGJlbG93Ci0gICBjYW4gYmUgInVubm9ybWFsaXplZCIsIG1lYW5pbmcgdGhhdCBgYCpleGNgYCBpcyBhIGNsYXNzIG9iamVjdCBidXQgYGAqdmFsYGAgaXMKLSAgIG5vdCBhbiBpbnN0YW5jZSBvZiB0aGUgIHNhbWUgY2xhc3MuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGluc3RhbnRpYXRlCi0gICB0aGUgY2xhc3MgaW4gdGhhdCBjYXNlLiAgSWYgdGhlIHZhbHVlcyBhcmUgYWxyZWFkeSBub3JtYWxpemVkLCBub3RoaW5nIGhhcHBlbnMuCi0gICBUaGUgZGVsYXllZCBub3JtYWxpemF0aW9uIGlzIGltcGxlbWVudGVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCi0KLSAgIC4uIG5vdGU6OgotCi0gICAgICBUaGlzIGZ1bmN0aW9uICpkb2VzIG5vdCogaW1wbGljaXRseSBzZXQgdGhlIGBgX190cmFjZWJhY2tfX2BgCi0gICAgICBhdHRyaWJ1dGUgb24gdGhlIGV4Y2VwdGlvbiB2YWx1ZS4gSWYgc2V0dGluZyB0aGUgdHJhY2ViYWNrCi0gICAgICBhcHByb3ByaWF0ZWx5IGlzIGRlc2lyZWQsIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBzbmlwcGV0IGlzIG5lZWRlZDo6Ci0KLSAgICAgICAgIGlmICh0YiAhPSBOVUxMKSB7Ci0gICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIHRiKTsKLSAgICAgICAgIH0KLQotCi0uLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9DbGVhcigpCi0KLSAgIENsZWFyIHRoZSBlcnJvciBpbmRpY2F0b3IuICBJZiB0aGUgZXJyb3IgaW5kaWNhdG9yIGlzIG5vdCBzZXQsIHRoZXJlIGlzIG5vCi0gICBlZmZlY3QuCi0KLQotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfRmV0Y2goUHlPYmplY3QgKipwdHlwZSwgUHlPYmplY3QgKipwdmFsdWUsIFB5T2JqZWN0ICoqcHRyYWNlYmFjaykKLQotICAgUmV0cmlldmUgdGhlIGVycm9yIGluZGljYXRvciBpbnRvIHRocmVlIHZhcmlhYmxlcyB3aG9zZSBhZGRyZXNzZXMgYXJlIHBhc3NlZC4KLSAgIElmIHRoZSBlcnJvciBpbmRpY2F0b3IgaXMgbm90IHNldCwgc2V0IGFsbCB0aHJlZSB2YXJpYWJsZXMgdG8gKk5VTEwqLiAgSWYgaXQgaXMKLSAgIHNldCwgaXQgd2lsbCBiZSBjbGVhcmVkIGFuZCB5b3Ugb3duIGEgcmVmZXJlbmNlIHRvIGVhY2ggb2JqZWN0IHJldHJpZXZlZC4gIFRoZQotICAgdmFsdWUgYW5kIHRyYWNlYmFjayBvYmplY3QgbWF5IGJlICpOVUxMKiBldmVuIHdoZW4gdGhlIHR5cGUgb2JqZWN0IGlzIG5vdC4KLQotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgb25seSB1c2VkIGJ5IGNvZGUgdGhhdCBuZWVkcyB0byBoYW5kbGUgZXhjZXB0aW9ucyBvcgotICAgICAgYnkgY29kZSB0aGF0IG5lZWRzIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGVycm9yIGluZGljYXRvciB0ZW1wb3JhcmlseS4KLQotCi0uLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9SZXN0b3JlKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0cmFjZWJhY2spCi0KLSAgIFNldCAgdGhlIGVycm9yIGluZGljYXRvciBmcm9tIHRoZSB0aHJlZSBvYmplY3RzLiAgSWYgdGhlIGVycm9yIGluZGljYXRvciBpcwotICAgYWxyZWFkeSBzZXQsIGl0IGlzIGNsZWFyZWQgZmlyc3QuICBJZiB0aGUgb2JqZWN0cyBhcmUgKk5VTEwqLCB0aGUgZXJyb3IKLSAgIGluZGljYXRvciBpcyBjbGVhcmVkLiAgRG8gbm90IHBhc3MgYSAqTlVMTCogdHlwZSBhbmQgbm9uLSpOVUxMKiB2YWx1ZSBvcgotICAgdHJhY2ViYWNrLiAgVGhlIGV4Y2VwdGlvbiB0eXBlIHNob3VsZCBiZSBhIGNsYXNzLiAgRG8gbm90IHBhc3MgYW4gaW52YWxpZAotICAgZXhjZXB0aW9uIHR5cGUgb3IgdmFsdWUuIChWaW9sYXRpbmcgdGhlc2UgcnVsZXMgd2lsbCBjYXVzZSBzdWJ0bGUgcHJvYmxlbXMKLSAgIGxhdGVyLikgIFRoaXMgY2FsbCB0YWtlcyBhd2F5IGEgcmVmZXJlbmNlIHRvIGVhY2ggb2JqZWN0OiB5b3UgbXVzdCBvd24gYQotICAgcmVmZXJlbmNlIHRvIGVhY2ggb2JqZWN0IGJlZm9yZSB0aGUgY2FsbCBhbmQgYWZ0ZXIgdGhlIGNhbGwgeW91IG5vIGxvbmdlciBvd24KLSAgIHRoZXNlIHJlZmVyZW5jZXMuICAoSWYgeW91IGRvbid0IHVuZGVyc3RhbmQgdGhpcywgZG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24uICBJCi0gICB3YXJuZWQgeW91LikKLQotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgb25seSB1c2VkIGJ5IGNvZGUgdGhhdCBuZWVkcyB0byBzYXZlIGFuZCByZXN0b3JlIHRoZQotICAgICAgZXJyb3IgaW5kaWNhdG9yIHRlbXBvcmFyaWx5OyB1c2UgOmM6ZnVuYzpgUHlFcnJfRmV0Y2hgIHRvIHNhdmUgdGhlIGN1cnJlbnQKLSAgICAgIGV4Y2VwdGlvbiBzdGF0ZS4KLQotCi0uLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9HZXRFeGNJbmZvKFB5T2JqZWN0ICoqcHR5cGUsIFB5T2JqZWN0ICoqcHZhbHVlLCBQeU9iamVjdCAqKnB0cmFjZWJhY2spCi0KLSAgIFJldHJpZXZlIHRoZSBleGNlcHRpb24gaW5mbywgYXMga25vd24gZnJvbSBgYHN5cy5leGNfaW5mbygpYGAuICBUaGlzIHJlZmVycwotICAgdG8gYW4gZXhjZXB0aW9uIHRoYXQgd2FzIGFscmVhZHkgY2F1Z2h0LCBub3QgdG8gYW4gZXhjZXB0aW9uIHRoYXQgd2FzCi0gICBmcmVzaGx5IHJhaXNlZC4gIFJldHVybnMgbmV3IHJlZmVyZW5jZXMgZm9yIHRoZSB0aHJlZSBvYmplY3RzLCBhbnkgb2Ygd2hpY2gKLSAgIG1heSBiZSAqTlVMTCouICBEb2VzIG5vdCBtb2RpZnkgdGhlIGV4Y2VwdGlvbiBpbmZvIHN0YXRlLgotCi0gICAuLiBub3RlOjoKLQotICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgbm9ybWFsbHkgdXNlZCBieSBjb2RlIHRoYXQgd2FudHMgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCi0gICAgICBSYXRoZXIsIGl0IGNhbiBiZSB1c2VkIHdoZW4gY29kZSBuZWVkcyB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBleGNlcHRpb24KLSAgICAgIHN0YXRlIHRlbXBvcmFyaWx5LiAgVXNlIDpjOmZ1bmM6YFB5RXJyX1NldEV4Y0luZm9gIHRvIHJlc3RvcmUgb3IgY2xlYXIgdGhlCi0gICAgICBleGNlcHRpb24gc3RhdGUuCi0KLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotCi0KLS4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1NldEV4Y0luZm8oUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRyYWNlYmFjaykKLQotICAgU2V0IHRoZSBleGNlcHRpb24gaW5mbywgYXMga25vd24gZnJvbSBgYHN5cy5leGNfaW5mbygpYGAuICBUaGlzIHJlZmVycwotICAgdG8gYW4gZXhjZXB0aW9uIHRoYXQgd2FzIGFscmVhZHkgY2F1Z2h0LCBub3QgdG8gYW4gZXhjZXB0aW9uIHRoYXQgd2FzCi0gICBmcmVzaGx5IHJhaXNlZC4gIFRoaXMgZnVuY3Rpb24gc3RlYWxzIHRoZSByZWZlcmVuY2VzIG9mIHRoZSBhcmd1bWVudHMuCi0gICBUbyBjbGVhciB0aGUgZXhjZXB0aW9uIHN0YXRlLCBwYXNzICpOVUxMKiBmb3IgYWxsIHRocmVlIGFyZ3VtZW50cy4KLSAgIEZvciBnZW5lcmFsIHJ1bGVzIGFib3V0IHRoZSB0aHJlZSBhcmd1bWVudHMsIHNlZSA6YzpmdW5jOmBQeUVycl9SZXN0b3JlYC4KLQotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IG5vcm1hbGx5IHVzZWQgYnkgY29kZSB0aGF0IHdhbnRzIHRvIGhhbmRsZSBleGNlcHRpb25zLgotICAgICAgUmF0aGVyLCBpdCBjYW4gYmUgdXNlZCB3aGVuIGNvZGUgbmVlZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgZXhjZXB0aW9uCi0gICAgICBzdGF0ZSB0ZW1wb3JhcmlseS4gIFVzZSA6YzpmdW5jOmBQeUVycl9HZXRFeGNJbmZvYCB0byByZWFkIHRoZSBleGNlcHRpb24KLSAgICAgIHN0YXRlLgotCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKK1RoZXNlIGZ1bmN0aW9ucyBoZWxwIHlvdSBzZXQgdGhlIGN1cnJlbnQgdGhyZWFkJ3MgZXJyb3IgaW5kaWNhdG9yLgorRm9yIGNvbnZlbmllbmNlLCBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGFsd2F5cyByZXR1cm4gYQorTlVMTCBwb2ludGVyIGZvciB1c2UgaW4gYSBgYHJldHVybmBgIHN0YXRlbWVudC4KIAogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TZXRTdHJpbmcoUHlPYmplY3QgKnR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCkBAIC0xOTcsNiArMTA5LDE0IEBACiAgICBzdHJpbmcuCiAKIAorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9Gb3JtYXRWKFB5T2JqZWN0ICpleGNlcHRpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJncykKKworICAgU2FtZSBhcyA6YzpmdW5jOmBQeUVycl9Gb3JtYXRgLCBidXQgdGFraW5nIGEgOmM6dHlwZTpgdmFfbGlzdGAgYXJndW1lbnQgcmF0aGVyCisgICB0aGFuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU2V0Tm9uZShQeU9iamVjdCAqdHlwZSkKIAogICAgVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgYGBQeUVycl9TZXRPYmplY3QodHlwZSwgUHlfTm9uZSlgYC4KQEAgLTM0NiwyNyArMjY2LDMxIEBACiAgICB1c2UuCiAKIAorSXNzdWluZyB3YXJuaW5ncworPT09PT09PT09PT09PT09PQorCitVc2UgdGhlc2UgZnVuY3Rpb25zIHRvIGlzc3VlIHdhcm5pbmdzIGZyb20gQyBjb2RlLiAgVGhleSBtaXJyb3Igc2ltaWxhcgorZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoZSBQeXRob24gOm1vZDpgd2FybmluZ3NgIG1vZHVsZS4gIFRoZXkgbm9ybWFsbHkKK3ByaW50IGEgd2FybmluZyBtZXNzYWdlIHRvICpzeXMuc3RkZXJyKjsgaG93ZXZlciwgaXQgaXMKK2Fsc28gcG9zc2libGUgdGhhdCB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIHRoYXQgd2FybmluZ3MgYXJlIHRvIGJlIHR1cm5lZCBpbnRvCitlcnJvcnMsIGFuZCBpbiB0aGF0IGNhc2UgdGhleSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi4gIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdAordGhlIGZ1bmN0aW9ucyByYWlzZSBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiBhIHByb2JsZW0gd2l0aCB0aGUgd2FybmluZyBtYWNoaW5lcnkuCitUaGUgcmV0dXJuIHZhbHVlIGlzIGBgMGBgIGlmIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQsIG9yIGBgLTFgYCBpZiBhbiBleGNlcHRpb24KK2lzIHJhaXNlZC4gIChJdCBpcyBub3QgcG9zc2libGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSB3YXJuaW5nIG1lc3NhZ2UgaXMKK2FjdHVhbGx5IHByaW50ZWQsIG5vciB3aGF0IHRoZSByZWFzb24gaXMgZm9yIHRoZSBleGNlcHRpb247IHRoaXMgaXMKK2ludGVudGlvbmFsLikgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHRoZSBjYWxsZXIgc2hvdWxkIGRvIGl0cyBub3JtYWwKK2V4Y2VwdGlvbiBoYW5kbGluZyAoZm9yIGV4YW1wbGUsIDpjOmZ1bmM6YFB5X0RFQ1JFRmAgb3duZWQgcmVmZXJlbmNlcyBhbmQgcmV0dXJuCithbiBlcnJvciB2YWx1ZSkuCisKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbWVzc2FnZSwgUHlfc3NpemVfdCBzdGFja19sZXZlbCkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2UuICBUaGUgKmNhdGVnb3J5KiBhcmd1bWVudCBpcyBhIHdhcm5pbmcgY2F0ZWdvcnkgKHNlZQotICAgYmVsb3cpIG9yICpOVUxMKjsgdGhlICptZXNzYWdlKiBhcmd1bWVudCBpcyBhbiBVVEYtOCBlbmNvZGVkIHN0cmluZy4gICpzdGFja19sZXZlbCogaXMgYQorICAgYmVsb3cpIG9yICpOVUxMKjsgdGhlICptZXNzYWdlKiBhcmd1bWVudCBpcyBhIFVURi04IGVuY29kZWQgc3RyaW5nLiAgKnN0YWNrX2xldmVsKiBpcyBhCiAgICBwb3NpdGl2ZSBudW1iZXIgZ2l2aW5nIGEgbnVtYmVyIG9mIHN0YWNrIGZyYW1lczsgdGhlIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgZnJvbQogICAgdGhlICBjdXJyZW50bHkgZXhlY3V0aW5nIGxpbmUgb2YgY29kZSBpbiB0aGF0IHN0YWNrIGZyYW1lLiAgQSAqc3RhY2tfbGV2ZWwqIG9mIDEKICAgIGlzIHRoZSBmdW5jdGlvbiBjYWxsaW5nIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeGAsIDIgaXMgIHRoZSBmdW5jdGlvbiBhYm92ZSB0aGF0LAogICAgYW5kIHNvIGZvcnRoLgogCi0gICBUaGlzIGZ1bmN0aW9uIG5vcm1hbGx5IHByaW50cyBhIHdhcm5pbmcgbWVzc2FnZSB0byAqc3lzLnN0ZGVycio7IGhvd2V2ZXIsIGl0IGlzCi0gICBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCB0aGF0IHdhcm5pbmdzIGFyZSB0byBiZSB0dXJuZWQgaW50bwotICAgZXJyb3JzLCBhbmQgaW4gdGhhdCBjYXNlIHRoaXMgd2lsbCByYWlzZSBhbiBleGNlcHRpb24uICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQKLSAgIHRoZSBmdW5jdGlvbiByYWlzZXMgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgYSBwcm9ibGVtIHdpdGggdGhlIHdhcm5pbmcgbWFjaGluZXJ5Ci0gICAodGhlIGltcGxlbWVudGF0aW9uIGltcG9ydHMgdGhlIDptb2Q6YHdhcm5pbmdzYCBtb2R1bGUgdG8gZG8gdGhlIGhlYXZ5IGxpZnRpbmcpLgotICAgVGhlIHJldHVybiB2YWx1ZSBpcyBgYDBgYCBpZiBubyBleGNlcHRpb24gaXMgcmFpc2VkLCBvciBgYC0xYGAgaWYgYW4gZXhjZXB0aW9uCi0gICBpcyByYWlzZWQuICAoSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIGEgd2FybmluZyBtZXNzYWdlIGlzCi0gICBhY3R1YWxseSBwcmludGVkLCBub3Igd2hhdCB0aGUgcmVhc29uIGlzIGZvciB0aGUgZXhjZXB0aW9uOyB0aGlzIGlzCi0gICBpbnRlbnRpb25hbC4pICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkLCB0aGUgY2FsbGVyIHNob3VsZCBkbyBpdHMgbm9ybWFsCi0gICBleGNlcHRpb24gaGFuZGxpbmcgKGZvciBleGFtcGxlLCA6YzpmdW5jOmBQeV9ERUNSRUZgIG93bmVkIHJlZmVyZW5jZXMgYW5kIHJldHVybgotICAgYW4gZXJyb3IgdmFsdWUpLgotCiAgICBXYXJuaW5nIGNhdGVnb3JpZXMgbXVzdCBiZSBzdWJjbGFzc2VzIG9mIDpjOmRhdGE6YFdhcm5pbmdgOyB0aGUgZGVmYXVsdCB3YXJuaW5nCiAgICBjYXRlZ29yeSBpcyA6YzpkYXRhOmBSdW50aW1lV2FybmluZ2AuICBUaGUgc3RhbmRhcmQgUHl0aG9uIHdhcm5pbmcgY2F0ZWdvcmllcyBhcmUKICAgIGF2YWlsYWJsZSBhcyBnbG9iYWwgdmFyaWFibGVzIHdob3NlIG5hbWVzIGFyZSBgYFB5RXhjX2BgIGZvbGxvd2VkIGJ5IHRoZSBQeXRob24KQEAgLTQxMCw2ICszMzQsMTM5IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCitRdWVyeWluZyB0aGUgZXJyb3IgaW5kaWNhdG9yCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfT2NjdXJyZWQoKQorCisgICBUZXN0IHdoZXRoZXIgdGhlIGVycm9yIGluZGljYXRvciBpcyBzZXQuICBJZiBzZXQsIHJldHVybiB0aGUgZXhjZXB0aW9uICp0eXBlKgorICAgKHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgbGFzdCBjYWxsIHRvIG9uZSBvZiB0aGUgOmM6ZnVuYzpgUHlFcnJfU2V0XCpgCisgICBmdW5jdGlvbnMgb3IgdG8gOmM6ZnVuYzpgUHlFcnJfUmVzdG9yZWApLiAgSWYgbm90IHNldCwgcmV0dXJuICpOVUxMKi4gIFlvdSBkbyBub3QKKyAgIG93biBhIHJlZmVyZW5jZSB0byB0aGUgcmV0dXJuIHZhbHVlLCBzbyB5b3UgZG8gbm90IG5lZWQgdG8gOmM6ZnVuYzpgUHlfREVDUkVGYAorICAgaXQuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBEbyBub3QgY29tcGFyZSB0aGUgcmV0dXJuIHZhbHVlIHRvIGEgc3BlY2lmaWMgZXhjZXB0aW9uOyB1c2UKKyAgICAgIDpjOmZ1bmM6YFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXNgIGluc3RlYWQsIHNob3duIGJlbG93LiAgKFRoZSBjb21wYXJpc29uIGNvdWxkCisgICAgICBlYXNpbHkgZmFpbCBzaW5jZSB0aGUgZXhjZXB0aW9uIG1heSBiZSBhbiBpbnN0YW5jZSBpbnN0ZWFkIG9mIGEgY2xhc3MsIGluIHRoZQorICAgICAgY2FzZSBvZiBhIGNsYXNzIGV4Y2VwdGlvbiwgb3IgaXQgbWF5IGJlIGEgc3ViY2xhc3Mgb2YgdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbi4pCisKKworLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5T2JqZWN0ICpleGMpCisKKyAgIEVxdWl2YWxlbnQgdG8gYGBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoUHlFcnJfT2NjdXJyZWQoKSwgZXhjKWBgLiAgVGhpcworICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gYW4gZXhjZXB0aW9uIGlzIGFjdHVhbGx5IHNldDsgYSBtZW1vcnkgYWNjZXNzCisgICB2aW9sYXRpb24gd2lsbCBvY2N1ciBpZiBubyBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkLgorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKFB5T2JqZWN0ICpnaXZlbiwgUHlPYmplY3QgKmV4YykKKworICAgUmV0dXJuIHRydWUgaWYgdGhlICpnaXZlbiogZXhjZXB0aW9uIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiB0eXBlIGluICpleGMqLiAgSWYKKyAgICpleGMqIGlzIGEgY2xhc3Mgb2JqZWN0LCB0aGlzIGFsc28gcmV0dXJucyB0cnVlIHdoZW4gKmdpdmVuKiBpcyBhbiBpbnN0YW5jZQorICAgb2YgYSBzdWJjbGFzcy4gIElmICpleGMqIGlzIGEgdHVwbGUsIGFsbCBleGNlcHRpb24gdHlwZXMgaW4gdGhlIHR1cGxlIChhbmQKKyAgIHJlY3Vyc2l2ZWx5IGluIHN1YnR1cGxlcykgYXJlIHNlYXJjaGVkIGZvciBhIG1hdGNoLgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX0ZldGNoKFB5T2JqZWN0ICoqcHR5cGUsIFB5T2JqZWN0ICoqcHZhbHVlLCBQeU9iamVjdCAqKnB0cmFjZWJhY2spCisKKyAgIFJldHJpZXZlIHRoZSBlcnJvciBpbmRpY2F0b3IgaW50byB0aHJlZSB2YXJpYWJsZXMgd2hvc2UgYWRkcmVzc2VzIGFyZSBwYXNzZWQuCisgICBJZiB0aGUgZXJyb3IgaW5kaWNhdG9yIGlzIG5vdCBzZXQsIHNldCBhbGwgdGhyZWUgdmFyaWFibGVzIHRvICpOVUxMKi4gIElmIGl0IGlzCisgICBzZXQsIGl0IHdpbGwgYmUgY2xlYXJlZCBhbmQgeW91IG93biBhIHJlZmVyZW5jZSB0byBlYWNoIG9iamVjdCByZXRyaWV2ZWQuICBUaGUKKyAgIHZhbHVlIGFuZCB0cmFjZWJhY2sgb2JqZWN0IG1heSBiZSAqTlVMTCogZXZlbiB3aGVuIHRoZSB0eXBlIG9iamVjdCBpcyBub3QuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vcm1hbGx5IG9ubHkgdXNlZCBieSBjb2RlIHRoYXQgbmVlZHMgdG8gY2F0Y2ggZXhjZXB0aW9ucyBvcgorICAgICAgYnkgY29kZSB0aGF0IG5lZWRzIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGVycm9yIGluZGljYXRvciB0ZW1wb3JhcmlseSwgZS5nLjo6CisKKyAgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqdHlwZSwgKip2YWx1ZSwgKip0cmFjZWJhY2s7CisgICAgICAgICAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKKworICAgICAgICAgICAgLyogLi4uIGNvZGUgdGhhdCBtaWdodCBwcm9kdWNlIG90aGVyIGVycm9ycyAuLi4gKi8KKworICAgICAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICAgICAgIH0KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9SZXN0b3JlKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0cmFjZWJhY2spCisKKyAgIFNldCAgdGhlIGVycm9yIGluZGljYXRvciBmcm9tIHRoZSB0aHJlZSBvYmplY3RzLiAgSWYgdGhlIGVycm9yIGluZGljYXRvciBpcworICAgYWxyZWFkeSBzZXQsIGl0IGlzIGNsZWFyZWQgZmlyc3QuICBJZiB0aGUgb2JqZWN0cyBhcmUgKk5VTEwqLCB0aGUgZXJyb3IKKyAgIGluZGljYXRvciBpcyBjbGVhcmVkLiAgRG8gbm90IHBhc3MgYSAqTlVMTCogdHlwZSBhbmQgbm9uLSpOVUxMKiB2YWx1ZSBvcgorICAgdHJhY2ViYWNrLiAgVGhlIGV4Y2VwdGlvbiB0eXBlIHNob3VsZCBiZSBhIGNsYXNzLiAgRG8gbm90IHBhc3MgYW4gaW52YWxpZAorICAgZXhjZXB0aW9uIHR5cGUgb3IgdmFsdWUuIChWaW9sYXRpbmcgdGhlc2UgcnVsZXMgd2lsbCBjYXVzZSBzdWJ0bGUgcHJvYmxlbXMKKyAgIGxhdGVyLikgIFRoaXMgY2FsbCB0YWtlcyBhd2F5IGEgcmVmZXJlbmNlIHRvIGVhY2ggb2JqZWN0OiB5b3UgbXVzdCBvd24gYQorICAgcmVmZXJlbmNlIHRvIGVhY2ggb2JqZWN0IGJlZm9yZSB0aGUgY2FsbCBhbmQgYWZ0ZXIgdGhlIGNhbGwgeW91IG5vIGxvbmdlciBvd24KKyAgIHRoZXNlIHJlZmVyZW5jZXMuICAoSWYgeW91IGRvbid0IHVuZGVyc3RhbmQgdGhpcywgZG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24uICBJCisgICB3YXJuZWQgeW91LikKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgb25seSB1c2VkIGJ5IGNvZGUgdGhhdCBuZWVkcyB0byBzYXZlIGFuZCByZXN0b3JlIHRoZQorICAgICAgZXJyb3IgaW5kaWNhdG9yIHRlbXBvcmFyaWx5LiAgVXNlIDpjOmZ1bmM6YFB5RXJyX0ZldGNoYCB0byBzYXZlIHRoZSBjdXJyZW50CisgICAgICBlcnJvciBpbmRpY2F0b3IuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKFB5T2JqZWN0KipleGMsIFB5T2JqZWN0Kip2YWwsIFB5T2JqZWN0Kip0YikKKworICAgVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IDpjOmZ1bmM6YFB5RXJyX0ZldGNoYCBiZWxvdworICAgY2FuIGJlICJ1bm5vcm1hbGl6ZWQiLCBtZWFuaW5nIHRoYXQgYGAqZXhjYGAgaXMgYSBjbGFzcyBvYmplY3QgYnV0IGBgKnZhbGBgIGlzCisgICBub3QgYW4gaW5zdGFuY2Ugb2YgdGhlICBzYW1lIGNsYXNzLiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBpbnN0YW50aWF0ZQorICAgdGhlIGNsYXNzIGluIHRoYXQgY2FzZS4gIElmIHRoZSB2YWx1ZXMgYXJlIGFscmVhZHkgbm9ybWFsaXplZCwgbm90aGluZyBoYXBwZW5zLgorICAgVGhlIGRlbGF5ZWQgbm9ybWFsaXphdGlvbiBpcyBpbXBsZW1lbnRlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBmdW5jdGlvbiAqZG9lcyBub3QqIGltcGxpY2l0bHkgc2V0IHRoZSBgYF9fdHJhY2ViYWNrX19gYAorICAgICAgYXR0cmlidXRlIG9uIHRoZSBleGNlcHRpb24gdmFsdWUuIElmIHNldHRpbmcgdGhlIHRyYWNlYmFjaworICAgICAgYXBwcm9wcmlhdGVseSBpcyBkZXNpcmVkLCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgc25pcHBldCBpcyBuZWVkZWQ6OgorCisgICAgICAgICBpZiAodGIgIT0gTlVMTCkgeworICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgICB9CisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfR2V0RXhjSW5mbyhQeU9iamVjdCAqKnB0eXBlLCBQeU9iamVjdCAqKnB2YWx1ZSwgUHlPYmplY3QgKipwdHJhY2ViYWNrKQorCisgICBSZXRyaWV2ZSB0aGUgZXhjZXB0aW9uIGluZm8sIGFzIGtub3duIGZyb20gYGBzeXMuZXhjX2luZm8oKWBgLiAgVGhpcyByZWZlcnMKKyAgIHRvIGFuIGV4Y2VwdGlvbiB0aGF0IHdhcyAqYWxyZWFkeSBjYXVnaHQqLCBub3QgdG8gYW4gZXhjZXB0aW9uIHRoYXQgd2FzCisgICBmcmVzaGx5IHJhaXNlZC4gIFJldHVybnMgbmV3IHJlZmVyZW5jZXMgZm9yIHRoZSB0aHJlZSBvYmplY3RzLCBhbnkgb2Ygd2hpY2gKKyAgIG1heSBiZSAqTlVMTCouICBEb2VzIG5vdCBtb2RpZnkgdGhlIGV4Y2VwdGlvbiBpbmZvIHN0YXRlLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgbm9ybWFsbHkgdXNlZCBieSBjb2RlIHRoYXQgd2FudHMgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCisgICAgICBSYXRoZXIsIGl0IGNhbiBiZSB1c2VkIHdoZW4gY29kZSBuZWVkcyB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBleGNlcHRpb24KKyAgICAgIHN0YXRlIHRlbXBvcmFyaWx5LiAgVXNlIDpjOmZ1bmM6YFB5RXJyX1NldEV4Y0luZm9gIHRvIHJlc3RvcmUgb3IgY2xlYXIgdGhlCisgICAgICBleGNlcHRpb24gc3RhdGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1NldEV4Y0luZm8oUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRyYWNlYmFjaykKKworICAgU2V0IHRoZSBleGNlcHRpb24gaW5mbywgYXMga25vd24gZnJvbSBgYHN5cy5leGNfaW5mbygpYGAuICBUaGlzIHJlZmVycworICAgdG8gYW4gZXhjZXB0aW9uIHRoYXQgd2FzICphbHJlYWR5IGNhdWdodCosIG5vdCB0byBhbiBleGNlcHRpb24gdGhhdCB3YXMKKyAgIGZyZXNobHkgcmFpc2VkLiAgVGhpcyBmdW5jdGlvbiBzdGVhbHMgdGhlIHJlZmVyZW5jZXMgb2YgdGhlIGFyZ3VtZW50cy4KKyAgIFRvIGNsZWFyIHRoZSBleGNlcHRpb24gc3RhdGUsIHBhc3MgKk5VTEwqIGZvciBhbGwgdGhyZWUgYXJndW1lbnRzLgorICAgRm9yIGdlbmVyYWwgcnVsZXMgYWJvdXQgdGhlIHRocmVlIGFyZ3VtZW50cywgc2VlIDpjOmZ1bmM6YFB5RXJyX1Jlc3RvcmVgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgbm9ybWFsbHkgdXNlZCBieSBjb2RlIHRoYXQgd2FudHMgdG8gaGFuZGxlIGV4Y2VwdGlvbnMuCisgICAgICBSYXRoZXIsIGl0IGNhbiBiZSB1c2VkIHdoZW4gY29kZSBuZWVkcyB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBleGNlcHRpb24KKyAgICAgIHN0YXRlIHRlbXBvcmFyaWx5LiAgVXNlIDpjOmZ1bmM6YFB5RXJyX0dldEV4Y0luZm9gIHRvIHJlYWQgdGhlIGV4Y2VwdGlvbgorICAgICAgc3RhdGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisKK1NpZ25hbCBIYW5kbGluZworPT09PT09PT09PT09PT09CisKKwogLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9DaGVja1NpZ25hbHMoKQogCiAgICAuLiBpbmRleDo6CkBAIC00NDMsMTMgKzUwMCwyMSBAQAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5U2lnbmFsX1NldFdha2V1cEZkKGludCBmZCkKIAotICAgVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIHNwZWNpZmllcyBhIGZpbGUgZGVzY3JpcHRvciB0byB3aGljaCBhIGBgJ1wwJ2BgIGJ5dGUgd2lsbAotICAgYmUgd3JpdHRlbiB3aGVuZXZlciBhIHNpZ25hbCBpcyByZWNlaXZlZC4gIEl0IHJldHVybnMgdGhlIHByZXZpb3VzIHN1Y2ggZmlsZQotICAgZGVzY3JpcHRvci4gIFRoZSB2YWx1ZSBgYC0xYGAgZGlzYWJsZXMgdGhlIGZlYXR1cmU7IHRoaXMgaXMgdGhlIGluaXRpYWwgc3RhdGUuCisgICBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gc3BlY2lmaWVzIGEgZmlsZSBkZXNjcmlwdG9yIHRvIHdoaWNoIHRoZSBzaWduYWwgbnVtYmVyCisgICBpcyB3cml0dGVuIGFzIGEgc2luZ2xlIGJ5dGUgd2hlbmV2ZXIgYSBzaWduYWwgaXMgcmVjZWl2ZWQuICpmZCogbXVzdCBiZQorICAgbm9uLWJsb2NraW5nLiBJdCByZXR1cm5zIHRoZSBwcmV2aW91cyBzdWNoIGZpbGUgZGVzY3JpcHRvci4KKworICAgVGhlIHZhbHVlIGBgLTFgYCBkaXNhYmxlcyB0aGUgZmVhdHVyZTsgdGhpcyBpcyB0aGUgaW5pdGlhbCBzdGF0ZS4KICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byA6ZnVuYzpgc2lnbmFsLnNldF93YWtldXBfZmRgIGluIFB5dGhvbiwgYnV0IHdpdGhvdXQgYW55CiAgICBlcnJvciBjaGVja2luZy4gICpmZCogc2hvdWxkIGJlIGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yLiAgVGhlIGZ1bmN0aW9uIHNob3VsZAogICAgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBPbiBXaW5kb3dzLCB0aGUgZnVuY3Rpb24gbm93IGFsc28gc3VwcG9ydHMgc29ja2V0IGhhbmRsZXMuCisKKworRXhjZXB0aW9uIENsYXNzZXMKKz09PT09PT09PT09PT09PT09CiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTmV3RXhjZXB0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKIApAQCAtNDc1LDE4ICs1NDAsNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5T2JqZWN0ICpvYmopCi0KLSAgIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBwcmludHMgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gYGBzeXMuc3RkZXJyYGAgd2hlbiBhbgotICAgZXhjZXB0aW9uIGhhcyBiZWVuIHNldCBidXQgaXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIGludGVycHJldGVyIHRvIGFjdHVhbGx5Ci0gICByYWlzZSB0aGUgZXhjZXB0aW9uLiAgSXQgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBhbgotICAgOm1ldGg6YF9fZGVsX19gIG1ldGhvZC4KLQotICAgVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50ICpvYmoqIHRoYXQgaWRlbnRpZmllcyB0aGUgY29udGV4dAotICAgaW4gd2hpY2ggdGhlIHVucmFpc2FibGUgZXhjZXB0aW9uIG9jY3VycmVkLiBUaGUgcmVwciBvZiAqb2JqKiB3aWxsIGJlIHByaW50ZWQgaW4KLSAgIHRoZSB3YXJuaW5nIG1lc3NhZ2UuCi0KLQogRXhjZXB0aW9uIE9iamVjdHMKID09PT09PT09PT09PT09PT09CiAKQEAgLTU1Niw3ICs2MDksNyBAQAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9DcmVhdGUoY29uc3QgUHlfVU5JQ09ERSAqb2JqZWN0LCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIGNvbnN0IGNoYXIgKnJlYXNvbikKIAogICAgQ3JlYXRlIGEgOmNsYXNzOmBVbmljb2RlVHJhbnNsYXRlRXJyb3JgIG9iamVjdCB3aXRoIHRoZSBhdHRyaWJ1dGVzICpvYmplY3QqLAotICAgKmxlbmd0aCosICpzdGFydCosICplbmQqIGFuZCAqcmVhc29uKi4gKnJlYXNvbiogaXMgYW4gVVRGLTggZW5jb2RlZCBzdHJpbmcuCisgICAqbGVuZ3RoKiwgKnN0YXJ0KiwgKmVuZCogYW5kICpyZWFzb24qLiAqcmVhc29uKiBpcyBhIFVURi04IGVuY29kZWQgc3RyaW5nLgogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nKFB5T2JqZWN0ICpleGMpCiAgICAgICAgICAgICAgICAgUHlPYmplY3QqIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nKFB5T2JqZWN0ICpleGMpCkBAIC02MzAsMTIgKzY4MywxMiBAQAogICAgc2V0cyBhIDpleGM6YE1lbW9yeUVycm9yYCBhbmQgcmV0dXJucyBhIG5vbnplcm8gdmFsdWUuCiAKICAgIFRoZSBmdW5jdGlvbiB0aGVuIGNoZWNrcyBpZiB0aGUgcmVjdXJzaW9uIGxpbWl0IGlzIHJlYWNoZWQuICBJZiB0aGlzIGlzIHRoZQotICAgY2FzZSwgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHNldCBhbmQgYSBub256ZXJvIHZhbHVlIGlzIHJldHVybmVkLgorICAgY2FzZSwgYSA6ZXhjOmBSZWN1cnNpb25FcnJvcmAgaXMgc2V0IGFuZCBhIG5vbnplcm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICBPdGhlcndpc2UsIHplcm8gaXMgcmV0dXJuZWQuCiAKICAgICp3aGVyZSogc2hvdWxkIGJlIGEgc3RyaW5nIHN1Y2ggYXMgYGAiIGluIGluc3RhbmNlIGNoZWNrImBgIHRvIGJlCi0gICBjb25jYXRlbmF0ZWQgdG8gdGhlIDpleGM6YFJ1bnRpbWVFcnJvcmAgbWVzc2FnZSBjYXVzZWQgYnkgdGhlIHJlY3Vyc2lvbiBkZXB0aAotICAgbGltaXQuCisgICBjb25jYXRlbmF0ZWQgdG8gdGhlIDpleGM6YFJlY3Vyc2lvbkVycm9yYCBtZXNzYWdlIGNhdXNlZCBieSB0aGUgcmVjdXJzaW9uCisgICBkZXB0aCBsaW1pdC4KIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCkKIApAQCAtNzQ3LDYgKzgwMCw4IEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiB8IDpjOmRhdGE6YFB5RXhjX1Byb2Nlc3NMb29rdXBFcnJvcmAgICAgICB8IDpleGM6YFByb2Nlc3NMb29rdXBFcnJvcmAgICAgICAgfCAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCit8IDpjOmRhdGE6YFB5RXhjX1JlY3Vyc2lvbkVycm9yYCAgICAgICAgICB8IDpleGM6YFJlY3Vyc2lvbkVycm9yYCAgICAgICAgICAgfCAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiB8IDpjOmRhdGE6YFB5RXhjX1JlZmVyZW5jZUVycm9yYCAgICAgICAgICB8IDpleGM6YFJlZmVyZW5jZUVycm9yYCAgICAgICAgICAgfCBcKDIpICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiB8IDpjOmRhdGE6YFB5RXhjX1J1bnRpbWVFcnJvcmAgICAgICAgICAgICB8IDpleGM6YFJ1bnRpbWVFcnJvcmAgICAgICAgICAgICAgfCAgICAgICAgICB8CkBAIC03NzYsNiArODMxLDkgQEAKICAgIDpjOmRhdGE6YFB5RXhjX1Blcm1pc3Npb25FcnJvcmAsIDpjOmRhdGE6YFB5RXhjX1Byb2Nlc3NMb29rdXBFcnJvcmAKICAgIGFuZCA6YzpkYXRhOmBQeUV4Y19UaW1lb3V0RXJyb3JgIHdlcmUgaW50cm9kdWNlZCBmb2xsb3dpbmcgOnBlcDpgMzE1MWAuCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorICAgOmM6ZGF0YTpgUHlFeGNfUmVjdXJzaW9uRXJyb3JgLgorCiAKIFRoZXNlIGFyZSBjb21wYXRpYmlsaXR5IGFsaWFzZXMgdG8gOmM6ZGF0YTpgUHlFeGNfT1NFcnJvcmA6CiAKQEAgLTgyNCw2ICs4ODIsNyBAQAogICAgc2luZ2xlOiBQeUV4Y19PdmVyZmxvd0Vycm9yCiAgICBzaW5nbGU6IFB5RXhjX1Blcm1pc3Npb25FcnJvcgogICAgc2luZ2xlOiBQeUV4Y19Qcm9jZXNzTG9va3VwRXJyb3IKKyAgIHNpbmdsZTogUHlFeGNfUmVjdXJzaW9uRXJyb3IKICAgIHNpbmdsZTogUHlFeGNfUmVmZXJlbmNlRXJyb3IKICAgIHNpbmdsZTogUHlFeGNfUnVudGltZUVycm9yCiAgICBzaW5nbGU6IFB5RXhjX1N5bnRheEVycm9yCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZnVuY3Rpb24ucnN0IGIvRG9jL2MtYXBpL2Z1bmN0aW9uLnJzdAppbmRleCBhZDk4MzIyLi4xNzI3OWM3IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZnVuY3Rpb24ucnN0CisrKyBiL0RvYy9jLWFwaS9mdW5jdGlvbi5yc3QKQEAgLTM0LDEzICszNCwxNCBAQAogICAgUmV0dXJuIGEgbmV3IGZ1bmN0aW9uIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvZGUgb2JqZWN0ICpjb2RlKi4gKmdsb2JhbHMqCiAgICBtdXN0IGJlIGEgZGljdGlvbmFyeSB3aXRoIHRoZSBnbG9iYWwgdmFyaWFibGVzIGFjY2Vzc2libGUgdG8gdGhlIGZ1bmN0aW9uLgogCi0gICBUaGUgZnVuY3Rpb24ncyBkb2NzdHJpbmcsIG5hbWUgYW5kICpfX21vZHVsZV9fKiBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGNvZGUKLSAgIG9iamVjdCwgdGhlIGFyZ3VtZW50IGRlZmF1bHRzIGFuZCBjbG9zdXJlIGFyZSBzZXQgdG8gKk5VTEwqLgorICAgVGhlIGZ1bmN0aW9uJ3MgZG9jc3RyaW5nIGFuZCBuYW1lIGFyZSByZXRyaWV2ZWQgZnJvbSB0aGUgY29kZSBvYmplY3QuICpfX21vZHVsZV9fKgorICAgaXMgcmV0cmlldmVkIGZyb20gKmdsb2JhbHMqLiBUaGUgYXJndW1lbnQgZGVmYXVsdHMsIGFubm90YXRpb25zIGFuZCBjbG9zdXJlIGFyZQorICAgc2V0IHRvICpOVUxMKi4gKl9fcXVhbG5hbWVfXyogaXMgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBmdW5jdGlvbidzIG5hbWUuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZShQeU9iamVjdCAqY29kZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpxdWFsbmFtZSkKIAotICAgQXMgOmM6ZnVuYzpgUHlGdW5jdGlvbl9OZXdgLCBidXQgYWxzbyBhbGxvd3MgdG8gc2V0IHRoZSBmdW5jdGlvbiBvYmplY3QncworICAgQXMgOmM6ZnVuYzpgUHlGdW5jdGlvbl9OZXdgLCBidXQgYWxzbyBhbGxvd3Mgc2V0dGluZyB0aGUgZnVuY3Rpb24gb2JqZWN0J3MKICAgIGBgX19xdWFsbmFtZV9fYGAgYXR0cmlidXRlLiAgKnF1YWxuYW1lKiBzaG91bGQgYmUgYSB1bmljb2RlIG9iamVjdCBvciBOVUxMOwogICAgaWYgTlVMTCwgdGhlIGBgX19xdWFsbmFtZV9fYGAgYXR0cmlidXRlIGlzIHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyBpdHMKICAgIGBgX19uYW1lX19gYCBhdHRyaWJ1dGUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZ2NzdXBwb3J0LnJzdCBiL0RvYy9jLWFwaS9nY3N1cHBvcnQucnN0CmluZGV4IDlmNmFkODUuLmY1ZTBkN2UgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9nY3N1cHBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9nY3N1cHBvcnQucnN0CkBAIC0xMjYsOSArMTI2LDEwIEBACiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X1ZJU0lUKFB5T2JqZWN0ICpvKQogCi0gICBDYWxsIHRoZSAqdmlzaXQqIGNhbGxiYWNrLCB3aXRoIGFyZ3VtZW50cyAqbyogYW5kICphcmcqLiBJZiAqdmlzaXQqIHJldHVybnMKLSAgIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gcmV0dXJuIGl0LiAgVXNpbmcgdGhpcyBtYWNybywgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3RyYXZlcnNlYAotICAgaGFuZGxlcnMgbG9vayBsaWtlOjoKKyAgIElmICpvKiBpcyBub3QgKk5VTEwqLCBjYWxsIHRoZSAqdmlzaXQqIGNhbGxiYWNrLCB3aXRoIGFyZ3VtZW50cyAqbyoKKyAgIGFuZCAqYXJnKi4gIElmICp2aXNpdCogcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIHJldHVybiBpdC4KKyAgIFVzaW5nIHRoaXMgbWFjcm8sIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF90cmF2ZXJzZWAgaGFuZGxlcnMKKyAgIGxvb2sgbGlrZTo6CiAKICAgICAgIHN0YXRpYyBpbnQKICAgICAgIG15X3RyYXZlcnNlKE5vZGR5ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9nZW4ucnN0IGIvRG9jL2MtYXBpL2dlbi5yc3QKaW5kZXggMGM4NTFhNy4uMWVmYmFlNCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2dlbi5yc3QKKysrIGIvRG9jL2MtYXBpL2dlbi5yc3QKQEAgLTcsNyArNyw3IEBACiAKIEdlbmVyYXRvciBvYmplY3RzIGFyZSB3aGF0IFB5dGhvbiB1c2VzIHRvIGltcGxlbWVudCBnZW5lcmF0b3IgaXRlcmF0b3JzLiBUaGV5CiBhcmUgbm9ybWFsbHkgY3JlYXRlZCBieSBpdGVyYXRpbmcgb3ZlciBhIGZ1bmN0aW9uIHRoYXQgeWllbGRzIHZhbHVlcywgcmF0aGVyCi10aGFuIGV4cGxpY2l0bHkgY2FsbGluZyA6YzpmdW5jOmBQeUdlbl9OZXdgLgordGhhbiBleHBsaWNpdGx5IGNhbGxpbmcgOmM6ZnVuYzpgUHlHZW5fTmV3YCBvciA6YzpmdW5jOmBQeUdlbl9OZXdXaXRoUXVhbE5hbWVgLgogCiAKIC4uIGM6dHlwZTo6IFB5R2VuT2JqZWN0CkBAIC0yMCwxOSArMjAsMjUgQEAKICAgIFRoZSB0eXBlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGdlbmVyYXRvciBvYmplY3RzLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHZW5fQ2hlY2sob2IpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5R2VuX0NoZWNrKFB5T2JqZWN0ICpvYikKIAogICAgUmV0dXJuIHRydWUgaWYgKm9iKiBpcyBhIGdlbmVyYXRvciBvYmplY3Q7ICpvYiogbXVzdCBub3QgYmUgKk5VTEwqLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHZW5fQ2hlY2tFeGFjdChvYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHZW5fQ2hlY2tFeGFjdChQeU9iamVjdCAqb2IpCiAKLSAgIFJldHVybiB0cnVlIGlmICpvYioncyB0eXBlIGlzICpQeUdlbl9UeXBlKiBpcyBhIGdlbmVyYXRvciBvYmplY3Q7ICpvYiogbXVzdCBub3QKLSAgIGJlICpOVUxMKi4KKyAgIFJldHVybiB0cnVlIGlmICpvYioncyB0eXBlIGlzICpQeUdlbl9UeXBlKjsgKm9iKiBtdXN0IG5vdCBiZSAqTlVMTCouCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUdlbl9OZXcoUHlGcmFtZU9iamVjdCAqZnJhbWUpCiAKLSAgIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGdlbmVyYXRvciBvYmplY3QgYmFzZWQgb24gdGhlICpmcmFtZSogb2JqZWN0LiBBCi0gICByZWZlcmVuY2UgdG8gKmZyYW1lKiBpcyBzdG9sZW4gYnkgdGhpcyBmdW5jdGlvbi4gVGhlIHBhcmFtZXRlciBtdXN0IG5vdCBiZQorICAgQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgZ2VuZXJhdG9yIG9iamVjdCBiYXNlZCBvbiB0aGUgKmZyYW1lKiBvYmplY3QuCisgICBBIHJlZmVyZW5jZSB0byAqZnJhbWUqIGlzIHN0b2xlbiBieSB0aGlzIGZ1bmN0aW9uLiBUaGUgYXJndW1lbnQgbXVzdCBub3QgYmUKICAgICpOVUxMKi4KKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUdlbl9OZXdXaXRoUXVhbE5hbWUoUHlGcmFtZU9iamVjdCAqZnJhbWUsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqcXVhbG5hbWUpCisKKyAgIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGdlbmVyYXRvciBvYmplY3QgYmFzZWQgb24gdGhlICpmcmFtZSogb2JqZWN0LAorICAgd2l0aCBgYF9fbmFtZV9fYGAgYW5kIGBgX19xdWFsbmFtZV9fYGAgc2V0IHRvICpuYW1lKiBhbmQgKnF1YWxuYW1lKi4KKyAgIEEgcmVmZXJlbmNlIHRvICpmcmFtZSogaXMgc3RvbGVuIGJ5IHRoaXMgZnVuY3Rpb24uICBUaGUgKmZyYW1lKiBhcmd1bWVudAorICAgbXVzdCBub3QgYmUgKk5VTEwqLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2ltcG9ydC5yc3QgYi9Eb2MvYy1hcGkvaW1wb3J0LnJzdAppbmRleCA2MDg2NWY0Li4yOTM2ZjRmIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdAorKysgYi9Eb2MvYy1hcGkvaW1wb3J0LnJzdApAQCAtNzIsNyArNzIsNyBAQAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBQeU9iamVjdCAqZnJvbWxpc3QsIGludCBsZXZlbCkKIAotICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbE9iamVjdGAsIGJ1dCB0aGUgbmFtZSBpcyBhbgorICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbE9iamVjdGAsIGJ1dCB0aGUgbmFtZSBpcyBhCiAgICBVVEYtOCBlbmNvZGVkIHN0cmluZyBpbnN0ZWFkIG9mIGEgVW5pY29kZSBvYmplY3QuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCkBAIC0xODMsOSArMTgzLDkgQEAKIAogLi4gYzpmdW5jdGlvbjo6IGxvbmcgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIoKQogCi0gICBSZXR1cm4gdGhlIG1hZ2ljIG51bWJlciBmb3IgUHl0aG9uIGJ5dGVjb2RlIGZpbGVzIChhLmsuYS4gOmZpbGU6YC5weWNgIGFuZAotICAgOmZpbGU6YC5weW9gIGZpbGVzKS4gIFRoZSBtYWdpYyBudW1iZXIgc2hvdWxkIGJlIHByZXNlbnQgaW4gdGhlIGZpcnN0IGZvdXIgYnl0ZXMKLSAgIG9mIHRoZSBieXRlY29kZSBmaWxlLCBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIuIFJldHVybnMgLTEgb24gZXJyb3IuCisgICBSZXR1cm4gdGhlIG1hZ2ljIG51bWJlciBmb3IgUHl0aG9uIGJ5dGVjb2RlIGZpbGVzIChhLmsuYS4gOmZpbGU6YC5weWNgIGZpbGUpLgorICAgVGhlIG1hZ2ljIG51bWJlciBzaG91bGQgYmUgcHJlc2VudCBpbiB0aGUgZmlyc3QgZm91ciBieXRlcyBvZiB0aGUgYnl0ZWNvZGUKKyAgIGZpbGUsIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci4gUmV0dXJucyAtMSBvbiBlcnJvci4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFJldHVybiB2YWx1ZSBvZiAtMSB1cG9uIGZhaWx1cmUuCkBAIC0yMzYsMTEgKzIzNiw2IEBACiAgICBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb24oY2hhciAqLCBjaGFyICopCi0KLSAgIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLQotCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZU9iamVjdChQeU9iamVjdCAqbmFtZSkKIAogICAgTG9hZCBhIGZyb3plbiBtb2R1bGUgbmFtZWQgKm5hbWUqLiAgUmV0dXJuIGBgMWBgIGZvciBzdWNjZXNzLCBgYDBgYCBpZiB0aGUKQEAgLTI3Nyw3ICsyNzIsNyBAQAogICAgICAgfTsKIAogCi0uLiBjOnZhcjo6IHN0cnVjdCBfZnJvemVuKiBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzCisuLiBjOnZhcjo6IGNvbnN0IHN0cnVjdCBfZnJvemVuKiBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzCiAKICAgIFRoaXMgcG9pbnRlciBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhbiBhcnJheSBvZiA6Yzp0eXBlOmBzdHJ1Y3QgX2Zyb3plbmAKICAgIHJlY29yZHMsIHRlcm1pbmF0ZWQgYnkgb25lIHdob3NlIG1lbWJlcnMgYXJlIGFsbCAqTlVMTCogb3IgemVyby4gIFdoZW4gYSBmcm96ZW4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbml0LnJzdCBiL0RvYy9jLWFwaS9pbml0LnJzdAppbmRleCA0YmI1MDY0Li42Mzk4MTljIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW5pdC5yc3QKKysrIGIvRG9jL2MtYXBpL2luaXQucnN0CkBAIC0xMzQsNiArMTM0LDkgQEAKICAgIGNoYW5nZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwcm9ncmFtJ3MgZXhlY3V0aW9uLiAgTm8gY29kZSBpbiB0aGUgUHl0aG9uCiAgICBpbnRlcnByZXRlciB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhpcyBzdG9yYWdlLgogCisgICBVc2UgOmM6ZnVuYzpgUHlfRGVjb2RlTG9jYWxlYCB0byBkZWNvZGUgYSBieXRlcyBzdHJpbmcgdG8gZ2V0IGEKKyAgIDpjOnR5cGU6YHdjaGFyXypgIHN0cmluZy4KKwogCiAuLiBjOmZ1bmN0aW9uOjogd2NoYXIqIFB5X0dldFByb2dyYW1OYW1lKCkKIApAQCAtMjQ1LDYgKzI0OCw5IEBACiAgICA6ZGF0YTpgc3lzLmV4ZWNfcHJlZml4YCB0byBiZSBlbXB0eS4gIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gbW9kaWZ5IHRoZXNlCiAgICBpZiByZXF1aXJlZCBhZnRlciBjYWxsaW5nIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLgogCisgICBVc2UgOmM6ZnVuYzpgUHlfRGVjb2RlTG9jYWxlYCB0byBkZWNvZGUgYSBieXRlcyBzdHJpbmcgdG8gZ2V0IGEKKyAgIDpjOnR5cGU6YHdjaGFyXypgIHN0cmluZy4KKwogICAgVGhlIHBhdGggYXJndW1lbnQgaXMgY29waWVkIGludGVybmFsbHksIHNvIHRoZSBjYWxsZXIgbWF5IGZyZWUgaXQgYWZ0ZXIgdGhlCiAgICBjYWxsIGNvbXBsZXRlcy4KIApAQCAtMzQ0LDExICszNTAsMTQgQEAKICAgICAgOmRhdGE6YHN5cy5wYXRoYCwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgcHJlcGVuZGluZyB0aGUgY3VycmVudCB3b3JraW5nCiAgICAgIGRpcmVjdG9yeSAoYGAiLiJgYCkuCiAKKyAgIFVzZSA6YzpmdW5jOmBQeV9EZWNvZGVMb2NhbGVgIHRvIGRlY29kZSBhIGJ5dGVzIHN0cmluZyB0byBnZXQgYQorICAgOmM6dHlwZTpgd2NoYXJfKmAgc3RyaW5nLgorCiAgICAuLiBub3RlOjoKICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYXBwbGljYXRpb25zIGVtYmVkZGluZyB0aGUgUHl0aG9uIGludGVycHJldGVyCiAgICAgICBmb3IgcHVycG9zZXMgb3RoZXIgdGhhbiBleGVjdXRpbmcgYSBzaW5nbGUgc2NyaXB0IHBhc3MgMCBhcyAqdXBkYXRlcGF0aCosCiAgICAgICBhbmQgdXBkYXRlIDpkYXRhOmBzeXMucGF0aGAgdGhlbXNlbHZlcyBpZiBkZXNpcmVkLgotICAgICAgU2VlIGBDVkUtMjAwOC01OTgzIDxodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDgtNTk4Mz5gXy4KKyAgICAgIFNlZSBgQ1ZFLTIwMDgtNTk4MyA8aHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUtMjAwOC01OTgzPmBfLgogCiAgICAgICBPbiB2ZXJzaW9ucyBiZWZvcmUgMy4xLjMsIHlvdSBjYW4gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QgYnkgbWFudWFsbHkKICAgICAgIHBvcHBpbmcgdGhlIGZpcnN0IDpkYXRhOmBzeXMucGF0aGAgZWxlbWVudCBhZnRlciBoYXZpbmcgY2FsbGVkCkBAIC0zNjgsNiArMzc3LDkgQEAKICAgIHRvIDEgdW5sZXNzIHRoZSA6cHJvZ3JhbTpgcHl0aG9uYCBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZQogICAgOm9wdGlvbjpgLUlgLgogCisgICBVc2UgOmM6ZnVuYzpgUHlfRGVjb2RlTG9jYWxlYCB0byBkZWNvZGUgYSBieXRlcyBzdHJpbmcgdG8gZ2V0IGEKKyAgIDpjOnR5cGU6YHdjaGFyXypgIHN0cmluZy4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgVGhlICp1cGRhdGVwYXRoKiB2YWx1ZSBkZXBlbmRzIG9uIDpvcHRpb246YC1JYC4KIAogCkBAIC0zODIsNiArMzk0LDkgQEAKICAgIGV4ZWN1dGlvbi4gIE5vIGNvZGUgaW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2YKICAgIHRoaXMgc3RvcmFnZS4KIAorICAgVXNlIDpjOmZ1bmM6YFB5X0RlY29kZUxvY2FsZWAgdG8gZGVjb2RlIGEgYnl0ZXMgc3RyaW5nIHRvIGdldCBhCisgICA6Yzp0eXBlOmB3Y2hhcl8qYCBzdHJpbmcuCisKIAogLi4gYzpmdW5jdGlvbjo6IHdfY2hhciogUHlfR2V0UHl0aG9uSG9tZSgpCiAKQEAgLTg1OCw2ICs4NzMsOCBAQAogICAgICAgaW5zdGVhZC4KIAogCisuLiBfc3ViLWludGVycHJldGVyLXN1cHBvcnQ6CisKIFN1Yi1pbnRlcnByZXRlciBzdXBwb3J0CiA9PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QgYi9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKaW5kZXggZTM0MTA0Ny4uZmU2MDFiNiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL21hcHBpbmcucnN0CisrKyBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdApAQCAtNTAsMjEgKzUwLDIxIEBACiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXBwaW5nX0tleXMoUHlPYmplY3QgKm8pCiAKLSAgIE9uIHN1Y2Nlc3MsIHJldHVybiBhIGxpc3Qgb2YgdGhlIGtleXMgaW4gb2JqZWN0ICpvKi4gIE9uIGZhaWx1cmUsIHJldHVybiAqTlVMTCouCi0gICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbGlzdChvLmtleXMoKSlgYC4KKyAgIE9uIHN1Y2Nlc3MsIHJldHVybiBhIGxpc3QsIGEgdHVwbGUgb3IgYSBkaWN0aW9uYXJ5IHZpZXcgaW4gY2FzZSBvZiBhIGRpY3QsCisgICBvZiB0aGUga2V5cyBpbiBvYmplY3QgKm8qLiBPbiBmYWlsdXJlLCByZXR1cm4gKk5VTEwqLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXBwaW5nX1ZhbHVlcyhQeU9iamVjdCAqbykKIAotICAgT24gc3VjY2VzcywgcmV0dXJuIGEgbGlzdCBvZiB0aGUgdmFsdWVzIGluIG9iamVjdCAqbyouICBPbiBmYWlsdXJlLCByZXR1cm4KLSAgICpOVUxMKi4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxpc3Qoby52YWx1ZXMoKSlgYC4KKyAgIE9uIHN1Y2Nlc3MsIHJldHVybiBhIGxpc3QsIGEgdHVwbGUgb3IgYSBkaWN0aW9uYXJ5IHZpZXcgaW4gY2FzZSBvZiBhIGRpY3QsIG9mCisgICB0aGUgdmFsdWVzIGluIG9iamVjdCAqbyouIE9uIGZhaWx1cmUsIHJldHVybiAqTlVMTCouCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1hcHBpbmdfSXRlbXMoUHlPYmplY3QgKm8pCiAKLSAgIE9uIHN1Y2Nlc3MsIHJldHVybiBhIGxpc3Qgb2YgdGhlIGl0ZW1zIGluIG9iamVjdCAqbyosIHdoZXJlIGVhY2ggaXRlbSBpcyBhIHR1cGxlCi0gICBjb250YWluaW5nIGEga2V5LXZhbHVlIHBhaXIuICBPbiBmYWlsdXJlLCByZXR1cm4gKk5VTEwqLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxpc3Qoby5pdGVtcygpKWBgLgorICAgT24gc3VjY2VzcywgcmV0dXJuIGEgbGlzdCwgYSB0dXBsZSBvciBhIGRpY3Rpb25hcnkgdmlldyBpbiBjYXNlIG9mIGEgZGljdCwgb2YKKyAgIHRoZSBpdGVtcyBpbiBvYmplY3QgKm8qLCB3aGVyZSBlYWNoIGl0ZW0gaXMgYSB0dXBsZSBjb250YWluaW5nIGEga2V5LXZhbHVlCisgICBwYWlyLiAgT24gZmFpbHVyZSwgcmV0dXJuICpOVUxMKi4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbWVtb3J5LnJzdCBiL0RvYy9jLWFwaS9tZW1vcnkucnN0CmluZGV4IDc5MDg2MjIuLjI5MGVmMDkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9tZW1vcnkucnN0CisrKyBiL0RvYy9jLWFwaS9tZW1vcnkucnN0CkBAIC04Myw2ICs4MywxMiBAQAogdGhlIEMgbGlicmFyeSBhbGxvY2F0b3IgYXMgc2hvd24gaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSBhbGxvY2F0ZWQgbWVtb3J5CiBmb3IgdGhlIEkvTyBidWZmZXIgZXNjYXBlcyBjb21wbGV0ZWx5IHRoZSBQeXRob24gbWVtb3J5IG1hbmFnZXIuCiAKKy4uIHNlZWFsc286OgorCisgICBUaGUgOmVudnZhcjpgUFlUSE9OTUFMTE9DU1RBVFNgIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHByaW50CisgICBtZW1vcnkgYWxsb2NhdGlvbiBzdGF0aXN0aWNzIGV2ZXJ5IHRpbWUgYSBuZXcgb2JqZWN0IGFyZW5hIGlzIGNyZWF0ZWQsIGFuZAorICAgb24gc2h1dGRvd24uCisKIAogUmF3IE1lbW9yeSBJbnRlcmZhY2UKID09PT09PT09PT09PT09PT09PT09CkBAIC05MiwzOCArOTgsNTkgQEAKIG5lZWQgdG8gYmUgaGVsZC4KIAogVGhlIGRlZmF1bHQgcmF3IG1lbW9yeSBibG9jayBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLTpjOmZ1bmM6YG1hbGxvY2AsIDpjOmZ1bmM6YHJlYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYDsgY2FsbCBgYG1hbGxvYygxKWBgIHdoZW4KLXJlcXVlc3RpbmcgemVybyBieXRlcy4KKzpjOmZ1bmM6YG1hbGxvY2AsIDpjOmZ1bmM6YGNhbGxvY2AsIDpjOmZ1bmM6YHJlYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYDsgY2FsbAorYGBtYWxsb2MoMSlgYCAob3IgYGBjYWxsb2MoMSwgMSlgYCkgd2hlbiByZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBuKQogCiAgICBBbGxvY2F0ZXMgKm4qIGJ5dGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvZiB0eXBlIDpjOnR5cGU6YHZvaWRcKmAgdG8gdGhlCi0gICBhbGxvY2F0ZWQgbWVtb3J5LCBvciAqTlVMTCogaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFJlcXVlc3RpbmcgemVybyBieXRlcwotICAgcmV0dXJucyBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMgaWYKLSAgIGBgUHlNZW1fUmF3TWFsbG9jKDEpYGAgaGFkIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQorICAgYWxsb2NhdGVkIG1lbW9yeSwgb3IgKk5VTEwqIGlmIHRoZSByZXF1ZXN0IGZhaWxzLgorCisgICBSZXF1ZXN0aW5nIHplcm8gYnl0ZXMgcmV0dXJucyBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMKKyAgIGlmIGBgUHlNZW1fUmF3TWFsbG9jKDEpYGAgaGFkIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQogICAgYmVlbiBpbml0aWFsaXplZCBpbiBhbnkgd2F5LgogCiAKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SYXdDYWxsb2Moc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKQorCisgICBBbGxvY2F0ZXMgKm5lbGVtKiBlbGVtZW50cyBlYWNoIHdob3NlIHNpemUgaW4gYnl0ZXMgaXMgKmVsc2l6ZSogYW5kIHJldHVybnMKKyAgIGEgcG9pbnRlciBvZiB0eXBlIDpjOnR5cGU6YHZvaWRcKmAgdG8gdGhlIGFsbG9jYXRlZCBtZW1vcnksIG9yICpOVUxMKiBpZiB0aGUKKyAgIHJlcXVlc3QgZmFpbHMuIFRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gemVyb3MuCisKKyAgIFJlcXVlc3RpbmcgemVybyBlbGVtZW50cyBvciBlbGVtZW50cyBvZiBzaXplIHplcm8gYnl0ZXMgcmV0dXJucyBhIGRpc3RpbmN0CisgICBub24tKk5VTEwqIHBvaW50ZXIgaWYgcG9zc2libGUsIGFzIGlmIGBgUHlNZW1fUmF3Q2FsbG9jKDEsIDEpYGAgaGFkIGJlZW4KKyAgIGNhbGxlZCBpbnN0ZWFkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3UmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbikKIAogICAgUmVzaXplcyB0aGUgbWVtb3J5IGJsb2NrIHBvaW50ZWQgdG8gYnkgKnAqIHRvICpuKiBieXRlcy4gVGhlIGNvbnRlbnRzIHdpbGwKLSAgIGJlIHVuY2hhbmdlZCB0byB0aGUgbWluaW11bSBvZiB0aGUgb2xkIGFuZCB0aGUgbmV3IHNpemVzLiBJZiAqcCogaXMgKk5VTEwqLAotICAgdGhlIGNhbGwgaXMgZXF1aXZhbGVudCB0byBgYFB5TWVtX1Jhd01hbGxvYyhuKWBgOyBlbHNlIGlmICpuKiBpcyBlcXVhbCB0bwotICAgemVybywgdGhlIG1lbW9yeSBibG9jayBpcyByZXNpemVkIGJ1dCBpcyBub3QgZnJlZWQsIGFuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcgotICAgaXMgbm9uLSpOVUxMKi4gVW5sZXNzICpwKiBpcyAqTlVMTCosIGl0IG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEKLSAgIHByZXZpb3VzIGNhbGwgdG8gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYC4gSWYKLSAgIHRoZSByZXF1ZXN0IGZhaWxzLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCByZXR1cm5zICpOVUxMKiBhbmQgKnAqIHJlbWFpbnMKLSAgIGEgdmFsaWQgcG9pbnRlciB0byB0aGUgcHJldmlvdXMgbWVtb3J5IGFyZWEuCisgICBiZSB1bmNoYW5nZWQgdG8gdGhlIG1pbmltdW0gb2YgdGhlIG9sZCBhbmQgdGhlIG5ldyBzaXplcy4KKworICAgSWYgKnAqIGlzICpOVUxMKiwgdGhlIGNhbGwgaXMgZXF1aXZhbGVudCB0byBgYFB5TWVtX1Jhd01hbGxvYyhuKWBgOyBlbHNlIGlmCisgICAqbiogaXMgZXF1YWwgdG8gemVybywgdGhlIG1lbW9yeSBibG9jayBpcyByZXNpemVkIGJ1dCBpcyBub3QgZnJlZWQsIGFuZCB0aGUKKyAgIHJldHVybmVkIHBvaW50ZXIgaXMgbm9uLSpOVUxMKi4KKworICAgVW5sZXNzICpwKiBpcyAqTlVMTCosIGl0IG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0bworICAgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2Agb3IKKyAgIDpjOmZ1bmM6YFB5TWVtX1Jhd0NhbGxvY2AuCisKKyAgIElmIHRoZSByZXF1ZXN0IGZhaWxzLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCByZXR1cm5zICpOVUxMKiBhbmQgKnAqCisgICByZW1haW5zIGEgdmFsaWQgcG9pbnRlciB0byB0aGUgcHJldmlvdXMgbWVtb3J5IGFyZWEuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fUmF3RnJlZSh2b2lkICpwKQogCiAgICBGcmVlcyB0aGUgbWVtb3J5IGJsb2NrIHBvaW50ZWQgdG8gYnkgKnAqLCB3aGljaCBtdXN0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBhCi0gICBwcmV2aW91cyBjYWxsIHRvIDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AuCi0gICBPdGhlcndpc2UsIG9yIGlmIGBgUHlNZW1fRnJlZShwKWBgIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHVuZGVmaW5lZAotICAgYmVoYXZpb3Igb2NjdXJzLiBJZiAqcCogaXMgKk5VTEwqLCBubyBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLgorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCBvcgorICAgOmM6ZnVuYzpgUHlNZW1fUmF3Q2FsbG9jYC4gIE90aGVyd2lzZSwgb3IgaWYgYGBQeU1lbV9GcmVlKHApYGAgaGFzIGJlZW4KKyAgIGNhbGxlZCBiZWZvcmUsIHVuZGVmaW5lZCBiZWhhdmlvciBvY2N1cnMuCisKKyAgIElmICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCiAKIAogLi4gX21lbW9yeWludGVyZmFjZToKQEAgLTEzNiw4ICsxNjMsOCBAQAogbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwLgogCiBUaGUgZGVmYXVsdCBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Ci06YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCi1yZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmBjYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwKK2BgbWFsbG9jKDEpYGAgKG9yIGBgY2FsbG9jKDEsIDEpYGApIHdoZW4gcmVxdWVzdGluZyB6ZXJvIGJ5dGVzLgogCiAuLiB3YXJuaW5nOjoKIApAQCAtMTQ3LDI5ICsxNzQsNTAgQEAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9NYWxsb2Moc2l6ZV90IG4pCiAKICAgIEFsbG9jYXRlcyAqbiogYnl0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIG9mIHR5cGUgOmM6dHlwZTpgdm9pZFwqYCB0byB0aGUKLSAgIGFsbG9jYXRlZCBtZW1vcnksIG9yICpOVUxMKiBpZiB0aGUgcmVxdWVzdCBmYWlscy4gUmVxdWVzdGluZyB6ZXJvIGJ5dGVzIHJldHVybnMKLSAgIGEgZGlzdGluY3Qgbm9uLSpOVUxMKiBwb2ludGVyIGlmIHBvc3NpYmxlLCBhcyBpZiBgYFB5TWVtX01hbGxvYygxKWBgIGhhZAotICAgYmVlbiBjYWxsZWQgaW5zdGVhZC4gVGhlIG1lbW9yeSB3aWxsIG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgaW4gYW55IHdheS4KKyAgIGFsbG9jYXRlZCBtZW1vcnksIG9yICpOVUxMKiBpZiB0aGUgcmVxdWVzdCBmYWlscy4KKworICAgUmVxdWVzdGluZyB6ZXJvIGJ5dGVzIHJldHVybnMgYSBkaXN0aW5jdCBub24tKk5VTEwqIHBvaW50ZXIgaWYgcG9zc2libGUsIGFzCisgICBpZiBgYFB5TWVtX01hbGxvYygxKWBgIGhhZCBiZWVuIGNhbGxlZCBpbnN0ZWFkLiBUaGUgbWVtb3J5IHdpbGwgbm90IGhhdmUKKyAgIGJlZW4gaW5pdGlhbGl6ZWQgaW4gYW55IHdheS4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fQ2FsbG9jKHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSkKKworICAgQWxsb2NhdGVzICpuZWxlbSogZWxlbWVudHMgZWFjaCB3aG9zZSBzaXplIGluIGJ5dGVzIGlzICplbHNpemUqIGFuZCByZXR1cm5zCisgICBhIHBvaW50ZXIgb2YgdHlwZSA6Yzp0eXBlOmB2b2lkXCpgIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCBvciAqTlVMTCogaWYgdGhlCisgICByZXF1ZXN0IGZhaWxzLiBUaGUgbWVtb3J5IGlzIGluaXRpYWxpemVkIHRvIHplcm9zLgorCisgICBSZXF1ZXN0aW5nIHplcm8gZWxlbWVudHMgb3IgZWxlbWVudHMgb2Ygc2l6ZSB6ZXJvIGJ5dGVzIHJldHVybnMgYSBkaXN0aW5jdAorICAgbm9uLSpOVUxMKiBwb2ludGVyIGlmIHBvc3NpYmxlLCBhcyBpZiBgYFB5TWVtX0NhbGxvYygxLCAxKWBgIGhhZCBiZWVuIGNhbGxlZAorICAgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5TWVtX1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG4pCiAKICAgIFJlc2l6ZXMgdGhlIG1lbW9yeSBibG9jayBwb2ludGVkIHRvIGJ5ICpwKiB0byAqbiogYnl0ZXMuIFRoZSBjb250ZW50cyB3aWxsIGJlCi0gICB1bmNoYW5nZWQgdG8gdGhlIG1pbmltdW0gb2YgdGhlIG9sZCBhbmQgdGhlIG5ldyBzaXplcy4gSWYgKnAqIGlzICpOVUxMKiwgdGhlCi0gICBjYWxsIGlzIGVxdWl2YWxlbnQgdG8gYGBQeU1lbV9NYWxsb2MobilgYDsgZWxzZSBpZiAqbiogaXMgZXF1YWwgdG8gemVybywKLSAgIHRoZSBtZW1vcnkgYmxvY2sgaXMgcmVzaXplZCBidXQgaXMgbm90IGZyZWVkLCBhbmQgdGhlIHJldHVybmVkIHBvaW50ZXIgaXMKLSAgIG5vbi0qTlVMTCouICBVbmxlc3MgKnAqIGlzICpOVUxMKiwgaXQgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsCi0gICB0byA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLiBJZiB0aGUgcmVxdWVzdCBmYWlscywKLSAgIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgIHJldHVybnMgKk5VTEwqIGFuZCAqcCogcmVtYWlucyBhIHZhbGlkIHBvaW50ZXIgdG8gdGhlCi0gICBwcmV2aW91cyBtZW1vcnkgYXJlYS4KKyAgIHVuY2hhbmdlZCB0byB0aGUgbWluaW11bSBvZiB0aGUgb2xkIGFuZCB0aGUgbmV3IHNpemVzLgorCisgICBJZiAqcCogaXMgKk5VTEwqLCB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBgUHlNZW1fTWFsbG9jKG4pYGA7IGVsc2UgaWYgKm4qCisgICBpcyBlcXVhbCB0byB6ZXJvLCB0aGUgbWVtb3J5IGJsb2NrIGlzIHJlc2l6ZWQgYnV0IGlzIG5vdCBmcmVlZCwgYW5kIHRoZQorICAgcmV0dXJuZWQgcG9pbnRlciBpcyBub24tKk5VTEwqLgorCisgICBVbmxlc3MgKnAqIGlzICpOVUxMKiwgaXQgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBjYWxsIHRvCisgICA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9DYWxsb2NgLgorCisgICBJZiB0aGUgcmVxdWVzdCBmYWlscywgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AgcmV0dXJucyAqTlVMTCogYW5kICpwKiByZW1haW5zCisgICBhIHZhbGlkIHBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIG1lbW9yeSBhcmVhLgogCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5TWVtX0ZyZWUodm9pZCAqcCkKIAogICAgRnJlZXMgdGhlIG1lbW9yeSBibG9jayBwb2ludGVkIHRvIGJ5ICpwKiwgd2hpY2ggbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYQotICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLiAgT3RoZXJ3aXNlLCBvcgotICAgaWYgYGBQeU1lbV9GcmVlKHApYGAgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdW5kZWZpbmVkIGJlaGF2aW9yIG9jY3Vycy4gSWYKLSAgICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCisgICBwcmV2aW91cyBjYWxsIHRvIDpjOmZ1bmM6YFB5TWVtX01hbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgIG9yCisgICA6YzpmdW5jOmBQeU1lbV9DYWxsb2NgLiAgT3RoZXJ3aXNlLCBvciBpZiBgYFB5TWVtX0ZyZWUocClgYCBoYXMgYmVlbiBjYWxsZWQKKyAgIGJlZm9yZSwgdW5kZWZpbmVkIGJlaGF2aW9yIG9jY3Vycy4KKworICAgSWYgKnAqIGlzICpOVUxMKiwgbm8gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KIAogVGhlIGZvbGxvd2luZyB0eXBlLW9yaWVudGVkIG1hY3JvcyBhcmUgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlLiAgTm90ZSAgdGhhdAogKlRZUEUqIHJlZmVycyB0byBhbnkgQyB0eXBlLgpAQCAtMTg3LDggKzIzNSwxMCBAQAogICAgU2FtZSBhcyA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCwgYnV0IHRoZSBtZW1vcnkgYmxvY2sgaXMgcmVzaXplZCB0byBgYChuICoKICAgIHNpemVvZihUWVBFKSlgYCBieXRlcy4gIFJldHVybnMgYSBwb2ludGVyIGNhc3QgdG8gOmM6dHlwZTpgVFlQRVwqYC4gT24gcmV0dXJuLAogICAgKnAqIHdpbGwgYmUgYSBwb2ludGVyIHRvIHRoZSBuZXcgbWVtb3J5IGFyZWEsIG9yICpOVUxMKiBpbiB0aGUgZXZlbnQgb2YKLSAgIGZhaWx1cmUuICBUaGlzIGlzIGEgQyBwcmVwcm9jZXNzb3IgbWFjcm87IHAgaXMgYWx3YXlzIHJlYXNzaWduZWQuICBTYXZlCi0gICB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgcCB0byBhdm9pZCBsb3NpbmcgbWVtb3J5IHdoZW4gaGFuZGxpbmcgZXJyb3JzLgorICAgZmFpbHVyZS4KKworICAgVGhpcyBpcyBhIEMgcHJlcHJvY2Vzc29yIG1hY3JvOyAqcCogaXMgYWx3YXlzIHJlYXNzaWduZWQuICBTYXZlIHRoZSBvcmlnaW5hbAorICAgdmFsdWUgb2YgKnAqIHRvIGF2b2lkIGxvc2luZyBtZW1vcnkgd2hlbiBoYW5kbGluZyBlcnJvcnMuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fRGVsKHZvaWQgKnApCkBAIC0yMDAsOSArMjUwLDEyIEBACiBub3RlIHRoYXQgdGhlaXIgdXNlIGRvZXMgbm90IHByZXNlcnZlIGJpbmFyeSBjb21wYXRpYmlsaXR5IGFjcm9zcyBQeXRob24KIHZlcnNpb25zIGFuZCBpcyB0aGVyZWZvcmUgZGVwcmVjYXRlZCBpbiBleHRlbnNpb24gbW9kdWxlcy4KIAotOmM6ZnVuYzpgUHlNZW1fTUFMTE9DYCwgOmM6ZnVuYzpgUHlNZW1fUkVBTExPQ2AsIDpjOmZ1bmM6YFB5TWVtX0ZSRUVgLgotCi06YzpmdW5jOmBQeU1lbV9ORVdgLCA6YzpmdW5jOmBQeU1lbV9SRVNJWkVgLCA6YzpmdW5jOmBQeU1lbV9ERUxgLgorKiBgYFB5TWVtX01BTExPQyhzaXplKWBgCisqIGBgUHlNZW1fTkVXKHR5cGUsIHNpemUpYGAKKyogYGBQeU1lbV9SRUFMTE9DKHB0ciwgc2l6ZSlgYAorKiBgYFB5TWVtX1JFU0laRShwdHIsIHR5cGUsIHNpemUpYGAKKyogYGBQeU1lbV9GUkVFKHB0cilgYAorKiBgYFB5TWVtX0RFTChwdHIpYGAKIAogCiBDdXN0b21pemUgTWVtb3J5IEFsbG9jYXRvcnMKQEAgLTIxMCw3ICsyNjMsNyBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAotLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3IKKy4uIGM6dHlwZTo6IFB5TWVtQWxsb2NhdG9yRXgKIAogICAgU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yLiBUaGUgc3RydWN0dXJlIGhhcwogICAgZm91ciBmaWVsZHM6CkBAIC0yMjIsMjkgKzI3NSwzOSBAQAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBgYHZvaWQqIG1hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKWBgICAgICAgICAgICAgICAgICB8IGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHZvaWQqIGNhbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSlgYCB8IGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGluaXRpYWxpemVkICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdpdGggemVyb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBgYHZvaWQqIHJlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSlgYCB8IGFsbG9jYXRlIG9yIHJlc2l6ZSBhIG1lbW9yeSBibG9jayAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBgYHZvaWQgZnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cilgYCAgICAgICAgICAgICAgICAgICAgICB8IGZyZWUgYSBtZW1vcnkgYmxvY2sgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIDpjOnR5cGU6YFB5TWVtQWxsb2NhdG9yYCBzdHJ1Y3R1cmUgd2FzIHJlbmFtZWQgdG8KKyAgICAgIDpjOnR5cGU6YFB5TWVtQWxsb2NhdG9yRXhgIGFuZCBhIG5ldyBgYGNhbGxvY2BgIGZpZWxkIHdhcyBhZGRlZC4KKworCiAuLiBjOnR5cGU6OiBQeU1lbUFsbG9jYXRvckRvbWFpbgogCiAgICBFbnVtIHVzZWQgdG8gaWRlbnRpZnkgYW4gYWxsb2NhdG9yIGRvbWFpbi4gRG9tYWluczoKIAogICAgKiA6YzpkYXRhOmBQWU1FTV9ET01BSU5fUkFXYDogZnVuY3Rpb25zIDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2AsCi0gICAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIGFuZCA6YzpmdW5jOmBQeU1lbV9SYXdGcmVlYAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmF3Q2FsbG9jYCBhbmQKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKICAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX01FTWA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLAotICAgICA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX0NhbGxvY2AgYW5kIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgCiAgICAqIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9PQkpgOiBmdW5jdGlvbnMgOmM6ZnVuYzpgUHlPYmplY3RfTWFsbG9jYCwKLSAgICAgOmM6ZnVuYzpgUHlPYmplY3RfUmVhbGxvY2AgYW5kIDpjOmZ1bmM6YFB5T2JqZWN0X0ZyZWVgCisgICAgIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLCA6YzpmdW5jOmBQeU9iamVjdF9DYWxsb2NgIGFuZAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9GcmVlYAogCiAKLS4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5TWVtX0dldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvckV4ICphbGxvY2F0b3IpCiAKICAgIEdldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4KIAogCi0uLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9TZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3JFeCAqYWxsb2NhdG9yKQogCiAgICBTZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCiAKQEAgLTI2NiwxMCArMzI5LDExIEBACiAgICBmdW5jdGlvbnM6CiAKICAgIC0gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsCi0gICAgIDpjOmZ1bmM6YFB5TWVtX1Jhd0ZyZWVgCi0gICAtIDpjOmZ1bmM6YFB5TWVtX01hbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9GcmVlYAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdDYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SYXdGcmVlYAorICAgLSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fQ2FsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKICAgIC0gOmM6ZnVuYzpgUHlPYmplY3RfTWFsbG9jYCwgOmM6ZnVuYzpgUHlPYmplY3RfUmVhbGxvY2AsCi0gICAgIDpjOmZ1bmM6YFB5T2JqZWN0X0ZyZWVgCisgICAgIDpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxvY2AsIDpjOmZ1bmM6YFB5T2JqZWN0X0ZyZWVgCiAKICAgIE5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdGhlIGJ5dGUgYGAweENCYGAsIGZyZWVkIG1lbW9yeSBpcwogICAgZmlsbGVkIHdpdGggdGhlIGJ5dGUgYGAweERCYGAuIEFkZGl0aW9uYWwgY2hlY2tzOgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21lbW9yeXZpZXcucnN0IGIvRG9jL2MtYXBpL21lbW9yeXZpZXcucnN0CmluZGV4IDVlNTA5NzcuLjlmNmJmZDcgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9tZW1vcnl2aWV3LnJzdAorKysgYi9Eb2MvYy1hcGkvbWVtb3J5dmlldy5yc3QKQEAgLTM1LDcgKzM1LDcgQEAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0ICpQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cyhQeU9iamVjdCAqb2JqLCBpbnQgYnVmZmVydHlwZSwgY2hhciBvcmRlcikKIAotICAgQ3JlYXRlIGEgbWVtb3J5dmlldyBvYmplY3QgdG8gYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSAoaW4gZWl0aGVyCisgICBDcmVhdGUgYSBtZW1vcnl2aWV3IG9iamVjdCB0byBhIDp0ZXJtOmBjb250aWd1b3VzYCBjaHVuayBvZiBtZW1vcnkgKGluIGVpdGhlcgogICAgJ0MnIG9yICdGJ29ydHJhbiAqb3JkZXIqKSBmcm9tIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIGJ1ZmZlcgogICAgaW50ZXJmYWNlLiBJZiBtZW1vcnkgaXMgY29udGlndW91cywgdGhlIG1lbW9yeXZpZXcgb2JqZWN0IHBvaW50cyB0byB0aGUKICAgIG9yaWdpbmFsIG1lbW9yeS4gT3RoZXJ3aXNlLCBhIGNvcHkgaXMgbWFkZSBhbmQgdGhlIG1lbW9yeXZpZXcgcG9pbnRzIHRvIGEKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tZXRob2QucnN0IGIvRG9jL2MtYXBpL21ldGhvZC5yc3QKaW5kZXggYWNjODFlNC4uN2EyYTg0ZiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL21ldGhvZC5yc3QKKysrIGIvRG9jL2MtYXBpL21ldGhvZC5yc3QKQEAgLTQ5LDcgKzQ5LDcgQEAKIC4uIGluZGV4Ojogb2JqZWN0OiBtZXRob2QKIAogTWV0aG9kcyBhcmUgYm91bmQgZnVuY3Rpb24gb2JqZWN0cy4gTWV0aG9kcyBhcmUgYWx3YXlzIGJvdW5kIHRvIGFuIGluc3RhbmNlIG9mCi1hbiB1c2VyLWRlZmluZWQgY2xhc3MuIFVuYm91bmQgbWV0aG9kcyAobWV0aG9kcyBib3VuZCB0byBhIGNsYXNzIG9iamVjdCkgYXJlCithIHVzZXItZGVmaW5lZCBjbGFzcy4gVW5ib3VuZCBtZXRob2RzIChtZXRob2RzIGJvdW5kIHRvIGEgY2xhc3Mgb2JqZWN0KSBhcmUKIG5vIGxvbmdlciBhdmFpbGFibGUuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCA5ODVhMzQ3Li4zNGY4NDQzIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtNyw4ICs3LDYgQEAKIAogLi4gaW5kZXg6OiBvYmplY3Q6IG1vZHVsZQogCi1UaGVyZSBhcmUgb25seSBhIGZldyBmdW5jdGlvbnMgc3BlY2lhbCB0byBtb2R1bGUgb2JqZWN0cy4KLQogCiAuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeU1vZHVsZV9UeXBlCiAKQEAgLTUyLDcgKzUwLDcgQEAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1vZHVsZV9OZXcoY29uc3QgY2hhciAqbmFtZSkKIAotICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUltcG9ydF9OZXdPYmplY3RgLCBidXQgdGhlIG5hbWUgaXMgYW4gVVRGLTggZW5jb2RlZAorICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUltcG9ydF9OZXdPYmplY3RgLCBidXQgdGhlIG5hbWUgaXMgYSBVVEYtOCBlbmNvZGVkCiAgICBzdHJpbmcgaW5zdGVhZCBvZiBhIFVuaWNvZGUgb2JqZWN0LgogCiAKQEAgLTYxLDEwICs1OSwxMCBAQAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IF9fZGljdF9fIChtb2R1bGUgYXR0cmlidXRlKQogCiAgICBSZXR1cm4gdGhlIGRpY3Rpb25hcnkgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyAqbW9kdWxlKidzIG5hbWVzcGFjZTsgdGhpcyBvYmplY3QKLSAgIGlzIHRoZSBzYW1lIGFzIHRoZSA6YXR0cjpgX19kaWN0X19gIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlIG9iamVjdC4gIFRoaXMKKyAgIGlzIHRoZSBzYW1lIGFzIHRoZSA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUgb2JqZWN0LiAgVGhpcwogICAgZnVuY3Rpb24gbmV2ZXIgZmFpbHMuICBJdCBpcyByZWNvbW1lbmRlZCBleHRlbnNpb25zIHVzZSBvdGhlcgogICAgOmM6ZnVuYzpgUHlNb2R1bGVfXCpgIGFuZCA6YzpmdW5jOmBQeU9iamVjdF9cKmAgZnVuY3Rpb25zIHJhdGhlciB0aGFuIGRpcmVjdGx5Ci0gICBtYW5pcHVsYXRlIGEgbW9kdWxlJ3MgOmF0dHI6YF9fZGljdF9fYC4KKyAgIG1hbmlwdWxhdGUgYSBtb2R1bGUncyA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1vZHVsZV9HZXROYW1lT2JqZWN0KFB5T2JqZWN0ICptb2R1bGUpCkBAIC04NCw2ICs4MiwxOCBAQAogICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeU1vZHVsZV9HZXROYW1lT2JqZWN0YCBidXQgcmV0dXJuIHRoZSBuYW1lIGVuY29kZWQgdG8KICAgIGBgJ3V0Zi04J2BgLgogCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNb2R1bGVfR2V0U3RhdGUoUHlPYmplY3QgKm1vZHVsZSkKKworICAgUmV0dXJuIHRoZSAic3RhdGUiIG9mIHRoZSBtb2R1bGUsIHRoYXQgaXMsIGEgcG9pbnRlciB0byB0aGUgYmxvY2sgb2YgbWVtb3J5CisgICBhbGxvY2F0ZWQgYXQgbW9kdWxlIGNyZWF0aW9uIHRpbWUsIG9yICpOVUxMKi4gIFNlZQorICAgOmM6bWVtYmVyOmBQeU1vZHVsZURlZi5tX3NpemVgLgorCisKKy4uIGM6ZnVuY3Rpb246OiBQeU1vZHVsZURlZiogUHlNb2R1bGVfR2V0RGVmKFB5T2JqZWN0ICptb2R1bGUpCisKKyAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIDpjOnR5cGU6YFB5TW9kdWxlRGVmYCBzdHJ1Y3QgZnJvbSB3aGljaCB0aGUgbW9kdWxlIHdhcworICAgY3JlYXRlZCwgb3IgKk5VTEwqIGlmIHRoZSBtb2R1bGUgd2Fzbid0IGNyZWF0ZWQgZnJvbSBhIGRlZmluaXRpb24uCisKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdChQeU9iamVjdCAqbW9kdWxlKQogCkBAIC0xMDksNzAgKzExOSwyNSBAQAogICAgICAgdW5lbmNvZGFibGUgZmlsZW5hbWVzLCB1c2UgOmM6ZnVuYzpgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3RgIGluc3RlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5TW9kdWxlX0dldFN0YXRlKFB5T2JqZWN0ICptb2R1bGUpCi0KLSAgIFJldHVybiB0aGUgInN0YXRlIiBvZiB0aGUgbW9kdWxlLCB0aGF0IGlzLCBhIHBvaW50ZXIgdG8gdGhlIGJsb2NrIG9mIG1lbW9yeQotICAgYWxsb2NhdGVkIGF0IG1vZHVsZSBjcmVhdGlvbiB0aW1lLCBvciAqTlVMTCouICBTZWUKLSAgIDpjOm1lbWJlcjpgUHlNb2R1bGVEZWYubV9zaXplYC4KLQotCi0uLiBjOmZ1bmN0aW9uOjogUHlNb2R1bGVEZWYqIFB5TW9kdWxlX0dldERlZihQeU9iamVjdCAqbW9kdWxlKQotCi0gICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSA6Yzp0eXBlOmBQeU1vZHVsZURlZmAgc3RydWN0IGZyb20gd2hpY2ggdGhlIG1vZHVsZSB3YXMKLSAgIGNyZWF0ZWQsIG9yICpOVUxMKiBpZiB0aGUgbW9kdWxlIHdhc24ndCBjcmVhdGVkIHdpdGgKLSAgIDpjOmZ1bmM6YFB5TW9kdWxlX0NyZWF0ZWAuCi0KLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTdGF0ZV9GaW5kTW9kdWxlKFB5TW9kdWxlRGVmICpkZWYpCi0KLSAgIFJldHVybnMgdGhlIG1vZHVsZSBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZCBmcm9tICpkZWYqIGZvciB0aGUgY3VycmVudCBpbnRlcnByZXRlci4KLSAgIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoYXQgdGhlIG1vZHVsZSBvYmplY3QgaGFzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGludGVycHJldGVyIHN0YXRlIHdpdGgKLSAgIDpjOmZ1bmM6YFB5U3RhdGVfQWRkTW9kdWxlYCBiZWZvcmVoYW5kLiBJbiBjYXNlIHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSBvYmplY3QgaXMgbm90Ci0gICBmb3VuZCBvciBoYXMgbm90IGJlZW4gYXR0YWNoZWQgdG8gdGhlIGludGVycHJldGVyIHN0YXRlIHlldCwgaXQgcmV0dXJucyBOVUxMLgotCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5U3RhdGVfQWRkTW9kdWxlKFB5T2JqZWN0ICptb2R1bGUsIFB5TW9kdWxlRGVmICpkZWYpCi0KLSAgIEF0dGFjaGVzIHRoZSBtb2R1bGUgb2JqZWN0IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gdG8gdGhlIGludGVycHJldGVyIHN0YXRlLiBUaGlzIGFsbG93cwotICAgdGhlIG1vZHVsZSBvYmplY3QgdG8gYmUgYWNjZXNzaWJsZSB2aWEKLSAgIDpjOmZ1bmM6YFB5U3RhdGVfRmluZE1vZHVsZWAuCi0KLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5U3RhdGVfUmVtb3ZlTW9kdWxlKFB5TW9kdWxlRGVmICpkZWYpCi0KLSAgIFJlbW92ZXMgdGhlIG1vZHVsZSBvYmplY3QgY3JlYXRlZCBmcm9tICpkZWYqIGZyb20gdGhlIGludGVycHJldGVyIHN0YXRlLgotCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKy4uIF9pbml0aWFsaXppbmctbW9kdWxlczoKIAogSW5pdGlhbGl6aW5nIEMgbW9kdWxlcwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1UaGVzZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgdXNlZCBpbiB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgorTW9kdWxlcyBvYmplY3RzIGFyZSB1c3VhbGx5IGNyZWF0ZWQgZnJvbSBleHRlbnNpb24gbW9kdWxlcyAoc2hhcmVkIGxpYnJhcmllcword2hpY2ggZXhwb3J0IGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uKSwgb3IgY29tcGlsZWQtaW4gbW9kdWxlcworKHdoZXJlIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBhZGRlZCB1c2luZyA6YzpmdW5jOmBQeUltcG9ydF9BcHBlbmRJbml0dGFiYCkuCitTZWUgOnJlZjpgYnVpbGRpbmdgIG9yIDpyZWY6YGV4dGVuZGluZy13aXRoLWVtYmVkZGluZ2AgZm9yIGRldGFpbHMuCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNb2R1bGVfQ3JlYXRlKFB5TW9kdWxlRGVmICptb2R1bGUpCi0KLSAgIENyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0LCBnaXZlbiB0aGUgZGVmaW5pdGlvbiBpbiAqbW9kdWxlKi4gIFRoaXMgYmVoYXZlcwotICAgbGlrZSA6YzpmdW5jOmBQeU1vZHVsZV9DcmVhdGUyYCB3aXRoICptb2R1bGVfYXBpX3ZlcnNpb24qIHNldCB0bwotICAgOmNvbnN0OmBQWVRIT05fQVBJX1ZFUlNJT05gLgotCi0KLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNb2R1bGVfQ3JlYXRlMihQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgbW9kdWxlX2FwaV92ZXJzaW9uKQotCi0gICBDcmVhdGUgYSBuZXcgbW9kdWxlIG9iamVjdCwgZ2l2ZW4gdGhlIGRlZmluaXRpb24gaW4gKm1vZHVsZSosIGFzc3VtaW5nIHRoZQotICAgQVBJIHZlcnNpb24gKm1vZHVsZV9hcGlfdmVyc2lvbiouICBJZiB0aGF0IHZlcnNpb24gZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KLSAgIG9mIHRoZSBydW5uaW5nIGludGVycHJldGVyLCBhIDpleGM6YFJ1bnRpbWVXYXJuaW5nYCBpcyBlbWl0dGVkLgotCi0gICAuLiBub3RlOjoKLQotICAgICAgTW9zdCB1c2VzIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIDpjOmZ1bmM6YFB5TW9kdWxlX0NyZWF0ZWAKLSAgICAgIGluc3RlYWQ7IG9ubHkgdXNlIHRoaXMgaWYgeW91IGFyZSBzdXJlIHlvdSBuZWVkIGl0LgotCitUaGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FuIGVpdGhlciBwYXNzIGEgbW9kdWxlIGRlZmluaXRpb24gaW5zdGFuY2UKK3RvIDpjOmZ1bmM6YFB5TW9kdWxlX0NyZWF0ZWAsIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBtb2R1bGUgb2JqZWN0LAorb3IgcmVxdWVzdCAibXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24iIGJ5IHJldHVybmluZyB0aGUgZGVmaW5pdGlvbiBzdHJ1Y3QgaXRzZWxmLgogCiAuLiBjOnR5cGU6OiBQeU1vZHVsZURlZgogCi0gICBUaGlzIHN0cnVjdCBob2xkcyBhbGwgaW5mb3JtYXRpb24gdGhhdCBpcyBuZWVkZWQgdG8gY3JlYXRlIGEgbW9kdWxlIG9iamVjdC4KLSAgIFRoZXJlIGlzIHVzdWFsbHkgb25seSBvbmUgc3RhdGljIHZhcmlhYmxlIG9mIHRoYXQgdHlwZSBmb3IgZWFjaCBtb2R1bGUsIHdoaWNoCi0gICBpcyBzdGF0aWNhbGx5IGluaXRpYWxpemVkIGFuZCB0aGVuIHBhc3NlZCB0byA6YzpmdW5jOmBQeU1vZHVsZV9DcmVhdGVgIGluIHRoZQotICAgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgorICAgVGhlIG1vZHVsZSBkZWZpbml0aW9uIHN0cnVjdCwgd2hpY2ggaG9sZHMgYWxsIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUKKyAgIGEgbW9kdWxlIG9iamVjdC4gVGhlcmUgaXMgdXN1YWxseSBvbmx5IG9uZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHZhcmlhYmxlCisgICBvZiB0aGlzIHR5cGUgZm9yIGVhY2ggbW9kdWxlLgogCiAgICAuLiBjOm1lbWJlcjo6IFB5TW9kdWxlRGVmX0Jhc2UgbV9iYXNlCiAKQEAgLTE4OSwxOSArMTU0LDIxIEBACiAKICAgIC4uIGM6bWVtYmVyOjogUHlfc3NpemVfdCBtX3NpemUKIAotICAgICAgU29tZSBtb2R1bGVzIGFsbG93IHJlLWluaXRpYWxpemF0aW9uIChjYWxsaW5nIHRoZWlyIGBgUHlJbml0XypgYCBmdW5jdGlvbgotICAgICAgbW9yZSB0aGFuIG9uY2UpLiBUaGVzZSBtb2R1bGVzIHNob3VsZCBrZWVwIHRoZWlyIHN0YXRlIGluIGEgcGVyLW1vZHVsZQotICAgICAgbWVtb3J5IGFyZWEgdGhhdCBjYW4gYmUgcmV0cmlldmVkIHdpdGggOmM6ZnVuYzpgUHlNb2R1bGVfR2V0U3RhdGVgLgorICAgICAgTW9kdWxlIHN0YXRlIG1heSBiZSBrZXB0IGluIGEgcGVyLW1vZHVsZSBtZW1vcnkgYXJlYSB0aGF0IGNhbiBiZQorICAgICAgcmV0cmlldmVkIHdpdGggOmM6ZnVuYzpgUHlNb2R1bGVfR2V0U3RhdGVgLCByYXRoZXIgdGhhbiBpbiBzdGF0aWMgZ2xvYmFscy4KKyAgICAgIFRoaXMgbWFrZXMgbW9kdWxlcyBzYWZlIGZvciB1c2UgaW4gbXVsdGlwbGUgc3ViLWludGVycHJldGVycy4KIAotICAgICAgVGhpcyBtZW1vcnkgc2hvdWxkIGJlIHVzZWQsIHJhdGhlciB0aGFuIHN0YXRpYyBnbG9iYWxzLCB0byBob2xkIHBlci1tb2R1bGUKLSAgICAgIHN0YXRlLCBzaW5jZSBpdCBpcyB0aGVuIHNhZmUgZm9yIHVzZSBpbiBtdWx0aXBsZSBzdWItaW50ZXJwcmV0ZXJzLiAgSXQgaXMKLSAgICAgIGZyZWVkIHdoZW4gdGhlIG1vZHVsZSBvYmplY3QgaXMgZGVhbGxvY2F0ZWQsIGFmdGVyIHRoZSA6YzptZW1iZXI6YG1fZnJlZWAKLSAgICAgIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCwgaWYgcHJlc2VudC4KKyAgICAgIFRoaXMgbWVtb3J5IGFyZWEgaXMgYWxsb2NhdGVkIGJhc2VkIG9uICptX3NpemUqIG9uIG1vZHVsZSBjcmVhdGlvbiwKKyAgICAgIGFuZCBmcmVlZCB3aGVuIHRoZSBtb2R1bGUgb2JqZWN0IGlzIGRlYWxsb2NhdGVkLCBhZnRlciB0aGUKKyAgICAgIDpjOm1lbWJlcjpgbV9mcmVlYCBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQsIGlmIHByZXNlbnQuCiAKLSAgICAgIFNldHRpbmcgYGBtX3NpemVgYCB0byBgYC0xYGAgbWVhbnMgdGhhdCB0aGUgbW9kdWxlIGNhbiBub3QgYmUKLSAgICAgIHJlLWluaXRpYWxpemVkIGJlY2F1c2UgaXQgaGFzIGdsb2JhbCBzdGF0ZS4gU2V0dGluZyBpdCB0byBhIG5vbi1uZWdhdGl2ZQotICAgICAgdmFsdWUgbWVhbnMgdGhhdCB0aGUgbW9kdWxlIGNhbiBiZSByZS1pbml0aWFsaXplZCBhbmQgc3BlY2lmaWVzIHRoZQotICAgICAgYWRkaXRpb25hbCBhbW91bnQgb2YgbWVtb3J5IGl0IHJlcXVpcmVzIGZvciBpdHMgc3RhdGUuCisgICAgICBTZXR0aW5nIGBgbV9zaXplYGAgdG8gYGAtMWBgIG1lYW5zIHRoYXQgdGhlIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICBzdWItaW50ZXJwcmV0ZXJzLCBiZWNhdXNlIGl0IGhhcyBnbG9iYWwgc3RhdGUuCisKKyAgICAgIFNldHRpbmcgaXQgdG8gYSBub24tbmVnYXRpdmUgdmFsdWUgbWVhbnMgdGhhdCB0aGUgbW9kdWxlIGNhbiBiZQorICAgICAgcmUtaW5pdGlhbGl6ZWQgYW5kIHNwZWNpZmllcyB0aGUgYWRkaXRpb25hbCBhbW91bnQgb2YgbWVtb3J5IGl0IHJlcXVpcmVzCisgICAgICBmb3IgaXRzIHN0YXRlLiBOb24tbmVnYXRpdmUgYGBtX3NpemVgYCBpcyByZXF1aXJlZCBmb3IgbXVsdGktcGhhc2UKKyAgICAgIGluaXRpYWxpemF0aW9uLgogCiAgICAgICBTZWUgOlBFUDpgMzEyMWAgZm9yIG1vcmUgZGV0YWlscy4KIApAQCAtMjEwLDkgKzE3NywxOCBAQAogICAgICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2YgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucywgZGVzY3JpYmVkIGJ5CiAgICAgICA6Yzp0eXBlOmBQeU1ldGhvZERlZmAgdmFsdWVzLiAgQ2FuIGJlICpOVUxMKiBpZiBubyBmdW5jdGlvbnMgYXJlIHByZXNlbnQuCiAKLSAgIC4uIGM6bWVtYmVyOjogaW5xdWlyeSBtX3JlbG9hZAorICAgLi4gYzptZW1iZXI6OiBQeU1vZHVsZURlZl9TbG90KiBtX3Nsb3RzCiAKLSAgICAgIEN1cnJlbnRseSB1bnVzZWQsIHNob3VsZCBiZSAqTlVMTCouCisgICAgICBBbiBhcnJheSBvZiBzbG90IGRlZmluaXRpb25zIGZvciBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiwgdGVybWluYXRlZCBieQorICAgICAgYSBgYHswLCBOVUxMfWBgIGVudHJ5LgorICAgICAgV2hlbiB1c2luZyBzaW5nbGUtcGhhc2UgaW5pdGlhbGl6YXRpb24sICptX3Nsb3RzKiBtdXN0IGJlICpOVUxMKi4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKworICAgICAgICAgUHJpb3IgdG8gdmVyc2lvbiAzLjUsIHRoaXMgbWVtYmVyIHdhcyBhbHdheXMgc2V0IHRvICpOVUxMKiwKKyAgICAgICAgIGFuZCB3YXMgZGVmaW5lZCBhczoKKworICAgICAgICAgICAuLiBjOm1lbWJlcjo6IGlucXVpcnkgbV9yZWxvYWQKIAogICAgLi4gYzptZW1iZXI6OiB0cmF2ZXJzZXByb2MgbV90cmF2ZXJzZQogCkBAIC0yMjksNiArMjA1LDIwNCBAQAogICAgICAgQSBmdW5jdGlvbiB0byBjYWxsIGR1cmluZyBkZWFsbG9jYXRpb24gb2YgdGhlIG1vZHVsZSBvYmplY3QsIG9yICpOVUxMKiBpZgogICAgICAgbm90IG5lZWRlZC4KIAorU2luZ2xlLXBoYXNlIGluaXRpYWxpemF0aW9uCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBtYXkgY3JlYXRlIGFuZCByZXR1cm4gdGhlIG1vZHVsZSBvYmplY3QKK2RpcmVjdGx5LiBUaGlzIGlzIHJlZmVycmVkIHRvIGFzICJzaW5nbGUtcGhhc2UgaW5pdGlhbGl6YXRpb24iLCBhbmQgdXNlcyBvbmUKK29mIHRoZSBmb2xsb3dpbmcgdHdvIG1vZHVsZSBjcmVhdGlvbiBmdW5jdGlvbnM6CisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNb2R1bGVfQ3JlYXRlKFB5TW9kdWxlRGVmICpkZWYpCisKKyAgIENyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0LCBnaXZlbiB0aGUgZGVmaW5pdGlvbiBpbiAqZGVmKi4gIFRoaXMgYmVoYXZlcworICAgbGlrZSA6YzpmdW5jOmBQeU1vZHVsZV9DcmVhdGUyYCB3aXRoICptb2R1bGVfYXBpX3ZlcnNpb24qIHNldCB0bworICAgOmNvbnN0OmBQWVRIT05fQVBJX1ZFUlNJT05gLgorCisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNb2R1bGVfQ3JlYXRlMihQeU1vZHVsZURlZiAqZGVmLCBpbnQgbW9kdWxlX2FwaV92ZXJzaW9uKQorCisgICBDcmVhdGUgYSBuZXcgbW9kdWxlIG9iamVjdCwgZ2l2ZW4gdGhlIGRlZmluaXRpb24gaW4gKmRlZiosIGFzc3VtaW5nIHRoZQorICAgQVBJIHZlcnNpb24gKm1vZHVsZV9hcGlfdmVyc2lvbiouICBJZiB0aGF0IHZlcnNpb24gZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KKyAgIG9mIHRoZSBydW5uaW5nIGludGVycHJldGVyLCBhIDpleGM6YFJ1bnRpbWVXYXJuaW5nYCBpcyBlbWl0dGVkLgorCisgICAuLiBub3RlOjoKKworICAgICAgTW9zdCB1c2VzIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIDpjOmZ1bmM6YFB5TW9kdWxlX0NyZWF0ZWAKKyAgICAgIGluc3RlYWQ7IG9ubHkgdXNlIHRoaXMgaWYgeW91IGFyZSBzdXJlIHlvdSBuZWVkIGl0LgorCitCZWZvcmUgaXQgaXMgcmV0dXJuZWQgZnJvbSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIHRoZSByZXN1bHRpbmcgbW9kdWxlCitvYmplY3QgaXMgdHlwaWNhbGx5IHBvcHVsYXRlZCB1c2luZyBmdW5jdGlvbnMgbGlrZSA6YzpmdW5jOmBQeU1vZHVsZV9BZGRPYmplY3RgLgorCisuLiBfbXVsdGktcGhhc2UtaW5pdGlhbGl6YXRpb246CisKK011bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitBbiBhbHRlcm5hdGUgd2F5IHRvIHNwZWNpZnkgZXh0ZW5zaW9ucyBpcyB0byByZXF1ZXN0ICJtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiIuCitFeHRlbnNpb24gbW9kdWxlcyBjcmVhdGVkIHRoaXMgd2F5IGJlaGF2ZSBtb3JlIGxpa2UgUHl0aG9uIG1vZHVsZXM6IHRoZQoraW5pdGlhbGl6YXRpb24gaXMgc3BsaXQgYmV0d2VlbiB0aGUgKmNyZWF0aW9uIHBoYXNlKiwgd2hlbiB0aGUgbW9kdWxlIG9iamVjdAoraXMgY3JlYXRlZCwgYW5kIHRoZSAqZXhlY3V0aW9uIHBoYXNlKiwgd2hlbiBpdCBpcyBwb3B1bGF0ZWQuCitUaGUgZGlzdGluY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgOnB5Om1ldGg6YF9fbmV3X19gIGFuZCA6cHk6bWV0aDpgX19pbml0X19gIG1ldGhvZHMKK29mIGNsYXNzZXMuCisKK1VubGlrZSBtb2R1bGVzIGNyZWF0ZWQgdXNpbmcgc2luZ2xlLXBoYXNlIGluaXRpYWxpemF0aW9uLCB0aGVzZSBtb2R1bGVzIGFyZSBub3QKK3NpbmdsZXRvbnM6IGlmIHRoZSAqc3lzLm1vZHVsZXMqIGVudHJ5IGlzIHJlbW92ZWQgYW5kIHRoZSBtb2R1bGUgaXMgcmUtaW1wb3J0ZWQsCithIG5ldyBtb2R1bGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCB0aGUgb2xkIG1vZHVsZSBpcyBzdWJqZWN0IHRvIG5vcm1hbCBnYXJiYWdlCitjb2xsZWN0aW9uIC0tIGFzIHdpdGggUHl0aG9uIG1vZHVsZXMuCitCeSBkZWZhdWx0LCBtdWx0aXBsZSBtb2R1bGVzIGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSBkZWZpbml0aW9uIHNob3VsZCBiZQoraW5kZXBlbmRlbnQ6IGNoYW5nZXMgdG8gb25lIHNob3VsZCBub3QgYWZmZWN0IHRoZSBvdGhlcnMuCitUaGlzIG1lYW5zIHRoYXQgYWxsIHN0YXRlIHNob3VsZCBiZSBzcGVjaWZpYyB0byB0aGUgbW9kdWxlIG9iamVjdCAodXNpbmcgZS5nLgordXNpbmcgOmM6ZnVuYzpgUHlNb2R1bGVfR2V0U3RhdGVgKSwgb3IgaXRzIGNvbnRlbnRzIChzdWNoIGFzIHRoZSBtb2R1bGUncworOmF0dHI6YF9fZGljdF9fYCBvciBpbmRpdmlkdWFsIGNsYXNzZXMgY3JlYXRlZCB3aXRoIDpjOmZ1bmM6YFB5VHlwZV9Gcm9tU3BlY2ApLgorCitBbGwgbW9kdWxlcyBjcmVhdGVkIHVzaW5nIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uIGFyZSBleHBlY3RlZCB0byBzdXBwb3J0Cis6cmVmOmBzdWItaW50ZXJwcmV0ZXJzIDxzdWItaW50ZXJwcmV0ZXItc3VwcG9ydD5gLiBNYWtpbmcgc3VyZSBtdWx0aXBsZSBtb2R1bGVzCithcmUgaW5kZXBlbmRlbnQgaXMgdHlwaWNhbGx5IGVub3VnaCB0byBhY2hpZXZlIHRoaXMuCisKK1RvIHJlcXVlc3QgbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24sIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgorKFB5SW5pdF9tb2R1bGVuYW1lKSByZXR1cm5zIGEgOmM6dHlwZTpgUHlNb2R1bGVEZWZgIGluc3RhbmNlIHdpdGggbm9uLWVtcHR5Cis6YzptZW1iZXI6YH5QeU1vZHVsZURlZi5tX3Nsb3RzYC4gQmVmb3JlIGl0IGlzIHJldHVybmVkLCB0aGUgYGBQeU1vZHVsZURlZmBgCitpbnN0YW5jZSBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1vZHVsZURlZl9Jbml0KFB5TW9kdWxlRGVmICpkZWYpCisKKyAgIEVuc3VyZXMgYSBtb2R1bGUgZGVmaW5pdGlvbiBpcyBhIHByb3Blcmx5IGluaXRpYWxpemVkIFB5dGhvbiBvYmplY3QgdGhhdAorICAgY29ycmVjdGx5IHJlcG9ydHMgaXRzIHR5cGUgYW5kIHJlZmVyZW5jZSBjb3VudC4KKworICAgUmV0dXJucyAqZGVmKiBjYXN0IHRvIGBgUHlPYmplY3QqYGAsIG9yICpOVUxMKiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKK1RoZSAqbV9zbG90cyogbWVtYmVyIG9mIHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBtdXN0IHBvaW50IHRvIGFuIGFycmF5IG9mCitgYFB5TW9kdWxlRGVmX1Nsb3RgYCBzdHJ1Y3R1cmVzOgorCisuLiBjOnR5cGU6OiBQeU1vZHVsZURlZl9TbG90CisKKyAgIC4uIGM6bWVtYmVyOjogaW50IHNsb3QKKworICAgICAgQSBzbG90IElELCBjaG9zZW4gZnJvbSB0aGUgYXZhaWxhYmxlIHZhbHVlcyBleHBsYWluZWQgYmVsb3cuCisKKyAgIC4uIGM6bWVtYmVyOjogdm9pZCogdmFsdWUKKworICAgICAgVmFsdWUgb2YgdGhlIHNsb3QsIHdob3NlIG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUgc2xvdCBJRC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKK1RoZSAqbV9zbG90cyogYXJyYXkgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IGEgc2xvdCB3aXRoIGlkIDAuCisKK1RoZSBhdmFpbGFibGUgc2xvdCB0eXBlcyBhcmU6CisKKy4uIGM6dmFyOjogUHlfbW9kX2NyZWF0ZQorCisgICBTcGVjaWZpZXMgYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBjcmVhdGUgdGhlIG1vZHVsZSBvYmplY3QgaXRzZWxmLgorICAgVGhlICp2YWx1ZSogcG9pbnRlciBvZiB0aGlzIHNsb3QgbXVzdCBwb2ludCB0byBhIGZ1bmN0aW9uIG9mIHRoZSBzaWduYXR1cmU6CisKKyAgIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogY3JlYXRlX21vZHVsZShQeU9iamVjdCAqc3BlYywgUHlNb2R1bGVEZWYgKmRlZikKKworICAgVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGEgOnB5OmNsYXNzOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjYAorICAgaW5zdGFuY2UsIGFzIGRlZmluZWQgaW4gOlBFUDpgNDUxYCwgYW5kIHRoZSBtb2R1bGUgZGVmaW5pdGlvbi4KKyAgIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgbW9kdWxlIG9iamVjdCwgb3Igc2V0IGFuIGVycm9yCisgICBhbmQgcmV0dXJuICpOVUxMKi4KKworICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUga2VwdCBtaW5pbWFsLiBJbiBwYXJ0aWN1bGFyLCBpdCBzaG91bGQgbm90CisgICBjYWxsIGFyYml0cmFyeSBQeXRob24gY29kZSwgYXMgdHJ5aW5nIHRvIGltcG9ydCB0aGUgc2FtZSBtb2R1bGUgYWdhaW4gbWF5CisgICByZXN1bHQgaW4gYW4gaW5maW5pdGUgbG9vcC4KKworICAgTXVsdGlwbGUgYGBQeV9tb2RfY3JlYXRlYGAgc2xvdHMgbWF5IG5vdCBiZSBzcGVjaWZpZWQgaW4gb25lIG1vZHVsZQorICAgZGVmaW5pdGlvbi4KKworICAgSWYgYGBQeV9tb2RfY3JlYXRlYGAgaXMgbm90IHNwZWNpZmllZCwgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCBjcmVhdGUKKyAgIGEgbm9ybWFsIG1vZHVsZSBvYmplY3QgdXNpbmcgOmM6ZnVuYzpgUHlNb2R1bGVfTmV3YC4gVGhlIG5hbWUgaXMgdGFrZW4gZnJvbQorICAgKnNwZWMqLCBub3QgdGhlIGRlZmluaXRpb24sIHRvIGFsbG93IGV4dGVuc2lvbiBtb2R1bGVzIHRvIGR5bmFtaWNhbGx5IGFkanVzdAorICAgdG8gdGhlaXIgcGxhY2UgaW4gdGhlIG1vZHVsZSBoaWVyYXJjaHkgYW5kIGJlIGltcG9ydGVkIHVuZGVyIGRpZmZlcmVudAorICAgbmFtZXMgdGhyb3VnaCBzeW1saW5rcywgYWxsIHdoaWxlIHNoYXJpbmcgYSBzaW5nbGUgbW9kdWxlIGRlZmluaXRpb24uCisKKyAgIFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IGZvciB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIGJlIGFuIGluc3RhbmNlIG9mCisgICA6Yzp0eXBlOmBQeU1vZHVsZV9UeXBlYC4gQW55IHR5cGUgY2FuIGJlIHVzZWQsIGFzIGxvbmcgYXMgaXQgc3VwcG9ydHMKKyAgIHNldHRpbmcgYW5kIGdldHRpbmcgaW1wb3J0LXJlbGF0ZWQgYXR0cmlidXRlcy4KKyAgIEhvd2V2ZXIsIG9ubHkgYGBQeU1vZHVsZV9UeXBlYGAgaW5zdGFuY2VzIG1heSBiZSByZXR1cm5lZCBpZiB0aGUKKyAgIGBgUHlNb2R1bGVEZWZgYCBoYXMgbm9uLSpOVUxMKiBgYG1fbWV0aG9kc2BgLCBgYG1fdHJhdmVyc2VgYCwgYGBtX2NsZWFyYGAsCisgICBgYG1fZnJlZWBgOyBub24temVybyBgYG1fc2l6ZWBgOyBvciBzbG90cyBvdGhlciB0aGFuIGBgUHlfbW9kX2NyZWF0ZWBgLgorCisuLiBjOnZhcjo6IFB5X21vZF9leGVjCisKKyAgIFNwZWNpZmllcyBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHRvICpleGVjdXRlKiB0aGUgbW9kdWxlLgorICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGV4ZWN1dGluZyB0aGUgY29kZSBvZiBhIFB5dGhvbiBtb2R1bGU6IHR5cGljYWxseSwKKyAgIHRoaXMgZnVuY3Rpb24gYWRkcyBjbGFzc2VzIGFuZCBjb25zdGFudHMgdG8gdGhlIG1vZHVsZS4KKyAgIFRoZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGlzOgorCisgICAuLiBjOmZ1bmN0aW9uOjogaW50IGV4ZWNfbW9kdWxlKFB5T2JqZWN0KiBtb2R1bGUpCisKKyAgIElmIG11bHRpcGxlIGBgUHlfbW9kX2V4ZWNgYCBzbG90cyBhcmUgc3BlY2lmaWVkLCB0aGV5IGFyZSBwcm9jZXNzZWQgaW4gdGhlCisgICBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgKm1fc2xvdHMqIGFycmF5LgorCitTZWUgOlBFUDpgNDg5YCBmb3IgbW9yZSBkZXRhaWxzIG9uIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uLgorCitMb3ctbGV2ZWwgbW9kdWxlIGNyZWF0aW9uIGZ1bmN0aW9ucworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNhbGxlZCB1bmRlciB0aGUgaG9vZCB3aGVuIHVzaW5nIG11bHRpLXBoYXNlCitpbml0aWFsaXphdGlvbi4gVGhleSBjYW4gYmUgdXNlZCBkaXJlY3RseSwgZm9yIGV4YW1wbGUgd2hlbiBjcmVhdGluZyBtb2R1bGUKK29iamVjdHMgZHluYW1pY2FsbHkuIE5vdGUgdGhhdCBib3RoIGBgUHlNb2R1bGVfRnJvbURlZkFuZFNwZWNgYCBhbmQKK2BgUHlNb2R1bGVfRXhlY0RlZmBgIG11c3QgYmUgY2FsbGVkIHRvIGZ1bGx5IGluaXRpYWxpemUgYSBtb2R1bGUuCisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCAqIFB5TW9kdWxlX0Zyb21EZWZBbmRTcGVjKFB5TW9kdWxlRGVmICpkZWYsIFB5T2JqZWN0ICpzcGVjKQorCisgICBDcmVhdGUgYSBuZXcgbW9kdWxlIG9iamVjdCwgZ2l2ZW4gdGhlIGRlZmluaXRpb24gaW4gKm1vZHVsZSogYW5kIHRoZQorICAgTW9kdWxlU3BlYyAqc3BlYyouICBUaGlzIGJlaGF2ZXMgbGlrZSA6YzpmdW5jOmBQeU1vZHVsZV9Gcm9tRGVmQW5kU3BlYzJgCisgICB3aXRoICptb2R1bGVfYXBpX3ZlcnNpb24qIHNldCB0byA6Y29uc3Q6YFBZVEhPTl9BUElfVkVSU0lPTmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QgKiBQeU1vZHVsZV9Gcm9tRGVmQW5kU3BlYzIoUHlNb2R1bGVEZWYgKmRlZiwgUHlPYmplY3QgKnNwZWMsIGludCBtb2R1bGVfYXBpX3ZlcnNpb24pCisKKyAgIENyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0LCBnaXZlbiB0aGUgZGVmaW5pdGlvbiBpbiAqbW9kdWxlKiBhbmQgdGhlCisgICBNb2R1bGVTcGVjICpzcGVjKiwgYXNzdW1pbmcgdGhlIEFQSSB2ZXJzaW9uICptb2R1bGVfYXBpX3ZlcnNpb24qLgorICAgSWYgdGhhdCB2ZXJzaW9uIGRvZXMgbm90IG1hdGNoIHRoZSB2ZXJzaW9uIG9mIHRoZSBydW5uaW5nIGludGVycHJldGVyLAorICAgYSA6ZXhjOmBSdW50aW1lV2FybmluZ2AgaXMgZW1pdHRlZC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIE1vc3QgdXNlcyBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyA6YzpmdW5jOmBQeU1vZHVsZV9Gcm9tRGVmQW5kU3BlY2AKKyAgICAgIGluc3RlYWQ7IG9ubHkgdXNlIHRoaXMgaWYgeW91IGFyZSBzdXJlIHlvdSBuZWVkIGl0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworLi4gYzpmdW5jdGlvbjo6IGludCBQeU1vZHVsZV9FeGVjRGVmKFB5T2JqZWN0ICptb2R1bGUsIFB5TW9kdWxlRGVmICpkZWYpCisKKyAgIFByb2Nlc3MgYW55IGV4ZWN1dGlvbiBzbG90cyAoOmM6ZGF0YTpgUHlfbW9kX2V4ZWNgKSBnaXZlbiBpbiAqZGVmKi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNb2R1bGVfU2V0RG9jU3RyaW5nKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKmRvY3N0cmluZykKKworICAgU2V0IHRoZSBkb2NzdHJpbmcgZm9yICptb2R1bGUqIHRvICpkb2NzdHJpbmcqLgorICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIGNyZWF0aW5nIGEgbW9kdWxlIGZyb20KKyAgIGBgUHlNb2R1bGVEZWZgYCwgdXNpbmcgZWl0aGVyIGBgUHlNb2R1bGVfQ3JlYXRlYGAgb3IKKyAgIGBgUHlNb2R1bGVfRnJvbURlZkFuZFNwZWNgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNb2R1bGVfQWRkRnVuY3Rpb25zKFB5T2JqZWN0ICptb2R1bGUsIFB5TWV0aG9kRGVmICpmdW5jdGlvbnMpCisKKyAgIEFkZCB0aGUgZnVuY3Rpb25zIGZyb20gdGhlICpOVUxMKiB0ZXJtaW5hdGVkICpmdW5jdGlvbnMqIGFycmF5IHRvICptb2R1bGUqLgorICAgUmVmZXIgdG8gdGhlIDpjOnR5cGU6YFB5TWV0aG9kRGVmYCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9uIGluZGl2aWR1YWwKKyAgIGVudHJpZXMgKGR1ZSB0byB0aGUgbGFjayBvZiBhIHNoYXJlZCBtb2R1bGUgbmFtZXNwYWNlLCBtb2R1bGUgbGV2ZWwKKyAgICJmdW5jdGlvbnMiIGltcGxlbWVudGVkIGluIEMgdHlwaWNhbGx5IHJlY2VpdmUgdGhlIG1vZHVsZSBhcyB0aGVpciBmaXJzdAorICAgcGFyYW1ldGVyLCBtYWtpbmcgdGhlbSBzaW1pbGFyIHRvIGluc3RhbmNlIG1ldGhvZHMgb24gUHl0aG9uIGNsYXNzZXMpLgorICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIGNyZWF0aW5nIGEgbW9kdWxlIGZyb20KKyAgIGBgUHlNb2R1bGVEZWZgYCwgdXNpbmcgZWl0aGVyIGBgUHlNb2R1bGVfQ3JlYXRlYGAgb3IKKyAgIGBgUHlNb2R1bGVfRnJvbURlZkFuZFNwZWNgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKK1N1cHBvcnQgZnVuY3Rpb25zCisuLi4uLi4uLi4uLi4uLi4uLgorCitUaGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIChpZiB1c2luZyBzaW5nbGUgcGhhc2UgaW5pdGlhbGl6YXRpb24pIG9yCithIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGEgbW9kdWxlIGV4ZWN1dGlvbiBzbG90IChpZiB1c2luZyBtdWx0aS1waGFzZQoraW5pdGlhbGl6YXRpb24pLCBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIGhlbHAgaW5pdGlhbGl6ZSB0aGUgbW9kdWxlCitzdGF0ZToKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeU1vZHVsZV9BZGRPYmplY3QoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKQogCkBAIC0yMzYsNyArNDEwLDYgQEAKICAgIGJlIHVzZWQgZnJvbSB0aGUgbW9kdWxlJ3MgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICBUaGlzIHN0ZWFscyBhIHJlZmVyZW5jZSB0bwogICAgKnZhbHVlKi4gIFJldHVybiBgYC0xYGAgb24gZXJyb3IsIGBgMGBgIG9uIHN1Y2Nlc3MuCiAKLQogLi4gYzpmdW5jdGlvbjo6IGludCBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICpuYW1lLCBsb25nIHZhbHVlKQogCiAgICBBZGQgYW4gaW50ZWdlciBjb25zdGFudCB0byAqbW9kdWxlKiBhcyAqbmFtZSouICBUaGlzIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGNhbiBiZQpAQCAtMjQ4LDcgKzQyMSw3IEBACiAKICAgIEFkZCBhIHN0cmluZyBjb25zdGFudCB0byAqbW9kdWxlKiBhcyAqbmFtZSouICBUaGlzIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGNhbiBiZQogICAgdXNlZCBmcm9tIHRoZSBtb2R1bGUncyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gIFRoZSBzdHJpbmcgKnZhbHVlKiBtdXN0IGJlCi0gICBudWxsLXRlcm1pbmF0ZWQuICBSZXR1cm4gYGAtMWBgIG9uIGVycm9yLCBgYDBgYCBvbiBzdWNjZXNzLgorICAgKk5VTEwqLXRlcm1pbmF0ZWQuICBSZXR1cm4gYGAtMWBgIG9uIGVycm9yLCBgYDBgYCBvbiBzdWNjZXNzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNb2R1bGVfQWRkSW50TWFjcm8oUHlPYmplY3QgKm1vZHVsZSwgbWFjcm8pCkBAIC0yNjIsMyArNDM1LDM2IEBACiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5TW9kdWxlX0FkZFN0cmluZ01hY3JvKFB5T2JqZWN0ICptb2R1bGUsIG1hY3JvKQogCiAgICBBZGQgYSBzdHJpbmcgY29uc3RhbnQgdG8gKm1vZHVsZSouCisKKworTW9kdWxlIGxvb2t1cAorXl5eXl5eXl5eXl5eXgorCitTaW5nbGUtcGhhc2UgaW5pdGlhbGl6YXRpb24gY3JlYXRlcyBzaW5nbGV0b24gbW9kdWxlcyB0aGF0IGNhbiBiZSBsb29rZWQgdXAKK2luIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IGludGVycHJldGVyLiBUaGlzIGFsbG93cyB0aGUgbW9kdWxlIG9iamVjdCB0byBiZQorcmV0cmlldmVkIGxhdGVyIHdpdGggb25seSBhIHJlZmVyZW5jZSB0byB0aGUgbW9kdWxlIGRlZmluaXRpb24uCisKK1RoZXNlIGZ1bmN0aW9ucyB3aWxsIG5vdCB3b3JrIG9uIG1vZHVsZXMgY3JlYXRlZCB1c2luZyBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiwKK3NpbmNlIG11bHRpcGxlIHN1Y2ggbW9kdWxlcyBjYW4gYmUgY3JlYXRlZCBmcm9tIGEgc2luZ2xlIGRlZmluaXRpb24uCisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTdGF0ZV9GaW5kTW9kdWxlKFB5TW9kdWxlRGVmICpkZWYpCisKKyAgIFJldHVybnMgdGhlIG1vZHVsZSBvYmplY3QgdGhhdCB3YXMgY3JlYXRlZCBmcm9tICpkZWYqIGZvciB0aGUgY3VycmVudCBpbnRlcnByZXRlci4KKyAgIFRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoYXQgdGhlIG1vZHVsZSBvYmplY3QgaGFzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGludGVycHJldGVyIHN0YXRlIHdpdGgKKyAgIDpjOmZ1bmM6YFB5U3RhdGVfQWRkTW9kdWxlYCBiZWZvcmVoYW5kLiBJbiBjYXNlIHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSBvYmplY3QgaXMgbm90CisgICBmb3VuZCBvciBoYXMgbm90IGJlZW4gYXR0YWNoZWQgdG8gdGhlIGludGVycHJldGVyIHN0YXRlIHlldCwgaXQgcmV0dXJucyAqTlVMTCouCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTdGF0ZV9BZGRNb2R1bGUoUHlPYmplY3QgKm1vZHVsZSwgUHlNb2R1bGVEZWYgKmRlZikKKworICAgQXR0YWNoZXMgdGhlIG1vZHVsZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiB0byB0aGUgaW50ZXJwcmV0ZXIgc3RhdGUuIFRoaXMgYWxsb3dzCisgICB0aGUgbW9kdWxlIG9iamVjdCB0byBiZSBhY2Nlc3NpYmxlIHZpYSA6YzpmdW5jOmBQeVN0YXRlX0ZpbmRNb2R1bGVgLgorCisgICBPbmx5IGVmZmVjdGl2ZSBvbiBtb2R1bGVzIGNyZWF0ZWQgdXNpbmcgc2luZ2xlLXBoYXNlIGluaXRpYWxpemF0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworLi4gYzpmdW5jdGlvbjo6IGludCBQeVN0YXRlX1JlbW92ZU1vZHVsZShQeU1vZHVsZURlZiAqZGVmKQorCisgICBSZW1vdmVzIHRoZSBtb2R1bGUgb2JqZWN0IGNyZWF0ZWQgZnJvbSAqZGVmKiBmcm9tIHRoZSBpbnRlcnByZXRlciBzdGF0ZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbnVtYmVyLnJzdCBiL0RvYy9jLWFwaS9udW1iZXIucnN0CmluZGV4IDIxOTUxYzMuLjliY2I2NDkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9udW1iZXIucnN0CisrKyBiL0RvYy9jLWFwaS9udW1iZXIucnN0CkBAIC0zMCw2ICszMCwxNCBAQAogICAgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbzEgKiBvMmBgLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfTWF0cml4TXVsdGlwbHkoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisKKyAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtYXRyaXggbXVsdGlwbGljYXRpb24gb24gKm8xKiBhbmQgKm8yKiwgb3IgKk5VTEwqIG9uCisgICBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBvMSBAIG8yYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfRmxvb3JEaXZpZGUoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybiB0aGUgZmxvb3Igb2YgKm8xKiBkaXZpZGVkIGJ5ICpvMiosIG9yICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhpcyBpcwpAQCAtMTQ2LDYgKzE1NCwxNSBAQAogICAgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBvMSAqPSBvMmBgLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZU1hdHJpeE11bHRpcGx5KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQorCisgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgbWF0cml4IG11bHRpcGxpY2F0aW9uIG9uICpvMSogYW5kICpvMiosIG9yICpOVUxMKiBvbgorICAgZmFpbHVyZS4gIFRoZSBvcGVyYXRpb24gaXMgZG9uZSAqaW4tcGxhY2UqIHdoZW4gKm8xKiBzdXBwb3J0cyBpdC4gIFRoaXMgaXMKKyAgIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgbzEgQD0gbzJgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybnMgdGhlIG1hdGhlbWF0aWNhbCBmbG9vciBvZiBkaXZpZGluZyAqbzEqIGJ5ICpvMiosIG9yICpOVUxMKiBvbiBmYWlsdXJlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL29iamVjdC5yc3QgYi9Eb2MvYy1hcGkvb2JqZWN0LnJzdAppbmRleCA5N2I0NWIxLi5iNzYxYzgwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdAorKysgYi9Eb2MvYy1hcGkvb2JqZWN0LnJzdApAQCAtNjgsMjUgKzY4LDM1IEBACiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X1NldEF0dHIoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KQogCiAgICBTZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZWQgKmF0dHJfbmFtZSosIGZvciBvYmplY3QgKm8qLCB0byB0aGUgdmFsdWUKLSAgICp2Ki4gUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBzdGF0ZW1lbnQKKyAgICp2Ki4gUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gYGAtMWBgIG9uIGZhaWx1cmU7CisgICByZXR1cm4gYGAwYGAgb24gc3VjY2Vzcy4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBzdGF0ZW1lbnQKICAgIGBgby5hdHRyX25hbWUgPSB2YGAuCiAKKyAgIElmICp2KiBpcyAqTlVMTCosIHRoZSBhdHRyaWJ1dGUgaXMgZGVsZXRlZCwgaG93ZXZlciB0aGlzIGZlYXR1cmUgaXMKKyAgIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHVzaW5nIDpjOmZ1bmM6YFB5T2JqZWN0X0RlbEF0dHJgLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfU2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdikKIAogICAgU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG5hbWVkICphdHRyX25hbWUqLCBmb3Igb2JqZWN0ICpvKiwgdG8gdGhlIHZhbHVlCi0gICAqdiouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50CisgICAqdiouIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlOworICAgcmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3MuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50CiAgICBgYG8uYXR0cl9uYW1lID0gdmBgLgogCisgICBJZiAqdiogaXMgKk5VTEwqLCB0aGUgYXR0cmlidXRlIGlzIGRlbGV0ZWQsIGhvd2V2ZXIgdGhpcyBmZWF0dXJlIGlzCisgICBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB1c2luZyA6YzpmdW5jOmBQeU9iamVjdF9EZWxBdHRyU3RyaW5nYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKQogCi0gICBHZW5lcmljIGF0dHJpYnV0ZSBzZXR0ZXIgZnVuY3Rpb24gdGhhdCBpcyBtZWFudCB0byBiZSBwdXQgaW50byBhIHR5cGUKLSAgIG9iamVjdCdzIGBgdHBfc2V0YXR0cm9gYCBzbG90LiAgSXQgbG9va3MgZm9yIGEgZGF0YSBkZXNjcmlwdG9yIGluIHRoZQorICAgR2VuZXJpYyBhdHRyaWJ1dGUgc2V0dGVyIGFuZCBkZWxldGVyIGZ1bmN0aW9uIHRoYXQgaXMgbWVhbnQKKyAgIHRvIGJlIHB1dCBpbnRvIGEgdHlwZSBvYmplY3QncyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfc2V0YXR0cm9gCisgICBzbG90LiAgSXQgbG9va3MgZm9yIGEgZGF0YSBkZXNjcmlwdG9yIGluIHRoZQogICAgZGljdGlvbmFyeSBvZiBjbGFzc2VzIGluIHRoZSBvYmplY3QncyBNUk8sIGFuZCBpZiBmb3VuZCBpdCB0YWtlcyBwcmVmZXJlbmNlCi0gICBvdmVyIHNldHRpbmcgdGhlIGF0dHJpYnV0ZSBpbiB0aGUgaW5zdGFuY2UgZGljdGlvbmFyeS4gT3RoZXJ3aXNlLCB0aGUKLSAgIGF0dHJpYnV0ZSBpcyBzZXQgaW4gdGhlIG9iamVjdCdzIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCAoaWYgcHJlc2VudCkuCi0gICBPdGhlcndpc2UsIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBpcyByYWlzZWQgYW5kIGBgLTFgYCBpcyByZXR1cm5lZC4KKyAgIG92ZXIgc2V0dGluZyBvciBkZWxldGluZyB0aGUgYXR0cmlidXRlIGluIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5LiBPdGhlcndpc2UsIHRoZQorICAgYXR0cmlidXRlIGlzIHNldCBvciBkZWxldGVkIGluIHRoZSBvYmplY3QncyA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgKGlmIHByZXNlbnQpLgorICAgT24gc3VjY2VzcywgYGAwYGAgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAKKyAgIGlzIHJhaXNlZCBhbmQgYGAtMWBgIGlzIHJldHVybmVkLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfRGVsQXR0cihQeU9iamVjdCAqbywgUHlPYmplY3QgKmF0dHJfbmFtZSkKQEAgLTM3OCw3ICszODgsOCBAQAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X1NldEl0ZW0oUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2KQogCi0gICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqLiAgUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4gIFRoaXMgaXMgdGhlCisgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqLiAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZAorICAgcmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlOyByZXR1cm4gYGAwYGAgb24gc3VjY2Vzcy4gIFRoaXMgaXMgdGhlCiAgICBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zZXF1ZW5jZS5yc3QgYi9Eb2MvYy1hcGkvc2VxdWVuY2UucnN0CmluZGV4IDU5NjBkYjkuLmYxODI1ZjAgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9zZXF1ZW5jZS5yc3QKKysrIGIvRG9jL2MtYXBpL3NlcXVlbmNlLnJzdApAQCAtNjIsMTAgKzYyLDE0IEBACiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTZXF1ZW5jZV9TZXRJdGVtKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICp2KQogCi0gICBBc3NpZ24gb2JqZWN0ICp2KiB0byB0aGUgKmkqXCB0aCBlbGVtZW50IG9mICpvKi4gIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuICBUaGlzCisgICBBc3NpZ24gb2JqZWN0ICp2KiB0byB0aGUgKmkqXCB0aCBlbGVtZW50IG9mICpvKi4gIFJhaXNlIGFuIGV4Y2VwdGlvbgorICAgYW5kIHJldHVybiBgYC0xYGAgb24gZmFpbHVyZTsgcmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3MuICBUaGlzCiAgICBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYG9baV0gPSB2YGAuICBUaGlzIGZ1bmN0aW9uICpkb2VzCiAgICBub3QqIHN0ZWFsIGEgcmVmZXJlbmNlIHRvICp2Ki4KIAorICAgSWYgKnYqIGlzICpOVUxMKiwgdGhlIGVsZW1lbnQgaXMgZGVsZXRlZCwgaG93ZXZlciB0aGlzIGZlYXR1cmUgaXMKKyAgIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHVzaW5nIDpjOmZ1bmM6YFB5U2VxdWVuY2VfRGVsSXRlbWAuCisKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeVNlcXVlbmNlX0RlbEl0ZW0oUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSkKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3NldC5yc3QgYi9Eb2MvYy1hcGkvc2V0LnJzdAppbmRleCA3ZjRkNTM0Li44ZGUwMzk0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc2V0LnJzdAorKysgYi9Eb2MvYy1hcGkvc2V0LnJzdApAQCAtMTI4LDcgKzEyOCw3IEBACiAgICBvZiBicmFuZCBuZXcgZnJvemVuc2V0cyBiZWZvcmUgdGhleSBhcmUgZXhwb3NlZCB0byBvdGhlciBjb2RlKS4gIFJldHVybiAwIG9uCiAgICBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuIFJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGUgKmtleSogaXMKICAgIHVuaGFzaGFibGUuIFJhaXNlIGEgOmV4YzpgTWVtb3J5RXJyb3JgIGlmIHRoZXJlIGlzIG5vIHJvb20gdG8gZ3Jvdy4gIFJhaXNlIGEKLSAgIDpleGM6YFN5c3RlbUVycm9yYCBpZiAqc2V0KiBpcyBhbiBub3QgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBzZXRgIG9yIGl0cworICAgOmV4YzpgU3lzdGVtRXJyb3JgIGlmICpzZXQqIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YHNldGAgb3IgaXRzCiAgICBzdWJ0eXBlLgogCiAKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgZXJyb3IgaXMgZW5jb3VudGVyZWQuICBEb2VzIG5vdCByYWlzZSA6ZXhjOmBLZXlFcnJvcmAgZm9yIG1pc3Npbmcga2V5cy4gIFJhaXNlIGEKICAgIDpleGM6YFR5cGVFcnJvcmAgaWYgdGhlICprZXkqIGlzIHVuaGFzaGFibGUuICBVbmxpa2UgdGhlIFB5dGhvbiA6bWV0aDpgfnNldC5kaXNjYXJkYAogICAgbWV0aG9kLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgY29udmVydCB1bmhhc2hhYmxlIHNldHMgaW50bwotICAgdGVtcG9yYXJ5IGZyb3plbnNldHMuIFJhaXNlIDpleGM6YFB5RXhjX1N5c3RlbUVycm9yYCBpZiAqc2V0KiBpcyBhbiBub3QgYW4KKyAgIHRlbXBvcmFyeSBmcm96ZW5zZXRzLiBSYWlzZSA6ZXhjOmBQeUV4Y19TeXN0ZW1FcnJvcmAgaWYgKnNldCogaXMgbm90IGFuCiAgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YHNldGAgb3IgaXRzIHN1YnR5cGUuCiAKIApAQCAtMTUwLDcgKzE1MCw3IEBACiAKICAgIFJldHVybiBhIG5ldyByZWZlcmVuY2UgdG8gYW4gYXJiaXRyYXJ5IG9iamVjdCBpbiB0aGUgKnNldCosIGFuZCByZW1vdmVzIHRoZQogICAgb2JqZWN0IGZyb20gdGhlICpzZXQqLiAgUmV0dXJuICpOVUxMKiBvbiBmYWlsdXJlLiAgUmFpc2UgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZQotICAgc2V0IGlzIGVtcHR5LiBSYWlzZSBhIDpleGM6YFN5c3RlbUVycm9yYCBpZiAqc2V0KiBpcyBhbiBub3QgYW4gaW5zdGFuY2Ugb2YKKyAgIHNldCBpcyBlbXB0eS4gUmFpc2UgYSA6ZXhjOmBTeXN0ZW1FcnJvcmAgaWYgKnNldCogaXMgbm90IGFuIGluc3RhbmNlIG9mCiAgICA6Y2xhc3M6YHNldGAgb3IgaXRzIHN1YnR5cGUuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3N0YWJsZS5yc3QgYi9Eb2MvYy1hcGkvc3RhYmxlLnJzdAppbmRleCAwNjNmODU2Li41Yjc3MWRkIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc3RhYmxlLnJzdAorKysgYi9Eb2MvYy1hcGkvc3RhYmxlLnJzdApAQCAtMzQsNSArMzQsNSBAQAogbWlzc2luZyBzeW1ib2xzKSBvbiB0aGUgb2xkZXIgcmVsZWFzZXMuCiAKIEFzIG9mIFB5dGhvbiAzLjIsIHRoZSBzZXQgb2YgZnVuY3Rpb25zIGF2YWlsYWJsZSB0byB0aGUgbGltaXRlZCBBUEkgaXMKLWRvY3VtZW50ZWQgaW4gUEVQIDM4NC4gIEluIHRoZSBDIEFQSSBkb2N1bWVudGF0aW9uLCBBUEkgZWxlbWVudHMgdGhhdCBhcmUgbm90Citkb2N1bWVudGVkIGluIDpwZXA6YDM4NGAuICBJbiB0aGUgQyBBUEkgZG9jdW1lbnRhdGlvbiwgQVBJIGVsZW1lbnRzIHRoYXQgYXJlIG5vdAogcGFydCBvZiB0aGUgbGltaXRlZCBBUEkgYXJlIG1hcmtlZCBhcyAiTm90IHBhcnQgb2YgdGhlIGxpbWl0ZWQgQVBJLiIKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdCBiL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdAppbmRleCBlOWU4YWRkLi5jYzg0MzE0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QKKysrIGIvRG9jL2MtYXBpL3N0cnVjdHVyZXMucnN0CkBAIC0xNTAsOSArMTUwLDggQEAKIFRoZSA6YXR0cjpgbWxfZmxhZ3NgIGZpZWxkIGlzIGEgYml0ZmllbGQgd2hpY2ggY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBmbGFncy4KIFRoZSBpbmRpdmlkdWFsIGZsYWdzIGluZGljYXRlIGVpdGhlciBhIGNhbGxpbmcgY29udmVudGlvbiBvciBhIGJpbmRpbmcKIGNvbnZlbnRpb24uICBPZiB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZsYWdzLCBvbmx5IDpjb25zdDpgTUVUSF9WQVJBUkdTYCBhbmQKLTpjb25zdDpgTUVUSF9LRVlXT1JEU2AgY2FuIGJlIGNvbWJpbmVkIChidXQgbm90ZSB0aGF0IDpjb25zdDpgTUVUSF9LRVlXT1JEU2AKLWFsb25lIGlzIGVxdWl2YWxlbnQgdG8gYGBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTYGApLiBBbnkgb2YgdGhlIGNhbGxpbmcKLWNvbnZlbnRpb24gZmxhZ3MgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBiaW5kaW5nIGZsYWcuCis6Y29uc3Q6YE1FVEhfS0VZV09SRFNgIGNhbiBiZSBjb21iaW5lZC4gQW55IG9mIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZmxhZ3MKK2NhbiBiZSBjb21iaW5lZCB3aXRoIGEgYmluZGluZyBmbGFnLgogCiAKIC4uIGRhdGE6OiBNRVRIX1ZBUkFSR1MKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zeXMucnN0IGIvRG9jL2MtYXBpL3N5cy5yc3QKaW5kZXggN2NlYWQwNy4uM2Q4M2IyNyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3N5cy5yc3QKKysrIGIvRG9jL2MtYXBpL3N5cy5yc3QKQEAgLTQ3LDYgKzQ3LDYwIEBACiAgICBub3QgY2FsbCB0aG9zZSBmdW5jdGlvbnMgZGlyZWN0bHkhICA6Yzp0eXBlOmBQeU9TX3NpZ2hhbmRsZXJfdGAgaXMgYSB0eXBlZGVmCiAgICBhbGlhcyBmb3IgOmM6dHlwZTpgdm9pZCAoXCopKGludClgLgogCisuLiBjOmZ1bmN0aW9uOjogd2NoYXJfdCogUHlfRGVjb2RlTG9jYWxlKGNvbnN0IGNoYXIqIGFyZywgc2l6ZV90ICpzaXplKQorCisgICBEZWNvZGUgYSBieXRlIHN0cmluZyBmcm9tIHRoZSBsb2NhbGUgZW5jb2Rpbmcgd2l0aCB0aGUgOnJlZjpgc3Vycm9nYXRlZXNjYXBlCisgICBlcnJvciBoYW5kbGVyIDxzdXJyb2dhdGVlc2NhcGU+YDogdW5kZWNvZGFibGUgYnl0ZXMgYXJlIGRlY29kZWQgYXMKKyAgIGNoYXJhY3RlcnMgaW4gcmFuZ2UgVStEQzgwLi5VK0RDRkYuIElmIGEgYnl0ZSBzZXF1ZW5jZSBjYW4gYmUgZGVjb2RlZCBhcyBhCisgICBzdXJyb2dhdGUgY2hhcmFjdGVyLCBlc2NhcGUgdGhlIGJ5dGVzIHVzaW5nIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IKKyAgIGhhbmRsZXIgaW5zdGVhZCBvZiBkZWNvZGluZyB0aGVtLgorCisgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZywgdXNlCisgICA6YzpmdW5jOmBQeU1lbV9SYXdGcmVlYCB0byBmcmVlIHRoZSBtZW1vcnkuIElmIHNpemUgaXMgbm90IGBgTlVMTGBgLCB3cml0ZQorICAgdGhlIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMgZXhjbHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciBpbnRvIGBgKnNpemVgYAorCisgICBSZXR1cm4gYGBOVUxMYGAgb24gZGVjb2RpbmcgZXJyb3Igb3IgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuIElmICpzaXplKiBpcworICAgbm90IGBgTlVMTGBgLCBgYCpzaXplYGAgaXMgc2V0IHRvIGBgKHNpemVfdCktMWBgIG9uIG1lbW9yeSBlcnJvciBvciBzZXQgdG8KKyAgIGBgKHNpemVfdCktMmBgIG9uIGRlY29kaW5nIGVycm9yLgorCisgICBEZWNvZGluZyBlcnJvcnMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBDCisgICBsaWJyYXJ5LgorCisgICBVc2UgdGhlIDpjOmZ1bmM6YFB5X0VuY29kZUxvY2FsZWAgZnVuY3Rpb24gdG8gZW5jb2RlIHRoZSBjaGFyYWN0ZXIgc3RyaW5nCisgICBiYWNrIHRvIGEgYnl0ZSBzdHJpbmcuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOmM6ZnVuYzpgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemVgIGFuZAorICAgICAgOmM6ZnVuYzpgUHlVbmljb2RlX0RlY29kZUxvY2FsZUFuZFNpemVgIGZ1bmN0aW9ucy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKworLi4gYzpmdW5jdGlvbjo6IGNoYXIqIFB5X0VuY29kZUxvY2FsZShjb25zdCB3Y2hhcl90ICp0ZXh0LCBzaXplX3QgKmVycm9yX3BvcykKKworICAgRW5jb2RlIGEgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIHRvIHRoZSBsb2NhbGUgZW5jb2Rpbmcgd2l0aCB0aGUKKyAgIDpyZWY6YHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyIDxzdXJyb2dhdGVlc2NhcGU+YDogc3Vycm9nYXRlIGNoYXJhY3RlcnMKKyAgIGluIHRoZSByYW5nZSBVK0RDODAuLlUrRENGRiBhcmUgY29udmVydGVkIHRvIGJ5dGVzIDB4ODAuLjB4RkYuCisKKyAgIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgYnl0ZSBzdHJpbmcsIHVzZSA6YzpmdW5jOmBQeU1lbV9GcmVlYAorICAgdG8gZnJlZSB0aGUgbWVtb3J5LiBSZXR1cm4gYGBOVUxMYGAgb24gZW5jb2RpbmcgZXJyb3Igb3IgbWVtb3J5IGFsbG9jYXRpb24KKyAgIGVycm9yCisKKyAgIElmIGVycm9yX3BvcyBpcyBub3QgYGBOVUxMYGAsIGBgKmVycm9yX3Bvc2BgIGlzIHNldCB0byB0aGUgaW5kZXggb2YgdGhlCisgICBpbnZhbGlkIGNoYXJhY3RlciBvbiBlbmNvZGluZyBlcnJvciwgb3Igc2V0IHRvIGBgKHNpemVfdCktMWBgIG90aGVyd2lzZS4KKworICAgVXNlIHRoZSA6YzpmdW5jOmBQeV9EZWNvZGVMb2NhbGVgIGZ1bmN0aW9uIHRvIGRlY29kZSB0aGUgYnl0ZXMgc3RyaW5nIGJhY2sKKyAgIHRvIGEgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIDpjOmZ1bmM6YFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHRgIGFuZAorICAgICAgOmM6ZnVuYzpgUHlVbmljb2RlX0VuY29kZUxvY2FsZWAgZnVuY3Rpb25zLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBfc3lzdGVtZnVuY3Rpb25zOgogCiBTeXN0ZW0gRnVuY3Rpb25zCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKaW5kZXggNWRlOGJlMC4uMmM0NDhhMCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0CisrKyBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdApAQCAtMTExLDEwICsxMTEsMTAgQEAKICAgIEZvciBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0eXBlIG9iamVjdHMsIHRoZSB0cF9uYW1lIGZpZWxkIHNob3VsZCBjb250YWluIGEgZG90LgogICAgRXZlcnl0aGluZyBiZWZvcmUgdGhlIGxhc3QgZG90IGlzIG1hZGUgYWNjZXNzaWJsZSBhcyB0aGUgOmF0dHI6YF9fbW9kdWxlX19gCiAgICBhdHRyaWJ1dGUsIGFuZCBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IGRvdCBpcyBtYWRlIGFjY2Vzc2libGUgYXMgdGhlCi0gICA6YXR0cjpgX19uYW1lX19gIGF0dHJpYnV0ZS4KKyAgIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgYXR0cmlidXRlLgogCiAgICBJZiBubyBkb3QgaXMgcHJlc2VudCwgdGhlIGVudGlyZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfbmFtZWAgZmllbGQgaXMgbWFkZSBhY2Nlc3NpYmxlIGFzIHRoZQotICAgOmF0dHI6YF9fbmFtZV9fYCBhdHRyaWJ1dGUsIGFuZCB0aGUgOmF0dHI6YF9fbW9kdWxlX19gIGF0dHJpYnV0ZSBpcyB1bmRlZmluZWQKKyAgIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgYXR0cmlidXRlLCBhbmQgdGhlIDphdHRyOmBfX21vZHVsZV9fYCBhdHRyaWJ1dGUgaXMgdW5kZWZpbmVkCiAgICAodW5sZXNzIGV4cGxpY2l0bHkgc2V0IGluIHRoZSBkaWN0aW9uYXJ5LCBhcyBleHBsYWluZWQgYWJvdmUpLiAgVGhpcyBtZWFucyB5b3VyCiAgICB0eXBlIHdpbGwgYmUgaW1wb3NzaWJsZSB0byBwaWNrbGUuCiAKQEAgLTIwOCwyMSArMjA4LDI3IEBACiAKIC4uIGM6bWVtYmVyOjogc2V0YXR0cmZ1bmMgUHlUeXBlT2JqZWN0LnRwX3NldGF0dHIKIAotICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byB0aGUgc2V0LWF0dHJpYnV0ZS1zdHJpbmcgZnVuY3Rpb24uCisgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiBmb3Igc2V0dGluZyBhbmQgZGVsZXRpbmcgYXR0cmlidXRlcy4KIAogICAgVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiAgV2hlbiBpdCBpcyBkZWZpbmVkLCBpdCBzaG91bGQgcG9pbnQgdG8gYSBmdW5jdGlvbgogICAgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfc2V0YXR0cm9gIGZ1bmN0aW9uLCBidXQgdGFraW5nIGEgQyBzdHJpbmcKICAgIGluc3RlYWQgb2YgYSBQeXRob24gc3RyaW5nIG9iamVjdCB0byBnaXZlIHRoZSBhdHRyaWJ1dGUgbmFtZS4gIFRoZSBzaWduYXR1cmUgaXMKLSAgIHRoZSBzYW1lIGFzIGZvciA6YzpmdW5jOmBQeU9iamVjdF9TZXRBdHRyU3RyaW5nYC4KKyAgIHRoZSBzYW1lIGFzIGZvciA6YzpmdW5jOmBQeU9iamVjdF9TZXRBdHRyU3RyaW5nYCwgYnV0IHNldHRpbmcKKyAgICp2KiB0byAqTlVMTCogdG8gZGVsZXRlIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIHN1cHBvcnRlZC4KIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMgdG9nZXRoZXIgd2l0aCA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfc2V0YXR0cm9gOiBhIHN1YnR5cGUKICAgIGluaGVyaXRzIGJvdGggOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3NldGF0dHJgIGFuZCA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfc2V0YXR0cm9gIGZyb20gaXRzIGJhc2UgdHlwZSB3aGVuCiAgICB0aGUgc3VidHlwZSdzIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9zZXRhdHRyYCBhbmQgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3NldGF0dHJvYCBhcmUgYm90aCAqTlVMTCouCiAKIAotLi4gYzptZW1iZXI6OiB2b2lkKiBQeVR5cGVPYmplY3QudHBfcmVzZXJ2ZWQKKy4uIGM6bWVtYmVyOjogUHlBc3luY01ldGhvZHMqIHRwX2FzX2FzeW5jCiAKLSAgIFJlc2VydmVkIHNsb3QsIGZvcm1lcmx5IGtub3duIGFzIHRwX2NvbXBhcmUuCisgICBQb2ludGVyIHRvIGFuIGFkZGl0aW9uYWwgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgZmllbGRzIHJlbGV2YW50IG9ubHkgdG8KKyAgIG9iamVjdHMgd2hpY2ggaW1wbGVtZW50IDp0ZXJtOmBhd2FpdGFibGVgIGFuZCA6dGVybTpgYXN5bmNocm9ub3VzIGl0ZXJhdG9yYAorICAgcHJvdG9jb2xzIGF0IHRoZSBDLWxldmVsLiAgU2VlIDpyZWY6YGFzeW5jLXN0cnVjdHNgIGZvciBkZXRhaWxzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKyAgICAgIEZvcm1lcmx5IGtub3duIGFzIGBgdHBfY29tcGFyZWBgIGFuZCBgYHRwX3Jlc2VydmVkYGAuCiAKIAogLi4gYzptZW1iZXI6OiByZXByZnVuYyBQeVR5cGVPYmplY3QudHBfcmVwcgpAQCAtMzQ2LDkgKzM1MiwxMCBAQAogCiAuLiBjOm1lbWJlcjo6IHNldGF0dHJvZnVuYyBQeVR5cGVPYmplY3QudHBfc2V0YXR0cm8KIAotICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byB0aGUgc2V0LWF0dHJpYnV0ZSBmdW5jdGlvbi4KKyAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIGZvciBzZXR0aW5nIGFuZCBkZWxldGluZyBhdHRyaWJ1dGVzLgogCi0gICBUaGUgc2lnbmF0dXJlIGlzIHRoZSBzYW1lIGFzIGZvciA6YzpmdW5jOmBQeU9iamVjdF9TZXRBdHRyYC4gIEl0IGlzIHVzdWFsbHkKKyAgIFRoZSBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMgZm9yIDpjOmZ1bmM6YFB5T2JqZWN0X1NldEF0dHJgLCBidXQgc2V0dGluZworICAgKnYqIHRvICpOVUxMKiB0byBkZWxldGUgYW4gYXR0cmlidXRlIG11c3QgYmUgc3VwcG9ydGVkLiAgSXQgaXMgdXN1YWxseQogICAgY29udmVuaWVudCB0byBzZXQgdGhpcyBmaWVsZCB0byA6YzpmdW5jOmBQeU9iamVjdF9HZW5lcmljU2V0QXR0cmAsIHdoaWNoCiAgICBpbXBsZW1lbnRzIHRoZSBub3JtYWwgd2F5IG9mIHNldHRpbmcgb2JqZWN0IGF0dHJpYnV0ZXMuCiAKQEAgLTcxOSw3ICs3MjYsNyBAQAogICAgICAgdHlwZWRlZiBzdHJ1Y3QgUHlHZXRTZXREZWYgewogICAgICAgICAgIGNoYXIgKm5hbWU7ICAgIC8qIGF0dHJpYnV0ZSBuYW1lICovCiAgICAgICAgICAgZ2V0dGVyIGdldDsgICAgLyogQyBmdW5jdGlvbiB0byBnZXQgdGhlIGF0dHJpYnV0ZSAqLwotICAgICAgICAgIHNldHRlciBzZXQ7ICAgIC8qIEMgZnVuY3Rpb24gdG8gc2V0IHRoZSBhdHRyaWJ1dGUgKi8KKyAgICAgICAgICBzZXR0ZXIgc2V0OyAgICAvKiBDIGZ1bmN0aW9uIHRvIHNldCBvciBkZWxldGUgdGhlIGF0dHJpYnV0ZSAqLwogICAgICAgICAgIGNoYXIgKmRvYzsgICAgIC8qIG9wdGlvbmFsIGRvYyBzdHJpbmcgKi8KICAgICAgICAgICB2b2lkICpjbG9zdXJlOyAvKiBvcHRpb25hbCBhZGRpdGlvbmFsIGRhdGEgZm9yIGdldHRlciBhbmQgc2V0dGVyICovCiAgICAgICB9IFB5R2V0U2V0RGVmOwpAQCAtNzcwLDEyICs3NzcsMTQgQEAKIAogLi4gYzptZW1iZXI6OiBkZXNjcnNldGZ1bmMgUHlUeXBlT2JqZWN0LnRwX2Rlc2NyX3NldAogCi0gICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgImRlc2NyaXB0b3Igc2V0IiBmdW5jdGlvbi4KKyAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBmb3Igc2V0dGluZyBhbmQgZGVsZXRpbmcKKyAgIGEgZGVzY3JpcHRvcidzIHZhbHVlLgogCiAgICBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIDo6CiAKICAgICAgIGludCB0cF9kZXNjcl9zZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICp2YWx1ZSk7CiAKKyAgIFRoZSAqdmFsdWUqIGFyZ3VtZW50IGlzIHNldCB0byAqTlVMTCogdG8gZGVsZXRlIHRoZSB2YWx1ZS4KICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgogCiAgICAuLiBYWFggZXhwbGFpbi4KQEAgLTExMTgsNiArMTEyNyw5IEBACiAgICAgICAgICAgICBiaW5hcnlmdW5jIG5iX2lucGxhY2VfdHJ1ZV9kaXZpZGU7CiAKICAgICAgICAgICAgIHVuYXJ5ZnVuYyBuYl9pbmRleDsKKworICAgICAgICAgICAgYmluYXJ5ZnVuYyBuYl9tYXRyaXhfbXVsdGlwbHk7CisgICAgICAgICAgICBiaW5hcnlmdW5jIG5iX2lucGxhY2VfbWF0cml4X211bHRpcGx5OwogICAgICAgIH0gUHlOdW1iZXJNZXRob2RzOwogCiAgICAuLiBub3RlOjoKQEAgLTExNjMsOSArMTE3NSwxMSBAQAogCiAuLiBjOm1lbWJlcjo6IG9iam9iamFyZ3Byb2MgUHlNYXBwaW5nTWV0aG9kcy5tcF9hc3Nfc3Vic2NyaXB0CiAKLSAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6YzpmdW5jOmBQeU9iamVjdF9TZXRJdGVtYCBhbmQgaGFzIHRoZSBzYW1lCi0gICBzaWduYXR1cmUuICBJZiB0aGlzIHNsb3QgaXMgKk5VTEwqLCB0aGUgb2JqZWN0IGRvZXMgbm90IHN1cHBvcnQgaXRlbQotICAgYXNzaWdubWVudC4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6YzpmdW5jOmBQeU9iamVjdF9TZXRJdGVtYCBhbmQKKyAgIDpjOmZ1bmM6YFB5T2JqZWN0X0RlbEl0ZW1gLiAgSXQgaGFzIHRoZSBzYW1lIHNpZ25hdHVyZSBhcworICAgOmM6ZnVuYzpgUHlPYmplY3RfU2V0SXRlbWAsIGJ1dCAqdiogY2FuIGFsc28gYmUgc2V0IHRvICpOVUxMKiB0byBkZWxldGUKKyAgIGFuIGl0ZW0uICBJZiB0aGlzIHNsb3QgaXMgKk5VTEwqLCB0aGUgb2JqZWN0IGRvZXMgbm90IHN1cHBvcnQgaXRlbQorICAgYXNzaWdubWVudCBhbmQgZGVsZXRpb24uCiAKIAogLi4gX3NlcXVlbmNlLXN0cnVjdHM6CkBAIC0xMjE0LDcgKzEyMjgsNyBAQAogCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9TZXRJdGVtYCBhbmQgaGFzIHRoZSBzYW1lCiAgICBzaWduYXR1cmUuICBUaGlzIHNsb3QgbWF5IGJlIGxlZnQgdG8gKk5VTEwqIGlmIHRoZSBvYmplY3QgZG9lcyBub3Qgc3VwcG9ydAotICAgaXRlbSBhc3NpZ25tZW50LgorICAgaXRlbSBhc3NpZ25tZW50IGFuZCBkZWxldGlvbi4KIAogLi4gYzptZW1iZXI6OiBvYmpvYmpwcm9jIFB5U2VxdWVuY2VNZXRob2RzLnNxX2NvbnRhaW5zCiAKQEAgLTEzMjksMyArMTM0Myw1OCBAQAogCiAgICA6YzpmdW5jOmBQeUJ1ZmZlcl9SZWxlYXNlYCBpcyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgY29uc3VtZXIgdGhhdAogICAgd3JhcHMgdGhpcyBmdW5jdGlvbi4KKworCisuLiBfYXN5bmMtc3RydWN0czoKKworCitBc3luYyBPYmplY3QgU3RydWN0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gc2VjdGlvbmF1dGhvcjo6IFl1cnkgU2VsaXZhbm92IDx5c2VsaXZhbm92QHNwcnltaXguY29tPgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworLi4gYzp0eXBlOjogUHlBc3luY01ldGhvZHMKKworICAgVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgcG9pbnRlcnMgdG8gdGhlIGZ1bmN0aW9ucyByZXF1aXJlZCB0byBpbXBsZW1lbnQKKyAgIDp0ZXJtOmBhd2FpdGFibGVgIGFuZCA6dGVybTpgYXN5bmNocm9ub3VzIGl0ZXJhdG9yYCBvYmplY3RzLgorCisgICBIZXJlIGlzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbjo6CisKKyAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAgICAgdW5hcnlmdW5jIGFtX2F3YWl0OworICAgICAgICAgICAgdW5hcnlmdW5jIGFtX2FpdGVyOworICAgICAgICAgICAgdW5hcnlmdW5jIGFtX2FuZXh0OworICAgICAgICB9IFB5QXN5bmNNZXRob2RzOworCisuLiBjOm1lbWJlcjo6IHVuYXJ5ZnVuYyBQeUFzeW5jTWV0aG9kcy5hbV9hd2FpdAorCisgICBUaGUgc2lnbmF0dXJlIG9mIHRoaXMgZnVuY3Rpb24gaXM6OgorCisgICAgICBQeU9iamVjdCAqYW1fYXdhaXQoUHlPYmplY3QgKnNlbGYpCisKKyAgIFRoZSByZXR1cm5lZCBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYXRvciwgaS5lLiA6YzpmdW5jOmBQeUl0ZXJfQ2hlY2tgIG11c3QKKyAgIHJldHVybiBgYDFgYCBmb3IgaXQuCisKKyAgIFRoaXMgc2xvdCBtYXkgYmUgc2V0IHRvICpOVUxMKiBpZiBhbiBvYmplY3QgaXMgbm90IGFuIDp0ZXJtOmBhd2FpdGFibGVgLgorCisuLiBjOm1lbWJlcjo6IHVuYXJ5ZnVuYyBQeUFzeW5jTWV0aG9kcy5hbV9haXRlcgorCisgICBUaGUgc2lnbmF0dXJlIG9mIHRoaXMgZnVuY3Rpb24gaXM6OgorCisgICAgICBQeU9iamVjdCAqYW1fYWl0ZXIoUHlPYmplY3QgKnNlbGYpCisKKyAgIE11c3QgcmV0dXJuIGFuIDp0ZXJtOmBhd2FpdGFibGVgIG9iamVjdC4gIFNlZSA6bWV0aDpgX19hbmV4dF9fYCBmb3IgZGV0YWlscy4KKworICAgVGhpcyBzbG90IG1heSBiZSBzZXQgdG8gKk5VTEwqIGlmIGFuIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQKKyAgIGFzeW5jaHJvbm91cyBpdGVyYXRpb24gcHJvdG9jb2wuCisKKy4uIGM6bWVtYmVyOjogdW5hcnlmdW5jIFB5QXN5bmNNZXRob2RzLmFtX2FuZXh0CisKKyAgIFRoZSBzaWduYXR1cmUgb2YgdGhpcyBmdW5jdGlvbiBpczo6CisKKyAgICAgIFB5T2JqZWN0ICphbV9hbmV4dChQeU9iamVjdCAqc2VsZikKKworICAgTXVzdCByZXR1cm4gYW4gOnRlcm06YGF3YWl0YWJsZWAgb2JqZWN0LiAgU2VlIDptZXRoOmBfX2FuZXh0X19gIGZvciBkZXRhaWxzLgorICAgVGhpcyBzbG90IG1heSBiZSBzZXQgdG8gKk5VTEwqLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0IGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CmluZGV4IGY3ZTk5ZDYuLmEwNjcyY2EgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS91bmljb2RlLnJzdAorKysgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKQEAgLTM2Nyw3ICszNjcsNyBAQAogCiAuLiBjOm1hY3JvOjogUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjaCkKIAotICAgQ2hlY2sgaWYgKmNoKiBpcyBhbiBoaWdoIHN1cnJvZ2F0ZSAoYGAweEQ4MDAgPD0gY2ggPD0gMHhEQkZGYGApLgorICAgQ2hlY2sgaWYgKmNoKiBpcyBhIGhpZ2ggc3Vycm9nYXRlIChgYDB4RDgwMCA8PSBjaCA8PSAweERCRkZgYCkuCiAKIC4uIGM6bWFjcm86OiBQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUoY2gpCiAKQEAgLTQyMyw3ICs0MjMsNyBAQAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QgKlB5VW5pY29kZV9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnUpCiAKLSAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGZyb20gYW4gVVRGLTggZW5jb2RlZCBudWxsLXRlcm1pbmF0ZWQgY2hhciBidWZmZXIKKyAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGZyb20gYSBVVEYtOCBlbmNvZGVkIG51bGwtdGVybWluYXRlZCBjaGFyIGJ1ZmZlcgogICAgKnUqLgogCiAKQEAgLTQ1MCw3ICs0NTAsNyBAQAogICAgfCA6YXR0cjpgJSVgICAgICAgICB8ICpuL2EqICAgICAgICAgICAgICAgfCBUaGUgbGl0ZXJhbCAlIGNoYXJhY3Rlci4gICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCA6YXR0cjpgJWNgICAgICAgICB8IGludCAgICAgICAgICAgICAgICAgfCBBIHNpbmdsZSBjaGFyYWN0ZXIsICAgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCByZXByZXNlbnRlZCBhcyBhbiBDIGludC4gICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCByZXByZXNlbnRlZCBhcyBhIEMgaW50LiAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCA6YXR0cjpgJWRgICAgICAgICB8IGludCAgICAgICAgICAgICAgICAgfCBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCBgYHByaW50ZigiJWQiKWBgLiAgICAgICAgICAgICAgfApAQCAtNTU2LDE0ICs1NTYsMTMgQEAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KFB5T2JqZWN0ICpvYmosIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQogCi0gICBDb2VyY2UgYW4gZW5jb2RlZCBvYmplY3QgKm9iaiogdG8gYW4gVW5pY29kZSBvYmplY3QgYW5kIHJldHVybiBhIHJlZmVyZW5jZSB3aXRoCi0gICBpbmNyZW1lbnRlZCByZWZjb3VudC4KKyAgIERlY29kZSBhbiBlbmNvZGVkIG9iamVjdCAqb2JqKiB0byBhIFVuaWNvZGUgb2JqZWN0LgogCiAgICA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgIGFuZCBvdGhlcgogICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YAogICAgYXJlIGRlY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiAqZW5jb2RpbmcqIGFuZCB1c2luZyB0aGUgZXJyb3IgaGFuZGxpbmcKICAgIGRlZmluZWQgYnkgKmVycm9ycyouIEJvdGggY2FuIGJlICpOVUxMKiB0byBoYXZlIHRoZSBpbnRlcmZhY2UgdXNlIHRoZSBkZWZhdWx0Ci0gICB2YWx1ZXMgKHNlZSB0aGUgbmV4dCBzZWN0aW9uIGZvciBkZXRhaWxzKS4KKyAgIHZhbHVlcyAoc2VlIDpyZWY6YGJ1aWx0aW5jb2RlY3NgIGZvciBkZXRhaWxzKS4KIAogICAgQWxsIG90aGVyIG9iamVjdHMsIGluY2x1ZGluZyBVbmljb2RlIG9iamVjdHMsIGNhdXNlIGEgOmV4YzpgVHlwZUVycm9yYCB0byBiZQogICAgc2V0LgpAQCAtNjE0LDggKzYxMyw3IEBACiAKICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoYXQgKnVuaWNvZGUqIGlzIGEgVW5pY29kZSBvYmplY3QsIHRoYXQgdGhlIGluZGV4IGlzCiAgICBub3Qgb3V0IG9mIGJvdW5kcywgYW5kIHRoYXQgdGhlIG9iamVjdCBjYW4gYmUgbW9kaWZpZWQgc2FmZWx5IChpLmUuIHRoYXQgaXQKLSAgIGl0cyByZWZlcmVuY2UgY291bnQgaXMgb25lKSwgaW4gY29udHJhc3QgdG8gdGhlIG1hY3JvIHZlcnNpb24KLSAgIDpjOmZ1bmM6YFB5VW5pY29kZV9XUklURV9DSEFSYC4KKyAgIGl0cyByZWZlcmVuY2UgY291bnQgaXMgb25lKS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKQEAgLTc0NSw4ICs3NDMsMTEgQEAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRnJvbU9iamVjdChQeU9iamVjdCAqb2JqKQogCi0gICBTaG9ydGN1dCBmb3IgYGBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qob2JqLCBOVUxMLCAic3RyaWN0IilgYCB3aGljaCBpcyB1c2VkCi0gICB0aHJvdWdob3V0IHRoZSBpbnRlcnByZXRlciB3aGVuZXZlciBjb2VyY2lvbiB0byBVbmljb2RlIGlzIG5lZWRlZC4KKyAgIENvcHkgYW4gaW5zdGFuY2Ugb2YgYSBVbmljb2RlIHN1YnR5cGUgdG8gYSBuZXcgdHJ1ZSBVbmljb2RlIG9iamVjdCBpZgorICAgbmVjZXNzYXJ5LiBJZiAqb2JqKiBpcyBhbHJlYWR5IGEgdHJ1ZSBVbmljb2RlIG9iamVjdCAobm90IGEgc3VidHlwZSksCisgICByZXR1cm4gdGhlIHJlZmVyZW5jZSB3aXRoIGluY3JlbWVudGVkIHJlZmNvdW50LgorCisgICBPYmplY3RzIG90aGVyIHRoYW4gVW5pY29kZSBvciBpdHMgc3VidHlwZXMgd2lsbCBjYXVzZSBhIDpleGM6YFR5cGVFcnJvcmAuCiAKIAogTG9jYWxlIEVuY29kaW5nCkBAIC03NjUsMTEgKzc2NiwxMyBAQAogICAgKmVycm9ycyogaXMgYGBOVUxMYGAuICAqc3RyKiBtdXN0IGVuZCB3aXRoIGEgbnVsbCBjaGFyYWN0ZXIgYnV0CiAgICBjYW5ub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMuCiAKKyAgIFVzZSA6YzpmdW5jOmBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZWAgdG8gZGVjb2RlIGEgc3RyaW5nIGZyb20KKyAgIDpjOmRhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgICh0aGUgbG9jYWxlIGVuY29kaW5nIHJlYWQgYXQKKyAgIFB5dGhvbiBzdGFydHVwKS4KKwogICAgLi4gc2VlYWxzbzo6CiAKLSAgICAgIFVzZSA6YzpmdW5jOmBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZWAgdG8gZGVjb2RlIGEgc3RyaW5nIGZyb20KLSAgICAgIDpjOmRhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgICh0aGUgbG9jYWxlIGVuY29kaW5nIHJlYWQgYXQKLSAgICAgIFB5dGhvbiBzdGFydHVwKS4KKyAgICAgIFRoZSA6YzpmdW5jOmBQeV9EZWNvZGVMb2NhbGVgIGZ1bmN0aW9uLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtNzkwLDExICs3OTMsMTMgQEAKICAgICplcnJvcnMqIGlzIGBgTlVMTGBgLiBSZXR1cm4gYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QuICpzdHIqIGNhbm5vdAogICAgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMuCiAKKyAgIFVzZSA6YzpmdW5jOmBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0YCB0byBlbmNvZGUgYSBzdHJpbmcgdG8KKyAgIDpjOmRhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgICh0aGUgbG9jYWxlIGVuY29kaW5nIHJlYWQgYXQKKyAgIFB5dGhvbiBzdGFydHVwKS4KKwogICAgLi4gc2VlYWxzbzo6CiAKLSAgICAgIFVzZSA6YzpmdW5jOmBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0YCB0byBlbmNvZGUgYSBzdHJpbmcgdG8KLSAgICAgIDpjOmRhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgICh0aGUgbG9jYWxlIGVuY29kaW5nIHJlYWQgYXQKLSAgICAgIFB5dGhvbiBzdGFydHVwKS4KKyAgICAgIFRoZSA6YzpmdW5jOmBQeV9FbmNvZGVMb2NhbGVgIGZ1bmN0aW9uLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtODM5LDEyICs4NDQsMTQgQEAKICAgIElmIDpjOmRhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgIGlzIG5vdCBzZXQsIGZhbGwgYmFjayB0byB0aGUKICAgIGxvY2FsZSBlbmNvZGluZy4KIAorICAgOmM6ZGF0YTpgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZ2AgaXMgaW5pdGlhbGl6ZWQgYXQgc3RhcnR1cCBmcm9tIHRoZQorICAgbG9jYWxlIGVuY29kaW5nIGFuZCBjYW5ub3QgYmUgbW9kaWZpZWQgbGF0ZXIuIElmIHlvdSBuZWVkIHRvIGRlY29kZSBhIHN0cmluZworICAgZnJvbSB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcsIHVzZQorICAgOmM6ZnVuYzpgUHlVbmljb2RlX0RlY29kZUxvY2FsZUFuZFNpemVgLgorCiAgICAuLiBzZWVhbHNvOjoKIAotICAgICAgOmM6ZGF0YTpgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZ2AgaXMgaW5pdGlhbGl6ZWQgYXQgc3RhcnR1cCBmcm9tIHRoZQotICAgICAgbG9jYWxlIGVuY29kaW5nIGFuZCBjYW5ub3QgYmUgbW9kaWZpZWQgbGF0ZXIuIElmIHlvdSBuZWVkIHRvIGRlY29kZSBhCi0gICAgICBzdHJpbmcgZnJvbSB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcsIHVzZQotICAgICAgOmM6ZnVuYzpgUHlVbmljb2RlX0RlY29kZUxvY2FsZUFuZFNpemVgLgorICAgICAgVGhlIDpjOmZ1bmM6YFB5X0RlY29kZUxvY2FsZWAgZnVuY3Rpb24uCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBVc2UgYGAic3RyaWN0ImBgIGVycm9yIGhhbmRsZXIgb24gV2luZG93cy4KQEAgLTg3NCwxMiArODgxLDEzIEBACiAgICBJZiA6YzpkYXRhOmBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nYCBpcyBub3Qgc2V0LCBmYWxsIGJhY2sgdG8gdGhlCiAgICBsb2NhbGUgZW5jb2RpbmcuCiAKKyAgIDpjOmRhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgIGlzIGluaXRpYWxpemVkIGF0IHN0YXJ0dXAgZnJvbSB0aGUKKyAgIGxvY2FsZSBlbmNvZGluZyBhbmQgY2Fubm90IGJlIG1vZGlmaWVkIGxhdGVyLiBJZiB5b3UgbmVlZCB0byBlbmNvZGUgYSBzdHJpbmcKKyAgIHRvIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZywgdXNlIDpjOmZ1bmM6YFB5VW5pY29kZV9FbmNvZGVMb2NhbGVgLgorCiAgICAuLiBzZWVhbHNvOjoKIAotICAgICAgOmM6ZGF0YTpgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZ2AgaXMgaW5pdGlhbGl6ZWQgYXQgc3RhcnR1cCBmcm9tIHRoZQotICAgICAgbG9jYWxlIGVuY29kaW5nIGFuZCBjYW5ub3QgYmUgbW9kaWZpZWQgbGF0ZXIuIElmIHlvdSBuZWVkIHRvIGVuY29kZSBhCi0gICAgICBzdHJpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLCB1c2UKLSAgICAgIDpjOmZ1bmM6YFB5VW5pY29kZV9FbmNvZGVMb2NhbGVgLgorICAgICAgVGhlIDpjOmZ1bmM6YFB5X0VuY29kZUxvY2FsZWAgZnVuY3Rpb24uCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCkBAIC0xMjE3LDcgKzEyMjUsNyBAQAogCiAgICBJZiAqUHlfVU5JQ09ERV9XSURFKiBpcyBkZWZpbmVkLCBhIHNpbmdsZSA6Yzp0eXBlOmBQeV9VTklDT0RFYCB2YWx1ZSBtYXkgZ2V0CiAgICByZXByZXNlbnRlZCBhcyBhIHN1cnJvZ2F0ZSBwYWlyLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgZWFjaCA6Yzp0eXBlOmBQeV9VTklDT0RFYAotICAgdmFsdWVzIGlzIGludGVycHJldGVkIGFzIGFuIFVDUy0yIGNoYXJhY3Rlci4KKyAgIHZhbHVlcyBpcyBpbnRlcnByZXRlZCBhcyBhIFVDUy0yIGNoYXJhY3Rlci4KIAogICAgUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZCBieSB0aGUgY29kZWMuCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CmluZGV4IGY4YWFmMGYuLjcwNmVmZGYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKKysrIGIvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdApAQCAtMzA3LDEwICszMDcsMTYgQEAKICAgIGNlbGxzLgogCiAKKy4uIGM6dHlwZTo6IFB5RnJhbWVPYmplY3QKKworICAgVGhlIEMgc3RydWN0dXJlIG9mIHRoZSBvYmplY3RzIHVzZWQgdG8gZGVzY3JpYmUgZnJhbWUgb2JqZWN0cy4gVGhlCisgICBmaWVsZHMgb2YgdGhpcyB0eXBlIGFyZSBzdWJqZWN0IHRvIGNoYW5nZSBhdCBhbnkgdGltZS4KKworCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9FdmFsRnJhbWUoUHlGcmFtZU9iamVjdCAqZikKIAogICAgRXZhbHVhdGUgYW4gZXhlY3V0aW9uIGZyYW1lLiAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvCi0gICBQeUV2YWxfRXZhbEZyYW1lRXgsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgOmM6ZnVuYzpgUHlFdmFsX0V2YWxGcmFtZUV4YCwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfRXZhbEZyYW1lRXgoUHlGcmFtZU9iamVjdCAqZiwgaW50IHRocm93ZmxhZykKZGlmZiAtLWdpdCBhL0RvYy9jb25mLnB5IGIvRG9jL2NvbmYucHkKaW5kZXggZjgwM2RlMi4uZDZmMjBiYSAxMDA2NDQKLS0tIGEvRG9jL2NvbmYucHkKKysrIGIvRG9jL2NvbmYucHkKQEAgLTE3LDcgKzE3LDcgQEAKIAogIyBHZW5lcmFsIHN1YnN0aXR1dGlvbnMuCiBwcm9qZWN0ID0gJ1B5dGhvbicKLWNvcHlyaWdodCA9ICcxOTkwLSVzLCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbicgJSB0aW1lLnN0cmZ0aW1lKCclWScpCitjb3B5cmlnaHQgPSAnMjAwMS0lcywgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nICUgdGltZS5zdHJmdGltZSgnJVknKQogCiAjIFdlIGxvb2sgZm9yIHRoZSBJbmNsdWRlL3BhdGNobGV2ZWwuaCBmaWxlIGluIHRoZSBjdXJyZW50IFB5dGhvbiBzb3VyY2UgdHJlZQogIyBhbmQgcmVwbGFjZSB0aGUgdmFsdWVzIGFjY29yZGluZ2x5LgpAQCAtMzYsNiArMzYsOSBAQAogIyBSZXF1aXJlIFNwaGlueCAxLjIgZm9yIGJ1aWxkLgogbmVlZHNfc3BoaW54ID0gJzEuMicKIAorIyBJZ25vcmUgYW55IC5yc3QgZmlsZXMgaW4gdGhlIHZlbnYvIGRpcmVjdG9yeS4KK2V4Y2x1ZGVfcGF0dGVybnMgPSBbJ3ZlbnYvKiddCisKIAogIyBPcHRpb25zIGZvciBIVE1MIG91dHB1dAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM1LDYgKzEzOCwxMSBAQAogIyBHZXQgTGFUZVggdG8gaGFuZGxlIFVuaWNvZGUgY29ycmVjdGx5CiBsYXRleF9lbGVtZW50cyA9IHsnaW5wdXRlbmMnOiByJ1x1c2VwYWNrYWdlW3V0Zjh4XXtpbnB1dGVuY30nLCAndXRmOGV4dHJhJzogJyd9CiAKKyMgT3B0aW9ucyBmb3IgRXB1YiBvdXRwdXQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXB1Yl9hdXRob3IgPSAnUHl0aG9uIERvY3VtZW50YXRpb24gQXV0aG9ycycKK2VwdWJfcHVibGlzaGVyID0gJ1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uJwogCiAjIE9wdGlvbnMgZm9yIHRoZSBjb3ZlcmFnZSBjaGVja2VyCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0IGIvRG9jL2RhdGEvcmVmY291bnRzLmRhdAppbmRleCA2MDI1NjE3Li5lMzg4MTk1IDEwMDY0NAotLS0gYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CisrKyBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKQEAgLTM0OSw2ICszNDksMTEgQEAKIFB5RXJyX0Zvcm1hdDpjb25zdCBjaGFyKjpmb3JtYXQ6OgogUHlFcnJfRm9ybWF0OjouLi46OgogCitQeUVycl9Gb3JtYXRWOlB5T2JqZWN0Kjo6bnVsbDoKK1B5RXJyX0Zvcm1hdFY6UHlPYmplY3QqOmV4Y2VwdGlvbjorMToKK1B5RXJyX0Zvcm1hdFY6Y29uc3QgY2hhcio6Zm9ybWF0OjoKK1B5RXJyX0Zvcm1hdFY6dmFfbGlzdDp2YXJnczo6CisKIFB5RXJyX1dhcm5FeDppbnQ6OjoKIFB5RXJyX1dhcm5FeDpQeU9iamVjdCo6Y2F0ZWdvcnk6MDoKIFB5RXJyX1dhcm5FeDpjb25zdCBjaGFyKjptZXNzYWdlOjoKQEAgLTQ4Niw2ICs0OTEsMTIgQEAKIFB5R2VuX05ldzpQeU9iamVjdCo6OisxOgogUHlHZW5fTmV3OlB5RnJhbWVPYmplY3QqOmZyYW1lOjA6CiAKK1B5R2VuX05ld1dpdGhRdWFsTmFtZTpQeU9iamVjdCo6OisxOgorUHlHZW5fTmV3V2l0aFF1YWxOYW1lOlB5RnJhbWVPYmplY3QqOmZyYW1lOjA6CisKK1B5Q29yb19OZXc6UHlPYmplY3QqOjorMToKK1B5Q29yb19OZXc6UHlGcmFtZU9iamVjdCo6ZnJhbWU6MDoKKwogUHlfSW5pdE1vZHVsZTpQeU9iamVjdCo6OjA6CiBQeV9Jbml0TW9kdWxlOmNvbnN0IGNoYXIqOm5hbWU6OgogUHlfSW5pdE1vZHVsZTpQeU1ldGhvZERlZltdOm1ldGhvZHM6OgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3RyaWJ1dGluZy9pbmRleC5yc3QgYi9Eb2MvZGlzdHJpYnV0aW5nL2luZGV4LnJzdAppbmRleCAxNzc0ZDIzLi44MmVjZDJjIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHJpYnV0aW5nL2luZGV4LnJzdAorKysgYi9Eb2MvZGlzdHJpYnV0aW5nL2luZGV4LnJzdApAQCAtMzUsNyArMzUsNyBAQAogICByZXBvc2l0b3J5IG9mIG9wZW4gc291cmNlIGxpY2Vuc2VkIHBhY2thZ2VzIG1hZGUgYXZhaWxhYmxlIGZvciB1c2UgYnkKICAgb3RoZXIgUHl0aG9uIHVzZXJzCiAqIHRoZSBgUHl0aG9uIFBhY2thZ2luZyBBdXRob3JpdHkKLSAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2Z1dHVyZS5odG1sPmBfXyBhcmUgdGhlIGdyb3VwIG9mCisgIDxodHRwczovL3d3dy5weXBhLmlvLz5gX18gYXJlIHRoZSBncm91cCBvZgogICBkZXZlbG9wZXJzIGFuZCBkb2N1bWVudGF0aW9uIGF1dGhvcnMgcmVzcG9uc2libGUgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQKICAgZXZvbHV0aW9uIG9mIHRoZSBzdGFuZGFyZCBwYWNrYWdpbmcgdG9vbHMgYW5kIHRoZSBhc3NvY2lhdGVkIG1ldGFkYXRhIGFuZAogICBmaWxlIGZvcm1hdCBzdGFuZGFyZHMuIFRoZXkgbWFpbnRhaW4gYSB2YXJpZXR5IG9mIHRvb2xzLCBkb2N1bWVudGF0aW9uCkBAIC02MSw4ICs2MSw4IEBACiAgIGV4dGVuc2lvbnMsIHRvIGJlIGluc3RhbGxlZCBvbiBhIHN5c3RlbSB3aXRob3V0IG5lZWRpbmcgdG8gYmUgYnVpbHQKICAgbG9jYWxseS4KIAotLi4gX3NldHVwdG9vbHM6IGh0dHBzOi8vc2V0dXB0b29scy5weXBhLmlvL2VuL2xhdGVzdC9zZXR1cHRvb2xzLmh0bWwKLS4uIF93aGVlbDogaHR0cDovL3doZWVsLnJlYWR0aGVkb2NzLm9yZworLi4gX3NldHVwdG9vbHM6IGh0dHBzOi8vc2V0dXB0b29scy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvCisuLiBfd2hlZWw6IGh0dHBzOi8vd2hlZWwucmVhZHRoZWRvY3Mub3JnCiAKIE9wZW4gc291cmNlIGxpY2Vuc2luZyBhbmQgY29sbGFib3JhdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMTEsNyArMTExLDcgQEAKIFRoZSBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgaW5jbHVkZXMgbW9yZSBkZXRhaWxzIG9uIHRoZSBgY3VycmVudGx5CiByZWNvbW1lbmRlZCB0b29sc2BfLgogCi0uLiBfY3VycmVudGx5IHJlY29tbWVuZGVkIHRvb2xzOiBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9jdXJyZW50Lmh0bWwjcGFja2FnaW5nLXRvb2wtcmVjb21tZW5kYXRpb25zCisuLiBfY3VycmVudGx5IHJlY29tbWVuZGVkIHRvb2xzOiBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9jdXJyZW50LyNwYWNrYWdpbmctdG9vbC1yZWNvbW1lbmRhdGlvbnMKIAogUmVhZGluZyB0aGUgZ3VpZGUKID09PT09PT09PT09PT09PT09CkBAIC0xMjQsMTEgKzEyNCwxMSBAQAogKiBgVXBsb2FkaW5nIHRoZSBwcm9qZWN0IHRvIHRoZSBQeXRob24gUGFja2FnaW5nIEluZGV4YF8KIAogLi4gX1Byb2plY3Qgc3RydWN0dXJlOiBcCi0gICBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9kaXN0cmlidXRpbmcuaHRtbCNjcmVhdGluZy15b3VyLW93bi1wcm9qZWN0CisgICBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9kaXN0cmlidXRpbmcvCiAuLiBfQnVpbGRpbmcgYW5kIHBhY2thZ2luZyB0aGUgcHJvamVjdDogXAotICAgaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZGlzdHJpYnV0aW5nLmh0bWwjcGFja2FnaW5nLXlvdXItcHJvamVjdAorICAgaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZGlzdHJpYnV0aW5nLyNwYWNrYWdpbmcteW91ci1wcm9qZWN0CiAuLiBfVXBsb2FkaW5nIHRoZSBwcm9qZWN0IHRvIHRoZSBQeXRob24gUGFja2FnaW5nIEluZGV4OiBcCi0gICBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9kaXN0cmlidXRpbmcuaHRtbCN1cGxvYWRpbmcteW91ci1wcm9qZWN0LXRvLXB5cGkKKyAgIGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2Rpc3RyaWJ1dGluZy8jdXBsb2FkaW5nLXlvdXItcHJvamVjdC10by1weXBpCiAKIAogSG93IGRvIEkuLi4/CkBAIC0xNjAsMTEgKzE2MCwxMSBAQAogLi4gc2VlYWxzbzo6CiAKICAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEJpbmFyeSBFeHRlbnNpb25zCi0gICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZXh0ZW5zaW9ucy5odG1sPmBfXworICAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2V4dGVuc2lvbnM+YF9fCiAKIC4uIG90aGVyIHRvcGljczoKIAogICAgT25jZSB0aGUgRGV2ZWxvcG1lbnQgJiBEZXBsb3ltZW50IHBhcnQgb2YgUFBVRyBpcyBmbGVzaGVkIG91dCwgc29tZSBvZgogICAgdGhvc2Ugc2VjdGlvbnMgc2hvdWxkIGJlIGxpbmtlZCBmcm9tIG5ldyBxdWVzdGlvbnMgaGVyZSAobW9zdCBub3RhYmx5LAogICAgd2Ugc2hvdWxkIGhhdmUgYSBxdWVzdGlvbiBhYm91dCBhdm9pZGluZyBkZXBlbmRpbmcgb24gUHlQSSB0aGF0IGxpbmtzIHRvCi0gICBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9kZXBsb3ltZW50Lmh0bWwjcHlwaS1taXJyb3JzLWFuZC1jYWNoZXMpCisgICBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9taXJyb3JzLykKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdCBiL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdAppbmRleCBmNjdmYzVhLi4wNjcyMjUzIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2FwaXJlZi5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0CkBAIC0zMTksMTIgKzMxOSwxMiBAQAogCiAuLiBmdW5jdGlvbjo6IGdlbl9wcmVwcm9jZXNzX29wdGlvbnMobWFjcm9zLCBpbmNsdWRlX2RpcnMpCiAKLSAgIEdlbmVyYXRlIEMgcHJlLXByb2Nlc3NvciBvcHRpb25zICg6b3B0aW9uOmAtRGAsIDpvcHRpb246YC1VYCwgOm9wdGlvbjpgLUlgKSBhcworICAgR2VuZXJhdGUgQyBwcmUtcHJvY2Vzc29yIG9wdGlvbnMgKDpvcHRpb246YC1EYCwgOm9wdGlvbjpgIS1VYCwgOm9wdGlvbjpgIS1JYCkgYXMKICAgIHVzZWQgYnkgYXQgbGVhc3QgdHdvIHR5cGVzIG9mIGNvbXBpbGVyczogdGhlIHR5cGljYWwgVW5peCBjb21waWxlciBhbmQgVmlzdWFsCiAgICBDKysuICptYWNyb3MqIGlzIHRoZSB1c3VhbCB0aGluZywgYSBsaXN0IG9mIDEtIG9yIDItdHVwbGVzLCB3aGVyZSBgYChuYW1lLClgYAotICAgbWVhbnMgdW5kZWZpbmUgKDpvcHRpb246YC1VYCkgbWFjcm8gKm5hbWUqLCBhbmQgYGAobmFtZSwgdmFsdWUpYGAgbWVhbnMgZGVmaW5lCisgICBtZWFucyB1bmRlZmluZSAoOm9wdGlvbjpgIS1VYCkgbWFjcm8gKm5hbWUqLCBhbmQgYGAobmFtZSwgdmFsdWUpYGAgbWVhbnMgZGVmaW5lCiAgICAoOm9wdGlvbjpgLURgKSBtYWNybyAqbmFtZSogdG8gKnZhbHVlKi4gICppbmNsdWRlX2RpcnMqIGlzIGp1c3QgYSBsaXN0IG9mCi0gICBkaXJlY3RvcnkgbmFtZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGhlYWRlciBmaWxlIHNlYXJjaCBwYXRoICg6b3B0aW9uOmAtSWApLgorICAgZGlyZWN0b3J5IG5hbWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBoZWFkZXIgZmlsZSBzZWFyY2ggcGF0aCAoOm9wdGlvbjpgIS1JYCkuCiAgICBSZXR1cm5zIGEgbGlzdCBvZiBjb21tYW5kLWxpbmUgb3B0aW9ucyBzdWl0YWJsZSBmb3IgZWl0aGVyIFVuaXggY29tcGlsZXJzIG9yCiAgICBWaXN1YWwgQysrLgogCkBAIC03OTksNyArNzk5LDcgQEAKIAogKiBsaWJyYXJ5IHNlYXJjaCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgd2l0aCA6b3B0aW9uOmAtTGRpcmAKIAotKiBjb21waWxlIGhhbmRsZWQgYnkgOnByb2dyYW06YGNjYCAob3Igc2ltaWxhcikgZXhlY3V0YWJsZSB3aXRoIDpvcHRpb246YC1jYAorKiBjb21waWxlIGhhbmRsZWQgYnkgOnByb2dyYW06YGNjYCAob3Igc2ltaWxhcikgZXhlY3V0YWJsZSB3aXRoIDpvcHRpb246YCEtY2AKICAgb3B0aW9uOiBjb21waWxlcyA6ZmlsZTpgLmNgIHRvIDpmaWxlOmAub2AKIAogKiBsaW5rIHN0YXRpYyBsaWJyYXJ5IGhhbmRsZWQgYnkgOnByb2dyYW06YGFyYCBjb21tYW5kIChwb3NzaWJseSB3aXRoCkBAIC04MzcsNyArODM3LDcgQEAKIC4uIG1vZHVsZTo6IGRpc3R1dGlscy5iY3BwY29tcGlsZXIKIAogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyA6Y2xhc3M6YEJvcmxhbmRDQ29tcGlsZXJgLCBhbiBzdWJjbGFzcyBvZiB0aGUgYWJzdHJhY3QKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIDpjbGFzczpgQm9ybGFuZENDb21waWxlcmAsIGEgc3ViY2xhc3Mgb2YgdGhlIGFic3RyYWN0CiA6Y2xhc3M6YENDb21waWxlcmAgY2xhc3MgZm9yIHRoZSBCb3JsYW5kIEMrKyBjb21waWxlci4KIAogCkBAIC04NjgsMjMgKzg2OCwzMSBAQAogCiAgICBDcmVhdGUgYW4gYXJjaGl2ZSBmaWxlIChlZy4gYGB6aXBgYCBvciBgYHRhcmBgKS4gICpiYXNlX25hbWUqICBpcyB0aGUgbmFtZSBvZgogICAgdGhlIGZpbGUgdG8gY3JlYXRlLCBtaW51cyBhbnkgZm9ybWF0LXNwZWNpZmljIGV4dGVuc2lvbjsgICpmb3JtYXQqIGlzIHRoZQotICAgYXJjaGl2ZSBmb3JtYXQ6IG9uZSBvZiBgYHppcGBgLCBgYHRhcmBgLCAgYGB6dGFyYGAsIG9yIGBgZ3p0YXJgYC4gKnJvb3RfZGlyKiBpcwotICAgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgYXJjaGl2ZTsgaWUuIHdlIHR5cGljYWxseQotICAgYGBjaGRpcmBgIGludG8gKnJvb3RfZGlyKiBiZWZvcmUgIGNyZWF0aW5nIHRoZSBhcmNoaXZlLiAgKmJhc2VfZGlyKiBpcyB0aGUKLSAgIGRpcmVjdG9yeSB3aGVyZSB3ZSBzdGFydCAgYXJjaGl2aW5nIGZyb207IGllLiAqYmFzZV9kaXIqIHdpbGwgYmUgdGhlIGNvbW1vbgotICAgcHJlZml4IG9mIGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gdGhlIGFyY2hpdmUuICAqcm9vdF9kaXIqIGFuZCAqYmFzZV9kaXIqCi0gICBib3RoIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSBmaWxlLgorICAgYXJjaGl2ZSBmb3JtYXQ6IG9uZSBvZiBgYHppcGBgLCBgYHRhcmBgLCBgYGd6dGFyYGAsIGBgYnp0YXJgYCwgYGB4enRhcmBgLCBvcgorICAgYGB6dGFyYGAuICpyb290X2RpciogaXMgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUKKyAgIGFyY2hpdmU7IGllLiB3ZSB0eXBpY2FsbHkgYGBjaGRpcmBgIGludG8gKnJvb3RfZGlyKiBiZWZvcmUgIGNyZWF0aW5nIHRoZQorICAgYXJjaGl2ZS4gICpiYXNlX2RpciogaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB3ZSBzdGFydCAgYXJjaGl2aW5nIGZyb207IGllLgorICAgKmJhc2VfZGlyKiB3aWxsIGJlIHRoZSBjb21tb24gcHJlZml4IG9mIGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gdGhlCisgICBhcmNoaXZlLiAgKnJvb3RfZGlyKiBhbmQgKmJhc2VfZGlyKiBib3RoIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSBmaWxlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgeHp0YXJgYCBmb3JtYXQuCiAKIAogLi4gZnVuY3Rpb246OiBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCBiYXNlX2RpclssIGNvbXByZXNzPSdnemlwJywgdmVyYm9zZT0wLCBkcnlfcnVuPTBdKQogCiAgICAnQ3JlYXRlIGFuIChvcHRpb25hbCBjb21wcmVzc2VkKSBhcmNoaXZlIGFzIGEgdGFyIGZpbGUgZnJvbSBhbGwgZmlsZXMgaW4gYW5kCi0gICB1bmRlciAqYmFzZV9kaXIqLiAqY29tcHJlc3MqIG11c3QgYmUgYGAnZ3ppcCdgYCAodGhlIGRlZmF1bHQpLCAgYGAnY29tcHJlc3MnYGAsCi0gICBgYCdiemlwMidgYCwgb3IgYGBOb25lYGAuICBCb3RoIDpwcm9ncmFtOmB0YXJgIGFuZCB0aGUgY29tcHJlc3Npb24gdXRpbGl0eSBuYW1lZAotICAgYnkgKmNvbXByZXNzKiBtdXN0IGJlIG9uIHRoZSAgZGVmYXVsdCBwcm9ncmFtIHNlYXJjaCBwYXRoLCBzbyB0aGlzIGlzIHByb2JhYmx5Ci0gICBVbml4LXNwZWNpZmljLiAgVGhlICBvdXRwdXQgdGFyIGZpbGUgd2lsbCBiZSBuYW1lZCA6ZmlsZTpgYmFzZV9kaXIudGFyYCwKLSAgIHBvc3NpYmx5IHBsdXMgdGhlIGFwcHJvcHJpYXRlIGNvbXByZXNzaW9uIGV4dGVuc2lvbiAoOmZpbGU6YC5nemAsIDpmaWxlOmAuYnoyYAotICAgb3IgOmZpbGU6YC5aYCkuICBSZXR1cm4gdGhlIG91dHB1dCBmaWxlbmFtZS4KKyAgIHVuZGVyICpiYXNlX2RpciouICpjb21wcmVzcyogbXVzdCBiZSBgYCdnemlwJ2BgICh0aGUgZGVmYXVsdCksCisgICBgYCdiemlwMidgYCwgYGAneHonYGAsIGBgJ2NvbXByZXNzJ2BgLCBvciBgYE5vbmVgYC4gIEZvciB0aGUgYGAnY29tcHJlc3MnYGAKKyAgIG1ldGhvZCB0aGUgY29tcHJlc3Npb24gdXRpbGl0eSBuYW1lZCBieSA6cHJvZ3JhbTpgY29tcHJlc3NgIG11c3QgYmUgb24gdGhlCisgICBkZWZhdWx0IHByb2dyYW0gc2VhcmNoIHBhdGgsIHNvIHRoaXMgaXMgcHJvYmFibHkgVW5peC1zcGVjaWZpYy4gIFRoZSBvdXRwdXQKKyAgIHRhciBmaWxlIHdpbGwgYmUgbmFtZWQgOmZpbGU6YGJhc2VfZGlyLnRhcmAsIHBvc3NpYmx5IHBsdXMgdGhlIGFwcHJvcHJpYXRlCisgICBjb21wcmVzc2lvbiBleHRlbnNpb24gKGBgLmd6YGAsIGBgLmJ6MmBgLCBgYC54emBgIG9yIGBgLlpgYCkuICBSZXR1cm4gdGhlCisgICBvdXRwdXQgZmlsZW5hbWUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGB4emBgIGNvbXByZXNzaW9uLgogCiAKIC4uIGZ1bmN0aW9uOjogbWFrZV96aXBmaWxlKGJhc2VfbmFtZSwgYmFzZV9kaXJbLCB2ZXJib3NlPTAsIGRyeV9ydW49MF0pCkBAIC0xMTkzLDEyICsxMjAxLDEyIEBACiAKIC4uIGZ1bmN0aW9uOjogYnl0ZV9jb21waWxlKHB5X2ZpbGVzWywgb3B0aW1pemU9MCwgZm9yY2U9MCwgcHJlZml4PU5vbmUsIGJhc2VfZGlyPU5vbmUsIHZlcmJvc2U9MSwgZHJ5X3J1bj0wLCBkaXJlY3Q9Tm9uZV0pCiAKLSAgIEJ5dGUtY29tcGlsZSBhIGNvbGxlY3Rpb24gb2YgUHl0aG9uIHNvdXJjZSBmaWxlcyB0byBlaXRoZXIgOmZpbGU6YC5weWNgIG9yCi0gICA6ZmlsZTpgLnB5b2AgZmlsZXMgaW4gYSA6ZmlsZTpgX19weWNhY2hlX19gIHN1YmRpcmVjdG9yeSAoc2VlIDpwZXA6YDMxNDdgKS4KKyAgIEJ5dGUtY29tcGlsZSBhIGNvbGxlY3Rpb24gb2YgUHl0aG9uIHNvdXJjZSBmaWxlcyB0byA6ZmlsZTpgLnB5Y2AgZmlsZXMgaW4gYQorICAgOmZpbGU6YF9fcHljYWNoZV9fYCBzdWJkaXJlY3RvcnkgKHNlZSA6cGVwOmAzMTQ3YCBhbmQgOnBlcDpgNDg4YCkuCiAgICAqcHlfZmlsZXMqIGlzIGEgbGlzdCBvZiBmaWxlcyB0byBjb21waWxlOyBhbnkgZmlsZXMgdGhhdCBkb24ndCBlbmQgaW4KICAgIDpmaWxlOmAucHlgIGFyZSBzaWxlbnRseSBza2lwcGVkLiAgKm9wdGltaXplKiBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogCi0gICAqIGBgMGBgIC0gZG9uJ3Qgb3B0aW1pemUgKGdlbmVyYXRlIDpmaWxlOmAucHljYCkKKyAgICogYGAwYGAgLSBkb24ndCBvcHRpbWl6ZQogICAgKiBgYDFgYCAtIG5vcm1hbCBvcHRpbWl6YXRpb24gKGxpa2UgYGBweXRob24gLU9gYCkKICAgICogYGAyYGAgLSBleHRyYSBvcHRpbWl6YXRpb24gKGxpa2UgYGBweXRob24gLU9PYGApCiAKQEAgLTEyMjIsMTAgKzEyMzAsMTMgQEAKICAgIGRvaW5nLCBsZWF2ZSBpdCBzZXQgdG8gYGBOb25lYGAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yLjMKLSAgICAgIENyZWF0ZSBgYC5weWNgYCBvciBgYC5weW9gYCBmaWxlcyB3aXRoIGFuIDpmdW5jOmBpbXBvcnQgbWFnaWMgdGFnCisgICAgICBDcmVhdGUgYGAucHljYGAgZmlsZXMgd2l0aCBhbiA6ZnVuYzpgaW1wb3J0IG1hZ2ljIHRhZwogICAgICAgPGltcC5nZXRfdGFnPmAgaW4gdGhlaXIgbmFtZSwgaW4gYSA6ZmlsZTpgX19weWNhY2hlX19gIHN1YmRpcmVjdG9yeQogICAgICAgaW5zdGVhZCBvZiBmaWxlcyB3aXRob3V0IHRhZyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBDcmVhdGUgYGAucHljYGAgZmlsZXMgYWNjb3JkaW5nIHRvIDpwZXA6YDQ4OGAuCisKIAogLi4gZnVuY3Rpb246OiByZmM4MjJfZXNjYXBlKGhlYWRlcikKIApAQCAtMTgxMSw3ICsxODIyLDcgQEAKIAogICAgQnVpbGRzIGEgYFdpbmRvd3MgSW5zdGFsbGVyYF8gKC5tc2kpIGJpbmFyeSBwYWNrYWdlLgogCi0gICAuLiBfV2luZG93cyBJbnN0YWxsZXI6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9jYzE4NTY4OChWUy44NSkuYXNweAorICAgLi4gX1dpbmRvd3MgSW5zdGFsbGVyOiBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2NjMTg1Njg4KFZTLjg1KS5hc3B4CiAKICAgIEluIG1vc3QgY2FzZXMsIHRoZSBgYGJkaXN0X21zaWBgIGluc3RhbGxlciBpcyBhIGJldHRlciBjaG9pY2UgdGhhbiB0aGUKICAgIGBgYmRpc3Rfd2luaW5zdGBgIGluc3RhbGxlciwgYmVjYXVzZSBpdCBwcm92aWRlcyBiZXR0ZXIgc3VwcG9ydCBmb3IKQEAgLTE4OTYsOSArMTkwNyw5IEBACiAgICB0aGF0IGlzIGRlc2lnbmVkIHRvIHJ1biB3aXRoIGJvdGggUHl0aG9uIDIueCBhbmQgMy54LCBhZGQ6OgogCiAgICAgIHRyeToKLSAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHlfMnRvMyBhcyBidWlsZF9weQorICAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHlfMnRvMyBhcyBidWlsZF9weQogICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHkgaW1wb3J0IGJ1aWxkX3B5CisgICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weQogCiAgICB0byB5b3VyIHNldHVwLnB5LCBhbmQgbGF0ZXI6OgogCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QgYi9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKaW5kZXggYzU4MjdiNi4uNTIzZDFlMCAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdApAQCAtNzIsMTMgKzcyLDE5IEBACiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogfCBGb3JtYXQgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHwKICs9PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rCi18IGBgZ3p0YXJgYCAgIHwgZ3ppcHBlZCB0YXIgZmlsZSAgICAgICAgICAgICB8ICgxKSwoMykgfAorfCBgYGd6dGFyYGAgICB8IGd6aXBwZWQgdGFyIGZpbGUgICAgICAgICAgICAgfCBcKDEpICAgIHwKIHwgICAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuZ3pgKSAgICAgICAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKworfCBgYGJ6dGFyYGAgICB8IGJ6aXBwZWQgdGFyIGZpbGUgICAgICAgICAgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuYnoyYCkgICAgICAgICAgIHwgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKworfCBgYHh6dGFyYGAgICB8IHh6aXBwZWQgdGFyIGZpbGUgICAgICAgICAgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgICAgfCAoOmZpbGU6YC50YXIueHpgKSAgICAgICAgICAgIHwgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogfCBgYHp0YXJgYCAgICB8IGNvbXByZXNzZWQgdGFyIGZpbGUgICAgICAgICAgfCBcKDMpICAgIHwKIHwgICAgICAgICAgICAgfCAoOmZpbGU6YC50YXIuWmApICAgICAgICAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwotfCBgYHRhcmBgICAgICB8IHRhciBmaWxlICg6ZmlsZTpgLnRhcmApICAgICAgfCBcKDMpICAgIHwKK3wgYGB0YXJgYCAgICAgfCB0YXIgZmlsZSAoOmZpbGU6YC50YXJgKSAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKwogfCBgYHppcGBgICAgICB8IHppcCBmaWxlICg6ZmlsZTpgLnppcGApICAgICAgfCAoMiksKDQpIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCkBAIC05NCw2ICsxMDAsOSBAQAogfCBgYG1zaWBgICAgICB8IE1pY3Jvc29mdCBJbnN0YWxsZXIuICAgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGB4enRhcmBgIGZvcm1hdC4KKwogCiBOb3RlczoKIApAQCAtMTA0LDggKzExMyw3IEBACiAgICBkZWZhdWx0IG9uIFdpbmRvd3MKIAogKDMpCi0gICByZXF1aXJlcyBleHRlcm5hbCB1dGlsaXRpZXM6IDpwcm9ncmFtOmB0YXJgIGFuZCBwb3NzaWJseSBvbmUgb2YgOnByb2dyYW06YGd6aXBgLAotICAgOnByb2dyYW06YGJ6aXAyYCwgb3IgOnByb2dyYW06YGNvbXByZXNzYAorICAgcmVxdWlyZXMgZXh0ZXJuYWwgOnByb2dyYW06YGNvbXByZXNzYCB1dGlsaXR5LgogCiAoNCkKICAgIHJlcXVpcmVzIGVpdGhlciBleHRlcm5hbCA6cHJvZ3JhbTpgemlwYCB1dGlsaXR5IG9yIDptb2Q6YHppcGZpbGVgIG1vZHVsZSAocGFydApAQCAtMTE5LDIxICsxMjcsMjIgQEAKIG9wdGlvbjsgeW91IGNhbiBhbHNvIHVzZSB0aGUgY29tbWFuZCB0aGF0IGRpcmVjdGx5IGltcGxlbWVudHMgdGhlIGZvcm1hdCB5b3UncmUKIGludGVyZXN0ZWQgaW4uICBTb21lIG9mIHRoZXNlIDpjb21tYW5kOmBiZGlzdGAgInN1Yi1jb21tYW5kcyIgYWN0dWFsbHkgZ2VuZXJhdGUKIHNldmVyYWwgc2ltaWxhciBmb3JtYXRzOyBmb3IgaW5zdGFuY2UsIHRoZSA6Y29tbWFuZDpgYmRpc3RfZHVtYmAgY29tbWFuZAotZ2VuZXJhdGVzIGFsbCB0aGUgImR1bWIiIGFyY2hpdmUgZm9ybWF0cyAoYGB0YXJgYCwgYGB6dGFyYGAsIGBgZ3p0YXJgYCwgYW5kCi1gYHppcGBgKSwgYW5kIDpjb21tYW5kOmBiZGlzdF9ycG1gIGdlbmVyYXRlcyBib3RoIGJpbmFyeSBhbmQgc291cmNlIFJQTXMuICBUaGUKLTpjb21tYW5kOmBiZGlzdGAgc3ViLWNvbW1hbmRzLCBhbmQgdGhlIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IGVhY2gsIGFyZToKK2dlbmVyYXRlcyBhbGwgdGhlICJkdW1iIiBhcmNoaXZlIGZvcm1hdHMgKGBgdGFyYGAsIGBgZ3p0YXJgYCwgYGBienRhcmBgLAorYGB4enRhcmBgLCBgYHp0YXJgYCwgYW5kIGBgemlwYGApLCBhbmQgOmNvbW1hbmQ6YGJkaXN0X3JwbWAgZ2VuZXJhdGVzIGJvdGgKK2JpbmFyeSBhbmQgc291cmNlIFJQTXMuICBUaGUgOmNvbW1hbmQ6YGJkaXN0YCBzdWItY29tbWFuZHMsIGFuZCB0aGUgZm9ybWF0cworZ2VuZXJhdGVkIGJ5IGVhY2gsIGFyZToKIAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb21tYW5kICAgICAgICAgICAgICAgICAgfCBGb3JtYXRzICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09KwotfCA6Y29tbWFuZDpgYmRpc3RfZHVtYmAgICAgfCB0YXIsIHp0YXIsIGd6dGFyLCB6aXAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgYmRpc3RfcnBtYCAgICAgfCBycG0sIHNycG0gICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgYmRpc3Rfd2luaW5zdGAgfCB3aW5pbnN0ICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29tbWFuZDpgYmRpc3RfbXNpYCAgICAgfCBtc2kgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvbW1hbmQgICAgICAgICAgICAgICAgICB8IEZvcm1hdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCA6Y29tbWFuZDpgYmRpc3RfZHVtYmAgICAgfCB0YXIsIGd6dGFyLCBienRhciwgeHp0YXIsIHp0YXIsIHppcCB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbW1hbmQ6YGJkaXN0X3JwbWAgICAgIHwgcnBtLCBzcnBtICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjb21tYW5kOmBiZGlzdF93aW5pbnN0YCB8IHdpbmluc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29tbWFuZDpgYmRpc3RfbXNpYCAgICAgfCBtc2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBnaXZlIGRldGFpbHMgb24gdGhlIGluZGl2aWR1YWwgOmNvbW1hbmQ6YGJkaXN0X1wqYAogY29tbWFuZHMuCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUucnN0IGIvRG9jL2Rpc3R1dGlscy9jb25maWdmaWxlLnJzdAppbmRleCA4ZmFmZmU2Li41MWQ4ODk3IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvY29uZmlnZmlsZS5yc3QKQEAgLTUxLDcgKzUxLDcgQEAKIGNvbnRpbnVhdGlvbiBsaW5lcy4KIAogWW91IGNhbiBmaW5kIG91dCB0aGUgbGlzdCBvZiBvcHRpb25zIHN1cHBvcnRlZCBieSBhIHBhcnRpY3VsYXIgY29tbWFuZCB3aXRoIHRoZQotdW5pdmVyc2FsIDpvcHRpb246YC0taGVscGAgb3B0aW9uLCBlLmcuIDo6Cit1bml2ZXJzYWwgOm9wdGlvbjpgIS0taGVscGAgb3B0aW9uLCBlLmcuIDo6CiAKICAgID4gcHl0aG9uIHNldHVwLnB5IC0taGVscCBidWlsZF9leHQKICAgIFsuLi5dCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL2V4YW1wbGVzLnJzdCBiL0RvYy9kaXN0dXRpbHMvZXhhbXBsZXMucnN0CmluZGV4IGFmOTEyNWEuLjFmNWJlOWMgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvZXhhbXBsZXMucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvZXhhbXBsZXMucnN0CkBAIC0yNDUsNyArMjQ1LDkgQEAKIAogICAgIHNldHVwKG5hbWU9J2Zvb2JhcicpCiAKLVJ1bm5pbmcgdGhlIGBgY2hlY2tgYCBjb21tYW5kIHdpbGwgZGlzcGxheSBzb21lIHdhcm5pbmdzOjoKK1J1bm5pbmcgdGhlIGBgY2hlY2tgYCBjb21tYW5kIHdpbGwgZGlzcGxheSBzb21lIHdhcm5pbmdzOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gc2V0dXAucHkgY2hlY2sKICAgICBydW5uaW5nIGNoZWNrCkBAIC0yNzQsNyArMjc2LDkgQEAKICAgICAgICAgdXJsPSdodHRwOi8vZXhhbXBsZS5jb20nLCBsb25nX2Rlc2NyaXB0aW9uPWRlc2MpCiAKIFdoZXJlIHRoZSBsb25nIGRlc2NyaXB0aW9uIGlzIGJyb2tlbiwgYGBjaGVja2BgIHdpbGwgYmUgYWJsZSB0byBkZXRlY3QgaXQKLWJ5IHVzaW5nIHRoZSA6bW9kOmBkb2N1dGlsc2AgcGFyc2VyOjoKK2J5IHVzaW5nIHRoZSA6bW9kOmBkb2N1dGlsc2AgcGFyc2VyOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gc2V0dXAucHkgY2hlY2sgLS1yZXN0cnVjdHVyZWR0ZXh0CiAgICAgcnVubmluZyBjaGVjawpAQCAtMjg2LDcgKzI5MCw5IEBACiAKIFRoZSA6ZnVuYzpgZGlzdHV0aWxzLmNvcmUuc2V0dXBgIGZ1bmN0aW9uIHByb3ZpZGVzIGEgY29tbWFuZC1saW5lIGludGVyZmFjZQogdGhhdCBhbGxvd3MgeW91IHRvIHF1ZXJ5IHRoZSBtZXRhZGF0YSBmaWVsZHMgb2YgYSBwcm9qZWN0IHRocm91Z2ggdGhlCi1gYHNldHVwLnB5YGAgc2NyaXB0IG9mIGEgZ2l2ZW4gcHJvamVjdDo6CitgYHNldHVwLnB5YGAgc2NyaXB0IG9mIGEgZ2l2ZW4gcHJvamVjdDoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgICQgcHl0aG9uIHNldHVwLnB5IC0tbmFtZQogICAgIGRpc3RyaWJ1dGUKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvaW5kZXgucnN0IGIvRG9jL2Rpc3R1dGlscy9pbmRleC5yc3QKaW5kZXggMzM1ZjgwNC4uYzU2NWJjYyAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9pbmRleC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9pbmRleC5yc3QKQEAgLTcsNiArNywxMSBAQAogOkF1dGhvcnM6IEdyZWcgV2FyZCwgQW50aG9ueSBCYXh0ZXIKIDpFbWFpbDogZGlzdHV0aWxzLXNpZ0BweXRob24ub3JnCiAKKy4uIHNlZWFsc286OgorCisgICA6cmVmOmBkaXN0cmlidXRpbmctaW5kZXhgCisgICAgICBUaGUgdXAgdG8gZGF0ZSBtb2R1bGUgZGlzdHJpYnV0aW9uIGRvY3VtZW50YXRpb25zCisKIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcyAoIkRpc3R1dGlscyIpIGZyb20KIHRoZSBtb2R1bGUgZGV2ZWxvcGVyJ3MgcG9pbnQgb2YgdmlldywgZGVzY3JpYmluZyBob3cgdG8gdXNlIHRoZSBEaXN0dXRpbHMgdG8KIG1ha2UgUHl0aG9uIG1vZHVsZXMgYW5kIGV4dGVuc2lvbnMgZWFzaWx5IGF2YWlsYWJsZSB0byBhIHdpZGVyIGF1ZGllbmNlIHdpdGgKQEAgLTIwLDcgKzI1LDYgQEAKICAgIHJlY29tbWVuZGF0aW9ucyBzZWN0aW9uIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9jdXJyZW50Lz5gX18KICAgIGluIHRoZSBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLQogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKICAgIDpudW1iZXJlZDoKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvaW50cm9kdWN0aW9uLnJzdCBiL0RvYy9kaXN0dXRpbHMvaW50cm9kdWN0aW9uLnJzdAppbmRleCAwZWNlNjQ2Li44ZjQ2YmQ3IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2ludHJvZHVjdGlvbi5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9pbnRyb2R1Y3Rpb24ucnN0CkBAIC0xNTYsOCArMTU2LDggQEAKIAogcHVyZSBQeXRob24gbW9kdWxlCiAgICBhIG1vZHVsZSB3cml0dGVuIGluIFB5dGhvbiBhbmQgY29udGFpbmVkIGluIGEgc2luZ2xlIDpmaWxlOmAucHlgIGZpbGUgKGFuZAotICAgcG9zc2libHkgYXNzb2NpYXRlZCA6ZmlsZTpgLnB5Y2AgYW5kL29yIDpmaWxlOmAucHlvYCBmaWxlcykuICBTb21ldGltZXMgcmVmZXJyZWQKLSAgIHRvIGFzIGEgInB1cmUgbW9kdWxlLiIKKyAgIHBvc3NpYmx5IGFzc29jaWF0ZWQgOmZpbGU6YC5weWNgIGZpbGVzKS4gIFNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBhCisgICAicHVyZSBtb2R1bGUuIgogCiBleHRlbnNpb24gbW9kdWxlCiAgICBhIG1vZHVsZSB3cml0dGVuIGluIHRoZSBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugb2YgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbjogQy9DKysKQEAgLTIxMCw1ICsyMTAsMyBAQAogICAgdGhlIHRvcC1sZXZlbCBkaXJlY3Rvcnkgb2YgeW91ciBzb3VyY2UgdHJlZSAob3IgIHNvdXJjZSBkaXN0cmlidXRpb24pOyB0aGUKICAgIGRpcmVjdG9yeSB3aGVyZSA6ZmlsZTpgc2V0dXAucHlgIGV4aXN0cy4gIEdlbmVyYWxseSAgOmZpbGU6YHNldHVwLnB5YCB3aWxsIGJlCiAgICBydW4gZnJvbSB0aGlzIGRpcmVjdG9yeS4KLQotCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5yc3QgYi9Eb2MvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5yc3QKaW5kZXggMmQ3ZGFlZi4uMjhhZDEyOCAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXgucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvcGFja2FnZWluZGV4LnJzdApAQCAtMjMzLDcgKzIzMyw5IEBACiAKIFRvIHByZXZlbnQgcmVnaXN0ZXJpbmcgYnJva2VuIHJlU3RydWN0dXJlZFRleHQgY29udGVudCwgeW91IGNhbiB1c2UgdGhlCiA6cHJvZ3JhbTpgcnN0Mmh0bWxgIHByb2dyYW0gdGhhdCBpcyBwcm92aWRlZCBieSB0aGUgOm1vZDpgZG9jdXRpbHNgIHBhY2thZ2UgYW5kCi1jaGVjayB0aGUgYGBsb25nX2Rlc2NyaXB0aW9uYGAgZnJvbSB0aGUgY29tbWFuZCBsaW5lOjoKK2NoZWNrIHRoZSBgYGxvbmdfZGVzY3JpcHRpb25gYCBmcm9tIHRoZSBjb21tYW5kIGxpbmU6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICAkIHB5dGhvbiBzZXR1cC5weSAtLWxvbmctZGVzY3JpcHRpb24gfCByc3QyaHRtbC5weSA+IG91dHB1dC5odG1sCiAKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QgYi9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CmluZGV4IGI5ZjBjYzguLjM1YWVhMWUgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdApAQCAtMzIsMTIgKzMyLDE4IEBACiB8IGBgYnp0YXJgYCB8IGJ6aXAyJ2VkIHRhciBmaWxlICAgICAgIHwgICAgICAgICB8CiB8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci5iejJgKSAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCit8IGBgeHp0YXJgYCB8IHh6J2VkIHRhciBmaWxlICAgICAgICAgIHwgICAgICAgICB8Cit8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci54emApICAgICAgIHwgICAgICAgICB8CisrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiB8IGBgenRhcmBgICB8IGNvbXByZXNzZWQgdGFyIGZpbGUgICAgIHwgXCg0KSAgICB8CiB8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci5aYCkgICAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiB8IGBgdGFyYGAgICB8IHRhciBmaWxlICg6ZmlsZTpgLnRhcmApIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGB4enRhcmBgIGZvcm1hdC4KKwogTm90ZXM6CiAKICgxKQpAQCAtNTQsNyArNjAsNyBAQAogICAgcmVxdWlyZXMgdGhlIDpwcm9ncmFtOmBjb21wcmVzc2AgcHJvZ3JhbS4gTm90aWNlIHRoYXQgdGhpcyBmb3JtYXQgaXMgbm93CiAgICBwZW5kaW5nIGZvciBkZXByZWNhdGlvbiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uLgogCi1XaGVuIHVzaW5nIGFueSBgYHRhcmBgIGZvcm1hdCAoYGBnenRhcmBgLCBgYGJ6dGFyYGAsIGBgenRhcmBgIG9yCitXaGVuIHVzaW5nIGFueSBgYHRhcmBgIGZvcm1hdCAoYGBnenRhcmBgLCBgYGJ6dGFyYGAsIGBgeHp0YXJgYCwgYGB6dGFyYGAgb3IKIGBgdGFyYGApLCB1bmRlciBVbml4IHlvdSBjYW4gc3BlY2lmeSB0aGUgYGBvd25lcmBgIGFuZCBgYGdyb3VwYGAgbmFtZXMKIHRoYXQgd2lsbCBiZSBzZXQgZm9yIGVhY2ggbWVtYmVyIG9mIHRoZSBhcmNoaXZlLgogCkBAIC0xMjcsNyArMTMzLDkgQEAKIAogVGhlIG1hbmlmZXN0IHRlbXBsYXRlIGhhcyBvbmUgY29tbWFuZCBwZXIgbGluZSwgd2hlcmUgZWFjaCBjb21tYW5kIHNwZWNpZmllcyBhCiBzZXQgb2YgZmlsZXMgdG8gaW5jbHVkZSBvciBleGNsdWRlIGZyb20gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uICBGb3IgYW4KLWV4YW1wbGUsIGFnYWluIHdlIHR1cm4gdG8gdGhlIERpc3R1dGlscycgb3duIG1hbmlmZXN0IHRlbXBsYXRlOjoKK2V4YW1wbGUsIGFnYWluIHdlIHR1cm4gdG8gdGhlIERpc3R1dGlscycgb3duIG1hbmlmZXN0IHRlbXBsYXRlOgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICBpbmNsdWRlICoudHh0CiAgICByZWN1cnNpdmUtaW5jbHVkZSBleGFtcGxlcyAqLnR4dCAqLnB5CmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL2J1aWxkaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvYnVpbGRpbmcucnN0CmluZGV4IDY1NmFmODguLjlmZTEyYzIgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvYnVpbGRpbmcucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvYnVpbGRpbmcucnN0CkBAIC0xLDMwICsxLDYzIEBACiAuLiBoaWdobGlnaHRsYW5nOjogYwogCi0KIC4uIF9idWlsZGluZzoKIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitCdWlsZGluZyBDIGFuZCBDKysgRXh0ZW5zaW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQSBDIGV4dGVuc2lvbiBmb3IgQ1B5dGhvbiBpcyBhIHNoYXJlZCBsaWJyYXJ5IChlLmcuIGEgYGAuc29gYCBmaWxlIG9uIExpbnV4LAorYGAucHlkYGAgb24gV2luZG93cyksIHdoaWNoIGV4cG9ydHMgYW4gKmluaXRpYWxpemF0aW9uIGZ1bmN0aW9uKi4KKworVG8gYmUgaW1wb3J0YWJsZSwgdGhlIHNoYXJlZCBsaWJyYXJ5IG11c3QgYmUgYXZhaWxhYmxlIG9uIDplbnZ2YXI6YFBZVEhPTlBBVEhgLAorYW5kIG11c3QgYmUgbmFtZWQgYWZ0ZXIgdGhlIG1vZHVsZSBuYW1lLCB3aXRoIGFuIGFwcHJvcHJpYXRlIGV4dGVuc2lvbi4KK1doZW4gdXNpbmcgZGlzdHV0aWxzLCB0aGUgY29ycmVjdCBmaWxlbmFtZSBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS4KKworVGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGhhcyB0aGUgc2lnbmF0dXJlOgorCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW5pdF9tb2R1bGVuYW1lKHZvaWQpCisKK0l0IHJldHVybnMgZWl0aGVyIGEgZnVsbHktaW5pdGlhbGl6ZWQgbW9kdWxlLCBvciBhIDpjOnR5cGU6YFB5TW9kdWxlRGVmYAoraW5zdGFuY2UuIFNlZSA6cmVmOmBpbml0aWFsaXppbmctbW9kdWxlc2AgZm9yIGRldGFpbHMuCisKKy4uIGhpZ2hsaWdodGxhbmc6OiBweXRob24KKworRm9yIG1vZHVsZXMgd2l0aCBBU0NJSS1vbmx5IG5hbWVzLCB0aGUgZnVuY3Rpb24gbXVzdCBiZSBuYW1lZAorYGBQeUluaXRfPG1vZHVsZW5hbWU+YGAsIHdpdGggYGA8bW9kdWxlbmFtZT5gYCByZXBsYWNlZCBieSB0aGUgbmFtZSBvZiB0aGUKK21vZHVsZS4gV2hlbiB1c2luZyA6cmVmOmBtdWx0aS1waGFzZS1pbml0aWFsaXphdGlvbmAsIG5vbi1BU0NJSSBtb2R1bGUgbmFtZXMKK2FyZSBhbGxvd2VkLiBJbiB0aGlzIGNhc2UsIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBuYW1lIGlzCitgYFB5SW5pdFVfPG1vZHVsZW5hbWU+YGAsIHdpdGggYGA8bW9kdWxlbmFtZT5gYCBlbmNvZGVkIHVzaW5nIFB5dGhvbidzCisqcHVueWNvZGUqIGVuY29kaW5nIHdpdGggaHlwaGVucyByZXBsYWNlZCBieSB1bmRlcnNjb3Jlcy4gSW4gUHl0aG9uOjoKKworICAgIGRlZiBpbml0ZnVuY19uYW1lKG5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWZmaXggPSBiJ18nICsgbmFtZS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIHN1ZmZpeCA9IGInVV8nICsgbmFtZS5lbmNvZGUoJ3B1bnljb2RlJykucmVwbGFjZShiJy0nLCBiJ18nKQorICAgICAgICByZXR1cm4gYidQeUluaXQnICsgc3VmZml4CisKK0l0IGlzIHBvc3NpYmxlIHRvIGV4cG9ydCBtdWx0aXBsZSBtb2R1bGVzIGZyb20gYSBzaW5nbGUgc2hhcmVkIGxpYnJhcnkgYnkKK2RlZmluaW5nIG11bHRpcGxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4gSG93ZXZlciwgaW1wb3J0aW5nIHRoZW0gcmVxdWlyZXMKK3VzaW5nIHN5bWJvbGljIGxpbmtzIG9yIGEgY3VzdG9tIGltcG9ydGVyLCBiZWNhdXNlIGJ5IGRlZmF1bHQgb25seSB0aGUKK2Z1bmN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpbGVuYW1lIGlzIGZvdW5kLgorU2VlIHRoZSAqIk11bHRpcGxlIG1vZHVsZXMgaW4gb25lIGxpYnJhcnkiKiBzZWN0aW9uIGluIDpwZXA6YDQ4OWAgZm9yIGRldGFpbHMuCisKKworLi4gaGlnaGxpZ2h0bGFuZzo6IGMKKwogQnVpbGRpbmcgQyBhbmQgQysrIEV4dGVuc2lvbnMgd2l0aCBkaXN0dXRpbHMKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBzZWN0aW9uYXV0aG9yOjogTWFydGluIHYuIEzDtndpcyA8bWFydGluQHYubG9ld2lzLmRlPgogCi0KLVN0YXJ0aW5nIGluIFB5dGhvbiAxLjQsIFB5dGhvbiBwcm92aWRlcywgb24gVW5peCwgYSBzcGVjaWFsIG1ha2UgZmlsZSBmb3IKLWJ1aWxkaW5nIG1ha2UgZmlsZXMgZm9yIGJ1aWxkaW5nIGR5bmFtaWNhbGx5LWxpbmtlZCBleHRlbnNpb25zIGFuZCBjdXN0b20KLWludGVycHJldGVycy4gIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuMCwgdGhpcyBtZWNoYW5pc20gKGtub3duIGFzIHJlbGF0ZWQgdG8KLU1ha2VmaWxlLnByZS5pbiwgYW5kIFNldHVwIGZpbGVzKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBCdWlsZGluZyBjdXN0b20KLWludGVycHJldGVycyB3YXMgcmFyZWx5IHVzZWQsIGFuZCBleHRlbnNpb24gbW9kdWxlcyBjYW4gYmUgYnVpbHQgdXNpbmcKLWRpc3R1dGlscy4KLQotQnVpbGRpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSB1c2luZyBkaXN0dXRpbHMgcmVxdWlyZXMgdGhhdCBkaXN0dXRpbHMgaXMKLWluc3RhbGxlZCBvbiB0aGUgYnVpbGQgbWFjaGluZSwgd2hpY2ggaXMgaW5jbHVkZWQgaW4gUHl0aG9uIDIueCBhbmQgYXZhaWxhYmxlCi1zZXBhcmF0ZWx5IGZvciBQeXRob24gMS41LiBTaW5jZSBkaXN0dXRpbHMgYWxzbyBzdXBwb3J0cyBjcmVhdGlvbiBvZiBiaW5hcnkKLXBhY2thZ2VzLCB1c2VycyBkb24ndCBuZWNlc3NhcmlseSBuZWVkIGEgY29tcGlsZXIgYW5kIGRpc3R1dGlscyB0byBpbnN0YWxsIHRoZQotZXh0ZW5zaW9uLgorRXh0ZW5zaW9uIG1vZHVsZXMgY2FuIGJlIGJ1aWx0IHVzaW5nIGRpc3R1dGlscywgIHdoaWNoIGlzIGluY2x1ZGVkIGluIFB5dGhvbi4KK1NpbmNlIGRpc3R1dGlscyBhbHNvIHN1cHBvcnRzIGNyZWF0aW9uIG9mIGJpbmFyeSBwYWNrYWdlcywgdXNlcnMgZG9uJ3QKK25lY2Vzc2FyaWx5IG5lZWQgYSBjb21waWxlciBhbmQgZGlzdHV0aWxzIHRvIGluc3RhbGwgdGhlIGV4dGVuc2lvbi4KIAogQSBkaXN0dXRpbHMgcGFja2FnZSBjb250YWlucyBhIGRyaXZlciBzY3JpcHQsIDpmaWxlOmBzZXR1cC5weWAuIFRoaXMgaXMgYSBwbGFpbgotUHl0aG9uIGZpbGUsIHdoaWNoLCBpbiB0aGUgbW9zdCBzaW1wbGUgY2FzZSwgY291bGQgbG9vayBsaWtlIHRoaXM6OgorUHl0aG9uIGZpbGUsIHdoaWNoLCBpbiB0aGUgbW9zdCBzaW1wbGUgY2FzZSwgY291bGQgbG9vayBsaWtlIHRoaXM6CisKKy4uIGNvZGUtYmxvY2s6OiBweXRob24zCiAKICAgIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwLCBFeHRlbnNpb24KIApAQCAtNTAsMjEgKzgzLDI0IEBACiBmdW5jdGlvbi4gVGhpcyB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBrZXl3b3JkIGFyZ3VtZW50cywgb2Ygd2hpY2ggdGhlCiBleGFtcGxlIGFib3ZlIHVzZXMgb25seSBhIHN1YnNldC4gU3BlY2lmaWNhbGx5LCB0aGUgZXhhbXBsZSBzcGVjaWZpZXMKIG1ldGEtaW5mb3JtYXRpb24gdG8gYnVpbGQgcGFja2FnZXMsIGFuZCBpdCBzcGVjaWZpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZQotcGFja2FnZS4gIE5vcm1hbGx5LCBhIHBhY2thZ2Ugd2lsbCBjb250YWluIG9mIGFkZGl0aW9uIG1vZHVsZXMsIGxpa2UgUHl0aG9uCitwYWNrYWdlLiAgTm9ybWFsbHksIGEgcGFja2FnZSB3aWxsIGNvbnRhaW4gYWRkaXRpb25hbCBtb2R1bGVzLCBsaWtlIFB5dGhvbgogc291cmNlIG1vZHVsZXMsIGRvY3VtZW50YXRpb24sIHN1YnBhY2thZ2VzLCBldGMuIFBsZWFzZSByZWZlciB0byB0aGUgZGlzdHV0aWxzCiBkb2N1bWVudGF0aW9uIGluIDpyZWY6YGRpc3R1dGlscy1pbmRleGAgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgZmVhdHVyZXMgb2YKIGRpc3R1dGlsczsgdGhpcyBzZWN0aW9uIGV4cGxhaW5zIGJ1aWxkaW5nIGV4dGVuc2lvbiBtb2R1bGVzIG9ubHkuCiAKIEl0IGlzIGNvbW1vbiB0byBwcmUtY29tcHV0ZSBhcmd1bWVudHMgdG8gOmZ1bmM6YHNldHVwYCwgdG8gYmV0dGVyIHN0cnVjdHVyZSB0aGUKIGRyaXZlciBzY3JpcHQuIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgYGBleHRfbW9kdWxlc2BgIGFyZ3VtZW50IHRvCi06ZnVuYzpgc2V0dXBgIGlzIGEgbGlzdCBvZiBleHRlbnNpb24gbW9kdWxlcywgZWFjaCBvZiB3aGljaCBpcyBhbiBpbnN0YW5jZSBvZgorOmZ1bmM6YH5kaXN0dXRpbHMuY29yZS5zZXR1cGAgaXMgYSBsaXN0IG9mIGV4dGVuc2lvbiBtb2R1bGVzLCBlYWNoIG9mIHdoaWNoIGlzCithbiBpbnN0YW5jZSBvZgogdGhlIDpjbGFzczpgfmRpc3R1dGlscy5leHRlbnNpb24uRXh0ZW5zaW9uYC4gSW4gdGhlIGV4YW1wbGUsIHRoZSBpbnN0YW5jZQogZGVmaW5lcyBhbiBleHRlbnNpb24gbmFtZWQgYGBkZW1vYGAgd2hpY2ggaXMgYnVpbGQgYnkgY29tcGlsaW5nIGEgc2luZ2xlIHNvdXJjZQogZmlsZSwgOmZpbGU6YGRlbW8uY2AuCiAKIEluIG1hbnkgY2FzZXMsIGJ1aWxkaW5nIGFuIGV4dGVuc2lvbiBpcyBtb3JlIGNvbXBsZXgsIHNpbmNlIGFkZGl0aW9uYWwKIHByZXByb2Nlc3NvciBkZWZpbmVzIGFuZCBsaWJyYXJpZXMgbWF5IGJlIG5lZWRlZC4gVGhpcyBpcyBkZW1vbnN0cmF0ZWQgaW4gdGhlCi1leGFtcGxlIGJlbG93LiA6OgorZXhhbXBsZSBiZWxvdy4KKworLi4gY29kZS1ibG9jazo6IHB5dGhvbjMKIAogICAgZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgogCkBAIC04OCw3ICsxMjQsOCBAQAogICAgICAgICAgIGV4dF9tb2R1bGVzID0gW21vZHVsZTFdKQogCiAKLUluIHRoaXMgZXhhbXBsZSwgOmZ1bmM6YHNldHVwYCBpcyBjYWxsZWQgd2l0aCBhZGRpdGlvbmFsIG1ldGEtaW5mb3JtYXRpb24sIHdoaWNoCitJbiB0aGlzIGV4YW1wbGUsIDpmdW5jOmB+ZGlzdHV0aWxzLmNvcmUuc2V0dXBgIGlzIGNhbGxlZCB3aXRoIGFkZGl0aW9uYWwKK21ldGEtaW5mb3JtYXRpb24sIHdoaWNoCiBpcyByZWNvbW1lbmRlZCB3aGVuIGRpc3RyaWJ1dGlvbiBwYWNrYWdlcyBoYXZlIHRvIGJlIGJ1aWx0LiBGb3IgdGhlIGV4dGVuc2lvbgogaXRzZWxmLCBpdCBzcGVjaWZpZXMgcHJlcHJvY2Vzc29yIGRlZmluZXMsIGluY2x1ZGUgZGlyZWN0b3JpZXMsIGxpYnJhcnkKIGRpcmVjdG9yaWVzLCBhbmQgbGlicmFyaWVzLiBEZXBlbmRpbmcgb24gdGhlIGNvbXBpbGVyLCBkaXN0dXRpbHMgcGFzc2VzIHRoaXMKQEAgLTExOSw4ICsxNTYsNyBAQAogICAgcHl0aG9uIHNldHVwLnB5IHNkaXN0CiAKIEluIHNvbWUgY2FzZXMsIGFkZGl0aW9uYWwgZmlsZXMgbmVlZCB0byBiZSBpbmNsdWRlZCBpbiBhIHNvdXJjZSBkaXN0cmlidXRpb247Ci10aGlzIGlzIGRvbmUgdGhyb3VnaCBhIDpmaWxlOmBNQU5JRkVTVC5pbmAgZmlsZTsgc2VlIHRoZSBkaXN0dXRpbHMgZG9jdW1lbnRhdGlvbgotZm9yIGRldGFpbHMuCit0aGlzIGlzIGRvbmUgdGhyb3VnaCBhIDpmaWxlOmBNQU5JRkVTVC5pbmAgZmlsZTsgc2VlIDpyZWY6YG1hbmlmZXN0YCBmb3IgZGV0YWlscy4KIAogSWYgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gaGFzIGJlZW4gYnVpbGQgc3VjY2Vzc2Z1bGx5LCBtYWludGFpbmVycyBjYW4gYWxzbwogY3JlYXRlIGJpbmFyeSBkaXN0cmlidXRpb25zLiBEZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCBvbmUgb2YgdGhlIGZvbGxvd2luZwpAQCAtMTI5LDQgKzE2NSwzIEBACiAgICBweXRob24gc2V0dXAucHkgYmRpc3Rfd2luaW5zdAogICAgcHl0aG9uIHNldHVwLnB5IGJkaXN0X3JwbQogICAgcHl0aG9uIHNldHVwLnB5IGJkaXN0X2R1bWIKLQpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0IGIvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CmluZGV4IDZjYjY4NmEuLjY0MDMzZGMgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKQEAgLTU4LDEyICs1OCwxOCBAQAogICAgaW50CiAgICBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICB7Ci0gICAgIFB5X1NldFByb2dyYW1OYW1lKGFyZ3ZbMF0pOyAgLyogb3B0aW9uYWwgYnV0IHJlY29tbWVuZGVkICovCi0gICAgIFB5X0luaXRpYWxpemUoKTsKLSAgICAgUHlSdW5fU2ltcGxlU3RyaW5nKCJmcm9tIHRpbWUgaW1wb3J0IHRpbWUsY3RpbWVcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwcmludCgnVG9kYXkgaXMnLCBjdGltZSh0aW1lKCkpKVxuIik7Ci0gICAgIFB5X0ZpbmFsaXplKCk7Ci0gICAgIHJldHVybiAwOworICAgICAgIHdjaGFyX3QgKnByb2dyYW0gPSBQeV9EZWNvZGVMb2NhbGUoYXJndlswXSwgTlVMTCk7CisgICAgICAgaWYgKHByb2dyYW0gPT0gTlVMTCkgeworICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhdGFsIGVycm9yOiBjYW5ub3QgZGVjb2RlIGFyZ3ZbMF1cbiIpOworICAgICAgICAgICBleGl0KDEpOworICAgICAgIH0KKyAgICAgICBQeV9TZXRQcm9ncmFtTmFtZShwcm9ncmFtKTsgIC8qIG9wdGlvbmFsIGJ1dCByZWNvbW1lbmRlZCAqLworICAgICAgIFB5X0luaXRpYWxpemUoKTsKKyAgICAgICBQeVJ1bl9TaW1wbGVTdHJpbmcoImZyb20gdGltZSBpbXBvcnQgdGltZSxjdGltZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAicHJpbnQoJ1RvZGF5IGlzJywgY3RpbWUodGltZSgpKSlcbiIpOworICAgICAgIFB5X0ZpbmFsaXplKCk7CisgICAgICAgUHlNZW1fUmF3RnJlZShwcm9ncmFtKTsKKyAgICAgICByZXR1cm4gMDsKICAgIH0KIAogVGhlIDpjOmZ1bmM6YFB5X1NldFByb2dyYW1OYW1lYCBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZQpAQCAtMTQ5LDcgKzE1NSw5IEBACiAgICAgICAgICAgIGMgPSBjICsgYgogICAgICAgIHJldHVybiBjCiAKLXRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmU6OgordGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZToKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCBjYWxsIG11bHRpcGx5IG11bHRpcGx5IDMgMgogICAgV2lsbCBjb21wdXRlIDMgdGltZXMgMgpAQCAtMTYwLDcgKzE2OCw3IEBACiBpbnRlcmVzdGluZyBwYXJ0IHdpdGggcmVzcGVjdCB0byBlbWJlZGRpbmcgUHl0aG9uIHN0YXJ0cyB3aXRoIDo6CiAKICAgIFB5X0luaXRpYWxpemUoKTsKLSAgIHBOYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoYXJndlsxXSk7CisgICBwTmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoYXJndlsxXSk7CiAgICAvKiBFcnJvciBjaGVja2luZyBvZiBwTmFtZSBsZWZ0IG91dCAqLwogICAgcE1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydChwTmFtZSk7CiAKQEAgLTI4MywxNiArMjkxLDIwIEBACiBiZSBkaXJlY3RseSB1c2VmdWwgdG8geW91OgogCiAqIGBgcHl0aG9uWC5ZLWNvbmZpZyAtLWNmbGFnc2BgIHdpbGwgZ2l2ZSB5b3UgdGhlIHJlY29tbWVuZGVkIGZsYWdzIHdoZW4KLSAgY29tcGlsaW5nOjoKKyAgY29tcGlsaW5nOgogCi0gICAkIC9vcHQvYmluL3B5dGhvbjMuNC1jb25maWcgLS1jZmxhZ3MKLSAgIC1JL29wdC9pbmNsdWRlL3B5dGhvbjMuNG0gLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtRE5ERUJVRyAtZyAtZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzCisgIC4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCisKKyAgICAgJCAvb3B0L2Jpbi9weXRob24zLjQtY29uZmlnIC0tY2ZsYWdzCisgICAgIC1JL29wdC9pbmNsdWRlL3B5dGhvbjMuNG0gLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtRE5ERUJVRyAtZyAtZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzCiAKICogYGBweXRob25YLlktY29uZmlnIC0tbGRmbGFnc2BgIHdpbGwgZ2l2ZSB5b3UgdGhlIHJlY29tbWVuZGVkIGZsYWdzIHdoZW4KLSAgbGlua2luZzo6CisgIGxpbmtpbmc6CiAKLSAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWxkZmxhZ3MKLSAgIC1ML29wdC9saWIvcHl0aG9uMy40L2NvbmZpZy0zLjRtIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24zLjRtIC1YbGlua2VyIC1leHBvcnQtZHluYW1pYworICAuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgorCisgICAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWxkZmxhZ3MKKyAgICAgLUwvb3B0L2xpYi9weXRob24zLjQvY29uZmlnLTMuNG0gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbjMuNG0gLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCiAKIC4uIG5vdGU6OgogICAgVG8gYXZvaWQgY29uZnVzaW9uIGJldHdlZW4gc2V2ZXJhbCBQeXRob24gaW5zdGFsbGF0aW9ucyAoYW5kIGVzcGVjaWFsbHkKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdAppbmRleCBiYTZiZmE3Li44MjE5NzA3IDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2V4dGVuZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9leHRlbmRpbmcucnN0CkBAIC0yNyw3ICsyNyw3IEBACiAgICBhdm9pZCB3cml0aW5nIEMgZXh0ZW5zaW9ucyBhbmQgcHJlc2VydmUgcG9ydGFiaWxpdHkgdG8gb3RoZXIgaW1wbGVtZW50YXRpb25zLgogICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgdXNlIGNhc2UgaXMgY2FsbGluZyBDIGxpYnJhcnkgZnVuY3Rpb25zIG9yIHN5c3RlbSBjYWxscywKICAgIHlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdGhlIDptb2Q6YGN0eXBlc2AgbW9kdWxlIG9yIHRoZSBgY2ZmaQotICAgPGh0dHA6Ly9jZmZpLnJlYWR0aGVkb2NzLm9yZz5gXyBsaWJyYXJ5IHJhdGhlciB0aGFuIHdyaXRpbmcgY3VzdG9tIEMgY29kZS4KKyAgIDxodHRwczovL2NmZmkucmVhZHRoZWRvY3Mub3JnPmBfIGxpYnJhcnkgcmF0aGVyIHRoYW4gd3JpdGluZyBjdXN0b20gQyBjb2RlLgogICAgVGhlc2UgbW9kdWxlcyBsZXQgeW91IHdyaXRlIFB5dGhvbiBjb2RlIHRvIGludGVyZmFjZSB3aXRoIEMgY29kZSBhbmQgYXJlIG1vcmUKICAgIHBvcnRhYmxlIGJldHdlZW4gaW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiB0aGFuIHdyaXRpbmcgYW5kIGNvbXBpbGluZyBhIEMKICAgIGV4dGVuc2lvbiBtb2R1bGUuCkBAIC0zNzUsMTEgKzM3NSwxNyBAQAogICAgaW50CiAgICBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICB7CisgICAgICAgd2NoYXJfdCAqcHJvZ3JhbSA9IFB5X0RlY29kZUxvY2FsZShhcmd2WzBdLCBOVUxMKTsKKyAgICAgICBpZiAocHJvZ3JhbSA9PSBOVUxMKSB7CisgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgZXJyb3I6IGNhbm5vdCBkZWNvZGUgYXJndlswXVxuIik7CisgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgfQorCiAgICAgICAgLyogQWRkIGEgYnVpbHQtaW4gbW9kdWxlLCBiZWZvcmUgUHlfSW5pdGlhbGl6ZSAqLwogICAgICAgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoInNwYW0iLCBQeUluaXRfc3BhbSk7CiAKICAgICAgICAvKiBQYXNzIGFyZ3ZbMF0gdG8gdGhlIFB5dGhvbiBpbnRlcnByZXRlciAqLwotICAgICAgIFB5X1NldFByb2dyYW1OYW1lKGFyZ3ZbMF0pOworICAgICAgIFB5X1NldFByb2dyYW1OYW1lKHByb2dyYW0pOwogCiAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgUHl0aG9uIGludGVycHJldGVyLiAgUmVxdWlyZWQuICovCiAgICAgICAgUHlfSW5pdGlhbGl6ZSgpOwpAQCAtMzkxLDYgKzM5NywxMCBAQAogCiAgICAgICAgLi4uCiAKKyAgICAgICBQeU1lbV9SYXdGcmVlKHByb2dyYW0pOworICAgICAgIHJldHVybiAwOworICAgfQorCiAuLiBub3RlOjoKIAogICAgUmVtb3ZpbmcgZW50cmllcyBmcm9tIGBgc3lzLm1vZHVsZXNgYCBvciBpbXBvcnRpbmcgY29tcGlsZWQgbW9kdWxlcyBpbnRvCkBAIC00MDMsNiArNDEzLDEzIEBACiBhcyA6ZmlsZTpgTW9kdWxlcy94eG1vZHVsZS5jYC4gIFRoaXMgZmlsZSBtYXkgYmUgdXNlZCBhcyBhICB0ZW1wbGF0ZSBvciBzaW1wbHkKIHJlYWQgYXMgYW4gZXhhbXBsZS4KIAorLi4gbm90ZTo6CisKKyAgIFVubGlrZSBvdXIgYGBzcGFtYGAgZXhhbXBsZSwgYGB4eG1vZHVsZWBgIHVzZXMgKm11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uKgorICAgKG5ldyBpbiBQeXRob24gMy41KSwgd2hlcmUgYSBQeU1vZHVsZURlZiBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgZnJvbQorICAgYGBQeUluaXRfc3BhbWBgLCBhbmQgY3JlYXRpb24gb2YgdGhlIG1vZHVsZSBpcyBsZWZ0IHRvIHRoZSBpbXBvcnQgbWFjaGluZXJ5LgorICAgRm9yIGRldGFpbHMgb24gbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24sIHNlZSA6UEVQOmA0ODlgLgorCiAKIC4uIF9jb21waWxhdGlvbjoKIApAQCAtNzc1LDcgKzc5Miw5IEBACiBmb3JtYXQgdW5pdCwgaXQgcmV0dXJucyB3aGF0ZXZlciBvYmplY3QgaXMgZGVzY3JpYmVkIGJ5IHRoYXQgZm9ybWF0IHVuaXQuICBUbwogZm9yY2UgaXQgdG8gcmV0dXJuIGEgdHVwbGUgb2Ygc2l6ZSAwIG9yIG9uZSwgcGFyZW50aGVzaXplIHRoZSBmb3JtYXQgc3RyaW5nLgogCi1FeGFtcGxlcyAodG8gdGhlIGxlZnQgdGhlIGNhbGwsIHRvIHRoZSByaWdodCB0aGUgcmVzdWx0aW5nIFB5dGhvbiB2YWx1ZSk6OgorRXhhbXBsZXMgKHRvIHRoZSBsZWZ0IHRoZSBjYWxsLCB0byB0aGUgcmlnaHQgdGhlIHJlc3VsdGluZyBQeXRob24gdmFsdWUpOgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICBQeV9CdWlsZFZhbHVlKCIiKSAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUKICAgIFB5X0J1aWxkVmFsdWUoImkiLCAxMjMpICAgICAgICAgICAgICAgICAgMTIzCkBAIC0xMzMxLDQgKzEzNTAsMyBAQAogCiAuLiBbI10gVGhlc2UgZ3VhcmFudGVlcyBkb24ndCBob2xkIHdoZW4geW91IHVzZSB0aGUgIm9sZCIgc3R5bGUgY2FsbGluZyBjb252ZW50aW9uIC0tLQogICAgdGhpcyBpcyBzdGlsbCBmb3VuZCBpbiBtdWNoIGV4aXN0aW5nIGNvZGUuCi0KZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvaW5kZXgucnN0IGIvRG9jL2V4dGVuZGluZy9pbmRleC5yc3QKaW5kZXggZGQ0MzkyNi4uOWVlYzhjMiAxMDA2NDQKLS0tIGEvRG9jL2V4dGVuZGluZy9pbmRleC5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9pbmRleC5yc3QKQEAgLTMyLDcgKzMyLDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEJpbmFyeSBFeHRlbnNpb25zIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9leHRlbnNpb25zLmh0bWw+YF8KKyAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEJpbmFyeSBFeHRlbnNpb25zIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9leHRlbnNpb25zLz5gXwogICAgICAgVGhlIFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSBub3Qgb25seSBjb3ZlcnMgc2V2ZXJhbCBhdmFpbGFibGUKICAgICAgIHRvb2xzIHRoYXQgc2ltcGxpZnkgdGhlIGNyZWF0aW9uIG9mIGJpbmFyeSBleHRlbnNpb25zLCBidXQgYWxzbwogICAgICAgZGlzY3Vzc2VzIHRoZSB2YXJpb3VzIHJlYXNvbnMgd2h5IGNyZWF0aW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgbWF5IGJlCmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdCBiL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CmluZGV4IDA4ODQ0MzAuLmE2OWYxMTQgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0CkBAIC01MiwxMSArNTIsMTUgQEAKICAgIH0gbm9kZHlfTm9kZHlPYmplY3Q7CiAKIFRoaXMgaXMgd2hhdCBhIE5vZGR5IG9iamVjdCB3aWxsIGNvbnRhaW4tLS1pbiB0aGlzIGNhc2UsIG5vdGhpbmcgbW9yZSB0aGFuIHdoYXQKLWV2ZXJ5IFB5dGhvbiBvYmplY3QgY29udGFpbnMtLS1hIHJlZmNvdW50IGFuZCBhIHBvaW50ZXIgdG8gYSB0eXBlIG9iamVjdC4KLVRoZXNlIGFyZSB0aGUgZmllbGRzIHRoZSBgYFB5T2JqZWN0X0hFQURgYCBtYWNybyBicmluZ3MgaW4uICBUaGUgcmVhc29uIGZvciB0aGUKLW1hY3JvIGlzIHRvIHN0YW5kYXJkaXplIHRoZSBsYXlvdXQgYW5kIHRvIGVuYWJsZSBzcGVjaWFsIGRlYnVnZ2luZyBmaWVsZHMgaW4KLWRlYnVnIGJ1aWxkcy4gIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBzZW1pY29sb24gYWZ0ZXIgdGhlIGBgUHlPYmplY3RfSEVBRGBgCi1tYWNybzsgb25lIGlzIGluY2x1ZGVkIGluIHRoZSBtYWNybyBkZWZpbml0aW9uLiAgQmUgd2FyeSBvZiBhZGRpbmcgb25lIGJ5CitldmVyeSBQeXRob24gb2JqZWN0IGNvbnRhaW5zLS0tYSBmaWVsZCBjYWxsZWQgYGBvYl9iYXNlYGAgb2YgdHlwZQorOmM6dHlwZTpgUHlPYmplY3RgLiAgOmM6dHlwZTpgUHlPYmplY3RgIGluIHR1cm4sIGNvbnRhaW5zIGFuIGBgb2JfcmVmY250YGAKK2ZpZWxkIGFuZCBhIHBvaW50ZXIgdG8gYSB0eXBlIG9iamVjdC4gIFRoZXNlIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgbWFjcm9zCis6YzptYWNybzpgUHlfUkVGQ05UYCBhbmQgOmM6bWFjcm86YFB5X1RZUEVgIHJlc3BlY3RpdmVseS4gIFRoZXNlIGFyZSB0aGUgZmllbGRzCit0aGUgOmM6bWFjcm86YFB5T2JqZWN0X0hFQURgIG1hY3JvIGJyaW5ncyBpbi4gIFRoZSByZWFzb24gZm9yIHRoZSBtYWNybyBpcyB0bworc3RhbmRhcmRpemUgdGhlIGxheW91dCBhbmQgdG8gZW5hYmxlIHNwZWNpYWwgZGVidWdnaW5nIGZpZWxkcyBpbiBkZWJ1ZyBidWlsZHMuCisKK05vdGUgdGhhdCB0aGVyZSBpcyBubyBzZW1pY29sb24gYWZ0ZXIgdGhlIDpjOm1hY3JvOmBQeU9iamVjdF9IRUFEYCBtYWNybzsKK29uZSBpcyBpbmNsdWRlZCBpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gIEJlIHdhcnkgb2YgYWRkaW5nIG9uZSBieQogYWNjaWRlbnQ7IGl0J3MgZWFzeSB0byBkbyBmcm9tIGhhYml0LCBhbmQgeW91ciBjb21waWxlciBtaWdodCBub3QgY29tcGxhaW4sCiBidXQgc29tZW9uZSBlbHNlJ3MgcHJvYmFibHkgd2lsbCEgIChPbiBXaW5kb3dzLCBNU1ZDIGlzIGtub3duIHRvIGNhbGwgdGhpcyBhbgogZXJyb3IgYW5kIHJlZnVzZSB0byBjb21waWxlIHRoZSBjb2RlLikKQEAgLTgwLDcgKzg0LDcgQEAKICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCi0gICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19hc3luYyAqLwogICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwpAQCAtMjA5LDcgKzIxMyw5IEBACiAgICBzZXR1cChuYW1lPSJub2RkeSIsIHZlcnNpb249IjEuMCIsCiAgICAgICAgICBleHRfbW9kdWxlcz1bRXh0ZW5zaW9uKCJub2RkeSIsIFsibm9kZHkuYyJdKV0pCiAKLWluIGEgZmlsZSBjYWxsZWQgOmZpbGU6YHNldHVwLnB5YDsgdGhlbiB0eXBpbmcgOjoKK2luIGEgZmlsZSBjYWxsZWQgOmZpbGU6YHNldHVwLnB5YDsgdGhlbiB0eXBpbmcKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCBweXRob24gc2V0dXAucHkgYnVpbGQKIApAQCAtMTUxMyw0ICsxNTE5LDMgQEAKIC4uIFsjXSBFdmVuIGluIHRoZSB0aGlyZCB2ZXJzaW9uLCB3ZSBhcmVuJ3QgZ3VhcmFudGVlZCB0byBhdm9pZCBjeWNsZXMuICBJbnN0YW5jZXMgb2YKICAgIHN0cmluZyBzdWJjbGFzc2VzIGFyZSBhbGxvd2VkIGFuZCBzdHJpbmcgc3ViY2xhc3NlcyBjb3VsZCBhbGxvdyBjeWNsZXMgZXZlbiBpZgogICAgbm9ybWFsIHN0cmluZ3MgZG9uJ3QuCi0KZGlmZiAtLWdpdCBhL0RvYy9mYXEvZGVzaWduLnJzdCBiL0RvYy9mYXEvZGVzaWduLnJzdAppbmRleCA5ZmRmOGNiLi4xYjZjZDdlIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2Rlc2lnbi5yc3QKKysrIGIvRG9jL2ZhcS9kZXNpZ24ucnN0CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCiAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgIGJyZWFrCi0gICAgICAgLi4uICMgZG8gc29tZXRoaW5nIHdpdGggbGluZQorICAgICAgIC4uLiAgIyBkbyBzb21ldGhpbmcgd2l0aCBsaW5lCiAKIFRoZSByZWFzb24gZm9yIG5vdCBhbGxvd2luZyBhc3NpZ25tZW50IGluIFB5dGhvbiBleHByZXNzaW9ucyBpcyBhIGNvbW1vbiwKIGhhcmQtdG8tZmluZCBidWcgaW4gdGhvc2Ugb3RoZXIgbGFuZ3VhZ2VzLCBjYXVzZWQgYnkgdGhpcyBjb25zdHJ1Y3Q6CkBAIC0xOTAsNyArMTkwLDcgQEAKIAogICAgbGluZSA9IGYucmVhZGxpbmUoKQogICAgd2hpbGUgbGluZToKLSAgICAgICAuLi4gIyBkbyBzb21ldGhpbmcgd2l0aCBsaW5lLi4uCisgICAgICAgLi4uICAjIGRvIHNvbWV0aGluZyB3aXRoIGxpbmUuLi4KICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCiAKIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0IGlmIHlvdSBjaGFuZ2UgeW91ciBtaW5kIGFib3V0IGV4YWN0bHkgaG93IHlvdSBnZXQKQEAgLTIwMyw3ICsyMDMsNyBAQAogPGZpbGUgb2JqZWN0PmAgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIHNvIHlvdSBjYW4gd3JpdGUgc2ltcGx5OjoKIAogICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAuLi4gIyBkbyBzb21ldGhpbmcgd2l0aCBsaW5lLi4uCisgICAgICAgLi4uICAjIGRvIHNvbWV0aGluZyB3aXRoIGxpbmUuLi4KIAogCiAKQEAgLTM2OCw5ICszNjgsOSBAQAogCiBQcmFjdGljYWwgYW5zd2VyOgogCi1gQ3l0aG9uIDxodHRwOi8vY3l0aG9uLm9yZy8+YF8gYW5kIGBQeXJleCA8aHR0cDovL3d3dy5jb3NjLmNhbnRlcmJ1cnkuYWMubnovZ3JlZy5ld2luZy9weXRob24vUHlyZXgvPmBfCitgQ3l0aG9uIDxodHRwOi8vY3l0aG9uLm9yZy8+YF8gYW5kIGBQeXJleCA8aHR0cHM6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L2dyZWcuZXdpbmcvcHl0aG9uL1B5cmV4Lz5gXwogY29tcGlsZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgUHl0aG9uIHdpdGggb3B0aW9uYWwgYW5ub3RhdGlvbnMgaW50byBDCi1leHRlbnNpb25zLiAgYFdlYXZlIDxodHRwOi8vZG9jcy5zY2lweS5vcmcvZG9jL3NjaXB5LWRldi9yZWZlcmVuY2UvdHV0b3JpYWwvd2VhdmUuaHRtbD5gXyBtYWtlcyBpdCBlYXN5IHRvCitleHRlbnNpb25zLiAgYFdlYXZlIDxodHRwczovL3NjaXB5LmdpdGh1Yi5pby9kZXZkb2NzL3R1dG9yaWFsL3dlYXZlLmh0bWw+YF8gbWFrZXMgaXQgZWFzeSB0bwogaW50ZXJtaW5nbGUgUHl0aG9uIGFuZCBDIGNvZGUgaW4gdmFyaW91cyB3YXlzIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlLgogYE51aXRrYSA8aHR0cDovL3d3dy5udWl0a2EubmV0Lz5gXyBpcyBhbiB1cC1hbmQtY29taW5nIGNvbXBpbGVyIG9mIFB5dGhvbgogaW50byBDKysgY29kZSwgYWltaW5nIHRvIHN1cHBvcnQgdGhlIGZ1bGwgUHl0aG9uIGxhbmd1YWdlLgpAQCAtNTc3LDggKzU3NywxMCBAQAogICAgY2xhc3MgTGlzdFdyYXBwZXI6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRoZV9saXN0KToKICAgICAgICAgICAgc2VsZi50aGVfbGlzdCA9IHRoZV9saXN0CisKICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgcmV0dXJuIHNlbGYudGhlX2xpc3QgPT0gb3RoZXIudGhlX2xpc3QKKwogICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgICAgbCA9IHNlbGYudGhlX2xpc3QKICAgICAgICAgICAgcmVzdWx0ID0gOTg3NjcgLSBsZW4obCkqNTU1CkBAIC02MTksNyArNjIxLDcgQEAKIGRpY3Rpb25hcnkgaW4gc29ydGVkIG9yZGVyOjoKIAogICAgZm9yIGtleSBpbiBzb3J0ZWQobXlkaWN0KToKLSAgICAgICAuLi4gIyBkbyB3aGF0ZXZlciB3aXRoIG15ZGljdFtrZXldLi4uCisgICAgICAgLi4uICAjIGRvIHdoYXRldmVyIHdpdGggbXlkaWN0W2tleV0uLi4KIAogCiBIb3cgZG8geW91IHNwZWNpZnkgYW5kIGVuZm9yY2UgYW4gaW50ZXJmYWNlIHNwZWMgaW4gUHl0aG9uPwpAQCAtNjc1LDExICs2NzcsMTEgQEAKICAgIGNsYXNzIGxhYmVsKEV4Y2VwdGlvbik6IHBhc3MgICMgZGVjbGFyZSBhIGxhYmVsCiAKICAgIHRyeToKLSAgICAgICAgLi4uCi0gICAgICAgIGlmIGNvbmRpdGlvbjogcmFpc2UgbGFiZWwoKSAgIyBnb3RvIGxhYmVsCi0gICAgICAgIC4uLgorICAgICAgIC4uLgorICAgICAgIGlmIGNvbmRpdGlvbjogcmFpc2UgbGFiZWwoKSAgIyBnb3RvIGxhYmVsCisgICAgICAgLi4uCiAgICBleGNlcHQgbGFiZWw6ICAjIHdoZXJlIHRvIGdvdG8KLSAgICAgICAgcGFzcworICAgICAgIHBhc3MKICAgIC4uLgogCiBUaGlzIGRvZXNuJ3QgYWxsb3cgeW91IHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIGEgbG9vcCwgYnV0IHRoYXQncyB1c3VhbGx5CmRpZmYgLS1naXQgYS9Eb2MvZmFxL2V4dGVuZGluZy5yc3QgYi9Eb2MvZmFxL2V4dGVuZGluZy5yc3QKaW5kZXggN2JiNGRjMi4uM2VhZmRmMSAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9leHRlbmRpbmcucnN0CisrKyBiL0RvYy9mYXEvZXh0ZW5kaW5nLnJzdApAQCAtNDIsNyArNDIsNyBAQAogLi4gWFhYIG1ha2Ugc3VyZSB0aGVzZSBhbGwgd29yawogCiBgQ3l0aG9uIDxodHRwOi8vY3l0aG9uLm9yZz5gXyBhbmQgaXRzIHJlbGF0aXZlIGBQeXJleAotPGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L2dyZWcuZXdpbmcvcHl0aG9uL1B5cmV4Lz5gXyBhcmUgY29tcGlsZXJzCis8aHR0cHM6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L2dyZWcuZXdpbmcvcHl0aG9uL1B5cmV4Lz5gXyBhcmUgY29tcGlsZXJzCiB0aGF0IGFjY2VwdCBhIHNsaWdodGx5IG1vZGlmaWVkIGZvcm0gb2YgUHl0aG9uIGFuZCBnZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZwogQyBjb2RlLiAgQ3l0aG9uIGFuZCBQeXJleCBtYWtlIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGFuIGV4dGVuc2lvbiB3aXRob3V0IGhhdmluZwogdG8gbGVhcm4gUHl0aG9uJ3MgQyBBUEkuCkBAIC01MCwxMCArNTAsMTAgQEAKIElmIHlvdSBuZWVkIHRvIGludGVyZmFjZSB0byBzb21lIEMgb3IgQysrIGxpYnJhcnkgZm9yIHdoaWNoIG5vIFB5dGhvbiBleHRlbnNpb24KIGN1cnJlbnRseSBleGlzdHMsIHlvdSBjYW4gdHJ5IHdyYXBwaW5nIHRoZSBsaWJyYXJ5J3MgZGF0YSB0eXBlcyBhbmQgZnVuY3Rpb25zCiB3aXRoIGEgdG9vbCBzdWNoIGFzIGBTV0lHIDxodHRwOi8vd3d3LnN3aWcub3JnPmBfLiAgYFNJUAotPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3NpcC9pbnRybz5gX18sIGBDWFgKKzxodHRwczovL3JpdmVyYmFua2NvbXB1dGluZy5jb20vc29mdHdhcmUvc2lwL2ludHJvPmBfXywgYENYWAogPGh0dHA6Ly9jeHguc291cmNlZm9yZ2UubmV0Lz5gXyBgQm9vc3QKIDxodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3B5dGhvbi9kb2MvaW5kZXguaHRtbD5gXywgb3IgYFdlYXZlCi08aHR0cDovL2RvY3Muc2NpcHkub3JnL2RvYy9zY2lweS1kZXYvcmVmZXJlbmNlL3R1dG9yaWFsL3dlYXZlLmh0bWw+YF8gYXJlIGFsc28KKzxodHRwczovL3NjaXB5LmdpdGh1Yi5pby9kZXZkb2NzL3R1dG9yaWFsL3dlYXZlLmh0bWw+YF8gYXJlIGFsc28KIGFsdGVybmF0aXZlcyBmb3Igd3JhcHBpbmcgQysrIGxpYnJhcmllcy4KIAogCkBAIC0xNDYsNyArMTQ2LDkgQEAKIGp1c3QgYWxsb3cgdGhlIHN0YW5kYXJkIHRyYWNlYmFjayBtZWNoYW5pc20gdG8gd29yay4gVGhlbiwgdGhlIG91dHB1dCB3aWxsIGdvCiB3aGVyZXZlciB5b3VyIGBgd3JpdGUoKWBgIG1ldGhvZCBzZW5kcyBpdC4KIAotVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlIHRoZSA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBjbGFzczo6CitUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byB1c2UgdGhlIDpjbGFzczpgaW8uU3RyaW5nSU9gIGNsYXNzOgorCisuLiBjb2RlLWJsb2NrOjogcHljb24KIAogICAgPj4+IGltcG9ydCBpbywgc3lzCiAgICA+Pj4gc3lzLnN0ZG91dCA9IGlvLlN0cmluZ0lPKCkKQEAgLTE1Niw3ICsxNTgsOSBAQAogICAgZm9vCiAgICBoZWxsbyB3b3JsZCEKIAotQSBjdXN0b20gb2JqZWN0IHRvIGRvIHRoZSBzYW1lIHdvdWxkIGxvb2sgbGlrZSB0aGlzOjoKK0EgY3VzdG9tIG9iamVjdCB0byBkbyB0aGUgc2FtZSB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworLi4gY29kZS1ibG9jazo6IHB5Y29uCiAKICAgID4+PiBpbXBvcnQgaW8sIHN5cwogICAgPj4+IGNsYXNzIFN0ZG91dENhdGNoZXIoaW8uVGV4dElPQmFzZSk6CkBAIC0yMjIsMTEgKzIyNiwxNSBAQAogV2hlbiB1c2luZyBHREIgd2l0aCBkeW5hbWljYWxseSBsb2FkZWQgZXh0ZW5zaW9ucywgeW91IGNhbid0IHNldCBhIGJyZWFrcG9pbnQgaW4KIHlvdXIgZXh0ZW5zaW9uIHVudGlsIHlvdXIgZXh0ZW5zaW9uIGlzIGxvYWRlZC4KIAotSW4geW91ciBgYC5nZGJpbml0YGAgZmlsZSAob3IgaW50ZXJhY3RpdmVseSksIGFkZCB0aGUgY29tbWFuZDo6CitJbiB5b3VyIGBgLmdkYmluaXRgYCBmaWxlIChvciBpbnRlcmFjdGl2ZWx5KSwgYWRkIHRoZSBjb21tYW5kOgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICBiciBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUKIAotVGhlbiwgd2hlbiB5b3UgcnVuIEdEQjo6CitUaGVuLCB3aGVuIHlvdSBydW4gR0RCOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAkIGdkYiAvbG9jYWwvYmluL3B5dGhvbgogICAgZ2RiKSBydW4gbXlzY3JpcHQucHkKQEAgLTI0NywyMCArMjU1LDYgQEAKIEZvciBEZWJpYW4sIHJ1biBgYGFwdC1nZXQgaW5zdGFsbCBweXRob24tZGV2YGAuCiAKIAotV2hhdCBkb2VzICJTeXN0ZW1FcnJvcjogX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uOiBtb2R1bGUgeW91cm1vZHVsZSBub3QgbG9hZGVkIiBtZWFuPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIG1lYW5zIHRoYXQgeW91IGhhdmUgY3JlYXRlZCBhbiBleHRlbnNpb24gbW9kdWxlIG5hbWVkICJ5b3VybW9kdWxlIiwgYnV0Ci15b3VyIG1vZHVsZSBpbml0IGZ1bmN0aW9uIGRvZXMgbm90IGluaXRpYWxpemUgd2l0aCB0aGF0IG5hbWUuCi0KLUV2ZXJ5IG1vZHVsZSBpbml0IGZ1bmN0aW9uIHdpbGwgaGF2ZSBhIGxpbmUgc2ltaWxhciB0bzo6Ci0KLSAgIG1vZHVsZSA9IFB5X0luaXRNb2R1bGUoInlvdXJtb2R1bGUiLCB5b3VybW9kdWxlX2Z1bmN0aW9ucyk7Ci0KLUlmIHRoZSBzdHJpbmcgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaXMgbm90IHRoZSBzYW1lIG5hbWUgYXMgeW91ciBleHRlbnNpb24KLW1vZHVsZSwgdGhlIDpleGM6YFN5c3RlbUVycm9yYCBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQuCi0KLQogSG93IGRvIEkgdGVsbCAiaW5jb21wbGV0ZSBpbnB1dCIgZnJvbSAiaW52YWxpZCBpbnB1dCI/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9nZW5lcmFsLnJzdCBiL0RvYy9mYXEvZ2VuZXJhbC5yc3QKaW5kZXggMjIyMWYxNC4uM2Y5NjcwMCAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9nZW5lcmFsLnJzdAorKysgYi9Eb2MvZmFxL2dlbmVyYWwucnN0CkBAIC0xNDYsMTAgKzE0Niw5IEBACiAyLjBjTiwgYW5kICp0aG9zZSogcHJlY2VkZSAyLjAuCiAKIFlvdSBtYXkgYWxzbyBmaW5kIHZlcnNpb24gbnVtYmVycyB3aXRoIGEgIisiIHN1ZmZpeCwgZS5nLiAiMi4yKyIuICBUaGVzZSBhcmUKLXVucmVsZWFzZWQgdmVyc2lvbnMsIGJ1aWx0IGRpcmVjdGx5IGZyb20gdGhlIFN1YnZlcnNpb24gdHJ1bmsuICBJbiBwcmFjdGljZSwKLWFmdGVyIGEgZmluYWwgbWlub3IgcmVsZWFzZSBpcyBtYWRlLCB0aGUgU3VidmVyc2lvbiB0cnVuayBpcyBpbmNyZW1lbnRlZCB0byB0aGUKLW5leHQgbWlub3IgdmVyc2lvbiwgd2hpY2ggYmVjb21lcyB0aGUgImEwIiB2ZXJzaW9uLAotZS5nLiAiMi40YTAiLgordW5yZWxlYXNlZCB2ZXJzaW9ucywgYnVpbHQgZGlyZWN0bHkgZnJvbSB0aGUgQ1B5dGhvbiBkZXZlbG9wbWVudCByZXBvc2l0b3J5LiAgSW4KK3ByYWN0aWNlLCBhZnRlciBhIGZpbmFsIG1pbm9yIHJlbGVhc2UgaXMgbWFkZSwgdGhlIHZlcnNpb24gaXMgaW5jcmVtZW50ZWQgdG8gdGhlCituZXh0IG1pbm9yIHZlcnNpb24sIHdoaWNoIGJlY29tZXMgdGhlICJhMCIgdmVyc2lvbiwgZS5nLiAiMi40YTAiLgogCiBTZWUgYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgOmRhdGE6YHN5cy52ZXJzaW9uYCwgOmRhdGE6YHN5cy5oZXh2ZXJzaW9uYCwgYW5kCiA6ZGF0YTpgc3lzLnZlcnNpb25faW5mb2AuCkBAIC0xNTksNyArMTU4LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBsYXRlc3QgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24gaXMgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIHB5dGhvbi5vcmcsIGF0Ci1odHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLy4gIFRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgc291cmNlcyBjYW4gYmUgb2J0YWluZWQKK2h0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLy4gIFRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgc291cmNlcyBjYW4gYmUgb2J0YWluZWQKIHZpYSBhbm9ueW1vdXMgTWVyY3VyaWFsIGFjY2VzcyBhdCBodHRwczovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi4KIAogVGhlIHNvdXJjZSBkaXN0cmlidXRpb24gaXMgYSBnemlwcGVkIHRhciBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbXBsZXRlIEMgc291cmNlLApAQCAtMjE4LDcgKzIxNyw3IEBACiBIb3cgZG8gSSBnZXQgYSBiZXRhIHRlc3QgdmVyc2lvbiBvZiBQeXRob24/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUFscGhhIGFuZCBiZXRhIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgZnJvbSBodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLy4gIEFsbAorQWxwaGEgYW5kIGJldGEgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBmcm9tIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLy4gIEFsbAogcmVsZWFzZXMgYXJlIGFubm91bmNlZCBvbiB0aGUgY29tcC5sYW5nLnB5dGhvbiBhbmQgY29tcC5sYW5nLnB5dGhvbi5hbm5vdW5jZQogbmV3c2dyb3VwcyBhbmQgb24gdGhlIFB5dGhvbiBob21lIHBhZ2UgYXQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy87IGFuIFJTUyBmZWVkIG9mCiBuZXdzIGlzIGF2YWlsYWJsZS4KQEAgLTI3MSw5ICsyNzAsOSBAQAogCiBUaGUgUHl0aG9uIHByb2plY3QncyBpbmZyYXN0cnVjdHVyZSBpcyBsb2NhdGVkIGFsbCBvdmVyIHRoZSB3b3JsZC4KIGB3d3cucHl0aG9uLm9yZyA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZz5gXyBpcyBncmFjaW91c2x5IGhvc3RlZCBieSBgUmFja3NwYWNlCi08aHR0cDovL3d3dy5yYWNrc3BhY2UuY29tPmBfLCB3aXRoIENETiBjYWNoaW5nIHByb3ZpZGVkIGJ5IGBGYXN0bHkKKzxodHRwczovL3d3dy5yYWNrc3BhY2UuY29tPmBfLCB3aXRoIENETiBjYWNoaW5nIHByb3ZpZGVkIGJ5IGBGYXN0bHkKIDxodHRwczovL3d3dy5mYXN0bHkuY29tPmBfLiAgYFVwZnJvbnQgU3lzdGVtcwotPGh0dHA6Ly93d3cudXBmcm9udHN5c3RlbXMuY28uemE+YF8gaG9zdHMgYGJ1Z3MucHl0aG9uLm9yZworPGh0dHA6Ly93d3cudXBmcm9udHN5c3RlbXMuY28uemEvPmBfIGhvc3RzIGBidWdzLnB5dGhvbi5vcmcKIDxodHRwczovL2J1Z3MucHl0aG9uLm9yZz5gXy4gIE1hbnkgb3RoZXIgUHl0aG9uIHNlcnZpY2VzIGxpa2UgYHRoZSBXaWtpCiA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmc+YF8gYXJlIGhvc3RlZCBieSBgT3JlZ29uIFN0YXRlCiBVbml2ZXJzaXR5IE9wZW4gU291cmNlIExhYiA8aHR0cHM6Ly9vc3Vvc2wub3JnPmBfLgpAQCAtMjg0LDcgKzI4Myw3IEBACiAKIFdoZW4gaGUgYmVnYW4gaW1wbGVtZW50aW5nIFB5dGhvbiwgR3VpZG8gdmFuIFJvc3N1bSB3YXMgYWxzbyByZWFkaW5nIHRoZQogcHVibGlzaGVkIHNjcmlwdHMgZnJvbSBgIk1vbnR5IFB5dGhvbidzIEZseWluZyBDaXJjdXMiCi08aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb250eV9QeXRob24+YF9fLCBhIEJCQyBjb21lZHkgc2VyaWVzIGZyb20gdGhlIDE5NzBzLiAgVmFuIFJvc3N1bQorPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01vbnR5X1B5dGhvbj5gX18sIGEgQkJDIGNvbWVkeSBzZXJpZXMgZnJvbSB0aGUgMTk3MHMuICBWYW4gUm9zc3VtCiB0aG91Z2h0IGhlIG5lZWRlZCBhIG5hbWUgdGhhdCB3YXMgc2hvcnQsIHVuaXF1ZSwgYW5kIHNsaWdodGx5IG15c3RlcmlvdXMsIHNvIGhlCiBkZWNpZGVkIHRvIGNhbGwgdGhlIGxhbmd1YWdlIFB5dGhvbi4KIApAQCAtMzEzLDcgKzMxMiw3IEBACiByZWxlYXNlcy4KIAogVGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZXMgY2FuIGFsd2F5cyBiZSBmb3VuZCBvbiB0aGUgYFB5dGhvbiBkb3dubG9hZCBwYWdlCi08aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC8+YF8uICBUaGVyZSBhcmUgdHdvIHJlY29tbWVuZGVkIHByb2R1Y3Rpb24tcmVhZHkKKzxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2Fkcy8+YF8uICBUaGVyZSBhcmUgdHdvIHJlY29tbWVuZGVkIHByb2R1Y3Rpb24tcmVhZHkKIHZlcnNpb25zIGF0IHRoaXMgcG9pbnQgaW4gdGltZSwgYmVjYXVzZSBhdCB0aGUgbW9tZW50IHRoZXJlIGFyZSB0d28gYnJhbmNoZXMgb2YKIHN0YWJsZSByZWxlYXNlczogMi54IGFuZCAzLnguICBQeXRob24gMy54IG1heSBiZSBsZXNzIHVzZWZ1bCB0aGFuIDIueCwgc2luY2UKIGN1cnJlbnRseSB0aGVyZSBpcyBtb3JlIHRoaXJkIHBhcnR5IHNvZnR3YXJlIGF2YWlsYWJsZSBmb3IgUHl0aG9uIDIgdGhhbiBmb3IKQEAgLTM0NSw3ICszNDQsNyBAQAogSGlnaC1wcm9maWxlIFB5dGhvbiBwcm9qZWN0cyBpbmNsdWRlIGB0aGUgTWFpbG1hbiBtYWlsaW5nIGxpc3QgbWFuYWdlcgogPGh0dHA6Ly93d3cubGlzdC5vcmc+YF8gYW5kIGB0aGUgWm9wZSBhcHBsaWNhdGlvbiBzZXJ2ZXIKIDxodHRwOi8vd3d3LnpvcGUub3JnPmBfLiAgU2V2ZXJhbCBMaW51eCBkaXN0cmlidXRpb25zLCBtb3N0IG5vdGFibHkgYFJlZCBIYXQKLTxodHRwOi8vd3d3LnJlZGhhdC5jb20+YF8sIGhhdmUgd3JpdHRlbiBwYXJ0IG9yIGFsbCBvZiB0aGVpciBpbnN0YWxsZXIgYW5kCis8aHR0cHM6Ly93d3cucmVkaGF0LmNvbT5gXywgaGF2ZSB3cml0dGVuIHBhcnQgb3IgYWxsIG9mIHRoZWlyIGluc3RhbGxlciBhbmQKIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiBzb2Z0d2FyZSBpbiBQeXRob24uICBDb21wYW5pZXMgdGhhdCB1c2UgUHl0aG9uIGludGVybmFsbHkKIGluY2x1ZGUgR29vZ2xlLCBZYWhvbywgYW5kIEx1Y2FzZmlsbSBMdGQuCiAKQEAgLTQzOSw3ICs0MzgsNyBAQAogICAgPj4+IEwKICAgIFsxXQogCi1XaXRoIHRoZSBpbnRlcnByZXRlciwgZG9jdW1lbnRhdGlvbiBpcyBuZXZlciBmYXIgZnJvbSB0aGUgc3R1ZGVudCBhcyBoZSdzCitXaXRoIHRoZSBpbnRlcnByZXRlciwgZG9jdW1lbnRhdGlvbiBpcyBuZXZlciBmYXIgZnJvbSB0aGUgc3R1ZGVudCBhcyB0aGV5IGFyZQogcHJvZ3JhbW1pbmcuCiAKIFRoZXJlIGFyZSBhbHNvIGdvb2QgSURFcyBmb3IgUHl0aG9uLiAgSURMRSBpcyBhIGNyb3NzLXBsYXRmb3JtIElERSBmb3IgUHl0aG9uCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2d1aS5yc3QgYi9Eb2MvZmFxL2d1aS5yc3QKaW5kZXggNTEyMmRlMS4uOThhMjhjMyAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9ndWkucnN0CisrKyBiL0RvYy9mYXEvZ3VpLnJzdApAQCAtMjksMTUgKzI5LDE1IEBACiBTdGFuZGFyZCBidWlsZHMgb2YgUHl0aG9uIGluY2x1ZGUgYW4gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZSB0byB0aGUgVGNsL1RrCiB3aWRnZXQgc2V0LCBjYWxsZWQgOnJlZjpgdGtpbnRlciA8VGtpbnRlcj5gLiAgVGhpcyBpcyBwcm9iYWJseSB0aGUgZWFzaWVzdCB0bwogaW5zdGFsbCAoc2luY2UgaXQgY29tZXMgaW5jbHVkZWQgd2l0aCBtb3N0Ci1gYmluYXJ5IGRpc3RyaWJ1dGlvbnMgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvPmBfIG9mIFB5dGhvbikgYW5kIHVzZS4KK2BiaW5hcnkgZGlzdHJpYnV0aW9ucyA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvPmBfIG9mIFB5dGhvbikgYW5kIHVzZS4KIEZvciBtb3JlIGluZm8gYWJvdXQgVGssIGluY2x1ZGluZyBwb2ludGVycyB0byB0aGUgc291cmNlLCBzZWUgdGhlCi1gVGNsL1RrIGhvbWUgcGFnZSA8aHR0cDovL3d3dy50Y2wudGs+YF8uICBUY2wvVGsgaXMgZnVsbHkgcG9ydGFibGUgdG8gdGhlCitgVGNsL1RrIGhvbWUgcGFnZSA8aHR0cHM6Ly93d3cudGNsLnRrPmBfLiAgVGNsL1RrIGlzIGZ1bGx5IHBvcnRhYmxlIHRvIHRoZQogTWFjIE9TIFgsIFdpbmRvd3MsIGFuZCBVbml4IHBsYXRmb3Jtcy4KIAogd3hXaWRnZXRzCiAtLS0tLS0tLS0KIAotd3hXaWRnZXRzIChodHRwOi8vd3d3Lnd4d2lkZ2V0cy5vcmcpIGlzIGEgZnJlZSwgcG9ydGFibGUgR1VJIGNsYXNzCit3eFdpZGdldHMgKGh0dHBzOi8vd3d3Lnd4d2lkZ2V0cy5vcmcpIGlzIGEgZnJlZSwgcG9ydGFibGUgR1VJIGNsYXNzCiBsaWJyYXJ5IHdyaXR0ZW4gaW4gQysrIHRoYXQgcHJvdmlkZXMgYSBuYXRpdmUgbG9vayBhbmQgZmVlbCBvbiBhCiBudW1iZXIgb2YgcGxhdGZvcm1zLCB3aXRoIFdpbmRvd3MsIE1hYyBPUyBYLCBHVEssIFgxMSwgYWxsIGxpc3RlZCBhcwogY3VycmVudCBzdGFibGUgdGFyZ2V0cy4gIExhbmd1YWdlIGJpbmRpbmdzIGFyZSBhdmFpbGFibGUgZm9yIGEgbnVtYmVyCkBAIC01OCwyMSArNTgsMjEgQEAKIC0tLQogCiBUaGVyZSBhcmUgYmluZGluZ3MgYXZhaWxhYmxlIGZvciB0aGUgUXQgdG9vbGtpdCAodXNpbmcgZWl0aGVyIGBQeVF0Ci08aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlxdC9pbnRybz5gXyBvciBgUHlTaWRlCi08aHR0cDovL3d3dy5weXNpZGUub3JnLz5gXykgYW5kIGZvciBLREUgKGBQeUtERSA8aHR0cHM6Ly90ZWNoYmFzZS5rZGUub3JnL0RldmVsb3BtZW50L0xhbmd1YWdlcy9QeXRob24+YF9fKS4KKzxodHRwczovL3JpdmVyYmFua2NvbXB1dGluZy5jb20vc29mdHdhcmUvcHlxdC9pbnRybz5gXyBvciBgUHlTaWRlCis8aHR0cHM6Ly93aWtpLnF0LmlvL1B5U2lkZT5gXykgYW5kIGZvciBLREUgKGBQeUtERTQgPGh0dHBzOi8vdGVjaGJhc2Uua2RlLm9yZy9MYW5ndWFnZXMvUHl0aG9uL1VzaW5nX1B5S0RFXzQ+YF9fKS4KIFB5UXQgaXMgY3VycmVudGx5IG1vcmUgbWF0dXJlIHRoYW4gUHlTaWRlLCBidXQgeW91IG11c3QgYnV5IGEgUHlRdCBsaWNlbnNlIGZyb20KLWBSaXZlcmJhbmsgQ29tcHV0aW5nIDxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51ay9zb2Z0d2FyZS9weXF0L2xpY2Vuc2U+YF8KK2BSaXZlcmJhbmsgQ29tcHV0aW5nIDxodHRwczovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY29tL2NvbW1lcmNpYWwvbGljZW5zZS1mYXE+YF8KIGlmIHlvdSB3YW50IHRvIHdyaXRlIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucy4gIFB5U2lkZSBpcyBmcmVlIGZvciBhbGwgYXBwbGljYXRpb25zLgogCiBRdCA0LjUgdXB3YXJkcyBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTEdQTCBsaWNlbnNlOyBhbHNvLCBjb21tZXJjaWFsIGxpY2Vuc2VzCi1hcmUgYXZhaWxhYmxlIGZyb20gYFRoZSBRdCBDb21wYW55IDxodHRwOi8vd3d3LnF0LmlvL2xpY2Vuc2luZy8+YF8uCithcmUgYXZhaWxhYmxlIGZyb20gYFRoZSBRdCBDb21wYW55IDxodHRwczovL3d3dy5xdC5pby9saWNlbnNpbmcvPmBfLgogCiBHdGsrCiAtLS0tCiAKLVRoZSBgR09iamVjdCBpbnRyb3NwZWN0aW9uIGJpbmRpbmdzIDxodHRwczovL2xpdmUuZ25vbWUub3JnL1B5R09iamVjdD5gXworVGhlIGBHT2JqZWN0IGludHJvc3BlY3Rpb24gYmluZGluZ3MgPGh0dHBzOi8vd2lraS5nbm9tZS5vcmcvUHJvamVjdHMvUHlHT2JqZWN0PmBfCiBmb3IgUHl0aG9uIGFsbG93IHlvdSB0byB3cml0ZSBHVEsrIDMgYXBwbGljYXRpb25zLiAgVGhlcmUgaXMgYWxzbyBhCi1gUHl0aG9uIEdUSysgMyBUdXRvcmlhbCA8aHR0cDovL3B5dGhvbi1ndGstMy10dXRvcmlhbC5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0Lz5gXy4KK2BQeXRob24gR1RLKyAzIFR1dG9yaWFsIDxodHRwczovL3B5dGhvbi1ndGstMy10dXRvcmlhbC5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0Lz5gXy4KIAogVGhlIG9sZGVyIFB5R3RrIGJpbmRpbmdzIGZvciB0aGUgYEd0aysgMiB0b29sa2l0IDxodHRwOi8vd3d3Lmd0ay5vcmc+YF8gaGF2ZQogYmVlbiBpbXBsZW1lbnRlZCBieSBKYW1lcyBIZW5zdHJpZGdlOyBzZWUgPGh0dHA6Ly93d3cucHlndGsub3JnPi4KZGlmZiAtLWdpdCBhL0RvYy9mYXEvbGlicmFyeS5yc3QgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CmluZGV4IDA2NDcyOGYuLmI1ZmRmYTQgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvbGlicmFyeS5yc3QKKysrIGIvRG9jL2ZhcS9saWJyYXJ5LnJzdApAQCAtMjU3LDcgKzI1Nyw4IEBACiAgICBpbXBvcnQgdGhyZWFkaW5nLCB0aW1lCiAKICAgIGRlZiB0aHJlYWRfdGFzayhuYW1lLCBuKToKLSAgICAgICBmb3IgaSBpbiByYW5nZShuKTogcHJpbnQobmFtZSwgaSkKKyAgICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAgICAgICAgcHJpbnQobmFtZSwgaSkKIAogICAgZm9yIGkgaW4gcmFuZ2UoMTApOgogICAgICAgIFQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD10aHJlYWRfdGFzaywgYXJncz0oc3RyKGkpLCBpKSkKQEAgLTI3Myw3ICsyNzQsOCBAQAogCiAgICBkZWYgdGhyZWFkX3Rhc2sobmFtZSwgbik6CiAgICAgICAgdGltZS5zbGVlcCgwLjAwMSkgICMgPC0tLS0tLS0tLS0tLS0tLS0tLS0tIQotICAgICAgIGZvciBpIGluIHJhbmdlKG4pOiBwcmludChuYW1lLCBpKQorICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICBwcmludChuYW1lLCBpKQogCiAgICBmb3IgaSBpbiByYW5nZSgxMCk6CiAgICAgICAgVCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXRocmVhZF90YXNrLCBhcmdzPShzdHIoaSksIGkpKQpAQCAtNTAyLDggKzUwNCw4IEBACiAgICBpbXBvcnQgc3RydWN0CiAKICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgIHMgPSBmLnJlYWQoOCkKLSAgICAgIHgsIHksIHogPSBzdHJ1Y3QudW5wYWNrKCI+aGhsIiwgcykKKyAgICAgICBzID0gZi5yZWFkKDgpCisgICAgICAgeCwgeSwgeiA9IHN0cnVjdC51bnBhY2soIj5oaGwiLCBzKQogCiBUaGUgJz4nIGluIHRoZSBmb3JtYXQgc3RyaW5nIGZvcmNlcyBiaWctZW5kaWFuIGRhdGE7IHRoZSBsZXR0ZXIgJ2gnIHJlYWRzIG9uZQogInNob3J0IGludGVnZXIiICgyIGJ5dGVzKSwgYW5kICdsJyByZWFkcyBvbmUgImxvbmcgaW50ZWdlciIgKDQgYnl0ZXMpIGZyb20gdGhlCkBAIC02MTksNyArNjIxLDcgQEAKIAogRm9yIFVuaXgsIHNlZSBhIFVzZW5ldCBwb3N0IGJ5IE1pdGNoIENoYXBtYW46CiAKLSAgIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/c2VsbT0zNEEwNDQzMC5DRjlAb2hpb2VlLmNvbQorICAgaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/c2VsbT0zNEEwNDQzMC5DRjlAb2hpb2VlLmNvbQogCiAKIFdoeSBkb2Vzbid0IGNsb3Npbmcgc3lzLnN0ZG91dCAoc3RkaW4sIHN0ZGVycikgcmVhbGx5IGNsb3NlIGl0PwpAQCAtNjgxLDEwICs2ODMsMTAgQEAKIAogICAgaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiAKLSAgICMjIyBidWlsZCB0aGUgcXVlcnkgc3RyaW5nCisgICAjIGJ1aWxkIHRoZSBxdWVyeSBzdHJpbmcKICAgIHFzID0gIkZpcnN0PUpvc2VwaGluZSZNST1RJkxhc3Q9UHVibGljIgogCi0gICAjIyMgY29ubmVjdCBhbmQgc2VuZCB0aGUgc2VydmVyIGEgcGF0aAorICAgIyBjb25uZWN0IGFuZCBzZW5kIHRoZSBzZXJ2ZXIgYSBwYXRoCiAgICByZXEgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCdodHRwOi8vd3d3LnNvbWUtc2VydmVyLm91dC10aGVyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9jZ2ktYmluL3NvbWUtY2dpLXNjcmlwdCcsIGRhdGE9cXMpCiAgICB3aXRoIHJlcToKQEAgLTc0MCw4ICs3NDIsOSBAQAogYGAvdXNyL3NiaW4vc2VuZG1haWxgYC4gIFRoZSBzZW5kbWFpbCBtYW51YWwgcGFnZSB3aWxsIGhlbHAgeW91IG91dC4gIEhlcmUncwogc29tZSBzYW1wbGUgY29kZTo6CiAKLSAgIFNFTkRNQUlMID0gIi91c3Ivc2Jpbi9zZW5kbWFpbCIgICMgc2VuZG1haWwgbG9jYXRpb24KICAgIGltcG9ydCBvcworCisgICBTRU5ETUFJTCA9ICIvdXNyL3NiaW4vc2VuZG1haWwiICAjIHNlbmRtYWlsIGxvY2F0aW9uCiAgICBwID0gb3MucG9wZW4oIiVzIC10IC1pIiAlIFNFTkRNQUlMLCAidyIpCiAgICBwLndyaXRlKCJUbzogcmVjZWl2ZXJAZXhhbXBsZS5jb21cbiIpCiAgICBwLndyaXRlKCJTdWJqZWN0OiB0ZXN0XG4iKQpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9wcm9ncmFtbWluZy5yc3QgYi9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdAppbmRleCA5NGI0MjhkLi42OTQ3NTNlIDEwMDY0NAotLS0gYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdAorKysgYi9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdApAQCAtMjgsOSArMjgsOSBAQAogUHl0aG9uV2luIGlzIGEgUHl0aG9uIElERSB0aGF0IGluY2x1ZGVzIGEgR1VJIGRlYnVnZ2VyIGJhc2VkIG9uIHBkYi4gIFRoZQogUHl0aG9ud2luIGRlYnVnZ2VyIGNvbG9ycyBicmVha3BvaW50cyBhbmQgaGFzIHF1aXRlIGEgZmV3IGNvb2wgZmVhdHVyZXMgc3VjaCBhcwogZGVidWdnaW5nIG5vbi1QeXRob253aW4gcHJvZ3JhbXMuICBQeXRob253aW4gaXMgYXZhaWxhYmxlIGFzIHBhcnQgb2YgdGhlIGBQeXRob24KLWZvciBXaW5kb3dzIEV4dGVuc2lvbnMgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHl3aW4zMi8+YF9fIHByb2plY3QgYW5kCitmb3IgV2luZG93cyBFeHRlbnNpb25zIDxodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9weXdpbjMyLz5gX18gcHJvamVjdCBhbmQKIGFzIGEgcGFydCBvZiB0aGUgQWN0aXZlUHl0aG9uIGRpc3RyaWJ1dGlvbiAoc2VlCi1odHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVweXRob25cICkuCitodHRwczovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcHl0aG9uXCApLgogCiBgQm9hIENvbnN0cnVjdG9yIDxodHRwOi8vYm9hLWNvbnN0cnVjdG9yLnNvdXJjZWZvcmdlLm5ldC8+YF8gaXMgYW4gSURFIGFuZCBHVUkKIGJ1aWxkZXIgdGhhdCB1c2VzIHd4V2lkZ2V0cy4gIEl0IG9mZmVycyB2aXN1YWwgZnJhbWUgY3JlYXRpb24gYW5kIG1hbmlwdWxhdGlvbiwKQEAgLTQ0LDEzICs0NCwxMyBAQAogUHlkYiBpcyBhIHZlcnNpb24gb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBkZWJ1Z2dlciBwZGIsIG1vZGlmaWVkIGZvciB1c2Ugd2l0aCBEREQKIChEYXRhIERpc3BsYXkgRGVidWdnZXIpLCBhIHBvcHVsYXIgZ3JhcGhpY2FsIGRlYnVnZ2VyIGZyb250IGVuZC4gIFB5ZGIgY2FuIGJlCiBmb3VuZCBhdCBodHRwOi8vYmFzaGRiLnNvdXJjZWZvcmdlLm5ldC9weWRiLyBhbmQgREREIGNhbiBiZSBmb3VuZCBhdAotaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2RkZC4KK2h0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZGRkLgogCiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgY29tbWVyY2lhbCBQeXRob24gSURFcyB0aGF0IGluY2x1ZGUgZ3JhcGhpY2FsIGRlYnVnZ2Vycy4KIFRoZXkgaW5jbHVkZToKIAotKiBXaW5nIElERSAoaHR0cDovL3dpbmd3YXJlLmNvbS8pCi0qIEtvbW9kbyBJREUgKGh0dHA6Ly9rb21vZG9pZGUuY29tLykKKyogV2luZyBJREUgKGh0dHBzOi8vd2luZ3dhcmUuY29tLykKKyogS29tb2RvIElERSAoaHR0cHM6Ly9rb21vZG9pZGUuY29tLykKICogUHlDaGFybSAoaHR0cHM6Ly93d3cuamV0YnJhaW5zLmNvbS9weWNoYXJtLykKIAogCkBAIC02MywxMyArNjMsMTMgQEAKIHdhcm5zIGFib3V0IGNvZGUgY29tcGxleGl0eSBhbmQgc3R5bGUuICBZb3UgY2FuIGdldCBQeUNoZWNrZXIgZnJvbQogaHR0cDovL3B5Y2hlY2tlci5zb3VyY2Vmb3JnZS5uZXQvLgogCi1gUHlsaW50IDxodHRwOi8vd3d3LmxvZ2lsYWIub3JnL3Byb2plY3RzL3B5bGludD5gXyBpcyBhbm90aGVyIHRvb2wgdGhhdCBjaGVja3MKK2BQeWxpbnQgPGh0dHBzOi8vd3d3LnB5bGludC5vcmcvPmBfIGlzIGFub3RoZXIgdG9vbCB0aGF0IGNoZWNrcwogaWYgYSBtb2R1bGUgc2F0aXNmaWVzIGEgY29kaW5nIHN0YW5kYXJkLCBhbmQgYWxzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byB3cml0ZQogcGx1Zy1pbnMgdG8gYWRkIGEgY3VzdG9tIGZlYXR1cmUuICBJbiBhZGRpdGlvbiB0byB0aGUgYnVnIGNoZWNraW5nIHRoYXQKIFB5Q2hlY2tlciBwZXJmb3JtcywgUHlsaW50IG9mZmVycyBzb21lIGFkZGl0aW9uYWwgZmVhdHVyZXMgc3VjaCBhcyBjaGVja2luZyBsaW5lCiBsZW5ndGgsIHdoZXRoZXIgdmFyaWFibGUgbmFtZXMgYXJlIHdlbGwtZm9ybWVkIGFjY29yZGluZyB0byB5b3VyIGNvZGluZwogc3RhbmRhcmQsIHdoZXRoZXIgZGVjbGFyZWQgaW50ZXJmYWNlcyBhcmUgZnVsbHkgaW1wbGVtZW50ZWQsIGFuZCBtb3JlLgotaHR0cDovL2RvY3MucHlsaW50Lm9yZy8gcHJvdmlkZXMgYSBmdWxsIGxpc3Qgb2YgUHlsaW50J3MgZmVhdHVyZXMuCitodHRwczovL2RvY3MucHlsaW50Lm9yZy8gcHJvdmlkZXMgYSBmdWxsIGxpc3Qgb2YgUHlsaW50J3MgZmVhdHVyZXMuCiAKIAogSG93IGNhbiBJIGNyZWF0ZSBhIHN0YW5kLWFsb25lIGJpbmFyeSBmcm9tIGEgUHl0aG9uIHNjcmlwdD8KQEAgLTIwNyw3ICsyMDcsNyBAQAogCiAgICA+Pj4gc3F1YXJlcyA9IFtdCiAgICA+Pj4gZm9yIHggaW4gcmFuZ2UoNSk6Ci0gICAuLi4gICAgc3F1YXJlcy5hcHBlbmQobGFtYmRhOiB4KioyKQorICAgLi4uICAgICBzcXVhcmVzLmFwcGVuZChsYW1iZGE6IHgqKjIpCiAKIFRoaXMgZ2l2ZXMgeW91IGEgbGlzdCB0aGF0IGNvbnRhaW5zIDUgbGFtYmRhcyB0aGF0IGNhbGN1bGF0ZSBgYHgqKjJgYC4gIFlvdQogbWlnaHQgZXhwZWN0IHRoYXQsIHdoZW4gY2FsbGVkLCB0aGV5IHdvdWxkIHJldHVybiwgcmVzcGVjdGl2ZWx5LCBgYDBgYCwgYGAxYGAsCkBAIC0yMzQsNyArMjM0LDcgQEAKIAogICAgPj4+IHNxdWFyZXMgPSBbXQogICAgPj4+IGZvciB4IGluIHJhbmdlKDUpOgotICAgLi4uICAgIHNxdWFyZXMuYXBwZW5kKGxhbWJkYSBuPXg6IG4qKjIpCisgICAuLi4gICAgIHNxdWFyZXMuYXBwZW5kKGxhbWJkYSBuPXg6IG4qKjIpCiAKIEhlcmUsIGBgbj14YGAgY3JlYXRlcyBhIG5ldyB2YXJpYWJsZSBgYG5gYCBsb2NhbCB0byB0aGUgbGFtYmRhIGFuZCBjb21wdXRlZAogd2hlbiB0aGUgbGFtYmRhIGlzIGRlZmluZWQgc28gdGhhdCBpdCBoYXMgdGhlIHNhbWUgdmFsdWUgdGhhdCBgYHhgYCBoYWQgYXQKQEAgLTUzOSw3ICs1MzksNyBAQAogICAgICAgICAgIGFyZ3NbJ2EnXSA9ICduZXctdmFsdWUnICAgICAjIGFyZ3MgaXMgYSBtdXRhYmxlIGRpY3Rpb25hcnkKICAgICAgICAgICBhcmdzWydiJ10gPSBhcmdzWydiJ10gKyAxICAgIyBjaGFuZ2UgaXQgaW4tcGxhY2UKIAotICAgICAgYXJncyA9IHsnYSc6JyBvbGQtdmFsdWUnLCAnYic6IDk5fQorICAgICAgYXJncyA9IHsnYSc6ICdvbGQtdmFsdWUnLCAnYic6IDk5fQogICAgICAgZnVuYzMoYXJncykKICAgICAgIHByaW50KGFyZ3NbJ2EnXSwgYXJnc1snYiddKQogCkBAIC02NTUsMTYgKzY1NSwxNSBAQAogYGBkZWZgYCBhbmQgYGBjbGFzc2BgIHN0YXRlbWVudHMsIGJ1dCBpbiB0aGF0IGNhc2UgdGhlIHZhbHVlIGlzIGEKIGNhbGxhYmxlLiBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNvZGU6OgogCi0gICBjbGFzcyBBOgotICAgICAgIHBhc3MKLQotICAgQiA9IEEKLQotICAgYSA9IEIoKQotICAgYiA9IGEKLSAgIHByaW50KGIpCisgICA+Pj4gY2xhc3MgQToKKyAgIC4uLiAgICAgcGFzcworICAgLi4uCisgICA+Pj4gQiA9IEEKKyAgID4+PiBhID0gQigpCisgICA+Pj4gYiA9IGEKKyAgID4+PiBwcmludChiKQogICAgPF9fbWFpbl9fLkEgb2JqZWN0IGF0IDB4MTZEMDdDQz4KLSAgIHByaW50KGEpCisgICA+Pj4gcHJpbnQoYSkKICAgIDxfX21haW5fXy5BIG9iamVjdCBhdCAweDE2RDA3Q0M+CiAKIEFyZ3VhYmx5IHRoZSBjbGFzcyBoYXMgYSBuYW1lOiBldmVuIHRob3VnaCBpdCBpcyBib3VuZCB0byB0d28gbmFtZXMgYW5kIGludm9rZWQKQEAgLTgzOSw3ICs4MzgsNyBAQAogVG8gY29udmVydCwgZS5nLiwgdGhlIG51bWJlciAxNDQgdG8gdGhlIHN0cmluZyAnMTQ0JywgdXNlIHRoZSBidWlsdC1pbiB0eXBlCiBjb25zdHJ1Y3RvciA6ZnVuYzpgc3RyYC4gIElmIHlvdSB3YW50IGEgaGV4YWRlY2ltYWwgb3Igb2N0YWwgcmVwcmVzZW50YXRpb24sIHVzZQogdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyA6ZnVuYzpgaGV4YCBvciA6ZnVuYzpgb2N0YC4gIEZvciBmYW5jeSBmb3JtYXR0aW5nLCBzZWUKLXRoZSA6cmVmOmBzdHJpbmctZm9ybWF0dGluZ2Agc2VjdGlvbiwgZS5nLiBgYCJ7OjA0ZH0iLmZvcm1hdCgxNDQpYGAgeWllbGRzCit0aGUgOnJlZjpgZm9ybWF0c3RyaW5nc2Agc2VjdGlvbiwgZS5nLiBgYCJ7OjA0ZH0iLmZvcm1hdCgxNDQpYGAgeWllbGRzCiBgYCcwMTQ0J2BgIGFuZCBgYCJ7Oi4zZn0iLmZvcm1hdCgxLjAvMy4wKWBgIHlpZWxkcyBgYCcwLjMzMydgYC4KIAogCkBAIC0xMDk5LDcgKzEwOTgsNyBAQAogVXNlIHRoZSA6ZnVuYzpgcmV2ZXJzZWRgIGJ1aWx0LWluIGZ1bmN0aW9uLCB3aGljaCBpcyBuZXcgaW4gUHl0aG9uIDIuNDo6CiAKICAgIGZvciB4IGluIHJldmVyc2VkKHNlcXVlbmNlKToKLSAgICAgICAuLi4gIyBkbyBzb21ldGhpbmcgd2l0aCB4Li4uCisgICAgICAgLi4uICAjIGRvIHNvbWV0aGluZyB3aXRoIHggLi4uCiAKIFRoaXMgd29uJ3QgdG91Y2ggeW91ciBvcmlnaW5hbCBzZXF1ZW5jZSwgYnV0IGJ1aWxkIGEgbmV3IGNvcHkgd2l0aCByZXZlcnNlZAogb3JkZXIgdG8gaXRlcmF0ZSBvdmVyLgpAQCAtMTEwNyw3ICsxMTA2LDcgQEAKIFdpdGggUHl0aG9uIDIuMywgeW91IGNhbiB1c2UgYW4gZXh0ZW5kZWQgc2xpY2Ugc3ludGF4OjoKIAogICAgZm9yIHggaW4gc2VxdWVuY2VbOjotMV06Ci0gICAgICAgLi4uICMgZG8gc29tZXRoaW5nIHdpdGggeC4uLgorICAgICAgIC4uLiAgIyBkbyBzb21ldGhpbmcgd2l0aCB4IC4uLgogCiAKIEhvdyBkbyB5b3UgcmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSBhIGxpc3Q/CkBAIC0xMTE1LDcgKzExMTQsNyBAQAogCiBTZWUgdGhlIFB5dGhvbiBDb29rYm9vayBmb3IgYSBsb25nIGRpc2N1c3Npb24gb2YgbWFueSB3YXlzIHRvIGRvIHRoaXM6CiAKLSAgIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUyNTYwLworICAgaHR0cHM6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUyNTYwLwogCiBJZiB5b3UgZG9uJ3QgbWluZCByZW9yZGVyaW5nIHRoZSBsaXN0LCBzb3J0IGl0IGFuZCB0aGVuIHNjYW4gZnJvbSB0aGUgZW5kIG9mIHRoZQogbGlzdCwgZGVsZXRpbmcgZHVwbGljYXRlcyBhcyB5b3UgZ286OgpAQCAtMTE3MiwxNiArMTE3MSwyOCBAQAogCiAgICA+Pj4gQSA9IFtbTm9uZV0gKiAyXSAqIDMKIAotVGhpcyBsb29rcyBjb3JyZWN0IGlmIHlvdSBwcmludCBpdDo6CitUaGlzIGxvb2tzIGNvcnJlY3QgaWYgeW91IHByaW50IGl0OgorCisuLiB0ZXN0c2V0dXA6OgorCisgICBBID0gW1tOb25lXSAqIDJdICogMworCisuLiBkb2N0ZXN0OjoKIAogICAgPj4+IEEKICAgIFtbTm9uZSwgTm9uZV0sIFtOb25lLCBOb25lXSwgW05vbmUsIE5vbmVdXQogCiBCdXQgd2hlbiB5b3UgYXNzaWduIGEgdmFsdWUsIGl0IHNob3dzIHVwIGluIG11bHRpcGxlIHBsYWNlczoKIAotICA+Pj4gQVswXVswXSA9IDUKLSAgPj4+IEEKLSAgW1s1LCBOb25lXSwgWzUsIE5vbmVdLCBbNSwgTm9uZV1dCisuLiB0ZXN0c2V0dXA6OgorCisgICBBID0gW1tOb25lXSAqIDJdICogMworCisuLiBkb2N0ZXN0OjoKKworICAgPj4+IEFbMF1bMF0gPSA1CisgICA+Pj4gQQorICAgW1s1LCBOb25lXSwgWzUsIE5vbmVdLCBbNSwgTm9uZV1dCiAKIFRoZSByZWFzb24gaXMgdGhhdCByZXBsaWNhdGluZyBhIGxpc3Qgd2l0aCBgYCpgYCBkb2Vzbid0IGNyZWF0ZSBjb3BpZXMsIGl0IG9ubHkKIGNyZWF0ZXMgcmVmZXJlbmNlcyB0byB0aGUgZXhpc3Rpbmcgb2JqZWN0cy4gIFRoZSBgYCozYGAgY3JlYXRlcyBhIGxpc3QKQEAgLTEyMDEsNyArMTIxMiw3IEBACiAgICB3LCBoID0gMiwgMwogICAgQSA9IFtbTm9uZV0gKiB3IGZvciBpIGluIHJhbmdlKGgpXQogCi1PciwgeW91IGNhbiB1c2UgYW4gZXh0ZW5zaW9uIHRoYXQgcHJvdmlkZXMgYSBtYXRyaXggZGF0YXR5cGU7IGBOdW1lcmljIFB5dGhvbgorT3IsIHlvdSBjYW4gdXNlIGFuIGV4dGVuc2lvbiB0aGF0IHByb3ZpZGVzIGEgbWF0cml4IGRhdGF0eXBlOyBgTnVtUHkKIDxodHRwOi8vd3d3Lm51bXB5Lm9yZy8+YF8gaXMgdGhlIGJlc3Qga25vd24uCiAKIApAQCAtMTMxMyw0MCArMTMyNCwxMSBAQAogCiBUaGUgdGVjaG5pcXVlLCBhdHRyaWJ1dGVkIHRvIFJhbmRhbCBTY2h3YXJ0eiBvZiB0aGUgUGVybCBjb21tdW5pdHksIHNvcnRzIHRoZQogZWxlbWVudHMgb2YgYSBsaXN0IGJ5IGEgbWV0cmljIHdoaWNoIG1hcHMgZWFjaCBlbGVtZW50IHRvIGl0cyAic29ydCB2YWx1ZSIuIEluCi1QeXRob24sIGp1c3QgdXNlIHRoZSBgYGtleWBgIGFyZ3VtZW50IGZvciB0aGUgYGBzb3J0KClgYCBtZXRob2Q6OgorUHl0aG9uLCB1c2UgdGhlIGBga2V5YGAgYXJndW1lbnQgZm9yIHRoZSA6bWV0aDpgbGlzdC5zb3J0YCBtZXRob2Q6OgogCiAgICBJc29ydGVkID0gTFs6XQogICAgSXNvcnRlZC5zb3J0KGtleT1sYW1iZGEgczogaW50KHNbMTA6MTVdKSkKIAotVGhlIGBga2V5YGAgYXJndW1lbnQgaXMgbmV3IGluIFB5dGhvbiAyLjQsIGZvciBvbGRlciB2ZXJzaW9ucyB0aGlzIGtpbmQgb2YKLXNvcnRpbmcgaXMgcXVpdGUgc2ltcGxlIHRvIGRvIHdpdGggbGlzdCBjb21wcmVoZW5zaW9ucy4gIFRvIHNvcnQgYSBsaXN0IG9mCi1zdHJpbmdzIGJ5IHRoZWlyIHVwcGVyY2FzZSB2YWx1ZXM6OgotCi0gIHRtcDEgPSBbKHgudXBwZXIoKSwgeCkgZm9yIHggaW4gTF0gICMgU2Nod2FydHppYW4gdHJhbnNmb3JtCi0gIHRtcDEuc29ydCgpCi0gIFVzb3J0ZWQgPSBbeFsxXSBmb3IgeCBpbiB0bXAxXQotCi1UbyBzb3J0IGJ5IHRoZSBpbnRlZ2VyIHZhbHVlIG9mIGEgc3ViZmllbGQgZXh0ZW5kaW5nIGZyb20gcG9zaXRpb25zIDEwLTE1IGluCi1lYWNoIHN0cmluZzo6Ci0KLSAgdG1wMiA9IFsoaW50KHNbMTA6MTVdKSwgcykgZm9yIHMgaW4gTF0gICMgU2Nod2FydHppYW4gdHJhbnNmb3JtCi0gIHRtcDIuc29ydCgpCi0gIElzb3J0ZWQgPSBbeFsxXSBmb3IgeCBpbiB0bXAyXQotCi1Gb3IgdmVyc2lvbnMgcHJpb3IgdG8gMy4wLCBJc29ydGVkIG1heSBhbHNvIGJlIGNvbXB1dGVkIGJ5IDo6Ci0KLSAgIGRlZiBpbnRmaWVsZChzKToKLSAgICAgICByZXR1cm4gaW50KHNbMTA6MTVdKQotCi0gICBkZWYgSWNtcChzMSwgczIpOgotICAgICAgIHJldHVybiBjbXAoaW50ZmllbGQoczEpLCBpbnRmaWVsZChzMikpCi0KLSAgIElzb3J0ZWQgPSBMWzpdCi0gICBJc29ydGVkLnNvcnQoSWNtcCkKLQotYnV0IHNpbmNlIHRoaXMgbWV0aG9kIGNhbGxzIGBgaW50ZmllbGQoKWBgIG1hbnkgdGltZXMgZm9yIGVhY2ggZWxlbWVudCBvZiBMLCBpdAotaXMgc2xvd2VyIHRoYW4gdGhlIFNjaHdhcnR6aWFuIFRyYW5zZm9ybS4KLQogCiBIb3cgY2FuIEkgc29ydCBvbmUgbGlzdCBieSB2YWx1ZXMgZnJvbSBhbm90aGVyIGxpc3Q/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDA1LDcgKzEzODcsNyBAQAogZGVmaW5pdGlvbjo6CiAKICAgIGNsYXNzIEM6Ci0gICAgICAgZGVmIG1ldGggKHNlbGYsIGFyZyk6CisgICAgICAgZGVmIG1ldGgoc2VsZiwgYXJnKToKICAgICAgICAgICAgcmV0dXJuIGFyZyAqIDIgKyBzZWxmLmF0dHJpYnV0ZQogCiAKQEAgLTE0MzgsOSArMTQyMCw5IEBACiAKICAgIGRlZiBzZWFyY2gob2JqKToKICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgTWFpbGJveCk6Ci0gICAgICAgICAgICMgLi4uIGNvZGUgdG8gc2VhcmNoIGEgbWFpbGJveAorICAgICAgICAgICAuLi4gICMgY29kZSB0byBzZWFyY2ggYSBtYWlsYm94CiAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgRG9jdW1lbnQpOgotICAgICAgICAgICAjIC4uLiBjb2RlIHRvIHNlYXJjaCBhIGRvY3VtZW50CisgICAgICAgICAgIC4uLiAgIyBjb2RlIHRvIHNlYXJjaCBhIGRvY3VtZW50CiAgICAgICAgZWxpZiAuLi4KIAogQSBiZXR0ZXIgYXBwcm9hY2ggaXMgdG8gZGVmaW5lIGEgYGBzZWFyY2goKWBgIG1ldGhvZCBvbiBhbGwgdGhlIGNsYXNzZXMgYW5kIGp1c3QKQEAgLTE0NDgsMTEgKzE0MzAsMTEgQEAKIAogICAgY2xhc3MgTWFpbGJveDoKICAgICAgICBkZWYgc2VhcmNoKHNlbGYpOgotICAgICAgICAgICAjIC4uLiBjb2RlIHRvIHNlYXJjaCBhIG1haWxib3gKKyAgICAgICAgICAgLi4uICAjIGNvZGUgdG8gc2VhcmNoIGEgbWFpbGJveAogCiAgICBjbGFzcyBEb2N1bWVudDoKICAgICAgICBkZWYgc2VhcmNoKHNlbGYpOgotICAgICAgICAgICAjIC4uLiBjb2RlIHRvIHNlYXJjaCBhIGRvY3VtZW50CisgICAgICAgICAgIC4uLiAgIyBjb2RlIHRvIHNlYXJjaCBhIGRvY3VtZW50CiAKICAgIG9iai5zZWFyY2goKQogCkBAIC0xNTA5LDcgKzE0OTEsNyBAQAogVXNlIHRoZSBidWlsdC1pbiA6ZnVuYzpgc3VwZXJgIGZ1bmN0aW9uOjoKIAogICAgY2xhc3MgRGVyaXZlZChCYXNlKToKLSAgICAgICBkZWYgbWV0aCAoc2VsZik6CisgICAgICAgZGVmIG1ldGgoc2VsZik6CiAgICAgICAgICAgIHN1cGVyKERlcml2ZWQsIHNlbGYpLm1ldGgoKQogCiBGb3IgdmVyc2lvbiBwcmlvciB0byAzLjAsIHlvdSBtYXkgYmUgdXNpbmcgY2xhc3NpYyBjbGFzc2VzOiBGb3IgYSBjbGFzcwpAQCAtMTY5NCw5ICsxNjc2LDkgQEAKIG5leHQgZnJlc2hseSBjcmVhdGVkIG9iamVjdCBpcyBhbGxvY2F0ZWQgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4gbWVtb3J5LiAgVGhpcwogaXMgaWxsdXN0cmF0ZWQgYnkgdGhpcyBleGFtcGxlOgogCi0+Pj4gaWQoMTAwMCkKKz4+PiBpZCgxMDAwKSAjIGRvY3Rlc3Q6ICtTS0lQCiAxMzkwMTI3MgotPj4+IGlkKDIwMDApCis+Pj4gaWQoMjAwMCkgIyBkb2N0ZXN0OiArU0tJUAogMTM5MDEyNzIKIAogVGhlIHR3byBpZHMgYmVsb25nIHRvIGRpZmZlcmVudCBpbnRlZ2VyIG9iamVjdHMgdGhhdCBhcmUgY3JlYXRlZCBiZWZvcmUsIGFuZApAQCAtMTcwNSw5ICsxNjg3LDkgQEAKIHRvIHRoZSBvYmplY3Q6CiAKID4+PiBhID0gMTAwMDsgYiA9IDIwMDAKLT4+PiBpZChhKQorPj4+IGlkKGEpICMgZG9jdGVzdDogK1NLSVAKIDEzOTAxMjcyCi0+Pj4gaWQoYikKKz4+PiBpZChiKSAjIGRvY3Rlc3Q6ICtTS0lQCiAxMzg5MTI5NgogCiAKZGlmZiAtLWdpdCBhL0RvYy9mYXEvd2luZG93cy5yc3QgYi9Eb2MvZmFxL3dpbmRvd3MucnN0CmluZGV4IDZkYjY2MzcuLmQ3MjUzNDMgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvd2luZG93cy5yc3QKKysrIGIvRG9jL2ZhcS93aW5kb3dzLnJzdApAQCAtMzQwLDUgKzM0MCw1IEBACiAKIFNpbXBseSByZW5hbWUgdGhlIGRvd25sb2FkZWQgZmlsZSB0byBoYXZlIHRoZSAuVEdaIGV4dGVuc2lvbiwgYW5kIFdpblppcCB3aWxsIGJlCiBhYmxlIHRvIGhhbmRsZSBpdC4gIChJZiB5b3VyIGNvcHkgb2YgV2luWmlwIGRvZXNuJ3QsIGdldCBhIG5ld2VyIG9uZSBmcm9tCi1odHRwOi8vd3d3LndpbnppcC5jb20uKQoraHR0cHM6Ly93d3cud2luemlwLmNvbS4pCiAKZGlmZiAtLWdpdCBhL0RvYy9nbG9zc2FyeS5yc3QgYi9Eb2MvZ2xvc3NhcnkucnN0CmluZGV4IDM2ODMyYTMuLjQ1Yjc5NGYgMTAwNjQ0Ci0tLSBhL0RvYy9nbG9zc2FyeS5yc3QKKysrIGIvRG9jL2dsb3NzYXJ5LnJzdApAQCAtNjksMTEgKzY5LDMzIEBACiAgICAgICA6cmVmOmB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFyZ3VtZW50cyBhbmQgcGFyYW1ldGVycwogICAgICAgPGZhcS1hcmd1bWVudC12cy1wYXJhbWV0ZXI+YCwgYW5kIDpwZXA6YDM2MmAuCiAKKyAgIGFzeW5jaHJvbm91cyBjb250ZXh0IG1hbmFnZXIKKyAgICAgIEFuIG9iamVjdCB3aGljaCBjb250cm9scyB0aGUgZW52aXJvbm1lbnQgc2VlbiBpbiBhbgorICAgICAgOmtleXdvcmQ6YGFzeW5jIHdpdGhgIHN0YXRlbWVudCBieSBkZWZpbmluZyA6bWV0aDpgX19hZW50ZXJfX2AgYW5kCisgICAgICA6bWV0aDpgX19hZXhpdF9fYCBtZXRob2RzLiAgSW50cm9kdWNlZCBieSA6cGVwOmA0OTJgLgorCisgICBhc3luY2hyb25vdXMgaXRlcmFibGUKKyAgICAgIEFuIG9iamVjdCwgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbiA6a2V5d29yZDpgYXN5bmMgZm9yYCBzdGF0ZW1lbnQuCisgICAgICBNdXN0IHJldHVybiBhbiA6dGVybTpgYXN5bmNocm9ub3VzIGl0ZXJhdG9yYCBmcm9tIGl0cworICAgICAgOm1ldGg6YF9fYWl0ZXJfX2AgbWV0aG9kLiAgSW50cm9kdWNlZCBieSA6cGVwOmA0OTJgLgorCisgICBhc3luY2hyb25vdXMgaXRlcmF0b3IKKyAgICAgIEFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgOm1ldGg6YF9fYWl0ZXJfX2AgYW5kIDptZXRoOmBfX2FuZXh0X19gCisgICAgICBtZXRob2RzLiAgYGBfX2FuZXh0X19gYCBtdXN0IHJldHVybiBhbiA6dGVybTpgYXdhaXRhYmxlYCBvYmplY3QuCisgICAgICA6a2V5d29yZDpgYXN5bmMgZm9yYCByZXNvbHZlcyBhd2FpdGFibGUgcmV0dXJuZWQgZnJvbSBhc3luY2hyb25vdXMKKyAgICAgIGl0ZXJhdG9yJ3MgOm1ldGg6YF9fYW5leHRfX2AgbWV0aG9kIHVudGlsIGl0IHJhaXNlcworICAgICAgOmV4YzpgU3RvcEFzeW5jSXRlcmF0aW9uYCBleGNlcHRpb24uICBJbnRyb2R1Y2VkIGJ5IDpwZXA6YDQ5MmAuCisKICAgIGF0dHJpYnV0ZQogICAgICAgQSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYW4gb2JqZWN0IHdoaWNoIGlzIHJlZmVyZW5jZWQgYnkgbmFtZSB1c2luZwogICAgICAgZG90dGVkIGV4cHJlc3Npb25zLiAgRm9yIGV4YW1wbGUsIGlmIGFuIG9iamVjdCAqbyogaGFzIGFuIGF0dHJpYnV0ZQogICAgICAgKmEqIGl0IHdvdWxkIGJlIHJlZmVyZW5jZWQgYXMgKm8uYSouCiAKKyAgIGF3YWl0YWJsZQorICAgICAgQW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgaW4gYW4gOmtleXdvcmQ6YGF3YWl0YCBleHByZXNzaW9uLiAgQ2FuIGJlCisgICAgICBhIDp0ZXJtOmBjb3JvdXRpbmVgIG9yIGFuIG9iamVjdCB3aXRoIGFuIDptZXRoOmBfX2F3YWl0X19gIG1ldGhvZC4KKyAgICAgIFNlZSBhbHNvIDpwZXA6YDQ5MmAuCisKICAgIEJERkwKICAgICAgIEJlbmV2b2xlbnQgRGljdGF0b3IgRm9yIExpZmUsIGEuay5hLiBgR3VpZG8gdmFuIFJvc3N1bQogICAgICAgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvfmd1aWRvLz5gXywgUHl0aG9uJ3MgY3JlYXRvci4KQEAgLTg2LDEyICsxMDgsMjEgQEAKICAgICAgICAgIEEgOnRlcm06YHRleHQgZmlsZWAgcmVhZHMgYW5kIHdyaXRlcyA6Y2xhc3M6YHN0cmAgb2JqZWN0cy4KIAogICAgYnl0ZXMtbGlrZSBvYmplY3QKLSAgICAgIEFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHRoZSA6cmVmOmBidWZmZXJvYmplY3RzYCwgbGlrZSA6Y2xhc3M6YGJ5dGVzYCwKLSAgICAgIDpjbGFzczpgYnl0ZWFycmF5YCBvciA6Y2xhc3M6YG1lbW9yeXZpZXdgLiAgQnl0ZXMtbGlrZSBvYmplY3RzIGNhbgotICAgICAgYmUgdXNlZCBmb3IgdmFyaW91cyBvcGVyYXRpb25zIHRoYXQgZXhwZWN0IGJpbmFyeSBkYXRhLCBzdWNoIGFzCi0gICAgICBjb21wcmVzc2lvbiwgc2F2aW5nIHRvIGEgYmluYXJ5IGZpbGUgb3Igc2VuZGluZyBvdmVyIGEgc29ja2V0LgotICAgICAgU29tZSBvcGVyYXRpb25zIG5lZWQgdGhlIGJpbmFyeSBkYXRhIHRvIGJlIG11dGFibGUsIGluIHdoaWNoIGNhc2UKLSAgICAgIG5vdCBhbGwgYnl0ZXMtbGlrZSBvYmplY3RzIGNhbiBhcHBseS4KKyAgICAgIEFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHRoZSA6cmVmOmBidWZmZXJvYmplY3RzYCBhbmQgY2FuCisgICAgICBleHBvcnQgYSBDLTp0ZXJtOmBjb250aWd1b3VzYCBidWZmZXIuIFRoaXMgaW5jbHVkZXMgYWxsIDpjbGFzczpgYnl0ZXNgLAorICAgICAgOmNsYXNzOmBieXRlYXJyYXlgLCBhbmQgOmNsYXNzOmBhcnJheS5hcnJheWAgb2JqZWN0cywgYXMgd2VsbCBhcyBtYW55CisgICAgICBjb21tb24gOmNsYXNzOmBtZW1vcnl2aWV3YCBvYmplY3RzLiAgQnl0ZXMtbGlrZSBvYmplY3RzIGNhbgorICAgICAgYmUgdXNlZCBmb3IgdmFyaW91cyBvcGVyYXRpb25zIHRoYXQgd29yayB3aXRoIGJpbmFyeSBkYXRhOyB0aGVzZSBpbmNsdWRlCisgICAgICBjb21wcmVzc2lvbiwgc2F2aW5nIHRvIGEgYmluYXJ5IGZpbGUsIGFuZCBzZW5kaW5nIG92ZXIgYSBzb2NrZXQuCisKKyAgICAgIFNvbWUgb3BlcmF0aW9ucyBuZWVkIHRoZSBiaW5hcnkgZGF0YSB0byBiZSBtdXRhYmxlLiAgVGhlIGRvY3VtZW50YXRpb24KKyAgICAgIG9mdGVuIHJlZmVycyB0byB0aGVzZSBhcyAicmVhZC13cml0ZSBieXRlcy1saWtlIG9iamVjdHMiLiAgRXhhbXBsZQorICAgICAgbXV0YWJsZSBidWZmZXIgb2JqZWN0cyBpbmNsdWRlIDpjbGFzczpgYnl0ZWFycmF5YCBhbmQgYQorICAgICAgOmNsYXNzOmBtZW1vcnl2aWV3YCBvZiBhIDpjbGFzczpgYnl0ZWFycmF5YC4KKyAgICAgIE90aGVyIG9wZXJhdGlvbnMgcmVxdWlyZSB0aGUgYmluYXJ5IGRhdGEgdG8gYmUgc3RvcmVkIGluCisgICAgICBpbW11dGFibGUgb2JqZWN0cyAoInJlYWQtb25seSBieXRlcy1saWtlIG9iamVjdHMiKTsgZXhhbXBsZXMKKyAgICAgIG9mIHRoZXNlIGluY2x1ZGUgOmNsYXNzOmBieXRlc2AgYW5kIGEgOmNsYXNzOmBtZW1vcnl2aWV3YAorICAgICAgb2YgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QuCiAKICAgIGJ5dGVjb2RlCiAgICAgICBQeXRob24gc291cmNlIGNvZGUgaXMgY29tcGlsZWQgaW50byBieXRlY29kZSwgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uCkBAIC0xMzksNiArMTcwLDMyIEBACiAgICAgICBzdGF0ZW1lbnQgYnkgZGVmaW5pbmcgOm1ldGg6YF9fZW50ZXJfX2AgYW5kIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kcy4KICAgICAgIFNlZSA6cGVwOmAzNDNgLgogCisgICBjb250aWd1b3VzCisgICAgICAuLiBpbmRleDo6IEMtY29udGlndW91cywgRm9ydHJhbiBjb250aWd1b3VzCisKKyAgICAgIEEgYnVmZmVyIGlzIGNvbnNpZGVyZWQgY29udGlndW91cyBleGFjdGx5IGlmIGl0IGlzIGVpdGhlcgorICAgICAgKkMtY29udGlndW91cyogb3IgKkZvcnRyYW4gY29udGlndW91cyouICBaZXJvLWRpbWVuc2lvbmFsIGJ1ZmZlcnMgYXJlCisgICAgICBDIGFuZCBGb3J0cmFuIGNvbnRpZ3VvdXMuICBJbiBvbmUtZGltZW5zaW9uYWwgYXJyYXlzLCB0aGUgaXRlbXMKKyAgICAgIG11c3QgYmUgbGFpZCBvdXQgaW4gbWVtb3J5IG5leHQgdG8gZWFjaCBvdGhlciwgaW4gb3JkZXIgb2YKKyAgICAgIGluY3JlYXNpbmcgaW5kZXhlcyBzdGFydGluZyBmcm9tIHplcm8uICBJbiBtdWx0aWRpbWVuc2lvbmFsCisgICAgICBDLWNvbnRpZ3VvdXMgYXJyYXlzLCB0aGUgbGFzdCBpbmRleCB2YXJpZXMgdGhlIGZhc3Rlc3Qgd2hlbgorICAgICAgdmlzaXRpbmcgaXRlbXMgaW4gb3JkZXIgb2YgbWVtb3J5IGFkZHJlc3MuICBIb3dldmVyLCBpbgorICAgICAgRm9ydHJhbiBjb250aWd1b3VzIGFycmF5cywgdGhlIGZpcnN0IGluZGV4IHZhcmllcyB0aGUgZmFzdGVzdC4KKworICAgY29yb3V0aW5lCisgICAgICBDb3JvdXRpbmVzIGlzIGEgbW9yZSBnZW5lcmFsaXplZCBmb3JtIG9mIHN1YnJvdXRpbmVzLiBTdWJyb3V0aW5lcyBhcmUKKyAgICAgIGVudGVyZWQgYXQgb25lIHBvaW50IGFuZCBleGl0ZWQgYXQgYW5vdGhlciBwb2ludC4gIENvcm91dGluZXMgY2FuIGJlCisgICAgICBlbnRlcmVkLCBleGl0ZWQsIGFuZCByZXN1bWVkIGF0IG1hbnkgZGlmZmVyZW50IHBvaW50cy4gIFRoZXkgY2FuIGJlCisgICAgICBpbXBsZW1lbnRlZCB3aXRoIHRoZSA6a2V5d29yZDpgYXN5bmMgZGVmYCBzdGF0ZW1lbnQuICBTZWUgYWxzbworICAgICAgOnBlcDpgNDkyYC4KKworICAgY29yb3V0aW5lIGZ1bmN0aW9uCisgICAgICBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSA6dGVybTpgY29yb3V0aW5lYCBvYmplY3QuICBBIGNvcm91dGluZQorICAgICAgZnVuY3Rpb24gbWF5IGJlIGRlZmluZWQgd2l0aCB0aGUgOmtleXdvcmQ6YGFzeW5jIGRlZmAgc3RhdGVtZW50LAorICAgICAgYW5kIG1heSBjb250YWluIDprZXl3b3JkOmBhd2FpdGAsIDprZXl3b3JkOmBhc3luYyBmb3JgLCBhbmQKKyAgICAgIDprZXl3b3JkOmBhc3luYyB3aXRoYCBrZXl3b3Jkcy4gIFRoZXNlIHdlcmUgaW50cm9kdWNlZAorICAgICAgYnkgOnBlcDpgNDkyYC4KKwogICAgQ1B5dGhvbgogICAgICAgVGhlIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlLCBhcwogICAgICAgZGlzdHJpYnV0ZWQgb24gYHB5dGhvbi5vcmcgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmc+YF8uICBUaGUgdGVybSAiQ1B5dGhvbiIKQEAgLTI1MCwxMCArMzA3LDE0IEBACiAgICAgICBBIHN5bm9ueW0gZm9yIDp0ZXJtOmBmaWxlIG9iamVjdGAuCiAKICAgIGZpbmRlcgotICAgICAgQW4gb2JqZWN0IHRoYXQgdHJpZXMgdG8gZmluZCB0aGUgOnRlcm06YGxvYWRlcmAgZm9yIGEgbW9kdWxlLiBJdCBtdXN0Ci0gICAgICBpbXBsZW1lbnQgZWl0aGVyIGEgbWV0aG9kIG5hbWVkIDptZXRoOmBmaW5kX2xvYWRlcmAgb3IgYSBtZXRob2QgbmFtZWQKLSAgICAgIDptZXRoOmBmaW5kX21vZHVsZWAuIFNlZSA6cGVwOmAzMDJgIGFuZCA6cGVwOmA0MjBgIGZvciBkZXRhaWxzIGFuZAotICAgICAgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLkZpbmRlcmAgZm9yIGFuIDp0ZXJtOmBhYnN0cmFjdCBiYXNlIGNsYXNzYC4KKyAgICAgIEFuIG9iamVjdCB0aGF0IHRyaWVzIHRvIGZpbmQgdGhlIDp0ZXJtOmBsb2FkZXJgIGZvciBhIG1vZHVsZSB0aGF0IGlzCisgICAgICBiZWluZyBpbXBvcnRlZC4KKworICAgICAgU2luY2UgUHl0aG9uIDMuMywgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBmaW5kZXI6IDp0ZXJtOmBtZXRhIHBhdGggZmluZGVycworICAgICAgPG1ldGEgcGF0aCBmaW5kZXI+YCBmb3IgdXNlIHdpdGggOmRhdGE6YHN5cy5tZXRhX3BhdGhgLCBhbmQgOnRlcm06YHBhdGgKKyAgICAgIGVudHJ5IGZpbmRlcnMgPHBhdGggZW50cnkgZmluZGVyPmAgZm9yIHVzZSB3aXRoIDpkYXRhOmBzeXMucGF0aF9ob29rc2AuCisKKyAgICAgIFNlZSA6cGVwOmAzMDJgLCA6cGVwOmA0MjBgIGFuZCA6cGVwOmA0NTFgIGZvciBtdWNoIG1vcmUgZGV0YWlsLgogCiAgICBmbG9vciBkaXZpc2lvbgogICAgICAgTWF0aGVtYXRpY2FsIGRpdmlzaW9uIHRoYXQgcm91bmRzIGRvd24gdG8gbmVhcmVzdCBpbnRlZ2VyLiAgVGhlIGZsb29yCkBAIC0yOTgsMTQgKzM1OSwyMyBAQAogICAgICAgLi4gaW5kZXg6OiBzaW5nbGU6IGdlbmVyYXRvcgogCiAgICBnZW5lcmF0b3IKLSAgICAgIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBpdGVyYXRvci4gIEl0IGxvb2tzIGxpa2UgYSBub3JtYWwgZnVuY3Rpb24KLSAgICAgIGV4Y2VwdCB0aGF0IGl0IGNvbnRhaW5zIDprZXl3b3JkOmB5aWVsZGAgc3RhdGVtZW50cyBmb3IgcHJvZHVjaW5nIGEgc2VyaWVzCi0gICAgICBvZiB2YWx1ZXMgdXNhYmxlIGluIGEgZm9yLWxvb3Agb3IgdGhhdCBjYW4gYmUgcmV0cmlldmVkIG9uZSBhdCBhIHRpbWUgd2l0aAotICAgICAgdGhlIDpmdW5jOmBuZXh0YCBmdW5jdGlvbi4gRWFjaCA6a2V5d29yZDpgeWllbGRgIHRlbXBvcmFyaWx5IHN1c3BlbmRzCi0gICAgICBwcm9jZXNzaW5nLCByZW1lbWJlcmluZyB0aGUgbG9jYXRpb24gZXhlY3V0aW9uIHN0YXRlIChpbmNsdWRpbmcgbG9jYWwKLSAgICAgIHZhcmlhYmxlcyBhbmQgcGVuZGluZyB0cnktc3RhdGVtZW50cykuICBXaGVuIHRoZSBnZW5lcmF0b3IgcmVzdW1lcywgaXQKLSAgICAgIHBpY2tzLXVwIHdoZXJlIGl0IGxlZnQtb2ZmIChpbiBjb250cmFzdCB0byBmdW5jdGlvbnMgd2hpY2ggc3RhcnQgZnJlc2ggb24KLSAgICAgIGV2ZXJ5IGludm9jYXRpb24pLgorICAgICAgQSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEgOnRlcm06YGdlbmVyYXRvciBpdGVyYXRvcmAuICBJdCBsb29rcyBsaWtlIGEKKyAgICAgIG5vcm1hbCBmdW5jdGlvbiBleGNlcHQgdGhhdCBpdCBjb250YWlucyA6a2V5d29yZDpgeWllbGRgIGV4cHJlc3Npb25zCisgICAgICBmb3IgcHJvZHVjaW5nIGEgc2VyaWVzIG9mIHZhbHVlcyB1c2FibGUgaW4gYSBmb3ItbG9vcCBvciB0aGF0IGNhbiBiZQorICAgICAgcmV0cmlldmVkIG9uZSBhdCBhIHRpbWUgd2l0aCB0aGUgOmZ1bmM6YG5leHRgIGZ1bmN0aW9uLgorCisgICAgICBVc3VhbGx5IHJlZmVycyB0byBhIGdlbmVyYXRvciBmdW5jdGlvbiwgYnV0IG1heSByZWZlciB0byBhCisgICAgICAqZ2VuZXJhdG9yIGl0ZXJhdG9yKiBpbiBzb21lIGNvbnRleHRzLiAgSW4gY2FzZXMgd2hlcmUgdGhlIGludGVuZGVkCisgICAgICBtZWFuaW5nIGlzbid0IGNsZWFyLCB1c2luZyB0aGUgZnVsbCB0ZXJtcyBhdm9pZHMgYW1iaWd1aXR5LgorCisgICBnZW5lcmF0b3IgaXRlcmF0b3IKKyAgICAgIEFuIG9iamVjdCBjcmVhdGVkIGJ5IGEgOnRlcm06YGdlbmVyYXRvcmAgZnVuY3Rpb24uCisKKyAgICAgIEVhY2ggOmtleXdvcmQ6YHlpZWxkYCB0ZW1wb3JhcmlseSBzdXNwZW5kcyBwcm9jZXNzaW5nLCByZW1lbWJlcmluZyB0aGUKKyAgICAgIGxvY2F0aW9uIGV4ZWN1dGlvbiBzdGF0ZSAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgcGVuZGluZworICAgICAgdHJ5LXN0YXRlbWVudHMpLiAgV2hlbiB0aGUgKmdlbmVyYXRvciBpdGVyYXRvciogcmVzdW1lcywgaXQgcGlja3MtdXAgd2hlcmUKKyAgICAgIGl0IGxlZnQtb2ZmIChpbiBjb250cmFzdCB0byBmdW5jdGlvbnMgd2hpY2ggc3RhcnQgZnJlc2ggb24gZXZlcnkKKyAgICAgIGludm9jYXRpb24pLgogCiAgICAgICAuLiBpbmRleDo6IHNpbmdsZTogZ2VuZXJhdG9yIGV4cHJlc3Npb24KIApAQCAtNDEwLDYgKzQ4MCwxOSBAQAogICAgICAgdGhhbiBjb21waWxlZCBvbmVzLCB0aG91Z2ggdGhlaXIgcHJvZ3JhbXMgZ2VuZXJhbGx5IGFsc28gcnVuIG1vcmUKICAgICAgIHNsb3dseS4gIFNlZSBhbHNvIDp0ZXJtOmBpbnRlcmFjdGl2ZWAuCiAKKyAgIGludGVycHJldGVyIHNodXRkb3duCisgICAgICBXaGVuIGFza2VkIHRvIHNodXQgZG93biwgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBlbnRlcnMgYSBzcGVjaWFsIHBoYXNlCisgICAgICB3aGVyZSBpdCBncmFkdWFsbHkgcmVsZWFzZXMgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMsIHN1Y2ggYXMgbW9kdWxlcworICAgICAgYW5kIHZhcmlvdXMgY3JpdGljYWwgaW50ZXJuYWwgc3RydWN0dXJlcy4gIEl0IGFsc28gbWFrZXMgc2V2ZXJhbCBjYWxscworICAgICAgdG8gdGhlIDp0ZXJtOmBnYXJiYWdlIGNvbGxlY3RvciA8Z2FyYmFnZSBjb2xsZWN0aW9uPmAuIFRoaXMgY2FuIHRyaWdnZXIKKyAgICAgIHRoZSBleGVjdXRpb24gb2YgY29kZSBpbiB1c2VyLWRlZmluZWQgZGVzdHJ1Y3RvcnMgb3Igd2Vha3JlZiBjYWxsYmFja3MuCisgICAgICBDb2RlIGV4ZWN1dGVkIGR1cmluZyB0aGUgc2h1dGRvd24gcGhhc2UgY2FuIGVuY291bnRlciB2YXJpb3VzCisgICAgICBleGNlcHRpb25zIGFzIHRoZSByZXNvdXJjZXMgaXQgcmVsaWVzIG9uIG1heSBub3QgZnVuY3Rpb24gYW55bW9yZQorICAgICAgKGNvbW1vbiBleGFtcGxlcyBhcmUgbGlicmFyeSBtb2R1bGVzIG9yIHRoZSB3YXJuaW5ncyBtYWNoaW5lcnkpLgorCisgICAgICBUaGUgbWFpbiByZWFzb24gZm9yIGludGVycHJldGVyIHNodXRkb3duIGlzIHRoYXQgdGhlIGBgX19tYWluX19gYCBtb2R1bGUKKyAgICAgIG9yIHRoZSBzY3JpcHQgYmVpbmcgcnVuIGhhcyBmaW5pc2hlZCBleGVjdXRpbmcuCisKICAgIGl0ZXJhYmxlCiAgICAgICBBbiBvYmplY3QgY2FwYWJsZSBvZiByZXR1cm5pbmcgaXRzIG1lbWJlcnMgb25lIGF0IGEgdGltZS4gRXhhbXBsZXMgb2YKICAgICAgIGl0ZXJhYmxlcyBpbmNsdWRlIGFsbCBzZXF1ZW5jZSB0eXBlcyAoc3VjaCBhcyA6Y2xhc3M6YGxpc3RgLCA6Y2xhc3M6YHN0cmAsCkBAIC00NTIsMTIgKzUzNSwxMyBAQAogCiAgICAgICBBIG51bWJlciBvZiB0b29scyBpbiBQeXRob24gYWNjZXB0IGtleSBmdW5jdGlvbnMgdG8gY29udHJvbCBob3cgZWxlbWVudHMKICAgICAgIGFyZSBvcmRlcmVkIG9yIGdyb3VwZWQuICBUaGV5IGluY2x1ZGUgOmZ1bmM6YG1pbmAsIDpmdW5jOmBtYXhgLAotICAgICAgOmZ1bmM6YHNvcnRlZGAsIDptZXRoOmBsaXN0LnNvcnRgLCA6ZnVuYzpgaGVhcHEubnNtYWxsZXN0YCwKLSAgICAgIDpmdW5jOmBoZWFwcS5ubGFyZ2VzdGAsIGFuZCA6ZnVuYzpgaXRlcnRvb2xzLmdyb3VwYnlgLgorICAgICAgOmZ1bmM6YHNvcnRlZGAsIDptZXRoOmBsaXN0LnNvcnRgLCA6ZnVuYzpgaGVhcHEubWVyZ2VgLAorICAgICAgOmZ1bmM6YGhlYXBxLm5zbWFsbGVzdGAsIDpmdW5jOmBoZWFwcS5ubGFyZ2VzdGAsIGFuZAorICAgICAgOmZ1bmM6YGl0ZXJ0b29scy5ncm91cGJ5YC4KIAogICAgICAgVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBjcmVhdGUgYSBrZXkgZnVuY3Rpb24uICBGb3IgZXhhbXBsZS4gdGhlCiAgICAgICA6bWV0aDpgc3RyLmxvd2VyYCBtZXRob2QgY2FuIHNlcnZlIGFzIGEga2V5IGZ1bmN0aW9uIGZvciBjYXNlIGluc2Vuc2l0aXZlCi0gICAgICBzb3J0cy4gIEFsdGVybmF0aXZlbHksIGFuIGFkLWhvYyBrZXkgZnVuY3Rpb24gY2FuIGJlIGJ1aWx0IGZyb20gYQorICAgICAgc29ydHMuICBBbHRlcm5hdGl2ZWx5LCBhIGtleSBmdW5jdGlvbiBjYW4gYmUgYnVpbHQgZnJvbSBhCiAgICAgICA6a2V5d29yZDpgbGFtYmRhYCBleHByZXNzaW9uIHN1Y2ggYXMgYGBsYW1iZGEgcjogKHJbMF0sIHJbMl0pYGAuICBBbHNvLAogICAgICAgdGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgcHJvdmlkZXMgdGhyZWUga2V5IGZ1bmN0aW9uIGNvbnN0cnVjdG9yczoKICAgICAgIDpmdW5jOmB+b3BlcmF0b3IuYXR0cmdldHRlcmAsIDpmdW5jOmB+b3BlcmF0b3IuaXRlbWdldHRlcmAsIGFuZApAQCAtNTEyLDEwICs1OTYsMTMgQEAKICAgICAgIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIGFuZCA6Y2xhc3M6YGNvbGxlY3Rpb25zLkNvdW50ZXJgLgogCiAgICBtZXRhIHBhdGggZmluZGVyCi0gICAgICBBIGZpbmRlciByZXR1cm5lZCBieSBhIHNlYXJjaCBvZiA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAuICBNZXRhIHBhdGgKKyAgICAgIEEgOnRlcm06YGZpbmRlcmAgcmV0dXJuZWQgYnkgYSBzZWFyY2ggb2YgOmRhdGE6YHN5cy5tZXRhX3BhdGhgLiAgTWV0YSBwYXRoCiAgICAgICBmaW5kZXJzIGFyZSByZWxhdGVkIHRvLCBidXQgZGlmZmVyZW50IGZyb20gOnRlcm06YHBhdGggZW50cnkgZmluZGVycwogICAgICAgPHBhdGggZW50cnkgZmluZGVyPmAuCiAKKyAgICAgIFNlZSA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXJgIGZvciB0aGUgbWV0aG9kcyB0aGF0IG1ldGEgcGF0aAorICAgICAgZmluZGVycyBpbXBsZW1lbnQuCisKICAgIG1ldGFjbGFzcwogICAgICAgVGhlIGNsYXNzIG9mIGEgY2xhc3MuICBDbGFzcyBkZWZpbml0aW9ucyBjcmVhdGUgYSBjbGFzcyBuYW1lLCBhIGNsYXNzCiAgICAgICBkaWN0aW9uYXJ5LCBhbmQgYSBsaXN0IG9mIGJhc2UgY2xhc3Nlcy4gIFRoZSBtZXRhY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yCkBAIC01MzgsNyArNjI1LDggQEAKICAgIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyCiAgICAgICBNZXRob2QgUmVzb2x1dGlvbiBPcmRlciBpcyB0aGUgb3JkZXIgaW4gd2hpY2ggYmFzZSBjbGFzc2VzIGFyZSBzZWFyY2hlZAogICAgICAgZm9yIGEgbWVtYmVyIGR1cmluZyBsb29rdXAuIFNlZSBgVGhlIFB5dGhvbiAyLjMgTWV0aG9kIFJlc29sdXRpb24gT3JkZXIKLSAgICAgIDxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vPmBfLgorICAgICAgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8+YF8gZm9yIGRldGFpbHMgb2YgdGhlCisgICAgICBhbGdvcml0aG0gdXNlZCBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIHNpbmNlIHRoZSAyLjMgcmVsZWFzZS4KIAogICAgbW9kdWxlCiAgICAgICBBbiBvYmplY3QgdGhhdCBzZXJ2ZXMgYXMgYW4gb3JnYW5pemF0aW9uYWwgdW5pdCBvZiBQeXRob24gY29kZS4gIE1vZHVsZXMKQEAgLTU0OSw3ICs2MzcsNyBAQAogCiAgICBtb2R1bGUgc3BlYwogICAgICAgQSBuYW1lc3BhY2UgY29udGFpbmluZyB0aGUgaW1wb3J0LXJlbGF0ZWQgaW5mb3JtYXRpb24gdXNlZCB0byBsb2FkIGEKLSAgICAgIG1vZHVsZS4KKyAgICAgIG1vZHVsZS4gQW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWNgLgogCiAgICBNUk8KICAgICAgIFNlZSA6dGVybTpgbWV0aG9kIHJlc29sdXRpb24gb3JkZXJgLgpAQCAtNjc2LDYgKzc2NCw5IEBACiAgICAgICAoaS5lLiBhIDp0ZXJtOmBwYXRoIGVudHJ5IGhvb2tgKSB3aGljaCBrbm93cyBob3cgdG8gbG9jYXRlIG1vZHVsZXMgZ2l2ZW4KICAgICAgIGEgOnRlcm06YHBhdGggZW50cnlgLgogCisgICAgICBTZWUgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlcmAgZm9yIHRoZSBtZXRob2RzIHRoYXQgcGF0aCBlbnRyeQorICAgICAgZmluZGVycyBpbXBsZW1lbnQuCisKICAgIHBhdGggZW50cnkgaG9vawogICAgICAgQSBjYWxsYWJsZSBvbiB0aGUgOmRhdGE6YHN5cy5wYXRoX2hvb2tgIGxpc3Qgd2hpY2ggcmV0dXJucyBhIDp0ZXJtOmBwYXRoCiAgICAgICBlbnRyeSBmaW5kZXJgIGlmIGl0IGtub3dzIGhvdyB0byBmaW5kIG1vZHVsZXMgb24gYSBzcGVjaWZpYyA6dGVybTpgcGF0aApkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2FyZ3BhcnNlLnJzdCBiL0RvYy9ob3d0by9hcmdwYXJzZS5yc3QKaW5kZXggNTEwZDFkNC4uY2ZlOTg2OCAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2FyZ3BhcnNlLnJzdAorKysgYi9Eb2MvaG93dG8vYXJncGFyc2UucnN0CkBAIC01MTEsNyArNTExLDcgQEAKIAogKiBTYWRseSwgb3VyIGhlbHAgb3V0cHV0IGlzbid0IHZlcnkgaW5mb3JtYXRpdmUgb24gdGhlIG5ldyBhYmlsaXR5IG91ciBzY3JpcHQKICAgaGFzIGFjcXVpcmVkLCBidXQgdGhhdCBjYW4gYWx3YXlzIGJlIGZpeGVkIGJ5IGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKLSAgb3V0IHNjcmlwdCAoZS5nLiB2aWEgdGhlIGBgaGVscGBgIGtleXdvcmQgYXJndW1lbnQpLgorICBvdXIgc2NyaXB0IChlLmcuIHZpYSB0aGUgYGBoZWxwYGAga2V5d29yZCBhcmd1bWVudCkuCiAKICogVGhhdCBsYXN0IG91dHB1dCBleHBvc2VzIGEgYnVnIGluIG91ciBwcm9ncmFtLgogCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vY2xpbmljLnJzdCBiL0RvYy9ob3d0by9jbGluaWMucnN0CmluZGV4IGUzNjI2MzEuLjVhNjljYTggMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9jbGluaWMucnN0CisrKyBiL0RvYy9ob3d0by9jbGluaWMucnN0CkBAIC0xNTIsNyArMTUyLDkgQEAKICAgIEZvciBteSBleGFtcGxlIEknbSB1c2luZyBgYF9waWNrbGUuUGlja2xlci5kdW1wKClgYC4KIAogMi4gSWYgdGhlIGNhbGwgdG8gdGhlIGBgUHlBcmdfUGFyc2VgYCBmdW5jdGlvbiB1c2VzIGFueSBvZiB0aGUKLSAgIGZvbGxvd2luZyBmb3JtYXQgdW5pdHM6OgorICAgZm9sbG93aW5nIGZvcm1hdCB1bml0czoKKworICAgLi4gY29kZS1ibG9jazo6IG5vbmUKIAogICAgICAgIE8mCiAgICAgICAgTyEKQEAgLTc1OCw2ICs3NjAsMTQgQEAKIEluIGFkZGl0aW9uLCBzb21lIGNvbnZlcnRlcnMgYWNjZXB0IGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSGVyZSBpcyBhIGxpc3QKIG9mIHRoZXNlIGFyZ3VtZW50cywgYWxvbmcgd2l0aCB0aGVpciBtZWFuaW5nczoKIAorICBgYGFjY2VwdGBgCisgICAgQSBzZXQgb2YgUHl0aG9uIHR5cGVzIChhbmQgcG9zc2libHkgcHNldWRvLXR5cGVzKTsKKyAgICB0aGlzIHJlc3RyaWN0cyB0aGUgYWxsb3dhYmxlIFB5dGhvbiBhcmd1bWVudCB0byB2YWx1ZXMgb2YgdGhlc2UgdHlwZXMuCisgICAgKFRoaXMgaXMgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIGZhY2lsaXR5OyBhcyBhIHJ1bGUgaXQgb25seSBzdXBwb3J0cworICAgIHNwZWNpZmljIGxpc3RzIG9mIHR5cGVzIGFzIHNob3duIGluIHRoZSBsZWdhY3kgY29udmVydGVyIHRhYmxlLikKKworICAgIFRvIGFjY2VwdCBgYE5vbmVgYCwgYWRkIGBgTm9uZVR5cGVgYCB0byB0aGlzIHNldC4KKwogICBgYGJpdHdpc2VgYAogICAgIE9ubHkgc3VwcG9ydGVkIGZvciB1bnNpZ25lZCBpbnRlZ2Vycy4gIFRoZSBuYXRpdmUgaW50ZWdlciB2YWx1ZSBvZiB0aGlzCiAgICAgUHl0aG9uIGFyZ3VtZW50IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgcGFyYW1ldGVyIHdpdGhvdXQgYW55IHJhbmdlIGNoZWNraW5nLApAQCAtNzcyLDM5ICs3ODIsMjcgQEAKICAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIFNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdG8gdXNlIHdoZW4gY29udmVydGluZwogICAgIHRoaXMgc3RyaW5nIGZyb20gYSBQeXRob24gc3RyIChVbmljb2RlKSB2YWx1ZSBpbnRvIGEgQyBgYGNoYXIgKmBgIHZhbHVlLgogCi0gIGBgbGVuZ3RoYGAKLSAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIElmIHRydWUsIHJlcXVlc3RzIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUKLSAgICBzdHJpbmcgYmUgcGFzc2VkIGluIHRvIHRoZSBpbXBsIGZ1bmN0aW9uLCBqdXN0IGFmdGVyIHRoZSBzdHJpbmcgcGFyYW1ldGVyLAotICAgIGluIGEgcGFyYW1ldGVyIG5hbWVkIGBgPHBhcmFtZXRlcl9uYW1lPl9sZW5ndGhgYC4KLQotICBgYG51bGxhYmxlYGAKLSAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIElmIHRydWUsIHRoaXMgcGFyYW1ldGVyIG1heSBhbHNvIGJlIHNldCB0bwotICAgIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlIHRoZSBDIHBhcmFtZXRlciB3aWxsIGJlIHNldCB0byBgYE5VTExgYC4KIAogICBgYHN1YmNsYXNzX29mYGAKICAgICBPbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgb2JqZWN0YGAgY29udmVydGVyLiAgUmVxdWlyZXMgdGhhdCB0aGUgUHl0aG9uCiAgICAgdmFsdWUgYmUgYSBzdWJjbGFzcyBvZiBhIFB5dGhvbiB0eXBlLCBhcyBleHByZXNzZWQgaW4gQy4KIAotICBgYHR5cGVzYGAKLSAgICBPbmx5IHN1cHBvcnRlZCBmb3IgdGhlIGBgb2JqZWN0YGAgKGFuZCBgYHNlbGZgYCkgY29udmVydGVyLiAgU3BlY2lmaWVzCisgIGBgdHlwZWBgCisgICAgT25seSBzdXBwb3J0ZWQgZm9yIHRoZSBgYG9iamVjdGBgIGFuZCBgYHNlbGZgYCBjb252ZXJ0ZXJzLiAgU3BlY2lmaWVzCiAgICAgdGhlIEMgdHlwZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZWNsYXJlIHRoZSB2YXJpYWJsZS4gIERlZmF1bHQgdmFsdWUgaXMKICAgICBgYCJQeU9iamVjdCAqImBgLgogCi0gIGBgdHlwZXNgYAotICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBsaXN0IG9mIFB5dGhvbiB0eXBlcyAoYW5kIHBvc3NpYmx5IHBzZXVkby10eXBlcyk7Ci0gICAgdGhpcyByZXN0cmljdHMgdGhlIGFsbG93YWJsZSBQeXRob24gYXJndW1lbnQgdG8gdmFsdWVzIG9mIHRoZXNlIHR5cGVzLgotICAgIChUaGlzIGlzIG5vdCBhIGdlbmVyYWwtcHVycG9zZSBmYWNpbGl0eTsgYXMgYSBydWxlIGl0IG9ubHkgc3VwcG9ydHMKLSAgICBzcGVjaWZpYyBsaXN0cyBvZiB0eXBlcyBhcyBzaG93biBpbiB0aGUgbGVnYWN5IGNvbnZlcnRlciB0YWJsZS4pCi0KICAgYGB6ZXJvZXNgYAogICAgIE9ubHkgc3VwcG9ydGVkIGZvciBzdHJpbmdzLiAgSWYgdHJ1ZSwgZW1iZWRkZWQgTlVMIGJ5dGVzIChgYCdcXDAnYGApIGFyZQotICAgIHBlcm1pdHRlZCBpbnNpZGUgdGhlIHZhbHVlLgorICAgIHBlcm1pdHRlZCBpbnNpZGUgdGhlIHZhbHVlLiAgVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHdpbGwgYmUgcGFzc2VkIGluCisgICAgdG8gdGhlIGltcGwgZnVuY3Rpb24sIGp1c3QgYWZ0ZXIgdGhlIHN0cmluZyBwYXJhbWV0ZXIsIGFzIGEgcGFyYW1ldGVyIG5hbWVkCisgICAgYGA8cGFyYW1ldGVyX25hbWU+X2xlbmd0aGBgLgogCiBQbGVhc2Ugbm90ZSwgbm90IGV2ZXJ5IHBvc3NpYmxlIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyB3aWxsIHdvcmsuCi1PZnRlbiB0aGVzZSBhcmd1bWVudHMgYXJlIGltcGxlbWVudGVkIGludGVybmFsbHkgYnkgc3BlY2lmaWMgYGBQeUFyZ19QYXJzZVR1cGxlYGAKK1VzdWFsbHkgdGhlc2UgYXJndW1lbnRzIGFyZSBpbXBsZW1lbnRlZCBieSBzcGVjaWZpYyBgYFB5QXJnX1BhcnNlVHVwbGVgYAogKmZvcm1hdCB1bml0cyosIHdpdGggc3BlY2lmaWMgYmVoYXZpb3IuICBGb3IgZXhhbXBsZSwgY3VycmVudGx5IHlvdSBjYW5ub3QKLWNhbGwgYGBzdHJgYCBhbmQgcGFzcyBpbiBgYHplcm9lcz1UcnVlYGAgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgYW4gYGBlbmNvZGluZ2BgOwotYWx0aG91Z2ggaXQncyBwZXJmZWN0bHkgcmVhc29uYWJsZSB0byB0aGluayB0aGlzIHdvdWxkIHdvcmssIHRoZXNlIHNlbWFudGljcyBkb24ndAorY2FsbCBgYHVuc2lnbmVkX3Nob3J0YGAgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgYGBiaXR3aXNlPVRydWVgYC4KK0FsdGhvdWdoIGl0J3MgcGVyZmVjdGx5IHJlYXNvbmFibGUgdG8gdGhpbmsgdGhpcyB3b3VsZCB3b3JrLCB0aGVzZSBzZW1hbnRpY3MgZG9uJ3QKIG1hcCB0byBhbnkgZXhpc3RpbmcgZm9ybWF0IHVuaXQuICBTbyBBcmd1bWVudCBDbGluaWMgZG9lc24ndCBzdXBwb3J0IGl0LiAgKE9yLCBhdAogbGVhc3QsIG5vdCB5ZXQuKQogCkBAIC04MTYsMTMgKzgxNCwxMyBAQAogYGAnQidgYCAgICAgYGB1bnNpZ25lZF9jaGFyKGJpdHdpc2U9VHJ1ZSlgYAogYGAnYidgYCAgICAgYGB1bnNpZ25lZF9jaGFyYGAKIGBgJ2MnYGAgICAgIGBgY2hhcmBgCi1gYCdDJ2BgICAgICBgYGludCh0eXBlcz0nc3RyJylgYAorYGAnQydgYCAgICAgYGBpbnQoYWNjZXB0PXtzdHJ9KWBgCiBgYCdkJ2BgICAgICBgYGRvdWJsZWBgCiBgYCdEJ2BgICAgICBgYFB5X2NvbXBsZXhgYAotYGAnZXMjJ2BgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCBsZW5ndGg9VHJ1ZSwgemVyb2VzPVRydWUpYGAKIGBgJ2VzJ2BgICAgIGBgc3RyKGVuY29kaW5nPSduYW1lX29mX2VuY29kaW5nJylgYAotYGAnZXQjJ2BgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCB0eXBlcz0nYnl0ZXMgYnl0ZWFycmF5IHN0cicsIGxlbmd0aD1UcnVlKWBgCi1gYCdldCdgYCAgICBgYHN0cihlbmNvZGluZz0nbmFtZV9vZl9lbmNvZGluZycsIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgc3RyJylgYAorYGAnZXMjJ2BgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCB6ZXJvZXM9VHJ1ZSlgYAorYGAnZXQnYGAgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCBhY2NlcHQ9e2J5dGVzLCBieXRlYXJyYXksIHN0cn0pYGAKK2BgJ2V0IydgYCAgIGBgc3RyKGVuY29kaW5nPSduYW1lX29mX2VuY29kaW5nJywgYWNjZXB0PXtieXRlcywgYnl0ZWFycmF5LCBzdHJ9LCB6ZXJvZXM9VHJ1ZSlgYAogYGAnZidgYCAgICAgYGBmbG9hdGBgCiBgYCdoJ2BgICAgICBgYHNob3J0YGAKIGBgJ0gnYGAgICAgIGBgdW5zaWduZWRfc2hvcnQoYml0d2lzZT1UcnVlKWBgCkBAIC04MzAsMjkgKzgyOCwzMCBAQAogYGAnSSdgYCAgICAgYGB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKWBgCiBgYCdrJ2BgICAgICBgYHVuc2lnbmVkX2xvbmcoYml0d2lzZT1UcnVlKWBgCiBgYCdLJ2BgICAgICBgYHVuc2lnbmVkX1BZX0xPTkdfTE9ORyhiaXR3aXNlPVRydWUpYGAKK2BgJ2wnYGAgICAgIGBgbG9uZ2BgCiBgYCdMJ2BgICAgICBgYFBZX0xPTkdfTE9OR2BgCiBgYCduJ2BgICAgICBgYFB5X3NzaXplX3RgYAorYGAnTydgYCAgICAgYGBvYmplY3RgYAogYGAnTyEnYGAgICAgYGBvYmplY3Qoc3ViY2xhc3Nfb2Y9JyZQeVNvbWV0aGluZ19UeXBlJylgYAogYGAnTyYnYGAgICAgYGBvYmplY3QoY29udmVydGVyPSduYW1lX29mX2NfZnVuY3Rpb24nKWBgCi1gYCdPJ2BgICAgICBgYG9iamVjdGBgCiBgYCdwJ2BgICAgICBgYGJvb2xgYAotYGAncyMnYGAgICAgYGBzdHIobGVuZ3RoPVRydWUpYGAKIGBgJ1MnYGAgICAgIGBgUHlCeXRlc09iamVjdGBgCiBgYCdzJ2BgICAgICBgYHN0cmBgCi1gYCdzKidgYCAgICBgYFB5X2J1ZmZlcih0eXBlcz0nc3RyIGJ5dGVzIGJ5dGVhcnJheSBidWZmZXInKWBgCi1gYCd1IydgYCAgICBgYFB5X1VOSUNPREUobGVuZ3RoPVRydWUpYGAKLWBgJ3UnYGAgICAgIGBgUHlfVU5JQ09ERWBgCitgYCdzIydgYCAgICBgYHN0cih6ZXJvZXM9VHJ1ZSlgYAorYGAncyonYGAgICAgYGBQeV9idWZmZXIoYWNjZXB0PXtidWZmZXIsIHN0cn0pYGAKIGBgJ1UnYGAgICAgIGBgdW5pY29kZWBgCi1gYCd3KidgYCAgICBgYFB5X2J1ZmZlcih0eXBlcz0nYnl0ZWFycmF5IHJ3YnVmZmVyJylgYAotYGAneSMnYGAgICAgYGBzdHIodHlwZXM9J2J5dGVzJywgbGVuZ3RoPVRydWUpYGAKK2BgJ3UnYGAgICAgIGBgUHlfVU5JQ09ERWBgCitgYCd1IydgYCAgICBgYFB5X1VOSUNPREUoemVyb2VzPVRydWUpYGAKK2BgJ3cqJ2BgICAgIGBgUHlfYnVmZmVyKGFjY2VwdD17cndidWZmZXJ9KWBgCiBgYCdZJ2BgICAgICBgYFB5Qnl0ZUFycmF5T2JqZWN0YGAKLWBgJ3knYGAgICAgIGBgc3RyKHR5cGVzPSdieXRlcycpYGAKK2BgJ3knYGAgICAgIGBgc3RyKGFjY2VwdD17Ynl0ZXN9KWBgCitgYCd5IydgYCAgICBgYHN0cihhY2NlcHQ9e3JvYnVmZmVyfSwgemVyb2VzPVRydWUpYGAKIGBgJ3kqJ2BgICAgIGBgUHlfYnVmZmVyYGAKLWBgJ1ojJ2BgICAgIGBgUHlfVU5JQ09ERShudWxsYWJsZT1UcnVlLCBsZW5ndGg9VHJ1ZSlgYAotYGAneiMnYGAgICAgYGBzdHIobnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpYGAKLWBgJ1onYGAgICAgIGBgUHlfVU5JQ09ERShudWxsYWJsZT1UcnVlKWBgCi1gYCd6J2BgICAgICBgYHN0cihudWxsYWJsZT1UcnVlKWBgCi1gYCd6KidgYCAgICBgYFB5X2J1ZmZlcih0eXBlcz0nc3RyIGJ5dGVzIGJ5dGVhcnJheSBidWZmZXInLCBudWxsYWJsZT1UcnVlKWBgCitgYCdaJ2BgICAgICBgYFB5X1VOSUNPREUoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSlgYAorYGAnWiMnYGAgICAgYGBQeV9VTklDT0RFKGFjY2VwdD17c3RyLCBOb25lVHlwZX0sIHplcm9lcz1UcnVlKWBgCitgYCd6J2BgICAgICBgYHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KWBgCitgYCd6IydgYCAgICBgYHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9LCB6ZXJvZXM9VHJ1ZSlgYAorYGAneionYGAgICAgYGBQeV9idWZmZXIoYWNjZXB0PXtidWZmZXIsIHN0ciwgTm9uZVR5cGV9KWBgCiA9PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQXMgYW4gZXhhbXBsZSwgaGVyZSdzIG91ciBzYW1wbGUgYGBwaWNrbGUuUGlja2xlci5kdW1wYGAgdXNpbmcgdGhlIHByb3BlcgpAQCAtMTI1MiwxOCArMTI1MSwxOCBAQAogCiAgICAgLypbcHl0aG9uIGlucHV0XQogCi0gICAgY2xhc3MgdWludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6Ci0gICAgICAgIHR5cGUgPSAndW5zaWduZWQgaW50JwotICAgICAgICBjb252ZXJ0ZXIgPSAndWludF9jb252ZXJ0ZXInCisgICAgY2xhc3Mgc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgICAgIHR5cGUgPSAnUHlfc3NpemVfdCcKKyAgICAgICAgY29udmVydGVyID0gJ3NzaXplX3RfY29udmVydGVyJwogCiAgICAgW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwotICAgIC8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPWRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKyAgICAvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0zNTUyMWU0ZTczMzgyM2M3XSovCiAKLVRoaXMgYmxvY2sgYWRkcyBhIGNvbnZlcnRlciB0byBBcmd1bWVudCBDbGluaWMgbmFtZWQgYGB1aW50YGAuICBQYXJhbWV0ZXJzCi1kZWNsYXJlZCBhcyBgYHVpbnRgYCB3aWxsIGJlIGRlY2xhcmVkIGFzIHR5cGUgYGB1bnNpZ25lZCBpbnRgYCwgYW5kIHdpbGwKLWJlIHBhcnNlZCBieSB0aGUgYGAnTyYnYGAgZm9ybWF0IHVuaXQsIHdoaWNoIHdpbGwgY2FsbCB0aGUgYGB1aW50X2NvbnZlcnRlcmBgCi1jb252ZXJ0ZXIgZnVuY3Rpb24uCi1gYHVpbnRgYCB2YXJpYWJsZXMgYXV0b21hdGljYWxseSBzdXBwb3J0IGRlZmF1bHQgdmFsdWVzLgorVGhpcyBibG9jayBhZGRzIGEgY29udmVydGVyIHRvIEFyZ3VtZW50IENsaW5pYyBuYW1lZCBgYHNzaXplX3RgYC4gIFBhcmFtZXRlcnMKK2RlY2xhcmVkIGFzIGBgc3NpemVfdGBgIHdpbGwgYmUgZGVjbGFyZWQgYXMgdHlwZSBgYFB5X3NzaXplX3RgYCwgYW5kIHdpbGwKK2JlIHBhcnNlZCBieSB0aGUgYGAnTyYnYGAgZm9ybWF0IHVuaXQsIHdoaWNoIHdpbGwgY2FsbCB0aGUKK2Bgc3NpemVfdF9jb252ZXJ0ZXJgYCBjb252ZXJ0ZXIgZnVuY3Rpb24uICBgYHNzaXplX3RgYCB2YXJpYWJsZXMKK2F1dG9tYXRpY2FsbHkgc3VwcG9ydCBkZWZhdWx0IHZhbHVlcy4KIAogTW9yZSBzb3BoaXN0aWNhdGVkIGN1c3RvbSBjb252ZXJ0ZXJzIGNhbiBpbnNlcnQgY3VzdG9tIEMgY29kZSB0bwogaGFuZGxlIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwLgpAQCAtMTU4Niw3ICsxNTg1LDcgQEAKIAogICAgIHByZXNlcnZlCiAKLVRoaXMgdGVsbHMgQ2xpbmljIHRoYXQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIG91dHB1dCBzaG91bGQgYmUga2VwdCwgdW5tb2RpZmVkLgorVGhpcyB0ZWxscyBDbGluaWMgdGhhdCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBrZXB0LCB1bm1vZGlmaWVkLgogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgYnkgQ2xpbmljIHdoZW4gZHVtcGluZyBvdXRwdXQgaW50byBgYGZpbGVgYCBmaWxlczsgd3JhcHBpbmcKIGl0IGluIGEgQ2xpbmljIGJsb2NrIGxldHMgQ2xpbmljIHVzZSBpdHMgZXhpc3RpbmcgY2hlY2tzdW0gZnVuY3Rpb25hbGl0eSB0byBlbnN1cmUKIHRoZSBmaWxlIHdhcyBub3QgbW9kaWZpZWQgYnkgaGFuZCBiZWZvcmUgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9jcG9ydGluZy5yc3QgYi9Eb2MvaG93dG8vY3BvcnRpbmcucnN0CmluZGV4IGQ3YTcwODYuLjI3ZTdlNmYgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9jcG9ydGluZy5yc3QKKysrIGIvRG9jL2hvd3RvL2Nwb3J0aW5nLnJzdApAQCAtMTYxLDcgKzE2MSw3IEBACiAKICAgICNkZWZpbmUgSU5JVEVSUk9SIHJldHVybiBOVUxMCiAKLSAgIFB5T2JqZWN0ICoKKyAgIFB5TU9ESU5JVF9GVU5DCiAgICBQeUluaXRfbXlleHRlbnNpb24odm9pZCkKIAogICAgI2Vsc2UKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9jdXJzZXMucnN0IGIvRG9jL2hvd3RvL2N1cnNlcy5yc3QKaW5kZXggODdhNWNhYi4uMTg4YTVjZiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2N1cnNlcy5yc3QKKysrIGIvRG9jL2hvd3RvL2N1cnNlcy5yc3QKQEAgLTU0NSw3ICs1NDUsNyBAQAogICBhIGxlbmd0aHkgdHV0b3JpYWwgZm9yIEMgcHJvZ3JhbW1lcnMuCiAqIGBUaGUgbmN1cnNlcyBtYW4gcGFnZSA8aHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzMvbmN1cnNlcz5gXwogKiBgVGhlIG5jdXJzZXMgRkFRIDxodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy9uY3Vyc2VzLmZhcS5odG1sPmBfCi0qIGAiVXNlIGN1cnNlcy4uLiBkb24ndCBzd2VhciIgPGh0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1lTjFlWnRqTEVuVT5gXzoKKyogYCJVc2UgY3Vyc2VzLi4uIGRvbid0IHN3ZWFyIiA8aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1lTjFlWnRqTEVuVT5gXzoKICAgdmlkZW8gb2YgYSBQeUNvbiAyMDEzIHRhbGsgb24gY29udHJvbGxpbmcgdGVybWluYWxzIHVzaW5nIGN1cnNlcyBvciBVcndpZC4KICogYCJDb25zb2xlIEFwcGxpY2F0aW9ucyB3aXRoIFVyd2lkIiA8aHR0cDovL3d3dy5weXZpZGVvLm9yZy92aWRlby8xNTY4L2NvbnNvbGUtYXBwbGljYXRpb25zLXdpdGgtdXJ3aWQ+YF86CiAgIHZpZGVvIG9mIGEgUHlDb24gQ0EgMjAxMiB0YWxrIGRlbW9uc3RyYXRpbmcgc29tZSBhcHBsaWNhdGlvbnMgd3JpdHRlbiB1c2luZwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Rlc2NyaXB0b3IucnN0IGIvRG9jL2hvd3RvL2Rlc2NyaXB0b3IucnN0CmluZGV4IDUzMGYzNGIuLmQzNzBlYjUgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdAorKysgYi9Eb2MvaG93dG8vZGVzY3JpcHRvci5yc3QKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICAiRW11bGF0ZSB0eXBlX2dldGF0dHJvKCkgaW4gT2JqZWN0cy90eXBlb2JqZWN0LmMiCiAgICAgICAgIHYgPSBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBrZXkpCiAgICAgICAgIGlmIGhhc2F0dHIodiwgJ19fZ2V0X18nKToKLSAgICAgICAgICAgcmV0dXJuIHYuX19nZXRfXyhOb25lLCBzZWxmKQorICAgICAgICAgICAgcmV0dXJuIHYuX19nZXRfXyhOb25lLCBzZWxmKQogICAgICAgICByZXR1cm4gdgogCiBUaGUgaW1wb3J0YW50IHBvaW50cyB0byByZW1lbWJlciBhcmU6CkBAIC0xNjMsOSArMTYzLDkgQEAKICAgICAgICAgICAgIHNlbGYudmFsID0gdmFsCiAKICAgICA+Pj4gY2xhc3MgTXlDbGFzcyhvYmplY3QpOgotICAgICAgICB4ID0gUmV2ZWFsQWNjZXNzKDEwLCAndmFyICJ4IicpCi0gICAgICAgIHkgPSA1Ci0KKyAgICAuLi4gICAgIHggPSBSZXZlYWxBY2Nlc3MoMTAsICd2YXIgIngiJykKKyAgICAuLi4gICAgIHkgPSA1CisgICAgLi4uCiAgICAgPj4+IG0gPSBNeUNsYXNzKCkKICAgICA+Pj4gbS54CiAgICAgUmV0cmlldmluZyB2YXIgIngiCkBAIC0yODcsMTUgKzI4NywxNSBAQAogUnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgc2hvd3MgaG93IHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9yIHdvcmtzIGluIHByYWN0aWNlOjoKIAogICAgID4+PiBjbGFzcyBEKG9iamVjdCk6Ci0gICAgICAgICBkZWYgZihzZWxmLCB4KToKLSAgICAgICAgICAgICAgcmV0dXJuIHgKLQorICAgIC4uLiAgICAgZGVmIGYoc2VsZiwgeCk6CisgICAgLi4uICAgICAgICAgcmV0dXJuIHgKKyAgICAuLi4KICAgICA+Pj4gZCA9IEQoKQotICAgID4+PiBELl9fZGljdF9fWydmJ10gIyBTdG9yZWQgaW50ZXJuYWxseSBhcyBhIGZ1bmN0aW9uCisgICAgPj4+IEQuX19kaWN0X19bJ2YnXSAgIyBTdG9yZWQgaW50ZXJuYWxseSBhcyBhIGZ1bmN0aW9uCiAgICAgPGZ1bmN0aW9uIGYgYXQgMHgwMEM0NTA3MD4KLSAgICA+Pj4gRC5mICAgICAgICAgICAgICMgR2V0IGZyb20gYSBjbGFzcyBiZWNvbWVzIGFuIHVuYm91bmQgbWV0aG9kCisgICAgPj4+IEQuZiAgICAgICAgICAgICAgIyBHZXQgZnJvbSBhIGNsYXNzIGJlY29tZXMgYW4gdW5ib3VuZCBtZXRob2QKICAgICA8dW5ib3VuZCBtZXRob2QgRC5mPgotICAgID4+PiBkLmYgICAgICAgICAgICAgIyBHZXQgZnJvbSBhbiBpbnN0YW5jZSBiZWNvbWVzIGEgYm91bmQgbWV0aG9kCisgICAgPj4+IGQuZiAgICAgICAgICAgICAgIyBHZXQgZnJvbSBhbiBpbnN0YW5jZSBiZWNvbWVzIGEgYm91bmQgbWV0aG9kCiAgICAgPGJvdW5kIG1ldGhvZCBELmYgb2YgPF9fbWFpbl9fLkQgb2JqZWN0IGF0IDB4MDBCMThDOTA+PgogCiBUaGUgb3V0cHV0IHN1Z2dlc3RzIHRoYXQgYm91bmQgYW5kIHVuYm91bmQgbWV0aG9kcyBhcmUgdHdvIGRpZmZlcmVudCB0eXBlcy4KQEAgLTM1OCwxMCArMzU4LDEwIEBACiBjYWxscyBhcmUgdW5leGNpdGluZzo6CiAKICAgICA+Pj4gY2xhc3MgRShvYmplY3QpOgotICAgICAgICAgZGVmIGYoeCk6Ci0gICAgICAgICAgICAgIHByaW50KHgpCi0gICAgICAgICBmID0gc3RhdGljbWV0aG9kKGYpCi0KKyAgICAuLi4gICAgIGRlZiBmKHgpOgorICAgIC4uLiAgICAgICAgIHByaW50KHgpCisgICAgLi4uICAgICBmID0gc3RhdGljbWV0aG9kKGYpCisgICAgLi4uCiAgICAgPj4+IHByaW50KEUuZigzKSkKICAgICAzCiAgICAgPj4+IHByaW50KEUoKS5mKDMpKQpAQCAtMzcxLDIzICszNzEsMjMgQEAKIDpmdW5jOmBzdGF0aWNtZXRob2RgIHdvdWxkIGxvb2sgbGlrZSB0aGlzOjoKIAogICAgIGNsYXNzIFN0YXRpY01ldGhvZChvYmplY3QpOgotICAgICAiRW11bGF0ZSBQeVN0YXRpY01ldGhvZF9UeXBlKCkgaW4gT2JqZWN0cy9mdW5jb2JqZWN0LmMiCisgICAgICAgICJFbXVsYXRlIFB5U3RhdGljTWV0aG9kX1R5cGUoKSBpbiBPYmplY3RzL2Z1bmNvYmplY3QuYyIKIAotICAgICBkZWYgX19pbml0X18oc2VsZiwgZik6Ci0gICAgICAgICAgc2VsZi5mID0gZgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZik6CisgICAgICAgICAgICBzZWxmLmYgPSBmCiAKLSAgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCBvYmp0eXBlPU5vbmUpOgotICAgICAgICAgIHJldHVybiBzZWxmLmYKKyAgICAgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCBvYmp0eXBlPU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZgogCiBVbmxpa2Ugc3RhdGljIG1ldGhvZHMsIGNsYXNzIG1ldGhvZHMgcHJlcGVuZCB0aGUgY2xhc3MgcmVmZXJlbmNlIHRvIHRoZQogYXJndW1lbnQgbGlzdCBiZWZvcmUgY2FsbGluZyB0aGUgZnVuY3Rpb24uICBUaGlzIGZvcm1hdCBpcyB0aGUgc2FtZQogZm9yIHdoZXRoZXIgdGhlIGNhbGxlciBpcyBhbiBvYmplY3Qgb3IgYSBjbGFzczo6CiAKICAgICA+Pj4gY2xhc3MgRShvYmplY3QpOgotICAgICAgICAgZGVmIGYoa2xhc3MsIHgpOgotICAgICAgICAgICAgICByZXR1cm4ga2xhc3MuX19uYW1lX18sIHgKLSAgICAgICAgIGYgPSBjbGFzc21ldGhvZChmKQotCisgICAgLi4uICAgICBkZWYgZihrbGFzcywgeCk6CisgICAgLi4uICAgICAgICAgcmV0dXJuIGtsYXNzLl9fbmFtZV9fLCB4CisgICAgLi4uICAgICBmID0gY2xhc3NtZXRob2QoZikKKyAgICAuLi4KICAgICA+Pj4gcHJpbnQoRS5mKDMpKQogICAgICgnRScsIDMpCiAgICAgPj4+IHByaW50KEUoKS5mKDMpKQpAQCAtNDE5LDE1ICs0MTksMTUgQEAKIDpmdW5jOmBjbGFzc21ldGhvZGAgd291bGQgbG9vayBsaWtlIHRoaXM6OgogCiAgICAgY2xhc3MgQ2xhc3NNZXRob2Qob2JqZWN0KToKLSAgICAgICAgICJFbXVsYXRlIFB5Q2xhc3NNZXRob2RfVHlwZSgpIGluIE9iamVjdHMvZnVuY29iamVjdC5jIgorICAgICAgICAiRW11bGF0ZSBQeUNsYXNzTWV0aG9kX1R5cGUoKSBpbiBPYmplY3RzL2Z1bmNvYmplY3QuYyIKIAotICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGYpOgotICAgICAgICAgICAgICBzZWxmLmYgPSBmCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmKToKKyAgICAgICAgICAgIHNlbGYuZiA9IGYKIAotICAgICAgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCBrbGFzcz1Ob25lKToKLSAgICAgICAgICAgICAgaWYga2xhc3MgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICBrbGFzcyA9IHR5cGUob2JqKQotICAgICAgICAgICAgICBkZWYgbmV3ZnVuYygqYXJncyk6Ci0gICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZihrbGFzcywgKmFyZ3MpCi0gICAgICAgICAgICAgIHJldHVybiBuZXdmdW5jCisgICAgICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwga2xhc3M9Tm9uZSk6CisgICAgICAgICAgICBpZiBrbGFzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGtsYXNzID0gdHlwZShvYmopCisgICAgICAgICAgICBkZWYgbmV3ZnVuYygqYXJncyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZihrbGFzcywgKmFyZ3MpCisgICAgICAgICAgICByZXR1cm4gbmV3ZnVuYwogCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QgYi9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKaW5kZXggMTk2OWIzMi4uNmUyMWY5MyAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CisrKyBiL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdApAQCAtMzMyLDcgKzMzMiw3IEBACiAKIExpc3QgY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvciBleHByZXNzaW9ucyAoc2hvcnQgZm9ybTogImxpc3Rjb21wcyIgYW5kCiAiZ2VuZXhwcyIpIGFyZSBhIGNvbmNpc2Ugbm90YXRpb24gZm9yIHN1Y2ggb3BlcmF0aW9ucywgYm9ycm93ZWQgZnJvbSB0aGUKLWZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgSGFza2VsbCAoaHR0cDovL3d3dy5oYXNrZWxsLm9yZy8pLiAgWW91IGNhbiBzdHJpcAorZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBsYW5ndWFnZSBIYXNrZWxsIChodHRwczovL3d3dy5oYXNrZWxsLm9yZy8pLiAgWW91IGNhbiBzdHJpcAogYWxsIHRoZSB3aGl0ZXNwYWNlIGZyb20gYSBzdHJlYW0gb2Ygc3RyaW5ncyB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZTo6CiAKICAgICBsaW5lX2xpc3QgPSBbJyAgbGluZSAxXG4nLCAnbGluZSAyICBcbicsIC4uLl0KQEAgLTM5NSwxNCArMzk1LDE0IEBACiAgICAgICAgICAgICBjb250aW51ZSAgICMgU2tpcCB0aGlzIGVsZW1lbnQKICAgICAgICAgZm9yIGV4cHIyIGluIHNlcXVlbmNlMjoKICAgICAgICAgICAgIGlmIG5vdCAoY29uZGl0aW9uMik6Ci0gICAgICAgICAgICAgICAgY29udGludWUgICAgIyBTa2lwIHRoaXMgZWxlbWVudAorICAgICAgICAgICAgICAgIGNvbnRpbnVlICAgIyBTa2lwIHRoaXMgZWxlbWVudAogICAgICAgICAgICAgLi4uCiAgICAgICAgICAgICBmb3IgZXhwck4gaW4gc2VxdWVuY2VOOgotICAgICAgICAgICAgICAgICBpZiBub3QgKGNvbmRpdGlvbk4pOgotICAgICAgICAgICAgICAgICAgICAgY29udGludWUgICAjIFNraXAgdGhpcyBlbGVtZW50CisgICAgICAgICAgICAgICAgaWYgbm90IChjb25kaXRpb25OKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgICAjIFNraXAgdGhpcyBlbGVtZW50CiAKLSAgICAgICAgICAgICAgICAgIyBPdXRwdXQgdGhlIHZhbHVlIG9mCi0gICAgICAgICAgICAgICAgICMgdGhlIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgIyBPdXRwdXQgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICAgIyB0aGUgZXhwcmVzc2lvbi4KIAogVGhpcyBtZWFucyB0aGF0IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGBgZm9yLi4uaW5gYCBjbGF1c2VzIGJ1dCBubyBgYGlmYGAKIGNsYXVzZXMsIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBvdXRwdXQgd2lsbCBiZSBlcXVhbCB0byB0aGUgcHJvZHVjdCBvZiB0aGUKQEAgLTQ4MSwxMCArNDgxLDEwIEBACiBZb3UgY291bGQgZXF1YWxseSB3cml0ZSBgYGZvciBpIGluIGdlbmVyYXRlX2ludHMoNSlgYCwgb3IgYGBhLGIsYyA9CiBnZW5lcmF0ZV9pbnRzKDMpYGAuCiAKLUluc2lkZSBhIGdlbmVyYXRvciBmdW5jdGlvbiwgYGByZXR1cm4gdmFsdWVgYCBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0bwotYGByYWlzZSBTdG9wSXRlcmF0aW9uKHZhbHVlKWBgLiAgSWYgbm8gdmFsdWUgaXMgcmV0dXJuZWQgb3IgdGhlIGJvdHRvbSBvZiB0aGUKLWZ1bmN0aW9uIGlzIHJlYWNoZWQsIHRoZSBwcm9jZXNzaW9uIG9mIHZhbHVlcyBlbmRzIGFuZCB0aGUgZ2VuZXJhdG9yIGNhbm5vdAotcmV0dXJuIGFueSBmdXJ0aGVyIHZhbHVlcy4KK0luc2lkZSBhIGdlbmVyYXRvciBmdW5jdGlvbiwgYGByZXR1cm4gdmFsdWVgYCBjYXVzZXMgYGBTdG9wSXRlcmF0aW9uKHZhbHVlKWBgCit0byBiZSByYWlzZWQgZnJvbSB0aGUgOm1ldGg6YH5nZW5lcmF0b3IuX19uZXh0X19gIG1ldGhvZC4gIE9uY2UgdGhpcyBoYXBwZW5zLCBvcgordGhlIGJvdHRvbSBvZiB0aGUgZnVuY3Rpb24gaXMgcmVhY2hlZCwgdGhlIHByb2Nlc3Npb24gb2YgdmFsdWVzIGVuZHMgYW5kIHRoZQorZ2VuZXJhdG9yIGNhbm5vdCB5aWVsZCBhbnkgZnVydGhlciB2YWx1ZXMuCiAKIFlvdSBjb3VsZCBhY2hpZXZlIHRoZSBlZmZlY3Qgb2YgZ2VuZXJhdG9ycyBtYW51YWxseSBieSB3cml0aW5nIHlvdXIgb3duIGNsYXNzCiBhbmQgc3RvcmluZyBhbGwgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZ2VuZXJhdG9yIGFzIGluc3RhbmNlIHZhcmlhYmxlcy4gIEZvcgpAQCAtNzE2LDcgKzcxNiw3IEBACiBJdCBkb2Vzbid0IGNvbnN0cnVjdCBhbiBpbi1tZW1vcnkgbGlzdCBhbmQgZXhoYXVzdCBhbGwgdGhlIGlucHV0IGl0ZXJhdG9ycwogYmVmb3JlIHJldHVybmluZzsgaW5zdGVhZCB0dXBsZXMgYXJlIGNvbnN0cnVjdGVkIGFuZCByZXR1cm5lZCBvbmx5IGlmIHRoZXkncmUKIHJlcXVlc3RlZC4gIChUaGUgdGVjaG5pY2FsIHRlcm0gZm9yIHRoaXMgYmVoYXZpb3VyIGlzIGBsYXp5IGV2YWx1YXRpb24KLTxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhenlfZXZhbHVhdGlvbj5gX18uKQorPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhenlfZXZhbHVhdGlvbj5gX18uKQogCiBUaGlzIGl0ZXJhdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBpdGVyYWJsZXMgdGhhdCBhcmUgYWxsIG9mIHRoZSBzYW1lCiBsZW5ndGguICBJZiB0aGUgaXRlcmFibGVzIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3RocywgdGhlIHJlc3VsdGluZyBzdHJlYW0gd2lsbCBiZQpAQCAtMTE5OSw3ICsxMTk5LDcgQEAKIAogKipTdHJ1Y3R1cmUgYW5kIEludGVycHJldGF0aW9uIG9mIENvbXB1dGVyIFByb2dyYW1zKiosIGJ5IEhhcm9sZCBBYmVsc29uIGFuZAogR2VyYWxkIEpheSBTdXNzbWFuIHdpdGggSnVsaWUgU3Vzc21hbi4gIEZ1bGwgdGV4dCBhdAotaHR0cDovL21pdHByZXNzLm1pdC5lZHUvc2ljcC8uICBJbiB0aGlzIGNsYXNzaWMgdGV4dGJvb2sgb2YgY29tcHV0ZXIgc2NpZW5jZSwKK2h0dHBzOi8vbWl0cHJlc3MubWl0LmVkdS9zaWNwLy4gIEluIHRoaXMgY2xhc3NpYyB0ZXh0Ym9vayBvZiBjb21wdXRlciBzY2llbmNlLAogY2hhcHRlcnMgMiBhbmQgMyBkaXNjdXNzIHRoZSB1c2Ugb2Ygc2VxdWVuY2VzIGFuZCBzdHJlYW1zIHRvIG9yZ2FuaXplIHRoZSBkYXRhCiBmbG93IGluc2lkZSBhIHByb2dyYW0uICBUaGUgYm9vayB1c2VzIFNjaGVtZSBmb3IgaXRzIGV4YW1wbGVzLCBidXQgbWFueSBvZiB0aGUKIGRlc2lnbiBhcHByb2FjaGVzIGRlc2NyaWJlZCBpbiB0aGVzZSBjaGFwdGVycyBhcmUgYXBwbGljYWJsZSB0byBmdW5jdGlvbmFsLXN0eWxlCkBAIC0xMjA4LDEyICsxMjA4LDEyIEBACiBodHRwOi8vd3d3LmRlZm1hY3JvLm9yZy9yYW1ibGluZ3MvZnAuaHRtbDogQSBnZW5lcmFsIGludHJvZHVjdGlvbiB0byBmdW5jdGlvbmFsCiBwcm9ncmFtbWluZyB0aGF0IHVzZXMgSmF2YSBleGFtcGxlcyBhbmQgaGFzIGEgbGVuZ3RoeSBoaXN0b3JpY2FsIGludHJvZHVjdGlvbi4KIAotaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GdW5jdGlvbmFsX3Byb2dyYW1taW5nOiBHZW5lcmFsIFdpa2lwZWRpYSBlbnRyeQoraHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnVuY3Rpb25hbF9wcm9ncmFtbWluZzogR2VuZXJhbCBXaWtpcGVkaWEgZW50cnkKIGRlc2NyaWJpbmcgZnVuY3Rpb25hbCBwcm9ncmFtbWluZy4KIAotaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db3JvdXRpbmU6IEVudHJ5IGZvciBjb3JvdXRpbmVzLgoraHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29yb3V0aW5lOiBFbnRyeSBmb3IgY29yb3V0aW5lcy4KIAotaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdXJyeWluZzogRW50cnkgZm9yIHRoZSBjb25jZXB0IG9mIGN1cnJ5aW5nLgoraHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3Vycnlpbmc6IEVudHJ5IGZvciB0aGUgY29uY2VwdCBvZiBjdXJyeWluZy4KIAogUHl0aG9uLXNwZWNpZmljCiAtLS0tLS0tLS0tLS0tLS0KQEAgLTEyMjUsOSArMTIyNSw5IEBACiAKIE1lcnR6IGFsc28gd3JvdGUgYSAzLXBhcnQgc2VyaWVzIG9mIGFydGljbGVzIG9uIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcKIGZvciBJQk0ncyBEZXZlbG9wZXJXb3JrcyBzaXRlOyBzZWUKLWBwYXJ0IDEgPGh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtcHJvZy9pbmRleC5odG1sPmBfXywKLWBwYXJ0IDIgPGh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saWJyYXJ5L2wtcHJvZzIvaW5kZXguaHRtbD5gX18sIGFuZAotYHBhcnQgMyA8aHR0cDovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpYnJhcnkvbC1wcm9nMy9pbmRleC5odG1sPmBfXywKK2BwYXJ0IDEgPGh0dHBzOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGlicmFyeS9sLXByb2cvaW5kZXguaHRtbD5gX18sCitgcGFydCAyIDxodHRwczovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpYnJhcnkvbC1wcm9nMi9pbmRleC5odG1sPmBfXywgYW5kCitgcGFydCAzIDxodHRwczovL3d3dy5pYm0uY29tL2RldmVsb3BlcndvcmtzL2xpbnV4L2xpYnJhcnkvbC1wcm9nMy9pbmRleC5odG1sPmBfXywKIAogCiBQeXRob24gZG9jdW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2luZGV4LnJzdCBiL0RvYy9ob3d0by9pbmRleC5yc3QKaW5kZXggMmM5ZDY5OS4uZGU2NTk1MCAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2luZGV4LnJzdAorKysgYi9Eb2MvaG93dG8vaW5kZXgucnN0CkBAIC0yNSw3ICsyNSw2IEBACiAgICBzb3J0aW5nLnJzdAogICAgdW5pY29kZS5yc3QKICAgIHVybGxpYjIucnN0Ci0gICB3ZWJzZXJ2ZXJzLnJzdAogICAgYXJncGFyc2UucnN0CiAgICBpcGFkZHJlc3MucnN0CiAgICBjbGluaWMucnN0CmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKaW5kZXggYWY4ODhjMi4uZGUwZDMwNCAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdApAQCAtNjMsNiArNjMsNyBAQAogICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzcGFtX2FwcGxpY2F0aW9uLmF1eGlsaWFyeS5BdXhpbGlhcnknKQogICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgQXV4aWxpYXJ5JykKKwogICAgICAgICBkZWYgZG9fc29tZXRoaW5nKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnZG9pbmcgc29tZXRoaW5nJykKICAgICAgICAgICAgIGEgPSAxICsgMQpAQCAtOTQsNiArOTUsNjEgQEAKICAgICAyMDA1LTAzLTIzIDIzOjQ3OjExLDY3MyAtIHNwYW1fYXBwbGljYXRpb24gLSBJTkZPIC0KICAgICAgICBkb25lIHdpdGggYXV4aWxpYXJ5X21vZHVsZS5zb21lX2Z1bmN0aW9uKCkKIAorTG9nZ2luZyBmcm9tIG11bHRpcGxlIHRocmVhZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xvZ2dpbmcgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIHJlcXVpcmVzIG5vIHNwZWNpYWwgZWZmb3J0LiBUaGUgZm9sbG93aW5nIGV4YW1wbGUKK3Nob3dzIGxvZ2dpbmcgZnJvbSB0aGUgbWFpbiAoaW5pdGlhbCkgdGhyZWFkIGFuZCBhbm90aGVyIHRocmVhZDo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICBpbXBvcnQgdGltZQorCisgICAgZGVmIHdvcmtlcihhcmcpOgorICAgICAgICB3aGlsZSBub3QgYXJnWydzdG9wJ106CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCdIaSBmcm9tIG15ZnVuYycpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKworICAgIGRlZiBtYWluKCk6CisgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5ERUJVRywgZm9ybWF0PSclKHJlbGF0aXZlQ3JlYXRlZCk2ZCAlKHRocmVhZE5hbWUpcyAlKG1lc3NhZ2UpcycpCisgICAgICAgIGluZm8gPSB7J3N0b3AnOiBGYWxzZX0KKyAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyLCBhcmdzPShpbmZvLCkpCisgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnSGVsbG8gZnJvbSBtYWluJykKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNzUpCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgaW5mb1snc3RvcCddID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHRocmVhZC5qb2luKCkKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIG1haW4oKQorCitXaGVuIHJ1biwgdGhlIHNjcmlwdCBzaG91bGQgcHJpbnQgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzo6CisKKyAgICAgMCBUaHJlYWQtMSBIaSBmcm9tIG15ZnVuYworICAgICAzIE1haW5UaHJlYWQgSGVsbG8gZnJvbSBtYWluCisgICA1MDUgVGhyZWFkLTEgSGkgZnJvbSBteWZ1bmMKKyAgIDc1NSBNYWluVGhyZWFkIEhlbGxvIGZyb20gbWFpbgorICAxMDA3IFRocmVhZC0xIEhpIGZyb20gbXlmdW5jCisgIDE1MDcgTWFpblRocmVhZCBIZWxsbyBmcm9tIG1haW4KKyAgMTUwOCBUaHJlYWQtMSBIaSBmcm9tIG15ZnVuYworICAyMDEwIFRocmVhZC0xIEhpIGZyb20gbXlmdW5jCisgIDIyNTggTWFpblRocmVhZCBIZWxsbyBmcm9tIG1haW4KKyAgMjUxMiBUaHJlYWQtMSBIaSBmcm9tIG15ZnVuYworICAzMDA5IE1haW5UaHJlYWQgSGVsbG8gZnJvbSBtYWluCisgIDMwMTMgVGhyZWFkLTEgSGkgZnJvbSBteWZ1bmMKKyAgMzUxNSBUaHJlYWQtMSBIaSBmcm9tIG15ZnVuYworICAzNzYxIE1haW5UaHJlYWQgSGVsbG8gZnJvbSBtYWluCisgIDQwMTcgVGhyZWFkLTEgSGkgZnJvbSBteWZ1bmMKKyAgNDUxMyBNYWluVGhyZWFkIEhlbGxvIGZyb20gbWFpbgorICA0NTE4IFRocmVhZC0xIEhpIGZyb20gbXlmdW5jCisKK1RoaXMgc2hvd3MgdGhlIGxvZ2dpbmcgb3V0cHV0IGludGVyc3BlcnNlZCBhcyBvbmUgbWlnaHQgZXhwZWN0LiBUaGlzIGFwcHJvYWNoCit3b3JrcyBmb3IgbW9yZSB0aHJlYWRzIHRoYW4gc2hvd24gaGVyZSwgb2YgY291cnNlLgorCiBNdWx0aXBsZSBoYW5kbGVycyBhbmQgZm9ybWF0dGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzA1LDcgKzM2MSw3IEBACiAKIEFuIGV4YW1wbGUgb2YgdXNpbmcgdGhlc2UgdHdvIGNsYXNzZXMgZm9sbG93cyAoaW1wb3J0cyBvbWl0dGVkKTo6CiAKLSAgICBxdWUgPSBxdWV1ZS5RdWV1ZSgtMSkgIyBubyBsaW1pdCBvbiBzaXplCisgICAgcXVlID0gcXVldWUuUXVldWUoLTEpICAjIG5vIGxpbWl0IG9uIHNpemUKICAgICBxdWV1ZV9oYW5kbGVyID0gUXVldWVIYW5kbGVyKHF1ZSkKICAgICBoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKICAgICBsaXN0ZW5lciA9IFF1ZXVlTGlzdGVuZXIocXVlLCBoYW5kbGVyKQpAQCAtMzIxLDEwICszNzcsMjEgQEAKICAgICByb290Lndhcm5pbmcoJ0xvb2sgb3V0IScpCiAgICAgbGlzdGVuZXIuc3RvcCgpCiAKLXdoaWNoLCB3aGVuIHJ1biwgd2lsbCBwcm9kdWNlOjoKK3doaWNoLCB3aGVuIHJ1biwgd2lsbCBwcm9kdWNlOgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICAgTWFpblRocmVhZDogTG9vayBvdXQhCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICBQcmlvciB0byBQeXRob24gMy41LCB0aGUgOmNsYXNzOmBRdWV1ZUxpc3RlbmVyYCBhbHdheXMgcGFzc2VkIGV2ZXJ5IG1lc3NhZ2UKKyAgIHJlY2VpdmVkIGZyb20gdGhlIHF1ZXVlIHRvIGV2ZXJ5IGhhbmRsZXIgaXQgd2FzIGluaXRpYWxpemVkIHdpdGguIChUaGlzIHdhcworICAgYmVjYXVzZSBpdCB3YXMgYXNzdW1lZCB0aGF0IGxldmVsIGZpbHRlcmluZyB3YXMgYWxsIGRvbmUgb24gdGhlIG90aGVyIHNpZGUsCisgICB3aGVyZSB0aGUgcXVldWUgaXMgZmlsbGVkLikgRnJvbSAzLjUgb253YXJkcywgdGhpcyBiZWhhdmlvdXIgY2FuIGJlIGNoYW5nZWQKKyAgIGJ5IHBhc3NpbmcgYSBrZXl3b3JkIGFyZ3VtZW50IGBgcmVzcGVjdF9oYW5kbGVyX2xldmVsPVRydWVgYCB0byB0aGUKKyAgIGxpc3RlbmVyJ3MgY29uc3RydWN0b3IuIFdoZW4gdGhpcyBpcyBkb25lLCB0aGUgbGlzdGVuZXIgY29tcGFyZXMgdGhlIGxldmVsCisgICBvZiBlYWNoIG1lc3NhZ2Ugd2l0aCB0aGUgaGFuZGxlcidzIGxldmVsLCBhbmQgb25seSBwYXNzZXMgYSBtZXNzYWdlIHRvIGEKKyAgIGhhbmRsZXIgaWYgaXQncyBhcHByb3ByaWF0ZSB0byBkbyBzby4KIAogLi4gX25ldHdvcmstbG9nZ2luZzoKIApAQCAtNTkyLDIxICs2NTksMjEgQEAKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgIGxldmVscyA9IChsb2dnaW5nLkRFQlVHLCBsb2dnaW5nLklORk8sIGxvZ2dpbmcuV0FSTklORywgbG9nZ2luZy5FUlJPUiwgbG9nZ2luZy5DUklUSUNBTCkKLSAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9JyUoYXNjdGltZSktMTVzICUobmFtZSktNXMgJShsZXZlbG5hbWUpLThzIElQOiAlKGlwKS0xNXMgVXNlcjogJSh1c2VyKS04cyAlKG1lc3NhZ2UpcycpCi0gICAgICAgYTEgPSBsb2dnaW5nLmdldExvZ2dlcignYS5iLmMnKQotICAgICAgIGEyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2QuZS5mJykKKyAgICAgICAgbGV2ZWxzID0gKGxvZ2dpbmcuREVCVUcsIGxvZ2dpbmcuSU5GTywgbG9nZ2luZy5XQVJOSU5HLCBsb2dnaW5nLkVSUk9SLCBsb2dnaW5nLkNSSVRJQ0FMKQorICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpLTE1cyAlKG5hbWUpLTVzICUobGV2ZWxuYW1lKS04cyBJUDogJShpcCktMTVzIFVzZXI6ICUodXNlciktOHMgJShtZXNzYWdlKXMnKQorICAgICAgICBhMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhLmIuYycpCisgICAgICAgIGEyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2QuZS5mJykKIAotICAgICAgIGYgPSBDb250ZXh0RmlsdGVyKCkKLSAgICAgICBhMS5hZGRGaWx0ZXIoZikKLSAgICAgICBhMi5hZGRGaWx0ZXIoZikKLSAgICAgICBhMS5kZWJ1ZygnQSBkZWJ1ZyBtZXNzYWdlJykKLSAgICAgICBhMS5pbmZvKCdBbiBpbmZvIG1lc3NhZ2Ugd2l0aCAlcycsICdzb21lIHBhcmFtZXRlcnMnKQotICAgICAgIGZvciB4IGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgbHZsID0gY2hvaWNlKGxldmVscykKLSAgICAgICAgICAgbHZsbmFtZSA9IGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKGx2bCkKLSAgICAgICAgICAgYTIubG9nKGx2bCwgJ0EgbWVzc2FnZSBhdCAlcyBsZXZlbCB3aXRoICVkICVzJywgbHZsbmFtZSwgMiwgJ3BhcmFtZXRlcnMnKQorICAgICAgICBmID0gQ29udGV4dEZpbHRlcigpCisgICAgICAgIGExLmFkZEZpbHRlcihmKQorICAgICAgICBhMi5hZGRGaWx0ZXIoZikKKyAgICAgICAgYTEuZGVidWcoJ0EgZGVidWcgbWVzc2FnZScpCisgICAgICAgIGExLmluZm8oJ0FuIGluZm8gbWVzc2FnZSB3aXRoICVzJywgJ3NvbWUgcGFyYW1ldGVycycpCisgICAgICAgIGZvciB4IGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGx2bCA9IGNob2ljZShsZXZlbHMpCisgICAgICAgICAgICBsdmxuYW1lID0gbG9nZ2luZy5nZXRMZXZlbE5hbWUobHZsKQorICAgICAgICAgICAgYTIubG9nKGx2bCwgJ0EgbWVzc2FnZSBhdCAlcyBsZXZlbCB3aXRoICVkICVzJywgbHZsbmFtZSwgMiwgJ3BhcmFtZXRlcnMnKQogCiB3aGljaCwgd2hlbiBydW4sIHByb2R1Y2VzIHNvbWV0aGluZyBsaWtlOjoKIApAQCAtNzAwLDEwICs3NjcsMTAgQEAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZWNvcmQgPSBxdWV1ZS5nZXQoKQotICAgICAgICAgICAgICAgIGlmIHJlY29yZCBpcyBOb25lOiAjIFdlIHNlbmQgdGhpcyBhcyBhIHNlbnRpbmVsIHRvIHRlbGwgdGhlIGxpc3RlbmVyIHRvIHF1aXQuCisgICAgICAgICAgICAgICAgaWYgcmVjb3JkIGlzIE5vbmU6ICAjIFdlIHNlbmQgdGhpcyBhcyBhIHNlbnRpbmVsIHRvIHRlbGwgdGhlIGxpc3RlbmVyIHRvIHF1aXQuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIocmVjb3JkLm5hbWUpCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShyZWNvcmQpICMgTm8gbGV2ZWwgb3IgZmlsdGVyIGxvZ2ljIGFwcGxpZWQgLSBqdXN0IGRvIGl0IQorICAgICAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUocmVjb3JkKSAgIyBObyBsZXZlbCBvciBmaWx0ZXIgbG9naWMgYXBwbGllZCAtIGp1c3QgZG8gaXQhCiAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIGltcG9ydCBzeXMsIHRyYWNlYmFjawogICAgICAgICAgICAgICAgIHByaW50KCdXaG9vcHMhIFByb2JsZW06JywgZmlsZT1zeXMuc3RkZXJyKQpAQCAtNzI2LDEwICs3OTMsMTEgQEAKICAgICAjIE5vdGUgdGhhdCBvbiBXaW5kb3dzIHlvdSBjYW4ndCByZWx5IG9uIGZvcmsgc2VtYW50aWNzLCBzbyBlYWNoIHByb2Nlc3MKICAgICAjIHdpbGwgcnVuIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY29kZSB3aGVuIGl0IHN0YXJ0cy4KICAgICBkZWYgd29ya2VyX2NvbmZpZ3VyZXIocXVldWUpOgotICAgICAgICBoID0gbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUhhbmRsZXIocXVldWUpICMgSnVzdCB0aGUgb25lIGhhbmRsZXIgbmVlZGVkCisgICAgICAgIGggPSBsb2dnaW5nLmhhbmRsZXJzLlF1ZXVlSGFuZGxlcihxdWV1ZSkgICMgSnVzdCB0aGUgb25lIGhhbmRsZXIgbmVlZGVkCiAgICAgICAgIHJvb3QgPSBsb2dnaW5nLmdldExvZ2dlcigpCiAgICAgICAgIHJvb3QuYWRkSGFuZGxlcihoKQotICAgICAgICByb290LnNldExldmVsKGxvZ2dpbmcuREVCVUcpICMgc2VuZCBhbGwgbWVzc2FnZXMsIGZvciBkZW1vOyBubyBvdGhlciBsZXZlbCBvciBmaWx0ZXIgbG9naWMgYXBwbGllZC4KKyAgICAgICAgIyBzZW5kIGFsbCBtZXNzYWdlcywgZm9yIGRlbW87IG5vIG90aGVyIGxldmVsIG9yIGZpbHRlciBsb2dpYyBhcHBsaWVkLgorICAgICAgICByb290LnNldExldmVsKGxvZ2dpbmcuREVCVUcpCiAKICAgICAjIFRoaXMgaXMgdGhlIHdvcmtlciBwcm9jZXNzIHRvcC1sZXZlbCBsb29wLCB3aGljaCBqdXN0IGxvZ3MgdGVuIGV2ZW50cyB3aXRoCiAgICAgIyByYW5kb20gaW50ZXJ2ZW5pbmcgZGVsYXlzIGJlZm9yZSB0ZXJtaW5hdGluZy4KQEAgLTc1Nyw3ICs4MjUsNyBAQAogICAgICAgICB3b3JrZXJzID0gW10KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgogICAgICAgICAgICAgd29ya2VyID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXdvcmtlcl9wcm9jZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHF1ZXVlLCB3b3JrZXJfY29uZmlndXJlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShxdWV1ZSwgd29ya2VyX2NvbmZpZ3VyZXIpKQogICAgICAgICAgICAgd29ya2Vycy5hcHBlbmQod29ya2VyKQogICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKICAgICAgICAgZm9yIHcgaW4gd29ya2VyczoKQEAgLTExODEsMTIgKzEyNDksMTIgQEAKIG9mIHF1ZXVlcywgZm9yIGV4YW1wbGUgYSBaZXJvTVEgJ3B1Ymxpc2gnIHNvY2tldC4gSW4gdGhlIGV4YW1wbGUgYmVsb3csdGhlCiBzb2NrZXQgaXMgY3JlYXRlZCBzZXBhcmF0ZWx5IGFuZCBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgKGFzIGl0cyAncXVldWUnKTo6CiAKLSAgICBpbXBvcnQgem1xICMgdXNpbmcgcHl6bXEsIHRoZSBQeXRob24gYmluZGluZyBmb3IgWmVyb01RCi0gICAgaW1wb3J0IGpzb24gIyBmb3Igc2VyaWFsaXppbmcgcmVjb3JkcyBwb3J0YWJseQorICAgIGltcG9ydCB6bXEgICAjIHVzaW5nIHB5em1xLCB0aGUgUHl0aG9uIGJpbmRpbmcgZm9yIFplcm9NUQorICAgIGltcG9ydCBqc29uICAjIGZvciBzZXJpYWxpemluZyByZWNvcmRzIHBvcnRhYmx5CiAKICAgICBjdHggPSB6bXEuQ29udGV4dCgpCi0gICAgc29jayA9IHptcS5Tb2NrZXQoY3R4LCB6bXEuUFVCKSAjIG9yIHptcS5QVVNILCBvciBvdGhlciBzdWl0YWJsZSB2YWx1ZQotICAgIHNvY2suYmluZCgndGNwOi8vKjo1NTU2JykgIyBvciB3aGVyZXZlcgorICAgIHNvY2sgPSB6bXEuU29ja2V0KGN0eCwgem1xLlBVQikgICMgb3Igem1xLlBVU0gsIG9yIG90aGVyIHN1aXRhYmxlIHZhbHVlCisgICAgc29jay5iaW5kKCd0Y3A6Ly8qOjU1NTYnKSAgICAgICAgIyBvciB3aGVyZXZlcgogCiAgICAgY2xhc3MgWmVyb01RU29ja2V0SGFuZGxlcihRdWV1ZUhhbmRsZXIpOgogICAgICAgICBkZWYgZW5xdWV1ZShzZWxmLCByZWNvcmQpOgpAQCAtMTIyNCw3ICsxMjkyLDcgQEAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVyaSwgKmhhbmRsZXJzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICBzZWxmLmN0eCA9IGt3YXJncy5nZXQoJ2N0eCcpIG9yIHptcS5Db250ZXh0KCkKICAgICAgICAgICAgIHNvY2tldCA9IHptcS5Tb2NrZXQoc2VsZi5jdHgsIHptcS5TVUIpCi0gICAgICAgICAgICBzb2NrZXQuc2V0c29ja29wdCh6bXEuU1VCU0NSSUJFLCAnJykgIyBzdWJzY3JpYmUgdG8gZXZlcnl0aGluZworICAgICAgICAgICAgc29ja2V0LnNldHNvY2tvcHQoem1xLlNVQlNDUklCRSwgJycpICAjIHN1YnNjcmliZSB0byBldmVyeXRoaW5nCiAgICAgICAgICAgICBzb2NrZXQuY29ubmVjdCh1cmkpCiAKICAgICAgICAgZGVmIGRlcXVldWUoc2VsZik6CkBAIC0xMjUyLDcgKzEzMjAsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQmVsb3cgaXMgYW4gZXhhbXBsZSBvZiBhIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IC0gaXQncyB0YWtlbiBmcm9tCi10aGUgYGRvY3VtZW50YXRpb24gb24gdGhlIERqYW5nbyBwcm9qZWN0IDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS4zL3RvcGljcy9sb2dnaW5nLyNjb25maWd1cmluZy1sb2dnaW5nPmBfLgordGhlIGBkb2N1bWVudGF0aW9uIG9uIHRoZSBEamFuZ28gcHJvamVjdCA8aHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuLzEuOS90b3BpY3MvbG9nZ2luZy8jY29uZmlndXJpbmctbG9nZ2luZz5gXy4KIFRoaXMgZGljdGlvbmFyeSBpcyBwYXNzZWQgdG8gOmZ1bmM6YH5jb25maWcuZGljdENvbmZpZ2AgdG8gcHV0IHRoZSBjb25maWd1cmF0aW9uIGludG8gZWZmZWN0OjoKIAogICAgIExPR0dJTkcgPSB7CkBAIC0xMzA4LDcgKzEzNzYsNyBAQAogICAgIH0KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjb25maWd1cmF0aW9uLCB5b3UgY2FuIHNlZSB0aGUgYHJlbGV2YW50Ci1zZWN0aW9uIDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS42L3RvcGljcy9sb2dnaW5nLyNjb25maWd1cmluZy1sb2dnaW5nPmBfCitzZWN0aW9uIDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS45L3RvcGljcy9sb2dnaW5nLyNjb25maWd1cmluZy1sb2dnaW5nPmBfCiBvZiB0aGUgRGphbmdvIGRvY3VtZW50YXRpb24uCiAKIC4uIF9jb29rYm9vay1yb3RhdG9yLW5hbWVyOgpAQCAtMTU3MCwxMSArMTYzOCwxMSBAQAogSW5zZXJ0aW5nIGEgQk9NIGludG8gbWVzc2FnZXMgc2VudCB0byBhIFN5c0xvZ0hhbmRsZXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWBSRkMgNTQyNCA8aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTQyND5gXyByZXF1aXJlcyB0aGF0IGEKK2BSRkMgNTQyNCA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU0MjQ+YF8gcmVxdWlyZXMgdGhhdCBhCiBVbmljb2RlIG1lc3NhZ2UgYmUgc2VudCB0byBhIHN5c2xvZyBkYWVtb24gYXMgYSBzZXQgb2YgYnl0ZXMgd2hpY2ggaGF2ZSB0aGUKIGZvbGxvd2luZyBzdHJ1Y3R1cmU6IGFuIG9wdGlvbmFsIHB1cmUtQVNDSUkgY29tcG9uZW50LCBmb2xsb3dlZCBieSBhIFVURi04IEJ5dGUKIE9yZGVyIE1hcmsgKEJPTSksIGZvbGxvd2VkIGJ5IFVuaWNvZGUgZW5jb2RlZCB1c2luZyBVVEYtOC4gKFNlZSB0aGUgYHJlbGV2YW50Ci1zZWN0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uIDxodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NDI0I3NlY3Rpb24tNj5gXy4pCitzZWN0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTQyNCNzZWN0aW9uLTY+YF8uKQogCiBJbiBQeXRob24gMy4xLCBjb2RlIHdhcyBhZGRlZCB0bwogOmNsYXNzOmB+bG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyYCB0byBpbnNlcnQgYSBCT00gaW50byB0aGUgbWVzc2FnZSwgYnV0CkBAIC0xNjgwLDcgKzE3NDgsNyBAQAogCiAgICAgZGVmIG1haW4oKToKICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLklORk8sIGZvcm1hdD0nJShtZXNzYWdlKXMnKQotICAgICAgICBsb2dnaW5nLmluZm8oXygnbWVzc2FnZSAxJywgc2V0X3ZhbHVlPXNldChbMSwgMiwgM10pLCBzbm93bWFuPSdcdTI2MDMnKSkKKyAgICAgICAgbG9nZ2luZy5pbmZvKF8oJ21lc3NhZ2UgMScsIHNldF92YWx1ZT17MSwgMiwgM30sIHNub3dtYW49J1x1MjYwMycpKQogCiAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgbWFpbigpCkBAIC0xNzk0LDcgKzE4NjIsOSBAQAogICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdteWxvZ2dlcicpCiAgICAgbG9nZ2VyLmRlYnVnKCdBIGRlYnVnIG1lc3NhZ2UnKQogCi1UbyBydW4gdGhpcywgeW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBydW4gYXMgYGByb290YGA6OgorVG8gcnVuIHRoaXMsIHlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gcnVuIGFzIGBgcm9vdGBgOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBzdWRvIHB5dGhvbjMuMyBjaG93bnRlc3QucHkKICAgICAkIGNhdCBjaG93bnRlc3QubG9nCkBAIC0yMDUyLDcgKzIxMjIsNyBAQAogICAgICAgICAgICAgRm9ybWF0IGFuIGV4Y2VwdGlvbiBzbyB0aGF0IGl0IHByaW50cyBvbiBhIHNpbmdsZSBsaW5lLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICByZXN1bHQgPSBzdXBlcihPbmVMaW5lRXhjZXB0aW9uRm9ybWF0dGVyLCBzZWxmKS5mb3JtYXRFeGNlcHRpb24oZXhjX2luZm8pCi0gICAgICAgICAgICByZXR1cm4gcmVwcihyZXN1bHQpICMgb3IgZm9ybWF0IGludG8gb25lIGxpbmUgaG93ZXZlciB5b3Ugd2FudCB0bworICAgICAgICAgICAgcmV0dXJuIHJlcHIocmVzdWx0KSAgIyBvciBmb3JtYXQgaW50byBvbmUgbGluZSBob3dldmVyIHlvdSB3YW50IHRvCiAKICAgICAgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgogICAgICAgICAgICAgcyA9IHN1cGVyKE9uZUxpbmVFeGNlcHRpb25Gb3JtYXR0ZXIsIHNlbGYpLmZvcm1hdChyZWNvcmQpCkBAIC0yMTY3LDcgKzIyMzcsNyBAQAogCiBUaGUgZXhhbXBsZSBzY3JpcHQgaGFzIGEgc2ltcGxlIGZ1bmN0aW9uLCBgYGZvb2BgLCB3aGljaCBqdXN0IGN5Y2xlcyB0aHJvdWdoCiBhbGwgdGhlIGxvZ2dpbmcgbGV2ZWxzLCB3cml0aW5nIHRvIGBgc3lzLnN0ZGVycmBgIHRvIHNheSB3aGF0IGxldmVsIGl0J3MgYWJvdXQKLXRvIGxvZyBhdCwgYW5kIHRoZW4gYWN0dWFsbHkgbG9nZ2luZyBhIG1lc3NhZ2UgdGhhdCB0aGF0IGxldmVsLiBZb3UgY2FuIHBhc3MgYQordG8gbG9nIGF0LCBhbmQgdGhlbiBhY3R1YWxseSBsb2dnaW5nIGEgbWVzc2FnZSBhdCB0aGF0IGxldmVsLiBZb3UgY2FuIHBhc3MgYQogcGFyYW1ldGVyIHRvIGBgZm9vYGAgd2hpY2gsIGlmIHRydWUsIHdpbGwgbG9nIGF0IEVSUk9SIGFuZCBDUklUSUNBTCBsZXZlbHMgLQogb3RoZXJ3aXNlLCBpdCBvbmx5IGxvZ3MgYXQgREVCVUcsIElORk8gYW5kIFdBUk5JTkcgbGV2ZWxzLgogCkBAIC0yMzQ1LDMgKzI0MTUsMTExIEBACiAKIHNob3dpbmcgaG93IHRoZSB0aW1lIGlzIGZvcm1hdHRlZCBib3RoIGFzIGxvY2FsIHRpbWUgYW5kIFVUQywgb25lIGZvciBlYWNoCiBoYW5kbGVyLgorCisKKy4uIF9jb250ZXh0LW1hbmFnZXI6CisKK1VzaW5nIGEgY29udGV4dCBtYW5hZ2VyIGZvciBzZWxlY3RpdmUgbG9nZ2luZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSB0aW1lcyB3aGVuIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byB0ZW1wb3JhcmlseSBjaGFuZ2UgdGhlIGxvZ2dpbmcKK2NvbmZpZ3VyYXRpb24gYW5kIHJldmVydCBpdCBiYWNrIGFmdGVyIGRvaW5nIHNvbWV0aGluZy4gRm9yIHRoaXMsIGEgY29udGV4dAorbWFuYWdlciBpcyB0aGUgbW9zdCBvYnZpb3VzIHdheSBvZiBzYXZpbmcgYW5kIHJlc3RvcmluZyB0aGUgbG9nZ2luZyBjb250ZXh0LgorSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIG9mIHN1Y2ggYSBjb250ZXh0IG1hbmFnZXIsIHdoaWNoIGFsbG93cyB5b3UgdG8KK29wdGlvbmFsbHkgY2hhbmdlIHRoZSBsb2dnaW5nIGxldmVsIGFuZCBhZGQgYSBsb2dnaW5nIGhhbmRsZXIgcHVyZWx5IGluIHRoZQorc2NvcGUgb2YgdGhlIGNvbnRleHQgbWFuYWdlcjo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIGltcG9ydCBzeXMKKworICAgIGNsYXNzIExvZ2dpbmdDb250ZXh0KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIsIGxldmVsPU5vbmUsIGhhbmRsZXI9Tm9uZSwgY2xvc2U9VHJ1ZSk6CisgICAgICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgICAgICAgICAgc2VsZi5sZXZlbCA9IGxldmVsCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBzZWxmLmNsb3NlID0gY2xvc2UKKworICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5sZXZlbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLm9sZF9sZXZlbCA9IHNlbGYubG9nZ2VyLmxldmVsCisgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuc2V0TGV2ZWwoc2VsZi5sZXZlbCkKKyAgICAgICAgICAgIGlmIHNlbGYuaGFuZGxlcjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlci5hZGRIYW5kbGVyKHNlbGYuaGFuZGxlcikKKworICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgZXQsIGV2LCB0Yik6CisgICAgICAgICAgICBpZiBzZWxmLmxldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKHNlbGYub2xkX2xldmVsKQorICAgICAgICAgICAgaWYgc2VsZi5oYW5kbGVyOgorICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5oYW5kbGVyKQorICAgICAgICAgICAgaWYgc2VsZi5oYW5kbGVyIGFuZCBzZWxmLmNsb3NlOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlci5jbG9zZSgpCisgICAgICAgICAgICAjIGltcGxpY2l0IHJldHVybiBvZiBOb25lID0+IGRvbid0IHN3YWxsb3cgZXhjZXB0aW9ucworCitJZiB5b3Ugc3BlY2lmeSBhIGxldmVsIHZhbHVlLCB0aGUgbG9nZ2VyJ3MgbGV2ZWwgaXMgc2V0IHRvIHRoYXQgdmFsdWUgaW4gdGhlCitzY29wZSBvZiB0aGUgd2l0aCBibG9jayBjb3ZlcmVkIGJ5IHRoZSBjb250ZXh0IG1hbmFnZXIuIElmIHlvdSBzcGVjaWZ5IGEKK2hhbmRsZXIsIGl0IGlzIGFkZGVkIHRvIHRoZSBsb2dnZXIgb24gZW50cnkgdG8gdGhlIGJsb2NrIGFuZCByZW1vdmVkIG9uIGV4aXQKK2Zyb20gdGhlIGJsb2NrLiBZb3UgY2FuIGFsc28gYXNrIHRoZSBtYW5hZ2VyIHRvIGNsb3NlIHRoZSBoYW5kbGVyIGZvciB5b3Ugb24KK2Jsb2NrIGV4aXQgLSB5b3UgY291bGQgZG8gdGhpcyBpZiB5b3UgZG9uJ3QgbmVlZCB0aGUgaGFuZGxlciBhbnkgbW9yZS4KKworVG8gaWxsdXN0cmF0ZSBob3cgaXQgd29ya3MsIHdlIGNhbiBhZGQgdGhlIGZvbGxvd2luZyBibG9jayBvZiBjb2RlIHRvIHRoZQorYWJvdmU6OgorCisgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpKQorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgICAgICBsb2dnZXIuaW5mbygnMS4gVGhpcyBzaG91bGQgYXBwZWFyIGp1c3Qgb25jZSBvbiBzdGRlcnIuJykKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCcyLiBUaGlzIHNob3VsZCBub3QgYXBwZWFyLicpCisgICAgICAgIHdpdGggTG9nZ2luZ0NvbnRleHQobG9nZ2VyLCBsZXZlbD1sb2dnaW5nLkRFQlVHKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnMy4gVGhpcyBzaG91bGQgYXBwZWFyIG9uY2Ugb24gc3RkZXJyLicpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnNC4gVGhpcyBzaG91bGQgbm90IGFwcGVhci4nKQorICAgICAgICBoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgICAgIHdpdGggTG9nZ2luZ0NvbnRleHQobG9nZ2VyLCBsZXZlbD1sb2dnaW5nLkRFQlVHLCBoYW5kbGVyPWgsIGNsb3NlPVRydWUpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCc1LiBUaGlzIHNob3VsZCBhcHBlYXIgdHdpY2UgLSBvbmNlIG9uIHN0ZGVyciBhbmQgb25jZSBvbiBzdGRvdXQuJykKKyAgICAgICAgbG9nZ2VyLmluZm8oJzYuIFRoaXMgc2hvdWxkIGFwcGVhciBqdXN0IG9uY2Ugb24gc3RkZXJyLicpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnNy4gVGhpcyBzaG91bGQgbm90IGFwcGVhci4nKQorCitXZSBpbml0aWFsbHkgc2V0IHRoZSBsb2dnZXIncyBsZXZlbCB0byBgYElORk9gYCwgc28gbWVzc2FnZSAjMSBhcHBlYXJzIGFuZAorbWVzc2FnZSAjMiBkb2Vzbid0LiBXZSB0aGVuIGNoYW5nZSB0aGUgbGV2ZWwgdG8gYGBERUJVR2BgIHRlbXBvcmFyaWx5IGluIHRoZQorZm9sbG93aW5nIGBgd2l0aGBgIGJsb2NrLCBhbmQgc28gbWVzc2FnZSAjMyBhcHBlYXJzLiBBZnRlciB0aGUgYmxvY2sgZXhpdHMsIHRoZQorbG9nZ2VyJ3MgbGV2ZWwgaXMgcmVzdG9yZWQgdG8gYGBJTkZPYGAgYW5kIHNvIG1lc3NhZ2UgIzQgZG9lc24ndCBhcHBlYXIuIEluIHRoZQorbmV4dCBgYHdpdGhgYCBibG9jaywgd2Ugc2V0IHRoZSBsZXZlbCB0byBgYERFQlVHYGAgYWdhaW4gYnV0IGFsc28gYWRkIGEgaGFuZGxlcgord3JpdGluZyB0byBgYHN5cy5zdGRvdXRgYC4gVGh1cywgbWVzc2FnZSAjNSBhcHBlYXJzIHR3aWNlIG9uIHRoZSBjb25zb2xlIChvbmNlCit2aWEgYGBzdGRlcnJgYCBhbmQgb25jZSB2aWEgYGBzdGRvdXRgYCkuIEFmdGVyIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQncworY29tcGxldGlvbiwgdGhlIHN0YXR1cyBpcyBhcyBpdCB3YXMgYmVmb3JlIHNvIG1lc3NhZ2UgIzYgYXBwZWFycyAobGlrZSBtZXNzYWdlCisjMSkgd2hlcmVhcyBtZXNzYWdlICM3IGRvZXNuJ3QgKGp1c3QgbGlrZSBtZXNzYWdlICMyKS4KKworSWYgd2UgcnVuIHRoZSByZXN1bHRpbmcgc2NyaXB0LCB0aGUgcmVzdWx0IGlzIGFzIGZvbGxvd3M6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCisKKyAgICAkIHB5dGhvbiBsb2djdHgucHkKKyAgICAxLiBUaGlzIHNob3VsZCBhcHBlYXIganVzdCBvbmNlIG9uIHN0ZGVyci4KKyAgICAzLiBUaGlzIHNob3VsZCBhcHBlYXIgb25jZSBvbiBzdGRlcnIuCisgICAgNS4gVGhpcyBzaG91bGQgYXBwZWFyIHR3aWNlIC0gb25jZSBvbiBzdGRlcnIgYW5kIG9uY2Ugb24gc3Rkb3V0LgorICAgIDUuIFRoaXMgc2hvdWxkIGFwcGVhciB0d2ljZSAtIG9uY2Ugb24gc3RkZXJyIGFuZCBvbmNlIG9uIHN0ZG91dC4KKyAgICA2LiBUaGlzIHNob3VsZCBhcHBlYXIganVzdCBvbmNlIG9uIHN0ZGVyci4KKworSWYgd2UgcnVuIGl0IGFnYWluLCBidXQgcGlwZSBgYHN0ZGVycmBgIHRvIGBgL2Rldi9udWxsYGAsIHdlIHNlZSB0aGUgZm9sbG93aW5nLAord2hpY2ggaXMgdGhlIG9ubHkgbWVzc2FnZSB3cml0dGVuIHRvIGBgc3Rkb3V0YGA6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCisKKyAgICAkIHB5dGhvbiBsb2djdHgucHkgMj4vZGV2L251bGwKKyAgICA1LiBUaGlzIHNob3VsZCBhcHBlYXIgdHdpY2UgLSBvbmNlIG9uIHN0ZGVyciBhbmQgb25jZSBvbiBzdGRvdXQuCisKK09uY2UgYWdhaW4sIGJ1dCBwaXBpbmcgYGBzdGRvdXRgYCB0byBgYC9kZXYvbnVsbGBgLCB3ZSBnZXQ6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCisKKyAgICAkIHB5dGhvbiBsb2djdHgucHkgPi9kZXYvbnVsbAorICAgIDEuIFRoaXMgc2hvdWxkIGFwcGVhciBqdXN0IG9uY2Ugb24gc3RkZXJyLgorICAgIDMuIFRoaXMgc2hvdWxkIGFwcGVhciBvbmNlIG9uIHN0ZGVyci4KKyAgICA1LiBUaGlzIHNob3VsZCBhcHBlYXIgdHdpY2UgLSBvbmNlIG9uIHN0ZGVyciBhbmQgb25jZSBvbiBzdGRvdXQuCisgICAgNi4gVGhpcyBzaG91bGQgYXBwZWFyIGp1c3Qgb25jZSBvbiBzdGRlcnIuCisKK0luIHRoaXMgY2FzZSwgdGhlIG1lc3NhZ2UgIzUgcHJpbnRlZCB0byBgYHN0ZG91dGBgIGRvZXNuJ3QgYXBwZWFyLCBhcyBleHBlY3RlZC4KKworT2YgY291cnNlLCB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGhlcmUgY2FuIGJlIGdlbmVyYWxpc2VkLCBmb3IgZXhhbXBsZSB0byBhdHRhY2gKK2xvZ2dpbmcgZmlsdGVycyB0ZW1wb3JhcmlseS4gTm90ZSB0aGF0IHRoZSBhYm92ZSBjb2RlIHdvcmtzIGluIFB5dGhvbiAyIGFzIHdlbGwKK2FzIFB5dGhvbiAzLgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2xvZ2dpbmcucnN0IGIvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CmluZGV4IDRjZTE0ZjkuLjgyZDEzMDggMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9sb2dnaW5nLnJzdAorKysgYi9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKQEAgLTEwMywxMCArMTAzLDEyIEBACiBBIHZlcnkgc2ltcGxlIGV4YW1wbGUgaXM6OgogCiAgICBpbXBvcnQgbG9nZ2luZwotICAgbG9nZ2luZy53YXJuaW5nKCdXYXRjaCBvdXQhJykgIyB3aWxsIHByaW50IGEgbWVzc2FnZSB0byB0aGUgY29uc29sZQotICAgbG9nZ2luZy5pbmZvKCdJIHRvbGQgeW91IHNvJykgIyB3aWxsIG5vdCBwcmludCBhbnl0aGluZworICAgbG9nZ2luZy53YXJuaW5nKCdXYXRjaCBvdXQhJykgICMgd2lsbCBwcmludCBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUKKyAgIGxvZ2dpbmcuaW5mbygnSSB0b2xkIHlvdSBzbycpICAjIHdpbGwgbm90IHByaW50IGFueXRoaW5nCiAKLUlmIHlvdSB0eXBlIHRoZXNlIGxpbmVzIGludG8gYSBzY3JpcHQgYW5kIHJ1biBpdCwgeW91J2xsIHNlZTo6CitJZiB5b3UgdHlwZSB0aGVzZSBsaW5lcyBpbnRvIGEgc2NyaXB0IGFuZCBydW4gaXQsIHlvdSdsbCBzZWU6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCiAKICAgIFdBUk5JTkc6cm9vdDpXYXRjaCBvdXQhCiAKQEAgLTIzMCw3ICsyMzIsOSBAQAogICAgaW1wb3J0IGxvZ2dpbmcKICAgIGxvZ2dpbmcud2FybmluZygnJXMgYmVmb3JlIHlvdSAlcycsICdMb29rJywgJ2xlYXAhJykKIAotd2lsbCBkaXNwbGF5OjoKK3dpbGwgZGlzcGxheToKKworLi4gY29kZS1ibG9jazo6IG5vbmUKIAogICAgV0FSTklORzpyb290Okxvb2sgYmVmb3JlIHlvdSBsZWFwIQogCkBAIC0zMTAsNyArMzE0LDcgQEAKIElmIHlvdXIgbG9nZ2luZyBuZWVkcyBhcmUgc2ltcGxlLCB0aGVuIHVzZSB0aGUgYWJvdmUgZXhhbXBsZXMgdG8gaW5jb3Jwb3JhdGUKIGxvZ2dpbmcgaW50byB5b3VyIG93biBzY3JpcHRzLCBhbmQgaWYgeW91IHJ1biBpbnRvIHByb2JsZW1zIG9yIGRvbid0CiB1bmRlcnN0YW5kIHNvbWV0aGluZywgcGxlYXNlIHBvc3QgYSBxdWVzdGlvbiBvbiB0aGUgY29tcC5sYW5nLnB5dGhvbiBVc2VuZXQKLWdyb3VwIChhdmFpbGFibGUgYXQgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2NvbXAubGFuZy5weXRob24pIGFuZCB5b3UKK2dyb3VwIChhdmFpbGFibGUgYXQgaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb21wLmxhbmcucHl0aG9uKSBhbmQgeW91CiBzaG91bGQgcmVjZWl2ZSBoZWxwIGJlZm9yZSB0b28gbG9uZy4KIAogU3RpbGwgaGVyZT8gWW91IGNhbiBjYXJyeSBvbiByZWFkaW5nIHRoZSBuZXh0IGZldyBzZWN0aW9ucywgd2hpY2ggcHJvdmlkZSBhCkBAIC01OTQsNyArNTk4LDkgQEAKICAgICBsb2dnZXIuZXJyb3IoJ2Vycm9yIG1lc3NhZ2UnKQogICAgIGxvZ2dlci5jcml0aWNhbCgnY3JpdGljYWwgbWVzc2FnZScpCiAKLVJ1bm5pbmcgdGhpcyBtb2R1bGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjoKK1J1bm5pbmcgdGhpcyBtb2R1bGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0OgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gc2ltcGxlX2xvZ2dpbmdfbW9kdWxlLnB5CiAgICAgMjAwNS0wMy0xOSAxNToxMDoyNiw2MTggLSBzaW1wbGVfZXhhbXBsZSAtIERFQlVHIC0gZGVidWcgbWVzc2FnZQpAQCAtNjUzLDcgKzY1OSw5IEBACiAgICAgZm9ybWF0PSUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMKICAgICBkYXRlZm10PQogCi1UaGUgb3V0cHV0IGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhhdCBvZiB0aGUgbm9uLWNvbmZpZy1maWxlLWJhc2VkIGV4YW1wbGU6OgorVGhlIG91dHB1dCBpcyBuZWFybHkgaWRlbnRpY2FsIHRvIHRoYXQgb2YgdGhlIG5vbi1jb25maWctZmlsZS1iYXNlZCBleGFtcGxlOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gc2ltcGxlX2xvZ2dpbmdfY29uZmlnLnB5CiAgICAgMjAwNS0wMy0xOSAxNTozODo1NSw5NzcgLSBzaW1wbGVFeGFtcGxlIC0gREVCVUcgLSBkZWJ1ZyBtZXNzYWdlCkBAIC0xMDczLDQgKzEwODEsMyBAQAogICAgICAgVXNlZnVsIGhhbmRsZXJzIGluY2x1ZGVkIHdpdGggdGhlIGxvZ2dpbmcgbW9kdWxlLgogCiAgICA6cmVmOmBBIGxvZ2dpbmcgY29va2Jvb2sgPGxvZ2dpbmctY29va2Jvb2s+YAotCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vcHlwb3J0aW5nLnJzdCBiL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CmluZGV4IDVlODc1Y2QuLmM0NzlmMjIgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CisrKyBiL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CkBAIC0yMDcsMTMgKzIwNywxMiBAQAogdGFibGUgbGlzdHMgdGhlICoqdW5pcXVlKiogbWV0aG9kcyBvZiBlYWNoIGRhdGEgdHlwZSBhY3Jvc3MgUHl0aG9uIDIgJiAzCiAoZS5nLiwgdGhlIGBgZGVjb2RlKClgYCBtZXRob2QgaXMgdXNhYmxlIG9uIHRoZSBlcXVpdmFsZW50IGJpbmFyeSBkYXRhIHR5cGUgaW4KIGVpdGhlciBQeXRob24gMiBvciAzLCBidXQgaXQgY2FuJ3QgYmUgdXNlZCBieSB0aGUgdGV4dCBkYXRhIHR5cGUgY29uc2lzdGVudGx5Ci1iZXR3ZWVuIFB5dGhvbiAyIGFuZCAzIGJlY2F1c2UgYGBzdHJgYCBpbiBQeXRob24gMyBkb2Vzbid0IGhhdmUgdGhlIG1ldGhvZCkuCitiZXR3ZWVuIFB5dGhvbiAyIGFuZCAzIGJlY2F1c2UgYGBzdHJgYCBpbiBQeXRob24gMyBkb2Vzbid0IGhhdmUgdGhlIG1ldGhvZCkuIERvCitub3RlIHRoYXQgYXMgb2YgUHl0aG9uIDMuNSB0aGUgYGBfX21vZF9fYGAgbWV0aG9kIHdhcyBhZGRlZCB0byB0aGUgYnl0ZXMgdHlwZS4KIAogPT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PQogKipUZXh0IGRhdGEqKiAgICAgICAgICAgICoqQmluYXJ5IGRhdGEqKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotX19tb2RfXyAoYGAlYGAgb3BlcmF0b3IpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBcICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBlbmNvZGUKQEAgLTI0NCw4ICsyNDMsOCBAQAogYmluYXJ5IHJlYWRpbmcpLiAgVW5kZXIgUHl0aG9uIDMsIGJpbmFyeSBmaWxlcyBhbmQgdGV4dCBmaWxlcyBhcmUgY2xlYXJseQogZGlzdGluY3QgYW5kIG11dHVhbGx5IGluY29tcGF0aWJsZTsgc2VlIHRoZSA6bW9kOmBpb2AgbW9kdWxlIGZvciBkZXRhaWxzLgogVGhlcmVmb3JlLCB5b3UgKiptdXN0KiogbWFrZSBhIGRlY2lzaW9uIG9mIHdoZXRoZXIgYSBmaWxlIHdpbGwgYmUgdXNlZCBmb3IKLWJpbmFyeSBhY2Nlc3MgKGFsbG93aW5nIHRvIHJlYWQgYW5kL29yIHdyaXRlIGJpbmFyeSBkYXRhKSBvciB0ZXh0IGFjY2VzcwotKGFsbG93aW5nIHRvIHJlYWQgYW5kL29yIHdyaXRlIHRleHQgZGF0YSkuIFlvdSBzaG91bGQgYWxzbyB1c2UgOmZ1bmM6YGlvLm9wZW5gCitiaW5hcnkgYWNjZXNzIChhbGxvd2luZyBiaW5hcnkgZGF0YSB0byBiZSByZWFkIGFuZC9vciB3cml0dGVuKSBvciB0ZXh0IGFjY2VzcworKGFsbG93aW5nIHRleHQgZGF0YSB0byBiZSByZWFkIGFuZC9vciB3cml0dGVuKS4gWW91IHNob3VsZCBhbHNvIHVzZSA6ZnVuYzpgaW8ub3BlbmAKIGZvciBvcGVuaW5nIGZpbGVzIGluc3RlYWQgb2YgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbiBhcyB0aGUgOm1vZDpgaW9gCiBtb2R1bGUgaXMgY29uc2lzdGVudCBmcm9tIFB5dGhvbiAyIHRvIDMgd2hpbGUgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbgogaXMgbm90IChpbiBQeXRob24gMyBpdCdzIGFjdHVhbGx5IDpmdW5jOmBpby5vcGVuYCkuCkBAIC0yODMsNiArMjgyLDUwIEBACiAgICBhcHByb3ByaWF0ZQogIy4gQmUgY2FyZWZ1bCB3aGVuIGluZGV4aW5nIGJpbmFyeSBkYXRhCiAKKworVXNlIGZlYXR1cmUgZGV0ZWN0aW9uIGluc3RlYWQgb2YgdmVyc2lvbiBkZXRlY3Rpb24KKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitJbmV2aXRhYmx5IHlvdSB3aWxsIGhhdmUgY29kZSB0aGF0IGhhcyB0byBjaG9vc2Ugd2hhdCB0byBkbyBiYXNlZCBvbiB3aGF0Cit2ZXJzaW9uIG9mIFB5dGhvbiBpcyBydW5uaW5nLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoIGZlYXR1cmUgZGV0ZWN0aW9uCitvZiB3aGV0aGVyIHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB5b3UncmUgcnVubmluZyB1bmRlciBzdXBwb3J0cyB3aGF0IHlvdSBuZWVkLgorSWYgZm9yIHNvbWUgcmVhc29uIHRoYXQgZG9lc24ndCB3b3JrIHRoZW4geW91IHNob3VsZCBtYWtlIHRoZSB2ZXJzaW9uIGNoZWNrIGlzCithZ2FpbnN0IFB5dGhvbiAyIGFuZCBub3QgUHl0aG9uIDMuIFRvIGhlbHAgZXhwbGFpbiB0aGlzLCBsZXQncyBsb29rIGF0IGFuCitleGFtcGxlLgorCitMZXQncyBwcmV0ZW5kIHRoYXQgeW91IG5lZWQgYWNjZXNzIHRvIGEgZmVhdHVyZSBvZiBpbXBvcnRsaWJfIHRoYXQKK2lzIGF2YWlsYWJsZSBpbiBQeXRob24ncyBzdGFuZGFyZCBsaWJyYXJ5IHNpbmNlIFB5dGhvbiAzLjMgYW5kIGF2YWlsYWJsZSBmb3IKK1B5dGhvbiAyIHRocm91Z2ggaW1wb3J0bGliMl8gb24gUHlQSS4gWW91IG1pZ2h0IGJlIHRlbXB0ZWQgdG8gd3JpdGUgY29kZSB0bworYWNjZXNzIGUuZy4gdGhlIGBgaW1wb3J0bGliLmFiY2BgIG1vZHVsZSBieSBkb2luZyB0aGUgZm9sbG93aW5nOjoKKworICBpbXBvcnQgc3lzCisKKyAgaWYgc3lzLnZlcnNpb25bMF0gPT0gMzoKKyAgICAgIGZyb20gaW1wb3J0bGliIGltcG9ydCBhYmMKKyAgZWxzZToKKyAgICAgIGZyb20gaW1wb3J0bGliMiBpbXBvcnQgYWJjCisKK1RoZSBwcm9ibGVtIHdpdGggdGhpcyBjb2RlIGlzIHdoYXQgaGFwcGVucyB3aGVuIFB5dGhvbiA0IGNvbWVzIG91dD8gSXQgd291bGQKK2JlIGJldHRlciB0byB0cmVhdCBQeXRob24gMiBhcyB0aGUgZXhjZXB0aW9uYWwgY2FzZSBpbnN0ZWFkIG9mIFB5dGhvbiAzIGFuZAorYXNzdW1lIHRoYXQgZnV0dXJlIFB5dGhvbiB2ZXJzaW9ucyB3aWxsIGJlIG1vcmUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzIHRoYW4KK1B5dGhvbiAyOjoKKworICBpbXBvcnQgc3lzCisKKyAgaWYgc3lzLnZlcnNpb25bMF0gPiAyOgorICAgICAgZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYworICBlbHNlOgorICAgICAgZnJvbSBpbXBvcnRsaWIyIGltcG9ydCBhYmMKKworVGhlIGJlc3Qgc29sdXRpb24sIHRob3VnaCwgaXMgdG8gZG8gbm8gdmVyc2lvbiBkZXRlY3Rpb24gYXQgYWxsIGFuZCBpbnN0ZWFkIHJlbHkKK29uIGZlYXR1cmUgZGV0ZWN0aW9uLiBUaGF0IGF2b2lkcyBhbnkgcG90ZW50aWFsIGlzc3VlcyBvZiBnZXR0aW5nIHRoZSB2ZXJzaW9uCitkZXRlY3Rpb24gd3JvbmcgYW5kIGhlbHBzIGtlZXAgeW91IGZ1dHVyZS1jb21wYXRpYmxlOjoKKworICB0cnk6CisgICAgICBmcm9tIGltcG9ydGxpYiBpbXBvcnQgYWJjCisgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgIGZyb20gaW1wb3J0bGliMiBpbXBvcnQgYWJjCisKKwogUHJldmVudCBjb21wYXRpYmlsaXR5IHJlZ3Jlc3Npb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzQ3LDExICszOTAsMTMgQEAKIHRveCB3aXRoIHlvdXIgY29udGludW91cyBpbnRlZ3JhdGlvbiBzeXN0ZW0gc28gdGhhdCB5b3UgbmV2ZXIgYWNjaWRlbnRhbGx5IGJyZWFrCiBQeXRob24gMiBvciAzIHN1cHBvcnQuCiAKLVlvdSBtYXkgYWxzbyB3YW50IHRvIHVzZSB1c2UgdGhlIGBgLWJiYGAgZmxhZyB3aXRoIHRoZSBQeXRob24gMyBpbnRlcnByZXRlciB0bwotdHJpZ2dlciBhbiBleGNlcHRpb24gd2hlbiB5b3UgYXJlIGNvbXBhcmluZyBieXRlcyB0byBzdHJpbmdzLiBVc3VhbGx5IGl0J3MKLXNpbXBseSBgYEZhbHNlYGAsIGJ1dCBpZiB5b3UgbWFkZSBhIG1pc3Rha2UgaW4geW91ciBzZXBhcmF0aW9uIG9mIHRleHQvYmluYXJ5Ci1kYXRhIGhhbmRsaW5nIHlvdSBtYXkgYmUgYWNjaWRlbnRhbGx5IGNvbXBhcmluZyB0ZXh0IGFuZCBiaW5hcnkgZGF0YS4gVGhpcyBmbGFnCi13aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoYXQgb2NjdXJzIHRvIGhlbHAgdHJhY2sgZG93biBzdWNoIGNhc2VzLgorWW91IG1heSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBgYC1iYmBgIGZsYWcgd2l0aCB0aGUgUHl0aG9uIDMgaW50ZXJwcmV0ZXIgdG8KK3RyaWdnZXIgYW4gZXhjZXB0aW9uIHdoZW4geW91IGFyZSBjb21wYXJpbmcgYnl0ZXMgdG8gc3RyaW5ncyBvciBieXRlcyB0byBhbiBpbnQKKyh0aGUgbGF0dGVyIGlzIGF2YWlsYWJsZSBzdGFydGluZyBpbiBQeXRob24gMy41KS4gQnkgZGVmYXVsdCB0eXBlLWRpZmZlcmluZworY29tcGFyaXNvbnMgc2ltcGx5IHJldHVybiBgYEZhbHNlYGAsIGJ1dCBpZiB5b3UgbWFkZSBhIG1pc3Rha2UgaW4geW91cgorc2VwYXJhdGlvbiBvZiB0ZXh0L2JpbmFyeSBkYXRhIGhhbmRsaW5nIG9yIGluZGV4aW5nIG9uIGJ5dGVzIHlvdSB3b3VsZG4ndCBlYXNpbHkKK2ZpbmQgdGhlIG1pc3Rha2UuIFRoaXMgZmxhZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZXNlIGtpbmRzIG9mCitjb21wYXJpc29ucyBvY2N1ciwgbWFraW5nIHRoZSBtaXN0YWtlIG11Y2ggZWFzaWVyIHRvIHRyYWNrIGRvd24uCiAKIEFuZCB0aGF0J3MgbW9zdGx5IGl0ISBBdCB0aGlzIHBvaW50IHlvdXIgY29kZSBiYXNlIGlzIGNvbXBhdGlibGUgd2l0aCBib3RoCiBQeXRob24gMiBhbmQgMyBzaW11bHRhbmVvdXNseS4gWW91ciB0ZXN0aW5nIHdpbGwgYWxzbyBiZSBzZXQgdXAgc28gdGhhdCB5b3UKQEAgLTM4MCwxMCArNDI1LDEyIEBACiAuLiBfY2hlYXQgc2hlZXQ6IGh0dHA6Ly9weXRob24tZnV0dXJlLm9yZy9jb21wYXRpYmxlX2lkaW9tcy5odG1sCiAuLiBfY292ZXJhZ2UucHk6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY292ZXJhZ2UKIC4uIF9GdXR1cml6ZTogaHR0cDovL3B5dGhvbi1mdXR1cmUub3JnL2F1dG9tYXRpY19jb252ZXJzaW9uLmh0bWwKLS4uIF9Nb2Rlcm5pemU6IGh0dHA6Ly9weXRob24tbW9kZXJuaXplLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvCisuLiBfaW1wb3J0bGliOiBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvaW1wb3J0bGliLmh0bWwjbW9kdWxlLWltcG9ydGxpYgorLi4gX2ltcG9ydGxpYjI6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvaW1wb3J0bGliMgorLi4gX01vZGVybml6ZTogaHR0cHM6Ly9weXRob24tbW9kZXJuaXplLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvCiAuLiBfUG9ydGluZyB0byBQeXRob24gMzogaHR0cDovL3B5dGhvbjNwb3J0aW5nLmNvbS8KIC4uIF9QeWxpbnQ6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcHlsaW50Ci0uLiBfUHl0aG9uIDMgUSAmIEE6IGh0dHA6Ly9uY29naGxhbi1kZXZzLXB5dGhvbi1ub3Rlcy5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L3B5dGhvbjMvcXVlc3Rpb25zX2FuZF9hbnN3ZXJzLmh0bWwKKy4uIF9QeXRob24gMyBRICYgQTogaHR0cHM6Ly9uY29naGxhbi1kZXZzLXB5dGhvbi1ub3Rlcy5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L3B5dGhvbjMvcXVlc3Rpb25zX2FuZF9hbnN3ZXJzLmh0bWwKIAogLi4gX3B5dGhvbi1mdXR1cmU6IGh0dHA6Ly9weXRob24tZnV0dXJlLm9yZy8KIC4uIF9weXRob24tcG9ydGluZzogaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRob24tcG9ydGluZwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3JlZ2V4LnJzdCBiL0RvYy9ob3d0by9yZWdleC5yc3QKaW5kZXggOWFlMDRkNy4uZDliN2M5MCAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3JlZ2V4LnJzdAorKysgYi9Eb2MvaG93dG8vcmVnZXgucnN0CkBAIC03NCw3ICs3NCw5IEBACiBkZXZvdGVkIHRvIGRpc2N1c3NpbmcgdmFyaW91cyBtZXRhY2hhcmFjdGVycyBhbmQgd2hhdCB0aGV5IGRvLgogCiBIZXJlJ3MgYSBjb21wbGV0ZSBsaXN0IG9mIHRoZSBtZXRhY2hhcmFjdGVyczsgdGhlaXIgbWVhbmluZ3Mgd2lsbCBiZSBkaXNjdXNzZWQKLWluIHRoZSByZXN0IG9mIHRoaXMgSE9XVE8uIDo6CitpbiB0aGUgcmVzdCBvZiB0aGlzIEhPV1RPLgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICAuIF4gJCAqICsgPyB7IH0gWyBdIFwgfCAoICkKIApAQCAtMTc4LDcgKzE4MCw3IEBACiBSZXBldGl0aW9ucyBzdWNoIGFzIGBgKmBgIGFyZSA6ZGZuOmBncmVlZHlgOyB3aGVuIHJlcGVhdGluZyBhIFJFLCB0aGUgbWF0Y2hpbmcKIGVuZ2luZSB3aWxsIHRyeSB0byByZXBlYXQgaXQgYXMgbWFueSB0aW1lcyBhcyBwb3NzaWJsZS4gSWYgbGF0ZXIgcG9ydGlvbnMgb2YgdGhlCiBwYXR0ZXJuIGRvbid0IG1hdGNoLCB0aGUgbWF0Y2hpbmcgZW5naW5lIHdpbGwgdGhlbiBiYWNrIHVwIGFuZCB0cnkgYWdhaW4gd2l0aAotZmV3IHJlcGV0aXRpb25zLgorZmV3ZXIgcmVwZXRpdGlvbnMuCiAKIEEgc3RlcC1ieS1zdGVwIGV4YW1wbGUgd2lsbCBtYWtlIHRoaXMgbW9yZSBvYnZpb3VzLiAgTGV0J3MgY29uc2lkZXIgdGhlCiBleHByZXNzaW9uIGBgYVtiY2RdKmJgYC4gIFRoaXMgbWF0Y2hlcyB0aGUgbGV0dGVyIGBgJ2EnYGAsIHplcm8gb3IgbW9yZSBsZXR0ZXJzCkBAIC0zNzQsOSArMzc2LDcgQEAKIDpzb3VyY2U6YFRvb2xzL2RlbW8vcmVkZW1vLnB5YCwgYSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gaW5jbHVkZWQgd2l0aCB0aGUKIFB5dGhvbiBkaXN0cmlidXRpb24uICBJdCBhbGxvd3MgeW91IHRvIGVudGVyIFJFcyBhbmQgc3RyaW5ncywgYW5kIGRpc3BsYXlzCiB3aGV0aGVyIHRoZSBSRSBtYXRjaGVzIG9yIGZhaWxzLiA6ZmlsZTpgcmVkZW1vLnB5YCBjYW4gYmUgcXVpdGUgdXNlZnVsIHdoZW4KLXRyeWluZyB0byBkZWJ1ZyBhIGNvbXBsaWNhdGVkIFJFLiAgUGhpbCBTY2h3YXJ0eidzIGBLb2RvcwotPGh0dHA6Ly9rb2Rvcy5zb3VyY2Vmb3JnZS5uZXQvPmBfIGlzIGFsc28gYW4gaW50ZXJhY3RpdmUgdG9vbCBmb3IgZGV2ZWxvcGluZyBhbmQKLXRlc3RpbmcgUkUgcGF0dGVybnMuCit0cnlpbmcgdG8gZGVidWcgYSBjb21wbGljYXRlZCBSRS4KIAogVGhpcyBIT1dUTyB1c2VzIHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIgZm9yIGl0cyBleGFtcGxlcy4gRmlyc3QsIHJ1biB0aGUKIFB5dGhvbiBpbnRlcnByZXRlciwgaW1wb3J0IHRoZSA6bW9kOmByZWAgbW9kdWxlLCBhbmQgY29tcGlsZSBhIFJFOjoKQEAgLTEwMDQsMTcgKzEwMDQsMTggQEAKIAogQSBuZWdhdGl2ZSBsb29rYWhlYWQgY3V0cyB0aHJvdWdoIGFsbCB0aGlzIGNvbmZ1c2lvbjoKIAotYGAuKlsuXSg/IWJhdCQpLiokYGAgIFRoZSBuZWdhdGl2ZSBsb29rYWhlYWQgbWVhbnM6IGlmIHRoZSBleHByZXNzaW9uIGBgYmF0YGAKK2BgLipbLl0oPyFiYXQkKVteLl0qJGBgICBUaGUgbmVnYXRpdmUgbG9va2FoZWFkIG1lYW5zOiBpZiB0aGUgZXhwcmVzc2lvbiBgYGJhdGBgCiBkb2Vzbid0IG1hdGNoIGF0IHRoaXMgcG9pbnQsIHRyeSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybjsgaWYgYGBiYXQkYGAgZG9lcwogbWF0Y2gsIHRoZSB3aG9sZSBwYXR0ZXJuIHdpbGwgZmFpbC4gIFRoZSB0cmFpbGluZyBgYCRgYCBpcyByZXF1aXJlZCB0byBlbnN1cmUKIHRoYXQgc29tZXRoaW5nIGxpa2UgYGBzYW1wbGUuYmF0Y2hgYCwgd2hlcmUgdGhlIGV4dGVuc2lvbiBvbmx5IHN0YXJ0cyB3aXRoCi1gYGJhdGBgLCB3aWxsIGJlIGFsbG93ZWQuCitgYGJhdGBgLCB3aWxsIGJlIGFsbG93ZWQuICBUaGUgYGBbXi5dKmBgIG1ha2VzIHN1cmUgdGhhdCB0aGUgcGF0dGVybiB3b3Jrcword2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZG90cyBpbiB0aGUgZmlsZW5hbWUuCiAKIEV4Y2x1ZGluZyBhbm90aGVyIGZpbGVuYW1lIGV4dGVuc2lvbiBpcyBub3cgZWFzeTsgc2ltcGx5IGFkZCBpdCBhcyBhbgogYWx0ZXJuYXRpdmUgaW5zaWRlIHRoZSBhc3NlcnRpb24uICBUaGUgZm9sbG93aW5nIHBhdHRlcm4gZXhjbHVkZXMgZmlsZW5hbWVzIHRoYXQKIGVuZCBpbiBlaXRoZXIgYGBiYXRgYCBvciBgYGV4ZWBgOgogCi1gYC4qWy5dKD8hYmF0JHxleGUkKS4qJGBgCitgYC4qWy5dKD8hYmF0JHxleGUkKVteLl0qJGBgCiAKIAogTW9kaWZ5aW5nIFN0cmluZ3MKQEAgLTExMTQsMTkgKzExMTUsMTkgQEAKIEhlcmUncyBhIHNpbXBsZSBleGFtcGxlIG9mIHVzaW5nIHRoZSA6bWV0aDpgc3ViYCBtZXRob2QuICBJdCByZXBsYWNlcyBjb2xvdXIKIG5hbWVzIHdpdGggdGhlIHdvcmQgYGBjb2xvdXJgYDo6CiAKLSAgID4+PiBwID0gcmUuY29tcGlsZSggJyhibHVlfHdoaXRlfHJlZCknKQotICAgPj4+IHAuc3ViKCAnY29sb3VyJywgJ2JsdWUgc29ja3MgYW5kIHJlZCBzaG9lcycpCisgICA+Pj4gcCA9IHJlLmNvbXBpbGUoJyhibHVlfHdoaXRlfHJlZCknKQorICAgPj4+IHAuc3ViKCdjb2xvdXInLCAnYmx1ZSBzb2NrcyBhbmQgcmVkIHNob2VzJykKICAgICdjb2xvdXIgc29ja3MgYW5kIGNvbG91ciBzaG9lcycKLSAgID4+PiBwLnN1YiggJ2NvbG91cicsICdibHVlIHNvY2tzIGFuZCByZWQgc2hvZXMnLCBjb3VudD0xKQorICAgPj4+IHAuc3ViKCdjb2xvdXInLCAnYmx1ZSBzb2NrcyBhbmQgcmVkIHNob2VzJywgY291bnQ9MSkKICAgICdjb2xvdXIgc29ja3MgYW5kIHJlZCBzaG9lcycKIAogVGhlIDptZXRoOmBzdWJuYCBtZXRob2QgZG9lcyB0aGUgc2FtZSB3b3JrLCBidXQgcmV0dXJucyBhIDItdHVwbGUgY29udGFpbmluZyB0aGUKIG5ldyBzdHJpbmcgdmFsdWUgYW5kIHRoZSBudW1iZXIgb2YgcmVwbGFjZW1lbnRzICB0aGF0IHdlcmUgcGVyZm9ybWVkOjoKIAotICAgPj4+IHAgPSByZS5jb21waWxlKCAnKGJsdWV8d2hpdGV8cmVkKScpCi0gICA+Pj4gcC5zdWJuKCAnY29sb3VyJywgJ2JsdWUgc29ja3MgYW5kIHJlZCBzaG9lcycpCisgICA+Pj4gcCA9IHJlLmNvbXBpbGUoJyhibHVlfHdoaXRlfHJlZCknKQorICAgPj4+IHAuc3VibignY29sb3VyJywgJ2JsdWUgc29ja3MgYW5kIHJlZCBzaG9lcycpCiAgICAoJ2NvbG91ciBzb2NrcyBhbmQgY29sb3VyIHNob2VzJywgMikKLSAgID4+PiBwLnN1Ym4oICdjb2xvdXInLCAnbm8gY29sb3VycyBhdCBhbGwnKQorICAgPj4+IHAuc3VibignY29sb3VyJywgJ25vIGNvbG91cnMgYXQgYWxsJykKICAgICgnbm8gY29sb3VycyBhdCBhbGwnLCAwKQogCiBFbXB0eSBtYXRjaGVzIGFyZSByZXBsYWNlZCBvbmx5IHdoZW4gdGhleSdyZSBub3QgYWRqYWNlbnQgdG8gYSBwcmV2aW91cyBtYXRjaC4KQEAgLTExMzgsNyArMTEzOSw3IEBACiAKIElmICpyZXBsYWNlbWVudCogaXMgYSBzdHJpbmcsIGFueSBiYWNrc2xhc2ggZXNjYXBlcyBpbiBpdCBhcmUgcHJvY2Vzc2VkLiAgVGhhdAogaXMsIGBgXG5gYCBpcyBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUgbmV3bGluZSBjaGFyYWN0ZXIsIGBgXHJgYCBpcyBjb252ZXJ0ZWQgdG8gYQotY2FycmlhZ2UgcmV0dXJuLCBhbmQgc28gZm9ydGguIFVua25vd24gZXNjYXBlcyBzdWNoIGFzIGBgXGpgYCBhcmUgbGVmdCBhbG9uZS4KK2NhcnJpYWdlIHJldHVybiwgYW5kIHNvIGZvcnRoLiBVbmtub3duIGVzY2FwZXMgc3VjaCBhcyBgYFwmYGAgYXJlIGxlZnQgYWxvbmUuCiBCYWNrcmVmZXJlbmNlcywgc3VjaCBhcyBgYFw2YGAsIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBzdWJzdHJpbmcgbWF0Y2hlZCBieSB0aGUKIGNvcnJlc3BvbmRpbmcgZ3JvdXAgaW4gdGhlIFJFLiAgVGhpcyBsZXRzIHlvdSBpbmNvcnBvcmF0ZSBwb3J0aW9ucyBvZiB0aGUKIG9yaWdpbmFsIHRleHQgaW4gdGhlIHJlc3VsdGluZyByZXBsYWNlbWVudCBzdHJpbmcuCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vc29ja2V0cy5yc3QgYi9Eb2MvaG93dG8vc29ja2V0cy5yc3QKaW5kZXggMDQzOTRkNC4uYmM3MWQ4NSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3NvY2tldHMucnN0CisrKyBiL0RvYy9ob3d0by9zb2NrZXRzLnJzdApAQCAtMTA2LDcgKzEwNiw3IEBACiBUaGVyZSdzIGFjdHVhbGx5IDMgZ2VuZXJhbCB3YXlzIGluIHdoaWNoIHRoaXMgbG9vcCBjb3VsZCB3b3JrIC0gZGlzcGF0Y2hpbmcgYQogdGhyZWFkIHRvIGhhbmRsZSBgYGNsaWVudHNvY2tldGBgLCBjcmVhdGUgYSBuZXcgcHJvY2VzcyB0byBoYW5kbGUKIGBgY2xpZW50c29ja2V0YGAsIG9yIHJlc3RydWN0dXJlIHRoaXMgYXBwIHRvIHVzZSBub24tYmxvY2tpbmcgc29ja2V0cywgYW5kCi1tdWxpdHBsZXggYmV0d2VlbiBvdXIgInNlcnZlciIgc29ja2V0IGFuZCBhbnkgYWN0aXZlIGBgY2xpZW50c29ja2V0YGBcIHMgdXNpbmcKK211bHRpcGxleCBiZXR3ZWVuIG91ciAic2VydmVyIiBzb2NrZXQgYW5kIGFueSBhY3RpdmUgYGBjbGllbnRzb2NrZXRgYFwgcyB1c2luZwogYGBzZWxlY3RgYC4gTW9yZSBhYm91dCB0aGF0IGxhdGVyLiBUaGUgaW1wb3J0YW50IHRoaW5nIHRvIHVuZGVyc3RhbmQgbm93IGlzCiB0aGlzOiB0aGlzIGlzICphbGwqIGEgInNlcnZlciIgc29ja2V0IGRvZXMuIEl0IGRvZXNuJ3Qgc2VuZCBhbnkgZGF0YS4gSXQgZG9lc24ndAogcmVjZWl2ZSBhbnkgZGF0YS4gSXQganVzdCBwcm9kdWNlcyAiY2xpZW50IiBzb2NrZXRzLiBFYWNoIGBgY2xpZW50c29ja2V0YGAgaXMKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9zb3J0aW5nLnJzdCBiL0RvYy9ob3d0by9zb3J0aW5nLnJzdAppbmRleCBmMmU2NGVlLi4wMzM0YjI2IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vc29ydGluZy5yc3QKKysrIGIvRG9jL2hvd3RvL3NvcnRpbmcucnN0CkBAIC0xMjcsNyArMTI3LDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFNvcnRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGBzdGFibGUKLTxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvcnRpbmdfYWxnb3JpdGhtI1N0YWJpbGl0eT5gX1wuIFRoYXQgbWVhbnMgdGhhdAorPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvcnRpbmdfYWxnb3JpdGhtI1N0YWJpbGl0eT5gX1wuIFRoYXQgbWVhbnMgdGhhdAogd2hlbiBtdWx0aXBsZSByZWNvcmRzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGVpciBvcmlnaW5hbCBvcmRlciBpcyBwcmVzZXJ2ZWQuCiAKICAgICA+Pj4gZGF0YSA9IFsoJ3JlZCcsIDEpLCAoJ2JsdWUnLCAxKSwgKCdyZWQnLCAyKSwgKCdibHVlJywgMildCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICA+Pj4gc29ydGVkKHMsIGtleT1hdHRyZ2V0dGVyKCdncmFkZScpLCByZXZlcnNlPVRydWUpICAgICAgICMgbm93IHNvcnQgb24gcHJpbWFyeSBrZXksIGRlc2NlbmRpbmcKICAgICBbKCdkYXZlJywgJ0InLCAxMCksICgnamFuZScsICdCJywgMTIpLCAoJ2pvaG4nLCAnQScsIDE1KV0KIAotVGhlIGBUaW1zb3J0IDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbXNvcnQ+YF8gYWxnb3JpdGhtIHVzZWQgaW4gUHl0aG9uCitUaGUgYFRpbXNvcnQgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbXNvcnQ+YF8gYWxnb3JpdGhtIHVzZWQgaW4gUHl0aG9uCiBkb2VzIG11bHRpcGxlIHNvcnRzIGVmZmljaWVudGx5IGJlY2F1c2UgaXQgY2FuIHRha2UgYWR2YW50YWdlIG9mIGFueSBvcmRlcmluZwogYWxyZWFkeSBwcmVzZW50IGluIGEgZGF0YXNldC4KIApAQCAtMTg0LDcgKzE4NCw3IEBACiAgIGRpcmVjdGx5LgogCiBBbm90aGVyIG5hbWUgZm9yIHRoaXMgaWRpb20gaXMKLWBTY2h3YXJ0emlhbiB0cmFuc2Zvcm0gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2Nod2FydHppYW5fdHJhbnNmb3JtPmBfXCwKK2BTY2h3YXJ0emlhbiB0cmFuc2Zvcm0gPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NjaHdhcnR6aWFuX3RyYW5zZm9ybT5gX1wsCiBhZnRlciBSYW5kYWwgTC4gU2Nod2FydHosIHdobyBwb3B1bGFyaXplZCBpdCBhbW9uZyBQZXJsIHByb2dyYW1tZXJzLgogCiBOb3cgdGhhdCBQeXRob24gc29ydGluZyBwcm92aWRlcyBrZXktZnVuY3Rpb25zLCB0aGlzIHRlY2huaXF1ZSBpcyBub3Qgb2Z0ZW4gbmVlZGVkLgpAQCAtMjYyLDcgKzI2MiwxMSBAQAogICB0d2ljZToKIAogICAgID4+PiBkYXRhID0gWygncmVkJywgMSksICgnYmx1ZScsIDEpLCAoJ3JlZCcsIDIpLCAoJ2JsdWUnLCAyKV0KLSAgICA+Pj4gYXNzZXJ0IHNvcnRlZChkYXRhLCByZXZlcnNlPVRydWUpID09IGxpc3QocmV2ZXJzZWQoc29ydGVkKHJldmVyc2VkKGRhdGEpKSkpCisgICAgPj4+IHN0YW5kYXJkX3dheSA9IHNvcnRlZChkYXRhLCBrZXk9aXRlbWdldHRlcigwKSwgcmV2ZXJzZT1UcnVlKQorICAgID4+PiBkb3VibGVfcmV2ZXJzZWQgPSBsaXN0KHJldmVyc2VkKHNvcnRlZChyZXZlcnNlZChkYXRhKSwga2V5PWl0ZW1nZXR0ZXIoMCkpKSkKKyAgICA+Pj4gYXNzZXJ0IHN0YW5kYXJkX3dheSA9PSBkb3VibGVfcmV2ZXJzZWQKKyAgICA+Pj4gc3RhbmRhcmRfd2F5CisgICAgWygncmVkJywgMSksICgncmVkJywgMiksICgnYmx1ZScsIDEpLCAoJ2JsdWUnLCAyKV0KIAogKiBUaGUgc29ydCByb3V0aW5lcyBhcmUgZ3VhcmFudGVlZCB0byB1c2UgOm1ldGg6YF9fbHRfX2Agd2hlbiBtYWtpbmcgY29tcGFyaXNvbnMKICAgYmV0d2VlbiB0d28gb2JqZWN0cy4gU28sIGl0IGlzIGVhc3kgdG8gYWRkIGEgc3RhbmRhcmQgc29ydCBvcmRlciB0byBhIGNsYXNzIGJ5CmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vdW5pY29kZS5yc3QgYi9Eb2MvaG93dG8vdW5pY29kZS5yc3QKaW5kZXggYjQ5YWMzOS4uZmJlYjExYSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3VuaWNvZGUucnN0CisrKyBiL0RvYy9ob3d0by91bmljb2RlLnJzdApAQCAtNzMsNyArNzMsNyBAQAogcHJlY2lzZSBoaXN0b3JpY2FsIGRldGFpbHMgYXJlbid0IG5lY2Vzc2FyeSBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8KIHVzZSBVbmljb2RlIGVmZmVjdGl2ZWx5LCBidXQgaWYgeW91J3JlIGN1cmlvdXMsIGNvbnN1bHQgdGhlIFVuaWNvZGUKIGNvbnNvcnRpdW0gc2l0ZSBsaXN0ZWQgaW4gdGhlIFJlZmVyZW5jZXMgb3IKLXRoZSBgV2lraXBlZGlhIGVudHJ5IGZvciBVbmljb2RlIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGUjSGlzdG9yeT5gXwordGhlIGBXaWtpcGVkaWEgZW50cnkgZm9yIFVuaWNvZGUgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGUjSGlzdG9yeT5gXwogZm9yIG1vcmUgaW5mb3JtYXRpb24uKQogCiAKQEAgLTIxNCw3ICsyMTQsNyBAQAogb3JpZ2luIGFuZCBkZXZlbG9wbWVudCBvZiBVbmljb2RlIGlzIGFsc28gYXZhaWxhYmxlIG9uIHRoZSBzaXRlLgogCiBUbyBoZWxwIHVuZGVyc3RhbmQgdGhlIHN0YW5kYXJkLCBKdWtrYSBLb3JwZWxhIGhhcyB3cml0dGVuIGBhbiBpbnRyb2R1Y3RvcnkKLWd1aWRlIDxodHRwOi8vd3d3LmNzLnR1dC5maS9+amtvcnBlbGEvdW5pY29kZS9ndWlkZS5odG1sPmBfIHRvIHJlYWRpbmcgdGhlCitndWlkZSA8aHR0cHM6Ly93d3cuY3MudHV0LmZpL35qa29ycGVsYS91bmljb2RlL2d1aWRlLmh0bWw+YF8gdG8gcmVhZGluZyB0aGUKIFVuaWNvZGUgY2hhcmFjdGVyIHRhYmxlcy4KIAogQW5vdGhlciBgZ29vZCBpbnRyb2R1Y3RvcnkgYXJ0aWNsZSA8aHR0cDovL3d3dy5qb2Vsb25zb2Z0d2FyZS5jb20vYXJ0aWNsZXMvVW5pY29kZS5odG1sPmBfCkBAIC0yMjMsOCArMjIzLDggQEAKIHJlYWRpbmcgdGhpcyBhbHRlcm5hdGUgYXJ0aWNsZSBiZWZvcmUgY29udGludWluZy4KIAogV2lraXBlZGlhIGVudHJpZXMgYXJlIG9mdGVuIGhlbHBmdWw7IHNlZSB0aGUgZW50cmllcyBmb3IgImBjaGFyYWN0ZXIgZW5jb2RpbmcKLTxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NoYXJhY3Rlcl9lbmNvZGluZz5gXyIgYW5kIGBVVEYtOAotPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTg+YF8sIGZvciBleGFtcGxlLgorPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NoYXJhY3Rlcl9lbmNvZGluZz5gXyIgYW5kIGBVVEYtOAorPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04PmBfLCBmb3IgZXhhbXBsZS4KIAogCiBQeXRob24ncyBVbmljb2RlIFN1cHBvcnQKQEAgLTI4MCw4ICsyODAsOSBAQAogVGhlICplcnJvcnMqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgcmVzcG9uc2Ugd2hlbiB0aGUgaW5wdXQgc3RyaW5nIGNhbid0IGJlCiBjb252ZXJ0ZWQgYWNjb3JkaW5nIHRvIHRoZSBlbmNvZGluZydzIHJ1bGVzLiAgTGVnYWwgdmFsdWVzIGZvciB0aGlzIGFyZ3VtZW50IGFyZQogYGAnc3RyaWN0J2BgIChyYWlzZSBhIDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmAgZXhjZXB0aW9uKSwgYGAncmVwbGFjZSdgYCAodXNlCi1gYFUrRkZGRGBgLCBgYFJFUExBQ0VNRU5UIENIQVJBQ1RFUmBgKSwgb3IgYGAnaWdub3JlJ2BgIChqdXN0IGxlYXZlIHRoZQotY2hhcmFjdGVyIG91dCBvZiB0aGUgVW5pY29kZSByZXN1bHQpLgorYGBVK0ZGRkRgYCwgYGBSRVBMQUNFTUVOVCBDSEFSQUNURVJgYCksIGBgJ2lnbm9yZSdgYCAoanVzdCBsZWF2ZSB0aGUKK2NoYXJhY3RlciBvdXQgb2YgdGhlIFVuaWNvZGUgcmVzdWx0KSwgb3IgYGAnYmFja3NsYXNocmVwbGFjZSdgYCAoaW5zZXJ0cyBhCitgYFx4Tk5gYCBlc2NhcGUgc2VxdWVuY2UpLgogVGhlIGZvbGxvd2luZyBleGFtcGxlcyBzaG93IHRoZSBkaWZmZXJlbmNlczo6CiAKICAgICA+Pj4gYidceDgwYWJjJy5kZWNvZGUoInV0Zi04IiwgInN0cmljdCIpICAjZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCkBAIC0yOTEsMTIgKzI5MiwxMSBAQAogICAgICAgaW52YWxpZCBzdGFydCBieXRlCiAgICAgPj4+IGInXHg4MGFiYycuZGVjb2RlKCJ1dGYtOCIsICJyZXBsYWNlIikKICAgICAnXHVmZmZkYWJjJworICAgID4+PiBiJ1x4ODBhYmMnLmRlY29kZSgidXRmLTgiLCAiYmFja3NsYXNocmVwbGFjZSIpCisgICAgJ1xceDgwYWJjJwogICAgID4+PiBiJ1x4ODBhYmMnLmRlY29kZSgidXRmLTgiLCAiaWdub3JlIikKICAgICAnYWJjJwogCi0oSW4gdGhpcyBjb2RlIGV4YW1wbGUsIHRoZSBVbmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3RlciBoYXMgYmVlbiByZXBsYWNlZCBieQotYSBxdWVzdGlvbiBtYXJrIGJlY2F1c2UgaXQgbWF5IG5vdCBiZSBkaXNwbGF5ZWQgb24gc29tZSBzeXN0ZW1zLikKLQogRW5jb2RpbmdzIGFyZSBzcGVjaWZpZWQgYXMgc3RyaW5ncyBjb250YWluaW5nIHRoZSBlbmNvZGluZydzIG5hbWUuICBQeXRob24gMy4yCiBjb21lcyB3aXRoIHJvdWdobHkgMTAwIGRpZmZlcmVudCBlbmNvZGluZ3M7IHNlZSB0aGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlIGF0CiA6cmVmOmBzdGFuZGFyZC1lbmNvZGluZ3NgIGZvciBhIGxpc3QuICBTb21lIGVuY29kaW5ncyBoYXZlIG11bHRpcGxlIG5hbWVzOyBmb3IKQEAgLTMyNSw4ICszMjUsOSBAQAogOm1ldGg6YH5ieXRlcy5kZWNvZGVgIG1ldGhvZCBidXQgc3VwcG9ydHMgYSBmZXcgbW9yZSBwb3NzaWJsZSBoYW5kbGVycy4gQXMgd2VsbCBhcwogYGAnc3RyaWN0J2BgLCBgYCdpZ25vcmUnYGAsIGFuZCBgYCdyZXBsYWNlJ2BgICh3aGljaCBpbiB0aGlzIGNhc2UKIGluc2VydHMgYSBxdWVzdGlvbiBtYXJrIGluc3RlYWQgb2YgdGhlIHVuZW5jb2RhYmxlIGNoYXJhY3RlciksIHRoZXJlIGlzCi1hbHNvIGBgJ3htbGNoYXJyZWZyZXBsYWNlJ2BgIChpbnNlcnRzIGFuIFhNTCBjaGFyYWN0ZXIgcmVmZXJlbmNlKSBhbmQKLWBgYmFja3NsYXNocmVwbGFjZWBgIChpbnNlcnRzIGEgYGBcdU5OTk5gYCBlc2NhcGUgc2VxdWVuY2UpLgorYWxzbyBgYCd4bWxjaGFycmVmcmVwbGFjZSdgYCAoaW5zZXJ0cyBhbiBYTUwgY2hhcmFjdGVyIHJlZmVyZW5jZSksCitgYGJhY2tzbGFzaHJlcGxhY2VgYCAoaW5zZXJ0cyBhIGBgXHVOTk5OYGAgZXNjYXBlIHNlcXVlbmNlKSBhbmQKK2BgbmFtZXJlcGxhY2VgYCAoaW5zZXJ0cyBhIGBgXE57Li4ufWBgIGVzY2FwZSBzZXF1ZW5jZSkuCiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyB0aGUgZGlmZmVyZW50IHJlc3VsdHM6OgogCkBAIC0zNDYsNiArMzQ3LDggQEAKICAgICBiJyYjNDA5NjA7YWJjZCYjMTk3MjsnCiAgICAgPj4+IHUuZW5jb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJykKICAgICBiJ1xcdWEwMDBhYmNkXFx1MDdiNCcKKyAgICA+Pj4gdS5lbmNvZGUoJ2FzY2lpJywgJ25hbWVyZXBsYWNlJykKKyAgICBiJ1xcTntZSSBTWUxMQUJMRSBJVH1hYmNkXFx1MDdiNCcKIAogVGhlIGxvdy1sZXZlbCByb3V0aW5lcyBmb3IgcmVnaXN0ZXJpbmcgYW5kIGFjY2Vzc2luZyB0aGUgYXZhaWxhYmxlCiBlbmNvZGluZ3MgYXJlIGZvdW5kIGluIHRoZSA6bW9kOmBjb2RlY3NgIG1vZHVsZS4gIEltcGxlbWVudGluZyBuZXcKQEAgLTYxMCw3ICs2MTMsOSBAQAogICAgcHJpbnQob3MubGlzdGRpcihiJy4nKSkKICAgIHByaW50KG9zLmxpc3RkaXIoJy4nKSkKIAotd2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjoKK3dpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIG91dHB1dDoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgYW1rOn4kIHB5dGhvbiB0LnB5CiAgICBbYidmaWxlbmFtZVx4ZTRceDk0XHg4MGFiYycsIC4uLl0KQEAgLTY4NCw3ICs2ODksNyBAQAogICAgIyBtYWtlIGNoYW5nZXMgdG8gdGhlIHN0cmluZyAnZGF0YScKIAogICAgd2l0aCBvcGVuKGZuYW1lICsgJy5uZXcnLCAndycsCi0gICAgICAgICAgICAgIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0ic3Vycm9nYXRlZXNjYXBlIikgYXMgZjoKKyAgICAgICAgICAgICBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN1cnJvZ2F0ZWVzY2FwZSIpIGFzIGY6CiAgICAgICAgZi53cml0ZShkYXRhKQogCiBUaGUgYGBzdXJyb2dhdGVlc2NhcGVgYCBlcnJvciBoYW5kbGVyIHdpbGwgZGVjb2RlIGFueSBub24tQVNDSUkgYnl0ZXMKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91cmxsaWIyLnJzdCBiL0RvYy9ob3d0by91cmxsaWIyLnJzdAppbmRleCA0YTY3YjMwLi5kMmM3OTkxIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QKKysrIGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CkBAIC02NCw3ICs2NCw3IEBACiAgICAgaHRtbCA9IG9wZW4obG9jYWxfZmlsZW5hbWUpCiAKIE1hbnkgdXNlcyBvZiB1cmxsaWIgd2lsbCBiZSB0aGF0IHNpbXBsZSAobm90ZSB0aGF0IGluc3RlYWQgb2YgYW4gJ2h0dHA6JyBVUkwgd2UKLWNvdWxkIGhhdmUgdXNlZCBhbiBVUkwgc3RhcnRpbmcgd2l0aCAnZnRwOicsICdmaWxlOicsIGV0Yy4pLiAgSG93ZXZlciwgaXQncyB0aGUKK2NvdWxkIGhhdmUgdXNlZCBhIFVSTCBzdGFydGluZyB3aXRoICdmdHA6JywgJ2ZpbGU6JywgZXRjLikuICBIb3dldmVyLCBpdCdzIHRoZQogcHVycG9zZSBvZiB0aGlzIHR1dG9yaWFsIHRvIGV4cGxhaW4gdGhlIG1vcmUgY29tcGxpY2F0ZWQgY2FzZXMsIGNvbmNlbnRyYXRpbmcgb24KIEhUVFAuCiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiBOb3RlIHRoYXQgb3RoZXIgZW5jb2RpbmdzIGFyZSBzb21ldGltZXMgcmVxdWlyZWQgKGUuZy4gZm9yIGZpbGUgdXBsb2FkIGZyb20gSFRNTAogZm9ybXMgLSBzZWUgYEhUTUwgU3BlY2lmaWNhdGlvbiwgRm9ybSBTdWJtaXNzaW9uCi08aHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTM+YF8gZm9yIG1vcmUKKzxodHRwczovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTM+YF8gZm9yIG1vcmUKIGRldGFpbHMpLgogCiBJZiB5b3UgZG8gbm90IHBhc3MgdGhlIGBgZGF0YWBgIGFyZ3VtZW50LCB1cmxsaWIgdXNlcyBhICoqR0VUKiogcmVxdWVzdC4gT25lCkBAIC0xNzUsMTAgKzE3NSwxMCBAQAogCiAgICAgdXJsID0gJ2h0dHA6Ly93d3cuc29tZXNlcnZlci5jb20vY2dpLWJpbi9yZWdpc3Rlci5jZ2knCiAgICAgdXNlcl9hZ2VudCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjE7IFdpbjY0OyB4NjQpJwotICAgIHZhbHVlcyA9IHsnbmFtZScgOiAnTWljaGFlbCBGb29yZCcsCi0gICAgICAgICAgICAgICdsb2NhdGlvbicgOiAnTm9ydGhhbXB0b24nLAotICAgICAgICAgICAgICAnbGFuZ3VhZ2UnIDogJ1B5dGhvbicgfQotICAgIGhlYWRlcnMgPSB7ICdVc2VyLUFnZW50JyA6IHVzZXJfYWdlbnQgfQorICAgIHZhbHVlcyA9IHsnbmFtZSc6ICdNaWNoYWVsIEZvb3JkJywKKyAgICAgICAgICAgICAgJ2xvY2F0aW9uJzogJ05vcnRoYW1wdG9uJywKKyAgICAgICAgICAgICAgJ2xhbmd1YWdlJzogJ1B5dGhvbicgfQorICAgIGhlYWRlcnMgPSB7J1VzZXItQWdlbnQnOiB1c2VyX2FnZW50fQogCiAgICAgZGF0YSA9IHVybGxpYi5wYXJzZS51cmxlbmNvZGUodmFsdWVzKQogICAgIGRhdGEgPSBkYXRhLmVuY29kZSgnYXNjaWknKQpAQCAtMjE1LDcgKzIxNSw3IEBACiAgICAgPj4+IHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoJ2h0dHA6Ly93d3cucHJldGVuZF9zZXJ2ZXIub3JnJykKICAgICA+Pj4gdHJ5OiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKICAgICAuLi4gZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvciBhcyBlOgotICAgIC4uLiAgICBwcmludChlLnJlYXNvbikgICAgICAjZG9jdGVzdDogK1NLSVAKKyAgICAuLi4gICAgIHByaW50KGUucmVhc29uKSAgICAgICNkb2N0ZXN0OiArU0tJUAogICAgIC4uLgogICAgICg0LCAnZ2V0YWRkcmluZm8gZmFpbGVkJykKIApAQCAtMzcyLDcgKzM3Miw3IEBACiA6OgogCiAgICAgZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdCwgdXJsb3BlbgotICAgIGZyb20gdXJsbGliLmVycm9yIGltcG9ydCAgVVJMRXJyb3IKKyAgICBmcm9tIHVybGxpYi5lcnJvciBpbXBvcnQgVVJMRXJyb3IKICAgICByZXEgPSBSZXF1ZXN0KHNvbWV1cmwpCiAgICAgdHJ5OgogICAgICAgICByZXNwb25zZSA9IHVybG9wZW4ocmVxKQpAQCAtNDAzLDcgKzQwMyw3IEBACiA6Y2xhc3M6YGh0dHAuY2xpZW50LkhUVFBNZXNzYWdlYCBpbnN0YW5jZS4KIAogVHlwaWNhbCBoZWFkZXJzIGluY2x1ZGUgJ0NvbnRlbnQtbGVuZ3RoJywgJ0NvbnRlbnQtdHlwZScsIGFuZCBzbyBvbi4gU2VlIHRoZQotYFF1aWNrIFJlZmVyZW5jZSB0byBIVFRQIEhlYWRlcnMgPGh0dHA6Ly93d3cuY3MudHV0LmZpL35qa29ycGVsYS9odHRwLmh0bWw+YF8KK2BRdWljayBSZWZlcmVuY2UgdG8gSFRUUCBIZWFkZXJzIDxodHRwczovL3d3dy5jcy50dXQuZmkvfmprb3JwZWxhL2h0dHAuaHRtbD5gXwogZm9yIGEgdXNlZnVsIGxpc3Rpbmcgb2YgSFRUUCBoZWFkZXJzIHdpdGggYnJpZWYgZXhwbGFuYXRpb25zIG9mIHRoZWlyIG1lYW5pbmcKIGFuZCB1c2UuCiAKQEAgLTUxNCw3ICs1MTQsNyBAQAogZS5nLiAiaHR0cDovL2V4YW1wbGUuY29tLyIgKm9yKiBhbiAiYXV0aG9yaXR5IiAoaS5lLiB0aGUgaG9zdG5hbWUsCiBvcHRpb25hbGx5IGluY2x1ZGluZyB0aGUgcG9ydCBudW1iZXIpIGUuZy4gImV4YW1wbGUuY29tIiBvciAiZXhhbXBsZS5jb206ODA4MCIKICh0aGUgbGF0dGVyIGV4YW1wbGUgaW5jbHVkZXMgYSBwb3J0IG51bWJlcikuICBUaGUgYXV0aG9yaXR5LCBpZiBwcmVzZW50LCBtdXN0Ci1OT1QgY29udGFpbiB0aGUgInVzZXJpbmZvIiBjb21wb25lbnQgLSBmb3IgZXhhbXBsZSAiam9lQHBhc3N3b3JkOmV4YW1wbGUuY29tIiBpcworTk9UIGNvbnRhaW4gdGhlICJ1c2VyaW5mbyIgY29tcG9uZW50IC0gZm9yIGV4YW1wbGUgImpvZTpwYXNzd29yZEBleGFtcGxlLmNvbSIgaXMKIG5vdCBjb3JyZWN0LgogCiAKQEAgLTU0MCw4ICs1NDAsOCBAQAogCiAuLiBub3RlOjoKIAotICAgYEhUVFBfUFJPWFlgYCB3aWxsIGJlIGlnbm9yZWQgaWYgYSB2YXJpYWJsZSBgYFJFUVVFU1RfTUVUSE9EYGAgaXMgc2V0OyBzZWUKLSAgIHRoZSBkb2N1bWVudGF0aW9uIG9uIDpmdW5jOmB+dXJsbGliLnJlcXVlc3QuZ2V0cHJveGllc2AuCisgICAgYGBIVFRQX1BST1hZYGAgd2lsbCBiZSBpZ25vcmVkIGlmIGEgdmFyaWFibGUgYGBSRVFVRVNUX01FVEhPRGBgIGlzIHNldDsgc2VlCisgICAgdGhlIGRvY3VtZW50YXRpb24gb24gOmZ1bmM6YH51cmxsaWIucmVxdWVzdC5nZXRwcm94aWVzYC4KIAogCiBTb2NrZXRzIGFuZCBMYXllcnMKQEAgLTU5MSw1ICs1OTEsNSBAQAogICAgICAgIHNjcmlwdHMgd2l0aCBhIGxvY2FsaG9zdCBzZXJ2ZXIsIEkgaGF2ZSB0byBwcmV2ZW50IHVybGxpYiBmcm9tIHVzaW5nCiAgICAgICAgdGhlIHByb3h5LgogLi4gWyNdIHVybGxpYiBvcGVuZXIgZm9yIFNTTCBwcm94eSAoQ09OTkVDVCBtZXRob2QpOiBgQVNQTiBDb29rYm9vayBSZWNpcGUKLSAgICAgICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNDU2MTk1Lz5gXy4KKyAgICAgICA8aHR0cHM6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzQ1NjE5NS8+YF8uCiAKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdCBiL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU5YjY5ZC4uMDAwMDAwMAotLS0gYS9Eb2MvaG93dG8vd2Vic2VydmVycy5yc3QKKysrIC9kZXYvbnVsbApAQCAtMSw3MzEgKzAsMCBAQAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBIT1dUTyBVc2UgUHl0aG9uIGluIHRoZSB3ZWIKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotOkF1dGhvcjogTWFyZWsgS3ViaWNhCi0KLS4uIHRvcGljOjogQWJzdHJhY3QKLQotICAgVGhpcyBkb2N1bWVudCBzaG93cyBob3cgUHl0aG9uIGZpdHMgaW50byB0aGUgd2ViLiAgSXQgcHJlc2VudHMgc29tZSB3YXlzCi0gICB0byBpbnRlZ3JhdGUgUHl0aG9uIHdpdGggYSB3ZWIgc2VydmVyLCBhbmQgZ2VuZXJhbCBwcmFjdGljZXMgdXNlZnVsIGZvcgotICAgZGV2ZWxvcGluZyB3ZWIgc2l0ZXMuCi0KLQotUHJvZ3JhbW1pbmcgZm9yIHRoZSBXZWIgaGFzIGJlY29tZSBhIGhvdCB0b3BpYyBzaW5jZSB0aGUgcmlzZSBvZiAiV2ViIDIuMCIsCi13aGljaCBmb2N1c2VzIG9uIHVzZXItZ2VuZXJhdGVkIGNvbnRlbnQgb24gd2ViIHNpdGVzLiAgSXQgaGFzIGFsd2F5cyBiZWVuCi1wb3NzaWJsZSB0byB1c2UgUHl0aG9uIGZvciBjcmVhdGluZyB3ZWIgc2l0ZXMsIGJ1dCBpdCB3YXMgYSByYXRoZXIgdGVkaW91cyB0YXNrLgotVGhlcmVmb3JlLCBtYW55IGZyYW1ld29ya3MgYW5kIGhlbHBlciB0b29scyBoYXZlIGJlZW4gY3JlYXRlZCB0byBhc3Npc3QKLWRldmVsb3BlcnMgaW4gY3JlYXRpbmcgZmFzdGVyIGFuZCBtb3JlIHJvYnVzdCBzaXRlcy4gIFRoaXMgSE9XVE8gZGVzY3JpYmVzCi1zb21lIG9mIHRoZSBtZXRob2RzIHVzZWQgdG8gY29tYmluZSBQeXRob24gd2l0aCBhIHdlYiBzZXJ2ZXIgdG8gY3JlYXRlCi1keW5hbWljIGNvbnRlbnQuICBJdCBpcyBub3QgbWVhbnQgYXMgYSBjb21wbGV0ZSBpbnRyb2R1Y3Rpb24sIGFzIHRoaXMgdG9waWMgaXMKLWZhciB0b28gYnJvYWQgdG8gYmUgY292ZXJlZCBpbiBvbmUgc2luZ2xlIGRvY3VtZW50LiAgSG93ZXZlciwgYSBzaG9ydCBvdmVydmlldwotb2YgdGhlIG1vc3QgcG9wdWxhciBsaWJyYXJpZXMgaXMgcHJvdmlkZWQuCi0KLS4uIHNlZWFsc286OgotCi0gICBXaGlsZSB0aGlzIEhPV1RPIHRyaWVzIHRvIGdpdmUgYW4gb3ZlcnZpZXcgb2YgUHl0aG9uIGluIHRoZSB3ZWIsIGl0IGNhbm5vdAotICAgYWx3YXlzIGJlIGFzIHVwIHRvIGRhdGUgYXMgZGVzaXJlZC4gIFdlYiBkZXZlbG9wbWVudCBpbiBQeXRob24gaXMgcmFwaWRseQotICAgbW92aW5nIGZvcndhcmQsIHNvIHRoZSB3aWtpIHBhZ2Ugb24gYFdlYiBQcm9ncmFtbWluZwotICAgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vV2ViUHJvZ3JhbW1pbmc+YF8gbWF5IGJlIG1vcmUgaW4gc3luYyB3aXRoCi0gICByZWNlbnQgZGV2ZWxvcG1lbnQuCi0KLQotVGhlIExvdy1MZXZlbCBWaWV3Ci09PT09PT09PT09PT09PT09PT0KLQotV2hlbiBhIHVzZXIgZW50ZXJzIGEgd2ViIHNpdGUsIHRoZWlyIGJyb3dzZXIgbWFrZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBzaXRlJ3MKLXdlYiBzZXJ2ZXIgKHRoaXMgaXMgY2FsbGVkIHRoZSAqcmVxdWVzdCopLiAgVGhlIHNlcnZlciBsb29rcyB1cCB0aGUgZmlsZSBpbiB0aGUKLWZpbGUgc3lzdGVtIGFuZCBzZW5kcyBpdCBiYWNrIHRvIHRoZSB1c2VyJ3MgYnJvd3Nlciwgd2hpY2ggZGlzcGxheXMgaXQgKHRoaXMgaXMKLXRoZSAqcmVzcG9uc2UqKS4gIFRoaXMgaXMgcm91Z2hseSBob3cgdGhlIHVuZGVybHlpbmcgcHJvdG9jb2wsIEhUVFAsIHdvcmtzLgotCi1EeW5hbWljIHdlYiBzaXRlcyBhcmUgbm90IGJhc2VkIG9uIGZpbGVzIGluIHRoZSBmaWxlIHN5c3RlbSwgYnV0IHJhdGhlciBvbgotcHJvZ3JhbXMgd2hpY2ggYXJlIHJ1biBieSB0aGUgd2ViIHNlcnZlciB3aGVuIGEgcmVxdWVzdCBjb21lcyBpbiwgYW5kIHdoaWNoCi0qZ2VuZXJhdGUqIHRoZSBjb250ZW50IHRoYXQgaXMgcmV0dXJuZWQgdG8gdGhlIHVzZXIuICBUaGV5IGNhbiBkbyBhbGwgc29ydHMgb2YKLXVzZWZ1bCB0aGluZ3MsIGxpa2UgZGlzcGxheSB0aGUgcG9zdGluZ3Mgb2YgYSBidWxsZXRpbiBib2FyZCwgc2hvdyB5b3VyIGVtYWlsLAotY29uZmlndXJlIHNvZnR3YXJlLCBvciBqdXN0IGRpc3BsYXkgdGhlIGN1cnJlbnQgdGltZS4gIFRoZXNlIHByb2dyYW1zIGNhbiBiZQotd3JpdHRlbiBpbiBhbnkgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdGhlIHNlcnZlciBzdXBwb3J0cy4gIFNpbmNlIG1vc3Qgc2VydmVycwotc3VwcG9ydCBQeXRob24sIGl0IGlzIGVhc3kgdG8gdXNlIFB5dGhvbiB0byBjcmVhdGUgZHluYW1pYyB3ZWIgc2l0ZXMuCi0KLU1vc3QgSFRUUCBzZXJ2ZXJzIGFyZSB3cml0dGVuIGluIEMgb3IgQysrLCBzbyB0aGV5IGNhbm5vdCBleGVjdXRlIFB5dGhvbiBjb2RlCi1kaXJlY3RseSAtLSBhIGJyaWRnZSBpcyBuZWVkZWQgYmV0d2VlbiB0aGUgc2VydmVyIGFuZCB0aGUgcHJvZ3JhbS4gIFRoZXNlCi1icmlkZ2VzLCBvciByYXRoZXIgaW50ZXJmYWNlcywgZGVmaW5lIGhvdyBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIHRoZSBzZXJ2ZXIuCi1UaGVyZSBoYXZlIGJlZW4gbnVtZXJvdXMgYXR0ZW1wdHMgdG8gY3JlYXRlIHRoZSBiZXN0IHBvc3NpYmxlIGludGVyZmFjZSwgYnV0Ci10aGVyZSBhcmUgb25seSBhIGZldyB3b3J0aCBtZW50aW9uaW5nLgotCi1Ob3QgZXZlcnkgd2ViIHNlcnZlciBzdXBwb3J0cyBldmVyeSBpbnRlcmZhY2UuICBNYW55IHdlYiBzZXJ2ZXJzIG9ubHkgc3VwcG9ydAotb2xkLCBub3ctb2Jzb2xldGUgaW50ZXJmYWNlczsgaG93ZXZlciwgdGhleSBjYW4gb2Z0ZW4gYmUgZXh0ZW5kZWQgdXNpbmcKLXRoaXJkLXBhcnR5IG1vZHVsZXMgdG8gc3VwcG9ydCBuZXdlciBvbmVzLgotCi0KLUNvbW1vbiBHYXRld2F5IEludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgaW50ZXJmYWNlLCBtb3N0IGNvbW1vbmx5IHJlZmVycmVkIHRvIGFzICJDR0kiLCBpcyB0aGUgb2xkZXN0LCBhbmQgaXMKLXN1cHBvcnRlZCBieSBuZWFybHkgZXZlcnkgd2ViIHNlcnZlciBvdXQgb2YgdGhlIGJveC4gIFByb2dyYW1zIHVzaW5nIENHSSB0bwotY29tbXVuaWNhdGUgd2l0aCB0aGVpciB3ZWIgc2VydmVyIG5lZWQgdG8gYmUgc3RhcnRlZCBieSB0aGUgc2VydmVyIGZvciBldmVyeQotcmVxdWVzdC4gIFNvLCBldmVyeSByZXF1ZXN0IHN0YXJ0cyBhIG5ldyBQeXRob24gaW50ZXJwcmV0ZXIgLS0gd2hpY2ggdGFrZXMgc29tZQotdGltZSB0byBzdGFydCB1cCAtLSB0aHVzIG1ha2luZyB0aGUgd2hvbGUgaW50ZXJmYWNlIG9ubHkgdXNhYmxlIGZvciBsb3cgbG9hZAotc2l0dWF0aW9ucy4KLQotVGhlIHVwc2lkZSBvZiBDR0kgaXMgdGhhdCBpdCBpcyBzaW1wbGUgLS0gd3JpdGluZyBhIFB5dGhvbiBwcm9ncmFtIHdoaWNoIHVzZXMKLUNHSSBpcyBhIG1hdHRlciBvZiBhYm91dCB0aHJlZSBsaW5lcyBvZiBjb2RlLiAgVGhpcyBzaW1wbGljaXR5IGNvbWVzIGF0IGEKLXByaWNlOiBpdCBkb2VzIHZlcnkgZmV3IHRoaW5ncyB0byBoZWxwIHRoZSBkZXZlbG9wZXIuCi0KLVdyaXRpbmcgQ0dJIHByb2dyYW1zLCB3aGlsZSBzdGlsbCBwb3NzaWJsZSwgaXMgbm8gbG9uZ2VyIHJlY29tbWVuZGVkLiAgV2l0aAotOnJlZjpgV1NHSSA8V1NHST5gLCBhIHRvcGljIGNvdmVyZWQgbGF0ZXIgaW4gdGhpcyBkb2N1bWVudCwgaXQgaXMgcG9zc2libGUgdG8gd3JpdGUKLXByb2dyYW1zIHRoYXQgZW11bGF0ZSBDR0ksIHNvIHRoZXkgY2FuIGJlIHJ1biBhcyBDR0kgaWYgbm8gYmV0dGVyIG9wdGlvbiBpcwotYXZhaWxhYmxlLgotCi0uLiBzZWVhbHNvOjoKLQotICAgVGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IGluY2x1ZGVzIHNvbWUgbW9kdWxlcyB0aGF0IGFyZSBoZWxwZnVsIGZvcgotICAgY3JlYXRpbmcgcGxhaW4gQ0dJIHByb2dyYW1zOgotCi0gICAqIDptb2Q6YGNnaWAgLS0gSGFuZGxpbmcgb2YgdXNlciBpbnB1dCBpbiBDR0kgc2NyaXB0cwotICAgKiA6bW9kOmBjZ2l0YmAgLS0gRGlzcGxheXMgbmljZSB0cmFjZWJhY2tzIHdoZW4gZXJyb3JzIGhhcHBlbiBpbiBDR0kKLSAgICAgYXBwbGljYXRpb25zLCBpbnN0ZWFkIG9mIHByZXNlbnRpbmcgYSAiNTAwIEludGVybmFsIFNlcnZlciBFcnJvciIgbWVzc2FnZQotCi0gICBUaGUgUHl0aG9uIHdpa2kgZmVhdHVyZXMgYSBwYWdlIG9uIGBDR0kgc2NyaXB0cwotICAgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vQ2dpU2NyaXB0cz5gXyB3aXRoIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgYWJvdXQgQ0dJIGluIFB5dGhvbi4KLQotCi1TaW1wbGUgc2NyaXB0IGZvciB0ZXN0aW5nIENHSQotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KLQotVG8gdGVzdCB3aGV0aGVyIHlvdXIgd2ViIHNlcnZlciB3b3JrcyB3aXRoIENHSSwgeW91IGNhbiB1c2UgdGhpcyBzaG9ydCBhbmQKLXNpbXBsZSBDR0kgcHJvZ3JhbTo6Ci0KLSAgICAjIS91c3IvYmluL2VudiBweXRob24KLSAgICAjIC0qLSBjb2Rpbmc6IFVURi04IC0qLQotCi0gICAgIyBlbmFibGUgZGVidWdnaW5nCi0gICAgaW1wb3J0IGNnaXRiCi0gICAgY2dpdGIuZW5hYmxlKCkKLQotICAgIHByaW50KCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIpCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoIkhlbGxvIFdvcmxkISIpCi0KLURlcGVuZGluZyBvbiB5b3VyIHdlYiBzZXJ2ZXIgY29uZmlndXJhdGlvbiwgeW91IG1heSBuZWVkIHRvIHNhdmUgdGhpcyBjb2RlIHdpdGgKLWEgYGAucHlgYCBvciBgYC5jZ2lgYCBleHRlbnNpb24uICBBZGRpdGlvbmFsbHksIHRoaXMgZmlsZSBtYXkgYWxzbyBuZWVkIHRvIGJlCi1pbiBhIGBgY2dpLWJpbmBgIGZvbGRlciwgZm9yIHNlY3VyaXR5IHJlYXNvbnMuCi0KLVlvdSBtaWdodCB3b25kZXIgd2hhdCB0aGUgYGBjZ2l0YmBgIGxpbmUgaXMgYWJvdXQuICBUaGlzIGxpbmUgbWFrZXMgaXQgcG9zc2libGUKLXRvIGRpc3BsYXkgYSBuaWNlIHRyYWNlYmFjayBpbnN0ZWFkIG9mIGp1c3QgY3Jhc2hpbmcgYW5kIGRpc3BsYXlpbmcgYW4gIkludGVybmFsCi1TZXJ2ZXIgRXJyb3IiIGluIHRoZSB1c2VyJ3MgYnJvd3Nlci4gIFRoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsIGJ1dCBpdCBtaWdodAotcmlzayBleHBvc2luZyBzb21lIGNvbmZpZGVudGlhbCBkYXRhIHRvIHRoZSB1c2VyLiAgWW91IHNob3VsZCBub3QgdXNlIGBgY2dpdGJgYAotaW4gcHJvZHVjdGlvbiBjb2RlIGZvciB0aGlzIHJlYXNvbi4gIFlvdSBzaG91bGQgKmFsd2F5cyogY2F0Y2ggZXhjZXB0aW9ucywgYW5kCi1kaXNwbGF5IHByb3BlciBlcnJvciBwYWdlcyAtLSBlbmQtdXNlcnMgZG9uJ3QgbGlrZSB0byBzZWUgbm9uZGVzY3JpcHQgIkludGVybmFsCi1TZXJ2ZXIgRXJyb3JzIiBpbiB0aGVpciBicm93c2Vycy4KLQotCi1TZXR0aW5nIHVwIENHSSBvbiB5b3VyIG93biBzZXJ2ZXIKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1JZiB5b3UgZG9uJ3QgaGF2ZSB5b3VyIG93biB3ZWIgc2VydmVyLCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHlvdS4gIFlvdSBjYW4KLWNoZWNrIHdoZXRoZXIgaXQgd29ya3MgYXMtaXMsIGFuZCBpZiBub3QgeW91IHdpbGwgbmVlZCB0byB0YWxrIHRvIHRoZQotYWRtaW5pc3RyYXRvciBvZiB5b3VyIHdlYiBzZXJ2ZXIuIElmIGl0IGlzIGEgYmlnIGhvc3QsIHlvdSBjYW4gdHJ5IGZpbGluZyBhCi10aWNrZXQgYXNraW5nIGZvciBQeXRob24gc3VwcG9ydC4KLQotSWYgeW91IGFyZSB5b3VyIG93biBhZG1pbmlzdHJhdG9yIG9yIHdhbnQgdG8gc2V0IHVwIENHSSBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbgoteW91ciBvd24gY29tcHV0ZXJzLCB5b3UgaGF2ZSB0byBjb25maWd1cmUgaXQgYnkgeW91cnNlbGYuICBUaGVyZSBpcyBubyBzaW5nbGUKLXdheSB0byBjb25maWd1cmUgQ0dJLCBhcyB0aGVyZSBhcmUgbWFueSB3ZWIgc2VydmVycyB3aXRoIGRpZmZlcmVudAotY29uZmlndXJhdGlvbiBvcHRpb25zLiAgQ3VycmVudGx5IHRoZSBtb3N0IHdpZGVseSB1c2VkIGZyZWUgd2ViIHNlcnZlciBpcwotYEFwYWNoZSBIVFRQZCA8aHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvPmBfLCBvciBBcGFjaGUgZm9yIHNob3J0LiBBcGFjaGUgY2FuIGJlCi1lYXNpbHkgaW5zdGFsbGVkIG9uIG5lYXJseSBldmVyeSBzeXN0ZW0gdXNpbmcgdGhlIHN5c3RlbSdzIHBhY2thZ2UgbWFuYWdlbWVudAotdG9vbC4gIGBsaWdodHRwZCA8aHR0cDovL3d3dy5saWdodHRwZC5uZXQ+YF8gaXMgYW5vdGhlciBhbHRlcm5hdGl2ZSBhbmQgaXMKLXNhaWQgdG8gaGF2ZSBiZXR0ZXIgcGVyZm9ybWFuY2UuICBPbiBtYW55IHN5c3RlbXMgdGhpcyBzZXJ2ZXIgY2FuIGFsc28gYmUKLWluc3RhbGxlZCB1c2luZyB0aGUgcGFja2FnZSBtYW5hZ2VtZW50IHRvb2wsIHNvIG1hbnVhbGx5IGNvbXBpbGluZyB0aGUgd2ViCi1zZXJ2ZXIgbWF5IG5vdCBiZSBuZWVkZWQuCi0KLSogT24gQXBhY2hlIHlvdSBjYW4gdGFrZSBhIGxvb2sgYXQgdGhlIGBEeW5hbWljIENvbnRlbnQgd2l0aCBDR0kKLSAgPGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi4yL2hvd3RvL2NnaS5odG1sPmBfIHR1dG9yaWFsLCB3aGVyZSBldmVyeXRoaW5nCi0gIGlzIGRlc2NyaWJlZC4gIE1vc3Qgb2YgdGhlIHRpbWUgaXQgaXMgZW5vdWdoIGp1c3QgdG8gc2V0IGBgK0V4ZWNDR0lgYC4gIFRoZQotICB0dXRvcmlhbCBhbHNvIGRlc2NyaWJlcyB0aGUgbW9zdCBjb21tb24gZ290Y2hhcyB0aGF0IG1pZ2h0IGFyaXNlLgotCi0qIE9uIGxpZ2h0dHBkIHlvdSBuZWVkIHRvIHVzZSB0aGUgYENHSSBtb2R1bGUKLSAgPGh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC9wcm9qZWN0cy9saWdodHRwZC93aWtpL0RvY3NfTW9kQ0dJPmBfXCAsIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkCi0gIGluIGEgc3RyYWlnaHRmb3J3YXJkIHdheS4gIEl0IGJvaWxzIGRvd24gdG8gc2V0dGluZyBgYGNnaS5hc3NpZ25gYCBwcm9wZXJseS4KLQotCi1Db21tb24gcHJvYmxlbXMgd2l0aCBDR0kgc2NyaXB0cwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KLQotVXNpbmcgQ0dJIHNvbWV0aW1lcyBsZWFkcyB0byBzbWFsbCBhbm5veWFuY2VzIHdoaWxlIHRyeWluZyB0byBnZXQgdGhlc2UKLXNjcmlwdHMgdG8gcnVuLiAgU29tZXRpbWVzIGEgc2VlbWluZ2x5IGNvcnJlY3Qgc2NyaXB0IGRvZXMgbm90IHdvcmsgYXMKLWV4cGVjdGVkLCB0aGUgY2F1c2UgYmVpbmcgc29tZSBzbWFsbCBoaWRkZW4gcHJvYmxlbSB0aGF0J3MgZGlmZmljdWx0IHRvIHNwb3QuCi0KLVNvbWUgb2YgdGhlc2UgcG90ZW50aWFsIHByb2JsZW1zIGFyZToKLQotKiBUaGUgUHl0aG9uIHNjcmlwdCBpcyBub3QgbWFya2VkIGFzIGV4ZWN1dGFibGUuICBXaGVuIENHSSBzY3JpcHRzIGFyZSBub3QKLSAgZXhlY3V0YWJsZSBtb3N0IHdlYiBzZXJ2ZXJzIHdpbGwgbGV0IHRoZSB1c2VyIGRvd25sb2FkIGl0LCBpbnN0ZWFkIG9mCi0gIHJ1bm5pbmcgaXQgYW5kIHNlbmRpbmcgdGhlIG91dHB1dCB0byB0aGUgdXNlci4gIEZvciBDR0kgc2NyaXB0cyB0byBydW4KLSAgcHJvcGVybHkgb24gVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGUgYGAreGBgIGJpdCBuZWVkcyB0byBiZSBzZXQuCi0gIFVzaW5nIGBgY2htb2QgYSt4IHlvdXJfc2NyaXB0LnB5YGAgbWF5IHNvbHZlIHRoaXMgcHJvYmxlbS4KLQotKiBPbiBhIFVuaXgtbGlrZSBzeXN0ZW0sIFRoZSBsaW5lIGVuZGluZ3MgaW4gdGhlIHByb2dyYW0gZmlsZSBtdXN0IGJlIFVuaXgKLSAgc3R5bGUgbGluZSBlbmRpbmdzLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgd2ViIHNlcnZlciBjaGVja3MgdGhlCi0gIGZpcnN0IGxpbmUgb2YgdGhlIHNjcmlwdCAoY2FsbGVkIHNoZWJhbmcpIGFuZCB0cmllcyB0byBydW4gdGhlIHByb2dyYW0KLSAgc3BlY2lmaWVkIHRoZXJlLiAgSXQgZ2V0cyBlYXNpbHkgY29uZnVzZWQgYnkgV2luZG93cyBsaW5lIGVuZGluZ3MgKENhcnJpYWdlCi0gIFJldHVybiAmIExpbmUgRmVlZCwgYWxzbyBjYWxsZWQgQ1JMRiksIHNvIHlvdSBoYXZlIHRvIGNvbnZlcnQgdGhlIGZpbGUgdG8KLSAgVW5peCBsaW5lIGVuZGluZ3MgKG9ubHkgTGluZSBGZWVkLCBMRikuICBUaGlzIGNhbiBiZSBkb25lIGF1dG9tYXRpY2FsbHkgYnkKLSAgdXBsb2FkaW5nIHRoZSBmaWxlIHZpYSBGVFAgaW4gdGV4dCBtb2RlIGluc3RlYWQgb2YgYmluYXJ5IG1vZGUsIGJ1dCB0aGUKLSAgcHJlZmVycmVkIHdheSBpcyBqdXN0IHRlbGxpbmcgeW91ciBlZGl0b3IgdG8gc2F2ZSB0aGUgZmlsZXMgd2l0aCBVbml4IGxpbmUKLSAgZW5kaW5ncy4gIE1vc3QgZWRpdG9ycyBzdXBwb3J0IHRoaXMuCi0KLSogWW91ciB3ZWIgc2VydmVyIG11c3QgYmUgYWJsZSB0byByZWFkIHRoZSBmaWxlLCBhbmQgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoZQotICBwZXJtaXNzaW9ucyBhcmUgY29ycmVjdC4gIE9uIHVuaXgtbGlrZSBzeXN0ZW1zLCB0aGUgc2VydmVyIG9mdGVuIHJ1bnMgYXMgdXNlcgotICBhbmQgZ3JvdXAgYGB3d3ctZGF0YWBgLCBzbyBpdCBtaWdodCBiZSB3b3J0aCBhIHRyeSB0byBjaGFuZ2UgdGhlIGZpbGUKLSAgb3duZXJzaGlwLCBvciBtYWtpbmcgdGhlIGZpbGUgd29ybGQgcmVhZGFibGUgYnkgdXNpbmcgYGBjaG1vZCBhK3IKLSAgeW91cl9zY3JpcHQucHlgYC4KLQotKiBUaGUgd2ViIHNlcnZlciBtdXN0IGtub3cgdGhhdCB0aGUgZmlsZSB5b3UncmUgdHJ5aW5nIHRvIGFjY2VzcyBpcyBhIENHSSBzY3JpcHQuCi0gIENoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9mIHlvdXIgd2ViIHNlcnZlciwgYXMgaXQgbWF5IGJlIGNvbmZpZ3VyZWQKLSAgdG8gZXhwZWN0IGEgc3BlY2lmaWMgZmlsZSBleHRlbnNpb24gZm9yIENHSSBzY3JpcHRzLgotCi0qIE9uIFVuaXgtbGlrZSBzeXN0ZW1zLCB0aGUgcGF0aCB0byB0aGUgaW50ZXJwcmV0ZXIgaW4gdGhlIHNoZWJhbmcKLSAgKGBgIyEvdXNyL2Jpbi9lbnYgcHl0aG9uYGApIG11c3QgYmUgY29ycmVjdC4gIFRoaXMgbGluZSBjYWxscwotICBgYC91c3IvYmluL2VudmBgIHRvIGZpbmQgUHl0aG9uLCBidXQgaXQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIG5vCi0gIGBgL3Vzci9iaW4vZW52YGAsIG9yIGlmIFB5dGhvbiBpcyBub3QgaW4gdGhlIHdlYiBzZXJ2ZXIncyBwYXRoLiAgSWYgeW91IGtub3cKLSAgd2hlcmUgeW91ciBQeXRob24gaXMgaW5zdGFsbGVkLCB5b3UgY2FuIGFsc28gdXNlIHRoYXQgZnVsbCBwYXRoLiAgVGhlCi0gIGNvbW1hbmRzIGBgd2hlcmVpcyBweXRob25gYCBhbmQgYGB0eXBlIC1wIHB5dGhvbmBgIGNvdWxkIGhlbHAgeW91IGZpbmQKLSAgd2hlcmUgaXQgaXMgaW5zdGFsbGVkLiAgT25jZSB5b3Uga25vdyB0aGUgcGF0aCwgeW91IGNhbiBjaGFuZ2UgdGhlIHNoZWJhbmcKLSAgYWNjb3JkaW5nbHk6IGBgIyEvdXNyL2Jpbi9weXRob25gYC4KLQotKiBUaGUgZmlsZSBtdXN0IG5vdCBjb250YWluIGEgQk9NIChCeXRlIE9yZGVyIE1hcmspLiBUaGUgQk9NIGlzIG1lYW50IGZvcgotICBkZXRlcm1pbmluZyB0aGUgYnl0ZSBvcmRlciBvZiBVVEYtMTYgYW5kIFVURi0zMiBlbmNvZGluZ3MsIGJ1dCBzb21lIGVkaXRvcnMKLSAgd3JpdGUgdGhpcyBhbHNvIGludG8gVVRGLTggZmlsZXMuICBUaGUgQk9NIGludGVyZmVyZXMgd2l0aCB0aGUgc2hlYmFuZyBsaW5lLAotICBzbyBiZSBzdXJlIHRvIHRlbGwgeW91ciBlZGl0b3Igbm90IHRvIHdyaXRlIHRoZSBCT00uCi0KLSogSWYgdGhlIHdlYiBzZXJ2ZXIgaXMgdXNpbmcgOnJlZjpgbW9kLXB5dGhvbmAsIGBgbW9kX3B5dGhvbmBgIG1heSBiZSBoYXZpbmcKLSAgcHJvYmxlbXMuICBgYG1vZF9weXRob25gYCBpcyBhYmxlIHRvIGhhbmRsZSBDR0kgc2NyaXB0cyBieSBpdHNlbGYsIGJ1dCBpdCBjYW4KLSAgYWxzbyBiZSBhIHNvdXJjZSBvZiBpc3N1ZXMuCi0KLQotLi4gX21vZC1weXRob246Ci0KLW1vZF9weXRob24KLS0tLS0tLS0tLS0KLQotUGVvcGxlIGNvbWluZyBmcm9tIFBIUCBvZnRlbiBmaW5kIGl0IGhhcmQgdG8gZ3Jhc3AgaG93IHRvIHVzZSBQeXRob24gaW4gdGhlIHdlYi4KLVRoZWlyIGZpcnN0IHRob3VnaHQgaXMgbW9zdGx5IGBtb2RfcHl0aG9uIDxodHRwOi8vbW9kcHl0aG9uLm9yZy8+YF9cICwKLWJlY2F1c2UgdGhleSB0aGluayB0aGF0IHRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgdG8gYGBtb2RfcGhwYGAuICBBY3R1YWxseSwgdGhlcmUKLWFyZSBtYW55IGRpZmZlcmVuY2VzLiAgV2hhdCBgYG1vZF9weXRob25gYCBkb2VzIGlzIGVtYmVkIHRoZSBpbnRlcnByZXRlciBpbnRvCi10aGUgQXBhY2hlIHByb2Nlc3MsIHRodXMgc3BlZWRpbmcgdXAgcmVxdWVzdHMgYnkgbm90IGhhdmluZyB0byBzdGFydCBhIFB5dGhvbgotaW50ZXJwcmV0ZXIgZm9yIGVhY2ggcmVxdWVzdC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBpcyBub3QgIlB5dGhvbiBpbnRlcm1peGVkCi13aXRoIEhUTUwiIGluIHRoZSB3YXkgdGhhdCBQSFAgaXMgb2Z0ZW4gaW50ZXJtaXhlZCB3aXRoIEhUTUwuIFRoZSBQeXRob24KLWVxdWl2YWxlbnQgb2YgdGhhdCBpcyBhIHRlbXBsYXRlIGVuZ2luZS4gIGBgbW9kX3B5dGhvbmBgIGl0c2VsZiBpcyBtdWNoIG1vcmUKLXBvd2VyZnVsIGFuZCBwcm92aWRlcyBtb3JlIGFjY2VzcyB0byBBcGFjaGUgaW50ZXJuYWxzLiAgSXQgY2FuIGVtdWxhdGUgQ0dJLAotd29yayBpbiBhICJQeXRob24gU2VydmVyIFBhZ2VzIiBtb2RlIChzaW1pbGFyIHRvIEpTUCkgd2hpY2ggaXMgIkhUTUwKLWludGVybWluZ2xlZCB3aXRoIFB5dGhvbiIsIGFuZCBpdCBoYXMgYSAiUHVibGlzaGVyIiB3aGljaCBkZXNpZ25hdGVzIG9uZSBmaWxlCi10byBhY2NlcHQgYWxsIHJlcXVlc3RzIGFuZCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZW0uCi0KLWBgbW9kX3B5dGhvbmBgIGRvZXMgaGF2ZSBzb21lIHByb2JsZW1zLiAgVW5saWtlIHRoZSBQSFAgaW50ZXJwcmV0ZXIsIHRoZSBQeXRob24KLWludGVycHJldGVyIHVzZXMgY2FjaGluZyB3aGVuIGV4ZWN1dGluZyBmaWxlcywgc28gY2hhbmdlcyB0byBhIGZpbGUgd2lsbAotcmVxdWlyZSB0aGUgd2ViIHNlcnZlciB0byBiZSByZXN0YXJ0ZWQuICBBbm90aGVyIHByb2JsZW0gaXMgdGhlIGJhc2ljIGNvbmNlcHQKLS0tIEFwYWNoZSBzdGFydHMgY2hpbGQgcHJvY2Vzc2VzIHRvIGhhbmRsZSB0aGUgcmVxdWVzdHMsIGFuZCB1bmZvcnR1bmF0ZWx5Ci1ldmVyeSBjaGlsZCBwcm9jZXNzIG5lZWRzIHRvIGxvYWQgdGhlIHdob2xlIFB5dGhvbiBpbnRlcnByZXRlciBldmVuIGlmIGl0IGRvZXMKLW5vdCB1c2UgaXQuICBUaGlzIG1ha2VzIHRoZSB3aG9sZSB3ZWIgc2VydmVyIHNsb3dlci4gIEFub3RoZXIgcHJvYmxlbSBpcyB0aGF0LAotYmVjYXVzZSBgYG1vZF9weXRob25gYCBpcyBsaW5rZWQgYWdhaW5zdCBhIHNwZWNpZmljIHZlcnNpb24gb2YgYGBsaWJweXRob25gYCwKLWl0IGlzIG5vdCBwb3NzaWJsZSB0byBzd2l0Y2ggZnJvbSBhbiBvbGRlciB2ZXJzaW9uIHRvIGEgbmV3ZXIgKGUuZy4gMi40IHRvIDIuNSkKLXdpdGhvdXQgcmVjb21waWxpbmcgYGBtb2RfcHl0aG9uYGAuICBgYG1vZF9weXRob25gYCBpcyBhbHNvIGJvdW5kIHRvIHRoZSBBcGFjaGUKLXdlYiBzZXJ2ZXIsIHNvIHByb2dyYW1zIHdyaXR0ZW4gZm9yIGBgbW9kX3B5dGhvbmBgIGNhbm5vdCBlYXNpbHkgcnVuIG9uIG90aGVyCi13ZWIgc2VydmVycy4KLQotVGhlc2UgYXJlIHRoZSByZWFzb25zIHdoeSBgYG1vZF9weXRob25gYCBzaG91bGQgYmUgYXZvaWRlZCB3aGVuIHdyaXRpbmcgbmV3Ci1wcm9ncmFtcy4gIEluIHNvbWUgY2lyY3Vtc3RhbmNlcyBpdCBzdGlsbCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byB1c2UKLWBgbW9kX3B5dGhvbmBgIGZvciBkZXBsb3ltZW50LCBidXQgV1NHSSBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gV1NHSSBwcm9ncmFtcwotdW5kZXIgYGBtb2RfcHl0aG9uYGAgYXMgd2VsbC4KLQotCi1GYXN0Q0dJIGFuZCBTQ0dJCi0tLS0tLS0tLS0tLS0tLS0tCi0KLUZhc3RDR0kgYW5kIFNDR0kgdHJ5IHRvIHNvbHZlIHRoZSBwZXJmb3JtYW5jZSBwcm9ibGVtIG9mIENHSSBpbiBhbm90aGVyIHdheS4KLUluc3RlYWQgb2YgZW1iZWRkaW5nIHRoZSBpbnRlcnByZXRlciBpbnRvIHRoZSB3ZWIgc2VydmVyLCB0aGV5IGNyZWF0ZQotbG9uZy1ydW5uaW5nIGJhY2tncm91bmQgcHJvY2Vzc2VzLiBUaGVyZSBpcyBzdGlsbCBhIG1vZHVsZSBpbiB0aGUgd2ViIHNlcnZlcgotd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgZm9yIHRoZSB3ZWIgc2VydmVyIHRvICJzcGVhayIgd2l0aCB0aGUgYmFja2dyb3VuZAotcHJvY2Vzcy4gIEFzIHRoZSBiYWNrZ3JvdW5kIHByb2Nlc3MgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHNlcnZlciwgaXQgY2FuIGJlCi13cml0dGVuIGluIGFueSBsYW5ndWFnZSwgaW5jbHVkaW5nIFB5dGhvbi4gIFRoZSBsYW5ndWFnZSBqdXN0IG5lZWRzIHRvIGhhdmUgYQotbGlicmFyeSB3aGljaCBoYW5kbGVzIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHdlYnNlcnZlci4KLQotVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBGYXN0Q0dJIGFuZCBTQ0dJIGlzIHZlcnkgc21hbGwsIGFzIFNDR0kgaXMgZXNzZW50aWFsbHkKLWp1c3QgYSAic2ltcGxlciBGYXN0Q0dJIi4gIEFzIHRoZSB3ZWIgc2VydmVyIHN1cHBvcnQgZm9yIFNDR0kgaXMgbGltaXRlZCwKLW1vc3QgcGVvcGxlIHVzZSBGYXN0Q0dJIGluc3RlYWQsIHdoaWNoIHdvcmtzIHRoZSBzYW1lIHdheS4gIEFsbW9zdCBldmVyeXRoaW5nCi10aGF0IGFwcGxpZXMgdG8gU0NHSSBhbHNvIGFwcGxpZXMgdG8gRmFzdENHSSBhcyB3ZWxsLCBzbyB3ZSdsbCBvbmx5IGNvdmVyCi10aGUgbGF0dGVyLgotCi1UaGVzZSBkYXlzLCBGYXN0Q0dJIGlzIG5ldmVyIHVzZWQgZGlyZWN0bHkuICBKdXN0IGxpa2UgYGBtb2RfcHl0aG9uYGAsIGl0IGlzIG9ubHkKLXVzZWQgZm9yIHRoZSBkZXBsb3ltZW50IG9mIFdTR0kgYXBwbGljYXRpb25zLgotCi0KLVNldHRpbmcgdXAgRmFzdENHSQotXl5eXl5eXl5eXl5eXl5eXl5eCi0KLUVhY2ggd2ViIHNlcnZlciByZXF1aXJlcyBhIHNwZWNpZmljIG1vZHVsZS4KLQotKiBBcGFjaGUgaGFzIGJvdGggYG1vZF9mYXN0Y2dpIDxodHRwOi8vd3d3LmZhc3RjZ2kuY29tL2RydXBhbC8+YF8gYW5kIGBtb2RfZmNnaWQKLSAgPGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL21vZF9mY2dpZC8+YF8uICBgYG1vZF9mYXN0Y2dpYGAgaXMgdGhlIG9yaWdpbmFsIG9uZSwgYnV0IGl0Ci0gIGhhcyBzb21lIGxpY2Vuc2luZyBpc3N1ZXMsIHdoaWNoIGlzIHdoeSBpdCBpcyBzb21ldGltZXMgY29uc2lkZXJlZCBub24tZnJlZS4KLSAgYGBtb2RfZmNnaWRgYCBpcyBhIHNtYWxsZXIsIGNvbXBhdGlibGUgYWx0ZXJuYXRpdmUuICBPbmUgb2YgdGhlc2UgbW9kdWxlcyBuZWVkcwotICB0byBiZSBsb2FkZWQgYnkgQXBhY2hlLgotCi0qIGxpZ2h0dHBkIHNoaXBzIGl0cyBvd24gYEZhc3RDR0kgbW9kdWxlCi0gIDxodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvcHJvamVjdHMvbGlnaHR0cGQvd2lraS9Eb2NzX01vZEZhc3RDR0k+YF8gYXMgd2VsbCBhcyBhbgotICBgU0NHSSBtb2R1bGUgPGh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC9wcm9qZWN0cy9saWdodHRwZC93aWtpL0RvY3NfTW9kU0NHST5gXy4KLQotKiBgbmdpbnggPGh0dHA6Ly9uZ2lueC5vcmcvPmBfIGFsc28gc3VwcG9ydHMgYEZhc3RDR0kKLSAgPGh0dHA6Ly93aWtpLm5naW54Lm9yZy9OZ2lueFNpbXBsZVB5dGhvbkZDR0k+YF8uCi0KLU9uY2UgeW91IGhhdmUgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIHRoZSBtb2R1bGUsIHlvdSBjYW4gdGVzdCBpdCB3aXRoIHRoZQotZm9sbG93aW5nIFdTR0ktYXBwbGljYXRpb246OgotCi0gICAgIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0gICAgIyAtKi0gY29kaW5nOiBVVEYtOCAtKi0KLQotICAgIGltcG9ydCBzeXMsIG9zCi0gICAgZnJvbSBodG1sIGltcG9ydCBlc2NhcGUKLSAgICBmcm9tIGZsdXAuc2VydmVyLmZjZ2kgaW1wb3J0IFdTR0lTZXJ2ZXIKLQotICAgIGRlZiBhcHAoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgotICAgICAgICBzdGFydF9yZXNwb25zZSgnMjAwIE9LJywgWygnQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpXSkKLQotICAgICAgICB5aWVsZCAnPGgxPkZhc3RDR0kgRW52aXJvbm1lbnQ8L2gxPicKLSAgICAgICAgeWllbGQgJzx0YWJsZT4nCi0gICAgICAgIGZvciBrLCB2IGluIHNvcnRlZChlbnZpcm9uLml0ZW1zKCkpOgotICAgICAgICAgICAgIHlpZWxkICc8dHI+PHRoPnswfTwvdGg+PHRkPnsxfTwvdGQ+PC90cj4nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgZXNjYXBlKGspLCBlc2NhcGUodikpCi0gICAgICAgIHlpZWxkICc8L3RhYmxlPicKLQotICAgIFdTR0lTZXJ2ZXIoYXBwKS5ydW4oKQotCi1UaGlzIGlzIGEgc2ltcGxlIFdTR0kgYXBwbGljYXRpb24sIGJ1dCB5b3UgbmVlZCB0byBpbnN0YWxsIGBmbHVwCi08aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9mbHVwLzEuMD5gXyBmaXJzdCwgYXMgZmx1cCBoYW5kbGVzIHRoZSBsb3cgbGV2ZWwKLUZhc3RDR0kgYWNjZXNzLgotCi0uLiBzZWVhbHNvOjoKLQotICAgVGhlcmUgaXMgc29tZSBkb2N1bWVudGF0aW9uIG9uIGBzZXR0aW5nIHVwIERqYW5nbyB3aXRoIEZhc3RDR0kKLSAgIDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vZGV2L2hvd3RvL2RlcGxveW1lbnQvZmFzdGNnaS8+YF8sIG1vc3Qgb2YKLSAgIHdoaWNoIGNhbiBiZSByZXVzZWQgZm9yIG90aGVyIFdTR0ktY29tcGxpYW50IGZyYW1ld29ya3MgYW5kIGxpYnJhcmllcy4KLSAgIE9ubHkgdGhlIGBgbWFuYWdlLnB5YGAgcGFydCBoYXMgdG8gYmUgY2hhbmdlZCwgdGhlIGV4YW1wbGUgdXNlZCBoZXJlIGNhbiBiZQotICAgdXNlZCBpbnN0ZWFkLiAgRGphbmdvIGRvZXMgbW9yZSBvciBsZXNzIHRoZSBleGFjdCBzYW1lIHRoaW5nLgotCi0KLW1vZF93c2dpCi0tLS0tLS0tLQotCi1gbW9kX3dzZ2kgPGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9tb2R3c2dpLz5gXyBpcyBhbiBhdHRlbXB0IHRvIGdldCByaWQgb2YgdGhlCi1sb3cgbGV2ZWwgZ2F0ZXdheXMuICBHaXZlbiB0aGF0IEZhc3RDR0ksIFNDR0ksIGFuZCBtb2RfcHl0aG9uIGFyZSBtb3N0bHkgdXNlZCB0bwotZGVwbG95IFdTR0kgYXBwbGljYXRpb25zLCBtb2Rfd3NnaSB3YXMgc3RhcnRlZCB0byBkaXJlY3RseSBlbWJlZCBXU0dJIGFwcGxpY2F0aW9ucwotaW50byB0aGUgQXBhY2hlIHdlYiBzZXJ2ZXIuIG1vZF93c2dpIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBob3N0IFdTR0kKLWFwcGxpY2F0aW9ucy4gIEl0IG1ha2VzIHRoZSBkZXBsb3ltZW50IG9mIFdTR0kgYXBwbGljYXRpb25zIG11Y2ggZWFzaWVyIHRoYW4KLWRlcGxveW1lbnQgdXNpbmcgb3RoZXIgbG93IGxldmVsIG1ldGhvZHMsIHdoaWNoIG5lZWQgZ2x1ZSBjb2RlLiAgVGhlIGRvd25zaWRlCi1pcyB0aGF0IG1vZF93c2dpIGlzIGxpbWl0ZWQgdG8gdGhlIEFwYWNoZSB3ZWIgc2VydmVyOyBvdGhlciBzZXJ2ZXJzIHdvdWxkIG5lZWQKLXRoZWlyIG93biBpbXBsZW1lbnRhdGlvbnMgb2YgbW9kX3dzZ2kuCi0KLW1vZF93c2dpIHN1cHBvcnRzIHR3byBtb2RlczogZW1iZWRkZWQgbW9kZSwgaW4gd2hpY2ggaXQgaW50ZWdyYXRlcyB3aXRoIHRoZQotQXBhY2hlIHByb2Nlc3MsIGFuZCBkYWVtb24gbW9kZSwgd2hpY2ggaXMgbW9yZSBGYXN0Q0dJLWxpa2UuICBVbmxpa2UgRmFzdENHSSwKLW1vZF93c2dpIGhhbmRsZXMgdGhlIHdvcmtlci1wcm9jZXNzZXMgYnkgaXRzZWxmLCB3aGljaCBtYWtlcyBhZG1pbmlzdHJhdGlvbgotZWFzaWVyLgotCi0KLS4uIF9XU0dJOgotCi1TdGVwIGJhY2s6IFdTR0kKLT09PT09PT09PT09PT09PQotCi1XU0dJIGhhcyBhbHJlYWR5IGJlZW4gbWVudGlvbmVkIHNldmVyYWwgdGltZXMsIHNvIGl0IGhhcyB0byBiZSBzb21ldGhpbmcKLWltcG9ydGFudC4gIEluIGZhY3QgaXQgcmVhbGx5IGlzLCBhbmQgbm93IGl0IGlzIHRpbWUgdG8gZXhwbGFpbiBpdC4KLQotVGhlICpXZWIgU2VydmVyIEdhdGV3YXkgSW50ZXJmYWNlKiwgIG9yIFdTR0kgZm9yIHNob3J0LCBpcyBkZWZpbmVkIGluCi06cGVwOmAzMzNgIGFuZCBpcyBjdXJyZW50bHkgdGhlIGJlc3Qgd2F5IHRvIGRvIFB5dGhvbiB3ZWIgcHJvZ3JhbW1pbmcuICBXaGlsZQotaXQgaXMgZ3JlYXQgZm9yIHByb2dyYW1tZXJzIHdyaXRpbmcgZnJhbWV3b3JrcywgYSBub3JtYWwgd2ViIGRldmVsb3BlciBkb2VzIG5vdAotbmVlZCB0byBnZXQgaW4gZGlyZWN0IGNvbnRhY3Qgd2l0aCBpdC4gIFdoZW4gY2hvb3NpbmcgYSBmcmFtZXdvcmsgZm9yIHdlYgotZGV2ZWxvcG1lbnQgaXQgaXMgYSBnb29kIGlkZWEgdG8gY2hvb3NlIG9uZSB3aGljaCBzdXBwb3J0cyBXU0dJLgotCi1UaGUgYmlnIGJlbmVmaXQgb2YgV1NHSSBpcyB0aGUgdW5pZmljYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCi1pbnRlcmZhY2UuICBXaGVuIHlvdXIgcHJvZ3JhbSBpcyBjb21wYXRpYmxlIHdpdGggV1NHSSAtLSB3aGljaCBhdCB0aGUgb3V0ZXIKLWxldmVsIG1lYW5zIHRoYXQgdGhlIGZyYW1ld29yayB5b3UgYXJlIHVzaW5nIGhhcyBzdXBwb3J0IGZvciBXU0dJIC0tIHlvdXIKLXByb2dyYW0gY2FuIGJlIGRlcGxveWVkIHZpYSBhbnkgd2ViIHNlcnZlciBpbnRlcmZhY2UgZm9yIHdoaWNoIHRoZXJlIGFyZSBXU0dJCi13cmFwcGVycy4gIFlvdSBkbyBub3QgbmVlZCB0byBjYXJlIGFib3V0IHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIHVzZXIgdXNlcwotbW9kX3B5dGhvbiBvciBGYXN0Q0dJIG9yIG1vZF93c2dpIC0tIHdpdGggV1NHSSB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgd29yayBvbgotYW55IGdhdGV3YXkgaW50ZXJmYWNlLiAgVGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IGNvbnRhaW5zIGl0cyBvd24gV1NHSQotc2VydmVyLCA6bW9kOmB3c2dpcmVmYCwgd2hpY2ggaXMgYSBzbWFsbCB3ZWIgc2VydmVyIHRoYXQgY2FuIGJlIHVzZWQgZm9yCi10ZXN0aW5nLgotCi1BIHJlYWxseSBncmVhdCBXU0dJIGZlYXR1cmUgaXMgbWlkZGxld2FyZS4gIE1pZGRsZXdhcmUgaXMgYSBsYXllciBhcm91bmQgeW91cgotcHJvZ3JhbSB3aGljaCBjYW4gYWRkIHZhcmlvdXMgZnVuY3Rpb25hbGl0eSB0byBpdC4gIFRoZXJlIGlzIHF1aXRlIGEgYml0IG9mCi1gbWlkZGxld2FyZSA8aHR0cDovL3d3dy53c2dpLm9yZy9lbi9sYXRlc3QvbGlicmFyaWVzLmh0bWw+YF8gYWxyZWFkeQotYXZhaWxhYmxlLiAgRm9yIGV4YW1wbGUsIGluc3RlYWQgb2Ygd3JpdGluZyB5b3VyIG93biBzZXNzaW9uIG1hbmFnZW1lbnQgKEhUVFAKLWlzIGEgc3RhdGVsZXNzIHByb3RvY29sLCBzbyB0byBhc3NvY2lhdGUgbXVsdGlwbGUgSFRUUCByZXF1ZXN0cyB3aXRoIGEgc2luZ2xlCi11c2VyIHlvdXIgYXBwbGljYXRpb24gbXVzdCBjcmVhdGUgYW5kIG1hbmFnZSBzdWNoIHN0YXRlIHZpYSBhIHNlc3Npb24pLCB5b3UgY2FuCi1qdXN0IGRvd25sb2FkIG1pZGRsZXdhcmUgd2hpY2ggZG9lcyB0aGF0LCBwbHVnIGl0IGluLCBhbmQgZ2V0IG9uIHdpdGggY29kaW5nCi10aGUgdW5pcXVlIHBhcnRzIG9mIHlvdXIgYXBwbGljYXRpb24uICBUaGUgc2FtZSB0aGluZyB3aXRoIGNvbXByZXNzaW9uIC0tIHRoZXJlCi1pcyBleGlzdGluZyBtaWRkbGV3YXJlIHdoaWNoIGhhbmRsZXMgY29tcHJlc3NpbmcgeW91ciBIVE1MIHVzaW5nIGd6aXAgdG8gc2F2ZQotb24geW91ciBzZXJ2ZXIncyBiYW5kd2lkdGguICBBdXRoZW50aWNhdGlvbiBpcyBhbm90aGVyIGEgcHJvYmxlbSBlYXNpbHkgc29sdmVkCi11c2luZyBleGlzdGluZyBtaWRkbGV3YXJlLgotCi1BbHRob3VnaCBXU0dJIG1heSBzZWVtIGNvbXBsZXgsIHRoZSBpbml0aWFsIHBoYXNlIG9mIGxlYXJuaW5nIGNhbiBiZSB2ZXJ5Ci1yZXdhcmRpbmcgYmVjYXVzZSBXU0dJIGFuZCB0aGUgYXNzb2NpYXRlZCBtaWRkbGV3YXJlIGFscmVhZHkgaGF2ZSBzb2x1dGlvbnMgdG8KLW1hbnkgcHJvYmxlbXMgdGhhdCBtaWdodCBhcmlzZSB3aGlsZSBkZXZlbG9waW5nIHdlYiBzaXRlcy4KLQotCi1XU0dJIFNlcnZlcnMKLS0tLS0tLS0tLS0tLQotCi1UaGUgY29kZSB0aGF0IGlzIHVzZWQgdG8gY29ubmVjdCB0byB2YXJpb3VzIGxvdyBsZXZlbCBnYXRld2F5cyBsaWtlIENHSSBvcgotbW9kX3B5dGhvbiBpcyBjYWxsZWQgYSAqV1NHSSBzZXJ2ZXIqLiAgT25lIG9mIHRoZXNlIHNlcnZlcnMgaXMgYGBmbHVwYGAsIHdoaWNoCi1zdXBwb3J0cyBGYXN0Q0dJIGFuZCBTQ0dJLCBhcyB3ZWxsIGFzIGBBSlAKLTxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FwYWNoZV9KU2Vydl9Qcm90b2NvbD5gXy4gIFNvbWUgb2YgdGhlc2Ugc2VydmVycwotYXJlIHdyaXR0ZW4gaW4gUHl0aG9uLCBhcyBgYGZsdXBgYCBpcywgYnV0IHRoZXJlIGFsc28gZXhpc3Qgb3RoZXJzIHdoaWNoIGFyZQotd3JpdHRlbiBpbiBDIGFuZCBjYW4gYmUgdXNlZCBhcyBkcm9wLWluIHJlcGxhY2VtZW50cy4KLQotVGhlcmUgYXJlIG1hbnkgc2VydmVycyBhbHJlYWR5IGF2YWlsYWJsZSwgc28gYSBQeXRob24gd2ViIGFwcGxpY2F0aW9uCi1jYW4gYmUgZGVwbG95ZWQgbmVhcmx5IGFueXdoZXJlLiAgVGhpcyBpcyBvbmUgYmlnIGFkdmFudGFnZSB0aGF0IFB5dGhvbiBoYXMKLWNvbXBhcmVkIHdpdGggb3RoZXIgd2ViIHRlY2hub2xvZ2llcy4KLQotLi4gc2VlYWxzbzo6Ci0KLSAgIEEgZ29vZCBvdmVydmlldyBvZiBXU0dJLXJlbGF0ZWQgY29kZSBjYW4gYmUgZm91bmQgaW4gdGhlIGBXU0dJIGhvbWVwYWdlCi0gICA8aHR0cDovL3d3dy53c2dpLm9yZy9lbi9sYXRlc3QvaW5kZXguaHRtbD5gXywgd2hpY2ggY29udGFpbnMgYW4gZXh0ZW5zaXZlIGxpc3Qgb2YgYFdTR0kgc2VydmVycwotICAgPGh0dHA6Ly93d3cud3NnaS5vcmcvZW4vbGF0ZXN0L3NlcnZlcnMuaHRtbD5gXyB3aGljaCBjYW4gYmUgdXNlZCBieSAqYW55KiBhcHBsaWNhdGlvbgotICAgc3VwcG9ydGluZyBXU0dJLgotCi0gICBZb3UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiBzb21lIFdTR0ktc3VwcG9ydGluZyBtb2R1bGVzIGFscmVhZHkgY29udGFpbmVkIGluCi0gICB0aGUgc3RhbmRhcmQgbGlicmFyeSwgbmFtZWx5OgotCi0gICAqIDptb2Q6YHdzZ2lyZWZgIC0tIHNvbWUgdGlueSB1dGlsaXRpZXMgYW5kIHNlcnZlcnMgZm9yIFdTR0kKLQotCi1DYXNlIHN0dWR5OiBNb2luTW9pbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hhdCBkb2VzIFdTR0kgZ2l2ZSB0aGUgd2ViIGFwcGxpY2F0aW9uIGRldmVsb3Blcj8gIExldCdzIHRha2UgYSBsb29rIGF0Ci1hbiBhcHBsaWNhdGlvbiB0aGF0J3MgYmVlbiBhcm91bmQgZm9yIGEgd2hpbGUsIHdoaWNoIHdhcyB3cml0dGVuIGluCi1QeXRob24gd2l0aG91dCB1c2luZyBXU0dJLgotCi1PbmUgb2YgdGhlIG1vc3Qgd2lkZWx5IHVzZWQgd2lraSBzb2Z0d2FyZSBwYWNrYWdlcyBpcyBgTW9pbk1vaW4KLTxodHRwOi8vbW9pbm1vLmluLz5gXy4gIEl0IHdhcyBjcmVhdGVkIGluIDIwMDAsIHNvIGl0IHByZWRhdGVzIFdTR0kgYnkgYWJvdXQKLXRocmVlIHllYXJzLiAgT2xkZXIgdmVyc2lvbnMgbmVlZGVkIHNlcGFyYXRlIGNvZGUgdG8gcnVuIG9uIENHSSwgbW9kX3B5dGhvbiwKLUZhc3RDR0kgYW5kIHN0YW5kYWxvbmUuCi0KLUl0IG5vdyBpbmNsdWRlcyBzdXBwb3J0IGZvciBXU0dJLiAgVXNpbmcgV1NHSSwgaXQgaXMgcG9zc2libGUgdG8gZGVwbG95Ci1Nb2luTW9pbiBvbiBhbnkgV1NHSSBjb21wbGlhbnQgc2VydmVyLCB3aXRoIG5vIGFkZGl0aW9uYWwgZ2x1ZSBjb2RlLgotVW5saWtlIHRoZSBwcmUtV1NHSSB2ZXJzaW9ucywgdGhpcyBjb3VsZCBpbmNsdWRlIFdTR0kgc2VydmVycyB0aGF0IHRoZQotYXV0aG9ycyBvZiBNb2luTW9pbiBrbm93IG5vdGhpbmcgYWJvdXQuCi0KLQotTW9kZWwtVmlldy1Db250cm9sbGVyCi09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIHRlcm0gKk1WQyogaXMgb2Z0ZW4gZW5jb3VudGVyZWQgaW4gc3RhdGVtZW50cyBzdWNoIGFzICJmcmFtZXdvcmsgKmZvbyoKLXN1cHBvcnRzIE1WQyIuICBNVkMgaXMgbW9yZSBhYm91dCB0aGUgb3ZlcmFsbCBvcmdhbml6YXRpb24gb2YgY29kZSwgcmF0aGVyIHRoYW4KLWFueSBwYXJ0aWN1bGFyIEFQSS4gIE1hbnkgd2ViIGZyYW1ld29ya3MgdXNlIHRoaXMgbW9kZWwgdG8gaGVscCB0aGUgZGV2ZWxvcGVyCi1icmluZyBzdHJ1Y3R1cmUgdG8gdGhlaXIgcHJvZ3JhbS4gIEJpZ2dlciB3ZWIgYXBwbGljYXRpb25zIGNhbiBoYXZlIGxvdHMgb2YKLWNvZGUsIHNvIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGhhdmUgYW4gZWZmZWN0aXZlIHN0cnVjdHVyZSByaWdodCBmcm9tIHRoZSBiZWdpbm5pbmcuCi1UaGF0IHdheSwgZXZlbiB1c2VycyBvZiBvdGhlciBmcmFtZXdvcmtzIChvciBldmVuIG90aGVyIGxhbmd1YWdlcywgc2luY2UgTVZDIGlzCi1ub3QgUHl0aG9uLXNwZWNpZmljKSBjYW4gZWFzaWx5IHVuZGVyc3RhbmQgdGhlIGNvZGUsIGdpdmVuIHRoYXQgdGhleSBhcmUKLWFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgTVZDIHN0cnVjdHVyZS4KLQotTVZDIHN0YW5kcyBmb3IgdGhyZWUgY29tcG9uZW50czoKLQotKiBUaGUgKm1vZGVsKi4gIFRoaXMgaXMgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBhbmQgbW9kaWZpZWQuICBJbgotICBQeXRob24gZnJhbWV3b3JrcywgdGhpcyBjb21wb25lbnQgaXMgb2Z0ZW4gcmVwcmVzZW50ZWQgYnkgdGhlIGNsYXNzZXMgdXNlZCBieQotICBhbiBvYmplY3QtcmVsYXRpb25hbCBtYXBwZXIuCi0KLSogVGhlICp2aWV3Ki4gIFRoaXMgY29tcG9uZW50J3Mgam9iIGlzIHRvIGRpc3BsYXkgdGhlIGRhdGEgb2YgdGhlIG1vZGVsIHRvIHRoZQotICB1c2VyLiAgVHlwaWNhbGx5IHRoaXMgY29tcG9uZW50IGlzIGltcGxlbWVudGVkIHZpYSB0ZW1wbGF0ZXMuCi0KLSogVGhlICpjb250cm9sbGVyKi4gIFRoaXMgaXMgdGhlIGxheWVyIGJldHdlZW4gdGhlIHVzZXIgYW5kIHRoZSBtb2RlbC4gIFRoZQotICBjb250cm9sbGVyIHJlYWN0cyB0byB1c2VyIGFjdGlvbnMgKGxpa2Ugb3BlbmluZyBzb21lIHNwZWNpZmljIFVSTCksIHRlbGxzCi0gIHRoZSBtb2RlbCB0byBtb2RpZnkgdGhlIGRhdGEgaWYgbmVjZXNzYXJ5LCBhbmQgdGVsbHMgdGhlIHZpZXcgY29kZSB3aGF0IHRvCi0gIGRpc3BsYXksCi0KLVdoaWxlIG9uZSBtaWdodCB0aGluayB0aGF0IE1WQyBpcyBhIGNvbXBsZXggZGVzaWduIHBhdHRlcm4sIGluIGZhY3QgaXQgaXMgbm90LgotSXQgaXMgdXNlZCBpbiBQeXRob24gYmVjYXVzZSBpdCBoYXMgdHVybmVkIG91dCB0byBiZSB1c2VmdWwgZm9yIGNyZWF0aW5nIGNsZWFuLAotbWFpbnRhaW5hYmxlIHdlYiBzaXRlcy4KLQotLi4gbm90ZTo6Ci0KLSAgIFdoaWxlIG5vdCBhbGwgUHl0aG9uIGZyYW1ld29ya3MgZXhwbGljaXRseSBzdXBwb3J0IE1WQywgaXQgaXMgb2Z0ZW4gdHJpdmlhbAotICAgdG8gY3JlYXRlIGEgd2ViIHNpdGUgd2hpY2ggdXNlcyB0aGUgTVZDIHBhdHRlcm4gYnkgc2VwYXJhdGluZyB0aGUgZGF0YSBsb2dpYwotICAgKHRoZSBtb2RlbCkgZnJvbSB0aGUgdXNlciBpbnRlcmFjdGlvbiBsb2dpYyAodGhlIGNvbnRyb2xsZXIpIGFuZCB0aGUKLSAgIHRlbXBsYXRlcyAodGhlIHZpZXcpLiAgVGhhdCdzIHdoeSBpdCBpcyBpbXBvcnRhbnQgbm90IHRvIHdyaXRlIHVubmVjZXNzYXJ5Ci0gICBQeXRob24gY29kZSBpbiB0aGUgdGVtcGxhdGVzIC0tIGl0IHdvcmtzIGFnYWluc3QgdGhlIE1WQyBtb2RlbCBhbmQgY3JlYXRlcwotICAgY2hhb3MgaW4gdGhlIGNvZGUgYmFzZSwgbWFraW5nIGl0IGhhcmRlciB0byB1bmRlcnN0YW5kIGFuZCBtb2RpZnkuCi0KLS4uIHNlZWFsc286OgotCi0gICBUaGUgRW5nbGlzaCBXaWtpcGVkaWEgaGFzIGFuIGFydGljbGUgYWJvdXQgdGhlIGBNb2RlbC1WaWV3LUNvbnRyb2xsZXIgcGF0dGVybgotICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTW9kZWwtdmlldy1jb250cm9sbGVyPmBfLiAgSXQgaW5jbHVkZXMgYSBsb25nCi0gICBsaXN0IG9mIHdlYiBmcmFtZXdvcmtzIGZvciB2YXJpb3VzIHByb2dyYW1taW5nIGxhbmd1YWdlcy4KLQotCi1JbmdyZWRpZW50cyBmb3IgV2Vic2l0ZXMKLT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XZWJzaXRlcyBhcmUgY29tcGxleCBjb25zdHJ1Y3RzLCBzbyB0b29scyBoYXZlIGJlZW4gY3JlYXRlZCB0byBoZWxwIHdlYgotZGV2ZWxvcGVycyBtYWtlIHRoZWlyIGNvZGUgZWFzaWVyIHRvIHdyaXRlIGFuZCBtb3JlIG1haW50YWluYWJsZS4gIFRvb2xzIGxpa2UKLXRoZXNlIGV4aXN0IGZvciBhbGwgd2ViIGZyYW1ld29ya3MgaW4gYWxsIGxhbmd1YWdlcy4gIERldmVsb3BlcnMgYXJlIG5vdCBmb3JjZWQKLXRvIHVzZSB0aGVzZSB0b29scywgYW5kIG9mdGVuIHRoZXJlIGlzIG5vICJiZXN0IiB0b29sLiAgSXQgaXMgd29ydGggbGVhcm5pbmcKLWFib3V0IHRoZSBhdmFpbGFibGUgdG9vbHMgYmVjYXVzZSB0aGV5IGNhbiBncmVhdGx5IHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mCi1kZXZlbG9waW5nIGEgd2ViIHNpdGUuCi0KLQotLi4gc2VlYWxzbzo6Ci0KLSAgIFRoZXJlIGFyZSBmYXIgbW9yZSBjb21wb25lbnRzIHRoYW4gY2FuIGJlIHByZXNlbnRlZCBoZXJlLiAgVGhlIFB5dGhvbiB3aWtpCi0gICBoYXMgYSBwYWdlIGFib3V0IHRoZXNlIGNvbXBvbmVudHMsIGNhbGxlZAotICAgYFdlYiBDb21wb25lbnRzIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1dlYkNvbXBvbmVudHM+YF8uCi0KLQotVGVtcGxhdGVzCi0tLS0tLS0tLS0KLQotTWl4aW5nIG9mIEhUTUwgYW5kIFB5dGhvbiBjb2RlIGlzIG1hZGUgcG9zc2libGUgYnkgYSBmZXcgbGlicmFyaWVzLiAgV2hpbGUKLWNvbnZlbmllbnQgYXQgZmlyc3QsIGl0IGxlYWRzIHRvIGhvcnJpYmx5IHVubWFpbnRhaW5hYmxlIGNvZGUuICBUaGF0J3Mgd2h5Ci10ZW1wbGF0ZXMgZXhpc3QuICBUZW1wbGF0ZXMgYXJlLCBpbiB0aGUgc2ltcGxlc3QgY2FzZSwganVzdCBIVE1MIGZpbGVzIHdpdGgKLXBsYWNlaG9sZGVycy4gIFRoZSBIVE1MIGlzIHNlbnQgdG8gdGhlIHVzZXIncyBicm93c2VyIGFmdGVyIGZpbGxpbmcgaW4gdGhlCi1wbGFjZWhvbGRlcnMuCi0KLVB5dGhvbiBhbHJlYWR5IGluY2x1ZGVzIGEgd2F5IHRvIGJ1aWxkIHNpbXBsZSB0ZW1wbGF0ZXM6OgotCi0gICAgIyBhIHNpbXBsZSB0ZW1wbGF0ZQotICAgIHRlbXBsYXRlID0gIjxodG1sPjxib2R5PjxoMT5IZWxsbyB7d2hvfSE8L2gxPjwvYm9keT48L2h0bWw+IgotICAgIHByaW50KHRlbXBsYXRlLmZvcm1hdCh3aG89IlJlYWRlciIpKQotCi1UbyBnZW5lcmF0ZSBjb21wbGV4IEhUTUwgYmFzZWQgb24gbm9uLXRyaXZpYWwgbW9kZWwgZGF0YSwgY29uZGl0aW9uYWwKLWFuZCBsb29waW5nIGNvbnN0cnVjdHMgbGlrZSBQeXRob24ncyAqZm9yKiBhbmQgKmlmKiBhcmUgZ2VuZXJhbGx5IG5lZWRlZC4KLSpUZW1wbGF0ZSBlbmdpbmVzKiBzdXBwb3J0IHRlbXBsYXRlcyBvZiB0aGlzIGNvbXBsZXhpdHkuCi0KLVRoZXJlIGFyZSBhIGxvdCBvZiB0ZW1wbGF0ZSBlbmdpbmVzIGF2YWlsYWJsZSBmb3IgUHl0aG9uIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGgKLW9yIHdpdGhvdXQgYSBgZnJhbWV3b3JrYF8uICBTb21lIG9mIHRoZXNlIGRlZmluZSBhIHBsYWluLXRleHQgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlIHdoaWNoIGlzIGVhc3kgdG8gbGVhcm4sIHBhcnRseSBiZWNhdXNlIGl0IGlzIGxpbWl0ZWQgaW4gc2NvcGUuCi1PdGhlcnMgdXNlIFhNTCwgYW5kIHRoZSB0ZW1wbGF0ZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0byBiZSBhbHdheXMgYmUgdmFsaWQKLVhNTC4gIFRoZXJlIGFyZSBtYW55IG90aGVyIHZhcmlhdGlvbnMuCi0KLVNvbWUgYGZyYW1ld29ya3NgXyBzaGlwIHRoZWlyIG93biB0ZW1wbGF0ZSBlbmdpbmUgb3IgcmVjb21tZW5kIG9uZSBpbgotcGFydGljdWxhci4gIEluIHRoZSBhYnNlbmNlIG9mIGEgcmVhc29uIHRvIHVzZSBhIGRpZmZlcmVudCB0ZW1wbGF0ZSBlbmdpbmUsCi11c2luZyB0aGUgb25lIHByb3ZpZGVkIGJ5IG9yIHJlY29tbWVuZGVkIGJ5IHRoZSBmcmFtZXdvcmsgaXMgYSBnb29kIGlkZWEuCi0KLVBvcHVsYXIgdGVtcGxhdGUgZW5naW5lcyBpbmNsdWRlOgotCi0gICAqIGBNYWtvIDxodHRwOi8vd3d3Lm1ha290ZW1wbGF0ZXMub3JnLz5gXwotICAgKiBgR2Vuc2hpIDxodHRwOi8vZ2Vuc2hpLmVkZ2V3YWxsLm9yZy8+YF8KLSAgICogYEppbmphIDxodHRwOi8vamluamEucG9jb28ub3JnLz5gXwotCi0uLiBzZWVhbHNvOjoKLQotICAgVGhlcmUgYXJlIG1hbnkgdGVtcGxhdGUgZW5naW5lcyBjb21wZXRpbmcgZm9yIGF0dGVudGlvbiwgYmVjYXVzZSBpdCBpcwotICAgcHJldHR5IGVhc3kgdG8gY3JlYXRlIHRoZW0gaW4gUHl0aG9uLiAgVGhlIHBhZ2UgYFRlbXBsYXRpbmcKLSAgIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1RlbXBsYXRpbmc+YF8gaW4gdGhlIHdpa2kgbGlzdHMgYSBiaWcsCi0gICBldmVyLWdyb3dpbmcgbnVtYmVyIG9mIHRoZXNlLiAgVGhlIHRocmVlIGxpc3RlZCBhYm92ZSBhcmUgY29uc2lkZXJlZCAic2Vjb25kCi0gICBnZW5lcmF0aW9uIiB0ZW1wbGF0ZSBlbmdpbmVzIGFuZCBhcmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgotCi0KLURhdGEgcGVyc2lzdGVuY2UKLS0tLS0tLS0tLS0tLS0tLS0KLQotKkRhdGEgcGVyc2lzdGVuY2UqLCB3aGlsZSBzb3VuZGluZyB2ZXJ5IGNvbXBsaWNhdGVkLCBpcyBqdXN0IGFib3V0IHN0b3JpbmcgZGF0YS4KLVRoaXMgZGF0YSBtaWdodCBiZSB0aGUgdGV4dCBvZiBibG9nIGVudHJpZXMsIHRoZSBwb3N0aW5ncyBvbiBhIGJ1bGxldGluIGJvYXJkIG9yCi10aGUgdGV4dCBvZiBhIHdpa2kgcGFnZS4gIFRoZXJlIGFyZSwgb2YgY291cnNlLCBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5cyB0byBzdG9yZQotaW5mb3JtYXRpb24gb24gYSB3ZWIgc2VydmVyLgotCi1PZnRlbiwgcmVsYXRpb25hbCBkYXRhYmFzZSBlbmdpbmVzIGxpa2UgYE15U1FMIDxodHRwOi8vd3d3Lm15c3FsLmNvbS8+YF8gb3IKLWBQb3N0Z3JlU1FMIDxodHRwOi8vd3d3LnBvc3RncmVzcWwub3JnLz5gXyBhcmUgdXNlZCBiZWNhdXNlIG9mIHRoZWlyIGdvb2QKLXBlcmZvcm1hbmNlIHdoZW4gaGFuZGxpbmcgdmVyeSBsYXJnZSBkYXRhYmFzZXMgY29uc2lzdGluZyBvZiBtaWxsaW9ucyBvZgotZW50cmllcy4gIFRoZXJlIGlzIGFsc28gYSBzbWFsbCBkYXRhYmFzZSBlbmdpbmUgY2FsbGVkIGBTUUxpdGUKLTxodHRwOi8vd3d3LnNxbGl0ZS5vcmcvPmBfLCB3aGljaCBpcyBidW5kbGVkIHdpdGggUHl0aG9uIGluIHRoZSA6bW9kOmBzcWxpdGUzYAotbW9kdWxlLCBhbmQgd2hpY2ggdXNlcyBvbmx5IG9uZSBmaWxlLiAgSXQgaGFzIG5vIG90aGVyIGRlcGVuZGVuY2llcy4gIEZvcgotc21hbGxlciBzaXRlcyBTUUxpdGUgaXMganVzdCBlbm91Z2guCi0KLVJlbGF0aW9uYWwgZGF0YWJhc2VzIGFyZSAqcXVlcmllZCogdXNpbmcgYSBsYW5ndWFnZSBjYWxsZWQgYFNRTAotPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU1FMPmBfLiAgUHl0aG9uIHByb2dyYW1tZXJzIGluIGdlbmVyYWwgZG8gbm90Ci1saWtlIFNRTCB0b28gbXVjaCwgYXMgdGhleSBwcmVmZXIgdG8gd29yayB3aXRoIG9iamVjdHMuICBJdCBpcyBwb3NzaWJsZSB0byBzYXZlCi1QeXRob24gb2JqZWN0cyBpbnRvIGEgZGF0YWJhc2UgdXNpbmcgYSB0ZWNobm9sb2d5IGNhbGxlZCBgT1JNCi08aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9PYmplY3QtcmVsYXRpb25hbF9tYXBwaW5nPmBfIChPYmplY3QgUmVsYXRpb25hbAotTWFwcGluZykuICBPUk0gdHJhbnNsYXRlcyBhbGwgb2JqZWN0LW9yaWVudGVkIGFjY2VzcyBpbnRvIFNRTCBjb2RlIHVuZGVyIHRoZQotaG9vZCwgc28gdGhlIGRldmVsb3BlciBkb2VzIG5vdCBuZWVkIHRvIHRoaW5rIGFib3V0IGl0LiAgTW9zdCBgZnJhbWV3b3Jrc2BfIHVzZQotT1JNcywgYW5kIGl0IHdvcmtzIHF1aXRlIHdlbGwuCi0KLUEgc2Vjb25kIHBvc3NpYmlsaXR5IGlzIHN0b3JpbmcgZGF0YSBpbiBub3JtYWwsIHBsYWluIHRleHQgZmlsZXMgKHNvbWUKLXRpbWVzIGNhbGxlZCAiZmxhdCBmaWxlcyIpLiAgVGhpcyBpcyB2ZXJ5IGVhc3kgZm9yIHNpbXBsZSBzaXRlcywKLWJ1dCBjYW4gYmUgZGlmZmljdWx0IHRvIGdldCByaWdodCBpZiB0aGUgd2ViIHNpdGUgaXMgcGVyZm9ybWluZyBtYW55Ci11cGRhdGVzIHRvIHRoZSBzdG9yZWQgZGF0YS4KLQotQSB0aGlyZCBwb3NzaWJpbGl0eSBhcmUgb2JqZWN0IG9yaWVudGVkIGRhdGFiYXNlcyAoYWxzbyBjYWxsZWQgIm9iamVjdAotZGF0YWJhc2VzIikuICBUaGVzZSBkYXRhYmFzZXMgc3RvcmUgdGhlIG9iamVjdCBkYXRhIGluIGEgZm9ybSB0aGF0IGNsb3NlbHkKLXBhcmFsbGVscyB0aGUgd2F5IHRoZSBvYmplY3RzIGFyZSBzdHJ1Y3R1cmVkIGluIG1lbW9yeSBkdXJpbmcgcHJvZ3JhbQotZXhlY3V0aW9uLiAgKEJ5IGNvbnRyYXN0LCBPUk1zIHN0b3JlIHRoZSBvYmplY3QgZGF0YSBhcyByb3dzIG9mIGRhdGEgaW4gdGFibGVzCi1hbmQgcmVsYXRpb25zIGJldHdlZW4gdGhvc2Ugcm93cy4pICBTdG9yaW5nIHRoZSBvYmplY3RzIGRpcmVjdGx5IGhhcyB0aGUKLWFkdmFudGFnZSB0aGF0IG5lYXJseSBhbGwgb2JqZWN0cyBjYW4gYmUgc2F2ZWQgaW4gYSBzdHJhaWdodGZvcndhcmQgd2F5LCB1bmxpa2UKLWluIHJlbGF0aW9uYWwgZGF0YWJhc2VzIHdoZXJlIHNvbWUgb2JqZWN0cyBhcmUgdmVyeSBoYXJkIHRvIHJlcHJlc2VudC4KLQotYEZyYW1ld29ya3NgXyBvZnRlbiBnaXZlIGhpbnRzIG9uIHdoaWNoIGRhdGEgc3RvcmFnZSBtZXRob2QgdG8gY2hvb3NlLiAgSXQgaXMKLXVzdWFsbHkgYSBnb29kIGlkZWEgdG8gc3RpY2sgdG8gdGhlIGRhdGEgc3RvcmUgcmVjb21tZW5kZWQgYnkgdGhlIGZyYW1ld29yawotdW5sZXNzIHRoZSBhcHBsaWNhdGlvbiBoYXMgc3BlY2lhbCByZXF1aXJlbWVudHMgYmV0dGVyIHNhdGlzZmllZCBieSBhbgotYWx0ZXJuYXRlIHN0b3JhZ2UgbWVjaGFuaXNtLgotCi0uLiBzZWVhbHNvOjoKLQotICAgKiBgUGVyc2lzdGVuY2UgVG9vbHMgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vUGVyc2lzdGVuY2VUb29scz5gXyBsaXN0cwotICAgICBwb3NzaWJpbGl0aWVzIG9uIGhvdyB0byBzYXZlIGRhdGEgaW4gdGhlIGZpbGUgc3lzdGVtLiAgU29tZSBvZiB0aGVzZQotICAgICBtb2R1bGVzIGFyZSBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5Ci0KLSAgICogYERhdGFiYXNlIFByb2dyYW1taW5nIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0RhdGFiYXNlUHJvZ3JhbW1pbmc+YF8KLSAgICAgaGVscHMgd2l0aCBjaG9vc2luZyBhIG1ldGhvZCBmb3Igc2F2aW5nIGRhdGEKLQotICAgKiBgU1FMQWxjaGVteSA8aHR0cDovL3d3dy5zcWxhbGNoZW15Lm9yZy8+YF8sIHRoZSBtb3N0IHBvd2VyZnVsIE9SLU1hcHBlcgotICAgICBmb3IgUHl0aG9uLCBhbmQgYEVsaXhpciA8aHR0cDovL2VsaXhpci5lbWF0aWEuZGUvPmBfLCB3aGljaCBtYWtlcwotICAgICBTUUxBbGNoZW15IGVhc2llciB0byB1c2UKLQotICAgKiBgU1FMT2JqZWN0IDxodHRwOi8vd3d3LnNxbG9iamVjdC5vcmcvPmBfLCBhbm90aGVyIHBvcHVsYXIgT1ItTWFwcGVyCi0KLSAgICogYFpPREIgPGh0dHBzOi8vbGF1bmNocGFkLm5ldC96b2RiPmBfIGFuZCBgRHVydXMKLSAgICAgPGh0dHA6Ly93d3cubWVtcy1leGNoYW5nZS5vcmcvc29mdHdhcmUvZHVydXMvPmBfLCB0d28gb2JqZWN0IG9yaWVudGVkCi0gICAgIGRhdGFiYXNlcwotCi0KLS4uIF9mcmFtZXdvcms6Ci0KLUZyYW1ld29ya3MKLT09PT09PT09PT0KLQotVGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgY29kZSB0byBydW4gd2ViIHNpdGVzIGludm9sdmVzIHdyaXRpbmcgY29kZSB0byBwcm92aWRlCi12YXJpb3VzIHNlcnZpY2VzLiAgVGhlIGNvZGUgdG8gcHJvdmlkZSBhIHBhcnRpY3VsYXIgc2VydmljZSBvZnRlbiB3b3JrcyB0aGUKLXNhbWUgd2F5IHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbXBsZXhpdHkgb3IgcHVycG9zZSBvZiB0aGUgd2ViIHNpdGUgaW4gcXVlc3Rpb24uCi1BYnN0cmFjdGluZyB0aGVzZSBjb21tb24gc29sdXRpb25zIGludG8gcmV1c2FibGUgY29kZSBwcm9kdWNlcyB3aGF0IGFyZSBjYWxsZWQKLSJmcmFtZXdvcmtzIiBmb3Igd2ViIGRldmVsb3BtZW50LiAgUGVyaGFwcyB0aGUgbW9zdCB3ZWxsLWtub3duIGZyYW1ld29yayBmb3IKLXdlYiBkZXZlbG9wbWVudCBpcyBSdWJ5IG9uIFJhaWxzLCBidXQgUHl0aG9uIGhhcyBpdHMgb3duIGZyYW1ld29ya3MuICBTb21lIG9mCi10aGVzZSB3ZXJlIHBhcnRseSBpbnNwaXJlZCBieSBSYWlscywgb3IgYm9ycm93ZWQgaWRlYXMgZnJvbSBSYWlscywgYnV0IG1hbnkKLWV4aXN0ZWQgYSBsb25nIHRpbWUgYmVmb3JlIFJhaWxzLgotCi1PcmlnaW5hbGx5IFB5dGhvbiB3ZWIgZnJhbWV3b3JrcyB0ZW5kZWQgdG8gaW5jb3Jwb3JhdGUgYWxsIG9mIHRoZSBzZXJ2aWNlcwotbmVlZGVkIHRvIGRldmVsb3Agd2ViIHNpdGVzIGFzIGEgZ2lhbnQsIGludGVncmF0ZWQgc2V0IG9mIHRvb2xzLiAgTm8gdHdvIHdlYgotZnJhbWV3b3JrcyB3ZXJlIGludGVyb3BlcmFibGU6ICBhIHByb2dyYW0gZGV2ZWxvcGVkIGZvciBvbmUgY291bGQgbm90IGJlCi1kZXBsb3llZCBvbiBhIGRpZmZlcmVudCBvbmUgd2l0aG91dCBjb25zaWRlcmFibGUgcmUtZW5naW5lZXJpbmcgd29yay4gIFRoaXMgbGVkCi10byB0aGUgZGV2ZWxvcG1lbnQgb2YgIm1pbmltYWxpc3QiIHdlYiBmcmFtZXdvcmtzIHRoYXQgcHJvdmlkZWQganVzdCB0aGUgdG9vbHMKLXRvIGNvbW11bmljYXRlIGJldHdlZW4gdGhlIFB5dGhvbiBjb2RlIGFuZCB0aGUgaHR0cCBwcm90b2NvbCwgd2l0aCBhbGwgb3RoZXIKLXNlcnZpY2VzIHRvIGJlIGFkZGVkIG9uIHRvcCB2aWEgc2VwYXJhdGUgY29tcG9uZW50cy4gIFNvbWUgYWQgaG9jIHN0YW5kYXJkcwotd2VyZSBkZXZlbG9wZWQgdGhhdCBhbGxvd2VkIGZvciBsaW1pdGVkIGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbiBmcmFtZXdvcmtzLAotc3VjaCBhcyBhIHN0YW5kYXJkIHRoYXQgYWxsb3dlZCBkaWZmZXJlbnQgdGVtcGxhdGUgZW5naW5lcyB0byBiZSB1c2VkCi1pbnRlcmNoYW5nZWFibHkuCi0KLVNpbmNlIHRoZSBhZHZlbnQgb2YgV1NHSSwgdGhlIFB5dGhvbiB3ZWIgZnJhbWV3b3JrIHdvcmxkIGhhcyBiZWVuIGV2b2x2aW5nCi10b3dhcmQgaW50ZXJvcGVyYWJpbGl0eSBiYXNlZCBvbiB0aGUgV1NHSSBzdGFuZGFyZC4gIE5vdyBtYW55IHdlYiBmcmFtZXdvcmtzLAotd2hldGhlciAiZnVsbCBzdGFjayIgKHByb3ZpZGluZyBhbGwgdGhlIHRvb2xzIG9uZSBuZWVkcyB0byBkZXBsb3kgdGhlIG1vc3QKLWNvbXBsZXggd2ViIHNpdGVzKSBvciBtaW5pbWFsaXN0LCBvciBhbnl0aGluZyBpbiBiZXR3ZWVuLCBhcmUgYnVpbHQgZnJvbQotY29sbGVjdGlvbnMgb2YgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggbW9yZSB0aGFuIG9uZQotZnJhbWV3b3JrLgotCi1UaGUgbWFqb3JpdHkgb2YgdXNlcnMgd2lsbCBwcm9iYWJseSB3YW50IHRvIHNlbGVjdCBhICJmdWxsIHN0YWNrIiBmcmFtZXdvcmsKLXRoYXQgaGFzIGFuIGFjdGl2ZSBjb21tdW5pdHkuICBUaGVzZSBmcmFtZXdvcmtzIHRlbmQgdG8gYmUgd2VsbCBkb2N1bWVudGVkLAotYW5kIHByb3ZpZGUgdGhlIGVhc2llc3QgcGF0aCB0byBwcm9kdWNpbmcgYSBmdWxseSBmdW5jdGlvbmFsIHdlYiBzaXRlIGluCi1taW5pbWFsIHRpbWUuCi0KLQotU29tZSBub3RhYmxlIGZyYW1ld29ya3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGFyZSBhbiBpbmNyZWRpYmxlIG51bWJlciBvZiBmcmFtZXdvcmtzLCBzbyB0aGV5IGNhbm5vdCBhbGwgYmUgY292ZXJlZAotaGVyZS4gIEluc3RlYWQgd2Ugd2lsbCBicmllZmx5IHRvdWNoIG9uIHNvbWUgb2YgdGhlIG1vc3QgcG9wdWxhci4KLQotCi1EamFuZ28KLV5eXl5eXgotCi1gRGphbmdvIDxodHRwczovL3d3dy5kamFuZ29wcm9qZWN0LmNvbS8+YF8gaXMgYSBmcmFtZXdvcmsgY29uc2lzdGluZyBvZiBzZXZlcmFsCi10aWdodGx5IGNvdXBsZWQgZWxlbWVudHMgd2hpY2ggd2VyZSB3cml0dGVuIGZyb20gc2NyYXRjaCBhbmQgd29yayB0b2dldGhlciB2ZXJ5Ci13ZWxsLiAgSXQgaW5jbHVkZXMgYW4gT1JNIHdoaWNoIGlzIHF1aXRlIHBvd2VyZnVsIHdoaWxlIGJlaW5nIHNpbXBsZSB0byB1c2UsCi1hbmQgaGFzIGEgZ3JlYXQgb25saW5lIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZSB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBlZGl0Ci10aGUgZGF0YSBpbiB0aGUgZGF0YWJhc2Ugd2l0aCBhIGJyb3dzZXIuICBUaGUgdGVtcGxhdGUgZW5naW5lIGlzIHRleHQtYmFzZWQgYW5kCi1pcyBkZXNpZ25lZCB0byBiZSB1c2FibGUgZm9yIHBhZ2UgZGVzaWduZXJzIHdobyBjYW5ub3Qgd3JpdGUgUHl0aG9uLiAgSXQKLXN1cHBvcnRzIHRlbXBsYXRlIGluaGVyaXRhbmNlIGFuZCBmaWx0ZXJzICh3aGljaCB3b3JrIGxpa2UgVW5peCBwaXBlcykuICBEamFuZ28KLWhhcyBtYW55IGhhbmR5IGZlYXR1cmVzIGJ1bmRsZWQsIHN1Y2ggYXMgY3JlYXRpb24gb2YgUlNTIGZlZWRzIG9yIGdlbmVyaWMgdmlld3MsCi13aGljaCBtYWtlIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSB3ZWIgc2l0ZXMgYWxtb3N0IHdpdGhvdXQgd3JpdGluZyBhbnkgUHl0aG9uIGNvZGUuCi0KLUl0IGhhcyBhIGJpZywgaW50ZXJuYXRpb25hbCBjb21tdW5pdHksIHRoZSBtZW1iZXJzIG9mIHdoaWNoIGhhdmUgY3JlYXRlZCBtYW55Ci13ZWIgc2l0ZXMuICBUaGVyZSBhcmUgYWxzbyBhIGxvdCBvZiBhZGQtb24gcHJvamVjdHMgd2hpY2ggZXh0ZW5kIERqYW5nbydzIG5vcm1hbAotZnVuY3Rpb25hbGl0eS4gIFRoaXMgaXMgcGFydGx5IGR1ZSB0byBEamFuZ28ncyB3ZWxsIHdyaXR0ZW4gYG9ubGluZQotZG9jdW1lbnRhdGlvbiA8aHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tLz5gXyBhbmQgdGhlIGBEamFuZ28gYm9vawotPGh0dHA6Ly93d3cuZGphbmdvYm9vay5jb20vPmBfLgotCi0KLS4uIG5vdGU6OgotCi0gICBBbHRob3VnaCBEamFuZ28gaXMgYW4gTVZDLXN0eWxlIGZyYW1ld29yaywgaXQgbmFtZXMgdGhlIGVsZW1lbnRzCi0gICBkaWZmZXJlbnRseSwgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBgRGphbmdvIEZBUQotICAgPGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi9kZXYvZmFxL2dlbmVyYWwvI2RqYW5nby1hcHBlYXJzLXRvLWJlLWEtbXZjLWZyYW1ld29yay1idXQteW91LWNhbGwtdGhlLWNvbnRyb2xsZXItdGhlLXZpZXctYW5kLXRoZS12aWV3LXRoZS10ZW1wbGF0ZS1ob3ctY29tZS15b3UtZG9uLXQtdXNlLXRoZS1zdGFuZGFyZC1uYW1lcz5gXy4KLQotCi1UdXJib0dlYXJzCi1eXl5eXl5eXl5eCi0KLUFub3RoZXIgcG9wdWxhciB3ZWIgZnJhbWV3b3JrIGZvciBQeXRob24gaXMgYFR1cmJvR2VhcnMKLTxodHRwOi8vd3d3LnR1cmJvZ2VhcnMub3JnLz5gXy4gIFR1cmJvR2VhcnMgdGFrZXMgdGhlIGFwcHJvYWNoIG9mIHVzaW5nIGFscmVhZHkKLWV4aXN0aW5nIGNvbXBvbmVudHMgYW5kIGNvbWJpbmluZyB0aGVtIHdpdGggZ2x1ZSBjb2RlIHRvIGNyZWF0ZSBhIHNlYW1sZXNzCi1leHBlcmllbmNlLiAgVHVyYm9HZWFycyBnaXZlcyB0aGUgdXNlciBmbGV4aWJpbGl0eSBpbiBjaG9vc2luZyBjb21wb25lbnRzLiBGb3IKLWV4YW1wbGUgdGhlIE9STSBhbmQgdGVtcGxhdGUgZW5naW5lIGNhbiBiZSBjaGFuZ2VkIHRvIHVzZSBwYWNrYWdlcyBkaWZmZXJlbnQKLWZyb20gdGhvc2UgdXNlZCBieSBkZWZhdWx0LgotCi1UaGUgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGBUdXJib0dlYXJzIHdpa2kKLTxodHRwOi8vZG9jcy50dXJib2dlYXJzLm9yZy8+YF8sIHdoZXJlIGxpbmtzIHRvIHNjcmVlbmNhc3RzIGNhbiBiZSBmb3VuZC4KLVR1cmJvR2VhcnMgaGFzIGFsc28gYW4gYWN0aXZlIHVzZXIgY29tbXVuaXR5IHdoaWNoIGNhbiByZXNwb25kIHRvIG1vc3QgcmVsYXRlZAotcXVlc3Rpb25zLiAgVGhlcmUgaXMgYWxzbyBhIGBUdXJib0dlYXJzIGJvb2sgPGh0dHA6Ly90dXJib2dlYXJzYm9vay5jb20vPmBfCi1wdWJsaXNoZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KLQotVGhlIG5ld2VzdCB2ZXJzaW9uIG9mIFR1cmJvR2VhcnMsIHZlcnNpb24gMi4wLCBtb3ZlcyBldmVuIGZ1cnRoZXIgaW4gZGlyZWN0aW9uCi1vZiBXU0dJIHN1cHBvcnQgYW5kIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS4gIFR1cmJvR2VhcnMgMiBpcyBiYXNlZCBvbgotdGhlIFdTR0kgc3RhY2sgb2YgYW5vdGhlciBwb3B1bGFyIGNvbXBvbmVudC1iYXNlZCB3ZWIgZnJhbWV3b3JrLCBgUHlsb25zCi08aHR0cDovL3d3dy5weWxvbnNwcm9qZWN0Lm9yZy8+YF8uCi0KLQotWm9wZQotXl5eXgotCi1UaGUgWm9wZSBmcmFtZXdvcmsgaXMgb25lIG9mIHRoZSAib2xkIG9yaWdpbmFsIiBmcmFtZXdvcmtzLiAgSXRzIGN1cnJlbnQKLWluY2FybmF0aW9uIGluIFpvcGUyIGlzIGEgdGlnaHRseSBpbnRlZ3JhdGVkIGZ1bGwtc3RhY2sgZnJhbWV3b3JrLiAgT25lIG9mIGl0cwotbW9zdCBpbnRlcmVzdGluZyBmZWF0dXJlIGlzIGl0cyB0aWdodCBpbnRlZ3JhdGlvbiB3aXRoIGEgcG93ZXJmdWwgb2JqZWN0Ci1kYXRhYmFzZSBjYWxsZWQgdGhlIGBaT0RCIDxodHRwczovL2xhdW5jaHBhZC5uZXQvem9kYj5gXyAoWm9wZSBPYmplY3QgRGF0YWJhc2UpLgotQmVjYXVzZSBvZiBpdHMgaGlnaGx5IGludGVncmF0ZWQgbmF0dXJlLCBab3BlIHdvdW5kIHVwIGluIGEgc29tZXdoYXQgaXNvbGF0ZWQKLWVjb3N5c3RlbTogIGNvZGUgd3JpdHRlbiBmb3IgWm9wZSB3YXNuJ3QgdmVyeSB1c2FibGUgb3V0c2lkZSBvZiBab3BlLCBhbmQKLXZpY2UtdmVyc2EuICBUbyBzb2x2ZSB0aGlzIHByb2JsZW0gdGhlIFpvcGUgMyBlZmZvcnQgd2FzIHN0YXJ0ZWQuICBab3BlIDMKLXJlLWVuZ2luZWVycyBab3BlIGFzIGEgc2V0IG9mIG1vcmUgY2xlYW5seSBpc29sYXRlZCBjb21wb25lbnRzLiAgVGhpcyBlZmZvcnQKLXdhcyBzdGFydGVkIGJlZm9yZSB0aGUgYWR2ZW50IG9mIHRoZSBXU0dJIHN0YW5kYXJkLCBidXQgdGhlcmUgaXMgV1NHSSBzdXBwb3J0Ci1mb3IgWm9wZSAzIGZyb20gdGhlIGBSZXBvemUgPGh0dHA6Ly9yZXBvemUub3JnLz5gXyBwcm9qZWN0LiAgWm9wZSBjb21wb25lbnRzCi1oYXZlIG1hbnkgeWVhcnMgb2YgcHJvZHVjdGlvbiB1c2UgYmVoaW5kIHRoZW0sIGFuZCB0aGUgWm9wZSAzIHByb2plY3QgZ2l2ZXMKLWFjY2VzcyB0byB0aGVzZSBjb21wb25lbnRzIHRvIHRoZSB3aWRlciBQeXRob24gY29tbXVuaXR5LiAgVGhlcmUgaXMgZXZlbiBhCi1zZXBhcmF0ZSBmcmFtZXdvcmsgYmFzZWQgb24gdGhlIFpvcGUgY29tcG9uZW50czogYEdyb2sKLTxodHRwOi8vZ3Jvay56b3BlLm9yZy8+YF8uCi0KLVpvcGUgaXMgYWxzbyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgYFBsb25lIDxodHRwczovL3Bsb25lLm9yZy8+YF8gY29udGVudAotbWFuYWdlbWVudCBzeXN0ZW0sIG9uZSBvZiB0aGUgbW9zdCBwb3dlcmZ1bCBhbmQgcG9wdWxhciBjb250ZW50IG1hbmFnZW1lbnQKLXN5c3RlbXMgYXZhaWxhYmxlLgotCi0KLU90aGVyIG5vdGFibGUgZnJhbWV3b3JrcwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLU9mIGNvdXJzZSB0aGVzZSBhcmUgbm90IHRoZSBvbmx5IGZyYW1ld29ya3MgdGhhdCBhcmUgYXZhaWxhYmxlLiAgVGhlcmUgYXJlCi1tYW55IG90aGVyIGZyYW1ld29ya3Mgd29ydGggbWVudGlvbmluZy4KLQotQW5vdGhlciBmcmFtZXdvcmsgdGhhdCdzIGFscmVhZHkgYmVlbiBtZW50aW9uZWQgaXMgYFB5bG9uc2BfLiAgUHlsb25zIGlzIG11Y2gKLWxpa2UgVHVyYm9HZWFycywgYnV0IHdpdGggYW4gZXZlbiBzdHJvbmdlciBlbXBoYXNpcyBvbiBmbGV4aWJpbGl0eSwgd2hpY2ggY29tZXMKLWF0IHRoZSBjb3N0IG9mIGJlaW5nIG1vcmUgZGlmZmljdWx0IHRvIHVzZS4gIE5lYXJseSBldmVyeSBjb21wb25lbnQgY2FuIGJlCi1leGNoYW5nZWQsIHdoaWNoIG1ha2VzIGl0IG5lY2Vzc2FyeSB0byB1c2UgdGhlIGRvY3VtZW50YXRpb24gb2YgZXZlcnkgc2luZ2xlCi1jb21wb25lbnQsIG9mIHdoaWNoIHRoZXJlIGFyZSBtYW55LiAgUHlsb25zIGJ1aWxkcyB1cG9uIGBQYXN0ZQotPGh0dHA6Ly9weXRob25wYXN0ZS5vcmcvPmBfLCBhbiBleHRlbnNpdmUgc2V0IG9mIHRvb2xzIHdoaWNoIGFyZSBoYW5keSBmb3IgV1NHSS4KLQotQW5kIHRoYXQncyBzdGlsbCBub3QgZXZlcnl0aGluZy4gIFRoZSBtb3N0IHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gY2FuIGFsd2F5cyBiZQotZm91bmQgaW4gdGhlIFB5dGhvbiB3aWtpLgotCi0uLiBzZWVhbHNvOjoKLQotICAgVGhlIFB5dGhvbiB3aWtpIGNvbnRhaW5zIGFuIGV4dGVuc2l2ZSBsaXN0IG9mIGB3ZWIgZnJhbWV3b3JrcwotICAgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vV2ViRnJhbWV3b3Jrcz5gXy4KLQotICAgTW9zdCBmcmFtZXdvcmtzIGFsc28gaGF2ZSB0aGVpciBvd24gbWFpbGluZyBsaXN0cyBhbmQgSVJDIGNoYW5uZWxzLCBsb29rIG91dAotICAgZm9yIHRoZXNlIG9uIHRoZSBwcm9qZWN0cycgd2ViIHNpdGVzLgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQppbmRleCBjMTI1NWE2Li4zMjFmNzI3IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQpAQCAtOSw5ICs5LDkgQEAKICMgQ3JlYXRlIHRoZSBiYXNlIHRleHQgbWVzc2FnZS4KIG1zZyA9IEVtYWlsTWVzc2FnZSgpCiBtc2dbJ1N1YmplY3QnXSA9ICJBeW9ucyBhc3BlcmdlcyBwb3VyIGxlIGTDqWpldW5lciIKLW1zZ1snRnJvbSddID0gQWRkcmVzcygiUGVww6kgTGUgUGV3IiwgInBlcGVAZXhhbXBsZS5jb20iKQotbXNnWydUbyddID0gKEFkZHJlc3MoIlBlbmVsb3BlIFB1c3N5Y2F0IiwgInBlbmVsb3BlQGV4YW1wbGUuY29tIiksCi0gICAgICAgICAgICAgQWRkcmVzcygiRmFicmV0dGUgUHVzc3ljYXQiLCAiZmFicmV0dGVAZXhhbXBsZS5jb20iKSkKK21zZ1snRnJvbSddID0gQWRkcmVzcygiUGVww6kgTGUgUGV3IiwgInBlcGUiLCAiZXhhbXBsZS5jb20iKQorbXNnWydUbyddID0gKEFkZHJlc3MoIlBlbmVsb3BlIFB1c3N5Y2F0IiwgInBlbmVsb3BlIiwgImV4YW1wbGUuY29tIiksCisgICAgICAgICAgICAgQWRkcmVzcygiRmFicmV0dGUgUHVzc3ljYXQiLCAiZmFicmV0dGUiLCAiZXhhbXBsZS5jb20iKSkKIG1zZy5zZXRfY29udGVudCgiIiJcCiBTYWx1dCEKIApkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL25vZGR5LmMgYi9Eb2MvaW5jbHVkZXMvbm9kZHkuYwppbmRleCA4Zjc5ZmNmLi4xOWEyN2E4IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbm9kZHkuYworKysgYi9Eb2MvaW5jbHVkZXMvbm9kZHkuYwpAQCAtMzgsNyArMzgsNyBAQAogfTsKIAogUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9ub2RkeSh2b2lkKSAKK1B5SW5pdF9ub2RkeSh2b2lkKQogewogICAgIFB5T2JqZWN0KiBtOwogCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvcnVuLWZ1bmMuYyBiL0RvYy9pbmNsdWRlcy9ydW4tZnVuYy5jCmluZGV4IDFjOTg2MGQuLjk4NmQ2NzAgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9ydW4tZnVuYy5jCisrKyBiL0RvYy9pbmNsdWRlcy9ydW4tZnVuYy5jCkBAIC0xMyw3ICsxMyw3IEBACiAgICAgfQogCiAgICAgUHlfSW5pdGlhbGl6ZSgpOwotICAgIHBOYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoYXJndlsxXSk7CisgICAgcE5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGFyZ3ZbMV0pOwogICAgIC8qIEVycm9yIGNoZWNraW5nIG9mIHBOYW1lIGxlZnQgb3V0ICovCiAKICAgICBwTW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0KHBOYW1lKTsKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmggYi9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCmluZGV4IDcyNjUwMDkuLjlmNDc4OTkgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKKysrIGIvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaApAQCAtOSw3ICs5LDggQEAKICAgICBwcmludGZ1bmMgdHBfcHJpbnQ7CiAgICAgZ2V0YXR0cmZ1bmMgdHBfZ2V0YXR0cjsKICAgICBzZXRhdHRyZnVuYyB0cF9zZXRhdHRyOwotICAgIHZvaWQgKnRwX3Jlc2VydmVkOyAvKiBmb3JtZXJseSBrbm93biBhcyB0cF9jb21wYXJlICovCisgICAgUHlBc3luY01ldGhvZHMgKnRwX2FzX2FzeW5jOyAvKiBmb3JtZXJseSBrbm93biBhcyB0cF9jb21wYXJlIChQeXRob24gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRwX3Jlc2VydmVkIChQeXRob24gMykgKi8KICAgICByZXByZnVuYyB0cF9yZXByOwogCiAgICAgLyogTWV0aG9kIHN1aXRlcyBmb3Igc3RhbmRhcmQgY2xhc3NlcyAqLwpkaWZmIC0tZ2l0IGEvRG9jL2luc3RhbGwvaW5kZXgucnN0IGIvRG9jL2luc3RhbGwvaW5kZXgucnN0CmluZGV4IGU2M2I2Y2QuLmIyMmZjNTkgMTAwNjQ0Ci0tLSBhL0RvYy9pbnN0YWxsL2luZGV4LnJzdAorKysgYi9Eb2MvaW5zdGFsbC9pbmRleC5yc3QKQEAgLTEwLDYgKzEwLDExIEBACiAKIC4uIFRPRE86IEZpbGwgaW4gWFhYIGNvbW1lbnRzCiAKKy4uIHNlZWFsc286OgorCisgICA6cmVmOmBpbnN0YWxsaW5nLWluZGV4YAorICAgICAgVGhlIHVwIHRvIGRhdGUgbW9kdWxlIGluc3RhbGxhdGlvbiBkb2N1bWVudGF0aW9ucworCiAuLiBUaGUgYXVkaWVuY2UgZm9yIHRoaXMgZG9jdW1lbnQgaW5jbHVkZXMgcGVvcGxlIHdobyBkb24ndCBrbm93IGFueXRoaW5nCiAgICBhYm91dCBQeXRob24gYW5kIGFyZW4ndCBhYm91dCB0byBsZWFybiB0aGUgbGFuZ3VhZ2UganVzdCBpbiBvcmRlciB0bwogICAgaW5zdGFsbCBhbmQgbWFpbnRhaW4gaXQgZm9yIHRoZWlyIHVzZXJzLCBpLmUuIHN5c3RlbSBhZG1pbmlzdHJhdG9ycy4KQEAgLTM2MSw3ICszNjYsNyBAQAogVHlwZSBvZiBmaWxlICAgIEluc3RhbGxhdGlvbiBkaXJlY3RvcnkKID09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogbW9kdWxlcyAgICAgICAgIDpmaWxlOmB7dXNlcmJhc2V9XFxQeXRob257WFl9XFxzaXRlLXBhY2thZ2VzYAotc2NyaXB0cyAgICAgICAgIDpmaWxlOmB7dXNlcmJhc2V9XFxTY3JpcHRzYAorc2NyaXB0cyAgICAgICAgIDpmaWxlOmB7dXNlcmJhc2V9XFxQeXRob257WFl9XFxTY3JpcHRzYAogZGF0YSAgICAgICAgICAgIDpmaWxlOmB7dXNlcmJhc2V9YAogQyBoZWFkZXJzICAgICAgIDpmaWxlOmB7dXNlcmJhc2V9XFxQeXRob257WFl9XFxJbmNsdWRlXFx7ZGlzdG5hbWV9YAogPT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC04NjUsMTIgKzg3MCwxMiBAQAogcnVuLCB0aGV5IHdpbGwgdXNlIHRoZSB2YWx1ZXMgaW4gdGhlIGNvbmZpZyBmaWxlLikKIAogWW91IGNhbiBmaW5kIG91dCB0aGUgY29tcGxldGUgbGlzdCBvZiBvcHRpb25zIGZvciBhbnkgY29tbWFuZCB1c2luZyB0aGUKLTpvcHRpb246YC0taGVscGAgb3B0aW9uLCBlLmcuOjoKKzpvcHRpb246YCEtLWhlbHBgIG9wdGlvbiwgZS5nLjo6CiAKICAgIHB5dGhvbiBzZXR1cC5weSBidWlsZCAtLWhlbHAKIAogYW5kIHlvdSBjYW4gZmluZCBvdXQgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgZ2xvYmFsIG9wdGlvbnMgYnkgdXNpbmcKLTpvcHRpb246YC0taGVscGAgd2l0aG91dCBhIGNvbW1hbmQ6OgorOm9wdGlvbjpgIS0taGVscGAgd2l0aG91dCBhIGNvbW1hbmQ6OgogCiAgICBweXRob24gc2V0dXAucHkgLS1oZWxwCiAKQEAgLTkyNyw3ICs5MzIsNyBAQAogICB0byBiZSBpbiBPYmplY3RpdmUgQy4KIAogKiAqY3BwYXJnKiBpcyBhbiBhcmd1bWVudCBmb3IgdGhlIEMgcHJlcHJvY2Vzc29yLCAgYW5kIGlzIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGgKLSAgOm9wdGlvbjpgLUlgLCA6b3B0aW9uOmAtRGAsIDpvcHRpb246YC1VYCBvciA6b3B0aW9uOmAtQ2AuCisgIDpvcHRpb246YCEtSWAsIDpvcHRpb246YC1EYCwgOm9wdGlvbjpgIS1VYCBvciA6b3B0aW9uOmAtQ2AuCiAKICogKmxpYnJhcnkqIGlzIGFueXRoaW5nIGVuZGluZyBpbiA6ZmlsZTpgLmFgIG9yIGJlZ2lubmluZyB3aXRoIDpvcHRpb246YC1sYCBvcgogICA6b3B0aW9uOmAtTGAuCkBAIC0xMDEyLDcgKzEwMTcsNyBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYEMrK0J1aWxkZXIgQ29tcGlsZXIgPGh0dHA6Ly93d3cuZW1iYXJjYWRlcm8uY29tL2Rvd25sb2Fkcz5gXworICAgYEMrK0J1aWxkZXIgQ29tcGlsZXIgPGh0dHBzOi8vd3d3LmVtYmFyY2FkZXJvLmNvbS9wcm9kdWN0cz5gXwogICAgICAgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyZWUgQysrIGNvbXBpbGVyIGZyb20gQm9ybGFuZCwgaW5jbHVkaW5nIGxpbmtzIHRvIHRoZQogICAgICAgZG93bmxvYWQgcGFnZXMuCiAKQEAgLTEwNTUsNyArMTA2MCw3IEBACiBmb3IgQm9ybGFuZCdzIEMrKywgYmVjYXVzZSB0aGVyZSBpcyBubyBwcm9ncmFtIHRvIGNvbnZlcnQgdGhlIGxpYnJhcnkuICBGaXJzdAogeW91IGhhdmUgdG8gY3JlYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHdoaWNoIHRoZSBQeXRob24gRExMIGV4cG9ydHMuIChZb3UgY2FuIGZpbmQKIGEgZ29vZCBwcm9ncmFtIGZvciB0aGlzIHRhc2sgYXQKLWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWluZ3cvZmlsZXMvTWluR1cvRXh0ZW5zaW9uL3BleHBvcnRzLykuCitodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9taW5ndy9maWxlcy9NaW5HVy9FeHRlbnNpb24vcGV4cG9ydHMvKS4KIAogLi4gSSBkb24ndCB1bmRlcnN0YW5kIHdoYXQgdGhlIG5leHQgbGluZSBtZWFucy4gLS1hbWsKIC4uIChpbmNsdXNpdmUgdGhlIHJlZmVyZW5jZXMgb24gZGF0YSBzdHJ1Y3R1cmVzLikKQEAgLTEwOTMsNyArMTA5OCw3IEBACiAuLiBbI10gVGhpcyBhbHNvIG1lYW5zIHlvdSBjb3VsZCByZXBsYWNlIGFsbCBleGlzdGluZyBDT0ZGLWxpYnJhcmllcyB3aXRoIE9NRi1saWJyYXJpZXMKICAgIG9mIHRoZSBzYW1lIG5hbWUuCiAKLS4uIFsjXSBDaGVjayBodHRwOi8vd3d3LnNvdXJjZXdhcmUub3JnL2N5Z3dpbi8gYW5kIGh0dHA6Ly93d3cubWluZ3cub3JnLyBmb3IgbW9yZQorLi4gWyNdIENoZWNrIGh0dHBzOi8vd3d3LnNvdXJjZXdhcmUub3JnL2N5Z3dpbi8gYW5kIGh0dHA6Ly93d3cubWluZ3cub3JnLyBmb3IgbW9yZQogICAgaW5mb3JtYXRpb24KIAogLi4gWyNdIFRoZW4geW91IGhhdmUgbm8gUE9TSVggZW11bGF0aW9uIGF2YWlsYWJsZSwgYnV0IHlvdSBhbHNvIGRvbid0IG5lZWQKZGlmZiAtLWdpdCBhL0RvYy9pbnN0YWxsaW5nL2luZGV4LnJzdCBiL0RvYy9pbnN0YWxsaW5nL2luZGV4LnJzdAppbmRleCA5NzNjNjg5Li4xZWYzMTQ5IDEwMDY0NAotLS0gYS9Eb2MvaW5zdGFsbGluZy9pbmRleC5yc3QKKysrIGIvRG9jL2luc3RhbGxpbmcvaW5kZXgucnN0CkBAIC00OCw3ICs0OCw3IEBACiAgIHJlcG9zaXRvcnkgb2Ygb3BlbiBzb3VyY2UgbGljZW5zZWQgcGFja2FnZXMgbWFkZSBhdmFpbGFibGUgZm9yIHVzZSBieQogICBvdGhlciBQeXRob24gdXNlcnMKICogdGhlIGBQeXRob24gUGFja2FnaW5nIEF1dGhvcml0eQotICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZnV0dXJlLmh0bWw+YF9fIGFyZSB0aGUgZ3JvdXAgb2YKKyAgPGh0dHBzOi8vd3d3LnB5cGEuaW8vZW4vbGF0ZXN0Lz5gX18gYXJlIHRoZSBncm91cCBvZgogICBkZXZlbG9wZXJzIGFuZCBkb2N1bWVudGF0aW9uIGF1dGhvcnMgcmVzcG9uc2libGUgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQKICAgZXZvbHV0aW9uIG9mIHRoZSBzdGFuZGFyZCBwYWNrYWdpbmcgdG9vbHMgYW5kIHRoZSBhc3NvY2lhdGVkIG1ldGFkYXRhIGFuZAogICBmaWxlIGZvcm1hdCBzdGFuZGFyZHMuIFRoZXkgbWFpbnRhaW4gYSB2YXJpZXR5IG9mIHRvb2xzLCBkb2N1bWVudGF0aW9uCkBAIC04NCwxMCArODQsMTIgQEAKICAgIFB5dGhvbi4KIAogSXQncyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYW4gZXhhY3Qgb3IgbWluaW11bSB2ZXJzaW9uIGRpcmVjdGx5IG9uIHRoZQotY29tbWFuZCBsaW5lOjoKK2NvbW1hbmQgbGluZS4gV2hlbiB1c2luZyBjb21wYXJhdG9yIG9wZXJhdG9ycyBzdWNoIGFzIGBgPmBgLCBgYDxgYCBvciBzb21lIG90aGVyCitzcGVjaWFsIGNoYXJhY3RlciB3aGljaCBnZXQgaW50ZXJwcmV0ZWQgYnkgc2hlbGwsIHRoZSBwYWNrYWdlIG5hbWUgYW5kIHRoZQordmVyc2lvbiBzaG91bGQgYmUgZW5jbG9zZWQgd2l0aGluIGRvdWJsZSBxdW90ZXM6OgogCiAgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsIFNvbWVQYWNrYWdlPT0xLjAuNCAgICAjIHNwZWNpZmljIHZlcnNpb24KLSAgICBweXRob24gLW0gcGlwIGluc3RhbGwgJ1NvbWVQYWNrYWdlPj0xLjAuNCcgICMgbWluaW11bSB2ZXJzaW9uCisgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsICJTb21lUGFja2FnZT49MS4wLjQiICAjIG1pbmltdW0gdmVyc2lvbgogCiBOb3JtYWxseSwgaWYgYSBzdWl0YWJsZSBtb2R1bGUgaXMgYWxyZWFkeSBpbnN0YWxsZWQsIGF0dGVtcHRpbmcgdG8gaW5zdGFsbAogaXQgYWdhaW4gd2lsbCBoYXZlIG5vIGVmZmVjdC4gVXBncmFkaW5nIGV4aXN0aW5nIG1vZHVsZXMgbXVzdCBiZSByZXF1ZXN0ZWQKQEAgLTEwNCw3ICsxMDYsNyBAQAogLi4gc2VlYWxzbzo6CiAKICAgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBJbnN0YWxsaW5nIFB5dGhvbiBEaXN0cmlidXRpb24gUGFja2FnZXMKLSAgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvaW5zdGFsbGluZy5odG1sI2luc3RhbGxpbmctcHl0aG9uLWRpc3RyaWJ1dGlvbi1wYWNrYWdlcz5gX18KKyAgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvaW5zdGFsbGluZy8+YF9fCiAKIAogSG93IGRvIEkgLi4uPwpAQCAtMTIxLDggKzEyMyw4IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBTZXR1cCBmb3IgSW5zdGFsbGluZyBEaXN0cmlidXRpb24gUGFja2FnZXMKLSAgIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9pbnN0YWxsaW5nLmh0bWwjc2V0dXAtZm9yLWluc3RhbGxpbmctZGlzdHJpYnV0aW9uLXBhY2thZ2VzPmBfXworICAgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZTogUmVxdWlyZW1lbnRzIGZvciBJbnN0YWxsaW5nIFBhY2thZ2VzCisgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvaW5zdGFsbGluZy8jcmVxdWlyZW1lbnRzLWZvci1pbnN0YWxsaW5nLXBhY2thZ2VzPmBfXwogCiAKIC4uIGluc3RhbGxpbmctcGVyLXVzZXItaW5zdGFsbGF0aW9uOgpAQCAtMTQxLDEzICsxNDMsMTMgQEAKIGFyZW4ndCBjdXJyZW50bHkgZWFzeSB0byBpbnN0YWxsIHVzaW5nIGBgcGlwYGAgZGlyZWN0bHkuIEF0IHRoaXMgcG9pbnQgaW4KIHRpbWUsIGl0IHdpbGwgb2Z0ZW4gYmUgZWFzaWVyIGZvciB1c2VycyB0byBpbnN0YWxsIHRoZXNlIHBhY2thZ2VzIGJ5CiBgb3RoZXIgbWVhbnMKLTxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zY2llbmNlLmh0bWw+YF9fCis8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc2NpZW5jZS8+YF9fCiByYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIGluc3RhbGwgdGhlbSB3aXRoIGBgcGlwYGAuCiAKIC4uIHNlZWFsc286OgogCiAgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBJbnN0YWxsaW5nIFNjaWVudGlmaWMgUGFja2FnZXMKLSAgIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zY2llbmNlLmh0bWw+YF9fCisgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc2NpZW5jZS8+YF9fCiAKIAogLi4uIHdvcmsgd2l0aCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBQeXRob24gaW5zdGFsbGVkIGluIHBhcmFsbGVsPwpAQCAtMTc3LDcgKzE3OSw3IEBACiAgICBPbmNlIHRoZSBEZXZlbG9wbWVudCAmIERlcGxveW1lbnQgcGFydCBvZiBQUFVHIGlzIGZsZXNoZWQgb3V0LCBzb21lIG9mCiAgICB0aG9zZSBzZWN0aW9ucyBzaG91bGQgYmUgbGlua2VkIGZyb20gbmV3IHF1ZXN0aW9ucyBoZXJlIChtb3N0IG5vdGFibHksCiAgICB3ZSBzaG91bGQgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IGF2b2lkaW5nIGRlcGVuZGluZyBvbiBQeVBJIHRoYXQgbGlua3MgdG8KLSAgIGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2RlcGxveW1lbnQuaHRtbCNweXBpLW1pcnJvcnMtYW5kLWNhY2hlcykKKyAgIGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L21pcnJvcnMvKQogCiAKIENvbW1vbiBpbnN0YWxsYXRpb24gaXNzdWVzCkBAIC0yMTAsMTEgKzIxMiwxMSBAQAogdGhhbiBuZWVkaW5nIHRvIGJ1aWxkIHRoZW0gdGhlbXNlbHZlcy4KIAogU29tZSBvZiB0aGUgc29sdXRpb25zIGZvciBpbnN0YWxsaW5nIGBzY2llbnRpZmljIHNvZnR3YXJlCi08aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc2NpZW5jZS5odG1sPmBfXworPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NjaWVuY2UvPmBfXwogdGhhdCBpcyBub3QgeWV0IGF2YWlsYWJsZSBhcyBwcmUtYnVpbHQgYGB3aGVlbGBgIGZpbGVzIG1heSBhbHNvIGhlbHAgd2l0aAogb2J0YWluaW5nIG90aGVyIGJpbmFyeSBleHRlbnNpb25zIHdpdGhvdXQgbmVlZGluZyB0byBidWlsZCB0aGVtIGxvY2FsbHkuCiAKIC4uIHNlZWFsc286OgogCiAgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBCaW5hcnkgRXh0ZW5zaW9ucwotICAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2V4dGVuc2lvbnMuaHRtbD5gX18KKyAgIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9leHRlbnNpb25zLz5gX18KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5LzJ0bzMucnN0IGIvRG9jL2xpYnJhcnkvMnRvMy5yc3QKaW5kZXggMzFmNjgxZC4uZWM1OTY3OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvMnRvMy5yc3QKQEAgLTMzLDE0ICszMywxOCBAQAogICAgbmFtZSA9IHJhd19pbnB1dCgpCiAgICBncmVldChuYW1lKQogCi1JdCBjYW4gYmUgY29udmVydGVkIHRvIFB5dGhvbiAzLnggY29kZSB2aWEgMnRvMyBvbiB0aGUgY29tbWFuZCBsaW5lOjoKK0l0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gUHl0aG9uIDMueCBjb2RlIHZpYSAydG8zIG9uIHRoZSBjb21tYW5kIGxpbmU6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgMnRvMyBleGFtcGxlLnB5CiAKIEEgZGlmZiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSBpcyBwcmludGVkLiAgMnRvMyBjYW4gYWxzbyB3cml0ZSB0aGUKIG5lZWRlZCBtb2RpZmljYXRpb25zIHJpZ2h0IGJhY2sgdG8gdGhlIHNvdXJjZSBmaWxlLiAgKEEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbAogZmlsZSBpcyBtYWRlIHVubGVzcyA6b3B0aW9uOmAtbmAgaXMgYWxzbyBnaXZlbi4pICBXcml0aW5nIHRoZSBjaGFuZ2VzIGJhY2sgaXMKLWVuYWJsZWQgd2l0aCB0aGUgOm9wdGlvbjpgLXdgIGZsYWc6OgorZW5hYmxlZCB3aXRoIHRoZSA6b3B0aW9uOmAtd2AgZmxhZzoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCAydG8zIC13IGV4YW1wbGUucHkKIApAQCAtNTUsMTkgKzU5LDI1IEBACiBDb21tZW50cyBhbmQgZXhhY3QgaW5kZW50YXRpb24gYXJlIHByZXNlcnZlZCB0aHJvdWdob3V0IHRoZSB0cmFuc2xhdGlvbiBwcm9jZXNzLgogCiBCeSBkZWZhdWx0LCAydG8zIHJ1bnMgYSBzZXQgb2YgOnJlZjpgcHJlZGVmaW5lZCBmaXhlcnMgPDJ0bzMtZml4ZXJzPmAuICBUaGUKLTpvcHRpb246YC1sYCBmbGFnIGxpc3RzIGFsbCBhdmFpbGFibGUgZml4ZXJzLiAgQW4gZXhwbGljaXQgc2V0IG9mIGZpeGVycyB0byBydW4KLWNhbiBiZSBnaXZlbiB3aXRoIDpvcHRpb246YC1mYC4gIExpa2V3aXNlIHRoZSA6b3B0aW9uOmAteGAgZXhwbGljaXRseSBkaXNhYmxlcyBhCi1maXhlci4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBydW5zIG9ubHkgdGhlIGBgaW1wb3J0c2BgIGFuZCBgYGhhc19rZXlgYCBmaXhlcnM6OgorOm9wdGlvbjpgIS1sYCBmbGFnIGxpc3RzIGFsbCBhdmFpbGFibGUgZml4ZXJzLiAgQW4gZXhwbGljaXQgc2V0IG9mIGZpeGVycyB0byBydW4KK2NhbiBiZSBnaXZlbiB3aXRoIDpvcHRpb246YC1mYC4gIExpa2V3aXNlIHRoZSA6b3B0aW9uOmAhLXhgIGV4cGxpY2l0bHkgZGlzYWJsZXMgYQorZml4ZXIuICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgcnVucyBvbmx5IHRoZSBgYGltcG9ydHNgYCBhbmQgYGBoYXNfa2V5YGAgZml4ZXJzOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAkIDJ0bzMgLWYgaW1wb3J0cyAtZiBoYXNfa2V5IGV4YW1wbGUucHkKIAotVGhpcyBjb21tYW5kIHJ1bnMgZXZlcnkgZml4ZXIgZXhjZXB0IHRoZSBgYGFwcGx5YGAgZml4ZXI6OgorVGhpcyBjb21tYW5kIHJ1bnMgZXZlcnkgZml4ZXIgZXhjZXB0IHRoZSBgYGFwcGx5YGAgZml4ZXI6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgMnRvMyAteCBhcHBseSBleGFtcGxlLnB5CiAKIFNvbWUgZml4ZXJzIGFyZSAqZXhwbGljaXQqLCBtZWFuaW5nIHRoZXkgYXJlbid0IHJ1biBieSBkZWZhdWx0IGFuZCBtdXN0IGJlCiBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0byBiZSBydW4uICBIZXJlLCBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBmaXhlcnMsCi10aGUgYGBpZGlvbXNgYCBmaXhlciBpcyBydW46OgordGhlIGBgaWRpb21zYGAgZml4ZXIgaXMgcnVuOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAkIDJ0bzMgLWYgYWxsIC1mIGlkaW9tcyBleGFtcGxlLnB5CiAKQEAgLTc4LDEyICs4OCwxMiBAQAogYmVuZWF0aCB0aGUgZGlmZiBmb3IgYSBmaWxlLiAgWW91IHNob3VsZCBhZGRyZXNzIHRoZSB3YXJuaW5nIGluIG9yZGVyIHRvIGhhdmUKIGNvbXBsaWFudCAzLnggY29kZS4KIAotMnRvMyBjYW4gYWxzbyByZWZhY3RvciBkb2N0ZXN0cy4gIFRvIGVuYWJsZSB0aGlzIG1vZGUsIHVzZSB0aGUgOm9wdGlvbjpgLWRgCisydG8zIGNhbiBhbHNvIHJlZmFjdG9yIGRvY3Rlc3RzLiAgVG8gZW5hYmxlIHRoaXMgbW9kZSwgdXNlIHRoZSA6b3B0aW9uOmAhLWRgCiBmbGFnLiAgTm90ZSB0aGF0ICpvbmx5KiBkb2N0ZXN0cyB3aWxsIGJlIHJlZmFjdG9yZWQuICBUaGlzIGFsc28gZG9lc24ndCByZXF1aXJlCiB0aGUgbW9kdWxlIHRvIGJlIHZhbGlkIFB5dGhvbi4gIEZvciBleGFtcGxlLCBkb2N0ZXN0IGxpa2UgZXhhbXBsZXMgaW4gYSByZVNUCiBkb2N1bWVudCBjb3VsZCBhbHNvIGJlIHJlZmFjdG9yZWQgd2l0aCB0aGlzIG9wdGlvbi4KIAotVGhlIDpvcHRpb246YC12YCBvcHRpb24gZW5hYmxlcyBvdXRwdXQgb2YgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdHJhbnNsYXRpb24KK1RoZSA6b3B0aW9uOmAhLXZgIG9wdGlvbiBlbmFibGVzIG91dHB1dCBvZiBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB0cmFuc2xhdGlvbgogcHJvY2Vzcy4KIAogU2luY2Ugc29tZSBwcmludCBzdGF0ZW1lbnRzIGNhbiBiZSBwYXJzZWQgYXMgZnVuY3Rpb24gY2FsbHMgb3Igc3RhdGVtZW50cywgMnRvMwpAQCAtMTAyLDE4ICsxMTIsMjAgQEAKIC4uIHZlcnNpb25hZGRlZDo6IDMuMi4zCiAgICBUaGUgOm9wdGlvbjpgLW9gIG9wdGlvbiB3YXMgYWRkZWQuCiAKLVRoZSA6b3B0aW9uOmAtV2Agb3IgOm9wdGlvbjpgLS13cml0ZS11bmNoYW5nZWQtZmlsZXNgIGZsYWcgdGVsbHMgMnRvMyB0byBhbHdheXMKK1RoZSA6b3B0aW9uOmAhLVdgIG9yIDpvcHRpb246YC0td3JpdGUtdW5jaGFuZ2VkLWZpbGVzYCBmbGFnIHRlbGxzIDJ0bzMgdG8gYWx3YXlzCiB3cml0ZSBvdXRwdXQgZmlsZXMgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgcmVxdWlyZWQgdG8gdGhlIGZpbGUuICBUaGlzIGlzIG1vc3QKIHVzZWZ1bCB3aXRoIDpvcHRpb246YC1vYCBzbyB0aGF0IGFuIGVudGlyZSBQeXRob24gc291cmNlIHRyZWUgaXMgY29waWVkIHdpdGgKIHRyYW5zbGF0aW9uIGZyb20gb25lIGRpcmVjdG9yeSB0byBhbm90aGVyLgogVGhpcyBvcHRpb24gaW1wbGllcyB0aGUgOm9wdGlvbjpgLXdgIGZsYWcgYXMgaXQgd291bGQgbm90IG1ha2Ugc2Vuc2Ugb3RoZXJ3aXNlLgogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIuMwotICAgVGhlIDpvcHRpb246YC1XYCBmbGFnIHdhcyBhZGRlZC4KKyAgIFRoZSA6b3B0aW9uOmAhLVdgIGZsYWcgd2FzIGFkZGVkLgogCiBUaGUgOm9wdGlvbjpgLS1hZGQtc3VmZml4YCBvcHRpb24gc3BlY2lmaWVzIGEgc3RyaW5nIHRvIGFwcGVuZCB0byBhbGwgb3V0cHV0CiBmaWxlbmFtZXMuICBUaGUgOm9wdGlvbjpgLW5gIGZsYWcgaXMgcmVxdWlyZWQgd2hlbiBzcGVjaWZ5aW5nIHRoaXMgYXMgYmFja3VwcwotYXJlIG5vdCBuZWNlc3Nhcnkgd2hlbiB3cml0aW5nIHRvIGRpZmZlcmVudCBmaWxlbmFtZXMuICBFeGFtcGxlOjoKK2FyZSBub3QgbmVjZXNzYXJ5IHdoZW4gd3JpdGluZyB0byBkaWZmZXJlbnQgZmlsZW5hbWVzLiAgRXhhbXBsZToKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCAydG8zIC1uIC1XIC0tYWRkLXN1ZmZpeD0zIGV4YW1wbGUucHkKIApAQCAtMTIyLDcgKzEzNCw5IEBACiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIuMwogICAgVGhlIDpvcHRpb246YC0tYWRkLXN1ZmZpeGAgb3B0aW9uIHdhcyBhZGRlZC4KIAotVG8gdHJhbnNsYXRlIGFuIGVudGlyZSBwcm9qZWN0IGZyb20gb25lIGRpcmVjdG9yeSB0cmVlIHRvIGFub3RoZXIgdXNlOjoKK1RvIHRyYW5zbGF0ZSBhbiBlbnRpcmUgcHJvamVjdCBmcm9tIG9uZSBkaXJlY3RvcnkgdHJlZSB0byBhbm90aGVyIHVzZToKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCAydG8zIC0tb3V0cHV0LWRpcj1weXRob24zLXZlcnNpb24vbXljb2RlIC1XIC1uIHB5dGhvbjItdmVyc2lvbi9teWNvZGUKIApAQCAtNDQ5LDEwICs0NjMsMTQgQEAKIAogLi4gbW9kdWxlOjogbGliMnRvMwogICAgOnN5bm9wc2lzOiB0aGUgMnRvMyBsaWJyYXJ5CisKIC4uIG1vZHVsZWF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0KIC4uIG1vZHVsZWF1dGhvcjo6IENvbGxpbiBXaW50ZXIKIC4uIG1vZHVsZWF1dGhvcjo6IEJlbmphbWluIFBldGVyc29uIDxiZW5qYW1pbkBweXRob24ub3JnPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9saWIydG8zL2AKKworLS0tLS0tLS0tLS0tLS0KIAogLi4gbm90ZTo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L19fZnV0dXJlX18ucnN0IGIvRG9jL2xpYnJhcnkvX19mdXR1cmVfXy5yc3QKaW5kZXggNzJmMjk2My4uNzNkOGI2YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvX19mdXR1cmVfXy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvX19mdXR1cmVfXy5yc3QKQEAgLTg3LDYgKzg3LDkgQEAKIHwgdW5pY29kZV9saXRlcmFscyB8IDIuNi4wYTIgICAgIHwgMy4wICAgICAgICAgIHwgOnBlcDpgMzExMmA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICpCeXRlcyBsaXRlcmFscyBpbiBQeXRob24gMzAwMCogICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZ2VuZXJhdG9yX3N0b3AgICB8IDMuNS4wYjEgICAgIHwgMy43ICAgICAgICAgIHwgOnBlcDpgNDc5YDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICpTdG9wSXRlcmF0aW9uIGhhbmRsaW5nIGluc2lkZSBnZW5lcmF0b3JzKiAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogCiAuLiBzZWVhbHNvOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L19fbWFpbl9fLnJzdCBiL0RvYy9saWJyYXJ5L19fbWFpbl9fLnJzdAppbmRleCBhNDY5OTNkLi5hNjRmYWYxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9fX21haW5fXy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvX19tYWluX18ucnN0CkBAIC01LDYgKzUsOCBAQAogLi4gbW9kdWxlOjogX19tYWluX18KICAgIDpzeW5vcHNpczogVGhlIGVudmlyb25tZW50IHdoZXJlIHRoZSB0b3AtbGV2ZWwgc2NyaXB0IGlzIHJ1bi4KIAorLS0tLS0tLS0tLS0tLS0KKwogYGAnX19tYWluX18nYGAgaXMgdGhlIG5hbWUgb2YgdGhlIHNjb3BlIGluIHdoaWNoIHRvcC1sZXZlbCBjb2RlIGV4ZWN1dGVzLgogQSBtb2R1bGUncyBfX25hbWVfXyBpcyBzZXQgZXF1YWwgdG8gYGAnX19tYWluX18nYGAgd2hlbiByZWFkIGZyb20KIHN0YW5kYXJkIGlucHV0LCBhIHNjcmlwdCwgb3IgZnJvbSBhbiBpbnRlcmFjdGl2ZSBwcm9tcHQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9fdGhyZWFkLnJzdCBiL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CmluZGV4IDcxMjI4NjEuLjBkMmQ4MTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CkBAIC00LDEzICs0LDE0IEBACiAuLiBtb2R1bGU6OiBfdGhyZWFkCiAgICA6c3lub3BzaXM6IExvdy1sZXZlbCB0aHJlYWRpbmcgQVBJLgogCi0KIC4uIGluZGV4OjoKICAgIHNpbmdsZTogbGlnaHQtd2VpZ2h0IHByb2Nlc3NlcwogICAgc2luZ2xlOiBwcm9jZXNzZXMsIGxpZ2h0LXdlaWdodAogICAgc2luZ2xlOiBiaW5hcnkgc2VtYXBob3JlcwogICAgc2luZ2xlOiBzZW1hcGhvcmVzLCBiaW5hcnkKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgbG93LWxldmVsIHByaW1pdGl2ZXMgZm9yIHdvcmtpbmcgd2l0aCBtdWx0aXBsZSB0aHJlYWRzCiAoYWxzbyBjYWxsZWQgOmRmbjpgbGlnaHQtd2VpZ2h0IHByb2Nlc3Nlc2Agb3IgOmRmbjpgdGFza3NgKSAtLS0gbXVsdGlwbGUgdGhyZWFkcyBvZgogY29udHJvbCBzaGFyaW5nIHRoZWlyIGdsb2JhbCBkYXRhIHNwYWNlLiAgRm9yIHN5bmNocm9uaXphdGlvbiwgc2ltcGxlIGxvY2tzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hYmMucnN0IGIvRG9jL2xpYnJhcnkvYWJjLnJzdAppbmRleCA3YTczNzA0Li45NjYwMDNiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hYmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FiYy5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IGFiYwogICAgOnN5bm9wc2lzOiBBYnN0cmFjdCBiYXNlIGNsYXNzZXMgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgorCiAuLiBtb2R1bGVhdXRob3I6OiBHdWlkbyB2YW4gUm9zc3VtCiAuLiBzZWN0aW9uYXV0aG9yOjogR2VvcmcgQnJhbmRsCiAuLiBtdWNoIG9mIHRoZSBjb250ZW50IGFkYXB0ZWQgZnJvbSBkb2NzdHJpbmdzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9haWZjLnJzdCBiL0RvYy9saWJyYXJ5L2FpZmMucnN0CmluZGV4IDZmYmNmMjguLjIzYTk2MjAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FpZmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FpZmMucnN0CkBAIC00LDE0ICs0LDEzIEBACiAuLiBtb2R1bGU6OiBhaWZjCiAgICA6c3lub3BzaXM6IFJlYWQgYW5kIHdyaXRlIGF1ZGlvIGZpbGVzIGluIEFJRkYgb3IgQUlGQyBmb3JtYXQuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2FpZmMucHlgCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogQXVkaW8gSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQKICAgIHNpbmdsZTogQUlGRgogICAgc2luZ2xlOiBBSUZGLUMKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvYWlmYy5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBBSUZGIGFuZCBBSUZGLUMgZmlsZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKaW5kZXggZDkwNzIwMy4uOTk1YzRlZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogYXJncGFyc2UKICAgIDpzeW5vcHNpczogQ29tbWFuZC1saW5lIG9wdGlvbiBhbmQgYXJndW1lbnQgcGFyc2luZyBsaWJyYXJ5LgorCiAuLiBtb2R1bGVhdXRob3I6OiBTdGV2ZW4gQmV0aGFyZCA8c3RldmVuLmJldGhhcmRAZ21haWwuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZXZlbiBCZXRoYXJkIDxzdGV2ZW4uYmV0aGFyZEBnbWFpbC5jb20+CiAKQEAgLTM1LDE2ICszNiwxOCBAQAogCiAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nUHJvY2VzcyBzb21lIGludGVnZXJzLicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdpbnRlZ2VycycsIG1ldGF2YXI9J04nLCB0eXBlPWludCwgbmFyZ3M9JysnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FuIGludGVnZXIgZm9yIHRoZSBhY2N1bXVsYXRvcicpCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FuIGludGVnZXIgZm9yIHRoZSBhY2N1bXVsYXRvcicpCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN1bScsIGRlc3Q9J2FjY3VtdWxhdGUnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdD1zdW0sIGRlZmF1bHQ9bWF4LAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3N1bSB0aGUgaW50ZWdlcnMgKGRlZmF1bHQ6IGZpbmQgdGhlIG1heCknKQorICAgICAgICAgICAgICAgICAgICAgICBjb25zdD1zdW0sIGRlZmF1bHQ9bWF4LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzdW0gdGhlIGludGVnZXJzIChkZWZhdWx0OiBmaW5kIHRoZSBtYXgpJykKIAogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgIHByaW50KGFyZ3MuYWNjdW11bGF0ZShhcmdzLmludGVnZXJzKSkKIAogQXNzdW1pbmcgdGhlIFB5dGhvbiBjb2RlIGFib3ZlIGlzIHNhdmVkIGludG8gYSBmaWxlIGNhbGxlZCBgYHByb2cucHlgYCwgaXQgY2FuCi1iZSBydW4gYXQgdGhlIGNvbW1hbmQgbGluZSBhbmQgcHJvdmlkZXMgdXNlZnVsIGhlbHAgbWVzc2FnZXM6OgorYmUgcnVuIGF0IHRoZSBjb21tYW5kIGxpbmUgYW5kIHByb3ZpZGVzIHVzZWZ1bCBoZWxwIG1lc3NhZ2VzOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAkIHB5dGhvbiBwcm9nLnB5IC1oCiAgICB1c2FnZTogcHJvZy5weSBbLWhdIFstLXN1bV0gTiBbTiAuLi5dCkBAIC01OSw3ICs2Miw5IEBACiAgICAgLS1zdW0gICAgICAgc3VtIHRoZSBpbnRlZ2VycyAoZGVmYXVsdDogZmluZCB0aGUgbWF4KQogCiBXaGVuIHJ1biB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMsIGl0IHByaW50cyBlaXRoZXIgdGhlIHN1bSBvciB0aGUgbWF4IG9mCi10aGUgY29tbWFuZC1saW5lIGludGVnZXJzOjoKK3RoZSBjb21tYW5kLWxpbmUgaW50ZWdlcnM6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgcHl0aG9uIHByb2cucHkgMSAyIDMgNAogICAgNApAQCAtNjcsNyArNzIsOSBAQAogICAgJCBweXRob24gcHJvZy5weSAxIDIgMyA0IC0tc3VtCiAgICAxMAogCi1JZiBpbnZhbGlkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIGlzc3VlIGFuIGVycm9yOjoKK0lmIGludmFsaWQgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgaXNzdWUgYW4gZXJyb3I6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgcHl0aG9uIHByb2cucHkgYSBiIGMKICAgIHVzYWdlOiBwcm9nLnB5IFstaF0gWy0tc3VtXSBOIFtOIC4uLl0KQEAgLTEzNSw3ICsxNDIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuSGVscEZvcm1hdHRlciwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfY2hhcnM9Jy0nLCBmcm9tZmlsZV9wcmVmaXhfY2hhcnM9Tm9uZSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudF9kZWZhdWx0PU5vbmUsIGNvbmZsaWN0X2hhbmRsZXI9J2Vycm9yJywgXAotICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVscD1UcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVscD1UcnVlLCBhbGxvd19hYmJyZXY9VHJ1ZSkKIAogICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdC4gQWxsIHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZAogICAgYXMga2V5d29yZCBhcmd1bWVudHMuIEVhY2ggcGFyYW1ldGVyIGhhcyBpdHMgb3duIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24KQEAgLTE2OSw2ICsxNzYsMTIgQEAKIAogICAgKiBhZGRfaGVscF8gLSBBZGQgYSAtaC8tLWhlbHAgb3B0aW9uIHRvIHRoZSBwYXJzZXIgKGRlZmF1bHQ6IGBgVHJ1ZWBgKQogCisgICAqIGFsbG93X2FiYnJldl8gLSBBbGxvd3MgbG9uZyBvcHRpb25zIHRvIGJlIGFiYnJldmlhdGVkIGlmIHRoZQorICAgICBhYmJyZXZpYXRpb24gaXMgdW5hbWJpZ3VvdXMuIChkZWZhdWx0OiBgYFRydWVgYCkKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICphbGxvd19hYmJyZXYqIHBhcmFtZXRlciB3YXMgYWRkZWQuCisKIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgaG93IGVhY2ggb2YgdGhlc2UgYXJlIHVzZWQuCiAKIApAQCAtMTg3LDcgKzIwMCw5IEBACiAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogCiBUaGUgaGVscCBmb3IgdGhpcyBwcm9ncmFtIHdpbGwgZGlzcGxheSBgYG15cHJvZ3JhbS5weWBgIGFzIHRoZSBwcm9ncmFtIG5hbWUKLShyZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBwcm9ncmFtIHdhcyBpbnZva2VkIGZyb20pOjoKKyhyZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBwcm9ncmFtIHdhcyBpbnZva2VkIGZyb20pOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAkIHB5dGhvbiBteXByb2dyYW0ucHkgLS1oZWxwCiAgICB1c2FnZTogbXlwcm9ncmFtLnB5IFstaF0gWy0tZm9vIEZPT10KQEAgLTQ4Miw3ICs0OTcsNyBAQAogYXJndW1lbnRzIHRoZXkgY29udGFpbi4gIEZvciBleGFtcGxlOjoKIAogICAgPj4+IHdpdGggb3BlbignYXJncy50eHQnLCAndycpIGFzIGZwOgotICAgLi4uICAgIGZwLndyaXRlKCctZlxuYmFyJykKKyAgIC4uLiAgICAgZnAud3JpdGUoJy1mXG5iYXInKQogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGZyb21maWxlX3ByZWZpeF9jaGFycz0nQCcpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnKQogICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLWYnLCAnZm9vJywgJ0BhcmdzLnR4dCddKQpAQCAtNTE4LDYgKzUzMywyNiBAQAogICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFtdKQogICAgTmFtZXNwYWNlKCkKIAorLi4gX2FsbG93X2FiYnJldjoKKworYWxsb3dfYWJicmV2CiteXl5eXl5eXl5eXl4KKworTm9ybWFsbHksIHdoZW4geW91IHBhc3MgYW4gYXJndW1lbnQgbGlzdCB0byB0aGUKKzptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2AgbWV0aG9kIG9mIGFuIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgLAoraXQgOnJlZjpgcmVjb2duaXplcyBhYmJyZXZpYXRpb25zIDxwcmVmaXgtbWF0Y2hpbmc+YCBvZiBsb25nIG9wdGlvbnMuCisKK1RoaXMgZmVhdHVyZSBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBgYGFsbG93X2FiYnJldmBgIHRvIGBgRmFsc2VgYDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgYWxsb3dfYWJicmV2PUZhbHNlKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vYmFyJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvb25sZXknLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vbiddKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb29iYXJdIFstLWZvb25sZXldCisgICBQUk9HOiBlcnJvcjogdW5yZWNvZ25pemVkIGFyZ3VtZW50czogLS1mb29uCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCiAKIGNvbmZsaWN0X2hhbmRsZXIKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTU2OSw3ICs2MDQsOSBAQAogICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKIAogSWYgYGAtaGBgIG9yIGBgLS1oZWxwYGAgaXMgc3VwcGxpZWQgYXQgdGhlIGNvbW1hbmQgbGluZSwgdGhlIEFyZ3VtZW50UGFyc2VyCi1oZWxwIHdpbGwgYmUgcHJpbnRlZDo6CitoZWxwIHdpbGwgYmUgcHJpbnRlZDoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCBweXRob24gbXlwcm9ncmFtLnB5IC0taGVscAogICAgdXNhZ2U6IG15cHJvZ3JhbS5weSBbLWhdIFstLWZvbyBGT09dCkBAIC02OTQsMjQgKzczMSwyNSBAQAogICAgIE5hbWVzcGFjZShmb289JzEnKQogCiAqIGBgJ3N0b3JlX2NvbnN0J2BgIC0gVGhpcyBzdG9yZXMgdGhlIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY29uc3RfIGtleXdvcmQKLSAgYXJndW1lbnQuICAoTm90ZSB0aGF0IHRoZSBjb25zdF8ga2V5d29yZCBhcmd1bWVudCBkZWZhdWx0cyB0byB0aGUgcmF0aGVyCi0gIHVuaGVscGZ1bCBgYE5vbmVgYC4pICBUaGUgYGAnc3RvcmVfY29uc3QnYGAgYWN0aW9uIGlzIG1vc3QgY29tbW9ubHkgdXNlZCB3aXRoCisgIGFyZ3VtZW50LiAgVGhlIGBgJ3N0b3JlX2NvbnN0J2BgIGFjdGlvbiBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgd2l0aAogICBvcHRpb25hbCBhcmd1bWVudHMgdGhhdCBzcGVjaWZ5IHNvbWUgc29ydCBvZiBmbGFnLiAgRm9yIGV4YW1wbGU6OgogCiAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9NDIpCi0gICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbycuc3BsaXQoKSkKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbyddKQogICAgIE5hbWVzcGFjZShmb289NDIpCiAKLSogYGAnc3RvcmVfdHJ1ZSdgYCBhbmQgYGAnc3RvcmVfZmFsc2UnYGAgLSBUaGVzZSBzdG9yZSB0aGUgdmFsdWVzIGBgVHJ1ZWBgIGFuZAotICBgYEZhbHNlYGAgcmVzcGVjdGl2ZWx5LiAgVGhlc2UgYXJlIHNwZWNpYWwgY2FzZXMgb2YgYGAnc3RvcmVfY29uc3QnYGAuICBGb3IKLSAgZXhhbXBsZTo6CisqIGBgJ3N0b3JlX3RydWUnYGAgYW5kIGBgJ3N0b3JlX2ZhbHNlJ2BgIC0gVGhlc2UgYXJlIHNwZWNpYWwgY2FzZXMgb2YKKyAgYGAnc3RvcmVfY29uc3QnYGAgdXNlZCBmb3Igc3RvcmluZyB0aGUgdmFsdWVzIGBgVHJ1ZWBgIGFuZCBgYEZhbHNlYGAKKyAgcmVzcGVjdGl2ZWx5LiAgSW4gYWRkaXRpb24sIHRoZXkgY3JlYXRlIGRlZmF1bHQgdmFsdWVzIG9mIGBgRmFsc2VgYCBhbmQKKyAgYGBUcnVlYGAgcmVzcGVjdGl2ZWx5LiAgRm9yIGV4YW1wbGU6OgogCiAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnKQogICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhcicsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJheicsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQogICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gLS1iYXInLnNwbGl0KCkpCi0gICAgTmFtZXNwYWNlKGJhcj1GYWxzZSwgZm9vPVRydWUpCisgICAgTmFtZXNwYWNlKGZvbz1UcnVlLCBiYXI9RmFsc2UsIGJhej1UcnVlKQogCiAqIGBgJ2FwcGVuZCdgYCAtIFRoaXMgc3RvcmVzIGEgbGlzdCwgYW5kIGFwcGVuZHMgZWFjaCBhcmd1bWVudCB2YWx1ZSB0byB0aGUKICAgbGlzdC4gIFRoaXMgaXMgdXNlZnVsIHRvIGFsbG93IGFuIG9wdGlvbiB0byBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCkBAIC03MzksNyArNzc3LDcgQEAKIAogICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyYm9zZScsICctdicsIGFjdGlvbj0nY291bnQnKQotICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLXZ2dicuc3BsaXQoKSkKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctdnZ2J10pCiAgICAgTmFtZXNwYWNlKHZlcmJvc2U9MykKIAogKiBgYCdoZWxwJ2BgIC0gVGhpcyBwcmludHMgYSBjb21wbGV0ZSBoZWxwIG1lc3NhZ2UgZm9yIGFsbCB0aGUgb3B0aW9ucyBpbiB0aGUKQEAgLTgxNCwxMSArODUyLDExIEBACiAgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPSc/JywgY29uc3Q9J2MnLCBkZWZhdWx0PSdkJykKICAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPSc/JywgZGVmYXVsdD0nZCcpCi0gICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWFggLS1mb28gWVknLnNwbGl0KCkpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJ1hYJywgJy0tZm9vJywgJ1lZJ10pCiAgICAgIE5hbWVzcGFjZShiYXI9J1hYJywgZm9vPSdZWScpCi0gICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWFggLS1mb28nLnNwbGl0KCkpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJ1hYJywgJy0tZm9vJ10pCiAgICAgIE5hbWVzcGFjZShiYXI9J1hYJywgZm9vPSdjJykKLSAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcnLnNwbGl0KCkpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKICAgICAgTmFtZXNwYWNlKGJhcj0nZCcsIGZvbz0nZCcpCiAKICAgT25lIG9mIHRoZSBtb3JlIGNvbW1vbiB1c2VzIG9mIGBgbmFyZ3M9Jz8nYGAgaXMgdG8gYWxsb3cgb3B0aW9uYWwgaW5wdXQgYW5kCkBAIC04NTQsOSArODkyLDkgQEAKIAogICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCiAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCBuYXJncz0nKycpCi0gICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnYSBiJy5zcGxpdCgpKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydhJywgJ2InXSkKICAgICAgTmFtZXNwYWNlKGZvbz1bJ2EnLCAnYiddKQotICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJycuc3BsaXQoKSkKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFtdKQogICAgICB1c2FnZTogUFJPRyBbLWhdIGZvbyBbZm9vIC4uLl0KICAgICAgUFJPRzogZXJyb3I6IHRvbyBmZXcgYXJndW1lbnRzCiAKQEAgLTg5NSw3ICs5MzMsOCBAQAogICBjb21tYW5kLWxpbmUgYXJndW1lbnQgZm9sbG93aW5nIGl0LCB0aGUgdmFsdWUgb2YgYGBjb25zdGBgIHdpbGwgYmUgYXNzdW1lZCBpbnN0ZWFkLgogICBTZWUgdGhlIG5hcmdzXyBkZXNjcmlwdGlvbiBmb3IgZXhhbXBsZXMuCiAKLVRoZSBgYGNvbnN0YGAga2V5d29yZCBhcmd1bWVudCBkZWZhdWx0cyB0byBgYE5vbmVgYC4KK1dpdGggdGhlIGBgJ3N0b3JlX2NvbnN0J2BgIGFuZCBgYCdhcHBlbmRfY29uc3QnYGAgYWN0aW9ucywgdGhlIGBgY29uc3RgYAora2V5d29yZCBhcmd1bWVudCBtdXN0IGJlIGdpdmVuLiAgRm9yIG90aGVyIGFjdGlvbnMsIGl0IGRlZmF1bHRzIHRvIGBgTm9uZWBgLgogCiAKIGRlZmF1bHQKQEAgLTkxMCw5ICs5NDksOSBAQAogCiAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQogICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgZGVmYXVsdD00MikKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gMicuc3BsaXQoKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vJywgJzInXSkKICAgIE5hbWVzcGFjZShmb289JzInKQotICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcnLnNwbGl0KCkpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCiAgICBOYW1lc3BhY2UoZm9vPTQyKQogCiBJZiB0aGUgYGBkZWZhdWx0YGAgdmFsdWUgaXMgYSBzdHJpbmcsIHRoZSBwYXJzZXIgcGFyc2VzIHRoZSB2YWx1ZSBhcyBpZiBpdApAQCAtOTMxLDkgKzk3MCw5IEBACiAKICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PTQyKQotICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdhJy5zcGxpdCgpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnYSddKQogICAgTmFtZXNwYWNlKGZvbz0nYScpCi0gICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJycuc3BsaXQoKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKICAgIE5hbWVzcGFjZShmb289NDIpCiAKIApAQCAtOTkwLDkgKzEwMjksOSBAQAogICAgLi4uCiAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgdHlwZT1wZXJmZWN0X3NxdWFyZSkKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnOScuc3BsaXQoKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJzknXSkKICAgIE5hbWVzcGFjZShmb289OSkKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnNycuc3BsaXQoKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJzcnXSkKICAgIHVzYWdlOiBQUk9HIFstaF0gZm9vCiAgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgZm9vOiAnNycgaXMgbm90IGEgcGVyZmVjdCBzcXVhcmUKIApAQCAtMTAwMSw5ICsxMDQwLDkgQEAKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQogICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIHR5cGU9aW50LCBjaG9pY2VzPXJhbmdlKDUsIDEwKSkKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnNycuc3BsaXQoKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJzcnXSkKICAgIE5hbWVzcGFjZShmb289NykKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnMTEnLnNwbGl0KCkpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWycxMSddKQogICAgdXNhZ2U6IFBST0cgWy1oXSB7NSw2LDcsOCw5fQogICAgUFJPRzogZXJyb3I6IGFyZ3VtZW50IGZvbzogaW52YWxpZCBjaG9pY2U6IDExIChjaG9vc2UgZnJvbSA1LCA2LCA3LCA4LCA5KQogCkBAIC0xMDgxLDEwICsxMTIwLDEwIEBACiAKICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdmcm9iYmxlJykKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAuLi4gICAgICAgICBoZWxwPSdmb28gdGhlIGJhcnMgYmVmb3JlIGZyb2JibGluZycpCisgICAuLi4gICAgICAgICAgICAgICAgICAgICBoZWxwPSdmb28gdGhlIGJhcnMgYmVmb3JlIGZyb2JibGluZycpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9JysnLAotICAgLi4uICAgICAgICAgaGVscD0nb25lIG9mIHRoZSBiYXJzIHRvIGJlIGZyb2JibGVkJykKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWgnLnNwbGl0KCkpCisgICAuLi4gICAgICAgICAgICAgICAgICAgICBoZWxwPSdvbmUgb2YgdGhlIGJhcnMgdG8gYmUgZnJvYmJsZWQnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLWgnXSkKICAgIHVzYWdlOiBmcm9iYmxlIFstaF0gWy0tZm9vXSBiYXIgW2JhciAuLi5dCiAKICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgpAQCAtMTEwMSw3ICsxMTQwLDcgQEAKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J2Zyb2JibGUnKQogICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPSc/JywgdHlwZT1pbnQsIGRlZmF1bHQ9NDIsCi0gICAuLi4gICAgICAgICBoZWxwPSd0aGUgYmFyIHRvICUocHJvZylzIChkZWZhdWx0OiAlKGRlZmF1bHQpcyknKQorICAgLi4uICAgICAgICAgICAgICAgICAgICAgaGVscD0ndGhlIGJhciB0byAlKHByb2cpcyAoZGVmYXVsdDogJShkZWZhdWx0KXMpJykKICAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCiAgICB1c2FnZTogZnJvYmJsZSBbLWhdIFtiYXJdCiAKQEAgLTEyMDIsNyArMTI0MSw3IEBACiAKICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWFhYJy5zcGxpdCgpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnWFhYJ10pCiAgICBOYW1lc3BhY2UoYmFyPSdYWFgnKQogCiBGb3Igb3B0aW9uYWwgYXJndW1lbnQgYWN0aW9ucywgdGhlIHZhbHVlIG9mIGBgZGVzdGBgIGlzIG5vcm1hbGx5IGluZmVycmVkIGZyb20KQEAgLTEyOTksMjIgKzEzMzgsMjIgQEAKICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQotICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcteCBYJy5zcGxpdCgpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLXgnLCAnWCddKQogICAgTmFtZXNwYWNlKGZvbz1Ob25lLCB4PSdYJykKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gRk9PJy5zcGxpdCgpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1mb28nLCAnRk9PJ10pCiAgICBOYW1lc3BhY2UoZm9vPSdGT08nLCB4PU5vbmUpCiAKIEZvciBsb25nIG9wdGlvbnMgKG9wdGlvbnMgd2l0aCBuYW1lcyBsb25nZXIgdGhhbiBhIHNpbmdsZSBjaGFyYWN0ZXIpLCB0aGUgb3B0aW9uCiBhbmQgdmFsdWUgY2FuIGFsc28gYmUgcGFzc2VkIGFzIGEgc2luZ2xlIGNvbW1hbmQtbGluZSBhcmd1bWVudCwgdXNpbmcgYGA9YGAgdG8KIHNlcGFyYXRlIHRoZW06OgogCi0gICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vPUZPTycuc3BsaXQoKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vPUZPTyddKQogICAgTmFtZXNwYWNlKGZvbz0nRk9PJywgeD1Ob25lKQogCiBGb3Igc2hvcnQgb3B0aW9ucyAob3B0aW9ucyBvbmx5IG9uZSBjaGFyYWN0ZXIgbG9uZyksIHRoZSBvcHRpb24gYW5kIGl0cyB2YWx1ZQogY2FuIGJlIGNvbmNhdGVuYXRlZDo6CiAKLSAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLXhYJy5zcGxpdCgpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLXhYJ10pCiAgICBOYW1lc3BhY2UoZm9vPU5vbmUsIHg9J1gnKQogCiBTZXZlcmFsIHNob3J0IG9wdGlvbnMgY2FuIGJlIGpvaW5lZCB0b2dldGhlciwgdXNpbmcgb25seSBhIHNpbmdsZSBgYC1gYCBwcmVmaXgsCkBAIC0xMzI0LDcgKzEzNjMsNyBAQAogICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJykKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXonKQotICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcteHl6Wicuc3BsaXQoKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy14eXpaJ10pCiAgICBOYW1lc3BhY2UoeD1UcnVlLCB5PVRydWUsIHo9J1onKQogCiAKQEAgLTE0MTAsOSArMTQ0OSw5IEBACiBBcmd1bWVudCBhYmJyZXZpYXRpb25zIChwcmVmaXggbWF0Y2hpbmcpCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVRoZSA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIG1ldGhvZCBhbGxvd3MgbG9uZyBvcHRpb25zIHRvIGJlCi1hYmJyZXZpYXRlZCB0byBhIHByZWZpeCwgaWYgdGhlIGFiYnJldmlhdGlvbiBpcyB1bmFtYmlndW91cyAodGhlIHByZWZpeCBtYXRjaGVzCi1hIHVuaXF1ZSBvcHRpb24pOjoKK1RoZSA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIG1ldGhvZCA6cmVmOmBieSBkZWZhdWx0IDxhbGxvd19hYmJyZXY+YAorYWxsb3dzIGxvbmcgb3B0aW9ucyB0byBiZSBhYmJyZXZpYXRlZCB0byBhIHByZWZpeCwgaWYgdGhlIGFiYnJldmlhdGlvbiBpcwordW5hbWJpZ3VvdXMgKHRoZSBwcmVmaXggbWF0Y2hlcyBhIHVuaXF1ZSBvcHRpb24pOjoKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQogICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy1iYWNvbicpCkBAIC0xNDI2LDYgKzE0NjUsNyBAQAogICAgUFJPRzogZXJyb3I6IGFtYmlndW91cyBvcHRpb246IC1iYSBjb3VsZCBtYXRjaCAtYmFkZ2VyLCAtYmFjb24KIAogQW4gZXJyb3IgaXMgcHJvZHVjZWQgZm9yIGFyZ3VtZW50cyB0aGF0IGNvdWxkIHByb2R1Y2UgbW9yZSB0aGFuIG9uZSBvcHRpb25zLgorVGhpcyBmZWF0dXJlIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIDpyZWY6YGFsbG93X2FiYnJldmAgdG8gYGBGYWxzZWBgLgogCiAKIEJleW9uZCBgYHN5cy5hcmd2YGAKQEAgLTE0MzksMTMgKzE0NzksMTMgQEAKICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgKICAgIC4uLiAgICAgJ2ludGVnZXJzJywgbWV0YXZhcj0naW50JywgdHlwZT1pbnQsIGNob2ljZXM9cmFuZ2UoMTApLAotICAgLi4uICBuYXJncz0nKycsIGhlbHA9J2FuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAuLjknKQorICAgLi4uICAgICBuYXJncz0nKycsIGhlbHA9J2FuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAuLjknKQogICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoCiAgICAuLi4gICAgICctLXN1bScsIGRlc3Q9J2FjY3VtdWxhdGUnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9c3VtLAotICAgLi4uICAgZGVmYXVsdD1tYXgsIGhlbHA9J3N1bSB0aGUgaW50ZWdlcnMgKGRlZmF1bHQ6IGZpbmQgdGhlIG1heCknKQorICAgLi4uICAgICBkZWZhdWx0PW1heCwgaGVscD0nc3VtIHRoZSBpbnRlZ2VycyAoZGVmYXVsdDogZmluZCB0aGUgbWF4KScpCiAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWycxJywgJzInLCAnMycsICc0J10pCiAgICBOYW1lc3BhY2UoYWNjdW11bGF0ZT08YnVpbHQtaW4gZnVuY3Rpb24gbWF4PiwgaW50ZWdlcnM9WzEsIDIsIDMsIDRdKQotICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcxIDIgMyA0IC0tc3VtJy5zcGxpdCgpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnMScsICcyJywgJzMnLCAnNCcsICctLXN1bSddKQogICAgTmFtZXNwYWNlKGFjY3VtdWxhdGU9PGJ1aWx0LWluIGZ1bmN0aW9uIHN1bT4sIGludGVnZXJzPVsxLCAyLCAzLCA0XSkKIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hcnJheS5yc3QgYi9Eb2MvbGlicmFyeS9hcnJheS5yc3QKaW5kZXggZjFhYjk1OS4uMjRmM2Y2MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXJyYXkucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FycmF5LnJzdApAQCAtNCw5ICs0LDEwIEBACiAuLiBtb2R1bGU6OiBhcnJheQogICAgOnN5bm9wc2lzOiBTcGFjZSBlZmZpY2llbnQgYXJyYXlzIG9mIHVuaWZvcm1seSB0eXBlZCBudW1lcmljIHZhbHVlcy4KIAotCiAuLiBpbmRleDo6IHNpbmdsZTogYXJyYXlzCiAKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIGRlZmluZXMgYW4gb2JqZWN0IHR5cGUgd2hpY2ggY2FuIGNvbXBhY3RseSByZXByZXNlbnQgYW4gYXJyYXkgb2YKIGJhc2ljIHZhbHVlczogY2hhcmFjdGVycywgaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBBcnJheXMgYXJlIHNlcXVlbmNlCiB0eXBlcyBhbmQgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGxpc3RzLCBleGNlcHQgdGhhdCB0aGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbgpAQCAtOTEsNyArOTIsNyBAQAogY29uY2F0ZW5hdGlvbiwgYW5kIG11bHRpcGxpY2F0aW9uLiAgV2hlbiB1c2luZyBzbGljZSBhc3NpZ25tZW50LCB0aGUgYXNzaWduZWQKIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkgb2JqZWN0IHdpdGggdGhlIHNhbWUgdHlwZSBjb2RlOyBpbiBhbGwgb3RoZXIgY2FzZXMsCiA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4gQXJyYXkgb2JqZWN0cyBhbHNvIGltcGxlbWVudCB0aGUgYnVmZmVyIGludGVyZmFjZSwKLWFuZCBtYXkgYmUgdXNlZCB3aGVyZXZlciA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBzdXBwb3J0ZWQuCithbmQgbWF5IGJlIHVzZWQgd2hlcmV2ZXIgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCBhcmUgc3VwcG9ydGVkLgogCiBUaGUgZm9sbG93aW5nIGRhdGEgaXRlbXMgYW5kIG1ldGhvZHMgYXJlIGFsc28gc3VwcG9ydGVkOgogCkBAIC0yNzEsNyArMjcyLDcgQEAKICAgICAgIFBhY2tpbmcgYW5kIHVucGFja2luZyBvZiBFeHRlcm5hbCBEYXRhIFJlcHJlc2VudGF0aW9uIChYRFIpIGRhdGEgYXMgdXNlZCBpbiBzb21lCiAgICAgICByZW1vdGUgcHJvY2VkdXJlIGNhbGwgc3lzdGVtcy4KIAotICAgYFRoZSBOdW1lcmljYWwgUHl0aG9uIERvY3VtZW50YXRpb24gPGh0dHA6Ly9kb2NzLnNjaXB5Lm9yZy9kb2MvPmBfCisgICBgVGhlIE51bWVyaWNhbCBQeXRob24gRG9jdW1lbnRhdGlvbiA8aHR0cHM6Ly9kb2NzLnNjaXB5Lm9yZy9kb2MvPmBfCiAgICAgICBUaGUgTnVtZXJpYyBQeXRob24gZXh0ZW5zaW9uIChOdW1QeSkgZGVmaW5lcyBhbm90aGVyIGFycmF5IHR5cGU7IHNlZQogICAgICAgaHR0cDovL3d3dy5udW1weS5vcmcvIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IE51bWVyaWNhbCBQeXRob24uCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzdC5yc3QgYi9Eb2MvbGlicmFyeS9hc3QucnN0CmluZGV4IDhjM2I3ZTQuLjhkNGFlMmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN0LnJzdApAQCAtOTksNiArOTksNyBAQAogVGhlIGFic3RyYWN0IGdyYW1tYXIgaXMgY3VycmVudGx5IGRlZmluZWQgYXMgZm9sbG93czoKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi8uLi9QYXJzZXIvUHl0aG9uLmFzZGwKKyAgIDpsYW5ndWFnZTogbm9uZQogCiAKIDptb2Q6YGFzdGAgSGVscGVycwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CmluZGV4IGM2ZmEwNjEuLmFlNzJkMjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IGFzeW5jaGF0CiAgICA6c3lub3BzaXM6IFN1cHBvcnQgZm9yIGFzeW5jaHJvbm91cyBjb21tYW5kL3Jlc3BvbnNlIHByb3RvY29scy4KKwogLi4gbW9kdWxlYXV0aG9yOjogU2FtIFJ1c2hpbmcgPHJ1c2hpbmdAbmlnaHRtYXJlLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBTdGV2ZSBIb2xkZW4gPHNob2xkZW5AaG9sZGVud2ViLmNvbT4KIApAQCAtMTQ3LDQwICsxNDgsNiBAQAogICAgYnkgdGhlIGNoYW5uZWwgYWZ0ZXIgOm1ldGg6YGZvdW5kX3Rlcm1pbmF0b3JgIGlzIGNhbGxlZC4KIAogCi1hc3luY2hhdCAtIEF1eGlsaWFyeSBDbGFzc2VzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLi4gY2xhc3M6OiBmaWZvKGxpc3Q9Tm9uZSkKLQotICAgQSA6Y2xhc3M6YGZpZm9gIGhvbGRpbmcgZGF0YSB3aGljaCBoYXMgYmVlbiBwdXNoZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJ1dAotICAgbm90IHlldCBwb3BwZWQgZm9yIHdyaXRpbmcgdG8gdGhlIGNoYW5uZWwuICBBIDpjbGFzczpgZmlmb2AgaXMgYSBsaXN0IHVzZWQKLSAgIHRvIGhvbGQgZGF0YSBhbmQvb3IgcHJvZHVjZXJzIHVudGlsIHRoZXkgYXJlIHJlcXVpcmVkLiAgSWYgdGhlICpsaXN0KgotICAgYXJndW1lbnQgaXMgcHJvdmlkZWQgdGhlbiBpdCBzaG91bGQgY29udGFpbiBwcm9kdWNlcnMgb3IgZGF0YSBpdGVtcyB0byBiZQotICAgd3JpdHRlbiB0byB0aGUgY2hhbm5lbC4KLQotCi0gICAuLiBtZXRob2Q6OiBpc19lbXB0eSgpCi0KLSAgICAgIFJldHVybnMgYGBUcnVlYGAgaWYgYW5kIG9ubHkgaWYgdGhlIGZpZm8gaXMgZW1wdHkuCi0KLQotICAgLi4gbWV0aG9kOjogZmlyc3QoKQotCi0gICAgICBSZXR1cm5zIHRoZSBsZWFzdC1yZWNlbnRseSA6bWV0aDpgcHVzaGBcIGVkIGl0ZW0gZnJvbSB0aGUgZmlmby4KLQotCi0gICAuLiBtZXRob2Q6OiBwdXNoKGRhdGEpCi0KLSAgICAgIEFkZHMgdGhlIGdpdmVuIGRhdGEgKHdoaWNoIG1heSBiZSBhIHN0cmluZyBvciBhIHByb2R1Y2VyIG9iamVjdCkgdG8gdGhlCi0gICAgICBwcm9kdWNlciBmaWZvLgotCi0KLSAgIC4uIG1ldGhvZDo6IHBvcCgpCi0KLSAgICAgIElmIHRoZSBmaWZvIGlzIG5vdCBlbXB0eSwgcmV0dXJucyBgYFRydWUsIGZpcnN0KClgYCwgZGVsZXRpbmcgdGhlIHBvcHBlZAotICAgICAgaXRlbS4gIFJldHVybnMgYGBGYWxzZSwgTm9uZWBgIGZvciBhbiBlbXB0eSBmaWZvLgotCi0KIC4uIF9hc3luY2hhdC1leGFtcGxlOgogCiBhc3luY2hhdCBFeGFtcGxlCkBAIC0yMzYsNyArMjAzLDcgQEAKICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKE5vbmUpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVxdWVzdCgpCiAgICAgICAgICAgIGVsaWYgbm90IHNlbGYuaGFuZGxpbmc6Ci0gICAgICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKE5vbmUpICMgYnJvd3NlcnMgc29tZXRpbWVzIG92ZXItc2VuZAorICAgICAgICAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcihOb25lKSAgIyBicm93c2VycyBzb21ldGltZXMgb3Zlci1zZW5kCiAgICAgICAgICAgICAgICBzZWxmLmNnaV9kYXRhID0gcGFyc2Uoc2VsZi5oZWFkZXJzLCBiIiIuam9pbihzZWxmLmlidWZmZXIpKQogICAgICAgICAgICAgICAgc2VsZi5oYW5kbGluZyA9IFRydWUKICAgICAgICAgICAgICAgIHNlbGYuaWJ1ZmZlciA9IFtdCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLWRldi5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWRldi5yc3QKaW5kZXggMWQxZjc5NS4uYjk1NTdhZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNpby1kZXYucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZGV2LnJzdApAQCAtMTA2LDYgKzEwNiw5IEBACiAKICAgICBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGZ1dC5jYW5jZWwpCiAKK1RvIGhhbmRsZSBzaWduYWxzIGFuZCB0byBleGVjdXRlIHN1YnByb2Nlc3NlcywgdGhlIGV2ZW50IGxvb3AgbXVzdCBiZSBydW4gaW4KK3RoZSBtYWluIHRocmVhZC4KKwogVG8gc2NoZWR1bGUgYSBjb3JvdXRpbmUgb2JqZWN0IGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLCB0aGUKIDpmdW5jOmBydW5fY29yb3V0aW5lX3RocmVhZHNhZmVgIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLiBJdCByZXR1cm5zIGEKIDpjbGFzczpgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZWAgdG8gYWNjZXNzIHRoZSByZXN1bHQ6OgpAQCAtMTEzLDkgKzExNiw2IEBACiAgICAgIGZ1dHVyZSA9IGFzeW5jaW8ucnVuX2Nvcm91dGluZV90aHJlYWRzYWZlKGNvcm9fZnVuYygpLCBsb29wKQogICAgICByZXN1bHQgPSBmdXR1cmUucmVzdWx0KHRpbWVvdXQpICAjIFdhaXQgZm9yIHRoZSByZXN1bHQgd2l0aCBhIHRpbWVvdXQKIAotVG8gaGFuZGxlIHNpZ25hbHMgYW5kIHRvIGV4ZWN1dGUgc3VicHJvY2Vzc2VzLCB0aGUgZXZlbnQgbG9vcCBtdXN0IGJlIHJ1biBpbgotdGhlIG1haW4gdGhyZWFkLgotCiBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3AucnVuX2luX2V4ZWN1dG9yYCBtZXRob2QgY2FuIGJlIHVzZWQgd2l0aCBhIHRocmVhZCBwb29sCiBleGVjdXRvciB0byBleGVjdXRlIGEgY2FsbGJhY2sgaW4gZGlmZmVyZW50IHRocmVhZCB0byBub3QgYmxvY2sgdGhlIHRocmVhZCBvZgogdGhlIGV2ZW50IGxvb3AuCkBAIC0xNjgsMTAgKzE2OCwxMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGVuIGEgY29yb3V0aW5lIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgaXRzIHJlc3VsdCBpcyBub3QgcGFzc2VkIHRvCi06ZnVuYzpgYXN5bmNgIG9yIHRvIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AgbWV0aG9kLCB0aGUgZXhlY3V0aW9uCi1vZiB0aGUgY29yb3V0aW5lIG9iamVjdCB3aWxsIG5ldmVyIGJlIHNjaGVkdWxlZCB3aGljaCBpcyBwcm9iYWJseSBhIGJ1Zy4KLTpyZWY6YEVuYWJsZSB0aGUgZGVidWcgbW9kZSBvZiBhc3luY2lvIDxhc3luY2lvLWRlYnVnLW1vZGU+YCB0byA6cmVmOmBsb2cgYQotd2FybmluZyA8YXN5bmNpby1sb2dnZXI+YCB0byBkZXRlY3QgaXQuCis6ZnVuYzpgZW5zdXJlX2Z1dHVyZWAgb3IgdG8gdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYCBtZXRob2QsCit0aGUgZXhlY3V0aW9uIG9mIHRoZSBjb3JvdXRpbmUgb2JqZWN0IHdpbGwgbmV2ZXIgYmUgc2NoZWR1bGVkIHdoaWNoIGlzCitwcm9iYWJseSBhIGJ1Zy4gIDpyZWY6YEVuYWJsZSB0aGUgZGVidWcgbW9kZSBvZiBhc3luY2lvIDxhc3luY2lvLWRlYnVnLW1vZGU+YAordG8gOnJlZjpgbG9nIGEgd2FybmluZyA8YXN5bmNpby1sb2dnZXI+YCB0byBkZXRlY3QgaXQuCiAKIEV4YW1wbGUgd2l0aCB0aGUgYnVnOjoKIApAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgICBGaWxlICJ0ZXN0LnB5IiwgbGluZSA3LCBpbiA8bW9kdWxlPgogICAgICAgICB0ZXN0KCkKIAotVGhlIGZpeCBpcyB0byBjYWxsIHRoZSA6ZnVuYzpgYXN5bmNgIGZ1bmN0aW9uIG9yIHRoZQorVGhlIGZpeCBpcyB0byBjYWxsIHRoZSA6ZnVuYzpgZW5zdXJlX2Z1dHVyZWAgZnVuY3Rpb24gb3IgdGhlCiA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AgbWV0aG9kIHdpdGggdGhlIGNvcm91dGluZSBvYmplY3QuCiAKIC4uIHNlZWFsc286OgpAQCAtMzIxLDE0ICszMjEsMTggQEAKICAgICBwcmludCgiUGVuZGluZyB0YXNrcyBhdCBleGl0OiAlcyIgJSBhc3luY2lvLlRhc2suYWxsX3Rhc2tzKGxvb3ApKQogICAgIGxvb3AuY2xvc2UoKQogCi1FeHBlY3RlZCBvdXRwdXQ6OgorRXhwZWN0ZWQgb3V0cHV0OgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICAgKDEpIGNyZWF0ZSBmaWxlCiAgICAgKDIpIHdyaXRlIGludG8gZmlsZQogICAgICgzKSBjbG9zZSBmaWxlCiAgICAgUGVuZGluZyB0YXNrcyBhdCBleGl0OiBzZXQoKQogCi1BY3R1YWwgb3V0cHV0OjoKK0FjdHVhbCBvdXRwdXQ6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCiAKICAgICAoMykgY2xvc2UgZmlsZQogICAgICgyKSB3cml0ZSBpbnRvIGZpbGUKQEAgLTM2OSwxMyArMzczLDE3IEBACiBJZiBhIHBlbmRpbmcgdGFzayBpcyBkZXN0cm95ZWQsIHRoZSBleGVjdXRpb24gb2YgaXRzIHdyYXBwZWQgOnJlZjpgY29yb3V0aW5lCiA8Y29yb3V0aW5lPmAgZGlkIG5vdCBjb21wbGV0ZS4gSXQgaXMgcHJvYmFibHkgYSBidWcgYW5kIHNvIGEgd2FybmluZyBpcyBsb2dnZWQuCiAKLUV4YW1wbGUgb2YgbG9nOjoKK0V4YW1wbGUgb2YgbG9nOgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICAgVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIQogICAgIHRhc2s6IDxUYXNrIHBlbmRpbmcgY29ybz08a2lsbF9tZSgpIGRvbmUsIGRlZmluZWQgYXQgdGVzdC5weTo1PiB3YWl0X2Zvcj08RnV0dXJlIHBlbmRpbmcgY2I9W1Rhc2suX3dha2V1cCgpXT4+CiAKIDpyZWY6YEVuYWJsZSB0aGUgZGVidWcgbW9kZSBvZiBhc3luY2lvIDxhc3luY2lvLWRlYnVnLW1vZGU+YCB0byBnZXQgdGhlCi10cmFjZWJhY2sgd2hlcmUgdGhlIHRhc2sgd2FzIGNyZWF0ZWQuIEV4YW1wbGUgb2YgbG9nIGluIGRlYnVnIG1vZGU6OgordHJhY2ViYWNrIHdoZXJlIHRoZSB0YXNrIHdhcyBjcmVhdGVkLiBFeGFtcGxlIG9mIGxvZyBpbiBkZWJ1ZyBtb2RlOgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICAgVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIQogICAgIHNvdXJjZV90cmFjZWJhY2s6IE9iamVjdCBjcmVhdGVkIGF0IChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AucnN0CmluZGV4IDk2NDY4YWUuLjdlYzNhYTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5yc3QKQEAgLTM4LDE0ICszOCwxNCBAQAogICAgdGhhdCBjYWxsYmFja3Mgc2NoZWR1bGVkIGJ5IGNhbGxiYWNrcyB3aWxsIG5vdCBydW4gaW4gdGhhdCBjYXNlOwogICAgdGhleSB3aWxsIHJ1biB0aGUgbmV4dCB0aW1lIDptZXRoOmBydW5fZm9yZXZlcmAgaXMgY2FsbGVkLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC40CisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNS4xCiAKIC4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHVyZSkKIAogICAgUnVuIHVudGlsIHRoZSA6Y2xhc3M6YEZ1dHVyZWAgaXMgZG9uZS4KIAogICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAsIGl0IGlzIHdyYXBwZWQgYnkKLSAgIDpmdW5jOmBhc3luY2AuCisgICA6ZnVuYzpgZW5zdXJlX2Z1dHVyZWAuCiAKICAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgogCkBAIC02MCw3ICs2MCw3IEBACiAgICBUaGlzIGNhdXNlcyA6bWV0aDpgcnVuX2ZvcmV2ZXJgIHRvIGV4aXQgYXQgdGhlIG5leHQgc3VpdGFibGUKICAgIG9wcG9ydHVuaXR5IChzZWUgdGhlcmUgZm9yIG1vcmUgZGV0YWlscykuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41LjEKIAogLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5pc19jbG9zZWQoKQogCkBAIC0xNzksNiArMTc5LDIwIEBACiAgICBUaGUgOmZ1bmM6YGFzeW5jaW8uc2xlZXBgIGZ1bmN0aW9uLgogCiAKK0Z1dHVyZXMKKy0tLS0tLS0KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jcmVhdGVfZnV0dXJlKCkKKworICAgQ3JlYXRlIGFuIDpjbGFzczpgYXN5bmNpby5GdXR1cmVgIG9iamVjdCBhdHRhY2hlZCB0byB0aGUgbG9vcC4KKworICAgVGhpcyBpcyBhIHByZWZlcnJlZCB3YXkgdG8gY3JlYXRlIGZ1dHVyZXMgaW4gYXN5bmNpbywgYXMgZXZlbnQKKyAgIGxvb3AgaW1wbGVtZW50YXRpb25zIGNhbiBwcm92aWRlIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucworICAgb2YgdGhlIEZ1dHVyZSBjbGFzcyAod2l0aCBiZXR0ZXIgcGVyZm9ybWFuY2Ugb3IgaW5zdHJ1bWVudGF0aW9uKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41LjIKKworCiBUYXNrcwogLS0tLS0KIApAQCAtMjUzLDcgKzI2Nyw3IEBACiAgICAgICBhIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHVzZSBhIHByZS1jcmVhdGVkCiAgICAgICBwcm90b2NvbCBpbnN0YW5jZSwgeW91IGNhbiBwYXNzIGBgbGFtYmRhOiBteV9wcm90b2NvbGBgLgogCi0gICBPcHRpb25zIGFsbG93aW5nIHRvIGNoYW5nZSBob3cgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZDoKKyAgIE9wdGlvbnMgdGhhdCBjaGFuZ2UgaG93IHRoZSBjb25uZWN0aW9uIGlzIGNyZWF0ZWQ6CiAKICAgICogKnNzbCo6IGlmIGdpdmVuIGFuZCBub3QgZmFsc2UsIGEgU1NML1RMUyB0cmFuc3BvcnQgaXMgY3JlYXRlZAogICAgICAoYnkgZGVmYXVsdCBhIHBsYWluIFRDUCB0cmFuc3BvcnQgaXMgY3JlYXRlZCkuICBJZiAqc3NsKiBpcwpAQCAtMjg1LDcgKzI5OSw5IEBACiAgICAgIHRvIGJpbmQgdGhlIHNvY2tldCB0byBsb2NhbGx5LiAgVGhlICpsb2NhbF9ob3N0KiBhbmQgKmxvY2FsX3BvcnQqCiAgICAgIGFyZSBsb29rZWQgdXAgdXNpbmcgZ2V0YWRkcmluZm8oKSwgc2ltaWxhcmx5IHRvICpob3N0KiBhbmQgKnBvcnQqLgogCi0gICBPbiBXaW5kb3dzIHdpdGggOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAsIFNTTC9UTFMgaXMgbm90IHN1cHBvcnRlZC4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisKKyAgICAgIE9uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCwgU1NML1RMUyBpcyBub3cgc3VwcG9ydGVkLgogCiAgICAuLiBzZWVhbHNvOjoKIApAQCAtNDA5LDE0ICs0MjUsMTYgQEAKIAogICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgogCi0gICBPbiBXaW5kb3dzIHdpdGggOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAsIFNTTC9UTFMgaXMgbm90IHN1cHBvcnRlZC4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisKKyAgICAgIE9uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCwgU1NML1RMUyBpcyBub3cgc3VwcG9ydGVkLgogCiAgICAuLiBzZWVhbHNvOjoKIAogICAgICAgVGhlIGZ1bmN0aW9uIDpmdW5jOmBzdGFydF9zZXJ2ZXJgIGNyZWF0ZXMgYSAoOmNsYXNzOmBTdHJlYW1SZWFkZXJgLAogICAgICAgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgKSBwYWlyIGFuZCBjYWxscyBiYWNrIGEgZnVuY3Rpb24gd2l0aCB0aGlzIHBhaXIuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41LjEKIAogICAgICAgVGhlICpob3N0KiBwYXJhbWV0ZXIgY2FuIG5vdyBiZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3MuCiAKQEAgLTQ3Myw3ICs0OTEsMTAgQEAKIAogLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zb2NrX3JlY3Yoc29jaywgbmJ5dGVzKQogCi0gICBSZWNlaXZlIGRhdGEgZnJvbSB0aGUgc29ja2V0LiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdAorICAgUmVjZWl2ZSBkYXRhIGZyb20gdGhlIHNvY2tldC4gIE1vZGVsZWQgYWZ0ZXIgYmxvY2tpbmcKKyAgIDptZXRoOmBzb2NrZXQuc29ja2V0LnJlY3ZgIG1ldGhvZC4KKworICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdAogICAgcmVwcmVzZW50aW5nIHRoZSBkYXRhIHJlY2VpdmVkLiAgVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKICAgIGF0IG9uY2UgaXMgc3BlY2lmaWVkIGJ5ICpuYnl0ZXMqLgogCkBAIC00ODIsMTMgKzUwMywxMiBAQAogCiAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCiAKLSAgIC4uIHNlZWFsc286OgotCi0gICAgICBUaGUgOm1ldGg6YHNvY2tldC5zb2NrZXQucmVjdmAgbWV0aG9kLgotCiAuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNvY2tfc2VuZGFsbChzb2NrLCBkYXRhKQogCi0gICBTZW5kIGRhdGEgdG8gdGhlIHNvY2tldC4gIFRoZSBzb2NrZXQgbXVzdCBiZSBjb25uZWN0ZWQgdG8gYSByZW1vdGUgc29ja2V0LgorICAgU2VuZCBkYXRhIHRvIHRoZSBzb2NrZXQuICBNb2RlbGVkIGFmdGVyIGJsb2NraW5nCisgICA6bWV0aDpgc29ja2V0LnNvY2tldC5zZW5kYWxsYCBtZXRob2QuCisKKyAgIFRoZSBzb2NrZXQgbXVzdCBiZSBjb25uZWN0ZWQgdG8gYSByZW1vdGUgc29ja2V0LgogICAgVGhpcyBtZXRob2QgY29udGludWVzIHRvIHNlbmQgZGF0YSBmcm9tICpkYXRhKiB1bnRpbCBlaXRoZXIgYWxsIGRhdGEgaGFzCiAgICBiZWVuIHNlbnQgb3IgYW4gZXJyb3Igb2NjdXJzLiAgYGBOb25lYGAgaXMgcmV0dXJuZWQgb24gc3VjY2Vzcy4gIE9uIGVycm9yLAogICAgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0byBkZXRlcm1pbmUgaG93IG11Y2ggZGF0YSwgaWYKQEAgLTQ5OSwzNSArNTE5LDM1IEBACiAKICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KIAotICAgLi4gc2VlYWxzbzo6Ci0KLSAgICAgIFRoZSA6bWV0aDpgc29ja2V0LnNvY2tldC5zZW5kYWxsYCBtZXRob2QuCi0KIC4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpCiAKLSAgIENvbm5lY3QgdG8gYSByZW1vdGUgc29ja2V0IGF0ICphZGRyZXNzKi4KLQotICAgVGhlICphZGRyZXNzKiBtdXN0IGJlIGFscmVhZHkgcmVzb2x2ZWQgdG8gYXZvaWQgdGhlIHRyYXAgb2YgaGFuZ2luZyB0aGUKLSAgIGVudGlyZSBldmVudCBsb29wIHdoZW4gdGhlIGFkZHJlc3MgcmVxdWlyZXMgZG9pbmcgYSBETlMgbG9va3VwLiAgRm9yCi0gICBleGFtcGxlLCBpdCBtdXN0IGJlIGFuIElQIGFkZHJlc3MsIG5vdCBhbiBob3N0bmFtZSwgZm9yCi0gICA6cHk6ZGF0YTpgfnNvY2tldC5BRl9JTkVUYCBhbmQgOnB5OmRhdGE6YH5zb2NrZXQuQUZfSU5FVDZgIGFkZHJlc3MgZmFtaWxpZXMuCi0gICBVc2UgOm1ldGg6YGdldGFkZHJpbmZvYCB0byByZXNvbHZlIHRoZSBob3N0bmFtZSBhc3luY2hyb25vdXNseS4KKyAgIENvbm5lY3QgdG8gYSByZW1vdGUgc29ja2V0IGF0ICphZGRyZXNzKi4gIE1vZGVsZWQgYWZ0ZXIKKyAgIGJsb2NraW5nIDptZXRoOmBzb2NrZXQuc29ja2V0LmNvbm5lY3RgIG1ldGhvZC4KIAogICAgV2l0aCA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCBldmVudCBsb29wLCB0aGUgc29ja2V0ICpzb2NrKiBtdXN0IGJlCiAgICBub24tYmxvY2tpbmcuCiAKICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUuMgorICAgICAgYGBhZGRyZXNzYGAgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIHJlc29sdmVkLiAgYGBzb2NrX2Nvbm5lY3RgYAorICAgICAgd2lsbCB0cnkgdG8gY2hlY2sgaWYgdGhlICphZGRyZXNzKiBpcyBhbHJlYWR5IHJlc29sdmVkIGJ5IGNhbGxpbmcKKyAgICAgIDpmdW5jOmBzb2NrZXQuaW5ldF9wdG9uYC4gIElmIG5vdCwKKyAgICAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmdldGFkZHJpbmZvYCB3aWxsIGJlIHVzZWQgdG8gcmVzb2x2ZSB0aGUKKyAgICAgICphZGRyZXNzKi4KKwogICAgLi4gc2VlYWxzbzo6CiAKLSAgICAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kLCB0aGUKLSAgICAgIDpmdW5jOmBvcGVuX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5zb2NrZXQuY29ubmVjdGAKLSAgICAgIG1ldGhvZC4KKyAgICAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYAorICAgICAgYW5kICA6ZnVuYzpgYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24oKSA8b3Blbl9jb25uZWN0aW9uPmAuCiAKIAogLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zb2NrX2FjY2VwdChzb2NrKQogCi0gICBBY2NlcHQgYSBjb25uZWN0aW9uLiBUaGUgc29ja2V0IG11c3QgYmUgYm91bmQgdG8gYW4gYWRkcmVzcyBhbmQgbGlzdGVuaW5nCisgICBBY2NlcHQgYSBjb25uZWN0aW9uLiAgTW9kZWxlZCBhZnRlciBibG9ja2luZworICAgOm1ldGg6YHNvY2tldC5zb2NrZXQuYWNjZXB0YC4KKworICAgVGhlIHNvY2tldCBtdXN0IGJlIGJvdW5kIHRvIGFuIGFkZHJlc3MgYW5kIGxpc3RlbmluZwogICAgZm9yIGNvbm5lY3Rpb25zLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcGFpciBgYChjb25uLCBhZGRyZXNzKWBgIHdoZXJlICpjb25uKgogICAgaXMgYSAqbmV3KiBzb2NrZXQgb2JqZWN0IHVzYWJsZSB0byBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24sCiAgICBhbmQgKmFkZHJlc3MqIGlzIHRoZSBhZGRyZXNzIGJvdW5kIHRvIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUKQEAgLTUzOSw4ICs1NTksNyBAQAogCiAgICAuLiBzZWVhbHNvOjoKIAotICAgICAgVGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgIG1ldGhvZCwgdGhlIDpmdW5jOmBzdGFydF9zZXJ2ZXJgCi0gICAgICBmdW5jdGlvbiBhbmQgdGhlIDptZXRoOmBzb2NrZXQuc29ja2V0LmFjY2VwdGAgbWV0aG9kLgorICAgICAgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAgYW5kIDpmdW5jOmBzdGFydF9zZXJ2ZXJgLgogCiAKIFJlc29sdmUgaG9zdCBuYW1lCkBAIC02NTAsNyArNjY5LDcgQEAKIEVycm9yIEhhbmRsaW5nIEFQSQogLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUFsbG93cyB0byBjdXN0b21pemUgaG93IGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIGV2ZW50IGxvb3AuCitBbGxvd3MgY3VzdG9taXppbmcgaG93IGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIGV2ZW50IGxvb3AuCiAKIC4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGhhbmRsZXIpCiAKQEAgLTY2NSw2ICs2ODQsMTMgQEAKICAgIHdpbGwgYmUgYSBgYGRpY3RgYCBvYmplY3QgKHNlZSA6bWV0aDpgY2FsbF9leGNlcHRpb25faGFuZGxlcmAKICAgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgYWJvdXQgY29udGV4dCkuCiAKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuZ2V0X2V4Y2VwdGlvbl9oYW5kbGVyKCkKKworICAgUmV0dXJuIHRoZSBleGNlcHRpb24gaGFuZGxlciwgb3IgYGBOb25lYGAgaWYgdGhlIGRlZmF1bHQgb25lCisgICBpcyBpbiB1c2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNS4yCisKIC4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQogCiAgICBEZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyLgpAQCAtNzM1LDExICs3NjEsMTEgQEAKICAgICAgIFN0b3Agc2VydmluZzogY2xvc2UgbGlzdGVuaW5nIHNvY2tldHMgYW5kIHNldCB0aGUgOmF0dHI6YHNvY2tldHNgCiAgICAgICBhdHRyaWJ1dGUgdG8gYGBOb25lYGAuCiAKLSAgICAgIFRoZSBzb2NrZXRzIHRoYXQgcmVwcmVzZW50IGV4aXN0aW5nIGluY29taW5nIGNsaWVudCBjb25uZWN0aW9ucyBhcmUKLSAgICAgIGxlYXZlZCBvcGVuLgorICAgICAgVGhlIHNvY2tldHMgdGhhdCByZXByZXNlbnQgZXhpc3RpbmcgaW5jb21pbmcgY2xpZW50IGNvbm5lY3Rpb25zIGFyZSBsZWZ0CisgICAgICBvcGVuLgogCi0gICAgICBUaGUgc2VydmVyIGlzIGNsb3NlZCBhc3luY2hvbm91c2x5LCB1c2UgdGhlIDptZXRoOmB3YWl0X2Nsb3NlZGAgY29yb3V0aW5lCi0gICAgICB0byB3YWl0IHVudGlsIHRoZSBzZXJ2ZXIgaXMgY2xvc2VkLgorICAgICAgVGhlIHNlcnZlciBpcyBjbG9zZWQgYXN5bmNocm9ub3VzbHksIHVzZSB0aGUgOm1ldGg6YHdhaXRfY2xvc2VkYAorICAgICAgY29yb3V0aW5lIHRvIHdhaXQgdW50aWwgdGhlIHNlcnZlciBpcyBjbG9zZWQuCiAKICAgIC4uIGNvcm91dGluZW1ldGhvZDo6IHdhaXRfY2xvc2VkKCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3BzLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wcy5yc3QKaW5kZXggZjQyZjY1YS4uYjhmMjlkNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3BzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcHMucnN0CkBAIC00MSw3ICs0MSw3IEBACiAKICAgIE9uIFdpbmRvd3MsIG9ubHkgc29ja2V0cyBhcmUgc3VwcG9ydGVkIChleDogcGlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQpOgogICAgc2VlIHRoZSBgTVNETiBkb2N1bWVudGF0aW9uIG9mIHNlbGVjdAotICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM3NDAxNDElMjh2PXZzLjg1JTI5LmFzcHg+YF8uCisgICA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM3NDAxNDElMjh2PXZzLjg1JTI5LmFzcHg+YF8uCiAKIC4uIGNsYXNzOjogUHJvYWN0b3JFdmVudExvb3AKIApAQCAtNTMsNyArNTMsNyBAQAogICAgLi4gc2VlYWxzbzo6CiAKICAgICAgIGBNU0ROIGRvY3VtZW50YXRpb24gb24gSS9PIENvbXBsZXRpb24gUG9ydHMKLSAgICAgIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MTk4JTI4dj12cy44NSUyOS5hc3B4PmBfLgorICAgICAgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MTk4JTI4dj12cy44NSUyOS5hc3B4PmBfLgogCiBFeGFtcGxlIHRvIHVzZSBhIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIG9uIFdpbmRvd3M6OgogCkBAIC0xMDAsOCArMTAwLDYgQEAKIAogOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAgc3BlY2lmaWMgbGltaXRzOgogCi0tIFNTTCBpcyBub3Qgc3VwcG9ydGVkOiA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIGFuZAotICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAgY2Fubm90IGJlIHVzZWQgd2l0aCBTU0wgZm9yIGV4YW1wbGUKIC0gOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludGAgKFVEUCkgaXMgbm90IHN1cHBvcnRlZAogLSA6bWV0aDpgfkJhc2VFdmVudExvb3AuYWRkX3JlYWRlcmAgYW5kIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5hZGRfd3JpdGVyYCBhcmUKICAgbm90IHN1cHBvcnRlZApAQCAtMTA5LDkgKzEwNywxMyBAQAogVGhlIHJlc29sdXRpb24gb2YgdGhlIG1vbm90b25pYyBjbG9jayBvbiBXaW5kb3dzIGlzIHVzdWFsbHkgYXJvdW5kIDE1LjYgbXNlYy4KIFRoZSBiZXN0IHJlc29sdXRpb24gaXMgMC41IG1zZWMuIFRoZSByZXNvbHV0aW9uIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlCiAoYXZhaWxhYmlsaXR5IG9mIGBIUEVUCi08aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IaWdoX1ByZWNpc2lvbl9FdmVudF9UaW1lcj5gXykgYW5kIG9uIHRoZSBXaW5kb3dzCis8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGlnaF9QcmVjaXNpb25fRXZlbnRfVGltZXI+YF8pIGFuZCBvbiB0aGUgV2luZG93cwogY29uZmlndXJhdGlvbi4gU2VlIDpyZWY6YGFzeW5jaW8gZGVsYXllZCBjYWxscyA8YXN5bmNpby1kZWxheWVkLWNhbGxzPmAuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisKKyAgIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIG5vdyBzdXBwb3J0cyBTU0wuCisKIAogTWFjIE9TIFgKIF5eXl5eXl5eCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wucnN0CmluZGV4IGY5Mjk4YjIuLjIzZDM0ZDAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wucnN0CkBAIC00NSw3ICs0NSw3IEBACiAKICAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgdHJhbnNwb3J0IGlzIGNsb3Npbmcgb3IgaXMgY2xvc2VkLgogCi0gICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNAorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy41LjEKIAogICAgLi4gbWV0aG9kOjogZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdD1Ob25lKQogCkBAIC04Nyw3ICs4Nyw3IEBACiAKICAgICAgICAgLSBgYCdzdWJwcm9jZXNzJ2BgOiA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gIGluc3RhbmNlCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41LjEKICAgICAgIGBgJ3NzbF9vYmplY3QnYGAgaW5mbyB3YXMgYWRkZWQgdG8gU1NMIHNvY2tldHMuCiAKIApAQCAtNDU4LDkgKzQ1OCw5IEBACiBDb3JvdXRpbmVzIGFuZCBwcm90b2NvbHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3JvdXRpbmVzIGNhbiBiZSBzY2hlZHVsZWQgaW4gYSBwcm90b2NvbCBtZXRob2QgdXNpbmcgOmZ1bmM6YGFzeW5jYCwgYnV0IHRoZXJlCi1pcyBubyBndWFyYW50ZWUgbWFkZSBhYm91dCB0aGUgZXhlY3V0aW9uIG9yZGVyLiAgUHJvdG9jb2xzIGFyZSBub3QgYXdhcmUgb2YKLWNvcm91dGluZXMgY3JlYXRlZCBpbiBwcm90b2NvbCBtZXRob2RzIGFuZCBzbyB3aWxsIG5vdCB3YWl0IGZvciB0aGVtLgorQ29yb3V0aW5lcyBjYW4gYmUgc2NoZWR1bGVkIGluIGEgcHJvdG9jb2wgbWV0aG9kIHVzaW5nIDpmdW5jOmBlbnN1cmVfZnV0dXJlYCwKK2J1dCB0aGVyZSBpcyBubyBndWFyYW50ZWUgbWFkZSBhYm91dCB0aGUgZXhlY3V0aW9uIG9yZGVyLiAgUHJvdG9jb2xzIGFyZSBub3QKK2F3YXJlIG9mIGNvcm91dGluZXMgY3JlYXRlZCBpbiBwcm90b2NvbCBtZXRob2RzIGFuZCBzbyB3aWxsIG5vdCB3YWl0IGZvciB0aGVtLgogCiBUbyBoYXZlIGEgcmVsaWFibGUgZXhlY3V0aW9uIG9yZGVyLCB1c2UgOnJlZjpgc3RyZWFtIG9iamVjdHMgPGFzeW5jaW8tc3RyZWFtcz5gIGluIGEKIGNvcm91dGluZSB3aXRoIGBgeWllbGQgZnJvbWBgLiBGb3IgZXhhbXBsZSwgdGhlIDptZXRoOmBTdHJlYW1Xcml0ZXIuZHJhaW5gCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXF1ZXVlLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tcXVldWUucnN0CmluZGV4IDMzNzA2NzIuLmYxMWMwOWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tcXVldWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tcXVldWUucnN0CkBAIC04LDcgKzgsNiBAQAogKiA6Y2xhc3M6YFF1ZXVlYAogKiA6Y2xhc3M6YFByaW9yaXR5UXVldWVgCiAqIDpjbGFzczpgTGlmb1F1ZXVlYAotKiA6Y2xhc3M6YEpvaW5hYmxlUXVldWVgCiAKIGFzeW5jaW8gcXVldWUgQVBJIHdhcyBkZXNpZ25lZCB0byBiZSBjbG9zZSB0byBjbGFzc2VzIG9mIHRoZSA6bW9kOmBxdWV1ZWAKIG1vZHVsZSAoOmNsYXNzOmB+cXVldWUuUXVldWVgLCA6Y2xhc3M6YH5xdWV1ZS5Qcmlvcml0eVF1ZXVlYCwKQEAgLTE0NCwxNiArMTQzLDYgQEAKICAgICBmaXJzdC4KIAogCi1Kb2luYWJsZVF1ZXVlCi1eXl5eXl5eXl5eXl5eCi0KLS4uIGNsYXNzOjogSm9pbmFibGVRdWV1ZQotCi0gICBEZXByZWNhdGVkIGFsaWFzIGZvciA6Y2xhc3M6YFF1ZXVlYC4KLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuNC40Ci0KLQogRXhjZXB0aW9ucwogXl5eXl5eXl5eXgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5yc3QKaW5kZXggNTJiOTNmOS4uMDhmZTA3MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLnJzdApAQCAtMTEsNyArMTEsNyBAQAogCiAuLiBub3RlOjoKIAotICAgVGhlIHRvcC1sZXZlbCBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgYXJlIG1lYW50IGNvbnZlbmllbmNlIHdyYXBwZXJzCisgICBUaGUgdG9wLWxldmVsIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBhcmUgbWVhbnQgYXMgY29udmVuaWVuY2Ugd3JhcHBlcnMKICAgIG9ubHk7IHRoZXJlJ3MgcmVhbGx5IG5vdGhpbmcgc3BlY2lhbCB0aGVyZSwgYW5kIGlmIHRoZXkgZG9uJ3QgZG8KICAgIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCwgZmVlbCBmcmVlIHRvIGNvcHkgdGhlaXIgY29kZS4KIApAQCAtMTQyLDYgKzE0MiwzMCBAQAogCiAgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCiAKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IHJlYWR1bnRpbChzZXBhcmF0b3I9YidcbicpCisKKyAgICAgIFJlYWQgZGF0YSBmcm9tIHRoZSBzdHJlYW0gdW50aWwgYGBzZXBhcmF0b3JgYCBpcyBmb3VuZC4KKworICAgICAgT24gc3VjY2VzcywgdGhlIGRhdGEgYW5kIHNlcGFyYXRvciB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgIGludGVybmFsIGJ1ZmZlciAoY29uc3VtZWQpLiBSZXR1cm5lZCBkYXRhIHdpbGwgaW5jbHVkZSB0aGUKKyAgICAgIHNlcGFyYXRvciBhdCB0aGUgZW5kLgorCisgICAgICBDb25maWd1cmVkIHN0cmVhbSBsaW1pdCBpcyB1c2VkIHRvIGNoZWNrIHJlc3VsdC4gTGltaXQgc2V0cyB0aGUKKyAgICAgIG1heGltYWwgbGVuZ3RoIG9mIGRhdGEgdGhhdCBjYW4gYmUgcmV0dXJuZWQsIG5vdCBjb3VudGluZyB0aGUKKyAgICAgIHNlcGFyYXRvci4KKworICAgICAgSWYgYW4gRU9GIG9jY3VycyBhbmQgdGhlIGNvbXBsZXRlIHNlcGFyYXRvciBpcyBzdGlsbCBub3QgZm91bmQsCisgICAgICBhbiA6ZXhjOmBJbmNvbXBsZXRlUmVhZEVycm9yYCBleGNlcHRpb24gd2lsbCBiZQorICAgICAgcmFpc2VkLCBhbmQgdGhlIGludGVybmFsIGJ1ZmZlciB3aWxsIGJlIHJlc2V0LiAgVGhlCisgICAgICA6YXR0cjpgSW5jb21wbGV0ZVJlYWRFcnJvci5wYXJ0aWFsYCBhdHRyaWJ1dGUgbWF5IGNvbnRhaW4gdGhlCisgICAgICBzZXBhcmF0b3IgcGFydGlhbGx5LgorCisgICAgICBJZiB0aGUgZGF0YSBjYW5ub3QgYmUgcmVhZCBiZWNhdXNlIG9mIG92ZXIgbGltaXQsIGEKKyAgICAgIDpleGM6YExpbWl0T3ZlcnJ1bkVycm9yYCBleGNlcHRpb24gIHdpbGwgYmUgcmFpc2VkLCBhbmQgdGhlIGRhdGEKKyAgICAgIHdpbGwgYmUgbGVmdCBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLCBzbyBpdCBjYW4gYmUgcmVhZCBhZ2Fpbi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy41LjIKKwogICAgLi4gbWV0aG9kOjogYXRfZW9mKCkKIAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkgYW5kIDptZXRoOmBmZWVkX2VvZmAgd2FzIGNhbGxlZC4KQEAgLTIyMyw3ICsyNDcsNyBAQAogLi4gY2xhc3M6OiBTdHJlYW1SZWFkZXJQcm90b2NvbChzdHJlYW1fcmVhZGVyLCBjbGllbnRfY29ubmVjdGVkX2NiPU5vbmUsIGxvb3A9Tm9uZSkKIAogICAgIFRyaXZpYWwgaGVscGVyIGNsYXNzIHRvIGFkYXB0IGJldHdlZW4gOmNsYXNzOmBQcm90b2NvbGAgYW5kCi0gICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgLiBTdWJsY2xhc3Mgb2YgOmNsYXNzOmBQcm90b2NvbGAuCisgICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgLiBTdWJjbGFzcyBvZiA6Y2xhc3M6YFByb3RvY29sYC4KIAogICAgICpzdHJlYW1fcmVhZGVyKiBpcyBhIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBpbnN0YW5jZSwgKmNsaWVudF9jb25uZWN0ZWRfY2IqCiAgICAgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGVkIHdpdGggKHN0cmVhbV9yZWFkZXIsIHN0cmVhbV93cml0ZXIpIHdoZW4gYQpAQCAtMjUxLDYgKzI3NSwxOCBAQAogICAgICAgUmVhZCBieXRlcyBzdHJpbmcgYmVmb3JlIHRoZSBlbmQgb2Ygc3RyZWFtIHdhcyByZWFjaGVkICg6Y2xhc3M6YGJ5dGVzYCkuCiAKIAorTGltaXRPdmVycnVuRXJyb3IKKz09PT09PT09PT09PT09PT09CisKKy4uIGV4Y2VwdGlvbjo6IExpbWl0T3ZlcnJ1bkVycm9yCisKKyAgIFJlYWNoZWQgdGhlIGJ1ZmZlciBsaW1pdCB3aGlsZSBsb29raW5nIGZvciBhIHNlcGFyYXRvci4KKworICAgLi4gYXR0cmlidXRlOjogY29uc3VtZWQKKworICAgICAgVG90YWwgbnVtYmVyIG9mIHRvIGJlIGNvbnN1bWVkIGJ5dGVzLgorCisKIFN0cmVhbSBleGFtcGxlcwogPT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MucnN0CmluZGV4IDIxZGFlNTQuLjUxY2U0MjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLnJzdApAQCAtNTEsNyArNTEsNyBAQAogCiAgICBJdCBpcyB0aGUgYXBwbGljYXRpb24ncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBhbGwgd2hpdGVzcGFjZSBhbmQKICAgIG1ldGFjaGFyYWN0ZXJzIGFyZSBxdW90ZWQgYXBwcm9wcmlhdGVseSB0byBhdm9pZCBgc2hlbGwgaW5qZWN0aW9uCi0gICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGVsbF9pbmplY3Rpb24jU2hlbGxfaW5qZWN0aW9uPmBfCisgICA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hlbGxfaW5qZWN0aW9uI1NoZWxsX2luamVjdGlvbj5gXwogICAgdnVsbmVyYWJpbGl0aWVzLiBUaGUgOmZ1bmM6YHNobGV4LnF1b3RlYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBwcm9wZXJseQogICAgZXNjYXBlIHdoaXRlc3BhY2UgYW5kIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIGluIHN0cmluZ3MgdGhhdCBhcmUgZ29pbmcgdG8gYmUKICAgIHVzZWQgdG8gY29uc3RydWN0IHNoZWxsIGNvbW1hbmRzLgpAQCAtMTM0LDcgKzEzNCw3IEBACiAKICAgIEl0IGlzIHRoZSBhcHBsaWNhdGlvbidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGFsbCB3aGl0ZXNwYWNlIGFuZAogICAgbWV0YWNoYXJhY3RlcnMgYXJlIHF1b3RlZCBhcHByb3ByaWF0ZWx5IHRvIGF2b2lkIGBzaGVsbCBpbmplY3Rpb24KLSAgIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NoZWxsX2luamVjdGlvbiNTaGVsbF9pbmplY3Rpb24+YF8KKyAgIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGVsbF9pbmplY3Rpb24jU2hlbGxfaW5qZWN0aW9uPmBfCiAgICB2dWxuZXJhYmlsaXRpZXMuIFRoZSA6ZnVuYzpgc2hsZXgucXVvdGVgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHByb3Blcmx5CiAgICBlc2NhcGUgd2hpdGVzcGFjZSBhbmQgc2hlbGwgbWV0YWNoYXJhY3RlcnMgaW4gc3RyaW5ncyB0aGF0IGFyZSBnb2luZyB0byBiZQogICAgdXNlZCB0byBjb25zdHJ1Y3Qgc2hlbGwgY29tbWFuZHMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXN5bmMucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1zeW5jLnJzdAppbmRleCBhZDNiNTIzLi4wOTA5MzUyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY2lvLXN5bmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3luYy5yc3QKQEAgLTUyLDcgKzUyLDcgQEAKICAgIDptZXRoOmBhY3F1aXJlYCBpcyBhIGNvcm91dGluZSBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGBgeWllbGQgZnJvbWBgLgogCiAgICBMb2NrcyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gIGBgKHlpZWxkIGZyb20gbG9jaylgYAotICAgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCisgICBzaG91bGQgYmUgdXNlZCBhcyB0aGUgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCiAKICAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCiAKQEAgLTcxLDE0ICs3MSwxNCBAQAogICAgICAgIGxvY2sgPSBMb2NrKCkKICAgICAgICAuLi4KICAgICAgICB3aXRoICh5aWVsZCBmcm9tIGxvY2spOgotICAgICAgICAgICAgLi4uCisgICAgICAgICAgIC4uLgogCiAgICBMb2NrIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3IgbG9ja2luZyBzdGF0ZTo6CiAKICAgICAgICBpZiBub3QgbG9jay5sb2NrZWQoKToKLSAgICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCiAgICAgICAgZWxzZToKLSAgICAgICAgICAjIGxvY2sgaXMgYWNxdWlyZWQKKyAgICAgICAgICAgIyBsb2NrIGlzIGFjcXVpcmVkCiAgICAgICAgICAgIC4uLgogCiAgICAuLiBtZXRob2Q6OiBsb2NrZWQoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby10YXNrLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tdGFzay5yc3QKaW5kZXggNzZmMDg0YS4uZGU2ZWU1OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNpby10YXNrLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXRhc2sucnN0CkBAIC04LDE3ICs4LDIzIEBACiBDb3JvdXRpbmVzCiAtLS0tLS0tLS0tCiAKLUEgY29yb3V0aW5lIGlzIGEgZ2VuZXJhdG9yIHRoYXQgZm9sbG93cyBjZXJ0YWluIGNvbnZlbnRpb25zLiAgRm9yCi1kb2N1bWVudGF0aW9uIHB1cnBvc2VzLCBhbGwgY29yb3V0aW5lcyBzaG91bGQgYmUgZGVjb3JhdGVkIHdpdGgKLWBgQGFzeW5jaW8uY29yb3V0aW5lYGAsIGJ1dCB0aGlzIGNhbm5vdCBiZSBzdHJpY3RseSBlbmZvcmNlZC4KK0Nvcm91dGluZXMgdXNlZCB3aXRoIDptb2Q6YGFzeW5jaW9gIG1heSBiZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUKKzprZXl3b3JkOmBhc3luYyBkZWZgIHN0YXRlbWVudCwgb3IgYnkgdXNpbmcgOnRlcm06YGdlbmVyYXRvcnMgPGdlbmVyYXRvcj5gLgorVGhlIDprZXl3b3JkOmBhc3luYyBkZWZgIHR5cGUgb2YgY29yb3V0aW5lIHdhcyBhZGRlZCBpbiBQeXRob24gMy41LCBhbmQKK2lzIHJlY29tbWVuZGVkIGlmIHRoZXJlIGlzIG5vIG5lZWQgdG8gc3VwcG9ydCBvbGRlciBQeXRob24gdmVyc2lvbnMuCiAKLUNvcm91dGluZXMgdXNlIHRoZSBgYHlpZWxkIGZyb21gYCBzeW50YXggaW50cm9kdWNlZCBpbiA6cGVwOmAzODBgLAorR2VuZXJhdG9yLWJhc2VkIGNvcm91dGluZXMgc2hvdWxkIGJlIGRlY29yYXRlZCB3aXRoIDpmdW5jOmBAYXN5bmNpby5jb3JvdXRpbmUKKzxhc3luY2lvLmNvcm91dGluZT5gLCBhbHRob3VnaCB0aGlzIGlzIG5vdCBzdHJpY3RseSBlbmZvcmNlZC4KK1RoZSBkZWNvcmF0b3IgZW5hYmxlcyBjb21wYXRpYmlsaXR5IHdpdGggOmtleXdvcmQ6YGFzeW5jIGRlZmAgY29yb3V0aW5lcywKK2FuZCBhbHNvIHNlcnZlcyBhcyBkb2N1bWVudGF0aW9uLiAgR2VuZXJhdG9yLWJhc2VkCitjb3JvdXRpbmVzIHVzZSB0aGUgYGB5aWVsZCBmcm9tYGAgc3ludGF4IGludHJvZHVjZWQgaW4gOnBlcDpgMzgwYCwKIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGBgeWllbGRgYCBzeW50YXguCiAKIFRoZSB3b3JkICJjb3JvdXRpbmUiLCBsaWtlIHRoZSB3b3JkICJnZW5lcmF0b3IiLCBpcyB1c2VkIGZvciB0d28KIGRpZmZlcmVudCAodGhvdWdoIHJlbGF0ZWQpIGNvbmNlcHRzOgogCi0tIFRoZSBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBjb3JvdXRpbmUgKGEgZnVuY3Rpb24gZGVmaW5pdGlvbgorLSBUaGUgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEgY29yb3V0aW5lCisgIChhIGZ1bmN0aW9uIGRlZmluaXRpb24gdXNpbmcgOmtleXdvcmQ6YGFzeW5jIGRlZmAgb3IKICAgZGVjb3JhdGVkIHdpdGggYGBAYXN5bmNpby5jb3JvdXRpbmVgYCkuICBJZiBkaXNhbWJpZ3VhdGlvbiBpcyBuZWVkZWQKICAgd2Ugd2lsbCBjYWxsIHRoaXMgYSAqY29yb3V0aW5lIGZ1bmN0aW9uKiAoOmZ1bmM6YGlzY29yb3V0aW5lZnVuY3Rpb25gCiAgIHJldHVybnMgYGBUcnVlYGApLgpAQCAtMzAsMjkgKzM2LDMwIEBACiAKIFRoaW5ncyBhIGNvcm91dGluZSBjYW4gZG86CiAKLS0gYGByZXN1bHQgPSB5aWVsZCBmcm9tIGZ1dHVyZWBgIC0tIHN1c3BlbmRzIHRoZSBjb3JvdXRpbmUgdW50aWwgdGhlCistIGBgcmVzdWx0ID0gYXdhaXQgZnV0dXJlYGAgb3IgYGByZXN1bHQgPSB5aWVsZCBmcm9tIGZ1dHVyZWBgIC0tCisgIHN1c3BlbmRzIHRoZSBjb3JvdXRpbmUgdW50aWwgdGhlCiAgIGZ1dHVyZSBpcyBkb25lLCB0aGVuIHJldHVybnMgdGhlIGZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2VzIGFuCiAgIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBiZSBwcm9wYWdhdGVkLiAgKElmIHRoZSBmdXR1cmUgaXMgY2FuY2VsbGVkLAogICBpdCB3aWxsIHJhaXNlIGEgYGBDYW5jZWxsZWRFcnJvcmBgIGV4Y2VwdGlvbi4pICBOb3RlIHRoYXQgdGFza3MgYXJlCiAgIGZ1dHVyZXMsIGFuZCBldmVyeXRoaW5nIHNhaWQgYWJvdXQgZnV0dXJlcyBhbHNvIGFwcGxpZXMgdG8gdGFza3MuCiAKLS0gYGByZXN1bHQgPSB5aWVsZCBmcm9tIGNvcm91dGluZWBgIC0tIHdhaXQgZm9yIGFub3RoZXIgY29yb3V0aW5lIHRvCistIGBgcmVzdWx0ID0gYXdhaXQgY29yb3V0aW5lYGAgb3IgYGByZXN1bHQgPSB5aWVsZCBmcm9tIGNvcm91dGluZWBgIC0tCisgIHdhaXQgZm9yIGFub3RoZXIgY29yb3V0aW5lIHRvCiAgIHByb2R1Y2UgYSByZXN1bHQgKG9yIHJhaXNlIGFuIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBiZSBwcm9wYWdhdGVkKS4KICAgVGhlIGBgY29yb3V0aW5lYGAgZXhwcmVzc2lvbiBtdXN0IGJlIGEgKmNhbGwqIHRvIGFub3RoZXIgY29yb3V0aW5lLgogCiAtIGBgcmV0dXJuIGV4cHJlc3Npb25gYCAtLSBwcm9kdWNlIGEgcmVzdWx0IHRvIHRoZSBjb3JvdXRpbmUgdGhhdCBpcwotICB3YWl0aW5nIGZvciB0aGlzIG9uZSB1c2luZyBgYHlpZWxkIGZyb21gYC4KKyAgd2FpdGluZyBmb3IgdGhpcyBvbmUgdXNpbmcgOmtleXdvcmQ6YGF3YWl0YCBvciBgYHlpZWxkIGZyb21gYC4KIAogLSBgYHJhaXNlIGV4Y2VwdGlvbmBgIC0tIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiB0aGUgY29yb3V0aW5lIHRoYXQgaXMKLSAgd2FpdGluZyBmb3IgdGhpcyBvbmUgdXNpbmcgYGB5aWVsZCBmcm9tYGAuCisgIHdhaXRpbmcgZm9yIHRoaXMgb25lIHVzaW5nIDprZXl3b3JkOmBhd2FpdGAgb3IgYGB5aWVsZCBmcm9tYGAuCiAKLUNhbGxpbmcgYSBjb3JvdXRpbmUgZG9lcyBub3Qgc3RhcnQgaXRzIGNvZGUgcnVubmluZyAtLSBpdCBpcyBqdXN0IGEKLWdlbmVyYXRvciwgYW5kIHRoZSBjb3JvdXRpbmUgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBjYWxsIGlzIHJlYWxseSBhCi1nZW5lcmF0b3Igb2JqZWN0LCB3aGljaCBkb2Vzbid0IGRvIGFueXRoaW5nIHVudGlsIHlvdSBpdGVyYXRlIG92ZXIgaXQuCi1JbiB0aGUgY2FzZSBvZiBhIGNvcm91dGluZSBvYmplY3QsIHRoZXJlIGFyZSB0d28gYmFzaWMgd2F5cyB0byBzdGFydAotaXQgcnVubmluZzogY2FsbCBgYHlpZWxkIGZyb20gY29yb3V0aW5lYGAgZnJvbSBhbm90aGVyIGNvcm91dGluZQorQ2FsbGluZyBhIGNvcm91dGluZSBkb2VzIG5vdCBzdGFydCBpdHMgY29kZSBydW5uaW5nIC0tCit0aGUgY29yb3V0aW5lIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY2FsbCBkb2Vzbid0IGRvIGFueXRoaW5nIHVudGlsIHlvdQorc2NoZWR1bGUgaXRzIGV4ZWN1dGlvbi4gIFRoZXJlIGFyZSB0d28gYmFzaWMgd2F5cyB0byBzdGFydCBpdCBydW5uaW5nOgorY2FsbCBgYGF3YWl0IGNvcm91dGluZWBgIG9yIGBgeWllbGQgZnJvbSBjb3JvdXRpbmVgYCBmcm9tIGFub3RoZXIgY29yb3V0aW5lCiAoYXNzdW1pbmcgdGhlIG90aGVyIGNvcm91dGluZSBpcyBhbHJlYWR5IHJ1bm5pbmchKSwgb3Igc2NoZWR1bGUgaXRzIGV4ZWN1dGlvbgotdXNpbmcgdGhlIDpmdW5jOmBhc3luY2AgZnVuY3Rpb24gb3IgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYAordXNpbmcgdGhlIDpmdW5jOmBlbnN1cmVfZnV0dXJlYCBmdW5jdGlvbiBvciB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3Rhc2tgCiBtZXRob2QuCiAKIApAQCAtNjAsOSArNjcsMTUgQEAKIAogLi4gZGVjb3JhdG9yOjogY29yb3V0aW5lCiAKLSAgICBEZWNvcmF0b3IgdG8gbWFyayBjb3JvdXRpbmVzLgorICAgIERlY29yYXRvciB0byBtYXJrIGdlbmVyYXRvci1iYXNlZCBjb3JvdXRpbmVzLiAgVGhpcyBlbmFibGVzCisgICAgdGhlIGdlbmVyYXRvciB1c2UgOmtleXdvcmQ6YCF5aWVsZCBmcm9tYCB0byBjYWxsIDprZXl3b3JkOmBhc3luYworICAgIGRlZmAgY29yb3V0aW5lcywgYW5kIGFsc28gZW5hYmxlcyB0aGUgZ2VuZXJhdG9yIHRvIGJlIGNhbGxlZCBieQorICAgIDprZXl3b3JkOmBhc3luYyBkZWZgIGNvcm91dGluZXMsIGZvciBpbnN0YW5jZSB1c2luZyBhbgorICAgIDprZXl3b3JkOmBhd2FpdGAgZXhwcmVzc2lvbi4KIAotICAgIElmIHRoZSBjb3JvdXRpbmUgaXMgbm90IHlpZWxkZWQgZnJvbSBiZWZvcmUgaXQgaXMgZGVzdHJveWVkLCBhbiBlcnJvcgorICAgIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGVjb3JhdGUgOmtleXdvcmQ6YGFzeW5jIGRlZmAgY29yb3V0aW5lcyB0aGVtc2VsdmVzLgorCisgICAgSWYgdGhlIGdlbmVyYXRvciBpcyBub3QgeWllbGRlZCBmcm9tIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQsIGFuIGVycm9yCiAgICAgbWVzc2FnZSBpcyBsb2dnZWQuIFNlZSA6cmVmOmBEZXRlY3QgY29yb3V0aW5lcyBuZXZlciBzY2hlZHVsZWQKICAgICA8YXN5bmNpby1jb3JvdXRpbmUtbm90LXNjaGVkdWxlZD5gLgogCkBAIC03Miw3ICs4NSw3IEBACiAgICAgZXZlbiBpZiB0aGV5IGFyZSBwbGFpbiBQeXRob24gZnVuY3Rpb25zIHJldHVybmluZyBhIDpjbGFzczpgRnV0dXJlYC4KICAgICBUaGlzIGlzIGludGVudGlvbmFsIHRvIGhhdmUgYSBmcmVlZG9tIG9mIHR3ZWFraW5nIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgZnV0dXJlLiBJZiBzdWNoIGEgZnVuY3Rpb24gaXMgbmVlZGVkIHRvIGJlCi0gICAgdXNlZCBpbiBhIGNhbGxiYWNrLXN0eWxlIGNvZGUsIHdyYXAgaXRzIHJlc3VsdCB3aXRoIDpmdW5jOmBhc3luY2AuCisgICAgdXNlZCBpbiBhIGNhbGxiYWNrLXN0eWxlIGNvZGUsIHdyYXAgaXRzIHJlc3VsdCB3aXRoIDpmdW5jOmBlbnN1cmVfZnV0dXJlYC4KIAogCiAuLiBfYXN5bmNpby1oZWxsby13b3JsZC1jb3JvdXRpbmU6CkBAIC04NCw4ICs5Nyw3IEBACiAKICAgICBpbXBvcnQgYXN5bmNpbwogCi0gICAgQGFzeW5jaW8uY29yb3V0aW5lCi0gICAgZGVmIGhlbGxvX3dvcmxkKCk6CisgICAgYXN5bmMgZGVmIGhlbGxvX3dvcmxkKCk6CiAgICAgICAgIHByaW50KCJIZWxsbyBXb3JsZCEiKQogCiAgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQpAQCAtMTExLDYgKzEyMywyMSBAQAogICAgIGltcG9ydCBhc3luY2lvCiAgICAgaW1wb3J0IGRhdGV0aW1lCiAKKyAgICBhc3luYyBkZWYgZGlzcGxheV9kYXRlKGxvb3ApOgorICAgICAgICBlbmRfdGltZSA9IGxvb3AudGltZSgpICsgNS4wCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBwcmludChkYXRldGltZS5kYXRldGltZS5ub3coKSkKKyAgICAgICAgICAgIGlmIChsb29wLnRpbWUoKSArIDEuMCkgPj0gZW5kX3RpbWU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMSkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICAjIEJsb2NraW5nIGNhbGwgd2hpY2ggcmV0dXJucyB3aGVuIHRoZSBkaXNwbGF5X2RhdGUoKSBjb3JvdXRpbmUgaXMgZG9uZQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGRpc3BsYXlfZGF0ZShsb29wKSkKKyAgICBsb29wLmNsb3NlKCkKKworVGhlIHNhbWUgY29yb3V0aW5lIGltcGxlbWVudGVkIHVzaW5nIGEgZ2VuZXJhdG9yOjoKKwogICAgIEBhc3luY2lvLmNvcm91dGluZQogICAgIGRlZiBkaXNwbGF5X2RhdGUobG9vcCk6CiAgICAgICAgIGVuZF90aW1lID0gbG9vcC50aW1lKCkgKyA1LjAKQEAgLTEyMCwxMSArMTQ3LDYgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEpCiAKLSAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCi0gICAgIyBCbG9ja2luZyBjYWxsIHdoaWNoIHJldHVybnMgd2hlbiB0aGUgZGlzcGxheV9kYXRlKCkgY29yb3V0aW5lIGlzIGRvbmUKLSAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShkaXNwbGF5X2RhdGUobG9vcCkpCi0gICAgbG9vcC5jbG9zZSgpCi0KIC4uIHNlZWFsc286OgogCiAgICBUaGUgOnJlZjpgZGlzcGxheSB0aGUgY3VycmVudCBkYXRlIHdpdGggY2FsbF9sYXRlcigpCkBAIC0xMzksMTUgKzE2MSwxMyBAQAogCiAgICAgaW1wb3J0IGFzeW5jaW8KIAotICAgIEBhc3luY2lvLmNvcm91dGluZQotICAgIGRlZiBjb21wdXRlKHgsIHkpOgorICAgIGFzeW5jIGRlZiBjb21wdXRlKHgsIHkpOgogICAgICAgICBwcmludCgiQ29tcHV0ZSAlcyArICVzIC4uLiIgJSAoeCwgeSkpCi0gICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxLjApCisgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMS4wKQogICAgICAgICByZXR1cm4geCArIHkKIAotICAgIEBhc3luY2lvLmNvcm91dGluZQotICAgIGRlZiBwcmludF9zdW0oeCwgeSk6Ci0gICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gY29tcHV0ZSh4LCB5KQorICAgIGFzeW5jIGRlZiBwcmludF9zdW0oeCwgeSk6CisgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbXB1dGUoeCwgeSkKICAgICAgICAgcHJpbnQoIiVzICsgJXMgPSAlcyIgJSAoeCwgeSwgcmVzdWx0KSkKIAogICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKQEAgLTM3NSw3ICszOTUsNyBAQAogICAgPGNvcm91dGluZT5gIGRpZCBub3QgY29tcGxldGUuIEl0IGlzIHByb2JhYmx5IGEgYnVnIGFuZCBhIHdhcm5pbmcgaXMKICAgIGxvZ2dlZDogc2VlIDpyZWY6YFBlbmRpbmcgdGFzayBkZXN0cm95ZWQgPGFzeW5jaW8tcGVuZGluZy10YXNrLWRlc3Ryb3llZD5gLgogCi0gICBEb24ndCBkaXJlY3RseSBjcmVhdGUgOmNsYXNzOmBUYXNrYCBpbnN0YW5jZXM6IHVzZSB0aGUgOmZ1bmM6YGFzeW5jYAorICAgRG9uJ3QgZGlyZWN0bHkgY3JlYXRlIDpjbGFzczpgVGFza2AgaW5zdGFuY2VzOiB1c2UgdGhlIDpmdW5jOmBlbnN1cmVfZnV0dXJlYAogICAgZnVuY3Rpb24gb3IgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYCBtZXRob2QuCiAKICAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCkBAIC00OTAsNyArNTEwLDcgQEAKIAogLi4gbm90ZTo6CiAKLSAgIEluIHRoZSBmdW5jdGlvbnMgYmVsb3csIHRoZSBvcHRpb25hbCAqbG9vcCogYXJndW1lbnQgYWxsb3dzIHRvIGV4cGxpY2l0bHkgc2V0CisgICBJbiB0aGUgZnVuY3Rpb25zIGJlbG93LCB0aGUgb3B0aW9uYWwgKmxvb3AqIGFyZ3VtZW50IGFsbG93cyBleHBsaWNpdGx5IHNldHRpbmcKICAgIHRoZSBldmVudCBsb29wIG9iamVjdCB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nIHRhc2sgb3IgY29yb3V0aW5lLiAgSWYgaXQncwogICAgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBldmVudCBsb29wIGlzIHVzZWQuCiAKQEAgLTUyMSw2ICs1NDEsOSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNAogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNS4xCisgICAgICBUaGUgZnVuY3Rpb24gYWNjZXB0cyBhbnkgOnRlcm06YGF3YWl0YWJsZWAgb2JqZWN0LgorCiAgICAuLiBzZWVhbHNvOjoKIAogICAgICAgVGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYCBtZXRob2QuCkBAIC01NTIsMTIgKzU3NSwxNCBAQAogCiAuLiBmdW5jdGlvbjo6IGlzY29yb3V0aW5lKG9iaikKIAotICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpvYmoqIGlzIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgKm9iaiogaXMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YCwKKyAgIHdoaWNoIG1heSBiZSBiYXNlZCBvbiBhIGdlbmVyYXRvciBvciBhbiA6a2V5d29yZDpgYXN5bmMgZGVmYCBjb3JvdXRpbmUuCiAKLS4uIGZ1bmN0aW9uOjogaXNjb3JvdXRpbmVmdW5jdGlvbihvYmopCisuLiBmdW5jdGlvbjo6IGlzY29yb3V0aW5lZnVuY3Rpb24oZnVuYykKIAotICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpmdW5jKiBpcyBhIGRlY29yYXRlZCA6cmVmOmBjb3JvdXRpbmUgZnVuY3Rpb24KLSAgIDxjb3JvdXRpbmU+YC4KKyAgIFJldHVybiBgYFRydWVgYCBpZiAqZnVuYyogaXMgZGV0ZXJtaW5lZCB0byBiZSBhIDpyZWY6YGNvcm91dGluZSBmdW5jdGlvbgorICAgPGNvcm91dGluZT5gLCB3aGljaCBtYXkgYmUgYSBkZWNvcmF0ZWQgZ2VuZXJhdG9yIGZ1bmN0aW9uIG9yIGFuCisgICA6a2V5d29yZDpgYXN5bmMgZGVmYCBmdW5jdGlvbi4KIAogLi4gZnVuY3Rpb246OiBydW5fY29yb3V0aW5lX3RocmVhZHNhZmUoY29ybywgbG9vcCkKIApAQCAtNTkzLDEwICs2MTgsMTEgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIFVubGlrZSB0aGUgZnVuY3Rpb25zIGFib3ZlLCA6ZnVuYzpgcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlYCByZXF1aXJlcyB0aGUKLSAgICAgICpsb29wKiBhcmd1bWVudCB0byBiZSBwYXNzZWQgZXhwbGljaXRlbHkuCisgICAgICBVbmxpa2Ugb3RoZXIgZnVuY3Rpb25zIGZyb20gdGhlIG1vZHVsZSwKKyAgICAgIDpmdW5jOmBydW5fY29yb3V0aW5lX3RocmVhZHNhZmVgIHJlcXVpcmVzIHRoZSAqbG9vcCogYXJndW1lbnQgdG8KKyAgICAgIGJlIHBhc3NlZCBleHBsaWNpdGx5LgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNCwgMy41LjEKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNS4xCiAKIC4uIGNvcm91dGluZWZ1bmN0aW9uOjogc2xlZXAoZGVsYXksIHJlc3VsdD1Ob25lLCBcKiwgbG9vcD1Ob25lKQogCkBAIC02MzYsMTggKzY2Miw2IEBACiAgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgogICAgICAgICAgICByZXMgPSBOb25lCiAKLS4uIGZ1bmN0aW9uOjogdGltZW91dCh0aW1lb3V0LCBcKiwgbG9vcD1Ob25lKQotCi0gICBSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCBjYW5jZWxzIGEgYmxvY2sgb24gKnRpbWVvdXQqIGV4cGlyaW5nOjoKLQotICAgICAgIHdpdGggdGltZW91dCgxLjUpOgotICAgICAgICAgICB5aWVsZCBmcm9tIGlubmVyKCkKLQotICAgMS4gSWYgYGBpbm5lcigpYGAgaXMgZXhlY3V0ZWQgZmFzdGVyIHRoYW4gaW4gYGAxLjVgYCBzZWNvbmRzCi0gICAgICBub3RoaW5nIGhhcHBlbnMuCi0gICAyLiBPdGhlcndpc2UgYGBpbm5lcigpYGAgaXMgY2FuY2VsbGVkIGludGVybmFsbHkgYnV0Ci0gICAgICA6ZXhjOmBhc3luY2lvLlRpbWVvdXRFcnJvcmAgaXMgcmFpc2VkIG91dHNpZGUgb2YKLSAgICAgIGNvbnRleHQgbWFuYWdlciBzY29wZS4KIAogLi4gY29yb3V0aW5lZnVuY3Rpb246OiB3YWl0KGZ1dHVyZXMsIFwqLCBsb29wPU5vbmUsIHRpbWVvdXQ9Tm9uZSxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3doZW49QUxMX0NPTVBMRVRFRCkKQEAgLTcxNSw1ICs3MjksMyBAQAogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4zCiAgICAgICBJZiB0aGUgd2FpdCBpcyBjYW5jZWxsZWQsIHRoZSBmdXR1cmUgKmZ1dCogaXMgbm93IGFsc28gY2FuY2VsbGVkLgotCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8ucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QKaW5kZXggOWI0ZDY1ZS4uZjc2NGM2OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QKQEAgLTQsNiArNCwxMCBAQAogLi4gbW9kdWxlOjogYXN5bmNpbwogICAgOnN5bm9wc2lzOiBBc3luY2hyb25vdXMgSS9PLCBldmVudCBsb29wLCBjb3JvdXRpbmVzIGFuZCB0YXNrcy4KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2FzeW5jaW8vYAorCiAuLiBub3RlOjoKIAogICAgVGhlIGFzeW5jaW8gcGFja2FnZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCkBAIC0xMSwxMCArMTUsNiBAQAogICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBtb2R1bGUpIG1heSBvY2N1ciBpZiBkZWVtZWQKICAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgogCi0uLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKLQotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvYXN5bmNpby9gCi0KIC0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGluZnJhc3RydWN0dXJlIGZvciB3cml0aW5nIHNpbmdsZS10aHJlYWRlZCBjb25jdXJyZW50CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKaW5kZXggOTE3ZDA0NC4uNjEwNjFiZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdApAQCAtNCw2ICs0LDcgQEAKIC4uIG1vZHVsZTo6IGFzeW5jb3JlCiAgICA6c3lub3BzaXM6IEEgYmFzZSBjbGFzcyBmb3IgZGV2ZWxvcGluZyBhc3luY2hyb25vdXMgc29ja2V0IGhhbmRsaW5nCiAgICAgICAgICAgICAgIHNlcnZpY2VzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBTYW0gUnVzaGluZyA8cnVzaGluZ0BuaWdodG1hcmUuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IENocmlzdG9waGVyIFBldHJpbGxpIDxwZXRyaWxsaUBhbWJlci5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogU3RldmUgSG9sZGVuIDxzaG9sZGVuQGhvbGRlbndlYi5jb20+CkBAIC0zMTUsOCArMzE2LDggQEAKICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlcltzZW50Ol0KIAogCi0gICAgY2xpZW50ID0gSFRUUENsaWVudCgnd3d3LnB5dGhvbi5vcmcnLCAnLycpCi0gICAgYXN5bmNvcmUubG9vcCgpCisgICBjbGllbnQgPSBIVFRQQ2xpZW50KCd3d3cucHl0aG9uLm9yZycsICcvJykKKyAgIGFzeW5jb3JlLmxvb3AoKQogCiAuLiBfYXN5bmNvcmUtZXhhbXBsZS0yOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hdGV4aXQucnN0IGIvRG9jL2xpYnJhcnkvYXRleGl0LnJzdAppbmRleCBkYmRkODFlLi4xZDg0ZDQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hdGV4aXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2F0ZXhpdC5yc3QKQEAgLTMsOSArMywxMSBAQAogCiAuLiBtb2R1bGU6OiBhdGV4aXQKICAgIDpzeW5vcHNpczogUmVnaXN0ZXIgYW5kIGV4ZWN1dGUgY2xlYW51cCBmdW5jdGlvbnMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IFNraXAgTW9udGFuYXJvIDxza2lwQHBvYm94LmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBTa2lwIE1vbnRhbmFybyA8c2tpcEBwb2JveC5jb20+CiAKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBhdGV4aXRgIG1vZHVsZSBkZWZpbmVzIGZ1bmN0aW9ucyB0byByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBjbGVhbnVwCiBmdW5jdGlvbnMuICBGdW5jdGlvbnMgdGh1cyByZWdpc3RlcmVkIGFyZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIHVwb24gbm9ybWFsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdCBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CmluZGV4IGNlMTI3YWEuLmJhZDlkYTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CisrKyBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CkBAIC00LDEwICs0LDExIEBACiAuLiBtb2R1bGU6OiBhdWRpb29wCiAgICA6c3lub3BzaXM6IE1hbmlwdWxhdGUgcmF3IGF1ZGlvIGRhdGEuCiAKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBhdWRpb29wYCBtb2R1bGUgY29udGFpbnMgc29tZSB1c2VmdWwgb3BlcmF0aW9ucyBvbiBzb3VuZCBmcmFnbWVudHMuCiBJdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2LCAyNAotb3IgMzIgYml0cyB3aWRlLCBzdG9yZWQgaW4gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlCitvciAzMiBiaXRzIHdpZGUsIHN0b3JlZCBpbiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUKIGludGVnZXJzLCB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZS4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKQEAgLTI3Niw2ICsyNzcsNiBAQAogICAgICAgICMgICAgICAgICAgICAgIG91dF90ZXN0KQogICAgICAgIHByZWZpbGwgPSAnXDAnKihwb3MraXBvcykqMgogICAgICAgIHBvc3RmaWxsID0gJ1wwJyoobGVuKGlucHV0ZGF0YSktbGVuKHByZWZpbGwpLWxlbihvdXRwdXRkYXRhKSkKLSAgICAgICBvdXRwdXRkYXRhID0gcHJlZmlsbCArIGF1ZGlvb3AubXVsKG91dHB1dGRhdGEsMiwtZmFjdG9yKSArIHBvc3RmaWxsCisgICAgICAgb3V0cHV0ZGF0YSA9IHByZWZpbGwgKyBhdWRpb29wLm11bChvdXRwdXRkYXRhLCAyLCAtZmFjdG9yKSArIHBvc3RmaWxsCiAgICAgICAgcmV0dXJuIGF1ZGlvb3AuYWRkKGlucHV0ZGF0YSwgb3V0cHV0ZGF0YSwgMikKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdCBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKaW5kZXggZWJhNGIzNi4uMDgwZDlkNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CkBAIC01LDExICs1LDE0IEBACiAgICA6c3lub3BzaXM6IFJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzOwogICAgICAgICAgICAgICBCYXNlODUgYW5kIEFzY2lpODUKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvYmFzZTY0LnB5YAogCiAuLiBpbmRleDo6CiAgICBwYWlyOiBiYXNlNjQ7IGVuY29kaW5nCiAgICBzaW5nbGU6IE1JTUU7IGJhc2U2NCBlbmNvZGluZwogCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGVuY29kaW5nIGJpbmFyeSBkYXRhIHRvIHByaW50YWJsZQogQVNDSUkgY2hhcmFjdGVycyBhbmQgZGVjb2Rpbmcgc3VjaCBlbmNvZGluZ3MgYmFjayB0byBiaW5hcnkgZGF0YS4KIEl0IHByb3ZpZGVzIGVuY29kaW5nIGFuZCBkZWNvZGluZyBmdW5jdGlvbnMgZm9yIHRoZSBlbmNvZGluZ3Mgc3BlY2lmaWVkIGluCkBAIC0yMSw4OCArMjQsMTAzIEBACiBQT1NUIHJlcXVlc3QuICBUaGUgZW5jb2RpbmcgYWxnb3JpdGhtIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUKIDpwcm9ncmFtOmB1dWVuY29kZWAgcHJvZ3JhbS4KIAotVGhlcmUgYXJlIHR3byA6cmZjOmAzNTQ4YCBpbnRlcmZhY2VzIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlLiAgVGhlIG1vZGVybgotaW50ZXJmYWNlIHN1cHBvcnRzIGVuY29kaW5nIGFuZCBkZWNvZGluZyBBU0NJSSBieXRlIHN0cmluZyBvYmplY3RzIHVzaW5nIGFsbAotdGhyZWUgOnJmYzpgMzU0OGAgZGVmaW5lZCBhbHBoYWJldHMgKG5vcm1hbCwgVVJMLXNhZmUsIGFuZCBmaWxlc3lzdGVtLXNhZmUpLgotQWRkaXRpb25hbGx5LCB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mIHRoZSBtb2Rlcm4gaW50ZXJmYWNlIGFsc28gYWNjZXB0Ci1Vbmljb2RlIHN0cmluZ3MgY29udGFpbmluZyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuIFRoZSBsZWdhY3kgaW50ZXJmYWNlIHByb3ZpZGVzCi1mb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHRvIGFuZCBmcm9tIGZpbGUtbGlrZSBvYmplY3RzIGFzIHdlbGwgYXMgYnl0ZQotc3RyaW5ncywgYnV0IG9ubHkgdXNpbmcgdGhlIEJhc2U2NCBzdGFuZGFyZCBhbHBoYWJldC4KK1RoZXJlIGFyZSB0d28gaW50ZXJmYWNlcyBwcm92aWRlZCBieSB0aGlzIG1vZHVsZS4gIFRoZSBtb2Rlcm4gaW50ZXJmYWNlCitzdXBwb3J0cyBlbmNvZGluZyA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gIHRvIEFTQ0lJCis6Y2xhc3M6YGJ5dGVzYCwgYW5kIGRlY29kaW5nIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMgPGJ5dGVzLWxpa2Ugb2JqZWN0PmAgb3IKK3N0cmluZ3MgY29udGFpbmluZyBBU0NJSSB0byA6Y2xhc3M6YGJ5dGVzYC4gIEJvdGggYmFzZS02NCBhbHBoYWJldHMKK2RlZmluZWQgaW4gOnJmYzpgMzU0OGAgKG5vcm1hbCwgYW5kIFVSTC0gYW5kIGZpbGVzeXN0ZW0tc2FmZSkgYXJlIHN1cHBvcnRlZC4KKworVGhlIGxlZ2FjeSBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBkZWNvZGluZyBmcm9tIHN0cmluZ3MsIGJ1dCBpdCBkb2VzCitwcm92aWRlIGZ1bmN0aW9ucyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHRvIGFuZCBmcm9tIDp0ZXJtOmBmaWxlIG9iamVjdHMKKzxmaWxlIG9iamVjdD5gLiAgSXQgb25seSBzdXBwb3J0cyB0aGUgQmFzZTY0IHN0YW5kYXJkIGFscGhhYmV0LCBhbmQgaXQgYWRkcworbmV3bGluZXMgZXZlcnkgNzYgY2hhcmFjdGVycyBhcyBwZXIgOnJmYzpgMjA0NWAuICBOb3RlIHRoYXQgaWYgeW91IGFyZSBsb29raW5nCitmb3IgOnJmYzpgMjA0NWAgc3VwcG9ydCB5b3UgcHJvYmFibHkgd2FudCB0byBiZSBsb29raW5nIGF0IHRoZSA6bW9kOmBlbWFpbGAKK3BhY2thZ2UgaW5zdGVhZC4KKwogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgQVNDSUktb25seSBVbmljb2RlIHN0cmluZ3MgYXJlIG5vdyBhY2NlcHRlZCBieSB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mCiAgICB0aGUgbW9kZXJuIGludGVyZmFjZS4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKLSAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQgYnkgYWxsCisgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCBhcmUgbm93IGFjY2VwdGVkIGJ5IGFsbAogICAgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZS4gIEFzY2lpODUvQmFzZTg1IHN1cHBvcnQgYWRkZWQuCiAKIFRoZSBtb2Rlcm4gaW50ZXJmYWNlIHByb3ZpZGVzOgogCiAuLiBmdW5jdGlvbjo6IGI2NGVuY29kZShzLCBhbHRjaGFycz1Ob25lKQogCi0gICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBCYXNlNjQuCisgICBFbmNvZGUgdGhlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgKnMqIHVzaW5nIEJhc2U2NCBhbmQgcmV0dXJuIHRoZSBlbmNvZGVkCisgICA6Y2xhc3M6YGJ5dGVzYC4KIAotICAgKnMqIGlzIHRoZSBzdHJpbmcgdG8gZW5jb2RlLiAgT3B0aW9uYWwgKmFsdGNoYXJzKiBtdXN0IGJlIGEgc3RyaW5nIG9mIGF0IGxlYXN0CisgICBPcHRpb25hbCAqYWx0Y2hhcnMqIG11c3QgYmUgYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9mIGF0IGxlYXN0CiAgICBsZW5ndGggMiAoYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkKSB3aGljaCBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUKICAgIGFscGhhYmV0IGZvciB0aGUgYGArYGAgYW5kIGBgL2BgIGNoYXJhY3RlcnMuICBUaGlzIGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBlLmcuCiAgICBnZW5lcmF0ZSBVUkwgb3IgZmlsZXN5c3RlbSBzYWZlIEJhc2U2NCBzdHJpbmdzLiAgVGhlIGRlZmF1bHQgaXMgYGBOb25lYGAsIGZvcgogICAgd2hpY2ggdGhlIHN0YW5kYXJkIEJhc2U2NCBhbHBoYWJldCBpcyB1c2VkLgogCi0gICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KLQogCiAuLiBmdW5jdGlvbjo6IGI2NGRlY29kZShzLCBhbHRjaGFycz1Ob25lLCB2YWxpZGF0ZT1GYWxzZSkKIAotICAgRGVjb2RlIGEgQmFzZTY0IGVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICBEZWNvZGUgdGhlIEJhc2U2NCBlbmNvZGVkIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgQVNDSUkgc3RyaW5nCisgICAqcyogYW5kIHJldHVybiB0aGUgZGVjb2RlZCA6Y2xhc3M6YGJ5dGVzYC4KIAotICAgKnMqIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuICBPcHRpb25hbCAqYWx0Y2hhcnMqIG11c3QgYmUgYSBzdHJpbmcgb2YKKyAgIE9wdGlvbmFsICphbHRjaGFycyogbXVzdCBiZSBhIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgQVNDSUkgc3RyaW5nIG9mCiAgICBhdCBsZWFzdCBsZW5ndGggMiAoYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGFyZSBpZ25vcmVkKSB3aGljaCBzcGVjaWZpZXMgdGhlCiAgICBhbHRlcm5hdGl2ZSBhbHBoYWJldCB1c2VkIGluc3RlYWQgb2YgdGhlIGBgK2BgIGFuZCBgYC9gYCBjaGFyYWN0ZXJzLgogCi0gICBUaGUgZGVjb2RlZCBzdHJpbmcgaXMgcmV0dXJuZWQuICBBIDpleGM6YGJpbmFzY2lpLkVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkCisgICBBIDpleGM6YGJpbmFzY2lpLkVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkCiAgICBpZiAqcyogaXMgaW5jb3JyZWN0bHkgcGFkZGVkLgogCi0gICBJZiAqdmFsaWRhdGUqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpLCBub24tYmFzZTY0LWFscGhhYmV0IGNoYXJhY3RlcnMgYXJlCisgICBJZiAqdmFsaWRhdGUqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpLCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5laXRoZXIKKyAgIGluIHRoZSBub3JtYWwgYmFzZS02NCBhbHBoYWJldCBub3IgdGhlIGFsdGVybmF0aXZlIGFscGhhYmV0IGFyZQogICAgZGlzY2FyZGVkIHByaW9yIHRvIHRoZSBwYWRkaW5nIGNoZWNrLiAgSWYgKnZhbGlkYXRlKiBpcyBgYFRydWVgYCwKLSAgIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBpbiB0aGUgaW5wdXQgcmVzdWx0IGluIGEKKyAgIHRoZXNlIG5vbi1hbHBoYWJldCBjaGFyYWN0ZXJzIGluIHRoZSBpbnB1dCByZXN1bHQgaW4gYQogICAgOmV4YzpgYmluYXNjaWkuRXJyb3JgLgogCiAKIC4uIGZ1bmN0aW9uOjogc3RhbmRhcmRfYjY0ZW5jb2RlKHMpCiAKLSAgIEVuY29kZSBieXRlIHN0cmluZyAqcyogdXNpbmcgdGhlIHN0YW5kYXJkIEJhc2U2NCBhbHBoYWJldC4KKyAgIEVuY29kZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpzKiB1c2luZyB0aGUgc3RhbmRhcmQgQmFzZTY0IGFscGhhYmV0CisgICBhbmQgcmV0dXJuIHRoZSBlbmNvZGVkIDpjbGFzczpgYnl0ZXNgLgogCiAKIC4uIGZ1bmN0aW9uOjogc3RhbmRhcmRfYjY0ZGVjb2RlKHMpCiAKLSAgIERlY29kZSBieXRlIHN0cmluZyAqcyogdXNpbmcgdGhlIHN0YW5kYXJkIEJhc2U2NCBhbHBoYWJldC4KKyAgIERlY29kZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIEFTQ0lJIHN0cmluZyAqcyogdXNpbmcgdGhlIHN0YW5kYXJkCisgICBCYXNlNjQgYWxwaGFiZXQgYW5kIHJldHVybiB0aGUgZGVjb2RlZCA6Y2xhc3M6YGJ5dGVzYC4KIAogCiAuLiBmdW5jdGlvbjo6IHVybHNhZmVfYjY0ZW5jb2RlKHMpCiAKLSAgIEVuY29kZSBieXRlIHN0cmluZyAqcyogdXNpbmcgYSBVUkwtc2FmZSBhbHBoYWJldCwgd2hpY2ggc3Vic3RpdHV0ZXMgYGAtYGAgaW5zdGVhZCBvZgotICAgYGArYGAgYW5kIGBgX2BgIGluc3RlYWQgb2YgYGAvYGAgaW4gdGhlIHN0YW5kYXJkIEJhc2U2NCBhbHBoYWJldC4gIFRoZSByZXN1bHQKKyAgIEVuY29kZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpzKiB1c2luZyB0aGUKKyAgIFVSTC0gYW5kIGZpbGVzeXN0ZW0tc2FmZSBhbHBoYWJldCwgd2hpY2gKKyAgIHN1YnN0aXR1dGVzIGBgLWBgIGluc3RlYWQgb2YgYGArYGAgYW5kIGBgX2BgIGluc3RlYWQgb2YgYGAvYGAgaW4gdGhlCisgICBzdGFuZGFyZCBCYXNlNjQgYWxwaGFiZXQsIGFuZCByZXR1cm4gdGhlIGVuY29kZWQgOmNsYXNzOmBieXRlc2AuICBUaGUgcmVzdWx0CiAgICBjYW4gc3RpbGwgY29udGFpbiBgYD1gYC4KIAogCiAuLiBmdW5jdGlvbjo6IHVybHNhZmVfYjY0ZGVjb2RlKHMpCiAKLSAgIERlY29kZSBieXRlIHN0cmluZyAqcyogdXNpbmcgYSBVUkwtc2FmZSBhbHBoYWJldCwgd2hpY2ggc3Vic3RpdHV0ZXMgYGAtYGAgaW5zdGVhZCBvZgotICAgYGArYGAgYW5kIGBgX2BgIGluc3RlYWQgb2YgYGAvYGAgaW4gdGhlIHN0YW5kYXJkIEJhc2U2NCBhbHBoYWJldC4KKyAgIERlY29kZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIEFTQ0lJIHN0cmluZyAqcyoKKyAgIHVzaW5nIHRoZSBVUkwtIGFuZCBmaWxlc3lzdGVtLXNhZmUKKyAgIGFscGhhYmV0LCB3aGljaCBzdWJzdGl0dXRlcyBgYC1gYCBpbnN0ZWFkIG9mIGBgK2BgIGFuZCBgYF9gYCBpbnN0ZWFkIG9mCisgICBgYC9gYCBpbiB0aGUgc3RhbmRhcmQgQmFzZTY0IGFscGhhYmV0LCBhbmQgcmV0dXJuIHRoZSBkZWNvZGVkCisgICA6Y2xhc3M6YGJ5dGVzYC4KIAogCiAuLiBmdW5jdGlvbjo6IGIzMmVuY29kZShzKQogCi0gICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBCYXNlMzIuICAqcyogaXMgdGhlIHN0cmluZyB0byBlbmNvZGUuICBUaGUgZW5jb2RlZCBzdHJpbmcKLSAgIGlzIHJldHVybmVkLgorICAgRW5jb2RlIHRoZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpzKiB1c2luZyBCYXNlMzIgYW5kIHJldHVybiB0aGUKKyAgIGVuY29kZWQgOmNsYXNzOmBieXRlc2AuCiAKIAogLi4gZnVuY3Rpb246OiBiMzJkZWNvZGUocywgY2FzZWZvbGQ9RmFsc2UsIG1hcDAxPU5vbmUpCiAKLSAgIERlY29kZSBhIEJhc2UzMiBlbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgRGVjb2RlIHRoZSBCYXNlMzIgZW5jb2RlZCA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIEFTQ0lJIHN0cmluZyAqcyogYW5kCisgICByZXR1cm4gdGhlIGRlY29kZWQgOmNsYXNzOmBieXRlc2AuCiAKLSAgICpzKiBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZGVjb2RlLiAgT3B0aW9uYWwgKmNhc2Vmb2xkKiBpcyBhIGZsYWcgc3BlY2lmeWluZworICAgT3B0aW9uYWwgKmNhc2Vmb2xkKiBpcyBhIGZsYWcgc3BlY2lmeWluZwogICAgd2hldGhlciBhIGxvd2VyY2FzZSBhbHBoYWJldCBpcyBhY2NlcHRhYmxlIGFzIGlucHV0LiAgRm9yIHNlY3VyaXR5IHB1cnBvc2VzLAogICAgdGhlIGRlZmF1bHQgaXMgYGBGYWxzZWBgLgogCkBAIC0xMTMsNDYgKzEzMSw0NSBAQAogICAgZGlnaXQgMCBpcyBhbHdheXMgbWFwcGVkIHRvIHRoZSBsZXR0ZXIgTykuICBGb3Igc2VjdXJpdHkgcHVycG9zZXMgdGhlIGRlZmF1bHQgaXMKICAgIGBgTm9uZWBgLCBzbyB0aGF0IDAgYW5kIDEgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBpbnB1dC4KIAotICAgVGhlIGRlY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuICBBIDpleGM6YGJpbmFzY2lpLkVycm9yYCBpcyByYWlzZWQgaWYgKnMqIGlzCisgICBBIDpleGM6YGJpbmFzY2lpLkVycm9yYCBpcyByYWlzZWQgaWYgKnMqIGlzCiAgICBpbmNvcnJlY3RseSBwYWRkZWQgb3IgaWYgdGhlcmUgYXJlIG5vbi1hbHBoYWJldCBjaGFyYWN0ZXJzIHByZXNlbnQgaW4gdGhlCi0gICBzdHJpbmcuCisgICBpbnB1dC4KIAogCiAuLiBmdW5jdGlvbjo6IGIxNmVuY29kZShzKQogCi0gICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBCYXNlMTYuCi0KLSAgICpzKiBpcyB0aGUgc3RyaW5nIHRvIGVuY29kZS4gIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorICAgRW5jb2RlIHRoZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpzKiB1c2luZyBCYXNlMTYgYW5kIHJldHVybiB0aGUKKyAgIGVuY29kZWQgOmNsYXNzOmBieXRlc2AuCiAKIAogLi4gZnVuY3Rpb246OiBiMTZkZWNvZGUocywgY2FzZWZvbGQ9RmFsc2UpCiAKLSAgIERlY29kZSBhIEJhc2UxNiBlbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgRGVjb2RlIHRoZSBCYXNlMTYgZW5jb2RlZCA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIEFTQ0lJIHN0cmluZyAqcyogYW5kCisgICByZXR1cm4gdGhlIGRlY29kZWQgOmNsYXNzOmBieXRlc2AuCiAKLSAgICpzKiBpcyB0aGUgc3RyaW5nIHRvIGRlY29kZS4gIE9wdGlvbmFsICpjYXNlZm9sZCogaXMgYSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciBhCisgICBPcHRpb25hbCAqY2FzZWZvbGQqIGlzIGEgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgYQogICAgbG93ZXJjYXNlIGFscGhhYmV0IGlzIGFjY2VwdGFibGUgYXMgaW5wdXQuICBGb3Igc2VjdXJpdHkgcHVycG9zZXMsIHRoZSBkZWZhdWx0CiAgICBpcyBgYEZhbHNlYGAuCiAKLSAgIFRoZSBkZWNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLiAgQSA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZCBpZiAqcyogd2VyZQorICAgQSA6ZXhjOmBiaW5hc2NpaS5FcnJvcmAgaXMgcmFpc2VkIGlmICpzKiBpcwogICAgaW5jb3JyZWN0bHkgcGFkZGVkIG9yIGlmIHRoZXJlIGFyZSBub24tYWxwaGFiZXQgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZQotICAgc3RyaW5nLgorICAgaW5wdXQuCiAKIAotLi4gZnVuY3Rpb246OiBhODVlbmNvZGUocywgKiwgZm9sZHNwYWNlcz1GYWxzZSwgd3JhcGNvbD0wLCBwYWQ9RmFsc2UsIGFkb2JlPUZhbHNlKQorLi4gZnVuY3Rpb246OiBhODVlbmNvZGUoYiwgKiwgZm9sZHNwYWNlcz1GYWxzZSwgd3JhcGNvbD0wLCBwYWQ9RmFsc2UsIGFkb2JlPUZhbHNlKQogCi0gICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBBc2NpaTg1LgotCi0gICAqcyogaXMgdGhlIHN0cmluZyB0byBlbmNvZGUuIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorICAgRW5jb2RlIHRoZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpiKiB1c2luZyBBc2NpaTg1IGFuZCByZXR1cm4gdGhlCisgICBlbmNvZGVkIDpjbGFzczpgYnl0ZXNgLgogCiAgICAqZm9sZHNwYWNlcyogaXMgYW4gb3B0aW9uYWwgZmxhZyB0aGF0IHVzZXMgdGhlIHNwZWNpYWwgc2hvcnQgc2VxdWVuY2UgJ3knCiAgICBpbnN0ZWFkIG9mIDQgY29uc2VjdXRpdmUgc3BhY2VzIChBU0NJSSAweDIwKSBhcyBzdXBwb3J0ZWQgYnkgJ2J0b2EnLiBUaGlzCiAgICBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQXNjaWk4NSBlbmNvZGluZy4KIAotICAgKndyYXBjb2wqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIG91dHB1dCBzaG91bGQgaGF2ZSBuZXdsaW5lIChgYCdcbidgYCkKKyAgICp3cmFwY29sKiBjb250cm9scyB3aGV0aGVyIHRoZSBvdXRwdXQgc2hvdWxkIGhhdmUgbmV3bGluZSAoYGBiJ1xuJ2BgKQogICAgY2hhcmFjdGVycyBhZGRlZCB0byBpdC4gSWYgdGhpcyBpcyBub24temVybywgZWFjaCBvdXRwdXQgbGluZSB3aWxsIGJlCiAgICBhdCBtb3N0IHRoaXMgbWFueSBjaGFyYWN0ZXJzIGxvbmcuCiAKLSAgICpwYWQqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHN0cmluZyBpcyBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA0CisgICAqcGFkKiBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBpcyBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA0CiAgICBiZWZvcmUgZW5jb2RpbmcuIE5vdGUgdGhhdCB0aGUgYGBidG9hYGAgaW1wbGVtZW50YXRpb24gYWx3YXlzIHBhZHMuCiAKICAgICphZG9iZSogY29udHJvbHMgd2hldGhlciB0aGUgZW5jb2RlZCBieXRlIHNlcXVlbmNlIGlzIGZyYW1lZCB3aXRoIGBgPH5gYApAQCAtMTYxLDExICsxNzgsMTAgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAKLS4uIGZ1bmN0aW9uOjogYTg1ZGVjb2RlKHMsICosIGZvbGRzcGFjZXM9RmFsc2UsIGFkb2JlPUZhbHNlLCBpZ25vcmVjaGFycz1iJyBcXHRcXG5cXHJcXHYnKQorLi4gZnVuY3Rpb246OiBhODVkZWNvZGUoYiwgKiwgZm9sZHNwYWNlcz1GYWxzZSwgYWRvYmU9RmFsc2UsIGlnbm9yZWNoYXJzPWInIFxcdFxcblxcclxcdicpCiAKLSAgIERlY29kZSBhbiBBc2NpaTg1IGVuY29kZWQgYnl0ZSBzdHJpbmcuCi0KLSAgICpzKiBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZGVjb2RlLgorICAgRGVjb2RlIHRoZSBBc2NpaTg1IGVuY29kZWQgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBvciBBU0NJSSBzdHJpbmcgKmIqIGFuZAorICAgcmV0dXJuIHRoZSBkZWNvZGVkIDpjbGFzczpgYnl0ZXNgLgogCiAgICAqZm9sZHNwYWNlcyogaXMgYSBmbGFnIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlICd5JyBzaG9ydCBzZXF1ZW5jZQogICAgc2hvdWxkIGJlIGFjY2VwdGVkIGFzIHNob3J0aGFuZCBmb3IgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApLgpAQCAtMTc0LDI3ICsxOTAsMjkgQEAKICAgICphZG9iZSogY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgaW4gQWRvYmUgQXNjaWk4NSBmb3JtYXQKICAgIChpLmUuIGlzIGZyYW1lZCB3aXRoIDx+IGFuZCB+PikuCiAKLSAgICppZ25vcmVjaGFycyogc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGlnbm9yZQorICAgKmlnbm9yZWNoYXJzKiBzaG91bGQgYmUgYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIEFTQ0lJIHN0cmluZworICAgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGlnbm9yZQogICAgZnJvbSB0aGUgaW5wdXQuIFRoaXMgc2hvdWxkIG9ubHkgY29udGFpbiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIGFuZCBieQogICAgZGVmYXVsdCBjb250YWlucyBhbGwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIEFTQ0lJLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCi0uLiBmdW5jdGlvbjo6IGI4NWVuY29kZShzLCBwYWQ9RmFsc2UpCisuLiBmdW5jdGlvbjo6IGI4NWVuY29kZShiLCBwYWQ9RmFsc2UpCiAKLSAgIEVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIGJhc2U4NSwgYXMgdXNlZCBpbiBlLmcuIGdpdC1zdHlsZSBiaW5hcnkKLSAgIGRpZmZzLgorICAgRW5jb2RlIHRoZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpiKiB1c2luZyBiYXNlODUgKGFzIHVzZWQgaW4gZS5nLgorICAgZ2l0LXN0eWxlIGJpbmFyeSBkaWZmcykgYW5kIHJldHVybiB0aGUgZW5jb2RlZCA6Y2xhc3M6YGJ5dGVzYC4KIAotICAgSWYgKnBhZCogaXMgdHJ1ZSwgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoICJcXDAiIHNvIGl0cyBsZW5ndGggaXMgYQotICAgbXVsdGlwbGUgb2YgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKyAgIElmICpwYWQqIGlzIHRydWUsIHRoZSBpbnB1dCBpcyBwYWRkZWQgd2l0aCBgYGInXDAnYGAgc28gaXRzIGxlbmd0aCBpcyBhCisgICBtdWx0aXBsZSBvZiA0IGJ5dGVzIGJlZm9yZSBlbmNvZGluZy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIAogLi4gZnVuY3Rpb246OiBiODVkZWNvZGUoYikKIAotICAgRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgc3RyaW5nLiAgUGFkZGluZyBpcyBpbXBsaWNpdGx5IHJlbW92ZWQsIGlmCisgICBEZWNvZGUgdGhlIGJhc2U4NS1lbmNvZGVkIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgQVNDSUkgc3RyaW5nICpiKiBhbmQKKyAgIHJldHVybiB0aGUgZGVjb2RlZCA6Y2xhc3M6YGJ5dGVzYC4gIFBhZGRpbmcgaXMgaW1wbGljaXRseSByZW1vdmVkLCBpZgogICAgbmVjZXNzYXJ5LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKQEAgLTIxNCwxNSArMjMyLDE1IEBACiAKICAgIERlY29kZSB0aGUgY29udGVudHMgb2YgdGhlIGJpbmFyeSAqaW5wdXQqIGZpbGUgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcgYmluYXJ5CiAgICBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBmaWxlIG9iamVjdHMKLSAgIDxmaWxlIG9iamVjdD5gLiAqaW5wdXQqIHdpbGwgYmUgcmVhZCB1bnRpbCBgYGlucHV0LnJlYWQoKWBgIHJldHVybnMgYW4gZW1wdHkKLSAgIGJ5dGVzIG9iamVjdC4KKyAgIDxmaWxlIG9iamVjdD5gLiAqaW5wdXQqIHdpbGwgYmUgcmVhZCB1bnRpbCBgYGlucHV0LnJlYWRsaW5lKClgYCByZXR1cm5zIGFuCisgICBlbXB0eSBieXRlcyBvYmplY3QuCiAKIAogLi4gZnVuY3Rpb246OiBkZWNvZGVieXRlcyhzKQogICAgICAgICAgICAgICBkZWNvZGVzdHJpbmcocykKIAotICAgRGVjb2RlIHRoZSBieXRlIHN0cmluZyAqcyosIHdoaWNoIG11c3QgY29udGFpbiBvbmUgb3IgbW9yZSBsaW5lcyBvZiBiYXNlNjQKLSAgIGVuY29kZWQgZGF0YSwgYW5kIHJldHVybiBhIGJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlc3VsdGluZyBiaW5hcnkgZGF0YS4KKyAgIERlY29kZSB0aGUgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCAqcyosIHdoaWNoIG11c3QgY29udGFpbiBvbmUgb3IgbW9yZQorICAgbGluZXMgb2YgYmFzZTY0IGVuY29kZWQgZGF0YSwgYW5kIHJldHVybiB0aGUgZGVjb2RlZCA6Y2xhc3M6YGJ5dGVzYC4KICAgIGBgZGVjb2Rlc3RyaW5nYGAgaXMgYSBkZXByZWNhdGVkIGFsaWFzLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKQEAgLTIzMywxNyArMjUxLDE5IEBACiAgICBFbmNvZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBiaW5hcnkgKmlucHV0KiBmaWxlIGFuZCB3cml0ZSB0aGUgcmVzdWx0aW5nIGJhc2U2NAogICAgZW5jb2RlZCBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBmaWxlCiAgICBvYmplY3RzIDxmaWxlIG9iamVjdD5gLiAqaW5wdXQqIHdpbGwgYmUgcmVhZCB1bnRpbCBgYGlucHV0LnJlYWQoKWBgIHJldHVybnMKLSAgIGFuIGVtcHR5IGJ5dGVzIG9iamVjdC4gOmZ1bmM6YGVuY29kZWAgcmV0dXJucyB0aGUgZW5jb2RlZCBkYXRhIHBsdXMgYSB0cmFpbGluZwotICAgbmV3bGluZSBjaGFyYWN0ZXIgKGBgYidcbidgYCkuCisgICBhbiBlbXB0eSBieXRlcyBvYmplY3QuIDpmdW5jOmBlbmNvZGVgIGluc2VydHMgYSBuZXdsaW5lIGNoYXJhY3RlciAoYGBiJ1xuJ2BgKQorICAgYWZ0ZXIgZXZlcnkgNzYgYnl0ZXMgb2YgdGhlIG91dHB1dCwgYXMgd2VsbCBhcyBlbnN1cmluZyB0aGF0IHRoZSBvdXRwdXQKKyAgIGFsd2F5cyBlbmRzIHdpdGggYSBuZXdsaW5lLCBhcyBwZXIgOnJmYzpgMjA0NWAgKE1JTUUpLgogCiAKIC4uIGZ1bmN0aW9uOjogZW5jb2RlYnl0ZXMocykKICAgICAgICAgICAgICAgZW5jb2Rlc3RyaW5nKHMpCiAKLSAgIEVuY29kZSB0aGUgYnl0ZSBzdHJpbmcgKnMqLCB3aGljaCBjYW4gY29udGFpbiBhcmJpdHJhcnkgYmluYXJ5IGRhdGEsIGFuZAotICAgcmV0dXJuIGEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBsaW5lcyBvZiBiYXNlNjQtZW5jb2RlZCBkYXRhLgotICAgOmZ1bmM6YGVuY29kZWJ5dGVzYCByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgbGluZXMgb2YKLSAgIGJhc2U2NC1lbmNvZGVkIGRhdGEgYWx3YXlzIGluY2x1ZGluZyBhbiBleHRyYSB0cmFpbGluZyBuZXdsaW5lIChgYGInXG4nYGApLgorICAgRW5jb2RlIHRoZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpzKiwgd2hpY2ggY2FuIGNvbnRhaW4gYXJiaXRyYXJ5IGJpbmFyeQorICAgZGF0YSwgYW5kIHJldHVybiA6Y2xhc3M6YGJ5dGVzYCBjb250YWluaW5nIHRoZSBiYXNlNjQtZW5jb2RlZCBkYXRhLCB3aXRoIG5ld2xpbmVzCisgICAoYGBiJ1xuJ2BgKSBpbnNlcnRlZCBhZnRlciBldmVyeSA3NiBieXRlcyBvZiBvdXRwdXQsIGFuZCBlbnN1cmluZyB0aGF0CisgICB0aGVyZSBpcyBhIHRyYWlsaW5nIG5ld2xpbmUsIGFzIHBlciA6cmZjOmAyMDQ1YCAoTUlNRSkuCisKICAgIGBgZW5jb2Rlc3RyaW5nYGAgaXMgYSBkZXByZWNhdGVkIGFsaWFzLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2JpbmFzY2lpLnJzdCBiL0RvYy9saWJyYXJ5L2JpbmFzY2lpLnJzdAppbmRleCBkYmU1MzVkLi44NzhkOGRiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iaW5hc2NpaS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmluYXNjaWkucnN0CkBAIC01LDEyICs1LDEzIEBACiAgICA6c3lub3BzaXM6IFRvb2xzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gYmluYXJ5IGFuZCB2YXJpb3VzIEFTQ0lJLWVuY29kZWQgYmluYXJ5CiAgICAgICAgICAgICAgIHJlcHJlc2VudGF0aW9ucy4KIAotCiAuLiBpbmRleDo6CiAgICBtb2R1bGU6IHV1CiAgICBtb2R1bGU6IGJhc2U2NAogICAgbW9kdWxlOiBiaW5oZXgKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGJpbmFzY2lpYCBtb2R1bGUgY29udGFpbnMgYSBudW1iZXIgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGJldHdlZW4KIGJpbmFyeSBhbmQgdmFyaW91cyBBU0NJSS1lbmNvZGVkIGJpbmFyeSByZXByZXNlbnRhdGlvbnMuIE5vcm1hbGx5LCB5b3Ugd2lsbCBub3QKIHVzZSB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHkgYnV0IHVzZSB3cmFwcGVyIG1vZHVsZXMgbGlrZSA6bW9kOmB1dWAsCkBAIC0yMSw3ICsyMiw3IEBACiAuLiBub3RlOjoKIAogICAgYGBhMmJfKmBgIGZ1bmN0aW9ucyBhY2NlcHQgVW5pY29kZSBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSBBU0NJSSBjaGFyYWN0ZXJzLgotICAgT3RoZXIgZnVuY3Rpb25zIG9ubHkgYWNjZXB0IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgKHN1Y2ggYXMKKyAgIE90aGVyIGZ1bmN0aW9ucyBvbmx5IGFjY2VwdCA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gIChzdWNoIGFzCiAgICA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgIGFuZCBvdGhlciBvYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgYnVmZmVyCiAgICBwcm90b2NvbCkuCiAKQEAgLTExMiwxNSArMTEzLDE2IEBACiAgICBwb3NzaWJseSB0aGUgbGFzdCBmcmFnbWVudCkuCiAKIAotLi4gZnVuY3Rpb246OiBjcmNfaHF4KGRhdGEsIGNyYykKKy4uIGZ1bmN0aW9uOjogY3JjX2hxeChkYXRhLCB2YWx1ZSkKIAotICAgQ29tcHV0ZSB0aGUgYmluaGV4NCBjcmMgdmFsdWUgb2YgKmRhdGEqLCBzdGFydGluZyB3aXRoIGFuIGluaXRpYWwgKmNyYyogYW5kCi0gICByZXR1cm5pbmcgdGhlIHJlc3VsdC4KKyAgIENvbXB1dGUgdGhlIGJpbmhleDQgY3JjIHZhbHVlIG9mICpkYXRhKiwgc3RhcnRpbmcgd2l0aCAqdmFsdWUqIGFzIHRoZQorICAgaW5pdGlhbCBjcmMsIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KIAogCi0uLiBmdW5jdGlvbjo6IGNyYzMyKGRhdGFbLCBjcmNdKQorLi4gZnVuY3Rpb246OiBjcmMzMihkYXRhWywgdmFsdWVdKQogCi0gICBDb21wdXRlIENSQy0zMiwgdGhlIDMyLWJpdCBjaGVja3N1bSBvZiBkYXRhLCBzdGFydGluZyB3aXRoIGFuIGluaXRpYWwgY3JjLiAgVGhpcworICAgQ29tcHV0ZSBDUkMtMzIsIHRoZSAzMi1iaXQgY2hlY2tzdW0gb2YgKmRhdGEqLCBzdGFydGluZyB3aXRoIGFuCisgICBpbml0aWFsIENSQyBvZiAqdmFsdWUqLiAgVGhlIGRlZmF1bHQgaW5pdGlhbCBDUkMgaXMgemVyby4gIFRoZSBhbGdvcml0aG0KICAgIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgWklQIGZpbGUgY2hlY2tzdW0uICBTaW5jZSB0aGUgYWxnb3JpdGhtIGlzIGRlc2lnbmVkIGZvcgogICAgdXNlIGFzIGEgY2hlY2tzdW0gYWxnb3JpdGhtLCBpdCBpcyBub3Qgc3VpdGFibGUgZm9yIHVzZSBhcyBhIGdlbmVyYWwgaGFzaAogICAgYWxnb3JpdGhtLiAgVXNlIGFzIGZvbGxvd3M6OgpAQCAtMTI4LDE1ICsxMzAsMTMgQEAKICAgICAgIHByaW50KGJpbmFzY2lpLmNyYzMyKGIiaGVsbG8gd29ybGQiKSkKICAgICAgICMgT3IsIGluIHR3byBwaWVjZXM6CiAgICAgICBjcmMgPSBiaW5hc2NpaS5jcmMzMihiImhlbGxvIikKLSAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKGIiIHdvcmxkIiwgY3JjKSAmIDB4ZmZmZmZmZmYKKyAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKGIiIHdvcmxkIiwgY3JjKQogICAgICAgcHJpbnQoJ2NyYzMyID0gezojMDEweH0nLmZvcm1hdChjcmMpKQogCi0uLiBub3RlOjoKLSAgIFRvIGdlbmVyYXRlIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYWNyb3NzIGFsbCBQeXRob24gdmVyc2lvbnMgYW5kCi0gICBwbGF0Zm9ybXMgdXNlIGNyYzMyKGRhdGEpICYgMHhmZmZmZmZmZi4gIElmIHlvdSBhcmUgb25seSB1c2luZwotICAgdGhlIGNoZWNrc3VtIGluIHBhY2tlZCBiaW5hcnkgZm9ybWF0IHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBhcyB0aGUKLSAgIHJldHVybiB2YWx1ZSBpcyB0aGUgY29ycmVjdCAzMmJpdCBiaW5hcnkgcmVwcmVzZW50YXRpb24KLSAgIHJlZ2FyZGxlc3Mgb2Ygc2lnbi4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4wCisgICAgICBUaGUgcmVzdWx0IGlzIGFsd2F5cyB1bnNpZ25lZC4KKyAgICAgIFRvIGdlbmVyYXRlIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYWNyb3NzIGFsbCBQeXRob24gdmVyc2lvbnMgYW5kCisgICAgICBwbGF0Zm9ybXMsIHVzZSBgYGNyYzMyKGRhdGEpICYgMHhmZmZmZmZmZmBgLgogCiAKIC4uIGZ1bmN0aW9uOjogYjJhX2hleChkYXRhKQpAQCAtMTUyLDggKzE1Miw4IEBACiAKICAgIFJldHVybiB0aGUgYmluYXJ5IGRhdGEgcmVwcmVzZW50ZWQgYnkgdGhlIGhleGFkZWNpbWFsIHN0cmluZyAqaGV4c3RyKi4gIFRoaXMKICAgIGZ1bmN0aW9uIGlzIHRoZSBpbnZlcnNlIG9mIDpmdW5jOmBiMmFfaGV4YC4gKmhleHN0ciogbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyCi0gICBvZiBoZXhhZGVjaW1hbCBkaWdpdHMgKHdoaWNoIGNhbiBiZSB1cHBlciBvciBsb3dlciBjYXNlKSwgb3RoZXJ3aXNlIGEKLSAgIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkLgorICAgb2YgaGV4YWRlY2ltYWwgZGlnaXRzICh3aGljaCBjYW4gYmUgdXBwZXIgb3IgbG93ZXIgY2FzZSksIG90aGVyd2lzZSBhbgorICAgOmV4YzpgRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIAogLi4gZXhjZXB0aW9uOjogRXJyb3IKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2JpbmhleC5yc3QgYi9Eb2MvbGlicmFyeS9iaW5oZXgucnN0CmluZGV4IDQzYzc4MjMuLjM1OWFiMjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2JpbmhleC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmluaGV4LnJzdApAQCAtNCw2ICs0LDkgQEAKIC4uIG1vZHVsZTo6IGJpbmhleAogICAgOnN5bm9wc2lzOiBFbmNvZGUgYW5kIGRlY29kZSBmaWxlcyBpbiBiaW5oZXg0IGZvcm1hdC4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvYmluaGV4LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBlbmNvZGVzIGFuZCBkZWNvZGVzIGZpbGVzIGluIGJpbmhleDQgZm9ybWF0LCBhIGZvcm1hdCBhbGxvd2luZwogcmVwcmVzZW50YXRpb24gb2YgTWFjaW50b3NoIGZpbGVzIGluIEFTQ0lJLiBPbmx5IHRoZSBkYXRhIGZvcmsgaXMgaGFuZGxlZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Jpc2VjdC5yc3QgYi9Eb2MvbGlicmFyeS9iaXNlY3QucnN0CmluZGV4IDEzYjAxNDcuLjZiZjc4MTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Jpc2VjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmlzZWN0LnJzdApAQCAtNjAsNyArNjAsNyBAQAogLi4gc2VlYWxzbzo6CiAKICAgIGBTb3J0ZWRDb2xsZWN0aW9uIHJlY2lwZQotICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzE5Ny1zb3J0ZWRjb2xsZWN0aW9uLz5gXyB0aGF0IHVzZXMKKyAgIDxodHRwczovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc3MTk3LXNvcnRlZGNvbGxlY3Rpb24vPmBfIHRoYXQgdXNlcwogICAgYmlzZWN0IHRvIGJ1aWxkIGEgZnVsbC1mZWF0dXJlZCBjb2xsZWN0aW9uIGNsYXNzIHdpdGggc3RyYWlnaHQtZm9yd2FyZCBzZWFyY2gKICAgIG1ldGhvZHMgYW5kIHN1cHBvcnQgZm9yIGEga2V5LWZ1bmN0aW9uLiAgVGhlIGtleXMgYXJlIHByZWNvbXB1dGVkIHRvIHNhdmUKICAgIHVubmVjZXNzYXJ5IGNhbGxzIHRvIHRoZSBrZXkgZnVuY3Rpb24gZHVyaW5nIHNlYXJjaGVzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYnVpbHRpbnMucnN0IGIvRG9jL2xpYnJhcnkvYnVpbHRpbnMucnN0CmluZGV4IDJjY2ExZDAuLjhmYjFmZWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2J1aWx0aW5zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9idWlsdGlucy5yc3QKQEAgLTQsNiArNCw3IEBACiAuLiBtb2R1bGU6OiBidWlsdGlucwogICAgOnN5bm9wc2lzOiBUaGUgbW9kdWxlIHRoYXQgcHJvdmlkZXMgdGhlIGJ1aWx0LWluIG5hbWVzcGFjZS4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byBhbGwgJ2J1aWx0LWluJyBpZGVudGlmaWVycyBvZiBQeXRob247IGZvcgogZXhhbXBsZSwgYGBidWlsdGlucy5vcGVuYGAgaXMgdGhlIGZ1bGwgbmFtZSBmb3IgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uCkBAIC0zNiw2ICszNyw2IEBACiAKIEFzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbW9zdCBtb2R1bGVzIGhhdmUgdGhlIG5hbWUgYGBfX2J1aWx0aW5zX19gYCBtYWRlCiBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGVpciBnbG9iYWxzLiAgVGhlIHZhbHVlIG9mIGBgX19idWlsdGluc19fYGAgaXMgbm9ybWFsbHkKLWVpdGhlciB0aGlzIG1vZHVsZSBvciB0aGUgdmFsdWUgb2YgdGhpcyBtb2R1bGUncyA6YXR0cjpgX19kaWN0X19gIGF0dHJpYnV0ZS4KK2VpdGhlciB0aGlzIG1vZHVsZSBvciB0aGUgdmFsdWUgb2YgdGhpcyBtb2R1bGUncyA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlLgogU2luY2UgdGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGl0IG1heSBub3QgYmUgdXNlZCBieSBhbHRlcm5hdGUKIGltcGxlbWVudGF0aW9ucyBvZiBQeXRob24uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9iejIucnN0IGIvRG9jL2xpYnJhcnkvYnoyLnJzdAppbmRleCA0ODhjZGE1Li42YzQ5ZDlmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iejIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKQEAgLTMsMTEgKzMsMTUgQEAKIAogLi4gbW9kdWxlOjogYnoyCiAgICA6c3lub3BzaXM6IEludGVyZmFjZXMgZm9yIGJ6aXAyIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLgorCiAuLiBtb2R1bGVhdXRob3I6OiBHdXN0YXZvIE5pZW1leWVyIDxuaWVtZXllckBjb25lY3RpdmEuY29tPgogLi4gbW9kdWxlYXV0aG9yOjogTmFkZWVtIFZhd2RhIDxuYWRlZW0udmF3ZGFAZ21haWwuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEd1c3Rhdm8gTmllbWV5ZXIgPG5pZW1leWVyQGNvbmVjdGl2YS5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogTmFkZWVtIFZhd2RhIDxuYWRlZW0udmF3ZGFAZ21haWwuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9iejIucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBpbnRlcmZhY2UgZm9yIGNvbXByZXNzaW5nIGFuZAogZGVjb21wcmVzc2luZyBkYXRhIHVzaW5nIHRoZSBiemlwMiBjb21wcmVzc2lvbiBhbGdvcml0aG0uCkBAIC0xMjAsNiArMTI0LDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAogICAgICAgVGhlIGBgJ3gnYGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZSB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgOm1ldGg6YH5pby5CdWZmZXJlZElPQmFzZS5yZWFkYCBtZXRob2Qgbm93IGFjY2VwdHMgYW4gYXJndW1lbnQgb2YKKyAgICAgIGBgTm9uZWBgLgorCiAKIEluY3JlbWVudGFsIChkZSljb21wcmVzc2lvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjIsMTUgKzE3MCwzMiBAQAogICAgICAgeW91IG5lZWQgdG8gZGVjb21wcmVzcyBhIG11bHRpLXN0cmVhbSBpbnB1dCB3aXRoIDpjbGFzczpgQloyRGVjb21wcmVzc29yYCwKICAgICAgIHlvdSBtdXN0IHVzZSBhIG5ldyBkZWNvbXByZXNzb3IgZm9yIGVhY2ggc3RyZWFtLgogCi0gICAuLiBtZXRob2Q6OiBkZWNvbXByZXNzKGRhdGEpCisgICAuLiBtZXRob2Q6OiBkZWNvbXByZXNzKGRhdGEsIG1heF9sZW5ndGg9LTEpCiAKLSAgICAgIFByb3ZpZGUgZGF0YSB0byB0aGUgZGVjb21wcmVzc29yIG9iamVjdC4gUmV0dXJucyBhIGNodW5rIG9mIGRlY29tcHJlc3NlZAotICAgICAgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYW4gZW1wdHkgYnl0ZSBzdHJpbmcgb3RoZXJ3aXNlLgorICAgICAgRGVjb21wcmVzcyAqZGF0YSogKGEgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCksIHJldHVybmluZworICAgICAgdW5jb21wcmVzc2VkIGRhdGEgYXMgYnl0ZXMuIFNvbWUgb2YgKmRhdGEqIG1heSBiZSBidWZmZXJlZAorICAgICAgaW50ZXJuYWxseSwgZm9yIHVzZSBpbiBsYXRlciBjYWxscyB0byA6bWV0aDpgZGVjb21wcmVzc2AuIFRoZQorICAgICAgcmV0dXJuZWQgZGF0YSBzaG91bGQgYmUgY29uY2F0ZW5hdGVkIHdpdGggdGhlIG91dHB1dCBvZiBhbnkKKyAgICAgIHByZXZpb3VzIGNhbGxzIHRvIDptZXRoOmBkZWNvbXByZXNzYC4KIAotICAgICAgQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdHJlYW0gaXMKLSAgICAgIHJlYWNoZWQgcmFpc2VzIGFuIDpleGM6YEVPRkVycm9yYC4gSWYgYW55IGRhdGEgaXMgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZgotICAgICAgdGhlIHN0cmVhbSwgaXQgaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIDphdHRyOmB1bnVzZWRfZGF0YWAgYXR0cmlidXRlLgorICAgICAgSWYgKm1heF9sZW5ndGgqIGlzIG5vbm5lZ2F0aXZlLCByZXR1cm5zIGF0IG1vc3QgKm1heF9sZW5ndGgqCisgICAgICBieXRlcyBvZiBkZWNvbXByZXNzZWQgZGF0YS4gSWYgdGhpcyBsaW1pdCBpcyByZWFjaGVkIGFuZCBmdXJ0aGVyCisgICAgICBvdXRwdXQgY2FuIGJlIHByb2R1Y2VkLCB0aGUgOmF0dHI6YH4ubmVlZHNfaW5wdXRgIGF0dHJpYnV0ZSB3aWxsCisgICAgICBiZSBzZXQgdG8gYGBGYWxzZWBgLiBJbiB0aGlzIGNhc2UsIHRoZSBuZXh0IGNhbGwgdG8KKyAgICAgIDptZXRoOmB+LmRlY29tcHJlc3NgIG1heSBwcm92aWRlICpkYXRhKiBhcyBgYGInJ2BgIHRvIG9idGFpbgorICAgICAgbW9yZSBvZiB0aGUgb3V0cHV0LgogCisgICAgICBJZiBhbGwgb2YgdGhlIGlucHV0IGRhdGEgd2FzIGRlY29tcHJlc3NlZCBhbmQgcmV0dXJuZWQgKGVpdGhlcgorICAgICAgYmVjYXVzZSB0aGlzIHdhcyBsZXNzIHRoYW4gKm1heF9sZW5ndGgqIGJ5dGVzLCBvciBiZWNhdXNlCisgICAgICAqbWF4X2xlbmd0aCogd2FzIG5lZ2F0aXZlKSwgdGhlIDphdHRyOmB+Lm5lZWRzX2lucHV0YCBhdHRyaWJ1dGUKKyAgICAgIHdpbGwgYmUgc2V0IHRvIGBgVHJ1ZWBgLgorCisgICAgICBBdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkCisgICAgICByYWlzZXMgYW4gYEVPRkVycm9yYC4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlCisgICAgICBzdHJlYW0gaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIDphdHRyOmB+LnVudXNlZF9kYXRhYCBhdHRyaWJ1dGUuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICAgICBBZGRlZCB0aGUgKm1heF9sZW5ndGgqIHBhcmFtZXRlci4KIAogICAgLi4gYXR0cmlidXRlOjogZW9mCiAKQEAgLTE4Niw2ICsyMTEsMTMgQEAKICAgICAgIElmIHRoaXMgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaGFzIGJlZW4KICAgICAgIHJlYWNoZWQsIGl0cyB2YWx1ZSB3aWxsIGJlIGBgYicnYGAuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IG5lZWRzX2lucHV0CisKKyAgICAgIGBgRmFsc2VgYCBpZiB0aGUgOm1ldGg6YC5kZWNvbXByZXNzYCBtZXRob2QgY2FuIHByb3ZpZGUgbW9yZQorICAgICAgZGVjb21wcmVzc2VkIGRhdGEgYmVmb3JlIHJlcXVpcmluZyBuZXcgdW5jb21wcmVzc2VkIGlucHV0LgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogCiBPbmUtc2hvdCAoZGUpY29tcHJlc3Npb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2FsZW5kYXIucnN0IGIvRG9jL2xpYnJhcnkvY2FsZW5kYXIucnN0CmluZGV4IDMxODdjNDMuLmRmNzZlMzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NhbGVuZGFyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jYWxlbmRhci5yc3QKQEAgLTQsNiArNCw3IEBACiAuLiBtb2R1bGU6OiBjYWxlbmRhcgogICAgOnN5bm9wc2lzOiBGdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBjYWxlbmRhcnMsIGluY2x1ZGluZyBzb21lIGVtdWxhdGlvbgogICAgICAgICAgICAgICBvZiB0aGUgVW5peCBjYWwgcHJvZ3JhbS4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IERyZXcgQ3NpbGxhZyA8ZHJld19jc2lsbGFnQGdlb2NpdGllcy5jb20+CiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NhbGVuZGFyLnB5YApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2dpLnJzdCBiL0RvYy9saWJyYXJ5L2NnaS5yc3QKaW5kZXggNzRhYmVkNS4uNDEyMTllZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY2dpLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jZ2kucnN0CkBAIC00LDYgKzQsNyBAQAogLi4gbW9kdWxlOjogY2dpCiAgICA6c3lub3BzaXM6IEhlbHBlcnMgZm9yIHJ1bm5pbmcgUHl0aG9uIHNjcmlwdHMgdmlhIHRoZSBDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NnaS5weWAKIAogLi4gaW5kZXg6OgogICAgcGFpcjogV1dXOyBzZXJ2ZXIKQEAgLTEzLDggKzE0LDYgQEAKICAgIHNpbmdsZTogVVJMCiAgICBzaW5nbGU6IENvbW1vbiBHYXRld2F5IEludGVyZmFjZQogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jZ2kucHlgCi0KIC0tLS0tLS0tLS0tLS0tCiAKIFN1cHBvcnQgbW9kdWxlIGZvciBDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UgKENHSSkgc2NyaXB0cy4KQEAgLTE1Nyw2ICsxNTYsOSBAQAogICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKICAgICAgICAgICAgbGluZWNvdW50ID0gbGluZWNvdW50ICsgMQogCis6Y2xhc3M6YEZpZWxkU3RvcmFnZWAgb2JqZWN0cyBhbHNvIHN1cHBvcnQgYmVpbmcgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYAorc3RhdGVtZW50LCB3aGljaCB3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlbSB3aGVuIGRvbmUuCisKIElmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIHdoZW4gb2J0YWluaW5nIHRoZSBjb250ZW50cyBvZiBhbiB1cGxvYWRlZCBmaWxlCiAoZm9yIGV4YW1wbGUsIHdoZW4gdGhlIHVzZXIgaW50ZXJydXB0cyB0aGUgZm9ybSBzdWJtaXNzaW9uIGJ5IGNsaWNraW5nIG9uCiBhIEJhY2sgb3IgQ2FuY2VsIGJ1dHRvbikgdGhlIDphdHRyOmB+RmllbGRTdG9yYWdlLmRvbmVgIGF0dHJpYnV0ZSBvZiB0aGUKQEAgLTE4Miw2ICsxODQsMTAgQEAKICAgIFRoZSA6YXR0cjpgfkZpZWxkU3RvcmFnZS5maWxlYCBhdHRyaWJ1dGUgaXMgYXV0b21hdGljYWxseSBjbG9zZWQgdXBvbiB0aGUKICAgIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiB0aGUgY3JlYXRpbmcgOmNsYXNzOmBGaWVsZFN0b3JhZ2VgIGluc3RhbmNlLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCB0byB0aGUKKyAgIDpjbGFzczpgRmllbGRTdG9yYWdlYCBjbGFzcy4KKwogCiBIaWdoZXIgTGV2ZWwgSW50ZXJmYWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MzYsNyArNDQyLDkgQEAKIGludm9rZWQgYXMgYSBzY3JpcHQsIHRoZSBmaWxlIHdpbGwgZHVtcCBpdHMgZW52aXJvbm1lbnQgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUKIGZvcm0gaW4gSFRNTCBmb3JtLiBHaXZlIGl0IHRoZSByaWdodCBtb2RlIGV0YywgYW5kIHNlbmQgaXQgYSByZXF1ZXN0LiAgSWYgaXQncwogaW5zdGFsbGVkIGluIHRoZSBzdGFuZGFyZCA6ZmlsZTpgY2dpLWJpbmAgZGlyZWN0b3J5LCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8KLXNlbmQgaXQgYSByZXF1ZXN0IGJ5IGVudGVyaW5nIGEgVVJMIGludG8geW91ciBicm93c2VyIG9mIHRoZSBmb3JtOjoKK3NlbmQgaXQgYSByZXF1ZXN0IGJ5IGVudGVyaW5nIGEgVVJMIGludG8geW91ciBicm93c2VyIG9mIHRoZSBmb3JtOgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICBodHRwOi8veW91cmhvc3RuYW1lL2NnaS1iaW4vY2dpLnB5P25hbWU9Sm9lK0Jsb3cmYWRkcj1BdCtIb21lCiAKQEAgLTUyOCw0ICs1MzYsMyBAQAogICAgb3JkZXIgdGhlIGZpZWxkIHZhbHVlcyBzaG91bGQgYmUgc3VwcGxpZWQgaW4sIGJ1dCBrbm93aW5nIHdoZXRoZXIgYSByZXF1ZXN0CiAgICB3YXMgcmVjZWl2ZWQgZnJvbSBhIGNvbmZvcm1pbmcgYnJvd3Nlciwgb3IgZXZlbiBmcm9tIGEgYnJvd3NlciBhdCBhbGwsIGlzCiAgICB0ZWRpb3VzIGFuZCBlcnJvci1wcm9uZS4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2dpdGIucnN0IGIvRG9jL2xpYnJhcnkvY2dpdGIucnN0CmluZGV4IDY4MjdjOGUuLmI2NWE2MzUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NnaXRiLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jZ2l0Yi5yc3QKQEAgLTMsOSArMywxMSBAQAogCiAuLiBtb2R1bGU6OiBjZ2l0YgogICAgOnN5bm9wc2lzOiBDb25maWd1cmFibGUgdHJhY2ViYWNrIGhhbmRsZXIgZm9yIENHSSBzY3JpcHRzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBLYS1QaW5nIFllZSA8cGluZ0BsZncub3JnPgogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NnaXRiLnB5YAogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IENHSTsgZXhjZXB0aW9ucwpAQCAtMTMsNiArMTUsOCBAQAogICAgc2luZ2xlOiBleGNlcHRpb25zOyBpbiBDR0kgc2NyaXB0cwogICAgc2luZ2xlOiB0cmFjZWJhY2tzOyBpbiBDR0kgc2NyaXB0cwogCistLS0tLS0tLS0tLS0tLQorCiBUaGUgOm1vZDpgY2dpdGJgIG1vZHVsZSBwcm92aWRlcyBhIHNwZWNpYWwgZXhjZXB0aW9uIGhhbmRsZXIgZm9yIFB5dGhvbiBzY3JpcHRzLgogKEl0cyBuYW1lIGlzIGEgYml0IG1pc2xlYWRpbmcuICBJdCB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCB0byBkaXNwbGF5IGV4dGVuc2l2ZQogdHJhY2ViYWNrIGluZm9ybWF0aW9uIGluIEhUTUwgZm9yIENHSSBzY3JpcHRzLiAgSXQgd2FzIGxhdGVyIGdlbmVyYWxpemVkIHRvIGFsc28KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NodW5rLnJzdCBiL0RvYy9saWJyYXJ5L2NodW5rLnJzdAppbmRleCBhOTBlOWY4Li41ZTI0ZGY5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jaHVuay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY2h1bmsucnN0CkBAIC0zLDkgKzMsMTEgQEAKIAogLi4gbW9kdWxlOjogY2h1bmsKICAgIDpzeW5vcHNpczogTW9kdWxlIHRvIHJlYWQgSUZGIGNodW5rcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogU2pvZXJkIE11bGxlbmRlciA8c2pvZXJkQGFjbS5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogU2pvZXJkIE11bGxlbmRlciA8c2pvZXJkQGFjbS5vcmc+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NodW5rLnB5YAogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IEF1ZGlvIEludGVyY2hhbmdlIEZpbGUgRm9ybWF0CkBAIC0xNCw2ICsxNiw4IEBACiAgICBzaW5nbGU6IFJlYWwgTWVkaWEgRmlsZSBGb3JtYXQKICAgIHNpbmdsZTogUk1GRgogCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHJlYWRpbmcgZmlsZXMgdGhhdCB1c2UgRUEgSUZGIDg1IGNodW5rcy4KIFsjXV8gIFRoaXMgZm9ybWF0IGlzIHVzZWQgaW4gYXQgbGVhc3QgdGhlIEF1ZGlvIEludGVyY2hhbmdlIEZpbGUgRm9ybWF0CiAoQUlGRi9BSUZGLUMpIGFuZCB0aGUgUmVhbCBNZWRpYSBGaWxlIEZvcm1hdCAoUk1GRikuICBUaGUgV0FWRSBhdWRpbyBmaWxlIGZvcm1hdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY21hdGgucnN0IGIvRG9jL2xpYnJhcnkvY21hdGgucnN0CmluZGV4IGE5ODFkOTQuLjYyZGRiNmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NtYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jbWF0aC5yc3QKQEAgLTQsNiArNCw3IEBACiAuLiBtb2R1bGU6OiBjbWF0aAogICAgOnN5bm9wc2lzOiBNYXRoZW1hdGljYWwgZnVuY3Rpb25zIGZvciBjb21wbGV4IG51bWJlcnMuCiAKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGlzIGFsd2F5cyBhdmFpbGFibGUuICBJdCBwcm92aWRlcyBhY2Nlc3MgdG8gbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucwogZm9yIGNvbXBsZXggbnVtYmVycy4gIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgYWNjZXB0IGludGVnZXJzLApAQCAtMjA3LDYgKzIwOCwzOCBAQAogICAgYW5kIGBgRmFsc2VgYCBvdGhlcndpc2UuCiAKIAorLi4gZnVuY3Rpb246OiBpc2Nsb3NlKGEsIGIsICosIHJlbF90b2w9MWUtMDksIGFic190b2w9MC4wKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHZhbHVlcyAqYSogYW5kICpiKiBhcmUgY2xvc2UgdG8gZWFjaCBvdGhlciBhbmQKKyAgIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgIFdoZXRoZXIgb3Igbm90IHR3byB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgY2xvc2UgaXMgZGV0ZXJtaW5lZCBhY2NvcmRpbmcgdG8KKyAgIGdpdmVuIGFic29sdXRlIGFuZCByZWxhdGl2ZSB0b2xlcmFuY2VzLgorCisgICAqcmVsX3RvbCogaXMgdGhlIHJlbGF0aXZlIHRvbGVyYW5jZSAtLSBpdCBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIGRpZmZlcmVuY2UKKyAgIGJldHdlZW4gKmEqIGFuZCAqYiosIHJlbGF0aXZlIHRvIHRoZSBsYXJnZXIgYWJzb2x1dGUgdmFsdWUgb2YgKmEqIG9yICpiKi4KKyAgIEZvciBleGFtcGxlLCB0byBzZXQgYSB0b2xlcmFuY2Ugb2YgNSUsIHBhc3MgYGByZWxfdG9sPTAuMDVgYC4gIFRoZSBkZWZhdWx0CisgICB0b2xlcmFuY2UgaXMgYGAxZS0wOWBgLCB3aGljaCBhc3N1cmVzIHRoYXQgdGhlIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lCisgICB3aXRoaW4gYWJvdXQgOSBkZWNpbWFsIGRpZ2l0cy4gICpyZWxfdG9sKiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorCisgICAqYWJzX3RvbCogaXMgdGhlIG1pbmltdW0gYWJzb2x1dGUgdG9sZXJhbmNlIC0tIHVzZWZ1bCBmb3IgY29tcGFyaXNvbnMgbmVhcgorICAgemVyby4gKmFic190b2wqIG11c3QgYmUgYXQgbGVhc3QgemVyby4KKworICAgSWYgbm8gZXJyb3JzIG9jY3VyLCB0aGUgcmVzdWx0IHdpbGwgYmU6CisgICBgYGFicyhhLWIpIDw9IG1heChyZWxfdG9sICogbWF4KGFicyhhKSwgYWJzKGIpKSwgYWJzX3RvbClgYC4KKworICAgVGhlIElFRUUgNzU0IHNwZWNpYWwgdmFsdWVzIG9mIGBgTmFOYGAsIGBgaW5mYGAsIGFuZCBgYC1pbmZgYCB3aWxsIGJlCisgICBoYW5kbGVkIGFjY29yZGluZyB0byBJRUVFIHJ1bGVzLiAgU3BlY2lmaWNhbGx5LCBgYE5hTmBgIGlzIG5vdCBjb25zaWRlcmVkCisgICBjbG9zZSB0byBhbnkgb3RoZXIgdmFsdWUsIGluY2x1ZGluZyBgYE5hTmBgLiAgYGBpbmZgYCBhbmQgYGAtaW5mYGAgYXJlIG9ubHkKKyAgIGNvbnNpZGVyZWQgY2xvc2UgdG8gdGhlbXNlbHZlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICA6cGVwOmA0ODVgIC0tIEEgZnVuY3Rpb24gZm9yIHRlc3RpbmcgYXBwcm94aW1hdGUgZXF1YWxpdHkKKworCiBDb25zdGFudHMKIC0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jbWQucnN0IGIvRG9jL2xpYnJhcnkvY21kLnJzdAppbmRleCAxYWIyZDc0Li5mNDBjZmRmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jbWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NtZC5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IGNtZAogICAgOnN5bm9wc2lzOiBCdWlsZCBsaW5lLW9yaWVudGVkIGNvbW1hbmQgaW50ZXJwcmV0ZXJzLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+CiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NtZC5weWAKQEAgLTMxMyw3ICszMTQsOSBAQAogCiAKIEhlcmUgaXMgYSBzYW1wbGUgc2Vzc2lvbiB3aXRoIHRoZSB0dXJ0bGUgc2hlbGwgc2hvd2luZyB0aGUgaGVscCBmdW5jdGlvbnMsIHVzaW5nCi1ibGFuayBsaW5lcyB0byByZXBlYXQgY29tbWFuZHMsIGFuZCB0aGUgc2ltcGxlIHJlY29yZCBhbmQgcGxheWJhY2sgZmFjaWxpdHk6OgorYmxhbmsgbGluZXMgdG8gcmVwZWF0IGNvbW1hbmRzLCBhbmQgdGhlIHNpbXBsZSByZWNvcmQgYW5kIHBsYXliYWNrIGZhY2lsaXR5OgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICAgV2VsY29tZSB0byB0aGUgdHVydGxlIHNoZWxsLiAgIFR5cGUgaGVscCBvciA/IHRvIGxpc3QgY29tbWFuZHMuCiAKQEAgLTM3Miw0ICszNzUsMyBAQAogCiAgICAgKHR1cnRsZSkgYnllCiAgICAgVGhhbmsgeW91IGZvciB1c2luZyBUdXJ0bGUKLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZS5yc3QgYi9Eb2MvbGlicmFyeS9jb2RlLnJzdAppbmRleCA1YjVkN2NjLi40NDNhZjY5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2RlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlLnJzdApAQCAtNCw2ICs0LDkgQEAKIC4uIG1vZHVsZTo6IGNvZGUKICAgIDpzeW5vcHNpczogRmFjaWxpdGllcyB0byBpbXBsZW1lbnQgcmVhZC1ldmFsLXByaW50IGxvb3BzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb2RlLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgYGBjb2RlYGAgbW9kdWxlIHByb3ZpZGVzIGZhY2lsaXRpZXMgdG8gaW1wbGVtZW50IHJlYWQtZXZhbC1wcmludCBsb29wcyBpbgogUHl0aG9uLiAgVHdvIGNsYXNzZXMgYW5kIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBhcmUgaW5jbHVkZWQgd2hpY2ggY2FuIGJlIHVzZWQgdG8KQEAgLTExMyw2ICsxMTYsOSBAQAogICAgYmVjYXVzZSBpdCBpcyB3aXRoaW4gdGhlIGludGVycHJldGVyIG9iamVjdCBpbXBsZW1lbnRhdGlvbi4gVGhlIG91dHB1dCBpcwogICAgd3JpdHRlbiBieSB0aGUgOm1ldGg6YHdyaXRlYCBtZXRob2QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41IFRoZSBmdWxsIGNoYWluZWQgdHJhY2ViYWNrIGlzIGRpc3BsYXllZCBpbnN0ZWFkCisgICAgICBvZiBqdXN0IHRoZSBwcmltYXJ5IHRyYWNlYmFjay4KKwogCiAuLiBtZXRob2Q6OiBJbnRlcmFjdGl2ZUludGVycHJldGVyLndyaXRlKGRhdGEpCiAKQEAgLTE2NSw0ICsxNzEsMyBAQAogICAgbmV3bGluZS4gIFdoZW4gdGhlIHVzZXIgZW50ZXJzIHRoZSBFT0Yga2V5IHNlcXVlbmNlLCA6ZXhjOmBFT0ZFcnJvcmAgaXMgcmFpc2VkLgogICAgVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gcmVhZHMgZnJvbSBgYHN5cy5zdGRpbmBgOyBhIHN1YmNsYXNzIG1heSByZXBsYWNlIHRoaXMKICAgIHdpdGggYSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24uCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CmluZGV4IDYyODk2OWMuLjFhZGQzMDAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZWNzLnJzdApAQCAtMywxMCArMywxMiBAQAogCiAuLiBtb2R1bGU6OiBjb2RlY3MKICAgIDpzeW5vcHNpczogRW5jb2RlIGFuZCBkZWNvZGUgZGF0YSBhbmQgc3RyZWFtcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogTWFyYy1BbmRyw6kgTGVtYnVyZyA8bWFsQGxlbWJ1cmcuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IE1hcmMtQW5kcsOpIExlbWJ1cmcgPG1hbEBsZW1idXJnLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBNYXJ0aW4gdi4gTMO2d2lzIDxtYXJ0aW5Adi5sb2V3aXMuZGU+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NvZGVjcy5weWAKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBVbmljb2RlCkBAIC0xNiw2ICsxOCw4IEBACiAgICBzaW5nbGU6IHN0cmVhbXMKICAgIHBhaXI6IHN0YWNrYWJsZTsgc3RyZWFtcwogCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGJhc2UgY2xhc3NlcyBmb3Igc3RhbmRhcmQgUHl0aG9uIGNvZGVjcyAoZW5jb2RlcnMgYW5kCiBkZWNvZGVycykgYW5kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaW50ZXJuYWwgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5LCB3aGljaAogbWFuYWdlcyB0aGUgY29kZWMgYW5kIGVycm9yIGhhbmRsaW5nIGxvb2t1cCBwcm9jZXNzLiBNb3N0IHN0YW5kYXJkIGNvZGVjcwpAQCAtMjksMTAgKzMzLDkgQEAKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHdpdGgKIGFueSBjb2RlYzoKIAotLi4gZnVuY3Rpb246OiBlbmNvZGUob2JqLCBbZW5jb2RpbmdbLCBlcnJvcnNdXSkKKy4uIGZ1bmN0aW9uOjogZW5jb2RlKG9iaiwgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKQogCi0gICBFbmNvZGVzICpvYmoqIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLiBUaGUgZGVmYXVsdAotICAgZW5jb2RpbmcgaXMgYGB1dGYtOGBgLgorICAgRW5jb2RlcyAqb2JqKiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgKmVuY29kaW5nKi4KIAogICAgKkVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCB0aGUgZGVzaXJlZCBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZQogICAgZGVmYXVsdCBlcnJvciBoYW5kbGVyIGlzIGBgJ3N0cmljdCdgYCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlCkBAIC00MCwxMCArNDMsOSBAQAogICAgOmV4YzpgVW5pY29kZUVuY29kZUVycm9yYCkuIFJlZmVyIHRvIDpyZWY6YGNvZGVjLWJhc2UtY2xhc3Nlc2AgZm9yIG1vcmUKICAgIGluZm9ybWF0aW9uIG9uIGNvZGVjIGVycm9yIGhhbmRsaW5nLgogCi0uLiBmdW5jdGlvbjo6IGRlY29kZShvYmosIFtlbmNvZGluZ1ssIGVycm9yc11dKQorLi4gZnVuY3Rpb246OiBkZWNvZGUob2JqLCBlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3N0cmljdCcpCiAKLSAgIERlY29kZXMgKm9iaiogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yICplbmNvZGluZyouIFRoZSBkZWZhdWx0Ci0gICBlbmNvZGluZyBpcyBgYHV0Zi04YGAuCisgICBEZWNvZGVzICpvYmoqIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLgogCiAgICAqRXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IHRoZSBkZXNpcmVkIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlCiAgICBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMgYGAnc3RyaWN0J2BgIG1lYW5pbmcgdGhhdCBkZWNvZGluZyBlcnJvcnMgcmFpc2UKQEAgLTEwNCw3ICsxMDYsNiBAQAogVG8gc2ltcGxpZnkgYWNjZXNzIHRvIHRoZSB2YXJpb3VzIGNvZGVjIGNvbXBvbmVudHMsIHRoZSBtb2R1bGUgcHJvdmlkZXMKIHRoZXNlIGFkZGl0aW9uYWwgZnVuY3Rpb25zIHdoaWNoIHVzZSA6ZnVuYzpgbG9va3VwYCBmb3IgdGhlIGNvZGVjIGxvb2t1cDoKIAotCiAuLiBmdW5jdGlvbjo6IGdldGVuY29kZXIoZW5jb2RpbmcpCiAKICAgIExvb2sgdXAgdGhlIGNvZGVjIGZvciB0aGUgZ2l2ZW4gZW5jb2RpbmcgYW5kIHJldHVybiBpdHMgZW5jb2RlciBmdW5jdGlvbi4KQEAgLTEzOSwxNiArMTQwLDE2IEBACiAKIC4uIGZ1bmN0aW9uOjogZ2V0cmVhZGVyKGVuY29kaW5nKQogCi0gICBMb29rIHVwIHRoZSBjb2RlYyBmb3IgdGhlIGdpdmVuIGVuY29kaW5nIGFuZCByZXR1cm4gaXRzIFN0cmVhbVJlYWRlciBjbGFzcyBvcgotICAgZmFjdG9yeSBmdW5jdGlvbi4KKyAgIExvb2sgdXAgdGhlIGNvZGVjIGZvciB0aGUgZ2l2ZW4gZW5jb2RpbmcgYW5kIHJldHVybiBpdHMgOmNsYXNzOmBTdHJlYW1SZWFkZXJgCisgICBjbGFzcyBvciBmYWN0b3J5IGZ1bmN0aW9uLgogCiAgICBSYWlzZXMgYSA6ZXhjOmBMb29rdXBFcnJvcmAgaW4gY2FzZSB0aGUgZW5jb2RpbmcgY2Fubm90IGJlIGZvdW5kLgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0d3JpdGVyKGVuY29kaW5nKQogCi0gICBMb29rIHVwIHRoZSBjb2RlYyBmb3IgdGhlIGdpdmVuIGVuY29kaW5nIGFuZCByZXR1cm4gaXRzIFN0cmVhbVdyaXRlciBjbGFzcyBvcgotICAgZmFjdG9yeSBmdW5jdGlvbi4KKyAgIExvb2sgdXAgdGhlIGNvZGVjIGZvciB0aGUgZ2l2ZW4gZW5jb2RpbmcgYW5kIHJldHVybiBpdHMgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgCisgICBjbGFzcyBvciBmYWN0b3J5IGZ1bmN0aW9uLgogCiAgICBSYWlzZXMgYSA6ZXhjOmBMb29rdXBFcnJvcmAgaW4gY2FzZSB0aGUgZW5jb2RpbmcgY2Fubm90IGJlIGZvdW5kLgogCkBAIC0yNzQsNiArMjc1LDcgQEAKIGNvZGVjIHdpbGwgaGFuZGxlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBlcnJvcnMuCiAKIAorLi4gX3N1cnJvZ2F0ZWVzY2FwZToKIC4uIF9lcnJvci1oYW5kbGVyczoKIAogRXJyb3IgSGFuZGxlcnMKQEAgLTMxNSwxMCArMzE3LDE0IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVmZXJlbmNlIChvbmx5IGZvciBlbmNvZGluZykuICBJbXBsZW1lbnRlZCAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbiA6ZnVuYzpgeG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzYC4gICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAgIHwgUmVwbGFjZSB3aXRoIGJhY2tzbGFzaGVkIGVzY2FwZSBzZXF1ZW5jZXMgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCAob25seSBmb3IgZW5jb2RpbmcpLiAgSW1wbGVtZW50ZWQgaW4gICAgICAgICAgfAorfCBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgICB8IFJlcGxhY2Ugd2l0aCBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2VzLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW1wbGVtZW50ZWQgaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCA6ZnVuYzpgYmFja3NsYXNocmVwbGFjZV9lcnJvcnNgLiAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgJ25hbWVyZXBsYWNlJ2BgICAgICAgIHwgUmVwbGFjZSB3aXRoIGBgXE57Li4ufWBgIGVzY2FwZSBzZXF1ZW5jZXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCAob25seSBmb3IgZW5jb2RpbmcpLiAgSW1wbGVtZW50ZWQgaW4gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBuYW1lcmVwbGFjZV9lcnJvcnNgLiAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgICAgfCBPbiBkZWNvZGluZywgcmVwbGFjZSBieXRlIHdpdGggaW5kaXZpZHVhbCAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHN1cnJvZ2F0ZSBjb2RlIHJhbmdpbmcgZnJvbSBgYFUrREM4MGBgIHRvICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBVK0RDRkZgYC4gIFRoaXMgY29kZSB3aWxsIHRoZW4gYmUgdHVybmVkICAgIHwKQEAgLTM0NCw2ICszNTAsMTMgQEAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CiAgICBUaGUgYGAnc3Vycm9nYXRlcGFzcydgYCBlcnJvciBoYW5kbGVycyBub3cgd29ya3Mgd2l0aCB1dGYtMTZcKiBhbmQgdXRmLTMyXCogY29kZWNzLgogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKyAgIFRoZSBgYCduYW1lcmVwbGFjZSdgYCBlcnJvciBoYW5kbGVyLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgVGhlIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAgZXJyb3IgaGFuZGxlcnMgbm93IHdvcmtzIHdpdGggZGVjb2RpbmcgYW5kCisgICB0cmFuc2xhdGluZy4KKwogVGhlIHNldCBvZiBhbGxvd2VkIHZhbHVlcyBjYW4gYmUgZXh0ZW5kZWQgYnkgcmVnaXN0ZXJpbmcgYSBuZXcgbmFtZWQgZXJyb3IKIGhhbmRsZXI6CiAKQEAgLTQxMSw5ICs0MjQsMTcgQEAKIAogLi4gZnVuY3Rpb246OiBiYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhleGNlcHRpb24pCiAKLSAgIEltcGxlbWVudHMgdGhlIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAgZXJyb3IgaGFuZGxpbmcgKGZvciBlbmNvZGluZyB3aXRoCisgICBJbXBsZW1lbnRzIHRoZSBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIGVycm9yIGhhbmRsaW5nIChmb3IKKyAgIDp0ZXJtOmB0ZXh0IGVuY29kaW5ncyA8dGV4dCBlbmNvZGluZz5gIG9ubHkpOiBtYWxmb3JtZWQgZGF0YSBpcworICAgcmVwbGFjZWQgYnkgYSBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2UuCisKKy4uIGZ1bmN0aW9uOjogbmFtZXJlcGxhY2VfZXJyb3JzKGV4Y2VwdGlvbikKKworICAgSW1wbGVtZW50cyB0aGUgYGAnbmFtZXJlcGxhY2UnYGAgZXJyb3IgaGFuZGxpbmcgKGZvciBlbmNvZGluZyB3aXRoCiAgICA6dGVybTpgdGV4dCBlbmNvZGluZ3MgPHRleHQgZW5jb2Rpbmc+YCBvbmx5KTogdGhlCi0gICB1bmVuY29kYWJsZSBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgYnkgYSBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2UuCisgICB1bmVuY29kYWJsZSBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgYnkgYSBgYFxOey4uLn1gYCBlc2NhcGUgc2VxdWVuY2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQogCiAKIC4uIF9jb2RlYy1vYmplY3RzOgpAQCAtOTU5LDcgKzk4MCw3IEBACiAKICogYW4gSVNPIDg4NTkgY29kZXNldAogCi0qIGEgTWljcm9zb2Z0IFdpbmRvd3MgY29kZSBwYWdlLCB3aGljaCBpcyB0eXBpY2FsbHkgZGVyaXZlZCBmcm9tIGEgODg1OSBjb2Rlc2V0LAorKiBhIE1pY3Jvc29mdCBXaW5kb3dzIGNvZGUgcGFnZSwgd2hpY2ggaXMgdHlwaWNhbGx5IGRlcml2ZWQgZnJvbSBhbiA4ODU5IGNvZGVzZXQsCiAgIGJ1dCByZXBsYWNlcyBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBhZGRpdGlvbmFsIGdyYXBoaWMgY2hhcmFjdGVycwogCiAqIGFuIElCTSBFQkNESUMgY29kZSBwYWdlCkBAIC0xMTQ0LDggKzExNjUsMTYgQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwga29pOF9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUnVzc2lhbiAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wga29pOF90ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGFqaWsgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmFkZGVkOjogMy41ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwga29pOF91ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVWtyYWluaWFuICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wga3oxMDQ4ICAgICAgICAgIHwga3pfMTA0OCwgc3RyazEwNDhfMjAwMiwgcmsxMDQ4IHwgS2F6YWtoICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmFkZGVkOjogMy41ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgbWFjX2N5cmlsbGljICAgIHwgbWFjY3lyaWxsaWMgICAgICAgICAgICAgICAgICAgIHwgQnVsZ2FyaWFuLCBCeWVsb3J1c3NpYW4sICAgICAgIHwKIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWFjZWRvbmlhbiwgUnVzc2lhbiwgU2VyYmlhbiAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEzODgsNyArMTQxNyw3IEBACiBuYW1lcyAoOm1vZDpgaHR0cC5jbGllbnRgIHRoZW4gYWxzbyB0cmFuc3BhcmVudGx5IHNlbmRzIGFuIElETkEgaG9zdG5hbWUgaW4gdGhlCiA6bWFpbGhlYWRlcjpgSG9zdGAgZmllbGQgaWYgaXQgc2VuZHMgdGhhdCBmaWVsZCBhdCBhbGwpLgogCi0uLiBfc2VjdGlvbiAzLjE6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTAjc2VjdGlvbi0zLjEKKy4uIF9zZWN0aW9uIDMuMTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTAjc2VjdGlvbi0zLjEKIAogV2hlbiByZWNlaXZpbmcgaG9zdCBuYW1lcyBmcm9tIHRoZSB3aXJlIChzdWNoIGFzIGluIHJldmVyc2UgbmFtZSBsb29rdXApLCBubwogYXV0b21hdGljIGNvbnZlcnNpb24gdG8gVW5pY29kZSBpcyBwZXJmb3JtZWQ6IEFwcGxpY2F0aW9ucyB3aXNoaW5nIHRvIHByZXNlbnQKQEAgLTE0NDYsNCArMTQ3NSwzIEBACiBCT00gd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIFVURi04IGVuY29kZWQgYnl0ZXMuIEZvciB0aGUgc3RhdGVmdWwgZW5jb2RlciB0aGlzCiBpcyBvbmx5IGRvbmUgb25jZSAob24gdGhlIGZpcnN0IHdyaXRlIHRvIHRoZSBieXRlIHN0cmVhbSkuICBGb3IgZGVjb2RpbmcgYW4KIG9wdGlvbmFsIFVURi04IGVuY29kZWQgQk9NIGF0IHRoZSBzdGFydCBvZiB0aGUgZGF0YSB3aWxsIGJlIHNraXBwZWQuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGVvcC5yc3QgYi9Eb2MvbGlicmFyeS9jb2Rlb3AucnN0CmluZGV4IDlhZTQxNzYuLmE1MmQyYzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvZGVvcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZW9wLnJzdApAQCAtMyw5ICszLDE0IEBACiAKIC4uIG1vZHVsZTo6IGNvZGVvcAogICAgOnN5bm9wc2lzOiBDb21waWxlIChwb3NzaWJseSBpbmNvbXBsZXRlKSBQeXRob24gY29kZS4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IE1vc2hlIFphZGthIDxtb3NoZXpAemFka2Euc2l0ZS5jby5pbD4KIC4uIHNlY3Rpb25hdXRob3I6OiBNaWNoYWVsIEh1ZHNvbiA8bXdoQHB5dGhvbi5uZXQ+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NvZGVvcC5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGNvZGVvcGAgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdGllcyB1cG9uIHdoaWNoIHRoZSBQeXRob24KIHJlYWQtZXZhbC1wcmludCBsb29wIGNhbiBiZSBlbXVsYXRlZCwgYXMgaXMgZG9uZSBpbiB0aGUgOm1vZDpgY29kZWAgbW9kdWxlLiAgQXMKIGEgcmVzdWx0LCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIG1vZHVsZSBkaXJlY3RseTsgaWYgeW91IHdhbnQgdG8KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CmluZGV4IGQ3M2YwNWEuLmFlYjZhNzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdApAQCAtMywyMCArMywyMSBAQAogCiAuLiBtb2R1bGU6OiBjb2xsZWN0aW9ucy5hYmMKICAgIDpzeW5vcHNpczogQWJzdHJhY3QgYmFzZSBjbGFzc2VzIGZvciBjb250YWluZXJzCisKIC4uIG1vZHVsZWF1dGhvcjo6IFJheW1vbmQgSGV0dGluZ2VyIDxweXRob24gYXQgcmNuLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+CiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgRm9ybWVybHksIHRoaXMgbW9kdWxlIHdhcyBwYXJ0IG9mIHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9fY29sbGVjdGlvbnNfYWJjLnB5YAorCiAuLiB0ZXN0c2V0dXA6OiAqCiAKICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0ICoKICAgIGltcG9ydCBpdGVydG9vbHMKICAgIF9fbmFtZV9fID0gJzxkb2N0ZXN0PicKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvX2NvbGxlY3Rpb25zX2FiYy5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgOnRlcm06YGFic3RyYWN0IGJhc2UgY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIHRoYXQKQEAgLTMzLDEzICszNCwxNCBAQAogCiAuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THxMfAogCi09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogQUJDICAgICAgICAgICAgICAgICAgICAgICAgSW5oZXJpdHMgZnJvbSAgICAgICAgICBBYnN0cmFjdCBNZXRob2RzICAgICAgICBNaXhpbiBNZXRob2RzCi09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogOmNsYXNzOmBDb250YWluZXJgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fY29udGFpbnNfX2BgCiA6Y2xhc3M6YEhhc2hhYmxlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19oYXNoX19gYAogOmNsYXNzOmBJdGVyYWJsZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9faXRlcl9fYGAKIDpjbGFzczpgSXRlcmF0b3JgICAgICAgICAgIDpjbGFzczpgSXRlcmFibGVgICAgICAgYGBfX25leHRfX2BgICAgICAgICAgICAgYGBfX2l0ZXJfX2BgCis6Y2xhc3M6YEdlbmVyYXRvcmAgICAgICAgICA6Y2xhc3M6YEl0ZXJhdG9yYCAgICAgIGBgc2VuZGBgLCBgYHRocm93YGAgICAgIGBgY2xvc2VgYCwgYGBfX2l0ZXJfX2BgLCBgYF9fbmV4dF9fYGAKIDpjbGFzczpgU2l6ZWRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2xlbl9fYGAKIDpjbGFzczpgQ2FsbGFibGVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NhbGxfX2BgCiAKQEAgLTUzLDYgKzU1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2xlbl9fYGAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgaW5zZXJ0YGAKIAorOmNsYXNzOmBCeXRlU3RyaW5nYCAgICAgICAgOmNsYXNzOmBTZXF1ZW5jZWAgICAgICBgYF9fZ2V0aXRlbV9fYGAsICAgICAgICBJbmhlcml0ZWQgOmNsYXNzOmBTZXF1ZW5jZWAgbWV0aG9kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYF9fbGVuX19gYAorCiA6Y2xhc3M6YFNldGAgICAgICAgICAgICAgICA6Y2xhc3M6YFNpemVkYCwgICAgICAgIGBgX19jb250YWluc19fYGAsICAgICAgIGBgX19sZV9fYGAsIGBgX19sdF9fYGAsIGBgX19lcV9fYGAsIGBgX19uZV9fYGAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCwgICAgIGBgX19pdGVyX19gYCwgICAgICAgICAgIGBgX19ndF9fYGAsIGBgX19nZV9fYGAsIGBgX19hbmRfX2BgLCBgYF9fb3JfX2BgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzOmBDb250YWluZXJgICAgICBgYF9fbGVuX19gYCAgICAgICAgICAgICBgYF9fc3ViX19gYCwgYGBfX3hvcl9fYGAsIGFuZCBgYGlzZGlzam9pbnRgYApAQCAtODAsNyArODUsMTEgQEAKIDpjbGFzczpgS2V5c1ZpZXdgICAgICAgICAgIDpjbGFzczpgTWFwcGluZ1ZpZXdgLCAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzczpgU2V0YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2l0ZXJfX2BgCiA6Y2xhc3M6YFZhbHVlc1ZpZXdgICAgICAgICA6Y2xhc3M6YE1hcHBpbmdWaWV3YCAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19jb250YWluc19fYGAsIGBgX19pdGVyX19gYAotPT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6Y2xhc3M6YEF3YWl0YWJsZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19hd2FpdF9fYGAKKzpjbGFzczpgQ29yb3V0aW5lYCAgICAgICAgIDpjbGFzczpgQXdhaXRhYmxlYCAgICAgYGBzZW5kYGAsIGBgdGhyb3dgYCAgICAgYGBjbG9zZWBgCis6Y2xhc3M6YEFzeW5jSXRlcmFibGVgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgX19haXRlcl9fYGAKKzpjbGFzczpgQXN5bmNJdGVyYXRvcmAgICAgIDpjbGFzczpgQXN5bmNJdGVyYWJsZWAgYGBfX2FuZXh0X19gYCAgICAgICAgICAgYGBfX2FpdGVyX19gYAorPT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAogLi4gY2xhc3M6OiBDb250YWluZXIKQEAgLTEwMiwxMSArMTExLDM0IEBACiAgICA6bWV0aDpgfml0ZXJhdG9yLl9fbmV4dF9fYCBtZXRob2RzLiAgU2VlIGFsc28gdGhlIGRlZmluaXRpb24gb2YKICAgIDp0ZXJtOmBpdGVyYXRvcmAuCiAKKy4uIGNsYXNzOjogR2VuZXJhdG9yCisKKyAgIEFCQyBmb3IgZ2VuZXJhdG9yIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhlIHByb3RvY29sIGRlZmluZWQgaW4KKyAgIDpwZXA6YDM0MmAgdGhhdCBleHRlbmRzIGl0ZXJhdG9ycyB3aXRoIHRoZSA6bWV0aDpgfmdlbmVyYXRvci5zZW5kYCwKKyAgIDptZXRoOmB+Z2VuZXJhdG9yLnRocm93YCBhbmQgOm1ldGg6YH5nZW5lcmF0b3IuY2xvc2VgIG1ldGhvZHMuCisgICBTZWUgYWxzbyB0aGUgZGVmaW5pdGlvbiBvZiA6dGVybTpgZ2VuZXJhdG9yYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIC4uIGNsYXNzOjogU2VxdWVuY2UKICAgICAgICAgICAgTXV0YWJsZVNlcXVlbmNlCisgICAgICAgICAgIEJ5dGVTdHJpbmcKIAogICAgQUJDcyBmb3IgcmVhZC1vbmx5IGFuZCBtdXRhYmxlIDp0ZXJtOmBzZXF1ZW5jZXMgPHNlcXVlbmNlPmAuCiAKKyAgIEltcGxlbWVudGF0aW9uIG5vdGU6IFNvbWUgb2YgdGhlIG1peGluIG1ldGhvZHMsIHN1Y2ggYXMKKyAgIDptZXRoOmBfX2l0ZXJfX2AsIDptZXRoOmBfX3JldmVyc2VkX19gIGFuZCA6bWV0aDpgaW5kZXhgLCBtYWtlCisgICByZXBlYXRlZCBjYWxscyB0byB0aGUgdW5kZXJseWluZyA6bWV0aDpgX19nZXRpdGVtX19gIG1ldGhvZC4KKyAgIENvbnNlcXVlbnRseSwgaWYgOm1ldGg6YF9fZ2V0aXRlbV9fYCBpcyBpbXBsZW1lbnRlZCB3aXRoIGNvbnN0YW50CisgICBhY2Nlc3Mgc3BlZWQsIHRoZSBtaXhpbiBtZXRob2RzIHdpbGwgaGF2ZSBsaW5lYXIgcGVyZm9ybWFuY2U7CisgICBob3dldmVyLCBpZiB0aGUgdW5kZXJseWluZyBtZXRob2QgaXMgbGluZWFyIChhcyBpdCB3b3VsZCBiZSB3aXRoIGEKKyAgIGxpbmtlZCBsaXN0KSwgdGhlIG1peGlucyB3aWxsIGhhdmUgcXVhZHJhdGljIHBlcmZvcm1hbmNlIGFuZCB3aWxsCisgICBsaWtlbHkgbmVlZCB0byBiZSBvdmVycmlkZGVuLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIGluZGV4KCkgbWV0aG9kIGFkZGVkIHN1cHBvcnQgZm9yICpzdG9wKiBhbmQgKnN0YXJ0KgorICAgICAgYXJndW1lbnRzLgorCiAuLiBjbGFzczo6IFNldAogICAgICAgICAgICBNdXRhYmxlU2V0CiAKQEAgLTEyNCw2ICsxNTYsNTYgQEAKIAogICAgQUJDcyBmb3IgbWFwcGluZywgaXRlbXMsIGtleXMsIGFuZCB2YWx1ZXMgOnRlcm06YHZpZXdzIDxkaWN0aW9uYXJ5IHZpZXc+YC4KIAorLi4gY2xhc3M6OiBBd2FpdGFibGUKKworICAgQUJDIGZvciA6dGVybTpgYXdhaXRhYmxlYCBvYmplY3RzLCB3aGljaCBjYW4gYmUgdXNlZCBpbiA6a2V5d29yZDpgYXdhaXRgCisgICBleHByZXNzaW9ucy4gIEN1c3RvbSBpbXBsZW1lbnRhdGlvbnMgbXVzdCBwcm92aWRlIHRoZSA6bWV0aDpgX19hd2FpdF9fYAorICAgbWV0aG9kLgorCisgICA6dGVybTpgQ29yb3V0aW5lYCBvYmplY3RzIGFuZCBpbnN0YW5jZXMgb2YgdGhlCisgICA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5hYmMuQ29yb3V0aW5lYCBBQkMgYXJlIGFsbCBpbnN0YW5jZXMgb2YgdGhpcyBBQkMuCisKKyAgIC4uIG5vdGU6OgorICAgICAgSW4gQ1B5dGhvbiwgZ2VuZXJhdG9yLWJhc2VkIGNvcm91dGluZXMgKGdlbmVyYXRvcnMgZGVjb3JhdGVkIHdpdGgKKyAgICAgIDpmdW5jOmB0eXBlcy5jb3JvdXRpbmVgIG9yIDpmdW5jOmBhc3luY2lvLmNvcm91dGluZWApIGFyZQorICAgICAgKmF3YWl0YWJsZXMqLCBldmVuIHRob3VnaCB0aGV5IGRvIG5vdCBoYXZlIGFuIDptZXRoOmBfX2F3YWl0X19gIG1ldGhvZC4KKyAgICAgIFVzaW5nIGBgaXNpbnN0YW5jZShnZW5jb3JvLCBBd2FpdGFibGUpYGAgZm9yIHRoZW0gd2lsbCByZXR1cm4gYGBGYWxzZWBgLgorICAgICAgVXNlIDpmdW5jOmBpbnNwZWN0LmlzYXdhaXRhYmxlYCB0byBkZXRlY3QgdGhlbS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKy4uIGNsYXNzOjogQ29yb3V0aW5lCisKKyAgIEFCQyBmb3IgY29yb3V0aW5lIGNvbXBhdGlibGUgY2xhc3Nlcy4gIFRoZXNlIGltcGxlbWVudCB0aGUKKyAgIGZvbGxvd2luZyBtZXRob2RzLCBkZWZpbmVkIGluIDpyZWY6YGNvcm91dGluZS1vYmplY3RzYDoKKyAgIDptZXRoOmB+Y29yb3V0aW5lLnNlbmRgLCA6bWV0aDpgfmNvcm91dGluZS50aHJvd2AsIGFuZAorICAgOm1ldGg6YH5jb3JvdXRpbmUuY2xvc2VgLiAgQ3VzdG9tIGltcGxlbWVudGF0aW9ucyBtdXN0IGFsc28gaW1wbGVtZW50CisgICA6bWV0aDpgX19hd2FpdF9fYC4gIEFsbCA6Y2xhc3M6YENvcm91dGluZWAgaW5zdGFuY2VzIGFyZSBhbHNvIGluc3RhbmNlcyBvZgorICAgOmNsYXNzOmBBd2FpdGFibGVgLiAgU2VlIGFsc28gdGhlIGRlZmluaXRpb24gb2YgOnRlcm06YGNvcm91dGluZWAuCisKKyAgIC4uIG5vdGU6OgorICAgICAgSW4gQ1B5dGhvbiwgZ2VuZXJhdG9yLWJhc2VkIGNvcm91dGluZXMgKGdlbmVyYXRvcnMgZGVjb3JhdGVkIHdpdGgKKyAgICAgIDpmdW5jOmB0eXBlcy5jb3JvdXRpbmVgIG9yIDpmdW5jOmBhc3luY2lvLmNvcm91dGluZWApIGFyZQorICAgICAgKmF3YWl0YWJsZXMqLCBldmVuIHRob3VnaCB0aGV5IGRvIG5vdCBoYXZlIGFuIDptZXRoOmBfX2F3YWl0X19gIG1ldGhvZC4KKyAgICAgIFVzaW5nIGBgaXNpbnN0YW5jZShnZW5jb3JvLCBDb3JvdXRpbmUpYGAgZm9yIHRoZW0gd2lsbCByZXR1cm4gYGBGYWxzZWBgLgorICAgICAgVXNlIDpmdW5jOmBpbnNwZWN0LmlzYXdhaXRhYmxlYCB0byBkZXRlY3QgdGhlbS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKy4uIGNsYXNzOjogQXN5bmNJdGVyYWJsZQorCisgICBBQkMgZm9yIGNsYXNzZXMgdGhhdCBwcm92aWRlIGBgX19haXRlcl9fYGAgbWV0aG9kLiAgU2VlIGFsc28gdGhlCisgICBkZWZpbml0aW9uIG9mIDp0ZXJtOmBhc3luY2hyb25vdXMgaXRlcmFibGVgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworLi4gY2xhc3M6OiBBc3luY0l0ZXJhdG9yCisKKyAgIEFCQyBmb3IgY2xhc3NlcyB0aGF0IHByb3ZpZGUgYGBfX2FpdGVyX19gYCBhbmQgYGBfX2FuZXh0X19gYAorICAgbWV0aG9kcy4gIFNlZSBhbHNvIHRoZSBkZWZpbml0aW9uIG9mIDp0ZXJtOmBhc3luY2hyb25vdXMgaXRlcmF0b3JgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogCiBUaGVzZSBBQkNzIGFsbG93IHVzIHRvIGFzayBjbGFzc2VzIG9yIGluc3RhbmNlcyBpZiB0aGV5IHByb3ZpZGUKIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSwgZm9yIGV4YW1wbGU6OgpAQCAtMTQwLDE5ICsyMjIsMjIgQEAKIDptZXRoOmBpc2Rpc2pvaW50YDo6CiAKICAgICBjbGFzcyBMaXN0QmFzZWRTZXQoY29sbGVjdGlvbnMuYWJjLlNldCk6Ci0gICAgICAgICAnJycgQWx0ZXJuYXRlIHNldCBpbXBsZW1lbnRhdGlvbiBmYXZvcmluZyBzcGFjZSBvdmVyIHNwZWVkCi0gICAgICAgICAgICAgYW5kIG5vdCByZXF1aXJpbmcgdGhlIHNldCBlbGVtZW50cyB0byBiZSBoYXNoYWJsZS4gJycnCi0gICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUpOgotICAgICAgICAgICAgIHNlbGYuZWxlbWVudHMgPSBsc3QgPSBbXQotICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdGVyYWJsZToKLSAgICAgICAgICAgICAgICAgaWYgdmFsdWUgbm90IGluIGxzdDoKLSAgICAgICAgICAgICAgICAgICAgIGxzdC5hcHBlbmQodmFsdWUpCi0gICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5lbGVtZW50cykKLSAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgotICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBzZWxmLmVsZW1lbnRzCi0gICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuZWxlbWVudHMpCisgICAgICAgICcnJyBBbHRlcm5hdGUgc2V0IGltcGxlbWVudGF0aW9uIGZhdm9yaW5nIHNwYWNlIG92ZXIgc3BlZWQKKyAgICAgICAgICAgIGFuZCBub3QgcmVxdWlyaW5nIHRoZSBzZXQgZWxlbWVudHMgdG8gYmUgaGFzaGFibGUuICcnJworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlcmFibGUpOgorICAgICAgICAgICAgc2VsZi5lbGVtZW50cyA9IGxzdCA9IFtdCisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXRlcmFibGU6CisgICAgICAgICAgICAgICAgaWYgdmFsdWUgbm90IGluIGxzdDoKKyAgICAgICAgICAgICAgICAgICAgbHN0LmFwcGVuZCh2YWx1ZSkKKworICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gaXRlcihzZWxmLmVsZW1lbnRzKQorCisgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluIHNlbGYuZWxlbWVudHMKKworICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5lbGVtZW50cykKIAogICAgIHMxID0gTGlzdEJhc2VkU2V0KCdhYmNkZWYnKQogICAgIHMyID0gTGlzdEJhc2VkU2V0KCdkZWZnaGknKQpAQCAtMTg1LDcgKzI3MCw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICAqIGBPcmRlcmVkU2V0IHJlY2lwZSA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2Njk0Lz5gXyBmb3IgYW4KKyAgICogYE9yZGVyZWRTZXQgcmVjaXBlIDxodHRwczovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2Njk0Lz5gXyBmb3IgYW4KICAgICAgZXhhbXBsZSBidWlsdCBvbiA6Y2xhc3M6YE11dGFibGVTZXRgLgogCiAgICAqIEZvciBtb3JlIGFib3V0IEFCQ3MsIHNlZSB0aGUgOm1vZDpgYWJjYCBtb2R1bGUgYW5kIDpwZXA6YDMxMTlgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CmluZGV4IDA5NzE4MjUuLjQ5MzZiM2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKQEAgLTMsMTcgKzMsMTggQEAKIAogLi4gbW9kdWxlOjogY29sbGVjdGlvbnMKICAgICA6c3lub3BzaXM6IENvbnRhaW5lciBkYXRhdHlwZXMKKwogLi4gbW9kdWxlYXV0aG9yOjogUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbkByY24uY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IFJheW1vbmQgSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHlgCisKIC4uIHRlc3RzZXR1cDo6ICoKIAogICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0ICoKICAgICBpbXBvcnQgaXRlcnRvb2xzCiAgICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JwogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBjb250YWluZXIgZGF0YXR5cGVzIHByb3ZpZGluZyBhbHRlcm5hdGl2ZXMgdG8KQEAgLTU2LDcgKzU3LDcgQEAKICAgICBkaWN0aW9uYXJ5IGlzIHByb3ZpZGVkIHNvIHRoYXQgYSBuZXcgY2hhaW4gYWx3YXlzIGhhcyBhdCBsZWFzdCBvbmUgbWFwcGluZy4KIAogICAgIFRoZSB1bmRlcmx5aW5nIG1hcHBpbmdzIGFyZSBzdG9yZWQgaW4gYSBsaXN0LiAgVGhhdCBsaXN0IGlzIHB1YmxpYyBhbmQgY2FuCi0gICAgYWNjZXNzZWQgb3IgdXBkYXRlZCB1c2luZyB0aGUgKm1hcHMqIGF0dHJpYnV0ZS4gIFRoZXJlIGlzIG5vIG90aGVyIHN0YXRlLgorICAgIGJlIGFjY2Vzc2VkIG9yIHVwZGF0ZWQgdXNpbmcgdGhlICptYXBzKiBhdHRyaWJ1dGUuICBUaGVyZSBpcyBubyBvdGhlciBzdGF0ZS4KIAogICAgIExvb2t1cHMgc2VhcmNoIHRoZSB1bmRlcmx5aW5nIG1hcHBpbmdzIHN1Y2Nlc3NpdmVseSB1bnRpbCBhIGtleSBpcyBmb3VuZC4gIEluCiAgICAgY29udHJhc3QsIHdyaXRlcywgdXBkYXRlcywgYW5kIGRlbGV0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpcnN0IG1hcHBpbmcuCkBAIC0xMTYsMTIgKzExNywxMiBAQAogICAgICAgOm1ldGg6YH5jb2xsZWN0aW9ucy5DaGFpbk1hcC5wYXJlbnRzYCBwcm9wZXJ0eS4KIAogICAgICogVGhlIGBOZXN0ZWQgQ29udGV4dHMgcmVjaXBlCi0gICAgICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc3NDM0Lz5gXyBoYXMgb3B0aW9ucyB0byBjb250cm9sCisgICAgICA8aHR0cHM6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzQzNC8+YF8gaGFzIG9wdGlvbnMgdG8gY29udHJvbAogICAgICAgd2hldGhlciB3cml0ZXMgYW5kIG90aGVyIG11dGF0aW9ucyBhcHBseSBvbmx5IHRvIHRoZSBmaXJzdCBtYXBwaW5nIG9yIHRvCiAgICAgICBhbnkgbWFwcGluZyBpbiB0aGUgY2hhaW4uCiAKICAgICAqIEEgYGdyZWF0bHkgc2ltcGxpZmllZCByZWFkLW9ubHkgdmVyc2lvbiBvZiBDaGFpbm1hcAotICAgICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzMwNTI2OC8+YF8uCisgICAgICA8aHR0cHM6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzMwNTI2OC8+YF8uCiAKIAogOmNsYXNzOmBDaGFpbk1hcGAgRXhhbXBsZXMgYW5kIFJlY2lwZXMKQEAgLTM3NCwxMiArMzc1LDEyIEBACiAKIC4uIHNlZWFsc286OgogCi0gICAgKiBgQmFnIGNsYXNzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbD5gXworICAgICogYEJhZyBjbGFzcyA8aHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zbWFsbHRhbGsvbWFudWFsLWJhc2UvaHRtbF9ub2RlL0JhZy5odG1sPmBfCiAgICAgICBpbiBTbWFsbHRhbGsuCiAKLSAgICAqIFdpa2lwZWRpYSBlbnRyeSBmb3IgYE11bHRpc2V0cyA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NdWx0aXNldD5gXy4KKyAgICAqIFdpa2lwZWRpYSBlbnRyeSBmb3IgYE11bHRpc2V0cyA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTXVsdGlzZXQ+YF8uCiAKLSAgICAqIGBDKysgbXVsdGlzZXRzIDxodHRwOi8vd3d3LmRlbW8ycy5jb20vVHV0b3JpYWwvQ3BwLzAzODBfX3NldC1tdWx0aXNldC9DYXRhbG9nMDM4MF9fc2V0LW11bHRpc2V0Lmh0bT5gXworICAgICogYEMrKyBtdWx0aXNldHMgPGh0dHA6Ly93d3cuamF2YTJzLmNvbS9UdXRvcmlhbC9DcHAvMDM4MF9fc2V0LW11bHRpc2V0L0NhdGFsb2cwMzgwX19zZXQtbXVsdGlzZXQuaHRtPmBfCiAgICAgICB0dXRvcmlhbCB3aXRoIGV4YW1wbGVzLgogCiAgICAgKiBGb3IgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgb24gbXVsdGlzZXRzIGFuZCB0aGVpciB1c2UgY2FzZXMsIHNlZQpAQCAtMzg3LDcgKzM4OCw3IEBACiAgICAgICBTZWN0aW9uIDQuNi4zLCBFeGVyY2lzZSAxOSouCiAKICAgICAqIFRvIGVudW1lcmF0ZSBhbGwgZGlzdGluY3QgbXVsdGlzZXRzIG9mIGEgZ2l2ZW4gc2l6ZSBvdmVyIGEgZ2l2ZW4gc2V0IG9mCi0gICAgICBlbGVtZW50cywgc2VlIDpmdW5jOmBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnRgLgorICAgICAgZWxlbWVudHMsIHNlZSA6ZnVuYzpgaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50YDoKIAogICAgICAgICAgICAgbWFwKENvdW50ZXIsIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCdBQkMnLCAyKSkgLS0+IEFBIEFCIEFDIEJCIEJDIENDCiAKQEAgLTQzNyw2ICs0MzgsMTMgQEAKICAgICAgICAgUmVtb3ZlIGFsbCBlbGVtZW50cyBmcm9tIHRoZSBkZXF1ZSBsZWF2aW5nIGl0IHdpdGggbGVuZ3RoIDAuCiAKIAorICAgIC4uIG1ldGhvZDo6IGNvcHkoKQorCisgICAgICAgIENyZWF0ZSBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGVxdWUuCisKKyAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogICAgIC4uIG1ldGhvZDo6IGNvdW50KHgpCiAKICAgICAgICAgQ291bnQgdGhlIG51bWJlciBvZiBkZXF1ZSBlbGVtZW50cyBlcXVhbCB0byAqeCouCkBAIC00NTcsNiArNDY1LDI1IEBACiAgICAgICAgIGVsZW1lbnRzIGluIHRoZSBpdGVyYWJsZSBhcmd1bWVudC4KIAogCisgICAgLi4gbWV0aG9kOjogaW5kZXgoeFssIHN0YXJ0Wywgc3RvcF1dKQorCisgICAgICAgIFJldHVybiB0aGUgcG9zaXRpb24gb2YgKngqIGluIHRoZSBkZXF1ZSAoYXQgb3IgYWZ0ZXIgaW5kZXggKnN0YXJ0KgorICAgICAgICBhbmQgYmVmb3JlIGluZGV4ICpzdG9wKikuICBSZXR1cm5zIHRoZSBmaXJzdCBtYXRjaCBvciByYWlzZXMKKyAgICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaWYgbm90IGZvdW5kLgorCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKKyAgICAuLiBtZXRob2Q6OiBpbnNlcnQoaSwgeCkKKworICAgICAgICBJbnNlcnQgKngqIGludG8gdGhlIGRlcXVlIGF0IHBvc2l0aW9uICppKi4KKworICAgICAgICBJZiB0aGUgaW5zZXJ0aW9uIHdvdWxkIGNhdXNlIGEgYm91bmRlZCBkZXF1ZSB0byBncm93IGJleW9uZCAqbWF4bGVuKiwKKyAgICAgICAgYW4gOmV4YzpgSW5kZXhFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKICAgICAuLiBtZXRob2Q6OiBwb3AoKQogCiAgICAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGVsZW1lbnQgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgZGVxdWUuIElmIG5vCkBAIC00NzEsNyArNDk4LDcgQEAKIAogICAgIC4uIG1ldGhvZDo6IHJlbW92ZSh2YWx1ZSkKIAotICAgICAgICBSZW1vdmVkIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICp2YWx1ZSouICBJZiBub3QgZm91bmQsIHJhaXNlcyBhCisgICAgICAgIFJlbW92ZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqdmFsdWUqLiAgSWYgbm90IGZvdW5kLCByYWlzZXMgYQogICAgICAgICA6ZXhjOmBWYWx1ZUVycm9yYC4KIAogCkBAIC01MDQsNiArNTMxLDkgQEAKIGFjY2VzcyBpcyBPKDEpIGF0IGJvdGggZW5kcyBidXQgc2xvd3MgdG8gTyhuKSBpbiB0aGUgbWlkZGxlLiAgRm9yIGZhc3QgcmFuZG9tCiBhY2Nlc3MsIHVzZSBsaXN0cyBpbnN0ZWFkLgogCitTdGFydGluZyBpbiB2ZXJzaW9uIDMuNSwgZGVxdWVzIHN1cHBvcnQgYGBfX2FkZF9fKClgYCwgYGBfX211bF9fKClgYCwKK2FuZCBgYF9faW11bF9fKClgYC4KKwogRXhhbXBsZToKIAogLi4gZG9jdGVzdDo6CkBAIC03NjMsNiArNzkzLDExIEBACiAgICAgTmFtZWQgdHVwbGUgaW5zdGFuY2VzIGRvIG5vdCBoYXZlIHBlci1pbnN0YW5jZSBkaWN0aW9uYXJpZXMsIHNvIHRoZXkgYXJlCiAgICAgbGlnaHR3ZWlnaHQgYW5kIHJlcXVpcmUgbm8gbW9yZSBtZW1vcnkgdGhhbiByZWd1bGFyIHR1cGxlcy4KIAorICAgIEZvciBzaW1wbGUgdXNlcywgd2hlcmUgdGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMgdG8gYmUgYWJsZSB0byByZWZlciB0byBhIHNldAorICAgIG9mIHZhbHVlcyBieSBuYW1lIHVzaW5nIGF0dHJpYnV0ZS1zdHlsZSBhY2Nlc3MsIHRoZQorICAgIDpjbGFzczpgdHlwZXMuU2ltcGxlTmFtZXNwYWNlYCB0eXBlIGNhbiBiZSBhIHN1aXRhYmxlIGFsdGVybmF0aXZlIHRvIHVzaW5nCisgICAgYSBuYW1lZHR1cGxlLgorCiAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgKnJlbmFtZSouCiAKQEAgLTg3OSwxNSArOTE0LDE1IEBACiBhIGZpeGVkLXdpZHRoIHByaW50IGZvcm1hdDoKIAogICAgID4+PiBjbGFzcyBQb2ludChuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKSk6Ci0gICAgICAgIF9fc2xvdHNfXyA9ICgpCi0gICAgICAgIEBwcm9wZXJ0eQotICAgICAgICBkZWYgaHlwb3Qoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gKHNlbGYueCAqKiAyICsgc2VsZi55ICoqIDIpICoqIDAuNQotICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiAnUG9pbnQ6IHg9JTYuM2YgIHk9JTYuM2YgIGh5cG90PSU2LjNmJyAlIChzZWxmLngsIHNlbGYueSwgc2VsZi5oeXBvdCkKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICgpCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBoeXBvdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYueCAqKiAyICsgc2VsZi55ICoqIDIpICoqIDAuNQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdQb2ludDogeD0lNi4zZiAgeT0lNi4zZiAgaHlwb3Q9JTYuM2YnICUgKHNlbGYueCwgc2VsZi55LCBzZWxmLmh5cG90KQogCiAgICAgPj4+IGZvciBwIGluIFBvaW50KDMsIDQpLCBQb2ludCgxNCwgNS83KToKLSAgICAgICAgcHJpbnQocCkKKyAgICAgICAgICAgIHByaW50KHApCiAgICAgUG9pbnQ6IHg9IDMuMDAwICB5PSA0LjAwMCAgaHlwb3Q9IDUuMDAwCiAgICAgUG9pbnQ6IHg9MTQuMDAwICB5PSAwLjcxNCAgaHlwb3Q9MTQuMDE4CiAKQEAgLTg5OSw2ICs5MzQsMTggQEAKIAogICAgID4+PiBQb2ludDNEID0gbmFtZWR0dXBsZSgnUG9pbnQzRCcsIFBvaW50Ll9maWVsZHMgKyAoJ3onLCkpCiAKK0RvY3N0cmluZ3MgY2FuIGJlIGN1c3RvbWl6ZWQgYnkgbWFraW5nIGRpcmVjdCBhc3NpZ25tZW50cyB0byB0aGUgYGBfX2RvY19fYGAKK2ZpZWxkczoKKworICAgPj4+IEJvb2sgPSBuYW1lZHR1cGxlKCdCb29rJywgWydpZCcsICd0aXRsZScsICdhdXRob3JzJ10pCisgICA+Pj4gQm9vay5fX2RvY19fICs9ICc6IEhhcmRjb3ZlciBib29rIGluIGFjdGl2ZSBjb2xsZWN0aW9uJworICAgPj4+IEJvb2suaWQuX19kb2NfXyA9ICcxMy1kaWdpdCBJU0JOJworICAgPj4+IEJvb2sudGl0bGUuX19kb2NfXyA9ICdUaXRsZSBvZiBmaXJzdCBwcmludGluZycKKyAgID4+PiBCb29rLmF1dGhvcnMuX19kb2NfXyA9ICdMaXN0IG9mIGF1dGhvcnMgc29ydGVkIGJ5IGxhc3QgbmFtZScKKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgIFByb3BlcnR5IGRvY3N0cmluZ3MgYmVjYW1lIHdyaXRlYWJsZS4KKwogRGVmYXVsdCB2YWx1ZXMgY2FuIGJlIGltcGxlbWVudGVkIGJ5IHVzaW5nIDptZXRoOmBfcmVwbGFjZWAgdG8KIGN1c3RvbWl6ZSBhIHByb3RvdHlwZSBpbnN0YW5jZToKIApAQCAtOTA3LDIxICs5NTQsMTEgQEAKICAgICA+Pj4gam9obnNfYWNjb3VudCA9IGRlZmF1bHRfYWNjb3VudC5fcmVwbGFjZShvd25lcj0nSm9obicpCiAgICAgPj4+IGphbmVzX2FjY291bnQgPSBkZWZhdWx0X2FjY291bnQuX3JlcGxhY2Uob3duZXI9J0phbmUnKQogCi1FbnVtZXJhdGVkIGNvbnN0YW50cyBjYW4gYmUgaW1wbGVtZW50ZWQgd2l0aCBuYW1lZCB0dXBsZXMsIGJ1dCBpdCBpcyBzaW1wbGVyCi1hbmQgbW9yZSBlZmZpY2llbnQgdG8gdXNlIGEgc2ltcGxlIDpjbGFzczpgfmVudW0uRW51bWA6Ci0KLSAgICA+Pj4gU3RhdHVzID0gbmFtZWR0dXBsZSgnU3RhdHVzJywgJ29wZW4gcGVuZGluZyBjbG9zZWQnKS5fbWFrZShyYW5nZSgzKSkKLSAgICA+Pj4gU3RhdHVzLm9wZW4sIFN0YXR1cy5wZW5kaW5nLCBTdGF0dXMuY2xvc2VkCi0gICAgKDAsIDEsIDIpCi0gICAgPj4+IGZyb20gZW51bSBpbXBvcnQgRW51bQotICAgID4+PiBjbGFzcyBTdGF0dXMoRW51bSk6Ci0gICAgLi4uICAgICBvcGVuLCBwZW5kaW5nLCBjbG9zZWQgPSByYW5nZSgzKQotCiAKIC4uIHNlZWFsc286OgogCiAgICAgKiBgUmVjaXBlIGZvciBuYW1lZCB0dXBsZSBhYnN0cmFjdCBiYXNlIGNsYXNzIHdpdGggYSBtZXRhY2xhc3MgbWl4LWluCi0gICAgICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc3NjI5LW5hbWVkdHVwbGVhYmMtYWJzdHJhY3QtYmFzZS1jbGFzcy1taXgtaW4tZm9yLW5hbWVkLz5gXworICAgICAgPGh0dHBzOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvPmBfCiAgICAgICBieSBKYW4gS2FsaXN6ZXdza2kuICBCZXNpZGVzIHByb3ZpZGluZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AgZm9yCiAgICAgICBuYW1lZCB0dXBsZXMsIGl0IGFsc28gc3VwcG9ydHMgYW4gYWx0ZXJuYXRlIDp0ZXJtOmBtZXRhY2xhc3NgLWJhc2VkCiAgICAgICBjb25zdHJ1Y3RvciB0aGF0IGlzIGNvbnZlbmllbnQgZm9yIHVzZSBjYXNlcyB3aGVyZSBuYW1lZCB0dXBsZXMgYXJlIGJlaW5nCkBAIC05ODIsNiArMTAxOSw5IEBACiBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IHRoZWlyIG9yZGVyIGlzIGxvc3QgYmVjYXVzZSBQeXRob24ncyBmdW5jdGlvbiBjYWxsCiBzZW1hbnRpY3MgcGFzcyBpbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICBUaGUgaXRlbXMsIGtleXMsIGFuZCB2YWx1ZXMgOnRlcm06YHZpZXdzIDxkaWN0aW9uYXJ5IHZpZXc+YAorICAgb2YgOmNsYXNzOmBPcmRlcmVkRGljdGAgbm93IHN1cHBvcnQgcmV2ZXJzZSBpdGVyYXRpb24gdXNpbmcgOmZ1bmM6YHJldmVyc2VkYC4KIAogOmNsYXNzOmBPcmRlcmVkRGljdGAgRXhhbXBsZXMgYW5kIFJlY2lwZXMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCkBAIC05OTAsNyArMTAzMCw3IEBACiBpbiBjb25qdW5jdGlvbiB3aXRoIHNvcnRpbmcgdG8gbWFrZSBhIHNvcnRlZCBkaWN0aW9uYXJ5OjoKIAogICAgID4+PiAjIHJlZ3VsYXIgdW5zb3J0ZWQgZGljdGlvbmFyeQotICAgID4+PiBkID0geydiYW5hbmEnOiAzLCAnYXBwbGUnOjQsICdwZWFyJzogMSwgJ29yYW5nZSc6IDJ9CisgICAgPj4+IGQgPSB7J2JhbmFuYSc6IDMsICdhcHBsZSc6IDQsICdwZWFyJzogMSwgJ29yYW5nZSc6IDJ9CiAKICAgICA+Pj4gIyBkaWN0aW9uYXJ5IHNvcnRlZCBieSBrZXkKICAgICA+Pj4gT3JkZXJlZERpY3Qoc29ydGVkKGQuaXRlbXMoKSwga2V5PWxhbWJkYSB0OiB0WzBdKSkKQEAgLTExMTksMyArMTE1OSw3IEBACiAgICAgYmUgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBieXRlc2AsIDpjbGFzczpgc3RyYCwgOmNsYXNzOmBVc2VyU3RyaW5nYCAob3IgYQogICAgIHN1YmNsYXNzKSBvciBhbiBhcmJpdHJhcnkgc2VxdWVuY2Ugd2hpY2ggY2FuIGJlIGNvbnZlcnRlZCBpbnRvIGEgc3RyaW5nIHVzaW5nCiAgICAgdGhlIGJ1aWx0LWluIDpmdW5jOmBzdHJgIGZ1bmN0aW9uLgorCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICBOZXcgbWV0aG9kcyBgYF9fZ2V0bmV3YXJnc19fYGAsIGBgX19ybW9kX19gYCwgYGBjYXNlZm9sZGBgLAorICAgICAgIGBgZm9ybWF0X21hcGBgLCBgYGlzcHJpbnRhYmxlYGAsIGFuZCBgYG1ha2V0cmFuc2BgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29sb3JzeXMucnN0IGIvRG9jL2xpYnJhcnkvY29sb3JzeXMucnN0CmluZGV4IDIyNTMwNmMuLmMzM2Y1MzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbG9yc3lzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2xvcnN5cy5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IGNvbG9yc3lzCiAgICA6c3lub3BzaXM6IENvbnZlcnNpb24gZnVuY3Rpb25zIGJldHdlZW4gUkdCIGFuZCBvdGhlciBjb2xvciBzeXN0ZW1zLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogRGF2aWQgQXNjaGVyIDxkYUBweXRob24ubmV0PgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb2xvcnN5cy5weWAKQEAgLTIxLDcgKzIyLDcgQEAKIAogICAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb2xvciBzcGFjZXMgY2FuIGJlIGZvdW5kIGF0CiAgICBodHRwOi8vd3d3LnBveW50b24uY29tL0NvbG9yRkFRLmh0bWwgYW5kCi0gICBodHRwOi8vd3d3LmNhbWJyaWRnZWluY29sb3VyLmNvbS90dXRvcmlhbHMvY29sb3Itc3BhY2VzLmh0bS4KKyAgIGh0dHBzOi8vd3d3LmNhbWJyaWRnZWluY29sb3VyLmNvbS90dXRvcmlhbHMvY29sb3Itc3BhY2VzLmh0bS4KIAogVGhlIDptb2Q6YGNvbG9yc3lzYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29tcGlsZWFsbC5yc3QgYi9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdAppbmRleCA5NzEyZGUyLi41MTFjNTgxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdApAQCAtOCw3ICs4LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAotCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHRvIHN1cHBvcnQgaW5zdGFsbGluZyBQeXRob24KIGxpYnJhcmllcy4gIFRoZXNlIGZ1bmN0aW9ucyBjb21waWxlIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW4gYSBkaXJlY3RvcnkgdHJlZS4KIFRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgY2FjaGVkIGJ5dGUtY29kZSBmaWxlcyBhdCBsaWJyYXJ5CkBAIC00Miw3ICs0MSw4IEBACiAKIC4uIGNtZG9wdGlvbjo6IC1xCiAKLSAgIERvIG5vdCBwcmludCB0aGUgbGlzdCBvZiBmaWxlcyBjb21waWxlZCwgcHJpbnQgb25seSBlcnJvciBtZXNzYWdlcy4KKyAgIERvIG5vdCBwcmludCB0aGUgbGlzdCBvZiBmaWxlcyBjb21waWxlZC4gSWYgcGFzc2VkIG9uY2UsIGVycm9yIG1lc3NhZ2VzIHdpbGwKKyAgIHN0aWxsIGJlIHByaW50ZWQuIElmIHBhc3NlZCB0d2ljZSAoYGAtcXFgYCksIGFsbCBvdXRwdXQgaXMgc3VwcHJlc3NlZC4KIAogLi4gY21kb3B0aW9uOjogLWQgZGVzdGRpcgogCkBAIC03MCw5ICs3MCwyOCBAQAogICAgaXMgdG8gd3JpdGUgZmlsZXMgdG8gdGhlaXIgOnBlcDpgMzE0N2AgbG9jYXRpb25zIGFuZCBuYW1lcywgd2hpY2ggYWxsb3dzCiAgICBieXRlLWNvZGUgZmlsZXMgZnJvbSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBQeXRob24gdG8gY29leGlzdC4KIAorLi4gY21kb3B0aW9uOjogLXIKKworICAgQ29udHJvbCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGV2ZWwgZm9yIHN1YmRpcmVjdG9yaWVzLgorICAgSWYgdGhpcyBpcyBnaXZlbiwgdGhlbiBgYC1sYGAgb3B0aW9uIHdpbGwgbm90IGJlIHRha2VuIGludG8gYWNjb3VudC4KKyAgIDpwcm9ncmFtOmBweXRob24gLW0gY29tcGlsZWFsbCA8ZGlyZWN0b3J5PiAtciAwYCBpcyBlcXVpdmFsZW50IHRvCisgICA6cHJvZ3JhbTpgcHl0aG9uIC1tIGNvbXBpbGVhbGwgPGRpcmVjdG9yeT4gLWxgLgorCisuLiBjbWRvcHRpb246OiAtaiBOCisKKyAgIFVzZSAqTiogd29ya2VycyB0byBjb21waWxlIHRoZSBmaWxlcyB3aXRoaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAgIElmIGBgMGBgIGlzIHVzZWQsIHRoZW4gdGhlIHJlc3VsdCBvZiA6ZnVuYzpgb3MuY3B1X2NvdW50KClgCisgICB3aWxsIGJlIHVzZWQuCisKIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICBBZGRlZCB0aGUgYGAtaWBgLCBgYC1iYGAgYW5kIGBgLWhgYCBvcHRpb25zLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgQWRkZWQgdGhlICBgYC1qYGAsIGBgLXJgYCwgYW5kIGBgLXFxYGAgb3B0aW9ucy4gIGBgLXFgYCBvcHRpb24KKyAgIHdhcyBjaGFuZ2VkIHRvIGEgbXVsdGlsZXZlbCB2YWx1ZS4gIGBgLWJgYCB3aWxsIGFsd2F5cyBwcm9kdWNlIGEKKyAgIGJ5dGUtY29kZSBmaWxlIGVuZGluZyBpbiBgYC5weWNgYCwgbmV2ZXIgYGAucHlvYGAuCisKKwogVGhlcmUgaXMgbm8gY29tbWFuZC1saW5lIG9wdGlvbiB0byBjb250cm9sIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgdXNlZCBieSB0aGUKIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgUHl0aG9uIGludGVycHJldGVyIGl0c2VsZiBhbHJlYWR5CiBwcm92aWRlcyB0aGUgb3B0aW9uOiA6cHJvZ3JhbTpgcHl0aG9uIC1PIC1tIGNvbXBpbGVhbGxgLgpAQCAtODAsNyArOTksNyBAQAogUHVibGljIGZ1bmN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLQogCi0uLiBmdW5jdGlvbjo6IGNvbXBpbGVfZGlyKGRpciwgbWF4bGV2ZWxzPTEwLCBkZGlyPU5vbmUsIGZvcmNlPUZhbHNlLCByeD1Ob25lLCBxdWlldD1GYWxzZSwgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSkKKy4uIGZ1bmN0aW9uOjogY29tcGlsZV9kaXIoZGlyLCBtYXhsZXZlbHM9MTAsIGRkaXI9Tm9uZSwgZm9yY2U9RmFsc2UsIHJ4PU5vbmUsIHF1aWV0PTAsIGxlZ2FjeT1GYWxzZSwgb3B0aW1pemU9LTEsIHdvcmtlcnM9MSkKIAogICAgUmVjdXJzaXZlbHkgZGVzY2VuZCB0aGUgZGlyZWN0b3J5IHRyZWUgbmFtZWQgYnkgKmRpciosIGNvbXBpbGluZyBhbGwgOmZpbGU6YC5weWAKICAgIGZpbGVzIGFsb25nIHRoZSB3YXkuCkBAIC0xMDEsOCArMTIwLDkgQEAKICAgIGZpbGUgY29uc2lkZXJlZCBmb3IgY29tcGlsYXRpb24sIGFuZCBpZiBpdCByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgdGhlIGZpbGUKICAgIGlzIHNraXBwZWQuCiAKLSAgIElmICpxdWlldCogaXMgdHJ1ZSwgbm90aGluZyBpcyBwcmludGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdW5sZXNzIGVycm9ycwotICAgb2NjdXIuCisgICBJZiAqcXVpZXQqIGlzIGBgRmFsc2VgYCBvciBgYDBgYCAodGhlIGRlZmF1bHQpLCB0aGUgZmlsZW5hbWVzIGFuZCBvdGhlcgorICAgaW5mb3JtYXRpb24gYXJlIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0LiBTZXQgdG8gYGAxYGAsIG9ubHkgZXJyb3JzIGFyZQorICAgcHJpbnRlZC4gU2V0IHRvIGBgMmBgLCBhbGwgb3V0cHV0IGlzIHN1cHByZXNzZWQuCiAKICAgIElmICpsZWdhY3kqIGlzIHRydWUsIGJ5dGUtY29kZSBmaWxlcyBhcmUgd3JpdHRlbiB0byB0aGVpciBsZWdhY3kgbG9jYXRpb25zCiAgICBhbmQgbmFtZXMsIHdoaWNoIG1heSBvdmVyd3JpdGUgYnl0ZS1jb2RlIGZpbGVzIGNyZWF0ZWQgYnkgYW5vdGhlciB2ZXJzaW9uIG9mCkBAIC0xMTMsMTEgKzEzMywyNiBAQAogICAgKm9wdGltaXplKiBzcGVjaWZpZXMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBmb3IgdGhlIGNvbXBpbGVyLiAgSXQgaXMgcGFzc2VkIHRvCiAgICB0aGUgYnVpbHQtaW4gOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uLgogCisgICBUaGUgYXJndW1lbnQgKndvcmtlcnMqIHNwZWNpZmllcyBob3cgbWFueSB3b3JrZXJzIGFyZSB1c2VkIHRvCisgICBjb21waWxlIGZpbGVzIGluIHBhcmFsbGVsLiBUaGUgZGVmYXVsdCBpcyB0byBub3QgdXNlIG11bHRpcGxlIHdvcmtlcnMuCisgICBJZiB0aGUgcGxhdGZvcm0gY2FuJ3QgdXNlIG11bHRpcGxlIHdvcmtlcnMgYW5kICp3b3JrZXJzKiBhcmd1bWVudCBpcyBnaXZlbiwKKyAgIHRoZW4gc2VxdWVudGlhbCBjb21waWxhdGlvbiB3aWxsIGJlIHVzZWQgYXMgYSBmYWxsYmFjay4gIElmICp3b3JrZXJzKiBpcworICAgbG93ZXIgdGhhbiBgYDBgYCwgYSA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIHRoZSAqbGVnYWN5KiBhbmQgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCB0aGUgKndvcmtlcnMqIHBhcmFtZXRlci4KIAotLi4gZnVuY3Rpb246OiBjb21waWxlX2ZpbGUoZnVsbG5hbWUsIGRkaXI9Tm9uZSwgZm9yY2U9RmFsc2UsIHJ4PU5vbmUsIHF1aWV0PUZhbHNlLCBsZWdhY3k9RmFsc2UsIG9wdGltaXplPS0xKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICpxdWlldCogcGFyYW1ldGVyIHdhcyBjaGFuZ2VkIHRvIGEgbXVsdGlsZXZlbCB2YWx1ZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSAqbGVnYWN5KiBwYXJhbWV0ZXIgb25seSB3cml0ZXMgb3V0IGBgLnB5Y2BgIGZpbGVzLCBub3QgYGAucHlvYGAgZmlsZXMKKyAgICAgIG5vIG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBvZiAqb3B0aW1pemUqIGlzLgorCisuLiBmdW5jdGlvbjo6IGNvbXBpbGVfZmlsZShmdWxsbmFtZSwgZGRpcj1Ob25lLCBmb3JjZT1GYWxzZSwgcng9Tm9uZSwgcXVpZXQ9MCwgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSkKIAogICAgQ29tcGlsZSB0aGUgZmlsZSB3aXRoIHBhdGggKmZ1bGxuYW1lKi4KIApAQCAtMTMxLDggKzE2Niw5IEBACiAgICBmaWxlIGJlaW5nIGNvbXBpbGVkLCBhbmQgaWYgaXQgcmV0dXJucyBhIHRydWUgdmFsdWUsIHRoZSBmaWxlIGlzIG5vdAogICAgY29tcGlsZWQgYW5kIGBgVHJ1ZWBgIGlzIHJldHVybmVkLgogCi0gICBJZiAqcXVpZXQqIGlzIHRydWUsIG5vdGhpbmcgaXMgcHJpbnRlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHVubGVzcyBlcnJvcnMKLSAgIG9jY3VyLgorICAgSWYgKnF1aWV0KiBpcyBgYEZhbHNlYGAgb3IgYGAwYGAgKHRoZSBkZWZhdWx0KSwgdGhlIGZpbGVuYW1lcyBhbmQgb3RoZXIKKyAgIGluZm9ybWF0aW9uIGFyZSBwcmludGVkIHRvIHN0YW5kYXJkIG91dC4gU2V0IHRvIGBgMWBgLCBvbmx5IGVycm9ycyBhcmUKKyAgIHByaW50ZWQuIFNldCB0byBgYDJgYCwgYWxsIG91dHB1dCBpcyBzdXBwcmVzc2VkLgogCiAgICBJZiAqbGVnYWN5KiBpcyB0cnVlLCBieXRlLWNvZGUgZmlsZXMgYXJlIHdyaXR0ZW4gdG8gdGhlaXIgbGVnYWN5IGxvY2F0aW9ucwogICAgYW5kIG5hbWVzLCB3aGljaCBtYXkgb3ZlcndyaXRlIGJ5dGUtY29kZSBmaWxlcyBjcmVhdGVkIGJ5IGFub3RoZXIgdmVyc2lvbiBvZgpAQCAtMTQ1LDggKzE4MSwxNCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICpxdWlldCogcGFyYW1ldGVyIHdhcyBjaGFuZ2VkIHRvIGEgbXVsdGlsZXZlbCB2YWx1ZS4KIAotLi4gZnVuY3Rpb246OiBjb21waWxlX3BhdGgoc2tpcF9jdXJkaXI9VHJ1ZSwgbWF4bGV2ZWxzPTAsIGZvcmNlPUZhbHNlLCBsZWdhY3k9RmFsc2UsIG9wdGltaXplPS0xKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSAqbGVnYWN5KiBwYXJhbWV0ZXIgb25seSB3cml0ZXMgb3V0IGBgLnB5Y2BgIGZpbGVzLCBub3QgYGAucHlvYGAgZmlsZXMKKyAgICAgIG5vIG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBvZiAqb3B0aW1pemUqIGlzLgorCisuLiBmdW5jdGlvbjo6IGNvbXBpbGVfcGF0aChza2lwX2N1cmRpcj1UcnVlLCBtYXhsZXZlbHM9MCwgZm9yY2U9RmFsc2UsIHF1aWV0PTAsIGxlZ2FjeT1GYWxzZSwgb3B0aW1pemU9LTEpCiAKICAgIEJ5dGUtY29tcGlsZSBhbGwgdGhlIDpmaWxlOmAucHlgIGZpbGVzIGZvdW5kIGFsb25nIGBgc3lzLnBhdGhgYC4gSWYKICAgICpza2lwX2N1cmRpciogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgbm90IGluY2x1ZGVkCkBAIC0xNTcsNiArMTk5LDEyIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWRkZWQgdGhlICpsZWdhY3kqIGFuZCAqb3B0aW1pemUqIHBhcmFtZXRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICpxdWlldCogcGFyYW1ldGVyIHdhcyBjaGFuZ2VkIHRvIGEgbXVsdGlsZXZlbCB2YWx1ZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSAqbGVnYWN5KiBwYXJhbWV0ZXIgb25seSB3cml0ZXMgb3V0IGBgLnB5Y2BgIGZpbGVzLCBub3QgYGAucHlvYGAgZmlsZXMKKyAgICAgIG5vIG1hdHRlciB3aGF0IHRoZSB2YWx1ZSBvZiAqb3B0aW1pemUqIGlzLgogCiBUbyBmb3JjZSBhIHJlY29tcGlsZSBvZiBhbGwgdGhlIDpmaWxlOmAucHlgIGZpbGVzIGluIHRoZSA6ZmlsZTpgTGliL2AKIHN1YmRpcmVjdG9yeSBhbmQgYWxsIGl0cyBzdWJkaXJlY3Rvcmllczo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdAppbmRleCBlNjNlNzQxLi5hZTAzZjRiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKQEAgLTM4LDE3ICszOCwyNiBAQAogICAgICAgICAgICAgICBmdXR1cmUgPSBleGVjdXRvci5zdWJtaXQocG93LCAzMjMsIDEyMzUpCiAgICAgICAgICAgICAgIHByaW50KGZ1dHVyZS5yZXN1bHQoKSkKIAotICAgIC4uIG1ldGhvZDo6IG1hcChmdW5jLCAqaXRlcmFibGVzLCB0aW1lb3V0PU5vbmUpCisgICAgLi4gbWV0aG9kOjogbWFwKGZ1bmMsICppdGVyYWJsZXMsIHRpbWVvdXQ9Tm9uZSwgY2h1bmtzaXplPTEpCiAKICAgICAgICBFcXVpdmFsZW50IHRvIDpmdW5jOmBtYXAoZnVuYywgKml0ZXJhYmxlcykgPG1hcD5gIGV4Y2VwdCAqZnVuYyogaXMgZXhlY3V0ZWQKICAgICAgICBhc3luY2hyb25vdXNseSBhbmQgc2V2ZXJhbCBjYWxscyB0byAqZnVuYyogbWF5IGJlIG1hZGUgY29uY3VycmVudGx5LiAgVGhlCi0gICAgICAgcmV0dXJuZWQgaXRlcmF0b3IgcmFpc2VzIGEgOmV4YzpgVGltZW91dEVycm9yYCBpZgorICAgICAgIHJldHVybmVkIGl0ZXJhdG9yIHJhaXNlcyBhIDpleGM6YGNvbmN1cnJlbnQuZnV0dXJlcy5UaW1lb3V0RXJyb3JgIGlmCiAgICAgICAgOm1ldGg6YH5pdGVyYXRvci5fX25leHRfX2AgaXMgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZQogICAgICAgIGFmdGVyICp0aW1lb3V0KiBzZWNvbmRzIGZyb20gdGhlIG9yaWdpbmFsIGNhbGwgdG8gOm1ldGg6YEV4ZWN1dG9yLm1hcGAuCiAgICAgICAgKnRpbWVvdXQqIGNhbiBiZSBhbiBpbnQgb3IgYSBmbG9hdC4gIElmICp0aW1lb3V0KiBpcyBub3Qgc3BlY2lmaWVkIG9yCiAgICAgICAgYGBOb25lYGAsIHRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSB3YWl0IHRpbWUuICBJZiBhIGNhbGwgcmFpc2VzIGFuCiAgICAgICAgZXhjZXB0aW9uLCB0aGVuIHRoYXQgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdoZW4gaXRzIHZhbHVlIGlzCi0gICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGl0ZXJhdG9yLgorICAgICAgIHJldHJpZXZlZCBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiB1c2luZyA6Y2xhc3M6YFByb2Nlc3NQb29sRXhlY3V0b3JgLCB0aGlzCisgICAgICAgbWV0aG9kIGNob3BzICppdGVyYWJsZXMqIGludG8gYSBudW1iZXIgb2YgY2h1bmtzIHdoaWNoIGl0IHN1Ym1pdHMgdG8gdGhlCisgICAgICAgcG9vbCBhcyBzZXBhcmF0ZSB0YXNrcy4gVGhlIChhcHByb3hpbWF0ZSkgc2l6ZSBvZiB0aGVzZSBjaHVua3MgY2FuIGJlCisgICAgICAgc3BlY2lmaWVkIGJ5IHNldHRpbmcgKmNodW5rc2l6ZSogdG8gYSBwb3NpdGl2ZSBpbnRlZ2VyLiBGb3IgdmVyeSBsb25nCisgICAgICAgaXRlcmFibGVzLCB1c2luZyBhIGxhcmdlIHZhbHVlIGZvciAqY2h1bmtzaXplKiBjYW4gc2lnbmlmaWNhbnRseSBpbXByb3ZlCisgICAgICAgcGVyZm9ybWFuY2UgY29tcGFyZWQgdG8gdGhlIGRlZmF1bHQgc2l6ZSBvZiAxLiBXaXRoIDpjbGFzczpgVGhyZWFkUG9vbEV4ZWN1dG9yYCwKKyAgICAgICAqY2h1bmtzaXplKiBoYXMgbm8gZWZmZWN0LgorCisgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICAgICBBZGRlZCB0aGUgKmNodW5rc2l6ZSogYXJndW1lbnQuCiAKICAgICAuLiBtZXRob2Q6OiBzaHV0ZG93bih3YWl0PVRydWUpCiAKQEAgLTkwLDEyICs5OSwxMiBAQAogICAgaW1wb3J0IHRpbWUKICAgIGRlZiB3YWl0X29uX2IoKToKICAgICAgICB0aW1lLnNsZWVwKDUpCi0gICAgICAgcHJpbnQoYi5yZXN1bHQoKSkgIyBiIHdpbGwgbmV2ZXIgY29tcGxldGUgYmVjYXVzZSBpdCBpcyB3YWl0aW5nIG9uIGEuCisgICAgICAgcHJpbnQoYi5yZXN1bHQoKSkgICMgYiB3aWxsIG5ldmVyIGNvbXBsZXRlIGJlY2F1c2UgaXQgaXMgd2FpdGluZyBvbiBhLgogICAgICAgIHJldHVybiA1CiAKICAgIGRlZiB3YWl0X29uX2EoKToKICAgICAgICB0aW1lLnNsZWVwKDUpCi0gICAgICAgcHJpbnQoYS5yZXN1bHQoKSkgIyBhIHdpbGwgbmV2ZXIgY29tcGxldGUgYmVjYXVzZSBpdCBpcyB3YWl0aW5nIG9uIGIuCisgICAgICAgcHJpbnQoYS5yZXN1bHQoKSkgICMgYSB3aWxsIG5ldmVyIGNvbXBsZXRlIGJlY2F1c2UgaXQgaXMgd2FpdGluZyBvbiBiLgogICAgICAgIHJldHVybiA2CiAKIApAQCAtMTE1LDExICsxMjQsMTkgQEAKICAgIGV4ZWN1dG9yLnN1Ym1pdCh3YWl0X29uX2Z1dHVyZSkKIAogCi0uLiBjbGFzczo6IFRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2VycykKKy4uIGNsYXNzOjogVGhyZWFkUG9vbEV4ZWN1dG9yKG1heF93b3JrZXJzPU5vbmUpCiAKICAgIEFuIDpjbGFzczpgRXhlY3V0b3JgIHN1YmNsYXNzIHRoYXQgdXNlcyBhIHBvb2wgb2YgYXQgbW9zdCAqbWF4X3dvcmtlcnMqCiAgICB0aHJlYWRzIHRvIGV4ZWN1dGUgY2FsbHMgYXN5bmNocm9ub3VzbHkuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBJZiAqbWF4X3dvcmtlcnMqIGlzIGBgTm9uZWBgIG9yCisgICAgICBub3QgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgb24gdGhlIG1hY2hpbmUsCisgICAgICBtdWx0aXBsaWVkIGJ5IGBgNWBgLCBhc3N1bWluZyB0aGF0IDpjbGFzczpgVGhyZWFkUG9vbEV4ZWN1dG9yYCBpcyBvZnRlbgorICAgICAgdXNlZCB0byBvdmVybGFwIEkvTyBpbnN0ZWFkIG9mIENQVSB3b3JrIGFuZCB0aGUgbnVtYmVyIG9mIHdvcmtlcnMKKyAgICAgIHNob3VsZCBiZSBoaWdoZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHdvcmtlcnMKKyAgICAgIGZvciA6Y2xhc3M6YFByb2Nlc3NQb29sRXhlY3V0b3JgLgorCiAKIC4uIF90aHJlYWRwb29sZXhlY3V0b3ItZXhhbXBsZToKIApAQCAtMTM2LDcgKzE1Myw3IEBACiAgICAgICAgICAgICdodHRwOi8vd3d3LmJiYy5jby51ay8nLAogICAgICAgICAgICAnaHR0cDovL3NvbWUtbWFkZS11cC1kb21haW4uY29tLyddCiAKLSAgICMgUmV0cmlldmUgYSBzaW5nbGUgcGFnZSBhbmQgcmVwb3J0IHRoZSB1cmwgYW5kIGNvbnRlbnRzCisgICAjIFJldHJpZXZlIGEgc2luZ2xlIHBhZ2UgYW5kIHJlcG9ydCB0aGUgVVJMIGFuZCBjb250ZW50cwogICAgZGVmIGxvYWRfdXJsKHVybCwgdGltZW91dCk6CiAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHVybCwgdGltZW91dD10aW1lb3V0KSBhcyBjb25uOgogICAgICAgICAgICByZXR1cm4gY29ubi5yZWFkKCkKQEAgLTE3NSw2ICsxOTIsOCBAQAogICAgQW4gOmNsYXNzOmBFeGVjdXRvcmAgc3ViY2xhc3MgdGhhdCBleGVjdXRlcyBjYWxscyBhc3luY2hyb25vdXNseSB1c2luZyBhIHBvb2wKICAgIG9mIGF0IG1vc3QgKm1heF93b3JrZXJzKiBwcm9jZXNzZXMuICBJZiAqbWF4X3dvcmtlcnMqIGlzIGBgTm9uZWBgIG9yIG5vdAogICAgZ2l2ZW4sIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgb24gdGhlIG1hY2hpbmUuCisgICBJZiAqbWF4X3dvcmtlcnMqIGlzIGxvd2VyIG9yIGVxdWFsIHRvIGBgMGBgLCB0aGVuIGEgOmV4YzpgVmFsdWVFcnJvcmAKKyAgIHdpbGwgYmUgcmFpc2VkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgV2hlbiBvbmUgb2YgdGhlIHdvcmtlciBwcm9jZXNzZXMgdGVybWluYXRlcyBhYnJ1cHRseSwgYQpAQCAtMjU1LDExICsyNzQsMTIgQEAKIAogICAgICAgIFJldHVybiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGNhbGwuIElmIHRoZSBjYWxsIGhhc24ndCB5ZXQgY29tcGxldGVkCiAgICAgICAgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHdhaXQgdXAgdG8gKnRpbWVvdXQqIHNlY29uZHMuICBJZiB0aGUgY2FsbCBoYXNuJ3QKLSAgICAgICBjb21wbGV0ZWQgaW4gKnRpbWVvdXQqIHNlY29uZHMsIHRoZW4gYSA6ZXhjOmBUaW1lb3V0RXJyb3JgIHdpbGwgYmUKLSAgICAgICByYWlzZWQuICp0aW1lb3V0KiBjYW4gYmUgYW4gaW50IG9yIGZsb2F0LiAgSWYgKnRpbWVvdXQqIGlzIG5vdCBzcGVjaWZpZWQKLSAgICAgICBvciBgYE5vbmVgYCwgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIHdhaXQgdGltZS4KKyAgICAgICBjb21wbGV0ZWQgaW4gKnRpbWVvdXQqIHNlY29uZHMsIHRoZW4gYQorICAgICAgIDpleGM6YGNvbmN1cnJlbnQuZnV0dXJlcy5UaW1lb3V0RXJyb3JgIHdpbGwgYmUgcmFpc2VkLiAqdGltZW91dCogY2FuIGJlCisgICAgICAgYW4gaW50IG9yIGZsb2F0LiAgSWYgKnRpbWVvdXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgYGBOb25lYGAsIHRoZXJlIGlzIG5vCisgICAgICAgbGltaXQgdG8gdGhlIHdhaXQgdGltZS4KIAotICAgICAgIElmIHRoZSBmdXR1cmUgaXMgY2FuY2VsbGVkIGJlZm9yZSBjb21wbGV0aW5nIHRoZW4gOmV4YzpgQ2FuY2VsbGVkRXJyb3JgCisgICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBjYW5jZWxsZWQgYmVmb3JlIGNvbXBsZXRpbmcgdGhlbiA6ZXhjOmAuQ2FuY2VsbGVkRXJyb3JgCiAgICAgICAgd2lsbCBiZSByYWlzZWQuCiAKICAgICAgICBJZiB0aGUgY2FsbCByYWlzZWQsIHRoaXMgbWV0aG9kIHdpbGwgcmFpc2UgdGhlIHNhbWUgZXhjZXB0aW9uLgpAQCAtMjY4LDExICsyODgsMTIgQEAKIAogICAgICAgIFJldHVybiB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgY2FsbC4gIElmIHRoZSBjYWxsIGhhc24ndCB5ZXQKICAgICAgICBjb21wbGV0ZWQgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHdhaXQgdXAgdG8gKnRpbWVvdXQqIHNlY29uZHMuICBJZiB0aGUKLSAgICAgICBjYWxsIGhhc24ndCBjb21wbGV0ZWQgaW4gKnRpbWVvdXQqIHNlY29uZHMsIHRoZW4gYSA6ZXhjOmBUaW1lb3V0RXJyb3JgCi0gICAgICAgd2lsbCBiZSByYWlzZWQuICAqdGltZW91dCogY2FuIGJlIGFuIGludCBvciBmbG9hdC4gIElmICp0aW1lb3V0KiBpcyBub3QKLSAgICAgICBzcGVjaWZpZWQgb3IgYGBOb25lYGAsIHRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSB3YWl0IHRpbWUuCisgICAgICAgY2FsbCBoYXNuJ3QgY29tcGxldGVkIGluICp0aW1lb3V0KiBzZWNvbmRzLCB0aGVuIGEKKyAgICAgICA6ZXhjOmBjb25jdXJyZW50LmZ1dHVyZXMuVGltZW91dEVycm9yYCB3aWxsIGJlIHJhaXNlZC4gICp0aW1lb3V0KiBjYW4gYmUKKyAgICAgICBhbiBpbnQgb3IgZmxvYXQuICBJZiAqdGltZW91dCogaXMgbm90IHNwZWNpZmllZCBvciBgYE5vbmVgYCwgdGhlcmUgaXMgbm8KKyAgICAgICBsaW1pdCB0byB0aGUgd2FpdCB0aW1lLgogCi0gICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBjYW5jZWxsZWQgYmVmb3JlIGNvbXBsZXRpbmcgdGhlbiA6ZXhjOmBDYW5jZWxsZWRFcnJvcmAKKyAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGNhbmNlbGxlZCBiZWZvcmUgY29tcGxldGluZyB0aGVuIDpleGM6YC5DYW5jZWxsZWRFcnJvcmAKICAgICAgICB3aWxsIGJlIHJhaXNlZC4KIAogICAgICAgIElmIHRoZSBjYWxsIGNvbXBsZXRlZCB3aXRob3V0IHJhaXNpbmcsIGBgTm9uZWBgIGlzIHJldHVybmVkLgpAQCAtMzcyLDEzICszOTMsMTIgQEAKICAgIFJldHVybnMgYW4gaXRlcmF0b3Igb3ZlciB0aGUgOmNsYXNzOmBGdXR1cmVgIGluc3RhbmNlcyAocG9zc2libHkgY3JlYXRlZCBieQogICAgZGlmZmVyZW50IDpjbGFzczpgRXhlY3V0b3JgIGluc3RhbmNlcykgZ2l2ZW4gYnkgKmZzKiB0aGF0IHlpZWxkcyBmdXR1cmVzIGFzCiAgICB0aGV5IGNvbXBsZXRlIChmaW5pc2hlZCBvciB3ZXJlIGNhbmNlbGxlZCkuIEFueSBmdXR1cmVzIGdpdmVuIGJ5ICpmcyogdGhhdAotICAgYXJlIGR1cGxpY2F0ZWQgd2lsbCBiZSByZXR1cm5lZCBvbmNlLiBBbnkgZnV0dXJlcyB0aGF0IGNvbXBsZXRlZAotICAgYmVmb3JlIDpmdW5jOmBhc19jb21wbGV0ZWRgIGlzIGNhbGxlZCB3aWxsIGJlIHlpZWxkZWQgZmlyc3QuICBUaGUgcmV0dXJuZWQKLSAgIGl0ZXJhdG9yIHJhaXNlcyBhIDpleGM6YFRpbWVvdXRFcnJvcmAgaWYgOm1ldGg6YH5pdGVyYXRvci5fX25leHRfX2AgaXMKLSAgIGNhbGxlZCBhbmQgdGhlIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgYWZ0ZXIgKnRpbWVvdXQqIHNlY29uZHMgZnJvbSB0aGUKLSAgIG9yaWdpbmFsIGNhbGwgdG8gOmZ1bmM6YGFzX2NvbXBsZXRlZGAuICAqdGltZW91dCogY2FuIGJlIGFuIGludCBvciBmbG9hdC4KLSAgIElmICp0aW1lb3V0KiBpcyBub3Qgc3BlY2lmaWVkIG9yIGBgTm9uZWBgLCB0aGVyZSBpcyBubyBsaW1pdCB0byB0aGUgd2FpdAotICAgdGltZS4KKyAgIGFyZSBkdXBsaWNhdGVkIHdpbGwgYmUgcmV0dXJuZWQgb25jZS4gQW55IGZ1dHVyZXMgdGhhdCBjb21wbGV0ZWQgYmVmb3JlCisgICA6ZnVuYzpgYXNfY29tcGxldGVkYCBpcyBjYWxsZWQgd2lsbCBiZSB5aWVsZGVkIGZpcnN0LiAgVGhlIHJldHVybmVkIGl0ZXJhdG9yCisgICByYWlzZXMgYSA6ZXhjOmBjb25jdXJyZW50LmZ1dHVyZXMuVGltZW91dEVycm9yYCBpZiA6bWV0aDpgfml0ZXJhdG9yLl9fbmV4dF9fYAorICAgaXMgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBhZnRlciAqdGltZW91dCogc2Vjb25kcyBmcm9tIHRoZQorICAgb3JpZ2luYWwgY2FsbCB0byA6ZnVuYzpgYXNfY29tcGxldGVkYC4gICp0aW1lb3V0KiBjYW4gYmUgYW4gaW50IG9yIGZsb2F0LiBJZgorICAgKnRpbWVvdXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgYGBOb25lYGAsIHRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSB3YWl0IHRpbWUuCiAKIAogLi4gc2VlYWxzbzo6CkBAIC0zOTEsNiArNDExLDE2IEBACiBFeGNlcHRpb24gY2xhc3NlcwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gY3VycmVudG1vZHVsZTo6IGNvbmN1cnJlbnQuZnV0dXJlcworCisuLiBleGNlcHRpb246OiBDYW5jZWxsZWRFcnJvcgorCisgICBSYWlzZWQgd2hlbiBhIGZ1dHVyZSBpcyBjYW5jZWxsZWQuCisKKy4uIGV4Y2VwdGlvbjo6IFRpbWVvdXRFcnJvcgorCisgICBSYWlzZWQgd2hlbiBhIGZ1dHVyZSBvcGVyYXRpb24gZXhjZWVkcyB0aGUgZ2l2ZW4gdGltZW91dC4KKwogLi4gY3VycmVudG1vZHVsZTo6IGNvbmN1cnJlbnQuZnV0dXJlcy5wcm9jZXNzCiAKIC4uIGV4Y2VwdGlvbjo6IEJyb2tlblByb2Nlc3NQb29sCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0IGIvRG9jL2xpYnJhcnkvY29uZmlncGFyc2VyLnJzdAppbmRleCA5MjU1MWJjLi5hOWE1ZjVhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5yc3QKQEAgLTExLDEyICsxMSwxNiBAQAogLi4gc2VjdGlvbmF1dGhvcjo6IENocmlzdG9waGVyIEcuIFBldHJpbGxpIDxwZXRyaWxsaUBhbWJlci5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogxYF1a2FzeiBMYW5nYSA8bHVrYXN6QGxhbmdhLnBsPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb25maWdwYXJzZXIucHlgCisKIC4uIGluZGV4OjoKICAgIHBhaXI6IC5pbmk7IGZpbGUKICAgIHBhaXI6IGNvbmZpZ3VyYXRpb247IGZpbGUKICAgIHNpbmdsZTogaW5pIGZpbGUKICAgIHNpbmdsZTogV2luZG93cyBpbmkgZmlsZQogCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgOmNsYXNzOmBDb25maWdQYXJzZXJgIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgYSBiYXNpYwogY29uZmlndXJhdGlvbiBsYW5ndWFnZSB3aGljaCBwcm92aWRlcyBhIHN0cnVjdHVyZSBzaW1pbGFyIHRvIHdoYXQncyBmb3VuZCBpbgogTWljcm9zb2Z0IFdpbmRvd3MgSU5JIGZpbGVzLiAgWW91IGNhbiB1c2UgdGhpcyB0byB3cml0ZSBQeXRob24gcHJvZ3JhbXMgd2hpY2gKQEAgLTYyLDcgKzY2LDcgQEAKIDwjc3VwcG9ydGVkLWluaS1maWxlLXN0cnVjdHVyZT5gXy4gIEVzc2VudGlhbGx5LCB0aGUgZmlsZQogY29uc2lzdHMgb2Ygc2VjdGlvbnMsIGVhY2ggb2Ygd2hpY2ggY29udGFpbnMga2V5cyB3aXRoIHZhbHVlcy4KIDptb2Q6YGNvbmZpZ3BhcnNlcmAgY2xhc3NlcyBjYW4gcmVhZCBhbmQgd3JpdGUgc3VjaCBmaWxlcy4gIExldCdzIHN0YXJ0IGJ5Ci1jcmVhdGluZyB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiBmaWxlIHByb2dyYW1hdGljYWxseS4KK2NyZWF0aW5nIHRoZSBhYm92ZSBjb25maWd1cmF0aW9uIGZpbGUgcHJvZ3JhbW1hdGljYWxseS4KIAogLi4gZG9jdGVzdDo6CiAKQEAgLTE0MiwxMiArMTQ2LDEzIEBACiAgICA+Pj4gZmxvYXQodG9wc2VjcmV0WydDb21wcmVzc2lvbkxldmVsJ10pCiAgICA5LjAKIAotRXh0cmFjdGluZyBCb29sZWFuIHZhbHVlcyBpcyBub3QgdGhhdCBzaW1wbGUsIHRob3VnaC4gIFBhc3NpbmcgdGhlIHZhbHVlCi10byBgYGJvb2woKWBgIHdvdWxkIGRvIG5vIGdvb2Qgc2luY2UgYGBib29sKCdGYWxzZScpYGAgaXMgc3RpbGwKLWBgVHJ1ZWBgLiAgVGhpcyBpcyB3aHkgY29uZmlnIHBhcnNlcnMgYWxzbyBwcm92aWRlIDptZXRoOmBnZXRib29sZWFuYC4KLVRoaXMgbWV0aG9kIGlzIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHJlY29nbml6ZXMgQm9vbGVhbiB2YWx1ZXMgZnJvbQotYGAneWVzJ2BgL2BgJ25vJ2BgLCBgYCdvbidgYC9gYCdvZmYnYGAgYW5kIGBgJzEnYGAvYGAnMCdgYCBbMV1fLgotRm9yIGV4YW1wbGU6CitTaW5jZSB0aGlzIHRhc2sgaXMgc28gY29tbW9uLCBjb25maWcgcGFyc2VycyBwcm92aWRlIGEgcmFuZ2Ugb2YgaGFuZHkgZ2V0dGVyCittZXRob2RzIHRvIGhhbmRsZSBpbnRlZ2VycywgZmxvYXRzIGFuZCBib29sZWFucy4gIFRoZSBsYXN0IG9uZSBpcyB0aGUgbW9zdAoraW50ZXJlc3RpbmcgYmVjYXVzZSBzaW1wbHkgcGFzc2luZyB0aGUgdmFsdWUgdG8gYGBib29sKClgYCB3b3VsZCBkbyBubyBnb29kCitzaW5jZSBgYGJvb2woJ0ZhbHNlJylgYCBpcyBzdGlsbCBgYFRydWVgYC4gIFRoaXMgaXMgd2h5IGNvbmZpZyBwYXJzZXJzIGFsc28KK3Byb3ZpZGUgOm1ldGg6YGdldGJvb2xlYW5gLiAgVGhpcyBtZXRob2QgaXMgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgcmVjb2duaXplcworQm9vbGVhbiB2YWx1ZXMgZnJvbSBgYCd5ZXMnYGAvYGAnbm8nYGAsIGBgJ29uJ2BgL2BgJ29mZidgYCwKK2BgJ3RydWUnYGAvYGAnZmFsc2UnYGAgYW5kIGBgJzEnYGAvYGAnMCdgYCBbMV1fLiAgRm9yIGV4YW1wbGU6CiAKIC4uIGRvY3Rlc3Q6OgogCkBAIC0xNTksMTAgKzE2NCw4IEBACiAgICBUcnVlCiAKIEFwYXJ0IGZyb20gOm1ldGg6YGdldGJvb2xlYW5gLCBjb25maWcgcGFyc2VycyBhbHNvIHByb3ZpZGUgZXF1aXZhbGVudAotOm1ldGg6YGdldGludGAgYW5kIDptZXRoOmBnZXRmbG9hdGAgbWV0aG9kcywgYnV0IHRoZXNlIGFyZSBmYXIgbGVzcwotdXNlZnVsIHNpbmNlIGNvbnZlcnNpb24gdXNpbmcgOmZ1bmM6YGludGAgYW5kIDpmdW5jOmBmbG9hdGAgaXMKLXN1ZmZpY2llbnQgZm9yIHRoZXNlIHR5cGVzLgotCis6bWV0aDpgZ2V0aW50YCBhbmQgOm1ldGg6YGdldGZsb2F0YCBtZXRob2RzLiAgWW91IGNhbiByZWdpc3RlciB5b3VyIG93bgorY29udmVydGVycyBhbmQgY3VzdG9taXplIHRoZSBwcm92aWRlZCBvbmVzLiBbMV1fCiAKIEZhbGxiYWNrIFZhbHVlcwogLS0tLS0tLS0tLS0tLS0tCkBAIC0zMTcsMTEgKzMyMCwxMSBAQAogLi4gY2xhc3M6OiBFeHRlbmRlZEludGVycG9sYXRpb24oKQogCiAgICBBbiBhbHRlcm5hdGl2ZSBoYW5kbGVyIGZvciBpbnRlcnBvbGF0aW9uIHdoaWNoIGltcGxlbWVudHMgYSBtb3JlIGFkdmFuY2VkCi0gICBzeW50YXgsIHVzZWQgZm9yIGluc3RhbmNlIGluIGBgemMuYnVpbGRvdXRgYC4gRXh0ZW5kZWQgaW50ZXJwb2xhdGlvbiBpcworICAgc3ludGF4LCB1c2VkIGZvciBpbnN0YW5jZSBpbiBgYHpjLmJ1aWxkb3V0YGAuICBFeHRlbmRlZCBpbnRlcnBvbGF0aW9uIGlzCiAgICB1c2luZyBgYCR7c2VjdGlvbjpvcHRpb259YGAgdG8gZGVub3RlIGEgdmFsdWUgZnJvbSBhIGZvcmVpZ24gc2VjdGlvbi4KLSAgIEludGVycG9sYXRpb24gY2FuIHNwYW4gbXVsdGlwbGUgbGV2ZWxzLiBGb3IgY29udmVuaWVuY2UsIGlmIHRoZSBgYHNlY3Rpb246YGAKLSAgIHBhcnQgaXMgb21pdHRlZCwgaW50ZXJwb2xhdGlvbiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBzZWN0aW9uIChhbmQgcG9zc2libHkKLSAgIHRoZSBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBzcGVjaWFsIHNlY3Rpb24pLgorICAgSW50ZXJwb2xhdGlvbiBjYW4gc3BhbiBtdWx0aXBsZSBsZXZlbHMuICBGb3IgY29udmVuaWVuY2UsIGlmIHRoZQorICAgYGBzZWN0aW9uOmBgIHBhcnQgaXMgb21pdHRlZCwgaW50ZXJwb2xhdGlvbiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBzZWN0aW9uCisgICAoYW5kIHBvc3NpYmx5IHRoZSBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBzcGVjaWFsIHNlY3Rpb24pLgogCiAgICBGb3IgZXhhbXBsZSwgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGFib3ZlIHdpdGggYmFzaWMgaW50ZXJwb2xhdGlvbiwKICAgIHdvdWxkIGxvb2sgbGlrZSB0aGlzIHdpdGggZXh0ZW5kZWQgaW50ZXJwb2xhdGlvbjoKQEAgLTM5OSwxMyArNDAyLDEzIEBACiAgICogYGBwYXJzZXIucG9waXRlbSgpYGAgbmV2ZXIgcmV0dXJucyBpdC4KIAogKiBgYHBhcnNlci5nZXQoc2VjdGlvbiwgb3B0aW9uLCAqKmt3YXJncylgYCAtIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgKipub3QqKgotICBhIGZhbGxiYWNrIHZhbHVlLiBOb3RlIGhvd2V2ZXIgdGhhdCB0aGUgc2VjdGlvbi1sZXZlbCBgYGdldCgpYGAgbWV0aG9kcyBhcmUKKyAgYSBmYWxsYmFjayB2YWx1ZS4gIE5vdGUgaG93ZXZlciB0aGF0IHRoZSBzZWN0aW9uLWxldmVsIGBgZ2V0KClgYCBtZXRob2RzIGFyZQogICBjb21wYXRpYmxlIGJvdGggd2l0aCB0aGUgbWFwcGluZyBwcm90b2NvbCBhbmQgdGhlIGNsYXNzaWMgY29uZmlncGFyc2VyIEFQSS4KIAogKiBgYHBhcnNlci5pdGVtcygpYGAgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBtYXBwaW5nIHByb3RvY29sIChyZXR1cm5zIGEgbGlzdCBvZgogICAqc2VjdGlvbl9uYW1lKiwgKnNlY3Rpb25fcHJveHkqIHBhaXJzIGluY2x1ZGluZyB0aGUgREVGQVVMVFNFQ1QpLiAgSG93ZXZlciwKICAgdGhpcyBtZXRob2QgY2FuIGFsc28gYmUgaW52b2tlZCB3aXRoIGFyZ3VtZW50czogYGBwYXJzZXIuaXRlbXMoc2VjdGlvbiwgcmF3LAotICB2YXJzKWBgLiBUaGUgbGF0dGVyIGNhbGwgcmV0dXJucyBhIGxpc3Qgb2YgKm9wdGlvbiosICp2YWx1ZSogcGFpcnMgZm9yCisgIHZhcnMpYGAuICBUaGUgbGF0dGVyIGNhbGwgcmV0dXJucyBhIGxpc3Qgb2YgKm9wdGlvbiosICp2YWx1ZSogcGFpcnMgZm9yCiAgIGEgc3BlY2lmaWVkIGBgc2VjdGlvbmBgLCB3aXRoIGFsbCBpbnRlcnBvbGF0aW9ucyBleHBhbmRlZCAodW5sZXNzCiAgIGBgcmF3PVRydWVgYCBpcyBwcm92aWRlZCkuCiAKQEAgLTUzOSw5ICs1NDIsOSBAQAogCiAqICpkZWxpbWl0ZXJzKiwgZGVmYXVsdCB2YWx1ZTogYGAoJz0nLCAnOicpYGAKIAotICBEZWxpbWl0ZXJzIGFyZSBzdWJzdHJpbmdzIHRoYXQgZGVsaW1pdCBrZXlzIGZyb20gdmFsdWVzIHdpdGhpbiBhIHNlY3Rpb24uIFRoZQotICBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgZGVsaW1pdGluZyBzdWJzdHJpbmcgb24gYSBsaW5lIGlzIGNvbnNpZGVyZWQgYSBkZWxpbWl0ZXIuCi0gIFRoaXMgbWVhbnMgdmFsdWVzIChidXQgbm90IGtleXMpIGNhbiBjb250YWluIHRoZSBkZWxpbWl0ZXJzLgorICBEZWxpbWl0ZXJzIGFyZSBzdWJzdHJpbmdzIHRoYXQgZGVsaW1pdCBrZXlzIGZyb20gdmFsdWVzIHdpdGhpbiBhIHNlY3Rpb24uCisgIFRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgZGVsaW1pdGluZyBzdWJzdHJpbmcgb24gYSBsaW5lIGlzIGNvbnNpZGVyZWQKKyAgYSBkZWxpbWl0ZXIuICBUaGlzIG1lYW5zIHZhbHVlcyAoYnV0IG5vdCBrZXlzKSBjYW4gY29udGFpbiB0aGUgZGVsaW1pdGVycy4KIAogICBTZWUgYWxzbyB0aGUgKnNwYWNlX2Fyb3VuZF9kZWxpbWl0ZXJzKiBhcmd1bWVudCB0bwogICA6bWV0aDpgQ29uZmlnUGFyc2VyLndyaXRlYC4KQEAgLTU1Myw3ICs1NTYsNyBAQAogICBDb21tZW50IHByZWZpeGVzIGFyZSBzdHJpbmdzIHRoYXQgaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGEgdmFsaWQgY29tbWVudCB3aXRoaW4KICAgYSBjb25maWcgZmlsZS4gKmNvbW1lbnRfcHJlZml4ZXMqIGFyZSB1c2VkIG9ubHkgb24gb3RoZXJ3aXNlIGVtcHR5IGxpbmVzCiAgIChvcHRpb25hbGx5IGluZGVudGVkKSB3aGVyZWFzICppbmxpbmVfY29tbWVudF9wcmVmaXhlcyogY2FuIGJlIHVzZWQgYWZ0ZXIKLSAgZXZlcnkgdmFsaWQgdmFsdWUgKGUuZy4gIHNlY3Rpb24gbmFtZXMsIG9wdGlvbnMgYW5kIGVtcHR5IGxpbmVzIGFzIHdlbGwpLiBCeQorICBldmVyeSB2YWxpZCB2YWx1ZSAoZS5nLiBzZWN0aW9uIG5hbWVzLCBvcHRpb25zIGFuZCBlbXB0eSBsaW5lcyBhcyB3ZWxsKS4gIEJ5CiAgIGRlZmF1bHQgaW5saW5lIGNvbW1lbnRzIGFyZSBkaXNhYmxlZCBhbmQgYGAnIydgYCBhbmQgYGAnOydgYCBhcmUgdXNlZCBhcwogICBwcmVmaXhlcyBmb3Igd2hvbGUgbGluZSBjb21tZW50cy4KIApAQCAtNTYzLDEwICs1NjYsMTAgQEAKIAogICBQbGVhc2Ugbm90ZSB0aGF0IGNvbmZpZyBwYXJzZXJzIGRvbid0IHN1cHBvcnQgZXNjYXBpbmcgb2YgY29tbWVudCBwcmVmaXhlcyBzbwogICB1c2luZyAqaW5saW5lX2NvbW1lbnRfcHJlZml4ZXMqIG1heSBwcmV2ZW50IHVzZXJzIGZyb20gc3BlY2lmeWluZyBvcHRpb24KLSAgdmFsdWVzIHdpdGggY2hhcmFjdGVycyB1c2VkIGFzIGNvbW1lbnQgcHJlZml4ZXMuIFdoZW4gaW4gZG91YnQsIGF2b2lkIHNldHRpbmcKLSAgKmlubGluZV9jb21tZW50X3ByZWZpeGVzKi4gSW4gYW55IGNpcmN1bXN0YW5jZXMsIHRoZSBvbmx5IHdheSBvZiBzdG9yaW5nCi0gIGNvbW1lbnQgcHJlZml4IGNoYXJhY3RlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgaW4gbXVsdGlsaW5lIHZhbHVlcyBpcyB0bwotICBpbnRlcnBvbGF0ZSB0aGUgcHJlZml4LCBmb3IgZXhhbXBsZTo6CisgIHZhbHVlcyB3aXRoIGNoYXJhY3RlcnMgdXNlZCBhcyBjb21tZW50IHByZWZpeGVzLiAgV2hlbiBpbiBkb3VidCwgYXZvaWQKKyAgc2V0dGluZyAqaW5saW5lX2NvbW1lbnRfcHJlZml4ZXMqLiAgSW4gYW55IGNpcmN1bXN0YW5jZXMsIHRoZSBvbmx5IHdheSBvZgorICBzdG9yaW5nIGNvbW1lbnQgcHJlZml4IGNoYXJhY3RlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgaW4gbXVsdGlsaW5lCisgIHZhbHVlcyBpcyB0byBpbnRlcnBvbGF0ZSB0aGUgcHJlZml4LCBmb3IgZXhhbXBsZTo6CiAKICAgICA+Pj4gZnJvbSBjb25maWdwYXJzZXIgaW1wb3J0IENvbmZpZ1BhcnNlciwgRXh0ZW5kZWRJbnRlcnBvbGF0aW9uCiAgICAgPj4+IHBhcnNlciA9IENvbmZpZ1BhcnNlcihpbnRlcnBvbGF0aW9uPUV4dGVuZGVkSW50ZXJwb2xhdGlvbigpKQpAQCAtNjExLDcgKzYxNCw3IEBACiAKICAgV2hlbiBzZXQgdG8gYGBUcnVlYGAsIHRoZSBwYXJzZXIgd2lsbCBub3QgYWxsb3cgZm9yIGFueSBzZWN0aW9uIG9yIG9wdGlvbgogICBkdXBsaWNhdGVzIHdoaWxlIHJlYWRpbmcgZnJvbSBhIHNpbmdsZSBzb3VyY2UgKHVzaW5nIDptZXRoOmByZWFkX2ZpbGVgLAotICA6bWV0aDpgcmVhZF9zdHJpbmdgIG9yIDptZXRoOmByZWFkX2RpY3RgKS4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHN0cmljdAorICA6bWV0aDpgcmVhZF9zdHJpbmdgIG9yIDptZXRoOmByZWFkX2RpY3RgKS4gIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBzdHJpY3QKICAgcGFyc2VycyBpbiBuZXcgYXBwbGljYXRpb25zLgogCiAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCkBAIC02NDYsMTIgKzY0OSwxMiBAQAogCiAgIFRoZSBjb252ZW50aW9uIG9mIGFsbG93aW5nIGEgc3BlY2lhbCBzZWN0aW9uIG9mIGRlZmF1bHQgdmFsdWVzIGZvciBvdGhlcgogICBzZWN0aW9ucyBvciBpbnRlcnBvbGF0aW9uIHB1cnBvc2VzIGlzIGEgcG93ZXJmdWwgY29uY2VwdCBvZiB0aGlzIGxpYnJhcnksCi0gIGxldHRpbmcgdXNlcnMgY3JlYXRlIGNvbXBsZXggZGVjbGFyYXRpdmUgY29uZmlndXJhdGlvbnMuIFRoaXMgc2VjdGlvbiBpcworICBsZXR0aW5nIHVzZXJzIGNyZWF0ZSBjb21wbGV4IGRlY2xhcmF0aXZlIGNvbmZpZ3VyYXRpb25zLiAgVGhpcyBzZWN0aW9uIGlzCiAgIG5vcm1hbGx5IGNhbGxlZCBgYCJERUZBVUxUImBgIGJ1dCB0aGlzIGNhbiBiZSBjdXN0b21pemVkIHRvIHBvaW50IHRvIGFueQotICBvdGhlciB2YWxpZCBzZWN0aW9uIG5hbWUuIFNvbWUgdHlwaWNhbCB2YWx1ZXMgaW5jbHVkZTogYGAiZ2VuZXJhbCJgYCBvcgotICBgYCJjb21tb24iYGAuIFRoZSBuYW1lIHByb3ZpZGVkIGlzIHVzZWQgZm9yIHJlY29nbml6aW5nIGRlZmF1bHQgc2VjdGlvbnMgd2hlbgotICByZWFkaW5nIGZyb20gYW55IHNvdXJjZSBhbmQgaXMgdXNlZCB3aGVuIHdyaXRpbmcgY29uZmlndXJhdGlvbiBiYWNrIHRvCi0gIGEgZmlsZS4gSXRzIGN1cnJlbnQgdmFsdWUgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUKKyAgb3RoZXIgdmFsaWQgc2VjdGlvbiBuYW1lLiAgU29tZSB0eXBpY2FsIHZhbHVlcyBpbmNsdWRlOiBgYCJnZW5lcmFsImBgIG9yCisgIGBgImNvbW1vbiJgYC4gIFRoZSBuYW1lIHByb3ZpZGVkIGlzIHVzZWQgZm9yIHJlY29nbml6aW5nIGRlZmF1bHQgc2VjdGlvbnMKKyAgd2hlbiByZWFkaW5nIGZyb20gYW55IHNvdXJjZSBhbmQgaXMgdXNlZCB3aGVuIHdyaXRpbmcgY29uZmlndXJhdGlvbiBiYWNrIHRvCisgIGEgZmlsZS4gIEl0cyBjdXJyZW50IHZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCiAgIGBgcGFyc2VyX2luc3RhbmNlLmRlZmF1bHRfc2VjdGlvbmBgIGF0dHJpYnV0ZSBhbmQgbWF5IGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUKICAgKGkuZS4gdG8gY29udmVydCBmaWxlcyBmcm9tIG9uZSBmb3JtYXQgdG8gYW5vdGhlcikuCiAKQEAgLTY2MCwxNCArNjYzLDMwIEBACiAgIEludGVycG9sYXRpb24gYmVoYXZpb3VyIG1heSBiZSBjdXN0b21pemVkIGJ5IHByb3ZpZGluZyBhIGN1c3RvbSBoYW5kbGVyCiAgIHRocm91Z2ggdGhlICppbnRlcnBvbGF0aW9uKiBhcmd1bWVudC4gYGBOb25lYGAgY2FuIGJlIHVzZWQgdG8gdHVybiBvZmYKICAgaW50ZXJwb2xhdGlvbiBjb21wbGV0ZWx5LCBgYEV4dGVuZGVkSW50ZXJwb2xhdGlvbigpYGAgcHJvdmlkZXMgYSBtb3JlCi0gIGFkdmFuY2VkIHZhcmlhbnQgaW5zcGlyZWQgYnkgYGB6Yy5idWlsZG91dGBgLiBNb3JlIG9uIHRoZSBzdWJqZWN0IGluIHRoZQorICBhZHZhbmNlZCB2YXJpYW50IGluc3BpcmVkIGJ5IGBgemMuYnVpbGRvdXRgYC4gIE1vcmUgb24gdGhlIHN1YmplY3QgaW4gdGhlCiAgIGBkZWRpY2F0ZWQgZG9jdW1lbnRhdGlvbiBzZWN0aW9uIDwjaW50ZXJwb2xhdGlvbi1vZi12YWx1ZXM+YF8uCiAgIDpjbGFzczpgUmF3Q29uZmlnUGFyc2VyYCBoYXMgYSBkZWZhdWx0IHZhbHVlIG9mIGBgTm9uZWBgLgogCisqICpjb252ZXJ0ZXJzKiwgZGVmYXVsdCB2YWx1ZTogbm90IHNldAorCisgIENvbmZpZyBwYXJzZXJzIHByb3ZpZGUgb3B0aW9uIHZhbHVlIGdldHRlcnMgdGhhdCBwZXJmb3JtIHR5cGUgY29udmVyc2lvbi4gIEJ5CisgIGRlZmF1bHQgOm1ldGg6YGdldGludGAsIDptZXRoOmBnZXRmbG9hdGAsIGFuZCA6bWV0aDpgZ2V0Ym9vbGVhbmAgYXJlCisgIGltcGxlbWVudGVkLiAgU2hvdWxkIG90aGVyIGdldHRlcnMgYmUgZGVzaXJhYmxlLCB1c2VycyBtYXkgZGVmaW5lIHRoZW0gaW4KKyAgYSBzdWJjbGFzcyBvciBwYXNzIGEgZGljdGlvbmFyeSB3aGVyZSBlYWNoIGtleSBpcyBhIG5hbWUgb2YgdGhlIGNvbnZlcnRlciBhbmQKKyAgZWFjaCB2YWx1ZSBpcyBhIGNhbGxhYmxlIGltcGxlbWVudGluZyBzYWlkIGNvbnZlcnNpb24uICBGb3IgaW5zdGFuY2UsIHBhc3NpbmcKKyAgYGB7J2RlY2ltYWwnOiBkZWNpbWFsLkRlY2ltYWx9YGAgd291bGQgYWRkIDptZXRoOmBnZXRkZWNpbWFsYCBvbiBib3RoIHRoZQorICBwYXJzZXIgb2JqZWN0IGFuZCBhbGwgc2VjdGlvbiBwcm94aWVzLiAgSW4gb3RoZXIgd29yZHMsIGl0IHdpbGwgYmUgcG9zc2libGUKKyAgdG8gd3JpdGUgYm90aCBgYHBhcnNlcl9pbnN0YW5jZS5nZXRkZWNpbWFsKCdzZWN0aW9uJywgJ2tleScsIGZhbGxiYWNrPTApYGAKKyAgYW5kIGBgcGFyc2VyX2luc3RhbmNlWydzZWN0aW9uJ10uZ2V0ZGVjaW1hbCgna2V5JywgMClgYC4KKworICBJZiB0aGUgY29udmVydGVyIG5lZWRzIHRvIGFjY2VzcyB0aGUgc3RhdGUgb2YgdGhlIHBhcnNlciwgaXQgY2FuIGJlCisgIGltcGxlbWVudGVkIGFzIGEgbWV0aG9kIG9uIGEgY29uZmlnIHBhcnNlciBzdWJjbGFzcy4gIElmIHRoZSBuYW1lIG9mIHRoaXMKKyAgbWV0aG9kIHN0YXJ0cyB3aXRoIGBgZ2V0YGAsIGl0IHdpbGwgYmUgYXZhaWxhYmxlIG9uIGFsbCBzZWN0aW9uIHByb3hpZXMsIGluCisgIHRoZSBkaWN0LWNvbXBhdGlibGUgZm9ybSAoc2VlIHRoZSBgYGdldGRlY2ltYWwoKWBgIGV4YW1wbGUgYWJvdmUpLgogCiBNb3JlIGFkdmFuY2VkIGN1c3RvbWl6YXRpb24gbWF5IGJlIGFjaGlldmVkIGJ5IG92ZXJyaWRpbmcgZGVmYXVsdCB2YWx1ZXMgb2YKLXRoZXNlIHBhcnNlciBhdHRyaWJ1dGVzLiAgVGhlIGRlZmF1bHRzIGFyZSBkZWZpbmVkIG9uIHRoZSBjbGFzc2VzLCBzbyB0aGV5Ci1tYXkgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIG9yIGJ5IGF0dHJpYnV0ZSBhc3NpZ25tZW50LgordGhlc2UgcGFyc2VyIGF0dHJpYnV0ZXMuICBUaGUgZGVmYXVsdHMgYXJlIGRlZmluZWQgb24gdGhlIGNsYXNzZXMsIHNvIHRoZXkgbWF5CitiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgb3IgYnkgYXR0cmlidXRlIGFzc2lnbm1lbnQuCiAKIC4uIGF0dHJpYnV0ZTo6IEJPT0xFQU5fU1RBVEVTCiAKQEAgLTcyNSwxMCArNzQ0LDExIEBACiAKIC4uIGF0dHJpYnV0ZTo6IFNFQ1RDUkUKIAotICBBIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHBhcnNlIHNlY3Rpb24gaGVhZGVycy4gVGhlIGRlZmF1bHQKLSAgbWF0Y2hlcyBgYFtzZWN0aW9uXWBgIHRvIHRoZSBuYW1lIGBgInNlY3Rpb24iYGAuIFdoaXRlc3BhY2UgaXMgY29uc2lkZXJlZCBwYXJ0Ci0gIG9mIHRoZSBzZWN0aW9uIG5hbWUsIHRodXMgYGBbICBsYXJjaCAgXWBgIHdpbGwgYmUgcmVhZCBhcyBhIHNlY3Rpb24gb2YgbmFtZQotICBgYCIgIGxhcmNoICAiYGAuIE92ZXJyaWRlIHRoaXMgYXR0cmlidXRlIGlmIHRoYXQncyB1bnN1aXRhYmxlLiAgRm9yIGV4YW1wbGU6CisgIEEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gcGFyc2Ugc2VjdGlvbiBoZWFkZXJzLiAgVGhlIGRlZmF1bHQKKyAgbWF0Y2hlcyBgYFtzZWN0aW9uXWBgIHRvIHRoZSBuYW1lIGBgInNlY3Rpb24iYGAuICBXaGl0ZXNwYWNlIGlzIGNvbnNpZGVyZWQKKyAgcGFydCBvZiB0aGUgc2VjdGlvbiBuYW1lLCB0aHVzIGBgWyAgbGFyY2ggIF1gYCB3aWxsIGJlIHJlYWQgYXMgYSBzZWN0aW9uIG9mCisgIG5hbWUgYGAiICBsYXJjaCAgImBgLiAgT3ZlcnJpZGUgdGhpcyBhdHRyaWJ1dGUgaWYgdGhhdCdzIHVuc3VpdGFibGUuICBGb3IKKyAgZXhhbXBsZToKIAogICAuLiBkb2N0ZXN0OjoKIApAQCAtODE1LDEzICs4MzUsMTMgQEAKIAogICAgIyBTZXQgdGhlIG9wdGlvbmFsICpyYXcqIGFyZ3VtZW50IG9mIGdldCgpIHRvIFRydWUgaWYgeW91IHdpc2ggdG8gZGlzYWJsZQogICAgIyBpbnRlcnBvbGF0aW9uIGluIGEgc2luZ2xlIGdldCBvcGVyYXRpb24uCi0gICBwcmludChjZmcuZ2V0KCdTZWN0aW9uMScsICdmb28nLCByYXc9RmFsc2UpKSAjIC0+ICJQeXRob24gaXMgZnVuISIKLSAgIHByaW50KGNmZy5nZXQoJ1NlY3Rpb24xJywgJ2ZvbycsIHJhdz1UcnVlKSkgICMgLT4gIiUoYmFyKXMgaXMgJShiYXopcyEiCisgICBwcmludChjZmcuZ2V0KCdTZWN0aW9uMScsICdmb28nLCByYXc9RmFsc2UpKSAgIyAtPiAiUHl0aG9uIGlzIGZ1biEiCisgICBwcmludChjZmcuZ2V0KCdTZWN0aW9uMScsICdmb28nLCByYXc9VHJ1ZSkpICAgIyAtPiAiJShiYXIpcyBpcyAlKGJheilzISIKIAogICAgIyBUaGUgb3B0aW9uYWwgKnZhcnMqIGFyZ3VtZW50IGlzIGEgZGljdCB3aXRoIG1lbWJlcnMgdGhhdCB3aWxsIHRha2UKICAgICMgcHJlY2VkZW5jZSBpbiBpbnRlcnBvbGF0aW9uLgogICAgcHJpbnQoY2ZnLmdldCgnU2VjdGlvbjEnLCAnZm9vJywgdmFycz17J2Jhcic6ICdEb2N1bWVudGF0aW9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXonOiAnZXZpbCd9KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXonOiAnZXZpbCd9KSkKIAogICAgIyBUaGUgb3B0aW9uYWwgKmZhbGxiYWNrKiBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgZmFsbGJhY2sgdmFsdWUKICAgIHByaW50KGNmZy5nZXQoJ1NlY3Rpb24xJywgJ2ZvbycpKQpAQCAtODQ4LDEwICs4NjgsMTAgQEAKICAgIGNvbmZpZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoeydiYXInOiAnTGlmZScsICdiYXonOiAnaGFyZCd9KQogICAgY29uZmlnLnJlYWQoJ2V4YW1wbGUuY2ZnJykKIAotICAgcHJpbnQoY29uZmlnLmdldCgnU2VjdGlvbjEnLCAnZm9vJykpICMgLT4gIlB5dGhvbiBpcyBmdW4hIgorICAgcHJpbnQoY29uZmlnLmdldCgnU2VjdGlvbjEnLCAnZm9vJykpICAgICAjIC0+ICJQeXRob24gaXMgZnVuISIKICAgIGNvbmZpZy5yZW1vdmVfb3B0aW9uKCdTZWN0aW9uMScsICdiYXInKQogICAgY29uZmlnLnJlbW92ZV9vcHRpb24oJ1NlY3Rpb24xJywgJ2JheicpCi0gICBwcmludChjb25maWcuZ2V0KCdTZWN0aW9uMScsICdmb28nKSkgIyAtPiAiTGlmZSBpcyBoYXJkISIKKyAgIHByaW50KGNvbmZpZy5nZXQoJ1NlY3Rpb24xJywgJ2ZvbycpKSAgICAgIyAtPiAiTGlmZSBpcyBoYXJkISIKIAogCiAuLiBfY29uZmlncGFyc2VyLW9iamVjdHM6CkBAIC04NTksNyArODc5LDcgQEAKIENvbmZpZ1BhcnNlciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0uLiBjbGFzczo6IENvbmZpZ1BhcnNlcihkZWZhdWx0cz1Ob25lLCBkaWN0X3R5cGU9Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QsIGFsbG93X25vX3ZhbHVlPUZhbHNlLCBkZWxpbWl0ZXJzPSgnPScsICc6JyksIGNvbW1lbnRfcHJlZml4ZXM9KCcjJywgJzsnKSwgaW5saW5lX2NvbW1lbnRfcHJlZml4ZXM9Tm9uZSwgc3RyaWN0PVRydWUsIGVtcHR5X2xpbmVzX2luX3ZhbHVlcz1UcnVlLCBkZWZhdWx0X3NlY3Rpb249Y29uZmlncGFyc2VyLkRFRkFVTFRTRUNULCBpbnRlcnBvbGF0aW9uPUJhc2ljSW50ZXJwb2xhdGlvbigpKQorLi4gY2xhc3M6OiBDb25maWdQYXJzZXIoZGVmYXVsdHM9Tm9uZSwgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0LCBhbGxvd19ub192YWx1ZT1GYWxzZSwgZGVsaW1pdGVycz0oJz0nLCAnOicpLCBjb21tZW50X3ByZWZpeGVzPSgnIycsICc7JyksIGlubGluZV9jb21tZW50X3ByZWZpeGVzPU5vbmUsIHN0cmljdD1UcnVlLCBlbXB0eV9saW5lc19pbl92YWx1ZXM9VHJ1ZSwgZGVmYXVsdF9zZWN0aW9uPWNvbmZpZ3BhcnNlci5ERUZBVUxUU0VDVCwgaW50ZXJwb2xhdGlvbj1CYXNpY0ludGVycG9sYXRpb24oKSwgY29udmVydGVycz17fSkKIAogICAgVGhlIG1haW4gY29uZmlndXJhdGlvbiBwYXJzZXIuICBXaGVuICpkZWZhdWx0cyogaXMgZ2l2ZW4sIGl0IGlzIGluaXRpYWxpemVkCiAgICBpbnRvIHRoZSBkaWN0aW9uYXJ5IG9mIGludHJpbnNpYyBkZWZhdWx0cy4gIFdoZW4gKmRpY3RfdHlwZSogaXMgZ2l2ZW4sIGl0CkBAIC04NjksOCArODg5LDggQEAKICAgIFdoZW4gKmRlbGltaXRlcnMqIGlzIGdpdmVuLCBpdCBpcyB1c2VkIGFzIHRoZSBzZXQgb2Ygc3Vic3RyaW5ncyB0aGF0CiAgICBkaXZpZGUga2V5cyBmcm9tIHZhbHVlcy4gIFdoZW4gKmNvbW1lbnRfcHJlZml4ZXMqIGlzIGdpdmVuLCBpdCB3aWxsIGJlIHVzZWQKICAgIGFzIHRoZSBzZXQgb2Ygc3Vic3RyaW5ncyB0aGF0IHByZWZpeCBjb21tZW50cyBpbiBvdGhlcndpc2UgZW1wdHkgbGluZXMuCi0gICBDb21tZW50cyBjYW4gYmUgaW5kZW50ZWQuIFdoZW4gKmlubGluZV9jb21tZW50X3ByZWZpeGVzKiBpcyBnaXZlbiwgaXQgd2lsbCBiZQotICAgdXNlZCBhcyB0aGUgc2V0IG9mIHN1YnN0cmluZ3MgdGhhdCBwcmVmaXggY29tbWVudHMgaW4gbm9uLWVtcHR5IGxpbmVzLgorICAgQ29tbWVudHMgY2FuIGJlIGluZGVudGVkLiAgV2hlbiAqaW5saW5lX2NvbW1lbnRfcHJlZml4ZXMqIGlzIGdpdmVuLCBpdCB3aWxsCisgICBiZSB1c2VkIGFzIHRoZSBzZXQgb2Ygc3Vic3RyaW5ncyB0aGF0IHByZWZpeCBjb21tZW50cyBpbiBub24tZW1wdHkgbGluZXMuCiAKICAgIFdoZW4gKnN0cmljdCogaXMgYGBUcnVlYGAgKHRoZSBkZWZhdWx0KSwgdGhlIHBhcnNlciB3b24ndCBhbGxvdyBmb3IKICAgIGFueSBzZWN0aW9uIG9yIG9wdGlvbiBkdXBsaWNhdGVzIHdoaWxlIHJlYWRpbmcgZnJvbSBhIHNpbmdsZSBzb3VyY2UgKGZpbGUsCkBAIC04ODQsMTMgKzkwNCwxMyBAQAogCiAgICBXaGVuICpkZWZhdWx0X3NlY3Rpb24qIGlzIGdpdmVuLCBpdCBzcGVjaWZpZXMgdGhlIG5hbWUgZm9yIHRoZSBzcGVjaWFsCiAgICBzZWN0aW9uIGhvbGRpbmcgZGVmYXVsdCB2YWx1ZXMgZm9yIG90aGVyIHNlY3Rpb25zIGFuZCBpbnRlcnBvbGF0aW9uIHB1cnBvc2VzCi0gICAobm9ybWFsbHkgbmFtZWQgYGAiREVGQVVMVCJgYCkuIFRoaXMgdmFsdWUgY2FuIGJlIHJldHJpZXZlZCBhbmQgY2hhbmdlZCBvbgorICAgKG5vcm1hbGx5IG5hbWVkIGBgIkRFRkFVTFQiYGApLiAgVGhpcyB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGFuZCBjaGFuZ2VkIG9uCiAgICBydW50aW1lIHVzaW5nIHRoZSBgYGRlZmF1bHRfc2VjdGlvbmBgIGluc3RhbmNlIGF0dHJpYnV0ZS4KIAogICAgSW50ZXJwb2xhdGlvbiBiZWhhdmlvdXIgbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcHJvdmlkaW5nIGEgY3VzdG9tIGhhbmRsZXIKICAgIHRocm91Z2ggdGhlICppbnRlcnBvbGF0aW9uKiBhcmd1bWVudC4gYGBOb25lYGAgY2FuIGJlIHVzZWQgdG8gdHVybiBvZmYKICAgIGludGVycG9sYXRpb24gY29tcGxldGVseSwgYGBFeHRlbmRlZEludGVycG9sYXRpb24oKWBgIHByb3ZpZGVzIGEgbW9yZQotICAgYWR2YW5jZWQgdmFyaWFudCBpbnNwaXJlZCBieSBgYHpjLmJ1aWxkb3V0YGAuIE1vcmUgb24gdGhlIHN1YmplY3QgaW4gdGhlCisgICBhZHZhbmNlZCB2YXJpYW50IGluc3BpcmVkIGJ5IGBgemMuYnVpbGRvdXRgYC4gIE1vcmUgb24gdGhlIHN1YmplY3QgaW4gdGhlCiAgICBgZGVkaWNhdGVkIGRvY3VtZW50YXRpb24gc2VjdGlvbiA8I2ludGVycG9sYXRpb24tb2YtdmFsdWVzPmBfLgogCiAgICBBbGwgb3B0aW9uIG5hbWVzIHVzZWQgaW4gaW50ZXJwb2xhdGlvbiB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRoZQpAQCAtODk5LDYgKzkxOSwxMiBAQAogICAgY29udmVydHMgb3B0aW9uIG5hbWVzIHRvIGxvd2VyIGNhc2UpLCB0aGUgdmFsdWVzIGBgZm9vICUoYmFyKXNgYCBhbmQgYGBmb28KICAgICUoQkFSKXNgYCBhcmUgZXF1aXZhbGVudC4KIAorICAgV2hlbiAqY29udmVydGVycyogaXMgZ2l2ZW4sIGl0IHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgd2hlcmUgZWFjaCBrZXkKKyAgIHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgYSB0eXBlIGNvbnZlcnRlciBhbmQgZWFjaCB2YWx1ZSBpcyBhIGNhbGxhYmxlCisgICBpbXBsZW1lbnRpbmcgdGhlIGNvbnZlcnNpb24gZnJvbSBzdHJpbmcgdG8gdGhlIGRlc2lyZWQgZGF0YXR5cGUuICBFdmVyeQorICAgY29udmVydGVyIGdldHMgaXRzIG93biBjb3JyZXNwb25kaW5nIDptZXRoOmBnZXQqKClgIG1ldGhvZCBvbiB0aGUgcGFyc2VyCisgICBvYmplY3QgYW5kIHNlY3Rpb24gcHJveGllcy4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIFRoZSBkZWZhdWx0ICpkaWN0X3R5cGUqIGlzIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgLgogCkBAIC05MDcsNiArOTMzLDkgQEAKICAgICAgICplbXB0eV9saW5lc19pbl92YWx1ZXMqLCAqZGVmYXVsdF9zZWN0aW9uKiBhbmQgKmludGVycG9sYXRpb24qIHdlcmUKICAgICAgIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlICpjb252ZXJ0ZXJzKiBhcmd1bWVudCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogZGVmYXVsdHMoKQogCkBAIC05NDQsNyArOTczLDcgQEAKICAgIC4uIG1ldGhvZDo6IGhhc19vcHRpb24oc2VjdGlvbiwgb3B0aW9uKQogCiAgICAgICBJZiB0aGUgZ2l2ZW4gKnNlY3Rpb24qIGV4aXN0cywgYW5kIGNvbnRhaW5zIHRoZSBnaXZlbiAqb3B0aW9uKiwgcmV0dXJuCi0gICAgICA6Y29uc3Q6YFRydWVgOyBvdGhlcndpc2UgcmV0dXJuIDpjb25zdDpgRmFsc2VgLiBJZiB0aGUgc3BlY2lmaWVkCisgICAgICA6Y29uc3Q6YFRydWVgOyBvdGhlcndpc2UgcmV0dXJuIDpjb25zdDpgRmFsc2VgLiAgSWYgdGhlIHNwZWNpZmllZAogICAgICAgKnNlY3Rpb24qIGlzIDpjb25zdDpgTm9uZWAgb3IgYW4gZW1wdHkgc3RyaW5nLCBERUZBVUxUIGlzIGFzc3VtZWQuCiAKIApAQCAtMTA2OSw3ICsxMDk4LDcgQEAKICAgICAgIDptZXRoOmBnZXRgIG1ldGhvZC4KIAogICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgICAgICAgIEl0ZW1zIHByZXNlbnQgaW4gKnZhcnMqIG5vIGxvbmdlciBhcHBlYXIgaW4gdGhlIHJlc3VsdC4gVGhlIHByZXZpb3VzCisgICAgICAgICBJdGVtcyBwcmVzZW50IGluICp2YXJzKiBubyBsb25nZXIgYXBwZWFyIGluIHRoZSByZXN1bHQuICBUaGUgcHJldmlvdXMKICAgICAgICAgIGJlaGF2aW91ciBtaXhlZCBhY3R1YWwgcGFyc2VyIG9wdGlvbnMgd2l0aCB2YXJpYWJsZXMgcHJvdmlkZWQgZm9yCiAgICAgICAgICBpbnRlcnBvbGF0aW9uLgogCkBAIC0xMTcwLDcgKzExOTksNyBAQAogCiAgICAuLiBub3RlOjoKICAgICAgIENvbnNpZGVyIHVzaW5nIDpjbGFzczpgQ29uZmlnUGFyc2VyYCBpbnN0ZWFkIHdoaWNoIGNoZWNrcyB0eXBlcyBvZgotICAgICAgdGhlIHZhbHVlcyB0byBiZSBzdG9yZWQgaW50ZXJuYWxseS4gSWYgeW91IGRvbid0IHdhbnQgaW50ZXJwb2xhdGlvbiwgeW91CisgICAgICB0aGUgdmFsdWVzIHRvIGJlIHN0b3JlZCBpbnRlcm5hbGx5LiAgSWYgeW91IGRvbid0IHdhbnQgaW50ZXJwb2xhdGlvbiwgeW91CiAgICAgICBjYW4gdXNlIGBgQ29uZmlnUGFyc2VyKGludGVycG9sYXRpb249Tm9uZSlgYC4KIAogCkBAIC0xMTgxLDcgKzEyMTAsNyBAQAogICAgICAgKmRlZmF1bHQgc2VjdGlvbiogbmFtZSBpcyBwYXNzZWQsIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgICAgVHlwZSBvZiAqc2VjdGlvbiogaXMgbm90IGNoZWNrZWQgd2hpY2ggbGV0cyB1c2VycyBjcmVhdGUgbm9uLXN0cmluZyBuYW1lZAotICAgICAgc2VjdGlvbnMuIFRoaXMgYmVoYXZpb3VyIGlzIHVuc3VwcG9ydGVkIGFuZCBtYXkgY2F1c2UgaW50ZXJuYWwgZXJyb3JzLgorICAgICAgc2VjdGlvbnMuICBUaGlzIGJlaGF2aW91ciBpcyB1bnN1cHBvcnRlZCBhbmQgbWF5IGNhdXNlIGludGVybmFsIGVycm9ycy4KIAogCiAgICAuLiBtZXRob2Q6OiBzZXQoc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKQEAgLTEyODIsMyArMTMxMSw0IEBACiAuLiBbMV0gQ29uZmlnIHBhcnNlcnMgYWxsb3cgZm9yIGhlYXZ5IGN1c3RvbWl6YXRpb24uICBJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4KICAgICAgICBjaGFuZ2luZyB0aGUgYmVoYXZpb3VyIG91dGxpbmVkIGJ5IHRoZSBmb290bm90ZSByZWZlcmVuY2UsIGNvbnN1bHQgdGhlCiAgICAgICAgYEN1c3RvbWl6aW5nIFBhcnNlciBCZWhhdmlvdXJgXyBzZWN0aW9uLgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25zdGFudHMucnN0IGIvRG9jL2xpYnJhcnkvY29uc3RhbnRzLnJzdAppbmRleCA0MmI1YWYyLi5kNWEwZjA5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25zdGFudHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbnN0YW50cy5yc3QKQEAgLTQ1LDcgKzQ1LDYgQEAKICAgIGZvciBtb3JlIGRldGFpbHMuCiAKIAotCiAuLiBkYXRhOjogRWxsaXBzaXMKIAogICAgVGhlIHNhbWUgYXMgYGAuLi5gYC4gIFNwZWNpYWwgdmFsdWUgdXNlZCBtb3N0bHkgaW4gY29uanVuY3Rpb24gd2l0aCBleHRlbmRlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdAppbmRleCAyYjJjZWNlLi5jZjg1ZmNkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdApAQCAtMTcyLDYgKzE3MiwxNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIAorLi4gZnVuY3Rpb246OiByZWRpcmVjdF9zdGRlcnIobmV3X3RhcmdldCkKKworICAgU2ltaWxhciB0byA6ZnVuYzpgfmNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0YCBidXQgcmVkaXJlY3RpbmcKKyAgIDpkYXRhOmBzeXMuc3RkZXJyYCB0byBhbm90aGVyIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdC4KKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmVlbnRyYW50IDxyZWVudHJhbnQtY21zPmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKIC4uIGNsYXNzOjogQ29udGV4dERlY29yYXRvcigpCiAKICAgIEEgYmFzZSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBjb250ZXh0IG1hbmFnZXIgdG8gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLgpAQCAtNTkzLDcgKzYwMyw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICA6cGVwOmAwMzQzYCAtIFRoZSAid2l0aCIgc3RhdGVtZW50CisgICA6cGVwOmAzNDNgIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnQKICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gOmtleXdvcmQ6YHdpdGhgCiAgICAgICBzdGF0ZW1lbnQuCiAKQEAgLTYzNCw3ICs2NDQsNyBAQAogICAgIEJlZm9yZQogICAgIEFmdGVyCiAgICAgPj4+IHdpdGggY206Ci0gICAgLi4uICAgIHBhc3MKKyAgICAuLi4gICAgIHBhc3MKICAgICAuLi4KICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgIC4uLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29weS5yc3QgYi9Eb2MvbGlicmFyeS9jb3B5LnJzdAppbmRleCAwMmVmMGU1Li5kMGI4NjFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb3B5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb3B5LnJzdApAQCAtNCw2ICs0LDEwIEBACiAuLiBtb2R1bGU6OiBjb3B5CiAgICA6c3lub3BzaXM6IFNoYWxsb3cgYW5kIGRlZXAgY29weSBvcGVyYXRpb25zLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb3B5LnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBBc3NpZ25tZW50IHN0YXRlbWVudHMgaW4gUHl0aG9uIGRvIG5vdCBjb3B5IG9iamVjdHMsIHRoZXkgY3JlYXRlIGJpbmRpbmdzCiBiZXR3ZWVuIGEgdGFyZ2V0IGFuZCBhbiBvYmplY3QuIEZvciBjb2xsZWN0aW9ucyB0aGF0IGFyZSBtdXRhYmxlIG9yIGNvbnRhaW4KIG11dGFibGUgaXRlbXMsIGEgY29weSBpcyBzb21ldGltZXMgbmVlZGVkIHNvIG9uZSBjYW4gY2hhbmdlIG9uZSBjb3B5IHdpdGhvdXQKQEAgLTQ0LDcgKzQ4LDcgQEAKICAgcmVmZXJlbmNlIHRvIHRoZW1zZWx2ZXMpIG1heSBjYXVzZSBhIHJlY3Vyc2l2ZSBsb29wLgogCiAqIEJlY2F1c2UgZGVlcCBjb3B5IGNvcGllcyAqZXZlcnl0aGluZyogaXQgbWF5IGNvcHkgdG9vIG11Y2gsIGUuZy4sCi0gIGFkbWluaXN0cmF0aXZlIGRhdGEgc3RydWN0dXJlcyB0aGF0IHNob3VsZCBiZSBzaGFyZWQgZXZlbiBiZXR3ZWVuIGNvcGllcy4KKyAgZXZlbiBhZG1pbmlzdHJhdGl2ZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBzaG91bGQgYmUgc2hhcmVkIGV2ZW4gYmV0d2VlbiBjb3BpZXMuCiAKIFRoZSA6ZnVuYzpgZGVlcGNvcHlgIGZ1bmN0aW9uIGF2b2lkcyB0aGVzZSBwcm9ibGVtcyBieToKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29weXJlZy5yc3QgYi9Eb2MvbGlicmFyeS9jb3B5cmVnLnJzdAppbmRleCAxODMwNmM3Li5lZWFiYjRjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb3B5cmVnLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb3B5cmVnLnJzdApAQCAtNCwxMSArNCwxNCBAQAogLi4gbW9kdWxlOjogY29weXJlZwogICAgOnN5bm9wc2lzOiBSZWdpc3RlciBwaWNrbGUgc3VwcG9ydCBmdW5jdGlvbnMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NvcHlyZWcucHlgCiAKIC4uIGluZGV4OjoKICAgIG1vZHVsZTogcGlja2xlCiAgICBtb2R1bGU6IGNvcHkKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGNvcHlyZWdgIG1vZHVsZSBvZmZlcnMgYSB3YXkgdG8gZGVmaW5lIGZ1bmN0aW9ucyB1c2VkIHdoaWxlIHBpY2tsaW5nCiBzcGVjaWZpYyBvYmplY3RzLiAgVGhlIDptb2Q6YHBpY2tsZWAgYW5kIDptb2Q6YGNvcHlgIG1vZHVsZXMgdXNlIHRob3NlIGZ1bmN0aW9ucwogd2hlbiBwaWNrbGluZy9jb3B5aW5nIHRob3NlIG9iamVjdHMuICBUaGUgbW9kdWxlIHByb3ZpZGVzIGNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NyeXB0LnJzdCBiL0RvYy9saWJyYXJ5L2NyeXB0LnJzdAppbmRleCBiNGM5MGNkLi5hMjFjMWU3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jcnlwdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY3J5cHQucnN0CkBAIC00LDE1ICs0LDE5IEBACiAuLiBtb2R1bGU6OiBjcnlwdAogICAgOnBsYXRmb3JtOiBVbml4CiAgICA6c3lub3BzaXM6IFRoZSBjcnlwdCgpIGZ1bmN0aW9uIHVzZWQgdG8gY2hlY2sgVW5peCBwYXNzd29yZHMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IFN0ZXZlbiBELiBNYWpld3NraSA8c2RtN2dAdmlyZ2luaWEuZWR1PgogLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZXZlbiBELiBNYWpld3NraSA8c2RtN2dAdmlyZ2luaWEuZWR1PgogLi4gc2VjdGlvbmF1dGhvcjo6IFBldGVyIEZ1bmsgPHBmQGFydGNvbS1nbWJoLmRlPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jcnlwdC5weWAKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBjcnlwdCgzKQogICAgcGFpcjogY2lwaGVyOyBERVMKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhbiBpbnRlcmZhY2UgdG8gdGhlIDptYW5wYWdlOmBjcnlwdCgzKWAgcm91dGluZSwgd2hpY2ggaXMKIGEgb25lLXdheSBoYXNoIGZ1bmN0aW9uIGJhc2VkIHVwb24gYSBtb2RpZmllZCBERVMgYWxnb3JpdGhtOyBzZWUgdGhlIFVuaXggbWFuCiBwYWdlIGZvciBmdXJ0aGVyIGRldGFpbHMuICBQb3NzaWJsZSB1c2VzIGluY2x1ZGUgc3RvcmluZyBoYXNoZWQgcGFzc3dvcmRzCkBAIC0xNDksNCArMTUzLDQgQEAKIAogICAgaGFzaGVkID0gY3J5cHQuY3J5cHQocGxhaW50ZXh0KQogICAgaWYgbm90IGNvbXBhcmVfaGFzaChoYXNoZWQsIGNyeXB0LmNyeXB0KHBsYWludGV4dCwgaGFzaGVkKSk6Ci0gICAgICByYWlzZSBWYWx1ZUVycm9yKCJoYXNoZWQgdmVyc2lvbiBkb2Vzbid0IHZhbGlkYXRlIGFnYWluc3Qgb3JpZ2luYWwiKQorICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImhhc2hlZCB2ZXJzaW9uIGRvZXNuJ3QgdmFsaWRhdGUgYWdhaW5zdCBvcmlnaW5hbCIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jc3YucnN0IGIvRG9jL2xpYnJhcnkvY3N2LnJzdAppbmRleCBlOWE5Y2I1Li43ZmI0ZmM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jc3YucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Nzdi5yc3QKQEAgLTMsMTMgKzMsMTcgQEAKIAogLi4gbW9kdWxlOjogY3N2CiAgICA6c3lub3BzaXM6IFdyaXRlIGFuZCByZWFkIHRhYnVsYXIgZGF0YSB0byBhbmQgZnJvbSBkZWxpbWl0ZWQgZmlsZXMuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBTa2lwIE1vbnRhbmFybyA8c2tpcEBwb2JveC5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2Nzdi5weWAKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBjc3YKICAgIHBhaXI6IGRhdGE7IHRhYnVsYXIKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIHNvLWNhbGxlZCBDU1YgKENvbW1hIFNlcGFyYXRlZCBWYWx1ZXMpIGZvcm1hdCBpcyB0aGUgbW9zdCBjb21tb24gaW1wb3J0IGFuZAogZXhwb3J0IGZvcm1hdCBmb3Igc3ByZWFkc2hlZXRzIGFuZCBkYXRhYmFzZXMuICBDU1YgZm9ybWF0IHdhcyB1c2VkIGZvciBtYW55CiB5ZWFycyBwcmlvciB0byBhdHRlbXB0cyB0byBkZXNjcmliZSB0aGUgZm9ybWF0IGluIGEgc3RhbmRhcmRpemVkIHdheSBpbgpAQCAtNDE4LDcgKzQyMiw3IEBACiAKIDpjbGFzczpgV3JpdGVyYCBvYmplY3RzICg6Y2xhc3M6YERpY3RXcml0ZXJgIGluc3RhbmNlcyBhbmQgb2JqZWN0cyByZXR1cm5lZCBieQogdGhlIDpmdW5jOmB3cml0ZXJgIGZ1bmN0aW9uKSBoYXZlIHRoZSBmb2xsb3dpbmcgcHVibGljIG1ldGhvZHMuICBBICpyb3cqIG11c3QgYmUKLWEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBvciBudW1iZXJzIGZvciA6Y2xhc3M6YFdyaXRlcmAgb2JqZWN0cyBhbmQgYSBkaWN0aW9uYXJ5CithbiBpdGVyYWJsZSBvZiBzdHJpbmdzIG9yIG51bWJlcnMgZm9yIDpjbGFzczpgV3JpdGVyYCBvYmplY3RzIGFuZCBhIGRpY3Rpb25hcnkKIG1hcHBpbmcgZmllbGRuYW1lcyB0byBzdHJpbmdzIG9yIG51bWJlcnMgKGJ5IHBhc3NpbmcgdGhlbSB0aHJvdWdoIDpmdW5jOmBzdHJgCiBmaXJzdCkgZm9yIDpjbGFzczpgRGljdFdyaXRlcmAgb2JqZWN0cy4gIE5vdGUgdGhhdCBjb21wbGV4IG51bWJlcnMgYXJlIHdyaXR0ZW4KIG91dCBzdXJyb3VuZGVkIGJ5IHBhcmVucy4gVGhpcyBtYXkgY2F1c2Ugc29tZSBwcm9ibGVtcyBmb3Igb3RoZXIgcHJvZ3JhbXMgd2hpY2gKQEAgLTQzMCw2ICs0MzQsOCBAQAogICAgV3JpdGUgdGhlICpyb3cqIHBhcmFtZXRlciB0byB0aGUgd3JpdGVyJ3MgZmlsZSBvYmplY3QsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8KICAgIHRoZSBjdXJyZW50IGRpYWxlY3QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCBzdXBwb3J0IG9mIGFyYml0cmFyeSBpdGVyYWJsZXMuCiAKIC4uIG1ldGhvZDo6IGNzdndyaXRlci53cml0ZXJvd3Mocm93cykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L2N0eXBlcy5yc3QKaW5kZXggNjMwZDI3OS4uYTY3NTc5MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jdHlwZXMucnN0CkBAIC0zLDggKzMsMTAgQEAKIAogLi4gbW9kdWxlOjogY3R5cGVzCiAgICA6c3lub3BzaXM6IEEgZm9yZWlnbiBmdW5jdGlvbiBsaWJyYXJ5IGZvciBQeXRob24uCisKIC4uIG1vZHVsZWF1dGhvcjo6IFRob21hcyBIZWxsZXIgPHRoZWxsZXJAcHl0aG9uLm5ldD4KIAorLS0tLS0tLS0tLS0tLS0KIAogOm1vZDpgY3R5cGVzYCBpcyBhIGZvcmVpZ24gZnVuY3Rpb24gbGlicmFyeSBmb3IgUHl0aG9uLiAgSXQgcHJvdmlkZXMgQyBjb21wYXRpYmxlCiBkYXRhIHR5cGVzLCBhbmQgYWxsb3dzIGNhbGxpbmcgZnVuY3Rpb25zIGluIERMTHMgb3Igc2hhcmVkIGxpYnJhcmllcy4gIEl0IGNhbiBiZQpAQCAtMjAsMTEgKzIyLDEwIEBACiB0aGV5IGFjdHVhbGx5IHdvcmsuICBTaW5jZSBzb21lIGNvZGUgc2FtcGxlcyBiZWhhdmUgZGlmZmVyZW50bHkgdW5kZXIgTGludXgsCiBXaW5kb3dzLCBvciBNYWMgT1MgWCwgdGhleSBjb250YWluIGRvY3Rlc3QgZGlyZWN0aXZlcyBpbiBjb21tZW50cy4KIAotTm90ZTogU29tZSBjb2RlIHNhbXBsZXMgcmVmZXJlbmNlIHRoZSBjdHlwZXMgOmNsYXNzOmBjX2ludGAgdHlwZS4gVGhpcyB0eXBlIGlzCi1hbiBhbGlhcyBmb3IgdGhlIDpjbGFzczpgY19sb25nYCB0eXBlIG9uIDMyLWJpdCBzeXN0ZW1zLiAgU28sIHlvdSBzaG91bGQgbm90IGJlCi1jb25mdXNlZCBpZiA6Y2xhc3M6YGNfbG9uZ2AgaXMgcHJpbnRlZCBpZiB5b3Ugd291bGQgZXhwZWN0IDpjbGFzczpgY19pbnRgIC0tLQotdGhleSBhcmUgYWN0dWFsbHkgdGhlIHNhbWUgdHlwZS4KLQorTm90ZTogU29tZSBjb2RlIHNhbXBsZXMgcmVmZXJlbmNlIHRoZSBjdHlwZXMgOmNsYXNzOmBjX2ludGAgdHlwZS4gIE9uIHBsYXRmb3Jtcword2hlcmUgYGBzaXplb2YobG9uZykgPT0gc2l6ZW9mKGludClgYCBpdCBpcyBhbiBhbGlhcyB0byA6Y2xhc3M6YGNfbG9uZ2AuCitTbywgeW91IHNob3VsZCBub3QgYmUgY29uZnVzZWQgaWYgOmNsYXNzOmBjX2xvbmdgIGlzIHByaW50ZWQgaWYgeW91IHdvdWxkIGV4cGVjdAorOmNsYXNzOmBjX2ludGAgLS0tIHRoZXkgYXJlIGFjdHVhbGx5IHRoZSBzYW1lIHR5cGUuCiAKIC4uIF9jdHlwZXMtbG9hZGluZy1keW5hbWljLWxpbmstbGlicmFyaWVzOgogCkBAIC01MiwyNCArNTMsMzAgQEAKIGNvbnZlbnRpb246OgogCiAgICA+Pj4gZnJvbSBjdHlwZXMgaW1wb3J0ICoKLSAgID4+PiBwcmludCh3aW5kbGwua2VybmVsMzIpICMgZG9jdGVzdDogK1dJTkRPV1MKKyAgID4+PiBwcmludCh3aW5kbGwua2VybmVsMzIpICAjIGRvY3Rlc3Q6ICtXSU5ET1dTCiAgICA8V2luRExMICdrZXJuZWwzMicsIGhhbmRsZSAuLi4gYXQgLi4uPgotICAgPj4+IHByaW50KGNkbGwubXN2Y3J0KSAjIGRvY3Rlc3Q6ICtXSU5ET1dTCisgICA+Pj4gcHJpbnQoY2RsbC5tc3ZjcnQpICAgICAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgPENETEwgJ21zdmNydCcsIGhhbmRsZSAuLi4gYXQgLi4uPgotICAgPj4+IGxpYmMgPSBjZGxsLm1zdmNydCAjIGRvY3Rlc3Q6ICtXSU5ET1dTCisgICA+Pj4gbGliYyA9IGNkbGwubXN2Y3J0ICAgICAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgPj4+CiAKIFdpbmRvd3MgYXBwZW5kcyB0aGUgdXN1YWwgYGAuZGxsYGAgZmlsZSBzdWZmaXggYXV0b21hdGljYWxseS4KIAorLi4gbm90ZTo6CisgICAgQWNjZXNzaW5nIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgdGhyb3VnaCBgYGNkbGwubXN2Y3J0YGAgd2lsbCB1c2UgYW4KKyAgICBvdXRkYXRlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IHRoYXQgbWF5IGJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUKKyAgICBiZWluZyB1c2VkIGJ5IFB5dGhvbi4gV2hlcmUgcG9zc2libGUsIHVzZSBuYXRpdmUgUHl0aG9uIGZ1bmN0aW9uYWxpdHksCisgICAgb3IgZWxzZSBpbXBvcnQgYW5kIHVzZSB0aGUgYGBtc3ZjcnRgYCBtb2R1bGUuCisKIE9uIExpbnV4LCBpdCBpcyByZXF1aXJlZCB0byBzcGVjaWZ5IHRoZSBmaWxlbmFtZSAqaW5jbHVkaW5nKiB0aGUgZXh0ZW5zaW9uIHRvCiBsb2FkIGEgbGlicmFyeSwgc28gYXR0cmlidXRlIGFjY2VzcyBjYW4gbm90IGJlIHVzZWQgdG8gbG9hZCBsaWJyYXJpZXMuIEVpdGhlciB0aGUKIDptZXRoOmBMb2FkTGlicmFyeWAgbWV0aG9kIG9mIHRoZSBkbGwgbG9hZGVycyBzaG91bGQgYmUgdXNlZCwgb3IgeW91IHNob3VsZCBsb2FkCiB0aGUgbGlicmFyeSBieSBjcmVhdGluZyBhbiBpbnN0YW5jZSBvZiBDRExMIGJ5IGNhbGxpbmcgdGhlIGNvbnN0cnVjdG9yOjoKIAotICAgPj4+IGNkbGwuTG9hZExpYnJhcnkoImxpYmMuc28uNiIpICMgZG9jdGVzdDogK0xJTlVYCisgICA+Pj4gY2RsbC5Mb2FkTGlicmFyeSgibGliYy5zby42IikgICMgZG9jdGVzdDogK0xJTlVYCiAgICA8Q0RMTCAnbGliYy5zby42JywgaGFuZGxlIC4uLiBhdCAuLi4+Ci0gICA+Pj4gbGliYyA9IENETEwoImxpYmMuc28uNiIpICAgICAjIGRvY3Rlc3Q6ICtMSU5VWAotICAgPj4+IGxpYmMgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb2N0ZXN0OiArTElOVVgKKyAgID4+PiBsaWJjID0gQ0RMTCgibGliYy5zby42IikgICAgICAgIyBkb2N0ZXN0OiArTElOVVgKKyAgID4+PiBsaWJjICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb2N0ZXN0OiArTElOVVgKICAgIDxDRExMICdsaWJjLnNvLjYnLCBoYW5kbGUgLi4uIGF0IC4uLj4KICAgID4+PgogCkBAIC04Niw5ICs5Myw5IEBACiAgICA+Pj4gZnJvbSBjdHlwZXMgaW1wb3J0ICoKICAgID4+PiBsaWJjLnByaW50ZgogICAgPF9GdW5jUHRyIG9iamVjdCBhdCAweC4uLj4KLSAgID4+PiBwcmludCh3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQSkgIyBkb2N0ZXN0OiArV0lORE9XUworICAgPj4+IHByaW50KHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgPF9GdW5jUHRyIG9iamVjdCBhdCAweC4uLj4KLSAgID4+PiBwcmludCh3aW5kbGwua2VybmVsMzIuTXlPd25GdW5jdGlvbikgIyBkb2N0ZXN0OiArV0lORE9XUworICAgPj4+IHByaW50KHdpbmRsbC5rZXJuZWwzMi5NeU93bkZ1bmN0aW9uKSAgICAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICAgIEZpbGUgImN0eXBlcy5weSIsIGxpbmUgMjM5LCBpbiBfX2dldGF0dHJfXwpAQCAtMTE3LDE2ICsxMjQsMTYgQEAKIGlkZW50aWZpZXJzLCBsaWtlIGBgIj8/MkBZQVBBWElAWiJgYC4gSW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIHVzZQogOmZ1bmM6YGdldGF0dHJgIHRvIHJldHJpZXZlIHRoZSBmdW5jdGlvbjo6CiAKLSAgID4+PiBnZXRhdHRyKGNkbGwubXN2Y3J0LCAiPz8yQFlBUEFYSUBaIikgIyBkb2N0ZXN0OiArV0lORE9XUworICAgPj4+IGdldGF0dHIoY2RsbC5tc3ZjcnQsICI/PzJAWUFQQVhJQFoiKSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgPF9GdW5jUHRyIG9iamVjdCBhdCAweC4uLj4KICAgID4+PgogCiBPbiBXaW5kb3dzLCBzb21lIGRsbHMgZXhwb3J0IGZ1bmN0aW9ucyBub3QgYnkgbmFtZSBidXQgYnkgb3JkaW5hbC4gVGhlc2UKIGZ1bmN0aW9ucyBjYW4gYmUgYWNjZXNzZWQgYnkgaW5kZXhpbmcgdGhlIGRsbCBvYmplY3Qgd2l0aCB0aGUgb3JkaW5hbCBudW1iZXI6OgogCi0gICA+Pj4gY2RsbC5rZXJuZWwzMlsxXSAjIGRvY3Rlc3Q6ICtXSU5ET1dTCisgICA+Pj4gY2RsbC5rZXJuZWwzMlsxXSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgPF9GdW5jUHRyIG9iamVjdCBhdCAweC4uLj4KLSAgID4+PiBjZGxsLmtlcm5lbDMyWzBdICMgZG9jdGVzdDogK1dJTkRPV1MKKyAgID4+PiBjZGxsLmtlcm5lbDMyWzBdICAjIGRvY3Rlc3Q6ICtXSU5ET1dTCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgICAgRmlsZSAiY3R5cGVzLnB5IiwgbGluZSAzMTAsIGluIF9fZ2V0aXRlbV9fCkBAIC0xNDgsOSArMTU1LDkgQEAKIFRoaXMgZXhhbXBsZSBjYWxscyBib3RoIGZ1bmN0aW9ucyB3aXRoIGEgTlVMTCBwb2ludGVyIChgYE5vbmVgYCBzaG91bGQgYmUgdXNlZAogYXMgdGhlIE5VTEwgcG9pbnRlcik6OgogCi0gICA+Pj4gcHJpbnQobGliYy50aW1lKE5vbmUpKSAjIGRvY3Rlc3Q6ICtTS0lQCisgICA+Pj4gcHJpbnQobGliYy50aW1lKE5vbmUpKSAgIyBkb2N0ZXN0OiArU0tJUAogICAgMTE1MDY0MDc5MgotICAgPj4+IHByaW50KGhleCh3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQShOb25lKSkpICMgZG9jdGVzdDogK1dJTkRPV1MKKyAgID4+PiBwcmludChoZXgod2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoTm9uZSkpKSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgMHgxZDAwMDAwMAogICAgPj4+CiAKQEAgLTE1OSwxMSArMTY2LDExIEBACiBXaW5kb3dzLiAgSXQgZG9lcyB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgc3RhY2sgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMsIHNvCiBhbHRob3VnaCBhbiBlcnJvciBpcyByYWlzZWQgdGhlIGZ1bmN0aW9uICpoYXMqIGJlZW4gY2FsbGVkOjoKIAotICAgPj4+IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKCkgIyBkb2N0ZXN0OiArV0lORE9XUworICAgPj4+IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKCkgICAgICAjIGRvY3Rlc3Q6ICtXSU5ET1dTCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoIGFyZ3VtZW50cyAoNCBieXRlcyBtaXNzaW5nKQotICAgPj4+IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKDAsIDApICMgZG9jdGVzdDogK1dJTkRPV1MKKyAgID4+PiB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQSgwLCAwKSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzICg0IGJ5dGVzIGluIGV4Y2VzcykKQEAgLTE3MiwxMyArMTc5LDEzIEBACiBUaGUgc2FtZSBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4geW91IGNhbGwgYW4gYGBzdGRjYWxsYGAgZnVuY3Rpb24gd2l0aCB0aGUKIGBgY2RlY2xgYCBjYWxsaW5nIGNvbnZlbnRpb24sIG9yIHZpY2UgdmVyc2E6OgogCi0gICA+Pj4gY2RsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKE5vbmUpICMgZG9jdGVzdDogK1dJTkRPV1MKKyAgID4+PiBjZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoTm9uZSkgICMgZG9jdGVzdDogK1dJTkRPV1MKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgVmFsdWVFcnJvcjogUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIG5vdCBlbm91Z2ggYXJndW1lbnRzICg0IGJ5dGVzIG1pc3NpbmcpCiAgICA+Pj4KIAotICAgPj4+IHdpbmRsbC5tc3ZjcnQucHJpbnRmKGIic3BhbSIpICMgZG9jdGVzdDogK1dJTkRPV1MKKyAgID4+PiB3aW5kbGwubXN2Y3J0LnByaW50ZihiInNwYW0iKSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzICg0IGJ5dGVzIGluIGV4Y2VzcykKQEAgLTE5MSw3ICsxOTgsNyBAQAogY3Jhc2hlcyBmcm9tIGdlbmVyYWwgcHJvdGVjdGlvbiBmYXVsdHMgd2hlbiBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIGludmFsaWQKIGFyZ3VtZW50IHZhbHVlczo6CiAKLSAgID4+PiB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlQSgzMikgIyBkb2N0ZXN0OiArV0lORE9XUworICAgPj4+IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKDMyKSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICBPU0Vycm9yOiBleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gcmVhZGluZyAweDAwMDAwMDIwCkBAIC00NTYsOSArNDYzLDkgQEAKIGEgc3RyaW5nIHBvaW50ZXIgYW5kIGEgY2hhciwgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RyaW5nOjoKIAogICAgPj4+IHN0cmNociA9IGxpYmMuc3RyY2hyCi0gICA+Pj4gc3RyY2hyKGIiYWJjZGVmIiwgb3JkKCJkIikpICMgZG9jdGVzdDogK1NLSVAKKyAgID4+PiBzdHJjaHIoYiJhYmNkZWYiLCBvcmQoImQiKSkgICMgZG9jdGVzdDogK1NLSVAKICAgIDgwNTk5ODMKLSAgID4+PiBzdHJjaHIucmVzdHlwZSA9IGNfY2hhcl9wICAgIyBjX2NoYXJfcCBpcyBhIHBvaW50ZXIgdG8gYSBzdHJpbmcKKyAgID4+PiBzdHJjaHIucmVzdHlwZSA9IGNfY2hhcl9wICAgICMgY19jaGFyX3AgaXMgYSBwb2ludGVyIHRvIGEgc3RyaW5nCiAgICA+Pj4gc3RyY2hyKGIiYWJjZGVmIiwgb3JkKCJkIikpCiAgICBiJ2RlZicKICAgID4+PiBwcmludChzdHJjaHIoYiJhYmNkZWYiLCBvcmQoIngiKSkpCkBAIC00ODksMTcgKzQ5NiwxNyBAQAogcmVzdWx0IG9mIHRoaXMgY2FsbCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJlc3VsdCBvZiB5b3VyIGZ1bmN0aW9uIGNhbGwuIFRoaXMgaXMKIHVzZWZ1bCB0byBjaGVjayBmb3IgZXJyb3IgcmV0dXJuIHZhbHVlcyBhbmQgYXV0b21hdGljYWxseSByYWlzZSBhbiBleGNlcHRpb246OgogCi0gICA+Pj4gR2V0TW9kdWxlSGFuZGxlID0gd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEgIyBkb2N0ZXN0OiArV0lORE9XUworICAgPj4+IEdldE1vZHVsZUhhbmRsZSA9IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBICAjIGRvY3Rlc3Q6ICtXSU5ET1dTCiAgICA+Pj4gZGVmIFZhbGlkSGFuZGxlKHZhbHVlKToKICAgIC4uLiAgICAgaWYgdmFsdWUgPT0gMDoKICAgIC4uLiAgICAgICAgIHJhaXNlIFdpbkVycm9yKCkKICAgIC4uLiAgICAgcmV0dXJuIHZhbHVlCiAgICAuLi4KICAgID4+PgotICAgPj4+IEdldE1vZHVsZUhhbmRsZS5yZXN0eXBlID0gVmFsaWRIYW5kbGUgIyBkb2N0ZXN0OiArV0lORE9XUwotICAgPj4+IEdldE1vZHVsZUhhbmRsZShOb25lKSAjIGRvY3Rlc3Q6ICtXSU5ET1dTCisgICA+Pj4gR2V0TW9kdWxlSGFuZGxlLnJlc3R5cGUgPSBWYWxpZEhhbmRsZSAgIyBkb2N0ZXN0OiArV0lORE9XUworICAgPj4+IEdldE1vZHVsZUhhbmRsZShOb25lKSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgNDg2NTM5MjY0Ci0gICA+Pj4gR2V0TW9kdWxlSGFuZGxlKCJzb21ldGhpbmcgc2lsbHkiKSAjIGRvY3Rlc3Q6ICtXSU5ET1dTCisgICA+Pj4gR2V0TW9kdWxlSGFuZGxlKCJzb21ldGhpbmcgc2lsbHkiKSAgIyBkb2N0ZXN0OiArV0lORE9XUwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDMsIGluIFZhbGlkSGFuZGxlCkBAIC02NjUsMTcgKzY3MiwxNyBAQAogCiAgICBUZW5Qb2ludHNBcnJheVR5cGUgPSBQT0lOVCAqIDEwCiAKLUhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhbiBzb21ld2hhdCBhcnRpZmljaWFsIGRhdGEgdHlwZSwgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyA0CitIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBzb21ld2hhdCBhcnRpZmljaWFsIGRhdGEgdHlwZSwgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyA0CiBQT0lOVHMgYW1vbmcgb3RoZXIgc3R1ZmY6OgogCiAgICA+Pj4gZnJvbSBjdHlwZXMgaW1wb3J0ICoKICAgID4+PiBjbGFzcyBQT0lOVChTdHJ1Y3R1cmUpOgotICAgLi4uICAgIF9maWVsZHNfID0gKCJ4IiwgY19pbnQpLCAoInkiLCBjX2ludCkKKyAgIC4uLiAgICAgX2ZpZWxkc18gPSAoIngiLCBjX2ludCksICgieSIsIGNfaW50KQogICAgLi4uCiAgICA+Pj4gY2xhc3MgTXlTdHJ1Y3QoU3RydWN0dXJlKToKLSAgIC4uLiAgICBfZmllbGRzXyA9IFsoImEiLCBjX2ludCksCi0gICAuLi4gICAgICAgICAgICAgICAgKCJiIiwgY19mbG9hdCksCi0gICAuLi4gICAgICAgICAgICAgICAgKCJwb2ludF9hcnJheSIsIFBPSU5UICogNCldCisgICAuLi4gICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KSwKKyAgIC4uLiAgICAgICAgICAgICAgICAgKCJiIiwgY19mbG9hdCksCisgICAuLi4gICAgICAgICAgICAgICAgICgicG9pbnRfYXJyYXkiLCBQT0lOVCAqIDQpXQogICAgPj4+CiAgICA+Pj4gcHJpbnQobGVuKE15U3RydWN0KCkucG9pbnRfYXJyYXkpKQogICAgNApAQCAtNzE2LDggKzcyMyw4IEBACiAgICA+Pj4gcGkgPSBwb2ludGVyKGkpCiAgICA+Pj4KIAotUG9pbnRlciBpbnN0YW5jZXMgaGF2ZSBhIDphdHRyOmBjb250ZW50c2AgYXR0cmlidXRlIHdoaWNoIHJldHVybnMgdGhlIG9iamVjdCB0bwotd2hpY2ggdGhlIHBvaW50ZXIgcG9pbnRzLCB0aGUgYGBpYGAgb2JqZWN0IGFib3ZlOjoKK1BvaW50ZXIgaW5zdGFuY2VzIGhhdmUgYSA6YXR0cjpgfl9Qb2ludGVyLmNvbnRlbnRzYCBhdHRyaWJ1dGUgd2hpY2gKK3JldHVybnMgdGhlIG9iamVjdCB0byB3aGljaCB0aGUgcG9pbnRlciBwb2ludHMsIHRoZSBgYGlgYCBvYmplY3QgYWJvdmU6OgogCiAgICA+Pj4gcGkuY29udGVudHMKICAgIGNfbG9uZyg0MikKQEAgLTk0Miw3ICs5NDksNyBAQAogQ2FsbGJhY2sgZnVuY3Rpb25zCiBeXl5eXl5eXl5eXl5eXl5eXl4KIAotOm1vZDpgY3R5cGVzYCBhbGxvd3MgdG8gY3JlYXRlIEMgY2FsbGFibGUgZnVuY3Rpb24gcG9pbnRlcnMgZnJvbSBQeXRob24gY2FsbGFibGVzLgorOm1vZDpgY3R5cGVzYCBhbGxvd3MgY3JlYXRpbmcgQyBjYWxsYWJsZSBmdW5jdGlvbiBwb2ludGVycyBmcm9tIFB5dGhvbiBjYWxsYWJsZXMuCiBUaGVzZSBhcmUgc29tZXRpbWVzIGNhbGxlZCAqY2FsbGJhY2sgZnVuY3Rpb25zKi4KIAogRmlyc3QsIHlvdSBtdXN0IGNyZWF0ZSBhIGNsYXNzIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZSBjbGFzcyBrbm93cyB0aGUKQEAgLTk5Miw3ICs5OTksNyBAQAogCiBUaGUgcmVzdWx0OjoKIAotICAgPj4+IHFzb3J0KGlhLCBsZW4oaWEpLCBzaXplb2YoY19pbnQpLCBjbXBfZnVuYykgIyBkb2N0ZXN0OiArTElOVVgKKyAgID4+PiBxc29ydChpYSwgbGVuKGlhKSwgc2l6ZW9mKGNfaW50KSwgY21wX2Z1bmMpICAjIGRvY3Rlc3Q6ICtMSU5VWAogICAgcHlfY21wX2Z1bmMgNSAxCiAgICBweV9jbXBfZnVuYyAzMyA5OQogICAgcHlfY21wX2Z1bmMgNyAzMwpAQCAtMTA5NCwxNCArMTEwMSwxNSBAQAogaGl0IHRoZSBOVUxMIGVudHJ5OjoKIAogICAgPj4+IGZvciBpdGVtIGluIHRhYmxlOgotICAgLi4uICAgIHByaW50KGl0ZW0ubmFtZSwgaXRlbS5zaXplKQotICAgLi4uICAgIGlmIGl0ZW0ubmFtZSBpcyBOb25lOgotICAgLi4uICAgICAgICBicmVhaworICAgLi4uICAgICBpZiBpdGVtLm5hbWUgaXMgTm9uZToKKyAgIC4uLiAgICAgICAgIGJyZWFrCisgICAuLi4gICAgIHByaW50KGl0ZW0ubmFtZS5kZWNvZGUoImFzY2lpIiksIGl0ZW0uc2l6ZSkKICAgIC4uLgotICAgX19oZWxsb19fIDEwNAotICAgX19waGVsbG9fXyAtMTA0Ci0gICBfX3BoZWxsb19fLnNwYW0gMTA0Ci0gICBOb25lIDAKKyAgIF9mcm96ZW5faW1wb3J0bGliIDMxNzY0CisgICBfZnJvemVuX2ltcG9ydGxpYl9leHRlcm5hbCA0MTQ5OQorICAgX19oZWxsb19fIDE2MQorICAgX19waGVsbG9fXyAtMTYxCisgICBfX3BoZWxsb19fLnNwYW0gMTYxCiAgICA+Pj4KIAogVGhlIGZhY3QgdGhhdCBzdGFuZGFyZCBQeXRob24gaGFzIGEgZnJvemVuIG1vZHVsZSBhbmQgYSBmcm96ZW4gcGFja2FnZQpAQCAtMTI5MSw3ICsxMjk5LDcgQEAKIExvYWRpbmcgc2hhcmVkIGxpYnJhcmllcwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gbG9hZGVkIHNoYXJlZCBsaWJyYXJpZXMgaW50byB0aGUgUHl0aG9uIHByb2Nlc3MuICBPbmUKK1RoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gbG9hZCBzaGFyZWQgbGlicmFyaWVzIGludG8gdGhlIFB5dGhvbiBwcm9jZXNzLiAgT25lCiB3YXkgaXMgdG8gaW5zdGFudGlhdGUgb25lIG9mIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogCkBAIC0xMzUwLDcgKzEzNTgsNyBAQAogaWdub3JlZC4KIAogVGhlICp1c2VfZXJybm8qIHBhcmFtZXRlciwgd2hlbiBzZXQgdG8gVHJ1ZSwgZW5hYmxlcyBhIGN0eXBlcyBtZWNoYW5pc20gdGhhdAotYWxsb3dzIHRvIGFjY2VzcyB0aGUgc3lzdGVtIDpkYXRhOmBlcnJub2AgZXJyb3IgbnVtYmVyIGluIGEgc2FmZSB3YXkuCithbGxvd3MgYWNjZXNzaW5nIHRoZSBzeXN0ZW0gOmRhdGE6YGVycm5vYCBlcnJvciBudW1iZXIgaW4gYSBzYWZlIHdheS4KIDptb2Q6YGN0eXBlc2AgbWFpbnRhaW5zIGEgdGhyZWFkLWxvY2FsIGNvcHkgb2YgdGhlIHN5c3RlbXMgOmRhdGE6YGVycm5vYAogdmFyaWFibGU7IGlmIHlvdSBjYWxsIGZvcmVpZ24gZnVuY3Rpb25zIGNyZWF0ZWQgd2l0aCBgYHVzZV9lcnJubz1UcnVlYGAgdGhlbiB0aGUKIDpkYXRhOmBlcnJub2AgdmFsdWUgYmVmb3JlIHRoZSBmdW5jdGlvbiBjYWxsIGlzIHN3YXBwZWQgd2l0aCB0aGUgY3R5cGVzIHByaXZhdGUKQEAgLTE0MjEsNyArMTQyOSw3IEBACiAgICBDbGFzcyB3aGljaCBsb2FkcyBzaGFyZWQgbGlicmFyaWVzLiAgKmRsbHR5cGUqIHNob3VsZCBiZSBvbmUgb2YgdGhlCiAgICA6Y2xhc3M6YENETExgLCA6Y2xhc3M6YFB5RExMYCwgOmNsYXNzOmBXaW5ETExgLCBvciA6Y2xhc3M6YE9sZURMTGAgdHlwZXMuCiAKLSAgIDptZXRoOmBfX2dldGF0dHJfX2AgaGFzIHNwZWNpYWwgYmVoYXZpb3I6IEl0IGFsbG93cyB0byBsb2FkIGEgc2hhcmVkIGxpYnJhcnkgYnkKKyAgIDptZXRoOmBfX2dldGF0dHJfX2AgaGFzIHNwZWNpYWwgYmVoYXZpb3I6IEl0IGFsbG93cyBsb2FkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYnkKICAgIGFjY2Vzc2luZyBpdCBhcyBhdHRyaWJ1dGUgb2YgYSBsaWJyYXJ5IGxvYWRlciBpbnN0YW5jZS4gIFRoZSByZXN1bHQgaXMgY2FjaGVkLAogICAgc28gcmVwZWF0ZWQgYXR0cmlidXRlIGFjY2Vzc2VzIHJldHVybiB0aGUgc2FtZSBsaWJyYXJ5IGVhY2ggdGltZS4KIApAQCAtMTQ5OCw3ICsxNTA2LDcgQEAKIAogICAgICAgSXQgaXMgcG9zc2libGUgdG8gYXNzaWduIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCB0aGF0IGlzIG5vdCBhIGN0eXBlcwogICAgICAgdHlwZSwgaW4gdGhpcyBjYXNlIHRoZSBmdW5jdGlvbiBpcyBhc3N1bWVkIHRvIHJldHVybiBhIEMgOmM6dHlwZTpgaW50YCwgYW5kCi0gICAgICB0aGUgY2FsbGFibGUgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGlzIGludGVnZXIsIGFsbG93aW5nIHRvIGRvIGZ1cnRoZXIKKyAgICAgIHRoZSBjYWxsYWJsZSB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoaXMgaW50ZWdlciwgYWxsb3dpbmcgZnVydGhlcgogICAgICAgcHJvY2Vzc2luZyBvciBlcnJvciBjaGVja2luZy4gIFVzaW5nIHRoaXMgaXMgZGVwcmVjYXRlZCwgZm9yIG1vcmUgZmxleGlibGUKICAgICAgIHBvc3QgcHJvY2Vzc2luZyBvciBlcnJvciBjaGVja2luZyB1c2UgYSBjdHlwZXMgZGF0YSB0eXBlIGFzCiAgICAgICA6YXR0cjpgcmVzdHlwZWAgYW5kIGFzc2lnbiBhIGNhbGxhYmxlIHRvIHRoZSA6YXR0cjpgZXJyY2hlY2tgIGF0dHJpYnV0ZS4KQEAgLTE1MTMsNyArMTUyMSw3IEBACiAKICAgICAgIFdoZW4gYSBmb3JlaWduIGZ1bmN0aW9uIGlzIGNhbGxlZCwgZWFjaCBhY3R1YWwgYXJndW1lbnQgaXMgcGFzc2VkIHRvIHRoZQogICAgICAgOm1ldGg6YGZyb21fcGFyYW1gIGNsYXNzIG1ldGhvZCBvZiB0aGUgaXRlbXMgaW4gdGhlIDphdHRyOmBhcmd0eXBlc2AKLSAgICAgIHR1cGxlLCB0aGlzIG1ldGhvZCBhbGxvd3MgdG8gYWRhcHQgdGhlIGFjdHVhbCBhcmd1bWVudCB0byBhbiBvYmplY3QgdGhhdAorICAgICAgdHVwbGUsIHRoaXMgbWV0aG9kIGFsbG93cyBhZGFwdGluZyB0aGUgYWN0dWFsIGFyZ3VtZW50IHRvIGFuIG9iamVjdCB0aGF0CiAgICAgICB0aGUgZm9yZWlnbiBmdW5jdGlvbiBhY2NlcHRzLiAgRm9yIGV4YW1wbGUsIGEgOmNsYXNzOmBjX2NoYXJfcGAgaXRlbSBpbgogICAgICAgdGhlIDphdHRyOmBhcmd0eXBlc2AgdHVwbGUgd2lsbCBjb252ZXJ0IGEgc3RyaW5nIHBhc3NlZCBhcyBhcmd1bWVudCBpbnRvCiAgICAgICBhIGJ5dGVzIG9iamVjdCB1c2luZyBjdHlwZXMgY29udmVyc2lvbiBydWxlcy4KQEAgLTE1MjEsNyArMTUyOSw3IEBACiAgICAgICBOZXc6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byBwdXQgaXRlbXMgaW4gYXJndHlwZXMgd2hpY2ggYXJlIG5vdCBjdHlwZXMKICAgICAgIHR5cGVzLCBidXQgZWFjaCBpdGVtIG11c3QgaGF2ZSBhIDptZXRoOmBmcm9tX3BhcmFtYCBtZXRob2Qgd2hpY2ggcmV0dXJucyBhCiAgICAgICB2YWx1ZSB1c2FibGUgYXMgYXJndW1lbnQgKGludGVnZXIsIHN0cmluZywgY3R5cGVzIGluc3RhbmNlKS4gIFRoaXMgYWxsb3dzCi0gICAgICB0byBkZWZpbmUgYWRhcHRlcnMgdGhhdCBjYW4gYWRhcHQgY3VzdG9tIG9iamVjdHMgYXMgZnVuY3Rpb24gcGFyYW1ldGVycy4KKyAgICAgIGRlZmluaW5nIGFkYXB0ZXJzIHRoYXQgY2FuIGFkYXB0IGN1c3RvbSBvYmplY3RzIGFzIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGVycmNoZWNrCiAKQEAgLTE1MzUsMTIgKzE1NDMsMTIgQEAKICAgICAgICAgICpyZXN1bHQqIGlzIHdoYXQgdGhlIGZvcmVpZ24gZnVuY3Rpb24gcmV0dXJucywgYXMgc3BlY2lmaWVkIGJ5IHRoZQogICAgICAgICAgOmF0dHI6YHJlc3R5cGVgIGF0dHJpYnV0ZS4KIAotICAgICAgICAgKmZ1bmMqIGlzIHRoZSBmb3JlaWduIGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYsIHRoaXMgYWxsb3dzIHRvIHJldXNlIHRoZQorICAgICAgICAgKmZ1bmMqIGlzIHRoZSBmb3JlaWduIGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYsIHRoaXMgYWxsb3dzIHJldXNpbmcgdGhlCiAgICAgICAgICBzYW1lIGNhbGxhYmxlIG9iamVjdCB0byBjaGVjayBvciBwb3N0IHByb2Nlc3MgdGhlIHJlc3VsdHMgb2Ygc2V2ZXJhbAogICAgICAgICAgZnVuY3Rpb25zLgogCiAgICAgICAgICAqYXJndW1lbnRzKiBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlcnMgb3JpZ2luYWxseSBwYXNzZWQgdG8KLSAgICAgICAgIHRoZSBmdW5jdGlvbiBjYWxsLCB0aGlzIGFsbG93cyB0byBzcGVjaWFsaXplIHRoZSBiZWhhdmlvciBvbiB0aGUKKyAgICAgICAgIHRoZSBmdW5jdGlvbiBjYWxsLCB0aGlzIGFsbG93cyBzcGVjaWFsaXppbmcgdGhlIGJlaGF2aW9yIG9uIHRoZQogICAgICAgICAgYXJndW1lbnRzIHVzZWQuCiAKICAgICAgIFRoZSBvYmplY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2lsbCBiZSByZXR1cm5lZCBmcm9tIHRoZQpAQCAtMTc4NSw3ICsxNzkzLDcgQEAKICAgIElmIGEgYnl0ZXMgb2JqZWN0IGlzIHNwZWNpZmllZCBhcyBmaXJzdCBhcmd1bWVudCwgdGhlIGJ1ZmZlciBpcyBtYWRlIG9uZSBpdGVtCiAgICBsYXJnZXIgdGhhbiBpdHMgbGVuZ3RoIHNvIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgYXJyYXkgaXMgYSBOVUwKICAgIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4gQW4gaW50ZWdlciBjYW4gYmUgcGFzc2VkIGFzIHNlY29uZCBhcmd1bWVudCB3aGljaCBhbGxvd3MKLSAgIHRvIHNwZWNpZnkgdGhlIHNpemUgb2YgdGhlIGFycmF5IGlmIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGVzIHNob3VsZCBub3QgYmUgdXNlZC4KKyAgIHNwZWNpZnlpbmcgdGhlIHNpemUgb2YgdGhlIGFycmF5IGlmIHRoZSBsZW5ndGggb2YgdGhlIGJ5dGVzIHNob3VsZCBub3QgYmUgdXNlZC4KIAogCiAKQEAgLTE4MDAsMjEgKzE4MDgsMjEgQEAKICAgIElmIGEgc3RyaW5nIGlzIHNwZWNpZmllZCBhcyBmaXJzdCBhcmd1bWVudCwgdGhlIGJ1ZmZlciBpcyBtYWRlIG9uZSBpdGVtCiAgICBsYXJnZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgc28gdGhhdCB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBhcnJheSBpcyBhCiAgICBOVUwgdGVybWluYXRpb24gY2hhcmFjdGVyLiBBbiBpbnRlZ2VyIGNhbiBiZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IHdoaWNoCi0gICBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgaWYgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHNob3VsZCBub3QKKyAgIGFsbG93cyBzcGVjaWZ5aW5nIHRoZSBzaXplIG9mIHRoZSBhcnJheSBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgc2hvdWxkIG5vdAogICAgYmUgdXNlZC4KIAogCiAKIC4uIGZ1bmN0aW9uOjogRGxsQ2FuVW5sb2FkTm93KCkKIAotICAgV2luZG93cyBvbmx5OiBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayB3aGljaCBhbGxvd3MgdG8gaW1wbGVtZW50IGluLXByb2Nlc3MKKyAgIFdpbmRvd3Mgb25seTogVGhpcyBmdW5jdGlvbiBpcyBhIGhvb2sgd2hpY2ggYWxsb3dzIGltcGxlbWVudGluZyBpbi1wcm9jZXNzCiAgICBDT00gc2VydmVycyB3aXRoIGN0eXBlcy4gIEl0IGlzIGNhbGxlZCBmcm9tIHRoZSBEbGxDYW5VbmxvYWROb3cgZnVuY3Rpb24gdGhhdAogICAgdGhlIF9jdHlwZXMgZXh0ZW5zaW9uIGRsbCBleHBvcnRzLgogCiAKIC4uIGZ1bmN0aW9uOjogRGxsR2V0Q2xhc3NPYmplY3QoKQogCi0gICBXaW5kb3dzIG9ubHk6IFRoaXMgZnVuY3Rpb24gaXMgYSBob29rIHdoaWNoIGFsbG93cyB0byBpbXBsZW1lbnQgaW4tcHJvY2VzcworICAgV2luZG93cyBvbmx5OiBUaGlzIGZ1bmN0aW9uIGlzIGEgaG9vayB3aGljaCBhbGxvd3MgaW1wbGVtZW50aW5nIGluLXByb2Nlc3MKICAgIENPTSBzZXJ2ZXJzIHdpdGggY3R5cGVzLiAgSXQgaXMgY2FsbGVkIGZyb20gdGhlIERsbEdldENsYXNzT2JqZWN0IGZ1bmN0aW9uCiAgICB0aGF0IHRoZSBgYF9jdHlwZXNgYCBleHRlbnNpb24gZGxsIGV4cG9ydHMuCiAKQEAgLTE4ODIsNyArMTg5MCw3IEBACiAuLiBmdW5jdGlvbjo6IFBPSU5URVIodHlwZSkKIAogICAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgY3R5cGVzIHBvaW50ZXIgdHlwZS4gUG9pbnRlcgotICAgdHlwZXMgYXJlIGNhY2hlZCBhbiByZXVzZWQgaW50ZXJuYWxseSwgc28gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHkgaXMKKyAgIHR5cGVzIGFyZSBjYWNoZWQgYW5kIHJldXNlZCBpbnRlcm5hbGx5LCBzbyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSBpcwogICAgY2hlYXAuICp0eXBlKiBtdXN0IGJlIGEgY3R5cGVzIHR5cGUuCiAKIApAQCAtMjMyMSw3ICsyMzI5LDcgQEAKICAgICAgIGNoZWNrZWQsIG9ubHkgb25lIGZpZWxkIGNhbiBiZSBhY2Nlc3NlZCB3aGVuIG5hbWVzIGFyZSByZXBlYXRlZC4KIAogICAgICAgSXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIHRoZSA6YXR0cjpgX2ZpZWxkc19gIGNsYXNzIHZhcmlhYmxlICphZnRlciogdGhlCi0gICAgICBjbGFzcyBzdGF0ZW1lbnQgdGhhdCBkZWZpbmVzIHRoZSBTdHJ1Y3R1cmUgc3ViY2xhc3MsIHRoaXMgYWxsb3dzIHRvIGNyZWF0ZQorICAgICAgY2xhc3Mgc3RhdGVtZW50IHRoYXQgZGVmaW5lcyB0aGUgU3RydWN0dXJlIHN1YmNsYXNzLCB0aGlzIGFsbG93cyBjcmVhdGluZwogICAgICAgZGF0YSB0eXBlcyB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgcmVmZXJlbmNlIHRoZW1zZWx2ZXM6OgogCiAgICAgICAgICBjbGFzcyBMaXN0KFN0cnVjdHVyZSk6CkBAIC0yMzQyLDcgKzIzNTAsNyBAQAogCiAgICAuLiBhdHRyaWJ1dGU6OiBfcGFja18KIAotICAgICAgQW4gb3B0aW9uYWwgc21hbGwgaW50ZWdlciB0aGF0IGFsbG93cyB0byBvdmVycmlkZSB0aGUgYWxpZ25tZW50IG9mCisgICAgICBBbiBvcHRpb25hbCBzbWFsbCBpbnRlZ2VyIHRoYXQgYWxsb3dzIG92ZXJyaWRpbmcgdGhlIGFsaWdubWVudCBvZgogICAgICAgc3RydWN0dXJlIGZpZWxkcyBpbiB0aGUgaW5zdGFuY2UuICA6YXR0cjpgX3BhY2tfYCBtdXN0IGFscmVhZHkgYmUgZGVmaW5lZAogICAgICAgd2hlbiA6YXR0cjpgX2ZpZWxkc19gIGlzIGFzc2lnbmVkLCBvdGhlcndpc2UgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdC4KIApAQCAtMjM1NCw4ICsyMzYyLDggQEAKICAgICAgIGFzc2lnbmVkLCBvdGhlcndpc2UgaXQgd2lsbCBoYXZlIG5vIGVmZmVjdC4KIAogICAgICAgVGhlIGZpZWxkcyBsaXN0ZWQgaW4gdGhpcyB2YXJpYWJsZSBtdXN0IGJlIHN0cnVjdHVyZSBvciB1bmlvbiB0eXBlIGZpZWxkcy4KLSAgICAgIDptb2Q6YGN0eXBlc2Agd2lsbCBjcmVhdGUgZGVzY3JpcHRvcnMgaW4gdGhlIHN0cnVjdHVyZSB0eXBlIHRoYXQgYWxsb3dzIHRvCi0gICAgICBhY2Nlc3MgdGhlIG5lc3RlZCBmaWVsZHMgZGlyZWN0bHksIHdpdGhvdXQgdGhlIG5lZWQgdG8gY3JlYXRlIHRoZQorICAgICAgOm1vZDpgY3R5cGVzYCB3aWxsIGNyZWF0ZSBkZXNjcmlwdG9ycyBpbiB0aGUgc3RydWN0dXJlIHR5cGUgdGhhdCBhbGxvd3MKKyAgICAgIGFjY2Vzc2luZyB0aGUgbmVzdGVkIGZpZWxkcyBkaXJlY3RseSwgd2l0aG91dCB0aGUgbmVlZCB0byBjcmVhdGUgdGhlCiAgICAgICBzdHJ1Y3R1cmUgb3IgdW5pb24gZmllbGQuCiAKICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSB0eXBlIChXaW5kb3dzKTo6CkBAIC0yNDAxLDYgKzI0MDksNTYgQEAKIEFycmF5cyBhbmQgcG9pbnRlcnMKIF5eXl5eXl5eXl5eXl5eXl5eXl4KIAotTm90IHlldCB3cml0dGVuIC0gcGxlYXNlIHNlZSB0aGUgc2VjdGlvbnMgOnJlZjpgY3R5cGVzLXBvaW50ZXJzYCBhbmQgc2VjdGlvbgotOnJlZjpgY3R5cGVzLWFycmF5c2AgaW4gdGhlIHR1dG9yaWFsLgorLi4gY2xhc3M6OiBBcnJheShcKmFyZ3MpCisKKyAgIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGFycmF5cy4KKworICAgVGhlIHJlY29tbWVuZGVkIHdheSB0byBjcmVhdGUgY29uY3JldGUgYXJyYXkgdHlwZXMgaXMgYnkgbXVsdGlwbHlpbmcgYW55CisgICA6bW9kOmBjdHlwZXNgIGRhdGEgdHlwZSB3aXRoIGEgcG9zaXRpdmUgaW50ZWdlci4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc3ViY2xhc3MKKyAgIHRoaXMgdHlwZSBhbmQgZGVmaW5lIDphdHRyOmBfbGVuZ3RoX2AgYW5kIDphdHRyOmBfdHlwZV9gIGNsYXNzIHZhcmlhYmxlcy4KKyAgIEFycmF5IGVsZW1lbnRzIGNhbiBiZSByZWFkIGFuZCB3cml0dGVuIHVzaW5nIHN0YW5kYXJkCisgICBzdWJzY3JpcHQgYW5kIHNsaWNlIGFjY2Vzc2VzOyBmb3Igc2xpY2UgcmVhZHMsIHRoZSByZXN1bHRpbmcgb2JqZWN0IGlzCisgICAqbm90KiBpdHNlbGYgYW4gOmNsYXNzOmBBcnJheWAuCisKKworICAgLi4gYXR0cmlidXRlOjogX2xlbmd0aF8KKworICAgICAgICBBIHBvc2l0aXZlIGludGVnZXIgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS4KKyAgICAgICAgT3V0LW9mLXJhbmdlIHN1YnNjcmlwdHMgcmVzdWx0IGluIGFuIDpleGM6YEluZGV4RXJyb3JgLiBXaWxsIGJlCisgICAgICAgIHJldHVybmVkIGJ5IDpmdW5jOmBsZW5gLgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF90eXBlXworCisgICAgICAgIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5LgorCisKKyAgIEFycmF5IHN1YmNsYXNzIGNvbnN0cnVjdG9ycyBhY2NlcHQgcG9zaXRpb25hbCBhcmd1bWVudHMsIHVzZWQgdG8KKyAgIGluaXRpYWxpemUgdGhlIGVsZW1lbnRzIGluIG9yZGVyLgorCisKKy4uIGNsYXNzOjogX1BvaW50ZXIKKworICAgUHJpdmF0ZSwgYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgcG9pbnRlcnMuCisKKyAgIENvbmNyZXRlIHBvaW50ZXIgdHlwZXMgYXJlIGNyZWF0ZWQgYnkgY2FsbGluZyA6ZnVuYzpgUE9JTlRFUmAgd2l0aCB0aGUKKyAgIHR5cGUgdGhhdCB3aWxsIGJlIHBvaW50ZWQgdG87IHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5CisgICA6ZnVuYzpgcG9pbnRlcmAuCisKKyAgIElmIGEgcG9pbnRlciBwb2ludHMgdG8gYW4gYXJyYXksIGl0cyBlbGVtZW50cyBjYW4gYmUgcmVhZCBhbmQKKyAgIHdyaXR0ZW4gdXNpbmcgc3RhbmRhcmQgc3Vic2NyaXB0IGFuZCBzbGljZSBhY2Nlc3Nlcy4gIFBvaW50ZXIgb2JqZWN0cworICAgaGF2ZSBubyBzaXplLCBzbyA6ZnVuYzpgbGVuYCB3aWxsIHJhaXNlIDpleGM6YFR5cGVFcnJvcmAuICBOZWdhdGl2ZQorICAgc3Vic2NyaXB0cyB3aWxsIHJlYWQgZnJvbSB0aGUgbWVtb3J5ICpiZWZvcmUqIHRoZSBwb2ludGVyIChhcyBpbiBDKSwgYW5kCisgICBvdXQtb2YtcmFuZ2Ugc3Vic2NyaXB0cyB3aWxsIHByb2JhYmx5IGNyYXNoIHdpdGggYW4gYWNjZXNzIHZpb2xhdGlvbiAoaWYKKyAgIHlvdSdyZSBsdWNreSkuCisKKworICAgLi4gYXR0cmlidXRlOjogX3R5cGVfCisKKyAgICAgICAgU3BlY2lmaWVzIHRoZSB0eXBlIHBvaW50ZWQgdG8uCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvbnRlbnRzCisKKyAgICAgICAgUmV0dXJucyB0aGUgb2JqZWN0IHRvIHdoaWNoIHRvIHBvaW50ZXIgcG9pbnRzLiAgQXNzaWduaW5nIHRvIHRoaXMKKyAgICAgICAgYXR0cmlidXRlIGNoYW5nZXMgdGhlIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIGFzc2lnbmVkIG9iamVjdC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLnJzdCBiL0RvYy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5yc3QKaW5kZXggNmJjMWZiOS4uZGIzYzgyNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jdXJzZXMuYXNjaWkucnN0CkBAIC0zLDkgKzMsMTEgQEAKIAogLi4gbW9kdWxlOjogY3Vyc2VzLmFzY2lpCiAgICA6c3lub3BzaXM6IENvbnN0YW50cyBhbmQgc2V0LW1lbWJlcnNoaXAgZnVuY3Rpb25zIGZvciBBU0NJSSBjaGFyYWN0ZXJzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBFcmljIFMuIFJheW1vbmQgPGVzckB0aHlyc3VzLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBFcmljIFMuIFJheW1vbmQgPGVzckB0aHlyc3VzLmNvbT4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGN1cnNlcy5hc2NpaWAgbW9kdWxlIHN1cHBsaWVzIG5hbWUgY29uc3RhbnRzIGZvciBBU0NJSSBjaGFyYWN0ZXJzIGFuZAogZnVuY3Rpb25zIHRvIHRlc3QgbWVtYmVyc2hpcCBpbiB2YXJpb3VzIEFTQ0lJIGNoYXJhY3RlciBjbGFzc2VzLiAgVGhlIGNvbnN0YW50cwpAQCAtMTEzLDEyICsxMTUsMTIgQEAKIAogLi4gZnVuY3Rpb246OiBpc2JsYW5rKGMpCiAKLSAgIENoZWNrcyBmb3IgYW4gQVNDSUkgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuCisgICBDaGVja3MgZm9yIGFuIEFTQ0lJIHdoaXRlc3BhY2UgY2hhcmFjdGVyOyBzcGFjZSBvciBob3Jpem9udGFsIHRhYi4KIAogCiAuLiBmdW5jdGlvbjo6IGlzY250cmwoYykKIAotICAgQ2hlY2tzIGZvciBhbiBBU0NJSSBjb250cm9sIGNoYXJhY3RlciAoaW4gdGhlIHJhbmdlIDB4MDAgdG8gMHgxZikuCisgICBDaGVja3MgZm9yIGFuIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyIChpbiB0aGUgcmFuZ2UgMHgwMCB0byAweDFmIG9yIDB4N2YpLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNkaWdpdChjKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLnJzdCBiL0RvYy9saWJyYXJ5L2N1cnNlcy5wYW5lbC5yc3QKaW5kZXggYTNjOGJkYS4uYzk5YzM3YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3Vyc2VzLnBhbmVsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jdXJzZXMucGFuZWwucnN0CkBAIC0zLDggKzMsMTAgQEAKIAogLi4gbW9kdWxlOjogY3Vyc2VzLnBhbmVsCiAgICA6c3lub3BzaXM6IEEgcGFuZWwgc3RhY2sgZXh0ZW5zaW9uIHRoYXQgYWRkcyBkZXB0aCB0byAgY3Vyc2VzIHdpbmRvd3MuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBBLk0uIEt1Y2hsaW5nIDxhbWtAYW1rLmNhPgogCistLS0tLS0tLS0tLS0tLQogCiBQYW5lbHMgYXJlIHdpbmRvd3Mgd2l0aCB0aGUgYWRkZWQgZmVhdHVyZSBvZiBkZXB0aCwgc28gdGhleSBjYW4gYmUgc3RhY2tlZCBvbgogdG9wIG9mIGVhY2ggb3RoZXIsIGFuZCBvbmx5IHRoZSB2aXNpYmxlIHBvcnRpb25zIG9mIGVhY2ggd2luZG93IHdpbGwgYmUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2N1cnNlcy5yc3QgYi9Eb2MvbGlicmFyeS9jdXJzZXMucnN0CmluZGV4IGYzZTYwYjQuLmIxMmEzMjUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2N1cnNlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY3Vyc2VzLnJzdApAQCAtNSw5ICs1LDEyIEBACiAgICA6c3lub3BzaXM6IEFuIGludGVyZmFjZSB0byB0aGUgY3Vyc2VzIGxpYnJhcnksIHByb3ZpZGluZyBwb3J0YWJsZQogICAgICAgICAgICAgICB0ZXJtaW5hbCBoYW5kbGluZy4KICAgIDpwbGF0Zm9ybTogVW5peAorCiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogLi4gc2VjdGlvbmF1dGhvcjo6IEVyaWMgUmF5bW9uZCA8ZXNyQHRoeXJzdXMuY29tPgogCistLS0tLS0tLS0tLS0tLQorCiBUaGUgOm1vZDpgY3Vyc2VzYCBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBjdXJzZXMgbGlicmFyeSwgdGhlCiBkZS1mYWN0byBzdGFuZGFyZCBmb3IgcG9ydGFibGUgYWR2YW5jZWQgdGVybWluYWwgaGFuZGxpbmcuCiAKQEAgLTU5OSw2ICs2MDIsMTMgQEAKICAgICAgIE9ubHkgb25lICpjaCogY2FuIGJlIHB1c2hlZCBiZWZvcmUgOm1ldGg6YGdldGNoYCBpcyBjYWxsZWQuCiAKIAorLi4gZnVuY3Rpb246OiB1cGRhdGVfbGluZXNfY29scygpCisKKyAgIFVwZGF0ZSA6ZW52dmFyOmBMSU5FU2AgYW5kIDplbnZ2YXI6YENPTFNgLiBVc2VmdWwgZm9yIGRldGVjdGluZyBtYW51YWwgc2NyZWVuIHJlc2l6ZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gZnVuY3Rpb246OiB1bmdldF93Y2goY2gpCiAKICAgIFB1c2ggKmNoKiBzbyB0aGUgbmV4dCA6bWV0aDpgZ2V0X3djaGAgd2lsbCByZXR1cm4gaXQuCkBAIC0xNTAxLDkgKzE1MTEsOSBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKIHwgOmtiZDpgRW5kYCAgICAgICB8IEtFWV9FTkQgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwotfCA6a2JkOmBQYWdlIFVwYCAgIHwgS0VZX05QQUdFIHwKK3wgOmtiZDpgUGFnZSBVcGAgICB8IEtFWV9QUEFHRSB8CiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwotfCA6a2JkOmBQYWdlIERvd25gIHwgS0VZX1BQQUdFIHwKK3wgOmtiZDpgUGFnZSBEb3duYCB8IEtFWV9OUEFHRSB8CiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwogCiBUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIGNoYXJhY3RlcnMgZnJvbSB0aGUgYWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQuIFRoZXNlIGFyZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0IGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CmluZGV4IDg4ZjNmNmUuLjkyNTRhZTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKQEAgLTMsMTAgKzMsMTUgQEAKIAogLi4gbW9kdWxlOjogZGF0ZXRpbWUKICAgIDpzeW5vcHNpczogQmFzaWMgZGF0ZSBhbmQgdGltZSB0eXBlcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogVGltIFBldGVycyA8dGltQHpvcGUuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IFRpbSBQZXRlcnMgPHRpbUB6b3BlLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBBLk0uIEt1Y2hsaW5nIDxhbWtAYW1rLmNhPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9kYXRldGltZS5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogLi4gWFhYIHdoYXQgb3JkZXIgc2hvdWxkIHRoZSB0eXBlcyBiZSBkaXNjdXNzZWQgaW4/CiAKIFRoZSA6bW9kOmBkYXRldGltZWAgbW9kdWxlIHN1cHBsaWVzIGNsYXNzZXMgZm9yIG1hbmlwdWxhdGluZyBkYXRlcyBhbmQgdGltZXMgaW4KQEAgLTMxLDcgKzM2LDcgQEAKIHVuZGVyc3RhbmQgYW5kIHRvIHdvcmsgd2l0aCwgYXQgdGhlIGNvc3Qgb2YgaWdub3Jpbmcgc29tZSBhc3BlY3RzIG9mIHJlYWxpdHkuCiAKIEZvciBhcHBsaWNhdGlvbnMgcmVxdWlyaW5nIGF3YXJlIG9iamVjdHMsIDpjbGFzczpgLmRhdGV0aW1lYCBhbmQgOmNsYXNzOmAudGltZWAKLW9iamVjdHMgaGF2ZSBhbiBvcHRpb25hbCB0aW1lIHpvbmUgaW5mb3JtYXRpb24gYXR0cmlidXRlLCA6YXR0cjpgdHppbmZvYCwgdGhhdAorb2JqZWN0cyBoYXZlIGFuIG9wdGlvbmFsIHRpbWUgem9uZSBpbmZvcm1hdGlvbiBhdHRyaWJ1dGUsIDphdHRyOmAhdHppbmZvYCwgdGhhdAogY2FuIGJlIHNldCB0byBhbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIHRoZSBhYnN0cmFjdCA6Y2xhc3M6YHR6aW5mb2AgY2xhc3MuCiBUaGVzZSA6Y2xhc3M6YHR6aW5mb2Agb2JqZWN0cyBjYXB0dXJlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvZmZzZXQgZnJvbSBVVEMKIHRpbWUsIHRoZSB0aW1lIHpvbmUgbmFtZSwgYW5kIHdoZXRoZXIgRGF5bGlnaHQgU2F2aW5nIFRpbWUgaXMgaW4gZWZmZWN0LiAgTm90ZQpAQCAtODMsNyArODgsNyBAQAogICAgQW4gaWRlYWxpemVkIHRpbWUsIGluZGVwZW5kZW50IG9mIGFueSBwYXJ0aWN1bGFyIGRheSwgYXNzdW1pbmcgdGhhdCBldmVyeSBkYXkKICAgIGhhcyBleGFjdGx5IDI0XCo2MFwqNjAgc2Vjb25kcyAodGhlcmUgaXMgbm8gbm90aW9uIG9mICJsZWFwIHNlY29uZHMiIGhlcmUpLgogICAgQXR0cmlidXRlczogOmF0dHI6YGhvdXJgLCA6YXR0cjpgbWludXRlYCwgOmF0dHI6YHNlY29uZGAsIDphdHRyOmBtaWNyb3NlY29uZGAsCi0gICBhbmQgOmF0dHI6YHR6aW5mb2AuCisgICBhbmQgOmF0dHI6YC50emluZm9gLgogCiAKIC4uIGNsYXNzOjogZGF0ZXRpbWUKQEAgLTkxLDcgKzk2LDcgQEAKIAogICAgQSBjb21iaW5hdGlvbiBvZiBhIGRhdGUgYW5kIGEgdGltZS4gQXR0cmlidXRlczogOmF0dHI6YHllYXJgLCA6YXR0cjpgbW9udGhgLAogICAgOmF0dHI6YGRheWAsIDphdHRyOmBob3VyYCwgOmF0dHI6YG1pbnV0ZWAsIDphdHRyOmBzZWNvbmRgLCA6YXR0cjpgbWljcm9zZWNvbmRgLAotICAgYW5kIDphdHRyOmB0emluZm9gLgorICAgYW5kIDphdHRyOmAudHppbmZvYC4KIAogCiAuLiBjbGFzczo6IHRpbWVkZWx0YQpAQCAtMTAyLDYgKzEwNyw3IEBACiAKIAogLi4gY2xhc3M6OiB0emluZm8KKyAgIDpub2luZGV4OgogCiAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB0aW1lIHpvbmUgaW5mb3JtYXRpb24gb2JqZWN0cy4gIFRoZXNlIGFyZSB1c2VkIGJ5IHRoZQogICAgOmNsYXNzOmAuZGF0ZXRpbWVgIGFuZCA6Y2xhc3M6YC50aW1lYCBjbGFzc2VzIHRvIHByb3ZpZGUgYSBjdXN0b21pemFibGUgbm90aW9uIG9mCkBAIC0xMDksNiArMTE1LDcgQEAKICAgIHRpbWUpLgogCiAuLiBjbGFzczo6IHRpbWV6b25lCisgICA6bm9pbmRleDoKIAogICAgQSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIDpjbGFzczpgdHppbmZvYCBhYnN0cmFjdCBiYXNlIGNsYXNzIGFzIGEKICAgIGZpeGVkIG9mZnNldCBmcm9tIHRoZSBVVEMuCkBAIC01NTgsNyArNTY1LDcgQEAKICAgIFJldHVybiBhIDMtdHVwbGUsIChJU08geWVhciwgSVNPIHdlZWsgbnVtYmVyLCBJU08gd2Vla2RheSkuCiAKICAgIFRoZSBJU08gY2FsZW5kYXIgaXMgYSB3aWRlbHkgdXNlZCB2YXJpYW50IG9mIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIuIFNlZQotICAgaHR0cDovL3d3dy5zdGFmZi5zY2llbmNlLnV1Lm5sL35nZW50MDExMy9jYWxlbmRhci9pc29jYWxlbmRhci5odG0gZm9yIGEgZ29vZAorICAgaHR0cHM6Ly93d3cuc3RhZmYuc2NpZW5jZS51dS5ubC9+Z2VudDAxMTMvY2FsZW5kYXIvaXNvY2FsZW5kYXIuaHRtIGZvciBhIGdvb2QKICAgIGV4cGxhbmF0aW9uLgogCiAgICBUaGUgSVNPIHllYXIgY29uc2lzdHMgb2YgNTIgb3IgNTMgZnVsbCB3ZWVrcywgYW5kIHdoZXJlIGEgd2VlayBzdGFydHMgb24gYQpAQCAtNjAyLDcgKzYwOSw3IEBACiAKIC4uIG1ldGhvZDo6IGRhdGUuX19mb3JtYXRfXyhmb3JtYXQpCiAKLSAgIFNhbWUgYXMgOm1ldGg6YC5kYXRlLnN0cmZ0aW1lYC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBzcGVjaWZ5IGZvcm1hdAorICAgU2FtZSBhcyA6bWV0aDpgLmRhdGUuc3RyZnRpbWVgLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBmb3JtYXQKICAgIHN0cmluZyBmb3IgYSA6Y2xhc3M6YC5kYXRlYCBvYmplY3Qgd2hlbiB1c2luZyA6bWV0aDpgc3RyLmZvcm1hdGAuIEZvciBhCiAgICBjb21wbGV0ZSBsaXN0IG9mIGZvcm1hdHRpbmcgZGlyZWN0aXZlcywgc2VlCiAgICA6cmVmOmBzdHJmdGltZS1zdHJwdGltZS1iZWhhdmlvcmAuCkBAIC02OTUsNyArNzAyLDcgQEAKIAogLi4gY2xhc3NtZXRob2Q6OiBkYXRldGltZS50b2RheSgpCiAKLSAgIFJldHVybiB0aGUgY3VycmVudCBsb2NhbCBkYXRldGltZSwgd2l0aCA6YXR0cjpgdHppbmZvYCBgYE5vbmVgYC4gVGhpcyBpcworICAgUmV0dXJuIHRoZSBjdXJyZW50IGxvY2FsIGRhdGV0aW1lLCB3aXRoIDphdHRyOmAudHppbmZvYCBgYE5vbmVgYC4gVGhpcyBpcwogICAgZXF1aXZhbGVudCB0byBgYGRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZS50aW1lKCkpYGAuIFNlZSBhbHNvIDptZXRoOmBub3dgLAogICAgOm1ldGg6YGZyb210aW1lc3RhbXBgLgogCkBAIC03MDgsMTUgKzcxNSwxNSBAQAogICAgKGZvciBleGFtcGxlLCB0aGlzIG1heSBiZSBwb3NzaWJsZSBvbiBwbGF0Zm9ybXMgc3VwcGx5aW5nIHRoZSBDCiAgICA6YzpmdW5jOmBnZXR0aW1lb2ZkYXlgIGZ1bmN0aW9uKS4KIAotICAgRWxzZSAqdHoqIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyA6Y2xhc3M6YHR6aW5mb2Agc3ViY2xhc3MsIGFuZCB0aGUKLSAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBhcmUgY29udmVydGVkIHRvICp0eioncyB0aW1lIHpvbmUuICBJbiB0aGlzIGNhc2UgdGhlCisgICBJZiAqdHoqIGlzIG5vdCBgYE5vbmVgYCwgaXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIDpjbGFzczpgdHppbmZvYCBzdWJjbGFzcywgYW5kIHRoZQorICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIGFyZSBjb252ZXJ0ZWQgdG8gKnR6KuKAmXMgdGltZSB6b25lLiAgSW4gdGhpcyBjYXNlIHRoZQogICAgcmVzdWx0IGlzIGVxdWl2YWxlbnQgdG8gYGB0ei5mcm9tdXRjKGRhdGV0aW1lLnV0Y25vdygpLnJlcGxhY2UodHppbmZvPXR6KSlgYC4KICAgIFNlZSBhbHNvIDptZXRoOmB0b2RheWAsIDptZXRoOmB1dGNub3dgLgogCiAKIC4uIGNsYXNzbWV0aG9kOjogZGF0ZXRpbWUudXRjbm93KCkKIAotICAgUmV0dXJuIHRoZSBjdXJyZW50IFVUQyBkYXRlIGFuZCB0aW1lLCB3aXRoIDphdHRyOmB0emluZm9gIGBgTm9uZWBgLiBUaGlzIGlzIGxpa2UKKyAgIFJldHVybiB0aGUgY3VycmVudCBVVEMgZGF0ZSBhbmQgdGltZSwgd2l0aCA6YXR0cjpgLnR6aW5mb2AgYGBOb25lYGAuIFRoaXMgaXMgbGlrZQogICAgOm1ldGg6YG5vd2AsIGJ1dCByZXR1cm5zIHRoZSBjdXJyZW50IFVUQyBkYXRlIGFuZCB0aW1lLCBhcyBhIG5haXZlCiAgICA6Y2xhc3M6YC5kYXRldGltZWAgb2JqZWN0LiAgQW4gYXdhcmUgY3VycmVudCBVVEMgZGF0ZXRpbWUgY2FuIGJlIG9idGFpbmVkIGJ5CiAgICBjYWxsaW5nIGBgZGF0ZXRpbWUubm93KHRpbWV6b25lLnV0YylgYC4gIFNlZSBhbHNvIDptZXRoOmBub3dgLgpAQCAtNzI4LDggKzczNSw4IEBACiAgICBzcGVjaWZpZWQsIHRoZSB0aW1lc3RhbXAgaXMgY29udmVydGVkIHRvIHRoZSBwbGF0Zm9ybSdzIGxvY2FsIGRhdGUgYW5kIHRpbWUsIGFuZAogICAgdGhlIHJldHVybmVkIDpjbGFzczpgLmRhdGV0aW1lYCBvYmplY3QgaXMgbmFpdmUuCiAKLSAgIEVsc2UgKnR6KiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgOmNsYXNzOmB0emluZm9gIHN1YmNsYXNzLCBhbmQgdGhlCi0gICB0aW1lc3RhbXAgaXMgY29udmVydGVkIHRvICp0eioncyB0aW1lIHpvbmUuICBJbiB0aGlzIGNhc2UgdGhlIHJlc3VsdCBpcworICAgSWYgKnR6KiBpcyBub3QgYGBOb25lYGAsIGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6Y2xhc3M6YHR6aW5mb2Agc3ViY2xhc3MsIGFuZCB0aGUKKyAgIHRpbWVzdGFtcCBpcyBjb252ZXJ0ZWQgdG8gKnR6KuKAmXMgdGltZSB6b25lLiAgSW4gdGhpcyBjYXNlIHRoZSByZXN1bHQgaXMKICAgIGVxdWl2YWxlbnQgdG8KICAgIGBgdHouZnJvbXV0YyhkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHRpbWVzdGFtcCkucmVwbGFjZSh0emluZm89dHopKWBgLgogCkBAIC03NTQsMTYgKzc2MSwyMiBAQAogLi4gY2xhc3NtZXRob2Q6OiBkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHRpbWVzdGFtcCkKIAogICAgUmV0dXJuIHRoZSBVVEMgOmNsYXNzOmAuZGF0ZXRpbWVgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBPU0lYIHRpbWVzdGFtcCwgd2l0aAotICAgOmF0dHI6YHR6aW5mb2AgYGBOb25lYGAuIFRoaXMgbWF5IHJhaXNlIDpleGM6YE92ZXJmbG93RXJyb3JgLCBpZiB0aGUgdGltZXN0YW1wIGlzCisgICA6YXR0cjpgLnR6aW5mb2AgYGBOb25lYGAuIFRoaXMgbWF5IHJhaXNlIDpleGM6YE92ZXJmbG93RXJyb3JgLCBpZiB0aGUgdGltZXN0YW1wIGlzCiAgICBvdXQgb2YgdGhlIHJhbmdlIG9mIHZhbHVlcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIEMgOmM6ZnVuYzpgZ210aW1lYCBmdW5jdGlvbiwKICAgIGFuZCA6ZXhjOmBPU0Vycm9yYCBvbiA6YzpmdW5jOmBnbXRpbWVgIGZhaWx1cmUuCi0gICBJdCdzIGNvbW1vbiBmb3IgdGhpcyB0byBiZSByZXN0cmljdGVkIHRvIHllYXJzIGluIDE5NzAgdGhyb3VnaCAyMDM4LiBTZWUgYWxzbwotICAgOm1ldGg6YGZyb210aW1lc3RhbXBgLgorICAgSXQncyBjb21tb24gZm9yIHRoaXMgdG8gYmUgcmVzdHJpY3RlZCB0byB5ZWFycyBpbiAxOTcwIHRocm91Z2ggMjAzOC4KIAotICAgT24gdGhlIFBPU0lYIGNvbXBsaWFudCBwbGF0Zm9ybXMsIGBgdXRjZnJvbXRpbWVzdGFtcCh0aW1lc3RhbXApYGAKLSAgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBleHByZXNzaW9uOjoKKyAgIFRvIGdldCBhbiBhd2FyZSA6Y2xhc3M6YC5kYXRldGltZWAgb2JqZWN0LCBjYWxsIDptZXRoOmBmcm9tdGltZXN0YW1wYDo6CiAKLSAgICAgZGF0ZXRpbWUoMTk3MCwgMSwgMSkgKyB0aW1lZGVsdGEoc2Vjb25kcz10aW1lc3RhbXApCisgICAgIGRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZXN0YW1wLCB0aW1lem9uZS51dGMpCisKKyAgIE9uIHRoZSBQT1NJWCBjb21wbGlhbnQgcGxhdGZvcm1zLCBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcKKyAgIGV4cHJlc3Npb246OgorCisgICAgIGRhdGV0aW1lKDE5NzAsIDEsIDEsIHR6aW5mbz10aW1lem9uZS51dGMpICsgdGltZWRlbHRhKHNlY29uZHM9dGltZXN0YW1wKQorCisgICBleGNlcHQgdGhlIGxhdHRlciBmb3JtdWxhIGFsd2F5cyBzdXBwb3J0cyB0aGUgZnVsbCB5ZWFycyByYW5nZTogYmV0d2VlbgorICAgOmNvbnN0OmBNSU5ZRUFSYCBhbmQgOmNvbnN0OmBNQVhZRUFSYCBpbmNsdXNpdmUuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBSYWlzZSA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YFZhbHVlRXJyb3JgIGlmIHRoZSB0aW1lc3RhbXAKQEAgLTc3NywxNyArNzkwLDE3IEBACiAgICBSZXR1cm4gdGhlIDpjbGFzczpgLmRhdGV0aW1lYCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9sZXB0aWMgR3JlZ29yaWFuIG9yZGluYWwsCiAgICB3aGVyZSBKYW51YXJ5IDEgb2YgeWVhciAxIGhhcyBvcmRpbmFsIDEuIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCB1bmxlc3MgYGAxCiAgICA8PSBvcmRpbmFsIDw9IGRhdGV0aW1lLm1heC50b29yZGluYWwoKWBgLiAgVGhlIGhvdXIsIG1pbnV0ZSwgc2Vjb25kIGFuZAotICAgbWljcm9zZWNvbmQgb2YgdGhlIHJlc3VsdCBhcmUgYWxsIDAsIGFuZCA6YXR0cjpgdHppbmZvYCBpcyBgYE5vbmVgYC4KKyAgIG1pY3Jvc2Vjb25kIG9mIHRoZSByZXN1bHQgYXJlIGFsbCAwLCBhbmQgOmF0dHI6YC50emluZm9gIGlzIGBgTm9uZWBgLgogCiAKIC4uIGNsYXNzbWV0aG9kOjogZGF0ZXRpbWUuY29tYmluZShkYXRlLCB0aW1lKQogCiAgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmAuZGF0ZXRpbWVgIG9iamVjdCB3aG9zZSBkYXRlIGNvbXBvbmVudHMgYXJlIGVxdWFsIHRvIHRoZQotICAgZ2l2ZW4gOmNsYXNzOmBkYXRlYCBvYmplY3QncywgYW5kIHdob3NlIHRpbWUgY29tcG9uZW50cyBhbmQgOmF0dHI6YHR6aW5mb2AKKyAgIGdpdmVuIDpjbGFzczpgZGF0ZWAgb2JqZWN0J3MsIGFuZCB3aG9zZSB0aW1lIGNvbXBvbmVudHMgYW5kIDphdHRyOmAudHppbmZvYAogICAgYXR0cmlidXRlcyBhcmUgZXF1YWwgdG8gdGhlIGdpdmVuIDpjbGFzczpgLnRpbWVgIG9iamVjdCdzLiBGb3IgYW55CiAgICA6Y2xhc3M6YC5kYXRldGltZWAgb2JqZWN0ICpkKiwKICAgIGBgZCA9PSBkYXRldGltZS5jb21iaW5lKGQuZGF0ZSgpLCBkLnRpbWV0eigpKWBgLiAgSWYgZGF0ZSBpcyBhCi0gICA6Y2xhc3M6YC5kYXRldGltZWAgb2JqZWN0LCBpdHMgdGltZSBjb21wb25lbnRzIGFuZCA6YXR0cjpgdHppbmZvYCBhdHRyaWJ1dGVzCisgICA6Y2xhc3M6YC5kYXRldGltZWAgb2JqZWN0LCBpdHMgdGltZSBjb21wb25lbnRzIGFuZCA6YXR0cjpgLnR6aW5mb2AgYXR0cmlidXRlcwogICAgYXJlIGlnbm9yZWQuCiAKIApAQCAtODgzLDcgKzg5Niw3IEBACiAoMSkKICAgIGRhdGV0aW1lMiBpcyBhIGR1cmF0aW9uIG9mIHRpbWVkZWx0YSByZW1vdmVkIGZyb20gZGF0ZXRpbWUxLCBtb3ZpbmcgZm9yd2FyZCBpbgogICAgdGltZSBpZiBgYHRpbWVkZWx0YS5kYXlzYGAgPiAwLCBvciBiYWNrd2FyZCBpZiBgYHRpbWVkZWx0YS5kYXlzYGAgPCAwLiAgVGhlCi0gICByZXN1bHQgaGFzIHRoZSBzYW1lIDphdHRyOmB0emluZm9gIGF0dHJpYnV0ZSBhcyB0aGUgaW5wdXQgZGF0ZXRpbWUsIGFuZAorICAgcmVzdWx0IGhhcyB0aGUgc2FtZSA6YXR0cjpgfi5kYXRldGltZS50emluZm9gIGF0dHJpYnV0ZSBhcyB0aGUgaW5wdXQgZGF0ZXRpbWUsIGFuZAogICAgZGF0ZXRpbWUyIC0gZGF0ZXRpbWUxID09IHRpbWVkZWx0YSBhZnRlci4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgaXMgcmFpc2VkIGlmCiAgICBkYXRldGltZTIueWVhciB3b3VsZCBiZSBzbWFsbGVyIHRoYW4gOmNvbnN0OmBNSU5ZRUFSYCBvciBsYXJnZXIgdGhhbgogICAgOmNvbnN0OmBNQVhZRUFSYC4gTm90ZSB0aGF0IG5vIHRpbWUgem9uZSBhZGp1c3RtZW50cyBhcmUgZG9uZSBldmVuIGlmIHRoZQpAQCAtODkxLDcgKzkwNCw3IEBACiAKICgyKQogICAgQ29tcHV0ZXMgdGhlIGRhdGV0aW1lMiBzdWNoIHRoYXQgZGF0ZXRpbWUyICsgdGltZWRlbHRhID09IGRhdGV0aW1lMS4gQXMgZm9yCi0gICBhZGRpdGlvbiwgdGhlIHJlc3VsdCBoYXMgdGhlIHNhbWUgOmF0dHI6YHR6aW5mb2AgYXR0cmlidXRlIGFzIHRoZSBpbnB1dAorICAgYWRkaXRpb24sIHRoZSByZXN1bHQgaGFzIHRoZSBzYW1lIDphdHRyOmB+LmRhdGV0aW1lLnR6aW5mb2AgYXR0cmlidXRlIGFzIHRoZSBpbnB1dAogICAgZGF0ZXRpbWUsIGFuZCBubyB0aW1lIHpvbmUgYWRqdXN0bWVudHMgYXJlIGRvbmUgZXZlbiBpZiB0aGUgaW5wdXQgaXMgYXdhcmUuCiAgICBUaGlzIGlzbid0IHF1aXRlIGVxdWl2YWxlbnQgdG8gZGF0ZXRpbWUxICsgKC10aW1lZGVsdGEpLCBiZWNhdXNlIC10aW1lZGVsdGEKICAgIGluIGlzb2xhdGlvbiBjYW4gb3ZlcmZsb3cgaW4gY2FzZXMgd2hlcmUgZGF0ZXRpbWUxIC0gdGltZWRlbHRhIGRvZXMgbm90LgpAQCAtOTAxLDEyICs5MTQsMTIgQEAKICAgIGJvdGggb3BlcmFuZHMgYXJlIG5haXZlLCBvciBpZiBib3RoIGFyZSBhd2FyZS4gIElmIG9uZSBpcyBhd2FyZSBhbmQgdGhlIG90aGVyIGlzCiAgICBuYWl2ZSwgOmV4YzpgVHlwZUVycm9yYCBpcyByYWlzZWQuCiAKLSAgIElmIGJvdGggYXJlIG5haXZlLCBvciBib3RoIGFyZSBhd2FyZSBhbmQgaGF2ZSB0aGUgc2FtZSA6YXR0cjpgdHppbmZvYCBhdHRyaWJ1dGUsCi0gICB0aGUgOmF0dHI6YHR6aW5mb2AgYXR0cmlidXRlcyBhcmUgaWdub3JlZCwgYW5kIHRoZSByZXN1bHQgaXMgYSA6Y2xhc3M6YHRpbWVkZWx0YWAKKyAgIElmIGJvdGggYXJlIG5haXZlLCBvciBib3RoIGFyZSBhd2FyZSBhbmQgaGF2ZSB0aGUgc2FtZSA6YXR0cjpgfi5kYXRldGltZS50emluZm9gIGF0dHJpYnV0ZSwKKyAgIHRoZSA6YXR0cjpgfi5kYXRldGltZS50emluZm9gIGF0dHJpYnV0ZXMgYXJlIGlnbm9yZWQsIGFuZCB0aGUgcmVzdWx0IGlzIGEgOmNsYXNzOmB0aW1lZGVsdGFgCiAgICBvYmplY3QgKnQqIHN1Y2ggdGhhdCBgYGRhdGV0aW1lMiArIHQgPT0gZGF0ZXRpbWUxYGAuICBObyB0aW1lIHpvbmUgYWRqdXN0bWVudHMKICAgIGFyZSBkb25lIGluIHRoaXMgY2FzZS4KIAotICAgSWYgYm90aCBhcmUgYXdhcmUgYW5kIGhhdmUgZGlmZmVyZW50IDphdHRyOmB0emluZm9gIGF0dHJpYnV0ZXMsIGBgYS1iYGAgYWN0cworICAgSWYgYm90aCBhcmUgYXdhcmUgYW5kIGhhdmUgZGlmZmVyZW50IDphdHRyOmB+LmRhdGV0aW1lLnR6aW5mb2AgYXR0cmlidXRlcywgYGBhLWJgYCBhY3RzCiAgICBhcyBpZiAqYSogYW5kICpiKiB3ZXJlIGZpcnN0IGNvbnZlcnRlZCB0byBuYWl2ZSBVVEMgZGF0ZXRpbWVzIGZpcnN0LiAgVGhlCiAgICByZXN1bHQgaXMgYGAoYS5yZXBsYWNlKHR6aW5mbz1Ob25lKSAtIGEudXRjb2Zmc2V0KCkpIC0gKGIucmVwbGFjZSh0emluZm89Tm9uZSkKICAgIC0gYi51dGNvZmZzZXQoKSlgYCBleGNlcHQgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gbmV2ZXIgb3ZlcmZsb3dzLgpAQCAtOTE5LDE0ICs5MzIsMTQgQEAKICAgIGlzIHJhaXNlZCBpZiBhbiBvcmRlciBjb21wYXJpc29uIGlzIGF0dGVtcHRlZC4gIEZvciBlcXVhbGl0eQogICAgY29tcGFyaXNvbnMsIG5haXZlIGluc3RhbmNlcyBhcmUgbmV2ZXIgZXF1YWwgdG8gYXdhcmUgaW5zdGFuY2VzLgogCi0gICBJZiBib3RoIGNvbXBhcmFuZHMgYXJlIGF3YXJlLCBhbmQgaGF2ZSB0aGUgc2FtZSA6YXR0cjpgdHppbmZvYCBhdHRyaWJ1dGUsIHRoZQotICAgY29tbW9uIDphdHRyOmB0emluZm9gIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIGFuZCB0aGUgYmFzZSBkYXRldGltZXMgYXJlCi0gICBjb21wYXJlZC4gIElmIGJvdGggY29tcGFyYW5kcyBhcmUgYXdhcmUgYW5kIGhhdmUgZGlmZmVyZW50IDphdHRyOmB0emluZm9gCisgICBJZiBib3RoIGNvbXBhcmFuZHMgYXJlIGF3YXJlLCBhbmQgaGF2ZSB0aGUgc2FtZSA6YXR0cjpgfi5kYXRldGltZS50emluZm9gIGF0dHJpYnV0ZSwgdGhlCisgICBjb21tb24gOmF0dHI6YH4uZGF0ZXRpbWUudHppbmZvYCBhdHRyaWJ1dGUgaXMgaWdub3JlZCBhbmQgdGhlIGJhc2UgZGF0ZXRpbWVzIGFyZQorICAgY29tcGFyZWQuICBJZiBib3RoIGNvbXBhcmFuZHMgYXJlIGF3YXJlIGFuZCBoYXZlIGRpZmZlcmVudCA6YXR0cjpgfi5kYXRldGltZS50emluZm9gCiAgICBhdHRyaWJ1dGVzLCB0aGUgY29tcGFyYW5kcyBhcmUgZmlyc3QgYWRqdXN0ZWQgYnkgc3VidHJhY3RpbmcgdGhlaXIgVVRDCiAgICBvZmZzZXRzIChvYnRhaW5lZCBmcm9tIGBgc2VsZi51dGNvZmZzZXQoKWBgKS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIEVxdWFsaXR5IGNvbXBhcmlzb25zIGJldHdlZW4gbmFpdmUgYW5kIGF3YXJlIDpjbGFzczpgZGF0ZXRpbWVgCisgICAgICBFcXVhbGl0eSBjb21wYXJpc29ucyBiZXR3ZWVuIG5haXZlIGFuZCBhd2FyZSA6Y2xhc3M6YC5kYXRldGltZWAKICAgICAgIGluc3RhbmNlcyBkb24ndCByYWlzZSA6ZXhjOmBUeXBlRXJyb3JgLgogCiAgICAuLiBub3RlOjoKQEAgLTk1NCw3ICs5NjcsNyBAQAogLi4gbWV0aG9kOjogZGF0ZXRpbWUudGltZSgpCiAKICAgIFJldHVybiA6Y2xhc3M6YC50aW1lYCBvYmplY3Qgd2l0aCBzYW1lIGhvdXIsIG1pbnV0ZSwgc2Vjb25kIGFuZCBtaWNyb3NlY29uZC4KLSAgIDphdHRyOmB0emluZm9gIGlzIGBgTm9uZWBgLiAgU2VlIGFsc28gbWV0aG9kIDptZXRoOmB0aW1ldHpgLgorICAgOmF0dHI6YC50emluZm9gIGlzIGBgTm9uZWBgLiAgU2VlIGFsc28gbWV0aG9kIDptZXRoOmB0aW1ldHpgLgogCiAKIC4uIG1ldGhvZDo6IGRhdGV0aW1lLnRpbWV0eigpCkBAIC05NzMsNyArOTg2LDcgQEAKIAogLi4gbWV0aG9kOjogZGF0ZXRpbWUuYXN0aW1lem9uZSh0ej1Ob25lKQogCi0gICBSZXR1cm4gYSA6Y2xhc3M6YGRhdGV0aW1lYCBvYmplY3Qgd2l0aCBuZXcgOmF0dHI6YHR6aW5mb2AgYXR0cmlidXRlICp0eiosCisgICBSZXR1cm4gYSA6Y2xhc3M6YC5kYXRldGltZWAgb2JqZWN0IHdpdGggbmV3IDphdHRyOmAudHppbmZvYCBhdHRyaWJ1dGUgKnR6KiwKICAgIGFkanVzdGluZyB0aGUgZGF0ZSBhbmQgdGltZSBkYXRhIHNvIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgVVRDIHRpbWUgYXMKICAgICpzZWxmKiwgYnV0IGluICp0eioncyBsb2NhbCB0aW1lLgogCkBAIC05ODMsNyArOTk2LDcgQEAKICAgIG5vdCByZXR1cm4gYGBOb25lYGApLgogCiAgICBJZiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMgKG9yIHdpdGggYGB0ej1Ob25lYGApIHRoZSBzeXN0ZW0gbG9jYWwKLSAgIHRpbWV6b25lIGlzIGFzc3VtZWQuICBUaGUgYGB0emluZm9gYCBhdHRyaWJ1dGUgb2YgdGhlIGNvbnZlcnRlZAorICAgdGltZXpvbmUgaXMgYXNzdW1lZC4gIFRoZSBgYC50emluZm9gYCBhdHRyaWJ1dGUgb2YgdGhlIGNvbnZlcnRlZAogICAgZGF0ZXRpbWUgaW5zdGFuY2Ugd2lsbCBiZSBzZXQgdG8gYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmB0aW1lem9uZWAKICAgIHdpdGggdGhlIHpvbmUgbmFtZSBhbmQgb2Zmc2V0IG9idGFpbmVkIGZyb20gdGhlIE9TLgogCkBAIC0xMDE5LDcgKzEwMzIsNyBAQAogCiAuLiBtZXRob2Q6OiBkYXRldGltZS51dGNvZmZzZXQoKQogCi0gICBJZiA6YXR0cjpgdHppbmZvYCBpcyBgYE5vbmVgYCwgcmV0dXJucyBgYE5vbmVgYCwgZWxzZSByZXR1cm5zCisgICBJZiA6YXR0cjpgLnR6aW5mb2AgaXMgYGBOb25lYGAsIHJldHVybnMgYGBOb25lYGAsIGVsc2UgcmV0dXJucwogICAgYGBzZWxmLnR6aW5mby51dGNvZmZzZXQoc2VsZilgYCwgYW5kIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhlIGxhdHRlciBkb2Vzbid0CiAgICByZXR1cm4gYGBOb25lYGAsIG9yIGEgOmNsYXNzOmB0aW1lZGVsdGFgIG9iamVjdCByZXByZXNlbnRpbmcgYSB3aG9sZSBudW1iZXIgb2YKICAgIG1pbnV0ZXMgd2l0aCBtYWduaXR1ZGUgbGVzcyB0aGFuIG9uZSBkYXkuCkBAIC0xMDI3LDcgKzEwNDAsNyBAQAogCiAuLiBtZXRob2Q6OiBkYXRldGltZS5kc3QoKQogCi0gICBJZiA6YXR0cjpgdHppbmZvYCBpcyBgYE5vbmVgYCwgcmV0dXJucyBgYE5vbmVgYCwgZWxzZSByZXR1cm5zCisgICBJZiA6YXR0cjpgLnR6aW5mb2AgaXMgYGBOb25lYGAsIHJldHVybnMgYGBOb25lYGAsIGVsc2UgcmV0dXJucwogICAgYGBzZWxmLnR6aW5mby5kc3Qoc2VsZilgYCwgYW5kIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhlIGxhdHRlciBkb2Vzbid0IHJldHVybgogICAgYGBOb25lYGAsIG9yIGEgOmNsYXNzOmB0aW1lZGVsdGFgIG9iamVjdCByZXByZXNlbnRpbmcgYSB3aG9sZSBudW1iZXIgb2YgbWludXRlcwogICAgd2l0aCBtYWduaXR1ZGUgbGVzcyB0aGFuIG9uZSBkYXkuCkBAIC0xMDM1LDcgKzEwNDgsNyBAQAogCiAuLiBtZXRob2Q6OiBkYXRldGltZS50em5hbWUoKQogCi0gICBJZiA6YXR0cjpgdHppbmZvYCBpcyBgYE5vbmVgYCwgcmV0dXJucyBgYE5vbmVgYCwgZWxzZSByZXR1cm5zCisgICBJZiA6YXR0cjpgLnR6aW5mb2AgaXMgYGBOb25lYGAsIHJldHVybnMgYGBOb25lYGAsIGVsc2UgcmV0dXJucwogICAgYGBzZWxmLnR6aW5mby50em5hbWUoc2VsZilgYCwgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgbGF0dGVyIGRvZXNuJ3QgcmV0dXJuCiAgICBgYE5vbmVgYCBvciBhIHN0cmluZyBvYmplY3QsCiAKQEAgLTEwNDcsNyArMTA2MCw3IEBACiAgICBkLmhvdXIsIGQubWludXRlLCBkLnNlY29uZCwgZC53ZWVrZGF5KCksIHlkYXksIGRzdCkpYGAsIHdoZXJlIGBgeWRheSA9CiAgICBkLnRvb3JkaW5hbCgpIC0gZGF0ZShkLnllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMWBgIGlzIHRoZSBkYXkgbnVtYmVyIHdpdGhpbgogICAgdGhlIGN1cnJlbnQgeWVhciBzdGFydGluZyB3aXRoIGBgMWBgIGZvciBKYW51YXJ5IDFzdC4gVGhlIDphdHRyOmB0bV9pc2RzdGAgZmxhZwotICAgb2YgdGhlIHJlc3VsdCBpcyBzZXQgYWNjb3JkaW5nIHRvIHRoZSA6bWV0aDpgZHN0YCBtZXRob2Q6IDphdHRyOmB0emluZm9gIGlzCisgICBvZiB0aGUgcmVzdWx0IGlzIHNldCBhY2NvcmRpbmcgdG8gdGhlIDptZXRoOmBkc3RgIG1ldGhvZDogOmF0dHI6YC50emluZm9gIGlzCiAgICBgYE5vbmVgYCBvciA6bWV0aDpgZHN0YCByZXR1cm5zIGBgTm9uZWBgLCA6YXR0cjpgdG1faXNkc3RgIGlzIHNldCB0byBgYC0xYGA7CiAgICBlbHNlIGlmIDptZXRoOmBkc3RgIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgOmF0dHI6YHRtX2lzZHN0YCBpcyBzZXQgdG8gYGAxYGA7CiAgICBlbHNlIDphdHRyOmB0bV9pc2RzdGAgaXMgc2V0IHRvIGBgMGBgLgpAQCAtMTA3NCwxOCArMTA4NywxOCBAQAogCiAuLiBtZXRob2Q6OiBkYXRldGltZS50aW1lc3RhbXAoKQogCi0gICBSZXR1cm4gUE9TSVggdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDpjbGFzczpgZGF0ZXRpbWVgCisgICBSZXR1cm4gUE9TSVggdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDpjbGFzczpgLmRhdGV0aW1lYAogICAgaW5zdGFuY2UuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgOmNsYXNzOmBmbG9hdGAgc2ltaWxhciB0byB0aGF0CiAgICByZXR1cm5lZCBieSA6ZnVuYzpgdGltZS50aW1lYC4KIAotICAgTmFpdmUgOmNsYXNzOmBkYXRldGltZWAgaW5zdGFuY2VzIGFyZSBhc3N1bWVkIHRvIHJlcHJlc2VudCBsb2NhbAorICAgTmFpdmUgOmNsYXNzOmAuZGF0ZXRpbWVgIGluc3RhbmNlcyBhcmUgYXNzdW1lZCB0byByZXByZXNlbnQgbG9jYWwKICAgIHRpbWUgYW5kIHRoaXMgbWV0aG9kIHJlbGllcyBvbiB0aGUgcGxhdGZvcm0gQyA6YzpmdW5jOmBta3RpbWVgCi0gICBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBjb252ZXJzaW9uLiAgU2luY2UgOmNsYXNzOmBkYXRldGltZWAKKyAgIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGNvbnZlcnNpb24uICBTaW5jZSA6Y2xhc3M6YC5kYXRldGltZWAKICAgIHN1cHBvcnRzIHdpZGVyIHJhbmdlIG9mIHZhbHVlcyB0aGFuIDpjOmZ1bmM6YG1rdGltZWAgb24gbWFueQogICAgcGxhdGZvcm1zLCB0aGlzIG1ldGhvZCBtYXkgcmFpc2UgOmV4YzpgT3ZlcmZsb3dFcnJvcmAgZm9yIHRpbWVzIGZhcgogICAgaW4gdGhlIHBhc3Qgb3IgZmFyIGluIHRoZSBmdXR1cmUuCiAKLSAgIEZvciBhd2FyZSA6Y2xhc3M6YGRhdGV0aW1lYCBpbnN0YW5jZXMsIHRoZSByZXR1cm4gdmFsdWUgaXMgY29tcHV0ZWQKKyAgIEZvciBhd2FyZSA6Y2xhc3M6YC5kYXRldGltZWAgaW5zdGFuY2VzLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGNvbXB1dGVkCiAgICBhczo6CiAKICAgICAgIChkdCAtIGRhdGV0aW1lKDE5NzAsIDEsIDEsIHR6aW5mbz10aW1lem9uZS51dGMpKS50b3RhbF9zZWNvbmRzKCkKQEAgLTEwOTUsNyArMTEwOCw3IEBACiAgICAuLiBub3RlOjoKIAogICAgICAgVGhlcmUgaXMgbm8gbWV0aG9kIHRvIG9idGFpbiB0aGUgUE9TSVggdGltZXN0YW1wIGRpcmVjdGx5IGZyb20gYQotICAgICAgbmFpdmUgOmNsYXNzOmBkYXRldGltZWAgaW5zdGFuY2UgcmVwcmVzZW50aW5nIFVUQyB0aW1lLiAgSWYgeW91cgorICAgICAgbmFpdmUgOmNsYXNzOmAuZGF0ZXRpbWVgIGluc3RhbmNlIHJlcHJlc2VudGluZyBVVEMgdGltZS4gIElmIHlvdXIKICAgICAgIGFwcGxpY2F0aW9uIHVzZXMgdGhpcyBjb252ZW50aW9uIGFuZCB5b3VyIHN5c3RlbSB0aW1lem9uZSBpcyBub3QKICAgICAgIHNldCB0byBVVEMsIHlvdSBjYW4gb2J0YWluIHRoZSBQT1NJWCB0aW1lc3RhbXAgYnkgc3VwcGx5aW5nCiAgICAgICBgYHR6aW5mbz10aW1lem9uZS51dGNgYDo6CkBAIC0xMTcxLDcgKzExODQsNyBAQAogCiAuLiBtZXRob2Q6OiBkYXRldGltZS5fX2Zvcm1hdF9fKGZvcm1hdCkKIAotICAgU2FtZSBhcyA6bWV0aDpgLmRhdGV0aW1lLnN0cmZ0aW1lYC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gc3BlY2lmeSBmb3JtYXQKKyAgIFNhbWUgYXMgOm1ldGg6YC5kYXRldGltZS5zdHJmdGltZWAuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBmb3JtYXQKICAgIHN0cmluZyBmb3IgYSA6Y2xhc3M6YC5kYXRldGltZWAgb2JqZWN0IHdoZW4gdXNpbmcgOm1ldGg6YHN0ci5mb3JtYXRgLiAgRm9yIGEKICAgIGNvbXBsZXRlIGxpc3Qgb2YgZm9ybWF0dGluZyBkaXJlY3RpdmVzLCBzZWUKICAgIDpyZWY6YHN0cmZ0aW1lLXN0cnB0aW1lLWJlaGF2aW9yYC4KQEAgLTEzNTksOSArMTM3Miw5IEBACiAgIGNvbXBhcmlzb25zLCBuYWl2ZSBpbnN0YW5jZXMgYXJlIG5ldmVyIGVxdWFsIHRvIGF3YXJlIGluc3RhbmNlcy4KIAogICBJZiBib3RoIGNvbXBhcmFuZHMgYXJlIGF3YXJlLCBhbmQgaGF2ZQotICB0aGUgc2FtZSA6YXR0cjpgdHppbmZvYCBhdHRyaWJ1dGUsIHRoZSBjb21tb24gOmF0dHI6YHR6aW5mb2AgYXR0cmlidXRlIGlzCisgIHRoZSBzYW1lIDphdHRyOmB+dGltZS50emluZm9gIGF0dHJpYnV0ZSwgdGhlIGNvbW1vbiA6YXR0cjpgfnRpbWUudHppbmZvYCBhdHRyaWJ1dGUgaXMKICAgaWdub3JlZCBhbmQgdGhlIGJhc2UgdGltZXMgYXJlIGNvbXBhcmVkLiAgSWYgYm90aCBjb21wYXJhbmRzIGFyZSBhd2FyZSBhbmQKLSAgaGF2ZSBkaWZmZXJlbnQgOmF0dHI6YHR6aW5mb2AgYXR0cmlidXRlcywgdGhlIGNvbXBhcmFuZHMgYXJlIGZpcnN0IGFkanVzdGVkIGJ5CisgIGhhdmUgZGlmZmVyZW50IDphdHRyOmB+dGltZS50emluZm9gIGF0dHJpYnV0ZXMsIHRoZSBjb21wYXJhbmRzIGFyZSBmaXJzdCBhZGp1c3RlZCBieQogICBzdWJ0cmFjdGluZyB0aGVpciBVVEMgb2Zmc2V0cyAob2J0YWluZWQgZnJvbSBgYHNlbGYudXRjb2Zmc2V0KClgYCkuIEluIG9yZGVyCiAgIHRvIHN0b3AgbWl4ZWQtdHlwZSBjb21wYXJpc29ucyBmcm9tIGZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdCBjb21wYXJpc29uIGJ5CiAgIG9iamVjdCBhZGRyZXNzLCB3aGVuIGEgOmNsYXNzOmAudGltZWAgb2JqZWN0IGlzIGNvbXBhcmVkIHRvIGFuIG9iamVjdCBvZiBhCkBAIC0xMzc2LDEwICsxMzg5LDEzIEBACiAKICogZWZmaWNpZW50IHBpY2tsaW5nCiAKLSogaW4gQm9vbGVhbiBjb250ZXh0cywgYSA6Y2xhc3M6YC50aW1lYCBvYmplY3QgaXMgY29uc2lkZXJlZCB0byBiZSB0cnVlIGlmIGFuZAotICBvbmx5IGlmLCBhZnRlciBjb252ZXJ0aW5nIGl0IHRvIG1pbnV0ZXMgYW5kIHN1YnRyYWN0aW5nIDptZXRoOmB1dGNvZmZzZXRgIChvcgotICBgYDBgYCBpZiB0aGF0J3MgYGBOb25lYGApLCB0aGUgcmVzdWx0IGlzIG5vbi16ZXJvLgorSW4gYm9vbGVhbiBjb250ZXh0cywgYSA6Y2xhc3M6YC50aW1lYCBvYmplY3QgaXMgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgdHJ1ZS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgIEJlZm9yZSBQeXRob24gMy41LCBhIDpjbGFzczpgLnRpbWVgIG9iamVjdCB3YXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpZiBpdAorICAgcmVwcmVzZW50ZWQgbWlkbmlnaHQgaW4gVVRDLiAgVGhpcyBiZWhhdmlvciB3YXMgY29uc2lkZXJlZCBvYnNjdXJlIGFuZAorICAgZXJyb3ItcHJvbmUgYW5kIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuNS4gIFNlZSA6aXNzdWU6YDEzOTM2YCBmb3IgZnVsbAorICAgZGV0YWlscy4KIAogSW5zdGFuY2UgbWV0aG9kczoKIApAQCAtMTQxMyw3ICsxNDI5LDcgQEAKIAogLi4gbWV0aG9kOjogdGltZS5fX2Zvcm1hdF9fKGZvcm1hdCkKIAotICAgU2FtZSBhcyA6bWV0aDpgLnRpbWUuc3RyZnRpbWVgLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgZm9ybWF0IHN0cmluZworICAgU2FtZSBhcyA6bWV0aDpgLnRpbWUuc3RyZnRpbWVgLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBmb3JtYXQgc3RyaW5nCiAgICBmb3IgYSA6Y2xhc3M6YC50aW1lYCBvYmplY3Qgd2hlbiB1c2luZyA6bWV0aDpgc3RyLmZvcm1hdGAuICBGb3IgYQogICAgY29tcGxldGUgbGlzdCBvZiBmb3JtYXR0aW5nIGRpcmVjdGl2ZXMsIHNlZQogICAgOnJlZjpgc3RyZnRpbWUtc3RycHRpbWUtYmVoYXZpb3JgLgpAQCAtMTQyMSw3ICsxNDM3LDcgQEAKIAogLi4gbWV0aG9kOjogdGltZS51dGNvZmZzZXQoKQogCi0gICBJZiA6YXR0cjpgdHppbmZvYCBpcyBgYE5vbmVgYCwgcmV0dXJucyBgYE5vbmVgYCwgZWxzZSByZXR1cm5zCisgICBJZiA6YXR0cjpgLnR6aW5mb2AgaXMgYGBOb25lYGAsIHJldHVybnMgYGBOb25lYGAsIGVsc2UgcmV0dXJucwogICAgYGBzZWxmLnR6aW5mby51dGNvZmZzZXQoTm9uZSlgYCwgYW5kIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhlIGxhdHRlciBkb2Vzbid0CiAgICByZXR1cm4gYGBOb25lYGAgb3IgYSA6Y2xhc3M6YHRpbWVkZWx0YWAgb2JqZWN0IHJlcHJlc2VudGluZyBhIHdob2xlIG51bWJlciBvZgogICAgbWludXRlcyB3aXRoIG1hZ25pdHVkZSBsZXNzIHRoYW4gb25lIGRheS4KQEAgLTE0MjksNyArMTQ0NSw3IEBACiAKIC4uIG1ldGhvZDo6IHRpbWUuZHN0KCkKIAotICAgSWYgOmF0dHI6YHR6aW5mb2AgaXMgYGBOb25lYGAsIHJldHVybnMgYGBOb25lYGAsIGVsc2UgcmV0dXJucworICAgSWYgOmF0dHI6YC50emluZm9gIGlzIGBgTm9uZWBgLCByZXR1cm5zIGBgTm9uZWBgLCBlbHNlIHJldHVybnMKICAgIGBgc2VsZi50emluZm8uZHN0KE5vbmUpYGAsIGFuZCByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZSBsYXR0ZXIgZG9lc24ndCByZXR1cm4KICAgIGBgTm9uZWBgLCBvciBhIDpjbGFzczpgdGltZWRlbHRhYCBvYmplY3QgcmVwcmVzZW50aW5nIGEgd2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMKICAgIHdpdGggbWFnbml0dWRlIGxlc3MgdGhhbiBvbmUgZGF5LgpAQCAtMTQzNyw3ICsxNDUzLDcgQEAKIAogLi4gbWV0aG9kOjogdGltZS50em5hbWUoKQogCi0gICBJZiA6YXR0cjpgdHppbmZvYCBpcyBgYE5vbmVgYCwgcmV0dXJucyBgYE5vbmVgYCwgZWxzZSByZXR1cm5zCisgICBJZiA6YXR0cjpgLnR6aW5mb2AgaXMgYGBOb25lYGAsIHJldHVybnMgYGBOb25lYGAsIGVsc2UgcmV0dXJucwogICAgYGBzZWxmLnR6aW5mby50em5hbWUoTm9uZSlgYCwgb3IgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgbGF0dGVyIGRvZXNuJ3QKICAgIHJldHVybiBgYE5vbmVgYCBvciBhIHN0cmluZyBvYmplY3QuCiAKQEAgLTE0NzQsMjggKzE0OTAsMzAgQEAKIDpjbGFzczpgdHppbmZvYCBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi06Y2xhc3M6YHR6aW5mb2AgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcywgbWVhbmluZyB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZQotaW5zdGFudGlhdGVkIGRpcmVjdGx5LiAgWW91IG5lZWQgdG8gZGVyaXZlIGEgY29uY3JldGUgc3ViY2xhc3MsIGFuZCAoYXQgbGVhc3QpCi1zdXBwbHkgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YHR6aW5mb2AgbWV0aG9kcyBuZWVkZWQgYnkgdGhlCi06Y2xhc3M6YC5kYXRldGltZWAgbWV0aG9kcyB5b3UgdXNlLiAgVGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgc3VwcGxpZXMKLWEgc2ltcGxlIGNvbmNyZXRlIHN1YmNsYXNzIG9mIDpjbGFzczpgdHppbmZvYCA6Y2xhc3M6YHRpbWV6b25lYCB3aGljaCBjYW4gcmVwcmVzZW50Ci10aW1lem9uZXMgd2l0aCBmaXhlZCBvZmZzZXQgZnJvbSBVVEMgc3VjaCBhcyBVVEMgaXRzZWxmIG9yIE5vcnRoIEFtZXJpY2FuIEVTVCBhbmQKLUVEVC4KKy4uIGNsYXNzOjogdHppbmZvKCkKIAotQW4gaW5zdGFuY2Ugb2YgKGEgY29uY3JldGUgc3ViY2xhc3Mgb2YpIDpjbGFzczpgdHppbmZvYCBjYW4gYmUgcGFzc2VkIHRvIHRoZQotY29uc3RydWN0b3JzIGZvciA6Y2xhc3M6YC5kYXRldGltZWAgYW5kIDpjbGFzczpgLnRpbWVgIG9iamVjdHMuIFRoZSBsYXR0ZXIgb2JqZWN0cwotdmlldyB0aGVpciBhdHRyaWJ1dGVzIGFzIGJlaW5nIGluIGxvY2FsIHRpbWUsIGFuZCB0aGUgOmNsYXNzOmB0emluZm9gIG9iamVjdAotc3VwcG9ydHMgbWV0aG9kcyByZXZlYWxpbmcgb2Zmc2V0IG9mIGxvY2FsIHRpbWUgZnJvbSBVVEMsIHRoZSBuYW1lIG9mIHRoZSB0aW1lCi16b25lLCBhbmQgRFNUIG9mZnNldCwgYWxsIHJlbGF0aXZlIHRvIGEgZGF0ZSBvciB0aW1lIG9iamVjdCBwYXNzZWQgdG8gdGhlbS4KKyAgIFRoaXMgaXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcywgbWVhbmluZyB0aGF0IHRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZQorICAgaW5zdGFudGlhdGVkIGRpcmVjdGx5LiAgWW91IG5lZWQgdG8gZGVyaXZlIGEgY29uY3JldGUgc3ViY2xhc3MsIGFuZCAoYXQgbGVhc3QpCisgICBzdXBwbHkgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YHR6aW5mb2AgbWV0aG9kcyBuZWVkZWQgYnkgdGhlCisgICA6Y2xhc3M6YC5kYXRldGltZWAgbWV0aG9kcyB5b3UgdXNlLiAgVGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgc3VwcGxpZXMKKyAgIGEgc2ltcGxlIGNvbmNyZXRlIHN1YmNsYXNzIG9mIDpjbGFzczpgdHppbmZvYCwgOmNsYXNzOmB0aW1lem9uZWAsIHdoaWNoIGNhbiByZXByZXNlbnQKKyAgIHRpbWV6b25lcyB3aXRoIGZpeGVkIG9mZnNldCBmcm9tIFVUQyBzdWNoIGFzIFVUQyBpdHNlbGYgb3IgTm9ydGggQW1lcmljYW4gRVNUIGFuZAorICAgRURULgogCi1TcGVjaWFsIHJlcXVpcmVtZW50IGZvciBwaWNrbGluZzogIEEgOmNsYXNzOmB0emluZm9gIHN1YmNsYXNzIG11c3QgaGF2ZSBhbgotOm1ldGg6YF9faW5pdF9fYCBtZXRob2QgdGhhdCBjYW4gYmUgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLCBlbHNlIGl0IGNhbiBiZQotcGlja2xlZCBidXQgcG9zc2libHkgbm90IHVucGlja2xlZCBhZ2Fpbi4gIFRoaXMgaXMgYSB0ZWNobmljYWwgcmVxdWlyZW1lbnQgdGhhdAotbWF5IGJlIHJlbGF4ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgIEFuIGluc3RhbmNlIG9mIChhIGNvbmNyZXRlIHN1YmNsYXNzIG9mKSA6Y2xhc3M6YHR6aW5mb2AgY2FuIGJlIHBhc3NlZCB0byB0aGUKKyAgIGNvbnN0cnVjdG9ycyBmb3IgOmNsYXNzOmAuZGF0ZXRpbWVgIGFuZCA6Y2xhc3M6YC50aW1lYCBvYmplY3RzLiBUaGUgbGF0dGVyIG9iamVjdHMKKyAgIHZpZXcgdGhlaXIgYXR0cmlidXRlcyBhcyBiZWluZyBpbiBsb2NhbCB0aW1lLCBhbmQgdGhlIDpjbGFzczpgdHppbmZvYCBvYmplY3QKKyAgIHN1cHBvcnRzIG1ldGhvZHMgcmV2ZWFsaW5nIG9mZnNldCBvZiBsb2NhbCB0aW1lIGZyb20gVVRDLCB0aGUgbmFtZSBvZiB0aGUgdGltZQorICAgem9uZSwgYW5kIERTVCBvZmZzZXQsIGFsbCByZWxhdGl2ZSB0byBhIGRhdGUgb3IgdGltZSBvYmplY3QgcGFzc2VkIHRvIHRoZW0uCiAKLUEgY29uY3JldGUgc3ViY2xhc3Mgb2YgOmNsYXNzOmB0emluZm9gIG1heSBuZWVkIHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nCi1tZXRob2RzLiAgRXhhY3RseSB3aGljaCBtZXRob2RzIGFyZSBuZWVkZWQgZGVwZW5kcyBvbiB0aGUgdXNlcyBtYWRlIG9mIGF3YXJlCi06bW9kOmBkYXRldGltZWAgb2JqZWN0cy4gIElmIGluIGRvdWJ0LCBzaW1wbHkgaW1wbGVtZW50IGFsbCBvZiB0aGVtLgorICAgU3BlY2lhbCByZXF1aXJlbWVudCBmb3IgcGlja2xpbmc6ICBBIDpjbGFzczpgdHppbmZvYCBzdWJjbGFzcyBtdXN0IGhhdmUgYW4KKyAgIDptZXRoOmBfX2luaXRfX2AgbWV0aG9kIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywgZWxzZSBpdCBjYW4gYmUKKyAgIHBpY2tsZWQgYnV0IHBvc3NpYmx5IG5vdCB1bnBpY2tsZWQgYWdhaW4uICBUaGlzIGlzIGEgdGVjaG5pY2FsIHJlcXVpcmVtZW50IHRoYXQKKyAgIG1heSBiZSByZWxheGVkIGluIHRoZSBmdXR1cmUuCisKKyAgIEEgY29uY3JldGUgc3ViY2xhc3Mgb2YgOmNsYXNzOmB0emluZm9gIG1heSBuZWVkIHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nCisgICBtZXRob2RzLiAgRXhhY3RseSB3aGljaCBtZXRob2RzIGFyZSBuZWVkZWQgZGVwZW5kcyBvbiB0aGUgdXNlcyBtYWRlIG9mIGF3YXJlCisgICA6bW9kOmBkYXRldGltZWAgb2JqZWN0cy4gIElmIGluIGRvdWJ0LCBzaW1wbHkgaW1wbGVtZW50IGFsbCBvZiB0aGVtLgogCiAKIC4uIG1ldGhvZDo6IHR6aW5mby51dGNvZmZzZXQoZHQpCkBAIC0xNTI4LDcgKzE1NDYsNyBAQAogICAgKHNlZSA6bWV0aDpgdXRjb2Zmc2V0YCBmb3IgZGV0YWlscykuIE5vdGUgdGhhdCBEU1Qgb2Zmc2V0LCBpZiBhcHBsaWNhYmxlLCBoYXMKICAgIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgVVRDIG9mZnNldCByZXR1cm5lZCBieSA6bWV0aDpgdXRjb2Zmc2V0YCwgc28gdGhlcmUncwogICAgbm8gbmVlZCB0byBjb25zdWx0IDptZXRoOmBkc3RgIHVubGVzcyB5b3UncmUgaW50ZXJlc3RlZCBpbiBvYnRhaW5pbmcgRFNUIGluZm8KLSAgIHNlcGFyYXRlbHkuICBGb3IgZXhhbXBsZSwgOm1ldGg6YGRhdGV0aW1lLnRpbWV0dXBsZWAgY2FsbHMgaXRzIDphdHRyOmB0emluZm9gCisgICBzZXBhcmF0ZWx5LiAgRm9yIGV4YW1wbGUsIDptZXRoOmBkYXRldGltZS50aW1ldHVwbGVgIGNhbGxzIGl0cyA6YXR0cjpgfi5kYXRldGltZS50emluZm9gCiAgICBhdHRyaWJ1dGUncyA6bWV0aDpgZHN0YCBtZXRob2QgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgOmF0dHI6YHRtX2lzZHN0YCBmbGFnCiAgICBzaG91bGQgYmUgc2V0LCBhbmQgOm1ldGg6YHR6aW5mby5mcm9tdXRjYCBjYWxscyA6bWV0aDpgZHN0YCB0byBhY2NvdW50IGZvcgogICAgRFNUIGNoYW5nZXMgd2hlbiBjcm9zc2luZyB0aW1lIHpvbmVzLgpAQCAtMTY5Myw3ICsxNzExLDcgQEAKICAgICAgICpweXR6KiBsaWJyYXJ5IGJyaW5ncyB0aGUgKklBTkEgdGltZXpvbmUgZGF0YWJhc2UqIChhbHNvIGtub3duIGFzIHRoZQogICAgICAgT2xzb24gZGF0YWJhc2UpIHRvIFB5dGhvbiBhbmQgaXRzIHVzYWdlIGlzIHJlY29tbWVuZGVkLgogCi0gICBgSUFOQSB0aW1lem9uZSBkYXRhYmFzZSA8aHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzPmBfCisgICBgSUFOQSB0aW1lem9uZSBkYXRhYmFzZSA8aHR0cHM6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcz5gXwogICAgICAgVGhlIFRpbWUgWm9uZSBEYXRhYmFzZSAob2Z0ZW4gY2FsbGVkIHR6IG9yIHpvbmVpbmZvKSBjb250YWlucyBjb2RlIGFuZAogICAgICAgZGF0YSB0aGF0IHJlcHJlc2VudCB0aGUgaGlzdG9yeSBvZiBsb2NhbCB0aW1lIGZvciBtYW55IHJlcHJlc2VudGF0aXZlCiAgICAgICBsb2NhdGlvbnMgYXJvdW5kIHRoZSBnbG9iZS4gSXQgaXMgdXBkYXRlZCBwZXJpb2RpY2FsbHkgdG8gcmVmbGVjdCBjaGFuZ2VzCkBAIC0xODU0LDcgKzE4NzIsNyBAQAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKwogfCBgYCV6YGAgICAgfCBVVEMgb2Zmc2V0IGluIHRoZSBmb3JtICtISE1NICAgfCAoZW1wdHkpLCArMDAwMCwgLTA0MDAsIHwgXCg2KSAgfAogfCAgICAgICAgICAgfCBvciAtSEhNTSAoZW1wdHkgc3RyaW5nIGlmIHRoZSAgfCArMTAzMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfAotfCAgICAgICAgICAgfCB0aGUgb2JqZWN0IGlzIG5haXZlKS4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAorfCAgICAgICAgICAgfCBvYmplY3QgaXMgbmFpdmUpLiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKwogfCBgYCVaYGAgICAgfCBUaW1lIHpvbmUgbmFtZSAoZW1wdHkgc3RyaW5nICAgfCAoZW1wdHkpLCBVVEMsIEVTVCwgQ1NUIHwgICAgICAgfAogfCAgICAgICAgICAgfCBpZiB0aGUgb2JqZWN0IGlzIG5haXZlKS4gICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGJtLnJzdCBiL0RvYy9saWJyYXJ5L2RibS5yc3QKaW5kZXggZTZhODJkNi4uMmExZGI5MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGJtLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYm0ucnN0CkBAIC00LDEwICs0LDE0IEBACiAuLiBtb2R1bGU6OiBkYm0KICAgIDpzeW5vcHNpczogSW50ZXJmYWNlcyB0byB2YXJpb3VzIFVuaXggImRhdGFiYXNlIiBmb3JtYXRzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9kYm0vX19pbml0X18ucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIDptb2Q6YGRibWAgaXMgYSBnZW5lcmljIGludGVyZmFjZSB0byB2YXJpYW50cyBvZiB0aGUgREJNIGRhdGFiYXNlIC0tLQogOm1vZDpgZGJtLmdudWAgb3IgOm1vZDpgZGJtLm5kYm1gLiAgSWYgbm9uZSBvZiB0aGVzZSBtb2R1bGVzIGlzIGluc3RhbGxlZCwgdGhlCiBzbG93LWJ1dC1zaW1wbGUgaW1wbGVtZW50YXRpb24gaW4gbW9kdWxlIDptb2Q6YGRibS5kdW1iYCB3aWxsIGJlIHVzZWQuICBUaGVyZQotaXMgYSBgdGhpcmQgcGFydHkgaW50ZXJmYWNlIDxodHRwOi8vd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtPmBfIHRvCitpcyBhIGB0aGlyZCBwYXJ0eSBpbnRlcmZhY2UgPGh0dHBzOi8vd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtPmBfIHRvCiB0aGUgT3JhY2xlIEJlcmtlbGV5IERCLgogCiAKQEAgLTEyNCw2ICsxMjgsOSBAQAogICAgOnBsYXRmb3JtOiBVbml4CiAgICA6c3lub3BzaXM6IEdOVSdzIHJlaW50ZXJwcmV0YXRpb24gb2YgZGJtLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9kYm0vZ251LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBpcyBxdWl0ZSBzaW1pbGFyIHRvIHRoZSA6bW9kOmBkYm1gIG1vZHVsZSwgYnV0IHVzZXMgdGhlIEdOVSBsaWJyYXJ5CiBgYGdkYm1gYCBpbnN0ZWFkIHRvIHByb3ZpZGUgc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuICBQbGVhc2Ugbm90ZSB0aGF0IHRoZQpAQCAtMjMzLDYgKzI0MCw5IEBACiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogVGhlIHN0YW5kYXJkICJkYXRhYmFzZSIgaW50ZXJmYWNlLCBiYXNlZCBvbiBuZGJtLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9kYm0vbmRibS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGRibS5uZGJtYCBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBVbml4ICIobilkYm0iIGxpYnJhcnkuCiBEYm0gb2JqZWN0cyBiZWhhdmUgbGlrZSBtYXBwaW5ncyAoZGljdGlvbmFyaWVzKSwgZXhjZXB0IHRoYXQga2V5cyBhbmQgdmFsdWVzIGFyZQpAQCAtMjk1LDYgKzMwNSw4IEBACiAuLiBtb2R1bGU6OiBkYm0uZHVtYgogICAgOnN5bm9wc2lzOiBQb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2ltcGxlIERCTSBpbnRlcmZhY2UuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2RibS9kdW1iLnB5YAorCiAuLiBpbmRleDo6IHNpbmdsZTogZGF0YWJhc2VzCiAKIC4uIG5vdGU6OgpAQCAtMzA0LDYgKzMxNiw4IEBACiAgICBtb2R1bGUgaXMgbm90IHdyaXR0ZW4gZm9yIHNwZWVkIGFuZCBpcyBub3QgbmVhcmx5IGFzIGhlYXZpbHkgdXNlZCBhcyB0aGUgb3RoZXIKICAgIGRhdGFiYXNlIG1vZHVsZXMuCiAKKy0tLS0tLS0tLS0tLS0tCisKIFRoZSA6bW9kOmBkYm0uZHVtYmAgbW9kdWxlIHByb3ZpZGVzIGEgcGVyc2lzdGVudCBkaWN0aW9uYXJ5LWxpa2UgaW50ZXJmYWNlIHdoaWNoCiBpcyB3cml0dGVuIGVudGlyZWx5IGluIFB5dGhvbi4gIFVubGlrZSBvdGhlciBtb2R1bGVzIHN1Y2ggYXMgOm1vZDpgZGJtLmdudWAgbm8KIGV4dGVybmFsIGxpYnJhcnkgaXMgcmVxdWlyZWQuICBBcyB3aXRoIG90aGVyIHBlcnNpc3RlbnQgbWFwcGluZ3MsIHRoZSBrZXlzIGFuZApAQCAtMzI1LDEzICszMzksMTggQEAKICAgIGR1bWJkYm0gZGF0YWJhc2UgaXMgY3JlYXRlZCwgZmlsZXMgd2l0aCA6ZmlsZTpgLmRhdGAgYW5kIDpmaWxlOmAuZGlyYCBleHRlbnNpb25zCiAgICBhcmUgY3JlYXRlZC4KIAotICAgVGhlIG9wdGlvbmFsICpmbGFnKiBhcmd1bWVudCBpcyBjdXJyZW50bHkgaWdub3JlZDsgdGhlIGRhdGFiYXNlIGlzIGFsd2F5cyBvcGVuZWQKLSAgIGZvciB1cGRhdGUsIGFuZCB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgICBUaGUgb3B0aW9uYWwgKmZsYWcqIGFyZ3VtZW50IHN1cHBvcnRzIG9ubHkgdGhlIHNlbWFudGljcyBvZiBgYCdjJ2BgCisgICBhbmQgYGAnbidgYCB2YWx1ZXMuICBPdGhlciB2YWx1ZXMgd2lsbCBkZWZhdWx0IHRvIGRhdGFiYXNlIGJlaW5nIGFsd2F5cworICAgb3BlbmVkIGZvciB1cGRhdGUsIGFuZCB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuCiAKICAgIFRoZSBvcHRpb25hbCAqbW9kZSogYXJndW1lbnQgaXMgdGhlIFVuaXggbW9kZSBvZiB0aGUgZmlsZSwgdXNlZCBvbmx5IHdoZW4gdGhlCiAgICBkYXRhYmFzZSBoYXMgdG8gYmUgY3JlYXRlZC4gIEl0IGRlZmF1bHRzIHRvIG9jdGFsIGBgMG82NjZgYCAoYW5kIHdpbGwgYmUgbW9kaWZpZWQKICAgIGJ5IHRoZSBwcmV2YWlsaW5nIHVtYXNrKS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIDpmdW5jOmAub3BlbmAgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgZGF0YWJhc2Ugd2hlbiB0aGUgZmxhZyBoYXMgdGhlIHZhbHVlCisgICAgICBgYCduJ2BgLgorCiAgICBJbiBhZGRpdGlvbiB0byB0aGUgbWV0aG9kcyBwcm92aWRlZCBieSB0aGUKICAgIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLk11dGFibGVNYXBwaW5nYCBjbGFzcywgOmNsYXNzOmBkdW1iZGJtYCBvYmplY3RzCiAgICBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RlY2ltYWwucnN0IGIvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QKaW5kZXggY2E0MWMzYS4uOTcxNjAwYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QKQEAgLTEyLDYgKzEyLDggQEAKIC4uIG1vZHVsZWF1dGhvcjo6IFN0ZWZhbiBLcmFoIDxza3JhaCBhdCBieXRlcmVlZi5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogUmF5bW9uZCBELiBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9kZWNpbWFsLnB5YAorCiAuLiBpbXBvcnQgbW9kdWxlcyBmb3IgdGVzdGluZyBpbmxpbmUgZG9jdGVzdHMgd2l0aCB0aGUgU3BoaW54IGRvY3Rlc3QgYnVpbGRlcgogLi4gdGVzdHNldHVwOjogKgogCkBAIC0yMSw2ICsyMyw4IEBACiAgICAjIG1ha2Ugc3VyZSBlYWNoIGdyb3VwIGdldHMgYSBmcmVzaCBjb250ZXh0CiAgICBzZXRjb250ZXh0KENvbnRleHQoKSkKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGRlY2ltYWxgIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBmYXN0IGNvcnJlY3RseS1yb3VuZGVkCiBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMuIEl0IG9mZmVycyBzZXZlcmFsIGFkdmFudGFnZXMgb3ZlciB0aGUKIDpjbGFzczpgZmxvYXRgIGRhdGF0eXBlOgpAQCAtMTA3LDkgKzExMSw2IEBACiAgICAqIElCTSdzIEdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFNwZWNpZmljYXRpb24sIGBUaGUgR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMKICAgICAgU3BlY2lmaWNhdGlvbiA8aHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsL2RlY2FyaXRoLmh0bWw+YF8uCiAKLSAgICogSUVFRSBzdGFuZGFyZCA4NTQtMTk4NywgYFVub2ZmaWNpYWwgSUVFRSA4NTQgVGV4dAotICAgICA8aHR0cDovLzc1NHIudWNidGVzdC5vcmcvc3RhbmRhcmRzLzg1NC5wZGY+YF8uCi0KIC4uICUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQogCiAKQEAgLTE2Miw3ICsxNjMsNyBAQAogICAgPj4+IGMudHJhcHNbRmxvYXRPcGVyYXRpb25dID0gVHJ1ZQogICAgPj4+IERlY2ltYWwoMy4xNCkKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CiAgICBkZWNpbWFsLkZsb2F0T3BlcmF0aW9uOiBbPGNsYXNzICdkZWNpbWFsLkZsb2F0T3BlcmF0aW9uJz5dCiAgICA+Pj4gRGVjaW1hbCgnMy41JykgPCAzLjcKICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKQEAgLTc0Miw3ICs3NDMsNyBAQAogICAgICAgKiBgYCJOYU4iYGAsIGluZGljYXRpbmcgdGhhdCB0aGUgb3BlcmFuZCBpcyBhIHF1aWV0IE5hTiAoTm90IGEgTnVtYmVyKS4KICAgICAgICogYGAic05hTiJgYCwgaW5kaWNhdGluZyB0aGF0IHRoZSBvcGVyYW5kIGlzIGEgc2lnbmFsaW5nIE5hTi4KIAotICAgLi4gbWV0aG9kOjogcXVhbnRpemUoZXhwLCByb3VuZGluZz1Ob25lLCBjb250ZXh0PU5vbmUsIHdhdGNoZXhwPVRydWUpCisgICAuLiBtZXRob2Q6OiBxdWFudGl6ZShleHAsIHJvdW5kaW5nPU5vbmUsIGNvbnRleHQ9Tm9uZSkKIAogICAgICAgUmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gdGhlIGZpcnN0IG9wZXJhbmQgYWZ0ZXIgcm91bmRpbmcgYW5kIGhhdmluZyB0aGUKICAgICAgIGV4cG9uZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZC4KQEAgLTc2NSwxNCArNzY2LDggQEAKICAgICAgIGBgY29udGV4dGBgIGFyZ3VtZW50OyBpZiBuZWl0aGVyIGFyZ3VtZW50IGlzIGdpdmVuIHRoZSByb3VuZGluZyBtb2RlIG9mCiAgICAgICB0aGUgY3VycmVudCB0aHJlYWQncyBjb250ZXh0IGlzIHVzZWQuCiAKLSAgICAgIElmICp3YXRjaGV4cCogaXMgc2V0IChkZWZhdWx0KSwgdGhlbiBhbiBlcnJvciBpcyByZXR1cm5lZCB3aGVuZXZlciB0aGUKLSAgICAgIHJlc3VsdGluZyBleHBvbmVudCBpcyBncmVhdGVyIHRoYW4gOmF0dHI6YEVtYXhgIG9yIGxlc3MgdGhhbgotICAgICAgOmF0dHI6YEV0aW55YC4KLQotICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotICAgICAgICAgKndhdGNoZXhwKiBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgZnJvbSB0aGUgcHVyZSBQeXRob24gdmVyc2lvbgotICAgICAgICAgYW5kIGlzIG5vdCBwcmVzZW50IGluIHRoZSBDIHZlcnNpb24uIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uCi0gICAgICAgICAzLjQsIHdoZXJlIGl0IGRlZmF1bHRzIHRvIGBgVHJ1ZWBgLgorICAgICAgQW4gZXJyb3IgaXMgcmV0dXJuZWQgd2hlbmV2ZXIgdGhlIHJlc3VsdGluZyBleHBvbmVudCBpcyBncmVhdGVyIHRoYW4KKyAgICAgIDphdHRyOmBFbWF4YCBvciBsZXNzIHRoYW4gOmF0dHI6YEV0aW55YC4KIAogICAgLi4gbWV0aG9kOjogcmFkaXgoKQogCkBAIC0yMDkyLDQgKzIwODcsMyBAQAogCiAgICA+Pj4gQ29udGV4dChwcmVjPTUsIHJvdW5kaW5nPVJPVU5EX0RPV04pLmNyZWF0ZV9kZWNpbWFsKCcxLjIzNDU2NzgnKQogICAgRGVjaW1hbCgnMS4yMzQ1JykKLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0IGIvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0CmluZGV4IDA2ZTcwNDguLmQyYjVmYTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QKQEAgLTE2LDYgKzE2LDcgQEAKIAogLi4gdG9jdHJlZTo6CiAKKyAgIHR5cGluZy5yc3QKICAgIHB5ZG9jLnJzdAogICAgZG9jdGVzdC5yc3QKICAgIHVuaXR0ZXN0LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QgYi9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdAppbmRleCBjZWFkODE4Li41OWE2NDc4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdApAQCAtMywxNSArMywyMCBAQAogCiAuLiBtb2R1bGU6OiBkaWZmbGliCiAgICA6c3lub3BzaXM6IEhlbHBlcnMgZm9yIGNvbXB1dGluZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIG9iamVjdHMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IFRpbSBQZXRlcnMgPHRpbV9vbmVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogLi4gc2VjdGlvbmF1dGhvcjo6IFRpbSBQZXRlcnMgPHRpbV9vbmVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogLi4gTWFya3VwIGJ5IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2RpZmZsaWIucHlgCisKIC4uIHRlc3RzZXR1cDo6CiAKICAgIGltcG9ydCBzeXMKICAgIGZyb20gZGlmZmxpYiBpbXBvcnQgKgogCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgZm9yIGNvbXBhcmluZyBzZXF1ZW5jZXMuIEl0CiBjYW4gYmUgdXNlZCBmb3IgZXhhbXBsZSwgZm9yIGNvbXBhcmluZyBmaWxlcywgYW5kIGNhbiBwcm9kdWNlIGRpZmZlcmVuY2UKIGluZm9ybWF0aW9uIGluIHZhcmlvdXMgZm9ybWF0cywgaW5jbHVkaW5nIEhUTUwgYW5kIGNvbnRleHQgYW5kIHVuaWZpZWQKQEAgLTI1LDcgKzMwLDkgQEAKICAgIGxpdHRsZSBmYW5jaWVyIHRoYW4sIGFuIGFsZ29yaXRobSBwdWJsaXNoZWQgaW4gdGhlIGxhdGUgMTk4MCdzIGJ5IFJhdGNsaWZmIGFuZAogICAgT2JlcnNoZWxwIHVuZGVyIHRoZSBoeXBlcmJvbGljIG5hbWUgImdlc3RhbHQgcGF0dGVybiBtYXRjaGluZy4iICBUaGUgaWRlYSBpcyB0bwogICAgZmluZCB0aGUgbG9uZ2VzdCBjb250aWd1b3VzIG1hdGNoaW5nIHN1YnNlcXVlbmNlIHRoYXQgY29udGFpbnMgbm8gImp1bmsiCi0gICBlbGVtZW50cyAodGhlIFJhdGNsaWZmIGFuZCBPYmVyc2hlbHAgYWxnb3JpdGhtIGRvZXNuJ3QgYWRkcmVzcyBqdW5rKS4gIFRoZSBzYW1lCisgICBlbGVtZW50czsgdGhlc2UgImp1bmsiIGVsZW1lbnRzIGFyZSBvbmVzIHRoYXQgYXJlIHVuaW50ZXJlc3RpbmcgaW4gc29tZQorICAgc2Vuc2UsIHN1Y2ggYXMgYmxhbmsgbGluZXMgb3Igd2hpdGVzcGFjZS4gIChIYW5kbGluZyBqdW5rIGlzIGFuCisgICBleHRlbnNpb24gdG8gdGhlIFJhdGNsaWZmIGFuZCBPYmVyc2hlbHAgYWxnb3JpdGhtLikgVGhlIHNhbWUKICAgIGlkZWEgaXMgdGhlbiBhcHBsaWVkIHJlY3Vyc2l2ZWx5IHRvIHRoZSBwaWVjZXMgb2YgdGhlIHNlcXVlbmNlcyB0byB0aGUgbGVmdCBhbmQKICAgIHRvIHRoZSByaWdodCBvZiB0aGUgbWF0Y2hpbmcgc3Vic2VxdWVuY2UuICBUaGlzIGRvZXMgbm90IHlpZWxkIG1pbmltYWwgZWRpdAogICAgc2VxdWVuY2VzLCBidXQgZG9lcyB0ZW5kIHRvIHlpZWxkIG1hdGNoZXMgdGhhdCAibG9vayByaWdodCIgdG8gcGVvcGxlLgpAQCAtMTAwLDcgKzEwNyw4IEBACiAKICAgIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgcHVibGljOgogCi0gICAuLiBtZXRob2Q6OiBtYWtlX2ZpbGUoZnJvbWxpbmVzLCB0b2xpbmVzLCBmcm9tZGVzYz0nJywgdG9kZXNjPScnLCBjb250ZXh0PUZhbHNlLCBudW1saW5lcz01KQorICAgLi4gbWV0aG9kOjogbWFrZV9maWxlKGZyb21saW5lcywgdG9saW5lcywgZnJvbWRlc2M9JycsIHRvZGVzYz0nJywgY29udGV4dD1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIG51bWxpbmVzPTUsICosIGNoYXJzZXQ9J3V0Zi04JykKIAogICAgICAgQ29tcGFyZXMgKmZyb21saW5lcyogYW5kICp0b2xpbmVzKiAobGlzdHMgb2Ygc3RyaW5ncykgYW5kIHJldHVybnMgYSBzdHJpbmcgd2hpY2gKICAgICAgIGlzIGEgY29tcGxldGUgSFRNTCBmaWxlIGNvbnRhaW5pbmcgYSB0YWJsZSBzaG93aW5nIGxpbmUgYnkgbGluZSBkaWZmZXJlbmNlcyB3aXRoCkBAIC0xMTksNiArMTI3LDEwIEBACiAgICAgICB0aGUgbmV4dCBkaWZmZXJlbmNlIGhpZ2hsaWdodCBhdCB0aGUgdG9wIG9mIHRoZSBicm93c2VyIHdpdGhvdXQgYW55IGxlYWRpbmcKICAgICAgIGNvbnRleHQpLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgICAgKmNoYXJzZXQqIGtleXdvcmQtb25seSBhcmd1bWVudCB3YXMgYWRkZWQuICBUaGUgZGVmYXVsdCBjaGFyc2V0IG9mCisgICAgICAgICBIVE1MIGRvY3VtZW50IGNoYW5nZWQgZnJvbSBgYCdJU08tODg1OS0xJ2BgIHRvIGBgJ3V0Zi04J2BgLgorCiAgICAuLiBtZXRob2Q6OiBtYWtlX3RhYmxlKGZyb21saW5lcywgdG9saW5lcywgZnJvbWRlc2M9JycsIHRvZGVzYz0nJywgY29udGV4dD1GYWxzZSwgbnVtbGluZXM9NSkKIAogICAgICAgQ29tcGFyZXMgKmZyb21saW5lcyogYW5kICp0b2xpbmVzKiAobGlzdHMgb2Ygc3RyaW5ncykgYW5kIHJldHVybnMgYSBzdHJpbmcgd2hpY2gKQEAgLTIwOCw3ICsyMjAsNyBAQAogICAgQ29tcGFyZSAqYSogYW5kICpiKiAobGlzdHMgb2Ygc3RyaW5ncyk7IHJldHVybiBhIDpjbGFzczpgRGlmZmVyYFwgLXN0eWxlCiAgICBkZWx0YSAoYSA6dGVybTpgZ2VuZXJhdG9yYCBnZW5lcmF0aW5nIHRoZSBkZWx0YSBsaW5lcykuCiAKLSAgIE9wdGlvbmFsIGtleXdvcmQgcGFyYW1ldGVycyAqbGluZWp1bmsqIGFuZCAqY2hhcmp1bmsqIGFyZSBmb3IgZmlsdGVyIGZ1bmN0aW9ucworICAgT3B0aW9uYWwga2V5d29yZCBwYXJhbWV0ZXJzICpsaW5lanVuayogYW5kICpjaGFyanVuayogYXJlIGZpbHRlcmluZyBmdW5jdGlvbnMKICAgIChvciBgYE5vbmVgYCk6CiAKICAgICpsaW5lanVuayo6IEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYW5kIHJldHVybnMKQEAgLTIyMiw3ICsyMzQsNyBAQAogICAgKmNoYXJqdW5rKjogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYSBjaGFyYWN0ZXIgKGEgc3RyaW5nIG9mIGxlbmd0aCAxKSwgYW5kCiAgICByZXR1cm5zIGlmIHRoZSBjaGFyYWN0ZXIgaXMganVuaywgb3IgZmFsc2UgaWYgbm90LiBUaGUgZGVmYXVsdCBpcyBtb2R1bGUtbGV2ZWwKICAgIGZ1bmN0aW9uIDpmdW5jOmBJU19DSEFSQUNURVJfSlVOS2AsIHdoaWNoIGZpbHRlcnMgb3V0IHdoaXRlc3BhY2UgY2hhcmFjdGVycyAoYQotICAgYmxhbmsgb3IgdGFiOyBub3RlOiBiYWQgaWRlYSB0byBpbmNsdWRlIG5ld2xpbmUgaW4gdGhpcyEpLgorICAgYmxhbmsgb3IgdGFiOyBpdCdzIGEgYmFkIGlkZWEgdG8gaW5jbHVkZSBuZXdsaW5lIGluIHRoaXMhKS4KIAogICAgOmZpbGU6YFRvb2xzL3NjcmlwdHMvbmRpZmYucHlgIGlzIGEgY29tbWFuZC1saW5lIGZyb250LWVuZCB0byB0aGlzIGZ1bmN0aW9uLgogCkBAIC0zMDYsNiArMzE4LDIxIEBACiAKICAgIFNlZSA6cmVmOmBkaWZmbGliLWludGVyZmFjZWAgZm9yIGEgbW9yZSBkZXRhaWxlZCBleGFtcGxlLgogCisuLiBmdW5jdGlvbjo6IGRpZmZfYnl0ZXMoZGZ1bmMsIGEsIGIsIGZyb21maWxlPWInJywgdG9maWxlPWInJywgZnJvbWZpbGVkYXRlPWInJywgdG9maWxlZGF0ZT1iJycsIG49MywgbGluZXRlcm09YidcXG4nKQorCisgICBDb21wYXJlICphKiBhbmQgKmIqIChsaXN0cyBvZiBieXRlcyBvYmplY3RzKSB1c2luZyAqZGZ1bmMqOyB5aWVsZCBhCisgICBzZXF1ZW5jZSBvZiBkZWx0YSBsaW5lcyAoYWxzbyBieXRlcykgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSAqZGZ1bmMqLgorICAgKmRmdW5jKiBtdXN0IGJlIGEgY2FsbGFibGUsIHR5cGljYWxseSBlaXRoZXIgOmZ1bmM6YHVuaWZpZWRfZGlmZmAgb3IKKyAgIDpmdW5jOmBjb250ZXh0X2RpZmZgLgorCisgICBBbGxvd3MgeW91IHRvIGNvbXBhcmUgZGF0YSB3aXRoIHVua25vd24gb3IgaW5jb25zaXN0ZW50IGVuY29kaW5nLiBBbGwKKyAgIGlucHV0cyBleGNlcHQgKm4qIG11c3QgYmUgYnl0ZXMgb2JqZWN0cywgbm90IHN0ci4gV29ya3MgYnkgbG9zc2xlc3NseQorICAgY29udmVydGluZyBhbGwgaW5wdXRzIChleGNlcHQgKm4qKSB0byBzdHIsIGFuZCBjYWxsaW5nIGBgZGZ1bmMoYSwgYiwKKyAgIGZyb21maWxlLCB0b2ZpbGUsIGZyb21maWxlZGF0ZSwgdG9maWxlZGF0ZSwgbiwgbGluZXRlcm0pYGAuIFRoZSBvdXRwdXQgb2YKKyAgICpkZnVuYyogaXMgdGhlbiBjb252ZXJ0ZWQgYmFjayB0byBieXRlcywgc28gdGhlIGRlbHRhIGxpbmVzIHRoYXQgeW91CisgICByZWNlaXZlIGhhdmUgdGhlIHNhbWUgdW5rbm93bi9pbmNvbnNpc3RlbnQgZW5jb2RpbmdzIGFzICphKiBhbmQgKmIqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKIAogLi4gZnVuY3Rpb246OiBJU19MSU5FX0pVTksobGluZSkKIApAQCAtNDc3LDE2ICs1MDQsMTQgQEAKICAgICAgIHwgICAgICAgICAgICAgICB8IGFyZSBlcXVhbCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLSAgICAgIEZvciBleGFtcGxlOgorICAgICAgRm9yIGV4YW1wbGU6OgogCiAgICAgICAgID4+PiBhID0gInFhYnhjZCIKICAgICAgICAgPj4+IGIgPSAiYWJ5Y2RmIgogICAgICAgICA+Pj4gcyA9IFNlcXVlbmNlTWF0Y2hlcihOb25lLCBhLCBiKQogICAgICAgICA+Pj4gZm9yIHRhZywgaTEsIGkyLCBqMSwgajIgaW4gcy5nZXRfb3Bjb2RlcygpOgotICAgICAgICAgICAgcHJpbnQoJ3s6N30gICBhW3t9Ont9XSAtLT4gYlt7fTp7fV0geyFyOj44fSAtLT4geyFyfScuZm9ybWF0KAotICAgICAgICAgICAgICAgIHRhZywgaTEsIGkyLCBqMSwgajIsIGFbaTE6aTJdLCBiW2oxOmoyXSkpCi0KLQorICAgICAgICAuLi4gICAgIHByaW50KCd7Ojd9ICAgYVt7fTp7fV0gLS0+IGJbe306e31dIHshcjo+OH0gLS0+IHshcn0nLmZvcm1hdCgKKyAgICAgICAgLi4uICAgICAgICAgdGFnLCBpMSwgaTIsIGoxLCBqMiwgYVtpMTppMl0sIGJbajE6ajJdKSkKICAgICAgICAgZGVsZXRlICAgIGFbMDoxXSAtLT4gYlswOjBdICAgICAgJ3EnIC0tPiAnJwogICAgICAgICBlcXVhbCAgICAgYVsxOjNdIC0tPiBiWzA6Ml0gICAgICdhYicgLS0+ICdhYicKICAgICAgICAgcmVwbGFjZSAgIGFbMzo0XSAtLT4gYlsyOjNdICAgICAgJ3gnIC0tPiAneScKQEAgLTU5MSw3ICs2MTYsNyBAQAogICAgICB3b3JrLgogCiAgICAqIGBTaW1wbGUgdmVyc2lvbiBjb250cm9sIHJlY2lwZQotICAgICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NzI5Lz5gXyBmb3IgYSBzbWFsbCBhcHBsaWNhdGlvbgorICAgICA8aHR0cHM6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjcyOS8+YF8gZm9yIGEgc21hbGwgYXBwbGljYXRpb24KICAgICAgYnVpbHQgd2l0aCA6Y2xhc3M6YFNlcXVlbmNlTWF0Y2hlcmAuCiAKIApAQCAtNjIyLDYgKzY0NywxMiBAQAogICAgbGVuZ3RoIDEpLCBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgaXMganVuay4gVGhlIGRlZmF1bHQgaXMgYGBOb25lYGAsCiAgICBtZWFuaW5nIHRoYXQgbm8gY2hhcmFjdGVyIGlzIGNvbnNpZGVyZWQganVuay4KIAorICAgVGhlc2UganVuay1maWx0ZXJpbmcgZnVuY3Rpb25zIHNwZWVkIHVwIG1hdGNoaW5nIHRvIGZpbmQKKyAgIGRpZmZlcmVuY2VzIGFuZCBkbyBub3QgY2F1c2UgYW55IGRpZmZlcmluZyBsaW5lcyBvciBjaGFyYWN0ZXJzIHRvCisgICBiZSBpZ25vcmVkLiAgUmVhZCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlCisgICA6bWV0aDpgflNlcXVlbmNlTWF0Y2hlci5maW5kX2xvbmdlc3RfbWF0Y2hgIG1ldGhvZCdzICppc2p1bmsqCisgICBwYXJhbWV0ZXIgZm9yIGFuIGV4cGxhbmF0aW9uLgorCiAgICA6Y2xhc3M6YERpZmZlcmAgb2JqZWN0cyBhcmUgdXNlZCAoZGVsdGFzIGdlbmVyYXRlZCkgdmlhIGEgc2luZ2xlIG1ldGhvZDoKIAogCkBAIC03MTMsNjUgKzc0NCw0IEBACiBJdCBpcyBhbHNvIGNvbnRhaW5lZCBpbiB0aGUgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24sIGFzCiA6ZmlsZTpgVG9vbHMvc2NyaXB0cy9kaWZmLnB5YC4KIAotLi4gdGVzdGNvZGU6OgotCi0gICAiIiIgQ29tbWFuZCBsaW5lIGludGVyZmFjZSB0byBkaWZmbGliLnB5IHByb3ZpZGluZyBkaWZmcyBpbiBmb3VyIGZvcm1hdHM6Ci0KLSAgICogbmRpZmY6ICAgIGxpc3RzIGV2ZXJ5IGxpbmUgYW5kIGhpZ2hsaWdodHMgaW50ZXJsaW5lIGNoYW5nZXMuCi0gICAqIGNvbnRleHQ6ICBoaWdobGlnaHRzIGNsdXN0ZXJzIG9mIGNoYW5nZXMgaW4gYSBiZWZvcmUvYWZ0ZXIgZm9ybWF0LgotICAgKiB1bmlmaWVkOiAgaGlnaGxpZ2h0cyBjbHVzdGVycyBvZiBjaGFuZ2VzIGluIGFuIGlubGluZSBmb3JtYXQuCi0gICAqIGh0bWw6ICAgICBnZW5lcmF0ZXMgc2lkZSBieSBzaWRlIGNvbXBhcmlzb24gd2l0aCBjaGFuZ2UgaGlnaGxpZ2h0cy4KLQotICAgIiIiCi0KLSAgIGltcG9ydCBzeXMsIG9zLCB0aW1lLCBkaWZmbGliLCBvcHRwYXJzZQotCi0gICBkZWYgbWFpbigpOgotICAgICAgICAjIENvbmZpZ3VyZSB0aGUgb3B0aW9uIHBhcnNlcgotICAgICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbb3B0aW9uc10gZnJvbWZpbGUgdG9maWxlIgotICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZSkKLSAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Byb2R1Y2UgYSBjb250ZXh0IGZvcm1hdCBkaWZmIChkZWZhdWx0KScpCi0gICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi11IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQcm9kdWNlIGEgdW5pZmllZCBmb3JtYXQgZGlmZicpCi0gICAgICAgaGxwID0gJ1Byb2R1Y2UgSFRNTCBzaWRlIGJ5IHNpZGUgZGlmZiAoY2FuIHVzZSAtYyBhbmQgLWwgaW4gY29uanVuY3Rpb24pJwotICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9aGxwKQotICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUHJvZHVjZSBhIG5kaWZmIGZvcm1hdCBkaWZmJykKLSAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1saW5lcyIsIHR5cGU9ImludCIsIGRlZmF1bHQ9MywKLSAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTZXQgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgKGRlZmF1bHQgMyknKQotICAgICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLQotICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgotICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgaWYgbGVuKGFyZ3MpICE9IDI6Ci0gICAgICAgICAgIHBhcnNlci5lcnJvcigibmVlZCB0byBzcGVjaWZ5IGJvdGggYSBmcm9tZmlsZSBhbmQgdG9maWxlIikKLQotICAgICAgIG4gPSBvcHRpb25zLmxpbmVzCi0gICAgICAgZnJvbWZpbGUsIHRvZmlsZSA9IGFyZ3MgIyBhcyBzcGVjaWZpZWQgaW4gdGhlIHVzYWdlIHN0cmluZwotCi0gICAgICAgIyB3ZSdyZSBwYXNzaW5nIHRoZXNlIGFzIGFyZ3VtZW50cyB0byB0aGUgZGlmZiBmdW5jdGlvbgotICAgICAgIGZyb21kYXRlID0gdGltZS5jdGltZShvcy5zdGF0KGZyb21maWxlKS5zdF9tdGltZSkKLSAgICAgICB0b2RhdGUgPSB0aW1lLmN0aW1lKG9zLnN0YXQodG9maWxlKS5zdF9tdGltZSkKLSAgICAgICB3aXRoIG9wZW4oZnJvbWZpbGUpIGFzIGZyb21mLCBvcGVuKHRvZmlsZSkgYXMgdG9mOgotICAgICAgICAgICBmcm9tbGluZXMsIHRvbGluZXMgPSBsaXN0KGZyb21mKSwgbGlzdCh0b2YpCi0KLSAgICAgICBpZiBvcHRpb25zLnU6Ci0gICAgICAgICAgIGRpZmYgPSBkaWZmbGliLnVuaWZpZWRfZGlmZihmcm9tbGluZXMsIHRvbGluZXMsIGZyb21maWxlLCB0b2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tZGF0ZSwgdG9kYXRlLCBuPW4pCi0gICAgICAgZWxpZiBvcHRpb25zLm46Ci0gICAgICAgICAgIGRpZmYgPSBkaWZmbGliLm5kaWZmKGZyb21saW5lcywgdG9saW5lcykKLSAgICAgICBlbGlmIG9wdGlvbnMubToKLSAgICAgICAgICAgZGlmZiA9IGRpZmZsaWIuSHRtbERpZmYoKS5tYWtlX2ZpbGUoZnJvbWxpbmVzLCB0b2xpbmVzLCBmcm9tZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9maWxlLCBjb250ZXh0PW9wdGlvbnMuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtbGluZXM9bikKLSAgICAgICBlbHNlOgotICAgICAgICAgICBkaWZmID0gZGlmZmxpYi5jb250ZXh0X2RpZmYoZnJvbWxpbmVzLCB0b2xpbmVzLCBmcm9tZmlsZSwgdG9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWRhdGUsIHRvZGF0ZSwgbj1uKQotCi0gICAgICAgIyB3ZSdyZSB1c2luZyB3cml0ZWxpbmVzIGJlY2F1c2UgZGlmZiBpcyBhIGdlbmVyYXRvcgotICAgICAgIHN5cy5zdGRvdXQud3JpdGVsaW5lcyhkaWZmKQotCi0gICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgIG1haW4oKQorLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi8uLi9Ub29scy9zY3JpcHRzL2RpZmYucHkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Rpcy5yc3QgYi9Eb2MvbGlicmFyeS9kaXMucnN0CmluZGV4IDI3M2ZiMjAuLmQyZDhhYzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Rpcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGlzLnJzdApAQCAtNDgsOCArNDgsOSBAQAogCiAuLiBjbGFzczo6IEJ5dGVjb2RlKHgsICosIGZpcnN0X2xpbmU9Tm9uZSwgY3VycmVudF9vZmZzZXQ9Tm9uZSkKIAotICAgQW5hbHlzZSB0aGUgYnl0ZWNvZGUgY29ycmVzcG9uZGluZyB0byBhIGZ1bmN0aW9uLCBtZXRob2QsIHN0cmluZyBvZiBzb3VyY2UKLSAgIGNvZGUsIG9yIGEgY29kZSBvYmplY3QgKGFzIHJldHVybmVkIGJ5IDpmdW5jOmBjb21waWxlYCkuCisKKyAgIEFuYWx5c2UgdGhlIGJ5dGVjb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBmdW5jdGlvbiwgZ2VuZXJhdG9yLCBtZXRob2QsIHN0cmluZworICAgb2Ygc291cmNlIGNvZGUsIG9yIGEgY29kZSBvYmplY3QgKGFzIHJldHVybmVkIGJ5IDpmdW5jOmBjb21waWxlYCkuCiAKICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBtYW55IG9mIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGJlbG93LCBtb3N0CiAgICBub3RhYmx5IDpmdW5jOmBnZXRfaW5zdHJ1Y3Rpb25zYCwgYXMgaXRlcmF0aW5nIG92ZXIgYSA6Y2xhc3M6YEJ5dGVjb2RlYApAQCAtMTA5LDcgKzExMCw3IEBACiAuLiBmdW5jdGlvbjo6IGNvZGVfaW5mbyh4KQogCiAgICBSZXR1cm4gYSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJpbmcgd2l0aCBkZXRhaWxlZCBjb2RlIG9iamVjdCBpbmZvcm1hdGlvbgotICAgZm9yIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLCBzb3VyY2UgY29kZSBzdHJpbmcgb3IgY29kZSBvYmplY3QuCisgICBmb3IgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uLCBnZW5lcmF0b3IsIG1ldGhvZCwgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0LgogCiAgICBOb3RlIHRoYXQgdGhlIGV4YWN0IGNvbnRlbnRzIG9mIGNvZGUgaW5mbyBzdHJpbmdzIGFyZSBoaWdobHkgaW1wbGVtZW50YXRpb24KICAgIGRlcGVuZGVudCBhbmQgdGhleSBtYXkgY2hhbmdlIGFyYml0cmFyaWx5IGFjcm9zcyBQeXRob24gVk1zIG9yIFB5dGhvbgpAQCAtMTM2LDEzICsxMzcsMTMgQEAKIC4uIGZ1bmN0aW9uOjogZGlzKHg9Tm9uZSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSB0aGUgKngqIG9iamVjdC4gICp4KiBjYW4gZGVub3RlIGVpdGhlciBhIG1vZHVsZSwgYSBjbGFzcywgYQotICAgbWV0aG9kLCBhIGZ1bmN0aW9uLCBhIGNvZGUgb2JqZWN0LCBhIHN0cmluZyBvZiBzb3VyY2UgY29kZSBvciBhIGJ5dGUgc2VxdWVuY2UKLSAgIG9mIHJhdyBieXRlY29kZS4gIEZvciBhIG1vZHVsZSwgaXQgZGlzYXNzZW1ibGVzIGFsbCBmdW5jdGlvbnMuICBGb3IgYSBjbGFzcywKLSAgIGl0IGRpc2Fzc2VtYmxlcyBhbGwgbWV0aG9kcy4gIEZvciBhIGNvZGUgb2JqZWN0IG9yIHNlcXVlbmNlIG9mIHJhdyBieXRlY29kZSwKLSAgIGl0IHByaW50cyBvbmUgbGluZSBwZXIgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uICBTdHJpbmdzIGFyZSBmaXJzdCBjb21waWxlZCB0bwotICAgY29kZSBvYmplY3RzIHdpdGggdGhlIDpmdW5jOmBjb21waWxlYCBidWlsdC1pbiBmdW5jdGlvbiBiZWZvcmUgYmVpbmcKLSAgIGRpc2Fzc2VtYmxlZC4gIElmIG5vIG9iamVjdCBpcyBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBkaXNhc3NlbWJsZXMgdGhlIGxhc3QKLSAgIHRyYWNlYmFjay4KKyAgIG1ldGhvZCwgYSBmdW5jdGlvbiwgYSBnZW5lcmF0b3IsIGEgY29kZSBvYmplY3QsIGEgc3RyaW5nIG9mIHNvdXJjZSBjb2RlIG9yCisgICBhIGJ5dGUgc2VxdWVuY2Ugb2YgcmF3IGJ5dGVjb2RlLiAgRm9yIGEgbW9kdWxlLCBpdCBkaXNhc3NlbWJsZXMgYWxsIGZ1bmN0aW9ucy4KKyAgIEZvciBhIGNsYXNzLCBpdCBkaXNhc3NlbWJsZXMgYWxsIG1ldGhvZHMgKGluY2x1ZGluZyBjbGFzcyBhbmQgc3RhdGljIG1ldGhvZHMpLgorICAgRm9yIGEgY29kZSBvYmplY3Qgb3Igc2VxdWVuY2Ugb2YgcmF3IGJ5dGVjb2RlLCBpdCBwcmludHMgb25lIGxpbmUgcGVyIGJ5dGVjb2RlCisgICBpbnN0cnVjdGlvbi4gIFN0cmluZ3MgYXJlIGZpcnN0IGNvbXBpbGVkIHRvIGNvZGUgb2JqZWN0cyB3aXRoIHRoZSA6ZnVuYzpgY29tcGlsZWAKKyAgIGJ1aWx0LWluIGZ1bmN0aW9uIGJlZm9yZSBiZWluZyBkaXNhc3NlbWJsZWQuICBJZiBubyBvYmplY3QgaXMgcHJvdmlkZWQsIHRoaXMKKyAgIGZ1bmN0aW9uIGRpc2Fzc2VtYmxlcyB0aGUgbGFzdCB0cmFjZWJhY2suCiAKICAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkICpmaWxlKiBhcmd1bWVudCBpZgogICAgcHJvdmlkZWQgYW5kIHRvIGBgc3lzLnN0ZG91dGBgIG90aGVyd2lzZS4KQEAgLTM0NSw2ICszNDYsMTQgQEAKICAgIEltcGxlbWVudHMgYGBUT1MgPSBpdGVyKFRPUylgYC4KIAogCisuLiBvcGNvZGU6OiBHRVRfWUlFTERfRlJPTV9JVEVSCisKKyAgIElmIGBgVE9TYGAgaXMgYSA6dGVybTpgZ2VuZXJhdG9yIGl0ZXJhdG9yYCBvciA6dGVybTpgY29yb3V0aW5lYCBvYmplY3QKKyAgIGl0IGlzIGxlZnQgYXMgaXMuICBPdGhlcndpc2UsIGltcGxlbWVudHMgYGBUT1MgPSBpdGVyKFRPUylgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogKipCaW5hcnkgb3BlcmF0aW9ucyoqCiAKIEJpbmFyeSBvcGVyYXRpb25zIHJlbW92ZSB0aGUgdG9wIG9mIHRoZSBzdGFjayAoVE9TKSBhbmQgdGhlIHNlY29uZCB0b3AtbW9zdApAQCAtMzYxLDYgKzM3MCwxMyBAQAogICAgSW1wbGVtZW50cyBgYFRPUyA9IFRPUzEgKiBUT1NgYC4KIAogCisuLiBvcGNvZGU6OiBCSU5BUllfTUFUUklYX01VTFRJUExZCisKKyAgIEltcGxlbWVudHMgYGBUT1MgPSBUT1MxIEAgVE9TYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKIC4uIG9wY29kZTo6IEJJTkFSWV9GTE9PUl9ESVZJREUKIAogICAgSW1wbGVtZW50cyBgYFRPUyA9IFRPUzEgLy8gVE9TYGAuCkBAIC00MzMsNiArNDQ5LDEzIEBACiAgICBJbXBsZW1lbnRzIGluLXBsYWNlIGBgVE9TID0gVE9TMSAqIFRPU2BgLgogCiAKKy4uIG9wY29kZTo6IElOUExBQ0VfTUFUUklYX01VTFRJUExZCisKKyAgIEltcGxlbWVudHMgaW4tcGxhY2UgYGBUT1MgPSBUT1MxIEAgVE9TYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKIC4uIG9wY29kZTo6IElOUExBQ0VfRkxPT1JfRElWSURFCiAKICAgIEltcGxlbWVudHMgaW4tcGxhY2UgYGBUT1MgPSBUT1MxIC8vIFRPU2BgLgpAQCAtNDkzLDYgKzUxNiw0MCBAQAogICAgSW1wbGVtZW50cyBgYGRlbCBUT1MxW1RPU11gYC4KIAogCisqKkNvcm91dGluZSBvcGNvZGVzKioKKworLi4gb3Bjb2RlOjogR0VUX0FXQUlUQUJMRQorCisgICBJbXBsZW1lbnRzIGBgVE9TID0gZ2V0X2F3YWl0YWJsZShUT1MpYGAsIHdoZXJlIGBgZ2V0X2F3YWl0YWJsZShvKWBgCisgICByZXR1cm5zIGBgb2BgIGlmIGBgb2BgIGlzIGEgY29yb3V0aW5lIG9iamVjdCBvciBhIGdlbmVyYXRvciBvYmplY3Qgd2l0aAorICAgdGhlIENPX0lURVJBQkxFX0NPUk9VVElORSBmbGFnLCBvciByZXNvbHZlcworICAgYGBvLl9fYXdhaXRfX2BgLgorCisKKy4uIG9wY29kZTo6IEdFVF9BSVRFUgorCisgICBJbXBsZW1lbnRzIGBgVE9TID0gZ2V0X2F3YWl0YWJsZShUT1MuX19haXRlcl9fKCkpYGAuICBTZWUgYGBHRVRfQVdBSVRBQkxFYGAKKyAgIGZvciBkZXRhaWxzIGFib3V0IGBgZ2V0X2F3YWl0YWJsZWBgCisKKworLi4gb3Bjb2RlOjogR0VUX0FORVhUCisKKyAgIEltcGxlbWVudHMgYGBQVVNIKGdldF9hd2FpdGFibGUoVE9TLl9fYW5leHRfXygpKSlgYC4gIFNlZSBgYEdFVF9BV0FJVEFCTEVgYAorICAgZm9yIGRldGFpbHMgYWJvdXQgYGBnZXRfYXdhaXRhYmxlYGAKKworCisuLiBvcGNvZGU6OiBCRUZPUkVfQVNZTkNfV0lUSAorCisgICBSZXNvbHZlcyBgYF9fYWVudGVyX19gYCBhbmQgYGBfX2FleGl0X19gYCBmcm9tIHRoZSBvYmplY3Qgb24gdG9wIG9mIHRoZQorICAgc3RhY2suICBQdXNoZXMgYGBfX2FleGl0X19gYCBhbmQgcmVzdWx0IG9mIGBgX19hZW50ZXJfXygpYGAgdG8gdGhlIHN0YWNrLgorCisKKy4uIG9wY29kZTo6IFNFVFVQX0FTWU5DX1dJVEgKKworICAgQ3JlYXRlcyBhIG5ldyBmcmFtZSBvYmplY3QuCisKKworCiAqKk1pc2NlbGxhbmVvdXMgb3Bjb2RlcyoqCiAKIC4uIG9wY29kZTo6IFBSSU5UX0VYUFIKQEAgLTU5Nyw3ICs2NTQsNyBAQAogICAgOm9wY29kZTpgVU5QQUNLX1NFUVVFTkNFYCkuCiAKIAotLi4gb3Bjb2RlOjogV0lUSF9DTEVBTlVQCisuLiBvcGNvZGU6OiBXSVRIX0NMRUFOVVBfU1RBUlQKIAogICAgQ2xlYW5zIHVwIHRoZSBzdGFjayB3aGVuIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBibG9jayBleGl0cy4gIFRPUyBpcyB0aGUKICAgIGNvbnRleHQgbWFuYWdlcidzIDptZXRoOmBfX2V4aXRfX2AgYm91bmQgbWV0aG9kLiBCZWxvdyBUT1MgYXJlIDEtLTMgdmFsdWVzCkBAIC02MDksNyArNjY2LDEzIEBACiAgICAqIChTRUNPTkQsIFRISVJELCBGT1VSVEgpID0gZXhjX2luZm8oKQogCiAgICBJbiB0aGUgbGFzdCBjYXNlLCBgYFRPUyhTRUNPTkQsIFRISVJELCBGT1VSVEgpYGAgaXMgY2FsbGVkLCBvdGhlcndpc2UKLSAgIGBgVE9TKE5vbmUsIE5vbmUsIE5vbmUpYGAuICBJbiBhZGRpdGlvbiwgVE9TIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2suCisgICBgYFRPUyhOb25lLCBOb25lLCBOb25lKWBgLiAgUHVzaGVzIFNFQ09ORCBhbmQgcmVzdWx0IG9mIHRoZSBjYWxsCisgICB0byB0aGUgc3RhY2suCisKKworLi4gb3Bjb2RlOjogV0lUSF9DTEVBTlVQX0ZJTklTSAorCisgICBQb3BzIGV4Y2VwdGlvbiB0eXBlIGFuZCByZXN1bHQgb2YgJ2V4aXQnIGZ1bmN0aW9uIGNhbGwgZnJvbSB0aGUgc3RhY2suCiAKICAgIElmIHRoZSBzdGFjayByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbiwgKmFuZCogdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJucyBhCiAgICAndHJ1ZScgdmFsdWUsIHRoaXMgaW5mb3JtYXRpb24gaXMgInphcHBlZCIgYW5kIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKQEAgLTY0NSw3ICs3MDgsNyBAQAogCiAgICBJbXBsZW1lbnRzIGFzc2lnbm1lbnQgd2l0aCBhIHN0YXJyZWQgdGFyZ2V0OiBVbnBhY2tzIGFuIGl0ZXJhYmxlIGluIFRPUyBpbnRvCiAgICBpbmRpdmlkdWFsIHZhbHVlcywgd2hlcmUgdGhlIHRvdGFsIG51bWJlciBvZiB2YWx1ZXMgY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUKLSAgIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgaXRlcmFibGU6IG9uZSB0aGUgbmV3IHZhbHVlcyB3aWxsIGJlIGEgbGlzdCBvZiBhbGwKKyAgIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgaXRlcmFibGU6IG9uZSBvZiB0aGUgbmV3IHZhbHVlcyB3aWxsIGJlIGEgbGlzdCBvZiBhbGwKICAgIGxlZnRvdmVyIGl0ZW1zLgogCiAgICBUaGUgbG93IGJ5dGUgb2YgKmNvdW50cyogaXMgdGhlIG51bWJlciBvZiB2YWx1ZXMgYmVmb3JlIHRoZSBsaXN0IHZhbHVlLCB0aGUKQEAgLTc5NSwxMCArODU4LDYgQEAKICAgIFB1c2hlcyBhIHRyeSBibG9jayBmcm9tIGEgdHJ5LWV4Y2VwdCBjbGF1c2Ugb250byB0aGUgYmxvY2sgc3RhY2suICpkZWx0YSoKICAgIHBvaW50cyB0byB0aGUgZmluYWxseSBibG9jay4KIAotLi4gb3Bjb2RlOjogU1RPUkVfTUFQCi0KLSAgIFN0b3JlIGEga2V5IGFuZCB2YWx1ZSBwYWlyIGluIGEgZGljdGlvbmFyeS4gIFBvcHMgdGhlIGtleSBhbmQgdmFsdWUgd2hpbGUKLSAgIGxlYXZpbmcgdGhlIGRpY3Rpb25hcnkgb24gdGhlIHN0YWNrLgogCiAuLiBvcGNvZGU6OiBMT0FEX0ZBU1QgKHZhcl9udW0pCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Rpc3RyaWJ1dGlvbi5yc3QgYi9Eb2MvbGlicmFyeS9kaXN0cmlidXRpb24ucnN0CmluZGV4IGM0OTU0ZDEuLjNlNmU4NGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Rpc3RyaWJ1dGlvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApAQCAtMTIsMyArMTIsNCBAQAogICAgZGlzdHV0aWxzLnJzdAogICAgZW5zdXJlcGlwLnJzdAogICAgdmVudi5yc3QKKyAgIHppcGFwcC5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Rpc3R1dGlscy5yc3QgYi9Eb2MvbGlicmFyeS9kaXN0dXRpbHMucnN0CmluZGV4IGUzZDEzMTQuLjYyYWJjODUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Rpc3R1dGlscy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGlzdHV0aWxzLnJzdApAQCAtNCw4ICs0LDEwIEBACiAuLiBtb2R1bGU6OiBkaXN0dXRpbHMKICAgIDpzeW5vcHNpczogU3VwcG9ydCBmb3IgYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgUHl0aG9uIG1vZHVsZXMgaW50byBhbgogICAgICAgICAgICAgICBleGlzdGluZyBQeXRob24gaW5zdGFsbGF0aW9uLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGRpc3R1dGlsc2AgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciBidWlsZGluZyBhbmQgaW5zdGFsbGluZwogYWRkaXRpb25hbCBtb2R1bGVzIGludG8gYSBQeXRob24gaW5zdGFsbGF0aW9uLiAgVGhlIG5ldyBtb2R1bGVzIG1heSBiZSBlaXRoZXIKQEAgLTE1LDcgKzE3LDcgQEAKIE1vc3QgUHl0aG9uIHVzZXJzIHdpbGwgKm5vdCogd2FudCB0byB1c2UgdGhpcyBtb2R1bGUgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkCiB1c2UgdGhlIGNyb3NzLXZlcnNpb24gdG9vbHMgbWFpbnRhaW5lZCBieSB0aGUgUHl0aG9uIFBhY2thZ2luZyBBdXRob3JpdHkuIEluCiBwYXJ0aWN1bGFyLAotYHNldHVwdG9vbHMgPGh0dHBzOi8vc2V0dXB0b29scy5weXBhLmlvL2VuL2xhdGVzdC9zZXR1cHRvb2xzLmh0bWw+YF9fIGlzIGFuCitgc2V0dXB0b29scyA8aHR0cHM6Ly9zZXR1cHRvb2xzLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC8+YF9fIGlzIGFuCiBlbmhhbmNlZCBhbHRlcm5hdGl2ZSB0byA6bW9kOmBkaXN0dXRpbHNgIHRoYXQgcHJvdmlkZXM6CiAKICogc3VwcG9ydCBmb3IgZGVjbGFyaW5nIHByb2plY3QgZGVwZW5kZW5jaWVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CmluZGV4IGVhNmUxYjUuLjY2YTUyMWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CkBAIC01LDExICs1LDE1IEBACiAKIC4uIG1vZHVsZTo6IGRvY3Rlc3QKICAgIDpzeW5vcHNpczogVGVzdCBwaWVjZXMgb2YgY29kZSB3aXRoaW4gZG9jc3RyaW5ncy4KKwogLi4gbW9kdWxlYXV0aG9yOjogVGltIFBldGVycyA8dGltQHB5dGhvbi5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogVGltIFBldGVycyA8dGltQHB5dGhvbi5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekBkZWJpYW4ub3JnPgogLi4gc2VjdGlvbmF1dGhvcjo6IEVkd2FyZCBMb3BlciA8ZWRsb3BlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2RvY3Rlc3QucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBkb2N0ZXN0YCBtb2R1bGUgc2VhcmNoZXMgZm9yIHBpZWNlcyBvZiB0ZXh0IHRoYXQgbG9vayBsaWtlIGludGVyYWN0aXZlCiBQeXRob24gc2Vzc2lvbnMsIGFuZCB0aGVuIGV4ZWN1dGVzIHRob3NlIHNlc3Npb25zIHRvIHZlcmlmeSB0aGF0IHRoZXkgd29yawpAQCAtODQsMTQgKzg4LDE4IEBACiAgICAgICAgZG9jdGVzdC50ZXN0bW9kKCkKIAogSWYgeW91IHJ1biA6ZmlsZTpgZXhhbXBsZS5weWAgZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCA6bW9kOmBkb2N0ZXN0YAotd29ya3MgaXRzIG1hZ2ljOjoKK3dvcmtzIGl0cyBtYWdpYzoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCBweXRob24gZXhhbXBsZS5weQogICAgJAogCiBUaGVyZSdzIG5vIG91dHB1dCEgIFRoYXQncyBub3JtYWwsIGFuZCBpdCBtZWFucyBhbGwgdGhlIGV4YW1wbGVzIHdvcmtlZC4gIFBhc3MKIGBgLXZgYCB0byB0aGUgc2NyaXB0LCBhbmQgOm1vZDpgZG9jdGVzdGAgcHJpbnRzIGEgZGV0YWlsZWQgbG9nIG9mIHdoYXQKLWl0J3MgdHJ5aW5nLCBhbmQgcHJpbnRzIGEgc3VtbWFyeSBhdCB0aGUgZW5kOjoKK2l0J3MgdHJ5aW5nLCBhbmQgcHJpbnRzIGEgc3VtbWFyeSBhdCB0aGUgZW5kOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAkIHB5dGhvbiBleGFtcGxlLnB5IC12CiAgICBUcnlpbmc6CkBAIC0xMDUsNyArMTEzLDkgQEAKICAgICAgICBbMSwgMSwgMiwgNiwgMjQsIDEyMF0KICAgIG9rCiAKLUFuZCBzbyBvbiwgZXZlbnR1YWxseSBlbmRpbmcgd2l0aDo6CitBbmQgc28gb24sIGV2ZW50dWFsbHkgZW5kaW5nIHdpdGg6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCiAKICAgIFRyeWluZzoKICAgICAgICBmYWN0b3JpYWwoMWUxMDApCkBAIC0xOTIsNyArMjAyLDkgQEAKIFRoYXQgc2hvcnQgc2NyaXB0IGV4ZWN1dGVzIGFuZCB2ZXJpZmllcyBhbnkgaW50ZXJhY3RpdmUgUHl0aG9uIGV4YW1wbGVzCiBjb250YWluZWQgaW4gdGhlIGZpbGUgOmZpbGU6YGV4YW1wbGUudHh0YC4gIFRoZSBmaWxlIGNvbnRlbnQgaXMgdHJlYXRlZCBhcyBpZiBpdAogd2VyZSBhIHNpbmdsZSBnaWFudCBkb2NzdHJpbmc7IHRoZSBmaWxlIGRvZXNuJ3QgbmVlZCB0byBjb250YWluIGEgUHl0aG9uCi1wcm9ncmFtISAgIEZvciBleGFtcGxlLCBwZXJoYXBzIDpmaWxlOmBleGFtcGxlLnR4dGAgY29udGFpbnMgdGhpczo6Citwcm9ncmFtISAgIEZvciBleGFtcGxlLCBwZXJoYXBzIDpmaWxlOmBleGFtcGxlLnR4dGAgY29udGFpbnMgdGhpczoKKworLi4gY29kZS1ibG9jazo6IG5vbmUKIAogICAgVGhlIGBgZXhhbXBsZWBgIG1vZHVsZQogICAgPT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTA1MywxNSArMTA2NSw5IEBACiAKICAgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgc2FtZSBzZWFyY2ggdGVjaG5pcXVlIGFzIDpmdW5jOmB0ZXN0bW9kYC4KIAotICAgLi4gbm90ZTo6Ci0gICAgICBVbmxpa2UgOmZ1bmM6YHRlc3Rtb2RgIGFuZCA6Y2xhc3M6YERvY1Rlc3RGaW5kZXJgLCB0aGlzIGZ1bmN0aW9uIHJhaXNlcwotICAgICAgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiAqbW9kdWxlKiBjb250YWlucyBubyBkb2NzdHJpbmdzLiAgWW91IGNhbiBwcmV2ZW50Ci0gICAgICB0aGlzIGVycm9yIGJ5IHBhc3NpbmcgYSA6Y2xhc3M6YERvY1Rlc3RGaW5kZXJgIGluc3RhbmNlIGFzIHRoZQotICAgICAgKnRlc3RfZmluZGVyKiBhcmd1bWVudCB3aXRoIGl0cyAqZXhjbHVkZV9lbXB0eSoga2V5d29yZCBhcmd1bWVudCBzZXQKLSAgICAgIHRvIGBgRmFsc2VgYDo6Ci0KLSAgICAgICAgID4+PiBmaW5kZXIgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoZXhjbHVkZV9lbXB0eT1GYWxzZSkKLSAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKHRlc3RfZmluZGVyPWZpbmRlcikKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICA6ZnVuYzpgRG9jVGVzdFN1aXRlYCByZXR1cm5zIGFuIGVtcHR5IDpjbGFzczpgdW5pdHRlc3QuVGVzdFN1aXRlYCBpZiAqbW9kdWxlKgorICAgICAgY29udGFpbnMgbm8gZG9jc3RyaW5ncyBpbnN0ZWFkIG9mIHJhaXNpbmcgOmV4YzpgVmFsdWVFcnJvcmAuCiAKIAogVW5kZXIgdGhlIGNvdmVycywgOmZ1bmM6YERvY1Rlc3RTdWl0ZWAgY3JlYXRlcyBhIDpjbGFzczpgdW5pdHRlc3QuVGVzdFN1aXRlYCBvdXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdAppbmRleCBjYmJjYjc4Li5hZDkzYjVjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0CkBAIC01OSw5ICs1OSwxMSBAQAogCiAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL2VtYWlsLXJlYWQtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQogCi1VcCB0byB0aGUgcHJvbXB0LCB0aGUgb3V0cHV0IGZyb20gdGhlIGFib3ZlIGlzOjoKK1VwIHRvIHRoZSBwcm9tcHQsIHRoZSBvdXRwdXQgZnJvbSB0aGUgYWJvdmUgaXM6CiAKLSAgICBUbzogUGVuZWxvcGUgUHVzc3ljYXQgPCJwZW5lbG9wZUBleGFtcGxlLmNvbSI+LCBGYWJyZXR0ZSBQdXNzeWNhdCA8ImZhYnJldHRlQGV4YW1wbGUuY29tIj4KKy4uIGNvZGUtYmxvY2s6OiBub25lCisKKyAgICBUbzogUGVuZWxvcGUgUHVzc3ljYXQgPHBlbmVsb3BlQGV4YW1wbGUuY29tPiwgRmFicmV0dGUgUHVzc3ljYXQgPGZhYnJldHRlQGV4YW1wbGUuY29tPgogICAgIEZyb206IFBlcMOpIExlIFBldyA8cGVwZUBleGFtcGxlLmNvbT4KICAgICBTdWJqZWN0OiBBeW9ucyBhc3BlcmdlcyBwb3VyIGxlIGTDqWpldW5lcgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5jaGFyc2V0LnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQucnN0CmluZGV4IDgwZWYzZDYuLjE2MWQ4NmEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogZW1haWwuY2hhcnNldAogICAgOnN5bm9wc2lzOiBDaGFyYWN0ZXIgU2V0cwogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbWFpbC9jaGFyc2V0LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIDpjbGFzczpgQ2hhcnNldGAgZm9yIHJlcHJlc2VudGluZyBjaGFyYWN0ZXIgc2V0cwogYW5kIGNoYXJhY3RlciBzZXQgY29udmVyc2lvbnMgaW4gZW1haWwgbWVzc2FnZXMsIGFzIHdlbGwgYXMgYSBjaGFyYWN0ZXIgc2V0CkBAIC0xMDEsOSArMTA0LDEwIEBACiAgICAgICByZXR1cm5zIHRoZSBzdHJpbmcgYGBiYXNlNjRgYCBpZiAqYm9keV9lbmNvZGluZyogaXMgYGBCQVNFNjRgYCwgYW5kCiAgICAgICByZXR1cm5zIHRoZSBzdHJpbmcgYGA3Yml0YGAgb3RoZXJ3aXNlLgogCisKICAgIC4uIFhYWCB0b19zcGxpdHRhYmxlIGFuZCBmcm9tX3NwbGl0dGFibGUgYXJlIG5vdCB0aGVyZSBhbnltb3JlIQogCi0gICAuLiBtZXRob2QgdG9fc3BsaXR0YWJsZShzKQorICAgLi4gdG9fc3BsaXR0YWJsZShzKQogCiAgICAgICBDb252ZXJ0IGEgcG9zc2libHkgbXVsdGlieXRlIHN0cmluZyB0byBhIHNhZmVseSBzcGxpdHRhYmxlIGZvcm1hdC4gKnMqIGlzCiAgICAgICB0aGUgc3RyaW5nIHRvIHNwbGl0LgpAQCAtMTE4LDcgKzEyMiw3IEBACiAgICAgICB0aGUgVW5pY29kZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgYGAnVStGRkZEJ2BgLgogCiAKLSAgIC4uIG1ldGhvZCBmcm9tX3NwbGl0dGFibGUodXN0clssIHRvX291dHB1dF0pCisgICAuLiBmcm9tX3NwbGl0dGFibGUodXN0clssIHRvX291dHB1dF0pCiAKICAgICAgIENvbnZlcnQgYSBzcGxpdHRhYmxlIHN0cmluZyBiYWNrIGludG8gYW4gZW5jb2RlZCBzdHJpbmcuICAqdXN0ciogaXMgYQogICAgICAgVW5pY29kZSBzdHJpbmcgdG8gInVuc3BsaXQiLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0CmluZGV4IGY1M2QzNGIuLmNkNjM3MjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5yc3QKQEAgLTcsNiArNywxMCBAQAogLi4gbW9kdWxlYXV0aG9yOjogUi4gRGF2aWQgTXVycmF5IDxyZG11cnJheUBiaXRkYW5jZS5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogUi4gRGF2aWQgTXVycmF5IDxyZG11cnJheUBiaXRkYW5jZS5jb20+CiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgYXMgYSA6dGVybTpgcHJvdmlzaW9uYWwgbW9kdWxlIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2VtYWlsL2NvbnRlbnRtYW5hZ2VyLnB5YAogCiAuLiBub3RlOjoKIApAQCAtMTUsOCArMTksNyBAQAogICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBtb2R1bGUpIG1heSBvY2N1ciBpZiBkZWVtZWQKICAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgogCi0uLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKLSAgIGFzIGEgOnRlcm06YHByb3Zpc2lvbmFsIG1vZHVsZSA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLgorLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YH5lbWFpbC5tZXNzYWdlYCBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyB0aGF0IGNhbiByZXByZXNlbnQgYW4KIGFyYml0cmFyeSBlbWFpbCBtZXNzYWdlLiAgVGhhdCBiYXNpYyBtZXNzYWdlIG1vZGVsIGhhcyBhIHVzZWZ1bCBhbmQgZmxleGlibGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmVuY29kZXJzLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmVuY29kZXJzLnJzdAppbmRleCA5MTZiYTVkLi45ZDdmOWJmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5lbmNvZGVycy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuZW5jb2RlcnMucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogZW1haWwuZW5jb2RlcnMKICAgIDpzeW5vcHNpczogRW5jb2RlcnMgZm9yIGVtYWlsIG1lc3NhZ2UgcGF5bG9hZHMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2VtYWlsL2VuY29kZXJzLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBXaGVuIGNyZWF0aW5nIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cyBmcm9tIHNjcmF0Y2gsIHlvdSBvZnRlbgogbmVlZCB0byBlbmNvZGUgdGhlIHBheWxvYWRzIGZvciB0cmFuc3BvcnQgdGhyb3VnaCBjb21wbGlhbnQgbWFpbCBzZXJ2ZXJzLiBUaGlzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5lcnJvcnMucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuZXJyb3JzLnJzdAppbmRleCAyOTRlM2VkLi44NDcwNzgzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5lcnJvcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmVycm9ycy5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBlbWFpbC5lcnJvcnMKICAgIDpzeW5vcHNpczogVGhlIGV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhlIGVtYWlsIHBhY2thZ2UuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2VtYWlsL2Vycm9ycy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIGZvbGxvd2luZyBleGNlcHRpb24gY2xhc3NlcyBhcmUgZGVmaW5lZCBpbiB0aGUgOm1vZDpgZW1haWwuZXJyb3JzYCBtb2R1bGU6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IucnN0CmluZGV4IDQ4ZDQxZTEuLmQ1OTZlZDggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLnJzdApAQCAtNCw2ICs0LDkgQEAKIC4uIG1vZHVsZTo6IGVtYWlsLmdlbmVyYXRvcgogICAgOnN5bm9wc2lzOiBHZW5lcmF0ZSBmbGF0IHRleHQgZW1haWwgbWVzc2FnZXMgZnJvbSBhIG1lc3NhZ2Ugc3RydWN0dXJlLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbWFpbC9nZW5lcmF0b3IucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIE9uZSBvZiB0aGUgbW9zdCBjb21tb24gdGFza3MgaXMgdG8gZ2VuZXJhdGUgdGhlIGZsYXQgdGV4dCBvZiB0aGUgZW1haWwgbWVzc2FnZQogcmVwcmVzZW50ZWQgYnkgYSBtZXNzYWdlIG9iamVjdCBzdHJ1Y3R1cmUuICBZb3Ugd2lsbCBuZWVkIHRvIGRvIHRoaXMgaWYgeW91IHdhbnQKQEAgLTQzLDcgKzQ2LDcgQEAKICAgIGZvbGxvd2VkIGJ5IGEgc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4gIFRoaXMgaXMgdGhlIG9ubHkgZ3VhcmFudGVlZAogICAgcG9ydGFibGUgd2F5IHRvIGF2b2lkIGhhdmluZyBzdWNoIGxpbmVzIGJlIG1pc3Rha2VuIGZvciBhIFVuaXggbWFpbGJveCBmb3JtYXQKICAgIGVudmVsb3BlIGhlYWRlciBzZXBhcmF0b3IgKHNlZSBgV0hZIFRIRSBDT05URU5ULUxFTkdUSCBGT1JNQVQgSVMgQkFECi0gICA8aHR0cDovL3d3dy5qd3oub3JnL2RvYy9jb250ZW50LWxlbmd0aC5odG1sPmBfIGZvciBkZXRhaWxzKS4gICptYW5nbGVfZnJvbV8qCisgICA8aHR0cHM6Ly93d3cuand6Lm9yZy9kb2MvY29udGVudC1sZW5ndGguaHRtbD5gXyBmb3IgZGV0YWlscykuICAqbWFuZ2xlX2Zyb21fKgogICAgZGVmYXVsdHMgdG8gYGBUcnVlYGAsIGJ1dCB5b3UgbWlnaHQgd2FudCB0byBzZXQgdGhpcyB0byBgYEZhbHNlYGAgaWYgeW91IGFyZSBub3QKICAgIHdyaXRpbmcgVW5peCBtYWlsYm94IGZvcm1hdCBmaWxlcy4KIApAQCAtMTIzLDcgKzEyNiw3IEBACiAgICBpLmUuIGBgRnJvbWBgIGZvbGxvd2VkIGJ5IGEgc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4gIFRoaXMgaXMgdGhlCiAgICBvbmx5IGd1YXJhbnRlZWQgcG9ydGFibGUgd2F5IHRvIGF2b2lkIGhhdmluZyBzdWNoIGxpbmVzIGJlIG1pc3Rha2VuIGZvciBhCiAgICBVbml4IG1haWxib3ggZm9ybWF0IGVudmVsb3BlIGhlYWRlciBzZXBhcmF0b3IgKHNlZSBgV0hZIFRIRSBDT05URU5ULUxFTkdUSAotICAgRk9STUFUIElTIEJBRCA8aHR0cDovL3d3dy5qd3oub3JnL2RvYy9jb250ZW50LWxlbmd0aC5odG1sPmBfIGZvciBkZXRhaWxzKS4KKyAgIEZPUk1BVCBJUyBCQUQgPGh0dHBzOi8vd3d3Lmp3ei5vcmcvZG9jL2NvbnRlbnQtbGVuZ3RoLmh0bWw+YF8gZm9yIGRldGFpbHMpLgogICAgKm1hbmdsZV9mcm9tXyogZGVmYXVsdHMgdG8gYGBUcnVlYGAsIGJ1dCB5b3UgbWlnaHQgd2FudCB0byBzZXQgdGhpcyB0bwogICAgYGBGYWxzZWBgIGlmIHlvdSBhcmUgbm90IHdyaXRpbmcgVW5peCBtYWlsYm94IGZvcm1hdCBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuaGVhZGVyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmhlYWRlci5yc3QKaW5kZXggMzQ2ZDIzZi4uZTk0ODM3YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwuaGVhZGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5oZWFkZXIucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogZW1haWwuaGVhZGVyCiAgICA6c3lub3BzaXM6IFJlcHJlc2VudGluZyBub24tQVNDSUkgaGVhZGVycwogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbWFpbC9oZWFkZXIucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIDpyZmM6YDI4MjJgIGlzIHRoZSBiYXNlIHN0YW5kYXJkIHRoYXQgZGVzY3JpYmVzIHRoZSBmb3JtYXQgb2YgZW1haWwgbWVzc2FnZXMuCiBJdCBkZXJpdmVzIGZyb20gdGhlIG9sZGVyIDpyZmM6YDgyMmAgc3RhbmRhcmQgd2hpY2ggY2FtZSBpbnRvIHdpZGVzcHJlYWQgdXNlIGF0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5oZWFkZXJyZWdpc3RyeS5yc3QKaW5kZXggZGIzYWFkZS4uMDcwN2JkOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwuaGVhZGVycmVnaXN0cnkucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmhlYWRlcnJlZ2lzdHJ5LnJzdApAQCAtNyw2ICs3LDEwIEBACiAuLiBtb2R1bGVhdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisgICBhcyBhIDp0ZXJtOmBwcm92aXNpb25hbCBtb2R1bGUgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4KKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZW1haWwvaGVhZGVycmVnaXN0cnkucHlgCiAKIC4uIG5vdGU6OgogCkBAIC0xNSw4ICsxOSw3IEBACiAgICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIG1vZHVsZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAogICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCiAKLS4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgYXMgYSA6dGVybTpgcHJvdmlzaW9uYWwgbW9kdWxlIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuCistLS0tLS0tLS0tLS0tLQogCiBIZWFkZXJzIGFyZSByZXByZXNlbnRlZCBieSBjdXN0b21pemVkIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmBzdHJgLiAgVGhlCiBwYXJ0aWN1bGFyIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGEgZ2l2ZW4gaGVhZGVyIGlzIGRldGVybWluZWQgYnkgdGhlCkBAIC0xNzEsNyArMTc0LDcgQEAKICAgIDpjbGFzczpgfmRhdGV0aW1lLmRhdGV0aW1lYCBpbnN0YW5jZS4gIFRoaXMgbWVhbnMsIGZvciBleGFtcGxlLCB0aGF0CiAgICB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdmFsaWQgYW5kIGRvZXMgd2hhdCBvbmUgd291bGQgZXhwZWN0OjoKIAotICAgICAgIG1zZ1snRGF0ZSddICA9IGRhdGV0aW1lKDIwMTEsIDcsIDE1LCAyMSkKKyAgICAgICBtc2dbJ0RhdGUnXSA9IGRhdGV0aW1lKDIwMTEsIDcsIDE1LCAyMSkKIAogICAgQmVjYXVzZSB0aGlzIGlzIGEgbmFpdmUgYGBkYXRldGltZWBgIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBVVEMKICAgIHRpbWVzdGFtcCwgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgd2lsbCBoYXZlIGEgdGltZXpvbmUgb2YgYGAtMDAwMGBgLiAgTXVjaApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuaXRlcmF0b3JzLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLml0ZXJhdG9ycy5yc3QKaW5kZXggZjkyZjQ2MC4uZjNlOWUxOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwuaXRlcmF0b3JzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5pdGVyYXRvcnMucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogZW1haWwuaXRlcmF0b3JzCiAgICA6c3lub3BzaXM6IEl0ZXJhdGUgb3ZlciBhICBtZXNzYWdlIG9iamVjdCB0cmVlLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbWFpbC9pdGVyYXRvcnMucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIEl0ZXJhdGluZyBvdmVyIGEgbWVzc2FnZSBvYmplY3QgdHJlZSBpcyBmYWlybHkgZWFzeSB3aXRoIHRoZQogOm1ldGg6YE1lc3NhZ2Uud2FsayA8ZW1haWwubWVzc2FnZS5NZXNzYWdlLndhbGs+YCBtZXRob2QuICBUaGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKaW5kZXggYWVlYTk0Mi4uOTFhNjk0ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBlbWFpbC5tZXNzYWdlCiAgICA6c3lub3BzaXM6IFRoZSBiYXNlIGNsYXNzIHJlcHJlc2VudGluZyBlbWFpbCBtZXNzYWdlcy4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZW1haWwvbWVzc2FnZS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIGNlbnRyYWwgY2xhc3MgaW4gdGhlIDptb2Q6YGVtYWlsYCBwYWNrYWdlIGlzIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGNsYXNzLAogaW1wb3J0ZWQgZnJvbSB0aGUgOm1vZDpgZW1haWwubWVzc2FnZWAgbW9kdWxlLiAgSXQgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIHRoZQpAQCAtNTc4LDYgKzU4MSwxNSBAQAogICAgICAgd2lsbCBiZSAqZmFpbG9iaiouCiAKIAorICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnRfZGlzcG9zaXRpb24oKQorCisgICAgICBSZXR1cm4gdGhlIGxvd2VyY2FzZWQgdmFsdWUgKHdpdGhvdXQgcGFyYW1ldGVycykgb2YgdGhlIG1lc3NhZ2UncworICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlciBpZiBpdCBoYXMgb25lLCBvciBgYE5vbmVgYC4gIFRoZQorICAgICAgcG9zc2libGUgdmFsdWVzIGZvciB0aGlzIG1ldGhvZCBhcmUgKmlubGluZSosICphdHRhY2htZW50KiBvciBgYE5vbmVgYAorICAgICAgaWYgdGhlIG1lc3NhZ2UgZm9sbG93cyA6cmZjOmAyMTgzYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKICAgIC4uIG1ldGhvZDo6IHdhbGsoKQogCiAgICAgICBUaGUgOm1ldGg6YHdhbGtgIG1ldGhvZCBpcyBhbiBhbGwtcHVycG9zZSBnZW5lcmF0b3Igd2hpY2ggY2FuIGJlIHVzZWQgdG8KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLm1pbWUucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwubWltZS5yc3QKaW5kZXggMWQ3MDIyNS4uODI5N2RlYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwubWltZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwubWltZS5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBlbWFpbC5taW1lCiAgICA6c3lub3BzaXM6IEJ1aWxkIE1JTUUgbWVzc2FnZXMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2VtYWlsL21pbWUvYAorCistLS0tLS0tLS0tLS0tLQogCiBPcmRpbmFyaWx5LCB5b3UgZ2V0IGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlIGJ5IHBhc3NpbmcgYSBmaWxlIG9yIHNvbWUgdGV4dCB0bwogYSBwYXJzZXIsIHdoaWNoIHBhcnNlcyB0aGUgdGV4dCBhbmQgcmV0dXJucyB0aGUgcm9vdCBtZXNzYWdlIG9iamVjdC4gIEhvd2V2ZXIKQEAgLTE5NSw3ICsxOTgsOCBAQAogICAgc2V0IG9mIHRoZSB0ZXh0IGFuZCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlCiAgICA6Y2xhc3M6YH5lbWFpbC5taW1lLm5vbm11bHRpcGFydC5NSU1FTm9uTXVsdGlwYXJ0YCBjb25zdHJ1Y3RvcjsgaXQgZGVmYXVsdHMKICAgIHRvIGBgdXMtYXNjaWlgYCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgYGBhc2NpaWBgIGNvZGUgcG9pbnRzLCBhbmQKLSAgIGBgdXRmLThgYCBvdGhlcndpc2UuCisgICBgYHV0Zi04YGAgb3RoZXJ3aXNlLiAgVGhlICpfY2hhcnNldCogcGFyYW1ldGVyIGFjY2VwdHMgZWl0aGVyIGEgc3RyaW5nIG9yIGEKKyAgIDpjbGFzczpgfmVtYWlsLmNoYXJzZXQuQ2hhcnNldGAgaW5zdGFuY2UuCiAKICAgIFVubGVzcyB0aGUgKl9jaGFyc2V0KiBhcmd1bWVudCBpcyBleHBsaWNpdGx5IHNldCB0byBgYE5vbmVgYCwgdGhlCiAgICBNSU1FVGV4dCBvYmplY3QgY3JlYXRlZCB3aWxsIGhhdmUgYm90aCBhIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlcgpAQCAtMjA2LDMgKzIxMCw2IEBACiAgICBgYENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdgYCBoZWFkZXIsIGFmdGVyIHdoaWNoIGEgYGBzZXRfcGF5bG9hZGBgIGNhbGwKICAgIHdpbGwgYXV0b21hdGljYWxseSBlbmNvZGUgdGhlIG5ldyBwYXlsb2FkIChhbmQgYWRkIGEgbmV3CiAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyKS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICpfY2hhcnNldCogYWxzbyBhY2NlcHRzIDpjbGFzczpgfmVtYWlsLmNoYXJzZXQuQ2hhcnNldGAgaW5zdGFuY2VzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnBhcnNlci5yc3QKaW5kZXggMTc3YWRjNi4uNzFiMzM5YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwucGFyc2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5wYXJzZXIucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogZW1haWwucGFyc2VyCiAgICA6c3lub3BzaXM6IFBhcnNlIGZsYXQgdGV4dCBlbWFpbCBtZXNzYWdlcyB0byBwcm9kdWNlIGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbWFpbC9wYXJzZXIucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIE1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZXMgY2FuIGJlIGNyZWF0ZWQgaW4gb25lIG9mIHR3byB3YXlzOiB0aGV5IGNhbiBiZSBjcmVhdGVkCiBmcm9tIHdob2xlIGNsb3RoIGJ5IGluc3RhbnRpYXRpbmcgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3RzIGFuZApAQCAtMjQ3LDcgKzI1MCw3IEBACiAgICBhbmQgKnBvbGljeSogYXJlIGludGVycHJldGVkIGFzIHdpdGggdGhlIDpjbGFzczpgfmVtYWlsLnBhcnNlci5QYXJzZXJgIGNsYXNzCiAgICBjb25zdHJ1Y3Rvci4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFJlbW92ZWQgdGhlICpzdHJpY3QqIGFyZ3VtZW50LiAgQWRkZWQgdGhlICpwb2xpY3kqIGtleXdvcmQuCiAKIC4uIGZ1bmN0aW9uOjogbWVzc2FnZV9mcm9tX2JpbmFyeV9maWxlKGZwLCBfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBcCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdAppbmRleCBkNGUzZmMxLi40N2YzMjEyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKQEAgLTksNiArOSw5IEBACiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbWFpbC9wb2xpY3kucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBlbWFpbGAgcGFja2FnZSdzIHByaW1lIGZvY3VzIGlzIHRoZSBoYW5kbGluZyBvZiBlbWFpbCBtZXNzYWdlcyBhcwogZGVzY3JpYmVkIGJ5IHRoZSB2YXJpb3VzIGVtYWlsIGFuZCBNSU1FIFJGQ3MuICBIb3dldmVyLCB0aGUgZ2VuZXJhbCBmb3JtYXQgb2YKQEAgLTE4Nyw2ICsxOTAsMTggQEAKICAgICAgIDpjb25zdDpgRmFsc2VgICh0aGUgZGVmYXVsdCksIGRlZmVjdHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCiAgICAgICA6bWV0aDpgcmVnaXN0ZXJfZGVmZWN0YCBtZXRob2QuCiAKKworCisgICAuLiBhdHRyaWJ1dGU6OiBtYW5nbGVfZnJvbVxfCisKKyAgICAgIElmIDpjb25zdDpgVHJ1ZWAsIGxpbmVzIHN0YXJ0aW5nIHdpdGggKiJGcm9tICIqIGluIHRoZSBib2R5IGFyZQorICAgICAgZXNjYXBlZCBieSBwdXR0aW5nIGEgYGA+YGAgaW4gZnJvbnQgb2YgdGhlbS4gVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB3aGVuCisgICAgICB0aGUgbWVzc2FnZSBpcyBiZWluZyBzZXJpYWxpemVkIGJ5IGEgZ2VuZXJhdG9yLgorICAgICAgRGVmYXVsdDogOmNvbnN0OmBGYWxzZWAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorICAgICAgICAgVGhlICptYW5nbGVfZnJvbV8qIHBhcmFtZXRlci4KKwogICAgVGhlIGZvbGxvd2luZyA6Y2xhc3M6YFBvbGljeWAgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBjb2RlIHVzaW5nCiAgICB0aGUgZW1haWwgbGlicmFyeSB0byBjcmVhdGUgcG9saWN5IGluc3RhbmNlcyB3aXRoIGN1c3RvbSBzZXR0aW5nczoKIApAQCAtMzE5LDYgKzMzNCwxMyBAQAogICAgOmNvbnN0OmBjb21wYXQzMmAsIHRoYXQgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBwb2xpY3kuICBUaHVzIHRoZSBkZWZhdWx0CiAgICBiZWhhdmlvciBvZiB0aGUgZW1haWwgcGFja2FnZSBpcyB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMi4KIAorICAgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGhhdmUgdmFsdWVzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIHRoZQorICAgOmNsYXNzOmBQb2xpY3lgIGRlZmF1bHQ6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IG1hbmdsZV9mcm9tXworCisgICAgICBUaGUgZGVmYXVsdCBpcyBgYFRydWVgYC4KKwogICAgVGhlIGNsYXNzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZQogICAgYWJzdHJhY3QgbWV0aG9kcyBvZiA6Y2xhc3M6YFBvbGljeWA6CiAKQEAgLTM1Niw2ICszNzgsMTQgQEAKICAgICAgIGxpbmUgYnJlYWtzIGFuZCBhbnkgKFJGQyBpbnZhbGlkKSBiaW5hcnkgZGF0YSBpdCBtYXkgY29udGFpbi4KIAogCitBbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YENvbXBhdDMyYCBpcyBwcm92aWRlZCBhcyBhIG1vZHVsZSBjb25zdGFudDoKKworLi4gZGF0YTo6IGNvbXBhdDMyCisKKyAgIEFuIGluc3RhbmNlIG9mIDpjbGFzczpgQ29tcGF0MzJgLCBwcm92aWRpbmcgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKKyAgIGJlaGF2aW9yIG9mIHRoZSBlbWFpbCBwYWNrYWdlIGluIFB5dGhvbiAzLjIuCisKKwogLi4gbm90ZTo6CiAKICAgIFRoZSBkb2N1bWVudGF0aW9uIGJlbG93IGRlc2NyaWJlcyBuZXcgcG9saWNpZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlCkBAIC0zNzgsNiArNDA4LDE0IEBACiAgICBJbiBhZGRpdGlvbiB0byB0aGUgc2V0dGFibGUgYXR0cmlidXRlcyBsaXN0ZWQgYWJvdmUgdGhhdCBhcHBseSB0byBhbGwKICAgIHBvbGljaWVzLCB0aGlzIHBvbGljeSBhZGRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBhdHRyaWJ1dGVzOgogCisgICAuLiBhdHRyaWJ1dGU6OiB1dGY4CisKKyAgICAgIElmIGBgRmFsc2VgYCwgZm9sbG93IDpyZmM6YDUzMjJgLCBzdXBwb3J0aW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluCisgICAgICBoZWFkZXJzIGJ5IGVuY29kaW5nIHRoZW0gYXMgImVuY29kZWQgd29yZHMiLiAgSWYgYGBUcnVlYGAsIGZvbGxvdworICAgICAgOnJmYzpgNjUzMmAgYW5kIHVzZSBgYHV0Zi04YGAgZW5jb2RpbmcgZm9yIGhlYWRlcnMuICBNZXNzYWdlcworICAgICAgZm9ybWF0dGVkIGluIHRoaXMgd2F5IG1heSBiZSBwYXNzZWQgdG8gU01UUCBzZXJ2ZXJzIHRoYXQgc3VwcG9ydAorICAgICAgdGhlIGBgU01UUFVURjhgYCBleHRlbnNpb24gKDpyZmM6YDY1MzFgKS4KKwogICAgLi4gYXR0cmlidXRlOjogcmVmb2xkX3NvdXJjZQogCiAgICAgICBJZiB0aGUgdmFsdWUgZm9yIGEgaGVhZGVyIGluIHRoZSBgYE1lc3NhZ2VgYCBvYmplY3Qgb3JpZ2luYXRlZCBmcm9tIGEKQEAgLTQ5OSw2ICs1MzcsMTQgQEAKICAgIExpa2UgYGBkZWZhdWx0YGAsIGJ1dCB3aXRoIGBgbGluZXNlcGBgIHNldCB0byBgYFxyXG5gYCwgd2hpY2ggaXMgUkZDCiAgICBjb21wbGlhbnQuCiAKKy4uIGRhdGE6OiBTTVRQVVRGOAorCisgICBUaGUgc2FtZSBhcyBgYFNNVFBgYCBleGNlcHQgdGhhdCA6YXR0cjpgfkVtYWlsUG9saWN5LnV0ZjhgIGlzIGBgVHJ1ZWBgLgorICAgVXNlZnVsIGZvciBzZXJpYWxpemluZyBtZXNzYWdlcyB0byBhIG1lc3NhZ2Ugc3RvcmUgd2l0aG91dCB1c2luZyBlbmNvZGVkCisgICB3b3JkcyBpbiB0aGUgaGVhZGVycy4gIFNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIFNNVFAgdHJhc21pc3Npb24gaWYgdGhlCisgICBzZW5kZXIgb3IgcmVjaXBpZW50IGFkZHJlc3NlcyBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzICh0aGUKKyAgIDptZXRoOmBzbXRwbGliLlNNVFAuc2VuZF9tZXNzYWdlYCBtZXRob2QgaGFuZGxlcyB0aGlzIGF1dG9tYXRpY2FsbHkpLgorCiAuLiBkYXRhOjogSFRUUAogCiAgICBTdWl0YWJsZSBmb3Igc2VyaWFsaXppbmcgaGVhZGVycyB3aXRoIGZvciB1c2UgaW4gSFRUUCB0cmFmZmljLiAgTGlrZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucnN0CmluZGV4IDk1YzBhMmYuLmU4YmIwMmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKQEAgLTQsMTAgKzQsMTQgQEAKIC4uIG1vZHVsZTo6IGVtYWlsCiAgICA6c3lub3BzaXM6IFBhY2thZ2Ugc3VwcG9ydGluZyB0aGUgcGFyc2luZywgbWFuaXB1bGF0aW5nLCBhbmQgZ2VuZXJhdGluZwogICAgICAgICAgICAgICBlbWFpbCBtZXNzYWdlcywgaW5jbHVkaW5nIE1JTUUgZG9jdW1lbnRzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBCYXJyeSBBLiBXYXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogQmFycnkgQS4gV2Fyc2F3IDxiYXJyeUBweXRob24ub3JnPgogLi4gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZW1haWwvX19pbml0X18ucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBlbWFpbGAgcGFja2FnZSBpcyBhIGxpYnJhcnkgZm9yIG1hbmFnaW5nIGVtYWlsIG1lc3NhZ2VzLCBpbmNsdWRpbmcKIE1JTUUgYW5kIG90aGVyIDpyZmM6YDI4MjJgXCAtYmFzZWQgbWVzc2FnZSBkb2N1bWVudHMuICBJdCBpcyBzcGVjaWZpY2FsbHkgKm5vdCoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKaW5kZXggMjE5ZTI4NC4uNWNmZjc0NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBlbWFpbC51dGlscwogICAgOnN5bm9wc2lzOiBNaXNjZWxsYW5lb3VzIGVtYWlsIHBhY2thZ2UgdXRpbGl0aWVzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbWFpbC91dGlscy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlcmUgYXJlIHNldmVyYWwgdXNlZnVsIHV0aWxpdGllcyBwcm92aWRlZCBpbiB0aGUgOm1vZDpgZW1haWwudXRpbHNgIG1vZHVsZToKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdCBiL0RvYy9saWJyYXJ5L2Vuc3VyZXBpcC5yc3QKaW5kZXggZDU4OWYxYy4uNmFlZWFiYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbnN1cmVwaXAucnN0CkBAIC03LDYgKzcsOCBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGVuc3VyZXBpcGAgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciBib290c3RyYXBwaW5nIHRoZSBgYHBpcGBgCiBpbnN0YWxsZXIgaW50byBhbiBleGlzdGluZyBQeXRob24gaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoaXMKIGJvb3RzdHJhcHBpbmcgYXBwcm9hY2ggcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBgYHBpcGBgIGlzIGFuIGluZGVwZW5kZW50CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnVtLnJzdCBiL0RvYy9saWJyYXJ5L2VudW0ucnN0CmluZGV4IDFjNzZlODcuLmEzZDVhZmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VudW0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VudW0ucnN0CkBAIC0zMTQsMTEgKzMxNCwxMSBAQAogICAgID4+PiBzdHIoTW9vZC5mdW5reSkKICAgICAnbXkgY3VzdG9tIHN0ciEgMScKIAotVGhlIHJ1bGVzIGZvciB3aGF0IGlzIGFsbG93ZWQgYXJlIGFzIGZvbGxvd3M6IF9zdW5kZXJfIG5hbWVzIChzdGFydGluZyBhbmQKLWVuZGluZyB3aXRoIGEgc2luZ2xlIHVuZGVyc2NvcmUpIGFyZSByZXNlcnZlZCBieSBlbnVtIGFuZCBjYW5ub3QgYmUgdXNlZDsKLWFsbCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgd2l0aGluIGFuIGVudW1lcmF0aW9uIHdpbGwgYmVjb21lIG1lbWJlcnMgb2YgdGhpcwotZW51bWVyYXRpb24sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAqX19kdW5kZXJfXyogbmFtZXMgYW5kIGRlc2NyaXB0b3JzIChtZXRob2RzCi1hcmUgYWxzbyBkZXNjcmlwdG9ycykuCitUaGUgcnVsZXMgZm9yIHdoYXQgaXMgYWxsb3dlZCBhcmUgYXMgZm9sbG93czogbmFtZXMgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGgKK2Egc2luZ2xlIHVuZGVyc2NvcmUgYXJlIHJlc2VydmVkIGJ5IGVudW0gYW5kIGNhbm5vdCBiZSB1c2VkOyBhbGwgb3RoZXIKK2F0dHJpYnV0ZXMgZGVmaW5lZCB3aXRoaW4gYW4gZW51bWVyYXRpb24gd2lsbCBiZWNvbWUgbWVtYmVycyBvZiB0aGlzCitlbnVtZXJhdGlvbiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHNwZWNpYWwgbWV0aG9kcyAoOm1ldGg6YF9fc3RyX19gLAorOm1ldGg6YF9fYWRkX19gLCBldGMuKSBhbmQgZGVzY3JpcHRvcnMgKG1ldGhvZHMgYXJlIGFsc28gZGVzY3JpcHRvcnMpLgogCiBOb3RlOiAgaWYgeW91ciBlbnVtZXJhdGlvbiBkZWZpbmVzIDptZXRoOmBfX25ld19fYCBhbmQvb3IgOm1ldGg6YF9faW5pdF9fYCB0aGVuCiB3aGF0ZXZlciB2YWx1ZShzKSB3ZXJlIGdpdmVuIHRvIHRoZSBlbnVtIG1lbWJlciB3aWxsIGJlIHBhc3NlZCBpbnRvIHRob3NlCkBAIC00MDAsNyArNDAwLDggQEAKIHdoaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZyBvZiBuYW1lcywgYSBzZXF1ZW5jZSBvZiBuYW1lcywgYSBzZXF1ZW5jZSBvZgogMi10dXBsZXMgd2l0aCBrZXkvdmFsdWUgcGFpcnMsIG9yIGEgbWFwcGluZyAoZS5nLiBkaWN0aW9uYXJ5KSBvZiBuYW1lcyB0bwogdmFsdWVzLiAgVGhlIGxhc3QgdHdvIG9wdGlvbnMgZW5hYmxlIGFzc2lnbmluZyBhcmJpdHJhcnkgdmFsdWVzIHRvCi1lbnVtZXJhdGlvbnM7IHRoZSBvdGhlcnMgYXV0by1hc3NpZ24gaW5jcmVhc2luZyBpbnRlZ2VycyBzdGFydGluZyB3aXRoIDEuICBBCitlbnVtZXJhdGlvbnM7IHRoZSBvdGhlcnMgYXV0by1hc3NpZ24gaW5jcmVhc2luZyBpbnRlZ2VycyBzdGFydGluZyB3aXRoIDEgKHVzZQordGhlIGBgc3RhcnRgYCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBzdGFydGluZyB2YWx1ZSkuICBBCiBuZXcgY2xhc3MgZGVyaXZlZCBmcm9tIDpjbGFzczpgRW51bWAgaXMgcmV0dXJuZWQuICBJbiBvdGhlciB3b3JkcywgdGhlIGFib3ZlCiBhc3NpZ25tZW50IHRvIDpjbGFzczpgQW5pbWFsYCBpcyBlcXVpdmFsZW50IHRvOjoKIApAQCAtNDMwLDcgKzQzMSw3IEBACiAgICAgdGhlIHNvdXJjZSwgcGlja2xpbmcgd2lsbCBiZSBkaXNhYmxlZC4KIAogVGhlIG5ldyBwaWNrbGUgcHJvdG9jb2wgNCBhbHNvLCBpbiBzb21lIGNpcmN1bXN0YW5jZXMsIHJlbGllcyBvbgotOmF0dHI6YF9fcXVhbG5hbWVfX2AgYmVpbmcgc2V0IHRvIHRoZSBsb2NhdGlvbiB3aGVyZSBwaWNrbGUgd2lsbCBiZSBhYmxlCis6YXR0cjpgfmRlZmluaXRpb24uX19xdWFsbmFtZV9fYCBiZWluZyBzZXQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHBpY2tsZSB3aWxsIGJlIGFibGUKIHRvIGZpbmQgdGhlIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjbGFzcyB3YXMgbWFkZSBhdmFpbGFibGUgaW4gY2xhc3MKIFNvbWVEYXRhIGluIHRoZSBnbG9iYWwgc2NvcGU6OgogCkBAIC00MzgsMTIgKzQzOSwxMiBAQAogCiBUaGUgY29tcGxldGUgc2lnbmF0dXJlIGlzOjoKIAotICAgIEVudW0odmFsdWU9J05ld0VudW1OYW1lJywgbmFtZXM9PC4uLj4sICosIG1vZHVsZT0nLi4uJywgcXVhbG5hbWU9Jy4uLicsIHR5cGU9PG1peGVkLWluIGNsYXNzPikKKyAgICBFbnVtKHZhbHVlPSdOZXdFbnVtTmFtZScsIG5hbWVzPTwuLi4+LCAqLCBtb2R1bGU9Jy4uLicsIHF1YWxuYW1lPScuLi4nLCB0eXBlPTxtaXhlZC1pbiBjbGFzcz4sIHN0YXJ0PTEpCiAKIDp2YWx1ZTogV2hhdCB0aGUgbmV3IEVudW0gY2xhc3Mgd2lsbCByZWNvcmQgYXMgaXRzIG5hbWUuCiAKIDpuYW1lczogVGhlIEVudW0gbWVtYmVycy4gIFRoaXMgY2FuIGJlIGEgd2hpdGVzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nCi0gICh2YWx1ZXMgd2lsbCBzdGFydCBhdCAxKTo6CisgICh2YWx1ZXMgd2lsbCBzdGFydCBhdCAxIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkKTo6CiAKICAgICAncmVkIGdyZWVuIGJsdWUnIHwgJ3JlZCxncmVlbixibHVlJyB8ICdyZWQsIGdyZWVuLCBibHVlJwogCkBAIC00NjUsNiArNDY2LDExIEBACiAKIDp0eXBlOiB0eXBlIHRvIG1peCBpbiB0byBuZXcgRW51bSBjbGFzcy4KIAorOnN0YXJ0OiBudW1iZXIgdG8gc3RhcnQgY291bnRpbmcgYXQgaWYgb25seSBuYW1lcyBhcmUgcGFzc2VkIGluLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgVGhlICpzdGFydCogcGFyYW1ldGVyIHdhcyBhZGRlZC4KKwogCiBEZXJpdmVkIEVudW1lcmF0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU0OSwxMiArNTU1LDEyIEBACiAzLiBXaGVuIGFub3RoZXIgZGF0YSB0eXBlIGlzIG1peGVkIGluLCB0aGUgOmF0dHI6YHZhbHVlYCBhdHRyaWJ1dGUgaXMgKm5vdCB0aGUKICAgIHNhbWUqIGFzIHRoZSBlbnVtIG1lbWJlciBpdHNlbGYsIGFsdGhvdWdoIGl0IGlzIGVxdWl2YWxlbnQgYW5kIHdpbGwgY29tcGFyZQogICAgZXF1YWwuCi00LiAlLXN0eWxlIGZvcm1hdHRpbmc6ICBgJXNgIGFuZCBgJXJgIGNhbGwgOmNsYXNzOmBFbnVtYCdzIDptZXRoOmBfX3N0cl9fYCBhbmQKLSAgIDptZXRoOmBfX3JlcHJfX2AgcmVzcGVjdGl2ZWx5OyBvdGhlciBjb2RlcyAoc3VjaCBhcyBgJWlgIG9yIGAlaGAgZm9yCi0gICBJbnRFbnVtKSB0cmVhdCB0aGUgZW51bSBtZW1iZXIgYXMgaXRzIG1peGVkLWluIHR5cGUuCi01LiA6bWV0aDpgc3RyLl9fZm9ybWF0X19gIChvciA6ZnVuYzpgZm9ybWF0YCkgd2lsbCB1c2UgdGhlIG1peGVkLWluCi0gICB0eXBlJ3MgOm1ldGg6YF9fZm9ybWF0X19gLiAgSWYgdGhlIDpjbGFzczpgRW51bWAncyA6ZnVuYzpgc3RyYCBvcgotICAgOmZ1bmM6YHJlcHJgIGlzIGRlc2lyZWQgdXNlIHRoZSBgIXNgIG9yIGAhcmAgOmNsYXNzOmBzdHJgIGZvcm1hdCBjb2Rlcy4KKzQuICUtc3R5bGUgZm9ybWF0dGluZzogIGAlc2AgYW5kIGAlcmAgY2FsbCB0aGUgOmNsYXNzOmBFbnVtYCBjbGFzcydzCisgICA6bWV0aDpgX19zdHJfX2AgYW5kIDptZXRoOmBfX3JlcHJfX2AgcmVzcGVjdGl2ZWx5OyBvdGhlciBjb2RlcyAoc3VjaCBhcworICAgYCVpYCBvciBgJWhgIGZvciBJbnRFbnVtKSB0cmVhdCB0aGUgZW51bSBtZW1iZXIgYXMgaXRzIG1peGVkLWluIHR5cGUuCis1LiA6bWV0aDpgc3RyLmZvcm1hdGAgKG9yIDpmdW5jOmBmb3JtYXRgKSB3aWxsIHVzZSB0aGUgbWl4ZWQtaW4KKyAgIHR5cGUncyA6bWV0aDpgX19mb3JtYXRfX2AuICBJZiB0aGUgOmNsYXNzOmBFbnVtYCBjbGFzcydzIDpmdW5jOmBzdHJgIG9yCisgICA6ZnVuYzpgcmVwcmAgaXMgZGVzaXJlZCwgdXNlIHRoZSBgIXNgIG9yIGAhcmAgZm9ybWF0IGNvZGVzLgogCiAKIEludGVyZXN0aW5nIGV4YW1wbGVzCkBAIC03MjQsMTggKzczMCwyNCBAQAogRmluZXIgUG9pbnRzCiBeXl5eXl5eXl5eXl4KIAotRW51bSBtZW1iZXJzIGFyZSBpbnN0YW5jZXMgb2YgYW4gRW51bSBjbGFzcywgYW5kIGV2ZW4gdGhvdWdoIHRoZXkgYXJlCi1hY2Nlc3NpYmxlIGFzIGBFbnVtQ2xhc3MubWVtYmVyYCwgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbQotdGhlIG1lbWJlcjo6Cis6Y2xhc3M6YEVudW1gIG1lbWJlcnMgYXJlIGluc3RhbmNlcyBvZiBhbiA6Y2xhc3M6YEVudW1gIGNsYXNzLCBhbmQgZXZlbgordGhvdWdoIHRoZXkgYXJlIGFjY2Vzc2libGUgYXMgYEVudW1DbGFzcy5tZW1iZXJgLCB0aGV5IHNob3VsZCBub3QgYmUgYWNjZXNzZWQKK2RpcmVjdGx5IGZyb20gdGhlIG1lbWJlciBhcyB0aGF0IGxvb2t1cCBtYXkgZmFpbCBvciwgd29yc2UsIHJldHVybiBzb21ldGhpbmcKK2Jlc2lkZXMgdGhlIDpjbGFzczpgRW51bWAgbWVtYmVyIHlvdSBsb29raW5nIGZvcjo6CiAKLSAgICA+Pj4gQ29sb3IucmVkCi0gICAgPENvbG9yLnJlZDogMT4KLSAgICA+Pj4gQ29sb3IucmVkLmJsdWUKLSAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgPj4+IGNsYXNzIEZpZWxkVHlwZXMoRW51bSk6CisgICAgLi4uICAgICBuYW1lID0gMAorICAgIC4uLiAgICAgdmFsdWUgPSAxCisgICAgLi4uICAgICBzaXplID0gMgogICAgIC4uLgotICAgIEF0dHJpYnV0ZUVycm9yOiAnQ29sb3InIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdibHVlJworICAgID4+PiBGaWVsZFR5cGVzLnZhbHVlLnNpemUKKyAgICA8RmllbGRUeXBlcy5zaXplOiAyPgorICAgID4+PiBGaWVsZFR5cGVzLnNpemUudmFsdWUKKyAgICAyCiAKLUxpa2V3aXNlLCB0aGUgOmF0dHI6YF9fbWVtYmVyc19fYCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY2xhc3MuCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorCitUaGUgOmF0dHI6YF9fbWVtYmVyc19fYCBhdHRyaWJ1dGUgaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNsYXNzLgogCiBJZiB5b3UgZ2l2ZSB5b3VyIDpjbGFzczpgRW51bWAgc3ViY2xhc3MgZXh0cmEgbWV0aG9kcywgbGlrZSB0aGUgYFBsYW5ldGBfCiBjbGFzcyBhYm92ZSwgdGhvc2UgbWV0aG9kcyB3aWxsIHNob3cgdXAgaW4gYSA6ZnVuYzpgZGlyYCBvZiB0aGUgbWVtYmVyLApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZXJybm8ucnN0IGIvRG9jL2xpYnJhcnkvZXJybm8ucnN0CmluZGV4IGQyMTYzYjYuLjFjYmQ1MWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Vycm5vLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lcnJuby5yc3QKQEAgLTQsNiArNCw3IEBACiAuLiBtb2R1bGU6OiBlcnJubwogICAgOnN5bm9wc2lzOiBTdGFuZGFyZCBlcnJubyBzeXN0ZW0gc3ltYm9scy4KIAorLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBtYWtlcyBhdmFpbGFibGUgc3RhbmRhcmQgYGBlcnJub2BgIHN5c3RlbSBzeW1ib2xzLiBUaGUgdmFsdWUgb2YgZWFjaAogc3ltYm9sIGlzIHRoZSBjb3JyZXNwb25kaW5nIGludGVnZXIgdmFsdWUuIFRoZSBuYW1lcyBhbmQgZGVzY3JpcHRpb25zIGFyZQpAQCAtNDEsNyArNDIsMTAgQEAKIAogLi4gZGF0YTo6IEVJTlRSCiAKLSAgIEludGVycnVwdGVkIHN5c3RlbSBjYWxsCisgICBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbC4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICBUaGlzIGVycm9yIGlzIG1hcHBlZCB0byB0aGUgZXhjZXB0aW9uIDpleGM6YEludGVycnVwdGVkRXJyb3JgLgogCiAKIC4uIGRhdGE6OiBFSU8KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKaW5kZXggZWYzOWU2Yy4uNWE3MTkzMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKQEAgLTE2Miw3ICsxNjIsOCBAQAogCiAuLiBleGNlcHRpb246OiBHZW5lcmF0b3JFeGl0CiAKLSAgIFJhaXNlZCB3aGVuIGEgOnRlcm06YGdlbmVyYXRvcmBcJ3MgOm1ldGg6YGNsb3NlYCBtZXRob2QgaXMgY2FsbGVkLiAgSXQKKyAgIFJhaXNlZCB3aGVuIGEgOnRlcm06YGdlbmVyYXRvcmAgb3IgOnRlcm06YGNvcm91dGluZWAgaXMgY2xvc2VkOworICAgc2VlIDptZXRoOmBnZW5lcmF0b3IuY2xvc2VgIGFuZCA6bWV0aDpgY29yb3V0aW5lLmNsb3NlYC4gIEl0CiAgICBkaXJlY3RseSBpbmhlcml0cyBmcm9tIDpleGM6YEJhc2VFeGNlcHRpb25gIGluc3RlYWQgb2YgOmV4YzpgRXhjZXB0aW9uYCBzaW5jZQogICAgaXQgaXMgdGVjaG5pY2FsbHkgbm90IGFuIGVycm9yLgogCkBAIC0yODcsNyArMjg4LDcgQEAKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIDpleGM6YEVudmlyb25tZW50RXJyb3JgLCA6ZXhjOmBJT0Vycm9yYCwgOmV4YzpgV2luZG93c0Vycm9yYCwKLSAgICAgIDpleGM6YFZNU0Vycm9yYCwgOmV4Yzpgc29ja2V0LmVycm9yYCwgOmV4Yzpgc2VsZWN0LmVycm9yYCBhbmQKKyAgICAgIDpleGM6YHNvY2tldC5lcnJvcmAsIDpleGM6YHNlbGVjdC5lcnJvcmAgYW5kCiAgICAgICA6ZXhjOmBtbWFwLmVycm9yYCBoYXZlIGJlZW4gbWVyZ2VkIGludG8gOmV4YzpgT1NFcnJvcmAsIGFuZCB0aGUKICAgICAgIGNvbnN0cnVjdG9yIG1heSByZXR1cm4gYSBzdWJjbGFzcy4KIApAQCAtMzA4LDYgKzMwOSwxNiBAQAogICAgaGFuZGxpbmcgaW4gQywgbW9zdCBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIGFyZSBub3QgY2hlY2tlZC4KIAogCisuLiBleGNlcHRpb246OiBSZWN1cnNpb25FcnJvcgorCisgICBUaGlzIGV4Y2VwdGlvbiBpcyBkZXJpdmVkIGZyb20gOmV4YzpgUnVudGltZUVycm9yYC4gIEl0IGlzIHJhaXNlZCB3aGVuIHRoZQorICAgaW50ZXJwcmV0ZXIgZGV0ZWN0cyB0aGF0IHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCAoc2VlCisgICA6ZnVuYzpgc3lzLmdldHJlY3Vyc2lvbmxpbWl0YCkgaXMgZXhjZWVkZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorICAgICAgUHJldmlvdXNseSwgYSBwbGFpbiA6ZXhjOmBSdW50aW1lRXJyb3JgIHdhcyByYWlzZWQuCisKKwogLi4gZXhjZXB0aW9uOjogUmVmZXJlbmNlRXJyb3IKIAogICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYSB3ZWFrIHJlZmVyZW5jZSBwcm94eSwgY3JlYXRlZCBieSB0aGUKQEAgLTMzMywxNCArMzQ0LDMwIEBACiAgICBnaXZlbiBhcyBhbiBhcmd1bWVudCB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZXhjZXB0aW9uLCBhbmQgZGVmYXVsdHMKICAgIHRvIDpjb25zdDpgTm9uZWAuCiAKLSAgIFdoZW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24gcmV0dXJucywgYSBuZXcgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgaW5zdGFuY2UgaXMKKyAgIFdoZW4gYSA6dGVybTpgZ2VuZXJhdG9yYCBvciA6dGVybTpgY29yb3V0aW5lYCBmdW5jdGlvbgorICAgcmV0dXJucywgYSBuZXcgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgaW5zdGFuY2UgaXMKICAgIHJhaXNlZCwgYW5kIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUKICAgIDphdHRyOmB2YWx1ZWAgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgZXhjZXB0aW9uLgogCisgICBJZiBhIGdlbmVyYXRvciBmdW5jdGlvbiBkZWZpbmVkIGluIHRoZSBwcmVzZW5jZSBvZiBhIGBgZnJvbSBfX2Z1dHVyZV9fCisgICBpbXBvcnQgZ2VuZXJhdG9yX3N0b3BgYCBkaXJlY3RpdmUgcmFpc2VzIDpleGM6YFN0b3BJdGVyYXRpb25gLCBpdCB3aWxsIGJlCisgICBjb252ZXJ0ZWQgaW50byBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgKHJldGFpbmluZyB0aGUgOmV4YzpgU3RvcEl0ZXJhdGlvbmAKKyAgIGFzIHRoZSBuZXcgZXhjZXB0aW9uJ3MgY2F1c2UpLgorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgYGB2YWx1ZWBgIGF0dHJpYnV0ZSBhbmQgdGhlIGFiaWxpdHkgZm9yIGdlbmVyYXRvciBmdW5jdGlvbnMgdG8KICAgICAgIHVzZSBpdCB0byByZXR1cm4gYSB2YWx1ZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEludHJvZHVjZWQgdGhlIFJ1bnRpbWVFcnJvciB0cmFuc2Zvcm1hdGlvbi4KKworLi4gZXhjZXB0aW9uOjogU3RvcEFzeW5jSXRlcmF0aW9uCisKKyAgIE11c3QgYmUgcmFpc2VkIGJ5IDptZXRoOmBfX2FuZXh0X19gIG1ldGhvZCBvZiBhbgorICAgOnRlcm06YGFzeW5jaHJvbm91cyBpdGVyYXRvcmAgb2JqZWN0IHRvIHN0b3AgdGhlIGl0ZXJhdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIC4uIGV4Y2VwdGlvbjo6IFN5bnRheEVycm9yCiAKICAgIFJhaXNlZCB3aGVuIHRoZSBwYXJzZXIgZW5jb3VudGVycyBhIHN5bnRheCBlcnJvci4gIFRoaXMgbWF5IG9jY3VyIGluIGFuCkBAIC01NjMsNyArNTkwLDEyIEBACiAuLiBleGNlcHRpb246OiBJbnRlcnJ1cHRlZEVycm9yCiAKICAgIFJhaXNlZCB3aGVuIGEgc3lzdGVtIGNhbGwgaXMgaW50ZXJydXB0ZWQgYnkgYW4gaW5jb21pbmcgc2lnbmFsLgotICAgQ29ycmVzcG9uZHMgdG8gOmM6ZGF0YTpgZXJybm9gIGBgRUlOVFJgYC4KKyAgIENvcnJlc3BvbmRzIHRvIDpjOmRhdGE6YGVycm5vYCA6cHk6ZGF0YTpgfmVycm5vLkVJTlRSYC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFB5dGhvbiBub3cgcmV0cmllcyBzeXN0ZW0gY2FsbHMgd2hlbiBhIHN5c2NhbGwgaXMgaW50ZXJydXB0ZWQgYnkgYQorICAgICAgc2lnbmFsLCBleGNlcHQgaWYgdGhlIHNpZ25hbCBoYW5kbGVyIHJhaXNlcyBhbiBleGNlcHRpb24gKHNlZSA6cGVwOmA0NzVgCisgICAgICBmb3IgdGhlIHJhdGlvbmFsZSksIGluc3RlYWQgb2YgcmFpc2luZyA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYC4KIAogLi4gZXhjZXB0aW9uOjogSXNBRGlyZWN0b3J5RXJyb3IKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdCBiL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKaW5kZXggZWIyMDE2YS4uZGVlZGVhMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CkBAIC02LDYgKzYsOCBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLS0tLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBjb250YWlucyBmdW5jdGlvbnMgdG8gZHVtcCBQeXRob24gdHJhY2ViYWNrcyBleHBsaWNpdGx5LCBvbiBhIGZhdWx0LAogYWZ0ZXIgYSB0aW1lb3V0LCBvciBvbiBhIHVzZXIgc2lnbmFsLiBDYWxsIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCB0bwogaW5zdGFsbCBmYXVsdCBoYW5kbGVycyBmb3IgdGhlIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwKQEAgLTQ3LDYgKzQ5LDkgQEAKICAgIER1bXAgdGhlIHRyYWNlYmFja3Mgb2YgYWxsIHRocmVhZHMgaW50byAqZmlsZSouIElmICphbGxfdGhyZWFkcyogaXMKICAgIGBgRmFsc2VgYCwgZHVtcCBvbmx5IHRoZSBjdXJyZW50IHRocmVhZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9yIHRvIHRoaXMgZnVuY3Rpb24uCisKIAogRmF1bHQgaGFuZGxlciBzdGF0ZQogLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTksNiArNjQsMTIgQEAKICAgIHByb2R1Y2UgdHJhY2ViYWNrcyBmb3IgZXZlcnkgcnVubmluZyB0aHJlYWQuIE90aGVyd2lzZSwgZHVtcCBvbmx5IHRoZSBjdXJyZW50CiAgICB0aHJlYWQuCiAKKyAgIFRoZSAqZmlsZSogbXVzdCBiZSBrZXB0IG9wZW4gdW50aWwgdGhlIGZhdWx0IGhhbmRsZXIgaXMgZGlzYWJsZWQ6IHNlZQorICAgOnJlZjpgaXNzdWUgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIDxmYXVsdGhhbmRsZXItZmQ+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9yIHRvIHRoaXMgZnVuY3Rpb24uCisKIC4uIGZ1bmN0aW9uOjogZGlzYWJsZSgpCiAKICAgIERpc2FibGUgdGhlIGZhdWx0IGhhbmRsZXI6IHVuaW5zdGFsbCB0aGUgc2lnbmFsIGhhbmRsZXJzIGluc3RhbGxlZCBieQpAQCAtODIsOSArOTMsMTYgQEAKICAgIGNhbGwgcmVwbGFjZXMgcHJldmlvdXMgcGFyYW1ldGVycyBhbmQgcmVzZXRzIHRoZSB0aW1lb3V0LiBUaGUgdGltZXIgaGFzIGEKICAgIHN1Yi1zZWNvbmQgcmVzb2x1dGlvbi4KIAorICAgVGhlICpmaWxlKiBtdXN0IGJlIGtlcHQgb3BlbiB1bnRpbCB0aGUgdHJhY2ViYWNrIGlzIGR1bXBlZCBvcgorICAgOmZ1bmM6YGNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcmAgaXMgY2FsbGVkOiBzZWUgOnJlZjpgaXNzdWUgd2l0aCBmaWxlCisgICBkZXNjcmlwdG9ycyA8ZmF1bHRoYW5kbGVyLWZkPmAuCisKICAgIFRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSB3YXRjaGRvZyB0aHJlYWQgYW5kIHRoZXJlZm9yZSBpcyBub3QKICAgIGF2YWlsYWJsZSBpZiBQeXRob24gaXMgY29tcGlsZWQgd2l0aCB0aHJlYWRzIGRpc2FibGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgcGFzc2luZyBmaWxlIGRlc2NyaXB0b3IgdG8gdGhpcyBmdW5jdGlvbi4KKwogLi4gZnVuY3Rpb246OiBjYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKQogCiAgICBDYW5jZWwgdGhlIGxhc3QgY2FsbCB0byA6ZnVuYzpgZHVtcF90cmFjZWJhY2tfbGF0ZXJgLgpAQCAtOTksOCArMTE3LDE0IEBACiAgICB0aGUgdHJhY2ViYWNrIG9mIGFsbCB0aHJlYWRzLCBvciBvZiB0aGUgY3VycmVudCB0aHJlYWQgaWYgKmFsbF90aHJlYWRzKiBpcwogICAgYGBGYWxzZWBgLCBpbnRvICpmaWxlKi4gQ2FsbCB0aGUgcHJldmlvdXMgaGFuZGxlciBpZiBjaGFpbiBpcyBgYFRydWVgYC4KIAorICAgVGhlICpmaWxlKiBtdXN0IGJlIGtlcHQgb3BlbiB1bnRpbCB0aGUgc2lnbmFsIGlzIHVucmVnaXN0ZXJlZCBieQorICAgOmZ1bmM6YHVucmVnaXN0ZXJgOiBzZWUgOnJlZjpgaXNzdWUgd2l0aCBmaWxlIGRlc2NyaXB0b3JzIDxmYXVsdGhhbmRsZXItZmQ+YC4KKwogICAgTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgcGFzc2luZyBmaWxlIGRlc2NyaXB0b3IgdG8gdGhpcyBmdW5jdGlvbi4KKwogLi4gZnVuY3Rpb246OiB1bnJlZ2lzdGVyKHNpZ251bSkKIAogICAgVW5yZWdpc3RlciBhIHVzZXIgc2lnbmFsOiB1bmluc3RhbGwgdGhlIGhhbmRsZXIgb2YgdGhlICpzaWdudW0qIHNpZ25hbApAQCAtMTEwLDYgKzEzNCw4IEBACiAgICBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAKIAorLi4gX2ZhdWx0aGFuZGxlci1mZDoKKwogSXNzdWUgd2l0aCBmaWxlIGRlc2NyaXB0b3JzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmNudGwucnN0IGIvRG9jL2xpYnJhcnkvZmNudGwucnN0CmluZGV4IGI3OThmMjIuLjg4MTEyZjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZjbnRsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mY250bC5yc3QKQEAgLTQsMTUgKzQsMTkgQEAKIC4uIG1vZHVsZTo6IGZjbnRsCiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogVGhlIGZjbnRsKCkgYW5kIGlvY3RsKCkgc3lzdGVtIGNhbGxzLgotLi4gc2VjdGlvbmF1dGhvcjo6IEphYXAgVmVybWV1bGVuCiAKKy4uIHNlY3Rpb25hdXRob3I6OiBKYWFwIFZlcm1ldWxlbgogCiAuLiBpbmRleDo6CiAgICBwYWlyOiBVTklYOyBmaWxlIGNvbnRyb2wKICAgIHBhaXI6IFVOSVg7IEkvTyBjb250cm9sCiAKKy0tLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgcGVyZm9ybXMgZmlsZSBjb250cm9sIGFuZCBJL08gY29udHJvbCBvbiBmaWxlIGRlc2NyaXB0b3JzLiBJdCBpcyBhbgotaW50ZXJmYWNlIHRvIHRoZSA6YzpmdW5jOmBmY250bGAgYW5kIDpjOmZ1bmM6YGlvY3RsYCBVbml4IHJvdXRpbmVzLgoraW50ZXJmYWNlIHRvIHRoZSA6YzpmdW5jOmBmY250bGAgYW5kIDpjOmZ1bmM6YGlvY3RsYCBVbml4IHJvdXRpbmVzLiAgRm9yIGEKK2NvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZXNlIGNhbGxzLCBzZWUgOm1hbnBhZ2U6YGZjbnRsKDIpYCBhbmQKKzptYW5wYWdlOmBpb2N0bCgyKWAgVW5peCBtYW51YWwgcGFnZXMuCiAKIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgdGFrZSBhIGZpbGUgZGVzY3JpcHRvciAqZmQqIGFzIHRoZWlyIGZpcnN0CiBhcmd1bWVudC4gIFRoaXMgY2FuIGJlIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yLCBzdWNoIGFzIHJldHVybmVkIGJ5CkBAIC0yOCw0MSArMzIsNDEgQEAKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCi0uLiBmdW5jdGlvbjo6IGZjbnRsKGZkLCBvcFssIGFyZ10pCisuLiBmdW5jdGlvbjo6IGZjbnRsKGZkLCBjbWQsIGFyZz0wKQogCi0gICBQZXJmb3JtIHRoZSBvcGVyYXRpb24gKm9wKiBvbiBmaWxlIGRlc2NyaXB0b3IgKmZkKiAoZmlsZSBvYmplY3RzIHByb3ZpZGluZworICAgUGVyZm9ybSB0aGUgb3BlcmF0aW9uICpjbWQqIG9uIGZpbGUgZGVzY3JpcHRvciAqZmQqIChmaWxlIG9iamVjdHMgcHJvdmlkaW5nCiAgICBhIDptZXRoOmB+aW8uSU9CYXNlLmZpbGVub2AgbWV0aG9kIGFyZSBhY2NlcHRlZCBhcyB3ZWxsKS4gIFRoZSB2YWx1ZXMgdXNlZAotICAgZm9yICpvcCogYXJlIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW50LCBhbmQgYXJlIGF2YWlsYWJsZSBhcyBjb25zdGFudHMKKyAgIGZvciAqY21kKiBhcmUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQsIGFuZCBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50cwogICAgaW4gdGhlIDptb2Q6YGZjbnRsYCBtb2R1bGUsIHVzaW5nIHRoZSBzYW1lIG5hbWVzIGFzIHVzZWQgaW4gdGhlIHJlbGV2YW50IEMKLSAgIGhlYWRlciBmaWxlcy4gIFRoZSBhcmd1bWVudCAqYXJnKiBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHRoZSBpbnRlZ2VyCi0gICB2YWx1ZSBgYDBgYC4gIFdoZW4gcHJlc2VudCwgaXQgY2FuIGVpdGhlciBiZSBhbiBpbnRlZ2VyIHZhbHVlLCBvciBhIHN0cmluZy4KLSAgIFdpdGggdGhlIGFyZ3VtZW50IG1pc3Npbmcgb3IgYW4gaW50ZWdlciB2YWx1ZSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uCi0gICBpcyB0aGUgaW50ZWdlciByZXR1cm4gdmFsdWUgb2YgdGhlIEMgOmM6ZnVuYzpgZmNudGxgIGNhbGwuICBXaGVuIHRoZSBhcmd1bWVudCBpcwotICAgYSBzdHJpbmcgaXQgcmVwcmVzZW50cyBhIGJpbmFyeSBzdHJ1Y3R1cmUsIGUuZy4gY3JlYXRlZCBieSA6ZnVuYzpgc3RydWN0LnBhY2tgLgotICAgVGhlIGJpbmFyeSBkYXRhIGlzIGNvcGllZCB0byBhIGJ1ZmZlciB3aG9zZSBhZGRyZXNzIGlzIHBhc3NlZCB0byB0aGUgQwotICAgOmM6ZnVuYzpgZmNudGxgIGNhbGwuICBUaGUgcmV0dXJuIHZhbHVlIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIGlzIHRoZSBjb250ZW50cwotICAgb2YgdGhlIGJ1ZmZlciwgY29udmVydGVkIHRvIGEgc3RyaW5nIG9iamVjdC4gIFRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIHN0cmluZwotICAgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgbGVuZ3RoIG9mIHRoZSAqYXJnKiBhcmd1bWVudC4gIFRoaXMgaXMgbGltaXRlZCB0byAxMDI0Ci0gICBieXRlcy4gIElmIHRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBpbiB0aGUgYnVmZmVyIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzCi0gICBsYXJnZXIgdGhhbiAxMDI0IGJ5dGVzLCB0aGlzIGlzIG1vc3QgbGlrZWx5IHRvIHJlc3VsdCBpbiBhIHNlZ21lbnRhdGlvbgotICAgdmlvbGF0aW9uIG9yIGEgbW9yZSBzdWJ0bGUgZGF0YSBjb3JydXB0aW9uLgorICAgaGVhZGVyIGZpbGVzLiBUaGUgYXJndW1lbnQgKmFyZyogY2FuIGVpdGhlciBiZSBhbiBpbnRlZ2VyIHZhbHVlLCBvciBhCisgICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QuIFdpdGggYW4gaW50ZWdlciB2YWx1ZSwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzCisgICBmdW5jdGlvbiBpcyB0aGUgaW50ZWdlciByZXR1cm4gdmFsdWUgb2YgdGhlIEMgOmM6ZnVuYzpgZmNudGxgIGNhbGwuICBXaGVuCisgICB0aGUgYXJndW1lbnQgaXMgYnl0ZXMgaXQgcmVwcmVzZW50cyBhIGJpbmFyeSBzdHJ1Y3R1cmUsIGUuZy4gY3JlYXRlZCBieQorICAgOmZ1bmM6YHN0cnVjdC5wYWNrYC4gVGhlIGJpbmFyeSBkYXRhIGlzIGNvcGllZCB0byBhIGJ1ZmZlciB3aG9zZSBhZGRyZXNzIGlzCisgICBwYXNzZWQgdG8gdGhlIEMgOmM6ZnVuYzpgZmNudGxgIGNhbGwuICBUaGUgcmV0dXJuIHZhbHVlIGFmdGVyIGEgc3VjY2Vzc2Z1bAorICAgY2FsbCBpcyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciwgY29udmVydGVkIHRvIGEgOmNsYXNzOmBieXRlc2Agb2JqZWN0LgorICAgVGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aCBvZiB0aGUKKyAgICphcmcqIGFyZ3VtZW50LiBUaGlzIGlzIGxpbWl0ZWQgdG8gMTAyNCBieXRlcy4gSWYgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkCisgICBpbiB0aGUgYnVmZmVyIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGxhcmdlciB0aGFuIDEwMjQgYnl0ZXMsIHRoaXMgaXMKKyAgIG1vc3QgbGlrZWx5IHRvIHJlc3VsdCBpbiBhIHNlZ21lbnRhdGlvbiB2aW9sYXRpb24gb3IgYSBtb3JlIHN1YnRsZSBkYXRhCisgICBjb3JydXB0aW9uLgogCiAgICBJZiB0aGUgOmM6ZnVuYzpgZmNudGxgIGZhaWxzLCBhbiA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQuCiAKIAotLi4gZnVuY3Rpb246OiBpb2N0bChmZCwgb3BbLCBhcmdbLCBtdXRhdGVfZmxhZ11dKQorLi4gZnVuY3Rpb246OiBpb2N0bChmZCwgcmVxdWVzdCwgYXJnPTAsIG11dGF0ZV9mbGFnPVRydWUpCiAKICAgIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgfmZjbnRsLmZjbnRsYCBmdW5jdGlvbiwgZXhjZXB0CiAgICB0aGF0IHRoZSBhcmd1bWVudCBoYW5kbGluZyBpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQuCiAKLSAgIFRoZSBvcCBwYXJhbWV0ZXIgaXMgbGltaXRlZCB0byB2YWx1ZXMgdGhhdCBjYW4gZml0IGluIDMyLWJpdHMuCi0gICBBZGRpdGlvbmFsIGNvbnN0YW50cyBvZiBpbnRlcmVzdCBmb3IgdXNlIGFzIHRoZSAqb3AqIGFyZ3VtZW50IGNhbiBiZQorICAgVGhlICpyZXF1ZXN0KiBwYXJhbWV0ZXIgaXMgbGltaXRlZCB0byB2YWx1ZXMgdGhhdCBjYW4gZml0IGluIDMyLWJpdHMuCisgICBBZGRpdGlvbmFsIGNvbnN0YW50cyBvZiBpbnRlcmVzdCBmb3IgdXNlIGFzIHRoZSAqcmVxdWVzdCogYXJndW1lbnQgY2FuIGJlCiAgICBmb3VuZCBpbiB0aGUgOm1vZDpgdGVybWlvc2AgbW9kdWxlLCB1bmRlciB0aGUgc2FtZSBuYW1lcyBhcyB1c2VkIGluCiAgICB0aGUgcmVsZXZhbnQgQyBoZWFkZXIgZmlsZXMuCiAKLSAgIFRoZSBwYXJhbWV0ZXIgKmFyZyogY2FuIGJlIG9uZSBvZiBhbiBpbnRlZ2VyLCBhYnNlbnQgKHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gdGhlCi0gICBpbnRlZ2VyIGBgMGBgKSwgYW4gb2JqZWN0IHN1cHBvcnRpbmcgdGhlIHJlYWQtb25seSBidWZmZXIgaW50ZXJmYWNlIChtb3N0IGxpa2VseQotICAgYSBwbGFpbiBQeXRob24gc3RyaW5nKSBvciBhbiBvYmplY3Qgc3VwcG9ydGluZyB0aGUgcmVhZC13cml0ZSBidWZmZXIgaW50ZXJmYWNlLgorICAgVGhlIHBhcmFtZXRlciAqYXJnKiBjYW4gYmUgb25lIG9mIGFuIGludGVnZXIsIGFuIG9iamVjdCBzdXBwb3J0aW5nIHRoZQorICAgcmVhZC1vbmx5IGJ1ZmZlciBpbnRlcmZhY2UgKGxpa2UgOmNsYXNzOmBieXRlc2ApIG9yIGFuIG9iamVjdCBzdXBwb3J0aW5nCisgICB0aGUgcmVhZC13cml0ZSBidWZmZXIgaW50ZXJmYWNlIChsaWtlIDpjbGFzczpgYnl0ZWFycmF5YCkuCiAKICAgIEluIGFsbCBidXQgdGhlIGxhc3QgY2FzZSwgYmVoYXZpb3VyIGlzIGFzIGZvciB0aGUgOmZ1bmM6YH5mY250bC5mY250bGAKICAgIGZ1bmN0aW9uLgpAQCAtNzIsNyArNzYsNyBAQAogCiAgICBJZiBpdCBpcyBmYWxzZSwgdGhlIGJ1ZmZlcidzIG11dGFiaWxpdHkgaXMgaWdub3JlZCBhbmQgYmVoYXZpb3VyIGlzIGFzIGZvciBhCiAgICByZWFkLW9ubHkgYnVmZmVyLCBleGNlcHQgdGhhdCB0aGUgMTAyNCBieXRlIGxpbWl0IG1lbnRpb25lZCBhYm92ZSBpcyBhdm9pZGVkIC0tCi0gICBzbyBsb25nIGFzIHRoZSBidWZmZXIgeW91IHBhc3MgaXMgYXMgbGVhc3QgYXMgbG9uZyBhcyB3aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtCisgICBzbyBsb25nIGFzIHRoZSBidWZmZXIgeW91IHBhc3MgaXMgYXQgbGVhc3QgYXMgbG9uZyBhcyB3aGF0IHRoZSBvcGVyYXRpbmcgc3lzdGVtCiAgICB3YW50cyB0byBwdXQgdGhlcmUsIHRoaW5ncyBzaG91bGQgd29yay4KIAogICAgSWYgKm11dGF0ZV9mbGFnKiBpcyB0cnVlICh0aGUgZGVmYXVsdCksIHRoZW4gdGhlIGJ1ZmZlciBpcyAoaW4gZWZmZWN0KSBwYXNzZWQKQEAgLTgzLDcgKzg3LDcgQEAKICAgIGJ1ZmZlciAxMDI0IGJ5dGVzIGxvbmcgd2hpY2ggaXMgdGhlbiBwYXNzZWQgdG8gOmZ1bmM6YGlvY3RsYCBhbmQgY29waWVkIGJhY2sKICAgIGludG8gdGhlIHN1cHBsaWVkIGJ1ZmZlci4KIAotICAgSWYgdGhlIDpjOmZ1bmM6YGlvY3RsYCBmYWlscywgYW4gOmV4YzpgSU9FcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgIElmIHRoZSA6YzpmdW5jOmBpb2N0bGAgZmFpbHMsIGFuIDpleGM6YE9TRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKICAgIEFuIGV4YW1wbGU6OgogCkBAIC05OSwyNyArMTAzLDI3IEBACiAgICAgICBhcnJheSgnaCcsIFsxMzM0MV0pCiAKIAotLi4gZnVuY3Rpb246OiBmbG9jayhmZCwgb3ApCisuLiBmdW5jdGlvbjo6IGZsb2NrKGZkLCBvcGVyYXRpb24pCiAKLSAgIFBlcmZvcm0gdGhlIGxvY2sgb3BlcmF0aW9uICpvcCogb24gZmlsZSBkZXNjcmlwdG9yICpmZCogKGZpbGUgb2JqZWN0cyBwcm92aWRpbmcKKyAgIFBlcmZvcm0gdGhlIGxvY2sgb3BlcmF0aW9uICpvcGVyYXRpb24qIG9uIGZpbGUgZGVzY3JpcHRvciAqZmQqIChmaWxlIG9iamVjdHMgcHJvdmlkaW5nCiAgICBhIDptZXRoOmB+aW8uSU9CYXNlLmZpbGVub2AgbWV0aG9kIGFyZSBhY2NlcHRlZCBhcyB3ZWxsKS4gU2VlIHRoZSBVbml4IG1hbnVhbAogICAgOm1hbnBhZ2U6YGZsb2NrKDIpYCBmb3IgZGV0YWlscy4gIChPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZW11bGF0ZWQKICAgIHVzaW5nIDpjOmZ1bmM6YGZjbnRsYC4pCiAKLSAgIElmIHRoZSA6YzpmdW5jOmBmbG9ja2AgZmFpbHMsIGFuIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICBJZiB0aGUgOmM6ZnVuYzpgZmxvY2tgIGZhaWxzLCBhbiA6ZXhjOmBPU0Vycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLgogCiAKLS4uIGZ1bmN0aW9uOjogbG9ja2YoZmQsIG9wZXJhdGlvbiwgW2xlbmd0aCwgW3N0YXJ0LCBbd2hlbmNlXV1dKQorLi4gZnVuY3Rpb246OiBsb2NrZihmZCwgY21kLCBsZW49MCwgc3RhcnQ9MCwgd2hlbmNlPTApCiAKICAgIFRoaXMgaXMgZXNzZW50aWFsbHkgYSB3cmFwcGVyIGFyb3VuZCB0aGUgOmZ1bmM6YH5mY250bC5mY250bGAgbG9ja2luZyBjYWxscy4KLSAgICpmZCogaXMgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB0byBsb2NrIG9yIHVubG9jaywgYW5kICpvcGVyYXRpb24qCisgICAqZmQqIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gbG9jayBvciB1bmxvY2ssIGFuZCAqY21kKgogICAgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogCiAgICAqIDpjb25zdDpgTE9DS19VTmAgLS0gdW5sb2NrCiAgICAqIDpjb25zdDpgTE9DS19TSGAgLS0gYWNxdWlyZSBhIHNoYXJlZCBsb2NrCiAgICAqIDpjb25zdDpgTE9DS19FWGAgLS0gYWNxdWlyZSBhbiBleGNsdXNpdmUgbG9jawogCi0gICBXaGVuICpvcGVyYXRpb24qIGlzIDpjb25zdDpgTE9DS19TSGAgb3IgOmNvbnN0OmBMT0NLX0VYYCwgaXQgY2FuIGFsc28gYmUKKyAgIFdoZW4gKmNtZCogaXMgOmNvbnN0OmBMT0NLX1NIYCBvciA6Y29uc3Q6YExPQ0tfRVhgLCBpdCBjYW4gYWxzbyBiZQogICAgYml0d2lzZSBPUmVkIHdpdGggOmNvbnN0OmBMT0NLX05CYCB0byBhdm9pZCBibG9ja2luZyBvbiBsb2NrIGFjcXVpc2l0aW9uLgogICAgSWYgOmNvbnN0OmBMT0NLX05CYCBpcyB1c2VkIGFuZCB0aGUgbG9jayBjYW5ub3QgYmUgYWNxdWlyZWQsIGFuCiAgICA6ZXhjOmBPU0Vycm9yYCB3aWxsIGJlIHJhaXNlZCBhbmQgdGhlIGV4Y2VwdGlvbiB3aWxsIGhhdmUgYW4gKmVycm5vKgpAQCAtMTI4LDcgKzEzMiw3IEBACiAgICBzeXN0ZW1zLCA6Y29uc3Q6YExPQ0tfRVhgIGNhbiBvbmx5IGJlIHVzZWQgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciByZWZlcnMgdG8gYQogICAgZmlsZSBvcGVuZWQgZm9yIHdyaXRpbmcuCiAKLSAgICpsZW5ndGgqIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbG9jaywgKnN0YXJ0KiBpcyB0aGUgYnl0ZSBvZmZzZXQgYXQKKyAgICpsZW4qIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbG9jaywgKnN0YXJ0KiBpcyB0aGUgYnl0ZSBvZmZzZXQgYXQKICAgIHdoaWNoIHRoZSBsb2NrIHN0YXJ0cywgcmVsYXRpdmUgdG8gKndoZW5jZSosIGFuZCAqd2hlbmNlKiBpcyBhcyB3aXRoCiAgICA6ZnVuYzpgaW8uSU9CYXNlLnNlZWtgLCBzcGVjaWZpY2FsbHk6CiAKQEAgLTEzNyw3ICsxNDEsNyBAQAogICAgKiA6Y29uc3Q6YDJgIC0tIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgKDpkYXRhOmBvcy5TRUVLX0VORGApCiAKICAgIFRoZSBkZWZhdWx0IGZvciAqc3RhcnQqIGlzIDAsIHdoaWNoIG1lYW5zIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCi0gICBUaGUgZGVmYXVsdCBmb3IgKmxlbmd0aCogaXMgMCB3aGljaCBtZWFucyB0byBsb2NrIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuICBUaGUKKyAgIFRoZSBkZWZhdWx0IGZvciAqbGVuKiBpcyAwIHdoaWNoIG1lYW5zIHRvIGxvY2sgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gIFRoZQogICAgZGVmYXVsdCBmb3IgKndoZW5jZSogaXMgYWxzbyAwLgogCiBFeGFtcGxlcyAoYWxsIG9uIGEgU1ZSNCBjb21wbGlhbnQgc3lzdGVtKTo6CkBAIC0xNTEsOSArMTU1LDkgQEAKICAgIHJ2ID0gZmNudGwuZmNudGwoZiwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQogCiBOb3RlIHRoYXQgaW4gdGhlIGZpcnN0IGV4YW1wbGUgdGhlIHJldHVybiB2YWx1ZSB2YXJpYWJsZSAqcnYqIHdpbGwgaG9sZCBhbgotaW50ZWdlciB2YWx1ZTsgaW4gdGhlIHNlY29uZCBleGFtcGxlIGl0IHdpbGwgaG9sZCBhIHN0cmluZyB2YWx1ZS4gIFRoZSBzdHJ1Y3R1cmUKLWxheS1vdXQgZm9yIHRoZSAqbG9ja2RhdGEqIHZhcmlhYmxlIGlzIHN5c3RlbSBkZXBlbmRlbnQgLS0tIHRoZXJlZm9yZSB1c2luZyB0aGUKLTpmdW5jOmBmbG9ja2AgY2FsbCBtYXkgYmUgYmV0dGVyLgoraW50ZWdlciB2YWx1ZTsgaW4gdGhlIHNlY29uZCBleGFtcGxlIGl0IHdpbGwgaG9sZCBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdC4gIFRoZQorc3RydWN0dXJlIGxheS1vdXQgZm9yIHRoZSAqbG9ja2RhdGEqIHZhcmlhYmxlIGlzIHN5c3RlbSBkZXBlbmRlbnQgLS0tIHRoZXJlZm9yZQordXNpbmcgdGhlIDpmdW5jOmBmbG9ja2AgY2FsbCBtYXkgYmUgYmV0dGVyLgogCiAKIC4uIHNlZWFsc286OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAppbmRleCAwNmQzZjIxLi4zMWI5YjRhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogZmlsZWNtcAogICAgOnN5bm9wc2lzOiBDb21wYXJlIGZpbGVzIGVmZmljaWVudGx5LgorCiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9maWxlY21wLnB5YApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKaW5kZXggZWUwNjgzMC4uYWE0YzUyOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CkBAIC0zLDYgKzMsNyBAQAogCiAuLiBtb2R1bGU6OiBmaWxlaW5wdXQKICAgIDpzeW5vcHNpczogTG9vcCBvdmVyIHN0YW5kYXJkIGlucHV0IG9yIGEgbGlzdCBvZiBmaWxlcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AcHl0aG9uLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCkBAIC03MSw2ICs3Miw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41LjIKKyAgICAgIFRoZSAqYnVmc2l6ZSogcGFyYW1ldGVyIGlzIG5vIGxvbmdlciB1c2VkLgorCiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHVzZSB0aGUgZ2xvYmFsIHN0YXRlIGNyZWF0ZWQgYnkgOmZ1bmM6YGZpbGVpbnB1dC5pbnB1dGA7CiBpZiB0aGVyZSBpcyBubyBhY3RpdmUgc3RhdGUsIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgpAQCAtMTYxLDcgKzE2NSwxMCBAQAogICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKLSAgICAgICAgVGhlIGBgJ3JVJ2BgIGFuZCBgYCdVJ2BgIG1vZGVzLgorICAgICAgVGhlIGBgJ3JVJ2BgIGFuZCBgYCdVJ2BgIG1vZGVzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNS4yCisgICAgICBUaGUgKmJ1ZnNpemUqIHBhcmFtZXRlciBpcyBubyBsb25nZXIgdXNlZC4KIAogCiAqKk9wdGlvbmFsIGluLXBsYWNlIGZpbHRlcmluZzoqKiBpZiB0aGUga2V5d29yZCBhcmd1bWVudCBgYGlucGxhY2U9VHJ1ZWBgIGlzCkBAIC0xOTAsNyArMTk3LDcgQEAKIAogLi4gZnVuY3Rpb246OiBob29rX2VuY29kZWQoZW5jb2RpbmcpCiAKLSAgIFJldHVybnMgYSBob29rIHdoaWNoIG9wZW5zIGVhY2ggZmlsZSB3aXRoIDpmdW5jOmBjb2RlY3Mub3BlbmAsIHVzaW5nIHRoZSBnaXZlbgorICAgUmV0dXJucyBhIGhvb2sgd2hpY2ggb3BlbnMgZWFjaCBmaWxlIHdpdGggOmZ1bmM6YG9wZW5gLCB1c2luZyB0aGUgZ2l2ZW4KICAgICplbmNvZGluZyogdG8gcmVhZCB0aGUgZmlsZS4KIAogICAgVXNhZ2UgZXhhbXBsZTogYGBmaSA9CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdCBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CmluZGV4IDY4YjQzN2YuLjg1YWM0ODQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CkBAIC00LDEzICs0LDEyIEBACiAuLiBtb2R1bGU6OiBmbm1hdGNoCiAgICA6c3lub3BzaXM6IFVuaXggc2hlbGwgc3R5bGUgZmlsZW5hbWUgcGF0dGVybiBtYXRjaGluZy4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZm5tYXRjaC5weWAKIAogLi4gaW5kZXg6OiBzaW5nbGU6IGZpbGVuYW1lczsgd2lsZGNhcmQgZXhwYW5zaW9uCiAKIC4uIGluZGV4OjogbW9kdWxlOiByZQogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9mbm1hdGNoLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzdXBwb3J0IGZvciBVbml4IHNoZWxsLXN0eWxlIHdpbGRjYXJkcywgd2hpY2ggYXJlICpub3QqIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdCBiL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKaW5kZXggMTg0N2E4MC4uNmMxMGFjNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CkBAIC02LDkgKzYsOSBAQAogICAgOmRlcHJlY2F0ZWQ6CiAKIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKLSAgIER1ZSB0byBsYWNrIG9mIHVzYWdlLCB0aGUgZm9ybWF0dGVyIG1vZHVsZSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBpcyBzbGF0ZWQKLSAgIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjYuCisgICBEdWUgdG8gbGFjayBvZiB1c2FnZSwgdGhlIGZvcm1hdHRlciBtb2R1bGUgaGFzIGJlZW4gZGVwcmVjYXRlZC4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdHdvIGludGVyZmFjZSBkZWZpbml0aW9ucywgZWFjaCB3aXRoIG11bHRpcGxlCiBpbXBsZW1lbnRhdGlvbnM6IFRoZSAqZm9ybWF0dGVyKiBpbnRlcmZhY2UsIGFuZCB0aGUgKndyaXRlciogaW50ZXJmYWNlIHdoaWNoIGlzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mcGVjdGwucnN0IGIvRG9jL2xpYnJhcnkvZnBlY3RsLnJzdAppbmRleCBmYjE1ZjY5Li5lNGI1MjhjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mcGVjdGwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZwZWN0bC5yc3QKQEAgLTQsMTAgKzQsMTAgQEAKIC4uIG1vZHVsZTo6IGZwZWN0bAogICAgOnBsYXRmb3JtOiBVbml4CiAgICA6c3lub3BzaXM6IFByb3ZpZGUgY29udHJvbCBmb3IgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIGhhbmRsaW5nLgorCiAuLiBtb2R1bGVhdXRob3I6OiBMZWUgQnVzYnkgPGJ1c2J5MUBsbG5sLmdvdj4KIC4uIHNlY3Rpb25hdXRob3I6OiBMZWUgQnVzYnkgPGJ1c2J5MUBsbG5sLmdvdj4KIAotCiAuLiBub3RlOjoKIAogICAgVGhlIDptb2Q6YGZwZWN0bGAgbW9kdWxlIGlzIG5vdCBidWlsdCBieSBkZWZhdWx0LCBhbmQgaXRzIHVzYWdlIGlzIGRpc2NvdXJhZ2VkCkBAIC0xNiw2ICsxNiw4IEBACiAKIC4uIGluZGV4Ojogc2luZ2xlOiBJRUVFLTc1NAogCistLS0tLS0tLS0tLS0tLQorCiBNb3N0IGNvbXB1dGVycyBjYXJyeSBvdXQgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBpbiBjb25mb3JtYW5jZSB3aXRoIHRoZQogc28tY2FsbGVkIElFRUUtNzU0IHN0YW5kYXJkLiBPbiBhbnkgcmVhbCBjb21wdXRlciwgc29tZSBmbG9hdGluZyBwb2ludAogb3BlcmF0aW9ucyBwcm9kdWNlIHJlc3VsdHMgdGhhdCBjYW5ub3QgYmUgZXhwcmVzc2VkIGFzIGEgbm9ybWFsIGZsb2F0aW5nIHBvaW50CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mcmFjdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZnJhY3Rpb25zLnJzdAppbmRleCAzZDI1MjlkLi5iNWE4MThlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mcmFjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZyYWN0aW9ucy5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IGZyYWN0aW9ucwogICAgOnN5bm9wc2lzOiBSYXRpb25hbCBudW1iZXJzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBKZWZmcmV5IFlhc3NraW4gPGp5YXNza2luIGF0IGdtYWlsLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBKZWZmcmV5IFlhc3NraW4gPGp5YXNza2luIGF0IGdtYWlsLmNvbT4KIApAQCAtMTcyLDYgKzE3Myw5IEBACiAgICBzaWduIGFzICpiKiBpZiAqYiogaXMgbm9uemVybzsgb3RoZXJ3aXNlIGl0IHRha2VzIHRoZSBzaWduIG9mICphKi4gIGBgZ2NkKDAsCiAgICAwKWBgIHJldHVybnMgYGAwYGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjUKKyAgICAgIFVzZSA6ZnVuYzpgbWF0aC5nY2RgIGluc3RlYWQuCisKIAogLi4gc2VlYWxzbzo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CmluZGV4IGYwNmU2NzguLjIzM2UxMWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnRwbGliLnJzdApAQCAtNCwxOSArNCwxOCBAQAogLi4gbW9kdWxlOjogZnRwbGliCiAgICA6c3lub3BzaXM6IEZUUCBwcm90b2NvbCBjbGllbnQgKHJlcXVpcmVzIHNvY2tldHMpLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9mdHBsaWIucHlgCiAKIC4uIGluZGV4OjoKICAgIHBhaXI6IEZUUDsgcHJvdG9jb2wKICAgIHNpbmdsZTogRlRQOyBmdHBsaWIgKHN0YW5kYXJkIG1vZHVsZSkKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZnRwbGliLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBjbGFzcyA6Y2xhc3M6YEZUUGAgYW5kIGEgZmV3IHJlbGF0ZWQgaXRlbXMuIFRoZQogOmNsYXNzOmBGVFBgIGNsYXNzIGltcGxlbWVudHMgdGhlIGNsaWVudCBzaWRlIG9mIHRoZSBGVFAgcHJvdG9jb2wuICBZb3UgY2FuIHVzZQogdGhpcyB0byB3cml0ZSBQeXRob24gcHJvZ3JhbXMgdGhhdCBwZXJmb3JtIGEgdmFyaWV0eSBvZiBhdXRvbWF0ZWQgRlRQIGpvYnMsIHN1Y2gKLWFzIG1pcnJvcmluZyBvdGhlciBmdHAgc2VydmVycy4gIEl0IGlzIGFsc28gdXNlZCBieSB0aGUgbW9kdWxlCithcyBtaXJyb3Jpbmcgb3RoZXIgRlRQIHNlcnZlcnMuICBJdCBpcyBhbHNvIHVzZWQgYnkgdGhlIG1vZHVsZQogOm1vZDpgdXJsbGliLnJlcXVlc3RgIHRvIGhhbmRsZSBVUkxzIHRoYXQgdXNlIEZUUC4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEZUUAogKEZpbGUgVHJhbnNmZXIgUHJvdG9jb2wpLCBzZWUgSW50ZXJuZXQgOnJmYzpgOTU5YC4KIApAQCAtMTQ4LDEyICsxNDcsNiBAQAogICAgICAgdHlwaWNhbGx5IHVzZWQgYnkgRlRQIGNsaWVudHMgdG8gbG9hZCB1c2VyIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uCiAgICAgICBiZWZvcmUgcHJvbXB0aW5nIHRoZSB1c2VyLgogCi0gICAuLiBpbmRleDo6IHNpbmdsZTogZnRwbWlycm9yLnB5Ci0KLSAgIFRoZSBmaWxlIDpmaWxlOmBUb29scy9zY3JpcHRzL2Z0cG1pcnJvci5weWAgaW4gdGhlIFB5dGhvbiBzb3VyY2UgZGlzdHJpYnV0aW9uIGlzCi0gICBhIHNjcmlwdCB0aGF0IGNhbiBtaXJyb3IgRlRQIHNpdGVzLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB1c2luZyB0aGUgOm1vZDpgZnRwbGliYAotICAgbW9kdWxlLiBJdCBjYW4gYmUgdXNlZCBhcyBhbiBleHRlbmRlZCBleGFtcGxlIHRoYXQgYXBwbGllcyB0aGlzIG1vZHVsZS4KLQogCiAuLiBfZnRwLW9iamVjdHM6CiAKQEAgLTMxNCw3ICszMDcsNyBAQAogCiAuLiBtZXRob2Q6OiBGVFAubWxzZChwYXRoPSIiLCBmYWN0cz1bXSkKIAotICAgTGlzdCBhIGRpcmVjdG9yeSBpbiBhIHN0YW5kYXJkaXplZCBmb3JtYXQgYnkgdXNpbmcgTUxTRCBjb21tYW5kCisgICBMaXN0IGEgZGlyZWN0b3J5IGluIGEgc3RhbmRhcmRpemVkIGZvcm1hdCBieSB1c2luZyBgYE1MU0RgYCBjb21tYW5kCiAgICAoOnJmYzpgMzY1OWApLiAgSWYgKnBhdGgqIGlzIG9taXR0ZWQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGFzc3VtZWQuCiAgICAqZmFjdHMqIGlzIGEgbGlzdCBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiBpbmZvcm1hdGlvbiBkZXNpcmVkCiAgICAoZS5nLiBgYFsidHlwZSIsICJzaXplIiwgInBlcm0iXWBgKS4gIFJldHVybiBhIGdlbmVyYXRvciBvYmplY3QgeWllbGRpbmcgYQpAQCAtMzMzLDcgKzMyNiw3IEBACiAgICBkaXJlY3RvcnkpLiAgTXVsdGlwbGUgYXJndW1lbnRzIGNhbiBiZSB1c2VkIHRvIHBhc3Mgbm9uLXN0YW5kYXJkIG9wdGlvbnMgdG8KICAgIHRoZSBgYE5MU1RgYCBjb21tYW5kLgogCi0gICAuLiBkZXByZWNhdGVkOjogMy4zIHVzZSA6bWV0aDpgbWxzZGAgaW5zdGVhZC4KKyAgIC4uIG5vdGU6OiBJZiB5b3VyIHNlcnZlciBzdXBwb3J0cyB0aGUgY29tbWFuZCwgOm1ldGg6YG1sc2RgIG9mZmVycyBhIGJldHRlciBBUEkuCiAKIAogLi4gbWV0aG9kOjogRlRQLmRpcihhcmd1bWVudFssIC4uLl0pCkBAIC0zNDUsNyArMzM4LDcgQEAKICAgIGFzIGEgKmNhbGxiYWNrKiBmdW5jdGlvbiBhcyBmb3IgOm1ldGg6YHJldHJsaW5lc2A7IHRoZSBkZWZhdWx0IHByaW50cyB0bwogICAgYGBzeXMuc3Rkb3V0YGAuICBUaGlzIG1ldGhvZCByZXR1cm5zIGBgTm9uZWBgLgogCi0gICAuLiBkZXByZWNhdGVkOjogMy4zIHVzZSA6bWV0aDpgbWxzZGAgaW5zdGVhZC4KKyAgIC4uIG5vdGU6OiBJZiB5b3VyIHNlcnZlciBzdXBwb3J0cyB0aGUgY29tbWFuZCwgOm1ldGg6YG1sc2RgIG9mZmVycyBhIGJldHRlciBBUEkuCiAKIAogLi4gbWV0aG9kOjogRlRQLnJlbmFtZShmcm9tbmFtZSwgdG9uYW1lKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKaW5kZXggMjFhZWFmOS4uZWZhNWJkMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CkBAIC0xNTYsMTEgKzE1NiwxMiBAQAogCiAuLiBmdW5jdGlvbjo6IGNocihpKQogCi0gICBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRpbmcgYSBjaGFyYWN0ZXIgd2hvc2UgVW5pY29kZSBjb2RlIHBvaW50IGlzIHRoZSBpbnRlZ2VyCi0gICAqaSouICBGb3IgZXhhbXBsZSwgYGBjaHIoOTcpYGAgcmV0dXJucyB0aGUgc3RyaW5nIGBgJ2EnYGAuIFRoaXMgaXMgdGhlCi0gICBpbnZlcnNlIG9mIDpmdW5jOmBvcmRgLiAgVGhlIHZhbGlkIHJhbmdlIGZvciB0aGUgYXJndW1lbnQgaXMgZnJvbSAwIHRocm91Z2gKLSAgIDEsMTE0LDExMSAoMHgxMEZGRkYgaW4gYmFzZSAxNikuICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiAqaSogaXMKLSAgIG91dHNpZGUgdGhhdCByYW5nZS4KKyAgIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNoYXJhY3RlciB3aG9zZSBVbmljb2RlIGNvZGUgcG9pbnQgaXMgdGhlCisgICBpbnRlZ2VyICppKi4gIEZvciBleGFtcGxlLCBgYGNocig5NylgYCByZXR1cm5zIHRoZSBzdHJpbmcgYGAnYSdgYCwgd2hpbGUKKyAgIGBgY2hyKDgzNjQpYGAgcmV0dXJucyB0aGUgc3RyaW5nIGBgJ+KCrCdgYC4gVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiA6ZnVuYzpgb3JkYC4KKworICAgVGhlIHZhbGlkIHJhbmdlIGZvciB0aGUgYXJndW1lbnQgaXMgZnJvbSAwIHRocm91Z2ggMSwxMTQsMTExICgweDEwRkZGRiBpbgorICAgYmFzZSAxNikuICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiAqaSogaXMgb3V0c2lkZSB0aGF0IHJhbmdlLgogCiAKIC4uIGZ1bmN0aW9uOjogY2xhc3NtZXRob2QoZnVuY3Rpb24pCkBAIC0yMjksNyArMjMwLDcgQEAKICAgIG9yIGBgMmBgIChkb2NzdHJpbmdzIGFyZSByZW1vdmVkIHRvbykuCiAKICAgIFRoaXMgZnVuY3Rpb24gcmFpc2VzIDpleGM6YFN5bnRheEVycm9yYCBpZiB0aGUgY29tcGlsZWQgc291cmNlIGlzIGludmFsaWQsCi0gICBhbmQgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGUgc291cmNlIGNvbnRhaW5zIG51bGwgYnl0ZXMuCisgICBhbmQgOmV4YzpgVmFsdWVFcnJvcmAgaWYgdGhlIHNvdXJjZSBjb250YWlucyBudWxsIGJ5dGVzLgogCiAgICBJZiB5b3Ugd2FudCB0byBwYXJzZSBQeXRob24gY29kZSBpbnRvIGl0cyBBU1QgcmVwcmVzZW50YXRpb24sIHNlZQogICAgOmZ1bmM6YGFzdC5wYXJzZWAuCkBAIC0yNDUsNiArMjQ2LDEwIEBACiAgICAgICBBbGxvd2VkIHVzZSBvZiBXaW5kb3dzIGFuZCBNYWMgbmV3bGluZXMuICBBbHNvIGlucHV0IGluIGBgJ2V4ZWMnYGAgbW9kZQogICAgICAgZG9lcyBub3QgaGF2ZSB0byBlbmQgaW4gYSBuZXdsaW5lIGFueW1vcmUuICBBZGRlZCB0aGUgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBQcmV2aW91c2x5LCA6ZXhjOmBUeXBlRXJyb3JgIHdhcyByYWlzZWQgd2hlbiBudWxsIGJ5dGVzIHdlcmUgZW5jb3VudGVyZWQKKyAgICAgIGluICpzb3VyY2UqLgorCiAKIC4uIGNsYXNzOjogY29tcGxleChbcmVhbFssIGltYWddXSkKIApAQCAtMjk5LDcgKzMwNCw3IEBACiAgICA6ZnVuYzpgZGlyYCByZXBvcnRzIHRoZWlyIGF0dHJpYnV0ZXMuCiAKICAgIElmIHRoZSBvYmplY3QgZG9lcyBub3QgcHJvdmlkZSA6bWV0aDpgX19kaXJfX2AsIHRoZSBmdW5jdGlvbiB0cmllcyBpdHMgYmVzdCB0bwotICAgZ2F0aGVyIGluZm9ybWF0aW9uIGZyb20gdGhlIG9iamVjdCdzIDphdHRyOmBfX2RpY3RfX2AgYXR0cmlidXRlLCBpZiBkZWZpbmVkLCBhbmQKKyAgIGdhdGhlciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvYmplY3QncyA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlLCBpZiBkZWZpbmVkLCBhbmQKICAgIGZyb20gaXRzIHR5cGUgb2JqZWN0LiAgVGhlIHJlc3VsdGluZyBsaXN0IGlzIG5vdCBuZWNlc3NhcmlseSBjb21wbGV0ZSwgYW5kIG1heQogICAgYmUgaW5hY2N1cmF0ZSB3aGVuIHRoZSBvYmplY3QgaGFzIGEgY3VzdG9tIDpmdW5jOmBfX2dldGF0dHJfX2AuCiAKQEAgLTk3Miw5ICs5NzcsMTEgQEAKICAgICAgQ2hhcmFjdGVycyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbmNvZGluZyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUKICAgICAgYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlciByZWZlcmVuY2UgYGAmI25ubjtgYC4KIAotICAgKiBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIChhbHNvIG9ubHkgc3VwcG9ydGVkIHdoZW4gd3JpdGluZykKLSAgICAgcmVwbGFjZXMgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyB3aXRoIFB5dGhvbidzIGJhY2tzbGFzaGVkIGVzY2FwZQotICAgICBzZXF1ZW5jZXMuCisgICAqIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAgcmVwbGFjZXMgbWFsZm9ybWVkIGRhdGEgYnkgUHl0aG9uJ3MgYmFja3NsYXNoZWQKKyAgICAgZXNjYXBlIHNlcXVlbmNlcy4KKworICAgKiBgYCduYW1lcmVwbGFjZSdgYCAoYWxzbyBvbmx5IHN1cHBvcnRlZCB3aGVuIHdyaXRpbmcpCisgICAgIHJlcGxhY2VzIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMgd2l0aCBgYFxOey4uLn1gYCBlc2NhcGUgc2VxdWVuY2VzLgogCiAgICAuLiBpbmRleDo6CiAgICAgICBzaW5nbGU6IHVuaXZlcnNhbCBuZXdsaW5lczsgb3BlbigpIGJ1aWx0LWluIGZ1bmN0aW9uCkBAIC05OTksOCArMTAwNiw4IEBACiAKICAgIElmICpjbG9zZWZkKiBpcyBgYEZhbHNlYGAgYW5kIGEgZmlsZSBkZXNjcmlwdG9yIHJhdGhlciB0aGFuIGEgZmlsZW5hbWUgd2FzCiAgICBnaXZlbiwgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUga2VwdCBvcGVuIHdoZW4gdGhlIGZpbGUgaXMKLSAgIGNsb3NlZC4gIElmIGEgZmlsZW5hbWUgaXMgZ2l2ZW4gKmNsb3NlZmQqIGhhcyBubyBlZmZlY3QgYW5kIG11c3QgYmUgYGBUcnVlYGAKLSAgICh0aGUgZGVmYXVsdCkuCisgICBjbG9zZWQuICBJZiBhIGZpbGVuYW1lIGlzIGdpdmVuICpjbG9zZWZkKiBtdXN0IGJlIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCkKKyAgIG90aGVyd2lzZSBhbiBlcnJvciB3aWxsIGJlIHJhaXNlZC4KIAogICAgQSBjdXN0b20gb3BlbmVyIGNhbiBiZSB1c2VkIGJ5IHBhc3NpbmcgYSBjYWxsYWJsZSBhcyAqb3BlbmVyKi4gVGhlIHVuZGVybHlpbmcKICAgIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUgb2JqZWN0IGlzIHRoZW4gb2J0YWluZWQgYnkgY2FsbGluZyAqb3BlbmVyKiB3aXRoCkBAIC0xMDYyLDE0ICsxMDY5LDIwIEBACiAKICAgICAgIFRoZSBgYCdVJ2BgIG1vZGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBJZiB0aGUgc3lzdGVtIGNhbGwgaXMgaW50ZXJydXB0ZWQgYW5kIHRoZSBzaWduYWwgaGFuZGxlciBkb2VzIG5vdCByYWlzZSBhbgorICAgICAgZXhjZXB0aW9uLCB0aGUgZnVuY3Rpb24gbm93IHJldHJpZXMgdGhlIHN5c3RlbSBjYWxsIGluc3RlYWQgb2YgcmFpc2luZyBhbgorICAgICAgOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAgZXhjZXB0aW9uIChzZWUgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSkuCiAKLS4uIFhYWCB3b3JrcyBmb3IgYnl0ZXMgdG9vLCBidXQgc2hvdWxkIGl0PworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSBgYCduYW1lcmVwbGFjZSdgYCBlcnJvciBoYW5kbGVyIHdhcyBhZGRlZC4KKwogLi4gZnVuY3Rpb246OiBvcmQoYykKIAogICAgR2l2ZW4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIG9uZSBVbmljb2RlIGNoYXJhY3RlciwgcmV0dXJuIGFuIGludGVnZXIKLSAgIHJlcHJlc2VudGluZyB0aGUgVW5pY29kZSBjb2RlCi0gICBwb2ludCBvZiB0aGF0IGNoYXJhY3Rlci4gIEZvciBleGFtcGxlLCBgYG9yZCgnYScpYGAgcmV0dXJucyB0aGUgaW50ZWdlciBgYDk3YGAKLSAgIGFuZCBgYG9yZCgnXHUyMDIwJylgYCByZXR1cm5zIGBgODIyNGBgLiAgVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiA6ZnVuYzpgY2hyYC4KKyAgIHJlcHJlc2VudGluZyB0aGUgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoYXQgY2hhcmFjdGVyLiAgRm9yIGV4YW1wbGUsCisgICBgYG9yZCgnYScpYGAgcmV0dXJucyB0aGUgaW50ZWdlciBgYDk3YGAgYW5kIGBgb3JkKCfigqwnKWBgIChFdXJvIHNpZ24pCisgICByZXR1cm5zIGBgODM2NGBgLiAgVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiA6ZnVuYzpgY2hyYC4KIAogCiAuLiBmdW5jdGlvbjo6IHBvdyh4LCB5Wywgel0pCkBAIC0xMTg2LDYgKzExOTksOSBAQAogICAgVGhlIHJldHVybmVkIHByb3BlcnR5IG9iamVjdCBhbHNvIGhhcyB0aGUgYXR0cmlidXRlcyBgYGZnZXRgYCwgYGBmc2V0YGAsIGFuZAogICAgYGBmZGVsYGAgY29ycmVzcG9uZGluZyB0byB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIGRvY3N0cmluZ3Mgb2YgcHJvcGVydHkgb2JqZWN0cyBhcmUgbm93IHdyaXRlYWJsZS4KKwogCiAuLiBfZnVuYy1yYW5nZToKIC4uIGZ1bmN0aW9uOjogcmFuZ2Uoc3RvcCkKQEAgLTEyMTgsOCArMTIzNCw4IEBACiAuLiBmdW5jdGlvbjo6IHJvdW5kKG51bWJlclssIG5kaWdpdHNdKQogCiAgICBSZXR1cm4gdGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlICpudW1iZXIqIHJvdW5kZWQgdG8gKm5kaWdpdHMqIGRpZ2l0cyBhZnRlcgotICAgdGhlIGRlY2ltYWwgcG9pbnQuICBJZiAqbmRpZ2l0cyogaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gemVyby4gRGVsZWdhdGVzCi0gICB0byBgYG51bWJlci5fX3JvdW5kX18obmRpZ2l0cylgYC4KKyAgIHRoZSBkZWNpbWFsIHBvaW50LiAgSWYgKm5kaWdpdHMqIGlzIG9taXR0ZWQsIGl0IHJldHVybnMgdGhlIG5lYXJlc3QgaW50ZWdlcgorICAgdG8gaXRzIGlucHV0LiAgRGVsZWdhdGVzIHRvIGBgbnVtYmVyLl9fcm91bmRfXyhuZGlnaXRzKWBgLgogCiAgICBGb3IgdGhlIGJ1aWx0LWluIHR5cGVzIHN1cHBvcnRpbmcgOmZ1bmM6YHJvdW5kYCwgdmFsdWVzIGFyZSByb3VuZGVkIHRvIHRoZQogICAgY2xvc2VzdCBtdWx0aXBsZSBvZiAxMCB0byB0aGUgcG93ZXIgbWludXMgKm5kaWdpdHMqOyBpZiB0d28gbXVsdGlwbGVzIGFyZQpAQCAtMTQwNCw3ICsxNDIwLDcgQEAKIAogICAgRm9yIHByYWN0aWNhbCBzdWdnZXN0aW9ucyBvbiBob3cgdG8gZGVzaWduIGNvb3BlcmF0aXZlIGNsYXNzZXMgdXNpbmcKICAgIDpmdW5jOmBzdXBlcmAsIHNlZSBgZ3VpZGUgdG8gdXNpbmcgc3VwZXIoKQotICAgPGh0dHA6Ly9yaGV0dGluZ2VyLndvcmRwcmVzcy5jb20vMjAxMS8wNS8yNi9zdXBlci1jb25zaWRlcmVkLXN1cGVyLz5gXy4KKyAgIDxodHRwczovL3JoZXR0aW5nZXIud29yZHByZXNzLmNvbS8yMDExLzA1LzI2L3N1cGVyLWNvbnNpZGVyZWQtc3VwZXIvPmBfLgogCiAKIC4uIF9mdW5jLXR1cGxlOgpAQCAtMTQzMCwxMSArMTQ0NiwxMiBAQAogCiAgICBXaXRoIHRocmVlIGFyZ3VtZW50cywgcmV0dXJuIGEgbmV3IHR5cGUgb2JqZWN0LiAgVGhpcyBpcyBlc3NlbnRpYWxseSBhCiAgICBkeW5hbWljIGZvcm0gb2YgdGhlIDprZXl3b3JkOmBjbGFzc2Agc3RhdGVtZW50LiBUaGUgKm5hbWUqIHN0cmluZyBpcyB0aGUKLSAgIGNsYXNzIG5hbWUgYW5kIGJlY29tZXMgdGhlIDphdHRyOmB+Y2xhc3MuX19uYW1lX19gIGF0dHJpYnV0ZTsgdGhlICpiYXNlcyoKKyAgIGNsYXNzIG5hbWUgYW5kIGJlY29tZXMgdGhlIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgYXR0cmlidXRlOyB0aGUgKmJhc2VzKgogICAgdHVwbGUgaXRlbWl6ZXMgdGhlIGJhc2UgY2xhc3NlcyBhbmQgYmVjb21lcyB0aGUgOmF0dHI6YH5jbGFzcy5fX2Jhc2VzX19gCiAgICBhdHRyaWJ1dGU7IGFuZCB0aGUgKmRpY3QqIGRpY3Rpb25hcnkgaXMgdGhlIG5hbWVzcGFjZSBjb250YWluaW5nIGRlZmluaXRpb25zCi0gICBmb3IgY2xhc3MgYm9keSBhbmQgYmVjb21lcyB0aGUgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGF0dHJpYnV0ZS4gIEZvcgotICAgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0d28gc3RhdGVtZW50cyBjcmVhdGUgaWRlbnRpY2FsIDpjbGFzczpgdHlwZWAgb2JqZWN0czoKKyAgIGZvciBjbGFzcyBib2R5IGFuZCBpcyBjb3BpZWQgdG8gYSBzdGFuZGFyZCBkaWN0aW9uYXJ5IHRvIGJlY29tZSB0aGUKKyAgIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBhdHRyaWJ1dGUuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0d28KKyAgIHN0YXRlbWVudHMgY3JlYXRlIGlkZW50aWNhbCA6Y2xhc3M6YHR5cGVgIG9iamVjdHM6CiAKICAgICAgID4+PiBjbGFzcyBYOgogICAgICAgLi4uICAgICBhID0gMQpAQCAtMTQ0NywxMiArMTQ2NCwxMiBAQAogLi4gZnVuY3Rpb246OiB2YXJzKFtvYmplY3RdKQogCiAgICBSZXR1cm4gdGhlIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBhdHRyaWJ1dGUgZm9yIGEgbW9kdWxlLCBjbGFzcywgaW5zdGFuY2UsCi0gICBvciBhbnkgb3RoZXIgb2JqZWN0IHdpdGggYSA6YXR0cjpgX19kaWN0X19gIGF0dHJpYnV0ZS4KKyAgIG9yIGFueSBvdGhlciBvYmplY3Qgd2l0aCBhIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBhdHRyaWJ1dGUuCiAKLSAgIE9iamVjdHMgc3VjaCBhcyBtb2R1bGVzIGFuZCBpbnN0YW5jZXMgaGF2ZSBhbiB1cGRhdGVhYmxlIDphdHRyOmBfX2RpY3RfX2AKKyAgIE9iamVjdHMgc3VjaCBhcyBtb2R1bGVzIGFuZCBpbnN0YW5jZXMgaGF2ZSBhbiB1cGRhdGVhYmxlIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYAogICAgYXR0cmlidXRlOyBob3dldmVyLCBvdGhlciBvYmplY3RzIG1heSBoYXZlIHdyaXRlIHJlc3RyaWN0aW9ucyBvbiB0aGVpcgotICAgOmF0dHI6YF9fZGljdF9fYCBhdHRyaWJ1dGVzIChmb3IgZXhhbXBsZSwgY2xhc3NlcyB1c2UgYQotICAgZGljdHByb3h5IHRvIHByZXZlbnQgZGlyZWN0IGRpY3Rpb25hcnkgdXBkYXRlcykuCisgICA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlcyAoZm9yIGV4YW1wbGUsIGNsYXNzZXMgdXNlIGEKKyAgIDpjbGFzczpgdHlwZXMuTWFwcGluZ1Byb3h5VHlwZWAgdG8gcHJldmVudCBkaXJlY3QgZGljdGlvbmFyeSB1cGRhdGVzKS4KIAogICAgV2l0aG91dCBhbiBhcmd1bWVudCwgOmZ1bmM6YHZhcnNgIGFjdHMgbGlrZSA6ZnVuYzpgbG9jYWxzYC4gIE5vdGUsIHRoZQogICAgbG9jYWxzIGRpY3Rpb25hcnkgaXMgb25seSB1c2VmdWwgZm9yIHJlYWRzIHNpbmNlIHVwZGF0ZXMgdG8gdGhlIGxvY2FscwpAQCAtMTQ4NCw3ICsxNTAxLDkgQEAKIAogICAgVGhlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvcmRlciBvZiB0aGUgaXRlcmFibGVzIGlzIGd1YXJhbnRlZWQuIFRoaXMKICAgIG1ha2VzIHBvc3NpYmxlIGFuIGlkaW9tIGZvciBjbHVzdGVyaW5nIGEgZGF0YSBzZXJpZXMgaW50byBuLWxlbmd0aCBncm91cHMKLSAgIHVzaW5nIGBgemlwKCpbaXRlcihzKV0qbilgYC4KKyAgIHVzaW5nIGBgemlwKCpbaXRlcihzKV0qbilgYC4gIFRoaXMgcmVwZWF0cyB0aGUgKnNhbWUqIGl0ZXJhdG9yIGBgbmBgIHRpbWVzCisgICBzbyB0aGF0IGVhY2ggb3V0cHV0IHR1cGxlIGhhcyB0aGUgcmVzdWx0IG9mIGBgbmBgIGNhbGxzIHRvIHRoZSBpdGVyYXRvci4KKyAgIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZGl2aWRpbmcgdGhlIGlucHV0IGludG8gbi1sZW5ndGggY2h1bmtzLgogCiAgICA6ZnVuYzpgemlwYCBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggdW5lcXVhbCBsZW5ndGggaW5wdXRzIHdoZW4geW91IGRvbid0CiAgICBjYXJlIGFib3V0IHRyYWlsaW5nLCB1bm1hdGNoZWQgdmFsdWVzIGZyb20gdGhlIGxvbmdlciBpdGVyYWJsZXMuICBJZiB0aG9zZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKaW5kZXggNDZhYTg4Ny4uMTI3ZTNmYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CkBAIC0zLDYgKzMsNyBAQAogCiAuLiBtb2R1bGU6OiBmdW5jdG9vbHMKICAgIDpzeW5vcHNpczogSGlnaGVyLW9yZGVyIGZ1bmN0aW9ucyBhbmQgb3BlcmF0aW9ucyBvbiBjYWxsYWJsZSBvYmplY3RzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBQZXRlciBIYXJyaXMgPHNjYXZAYmx1ZXlvbmRlci5jby51az4KIC4uIG1vZHVsZWF1dGhvcjo6IFJheW1vbmQgSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KIC4uIG1vZHVsZWF1dGhvcjo6IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW5AZ21haWwuY29tPgpAQCAtNzMsNyArNzQsNyBAQAogICAgYnlwYXNzaW5nIHRoZSBjYWNoZSwgb3IgZm9yIHJld3JhcHBpbmcgdGhlIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgY2FjaGUuCiAKICAgIEFuIGBMUlUgKGxlYXN0IHJlY2VudGx5IHVzZWQpIGNhY2hlCi0gICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zI0V4YW1wbGVzPmBfIHdvcmtzCisgICA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FjaGVfYWxnb3JpdGhtcyNFeGFtcGxlcz5gXyB3b3JrcwogICAgYmVzdCB3aGVuIHRoZSBtb3N0IHJlY2VudCBjYWxscyBhcmUgdGhlIGJlc3QgcHJlZGljdG9ycyBvZiB1cGNvbWluZyBjYWxscyAoZm9yCiAgICBleGFtcGxlLCB0aGUgbW9zdCBwb3B1bGFyIGFydGljbGVzIG9uIGEgbmV3cyBzZXJ2ZXIgdGVuZCB0byBjaGFuZ2UgZWFjaCBkYXkpLgogICAgVGhlIGNhY2hlJ3Mgc2l6ZSBsaW1pdCBhc3N1cmVzIHRoYXQgdGhlIGNhY2hlIGRvZXMgbm90IGdyb3cgd2l0aG91dCBib3VuZCBvbgpAQCAtOTksOSArMTAwLDkgQEAKICAgICAgICAgQ2FjaGVJbmZvKGhpdHM9MywgbWlzc2VzPTgsIG1heHNpemU9MzIsIGN1cnJzaXplPTgpCiAKICAgIEV4YW1wbGUgb2YgZWZmaWNpZW50bHkgY29tcHV0aW5nCi0gICBgRmlib25hY2NpIG51bWJlcnMgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlib25hY2NpX251bWJlcj5gXworICAgYEZpYm9uYWNjaSBudW1iZXJzIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaWJvbmFjY2lfbnVtYmVyPmBfCiAgICB1c2luZyBhIGNhY2hlIHRvIGltcGxlbWVudCBhCi0gICBgZHluYW1pYyBwcm9ncmFtbWluZyA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EeW5hbWljX3Byb2dyYW1taW5nPmBfCisgICBgZHluYW1pYyBwcm9ncmFtbWluZyA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRHluYW1pY19wcm9ncmFtbWluZz5gXwogICAgdGVjaG5pcXVlOjoKIAogICAgICAgICBAbHJ1X2NhY2hlKG1heHNpemU9Tm9uZSkKQEAgLTE3Niw3ICsxNzcsNyBAQAogICAgICAgICAgIGRlZiBuZXdmdW5jKCpmYXJncywgKipma2V5d29yZHMpOgogICAgICAgICAgICAgICBuZXdrZXl3b3JkcyA9IGtleXdvcmRzLmNvcHkoKQogICAgICAgICAgICAgICBuZXdrZXl3b3Jkcy51cGRhdGUoZmtleXdvcmRzKQotICAgICAgICAgICAgICByZXR1cm4gZnVuYygqKGFyZ3MgKyBmYXJncyksICoqbmV3a2V5d29yZHMpCisgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqZmFyZ3MsICoqbmV3a2V5d29yZHMpCiAgICAgICAgICAgbmV3ZnVuYy5mdW5jID0gZnVuYwogICAgICAgICAgIG5ld2Z1bmMuYXJncyA9IGFyZ3MKICAgICAgICAgICBuZXdmdW5jLmtleXdvcmRzID0ga2V5d29yZHMKQEAgLTM3NSwxMCArMzc2LDEwIEBACiAgICBhc3NpZ25lZCBkaXJlY3RseSB0byB0aGUgbWF0Y2hpbmcgYXR0cmlidXRlcyBvbiB0aGUgd3JhcHBlciBmdW5jdGlvbiBhbmQgd2hpY2gKICAgIGF0dHJpYnV0ZXMgb2YgdGhlIHdyYXBwZXIgZnVuY3Rpb24gYXJlIHVwZGF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGVzCiAgICBmcm9tIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGVzZSBhcmd1bWVudHMgYXJlIHRoZQotICAgbW9kdWxlIGxldmVsIGNvbnN0YW50cyAqV1JBUFBFUl9BU1NJR05NRU5UUyogKHdoaWNoIGFzc2lnbnMgdG8gdGhlIHdyYXBwZXIKLSAgIGZ1bmN0aW9uJ3MgKl9fbmFtZV9fKiwgKl9fbW9kdWxlX18qLCAqX19hbm5vdGF0aW9uc19fKiBhbmQgKl9fZG9jX18qLCB0aGUKLSAgIGRvY3VtZW50YXRpb24gc3RyaW5nKSBhbmQgKldSQVBQRVJfVVBEQVRFUyogKHdoaWNoIHVwZGF0ZXMgdGhlIHdyYXBwZXIKLSAgIGZ1bmN0aW9uJ3MgKl9fZGljdF9fKiwgaS5lLiB0aGUgaW5zdGFuY2UgZGljdGlvbmFyeSkuCisgICBtb2R1bGUgbGV2ZWwgY29uc3RhbnRzIGBgV1JBUFBFUl9BU1NJR05NRU5UU2BgICh3aGljaCBhc3NpZ25zIHRvIHRoZSB3cmFwcGVyCisgICBmdW5jdGlvbidzIGBgX19tb2R1bGVfX2BgLCBgYF9fbmFtZV9fYGAsIGBgX19xdWFsbmFtZV9fYGAsIGBgX19hbm5vdGF0aW9uc19fYGAKKyAgIGFuZCBgYF9fZG9jX19gYCwgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nKSBhbmQgYGBXUkFQUEVSX1VQREFURVNgYCAod2hpY2gKKyAgIHVwZGF0ZXMgdGhlIHdyYXBwZXIgZnVuY3Rpb24ncyBgYF9fZGljdF9fYGAsIGkuZS4gdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkpLgogCiAgICBUbyBhbGxvdyBhY2Nlc3MgdG8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGZvciBpbnRyb3NwZWN0aW9uIGFuZCBvdGhlciBwdXJwb3NlcwogICAgKGUuZy4gYnlwYXNzaW5nIGEgY2FjaGluZyBkZWNvcmF0b3Igc3VjaCBhcyA6ZnVuYzpgbHJ1X2NhY2hlYCksIHRoaXMgZnVuY3Rpb24KQEAgLTQ3Myw3ICs0NzQsNyBAQAogCiA6Y2xhc3M6YHBhcnRpYWxgIG9iamVjdHMgYXJlIGxpa2UgOmNsYXNzOmBmdW5jdGlvbmAgb2JqZWN0cyBpbiB0aGF0IHRoZXkgYXJlCiBjYWxsYWJsZSwgd2VhayByZWZlcmVuY2FibGUsIGFuZCBjYW4gaGF2ZSBhdHRyaWJ1dGVzLiAgVGhlcmUgYXJlIHNvbWUgaW1wb3J0YW50Ci1kaWZmZXJlbmNlcy4gIEZvciBpbnN0YW5jZSwgdGhlIDphdHRyOmBfX25hbWVfX2AgYW5kIDphdHRyOmBfX2RvY19fYCBhdHRyaWJ1dGVzCitkaWZmZXJlbmNlcy4gIEZvciBpbnN0YW5jZSwgdGhlIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgYW5kIDphdHRyOmBfX2RvY19fYCBhdHRyaWJ1dGVzCiBhcmUgbm90IGNyZWF0ZWQgYXV0b21hdGljYWxseS4gIEFsc28sIDpjbGFzczpgcGFydGlhbGAgb2JqZWN0cyBkZWZpbmVkIGluCiBjbGFzc2VzIGJlaGF2ZSBsaWtlIHN0YXRpYyBtZXRob2RzIGFuZCBkbyBub3QgdHJhbnNmb3JtIGludG8gYm91bmQgbWV0aG9kcwogZHVyaW5nIGluc3RhbmNlIGF0dHJpYnV0ZSBsb29rLXVwLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2MucnN0IGIvRG9jL2xpYnJhcnkvZ2MucnN0CmluZGV4IDgxMzU1NDIuLjRhZjE2YTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2djLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nYy5yc3QKQEAgLTMsOSArMywxMSBAQAogCiAuLiBtb2R1bGU6OiBnYwogICAgOnN5bm9wc2lzOiBJbnRlcmZhY2UgdG8gdGhlIGN5Y2xlLWRldGVjdGluZyBnYXJiYWdlIGNvbGxlY3Rvci4KKwogLi4gbW9kdWxlYXV0aG9yOjogTmVpbCBTY2hlbWVuYXVlciA8bmFzQGFyY3RyaXguY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IE5laWwgU2NoZW1lbmF1ZXIgPG5hc0BhcmN0cml4LmNvbT4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBvcHRpb25hbCBnYXJiYWdlIGNvbGxlY3Rvci4gIEl0CiBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBkaXNhYmxlIHRoZSBjb2xsZWN0b3IsIHR1bmUgdGhlIGNvbGxlY3Rpb24gZnJlcXVlbmN5LApAQCAtMTg2LDcgKzE4OCw3IEBACiAgICBhZGRlZCB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICAgICBJZiB0aGlzIGxpc3QgaXMgbm9uLWVtcHR5IGF0IGludGVycHJldGVyIHNodXRkb3duLCBhCisgICAgICBJZiB0aGlzIGxpc3QgaXMgbm9uLWVtcHR5IGF0IDp0ZXJtOmBpbnRlcnByZXRlciBzaHV0ZG93bmAsIGEKICAgICAgIDpleGM6YFJlc291cmNlV2FybmluZ2AgaXMgZW1pdHRlZCwgd2hpY2ggaXMgc2lsZW50IGJ5IGRlZmF1bHQuICBJZgogICAgICAgOmNvbnN0OmBERUJVR19VTkNPTExFQ1RBQkxFYCBpcyBzZXQsIGluIGFkZGl0aW9uIGFsbCB1bmNvbGxlY3RhYmxlIG9iamVjdHMKICAgICAgIGFyZSBwcmludGVkLgpAQCAtMjUyLDggKzI1NCw4IEBACiAgICB0byB0aGUgYGBnYXJiYWdlYGAgbGlzdC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgICAgIEFsc28gcHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSA6ZGF0YTpgZ2FyYmFnZWAgbGlzdCBhdCBpbnRlcnByZXRlcgotICAgICAgc2h1dGRvd24sIGlmIGl0IGlzbid0IGVtcHR5LgorICAgICAgQWxzbyBwcmludCB0aGUgY29udGVudHMgb2YgdGhlIDpkYXRhOmBnYXJiYWdlYCBsaXN0IGF0CisgICAgICA6dGVybTpgaW50ZXJwcmV0ZXIgc2h1dGRvd25gLCBpZiBpdCBpc24ndCBlbXB0eS4KIAogLi4gZGF0YTo6IERFQlVHX1NBVkVBTEwKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2V0b3B0LnJzdCBiL0RvYy9saWJyYXJ5L2dldG9wdC5yc3QKaW5kZXggZjlhMWU1My4uMzM2ZGVhYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2V0b3B0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9nZXRvcHQucnN0CkBAIC03LDggKzcsNiBAQAogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9nZXRvcHQucHlgCiAKLS0tLS0tLS0tLS0tLS0tCi0KIC4uIG5vdGU6OgogCiAgICBUaGUgOm1vZDpgZ2V0b3B0YCBtb2R1bGUgaXMgYSBwYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zIHdob3NlIEFQSSBpcwpAQCAtMTcsNiArMTUsOCBAQAogICAgbGVzcyBjb2RlIGFuZCBnZXQgYmV0dGVyIGhlbHAgYW5kIGVycm9yIG1lc3NhZ2VzIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGUKICAgIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUgaW5zdGVhZC4KIAorLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgaGVscHMgc2NyaXB0cyB0byBwYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBpbiBgYHN5cy5hcmd2YGAuCiBJdCBzdXBwb3J0cyB0aGUgc2FtZSBjb252ZW50aW9ucyBhcyB0aGUgVW5peCA6YzpmdW5jOmBnZXRvcHRgIGZ1bmN0aW9uIChpbmNsdWRpbmcKIHRoZSBzcGVjaWFsIG1lYW5pbmdzIG9mIGFyZ3VtZW50cyBvZiB0aGUgZm9ybSAnYGAtYGAnIGFuZCAnYGAtLWBgJykuICBMb25nCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiaG86diIsIFsiaGVscCIsICJvdXRwdXQ9Il0pCiAgICAgICAgZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICMgcHJpbnQgaGVscCBpbmZvcm1hdGlvbiBhbmQgZXhpdDoKLSAgICAgICAgICAgcHJpbnQoZXJyKSAjIHdpbGwgcHJpbnQgc29tZXRoaW5nIGxpa2UgIm9wdGlvbiAtYSBub3QgcmVjb2duaXplZCIKKyAgICAgICAgICAgcHJpbnQoZXJyKSAgIyB3aWxsIHByaW50IHNvbWV0aGluZyBsaWtlICJvcHRpb24gLWEgbm90IHJlY29nbml6ZWQiCiAgICAgICAgICAgIHVzYWdlKCkKICAgICAgICAgICAgc3lzLmV4aXQoMikKICAgICAgICBvdXRwdXQgPSBOb25lCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nZXRwYXNzLnJzdCBiL0RvYy9saWJyYXJ5L2dldHBhc3MucnN0CmluZGV4IDIxMTU2M2UuLjVlYjlmMDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2dldHBhc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2dldHBhc3MucnN0CkBAIC0zLDEwICszLDE1IEBACiAKIC4uIG1vZHVsZTo6IGdldHBhc3MKICAgIDpzeW5vcHNpczogUG9ydGFibGUgcmVhZGluZyBvZiBwYXNzd29yZHMgYW5kIHJldHJpZXZhbCBvZiB0aGUgdXNlcmlkLgorCiAuLiBtb2R1bGVhdXRob3I6OiBQaWVycyBMYXVkZXIgPHBpZXJzQGNzLnN1Lm96LmF1PgogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAuLiBXaW5kb3dzICgmIE1hYz8pIHN1cHBvcnQgYnkgR3VpZG8gdmFuIFJvc3N1bS4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZ2V0cGFzcy5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGdldHBhc3NgIG1vZHVsZSBwcm92aWRlcyB0d28gZnVuY3Rpb25zOgogCiAKQEAgLTIzLDggKzI4LDYgQEAKICAgIGEgd2FybmluZyBtZXNzYWdlIHRvICpzdHJlYW0qIGFuZCByZWFkaW5nIGZyb20gYGBzeXMuc3RkaW5gYCBhbmQKICAgIGlzc3VpbmcgYSA6ZXhjOmBHZXRQYXNzV2FybmluZ2AuCiAKLSAgIEF2YWlsYWJpbGl0eTogTWFjaW50b3NoLCBVbml4LCBXaW5kb3dzLgotCiAgICAuLiBub3RlOjoKICAgICAgIElmIHlvdSBjYWxsIGdldHBhc3MgZnJvbSB3aXRoaW4gSURMRSwgdGhlIGlucHV0IG1heSBiZSBkb25lIGluIHRoZQogICAgICAgdGVybWluYWwgeW91IGxhdW5jaGVkIElETEUgZnJvbSByYXRoZXIgdGhhbiB0aGUgaWRsZSB3aW5kb3cgaXRzZWxmLgpAQCAtMzYsNyArMzksNyBAQAogCiAuLiBmdW5jdGlvbjo6IGdldHVzZXIoKQogCi0gICBSZXR1cm4gdGhlICJsb2dpbiBuYW1lIiBvZiB0aGUgdXNlci4gQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgorICAgUmV0dXJuIHRoZSAibG9naW4gbmFtZSIgb2YgdGhlIHVzZXIuCiAKICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgOmVudnZhcjpgTE9HTkFNRWAsCiAgICA6ZW52dmFyOmBVU0VSYCwgOmVudnZhcjpgTE5BTUVgIGFuZCA6ZW52dmFyOmBVU0VSTkFNRWAsIGluIG9yZGVyLCBhbmQgcmV0dXJucwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2V0dGV4dC5yc3QgYi9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdAppbmRleCBmZjIzYjU5Li5lYTQzOWI1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogZ2V0dGV4dAogICAgOnN5bm9wc2lzOiBNdWx0aWxpbmd1YWwgaW50ZXJuYXRpb25hbGl6YXRpb24gc2VydmljZXMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IEJhcnJ5IEEuIFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBCYXJyeSBBLiBXYXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+CiAKQEAgLTM0NCw5ICszNDUsOSBAQAogVGhlIGVudGlyZSBzZXQgb2Yga2V5L3ZhbHVlIHBhaXJzIGFyZSBwbGFjZWQgaW50byBhIGRpY3Rpb25hcnkgYW5kIHNldCBhcyB0aGUKICJwcm90ZWN0ZWQiIDphdHRyOmBfaW5mb2AgaW5zdGFuY2UgdmFyaWFibGUuCiAKLUlmIHRoZSA6ZmlsZTpgLm1vYCBmaWxlJ3MgbWFnaWMgbnVtYmVyIGlzIGludmFsaWQsIG9yIGlmIG90aGVyIHByb2JsZW1zIG9jY3VyCi13aGlsZSByZWFkaW5nIHRoZSBmaWxlLCBpbnN0YW50aWF0aW5nIGEgOmNsYXNzOmBHTlVUcmFuc2xhdGlvbnNgIGNsYXNzIGNhbiByYWlzZQotOmV4YzpgT1NFcnJvcmAuCitJZiB0aGUgOmZpbGU6YC5tb2AgZmlsZSdzIG1hZ2ljIG51bWJlciBpcyBpbnZhbGlkLCB0aGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgaXMKK3VuZXhwZWN0ZWQsIG9yIGlmIG90aGVyIHByb2JsZW1zIG9jY3VyIHdoaWxlIHJlYWRpbmcgdGhlIGZpbGUsIGluc3RhbnRpYXRpbmcgYQorOmNsYXNzOmBHTlVUcmFuc2xhdGlvbnNgIGNsYXNzIGNhbiByYWlzZSA6ZXhjOmBPU0Vycm9yYC4KIAogVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSBvdmVycmlkZGVuIGZyb20gdGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb246CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2dsb2IucnN0IGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKaW5kZXggOGU5YWYzNy4uMzI4ZWVmMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKQEAgLTQsMTEgKzQsMTAgQEAKIC4uIG1vZHVsZTo6IGdsb2IKICAgIDpzeW5vcHNpczogVW5peCBzaGVsbCBzdHlsZSBwYXRobmFtZSBwYXR0ZXJuIGV4cGFuc2lvbi4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZ2xvYi5weWAKIAogLi4gaW5kZXg6OiBzaW5nbGU6IGZpbGVuYW1lczsgcGF0aG5hbWUgZXhwYW5zaW9uCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2dsb2IucHlgCi0KIC0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBnbG9iYCBtb2R1bGUgZmluZHMgYWxsIHRoZSBwYXRobmFtZXMgbWF0Y2hpbmcgYSBzcGVjaWZpZWQgcGF0dGVybgpAQCAtMjksNyArMjgsNyBAQAogICAgVGhlIDptb2Q6YHBhdGhsaWJgIG1vZHVsZSBvZmZlcnMgaGlnaC1sZXZlbCBwYXRoIG9iamVjdHMuCiAKIAotLi4gZnVuY3Rpb246OiBnbG9iKHBhdGhuYW1lKQorLi4gZnVuY3Rpb246OiBnbG9iKHBhdGhuYW1lLCAqLCByZWN1cnNpdmU9RmFsc2UpCiAKICAgIFJldHVybiBhIHBvc3NpYmx5LWVtcHR5IGxpc3Qgb2YgcGF0aCBuYW1lcyB0aGF0IG1hdGNoICpwYXRobmFtZSosIHdoaWNoIG11c3QgYmUKICAgIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBwYXRoIHNwZWNpZmljYXRpb24uICpwYXRobmFtZSogY2FuIGJlIGVpdGhlciBhYnNvbHV0ZQpAQCAtMzcsOCArMzYsMTkgQEAKICAgIDpmaWxlOmAuLi8uLi9Ub29scy9cKi9cKi5naWZgKSwgYW5kIGNhbiBjb250YWluIHNoZWxsLXN0eWxlIHdpbGRjYXJkcy4gQnJva2VuCiAgICBzeW1saW5rcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdHMgKGFzIGluIHRoZSBzaGVsbCkuCiAKKyAgIElmICpyZWN1cnNpdmUqIGlzIHRydWUsIHRoZSBwYXR0ZXJuICJgYCoqYGAiIHdpbGwgbWF0Y2ggYW55IGZpbGVzIGFuZCB6ZXJvIG9yCisgICBtb3JlIGRpcmVjdG9yaWVzIGFuZCBzdWJkaXJlY3Rvcmllcy4gIElmIHRoZSBwYXR0ZXJuIGlzIGZvbGxvd2VkIGJ5IGFuCisgICBgYG9zLnNlcGBgLCBvbmx5IGRpcmVjdG9yaWVzIGFuZCBzdWJkaXJlY3RvcmllcyBtYXRjaC4KIAotLi4gZnVuY3Rpb246OiBpZ2xvYihwYXRobmFtZSkKKyAgIC4uIG5vdGU6OgorICAgICAgVXNpbmcgdGhlICJgYCoqYGAiIHBhdHRlcm4gaW4gbGFyZ2UgZGlyZWN0b3J5IHRyZWVzIG1heSBjb25zdW1lCisgICAgICBhbiBpbm9yZGluYXRlIGFtb3VudCBvZiB0aW1lLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgU3VwcG9ydCBmb3IgcmVjdXJzaXZlIGdsb2JzIHVzaW5nICJgYCoqYGAiLgorCisKKy4uIGZ1bmN0aW9uOjogaWdsb2IocGF0aG5hbWUsIHJlY3Vyc2l2ZT1GYWxzZSkKIAogICAgUmV0dXJuIGFuIDp0ZXJtOmBpdGVyYXRvcmAgd2hpY2ggeWllbGRzIHRoZSBzYW1lIHZhbHVlcyBhcyA6ZnVuYzpgZ2xvYmAKICAgIHdpdGhvdXQgYWN0dWFsbHkgc3RvcmluZyB0aGVtIGFsbCBzaW11bHRhbmVvdXNseS4KQEAgLTU1LDggKzY1LDkgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAKLUZvciBleGFtcGxlLCBjb25zaWRlciBhIGRpcmVjdG9yeSBjb250YWluaW5nIG9ubHkgdGhlIGZvbGxvd2luZyBmaWxlczoKLTpmaWxlOmAxLmdpZmAsIDpmaWxlOmAyLnR4dGAsIGFuZCA6ZmlsZTpgY2FyZC5naWZgLiAgOmZ1bmM6YGdsb2JgIHdpbGwgcHJvZHVjZQorRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBmaWxlczoKKzpmaWxlOmAxLmdpZmAsIDpmaWxlOmAyLnR4dGAsIDpmaWxlOmBjYXJkLmdpZmAgYW5kIGEgc3ViZGlyZWN0b3J5IDpmaWxlOmBzdWJgCit3aGljaCBjb250YWlucyBvbmx5IHRoZSBmaWxlIDpmaWxlOmAzLnR4dGAuICA6ZnVuYzpgZ2xvYmAgd2lsbCBwcm9kdWNlCiB0aGUgZm9sbG93aW5nIHJlc3VsdHMuICBOb3RpY2UgaG93IGFueSBsZWFkaW5nIGNvbXBvbmVudHMgb2YgdGhlIHBhdGggYXJlCiBwcmVzZXJ2ZWQuIDo6CiAKQEAgLTY3LDYgKzc4LDEwIEBACiAgICBbJzEuZ2lmJywgJ2NhcmQuZ2lmJ10KICAgID4+PiBnbG9iLmdsb2IoJz8uZ2lmJykKICAgIFsnMS5naWYnXQorICAgPj4+IGdsb2IuZ2xvYignKiovKi50eHQnLCByZWN1cnNpdmU9VHJ1ZSkKKyAgIFsnMi50eHQnLCAnc3ViLzMudHh0J10KKyAgID4+PiBnbG9iLmdsb2IoJy4vKiovJywgcmVjdXJzaXZlPVRydWUpCisgICBbJy4vJywgJy4vc3ViLyddCiAKIElmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgZmlsZXMgc3RhcnRpbmcgd2l0aCBgYC5gYCB0aGV5IHdvbid0IGJlIG1hdGNoZWQgYnkKIGRlZmF1bHQuIEZvciBleGFtcGxlLCBjb25zaWRlciBhIGRpcmVjdG9yeSBjb250YWluaW5nIDpmaWxlOmBjYXJkLmdpZmAgYW5kCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ncnAucnN0IGIvRG9jL2xpYnJhcnkvZ3JwLnJzdAppbmRleCA4ODgyMTQwLi5hMzBlNjIyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ncnAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2dycC5yc3QKQEAgLTUsNiArNSw3IEBACiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogVGhlIGdyb3VwIGRhdGFiYXNlIChnZXRncm5hbSgpIGFuZCBmcmllbmRzKS4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbml4IGdyb3VwIGRhdGFiYXNlLiBJdCBpcyBhdmFpbGFibGUgb24gYWxsCiBVbml4IHZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ3ppcC5yc3QgYi9Eb2MvbGlicmFyeS9nemlwLnJzdAppbmRleCAzNTVjZjljLi43OTJkNTdhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nemlwLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nemlwLnJzdApAQCAtOTAsMTMgKzkwLDkgQEAKICAgIGlzIG5vIGNvbXByZXNzaW9uLiBUaGUgZGVmYXVsdCBpcyBgYDlgYC4KIAogICAgVGhlICptdGltZSogYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgbnVtZXJpYyB0aW1lc3RhbXAgdG8gYmUgd3JpdHRlbiB0bwotICAgdGhlIHN0cmVhbSB3aGVuIGNvbXByZXNzaW5nLiAgQWxsIDpwcm9ncmFtOmBnemlwYCBjb21wcmVzc2VkIHN0cmVhbXMgYXJlCi0gICByZXF1aXJlZCB0byBjb250YWluIGEgdGltZXN0YW1wLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlIGN1cnJlbnQKLSAgIHRpbWUgaXMgdXNlZC4gIFRoaXMgbW9kdWxlIGlnbm9yZXMgdGhlIHRpbWVzdGFtcCB3aGVuIGRlY29tcHJlc3Npbmc7Ci0gICBob3dldmVyLCBzb21lIHByb2dyYW1zLCBzdWNoIGFzIDpwcm9ncmFtOmBndW56aXBgXCAsIG1ha2UgdXNlIG9mIGl0LgotICAgVGhlIGZvcm1hdCBvZiB0aGUgdGltZXN0YW1wIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIHJldHVybiB2YWx1ZSBvZgotICAgYGB0aW1lLnRpbWUoKWBgIGFuZCBvZiB0aGUgYGBzdF9tdGltZWBgIGF0dHJpYnV0ZSBvZiB0aGUgb2JqZWN0IHJldHVybmVkCi0gICBieSBgYG9zLnN0YXQoKWBgLgorICAgdGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgZmllbGQgaW4gdGhlIHN0cmVhbSB3aGVuIGNvbXByZXNzaW5nLiAgSXQKKyAgIHNob3VsZCBvbmx5IGJlIHByb3ZpZGVkIGluIGNvbXByZXNzaW9uIG1vZGUuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUKKyAgIGN1cnJlbnQgdGltZSBpcyB1c2VkLiAgU2VlIHRoZSA6YXR0cjpgbXRpbWVgIGF0dHJpYnV0ZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBDYWxsaW5nIGEgOmNsYXNzOmBHemlwRmlsZWAgb2JqZWN0J3MgOm1ldGg6YGNsb3NlYCBtZXRob2QgZG9lcyBub3QgY2xvc2UKICAgICpmaWxlb2JqKiwgc2luY2UgeW91IG1pZ2h0IHdpc2ggdG8gYXBwZW5kIG1vcmUgbWF0ZXJpYWwgYWZ0ZXIgdGhlIGNvbXByZXNzZWQKQEAgLTEwOCw5ICsxMDQsOSBAQAogICAgaW5jbHVkaW5nIGl0ZXJhdGlvbiBhbmQgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuICBPbmx5IHRoZQogICAgOm1ldGg6YHRydW5jYXRlYCBtZXRob2QgaXNuJ3QgaW1wbGVtZW50ZWQuCiAKLSAgIDpjbGFzczpgR3ppcEZpbGVgIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2Q6CisgICA6Y2xhc3M6YEd6aXBGaWxlYCBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kIGFuZCBhdHRyaWJ1dGU6CiAKLSAgIC4uIG1ldGhvZDo6IHBlZWsoW25dKQorICAgLi4gbWV0aG9kOjogcGVlayhuKQogCiAgICAgICBSZWFkICpuKiB1bmNvbXByZXNzZWQgYnl0ZXMgd2l0aG91dCBhZHZhbmNpbmcgdGhlIGZpbGUgcG9zaXRpb24uCiAgICAgICBBdCBtb3N0IG9uZSBzaW5nbGUgcmVhZCBvbiB0aGUgY29tcHJlc3NlZCBzdHJlYW0gaXMgZG9uZSB0byBzYXRpc2Z5CkBAIC0xMjQsOSArMTIwLDIxIEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiBhdHRyaWJ1dGU6OiBtdGltZQorCisgICAgICBXaGVuIGRlY29tcHJlc3NpbmcsIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBmaWVsZCBpbgorICAgICAgdGhlIG1vc3QgcmVjZW50bHkgcmVhZCBoZWFkZXIgbWF5IGJlIHJlYWQgZnJvbSB0aGlzIGF0dHJpYnV0ZSwgYXMgYW4KKyAgICAgIGludGVnZXIuICBUaGUgaW5pdGlhbCB2YWx1ZSBiZWZvcmUgcmVhZGluZyBhbnkgaGVhZGVycyBpcyBgYE5vbmVgYC4KKworICAgICAgQWxsIDpwcm9ncmFtOmBnemlwYCBjb21wcmVzc2VkIHN0cmVhbXMgYXJlIHJlcXVpcmVkIHRvIGNvbnRhaW4gdGhpcworICAgICAgdGltZXN0YW1wIGZpZWxkLiAgU29tZSBwcm9ncmFtcywgc3VjaCBhcyA6cHJvZ3JhbTpgZ3VuemlwYFwgLCBtYWtlIHVzZQorICAgICAgb2YgdGhlIHRpbWVzdGFtcC4gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgdGhlIHJldHVybiB2YWx1ZSBvZgorICAgICAgOmZ1bmM6YHRpbWUudGltZWAgYW5kIHRoZSA6YXR0cjpgfm9zLnN0YXRfcmVzdWx0LnN0X210aW1lYCBhdHRyaWJ1dGUgb2YKKyAgICAgIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgOmZ1bmM6YG9zLnN0YXRgLgorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQogICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLCBhbG9uZyB3aXRoIHRoZQotICAgICAgKm10aW1lKiBhcmd1bWVudC4KKyAgICAgICptdGltZSogY29uc3RydWN0b3IgYXJndW1lbnQgYW5kIDphdHRyOmBtdGltZWAgYXR0cmlidXRlLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgU3VwcG9ydCBmb3IgemVyby1wYWRkZWQgYW5kIHVuc2Vla2FibGUgZmlsZXMgd2FzIGFkZGVkLgpAQCAtMTM3LDYgKzE0NSwxMiBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBgYCd4J2BgIGFuZCBgYCd4YidgYCBtb2Rlcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHdyaXRpbmcgYXJiaXRyYXJ5CisgICAgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gLgorICAgICAgVGhlIDptZXRoOmB+aW8uQnVmZmVyZWRJT0Jhc2UucmVhZGAgbWV0aG9kIG5vdyBhY2NlcHRzIGFuIGFyZ3VtZW50IG9mCisgICAgICBgYE5vbmVgYC4KKwogCiAuLiBmdW5jdGlvbjo6IGNvbXByZXNzKGRhdGEsIGNvbXByZXNzbGV2ZWw9OSkKIApAQCAtMTc1LDkgKzE4OSwxMCBAQAogRXhhbXBsZSBvZiBob3cgdG8gR1pJUCBjb21wcmVzcyBhbiBleGlzdGluZyBmaWxlOjoKIAogICAgaW1wb3J0IGd6aXAKKyAgIGltcG9ydCBzaHV0aWwKICAgIHdpdGggb3BlbignL2hvbWUvam9lL2ZpbGUudHh0JywgJ3JiJykgYXMgZl9pbjoKICAgICAgICB3aXRoIGd6aXAub3BlbignL2hvbWUvam9lL2ZpbGUudHh0Lmd6JywgJ3diJykgYXMgZl9vdXQ6Ci0gICAgICAgICAgIGZfb3V0LndyaXRlbGluZXMoZl9pbikKKyAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKGZfaW4sIGZfb3V0KQogCiBFeGFtcGxlIG9mIGhvdyB0byBHWklQIGNvbXByZXNzIGEgYmluYXJ5IHN0cmluZzo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0IGIvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKaW5kZXggNzY5Zjk2Zi4uMzBiZTMzNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKQEAgLTMsMTYgKzMsMTYgQEAKIAogLi4gbW9kdWxlOjogaGFzaGxpYgogICAgOnN5bm9wc2lzOiBTZWN1cmUgaGFzaCBhbmQgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogR3JlZ29yeSBQLiBTbWl0aCA8Z3JlZ0BrcnlwdG8ub3JnPgogLi4gc2VjdGlvbmF1dGhvcjo6IEdyZWdvcnkgUC4gU21pdGggPGdyZWdAa3J5cHRvLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvaGFzaGxpYi5weWAKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBtZXNzYWdlIGRpZ2VzdCwgTUQ1CiAgICBzaW5nbGU6IHNlY3VyZSBoYXNoIGFsZ29yaXRobSwgU0hBMSwgU0hBMjI0LCBTSEEyNTYsIFNIQTM4NCwgU0hBNTEyCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2hhc2hsaWIucHlgCi0KIC0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBjb21tb24gaW50ZXJmYWNlIHRvIG1hbnkgZGlmZmVyZW50IHNlY3VyZSBoYXNoIGFuZApAQCAtNDEsNyArNDEsNyBAQAogVGhlcmUgaXMgb25lIGNvbnN0cnVjdG9yIG1ldGhvZCBuYW1lZCBmb3IgZWFjaCB0eXBlIG9mIDpkZm46YGhhc2hgLiAgQWxsIHJldHVybgogYSBoYXNoIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNpbXBsZSBpbnRlcmZhY2UuIEZvciBleGFtcGxlOiB1c2UgOmZ1bmM6YHNoYTFgIHRvCiBjcmVhdGUgYSBTSEExIGhhc2ggb2JqZWN0LiBZb3UgY2FuIG5vdyBmZWVkIHRoaXMgb2JqZWN0IHdpdGggOnRlcm06YGJ5dGVzLWxpa2UKLW9iamVjdGBcIHMgKG5vcm1hbGx5IDpjbGFzczpgYnl0ZXNgKSB1c2luZyB0aGUgOm1ldGg6YHVwZGF0ZWAgbWV0aG9kLgorb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCAobm9ybWFsbHkgOmNsYXNzOmBieXRlc2ApIHVzaW5nIHRoZSA6bWV0aDpgdXBkYXRlYCBtZXRob2QuCiBBdCBhbnkgcG9pbnQgeW91IGNhbiBhc2sgaXQgZm9yIHRoZSA6ZGZuOmBkaWdlc3RgIG9mIHRoZQogY29uY2F0ZW5hdGlvbiBvZiB0aGUgZGF0YSBmZWQgdG8gaXQgc28gZmFyIHVzaW5nIHRoZSA6bWV0aDpgZGlnZXN0YCBvcgogOm1ldGg6YGhleGRpZ2VzdGAgbWV0aG9kcy4KQEAgLTE4NSwyMiArMTg1LDIzIEBACiBpbmNsdWRlIGEgYHNhbHQgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NhbHRfJTI4Y3J5cHRvZ3JhcGh5JTI5PmBfLgogCiAKLS4uIGZ1bmN0aW9uOjogcGJrZGYyX2htYWMobmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW49Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcGJrZGYyX2htYWMoaGFzaF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywgZGtsZW49Tm9uZSkKIAogICAgVGhlIGZ1bmN0aW9uIHByb3ZpZGVzIFBLQ1MjNSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyLiBJdAogICAgdXNlcyBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KIAotICAgVGhlIHN0cmluZyAqbmFtZSogaXMgdGhlIGRlc2lyZWQgbmFtZSBvZiB0aGUgaGFzaCBkaWdlc3QgYWxnb3JpdGhtIGZvcgorICAgVGhlIHN0cmluZyAqaGFzaF9uYW1lKiBpcyB0aGUgZGVzaXJlZCBuYW1lIG9mIHRoZSBoYXNoIGRpZ2VzdCBhbGdvcml0aG0gZm9yCiAgICBITUFDLCBlLmcuICdzaGExJyBvciAnc2hhMjU2Jy4gKnBhc3N3b3JkKiBhbmQgKnNhbHQqIGFyZSBpbnRlcnByZXRlZCBhcwogICAgYnVmZmVycyBvZiBieXRlcy4gQXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgc2hvdWxkIGxpbWl0ICpwYXNzd29yZCogdG8KLSAgIGEgc2Vuc2libGUgdmFsdWUgKGUuZy4gMTAyNCkuICpzYWx0KiBzaG91bGQgYmUgYWJvdXQgMTYgb3IgbW9yZSBieXRlcyBmcm9tCisgICBhIHNlbnNpYmxlIGxlbmd0aCAoZS5nLiAxMDI0KS4gKnNhbHQqIHNob3VsZCBiZSBhYm91dCAxNiBvciBtb3JlIGJ5dGVzIGZyb20KICAgIGEgcHJvcGVyIHNvdXJjZSwgZS5nLiA6ZnVuYzpgb3MudXJhbmRvbWAuCiAKLSAgIFRoZSBudW1iZXIgb2YgKnJvdW5kcyogc2hvdWxkIGJlIGNob3NlbiBiYXNlZCBvbiB0aGUgaGFzaCBhbGdvcml0aG0gYW5kCi0gICBjb21wdXRpbmcgcG93ZXIuIEFzIG9mIDIwMTMsIGF0IGxlYXN0IDEwMCwwMDAgcm91bmRzIG9mIFNIQS0yNTYgaXMgc3VnZ2VzdGVkLgorICAgVGhlIG51bWJlciBvZiAqaXRlcmF0aW9ucyogc2hvdWxkIGJlIGNob3NlbiBiYXNlZCBvbiB0aGUgaGFzaCBhbGdvcml0aG0gYW5kCisgICBjb21wdXRpbmcgcG93ZXIuIEFzIG9mIDIwMTMsIGF0IGxlYXN0IDEwMCwwMDAgaXRlcmF0aW9ucyBvZiBTSEEtMjU2IGFyZQorICAgc3VnZ2VzdGVkLgogCiAgICAqZGtsZW4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRlcml2ZWQga2V5LiBJZiAqZGtsZW4qIGlzIGBgTm9uZWBgIHRoZW4gdGhlCi0gICBkaWdlc3Qgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gKm5hbWUqIGlzIHVzZWQsIGUuZy4gNjQgZm9yIFNIQS01MTIuCisgICBkaWdlc3Qgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gKmhhc2hfbmFtZSogaXMgdXNlZCwgZS5nLiA2NCBmb3IgU0hBLTUxMi4KIAogICAgPj4+IGltcG9ydCBoYXNobGliLCBiaW5hc2NpaQogICAgPj4+IGRrID0gaGFzaGxpYi5wYmtkZjJfaG1hYygnc2hhMjU2JywgYidwYXNzd29yZCcsIGInc2FsdCcsIDEwMDAwMCkKQEAgLTIzMSw1ICsyMzIsNSBAQAogICAgICAgV2lraXBlZGlhIGFydGljbGUgd2l0aCBpbmZvcm1hdGlvbiBvbiB3aGljaCBhbGdvcml0aG1zIGhhdmUga25vd24gaXNzdWVzIGFuZAogICAgICAgd2hhdCB0aGF0IG1lYW5zIHJlZ2FyZGluZyB0aGVpciB1c2UuCiAKLSAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI4OTgudHh0CisgICBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjg5OC50eHQKICAgICAgIFBLQ1MgIzU6IFBhc3N3b3JkLUJhc2VkIENyeXB0b2dyYXBoeSBTcGVjaWZpY2F0aW9uIFZlcnNpb24gMi4wCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9oZWFwcS5yc3QgYi9Eb2MvbGlicmFyeS9oZWFwcS5yc3QKaW5kZXggZjg5NzBiZS4uN2UzM2U3NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaGVhcHEucnN0CisrKyBiL0RvYy9saWJyYXJ5L2hlYXBxLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogaGVhcHEKICAgIDpzeW5vcHNpczogSGVhcCBxdWV1ZSBhbGdvcml0aG0gKGEuay5hLiBwcmlvcml0eSBxdWV1ZSkuCisKIC4uIG1vZHVsZWF1dGhvcjo6IEtldmluIE8nQ29ubm9yCiAuLiBzZWN0aW9uYXV0aG9yOjogR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AcHl0aG9uLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmFuw6dvaXMgUGluYXJkCkBAIC04Miw3ICs4Myw3IEBACiBUaGUgbW9kdWxlIGFsc28gb2ZmZXJzIHRocmVlIGdlbmVyYWwgcHVycG9zZSBmdW5jdGlvbnMgYmFzZWQgb24gaGVhcHMuCiAKIAotLi4gZnVuY3Rpb246OiBtZXJnZSgqaXRlcmFibGVzKQorLi4gZnVuY3Rpb246OiBtZXJnZSgqaXRlcmFibGVzLCBrZXk9Tm9uZSwgcmV2ZXJzZT1GYWxzZSkKIAogICAgTWVyZ2UgbXVsdGlwbGUgc29ydGVkIGlucHV0cyBpbnRvIGEgc2luZ2xlIHNvcnRlZCBvdXRwdXQgKGZvciBleGFtcGxlLCBtZXJnZQogICAgdGltZXN0YW1wZWQgZW50cmllcyBmcm9tIG11bHRpcGxlIGxvZyBmaWxlcykuICBSZXR1cm5zIGFuIDp0ZXJtOmBpdGVyYXRvcmAKQEAgLTkyLDYgKzkzLDE4IEBACiAgICBub3QgcHVsbCB0aGUgZGF0YSBpbnRvIG1lbW9yeSBhbGwgYXQgb25jZSwgYW5kIGFzc3VtZXMgdGhhdCBlYWNoIG9mIHRoZSBpbnB1dAogICAgc3RyZWFtcyBpcyBhbHJlYWR5IHNvcnRlZCAoc21hbGxlc3QgdG8gbGFyZ2VzdCkuCiAKKyAgIEhhcyB0d28gb3B0aW9uYWwgYXJndW1lbnRzIHdoaWNoIG11c3QgYmUgc3BlY2lmaWVkIGFzIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAqa2V5KiBzcGVjaWZpZXMgYSA6dGVybTpga2V5IGZ1bmN0aW9uYCBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvCisgICBleHRyYWN0IGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGlucHV0IGVsZW1lbnQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcworICAgYGBOb25lYGAgKGNvbXBhcmUgdGhlIGVsZW1lbnRzIGRpcmVjdGx5KS4KKworICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byBgYFRydWVgYCwgdGhlbiB0aGUgaW5wdXQgZWxlbWVudHMKKyAgIGFyZSBtZXJnZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCB0aGUgb3B0aW9uYWwgKmtleSogYW5kICpyZXZlcnNlKiBwYXJhbWV0ZXJzLgorCiAKIC4uIGZ1bmN0aW9uOjogbmxhcmdlc3QobiwgaXRlcmFibGUsIGtleT1Ob25lKQogCkBAIC0xMjAsNyArMTMzLDcgQEAKIEJhc2ljIEV4YW1wbGVzCiAtLS0tLS0tLS0tLS0tLQogCi1BIGBoZWFwc29ydCA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWFwc29ydD5gXyBjYW4gYmUgaW1wbGVtZW50ZWQgYnkKK0EgYGhlYXBzb3J0IDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWFwc29ydD5gXyBjYW4gYmUgaW1wbGVtZW50ZWQgYnkKIHB1c2hpbmcgYWxsIHZhbHVlcyBvbnRvIGEgaGVhcCBhbmQgdGhlbiBwb3BwaW5nIG9mZiB0aGUgc21hbGxlc3QgdmFsdWVzIG9uZSBhdCBhCiB0aW1lOjoKIApAQCAtMTUxLDcgKzE2NCw3IEBACiBQcmlvcml0eSBRdWV1ZSBJbXBsZW1lbnRhdGlvbiBOb3RlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQSBgcHJpb3JpdHkgcXVldWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUHJpb3JpdHlfcXVldWU+YF8gaXMgY29tbW9uIHVzZQorQSBgcHJpb3JpdHkgcXVldWUgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ByaW9yaXR5X3F1ZXVlPmBfIGlzIGNvbW1vbiB1c2UKIGZvciBhIGhlYXAsIGFuZCBpdCBwcmVzZW50cyBzZXZlcmFsIGltcGxlbWVudGF0aW9uIGNoYWxsZW5nZXM6CiAKICogU29ydCBzdGFiaWxpdHk6ICBob3cgZG8geW91IGdldCB0d28gdGFza3Mgd2l0aCBlcXVhbCBwcmlvcml0aWVzIHRvIGJlIHJldHVybmVkCkBAIC0yMzAsNyArMjQzLDcgQEAKIAogICAgMTUgMTYgICAxNyAxOCAgIDE5IDIwICAgMjEgMjIgICAyMyAyNCAgIDI1IDI2ICAgMjcgMjggICAyOSAzMAogCi1JbiB0aGUgdHJlZSBhYm92ZSwgZWFjaCBjZWxsICprKiBpcyB0b3BwaW5nIGBgMiprKzFgYCBhbmQgYGAyKmsrMmBgLiBJbiBhbiB1c3VhbAorSW4gdGhlIHRyZWUgYWJvdmUsIGVhY2ggY2VsbCAqayogaXMgdG9wcGluZyBgYDIqaysxYGAgYW5kIGBgMiprKzJgYC4gSW4gYSB1c3VhbAogYmluYXJ5IHRvdXJuYW1lbnQgd2Ugc2VlIGluIHNwb3J0cywgZWFjaCBjZWxsIGlzIHRoZSB3aW5uZXIgb3ZlciB0aGUgdHdvIGNlbGxzCiBpdCB0b3BzLCBhbmQgd2UgY2FuIHRyYWNlIHRoZSB3aW5uZXIgZG93biB0aGUgdHJlZSB0byBzZWUgYWxsIG9wcG9uZW50cyBzL2hlCiBoYWQuICBIb3dldmVyLCBpbiBtYW55IGNvbXB1dGVyIGFwcGxpY2F0aW9ucyBvZiBzdWNoIHRvdXJuYW1lbnRzLCB3ZSBkbyBub3QgbmVlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaG1hYy5yc3QgYi9Eb2MvbGlicmFyeS9obWFjLnJzdAppbmRleCAxNDQ2ZGE2Li5iYjQ0ODY2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9obWFjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9obWFjLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogaG1hYwogICAgOnN5bm9wc2lzOiBLZXllZC1IYXNoaW5nIGZvciBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIChITUFDKSBpbXBsZW1lbnRhdGlvbgorCiAuLiBtb2R1bGVhdXRob3I6OiBHZXJoYXJkIEjDpHJpbmcgPGdoYWVyaW5nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIC4uIHNlY3Rpb25hdXRob3I6OiBHZXJoYXJkIEjDpHJpbmcgPGdoYWVyaW5nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdAppbmRleCBlMTBlNDZlLi4wNjdlMWIxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogaHRtbC5lbnRpdGllcwogICAgOnN5bm9wc2lzOiBEZWZpbml0aW9ucyBvZiBIVE1MIGdlbmVyYWwgZW50aXRpZXMuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9odG1sL2VudGl0aWVzLnB5YApAQCAtNDMsNCArNDQsNCBAQAogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAotLi4gWyNdIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zeW50YXguaHRtbCNuYW1lZC1jaGFyYWN0ZXItcmVmZXJlbmNlcworLi4gWyNdIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdAppbmRleCBmZWY5YzM4Li5hYzg0NGE2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CkBAIC00LDMzICs0LDI0IEBACiAuLiBtb2R1bGU6OiBodG1sLnBhcnNlcgogICAgOnN5bm9wc2lzOiBBIHNpbXBsZSBwYXJzZXIgdGhhdCBjYW4gaGFuZGxlIEhUTUwgYW5kIFhIVE1MLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9odG1sL3BhcnNlci5weWAKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBIVE1MCiAgICBzaW5nbGU6IFhIVE1MCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2h0bWwvcGFyc2VyLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MgOmNsYXNzOmBIVE1MUGFyc2VyYCB3aGljaCBzZXJ2ZXMgYXMgdGhlIGJhc2lzIGZvcgogcGFyc2luZyB0ZXh0IGZpbGVzIGZvcm1hdHRlZCBpbiBIVE1MIChIeXBlclRleHQgTWFyay11cCBMYW5ndWFnZSkgYW5kIFhIVE1MLgogCi0uLiBjbGFzczo6IEhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlLCAqLCBjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQorLi4gY2xhc3M6OiBIVE1MUGFyc2VyKCosIGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZSkKIAotICAgQ3JlYXRlIGEgcGFyc2VyIGluc3RhbmNlLgorICAgQ3JlYXRlIGEgcGFyc2VyIGluc3RhbmNlIGFibGUgdG8gcGFyc2UgaW52YWxpZCBtYXJrdXAuCiAKLSAgIElmICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBgYFRydWVgYCAoZGVmYXVsdDogYGBGYWxzZWBgKSwgYWxsIGNoYXJhY3RlcgorICAgSWYgKmNvbnZlcnRfY2hhcnJlZnMqIGlzIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIGFsbCBjaGFyYWN0ZXIKICAgIHJlZmVyZW5jZXMgKGV4Y2VwdCB0aGUgb25lcyBpbiBgYHNjcmlwdGBgL2Bgc3R5bGVgYCBlbGVtZW50cykgYXJlCiAgICBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlcnMuCi0gICBUaGUgdXNlIG9mIGBgY29udmVydF9jaGFycmVmcz1UcnVlYGAgaXMgZW5jb3VyYWdlZCBhbmQgd2lsbCBiZWNvbWUKLSAgIHRoZSBkZWZhdWx0IGluIFB5dGhvbiAzLjUuCi0KLSAgIElmICpzdHJpY3QqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpLCB0aGUgcGFyc2VyIHdpbGwgYWNjZXB0IGFuZCBwYXJzZQotICAgaW52YWxpZCBtYXJrdXAuICBJZiAqc3RyaWN0KiBpcyBgYFRydWVgYCB0aGUgcGFyc2VyIHdpbGwgcmFpc2UgYW4KLSAgIDpleGM6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvcmAgZXhjZXB0aW9uIGluc3RlYWQgWyNdXyB3aGVuIGl0J3Mgbm90Ci0gICBhYmxlIHRvIHBhcnNlIHRoZSBtYXJrdXAuICBUaGUgdXNlIG9mIGBgc3RyaWN0PVRydWVgYCBpcyBkaXNjb3VyYWdlZCBhbmQKLSAgIHRoZSAqc3RyaWN0KiBhcmd1bWVudCBpcyBkZXByZWNhdGVkLgogCiAgICBBbiA6Y2xhc3M6YC5IVE1MUGFyc2VyYCBpbnN0YW5jZSBpcyBmZWQgSFRNTCBkYXRhIGFuZCBjYWxscyBoYW5kbGVyIG1ldGhvZHMKICAgIHdoZW4gc3RhcnQgdGFncywgZW5kIHRhZ3MsIHRleHQsIGNvbW1lbnRzLCBhbmQgb3RoZXIgbWFya3VwIGVsZW1lbnRzIGFyZQpAQCAtNDAsMzEgKzMxLDExIEBACiAgICBUaGlzIHBhcnNlciBkb2VzIG5vdCBjaGVjayB0aGF0IGVuZCB0YWdzIG1hdGNoIHN0YXJ0IHRhZ3Mgb3IgY2FsbCB0aGUgZW5kLXRhZwogICAgaGFuZGxlciBmb3IgZWxlbWVudHMgd2hpY2ggYXJlIGNsb3NlZCBpbXBsaWNpdGx5IGJ5IGNsb3NpbmcgYW4gb3V0ZXIgZWxlbWVudC4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgICAgICpzdHJpY3QqIGFyZ3VtZW50IGFkZGVkLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy41Ci0gICAgICBUaGUgKnN0cmljdCogYXJndW1lbnQgYW5kIHRoZSBzdHJpY3QgbW9kZSBoYXZlIGJlZW4gZGVwcmVjYXRlZC4KLSAgICAgIFRoZSBwYXJzZXIgaXMgbm93IGFibGUgdG8gYWNjZXB0IGFuZCBwYXJzZSBpbnZhbGlkIG1hcmt1cCB0b28uCi0KICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CiAgICAgICAqY29udmVydF9jaGFycmVmcyoga2V5d29yZCBhcmd1bWVudCBhZGRlZC4KIAotQW4gZXhjZXB0aW9uIGlzIGRlZmluZWQgYXMgd2VsbDoKLQotCi0uLiBleGNlcHRpb246OiBIVE1MUGFyc2VFcnJvcgotCi0gICBFeGNlcHRpb24gcmFpc2VkIGJ5IHRoZSA6Y2xhc3M6YEhUTUxQYXJzZXJgIGNsYXNzIHdoZW4gaXQgZW5jb3VudGVycyBhbiBlcnJvcgotICAgd2hpbGUgcGFyc2luZyBhbmQgKnN0cmljdCogaXMgYGBUcnVlYGAuICBUaGlzIGV4Y2VwdGlvbiBwcm92aWRlcyB0aHJlZQotICAgYXR0cmlidXRlczogOmF0dHI6YG1zZ2AgaXMgYSBicmllZiBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlIGVycm9yLAotICAgOmF0dHI6YGxpbmVub2AgaXMgdGhlIG51bWJlciBvZiB0aGUgbGluZSBvbiB3aGljaCB0aGUgYnJva2VuIGNvbnN0cnVjdCB3YXMKLSAgIGRldGVjdGVkLCBhbmQgOmF0dHI6YG9mZnNldGAgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGludG8gdGhlIGxpbmUgYXQKLSAgIHdoaWNoIHRoZSBjb25zdHJ1Y3Qgc3RhcnRzLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy41Ci0gICAgICBUaGlzIGV4Y2VwdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGJlY2F1c2UgaXQncyBuZXZlciByYWlzZWQgYnkgdGhlIHBhcnNlcgotICAgICAgKHdoZW4gdGhlIGRlZmF1bHQgbm9uLXN0cmljdCBtb2RlIGlzIHVzZWQpLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBhcmd1bWVudCAqY29udmVydF9jaGFycmVmcyogaXMgbm93IGBgVHJ1ZWBgLgogCiAKIEV4YW1wbGUgSFRNTCBQYXJzZXIgQXBwbGljYXRpb24KQEAgLTc5LDggKzUwLDEwIEBACiAgICBjbGFzcyBNeUhUTUxQYXJzZXIoSFRNTFBhcnNlcik6CiAgICAgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCB0YWcsIGF0dHJzKToKICAgICAgICAgICAgcHJpbnQoIkVuY291bnRlcmVkIGEgc3RhcnQgdGFnOiIsIHRhZykKKwogICAgICAgIGRlZiBoYW5kbGVfZW5kdGFnKHNlbGYsIHRhZyk6CiAgICAgICAgICAgIHByaW50KCJFbmNvdW50ZXJlZCBhbiBlbmQgdGFnIDoiLCB0YWcpCisKICAgICAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJFbmNvdW50ZXJlZCBzb21lIGRhdGEgIDoiLCBkYXRhKQogCkBAIC04OCw3ICs2MSw5IEBACiAgICBwYXJzZXIuZmVlZCgnPGh0bWw+PGhlYWQ+PHRpdGxlPlRlc3Q8L3RpdGxlPjwvaGVhZD4nCiAgICAgICAgICAgICAgICAnPGJvZHk+PGgxPlBhcnNlIG1lITwvaDE+PC9ib2R5PjwvaHRtbD4nKQogCi1UaGUgb3V0cHV0IHdpbGwgdGhlbiBiZTo6CitUaGUgb3V0cHV0IHdpbGwgdGhlbiBiZToKKworLi4gY29kZS1ibG9jazo6IG5vbmUKIAogICAgRW5jb3VudGVyZWQgYSBzdGFydCB0YWc6IGh0bWwKICAgIEVuY291bnRlcmVkIGEgc3RhcnQgdGFnOiBoZWFkCkBAIC0xNTksOCArMTM0LDggQEAKICAgIGFuZCBxdW90ZXMgaW4gdGhlICp2YWx1ZSogaGF2ZSBiZWVuIHJlbW92ZWQsIGFuZCBjaGFyYWN0ZXIgYW5kIGVudGl0eSByZWZlcmVuY2VzCiAgICBoYXZlIGJlZW4gcmVwbGFjZWQuCiAKLSAgIEZvciBpbnN0YW5jZSwgZm9yIHRoZSB0YWcgYGA8QSBIUkVGPSJodHRwOi8vd3d3LmN3aS5ubC8iPmBgLCB0aGlzIG1ldGhvZAotICAgd291bGQgYmUgY2FsbGVkIGFzIGBgaGFuZGxlX3N0YXJ0dGFnKCdhJywgWygnaHJlZicsICdodHRwOi8vd3d3LmN3aS5ubC8nKV0pYGAuCisgICBGb3IgaW5zdGFuY2UsIGZvciB0aGUgdGFnIGBgPEEgSFJFRj0iaHR0cHM6Ly93d3cuY3dpLm5sLyI+YGAsIHRoaXMgbWV0aG9kCisgICB3b3VsZCBiZSBjYWxsZWQgYXMgYGBoYW5kbGVfc3RhcnR0YWcoJ2EnLCBbKCdocmVmJywgJ2h0dHBzOi8vd3d3LmN3aS5ubC8nKV0pYGAuCiAKICAgIEFsbCBlbnRpdHkgcmVmZXJlbmNlcyBmcm9tIDptb2Q6YGh0bWwuZW50aXRpZXNgIGFyZSByZXBsYWNlZCBpbiB0aGUgYXR0cmlidXRlCiAgICB2YWx1ZXMuCkBAIC0yNDYsOCArMjIxLDcgQEAKIAogICAgVGhlICpkYXRhKiBwYXJhbWV0ZXIgd2lsbCBiZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBkZWNsYXJhdGlvbiBpbnNpZGUKICAgIHRoZSBgYDwhWy4uLl0+YGAgbWFya3VwLiAgSXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBiZSBvdmVycmlkZGVuIGJ5IGEKLSAgIGRlcml2ZWQgY2xhc3MuICBUaGUgYmFzZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiByYWlzZXMgYW4gOmV4YzpgSFRNTFBhcnNlRXJyb3JgCi0gICB3aGVuICpzdHJpY3QqIGlzIGBgVHJ1ZWBgLgorICAgZGVyaXZlZCBjbGFzcy4gIFRoZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KIAogCiAuLiBfaHRtbHBhcnNlci1leGFtcGxlczoKQEAgLTI2NiwyMSArMjQwLDI3IEBACiAgICAgICAgICAgIHByaW50KCJTdGFydCB0YWc6IiwgdGFnKQogICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRyczoKICAgICAgICAgICAgICAgIHByaW50KCIgICAgIGF0dHI6IiwgYXR0cikKKwogICAgICAgIGRlZiBoYW5kbGVfZW5kdGFnKHNlbGYsIHRhZyk6CiAgICAgICAgICAgIHByaW50KCJFbmQgdGFnICA6IiwgdGFnKQorCiAgICAgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICAgICBwcmludCgiRGF0YSAgICAgOiIsIGRhdGEpCisKICAgICAgICBkZWYgaGFuZGxlX2NvbW1lbnQoc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJDb21tZW50ICA6IiwgZGF0YSkKKwogICAgICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYsIG5hbWUpOgogICAgICAgICAgICBjID0gY2hyKG5hbWUyY29kZXBvaW50W25hbWVdKQogICAgICAgICAgICBwcmludCgiTmFtZWQgZW50OiIsIGMpCisKICAgICAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2VsZiwgbmFtZSk6CiAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgneCcpOgogICAgICAgICAgICAgICAgYyA9IGNocihpbnQobmFtZVsxOl0sIDE2KSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGMgPSBjaHIoaW50KG5hbWUpKQogICAgICAgICAgICBwcmludCgiTnVtIGVudCAgOiIsIGMpCisKICAgICAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJEZWNsICAgICA6IiwgZGF0YSkKIApAQCAtMzEyLDcgKzI5Miw3IEBACiAgICAgICAgIGF0dHI6ICgndHlwZScsICd0ZXh0L2NzcycpCiAgICBEYXRhICAgICA6ICNweXRob24geyBjb2xvcjogZ3JlZW4gfQogICAgRW5kIHRhZyAgOiBzdHlsZQotICAgPj4+CisKICAgID4+PiBwYXJzZXIuZmVlZCgnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPicKICAgIC4uLiAgICAgICAgICAgICAnYWxlcnQoIjxzdHJvbmc+aGVsbG8hPC9zdHJvbmc+Iik7PC9zY3JpcHQ+JykKICAgIFN0YXJ0IHRhZzogc2NyaXB0CkBAIC0zNTgsOSArMzM4LDMgQEAKICAgIERhdGEgICAgIDogdGFnIHNvdXAKICAgIEVuZCB0YWcgIDogcAogICAgRW5kIHRhZyAgOiBhCi0KLS4uIHJ1YnJpYzo6IEZvb3Rub3RlcwotCi0uLiBbI10gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyAqc3RyaWN0KiBtb2RlIGRvZXMgbm90IHJhaXNlCi0gICAgICAgZXhjZXB0aW9ucyBmb3IgYWxsIG5vbi1jb21wbGlhbnQgSFRNTC4gIFRoYXQgaXMsIHNvbWUgaW52YWxpZCBIVE1MCi0gICAgICAgaXMgdG9sZXJhdGVkIGV2ZW4gaW4gKnN0cmljdCogbW9kZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAppbmRleCA4MDdmNjg1Li44OTU0NjQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CkBAIC00LDYgKzQsNyBAQAogLi4gbW9kdWxlOjogaHR0cC5jbGllbnQKICAgIDpzeW5vcHNpczogSFRUUCBhbmQgSFRUUFMgcHJvdG9jb2wgY2xpZW50IChyZXF1aXJlcyBzb2NrZXRzKS4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvaHR0cC9jbGllbnQucHlgCiAKIC4uIGluZGV4OjoKICAgIHBhaXI6IEhUVFA7IHByb3RvY29sCkBAIC0xMSw4ICsxMiw2IEBACiAKIC4uIGluZGV4OjogbW9kdWxlOiB1cmxsaWIucmVxdWVzdAogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9odHRwL2NsaWVudC5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZGVmaW5lcyBjbGFzc2VzIHdoaWNoIGltcGxlbWVudCB0aGUgY2xpZW50IHNpZGUgb2YgdGhlIEhUVFAgYW5kCkBAIC0yMSw4ICsyMCw4IEBACiAKIC4uIHNlZWFsc286OgogCi0gICAgVGhlIGBSZXF1ZXN0cyBwYWNrYWdlIDxodHRwOi8vcmVxdWVzdHMucmVhZHRoZWRvY3Mub3JnLz5gXwotICAgIGlzIHJlY29tbWVuZGVkIGZvciBhIGhpZ2hlci1sZXZlbCBodHRwIGNsaWVudCBpbnRlcmZhY2UuCisgICAgVGhlIGBSZXF1ZXN0cyBwYWNrYWdlIDxodHRwczovL3JlcXVlc3RzLnJlYWR0aGVkb2NzLm9yZy8+YF8KKyAgICBpcyByZWNvbW1lbmRlZCBmb3IgYSBoaWdoZXItbGV2ZWwgSFRUUCBjbGllbnQgaW50ZXJmYWNlLgogCiAuLiBub3RlOjoKIApAQCAtMTgwLDYgKzE3OSwxNyBAQAogICAgaXMgcmVjZWl2ZWQgaW4gdGhlIEhUVFAgcHJvdG9jb2wgZnJvbSB0aGUgc2VydmVyLgogCiAKKy4uIGV4Y2VwdGlvbjo6IFJlbW90ZURpc2Nvbm5lY3RlZAorCisgICBBIHN1YmNsYXNzIG9mIDpleGM6YENvbm5lY3Rpb25SZXNldEVycm9yYCBhbmQgOmV4YzpgQmFkU3RhdHVzTGluZWAuICBSYWlzZWQKKyAgIGJ5IDptZXRoOmBIVFRQQ29ubmVjdGlvbi5nZXRyZXNwb25zZWAgd2hlbiB0aGUgYXR0ZW1wdCB0byByZWFkIHRoZSByZXNwb25zZQorICAgcmVzdWx0cyBpbiBubyBkYXRhIHJlYWQgZnJvbSB0aGUgY29ubmVjdGlvbiwgaW5kaWNhdGluZyB0aGF0IHRoZSByZW1vdGUgZW5kCisgICBoYXMgY2xvc2VkIHRoZSBjb25uZWN0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKyAgICAgIFByZXZpb3VzbHksIDpleGM6YEJhZFN0YXR1c0xpbmVgXCBgYCgnJylgYCB3YXMgcmFpc2VkLgorCisKIFRoZSBjb25zdGFudHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSBhcmU6CiAKIC4uIGRhdGE6OiBIVFRQX1BPUlQKQEAgLTE5MSwyMjEgKzIwMSwxNSBAQAogCiAgICBUaGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgSFRUUFMgcHJvdG9jb2wgKGFsd2F5cyBgYDQ0M2BgKS4KIAotYW5kIGFsc28gdGhlIGZvbGxvd2luZyBjb25zdGFudHMgZm9yIGludGVnZXIgc3RhdHVzIGNvZGVzOgotCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgQ29uc3RhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFZhbHVlICAgfCBEZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IDpjb25zdDpgQ09OVElOVUVgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYDEwMGBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC4xLjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuMS4xPmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBTV0lUQ0hJTkdfUFJPVE9DT0xTYCAgICAgICAgICAgICB8IGBgMTAxYGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjEuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC4xLjI+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YFBST0NFU1NJTkdgICAgICAgICAgICAgICAgICAgICAgIHwgYGAxMDJgYCB8IFdFQkRBViwgYFJGQyAyNTE4LCBTZWN0aW9uIDEwLjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cud2ViZGF2Lm9yZy9zcGVjcy9yZmMyNTE4Lmh0bWwjU1RBVFVTXzEwMj5gXyAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YE9LYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGAyMDBgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuMi4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjIuMT5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgQ1JFQVRFRGAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYDIwMWBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC4yLjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuMi4yPmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBBQ0NFUFRFRGAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgMjAyYGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjIuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC4yLjM+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OYCAgIHwgYGAyMDNgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuMi40ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjIuND5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgTk9fQ09OVEVOVGAgICAgICAgICAgICAgICAgICAgICAgfCBgYDIwNGBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC4yLjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuMi41PmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBSRVNFVF9DT05URU5UYCAgICAgICAgICAgICAgICAgICB8IGBgMjA1YGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjIuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC4yLjY+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YFBBUlRJQUxfQ09OVEVOVGAgICAgICAgICAgICAgICAgIHwgYGAyMDZgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuMi43ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjIuNz5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgTVVMVElfU1RBVFVTYCAgICAgICAgICAgICAgICAgICAgfCBgYDIwN2BgIHwgV0VCREFWIGBSRkMgMjUxOCwgU2VjdGlvbiAxMC4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53ZWJkYXYub3JnL3NwZWNzL3JmYzI1MTguaHRtbCNTVEFUVVNfMjA3PmBfICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgSU1fVVNFRGAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYDIyNmBgIHwgRGVsdGEgZW5jb2RpbmcgaW4gSFRUUCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA6cmZjOmAzMjI5YCwgU2VjdGlvbiAxMC40LjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgTVVMVElQTEVfQ0hPSUNFU2AgICAgICAgICAgICAgICAgfCBgYDMwMGBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC4zLjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuMy4xPmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBNT1ZFRF9QRVJNQU5FTlRMWWAgICAgICAgICAgICAgICB8IGBgMzAxYGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjMuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC4zLjI+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YEZPVU5EYCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGAzMDJgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuMy4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjMuMz5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgU0VFX09USEVSYCAgICAgICAgICAgICAgICAgICAgICAgfCBgYDMwM2BgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC4zLjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuMy40PmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBOT1RfTU9ESUZJRURgICAgICAgICAgICAgICAgICAgICB8IGBgMzA0YGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjMuNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC4zLjU+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YFVTRV9QUk9YWWAgICAgICAgICAgICAgICAgICAgICAgIHwgYGAzMDVgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuMy42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjMuNj5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgVEVNUE9SQVJZX1JFRElSRUNUYCAgICAgICAgICAgICAgfCBgYDMwN2BgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC4zLjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuMy44PmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBCQURfUkVRVUVTVGAgICAgICAgICAgICAgICAgICAgICB8IGBgNDAwYGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjQuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC40LjE+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YFVOQVVUSE9SSVpFRGAgICAgICAgICAgICAgICAgICAgIHwgYGA0MDFgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuNC4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjQuMj5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgUEFZTUVOVF9SRVFVSVJFRGAgICAgICAgICAgICAgICAgfCBgYDQwMmBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC40LjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuNC4zPmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBGT1JCSURERU5gICAgICAgICAgICAgICAgICAgICAgICB8IGBgNDAzYGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjQuNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC40LjQ+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YE5PVF9GT1VORGAgICAgICAgICAgICAgICAgICAgICAgIHwgYGA0MDRgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuNC41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjQuNT5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgTUVUSE9EX05PVF9BTExPV0VEYCAgICAgICAgICAgICAgfCBgYDQwNWBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC40LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuNC42PmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBOT1RfQUNDRVBUQUJMRWAgICAgICAgICAgICAgICAgICB8IGBgNDA2YGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjQuNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC40Ljc+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEYCAgIHwgYGA0MDdgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuNC44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjQuOD5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgUkVRVUVTVF9USU1FT1VUYCAgICAgICAgICAgICAgICAgfCBgYDQwOGBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC40LjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuNC45PmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBDT05GTElDVGAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgNDA5YGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjQuMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC40LjEwPmBfIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YEdPTkVgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGA0MTBgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuNC4xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjQuMTE+YF8gfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgTEVOR1RIX1JFUVVJUkVEYCAgICAgICAgICAgICAgICAgfCBgYDQxMWBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC40LjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuNC4xMj5gXyB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBQUkVDT05ESVRJT05fRkFJTEVEYCAgICAgICAgICAgICB8IGBgNDEyYGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjQuMTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC40LjEzPmBfIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YFJFUVVFU1RfRU5USVRZX1RPT19MQVJHRWAgICAgICAgIHwgYGA0MTNgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuNC4xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjQuMTQ+YF8gfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgUkVRVUVTVF9VUklfVE9PX0xPTkdgICAgICAgICAgICAgfCBgYDQxNGBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC40LjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuNC4xNT5gXyB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBVTlNVUFBPUlRFRF9NRURJQV9UWVBFYCAgICAgICAgICB8IGBgNDE1YGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjQuMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC40LjE2PmBfIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YFJFUVVFU1RFRF9SQU5HRV9OT1RfU0FUSVNGSUFCTEVgIHwgYGA0MTZgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuNC4xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjQuMTc+YF8gfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgRVhQRUNUQVRJT05fRkFJTEVEYCAgICAgICAgICAgICAgfCBgYDQxN2BgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC40LjE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuNC4xOD5gXyB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBVTlBST0NFU1NBQkxFX0VOVElUWWAgICAgICAgICAgICB8IGBgNDIyYGAgfCBXRUJEQVYsIGBSRkMgMjUxOCwgU2VjdGlvbiAxMC4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LndlYmRhdi5vcmcvc3BlY3MvcmZjMjUxOC5odG1sI1NUQVRVU180MjI+YF8gICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBMT0NLRURgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgNDIzYGAgfCBXRUJEQVYgYFJGQyAyNTE4LCBTZWN0aW9uIDEwLjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LndlYmRhdi5vcmcvc3BlY3MvcmZjMjUxOC5odG1sI1NUQVRVU180MjM+YF8gICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBGQUlMRURfREVQRU5ERU5DWWAgICAgICAgICAgICAgICB8IGBgNDI0YGAgfCBXRUJEQVYsIGBSRkMgMjUxOCwgU2VjdGlvbiAxMC41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LndlYmRhdi5vcmcvc3BlY3MvcmZjMjUxOC5odG1sI1NUQVRVU180MjQ+YF8gICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBVUEdSQURFX1JFUVVJUkVEYCAgICAgICAgICAgICAgICB8IGBgNDI2YGAgfCBIVFRQIFVwZ3JhZGUgdG8gVExTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDpyZmM6YDI4MTdgLCBTZWN0aW9uIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBQUkVDT05ESVRJT05fUkVRVUlSRURgICAgICAgICAgICB8IGBgNDI4YGAgfCBBZGRpdGlvbmFsIEhUVFAgU3RhdHVzIENvZGVzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDpyZmM6YDY1ODVgLCBTZWN0aW9uIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBUT09fTUFOWV9SRVFVRVNUU2AgICAgICAgICAgICAgICB8IGBgNDI5YGAgfCBBZGRpdGlvbmFsIEhUVFAgU3RhdHVzIENvZGVzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDpyZmM6YDY1ODVgLCBTZWN0aW9uIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFYCB8IGBgNDMxYGAgfCBBZGRpdGlvbmFsIEhUVFAgU3RhdHVzIENvZGVzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDpyZmM6YDY1ODVgLCBTZWN0aW9uIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBJTlRFUk5BTF9TRVJWRVJfRVJST1JgICAgICAgICAgICB8IGBgNTAwYGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjUuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC41LjE+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YE5PVF9JTVBMRU1FTlRFRGAgICAgICAgICAgICAgICAgIHwgYGA1MDFgYCB8IEhUVFAvMS4xLCBgUkZDIDI2MTYsIFNlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuNS4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjUuMj5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgQkFEX0dBVEVXQVlgICAgICAgICAgICAgICAgICAgICAgfCBgYDUwMmBgIHwgSFRUUC8xLjEgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC41LjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuNS4zPmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBTRVJWSUNFX1VOQVZBSUxBQkxFYCAgICAgICAgICAgICB8IGBgNTAzYGAgfCBIVFRQLzEuMSwgYFJGQyAyNjE2LCBTZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDEwLjUuNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgPGh0dHA6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMTAuaHRtbCNzZWMxMC41LjQ+YF8gIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YEdBVEVXQVlfVElNRU9VVGAgICAgICAgICAgICAgICAgIHwgYGA1MDRgYCB8IEhUVFAvMS4xIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgMTAuNS41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA8aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sI3NlYzEwLjUuNT5gXyAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURURgICAgICAgfCBgYDUwNWBgIHwgSFRUUC8xLjEsIGBSRkMgMjYxNiwgU2VjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAxMC41LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwjc2VjMTAuNS42PmBfICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBJTlNVRkZJQ0lFTlRfU1RPUkFHRWAgICAgICAgICAgICB8IGBgNTA3YGAgfCBXRUJEQVYsIGBSRkMgMjUxOCwgU2VjdGlvbiAxMC42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDxodHRwOi8vd3d3LndlYmRhdi5vcmcvc3BlY3MvcmZjMjUxOC5odG1sI1NUQVRVU181MDc+YF8gICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBOT1RfRVhURU5ERURgICAgICAgICAgICAgICAgICAgICB8IGBgNTEwYGAgfCBBbiBIVFRQIEV4dGVuc2lvbiBGcmFtZXdvcmssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDpyZmM6YDI3NzRgLCBTZWN0aW9uIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmBORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEYCB8IGBgNTExYGAgfCBBZGRpdGlvbmFsIEhUVFAgU3RhdHVzIENvZGVzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDpyZmM6YDY1ODVgLCBTZWN0aW9uIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIEFkZGVkIGNvZGVzIGBgNDI4YGAsIGBgNDI5YGAsIGBgNDMxYGAgYW5kIGBgNTExYGAgZnJvbSA6cmZjOmA2NTg1YC4KLQotCiAuLiBkYXRhOjogcmVzcG9uc2VzCiAKICAgIFRoaXMgZGljdGlvbmFyeSBtYXBzIHRoZSBIVFRQIDEuMSBzdGF0dXMgY29kZXMgdG8gdGhlIFczQyBuYW1lcy4KIAogICAgRXhhbXBsZTogYGBodHRwLmNsaWVudC5yZXNwb25zZXNbaHR0cC5jbGllbnQuTk9UX0ZPVU5EXWBgIGlzIGBgJ05vdCBGb3VuZCdgYC4KIAorU2VlIDpyZWY6YGh0dHAtc3RhdHVzLWNvZGVzYCBmb3IgYSBsaXN0IG9mIEhUVFAgc3RhdHVzIGNvZGVzIHRoYXQgYXJlCithdmFpbGFibGUgaW4gdGhpcyBtb2R1bGUgYXMgY29uc3RhbnRzLgorCiAKIC4uIF9odHRwY29ubmVjdGlvbi1vYmplY3RzOgogCkBAIC00NTgsNiArMjYyLDExIEBACiAgICAgICBOb3RlIHRoYXQgeW91IG11c3QgaGF2ZSByZWFkIHRoZSB3aG9sZSByZXNwb25zZSBiZWZvcmUgeW91IGNhbiBzZW5kIGEgbmV3CiAgICAgICByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBJZiBhIDpleGM6YENvbm5lY3Rpb25FcnJvcmAgb3Igc3ViY2xhc3MgaXMgcmFpc2VkLCB0aGUKKyAgICAgIDpjbGFzczpgSFRUUENvbm5lY3Rpb25gIG9iamVjdCB3aWxsIGJlIHJlYWR5IHRvIHJlY29ubmVjdCB3aGVuCisgICAgICBhIG5ldyByZXF1ZXN0IGlzIHNlbnQuCisKIAogLi4gbWV0aG9kOjogSFRUUENvbm5lY3Rpb24uc2V0X2RlYnVnbGV2ZWwobGV2ZWwpCiAKQEAgLTQ5Niw3ICszMDUsOSBAQAogCiAuLiBtZXRob2Q6OiBIVFRQQ29ubmVjdGlvbi5jb25uZWN0KCkKIAotICAgQ29ubmVjdCB0byB0aGUgc2VydmVyIHNwZWNpZmllZCB3aGVuIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQuCisgICBDb25uZWN0IHRvIHRoZSBzZXJ2ZXIgc3BlY2lmaWVkIHdoZW4gdGhlIG9iamVjdCB3YXMgY3JlYXRlZC4gIEJ5IGRlZmF1bHQsCisgICB0aGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gbWFraW5nIGEgcmVxdWVzdCBpZiB0aGUgY2xpZW50IGRvZXMgbm90CisgICBhbHJlYWR5IGhhdmUgYSBjb25uZWN0aW9uLgogCiAKIC4uIG1ldGhvZDo6IEhUVFBDb25uZWN0aW9uLmNsb3NlKCkKQEAgLTU1MCw2ICszNjEsMTAgQEAKIGJvZHkuICBUaGUgcmVzcG9uc2UgaXMgYW4gaXRlcmFibGUgb2JqZWN0IGFuZCBjYW4gYmUgdXNlZCBpbiBhIHdpdGgKIHN0YXRlbWVudC4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgIFRoZSA6Y2xhc3M6YGlvLkJ1ZmZlcmVkSU9CYXNlYCBpbnRlcmZhY2UgaXMgbm93IGltcGxlbWVudGVkIGFuZAorICAgYWxsIG9mIGl0cyByZWFkZXIgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgorCiAKIC4uIG1ldGhvZDo6IEhUVFBSZXNwb25zZS5yZWFkKFthbXRdKQogCkBAIC02MjUsNyArNDQwLDcgQEAKICAgID4+PiBjb25uLnJlcXVlc3QoIkdFVCIsICIvIikKICAgID4+PiByMSA9IGNvbm4uZ2V0cmVzcG9uc2UoKQogICAgPj4+IHdoaWxlIG5vdCByMS5jbG9zZWQ6Ci0gICAuLi4gICAgIHByaW50KHIxLnJlYWQoMjAwKSkgIyAyMDAgYnl0ZXMKKyAgIC4uLiAgICAgcHJpbnQocjEucmVhZCgyMDApKSAgIyAyMDAgYnl0ZXMKICAgIGInPCFkb2N0eXBlIGh0bWw+XG48IS0tW2lmIi4uLgogICAgLi4uCiAgICA+Pj4gIyBFeGFtcGxlIG9mIGFuIGludmFsaWQgcmVxdWVzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVqYXIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVqYXIucnN0CmluZGV4IGNhNjhhYWMuLjUzNzA2MDEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuY29va2llamFyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNvb2tpZWphci5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IGh0dHAuY29va2llamFyCiAgICA6c3lub3BzaXM6IENsYXNzZXMgZm9yIGF1dG9tYXRpYyBoYW5kbGluZyBvZiBIVFRQIGNvb2tpZXMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IEpvaG4gSi4gTGVlIDxqamxAcG9ib3guY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEpvaG4gSi4gTGVlIDxqamxAcG9ib3guY29tPgogCkBAIC0xMTUsNyArMTE2LDcgQEAKICAgICAgIDptb2Q6YGh0dHAuY29va2llamFyYCBhbmQgOm1vZDpgaHR0cC5jb29raWVzYCBtb2R1bGVzIGRvIG5vdCBkZXBlbmQgb24gZWFjaAogICAgICAgb3RoZXIuCiAKLSAgIGh0dHA6Ly9jdXJsLmhheHguc2UvcmZjL2Nvb2tpZV9zcGVjLmh0bWwKKyAgIGh0dHBzOi8vY3VybC5oYXh4LnNlL3JmYy9jb29raWVfc3BlYy5odG1sCiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgb3JpZ2luYWwgTmV0c2NhcGUgY29va2llIHByb3RvY29sLiAgVGhvdWdoIHRoaXMgaXMKICAgICAgIHN0aWxsIHRoZSBkb21pbmFudCBwcm90b2NvbCwgdGhlICdOZXRzY2FwZSBjb29raWUgcHJvdG9jb2wnIGltcGxlbWVudGVkIGJ5IGFsbAogICAgICAgdGhlIG1ham9yIGJyb3dzZXJzIChhbmQgOm1vZDpgaHR0cC5jb29raWVqYXJgKSBvbmx5IGJlYXJzIGEgcGFzc2luZyByZXNlbWJsYW5jZSB0bwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVzLnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY29va2llcy5yc3QKaW5kZXggZDBjMWU1NC4uNGI0NWQ0YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNvb2tpZXMucnN0CkBAIC0zLDYgKzMsNyBAQAogCiAuLiBtb2R1bGU6OiBodHRwLmNvb2tpZXMKICAgIDpzeW5vcHNpczogU3VwcG9ydCBmb3IgSFRUUCBzdGF0ZSBtYW5hZ2VtZW50IChjb29raWVzKS4KKwogLi4gbW9kdWxlYXV0aG9yOjogVGltb3RoeSBPJ01hbGxleSA8dGltb0BhbHVtLm1pdC5lZHU+CiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogCkBAIC0xNDEsMjggKzE0Miw0NSBAQAogICAgaW4gSFRUUCByZXF1ZXN0cywgYW5kIGlzIG5vdCBhY2Nlc3NpYmxlIHRocm91Z2ggSmF2YVNjcmlwdC4gVGhpcyBpcyBpbnRlbmRlZAogICAgdG8gbWl0aWdhdGUgc29tZSBmb3JtcyBvZiBjcm9zcy1zaXRlIHNjcmlwdGluZy4KIAotICAgVGhlIGtleXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuCisgICBUaGUga2V5cyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgdGhlaXIgZGVmYXVsdCB2YWx1ZSBpcyBgYCcnYGAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICA6bWV0aDpgfk1vcnNlbC5fX2VxX19gIG5vdyB0YWtlcyA6YXR0cjpgfk1vcnNlbC5rZXlgIGFuZCA6YXR0cjpgfk1vcnNlbC52YWx1ZWAKKyAgICAgIGludG8gYWNjb3VudC4KIAogCiAuLiBhdHRyaWJ1dGU6OiBNb3JzZWwudmFsdWUKIAogICAgVGhlIHZhbHVlIG9mIHRoZSBjb29raWUuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjUKKyAgICAgIGFzc2lnbmluZyB0byBgYHZhbHVlYGA7IHVzZSA6bWV0aDpgfk1vcnNlbC5zZXRgIGluc3RlYWQuCisKIAogLi4gYXR0cmlidXRlOjogTW9yc2VsLmNvZGVkX3ZhbHVlCiAKICAgIFRoZSBlbmNvZGVkIHZhbHVlIG9mIHRoZSBjb29raWUgLS0tIHRoaXMgaXMgd2hhdCBzaG91bGQgYmUgc2VudC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNQorICAgICAgYXNzaWduaW5nIHRvIGBgY29kZWRfdmFsdWVgYDsgdXNlIDptZXRoOmB+TW9yc2VsLnNldGAgaW5zdGVhZC4KKwogCiAuLiBhdHRyaWJ1dGU6OiBNb3JzZWwua2V5CiAKICAgIFRoZSBuYW1lIG9mIHRoZSBjb29raWUuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjUKKyAgICAgIGFzc2lnbmluZyB0byBgYGtleWBgOyB1c2UgOm1ldGg6YH5Nb3JzZWwuc2V0YCBpbnN0ZWFkLgorCiAKIC4uIG1ldGhvZDo6IE1vcnNlbC5zZXQoa2V5LCB2YWx1ZSwgY29kZWRfdmFsdWUpCiAKICAgIFNldCB0aGUgKmtleSosICp2YWx1ZSogYW5kICpjb2RlZF92YWx1ZSogYXR0cmlidXRlcy4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNQorICAgICAgVGhlIHVuZG9jdW1lbnRlZCAqTGVnYWxDaGFycyogcGFyYW1ldGVyIGlzIGlnbm9yZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbgorICAgICAgYSBmdXR1cmUgdmVyc2lvbi4KKwogCiAuLiBtZXRob2Q6OiBNb3JzZWwuaXNSZXNlcnZlZEtleShLKQogCkBAIC0xOTMsNiArMjExLDMwIEBACiAgICBUaGUgbWVhbmluZyBmb3IgKmF0dHJzKiBpcyB0aGUgc2FtZSBhcyBpbiA6bWV0aDpgb3V0cHV0YC4KIAogCisuLiBtZXRob2Q6OiBNb3JzZWwudXBkYXRlKHZhbHVlcykKKworICAgVXBkYXRlIHRoZSB2YWx1ZXMgaW4gdGhlIE1vcnNlbCBkaWN0aW9uYXJ5IHdpdGggdGhlIHZhbHVlcyBpbiB0aGUgZGljdGlvbmFyeQorICAgKnZhbHVlcyouICBSYWlzZSBhbiBlcnJvciBpZiBhbnkgb2YgdGhlIGtleXMgaW4gdGhlICp2YWx1ZXMqIGRpY3QgaXMgbm90IGEKKyAgIHZhbGlkIDpyZmM6YDIxMDlgIGF0dHJpYnV0ZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIGFuIGVycm9yIGlzIHJhaXNlZCBmb3IgaW52YWxpZCBrZXlzLgorCisKKy4uIG1ldGhvZDo6IE1vcnNlbC5jb3B5KHZhbHVlKQorCisgICBSZXR1cm4gYSBzaGFsbG93IGNvcHkgb2YgdGhlIE1vcnNlbCBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICByZXR1cm4gYSBNb3JzZWwgb2JqZWN0IGluc3RlYWQgb2YgYSBkaWN0LgorCisKKy4uIG1ldGhvZDo6IE1vcnNlbC5zZXRkZWZhdWx0KGtleSwgdmFsdWU9Tm9uZSkKKworICAgUmFpc2UgYW4gZXJyb3IgaWYga2V5IGlzIG5vdCBhIHZhbGlkIDpyZmM6YDIxMDlgIGF0dHJpYnV0ZSwgb3RoZXJ3aXNlCisgICBiZWhhdmUgdGhlIHNhbWUgYXMgOm1ldGg6YGRpY3Quc2V0ZGVmYXVsdGAuCisKKwogLi4gX2Nvb2tpZS1leGFtcGxlOgogCiBFeGFtcGxlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odHRwLnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAucnN0CmluZGV4IGEzODdhMzcuLmJlNjYxYzUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0dHAucnN0CkBAIC0xLDcgKzEsMTggQEAKIDptb2Q6YGh0dHBgIC0tLSBIVFRQIG1vZHVsZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotYGBodHRwYGAgaXMgYSBwYWNrYWdlIHRoYXQgY29sbGVjdHMgc2V2ZXJhbCBtb2R1bGVzIGZvciB3b3JraW5nIHdpdGggdGhlCisuLiBtb2R1bGU6OiBodHRwCisgICA6c3lub3BzaXM6IEhUVFAgc3RhdHVzIGNvZGVzIGFuZCBtZXNzYWdlcworCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9odHRwL19faW5pdF9fLnB5YAorCisuLiBpbmRleDo6CisgICBwYWlyOiBIVFRQOyBwcm90b2NvbAorICAgc2luZ2xlOiBIVFRQOyBodHRwIChzdGFuZGFyZCBtb2R1bGUpCisKKy0tLS0tLS0tLS0tLS0tCisKKzptb2Q6YGh0dHBgIGlzIGEgcGFja2FnZSB0aGF0IGNvbGxlY3RzIHNldmVyYWwgbW9kdWxlcyBmb3Igd29ya2luZyB3aXRoIHRoZQogSHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sOgogCiAqIDptb2Q6YGh0dHAuY2xpZW50YCBpcyBhIGxvdy1sZXZlbCBIVFRQIHByb3RvY29sIGNsaWVudDsgZm9yIGhpZ2gtbGV2ZWwgVVJMCkBAIC05LDMgKzIwLDEwNSBAQAogKiA6bW9kOmBodHRwLnNlcnZlcmAgY29udGFpbnMgYmFzaWMgSFRUUCBzZXJ2ZXIgY2xhc3NlcyBiYXNlZCBvbiA6bW9kOmBzb2NrZXRzZXJ2ZXJgCiAqIDptb2Q6YGh0dHAuY29va2llc2AgaGFzIHV0aWxpdGllcyBmb3IgaW1wbGVtZW50aW5nIHN0YXRlIG1hbmFnZW1lbnQgd2l0aCBjb29raWVzCiAqIDptb2Q6YGh0dHAuY29va2llamFyYCBwcm92aWRlcyBwZXJzaXN0ZW5jZSBvZiBjb29raWVzCisKKzptb2Q6YGh0dHBgIGlzIGFsc28gYSBtb2R1bGUgdGhhdCBkZWZpbmVzIGEgbnVtYmVyIG9mIEhUVFAgc3RhdHVzIGNvZGVzIGFuZAorYXNzb2NpYXRlZCBtZXNzYWdlcyB0aHJvdWdoIHRoZSA6Y2xhc3M6YGh0dHAuSFRUUFN0YXR1c2AgZW51bToKKworLi4gY2xhc3M6OiBIVFRQU3RhdHVzCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgZW51bS5JbnRFbnVtYCB0aGF0IGRlZmluZXMgYSBzZXQgb2YgSFRUUCBzdGF0dXMgY29kZXMsCisgICByZWFzb24gcGhyYXNlcyBhbmQgbG9uZyBkZXNjcmlwdGlvbnMgd3JpdHRlbiBpbiBFbmdsaXNoLgorCisgICBVc2FnZTo6CisKKyAgICAgID4+PiBmcm9tIGh0dHAgaW1wb3J0IEhUVFBTdGF0dXMKKyAgICAgID4+PiBIVFRQU3RhdHVzLk9LCisgICAgICA8SFRUUFN0YXR1cy5PSzogMjAwPgorICAgICAgPj4+IEhUVFBTdGF0dXMuT0sgPT0gMjAwCisgICAgICBUcnVlCisgICAgICA+Pj4gaHR0cC5IVFRQU3RhdHVzLk9LLnZhbHVlCisgICAgICAyMDAKKyAgICAgID4+PiBIVFRQU3RhdHVzLk9LLnBocmFzZQorICAgICAgJ09LJworICAgICAgPj4+IEhUVFBTdGF0dXMuT0suZGVzY3JpcHRpb24KKyAgICAgICdSZXF1ZXN0IGZ1bGZpbGxlZCwgZG9jdW1lbnQgZm9sbG93cycKKyAgICAgID4+PiBsaXN0KEhUVFBTdGF0dXMpCisgICAgICBbPEhUVFBTdGF0dXMuQ09OVElOVUU6IDEwMD4sIDxIVFRQU3RhdHVzLlNXSVRDSElOR19QUk9UT0NPTFM6IDEwMT4sIC4uLl0KKworLi4gX2h0dHAtc3RhdHVzLWNvZGVzOgorCitIVFRQIHN0YXR1cyBjb2RlcworLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9ydGVkLAorYElBTkEtcmVnaXN0ZXJlZCA8aHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaHR0cC1zdGF0dXMtY29kZXMvaHR0cC1zdGF0dXMtY29kZXMueGh0bWw+YF8KK3N0YXR1cyBjb2RlcyBhdmFpbGFibGUgaW4gOmNsYXNzOmBodHRwLkhUVFBTdGF0dXNgIGFyZToKKworPT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvZGUgICAgRW51bSBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV0YWlscworPT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BgMTAwYGAgYGBDT05USU5VRWBgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi4yLjEKK2BgMTAxYGAgYGBTV0lUQ0hJTkdfUFJPVE9DT0xTYGAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi4yLjIKK2BgMTAyYGAgYGBQUk9DRVNTSU5HYGAgICAgICAgICAgICAgICAgICAgICAgV2ViREFWIDpyZmM6YDI1MThgLCBTZWN0aW9uIDEwLjEKK2BgMjAwYGAgYGBPS2BgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi4zLjEKK2BgMjAxYGAgYGBDUkVBVEVEYGAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi4zLjIKK2BgMjAyYGAgYGBBQ0NFUFRFRGBgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi4zLjMKK2BgMjAzYGAgYGBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTmBgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi4zLjQKK2BgMjA0YGAgYGBOT19DT05URU5UYGAgICAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi4zLjUKK2BgMjA1YGAgYGBSRVNFVF9DT05URU5UYGAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi4zLjYKK2BgMjA2YGAgYGBQQVJUSUFMX0NPTlRFTlRgYCAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzM2AsIFNlY3Rpb24gNC4xCitgYDIwN2BgIGBgTVVMVElfU1RBVFVTYGAgICAgICAgICAgICAgICAgICAgIFdlYkRBViA6cmZjOmA0OTE4YCwgU2VjdGlvbiAxMS4xCitgYDIwOGBgIGBgQUxSRUFEWV9SRVBPUlRFRGBgICAgICAgICAgICAgICAgIFdlYkRBViBCaW5kaW5nIEV4dGVuc2lvbnMgOnJmYzpgNTg0MmAsIFNlY3Rpb24gNy4xIChFeHBlcmltZW50YWwpCitgYDIyNmBgIGBgSU1fVVNFRGBgICAgICAgICAgICAgICAgICAgICAgICAgIERlbHRhIEVuY29kaW5nIGluIEhUVFAgOnJmYzpgMzIyOWAsIFNlY3Rpb24gMTAuNC4xCitgYDMwMGBgIGBgTVVMVElQTEVfQ0hPSUNFU2BgICAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNC4xCitgYDMwMWBgIGBgTU9WRURfUEVSTUFORU5UTFlgYCAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNC4yCitgYDMwMmBgIGBgRk9VTkRgYCAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNC4zCitgYDMwM2BgIGBgU0VFX09USEVSYGAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNC40CitgYDMwNGBgIGBgTk9UX01PRElGSUVEYGAgICAgICAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzJgLCBTZWN0aW9uIDQuMQorYGAzMDVgYCBgYFVTRV9QUk9YWWBgICAgICAgICAgICAgICAgICAgICAgICBIVFRQLzEuMSA6cmZjOmA3MjMxYCwgU2VjdGlvbiA2LjQuNQorYGAzMDdgYCBgYFRFTVBPUkFSWV9SRURJUkVDVGBgICAgICAgICAgICAgICBIVFRQLzEuMSA6cmZjOmA3MjMxYCwgU2VjdGlvbiA2LjQuNworYGAzMDhgYCBgYFBFUk1BTkVOVF9SRURJUkVDVGBgICAgICAgICAgICAgICBQZXJtYW5lbnQgUmVkaXJlY3QgOnJmYzpgNzIzOGAsIFNlY3Rpb24gMyAoRXhwZXJpbWVudGFsKQorYGA0MDBgYCBgYEJBRF9SRVFVRVNUYGAgICAgICAgICAgICAgICAgICAgICBIVFRQLzEuMSA6cmZjOmA3MjMxYCwgU2VjdGlvbiA2LjUuMQorYGA0MDFgYCBgYFVOQVVUSE9SSVpFRGBgICAgICAgICAgICAgICAgICAgICBIVFRQLzEuMSBBdXRoZW50aWNhdGlvbiA6cmZjOmA3MjM1YCwgU2VjdGlvbiAzLjEKK2BgNDAyYGAgYGBQQVlNRU5UX1JFUVVJUkVEYGAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi41LjIKK2BgNDAzYGAgYGBGT1JCSURERU5gYCAgICAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi41LjMKK2BgNDA0YGAgYGBOT1RfRk9VTkRgYCAgICAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi41LjQKK2BgNDA1YGAgYGBNRVRIT0RfTk9UX0FMTE9XRURgYCAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi41LjUKK2BgNDA2YGAgYGBOT1RfQUNDRVBUQUJMRWBgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi41LjYKK2BgNDA3YGAgYGBQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRGBgICAgSFRUUC8xLjEgQXV0aGVudGljYXRpb24gOnJmYzpgNzIzNWAsIFNlY3Rpb24gMy4yCitgYDQwOGBgIGBgUkVRVUVTVF9USU1FT1VUYGAgICAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNS43CitgYDQwOWBgIGBgQ09ORkxJQ1RgYCAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNS44CitgYDQxMGBgIGBgR09ORWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNS45CitgYDQxMWBgIGBgTEVOR1RIX1JFUVVJUkVEYGAgICAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNS4xMAorYGA0MTJgYCBgYFBSRUNPTkRJVElPTl9GQUlMRURgYCAgICAgICAgICAgICBIVFRQLzEuMSA6cmZjOmA3MjMyYCwgU2VjdGlvbiA0LjIKK2BgNDEzYGAgYGBSRVFVRVNUX0VOVElUWV9UT09fTEFSR0VgYCAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi41LjExCitgYDQxNGBgIGBgUkVRVUVTVF9VUklfVE9PX0xPTkdgYCAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNS4xMgorYGA0MTVgYCBgYFVOU1VQUE9SVEVEX01FRElBX1RZUEVgYCAgICAgICAgICBIVFRQLzEuMSA6cmZjOmA3MjMxYCwgU2VjdGlvbiA2LjUuMTMKK2BgNDE2YGAgYGBSRVFVRVNUX1JBTkdFX05PVF9TQVRJU0ZJQUJMRWBgICAgSFRUUC8xLjEgUmFuZ2UgUmVxdWVzdHMgOnJmYzpgNzIzM2AsIFNlY3Rpb24gNC40CitgYDQxN2BgIGBgRVhQRUNUQVRJT05fRkFJTEVEYGAgICAgICAgICAgICAgIEhUVFAvMS4xIDpyZmM6YDcyMzFgLCBTZWN0aW9uIDYuNS4xNAorYGA0MjJgYCBgYFVOUFJPQ0VTU0FCTEVfRU5USVRZYGAgICAgICAgICAgICBXZWJEQVYgOnJmYzpgNDkxOGAsIFNlY3Rpb24gMTEuMgorYGA0MjNgYCBgYExPQ0tFRGBgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJEQVYgOnJmYzpgNDkxOGAsIFNlY3Rpb24gMTEuMworYGA0MjRgYCBgYEZBSUxFRF9ERVBFTkRFTkNZYGAgICAgICAgICAgICAgICBXZWJEQVYgOnJmYzpgNDkxOGAsIFNlY3Rpb24gMTEuNAorYGA0MjZgYCBgYFVQR1JBREVfUkVRVUlSRURgYCAgICAgICAgICAgICAgICBIVFRQLzEuMSA6cmZjOmA3MjMxYCwgU2VjdGlvbiA2LjUuMTUKK2BgNDI4YGAgYGBQUkVDT05ESVRJT05fUkVRVUlSRURgYCAgICAgICAgICAgQWRkaXRpb25hbCBIVFRQIFN0YXR1cyBDb2RlcyA6cmZjOmA2NTg1YAorYGA0MjlgYCBgYFRPT19NQU5ZX1JFUVVFU1RTYGAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIEhUVFAgU3RhdHVzIENvZGVzIDpyZmM6YDY1ODVgCitgYDQzMWBgIGBgUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRWBgIEFkZGl0aW9uYWwgSFRUUCBTdGF0dXMgQ29kZXMgOnJmYzpgNjU4NWAKK2BgNTAwYGAgYGBJTlRFUk5BTF9TRVJWRVJfRVJST1JgYCAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi42LjEKK2BgNTAxYGAgYGBOT1RfSU1QTEVNRU5URURgYCAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi42LjIKK2BgNTAyYGAgYGBCQURfR0FURVdBWWBgICAgICAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi42LjMKK2BgNTAzYGAgYGBTRVJWSUNFX1VOQVZBSUxBQkxFYGAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi42LjQKK2BgNTA0YGAgYGBHQVRFV0FZX1RJTUVPVVRgYCAgICAgICAgICAgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi42LjUKK2BgNTA1YGAgYGBIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRGBgICAgICAgSFRUUC8xLjEgOnJmYzpgNzIzMWAsIFNlY3Rpb24gNi42LjYKK2BgNTA2YGAgYGBWQVJJQU5UX0FMU09fTkVHT1RJQVRFU2BgICAgICAgICAgVHJhbnNwYXJlbnQgQ29udGVudCBOZWdvdGlhdGlvbiBpbiBIVFRQIDpyZmM6YDIyOTVgLCBTZWN0aW9uIDguMSAoRXhwZXJpbWVudGFsKQorYGA1MDdgYCBgYElOU1VGRklDSUVOVF9TVE9SQUdFYGAgICAgICAgICAgICBXZWJEQVYgOnJmYzpgNDkxOGAsIFNlY3Rpb24gMTEuNQorYGA1MDhgYCBgYExPT1BfREVURUNURURgYCAgICAgICAgICAgICAgICAgICBXZWJEQVYgQmluZGluZyBFeHRlbnNpb25zIDpyZmM6YDU4NDJgLCBTZWN0aW9uIDcuMiAoRXhwZXJpbWVudGFsKQorYGA1MTBgYCBgYE5PVF9FWFRFTkRFRGBgICAgICAgICAgICAgICAgICAgICBBbiBIVFRQIEV4dGVuc2lvbiBGcmFtZXdvcmsgOnJmYzpgMjc3NGAsIFNlY3Rpb24gNyAoRXhwZXJpbWVudGFsKQorYGA1MTFgYCBgYE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRURgYCBBZGRpdGlvbmFsIEhUVFAgU3RhdHVzIENvZGVzIDpyZmM6YDY1ODVgLCBTZWN0aW9uIDYKKz09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIG9yZGVyIHRvIHByZXNlcnZlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBlbnVtIHZhbHVlcyBhcmUgYWxzbyBwcmVzZW50CitpbiB0aGUgOm1vZDpgaHR0cC5jbGllbnRgIG1vZHVsZSBpbiB0aGUgZm9ybSBvZiBjb25zdGFudHMuIFRoZSBlbnVtIG5hbWUgaXMKK2VxdWFsIHRvIHRoZSBjb25zdGFudCBuYW1lIChpLmUuIGBgaHR0cC5IVFRQU3RhdHVzLk9LYGAgaXMgYWxzbyBhdmFpbGFibGUgYXMKK2BgaHR0cC5jbGllbnQuT0tgYCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKaW5kZXggMGJkZTM1Yi4uMTZjNGZhYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdApAQCAtNCw2ICs0LDcgQEAKIC4uIG1vZHVsZTo6IGh0dHAuc2VydmVyCiAgICA6c3lub3BzaXM6IEhUVFAgc2VydmVyIGFuZCByZXF1ZXN0IGhhbmRsZXJzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9odHRwL3NlcnZlci5weWAKIAogLi4gaW5kZXg6OgogICAgcGFpcjogV1dXOyBzZXJ2ZXIKQEAgLTExLDggKzEyLDYgQEAKICAgIHNpbmdsZTogVVJMCiAgICBzaW5nbGU6IGh0dHBkCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2h0dHAvc2VydmVyLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGNsYXNzZXMgZm9yIGltcGxlbWVudGluZyBIVFRQIHNlcnZlcnMgKFdlYiBzZXJ2ZXJzKS4KQEAgLTk3LDcgKzk2LDYgQEAKICAgICAgIDptb2Q6YGh0dHAuY2xpZW50YCBpcyB1c2VkIHRvIHBhcnNlIHRoZSBoZWFkZXJzIGFuZCBpdCByZXF1aXJlcyB0aGF0IHRoZQogICAgICAgSFRUUCByZXF1ZXN0IHByb3ZpZGUgYSB2YWxpZCA6cmZjOmAyODIyYCBzdHlsZSBoZWFkZXIuCiAKLQogICAgLi4gYXR0cmlidXRlOjogcmZpbGUKIAogICAgICAgQ29udGFpbnMgYW4gaW5wdXQgc3RyZWFtLCBwb3NpdGlvbmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgb3B0aW9uYWwgaW5wdXQKQEAgLTEwOSw3ICsxMDcsNyBAQAogICAgICAgY2xpZW50LiBQcm9wZXIgYWRoZXJlbmNlIHRvIHRoZSBIVFRQIHByb3RvY29sIG11c3QgYmUgdXNlZCB3aGVuIHdyaXRpbmcgdG8KICAgICAgIHRoaXMgc3RyZWFtLgogCi0gICA6Y2xhc3M6YEJhc2VIVFRQUmVxdWVzdEhhbmRsZXJgIGhhcyB0aGUgZm9sbG93aW5nIGNsYXNzIHZhcmlhYmxlczoKKyAgIDpjbGFzczpgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcmAgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKIAogICAgLi4gYXR0cmlidXRlOjogc2VydmVyX3ZlcnNpb24KIApAQCAtMTI1LDEzICsxMjMsMTAgQEAKIAogICAgLi4gYXR0cmlidXRlOjogZXJyb3JfbWVzc2FnZV9mb3JtYXQKIAotICAgICAgU3BlY2lmaWVzIGEgZm9ybWF0IHN0cmluZyBmb3IgYnVpbGRpbmcgYW4gZXJyb3IgcmVzcG9uc2UgdG8gdGhlIGNsaWVudC4gSXQKLSAgICAgIHVzZXMgcGFyZW50aGVzaXplZCwga2V5ZWQgZm9ybWF0IHNwZWNpZmllcnMsIHNvIHRoZSBmb3JtYXQgb3BlcmFuZCBtdXN0IGJlCi0gICAgICBhIGRpY3Rpb25hcnkuIFRoZSAqY29kZSoga2V5IHNob3VsZCBiZSBhbiBpbnRlZ2VyLCBzcGVjaWZ5aW5nIHRoZSBudW1lcmljCi0gICAgICBIVFRQIGVycm9yIGNvZGUgdmFsdWUuICptZXNzYWdlKiBzaG91bGQgYmUgYSBzdHJpbmcgY29udGFpbmluZyBhCi0gICAgICAoZGV0YWlsZWQpIGVycm9yIG1lc3NhZ2Ugb2Ygd2hhdCBvY2N1cnJlZCwgYW5kICpleHBsYWluKiBzaG91bGQgYmUgYW4KLSAgICAgIGV4cGxhbmF0aW9uIG9mIHRoZSBlcnJvciBjb2RlIG51bWJlci4gRGVmYXVsdCAqbWVzc2FnZSogYW5kICpleHBsYWluKgotICAgICAgdmFsdWVzIGNhbiBmb3VuZCBpbiB0aGUgOmF0dHI6YHJlc3BvbnNlc2AgY2xhc3MgdmFyaWFibGUuCisgICAgICBTcGVjaWZpZXMgYSBmb3JtYXQgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIHVzZWQgYnkgOm1ldGg6YHNlbmRfZXJyb3JgIG1ldGhvZAorICAgICAgZm9yIGJ1aWxkaW5nIGFuIGVycm9yIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQuIFRoZSBzdHJpbmcgaXMgZmlsbGVkIGJ5CisgICAgICBkZWZhdWx0IHdpdGggdmFyaWFibGVzIGZyb20gOmF0dHI6YHJlc3BvbnNlc2AgYmFzZWQgb24gdGhlIHN0YXR1cyBjb2RlCisgICAgICB0aGF0IHBhc3NlZCB0byA6bWV0aDpgc2VuZF9lcnJvcmAuCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGVycm9yX2NvbnRlbnRfdHlwZQogCkBAIC0xNTQsMTEgKzE0OSwxMSBAQAogCiAgICAuLiBhdHRyaWJ1dGU6OiByZXNwb25zZXMKIAotICAgICAgVGhpcyB2YXJpYWJsZSBjb250YWlucyBhIG1hcHBpbmcgb2YgZXJyb3IgY29kZSBpbnRlZ2VycyB0byB0d28tZWxlbWVudCB0dXBsZXMKKyAgICAgIFRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgbWFwcGluZyBvZiBlcnJvciBjb2RlIGludGVnZXJzIHRvIHR3by1lbGVtZW50IHR1cGxlcwogICAgICAgY29udGFpbmluZyBhIHNob3J0IGFuZCBsb25nIG1lc3NhZ2UuIEZvciBleGFtcGxlLCBgYHtjb2RlOiAoc2hvcnRtZXNzYWdlLAogICAgICAgbG9uZ21lc3NhZ2UpfWBgLiBUaGUgKnNob3J0bWVzc2FnZSogaXMgdXN1YWxseSB1c2VkIGFzIHRoZSAqbWVzc2FnZSoga2V5IGluIGFuCi0gICAgICBlcnJvciByZXNwb25zZSwgYW5kICpsb25nbWVzc2FnZSogYXMgdGhlICpleHBsYWluKiBrZXkgKHNlZSB0aGUKLSAgICAgIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUpLgorICAgICAgZXJyb3IgcmVzcG9uc2UsIGFuZCAqbG9uZ21lc3NhZ2UqIGFzIHRoZSAqZXhwbGFpbioga2V5LiAgSXQgaXMgdXNlZCBieQorICAgICAgOm1ldGg6YHNlbmRfcmVzcG9uc2Vfb25seWAgYW5kIDptZXRoOmBzZW5kX2Vycm9yYCBtZXRob2RzLgogCiAgICBBIDpjbGFzczpgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcmAgaW5zdGFuY2UgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIApAQCAtMTkxLDE3ICsxODYsMTggQEAKICAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBhbiBvcHRpb25hbCwgc2hvcnQsIGh1bWFuCiAgICAgICByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuICBUaGUgKmV4cGxhaW4qIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvCiAgICAgICBwcm92aWRlIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yOyBpdCB3aWxsIGJlIGZvcm1hdHRlZAotICAgICAgdXNpbmcgdGhlIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUgYW5kIGVtaXR0ZWQsIGFmdGVyCisgICAgICB1c2luZyB0aGUgOmF0dHI6YGVycm9yX21lc3NhZ2VfZm9ybWF0YCBhdHRyaWJ1dGUgYW5kIGVtaXR0ZWQsIGFmdGVyCiAgICAgICBhIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzLCBhcyB0aGUgcmVzcG9uc2UgYm9keS4gIFRoZSA6YXR0cjpgcmVzcG9uc2VzYAotICAgICAgY2xhc3MgdmFyaWFibGUgaG9sZHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciAqbWVzc2FnZSogYW5kICpleHBsYWluKiB0aGF0CisgICAgICBhdHRyaWJ1dGUgaG9sZHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciAqbWVzc2FnZSogYW5kICpleHBsYWluKiB0aGF0CiAgICAgICB3aWxsIGJlIHVzZWQgaWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQ7IGZvciB1bmtub3duIGNvZGVzIHRoZSBkZWZhdWx0IHZhbHVlCi0gICAgICBmb3IgYm90aCBpcyB0aGUgc3RyaW5nIGBgPz8/YGAuCisgICAgICBmb3IgYm90aCBpcyB0aGUgc3RyaW5nIGBgPz8/YGAuIFRoZSBib2R5IHdpbGwgYmUgZW1wdHkgaWYgdGhlIG1ldGhvZCBpcworICAgICAgSEVBRCBvciB0aGUgcmVzcG9uc2UgY29kZSBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzogYGAxeHhgYCwKKyAgICAgIGBgMjA0IE5vIENvbnRlbnRgYCwgYGAyMDUgUmVzZXQgQ29udGVudGBgLCBgYDMwNCBOb3QgTW9kaWZpZWRgYC4KIAogICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKICAgICAgICAgIFRoZSBlcnJvciByZXNwb25zZSBpbmNsdWRlcyBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlci4KICAgICAgICAgIEFkZGVkIHRoZSAqZXhwbGFpbiogYXJndW1lbnQuCiAKLQogICAgLi4gbWV0aG9kOjogc2VuZF9yZXNwb25zZShjb2RlLCBtZXNzYWdlPU5vbmUpCiAKICAgICAgIEFkZHMgYSByZXNwb25zZSBoZWFkZXIgdG8gdGhlIGhlYWRlcnMgYnVmZmVyIGFuZCBsb2dzIHRoZSBhY2NlcHRlZApAQCAtMjE3LDcgKzIxMyw2IEBACiAgICAgICAgICBIZWFkZXJzIGFyZSBzdG9yZWQgdG8gYW4gaW50ZXJuYWwgYnVmZmVyIGFuZCA6bWV0aDpgZW5kX2hlYWRlcnNgCiAgICAgICAgICBuZWVkcyB0byBiZSBjYWxsZWQgZXhwbGljaXRseS4KIAotCiAgICAuLiBtZXRob2Q6OiBzZW5kX2hlYWRlcihrZXl3b3JkLCB2YWx1ZSkKIAogICAgICAgQWRkcyB0aGUgSFRUUCBoZWFkZXIgdG8gYW4gaW50ZXJuYWwgYnVmZmVyIHdoaWNoIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUKQEAgLTIyOSw3ICsyMjQsNiBAQAogICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICAgIEhlYWRlcnMgYXJlIHN0b3JlZCBpbiBhbiBpbnRlcm5hbCBidWZmZXIuCiAKLQogICAgLi4gbWV0aG9kOjogc2VuZF9yZXNwb25zZV9vbmx5KGNvZGUsIG1lc3NhZ2U9Tm9uZSkKIAogICAgICAgU2VuZHMgdGhlIHJlc3BvbnNlIGhlYWRlciBvbmx5LCB1c2VkIGZvciB0aGUgcHVycG9zZXMgd2hlbiBgYDEwMApAQCAtMjc5LDcgKzI3Myw3IEBACiAgICAuLiBtZXRob2Q6OiB2ZXJzaW9uX3N0cmluZygpCiAKICAgICAgIFJldHVybnMgdGhlIHNlcnZlciBzb2Z0d2FyZSdzIHZlcnNpb24gc3RyaW5nLiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlCi0gICAgICA6YXR0cjpgc2VydmVyX3ZlcnNpb25gIGFuZCA6YXR0cjpgc3lzX3ZlcnNpb25gIGNsYXNzIHZhcmlhYmxlcy4KKyAgICAgIDphdHRyOmBzZXJ2ZXJfdmVyc2lvbmAgYW5kIDphdHRyOmBzeXNfdmVyc2lvbmAgYXR0cmlidXRlcy4KIAogICAgLi4gbWV0aG9kOjogZGF0ZV90aW1lX3N0cmluZyh0aW1lc3RhbXA9Tm9uZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaWRsZS5yc3QgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdAppbmRleCA0Mzg0ZDU2Li40YThjMjU3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pZGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdApAQCAtMywxMiArMywxNiBAQAogSURMRQogPT09PQogCisuLiBtb2R1bGVhdXRob3I6OiBHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BweXRob24ub3JnPgorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9pZGxlbGliL2AKKwogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBJRExFCiAgICBzaW5nbGU6IFB5dGhvbiBFZGl0b3IKICAgIHNpbmdsZTogSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudAogCi0uLiBtb2R1bGVhdXRob3I6OiBHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BweXRob24ub3JnPgorLS0tLS0tLS0tLS0tLS0KIAogSURMRSBpcyBQeXRob24ncyBJbnRlZ3JhdGVkIERldmVsb3BtZW50IGFuZCBMZWFybmluZyBFbnZpcm9ubWVudC4KIApAQCAtMTI4LDcgKzEzMiw3IEBACiAgICBTZWFyY2ggZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RyaW5nLCBpZiB0aGVyZSBpcyBvbmUuCiAKIEZpbmQgaW4gRmlsZXMuLi4KLSAgIE9wZW4gYSBmaWxlIHNlYXJjaCBkaWFsb2cuICBQdXQgcmVzdWx0cyBpbiBhbiBuZXcgb3V0cHV0IHdpbmRvdy4KKyAgIE9wZW4gYSBmaWxlIHNlYXJjaCBkaWFsb2cuICBQdXQgcmVzdWx0cyBpbiBhIG5ldyBvdXRwdXQgd2luZG93LgogCiBSZXBsYWNlLi4uCiAgICBPcGVuIGEgc2VhcmNoLWFuZC1yZXBsYWNlIGRpYWxvZy4KQEAgLTUyMCw3ICs1MjQsNyBAQAogQ29tbWFuZCBsaW5lIHVzYWdlCiBeXl5eXl5eXl5eXl5eXl5eXl4KIAotOjoKKy4uIGNvZGUtYmxvY2s6OiBub25lCiAKICAgIGlkbGUucHkgWy1jIGNvbW1hbmRdIFstZF0gWy1lXSBbLWhdIFstaV0gWy1yIGZpbGVdIFstc10gWy10IHRpdGxlXSBbLV0gW2FyZ10gLi4uCiAKQEAgLTU1MCwxNCArNTU0LDE2IEBACiAKIEFzIG11Y2ggYXMgcG9zc2libGUsIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFB5dGhvbiBjb2RlIHdpdGggSURMRSBpcyB0aGUKIHNhbWUgYXMgZXhlY3V0aW5nIHRoZSBzYW1lIGNvZGUgaW4gYSBjb25zb2xlIHdpbmRvdy4gIEhvd2V2ZXIsIHRoZSBkaWZmZXJlbnQKLWludGVyZmFjZSBhbmQgb3BlcmF0aW9uIG9jY2FzaW9uYWxseSBhZmZlY3RzIHJlc3VsdHMuCitpbnRlcmZhY2UgYW5kIG9wZXJhdGlvbiBvY2Nhc2lvbmFsbHkgYWZmZWN0cyB2aXNpYmxlIHJlc3VsdHMuICBGb3IgaW5zdGFuY2UsCitgYHN5cy5tb2R1bGVzYGAgc3RhcnRzIHdpdGggbW9yZSBlbnRyaWVzLgogCi1Gb3IgaW5zdGFuY2UsIElETEUgbm9ybWFsbHkgZXhlY3V0ZXMgdXNlciBjb2RlIGluIGEgc2VwYXJhdGUgcHJvY2VzcyBmcm9tCi10aGUgSURMRSBHVUkgaXRzZWxmLiAgVGhlIElETEUgdmVyc2lvbnMgb2Ygc3lzLnN0ZGluLCAuc3Rkb3V0LCBhbmQgLnN0ZGVyciBpbiB0aGUKLWV4ZWN1dGlvbiBwcm9jZXNzIGdldCBpbnB1dCBmcm9tIGFuZCBzZW5kIG91dHB1dCB0byB0aGUgR1VJIHByb2Nlc3MsCi13aGljaCBrZWVwcyBjb250cm9sIG9mIHRoZSBrZXlib2FyZCBhbmQgc2NyZWVuLiAgVGhpcyBpcyBub3JtYWxseSB0cmFuc3BhcmVudCwKLWJ1dCBjb2RlIHRoYXQgYWNjZXNzIHRoZXNlIG9iamVjdCB3aWxsIHNlZSBkaWZmZXJlbnQgYXR0cmlidXRlIHZhbHVlcy4KLUFsc28sIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGFjY2VzcyB0aGUga2V5Ym9hcmQgYW5kIHNjcmVlbiB3aWxsIG5vdCB3b3JrLgorSURMRSBhbHNvIHJlcGxhY2VzIGBgc3lzLnN0ZGluYGAsIGBgc3lzLnN0ZG91dGBgLCBhbmQgYGBzeXMuc3RkZXJyYGAgd2l0aAorb2JqZWN0cyB0aGF0IGdldCBpbnB1dCBmcm9tIGFuZCBzZW5kIG91dHB1dCB0byB0aGUgU2hlbGwgd2luZG93LgorV2hlbiB0aGlzIHdpbmRvdyBoYXMgdGhlIGZvY3VzLCBpdCBjb250cm9scyB0aGUga2V5Ym9hcmQgYW5kIHNjcmVlbi4KK1RoaXMgaXMgbm9ybWFsbHkgdHJhbnNwYXJlbnQsIGJ1dCBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBhY2Nlc3MgdGhlIGtleWJvYXJkCithbmQgc2NyZWVuIHdpbGwgbm90IHdvcmsuICBJZiBgYHN5c2BgIGlzIHJlc2V0IHdpdGggYGBpbXBvcnRsaWIucmVsb2FkKHN5cylgYCwKK0lETEUncyBjaGFuZ2VzIGFyZSBsb3N0IGFuZCB0aGluZ3MgbGkga2UgYGBpbnB1dGBgLCBgYHJhd19pbnB1dGBgLCBhbmQKK2BgcHJpbnRgYCB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4KIAogV2l0aCBJRExFJ3MgU2hlbGwsIG9uZSBlbnRlcnMsIGVkaXRzLCBhbmQgcmVjYWxscyBjb21wbGV0ZSBzdGF0ZW1lbnRzLgogU29tZSBjb25zb2xlcyBvbmx5IHdvcmsgd2l0aCBhIHNpbmdsZSBwaHlzaWNhbCBsaW5lIGF0IGEgdGltZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltYXBsaWIucnN0IGIvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QKaW5kZXggZmE3MzZmZS4uYzI1ZTdkOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IGltYXBsaWIKICAgIDpzeW5vcHNpczogSU1BUDQgcHJvdG9jb2wgY2xpZW50IChyZXF1aXJlcyBzb2NrZXRzKS4KKwogLi4gbW9kdWxlYXV0aG9yOjogUGllcnMgTGF1ZGVyIDxwaWVyc0Bjb21tdW5pdHlzb2x1dGlvbnMuY29tLmF1PgogLi4gc2VjdGlvbmF1dGhvcjo6IFBpZXJzIExhdWRlciA8cGllcnNAY29tbXVuaXR5c29sdXRpb25zLmNvbS5hdT4KIC4uIHJldmlzZWQgYnkgRVNSLCBKYW51YXJ5IDIwMDAKQEAgLTEwLDE0ICsxMSwxMyBAQAogLi4gY2hhbmdlcyBmb3IgSU1BUDRfc3RyZWFtIGJ5IFBpZXJzIExhdWRlciA8cGllcnNAY29tbXVuaXR5c29sdXRpb25zLmNvbS5hdT4sCiAgICBOb3ZlbWJlciAyMDAyCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2ltYXBsaWIucHlgCiAKIC4uIGluZGV4OjoKICAgIHBhaXI6IElNQVA0OyBwcm90b2NvbAogICAgcGFpcjogSU1BUDRfU1NMOyBwcm90b2NvbAogICAgcGFpcjogSU1BUDRfc3RyZWFtOyBwcm90b2NvbAogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9pbWFwbGliLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRocmVlIGNsYXNzZXMsIDpjbGFzczpgSU1BUDRgLCA6Y2xhc3M6YElNQVA0X1NTTGAgYW5kCkBAIC0zNyw2ICszNywxOSBAQAogICAgaW5pdGlhbGl6ZWQuIElmICpob3N0KiBpcyBub3Qgc3BlY2lmaWVkLCBgYCcnYGAgKHRoZSBsb2NhbCBob3N0KSBpcyB1c2VkLiBJZgogICAgKnBvcnQqIGlzIG9taXR0ZWQsIHRoZSBzdGFuZGFyZCBJTUFQNCBwb3J0ICgxNDMpIGlzIHVzZWQuCiAKKyAgIFRoZSA6Y2xhc3M6YElNQVA0YCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gIFdoZW4gdXNlZAorICAgbGlrZSB0aGlzLCB0aGUgSU1BUDQgYGBMT0dPVVRgYCBjb21tYW5kIGlzIGlzc3VlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlCisgICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IGV4aXRzLiAgRS5nLjo6CisKKyAgICA+Pj4gZnJvbSBpbWFwbGliIGltcG9ydCBJTUFQNAorICAgID4+PiB3aXRoIElNQVA0KCJkb21haW4ub3JnIikgYXMgTToKKyAgICAuLi4gICAgIE0ubm9vcCgpCisgICAgLi4uCisgICAgKCdPSycsIFtiJ05vdGhpbmcgQWNjb21wbGlzaGVkLiBkMjVpZjY1aHk5MDN3ZW8uODcnXSkKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFN1cHBvcnQgZm9yIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdhcyBhZGRlZC4KKwogVGhyZWUgZXhjZXB0aW9ucyBhcmUgZGVmaW5lZCBhcyBhdHRyaWJ1dGVzIG9mIHRoZSA6Y2xhc3M6YElNQVA0YCBjbGFzczoKIAogCkBAIC02NCw3ICs3Nyw4IEBACiBUaGVyZSdzIGFsc28gYSBzdWJjbGFzcyBmb3Igc2VjdXJlIGNvbm5lY3Rpb25zOgogCiAKLS4uIGNsYXNzOjogSU1BUDRfU1NMKGhvc3Q9JycsIHBvcnQ9SU1BUDRfU1NMX1BPUlQsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgc3NsX2NvbnRleHQ9Tm9uZSkKKy4uIGNsYXNzOjogSU1BUDRfU1NMKGhvc3Q9JycsIHBvcnQ9SU1BUDRfU1NMX1BPUlQsIGtleWZpbGU9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSwgc3NsX2NvbnRleHQ9Tm9uZSkKIAogICAgVGhpcyBpcyBhIHN1YmNsYXNzIGRlcml2ZWQgZnJvbSA6Y2xhc3M6YElNQVA0YCB0aGF0IGNvbm5lY3RzIG92ZXIgYW4gU1NMCiAgICBlbmNyeXB0ZWQgc29ja2V0ICh0byB1c2UgdGhpcyBjbGFzcyB5b3UgbmVlZCBhIHNvY2tldCBtb2R1bGUgdGhhdCB3YXMgY29tcGlsZWQKQEAgLTE0Myw3ICsxNTcsNyBAQAogCiAgICBEb2N1bWVudHMgZGVzY3JpYmluZyB0aGUgcHJvdG9jb2wsIGFuZCBzb3VyY2VzIGFuZCBiaW5hcmllcyAgZm9yIHNlcnZlcnMKICAgIGltcGxlbWVudGluZyBpdCwgY2FuIGFsbCBiZSBmb3VuZCBhdCB0aGUgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uJ3MgKklNQVAKLSAgIEluZm9ybWF0aW9uIENlbnRlciogKGh0dHA6Ly93d3cud2FzaGluZ3Rvbi5lZHUvaW1hcC8pLgorICAgSW5mb3JtYXRpb24gQ2VudGVyKiAoaHR0cHM6Ly93d3cud2FzaGluZ3Rvbi5lZHUvaW1hcC8pLgogCiAKIC4uIF9pbWFwNC1vYmplY3RzOgpAQCAtMTk4LDYgKzIxMiwxMCBAQAogICAgdGhhdCB3aWxsIGJlIGJhc2U2NCBlbmNvZGVkIGFuZCBzZW50IHRvIHRoZSBzZXJ2ZXIuICBJdCBzaG91bGQgcmV0dXJuCiAgICBgYE5vbmVgYCBpZiB0aGUgY2xpZW50IGFib3J0IHJlc3BvbnNlIGBgKmBgIHNob3VsZCBiZSBzZW50IGluc3RlYWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBzdHJpbmcgdXNlcm5hbWVzIGFuZCBwYXNzd29yZHMgYXJlIG5vdyBlbmNvZGVkIHRvIGBgdXRmLThgYCBpbnN0ZWFkIG9mCisgICAgICBiZWluZyBsaW1pdGVkIHRvIEFTQ0lJLgorCiAKIC4uIG1ldGhvZDo6IElNQVA0LmNoZWNrKCkKIApAQCAtMjMwLDYgKzI0OCwxNiBAQAogICAgRGVsZXRlIHRoZSBBQ0xzIChyZW1vdmUgYW55IHJpZ2h0cykgc2V0IGZvciB3aG8gb24gbWFpbGJveC4KIAogCisuLiBtZXRob2Q6OiBJTUFQNC5lbmFibGUoY2FwYWJpbGl0eSkKKworICAgRW5hYmxlICpjYXBhYmlsaXR5KiAoc2VlIDpyZmM6YDUxNjFgKS4gIE1vc3QgY2FwYWJpbGl0aWVzIGRvIG5vdCBuZWVkIHRvIGJlCisgICBlbmFibGVkLiAgQ3VycmVudGx5IG9ubHkgdGhlIGBgVVRGOD1BQ0NFUFRgYCBjYXBhYmlsaXR5IGlzIHN1cHBvcnRlZAorICAgKHNlZSA6UkZDOmA2ODU1YCkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorICAgICAgVGhlIDptZXRoOmBlbmFibGVgIG1ldGhvZCBpdHNlbGYsIGFuZCA6UkZDOmA2ODU1YCBzdXBwb3J0LgorCisKIC4uIG1ldGhvZDo6IElNQVA0LmV4cHVuZ2UoKQogCiAgICBQZXJtYW5lbnRseSByZW1vdmUgZGVsZXRlZCBpdGVtcyBmcm9tIHNlbGVjdGVkIG1haWxib3guIEdlbmVyYXRlcyBhbiBgYEVYUFVOR0VgYApAQCAtMzY3LDcgKzM5NSw5IEBACiAgICBTZWFyY2ggbWFpbGJveCBmb3IgbWF0Y2hpbmcgbWVzc2FnZXMuICAqY2hhcnNldCogbWF5IGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlCiAgICBubyBgYENIQVJTRVRgYCB3aWxsIGJlIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyLiAgVGhlIElNQVAKICAgIHByb3RvY29sIHJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIGNyaXRlcmlvbiBiZSBzcGVjaWZpZWQ7IGFuIGV4Y2VwdGlvbiB3aWxsIGJlCi0gICByYWlzZWQgd2hlbiB0aGUgc2VydmVyIHJldHVybnMgYW4gZXJyb3IuCisgICByYWlzZWQgd2hlbiB0aGUgc2VydmVyIHJldHVybnMgYW4gZXJyb3IuICAqY2hhcnNldCogbXVzdCBiZSBgYE5vbmVgYCBpZgorICAgdGhlIGBgVVRGOD1BQ0NFUFRgYCBjYXBhYmlsaXR5IHdhcyBlbmFibGVkIHVzaW5nIHRoZSA6bWV0aDpgZW5hYmxlYAorICAgY29tbWFuZC4KIAogICAgRXhhbXBsZTo6CiAKQEAgLTUyOSw2ICs1NTksMTUgQEAKICAgIHRoZSBtb2R1bGUgdmFyaWFibGUgYGBEZWJ1Z2BgLiAgVmFsdWVzIGdyZWF0ZXIgdGhhbiB0aHJlZSB0cmFjZSBlYWNoIGNvbW1hbmQuCiAKIAorLi4gYXR0cmlidXRlOjogSU1BUDQudXRmOF9lbmFibGVkCisKKyAgIEJvb2xlYW4gdmFsdWUgdGhhdCBpcyBub3JtYWxseSBgYEZhbHNlYGAsIGJ1dCBpcyBzZXQgdG8gYGBUcnVlYGAgaWYgYW4KKyAgIDptZXRoOmBlbmFibGVgIGNvbW1hbmQgaXMgc3VjY2Vzc2Z1bGx5IGlzc3VlZCBmb3IgdGhlIGBgVVRGOD1BQ0NFUFRgYAorICAgY2FwYWJpbGl0eS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gX2ltYXA0LWV4YW1wbGU6CiAKIElNQVA0IEV4YW1wbGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltZ2hkci5yc3QgYi9Eb2MvbGlicmFyeS9pbWdoZHIucnN0CmluZGV4IDllODk1MjMuLmYxMWY2ZGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltZ2hkci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1naGRyLnJzdApAQCAtNDgsNiArNDgsMTQgQEAKICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgJ3BuZydgYCAgfCBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzICAgICAgICAgfAogKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGAnd2VicCdgYCB8IFdlYlAgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYCdleHInYGAgIHwgT3BlbkVYUiBGaWxlcyAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorICAgVGhlICpleHIqIGFuZCAqd2VicCogZm9ybWF0cyB3ZXJlIGFkZGVkLgorCiAKIFlvdSBjYW4gZXh0ZW5kIHRoZSBsaXN0IG9mIGZpbGUgdHlwZXMgOm1vZDpgaW1naGRyYCBjYW4gcmVjb2duaXplIGJ5IGFwcGVuZGluZwogdG8gdGhpcyB2YXJpYWJsZToKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcC5yc3QgYi9Eb2MvbGlicmFyeS9pbXAucnN0CmluZGV4IDgzYTUyZTQuLjk4MjhiYTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1wLnJzdApAQCAtNSwxMSArNSwxNSBAQAogICAgOnN5bm9wc2lzOiBBY2Nlc3MgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbXBvcnQgc3RhdGVtZW50LgogICAgOmRlcHJlY2F0ZWQ6CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2ltcC5weWAKKwogLi4gZGVwcmVjYXRlZDo6IDMuNAogICAgVGhlIDptb2Q6YGltcGAgcGFja2FnZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uIGluIGZhdm9yIG9mIDptb2Q6YGltcG9ydGxpYmAuCiAKIC4uIGluZGV4Ojogc3RhdGVtZW50OiBpbXBvcnQKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBtZWNoYW5pc21zIHVzZWQgdG8gaW1wbGVtZW50IHRoZQogOmtleXdvcmQ6YGltcG9ydGAgc3RhdGVtZW50LiAgSXQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBhbmQgZnVuY3Rpb25zOgogCkBAIC0xOTcsMTEgKzIwMSw5IEBACiAgICB2YWx1ZSB3b3VsZCBiZSBgYC9mb28vYmFyL19fcHljYWNoZV9fL2Jhei5jcHl0aG9uLTMyLnB5Y2BgIGZvciBQeXRob24gMy4yLgogICAgVGhlIGBgY3B5dGhvbi0zMmBgIHN0cmluZyBjb21lcyBmcm9tIHRoZSBjdXJyZW50IG1hZ2ljIHRhZyAoc2VlCiAgICA6ZnVuYzpgZ2V0X3RhZ2A7IGlmIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBub3QgZGVmaW5lZCB0aGVuCi0gICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aWxsIGJlIHJhaXNlZCkuICBUaGUgcmV0dXJuZWQgcGF0aCB3aWxsIGVuZCBpbgotICAgYGAucHljYGAgd2hlbiBgYF9fZGVidWdfX2BgIGlzIGBgVHJ1ZWBgIG9yIGBgLnB5b2BgIGZvciBhbiBvcHRpbWl6ZWQgUHl0aG9uCi0gICAoaS5lLiBgYF9fZGVidWdfX2BgIGlzIGBgRmFsc2VgYCkuICBCeSBwYXNzaW5nIGluIGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYCBmb3IKLSAgICpkZWJ1Z19vdmVycmlkZSogeW91IGNhbiBvdmVycmlkZSB0aGUgc3lzdGVtJ3MgdmFsdWUgZm9yIGBgX19kZWJ1Z19fYGAgZm9yCi0gICBleHRlbnNpb24gc2VsZWN0aW9uLgorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2lsbCBiZSByYWlzZWQpLiBCeSBwYXNzaW5nIGluIGBgVHJ1ZWBgIG9yCisgICBgYEZhbHNlYGAgZm9yICpkZWJ1Z19vdmVycmlkZSogeW91IGNhbiBvdmVycmlkZSB0aGUgc3lzdGVtJ3MgdmFsdWUgZm9yCisgICBgYF9fZGVidWdfX2BgLCBsZWFkaW5nIHRvIG9wdGltaXplZCBieXRlY29kZS4KIAogICAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LgogCkBAIC0yMTIsNiArMjE0LDkgQEAKICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKICAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgIGluc3RlYWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgKmRlYnVnX292ZXJyaWRlKiBwYXJhbWV0ZXIgbm8gbG9uZ2VyIGNyZWF0ZXMgYSBgYC5weW9gYCBmaWxlLgorCiAKIC4uIGZ1bmN0aW9uOjogc291cmNlX2Zyb21fY2FjaGUocGF0aCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdCBiL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKaW5kZXggNDI4MTJmNi4uMDZlOWVhMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CkBAIC05LDYgKzksOSBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvaW1wb3J0bGliL19faW5pdF9fLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBJbnRyb2R1Y3Rpb24KIC0tLS0tLS0tLS0tLQpAQCAtNTIsOSArNTUsMTggQEAKICAgICA6cGVwOmAzNjZgCiAgICAgICAgIE1haW4gbW9kdWxlIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMKIAorICAgIDpwZXA6YDQyMGAKKyAgICAgICAgSW1wbGljaXQgbmFtZXNwYWNlIHBhY2thZ2VzCisKICAgICA6cGVwOmA0NTFgCiAgICAgICAgIEEgTW9kdWxlU3BlYyBUeXBlIGZvciB0aGUgSW1wb3J0IFN5c3RlbQogCisgICAgOnBlcDpgNDg4YAorICAgICAgICBFbGltaW5hdGlvbiBvZiBQWU8gZmlsZXMKKworICAgIDpwZXA6YDQ4OWAKKyAgICAgICAgTXVsdGktcGhhc2UgZXh0ZW5zaW9uIG1vZHVsZSBpbml0aWFsaXphdGlvbgorCiAgICAgOnBlcDpgMzEyMGAKICAgICAgICAgVXNpbmcgVVRGLTggYXMgdGhlIERlZmF1bHQgU291cmNlIEVuY29kaW5nCiAKQEAgLTY5LDYgKzgxLDEwIEBACiAKICAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnVpbHQtaW4gOmZ1bmM6YF9faW1wb3J0X19gIGZ1bmN0aW9uLgogCisgICAgLi4gbm90ZTo6CisgICAgICAgUHJvZ3JhbW1hdGljIGltcG9ydGluZyBvZiBtb2R1bGVzIHNob3VsZCB1c2UgOmZ1bmM6YGltcG9ydF9tb2R1bGVgCisgICAgICAgaW5zdGVhZCBvZiB0aGlzIGZ1bmN0aW9uLgorCiAuLiBmdW5jdGlvbjo6IGltcG9ydF9tb2R1bGUobmFtZSwgcGFja2FnZT1Ob25lKQogCiAgICAgSW1wb3J0IGEgbW9kdWxlLiBUaGUgKm5hbWUqIGFyZ3VtZW50IHNwZWNpZmllcyB3aGF0IG1vZHVsZSB0bwpAQCAtODEsMTIgKzk3LDE1IEBACiAKICAgICBUaGUgOmZ1bmM6YGltcG9ydF9tb2R1bGVgIGZ1bmN0aW9uIGFjdHMgYXMgYSBzaW1wbGlmeWluZyB3cmFwcGVyIGFyb3VuZAogICAgIDpmdW5jOmBpbXBvcnRsaWIuX19pbXBvcnRfX2AuIFRoaXMgbWVhbnMgYWxsIHNlbWFudGljcyBvZiB0aGUgZnVuY3Rpb24gYXJlCi0gICAgZGVyaXZlZCBmcm9tIDpmdW5jOmBpbXBvcnRsaWIuX19pbXBvcnRfX2AsIGluY2x1ZGluZyByZXF1aXJpbmcgdGhlIHBhY2thZ2UKLSAgICBmcm9tIHdoaWNoIGFuIGltcG9ydCBpcyBvY2N1cnJpbmcgdG8gaGF2ZSBiZWVuIHByZXZpb3VzbHkgaW1wb3J0ZWQKLSAgICAoaS5lLiwgKnBhY2thZ2UqIG11c3QgYWxyZWFkeSBiZSBpbXBvcnRlZCkuIFRoZSBtb3N0IGltcG9ydGFudCBkaWZmZXJlbmNlCi0gICAgaXMgdGhhdCA6ZnVuYzpgaW1wb3J0X21vZHVsZWAgcmV0dXJucyB0aGUgc3BlY2lmaWVkIHBhY2thZ2Ugb3IgbW9kdWxlCi0gICAgKGUuZy4gYGBwa2cubW9kYGApLCB3aGlsZSA6ZnVuYzpgX19pbXBvcnRfX2AgcmV0dXJucyB0aGUKLSAgICB0b3AtbGV2ZWwgcGFja2FnZSBvciBtb2R1bGUgKGUuZy4gYGBwa2dgYCkuCisgICAgZGVyaXZlZCBmcm9tIDpmdW5jOmBpbXBvcnRsaWIuX19pbXBvcnRfX2AuIFRoZSBtb3N0IGltcG9ydGFudCBkaWZmZXJlbmNlCisgICAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHRoYXQgOmZ1bmM6YGltcG9ydF9tb2R1bGVgIHJldHVybnMgdGhlCisgICAgc3BlY2lmaWVkIHBhY2thZ2Ugb3IgbW9kdWxlIChlLmcuIGBgcGtnLm1vZGBgKSwgd2hpbGUgOmZ1bmM6YF9faW1wb3J0X19gCisgICAgcmV0dXJucyB0aGUgdG9wLWxldmVsIHBhY2thZ2Ugb3IgbW9kdWxlIChlLmcuIGBgcGtnYGApLgorCisgICAgSWYgeW91IGFyZSBkeW5hbWljYWxseSBpbXBvcnRpbmcgYSBtb2R1bGUgdGhhdCB3YXMgY3JlYXRlZCBzaW5jZSB0aGUKKyAgICBpbnRlcnByZXRlciBiZWdhbiBleGVjdXRpb24gKGUuZy4sIGNyZWF0ZWQgYSBQeXRob24gc291cmNlIGZpbGUpLCB5b3UgbWF5CisgICAgbmVlZCB0byBjYWxsIDpmdW5jOmBpbnZhbGlkYXRlX2NhY2hlc2AgaW4gb3JkZXIgZm9yIHRoZSBuZXcgbW9kdWxlIHRvIGJlCisgICAgbm90aWNlZCBieSB0aGUgaW1wb3J0IHN5c3RlbS4KIAogICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgUGFyZW50IHBhY2thZ2VzIGFyZSBhdXRvbWF0aWNhbGx5IGltcG9ydGVkLgpAQCAtMTkyLDYgKzIxMSwxMSBAQAogLi4gbW9kdWxlOjogaW1wb3J0bGliLmFiYwogICAgIDpzeW5vcHNpczogQWJzdHJhY3QgYmFzZSBjbGFzc2VzIHJlbGF0ZWQgdG8gaW1wb3J0CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2ltcG9ydGxpYi9hYmMucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKKwogVGhlIDptb2Q6YGltcG9ydGxpYi5hYmNgIG1vZHVsZSBjb250YWlucyBhbGwgb2YgdGhlIGNvcmUgYWJzdHJhY3QgYmFzZSBjbGFzc2VzCiB1c2VkIGJ5IDprZXl3b3JkOmBpbXBvcnRgLiBTb21lIHN1YmNsYXNzZXMgb2YgdGhlIGNvcmUgYWJzdHJhY3QgYmFzZSBjbGFzc2VzCiBhcmUgYWxzbyBwcm92aWRlZCB0byBoZWxwIGluIGltcGxlbWVudGluZyB0aGUgY29yZSBBQkNzLgpAQCAtMjE3LDcgKzI0MSw3IEBACiAgICAuLiBkZXByZWNhdGVkOjogMy4zCiAgICAgICBVc2UgOmNsYXNzOmBNZXRhUGF0aEZpbmRlcmAgb3IgOmNsYXNzOmBQYXRoRW50cnlGaW5kZXJgIGluc3RlYWQuCiAKLSAgIC4uIG1ldGhvZDo6IGZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoPU5vbmUpCisgICAuLiBhYnN0cmFjdG1ldGhvZDo6IGZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoPU5vbmUpCiAKICAgICAgIEFuIGFic3RhY3QgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YGxvYWRlcmAgZm9yIHRoZSBzcGVjaWZpZWQKICAgICAgIG1vZHVsZS4gIE9yaWdpbmFsbHkgc3BlY2lmaWVkIGluIDpwZXA6YDMwMmAsIHRoaXMgbWV0aG9kIHdhcyBtZWFudApAQCAtMzQxLDEzICszNjUsMTYgQEAKIAogICAgIC4uIG1ldGhvZDo6IGNyZWF0ZV9tb2R1bGUoc3BlYykKIAotICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIG1vZHVsZSBvYmplY3QgdG8gdXNlIHdoZW4KLSAgICAgICBpbXBvcnRpbmcgYSBtb2R1bGUuICBjcmVhdGVfbW9kdWxlKCkgbWF5IGFsc28gcmV0dXJuIGBgTm9uZWBgLAotICAgICAgIGluZGljYXRpbmcgdGhhdCB0aGUgZGVmYXVsdCBtb2R1bGUgY3JlYXRpb24gc2hvdWxkIHRha2UgcGxhY2UKLSAgICAgICBpbnN0ZWFkLgorICAgICAgIEEgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgbW9kdWxlIG9iamVjdCB0byB1c2Ugd2hlbgorICAgICAgIGltcG9ydGluZyBhIG1vZHVsZS4gIFRoaXMgbWV0aG9kIG1heSByZXR1cm4gYGBOb25lYGAsCisgICAgICAgaW5kaWNhdGluZyB0aGF0IGRlZmF1bHQgbW9kdWxlIGNyZWF0aW9uIHNlbWFudGljcyBzaG91bGQgdGFrZSBwbGFjZS4KIAogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCisgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICAgICBTdGFydGluZyBpbiBQeXRob24gMy42LCB0aGlzIG1ldGhvZCB3aWxsIG5vdCBiZSBvcHRpb25hbCB3aGVuCisgICAgICAgICAgOm1ldGg6YGV4ZWNfbW9kdWxlYCBpcyBkZWZpbmVkLgorCiAgICAgLi4gbWV0aG9kOjogZXhlY19tb2R1bGUobW9kdWxlKQogCiAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgZXhlY3V0ZXMgdGhlIG1vZHVsZSBpbiBpdHMgb3duIG5hbWVzcGFjZQpAQCAtNDExLDcgKzQzOCw3IEBACiAKICAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAogICAgICAgICAgICBUaGUgcmVjb21tZW5kZWQgQVBJIGZvciBsb2FkaW5nIGEgbW9kdWxlIGlzIDptZXRoOmBleGVjX21vZHVsZWAKLSAgICAgICAgICAgKGFuZCBvcHRpb25hbGx5IDptZXRoOmBjcmVhdGVfbW9kdWxlYCkuICBMb2FkZXJzIHNob3VsZCBpbXBsZW1lbnQKKyAgICAgICAgICAgKGFuZCA6bWV0aDpgY3JlYXRlX21vZHVsZWApLiAgTG9hZGVycyBzaG91bGQgaW1wbGVtZW50CiAgICAgICAgICAgIGl0IGluc3RlYWQgb2YgbG9hZF9tb2R1bGUoKS4gIFRoZSBpbXBvcnQgbWFjaGluZXJ5IHRha2VzIGNhcmUgb2YKICAgICAgICAgICAgYWxsIHRoZSBvdGhlciByZXNwb25zaWJpbGl0aWVzIG9mIGxvYWRfbW9kdWxlKCkgd2hlbiBleGVjX21vZHVsZSgpCiAgICAgICAgICAgIGlzIGltcGxlbWVudGVkLgpAQCAtNDM3LDcgKzQ2NCw3IEBACiAgICAgOnBlcDpgMzAyYCBwcm90b2NvbCBmb3IgbG9hZGluZyBhcmJpdHJhcnkgcmVzb3VyY2VzIGZyb20gdGhlIHN0b3JhZ2UKICAgICBiYWNrLWVuZC4KIAotICAgIC4uIG1ldGhvZDo6IGdldF9kYXRhKHBhdGgpCisgICAgLi4gYWJzdHJhY3RtZXRob2Q6OiBnZXRfZGF0YShwYXRoKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIGJ5dGVzIGZvciB0aGUgZGF0YSBsb2NhdGVkIGF0ICpwYXRoKi4KICAgICAgICAgTG9hZGVycyB0aGF0IGhhdmUgYSBmaWxlLWxpa2Ugc3RvcmFnZSBiYWNrLWVuZApAQCAtNDczLDcgKzUwMCw3IEBACiAgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CiAgICAgICAgICAgIE5vIGxvbmdlciBhYnN0cmFjdCBhbmQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZC4KIAotICAgIC4uIG1ldGhvZDo6IGdldF9zb3VyY2UoZnVsbG5hbWUpCisgICAgLi4gYWJzdHJhY3RtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIHNvdXJjZSBvZiBhIG1vZHVsZS4gSXQgaXMgcmV0dXJuZWQgYXMKICAgICAgICAgYSB0ZXh0IHN0cmluZyB1c2luZyA6dGVybTpgdW5pdmVyc2FsIG5ld2xpbmVzYCwgdHJhbnNsYXRpbmcgYWxsCkBAIC00OTMsNyArNTIwLDcgQEAKICAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKICAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCi0gICAgLi4gbWV0aG9kOjogc291cmNlX3RvX2NvZGUoZGF0YSwgcGF0aD0nPHN0cmluZz4nKQorICAgIC4uIHN0YXRpY21ldGhvZDo6IHNvdXJjZV90b19jb2RlKGRhdGEsIHBhdGg9JzxzdHJpbmc+JykKIAogICAgICAgICBDcmVhdGUgYSBjb2RlIG9iamVjdCBmcm9tIFB5dGhvbiBzb3VyY2UuCiAKQEAgLTUwMiw4ICs1MjksMTQgQEAKICAgICAgICAgdGhlICJwYXRoIiB0byB3aGVyZSB0aGUgc291cmNlIGNvZGUgb3JpZ2luYXRlZCBmcm9tLCB3aGljaCBjYW4gYmUgYW4KICAgICAgICAgYWJzdHJhY3QgY29uY2VwdCAoZS5nLiBsb2NhdGlvbiBpbiBhIHppcCBmaWxlKS4KIAorICAgICAgICBXaXRoIHRoZSBzdWJzZXF1ZW50IGNvZGUgb2JqZWN0IG9uZSBjYW4gZXhlY3V0ZSBpdCBpbiBhIG1vZHVsZSBieQorICAgICAgICBydW5uaW5nIGBgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pYGAuCisKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICAgICAgTWFkZSB0aGUgbWV0aG9kIHN0YXRpYy4KKwogICAgIC4uIG1ldGhvZDo6IGV4ZWNfbW9kdWxlKG1vZHVsZSkKIAogICAgICAgIEltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIuZXhlY19tb2R1bGVgLgpAQCAtNTI0LDcgKzU1Nyw3IEBACiAgICAgd2hlbiBpbXBsZW1lbnRlZCwgaGVscHMgYSBtb2R1bGUgdG8gYmUgZXhlY3V0ZWQgYXMgYSBzY3JpcHQuIFRoZSBBQkMKICAgICByZXByZXNlbnRzIGFuIG9wdGlvbmFsIDpwZXA6YDMwMmAgcHJvdG9jb2wuCiAKLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisgICAgLi4gYWJzdHJhY3RtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCiAKICAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgaXMgdG8gcmV0dXJuIHRoZSB2YWx1ZSBvZiA6YXR0cjpgX19maWxlX19gIGZvcgogICAgICAgICB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gSWYgbm8gcGF0aCBpcyBhdmFpbGFibGUsIDpleGM6YEltcG9ydEVycm9yYCBpcwpAQCAtNTY0LDExICs1OTcsMTEgQEAKICAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKICAgICAgICAgIFVzZSA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYCBpbnN0ZWFkLgogCi0gICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisgICAuLiBhYnN0cmFjdG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKIAogICAgICAgUmV0dXJucyA6YXR0cjpgcGF0aGAuCiAKLSAgIC4uIG1ldGhvZDo6IGdldF9kYXRhKHBhdGgpCisgICAuLiBhYnN0cmFjdG1ldGhvZDo6IGdldF9kYXRhKHBhdGgpCiAKICAgICAgIFJlYWRzICpwYXRoKiBhcyBhIGJpbmFyeSBmaWxlIGFuZCByZXR1cm5zIHRoZSBieXRlcyBmcm9tIGl0LgogCkBAIC01OTYsNyArNjI5LDcgQEAKICAgICAuLiBtZXRob2Q6OiBwYXRoX3N0YXRzKHBhdGgpCiAKICAgICAgICAgT3B0aW9uYWwgYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgYSA6Y2xhc3M6YGRpY3RgIGNvbnRhaW5pbmcKLSAgICAgICAgbWV0YWRhdGEgYWJvdXQgdGhlIHNwZWNpZmVkIHBhdGguICBTdXBwb3J0ZWQgZGljdGlvbmFyeSBrZXlzIGFyZToKKyAgICAgICAgbWV0YWRhdGEgYWJvdXQgdGhlIHNwZWNpZmllZCBwYXRoLiAgU3VwcG9ydGVkIGRpY3Rpb25hcnkga2V5cyBhcmU6CiAKICAgICAgICAgLSBgYCdtdGltZSdgYCAobWFuZGF0b3J5KTogYW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCBudW1iZXIKICAgICAgICAgICByZXByZXNlbnRpbmcgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBzb3VyY2UgY29kZTsKQEAgLTY3Miw2ICs3MDUsMTAgQEAKIC4uIG1vZHVsZTo6IGltcG9ydGxpYi5tYWNoaW5lcnkKICAgICA6c3lub3BzaXM6IEltcG9ydGVycyBhbmQgcGF0aCBob29rcwogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgdmFyaW91cyBvYmplY3RzIHRoYXQgaGVscCA6a2V5d29yZDpgaW1wb3J0YAogZmluZCBhbmQgbG9hZCBtb2R1bGVzLgogCkBAIC02ODksNiArNzI2LDkgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjUKKyAgICAgIFVzZSA6YXR0cjpgQllURUNPREVfU1VGRklYRVNgIGluc3RlYWQuCisKIC4uIGF0dHJpYnV0ZTo6IE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUwogCiAgICBBIGxpc3Qgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgdGhlIGZpbGUgc3VmZml4ZXMgZm9yIG9wdGltaXplZCBieXRlY29kZQpAQCAtNjk2LDE0ICs3MzYsMTkgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjUKKyAgICAgIFVzZSA6YXR0cjpgQllURUNPREVfU1VGRklYRVNgIGluc3RlYWQuCisKIC4uIGF0dHJpYnV0ZTo6IEJZVEVDT0RFX1NVRkZJWEVTCiAKICAgIEEgbGlzdCBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgcmVjb2duaXplZCBmaWxlIHN1ZmZpeGVzIGZvciBieXRlY29kZQotICAgbW9kdWxlcy4gU2V0IHRvIGVpdGhlciA6YXR0cjpgREVCVUdfQllURUNPREVfU1VGRklYRVNgIG9yCi0gICA6YXR0cjpgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTYCBiYXNlZCBvbiB3aGV0aGVyIGBgX19kZWJ1Z19fYGAgaXMgdHJ1ZS4KKyAgIG1vZHVsZXMgKGluY2x1ZGluZyB0aGUgbGVhZGluZyBkb3QpLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSB2YWx1ZSBpcyBubyBsb25nZXIgZGVwZW5kZW50IG9uIGBgX19kZWJ1Z19fYGAuCisKIC4uIGF0dHJpYnV0ZTo6IEVYVEVOU0lPTl9TVUZGSVhFUwogCiAgICBBIGxpc3Qgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgdGhlIHJlY29nbml6ZWQgZmlsZSBzdWZmaXhlcyBmb3IKQEAgLTczMiw5ICs3NzcsOSBAQAogICAgIE9ubHkgY2xhc3MgbWV0aG9kcyBhcmUgZGVmaW5lZCBieSB0aGlzIGNsYXNzIHRvIGFsbGV2aWF0ZSB0aGUgbmVlZCBmb3IKICAgICBpbnN0YW50aWF0aW9uLgogCi0gICAgLi4gbm90ZTo6Ci0gICAgICAgRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSBleHRlbnNpb24gbW9kdWxlIEMtQVBJLCBmb3Igbm93Ci0gICAgICAgQnVpbHRpbkltcG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYC4KKyAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgIEFzIHBhcnQgb2YgOnBlcDpgNDg5YCwgdGhlIGJ1aWx0aW4gaW1wb3J0ZXIgbm93IGltcGxlbWVudHMKKyAgICAgICA6bWV0aDpgTG9hZGVyLmNyZWF0ZV9tb2R1bGVgIGFuZCA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYAogCiAKIC4uIGNsYXNzOjogRnJvemVuSW1wb3J0ZXIKQEAgLTc4Miw2ICs4MjcsMTEgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICAgICBJZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAtLSByZXByZXNlbnRlZCBieSBhbiBlbXB0eSBzdHJpbmcgLS0KKyAgICAgICAgIGlzIG5vIGxvbmdlciB2YWxpZCB0aGVuIGBgTm9uZWBgIGlzIHJldHVybmVkIGJ1dCBubyB2YWx1ZSBpcyBjYWNoZWQKKyAgICAgICAgIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAuCisKICAgIC4uIGNsYXNzbWV0aG9kOjogZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGg9Tm9uZSkKIAogICAgICAgQSBsZWdhY3kgd3JhcHBlciBhcm91bmQgOm1ldGg6YGZpbmRfc3BlY2AuCkBAIC05NDQsMTQgKzk5NCwxOCBAQAogCiAgICAgICBQYXRoIHRvIHRoZSBleHRlbnNpb24gbW9kdWxlLgogCi0gICAuLiBtZXRob2Q6OiBsb2FkX21vZHVsZShuYW1lPU5vbmUpCisgICAuLiBtZXRob2Q6OiBjcmVhdGVfbW9kdWxlKHNwZWMpCiAKLSAgICAgIExvYWRzIHRoZSBleHRlbnNpb24gbW9kdWxlIGlmIGFuZCBvbmx5IGlmICpmdWxsbmFtZSogaXMgdGhlIHNhbWUgYXMKLSAgICAgIDphdHRyOmBuYW1lYCBvciBpcyBgYE5vbmVgYC4KKyAgICAgIENyZWF0ZXMgdGhlIG1vZHVsZSBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gc3BlY2lmaWNhdGlvbiBpbiBhY2NvcmRhbmNlCisgICAgICB3aXRoIDpwZXA6YDQ4OWAuCiAKLSAgICAgIC4uIG5vdGU6OgotICAgICAgICAgRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSBleHRlbnNpb24gbW9kdWxlIEMtQVBJLCBmb3Igbm93Ci0gICAgICAgICBFeHRlbnNpb25GaWxlTG9hZGVyIGRvZXMgbm90IGltcGxlbWVudCA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYC4KKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisgICAuLiBtZXRob2Q6OiBleGVjX21vZHVsZShtb2R1bGUpCisKKyAgICAgIEluaXRpYWxpemVzIHRoZSBnaXZlbiBtb2R1bGUgb2JqZWN0IGluIGFjY29yZGFuY2Ugd2l0aCA6cGVwOmA0ODlgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKIAogICAgLi4gbWV0aG9kOjogaXNfcGFja2FnZShmdWxsbmFtZSkKIApAQCAtMTAzNyw2ICsxMDkxLDExIEBACiAuLiBtb2R1bGU6OiBpbXBvcnRsaWIudXRpbAogICAgIDpzeW5vcHNpczogVXRpbGl0eSBjb2RlIGZvciBpbXBvcnRlcnMKIAorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9pbXBvcnRsaWIvdXRpbC5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIHZhcmlvdXMgb2JqZWN0cyB0aGF0IGhlbHAgaW4gdGhlIGNvbnN0cnVjdGlvbiBvZgogYW4gOnRlcm06YGltcG9ydGVyYC4KIApAQCAtMTA0NywyMyArMTEwNiwzNyBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAotLi4gZnVuY3Rpb246OiBjYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZT1Ob25lKQorLi4gZnVuY3Rpb246OiBjYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZT1Ob25lLCAqLCBvcHRpbWl6YXRpb249Tm9uZSkKIAotICAgUmV0dXJuIHRoZSA6cGVwOmAzMTQ3YCBwYXRoIHRvIHRoZSBieXRlLWNvbXBpbGVkIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAgc291cmNlICpwYXRoKi4gIEZvciBleGFtcGxlLCBpZiAqcGF0aCogaXMgYGAvZm9vL2Jhci9iYXoucHlgYCB0aGUgcmV0dXJuCisgICBSZXR1cm4gdGhlIDpwZXA6YDMxNDdgLzpwZXA6YDQ4OGAgcGF0aCB0byB0aGUgYnl0ZS1jb21waWxlZCBmaWxlIGFzc29jaWF0ZWQKKyAgIHdpdGggdGhlIHNvdXJjZSAqcGF0aCouICBGb3IgZXhhbXBsZSwgaWYgKnBhdGgqIGlzIGBgL2Zvby9iYXIvYmF6LnB5YGAgdGhlIHJldHVybgogICAgdmFsdWUgd291bGQgYmUgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCBmb3IgUHl0aG9uIDMuMi4KICAgIFRoZSBgYGNweXRob24tMzJgYCBzdHJpbmcgY29tZXMgZnJvbSB0aGUgY3VycmVudCBtYWdpYyB0YWcgKHNlZQogICAgOmZ1bmM6YGdldF90YWdgOyBpZiA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQgdGhlbgotICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2lsbCBiZSByYWlzZWQpLiAgVGhlIHJldHVybmVkIHBhdGggd2lsbCBlbmQgaW4KLSAgIGBgLnB5Y2BgIHdoZW4gYGBfX2RlYnVnX19gYCBpcyBgYFRydWVgYCBvciBgYC5weW9gYCBmb3IgYW4gb3B0aW1pemVkIFB5dGhvbgotICAgKGkuZS4gYGBfX2RlYnVnX19gYCBpcyBgYEZhbHNlYGApLiAgQnkgcGFzc2luZyBpbiBgYFRydWVgYCBvciBgYEZhbHNlYGAgZm9yCi0gICAqZGVidWdfb3ZlcnJpZGUqIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHN5c3RlbSdzIHZhbHVlIGZvciBgYF9fZGVidWdfX2BgIGZvcgotICAgZXh0ZW5zaW9uIHNlbGVjdGlvbi4KKyAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdpbGwgYmUgcmFpc2VkKS4KIAotICAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LgorICAgVGhlICpvcHRpbWl6YXRpb24qIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUKKyAgIGJ5dGVjb2RlIGZpbGUuIEFuIGVtcHR5IHN0cmluZyByZXByZXNlbnRzIG5vIG9wdGltaXphdGlvbiwgc28KKyAgIGBgL2Zvby9iYXIvYmF6LnB5YGAgd2l0aCBhbiAqb3B0aW1pemF0aW9uKiBvZiBgYCcnYGAgd2lsbCByZXN1bHQgaW4gYQorICAgYnl0ZWNvZGUgcGF0aCBvZiBgYC9mb28vYmFyL19fcHljYWNoZV9fL2Jhei5jcHl0aG9uLTMyLnB5Y2BgLiBgYE5vbmVgYCBjYXVzZXMKKyAgIHRoZSBpbnRlcnB0ZXIncyBvcHRpbWl6YXRpb24gbGV2ZWwgdG8gYmUgdXNlZC4gQW55IG90aGVyIHZhbHVlJ3Mgc3RyaW5nCisgICByZXByZXNlbnRhdGlvbiBiZWluZyB1c2VkLCBzbyBgYC9mb28vYmFyL2Jhei5weWBgIHdpdGggYW4gKm9wdGltaXphdGlvbiogb2YKKyAgIGBgMmBgIHdpbGwgbGVhZCB0byB0aGUgYnl0ZWNvZGUgcGF0aCBvZgorICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5vcHQtMi5weWNgYC4gVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbgorICAgb2YgKm9wdGltaXphdGlvbiogY2FuIG9ubHkgYmUgYWxwaGFudW1lcmljLCBlbHNlIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KKworICAgVGhlICpkZWJ1Z19vdmVycmlkZSogcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlCisgICB0aGUgc3lzdGVtJ3MgdmFsdWUgZm9yIGBgX19kZWJ1Z19fYGAuIEEgYGBUcnVlYGAgdmFsdWUgaXMgdGhlIGVxdWl2YWxlbnQgb2YKKyAgIHNldHRpbmcgKm9wdGltaXphdGlvbiogdG8gdGhlIGVtcHR5IHN0cmluZy4gQSBgYEZhbHNlYGAgdmFsdWUgaXMgdGhlIHNhbWUgYXMKKyAgIHNldHRpbmcgKm9wdGltaXphdGlvbiogdG8gYGAxYGAuIElmIGJvdGggKmRlYnVnX292ZXJyaWRlKiBhbiAqb3B0aW1pemF0aW9uKgorICAgYXJlIG5vdCBgYE5vbmVgYCB0aGVuIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSAqb3B0aW1pemF0aW9uKiBwYXJhbWV0ZXIgd2FzIGFkZGVkIGFuZCB0aGUgKmRlYnVnX292ZXJyaWRlKiBwYXJhbWV0ZXIKKyAgICAgIHdhcyBkZXByZWNhdGVkLgorCiAKIC4uIGZ1bmN0aW9uOjogc291cmNlX2Zyb21fY2FjaGUocGF0aCkKIApAQCAtMTA3MSw3ICsxMTQ0LDcgQEAKICAgIGZpbGUgcGF0aC4gIEZvciBleGFtcGxlLCBpZiAqcGF0aCogaXMKICAgIGBgL2Zvby9iYXIvX19weWNhY2hlX18vYmF6LmNweXRob24tMzIucHljYGAgdGhlIHJldHVybmVkIHBhdGggd291bGQgYmUKICAgIGBgL2Zvby9iYXIvYmF6LnB5YGAuICAqcGF0aCogbmVlZCBub3QgZXhpc3QsIGhvd2V2ZXIgaWYgaXQgZG9lcyBub3QgY29uZm9ybQotICAgdG8gOnBlcDpgMzE0N2AgZm9ybWF0LCBhIGBgVmFsdWVFcnJvcmBgIGlzIHJhaXNlZC4gSWYKKyAgIHRvIDpwZXA6YDMxNDdgIG9yIDpwZXA6YDQ4OGAgZm9ybWF0LCBhIGBgVmFsdWVFcnJvcmBgIGlzIHJhaXNlZC4gSWYKICAgIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBub3QgZGVmaW5lZCwKICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlzIHJhaXNlZC4KIApAQCAtMTExNyw2ICsxMTkwLDIxIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCisuLiBmdW5jdGlvbjo6IG1vZHVsZV9mcm9tX3NwZWMoc3BlYykKKworICAgQ3JlYXRlIGEgbmV3IG1vZHVsZSBiYXNlZCBvbiAqKnNwZWMqKiBhbmQgYGBzcGVjLmxvYWRlci5jcmVhdGVfbW9kdWxlKClgYC4KKworICAgSWYgYGBzcGVjLmxvYWRlci5jcmVhdGVfbW9kdWxlKClgYCBkb2VzIG5vdCByZXR1cm4gYGBOb25lYGAsIHRoZW4gYW55CisgICBwcmUtZXhpc3RpbmcgYXR0cmlidXRlcyB3aWxsIG5vdCBiZSByZXNldC4gQWxzbywgbm8gOmV4YzpgQXR0cmlidXRlRXJyb3JgCisgICB3aWxsIGJlIHJhaXNlZCBpZiB0cmlnZ2VyZWQgd2hpbGUgYWNjZXNzaW5nICoqc3BlYyoqIG9yIHNldHRpbmcgYW4gYXR0cmlidXRlCisgICBvbiB0aGUgbW9kdWxlLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIHByZWZlcnJlZCBvdmVyIHVzaW5nIDpjbGFzczpgdHlwZXMuTW9kdWxlVHlwZWAgdG8gY3JlYXRlIGEKKyAgIG5ldyBtb2R1bGUgYXMgKipzcGVjKiogaXMgdXNlZCB0byBzZXQgYXMgbWFueSBpbXBvcnQtY29udHJvbGxlZCBhdHRyaWJ1dGVzIG9uCisgICB0aGUgbW9kdWxlIGFzIHBvc3NpYmxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogLi4gZGVjb3JhdG9yOjogbW9kdWxlX2Zvcl9sb2FkZXIKIAogICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKQEAgLTExOTUsMyArMTI4Myw0MCBAQAogICAgbW9kdWxlIHdpbGwgYmUgZmlsZS1iYXNlZC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGNsYXNzOjogTGF6eUxvYWRlcihsb2FkZXIpCisKKyAgIEEgY2xhc3Mgd2hpY2ggcG9zdHBvbmVzIHRoZSBleGVjdXRpb24gb2YgdGhlIGxvYWRlciBvZiBhIG1vZHVsZSB1bnRpbCB0aGUKKyAgIG1vZHVsZSBoYXMgYW4gYXR0cmlidXRlIGFjY2Vzc2VkLgorCisgICBUaGlzIGNsYXNzICoqb25seSoqIHdvcmtzIHdpdGggbG9hZGVycyB0aGF0IGRlZmluZQorICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZWAgYXMgY29udHJvbCBvdmVyIHdoYXQgbW9kdWxlIHR5cGUKKyAgIGlzIHVzZWQgZm9yIHRoZSBtb2R1bGUgaXMgcmVxdWlyZWQuIEZvciB0aG9zZSBzYW1lIHJlYXNvbnMsIHRoZSBsb2FkZXIncworICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5jcmVhdGVfbW9kdWxlYCBtZXRob2Qgd2lsbCBiZSBpZ25vcmVkIChpLmUuLCB0aGUKKyAgIGxvYWRlcidzIG1ldGhvZCBzaG91bGQgb25seSByZXR1cm4gYGBOb25lYGA7IHRoaXMgZXhjbHVkZXMKKyAgIDpjbGFzczpgQnVpbHRpbkltcG9ydGVyYCBhbmQgOmNsYXNzOmBFeHRlbnNpb25GaWxlTG9hZGVyYCkuIEZpbmFsbHksCisgICBtb2R1bGVzIHdoaWNoIHN1YnN0aXR1dGUgdGhlIG9iamVjdCBwbGFjZWQgaW50byA6YXR0cjpgc3lzLm1vZHVsZXNgIHdpbGwKKyAgIG5vdCB3b3JrIGFzIHRoZXJlIGlzIG5vIHdheSB0byBwcm9wZXJseSByZXBsYWNlIHRoZSBtb2R1bGUgcmVmZXJlbmNlcworICAgdGhyb3VnaG91dCB0aGUgaW50ZXJwcmV0ZXIgc2FmZWx5OyA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgc3VjaCBhCisgICBzdWJzdGl0dXRpb24gaXMgZGV0ZWN0ZWQuCisKKyAgIC4uIG5vdGU6OgorICAgICAgRm9yIHByb2plY3RzIHdoZXJlIHN0YXJ0dXAgdGltZSBpcyBjcml0aWNhbCwgdGhpcyBjbGFzcyBhbGxvd3MgZm9yCisgICAgICBwb3RlbnRpYWxseSBtaW5pbWl6aW5nIHRoZSBjb3N0IG9mIGxvYWRpbmcgYSBtb2R1bGUgaWYgaXQgaXMgbmV2ZXIgdXNlZC4KKyAgICAgIEZvciBwcm9qZWN0cyB3aGVyZSBzdGFydHVwIHRpbWUgaXMgbm90IGVzc2VudGlhbCB0aGVuIHVzZSBvZiB0aGlzIGNsYXNzIGlzCisgICAgICAqKmhlYXZpbHkqKiBkaXNjb3VyYWdlZCBkdWUgdG8gZXJyb3IgbWVzc2FnZXMgY3JlYXRlZCBkdXJpbmcgbG9hZGluZyBiZWluZworICAgICAgcG9zdHBvbmVkIGFuZCB0aHVzIG9jY3VycmluZyBvdXQgb2YgY29udGV4dC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKyAgIC4uIGNsYXNzbWV0aG9kOjogZmFjdG9yeShsb2FkZXIpCisKKyAgICAgIEEgc3RhdGljIG1ldGhvZCB3aGljaCByZXR1cm5zIGEgY2FsbGFibGUgdGhhdCBjcmVhdGVzIGEgbGF6eSBsb2FkZXIuIFRoaXMKKyAgICAgIGlzIG1lYW50IHRvIGJlIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgbG9hZGVyIGlzIHBhc3NlZCBieSBjbGFzcworICAgICAgaW5zdGVhZCBvZiBieSBpbnN0YW5jZS4KKyAgICAgIDo6CisKKyAgICAgICAgc3VmZml4ZXMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUworICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIKKyAgICAgICAgbGF6eV9sb2FkZXIgPSBpbXBvcnRsaWIudXRpbC5MYXp5TG9hZGVyLmZhY3RvcnkobG9hZGVyKQorICAgICAgICBmaW5kZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIocGF0aCwgKGxhenlfbG9hZGVyLCBzdWZmaXhlcykpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdCBiL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CmluZGV4IDU3ZWI0ZmYuLjhlN2VkMTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CkBAIC0zLDYgKzMsNyBAQAogCiAuLiBtb2R1bGU6OiBpbnNwZWN0CiAgICA6c3lub3BzaXM6IEV4dHJhY3QgaW5mb3JtYXRpb24gYW5kIHNvdXJjZSBjb2RlIGZyb20gbGl2ZSBvYmplY3RzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBLYS1QaW5nIFllZSA8cGluZ0BsZncub3JnPgogLi4gc2VjdGlvbmF1dGhvcjo6IEthLVBpbmcgWWVlIDxwaW5nQGxmdy5vcmc+CiAKQEAgLTI4LDcgKzI5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6ZnVuYzpgZ2V0bWVtYmVyc2AgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBtZW1iZXJzIG9mIGFuIG9iamVjdCBzdWNoIGFzIGEKLWNsYXNzIG9yIG1vZHVsZS4gVGhlIHNpeHRlZW4gZnVuY3Rpb25zIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggImlzIiBhcmUgbWFpbmx5CitjbGFzcyBvciBtb2R1bGUuIFRoZSBmdW5jdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAiaXMiIGFyZSBtYWlubHkKIHByb3ZpZGVkIGFzIGNvbnZlbmllbnQgY2hvaWNlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCB0byA6ZnVuYzpgZ2V0bWVtYmVyc2AuCiBUaGV5IGFsc28gaGVscCB5b3UgZGV0ZXJtaW5lIHdoZW4geW91IGNhbiBleHBlY3QgdG8gZmluZCB0aGUgZm9sbG93aW5nIHNwZWNpYWwKIGF0dHJpYnV0ZXM6CkBAIC04OCw2ICs4OSwxMiBAQAogfCAgICAgICAgICAgfCBfX2dsb2JhbHNfXyAgICAgfCBnbG9iYWwgbmFtZXNwYWNlIGluIHdoaWNoIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgdGhpcyBmdW5jdGlvbiB3YXMgZGVmaW5lZCB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgfCBfX2Fubm90YXRpb25zX18gfCBtYXBwaW5nIG9mIHBhcmFtZXRlcnMgICAgIHwKK3wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgbmFtZXMgdG8gYW5ub3RhdGlvbnM7ICAgICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IGBgInJldHVybiJgYCBrZXkgaXMgICAgICAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCByZXNlcnZlZCBmb3IgcmV0dXJuICAgICAgIHwKK3wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgYW5ub3RhdGlvbnMuICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCB0cmFjZWJhY2sgfCB0Yl9mcmFtZSAgICAgICAgfCBmcmFtZSBvYmplY3QgYXQgdGhpcyAgICAgIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgbGV2ZWwgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMTY4LDYgKzE3NSwzMyBAQAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBhcmd1bWVudHMgYW5kIGxvY2FsICAgICAgIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgdmFyaWFibGVzICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBnZW5lcmF0b3IgfCBfX25hbWVfXyAgICAgICAgfCBuYW1lICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IF9fcXVhbG5hbWVfXyAgICB8IHF1YWxpZmllZCBuYW1lICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgZ2lfZnJhbWUgICAgICAgIHwgZnJhbWUgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgfCBnaV9ydW5uaW5nICAgICAgfCBpcyB0aGUgZ2VuZXJhdG9yIHJ1bm5pbmc/IHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IGdpX2NvZGUgICAgICAgICB8IGNvZGUgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgZ2lfeWllbGRmcm9tICAgIHwgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIGJ5ICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IGBgeWllbGQgZnJvbWBgLCBvciAgICAgICAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBgYE5vbmVgYCAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGNvcm91dGluZSB8IF9fbmFtZV9fICAgICAgICB8IG5hbWUgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgX19xdWFsbmFtZV9fICAgIHwgcXVhbGlmaWVkIG5hbWUgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgfCBjcl9hd2FpdCAgICAgICAgfCBvYmplY3QgYmVpbmcgYXdhaXRlZCBvbiwgIHwKK3wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgb3IgYGBOb25lYGAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgfCBjcl9mcmFtZSAgICAgICAgfCBmcmFtZSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IGNyX3J1bm5pbmcgICAgICB8IGlzIHRoZSBjb3JvdXRpbmUgcnVubmluZz8gfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgY3JfY29kZSAgICAgICAgIHwgY29kZSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBidWlsdGluICAgfCBfX2RvY19fICAgICAgICAgfCBkb2N1bWVudGF0aW9uIHN0cmluZyAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fbmFtZV9fICAgICAgICB8IG9yaWdpbmFsIG5hbWUgb2YgdGhpcyAgICAgfApAQCAtMTgwLDYgKzIxNCwxMyBAQAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBgYE5vbmVgYCAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisKKyAgIEFkZCBgYF9fcXVhbG5hbWVfX2BgIGFuZCBgYGdpX3lpZWxkZnJvbWBgIGF0dHJpYnV0ZXMgdG8gZ2VuZXJhdG9ycy4KKworICAgVGhlIGBgX19uYW1lX19gYCBhdHRyaWJ1dGUgb2YgZ2VuZXJhdG9ycyBpcyBub3cgc2V0IGZyb20gdGhlIGZ1bmN0aW9uCisgICBuYW1lLCBpbnN0ZWFkIG9mIHRoZSBjb2RlIG5hbWUsIGFuZCBpdCBjYW4gbm93IGJlIG1vZGlmaWVkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0bWVtYmVycyhvYmplY3RbLCBwcmVkaWNhdGVdKQogCkBAIC0yNjEsNiArMzAyLDQxIEBACiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgZ2VuZXJhdG9yLgogCiAKKy4uIGZ1bmN0aW9uOjogaXNjb3JvdXRpbmVmdW5jdGlvbihvYmplY3QpCisKKyAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSA6dGVybTpgY29yb3V0aW5lIGZ1bmN0aW9uYAorICAgKGEgZnVuY3Rpb24gZGVmaW5lZCB3aXRoIGFuIDprZXl3b3JkOmBhc3luYyBkZWZgIHN5bnRheCkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKKy4uIGZ1bmN0aW9uOjogaXNjb3JvdXRpbmUob2JqZWN0KQorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgOnRlcm06YGNvcm91dGluZWAgY3JlYXRlZCBieSBhbgorICAgOmtleXdvcmQ6YGFzeW5jIGRlZmAgZnVuY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKKy4uIGZ1bmN0aW9uOjogaXNhd2FpdGFibGUob2JqZWN0KQorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGNhbiBiZSB1c2VkIGluIDprZXl3b3JkOmBhd2FpdGAgZXhwcmVzc2lvbi4KKworICAgQ2FuIGFsc28gYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBnZW5lcmF0b3ItYmFzZWQgY29yb3V0aW5lcyBmcm9tIHJlZ3VsYXIKKyAgIGdlbmVyYXRvcnM6OgorCisgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgeWllbGQKKyAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgIGRlZiBnZW5fY29ybygpOgorICAgICAgICAgIHlpZWxkCisKKyAgICAgIGFzc2VydCBub3QgaXNhd2FpdGFibGUoZ2VuKCkpCisgICAgICBhc3NlcnQgaXNhd2FpdGFibGUoZ2VuX2Nvcm8oKSkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gZnVuY3Rpb246OiBpc3RyYWNlYmFjayhvYmplY3QpCiAKICAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSB0cmFjZWJhY2suCkBAIC0yOTgsOCArMzc0LDkgQEAKICAgIGFyZSB0cnVlLgogCiAgICBUaGlzLCBmb3IgZXhhbXBsZSwgaXMgdHJ1ZSBvZiBgYGludC5fX2FkZF9fYGAuICBBbiBvYmplY3QgcGFzc2luZyB0aGlzIHRlc3QKLSAgIGhhcyBhIDphdHRyOmBfX2dldF9fYCBhdHRyaWJ1dGUgYnV0IG5vdCBhIDphdHRyOmBfX3NldF9fYCBhdHRyaWJ1dGUsIGJ1dAotICAgYmV5b25kIHRoYXQgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHZhcmllcy4gIDphdHRyOmBfX25hbWVfX2AgaXMgdXN1YWxseQorICAgaGFzIGEgOm1ldGg6YH5vYmplY3QuX19nZXRfX2AgbWV0aG9kIGJ1dCBub3QgYSA6bWV0aDpgfm9iamVjdC5fX3NldF9fYAorICAgbWV0aG9kLCBidXQgYmV5b25kIHRoYXQgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHZhcmllcy4gIEEKKyAgIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgYXR0cmlidXRlIGlzIHVzdWFsbHkKICAgIHNlbnNpYmxlLCBhbmQgOmF0dHI6YF9fZG9jX19gIG9mdGVuIGlzLgogCiAgICBNZXRob2RzIGltcGxlbWVudGVkIHZpYSBkZXNjcmlwdG9ycyB0aGF0IGFsc28gcGFzcyBvbmUgb2YgdGhlIG90aGVyIHRlc3RzCkBAIC0zMTIsMTEgKzM4OSwxMSBAQAogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgZGF0YSBkZXNjcmlwdG9yLgogCi0gICBEYXRhIGRlc2NyaXB0b3JzIGhhdmUgYm90aCBhIDphdHRyOmBfX2dldF9fYCBhbmQgYSA6YXR0cjpgX19zZXRfX2AgYXR0cmlidXRlLgorICAgRGF0YSBkZXNjcmlwdG9ycyBoYXZlIGJvdGggYSA6YXR0cjpgfm9iamVjdC5fX2dldF9fYCBhbmQgYSA6YXR0cjpgfm9iamVjdC5fX3NldF9fYCBtZXRob2QuCiAgICBFeGFtcGxlcyBhcmUgcHJvcGVydGllcyAoZGVmaW5lZCBpbiBQeXRob24pLCBnZXRzZXRzLCBhbmQgbWVtYmVycy4gIFRoZQogICAgbGF0dGVyIHR3byBhcmUgZGVmaW5lZCBpbiBDIGFuZCB0aGVyZSBhcmUgbW9yZSBzcGVjaWZpYyB0ZXN0cyBhdmFpbGFibGUgZm9yCiAgICB0aG9zZSB0eXBlcywgd2hpY2ggaXMgcm9idXN0IGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLiAgVHlwaWNhbGx5LCBkYXRhCi0gICBkZXNjcmlwdG9ycyB3aWxsIGFsc28gaGF2ZSA6YXR0cjpgX19uYW1lX19gIGFuZCA6YXR0cjpgX19kb2NfX2AgYXR0cmlidXRlcworICAgZGVzY3JpcHRvcnMgd2lsbCBhbHNvIGhhdmUgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBhbmQgOmF0dHI6YF9fZG9jX19gIGF0dHJpYnV0ZXMKICAgIChwcm9wZXJ0aWVzLCBnZXRzZXRzLCBhbmQgbWVtYmVycyBoYXZlIGJvdGggb2YgdGhlc2UgYXR0cmlidXRlcyksIGJ1dCB0aGlzIGlzCiAgICBub3QgZ3VhcmFudGVlZC4KIApAQCAtMzUxLDYgKzQyOCwxMiBAQAogLi4gZnVuY3Rpb246OiBnZXRkb2Mob2JqZWN0KQogCiAgICBHZXQgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGZvciBhbiBvYmplY3QsIGNsZWFuZWQgdXAgd2l0aCA6ZnVuYzpgY2xlYW5kb2NgLgorICAgSWYgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIGZvciBhbiBvYmplY3QgaXMgbm90IHByb3ZpZGVkIGFuZCB0aGUgb2JqZWN0IGlzCisgICBhIGNsYXNzLCBhIG1ldGhvZCwgYSBwcm9wZXJ0eSBvciBhIGRlc2NyaXB0b3IsIHJldHJpZXZlIHRoZSBkb2N1bWVudGF0aW9uCisgICBzdHJpbmcgZnJvbSB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgRG9jdW1lbnRhdGlvbiBzdHJpbmdzIGFyZSBub3cgaW5oZXJpdGVkIGlmIG5vdCBvdmVycmlkZGVuLgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0Y29tbWVudHMob2JqZWN0KQpAQCAtNDA4LDggKzQ5MSwxMiBAQAogLi4gZnVuY3Rpb246OiBjbGVhbmRvYyhkb2MpCiAKICAgIENsZWFuIHVwIGluZGVudGF0aW9uIGZyb20gZG9jc3RyaW5ncyB0aGF0IGFyZSBpbmRlbnRlZCB0byBsaW5lIHVwIHdpdGggYmxvY2tzCi0gICBvZiBjb2RlLiAgQW55IHdoaXRlc3BhY2UgdGhhdCBjYW4gYmUgdW5pZm9ybWx5IHJlbW92ZWQgZnJvbSB0aGUgc2Vjb25kIGxpbmUKLSAgIG9ud2FyZHMgaXMgcmVtb3ZlZC4gIEFsc28sIGFsbCB0YWJzIGFyZSBleHBhbmRlZCB0byBzcGFjZXMuCisgICBvZiBjb2RlLgorCisgICBBbGwgbGVhZGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgZmlyc3QgbGluZS4gIEFueSBsZWFkaW5nIHdoaXRlc3BhY2UKKyAgIHRoYXQgY2FuIGJlIHVuaWZvcm1seSByZW1vdmVkIGZyb20gdGhlIHNlY29uZCBsaW5lIG9ud2FyZHMgaXMgcmVtb3ZlZC4gIEVtcHR5CisgICBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgYXJlIHN1YnNlcXVlbnRseSByZW1vdmVkLiAgQWxzbywgYWxsIHRhYnMgYXJlCisgICBleHBhbmRlZCB0byBzcGFjZXMuCiAKIAogLi4gX2luc3BlY3Qtc2lnbmF0dXJlLW9iamVjdDoKQEAgLTQyMyw3ICs1MTAsNyBAQAogcmV0dXJuIGFubm90YXRpb24uICBUbyByZXRyaWV2ZSBhIFNpZ25hdHVyZSBvYmplY3QsIHVzZSB0aGUgOmZ1bmM6YHNpZ25hdHVyZWAKIGZ1bmN0aW9uLgogCi0uLiBmdW5jdGlvbjo6IHNpZ25hdHVyZShjYWxsYWJsZSkKKy4uIGZ1bmN0aW9uOjogc2lnbmF0dXJlKGNhbGxhYmxlLCBcKiwgZm9sbG93X3dyYXBwZWQ9VHJ1ZSkKIAogICAgUmV0dXJuIGEgOmNsYXNzOmBTaWduYXR1cmVgIG9iamVjdCBmb3IgdGhlIGdpdmVuIGBgY2FsbGFibGVgYDo6CiAKQEAgLTQ0OCw2ICs1MzUsMTEgQEAKICAgIFJhaXNlcyA6ZXhjOmBWYWx1ZUVycm9yYCBpZiBubyBzaWduYXR1cmUgY2FuIGJlIHByb3ZpZGVkLCBhbmQKICAgIDpleGM6YFR5cGVFcnJvcmAgaWYgdGhhdCB0eXBlIG9mIG9iamVjdCBpcyBub3Qgc3VwcG9ydGVkLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKyAgICAgIGBgZm9sbG93X3dyYXBwZWRgYCBwYXJhbWV0ZXIuIFBhc3MgYGBGYWxzZWBgIHRvIGdldCBhIHNpZ25hdHVyZSBvZgorICAgICAgYGBjYWxsYWJsZWBgIHNwZWNpZmljYWxseSAoYGBjYWxsYWJsZS5fX3dyYXBwZWRfX2BgIHdpbGwgbm90IGJlIHVzZWQgdG8KKyAgICAgIHVud3JhcCBkZWNvcmF0ZWQgY2FsbGFibGVzLikKKwogICAgLi4gbm90ZTo6CiAKICAgICAgIFNvbWUgY2FsbGFibGVzIG1heSBub3QgYmUgaW50cm9zcGVjdGFibGUgaW4gY2VydGFpbiBpbXBsZW1lbnRhdGlvbnMgb2YKQEAgLTQ3Myw2ICs1NjUsOSBAQAogICAgU2lnbmF0dXJlIG9iamVjdHMgYXJlICppbW11dGFibGUqLiAgVXNlIDptZXRoOmBTaWduYXR1cmUucmVwbGFjZWAgdG8gbWFrZSBhCiAgICBtb2RpZmllZCBjb3B5LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgU2lnbmF0dXJlIG9iamVjdHMgYXJlIHBpY2tsYWJsZSBhbmQgaGFzaGFibGUuCisKICAgIC4uIGF0dHJpYnV0ZTo6IFNpZ25hdHVyZS5lbXB0eQogCiAgICAgICBBIHNwZWNpYWwgY2xhc3MtbGV2ZWwgbWFya2VyIHRvIHNwZWNpZnkgYWJzZW5jZSBvZiBhIHJldHVybiBhbm5vdGF0aW9uLgpAQCAtNTE3LDEyICs2MTIsMzAgQEAKICAgICAgICAgID4+PiBzdHIobmV3X3NpZykKICAgICAgICAgICIoYSwgYikgLT4gJ25ldyByZXR1cm4gYW5ubyciCiAKKyAgIC4uIGNsYXNzbWV0aG9kOjogU2lnbmF0dXJlLmZyb21fY2FsbGFibGUob2JqLCBcKiwgZm9sbG93X3dyYXBwZWQ9VHJ1ZSkKKworICAgICAgIFJldHVybiBhIDpjbGFzczpgU2lnbmF0dXJlYCAob3IgaXRzIHN1YmNsYXNzKSBvYmplY3QgZm9yIGEgZ2l2ZW4gY2FsbGFibGUKKyAgICAgICBgYG9iamBgLiAgUGFzcyBgYGZvbGxvd193cmFwcGVkPUZhbHNlYGAgdG8gZ2V0IGEgc2lnbmF0dXJlIG9mIGBgb2JqYGAKKyAgICAgICB3aXRob3V0IHVud3JhcHBpbmcgaXRzIGBgX193cmFwcGVkX19gYCBjaGFpbi4KKworICAgICAgIFRoaXMgbWV0aG9kIHNpbXBsaWZpZXMgc3ViY2xhc3Npbmcgb2YgOmNsYXNzOmBTaWduYXR1cmVgOjoKKworICAgICAgICAgY2xhc3MgTXlTaWduYXR1cmUoU2lnbmF0dXJlKToKKyAgICAgICAgICAgICBwYXNzCisgICAgICAgICBzaWcgPSBNeVNpZ25hdHVyZS5mcm9tX2NhbGxhYmxlKG1pbikKKyAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNpZywgTXlTaWduYXR1cmUpCisKKyAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogCiAuLiBjbGFzczo6IFBhcmFtZXRlcihuYW1lLCBraW5kLCBcKiwgZGVmYXVsdD1QYXJhbWV0ZXIuZW1wdHksIGFubm90YXRpb249UGFyYW1ldGVyLmVtcHR5KQogCiAgICBQYXJhbWV0ZXIgb2JqZWN0cyBhcmUgKmltbXV0YWJsZSouICBJbnN0ZWFkIG9mIG1vZGlmeWluZyBhIFBhcmFtZXRlciBvYmplY3QsCiAgICB5b3UgY2FuIHVzZSA6bWV0aDpgUGFyYW1ldGVyLnJlcGxhY2VgIHRvIGNyZWF0ZSBhIG1vZGlmaWVkIGNvcHkuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBQYXJhbWV0ZXIgb2JqZWN0cyBhcmUgcGlja2xhYmxlIGFuZCBoYXNoYWJsZS4KKwogICAgLi4gYXR0cmlidXRlOjogUGFyYW1ldGVyLmVtcHR5CiAKICAgICAgIEEgc3BlY2lhbCBjbGFzcy1sZXZlbCBtYXJrZXIgdG8gc3BlY2lmeSBhYnNlbmNlIG9mIGRlZmF1bHQgdmFsdWVzIGFuZApAQCAtNjM5LDI3ICs3NTIsOCBAQAogCiAgICAgICAgICBBcmd1bWVudHMgZm9yIHdoaWNoIDptZXRoOmBTaWduYXR1cmUuYmluZGAgb3IKICAgICAgICAgIDptZXRoOmBTaWduYXR1cmUuYmluZF9wYXJ0aWFsYCByZWxpZWQgb24gYSBkZWZhdWx0IHZhbHVlIGFyZSBza2lwcGVkLgotICAgICAgICAgSG93ZXZlciwgaWYgbmVlZGVkLCBpdCBpcyBlYXN5IHRvIGluY2x1ZGUgdGhlbS4KLQotICAgICAgOjoKLQotICAgICAgICA+Pj4gZGVmIGZvbyhhLCBiPTEwKToKLSAgICAgICAgLi4uICAgICBwYXNzCi0KLSAgICAgICAgPj4+IHNpZyA9IHNpZ25hdHVyZShmb28pCi0gICAgICAgID4+PiBiYSA9IHNpZy5iaW5kKDUpCi0KLSAgICAgICAgPj4+IGJhLmFyZ3MsIGJhLmt3YXJncwotICAgICAgICAoKDUsKSwge30pCi0KLSAgICAgICAgPj4+IGZvciBwYXJhbSBpbiBzaWcucGFyYW1ldGVycy52YWx1ZXMoKToKLSAgICAgICAgLi4uICAgICBpZiAocGFyYW0ubmFtZSBub3QgaW4gYmEuYXJndW1lbnRzCi0gICAgICAgIC4uLiAgICAgICAgICAgICBhbmQgcGFyYW0uZGVmYXVsdCBpcyBub3QgcGFyYW0uZW1wdHkpOgotICAgICAgICAuLi4gICAgICAgICBiYS5hcmd1bWVudHNbcGFyYW0ubmFtZV0gPSBwYXJhbS5kZWZhdWx0Ci0KLSAgICAgICAgPj4+IGJhLmFyZ3MsIGJhLmt3YXJncwotICAgICAgICAoKDUsIDEwKSwge30pCi0KKyAgICAgICAgIEhvd2V2ZXIsIGlmIG5lZWRlZCwgdXNlIDptZXRoOmBCb3VuZEFyZ3VtZW50cy5hcHBseV9kZWZhdWx0c2AgdG8gYWRkCisgICAgICAgICB0aGVtLgogCiAgICAuLiBhdHRyaWJ1dGU6OiBCb3VuZEFyZ3VtZW50cy5hcmdzCiAKQEAgLTY3NSwxMSArNzY5LDMxIEBACiAKICAgICAgIEEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgOmNsYXNzOmBTaWduYXR1cmVgIG9iamVjdC4KIAorICAgLi4gbWV0aG9kOjogQm91bmRBcmd1bWVudHMuYXBwbHlfZGVmYXVsdHMoKQorCisgICAgICBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3NpbmcgYXJndW1lbnRzLgorCisgICAgICBGb3IgdmFyaWFibGUtcG9zaXRpb25hbCBhcmd1bWVudHMgKGBgKmFyZ3NgYCkgdGhlIGRlZmF1bHQgaXMgYW4KKyAgICAgIGVtcHR5IHR1cGxlLgorCisgICAgICBGb3IgdmFyaWFibGUta2V5d29yZCBhcmd1bWVudHMgKGBgKiprd2FyZ3NgYCkgdGhlIGRlZmF1bHQgaXMgYW4KKyAgICAgIGVtcHR5IGRpY3QuCisKKyAgICAgIDo6CisKKyAgICAgICAgPj4+IGRlZiBmb28oYSwgYj0naGFtJywgKmFyZ3MpOiBwYXNzCisgICAgICAgID4+PiBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykuYmluZCgnc3BhbScpCisgICAgICAgID4+PiBiYS5hcHBseV9kZWZhdWx0cygpCisgICAgICAgID4+PiBiYS5hcmd1bWVudHMKKyAgICAgICAgT3JkZXJlZERpY3QoWygnYScsICdzcGFtJyksICgnYicsICdoYW0nKSwgKCdhcmdzJywgKCkpXSkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKICAgIFRoZSA6YXR0cjpgYXJnc2AgYW5kIDphdHRyOmBrd2FyZ3NgIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQgdG8gaW52b2tlCiAgICBmdW5jdGlvbnM6OgogCiAgICAgICBkZWYgdGVzdChhLCAqLCBiKToKLSAgICAgICAgIC4uLgorICAgICAgICAgIC4uLgogCiAgICAgICBzaWcgPSBzaWduYXR1cmUodGVzdCkKICAgICAgIGJhID0gc2lnLmJpbmQoMTAsIGI9MjApCkBAIC03MTksOCArODMzLDkgQEAKICAgICpuKiBlbGVtZW50cyBsaXN0ZWQgaW4gKmFyZ3MqLgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4wCi0gICAgICBVc2UgOmZ1bmM6YGdldGZ1bGxhcmdzcGVjYCBpbnN0ZWFkLCB3aGljaCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dAotICAgICAga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhbmQgYW5ub3RhdGlvbnMuCisgICAgICBVc2UgOmZ1bmM6YHNpZ25hdHVyZWAgYW5kCisgICAgICA6cmVmOmBTaWduYXR1cmUgT2JqZWN0IDxpbnNwZWN0LXNpZ25hdHVyZS1vYmplY3Q+YCwgd2hpY2ggcHJvdmlkZSBhCisgICAgICBiZXR0ZXIgaW50cm9zcGVjdGluZyBBUEkgZm9yIGNhbGxhYmxlcy4KIAogCiAuLiBmdW5jdGlvbjo6IGdldGZ1bGxhcmdzcGVjKGZ1bmMpCkBAIC03NDEsMTUgKzg1NiwxNiBAQAogCiAgICBUaGUgZmlyc3QgZm91ciBpdGVtcyBpbiB0aGUgdHVwbGUgY29ycmVzcG9uZCB0byA6ZnVuYzpgZ2V0YXJnc3BlY2AuCiAKLSAgIC4uIG5vdGU6OgotICAgICAgQ29uc2lkZXIgdXNpbmcgdGhlIG5ldyA6cmVmOmBTaWduYXR1cmUgT2JqZWN0IDxpbnNwZWN0LXNpZ25hdHVyZS1vYmplY3Q+YAotICAgICAgaW50ZXJmYWNlLCB3aGljaCBwcm92aWRlcyBhIGJldHRlciB3YXkgb2YgaW50cm9zcGVjdGluZyBmdW5jdGlvbnMuCi0KICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdyBiYXNlZCBvbiA6ZnVuYzpgc2lnbmF0dXJlYCwgYnV0IHN0aWxsIGlnbm9yZXMKICAgICAgIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGVzIGFuZCBpbmNsdWRlcyB0aGUgYWxyZWFkeSBib3VuZCBmaXJzdAogICAgICAgcGFyYW1ldGVyIGluIHRoZSBzaWduYXR1cmUgb3V0cHV0IGZvciBib3VuZCBtZXRob2RzLgogCisgICAuLiBkZXByZWNhdGVkOjogMy41CisgICAgICBVc2UgOmZ1bmM6YHNpZ25hdHVyZWAgYW5kCisgICAgICA6cmVmOmBTaWduYXR1cmUgT2JqZWN0IDxpbnNwZWN0LXNpZ25hdHVyZS1vYmplY3Q+YCwgd2hpY2ggcHJvdmlkZSBhCisgICAgICBiZXR0ZXIgaW50cm9zcGVjdGluZyBBUEkgZm9yIGNhbGxhYmxlcy4KKwogCiAuLiBmdW5jdGlvbjo6IGdldGFyZ3ZhbHVlcyhmcmFtZSkKIApAQCAtNzU5LDYgKzg3NSwxMSBAQAogICAgYXJlIHRoZSBuYW1lcyBvZiB0aGUgYGAqYGAgYW5kIGBgKipgYCBhcmd1bWVudHMgb3IgYGBOb25lYGAuICAqbG9jYWxzKiBpcyB0aGUKICAgIGxvY2FscyBkaWN0aW9uYXJ5IG9mIHRoZSBnaXZlbiBmcmFtZS4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNQorICAgICAgVXNlIDpmdW5jOmBzaWduYXR1cmVgIGFuZAorICAgICAgOnJlZjpgU2lnbmF0dXJlIE9iamVjdCA8aW5zcGVjdC1zaWduYXR1cmUtb2JqZWN0PmAsIHdoaWNoIHByb3ZpZGUgYQorICAgICAgYmV0dGVyIGludHJvc3BlY3RpbmcgQVBJIGZvciBjYWxsYWJsZXMuCisKIAogLi4gZnVuY3Rpb246OiBmb3JtYXRhcmdzcGVjKGFyZ3NbLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3b25seWRlZmF1bHRzLCBhbm5vdGF0aW9uc1ssIGZvcm1hdGFyZywgZm9ybWF0dmFyYXJncywgZm9ybWF0dmFya3csIGZvcm1hdHZhbHVlLCBmb3JtYXRyZXR1cm5zLCBmb3JtYXRhbm5vdGF0aW9uc11dKQogCkBAIC03ODEsNiArOTAyLDExIEBACiAgICA+Pj4gZm9ybWF0YXJnc3BlYygqZ2V0ZnVsbGFyZ3NwZWMoZikpCiAgICAnKGE6IGludCwgYjogZmxvYXQpJwogCisgICAuLiBkZXByZWNhdGVkOjogMy41CisgICAgICBVc2UgOmZ1bmM6YHNpZ25hdHVyZWAgYW5kCisgICAgICA6cmVmOmBTaWduYXR1cmUgT2JqZWN0IDxpbnNwZWN0LXNpZ25hdHVyZS1vYmplY3Q+YCwgd2hpY2ggcHJvdmlkZSBhCisgICAgICBiZXR0ZXIgaW50cm9zcGVjdGluZyBBUEkgZm9yIGNhbGxhYmxlcy4KKwogCiAuLiBmdW5jdGlvbjo6IGZvcm1hdGFyZ3ZhbHVlcyhhcmdzWywgdmFyYXJncywgdmFya3csIGxvY2FscywgZm9ybWF0YXJnLCBmb3JtYXR2YXJhcmdzLCBmb3JtYXR2YXJrdywgZm9ybWF0dmFsdWVdKQogCkBAIC03ODgsNiArOTE0LDExIEBACiAgICA6ZnVuYzpgZ2V0YXJndmFsdWVzYC4gIFRoZSBmb3JtYXRcKiBhcmd1bWVudHMgYXJlIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbmFsCiAgICBmb3JtYXR0aW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdG8gdHVybiBuYW1lcyBhbmQgdmFsdWVzIGludG8gc3RyaW5ncy4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNQorICAgICAgVXNlIDpmdW5jOmBzaWduYXR1cmVgIGFuZAorICAgICAgOnJlZjpgU2lnbmF0dXJlIE9iamVjdCA8aW5zcGVjdC1zaWduYXR1cmUtb2JqZWN0PmAsIHdoaWNoIHByb3ZpZGUgYQorICAgICAgYmV0dGVyIGludHJvc3BlY3RpbmcgQVBJIGZvciBjYWxsYWJsZXMuCisKIAogLi4gZnVuY3Rpb246OiBnZXRtcm8oY2xzKQogCkBAIC04MjIsOCArOTUzLDggQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLSAgIC4uIG5vdGU6OgotICAgICAgQ29uc2lkZXIgdXNpbmcgdGhlIG5ldyA6bWV0aDpgU2lnbmF0dXJlLmJpbmRgIGluc3RlYWQuCisgICAuLiBkZXByZWNhdGVkOjogMy41CisgICAgICBVc2UgOm1ldGg6YFNpZ25hdHVyZS5iaW5kYCBhbmQgOm1ldGg6YFNpZ25hdHVyZS5iaW5kX3BhcnRpYWxgIGluc3RlYWQuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRjbG9zdXJldmFycyhmdW5jKQpAQCAtODY0LDExICs5OTUsMTcgQEAKIFRoZSBpbnRlcnByZXRlciBzdGFjawogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoZW4gdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcmV0dXJuICJmcmFtZSByZWNvcmRzLCIgZWFjaCByZWNvcmQgaXMgYSB0dXBsZSBvZgotc2l4IGl0ZW1zOiB0aGUgZnJhbWUgb2JqZWN0LCB0aGUgZmlsZW5hbWUsIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgY3VycmVudCBsaW5lLAorV2hlbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZXR1cm4gImZyYW1lIHJlY29yZHMsIiBlYWNoIHJlY29yZCBpcyBhCis6dGVybTpgbmFtZWQgdHVwbGVgCitgYEZyYW1lSW5mbyhmcmFtZSwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGNvZGVfY29udGV4dCwgaW5kZXgpYGAuCitUaGUgdHVwbGUgY29udGFpbnMgdGhlIGZyYW1lIG9iamVjdCwgdGhlIGZpbGVuYW1lLCB0aGUgbGluZSBudW1iZXIgb2YgdGhlCitjdXJyZW50IGxpbmUsCiB0aGUgZnVuY3Rpb24gbmFtZSwgYSBsaXN0IG9mIGxpbmVzIG9mIGNvbnRleHQgZnJvbSB0aGUgc291cmNlIGNvZGUsIGFuZCB0aGUKIGluZGV4IG9mIHRoZSBjdXJyZW50IGxpbmUgd2l0aGluIHRoYXQgbGlzdC4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgIFJldHVybiBhIG5hbWVkIHR1cGxlIGluc3RlYWQgb2YgYSB0dXBsZS4KKwogLi4gbm90ZTo6CiAKICAgIEtlZXBpbmcgcmVmZXJlbmNlcyB0byBmcmFtZSBvYmplY3RzLCBhcyBmb3VuZCBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZnJhbWUKQEAgLTkxMyw2ICsxMDUwLDExIEBACiAgICByZXR1cm5lZCBsaXN0IHJlcHJlc2VudHMgKmZyYW1lKjsgdGhlIGxhc3QgZW50cnkgcmVwcmVzZW50cyB0aGUgb3V0ZXJtb3N0IGNhbGwKICAgIG9uICpmcmFtZSoncyBzdGFjay4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEEgbGlzdCBvZiA6dGVybTpgbmFtZWQgdHVwbGVzIDxuYW1lZCB0dXBsZT5gCisgICAgICBgYEZyYW1lSW5mbyhmcmFtZSwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGNvZGVfY29udGV4dCwgaW5kZXgpYGAKKyAgICAgIGlzIHJldHVybmVkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0aW5uZXJmcmFtZXModHJhY2ViYWNrLCBjb250ZXh0PTEpCiAKQEAgLTkyMSw2ICsxMDYzLDExIEBACiAgICBsaXN0IHJlcHJlc2VudHMgKnRyYWNlYmFjayo7IHRoZSBsYXN0IGVudHJ5IHJlcHJlc2VudHMgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXMKICAgIHJhaXNlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEEgbGlzdCBvZiA6dGVybTpgbmFtZWQgdHVwbGVzIDxuYW1lZCB0dXBsZT5gCisgICAgICBgYEZyYW1lSW5mbyhmcmFtZSwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGNvZGVfY29udGV4dCwgaW5kZXgpYGAKKyAgICAgIGlzIHJldHVybmVkLgorCiAKIC4uIGZ1bmN0aW9uOjogY3VycmVudGZyYW1lKCkKIApAQCAtOTQwLDYgKzEwODcsMTEgQEAKICAgIHJldHVybmVkIGxpc3QgcmVwcmVzZW50cyB0aGUgY2FsbGVyOyB0aGUgbGFzdCBlbnRyeSByZXByZXNlbnRzIHRoZSBvdXRlcm1vc3QKICAgIGNhbGwgb24gdGhlIHN0YWNrLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgQSBsaXN0IG9mIDp0ZXJtOmBuYW1lZCB0dXBsZXMgPG5hbWVkIHR1cGxlPmAKKyAgICAgIGBgRnJhbWVJbmZvKGZyYW1lLCBmaWxlbmFtZSwgbGluZW5vLCBmdW5jdGlvbiwgY29kZV9jb250ZXh0LCBpbmRleClgYAorICAgICAgaXMgcmV0dXJuZWQuCisKIAogLi4gZnVuY3Rpb246OiB0cmFjZShjb250ZXh0PTEpCiAKQEAgLTk0OCw2ICsxMTAwLDExIEBACiAgICBlbnRyeSBpbiB0aGUgbGlzdCByZXByZXNlbnRzIHRoZSBjYWxsZXI7IHRoZSBsYXN0IGVudHJ5IHJlcHJlc2VudHMgd2hlcmUgdGhlCiAgICBleGNlcHRpb24gd2FzIHJhaXNlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEEgbGlzdCBvZiA6dGVybTpgbmFtZWQgdHVwbGVzIDxuYW1lZCB0dXBsZT5gCisgICAgICBgYEZyYW1lSW5mbyhmcmFtZSwgZmlsZW5hbWUsIGxpbmVubywgZnVuY3Rpb24sIGNvZGVfY29udGV4dCwgaW5kZXgpYGAKKyAgICAgIGlzIHJldHVybmVkLgorCiAKIEZldGNoaW5nIGF0dHJpYnV0ZXMgc3RhdGljYWxseQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDA3LDggKzExNjQsOCBAQAogICAgICAgICAgICBwYXNzCiAKIAotQ3VycmVudCBTdGF0ZSBvZiBhIEdlbmVyYXRvcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ3VycmVudCBTdGF0ZSBvZiBHZW5lcmF0b3JzIGFuZCBDb3JvdXRpbmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2hlbiBpbXBsZW1lbnRpbmcgY29yb3V0aW5lIHNjaGVkdWxlcnMgYW5kIGZvciBvdGhlciBhZHZhbmNlZCB1c2VzIG9mCiBnZW5lcmF0b3JzLCBpdCBpcyB1c2VmdWwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBnZW5lcmF0b3IgaXMgY3VycmVudGx5CkBAIC0xMDI4LDYgKzExODUsMjEgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKy4uIGZ1bmN0aW9uOjogZ2V0Y29yb3V0aW5lc3RhdGUoY29yb3V0aW5lKQorCisgICBHZXQgY3VycmVudCBzdGF0ZSBvZiBhIGNvcm91dGluZSBvYmplY3QuICBUaGUgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUKKyAgIHVzZWQgd2l0aCBjb3JvdXRpbmUgb2JqZWN0cyBjcmVhdGVkIGJ5IDprZXl3b3JkOmBhc3luYyBkZWZgIGZ1bmN0aW9ucywgYnV0CisgICB3aWxsIGFjY2VwdCBhbnkgY29yb3V0aW5lLWxpa2Ugb2JqZWN0IHRoYXQgaGFzIGBgY3JfcnVubmluZ2BgIGFuZAorICAgYGBjcl9mcmFtZWBgIGF0dHJpYnV0ZXMuCisKKyAgIFBvc3NpYmxlIHN0YXRlcyBhcmU6CisgICAgKiBDT1JPX0NSRUFURUQ6IFdhaXRpbmcgdG8gc3RhcnQgZXhlY3V0aW9uLgorICAgICogQ09ST19SVU5OSU5HOiBDdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQgYnkgdGhlIGludGVycHJldGVyLgorICAgICogQ09ST19TVVNQRU5ERUQ6IEN1cnJlbnRseSBzdXNwZW5kZWQgYXQgYW4gYXdhaXQgZXhwcmVzc2lvbi4KKyAgICAqIENPUk9fQ0xPU0VEOiBFeGVjdXRpb24gaGFzIGNvbXBsZXRlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIFRoZSBjdXJyZW50IGludGVybmFsIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IgY2FuIGFsc28gYmUgcXVlcmllZC4gVGhpcyBpcwogbW9zdGx5IHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3NlcywgdG8gZW5zdXJlIHRoYXQgaW50ZXJuYWwgc3RhdGUgaXMgYmVpbmcKIHVwZGF0ZWQgYXMgZXhwZWN0ZWQ6CkBAIC0xMDUyLDYgKzEyMjQsMTMgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKy4uIGZ1bmN0aW9uOjogZ2V0Y29yb3V0aW5lbG9jYWxzKGNvcm91dGluZSkKKworICAgVGhpcyBmdW5jdGlvbiBpcyBhbmFsb2dvdXMgdG8gOmZ1bmM6YH5pbnNwZWN0LmdldGdlbmVyYXRvcmxvY2Fsc2AsIGJ1dAorICAgd29ya3MgZm9yIGNvcm91dGluZSBvYmplY3RzIGNyZWF0ZWQgYnkgOmtleXdvcmQ6YGFzeW5jIGRlZmAgZnVuY3Rpb25zLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogCiAuLiBfaW5zcGVjdC1tb2R1bGUtY2xpOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pby5yc3QgYi9Eb2MvbGlicmFyeS9pby5yc3QKaW5kZXggNTkyYmM0OC4uMjNkZjE4ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW8ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lvLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogaW8KICAgIDpzeW5vcHNpczogQ29yZSB0b29scyBmb3Igd29ya2luZyB3aXRoIHN0cmVhbXMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQHB5dGhvbi5vcmc+CiAuLiBtb2R1bGVhdXRob3I6OiBNaWtlIFZlcmRvbmUgPG1pa2UudmVyZG9uZUBnbWFpbC5jb20+CiAuLiBtb2R1bGVhdXRob3I6OiBNYXJrIFJ1c3NlbGwgPG1hcmsucnVzc2VsbEB6ZW4uY28udWs+CkBAIC0xMSw2ICsxMiwxMCBAQAogLi4gbW9kdWxlYXV0aG9yOjogQmVuamFtaW4gUGV0ZXJzb24gPGJlbmphbWluQHB5dGhvbi5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogQmVuamFtaW4gUGV0ZXJzb24gPGJlbmphbWluQHB5dGhvbi5vcmc+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2lvLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiAuLiBfaW8tb3ZlcnZpZXc6CiAKIE92ZXJ2aWV3CkBAIC02Niw3ICs3MSw4IEBACiBCaW5hcnkgSS9PCiBeXl5eXl5eXl5eCiAKLUJpbmFyeSBJL08gKGFsc28gY2FsbGVkICpidWZmZXJlZCBJL08qKSBleHBlY3RzIGFuZCBwcm9kdWNlcyA6Y2xhc3M6YGJ5dGVzYAorQmluYXJ5IEkvTyAoYWxzbyBjYWxsZWQgKmJ1ZmZlcmVkIEkvTyopIGV4cGVjdHMKKzp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMgPGJ5dGVzLWxpa2Ugb2JqZWN0PmAgYW5kIHByb2R1Y2VzIDpjbGFzczpgYnl0ZXNgCiBvYmplY3RzLiAgTm8gZW5jb2RpbmcsIGRlY29kaW5nLCBvciBuZXdsaW5lIHRyYW5zbGF0aW9uIGlzIHBlcmZvcm1lZC4gIFRoaXMKIGNhdGVnb3J5IG9mIHN0cmVhbXMgY2FuIGJlIHVzZWQgZm9yIGFsbCBraW5kcyBvZiBub24tdGV4dCBkYXRhLCBhbmQgYWxzbyB3aGVuCiBtYW51YWwgY29udHJvbCBvdmVyIHRoZSBoYW5kbGluZyBvZiB0ZXh0IGRhdGEgaXMgZGVzaXJlZC4KQEAgLTEzMCw3ICsxMzYsNyBAQAogSW4tbWVtb3J5IHN0cmVhbXMKIF5eXl5eXl5eXl5eXl5eXl5eCiAKLUl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGEgOmNsYXNzOmBzdHJgIG9yIDpjbGFzczpgYnl0ZXNgLWxpa2Ugb2JqZWN0IGFzIGEKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGEgOmNsYXNzOmBzdHJgIG9yIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgYXMgYQogZmlsZSBmb3IgYm90aCByZWFkaW5nIGFuZCB3cml0aW5nLiAgRm9yIHN0cmluZ3MgOmNsYXNzOmBTdHJpbmdJT2AgY2FuIGJlIHVzZWQKIGxpa2UgYSBmaWxlIG9wZW5lZCBpbiB0ZXh0IG1vZGUuICA6Y2xhc3M6YEJ5dGVzSU9gIGNhbiBiZSB1c2VkIGxpa2UgYSBmaWxlCiBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuICBCb3RoIHByb3ZpZGUgZnVsbCByZWFkLXdyaXRlIGNhcGFiaWxpdGllcyB3aXRoIHJhbmRvbQpAQCAtMjI3LDkgKzIzMywxMCBAQAogICAgd2hlbiBvcGVyYXRpb25zIHRoZXkgZG8gbm90IHN1cHBvcnQgYXJlIGNhbGxlZC4KIAogICAgVGhlIGJhc2ljIHR5cGUgdXNlZCBmb3IgYmluYXJ5IGRhdGEgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYSBmaWxlIGlzCi0gICA6Y2xhc3M6YGJ5dGVzYC4gIDpjbGFzczpgYnl0ZWFycmF5YFxzIGFyZSBhY2NlcHRlZCB0b28sIGFuZCBpbiBzb21lIGNhc2VzCi0gICAoc3VjaCBhcyA6bWV0aDpgcmVhZGludG9gKSByZXF1aXJlZC4gIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoCi0gICA6Y2xhc3M6YHN0cmAgZGF0YS4KKyAgIDpjbGFzczpgYnl0ZXNgLiAgT3RoZXIgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCBhcmUKKyAgIGFjY2VwdGVkIGFzIG1ldGhvZCBhcmd1bWVudHMgdG9vLiAgSW4gc29tZSBjYXNlcywgc3VjaCBhcworICAgOm1ldGg6YH5SYXdJT0Jhc2UucmVhZGludG9gLCBhIHdyaXRhYmxlIG9iamVjdCBzdWNoIGFzIDpjbGFzczpgYnl0ZWFycmF5YAorICAgaXMgcmVxdWlyZWQuICBUZXh0IEkvTyBjbGFzc2VzIHdvcmsgd2l0aCA6Y2xhc3M6YHN0cmAgZGF0YS4KIAogICAgTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpcwogICAgdW5kZWZpbmVkLiAgSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCBpbiB0aGlzIGNhc2UuCkBAIC0zMzksOCArMzQ2LDExIEBACiAgICAgICBpZiAqc2l6ZSogaXMgbm90IHNwZWNpZmllZCkuICBUaGUgY3VycmVudCBzdHJlYW0gcG9zaXRpb24gaXNuJ3QgY2hhbmdlZC4KICAgICAgIFRoaXMgcmVzaXppbmcgY2FuIGV4dGVuZCBvciByZWR1Y2UgdGhlIGN1cnJlbnQgZmlsZSBzaXplLiAgSW4gY2FzZSBvZgogICAgICAgZXh0ZW5zaW9uLCB0aGUgY29udGVudHMgb2YgdGhlIG5ldyBmaWxlIGFyZWEgZGVwZW5kIG9uIHRoZSBwbGF0Zm9ybQotICAgICAgKG9uIG1vc3Qgc3lzdGVtcywgYWRkaXRpb25hbCBieXRlcyBhcmUgemVyby1maWxsZWQsIG9uIFdpbmRvd3MgdGhleSdyZQotICAgICAgdW5kZXRlcm1pbmVkKS4gIFRoZSBuZXcgZmlsZSBzaXplIGlzIHJldHVybmVkLgorICAgICAgKG9uIG1vc3Qgc3lzdGVtcywgYWRkaXRpb25hbCBieXRlcyBhcmUgemVyby1maWxsZWQpLiAgVGhlIG5ldyBmaWxlIHNpemUKKyAgICAgIGlzIHJldHVybmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgV2luZG93cyB3aWxsIG5vdyB6ZXJvLWZpbGwgZmlsZXMgd2hlbiBleHRlbmRpbmcuCiAKICAgIC4uIG1ldGhvZDo6IHdyaXRhYmxlKCkKIApAQCAtMzkwLDE4ICs0MDAsMjIgQEAKIAogICAgLi4gbWV0aG9kOjogcmVhZGludG8oYikKIAotICAgICAgUmVhZCB1cCB0byBgYGxlbihiKWBgIGJ5dGVzIGludG8gOmNsYXNzOmBieXRlYXJyYXlgICpiKiBhbmQgcmV0dXJuIHRoZQotICAgICAgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBJZiB0aGUgb2JqZWN0IGlzIGluIG5vbi1ibG9ja2luZyBtb2RlIGFuZCBubwotICAgICAgYnl0ZXMgYXJlIGF2YWlsYWJsZSwgYGBOb25lYGAgaXMgcmV0dXJuZWQuCisgICAgICBSZWFkIGJ5dGVzIGludG8gYSBwcmUtYWxsb2NhdGVkLCB3cml0YWJsZQorICAgICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCAqYiosIGFuZCByZXR1cm4gdGhlCisgICAgICBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gIElmIHRoZSBvYmplY3QgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIG5vIGJ5dGVzCisgICAgICBhcmUgYXZhaWxhYmxlLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIAogICAgLi4gbWV0aG9kOjogd3JpdGUoYikKIAotICAgICAgV3JpdGUgdGhlIGdpdmVuIDpjbGFzczpgYnl0ZXNgIG9yIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3QsICpiKiwgdG8gdGhlCi0gICAgICB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uICBUaGlzIGNhbgotICAgICAgYmUgbGVzcyB0aGFuIGBgbGVuKGIpYGAsIGRlcGVuZGluZyBvbiBzcGVjaWZpY3Mgb2YgdGhlIHVuZGVybHlpbmcgcmF3CisgICAgICBXcml0ZSB0aGUgZ2l2ZW4gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCwgKmIqLCB0byB0aGUKKyAgICAgIHVuZGVybHlpbmcgcmF3IHN0cmVhbSwgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mCisgICAgICBieXRlcyB3cml0dGVuLiAgVGhpcyBjYW4gYmUgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgKmIqIGluCisgICAgICBieXRlcywgZGVwZW5kaW5nIG9uIHNwZWNpZmljcyBvZiB0aGUgdW5kZXJseWluZyByYXcKICAgICAgIHN0cmVhbSwgYW5kIGVzcGVjaWFsbHkgaWYgaXQgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUuICBgYE5vbmVgYCBpcwogICAgICAgcmV0dXJuZWQgaWYgdGhlIHJhdyBzdHJlYW0gaXMgc2V0IG5vdCB0byBibG9jayBhbmQgbm8gc2luZ2xlIGJ5dGUgY291bGQKLSAgICAgIGJlIHJlYWRpbHkgd3JpdHRlbiB0byBpdC4KKyAgICAgIGJlIHJlYWRpbHkgd3JpdHRlbiB0byBpdC4gIFRoZSBjYWxsZXIgbWF5IHJlbGVhc2Ugb3IgbXV0YXRlICpiKiBhZnRlcgorICAgICAgdGhpcyBtZXRob2QgcmV0dXJucywgc28gdGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBvbmx5IGFjY2VzcyAqYioKKyAgICAgIGR1cmluZyB0aGUgbWV0aG9kIGNhbGwuCiAKIAogLi4gY2xhc3M6OiBCdWZmZXJlZElPQmFzZQpAQCAtNDY1LDI2ICs0NzksMzkgQEAKIAogICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCi0gICAgICByYXcgc3RyZWFtJ3MgOm1ldGg6YH5SYXdJT0Jhc2UucmVhZGAgbWV0aG9kLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdQotICAgICAgYXJlIGltcGxlbWVudGluZyB5b3VyIG93biBidWZmZXJpbmcgb24gdG9wIG9mIGEgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAKKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgY2FsbCB0byB0aGUKKyAgICAgIHVuZGVybHlpbmcgcmF3IHN0cmVhbSdzIDptZXRoOmB+UmF3SU9CYXNlLnJlYWRgIChvcgorICAgICAgOm1ldGg6YH5SYXdJT0Jhc2UucmVhZGludG9gKSBtZXRob2QuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGFyZQorICAgICAgaW1wbGVtZW50aW5nIHlvdXIgb3duIGJ1ZmZlcmluZyBvbiB0b3Agb2YgYSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYAogICAgICAgb2JqZWN0LgogCiAgICAuLiBtZXRob2Q6OiByZWFkaW50byhiKQogCi0gICAgICBSZWFkIHVwIHRvIGBgbGVuKGIpYGAgYnl0ZXMgaW50byBieXRlYXJyYXkgKmIqIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZgotICAgICAgYnl0ZXMgcmVhZC4KKyAgICAgIFJlYWQgYnl0ZXMgaW50byBhIHByZS1hbGxvY2F0ZWQsIHdyaXRhYmxlCisgICAgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpiKiBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KIAogICAgICAgTGlrZSA6bWV0aDpgcmVhZGAsIG11bHRpcGxlIHJlYWRzIG1heSBiZSBpc3N1ZWQgdG8gdGhlIHVuZGVybHlpbmcgcmF3CiAgICAgICBzdHJlYW0sIHVubGVzcyB0aGUgbGF0dGVyIGlzIGludGVyYWN0aXZlLgogCi0gICAgICBBIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4KLSAgICAgIG5vbiBibG9ja2luZy1tb2RlLCBhbmQgaGFzIG5vIGRhdGEgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCisgICAgICBBIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4gbm9uCisgICAgICBibG9ja2luZy1tb2RlLCBhbmQgaGFzIG5vIGRhdGEgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCisKKyAgIC4uIG1ldGhvZDo6IHJlYWRpbnRvMShiKQorCisgICAgICBSZWFkIGJ5dGVzIGludG8gYSBwcmUtYWxsb2NhdGVkLCB3cml0YWJsZQorICAgICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCAqYiosIHVzaW5nIGF0IG1vc3Qgb25lIGNhbGwgdG8KKyAgICAgIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0ncyA6bWV0aDpgflJhd0lPQmFzZS5yZWFkYCAob3IKKyAgICAgIDptZXRoOmB+UmF3SU9CYXNlLnJlYWRpbnRvYCkgbWV0aG9kLiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkLgorCisgICAgICBBIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaXMgaW4gbm9uCisgICAgICBibG9ja2luZy1tb2RlLCBhbmQgaGFzIG5vIGRhdGEgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQogCiAgICAuLiBtZXRob2Q6OiB3cml0ZShiKQogCi0gICAgICBXcml0ZSB0aGUgZ2l2ZW4gOmNsYXNzOmBieXRlc2Agb3IgOmNsYXNzOmBieXRlYXJyYXlgIG9iamVjdCwgKmIqIGFuZAotICAgICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiAobmV2ZXIgbGVzcyB0aGFuIGBgbGVuKGIpYGAsIHNpbmNlIGlmCisgICAgICBXcml0ZSB0aGUgZ2l2ZW4gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCwgKmIqLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIKKyAgICAgIG9mIGJ5dGVzIHdyaXR0ZW4gKGFsd2F5cyBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mICpiKiBpbiBieXRlcywgc2luY2UgaWYKICAgICAgIHRoZSB3cml0ZSBmYWlscyBhbiA6ZXhjOmBPU0Vycm9yYCB3aWxsIGJlIHJhaXNlZCkuICBEZXBlbmRpbmcgb24gdGhlCiAgICAgICBhY3R1YWwgaW1wbGVtZW50YXRpb24sIHRoZXNlIGJ5dGVzIG1heSBiZSByZWFkaWx5IHdyaXR0ZW4gdG8gdGhlCiAgICAgICB1bmRlcmx5aW5nIHN0cmVhbSwgb3IgaGVsZCBpbiBhIGJ1ZmZlciBmb3IgcGVyZm9ybWFuY2UgYW5kIGxhdGVuY3kKQEAgLTQ5NCw2ICs1MjEsOSBAQAogICAgICAgZGF0YSBuZWVkZWQgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmF3IHN0cmVhbSBidXQgaXQgY291bGRuJ3QgYWNjZXB0CiAgICAgICBhbGwgdGhlIGRhdGEgd2l0aG91dCBibG9ja2luZy4KIAorICAgICAgVGhlIGNhbGxlciBtYXkgcmVsZWFzZSBvciBtdXRhdGUgKmIqIGFmdGVyIHRoaXMgbWV0aG9kIHJldHVybnMsCisgICAgICBzbyB0aGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIG9ubHkgYWNjZXNzICpiKiBkdXJpbmcgdGhlIG1ldGhvZCBjYWxsLgorCiAKIFJhdyBGaWxlIEkvTwogXl5eXl5eXl5eXl5eCkBAIC01MDcsOSArNTM3LDEyIEBACiAgICBUaGUgKm5hbWUqIGNhbiBiZSBvbmUgb2YgdHdvIHRoaW5nczoKIAogICAgKiBhIGNoYXJhY3RlciBzdHJpbmcgb3IgOmNsYXNzOmBieXRlc2Agb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGF0aCB0byB0aGUKLSAgICAgZmlsZSB3aGljaCB3aWxsIGJlIG9wZW5lZDsKKyAgICAgZmlsZSB3aGljaCB3aWxsIGJlIG9wZW5lZC4gSW4gdGhpcyBjYXNlIGNsb3NlZmQgbXVzdCBiZSBUcnVlICh0aGUgZGVmYXVsdCkKKyAgICAgb3RoZXJ3aXNlIGFuIGVycm9yIHdpbGwgYmUgcmFpc2VkLgogICAgKiBhbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGFuIGV4aXN0aW5nIE9TLWxldmVsIGZpbGUgZGVzY3JpcHRvcgotICAgICB0byB3aGljaCB0aGUgcmVzdWx0aW5nIDpjbGFzczpgRmlsZUlPYCBvYmplY3Qgd2lsbCBnaXZlIGFjY2Vzcy4KKyAgICAgdG8gd2hpY2ggdGhlIHJlc3VsdGluZyA6Y2xhc3M6YEZpbGVJT2Agb2JqZWN0IHdpbGwgZ2l2ZSBhY2Nlc3MuIFdoZW4gdGhlCisgICAgIEZpbGVJTyBvYmplY3QgaXMgY2xvc2VkIHRoaXMgZmQgd2lsbCBiZSBjbG9zZWQgYXMgd2VsbCwgdW5sZXNzICpjbG9zZWZkKgorICAgICBpcyBzZXQgdG8gYGBGYWxzZWBgLgogCiAgICBUaGUgKm1vZGUqIGNhbiBiZSBgYCdyJ2BgLCBgYCd3J2BgLCBgYCd4J2BgIG9yIGBgJ2EnYGAgZm9yIHJlYWRpbmcKICAgIChkZWZhdWx0KSwgd3JpdGluZywgZXhjbHVzaXZlIGNyZWF0aW9uIG9yIGFwcGVuZGluZy4gVGhlIGZpbGUgd2lsbCBiZQpAQCAtNTY2LDcgKzU5OSw4IEBACiAgICA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYC4gIFRoZSBidWZmZXIgaXMgZGlzY2FyZGVkIHdoZW4gdGhlCiAgICA6bWV0aDpgfklPQmFzZS5jbG9zZWAgbWV0aG9kIGlzIGNhbGxlZC4KIAotICAgVGhlIGFyZ3VtZW50ICppbml0aWFsX2J5dGVzKiBjb250YWlucyBvcHRpb25hbCBpbml0aWFsIDpjbGFzczpgYnl0ZXNgIGRhdGEuCisgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmluaXRpYWxfYnl0ZXMqIGlzIGEgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCB0aGF0CisgICBjb250YWlucyBpbml0aWFsIGRhdGEuCiAKICAgIDpjbGFzczpgQnl0ZXNJT2AgcHJvdmlkZXMgb3Igb3ZlcnJpZGVzIHRoZXNlIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8gdGhvc2UKICAgIGZyb20gOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAgYW5kIDpjbGFzczpgSU9CYXNlYDoKQEAgLTU5OCw2ICs2MzIsMTEgQEAKIAogICAgICAgSW4gOmNsYXNzOmBCeXRlc0lPYCwgdGhpcyBpcyB0aGUgc2FtZSBhcyA6bWV0aDpgcmVhZGAuCiAKKyAgIC4uIG1ldGhvZDo6IHJlYWRpbnRvMSgpCisKKyAgICAgIEluIDpjbGFzczpgQnl0ZXNJT2AsIHRoaXMgaXMgdGhlIHNhbWUgYXMgOm1ldGg6YHJlYWRpbnRvYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CiAKIC4uIGNsYXNzOjogQnVmZmVyZWRSZWFkZXIocmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKQogCkBAIC02NTksNyArNjk4LDcgQEAKIAogICAgLi4gbWV0aG9kOjogd3JpdGUoYikKIAotICAgICAgV3JpdGUgdGhlIDpjbGFzczpgYnl0ZXNgIG9yIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3QsICpiKiBhbmQgcmV0dXJuIHRoZQorICAgICAgV3JpdGUgdGhlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAsICpiKiwgYW5kIHJldHVybiB0aGUKICAgICAgIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiAgV2hlbiBpbiBub24tYmxvY2tpbmcgbW9kZSwgYQogICAgICAgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlIGJ1ZmZlciBuZWVkcyB0byBiZSB3cml0dGVuIG91dCBidXQKICAgICAgIHRoZSByYXcgc3RyZWFtIGJsb2Nrcy4KQEAgLTgwOCwxMSArODQ3LDEzIEBACiAgICBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZXJyb3IgKHRoZSBkZWZhdWx0IG9mIGBgTm9uZWBgIGhhcyB0aGUgc2FtZQogICAgZWZmZWN0KSwgb3IgcGFzcyBgYCdpZ25vcmUnYGAgdG8gaWdub3JlIGVycm9ycy4gIChOb3RlIHRoYXQgaWdub3JpbmcgZW5jb2RpbmcKICAgIGVycm9ycyBjYW4gbGVhZCB0byBkYXRhIGxvc3MuKSAgYGAncmVwbGFjZSdgYCBjYXVzZXMgYSByZXBsYWNlbWVudCBtYXJrZXIKLSAgIChzdWNoIGFzIGBgJz8nYGApIHRvIGJlIGluc2VydGVkIHdoZXJlIHRoZXJlIGlzIG1hbGZvcm1lZCBkYXRhLiAgV2hlbgotICAgd3JpdGluZywgYGAneG1sY2hhcnJlZnJlcGxhY2UnYGAgKHJlcGxhY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlcgotICAgcmVmZXJlbmNlKSBvciBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIChyZXBsYWNlIHdpdGggYmFja3NsYXNoZWQgZXNjYXBlCi0gICBzZXF1ZW5jZXMpIGNhbiBiZSB1c2VkLiAgQW55IG90aGVyIGVycm9yIGhhbmRsaW5nIG5hbWUgdGhhdCBoYXMgYmVlbgotICAgcmVnaXN0ZXJlZCB3aXRoIDpmdW5jOmBjb2RlY3MucmVnaXN0ZXJfZXJyb3JgIGlzIGFsc28gdmFsaWQuCisgICAoc3VjaCBhcyBgYCc/J2BgKSB0byBiZSBpbnNlcnRlZCB3aGVyZSB0aGVyZSBpcyBtYWxmb3JtZWQgZGF0YS4KKyAgIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAgY2F1c2VzIG1hbGZvcm1lZCBkYXRhIHRvIGJlIHJlcGxhY2VkIGJ5IGEKKyAgIGJhY2tzbGFzaGVkIGVzY2FwZSBzZXF1ZW5jZS4gIFdoZW4gd3JpdGluZywgYGAneG1sY2hhcnJlZnJlcGxhY2UnYGAKKyAgIChyZXBsYWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIFhNTCBjaGFyYWN0ZXIgcmVmZXJlbmNlKSAgb3IgYGAnbmFtZXJlcGxhY2UnYGAKKyAgIChyZXBsYWNlIHdpdGggYGBcTnsuLi59YGAgZXNjYXBlIHNlcXVlbmNlcykgY2FuIGJlIHVzZWQuICBBbnkgb3RoZXIgZXJyb3IKKyAgIGhhbmRsaW5nIG5hbWUgdGhhdCBoYXMgYmVlbiByZWdpc3RlcmVkIHdpdGgKKyAgIDpmdW5jOmBjb2RlY3MucmVnaXN0ZXJfZXJyb3JgIGlzIGFsc28gdmFsaWQuCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogdW5pdmVyc2FsIG5ld2xpbmVzOyBpby5UZXh0SU9XcmFwcGVyIGNsYXNzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0IGIvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdAppbmRleCAzMDEwNDhlLi4yMzUyNmI2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IGlwYWRkcmVzcwogICAgOnN5bm9wc2lzOiBJUHY0L0lQdjYgbWFuaXB1bGF0aW9uIGxpYnJhcnkuCisKIC4uIG1vZHVsZWF1dGhvcjo6IFBldGVyIE1vb2R5CiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2lwYWRkcmVzcy5weWAKQEAgLTE0Niw2ICsxNDcsMjAgQEAKICAgICAgIHRoZSBhcHByb3ByaWF0ZSBsZW5ndGggKG1vc3Qgc2lnbmlmaWNhbnQgb2N0ZXQgZmlyc3QpLiBUaGlzIGlzIDQgYnl0ZXMKICAgICAgIGZvciBJUHY0IGFuZCAxNiBieXRlcyBmb3IgSVB2Ni4KIAorICAgLi4gYXR0cmlidXRlOjogcmV2ZXJzZV9wb2ludGVyCisKKyAgICAgIFRoZSBuYW1lIG9mIHRoZSByZXZlcnNlIEROUyBQVFIgcmVjb3JkIGZvciB0aGUgSVAgYWRkcmVzcywgZS5nLjo6CisKKyAgICAgICAgICA+Pj4gaXBhZGRyZXNzLmlwX2FkZHJlc3MoIjEyNy4wLjAuMSIpLnJldmVyc2VfcG9pbnRlcgorICAgICAgICAgICcxLjAuMC4xMjcuaW4tYWRkci5hcnBhJworICAgICAgICAgID4+PiBpcGFkZHJlc3MuaXBfYWRkcmVzcygiMjAwMTpkYjg6OjEiKS5yZXZlcnNlX3BvaW50ZXIKKyAgICAgICAgICAnMS4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuOC5iLmQuMC4xLjAuMC4yLmlwNi5hcnBhJworCisgICAgICBUaGlzIGlzIHRoZSBuYW1lIHRoYXQgY291bGQgYmUgdXNlZCBmb3IgcGVyZm9ybWluZyBhIFBUUiBsb29rdXAsIG5vdCB0aGUKKyAgICAgIHJlc29sdmVkIGhvc3RuYW1lIGl0c2VsZi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX211bHRpY2FzdAogCiAgICAgICBgYFRydWVgYCBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBmb3IgbXVsdGljYXN0IHVzZS4gIFNlZQpAQCAtMTg0LDggKzE5OSw4IEBACiAgICAgICBgYFRydWVgYCBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBmb3IgbGluay1sb2NhbCB1c2FnZS4gIFNlZQogICAgICAgOlJGQzpgMzkyN2AuCiAKLS4uIF9pYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeTogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9pYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeS9pYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeS54aHRtbAotLi4gX2lhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5OiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2lhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5L2lhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LnhodG1sCisuLiBfaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnk6IGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5L2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LnhodG1sCisuLiBfaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnk6IGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2lhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5L2lhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LnhodG1sCiAKIAogLi4gY2xhc3M6OiBJUHY2QWRkcmVzcyhhZGRyZXNzKQpAQCAtMjI2LDYgKzI0MSw3IEBACiAgICA6Y2xhc3M6YElQdjRBZGRyZXNzYCBjbGFzczoKIAogICAgLi4gYXR0cmlidXRlOjogcGFja2VkCisgICAuLiBhdHRyaWJ1dGU6OiByZXZlcnNlX3BvaW50ZXIKICAgIC4uIGF0dHJpYnV0ZTo6IHZlcnNpb24KICAgIC4uIGF0dHJpYnV0ZTo6IG1heF9wcmVmaXhsZW4KICAgIC4uIGF0dHJpYnV0ZTo6IGlzX211bHRpY2FzdApAQCAtMzc3LDYgKzM5MywxMiBAQAogICAgMy4gQW4gaW50ZWdlciBwYWNrZWQgaW50byBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBvZiBsZW5ndGggNCwgYmlnLWVuZGlhbi4KICAgICAgIFRoZSBpbnRlcnByZXRhdGlvbiBpcyBzaW1pbGFyIHRvIGFuIGludGVnZXIgKmFkZHJlc3MqLgogCisgICA0LiBBIHR3by10dXBsZSBvZiBhbiBhZGRyZXNzIGRlc2NyaXB0aW9uIGFuZCBhIG5ldG1hc2ssIHdoZXJlIHRoZSBhZGRyZXNzCisgICAgICBkZXNjcmlwdGlvbiBpcyBlaXRoZXIgYSBzdHJpbmcsIGEgMzItYml0cyBpbnRlZ2VyLCBhIDQtYnl0ZXMgcGFja2VkCisgICAgICBpbnRlZ2VyLCBvciBhbiBleGlzdGluZyBJUHY0QWRkcmVzcyBvYmplY3Q7IGFuZCB0aGUgbmV0bWFzayBpcyBlaXRoZXIKKyAgICAgIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBwcmVmaXggbGVuZ3RoIChlLmcuIGBgMjRgYCkgb3IgYSBzdHJpbmcKKyAgICAgIHJlcHJlc2VudGluZyB0aGUgcHJlZml4IG1hc2sgKGUuZy4gYGAyNTUuMjU1LjI1NS4wYGApLgorCiAgICBBbiA6ZXhjOmBBZGRyZXNzVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmICphZGRyZXNzKiBpcyBub3QgYSB2YWxpZCBJUHY0CiAgICBhZGRyZXNzLiAgQSA6ZXhjOmBOZXRtYXNrVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBtYXNrIGlzIG5vdCB2YWxpZCBmb3IKICAgIGFuIElQdjQgYWRkcmVzcy4KQEAgLTM4OSw2ICs0MTEsMTAgQEAKICAgIG9iamVjdHMgd2lsbCByYWlzZSA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoZSBhcmd1bWVudCdzIElQIHZlcnNpb24gaXMKICAgIGluY29tcGF0aWJsZSB0byBgYHNlbGZgYAogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorCisgICAgICBBZGRlZCB0aGUgdHdvLXR1cGxlIGZvcm0gZm9yIHRoZSAqYWRkcmVzcyogY29uc3RydWN0b3IgcGFyYW1ldGVyLgorCiAgICAuLiBhdHRyaWJ1dGU6OiB2ZXJzaW9uCiAgICAuLiBhdHRyaWJ1dGU6OiBtYXhfcHJlZml4bGVuCiAKQEAgLTU1Myw2ICs1NzksMTEgQEAKICAgIDMuIEFuIGludGVnZXIgcGFja2VkIGludG8gYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3Qgb2YgbGVuZ3RoIDE2LCBiaWctZW5kaWFuLgogICAgICAgVGhlIGludGVycHJldGF0aW9uIGlzIHNpbWlsYXIgdG8gYW4gaW50ZWdlciAqYWRkcmVzcyouCiAKKyAgIDQuIEEgdHdvLXR1cGxlIG9mIGFuIGFkZHJlc3MgZGVzY3JpcHRpb24gYW5kIGEgbmV0bWFzaywgd2hlcmUgdGhlIGFkZHJlc3MKKyAgICAgIGRlc2NyaXB0aW9uIGlzIGVpdGhlciBhIHN0cmluZywgYSAxMjgtYml0cyBpbnRlZ2VyLCBhIDE2LWJ5dGVzIHBhY2tlZAorICAgICAgaW50ZWdlciwgb3IgYW4gZXhpc3RpbmcgSVB2NkFkZHJlc3Mgb2JqZWN0OyBhbmQgdGhlIG5ldG1hc2sgaXMgYW4KKyAgICAgIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBwcmVmaXggbGVuZ3RoLgorCiAgICBBbiA6ZXhjOmBBZGRyZXNzVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmICphZGRyZXNzKiBpcyBub3QgYSB2YWxpZCBJUHY2CiAgICBhZGRyZXNzLiAgQSA6ZXhjOmBOZXRtYXNrVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBtYXNrIGlzIG5vdCB2YWxpZCBmb3IKICAgIGFuIElQdjYgYWRkcmVzcy4KQEAgLTU2MSw2ICs1OTIsMTAgQEAKICAgIHRoZW4gOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgaG9zdCBiaXRzIGFyZSBtYXNrZWQgb3V0CiAgICB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgYWRkcmVzcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKworICAgICAgQWRkZWQgdGhlIHR3by10dXBsZSBmb3JtIGZvciB0aGUgKmFkZHJlc3MqIGNvbnN0cnVjdG9yIHBhcmFtZXRlci4KKwogICAgLi4gYXR0cmlidXRlOjogdmVyc2lvbgogICAgLi4gYXR0cmlidXRlOjogbWF4X3ByZWZpeGxlbgogICAgLi4gYXR0cmlidXRlOjogaXNfbXVsdGljYXN0CkBAIC02MTksNyArNjU0LDcgQEAKIGV4YW1wbGU6OgogCiAgICA+Pj4gZm9yIGFkZHIgaW4gSVB2NE5ldHdvcmsoJzE5Mi4wLjIuMC8yOCcpOgotICAgLi4uICAgYWRkcgorICAgLi4uICAgICBhZGRyCiAgICAuLi4KICAgIElQdjRBZGRyZXNzKCcxOTIuMC4yLjAnKQogICAgSVB2NEFkZHJlc3MoJzE5Mi4wLjIuMScpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0IGIvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdAppbmRleCBmNDg5NTM1Li5kZmMxZGRjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2l0ZXJ0b29scy5yc3QKQEAgLTMsMTQgKzMsMTUgQEAKIAogLi4gbW9kdWxlOjogaXRlcnRvb2xzCiAgICA6c3lub3BzaXM6IEZ1bmN0aW9ucyBjcmVhdGluZyBpdGVyYXRvcnMgZm9yIGVmZmljaWVudCBsb29waW5nLgorCiAuLiBtb2R1bGVhdXRob3I6OiBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbkByY24uY29tPgogCi0KIC4uIHRlc3RzZXR1cDo6CiAKICAgIGZyb20gaXRlcnRvb2xzIGltcG9ydCAqCiAKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBudW1iZXIgb2YgOnRlcm06YGl0ZXJhdG9yYCBidWlsZGluZyBibG9ja3MgaW5zcGlyZWQKIGJ5IGNvbnN0cnVjdHMgZnJvbSBBUEwsIEhhc2tlbGwsIGFuZCBTTUwuICBFYWNoIGhhcyBiZWVuIHJlY2FzdCBpbiBhIGZvcm0KQEAgLTg3LDE5ICs4OCwyNyBAQAogCiAuLiBmdW5jdGlvbjo6IGFjY3VtdWxhdGUoaXRlcmFibGVbLCBmdW5jXSkKIAotICAgIE1ha2UgYW4gaXRlcmF0b3IgdGhhdCByZXR1cm5zIGFjY3VtdWxhdGVkIHN1bXMuIEVsZW1lbnRzIG1heSBiZSBhbnkgYWRkYWJsZQotICAgIHR5cGUgaW5jbHVkaW5nIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAgb3IgOmNsYXNzOmB+ZnJhY3Rpb25zLkZyYWN0aW9uYC4KLSAgICBJZiB0aGUgb3B0aW9uYWwgKmZ1bmMqIGFyZ3VtZW50IGlzIHN1cHBsaWVkLCBpdCBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiB0d28KLSAgICBhcmd1bWVudHMgYW5kIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIGFkZGl0aW9uLgorICAgIE1ha2UgYW4gaXRlcmF0b3IgdGhhdCByZXR1cm5zIGFjY3VtdWxhdGVkIHN1bXMsIG9yIGFjY3VtdWxhdGVkCisgICAgcmVzdWx0cyBvZiBvdGhlciBiaW5hcnkgZnVuY3Rpb25zIChzcGVjaWZpZWQgdmlhIHRoZSBvcHRpb25hbAorICAgICpmdW5jKiBhcmd1bWVudCkuICBJZiAqZnVuYyogaXMgc3VwcGxpZWQsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCisgICAgb2YgdHdvIGFyZ3VtZW50cy4gRWxlbWVudHMgb2YgdGhlIGlucHV0ICppdGVyYWJsZSogbWF5IGJlIGFueSB0eXBlCisgICAgdGhhdCBjYW4gYmUgYWNjZXB0ZWQgYXMgYXJndW1lbnRzIHRvICpmdW5jKi4gKEZvciBleGFtcGxlLCB3aXRoCisgICAgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIG9mIGFkZGl0aW9uLCBlbGVtZW50cyBtYXkgYmUgYW55IGFkZGFibGUKKyAgICB0eXBlIGluY2x1ZGluZyA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIG9yCisgICAgOmNsYXNzOmB+ZnJhY3Rpb25zLkZyYWN0aW9uYC4pIElmIHRoZSBpbnB1dCBpdGVyYWJsZSBpcyBlbXB0eSwgdGhlCisgICAgb3V0cHV0IGl0ZXJhYmxlIHdpbGwgYWxzbyBiZSBlbXB0eS4KIAotICAgIEVxdWl2YWxlbnQgdG86OgorICAgIFJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgICAgZGVmIGFjY3VtdWxhdGUoaXRlcmFibGUsIGZ1bmM9b3BlcmF0b3IuYWRkKToKICAgICAgICAgICAgICdSZXR1cm4gcnVubmluZyB0b3RhbHMnCiAgICAgICAgICAgICAjIGFjY3VtdWxhdGUoWzEsMiwzLDQsNV0pIC0tPiAxIDMgNiAxMCAxNQogICAgICAgICAgICAgIyBhY2N1bXVsYXRlKFsxLDIsMyw0LDVdLCBvcGVyYXRvci5tdWwpIC0tPiAxIDIgNiAyNCAxMjAKICAgICAgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKLSAgICAgICAgICAgIHRvdGFsID0gbmV4dChpdCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0b3RhbCA9IG5leHQoaXQpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIHlpZWxkIHRvdGFsCiAgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBpdDoKICAgICAgICAgICAgICAgICB0b3RhbCA9IGZ1bmModG90YWwsIGVsZW1lbnQpCkBAIC0xMDksNyArMTE4LDcgQEAKICAgICA6ZnVuYzpgbWluYCBmb3IgYSBydW5uaW5nIG1pbmltdW0sIDpmdW5jOmBtYXhgIGZvciBhIHJ1bm5pbmcgbWF4aW11bSwgb3IKICAgICA6ZnVuYzpgb3BlcmF0b3IubXVsYCBmb3IgYSBydW5uaW5nIHByb2R1Y3QuICBBbW9ydGl6YXRpb24gdGFibGVzIGNhbiBiZQogICAgIGJ1aWx0IGJ5IGFjY3VtdWxhdGluZyBpbnRlcmVzdCBhbmQgYXBwbHlpbmcgcGF5bWVudHMuICBGaXJzdC1vcmRlcgotICAgIGByZWN1cnJlbmNlIHJlbGF0aW9ucyA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWN1cnJlbmNlX3JlbGF0aW9uPmBfCisgICAgYHJlY3VycmVuY2UgcmVsYXRpb25zIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWN1cnJlbmNlX3JlbGF0aW9uPmBfCiAgICAgY2FuIGJlIG1vZGVsZWQgYnkgc3VwcGx5aW5nIHRoZSBpbml0aWFsIHZhbHVlIGluIHRoZSBpdGVyYWJsZSBhbmQgdXNpbmcgb25seQogICAgIHRoZSBhY2N1bXVsYXRlZCB0b3RhbCBpbiAqZnVuYyogYXJndW1lbnQ6OgogCkBAIC0xMjQsNyArMTMzLDcgQEAKICAgICAgID4+PiBsaXN0KGFjY3VtdWxhdGUoY2FzaGZsb3dzLCBsYW1iZGEgYmFsLCBwbXQ6IGJhbCoxLjA1ICsgcG10KSkKICAgICAgIFsxMDAwLCA5NjAuMCwgOTE4LjAsIDg3My45MDAwMDAwMDAwMDAxLCA4MjcuNTk1MDAwMDAwMDAwMV0KIAotICAgICAgIyBDaGFvdGljIHJlY3VycmVuY2UgcmVsYXRpb24gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Mb2dpc3RpY19tYXAKKyAgICAgICMgQ2hhb3RpYyByZWN1cnJlbmNlIHJlbGF0aW9uIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xvZ2lzdGljX21hcAogICAgICAgPj4+IGxvZ2lzdGljX21hcCA9IGxhbWJkYSB4LCBfOiAgciAqIHggKiAoMSAtIHgpCiAgICAgICA+Pj4gciA9IDMuOAogICAgICAgPj4+IHgwID0gMC40CkBAIC0xNDgsNyArMTU3LDcgQEAKICAgIE1ha2UgYW4gaXRlcmF0b3IgdGhhdCByZXR1cm5zIGVsZW1lbnRzIGZyb20gdGhlIGZpcnN0IGl0ZXJhYmxlIHVudGlsIGl0IGlzCiAgICBleGhhdXN0ZWQsIHRoZW4gcHJvY2VlZHMgdG8gdGhlIG5leHQgaXRlcmFibGUsIHVudGlsIGFsbCBvZiB0aGUgaXRlcmFibGVzIGFyZQogICAgZXhoYXVzdGVkLiAgVXNlZCBmb3IgdHJlYXRpbmcgY29uc2VjdXRpdmUgc2VxdWVuY2VzIGFzIGEgc2luZ2xlIHNlcXVlbmNlLgotICAgRXF1aXZhbGVudCB0bzo6CisgICBSb3VnaGx5IGVxdWl2YWxlbnQgdG86OgogCiAgICAgICBkZWYgY2hhaW4oKml0ZXJhYmxlcyk6CiAgICAgICAgICAgIyBjaGFpbignQUJDJywgJ0RFRicpIC0tPiBBIEIgQyBEIEUgRgpAQCAtMTgxLDcgKzE5MCw3IEBACiAgICB2YWx1ZS4gIFNvIGlmIHRoZSBpbnB1dCBlbGVtZW50cyBhcmUgdW5pcXVlLCB0aGVyZSB3aWxsIGJlIG5vIHJlcGVhdAogICAgdmFsdWVzIGluIGVhY2ggY29tYmluYXRpb24uCiAKLSAgIEVxdWl2YWxlbnQgdG86OgorICAgUm91Z2hseSBlcXVpdmFsZW50IHRvOjoKIAogICAgICAgICBkZWYgY29tYmluYXRpb25zKGl0ZXJhYmxlLCByKToKICAgICAgICAgICAgICMgY29tYmluYXRpb25zKCdBQkNEJywgMikgLS0+IEFCIEFDIEFEIEJDIEJEIENECkBAIC0yMzAsNyArMjM5LDcgQEAKICAgIHZhbHVlLiAgU28gaWYgdGhlIGlucHV0IGVsZW1lbnRzIGFyZSB1bmlxdWUsIHRoZSBnZW5lcmF0ZWQgY29tYmluYXRpb25zCiAgICB3aWxsIGFsc28gYmUgdW5pcXVlLgogCi0gICBFcXVpdmFsZW50IHRvOjoKKyAgIFJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgICAgZGVmIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KGl0ZXJhYmxlLCByKToKICAgICAgICAgICAgICMgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoJ0FCQycsIDIpIC0tPiBBQSBBQiBBQyBCQiBCQyBDQwpAQCAtMjcwLDcgKzI3OSw3IEBACiAgICBNYWtlIGFuIGl0ZXJhdG9yIHRoYXQgZmlsdGVycyBlbGVtZW50cyBmcm9tICpkYXRhKiByZXR1cm5pbmcgb25seSB0aG9zZSB0aGF0CiAgICBoYXZlIGEgY29ycmVzcG9uZGluZyBlbGVtZW50IGluICpzZWxlY3RvcnMqIHRoYXQgZXZhbHVhdGVzIHRvIGBgVHJ1ZWBgLgogICAgU3RvcHMgd2hlbiBlaXRoZXIgdGhlICpkYXRhKiBvciAqc2VsZWN0b3JzKiBpdGVyYWJsZXMgaGFzIGJlZW4gZXhoYXVzdGVkLgotICAgRXF1aXZhbGVudCB0bzo6CisgICBSb3VnaGx5IGVxdWl2YWxlbnQgdG86OgogCiAgICAgICAgZGVmIGNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycyk6CiAgICAgICAgICAgICMgY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pIC0tPiBBIEMgRSBGCkBAIC0yODMsNyArMjkyLDcgQEAKIAogICAgTWFrZSBhbiBpdGVyYXRvciB0aGF0IHJldHVybnMgZXZlbmx5IHNwYWNlZCB2YWx1ZXMgc3RhcnRpbmcgd2l0aCBudW1iZXIgKnN0YXJ0Ki4gT2Z0ZW4KICAgIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gOmZ1bmM6YG1hcGAgdG8gZ2VuZXJhdGUgY29uc2VjdXRpdmUgZGF0YSBwb2ludHMuCi0gICBBbHNvLCB1c2VkIHdpdGggOmZ1bmM6YHppcGAgdG8gYWRkIHNlcXVlbmNlIG51bWJlcnMuICBFcXVpdmFsZW50IHRvOjoKKyAgIEFsc28sIHVzZWQgd2l0aCA6ZnVuYzpgemlwYCB0byBhZGQgc2VxdWVuY2UgbnVtYmVycy4gIFJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgIGRlZiBjb3VudChzdGFydD0wLCBzdGVwPTEpOgogICAgICAgICAgICMgY291bnQoMTApIC0tPiAxMCAxMSAxMiAxMyAxNCAuLi4KQEAgLTMwNCw3ICszMTMsNyBAQAogCiAgICBNYWtlIGFuIGl0ZXJhdG9yIHJldHVybmluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZSBhbmQgc2F2aW5nIGEgY29weSBvZiBlYWNoLgogICAgV2hlbiB0aGUgaXRlcmFibGUgaXMgZXhoYXVzdGVkLCByZXR1cm4gZWxlbWVudHMgZnJvbSB0aGUgc2F2ZWQgY29weS4gIFJlcGVhdHMKLSAgIGluZGVmaW5pdGVseS4gIEVxdWl2YWxlbnQgdG86OgorICAgaW5kZWZpbml0ZWx5LiAgUm91Z2hseSBlcXVpdmFsZW50IHRvOjoKIAogICAgICAgZGVmIGN5Y2xlKGl0ZXJhYmxlKToKICAgICAgICAgICAjIGN5Y2xlKCdBQkNEJykgLS0+IEEgQiBDIEQgQSBCIEMgRCBBIEIgQyBEIC4uLgpAQCAtMzI1LDcgKzMzNCw3IEBACiAgICBNYWtlIGFuIGl0ZXJhdG9yIHRoYXQgZHJvcHMgZWxlbWVudHMgZnJvbSB0aGUgaXRlcmFibGUgYXMgbG9uZyBhcyB0aGUgcHJlZGljYXRlCiAgICBpcyB0cnVlOyBhZnRlcndhcmRzLCByZXR1cm5zIGV2ZXJ5IGVsZW1lbnQuICBOb3RlLCB0aGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvZHVjZQogICAgKmFueSogb3V0cHV0IHVudGlsIHRoZSBwcmVkaWNhdGUgZmlyc3QgYmVjb21lcyBmYWxzZSwgc28gaXQgbWF5IGhhdmUgYSBsZW5ndGh5Ci0gICBzdGFydC11cCB0aW1lLiAgRXF1aXZhbGVudCB0bzo6CisgICBzdGFydC11cCB0aW1lLiAgUm91Z2hseSBlcXVpdmFsZW50IHRvOjoKIAogICAgICAgZGVmIGRyb3B3aGlsZShwcmVkaWNhdGUsIGl0ZXJhYmxlKToKICAgICAgICAgICAjIGRyb3B3aGlsZShsYW1iZGEgeDogeDw1LCBbMSw0LDYsNCwxXSkgLS0+IDYgNCAxCkBAIC0zNDEsNyArMzUwLDcgQEAKIAogICAgTWFrZSBhbiBpdGVyYXRvciB0aGF0IGZpbHRlcnMgZWxlbWVudHMgZnJvbSBpdGVyYWJsZSByZXR1cm5pbmcgb25seSB0aG9zZSBmb3IKICAgIHdoaWNoIHRoZSBwcmVkaWNhdGUgaXMgYGBGYWxzZWBgLiBJZiAqcHJlZGljYXRlKiBpcyBgYE5vbmVgYCwgcmV0dXJuIHRoZSBpdGVtcwotICAgdGhhdCBhcmUgZmFsc2UuIEVxdWl2YWxlbnQgdG86OgorICAgdGhhdCBhcmUgZmFsc2UuIFJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgIGRlZiBmaWx0ZXJmYWxzZShwcmVkaWNhdGUsIGl0ZXJhYmxlKToKICAgICAgICAgICAjIGZpbHRlcmZhbHNlKGxhbWJkYSB4OiB4JTIsIHJhbmdlKDEwKSkgLS0+IDAgMiA0IDYgOApAQCAtMzc4LDcgKzM4Nyw3IEBACiAgICAgICAgICAgZ3JvdXBzLmFwcGVuZChsaXN0KGcpKSAgICAgICMgU3RvcmUgZ3JvdXAgaXRlcmF0b3IgYXMgYSBsaXN0CiAgICAgICAgICAgdW5pcXVla2V5cy5hcHBlbmQoaykKIAotICAgOmZ1bmM6YGdyb3VwYnlgIGlzIGVxdWl2YWxlbnQgdG86OgorICAgOmZ1bmM6YGdyb3VwYnlgIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgIGNsYXNzIGdyb3VwYnk6CiAgICAgICAgICAgIyBbayBmb3IgaywgZyBpbiBncm91cGJ5KCdBQUFBQkJCQ0NEQUFCQkInKV0gLS0+IEEgQiBDIEQgQSBCCkBAIC00MDAsNyArNDA5LDEwIEBACiAgICAgICAgICAgZGVmIF9ncm91cGVyKHNlbGYsIHRndGtleSk6CiAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuY3VycmtleSA9PSB0Z3RrZXk6CiAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmN1cnJ2YWx1ZQotICAgICAgICAgICAgICAgICAgc2VsZi5jdXJydmFsdWUgPSBuZXh0KHNlbGYuaXQpICAgICMgRXhpdCBvbiBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJydmFsdWUgPSBuZXh0KHNlbGYuaXQpCisgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmtleSA9IHNlbGYua2V5ZnVuYyhzZWxmLmN1cnJ2YWx1ZSkKIAogCkBAIC00MTUsNyArNDI3LDcgQEAKICAgIHNwZWNpZmllZCBwb3NpdGlvbi4gIFVubGlrZSByZWd1bGFyIHNsaWNpbmcsIDpmdW5jOmBpc2xpY2VgIGRvZXMgbm90IHN1cHBvcnQKICAgIG5lZ2F0aXZlIHZhbHVlcyBmb3IgKnN0YXJ0KiwgKnN0b3AqLCBvciAqc3RlcCouICBDYW4gYmUgdXNlZCB0byBleHRyYWN0IHJlbGF0ZWQKICAgIGZpZWxkcyBmcm9tIGRhdGEgd2hlcmUgdGhlIGludGVybmFsIHN0cnVjdHVyZSBoYXMgYmVlbiBmbGF0dGVuZWQgKGZvciBleGFtcGxlLCBhCi0gICBtdWx0aS1saW5lIHJlcG9ydCBtYXkgbGlzdCBhIG5hbWUgZmllbGQgb24gZXZlcnkgdGhpcmQgbGluZSkuICBFcXVpdmFsZW50IHRvOjoKKyAgIG11bHRpLWxpbmUgcmVwb3J0IG1heSBsaXN0IGEgbmFtZSBmaWVsZCBvbiBldmVyeSB0aGlyZCBsaW5lKS4gIFJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgIGRlZiBpc2xpY2UoaXRlcmFibGUsICphcmdzKToKICAgICAgICAgICAjIGlzbGljZSgnQUJDREVGRycsIDIpIC0tPiBBIEIKQEAgLTQyNCw3ICs0MzYsMTAgQEAKICAgICAgICAgICAjIGlzbGljZSgnQUJDREVGRycsIDAsIE5vbmUsIDIpIC0tPiBBIEMgRSBHCiAgICAgICAgICAgcyA9IHNsaWNlKCphcmdzKQogICAgICAgICAgIGl0ID0gaXRlcihyYW5nZShzLnN0YXJ0IG9yIDAsIHMuc3RvcCBvciBzeXMubWF4c2l6ZSwgcy5zdGVwIG9yIDEpKQotICAgICAgICAgIG5leHRpID0gbmV4dChpdCkKKyAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgIG5leHRpID0gbmV4dChpdCkKKyAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgZm9yIGksIGVsZW1lbnQgaW4gZW51bWVyYXRlKGl0ZXJhYmxlKToKICAgICAgICAgICAgICAgaWYgaSA9PSBuZXh0aToKICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW1lbnQKQEAgLTQ1MCw3ICs0NjUsNyBAQAogICAgdmFsdWUuICBTbyBpZiB0aGUgaW5wdXQgZWxlbWVudHMgYXJlIHVuaXF1ZSwgdGhlcmUgd2lsbCBiZSBubyByZXBlYXQKICAgIHZhbHVlcyBpbiBlYWNoIHBlcm11dGF0aW9uLgogCi0gICBFcXVpdmFsZW50IHRvOjoKKyAgIFJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgICAgZGVmIHBlcm11dGF0aW9ucyhpdGVyYWJsZSwgcj1Ob25lKToKICAgICAgICAgICAgICMgcGVybXV0YXRpb25zKCdBQkNEJywgMikgLS0+IEFCIEFDIEFEIEJBIEJDIEJEIENBIENCIENEIERBIERCIERDCkBAIC00OTYsNyArNTExLDcgQEAKIAogICAgQ2FydGVzaWFuIHByb2R1Y3Qgb2YgaW5wdXQgaXRlcmFibGVzLgogCi0gICBFcXVpdmFsZW50IHRvIG5lc3RlZCBmb3ItbG9vcHMgaW4gYSBnZW5lcmF0b3IgZXhwcmVzc2lvbi4gRm9yIGV4YW1wbGUsCisgICBSb3VnaGx5IGVxdWl2YWxlbnQgdG8gbmVzdGVkIGZvci1sb29wcyBpbiBhIGdlbmVyYXRvciBleHByZXNzaW9uLiBGb3IgZXhhbXBsZSwKICAgIGBgcHJvZHVjdChBLCBCKWBgIHJldHVybnMgdGhlIHNhbWUgYXMgYGAoKHgseSkgZm9yIHggaW4gQSBmb3IgeSBpbiBCKWBgLgogCiAgICBUaGUgbmVzdGVkIGxvb3BzIGN5Y2xlIGxpa2UgYW4gb2RvbWV0ZXIgd2l0aCB0aGUgcmlnaHRtb3N0IGVsZW1lbnQgYWR2YW5jaW5nCkBAIC01MDgsNyArNTIzLDcgQEAKICAgIHJlcGV0aXRpb25zIHdpdGggdGhlIG9wdGlvbmFsICpyZXBlYXQqIGtleXdvcmQgYXJndW1lbnQuICBGb3IgZXhhbXBsZSwKICAgIGBgcHJvZHVjdChBLCByZXBlYXQ9NClgYCBtZWFucyB0aGUgc2FtZSBhcyBgYHByb2R1Y3QoQSwgQSwgQSwgQSlgYC4KIAotICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgY29kZSwgZXhjZXB0IHRoYXQgdGhlCisgICBUaGlzIGZ1bmN0aW9uIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGNvZGUsIGV4Y2VwdCB0aGF0IHRoZQogICAgYWN0dWFsIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGJ1aWxkIHVwIGludGVybWVkaWF0ZSByZXN1bHRzIGluIG1lbW9yeTo6CiAKICAgICAgICBkZWYgcHJvZHVjdCgqYXJncywgcmVwZWF0PTEpOgpAQCAtNTI3LDcgKzU0Miw5IEBACiAgICBNYWtlIGFuIGl0ZXJhdG9yIHRoYXQgcmV0dXJucyAqb2JqZWN0KiBvdmVyIGFuZCBvdmVyIGFnYWluLiBSdW5zIGluZGVmaW5pdGVseQogICAgdW5sZXNzIHRoZSAqdGltZXMqIGFyZ3VtZW50IGlzIHNwZWNpZmllZC4gVXNlZCBhcyBhcmd1bWVudCB0byA6ZnVuYzpgbWFwYCBmb3IKICAgIGludmFyaWFudCBwYXJhbWV0ZXJzIHRvIHRoZSBjYWxsZWQgZnVuY3Rpb24uICBBbHNvIHVzZWQgd2l0aCA6ZnVuYzpgemlwYCB0bwotICAgY3JlYXRlIGFuIGludmFyaWFudCBwYXJ0IG9mIGEgdHVwbGUgcmVjb3JkLiAgRXF1aXZhbGVudCB0bzo6CisgICBjcmVhdGUgYW4gaW52YXJpYW50IHBhcnQgb2YgYSB0dXBsZSByZWNvcmQuCisKKyAgIFJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgIGRlZiByZXBlYXQob2JqZWN0LCB0aW1lcz1Ob25lKToKICAgICAgICAgICAjIHJlcGVhdCgxMCwgMykgLS0+IDEwIDEwIDEwCkBAIC01NTAsNyArNTY3LDcgQEAKICAgIHRoZSBpdGVyYWJsZS4gIFVzZWQgaW5zdGVhZCBvZiA6ZnVuYzpgbWFwYCB3aGVuIGFyZ3VtZW50IHBhcmFtZXRlcnMgYXJlIGFscmVhZHkKICAgIGdyb3VwZWQgaW4gdHVwbGVzIGZyb20gYSBzaW5nbGUgaXRlcmFibGUgKHRoZSBkYXRhIGhhcyBiZWVuICJwcmUtemlwcGVkIikuICBUaGUKICAgIGRpZmZlcmVuY2UgYmV0d2VlbiA6ZnVuYzpgbWFwYCBhbmQgOmZ1bmM6YHN0YXJtYXBgIHBhcmFsbGVscyB0aGUgZGlzdGluY3Rpb24KLSAgIGJldHdlZW4gYGBmdW5jdGlvbihhLGIpYGAgYW5kIGBgZnVuY3Rpb24oKmMpYGAuIEVxdWl2YWxlbnQgdG86OgorICAgYmV0d2VlbiBgYGZ1bmN0aW9uKGEsYilgYCBhbmQgYGBmdW5jdGlvbigqYylgYC4gUm91Z2hseSBlcXVpdmFsZW50IHRvOjoKIAogICAgICAgZGVmIHN0YXJtYXAoZnVuY3Rpb24sIGl0ZXJhYmxlKToKICAgICAgICAgICAjIHN0YXJtYXAocG93LCBbKDIsNSksICgzLDIpLCAoMTAsMyldKSAtLT4gMzIgOSAxMDAwCkBAIC01NjEsNyArNTc4LDcgQEAKIC4uIGZ1bmN0aW9uOjogdGFrZXdoaWxlKHByZWRpY2F0ZSwgaXRlcmFibGUpCiAKICAgIE1ha2UgYW4gaXRlcmF0b3IgdGhhdCByZXR1cm5zIGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhYmxlIGFzIGxvbmcgYXMgdGhlCi0gICBwcmVkaWNhdGUgaXMgdHJ1ZS4gIEVxdWl2YWxlbnQgdG86OgorICAgcHJlZGljYXRlIGlzIHRydWUuICBSb3VnaGx5IGVxdWl2YWxlbnQgdG86OgogCiAgICAgICBkZWYgdGFrZXdoaWxlKHByZWRpY2F0ZSwgaXRlcmFibGUpOgogICAgICAgICAgICMgdGFrZXdoaWxlKGxhbWJkYSB4OiB4PDUsIFsxLDQsNiw0LDFdKSAtLT4gMSA0CkBAIC01NzQsNyArNTkxLDcgQEAKIAogLi4gZnVuY3Rpb246OiB0ZWUoaXRlcmFibGUsIG49MikKIAotICAgUmV0dXJuICpuKiBpbmRlcGVuZGVudCBpdGVyYXRvcnMgZnJvbSBhIHNpbmdsZSBpdGVyYWJsZS4gIEVxdWl2YWxlbnQgdG86OgorICAgUmV0dXJuICpuKiBpbmRlcGVuZGVudCBpdGVyYXRvcnMgZnJvbSBhIHNpbmdsZSBpdGVyYWJsZS4gIFJvdWdobHkgZXF1aXZhbGVudCB0bzo6CiAKICAgICAgICAgZGVmIHRlZShpdGVyYWJsZSwgbj0yKToKICAgICAgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKQEAgLTU4Miw3ICs1OTksMTAgQEAKICAgICAgICAgICAgIGRlZiBnZW4obXlkZXF1ZSk6CiAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG15ZGVxdWU6ICAgICAgICAgICAgICMgd2hlbiB0aGUgbG9jYWwgZGVxdWUgaXMgZW1wdHkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbCA9IG5leHQoaXQpICAgICAgICMgZmV0Y2ggYSBuZXcgdmFsdWUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsID0gbmV4dChpdCkgICAjIGZldGNoIGEgbmV3IHZhbHVlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZCBpbiBkZXF1ZXM6ICAgICAgICAjIGxvYWQgaXQgdG8gYWxsIHRoZSBkZXF1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmFwcGVuZChuZXd2YWwpCiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIG15ZGVxdWUucG9wbGVmdCgpCkBAIC02MDIsNyArNjIyLDcgQEAKIAogICAgTWFrZSBhbiBpdGVyYXRvciB0aGF0IGFnZ3JlZ2F0ZXMgZWxlbWVudHMgZnJvbSBlYWNoIG9mIHRoZSBpdGVyYWJsZXMuIElmIHRoZQogICAgaXRlcmFibGVzIGFyZSBvZiB1bmV2ZW4gbGVuZ3RoLCBtaXNzaW5nIHZhbHVlcyBhcmUgZmlsbGVkLWluIHdpdGggKmZpbGx2YWx1ZSouCi0gICBJdGVyYXRpb24gY29udGludWVzIHVudGlsIHRoZSBsb25nZXN0IGl0ZXJhYmxlIGlzIGV4aGF1c3RlZC4gIEVxdWl2YWxlbnQgdG86OgorICAgSXRlcmF0aW9uIGNvbnRpbnVlcyB1bnRpbCB0aGUgbG9uZ2VzdCBpdGVyYWJsZSBpcyBleGhhdXN0ZWQuICBSb3VnaGx5IGVxdWl2YWxlbnQgdG86OgogCiAgICAgICBjbGFzcyBaaXBFeGhhdXN0ZWQoRXhjZXB0aW9uKToKICAgICAgICAgICBwYXNzCkBAIC02NTcsNiArNjc3LDExIEBACiAgICAgICAgIlJldHVybiBmdW5jdGlvbigwKSwgZnVuY3Rpb24oMSksIC4uLiIKICAgICAgICByZXR1cm4gbWFwKGZ1bmN0aW9uLCBjb3VudChzdGFydCkpCiAKKyAgIGRlZiB0YWlsKG4sIGl0ZXJhYmxlKToKKyAgICAgICAiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGxhc3QgbiBpdGVtcyIKKyAgICAgICAjIHRhaWwoMywgJ0FCQ0RFRkcnKSAtLT4gRSBGIEcKKyAgICAgICByZXR1cm4gaXRlcihjb2xsZWN0aW9ucy5kZXF1ZShpdGVyYWJsZSwgbWF4bGVuPW4pKQorCiAgICBkZWYgY29uc3VtZShpdGVyYXRvciwgbik6CiAgICAgICAgIkFkdmFuY2UgdGhlIGl0ZXJhdG9yIG4tc3RlcHMgYWhlYWQuIElmIG4gaXMgbm9uZSwgY29uc3VtZSBlbnRpcmVseS4iCiAgICAgICAgIyBVc2UgZnVuY3Rpb25zIHRoYXQgY29uc3VtZSBpdGVyYXRvcnMgYXQgQyBzcGVlZC4KQEAgLTY3MSw2ICs2OTYsMTEgQEAKICAgICAgICAiUmV0dXJucyB0aGUgbnRoIGl0ZW0gb3IgYSBkZWZhdWx0IHZhbHVlIgogICAgICAgIHJldHVybiBuZXh0KGlzbGljZShpdGVyYWJsZSwgbiwgTm9uZSksIGRlZmF1bHQpCiAKKyAgIGRlZiBhbGxfZXF1YWwoaXRlcmFibGUpOgorICAgICAgICJSZXR1cm5zIFRydWUgaWYgYWxsIHRoZSBlbGVtZW50cyBhcmUgZXF1YWwgdG8gZWFjaCBvdGhlciIKKyAgICAgICBnID0gZ3JvdXBieShpdGVyYWJsZSkKKyAgICAgICByZXR1cm4gbmV4dChnLCBUcnVlKSBhbmQgbm90IG5leHQoZywgRmFsc2UpCisKICAgIGRlZiBxdWFudGlmeShpdGVyYWJsZSwgcHJlZD1ib29sKToKICAgICAgICAiQ291bnQgaG93IG1hbnkgdGltZXMgdGhlIHByZWRpY2F0ZSBpcyB0cnVlIgogICAgICAgIHJldHVybiBzdW0obWFwKHByZWQsIGl0ZXJhYmxlKSkKQEAgLTc3OSw3ICs4MDksNyBAQAogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgZmlyc3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICB5aWVsZCBmaXJzdCgpICAgICAgICAgICAgIyBGb3IgZGF0YWJhc2UgQVBJcyBuZWVkaW5nIGFuIGluaXRpYWwgY2FzdCB0byBkYi5maXJzdCgpCi0gICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICB5aWVsZCBmdW5jKCkKICAgICAgICBleGNlcHQgZXhjZXB0aW9uOgogICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9qc29uLnJzdCBiL0RvYy9saWJyYXJ5L2pzb24ucnN0CmluZGV4IGEwMWU2MzYuLmVlNTgyNjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2pzb24ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2pzb24ucnN0CkBAIC0zLDE0ICszLDE5IEBACiAKIC4uIG1vZHVsZTo6IGpzb24KICAgIDpzeW5vcHNpczogRW5jb2RlIGFuZCBkZWNvZGUgdGhlIEpTT04gZm9ybWF0LgorCiAuLiBtb2R1bGVhdXRob3I6OiBCb2IgSXBwb2xpdG8gPGJvYkByZWRpdmkuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEJvYiBJcHBvbGl0byA8Ym9iQHJlZGl2aS5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2pzb24vX19pbml0X18ucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIGBKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz5gXywgc3BlY2lmaWVkIGJ5CiA6cmZjOmA3MTU5YCAod2hpY2ggb2Jzb2xldGVzIDpyZmM6YDQ2MjdgKSBhbmQgYnkKIGBFQ01BLTQwNCA8aHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS00MDQuaHRtPmBfLAogaXMgYSBsaWdodHdlaWdodCBkYXRhIGludGVyY2hhbmdlIGZvcm1hdCBpbnNwaXJlZCBieQotYEphdmFTY3JpcHQgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmF2YVNjcmlwdD5gXyBvYmplY3QgbGl0ZXJhbCBzeW50YXgKK2BKYXZhU2NyaXB0IDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KYXZhU2NyaXB0PmBfIG9iamVjdCBsaXRlcmFsIHN5bnRheAogKGFsdGhvdWdoIGl0IGlzIG5vdCBhIHN0cmljdCBzdWJzZXQgb2YgSmF2YVNjcmlwdCBbI3JmYy1lcnJhdGFdXyApLgogCiA6bW9kOmBqc29uYCBleHBvc2VzIGFuIEFQSSBmYW1pbGlhciB0byB1c2VycyBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeQpAQCAtOTcsNyArMTAyLDcgQEAKIAogLi4gaGlnaGxpZ2h0OjogYmFzaAogCi1Vc2luZyBqc29uLnRvb2wgZnJvbSB0aGUgc2hlbGwgdG8gdmFsaWRhdGUgYW5kIHByZXR0eS1wcmludDo6CitVc2luZyA6bW9kOmBqc29uLnRvb2xgIGZyb20gdGhlIHNoZWxsIHRvIHZhbGlkYXRlIGFuZCBwcmV0dHktcHJpbnQ6OgogCiAgICAgJCBlY2hvICd7Impzb24iOiJvYmoifScgfCBweXRob24gLW0ganNvbi50b29sCiAgICAgewpAQCAtMTA2LDYgKzExMSw4IEBACiAgICAgJCBlY2hvICd7MS4yOjMuNH0nIHwgcHl0aG9uIC1tIGpzb24udG9vbAogICAgIEV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXM6IGxpbmUgMSBjb2x1bW4gMiAoY2hhciAxKQogCitTZWUgOnJlZjpganNvbi1jb21tYW5kbGluZWAgZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uCisKIC4uIGhpZ2hsaWdodDo6IHB5dGhvbjMKIAogLi4gbm90ZTo6CkBAIC0xMjgsNyArMTM1LDcgQEAKICAgIDp0ZXJtOmBmaWxlLWxpa2Ugb2JqZWN0YCkgdXNpbmcgdGhpcyA6cmVmOmBjb252ZXJzaW9uIHRhYmxlCiAgICA8cHktdG8tanNvbi10YWJsZT5gLgogCi0gICBJZiAqc2tpcGtleXMqIGlzIGBgVHJ1ZWBgIChkZWZhdWx0OiBgYEZhbHNlYGApLCB0aGVuIGRpY3Qga2V5cyB0aGF0IGFyZSBub3QKKyAgIElmICpza2lwa2V5cyogaXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSwgdGhlbiBkaWN0IGtleXMgdGhhdCBhcmUgbm90CiAgICBvZiBhIGJhc2ljIHR5cGUgKDpjbGFzczpgc3RyYCwgOmNsYXNzOmBpbnRgLCA6Y2xhc3M6YGZsb2F0YCwgOmNsYXNzOmBib29sYCwKICAgIGBgTm9uZWBgKSB3aWxsIGJlIHNraXBwZWQgaW5zdGVhZCBvZiByYWlzaW5nIGEgOmV4YzpgVHlwZUVycm9yYC4KIApAQCAtMTM2LDE4ICsxNDMsMTkgQEAKICAgIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMuIFRoZXJlZm9yZSwgYGBmcC53cml0ZSgpYGAgbXVzdCBzdXBwb3J0IDpjbGFzczpgc3RyYAogICAgaW5wdXQuCiAKLSAgIElmICplbnN1cmVfYXNjaWkqIGlzIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0bworICAgSWYgKmVuc3VyZV9hc2NpaSogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGUgb3V0cHV0IGlzIGd1YXJhbnRlZWQgdG8KICAgIGhhdmUgYWxsIGluY29taW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGVzY2FwZWQuICBJZiAqZW5zdXJlX2FzY2lpKiBpcwotICAgYGBGYWxzZWBgLCB0aGVzZSBjaGFyYWN0ZXJzIHdpbGwgYmUgb3V0cHV0IGFzLWlzLgorICAgZmFsc2UsIHRoZXNlIGNoYXJhY3RlcnMgd2lsbCBiZSBvdXRwdXQgYXMtaXMuCiAKLSAgIElmICpjaGVja19jaXJjdWxhciogaXMgYGBGYWxzZWBgIChkZWZhdWx0OiBgYFRydWVgYCksIHRoZW4gdGhlIGNpcmN1bGFyCisgICBJZiAqY2hlY2tfY2lyY3VsYXIqIGlzIGZhbHNlIChkZWZhdWx0OiBgYFRydWVgYCksIHRoZW4gdGhlIGNpcmN1bGFyCiAgICByZWZlcmVuY2UgY2hlY2sgZm9yIGNvbnRhaW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlCiAgICB3aWxsIHJlc3VsdCBpbiBhbiA6ZXhjOmBPdmVyZmxvd0Vycm9yYCAob3Igd29yc2UpLgogCi0gICBJZiAqYWxsb3dfbmFuKiBpcyBgYEZhbHNlYGAgKGRlZmF1bHQ6IGBgVHJ1ZWBgKSwgdGhlbiBpdCB3aWxsIGJlIGEKKyAgIElmICphbGxvd19uYW4qIGlzIGZhbHNlIChkZWZhdWx0OiBgYFRydWVgYCksIHRoZW4gaXQgd2lsbCBiZSBhCiAgICA6ZXhjOmBWYWx1ZUVycm9yYCB0byBzZXJpYWxpemUgb3V0IG9mIHJhbmdlIDpjbGFzczpgZmxvYXRgIHZhbHVlcyAoYGBuYW5gYCwKLSAgIGBgaW5mYGAsIGBgLWluZmBgKSBpbiBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uLCBpbnN0ZWFkIG9mCi0gICB1c2luZyB0aGUgSmF2YVNjcmlwdCBlcXVpdmFsZW50cyAoYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBgYC1JbmZpbml0eWBgKS4KKyAgIGBgaW5mYGAsIGBgLWluZmBgKSBpbiBzdHJpY3QgY29tcGxpYW5jZSBvZiB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uLgorICAgSWYgKmFsbG93X25hbiogaXMgdHJ1ZSwgdGhlaXIgSmF2YVNjcmlwdCBlcXVpdmFsZW50cyAoYGBOYU5gYCwKKyAgIGBgSW5maW5pdHlgYCwgYGAtSW5maW5pdHlgYCkgd2lsbCBiZSB1c2VkLgogCiAgICBJZiAqaW5kZW50KiBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG9yIHN0cmluZywgdGhlbiBKU09OIGFycmF5IGVsZW1lbnRzIGFuZAogICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiAgQW4gaW5kZW50IGxldmVsCkBAIC0xNjcsMTAgKzE3NSwxMiBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKICAgICAgIFVzZSBgYCgnLCcsICc6ICcpYGAgYXMgZGVmYXVsdCBpZiAqaW5kZW50KiBpcyBub3QgYGBOb25lYGAuCiAKLSAgICpkZWZhdWx0KG9iaikqIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24gb2YKLSAgICpvYmoqIG9yIHJhaXNlIDpleGM6YFR5cGVFcnJvcmAuICBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuCisgICBJZiBzcGVjaWZpZWQsICpkZWZhdWx0KiBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQKKyAgIGNhbid0IG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpTT04gZW5jb2RhYmxlIHZlcnNpb24gb2YKKyAgIHRoZSBvYmplY3Qgb3IgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgLiAgSWYgbm90IHNwZWNpZmllZCwgOmV4YzpgVHlwZUVycm9yYAorICAgaXMgcmFpc2VkLgogCi0gICBJZiAqc29ydF9rZXlzKiBpcyBgYFRydWVgYCAoZGVmYXVsdDogYGBGYWxzZWBgKSwgdGhlbiB0aGUgb3V0cHV0IG9mCisgICBJZiAqc29ydF9rZXlzKiBpcyB0cnVlIChkZWZhdWx0OiBgYEZhbHNlYGApLCB0aGVuIHRoZSBvdXRwdXQgb2YKICAgIGRpY3Rpb25hcmllcyB3aWxsIGJlIHNvcnRlZCBieSBrZXkuCiAKICAgIFRvIHVzZSBhIGN1c3RvbSA6Y2xhc3M6YEpTT05FbmNvZGVyYCBzdWJjbGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCkBAIC0yNDgsNyArMjU4LDcgQEAKICAgIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MuCiAKICAgIElmIHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBpcyBub3QgYSB2YWxpZCBKU09OIGRvY3VtZW50LCBhCi0gICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KKyAgIDpleGM6YEpTT05EZWNvZGVFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAKIC4uIGZ1bmN0aW9uOjogbG9hZHMocywgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsIHBhcnNlX2Zsb2F0PU5vbmUsIHBhcnNlX2ludD1Ob25lLCBwYXJzZV9jb25zdGFudD1Ob25lLCBvYmplY3RfcGFpcnNfaG9vaz1Ob25lLCAqKmt3KQogCkBAIC0yNTksNyArMjY5LDcgQEAKICAgICplbmNvZGluZyogd2hpY2ggaXMgaWdub3JlZCBhbmQgZGVwcmVjYXRlZC4KIAogICAgSWYgdGhlIGRhdGEgYmVpbmcgZGVzZXJpYWxpemVkIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQsIGEKLSAgIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorICAgOmV4YzpgSlNPTkRlY29kZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogRW5jb2RlcnMgYW5kIERlY29kZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMyNiwxOSArMzM2LDIyIEBACiAgICBgYCdmYWxzZSdgYC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGludmFsaWQgSlNPTiBudW1iZXJzCiAgICBhcmUgZW5jb3VudGVyZWQuCiAKLSAgIElmICpzdHJpY3QqIGlzIGBgRmFsc2VgYCAoYGBUcnVlYGAgaXMgdGhlIGRlZmF1bHQpLCB0aGVuIGNvbnRyb2wgY2hhcmFjdGVycworICAgSWYgKnN0cmljdCogaXMgZmFsc2UgKGBgVHJ1ZWBgIGlzIHRoZSBkZWZhdWx0KSwgdGhlbiBjb250cm9sIGNoYXJhY3RlcnMKICAgIHdpbGwgYmUgYWxsb3dlZCBpbnNpZGUgc3RyaW5ncy4gIENvbnRyb2wgY2hhcmFjdGVycyBpbiB0aGlzIGNvbnRleHQgYXJlCiAgICB0aG9zZSB3aXRoIGNoYXJhY3RlciBjb2RlcyBpbiB0aGUgMC0zMSByYW5nZSwgaW5jbHVkaW5nIGBgJ1x0J2BgICh0YWIpLAogICAgYGAnXG4nYGAsIGBgJ1xyJ2BgIGFuZCBgYCdcMCdgYC4KIAogICAgSWYgdGhlIGRhdGEgYmVpbmcgZGVzZXJpYWxpemVkIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQsIGEKLSAgIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorICAgOmV4YzpgSlNPTkRlY29kZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogICAgLi4gbWV0aG9kOjogZGVjb2RlKHMpCiAKICAgICAgIFJldHVybiB0aGUgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mICpzKiAoYSA6Y2xhc3M6YHN0cmAgaW5zdGFuY2UKICAgICAgIGNvbnRhaW5pbmcgYSBKU09OIGRvY3VtZW50KS4KIAorICAgICAgOmV4YzpgSlNPTkRlY29kZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgZ2l2ZW4gSlNPTiBkb2N1bWVudCBpcyBub3QKKyAgICAgIHZhbGlkLgorCiAgICAuLiBtZXRob2Q6OiByYXdfZGVjb2RlKHMpCiAKICAgICAgIERlY29kZSBhIEpTT04gZG9jdW1lbnQgZnJvbSAqcyogKGEgOmNsYXNzOmBzdHJgIGJlZ2lubmluZyB3aXRoIGEKQEAgLTM4MywyNiArMzk2LDI2IEBACiAgICBmb3IgYGBvYGAgaWYgcG9zc2libGUsIG90aGVyd2lzZSBpdCBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcyBpbXBsZW1lbnRhdGlvbgogICAgKHRvIHJhaXNlIDpleGM6YFR5cGVFcnJvcmApLgogCi0gICBJZiAqc2tpcGtleXMqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpLCB0aGVuIGl0IGlzIGEgOmV4YzpgVHlwZUVycm9yYCB0bworICAgSWYgKnNraXBrZXlzKiBpcyBmYWxzZSAodGhlIGRlZmF1bHQpLCB0aGVuIGl0IGlzIGEgOmV4YzpgVHlwZUVycm9yYCB0bwogICAgYXR0ZW1wdCBlbmNvZGluZyBvZiBrZXlzIHRoYXQgYXJlIG5vdCBzdHIsIGludCwgZmxvYXQgb3IgTm9uZS4gIElmCi0gICAqc2tpcGtleXMqIGlzIGBgVHJ1ZWBgLCBzdWNoIGl0ZW1zIGFyZSBzaW1wbHkgc2tpcHBlZC4KKyAgICpza2lwa2V5cyogaXMgdHJ1ZSwgc3VjaCBpdGVtcyBhcmUgc2ltcGx5IHNraXBwZWQuCiAKLSAgIElmICplbnN1cmVfYXNjaWkqIGlzIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIHRoZSBvdXRwdXQgaXMgZ3VhcmFudGVlZCB0bworICAgSWYgKmVuc3VyZV9hc2NpaSogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGUgb3V0cHV0IGlzIGd1YXJhbnRlZWQgdG8KICAgIGhhdmUgYWxsIGluY29taW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGVzY2FwZWQuICBJZiAqZW5zdXJlX2FzY2lpKiBpcwotICAgYGBGYWxzZWBgLCB0aGVzZSBjaGFyYWN0ZXJzIHdpbGwgYmUgb3V0cHV0IGFzLWlzLgorICAgZmFsc2UsIHRoZXNlIGNoYXJhY3RlcnMgd2lsbCBiZSBvdXRwdXQgYXMtaXMuCiAKLSAgIElmICpjaGVja19jaXJjdWxhciogaXMgYGBUcnVlYGAgKHRoZSBkZWZhdWx0KSwgdGhlbiBsaXN0cywgZGljdHMsIGFuZCBjdXN0b20KKyAgIElmICpjaGVja19jaXJjdWxhciogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGVuIGxpc3RzLCBkaWN0cywgYW5kIGN1c3RvbQogICAgZW5jb2RlZCBvYmplY3RzIHdpbGwgYmUgY2hlY2tlZCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBkdXJpbmcgZW5jb2RpbmcgdG8KICAgIHByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uICh3aGljaCB3b3VsZCBjYXVzZSBhbiA6ZXhjOmBPdmVyZmxvd0Vycm9yYCkuCiAgICBPdGhlcndpc2UsIG5vIHN1Y2ggY2hlY2sgdGFrZXMgcGxhY2UuCiAKLSAgIElmICphbGxvd19uYW4qIGlzIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIHRoZW4gYGBOYU5gYCwgYGBJbmZpbml0eWBgLCBhbmQKKyAgIElmICphbGxvd19uYW4qIGlzIHRydWUgKHRoZSBkZWZhdWx0KSwgdGhlbiBgYE5hTmBgLCBgYEluZmluaXR5YGAsIGFuZAogICAgYGAtSW5maW5pdHlgYCB3aWxsIGJlIGVuY29kZWQgYXMgc3VjaC4gIFRoaXMgYmVoYXZpb3IgaXMgbm90IEpTT04KICAgIHNwZWNpZmljYXRpb24gY29tcGxpYW50LCBidXQgaXMgY29uc2lzdGVudCB3aXRoIG1vc3QgSmF2YVNjcmlwdCBiYXNlZAogICAgZW5jb2RlcnMgYW5kIGRlY29kZXJzLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGEgOmV4YzpgVmFsdWVFcnJvcmAgdG8gZW5jb2RlCiAgICBzdWNoIGZsb2F0cy4KIAotICAgSWYgKnNvcnRfa2V5cyogaXMgYGBUcnVlYGAgKGRlZmF1bHQgYGBGYWxzZWBgKSwgdGhlbiB0aGUgb3V0cHV0IG9mIGRpY3Rpb25hcmllcworICAgSWYgKnNvcnRfa2V5cyogaXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSwgdGhlbiB0aGUgb3V0cHV0IG9mIGRpY3Rpb25hcmllcwogICAgd2lsbCBiZSBzb3J0ZWQgYnkga2V5OyB0aGlzIGlzIHVzZWZ1bCBmb3IgcmVncmVzc2lvbiB0ZXN0cyB0byBlbnN1cmUgdGhhdAogICAgSlNPTiBzZXJpYWxpemF0aW9ucyBjYW4gYmUgY29tcGFyZWQgb24gYSBkYXktdG8tZGF5IGJhc2lzLgogCkBAIC00MjQsOSArNDM3LDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAogICAgICAgVXNlIGBgKCcsJywgJzogJylgYCBhcyBkZWZhdWx0IGlmICppbmRlbnQqIGlzIG5vdCBgYE5vbmVgYC4KIAotICAgSWYgc3BlY2lmaWVkLCAqZGVmYXVsdCogaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgY2FuJ3QKLSAgIG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpTT04gZW5jb2RhYmxlIHZlcnNpb24gb2YgdGhlCi0gICBvYmplY3Qgb3IgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgLgorICAgSWYgc3BlY2lmaWVkLCAqZGVmYXVsdCogc2hvdWxkIGJlIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0CisgICBjYW4ndCBvdGhlcndpc2UgYmUgc2VyaWFsaXplZC4gIEl0IHNob3VsZCByZXR1cm4gYSBKU09OIGVuY29kYWJsZSB2ZXJzaW9uIG9mCisgICB0aGUgb2JqZWN0IG9yIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYC4gIElmIG5vdCBzcGVjaWZpZWQsIDpleGM6YFR5cGVFcnJvcmAKKyAgIGlzIHJhaXNlZC4KIAogCiAgICAuLiBtZXRob2Q6OiBkZWZhdWx0KG8pCkBAIC00NjcsNiArNDgxLDM2IEBACiAgICAgICAgICAgICAgICAgbXlzb2NrZXQud3JpdGUoY2h1bmspCiAKIAorRXhjZXB0aW9ucworLS0tLS0tLS0tLQorCisuLiBleGNlcHRpb246OiBKU09ORGVjb2RlRXJyb3IobXNnLCBkb2MsIHBvcywgZW5kPU5vbmUpCisKKyAgICBTdWJjbGFzcyBvZiA6ZXhjOmBWYWx1ZUVycm9yYCB3aXRoIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBhdHRyaWJ1dGVzOgorCisgICAgLi4gYXR0cmlidXRlOjogbXNnCisKKyAgICAgICAgVGhlIHVuZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UuCisKKyAgICAuLiBhdHRyaWJ1dGU6OiBkb2MKKworICAgICAgICBUaGUgSlNPTiBkb2N1bWVudCBiZWluZyBwYXJzZWQuCisKKyAgICAuLiBhdHRyaWJ1dGU6OiBwb3MKKworICAgICAgICBUaGUgc3RhcnQgaW5kZXggb2YgKmRvYyogd2hlcmUgcGFyc2luZyBmYWlsZWQuCisKKyAgICAuLiBhdHRyaWJ1dGU6OiBsaW5lbm8KKworICAgICAgICBUaGUgbGluZSBjb3JyZXNwb25kaW5nIHRvICpwb3MqLgorCisgICAgLi4gYXR0cmlidXRlOjogY29sbm8KKworICAgICAgICBUaGUgY29sdW1uIGNvcnJlc3BvbmRpbmcgdG8gKnBvcyouCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKIFN0YW5kYXJkIENvbXBsaWFuY2UgYW5kIEludGVyb3BlcmFiaWxpdHkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTg4LDExICs2MzIsNzkgQEAKIHdoZW4gc2VyaWFsaXppbmcgaW5zdGFuY2VzIG9mICJleG90aWMiIG51bWVyaWNhbCB0eXBlcyBzdWNoIGFzCiA6Y2xhc3M6YGRlY2ltYWwuRGVjaW1hbGAuCiAKKy4uIGhpZ2hsaWdodDo6IGJhc2gKKworLi4gX2pzb24tY29tbWFuZGxpbmU6CisKK0NvbW1hbmQgTGluZSBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbW9kdWxlOjoganNvbi50b29sCisgICAgOnN5bm9wc2lzOiBBIGNvbW1hbmQgbGluZSB0byB2YWxpZGF0ZSBhbmQgcHJldHR5LXByaW50IEpTT04uCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2pzb24vdG9vbC5weWAKKworLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YGpzb24udG9vbGAgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gdmFsaWRhdGUKK2FuZCBwcmV0dHktcHJpbnQgSlNPTiBvYmplY3RzLgorCitJZiB0aGUgb3B0aW9uYWwgYGBpbmZpbGVgYCBhbmQgYGBvdXRmaWxlYGAgYXJndW1lbnRzIGFyZSBub3QKK3NwZWNpZmllZCwgOmF0dHI6YHN5cy5zdGRpbmAgYW5kIDphdHRyOmBzeXMuc3Rkb3V0YCB3aWxsIGJlIHVzZWQgcmVzcGVjdGl2ZWx5OjoKKworICAgICQgZWNobyAneyJqc29uIjogIm9iaiJ9JyB8IHB5dGhvbiAtbSBqc29uLnRvb2wKKyAgICB7CisgICAgICAgICJqc29uIjogIm9iaiIKKyAgICB9CisgICAgJCBlY2hvICd7MS4yOjMuNH0nIHwgcHl0aG9uIC1tIGpzb24udG9vbAorICAgIEV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXM6IGxpbmUgMSBjb2x1bW4gMiAoY2hhciAxKQorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgVGhlIG91dHB1dCBpcyBub3cgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGlucHV0LiBVc2UgdGhlCisgICA6b3B0aW9uOmAtLXNvcnQta2V5c2Agb3B0aW9uIHRvIHNvcnQgdGhlIG91dHB1dCBvZiBkaWN0aW9uYXJpZXMKKyAgIGFscGhhYmV0aWNhbGx5IGJ5IGtleS4KKworQ29tbWFuZCBsaW5lIG9wdGlvbnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eCisKKy4uIGNtZG9wdGlvbjo6IGluZmlsZQorCisgICBUaGUgSlNPTiBmaWxlIHRvIGJlIHZhbGlkYXRlZCBvciBwcmV0dHktcHJpbnRlZDo6CisKKyAgICAgICQgcHl0aG9uIC1tIGpzb24udG9vbCBtcF9maWxtcy5qc29uCisgICAgICBbCisgICAgICAgICAgeworICAgICAgICAgICAgICAidGl0bGUiOiAiQW5kIE5vdyBmb3IgU29tZXRoaW5nIENvbXBsZXRlbHkgRGlmZmVyZW50IiwKKyAgICAgICAgICAgICAgInllYXIiOiAxOTcxCisgICAgICAgICAgfSwKKyAgICAgICAgICB7CisgICAgICAgICAgICAgICJ0aXRsZSI6ICJNb250eSBQeXRob24gYW5kIHRoZSBIb2x5IEdyYWlsIiwKKyAgICAgICAgICAgICAgInllYXIiOiAxOTc1CisgICAgICAgICAgfQorICAgICAgXQorCisgICBJZiAqaW5maWxlKiBpcyBub3Qgc3BlY2lmaWVkLCByZWFkIGZyb20gOmF0dHI6YHN5cy5zdGRpbmAuCisKKy4uIGNtZG9wdGlvbjo6IG91dGZpbGUKKworICAgV3JpdGUgdGhlIG91dHB1dCBvZiB0aGUgKmluZmlsZSogdG8gdGhlIGdpdmVuICpvdXRmaWxlKi4gT3RoZXJ3aXNlLCB3cml0ZSBpdAorICAgdG8gOmF0dHI6YHN5cy5zdGRvdXRgLgorCisuLiBjbWRvcHRpb246OiAtLXNvcnQta2V5cworCisgICBTb3J0IHRoZSBvdXRwdXQgb2YgZGljdGlvbmFyaWVzIGFscGhhYmV0aWNhbGx5IGJ5IGtleS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKy4uIGNtZG9wdGlvbjo6IC1oLCAtLWhlbHAKKworICAgU2hvdyB0aGUgaGVscCBtZXNzYWdlLgorCiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCiAuLiBbI3JmYy1lcnJhdGFdIEFzIG5vdGVkIGluIGB0aGUgZXJyYXRhIGZvciBSRkMgNzE1OQotICAgPGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvZXJyYXRhX3NlYXJjaC5waHA/cmZjPTcxNTk+YF8sCisgICA8aHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvZXJyYXRhX3NlYXJjaC5waHA/cmZjPTcxNTk+YF8sCiAgICBKU09OIHBlcm1pdHMgbGl0ZXJhbCBVKzIwMjggKExJTkUgU0VQQVJBVE9SKSBhbmQKICAgIFUrMjAyOSAoUEFSQUdSQVBIIFNFUEFSQVRPUikgY2hhcmFjdGVycyBpbiBzdHJpbmdzLCB3aGVyZWFzIEphdmFTY3JpcHQKICAgIChhcyBvZiBFQ01BU2NyaXB0IEVkaXRpb24gNS4xKSBkb2VzIG5vdC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2xpbmVjYWNoZS5yc3QgYi9Eb2MvbGlicmFyeS9saW5lY2FjaGUucnN0CmluZGV4IGYxOGIxY2QuLmFlM2RlOWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xpbmVjYWNoZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogbGluZWNhY2hlCiAgICA6c3lub3BzaXM6IFRoaXMgbW9kdWxlIHByb3ZpZGVzIHJhbmRvbSBhY2Nlc3MgdG8gaW5kaXZpZHVhbCBsaW5lcyBmcm9tIHRleHQgZmlsZXMuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBNb3NoZSBaYWRrYSA8bW9zaGV6QHphZGthLnNpdGUuY28uaWw+CiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2xpbmVjYWNoZS5weWAKQEAgLTQ3LDYgKzQ4LDE0IEBACiAgICBjaGFuZ2VkIG9uIGRpc2ssIGFuZCB5b3UgcmVxdWlyZSB0aGUgdXBkYXRlZCB2ZXJzaW9uLiAgSWYgKmZpbGVuYW1lKiBpcyBvbWl0dGVkLAogICAgaXQgd2lsbCBjaGVjayBhbGwgdGhlIGVudHJpZXMgaW4gdGhlIGNhY2hlLgogCisuLiBmdW5jdGlvbjo6IGxhenljYWNoZShmaWxlbmFtZSwgbW9kdWxlX2dsb2JhbHMpCisKKyAgIENhcHR1cmUgZW5vdWdoIGRldGFpbCBhYm91dCBhIG5vbi1maWxlLWJhc2VkIG1vZHVsZSB0byBwZXJtaXQgZ2V0dGluZyBpdHMKKyAgIGxpbmVzIGxhdGVyIHZpYSA6ZnVuYzpgZ2V0bGluZWAgZXZlbiBpZiAqbW9kdWxlX2dsb2JhbHMqIGlzIE5vbmUgaW4gdGhlIGxhdGVyCisgICBjYWxsLiBUaGlzIGF2b2lkcyBkb2luZyBJL08gdW50aWwgYSBsaW5lIGlzIGFjdHVhbGx5IG5lZWRlZCwgd2l0aG91dCBoYXZpbmcKKyAgIHRvIGNhcnJ5IHRoZSBtb2R1bGUgZ2xvYmFscyBhcm91bmQgaW5kZWZpbml0ZWx5LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKIAogRXhhbXBsZTo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2xvY2FsZS5yc3QgYi9Eb2MvbGlicmFyeS9sb2NhbGUucnN0CmluZGV4IGIxNGM1NTFiLi41YWFmNGEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2NhbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvY2FsZS5yc3QKQEAgLTMsOSArMywxMyBAQAogCiAuLiBtb2R1bGU6OiBsb2NhbGUKICAgIDpzeW5vcHNpczogSW50ZXJuYXRpb25hbGl6YXRpb24gc2VydmljZXMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IE1hcnRpbiB2b24gTMO2d2lzIDxtYXJ0aW5Adi5sb2V3aXMuZGU+CiAuLiBzZWN0aW9uYXV0aG9yOjogTWFydGluIHZvbiBMw7Z3aXMgPG1hcnRpbkB2LmxvZXdpcy5kZT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvbG9jYWxlLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgbG9jYWxlYCBtb2R1bGUgb3BlbnMgYWNjZXNzIHRvIHRoZSBQT1NJWCBsb2NhbGUgZGF0YWJhc2UgYW5kCiBmdW5jdGlvbmFsaXR5LiBUaGUgUE9TSVggbG9jYWxlIG1lY2hhbmlzbSBhbGxvd3MgcHJvZ3JhbW1lcnMgdG8gZGVhbCB3aXRoCkBAIC0zODcsNiArMzkxLDE0IEBACiAgICBgYHN0cihmbG9hdClgYCwgYnV0IHRha2VzIHRoZSBkZWNpbWFsIHBvaW50IGludG8gYWNjb3VudC4KIAogCisuLiBmdW5jdGlvbjo6IGRlbG9jYWxpemUoc3RyaW5nKQorCisgICAgQ29udmVydHMgYSBzdHJpbmcgaW50byBhIG5vcm1hbGl6ZWQgbnVtYmVyIHN0cmluZywgZm9sbG93aW5nIHRoZQorICAgIDpjb25zdDpgTENfTlVNRVJJQ2Agc2V0dGluZ3MuCisKKyAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBmdW5jdGlvbjo6IGF0b2Yoc3RyaW5nKQogCiAgICBDb252ZXJ0cyBhIHN0cmluZyB0byBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgZm9sbG93aW5nIHRoZSA6Y29uc3Q6YExDX05VTUVSSUNgCkBAIC00NTksMTMgKzQ3MSwxMyBAQAogRXhhbXBsZTo6CiAKICAgID4+PiBpbXBvcnQgbG9jYWxlCi0gICA+Pj4gbG9jID0gbG9jYWxlLmdldGxvY2FsZSgpICMgZ2V0IGN1cnJlbnQgbG9jYWxlCisgICA+Pj4gbG9jID0gbG9jYWxlLmdldGxvY2FsZSgpICAjIGdldCBjdXJyZW50IGxvY2FsZQogICAgIyB1c2UgR2VybWFuIGxvY2FsZTsgbmFtZSBtaWdodCB2YXJ5IHdpdGggcGxhdGZvcm0KICAgID4+PiBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsICdkZV9ERScpCi0gICA+Pj4gbG9jYWxlLnN0cmNvbGwoJ2ZceGU0bicsICdmb28nKSAjIGNvbXBhcmUgYSBzdHJpbmcgY29udGFpbmluZyBhbiB1bWxhdXQKLSAgID4+PiBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsICcnKSAjIHVzZSB1c2VyJ3MgcHJlZmVycmVkIGxvY2FsZQotICAgPj4+IGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgJ0MnKSAjIHVzZSBkZWZhdWx0IChDKSBsb2NhbGUKLSAgID4+PiBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsIGxvYykgIyByZXN0b3JlIHNhdmVkIGxvY2FsZQorICAgPj4+IGxvY2FsZS5zdHJjb2xsKCdmXHhlNG4nLCAnZm9vJykgICMgY29tcGFyZSBhIHN0cmluZyBjb250YWluaW5nIGFuIHVtbGF1dAorICAgPj4+IGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgJycpICAgIyB1c2UgdXNlcidzIHByZWZlcnJlZCBsb2NhbGUKKyAgID4+PiBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsICdDJykgICMgdXNlIGRlZmF1bHQgKEMpIGxvY2FsZQorICAgPj4+IGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgbG9jKSAgIyByZXN0b3JlIHNhdmVkIGxvY2FsZQogCiAKIEJhY2tncm91bmQsIGRldGFpbHMsIGhpbnRzLCB0aXBzIGFuZCBjYXZlYXRzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKaW5kZXggZmQ2YTQ3Ny4uYjRjOWJjMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdApAQCAtNCwxMCArNCwxMSBAQAogLi4gbW9kdWxlOjogbG9nZ2luZy5jb25maWcKICAgIDpzeW5vcHNpczogQ29uZmlndXJhdGlvbiBvZiB0aGUgbG9nZ2luZyBtb2R1bGUuCiAKLQogLi4gbW9kdWxlYXV0aG9yOjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9sb2dnaW5nL2NvbmZpZy5weWAKKwogLi4gc2lkZWJhcjo6IEltcG9ydGFudAogCiAgICBUaGlzIHBhZ2UgY29udGFpbnMgb25seSByZWZlcmVuY2UgaW5mb3JtYXRpb24uIEZvciB0dXRvcmlhbHMsCkBAIC0xNyw4ICsxOCw2IEBACiAgICAqIDpyZWY6YEFkdmFuY2VkIFR1dG9yaWFsIDxsb2dnaW5nLWFkdmFuY2VkLXR1dG9yaWFsPmAKICAgICogOnJlZjpgTG9nZ2luZyBDb29rYm9vayA8bG9nZ2luZy1jb29rYm9vaz5gCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2xvZ2dpbmcvY29uZmlnLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBBUEkgZm9yIGNvbmZpZ3VyaW5nIHRoZSBsb2dnaW5nIG1vZHVsZS4KQEAgLTI0NCw3ICsyNDMsOSBAQAogICAgIGhhbmRsZXIuCiAKICAgQWxsICpvdGhlcioga2V5cyBhcmUgcGFzc2VkIHRocm91Z2ggYXMga2V5d29yZCBhcmd1bWVudHMgdG8gdGhlCi0gIGhhbmRsZXIncyBjb25zdHJ1Y3Rvci4gIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgc25pcHBldDo6CisgIGhhbmRsZXIncyBjb25zdHJ1Y3Rvci4gIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgc25pcHBldDoKKworICAuLiBjb2RlLWJsb2NrOjogeWFtbAogCiAgICAgICBoYW5kbGVyczoKICAgICAgICAgY29uc29sZToKQEAgLTM1Myw3ICszNTQsOSBAQAogY29uZmlndXJhdGlvbiB0byBpbmRpY2F0ZSB0aGF0IGEgY29ubmVjdGlvbiBleGlzdHMgYmV0d2VlbiB0aGUgc291cmNlCiBhbmQgdGhlIGRlc3RpbmF0aW9uIG9iamVjdCB3aXRoIHRoYXQgaWQuCiAKLVNvLCBmb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBZQU1MIHNuaXBwZXQ6OgorU28sIGZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIFlBTUwgc25pcHBldDoKKworLi4gY29kZS1ibG9jazo6IHlhbWwKIAogICAgIGZvcm1hdHRlcnM6CiAgICAgICBicmllZjoKQEAgLTQxMCw3ICs0MTMsOSBAQAogY29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IGFuZCB3aGljaCByZXR1cm5zIHRoZSBpbnN0YW50aWF0ZWQgb2JqZWN0LgogVGhpcyBpcyBzaWduYWxsZWQgYnkgYW4gYWJzb2x1dGUgaW1wb3J0IHBhdGggdG8gdGhlIGZhY3RvcnkgYmVpbmcKIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBzcGVjaWFsIGtleSBgYCcoKSdgYC4gIEhlcmUncyBhIGNvbmNyZXRlCi1leGFtcGxlOjoKK2V4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiB5YW1sCiAKICAgICBmb3JtYXR0ZXJzOgogICAgICAgYnJpZWY6CkBAIC02MjcsNyArNjMyLDkgQEAKICAgIDpmdW5jOmBkaWN0Q29uZmlnYCwgc28gaXQncyB3b3J0aCBjb25zaWRlcmluZyB0cmFuc2l0aW9uaW5nIHRvIHRoaXMgbmV3ZXIKICAgIEFQSSB3aGVuIGl0J3MgY29udmVuaWVudCB0byBkbyBzby4KIAotRXhhbXBsZXMgb2YgdGhlc2Ugc2VjdGlvbnMgaW4gdGhlIGZpbGUgYXJlIGdpdmVuIGJlbG93LiA6OgorRXhhbXBsZXMgb2YgdGhlc2Ugc2VjdGlvbnMgaW4gdGhlIGZpbGUgYXJlIGdpdmVuIGJlbG93LgorCisuLiBjb2RlLWJsb2NrOjogaW5pCiAKICAgIFtsb2dnZXJzXQogICAga2V5cz1yb290LGxvZzAyLGxvZzAzLGxvZzA0LGxvZzA1LGxvZzA2LGxvZzA3CkBAIC02MzksNyArNjQ2LDkgQEAKICAgIGtleXM9Zm9ybTAxLGZvcm0wMixmb3JtMDMsZm9ybTA0LGZvcm0wNSxmb3JtMDYsZm9ybTA3LGZvcm0wOCxmb3JtMDkKIAogVGhlIHJvb3QgbG9nZ2VyIG11c3Qgc3BlY2lmeSBhIGxldmVsIGFuZCBhIGxpc3Qgb2YgaGFuZGxlcnMuIEFuIGV4YW1wbGUgb2YgYQotcm9vdCBsb2dnZXIgc2VjdGlvbiBpcyBnaXZlbiBiZWxvdy4gOjoKK3Jvb3QgbG9nZ2VyIHNlY3Rpb24gaXMgZ2l2ZW4gYmVsb3cuCisKKy4uIGNvZGUtYmxvY2s6OiBpbmkKIAogICAgW2xvZ2dlcl9yb290XQogICAgbGV2ZWw9Tk9UU0VUCkBAIC02NTYsNyArNjY1LDkgQEAKIGZpbGUuCiAKIEZvciBsb2dnZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QgbG9nZ2VyLCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQuCi1UaGlzIGlzIGlsbHVzdHJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZS4gOjoKK1RoaXMgaXMgaWxsdXN0cmF0ZWQgYnkgdGhlIGZvbGxvd2luZyBleGFtcGxlLgorCisuLiBjb2RlLWJsb2NrOjogaW5pCiAKICAgIFtsb2dnZXJfcGFyc2VyXQogICAgbGV2ZWw9REVCVUcKQEAgLTY3NCw3ICs2ODUsOCBAQAogc2F5IHRoZSBuYW1lIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgbG9nZ2VyLgogCiBTZWN0aW9ucyB3aGljaCBzcGVjaWZ5IGhhbmRsZXIgY29uZmlndXJhdGlvbiBhcmUgZXhlbXBsaWZpZWQgYnkgdGhlIGZvbGxvd2luZy4KLTo6CisKKy4uIGNvZGUtYmxvY2s6OiBpbmkKIAogICAgW2hhbmRsZXJfaGFuZDAxXQogICAgY2xhc3M9U3RyZWFtSGFuZGxlcgpAQCAtNjk0LDcgKzcwNiw5IEBACiBUaGUgYGBhcmdzYGAgZW50cnksIHdoZW4gOmZ1bmM6YGV2YWxgXCB1YXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYGBsb2dnaW5nYGAKIHBhY2thZ2UncyBuYW1lc3BhY2UsIGlzIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyB0byB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSBoYW5kbGVyCiBjbGFzcy4gUmVmZXIgdG8gdGhlIGNvbnN0cnVjdG9ycyBmb3IgdGhlIHJlbGV2YW50IGhhbmRsZXJzLCBvciB0byB0aGUgZXhhbXBsZXMKLWJlbG93LCB0byBzZWUgaG93IHR5cGljYWwgZW50cmllcyBhcmUgY29uc3RydWN0ZWQuIDo6CitiZWxvdywgdG8gc2VlIGhvdyB0eXBpY2FsIGVudHJpZXMgYXJlIGNvbnN0cnVjdGVkLgorCisuLiBjb2RlLWJsb2NrOjogaW5pCiAKICAgIFtoYW5kbGVyX2hhbmQwMl0KICAgIGNsYXNzPUZpbGVIYW5kbGVyCkBAIC03NDUsNyArNzU5LDkgQEAKICAgIGZvcm1hdHRlcj1mb3JtMDkKICAgIGFyZ3M9KCdsb2NhbGhvc3Q6OTAyMicsICcvbG9nJywgJ0dFVCcpCiAKLVNlY3Rpb25zIHdoaWNoIHNwZWNpZnkgZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gYXJlIHR5cGlmaWVkIGJ5IHRoZSBmb2xsb3dpbmcuIDo6CitTZWN0aW9ucyB3aGljaCBzcGVjaWZ5IGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGFyZSB0eXBpZmllZCBieSB0aGUgZm9sbG93aW5nLgorCisuLiBjb2RlLWJsb2NrOjogaW5pCiAKICAgIFtmb3JtYXR0ZXJfZm9ybTAxXQogICAgZm9ybWF0PUYxICUoYXNjdGltZSlzICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMKQEAgLTc4MSw1ICs3OTcsMyBAQAogCiAgICBNb2R1bGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AKICAgICAgIFVzZWZ1bCBoYW5kbGVycyBpbmNsdWRlZCB3aXRoIHRoZSBsb2dnaW5nIG1vZHVsZS4KLQotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CmluZGV4IDllNTU4ZTUuLjg1NWFkYWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CkBAIC00LDEwICs0LDExIEBACiAuLiBtb2R1bGU6OiBsb2dnaW5nLmhhbmRsZXJzCiAgICA6c3lub3BzaXM6IEhhbmRsZXJzIGZvciB0aGUgbG9nZ2luZyBtb2R1bGUuCiAKLQogLi4gbW9kdWxlYXV0aG9yOjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9sb2dnaW5nL2hhbmRsZXJzLnB5YAorCiAuLiBzaWRlYmFyOjogSW1wb3J0YW50CiAKICAgIFRoaXMgcGFnZSBjb250YWlucyBvbmx5IHJlZmVyZW5jZSBpbmZvcm1hdGlvbi4gRm9yIHR1dG9yaWFscywKQEAgLTE3LDggKzE4LDYgQEAKICAgICogOnJlZjpgQWR2YW5jZWQgVHV0b3JpYWwgPGxvZ2dpbmctYWR2YW5jZWQtdHV0b3JpYWw+YAogICAgKiA6cmVmOmBMb2dnaW5nIENvb2tib29rIDxsb2dnaW5nLWNvb2tib29rPmAKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvbG9nZ2luZy9oYW5kbGVycy5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogLi4gY3VycmVudG1vZHVsZTo6IGxvZ2dpbmcKQEAgLTU0NCw3ICs1NDMsNyBAQAogICAgICAgICAgKFNlZTogOmlzc3VlOmAxMjE2OGAuKSBJbiBlYXJsaWVyIHZlcnNpb25zLCB0aGUgbWVzc2FnZSBzZW50IHRvIHRoZQogICAgICAgICAgc3lzbG9nIGRhZW1vbnMgd2FzIGFsd2F5cyB0ZXJtaW5hdGVkIHdpdGggYSBOVUwgYnl0ZSwgYmVjYXVzZSBlYXJseQogICAgICAgICAgdmVyc2lvbnMgb2YgdGhlc2UgZGFlbW9ucyBleHBlY3RlZCBhIE5VTCB0ZXJtaW5hdGVkIG1lc3NhZ2UgLSBldmVuCi0gICAgICAgICB0aG91Z2ggaXQncyBub3QgaW4gdGhlIHJlbGV2YW50IHNwZWNpZmljYXRpb24gKFJGIDU0MjQpLiBNb3JlIHJlY2VudAorICAgICAgICAgdGhvdWdoIGl0J3Mgbm90IGluIHRoZSByZWxldmFudCBzcGVjaWZpY2F0aW9uIChSRkMgNTQyNCkuIE1vcmUgcmVjZW50CiAgICAgICAgICB2ZXJzaW9ucyBvZiB0aGVzZSBkYWVtb25zIGRvbid0IGV4cGVjdCB0aGUgTlVMIGJ5dGUgYnV0IHN0cmlwIGl0IG9mZgogICAgICAgICAgaWYgaXQncyB0aGVyZSwgYW5kIGV2ZW4gbW9yZSByZWNlbnQgZGFlbW9ucyAod2hpY2ggYWRoZXJlIG1vcmUgY2xvc2VseQogICAgICAgICAgdG8gUkZDIDU0MjQpIHBhc3MgdGhlIE5VTCBieXRlIG9uIGFzIHBhcnQgb2YgdGhlIG1lc3NhZ2UuCkBAIC04NTMsNyArODUyLDcgQEAKICAgIGNyZWRlbnRpYWxzLCB5b3Ugc2hvdWxkIGFsc28gc3BlY2lmeSBzZWN1cmU9VHJ1ZSBzbyB0aGF0IHlvdXIgdXNlcmlkIGFuZAogICAgcGFzc3dvcmQgYXJlIG5vdCBwYXNzZWQgaW4gY2xlYXJ0ZXh0IGFjcm9zcyB0aGUgd2lyZS4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuMworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKICAgICAgIFRoZSAqY29udGV4dCogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAogICAgLi4gbWV0aG9kOjogbWFwTG9nUmVjb3JkKHJlY29yZCkKQEAgLTg2Niw3ICs4NjUsNyBAQAogCiAgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKIAotICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhbiBVUkwtZW5jb2RlZCBkaWN0aW9uYXJ5LiBUaGUKKyAgICAgIFNlbmRzIHRoZSByZWNvcmQgdG8gdGhlIFdlYiBzZXJ2ZXIgYXMgYSBVUkwtZW5jb2RlZCBkaWN0aW9uYXJ5LiBUaGUKICAgICAgIDptZXRoOmBtYXBMb2dSZWNvcmRgIG1ldGhvZCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIHJlY29yZCB0byB0aGUKICAgICAgIGRpY3Rpb25hcnkgdG8gYmUgc2VudC4KIApAQCAtOTUzLDEzICs5NTIsMjAgQEAKIHBvc3NpYmxlLCB3aGlsZSBhbnkgcG90ZW50aWFsbHkgc2xvdyBvcGVyYXRpb25zIChzdWNoIGFzIHNlbmRpbmcgYW4gZW1haWwgdmlhCiA6Y2xhc3M6YFNNVFBIYW5kbGVyYCkgYXJlIGRvbmUgb24gYSBzZXBhcmF0ZSB0aHJlYWQuCiAKLS4uIGNsYXNzOjogUXVldWVMaXN0ZW5lcihxdWV1ZSwgKmhhbmRsZXJzKQorLi4gY2xhc3M6OiBRdWV1ZUxpc3RlbmVyKHF1ZXVlLCAqaGFuZGxlcnMsIHJlc3BlY3RfaGFuZGxlcl9sZXZlbD1GYWxzZSkKIAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBRdWV1ZUxpc3RlbmVyYCBjbGFzcy4gVGhlIGluc3RhbmNlIGlzCiAgICBpbml0aWFsaXplZCB3aXRoIHRoZSBxdWV1ZSB0byBzZW5kIG1lc3NhZ2VzIHRvIGFuZCBhIGxpc3Qgb2YgaGFuZGxlcnMgd2hpY2gKICAgIHdpbGwgaGFuZGxlIGVudHJpZXMgcGxhY2VkIG9uIHRoZSBxdWV1ZS4gVGhlIHF1ZXVlIGNhbiBiZSBhbnkgcXVldWUtCiAgICBsaWtlIG9iamVjdDsgaXQncyBwYXNzZWQgYXMtaXMgdG8gdGhlIDptZXRoOmBkZXF1ZXVlYCBtZXRob2QsIHdoaWNoIG5lZWRzCi0gICB0byBrbm93IGhvdyB0byBnZXQgbWVzc2FnZXMgZnJvbSBpdC4KKyAgIHRvIGtub3cgaG93IHRvIGdldCBtZXNzYWdlcyBmcm9tIGl0LiBJZiBgYHJlc3BlY3RfaGFuZGxlcl9sZXZlbGBgIGlzIGBgVHJ1ZWBgLAorICAgYSBoYW5kbGVyJ3MgbGV2ZWwgaXMgcmVzcGVjdGVkIChjb21wYXJlZCB3aXRoIHRoZSBsZXZlbCBmb3IgdGhlIG1lc3NhZ2UpIHdoZW4KKyAgIGRlY2lkaW5nIHdoZXRoZXIgdG8gcGFzcyBtZXNzYWdlcyB0byB0aGF0IGhhbmRsZXI7IG90aGVyd2lzZSwgdGhlIGJlaGF2aW91cgorICAgaXMgYXMgaW4gcHJldmlvdXMgUHl0aG9uIHZlcnNpb25zIC0gdG8gYWx3YXlzIHBhc3MgZWFjaCBtZXNzYWdlIHRvIGVhY2gKKyAgIGhhbmRsZXIuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgYGByZXNwZWN0X2hhbmRsZXJfbGV2ZWxzYGAgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAgICAuLiBtZXRob2Q6OiBkZXF1ZXVlKGJsb2NrKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcucnN0CmluZGV4IDhmZDdlNDAuLjcyZGEzODUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcucnN0CkBAIC00LDEwICs0LDEwIEBACiAuLiBtb2R1bGU6OiBsb2dnaW5nCiAgICA6c3lub3BzaXM6IEZsZXhpYmxlIGV2ZW50IGxvZ2dpbmcgc3lzdGVtIGZvciBhcHBsaWNhdGlvbnMuCiAKLQogLi4gbW9kdWxlYXV0aG9yOjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9sb2dnaW5nL19faW5pdF9fLnB5YAogCiAuLiBpbmRleDo6IHBhaXI6IEVycm9yczsgbG9nZ2luZwogCkBAIC0yMCw5ICsyMCw2IEBACiAgICAqIDpyZWY6YEFkdmFuY2VkIFR1dG9yaWFsIDxsb2dnaW5nLWFkdmFuY2VkLXR1dG9yaWFsPmAKICAgICogOnJlZjpgTG9nZ2luZyBDb29rYm9vayA8bG9nZ2luZy1jb29rYm9vaz5gCiAKLQotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvbG9nZ2luZy9fX2luaXRfXy5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZGVmaW5lcyBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgd2hpY2ggaW1wbGVtZW50IGEgZmxleGlibGUgZXZlbnQKQEAgLTE1OSwxMSArMTU2LDEzIEBACiAgICAqbXNnKiB1c2luZyB0aGUgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0b3IuIChOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IHlvdSBjYW4KICAgIHVzZSBrZXl3b3JkcyBpbiB0aGUgZm9ybWF0IHN0cmluZywgdG9nZXRoZXIgd2l0aCBhIHNpbmdsZSBkaWN0aW9uYXJ5IGFyZ3VtZW50LikKIAotICAgVGhlcmUgYXJlIHRocmVlIGtleXdvcmQgYXJndW1lbnRzIGluICprd2FyZ3MqIHdoaWNoIGFyZSBpbnNwZWN0ZWQ6ICpleGNfaW5mbyoKLSAgIHdoaWNoLCBpZiBpdCBkb2VzIG5vdCBldmFsdWF0ZSBhcyBmYWxzZSwgY2F1c2VzIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiB0byBiZQorICAgVGhlcmUgYXJlIHRocmVlIGtleXdvcmQgYXJndW1lbnRzIGluICprd2FyZ3MqIHdoaWNoIGFyZSBpbnNwZWN0ZWQ6CisgICAqZXhjX2luZm8qLCAqc3RhY2tfaW5mbyosIGFuZCAqZXh0cmEqLgorCisgICBJZiAqZXhjX2luZm8qIGRvZXMgbm90IGV2YWx1YXRlIGFzIGZhbHNlLCBpdCBjYXVzZXMgZXhjZXB0aW9uIGluZm9ybWF0aW9uIHRvIGJlCiAgICBhZGRlZCB0byB0aGUgbG9nZ2luZyBtZXNzYWdlLiBJZiBhbiBleGNlcHRpb24gdHVwbGUgKGluIHRoZSBmb3JtYXQgcmV0dXJuZWQgYnkKLSAgIDpmdW5jOmBzeXMuZXhjX2luZm9gKSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZDsgb3RoZXJ3aXNlLCA6ZnVuYzpgc3lzLmV4Y19pbmZvYAotICAgaXMgY2FsbGVkIHRvIGdldCB0aGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgorICAgOmZ1bmM6YHN5cy5leGNfaW5mb2ApIG9yIGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZDsKKyAgIG90aGVyd2lzZSwgOmZ1bmM6YHN5cy5leGNfaW5mb2AgaXMgY2FsbGVkIHRvIGdldCB0aGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgogCiAgICBUaGUgc2Vjb25kIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgaXMgKnN0YWNrX2luZm8qLCB3aGljaCBkZWZhdWx0cyB0bwogICAgYGBGYWxzZWBgLiBJZiB0cnVlLCBzdGFjayBpbmZvcm1hdGlvbiBpcyBhZGRlZCB0byB0aGUgbG9nZ2luZwpAQCAtMjIwLDYgKzIxOSw5IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKICAgICAgIFRoZSAqc3RhY2tfaW5mbyogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSAqZXhjX2luZm8qIHBhcmFtZXRlciBjYW4gbm93IGFjY2VwdCBleGNlcHRpb24gaW5zdGFuY2VzLgorCiAKIC4uIG1ldGhvZDo6IExvZ2dlci5pbmZvKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xMjQxLDcgKzEyNDMsNyBAQAogICAgICAgVGhlIHByb3Bvc2FsIHdoaWNoIGRlc2NyaWJlZCB0aGlzIGZlYXR1cmUgZm9yIGluY2x1c2lvbiBpbiB0aGUgUHl0aG9uIHN0YW5kYXJkCiAgICAgICBsaWJyYXJ5LgogCi0gICBgT3JpZ2luYWwgUHl0aG9uIGxvZ2dpbmcgcGFja2FnZSA8aHR0cDovL3d3dy5yZWQtZG92ZS5jb20vcHl0aG9uX2xvZ2dpbmcuaHRtbD5gXworICAgYE9yaWdpbmFsIFB5dGhvbiBsb2dnaW5nIHBhY2thZ2UgPGh0dHBzOi8vd3d3LnJlZC1kb3ZlLmNvbS9weXRob25fbG9nZ2luZy5odG1sPmBfCiAgICAgICBUaGlzIGlzIHRoZSBvcmlnaW5hbCBzb3VyY2UgZm9yIHRoZSA6bW9kOmBsb2dnaW5nYCBwYWNrYWdlLiAgVGhlIHZlcnNpb24gb2YgdGhlCiAgICAgICBwYWNrYWdlIGF2YWlsYWJsZSBmcm9tIHRoaXMgc2l0ZSBpcyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggUHl0aG9uIDEuNS4yLCAyLjEueAogICAgICAgYW5kIDIuMi54LCB3aGljaCBkbyBub3QgaW5jbHVkZSB0aGUgOm1vZDpgbG9nZ2luZ2AgcGFja2FnZSBpbiB0aGUgc3RhbmRhcmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2x6bWEucnN0IGIvRG9jL2xpYnJhcnkvbHptYS5yc3QKaW5kZXggYjcxMDUxZC4uZjk5YzQ5NSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbHptYS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbHptYS5yc3QKQEAgLTMsMTEgKzMsMTUgQEAKIAogLi4gbW9kdWxlOjogbHptYQogICAgOnN5bm9wc2lzOiBBIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGlibHptYSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCiAuLiBtb2R1bGVhdXRob3I6OiBOYWRlZW0gVmF3ZGEgPG5hZGVlbS52YXdkYUBnbWFpbC5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogTmFkZWVtIFZhd2RhIDxuYWRlZW0udmF3ZGFAZ21haWwuY29tPgogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvbHptYS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xhc3NlcyBhbmQgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBjb21wcmVzc2luZyBhbmQKIGRlY29tcHJlc3NpbmcgZGF0YSB1c2luZyB0aGUgTFpNQSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIEFsc28gaW5jbHVkZWQgaXMgYSBmaWxlCkBAIC0xMTAsNiArMTE0LDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAogICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAgYW5kIGBgInhiImBgIG1vZGVzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIDptZXRoOmB+aW8uQnVmZmVyZWRJT0Jhc2UucmVhZGAgbWV0aG9kIG5vdyBhY2NlcHRzIGFuIGFyZ3VtZW50IG9mCisgICAgICBgYE5vbmVgYC4KKwogCiBDb21wcmVzc2luZyBhbmQgZGVjb21wcmVzc2luZyBkYXRhIGluIG1lbW9yeQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIyMSwxMyArMjI5LDMyIEBACiAgICAgICBkZWNvbXByZXNzIGEgbXVsdGktc3RyZWFtIGlucHV0IHdpdGggOmNsYXNzOmBMWk1BRGVjb21wcmVzc29yYCwgeW91IG11c3QKICAgICAgIGNyZWF0ZSBhIG5ldyBkZWNvbXByZXNzb3IgZm9yIGVhY2ggc3RyZWFtLgogCi0gICAuLiBtZXRob2Q6OiBkZWNvbXByZXNzKGRhdGEpCisgICAuLiBtZXRob2Q6OiBkZWNvbXByZXNzKGRhdGEsIG1heF9sZW5ndGg9LTEpCiAKLSAgICAgIERlY29tcHJlc3MgKmRhdGEqIChhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCksIHJldHVybmluZyBhIDpjbGFzczpgYnl0ZXNgCi0gICAgICBvYmplY3QgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgZm9yIGF0IGxlYXN0IHBhcnQgb2YgdGhlIGlucHV0LgotICAgICAgU29tZSBvZiAqZGF0YSogbWF5IGJlIGJ1ZmZlcmVkIGludGVybmFsbHksIGZvciB1c2UgaW4gbGF0ZXIgY2FsbHMgdG8KLSAgICAgIDptZXRoOmBkZWNvbXByZXNzYC4gVGhlIHJldHVybmVkIGRhdGEgc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZQotICAgICAgb3V0cHV0IG9mIGFueSBwcmV2aW91cyBjYWxscyB0byA6bWV0aDpgZGVjb21wcmVzc2AuCisgICAgICBEZWNvbXByZXNzICpkYXRhKiAoYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSwgcmV0dXJuaW5nCisgICAgICB1bmNvbXByZXNzZWQgZGF0YSBhcyBieXRlcy4gU29tZSBvZiAqZGF0YSogbWF5IGJlIGJ1ZmZlcmVkCisgICAgICBpbnRlcm5hbGx5LCBmb3IgdXNlIGluIGxhdGVyIGNhbGxzIHRvIDptZXRoOmBkZWNvbXByZXNzYC4gVGhlCisgICAgICByZXR1cm5lZCBkYXRhIHNob3VsZCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgb3V0cHV0IG9mIGFueQorICAgICAgcHJldmlvdXMgY2FsbHMgdG8gOm1ldGg6YGRlY29tcHJlc3NgLgorCisgICAgICBJZiAqbWF4X2xlbmd0aCogaXMgbm9ubmVnYXRpdmUsIHJldHVybnMgYXQgbW9zdCAqbWF4X2xlbmd0aCoKKyAgICAgIGJ5dGVzIG9mIGRlY29tcHJlc3NlZCBkYXRhLiBJZiB0aGlzIGxpbWl0IGlzIHJlYWNoZWQgYW5kIGZ1cnRoZXIKKyAgICAgIG91dHB1dCBjYW4gYmUgcHJvZHVjZWQsIHRoZSA6YXR0cjpgfi5uZWVkc19pbnB1dGAgYXR0cmlidXRlIHdpbGwKKyAgICAgIGJlIHNldCB0byBgYEZhbHNlYGAuIEluIHRoaXMgY2FzZSwgdGhlIG5leHQgY2FsbCB0bworICAgICAgOm1ldGg6YH4uZGVjb21wcmVzc2AgbWF5IHByb3ZpZGUgKmRhdGEqIGFzIGBgYicnYGAgdG8gb2J0YWluCisgICAgICBtb3JlIG9mIHRoZSBvdXRwdXQuCisKKyAgICAgIElmIGFsbCBvZiB0aGUgaW5wdXQgZGF0YSB3YXMgZGVjb21wcmVzc2VkIGFuZCByZXR1cm5lZCAoZWl0aGVyCisgICAgICBiZWNhdXNlIHRoaXMgd2FzIGxlc3MgdGhhbiAqbWF4X2xlbmd0aCogYnl0ZXMsIG9yIGJlY2F1c2UKKyAgICAgICptYXhfbGVuZ3RoKiB3YXMgbmVnYXRpdmUpLCB0aGUgOmF0dHI6YH4ubmVlZHNfaW5wdXRgIGF0dHJpYnV0ZQorICAgICAgd2lsbCBiZSBzZXQgdG8gYGBUcnVlYGAuCisKKyAgICAgIEF0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWQKKyAgICAgIHJhaXNlcyBhbiBgRU9GRXJyb3JgLiAgQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUKKyAgICAgIHN0cmVhbSBpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgOmF0dHI6YH4udW51c2VkX2RhdGFgIGF0dHJpYnV0ZS4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICAgIEFkZGVkIHRoZSAqbWF4X2xlbmd0aCogcGFyYW1ldGVyLgogCiAgICAuLiBhdHRyaWJ1dGU6OiBjaGVjawogCkBAIC0yNDUsNiArMjcyLDEyIEBACiAKICAgICAgIEJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXMgcmVhY2hlZCwgdGhpcyB3aWxsIGJlIGBgYiIiYGAuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IG5lZWRzX2lucHV0CisKKyAgICAgIGBgRmFsc2VgYCBpZiB0aGUgOm1ldGg6YC5kZWNvbXByZXNzYCBtZXRob2QgY2FuIHByb3ZpZGUgbW9yZQorICAgICAgZGVjb21wcmVzc2VkIGRhdGEgYmVmb3JlIHJlcXVpcmluZyBuZXcgdW5jb21wcmVzc2VkIGlucHV0LgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKIAogLi4gZnVuY3Rpb246OiBjb21wcmVzcyhkYXRhLCBmb3JtYXQ9Rk9STUFUX1haLCBjaGVjaz0tMSwgcHJlc2V0PU5vbmUsIGZpbHRlcnM9Tm9uZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFjcGF0aC5yc3QgYi9Eb2MvbGlicmFyeS9tYWNwYXRoLnJzdAppbmRleCBiN2E1ZDg5Li5iMDhiYmUwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYWNwYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYWNwYXRoLnJzdApAQCAtNCw2ICs0LDkgQEAKIC4uIG1vZHVsZTo6IG1hY3BhdGgKICAgIDpzeW5vcHNpczogTWFjIE9TIDkgcGF0aCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9tYWNwYXRoLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBpcyB0aGUgTWFjIE9TIDkgKGFuZCBlYXJsaWVyKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgOm1vZDpgb3MucGF0aGAKIG1vZHVsZS4gSXQgY2FuIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSBvbGQtc3R5bGUgTWFjaW50b3NoIHBhdGhuYW1lcyBvbiBNYWMgT1MgWApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFpbGJveC5yc3QgYi9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdAppbmRleCBkMjk5MDJkLi44MTI0NGMyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdApAQCAtMyw5ICszLDEzIEBACiAKIC4uIG1vZHVsZTo6IG1haWxib3gKICAgIDpzeW5vcHNpczogTWFuaXB1bGF0ZSBtYWlsYm94ZXMgaW4gdmFyaW91cyBmb3JtYXRzCisKIC4uIG1vZHVsZWF1dGhvcjo6IEdyZWdvcnkgSy4gSm9obnNvbiA8Z2tqQGdyZWdvcnlram9obnNvbi5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogR3JlZ29yeSBLLiBKb2huc29uIDxna2pAZ3JlZ29yeWtqb2huc29uLmNvbT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvbWFpbGJveC5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZGVmaW5lcyB0d28gY2xhc3NlcywgOmNsYXNzOmBNYWlsYm94YCBhbmQgOmNsYXNzOmBNZXNzYWdlYCwgZm9yCiBhY2Nlc3NpbmcgYW5kIG1hbmlwdWxhdGluZyBvbi1kaXNrIG1haWxib3hlcyBhbmQgdGhlIG1lc3NhZ2VzIHRoZXkgY29udGFpbi4KQEAgLTQyMiw3ICs0MjYsNyBAQAogICAgYG1haWxkaXIgbWFuIHBhZ2UgZnJvbSBxbWFpbCA8aHR0cDovL3d3dy5xbWFpbC5vcmcvbWFuL21hbjUvbWFpbGRpci5odG1sPmBfCiAgICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZm9ybWF0LgogCi0gICBgVXNpbmcgbWFpbGRpciBmb3JtYXQgPGh0dHA6Ly9jci55cC50by9wcm90by9tYWlsZGlyLmh0bWw+YF8KKyAgIGBVc2luZyBtYWlsZGlyIGZvcm1hdCA8aHR0cHM6Ly9jci55cC50by9wcm90by9tYWlsZGlyLmh0bWw+YF8KICAgICAgIE5vdGVzIG9uIE1haWxkaXIgYnkgaXRzIGludmVudG9yLiBJbmNsdWRlcyBhbiB1cGRhdGVkIG5hbWUtY3JlYXRpb24gc2NoZW1lIGFuZAogICAgICAgZGV0YWlscyBvbiAiaW5mbyIgc2VtYW50aWNzLgogCkBAIC00ODQsNyArNDg4LDcgQEAKICAgIGBtYm94IG1hbiBwYWdlIGZyb20gdGluIDxodHRwOi8vd3d3LnRpbi5vcmcvYmluL21hbi5jZ2k/c2VjdGlvbj01JnRvcGljPW1ib3g+YF8KICAgICAgIEFub3RoZXIgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZm9ybWF0LCB3aXRoIGRldGFpbHMgb24gbG9ja2luZy4KIAotICAgYENvbmZpZ3VyaW5nIE5ldHNjYXBlIE1haWwgb24gVW5peDogV2h5IFRoZSBDb250ZW50LUxlbmd0aCBGb3JtYXQgaXMgQmFkIDxodHRwOi8vd3d3Lmp3ei5vcmcvZG9jL2NvbnRlbnQtbGVuZ3RoLmh0bWw+YF8KKyAgIGBDb25maWd1cmluZyBOZXRzY2FwZSBNYWlsIG9uIFVuaXg6IFdoeSBUaGUgQ29udGVudC1MZW5ndGggRm9ybWF0IGlzIEJhZCA8aHR0cHM6Ly93d3cuand6Lm9yZy9kb2MvY29udGVudC1sZW5ndGguaHRtbD5gXwogICAgICAgQW4gYXJndW1lbnQgZm9yIHVzaW5nIHRoZSBvcmlnaW5hbCBtYm94IGZvcm1hdCByYXRoZXIgdGhhbiBhIHZhcmlhdGlvbi4KIAogICAgYCJtYm94IiBpcyBhIGZhbWlseSBvZiBzZXZlcmFsIG11dHVhbGx5IGluY29tcGF0aWJsZSBtYWlsYm94IGZvcm1hdHMgPGh0dHA6Ly9ob21lcGFnZS5udGx3b3JsZC5jb20vam9uYXRoYW4uZGVib3luZXBvbGxhcmQvRkdBL21haWwtbWJveC1mb3JtYXRzLmh0bWw+YF8KQEAgLTY5MCwxMCArNjk0LDEwIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgRm9ybWF0IG9mIFZlcnNpb24gNSBCYWJ5bCBGaWxlcyA8aHR0cDovL3F1aW1ieS5nbnVzLm9yZy9ub3Rlcy9CQUJZTD5gXworICAgYEZvcm1hdCBvZiBWZXJzaW9uIDUgQmFieWwgRmlsZXMgPGh0dHBzOi8vcXVpbWJ5LmdudXMub3JnL25vdGVzL0JBQllMPmBfCiAgICAgICBBIHNwZWNpZmljYXRpb24gb2YgdGhlIEJhYnlsIGZvcm1hdC4KIAotICAgYFJlYWRpbmcgTWFpbCB3aXRoIFJtYWlsIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZW1hY3MvbWFudWFsL2h0bWxfbm9kZS9lbWFjcy9SbWFpbC5odG1sPmBfCisgICBgUmVhZGluZyBNYWlsIHdpdGggUm1haWwgPGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZW1hY3MvbWFudWFsL2h0bWxfbm9kZS9lbWFjcy9SbWFpbC5odG1sPmBfCiAgICAgICBUaGUgUm1haWwgbWFudWFsLCB3aXRoIHNvbWUgaW5mb3JtYXRpb24gb24gQmFieWwgc2VtYW50aWNzLgogCiAKQEAgLTc0NCw3ICs3NDgsNyBAQAogICAgYG1tZGYgbWFuIHBhZ2UgZnJvbSB0aW4gPGh0dHA6Ly93d3cudGluLm9yZy9iaW4vbWFuLmNnaT9zZWN0aW9uPTUmdG9waWM9bW1kZj5gXwogICAgICAgQSBzcGVjaWZpY2F0aW9uIG9mIE1NREYgZm9ybWF0IGZyb20gdGhlIGRvY3VtZW50YXRpb24gb2YgdGluLCBhIG5ld3NyZWFkZXIuCiAKLSAgIGBNTURGIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01NREY+YF8KKyAgIGBNTURGIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NTURGPmBfCiAgICAgICBBIFdpa2lwZWRpYSBhcnRpY2xlIGRlc2NyaWJpbmcgdGhlIE11bHRpY2hhbm5lbCBNZW1vcmFuZHVtIERpc3RyaWJ1dGlvbgogICAgICAgRmFjaWxpdHkuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L21haWxjYXAucnN0IGIvRG9jL2xpYnJhcnkvbWFpbGNhcC5yc3QKaW5kZXggODExNWU0Mi4uODk2YWZkMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbWFpbGNhcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbWFpbGNhcC5yc3QKQEAgLTcwLDcgKzcwLDcgQEAKIEFuIGV4YW1wbGUgdXNhZ2U6OgogCiAgICA+Pj4gaW1wb3J0IG1haWxjYXAKLSAgID4+PiBkPW1haWxjYXAuZ2V0Y2FwcygpCisgICA+Pj4gZCA9IG1haWxjYXAuZ2V0Y2FwcygpCiAgICA+Pj4gbWFpbGNhcC5maW5kbWF0Y2goZCwgJ3ZpZGVvL21wZWcnLCBmaWxlbmFtZT0ndG1wMTIyMycpCiAgICAoJ3htcGVnIHRtcDEyMjMnLCB7J3ZpZXcnOiAneG1wZWcgJXMnfSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFyc2hhbC5yc3QgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAppbmRleCBhZjQzOTQ0Li4xZmZjNmVmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdApAQCAtNSw2ICs1LDcgQEAKICAgIDpzeW5vcHNpczogQ29udmVydCBQeXRob24gb2JqZWN0cyB0byBzdHJlYW1zIG9mIGJ5dGVzIGFuZCBiYWNrICh3aXRoIGRpZmZlcmVudAogICAgICAgICAgICAgICBjb25zdHJhaW50cykuCiAKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB0aGF0IGNhbiByZWFkIGFuZCB3cml0ZSBQeXRob24gdmFsdWVzIGluIGEgYmluYXJ5CiBmb3JtYXQuICBUaGUgZm9ybWF0IGlzIHNwZWNpZmljIHRvIFB5dGhvbiwgYnV0IGluZGVwZW5kZW50IG9mIG1hY2hpbmUKQEAgLTE2LDcgKzE3LDYgQEAKIC4uIGluZGV4OjoKICAgIG1vZHVsZTogcGlja2xlCiAgICBtb2R1bGU6IHNoZWx2ZQotICAgb2JqZWN0OiBjb2RlCiAKIFRoaXMgaXMgbm90IGEgZ2VuZXJhbCAicGVyc2lzdGVuY2UiIG1vZHVsZS4gIEZvciBnZW5lcmFsIHBlcnNpc3RlbmNlIGFuZAogdHJhbnNmZXIgb2YgUHl0aG9uIG9iamVjdHMgdGhyb3VnaCBSUEMgY2FsbHMsIHNlZSB0aGUgbW9kdWxlcyA6bW9kOmBwaWNrbGVgIGFuZApAQCAtMzQsMTMgKzM0LDE1IEBACiAgICBtYWxpY2lvdXNseSBjb25zdHJ1Y3RlZCBkYXRhLiAgTmV2ZXIgdW5tYXJzaGFsIGRhdGEgcmVjZWl2ZWQgZnJvbSBhbgogICAgdW50cnVzdGVkIG9yIHVuYXV0aGVudGljYXRlZCBzb3VyY2UuCiAKKy4uIGluZGV4Ojogb2JqZWN0OyBjb2RlLCBjb2RlIG9iamVjdAorCiBOb3QgYWxsIFB5dGhvbiBvYmplY3QgdHlwZXMgYXJlIHN1cHBvcnRlZDsgaW4gZ2VuZXJhbCwgb25seSBvYmplY3RzIHdob3NlIHZhbHVlCiBpcyBpbmRlcGVuZGVudCBmcm9tIGEgcGFydGljdWxhciBpbnZvY2F0aW9uIG9mIFB5dGhvbiBjYW4gYmUgd3JpdHRlbiBhbmQgcmVhZCBieQogdGhpcyBtb2R1bGUuICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6IGJvb2xlYW5zLCBpbnRlZ2VycywgZmxvYXRpbmcKIHBvaW50IG51bWJlcnMsIGNvbXBsZXggbnVtYmVycywgc3RyaW5ncywgYnl0ZXMsIGJ5dGVhcnJheXMsIHR1cGxlcywgbGlzdHMsIHNldHMsCiBmcm96ZW5zZXRzLCBkaWN0aW9uYXJpZXMsIGFuZCBjb2RlIG9iamVjdHMsIHdoZXJlIGl0IHNob3VsZCBiZSB1bmRlcnN0b29kIHRoYXQKIHR1cGxlcywgbGlzdHMsIHNldHMsIGZyb3plbnNldHMgYW5kIGRpY3Rpb25hcmllcyBhcmUgb25seSBzdXBwb3J0ZWQgYXMgbG9uZyBhcwotdGhlIHZhbHVlcyBjb250YWluZWQgdGhlcmVpbiBhcmUgdGhlbXNlbHZlcyBzdXBwb3J0ZWQuCit0aGUgdmFsdWVzIGNvbnRhaW5lZCB0aGVyZWluIGFyZSB0aGVtc2VsdmVzIHN1cHBvcnRlZC4gIFRoZQogc2luZ2xldG9ucyA6Y29uc3Q6YE5vbmVgLCA6Y29uc3Q6YEVsbGlwc2lzYCBhbmQgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgY2FuIGFsc28gYmUKIG1hcnNoYWxsZWQgYW5kIHVubWFyc2hhbGxlZC4KIEZvciBmb3JtYXQgKnZlcnNpb24qIGxvd2VyIHRoYW4gMywgcmVjdXJzaXZlIGxpc3RzLCBzZXRzIGFuZCBkaWN0aW9uYXJpZXMgY2Fubm90CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYXRoLnJzdCBiL0RvYy9saWJyYXJ5L21hdGgucnN0CmluZGV4IDBmYzdjN2MuLjNmZGVhMTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21hdGgucnN0CisrKyBiL0RvYy9saWJyYXJ5L21hdGgucnN0CkBAIC04LDYgKzgsOCBAQAogCiAgICBmcm9tIG1hdGggaW1wb3J0IGZzdW0KIAorLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgaXMgYWx3YXlzIGF2YWlsYWJsZS4gIEl0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbWF0aGVtYXRpY2FsCiBmdW5jdGlvbnMgZGVmaW5lZCBieSB0aGUgQyBzdGFuZGFyZC4KIApAQCAtOTcsNyArOTksNDkgQEAKIAogICAgRm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbiBhbmQgdHdvIGFsdGVybmF0aXZlIGFwcHJvYWNoZXMsIHNlZSB0aGUgYEFTUE4gY29va2Jvb2sKICAgIHJlY2lwZXMgZm9yIGFjY3VyYXRlIGZsb2F0aW5nIHBvaW50IHN1bW1hdGlvbgotICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzM5MzA5MC8+YF9cLgorICAgPGh0dHBzOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8zOTMwOTAvPmBfXC4KKworCisuLiBmdW5jdGlvbjo6IGdjZChhLCBiKQorCisgICBSZXR1cm4gdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHRoZSBpbnRlZ2VycyAqYSogYW5kICpiKi4gIElmIGVpdGhlcgorICAgKmEqIG9yICpiKiBpcyBub256ZXJvLCB0aGVuIHRoZSB2YWx1ZSBvZiBgYGdjZChhLCBiKWBgIGlzIHRoZSBsYXJnZXN0CisgICBwb3NpdGl2ZSBpbnRlZ2VyIHRoYXQgZGl2aWRlcyBib3RoICphKiBhbmQgKmIqLiAgYGBnY2QoMCwgMClgYCByZXR1cm5zCisgICBgYDBgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKworLi4gZnVuY3Rpb246OiBpc2Nsb3NlKGEsIGIsICosIHJlbF90b2w9MWUtMDksIGFic190b2w9MC4wKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHZhbHVlcyAqYSogYW5kICpiKiBhcmUgY2xvc2UgdG8gZWFjaCBvdGhlciBhbmQKKyAgIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgIFdoZXRoZXIgb3Igbm90IHR3byB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgY2xvc2UgaXMgZGV0ZXJtaW5lZCBhY2NvcmRpbmcgdG8KKyAgIGdpdmVuIGFic29sdXRlIGFuZCByZWxhdGl2ZSB0b2xlcmFuY2VzLgorCisgICAqcmVsX3RvbCogaXMgdGhlIHJlbGF0aXZlIHRvbGVyYW5jZSAtLSBpdCBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIGRpZmZlcmVuY2UKKyAgIGJldHdlZW4gKmEqIGFuZCAqYiosIHJlbGF0aXZlIHRvIHRoZSBsYXJnZXIgYWJzb2x1dGUgdmFsdWUgb2YgKmEqIG9yICpiKi4KKyAgIEZvciBleGFtcGxlLCB0byBzZXQgYSB0b2xlcmFuY2Ugb2YgNSUsIHBhc3MgYGByZWxfdG9sPTAuMDVgYC4gIFRoZSBkZWZhdWx0CisgICB0b2xlcmFuY2UgaXMgYGAxZS0wOWBgLCB3aGljaCBhc3N1cmVzIHRoYXQgdGhlIHR3byB2YWx1ZXMgYXJlIHRoZSBzYW1lCisgICB3aXRoaW4gYWJvdXQgOSBkZWNpbWFsIGRpZ2l0cy4gICpyZWxfdG9sKiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgorCisgICAqYWJzX3RvbCogaXMgdGhlIG1pbmltdW0gYWJzb2x1dGUgdG9sZXJhbmNlIC0tIHVzZWZ1bCBmb3IgY29tcGFyaXNvbnMgbmVhcgorICAgemVyby4gKmFic190b2wqIG11c3QgYmUgYXQgbGVhc3QgemVyby4KKworICAgSWYgbm8gZXJyb3JzIG9jY3VyLCB0aGUgcmVzdWx0IHdpbGwgYmU6CisgICBgYGFicyhhLWIpIDw9IG1heChyZWxfdG9sICogbWF4KGFicyhhKSwgYWJzKGIpKSwgYWJzX3RvbClgYC4KKworICAgVGhlIElFRUUgNzU0IHNwZWNpYWwgdmFsdWVzIG9mIGBgTmFOYGAsIGBgaW5mYGAsIGFuZCBgYC1pbmZgYCB3aWxsIGJlCisgICBoYW5kbGVkIGFjY29yZGluZyB0byBJRUVFIHJ1bGVzLiAgU3BlY2lmaWNhbGx5LCBgYE5hTmBgIGlzIG5vdCBjb25zaWRlcmVkCisgICBjbG9zZSB0byBhbnkgb3RoZXIgdmFsdWUsIGluY2x1ZGluZyBgYE5hTmBgLiAgYGBpbmZgYCBhbmQgYGAtaW5mYGAgYXJlIG9ubHkKKyAgIGNvbnNpZGVyZWQgY2xvc2UgdG8gdGhlbXNlbHZlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICA6cGVwOmA0ODVgIC0tIEEgZnVuY3Rpb24gZm9yIHRlc3RpbmcgYXBwcm94aW1hdGUgZXF1YWxpdHkKIAogCiAuLiBmdW5jdGlvbjo6IGlzZmluaXRlKHgpCkBAIC0xNjIsNyArMjA2LDcgQEAKIAogICAgUmV0dXJuIGBgZSoqeCAtIDFgYC4gIEZvciBzbWFsbCBmbG9hdHMgKngqLCB0aGUgc3VidHJhY3Rpb24gaW4gYGBleHAoeCkgLSAxYGAKICAgIGNhbiByZXN1bHQgaW4gYSBgc2lnbmlmaWNhbnQgbG9zcyBvZiBwcmVjaXNpb24KLSAgIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xvc3Nfb2Zfc2lnbmlmaWNhbmNlPmBfXDsgdGhlIDpmdW5jOmBleHBtMWAKKyAgIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Mb3NzX29mX3NpZ25pZmljYW5jZT5gX1w7IHRoZSA6ZnVuYzpgZXhwbTFgCiAgICBmdW5jdGlvbiBwcm92aWRlcyBhIHdheSB0byBjb21wdXRlIHRoaXMgcXVhbnRpdHkgdG8gZnVsbCBwcmVjaXNpb246OgogCiAgICAgICA+Pj4gZnJvbSBtYXRoIGltcG9ydCBleHAsIGV4cG0xCkBAIC0yOTAsNyArMzM0LDcgQEAKIEh5cGVyYm9saWMgZnVuY3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1gSHlwZXJib2xpYyBmdW5jdGlvbnMgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSHlwZXJib2xpY19mdW5jdGlvbj5gXworYEh5cGVyYm9saWMgZnVuY3Rpb25zIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IeXBlcmJvbGljX2Z1bmN0aW9uPmBfCiBhcmUgYW5hbG9ncyBvZiB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBiYXNlZCBvbiBoeXBlcmJvbGFzCiBpbnN0ZWFkIG9mIGNpcmNsZXMuCiAKQEAgLTMyOSwxMiArMzczLDEyIEBACiAKIC4uIGZ1bmN0aW9uOjogZXJmKHgpCiAKLSAgIFJldHVybiB0aGUgYGVycm9yIGZ1bmN0aW9uIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Vycm9yX2Z1bmN0aW9uPmBfIGF0CisgICBSZXR1cm4gdGhlIGBlcnJvciBmdW5jdGlvbiA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXJyb3JfZnVuY3Rpb24+YF8gYXQKICAgICp4Ki4KIAogICAgVGhlIDpmdW5jOmBlcmZgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgdHJhZGl0aW9uYWwgc3RhdGlzdGljYWwKICAgIGZ1bmN0aW9ucyBzdWNoIGFzIHRoZSBgY3VtdWxhdGl2ZSBzdGFuZGFyZCBub3JtYWwgZGlzdHJpYnV0aW9uCi0gICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ob3JtYWxfZGlzdHJpYnV0aW9uI0N1bXVsYXRpdmVfZGlzdHJpYnV0aW9uX2Z1bmN0aW9uPmBfOjoKKyAgIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ob3JtYWxfZGlzdHJpYnV0aW9uI0N1bXVsYXRpdmVfZGlzdHJpYnV0aW9uX2Z1bmN0aW9uPmBfOjoKIAogICAgICBkZWYgcGhpKHgpOgogICAgICAgICAgJ0N1bXVsYXRpdmUgZGlzdHJpYnV0aW9uIGZ1bmN0aW9uIGZvciB0aGUgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbicKQEAgLTM0NiwxNyArMzkwLDE3IEBACiAuLiBmdW5jdGlvbjo6IGVyZmMoeCkKIAogICAgUmV0dXJuIHRoZSBjb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uIGF0ICp4Ki4gIFRoZSBgY29tcGxlbWVudGFyeSBlcnJvcgotICAgZnVuY3Rpb24gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXJyb3JfZnVuY3Rpb24+YF8gaXMgZGVmaW5lZCBhcworICAgZnVuY3Rpb24gPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Vycm9yX2Z1bmN0aW9uPmBfIGlzIGRlZmluZWQgYXMKICAgIGBgMS4wIC0gZXJmKHgpYGAuICBJdCBpcyB1c2VkIGZvciBsYXJnZSB2YWx1ZXMgb2YgKngqIHdoZXJlIGEgc3VidHJhY3Rpb24KICAgIGZyb20gb25lIHdvdWxkIGNhdXNlIGEgYGxvc3Mgb2Ygc2lnbmlmaWNhbmNlCi0gICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Mb3NzX29mX3NpZ25pZmljYW5jZT5gX1wuCisgICA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTG9zc19vZl9zaWduaWZpY2FuY2U+YF9cLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCiAuLiBmdW5jdGlvbjo6IGdhbW1hKHgpCiAKLSAgIFJldHVybiB0aGUgYEdhbW1hIGZ1bmN0aW9uIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dhbW1hX2Z1bmN0aW9uPmBfIGF0CisgICBSZXR1cm4gdGhlIGBHYW1tYSBmdW5jdGlvbiA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2FtbWFfZnVuY3Rpb24+YF8gYXQKICAgICp4Ki4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCkBAIC0zODMsNiArNDI3LDIyIEBACiAgICBUaGUgbWF0aGVtYXRpY2FsIGNvbnN0YW50IGUgPSAyLjcxODI4MS4uLiwgdG8gYXZhaWxhYmxlIHByZWNpc2lvbi4KIAogCisuLiBkYXRhOjogaW5mCisKKyAgIEEgZmxvYXRpbmctcG9pbnQgcG9zaXRpdmUgaW5maW5pdHkuICAoRm9yIG5lZ2F0aXZlIGluZmluaXR5LCB1c2UKKyAgIGBgLW1hdGguaW5mYGAuKSAgRXF1aXZhbGVudCB0byB0aGUgb3V0cHV0IG9mIGBgZmxvYXQoJ2luZicpYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKKy4uIGRhdGE6OiBuYW4KKworICAgQSBmbG9hdGluZy1wb2ludCAibm90IGEgbnVtYmVyIiAoTmFOKSB2YWx1ZS4gIEVxdWl2YWxlbnQgdG8gdGhlIG91dHB1dCBvZgorICAgYGBmbG9hdCgnbmFuJylgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gaW1wbC1kZXRhaWw6OgogCiAgICBUaGUgOm1vZDpgbWF0aGAgbW9kdWxlIGNvbnNpc3RzIG1vc3RseSBvZiB0aGluIHdyYXBwZXJzIGFyb3VuZCB0aGUgcGxhdGZvcm0gQwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWltZXR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L21pbWV0eXBlcy5yc3QKaW5kZXggODczOWVhMy4uNDY0MjQ4YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbWltZXR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0CkBAIC0zLDEzICszLDEzIEBACiAKIC4uIG1vZHVsZTo6IG1pbWV0eXBlcwogICAgOnN5bm9wc2lzOiBNYXBwaW5nIG9mIGZpbGVuYW1lIGV4dGVuc2lvbnMgdG8gTUlNRSB0eXBlcy4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL21pbWV0eXBlcy5weWAKIAogLi4gaW5kZXg6OiBwYWlyOiBNSU1FOyBjb250ZW50IHR5cGUKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvbWltZXR5cGVzLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgbWltZXR5cGVzYCBtb2R1bGUgY29udmVydHMgYmV0d2VlbiBhIGZpbGVuYW1lIG9yIFVSTCBhbmQgdGhlIE1JTUUgdHlwZQpAQCAtNDQsNyArNDQsNyBAQAogCiAgICBUaGUgb3B0aW9uYWwgKnN0cmljdCogYXJndW1lbnQgaXMgYSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciB0aGUgbGlzdCBvZiBrbm93biBNSU1FIHR5cGVzCiAgICBpcyBsaW1pdGVkIHRvIG9ubHkgdGhlIG9mZmljaWFsIHR5cGVzIGByZWdpc3RlcmVkIHdpdGggSUFOQQotICAgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWw+YF8uCisgICA8aHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWw+YF8uCiAgICBXaGVuICpzdHJpY3QqIGlzIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIG9ubHkgdGhlIElBTkEgdHlwZXMgYXJlIHN1cHBvcnRlZDsgd2hlbgogICAgKnN0cmljdCogaXMgYGBGYWxzZWBgLCBzb21lIGFkZGl0aW9uYWwgbm9uLXN0YW5kYXJkIGJ1dCBjb21tb25seSB1c2VkIE1JTUUgdHlwZXMKICAgIGFyZSBhbHNvIHJlY29nbml6ZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tbWFwLnJzdCBiL0RvYy9saWJyYXJ5L21tYXAucnN0CmluZGV4IDE4ZTA1ZTMuLjhmNTM4MzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21tYXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L21tYXAucnN0CkBAIC00LDYgKzQsNyBAQAogLi4gbW9kdWxlOjogbW1hcAogICAgOnN5bm9wc2lzOiBJbnRlcmZhY2UgdG8gbWVtb3J5LW1hcHBlZCBmaWxlcyBmb3IgVW5peCBhbmQgV2luZG93cy4KIAorLS0tLS0tLS0tLS0tLS0KIAogTWVtb3J5LW1hcHBlZCBmaWxlIG9iamVjdHMgYmVoYXZlIGxpa2UgYm90aCA6Y2xhc3M6YGJ5dGVhcnJheWAgYW5kIGxpa2UKIDp0ZXJtOmBmaWxlIG9iamVjdHMgPGZpbGUgb2JqZWN0PmAuICBZb3UgY2FuIHVzZSBtbWFwIG9iamVjdHMgaW4gbW9zdCBwbGFjZXMKQEAgLTEyNyw3ICsxMjgsNyBAQAogICAgICAgaW1wb3J0IG1tYXAKIAogICAgICAgd2l0aCBtbWFwLm1tYXAoLTEsIDEzKSBhcyBtbToKLSAgICAgICAgICBtbS53cml0ZSgiSGVsbG8gd29ybGQhIikKKyAgICAgICAgICBtbS53cml0ZShiIkhlbGxvIHdvcmxkISIpCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogICAgICAgQ29udGV4dCBtYW5hZ2VyIHN1cHBvcnQuCkBAIC0xNDQsNyArMTQ1LDcgQEAKIAogICAgICAgcGlkID0gb3MuZm9yaygpCiAKLSAgICAgIGlmIHBpZCA9PSAwOiAjIEluIGEgY2hpbGQgcHJvY2VzcworICAgICAgaWYgcGlkID09IDA6ICAjIEluIGEgY2hpbGQgcHJvY2VzcwogICAgICAgICAgIG1tLnNlZWsoMCkKICAgICAgICAgICBwcmludChtbS5yZWFkbGluZSgpKQogCkBAIC0xNzQsNiArMTc1LDkgQEAKICAgICAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uCiAgICAgICBSZXR1cm5zIGBgLTFgYCBvbiBmYWlsdXJlLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgICAgV3JpdGFibGUgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCisKIAogICAgLi4gbWV0aG9kOjogZmx1c2goW29mZnNldFssIHNpemVdXSkKIApAQCAtMjM0LDYgKzIzOCw5IEBACiAgICAgICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLgogICAgICAgUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICAgIFdyaXRhYmxlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaXMgbm93IGFjY2VwdGVkLgorCiAKICAgIC4uIG1ldGhvZDo6IHNlZWsocG9zWywgd2hlbmNlXSkKIApAQCAtMjYxLDYgKzI2OCw5IEBACiAgICAgICB3ZXJlIHdyaXR0ZW4uIElmIHRoZSBtbWFwIHdhcyBjcmVhdGVkIHdpdGggOmNvbnN0OmBBQ0NFU1NfUkVBRGAsIHRoZW4KICAgICAgIHdyaXRpbmcgdG8gaXQgd2lsbCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgICAgV3JpdGFibGUgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCisKIAogICAgLi4gbWV0aG9kOjogd3JpdGVfYnl0ZShieXRlKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tb2R1bGVmaW5kZXIucnN0IGIvRG9jL2xpYnJhcnkvbW9kdWxlZmluZGVyLnJzdAppbmRleCBlODRhNDk2Li43YjM5Y2U3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tb2R1bGVmaW5kZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L21vZHVsZWZpbmRlci5yc3QKQEAgLTEsMTIgKzEsMTEgQEAKIDptb2Q6YG1vZHVsZWZpbmRlcmAgLS0tIEZpbmQgbW9kdWxlcyB1c2VkIGJ5IGEgc2NyaXB0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0uLiBzZWN0aW9uYXV0aG9yOjogQS5NLiBLdWNobGluZyA8YW1rQGFtay5jYT4KLQotCiAuLiBtb2R1bGU6OiBtb2R1bGVmaW5kZXIKICAgIDpzeW5vcHNpczogRmluZCBtb2R1bGVzIHVzZWQgYnkgYSBzY3JpcHQuCiAKKy4uIHNlY3Rpb25hdXRob3I6OiBBLk0uIEt1Y2hsaW5nIDxhbWtAYW1rLmNhPgorCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9tb2R1bGVmaW5kZXIucHlgCiAKIC0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tc2lsaWIucnN0IGIvRG9jL2xpYnJhcnkvbXNpbGliLnJzdAppbmRleCA0MTQ1YzhlLi4wYTQyMDMyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tc2lsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L21zaWxpYi5yc3QKQEAgLTQsMTIgKzQsMTYgQEAKIC4uIG1vZHVsZTo6IG1zaWxpYgogICAgOnBsYXRmb3JtOiBXaW5kb3dzCiAgICA6c3lub3BzaXM6IENyZWF0aW9uIG9mIE1pY3Jvc29mdCBJbnN0YWxsZXIgZmlsZXMsIGFuZCBDQUIgZmlsZXMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IE1hcnRpbiB2LiBMw7Z3aXMgPG1hcnRpbkB2LmxvZXdpcy5kZT4KIC4uIHNlY3Rpb25hdXRob3I6OiBNYXJ0aW4gdi4gTMO2d2lzIDxtYXJ0aW5Adi5sb2V3aXMuZGU+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL21zaWxpYi9fX2luaXRfXy5weWAKIAogLi4gaW5kZXg6OiBzaW5nbGU6IG1zaQogCistLS0tLS0tLS0tLS0tLQorCiBUaGUgOm1vZDpgbXNpbGliYCBzdXBwb3J0cyB0aGUgY3JlYXRpb24gb2YgTWljcm9zb2Z0IEluc3RhbGxlciAoYGAubXNpYGApIGZpbGVzLgogQmVjYXVzZSB0aGVzZSBmaWxlcyBvZnRlbiBjb250YWluIGFuIGVtYmVkZGVkICJjYWJpbmV0IiBmaWxlIChgYC5jYWJgYCksIGl0IGFsc28KIGV4cG9zZXMgYW4gQVBJIHRvIGNyZWF0ZSBDQUIgZmlsZXMuIFN1cHBvcnQgZm9yIHJlYWRpbmcgYGAuY2FiYGAgZmlsZXMgaXMKQEAgLTEyMCw5ICsxMjQsOSBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYEZDSUNyZWF0ZUZpbGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvZGV2bm90ZXMvd2lucHJvZy9mY2ljcmVhdGUuYXNwPmBfCi0gICBgVXVpZENyZWF0ZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9ycGMvcnBjL3V1aWRjcmVhdGUuYXNwPmBfCi0gICBgVXVpZFRvU3RyaW5nIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL3JwYy9ycGMvdXVpZHRvc3RyaW5nLmFzcD5gXworICAgYEZDSUNyZWF0ZUZpbGUgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL2Rldm5vdGVzL3dpbnByb2cvZmNpY3JlYXRlLmFzcD5gXworICAgYFV1aWRDcmVhdGUgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL3JwYy9ycGMvdXVpZGNyZWF0ZS5hc3A+YF8KKyAgIGBVdWlkVG9TdHJpbmcgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL3JwYy9ycGMvdXVpZHRvc3RyaW5nLmFzcD5gXwogCiAuLiBfZGF0YWJhc2Utb2JqZWN0czoKIApAQCAtMTUxLDkgKzE1NSw5IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgTVNJRGF0YWJhc2VPcGVuVmlldyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpZGF0YWJhc2VvcGVudmlldy5hc3A+YF8KLSAgIGBNU0lEYXRhYmFzZUNvbW1pdCA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpZGF0YWJhc2Vjb21taXQuYXNwPmBfCi0gICBgTVNJR2V0U3VtbWFyeUluZm9ybWF0aW9uIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lnZXRzdW1tYXJ5aW5mb3JtYXRpb24uYXNwPmBfCisgICBgTVNJRGF0YWJhc2VPcGVuVmlldyA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlb3BlbnZpZXcuYXNwPmBfCisgICBgTVNJRGF0YWJhc2VDb21taXQgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lkYXRhYmFzZWNvbW1pdC5hc3A+YF8KKyAgIGBNU0lHZXRTdW1tYXJ5SW5mb3JtYXRpb24gPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lnZXRzdW1tYXJ5aW5mb3JtYXRpb24uYXNwPmBfCiAKIC4uIF92aWV3LW9iamVjdHM6CiAKQEAgLTE5OSwxMSArMjAzLDExIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgTXNpVmlld0V4ZWN1dGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdleGVjdXRlLmFzcD5gXwotICAgYE1TSVZpZXdHZXRDb2x1bW5JbmZvIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3Z2V0Y29sdW1uaW5mby5hc3A+YF8KLSAgIGBNc2lWaWV3RmV0Y2ggPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdmZXRjaC5hc3A+YF8KLSAgIGBNc2lWaWV3TW9kaWZ5IDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3bW9kaWZ5LmFzcD5gXwotICAgYE1zaVZpZXdDbG9zZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2Nsb3NlLmFzcD5gXworICAgYE1zaVZpZXdFeGVjdXRlIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2V4ZWN1dGUuYXNwPmBfCisgICBgTVNJVmlld0dldENvbHVtbkluZm8gPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3Z2V0Y29sdW1uaW5mby5hc3A+YF8KKyAgIGBNc2lWaWV3RmV0Y2ggPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3ZmV0Y2guYXNwPmBfCisgICBgTXNpVmlld01vZGlmeSA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdtb2RpZnkuYXNwPmBfCisgICBgTXNpVmlld0Nsb3NlIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2Nsb3NlLmFzcD5gXwogCiAuLiBfc3VtbWFyeS1vYmplY3RzOgogCkBAIC0yNDMsMTAgKzI0NywxMCBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYE1zaVN1bW1hcnlJbmZvR2V0UHJvcGVydHkgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvZ2V0cHJvcGVydHkuYXNwPmBfCi0gICBgTXNpU3VtbWFyeUluZm9HZXRQcm9wZXJ0eUNvdW50IDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lzdW1tYXJ5aW5mb2dldHByb3BlcnR5Y291bnQuYXNwPmBfCi0gICBgTXNpU3VtbWFyeUluZm9TZXRQcm9wZXJ0eSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9zZXRwcm9wZXJ0eS5hc3A+YF8KLSAgIGBNc2lTdW1tYXJ5SW5mb1BlcnNpc3QgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvcGVyc2lzdC5hc3A+YF8KKyAgIGBNc2lTdW1tYXJ5SW5mb0dldFByb3BlcnR5IDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9nZXRwcm9wZXJ0eS5hc3A+YF8KKyAgIGBNc2lTdW1tYXJ5SW5mb0dldFByb3BlcnR5Q291bnQgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lzdW1tYXJ5aW5mb2dldHByb3BlcnR5Y291bnQuYXNwPmBfCisgICBgTXNpU3VtbWFyeUluZm9TZXRQcm9wZXJ0eSA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvc2V0cHJvcGVydHkuYXNwPmBfCisgICBgTXNpU3VtbWFyeUluZm9QZXJzaXN0IDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9wZXJzaXN0LmFzcD5gXwogCiAuLiBfcmVjb3JkLW9iamVjdHM6CiAKQEAgLTI5NywxMSArMzAxLDExIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgTXNpUmVjb3JkR2V0RmllbGRDb3VudCA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3JkZ2V0ZmllbGRjb3VudC5hc3A+YF8KLSAgIGBNc2lSZWNvcmRTZXRTdHJpbmcgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXJlY29yZHNldHN0cmluZy5hc3A+YF8KLSAgIGBNc2lSZWNvcmRTZXRTdHJlYW0gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXJlY29yZHNldHN0cmVhbS5hc3A+YF8KLSAgIGBNc2lSZWNvcmRTZXRJbnRlZ2VyIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRpbnRlZ2VyLmFzcD5gXwotICAgYE1zaVJlY29yZENsZWFyIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRjbGVhci5hc3A+YF8KKyAgIGBNc2lSZWNvcmRHZXRGaWVsZENvdW50IDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3JkZ2V0ZmllbGRjb3VudC5hc3A+YF8KKyAgIGBNc2lSZWNvcmRTZXRTdHJpbmcgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRzdHJpbmcuYXNwPmBfCisgICBgTXNpUmVjb3JkU2V0U3RyZWFtIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3Jkc2V0c3RyZWFtLmFzcD5gXworICAgYE1zaVJlY29yZFNldEludGVnZXIgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRpbnRlZ2VyLmFzcD5gXworICAgYE1zaVJlY29yZENsZWFyIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3JkY2xlYXIuYXNwPmBfCiAKIC4uIF9tc2ktZXJyb3JzOgogCkBAIC0zOTMsMTAgKzM5NywxMCBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYERpcmVjdG9yeSBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZGlyZWN0b3J5X3RhYmxlLmFzcD5gXwotICAgYEZpbGUgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2ZpbGVfdGFibGUuYXNwPmBfCi0gICBgQ29tcG9uZW50IFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9jb21wb25lbnRfdGFibGUuYXNwPmBfCi0gICBgRmVhdHVyZUNvbXBvbmVudHMgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2ZlYXR1cmVjb21wb25lbnRzX3RhYmxlLmFzcD5gXworICAgYERpcmVjdG9yeSBUYWJsZSA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2RpcmVjdG9yeV90YWJsZS5hc3A+YF8KKyAgIGBGaWxlIFRhYmxlIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmlsZV90YWJsZS5hc3A+YF8KKyAgIGBDb21wb25lbnQgVGFibGUgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9jb21wb25lbnRfdGFibGUuYXNwPmBfCisgICBgRmVhdHVyZUNvbXBvbmVudHMgVGFibGUgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9mZWF0dXJlY29tcG9uZW50c190YWJsZS5hc3A+YF8KIAogLi4gX2ZlYXR1cmVzOgogCkBAIC00MjEsNyArNDI1LDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBGZWF0dXJlIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9mZWF0dXJlX3RhYmxlLmFzcD5gXworICAgYEZlYXR1cmUgVGFibGUgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9mZWF0dXJlX3RhYmxlLmFzcD5gXwogCiAuLiBfbXNpLWd1aToKIApAQCAtNTE2LDEzICs1MjAsMTMgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBEaWFsb2cgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2RpYWxvZ190YWJsZS5hc3A+YF8KLSAgIGBDb250cm9sIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9jb250cm9sX3RhYmxlLmFzcD5gXwotICAgYENvbnRyb2wgVHlwZXMgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xzLmFzcD5gXwotICAgYENvbnRyb2xDb25kaXRpb24gVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xjb25kaXRpb25fdGFibGUuYXNwPmBfCi0gICBgQ29udHJvbEV2ZW50IFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9jb250cm9sZXZlbnRfdGFibGUuYXNwPmBfCi0gICBgRXZlbnRNYXBwaW5nIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9ldmVudG1hcHBpbmdfdGFibGUuYXNwPmBfCi0gICBgUmFkaW9CdXR0b24gVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL3JhZGlvYnV0dG9uX3RhYmxlLmFzcD5gXworICAgYERpYWxvZyBUYWJsZSA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2RpYWxvZ190YWJsZS5hc3A+YF8KKyAgIGBDb250cm9sIFRhYmxlIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvY29udHJvbF90YWJsZS5hc3A+YF8KKyAgIGBDb250cm9sIFR5cGVzIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvY29udHJvbHMuYXNwPmBfCisgICBgQ29udHJvbENvbmRpdGlvbiBUYWJsZSA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xjb25kaXRpb25fdGFibGUuYXNwPmBfCisgICBgQ29udHJvbEV2ZW50IFRhYmxlIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvY29udHJvbGV2ZW50X3RhYmxlLmFzcD5gXworICAgYEV2ZW50TWFwcGluZyBUYWJsZSA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2V2ZW50bWFwcGluZ190YWJsZS5hc3A+YF8KKyAgIGBSYWRpb0J1dHRvbiBUYWJsZSA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL3JhZGlvYnV0dG9uX3RhYmxlLmFzcD5gXwogCiAuLiBfbXNpLXRhYmxlczoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbXN2Y3J0LnJzdCBiL0RvYy9saWJyYXJ5L21zdmNydC5yc3QKaW5kZXggZmFkYWYwNS4uYjMzNGVlYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbXN2Y3J0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9tc3ZjcnQucnN0CkBAIC00LDggKzQsMTAgQEAKIC4uIG1vZHVsZTo6IG1zdmNydAogICAgOnBsYXRmb3JtOiBXaW5kb3dzCiAgICA6c3lub3BzaXM6IE1pc2NlbGxhbmVvdXMgdXNlZnVsIHJvdXRpbmVzIGZyb20gdGhlIE1TIFZDKysgcnVudGltZS4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIGFjY2VzcyB0byBzb21lIHVzZWZ1bCBjYXBhYmlsaXRpZXMgb24gV2luZG93cyBwbGF0Zm9ybXMuCiBTb21lIGhpZ2hlci1sZXZlbCBtb2R1bGVzIHVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gYnVpbGQgdGhlICBXaW5kb3dzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0IGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAppbmRleCBmN2RjMTFiLi5kMjAwOThmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBtdWx0aXByb2Nlc3NpbmcKICAgIDpzeW5vcHNpczogUHJvY2Vzcy1iYXNlZCBwYXJhbGxlbGlzbS4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvbXVsdGlwcm9jZXNzaW5nL2AKKworLS0tLS0tLS0tLS0tLS0KIAogSW50cm9kdWN0aW9uCiAtLS0tLS0tLS0tLS0KQEAgLTMxNiw3ICszMTksNyBAQAogICAgcHJveGllcy4KIAogICAgQSBtYW5hZ2VyIHJldHVybmVkIGJ5IDpmdW5jOmBNYW5hZ2VyYCB3aWxsIHN1cHBvcnQgdHlwZXMKLSAgIDpjbGFzczpgbGlzdGAsIDpjbGFzczpgZGljdGAsIDpjbGFzczpgTmFtZXNwYWNlYCwgOmNsYXNzOmBMb2NrYCwKKyAgIDpjbGFzczpgbGlzdGAsIDpjbGFzczpgZGljdGAsIDpjbGFzczpgfm1hbmFnZXJzLk5hbWVzcGFjZWAsIDpjbGFzczpgTG9ja2AsCiAgICA6Y2xhc3M6YFJMb2NrYCwgOmNsYXNzOmBTZW1hcGhvcmVgLCA6Y2xhc3M6YEJvdW5kZWRTZW1hcGhvcmVgLAogICAgOmNsYXNzOmBDb25kaXRpb25gLCA6Y2xhc3M6YEV2ZW50YCwgOmNsYXNzOmBCYXJyaWVyYCwKICAgIDpjbGFzczpgUXVldWVgLCA6Y2xhc3M6YFZhbHVlYCBhbmQgOmNsYXNzOmBBcnJheWAuICBGb3IgZXhhbXBsZSwgOjoKQEAgLTM2MSw4ICszNjQsOSBAQAogCiBGb3IgZXhhbXBsZTo6CiAKLSAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCi0gICBmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCisgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbCwgVGltZW91dEVycm9yCisgICBpbXBvcnQgdGltZQorICAgaW1wb3J0IG9zCiAKICAgIGRlZiBmKHgpOgogICAgICAgIHJldHVybiB4KngKQEAgLTM3OCwxNSArMzgyLDI5IEBACiAgICAgICAgICAgIGZvciBpIGluIHBvb2wuaW1hcF91bm9yZGVyZWQoZiwgcmFuZ2UoMTApKToKICAgICAgICAgICAgICAgIHByaW50KGkpCiAKLSAgICAgICAgICAgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5Ci0gICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkKLSAgICAgICAgICAgcHJpbnQocmVzLmdldCh0aW1lb3V0PTEpKSAgICAgICAgICAgICAjIHByaW50cyAiMTAwIgorICAgICAgICAgICAjIGV2YWx1YXRlICJmKDIwKSIgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhmLCAoMjAsKSkgICAgICAjIHJ1bnMgaW4gKm9ubHkqIG9uZSBwcm9jZXNzCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyBwcmludHMgIjQwMCIKIAotICAgICAgICAgICAjIG1ha2Ugd29ya2VyIHNsZWVwIGZvciAxMCBzZWNzCi0gICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoc2xlZXAsIFsxMF0pCi0gICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyByYWlzZXMgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcgorICAgICAgICAgICAjIGV2YWx1YXRlICJvcy5nZXRwaWQoKSIgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhvcy5nZXRwaWQsICgpKSAjIHJ1bnMgaW4gKm9ubHkqIG9uZSBwcm9jZXNzCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyBwcmludHMgdGhlIFBJRCBvZiB0aGF0IHByb2Nlc3MKKworICAgICAgICAgICAjIGxhdW5jaGluZyBtdWx0aXBsZSBldmFsdWF0aW9ucyBhc3luY2hyb25vdXNseSAqbWF5KiB1c2UgbW9yZSBwcm9jZXNzZXMKKyAgICAgICAgICAgbXVsdGlwbGVfcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKG9zLmdldHBpZCwgKCkpIGZvciBpIGluIHJhbmdlKDQpXQorICAgICAgICAgICBwcmludChbcmVzLmdldCh0aW1lb3V0PTEpIGZvciByZXMgaW4gbXVsdGlwbGVfcmVzdWx0c10pCisKKyAgICAgICAgICAgIyBtYWtlIGEgc2luZ2xlIHdvcmtlciBzbGVlcCBmb3IgMTAgc2VjcworICAgICAgICAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsICgxMCwpKQorICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICBwcmludChyZXMuZ2V0KHRpbWVvdXQ9MSkpCisgICAgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXJyb3I6CisgICAgICAgICAgICAgICBwcmludCgiV2UgbGFja2VkIHBhdGllbmNlIGFuZCBnb3QgYSBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yIikKKworICAgICAgICAgICBwcmludCgiRm9yIHRoZSBtb21lbnQsIHRoZSBwb29sIHJlbWFpbnMgYXZhaWxhYmxlIGZvciBtb3JlIHdvcmsiKQogCiAgICAgICAgIyBleGl0aW5nIHRoZSAnd2l0aCctYmxvY2sgaGFzIHN0b3BwZWQgdGhlIHBvb2wKKyAgICAgICBwcmludCgiTm93IHRoZSBwb29sIGlzIGNsb3NlZCBhbmQgbm8gbG9uZ2VyIGF2YWlsYWJsZSIpCiAKIE5vdGUgdGhhdCB0aGUgbWV0aG9kcyBvZiBhIHBvb2wgc2hvdWxkIG9ubHkgZXZlciBiZSB1c2VkIGJ5IHRoZQogcHJvY2VzcyB3aGljaCBjcmVhdGVkIGl0LgpAQCAtOTAxLDggKzkxOSwxMCBAQAogICAgSWYgdGhlIGBgZnJlZXplX3N1cHBvcnQoKWBgIGxpbmUgaXMgb21pdHRlZCB0aGVuIHRyeWluZyB0byBydW4gdGhlIGZyb3plbgogICAgZXhlY3V0YWJsZSB3aWxsIHJhaXNlIDpleGM6YFJ1bnRpbWVFcnJvcmAuCiAKLSAgIElmIHRoZSBtb2R1bGUgaXMgYmVpbmcgcnVuIG5vcm1hbGx5IGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdGhlbgotICAgOmZ1bmM6YGZyZWV6ZV9zdXBwb3J0YCBoYXMgbm8gZWZmZWN0LgorICAgQ2FsbGluZyBgYGZyZWV6ZV9zdXBwb3J0KClgYCBoYXMgbm8gZWZmZWN0IHdoZW4gaW52b2tlZCBvbiBhbnkgb3BlcmF0aW5nCisgICBzeXN0ZW0gb3RoZXIgdGhhbiBXaW5kb3dzLiAgSW4gYWRkaXRpb24sIGlmIHRoZSBtb2R1bGUgaXMgYmVpbmcgcnVuCisgICBub3JtYWxseSBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIG9uIFdpbmRvd3MgKHRoZSBwcm9ncmFtIGhhcyBub3QgYmVlbgorICAgZnJvemVuKSwgdGhlbiBgYGZyZWV6ZV9zdXBwb3J0KClgYCBoYXMgbm8gZWZmZWN0LgogCiAuLiBmdW5jdGlvbjo6IGdldF9hbGxfc3RhcnRfbWV0aG9kcygpCiAKQEAgLTk5MCw3ICsxMDEwLDcgQEAKICAgICAgIHVzaW5nIDptZXRoOmByZWN2YC4KIAogICAgICAgVGhlIG9iamVjdCBtdXN0IGJlIHBpY2tsYWJsZS4gIFZlcnkgbGFyZ2UgcGlja2xlcyAoYXBwcm94aW1hdGVseSAzMiBNQissCi0gICAgICB0aG91Z2ggaXQgZGVwZW5kcyBvbiB0aGUgT1MpIG1heSByYWlzZSBhIFZhbHVlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgdGhvdWdoIGl0IGRlcGVuZHMgb24gdGhlIE9TKSBtYXkgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBleGNlcHRpb24uCiAKICAgIC4uIG1ldGhvZDo6IHJlY3YoKQogCkBAIC0xNDU4LDYgKzE0NzgsOSBAQAogICAgTm90ZSB0aGF0IGFjY2Vzc2luZyB0aGUgY3R5cGVzIG9iamVjdCB0aHJvdWdoIHRoZSB3cmFwcGVyIGNhbiBiZSBhIGxvdCBzbG93ZXIKICAgIHRoYW4gYWNjZXNzaW5nIHRoZSByYXcgY3R5cGVzIG9iamVjdC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFN5bmNocm9uaXplZCBvYmplY3RzIHN1cHBvcnQgdGhlIDp0ZXJtOmBjb250ZXh0IG1hbmFnZXJgIHByb3RvY29sLgorCiAKIFRoZSB0YWJsZSBiZWxvdyBjb21wYXJlcyB0aGUgc3ludGF4IGZvciBjcmVhdGluZyBzaGFyZWQgY3R5cGVzIG9iamVjdHMgZnJvbQogc2hhcmVkIG1lbW9yeSB3aXRoIHRoZSBub3JtYWwgY3R5cGVzIHN5bnRheC4gIChJbiB0aGUgdGFibGUgYGBNeVN0cnVjdGBgIGlzIHNvbWUKQEAgLTE3NDIsMjQgKzE3NjUsMjYgQEAKICAgICAgICAgIGxwcm94eVswXSA9IGQKIAogCi1OYW1lc3BhY2Ugb2JqZWN0cwotPj4+Pj4+Pj4+Pj4+Pj4+Pj4KKy4uIGNsYXNzOjogTmFtZXNwYWNlCiAKLUEgbmFtZXNwYWNlIG9iamVjdCBoYXMgbm8gcHVibGljIG1ldGhvZHMsIGJ1dCBkb2VzIGhhdmUgd3JpdGFibGUgYXR0cmlidXRlcy4KLUl0cyByZXByZXNlbnRhdGlvbiBzaG93cyB0aGUgdmFsdWVzIG9mIGl0cyBhdHRyaWJ1dGVzLgorICAgQSB0eXBlIHRoYXQgY2FuIHJlZ2lzdGVyIHdpdGggOmNsYXNzOmBTeW5jTWFuYWdlcmAuCiAKLUhvd2V2ZXIsIHdoZW4gdXNpbmcgYSBwcm94eSBmb3IgYSBuYW1lc3BhY2Ugb2JqZWN0LCBhbiBhdHRyaWJ1dGUgYmVnaW5uaW5nIHdpdGgKLWBgJ18nYGAgd2lsbCBiZSBhbiBhdHRyaWJ1dGUgb2YgdGhlIHByb3h5IGFuZCBub3QgYW4gYXR0cmlidXRlIG9mIHRoZSByZWZlcmVudDoKKyAgIEEgbmFtZXNwYWNlIG9iamVjdCBoYXMgbm8gcHVibGljIG1ldGhvZHMsIGJ1dCBkb2VzIGhhdmUgd3JpdGFibGUgYXR0cmlidXRlcy4KKyAgIEl0cyByZXByZXNlbnRhdGlvbiBzaG93cyB0aGUgdmFsdWVzIG9mIGl0cyBhdHRyaWJ1dGVzLgogCi0uLiBkb2N0ZXN0OjoKKyAgIEhvd2V2ZXIsIHdoZW4gdXNpbmcgYSBwcm94eSBmb3IgYSBuYW1lc3BhY2Ugb2JqZWN0LCBhbiBhdHRyaWJ1dGUgYmVnaW5uaW5nCisgICB3aXRoIGBgJ18nYGAgd2lsbCBiZSBhbiBhdHRyaWJ1dGUgb2YgdGhlIHByb3h5IGFuZCBub3QgYW4gYXR0cmlidXRlIG9mIHRoZQorICAgcmVmZXJlbnQ6CiAKLSAgID4+PiBtYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotICAgPj4+IEdsb2JhbCA9IG1hbmFnZXIuTmFtZXNwYWNlKCkKLSAgID4+PiBHbG9iYWwueCA9IDEwCi0gICA+Pj4gR2xvYmFsLnkgPSAnaGVsbG8nCi0gICA+Pj4gR2xvYmFsLl96ID0gMTIuMyAgICAjIHRoaXMgaXMgYW4gYXR0cmlidXRlIG9mIHRoZSBwcm94eQotICAgPj4+IHByaW50KEdsb2JhbCkKLSAgIE5hbWVzcGFjZSh4PTEwLCB5PSdoZWxsbycpCisgICAuLiBkb2N0ZXN0OjoKKworICAgID4+PiBtYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQorICAgID4+PiBHbG9iYWwgPSBtYW5hZ2VyLk5hbWVzcGFjZSgpCisgICAgPj4+IEdsb2JhbC54ID0gMTAKKyAgICA+Pj4gR2xvYmFsLnkgPSAnaGVsbG8nCisgICAgPj4+IEdsb2JhbC5feiA9IDEyLjMgICAgIyB0aGlzIGlzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgcHJveHkKKyAgICA+Pj4gcHJpbnQoR2xvYmFsKQorICAgIE5hbWVzcGFjZSh4PTEwLCB5PSdoZWxsbycpCiAKIAogQ3VzdG9taXplZCBtYW5hZ2VycwpAQCAtMTk0NSw5ICsxOTcwLDkgQEAKICAgICAgICAgID4+PiBsID0gbWFuYWdlci5saXN0KHJhbmdlKDEwKSkKICAgICAgICAgID4+PiBsLl9jYWxsbWV0aG9kKCdfX2xlbl9fJykKICAgICAgICAgIDEwCi0gICAgICAgICA+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoc2xpY2UoMiwgNyksKSkgICMgZXF1aXYgdG8gYGxbMjo3XWAKKyAgICAgICAgID4+PiBsLl9jYWxsbWV0aG9kKCdfX2dldGl0ZW1fXycsIChzbGljZSgyLCA3KSwpKSAjIGVxdWl2YWxlbnQgdG8gbFsyOjddCiAgICAgICAgICBbMiwgMywgNCwgNSwgNl0KLSAgICAgICAgID4+PiBsLl9jYWxsbWV0aG9kKCdfX2dldGl0ZW1fXycsICgyMCwpKSAgICAgIyBlcXVpdiB0byBgbFsyMF1gCisgICAgICAgICA+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoMjAsKSkgICAgICAgICAgIyBlcXVpdmFsZW50IHRvIGxbMjBdCiAgICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgICAuLi4KICAgICAgICAgIEluZGV4RXJyb3I6IGxpc3QgaW5kZXggb3V0IG9mIHJhbmdlCkBAIC0yMTY0LDEzICsyMTg5LDE0IEBACiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgYSBwb29sOjoKIAogICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wKKyAgIGltcG9ydCB0aW1lCiAKICAgIGRlZiBmKHgpOgogICAgICAgIHJldHVybiB4KngKIAogICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6ICAgICAgICAgIyBzdGFydCA0IHdvcmtlciBwcm9jZXNzZXMKLSAgICAgICAgICAgcmVzdWx0ID0gcG9vbC5hcHBseV9hc3luYyhmLCAoMTAsKSkgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5CisgICAgICAgICAgIHJlc3VsdCA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgKDEwLCkpICMgZXZhbHVhdGUgImYoMTApIiBhc3luY2hyb25vdXNseSBpbiBhIHNpbmdsZSBwcm9jZXNzCiAgICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQodGltZW91dD0xKSkgICAgICAgICMgcHJpbnRzICIxMDAiIHVubGVzcyB5b3VyIGNvbXB1dGVyIGlzICp2ZXJ5KiBzbG93CiAKICAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgcmFuZ2UoMTApKSkgICAgICAgIyBwcmludHMgIlswLCAxLCA0LC4uLiwgODFdIgpAQCAtMjE4MCw5ICsyMjA2LDggQEAKICAgICAgICAgICAgcHJpbnQobmV4dChpdCkpICAgICAgICAgICAgICAgICAgICAgIyBwcmludHMgIjEiCiAgICAgICAgICAgIHByaW50KGl0Lm5leHQodGltZW91dD0xKSkgICAgICAgICAgICMgcHJpbnRzICI0IiB1bmxlc3MgeW91ciBjb21wdXRlciBpcyAqdmVyeSogc2xvdwogCi0gICAgICAgICAgIGltcG9ydCB0aW1lCiAgICAgICAgICAgIHJlc3VsdCA9IHBvb2wuYXBwbHlfYXN5bmModGltZS5zbGVlcCwgKDEwLCkpCi0gICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQodGltZW91dD0xKSkgICAgICAgICMgcmFpc2VzIFRpbWVvdXRFcnJvcgorICAgICAgICAgICBwcmludChyZXN1bHQuZ2V0KHRpbWVvdXQ9MSkpICAgICAgICAjIHJhaXNlcyBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yCiAKIAogLi4gX211bHRpcHJvY2Vzc2luZy1saXN0ZW5lcnMtY2xpZW50czoKQEAgLTI0NTYsNyArMjQ4MSw3IEBACiAKIElmIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZCBidXQgbm8gYXV0aGVudGljYXRpb24ga2V5IGlzIHNwZWNpZmllZCB0aGVuIHRoZQogcmV0dXJuIHZhbHVlIG9mIGBgY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleWBgIGlzIHVzZWQgKHNlZQotOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NgKS4gIFRoaXMgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBieQorOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NgKS4gIFRoaXMgdmFsdWUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBieQogYW55IDpjbGFzczpgfm11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzYCBvYmplY3QgdGhhdCB0aGUgY3VycmVudCBwcm9jZXNzIGNyZWF0ZXMuCiBUaGlzIG1lYW5zIHRoYXQgKGJ5IGRlZmF1bHQpIGFsbCBwcm9jZXNzZXMgb2YgYSBtdWx0aS1wcm9jZXNzIHByb2dyYW0gd2lsbCBzaGFyZQogYSBzaW5nbGUgYXV0aGVudGljYXRpb24ga2V5IHdoaWNoIGNhbiBiZSB1c2VkIHdoZW4gc2V0dGluZyB1cCBjb25uZWN0aW9ucwpAQCAtMjY0MSw4ICsyNjY2LDggQEAKICAgICAgICAgICAgIC4uLiBkbyBzb21ldGhpbmcgdXNpbmcgImxvY2siIC4uLgogCiAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgIGxvY2sgPSBMb2NrKCkKLSAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgbG9jayA9IExvY2soKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgogICAgICAgICAgICAgICAgIFByb2Nlc3ModGFyZ2V0PWYpLnN0YXJ0KCkKIAogICAgIHNob3VsZCBiZSByZXdyaXR0ZW4gYXMgOjoKQEAgLTI2NTMsOCArMjY3OCw4IEBACiAgICAgICAgICAgICAuLi4gZG8gc29tZXRoaW5nIHVzaW5nICJsIiAuLi4KIAogICAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgICAgICBsb2NrID0gTG9jaygpCi0gICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICAgICAgICAgICBQcm9jZXNzKHRhcmdldD1mLCBhcmdzPShsb2NrLCkpLnN0YXJ0KCkKIAogQmV3YXJlIG9mIHJlcGxhY2luZyA6ZGF0YTpgc3lzLnN0ZGluYCB3aXRoIGEgImZpbGUgbGlrZSBvYmplY3QiCkBAIC0yNjY3LDcgKzI2OTIsNyBAQAogICAgIGluIGlzc3VlcyB3aXRoIHByb2Nlc3Nlcy1pbi1wcm9jZXNzZXMuIFRoaXMgaGFzIGJlZW4gY2hhbmdlZCB0bzo6CiAKICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgc3lzLnN0ZGluID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBzeXMuc3RkaW4gPSBvcGVuKG9zLm9wZW4ob3MuZGV2bnVsbCwgb3MuT19SRE9OTFkpLCBjbG9zZWZkPUZhbHNlKQogCiAgICAgV2hpY2ggc29sdmVzIHRoZSBmdW5kYW1lbnRhbCBpc3N1ZSBvZiBwcm9jZXNzZXMgY29sbGlkaW5nIHdpdGggZWFjaCBvdGhlcgogICAgIHJlc3VsdGluZyBpbiBhIGJhZCBmaWxlIGRlc2NyaXB0b3IgZXJyb3IsIGJ1dCBpbnRyb2R1Y2VzIGEgcG90ZW50aWFsIGRhbmdlcgpAQCAtMjY5OCwxMiArMjcyMyw3IEBACiAKIE1vcmUgcGlja2xhYmlsaXR5CiAKLSAgICBFbnN1cmUgdGhhdCBhbGwgYXJndW1lbnRzIHRvIDptZXRoOmBQcm9jZXNzLl9faW5pdF9fYCBhcmUKLSAgICBwaWNrbGFibGUuICBUaGlzIG1lYW5zLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IGJvdW5kIG9yIHVuYm91bmQKLSAgICBtZXRob2RzIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSBgYHRhcmdldGBgICh1bmxlc3MgeW91IHVzZQotICAgIHRoZSAqZm9yayogc3RhcnQgbWV0aG9kKSAtLS0ganVzdCBkZWZpbmUgYSBmdW5jdGlvbiBhbmQgdXNlIHRoYXQKLSAgICBpbnN0ZWFkLgotCisgICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlIHBpY2tsYWJsZS4KICAgICBBbHNvLCBpZiB5b3Ugc3ViY2xhc3MgOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NgIHRoZW4gbWFrZSBzdXJlIHRoYXQKICAgICBpbnN0YW5jZXMgd2lsbCBiZSBwaWNrbGFibGUgd2hlbiB0aGUgOm1ldGg6YFByb2Nlc3Muc3RhcnQKICAgICA8bXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc3RhcnQ+YCBtZXRob2QgaXMgY2FsbGVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbmV0cmMucnN0IGIvRG9jL2xpYnJhcnkvbmV0cmMucnN0CmluZGV4IDIzZmZlZDYuLmNkYzI2MTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L25ldHJjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKQEAgLTQsNiArNCw3IEBACiAKIC4uIG1vZHVsZTo6IG5ldHJjCiAgICA6c3lub3BzaXM6IExvYWRpbmcgb2YgLm5ldHJjIGZpbGVzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbmlzLnJzdCBiL0RvYy9saWJyYXJ5L25pcy5yc3QKaW5kZXggYWRlMmE3YS4uMTBjNjdjYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbmlzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9uaXMucnN0CkBAIC01LDkgKzUsMTEgQEAKIC4uIG1vZHVsZTo6IG5pcwogICAgOnBsYXRmb3JtOiBVbml4CiAgICA6c3lub3BzaXM6IEludGVyZmFjZSB0byBTdW4ncyBOSVMgKFllbGxvdyBQYWdlcykgbGlicmFyeS4KKwogLi4gbW9kdWxlYXV0aG9yOjogRnJlZCBHYW5zZXZsZXMgPEZyZWQuR2Fuc2V2bGVzQGNzLnV0d2VudGUubmw+CiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgbmlzYCBtb2R1bGUgZ2l2ZXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHRoZSBOSVMgbGlicmFyeSwgdXNlZnVsIGZvcgogY2VudHJhbCBhZG1pbmlzdHJhdGlvbiBvZiBzZXZlcmFsIGhvc3RzLgpAQCAtMjYsNyArMjgsNyBAQAogCiAgICBOb3RlIHRoYXQgKm1hcG5hbWUqIGlzIGZpcnN0IGNoZWNrZWQgaWYgaXQgaXMgYW4gYWxpYXMgdG8gYW5vdGhlciBuYW1lLgogCi0gICBUaGUgKmRvbWFpbiogYXJndW1lbnQgYWxsb3dzIHRvIG92ZXJyaWRlIHRoZSBOSVMgZG9tYWluIHVzZWQgZm9yIHRoZSBsb29rdXAuIElmCisgICBUaGUgKmRvbWFpbiogYXJndW1lbnQgYWxsb3dzIG92ZXJyaWRpbmcgdGhlIE5JUyBkb21haW4gdXNlZCBmb3IgdGhlIGxvb2t1cC4gSWYKICAgIHVuc3BlY2lmaWVkLCBsb29rdXAgaXMgaW4gdGhlIGRlZmF1bHQgTklTIGRvbWFpbi4KIAogCkBAIC0zOCw3ICs0MCw3IEBACiAKICAgIE5vdGUgdGhhdCAqbWFwbmFtZSogaXMgZmlyc3QgY2hlY2tlZCBpZiBpdCBpcyBhbiBhbGlhcyB0byBhbm90aGVyIG5hbWUuCiAKLSAgIFRoZSAqZG9tYWluKiBhcmd1bWVudCBhbGxvd3MgdG8gb3ZlcnJpZGUgdGhlIE5JUyBkb21haW4gdXNlZCBmb3IgdGhlIGxvb2t1cC4gSWYKKyAgIFRoZSAqZG9tYWluKiBhcmd1bWVudCBhbGxvd3Mgb3ZlcnJpZGluZyB0aGUgTklTIGRvbWFpbiB1c2VkIGZvciB0aGUgbG9va3VwLiBJZgogICAgdW5zcGVjaWZpZWQsIGxvb2t1cCBpcyBpbiB0aGUgZGVmYXVsdCBOSVMgZG9tYWluLgogCiAKQEAgLTQ2LDcgKzQ4LDcgQEAKIAogICAgUmV0dXJuIGEgbGlzdCBvZiBhbGwgdmFsaWQgbWFwcy4KIAotICAgVGhlICpkb21haW4qIGFyZ3VtZW50IGFsbG93cyB0byBvdmVycmlkZSB0aGUgTklTIGRvbWFpbiB1c2VkIGZvciB0aGUgbG9va3VwLiBJZgorICAgVGhlICpkb21haW4qIGFyZ3VtZW50IGFsbG93cyBvdmVycmlkaW5nIHRoZSBOSVMgZG9tYWluIHVzZWQgZm9yIHRoZSBsb29rdXAuIElmCiAgICB1bnNwZWNpZmllZCwgbG9va3VwIGlzIGluIHRoZSBkZWZhdWx0IE5JUyBkb21haW4uCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAppbmRleCA5ZmIxYjQ1Li45NzkwZTNhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdApAQCAtNCwxMyArNCwxMiBAQAogLi4gbW9kdWxlOjogbm50cGxpYgogICAgOnN5bm9wc2lzOiBOTlRQIHByb3RvY29sIGNsaWVudCAocmVxdWlyZXMgc29ja2V0cykuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL25udHBsaWIucHlgCiAKIC4uIGluZGV4OjoKICAgIHBhaXI6IE5OVFA7IHByb3RvY29sCiAgICBzaW5nbGU6IE5ldHdvcmsgTmV3cyBUcmFuc2ZlciBQcm90b2NvbAogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9ubnRwbGliLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBjbGFzcyA6Y2xhc3M6YE5OVFBgIHdoaWNoIGltcGxlbWVudHMgdGhlIGNsaWVudCBzaWRlIG9mCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9udW1iZXJzLnJzdCBiL0RvYy9saWJyYXJ5L251bWJlcnMucnN0CmluZGV4IDhhYjA3ZDAuLjFiNTk0OTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L251bWJlcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L251bWJlcnMucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogbnVtYmVycwogICAgOnN5bm9wc2lzOiBOdW1lcmljIGFic3RyYWN0IGJhc2UgY2xhc3NlcyAoQ29tcGxleCwgUmVhbCwgSW50ZWdyYWwsIGV0Yy4pLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9udW1iZXJzLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgbnVtYmVyc2AgbW9kdWxlICg6cGVwOmAzMTQxYCkgZGVmaW5lcyBhIGhpZXJhcmNoeSBvZiBudW1lcmljCiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIDxhYnN0cmFjdCBiYXNlIGNsYXNzPmAgd2hpY2ggcHJvZ3Jlc3NpdmVseSBkZWZpbmUKQEAgLTM1LDcgKzM4LDcgQEAKIAogICAgICAgQWJzdHJhY3QuIFJldHJpZXZlcyB0aGUgaW1hZ2luYXJ5IGNvbXBvbmVudCBvZiB0aGlzIG51bWJlci4KIAotICAgLi4gbWV0aG9kOjogY29uanVnYXRlKCkKKyAgIC4uIGFic3RyYWN0bWV0aG9kOjogY29uanVnYXRlKCkKIAogICAgICAgQWJzdHJhY3QuIFJldHVybnMgdGhlIGNvbXBsZXggY29uanVnYXRlLiBGb3IgZXhhbXBsZSwgYGAoMSszaikuY29uanVnYXRlKCkKICAgICAgID09ICgxLTNqKWBgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0IGIvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CmluZGV4IGY5ZTJhM2QuLjgxMjFiNDggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKQEAgLTMsMTYgKzMsMTYgQEAKIAogLi4gbW9kdWxlOjogb3BlcmF0b3IKICAgIDpzeW5vcHNpczogRnVuY3Rpb25zIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN0YW5kYXJkIG9wZXJhdG9ycy4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IFNraXAgTW9udGFuYXJvIDxza2lwQGF1dG9tYXRyaXguY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9vcGVyYXRvci5weWAKIAogLi4gdGVzdHNldHVwOjoKIAogICAgaW1wb3J0IG9wZXJhdG9yCiAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyLCBpYWRkCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL29wZXJhdG9yLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgb3BlcmF0b3JgIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGVmZmljaWVudCBmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0bwpAQCAtMTM4LDYgKzEzOCwxNCBAQAogICAgUmV0dXJuIGBgYSAqIGJgYCwgZm9yICphKiBhbmQgKmIqIG51bWJlcnMuCiAKIAorLi4gZnVuY3Rpb246OiBtYXRtdWwoYSwgYikKKyAgICAgICAgICAgICAgX19tYXRtdWxfXyhhLCBiKQorCisgICBSZXR1cm4gYGBhIEAgYmBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBmdW5jdGlvbjo6IG5lZyhvYmopCiAgICAgICAgICAgICAgIF9fbmVnX18ob2JqKQogCkBAIC0zOTEsNiArMzk5LDggQEAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgTXVsdGlwbGljYXRpb24gICAgICAgIHwgYGBhICogYmBgICAgICAgICAgICAgICAgfCBgYG11bChhLCBiKWBgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgTWF0cml4IE11bHRpcGxpY2F0aW9uIHwgYGBhIEAgYmBgICAgICAgICAgICAgICAgfCBgYG1hdG11bChhLCBiKWBgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgTmVnYXRpb24gKEFyaXRobWV0aWMpIHwgYGAtIGFgYCAgICAgICAgICAgICAgICAgfCBgYG5lZyhhKWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgTmVnYXRpb24gKExvZ2ljYWwpICAgIHwgYGBub3QgYWBgICAgICAgICAgICAgICAgfCBgYG5vdF8oYSlgYCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTQ5OSw2ICs1MDksMTQgQEAKICAgIGBgYSA9IGltdWwoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSAqPSBiYGAuCiAKIAorLi4gZnVuY3Rpb246OiBpbWF0bXVsKGEsIGIpCisgICAgICAgICAgICAgIF9faW1hdG11bF9fKGEsIGIpCisKKyAgIGBgYSA9IGltYXRtdWwoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSBAPSBiYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKIC4uIGZ1bmN0aW9uOjogaW9yKGEsIGIpCiAgICAgICAgICAgICAgIF9faW9yX18oYSwgYikKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0IGIvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0CmluZGV4IDE2MGMyOWQuLmU1ZjQwZjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QKQEAgLTQsMTUgKzQsMTYgQEAKIC4uIG1vZHVsZTo6IG9wdHBhcnNlCiAgICA6c3lub3BzaXM6IENvbW1hbmQtbGluZSBvcHRpb24gcGFyc2luZyBsaWJyYXJ5LgogICAgOmRlcHJlY2F0ZWQ6CisKIC4uIG1vZHVsZWF1dGhvcjo6IEdyZWcgV2FyZCA8Z3dhcmRAcHl0aG9uLm5ldD4KIC4uIHNlY3Rpb25hdXRob3I6OiBHcmVnIFdhcmQgPGd3YXJkQHB5dGhvbi5uZXQ+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL29wdHBhcnNlLnB5YAorCiAuLiBkZXByZWNhdGVkOjogMy4yCiAgICBUaGUgOm1vZDpgb3B0cGFyc2VgIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIG5vdCBiZSBkZXZlbG9wZWQgZnVydGhlcjsKICAgIGRldmVsb3BtZW50IHdpbGwgY29udGludWUgd2l0aCB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZS4KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvb3B0cGFyc2UucHlgCi0KIC0tLS0tLS0tLS0tLS0tCiAKIDptb2Q6YG9wdHBhcnNlYCBpcyBhIG1vcmUgY29udmVuaWVudCwgZmxleGlibGUsIGFuZCBwb3dlcmZ1bCBsaWJyYXJ5IGZvciBwYXJzaW5nCkBAIC0yNSw3ICsyNiw3IEBACiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiB1c2luZyA6bW9kOmBvcHRwYXJzZWAgaW4gYSBzaW1wbGUgc2NyaXB0OjoKIAogICAgZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCi0gICBbLi4uXQorICAgLi4uCiAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoKQogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsIGRlc3Q9ImZpbGVuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IndyaXRlIHJlcG9ydCB0byBGSUxFIiwgbWV0YXZhcj0iRklMRSIpCkBAIC0yNTIsNyArMjUzLDcgQEAKIHByb2dyYW0sIGNyZWF0ZSBhbiBPcHRpb25QYXJzZXIgaW5zdGFuY2U6OgogCiAgICBmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKLSAgIFsuLi5dCisgICAuLi4KICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcigpCiAKIFRoZW4geW91IGNhbiBzdGFydCBkZWZpbmluZyBvcHRpb25zLiAgVGhlIGJhc2ljIHN5bnRheCBpczo6CkBAIC02NzcsNyArNjc4LDkgQEAKIHRoaXMgb3B0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0IGV4cGFuZHMgeW91ciBgYHZlcnNpb25gYCBzdHJpbmcgKGJ5CiByZXBsYWNpbmcgYGAlcHJvZ2BgKSwgcHJpbnRzIGl0IHRvIHN0ZG91dCwgYW5kIGV4aXRzLgogCi1Gb3IgZXhhbXBsZSwgaWYgeW91ciBzY3JpcHQgaXMgY2FsbGVkIGBgL3Vzci9iaW4vZm9vYGA6OgorRm9yIGV4YW1wbGUsIGlmIHlvdXIgc2NyaXB0IGlzIGNhbGxlZCBgYC91c3IvYmluL2Zvb2BgOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAkIC91c3IvYmluL2ZvbyAtLXZlcnNpb24KICAgIGZvbyAxLjAKQEAgLTcxOCw3ICs3MjEsNyBAQAogY29uZGl0aW9uOjoKIAogICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotICAgWy4uLl0KKyAgIC4uLgogICAgaWYgb3B0aW9ucy5hIGFuZCBvcHRpb25zLmI6CiAgICAgICAgcGFyc2VyLmVycm9yKCJvcHRpb25zIC1hIGFuZCAtYiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIikKIApAQCAtNzI3LDE0ICs3MzAsMTggQEAKIGVycm9yIHN0YXR1cyAyLgogCiBDb25zaWRlciB0aGUgZmlyc3QgZXhhbXBsZSBhYm92ZSwgd2hlcmUgdGhlIHVzZXIgcGFzc2VzIGBgNHhgYCB0byBhbiBvcHRpb24KLXRoYXQgdGFrZXMgYW4gaW50ZWdlcjo6Cit0aGF0IHRha2VzIGFuIGludGVnZXI6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgL3Vzci9iaW4vZm9vIC1uIDR4CiAgICBVc2FnZTogZm9vIFtvcHRpb25zXQogCiAgICBmb286IGVycm9yOiBvcHRpb24gLW46IGludmFsaWQgaW50ZWdlciB2YWx1ZTogJzR4JwogCi1Pciwgd2hlcmUgdGhlIHVzZXIgZmFpbHMgdG8gcGFzcyBhIHZhbHVlIGF0IGFsbDo6CitPciwgd2hlcmUgdGhlIHVzZXIgZmFpbHMgdG8gcGFzcyBhIHZhbHVlIGF0IGFsbDoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCAvdXNyL2Jpbi9mb28gLW4KICAgIFVzYWdlOiBmb28gW29wdGlvbnNdCkBAIC03NTgsNyArNzY1LDcgQEAKIEhlcmUncyB3aGF0IDptb2Q6YG9wdHBhcnNlYFwgLWJhc2VkIHNjcmlwdHMgdXN1YWxseSBsb29rIGxpa2U6OgogCiAgICBmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKLSAgIFsuLi5dCisgICAuLi4KICAgIGRlZiBtYWluKCk6CiAgICAgICAgdXNhZ2UgPSAidXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBhcmciCiAgICAgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlKQpAQCAtNzY4LDEzICs3NzUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ2ZXJib3NlIikKICAgICAgICBwYXJzZXIuYWRkX29wdGlvbigiLXEiLCAiLS1xdWlldCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InZlcmJvc2UiKQotICAgICAgIFsuLi5dCisgICAgICAgLi4uCiAgICAgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgICAgIGlmIGxlbihhcmdzKSAhPSAxOgogICAgICAgICAgICBwYXJzZXIuZXJyb3IoImluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIikKICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CiAgICAgICAgICAgIHByaW50KCJyZWFkaW5nICVzLi4uIiAlIG9wdGlvbnMuZmlsZW5hbWUpCi0gICAgICAgWy4uLl0KKyAgICAgICAuLi4KIAogICAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICAgICBtYWluKCkKQEAgLTE0MDksNyArMTQxNiw3IEBACiBzdHJpbmdzOjoKIAogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1uIiwgIi0tZHJ5LXJ1biIsIC4uLikKLSAgIFsuLi5dCisgICAuLi4KICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsICItLW5vaXN5IiwgLi4uKQogCiAoVGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSBpZiB5b3UndmUgZGVmaW5lZCB5b3VyIG93biBPcHRpb25QYXJzZXIgc3ViY2xhc3Mgd2l0aApAQCAtMTQ1MCw3ICsxNDU3LDcgQEAKIAogICAgT3B0aW9uczoKICAgICAgLS1kcnktcnVuICAgICBkbyBubyBoYXJtCi0gICAgIFsuLi5dCisgICAgIC4uLgogICAgICAtbiwgLS1ub2lzeSAgIGJlIG5vaXN5CiAKIEl0J3MgcG9zc2libGUgdG8gd2hpdHRsZSBhd2F5IHRoZSBvcHRpb24gc3RyaW5ncyBmb3IgYSBwcmV2aW91c2x5LWFkZGVkIG9wdGlvbgpAQCAtMTQ2NSw3ICsxNDcyLDcgQEAKIGFjY2Vzc2libGUsIHNvIDptb2Q6YG9wdHBhcnNlYCByZW1vdmVzIGl0LCBsZWF2aW5nIHRoaXMgaGVscCB0ZXh0OjoKIAogICAgT3B0aW9uczoKLSAgICAgWy4uLl0KKyAgICAgLi4uCiAgICAgIC1uLCAtLW5vaXN5ICAgYmUgbm9pc3kKICAgICAgLS1kcnktcnVuICAgICBuZXcgZHJ5LXJ1biBvcHRpb24KIApAQCAtMTcwMSw3ICsxNzA4LDcgQEAKICAgICAgICBpZiBwYXJzZXIudmFsdWVzLmI6CiAgICAgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoImNhbid0IHVzZSAtYSBhZnRlciAtYiIpCiAgICAgICAgcGFyc2VyLnZhbHVlcy5hID0gMQotICAgWy4uLl0KKyAgIC4uLgogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPWNoZWNrX29yZGVyKQogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iYiIpCiAKQEAgLTE3MTksNyArMTcyNiw3IEBACiAgICAgICAgaWYgcGFyc2VyLnZhbHVlcy5iOgogICAgICAgICAgICByYWlzZSBPcHRpb25WYWx1ZUVycm9yKCJjYW4ndCB1c2UgJXMgYWZ0ZXIgLWIiICUgb3B0X3N0cikKICAgICAgICBzZXRhdHRyKHBhcnNlci52YWx1ZXMsIG9wdGlvbi5kZXN0LCAxKQotICAgWy4uLl0KKyAgIC4uLgogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPWNoZWNrX29yZGVyLCBkZXN0PSdhJykKICAgIHBhcnNlci5hZGRfb3B0aW9uKCItYiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImIiKQogICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPWNoZWNrX29yZGVyLCBkZXN0PSdjJykKQEAgLTE3MzksNyArMTc0Niw3IEBACiAgICAgICAgICAgIHJhaXNlIE9wdGlvblZhbHVlRXJyb3IoIiVzIG9wdGlvbiBpbnZhbGlkIHdoZW4gbW9vbiBpcyBmdWxsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb3B0X3N0cikKICAgICAgICBzZXRhdHRyKHBhcnNlci52YWx1ZXMsIG9wdGlvbi5kZXN0LCAxKQotICAgWy4uLl0KKyAgIC4uLgogICAgcGFyc2VyLmFkZF9vcHRpb24oIi0tZm9vIiwKICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz1jaGVja19tb29uLCBkZXN0PSJmb28iKQogCkBAIC0xNzYyLDcgKzE3NjksNyBAQAogCiAgICBkZWYgc3RvcmVfdmFsdWUob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKICAgICAgICBzZXRhdHRyKHBhcnNlci52YWx1ZXMsIG9wdGlvbi5kZXN0LCB2YWx1ZSkKLSAgIFsuLi5dCisgICAuLi4KICAgIHBhcnNlci5hZGRfb3B0aW9uKCItLWZvbyIsCiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNhbGxiYWNrIiwgY2FsbGJhY2s9c3RvcmVfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJpbnQiLCBuYXJncz0zLCBkZXN0PSJmb28iKQpAQCAtMTgyNCw5ICsxODMxLDkgQEAKICAgICAgICAgZGVsIHBhcnNlci5yYXJnc1s6bGVuKHZhbHVlKV0KICAgICAgICAgc2V0YXR0cihwYXJzZXIudmFsdWVzLCBvcHRpb24uZGVzdCwgdmFsdWUpCiAKLSAgIFsuLi5dCi0gICBwYXJzZXIuYWRkX29wdGlvbigiLWMiLCAiLS1jYWxsYmFjayIsIGRlc3Q9InZhcmFyZ19hdHRyIiwKLSAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY2FsbGJhY2siLCBjYWxsYmFjaz12YXJhcmdfY2FsbGJhY2spCisgICAgLi4uCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgIi0tY2FsbGJhY2siLCBkZXN0PSJ2YXJhcmdfYXR0ciIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJjYWxsYmFjayIsIGNhbGxiYWNrPXZhcmFyZ19jYWxsYmFjaykKIAogCiAuLiBfb3B0cGFyc2UtZXh0ZW5kaW5nLW9wdHBhcnNlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QgYi9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdAppbmRleCAzM2VmNTY0Li5iZjBkZmFjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdApAQCAtNCw4ICs0LDE0IEBACiAuLiBtb2R1bGU6OiBvcy5wYXRoCiAgICA6c3lub3BzaXM6IE9wZXJhdGlvbnMgb24gcGF0aG5hbWVzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9wb3NpeHBhdGgucHlgIChmb3IgUE9TSVgpLAorOnNvdXJjZTpgTGliL250cGF0aC5weWAgKGZvciBXaW5kb3dzIE5UKSwKK2FuZCA6c291cmNlOmBMaWIvbWFjcGF0aC5weWAgKGZvciBNYWNpbnRvc2gpCisKIC4uIGluZGV4Ojogc2luZ2xlOiBwYXRoOyBvcGVyYXRpb25zCiAKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgc29tZSB1c2VmdWwgZnVuY3Rpb25zIG9uIHBhdGhuYW1lcy4gVG8gcmVhZCBvcgogd3JpdGUgZmlsZXMgc2VlIDpmdW5jOmBvcGVuYCwgYW5kIGZvciBhY2Nlc3NpbmcgdGhlIGZpbGVzeXN0ZW0gc2VlIHRoZQogOm1vZDpgb3NgIG1vZHVsZS4gVGhlIHBhdGggcGFyYW1ldGVycyBjYW4gYmUgcGFzc2VkIGFzIGVpdGhlciBzdHJpbmdzLApAQCAtNjYsMTEgKzcyLDM3IEBACiAgICBlbXB0eSBzdHJpbmcgKGBgJydgYCkuCiAKIAorLi4gZnVuY3Rpb246OiBjb21tb25wYXRoKHBhdGhzKQorCisgICBSZXR1cm4gdGhlIGxvbmdlc3QgY29tbW9uIHN1Yi1wYXRoIG9mIGVhY2ggcGF0aG5hbWUgaW4gdGhlIHNlcXVlbmNlCisgICAqcGF0aHMqLiAgUmFpc2UgVmFsdWVFcnJvciBpZiAqcGF0aHMqIGNvbnRhaW5zIGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlCisgICBwYXRobmFtZXMsIG9yIGlmICpwYXRocyogaXMgZW1wdHkuICBVbmxpa2UgOmZ1bmM6YGNvbW1vbnByZWZpeGAsIHRoaXMKKyAgIHJldHVybnMgYSB2YWxpZCBwYXRoLgorCisgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gZnVuY3Rpb246OiBjb21tb25wcmVmaXgobGlzdCkKIAotICAgUmV0dXJuIHRoZSBsb25nZXN0IHBhdGggcHJlZml4ICh0YWtlbiBjaGFyYWN0ZXItYnktY2hhcmFjdGVyKSB0aGF0IGlzIGEgcHJlZml4Ci0gICBvZiBhbGwgcGF0aHMgaW4gICpsaXN0Ki4gIElmICpsaXN0KiBpcyBlbXB0eSwgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgKGBgJydgYCkuCi0gICBOb3RlIHRoYXQgdGhpcyBtYXkgcmV0dXJuIGludmFsaWQgcGF0aHMgYmVjYXVzZSBpdCB3b3JrcyBhIGNoYXJhY3RlciBhdCBhIHRpbWUuCisgICBSZXR1cm4gdGhlIGxvbmdlc3QgcGF0aCBwcmVmaXggKHRha2VuIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIpIHRoYXQgaXMgYQorICAgcHJlZml4IG9mIGFsbCBwYXRocyBpbiAgKmxpc3QqLiAgSWYgKmxpc3QqIGlzIGVtcHR5LCByZXR1cm4gdGhlIGVtcHR5IHN0cmluZworICAgKGBgJydgYCkuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gaW52YWxpZCBwYXRocyBiZWNhdXNlIGl0IHdvcmtzIGEKKyAgICAgIGNoYXJhY3RlciBhdCBhIHRpbWUuICBUbyBvYnRhaW4gYSB2YWxpZCBwYXRoLCBzZWUKKyAgICAgIDpmdW5jOmBjb21tb25wYXRoYC4KKworICAgICAgOjoKKworICAgICAgICA+Pj4gb3MucGF0aC5jb21tb25wcmVmaXgoWycvdXNyL2xpYicsICcvdXNyL2xvY2FsL2xpYiddKQorICAgICAgICAnL3Vzci9sJworCisgICAgICAgID4+PiBvcy5wYXRoLmNvbW1vbnBhdGgoWycvdXNyL2xpYicsICcvdXNyL2xvY2FsL2xpYiddKQorICAgICAgICAnL3VzcicKIAogCiAuLiBmdW5jdGlvbjo6IGRpcm5hbWUocGF0aCkKQEAgLTE4OCw3ICsyMjAsNyBAQAogLi4gZnVuY3Rpb246OiBpc2xpbmsocGF0aCkKIAogICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpwYXRoKiByZWZlcnMgdG8gYSBkaXJlY3RvcnkgZW50cnkgdGhhdCBpcyBhIHN5bWJvbGljIGxpbmsuCi0gICBBbHdheXMgYGBGYWxzZWBgIGlmIHN5bWJvbGljIGxpbmtzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBweXRob24gcnVudGltZS4KKyAgIEFsd2F5cyBgYEZhbHNlYGAgaWYgc3ltYm9saWMgbGlua3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFB5dGhvbiBydW50aW1lLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNtb3VudChwYXRoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3MucnN0IGIvRG9jL2xpYnJhcnkvb3MucnN0CmluZGV4IDdiYzU5ODkuLjQyNjViYzIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcy5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBvcwogICAgOnN5bm9wc2lzOiBNaXNjZWxsYW5lb3VzIG9wZXJhdGluZyBzeXN0ZW0gaW50ZXJmYWNlcy4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvb3MucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgcG9ydGFibGUgd2F5IG9mIHVzaW5nIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW50CiBmdW5jdGlvbmFsaXR5LiAgSWYgeW91IGp1c3Qgd2FudCB0byByZWFkIG9yIHdyaXRlIGEgZmlsZSBzZWUgOmZ1bmM6YG9wZW5gLCBpZgpAQCAtNzgsOSArODEsMTAgQEAKIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgIE9uIHNvbWUgc3lzdGVtcywgY29udmVyc2lvbiB1c2luZyB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcgbWF5IGZhaWwuIEluIHRoaXMKLSAgIGNhc2UsIFB5dGhvbiB1c2VzIHRoZSBgYHN1cnJvZ2F0ZWVzY2FwZWBgIGVuY29kaW5nIGVycm9yIGhhbmRsZXIsIHdoaWNoIG1lYW5zCi0gICB0aGF0IHVuZGVjb2RhYmxlIGJ5dGVzIGFyZSByZXBsYWNlZCBieSBhIFVuaWNvZGUgY2hhcmFjdGVyIFUrREN4eCBvbgotICAgZGVjb2RpbmcsIGFuZCB0aGVzZSBhcmUgYWdhaW4gdHJhbnNsYXRlZCB0byB0aGUgb3JpZ2luYWwgYnl0ZSBvbiBlbmNvZGluZy4KKyAgIGNhc2UsIFB5dGhvbiB1c2VzIHRoZSA6cmVmOmBzdXJyb2dhdGVlc2NhcGUgZW5jb2RpbmcgZXJyb3IgaGFuZGxlcgorICAgPHN1cnJvZ2F0ZWVzY2FwZT5gLCB3aGljaCBtZWFucyB0aGF0IHVuZGVjb2RhYmxlIGJ5dGVzIGFyZSByZXBsYWNlZCBieSBhCisgICBVbmljb2RlIGNoYXJhY3RlciBVK0RDeHggb24gZGVjb2RpbmcsIGFuZCB0aGVzZSBhcmUgYWdhaW4gdHJhbnNsYXRlZCB0byB0aGUKKyAgIG9yaWdpbmFsIGJ5dGUgb24gZW5jb2RpbmcuCiAKIAogVGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIG11c3QgZ3VhcmFudGVlIHRvIHN1Y2Nlc3NmdWxseSBkZWNvZGUgYWxsIGJ5dGVzCkBAIC0zMTEsOCArMzE1LDYgQEAKIAogICAgUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MgaWQuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KLQogCiAuLiBmdW5jdGlvbjo6IGdldHBwaWQoKQogCkBAIC01NDksOCArNTUxLDYgQEAKICAgIE9uIHBsYXRmb3JtcyB3aGVyZSA6YzpmdW5jOmBzdHJlcnJvcmAgcmV0dXJucyBgYE5VTExgYCB3aGVuIGdpdmVuIGFuIHVua25vd24KICAgIGVycm9yIG51bWJlciwgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KIAogLi4gZGF0YTo6IHN1cHBvcnRzX2J5dGVzX2Vudmlyb24KIApAQCAtNTY0LDggKzU2NCw2IEBACiAKICAgIFNldCB0aGUgY3VycmVudCBudW1lcmljIHVtYXNrIGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHVtYXNrLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KIAogLi4gZnVuY3Rpb246OiB1bmFtZSgpCiAKQEAgLTY1Niw4ICs2NTQsNiBAQAogCiAgICBDbG9zZSBmaWxlIGRlc2NyaXB0b3IgKmZkKi4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAgICAuLiBub3RlOjoKIAogICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgbG93LWxldmVsIEkvTyBhbmQgbXVzdCBiZSBhcHBsaWVkIHRvIGEgZmlsZQpAQCAtNjc3LDggKzY3Myw2IEBACiAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgIHBhc3MKIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAKIC4uIGZ1bmN0aW9uOjogZGV2aWNlX2VuY29kaW5nKGZkKQogCkBAIC02OTUsOCArNjg5LDYgQEAKICAgIDI6IHN0ZGVyciksIHRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YGluaGVyaXRhYmxlCiAgICA8ZmRfaW5oZXJpdGFuY2U+YC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAogICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KIApAQCAtNzA3LDggKzY5OSw2IEBACiAgICBUaGUgZmlsZSBkZXNjcmlwdG9yICpmZDIqIGlzIDpyZWY6YGluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gIGJ5IGRlZmF1bHQsCiAgICBvciBub24taW5oZXJpdGFibGUgaWYgKmluaGVyaXRhYmxlKiBpcyBgYEZhbHNlYGAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KLQogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKICAgICAgIEFkZCB0aGUgb3B0aW9uYWwgKmluaGVyaXRhYmxlKiBwYXJhbWV0ZXIuCiAKQEAgLTc3NCw4ICs3NjQsNiBAQAogCiAgICAgICBUaGUgOmZ1bmM6YC5zdGF0YCBmdW5jdGlvbi4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAKIC4uIGZ1bmN0aW9uOjogZnN0YXR2ZnMoZmQpCiAKQEAgLTgwNCw4ICs3OTIsMjEgQEAKICAgIG1vc3QgKmxlbmd0aCogYnl0ZXMgaW4gc2l6ZS4gIEFzIG9mIFB5dGhvbiAzLjMsIHRoaXMgaXMgZXF1aXZhbGVudCB0bwogICAgYGBvcy50cnVuY2F0ZShmZCwgbGVuZ3RoKWBgLgogCisgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBXaW5kb3dzCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2Jsb2NraW5nKGZkKQorCisgICBHZXQgdGhlIGJsb2NraW5nIG1vZGUgb2YgdGhlIGZpbGUgZGVzY3JpcHRvcjogYGBGYWxzZWBgIGlmIHRoZQorICAgOmRhdGE6YE9fTk9OQkxPQ0tgIGZsYWcgaXMgc2V0LCBgYFRydWVgYCBpZiB0aGUgZmxhZyBpcyBjbGVhcmVkLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc2V0X2Jsb2NraW5nYCBhbmQgOm1ldGg6YHNvY2tldC5zb2NrZXQuc2V0YmxvY2tpbmdgLgorCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQogCiAuLiBmdW5jdGlvbjo6IGlzYXR0eShmZCkKIApAQCAtODQ2LDggKzg0Nyw2IEBACiAgICBjdXJyZW50IHBvc2l0aW9uOyA6Y29uc3Q6YFNFRUtfRU5EYCBvciBgYDJgYCB0byBzZXQgaXQgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZgogICAgdGhlIGZpbGUuIFJldHVybiB0aGUgbmV3IGN1cnNvciBwb3NpdGlvbiBpbiBieXRlcywgc3RhcnRpbmcgZnJvbSB0aGUgYmVnaW5uaW5nLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KIAogLi4gZGF0YTo6IFNFRUtfU0VUCiAgICAgICAgICAgU0VFS19DVVIKQEAgLTg1Niw4ICs4NTUsNiBAQAogICAgUGFyYW1ldGVycyB0byB0aGUgOmZ1bmM6YGxzZWVrYCBmdW5jdGlvbi4gVGhlaXIgdmFsdWVzIGFyZSAwLCAxLCBhbmQgMiwKICAgIHJlc3BlY3RpdmVseS4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgY291bGQgc3VwcG9ydCBhZGRpdGlvbmFsIHZhbHVlcywgbGlrZQogICAgICAgOmRhdGE6YG9zLlNFRUtfSE9MRWAgb3IgOmRhdGE6YG9zLlNFRUtfREFUQWAuCkBAIC04NzgsOCArODc1LDYgQEAKICAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgcGF0aHMgcmVsYXRpdmUgdG8gZGlyZWN0b3J5IGRlc2NyaXB0b3JzCiAgICA8ZGlyX2ZkPmAgd2l0aCB0aGUgKmRpcl9mZCogcGFyYW1ldGVyLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CiAgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgogCkBAIC04OTMsMTEgKzg4OCwxNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAgICAgICBUaGUgKmRpcl9mZCogYXJndW1lbnQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBJZiB0aGUgc3lzdGVtIGNhbGwgaXMgaW50ZXJydXB0ZWQgYW5kIHRoZSBzaWduYWwgaGFuZGxlciBkb2VzIG5vdCByYWlzZSBhbgorICAgICAgZXhjZXB0aW9uLCB0aGUgZnVuY3Rpb24gbm93IHJldHJpZXMgdGhlIHN5c3RlbSBjYWxsIGluc3RlYWQgb2YgcmFpc2luZyBhbgorICAgICAgOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAgZXhjZXB0aW9uIChzZWUgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSkuCisKIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBvcHRpb25zIGZvciB0aGUgKmZsYWdzKiBwYXJhbWV0ZXIgdG8gdGhlCiA6ZnVuYzpgfm9zLm9wZW5gIGZ1bmN0aW9uLiAgVGhleSBjYW4gYmUgY29tYmluZWQgdXNpbmcgdGhlIGJpdHdpc2UgT1Igb3BlcmF0b3IKIGBgfGBgLiAgU29tZSBvZiB0aGVtIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMuICBGb3IgZGVzY3JpcHRpb25zIG9mCiB0aGVpciBhdmFpbGFiaWxpdHkgYW5kIHVzZSwgY29uc3VsdCB0aGUgOm1hbnBhZ2U6YG9wZW4oMilgIG1hbnVhbCBwYWdlIG9uIFVuaXgKLW9yIGB0aGUgTVNETiA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3owa2M4ZTN6LmFzcHg+YF8gb24gV2luZG93cy4KK29yIGB0aGUgTVNETiA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCiAKIAogLi4gZGF0YTo6IE9fUkRPTkxZCkBAIC0xMDYwLDggKzEwNjAsNiBAQAogICAgYnl0ZXMgcmVhZC4gIElmIHRoZSBlbmQgb2YgdGhlIGZpbGUgcmVmZXJyZWQgdG8gYnkgKmZkKiBoYXMgYmVlbiByZWFjaGVkLCBhbgogICAgZW1wdHkgYnl0ZXMgb2JqZWN0IGlzIHJldHVybmVkLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBsb3ctbGV2ZWwgSS9PIGFuZCBtdXN0IGJlIGFwcGxpZWQgdG8gYSBmaWxlCkBAIC0xMDcwLDYgKzEwNjgsMTEgQEAKICAgICAgIDpmdW5jOmBwb3BlbmAgb3IgOmZ1bmM6YGZkb3BlbmAsIG9yIDpkYXRhOmBzeXMuc3RkaW5gLCB1c2UgaXRzCiAgICAgICA6bWV0aDpgfmZpbGUucmVhZGAgb3IgOm1ldGg6YH5maWxlLnJlYWRsaW5lYCBtZXRob2RzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgSWYgdGhlIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkIGFuZCB0aGUgc2lnbmFsIGhhbmRsZXIgZG9lcyBub3QgcmFpc2UgYW4KKyAgICAgIGV4Y2VwdGlvbiwgdGhlIGZ1bmN0aW9uIG5vdyByZXRyaWVzIHRoZSBzeXN0ZW0gY2FsbCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4KKyAgICAgIDpleGM6YEludGVycnVwdGVkRXJyb3JgIGV4Y2VwdGlvbiAoc2VlIDpwZXA6YDQ3NWAgZm9yIHRoZSByYXRpb25hbGUpLgorCiAKIC4uIGZ1bmN0aW9uOjogc2VuZGZpbGUob3V0LCBpbiwgb2Zmc2V0LCBjb3VudCkKICAgICAgICAgICAgICAgc2VuZGZpbGUob3V0LCBpbiwgb2Zmc2V0LCBjb3VudCwgW2hlYWRlcnNdLCBbdHJhaWxlcnNdLCBmbGFncz0wKQpAQCAtMTA5OSw5ICsxMTAyLDI2IEBACiAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIEZvciBhIGhpZ2hlci1sZXZlbCB3cmFwcGVyIG9mIDpmdW5jOmBzZW5kZmlsZWAsIHNlZQorICAgICAgOm1ldGg6YHNvY2tldC5zb2NrZXQuc2VuZGZpbGVgLgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCisuLiBmdW5jdGlvbjo6IHNldF9ibG9ja2luZyhmZCwgYmxvY2tpbmcpCisKKyAgIFNldCB0aGUgYmxvY2tpbmcgbW9kZSBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4gU2V0IHRoZQorICAgOmRhdGE6YE9fTk9OQkxPQ0tgIGZsYWcgaWYgYmxvY2tpbmcgaXMgYGBGYWxzZWBgLCBjbGVhciB0aGUgZmxhZyBvdGhlcndpc2UuCisKKyAgIFNlZSBhbHNvIDpmdW5jOmBnZXRfYmxvY2tpbmdgIGFuZCA6bWV0aDpgc29ja2V0LnNvY2tldC5zZXRibG9ja2luZ2AuCisKKyAgIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gZGF0YTo6IFNGX05PRElTS0lPCiAgICAgICAgICAgU0ZfTU5PV0FJVAogICAgICAgICAgIFNGX1NZTkMKQEAgLTExNTgsOCArMTE3OCw2IEBACiAgICBXcml0ZSB0aGUgYnl0ZXN0cmluZyBpbiAqc3RyKiB0byBmaWxlIGRlc2NyaXB0b3IgKmZkKi4gUmV0dXJuIHRoZSBudW1iZXIgb2YKICAgIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4uCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KLQogICAgLi4gbm90ZTo6CiAKICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIGxvdy1sZXZlbCBJL08gYW5kIG11c3QgYmUgYXBwbGllZCB0byBhIGZpbGUKQEAgLTExNjgsMTEgKzExODYsMjAgQEAKICAgICAgIDpmdW5jOmBmZG9wZW5gLCBvciA6ZGF0YTpgc3lzLnN0ZG91dGAgb3IgOmRhdGE6YHN5cy5zdGRlcnJgLCB1c2UgaXRzCiAgICAgICA6bWV0aDpgfmZpbGUud3JpdGVgIG1ldGhvZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIElmIHRoZSBzeXN0ZW0gY2FsbCBpcyBpbnRlcnJ1cHRlZCBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIGRvZXMgbm90IHJhaXNlIGFuCisgICAgICBleGNlcHRpb24sIHRoZSBmdW5jdGlvbiBub3cgcmV0cmllcyB0aGUgc3lzdGVtIGNhbGwgaW5zdGVhZCBvZiByYWlzaW5nIGFuCisgICAgICA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBleGNlcHRpb24gKHNlZSA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKS4KKwogCiAuLiBmdW5jdGlvbjo6IHdyaXRldihmZCwgYnVmZmVycykKIAogICAgV3JpdGUgdGhlIGNvbnRlbnRzIG9mICpidWZmZXJzKiB0byBmaWxlIGRlc2NyaXB0b3IgKmZkKi4gKmJ1ZmZlcnMqIG11c3QgYmUgYQotICAgc2VxdWVuY2Ugb2YgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YC4KKyAgIHNlcXVlbmNlIG9mIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMgPGJ5dGVzLWxpa2Ugb2JqZWN0PmAuIEJ1ZmZlcnMgYXJlCisgICBwcm9jZXNzZWQgaW4gYXJyYXkgb3JkZXIuIEVudGlyZSBjb250ZW50cyBvZiBmaXJzdCBidWZmZXIgaXMgd3JpdHRlbiBiZWZvcmUKKyAgIHByb2NlZWRpbmcgdG8gc2Vjb25kLCBhbmQgc28gb24uIFRoZSBvcGVyYXRpbmcgc3lzdGVtIG1heSBzZXQgYSBsaW1pdAorICAgKHN5c2NvbmYoKSB2YWx1ZSBTQ19JT1ZfTUFYKSBvbiB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgdGhhdCBjYW4gYmUgdXNlZC4KKwogICAgOmZ1bmM6YH5vcy53cml0ZXZgIHdyaXRlcyB0aGUgY29udGVudHMgb2YgZWFjaCBvYmplY3QgdG8gdGhlIGZpbGUgZGVzY3JpcHRvcgogICAgYW5kIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgogCkBAIC0xMzMwLDggKzEzNTcsNiBAQAogICAgb3Igbm90IGl0IGlzIGF2YWlsYWJsZSB1c2luZyA6ZGF0YTpgb3Muc3VwcG9ydHNfZWZmZWN0aXZlX2lkc2AuICBJZiBpdCBpcwogICAgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAgICAuLiBub3RlOjoKIAogICAgICAgVXNpbmcgOmZ1bmM6YGFjY2Vzc2AgdG8gY2hlY2sgaWYgYSB1c2VyIGlzIGF1dGhvcml6ZWQgdG8gZS5nLiBvcGVuIGEgZmlsZQpAQCAtMTM4NCw4ICsxNDA5LDYgQEAKICAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgc3BlY2lmeWluZyBhIGZpbGUgZGVzY3JpcHRvciA8cGF0aF9mZD5gLiAgVGhlCiAgICBkZXNjcmlwdG9yIG11c3QgcmVmZXIgdG8gYW4gb3BlbmVkIGRpcmVjdG9yeSwgbm90IGFuIG9wZW4gZmlsZS4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgKnBhdGgqIGFzIGEgZmlsZSBkZXNjcmlwdG9yCiAgICAgICBvbiBzb21lIHBsYXRmb3Jtcy4KQEAgLTE0NDcsOCArMTQ3MCw2IEBACiAgICA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMgPGRpcl9mZD5gIGFuZCA6cmVmOmBub3QKICAgIGZvbGxvd2luZyBzeW1saW5rcyA8Zm9sbG93X3N5bWxpbmtzPmAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KLQogICAgLi4gbm90ZTo6CiAKICAgICAgIEFsdGhvdWdoIFdpbmRvd3Mgc3VwcG9ydHMgOmZ1bmM6YGNobW9kYCwgeW91IGNhbiBvbmx5IHNldCB0aGUgZmlsZSdzCkBAIC0xNDk5LDE1ICsxNTIwLDExIEBACiAKICAgIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KLQogCiAuLiBmdW5jdGlvbjo6IGdldGN3ZGIoKQogCiAgICBSZXR1cm4gYSBieXRlc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAKIC4uIGZ1bmN0aW9uOjogbGNoZmxhZ3MocGF0aCwgZmxhZ3MpCiAKQEAgLTE1NzAsNyArMTU4NywxMSBAQAogICAgLi4gbm90ZTo6CiAgICAgICBUbyBlbmNvZGUgYGBzdHJgYCBmaWxlbmFtZXMgdG8gYGBieXRlc2BgLCB1c2UgOmZ1bmM6YH5vcy5mc2VuY29kZWAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOmZ1bmM6YHNjYW5kaXJgIGZ1bmN0aW9uIHJldHVybnMgZGlyZWN0b3J5IGVudHJpZXMgYWxvbmcgd2l0aAorICAgICAgZmlsZSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24sIGdpdmluZyBiZXR0ZXIgcGVyZm9ybWFuY2UgZm9yIG1hbnkKKyAgICAgIGNvbW1vbiB1c2UgY2FzZXMuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBUaGUgKnBhdGgqIHBhcmFtZXRlciBiZWNhbWUgb3B0aW9uYWwuCkBAIC0xNjA5LDkgKzE2MzAsMTUgQEAKIAogICAgQ3JlYXRlIGEgZGlyZWN0b3J5IG5hbWVkICpwYXRoKiB3aXRoIG51bWVyaWMgbW9kZSAqbW9kZSouCiAKKyAgIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMsIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaXMgcmFpc2VkLgorCisgICAuLiBfbWtkaXJfbW9kZWJpdHM6CisKICAgIE9uIHNvbWUgc3lzdGVtcywgKm1vZGUqIGlzIGlnbm9yZWQuICBXaGVyZSBpdCBpcyB1c2VkLCB0aGUgY3VycmVudCB1bWFzawotICAgdmFsdWUgaXMgZmlyc3QgbWFza2VkIG91dC4gIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMsIDpleGM6YE9TRXJyb3JgCi0gICBpcyByYWlzZWQuCisgICB2YWx1ZSBpcyBmaXJzdCBtYXNrZWQgb3V0LiAgSWYgYml0cyBvdGhlciB0aGFuIHRoZSBsYXN0IDkgKGkuZS4gdGhlIGxhc3QgMworICAgZGlnaXRzIG9mIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgKm1vZGUqKSBhcmUgc2V0LCB0aGVpciBtZWFuaW5nIGlzCisgICBwbGF0Zm9ybS1kZXBlbmRlbnQuICBPbiBzb21lIHBsYXRmb3JtcywgdGhleSBhcmUgaWdub3JlZCBhbmQgeW91IHNob3VsZCBjYWxsCisgICA6ZnVuYzpgY2htb2RgIGV4cGxpY2l0bHkgdG8gc2V0IHRoZW0uCiAKICAgIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gc3VwcG9ydCA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMKICAgIDxkaXJfZmQ+YC4KQEAgLTE2MTksOCArMTY0Niw2IEBACiAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXM7IHNlZSB0aGUKICAgIDptb2Q6YHRlbXBmaWxlYCBtb2R1bGUncyA6ZnVuYzpgdGVtcGZpbGUubWtkdGVtcGAgZnVuY3Rpb24uCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KLQogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAgICAgICBUaGUgKmRpcl9mZCogYXJndW1lbnQuCiAKQEAgLTE2MzQsOCArMTY1OSw4IEBACiAgICBSZWN1cnNpdmUgZGlyZWN0b3J5IGNyZWF0aW9uIGZ1bmN0aW9uLiAgTGlrZSA6ZnVuYzpgbWtkaXJgLCBidXQgbWFrZXMgYWxsCiAgICBpbnRlcm1lZGlhdGUtbGV2ZWwgZGlyZWN0b3JpZXMgbmVlZGVkIHRvIGNvbnRhaW4gdGhlIGxlYWYgZGlyZWN0b3J5LgogCi0gICBUaGUgZGVmYXVsdCAqbW9kZSogaXMgYGAwbzc3N2BgIChvY3RhbCkuICBPbiBzb21lIHN5c3RlbXMsICptb2RlKiBpcwotICAgaWdub3JlZC4gIFdoZXJlIGl0IGlzIHVzZWQsIHRoZSBjdXJyZW50IHVtYXNrIHZhbHVlIGlzIGZpcnN0IG1hc2tlZCBvdXQuCisgICBUaGUgKm1vZGUqIHBhcmFtZXRlciBpcyBwYXNzZWQgdG8gOmZ1bmM6YG1rZGlyYDsgc2VlIDpyZWY6YHRoZSBta2RpcigpCisgICBkZXNjcmlwdGlvbiA8bWtkaXJfbW9kZWJpdHM+YCBmb3IgaG93IGl0IGlzIGludGVycHJldGVkLgogCiAgICBJZiAqZXhpc3Rfb2sqIGlzIGBgRmFsc2VgYCAodGhlIGRlZmF1bHQpLCBhbiA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQgaWYgdGhlCiAgICB0YXJnZXQgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLgpAQCAtMTc1MCw3ICsxNzc1LDcgQEAKICAgIGBgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShwYXRoKSwgcmVzdWx0KWBgLgogCiAgICBJZiB0aGUgKnBhdGgqIGlzIGEgc3RyaW5nIG9iamVjdCwgdGhlIHJlc3VsdCB3aWxsIGFsc28gYmUgYSBzdHJpbmcgb2JqZWN0LAotICAgYW5kIHRoZSBjYWxsIG1heSByYWlzZSBhbiBVbmljb2RlRGVjb2RlRXJyb3IuIElmIHRoZSAqcGF0aCogaXMgYSBieXRlcworICAgYW5kIHRoZSBjYWxsIG1heSByYWlzZSBhIFVuaWNvZGVEZWNvZGVFcnJvci4gSWYgdGhlICpwYXRoKiBpcyBhIGJ5dGVzCiAgICBvYmplY3QsIHRoZSByZXN1bHQgd2lsbCBiZSBhIGJ5dGVzIG9iamVjdC4KIAogICAgVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBzdXBwb3J0IDpyZWY6YHBhdGhzIHJlbGF0aXZlIHRvIGRpcmVjdG9yeSBkZXNjcmlwdG9ycwpAQCAtMTc3Nyw5ICsxODAyLDcgQEAKICAgIGJlIHJhaXNlZDsgb24gVW5peCwgdGhlIGRpcmVjdG9yeSBlbnRyeSBpcyByZW1vdmVkIGJ1dCB0aGUgc3RvcmFnZSBhbGxvY2F0ZWQKICAgIHRvIHRoZSBmaWxlIGlzIG5vdCBtYWRlIGF2YWlsYWJsZSB1bnRpbCB0aGUgb3JpZ2luYWwgZmlsZSBpcyBubyBsb25nZXIgaW4gdXNlLgogCi0gICBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byA6ZnVuYzpgdW5saW5rYC4KLQotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgorICAgVGhpcyBmdW5jdGlvbiBpcyBzZW1hbnRpY2FsbHkgaWRlbnRpY2FsIHRvIDpmdW5jOmB1bmxpbmtgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSAqZGlyX2ZkKiBhcmd1bWVudC4KQEAgLTE4MTQsOCArMTgzNyw2IEBACiAKICAgIElmIHlvdSB3YW50IGNyb3NzLXBsYXRmb3JtIG92ZXJ3cml0aW5nIG9mIHRoZSBkZXN0aW5hdGlvbiwgdXNlIDpmdW5jOmByZXBsYWNlYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSAqc3JjX2Rpcl9mZCogYW5kICpkc3RfZGlyX2ZkKiBhcmd1bWVudHMuCiAKQEAgLTE4NDQsOCArMTg2NSw2IEBACiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IHNwZWNpZnlpbmcgKnNyY19kaXJfZmQqIGFuZC9vciAqZHN0X2Rpcl9mZCogdG8KICAgIHN1cHBseSA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMgPGRpcl9mZD5gLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKQEAgLTE4NTgsMTIgKzE4NzcsMTg4IEBACiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IDpyZWY6YHBhdGhzIHJlbGF0aXZlIHRvIGRpcmVjdG9yeSBkZXNjcmlwdG9ycwogICAgPGRpcl9mZD5gLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgVGhlICpkaXJfZmQqIHBhcmFtZXRlci4KIAogCisuLiBmdW5jdGlvbjo6IHNjYW5kaXIocGF0aD0nLicpCisKKyAgIFJldHVybiBhbiBpdGVyYXRvciBvZiA6Y2xhc3M6YERpckVudHJ5YCBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVudHJpZXMKKyAgIGluIHRoZSBkaXJlY3RvcnkgZ2l2ZW4gYnkgKnBhdGgqLiBUaGUgZW50cmllcyBhcmUgeWllbGRlZCBpbiBhcmJpdHJhcnkKKyAgIG9yZGVyLCBhbmQgdGhlIHNwZWNpYWwgZW50cmllcyBgYCcuJ2BgIGFuZCBgYCcuLidgYCBhcmUgbm90IGluY2x1ZGVkLgorCisgICBVc2luZyA6ZnVuYzpgc2NhbmRpcmAgaW5zdGVhZCBvZiA6ZnVuYzpgbGlzdGRpcmAgY2FuIHNpZ25pZmljYW50bHkKKyAgIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZSBvZiBjb2RlIHRoYXQgYWxzbyBuZWVkcyBmaWxlIHR5cGUgb3IgZmlsZQorICAgYXR0cmlidXRlIGluZm9ybWF0aW9uLCBiZWNhdXNlIDpjbGFzczpgRGlyRW50cnlgIG9iamVjdHMgZXhwb3NlIHRoaXMKKyAgIGluZm9ybWF0aW9uIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHByb3ZpZGVzIGl0IHdoZW4gc2Nhbm5pbmcgYSBkaXJlY3RvcnkuCisgICBBbGwgOmNsYXNzOmBEaXJFbnRyeWAgbWV0aG9kcyBtYXkgcGVyZm9ybSBhIHN5c3RlbSBjYWxsLCBidXQKKyAgIDpmdW5jOmB+RGlyRW50cnkuaXNfZGlyYCBhbmQgOmZ1bmM6YH5EaXJFbnRyeS5pc19maWxlYCB1c3VhbGx5IG9ubHkKKyAgIHJlcXVpcmUgYSBzeXN0ZW0gY2FsbCBmb3Igc3ltYm9saWMgbGlua3M7IDpmdW5jOmBEaXJFbnRyeS5zdGF0YAorICAgYWx3YXlzIHJlcXVpcmVzIGEgc3lzdGVtIGNhbGwgb24gVW5peCBidXQgb25seSByZXF1aXJlcyBvbmUgZm9yCisgICBzeW1ib2xpYyBsaW5rcyBvbiBXaW5kb3dzLgorCisgICBPbiBVbml4LCAqcGF0aCogY2FuIGJlIG9mIHR5cGUgOmNsYXNzOmBzdHJgIG9yIDpjbGFzczpgYnl0ZXNgICh1c2UKKyAgIDpmdW5jOmB+b3MuZnNlbmNvZGVgIGFuZCA6ZnVuYzpgfm9zLmZzZGVjb2RlYCB0byBlbmNvZGUgYW5kIGRlY29kZQorICAgOmNsYXNzOmBieXRlc2AgcGF0aHMpLiBPbiBXaW5kb3dzLCAqcGF0aCogbXVzdCBiZSBvZiB0eXBlIDpjbGFzczpgc3RyYC4KKyAgIE9uIGJvdGggc3lzdGVtcywgdGhlIHR5cGUgb2YgdGhlIDphdHRyOmB+RGlyRW50cnkubmFtZWAgYW5kCisgICA6YXR0cjpgfkRpckVudHJ5LnBhdGhgIGF0dHJpYnV0ZXMgb2YgZWFjaCA6Y2xhc3M6YERpckVudHJ5YCB3aWxsIGJlIG9mCisgICB0aGUgc2FtZSB0eXBlIGFzICpwYXRoKi4KKworICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGEgc2ltcGxlIHVzZSBvZiA6ZnVuYzpgc2NhbmRpcmAgdG8gZGlzcGxheSBhbGwKKyAgIHRoZSBmaWxlcyAoZXhjbHVkaW5nIGRpcmVjdG9yaWVzKSBpbiB0aGUgZ2l2ZW4gKnBhdGgqIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aAorICAgYGAnLidgYC4gVGhlIGBgZW50cnkuaXNfZmlsZSgpYGAgY2FsbCB3aWxsIGdlbmVyYWxseSBub3QgbWFrZSBhbiBhZGRpdGlvbmFsCisgICBzeXN0ZW0gY2FsbDo6CisKKyAgICAgIGZvciBlbnRyeSBpbiBvcy5zY2FuZGlyKHBhdGgpOgorICAgICAgICAgaWYgbm90IGVudHJ5Lm5hbWUuc3RhcnRzd2l0aCgnLicpIGFuZCBlbnRyeS5pc19maWxlKCk6CisgICAgICAgICAgICAgcHJpbnQoZW50cnkubmFtZSkKKworICAgLi4gbm90ZTo6CisKKyAgICAgIE9uIFVuaXgtYmFzZWQgc3lzdGVtcywgOmZ1bmM6YHNjYW5kaXJgIHVzZXMgdGhlIHN5c3RlbSdzCisgICAgICBgb3BlbmRpcigpIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9vcGVuZGlyLmh0bWw+YF8KKyAgICAgIGFuZAorICAgICAgYHJlYWRkaXIoKSA8aHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvcmVhZGRpcl9yLmh0bWw+YF8KKyAgICAgIGZ1bmN0aW9ucy4gT24gV2luZG93cywgaXQgdXNlcyB0aGUgV2luMzIKKyAgICAgIGBGaW5kRmlyc3RGaWxlVyA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjQ0MTgodj12cy44NSkuYXNweD5gXworICAgICAgYW5kCisgICAgICBgRmluZE5leHRGaWxlVyA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjQ0Mjgodj12cy44NSkuYXNweD5gXworICAgICAgZnVuY3Rpb25zLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCisuLiBjbGFzczo6IERpckVudHJ5CisKKyAgIE9iamVjdCB5aWVsZGVkIGJ5IDpmdW5jOmBzY2FuZGlyYCB0byBleHBvc2UgdGhlIGZpbGUgcGF0aCBhbmQgb3RoZXIgZmlsZQorICAgYXR0cmlidXRlcyBvZiBhIGRpcmVjdG9yeSBlbnRyeS4KKworICAgOmZ1bmM6YHNjYW5kaXJgIHdpbGwgcHJvdmlkZSBhcyBtdWNoIG9mIHRoaXMgaW5mb3JtYXRpb24gYXMgcG9zc2libGUgd2l0aG91dAorICAgbWFraW5nIGFkZGl0aW9uYWwgc3lzdGVtIGNhbGxzLiBXaGVuIGEgYGBzdGF0KClgYCBvciBgYGxzdGF0KClgYCBzeXN0ZW0gY2FsbAorICAgaXMgbWFkZSwgdGhlIGBgRGlyRW50cnlgYCBvYmplY3Qgd2lsbCBjYWNoZSB0aGUgcmVzdWx0LgorCisgICBgYERpckVudHJ5YGAgaW5zdGFuY2VzIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgc3RvcmVkIGluIGxvbmctbGl2ZWQgZGF0YQorICAgc3RydWN0dXJlczsgaWYgeW91IGtub3cgdGhlIGZpbGUgbWV0YWRhdGEgaGFzIGNoYW5nZWQgb3IgaWYgYSBsb25nIHRpbWUgaGFzCisgICBlbGFwc2VkIHNpbmNlIGNhbGxpbmcgOmZ1bmM6YHNjYW5kaXJgLCBjYWxsIGBgb3Muc3RhdChlbnRyeS5wYXRoKWBgIHRvIGZldGNoCisgICB1cC10by1kYXRlIGluZm9ybWF0aW9uLgorCisgICBCZWNhdXNlIHRoZSBgYERpckVudHJ5YGAgbWV0aG9kcyBjYW4gbWFrZSBvcGVyYXRpbmcgc3lzdGVtIGNhbGxzLCB0aGV5IG1heQorICAgYWxzbyByYWlzZSA6ZXhjOmBPU0Vycm9yYC4gSWYgeW91IG5lZWQgdmVyeSBmaW5lLWdyYWluZWQKKyAgIGNvbnRyb2wgb3ZlciBlcnJvcnMsIHlvdSBjYW4gY2F0Y2ggOmV4YzpgT1NFcnJvcmAgd2hlbiBjYWxsaW5nIG9uZSBvZiB0aGUKKyAgIGBgRGlyRW50cnlgYCBtZXRob2RzIGFuZCBoYW5kbGUgYXMgYXBwcm9wcmlhdGUuCisKKyAgIEF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgb24gYSBgYERpckVudHJ5YGAgaW5zdGFuY2UgYXJlIGFzIGZvbGxvd3M6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IG5hbWUKKworICAgICAgVGhlIGVudHJ5J3MgYmFzZSBmaWxlbmFtZSwgcmVsYXRpdmUgdG8gdGhlIDpmdW5jOmBzY2FuZGlyYCAqcGF0aCoKKyAgICAgIGFyZ3VtZW50LgorCisgICAgICBUaGUgOmF0dHI6YG5hbWVgIGF0dHJpYnV0ZSB3aWxsIGJlIG9mIHRoZSBzYW1lIHR5cGUgKGBgc3RyYGAgb3IKKyAgICAgIGBgYnl0ZXNgYCkgYXMgdGhlIDpmdW5jOmBzY2FuZGlyYCAqcGF0aCogYXJndW1lbnQuIFVzZQorICAgICAgOmZ1bmM6YH5vcy5mc2RlY29kZWAgdG8gZGVjb2RlIGJ5dGUgZmlsZW5hbWVzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBwYXRoCisKKyAgICAgIFRoZSBlbnRyeSdzIGZ1bGwgcGF0aCBuYW1lOiBlcXVpdmFsZW50IHRvIGBgb3MucGF0aC5qb2luKHNjYW5kaXJfcGF0aCwKKyAgICAgIGVudHJ5Lm5hbWUpYGAgd2hlcmUgKnNjYW5kaXJfcGF0aCogaXMgdGhlIDpmdW5jOmBzY2FuZGlyYCAqcGF0aCoKKyAgICAgIGFyZ3VtZW50LiAgVGhlIHBhdGggaXMgb25seSBhYnNvbHV0ZSBpZiB0aGUgOmZ1bmM6YHNjYW5kaXJgICpwYXRoKgorICAgICAgYXJndW1lbnQgd2FzIGFic29sdXRlLgorCisgICAgICBUaGUgOmF0dHI6YHBhdGhgIGF0dHJpYnV0ZSB3aWxsIGJlIG9mIHRoZSBzYW1lIHR5cGUgKGBgc3RyYGAgb3IKKyAgICAgIGBgYnl0ZXNgYCkgYXMgdGhlIDpmdW5jOmBzY2FuZGlyYCAqcGF0aCogYXJndW1lbnQuIFVzZQorICAgICAgOmZ1bmM6YH5vcy5mc2RlY29kZWAgdG8gZGVjb2RlIGJ5dGUgZmlsZW5hbWVzLgorCisgICAuLiBtZXRob2Q6OiBpbm9kZSgpCisKKyAgICAgIFJldHVybiB0aGUgaW5vZGUgbnVtYmVyIG9mIHRoZSBlbnRyeS4KKworICAgICAgVGhlIHJlc3VsdCBpcyBjYWNoZWQgb24gdGhlIGBgRGlyRW50cnlgYCBvYmplY3QuIFVzZSBgYG9zLnN0YXQoZW50cnkucGF0aCwKKyAgICAgIGZvbGxvd19zeW1saW5rcz1GYWxzZSkuc3RfaW5vYGAgdG8gZmV0Y2ggdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4KKworICAgICAgT24gdGhlIGZpcnN0LCB1bmNhY2hlZCBjYWxsLCBhIHN5c3RlbSBjYWxsIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MgYnV0CisgICAgICBub3Qgb24gVW5peC4KKworICAgLi4gbWV0aG9kOjogaXNfZGlyKFwqLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoaXMgZW50cnkgaXMgYSBkaXJlY3Rvcnkgb3IgYSBzeW1ib2xpYyBsaW5rIHBvaW50aW5nCisgICAgICB0byBhIGRpcmVjdG9yeTsgcmV0dXJuIGBgRmFsc2VgYCBpZiB0aGUgZW50cnkgaXMgb3IgcG9pbnRzIHRvIGFueSBvdGhlcgorICAgICAga2luZCBvZiBmaWxlLCBvciBpZiBpdCBkb2Vzbid0IGV4aXN0IGFueW1vcmUuCisKKyAgICAgIElmICpmb2xsb3dfc3ltbGlua3MqIGlzIGBgRmFsc2VgYCwgcmV0dXJuIGBgVHJ1ZWBgIG9ubHkgaWYgdGhpcyBlbnRyeQorICAgICAgaXMgYSBkaXJlY3RvcnkgKHdpdGhvdXQgZm9sbG93aW5nIHN5bWxpbmtzKTsgcmV0dXJuIGBgRmFsc2VgYCBpZiB0aGUKKyAgICAgIGVudHJ5IGlzIGFueSBvdGhlciBraW5kIG9mIGZpbGUgb3IgaWYgaXQgZG9lc24ndCBleGlzdCBhbnltb3JlLgorCisgICAgICBUaGUgcmVzdWx0IGlzIGNhY2hlZCBvbiB0aGUgYGBEaXJFbnRyeWBgIG9iamVjdCwgd2l0aCBhIHNlcGFyYXRlIGNhY2hlCisgICAgICBmb3IgKmZvbGxvd19zeW1saW5rcyogYGBUcnVlYGAgYW5kIGBgRmFsc2VgYC4gQ2FsbCA6ZnVuYzpgb3Muc3RhdGAgYWxvbmcKKyAgICAgIHdpdGggOmZ1bmM6YHN0YXQuU19JU0RJUmAgdG8gZmV0Y2ggdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4KKworICAgICAgT24gdGhlIGZpcnN0LCB1bmNhY2hlZCBjYWxsLCBubyBzeXN0ZW0gY2FsbCBpcyByZXF1aXJlZCBpbiBtb3N0IGNhc2VzLgorICAgICAgU3BlY2lmaWNhbGx5LCBmb3Igbm9uLXN5bWxpbmtzLCBuZWl0aGVyIFdpbmRvd3Mgb3IgVW5peCByZXF1aXJlIGEgc3lzdGVtCisgICAgICBjYWxsLCBleGNlcHQgb24gY2VydGFpbiBVbml4IGZpbGUgc3lzdGVtcywgc3VjaCBhcyBuZXR3b3JrIGZpbGUgc3lzdGVtcywKKyAgICAgIHRoYXQgcmV0dXJuIGBgZGlyZW50LmRfdHlwZSA9PSBEVF9VTktOT1dOYGAuIElmIHRoZSBlbnRyeSBpcyBhIHN5bWxpbmssCisgICAgICBhIHN5c3RlbSBjYWxsIHdpbGwgYmUgcmVxdWlyZWQgdG8gZm9sbG93IHRoZSBzeW1saW5rIHVubGVzcworICAgICAgKmZvbGxvd19zeW1saW5rcyogaXMgYGBGYWxzZWBgLgorCisgICAgICBUaGlzIG1ldGhvZCBjYW4gcmFpc2UgOmV4YzpgT1NFcnJvcmAsIHN1Y2ggYXMgOmV4YzpgUGVybWlzc2lvbkVycm9yYCwKKyAgICAgIGJ1dCA6ZXhjOmBGaWxlTm90Rm91bmRFcnJvcmAgaXMgY2F1Z2h0IGFuZCBub3QgcmFpc2VkLgorCisgICAuLiBtZXRob2Q6OiBpc19maWxlKFwqLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoaXMgZW50cnkgaXMgYSBmaWxlIG9yIGEgc3ltYm9saWMgbGluayBwb2ludGluZyB0byBhCisgICAgICBmaWxlOyByZXR1cm4gYGBGYWxzZWBgIGlmIHRoZSBlbnRyeSBpcyBvciBwb2ludHMgdG8gYSBkaXJlY3Rvcnkgb3Igb3RoZXIKKyAgICAgIG5vbi1maWxlIGVudHJ5LCBvciBpZiBpdCBkb2Vzbid0IGV4aXN0IGFueW1vcmUuCisKKyAgICAgIElmICpmb2xsb3dfc3ltbGlua3MqIGlzIGBgRmFsc2VgYCwgcmV0dXJuIGBgVHJ1ZWBgIG9ubHkgaWYgdGhpcyBlbnRyeQorICAgICAgaXMgYSBmaWxlICh3aXRob3V0IGZvbGxvd2luZyBzeW1saW5rcyk7IHJldHVybiBgYEZhbHNlYGAgaWYgdGhlIGVudHJ5IGlzCisgICAgICBhIGRpcmVjdG9yeSBvciBvdGhlciBub24tZmlsZSBlbnRyeSwgb3IgaWYgaXQgZG9lc24ndCBleGlzdCBhbnltb3JlLgorCisgICAgICBUaGUgcmVzdWx0IGlzIGNhY2hlZCBvbiB0aGUgYGBEaXJFbnRyeWBgIG9iamVjdC4gQ2FjaGluZywgc3lzdGVtIGNhbGxzCisgICAgICBtYWRlLCBhbmQgZXhjZXB0aW9ucyByYWlzZWQgYXJlIGFzIHBlciA6ZnVuYzpgfkRpckVudHJ5LmlzX2RpcmAuCisKKyAgIC4uIG1ldGhvZDo6IGlzX3N5bWxpbmsoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhpcyBlbnRyeSBpcyBhIHN5bWJvbGljIGxpbmsgKGV2ZW4gaWYgYnJva2VuKTsKKyAgICAgIHJldHVybiBgYEZhbHNlYGAgaWYgdGhlIGVudHJ5IHBvaW50cyB0byBhIGRpcmVjdG9yeSBvciBhbnkga2luZCBvZiBmaWxlLAorICAgICAgb3IgaWYgaXQgZG9lc24ndCBleGlzdCBhbnltb3JlLgorCisgICAgICBUaGUgcmVzdWx0IGlzIGNhY2hlZCBvbiB0aGUgYGBEaXJFbnRyeWBgIG9iamVjdC4gQ2FsbAorICAgICAgOmZ1bmM6YG9zLnBhdGguaXNsaW5rYCB0byBmZXRjaCB1cC10by1kYXRlIGluZm9ybWF0aW9uLgorCisgICAgICBPbiB0aGUgZmlyc3QsIHVuY2FjaGVkIGNhbGwsIG5vIHN5c3RlbSBjYWxsIGlzIHJlcXVpcmVkIGluIG1vc3QgY2FzZXMuCisgICAgICBTcGVjaWZpY2FsbHksIG5laXRoZXIgV2luZG93cyBvciBVbml4IHJlcXVpcmUgYSBzeXN0ZW0gY2FsbCwgZXhjZXB0IG9uCisgICAgICBjZXJ0YWluIFVuaXggZmlsZSBzeXN0ZW1zLCBzdWNoIGFzIG5ldHdvcmsgZmlsZSBzeXN0ZW1zLCB0aGF0IHJldHVybgorICAgICAgYGBkaXJlbnQuZF90eXBlID09IERUX1VOS05PV05gYC4KKworICAgICAgVGhpcyBtZXRob2QgY2FuIHJhaXNlIDpleGM6YE9TRXJyb3JgLCBzdWNoIGFzIDpleGM6YFBlcm1pc3Npb25FcnJvcmAsCisgICAgICBidXQgOmV4YzpgRmlsZU5vdEZvdW5kRXJyb3JgIGlzIGNhdWdodCBhbmQgbm90IHJhaXNlZC4KKworICAgLi4gbWV0aG9kOjogc3RhdChcKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpCisKKyAgICAgIFJldHVybiBhIDpjbGFzczpgc3RhdF9yZXN1bHRgIG9iamVjdCBmb3IgdGhpcyBlbnRyeS4gVGhpcyBtZXRob2QKKyAgICAgIGZvbGxvd3Mgc3ltYm9saWMgbGlua3MgYnkgZGVmYXVsdDsgdG8gc3RhdCBhIHN5bWJvbGljIGxpbmsgYWRkIHRoZQorICAgICAgYGBmb2xsb3dfc3ltbGlua3M9RmFsc2VgYCBhcmd1bWVudC4KKworICAgICAgT24gVW5peCwgdGhpcyBtZXRob2QgYWx3YXlzIHJlcXVpcmVzIGEgc3lzdGVtIGNhbGwuIE9uIFdpbmRvd3MsIGl0CisgICAgICBvbmx5IHJlcXVpcmVzIGEgc3lzdGVtIGNhbGwgaWYgKmZvbGxvd19zeW1saW5rcyogaXMgYGBUcnVlYGAgYW5kIHRoZQorICAgICAgZW50cnkgaXMgYSBzeW1ib2xpYyBsaW5rLgorCisgICAgICBPbiBXaW5kb3dzLCB0aGUgYGBzdF9pbm9gYCwgYGBzdF9kZXZgYCBhbmQgYGBzdF9ubGlua2BgIGF0dHJpYnV0ZXMgb2YgdGhlCisgICAgICA6Y2xhc3M6YHN0YXRfcmVzdWx0YCBhcmUgYWx3YXlzIHNldCB0byB6ZXJvLiBDYWxsIDpmdW5jOmBvcy5zdGF0YCB0bworICAgICAgZ2V0IHRoZXNlIGF0dHJpYnV0ZXMuCisKKyAgICAgIFRoZSByZXN1bHQgaXMgY2FjaGVkIG9uIHRoZSBgYERpckVudHJ5YGAgb2JqZWN0LCB3aXRoIGEgc2VwYXJhdGUgY2FjaGUKKyAgICAgIGZvciAqZm9sbG93X3N5bWxpbmtzKiBgYFRydWVgYCBhbmQgYGBGYWxzZWBgLiBDYWxsIDpmdW5jOmBvcy5zdGF0YCB0bworICAgICAgZmV0Y2ggdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbi4KKworICAgTm90ZSB0aGF0IHRoZXJlIGlzIGEgbmljZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIHNldmVyYWwgYXR0cmlidXRlcworICAgYW5kIG1ldGhvZHMgb2YgYGBEaXJFbnRyeWBgIGFuZCBvZiA6Y2xhc3M6YHBhdGhsaWIuUGF0aGAuICBJbgorICAgcGFydGljdWxhciwgdGhlIGBgbmFtZWBgIGF0dHJpYnV0ZSBoYXMgdGhlIHNhbWUgbWVhbmluZywgYXMgZG8gdGhlCisgICBgYGlzX2RpcigpYGAsIGBgaXNfZmlsZSgpYGAsIGBgaXNfc3ltbGluaygpYGAgYW5kIGBgc3RhdCgpYGAgbWV0aG9kcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gZnVuY3Rpb246OiBzdGF0KHBhdGgsIFwqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpCiAKICAgIEdldCB0aGUgc3RhdHVzIG9mIGEgZmlsZSBvciBhIGZpbGUgZGVzY3JpcHRvci4gUGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBhCkBAIC0xODkwLDggKzIwODUsNiBAQAogICAgICAgPj4+IHN0YXRpbmZvLnN0X3NpemUKICAgICAgIDI2NAogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KICAgIC4uIHNlZWFsc286OgogCiAgICAgICA6ZnVuYzpgZnN0YXRgIGFuZCA6ZnVuYzpgbHN0YXRgIGZ1bmN0aW9ucy4KQEAgLTIwMzksNiArMjIzMiwxNSBAQAogCiAgICAgICBGaWxlIHR5cGUuCiAKKyAgIE9uIFdpbmRvd3Mgc3lzdGVtcywgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGUgaXMgYWxzbyBhdmFpbGFibGU6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2ZpbGVfYXR0cmlidXRlcworCisgICAgICBXaW5kb3dzIGZpbGUgYXR0cmlidXRlczogYGBkd0ZpbGVBdHRyaWJ1dGVzYGAgbWVtYmVyIG9mIHRoZQorICAgICAgYGBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTmBgIHN0cnVjdHVyZSByZXR1cm5lZCBieQorICAgICAgOmM6ZnVuYzpgR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGVgLiBTZWUgdGhlIGBgRklMRV9BVFRSSUJVVEVfKmBgCisgICAgICBjb25zdGFudHMgaW4gdGhlIDptb2Q6YHN0YXRgIG1vZHVsZS4KKwogICAgVGhlIHN0YW5kYXJkIG1vZHVsZSA6bW9kOmBzdGF0YCBkZWZpbmVzIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzIHRoYXQgYXJlCiAgICB1c2VmdWwgZm9yIGV4dHJhY3RpbmcgaW5mb3JtYXRpb24gZnJvbSBhIDpjOnR5cGU6YHN0YXRgIHN0cnVjdHVyZS4gKE9uCiAgICBXaW5kb3dzLCBzb21lIGl0ZW1zIGFyZSBmaWxsZWQgd2l0aCBkdW1teSB2YWx1ZXMuKQpAQCAtMjA1Niw2ICsyMjU4LDkgQEAKICAgICAgIEFkZGVkIHRoZSA6YXR0cjpgc3RfYXRpbWVfbnNgLCA6YXR0cjpgc3RfbXRpbWVfbnNgLCBhbmQKICAgICAgIDphdHRyOmBzdF9jdGltZV9uc2AgbWVtYmVycy4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisgICAgICBBZGRlZCB0aGUgOmF0dHI6YHN0X2ZpbGVfYXR0cmlidXRlc2AgbWVtYmVyIG9uIFdpbmRvd3MuCisKIAogLi4gZnVuY3Rpb246OiBzdGF0X2Zsb2F0X3RpbWVzKFtuZXd2YWx1ZV0pCiAKQEAgLTIyNTksMTkgKzI0NjQsMTkgQEAKIAogICAgVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCA6cmVmOmBzcGVjaWZ5aW5nIGEgZmlsZSBkZXNjcmlwdG9yIDxwYXRoX2ZkPmAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBXaW5kb3dzCiAKIC4uIGZ1bmN0aW9uOjogdW5saW5rKHBhdGgsICosIGRpcl9mZD1Ob25lKQogCi0gICBSZW1vdmUgKGRlbGV0ZSkgdGhlIGZpbGUgKnBhdGgqLiAgVGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8KLSAgIDpmdW5jOmByZW1vdmVgOyB0aGUgYGB1bmxpbmtgYCBuYW1lIGlzIGl0cyB0cmFkaXRpb25hbCBVbml4Ci0gICBuYW1lLiAgUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgOmZ1bmM6YHJlbW92ZWAgZm9yCi0gICBmdXJ0aGVyIGluZm9ybWF0aW9uLgotCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCisgICBSZW1vdmUgKGRlbGV0ZSkgdGhlIGZpbGUgKnBhdGgqLiAgVGhpcyBmdW5jdGlvbiBpcyBzZW1hbnRpY2FsbHkKKyAgIGlkZW50aWNhbCB0byA6ZnVuYzpgcmVtb3ZlYDsgdGhlIGBgdW5saW5rYGAgbmFtZSBpcyBpdHMKKyAgIHRyYWRpdGlvbmFsIFVuaXggbmFtZS4gIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisgICA6ZnVuYzpgcmVtb3ZlYCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAgICAgICBUaGUgKmRpcl9mZCogcGFyYW1ldGVyLgpAQCAtMjMwOSw4ICsyNTE0LDYgQEAKICAgIDpyZWY6YHBhdGhzIHJlbGF0aXZlIHRvIGRpcmVjdG9yeSBkZXNjcmlwdG9ycyA8ZGlyX2ZkPmAgYW5kIDpyZWY6YG5vdAogICAgZm9sbG93aW5nIHN5bWxpbmtzIDxmb2xsb3dfc3ltbGlua3M+YC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgotCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgZm9yICpwYXRoKiwKICAgICAgIGFuZCB0aGUgKmRpcl9mZCosICpmb2xsb3dfc3ltbGlua3MqLCBhbmQgKm5zKiBwYXJhbWV0ZXJzLgpAQCAtMjQwMSw2ICsyNjA0LDEwIEBACiAgICAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhpcyBmdW5jdGlvbiBub3cgY2FsbHMgOmZ1bmM6YG9zLnNjYW5kaXJgIGluc3RlYWQgb2YgOmZ1bmM6YG9zLmxpc3RkaXJgLAorICAgICAgbWFraW5nIGl0IGZhc3RlciBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIDpmdW5jOmBvcy5zdGF0YC4KKwogCiAuLiBmdW5jdGlvbjo6IGZ3YWxrKHRvcD0nLicsIHRvcGRvd249VHJ1ZSwgb25lcnJvcj1Ob25lLCAqLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UsIGRpcl9mZD1Ob25lKQogCkBAIC0yNTU3LDggKzI3NjQsNiBAQAogICAgUHl0aG9uIHNpZ25hbCBoYW5kbGVyIHJlZ2lzdGVyZWQgZm9yIDpjb25zdDpgU0lHQUJSVGAgd2l0aAogICAgOmZ1bmM6YHNpZ25hbC5zaWduYWxgLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCi0KIAogLi4gZnVuY3Rpb246OiBleGVjbChwYXRoLCBhcmcwLCBhcmcxLCAuLi4pCiAgICAgICAgICAgICAgIGV4ZWNsZShwYXRoLCBhcmcwLCBhcmcxLCAuLi4sIGVudikKQEAgLTI2MjIsOCArMjgyNyw2IEBACiAgICBFeGl0IHRoZSBwcm9jZXNzIHdpdGggc3RhdHVzICpuKiwgd2l0aG91dCBjYWxsaW5nIGNsZWFudXAgaGFuZGxlcnMsIGZsdXNoaW5nCiAgICBzdGRpbyBidWZmZXJzLCBldGMuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KLQogICAgLi4gbm90ZTo6CiAKICAgICAgIFRoZSBzdGFuZGFyZCB3YXkgdG8gZXhpdCBpcyBgYHN5cy5leGl0KG4pYGAuICA6ZnVuYzpgX2V4aXRgIHNob3VsZApAQCAtMjk4Niw2ICszMTg5LDEwIEBACiAgICBkb2Vzbid0IHdvcmsgaWYgaXQgaXMuICBVc2UgdGhlIDpmdW5jOmBvcy5wYXRoLm5vcm1wYXRoYCBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdAogICAgdGhlIHBhdGggaXMgcHJvcGVybHkgZW5jb2RlZCBmb3IgV2luMzIuCiAKKyAgIFRvIHJlZHVjZSBpbnRlcnByZXRlciBzdGFydHVwIG92ZXJoZWFkLCB0aGUgV2luMzIgOmM6ZnVuYzpgU2hlbGxFeGVjdXRlYAorICAgZnVuY3Rpb24gaXMgbm90IHJlc29sdmVkIHVudGlsIHRoaXMgZnVuY3Rpb24gaXMgZmlyc3QgY2FsbGVkLiAgSWYgdGhlIGZ1bmN0aW9uCisgICBjYW5ub3QgYmUgcmVzb2x2ZWQsIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorCiAgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCiAKIApAQCAtMzEzMyw2ICszMzQwLDExIEBACiAgICBpZCBpcyBrbm93biwgbm90IG5lY2Vzc2FyaWx5IGEgY2hpbGQgcHJvY2Vzcy4gVGhlIDpmdW5jOmBzcGF3blwqIDxzcGF3bmw+YAogICAgZnVuY3Rpb25zIGNhbGxlZCB3aXRoIDpjb25zdDpgUF9OT1dBSVRgIHJldHVybiBzdWl0YWJsZSBwcm9jZXNzIGhhbmRsZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBJZiB0aGUgc3lzdGVtIGNhbGwgaXMgaW50ZXJydXB0ZWQgYW5kIHRoZSBzaWduYWwgaGFuZGxlciBkb2VzIG5vdCByYWlzZSBhbgorICAgICAgZXhjZXB0aW9uLCB0aGUgZnVuY3Rpb24gbm93IHJldHJpZXMgdGhlIHN5c3RlbSBjYWxsIGluc3RlYWQgb2YgcmFpc2luZyBhbgorICAgICAgOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAgZXhjZXB0aW9uIChzZWUgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSkuCisKIAogLi4gZnVuY3Rpb246OiB3YWl0MyhvcHRpb25zKQogCkBAIC0zMjg2LDcgKzM0OTgsNyBAQAogCiAuLiBkYXRhOjogU0NIRURfUkVTRVRfT05fRk9SSwogCi0gICBUaGlzIGZsYWcgY2FuIE9SJ2VkIHdpdGggYW55IG90aGVyIHNjaGVkdWxpbmcgcG9saWN5LiBXaGVuIGEgcHJvY2VzcyB3aXRoCisgICBUaGlzIGZsYWcgY2FuIGJlIE9SJ2VkIHdpdGggYW55IG90aGVyIHNjaGVkdWxpbmcgcG9saWN5LiBXaGVuIGEgcHJvY2VzcyB3aXRoCiAgICB0aGlzIGZsYWcgc2V0IGZvcmtzLCBpdHMgY2hpbGQncyBzY2hlZHVsaW5nIHBvbGljeSBhbmQgcHJpb3JpdHkgYXJlIHJlc2V0IHRvCiAgICB0aGUgZGVmYXVsdC4KIApAQCAtMzUzMywxMCArMzc0NSwyMyBAQAogCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmFuZG9tIGJ5dGVzIGZyb20gYW4gT1Mtc3BlY2lmaWMgcmFuZG9tbmVzcyBzb3VyY2UuICBUaGUKICAgIHJldHVybmVkIGRhdGEgc2hvdWxkIGJlIHVucHJlZGljdGFibGUgZW5vdWdoIGZvciBjcnlwdG9ncmFwaGljIGFwcGxpY2F0aW9ucywKLSAgIHRob3VnaCBpdHMgZXhhY3QgcXVhbGl0eSBkZXBlbmRzIG9uIHRoZSBPUyBpbXBsZW1lbnRhdGlvbi4gIE9uIGEgVW5peC1saWtlCi0gICBzeXN0ZW0gdGhpcyB3aWxsIHF1ZXJ5IGBgL2Rldi91cmFuZG9tYGAsIGFuZCBvbiBXaW5kb3dzIGl0IHdpbGwgdXNlCi0gICBgYENyeXB0R2VuUmFuZG9tKClgYC4gIElmIGEgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGZvdW5kLAorICAgdGhvdWdoIGl0cyBleGFjdCBxdWFsaXR5IGRlcGVuZHMgb24gdGhlIE9TIGltcGxlbWVudGF0aW9uLgorCisgICBPbiBMaW51eCwgYGBnZXRyYW5kb20oKWBgIHN5c2NhbGwgaXMgdXNlZCBpZiBhdmFpbGFibGUgYW5kIHRoZSB1cmFuZG9tCisgICBlbnRyb3B5IHBvb2wgaXMgaW5pdGlhbGl6ZWQgKGBgZ2V0cmFuZG9tKClgYCBkb2VzIG5vdCBibG9jaykuCisgICBPbiBhIFVuaXgtbGlrZSBzeXN0ZW0gdGhpcyB3aWxsIHF1ZXJ5IGBgL2Rldi91cmFuZG9tYGAuIE9uIFdpbmRvd3MsIGl0CisgICB3aWxsIHVzZSBgYENyeXB0R2VuUmFuZG9tKClgYC4gIElmIGEgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGZvdW5kLAogICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAKICAgIEZvciBhbiBlYXN5LXRvLXVzZSBpbnRlcmZhY2UgdG8gdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCiAgICBwcm92aWRlZCBieSB5b3VyIHBsYXRmb3JtLCBwbGVhc2Ugc2VlIDpjbGFzczpgcmFuZG9tLlN5c3RlbVJhbmRvbWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41LjIKKyAgICAgIE9uIExpbnV4LCBpZiBgYGdldHJhbmRvbSgpYGAgYmxvY2tzICh0aGUgdXJhbmRvbSBlbnRyb3B5IHBvb2wgaXMgbm90CisgICAgICBpbml0aWFsaXplZCB5ZXQpLCBmYWxsIGJhY2sgb24gcmVhZGluZyBgYC9kZXYvdXJhbmRvbWBgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgT24gTGludXggMy4xNyBhbmQgbmV3ZXIsIHRoZSBgYGdldHJhbmRvbSgpYGAgc3lzY2FsbCBpcyBub3cgdXNlZAorICAgICAgd2hlbiBhdmFpbGFibGUuICBPbiBPcGVuQlNEIDUuNiBhbmQgbmV3ZXIsIHRoZSBDIGBgZ2V0ZW50cm9weSgpYGAKKyAgICAgIGZ1bmN0aW9uIGlzIG5vdyB1c2VkLiBUaGVzZSBmdW5jdGlvbnMgYXZvaWQgdGhlIHVzYWdlIG9mIGFuIGludGVybmFsIGZpbGUKKyAgICAgIGRlc2NyaXB0b3IuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vc3NhdWRpb2Rldi5yc3QgYi9Eb2MvbGlicmFyeS9vc3NhdWRpb2Rldi5yc3QKaW5kZXggYmI1MDgxYS4uZWM0MGMwYjkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zc2F1ZGlvZGV2LnJzdAorKysgYi9Eb2MvbGlicmFyeS9vc3NhdWRpb2Rldi5yc3QKQEAgLTUsNiArNSw3IEBACiAgICA6cGxhdGZvcm06IExpbnV4LCBGcmVlQlNECiAgICA6c3lub3BzaXM6IEFjY2VzcyB0byBPU1MtY29tcGF0aWJsZSBhdWRpbyBkZXZpY2VzLgogCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBhbGxvd3MgeW91IHRvIGFjY2VzcyB0aGUgT1NTIChPcGVuIFNvdW5kIFN5c3RlbSkgYXVkaW8gaW50ZXJmYWNlLgogT1NTIGlzIGF2YWlsYWJsZSBmb3IgYSB3aWRlIHJhbmdlIG9mIG9wZW4tc291cmNlIGFuZCBjb21tZXJjaWFsIFVuaWNlcywgYW5kIGlzCkBAIC0xNDgsMjEgKzE0OSwzMCBAQAogCiAuLiBtZXRob2Q6OiBvc3NfYXVkaW9fZGV2aWNlLndyaXRlKGRhdGEpCiAKLSAgIFdyaXRlIHRoZSBQeXRob24gc3RyaW5nICpkYXRhKiB0byB0aGUgYXVkaW8gZGV2aWNlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZgotICAgYnl0ZXMgd3JpdHRlbi4gIElmIHRoZSBhdWRpbyBkZXZpY2UgaXMgaW4gYmxvY2tpbmcgbW9kZSAodGhlIGRlZmF1bHQpLCB0aGUKLSAgIGVudGlyZSBzdHJpbmcgaXMgYWx3YXlzIHdyaXR0ZW4gKGFnYWluLCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHVzdWFsIFVuaXggZGV2aWNlCi0gICBzZW1hbnRpY3MpLiAgSWYgdGhlIGRldmljZSBpcyBpbiBub24tYmxvY2tpbmcgbW9kZSwgc29tZSBkYXRhIG1heSBub3QgYmUgd3JpdHRlbgorICAgV3JpdGUgYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgICpkYXRhKiB0byB0aGUgYXVkaW8gZGV2aWNlIGFuZCByZXR1cm4gdGhlCisgICBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gIElmIHRoZSBhdWRpbyBkZXZpY2UgaXMgaW4gYmxvY2tpbmcgbW9kZSAodGhlCisgICBkZWZhdWx0KSwgdGhlIGVudGlyZSBkYXRhIGlzIGFsd2F5cyB3cml0dGVuIChhZ2FpbiwgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorICAgdXN1YWwgVW5peCBkZXZpY2Ugc2VtYW50aWNzKS4gIElmIHRoZSBkZXZpY2UgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUsIHNvbWUKKyAgIGRhdGEgbWF5IG5vdCBiZSB3cml0dGVuCiAgICAtLS1zZWUgOm1ldGg6YHdyaXRlYWxsYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFdyaXRhYmxlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaXMgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IG9zc19hdWRpb19kZXZpY2Uud3JpdGVhbGwoZGF0YSkKIAotICAgV3JpdGUgdGhlIGVudGlyZSBQeXRob24gc3RyaW5nICpkYXRhKiB0byB0aGUgYXVkaW8gZGV2aWNlOiB3YWl0cyB1bnRpbCB0aGUgYXVkaW8KLSAgIGRldmljZSBpcyBhYmxlIHRvIGFjY2VwdCBkYXRhLCB3cml0ZXMgYXMgbXVjaCBkYXRhIGFzIGl0IHdpbGwgYWNjZXB0LCBhbmQKLSAgIHJlcGVhdHMgdW50aWwgKmRhdGEqIGhhcyBiZWVuIGNvbXBsZXRlbHkgd3JpdHRlbi4gSWYgdGhlIGRldmljZSBpcyBpbiBibG9ja2luZwotICAgbW9kZSAodGhlIGRlZmF1bHQpLCB0aGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgOm1ldGg6YHdyaXRlYDsgOm1ldGg6YHdyaXRlYWxsYAotICAgaXMgb25seSB1c2VmdWwgaW4gbm9uLWJsb2NraW5nIG1vZGUuICBIYXMgbm8gcmV0dXJuIHZhbHVlLCBzaW5jZSB0aGUgYW1vdW50IG9mCi0gICBkYXRhIHdyaXR0ZW4gaXMgYWx3YXlzIGVxdWFsIHRvIHRoZSBhbW91bnQgb2YgZGF0YSBzdXBwbGllZC4KKyAgIFdyaXRlIGEgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCAqZGF0YSogdG8gdGhlIGF1ZGlvIGRldmljZTogd2FpdHMgdW50aWwKKyAgIHRoZSBhdWRpbyBkZXZpY2UgaXMgYWJsZSB0byBhY2NlcHQgZGF0YSwgd3JpdGVzIGFzIG11Y2ggZGF0YSBhcyBpdCB3aWxsCisgICBhY2NlcHQsIGFuZCByZXBlYXRzIHVudGlsICpkYXRhKiBoYXMgYmVlbiBjb21wbGV0ZWx5IHdyaXR0ZW4uIElmIHRoZSBkZXZpY2UKKyAgIGlzIGluIGJsb2NraW5nIG1vZGUgKHRoZSBkZWZhdWx0KSwgdGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzCisgICA6bWV0aDpgd3JpdGVgOyA6bWV0aDpgd3JpdGVhbGxgIGlzIG9ubHkgdXNlZnVsIGluIG5vbi1ibG9ja2luZyBtb2RlLiAgSGFzCisgICBubyByZXR1cm4gdmFsdWUsIHNpbmNlIHRoZSBhbW91bnQgb2YgZGF0YSB3cml0dGVuIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUKKyAgIGFtb3VudCBvZiBkYXRhIHN1cHBsaWVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgV3JpdGFibGUgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCisKIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgIEF1ZGlvIGRldmljZSBvYmplY3RzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLCBpLmUuIHRoZXkgY2FuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vdGhlcmd1aS5yc3QgYi9Eb2MvbGlicmFyeS9vdGhlcmd1aS5yc3QKaW5kZXggNDM3MjFiMi4uZWUxY2U1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3RoZXJndWkucnN0CisrKyBiL0RvYy9saWJyYXJ5L290aGVyZ3VpLnJzdApAQCAtOCw0MCArOCw0MCBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYFB5R09iamVjdCA8aHR0cHM6Ly9saXZlLmdub21lLm9yZy9QeUdPYmplY3Q+YF8KKyAgIGBQeUdPYmplY3QgPGh0dHBzOi8vd2lraS5nbm9tZS5vcmcvUHJvamVjdHMvUHlHT2JqZWN0PmBfCiAgICAgICBwcm92aWRlcyBpbnRyb3NwZWN0aW9uIGJpbmRpbmdzIGZvciBDIGxpYnJhcmllcyB1c2luZwogICAgICAgYEdPYmplY3QgPGh0dHBzOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nb2JqZWN0L3N0YWJsZS8+YF8uICBPbmUgb2YKICAgICAgIHRoZXNlIGxpYnJhcmllcyBpcyB0aGUgYEdUSysgMyA8aHR0cDovL3d3dy5ndGsub3JnLz5gXyB3aWRnZXQgc2V0LgogICAgICAgR1RLKyBjb21lcyB3aXRoIG1hbnkgbW9yZSB3aWRnZXRzIHRoYW4gVGtpbnRlciBwcm92aWRlcy4gIEFuIG9ubGluZQotICAgICAgYFB5dGhvbiBHVEsrIDMgVHV0b3JpYWwgPGh0dHA6Ly9weXRob24tZ3RrLTMtdHV0b3JpYWwucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC8+YF8KKyAgICAgIGBQeXRob24gR1RLKyAzIFR1dG9yaWFsIDxodHRwczovL3B5dGhvbi1ndGstMy10dXRvcmlhbC5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0Lz5gXwogICAgICAgaXMgYXZhaWxhYmxlLgogCiAgICAgICBgUHlHVEsgPGh0dHA6Ly93d3cucHlndGsub3JnLz5gXyBwcm92aWRlcyBiaW5kaW5ncyBmb3IgYW4gb2xkZXIgdmVyc2lvbgogICAgICAgb2YgdGhlIGxpYnJhcnksIEdUSysgMi4gIEl0IHByb3ZpZGVzIGFuIG9iamVjdCBvcmllbnRlZCBpbnRlcmZhY2UgdGhhdAogICAgICAgaXMgc2xpZ2h0bHkgaGlnaGVyIGxldmVsIHRoYW4gdGhlIEMgb25lLiAgVGhlcmUgYXJlIGFsc28gYmluZGluZ3MgdG8KLSAgICAgIGBHTk9NRSA8aHR0cDovL3d3dy5nbm9tZS5vcmc+YF8uICBBbiBvbmxpbmUgYHR1dG9yaWFsCisgICAgICBgR05PTUUgPGh0dHBzOi8vd3d3Lmdub21lLm9yZy8+YF8uICBBbiBvbmxpbmUgYHR1dG9yaWFsCiAgICAgICA8aHR0cDovL3d3dy5weWd0ay5vcmcvcHlndGsydHV0b3JpYWwvaW5kZXguaHRtbD5gXyBpcyBhdmFpbGFibGUuCiAKLSAgIGBQeVF0IDxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51ay9zb2Z0d2FyZS9weXF0L2ludHJvPmBfCisgICBgUHlRdCA8aHR0cHM6Ly9yaXZlcmJhbmtjb21wdXRpbmcuY29tL3NvZnR3YXJlL3B5cXQvaW50cm8+YF8KICAgICAgIFB5UXQgaXMgYSA6cHJvZ3JhbTpgc2lwYFwgLXdyYXBwZWQgYmluZGluZyB0byB0aGUgUXQgdG9vbGtpdC4gIFF0IGlzIGFuCiAgICAgICBleHRlbnNpdmUgQysrIEdVSSBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBmcmFtZXdvcmsgdGhhdCBpcwogICAgICAgYXZhaWxhYmxlIGZvciBVbml4LCBXaW5kb3dzIGFuZCBNYWMgT1MgWC4gOnByb2dyYW06YHNpcGAgaXMgYSB0b29sCiAgICAgICBmb3IgZ2VuZXJhdGluZyBiaW5kaW5ncyBmb3IgQysrIGxpYnJhcmllcyBhcyBQeXRob24gY2xhc3NlcywgYW5kCiAgICAgICBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIFB5dGhvbi4gVGhlICpQeVF0MyogYmluZGluZ3MgaGF2ZSBhCiAgICAgICBib29rLCBgR1VJIFByb2dyYW1taW5nIHdpdGggUHl0aG9uOiBRVCBFZGl0aW9uCi0gICAgICA8aHR0cDovL3d3dy5jb21tYW5kcHJvbXB0LmNvbS9jb21tdW5pdHkvcHlxdC8+YF8gYnkgQm91ZGV3aWpuCisgICAgICA8aHR0cHM6Ly93d3cuY29tbWFuZHByb21wdC5jb20vY29tbXVuaXR5L3B5cXQvPmBfIGJ5IEJvdWRld2lqbgogICAgICAgUmVtcHQuIFRoZSAqUHlRdDQqIGJpbmRpbmdzIGFsc28gaGF2ZSBhIGJvb2ssIGBSYXBpZCBHVUkgUHJvZ3JhbW1pbmcKLSAgICAgIHdpdGggUHl0aG9uIGFuZCBRdCA8aHR0cDovL3d3dy5xdHJhYy5ldS9weXF0Ym9vay5odG1sPmBfLCBieSBNYXJrCisgICAgICB3aXRoIFB5dGhvbiBhbmQgUXQgPGh0dHBzOi8vd3d3LnF0cmFjLmV1L3B5cXRib29rLmh0bWw+YF8sIGJ5IE1hcmsKICAgICAgIFN1bW1lcmZpZWxkLgogCi0gICBgUHlTaWRlIDxodHRwOi8vcXQtcHJvamVjdC5vcmcvd2lraS9QeVNpZGU+YF8KKyAgIGBQeVNpZGUgPGh0dHBzOi8vd2lraS5xdC5pby9QeVNpZGU+YF8KICAgICAgIGlzIGEgbmV3ZXIgYmluZGluZyB0byB0aGUgUXQgdG9vbGtpdCwgcHJvdmlkZWQgYnkgTm9raWEuCiAgICAgICBDb21wYXJlZCB0byBQeVF0LCBpdHMgbGljZW5zaW5nIHNjaGVtZSBpcyBmcmllbmRsaWVyIHRvIG5vbi1vcGVuIHNvdXJjZQogICAgICAgYXBwbGljYXRpb25zLgogCiAgICBgd3hQeXRob24gPGh0dHA6Ly93d3cud3hweXRob24ub3JnPmBfCiAgICAgICB3eFB5dGhvbiBpcyBhIGNyb3NzLXBsYXRmb3JtIEdVSSB0b29sa2l0IGZvciBQeXRob24gdGhhdCBpcyBidWlsdCBhcm91bmQKLSAgICAgIHRoZSBwb3B1bGFyIGB3eFdpZGdldHMgPGh0dHA6Ly93d3cud3h3aWRnZXRzLm9yZy8+YF8gKGZvcm1lcmx5IHd4V2luZG93cykKKyAgICAgIHRoZSBwb3B1bGFyIGB3eFdpZGdldHMgPGh0dHBzOi8vd3d3Lnd4d2lkZ2V0cy5vcmcvPmBfIChmb3JtZXJseSB3eFdpbmRvd3MpCiAgICAgICBDKysgdG9vbGtpdC4gIEl0IHByb3ZpZGVzIGEgbmF0aXZlIGxvb2sgYW5kIGZlZWwgZm9yIGFwcGxpY2F0aW9ucyBvbgogICAgICAgV2luZG93cywgTWFjIE9TIFgsIGFuZCBVbml4IHN5c3RlbXMgYnkgdXNpbmcgZWFjaCBwbGF0Zm9ybSdzIG5hdGl2ZQogICAgICAgd2lkZ2V0cyB3aGVyZSBldmVyIHBvc3NpYmxlLCAoR1RLKyBvbiBVbml4LWxpa2Ugc3lzdGVtcykuICBJbiBhZGRpdGlvbiB0bwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgbG93LWxldmVsIGRldmljZSBjb250ZXh0IGRyYXdpbmcsIGRyYWcgYW5kIGRyb3AsIHN5c3RlbSBjbGlwYm9hcmQgYWNjZXNzLAogICAgICAgYW4gWE1MLWJhc2VkIHJlc291cmNlIGZvcm1hdCBhbmQgbW9yZSwgaW5jbHVkaW5nIGFuIGV2ZXIgZ3Jvd2luZyBsaWJyYXJ5CiAgICAgICBvZiB1c2VyLWNvbnRyaWJ1dGVkIG1vZHVsZXMuICB3eFB5dGhvbiBoYXMgYSBib29rLCBgd3hQeXRob24gaW4gQWN0aW9uCi0gICAgICA8aHR0cDovL3d3dy5tYW5uaW5nLmNvbS9yYXBwaW4vPmBfLCBieSBOb2VsIFJhcHBpbiBhbmQKKyAgICAgIDxodHRwczovL3d3dy5tYW5uaW5nLmNvbS9ib29rcy93eHB5dGhvbi1pbi1hY3Rpb24+YF8sIGJ5IE5vZWwgUmFwcGluIGFuZAogICAgICAgUm9iaW4gRHVubi4KIAogUHlHVEssIFB5UXQsIGFuZCB3eFB5dGhvbiwgYWxsIGhhdmUgYSBtb2Rlcm4gbG9vayBhbmQgZmVlbCBhbmQgbW9yZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L3BhcnNlci5yc3QKaW5kZXggM2UxZTMxYi4uYzNiNjk5YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGFyc2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wYXJzZXIucnN0CkBAIC0zLDEwICszLDEwIEBACiAKIC4uIG1vZHVsZTo6IHBhcnNlcgogICAgOnN5bm9wc2lzOiBBY2Nlc3MgcGFyc2UgdHJlZXMgZm9yIFB5dGhvbiBzb3VyY2UgY29kZS4KKwogLi4gbW9kdWxlYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCi0KIC4uIENvcHlyaWdodCAxOTk1IFZpcmdpbmlhIFBvbHl0ZWNobmljIEluc3RpdHV0ZSBhbmQgU3RhdGUgVW5pdmVyc2l0eSBhbmQgRnJlZAogICAgTC4gRHJha2UsIEpyLiAgVGhpcyBjb3B5cmlnaHQgbm90aWNlIG11c3QgYmUgZGlzdHJpYnV0ZWQgb24gYWxsIGNvcGllcywgYnV0CiAgICB0aGlzIGRvY3VtZW50IG90aGVyd2lzZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgUHl0aG9uCkBAIC0xNiw2ICsxNiw4IEBACiAKIC4uIGluZGV4Ojogc2luZ2xlOiBwYXJzaW5nOyBQeXRob24gc291cmNlIGNvZGUKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YHBhcnNlcmAgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byBQeXRob24ncyBpbnRlcm5hbCBwYXJzZXIgYW5kCiBieXRlLWNvZGUgY29tcGlsZXIuICBUaGUgcHJpbWFyeSBwdXJwb3NlIGZvciB0aGlzIGludGVyZmFjZSBpcyB0byBhbGxvdyBQeXRob24KIGNvZGUgdG8gZWRpdCB0aGUgcGFyc2UgdHJlZSBvZiBhIFB5dGhvbiBleHByZXNzaW9uIGFuZCBjcmVhdGUgZXhlY3V0YWJsZSBjb2RlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wYXRobGliLnJzdCBiL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0CmluZGV4IDI0ZTJhMzAuLjU3YTZhODQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0CkBAIC01LDkgKzUsMTMgQEAKIC4uIG1vZHVsZTo6IHBhdGhsaWIKICAgIDpzeW5vcHNpczogT2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMKIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BhdGhsaWIucHlgCisKIC4uIGluZGV4Ojogc2luZ2xlOiBwYXRoOyBvcGVyYXRpb25zCiAKLS4uIHZlcnNpb25hZGRlZDo6IDMuNAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgb2ZmZXJzIGNsYXNzZXMgcmVwcmVzZW50aW5nIGZpbGVzeXN0ZW0gcGF0aHMgd2l0aCBzZW1hbnRpY3MKIGFwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMuICBQYXRoIGNsYXNzZXMgYXJlIGRpdmlkZWQKQEAgLTYyOCw2ICs2MzIsMTcgQEAKICAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliJykKIAogCisuLiBjbGFzc21ldGhvZDo6IFBhdGguaG9tZSgpCisKKyAgIFJldHVybiBhIG5ldyBwYXRoIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSAoYXMKKyAgIHJldHVybmVkIGJ5IDpmdW5jOmBvcy5wYXRoLmV4cGFuZHVzZXJgIHdpdGggYGB+YGAgY29uc3RydWN0KTo6CisKKyAgICAgID4+PiBQYXRoLmhvbWUoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lJykKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gbWV0aG9kOjogUGF0aC5zdGF0KCkKIAogICAgUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGF0aCAoc2ltaWxhcmx5IHRvIDpmdW5jOmBvcy5zdGF0YCkuCkBAIC02NzAsNiArNjg1LDE4IEBACiAgICAgICBzeW1saW5rICpwb2ludHMgdG8qIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5LgogCiAKKy4uIG1ldGhvZDo6IFBhdGguZXhwYW5kdXNlcigpCisKKyAgIFJldHVybiBhIG5ldyBwYXRoIHdpdGggZXhwYW5kZWQgYGB+YGAgYW5kIGBgfnVzZXJgYCBjb25zdHJ1Y3RzLAorICAgYXMgcmV0dXJuZWQgYnkgOm1ldGg6YG9zLnBhdGguZXhwYW5kdXNlcmA6OgorCisgICAgICA+Pj4gcCA9IFBvc2l4UGF0aCgnfi9maWxtcy9Nb250eSBQeXRob24nKQorICAgICAgPj4+IHAuZXhwYW5kdXNlcigpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2VyaWMvZmlsbXMvTW9udHkgUHl0aG9uJykKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gbWV0aG9kOjogUGF0aC5nbG9iKHBhdHRlcm4pCiAKICAgIEdsb2IgdGhlIGdpdmVuICpwYXR0ZXJuKiBpbiB0aGUgZGlyZWN0b3J5IHJlcHJlc2VudGVkIGJ5IHRoaXMgcGF0aCwKQEAgLTc5MSw3ICs4MTgsNyBAQAogICAgdGhlIHN5bWJvbGljIGxpbmsncyBpbmZvcm1hdGlvbiByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCiAKIAotLi4gbWV0aG9kOjogUGF0aC5ta2Rpcihtb2RlPTBvNzc3LCBwYXJlbnRzPUZhbHNlKQorLi4gbWV0aG9kOjogUGF0aC5ta2Rpcihtb2RlPTBvNzc3LCBwYXJlbnRzPUZhbHNlLCBleGlzdF9vaz1GYWxzZSkKIAogICAgQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBhdCB0aGlzIGdpdmVuIHBhdGguICBJZiAqbW9kZSogaXMgZ2l2ZW4sIGl0IGlzCiAgICBjb21iaW5lZCB3aXRoIHRoZSBwcm9jZXNzJyBgYHVtYXNrYGAgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG1vZGUKQEAgLTgwNSw2ICs4MzIsMTYgQEAKICAgIElmICpwYXJlbnRzKiBpcyBmYWxzZSAodGhlIGRlZmF1bHQpLCBhIG1pc3NpbmcgcGFyZW50IHJhaXNlcwogICAgOmV4YzpgRmlsZU5vdEZvdW5kRXJyb3JgLgogCisgICBJZiAqZXhpc3Rfb2sqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCksIGFuIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaXMKKyAgIHJhaXNlZCBpZiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4KKworICAgSWYgKmV4aXN0X29rKiBpcyB0cnVlLCA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGV4Y2VwdGlvbnMgd2lsbCBiZQorICAgaWdub3JlZCAoc2FtZSBiZWhhdmlvciBhcyB0aGUgUE9TSVggYGBta2RpciAtcGBgIGNvbW1hbmQpLCBidXQgb25seSBpZiB0aGUKKyAgIGxhc3QgcGF0aCBjb21wb25lbnQgaXMgbm90IGFuIGV4aXN0aW5nIG5vbi1kaXJlY3RvcnkgZmlsZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSAqZXhpc3Rfb2sqIHBhcmFtZXRlciB3YXMgYWRkZWQuCisKIAogLi4gbWV0aG9kOjogUGF0aC5vcGVuKG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpCiAKQEAgLTgyNCwxMCArODYxLDM5IEBACiAgICBpZiB0aGUgZmlsZSdzIHVpZCBpc24ndCBmb3VuZCBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlLgogCiAKKy4uIG1ldGhvZDo6IFBhdGgucmVhZF9ieXRlcygpCisKKyAgIFJldHVybiB0aGUgYmluYXJ5IGNvbnRlbnRzIG9mIHRoZSBwb2ludGVkLXRvIGZpbGUgYXMgYSBieXRlcyBvYmplY3Q6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ215X2JpbmFyeV9maWxlJykKKyAgICAgID4+PiBwLndyaXRlX2J5dGVzKGInQmluYXJ5IGZpbGUgY29udGVudHMnKQorICAgICAgMjAKKyAgICAgID4+PiBwLnJlYWRfYnl0ZXMoKQorICAgICAgYidCaW5hcnkgZmlsZSBjb250ZW50cycKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKworLi4gbWV0aG9kOjogUGF0aC5yZWFkX3RleHQoZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpCisKKyAgIFJldHVybiB0aGUgZGVjb2RlZCBjb250ZW50cyBvZiB0aGUgcG9pbnRlZC10byBmaWxlIGFzIGEgc3RyaW5nOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdteV90ZXh0X2ZpbGUnKQorICAgICAgPj4+IHAud3JpdGVfdGV4dCgnVGV4dCBmaWxlIGNvbnRlbnRzJykKKyAgICAgIDE4CisgICAgICA+Pj4gcC5yZWFkX3RleHQoKQorICAgICAgJ1RleHQgZmlsZSBjb250ZW50cycKKworICAgVGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBvcGVuYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gbWV0aG9kOjogUGF0aC5yZW5hbWUodGFyZ2V0KQogCi0gICBSZW5hbWUgdGhpcyBmaWxlIG9yIGRpcmVjdG9yeSB0byB0aGUgZ2l2ZW4gKnRhcmdldCouICAqdGFyZ2V0KiBjYW4gYmUKLSAgIGVpdGhlciBhIHN0cmluZyBvciBhbm90aGVyIHBhdGggb2JqZWN0OjoKKyAgIFJlbmFtZSB0aGlzIGZpbGUgb3IgZGlyZWN0b3J5IHRvIHRoZSBnaXZlbiAqdGFyZ2V0Ki4gIE9uIFVuaXgsIGlmCisgICAqdGFyZ2V0KiBleGlzdHMgYW5kIGlzIGEgZmlsZSwgaXQgd2lsbCBiZSByZXBsYWNlZCBzaWxlbnRseSBpZiB0aGUgdXNlcgorICAgaGFzIHBlcm1pc3Npb24uICAqdGFyZ2V0KiBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFub3RoZXIgcGF0aCBvYmplY3Q6OgogCiAgICAgICA+Pj4gcCA9IFBhdGgoJ2ZvbycpCiAgICAgICA+Pj4gcC5vcGVuKCd3Jykud3JpdGUoJ3NvbWUgdGV4dCcpCkBAIC04ODQsNiArOTUwLDI1IEBACiAgICBSZW1vdmUgdGhpcyBkaXJlY3RvcnkuICBUaGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuCiAKIAorLi4gbWV0aG9kOjogUGF0aC5zYW1lZmlsZShvdGhlcl9wYXRoKQorCisgICBSZXR1cm4gd2hldGhlciB0aGlzIHBhdGggcG9pbnRzIHRvIHRoZSBzYW1lIGZpbGUgYXMgKm90aGVyX3BhdGgqLCB3aGljaAorICAgY2FuIGJlIGVpdGhlciBhIFBhdGggb2JqZWN0LCBvciBhIHN0cmluZy4gIFRoZSBzZW1hbnRpY3MgYXJlIHNpbWlsYXIKKyAgIHRvIDpmdW5jOmBvcy5wYXRoLnNhbWVmaWxlYCBhbmQgOmZ1bmM6YG9zLnBhdGguc2FtZXN0YXRgLgorCisgICBBbiA6ZXhjOmBPU0Vycm9yYCBjYW4gYmUgcmFpc2VkIGlmIGVpdGhlciBmaWxlIGNhbm5vdCBiZSBhY2Nlc3NlZCBmb3Igc29tZQorICAgcmVhc29uLgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ3NwYW0nKQorICAgICAgPj4+IHEgPSBQYXRoKCdlZ2dzJykKKyAgICAgID4+PiBwLnNhbWVmaWxlKHEpCisgICAgICBGYWxzZQorICAgICAgPj4+IHAuc2FtZWZpbGUoJ3NwYW0nKQorICAgICAgVHJ1ZQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBtZXRob2Q6OiBQYXRoLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlKQogCiAgICBNYWtlIHRoaXMgcGF0aCBhIHN5bWJvbGljIGxpbmsgdG8gKnRhcmdldCouICBVbmRlciBXaW5kb3dzLApAQCAtOTE3LDMgKzEwMDIsMzMgQEAKIAogICAgUmVtb3ZlIHRoaXMgZmlsZSBvciBzeW1ib2xpYyBsaW5rLiAgSWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5LAogICAgdXNlIDpmdW5jOmBQYXRoLnJtZGlyYCBpbnN0ZWFkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgud3JpdGVfYnl0ZXMoZGF0YSkKKworICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIHRvIGluIGJ5dGVzIG1vZGUsIHdyaXRlICpkYXRhKiB0byBpdCwgYW5kIGNsb3NlIHRoZQorICAgZmlsZTo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnbXlfYmluYXJ5X2ZpbGUnKQorICAgICAgPj4+IHAud3JpdGVfYnl0ZXMoYidCaW5hcnkgZmlsZSBjb250ZW50cycpCisgICAgICAyMAorICAgICAgPj4+IHAucmVhZF9ieXRlcygpCisgICAgICBiJ0JpbmFyeSBmaWxlIGNvbnRlbnRzJworCisgICBBbiBleGlzdGluZyBmaWxlIG9mIHRoZSBzYW1lIG5hbWUgaXMgb3ZlcndyaXR0ZW4uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKKy4uIG1ldGhvZDo6IFBhdGgud3JpdGVfdGV4dChkYXRhLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSkKKworICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIHRvIGluIHRleHQgbW9kZSwgd3JpdGUgKmRhdGEqIHRvIGl0LCBhbmQgY2xvc2UgdGhlCisgICBmaWxlOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdteV90ZXh0X2ZpbGUnKQorICAgICAgPj4+IHAud3JpdGVfdGV4dCgnVGV4dCBmaWxlIGNvbnRlbnRzJykKKyAgICAgIDE4CisgICAgICA+Pj4gcC5yZWFkX3RleHQoKQorICAgICAgJ1RleHQgZmlsZSBjb250ZW50cycKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wZGIucnN0IGIvRG9jL2xpYnJhcnkvcGRiLnJzdAppbmRleCBjMTQ0ZGI2Li40NTIwYTliIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wZGIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BkYi5yc3QKQEAgLTgsMTAgKzgsMTAgQEAKIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcGRiLnB5YAogCi0tLS0tLS0tLS0tLS0tLQotCiAuLiBpbmRleDo6IHNpbmdsZTogZGVidWdnaW5nCiAKKy0tLS0tLS0tLS0tLS0tCisKIFRoZSBtb2R1bGUgOm1vZDpgcGRiYCBkZWZpbmVzIGFuIGludGVyYWN0aXZlIHNvdXJjZSBjb2RlIGRlYnVnZ2VyIGZvciBQeXRob24KIHByb2dyYW1zLiAgSXQgc3VwcG9ydHMgc2V0dGluZyAoY29uZGl0aW9uYWwpIGJyZWFrcG9pbnRzIGFuZCBzaW5nbGUgc3RlcHBpbmcgYXQKIHRoZSBzb3VyY2UgbGluZSBsZXZlbCwgaW5zcGVjdGlvbiBvZiBzdGFjayBmcmFtZXMsIHNvdXJjZSBjb2RlIGxpc3RpbmcsIGFuZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGlja2xlLnJzdCBiL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKaW5kZXggMzMwNTE5NS4uMGQ2NDE5MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGlja2xlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9waWNrbGUucnN0CkBAIC0xLDYgKzEsMTQgQEAKIDptb2Q6YHBpY2tsZWAgLS0tIFB5dGhvbiBvYmplY3Qgc2VyaWFsaXphdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKKy4uIG1vZHVsZTo6IHBpY2tsZQorICAgOnN5bm9wc2lzOiBDb252ZXJ0IFB5dGhvbiBvYmplY3RzIHRvIHN0cmVhbXMgb2YgYnl0ZXMgYW5kIGJhY2suCisKKy4uIHNlY3Rpb25hdXRob3I6OiBKaW0gS2VyciA8amJrZXJyQHNyLmhwLmNvbT4uCisuLiBzZWN0aW9uYXV0aG9yOjogQmFycnkgV2Fyc2F3IDxiYXJyeUBweXRob24ub3JnPgorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9waWNrbGUucHlgCisKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogcGVyc2lzdGVuY2UKICAgIHBhaXI6IHBlcnNpc3RlbnQ7IG9iamVjdHMKQEAgLTksMTEgKzE3LDcgQEAKICAgIHBhaXI6IGZsYXR0ZW5pbmc7IG9iamVjdHMKICAgIHBhaXI6IHBpY2tsaW5nOyBvYmplY3RzCiAKLS4uIG1vZHVsZTo6IHBpY2tsZQotICAgOnN5bm9wc2lzOiBDb252ZXJ0IFB5dGhvbiBvYmplY3RzIHRvIHN0cmVhbXMgb2YgYnl0ZXMgYW5kIGJhY2suCi0uLiBzZWN0aW9uYXV0aG9yOjogSmltIEtlcnIgPGpia2VyckBzci5ocC5jb20+LgotLi4gc2VjdGlvbmF1dGhvcjo6IEJhcnJ5IFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4KLQorLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIGltcGxlbWVudHMgYmluYXJ5IHByb3RvY29scyBmb3Igc2VyaWFsaXppbmcgYW5kCiBkZS1zZXJpYWxpemluZyBhIFB5dGhvbiBvYmplY3Qgc3RydWN0dXJlLiAgKiJQaWNrbGluZyIqIGlzIHRoZSBwcm9jZXNzCkBAIC00MjUsNyArNDI5LDcgQEAKIEF0dGVtcHRzIHRvIHBpY2tsZSB1bnBpY2tsYWJsZSBvYmplY3RzIHdpbGwgcmFpc2UgdGhlIDpleGM6YFBpY2tsaW5nRXJyb3JgCiBleGNlcHRpb247IHdoZW4gdGhpcyBoYXBwZW5zLCBhbiB1bnNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMgbWF5IGhhdmUgYWxyZWFkeQogYmVlbiB3cml0dGVuIHRvIHRoZSB1bmRlcmx5aW5nIGZpbGUuICBUcnlpbmcgdG8gcGlja2xlIGEgaGlnaGx5IHJlY3Vyc2l2ZSBkYXRhCi1zdHJ1Y3R1cmUgbWF5IGV4Y2VlZCB0aGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGgsIGEgOmV4YzpgUnVudGltZUVycm9yYCB3aWxsIGJlCitzdHJ1Y3R1cmUgbWF5IGV4Y2VlZCB0aGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGgsIGEgOmV4YzpgUmVjdXJzaW9uRXJyb3JgIHdpbGwgYmUKIHJhaXNlZCBpbiB0aGlzIGNhc2UuICBZb3UgY2FuIGNhcmVmdWxseSByYWlzZSB0aGlzIGxpbWl0IHdpdGgKIDpmdW5jOmBzeXMuc2V0cmVjdXJzaW9ubGltaXRgLgogCkBAIC04NTksNyArODYzLDcgQEAKICAgIGRhdGEgPSB7CiAgICAgICAgJ2EnOiBbMSwgMi4wLCAzLCA0KzZqXSwKICAgICAgICAnYic6ICgiY2hhcmFjdGVyIHN0cmluZyIsIGIiYnl0ZSBzdHJpbmciKSwKLSAgICAgICAnYyc6IHNldChbTm9uZSwgVHJ1ZSwgRmFsc2VdKQorICAgICAgICdjJzoge05vbmUsIFRydWUsIEZhbHNlfQogICAgfQogCiAgICB3aXRoIG9wZW4oJ2RhdGEucGlja2xlJywgJ3diJykgYXMgZjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BpY2tsZXRvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L3BpY2tsZXRvb2xzLnJzdAppbmRleCA0YzBhMTQ4Li41ZTU5MzljIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9waWNrbGV0b29scy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGlja2xldG9vbHMucnN0CkBAIC0zMCw3ICszMCw5IEBACiB1bnRydXN0ZWQgc291cmNlLCBgYC1tIHBpY2tsZXRvb2xzYGAgaXMgYSBzYWZlciBvcHRpb24gYmVjYXVzZSBpdCBkb2VzCiBub3QgZXhlY3V0ZSBwaWNrbGUgYnl0ZWNvZGUuCiAKLUZvciBleGFtcGxlLCB3aXRoIGEgdHVwbGUgYGAoMSwgMilgYCBwaWNrbGVkIGluIGZpbGUgYGB4LnBpY2tsZWBgOjoKK0ZvciBleGFtcGxlLCB3aXRoIGEgdHVwbGUgYGAoMSwgMilgYCBwaWNrbGVkIGluIGZpbGUgYGB4LnBpY2tsZWBgOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gLW0gcGlja2xlIHgucGlja2xlCiAgICAgKDEsIDIpCkBAIC0xMDYsNCArMTA4LDMgQEAKICAgIFJldHVybnMgYSBuZXcgZXF1aXZhbGVudCBwaWNrbGUgc3RyaW5nIGFmdGVyIGVsaW1pbmF0aW5nIHVudXNlZCBgYFBVVGBgCiAgICBvcGNvZGVzLiBUaGUgb3B0aW1pemVkIHBpY2tsZSBpcyBzaG9ydGVyLCB0YWtlcyBsZXNzIHRyYW5zbWlzc2lvbiB0aW1lLAogICAgcmVxdWlyZXMgbGVzcyBzdG9yYWdlIHNwYWNlLCBhbmQgdW5waWNrbGVzIG1vcmUgZWZmaWNpZW50bHkuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BpcGVzLnJzdCBiL0RvYy9saWJyYXJ5L3BpcGVzLnJzdAppbmRleCA2OWU4OTFkLi4wYTIyZGExIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9waXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGlwZXMucnN0CkBAIC00LDYgKzQsNyBAQAogLi4gbW9kdWxlOjogcGlwZXMKICAgIDpwbGF0Zm9ybTogVW5peAogICAgOnN5bm9wc2lzOiBBIFB5dGhvbiBpbnRlcmZhY2UgdG8gVW5peCBzaGVsbCBwaXBlbGluZXMuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBNb3NoZSBaYWRrYSA8bW9zaGV6QHphZGthLnNpdGUuY28uaWw+CiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BpcGVzLnB5YApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGtndXRpbC5yc3QgYi9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdAppbmRleCAxM2VhN2I5Li4yNmM1YWMwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdApAQCAtNTgsNyArNTgsNyBAQAogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCiAgICAgICBUaGlzIGVtdWxhdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkLCBhcyB0aGUgc3RhbmRhcmQgaW1wb3J0IG1lY2hhbmlzbQotICAgICAgaXMgbm93IGZ1bGx5IFBFUCAzMDIgY29tcGxpYW50IGFuZCBhdmFpbGFibGUgaW4gOm1vZDpgaW1wb3J0bGliYAorICAgICAgaXMgbm93IGZ1bGx5IFBFUCAzMDIgY29tcGxpYW50IGFuZCBhdmFpbGFibGUgaW4gOm1vZDpgaW1wb3J0bGliYC4KIAogCiAuLiBjbGFzczo6IEltcExvYWRlcihmdWxsbmFtZSwgZmlsZSwgZmlsZW5hbWUsIGV0YykKQEAgLTY3LDcgKzY3LDcgQEAKIAogICAgLi4gZGVwcmVjYXRlZDo6IDMuMwogICAgICAgVGhpcyBlbXVsYXRpb24gaXMgbm8gbG9uZ2VyIG5lZWRlZCwgYXMgdGhlIHN0YW5kYXJkIGltcG9ydCBtZWNoYW5pc20KLSAgICAgIGlzIG5vdyBmdWxseSBQRVAgMzAyIGNvbXBsaWFudCBhbmQgYXZhaWxhYmxlIGluIDptb2Q6YGltcG9ydGxpYmAKKyAgICAgIGlzIG5vdyBmdWxseSBQRVAgMzAyIGNvbXBsaWFudCBhbmQgYXZhaWxhYmxlIGluIDptb2Q6YGltcG9ydGxpYmAuCiAKIAogLi4gZnVuY3Rpb246OiBmaW5kX2xvYWRlcihmdWxsbmFtZSkKQEAgLTE0MCw3ICsxNDAsNyBAQAogLi4gZnVuY3Rpb246OiBpdGVyX21vZHVsZXMocGF0aD1Ob25lLCBwcmVmaXg9JycpCiAKICAgIFlpZWxkcyBgYChtb2R1bGVfZmluZGVyLCBuYW1lLCBpc3BrZylgYCBmb3IgYWxsIHN1Ym1vZHVsZXMgb24gKnBhdGgqLCBvciwgaWYKLSAgIHBhdGggaXMgYGBOb25lYGAsIGFsbCB0b3AtbGV2ZWwgbW9kdWxlcyBvbiBgYHN5cy5wYXRoYGAuCisgICAqcGF0aCogaXMgYGBOb25lYGAsIGFsbCB0b3AtbGV2ZWwgbW9kdWxlcyBvbiBgYHN5cy5wYXRoYGAuCiAKICAgICpwYXRoKiBzaG91bGQgYmUgZWl0aGVyIGBgTm9uZWBgIG9yIGEgbGlzdCBvZiBwYXRocyB0byBsb29rIGZvciBtb2R1bGVzIGluLgogCkBAIC0xNjEsNyArMTYxLDcgQEAKIC4uIGZ1bmN0aW9uOjogd2Fsa19wYWNrYWdlcyhwYXRoPU5vbmUsIHByZWZpeD0nJywgb25lcnJvcj1Ob25lKQogCiAgICBZaWVsZHMgYGAobW9kdWxlX2ZpbmRlciwgbmFtZSwgaXNwa2cpYGAgZm9yIGFsbCBtb2R1bGVzIHJlY3Vyc2l2ZWx5IG9uCi0gICAqcGF0aCosIG9yLCBpZiBwYXRoIGlzIGBgTm9uZWBgLCBhbGwgYWNjZXNzaWJsZSBtb2R1bGVzLgorICAgKnBhdGgqLCBvciwgaWYgKnBhdGgqIGlzIGBgTm9uZWBgLCBhbGwgYWNjZXNzaWJsZSBtb2R1bGVzLgogCiAgICAqcGF0aCogc2hvdWxkIGJlIGVpdGhlciBgYE5vbmVgYCBvciBhIGxpc3Qgb2YgcGF0aHMgdG8gbG9vayBmb3IgbW9kdWxlcyBpbi4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0IGIvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0CmluZGV4IDY2YjY4OTIuLmVlYTBhYmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BsYXRmb3JtLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHBsYXRmb3JtCiAgICA6c3lub3BzaXM6IFJldHJpZXZlcyBhcyBtdWNoIHBsYXRmb3JtIGlkZW50aWZ5aW5nIGRhdGEgYXMgcG9zc2libGUuCisKIC4uIG1vZHVsZWF1dGhvcjo6IE1hcmMtQW5kcsOpIExlbWJ1cmcgPG1hbEBlZ2VuaXguY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEJqb3JuIFBldHRlcnNlbiA8YnBldHRlcnNlbkBjb3JwLmZhaXJpc2FhYy5jb20+CiAKQEAgLTI0Nyw2ICsyNDgsOCBAQAogCiAgICBUaGlzIGlzIGFub3RoZXIgbmFtZSBmb3IgOmZ1bmM6YGxpbnV4X2Rpc3RyaWJ1dGlvbmAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNSAzLjcKKwogLi4gZnVuY3Rpb246OiBsaW51eF9kaXN0cmlidXRpb24oZGlzdG5hbWU9JycsIHZlcnNpb249JycsIGlkPScnLCBzdXBwb3J0ZWRfZGlzdHM9KCdTdVNFJywnZGViaWFuJywncmVkaGF0JywnbWFuZHJha2UnLC4uLiksIGZ1bGxfZGlzdHJpYnV0aW9uX25hbWU9MSkKIAogICAgVHJpZXMgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBMaW51eCBPUyBkaXN0cmlidXRpb24gbmFtZS4KQEAgLTI2Myw2ICsyNjYsOCBAQAogICAgcGFyYW1ldGVycy4gIGBgaWRgYCBpcyB0aGUgaXRlbSBpbiBwYXJlbnRoZXNlcyBhZnRlciB0aGUgdmVyc2lvbiBudW1iZXIuICBJdAogICAgaXMgdXN1YWxseSB0aGUgdmVyc2lvbiBjb2RlbmFtZS4KIAorICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy41IDMuNworCiAuLiBmdW5jdGlvbjo6IGxpYmNfdmVyKGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsIGxpYj0nJywgdmVyc2lvbj0nJywgY2h1bmtzaXplPTIwNDgpCiAKICAgIFRyaWVzIHRvIGRldGVybWluZSB0aGUgbGliYyB2ZXJzaW9uIGFnYWluc3Qgd2hpY2ggdGhlIGZpbGUgZXhlY3V0YWJsZSAoZGVmYXVsdHMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdCBiL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdAppbmRleCAyYzFmM2RkLi45YmEyMjY2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CkBAIC0zLDE2ICszLDE3IEBACiAKIC4uIG1vZHVsZTo6IHBsaXN0bGliCiAgICA6c3lub3BzaXM6IEdlbmVyYXRlIGFuZCBwYXJzZSBNYWMgT1MgWCBwbGlzdCBmaWxlcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogSmFjayBKYW5zZW4KIC4uIHNlY3Rpb25hdXRob3I6OiBHZW9yZyBCcmFuZGwgPGdlb3JnQHB5dGhvbi5vcmc+CiAuLiAoaGFydmVzdGVkIGZyb20gZG9jc3RyaW5ncyBpbiB0aGUgb3JpZ2luYWwgZmlsZSkKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcGxpc3RsaWIucHlgCisKIC4uIGluZGV4OjoKICAgIHBhaXI6IHBsaXN0OyBmaWxlCiAgICBzaW5nbGU6IHByb3BlcnR5IGxpc3QKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcGxpc3RsaWIucHlgCi0KIC0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0aGUgInByb3BlcnR5IGxpc3QiCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0IGIvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAppbmRleCA0NWJhYWQ5Li5mZmFiYzMyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKQEAgLTMsMTMgKzMsMTQgQEAKIAogLi4gbW9kdWxlOjogcG9wbGliCiAgICA6c3lub3BzaXM6IFBPUDMgcHJvdG9jb2wgY2xpZW50IChyZXF1aXJlcyBzb2NrZXRzKS4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IEFuZHJldyBULiBDc2lsbGFnCiAuLiByZXZpc2VkIGJ5IEVTUiwgSmFudWFyeSAyMDAwCiAKLS4uIGluZGV4OjogcGFpcjogUE9QMzsgcHJvdG9jb2wKLQogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcG9wbGliLnB5YAogCisuLiBpbmRleDo6IHBhaXI6IFBPUDM7IHByb3RvY29sCisKIC0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjbGFzcywgOmNsYXNzOmBQT1AzYCwgd2hpY2ggZW5jYXBzdWxhdGVzIGEgY29ubmVjdGlvbiB0byBhCkBAIC0xOTQsNiArMTk1LDE1IEBACiAgICB0aGUgdW5pcXVlIGlkIGZvciB0aGF0IG1lc3NhZ2UgaW4gdGhlIGZvcm0gYGAncmVzcG9uc2UgbWVzZ251bSB1aWRgYCwgb3RoZXJ3aXNlCiAgICByZXN1bHQgaXMgbGlzdCBgYChyZXNwb25zZSwgWydtZXNnbnVtIHVpZCcsIC4uLl0sIG9jdGV0cylgYC4KIAorCisuLiBtZXRob2Q6OiBQT1AzLnV0ZjgoKQorCisgICBUcnkgdG8gc3dpdGNoIHRvIFVURi04IG1vZGUuIFJldHVybnMgdGhlIHNlcnZlciByZXNwb25zZSBpZiBzdWNjZXNzZnVsLAorICAgcmFpc2VzIDpjbGFzczpgZXJyb3JfcHJvdG9gIGlmIG5vdC4gU3BlY2lmaWVkIGluIDpSRkM6YDY4NTZgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBtZXRob2Q6OiBQT1AzLnN0bHMoY29udGV4dD1Ob25lKQogCiAgICBTdGFydCBhIFRMUyBzZXNzaW9uIG9uIHRoZSBhY3RpdmUgY29ubmVjdGlvbiBhcyBzcGVjaWZpZWQgaW4gOnJmYzpgMjU5NWAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wb3NpeC5yc3QgYi9Eb2MvbGlicmFyeS9wb3NpeC5yc3QKaW5kZXggMDZiYWIwNC4uOWNiYzU1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcG9zaXgucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Bvc2l4LnJzdApAQCAtNSw2ICs1LDcgQEAKICAgIDpwbGF0Zm9ybTogVW5peAogICAgOnN5bm9wc2lzOiBUaGUgbW9zdCBjb21tb24gUE9TSVggc3lzdGVtIGNhbGxzIChub3JtYWxseSB1c2VkIHZpYSBtb2R1bGUgb3MpLgogCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gb3BlcmF0aW5nIHN5c3RlbSBmdW5jdGlvbmFsaXR5IHRoYXQgaXMKIHN0YW5kYXJkaXplZCBieSB0aGUgQyBTdGFuZGFyZCBhbmQgdGhlIFBPU0lYIHN0YW5kYXJkIChhIHRoaW5seSBkaXNndWlzZWQgVW5peApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHByaW50LnJzdCBiL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKaW5kZXggYzA1ODlhMy4uNjVkOTRmZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHByaW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CkBAIC0zLDYgKzMsNyBAQAogCiAuLiBtb2R1bGU6OiBwcHJpbnQKICAgIDpzeW5vcHNpczogRGF0YSBwcmV0dHkgcHJpbnRlci4KKwogLi4gbW9kdWxlYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCkBAIC0xOTcsNyArMTk4LDcgQEAKICAgIHRoZSBjdXJyZW50IHByZXNlbnRhdGlvbiBjb250ZXh0IChkaXJlY3QgYW5kIGluZGlyZWN0IGNvbnRhaW5lcnMgZm9yICpvYmplY3QqCiAgICB0aGF0IGFyZSBhZmZlY3RpbmcgdGhlIHByZXNlbnRhdGlvbikgYXMgdGhlIGtleXM7IGlmIGFuIG9iamVjdCBuZWVkcyB0byBiZQogICAgcHJlc2VudGVkIHdoaWNoIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgaW4gKmNvbnRleHQqLCB0aGUgdGhpcmQgcmV0dXJuIHZhbHVlCi0gICBzaG91bGQgYmUgYGBUcnVlYGAuICBSZWN1cnNpdmUgY2FsbHMgdG8gdGhlIDptZXRoOmBmb3JtYXRgIG1ldGhvZCBzaG91bGQgYWRkCisgICBzaG91bGQgYmUgYGBUcnVlYGAuICBSZWN1cnNpdmUgY2FsbHMgdG8gdGhlIDptZXRoOmAuZm9ybWF0YCBtZXRob2Qgc2hvdWxkIGFkZAogICAgYWRkaXRpb25hbCBlbnRyaWVzIGZvciBjb250YWluZXJzIHRvIHRoaXMgZGljdGlvbmFyeS4gIFRoZSB0aGlyZCBhcmd1bWVudCwKICAgICptYXhsZXZlbHMqLCBnaXZlcyB0aGUgcmVxdWVzdGVkIGxpbWl0IHRvIHJlY3Vyc2lvbjsgdGhpcyB3aWxsIGJlIGBgMGBgIGlmIHRoZXJlCiAgICBpcyBubyByZXF1ZXN0ZWQgbGltaXQuICBUaGlzIGFyZ3VtZW50IHNob3VsZCBiZSBwYXNzZWQgdW5tb2RpZmllZCB0byByZWN1cnNpdmUKQEAgLTIzNSwxMCArMjM2LDEwIEBACiAgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWydQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIgOjogT25seSddLAotICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlIGZyYW1ld29yayBmb3IgUHl0aG9uIHByb2dyYW1taW5nLCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggc3BlY2lhbCBmb2N1c1xyXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwcm90b2NvbCBpbnRlZ3JhdGlvbi4nLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlIGZyYW1ld29yayBmb3IgUHl0aG9uIHByb2dyYW1taW5nLCB3aXRoICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lhbCBmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kIG11bHRpcHJvdG9jb2wgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnRlZ3JhdGlvbi4nLAogICAgICAgICAgICAgICdkb2NzX3VybCc6ICcnLAogICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCiAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vJywKQEAgLTI4OCwxMCArMjg5LDEwIEBACiAgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCiAgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAogICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAotICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlIGZyYW1ld29yayBmb3IgUHl0aG9uIHByb2dyYW1taW5nLCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggc3BlY2lhbCBmb2N1c1xyXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwcm90b2NvbCBpbnRlZ3JhdGlvbi4nLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlIGZyYW1ld29yayBmb3IgUHl0aG9uIHByb2dyYW1taW5nLCB3aXRoICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lhbCBmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kIG11bHRpcHJvdG9jb2wgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnRlZ3JhdGlvbi4nLAogICAgICAgICAgICAgICdkb2NzX3VybCc6ICcnLAogICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCiAgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vJywKQEAgLTMyMywxMyArMzI0LDEyIEBACiAgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAogICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAogICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrIGZvciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbiBwcm9ncmFtbWluZywgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb2N1c1xyXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29yayBwcm9ncmFtbWluZyAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCBtdWx0aXByb3RvY29sICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrIGZvciBQeXRob24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9ncmFtbWluZywgd2l0aCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwZWNpYWwgZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCBuZXR3b3JrICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvZ3JhbW1pbmcgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwcm90b2NvbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludGVncmF0aW9uLicsCiAgICAgICAgICAgICAgJ2RvY3NfdXJsJzogJycsCiAgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKQEAgLTM0NCw4ICszNDQsOCBAQAogICAgICAgICAgICAgICdyZWxlYXNlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC8xMi4zLjAnLAogICAgICAgICAgICAgICdyZXF1aXJlc19weXRob24nOiBOb25lLAogICAgICAgICAgICAgICdzdGFibGVfdmVyc2lvbic6IE5vbmUsCi0gICAgICAgICAgICAgJ3N1bW1hcnknOiAnQW4gYXN5bmNocm9ub3VzICcKLSAgICAgICAgICAgICAgICAgICAgICAgICduZXR3b3JraW5nIGZyYW1ld29yayAnCi0gICAgICAgICAgICAgICAgICAgICAgICAnd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICdzdW1tYXJ5JzogJ0FuIGFzeW5jaHJvbm91cyBuZXR3b3JraW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdmcmFtZXdvcmsgd3JpdHRlbiBpbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnUHl0aG9uJywKICAgICAgICAgICAgICAndmVyc2lvbic6ICcxMi4zLjAnfSwKICAgICAndXJscyc6IFt7Li4ufSwgey4uLn1dfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS9wcm9maWxlLnJzdAppbmRleCAyOTI4ODIxLi45NTlkOWI5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wcm9maWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wcm9maWxlLnJzdApAQCAtMzMsNyArMzMsNyBAQAogMi4gOm1vZDpgcHJvZmlsZWAsIGEgcHVyZSBQeXRob24gbW9kdWxlIHdob3NlIGludGVyZmFjZSBpcyBpbWl0YXRlZCBieQogICAgOm1vZDpgY1Byb2ZpbGVgLCBidXQgd2hpY2ggYWRkcyBzaWduaWZpY2FudCBvdmVyaGVhZCB0byBwcm9maWxlZCBwcm9ncmFtcy4KICAgIElmIHlvdSdyZSB0cnlpbmcgdG8gZXh0ZW5kIHRoZSBwcm9maWxlciBpbiBzb21lIHdheSwgdGhlIHRhc2sgbWlnaHQgYmUgZWFzaWVyCi0gICB3aXRoIHRoaXMgbW9kdWxlLgorICAgd2l0aCB0aGlzIG1vZHVsZS4gIE9yaWdpbmFsbHkgZGVzaWduZWQgYW5kIHdyaXR0ZW4gYnkgSmltIFJvc2tpbmQuCiAKIC4uIG5vdGU6OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wdHkucnN0IGIvRG9jL2xpYnJhcnkvcHR5LnJzdAppbmRleCBiOGEzODk3Li4wYWI3NjYwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wdHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B0eS5yc3QKQEAgLTQsOSArNCwxMyBAQAogLi4gbW9kdWxlOjogcHR5CiAgICA6cGxhdGZvcm06IExpbnV4CiAgICA6c3lub3BzaXM6IFBzZXVkby1UZXJtaW5hbCBIYW5kbGluZyBmb3IgTGludXguCisKIC4uIG1vZHVsZWF1dGhvcjo6IFN0ZWVuIEx1bWhvbHQKIC4uIHNlY3Rpb25hdXRob3I6OiBNb3NoZSBaYWRrYSA8bW9zaGV6QHphZGthLnNpdGUuY28uaWw+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3B0eS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHB0eWAgbW9kdWxlIGRlZmluZXMgb3BlcmF0aW9ucyBmb3IgaGFuZGxpbmcgdGhlIHBzZXVkby10ZXJtaW5hbAogY29uY2VwdDogc3RhcnRpbmcgYW5vdGhlciBwcm9jZXNzIGFuZCBiZWluZyBhYmxlIHRvIHdyaXRlIHRvIGFuZCByZWFkIGZyb20gaXRzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wd2QucnN0IGIvRG9jL2xpYnJhcnkvcHdkLnJzdAppbmRleCAyYzE3ZDllLi4wM2ViYjAyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wd2QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B3ZC5yc3QKQEAgLTUsNiArNSw3IEBACiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogVGhlIHBhc3N3b3JkIGRhdGFiYXNlIChnZXRwd25hbSgpIGFuZCBmcmllbmRzKS4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbml4IHVzZXIgYWNjb3VudCBhbmQgcGFzc3dvcmQgZGF0YWJhc2UuICBJdAogaXMgYXZhaWxhYmxlIG9uIGFsbCBVbml4IHZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QgYi9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdAppbmRleCBiYWU4NDUwLi42NWY3NmI4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdApAQCAtMywxMyArMywxNCBAQAogCiAuLiBtb2R1bGU6OiBweV9jb21waWxlCiAgICA6c3lub3BzaXM6IEdlbmVyYXRlIGJ5dGUtY29kZSBmaWxlcyBmcm9tIFB5dGhvbiBzb3VyY2UgZmlsZXMuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogLi4gZG9jdW1lbnRhdGlvbiBiYXNlZCBvbiBtb2R1bGUgZG9jc3RyaW5ncwogCi0uLiBpbmRleDo6IHBhaXI6IGZpbGU7IGJ5dGUtY29kZQotCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9weV9jb21waWxlLnB5YAogCisuLiBpbmRleDo6IHBhaXI6IGZpbGU7IGJ5dGUtY29kZQorCiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgcHlfY29tcGlsZWAgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBieXRlLWNvZGUgZmlsZQpAQCAtMjksOSArMzAsOSBAQAogLi4gZnVuY3Rpb246OiBjb21waWxlKGZpbGUsIGNmaWxlPU5vbmUsIGRmaWxlPU5vbmUsIGRvcmFpc2U9RmFsc2UsIG9wdGltaXplPS0xKQogCiAgICBDb21waWxlIGEgc291cmNlIGZpbGUgdG8gYnl0ZS1jb2RlIGFuZCB3cml0ZSBvdXQgdGhlIGJ5dGUtY29kZSBjYWNoZSBmaWxlLgotICAgVGhlIHNvdXJjZSBjb2RlIGlzIGxvYWRlZCBmcm9tIHRoZSBmaWxlIG5hbWUgKmZpbGUqLiAgVGhlICBieXRlLWNvZGUgaXMKLSAgIHdyaXR0ZW4gdG8gKmNmaWxlKiwgd2hpY2ggZGVmYXVsdHMgdG8gdGhlIDpQRVA6YDMxNDdgIHBhdGgsIGVuZGluZyBpbgotICAgYGAucHljYGAgKGBgLnB5b2BgIGlmIG9wdGltaXphdGlvbiBpcyBlbmFibGVkIGluIHRoZSBjdXJyZW50IGludGVycHJldGVyKS4KKyAgIFRoZSBzb3VyY2UgY29kZSBpcyBsb2FkZWQgZnJvbSB0aGUgZmlsZSBuYW1lICpmaWxlKi4gIFRoZSBieXRlLWNvZGUgaXMKKyAgIHdyaXR0ZW4gdG8gKmNmaWxlKiwgd2hpY2ggZGVmYXVsdHMgdG8gdGhlIDpwZXA6YDMxNDdgLzpwZXA6YDQ4OGAgcGF0aCwgZW5kaW5nCisgICBpbiBgYC5weWNgYC4KICAgIEZvciBleGFtcGxlLCBpZiAqZmlsZSogaXMgYGAvZm9vL2Jhci9iYXoucHlgYCAqY2ZpbGUqIHdpbGwgZGVmYXVsdCB0bwogICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCBmb3IgUHl0aG9uIDMuMi4gIElmICpkZmlsZSogaXMKICAgIHNwZWNpZmllZCwgaXQgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgaW4gZXJyb3IgbWVzc2FnZXMgd2hlbgpAQCAtNjgsNyArNjksNyBAQAogLi4gZnVuY3Rpb246OiBtYWluKGFyZ3M9Tm9uZSkKIAogICAgQ29tcGlsZSBzZXZlcmFsIHNvdXJjZSBmaWxlcy4gIFRoZSBmaWxlcyBuYW1lZCBpbiAqYXJncyogKG9yIG9uIHRoZSBjb21tYW5kCi0gICBsaW5lLCBpZiAqYXJncyogaXMgYGBOb25lYGApIGFyZSBjb21waWxlZCBhbmQgdGhlIHJlc3VsdGluZyBieXRlY29kZSBpcworICAgbGluZSwgaWYgKmFyZ3MqIGlzIGBgTm9uZWBgKSBhcmUgY29tcGlsZWQgYW5kIHRoZSByZXN1bHRpbmcgYnl0ZS1jb2RlIGlzCiAgICBjYWNoZWQgaW4gdGhlIG5vcm1hbCBtYW5uZXIuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNlYXJjaCBhIGRpcmVjdG9yeQogICAgc3RydWN0dXJlIHRvIGxvY2F0ZSBzb3VyY2UgZmlsZXM7IGl0IG9ubHkgY29tcGlsZXMgZmlsZXMgbmFtZWQgZXhwbGljaXRseS4KICAgIElmIGBgJy0nYGAgaXMgdGhlIG9ubHkgcGFyYW1ldGVyIGluIGFyZ3MsIHRoZSBsaXN0IG9mIGZpbGVzIGlzIHRha2VuIGZyb20KQEAgLTg2LDQgKzg3LDMgQEAKIAogICAgTW9kdWxlIDptb2Q6YGNvbXBpbGVhbGxgCiAgICAgICBVdGlsaXRpZXMgdG8gY29tcGlsZSBhbGwgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbiBhIGRpcmVjdG9yeSB0cmVlLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weWNsYnIucnN0IGIvRG9jL2xpYnJhcnkvcHljbGJyLnJzdAppbmRleCAxM2VhYWJmLi4zMjg0MjcxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weWNsYnIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5Y2xici5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHB5Y2xicgogICAgOnN5bm9wc2lzOiBTdXBwb3J0cyBpbmZvcm1hdGlvbiBleHRyYWN0aW9uIGZvciBhIFB5dGhvbiBjbGFzcyBicm93c2VyLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcHljbGJyLnB5YApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHlkb2MucnN0IGIvRG9jL2xpYnJhcnkvcHlkb2MucnN0CmluZGV4IGI1ZTMyMzMuLmYxYmZhYjkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weWRvYy5yc3QKQEAgLTMsMTcgKzMsMTcgQEAKIAogLi4gbW9kdWxlOjogcHlkb2MKICAgIDpzeW5vcHNpczogRG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgYW5kIG9ubGluZSBoZWxwIHN5c3RlbS4KKwogLi4gbW9kdWxlYXV0aG9yOjogS2EtUGluZyBZZWUgPHBpbmdAbGZ3Lm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBLYS1QaW5nIFllZSA8cGluZ0BsZncub3JnPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9weWRvYy5weWAKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBkb2N1bWVudGF0aW9uOyBnZW5lcmF0aW9uCiAgICBzaW5nbGU6IGRvY3VtZW50YXRpb247IG9ubGluZQogICAgc2luZ2xlOiBoZWxwOyBvbmxpbmUKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcHlkb2MucHlgCi0KIC0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBweWRvY2AgbW9kdWxlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGRvY3VtZW50YXRpb24gZnJvbSBQeXRob24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0IGIvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKaW5kZXggNjIwZmZiMS4uMDc1YThiNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKQEAgLTMsOCArMywxMCBAQAogCiAuLiBtb2R1bGU6OiB4bWwucGFyc2Vycy5leHBhdAogICAgOnN5bm9wc2lzOiBBbiBpbnRlcmZhY2UgdG8gdGhlIEV4cGF0IG5vbi12YWxpZGF0aW5nIFhNTCBwYXJzZXIuCisKIC4uIG1vZHVsZWF1dGhvcjo6IFBhdWwgUHJlc2NvZCA8cGF1bEBwcmVzY29kLm5ldD4KIAorLS0tLS0tLS0tLS0tLS0KIAogLi4gTWFya3VwIG5vdGVzOgogCkBAIC04NCw3ICs4Niw5IEBACiAgICBzZXBhcmF0b3IuCiAKICAgIEZvciBleGFtcGxlLCBpZiAqbmFtZXNwYWNlX3NlcGFyYXRvciogaXMgc2V0IHRvIGEgc3BhY2UgY2hhcmFjdGVyIChgYCcgJ2BgKSBhbmQKLSAgIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnQgaXMgcGFyc2VkOjoKKyAgIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnQgaXMgcGFyc2VkOgorCisgICAuLiBjb2RlLWJsb2NrOjogeG1sCiAKICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCI/PgogICAgICAgPHJvb3QgeG1sbnMgICAgPSAiaHR0cDovL2RlZmF1bHQtbmFtZXNwYWNlLm9yZy8iCkBAIC0yNDIsNyArMjQ2LDcgQEAKIAogVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGNvbnRhaW4gdmFsdWVzIHJlbGF0aW5nIHRvIHRoZSBtb3N0IHJlY2VudCBlcnJvcgogZW5jb3VudGVyZWQgYnkgYW4gOmNsYXNzOmB4bWxwYXJzZXJgIG9iamVjdCwgYW5kIHdpbGwgb25seSBoYXZlIGNvcnJlY3QgdmFsdWVzCi1vbmNlIGEgY2FsbCB0byA6bWV0aDpgUGFyc2VgIG9yIDptZXRoOmBQYXJzZUZpbGVgIGhhcyByYWlzZWQgYQorb25jZSBhIGNhbGwgdG8gOm1ldGg6YFBhcnNlYCBvciA6bWV0aDpgUGFyc2VGaWxlYCBoYXMgcmFpc2VkIGFuCiA6ZXhjOmB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yYCBleGNlcHRpb24uCiAKIApAQCAtNTcwLDkgKzU3NCw5IEBACiAKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCi1Db250ZW50IG1vZHVsZXMgYXJlIGRlc2NyaWJlZCB1c2luZyBuZXN0ZWQgdHVwbGVzLiAgRWFjaCB0dXBsZSBjb250YWlucyBmb3VyCitDb250ZW50IG1vZGVscyBhcmUgZGVzY3JpYmVkIHVzaW5nIG5lc3RlZCB0dXBsZXMuICBFYWNoIHR1cGxlIGNvbnRhaW5zIGZvdXIKIHZhbHVlczogdGhlIHR5cGUsIHRoZSBxdWFudGlmaWVyLCB0aGUgbmFtZSwgYW5kIGEgdHVwbGUgb2YgY2hpbGRyZW4uICBDaGlsZHJlbgotYXJlIHNpbXBseSBhZGRpdGlvbmFsIGNvbnRlbnQgbW9kdWxlIGRlc2NyaXB0aW9ucy4KK2FyZSBzaW1wbHkgYWRkaXRpb25hbCBjb250ZW50IG1vZGVsIGRlc2NyaXB0aW9ucy4KIAogVGhlIHZhbHVlcyBvZiB0aGUgZmlyc3QgdHdvIGZpZWxkcyBhcmUgY29uc3RhbnRzIGRlZmluZWQgaW4gdGhlCiA6bW9kOmB4bWwucGFyc2Vycy5leHBhdC5tb2RlbGAgbW9kdWxlLiAgVGhlc2UgY29uc3RhbnRzIGNhbiBiZSBjb2xsZWN0ZWQgaW4gdHdvCkBAIC04NjcsNiArODcxLDYgQEAKIAogLi4gWyNdIFRoZSBlbmNvZGluZyBzdHJpbmcgaW5jbHVkZWQgaW4gWE1MIG91dHB1dCBzaG91bGQgY29uZm9ybSB0byB0aGUKICAgIGFwcHJvcHJpYXRlIHN0YW5kYXJkcy4gRm9yIGV4YW1wbGUsICJVVEYtOCIgaXMgdmFsaWQsIGJ1dCAiVVRGOCIgaXMKLSAgIG5vdC4gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKLSAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzL2NoYXJhY3Rlci1zZXRzLnhodG1sLgorICAgbm90LiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKKyAgIGFuZCBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54aHRtbC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcXVldWUucnN0IGIvRG9jL2xpYnJhcnkvcXVldWUucnN0CmluZGV4IDY4MGQ2OTAuLjFjYjA5MzUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3F1ZXVlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9xdWV1ZS5yc3QKQEAgLTE1OCwyMiArMTU4LDMyIEBACiAKIEV4YW1wbGUgb2YgaG93IHRvIHdhaXQgZm9yIGVucXVldWVkIHRhc2tzIHRvIGJlIGNvbXBsZXRlZDo6CiAKLSAgIGRlZiB3b3JrZXIoKToKLSAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICBpdGVtID0gcS5nZXQoKQotICAgICAgICAgICBkb193b3JrKGl0ZW0pCi0gICAgICAgICAgIHEudGFza19kb25lKCkKKyAgICBkZWYgd29ya2VyKCk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpdGVtID0gcS5nZXQoKQorICAgICAgICAgICAgaWYgaXRlbSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBkb193b3JrKGl0ZW0pCisgICAgICAgICAgICBxLnRhc2tfZG9uZSgpCiAKLSAgIHEgPSBRdWV1ZSgpCi0gICBmb3IgaSBpbiByYW5nZShudW1fd29ya2VyX3RocmVhZHMpOgotICAgICAgICB0ID0gVGhyZWFkKHRhcmdldD13b3JrZXIpCi0gICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgIHEgPSBxdWV1ZS5RdWV1ZSgpCisgICAgdGhyZWFkcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UobnVtX3dvcmtlcl90aHJlYWRzKToKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKICAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCiAKLSAgIGZvciBpdGVtIGluIHNvdXJjZSgpOgotICAgICAgIHEucHV0KGl0ZW0pCisgICAgZm9yIGl0ZW0gaW4gc291cmNlKCk6CisgICAgICAgIHEucHV0KGl0ZW0pCiAKLSAgIHEuam9pbigpICAgICAgICMgYmxvY2sgdW50aWwgYWxsIHRhc2tzIGFyZSBkb25lCisgICAgIyBibG9jayB1bnRpbCBhbGwgdGFza3MgYXJlIGRvbmUKKyAgICBxLmpvaW4oKQorCisgICAgIyBzdG9wIHdvcmtlcnMKKyAgICBmb3IgaSBpbiByYW5nZShudW1fd29ya2VyX3RocmVhZHMpOgorICAgICAgICBxLnB1dChOb25lKQorICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgIHQuam9pbigpCiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9xdW9wcmkucnN0IGIvRG9jL2xpYnJhcnkvcXVvcHJpLnJzdAppbmRleCAzYTc0Y2Y4Li4zYzMxMTI1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9xdW9wcmkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QKQEAgLTQsMTMgKzQsMTIgQEAKIC4uIG1vZHVsZTo6IHF1b3ByaQogICAgOnN5bm9wc2lzOiBFbmNvZGUgYW5kIGRlY29kZSBmaWxlcyB1c2luZyB0aGUgTUlNRSBxdW90ZWQtcHJpbnRhYmxlIGVuY29kaW5nLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9xdW9wcmkucHlgCiAKIC4uIGluZGV4OjoKICAgIHBhaXI6IHF1b3RlZC1wcmludGFibGU7IGVuY29kaW5nCiAgICBzaW5nbGU6IE1JTUU7IHF1b3RlZC1wcmludGFibGUgZW5jb2RpbmcKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcXVvcHJpLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwZXJmb3JtcyBxdW90ZWQtcHJpbnRhYmxlIHRyYW5zcG9ydCBlbmNvZGluZyBhbmQgZGVjb2RpbmcsIGFzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yYW5kb20ucnN0IGIvRG9jL2xpYnJhcnkvcmFuZG9tLnJzdAppbmRleCAxMWRkMzY3Li5kZjUwMmEwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yYW5kb20ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JhbmRvbS5yc3QKQEAgLTIwLDcgKzIwLDcgQEAKIGxvZ25vcm1hbCwgbmVnYXRpdmUgZXhwb25lbnRpYWwsIGdhbW1hLCBhbmQgYmV0YSBkaXN0cmlidXRpb25zLiBGb3IgZ2VuZXJhdGluZwogZGlzdHJpYnV0aW9ucyBvZiBhbmdsZXMsIHRoZSB2b24gTWlzZXMgZGlzdHJpYnV0aW9uIGlzIGF2YWlsYWJsZS4KIAotQWxtb3N0IGFsbCBtb2R1bGUgZnVuY3Rpb25zIGRlcGVuZCBvbiB0aGUgYmFzaWMgZnVuY3Rpb24gOmZ1bmM6YHJhbmRvbWAsIHdoaWNoCitBbG1vc3QgYWxsIG1vZHVsZSBmdW5jdGlvbnMgZGVwZW5kIG9uIHRoZSBiYXNpYyBmdW5jdGlvbiA6ZnVuYzpgLnJhbmRvbWAsIHdoaWNoCiBnZW5lcmF0ZXMgYSByYW5kb20gZmxvYXQgdW5pZm9ybWx5IGluIHRoZSBzZW1pLW9wZW4gcmFuZ2UgWzAuMCwgMS4wKS4gIFB5dGhvbgogdXNlcyB0aGUgTWVyc2VubmUgVHdpc3RlciBhcyB0aGUgY29yZSBnZW5lcmF0b3IuICBJdCBwcm9kdWNlcyA1My1iaXQgcHJlY2lzaW9uCiBmbG9hdHMgYW5kIGhhcyBhIHBlcmlvZCBvZiAyXCpcKjE5OTM3LTEuICBUaGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpbiBDIGlzCkBAIC0zNCw5ICszNCw5IEBACiBpbnN0YW5jZXMgb2YgOmNsYXNzOmBSYW5kb21gIHRvIGdldCBnZW5lcmF0b3JzIHRoYXQgZG9uJ3Qgc2hhcmUgc3RhdGUuCiAKIENsYXNzIDpjbGFzczpgUmFuZG9tYCBjYW4gYWxzbyBiZSBzdWJjbGFzc2VkIGlmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudAotYmFzaWMgZ2VuZXJhdG9yIG9mIHlvdXIgb3duIGRldmlzaW5nOiBpbiB0aGF0IGNhc2UsIG92ZXJyaWRlIHRoZSA6bWV0aDpgcmFuZG9tYCwKLTptZXRoOmBzZWVkYCwgOm1ldGg6YGdldHN0YXRlYCwgYW5kIDptZXRoOmBzZXRzdGF0ZWAgbWV0aG9kcy4KLU9wdGlvbmFsbHksIGEgbmV3IGdlbmVyYXRvciBjYW4gc3VwcGx5IGEgOm1ldGg6YGdldHJhbmRiaXRzYCBtZXRob2QgLS0tIHRoaXMKK2Jhc2ljIGdlbmVyYXRvciBvZiB5b3VyIG93biBkZXZpc2luZzogaW4gdGhhdCBjYXNlLCBvdmVycmlkZSB0aGUgOm1ldGg6YH5SYW5kb20ucmFuZG9tYCwKKzptZXRoOmB+UmFuZG9tLnNlZWRgLCA6bWV0aDpgflJhbmRvbS5nZXRzdGF0ZWAsIGFuZCA6bWV0aDpgflJhbmRvbS5zZXRzdGF0ZWAgbWV0aG9kcy4KK09wdGlvbmFsbHksIGEgbmV3IGdlbmVyYXRvciBjYW4gc3VwcGx5IGEgOm1ldGg6YH5SYW5kb20uZ2V0cmFuZGJpdHNgIG1ldGhvZCAtLS0gdGhpcwogYWxsb3dzIDptZXRoOmByYW5kcmFuZ2VgIHRvIHByb2R1Y2Ugc2VsZWN0aW9ucyBvdmVyIGFuIGFyYml0cmFyaWx5IGxhcmdlIHJhbmdlLgogCiBUaGUgOm1vZDpgcmFuZG9tYCBtb2R1bGUgYWxzbyBwcm92aWRlcyB0aGUgOmNsYXNzOmBTeXN0ZW1SYW5kb21gIGNsYXNzIHdoaWNoCkBAIC00Niw4ICs0Niw3IEBACiAuLiB3YXJuaW5nOjoKIAogICAgVGhlIHBzZXVkby1yYW5kb20gZ2VuZXJhdG9ycyBvZiB0aGlzIG1vZHVsZSBzaG91bGQgbm90IGJlIHVzZWQgZm9yCi0gICBzZWN1cml0eSBwdXJwb3Nlcy4gIFVzZSA6ZnVuYzpgb3MudXJhbmRvbWAgb3IgOmNsYXNzOmBTeXN0ZW1SYW5kb21gIGlmCi0gICB5b3UgcmVxdWlyZSBhIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisgICBzZWN1cml0eSBwdXJwb3Nlcy4KIAogCiBCb29ra2VlcGluZyBmdW5jdGlvbnM6CkBAIC0xMjYsNyArMTI1LDcgQEAKIAogICAgU2h1ZmZsZSB0aGUgc2VxdWVuY2UgKngqIGluIHBsYWNlLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKnJhbmRvbSogaXMgYQogICAgMC1hcmd1bWVudCBmdW5jdGlvbiByZXR1cm5pbmcgYSByYW5kb20gZmxvYXQgaW4gWzAuMCwgMS4wKTsgYnkgZGVmYXVsdCwgdGhpcyBpcwotICAgdGhlIGZ1bmN0aW9uIDpmdW5jOmByYW5kb21gLgorICAgdGhlIGZ1bmN0aW9uIDpmdW5jOmAucmFuZG9tYC4KIAogICAgTm90ZSB0aGF0IGZvciBldmVuIHJhdGhlciBzbWFsbCBgYGxlbih4KWBgLCB0aGUgdG90YWwgbnVtYmVyIG9mIHBlcm11dGF0aW9ucyBvZgogICAgKngqIGlzIGxhcmdlciB0aGFuIHRoZSBwZXJpb2Qgb2YgbW9zdCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnM7IHRoaXMgaW1wbGllcwpAQCAtMjY4LDcgKzI2Nyw3IEBACiAKIAogICAgYENvbXBsZW1lbnRhcnktTXVsdGlwbHktd2l0aC1DYXJyeSByZWNpcGUKLSAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY3MDcvPmBfIGZvciBhIGNvbXBhdGlibGUgYWx0ZXJuYXRpdmUKKyAgIDxodHRwczovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NzA3Lz5gXyBmb3IgYSBjb21wYXRpYmxlIGFsdGVybmF0aXZlCiAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGEgbG9uZyBwZXJpb2QgYW5kIGNvbXBhcmF0aXZlbHkgc2ltcGxlIHVwZGF0ZQogICAgb3BlcmF0aW9ucy4KIApAQCAtMjg2LDcgKzI4NSw3IEBACiAqIElmIGEgbmV3IHNlZWRpbmcgbWV0aG9kIGlzIGFkZGVkLCB0aGVuIGEgYmFja3dhcmQgY29tcGF0aWJsZSBzZWVkZXIgd2lsbCBiZQogICBvZmZlcmVkLgogCi0qIFRoZSBnZW5lcmF0b3IncyA6bWV0aDpgcmFuZG9tYCBtZXRob2Qgd2lsbCBjb250aW51ZSB0byBwcm9kdWNlIHRoZSBzYW1lCisqIFRoZSBnZW5lcmF0b3IncyA6bWV0aDpgflJhbmRvbS5yYW5kb21gIG1ldGhvZCB3aWxsIGNvbnRpbnVlIHRvIHByb2R1Y2UgdGhlIHNhbWUKICAgc2VxdWVuY2Ugd2hlbiB0aGUgY29tcGF0aWJsZSBzZWVkZXIgaXMgZ2l2ZW4gdGhlIHNhbWUgc2VlZC4KIAogLi4gX3JhbmRvbS1leGFtcGxlczoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlLnJzdCBiL0RvYy9saWJyYXJ5L3JlLnJzdAppbmRleCBjYWU2ODc0Li41NjliNTIyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmUucnN0CkBAIC0zLDE2ICszLDIwIEBACiAKIC4uIG1vZHVsZTo6IHJlCiAgICA6c3lub3BzaXM6IFJlZ3VsYXIgZXhwcmVzc2lvbiBvcGVyYXRpb25zLgorCiAuLiBtb2R1bGVhdXRob3I6OiBGcmVkcmlrIEx1bmRoIDxmcmVkcmlrQHB5dGhvbndhcmUuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEFuZHJldyBNLiBLdWNobGluZyA8YW1rQGFtay5jYT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcmUucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBvcGVyYXRpb25zIHNpbWlsYXIgdG8KIHRob3NlIGZvdW5kIGluIFBlcmwuCiAKIEJvdGggcGF0dGVybnMgYW5kIHN0cmluZ3MgdG8gYmUgc2VhcmNoZWQgY2FuIGJlIFVuaWNvZGUgc3RyaW5ncyBhcyB3ZWxsIGFzCiA4LWJpdCBzdHJpbmdzLiBIb3dldmVyLCBVbmljb2RlIHN0cmluZ3MgYW5kIDgtYml0IHN0cmluZ3MgY2Fubm90IGJlIG1peGVkOgotdGhhdCBpcywgeW91IGNhbm5vdCBtYXRjaCBhbiBVbmljb2RlIHN0cmluZyB3aXRoIGEgYnl0ZSBwYXR0ZXJuIG9yCit0aGF0IGlzLCB5b3UgY2Fubm90IG1hdGNoIGEgVW5pY29kZSBzdHJpbmcgd2l0aCBhIGJ5dGUgcGF0dGVybiBvcgogdmljZS12ZXJzYTsgc2ltaWxhcmx5LCB3aGVuIGFza2luZyBmb3IgYSBzdWJzdGl0dXRpb24sIHRoZSByZXBsYWNlbWVudAogc3RyaW5nIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSBhcyBib3RoIHRoZSBwYXR0ZXJuIGFuZCB0aGUgc2VhcmNoIHN0cmluZy4KIApAQCAtMTEzLDExICsxMTcsMTEgQEAKIGBgKj9gYCwgYGArP2BgLCBgYD8/YGAKICAgIFRoZSBgYCcqJ2BgLCBgYCcrJ2BgLCBhbmQgYGAnPydgYCBxdWFsaWZpZXJzIGFyZSBhbGwgOmRmbjpgZ3JlZWR5YDsgdGhleSBtYXRjaAogICAgYXMgbXVjaCB0ZXh0IGFzIHBvc3NpYmxlLiAgU29tZXRpbWVzIHRoaXMgYmVoYXZpb3VyIGlzbid0IGRlc2lyZWQ7IGlmIHRoZSBSRQotICAgYGA8Lio+YGAgaXMgbWF0Y2hlZCBhZ2FpbnN0IGBgJzxIMT50aXRsZTwvSDE+J2BgLCBpdCB3aWxsIG1hdGNoIHRoZSBlbnRpcmUKLSAgIHN0cmluZywgYW5kIG5vdCBqdXN0IGBgJzxIMT4nYGAuICBBZGRpbmcgYGAnPydgYCBhZnRlciB0aGUgcXVhbGlmaWVyIG1ha2VzIGl0CisgICBgYDwuKj5gYCBpcyBtYXRjaGVkIGFnYWluc3QgYGA8YT4gYiA8Yz5gYCwgaXQgd2lsbCBtYXRjaCB0aGUgZW50aXJlCisgICBzdHJpbmcsIGFuZCBub3QganVzdCBgYDxhPmBgLiAgQWRkaW5nIGBgP2BgIGFmdGVyIHRoZSBxdWFsaWZpZXIgbWFrZXMgaXQKICAgIHBlcmZvcm0gdGhlIG1hdGNoIGluIDpkZm46YG5vbi1ncmVlZHlgIG9yIDpkZm46YG1pbmltYWxgIGZhc2hpb247IGFzICpmZXcqCi0gICBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlIHdpbGwgYmUgbWF0Y2hlZC4gIFVzaW5nIGBgLio/YGAgaW4gdGhlIHByZXZpb3VzCi0gICBleHByZXNzaW9uIHdpbGwgbWF0Y2ggb25seSBgYCc8SDE+J2BgLgorICAgY2hhcmFjdGVycyBhcyBwb3NzaWJsZSB3aWxsIGJlIG1hdGNoZWQuICBVc2luZyB0aGUgUkUgYGA8Lio/PmBgIHdpbGwgbWF0Y2gKKyAgIG9ubHkgYGA8YT5gYC4KIAogYGB7bX1gYAogICAgU3BlY2lmaWVzIHRoYXQgZXhhY3RseSAqbSogY29waWVzIG9mIHRoZSBwcmV2aW91cyBSRSBzaG91bGQgYmUgbWF0Y2hlZDsgZmV3ZXIKQEAgLTI4MSw5ICsyODUsNyBAQAogICAgYXNzZXJ0aW9uYC4gYGAoPzw9YWJjKWRlZmBgIHdpbGwgZmluZCBhIG1hdGNoIGluIGBgYWJjZGVmYGAsIHNpbmNlIHRoZQogICAgbG9va2JlaGluZCB3aWxsIGJhY2sgdXAgMyBjaGFyYWN0ZXJzIGFuZCBjaGVjayBpZiB0aGUgY29udGFpbmVkIHBhdHRlcm4gbWF0Y2hlcy4KICAgIFRoZSBjb250YWluZWQgcGF0dGVybiBtdXN0IG9ubHkgbWF0Y2ggc3RyaW5ncyBvZiBzb21lIGZpeGVkIGxlbmd0aCwgbWVhbmluZyB0aGF0Ci0gICBgYGFiY2BgIG9yIGBgYXxiYGAgYXJlIGFsbG93ZWQsIGJ1dCBgYGEqYGAgYW5kIGBgYXszLDR9YGAgYXJlIG5vdC4gIEdyb3VwCi0gICByZWZlcmVuY2VzIGFyZSBub3Qgc3VwcG9ydGVkIGV2ZW4gaWYgdGhleSBtYXRjaCBzdHJpbmdzIG9mIHNvbWUgZml4ZWQgbGVuZ3RoLgotICAgTm90ZSB0aGF0CisgICBgYGFiY2BgIG9yIGBgYXxiYGAgYXJlIGFsbG93ZWQsIGJ1dCBgYGEqYGAgYW5kIGBgYXszLDR9YGAgYXJlIG5vdC4gIE5vdGUgdGhhdAogICAgcGF0dGVybnMgd2hpY2ggc3RhcnQgd2l0aCBwb3NpdGl2ZSBsb29rYmVoaW5kIGFzc2VydGlvbnMgd2lsbCBub3QgbWF0Y2ggYXQgdGhlCiAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBiZWluZyBzZWFyY2hlZDsgeW91IHdpbGwgbW9zdCBsaWtlbHkgd2FudCB0byB1c2UgdGhlCiAgICA6ZnVuYzpgc2VhcmNoYCBmdW5jdGlvbiByYXRoZXIgdGhhbiB0aGUgOmZ1bmM6YG1hdGNoYCBmdW5jdGlvbjoKQEAgLTI5OSwxMiArMzAxLDE0IEBACiAgICAgICA+Pj4gbS5ncm91cCgwKQogICAgICAgJ2VnZycKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGdyb3VwIHJlZmVyZW5jZXMgb2YgZml4ZWQgbGVuZ3RoLgorCiBgYCg/PCEuLi4pYGAKICAgIE1hdGNoZXMgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZyBpcyBub3QgcHJlY2VkZWQgYnkgYSBtYXRjaCBmb3IKICAgIGBgLi4uYGAuICBUaGlzIGlzIGNhbGxlZCBhIDpkZm46YG5lZ2F0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9uYC4gIFNpbWlsYXIgdG8KICAgIHBvc2l0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucywgdGhlIGNvbnRhaW5lZCBwYXR0ZXJuIG11c3Qgb25seSBtYXRjaCBzdHJpbmdzIG9mCi0gICBzb21lIGZpeGVkIGxlbmd0aCBhbmQgc2hvdWxkbid0IGNvbnRhaW4gZ3JvdXAgcmVmZXJlbmNlcy4KLSAgIFBhdHRlcm5zIHdoaWNoIHN0YXJ0IHdpdGggbmVnYXRpdmUgbG9va2JlaGluZCBhc3NlcnRpb25zIG1heQorICAgc29tZSBmaXhlZCBsZW5ndGguICBQYXR0ZXJucyB3aGljaCBzdGFydCB3aXRoIG5lZ2F0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyBtYXkKICAgIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBiZWluZyBzZWFyY2hlZC4KIAogYGAoPyhpZC9uYW1lKXllcy1wYXR0ZXJufG5vLXBhdHRlcm4pYGAKQEAgLTQzOCw2ICs0NDIsMTAgQEAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICBUaGUgYGAnXHUnYGAgYW5kIGBgJ1xVJ2BgIGVzY2FwZSBzZXF1ZW5jZXMgaGF2ZSBiZWVuIGFkZGVkLgogCisuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjUgMy42CisgICBVbmtub3duIGVzY2FwZXMgY29uc2lzdGluZyBvZiBgYCdcJ2BgIGFuZCBBU0NJSSBsZXR0ZXIgbm93IHJhaXNlIGEKKyAgIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHdpbGwgYmUgZm9yYmlkZGVuIGluIFB5dGhvbiAzLjYuCisKIAogLi4gc2VlYWxzbzo6CiAKQEAgLTUyNCw3ICs1MzIsMTEgQEAKICAgIGN1cnJlbnQgbG9jYWxlLiBUaGUgdXNlIG9mIHRoaXMgZmxhZyBpcyBkaXNjb3VyYWdlZCBhcyB0aGUgbG9jYWxlIG1lY2hhbmlzbQogICAgaXMgdmVyeSB1bnJlbGlhYmxlLCBhbmQgaXQgb25seSBoYW5kbGVzIG9uZSAiY3VsdHVyZSIgYXQgYSB0aW1lIGFueXdheTsKICAgIHlvdSBzaG91bGQgdXNlIFVuaWNvZGUgbWF0Y2hpbmcgaW5zdGVhZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgaW4gUHl0aG9uIDMKLSAgIGZvciBVbmljb2RlIChzdHIpIHBhdHRlcm5zLgorICAgZm9yIFVuaWNvZGUgKHN0cikgcGF0dGVybnMuIFRoaXMgZmxhZyBtYWtlcyBzZW5zZSBvbmx5IHdpdGggYnl0ZXMgcGF0dGVybnMuCisKKyAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNSAzLjYKKyAgICAgIERlcHJlY2F0ZWQgdGhlIHVzZSBvZiAgOmNvbnN0OmByZS5MT0NBTEVgIHdpdGggc3RyaW5nIHBhdHRlcm5zIG9yCisgICAgICA6Y29uc3Q6YHJlLkFTQ0lJYC4KIAogCiAuLiBkYXRhOjogTQpAQCAtNjI3LDE3ICs2MzksMzcgQEAKICAgIFRoYXQgd2F5LCBzZXBhcmF0b3IgY29tcG9uZW50cyBhcmUgYWx3YXlzIGZvdW5kIGF0IHRoZSBzYW1lIHJlbGF0aXZlCiAgICBpbmRpY2VzIHdpdGhpbiB0aGUgcmVzdWx0IGxpc3QuCiAKLSAgIE5vdGUgdGhhdCAqc3BsaXQqIHdpbGwgbmV2ZXIgc3BsaXQgYSBzdHJpbmcgb24gYW4gZW1wdHkgcGF0dGVybiBtYXRjaC4KLSAgIEZvciBleGFtcGxlOgorICAgLi4gbm90ZTo6CiAKLSAgICAgID4+PiByZS5zcGxpdCgneConLCAnZm9vJykKLSAgICAgIFsnZm9vJ10KLSAgICAgID4+PiByZS5zcGxpdCgiKD9tKV4kIiwgImZvb1xuXG5iYXJcbiIpCi0gICAgICBbJ2Zvb1xuXG5iYXJcbiddCisgICAgICA6ZnVuYzpgc3BsaXRgIGRvZXNuJ3QgY3VycmVudGx5IHNwbGl0IGEgc3RyaW5nIG9uIGFuIGVtcHR5IHBhdHRlcm4gbWF0Y2guCisgICAgICBGb3IgZXhhbXBsZToKKworICAgICAgICAgPj4+IHJlLnNwbGl0KCd4KicsICdheGJjJykKKyAgICAgICAgIFsnYScsICdiYyddCisKKyAgICAgIEV2ZW4gdGhvdWdoIGBgJ3gqJ2BgIGFsc28gbWF0Y2hlcyAwICd4JyBiZWZvcmUgJ2EnLCBiZXR3ZWVuICdiJyBhbmQgJ2MnLAorICAgICAgYW5kIGFmdGVyICdjJywgY3VycmVudGx5IHRoZXNlIG1hdGNoZXMgYXJlIGlnbm9yZWQuICBUaGUgY29ycmVjdCBiZWhhdmlvcgorICAgICAgKGkuZS4gc3BsaXR0aW5nIG9uIGVtcHR5IG1hdGNoZXMgdG9vIGFuZCByZXR1cm5pbmcgYGBbJycsICdhJywgJ2InLCAnYycsCisgICAgICAnJ11gYCkgd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uLCBidXQgc2luY2UgdGhpcworICAgICAgaXMgYSBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlLCBhIDpleGM6YEZ1dHVyZVdhcm5pbmdgIHdpbGwgYmUgcmFpc2VkCisgICAgICBpbiB0aGUgbWVhbndoaWxlLgorCisgICAgICBQYXR0ZXJucyB0aGF0IGNhbiBvbmx5IG1hdGNoIGVtcHR5IHN0cmluZ3MgY3VycmVudGx5IG5ldmVyIHNwbGl0IHRoZQorICAgICAgc3RyaW5nLiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBiZWhhdmlvciwgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQgc3RhcnRpbmcgZnJvbSBQeXRob24gMy41OjoKKworICAgICAgICAgPj4+IHJlLnNwbGl0KCJeJCIsICJmb29cblxuYmFyXG4iLCBmbGFncz1yZS5NKQorICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICAgICAgICAuLi4KKyAgICAgICAgIFZhbHVlRXJyb3I6IHNwbGl0KCkgcmVxdWlyZXMgYSBub24tZW1wdHkgcGF0dGVybiBtYXRjaC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIEFkZGVkIHRoZSBvcHRpb25hbCBmbGFncyBhcmd1bWVudC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFNwbGl0dGluZyBvbiBhIHBhdHRlcm4gdGhhdCBjb3VsZCBtYXRjaCBhbiBlbXB0eSBzdHJpbmcgbm93IHJhaXNlcworICAgICAgYSB3YXJuaW5nLiAgUGF0dGVybnMgdGhhdCBjYW4gb25seSBtYXRjaCBlbXB0eSBzdHJpbmdzIGFyZSBub3cgcmVqZWN0ZWQuCiAKIC4uIGZ1bmN0aW9uOjogZmluZGFsbChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApCiAKQEAgLTY2NSw3ICs2OTcsNyBAQAogICAgKnN0cmluZyogaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLiAgKnJlcGwqIGNhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uOyBpZiBpdCBpcwogICAgYSBzdHJpbmcsIGFueSBiYWNrc2xhc2ggZXNjYXBlcyBpbiBpdCBhcmUgcHJvY2Vzc2VkLiAgVGhhdCBpcywgYGBcbmBgIGlzCiAgICBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUgbmV3bGluZSBjaGFyYWN0ZXIsIGBgXHJgYCBpcyBjb252ZXJ0ZWQgdG8gYSBjYXJyaWFnZSByZXR1cm4sIGFuZAotICAgc28gZm9ydGguICBVbmtub3duIGVzY2FwZXMgc3VjaCBhcyBgYFxqYGAgYXJlIGxlZnQgYWxvbmUuICBCYWNrcmVmZXJlbmNlcywgc3VjaAorICAgc28gZm9ydGguICBVbmtub3duIGVzY2FwZXMgc3VjaCBhcyBgYFwmYGAgYXJlIGxlZnQgYWxvbmUuICBCYWNrcmVmZXJlbmNlcywgc3VjaAogICAgYXMgYGBcNmBgLCBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgc3Vic3RyaW5nIG1hdGNoZWQgYnkgZ3JvdXAgNiBpbiB0aGUgcGF0dGVybi4KICAgIEZvciBleGFtcGxlOgogCkBAIC03MDcsNiArNzM5LDEzIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQogICAgICAgQWRkZWQgdGhlIG9wdGlvbmFsIGZsYWdzIGFyZ3VtZW50LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVW5tYXRjaGVkIGdyb3VwcyBhcmUgcmVwbGFjZWQgd2l0aCBhbiBlbXB0eSBzdHJpbmcuCisKKyAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNSAzLjYKKyAgICAgIFVua25vd24gZXNjYXBlcyBjb25zaXN0IG9mIGBgJ1wnYGAgYW5kIEFTQ0lJIGxldHRlciBub3cgcmFpc2UgYQorICAgICAgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgd2lsbCBiZSBmb3JiaWRkZW4gaW4gUHl0aG9uIDMuNi4KKwogCiAuLiBmdW5jdGlvbjo6IHN1Ym4ocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wLCBmbGFncz0wKQogCkBAIC03MTYsNiArNzU1LDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4xCiAgICAgICBBZGRlZCB0aGUgb3B0aW9uYWwgZmxhZ3MgYXJndW1lbnQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBVbm1hdGNoZWQgZ3JvdXBzIGFyZSByZXBsYWNlZCB3aXRoIGFuIGVtcHR5IHN0cmluZy4KKwogCiAuLiBmdW5jdGlvbjo6IGVzY2FwZShzdHJpbmcpCiAKQEAgLTczMiwxMyArNzc0LDM2IEBACiAgICBDbGVhciB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlLgogCiAKLS4uIGV4Y2VwdGlvbjo6IGVycm9yCisuLiBleGNlcHRpb246OiBlcnJvcihtc2csIHBhdHRlcm49Tm9uZSwgcG9zPU5vbmUpCiAKICAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIHN0cmluZyBwYXNzZWQgdG8gb25lIG9mIHRoZSBmdW5jdGlvbnMgaGVyZSBpcyBub3QgYQogICAgdmFsaWQgcmVndWxhciBleHByZXNzaW9uIChmb3IgZXhhbXBsZSwgaXQgbWlnaHQgY29udGFpbiB1bm1hdGNoZWQgcGFyZW50aGVzZXMpCiAgICBvciB3aGVuIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJzIGR1cmluZyBjb21waWxhdGlvbiBvciBtYXRjaGluZy4gIEl0IGlzIG5ldmVyIGFuCi0gICBlcnJvciBpZiBhIHN0cmluZyBjb250YWlucyBubyBtYXRjaCBmb3IgYSBwYXR0ZXJuLgorICAgZXJyb3IgaWYgYSBzdHJpbmcgY29udGFpbnMgbm8gbWF0Y2ggZm9yIGEgcGF0dGVybi4gIFRoZSBlcnJvciBpbnN0YW5jZSBoYXMKKyAgIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBhdHRyaWJ1dGVzOgogCisgICAuLiBhdHRyaWJ1dGU6OiBtc2cKKworICAgICAgVGhlIHVuZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBhdHRlcm4KKworICAgICAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLgorCisgICAuLiBhdHRyaWJ1dGU6OiBwb3MKKworICAgICAgVGhlIGluZGV4IG9mICpwYXR0ZXJuKiB3aGVyZSBjb21waWxhdGlvbiBmYWlsZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxpbmVubworCisgICAgICBUaGUgbGluZSBjb3JyZXNwb25kaW5nIHRvICpwb3MqLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb2xubworCisgICAgICBUaGUgY29sdW1uIGNvcnJlc3BvbmRpbmcgdG8gKnBvcyouCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMuCiAKIC4uIF9yZS1vYmplY3RzOgogCkBAIC03NTAsOCArODE1LDggQEAKIAogLi4gbWV0aG9kOjogcmVnZXguc2VhcmNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKQogCi0gICBTY2FuIHRocm91Z2ggKnN0cmluZyogbG9va2luZyBmb3IgYSBsb2NhdGlvbiB3aGVyZSB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbgotICAgcHJvZHVjZXMgYSBtYXRjaCwgYW5kIHJldHVybiBhIGNvcnJlc3BvbmRpbmcgOnJlZjpgbWF0Y2ggb2JqZWN0CisgICBTY2FuIHRocm91Z2ggKnN0cmluZyogbG9va2luZyBmb3IgdGhlIGZpcnN0IGxvY2F0aW9uIHdoZXJlIHRoaXMgcmVndWxhcgorICAgZXhwcmVzc2lvbiBwcm9kdWNlcyBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZyA6cmVmOmBtYXRjaCBvYmplY3QKICAgIDxtYXRjaC1vYmplY3RzPmAuICBSZXR1cm4gYGBOb25lYGAgaWYgbm8gcG9zaXRpb24gaW4gdGhlIHN0cmluZyBtYXRjaGVzIHRoZQogICAgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gZmluZGluZyBhIHplcm8tbGVuZ3RoIG1hdGNoIGF0IHNvbWUKICAgIHBvaW50IGluIHRoZSBzdHJpbmcuCkBAIC04OTEsNiArOTU2LDggQEAKICAgIChgYFxnPDE+YGAsIGBgXGc8bmFtZT5gYCkgYXJlIHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUKICAgIGNvcnJlc3BvbmRpbmcgZ3JvdXAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBVbm1hdGNoZWQgZ3JvdXBzIGFyZSByZXBsYWNlZCB3aXRoIGFuIGVtcHR5IHN0cmluZy4KIAogLi4gbWV0aG9kOjogbWF0Y2guZ3JvdXAoW2dyb3VwMSwgLi4uXSkKIApAQCAtMTE3MSwxNSArMTIzOCwxNSBAQAogCiBGb3IgZXhhbXBsZTo6CiAKLSAgID4+PiByZS5tYXRjaCgiYyIsICJhYmNkZWYiKSAgIyBObyBtYXRjaAotICAgPj4+IHJlLnNlYXJjaCgiYyIsICJhYmNkZWYiKSAjIE1hdGNoCisgICA+Pj4gcmUubWF0Y2goImMiLCAiYWJjZGVmIikgICAgIyBObyBtYXRjaAorICAgPj4+IHJlLnNlYXJjaCgiYyIsICJhYmNkZWYiKSAgICMgTWF0Y2gKICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDIsIDMpLCBtYXRjaD0nYyc+CiAKIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYmVnaW5uaW5nIHdpdGggYGAnXidgYCBjYW4gYmUgdXNlZCB3aXRoIDpmdW5jOmBzZWFyY2hgIHRvCiByZXN0cmljdCB0aGUgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nOjoKIAotICAgPj4+IHJlLm1hdGNoKCJjIiwgImFiY2RlZiIpICAjIE5vIG1hdGNoCi0gICA+Pj4gcmUuc2VhcmNoKCJeYyIsICJhYmNkZWYiKSAjIE5vIG1hdGNoCisgICA+Pj4gcmUubWF0Y2goImMiLCAiYWJjZGVmIikgICAgIyBObyBtYXRjaAorICAgPj4+IHJlLnNlYXJjaCgiXmMiLCAiYWJjZGVmIikgICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5hIiwgImFiY2RlZiIpICAjIE1hdGNoCiAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J2EnPgogCkBAIC0xMjYwLDkgKzEzMjcsOSBAQAogaW4gZWFjaCB3b3JkIG9mIGEgc2VudGVuY2UgZXhjZXB0IGZvciB0aGUgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyczo6CiAKICAgID4+PiBkZWYgcmVwbChtKToKLSAgIC4uLiAgIGlubmVyX3dvcmQgPSBsaXN0KG0uZ3JvdXAoMikpCi0gICAuLi4gICByYW5kb20uc2h1ZmZsZShpbm5lcl93b3JkKQotICAgLi4uICAgcmV0dXJuIG0uZ3JvdXAoMSkgKyAiIi5qb2luKGlubmVyX3dvcmQpICsgbS5ncm91cCgzKQorICAgLi4uICAgICBpbm5lcl93b3JkID0gbGlzdChtLmdyb3VwKDIpKQorICAgLi4uICAgICByYW5kb20uc2h1ZmZsZShpbm5lcl93b3JkKQorICAgLi4uICAgICByZXR1cm4gbS5ncm91cCgxKSArICIiLmpvaW4oaW5uZXJfd29yZCkgKyBtLmdyb3VwKDMpCiAgICA+Pj4gdGV4dCA9ICJQcm9mZXNzb3IgQWJkb2xtYWxlaywgcGxlYXNlIHJlcG9ydCB5b3VyIGFic2VuY2VzIHByb21wdGx5LiIKICAgID4+PiByZS5zdWIociIoXHcpKFx3KykoXHcpIiwgcmVwbCwgdGV4dCkKICAgICdQb2Vmc3Jvc3IgQWVhbG1sb2JkaywgcHNsYWVlIHJlb3JwdCB5b3VyIGFibnNlY2VzIHBsbXJwdG95LicKQEAgLTEzMjYsNyArMTM5Myw3IEBACiBXcml0aW5nIGEgVG9rZW5pemVyCiBeXl5eXl5eXl5eXl5eXl5eXl5eCiAKLUEgYHRva2VuaXplciBvciBzY2FubmVyIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xleGljYWxfYW5hbHlzaXM+YF8KK0EgYHRva2VuaXplciBvciBzY2FubmVyIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXhpY2FsX2FuYWx5c2lzPmBfCiBhbmFseXplcyBhIHN0cmluZyB0byBjYXRlZ29yaXplIGdyb3VwcyBvZiBjaGFyYWN0ZXJzLiAgVGhpcyBpcyBhIHVzZWZ1bCBmaXJzdAogc3RlcCBpbiB3cml0aW5nIGEgY29tcGlsZXIgb3IgaW50ZXJwcmV0ZXIuCiAKQEAgLTEzNDIsMTQgKzE0MDksMTQgQEAKICAgICBkZWYgdG9rZW5pemUoY29kZSk6CiAgICAgICAgIGtleXdvcmRzID0geydJRicsICdUSEVOJywgJ0VORElGJywgJ0ZPUicsICdORVhUJywgJ0dPU1VCJywgJ1JFVFVSTid9CiAgICAgICAgIHRva2VuX3NwZWNpZmljYXRpb24gPSBbCi0gICAgICAgICAgICAoJ05VTUJFUicsICByJ1xkKyhcLlxkKik/JyksICMgSW50ZWdlciBvciBkZWNpbWFsIG51bWJlcgotICAgICAgICAgICAgKCdBU1NJR04nLCAgcic6PScpLCAgICAgICAgICAjIEFzc2lnbm1lbnQgb3BlcmF0b3IKLSAgICAgICAgICAgICgnRU5EJywgICAgIHInOycpLCAgICAgICAgICAgIyBTdGF0ZW1lbnQgdGVybWluYXRvcgotICAgICAgICAgICAgKCdJRCcsICAgICAgcidbQS1aYS16XSsnKSwgICAjIElkZW50aWZpZXJzCi0gICAgICAgICAgICAoJ09QJywgICAgICByJ1srXC0qL10nKSwgICAgICMgQXJpdGhtZXRpYyBvcGVyYXRvcnMKLSAgICAgICAgICAgICgnTkVXTElORScsIHInXG4nKSwgICAgICAgICAgIyBMaW5lIGVuZGluZ3MKLSAgICAgICAgICAgICgnU0tJUCcsICAgIHInWyBcdF0rJyksICAgICAgIyBTa2lwIG92ZXIgc3BhY2VzIGFuZCB0YWJzCi0gICAgICAgICAgICAoJ01JU01BVENIJyxyJy4nKSwgICAgICAgICAgICMgQW55IG90aGVyIGNoYXJhY3RlcgorICAgICAgICAgICAgKCdOVU1CRVInLCAgcidcZCsoXC5cZCopPycpLCAgIyBJbnRlZ2VyIG9yIGRlY2ltYWwgbnVtYmVyCisgICAgICAgICAgICAoJ0FTU0lHTicsICByJzo9JyksICAgICAgICAgICAjIEFzc2lnbm1lbnQgb3BlcmF0b3IKKyAgICAgICAgICAgICgnRU5EJywgICAgIHInOycpLCAgICAgICAgICAgICMgU3RhdGVtZW50IHRlcm1pbmF0b3IKKyAgICAgICAgICAgICgnSUQnLCAgICAgIHInW0EtWmEtel0rJyksICAgICMgSWRlbnRpZmllcnMKKyAgICAgICAgICAgICgnT1AnLCAgICAgIHInWytcLSovXScpLCAgICAgICMgQXJpdGhtZXRpYyBvcGVyYXRvcnMKKyAgICAgICAgICAgICgnTkVXTElORScsIHInXG4nKSwgICAgICAgICAgICMgTGluZSBlbmRpbmdzCisgICAgICAgICAgICAoJ1NLSVAnLCAgICByJ1sgXHRdKycpLCAgICAgICAjIFNraXAgb3ZlciBzcGFjZXMgYW5kIHRhYnMKKyAgICAgICAgICAgICgnTUlTTUFUQ0gnLHInLicpLCAgICAgICAgICAgICMgQW55IG90aGVyIGNoYXJhY3RlcgogICAgICAgICBdCiAgICAgICAgIHRva19yZWdleCA9ICd8Jy5qb2luKCcoP1A8JXM+JXMpJyAlIHBhaXIgZm9yIHBhaXIgaW4gdG9rZW5fc3BlY2lmaWNhdGlvbikKICAgICAgICAgbGluZV9udW0gPSAxCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKaW5kZXggNjkyMzEwYi4uNGQzYzA5OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdApAQCAtNCwxMjMgKzQsMjAyIEBACiAuLiBtb2R1bGU6OiByZWFkbGluZQogICAgOnBsYXRmb3JtOiBVbml4CiAgICA6c3lub3BzaXM6IEdOVSByZWFkbGluZSBzdXBwb3J0IGZvciBQeXRob24uCisKIC4uIHNlY3Rpb25hdXRob3I6OiBTa2lwIE1vbnRhbmFybyA8c2tpcEBwb2JveC5jb20+CiAKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIGRlZmluZXMgYSBudW1iZXIgb2YgZnVuY3Rpb25zIHRvIGZhY2lsaXRhdGUKIGNvbXBsZXRpb24gYW5kIHJlYWRpbmcvd3JpdGluZyBvZiBoaXN0b3J5IGZpbGVzIGZyb20gdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KLVRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIGRpcmVjdGx5IG9yIHZpYSB0aGUgOm1vZDpgcmxjb21wbGV0ZXJgIG1vZHVsZS4gIFNldHRpbmdzCitUaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCBkaXJlY3RseSwgb3IgdmlhIHRoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlLCB3aGljaAorc3VwcG9ydHMgY29tcGxldGlvbiBvZiBQeXRob24gaWRlbnRpZmllcnMgYXQgdGhlIGludGVyYWN0aXZlIHByb21wdC4gIFNldHRpbmdzCiBtYWRlIHVzaW5nICB0aGlzIG1vZHVsZSBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZiBib3RoIHRoZSBpbnRlcnByZXRlcidzCiBpbnRlcmFjdGl2ZSBwcm9tcHQgIGFuZCB0aGUgcHJvbXB0cyBvZmZlcmVkIGJ5IHRoZSBidWlsdC1pbiA6ZnVuYzpgaW5wdXRgCiBmdW5jdGlvbi4KIAogLi4gbm90ZTo6CiAKLSAgT24gTWFjT1MgWCB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBjYW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcKKyAgVGhlIHVuZGVybHlpbmcgUmVhZGxpbmUgbGlicmFyeSBBUEkgbWF5IGJlIGltcGxlbWVudGVkIGJ5CiAgIHRoZSBgYGxpYmVkaXRgYCBsaWJyYXJ5IGluc3RlYWQgb2YgR05VIHJlYWRsaW5lLgorICBPbiBNYWNPUyBYIHRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIGRldGVjdHMgd2hpY2ggbGlicmFyeSBpcyBiZWluZyB1c2VkCisgIGF0IHJ1biB0aW1lLgogCiAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGBgbGliZWRpdGBgIGlzIGRpZmZlcmVudCBmcm9tIHRoYXQKICAgb2YgR05VIHJlYWRsaW5lLiBJZiB5b3UgcHJvZ3JhbW1hdGljYWxseSBsb2FkIGNvbmZpZ3VyYXRpb24gc3RyaW5ncwogICB5b3UgY2FuIGNoZWNrIGZvciB0aGUgdGV4dCAibGliZWRpdCIgaW4gOmNvbnN0OmByZWFkbGluZS5fX2RvY19fYAogICB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gR05VIHJlYWRsaW5lIGFuZCBsaWJlZGl0LgogCitSZWFkbGluZSBrZXliaW5kaW5ncyBtYXkgYmUgY29uZmlndXJlZCB2aWEgYW4gaW5pdGlhbGl6YXRpb24gZmlsZSwgdHlwaWNhbGx5CitgYC5pbnB1dHJjYGAgaW4geW91ciBob21lIGRpcmVjdG9yeS4gIFNlZSBgUmVhZGxpbmUgSW5pdCBGaWxlCis8aHR0cHM6Ly9jbnN3d3cuY25zLmN3cnUuZWR1L3BocC9jaGV0L3JlYWRsaW5lL3JsdXNlcm1hbi5odG1sI1NFQzk+YF8KK2luIHRoZSBHTlUgUmVhZGxpbmUgbWFudWFsIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybWF0IGFuZAorYWxsb3dhYmxlIGNvbnN0cnVjdHMgb2YgdGhhdCBmaWxlLCBhbmQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUKK1JlYWRsaW5lIGxpYnJhcnkgaW4gZ2VuZXJhbC4KIAotVGhlIDptb2Q6YHJlYWRsaW5lYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworSW5pdCBmaWxlCistLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBpbml0IGZpbGUgYW5kIHVzZXIgY29uZmlndXJhdGlvbjoKIAogCiAuLiBmdW5jdGlvbjo6IHBhcnNlX2FuZF9iaW5kKHN0cmluZykKIAotICAgUGFyc2UgYW5kIGV4ZWN1dGUgc2luZ2xlIGxpbmUgb2YgYSByZWFkbGluZSBpbml0IGZpbGUuCi0KLQotLi4gZnVuY3Rpb246OiBnZXRfbGluZV9idWZmZXIoKQotCi0gICBSZXR1cm4gdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGxpbmUgYnVmZmVyLgotCi0KLS4uIGZ1bmN0aW9uOjogaW5zZXJ0X3RleHQoc3RyaW5nKQotCi0gICBJbnNlcnQgdGV4dCBpbnRvIHRoZSBjb21tYW5kIGxpbmUuCisgICBFeGVjdXRlIHRoZSBpbml0IGxpbmUgcHJvdmlkZWQgaW4gdGhlICpzdHJpbmcqIGFyZ3VtZW50LiBUaGlzIGNhbGxzCisgICA6YzpmdW5jOmBybF9wYXJzZV9hbmRfYmluZGAgaW4gdGhlIHVuZGVybHlpbmcgbGlicmFyeS4KIAogCiAuLiBmdW5jdGlvbjo6IHJlYWRfaW5pdF9maWxlKFtmaWxlbmFtZV0pCiAKLSAgIFBhcnNlIGEgcmVhZGxpbmUgaW5pdGlhbGl6YXRpb24gZmlsZS4gVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMgdGhlIGxhc3QgZmlsZW5hbWUKLSAgIHVzZWQuCisgICBFeGVjdXRlIGEgcmVhZGxpbmUgaW5pdGlhbGl6YXRpb24gZmlsZS4gVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMgdGhlIGxhc3QgZmlsZW5hbWUKKyAgIHVzZWQuIFRoaXMgY2FsbHMgOmM6ZnVuYzpgcmxfcmVhZF9pbml0X2ZpbGVgIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuCisKKworTGluZSBidWZmZXIKKy0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG9wZXJhdGUgb24gdGhlIGxpbmUgYnVmZmVyOgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2xpbmVfYnVmZmVyKCkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBsaW5lIGJ1ZmZlciAoOmM6ZGF0YTpgcmxfbGluZV9idWZmZXJgCisgICBpbiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5KS4KKworCisuLiBmdW5jdGlvbjo6IGluc2VydF90ZXh0KHN0cmluZykKKworICAgSW5zZXJ0IHRleHQgaW50byB0aGUgbGluZSBidWZmZXIgYXQgdGhlIGN1cnNvciBwb3NpdGlvbi4gIFRoaXMgY2FsbHMKKyAgIDpjOmZ1bmM6YHJsX2luc2VydF90ZXh0YCBpbiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5LCBidXQgaWdub3JlcworICAgdGhlIHJldHVybiB2YWx1ZS4KKworCisuLiBmdW5jdGlvbjo6IHJlZGlzcGxheSgpCisKKyAgIENoYW5nZSB3aGF0J3MgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4gdG8gcmVmbGVjdCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUKKyAgIGxpbmUgYnVmZmVyLiAgVGhpcyBjYWxscyA6YzpmdW5jOmBybF9yZWRpc3BsYXlgIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuCisKKworSGlzdG9yeSBmaWxlCistLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgb3BlcmF0ZSBvbiBhIGhpc3RvcnkgZmlsZToKIAogCiAuLiBmdW5jdGlvbjo6IHJlYWRfaGlzdG9yeV9maWxlKFtmaWxlbmFtZV0pCiAKLSAgIExvYWQgYSByZWFkbGluZSBoaXN0b3J5IGZpbGUuIFRoZSBkZWZhdWx0IGZpbGVuYW1lIGlzIDpmaWxlOmB+Ly5oaXN0b3J5YC4KKyAgIExvYWQgYSByZWFkbGluZSBoaXN0b3J5IGZpbGUsIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGhpc3RvcnkgbGlzdC4KKyAgIFRoZSBkZWZhdWx0IGZpbGVuYW1lIGlzIDpmaWxlOmB+Ly5oaXN0b3J5YC4gIFRoaXMgY2FsbHMKKyAgIDpjOmZ1bmM6YHJlYWRfaGlzdG9yeWAgaW4gdGhlIHVuZGVybHlpbmcgbGlicmFyeS4KIAogCiAuLiBmdW5jdGlvbjo6IHdyaXRlX2hpc3RvcnlfZmlsZShbZmlsZW5hbWVdKQogCi0gICBTYXZlIGEgcmVhZGxpbmUgaGlzdG9yeSBmaWxlLiBUaGUgZGVmYXVsdCBmaWxlbmFtZSBpcyA6ZmlsZTpgfi8uaGlzdG9yeWAuCisgICBTYXZlIHRoZSBoaXN0b3J5IGxpc3QgdG8gYSByZWFkbGluZSBoaXN0b3J5IGZpbGUsIG92ZXJ3cml0aW5nIGFueQorICAgZXhpc3RpbmcgZmlsZS4gIFRoZSBkZWZhdWx0IGZpbGVuYW1lIGlzIDpmaWxlOmB+Ly5oaXN0b3J5YC4gIFRoaXMgY2FsbHMKKyAgIDpjOmZ1bmM6YHdyaXRlX2hpc3RvcnlgIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuCisKKworLi4gZnVuY3Rpb246OiBhcHBlbmRfaGlzdG9yeV9maWxlKG5lbGVtZW50c1ssIGZpbGVuYW1lXSkKKworICAgQXBwZW5kIHRoZSBsYXN0ICpuZWxlbWVudHMqIGl0ZW1zIG9mIGhpc3RvcnkgdG8gYSBmaWxlLiAgVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMKKyAgIDpmaWxlOmB+Ly5oaXN0b3J5YC4gIFRoZSBmaWxlIG11c3QgYWxyZWFkeSBleGlzdC4gIFRoaXMgY2FsbHMKKyAgIDpjOmZ1bmM6YGFwcGVuZF9oaXN0b3J5YCBpbiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5LiAgVGhpcyBmdW5jdGlvbgorICAgb25seSBleGlzdHMgaWYgUHl0aG9uIHdhcyBjb21waWxlZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5CisgICB0aGF0IHN1cHBvcnRzIGl0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCisuLiBmdW5jdGlvbjo6IGdldF9oaXN0b3J5X2xlbmd0aCgpCisgICAgICAgICAgICAgIHNldF9oaXN0b3J5X2xlbmd0aChsZW5ndGgpCisKKyAgIFNldCBvciByZXR1cm4gdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGxpbmVzIHRvIHNhdmUgaW4gdGhlIGhpc3RvcnkgZmlsZS4KKyAgIFRoZSA6ZnVuYzpgd3JpdGVfaGlzdG9yeV9maWxlYCBmdW5jdGlvbiB1c2VzIHRoaXMgdmFsdWUgdG8gdHJ1bmNhdGUKKyAgIHRoZSBoaXN0b3J5IGZpbGUsIGJ5IGNhbGxpbmcgOmM6ZnVuYzpgaGlzdG9yeV90cnVuY2F0ZV9maWxlYCBpbgorICAgdGhlIHVuZGVybHlpbmcgbGlicmFyeS4gIE5lZ2F0aXZlIHZhbHVlcyBpbXBseQorICAgdW5saW1pdGVkIGhpc3RvcnkgZmlsZSBzaXplLgorCisKK0hpc3RvcnkgbGlzdAorLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG9wZXJhdGUgb24gYSBnbG9iYWwgaGlzdG9yeSBsaXN0OgogCiAKIC4uIGZ1bmN0aW9uOjogY2xlYXJfaGlzdG9yeSgpCiAKLSAgIENsZWFyIHRoZSBjdXJyZW50IGhpc3RvcnkuICAoTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGlmIHRoZQotICAgaW5zdGFsbGVkIHZlcnNpb24gb2YgR05VIHJlYWRsaW5lIGRvZXNuJ3Qgc3VwcG9ydCBpdC4pCi0KLQotLi4gZnVuY3Rpb246OiBnZXRfaGlzdG9yeV9sZW5ndGgoKQotCi0gICBSZXR1cm4gdGhlIGRlc2lyZWQgbGVuZ3RoIG9mIHRoZSBoaXN0b3J5IGZpbGUuICBOZWdhdGl2ZSB2YWx1ZXMgaW1wbHkgdW5saW1pdGVkCi0gICBoaXN0b3J5IGZpbGUgc2l6ZS4KLQotCi0uLiBmdW5jdGlvbjo6IHNldF9oaXN0b3J5X2xlbmd0aChsZW5ndGgpCi0KLSAgIFNldCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHNhdmUgaW4gdGhlIGhpc3RvcnkgZmlsZS4gOmZ1bmM6YHdyaXRlX2hpc3RvcnlfZmlsZWAKLSAgIHVzZXMgdGhpcyB2YWx1ZSB0byB0cnVuY2F0ZSB0aGUgaGlzdG9yeSBmaWxlIHdoZW4gc2F2aW5nLiAgTmVnYXRpdmUgdmFsdWVzIGltcGx5Ci0gICB1bmxpbWl0ZWQgaGlzdG9yeSBmaWxlIHNpemUuCisgICBDbGVhciB0aGUgY3VycmVudCBoaXN0b3J5LiAgVGhpcyBjYWxscyA6YzpmdW5jOmBjbGVhcl9oaXN0b3J5YCBpbiB0aGUKKyAgIHVuZGVybHlpbmcgbGlicmFyeS4gIFRoZSBQeXRob24gZnVuY3Rpb24gb25seSBleGlzdHMgaWYgUHl0aG9uIHdhcworICAgY29tcGlsZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSB0aGF0IHN1cHBvcnRzIGl0LgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X2N1cnJlbnRfaGlzdG9yeV9sZW5ndGgoKQogCi0gICBSZXR1cm4gdGhlIG51bWJlciBvZiBsaW5lcyBjdXJyZW50bHkgaW4gdGhlIGhpc3RvcnkuICAoVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IGluIHRoZSBoaXN0b3J5LiAgKFRoaXMgaXMgZGlmZmVyZW50IGZyb20KICAgIDpmdW5jOmBnZXRfaGlzdG9yeV9sZW5ndGhgLCB3aGljaCByZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHdpbGwKICAgIGJlIHdyaXR0ZW4gdG8gYSBoaXN0b3J5IGZpbGUuKQogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X2hpc3RvcnlfaXRlbShpbmRleCkKIAotICAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIGhpc3RvcnkgaXRlbSBhdCAqaW5kZXgqLgorICAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIGhpc3RvcnkgaXRlbSBhdCAqaW5kZXgqLiAgVGhlIGl0ZW0gaW5kZXgKKyAgIGlzIG9uZS1iYXNlZC4gIFRoaXMgY2FsbHMgOmM6ZnVuYzpgaGlzdG9yeV9nZXRgIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuCiAKIAogLi4gZnVuY3Rpb246OiByZW1vdmVfaGlzdG9yeV9pdGVtKHBvcykKIAogICAgUmVtb3ZlIGhpc3RvcnkgaXRlbSBzcGVjaWZpZWQgYnkgaXRzIHBvc2l0aW9uIGZyb20gdGhlIGhpc3RvcnkuCisgICBUaGUgcG9zaXRpb24gaXMgemVyby1iYXNlZC4gIFRoaXMgY2FsbHMgOmM6ZnVuYzpgcmVtb3ZlX2hpc3RvcnlgIGluCisgICB0aGUgdW5kZXJseWluZyBsaWJyYXJ5LgogCiAKIC4uIGZ1bmN0aW9uOjogcmVwbGFjZV9oaXN0b3J5X2l0ZW0ocG9zLCBsaW5lKQogCi0gICBSZXBsYWNlIGhpc3RvcnkgaXRlbSBzcGVjaWZpZWQgYnkgaXRzIHBvc2l0aW9uIHdpdGggdGhlIGdpdmVuIGxpbmUuCisgICBSZXBsYWNlIGhpc3RvcnkgaXRlbSBzcGVjaWZpZWQgYnkgaXRzIHBvc2l0aW9uIHdpdGggKmxpbmUqLgorICAgVGhlIHBvc2l0aW9uIGlzIHplcm8tYmFzZWQuICBUaGlzIGNhbGxzIDpjOmZ1bmM6YHJlcGxhY2VfaGlzdG9yeV9lbnRyeWAKKyAgIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuCiAKIAotLi4gZnVuY3Rpb246OiByZWRpc3BsYXkoKQorLi4gZnVuY3Rpb246OiBhZGRfaGlzdG9yeShsaW5lKQogCi0gICBDaGFuZ2Ugd2hhdCdzIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlCi0gICBsaW5lIGJ1ZmZlci4KKyAgIEFwcGVuZCAqbGluZSogdG8gdGhlIGhpc3RvcnkgYnVmZmVyLCBhcyBpZiBpdCB3YXMgdGhlIGxhc3QgbGluZSB0eXBlZC4KKyAgIFRoaXMgY2FsbHMgOmM6ZnVuYzpgYWRkX2hpc3RvcnlgIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuCisKKworU3RhcnR1cCBob29rcworLS0tLS0tLS0tLS0tLQogCiAKIC4uIGZ1bmN0aW9uOjogc2V0X3N0YXJ0dXBfaG9vayhbZnVuY3Rpb25dKQogCi0gICBTZXQgb3IgcmVtb3ZlIHRoZSBzdGFydHVwX2hvb2sgZnVuY3Rpb24uICBJZiAqZnVuY3Rpb24qIGlzIHNwZWNpZmllZCwgaXQgd2lsbCBiZQotICAgdXNlZCBhcyB0aGUgbmV3IHN0YXJ0dXBfaG9vayBmdW5jdGlvbjsgaWYgb21pdHRlZCBvciBgYE5vbmVgYCwgYW55IGhvb2sgZnVuY3Rpb24KLSAgIGFscmVhZHkgaW5zdGFsbGVkIGlzIHJlbW92ZWQuICBUaGUgc3RhcnR1cF9ob29rIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vCisgICBTZXQgb3IgcmVtb3ZlIHRoZSBmdW5jdGlvbiBpbnZva2VkIGJ5IHRoZSA6YzpkYXRhOmBybF9zdGFydHVwX2hvb2tgCisgICBjYWxsYmFjayBvZiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5LiAgSWYgKmZ1bmN0aW9uKiBpcyBzcGVjaWZpZWQsIGl0IHdpbGwKKyAgIGJlIHVzZWQgYXMgdGhlIG5ldyBob29rIGZ1bmN0aW9uOyBpZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCBhbnkgZnVuY3Rpb24KKyAgIGFscmVhZHkgaW5zdGFsbGVkIGlzIHJlbW92ZWQuICBUaGUgaG9vayBpcyBjYWxsZWQgd2l0aCBubwogICAgYXJndW1lbnRzIGp1c3QgYmVmb3JlIHJlYWRsaW5lIHByaW50cyB0aGUgZmlyc3QgcHJvbXB0LgogCiAKIC4uIGZ1bmN0aW9uOjogc2V0X3ByZV9pbnB1dF9ob29rKFtmdW5jdGlvbl0pCiAKLSAgIFNldCBvciByZW1vdmUgdGhlIHByZV9pbnB1dF9ob29rIGZ1bmN0aW9uLiAgSWYgKmZ1bmN0aW9uKiBpcyBzcGVjaWZpZWQsIGl0IHdpbGwKLSAgIGJlIHVzZWQgYXMgdGhlIG5ldyBwcmVfaW5wdXRfaG9vayBmdW5jdGlvbjsgaWYgb21pdHRlZCBvciBgYE5vbmVgYCwgYW55IGhvb2sKLSAgIGZ1bmN0aW9uIGFscmVhZHkgaW5zdGFsbGVkIGlzIHJlbW92ZWQuICBUaGUgcHJlX2lucHV0X2hvb2sgZnVuY3Rpb24gaXMgY2FsbGVkCisgICBTZXQgb3IgcmVtb3ZlIHRoZSBmdW5jdGlvbiBpbnZva2VkIGJ5IHRoZSA6YzpkYXRhOmBybF9wcmVfaW5wdXRfaG9va2AKKyAgIGNhbGxiYWNrIG9mIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuICBJZiAqZnVuY3Rpb24qIGlzIHNwZWNpZmllZCwgaXQgd2lsbAorICAgYmUgdXNlZCBhcyB0aGUgbmV3IGhvb2sgZnVuY3Rpb247IGlmIG9taXR0ZWQgb3IgYGBOb25lYGAsIGFueQorICAgZnVuY3Rpb24gYWxyZWFkeSBpbnN0YWxsZWQgaXMgcmVtb3ZlZC4gIFRoZSBob29rIGlzIGNhbGxlZAogICAgd2l0aCBubyBhcmd1bWVudHMgYWZ0ZXIgdGhlIGZpcnN0IHByb21wdCBoYXMgYmVlbiBwcmludGVkIGFuZCBqdXN0IGJlZm9yZQotICAgcmVhZGxpbmUgc3RhcnRzIHJlYWRpbmcgaW5wdXQgY2hhcmFjdGVycy4KKyAgIHJlYWRsaW5lIHN0YXJ0cyByZWFkaW5nIGlucHV0IGNoYXJhY3RlcnMuICBUaGlzIGZ1bmN0aW9uIG9ubHkgZXhpc3RzCisgICBpZiBQeXRob24gd2FzIGNvbXBpbGVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgdGhhdCBzdXBwb3J0cyBpdC4KKworCitDb21wbGV0aW9uCistLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHJlbGF0ZSB0byBpbXBsZW1lbnRpbmcgYSBjdXN0b20gd29yZCBjb21wbGV0aW9uCitmdW5jdGlvbi4gIFRoaXMgaXMgdHlwaWNhbGx5IG9wZXJhdGVkIGJ5IHRoZSBUYWIga2V5LCBhbmQgY2FuIHN1Z2dlc3QgYW5kCithdXRvbWF0aWNhbGx5IGNvbXBsZXRlIGEgd29yZCBiZWluZyB0eXBlZC4gIEJ5IGRlZmF1bHQsIFJlYWRsaW5lIGlzIHNldCB1cAordG8gYmUgdXNlZCBieSA6bW9kOmBybGNvbXBsZXRlcmAgdG8gY29tcGxldGUgUHl0aG9uIGlkZW50aWZpZXJzIGZvcgordGhlIGludGVyYWN0aXZlIGludGVycHJldGVyLiAgSWYgdGhlIDptb2Q6YHJlYWRsaW5lYCBtb2R1bGUgaXMgdG8gYmUgdXNlZAord2l0aCBhIGN1c3RvbSBjb21wbGV0ZXIsIGEgZGlmZmVyZW50IHNldCBvZiB3b3JkIGRlbGltaXRlcnMgc2hvdWxkIGJlIHNldC4KIAogCiAuLiBmdW5jdGlvbjo6IHNldF9jb21wbGV0ZXIoW2Z1bmN0aW9uXSkKQEAgLTEzMiw2ICsyMTEsMTIgQEAKICAgIHJldHVybnMgYSBub24tc3RyaW5nIHZhbHVlLiAgSXQgc2hvdWxkIHJldHVybiB0aGUgbmV4dCBwb3NzaWJsZSBjb21wbGV0aW9uCiAgICBzdGFydGluZyB3aXRoICp0ZXh0Ki4KIAorICAgVGhlIGluc3RhbGxlZCBjb21wbGV0ZXIgZnVuY3Rpb24gaXMgaW52b2tlZCBieSB0aGUgKmVudHJ5X2Z1bmMqIGNhbGxiYWNrCisgICBwYXNzZWQgdG8gOmM6ZnVuYzpgcmxfY29tcGxldGlvbl9tYXRjaGVzYCBpbiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5LgorICAgVGhlICp0ZXh0KiBzdHJpbmcgY29tZXMgZnJvbSB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZQorICAgOmM6ZGF0YTpgcmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fZnVuY3Rpb25gIGNhbGxiYWNrIG9mIHRoZQorICAgdW5kZXJseWluZyBsaWJyYXJ5LgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X2NvbXBsZXRlcigpCiAKQEAgLTE0MCwyNyArMjI1LDI3IEBACiAKIC4uIGZ1bmN0aW9uOjogZ2V0X2NvbXBsZXRpb25fdHlwZSgpCiAKLSAgIEdldCB0aGUgdHlwZSBvZiBjb21wbGV0aW9uIGJlaW5nIGF0dGVtcHRlZC4KKyAgIEdldCB0aGUgdHlwZSBvZiBjb21wbGV0aW9uIGJlaW5nIGF0dGVtcHRlZC4gIFRoaXMgcmV0dXJucyB0aGUKKyAgIDpjOmRhdGE6YHJsX2NvbXBsZXRpb25fdHlwZWAgdmFyaWFibGUgaW4gdGhlIHVuZGVybHlpbmcgbGlicmFyeSBhcworICAgYW4gaW50ZWdlci4KIAogCiAuLiBmdW5jdGlvbjo6IGdldF9iZWdpZHgoKQorICAgICAgICAgICAgICBnZXRfZW5kaWR4KCkKIAotICAgR2V0IHRoZSBiZWdpbm5pbmcgaW5kZXggb2YgdGhlIHJlYWRsaW5lIHRhYi1jb21wbGV0aW9uIHNjb3BlLgotCi0KLS4uIGZ1bmN0aW9uOjogZ2V0X2VuZGlkeCgpCi0KLSAgIEdldCB0aGUgZW5kaW5nIGluZGV4IG9mIHRoZSByZWFkbGluZSB0YWItY29tcGxldGlvbiBzY29wZS4KKyAgIEdldCB0aGUgYmVnaW5uaW5nIG9yIGVuZGluZyBpbmRleCBvZiB0aGUgY29tcGxldGlvbiBzY29wZS4KKyAgIFRoZXNlIGluZGV4ZXMgYXJlIHRoZSAqc3RhcnQqIGFuZCAqZW5kKiBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZQorICAgOmM6ZGF0YTpgcmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fZnVuY3Rpb25gIGNhbGxiYWNrIG9mIHRoZQorICAgdW5kZXJseWluZyBsaWJyYXJ5LgogCiAKIC4uIGZ1bmN0aW9uOjogc2V0X2NvbXBsZXRlcl9kZWxpbXMoc3RyaW5nKQorICAgICAgICAgICAgICBnZXRfY29tcGxldGVyX2RlbGltcygpCiAKLSAgIFNldCB0aGUgcmVhZGxpbmUgd29yZCBkZWxpbWl0ZXJzIGZvciB0YWItY29tcGxldGlvbi4KLQotCi0uLiBmdW5jdGlvbjo6IGdldF9jb21wbGV0ZXJfZGVsaW1zKCkKLQotICAgR2V0IHRoZSByZWFkbGluZSB3b3JkIGRlbGltaXRlcnMgZm9yIHRhYi1jb21wbGV0aW9uLgorICAgU2V0IG9yIGdldCB0aGUgd29yZCBkZWxpbWl0ZXJzIGZvciBjb21wbGV0aW9uLiAgVGhlc2UgZGV0ZXJtaW5lIHRoZQorICAgc3RhcnQgb2YgdGhlIHdvcmQgdG8gYmUgY29uc2lkZXJlZCBmb3IgY29tcGxldGlvbiAodGhlIGNvbXBsZXRpb24gc2NvcGUpLgorICAgVGhlc2UgZnVuY3Rpb25zIGFjY2VzcyB0aGUgOmM6ZGF0YTpgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVyc2AKKyAgIHZhcmlhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuCiAKIAogLi4gZnVuY3Rpb246OiBzZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhbZnVuY3Rpb25dKQpAQCAtMTY4LDIxICsyNTMsMTMgQEAKICAgIFNldCBvciByZW1vdmUgdGhlIGNvbXBsZXRpb24gZGlzcGxheSBmdW5jdGlvbi4gIElmICpmdW5jdGlvbiogaXMKICAgIHNwZWNpZmllZCwgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBuZXcgY29tcGxldGlvbiBkaXNwbGF5IGZ1bmN0aW9uOwogICAgaWYgb21pdHRlZCBvciBgYE5vbmVgYCwgYW55IGNvbXBsZXRpb24gZGlzcGxheSBmdW5jdGlvbiBhbHJlYWR5Ci0gICBpbnN0YWxsZWQgaXMgcmVtb3ZlZC4gIFRoZSBjb21wbGV0aW9uIGRpc3BsYXkgZnVuY3Rpb24gaXMgY2FsbGVkIGFzCisgICBpbnN0YWxsZWQgaXMgcmVtb3ZlZC4gIFRoaXMgc2V0cyBvciBjbGVhcnMgdGhlCisgICA6YzpkYXRhOmBybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rYCBjYWxsYmFjayBpbiB0aGUKKyAgIHVuZGVybHlpbmcgbGlicmFyeS4gIFRoZSBjb21wbGV0aW9uIGRpc3BsYXkgZnVuY3Rpb24gaXMgY2FsbGVkIGFzCiAgICBgYGZ1bmN0aW9uKHN1YnN0aXR1dGlvbiwgW21hdGNoZXNdLCBsb25nZXN0X21hdGNoX2xlbmd0aClgYCBvbmNlCiAgICBlYWNoIHRpbWUgbWF0Y2hlcyBuZWVkIHRvIGJlIGRpc3BsYXllZC4KIAogCi0uLiBmdW5jdGlvbjo6IGFkZF9oaXN0b3J5KGxpbmUpCi0KLSAgIEFwcGVuZCBhIGxpbmUgdG8gdGhlIGhpc3RvcnkgYnVmZmVyLCBhcyBpZiBpdCB3YXMgdGhlIGxhc3QgbGluZSB0eXBlZC4KLQotLi4gc2VlYWxzbzo6Ci0KLSAgIE1vZHVsZSA6bW9kOmBybGNvbXBsZXRlcmAKLSAgICAgIENvbXBsZXRpb24gb2YgUHl0aG9uIGlkZW50aWZpZXJzIGF0IHRoZSBpbnRlcmFjdGl2ZSBwcm9tcHQuCi0KLQogLi4gX3JlYWRsaW5lLWV4YW1wbGU6CiAKIEV4YW1wbGUKQEAgLTIwMSw2ICsyNzgsOCBAQAogICAgaGlzdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCJ+IiksICIucHl0aG9uX2hpc3RvcnkiKQogICAgdHJ5OgogICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RmaWxlKQorICAgICAgICMgZGVmYXVsdCBoaXN0b3J5IGxlbiBpcyAtMSAoaW5maW5pdGUpLCB3aGljaCBtYXkgZ3JvdyB1bnJ1bHkKKyAgICAgICByZWFkbGluZS5zZXRfaGlzdG9yeV9sZW5ndGgoMTAwMCkKICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKICAgICAgICBwYXNzCiAKQEAgLTIwOSw2ICsyODgsMjcgQEAKIFRoaXMgY29kZSBpcyBhY3R1YWxseSBhdXRvbWF0aWNhbGx5IHJ1biB3aGVuIFB5dGhvbiBpcyBydW4gaW4KIDpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gIChzZWUgOnJlZjpgcmxjb21wbGV0ZXItY29uZmlnYCkuCiAKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBhY2hpZXZlcyB0aGUgc2FtZSBnb2FsIGJ1dCBzdXBwb3J0cyBjb25jdXJyZW50IGludGVyYWN0aXZlCitzZXNzaW9ucywgYnkgb25seSBhcHBlbmRpbmcgdGhlIG5ldyBoaXN0b3J5LiA6OgorCisgICBpbXBvcnQgYXRleGl0CisgICBpbXBvcnQgb3MKKyAgIGltcG9ydCByZWFkbGluZQorICAgaGlzdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCJ+IiksICIucHl0aG9uX2hpc3RvcnkiKQorCisgICB0cnk6CisgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCisgICAgICAgaF9sZW4gPSByZWFkbGluZS5nZXRfaGlzdG9yeV9sZW5ndGgoKQorICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgIG9wZW4oaGlzdGZpbGUsICd3YicpLmNsb3NlKCkKKyAgICAgICBoX2xlbiA9IDAKKworICAgZGVmIHNhdmUocHJldl9oX2xlbiwgaGlzdGZpbGUpOgorICAgICAgIG5ld19oX2xlbiA9IHJlYWRsaW5lLmdldF9oaXN0b3J5X2xlbmd0aCgpCisgICAgICAgcmVhZGxpbmUuc2V0X2hpc3RvcnlfbGVuZ3RoKDEwMDApCisgICAgICAgcmVhZGxpbmUuYXBwZW5kX2hpc3RvcnlfZmlsZShuZXdfaF9sZW4gLSBwcmV2X2hfbGVuLCBoaXN0ZmlsZSkKKyAgIGF0ZXhpdC5yZWdpc3RlcihzYXZlLCBoX2xlbiwgaGlzdGZpbGUpCisKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBleHRlbmRzIHRoZSA6Y2xhc3M6YGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlYCBjbGFzcyB0bwogc3VwcG9ydCBoaXN0b3J5IHNhdmUvcmVzdG9yZS4gOjoKIApAQCAtMjMzLDUgKzMzMyw1IEBACiAgICAgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5zYXZlX2hpc3RvcnksIGhpc3RmaWxlKQogCiAgICAgICAgZGVmIHNhdmVfaGlzdG9yeShzZWxmLCBoaXN0ZmlsZSk6CisgICAgICAgICAgIHJlYWRsaW5lLnNldF9oaXN0b3J5X2xlbmd0aCgxMDAwKQogICAgICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlcHJsaWIucnN0IGIvRG9jL2xpYnJhcnkvcmVwcmxpYi5yc3QKaW5kZXggZWU5YTEwZC4uMDkwNWI5OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVwcmxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmVwcmxpYi5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHJlcHJsaWIKICAgIDpzeW5vcHNpczogQWx0ZXJuYXRlIHJlcHIoKSBpbXBsZW1lbnRhdGlvbiB3aXRoIHNpemUgbGltaXRzLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcmVwcmxpYi5weWAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdCBiL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdAppbmRleCBhN2IyMjllLi5iZGZlNWY2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CkBAIC00LDkgKzQsMTEgQEAKIC4uIG1vZHVsZTo6IHJlc291cmNlCiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogQW4gaW50ZXJmYWNlIHRvIHByb3ZpZGUgcmVzb3VyY2UgdXNhZ2UgaW5mb3JtYXRpb24gb24gdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogSmVyZW15IEh5bHRvbiA8amVyZW15QGFsdW0ubWl0LmVkdT4KIC4uIHNlY3Rpb25hdXRob3I6OiBKZXJlbXkgSHlsdG9uIDxqZXJlbXlAYWx1bS5taXQuZWR1PgogCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBiYXNpYyBtZWNoYW5pc21zIGZvciBtZWFzdXJpbmcgYW5kIGNvbnRyb2xsaW5nIHN5c3RlbQogcmVzb3VyY2VzIHV0aWxpemVkIGJ5IGEgcHJvZ3JhbS4KQEAgLTEyMyw4ICsxMjUsNyBAQAogCiAuLiBkYXRhOjogUkxJTUlUX0ZTSVpFCiAKLSAgIFRoZSBtYXhpbXVtIHNpemUgb2YgYSBmaWxlIHdoaWNoIHRoZSBwcm9jZXNzIG1heSBjcmVhdGUuICBUaGlzIG9ubHkgYWZmZWN0cyB0aGUKLSAgIHN0YWNrIG9mIHRoZSBtYWluIHRocmVhZCBpbiBhIG11bHRpLXRocmVhZGVkIHByb2Nlc3MuCisgICBUaGUgbWF4aW11bSBzaXplIG9mIGEgZmlsZSB3aGljaCB0aGUgcHJvY2VzcyBtYXkgY3JlYXRlLgogCiAKIC4uIGRhdGE6OiBSTElNSVRfREFUQQpAQCAtMTM0LDcgKzEzNSw4IEBACiAKIC4uIGRhdGE6OiBSTElNSVRfU1RBQ0sKIAotICAgVGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBjYWxsIHN0YWNrIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLgorICAgVGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBjYWxsIHN0YWNrIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLiAgVGhpcyBvbmx5CisgICBhZmZlY3RzIHRoZSBzdGFjayBvZiB0aGUgbWFpbiB0aHJlYWQgaW4gYSBtdWx0aS10aHJlYWRlZCBwcm9jZXNzLgogCiAKIC4uIGRhdGE6OiBSTElNSVRfUlNTCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QgYi9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKaW5kZXggOWVkMDFjNy4uNDBiMDljZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogcmxjb21wbGV0ZXIKICAgIDpzeW5vcHNpczogUHl0aG9uIGlkZW50aWZpZXIgY29tcGxldGlvbiwgc3VpdGFibGUgZm9yIHRoZSBHTlUgcmVhZGxpbmUgbGlicmFyeS4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IE1vc2hlIFphZGthIDxtb3NoZXpAemFka2Euc2l0ZS5jby5pbD4KIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcmxjb21wbGV0ZXIucHlgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ydW5weS5yc3QgYi9Eb2MvbGlicmFyeS9ydW5weS5yc3QKaW5kZXggNzI5M2YxNS4uYWYzNWU4MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcnVucHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3J1bnB5LnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogcnVucHkKICAgIDpzeW5vcHNpczogTG9jYXRlIGFuZCBydW4gUHl0aG9uIG1vZHVsZXMgd2l0aG91dCBpbXBvcnRpbmcgdGhlbSBmaXJzdC4KKwogLi4gbW9kdWxlYXV0aG9yOjogTmljayBDb2dobGFuIDxuY29naGxhbkBnbWFpbC5jb20+CiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3J1bnB5LnB5YApAQCAtMzYsNyArMzcsOCBAQAogICAgaW1wb3J0IG1lY2hhbmlzbSAocmVmZXIgdG8gOnBlcDpgMzAyYCBmb3IgZGV0YWlscykgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYQogICAgZnJlc2ggbW9kdWxlIG5hbWVzcGFjZS4KIAotICAgSWYgdGhlIHN1cHBsaWVkIG1vZHVsZSBuYW1lIHJlZmVycyB0byBhIHBhY2thZ2UgcmF0aGVyIHRoYW4gYSBub3JtYWwKKyAgIFRoZSAqbW9kX25hbWUqIGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBtb2R1bGUgbmFtZS4KKyAgIElmIHRoZSBtb2R1bGUgbmFtZSByZWZlcnMgdG8gYSBwYWNrYWdlIHJhdGhlciB0aGFuIGEgbm9ybWFsCiAgICBtb2R1bGUsIHRoZW4gdGhhdCBwYWNrYWdlIGlzIGltcG9ydGVkIGFuZCB0aGUgYGBfX21haW5fX2BgIHN1Ym1vZHVsZSB3aXRoaW4KICAgIHRoYXQgcGFja2FnZSBpcyB0aGVuIGV4ZWN1dGVkIGFuZCB0aGUgcmVzdWx0aW5nIG1vZHVsZSBnbG9iYWxzIGRpY3Rpb25hcnkKICAgIHJldHVybmVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2NoZWQucnN0IGIvRG9jL2xpYnJhcnkvc2NoZWQucnN0CmluZGV4IDI2ZjU5YzUuLjRkNGE2MTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NjaGVkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zY2hlZC5yc3QKQEAgLTMsMTIgKzMsMTMgQEAKIAogLi4gbW9kdWxlOjogc2NoZWQKICAgIDpzeW5vcHNpczogR2VuZXJhbCBwdXJwb3NlIGV2ZW50IHNjaGVkdWxlci4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IE1vc2hlIFphZGthIDxtb3NoZXpAemFka2Euc2l0ZS5jby5pbD4KIAotLi4gaW5kZXg6OiBzaW5nbGU6IGV2ZW50IHNjaGVkdWxpbmcKLQogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc2NoZWQucHlgCiAKKy4uIGluZGV4Ojogc2luZ2xlOiBldmVudCBzY2hlZHVsaW5nCisKIC0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBzY2hlZGAgbW9kdWxlIGRlZmluZXMgYSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIGEgZ2VuZXJhbCBwdXJwb3NlIGV2ZW50CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdAppbmRleCA1MzM0YWY4Li42Y2VjOWY3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKQEAgLTQsNiArNCw3IEBACiAuLiBtb2R1bGU6OiBzZWxlY3QKICAgIDpzeW5vcHNpczogV2FpdCBmb3IgSS9PIGNvbXBsZXRpb24gb24gbXVsdGlwbGUgc3RyZWFtcy4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSA6YzpmdW5jOmBzZWxlY3RgIGFuZCA6YzpmdW5jOmBwb2xsYCBmdW5jdGlvbnMKIGF2YWlsYWJsZSBpbiBtb3N0IG9wZXJhdGluZyBzeXN0ZW1zLCA6YzpmdW5jOmBkZXZwb2xsYCBhdmFpbGFibGUgb24KQEAgLTE0NSw2ICsxNDYsMTMgQEAKICAgICAgIGxpYnJhcnksIGFuZCBkb2VzIG5vdCBoYW5kbGUgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGRvbid0IG9yaWdpbmF0ZSBmcm9tCiAgICAgICBXaW5Tb2NrLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIGZ1bmN0aW9uIGlzIG5vdyByZXRyaWVkIHdpdGggYSByZWNvbXB1dGVkIHRpbWVvdXQgd2hlbiBpbnRlcnJ1cHRlZCBieQorICAgICAgYSBzaWduYWwsIGV4Y2VwdCBpZiB0aGUgc2lnbmFsIGhhbmRsZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiAoc2VlCisgICAgICA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKSwgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYC4KKworCiAuLiBhdHRyaWJ1dGU6OiBQSVBFX0JVRgogCiAgICBUaGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2FuIGJlIHdyaXR0ZW4gd2l0aG91dCBibG9ja2luZyB0byBhIHBpcGUKQEAgLTI0Miw2ICsyNTAsMTIgQEAKICAgIHJldHVybmluZy4gSWYgKnRpbWVvdXQqIGlzIG9taXR0ZWQsIC0xLCBvciA6Y29uc3Q6YE5vbmVgLCB0aGUgY2FsbCB3aWxsCiAgICBibG9jayB1bnRpbCB0aGVyZSBpcyBhbiBldmVudCBmb3IgdGhpcyBwb2xsIG9iamVjdC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSBmdW5jdGlvbiBpcyBub3cgcmV0cmllZCB3aXRoIGEgcmVjb21wdXRlZCB0aW1lb3V0IHdoZW4gaW50ZXJydXB0ZWQgYnkKKyAgICAgIGEgc2lnbmFsLCBleGNlcHQgaWYgdGhlIHNpZ25hbCBoYW5kbGVyIHJhaXNlcyBhbiBleGNlcHRpb24gKHNlZQorICAgICAgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSksIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAuCisKIAogLi4gX2Vwb2xsLW9iamVjdHM6CiAKQEAgLTMyMiw2ICszMzYsMTIgQEAKIAogICAgV2FpdCBmb3IgZXZlbnRzLiB0aW1lb3V0IGluIHNlY29uZHMgKGZsb2F0KQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIGZ1bmN0aW9uIGlzIG5vdyByZXRyaWVkIHdpdGggYSByZWNvbXB1dGVkIHRpbWVvdXQgd2hlbiBpbnRlcnJ1cHRlZCBieQorICAgICAgYSBzaWduYWwsIGV4Y2VwdCBpZiB0aGUgc2lnbmFsIGhhbmRsZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiAoc2VlCisgICAgICA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKSwgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYC4KKwogCiAuLiBfcG9sbC1vYmplY3RzOgogCkBAIC00MDEsNiArNDIxLDEyIEBACiAgICByZXR1cm5pbmcuIElmICp0aW1lb3V0KiBpcyBvbWl0dGVkLCBuZWdhdGl2ZSwgb3IgOmNvbnN0OmBOb25lYCwgdGhlIGNhbGwgd2lsbAogICAgYmxvY2sgdW50aWwgdGhlcmUgaXMgYW4gZXZlbnQgZm9yIHRoaXMgcG9sbCBvYmplY3QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgZnVuY3Rpb24gaXMgbm93IHJldHJpZWQgd2l0aCBhIHJlY29tcHV0ZWQgdGltZW91dCB3aGVuIGludGVycnVwdGVkIGJ5CisgICAgICBhIHNpZ25hbCwgZXhjZXB0IGlmIHRoZSBzaWduYWwgaGFuZGxlciByYWlzZXMgYW4gZXhjZXB0aW9uIChzZWUKKyAgICAgIDpwZXA6YDQ3NWAgZm9yIHRoZSByYXRpb25hbGUpLCBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgICAgIDpleGM6YEludGVycnVwdGVkRXJyb3JgLgorCiAKIC4uIF9rcXVldWUtb2JqZWN0czoKIApAQCAtNDM1LDEzICs0NjEsMTkgQEAKICAgIC0gbWF4X2V2ZW50cyBtdXN0IGJlIDAgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyCiAgICAtIHRpbWVvdXQgaW4gc2Vjb25kcyAoZmxvYXRzIHBvc3NpYmxlKQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIGZ1bmN0aW9uIGlzIG5vdyByZXRyaWVkIHdpdGggYSByZWNvbXB1dGVkIHRpbWVvdXQgd2hlbiBpbnRlcnJ1cHRlZCBieQorICAgICAgYSBzaWduYWwsIGV4Y2VwdCBpZiB0aGUgc2lnbmFsIGhhbmRsZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiAoc2VlCisgICAgICA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKSwgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYC4KKwogCiAuLiBfa2V2ZW50LW9iamVjdHM6CiAKIEtldmVudCBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLQogCi1odHRwOi8vd3d3LmZyZWVic2Qub3JnL2NnaS9tYW4uY2dpP3F1ZXJ5PWtxdWV1ZSZzZWt0aW9uPTIKK2h0dHBzOi8vd3d3LmZyZWVic2Qub3JnL2NnaS9tYW4uY2dpP3F1ZXJ5PWtxdWV1ZSZzZWt0aW9uPTIKIAogLi4gYXR0cmlidXRlOjoga2V2ZW50LmlkZW50CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdG9ycy5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0CmluZGV4IDk4Mzc3YzguLjQ0YjI3ZjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NlbGVjdG9ycy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApAQCAtNiw2ICs2LDkgQEAKIAogLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3NlbGVjdG9ycy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogSW50cm9kdWN0aW9uCiAtLS0tLS0tLS0tLS0KQEAgLTQ1LDEyICs0OCwxMyBAQAogICAgKy0tIFNlbGVjdFNlbGVjdG9yCiAgICArLS0gUG9sbFNlbGVjdG9yCiAgICArLS0gRXBvbGxTZWxlY3RvcgorICAgKy0tIERldnBvbGxTZWxlY3RvcgogICAgKy0tIEtxdWV1ZVNlbGVjdG9yCiAKIAogSW4gdGhlIGZvbGxvd2luZywgKmV2ZW50cyogaXMgYSBiaXR3aXNlIG1hc2sgaW5kaWNhdGluZyB3aGljaCBJL08gZXZlbnRzIHNob3VsZAotYmUgd2FpdGVkIGZvciBvbiBhIGdpdmVuIGZpbGUgb2JqZWN0LiBJdCBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgY29uc3RhbnRzCi1iZWxvdzoKK2JlIHdhaXRlZCBmb3Igb24gYSBnaXZlbiBmaWxlIG9iamVjdC4gSXQgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIG1vZHVsZXMKK2NvbnN0YW50cyBiZWxvdzoKIAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBDb25zdGFudCAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtOTgsNyArMTAyLDcgQEAKICAgIDpjbGFzczpgQmFzZVNlbGVjdG9yYCBhbmQgaXRzIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBzdXBwb3J0IHRoZQogICAgOnRlcm06YGNvbnRleHQgbWFuYWdlcmAgcHJvdG9jb2wuCiAKLSAgIC4uIG1ldGhvZDo6IHJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKQorICAgLi4gYWJzdHJhY3RtZXRob2Q6OiByZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSkKIAogICAgICAgUmVnaXN0ZXIgYSBmaWxlIG9iamVjdCBmb3Igc2VsZWN0aW9uLCBtb25pdG9yaW5nIGl0IGZvciBJL08gZXZlbnRzLgogCkBAIC0xMTEsNyArMTE1LDcgQEAKICAgICAgIDpleGM6YFZhbHVlRXJyb3JgIGluIGNhc2Ugb2YgaW52YWxpZCBldmVudCBtYXNrIG9yIGZpbGUgZGVzY3JpcHRvciwgb3IKICAgICAgIDpleGM6YEtleUVycm9yYCBpZiB0aGUgZmlsZSBvYmplY3QgaXMgYWxyZWFkeSByZWdpc3RlcmVkLgogCi0gICAuLiBtZXRob2Q6OiB1bnJlZ2lzdGVyKGZpbGVvYmopCisgICAuLiBhYnN0cmFjdG1ldGhvZDo6IHVucmVnaXN0ZXIoZmlsZW9iaikKIAogICAgICAgVW5yZWdpc3RlciBhIGZpbGUgb2JqZWN0IGZyb20gc2VsZWN0aW9uLCByZW1vdmluZyBpdCBmcm9tIG1vbml0b3JpbmcuIEEKICAgICAgIGZpbGUgb2JqZWN0IHNoYWxsIGJlIHVucmVnaXN0ZXJlZCBwcmlvciB0byBiZWluZyBjbG9zZWQuCkBAIC0xMzUsNyArMTM5LDcgQEAKICAgICAgIDpleGM6YFZhbHVlRXJyb3JgIGluIGNhc2Ugb2YgaW52YWxpZCBldmVudCBtYXNrIG9yIGZpbGUgZGVzY3JpcHRvciwgb3IKICAgICAgIDpleGM6YEtleUVycm9yYCBpZiB0aGUgZmlsZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQuCiAKLSAgIC4uIG1ldGhvZDo6IHNlbGVjdCh0aW1lb3V0PU5vbmUpCisgICAuLiBhYnN0cmFjdG1ldGhvZDo6IHNlbGVjdCh0aW1lb3V0PU5vbmUpCiAKICAgICAgIFdhaXQgdW50aWwgc29tZSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0cyBiZWNvbWUgcmVhZHksIG9yIHRoZSB0aW1lb3V0CiAgICAgICBleHBpcmVzLgpAQCAtMTU4LDYgKzE2MiwxMiBAQAogICAgICAgICAgIHRpbWVvdXQgaGFzIGVsYXBzZWQgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyByZWNlaXZlcyBhIHNpZ25hbDogaW4gdGhpcwogICAgICAgICAgIGNhc2UsIGFuIGVtcHR5IGxpc3Qgd2lsbCBiZSByZXR1cm5lZC4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICAgIFRoZSBzZWxlY3RvciBpcyBub3cgcmV0cmllZCB3aXRoIGEgcmVjb21wdXRlZCB0aW1lb3V0IHdoZW4gaW50ZXJydXB0ZWQKKyAgICAgICAgIGJ5IGEgc2lnbmFsIGlmIHRoZSBzaWduYWwgaGFuZGxlciBkaWQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiAoc2VlCisgICAgICAgICA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZW1wdHkgbGlzdAorICAgICAgICAgb2YgZXZlbnRzIGJlZm9yZSB0aGUgdGltZW91dC4KKwogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCiAgICAgICBDbG9zZSB0aGUgc2VsZWN0b3IuCkBAIC0xNzIsNyArMTgyLDcgQEAKICAgICAgIFRoaXMgcmV0dXJucyB0aGUgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UgYXNzb2NpYXRlZCB0byB0aGlzIGZpbGUKICAgICAgIG9iamVjdCwgb3IgcmFpc2VzIDpleGM6YEtleUVycm9yYCBpZiB0aGUgZmlsZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQuCiAKLSAgIC4uIG1ldGhvZDo6IGdldF9tYXAoKQorICAgLi4gYWJzdHJhY3RtZXRob2Q6OiBnZXRfbWFwKCkKIAogICAgICAgUmV0dXJuIGEgbWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4KIApAQCAtMjA3LDYgKzIxNywxNiBAQAogICAgICAgVGhpcyByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBieSB0aGUgdW5kZXJseWluZwogICAgICAgOmZ1bmM6YHNlbGVjdC5lcG9sbGAgb2JqZWN0LgogCisuLiBjbGFzczo6IERldnBvbGxTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3QuZGV2cG9sbGAtYmFzZWQgc2VsZWN0b3IuCisKKyAgIC4uIG1ldGhvZDo6IGZpbGVubygpCisKKyAgICAgIFRoaXMgcmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yIHVzZWQgYnkgdGhlIHVuZGVybHlpbmcKKyAgICAgIDpmdW5jOmBzZWxlY3QuZGV2cG9sbGAgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKIAogLi4gY2xhc3M6OiBLcXVldWVTZWxlY3RvcigpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QgYi9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CmluZGV4IDIyZTIwMmQuLmRiNjZhNjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdApAQCAtNCwxMSArNCwxMCBAQAogLi4gbW9kdWxlOjogc2hlbHZlCiAgICA6c3lub3BzaXM6IFB5dGhvbiBvYmplY3QgcGVyc2lzdGVuY2UuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3NoZWx2ZS5weWAKIAogLi4gaW5kZXg6OiBtb2R1bGU6IHBpY2tsZQogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zaGVsdmUucHlgCi0KIC0tLS0tLS0tLS0tLS0tCiAKIEEgInNoZWxmIiBpcyBhIHBlcnNpc3RlbnQsIGRpY3Rpb25hcnktbGlrZSBvYmplY3QuICBUaGUgZGlmZmVyZW5jZSB3aXRoICJkYm0iCkBAIC03Niw3ICs3NSw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgUGVyc2lzdGVudCBkaWN0aW9uYXJ5IHJlY2lwZSA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NjQyLz5gXworICAgYFBlcnNpc3RlbnQgZGljdGlvbmFyeSByZWNpcGUgPGh0dHBzOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2NDIvPmBfCiAgICB3aXRoIHdpZGVseSBzdXBwb3J0ZWQgc3RvcmFnZSBmb3JtYXRzIGFuZCBoYXZpbmcgdGhlIHNwZWVkIG9mIG5hdGl2ZQogICAgZGljdGlvbmFyaWVzLgogCkBAIC0xMDksNyArMTA4LDcgQEAKICAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZU1hcHBpbmdgIHdoaWNoIHN0b3JlcyBwaWNrbGVkCiAgICB2YWx1ZXMgaW4gdGhlICpkaWN0KiBvYmplY3QuCiAKLSAgIEJ5IGRlZmF1bHQsIHZlcnNpb24gMCBwaWNrbGVzIGFyZSB1c2VkIHRvIHNlcmlhbGl6ZSB2YWx1ZXMuICBUaGUgdmVyc2lvbiBvZiB0aGUKKyAgIEJ5IGRlZmF1bHQsIHZlcnNpb24gMyBwaWNrbGVzIGFyZSB1c2VkIHRvIHNlcmlhbGl6ZSB2YWx1ZXMuICBUaGUgdmVyc2lvbiBvZiB0aGUKICAgIHBpY2tsZSBwcm90b2NvbCBjYW4gYmUgc3BlY2lmaWVkIHdpdGggdGhlICpwcm90b2NvbCogcGFyYW1ldGVyLiBTZWUgdGhlCiAgICA6bW9kOmBwaWNrbGVgIGRvY3VtZW50YXRpb24gZm9yIGEgZGlzY3Vzc2lvbiBvZiB0aGUgcGlja2xlIHByb3RvY29scy4KIApAQCAtMTM3LDcgKzEzNiw3IEBACiAgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgU2hlbGZgIHdoaWNoIGV4cG9zZXMgOm1ldGg6YGZpcnN0YCwgOm1ldGg6YCFuZXh0YCwKICAgIDptZXRoOmBwcmV2aW91c2AsIDptZXRoOmBsYXN0YCBhbmQgOm1ldGg6YHNldF9sb2NhdGlvbmAgd2hpY2ggYXJlIGF2YWlsYWJsZQogICAgaW4gdGhlIHRoaXJkLXBhcnR5IDptb2Q6YGJzZGRiYCBtb2R1bGUgZnJvbSBgcHlic2RkYgotICAgPGh0dHA6Ly93d3cuamNlYS5lcy9wcm9ncmFtYWNpb24vcHlic2RkYi5odG0+YF8gYnV0IG5vdCBpbiBvdGhlciBkYXRhYmFzZQorICAgPGh0dHBzOi8vd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtPmBfIGJ1dCBub3QgaW4gb3RoZXIgZGF0YWJhc2UKICAgIG1vZHVsZXMuICBUaGUgKmRpY3QqIG9iamVjdCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG11c3Qgc3VwcG9ydCB0aG9zZQogICAgbWV0aG9kcy4gIFRoaXMgaXMgZ2VuZXJhbGx5IGFjY29tcGxpc2hlZCBieSBjYWxsaW5nIG9uZSBvZgogICAgOmZ1bmM6YGJzZGRiLmhhc2hvcGVuYCwgOmZ1bmM6YGJzZGRiLmJ0b3BlbmAgb3IgOmZ1bmM6YGJzZGRiLnJub3BlbmAuICBUaGUKQEAgLTE2NSwzMiArMTY0LDMzIEBACiAKICAgIGltcG9ydCBzaGVsdmUKIAotICAgZCA9IHNoZWx2ZS5vcGVuKGZpbGVuYW1lKSAjIG9wZW4gLS0gZmlsZSBtYXkgZ2V0IHN1ZmZpeCBhZGRlZCBieSBsb3ctbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWJyYXJ5CisgICBkID0gc2hlbHZlLm9wZW4oZmlsZW5hbWUpICAjIG9wZW4gLS0gZmlsZSBtYXkgZ2V0IHN1ZmZpeCBhZGRlZCBieSBsb3ctbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbGlicmFyeQogCi0gICBkW2tleV0gPSBkYXRhICAgIyBzdG9yZSBkYXRhIGF0IGtleSAob3ZlcndyaXRlcyBvbGQgZGF0YSBpZgotICAgICAgICAgICAgICAgICAgICMgdXNpbmcgYW4gZXhpc3Rpbmcga2V5KQotICAgZGF0YSA9IGRba2V5XSAgICMgcmV0cmlldmUgYSBDT1BZIG9mIGRhdGEgYXQga2V5IChyYWlzZSBLZXlFcnJvciBpZiBubwotICAgICAgICAgICAgICAgICAgICMgc3VjaCBrZXkpCi0gICBkZWwgZFtrZXldICAgICAgIyBkZWxldGUgZGF0YSBzdG9yZWQgYXQga2V5IChyYWlzZXMgS2V5RXJyb3IKLSAgICAgICAgICAgICAgICAgICAjIGlmIG5vIHN1Y2gga2V5KQotICAgZmxhZyA9IGtleSBpbiBkICAgICAgICAjIHRydWUgaWYgdGhlIGtleSBleGlzdHMKLSAgIGtsaXN0ID0gbGlzdChkLmtleXMoKSkgIyBhIGxpc3Qgb2YgYWxsIGV4aXN0aW5nIGtleXMgKHNsb3chKQorICAgZFtrZXldID0gZGF0YSAgICAgICAgICAgICAgIyBzdG9yZSBkYXRhIGF0IGtleSAob3ZlcndyaXRlcyBvbGQgZGF0YSBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c2luZyBhbiBleGlzdGluZyBrZXkpCisgICBkYXRhID0gZFtrZXldICAgICAgICAgICAgICAjIHJldHJpZXZlIGEgQ09QWSBvZiBkYXRhIGF0IGtleSAocmFpc2UgS2V5RXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbm8gc3VjaCBrZXkpCisgICBkZWwgZFtrZXldICAgICAgICAgICAgICAgICAjIGRlbGV0ZSBkYXRhIHN0b3JlZCBhdCBrZXkgKHJhaXNlcyBLZXlFcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBubyBzdWNoIGtleSkKKworICAgZmxhZyA9IGtleSBpbiBkICAgICAgICAgICAgIyB0cnVlIGlmIHRoZSBrZXkgZXhpc3RzCisgICBrbGlzdCA9IGxpc3QoZC5rZXlzKCkpICAgICAjIGEgbGlzdCBvZiBhbGwgZXhpc3Rpbmcga2V5cyAoc2xvdyEpCiAKICAgICMgYXMgZCB3YXMgb3BlbmVkIFdJVEhPVVQgd3JpdGViYWNrPVRydWUsIGJld2FyZToKLSAgIGRbJ3h4J10gPSBbMCwgMSwgMl0gICAgIyB0aGlzIHdvcmtzIGFzIGV4cGVjdGVkLCBidXQuLi4KLSAgIGRbJ3h4J10uYXBwZW5kKDMpICAgICAgIyAqdGhpcyBkb2Vzbid0ISogLS0gZFsneHgnXSBpcyBTVElMTCBbMCwgMSwgMl0hCisgICBkWyd4eCddID0gWzAsIDEsIDJdICAgICAgICAjIHRoaXMgd29ya3MgYXMgZXhwZWN0ZWQsIGJ1dC4uLgorICAgZFsneHgnXS5hcHBlbmQoMykgICAgICAgICAgIyAqdGhpcyBkb2Vzbid0ISogLS0gZFsneHgnXSBpcyBTVElMTCBbMCwgMSwgMl0hCiAKICAgICMgaGF2aW5nIG9wZW5lZCBkIHdpdGhvdXQgd3JpdGViYWNrPVRydWUsIHlvdSBuZWVkIHRvIGNvZGUgY2FyZWZ1bGx5OgotICAgdGVtcCA9IGRbJ3h4J10gICAgICAjIGV4dHJhY3RzIHRoZSBjb3B5Ci0gICB0ZW1wLmFwcGVuZCg1KSAgICAgICMgbXV0YXRlcyB0aGUgY29weQotICAgZFsneHgnXSA9IHRlbXAgICAgICAjIHN0b3JlcyB0aGUgY29weSByaWdodCBiYWNrLCB0byBwZXJzaXN0IGl0CisgICB0ZW1wID0gZFsneHgnXSAgICAgICAgICAgICAjIGV4dHJhY3RzIHRoZSBjb3B5CisgICB0ZW1wLmFwcGVuZCg1KSAgICAgICAgICAgICAjIG11dGF0ZXMgdGhlIGNvcHkKKyAgIGRbJ3h4J10gPSB0ZW1wICAgICAgICAgICAgICMgc3RvcmVzIHRoZSBjb3B5IHJpZ2h0IGJhY2ssIHRvIHBlcnNpc3QgaXQKIAogICAgIyBvciwgZD1zaGVsdmUub3BlbihmaWxlbmFtZSx3cml0ZWJhY2s9VHJ1ZSkgd291bGQgbGV0IHlvdSBqdXN0IGNvZGUKICAgICMgZFsneHgnXS5hcHBlbmQoNSkgYW5kIGhhdmUgaXQgd29yayBhcyBleHBlY3RlZCwgQlVUIGl0IHdvdWxkIGFsc28KICAgICMgY29uc3VtZSBtb3JlIG1lbW9yeSBhbmQgbWFrZSB0aGUgZC5jbG9zZSgpIG9wZXJhdGlvbiBzbG93ZXIuCiAKLSAgIGQuY2xvc2UoKSAgICAgICAjIGNsb3NlIGl0CisgICBkLmNsb3NlKCkgICAgICAgICAgICAgICAgICAjIGNsb3NlIGl0CiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaGxleC5yc3QgYi9Eb2MvbGlicmFyeS9zaGxleC5yc3QKaW5kZXggZTQwYTEwZC4uZTgxZjk4MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2hsZXgucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NobGV4LnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogc2hsZXgKICAgIDpzeW5vcHNpczogU2ltcGxlIGxleGljYWwgYW5hbHlzaXMgZm9yIFVuaXggc2hlbGwtbGlrZSBsYW5ndWFnZXMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgogLi4gbW9kdWxlYXV0aG9yOjogR3VzdGF2byBOaWVtZXllciA8bmllbWV5ZXJAY29uZWN0aXZhLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4KQEAgLTI0NCw3ICsyNDUsOCBAQAogICAgVGhpcyBhdHRyaWJ1dGUgaXMgYGBOb25lYGAgYnkgZGVmYXVsdC4gIElmIHlvdSBhc3NpZ24gYSBzdHJpbmcgdG8gaXQsIHRoYXQKICAgIHN0cmluZyB3aWxsIGJlIHJlY29nbml6ZWQgYXMgYSBsZXhpY2FsLWxldmVsIGluY2x1c2lvbiByZXF1ZXN0IHNpbWlsYXIgdG8gdGhlCiAgICBgYHNvdXJjZWBgIGtleXdvcmQgaW4gdmFyaW91cyBzaGVsbHMuICBUaGF0IGlzLCB0aGUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRva2VuCi0gICB3aWxsIG9wZW5lZCBhcyBhIGZpbGVuYW1lIGFuZCBpbnB1dCB0YWtlbiBmcm9tIHRoYXQgc3RyZWFtIHVudGlsIEVPRiwgYXQgd2hpY2gKKyAgIHdpbGwgYmUgb3BlbmVkIGFzIGEgZmlsZW5hbWUgYW5kIGlucHV0IHdpbGwKKyAgIGJlIHRha2VuIGZyb20gdGhhdCBzdHJlYW0gdW50aWwgRU9GLCBhdCB3aGljaAogICAgcG9pbnQgdGhlIDptZXRoOmB+aW8uSU9CYXNlLmNsb3NlYCBtZXRob2Qgb2YgdGhhdCBzdHJlYW0gd2lsbCBiZSBjYWxsZWQgYW5kCiAgICB0aGUgaW5wdXQgc291cmNlIHdpbGwgYWdhaW4gYmVjb21lIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJlYW0uICBTb3VyY2UKICAgIHJlcXVlc3RzIG1heSBiZSBzdGFja2VkIGFueSBudW1iZXIgb2YgbGV2ZWxzIGRlZXAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaHV0aWwucnN0IGIvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAppbmRleCA3NTY2NTIxLi5hMWNmMjQxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKQEAgLTMsMTUgKzMsMTYgQEAKIAogLi4gbW9kdWxlOjogc2h1dGlsCiAgICA6c3lub3BzaXM6IEhpZ2gtbGV2ZWwgZmlsZSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgY29weWluZy4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAuLiBwYXJ0bHkgYmFzZWQgb24gdGhlIGRvY3N0cmluZ3MKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc2h1dGlsLnB5YAorCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IGZpbGU7IGNvcHlpbmcKICAgIHNpbmdsZTogY29weWluZyBmaWxlcwogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zaHV0aWwucHlgCi0KIC0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBzaHV0aWxgIG1vZHVsZSBvZmZlcnMgYSBudW1iZXIgb2YgaGlnaC1sZXZlbCBvcGVyYXRpb25zIG9uIGZpbGVzIGFuZApAQCAtMTkxLDcgKzE5Miw4IEBACiAgICBtYXRjaCBvbmUgb2YgdGhlIGdsb2Itc3R5bGUgKnBhdHRlcm5zKiBwcm92aWRlZC4gIFNlZSB0aGUgZXhhbXBsZSBiZWxvdy4KIAogCi0uLiBmdW5jdGlvbjo6IGNvcHl0cmVlKHNyYywgZHN0LCBzeW1saW5rcz1GYWxzZSwgaWdub3JlPU5vbmUsIGNvcHlfZnVuY3Rpb249Y29weTIsIGlnbm9yZV9kYW5nbGluZ19zeW1saW5rcz1GYWxzZSkKKy4uIGZ1bmN0aW9uOjogY29weXRyZWUoc3JjLCBkc3QsIHN5bWxpbmtzPUZhbHNlLCBpZ25vcmU9Tm9uZSwgXAorICAgICAgICAgICAgICBjb3B5X2Z1bmN0aW9uPWNvcHkyLCBpZ25vcmVfZGFuZ2xpbmdfc3ltbGlua3M9RmFsc2UpCiAKICAgIFJlY3Vyc2l2ZWx5IGNvcHkgYW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlIHJvb3RlZCBhdCAqc3JjKiwgcmV0dXJuaW5nIHRoZQogICAgZGVzdGluYXRpb24gZGlyZWN0b3J5LiAgVGhlIGRlc3RpbmF0aW9uCkBAIC0yODIsNyArMjg0LDcgQEAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGZ1bmN0aW9uOjogbW92ZShzcmMsIGRzdCkKKy4uIGZ1bmN0aW9uOjogbW92ZShzcmMsIGRzdCwgY29weV9mdW5jdGlvbj1jb3B5MikKIAogICAgUmVjdXJzaXZlbHkgbW92ZSBhIGZpbGUgb3IgZGlyZWN0b3J5ICgqc3JjKikgdG8gYW5vdGhlciBsb2NhdGlvbiAoKmRzdCopCiAgICBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbi4KQEAgLTI5MiwxNSArMjk0LDI2IEBACiAgICBiZSBvdmVyd3JpdHRlbiBkZXBlbmRpbmcgb24gOmZ1bmM6YG9zLnJlbmFtZWAgc2VtYW50aWNzLgogCiAgICBJZiB0aGUgZGVzdGluYXRpb24gaXMgb24gdGhlIGN1cnJlbnQgZmlsZXN5c3RlbSwgdGhlbiA6ZnVuYzpgb3MucmVuYW1lYCBpcwotICAgdXNlZC4gIE90aGVyd2lzZSwgKnNyYyogaXMgY29waWVkICh1c2luZyA6ZnVuYzpgc2h1dGlsLmNvcHkyYCkgdG8gKmRzdCogYW5kCi0gICB0aGVuIHJlbW92ZWQuIEluIGNhc2Ugb2Ygc3ltbGlua3MsIGEgbmV3IHN5bWxpbmsgcG9pbnRpbmcgdG8gdGhlIHRhcmdldCBvZgotICAgKnNyYyogd2lsbCBiZSBjcmVhdGVkIGluIG9yIGFzICpkc3QqIGFuZCAqc3JjKiB3aWxsIGJlIHJlbW92ZWQuCisgICB1c2VkLiBPdGhlcndpc2UsICpzcmMqIGlzIGNvcGllZCB0byAqZHN0KiB1c2luZyAqY29weV9mdW5jdGlvbiogYW5kIHRoZW4KKyAgIHJlbW92ZWQuICBJbiBjYXNlIG9mIHN5bWxpbmtzLCBhIG5ldyBzeW1saW5rIHBvaW50aW5nIHRvIHRoZSB0YXJnZXQgb2YgKnNyYyoKKyAgIHdpbGwgYmUgY3JlYXRlZCBpbiBvciBhcyAqZHN0KiBhbmQgKnNyYyogd2lsbCBiZSByZW1vdmVkLgorCisgICBJZiAqY29weV9mdW5jdGlvbiogaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYSBjYWxsYWJsZSB0aGF0IHRha2VzIHR3byBhcmd1bWVudHMKKyAgICpzcmMqIGFuZCAqZHN0KiwgYW5kIHdpbGwgYmUgdXNlZCB0byBjb3B5ICpzcmMqIHRvICpkZXN0KiBpZgorICAgOmZ1bmM6YG9zLnJlbmFtZWAgY2Fubm90IGJlIHVzZWQuICBJZiB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5LAorICAgOmZ1bmM6YGNvcHl0cmVlYCBpcyBjYWxsZWQsIHBhc3NpbmcgaXQgdGhlIDpmdW5jOmBjb3B5X2Z1bmN0aW9uYC4gVGhlCisgICBkZWZhdWx0ICpjb3B5X2Z1bmN0aW9uKiBpcyA6ZnVuYzpgY29weTJgLiAgVXNpbmcgOmZ1bmM6YGNvcHlgIGFzIHRoZQorICAgKmNvcHlfZnVuY3Rpb24qIGFsbG93cyB0aGUgbW92ZSB0byBzdWNjZWVkIHdoZW4gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGFsc28KKyAgIGNvcHkgdGhlIG1ldGFkYXRhLCBhdCB0aGUgZXhwZW5zZSBvZiBub3QgY29weWluZyBhbnkgb2YgdGhlIG1ldGFkYXRhLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgZXhwbGljaXQgc3ltbGluayBoYW5kbGluZyBmb3IgZm9yZWlnbiBmaWxlc3lzdGVtcywgdGh1cyBhZGFwdGluZwogICAgICAgaXQgdG8gdGhlIGJlaGF2aW9yIG9mIEdOVSdzIDpwcm9ncmFtOmBtdmAuCiAgICAgICBOb3cgcmV0dXJucyAqZHN0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHRoZSAqY29weV9mdW5jdGlvbioga2V5d29yZCBhcmd1bWVudC4KKwogLi4gZnVuY3Rpb246OiBkaXNrX3VzYWdlKHBhdGgpCiAKICAgIFJldHVybiBkaXNrIHVzYWdlIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGdpdmVuIHBhdGggYXMgYSA6dGVybTpgbmFtZWQgdHVwbGVgCkBAIC0zMzAsNyArMzQzLDcgQEAKICAgIFJldHVybiB0aGUgcGF0aCB0byBhbiBleGVjdXRhYmxlIHdoaWNoIHdvdWxkIGJlIHJ1biBpZiB0aGUgZ2l2ZW4gKmNtZCogd2FzCiAgICBjYWxsZWQuICBJZiBubyAqY21kKiB3b3VsZCBiZSBjYWxsZWQsIHJldHVybiBgYE5vbmVgYC4KIAotICAgKm1vZGUqIGlzIGEgcGVybWlzc2lvbiBtYXNrIHBhc3NlZCBhIHRvIDpmdW5jOmBvcy5hY2Nlc3NgLCBieSBkZWZhdWx0CisgICAqbW9kZSogaXMgYSBwZXJtaXNzaW9uIG1hc2sgcGFzc2VkIHRvIDpmdW5jOmBvcy5hY2Nlc3NgLCBieSBkZWZhdWx0CiAgICBkZXRlcm1pbmluZyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIGV4ZWN1dGFibGUuCiAKICAgIFdoZW4gbm8gKnBhdGgqIGlzIHNwZWNpZmllZCwgdGhlIHJlc3VsdHMgb2YgOmZ1bmM6YG9zLmVudmlyb25gIGFyZSB1c2VkLApAQCAtNDE4LDYgKzQzMSwyNiBAQAogICAgY29weXRyZWUoc291cmNlLCBkZXN0aW5hdGlvbiwgaWdub3JlPV9sb2dwYXRoKQogCiAKKy4uIF9zaHV0aWwtcm10cmVlLWV4YW1wbGU6CisKK3JtdHJlZSBleGFtcGxlCit+fn5+fn5+fn5+fn5+fgorCitUaGlzIGV4YW1wbGUgc2hvd3MgaG93IHRvIHJlbW92ZSBhIGRpcmVjdG9yeSB0cmVlIG9uIFdpbmRvd3Mgd2hlcmUgc29tZQorb2YgdGhlIGZpbGVzIGhhdmUgdGhlaXIgcmVhZC1vbmx5IGJpdCBzZXQuIEl0IHVzZXMgdGhlIG9uZXJyb3IgY2FsbGJhY2sKK3RvIGNsZWFyIHRoZSByZWFkb25seSBiaXQgYW5kIHJlYXR0ZW1wdCB0aGUgcmVtb3ZlLiBBbnkgc3Vic2VxdWVudCBmYWlsdXJlCit3aWxsIHByb3BhZ2F0ZS4gOjoKKworICAgIGltcG9ydCBvcywgc3RhdAorICAgIGltcG9ydCBzaHV0aWwKKworICAgIGRlZiByZW1vdmVfcmVhZG9ubHkoZnVuYywgcGF0aCwgXyk6CisgICAgICAgICJDbGVhciB0aGUgcmVhZG9ubHkgYml0IGFuZCByZWF0dGVtcHQgdGhlIHJlbW92YWwiCisgICAgICAgIG9zLmNobW9kKHBhdGgsIHN0YXQuU19JV1JJVEUpCisgICAgICAgIGZ1bmMocGF0aCkKKworICAgIHNodXRpbC5ybXRyZWUoZGlyZWN0b3J5LCBvbmVycm9yPXJlbW92ZV9yZWFkb25seSkKKwogLi4gX2FyY2hpdmluZy1vcGVyYXRpb25zOgogCiBBcmNoaXZpbmcgb3BlcmF0aW9ucwpAQCAtNDM0LDcgKzQ2Nyw4IEBACiAKICAgICpiYXNlX25hbWUqIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgaW5jbHVkaW5nIHRoZSBwYXRoLCBtaW51cwogICAgYW55IGZvcm1hdC1zcGVjaWZpYyBleHRlbnNpb24uICpmb3JtYXQqIGlzIHRoZSBhcmNoaXZlIGZvcm1hdDogb25lIG9mCi0gICAiemlwIiwgInRhciIsICJienRhciIgKGlmIHRoZSA6bW9kOmBiejJgIG1vZHVsZSBpcyBhdmFpbGFibGUpIG9yICJnenRhciIuCisgICAiemlwIiwgInRhciIsICJienRhciIgKGlmIHRoZSA6bW9kOmBiejJgIG1vZHVsZSBpcyBhdmFpbGFibGUpLCAieHp0YXIiCisgICAoaWYgdGhlIDptb2Q6YGx6bWFgIG1vZHVsZSBpcyBhdmFpbGFibGUpIG9yICJnenRhciIuCiAKICAgICpyb290X2RpciogaXMgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUKICAgIGFyY2hpdmU7IGZvciBleGFtcGxlLCB3ZSB0eXBpY2FsbHkgY2hkaXIgaW50byAqcm9vdF9kaXIqIGJlZm9yZSBjcmVhdGluZyB0aGUKQEAgLTQ1Nyw2ICs0OTEsOSBAQAogCiAgICBUaGUgKnZlcmJvc2UqIGFyZ3VtZW50IGlzIHVudXNlZCBhbmQgZGVwcmVjYXRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSAqeHp0YXIqIGZvcm1hdC4KKwogCiAuLiBmdW5jdGlvbjo6IGdldF9hcmNoaXZlX2Zvcm1hdHMoKQogCkBAIC00NjcsNiArNTA0LDcgQEAKIAogICAgLSAqZ3p0YXIqOiBnemlwJ2VkIHRhci1maWxlCiAgICAtICpienRhcio6IGJ6aXAyJ2VkIHRhci1maWxlIChpZiB0aGUgOm1vZDpgYnoyYCBtb2R1bGUgaXMgYXZhaWxhYmxlLikKKyAgIC0gKnh6dGFyKjogeHonZWQgdGFyLWZpbGUgKGlmIHRoZSA6bW9kOmBsem1hYCBtb2R1bGUgaXMgYXZhaWxhYmxlLikKICAgIC0gKnRhcio6IHVuY29tcHJlc3NlZCB0YXIgZmlsZQogICAgLSAqemlwKjogWklQIGZpbGUKIApAQCAtNTQyLDYgKzU4MCw3IEBACiAKICAgIC0gKmd6dGFyKjogZ3ppcCdlZCB0YXItZmlsZQogICAgLSAqYnp0YXIqOiBiemlwMidlZCB0YXItZmlsZSAoaWYgdGhlIDptb2Q6YGJ6MmAgbW9kdWxlIGlzIGF2YWlsYWJsZS4pCisgICAtICp4enRhcio6IHh6J2VkIHRhci1maWxlIChpZiB0aGUgOm1vZDpgbHptYWAgbW9kdWxlIGlzIGF2YWlsYWJsZS4pCiAgICAtICp0YXIqOiB1bmNvbXByZXNzZWQgdGFyIGZpbGUKICAgIC0gKnppcCo6IFpJUCBmaWxlCiAKQEAgLTU2NCw3ICs2MDMsOSBAQAogICAgID4+PiBtYWtlX2FyY2hpdmUoYXJjaGl2ZV9uYW1lLCAnZ3p0YXInLCByb290X2RpcikKICAgICAnL1VzZXJzL3RhcmVrL215YXJjaGl2ZS50YXIuZ3onCiAKLVRoZSByZXN1bHRpbmcgYXJjaGl2ZSBjb250YWluczo6CitUaGUgcmVzdWx0aW5nIGFyY2hpdmUgY29udGFpbnM6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICAkIHRhciAtdHp2ZiAvVXNlcnMvdGFyZWsvbXlhcmNoaXZlLnRhci5negogICAgIGRyd3gtLS0tLS0gdGFyZWsvc3RhZmYgICAgICAgMCAyMDEwLTAyLTAxIDE2OjIzOjQwIC4vCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaWduYWwucnN0IGIvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdAppbmRleCA4YjkwOTk0Li42MTI1MmNlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaWduYWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NpZ25hbC5yc3QKQEAgLTQsNiArNCw3IEBACiAuLiBtb2R1bGU6OiBzaWduYWwKICAgIDpzeW5vcHNpczogU2V0IGhhbmRsZXJzIGZvciBhc3luY2hyb25vdXMgZXZlbnRzLgogCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBtZWNoYW5pc21zIHRvIHVzZSBzaWduYWwgaGFuZGxlcnMgaW4gUHl0aG9uLgogCkBAIC0xMSw3ICsxMiw3IEBACiBHZW5lcmFsIHJ1bGVzCiAtLS0tLS0tLS0tLS0tCiAKLVRoZSA6ZnVuYzpgc2lnbmFsLnNpZ25hbGAgZnVuY3Rpb24gYWxsb3dzIHRvIGRlZmluZSBjdXN0b20gaGFuZGxlcnMgdG8gYmUKK1RoZSA6ZnVuYzpgc2lnbmFsLnNpZ25hbGAgZnVuY3Rpb24gYWxsb3dzIGRlZmluaW5nIGN1c3RvbSBoYW5kbGVycyB0byBiZQogZXhlY3V0ZWQgd2hlbiBhIHNpZ25hbCBpcyByZWNlaXZlZC4gIEEgc21hbGwgbnVtYmVyIG9mIGRlZmF1bHQgaGFuZGxlcnMgYXJlCiBpbnN0YWxsZWQ6IDpjb25zdDpgU0lHUElQRWAgaXMgaWdub3JlZCAoc28gd3JpdGUgZXJyb3JzIG9uIHBpcGVzIGFuZCBzb2NrZXRzCiBjYW4gYmUgcmVwb3J0ZWQgYXMgb3JkaW5hcnkgUHl0aG9uIGV4Y2VwdGlvbnMpIGFuZCA6Y29uc3Q6YFNJR0lOVGAgaXMKQEAgLTIyLDkgKzIzLDYgQEAKIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24pLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGhhbmRsZXIgZm9yCiA6Y29uc3Q6YFNJR0NITERgLCB3aGljaCBmb2xsb3dzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gImJsb2NrIiBzaWduYWxzIHRlbXBvcmFyaWx5IGZyb20gY3JpdGljYWwgc2VjdGlvbnMgKHNpbmNlCi10aGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIFVuaXggZmxhdm9ycykuCi0KIAogRXhlY3V0aW9uIG9mIFB5dGhvbiBzaWduYWwgaGFuZGxlcnMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCkBAIC02NSw2ICs2MywxNiBAQAogTW9kdWxlIGNvbnRlbnRzCiAtLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgIHNpZ25hbCAoU0lHKiksIGhhbmRsZXIgKDpjb25zdDpgU0lHX0RGTGAsIDpjb25zdDpgU0lHX0lHTmApIGFuZCBzaWdtYXNrCisgICAoOmNvbnN0OmBTSUdfQkxPQ0tgLCA6Y29uc3Q6YFNJR19VTkJMT0NLYCwgOmNvbnN0OmBTSUdfU0VUTUFTS2ApCisgICByZWxhdGVkIGNvbnN0YW50cyBsaXN0ZWQgYmVsb3cgd2VyZSB0dXJuZWQgaW50bworICAgOmNsYXNzOmBlbnVtcyA8ZW51bS5JbnRFbnVtPmAuCisgICA6ZnVuYzpgZ2V0c2lnbmFsYCwgOmZ1bmM6YHB0aHJlYWRfc2lnbWFza2AsIDpmdW5jOmBzaWdwZW5kaW5nYCBhbmQKKyAgIDpmdW5jOmBzaWd3YWl0YCBmdW5jdGlvbnMgcmV0dXJuIGh1bWFuLXJlYWRhYmxlCisgICA6Y2xhc3M6YGVudW1zIDxlbnVtLkludEVudW0+YC4KKworCiBUaGUgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIDptb2Q6YHNpZ25hbGAgbW9kdWxlIGFyZToKIAogCkBAIC0yMDksMjEgKzIxNywyMSBAQAogICAgOmZ1bmM6YHNpZ3BlbmRpbmdgLgogCiAKLS4uIGZ1bmN0aW9uOjogcHRocmVhZF9raWxsKHRocmVhZF9pZCwgc2lnbnVtKQorLi4gZnVuY3Rpb246OiBwdGhyZWFkX2tpbGwodGhyZWFkX2lkLCBzaWduYWxudW0pCiAKLSAgIFNlbmQgdGhlIHNpZ25hbCAqc2lnbnVtKiB0byB0aGUgdGhyZWFkICp0aHJlYWRfaWQqLCBhbm90aGVyIHRocmVhZCBpbiB0aGUKKyAgIFNlbmQgdGhlIHNpZ25hbCAqc2lnbmFsbnVtKiB0byB0aGUgdGhyZWFkICp0aHJlYWRfaWQqLCBhbm90aGVyIHRocmVhZCBpbiB0aGUKICAgIHNhbWUgcHJvY2VzcyBhcyB0aGUgY2FsbGVyLiAgVGhlIHRhcmdldCB0aHJlYWQgY2FuIGJlIGV4ZWN1dGluZyBhbnkgY29kZQogICAgKFB5dGhvbiBvciBub3QpLiAgSG93ZXZlciwgaWYgdGhlIHRhcmdldCB0aHJlYWQgaXMgZXhlY3V0aW5nIHRoZSBQeXRob24KICAgIGludGVycHJldGVyLCB0aGUgUHl0aG9uIHNpZ25hbCBoYW5kbGVycyB3aWxsIGJlIDpyZWY6YGV4ZWN1dGVkIGJ5IHRoZSBtYWluCi0gICB0aHJlYWQgPHNpZ25hbHMtYW5kLXRocmVhZHM+YC4gIFRoZXJlZm9yZSwgdGhlIG9ubHkgcG9pbnQgb2Ygc2VuZGluZyBhIHNpZ25hbCB0byBhIHBhcnRpY3VsYXIKLSAgIFB5dGhvbiB0aHJlYWQgd291bGQgYmUgdG8gZm9yY2UgYSBydW5uaW5nIHN5c3RlbSBjYWxsIHRvIGZhaWwgd2l0aAotICAgOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAuCisgICB0aHJlYWQgPHNpZ25hbHMtYW5kLXRocmVhZHM+YC4gIFRoZXJlZm9yZSwgdGhlIG9ubHkgcG9pbnQgb2Ygc2VuZGluZyBhCisgICBzaWduYWwgdG8gYSBwYXJ0aWN1bGFyIFB5dGhvbiB0aHJlYWQgd291bGQgYmUgdG8gZm9yY2UgYSBydW5uaW5nIHN5c3RlbSBjYWxsCisgICB0byBmYWlsIHdpdGggOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAuCiAKICAgIFVzZSA6ZnVuYzpgdGhyZWFkaW5nLmdldF9pZGVudCgpYCBvciB0aGUgOmF0dHI6YH50aHJlYWRpbmcuVGhyZWFkLmlkZW50YAogICAgYXR0cmlidXRlIG9mIDpjbGFzczpgdGhyZWFkaW5nLlRocmVhZGAgb2JqZWN0cyB0byBnZXQgYSBzdWl0YWJsZSB2YWx1ZQogICAgZm9yICp0aHJlYWRfaWQqLgogCi0gICBJZiAqc2lnbnVtKiBpcyAwLCB0aGVuIG5vIHNpZ25hbCBpcyBzZW50LCBidXQgZXJyb3IgY2hlY2tpbmcgaXMgc3RpbGwKKyAgIElmICpzaWduYWxudW0qIGlzIDAsIHRoZW4gbm8gc2lnbmFsIGlzIHNlbnQsIGJ1dCBlcnJvciBjaGVja2luZyBpcyBzdGlsbAogICAgcGVyZm9ybWVkOyB0aGlzIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSB0YXJnZXQgdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCAoc2VlIHRoZSBtYW4gcGFnZSA6bWFucGFnZTpgcHRocmVhZF9raWxsKDMpYCBmb3IgZnVydGhlcgpAQCAtMzA4LDYgKzMxNiw5IEBACiAgICBhdHRlbXB0aW5nIHRvIGNhbGwgaXQgZnJvbSBvdGhlciB0aHJlYWRzIHdpbGwgY2F1c2UgYSA6ZXhjOmBWYWx1ZUVycm9yYAogICAgZXhjZXB0aW9uIHRvIGJlIHJhaXNlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIE9uIFdpbmRvd3MsIHRoZSBmdW5jdGlvbiBub3cgYWxzbyBzdXBwb3J0cyBzb2NrZXQgaGFuZGxlcy4KKwogCiAuLiBmdW5jdGlvbjo6IHNpZ2ludGVycnVwdChzaWduYWxudW0sIGZsYWcpCiAKQEAgLTM0MSw2ICszNTIsOSBAQAogICAgT24gV2luZG93cywgOmZ1bmM6YHNpZ25hbGAgY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggOmNvbnN0OmBTSUdBQlJUYCwKICAgIDpjb25zdDpgU0lHRlBFYCwgOmNvbnN0OmBTSUdJTExgLCA6Y29uc3Q6YFNJR0lOVGAsIDpjb25zdDpgU0lHU0VHVmAsIG9yCiAgICA6Y29uc3Q6YFNJR1RFUk1gLiBBIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkIGluIGFueSBvdGhlciBjYXNlLgorICAgTm90ZSB0aGF0IG5vdCBhbGwgc3lzdGVtcyBkZWZpbmUgdGhlIHNhbWUgc2V0IG9mIHNpZ25hbCBuYW1lczsgYW4KKyAgIDpleGM6YEF0dHJpYnV0ZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiBhIHNpZ25hbCBuYW1lIGlzIG5vdCBkZWZpbmVkIGFzCisgICBgYFNJRypgYCBtb2R1bGUgbGV2ZWwgY29uc3RhbnQuCiAKIAogLi4gZnVuY3Rpb246OiBzaWdwZW5kaW5nKCkKQEAgLTM5NSw2ICs0MDksMTEgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgZnVuY3Rpb24gaXMgbm93IHJldHJpZWQgaWYgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgbm90IGluICpzaWdzZXQqCisgICAgICBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIGRvZXMgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiAoc2VlIDpwZXA6YDQ3NWAgZm9yCisgICAgICB0aGUgcmF0aW9uYWxlKS4KKwogCiAuLiBmdW5jdGlvbjo6IHNpZ3RpbWVkd2FpdChzaWdzZXQsIHRpbWVvdXQpCiAKQEAgLTQwOSw2ICs0MjgsMTEgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgZnVuY3Rpb24gaXMgbm93IHJldHJpZWQgd2l0aCB0aGUgcmVjb21wdXRlZCAqdGltZW91dCogaWYgaW50ZXJydXB0ZWQKKyAgICAgIGJ5IGEgc2lnbmFsIG5vdCBpbiAqc2lnc2V0KiBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIGRvZXMgbm90IHJhaXNlIGFuCisgICAgICBleGNlcHRpb24gKHNlZSA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKS4KKwogCiAuLiBfc2lnbmFsLWV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NpdGUucnN0IGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKaW5kZXggNTFlNWRhOC4uMGE3M2Y1YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKQEAgLTI2LDI0ICsyNiwyMyBAQAogICAgOm9wdGlvbjpgLVNgLgogCiAuLiBpbmRleDo6Ci0gICBwYWlyOiBzaXRlLXB5dGhvbjsgZGlyZWN0b3J5CiAgICBwYWlyOiBzaXRlLXBhY2thZ2VzOyBkaXJlY3RvcnkKIAogSXQgc3RhcnRzIGJ5IGNvbnN0cnVjdGluZyB1cCB0byBmb3VyIGRpcmVjdG9yaWVzIGZyb20gYSBoZWFkIGFuZCBhIHRhaWwgcGFydC4KIEZvciB0aGUgaGVhZCBwYXJ0LCBpdCB1c2VzIGBgc3lzLnByZWZpeGBgIGFuZCBgYHN5cy5leGVjX3ByZWZpeGBgOyBlbXB0eSBoZWFkcwogYXJlIHNraXBwZWQuICBGb3IgdGhlIHRhaWwgcGFydCwgaXQgdXNlcyB0aGUgZW1wdHkgc3RyaW5nIGFuZCB0aGVuCiA6ZmlsZTpgbGliL3NpdGUtcGFja2FnZXNgIChvbiBXaW5kb3dzKSBvcgotOmZpbGU6YGxpYi9weXRob257WC5ZfS9zaXRlLXBhY2thZ2VzYCBhbmQgdGhlbiA6ZmlsZTpgbGliL3NpdGUtcHl0aG9uYCAob24KLVVuaXggYW5kIE1hY2ludG9zaCkuICBGb3IgZWFjaCBvZiB0aGUgZGlzdGluY3QgaGVhZC10YWlsIGNvbWJpbmF0aW9ucywgaXQgc2VlcwotaWYgaXQgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgYW5kIGlmIHNvLCBhZGRzIGl0IHRvIGBgc3lzLnBhdGhgYCBhbmQKLWFsc28gaW5zcGVjdHMgdGhlIG5ld2x5IGFkZGVkIHBhdGggZm9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuCis6ZmlsZTpgbGliL3B5dGhvbntYLll9L3NpdGUtcGFja2FnZXNgIChvbiBVbml4IGFuZCBNYWNpbnRvc2gpLiAgRm9yIGVhY2gKK29mIHRoZSBkaXN0aW5jdCBoZWFkLXRhaWwgY29tYmluYXRpb25zLCBpdCBzZWVzIGlmIGl0IHJlZmVycyB0byBhbiBleGlzdGluZworZGlyZWN0b3J5LCBhbmQgaWYgc28sIGFkZHMgaXQgdG8gYGBzeXMucGF0aGBgIGFuZCBhbHNvIGluc3BlY3RzIHRoZSBuZXdseQorYWRkZWQgcGF0aCBmb3IgY29uZmlndXJhdGlvbiBmaWxlcy4KIAotLi4gZGVwcmVjYXRlZDo6IDMuNAotICAgU3VwcG9ydCBmb3IgdGhlICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjUuCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgU3VwcG9ydCBmb3IgdGhlICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IGhhcyBiZWVuIHJlbW92ZWQuCiAKIElmIGEgZmlsZSBuYW1lZCAicHl2ZW52LmNmZyIgZXhpc3RzIG9uZSBkaXJlY3RvcnkgYWJvdmUgc3lzLmV4ZWN1dGFibGUsCiBzeXMucHJlZml4IGFuZCBzeXMuZXhlY19wcmVmaXggYXJlIHNldCB0byB0aGF0IGRpcmVjdG9yeSBhbmQKLWl0IGlzIGFsc28gY2hlY2tlZCBmb3Igc2l0ZS1wYWNrYWdlcyBhbmQgc2l0ZS1weXRob24gKHN5cy5iYXNlX3ByZWZpeCBhbmQKK2l0IGlzIGFsc28gY2hlY2tlZCBmb3Igc2l0ZS1wYWNrYWdlcyAoc3lzLmJhc2VfcHJlZml4IGFuZAogc3lzLmJhc2VfZXhlY19wcmVmaXggd2lsbCBhbHdheXMgYmUgdGhlICJyZWFsIiBwcmVmaXhlcyBvZiB0aGUgUHl0aG9uCiBpbnN0YWxsYXRpb24pLiBJZiAicHl2ZW52LmNmZyIgKGEgYm9vdHN0cmFwIGNvbmZpZ3VyYXRpb24gZmlsZSkgY29udGFpbnMKIHRoZSBrZXkgImluY2x1ZGUtc3lzdGVtLXNpdGUtcGFja2FnZXMiIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuICJmYWxzZSIKQEAgLTUzLDggKzUyLDcgQEAKIEEgcGF0aCBjb25maWd1cmF0aW9uIGZpbGUgaXMgYSBmaWxlIHdob3NlIG5hbWUgaGFzIHRoZSBmb3JtIDpmaWxlOmB7bmFtZX0ucHRoYAogYW5kIGV4aXN0cyBpbiBvbmUgb2YgdGhlIGZvdXIgZGlyZWN0b3JpZXMgbWVudGlvbmVkIGFib3ZlOyBpdHMgY29udGVudHMgYXJlCiBhZGRpdGlvbmFsIGl0ZW1zIChvbmUgcGVyIGxpbmUpIHRvIGJlIGFkZGVkIHRvIGBgc3lzLnBhdGhgYC4gIE5vbi1leGlzdGluZyBpdGVtcwotYXJlIG5ldmVyIGFkZGVkIHRvIGBgc3lzLnBhdGhgYCwgYW5kIG5vIGNoZWNrIGlzIG1hZGUgdGhhdCB0aGUgaXRlbSByZWZlcnMgdG8gYQotZGlyZWN0b3J5IHJhdGhlciB0aGFuIGEgZmlsZS4gIE5vIGl0ZW0gaXMgYWRkZWQgdG8gYGBzeXMucGF0aGBgIG1vcmUgdGhhbgorYXJlIG5ldmVyIGFkZGVkIHRvIGBgc3lzLnBhdGhgYC4gIE5vIGl0ZW0gaXMgYWRkZWQgdG8gYGBzeXMucGF0aGBgIG1vcmUgdGhhbgogb25jZS4gIEJsYW5rIGxpbmVzIGFuZCBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgYCNgYCBhcmUgc2tpcHBlZC4gIExpbmVzIHN0YXJ0aW5nCiB3aXRoIGBgaW1wb3J0YGAgKGZvbGxvd2VkIGJ5IHNwYWNlIG9yIHRhYikgYXJlIGV4ZWN1dGVkLgogCkBAIC0xOTUsOCArMTkzLDcgQEAKIAogLi4gZnVuY3Rpb246OiBnZXRzaXRlcGFja2FnZXMoKQogCi0gICBSZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmcgYWxsIGdsb2JhbCBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yaWVzIChhbmQgcG9zc2libHkKLSAgIHNpdGUtcHl0aG9uKS4KKyAgIFJldHVybiBhIGxpc3QgY29udGFpbmluZyBhbGwgZ2xvYmFsIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zbXRwZC5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKaW5kZXggM2ViZWQwNi4uOTc3ZjlhOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc210cGQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NtdHBkLnJzdApAQCAtMjAsNyArMjAsOCBAQAogQWRkaXRpb25hbGx5IHRoZSBTTVRQQ2hhbm5lbCBtYXkgYmUgZXh0ZW5kZWQgdG8gaW1wbGVtZW50IHZlcnkgc3BlY2lmaWMKIGludGVyYWN0aW9uIGJlaGF2aW91ciB3aXRoIFNNVFAgY2xpZW50cy4KIAotVGhlIGNvZGUgc3VwcG9ydHMgOlJGQzpgNTMyMWAsIHBsdXMgdGhlIDpyZmM6YDE4NzBgIFNJWkUgZXh0ZW5zaW9uLgorVGhlIGNvZGUgc3VwcG9ydHMgOlJGQzpgNTMyMWAsIHBsdXMgdGhlIDpyZmM6YDE4NzBgIFNJWkUgYW5kIDpyZmM6YDY1MzFgCitTTVRQVVRGOCBleHRlbnNpb25zLgogCiAKIFNNVFBTZXJ2ZXIgT2JqZWN0cwpAQCAtMjgsNyArMjksNyBAQAogCiAKIC4uIGNsYXNzOjogU01UUFNlcnZlcihsb2NhbGFkZHIsIHJlbW90ZWFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMixcCi0gICAgICAgICAgICAgICAgICAgICAgbWFwPU5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgbWFwPU5vbmUsIGVuYWJsZV9TTVRQVVRGOD1GYWxzZSwgZGVjb2RlX2RhdGE9VHJ1ZSkKIAogICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU01UUFNlcnZlcmAgb2JqZWN0LCB3aGljaCBiaW5kcyB0byBsb2NhbCBhZGRyZXNzCiAgICAqbG9jYWxhZGRyKi4gIEl0IHdpbGwgdHJlYXQgKnJlbW90ZWFkZHIqIGFzIGFuIHVwc3RyZWFtIFNNVFAgcmVsYXllci4gIEl0CkBAIC0zOSwyNSArNDAsNzcgQEAKICAgIGFjY2VwdGVkIGluIGEgYGBEQVRBYGAgY29tbWFuZC4gIEEgdmFsdWUgb2YgYGBOb25lYGAgb3IgYGAwYGAgbWVhbnMgbm8KICAgIGxpbWl0LgogCi0gICBBIGRpY3Rpb25hcnkgY2FuIGJlIHNwZWNpZmllZCBpbiAqbWFwKiB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBzb2NrZXQgbWFwLgorICAgKm1hcCogaXMgdGhlIHNvY2tldCBtYXAgdG8gdXNlIGZvciBjb25uZWN0aW9ucyAoYW4gaW5pdGlhbGx5IGVtcHR5CisgICBkaWN0aW9uYXJ5IGlzIGEgc3VpdGFibGUgdmFsdWUpLiAgSWYgbm90IHNwZWNpZmllZCB0aGUgOm1vZDpgYXN5bmNvcmVgCisgICBnbG9iYWwgc29ja2V0IG1hcCBpcyB1c2VkLgogCi0gICAuLiBtZXRob2Q6OiBwcm9jZXNzX21lc3NhZ2UocGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpCisgICAqZW5hYmxlX1NNVFBVVEY4KiBkZXRlcm1pbnMgd2hldGhlciB0aGUgYGBTTVRQVVRGOGBgIGV4dGVuc2lvbiAoYXMgZGVmaW5lZAorICAgaW4gOlJGQzpgNjUzMWApIHNob3VsZCBiZSBlbmFibGVkLiAgVGhlIGRlZmF1bHQgaXMgYGBGYWxzZWBgLiAgSWYgc2V0IHRvCisgICBgYFRydWVgYCwgKmRlY29kZV9kYXRhKiBtdXN0IGJlIGBgRmFsc2VgYCAob3RoZXJ3aXNlIGFuIGVycm9yIGlzIHJhaXNlZCkuCisgICBXaGVuIGBgVHJ1ZWBgLCBgYFNNVFBVVEY4YGAgaXMgYWNjZXB0ZWQgYXMgYSBwYXJhbWV0ZXIgdG8gdGhlIGBgTUFJTGBgCisgICBjb21tYW5kIGFuZCB3aGVuIHByZXNlbnQgaXMgcGFzc2VkIHRvIDptZXRoOmBwcm9jZXNzX21lc3NhZ2VgIGluIHRoZQorICAgYGBrd2FyZ3NbJ21haWxfb3B0aW9ucyddYGAgbGlzdC4KIAotICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgZXhjZXB0aW9uLiBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8KKyAgICpkZWNvZGVfZGF0YSogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGUgU01UUCB0cmFuc2FjdGlvbgorICAgc2hvdWxkIGJlIGRlY29kZWQgdXNpbmcgVVRGLTguICBUaGUgZGVmYXVsdCBpcyBgYFRydWVgYCBmb3IgYmFja3dhcmQKKyAgIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYnV0IHdpbGwgY2hhbmdlIHRvIGBgRmFsc2VgYCBpbiBQeXRob24gMy42OyBzcGVjaWZ5CisgICB0aGUga2V5d29yZCB2YWx1ZSBleHBsaWNpdGx5IHRvIGF2b2lkIHRoZSA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgLiAgV2hlbgorICAgKmRlY29kZV9kYXRhKiBpcyBzZXQgdG8gYGBGYWxzZWBgIHRoZSBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGUgYGA4QklUTUlNRWBgCisgICBleHRlbnNpb24gKDpyZmM6YDYxNTJgKSwgYWNjZXB0cyB0aGUgYGBCT0RZPThCSVRNSU1FYGAgcGFyYW1ldGVyIHRvCisgICB0aGUgYGBNQUlMYGAgY29tbWFuZCwgYW5kIHdoZW4gcHJlc2VudCBwYXNzZXMgaXQgdG8gOm1ldGg6YHByb2Nlc3NfbWVzc2FnZWAKKyAgIGluIHRoZSBgYGt3YXJnc1snbWFpbF9vcHRpb25zJ11gYCBsaXN0LgorCisgICAuLiBtZXRob2Q6OiBwcm9jZXNzX21lc3NhZ2UocGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEsICoqa3dhcmdzKQorCisgICAgICBSYWlzZSBhIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGV4Y2VwdGlvbi4gT3ZlcnJpZGUgdGhpcyBpbiBzdWJjbGFzc2VzIHRvCiAgICAgICBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhpcyBtZXNzYWdlLiBXaGF0ZXZlciB3YXMgcGFzc2VkIGluIHRoZQogICAgICAgY29uc3RydWN0b3IgYXMgKnJlbW90ZWFkZHIqIHdpbGwgYmUgYXZhaWxhYmxlIGFzIHRoZSA6YXR0cjpgX3JlbW90ZWFkZHJgCiAgICAgICBhdHRyaWJ1dGUuICpwZWVyKiBpcyB0aGUgcmVtb3RlIGhvc3QncyBhZGRyZXNzLCAqbWFpbGZyb20qIGlzIHRoZSBlbnZlbG9wZQogICAgICAgb3JpZ2luYXRvciwgKnJjcHR0b3MqIGFyZSB0aGUgZW52ZWxvcGUgcmVjaXBpZW50cyBhbmQgKmRhdGEqIGlzIGEgc3RyaW5nCi0gICAgICBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZS1tYWlsICh3aGljaCBzaG91bGQgYmUgaW4gOnJmYzpgMjgyMmAKKyAgICAgIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBlLW1haWwgKHdoaWNoIHNob3VsZCBiZSBpbiA6cmZjOmA1MzIxYAogICAgICAgZm9ybWF0KS4KIAorICAgICAgSWYgdGhlICpkZWNvZGVfZGF0YSogY29uc3RydWN0b3Iga2V5d29yZCBpcyBzZXQgdG8gYGBUcnVlYGAsIHRoZSAqZGF0YSoKKyAgICAgIGFyZ3VtZW50IHdpbGwgYmUgYSB1bmljb2RlIHN0cmluZy4gIElmIGl0IGlzIHNldCB0byBgYEZhbHNlYGAsIGl0CisgICAgICB3aWxsIGJlIGEgYnl0ZXMgb2JqZWN0LgorCisgICAgICAqa3dhcmdzKiBpcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiBJdCBpcyBlbXB0eQorICAgICAgdW5sZXNzIGF0IGxlYXN0IG9uZSBvZiBgYGRlY29kZV9kYXRhPUZhbHNlYGAgb3IgYGBlbmFibGVfU01UUFVURjg9VHJ1ZWBgCisgICAgICB3YXMgZ2l2ZW4gYXMgYW4gaW5pdCBwYXJhbWV0ZXIsIGluIHdoaWNoIGNhc2UgaXQgY29udGFpbnMgdGhlIGZvbGxvd2luZworICAgICAga2V5czoKKworICAgICAgICAgICptYWlsX29wdGlvbnMqOgorICAgICAgICAgICAgIGEgbGlzdCBvZiBhbGwgcmVjZWl2ZWQgcGFyYW1ldGVycyB0byB0aGUgYGBNQUlMYGAKKyAgICAgICAgICAgICBjb21tYW5kICh0aGUgZWxlbWVudHMgYXJlIHVwcGVyY2FzZSBzdHJpbmdzOyBleGFtcGxlOgorICAgICAgICAgICAgIGBgWydCT0RZPThCSVRNSU1FJywgJ1NNVFBVVEY4J11gYCkuCisKKyAgICAgICAgICAqcmNwdF9vcHRpb25zKjoKKyAgICAgICAgICAgICBzYW1lIGFzICptYWlsX29wdGlvbnMqIGJ1dCBmb3IgdGhlIGBgUkNQVGBgIGNvbW1hbmQuCisgICAgICAgICAgICAgQ3VycmVudGx5IG5vIGBgUkNQVCBUT2BgIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCwgc28gZm9yIG5vdworICAgICAgICAgICAgIHRoaXMgd2lsbCBhbHdheXMgYmUgYW4gZW1wdHkgbGlzdC4KKworICAgICAgSW1wbGVtZW50YXRpb25zIG9mIGBgcHJvY2Vzc19tZXNzYWdlYGAgc2hvdWxkIHVzZSB0aGUgYGAqKmt3YXJnc2BgCisgICAgICBzaWduYXR1cmUgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cywgc2luY2UgZnV0dXJlIGZlYXR1cmUKKyAgICAgIGVuaGFuY2VtZW50cyBtYXkgYWRkIGtleXMgdG8gdGhlIGt3YXJncyBkaWN0aW9uYXJ5LgorCisgICAgICBSZXR1cm4gYGBOb25lYGAgdG8gcmVxdWVzdCBhIG5vcm1hbCBgYDI1MCBPa2BgIHJlc3BvbnNlOyBvdGhlcndpc2UKKyAgICAgIHJldHVybiB0aGUgZGVzaXJlZCByZXNwb25zZSBzdHJpbmcgaW4gOlJGQzpgNTMyMWAgZm9ybWF0LgorCiAgICAuLiBhdHRyaWJ1dGU6OiBjaGFubmVsX2NsYXNzCiAKICAgICAgIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0byB1c2UgYSBjdXN0b20gOmNsYXNzOmBTTVRQQ2hhbm5lbGAgZm9yCiAgICAgICBtYW5hZ2luZyBTTVRQIGNsaWVudHMuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40Ci0gICAgICBUaGUgKm1hcCogYXJndW1lbnQgd2FzIGFkZGVkLgorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKm1hcCogY29uc3RydWN0b3IgYXJndW1lbnQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICAqbG9jYWxhZGRyKiBhbmQgKnJlbW90ZWFkZHIqIG1heSBub3cgY29udGFpbiBJUHY2IGFkZHJlc3Nlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisgICAgICB0aGUgKmRlY29kZV9kYXRhKiBhbmQgKmVuYWJsZV9TTVRQVVRGOCogY29uc3RydWN0b3IgYXJndW1lbnRzLCBhbmQgdGhlCisgICAgICAqa3dhcmdzKiBhcmd1bWVudCB0byA6bWV0aDpgcHJvY2Vzc19tZXNzYWdlYCB3aGVuIG9uZSBvciBtb3JlIG9mIHRoZXNlIGlzCisgICAgICBzcGVjaWZpZWQuCiAKIAogRGVidWdnaW5nU2VydmVyIE9iamVjdHMKQEAgLTk3LDcgKzE1MCw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC4uIGNsYXNzOjogU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9MzM1NTQ0MzIsXAotICAgICAgICAgICAgICAgICAgICAgICBtYXA9Tm9uZSkpCisgICAgICAgICAgICAgICAgICAgICAgIG1hcD1Ob25lLCBlbmFibGVfU01UUFVURjg9RmFsc2UsIGRlY29kZV9kYXRhPVRydWUpCiAKICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNNVFBDaGFubmVsYCBvYmplY3Qgd2hpY2ggbWFuYWdlcyB0aGUgY29tbXVuaWNhdGlvbgogICAgYmV0d2VlbiB0aGUgc2VydmVyIGFuZCBhIHNpbmdsZSBTTVRQIGNsaWVudC4KQEAgLTEwOCwxMSArMTYxLDI0IEBACiAgICBhY2NlcHRlZCBpbiBhIGBgREFUQWBgIGNvbW1hbmQuICBBIHZhbHVlIG9mIGBgTm9uZWBgIG9yIGBgMGBgIG1lYW5zIG5vCiAgICBsaW1pdC4KIAorICAgKmVuYWJsZV9TTVRQVVRGOCogZGV0ZXJtaW5zIHdoZXRoZXIgdGhlIGBgU01UUFVURjhgYCBleHRlbnNpb24gKGFzIGRlZmluZWQKKyAgIGluIDpSRkM6YDY1MzFgKSBzaG91bGQgYmUgZW5hYmxlZC4gIFRoZSBkZWZhdWx0IGlzIGBgRmFsc2VgYC4gIEEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiBib3RoICplbmFibGVfU01UUFVURjgqIGFuZCAqZGVjb2RlX2RhdGEqIGFyZQorICAgc2V0IHRvIGBgVHJ1ZWBgIGF0IHRoZSBzYW1lIHRpbWUuCisKICAgIEEgZGljdGlvbmFyeSBjYW4gYmUgc3BlY2lmaWVkIGluICptYXAqIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIHNvY2tldCBtYXAuCiAKKyAgICpkZWNvZGVfZGF0YSogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRhdGEgcG9ydGlvbiBvZiB0aGUgU01UUCB0cmFuc2FjdGlvbgorICAgc2hvdWxkIGJlIGRlY29kZWQgdXNpbmcgVVRGLTguICBUaGUgZGVmYXVsdCBpcyBgYFRydWVgYCBmb3IgYmFja3dhcmQKKyAgIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYnV0IHdpbGwgY2hhbmdlIHRvIGBgRmFsc2VgYCBpbiBQeXRob24gMy42LiAgU3BlY2lmeQorICAgdGhlIGtleXdvcmQgdmFsdWUgZXhwbGljaXRseSB0byBhdm9pZCB0aGUgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYC4KKwogICAgVG8gdXNlIGEgY3VzdG9tIFNNVFBDaGFubmVsIGltcGxlbWVudGF0aW9uIHlvdSBuZWVkIHRvIG92ZXJyaWRlIHRoZQogICAgOmF0dHI6YFNNVFBTZXJ2ZXIuY2hhbm5lbF9jbGFzc2Agb2YgeW91ciA6Y2xhc3M6YFNNVFBTZXJ2ZXJgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgdGhlICpkZWNvZGVfZGF0YSogYW5kICplbmFibGVfU01UUFVURjgqIGFyZ3VtZW50cyB3ZXJlIGFkZGVkLgorCiAgICBUaGUgOmNsYXNzOmBTTVRQQ2hhbm5lbGAgaGFzIHRoZSBmb2xsb3dpbmcgaW5zdGFuY2UgdmFyaWFibGVzOgogCiAgICAuLiBhdHRyaWJ1dGU6OiBzbXRwX3NlcnZlcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAppbmRleCBiODdhZDVmLi5iZGYzODA1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdApAQCAtMywxNSArMywxNSBAQAogCiAuLiBtb2R1bGU6OiBzbXRwbGliCiAgICA6c3lub3BzaXM6IFNNVFAgcHJvdG9jb2wgY2xpZW50IChyZXF1aXJlcyBzb2NrZXRzKS4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zbXRwbGliLnB5YAogCiAuLiBpbmRleDo6CiAgICBwYWlyOiBTTVRQOyBwcm90b2NvbAogICAgc2luZ2xlOiBTaW1wbGUgTWFpbCBUcmFuc2ZlciBQcm90b2NvbAogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zbXRwbGliLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgc210cGxpYmAgbW9kdWxlIGRlZmluZXMgYW4gU01UUCBjbGllbnQgc2Vzc2lvbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZApAQCAtMzMsNyArMzMsNyBAQAogICAgKnRpbWVvdXQqIHBhcmFtZXRlciBzcGVjaWZpZXMgYSB0aW1lb3V0IGluIHNlY29uZHMgZm9yIGJsb2NraW5nIG9wZXJhdGlvbnMKICAgIGxpa2UgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCAoaWYgbm90IHNwZWNpZmllZCwgdGhlIGdsb2JhbCBkZWZhdWx0IHRpbWVvdXQKICAgIHNldHRpbmcgd2lsbCBiZSB1c2VkKS4gIElmIHRoZSB0aW1lb3V0IGV4cGlyZXMsIDpleGM6YHNvY2tldC50aW1lb3V0YCBpcwotICAgcmFpc2VkLiAgVGhlIG9wdGlvbmFsIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciBhbGxvd3MgdG8gYmluZAorICAgcmFpc2VkLiAgVGhlIG9wdGlvbmFsIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciBhbGxvd3MgYmluZGluZwogICAgdG8gc29tZSBzcGVjaWZpYyBzb3VyY2UgYWRkcmVzcyBpbiBhIG1hY2hpbmUgd2l0aCBtdWx0aXBsZSBuZXR3b3JrCiAgICBpbnRlcmZhY2VzLCBhbmQvb3IgdG8gc29tZSBzcGVjaWZpYyBzb3VyY2UgVENQIHBvcnQuIEl0IHRha2VzIGEgMi10dXBsZQogICAgKGhvc3QsIHBvcnQpLCBmb3IgdGhlIHNvY2tldCB0byBiaW5kIHRvIGFzIGl0cyBzb3VyY2UgYWRkcmVzcyBiZWZvcmUKQEAgLTYxLDYgKzYxLDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgc291cmNlX2FkZHJlc3MgYXJndW1lbnQgd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKyAgICAgIFRoZSBTTVRQVVRGOCBleHRlbnNpb24gKDpyZmM6YDY1MzFgKSBpcyBub3cgc3VwcG9ydGVkLgorCisKIC4uIGNsYXNzOjogU01UUF9TU0woaG9zdD0nJywgcG9ydD0wLCBsb2NhbF9ob3N0bmFtZT1Ob25lLCBrZXlmaWxlPU5vbmUsIFwKICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSBbLCB0aW1lb3V0XSwgY29udGV4dD1Ob25lLCBcCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpCkBAIC03Miw3ICs3Niw3IEBACiAgICAqcG9ydCogaXMgemVybywgdGhlIHN0YW5kYXJkIFNNVFAtb3Zlci1TU0wgcG9ydCAoNDY1KSBpcyB1c2VkLiAgVGhlIG9wdGlvbmFsCiAgICBhcmd1bWVudHMgKmxvY2FsX2hvc3RuYW1lKiwgKnRpbWVvdXQqIGFuZCAqc291cmNlX2FkZHJlc3MqIGhhdmUgdGhlIHNhbWUKICAgIG1lYW5pbmcgYXMgdGhleSBkbyBpbiB0aGUgOmNsYXNzOmBTTVRQYCBjbGFzcy4gICpjb250ZXh0KiwgYWxzbyBvcHRpb25hbCwKLSAgIGNhbiBjb250YWluIGEgOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIGFuZCBhbGxvd3MgdG8gY29uZmlndXJlIHZhcmlvdXMKKyAgIGNhbiBjb250YWluIGEgOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIGFuZCBhbGxvd3MgY29uZmlndXJpbmcgdmFyaW91cwogICAgYXNwZWN0cyBvZiB0aGUgc2VjdXJlIGNvbm5lY3Rpb24uICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvcgogICAgYmVzdCBwcmFjdGljZXMuCiAKQEAgLTE2MSw2ICsxNjUsMTMgQEAKICAgIFRoZSBzZXJ2ZXIgcmVmdXNlZCBvdXIgYGBIRUxPYGAgbWVzc2FnZS4KIAogCisuLiBleGNlcHRpb246OiBTTVRQTm90U3VwcG9ydGVkRXJyb3IKKworICAgIFRoZSBjb21tYW5kIG9yIG9wdGlvbiBhdHRlbXB0ZWQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLgorCisgICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gZXhjZXB0aW9uOjogU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IKIAogICAgU01UUCBhdXRoZW50aWNhdGlvbiB3ZW50IHdyb25nLiAgTW9zdCBwcm9iYWJseSB0aGUgc2VydmVyIGRpZG4ndCBhY2NlcHQgdGhlCkBAIC0xODksOCArMjAwLDEyIEBACiAKIC4uIG1ldGhvZDo6IFNNVFAuc2V0X2RlYnVnbGV2ZWwobGV2ZWwpCiAKLSAgIFNldCB0aGUgZGVidWcgb3V0cHV0IGxldmVsLiAgQSB0cnVlIHZhbHVlIGZvciAqbGV2ZWwqIHJlc3VsdHMgaW4gZGVidWcgbWVzc2FnZXMKLSAgIGZvciBjb25uZWN0aW9uIGFuZCBmb3IgYWxsIG1lc3NhZ2VzIHNlbnQgdG8gYW5kIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4KKyAgIFNldCB0aGUgZGVidWcgb3V0cHV0IGxldmVsLiAgQSB2YWx1ZSBvZiAxIG9yIGBgVHJ1ZWBgIGZvciAqbGV2ZWwqIHJlc3VsdHMgaW4KKyAgIGRlYnVnIG1lc3NhZ2VzIGZvciBjb25uZWN0aW9uIGFuZCBmb3IgYWxsIG1lc3NhZ2VzIHNlbnQgdG8gYW5kIHJlY2VpdmVkIGZyb20KKyAgIHRoZSBzZXJ2ZXIuICBBIHZhbHVlIG9mIDIgZm9yICpsZXZlbCogcmVzdWx0cyBpbiB0aGVzZSBtZXNzYWdlcyBiZWluZworICAgdGltZXN0YW1wZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41IEFkZGVkIGRlYnVnbGV2ZWwgMi4KIAogCiAuLiBtZXRob2Q6OiBTTVRQLmRvY21kKGNtZCwgYXJncz0nJykKQEAgLTI0MCw4ICsyNTUsNyBAQAogICAgdGhlIHNlcnZlciBpcyBzdG9yZWQgYXMgdGhlIDphdHRyOmBlaGxvX3Jlc3BgIGF0dHJpYnV0ZSwgOmF0dHI6YGRvZXNfZXNtdHBgCiAgICBpcyBzZXQgdG8gdHJ1ZSBvciBmYWxzZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgc2VydmVyIHN1cHBvcnRzIEVTTVRQLCBhbmQKICAgIDphdHRyOmBlc210cF9mZWF0dXJlc2Agd2lsbCBiZSBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlCi0gICBTTVRQIHNlcnZpY2UgZXh0ZW5zaW9ucyB0aGlzIHNlcnZlciBzdXBwb3J0cywgYW5kIHRoZWlyCi0gICBwYXJhbWV0ZXJzIChpZiBhbnkpLgorICAgU01UUCBzZXJ2aWNlIGV4dGVuc2lvbnMgdGhpcyBzZXJ2ZXIgc3VwcG9ydHMsIGFuZCB0aGVpciBwYXJhbWV0ZXJzIChpZiBhbnkpLgogCiAgICBVbmxlc3MgeW91IHdpc2ggdG8gdXNlIDptZXRoOmBoYXNfZXh0bmAgYmVmb3JlIHNlbmRpbmcgbWFpbCwgaXQgc2hvdWxkIG5vdCBiZQogICAgbmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBtZXRob2QgZXhwbGljaXRseS4gIEl0IHdpbGwgYmUgaW1wbGljaXRseSBjYWxsZWQgYnkKQEAgLTI3NCw3ICsyODgsNyBAQAogICAgICAgTWFueSBzaXRlcyBkaXNhYmxlIFNNVFAgYGBWUkZZYGAgaW4gb3JkZXIgdG8gZm9pbCBzcGFtbWVycy4KIAogCi0uLiBtZXRob2Q6OiBTTVRQLmxvZ2luKHVzZXIsIHBhc3N3b3JkKQorLi4gbWV0aG9kOjogU01UUC5sb2dpbih1c2VyLCBwYXNzd29yZCwgKiwgaW5pdGlhbF9yZXNwb25zZV9vaz1UcnVlKQogCiAgICBMb2cgaW4gb24gYW4gU01UUCBzZXJ2ZXIgdGhhdCByZXF1aXJlcyBhdXRoZW50aWNhdGlvbi4gVGhlIGFyZ3VtZW50cyBhcmUgdGhlCiAgICB1c2VybmFtZSBhbmQgdGhlIHBhc3N3b3JkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoLiBJZiB0aGVyZSBoYXMgYmVlbiBubyBwcmV2aW91cwpAQCAtMjg4LDkgKzMwMiw2OCBAQAogICAgOmV4YzpgU01UUEF1dGhlbnRpY2F0aW9uRXJyb3JgCiAgICAgICBUaGUgc2VydmVyIGRpZG4ndCBhY2NlcHQgdGhlIHVzZXJuYW1lL3Bhc3N3b3JkIGNvbWJpbmF0aW9uLgogCisgICA6ZXhjOmBTTVRQTm90U3VwcG9ydGVkRXJyb3JgCisgICAgICBUaGUgYGBBVVRIYGAgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIuCisKICAgIDpleGM6YFNNVFBFeGNlcHRpb25gCiAgICAgICBObyBzdWl0YWJsZSBhdXRoZW50aWNhdGlvbiBtZXRob2Qgd2FzIGZvdW5kLgogCisgICBFYWNoIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHN1cHBvcnRlZCBieSA6bW9kOmBzbXRwbGliYCBhcmUgdHJpZWQgaW4KKyAgIHR1cm4gaWYgdGhleSBhcmUgYWR2ZXJ0aXNlZCBhcyBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlci4gIFNlZSA6bWV0aDpgYXV0aGAKKyAgIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMuICAqaW5pdGlhbF9yZXNwb25zZV9vayogaXMKKyAgIHBhc3NlZCB0aHJvdWdoIHRvIDptZXRoOmBhdXRoYC4KKworICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCAqaW5pdGlhbF9yZXNwb25zZV9vayogc3BlY2lmaWVzIHdoZXRoZXIsIGZvcgorICAgYXV0aGVudGljYXRpb24gbWV0aG9kcyB0aGF0IHN1cHBvcnQgaXQsIGFuICJpbml0aWFsIHJlc3BvbnNlIiBhcyBzcGVjaWZpZWQKKyAgIGluIDpyZmM6YDQ5NTRgIGNhbiBiZSBzZW50IGFsb25nIHdpdGggdGhlIGBgQVVUSGBgIGNvbW1hbmQsIHJhdGhlciB0aGFuCisgICByZXF1aXJpbmcgYSBjaGFsbGVuZ2UvcmVzcG9uc2UuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICA6ZXhjOmBTTVRQTm90U3VwcG9ydGVkRXJyb3JgIG1heSBiZSByYWlzZWQsIGFuZCB0aGUKKyAgICAgICppbml0aWFsX3Jlc3BvbnNlX29rKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgorCisKKy4uIG1ldGhvZDo6IFNNVFAuYXV0aChtZWNoYW5pc20sIGF1dGhvYmplY3QsICosIGluaXRpYWxfcmVzcG9uc2Vfb2s9VHJ1ZSkKKworICAgSXNzdWUgYW4gYGBTTVRQYGAgYGBBVVRIYGAgY29tbWFuZCBmb3IgdGhlIHNwZWNpZmllZCBhdXRoZW50aWNhdGlvbgorICAgKm1lY2hhbmlzbSosIGFuZCBoYW5kbGUgdGhlIGNoYWxsZW5nZSByZXNwb25zZSB2aWEgKmF1dGhvYmplY3QqLgorCisgICAqbWVjaGFuaXNtKiBzcGVjaWZpZXMgd2hpY2ggYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGlzIHRvCisgICBiZSB1c2VkIGFzIGFyZ3VtZW50IHRvIHRoZSBgYEFVVEhgYCBjb21tYW5kOyB0aGUgdmFsaWQgdmFsdWVzIGFyZQorICAgdGhvc2UgbGlzdGVkIGluIHRoZSBgYGF1dGhgYCBlbGVtZW50IG9mIDphdHRyOmBlc210cF9mZWF0dXJlc2AuCisKKyAgICphdXRob2JqZWN0KiBtdXN0IGJlIGEgY2FsbGFibGUgb2JqZWN0IHRha2luZyBhbiBvcHRpb25hbCBzaW5nbGUgYXJndW1lbnQ6CisKKyAgICAgZGF0YSA9IGF1dGhvYmplY3QoY2hhbGxlbmdlPU5vbmUpCisKKyAgIElmIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgKmluaXRpYWxfcmVzcG9uc2Vfb2sqIGlzIHRydWUsCisgICBgYGF1dGhvYmplY3QoKWBgIHdpbGwgYmUgY2FsbGVkIGZpcnN0IHdpdGggbm8gYXJndW1lbnQuICBJdCBjYW4gcmV0dXJuIHRoZQorICAgOnJmYzpgNDk1NGAgImluaXRpYWwgcmVzcG9uc2UiIGJ5dGVzIHdoaWNoIHdpbGwgYmUgZW5jb2RlZCBhbmQgc2VudCB3aXRoCisgICB0aGUgYGBBVVRIYGAgY29tbWFuZCBhcyBiZWxvdy4gIElmIHRoZSBgYGF1dGhvYmplY3QoKWBgIGRvZXMgbm90IHN1cHBvcnQgYW4KKyAgIGluaXRpYWwgcmVzcG9uc2UgKGUuZy4gYmVjYXVzZSBpdCByZXF1aXJlcyBhIGNoYWxsZW5nZSksIGl0IHNob3VsZCByZXR1cm4KKyAgIE5vbmUgd2hlbiBjYWxsZWQgd2l0aCBgYGNoYWxsZW5nZT1Ob25lYGAuICBJZiAqaW5pdGlhbF9yZXNwb25zZV9vayogaXMKKyAgIGZhbHNlLCB0aGVuIGBgYXV0aG9iamVjdCgpYGAgd2lsbCBub3QgYmUgY2FsbGVkIGZpcnN0IHdpdGggTm9uZS4KKworICAgSWYgdGhlIGluaXRpYWwgcmVzcG9uc2UgY2hlY2sgcmV0dXJucyBOb25lLCBvciBpZiAqaW5pdGlhbF9yZXNwb25zZV9vayogaXMKKyAgIGZhbHNlLCBgYGF1dGhvYmplY3QoKWBgIHdpbGwgYmUgY2FsbGVkIHRvIHByb2Nlc3MgdGhlIHNlcnZlcidzIGNoYWxsZW5nZQorICAgcmVzcG9uc2U7IHRoZSAqY2hhbGxlbmdlKiBhcmd1bWVudCBpdCBpcyBwYXNzZWQgd2lsbCBiZSBhIGBgYnl0ZXNgYC4gIEl0CisgICBzaG91bGQgcmV0dXJuIGBgYnl0ZXNgYCAqZGF0YSogdGhhdCB3aWxsIGJlIGJhc2U2NCBlbmNvZGVkIGFuZCBzZW50IHRvIHRoZQorICAgc2VydmVyLgorCisgICBUaGUgYGBTTVRQYGAgY2xhc3MgcHJvdmlkZXMgYGBhdXRob2JqZWN0c2BgIGZvciB0aGUgYGBDUkFNLU1ENWBgLCBgYFBMQUlOYGAsCisgICBhbmQgYGBMT0dJTmBgIG1lY2hhbmlzbXM7IHRoZXkgYXJlIG5hbWVkIGBgU01UUC5hdXRoX2NyYW1fbWQ1YGAsCisgICBgYFNNVFAuYXV0aF9wbGFpbmBgLCBhbmQgYGBTTVRQLmF1dGhfbG9naW5gYCByZXNwZWN0aXZlbHkuICBUaGV5IGFsbCByZXF1aXJlCisgICB0aGF0IHRoZSBgYHVzZXJgYCBhbmQgYGBwYXNzd29yZGBgIHByb3BlcnRpZXMgb2YgdGhlIGBgU01UUGBgIGluc3RhbmNlIGFyZQorICAgc2V0IHRvIGFwcHJvcHJpYXRlIHZhbHVlcy4KKworICAgVXNlciBjb2RlIGRvZXMgbm90IG5vcm1hbGx5IG5lZWQgdG8gY2FsbCBgYGF1dGhgYCBkaXJlY3RseSwgYnV0IGNhbiBpbnN0ZWFkCisgICBjYWxsIHRoZSA6bWV0aDpgbG9naW5gIG1ldGhvZCwgd2hpY2ggd2lsbCB0cnkgZWFjaCBvZiB0aGUgYWJvdmUgbWVjaGFuaXNtcworICAgaW4gdHVybiwgaW4gdGhlIG9yZGVyIGxpc3RlZC4gIGBgYXV0aGBgIGlzIGV4cG9zZWQgdG8gZmFjaWxpdGF0ZSB0aGUKKyAgIGltcGxlbWVudGF0aW9uIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgbm90IChvciBub3QgeWV0KSBzdXBwb3J0ZWQKKyAgIGRpcmVjdGx5IGJ5IDptb2Q6YHNtdHBsaWJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogCiAuLiBtZXRob2Q6OiBTTVRQLnN0YXJ0dGxzKGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lKQogCkBAIC0zMTAsNyArMzgzLDcgQEAKICAgIDpleGM6YFNNVFBIZWxvRXJyb3JgCiAgICAgICBUaGUgc2VydmVyIGRpZG4ndCByZXBseSBwcm9wZXJseSB0byB0aGUgYGBIRUxPYGAgZ3JlZXRpbmcuCiAKLSAgIDpleGM6YFNNVFBFeGNlcHRpb25gCisgICA6ZXhjOmBTTVRQTm90U3VwcG9ydGVkRXJyb3JgCiAgICAgIFRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgU1RBUlRUTFMgZXh0ZW5zaW9uLgogCiAgICA6ZXhjOmBSdW50aW1lRXJyb3JgCkBAIC0zMjQsNiArMzk3LDExIEBACiAgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKICAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSBlcnJvciByYWlzZWQgZm9yIGxhY2sgb2YgU1RBUlRUTFMgc3VwcG9ydCBpcyBub3cgdGhlCisgICAgICA6ZXhjOmBTTVRQTm90U3VwcG9ydGVkRXJyb3JgIHN1YmNsYXNzIGluc3RlYWQgb2YgdGhlIGJhc2UKKyAgICAgIDpleGM6YFNNVFBFeGNlcHRpb25gLgorCiAKIC4uIG1ldGhvZDo6IFNNVFAuc2VuZG1haWwoZnJvbV9hZGRyLCB0b19hZGRycywgbXNnLCBtYWlsX29wdGlvbnM9W10sIHJjcHRfb3B0aW9ucz1bXSkKIApAQCAtMzYwLDYgKzQzOCw5IEBACiAgICByZWNpcGllbnQgdGhhdCB3YXMgcmVmdXNlZC4gIEVhY2ggZW50cnkgY29udGFpbnMgYSB0dXBsZSBvZiB0aGUgU01UUCBlcnJvciBjb2RlCiAgICBhbmQgdGhlIGFjY29tcGFueWluZyBlcnJvciBtZXNzYWdlIHNlbnQgYnkgdGhlIHNlcnZlci4KIAorICAgSWYgYGBTTVRQVVRGOGBgIGlzIGluY2x1ZGVkIGluICptYWlsX29wdGlvbnMqLCBhbmQgdGhlIHNlcnZlciBzdXBwb3J0cyBpdCwKKyAgICpmcm9tX2FkZHIqIGFuZCAqdG9fYWRkciogbWF5IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCisKICAgIFRoaXMgbWV0aG9kIG1heSByYWlzZSB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6CiAKICAgIDpleGM6YFNNVFBSZWNpcGllbnRzUmVmdXNlZGAKQEAgLTM3OCwxMiArNDU5LDIwIEBACiAgICAgICBUaGUgc2VydmVyIHJlcGxpZWQgd2l0aCBhbiB1bmV4cGVjdGVkIGVycm9yIGNvZGUgKG90aGVyIHRoYW4gYSByZWZ1c2FsIG9mIGEKICAgICAgIHJlY2lwaWVudCkuCiAKKyAgIDpleGM6YFNNVFBOb3RTdXBwb3J0ZWRFcnJvcmAKKyAgICAgIGBgU01UUFVURjhgYCB3YXMgZ2l2ZW4gaW4gdGhlICptYWlsX29wdGlvbnMqIGJ1dCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQorICAgICAgc2VydmVyLgorCiAgICBVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCB0aGUgY29ubmVjdGlvbiB3aWxsIGJlIG9wZW4gZXZlbiBhZnRlciBhbiBleGNlcHRpb24gaXMKICAgIHJhaXNlZC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICptc2cqIG1heSBiZSBhIGJ5dGUgc3RyaW5nLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgYGBTTVRQVVRGOGBgIHN1cHBvcnQgYWRkZWQsIGFuZCA6ZXhjOmBTTVRQTm90U3VwcG9ydGVkRXJyb3JgIG1heSBiZQorICAgICAgcmFpc2VkIGlmIGBgU01UUFVURjhgYCBpcyBzcGVjaWZpZWQgYnV0IHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBpdC4KKwogCiAuLiBtZXRob2Q6OiBTTVRQLnNlbmRfbWVzc2FnZShtc2csIGZyb21fYWRkcj1Ob25lLCB0b19hZGRycz1Ob25lLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlsX29wdGlvbnM9W10sIHJjcHRfb3B0aW9ucz1bXSkKQEAgLTM5NSw3ICs0ODQsNyBAQAogCiAgICBJZiAqZnJvbV9hZGRyKiBpcyBgYE5vbmVgYCBvciAqdG9fYWRkcnMqIGlzIGBgTm9uZWBgLCBgYHNlbmRfbWVzc2FnZWBgIGZpbGxzCiAgICB0aG9zZSBhcmd1bWVudHMgd2l0aCBhZGRyZXNzZXMgZXh0cmFjdGVkIGZyb20gdGhlIGhlYWRlcnMgb2YgKm1zZyogYXMKLSAgIHNwZWNpZmllZCBpbiA6cmZjOmAyODIyYFw6ICpmcm9tX2FkZHIqIGlzIHNldCB0byB0aGUgOm1haWxoZWFkZXI6YFNlbmRlcmAKKyAgIHNwZWNpZmllZCBpbiA6cmZjOmA1MzIyYFw6ICpmcm9tX2FkZHIqIGlzIHNldCB0byB0aGUgOm1haWxoZWFkZXI6YFNlbmRlcmAKICAgIGZpZWxkIGlmIGl0IGlzIHByZXNlbnQsIGFuZCBvdGhlcndpc2UgdG8gdGhlIDptYWlsaGVhZGVyOmBGcm9tYCBmaWVsZC4KICAgICp0b19hZHJlc3NlcyogY29tYmluZXMgdGhlIHZhbHVlcyAoaWYgYW55KSBvZiB0aGUgOm1haWxoZWFkZXI6YFRvYCwKICAgIDptYWlsaGVhZGVyOmBDY2AsIGFuZCA6bWFpbGhlYWRlcjpgQmNjYCBmaWVsZHMgZnJvbSAqbXNnKi4gIElmIGV4YWN0bHkgb25lCkBAIC00MTAsMTAgKzQ5OSwxOCBAQAogICAgY2FsbHMgOm1ldGg6YHNlbmRtYWlsYCB0byB0cmFuc21pdCB0aGUgcmVzdWx0aW5nIG1lc3NhZ2UuICBSZWdhcmRsZXNzIG9mIHRoZQogICAgdmFsdWVzIG9mICpmcm9tX2FkZHIqIGFuZCAqdG9fYWRkcnMqLCBgYHNlbmRfbWVzc2FnZWBgIGRvZXMgbm90IHRyYW5zbWl0IGFueQogICAgOm1haWxoZWFkZXI6YEJjY2Agb3IgOm1haWxoZWFkZXI6YFJlc2VudC1CY2NgIGhlYWRlcnMgdGhhdCBtYXkgYXBwZWFyCi0gICBpbiAqbXNnKi4KKyAgIGluICptc2cqLiAgSWYgYW55IG9mIHRoZSBhZGRyZXNzZXMgaW4gKmZyb21fYWRkciogYW5kICp0b19hZGRycyogY29udGFpbgorICAgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYW5kIHRoZSBzZXJ2ZXIgZG9lcyBub3QgYWR2ZXJ0aXNlIGBgU01UUFVURjhgYCBzdXBwb3J0LAorICAgYW4gOmV4YzpgU01UUE5vdFN1cHBvcnRlZGAgZXJyb3IgaXMgcmFpc2VkLiAgT3RoZXJ3aXNlIHRoZSBgYE1lc3NhZ2VgYCBpcworICAgc2VyaWFsaXplZCB3aXRoIGEgY2xvbmUgb2YgaXRzIDptb2Q6YH5lbWFpbC5wb2xpY3lgIHdpdGggdGhlCisgICA6YXR0cjpgfmVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS51dGY4YCBhdHRyaWJ1dGUgc2V0IHRvIGBgVHJ1ZWBgLCBhbmQKKyAgIGBgU01UUFVURjhgYCBhbmQgYGBCT0RZPThCSVRNSU1FYGAgYXJlIGFkZGVkIHRvICptYWlsX29wdGlvbnMqLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisgICAgICBTdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsaXplZCBhZGRyZXNzZXMgKGBgU01UUFVURjhgYCkuCisKIAogLi4gbWV0aG9kOjogU01UUC5xdWl0KCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc25kaGRyLnJzdCBiL0RvYy9saWJyYXJ5L3NuZGhkci5yc3QKaW5kZXggZjM2ZGY2OC4uNmJmYTlhOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc25kaGRyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbmRoZHIucnN0CkBAIC0zLDIxICszLDIzIEBACiAKIC4uIG1vZHVsZTo6IHNuZGhkcgogICAgOnN5bm9wc2lzOiBEZXRlcm1pbmUgdHlwZSBvZiBhIHNvdW5kIGZpbGUuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogLi4gQmFzZWQgb24gY29tbWVudHMgaW4gdGhlIG1vZHVsZSBzb3VyY2UgZmlsZS4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc25kaGRyLnB5YAorCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IEEtTEFXCiAgICBzaW5nbGU6IHUtTEFXCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3NuZGhkci5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHNuZGhkcmAgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXR0ZW1wdCB0byBkZXRlcm1pbmUgdGhlIHR5cGUKIG9mIHNvdW5kIGRhdGEgd2hpY2ggaXMgaW4gYSBmaWxlLiAgV2hlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFibGUgdG8gZGV0ZXJtaW5lCi13aGF0IHR5cGUgb2Ygc291bmQgZGF0YSBpcyBzdG9yZWQgaW4gYSBmaWxlLCB0aGV5IHJldHVybiBhIHR1cGxlIGBgKHR5cGUsCi1zYW1wbGluZ19yYXRlLCBjaGFubmVscywgZnJhbWVzLCBiaXRzX3Blcl9zYW1wbGUpYGAuICBUaGUgdmFsdWUgZm9yICp0eXBlKgord2hhdCB0eXBlIG9mIHNvdW5kIGRhdGEgaXMgc3RvcmVkIGluIGEgZmlsZSwgdGhleSByZXR1cm4gYQorOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCwgY29udGFpbmluZyBmaXZlIGF0dHJpYnV0ZXM6IChgYGZpbGV0eXBlYGAsCitgYGZyYW1lcmF0ZWBgLCBgYG5jaGFubmVsc2BgLCBgYG5mcmFtZXNgYCwgYGBzYW1wd2lkdGhgYCkuIFRoZSB2YWx1ZSBmb3IgKnR5cGUqCiBpbmRpY2F0ZXMgdGhlIGRhdGEgdHlwZSBhbmQgd2lsbCBiZSBvbmUgb2YgdGhlIHN0cmluZ3MgYGAnYWlmYydgYCwgYGAnYWlmZidgYCwKIGBgJ2F1J2BgLCBgYCdoY29tJ2BgLCBgYCdzbmRyJ2BgLCBgYCdzbmR0J2BgLCBgYCd2b2MnYGAsIGBgJ3dhdidgYCwgYGAnOHN2eCdgYCwKIGBgJ3NiJ2BgLCBgYCd1YidgYCwgb3IgYGAndWwnYGAuICBUaGUgKnNhbXBsaW5nX3JhdGUqIHdpbGwgYmUgZWl0aGVyIHRoZSBhY3R1YWwKQEAgLTMxLDEzICszMywxOSBAQAogLi4gZnVuY3Rpb246OiB3aGF0KGZpbGVuYW1lKQogCiAgICBEZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHNvdW5kIGRhdGEgc3RvcmVkIGluIHRoZSBmaWxlICpmaWxlbmFtZSogdXNpbmcKLSAgIDpmdW5jOmB3aGF0aGRyYC4gIElmIGl0IHN1Y2NlZWRzLCByZXR1cm5zIGEgdHVwbGUgYXMgZGVzY3JpYmVkIGFib3ZlLCBvdGhlcndpc2UKKyAgIDpmdW5jOmB3aGF0aGRyYC4gIElmIGl0IHN1Y2NlZWRzLCByZXR1cm5zIGEgbmFtZWR0dXBsZSBhcyBkZXNjcmliZWQgYWJvdmUsIG90aGVyd2lzZQogICAgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBSZXN1bHQgY2hhbmdlZCBmcm9tIGEgdHVwbGUgdG8gYSBuYW1lZHR1cGxlLgorCiAKIC4uIGZ1bmN0aW9uOjogd2hhdGhkcihmaWxlbmFtZSkKIAogICAgRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiBzb3VuZCBkYXRhIHN0b3JlZCBpbiBhIGZpbGUgYmFzZWQgb24gdGhlIGZpbGUgIGhlYWRlci4KLSAgIFRoZSBuYW1lIG9mIHRoZSBmaWxlIGlzIGdpdmVuIGJ5ICpmaWxlbmFtZSouICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0dXBsZSBhcworICAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgaXMgZ2l2ZW4gYnkgKmZpbGVuYW1lKi4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5hbWVkdHVwbGUgYXMKICAgIGRlc2NyaWJlZCBhYm92ZSBvbiBzdWNjZXNzLCBvciBgYE5vbmVgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFJlc3VsdCBjaGFuZ2VkIGZyb20gYSB0dXBsZSB0byBhIG5hbWVkdHVwbGUuCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CmluZGV4IDg1NzdjM2MuLjAyZjIzNTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdApAQCAtNCw2ICs0LDkgQEAKIC4uIG1vZHVsZTo6IHNvY2tldAogICAgOnN5bm9wc2lzOiBMb3ctbGV2ZWwgbmV0d29ya2luZyBpbnRlcmZhY2UuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3NvY2tldC5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBCU0QgKnNvY2tldCogaW50ZXJmYWNlLiBJdCBpcyBhdmFpbGFibGUgb24KIGFsbCBtb2Rlcm4gVW5peCBzeXN0ZW1zLCBXaW5kb3dzLCBNYWNPUywgYW5kIHByb2JhYmx5IGFkZGl0aW9uYWwgcGxhdGZvcm1zLgpAQCAtNDYsMTcgKzQ5LDIwIEBACiAtIFRoZSBhZGRyZXNzIG9mIGFuIDpjb25zdDpgQUZfVU5JWGAgc29ja2V0IGJvdW5kIHRvIGEgZmlsZSBzeXN0ZW0gbm9kZQogICBpcyByZXByZXNlbnRlZCBhcyBhIHN0cmluZywgdXNpbmcgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIGFuZCB0aGUKICAgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgIGVycm9yIGhhbmRsZXIgKHNlZSA6cGVwOmAzODNgKS4gIEFuIGFkZHJlc3MgaW4KLSAgTGludXgncyBhYnN0cmFjdCBuYW1lc3BhY2UgaXMgcmV0dXJuZWQgYXMgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3Qgd2l0aAorICBMaW51eCdzIGFic3RyYWN0IG5hbWVzcGFjZSBpcyByZXR1cm5lZCBhcyBhIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgd2l0aAogICBhbiBpbml0aWFsIG51bGwgYnl0ZTsgbm90ZSB0aGF0IHNvY2tldHMgaW4gdGhpcyBuYW1lc3BhY2UgY2FuCiAgIGNvbW11bmljYXRlIHdpdGggbm9ybWFsIGZpbGUgc3lzdGVtIHNvY2tldHMsIHNvIHByb2dyYW1zIGludGVuZGVkIHRvCiAgIHJ1biBvbiBMaW51eCBtYXkgbmVlZCB0byBkZWFsIHdpdGggYm90aCB0eXBlcyBvZiBhZGRyZXNzLiAgQSBzdHJpbmcgb3IKLSAgOmNsYXNzOmBieXRlc2Agb2JqZWN0IGNhbiBiZSB1c2VkIGZvciBlaXRoZXIgdHlwZSBvZiBhZGRyZXNzIHdoZW4KKyAgYnl0ZXMtbGlrZSBvYmplY3QgY2FuIGJlIHVzZWQgZm9yIGVpdGhlciB0eXBlIG9mIGFkZHJlc3Mgd2hlbgogICBwYXNzaW5nIGl0IGFzIGFuIGFyZ3VtZW50LgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgUHJldmlvdXNseSwgOmNvbnN0OmBBRl9VTklYYCBzb2NrZXQgcGF0aHMgd2VyZSBhc3N1bWVkIHRvIHVzZSBVVEYtOAogICAgICAgZW5jb2RpbmcuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBXcml0YWJsZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogLSBBIHBhaXIgYGAoaG9zdCwgcG9ydClgYCBpcyB1c2VkIGZvciB0aGUgOmNvbnN0OmBBRl9JTkVUYCBhZGRyZXNzIGZhbWlseSwKICAgd2hlcmUgKmhvc3QqIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBlaXRoZXIgYSBob3N0bmFtZSBpbiBJbnRlcm5ldCBkb21haW4KICAgbm90YXRpb24gbGlrZSBgYCdkYXJpbmcuY3dpLm5sJ2BgIG9yIGFuIElQdjQgYWRkcmVzcyBsaWtlIGBgJzEwMC41MC4yMDAuNSdgYCwKQEAgLTI5OCw2ICszMDQsMTggQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKKy4uIGRhdGE6OiBDQU5fUkFXX0ZEX0ZSQU1FUworCisgICBFbmFibGVzIENBTiBGRCBzdXBwb3J0IGluIGEgQ0FOX1JBVyBzb2NrZXQuIFRoaXMgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyAgIFRoaXMgYWxsb3dzIHlvdXIgYXBwbGljYXRpb24gdG8gc2VuZCBib3RoIENBTiBhbmQgQ0FOIEZEIGZyYW1lczsgaG93ZXZlciwKKyAgIHlvdSBvbmUgbXVzdCBhY2NlcHQgYm90aCBDQU4gYW5kIENBTiBGRCBmcmFtZXMgd2hlbiByZWFkaW5nIGZyb20gdGhlIHNvY2tldC4KKworICAgVGhpcyBjb25zdGFudCBpcyBkb2N1bWVudGVkIGluIHRoZSBMaW51eCBkb2N1bWVudGF0aW9uLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4ID49IDMuNi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIC4uIGRhdGE6OiBBRl9SRFMKICAgICAgICAgICBQRl9SRFMKICAgICAgICAgICBTT0xfUkRTCkBAIC0zOTQsNyArNDEyLDYgQEAKICAgIHR5cGUsIGFuZCBwcm90b2NvbCBudW1iZXIuICBBZGRyZXNzIGZhbWlseSwgc29ja2V0IHR5cGUsIGFuZCBwcm90b2NvbCBudW1iZXIgYXJlCiAgICBhcyBmb3IgdGhlIDpmdW5jOmAuc29ja2V0YCBmdW5jdGlvbiBhYm92ZS4gVGhlIGRlZmF1bHQgZmFtaWx5IGlzIDpjb25zdDpgQUZfVU5JWGAKICAgIGlmIGRlZmluZWQgb24gdGhlIHBsYXRmb3JtOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIDpjb25zdDpgQUZfSU5FVGAuCi0gICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKICAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldHMgYXJlIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIApAQCAtNDA1LDYgKzQyMiw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAogICAgICAgVGhlIHJldHVybmVkIHNvY2tldHMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBXaW5kb3dzIHN1cHBvcnQgYWRkZWQuCisKIAogLi4gZnVuY3Rpb246OiBjcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzWywgdGltZW91dFssIHNvdXJjZV9hZGRyZXNzXV0pCiAKQEAgLTQyOCw5ICs0NDgsNiBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpzb3VyY2VfYWRkcmVzcyogd2FzIGFkZGVkLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgICAgc3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgotCiAKIC4uIGZ1bmN0aW9uOjogZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvPTApCiAKQEAgLTU1MSwxMSArNTY4LDYgQEAKICAgIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBob3N0bmFtZSBvZiB0aGUgbWFjaGluZSB3aGVyZSAgdGhlIFB5dGhvbgogICAgaW50ZXJwcmV0ZXIgaXMgY3VycmVudGx5IGV4ZWN1dGluZy4KIAotICAgSWYgeW91IHdhbnQgdG8ga25vdyB0aGUgY3VycmVudCBtYWNoaW5lJ3MgSVAgYWRkcmVzcywgeW91IG1heSB3YW50IHRvIHVzZQotICAgYGBnZXRob3N0YnluYW1lKGdldGhvc3RuYW1lKCkpYGAuIFRoaXMgb3BlcmF0aW9uIGFzc3VtZXMgdGhhdCB0aGVyZSBpcyBhCi0gICB2YWxpZCBhZGRyZXNzLXRvLWhvc3QgbWFwcGluZyBmb3IgdGhlIGhvc3QsIGFuZCB0aGUgYXNzdW1wdGlvbiBkb2VzIG5vdAotICAgYWx3YXlzIGhvbGQuCi0KICAgIE5vdGU6IDpmdW5jOmBnZXRob3N0bmFtZWAgZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZSBmdWxseSBxdWFsaWZpZWQgZG9tYWluCiAgICBuYW1lOyB1c2UgOmZ1bmM6YGdldGZxZG5gIGZvciB0aGF0LgogCkBAIC02NTEsOCArNjYzLDggQEAKIAogLi4gZnVuY3Rpb246OiBpbmV0X250b2EocGFja2VkX2lwKQogCi0gICBDb252ZXJ0IGEgMzItYml0IHBhY2tlZCBJUHY0IGFkZHJlc3MgKGEgYnl0ZXMgb2JqZWN0IGZvdXIgY2hhcmFjdGVycyBpbgotICAgbGVuZ3RoKSB0byBpdHMgc3RhbmRhcmQgZG90dGVkLXF1YWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIChmb3IgZXhhbXBsZSwKKyAgIENvbnZlcnQgYSAzMi1iaXQgcGFja2VkIElQdjQgYWRkcmVzcyAoYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGZvdXIKKyAgIGJ5dGVzIGluIGxlbmd0aCkgdG8gaXRzIHN0YW5kYXJkIGRvdHRlZC1xdWFkIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZm9yIGV4YW1wbGUsCiAgICAnMTIzLjQ1LjY3Ljg5JykuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGNvbnZlcnNpbmcgd2l0aCBhIHByb2dyYW0gdGhhdCB1c2VzIHRoZQogICAgc3RhbmRhcmQgQyBsaWJyYXJ5IGFuZCBuZWVkcyBvYmplY3RzIG9mIHR5cGUgOmM6dHlwZTpgc3RydWN0IGluX2FkZHJgLCB3aGljaAogICAgaXMgdGhlIEMgdHlwZSBmb3IgdGhlIDMyLWJpdCBwYWNrZWQgYmluYXJ5IGRhdGEgdGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBhbgpAQCAtNjYzLDYgKzY3NSw5IEBACiAgICBzdXBwb3J0IElQdjYsIGFuZCA6ZnVuYzpgaW5ldF9udG9wYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIGZvciBJUHY0L3Y2IGR1YWwKICAgIHN0YWNrIHN1cHBvcnQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBXcml0YWJsZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBmdW5jdGlvbjo6IGluZXRfcHRvbihhZGRyZXNzX2ZhbWlseSwgaXBfc3RyaW5nKQogCkBAIC02ODUsMTUgKzcwMCwxNiBAQAogCiAuLiBmdW5jdGlvbjo6IGluZXRfbnRvcChhZGRyZXNzX2ZhbWlseSwgcGFja2VkX2lwKQogCi0gICBDb252ZXJ0IGEgcGFja2VkIElQIGFkZHJlc3MgKGEgYnl0ZXMgb2JqZWN0IG9mIHNvbWUgbnVtYmVyIG9mIGNoYXJhY3RlcnMpIHRvIGl0cwotICAgc3RhbmRhcmQsIGZhbWlseS1zcGVjaWZpYyBzdHJpbmcgcmVwcmVzZW50YXRpb24gKGZvciBleGFtcGxlLCBgYCc3LjEwLjAuNSdgYCBvcgotICAgYGAnNWFlZjoyYjo6OCdgYCkuIDpmdW5jOmBpbmV0X250b3BgIGlzIHVzZWZ1bCB3aGVuIGEgbGlicmFyeSBvciBuZXR3b3JrIHByb3RvY29sCi0gICByZXR1cm5zIGFuIG9iamVjdCBvZiB0eXBlIDpjOnR5cGU6YHN0cnVjdCBpbl9hZGRyYCAoc2ltaWxhciB0byA6ZnVuYzpgaW5ldF9udG9hYCkKLSAgIG9yIDpjOnR5cGU6YHN0cnVjdCBpbjZfYWRkcmAuCisgICBDb252ZXJ0IGEgcGFja2VkIElQIGFkZHJlc3MgKGEgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBvZiBzb21lIG51bWJlciBvZgorICAgYnl0ZXMpIHRvIGl0cyBzdGFuZGFyZCwgZmFtaWx5LXNwZWNpZmljIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZm9yCisgICBleGFtcGxlLCBgYCc3LjEwLjAuNSdgYCBvciBgYCc1YWVmOjJiOjo4J2BgKS4KKyAgIDpmdW5jOmBpbmV0X250b3BgIGlzIHVzZWZ1bCB3aGVuIGEgbGlicmFyeSBvciBuZXR3b3JrIHByb3RvY29sIHJldHVybnMgYW4KKyAgIG9iamVjdCBvZiB0eXBlIDpjOnR5cGU6YHN0cnVjdCBpbl9hZGRyYCAoc2ltaWxhciB0byA6ZnVuYzpgaW5ldF9udG9hYCkgb3IKKyAgIDpjOnR5cGU6YHN0cnVjdCBpbjZfYWRkcmAuCiAKICAgIFN1cHBvcnRlZCB2YWx1ZXMgZm9yICphZGRyZXNzX2ZhbWlseSogYXJlIGN1cnJlbnRseSA6Y29uc3Q6YEFGX0lORVRgIGFuZAotICAgOmNvbnN0OmBBRl9JTkVUNmAuIElmIHRoZSBzdHJpbmcgKnBhY2tlZF9pcCogaXMgbm90IHRoZSBjb3JyZWN0IGxlbmd0aCBmb3IgdGhlCi0gICBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHksIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorICAgOmNvbnN0OmBBRl9JTkVUNmAuIElmIHRoZSBieXRlcyBvYmplY3QgKnBhY2tlZF9pcCogaXMgbm90IHRoZSBjb3JyZWN0CisgICBsZW5ndGggZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHksIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgogICAgOmV4YzpgT1NFcnJvcmAgaXMgcmFpc2VkIGZvciBlcnJvcnMgZnJvbSB0aGUgY2FsbCB0byA6ZnVuYzpgaW5ldF9udG9wYC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcyksIFdpbmRvd3MuCkBAIC03MDEsNiArNzE3LDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CiAgICAgICBXaW5kb3dzIHN1cHBvcnQgYWRkZWQKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFdyaXRhYmxlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaXMgbm93IGFjY2VwdGVkLgorCiAKIC4uCiAgICBYWFg6IEFyZSBzZW5kbXNnKCksIHJlY3Ztc2coKSBhbmQgQ01TR18qKCkgYXZhaWxhYmxlIG9uIGFueQpAQCAtODEyLDYgKzgzMSwxMCBAQAogOm1ldGg6YH5zb2NrZXQubWFrZWZpbGVgLCB0aGVzZSBjb3JyZXNwb25kIHRvIFVuaXggc3lzdGVtIGNhbGxzIGFwcGxpY2FibGUKIHRvIHNvY2tldHMuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICBTdXBwb3J0IGZvciB0aGUgOnRlcm06YGNvbnRleHQgbWFuYWdlcmAgcHJvdG9jb2wgd2FzIGFkZGVkLiAgRXhpdGluZyB0aGUKKyAgIGNvbnRleHQgbWFuYWdlciBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgOm1ldGg6YH5zb2NrZXQuY2xvc2VgLgorCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5hY2NlcHQoKQogCkBAIC04MjUsNiArODQ4LDExIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAogICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgSWYgdGhlIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkIGFuZCB0aGUgc2lnbmFsIGhhbmRsZXIgZG9lcyBub3QgcmFpc2UKKyAgICAgIGFuIGV4Y2VwdGlvbiwgdGhlIG1ldGhvZCBub3cgcmV0cmllcyB0aGUgc3lzdGVtIGNhbGwgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICBhbiA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBleGNlcHRpb24gKHNlZSA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKS4KKwogCiAuLiBtZXRob2Q6OiBzb2NrZXQuYmluZChhZGRyZXNzKQogCkBAIC04NTcsNiArODg1LDE5IEBACiAgICBDb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldCBhdCAqYWRkcmVzcyouIChUaGUgZm9ybWF0IG9mICphZGRyZXNzKiBkZXBlbmRzIG9uIHRoZQogICAgYWRkcmVzcyBmYW1pbHkgLS0tIHNlZSBhYm92ZS4pCiAKKyAgIElmIHRoZSBjb25uZWN0aW9uIGlzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLCB0aGUgbWV0aG9kIHdhaXRzIHVudGlsIHRoZQorICAgY29ubmVjdGlvbiBjb21wbGV0ZXMsIG9yIHJhaXNlIGEgOmV4Yzpgc29ja2V0LnRpbWVvdXRgIG9uIHRpbWVvdXQsIGlmIHRoZQorICAgc2lnbmFsIGhhbmRsZXIgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHRoZSBzb2NrZXQgaXMgYmxvY2tpbmcgb3IgaGFzCisgICBhIHRpbWVvdXQuIEZvciBub24tYmxvY2tpbmcgc29ja2V0cywgdGhlIG1ldGhvZCByYWlzZXMgYW4KKyAgIDpleGM6YEludGVycnVwdGVkRXJyb3JgIGV4Y2VwdGlvbiBpZiB0aGUgY29ubmVjdGlvbiBpcyBpbnRlcnJ1cHRlZCBieSBhCisgICBzaWduYWwgKG9yIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSBzaWduYWwgaGFuZGxlcikuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgbWV0aG9kIG5vdyB3YWl0cyB1bnRpbCB0aGUgY29ubmVjdGlvbiBjb21wbGV0ZXMgaW5zdGVhZCBvZiByYWlzaW5nIGFuCisgICAgICA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBleGNlcHRpb24gaWYgdGhlIGNvbm5lY3Rpb24gaXMgaW50ZXJydXB0ZWQgYnkgYQorICAgICAgc2lnbmFsLCB0aGUgc2lnbmFsIGhhbmRsZXIgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHRoZSBzb2NrZXQgaXMKKyAgICAgIGJsb2NraW5nIG9yIGhhcyBhIHRpbWVvdXQgKHNlZSB0aGUgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSkuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LmNvbm5lY3RfZXgoYWRkcmVzcykKIApAQCAtODg5LDE0ICs5MzAsMTMgQEAKIAogLi4gbWV0aG9kOjogc29ja2V0LmZpbGVubygpCiAKLSAgIFJldHVybiB0aGUgc29ja2V0J3MgZmlsZSBkZXNjcmlwdG9yIChhIHNtYWxsIGludGVnZXIpLiAgVGhpcyBpcyB1c2VmdWwgd2l0aAotICAgOmZ1bmM6YHNlbGVjdC5zZWxlY3RgLgorICAgUmV0dXJuIHRoZSBzb2NrZXQncyBmaWxlIGRlc2NyaXB0b3IgKGEgc21hbGwgaW50ZWdlciksIG9yIC0xIG9uIGZhaWx1cmUuIFRoaXMKKyAgIGlzIHVzZWZ1bCB3aXRoIDpmdW5jOmBzZWxlY3Quc2VsZWN0YC4KIAogICAgVW5kZXIgV2luZG93cyB0aGUgc21hbGwgaW50ZWdlciByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBjYW5ub3QgYmUgdXNlZCB3aGVyZSBhCiAgICBmaWxlIGRlc2NyaXB0b3IgY2FuIGJlIHVzZWQgKHN1Y2ggYXMgOmZ1bmM6YG9zLmZkb3BlbmApLiAgVW5peCBkb2VzIG5vdCBoYXZlCiAgICB0aGlzIGxpbWl0YXRpb24uCiAKLQogLi4gbWV0aG9kOjogc29ja2V0LmdldF9pbmhlcml0YWJsZSgpCiAKICAgIEdldCB0aGUgOnJlZjpgaW5oZXJpdGFibGUgZmxhZyA8ZmRfaW5oZXJpdGFuY2U+YCBvZiB0aGUgc29ja2V0J3MgZmlsZQpAQCAtOTQ2LDE4ICs5ODYsMjEgQEAKIAogICAgVGhlIDptZXRoOmBpb2N0bGAgbWV0aG9kIGlzIGEgbGltaXRlZCBpbnRlcmZhY2UgdG8gdGhlIFdTQUlvY3RsIHN5c3RlbQogICAgaW50ZXJmYWNlLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBgV2luMzIgZG9jdW1lbnRhdGlvbgotICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczc0MTYyMSUyOFZTLjg1JTI5LmFzcHg+YF8gZm9yIG1vcmUKKyAgIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzQxNjIxJTI4VlMuODUlMjkuYXNweD5gXyBmb3IgbW9yZQogICAgaW5mb3JtYXRpb24uCiAKICAgIE9uIG90aGVyIHBsYXRmb3JtcywgdGhlIGdlbmVyaWMgOmZ1bmM6YGZjbnRsLmZjbnRsYCBhbmQgOmZ1bmM6YGZjbnRsLmlvY3RsYAogICAgZnVuY3Rpb25zIG1heSBiZSB1c2VkOyB0aGV5IGFjY2VwdCBhIHNvY2tldCBvYmplY3QgYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuCiAKLS4uIG1ldGhvZDo6IHNvY2tldC5saXN0ZW4oYmFja2xvZykKKy4uIG1ldGhvZDo6IHNvY2tldC5saXN0ZW4oW2JhY2tsb2ddKQogCi0gICBMaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIG1hZGUgdG8gdGhlIHNvY2tldC4gIFRoZSAqYmFja2xvZyogYXJndW1lbnQgc3BlY2lmaWVzIHRoZQotICAgbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbm5lY3Rpb25zIGFuZCBzaG91bGQgYmUgYXQgbGVhc3QgMDsgdGhlIG1heGltdW0gdmFsdWUKLSAgIGlzIHN5c3RlbS1kZXBlbmRlbnQgKHVzdWFsbHkgNSksIHRoZSBtaW5pbXVtIHZhbHVlIGlzIGZvcmNlZCB0byAwLgorICAgRW5hYmxlIGEgc2VydmVyIHRvIGFjY2VwdCBjb25uZWN0aW9ucy4gIElmICpiYWNrbG9nKiBpcyBzcGVjaWZpZWQsIGl0IG11c3QKKyAgIGJlIGF0IGxlYXN0IDAgKGlmIGl0IGlzIGxvd2VyLCBpdCBpcyBzZXQgdG8gMCk7IGl0IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mCisgICB1bmFjY2VwdGVkIGNvbm5lY3Rpb25zIHRoYXQgdGhlIHN5c3RlbSB3aWxsIGFsbG93IGJlZm9yZSByZWZ1c2luZyBuZXcKKyAgIGNvbm5lY3Rpb25zLiBJZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgcmVhc29uYWJsZSB2YWx1ZSBpcyBjaG9zZW4uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgKmJhY2tsb2cqIHBhcmFtZXRlciBpcyBub3cgb3B0aW9uYWwuCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5tYWtlZmlsZShtb2RlPSdyJywgYnVmZmVyaW5nPU5vbmUsICosIGVuY29kaW5nPU5vbmUsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKQpAQCAtOTY2LDcgKzEwMDksOCBAQAogCiAgICBSZXR1cm4gYSA6dGVybTpgZmlsZSBvYmplY3RgIGFzc29jaWF0ZWQgd2l0aCB0aGUgc29ja2V0LiAgVGhlIGV4YWN0IHJldHVybmVkCiAgICB0eXBlIGRlcGVuZHMgb24gdGhlIGFyZ3VtZW50cyBnaXZlbiB0byA6bWV0aDpgbWFrZWZpbGVgLiAgVGhlc2UgYXJndW1lbnRzIGFyZQotICAgaW50ZXJwcmV0ZWQgdGhlIHNhbWUgd2F5IGFzIGJ5IHRoZSBidWlsdC1pbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24uCisgICBpbnRlcnByZXRlZCB0aGUgc2FtZSB3YXkgYXMgYnkgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbiwgZXhjZXB0CisgICB0aGUgb25seSBzdXBwb3J0ZWQgKm1vZGUqIHZhbHVlcyBhcmUgYGAncidgYCAoZGVmYXVsdCksIGBgJ3cnYGAgYW5kIGBgJ2InYGAuCiAKICAgIFRoZSBzb2NrZXQgbXVzdCBiZSBpbiBibG9ja2luZyBtb2RlOyBpdCBjYW4gaGF2ZSBhIHRpbWVvdXQsIGJ1dCB0aGUgZmlsZQogICAgb2JqZWN0J3MgaW50ZXJuYWwgYnVmZmVyIG1heSBlbmQgdXAgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIGEgdGltZW91dApAQCAtOTk1LDYgKzEwMzksMTEgQEAKICAgICAgIEZvciBiZXN0IG1hdGNoIHdpdGggaGFyZHdhcmUgYW5kIG5ldHdvcmsgcmVhbGl0aWVzLCB0aGUgdmFsdWUgb2YgICpidWZzaXplKgogICAgICAgc2hvdWxkIGJlIGEgcmVsYXRpdmVseSBzbWFsbCBwb3dlciBvZiAyLCBmb3IgZXhhbXBsZSwgNDA5Ni4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIElmIHRoZSBzeXN0ZW0gY2FsbCBpcyBpbnRlcnJ1cHRlZCBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIGRvZXMgbm90IHJhaXNlCisgICAgICBhbiBleGNlcHRpb24sIHRoZSBtZXRob2Qgbm93IHJldHJpZXMgdGhlIHN5c3RlbSBjYWxsIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgYW4gOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAgZXhjZXB0aW9uIChzZWUgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSkuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LnJlY3Zmcm9tKGJ1ZnNpemVbLCBmbGFnc10pCiAKQEAgLTEwMDQsNiArMTA1MywxMSBAQAogICAgOm1hbnBhZ2U6YHJlY3YoMilgIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmZsYWdzKjsgaXQgZGVmYXVsdHMKICAgIHRvIHplcm8uIChUaGUgZm9ybWF0IG9mICphZGRyZXNzKiBkZXBlbmRzIG9uIHRoZSBhZGRyZXNzIGZhbWlseSAtLS0gc2VlIGFib3ZlLikKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIElmIHRoZSBzeXN0ZW0gY2FsbCBpcyBpbnRlcnJ1cHRlZCBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIGRvZXMgbm90IHJhaXNlCisgICAgICBhbiBleGNlcHRpb24sIHRoZSBtZXRob2Qgbm93IHJldHJpZXMgdGhlIHN5c3RlbSBjYWxsIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgYW4gOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAgZXhjZXB0aW9uIChzZWUgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSkuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LnJlY3Ztc2coYnVmc2l6ZVssIGFuY2J1ZnNpemVbLCBmbGFnc11dKQogCkBAIC0xMDcwLDYgKzExMjQsMTEgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBJZiB0aGUgc3lzdGVtIGNhbGwgaXMgaW50ZXJydXB0ZWQgYW5kIHRoZSBzaWduYWwgaGFuZGxlciBkb2VzIG5vdCByYWlzZQorICAgICAgYW4gZXhjZXB0aW9uLCB0aGUgbWV0aG9kIG5vdyByZXRyaWVzIHRoZSBzeXN0ZW0gY2FsbCBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgICAgIGFuIDpleGM6YEludGVycnVwdGVkRXJyb3JgIGV4Y2VwdGlvbiAoc2VlIDpwZXA6YDQ3NWAgZm9yIHRoZSByYXRpb25hbGUpLgorCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5yZWN2bXNnX2ludG8oYnVmZmVyc1ssIGFuY2J1ZnNpemVbLCBmbGFnc11dKQogCkBAIC0xMTM2LDYgKzExOTUsMTEgQEAKICAgIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGF0dGVtcHQgZGVsaXZlcnkgb2YgdGhlIHJlbWFpbmluZyBkYXRhLiBGb3IgZnVydGhlcgogICAgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYywgY29uc3VsdCB0aGUgOnJlZjpgc29ja2V0LWhvd3RvYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIElmIHRoZSBzeXN0ZW0gY2FsbCBpcyBpbnRlcnJ1cHRlZCBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIGRvZXMgbm90IHJhaXNlCisgICAgICBhbiBleGNlcHRpb24sIHRoZSBtZXRob2Qgbm93IHJldHJpZXMgdGhlIHN5c3RlbSBjYWxsIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgYW4gOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAgZXhjZXB0aW9uIChzZWUgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSkuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LnNlbmRhbGwoYnl0ZXNbLCBmbGFnc10pCiAKQEAgLTExNDYsNiArMTIxMCwxNSBAQAogICAgc3VjY2Vzcy4gIE9uIGVycm9yLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGRldGVybWluZSBob3cKICAgIG11Y2ggZGF0YSwgaWYgYW55LCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgc29ja2V0IHRpbWVvdXQgaXMgbm8gbW9yZSByZXNldCBlYWNoIHRpbWUgZGF0YSBpcyBzZW50IHN1Y2Nlc3NmdWxseS4KKyAgICAgIFRoZSBzb2NrZXQgdGltZW91dCBpcyBub3cgdGhlIG1heGltdW0gdG90YWwgZHVyYXRpb24gdG8gc2VuZCBhbGwgZGF0YS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIElmIHRoZSBzeXN0ZW0gY2FsbCBpcyBpbnRlcnJ1cHRlZCBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIGRvZXMgbm90IHJhaXNlCisgICAgICBhbiBleGNlcHRpb24sIHRoZSBtZXRob2Qgbm93IHJldHJpZXMgdGhlIHN5c3RlbSBjYWxsIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgYW4gOmV4YzpgSW50ZXJydXB0ZWRFcnJvcmAgZXhjZXB0aW9uIChzZWUgOnBlcDpgNDc1YCBmb3IgdGhlIHJhdGlvbmFsZSkuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LnNlbmR0byhieXRlcywgYWRkcmVzcykKICAgICAgICAgICAgIHNvY2tldC5zZW5kdG8oYnl0ZXMsIGZsYWdzLCBhZGRyZXNzKQpAQCAtMTE1Niw2ICsxMjI5LDExIEBACiAgICBieXRlcyBzZW50LiAoVGhlIGZvcm1hdCBvZiAqYWRkcmVzcyogZGVwZW5kcyBvbiB0aGUgYWRkcmVzcyBmYW1pbHkgLS0tIHNlZQogICAgYWJvdmUuKQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgSWYgdGhlIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkIGFuZCB0aGUgc2lnbmFsIGhhbmRsZXIgZG9lcyBub3QgcmFpc2UKKyAgICAgIGFuIGV4Y2VwdGlvbiwgdGhlIG1ldGhvZCBub3cgcmV0cmllcyB0aGUgc3lzdGVtIGNhbGwgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICBhbiA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBleGNlcHRpb24gKHNlZSA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKS4KKwogCiAuLiBtZXRob2Q6OiBzb2NrZXQuc2VuZG1zZyhidWZmZXJzWywgYW5jZGF0YVssIGZsYWdzWywgYWRkcmVzc11dXSkKIApAQCAtMTE5Miw2ICsxMjcwLDI2IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgSWYgdGhlIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkIGFuZCB0aGUgc2lnbmFsIGhhbmRsZXIgZG9lcyBub3QgcmFpc2UKKyAgICAgIGFuIGV4Y2VwdGlvbiwgdGhlIG1ldGhvZCBub3cgcmV0cmllcyB0aGUgc3lzdGVtIGNhbGwgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICBhbiA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBleGNlcHRpb24gKHNlZSA6cGVwOmA0NzVgIGZvciB0aGUgcmF0aW9uYWxlKS4KKworLi4gbWV0aG9kOjogc29ja2V0LnNlbmRmaWxlKGZpbGUsIG9mZnNldD0wLCBjb3VudD1Ob25lKQorCisgICBTZW5kIGEgZmlsZSB1bnRpbCBFT0YgaXMgcmVhY2hlZCBieSB1c2luZyBoaWdoLXBlcmZvcm1hbmNlCisgICA6bW9kOmBvcy5zZW5kZmlsZWAgYW5kIHJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIHdlcmUgc2VudC4KKyAgICpmaWxlKiBtdXN0IGJlIGEgcmVndWxhciBmaWxlIG9iamVjdCBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuIElmCisgICA6bW9kOmBvcy5zZW5kZmlsZWAgaXMgbm90IGF2YWlsYWJsZSAoZS5nLiBXaW5kb3dzKSBvciAqZmlsZSogaXMgbm90IGEKKyAgIHJlZ3VsYXIgZmlsZSA6bWV0aDpgc2VuZGAgd2lsbCBiZSB1c2VkIGluc3RlYWQuICpvZmZzZXQqIHRlbGxzIGZyb20gd2hlcmUgdG8KKyAgIHN0YXJ0IHJlYWRpbmcgdGhlIGZpbGUuIElmIHNwZWNpZmllZCwgKmNvdW50KiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzCisgICB0byB0cmFuc21pdCBhcyBvcHBvc2VkIHRvIHNlbmRpbmcgdGhlIGZpbGUgdW50aWwgRU9GIGlzIHJlYWNoZWQuIEZpbGUKKyAgIHBvc2l0aW9uIGlzIHVwZGF0ZWQgb24gcmV0dXJuIG9yIGFsc28gaW4gY2FzZSBvZiBlcnJvciBpbiB3aGljaCBjYXNlCisgICA6bWV0aDpgZmlsZS50ZWxsKCkgPGlvLklPQmFzZS50ZWxsPmAgY2FuIGJlIHVzZWQgdG8gZmlndXJlIG91dCB0aGUgbnVtYmVyIG9mCisgICBieXRlcyB3aGljaCB3ZXJlIHNlbnQuIFRoZSBzb2NrZXQgbXVzdCBiZSBvZiA6Y29uc3Q6YFNPQ0tfU1RSRUFNYCB0eXBlLiBOb24tCisgICBibG9ja2luZyBzb2NrZXRzIGFyZSBub3Qgc3VwcG9ydGVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKIAogLi4gbWV0aG9kOjogc29ja2V0LnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSkKIApAQCAtMTIzMSwxMSArMTMyOSwxNSBAQAogCiAgICBTZXQgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBzb2NrZXQgb3B0aW9uIChzZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UKICAgIDptYW5wYWdlOmBzZXRzb2Nrb3B0KDIpYCkuICBUaGUgbmVlZGVkIHN5bWJvbGljIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUKLSAgIDptb2Q6YHNvY2tldGAgbW9kdWxlICg6Y29uc3Q6YFNPX1wqYCBldGMuKS4gIFRoZSB2YWx1ZSBjYW4gYmUgYW4gaW50ZWdlciBvciBhCi0gICBieXRlcyBvYmplY3QgcmVwcmVzZW50aW5nIGEgYnVmZmVyLiAgSW4gdGhlIGxhdHRlciBjYXNlIGl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8KKyAgIDptb2Q6YHNvY2tldGAgbW9kdWxlICg6Y29uc3Q6YFNPX1wqYCBldGMuKS4gIFRoZSB2YWx1ZSBjYW4gYmUgYW4gaW50ZWdlciBvcgorICAgYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIHJlcHJlc2VudGluZyBhIGJ1ZmZlci4gIEluIHRoZSBsYXR0ZXIgY2FzZSBpdCBpcworICAgdXAgdG8gdGhlIGNhbGxlciB0bwogICAgZW5zdXJlIHRoYXQgdGhlIGJ5dGVzdHJpbmcgY29udGFpbnMgdGhlIHByb3BlciBiaXRzIChzZWUgdGhlIG9wdGlvbmFsIGJ1aWx0LWluCiAgICBtb2R1bGUgOm1vZDpgc3RydWN0YCBmb3IgYSB3YXkgdG8gZW5jb2RlIEMgc3RydWN0dXJlcyBhcyBieXRlc3RyaW5ncykuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBXcml0YWJsZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBzb2NrZXQuc2h1dGRvd24oaG93KQogCkBAIC0xMzU4LDE2ICsxNDYwLDE2IEBACiAKICAgIEhPU1QgPSAnJyAgICAgICAgICAgICAgICAgIyBTeW1ib2xpYyBuYW1lIG1lYW5pbmcgYWxsIGF2YWlsYWJsZSBpbnRlcmZhY2VzCiAgICBQT1JUID0gNTAwMDcgICAgICAgICAgICAgICMgQXJiaXRyYXJ5IG5vbi1wcml2aWxlZ2VkIHBvcnQKLSAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICBzLmJpbmQoKEhPU1QsIFBPUlQpKQotICAgcy5saXN0ZW4oMSkKLSAgIGNvbm4sIGFkZHIgPSBzLmFjY2VwdCgpCi0gICBwcmludCgnQ29ubmVjdGVkIGJ5JywgYWRkcikKLSAgIHdoaWxlIFRydWU6Ci0gICAgICAgZGF0YSA9IGNvbm4ucmVjdigxMDI0KQotICAgICAgIGlmIG5vdCBkYXRhOiBicmVhawotICAgICAgIGNvbm4uc2VuZGFsbChkYXRhKQotICAgY29ubi5jbG9zZSgpCisgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICBzLmJpbmQoKEhPU1QsIFBPUlQpKQorICAgICAgIHMubGlzdGVuKDEpCisgICAgICAgY29ubiwgYWRkciA9IHMuYWNjZXB0KCkKKyAgICAgICB3aXRoIGNvbm46CisgICAgICAgICAgIHByaW50KCdDb25uZWN0ZWQgYnknLCBhZGRyKQorICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgZGF0YSA9IGNvbm4ucmVjdigxMDI0KQorICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6IGJyZWFrCisgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoZGF0YSkKIAogOjoKIApAQCAtMTM3NiwxMSArMTQ3OCwxMCBAQAogCiAgICBIT1NUID0gJ2RhcmluZy5jd2kubmwnICAgICMgVGhlIHJlbW90ZSBob3N0CiAgICBQT1JUID0gNTAwMDcgICAgICAgICAgICAgICMgVGhlIHNhbWUgcG9ydCBhcyB1c2VkIGJ5IHRoZSBzZXJ2ZXIKLSAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICBzLmNvbm5lY3QoKEhPU1QsIFBPUlQpKQotICAgcy5zZW5kYWxsKGInSGVsbG8sIHdvcmxkJykKLSAgIGRhdGEgPSBzLnJlY3YoMTAyNCkKLSAgIHMuY2xvc2UoKQorICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgcy5jb25uZWN0KChIT1NULCBQT1JUKSkKKyAgICAgICBzLnNlbmRhbGwoYidIZWxsbywgd29ybGQnKQorICAgICAgIGRhdGEgPSBzLnJlY3YoMTAyNCkKICAgIHByaW50KCdSZWNlaXZlZCcsIHJlcHIoZGF0YSkpCiAKIFRoZSBuZXh0IHR3byBleGFtcGxlcyBhcmUgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSB0d28sIGJ1dCBzdXBwb3J0IGJvdGggSVB2NCBhbmQKQEAgLTE0MTcsMTIgKzE1MTgsMTIgQEAKICAgICAgICBwcmludCgnY291bGQgbm90IG9wZW4gc29ja2V0JykKICAgICAgICBzeXMuZXhpdCgxKQogICAgY29ubiwgYWRkciA9IHMuYWNjZXB0KCkKLSAgIHByaW50KCdDb25uZWN0ZWQgYnknLCBhZGRyKQotICAgd2hpbGUgVHJ1ZToKLSAgICAgICBkYXRhID0gY29ubi5yZWN2KDEwMjQpCi0gICAgICAgaWYgbm90IGRhdGE6IGJyZWFrCi0gICAgICAgY29ubi5zZW5kKGRhdGEpCi0gICBjb25uLmNsb3NlKCkKKyAgIHdpdGggY29ubjoKKyAgICAgICBwcmludCgnQ29ubmVjdGVkIGJ5JywgYWRkcikKKyAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEwMjQpCisgICAgICAgICAgIGlmIG5vdCBkYXRhOiBicmVhaworICAgICAgICAgICBjb25uLnNlbmQoZGF0YSkKIAogOjoKIApAQCAtMTQ1MCw5ICsxNTUxLDkgQEAKICAgIGlmIHMgaXMgTm9uZToKICAgICAgICBwcmludCgnY291bGQgbm90IG9wZW4gc29ja2V0JykKICAgICAgICBzeXMuZXhpdCgxKQotICAgcy5zZW5kYWxsKGInSGVsbG8sIHdvcmxkJykKLSAgIGRhdGEgPSBzLnJlY3YoMTAyNCkKLSAgIHMuY2xvc2UoKQorICAgd2l0aCBzOgorICAgICAgIHMuc2VuZGFsbChiJ0hlbGxvLCB3b3JsZCcpCisgICAgICAgZGF0YSA9IHMucmVjdigxMDI0KQogICAgcHJpbnQoJ1JlY2VpdmVkJywgcmVwcihkYXRhKSkKIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zb2NrZXRzZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdAppbmRleCAzZTQ5YWY2Li4wODdmNGUwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zb2NrZXRzZXJ2ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QKQEAgLTEwLDE2ICsxMCwzNCBAQAogCiBUaGUgOm1vZDpgc29ja2V0c2VydmVyYCBtb2R1bGUgc2ltcGxpZmllcyB0aGUgdGFzayBvZiB3cml0aW5nIG5ldHdvcmsgc2VydmVycy4KIAotVGhlcmUgYXJlIGZvdXIgYmFzaWMgc2VydmVyIGNsYXNzZXM6IDpjbGFzczpgVENQU2VydmVyYCB1c2VzIHRoZSBJbnRlcm5ldCBUQ1AKLXByb3RvY29sLCB3aGljaCBwcm92aWRlcyBmb3IgY29udGludW91cyBzdHJlYW1zIG9mIGRhdGEgYmV0d2VlbiB0aGUgY2xpZW50IGFuZAotc2VydmVyLiAgOmNsYXNzOmBVRFBTZXJ2ZXJgIHVzZXMgZGF0YWdyYW1zLCB3aGljaCBhcmUgZGlzY3JldGUgcGFja2V0cyBvZgotaW5mb3JtYXRpb24gdGhhdCBtYXkgYXJyaXZlIG91dCBvZiBvcmRlciBvciBiZSBsb3N0IHdoaWxlIGluIHRyYW5zaXQuICBUaGUgbW9yZQotaW5mcmVxdWVudGx5IHVzZWQgOmNsYXNzOmBVbml4U3RyZWFtU2VydmVyYCBhbmQgOmNsYXNzOmBVbml4RGF0YWdyYW1TZXJ2ZXJgCi1jbGFzc2VzIGFyZSBzaW1pbGFyLCBidXQgdXNlIFVuaXggZG9tYWluIHNvY2tldHM7IHRoZXkncmUgbm90IGF2YWlsYWJsZSBvbgotbm9uLVVuaXggcGxhdGZvcm1zLiAgRm9yIG1vcmUgZGV0YWlscyBvbiBuZXR3b3JrIHByb2dyYW1taW5nLCBjb25zdWx0IGEgYm9vawotc3VjaCBhcwotVy4gUmljaGFyZCBTdGV2ZW4ncyBVTklYIE5ldHdvcmsgUHJvZ3JhbW1pbmcgb3IgUmFscGggRGF2aXMncyBXaW4zMiBOZXR3b3JrCi1Qcm9ncmFtbWluZy4KK1RoZXJlIGFyZSBmb3VyIGJhc2ljIGNvbmNyZXRlIHNlcnZlciBjbGFzc2VzOgorCisKKy4uIGNsYXNzOjogVENQU2VydmVyKHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzLCBiaW5kX2FuZF9hY3RpdmF0ZT1UcnVlKQorCisgICBUaGlzIHVzZXMgdGhlIEludGVybmV0IFRDUCBwcm90b2NvbCwgd2hpY2ggcHJvdmlkZXMgZm9yCisgICBjb250aW51b3VzIHN0cmVhbXMgb2YgZGF0YSBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIHNlcnZlci4KKyAgIElmICpiaW5kX2FuZF9hY3RpdmF0ZSogaXMgdHJ1ZSwgdGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgYXR0ZW1wdHMgdG8KKyAgIGludm9rZSA6bWV0aDpgfkJhc2VTZXJ2ZXIuc2VydmVyX2JpbmRgIGFuZAorICAgOm1ldGg6YH5CYXNlU2VydmVyLnNlcnZlcl9hY3RpdmF0ZWAuICBUaGUgb3RoZXIgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvCisgICB0aGUgOmNsYXNzOmBCYXNlU2VydmVyYCBiYXNlIGNsYXNzLgorCisKKy4uIGNsYXNzOjogVURQU2VydmVyKHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzLCBiaW5kX2FuZF9hY3RpdmF0ZT1UcnVlKQorCisgICBUaGlzIHVzZXMgZGF0YWdyYW1zLCB3aGljaCBhcmUgZGlzY3JldGUgcGFja2V0cyBvZiBpbmZvcm1hdGlvbiB0aGF0IG1heQorICAgYXJyaXZlIG91dCBvZiBvcmRlciBvciBiZSBsb3N0IHdoaWxlIGluIHRyYW5zaXQuICBUaGUgcGFyYW1ldGVycyBhcmUKKyAgIHRoZSBzYW1lIGFzIGZvciA6Y2xhc3M6YFRDUFNlcnZlcmAuCisKKworLi4gY2xhc3M6OiBVbml4U3RyZWFtU2VydmVyKHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzLCBiaW5kX2FuZF9hY3RpdmF0ZT1UcnVlKQorICAgICAgICAgICBVbml4RGF0YWdyYW1TZXJ2ZXIoc2VydmVyX2FkZHJlc3MsIFJlcXVlc3RIYW5kbGVyQ2xhc3MsIGJpbmRfYW5kX2FjdGl2YXRlPVRydWUpCisKKyAgIFRoZXNlIG1vcmUgaW5mcmVxdWVudGx5IHVzZWQgY2xhc3NlcyBhcmUgc2ltaWxhciB0byB0aGUgVENQIGFuZAorICAgVURQIGNsYXNzZXMsIGJ1dCB1c2UgVW5peCBkb21haW4gc29ja2V0czsgdGhleSdyZSBub3QgYXZhaWxhYmxlIG9uCisgICBub24tVW5peCBwbGF0Zm9ybXMuICBUaGUgcGFyYW1ldGVycyBhcmUgdGhlIHNhbWUgYXMgZm9yCisgICA6Y2xhc3M6YFRDUFNlcnZlcmAuCisKIAogVGhlc2UgZm91ciBjbGFzc2VzIHByb2Nlc3MgcmVxdWVzdHMgOmRmbjpgc3luY2hyb25vdXNseWA7IGVhY2ggcmVxdWVzdCBtdXN0IGJlCiBjb21wbGV0ZWQgYmVmb3JlIHRoZSBuZXh0IHJlcXVlc3QgY2FuIGJlIHN0YXJ0ZWQuICBUaGlzIGlzbid0IHN1aXRhYmxlIGlmIGVhY2gKQEAgLTMxLDEwICs0OSwxMiBAQAogCiBDcmVhdGluZyBhIHNlcnZlciByZXF1aXJlcyBzZXZlcmFsIHN0ZXBzLiAgRmlyc3QsIHlvdSBtdXN0IGNyZWF0ZSBhIHJlcXVlc3QKIGhhbmRsZXIgY2xhc3MgYnkgc3ViY2xhc3NpbmcgdGhlIDpjbGFzczpgQmFzZVJlcXVlc3RIYW5kbGVyYCBjbGFzcyBhbmQKLW92ZXJyaWRpbmcgaXRzIDptZXRoOmBoYW5kbGVgIG1ldGhvZDsgdGhpcyBtZXRob2Qgd2lsbCBwcm9jZXNzIGluY29taW5nCitvdmVycmlkaW5nIGl0cyA6bWV0aDpgfkJhc2VSZXF1ZXN0SGFuZGxlci5oYW5kbGVgIG1ldGhvZDsKK3RoaXMgbWV0aG9kIHdpbGwgcHJvY2VzcyBpbmNvbWluZwogcmVxdWVzdHMuICBTZWNvbmQsIHlvdSBtdXN0IGluc3RhbnRpYXRlIG9uZSBvZiB0aGUgc2VydmVyIGNsYXNzZXMsIHBhc3NpbmcgaXQKIHRoZSBzZXJ2ZXIncyBhZGRyZXNzIGFuZCB0aGUgcmVxdWVzdCBoYW5kbGVyIGNsYXNzLiAgVGhlbiBjYWxsIHRoZQotOm1ldGg6YGhhbmRsZV9yZXF1ZXN0YCBvciA6bWV0aDpgc2VydmVfZm9yZXZlcmAgbWV0aG9kIG9mIHRoZSBzZXJ2ZXIgb2JqZWN0IHRvCis6bWV0aDpgfkJhc2VTZXJ2ZXIuaGFuZGxlX3JlcXVlc3RgIG9yCis6bWV0aDpgfkJhc2VTZXJ2ZXIuc2VydmVfZm9yZXZlcmAgbWV0aG9kIG9mIHRoZSBzZXJ2ZXIgb2JqZWN0IHRvCiBwcm9jZXNzIG9uZSBvciBtYW55IHJlcXVlc3RzLiAgRmluYWxseSwgY2FsbCA6bWV0aDpgfkJhc2VTZXJ2ZXIuc2VydmVyX2Nsb3NlYAogdG8gY2xvc2UgdGhlIHNvY2tldC4KIApAQCAtNzYsMTggKzk2LDMzIEBACiBzdHJlYW0gc2VydmVyIGlzIHRoZSBhZGRyZXNzIGZhbWlseSwgd2hpY2ggaXMgc2ltcGx5IHJlcGVhdGVkIGluIGJvdGggVW5peAogc2VydmVyIGNsYXNzZXMuCiAKLUZvcmtpbmcgYW5kIHRocmVhZGluZyB2ZXJzaW9ucyBvZiBlYWNoIHR5cGUgb2Ygc2VydmVyIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZQotOmNsYXNzOmBGb3JraW5nTWl4SW5gIGFuZCA6Y2xhc3M6YFRocmVhZGluZ01peEluYCBtaXgtaW4gY2xhc3Nlcy4gIEZvciBpbnN0YW5jZSwKLWEgdGhyZWFkaW5nIFVEUCBzZXJ2ZXIgY2xhc3MgaXMgY3JlYXRlZCBhcyBmb2xsb3dzOjoKIAotICAgY2xhc3MgVGhyZWFkaW5nVURQU2VydmVyKFRocmVhZGluZ01peEluLCBVRFBTZXJ2ZXIpOiBwYXNzCisuLiBjbGFzczo6IEZvcmtpbmdNaXhJbgorICAgICAgICAgICBUaHJlYWRpbmdNaXhJbgogCi1UaGUgbWl4LWluIGNsYXNzIG11c3QgY29tZSBmaXJzdCwgc2luY2UgaXQgb3ZlcnJpZGVzIGEgbWV0aG9kIGRlZmluZWQgaW4KLTpjbGFzczpgVURQU2VydmVyYC4gIFNldHRpbmcgdGhlIHZhcmlvdXMgYXR0cmlidXRlcyBhbHNvIGNoYW5nZSB0aGUKLWJlaGF2aW9yIG9mIHRoZSB1bmRlcmx5aW5nIHNlcnZlciBtZWNoYW5pc20uCisgICBGb3JraW5nIGFuZCB0aHJlYWRpbmcgdmVyc2lvbnMgb2YgZWFjaCB0eXBlIG9mIHNlcnZlciBjYW4gYmUgY3JlYXRlZAorICAgdXNpbmcgdGhlc2UgbWl4LWluIGNsYXNzZXMuICBGb3IgaW5zdGFuY2UsIDpjbGFzczpgVGhyZWFkaW5nVURQU2VydmVyYAorICAgaXMgY3JlYXRlZCBhcyBmb2xsb3dzOjoKKworICAgICAgY2xhc3MgVGhyZWFkaW5nVURQU2VydmVyKFRocmVhZGluZ01peEluLCBVRFBTZXJ2ZXIpOgorICAgICAgICAgIHBhc3MKKworICAgVGhlIG1peC1pbiBjbGFzcyBjb21lcyBmaXJzdCwgc2luY2UgaXQgb3ZlcnJpZGVzIGEgbWV0aG9kIGRlZmluZWQgaW4KKyAgIDpjbGFzczpgVURQU2VydmVyYC4gIFNldHRpbmcgdGhlIHZhcmlvdXMgYXR0cmlidXRlcyBhbHNvIGNoYW5nZXMgdGhlCisgICBiZWhhdmlvciBvZiB0aGUgdW5kZXJseWluZyBzZXJ2ZXIgbWVjaGFuaXNtLgorCisKKy4uIGNsYXNzOjogRm9ya2luZ1RDUFNlcnZlcgorICAgICAgICAgICBGb3JraW5nVURQU2VydmVyCisgICAgICAgICAgIFRocmVhZGluZ1RDUFNlcnZlcgorICAgICAgICAgICBUaHJlYWRpbmdVRFBTZXJ2ZXIKKworICAgVGhlc2UgY2xhc3NlcyBhcmUgcHJlLWRlZmluZWQgdXNpbmcgdGhlIG1peC1pbiBjbGFzc2VzLgorCiAKIFRvIGltcGxlbWVudCBhIHNlcnZpY2UsIHlvdSBtdXN0IGRlcml2ZSBhIGNsYXNzIGZyb20gOmNsYXNzOmBCYXNlUmVxdWVzdEhhbmRsZXJgCi1hbmQgcmVkZWZpbmUgaXRzIDptZXRoOmBoYW5kbGVgIG1ldGhvZC4gIFlvdSBjYW4gdGhlbiBydW4gdmFyaW91cyB2ZXJzaW9ucyBvZgorYW5kIHJlZGVmaW5lIGl0cyA6bWV0aDpgfkJhc2VSZXF1ZXN0SGFuZGxlci5oYW5kbGVgIG1ldGhvZC4KK1lvdSBjYW4gdGhlbiBydW4gdmFyaW91cyB2ZXJzaW9ucyBvZgogdGhlIHNlcnZpY2UgYnkgY29tYmluaW5nIG9uZSBvZiB0aGUgc2VydmVyIGNsYXNzZXMgd2l0aCB5b3VyIHJlcXVlc3QgaGFuZGxlcgogY2xhc3MuICBUaGUgcmVxdWVzdCBoYW5kbGVyIGNsYXNzIG11c3QgYmUgZGlmZmVyZW50IGZvciBkYXRhZ3JhbSBvciBzdHJlYW0KIHNlcnZpY2VzLiAgVGhpcyBjYW4gYmUgaGlkZGVuIGJ5IHVzaW5nIHRoZSBoYW5kbGVyIHN1YmNsYXNzZXMKQEAgLTEwOSwxMiArMTQ0LDEyIEBACiBJbiBzb21lIGNhc2VzLCBpdCBtYXkgYmUgYXBwcm9wcmlhdGUgdG8gcHJvY2VzcyBwYXJ0IG9mIGEgcmVxdWVzdCBzeW5jaHJvbm91c2x5LAogYnV0IHRvIGZpbmlzaCBwcm9jZXNzaW5nIGluIGEgZm9ya2VkIGNoaWxkIGRlcGVuZGluZyBvbiB0aGUgcmVxdWVzdCBkYXRhLiAgVGhpcwogY2FuIGJlIGltcGxlbWVudGVkIGJ5IHVzaW5nIGEgc3luY2hyb25vdXMgc2VydmVyIGFuZCBkb2luZyBhbiBleHBsaWNpdCBmb3JrIGluCi10aGUgcmVxdWVzdCBoYW5kbGVyIGNsYXNzIDptZXRoOmBoYW5kbGVgIG1ldGhvZC4KK3RoZSByZXF1ZXN0IGhhbmRsZXIgY2xhc3MgOm1ldGg6YH5CYXNlUmVxdWVzdEhhbmRsZXIuaGFuZGxlYCBtZXRob2QuCiAKIEFub3RoZXIgYXBwcm9hY2ggdG8gaGFuZGxpbmcgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHJlcXVlc3RzIGluIGFuIGVudmlyb25tZW50CiB0aGF0IHN1cHBvcnRzIG5laXRoZXIgdGhyZWFkcyBub3IgOmZ1bmM6YH5vcy5mb3JrYCAob3Igd2hlcmUgdGhlc2UgYXJlIHRvbwogZXhwZW5zaXZlIG9yIGluYXBwcm9wcmlhdGUgZm9yIHRoZSBzZXJ2aWNlKSBpcyB0byBtYWludGFpbiBhbiBleHBsaWNpdCB0YWJsZSBvZgotcGFydGlhbGx5IGZpbmlzaGVkIHJlcXVlc3RzIGFuZCB0byB1c2UgOmZ1bmM6YH5zZWxlY3Quc2VsZWN0YCB0byBkZWNpZGUgd2hpY2gKK3BhcnRpYWxseSBmaW5pc2hlZCByZXF1ZXN0cyBhbmQgdG8gdXNlIDptb2Q6YHNlbGVjdG9yc2AgdG8gZGVjaWRlIHdoaWNoCiByZXF1ZXN0IHRvIHdvcmsgb24gbmV4dCAob3Igd2hldGhlciB0byBoYW5kbGUgYSBuZXcgaW5jb21pbmcgcmVxdWVzdCkuICBUaGlzIGlzCiBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBzdHJlYW0gc2VydmljZXMgd2hlcmUgZWFjaCBjbGllbnQgY2FuIHBvdGVudGlhbGx5IGJlCiBjb25uZWN0ZWQgZm9yIGEgbG9uZyB0aW1lIChpZiB0aHJlYWRzIG9yIHN1YnByb2Nlc3NlcyBjYW5ub3QgYmUgdXNlZCkuICBTZWUKQEAgLTEyNywyMjcgKzE2MiwyNDAgQEAKIFNlcnZlciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLQogCi0uLiBjbGFzczo6IEJhc2VTZXJ2ZXIKKy4uIGNsYXNzOjogQmFzZVNlcnZlcihzZXJ2ZXJfYWRkcmVzcywgUmVxdWVzdEhhbmRsZXJDbGFzcykKIAogICAgVGhpcyBpcyB0aGUgc3VwZXJjbGFzcyBvZiBhbGwgU2VydmVyIG9iamVjdHMgaW4gdGhlIG1vZHVsZS4gIEl0IGRlZmluZXMgdGhlCiAgICBpbnRlcmZhY2UsIGdpdmVuIGJlbG93LCBidXQgZG9lcyBub3QgaW1wbGVtZW50IG1vc3Qgb2YgdGhlIG1ldGhvZHMsIHdoaWNoIGlzCi0gICBkb25lIGluIHN1YmNsYXNzZXMuCisgICBkb25lIGluIHN1YmNsYXNzZXMuICBUaGUgdHdvIHBhcmFtZXRlcnMgYXJlIHN0b3JlZCBpbiB0aGUgcmVzcGVjdGl2ZQorICAgOmF0dHI6YHNlcnZlcl9hZGRyZXNzYCBhbmQgOmF0dHI6YFJlcXVlc3RIYW5kbGVyQ2xhc3NgIGF0dHJpYnV0ZXMuCiAKIAotLi4gbWV0aG9kOjogQmFzZVNlcnZlci5maWxlbm8oKQorICAgLi4gbWV0aG9kOjogZmlsZW5vKCkKIAotICAgUmV0dXJuIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgc29ja2V0IG9uIHdoaWNoIHRoZSBzZXJ2ZXIgaXMKLSAgIGxpc3RlbmluZy4gIFRoaXMgZnVuY3Rpb24gaXMgbW9zdCBjb21tb25seSBwYXNzZWQgdG8gOmZ1bmM6YHNlbGVjdC5zZWxlY3RgLCB0bwotICAgYWxsb3cgbW9uaXRvcmluZyBtdWx0aXBsZSBzZXJ2ZXJzIGluIHRoZSBzYW1lIHByb2Nlc3MuCisgICAgICBSZXR1cm4gYW4gaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBzb2NrZXQgb24gd2hpY2ggdGhlIHNlcnZlciBpcworICAgICAgbGlzdGVuaW5nLiAgVGhpcyBmdW5jdGlvbiBpcyBtb3N0IGNvbW1vbmx5IHBhc3NlZCB0byA6bW9kOmBzZWxlY3RvcnNgLCB0bworICAgICAgYWxsb3cgbW9uaXRvcmluZyBtdWx0aXBsZSBzZXJ2ZXJzIGluIHRoZSBzYW1lIHByb2Nlc3MuCiAKIAotLi4gbWV0aG9kOjogQmFzZVNlcnZlci5oYW5kbGVfcmVxdWVzdCgpCisgICAuLiBtZXRob2Q6OiBoYW5kbGVfcmVxdWVzdCgpCiAKLSAgIFByb2Nlc3MgYSBzaW5nbGUgcmVxdWVzdC4gIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluCi0gICBvcmRlcjogOm1ldGg6YGdldF9yZXF1ZXN0YCwgOm1ldGg6YHZlcmlmeV9yZXF1ZXN0YCwgYW5kCi0gICA6bWV0aDpgcHJvY2Vzc19yZXF1ZXN0YC4gIElmIHRoZSB1c2VyLXByb3ZpZGVkIDptZXRoOmBoYW5kbGVgIG1ldGhvZCBvZiB0aGUKLSAgIGhhbmRsZXIgY2xhc3MgcmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIHNlcnZlcidzIDptZXRoOmBoYW5kbGVfZXJyb3JgIG1ldGhvZAotICAgd2lsbCBiZSBjYWxsZWQuICBJZiBubyByZXF1ZXN0IGlzIHJlY2VpdmVkIHdpdGhpbiA6YXR0cjpgc2VsZi50aW1lb3V0YAotICAgc2Vjb25kcywgOm1ldGg6YGhhbmRsZV90aW1lb3V0YCB3aWxsIGJlIGNhbGxlZCBhbmQgOm1ldGg6YGhhbmRsZV9yZXF1ZXN0YAotICAgd2lsbCByZXR1cm4uCisgICAgICBQcm9jZXNzIGEgc2luZ2xlIHJlcXVlc3QuICBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbgorICAgICAgb3JkZXI6IDptZXRoOmBnZXRfcmVxdWVzdGAsIDptZXRoOmB2ZXJpZnlfcmVxdWVzdGAsIGFuZAorICAgICAgOm1ldGg6YHByb2Nlc3NfcmVxdWVzdGAuICBJZiB0aGUgdXNlci1wcm92aWRlZAorICAgICAgOm1ldGg6YH5CYXNlUmVxdWVzdEhhbmRsZXIuaGFuZGxlYCBtZXRob2Qgb2YgdGhlCisgICAgICBoYW5kbGVyIGNsYXNzIHJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBzZXJ2ZXIncyA6bWV0aDpgaGFuZGxlX2Vycm9yYCBtZXRob2QKKyAgICAgIHdpbGwgYmUgY2FsbGVkLiAgSWYgbm8gcmVxdWVzdCBpcyByZWNlaXZlZCB3aXRoaW4gOmF0dHI6YHRpbWVvdXRgCisgICAgICBzZWNvbmRzLCA6bWV0aDpgaGFuZGxlX3RpbWVvdXRgIHdpbGwgYmUgY2FsbGVkIGFuZCA6bWV0aDpgaGFuZGxlX3JlcXVlc3RgCisgICAgICB3aWxsIHJldHVybi4KIAogCi0uLiBtZXRob2Q6OiBCYXNlU2VydmVyLnNlcnZlX2ZvcmV2ZXIocG9sbF9pbnRlcnZhbD0wLjUpCisgICAuLiBtZXRob2Q6OiBzZXJ2ZV9mb3JldmVyKHBvbGxfaW50ZXJ2YWw9MC41KQogCi0gICBIYW5kbGUgcmVxdWVzdHMgdW50aWwgYW4gZXhwbGljaXQgOm1ldGg6YHNodXRkb3duYCByZXF1ZXN0LiAgUG9sbCBmb3IKLSAgIHNodXRkb3duIGV2ZXJ5ICpwb2xsX2ludGVydmFsKiBzZWNvbmRzLiBJZ25vcmVzIDphdHRyOmBzZWxmLnRpbWVvdXRgLiAgSXQKLSAgIGFsc28gY2FsbHMgOm1ldGg6YHNlcnZpY2VfYWN0aW9uc2AsIHdoaWNoIG1heSBiZSB1c2VkIGJ5IGEgc3ViY2xhc3Mgb3IgbWl4aW4KLSAgIHRvIHByb3ZpZGUgYWN0aW9ucyBzcGVjaWZpYyB0byBhIGdpdmVuIHNlcnZpY2UuICBGb3IgZXhhbXBsZSwgdGhlCi0gICA6Y2xhc3M6YEZvcmtpbmdNaXhJbmAgY2xhc3MgdXNlcyA6bWV0aDpgc2VydmljZV9hY3Rpb25zYCB0byBjbGVhbiB1cCB6b21iaWUKLSAgIGNoaWxkIHByb2Nlc3Nlcy4KKyAgICAgIEhhbmRsZSByZXF1ZXN0cyB1bnRpbCBhbiBleHBsaWNpdCA6bWV0aDpgc2h1dGRvd25gIHJlcXVlc3QuICBQb2xsIGZvcgorICAgICAgc2h1dGRvd24gZXZlcnkgKnBvbGxfaW50ZXJ2YWwqIHNlY29uZHMuCisgICAgICBJZ25vcmVzIHRoZSA6YXR0cjpgdGltZW91dGAgYXR0cmlidXRlLiAgSXQKKyAgICAgIGFsc28gY2FsbHMgOm1ldGg6YHNlcnZpY2VfYWN0aW9uc2AsIHdoaWNoIG1heSBiZSB1c2VkIGJ5IGEgc3ViY2xhc3Mgb3IgbWl4aW4KKyAgICAgIHRvIHByb3ZpZGUgYWN0aW9ucyBzcGVjaWZpYyB0byBhIGdpdmVuIHNlcnZpY2UuICBGb3IgZXhhbXBsZSwgdGhlCisgICAgICA6Y2xhc3M6YEZvcmtpbmdNaXhJbmAgY2xhc3MgdXNlcyA6bWV0aDpgc2VydmljZV9hY3Rpb25zYCB0byBjbGVhbiB1cCB6b21iaWUKKyAgICAgIGNoaWxkIHByb2Nlc3Nlcy4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgICBBZGRlZCBgYHNlcnZpY2VfYWN0aW9uc2BgIGNhbGwgdG8gdGhlIGBgc2VydmVfZm9yZXZlcmBgIG1ldGhvZC4KKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICAgICBBZGRlZCBgYHNlcnZpY2VfYWN0aW9uc2BgIGNhbGwgdG8gdGhlIGBgc2VydmVfZm9yZXZlcmBgIG1ldGhvZC4KIAogCi0uLiBtZXRob2Q6OiBCYXNlU2VydmVyLnNlcnZpY2VfYWN0aW9ucygpCisgICAuLiBtZXRob2Q6OiBzZXJ2aWNlX2FjdGlvbnMoKQogCi0gICBUaGlzIGlzIGNhbGxlZCBpbiB0aGUgOm1ldGg6YHNlcnZlX2ZvcmV2ZXJgIGxvb3AuIFRoaXMgbWV0aG9kIGNhbiBiZQotICAgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIG9yIG1peGluIGNsYXNzZXMgdG8gcGVyZm9ybSBhY3Rpb25zIHNwZWNpZmljIHRvCi0gICBhIGdpdmVuIHNlcnZpY2UsIHN1Y2ggYXMgY2xlYW51cCBhY3Rpb25zLgorICAgICAgVGhpcyBpcyBjYWxsZWQgaW4gdGhlIDptZXRoOmBzZXJ2ZV9mb3JldmVyYCBsb29wLiBUaGlzIG1ldGhvZCBjYW4gYmUKKyAgICAgIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyBvciBtaXhpbiBjbGFzc2VzIHRvIHBlcmZvcm0gYWN0aW9ucyBzcGVjaWZpYyB0bworICAgICAgYSBnaXZlbiBzZXJ2aWNlLCBzdWNoIGFzIGNsZWFudXAgYWN0aW9ucy4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotLi4gbWV0aG9kOjogQmFzZVNlcnZlci5zaHV0ZG93bigpCisgICAuLiBtZXRob2Q6OiBzaHV0ZG93bigpCiAKLSAgIFRlbGwgdGhlIDptZXRoOmBzZXJ2ZV9mb3JldmVyYCBsb29wIHRvIHN0b3AgYW5kIHdhaXQgdW50aWwgaXQgZG9lcy4KKyAgICAgIFRlbGwgdGhlIDptZXRoOmBzZXJ2ZV9mb3JldmVyYCBsb29wIHRvIHN0b3AgYW5kIHdhaXQgdW50aWwgaXQgZG9lcy4KIAogCi0uLiBtZXRob2Q6OiBCYXNlU2VydmVyLnNlcnZlcl9jbG9zZSgpCisgICAuLiBtZXRob2Q6OiBzZXJ2ZXJfY2xvc2UoKQogCi0gICBDbGVhbiB1cCB0aGUgc2VydmVyLiBNYXkgYmUgb3ZlcnJpZGRlbi4KKyAgICAgIENsZWFuIHVwIHRoZSBzZXJ2ZXIuIE1heSBiZSBvdmVycmlkZGVuLgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGFkZHJlc3NfZmFtaWx5CisKKyAgICAgIFRoZSBmYW1pbHkgb2YgcHJvdG9jb2xzIHRvIHdoaWNoIHRoZSBzZXJ2ZXIncyBzb2NrZXQgYmVsb25ncy4KKyAgICAgIENvbW1vbiBleGFtcGxlcyBhcmUgOmNvbnN0OmBzb2NrZXQuQUZfSU5FVGAgYW5kIDpjb25zdDpgc29ja2V0LkFGX1VOSVhgLgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKIAorICAgLi4gYXR0cmlidXRlOjogUmVxdWVzdEhhbmRsZXJDbGFzcwogCi0uLiBhdHRyaWJ1dGU6OiBCYXNlU2VydmVyLmFkZHJlc3NfZmFtaWx5CisgICAgICBUaGUgdXNlci1wcm92aWRlZCByZXF1ZXN0IGhhbmRsZXIgY2xhc3M7IGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgaXMgY3JlYXRlZAorICAgICAgZm9yIGVhY2ggcmVxdWVzdC4KIAotICAgVGhlIGZhbWlseSBvZiBwcm90b2NvbHMgdG8gd2hpY2ggdGhlIHNlcnZlcidzIHNvY2tldCBiZWxvbmdzLgotICAgQ29tbW9uIGV4YW1wbGVzIGFyZSA6Y29uc3Q6YHNvY2tldC5BRl9JTkVUYCBhbmQgOmNvbnN0OmBzb2NrZXQuQUZfVU5JWGAuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IHNlcnZlcl9hZGRyZXNzCiAKLS4uIGF0dHJpYnV0ZTo6IEJhc2VTZXJ2ZXIuUmVxdWVzdEhhbmRsZXJDbGFzcworICAgICAgVGhlIGFkZHJlc3Mgb24gd2hpY2ggdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcuICBUaGUgZm9ybWF0IG9mIGFkZHJlc3NlcyB2YXJpZXMKKyAgICAgIGRlcGVuZGluZyBvbiB0aGUgcHJvdG9jb2wgZmFtaWx5OworICAgICAgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgc29ja2V0YCBtb2R1bGUKKyAgICAgIGZvciBkZXRhaWxzLiAgRm9yIEludGVybmV0IHByb3RvY29scywgdGhpcyBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgYSBzdHJpbmcgZ2l2aW5nCisgICAgICB0aGUgYWRkcmVzcywgYW5kIGFuIGludGVnZXIgcG9ydCBudW1iZXI6IGBgKCcxMjcuMC4wLjEnLCA4MClgYCwgZm9yIGV4YW1wbGUuCiAKLSAgIFRoZSB1c2VyLXByb3ZpZGVkIHJlcXVlc3QgaGFuZGxlciBjbGFzczsgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpcyBjcmVhdGVkCi0gICBmb3IgZWFjaCByZXF1ZXN0LgogCisgICAuLiBhdHRyaWJ1dGU6OiBzb2NrZXQKIAotLi4gYXR0cmlidXRlOjogQmFzZVNlcnZlci5zZXJ2ZXJfYWRkcmVzcworICAgICAgVGhlIHNvY2tldCBvYmplY3Qgb24gd2hpY2ggdGhlIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgcmVxdWVzdHMuCiAKLSAgIFRoZSBhZGRyZXNzIG9uIHdoaWNoIHRoZSBzZXJ2ZXIgaXMgbGlzdGVuaW5nLiAgVGhlIGZvcm1hdCBvZiBhZGRyZXNzZXMgdmFyaWVzCi0gICBkZXBlbmRpbmcgb24gdGhlIHByb3RvY29sIGZhbWlseTsgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgc29ja2V0IG1vZHVsZQotICAgZm9yIGRldGFpbHMuICBGb3IgSW50ZXJuZXQgcHJvdG9jb2xzLCB0aGlzIGlzIGEgdHVwbGUgY29udGFpbmluZyBhIHN0cmluZyBnaXZpbmcKLSAgIHRoZSBhZGRyZXNzLCBhbmQgYW4gaW50ZWdlciBwb3J0IG51bWJlcjogYGAoJzEyNy4wLjAuMScsIDgwKWBgLCBmb3IgZXhhbXBsZS4KIAorICAgVGhlIHNlcnZlciBjbGFzc2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBjbGFzcyB2YXJpYWJsZXM6CiAKLS4uIGF0dHJpYnV0ZTo6IEJhc2VTZXJ2ZXIuc29ja2V0CisgICAuLiBYWFggc2hvdWxkIGNsYXNzIHZhcmlhYmxlcyBiZSBjb3ZlcmVkIGJlZm9yZSBpbnN0YW5jZSB2YXJpYWJsZXMsIG9yIHZpY2UgdmVyc2E/CiAKLSAgIFRoZSBzb2NrZXQgb2JqZWN0IG9uIHdoaWNoIHRoZSBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIHJlcXVlc3RzLgorICAgLi4gYXR0cmlidXRlOjogYWxsb3dfcmV1c2VfYWRkcmVzcwogCisgICAgICBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2lsbCBhbGxvdyB0aGUgcmV1c2Ugb2YgYW4gYWRkcmVzcy4gIFRoaXMgZGVmYXVsdHMgdG8KKyAgICAgIDpjb25zdDpgRmFsc2VgLCBhbmQgY2FuIGJlIHNldCBpbiBzdWJjbGFzc2VzIHRvIGNoYW5nZSB0aGUgcG9saWN5LgogCi1UaGUgc2VydmVyIGNsYXNzZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIGNsYXNzIHZhcmlhYmxlczoKIAotLi4gWFhYIHNob3VsZCBjbGFzcyB2YXJpYWJsZXMgYmUgY292ZXJlZCBiZWZvcmUgaW5zdGFuY2UgdmFyaWFibGVzLCBvciB2aWNlIHZlcnNhPworICAgLi4gYXR0cmlidXRlOjogcmVxdWVzdF9xdWV1ZV9zaXplCiAKLS4uIGF0dHJpYnV0ZTo6IEJhc2VTZXJ2ZXIuYWxsb3dfcmV1c2VfYWRkcmVzcworICAgICAgVGhlIHNpemUgb2YgdGhlIHJlcXVlc3QgcXVldWUuICBJZiBpdCB0YWtlcyBhIGxvbmcgdGltZSB0byBwcm9jZXNzIGEgc2luZ2xlCisgICAgICByZXF1ZXN0LCBhbnkgcmVxdWVzdHMgdGhhdCBhcnJpdmUgd2hpbGUgdGhlIHNlcnZlciBpcyBidXN5IGFyZSBwbGFjZWQgaW50byBhCisgICAgICBxdWV1ZSwgdXAgdG8gOmF0dHI6YHJlcXVlc3RfcXVldWVfc2l6ZWAgcmVxdWVzdHMuICBPbmNlIHRoZSBxdWV1ZSBpcyBmdWxsLAorICAgICAgZnVydGhlciByZXF1ZXN0cyBmcm9tIGNsaWVudHMgd2lsbCBnZXQgYSAiQ29ubmVjdGlvbiBkZW5pZWQiIGVycm9yLiAgVGhlIGRlZmF1bHQKKyAgICAgIHZhbHVlIGlzIHVzdWFsbHkgNSwgYnV0IHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KIAotICAgV2hldGhlciB0aGUgc2VydmVyIHdpbGwgYWxsb3cgdGhlIHJldXNlIG9mIGFuIGFkZHJlc3MuICBUaGlzIGRlZmF1bHRzIHRvCi0gICA6Y29uc3Q6YEZhbHNlYCwgYW5kIGNhbiBiZSBzZXQgaW4gc3ViY2xhc3NlcyB0byBjaGFuZ2UgdGhlIHBvbGljeS4KIAorICAgLi4gYXR0cmlidXRlOjogc29ja2V0X3R5cGUKIAotLi4gYXR0cmlidXRlOjogQmFzZVNlcnZlci5yZXF1ZXN0X3F1ZXVlX3NpemUKKyAgICAgIFRoZSB0eXBlIG9mIHNvY2tldCB1c2VkIGJ5IHRoZSBzZXJ2ZXI7IDpjb25zdDpgc29ja2V0LlNPQ0tfU1RSRUFNYCBhbmQKKyAgICAgIDpjb25zdDpgc29ja2V0LlNPQ0tfREdSQU1gIGFyZSB0d28gY29tbW9uIHZhbHVlcy4KIAotICAgVGhlIHNpemUgb2YgdGhlIHJlcXVlc3QgcXVldWUuICBJZiBpdCB0YWtlcyBhIGxvbmcgdGltZSB0byBwcm9jZXNzIGEgc2luZ2xlCi0gICByZXF1ZXN0LCBhbnkgcmVxdWVzdHMgdGhhdCBhcnJpdmUgd2hpbGUgdGhlIHNlcnZlciBpcyBidXN5IGFyZSBwbGFjZWQgaW50byBhCi0gICBxdWV1ZSwgdXAgdG8gOmF0dHI6YHJlcXVlc3RfcXVldWVfc2l6ZWAgcmVxdWVzdHMuICBPbmNlIHRoZSBxdWV1ZSBpcyBmdWxsLAotICAgZnVydGhlciByZXF1ZXN0cyBmcm9tIGNsaWVudHMgd2lsbCBnZXQgYSAiQ29ubmVjdGlvbiBkZW5pZWQiIGVycm9yLiAgVGhlIGRlZmF1bHQKLSAgIHZhbHVlIGlzIHVzdWFsbHkgNSwgYnV0IHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KIAorICAgLi4gYXR0cmlidXRlOjogdGltZW91dAogCi0uLiBhdHRyaWJ1dGU6OiBCYXNlU2VydmVyLnNvY2tldF90eXBlCisgICAgICBUaW1lb3V0IGR1cmF0aW9uLCBtZWFzdXJlZCBpbiBzZWNvbmRzLCBvciA6Y29uc3Q6YE5vbmVgIGlmIG5vIHRpbWVvdXQgaXMKKyAgICAgIGRlc2lyZWQuICBJZiA6bWV0aDpgaGFuZGxlX3JlcXVlc3RgIHJlY2VpdmVzIG5vIGluY29taW5nIHJlcXVlc3RzIHdpdGhpbiB0aGUKKyAgICAgIHRpbWVvdXQgcGVyaW9kLCB0aGUgOm1ldGg6YGhhbmRsZV90aW1lb3V0YCBtZXRob2QgaXMgY2FsbGVkLgogCi0gICBUaGUgdHlwZSBvZiBzb2NrZXQgdXNlZCBieSB0aGUgc2VydmVyOyA6Y29uc3Q6YHNvY2tldC5TT0NLX1NUUkVBTWAgYW5kCi0gICA6Y29uc3Q6YHNvY2tldC5TT0NLX0RHUkFNYCBhcmUgdHdvIGNvbW1vbiB2YWx1ZXMuCiAKKyAgIFRoZXJlIGFyZSB2YXJpb3VzIHNlcnZlciBtZXRob2RzIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyBvZiBiYXNlCisgICBzZXJ2ZXIgY2xhc3NlcyBsaWtlIDpjbGFzczpgVENQU2VydmVyYDsgdGhlc2UgbWV0aG9kcyBhcmVuJ3QgdXNlZnVsIHRvIGV4dGVybmFsCisgICB1c2VycyBvZiB0aGUgc2VydmVyIG9iamVjdC4KIAotLi4gYXR0cmlidXRlOjogQmFzZVNlcnZlci50aW1lb3V0CisgICAuLiBYWFggc2hvdWxkIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBiZSBkb2N1bWVudGVkLCBvciBzaG91bGQKKyAgICAgIGl0IGJlIGFzc3VtZWQgdGhhdCB0aGUgdXNlciB3aWxsIGxvb2sgYXQgc29ja2V0c2VydmVyLnB5PwogCi0gICBUaW1lb3V0IGR1cmF0aW9uLCBtZWFzdXJlZCBpbiBzZWNvbmRzLCBvciA6Y29uc3Q6YE5vbmVgIGlmIG5vIHRpbWVvdXQgaXMKLSAgIGRlc2lyZWQuICBJZiA6bWV0aDpgaGFuZGxlX3JlcXVlc3RgIHJlY2VpdmVzIG5vIGluY29taW5nIHJlcXVlc3RzIHdpdGhpbiB0aGUKLSAgIHRpbWVvdXQgcGVyaW9kLCB0aGUgOm1ldGg6YGhhbmRsZV90aW1lb3V0YCBtZXRob2QgaXMgY2FsbGVkLgorICAgLi4gbWV0aG9kOjogZmluaXNoX3JlcXVlc3QoKQogCisgICAgICBBY3R1YWxseSBwcm9jZXNzZXMgdGhlIHJlcXVlc3QgYnkgaW5zdGFudGlhdGluZyA6YXR0cjpgUmVxdWVzdEhhbmRsZXJDbGFzc2AgYW5kCisgICAgICBjYWxsaW5nIGl0cyA6bWV0aDpgfkJhc2VSZXF1ZXN0SGFuZGxlci5oYW5kbGVgIG1ldGhvZC4KIAotVGhlcmUgYXJlIHZhcmlvdXMgc2VydmVyIG1ldGhvZHMgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIG9mIGJhc2UKLXNlcnZlciBjbGFzc2VzIGxpa2UgOmNsYXNzOmBUQ1BTZXJ2ZXJgOyB0aGVzZSBtZXRob2RzIGFyZW4ndCB1c2VmdWwgdG8gZXh0ZXJuYWwKLXVzZXJzIG9mIHRoZSBzZXJ2ZXIgb2JqZWN0LgogCi0uLiBYWFggc2hvdWxkIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBiZSBkb2N1bWVudGVkLCBvciBzaG91bGQKLSAgIGl0IGJlIGFzc3VtZWQgdGhhdCB0aGUgdXNlciB3aWxsIGxvb2sgYXQgc29ja2V0c2VydmVyLnB5PworICAgLi4gbWV0aG9kOjogZ2V0X3JlcXVlc3QoKQogCi0uLiBtZXRob2Q6OiBCYXNlU2VydmVyLmZpbmlzaF9yZXF1ZXN0KCkKKyAgICAgIE11c3QgYWNjZXB0IGEgcmVxdWVzdCBmcm9tIHRoZSBzb2NrZXQsIGFuZCByZXR1cm4gYSAyLXR1cGxlIGNvbnRhaW5pbmcgdGhlICpuZXcqCisgICAgICBzb2NrZXQgb2JqZWN0IHRvIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgY2xpZW50LCBhbmQgdGhlIGNsaWVudCdzCisgICAgICBhZGRyZXNzLgogCi0gICBBY3R1YWxseSBwcm9jZXNzZXMgdGhlIHJlcXVlc3QgYnkgaW5zdGFudGlhdGluZyA6YXR0cjpgUmVxdWVzdEhhbmRsZXJDbGFzc2AgYW5kCi0gICBjYWxsaW5nIGl0cyA6bWV0aDpgaGFuZGxlYCBtZXRob2QuCiAKKyAgIC4uIG1ldGhvZDo6IGhhbmRsZV9lcnJvcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKIAotLi4gbWV0aG9kOjogQmFzZVNlcnZlci5nZXRfcmVxdWVzdCgpCisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpZiB0aGUgOm1ldGg6YH5CYXNlUmVxdWVzdEhhbmRsZXIuaGFuZGxlYAorICAgICAgbWV0aG9kIG9mIGEgOmF0dHI6YFJlcXVlc3RIYW5kbGVyQ2xhc3NgIGluc3RhbmNlIHJhaXNlcworICAgICAgYW4gZXhjZXB0aW9uLiAgVGhlIGRlZmF1bHQgYWN0aW9uIGlzIHRvIHByaW50IHRoZSB0cmFjZWJhY2sgdG8KKyAgICAgIHN0YW5kYXJkIG91dHB1dCBhbmQgY29udGludWUgaGFuZGxpbmcgZnVydGhlciByZXF1ZXN0cy4KIAotICAgTXVzdCBhY2NlcHQgYSByZXF1ZXN0IGZyb20gdGhlIHNvY2tldCwgYW5kIHJldHVybiBhIDItdHVwbGUgY29udGFpbmluZyB0aGUgKm5ldyoKLSAgIHNvY2tldCBvYmplY3QgdG8gYmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjbGllbnQsIGFuZCB0aGUgY2xpZW50J3MKLSAgIGFkZHJlc3MuCiAKKyAgIC4uIG1ldGhvZDo6IGhhbmRsZV90aW1lb3V0KCkKIAotLi4gbWV0aG9kOjogQmFzZVNlcnZlci5oYW5kbGVfZXJyb3IocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSA6YXR0cjpgdGltZW91dGAgYXR0cmlidXRlIGhhcyBiZWVuIHNldCB0byBhCisgICAgICB2YWx1ZSBvdGhlciB0aGFuIDpjb25zdDpgTm9uZWAgYW5kIHRoZSB0aW1lb3V0IHBlcmlvZCBoYXMgcGFzc2VkIHdpdGggbm8KKyAgICAgIHJlcXVlc3RzIGJlaW5nIHJlY2VpdmVkLiAgVGhlIGRlZmF1bHQgYWN0aW9uIGZvciBmb3JraW5nIHNlcnZlcnMgaXMKKyAgICAgIHRvIGNvbGxlY3QgdGhlIHN0YXR1cyBvZiBhbnkgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBleGl0ZWQsIHdoaWxlCisgICAgICBpbiB0aHJlYWRpbmcgc2VydmVycyB0aGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcuCiAKLSAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmIHRoZSA6YXR0cjpgUmVxdWVzdEhhbmRsZXJDbGFzc2AncyA6bWV0aDpgaGFuZGxlYAotICAgbWV0aG9kIHJhaXNlcyBhbiBleGNlcHRpb24uICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcHJpbnQgdGhlIHRyYWNlYmFjayB0bwotICAgc3RhbmRhcmQgb3V0cHV0IGFuZCBjb250aW51ZSBoYW5kbGluZyBmdXJ0aGVyIHJlcXVlc3RzLgogCisgICAuLiBtZXRob2Q6OiBwcm9jZXNzX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCiAKLS4uIG1ldGhvZDo6IEJhc2VTZXJ2ZXIuaGFuZGxlX3RpbWVvdXQoKQorICAgICAgQ2FsbHMgOm1ldGg6YGZpbmlzaF9yZXF1ZXN0YCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgICA6YXR0cjpgUmVxdWVzdEhhbmRsZXJDbGFzc2AuICBJZiBkZXNpcmVkLCB0aGlzIGZ1bmN0aW9uIGNhbiBjcmVhdGUgYSBuZXcgcHJvY2VzcworICAgICAgb3IgdGhyZWFkIHRvIGhhbmRsZSB0aGUgcmVxdWVzdDsgdGhlIDpjbGFzczpgRm9ya2luZ01peEluYCBhbmQKKyAgICAgIDpjbGFzczpgVGhyZWFkaW5nTWl4SW5gIGNsYXNzZXMgZG8gdGhpcy4KIAotICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgOmF0dHI6YHRpbWVvdXRgIGF0dHJpYnV0ZSBoYXMgYmVlbiBzZXQgdG8gYQotICAgdmFsdWUgb3RoZXIgdGhhbiA6Y29uc3Q6YE5vbmVgIGFuZCB0aGUgdGltZW91dCBwZXJpb2QgaGFzIHBhc3NlZCB3aXRoIG5vCi0gICByZXF1ZXN0cyBiZWluZyByZWNlaXZlZC4gIFRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgZm9ya2luZyBzZXJ2ZXJzIGlzCi0gICB0byBjb2xsZWN0IHRoZSBzdGF0dXMgb2YgYW55IGNoaWxkIHByb2Nlc3NlcyB0aGF0IGhhdmUgZXhpdGVkLCB3aGlsZQotICAgaW4gdGhyZWFkaW5nIHNlcnZlcnMgdGhpcyBtZXRob2QgZG9lcyBub3RoaW5nLgogCisgICAuLiBJcyB0aGVyZSBhbnkgcG9pbnQgaW4gZG9jdW1lbnRpbmcgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zPworICAgICAgV2hhdCB3b3VsZCB0aGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoZW0gYmU6IGluaXRpYWxpemluZyBzZXJ2ZXIKKyAgICAgIGluc3RhbmNlIHZhcmlhYmxlcywgYWRkaW5nIG5ldyBuZXR3b3JrIGZhbWlsaWVzPwogCi0uLiBtZXRob2Q6OiBCYXNlU2VydmVyLnByb2Nlc3NfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgIC4uIG1ldGhvZDo6IHNlcnZlcl9hY3RpdmF0ZSgpCiAKLSAgIENhbGxzIDptZXRoOmBmaW5pc2hfcmVxdWVzdGAgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZQotICAgOmF0dHI6YFJlcXVlc3RIYW5kbGVyQ2xhc3NgLiAgSWYgZGVzaXJlZCwgdGhpcyBmdW5jdGlvbiBjYW4gY3JlYXRlIGEgbmV3IHByb2Nlc3MKLSAgIG9yIHRocmVhZCB0byBoYW5kbGUgdGhlIHJlcXVlc3Q7IHRoZSA6Y2xhc3M6YEZvcmtpbmdNaXhJbmAgYW5kCi0gICA6Y2xhc3M6YFRocmVhZGluZ01peEluYCBjbGFzc2VzIGRvIHRoaXMuCisgICAgICBDYWxsZWQgYnkgdGhlIHNlcnZlcidzIGNvbnN0cnVjdG9yIHRvIGFjdGl2YXRlIHRoZSBzZXJ2ZXIuICBUaGUgZGVmYXVsdCBiZWhhdmlvcgorICAgICAgZm9yIGEgVENQIHNlcnZlciBqdXN0IGludm9rZXMgOm1ldGg6YH5zb2NrZXQuc29ja2V0Lmxpc3RlbmAKKyAgICAgIG9uIHRoZSBzZXJ2ZXIncyBzb2NrZXQuICBNYXkgYmUgb3ZlcnJpZGRlbi4KIAogCi0uLiBJcyB0aGVyZSBhbnkgcG9pbnQgaW4gZG9jdW1lbnRpbmcgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zPwotICAgV2hhdCB3b3VsZCB0aGUgcHVycG9zZSBvZiBvdmVycmlkaW5nIHRoZW0gYmU6IGluaXRpYWxpemluZyBzZXJ2ZXIKLSAgIGluc3RhbmNlIHZhcmlhYmxlcywgYWRkaW5nIG5ldyBuZXR3b3JrIGZhbWlsaWVzPworICAgLi4gbWV0aG9kOjogc2VydmVyX2JpbmQoKQogCi0uLiBtZXRob2Q6OiBCYXNlU2VydmVyLnNlcnZlcl9hY3RpdmF0ZSgpCisgICAgICBDYWxsZWQgYnkgdGhlIHNlcnZlcidzIGNvbnN0cnVjdG9yIHRvIGJpbmQgdGhlIHNvY2tldCB0byB0aGUgZGVzaXJlZCBhZGRyZXNzLgorICAgICAgTWF5IGJlIG92ZXJyaWRkZW4uCiAKLSAgIENhbGxlZCBieSB0aGUgc2VydmVyJ3MgY29uc3RydWN0b3IgdG8gYWN0aXZhdGUgdGhlIHNlcnZlci4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yCi0gICBqdXN0IDptZXRoOmBsaXN0ZW5gXCBzIHRvIHRoZSBzZXJ2ZXIncyBzb2NrZXQuICBNYXkgYmUgb3ZlcnJpZGRlbi4KIAorICAgLi4gbWV0aG9kOjogdmVyaWZ5X3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCiAKLS4uIG1ldGhvZDo6IEJhc2VTZXJ2ZXIuc2VydmVyX2JpbmQoKQorICAgICAgTXVzdCByZXR1cm4gYSBCb29sZWFuIHZhbHVlOyBpZiB0aGUgdmFsdWUgaXMgOmNvbnN0OmBUcnVlYCwgdGhlIHJlcXVlc3Qgd2lsbAorICAgICAgYmUgcHJvY2Vzc2VkLCBhbmQgaWYgaXQncyA6Y29uc3Q6YEZhbHNlYCwgdGhlIHJlcXVlc3Qgd2lsbCBiZSBkZW5pZWQuICBUaGlzCisgICAgICBmdW5jdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiB0byBpbXBsZW1lbnQgYWNjZXNzIGNvbnRyb2xzIGZvciBhIHNlcnZlci4gVGhlCisgICAgICBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFsd2F5cyByZXR1cm5zIDpjb25zdDpgVHJ1ZWAuCiAKLSAgIENhbGxlZCBieSB0aGUgc2VydmVyJ3MgY29uc3RydWN0b3IgdG8gYmluZCB0aGUgc29ja2V0IHRvIHRoZSBkZXNpcmVkIGFkZHJlc3MuCi0gICBNYXkgYmUgb3ZlcnJpZGRlbi4KIAorUmVxdWVzdCBIYW5kbGVyIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIG1ldGhvZDo6IEJhc2VTZXJ2ZXIudmVyaWZ5X3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisuLiBjbGFzczo6IEJhc2VSZXF1ZXN0SGFuZGxlcgogCi0gICBNdXN0IHJldHVybiBhIEJvb2xlYW4gdmFsdWU7IGlmIHRoZSB2YWx1ZSBpcyA6Y29uc3Q6YFRydWVgLCB0aGUgcmVxdWVzdCB3aWxsCi0gICBiZSBwcm9jZXNzZWQsIGFuZCBpZiBpdCdzIDpjb25zdDpgRmFsc2VgLCB0aGUgcmVxdWVzdCB3aWxsIGJlIGRlbmllZC4gIFRoaXMKLSAgIGZ1bmN0aW9uIGNhbiBiZSBvdmVycmlkZGVuIHRvIGltcGxlbWVudCBhY2Nlc3MgY29udHJvbHMgZm9yIGEgc2VydmVyLiBUaGUKLSAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYWx3YXlzIHJldHVybnMgOmNvbnN0OmBUcnVlYC4KKyAgIFRoaXMgaXMgdGhlIHN1cGVyY2xhc3Mgb2YgYWxsIHJlcXVlc3QgaGFuZGxlciBvYmplY3RzLiAgSXQgZGVmaW5lcworICAgdGhlIGludGVyZmFjZSwgZ2l2ZW4gYmVsb3cuICBBIGNvbmNyZXRlIHJlcXVlc3QgaGFuZGxlciBzdWJjbGFzcyBtdXN0CisgICBkZWZpbmUgYSBuZXcgOm1ldGg6YGhhbmRsZWAgbWV0aG9kLCBhbmQgY2FuIG92ZXJyaWRlIGFueSBvZgorICAgdGhlIG90aGVyIG1ldGhvZHMuICBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgc3ViY2xhc3MgaXMgY3JlYXRlZCBmb3IgZWFjaAorICAgcmVxdWVzdC4KIAogCi1SZXF1ZXN0SGFuZGxlciBPYmplY3RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAuLiBtZXRob2Q6OiBzZXR1cCgpCiAKLVRoZSByZXF1ZXN0IGhhbmRsZXIgY2xhc3MgbXVzdCBkZWZpbmUgYSBuZXcgOm1ldGg6YGhhbmRsZWAgbWV0aG9kLCBhbmQgY2FuCi1vdmVycmlkZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzLiAgQSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBmb3IgZWFjaAotcmVxdWVzdC4KKyAgICAgIENhbGxlZCBiZWZvcmUgdGhlIDptZXRoOmBoYW5kbGVgIG1ldGhvZCB0byBwZXJmb3JtIGFueSBpbml0aWFsaXphdGlvbiBhY3Rpb25zCisgICAgICByZXF1aXJlZC4gIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KIAogCi0uLiBtZXRob2Q6OiBSZXF1ZXN0SGFuZGxlci5maW5pc2goKQorICAgLi4gbWV0aG9kOjogaGFuZGxlKCkKIAotICAgQ2FsbGVkIGFmdGVyIHRoZSA6bWV0aDpgaGFuZGxlYCBtZXRob2QgdG8gcGVyZm9ybSBhbnkgY2xlYW4tdXAgYWN0aW9ucwotICAgcmVxdWlyZWQuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuICBJZiA6bWV0aDpgc2V0dXBgCi0gICByYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC4KKyAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBkbyBhbGwgdGhlIHdvcmsgcmVxdWlyZWQgdG8gc2VydmljZSBhIHJlcXVlc3QuICBUaGUKKyAgICAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiAgU2V2ZXJhbCBpbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZQorICAgICAgYXZhaWxhYmxlIHRvIGl0OyB0aGUgcmVxdWVzdCBpcyBhdmFpbGFibGUgYXMgOmF0dHI6YHNlbGYucmVxdWVzdGA7IHRoZSBjbGllbnQKKyAgICAgIGFkZHJlc3MgYXMgOmF0dHI6YHNlbGYuY2xpZW50X2FkZHJlc3NgOyBhbmQgdGhlIHNlcnZlciBpbnN0YW5jZSBhcworICAgICAgOmF0dHI6YHNlbGYuc2VydmVyYCwgaW4gY2FzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gcGVyLXNlcnZlciBpbmZvcm1hdGlvbi4KIAorICAgICAgVGhlIHR5cGUgb2YgOmF0dHI6YHNlbGYucmVxdWVzdGAgaXMgZGlmZmVyZW50IGZvciBkYXRhZ3JhbSBvciBzdHJlYW0KKyAgICAgIHNlcnZpY2VzLiAgRm9yIHN0cmVhbSBzZXJ2aWNlcywgOmF0dHI6YHNlbGYucmVxdWVzdGAgaXMgYSBzb2NrZXQgb2JqZWN0OyBmb3IKKyAgICAgIGRhdGFncmFtIHNlcnZpY2VzLCA6YXR0cjpgc2VsZi5yZXF1ZXN0YCBpcyBhIHBhaXIgb2Ygc3RyaW5nIGFuZCBzb2NrZXQuCiAKLS4uIG1ldGhvZDo6IFJlcXVlc3RIYW5kbGVyLmhhbmRsZSgpCiAKLSAgIFRoaXMgZnVuY3Rpb24gbXVzdCBkbyBhbGwgdGhlIHdvcmsgcmVxdWlyZWQgdG8gc2VydmljZSBhIHJlcXVlc3QuICBUaGUKLSAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiAgU2V2ZXJhbCBpbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZQotICAgYXZhaWxhYmxlIHRvIGl0OyB0aGUgcmVxdWVzdCBpcyBhdmFpbGFibGUgYXMgOmF0dHI6YHNlbGYucmVxdWVzdGA7IHRoZSBjbGllbnQKLSAgIGFkZHJlc3MgYXMgOmF0dHI6YHNlbGYuY2xpZW50X2FkZHJlc3NgOyBhbmQgdGhlIHNlcnZlciBpbnN0YW5jZSBhcwotICAgOmF0dHI6YHNlbGYuc2VydmVyYCwgaW4gY2FzZSBpdCBuZWVkcyBhY2Nlc3MgdG8gcGVyLXNlcnZlciBpbmZvcm1hdGlvbi4KKyAgIC4uIG1ldGhvZDo6IGZpbmlzaCgpCiAKLSAgIFRoZSB0eXBlIG9mIDphdHRyOmBzZWxmLnJlcXVlc3RgIGlzIGRpZmZlcmVudCBmb3IgZGF0YWdyYW0gb3Igc3RyZWFtCi0gICBzZXJ2aWNlcy4gIEZvciBzdHJlYW0gc2VydmljZXMsIDphdHRyOmBzZWxmLnJlcXVlc3RgIGlzIGEgc29ja2V0IG9iamVjdDsgZm9yCi0gICBkYXRhZ3JhbSBzZXJ2aWNlcywgOmF0dHI6YHNlbGYucmVxdWVzdGAgaXMgYSBwYWlyIG9mIHN0cmluZyBhbmQgc29ja2V0LgotICAgSG93ZXZlciwgdGhpcyBjYW4gYmUgaGlkZGVuIGJ5IHVzaW5nIHRoZSByZXF1ZXN0IGhhbmRsZXIgc3ViY2xhc3NlcwotICAgOmNsYXNzOmBTdHJlYW1SZXF1ZXN0SGFuZGxlcmAgb3IgOmNsYXNzOmBEYXRhZ3JhbVJlcXVlc3RIYW5kbGVyYCwgd2hpY2gKLSAgIG92ZXJyaWRlIHRoZSA6bWV0aDpgc2V0dXBgIGFuZCA6bWV0aDpgZmluaXNoYCBtZXRob2RzLCBhbmQgcHJvdmlkZQotICAgOmF0dHI6YHNlbGYucmZpbGVgIGFuZCA6YXR0cjpgc2VsZi53ZmlsZWAgYXR0cmlidXRlcy4gIDphdHRyOmBzZWxmLnJmaWxlYCBhbmQKLSAgIDphdHRyOmBzZWxmLndmaWxlYCBjYW4gYmUgcmVhZCBvciB3cml0dGVuLCByZXNwZWN0aXZlbHksIHRvIGdldCB0aGUgcmVxdWVzdAotICAgZGF0YSBvciByZXR1cm4gZGF0YSB0byB0aGUgY2xpZW50LgorICAgICAgQ2FsbGVkIGFmdGVyIHRoZSA6bWV0aDpgaGFuZGxlYCBtZXRob2QgdG8gcGVyZm9ybSBhbnkgY2xlYW4tdXAgYWN0aW9ucworICAgICAgcmVxdWlyZWQuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuICBJZiA6bWV0aDpgc2V0dXBgCisgICAgICByYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZC4KIAogCi0uLiBtZXRob2Q6OiBSZXF1ZXN0SGFuZGxlci5zZXR1cCgpCisuLiBjbGFzczo6IFN0cmVhbVJlcXVlc3RIYW5kbGVyCisgICAgICAgICAgIERhdGFncmFtUmVxdWVzdEhhbmRsZXIKIAotICAgQ2FsbGVkIGJlZm9yZSB0aGUgOm1ldGg6YGhhbmRsZWAgbWV0aG9kIHRvIHBlcmZvcm0gYW55IGluaXRpYWxpemF0aW9uIGFjdGlvbnMKLSAgIHJlcXVpcmVkLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgorICAgVGhlc2UgOmNsYXNzOmBCYXNlUmVxdWVzdEhhbmRsZXJgIHN1YmNsYXNzZXMgb3ZlcnJpZGUgdGhlCisgICA6bWV0aDpgfkJhc2VSZXF1ZXN0SGFuZGxlci5zZXR1cGAgYW5kIDptZXRoOmB+QmFzZVJlcXVlc3RIYW5kbGVyLmZpbmlzaGAKKyAgIG1ldGhvZHMsIGFuZCBwcm92aWRlIDphdHRyOmBzZWxmLnJmaWxlYCBhbmQgOmF0dHI6YHNlbGYud2ZpbGVgIGF0dHJpYnV0ZXMuCisgICBUaGUgOmF0dHI6YHNlbGYucmZpbGVgIGFuZCA6YXR0cjpgc2VsZi53ZmlsZWAgYXR0cmlidXRlcyBjYW4gYmUKKyAgIHJlYWQgb3Igd3JpdHRlbiwgcmVzcGVjdGl2ZWx5LCB0byBnZXQgdGhlIHJlcXVlc3QgZGF0YSBvciByZXR1cm4gZGF0YQorICAgdG8gdGhlIGNsaWVudC4KIAogCiBFeGFtcGxlcwpAQCAtMzYyLDcgKzQxMCw3IEBACiAKICAgIGNsYXNzIE15VENQSGFuZGxlcihzb2NrZXRzZXJ2ZXIuQmFzZVJlcXVlc3RIYW5kbGVyKToKICAgICAgICAiIiIKLSAgICAgICBUaGUgUmVxdWVzdEhhbmRsZXIgY2xhc3MgZm9yIG91ciBzZXJ2ZXIuCisgICAgICAgVGhlIHJlcXVlc3QgaGFuZGxlciBjbGFzcyBmb3Igb3VyIHNlcnZlci4KIAogICAgICAgIEl0IGlzIGluc3RhbnRpYXRlZCBvbmNlIHBlciBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIsIGFuZCBtdXN0CiAgICAgICAgb3ZlcnJpZGUgdGhlIGhhbmRsZSgpIG1ldGhvZCB0byBpbXBsZW1lbnQgY29tbXVuaWNhdGlvbiB0byB0aGUKQEAgLTQxNywxNyArNDY1LDEzIEBACiAgICBkYXRhID0gIiAiLmpvaW4oc3lzLmFyZ3ZbMTpdKQogCiAgICAjIENyZWF0ZSBhIHNvY2tldCAoU09DS19TVFJFQU0gbWVhbnMgYSBUQ1Agc29ja2V0KQotICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLQotICAgdHJ5OgorICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHNvY2s6CiAgICAgICAgIyBDb25uZWN0IHRvIHNlcnZlciBhbmQgc2VuZCBkYXRhCiAgICAgICAgc29jay5jb25uZWN0KChIT1NULCBQT1JUKSkKICAgICAgICBzb2NrLnNlbmRhbGwoYnl0ZXMoZGF0YSArICJcbiIsICJ1dGYtOCIpKQogCiAgICAgICAgIyBSZWNlaXZlIGRhdGEgZnJvbSB0aGUgc2VydmVyIGFuZCBzaHV0IGRvd24KICAgICAgICByZWNlaXZlZCA9IHN0cihzb2NrLnJlY3YoMTAyNCksICJ1dGYtOCIpCi0gICBmaW5hbGx5OgotICAgICAgIHNvY2suY2xvc2UoKQogCiAgICBwcmludCgiU2VudDogICAgIHt9Ii5mb3JtYXQoZGF0YSkpCiAgICBwcmludCgiUmVjZWl2ZWQ6IHt9Ii5mb3JtYXQocmVjZWl2ZWQpKQpAQCAtNDM1LDcgKzQ3OSw5IEBACiAKIFRoZSBvdXRwdXQgb2YgdGhlIGV4YW1wbGUgc2hvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKIAotU2VydmVyOjoKK1NlcnZlcjoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCBweXRob24gVENQU2VydmVyLnB5CiAgICAxMjcuMC4wLjEgd3JvdGU6CkBAIC00NDMsNyArNDg5LDkgQEAKICAgIDEyNy4wLjAuMSB3cm90ZToKICAgIGIncHl0aG9uIGlzIG5pY2UnCiAKLUNsaWVudDo6CitDbGllbnQ6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgcHl0aG9uIFRDUENsaWVudC5weSBoZWxsbyB3b3JsZCB3aXRoIFRDUAogICAgU2VudDogICAgIGhlbGxvIHdvcmxkIHdpdGggVENQCkBAIC01MjYsMTQgKzU3NCwxMSBAQAogICAgICAgIHBhc3MKIAogICAgZGVmIGNsaWVudChpcCwgcG9ydCwgbWVzc2FnZSk6Ci0gICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICBzb2NrLmNvbm5lY3QoKGlwLCBwb3J0KSkKLSAgICAgICB0cnk6CisgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHNvY2s6CisgICAgICAgICAgIHNvY2suY29ubmVjdCgoaXAsIHBvcnQpKQogICAgICAgICAgICBzb2NrLnNlbmRhbGwoYnl0ZXMobWVzc2FnZSwgJ2FzY2lpJykpCiAgICAgICAgICAgIHJlc3BvbnNlID0gc3RyKHNvY2sucmVjdigxMDI0KSwgJ2FzY2lpJykKICAgICAgICAgICAgcHJpbnQoIlJlY2VpdmVkOiB7fSIuZm9ybWF0KHJlc3BvbnNlKSkKLSAgICAgICBmaW5hbGx5OgotICAgICAgICAgICBzb2NrLmNsb3NlKCkKIAogICAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICAgICAjIFBvcnQgMCBtZWFucyB0byBzZWxlY3QgYW4gYXJiaXRyYXJ5IHVudXNlZCBwb3J0CkBAIC01NTgsNyArNjAzLDkgQEAKICAgICAgICBzZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKIAogCi1UaGUgb3V0cHV0IG9mIHRoZSBleGFtcGxlIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6OgorVGhlIG91dHB1dCBvZiB0aGUgZXhhbXBsZSBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAkIHB5dGhvbiBUaHJlYWRlZFRDUFNlcnZlci5weQogICAgU2VydmVyIGxvb3AgcnVubmluZyBpbiB0aHJlYWQ6IFRocmVhZC0xCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zcHdkLnJzdCBiL0RvYy9saWJyYXJ5L3Nwd2QucnN0CmluZGV4IDU4YmU3OGYuLmZkM2M5YWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Nwd2QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Nwd2QucnN0CkBAIC01LDYgKzUsNyBAQAogICAgOnBsYXRmb3JtOiBVbml4CiAgICA6c3lub3BzaXM6IFRoZSBzaGFkb3cgcGFzc3dvcmQgZGF0YWJhc2UgKGdldHNwbmFtKCkgYW5kIGZyaWVuZHMpLgogCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaXggc2hhZG93IHBhc3N3b3JkIGRhdGFiYXNlLiBJdCBpcwogYXZhaWxhYmxlIG9uIHZhcmlvdXMgVW5peCB2ZXJzaW9ucy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0IGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKaW5kZXggNzE1MzIxYS4uNjA1ZDhkMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKQEAgLTMsOCArMywxMiBAQAogCiAuLiBtb2R1bGU6OiBzcWxpdGUzCiAgICA6c3lub3BzaXM6IEEgREItQVBJIDIuMCBpbXBsZW1lbnRhdGlvbiB1c2luZyBTUUxpdGUgMy54LgorCiAuLiBzZWN0aW9uYXV0aG9yOjogR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3FsaXRlMy9gCisKKy0tLS0tLS0tLS0tLS0tCiAKIFNRTGl0ZSBpcyBhIEMgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGEgbGlnaHR3ZWlnaHQgZGlzay1iYXNlZCBkYXRhYmFzZSB0aGF0CiBkb2Vzbid0IHJlcXVpcmUgYSBzZXBhcmF0ZSBzZXJ2ZXIgcHJvY2VzcyBhbmQgYWxsb3dzIGFjY2Vzc2luZyB0aGUgZGF0YWJhc2UKQEAgLTUzLDcgKzU3LDcgQEAKIFVzdWFsbHkgeW91ciBTUUwgb3BlcmF0aW9ucyB3aWxsIG5lZWQgdG8gdXNlIHZhbHVlcyBmcm9tIFB5dGhvbiB2YXJpYWJsZXMuICBZb3UKIHNob3VsZG4ndCBhc3NlbWJsZSB5b3VyIHF1ZXJ5IHVzaW5nIFB5dGhvbidzIHN0cmluZyBvcGVyYXRpb25zIGJlY2F1c2UgZG9pbmcgc28KIGlzIGluc2VjdXJlOyBpdCBtYWtlcyB5b3VyIHByb2dyYW0gdnVsbmVyYWJsZSB0byBhbiBTUUwgaW5qZWN0aW9uIGF0dGFjawotKHNlZSBodHRwOi8veGtjZC5jb20vMzI3LyBmb3IgaHVtb3JvdXMgZXhhbXBsZSBvZiB3aGF0IGNhbiBnbyB3cm9uZykuCisoc2VlIGh0dHBzOi8veGtjZC5jb20vMzI3LyBmb3IgaHVtb3JvdXMgZXhhbXBsZSBvZiB3aGF0IGNhbiBnbyB3cm9uZykuCiAKIEluc3RlYWQsIHVzZSB0aGUgREItQVBJJ3MgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbi4gIFB1dCBgYD9gYCBhcyBhIHBsYWNlaG9sZGVyCiB3aGVyZXZlciB5b3Ugd2FudCB0byB1c2UgYSB2YWx1ZSwgYW5kIHRoZW4gcHJvdmlkZSBhIHR1cGxlIG9mIHZhbHVlcyBhcyB0aGUKQEAgLTk5LDcgKzEwMyw3IEBACiAgICAgICBUaGUgcHlzcWxpdGUgd2ViIHBhZ2UgLS0gc3FsaXRlMyBpcyBkZXZlbG9wZWQgZXh0ZXJuYWxseSB1bmRlciB0aGUgbmFtZQogICAgICAgInB5c3FsaXRlIi4KIAotICAgaHR0cDovL3d3dy5zcWxpdGUub3JnCisgICBodHRwczovL3d3dy5zcWxpdGUub3JnCiAgICAgICBUaGUgU1FMaXRlIHdlYiBwYWdlOyB0aGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgdGhlIHN5bnRheCBhbmQgdGhlCiAgICAgICBhdmFpbGFibGUgZGF0YSB0eXBlcyBmb3IgdGhlIHN1cHBvcnRlZCBTUUwgZGlhbGVjdC4KIApAQCAtMTkwLDYgKzE5NCwxMSBAQAogICAgYW55IGNvbWJpbmF0aW9uIG9mIDpjb25zdDpgUEFSU0VfREVDTFRZUEVTYCBhbmQgOmNvbnN0OmBQQVJTRV9DT0xOQU1FU2AgdG8gdHVybgogICAgdHlwZSBkZXRlY3Rpb24gb24uCiAKKyAgIEJ5IGRlZmF1bHQsICpjaGVja19zYW1lX3RocmVhZCogaXMgOmNvbnN0OmBUcnVlYCBhbmQgb25seSB0aGUgY3JlYXRpbmcgdGhyZWFkIG1heQorICAgdXNlIHRoZSBjb25uZWN0aW9uLiBJZiBzZXQgOmNvbnN0OmBGYWxzZWAsIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uIG1heSBiZSBzaGFyZWQKKyAgIGFjcm9zcyBtdWx0aXBsZSB0aHJlYWRzLiBXaGVuIHVzaW5nIG11bHRpcGxlIHRocmVhZHMgd2l0aCB0aGUgc2FtZSBjb25uZWN0aW9uCisgICB3cml0aW5nIG9wZXJhdGlvbnMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgYnkgdGhlIHVzZXIgdG8gYXZvaWQgZGF0YSBjb3JydXB0aW9uLgorCiAgICBCeSBkZWZhdWx0LCB0aGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIHVzZXMgaXRzIDpjbGFzczpgQ29ubmVjdGlvbmAgY2xhc3MgZm9yIHRoZQogICAgY29ubmVjdCBjYWxsLiAgWW91IGNhbiwgaG93ZXZlciwgc3ViY2xhc3MgdGhlIDpjbGFzczpgQ29ubmVjdGlvbmAgY2xhc3MgYW5kIG1ha2UKICAgIDpmdW5jOmBjb25uZWN0YCB1c2UgeW91ciBjbGFzcyBpbnN0ZWFkIGJ5IHByb3ZpZGluZyB5b3VyIGNsYXNzIGZvciB0aGUgKmZhY3RvcnkqCkBAIC0yMDksNyArMjE4LDcgQEAKICAgICAgICBkYiA9IHNxbGl0ZTMuY29ubmVjdCgnZmlsZTpwYXRoL3RvL2RhdGFiYXNlP21vZGU9cm8nLCB1cmk9VHJ1ZSkKIAogICAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZlYXR1cmUsIGluY2x1ZGluZyBhIGxpc3Qgb2YgcmVjb2duaXplZCBvcHRpb25zLCBjYW4KLSAgIGJlIGZvdW5kIGluIHRoZSBgU1FMaXRlIFVSSSBkb2N1bWVudGF0aW9uIDxodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdXJpLmh0bWw+YF8uCisgICBiZSBmb3VuZCBpbiB0aGUgYFNRTGl0ZSBVUkkgZG9jdW1lbnRhdGlvbiA8aHR0cHM6Ly93d3cuc3FsaXRlLm9yZy91cmkuaHRtbD5gXy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKICAgICAgIEFkZGVkIHRoZSAqdXJpKiBwYXJhbWV0ZXIuCkBAIC0zMDAsMzIgKzMwOSwzNCBAQAogICAgICAgY2FsbCA6bWV0aDpgY29tbWl0YC4gSWYgeW91IGp1c3QgY2xvc2UgeW91ciBkYXRhYmFzZSBjb25uZWN0aW9uIHdpdGhvdXQKICAgICAgIGNhbGxpbmcgOm1ldGg6YGNvbW1pdGAgZmlyc3QsIHlvdXIgY2hhbmdlcyB3aWxsIGJlIGxvc3QhCiAKLSAgIC4uIG1ldGhvZDo6IGV4ZWN1dGUoc3FsLCBbcGFyYW1ldGVyc10pCisgICAuLiBtZXRob2Q6OiBleGVjdXRlKHNxbFssIHBhcmFtZXRlcnNdKQogCi0gICAgICBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgc2hvcnRjdXQgdGhhdCBjcmVhdGVzIGFuIGludGVybWVkaWF0ZSBjdXJzb3Igb2JqZWN0IGJ5Ci0gICAgICBjYWxsaW5nIHRoZSBjdXJzb3IgbWV0aG9kLCB0aGVuIGNhbGxzIHRoZSBjdXJzb3IncyA6bWV0aDpgZXhlY3V0ZQotICAgICAgPEN1cnNvci5leGVjdXRlPmAgbWV0aG9kIHdpdGggdGhlIHBhcmFtZXRlcnMgZ2l2ZW4uCisgICAgICBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgc2hvcnRjdXQgdGhhdCBjcmVhdGVzIGEgY3Vyc29yIG9iamVjdCBieSBjYWxsaW5nCisgICAgICB0aGUgOm1ldGg6YH5Db25uZWN0aW9uLmN1cnNvcmAgbWV0aG9kLCBjYWxscyB0aGUgY3Vyc29yJ3MKKyAgICAgIDptZXRoOmB+Q3Vyc29yLmV4ZWN1dGVgIG1ldGhvZCB3aXRoIHRoZSAqcGFyYW1ldGVycyogZ2l2ZW4sIGFuZCByZXR1cm5zCisgICAgICB0aGUgY3Vyc29yLgogCisgICAuLiBtZXRob2Q6OiBleGVjdXRlbWFueShzcWxbLCBwYXJhbWV0ZXJzXSkKIAotICAgLi4gbWV0aG9kOjogZXhlY3V0ZW1hbnkoc3FsLCBbcGFyYW1ldGVyc10pCi0KLSAgICAgIFRoaXMgaXMgYSBub25zdGFuZGFyZCBzaG9ydGN1dCB0aGF0IGNyZWF0ZXMgYW4gaW50ZXJtZWRpYXRlIGN1cnNvciBvYmplY3QgYnkKLSAgICAgIGNhbGxpbmcgdGhlIGN1cnNvciBtZXRob2QsIHRoZW4gY2FsbHMgdGhlIGN1cnNvcidzIDptZXRoOmBleGVjdXRlbWFueQotICAgICAgPEN1cnNvci5leGVjdXRlbWFueT5gIG1ldGhvZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLgorICAgICAgVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHNob3J0Y3V0IHRoYXQgY3JlYXRlcyBhIGN1cnNvciBvYmplY3QgYnkKKyAgICAgIGNhbGxpbmcgdGhlIDptZXRoOmB+Q29ubmVjdGlvbi5jdXJzb3JgIG1ldGhvZCwgY2FsbHMgdGhlIGN1cnNvcidzCisgICAgICA6bWV0aDpgfkN1cnNvci5leGVjdXRlbWFueWAgbWV0aG9kIHdpdGggdGhlICpwYXJhbWV0ZXJzKiBnaXZlbiwgYW5kCisgICAgICByZXR1cm5zIHRoZSBjdXJzb3IuCiAKICAgIC4uIG1ldGhvZDo6IGV4ZWN1dGVzY3JpcHQoc3FsX3NjcmlwdCkKIAotICAgICAgVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHNob3J0Y3V0IHRoYXQgY3JlYXRlcyBhbiBpbnRlcm1lZGlhdGUgY3Vyc29yIG9iamVjdCBieQotICAgICAgY2FsbGluZyB0aGUgY3Vyc29yIG1ldGhvZCwgdGhlbiBjYWxscyB0aGUgY3Vyc29yJ3MgOm1ldGg6YGV4ZWN1dGVzY3JpcHQKLSAgICAgIDxDdXJzb3IuZXhlY3V0ZXNjcmlwdD5gIG1ldGhvZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLgotCisgICAgICBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgc2hvcnRjdXQgdGhhdCBjcmVhdGVzIGEgY3Vyc29yIG9iamVjdCBieQorICAgICAgY2FsbGluZyB0aGUgOm1ldGg6YH5Db25uZWN0aW9uLmN1cnNvcmAgbWV0aG9kLCBjYWxscyB0aGUgY3Vyc29yJ3MKKyAgICAgIDptZXRoOmB+Q3Vyc29yLmV4ZWN1dGVzY3JpcHRgIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiAqc3FsX3NjcmlwdCosIGFuZAorICAgICAgcmV0dXJucyB0aGUgY3Vyc29yLgogCiAgICAuLiBtZXRob2Q6OiBjcmVhdGVfZnVuY3Rpb24obmFtZSwgbnVtX3BhcmFtcywgZnVuYykKIAogICAgICAgQ3JlYXRlcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiB0aGF0IHlvdSBjYW4gbGF0ZXIgdXNlIGZyb20gd2l0aGluIFNRTAogICAgICAgc3RhdGVtZW50cyB1bmRlciB0aGUgZnVuY3Rpb24gbmFtZSAqbmFtZSouICpudW1fcGFyYW1zKiBpcyB0aGUgbnVtYmVyIG9mCi0gICAgICBwYXJhbWV0ZXJzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLCBhbmQgKmZ1bmMqIGlzIGEgUHl0aG9uIGNhbGxhYmxlIHRoYXQgaXMgY2FsbGVkCi0gICAgICBhcyB0aGUgU1FMIGZ1bmN0aW9uLgorICAgICAgcGFyYW1ldGVycyB0aGUgZnVuY3Rpb24gYWNjZXB0cyAoaWYgKm51bV9wYXJhbXMqIGlzIC0xLCB0aGUgZnVuY3Rpb24gbWF5CisgICAgICB0YWtlIGFueSBudW1iZXIgb2YgYXJndW1lbnRzKSwgYW5kICpmdW5jKiBpcyBhIFB5dGhvbiBjYWxsYWJsZSB0aGF0IGlzCisgICAgICBjYWxsZWQgYXMgdGhlIFNRTCBmdW5jdGlvbi4KIAogICAgICAgVGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW55IG9mIHRoZSB0eXBlcyBzdXBwb3J0ZWQgYnkgU1FMaXRlOiBieXRlcywgc3RyLCBpbnQsCiAgICAgICBmbG9hdCBhbmQgTm9uZS4KQEAgLTM0MCw3ICszNTEsOCBAQAogICAgICAgQ3JlYXRlcyBhIHVzZXItZGVmaW5lZCBhZ2dyZWdhdGUgZnVuY3Rpb24uCiAKICAgICAgIFRoZSBhZ2dyZWdhdGUgY2xhc3MgbXVzdCBpbXBsZW1lbnQgYSBgYHN0ZXBgYCBtZXRob2QsIHdoaWNoIGFjY2VwdHMgdGhlIG51bWJlcgotICAgICAgb2YgcGFyYW1ldGVycyAqbnVtX3BhcmFtcyosIGFuZCBhIGBgZmluYWxpemVgYCBtZXRob2Qgd2hpY2ggd2lsbCByZXR1cm4gdGhlCisgICAgICBvZiBwYXJhbWV0ZXJzICpudW1fcGFyYW1zKiAoaWYgKm51bV9wYXJhbXMqIGlzIC0xLCB0aGUgZnVuY3Rpb24gbWF5IHRha2UKKyAgICAgIGFueSBudW1iZXIgb2YgYXJndW1lbnRzKSwgYW5kIGEgYGBmaW5hbGl6ZWBgIG1ldGhvZCB3aGljaCB3aWxsIHJldHVybiB0aGUKICAgICAgIGZpbmFsIHJlc3VsdCBvZiB0aGUgYWdncmVnYXRlLgogCiAgICAgICBUaGUgYGBmaW5hbGl6ZWBgIG1ldGhvZCBjYW4gcmV0dXJuIGFueSBvZiB0aGUgdHlwZXMgc3VwcG9ydGVkIGJ5IFNRTGl0ZToKQEAgLTQ3NywxMCArNDg5LDYgQEAKICAgICAgIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSB3aWxsIHJldHVybiBVbmljb2RlIG9iamVjdHMgZm9yIGBgVEVYVGBgLiBJZiB5b3Ugd2FudCB0bwogICAgICAgcmV0dXJuIGJ5dGVzdHJpbmdzIGluc3RlYWQsIHlvdSBjYW4gc2V0IGl0IHRvIDpjbGFzczpgYnl0ZXNgLgogCi0gICAgICBGb3IgZWZmaWNpZW5jeSByZWFzb25zLCB0aGVyZSdzIGFsc28gYSB3YXkgdG8gcmV0dXJuIDpjbGFzczpgc3RyYCBvYmplY3RzCi0gICAgICBvbmx5IGZvciBub24tQVNDSUkgZGF0YSwgYW5kIDpjbGFzczpgYnl0ZXNgIG90aGVyd2lzZS4gVG8gYWN0aXZhdGUgaXQsIHNldAotICAgICAgdGhpcyBhdHRyaWJ1dGUgdG8gOmNvbnN0OmBzcWxpdGUzLk9wdGltaXplZFVuaWNvZGVgLgotCiAgICAgICBZb3UgY2FuIGFsc28gc2V0IGl0IHRvIGFueSBvdGhlciBjYWxsYWJsZSB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgYnl0ZXN0cmluZwogICAgICAgcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2JqZWN0LgogCkBAIC00OTUsNyArNTAzLDcgQEAKICAgICAgIGRlbGV0ZWQgc2luY2UgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gd2FzIG9wZW5lZC4KIAogCi0gICAuLiBhdHRyaWJ1dGU6OiBpdGVyZHVtcAorICAgLi4gbWV0aG9kOjogaXRlcmR1bXAKIAogICAgICAgUmV0dXJucyBhbiBpdGVyYXRvciB0byBkdW1wIHRoZSBkYXRhYmFzZSBpbiBhbiBTUUwgdGV4dCBmb3JtYXQuICBVc2VmdWwgd2hlbgogICAgICAgc2F2aW5nIGFuIGluLW1lbW9yeSBkYXRhYmFzZSBmb3IgbGF0ZXIgcmVzdG9yYXRpb24uICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzCkBAIC01MDUsNyArNTEzLDcgQEAKICAgICAgIEV4YW1wbGU6OgogCiAgICAgICAgICAjIENvbnZlcnQgZmlsZSBleGlzdGluZ19kYi5kYiB0byBTUUwgZHVtcCBmaWxlIGR1bXAuc3FsCi0gICAgICAgICBpbXBvcnQgc3FsaXRlMywgb3MKKyAgICAgICAgIGltcG9ydCBzcWxpdGUzCiAKICAgICAgICAgIGNvbiA9IHNxbGl0ZTMuY29ubmVjdCgnZXhpc3RpbmdfZGIuZGInKQogICAgICAgICAgd2l0aCBvcGVuKCdkdW1wLnNxbCcsICd3JykgYXMgZjoKQEAgLTUyMiw3ICs1MzAsNyBAQAogCiAgICBBIDpjbGFzczpgQ3Vyc29yYCBpbnN0YW5jZSBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzLgogCi0gICAuLiBtZXRob2Q6OiBleGVjdXRlKHNxbCwgW3BhcmFtZXRlcnNdKQorICAgLi4gbWV0aG9kOjogZXhlY3V0ZShzcWxbLCBwYXJhbWV0ZXJzXSkKIAogICAgICAgRXhlY3V0ZXMgYW4gU1FMIHN0YXRlbWVudC4gVGhlIFNRTCBzdGF0ZW1lbnQgbWF5IGJlIHBhcmFtZXRlcml6ZWQgKGkuIGUuCiAgICAgICBwbGFjZWhvbGRlcnMgaW5zdGVhZCBvZiBTUUwgbGl0ZXJhbHMpLiBUaGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIHN1cHBvcnRzIHR3bwpAQCAtNTM0LDcgKzU0Miw3IEBACiAgICAgICAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL3NxbGl0ZTMvZXhlY3V0ZV8xLnB5CiAKICAgICAgIDptZXRoOmBleGVjdXRlYCB3aWxsIG9ubHkgZXhlY3V0ZSBhIHNpbmdsZSBTUUwgc3RhdGVtZW50LiBJZiB5b3UgdHJ5IHRvIGV4ZWN1dGUKLSAgICAgIG1vcmUgdGhhbiBvbmUgc3RhdGVtZW50IHdpdGggaXQsIGl0IHdpbGwgcmFpc2UgYSBXYXJuaW5nLiBVc2UKKyAgICAgIG1vcmUgdGhhbiBvbmUgc3RhdGVtZW50IHdpdGggaXQsIGl0IHdpbGwgcmFpc2UgYW4gYGBzcWxpdGUzLldhcm5pbmdgYC4gVXNlCiAgICAgICA6bWV0aDpgZXhlY3V0ZXNjcmlwdGAgaWYgeW91IHdhbnQgdG8gZXhlY3V0ZSBtdWx0aXBsZSBTUUwgc3RhdGVtZW50cyB3aXRoIG9uZQogICAgICAgY2FsbC4KIApAQCAtNTQyLDggKzU1MCw4IEBACiAgICAuLiBtZXRob2Q6OiBleGVjdXRlbWFueShzcWwsIHNlcV9vZl9wYXJhbWV0ZXJzKQogCiAgICAgICBFeGVjdXRlcyBhbiBTUUwgY29tbWFuZCBhZ2FpbnN0IGFsbCBwYXJhbWV0ZXIgc2VxdWVuY2VzIG9yIG1hcHBpbmdzIGZvdW5kIGluCi0gICAgICB0aGUgc2VxdWVuY2UgKnNxbCouICBUaGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIGFsc28gYWxsb3dzIHVzaW5nIGFuCi0gICAgICA6dGVybTpgaXRlcmF0b3JgIHlpZWxkaW5nIHBhcmFtZXRlcnMgaW5zdGVhZCBvZiBhIHNlcXVlbmNlLgorICAgICAgdGhlIHNlcXVlbmNlICpzZXFfb2ZfcGFyYW1ldGVycyouICBUaGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIGFsc28gYWxsb3dzCisgICAgICB1c2luZyBhbiA6dGVybTpgaXRlcmF0b3JgIHlpZWxkaW5nIHBhcmFtZXRlcnMgaW5zdGVhZCBvZiBhIHNlcXVlbmNlLgogCiAgICAgICAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL3NxbGl0ZTMvZXhlY3V0ZW1hbnlfMS5weQogCkBAIC01NTgsNyArNTY2LDcgQEAKICAgICAgIGF0IG9uY2UuIEl0IGlzc3VlcyBhIGBgQ09NTUlUYGAgc3RhdGVtZW50IGZpcnN0LCB0aGVuIGV4ZWN1dGVzIHRoZSBTUUwgc2NyaXB0IGl0CiAgICAgICBnZXRzIGFzIGEgcGFyYW1ldGVyLgogCi0gICAgICAqc3FsX3NjcmlwdCogY2FuIGJlIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgc3RyYCBvciA6Y2xhc3M6YGJ5dGVzYC4KKyAgICAgICpzcWxfc2NyaXB0KiBjYW4gYmUgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBzdHJgLgogCiAgICAgICBFeGFtcGxlOgogCkBAIC01OTMsNiArNjAxLDEyIEBACiAgICAgICB0aGUgY3Vyc29yJ3MgYXJyYXlzaXplIGF0dHJpYnV0ZSBjYW4gYWZmZWN0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzIG9wZXJhdGlvbi4KICAgICAgIEFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQgd2hlbiBubyByb3dzIGFyZSBhdmFpbGFibGUuCiAKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQ2xvc2UgdGhlIGN1cnNvciBub3cgKHJhdGhlciB0aGFuIHdoZW5ldmVyIGBgX19kZWxfX2BgIGlzIGNhbGxlZCkuCisKKyAgICAgIFRoZSBjdXJzb3Igd2lsbCBiZSB1bnVzYWJsZSBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZDsgYSBgYFByb2dyYW1taW5nRXJyb3JgYAorICAgICAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIGlmIGFueSBvcGVyYXRpb24gaXMgYXR0ZW1wdGVkIHdpdGggdGhlIGN1cnNvci4KIAogICAgLi4gYXR0cmlidXRlOjogcm93Y291bnQKIApAQCAtNjI3LDYgKzY0MSwxOCBAQAogCiAgICAgICBJdCBpcyBzZXQgZm9yIGBgU0VMRUNUYGAgc3RhdGVtZW50cyB3aXRob3V0IGFueSBtYXRjaGluZyByb3dzIGFzIHdlbGwuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvbm5lY3Rpb24KKworICAgICAgVGhpcyByZWFkLW9ubHkgYXR0cmlidXRlIHByb3ZpZGVzIHRoZSBTUUxpdGUgZGF0YWJhc2UgOmNsYXNzOmBDb25uZWN0aW9uYAorICAgICAgdXNlZCBieSB0aGUgOmNsYXNzOmBDdXJzb3JgIG9iamVjdC4gIEEgOmNsYXNzOmBDdXJzb3JgIG9iamVjdCBjcmVhdGVkIGJ5CisgICAgICBjYWxsaW5nIDptZXRoOmBjb24uY3Vyc29yKCkgPENvbm5lY3Rpb24uY3Vyc29yPmAgd2lsbCBoYXZlIGEKKyAgICAgIDphdHRyOmBjb25uZWN0aW9uYCBhdHRyaWJ1dGUgdGhhdCByZWZlcnMgdG8gKmNvbio6OgorCisgICAgICAgICA+Pj4gY29uID0gc3FsaXRlMy5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgICA+Pj4gY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgICA+Pj4gY3VyLmNvbm5lY3Rpb24gPT0gY29uCisgICAgICAgICBUcnVlCisKIC4uIF9zcWxpdGUzLXJvdy1vYmplY3RzOgogCiBSb3cgT2JqZWN0cwpAQCAtNjQ5LDYgKzY3NSw5IEBACiAgICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBjb2x1bW4gbmFtZXMuIEltbWVkaWF0ZWx5IGFmdGVyIGEgcXVlcnksCiAgICAgICBpdCBpcyB0aGUgZmlyc3QgbWVtYmVyIG9mIGVhY2ggdHVwbGUgaW4gOmF0dHI6YEN1cnNvci5kZXNjcmlwdGlvbmAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCBzdXBwb3J0IG9mIHNsaWNpbmcuCisKIExldCdzIGFzc3VtZSB3ZSBpbml0aWFsaXplIGEgdGFibGUgYXMgaW4gdGhlIGV4YW1wbGUgZ2l2ZW4gYWJvdmU6OgogCiAgICBjb25uID0gc3FsaXRlMy5jb25uZWN0KCI6bWVtb3J5OiIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zc2wucnN0IGIvRG9jL2xpYnJhcnkvc3NsLnJzdAppbmRleCBiMGNmNGViLi41NzkyZDBkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zc2wucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NzbC5yc3QKQEAgLTcsMTMgKzcsMTIgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEJpbGwgSmFuc3NlbiA8YmlsbC5qYW5zc2VuQGdtYWlsLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiAgQmlsbCBKYW5zc2VuIDxiaWxsLmphbnNzZW5AZ21haWwuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zc2wucHlgCiAKIC4uIGluZGV4Ojogc2luZ2xlOiBPcGVuU1NMOyAodXNlIGluIG1vZHVsZSBzc2wpCiAKIC4uIGluZGV4OjogVExTLCBTU0wsIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSwgU2VjdXJlIFNvY2tldHMgTGF5ZXIKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3NsLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChvZnRlbiBrbm93biBhcyAiU2VjdXJlCkBAIC0yMDYsNyArMjA1LDcgQEAKIAogICAgVGhlICpjaXBoZXJzKiBwYXJhbWV0ZXIgc2V0cyB0aGUgYXZhaWxhYmxlIGNpcGhlcnMgZm9yIHRoaXMgU1NMIG9iamVjdC4KICAgIEl0IHNob3VsZCBiZSBhIHN0cmluZyBpbiB0aGUgYE9wZW5TU0wgY2lwaGVyIGxpc3QgZm9ybWF0Ci0gICA8aHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sI0NJUEhFUl9MSVNUX0ZPUk1BVD5gXy4KKyAgIDxodHRwczovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL2FwcHMvY2lwaGVycy5odG1sI0NJUEhFUi1MSVNULUZPUk1BVD5gXy4KIAogICAgVGhlIHBhcmFtZXRlciBgYGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0YGAgc3BlY2lmaWVzIHdoZXRoZXIgdG8gZG8gdGhlIFNTTAogICAgaGFuZHNoYWtlIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgZG9pbmcgYSA6bWV0aDpgc29ja2V0LmNvbm5lY3RgLCBvciB3aGV0aGVyIHRoZQpAQCAtMjk2LDcgKzI5NSw3IEBACiAKICAgIFJlYWQgdGhlIFdpa2lwZWRpYSBhcnRpY2xlLCBgQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkb3JhbmRvbSBudW1iZXIKICAgIGdlbmVyYXRvciAoQ1NQUk5HKQotICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3J5cHRvZ3JhcGhpY2FsbHlfc2VjdXJlX3BzZXVkb3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yPmBfLAorICAgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NyeXB0b2dyYXBoaWNhbGx5X3NlY3VyZV9wc2V1ZG9yYW5kb21fbnVtYmVyX2dlbmVyYXRvcj5gXywKICAgIHRvIGdldCB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgY3J5cHRvZ3JhcGhpY2FsbHkgZ2VuZXJhdG9yLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKQEAgLTMzNSw2ICszMzQsOCBAQAogICAgU2VlIGh0dHA6Ly9lZ2Quc291cmNlZm9yZ2UubmV0LyBvciBodHRwOi8vcHJuZ2Quc291cmNlZm9yZ2UubmV0LyBmb3Igc291cmNlcwogICAgb2YgZW50cm9weS1nYXRoZXJpbmcgZGFlbW9ucy4KIAorICAgQXZhaWxhYmlsaXR5OiBub3QgYXZhaWxhYmxlIHdpdGggTGlicmVTU0wuCisKIC4uIGZ1bmN0aW9uOjogUkFORF9hZGQoYnl0ZXMsIGVudHJvcHkpCiAKICAgIE1peCB0aGUgZ2l2ZW4gKmJ5dGVzKiBpbnRvIHRoZSBTU0wgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgVGhlCkBAIC0zNDIsNiArMzQzLDkgQEAKICAgIHN0cmluZyAoc28geW91IGNhbiBhbHdheXMgdXNlIDpjb25zdDpgMC4wYCkuICBTZWUgOnJmYzpgMTc1MGAgZm9yIG1vcmUKICAgIGluZm9ybWF0aW9uIG9uIHNvdXJjZXMgb2YgZW50cm9weS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFdyaXRhYmxlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaXMgbm93IGFjY2VwdGVkLgorCiBDZXJ0aWZpY2F0ZSBoYW5kbGluZwogXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMzUwLDEwICszNTQsOSBAQAogICAgVmVyaWZ5IHRoYXQgKmNlcnQqIChpbiBkZWNvZGVkIGZvcm1hdCBhcyByZXR1cm5lZCBieQogICAgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGApIG1hdGNoZXMgdGhlIGdpdmVuICpob3N0bmFtZSouICBUaGUgcnVsZXMKICAgIGFwcGxpZWQgYXJlIHRob3NlIGZvciBjaGVja2luZyB0aGUgaWRlbnRpdHkgb2YgSFRUUFMgc2VydmVycyBhcyBvdXRsaW5lZAotICAgaW4gOnJmYzpgMjgxOGAgYW5kIDpyZmM6YDYxMjVgLCBleGNlcHQgdGhhdCBJUCBhZGRyZXNzZXMgYXJlIG5vdCBjdXJyZW50bHkKLSAgIHN1cHBvcnRlZC4gSW4gYWRkaXRpb24gdG8gSFRUUFMsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHN1aXRhYmxlIGZvcgotICAgY2hlY2tpbmcgdGhlIGlkZW50aXR5IG9mIHNlcnZlcnMgaW4gdmFyaW91cyBTU0wtYmFzZWQgcHJvdG9jb2xzIHN1Y2ggYXMKLSAgIEZUUFMsIElNQVBTLCBQT1BTIGFuZCBvdGhlcnMuCisgICBpbiA6cmZjOmAyODE4YCBhbmQgOnJmYzpgNjEyNWAuICBJbiBhZGRpdGlvbiB0byBIVFRQUywgdGhpcyBmdW5jdGlvbgorICAgc2hvdWxkIGJlIHN1aXRhYmxlIGZvciBjaGVja2luZyB0aGUgaWRlbnRpdHkgb2Ygc2VydmVycyBpbiB2YXJpb3VzCisgICBTU0wtYmFzZWQgcHJvdG9jb2xzIHN1Y2ggYXMgRlRQUywgSU1BUFMsIFBPUFMgYW5kIG90aGVycy4KIAogICAgOmV4YzpgQ2VydGlmaWNhdGVFcnJvcmAgaXMgcmFpc2VkIG9uIGZhaWx1cmUuIE9uIHN1Y2Nlc3MsIHRoZSBmdW5jdGlvbgogICAgcmV0dXJucyBub3RoaW5nOjoKQEAgLTM3NSwyMiArMzc4LDM4IEBACiAgICAgICBJRE4gQS1sYWJlbHMgc3VjaCBhcyBgYHd3dyoueG4tLXB0aG9uLWt2YS5vcmdgYCBhcmUgc3RpbGwgc3VwcG9ydGVkLAogICAgICAgYnV0IGBgeCoucHl0aG9uLm9yZ2BgIG5vIGxvbmdlciBtYXRjaGVzIGBgeG4tLXRkYS5weXRob24ub3JnYGAuCiAKLS4uIGZ1bmN0aW9uOjogY2VydF90aW1lX3RvX3NlY29uZHModGltZXN0cmluZykKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBNYXRjaGluZyBvZiBJUCBhZGRyZXNzZXMsIHdoZW4gcHJlc2VudCBpbiB0aGUgc3ViamVjdEFsdE5hbWUgZmllbGQKKyAgICAgIG9mIHRoZSBjZXJ0aWZpY2F0ZSwgaXMgbm93IHN1cHBvcnRlZC4KIAotICAgUmV0dXJucyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGNvbnRhaW5pbmcgYSBub3JtYWwgc2Vjb25kcy1hZnRlci10aGUtZXBvY2gKLSAgIHRpbWUgdmFsdWUsIGdpdmVuIHRoZSB0aW1lLXN0cmluZyByZXByZXNlbnRpbmcgdGhlICJub3RCZWZvcmUiIG9yICJub3RBZnRlciIKLSAgIGRhdGUgZnJvbSBhIGNlcnRpZmljYXRlLgorLi4gZnVuY3Rpb246OiBjZXJ0X3RpbWVfdG9fc2Vjb25kcyhjZXJ0X3RpbWUpCiAKLSAgIEhlcmUncyBhbiBleGFtcGxlOjoKKyAgIFJldHVybiB0aGUgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBFcG9jaCwgZ2l2ZW4gdGhlIGBgY2VydF90aW1lYGAKKyAgIHN0cmluZyByZXByZXNlbnRpbmcgdGhlICJub3RCZWZvcmUiIG9yICJub3RBZnRlciIgZGF0ZSBmcm9tIGEKKyAgIGNlcnRpZmljYXRlIGluIGBgIiViICVkICVIOiVNOiVTICVZICVaImBgIHN0cnB0aW1lIGZvcm1hdCAoQworICAgbG9jYWxlKS4KIAotICAgICA+Pj4gaW1wb3J0IHNzbAotICAgICA+Pj4gc3NsLmNlcnRfdGltZV90b19zZWNvbmRzKCJNYXkgIDkgMDA6MDA6MDAgMjAwNyBHTVQiKQotICAgICAxMTc4Njk0MDAwLjAKLSAgICAgPj4+IGltcG9ydCB0aW1lCi0gICAgID4+PiB0aW1lLmN0aW1lKHNzbC5jZXJ0X3RpbWVfdG9fc2Vjb25kcygiTWF5ICA5IDAwOjAwOjAwIDIwMDcgR01UIikpCi0gICAgICdXZWQgTWF5ICA5IDAwOjAwOjAwIDIwMDcnCisgICBIZXJlJ3MgYW4gZXhhbXBsZToKIAotLi4gZnVuY3Rpb246OiBnZXRfc2VydmVyX2NlcnRpZmljYXRlKGFkZHIsIHNzbF92ZXJzaW9uPVBST1RPQ09MX1NTTHYzLCBjYV9jZXJ0cz1Ob25lKQorICAgLi4gZG9jdGVzdDo6IG5ld2NvbnRleHQKKworICAgICAgPj4+IGltcG9ydCBzc2wKKyAgICAgID4+PiB0aW1lc3RhbXAgPSBzc2wuY2VydF90aW1lX3RvX3NlY29uZHMoIkphbiAgNSAwOTozNDo0MyAyMDE4IEdNVCIpCisgICAgICA+Pj4gdGltZXN0YW1wCisgICAgICAxNTE1MTQ0ODgzCisgICAgICA+Pj4gZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKyAgICAgID4+PiBwcmludChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHRpbWVzdGFtcCkpCisgICAgICAyMDE4LTAxLTA1IDA5OjM0OjQzCisKKyAgICJub3RCZWZvcmUiIG9yICJub3RBZnRlciIgZGF0ZXMgbXVzdCB1c2UgR01UICg6cmZjOmA1MjgwYCkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBJbnRlcnByZXQgdGhlIGlucHV0IHRpbWUgYXMgYSB0aW1lIGluIFVUQyBhcyBzcGVjaWZpZWQgYnkgJ0dNVCcKKyAgICAgIHRpbWV6b25lIGluIHRoZSBpbnB1dCBzdHJpbmcuIExvY2FsIHRpbWV6b25lIHdhcyB1c2VkCisgICAgICBwcmV2aW91c2x5LiBSZXR1cm4gYW4gaW50ZWdlciAobm8gZnJhY3Rpb25zIG9mIGEgc2Vjb25kIGluIHRoZQorICAgICAgaW5wdXQgZm9ybWF0KQorCisuLiBmdW5jdGlvbjo6IGdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoYWRkciwgc3NsX3ZlcnNpb249UFJPVE9DT0xfU1NMdjIzLCBjYV9jZXJ0cz1Ob25lKQogCiAgICBHaXZlbiB0aGUgYWRkcmVzcyBgYGFkZHJgYCBvZiBhbiBTU0wtcHJvdGVjdGVkIHNlcnZlciwgYXMgYSAoKmhvc3RuYW1lKiwKICAgICpwb3J0LW51bWJlciopIHBhaXIsIGZldGNoZXMgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLCBhbmQgcmV0dXJucyBpdCBhcyBhCkBAIC00MDQsNiArNDIzLDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3cgSVB2Ni1jb21wYXRpYmxlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIGRlZmF1bHQgKnNzbF92ZXJzaW9uKiBpcyBjaGFuZ2VkIGZyb20gOmRhdGE6YFBST1RPQ09MX1NTTHYzYCB0bworICAgICAgOmRhdGE6YFBST1RPQ09MX1NTTHYyM2AgZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eSB3aXRoIG1vZGVybiBzZXJ2ZXJzLgorCiAuLiBmdW5jdGlvbjo6IERFUl9jZXJ0X3RvX1BFTV9jZXJ0KERFUl9jZXJ0X2J5dGVzKQogCiAgICBHaXZlbiBhIGNlcnRpZmljYXRlIGFzIGEgREVSLWVuY29kZWQgYmxvYiBvZiBieXRlcywgcmV0dXJucyBhIFBFTS1lbmNvZGVkCkBAIC02NzEsNiArNjk0LDEzIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBkYXRhOjogSEFTX0FMUE4KKworICAgV2hldGhlciB0aGUgT3BlblNTTCBsaWJyYXJ5IGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciB0aGUgKkFwcGxpY2F0aW9uLUxheWVyCisgICBQcm90b2NvbCBOZWdvdGlhdGlvbiogVExTIGV4dGVuc2lvbiBhcyBkZXNjcmliZWQgaW4gOnJmYzpgNzMwMWAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCiAuLiBkYXRhOjogSEFTX0VDREgKIAogICAgV2hldGhlciB0aGUgT3BlblNTTCBsaWJyYXJ5IGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBFbGxpcHRpYyBDdXJ2ZS1iYXNlZApAQCAtNjkwLDcgKzcyMCw3IEBACiAKICAgIFdoZXRoZXIgdGhlIE9wZW5TU0wgbGlicmFyeSBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgKk5leHQgUHJvdG9jb2wKICAgIE5lZ290aWF0aW9uKiBhcyBkZXNjcmliZWQgaW4gdGhlIGBOUE4gZHJhZnQgc3BlY2lmaWNhdGlvbgotICAgPGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWFnbC10bHMtbmV4dHByb3RvbmVnPmBfLiBXaGVuIHRydWUsCisgICA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWFnbC10bHMtbmV4dHByb3RvbmVnPmBfLiBXaGVuIHRydWUsCiAgICB5b3UgY2FuIHVzZSB0aGUgOm1ldGg6YFNTTENvbnRleHQuc2V0X25wbl9wcm90b2NvbHNgIG1ldGhvZCB0byBhZHZlcnRpc2UKICAgIHdoaWNoIHByb3RvY29scyB5b3Ugd2FudCB0byBzdXBwb3J0LgogCkBAIC03MzgsNyArNzY4LDcgQEAKICAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl8qCiAKICAgIEFsZXJ0IERlc2NyaXB0aW9ucyBmcm9tIDpyZmM6YDUyNDZgIGFuZCBvdGhlcnMuIFRoZSBgSUFOQSBUTFMgQWxlcnQgUmVnaXN0cnkKLSAgIDxodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1wYXJhbWV0ZXJzL3Rscy1wYXJhbWV0ZXJzLnhtbCN0bHMtcGFyYW1ldGVycy02PmBfCisgICA8aHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTY+YF8KICAgIGNvbnRhaW5zIHRoaXMgbGlzdCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgUkZDcyB3aGVyZSB0aGVpciBtZWFuaW5nIGlzIGRlZmluZWQuCiAKICAgIFVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4KQEAgLTc4OCw2ICs4MTgsOCBAQAogICAgICAoYnV0IHBhc3NpbmcgYSBub24temVybyBgYGZsYWdzYGAgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQpCiAgICAtIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZW5kKClgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZGFsbCgpYCAod2l0aAogICAgICB0aGUgc2FtZSBsaW1pdGF0aW9uKQorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZGZpbGUoKWAgKGJ1dCA6bW9kOmBvcy5zZW5kZmlsZWAgd2lsbCBiZSB1c2VkCisgICAgIGZvciBwbGFpbi10ZXh0IHNvY2tldHMgb25seSwgZWxzZSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZCgpYCB3aWxsIGJlIHVzZWQpCiAgICAtIDptZXRoOmB+c29ja2V0LnNvY2tldC5zaHV0ZG93bigpYAogCiAgICBIb3dldmVyLCBzaW5jZSB0aGUgU1NMIChhbmQgVExTKSBwcm90b2NvbCBoYXMgaXRzIG93biBmcmFtaW5nIGF0b3AKQEAgLTc5OCw5ICs4MzAsMTggQEAKICAgIFVzdWFsbHksIDpjbGFzczpgU1NMU29ja2V0YCBhcmUgbm90IGNyZWF0ZWQgZGlyZWN0bHksIGJ1dCB1c2luZyB0aGUKICAgIDpmdW5jOmB3cmFwX3NvY2tldGAgZnVuY3Rpb24gb3IgdGhlIDptZXRoOmBTU0xDb250ZXh0LndyYXBfc29ja2V0YCBtZXRob2QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgOm1ldGg6YHNlbmRmaWxlYCBtZXRob2Qgd2FzIGFkZGVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIDptZXRoOmBzaHV0ZG93bmAgZG9lcyBub3QgcmVzZXQgdGhlIHNvY2tldCB0aW1lb3V0IGVhY2ggdGltZSBieXRlcworICAgICAgYXJlIHJlY2VpdmVkIG9yIHNlbnQuIFRoZSBzb2NrZXQgdGltZW91dCBpcyBub3cgdG8gbWF4aW11bSB0b3RhbCBkdXJhdGlvbgorICAgICAgb2YgdGhlIHNodXRkb3duLgorCisKIFNTTCBzb2NrZXRzIGFsc28gaGF2ZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKIAotLi4gbWV0aG9kOjogU1NMU29ja2V0LnJlYWQobGVuPTAsIGJ1ZmZlcj1Ob25lKQorLi4gbWV0aG9kOjogU1NMU29ja2V0LnJlYWQobGVuPTEwMjQsIGJ1ZmZlcj1Ob25lKQogCiAgICBSZWFkIHVwIHRvICpsZW4qIGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgU1NMIHNvY2tldCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMKICAgIGEgYGBieXRlc2BgIGluc3RhbmNlLiBJZiAqYnVmZmVyKiBpcyBzcGVjaWZpZWQsIHRoZW4gcmVhZCBpbnRvIHRoZSBidWZmZXIKQEAgLTgxMiw2ICs4NTMsMTEgQEAKICAgIEFzIGF0IGFueSB0aW1lIGEgcmUtbmVnb3RpYXRpb24gaXMgcG9zc2libGUsIGEgY2FsbCB0byA6bWV0aDpgcmVhZGAgY2FuIGFsc28KICAgIGNhdXNlIHdyaXRlIG9wZXJhdGlvbnMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgc29ja2V0IHRpbWVvdXQgaXMgbm8gbW9yZSByZXNldCBlYWNoIHRpbWUgYnl0ZXMgYXJlIHJlY2VpdmVkIG9yIHNlbnQuCisgICAgICBUaGUgc29ja2V0IHRpbWVvdXQgaXMgbm93IHRvIG1heGltdW0gdG90YWwgZHVyYXRpb24gdG8gcmVhZCB1cCB0byAqbGVuKgorICAgICAgYnl0ZXMuCisKIC4uIG1ldGhvZDo6IFNTTFNvY2tldC53cml0ZShidWYpCiAKICAgIFdyaXRlICpidWYqIHRvIHRoZSBTU0wgc29ja2V0IGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiBUaGUKQEAgLTgyMyw2ICs4NjksMTAgQEAKICAgIEFzIGF0IGFueSB0aW1lIGEgcmUtbmVnb3RpYXRpb24gaXMgcG9zc2libGUsIGEgY2FsbCB0byA6bWV0aDpgd3JpdGVgIGNhbgogICAgYWxzbyBjYXVzZSByZWFkIG9wZXJhdGlvbnMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgc29ja2V0IHRpbWVvdXQgaXMgbm8gbW9yZSByZXNldCBlYWNoIHRpbWUgYnl0ZXMgYXJlIHJlY2VpdmVkIG9yIHNlbnQuCisgICAgICBUaGUgc29ja2V0IHRpbWVvdXQgaXMgbm93IHRvIG1heGltdW0gdG90YWwgZHVyYXRpb24gdG8gd3JpdGUgKmJ1ZiouCisKIC4uIG5vdGU6OgogCiAgICBUaGUgOm1ldGg6YH5TU0xTb2NrZXQucmVhZGAgYW5kIDptZXRoOmB+U1NMU29ja2V0LndyaXRlYCBtZXRob2RzIGFyZSB0aGUKQEAgLTg0NCw2ICs4OTQsMTAgQEAKICAgICAgIDphdHRyOmB+U1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYXR0cmlidXRlIG9mIHRoZSBzb2NrZXQncwogICAgICAgOmF0dHI6YH5TU0xTb2NrZXQuY29udGV4dGAgaXMgdHJ1ZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSBzb2NrZXQgdGltZW91dCBpcyBubyBtb3JlIHJlc2V0IGVhY2ggdGltZSBieXRlcyBhcmUgcmVjZWl2ZWQgb3Igc2VudC4KKyAgICAgIFRoZSBzb2NrZXQgdGltZW91dCBpcyBub3cgdG8gbWF4aW11bSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgaGFuZHNoYWtlLgorCiAuLiBtZXRob2Q6OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoYmluYXJ5X2Zvcm09RmFsc2UpCiAKICAgIElmIHRoZXJlIGlzIG5vIGNlcnRpZmljYXRlIGZvciB0aGUgcGVlciBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLApAQCAtOTE3LDYgKzk3MSwxNyBAQAogICAgdmVyc2lvbiBvZiB0aGUgU1NMIHByb3RvY29sIHRoYXQgZGVmaW5lcyBpdHMgdXNlLCBhbmQgdGhlIG51bWJlciBvZiBzZWNyZXQKICAgIGJpdHMgYmVpbmcgdXNlZC4gIElmIG5vIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQsIHJldHVybnMgYGBOb25lYGAuCiAKKy4uIG1ldGhvZDo6IFNTTFNvY2tldC5zaGFyZWRfY2lwaGVycygpCisKKyAgIFJldHVybiB0aGUgbGlzdCBvZiBjaXBoZXJzIHNoYXJlZCBieSB0aGUgY2xpZW50IGR1cmluZyB0aGUgaGFuZHNoYWtlLiAgRWFjaAorICAgZW50cnkgb2YgdGhlIHJldHVybmVkIGxpc3QgaXMgYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZQorICAgY2lwaGVyLCB0aGUgdmVyc2lvbiBvZiB0aGUgU1NMIHByb3RvY29sIHRoYXQgZGVmaW5lcyBpdHMgdXNlLCBhbmQgdGhlIG51bWJlcgorICAgb2Ygc2VjcmV0IGJpdHMgdGhlIGNpcGhlciB1c2VzLiAgOm1ldGg6YH5TU0xTb2NrZXQuc2hhcmVkX2NpcGhlcnNgIHJldHVybnMKKyAgIGBgTm9uZWBgIGlmIG5vIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQgb3IgdGhlIHNvY2tldCBpcyBhIGNsaWVudAorICAgc29ja2V0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmNvbXByZXNzaW9uKCkKIAogICAgUmV0dXJuIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gYmVpbmcgdXNlZCBhcyBhIHN0cmluZywgb3IgYGBOb25lYGAKQEAgLTk0MCwxMiArMTAwNSwyMiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gbWV0aG9kOjogU1NMU29ja2V0LnNlbGVjdGVkX2FscG5fcHJvdG9jb2woKQorCisgICBSZXR1cm4gdGhlIHByb3RvY29sIHRoYXQgd2FzIHNlbGVjdGVkIGR1cmluZyB0aGUgVExTIGhhbmRzaGFrZS4gIElmCisgICA6bWV0aDpgU1NMQ29udGV4dC5zZXRfYWxwbl9wcm90b2NvbHNgIHdhcyBub3QgY2FsbGVkLCBpZiB0aGUgb3RoZXIgcGFydHkgZG9lcworICAgbm90IHN1cHBvcnQgQUxQTiwgaWYgdGhpcyBzb2NrZXQgZG9lcyBub3Qgc3VwcG9ydCBhbnkgb2YgdGhlIGNsaWVudCdzCisgICBwcm9wb3NlZCBwcm90b2NvbHMsIG9yIGlmIHRoZSBoYW5kc2hha2UgaGFzIG5vdCBoYXBwZW5lZCB5ZXQsIGBgTm9uZWBgIGlzCisgICByZXR1cm5lZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIC4uIG1ldGhvZDo6IFNTTFNvY2tldC5zZWxlY3RlZF9ucG5fcHJvdG9jb2woKQogCi0gICBSZXR1cm5zIHRoZSBwcm90b2NvbCB0aGF0IHdhcyBzZWxlY3RlZCBkdXJpbmcgdGhlIFRMUy9TU0wgaGFuZHNoYWtlLiBJZgotICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X25wbl9wcm90b2NvbHNgIHdhcyBub3QgY2FsbGVkLCBvciBpZiB0aGUgb3RoZXIgcGFydHkKLSAgIGRvZXMgbm90IHN1cHBvcnQgTlBOLCBvciBpZiB0aGUgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGhhcHBlbmVkLCB0aGlzIHdpbGwKLSAgIHJldHVybiBgYE5vbmVgYC4KKyAgIFJldHVybiB0aGUgaGlnaGVyLWxldmVsIHByb3RvY29sIHRoYXQgd2FzIHNlbGVjdGVkIGR1cmluZyB0aGUgVExTL1NTTAorICAgaGFuZHNoYWtlLiBJZiA6bWV0aDpgU1NMQ29udGV4dC5zZXRfbnBuX3Byb3RvY29sc2Agd2FzIG5vdCBjYWxsZWQsIG9yCisgICBpZiB0aGUgb3RoZXIgcGFydHkgZG9lcyBub3Qgc3VwcG9ydCBOUE4sIG9yIGlmIHRoZSBoYW5kc2hha2UgaGFzIG5vdCB5ZXQKKyAgIGhhcHBlbmVkLCB0aGlzIHdpbGwgcmV0dXJuIGBgTm9uZWBgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtOTU3LDYgKzEwMzIsMTYgQEAKICAgIHJldHVybmVkIHNvY2tldCBzaG91bGQgYWx3YXlzIGJlIHVzZWQgZm9yIGZ1cnRoZXIgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQogICAgb3RoZXIgc2lkZSBvZiB0aGUgY29ubmVjdGlvbiwgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsIHNvY2tldC4KIAorLi4gbWV0aG9kOjogU1NMU29ja2V0LnZlcnNpb24oKQorCisgICBSZXR1cm4gdGhlIGFjdHVhbCBTU0wgcHJvdG9jb2wgdmVyc2lvbiBuZWdvdGlhdGVkIGJ5IHRoZSBjb25uZWN0aW9uCisgICBhcyBhIHN0cmluZywgb3IgYGBOb25lYGAgaXMgbm8gc2VjdXJlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuCisgICBBcyBvZiB0aGlzIHdyaXRpbmcsIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMgaW5jbHVkZSBgYCJTU0x2MiJgYCwKKyAgIGBgIlNTTHYzImBgLCBgYCJUTFN2MSJgYCwgYGAiVExTdjEuMSJgYCBhbmQgYGAiVExTdjEuMiJgYC4KKyAgIFJlY2VudCBPcGVuU1NMIHZlcnNpb25zIG1heSBkZWZpbmUgbW9yZSByZXR1cm4gdmFsdWVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LnBlbmRpbmcoKQogCiAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxyZWFkeSBkZWNyeXB0ZWQgYnl0ZXMgYXZhaWxhYmxlIGZvciByZWFkLCBwZW5kaW5nIG9uCkBAIC0xMDg4LDcgKzExNzMsNyBAQAogICAgVGhlICpjYXBhdGgqIHN0cmluZywgaWYgcHJlc2VudCwgaXMKICAgIHRoZSBwYXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc2V2ZXJhbCBDQSBjZXJ0aWZpY2F0ZXMgaW4gUEVNIGZvcm1hdCwKICAgIGZvbGxvd2luZyBhbiBgT3BlblNTTCBzcGVjaWZpYyBsYXlvdXQKLSAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3Mvc3NsL1NTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zLmh0bWw+YF8uCisgICA8aHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9zc2wvU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMuaHRtbD5gXy4KIAogICAgVGhlICpjYWRhdGEqIG9iamVjdCwgaWYgcHJlc2VudCwgaXMgZWl0aGVyIGFuIEFTQ0lJIHN0cmluZyBvZiBvbmUgb3IgbW9yZQogICAgUEVNLWVuY29kZWQgY2VydGlmaWNhdGVzIG9yIGEgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBvZiBERVItZW5jb2RlZApAQCAtMTEyNiw3ICsxMjExLDcgQEAKIAogICAgU2V0IHRoZSBhdmFpbGFibGUgY2lwaGVycyBmb3Igc29ja2V0cyBjcmVhdGVkIHdpdGggdGhpcyBjb250ZXh0LgogICAgSXQgc2hvdWxkIGJlIGEgc3RyaW5nIGluIHRoZSBgT3BlblNTTCBjaXBoZXIgbGlzdCBmb3JtYXQKLSAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwjQ0lQSEVSX0xJU1RfRk9STUFUPmBfLgorICAgPGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwjQ0lQSEVSLUxJU1QtRk9STUFUPmBfLgogICAgSWYgbm8gY2lwaGVyIGNhbiBiZSBzZWxlY3RlZCAoYmVjYXVzZSBjb21waWxlLXRpbWUgb3B0aW9ucyBvciBvdGhlcgogICAgY29uZmlndXJhdGlvbiBmb3JiaWRzIHVzZSBvZiBhbGwgdGhlIHNwZWNpZmllZCBjaXBoZXJzKSwgYW4KICAgIDpjbGFzczpgU1NMRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgpAQCAtMTEzNSwxMyArMTIyMCwyNyBAQAogICAgICAgd2hlbiBjb25uZWN0ZWQsIHRoZSA6bWV0aDpgU1NMU29ja2V0LmNpcGhlcmAgbWV0aG9kIG9mIFNTTCBzb2NrZXRzIHdpbGwKICAgICAgIGdpdmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjaXBoZXIuCiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuc2V0X2FscG5fcHJvdG9jb2xzKHByb3RvY29scykKKworICAgU3BlY2lmeSB3aGljaCBwcm90b2NvbHMgdGhlIHNvY2tldCBzaG91bGQgYWR2ZXJ0aXNlIGR1cmluZyB0aGUgU1NML1RMUworICAgaGFuZHNoYWtlLiBJdCBzaG91bGQgYmUgYSBsaXN0IG9mIEFTQ0lJIHN0cmluZ3MsIGxpa2UgYGBbJ2h0dHAvMS4xJywKKyAgICdzcGR5LzInXWBgLCBvcmRlcmVkIGJ5IHByZWZlcmVuY2UuIFRoZSBzZWxlY3Rpb24gb2YgYSBwcm90b2NvbCB3aWxsIGhhcHBlbgorICAgZHVyaW5nIHRoZSBoYW5kc2hha2UsIGFuZCB3aWxsIHBsYXkgb3V0IGFjY29yZGluZyB0byA6cmZjOmA3MzAxYC4gQWZ0ZXIgYQorICAgc3VjY2Vzc2Z1bCBoYW5kc2hha2UsIHRoZSA6bWV0aDpgU1NMU29ja2V0LnNlbGVjdGVkX2FscG5fcHJvdG9jb2xgIG1ldGhvZCB3aWxsCisgICByZXR1cm4gdGhlIGFncmVlZC11cG9uIHByb3RvY29sLgorCisgICBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIDpkYXRhOmBIQVNfQUxQTmAgaXMKKyAgIEZhbHNlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfbnBuX3Byb3RvY29scyhwcm90b2NvbHMpCiAKICAgIFNwZWNpZnkgd2hpY2ggcHJvdG9jb2xzIHRoZSBzb2NrZXQgc2hvdWxkIGFkdmVydGlzZSBkdXJpbmcgdGhlIFNTTC9UTFMKICAgIGhhbmRzaGFrZS4gSXQgc2hvdWxkIGJlIGEgbGlzdCBvZiBzdHJpbmdzLCBsaWtlIGBgWydodHRwLzEuMScsICdzcGR5LzInXWBgLAogICAgb3JkZXJlZCBieSBwcmVmZXJlbmNlLiBUaGUgc2VsZWN0aW9uIG9mIGEgcHJvdG9jb2wgd2lsbCBoYXBwZW4gZHVyaW5nIHRoZQogICAgaGFuZHNoYWtlLCBhbmQgd2lsbCBwbGF5IG91dCBhY2NvcmRpbmcgdG8gdGhlIGBOUE4gZHJhZnQgc3BlY2lmaWNhdGlvbgotICAgPGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWFnbC10bHMtbmV4dHByb3RvbmVnPmBfLiBBZnRlciBhCisgICA8aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWFnbC10bHMtbmV4dHByb3RvbmVnPmBfLiBBZnRlciBhCiAgICBzdWNjZXNzZnVsIGhhbmRzaGFrZSwgdGhlIDptZXRoOmBTU0xTb2NrZXQuc2VsZWN0ZWRfbnBuX3Byb3RvY29sYCBtZXRob2Qgd2lsbAogICAgcmV0dXJuIHRoZSBhZ3JlZWQtdXBvbiBwcm90b2NvbC4KIApAQCAtMTE3NSw3ICsxMjc0LDcgQEAKIAogICAgRHVlIHRvIHRoZSBlYXJseSBuZWdvdGlhdGlvbiBwaGFzZSBvZiB0aGUgVExTIGNvbm5lY3Rpb24sIG9ubHkgbGltaXRlZAogICAgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyBhcmUgdXNhYmxlIGxpa2UKLSAgIDptZXRoOmBTU0xTb2NrZXQuc2VsZWN0ZWRfbnBuX3Byb3RvY29sYCBhbmQgOmF0dHI6YFNTTFNvY2tldC5jb250ZXh0YC4KKyAgIDptZXRoOmBTU0xTb2NrZXQuc2VsZWN0ZWRfYWxwbl9wcm90b2NvbGAgYW5kIDphdHRyOmBTU0xTb2NrZXQuY29udGV4dGAuCiAgICA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsCiAgICA6bWV0aDpgU1NMU29ja2V0LmNpcGhlcmAgYW5kIDptZXRoOmBTU0xTb2NrZXQuY29tcHJlc3NgIG1ldGhvZHMgcmVxdWlyZSB0aGF0CiAgICB0aGUgVExTIGNvbm5lY3Rpb24gaGFzIHByb2dyZXNzZWQgYmV5b25kIHRoZSBUTFMgQ2xpZW50IEhlbGxvIGFuZCB0aGVyZWZvcmUKQEAgLTEyNTEsMTUgKzEzNTAsMjUgQEAKICAgIHF1aXRlIHNpbWlsYXJseSB0byBIVFRQIHZpcnR1YWwgaG9zdHMuIFNwZWNpZnlpbmcgKnNlcnZlcl9ob3N0bmFtZSogd2lsbAogICAgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiAqc2VydmVyX3NpZGUqIGlzIHRydWUuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CiAgICAgICBBbHdheXMgYWxsb3cgYSBzZXJ2ZXJfaG9zdG5hbWUgdG8gYmUgcGFzc2VkLCBldmVuIGlmIE9wZW5TU0wgZG9lcyBub3QKICAgICAgIGhhdmUgU05JLgogCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LndyYXBfYmlvKGluY29taW5nLCBvdXRnb2luZywgc2VydmVyX3NpZGU9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPU5vbmUpCisKKyAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNTTE9iamVjdGAgaW5zdGFuY2UgYnkgd3JhcHBpbmcgdGhlIEJJTyBvYmplY3RzCisgICAqaW5jb21pbmcqIGFuZCAqb3V0Z29pbmcqLiBUaGUgU1NMIHJvdXRpbmVzIHdpbGwgcmVhZCBpbnB1dCBkYXRhIGZyb20gdGhlCisgICBpbmNvbWluZyBCSU8gYW5kIHdyaXRlIGRhdGEgdG8gdGhlIG91dGdvaW5nIEJJTy4KKworICAgVGhlICpzZXJ2ZXJfc2lkZSogYW5kICpzZXJ2ZXJfaG9zdG5hbWUqIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzCisgICBpbiA6bWV0aDpgU1NMQ29udGV4dC53cmFwX3NvY2tldGAuCisKIC4uIG1ldGhvZDo6IFNTTENvbnRleHQuc2Vzc2lvbl9zdGF0cygpCiAKICAgIEdldCBzdGF0aXN0aWNzIGFib3V0IHRoZSBTU0wgc2Vzc2lvbnMgY3JlYXRlZCBvciBtYW5hZ2VkIGJ5IHRoaXMgY29udGV4dC4KICAgIEEgZGljdGlvbmFyeSBpcyByZXR1cm5lZCB3aGljaCBtYXBzIHRoZSBuYW1lcyBvZiBlYWNoIGBwaWVjZSBvZiBpbmZvcm1hdGlvbgotICAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9zc2wvU1NMX0NUWF9zZXNzX251bWJlci5odG1sPmBfIHRvIHRoZWlyCisgICA8aHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9zc2wvU1NMX0NUWF9zZXNzX251bWJlci5odG1sPmBfIHRvIHRoZWlyCiAgICBudW1lcmljIHZhbHVlcy4gIEZvciBleGFtcGxlLCBoZXJlIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgaGl0cyBhbmQgbWlzc2VzCiAgICBpbiB0aGUgc2Vzc2lvbiBjYWNoZSBzaW5jZSB0aGUgY29udGV4dCB3YXMgY3JlYXRlZDo6CiAKQEAgLTE0NzUsNyArMTU4NCw3IEBACiAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgcGFzcwogICAgZWxzZToKLSAgICAgICAuLi4gIyBkbyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBTU0wgc3VwcG9ydAorICAgICAgIC4uLiAgIyBkbyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBTU0wgc3VwcG9ydAogCiBDbGllbnQtc2lkZSBvcGVyYXRpb24KIF5eXl5eXl5eXl5eXl5eXl5eXl5eXgpAQCAtMTYyNyw3ICsxNzM2LDcgQEAKIAogQW5kIGdvIGJhY2sgdG8gbGlzdGVuaW5nIGZvciBuZXcgY2xpZW50IGNvbm5lY3Rpb25zIChvZiBjb3Vyc2UsIGEgcmVhbCBzZXJ2ZXIKIHdvdWxkIHByb2JhYmx5IGhhbmRsZSBlYWNoIGNsaWVudCBjb25uZWN0aW9uIGluIGEgc2VwYXJhdGUgdGhyZWFkLCBvciBwdXQKLXRoZSBzb2NrZXRzIGluIG5vbi1ibG9ja2luZyBtb2RlIGFuZCB1c2UgYW4gZXZlbnQgbG9vcCkuCit0aGUgc29ja2V0cyBpbiA6cmVmOmBub24tYmxvY2tpbmcgbW9kZSA8c3NsLW5vbmJsb2NraW5nPmAgYW5kIHVzZSBhbiBldmVudCBsb29wKS4KIAogCiAuLiBfc3NsLW5vbmJsb2NraW5nOgpAQCAtMTY0OSw2ICsxNzU4LDEyIEBACiAgIHNvY2tldCBmaXJzdCwgYW5kIGF0dGVtcHRzIHRvICpyZWFkKiBmcm9tIHRoZSBTU0wgc29ja2V0IG1heSByZXF1aXJlCiAgIGEgcHJpb3IgKndyaXRlKiB0byB0aGUgdW5kZXJseWluZyBzb2NrZXQuCiAKKyAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKworICAgICBJbiBlYXJsaWVyIFB5dGhvbiB2ZXJzaW9ucywgdGhlIDptZXRoOmAhU1NMU29ja2V0LnNlbmRgIG1ldGhvZAorICAgICByZXR1cm5lZCB6ZXJvIGluc3RlYWQgb2YgcmFpc2luZyA6ZXhjOmBTU0xXYW50V3JpdGVFcnJvcmAgb3IKKyAgICAgOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAuCisKIC0gQ2FsbGluZyA6ZnVuYzpgfnNlbGVjdC5zZWxlY3RgIHRlbGxzIHlvdSB0aGF0IHRoZSBPUy1sZXZlbCBzb2NrZXQgY2FuIGJlCiAgIHJlYWQgZnJvbSAob3Igd3JpdHRlbiB0byksIGJ1dCBpdCBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQKICAgZGF0YSBhdCB0aGUgdXBwZXIgU1NMIGxheWVyLiAgRm9yIGV4YW1wbGUsIG9ubHkgcGFydCBvZiBhbiBTU0wgZnJhbWUgbWlnaHQKQEAgLTE2ODEsMTMgKzE3OTYsMTQzIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBUaGUgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIHN1cHBvcnRzIG5vbi1ibG9ja2luZyBTU0wgc29ja2V0cyBhbmQgcHJvdmlkZXMgYQorICAgVGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBzdXBwb3J0cyA6cmVmOmBub24tYmxvY2tpbmcgU1NMIHNvY2tldHMKKyAgIDxzc2wtbm9uYmxvY2tpbmc+YCBhbmQgcHJvdmlkZXMgYQogICAgaGlnaGVyIGxldmVsIEFQSS4gSXQgcG9sbHMgZm9yIGV2ZW50cyB1c2luZyB0aGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgYW5kCiAgICBoYW5kbGVzIDpleGM6YFNTTFdhbnRXcml0ZUVycm9yYCwgOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAgYW5kCiAgICA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGV4Y2VwdGlvbnMuIEl0IHJ1bnMgdGhlIFNTTCBoYW5kc2hha2UgYXN5bmNocm9ub3VzbHkKICAgIGFzIHdlbGwuCiAKIAorTWVtb3J5IEJJTyBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy41CisKK0V2ZXIgc2luY2UgdGhlIFNTTCBtb2R1bGUgd2FzIGludHJvZHVjZWQgaW4gUHl0aG9uIDIuNiwgdGhlIDpjbGFzczpgU1NMU29ja2V0YAorY2xhc3MgaGFzIHByb3ZpZGVkIHR3byByZWxhdGVkIGJ1dCBkaXN0aW5jdCBhcmVhcyBvZiBmdW5jdGlvbmFsaXR5OgorCistIFNTTCBwcm90b2NvbCBoYW5kbGluZworLSBOZXR3b3JrIElPCisKK1RoZSBuZXR3b3JrIElPIEFQSSBpcyBpZGVudGljYWwgdG8gdGhhdCBwcm92aWRlZCBieSA6Y2xhc3M6YHNvY2tldC5zb2NrZXRgLAorZnJvbSB3aGljaCA6Y2xhc3M6YFNTTFNvY2tldGAgYWxzbyBpbmhlcml0cy4gVGhpcyBhbGxvd3MgYW4gU1NMIHNvY2tldCB0byBiZQordXNlZCBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGEgcmVndWxhciBzb2NrZXQsIG1ha2luZyBpdCB2ZXJ5IGVhc3kgdG8gYWRkCitTU0wgc3VwcG9ydCB0byBhbiBleGlzdGluZyBhcHBsaWNhdGlvbi4KKworQ29tYmluaW5nIFNTTCBwcm90b2NvbCBoYW5kbGluZyBhbmQgbmV0d29yayBJTyB1c3VhbGx5IHdvcmtzIHdlbGwsIGJ1dCB0aGVyZQorYXJlIHNvbWUgY2FzZXMgd2hlcmUgaXQgZG9lc24ndC4gQW4gZXhhbXBsZSBpcyBhc3luYyBJTyBmcmFtZXdvcmtzIHRoYXQgd2FudCB0bwordXNlIGEgZGlmZmVyZW50IElPIG11bHRpcGxleGluZyBtb2RlbCB0aGFuIHRoZSAic2VsZWN0L3BvbGwgb24gYSBmaWxlCitkZXNjcmlwdG9yIiAocmVhZGluZXNzIGJhc2VkKSBtb2RlbCB0aGF0IGlzIGFzc3VtZWQgYnkgOmNsYXNzOmBzb2NrZXQuc29ja2V0YAorYW5kIGJ5IHRoZSBpbnRlcm5hbCBPcGVuU1NMIHNvY2tldCBJTyByb3V0aW5lcy4gVGhpcyBpcyBtb3N0bHkgcmVsZXZhbnQgZm9yCitwbGF0Zm9ybXMgbGlrZSBXaW5kb3dzIHdoZXJlIHRoaXMgbW9kZWwgaXMgbm90IGVmZmljaWVudC4gRm9yIHRoaXMgcHVycG9zZSwgYQorcmVkdWNlZCBzY29wZSB2YXJpYW50IG9mIDpjbGFzczpgU1NMU29ja2V0YCBjYWxsZWQgOmNsYXNzOmBTU0xPYmplY3RgIGlzCitwcm92aWRlZC4KKworLi4gY2xhc3M6OiBTU0xPYmplY3QKKworICAgQSByZWR1Y2VkLXNjb3BlIHZhcmlhbnQgb2YgOmNsYXNzOmBTU0xTb2NrZXRgIHJlcHJlc2VudGluZyBhbiBTU0wgcHJvdG9jb2wKKyAgIGluc3RhbmNlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgbmV0d29yayBJTyBtZXRob2RzLiBUaGlzIGNsYXNzIGlzCisgICB0eXBpY2FsbHkgdXNlZCBieSBmcmFtZXdvcmsgYXV0aG9ycyB0aGF0IHdhbnQgdG8gaW1wbGVtZW50IGFzeW5jaHJvbm91cyBJTworICAgZm9yIFNTTCB0aHJvdWdoIG1lbW9yeSBidWZmZXJzLgorCisgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYW4gaW50ZXJmYWNlIG9uIHRvcCBvZiBhIGxvdy1sZXZlbCBTU0wgb2JqZWN0IGFzCisgICBpbXBsZW1lbnRlZCBieSBPcGVuU1NMLiBUaGlzIG9iamVjdCBjYXB0dXJlcyB0aGUgc3RhdGUgb2YgYW4gU1NMIGNvbm5lY3Rpb24KKyAgIGJ1dCBkb2VzIG5vdCBwcm92aWRlIGFueSBuZXR3b3JrIElPIGl0c2VsZi4gSU8gbmVlZHMgdG8gYmUgcGVyZm9ybWVkIHRocm91Z2gKKyAgIHNlcGFyYXRlICJCSU8iIG9iamVjdHMgd2hpY2ggYXJlIE9wZW5TU0wncyBJTyBhYnN0cmFjdGlvbiBsYXllci4KKworICAgQW4gOmNsYXNzOmBTU0xPYmplY3RgIGluc3RhbmNlIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZQorICAgOm1ldGg6YH5TU0xDb250ZXh0LndyYXBfYmlvYCBtZXRob2QuIFRoaXMgbWV0aG9kIHdpbGwgY3JlYXRlIHRoZQorICAgOmNsYXNzOmBTU0xPYmplY3RgIGluc3RhbmNlIGFuZCBiaW5kIGl0IHRvIGEgcGFpciBvZiBCSU9zLiBUaGUgKmluY29taW5nKgorICAgQklPIGlzIHVzZWQgdG8gcGFzcyBkYXRhIGZyb20gUHl0aG9uIHRvIHRoZSBTU0wgcHJvdG9jb2wgaW5zdGFuY2UsIHdoaWxlIHRoZQorICAgKm91dGdvaW5nKiBCSU8gaXMgdXNlZCB0byBwYXNzIGRhdGEgdGhlIG90aGVyIHdheSBhcm91bmQuCisKKyAgIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgYXZhaWxhYmxlOgorCisgICAtIDphdHRyOmB+U1NMU29ja2V0LmNvbnRleHRgCisgICAtIDphdHRyOmB+U1NMU29ja2V0LnNlcnZlcl9zaWRlYAorICAgLSA6YXR0cjpgflNTTFNvY2tldC5zZXJ2ZXJfaG9zdG5hbWVgCisgICAtIDptZXRoOmB+U1NMU29ja2V0LnJlYWRgCisgICAtIDptZXRoOmB+U1NMU29ja2V0LndyaXRlYAorICAgLSA6bWV0aDpgflNTTFNvY2tldC5nZXRwZWVyY2VydGAKKyAgIC0gOm1ldGg6YH5TU0xTb2NrZXQuc2VsZWN0ZWRfbnBuX3Byb3RvY29sYAorICAgLSA6bWV0aDpgflNTTFNvY2tldC5jaXBoZXJgCisgICAtIDptZXRoOmB+U1NMU29ja2V0LnNoYXJlZF9jaXBoZXJzYAorICAgLSA6bWV0aDpgflNTTFNvY2tldC5jb21wcmVzc2lvbmAKKyAgIC0gOm1ldGg6YH5TU0xTb2NrZXQucGVuZGluZ2AKKyAgIC0gOm1ldGg6YH5TU0xTb2NrZXQuZG9faGFuZHNoYWtlYAorICAgLSA6bWV0aDpgflNTTFNvY2tldC51bndyYXBgCisgICAtIDptZXRoOmB+U1NMU29ja2V0LmdldF9jaGFubmVsX2JpbmRpbmdgCisKKyAgIFdoZW4gY29tcGFyZWQgdG8gOmNsYXNzOmBTU0xTb2NrZXRgLCB0aGlzIG9iamVjdCBsYWNrcyB0aGUgZm9sbG93aW5nCisgICBmZWF0dXJlczoKKworICAgLSBBbnkgZm9ybSBvZiBuZXR3b3JrIElPIGluY2x1Z2luZyBtZXRob2RzIHN1Y2ggYXMgYGByZWN2KClgYCBhbmQKKyAgICAgYGBzZW5kKClgYC4KKworICAgLSBUaGVyZSBpcyBubyAqZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QqIG1hY2hpbmVyeS4gWW91IG11c3QgYWx3YXlzIG1hbnVhbGx5CisgICAgIGNhbGwgOm1ldGg6YH5TU0xTb2NrZXQuZG9faGFuZHNoYWtlYCB0byBzdGFydCB0aGUgaGFuZHNoYWtlLgorCisgICAtIFRoZXJlIGlzIG5vIGhhbmRsaW5nIG9mICpzdXBwcmVzc19yYWdnZWRfZW9mcyouIEFsbCBlbmQtb2YtZmlsZSBjb25kaXRpb25zCisgICAgIHRoYXQgYXJlIGluIHZpb2xhdGlvbiBvZiB0aGUgcHJvdG9jb2wgYXJlIHJlcG9ydGVkIHZpYSB0aGUKKyAgICAgOmV4YzpgU1NMRU9GRXJyb3JgIGV4Y2VwdGlvbi4KKworICAgLSBUaGUgbWV0aG9kIDptZXRoOmB+U1NMU29ja2V0LnVud3JhcGAgY2FsbCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcsCisgICAgIHVubGlrZSBmb3IgYW4gU1NMIHNvY2tldCB3aGVyZSBpdCByZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KKworICAgLSBUaGUgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKiBjYWxsYmFjayBwYXNzZWQgdG8KKyAgICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tgIHdpbGwgZ2V0IGFuIDpjbGFzczpgU1NMT2JqZWN0YAorICAgICBpbnN0YW5jZSBpbnN0ZWFkIG9mIGEgOmNsYXNzOmBTU0xTb2NrZXRgIGluc3RhbmNlIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXIuCisKKyAgIFNvbWUgbm90ZXMgcmVsYXRlZCB0byB0aGUgdXNlIG9mIDpjbGFzczpgU1NMT2JqZWN0YDoKKworICAgLSBBbGwgSU8gb24gYW4gOmNsYXNzOmBTU0xPYmplY3RgIGlzIDpyZWY6YG5vbi1ibG9ja2luZyA8c3NsLW5vbmJsb2NraW5nPmAuCisgICAgIFRoaXMgbWVhbnMgdGhhdCBmb3IgZXhhbXBsZSA6bWV0aDpgflNTTFNvY2tldC5yZWFkYCB3aWxsIHJhaXNlIGFuCisgICAgIDpleGM6YFNTTFdhbnRSZWFkRXJyb3JgIGlmIGl0IG5lZWRzIG1vcmUgZGF0YSB0aGFuIHRoZSBpbmNvbWluZyBCSU8gaGFzCisgICAgIGF2YWlsYWJsZS4KKworICAgLSBUaGVyZSBpcyBubyBtb2R1bGUtbGV2ZWwgYGB3cmFwX2JpbygpYGAgY2FsbCBsaWtlIHRoZXJlIGlzIGZvcgorICAgICA6bWV0aDpgflNTTENvbnRleHQud3JhcF9zb2NrZXRgLiBBbiA6Y2xhc3M6YFNTTE9iamVjdGAgaXMgYWx3YXlzIGNyZWF0ZWQKKyAgICAgdmlhIGFuIDpjbGFzczpgU1NMQ29udGV4dGAuCisKK0FuIFNTTE9iamVjdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgb3V0c2lkZSB3b3JsZCB1c2luZyBtZW1vcnkgYnVmZmVycy4gVGhlCitjbGFzcyA6Y2xhc3M6YE1lbW9yeUJJT2AgcHJvdmlkZXMgYSBtZW1vcnkgYnVmZmVyIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRoaXMKK3B1cnBvc2UuICBJdCB3cmFwcyBhbiBPcGVuU1NMIG1lbW9yeSBCSU8gKEJhc2ljIElPKSBvYmplY3Q6CisKKy4uIGNsYXNzOjogTWVtb3J5QklPCisKKyAgIEEgbWVtb3J5IGJ1ZmZlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHBhc3MgZGF0YSBiZXR3ZWVuIFB5dGhvbiBhbmQgYW4gU1NMCisgICBwcm90b2NvbCBpbnN0YW5jZS4KKworICAgLi4gYXR0cmlidXRlOjogTWVtb3J5QklPLnBlbmRpbmcKKworICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGluIHRoZSBtZW1vcnkgYnVmZmVyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBNZW1vcnlCSU8uZW9mCisKKyAgICAgIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1lbW9yeSBCSU8gaXMgY3VycmVudCBhdCB0aGUgZW5kLW9mLWZpbGUKKyAgICAgIHBvc2l0aW9uLgorCisgICAuLiBtZXRob2Q6OiBNZW1vcnlCSU8ucmVhZChuPS0xKQorCisgICAgICBSZWFkIHVwIHRvICpuKiBieXRlcyBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLiBJZiAqbiogaXMgbm90IHNwZWNpZmllZCBvcgorICAgICAgbmVnYXRpdmUsIGFsbCBieXRlcyBhcmUgcmV0dXJuZWQuCisKKyAgIC4uIG1ldGhvZDo6IE1lbW9yeUJJTy53cml0ZShidWYpCisKKyAgICAgIFdyaXRlIHRoZSBieXRlcyBmcm9tICpidWYqIHRvIHRoZSBtZW1vcnkgQklPLiBUaGUgKmJ1ZiogYXJndW1lbnQgbXVzdCBiZSBhbgorICAgICAgb2JqZWN0IHN1cHBvcnRpbmcgdGhlIGJ1ZmZlciBwcm90b2NvbC4KKworICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIHdoaWNoIGlzIGFsd2F5cyBlcXVhbCB0bworICAgICAgdGhlIGxlbmd0aCBvZiAqYnVmKi4KKworICAgLi4gbWV0aG9kOjogTWVtb3J5QklPLndyaXRlX2VvZigpCisKKyAgICAgIFdyaXRlIGFuIEVPRiBtYXJrZXIgdG8gdGhlIG1lbW9yeSBCSU8uIEFmdGVyIHRoaXMgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCwgaXQKKyAgICAgIGlzIGlsbGVnYWwgdG8gY2FsbCA6bWV0aDpgfk1lbW9yeUJJTy53cml0ZWAuIFRoZSBhdHRyaWJ1dGUgOmF0dHI6YGVvZmAgd2lsbAorICAgICAgYmVjb21lIHRydWUgYWZ0ZXIgYWxsIGRhdGEgY3VycmVudGx5IGluIHRoZSBidWZmZXIgaGFzIGJlZW4gcmVhZC4KKworCiAuLiBfc3NsLXNlY3VyaXR5OgogCiBTZWN1cml0eSBjb25zaWRlcmF0aW9ucwpAQCAtMTc3Myw3ICsyMDE4LDcgQEAKIDptZXRoOmBTU0xDb250ZXh0LnNldF9jaXBoZXJzYCBtZXRob2QuICBTdGFydGluZyBmcm9tIFB5dGhvbiAzLjIuMywgdGhlCiBzc2wgbW9kdWxlIGRpc2FibGVzIGNlcnRhaW4gd2VhayBjaXBoZXJzIGJ5IGRlZmF1bHQsIGJ1dCB5b3UgbWF5IHdhbnQKIHRvIGZ1cnRoZXIgcmVzdHJpY3QgdGhlIGNpcGhlciBjaG9pY2UuIEJlIHN1cmUgdG8gcmVhZCBPcGVuU1NMJ3MgZG9jdW1lbnRhdGlvbgotYWJvdXQgdGhlIGBjaXBoZXIgbGlzdCBmb3JtYXQgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVJfTElTVF9GT1JNQVQ+YF8uCithYm91dCB0aGUgYGNpcGhlciBsaXN0IGZvcm1hdCA8aHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVItTElTVC1GT1JNQVQ+YF8uCiBJZiB5b3Ugd2FudCB0byBjaGVjayB3aGljaCBjaXBoZXJzIGFyZSBlbmFibGVkIGJ5IGEgZ2l2ZW4gY2lwaGVyIGxpc3QsIHVzZSB0aGUKIGBgb3BlbnNzbCBjaXBoZXJzYGAgY29tbWFuZCBvbiB5b3VyIHN5c3RlbS4KIApAQCAtMTc5NCwyNiArMjAzOSwyNiBAQAogICAgQ2xhc3MgOmNsYXNzOmBzb2NrZXQuc29ja2V0YAogICAgICAgIERvY3VtZW50YXRpb24gb2YgdW5kZXJseWluZyA6bW9kOmBzb2NrZXRgIGNsYXNzCiAKLSAgIGBTU0wvVExTIFN0cm9uZyBFbmNyeXB0aW9uOiBBbiBJbnRyb2R1Y3Rpb24gPGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvdHJ1bmsvZW4vc3NsL3NzbF9pbnRyby5odG1sPmBfCisgICBgU1NML1RMUyBTdHJvbmcgRW5jcnlwdGlvbjogQW4gSW50cm9kdWN0aW9uIDxodHRwczovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay9lbi9zc2wvc3NsX2ludHJvLmh0bWw+YF8KICAgICAgICBJbnRybyBmcm9tIHRoZSBBcGFjaGUgd2Vic2VydmVyIGRvY3VtZW50YXRpb24KIAotICAgYFJGQyAxNDIyOiBQcml2YWN5IEVuaGFuY2VtZW50IGZvciBJbnRlcm5ldCBFbGVjdHJvbmljIE1haWw6IFBhcnQgSUk6IENlcnRpZmljYXRlLUJhc2VkIEtleSBNYW5hZ2VtZW50IDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxNDIyPmBfCisgICBgUkZDIDE0MjI6IFByaXZhY3kgRW5oYW5jZW1lbnQgZm9yIEludGVybmV0IEVsZWN0cm9uaWMgTWFpbDogUGFydCBJSTogQ2VydGlmaWNhdGUtQmFzZWQgS2V5IE1hbmFnZW1lbnQgPGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxNDIyPmBfCiAgICAgICAgU3RldmUgS2VudAogCi0gICBgUkZDIDE3NTA6IFJhbmRvbW5lc3MgUmVjb21tZW5kYXRpb25zIGZvciBTZWN1cml0eSA8aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTc1MD5gXworICAgYFJGQyAxNzUwOiBSYW5kb21uZXNzIFJlY29tbWVuZGF0aW9ucyBmb3IgU2VjdXJpdHkgPGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxNzUwPmBfCiAgICAgICAgRC4gRWFzdGxha2UgZXQuIGFsLgogCi0gICBgUkZDIDMyODA6IEludGVybmV0IFguNTA5IFB1YmxpYyBLZXkgSW5mcmFzdHJ1Y3R1cmUgQ2VydGlmaWNhdGUgYW5kIENSTCBQcm9maWxlIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMjgwPmBfCisgICBgUkZDIDMyODA6IEludGVybmV0IFguNTA5IFB1YmxpYyBLZXkgSW5mcmFzdHJ1Y3R1cmUgQ2VydGlmaWNhdGUgYW5kIENSTCBQcm9maWxlIDxodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzI4MD5gXwogICAgICAgIEhvdXNsZXkgZXQuIGFsLgogCi0gICBgUkZDIDQzNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzY2PmBfCisgICBgUkZDIDQzNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDM2Nj5gXwogICAgICAgIEJsYWtlLVdpbHNvbiBldC4gYWwuCiAKLSAgIGBSRkMgNTI0NjogVGhlIFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBQcm90b2NvbCBWZXJzaW9uIDEuMiA8aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTI0Nj5gXworICAgYFJGQyA1MjQ2OiBUaGUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFByb3RvY29sIFZlcnNpb24gMS4yIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTI0Nj5gXwogICAgICAgIFQuIERpZXJrcyBldC4gYWwuCiAKLSAgIGBSRkMgNjA2NjogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIEV4dGVuc2lvbnMgPGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYwNjY+YF8KKyAgIGBSRkMgNjA2NjogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIEV4dGVuc2lvbnMgPGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MDY2PmBfCiAgICAgICAgRC4gRWFzdGxha2UKIAotICAgYElBTkEgVExTOiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgUGFyYW1ldGVycyA8aHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWw+YF8KKyAgIGBJQU5BIFRMUzogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFBhcmFtZXRlcnMgPGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1wYXJhbWV0ZXJzL3Rscy1wYXJhbWV0ZXJzLnhtbD5gXwogICAgICAgIElBTkEKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0YXQucnN0IGIvRG9jL2xpYnJhcnkvc3RhdC5yc3QKaW5kZXggMjQ3NjlmNi4uYjI1NjMxMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RhdC5yc3QKQEAgLTQsMTAgKzQsMTAgQEAKIC4uIG1vZHVsZTo6IHN0YXQKICAgIDpzeW5vcHNpczogVXRpbGl0aWVzIGZvciBpbnRlcnByZXRpbmcgdGhlIHJlc3VsdHMgb2Ygb3Muc3RhdCgpLAogICAgICAgICAgICAgICBvcy5sc3RhdCgpIGFuZCBvcy5mc3RhdCgpLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogU2tpcCBNb250YW5hcm8gPHNraXBAYXV0b21hdHJpeC5jb20+CiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTW9kdWxlcy9fc3RhdC5jYAotICAgICAgICAgICAgICAgICA6c291cmNlOmBMaWIvc3RhdC5weWAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N0YXQucHlgCiAKIC0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICB3YWxrdHJlZShzeXMuYXJndlsxXSwgdmlzaXRmaWxlKQogCi1BbiBhZGRpdGlvbmFsIHV0aWxpdHkgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gY292ZXJ0IGEgZmlsZSdzIG1vZGUgaW4gYSBodW1hbgorQW4gYWRkaXRpb25hbCB1dGlsaXR5IGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIGNvbnZlcnQgYSBmaWxlJ3MgbW9kZSBpbiBhIGh1bWFuCiByZWFkYWJsZSBzdHJpbmc6CiAKIC4uIGZ1bmN0aW9uOjogZmlsZW1vZGUobW9kZSkKQEAgLTM5OSwzICszOTksMjkgQEAKICAgIFRoZSBmaWxlIGlzIGEgc25hcHNob3QgZmlsZS4KIAogU2VlIHRoZSBcKkJTRCBvciBNYWMgT1Mgc3lzdGVtcyBtYW4gcGFnZSA6bWFucGFnZTpgY2hmbGFncygyKWAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK09uIFdpbmRvd3MsIHRoZSBmb2xsb3dpbmcgZmlsZSBhdHRyaWJ1dGUgY29uc3RhbnRzIGFyZSBhdmFpbGFibGUgZm9yIHVzZSB3aGVuCit0ZXN0aW5nIGJpdHMgaW4gdGhlIGBgc3RfZmlsZV9hdHRyaWJ1dGVzYGAgbWVtYmVyIHJldHVybmVkIGJ5IDpmdW5jOmBvcy5zdGF0YC4KK1NlZSB0aGUgYFdpbmRvd3MgQVBJIGRvY3VtZW50YXRpb24KKzxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9nZzI1ODExNy5hc3B4PmBfCitmb3IgbW9yZSBkZXRhaWwgb24gdGhlIG1lYW5pbmcgb2YgdGhlc2UgY29uc3RhbnRzLgorCisuLiBkYXRhOjogRklMRV9BVFRSSUJVVEVfQVJDSElWRQorICAgICAgICAgIEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQKKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9ERVZJQ0UKKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkKKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9FTkNSWVBURUQKKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9ISURERU4KKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9JTlRFR1JJVFlfU1RSRUFNCisgICAgICAgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMCisgICAgICAgICAgRklMRV9BVFRSSUJVVEVfTk9UX0NPTlRFTlRfSU5ERVhFRAorICAgICAgICAgIEZJTEVfQVRUUklCVVRFX05PX1NDUlVCX0RBVEEKKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9PRkZMSU5FCisgICAgICAgICAgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkKKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UCisgICAgICAgICAgRklMRV9BVFRSSUJVVEVfU1BBUlNFX0ZJTEUKKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9TWVNURU0KKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9URU1QT1JBUlkKKyAgICAgICAgICBGSUxFX0FUVFJJQlVURV9WSVJUVUFMCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdAppbmRleCAwYzlkODhjLi5lYTNkN2RhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdApAQCAtMywxOCArMywxOSBAQAogCiAuLiBtb2R1bGU6OiBzdGF0aXN0aWNzCiAgICA6c3lub3BzaXM6IG1hdGhlbWF0aWNhbCBzdGF0aXN0aWNzIGZ1bmN0aW9ucworCiAuLiBtb2R1bGVhdXRob3I6OiBTdGV2ZW4gRCdBcHJhbm8gPHN0ZXZlK3B5dGhvbkBwZWFyd29vZC5pbmZvPgogLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+CiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zdGF0aXN0aWNzLnB5YAorCiAuLiB0ZXN0c2V0dXA6OiAqCiAKICAgIGZyb20gc3RhdGlzdGljcyBpbXBvcnQgKgogICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JwogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zdGF0aXN0aWNzLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGNhbGN1bGF0aW5nIG1hdGhlbWF0aWNhbCBzdGF0aXN0aWNzIG9mCkBAIC0yMjMsNyArMjI0LDcgQEAKICAgICAgICogIlN0YXRpc3RpY3MgZm9yIHRoZSBCZWhhdmlvcmFsIFNjaWVuY2VzIiwgRnJlZGVyaWNrIEogR3JhdmV0dGVyIGFuZAogICAgICAgICBMYXJyeSBCIFdhbGxuYXUgKDh0aCBFZGl0aW9uKS4KIAotICAgICAgKiBDYWxjdWxhdGluZyB0aGUgYG1lZGlhbiA8aHR0cDovL3d3dy51YWxiZXJ0YS5jYS9+b3BzY2FuL21lZGlhbi5odG1sPmBfLgorICAgICAgKiBDYWxjdWxhdGluZyB0aGUgYG1lZGlhbiA8aHR0cHM6Ly93d3cudWFsYmVydGEuY2Evfm9wc2Nhbi9tZWRpYW4uaHRtbD5gXy4KIAogICAgICAgKiBUaGUgYFNTTUVESUFOCiAgICAgICAgIDxodHRwczovL2hlbHAuZ25vbWUub3JnL3VzZXJzL2dudW1lcmljL3N0YWJsZS9nbnVtZXJpYy5odG1sI2dudW1lcmljLWZ1bmN0aW9uLVNTTUVESUFOPmBfCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKaW5kZXggODgxNWQzOC4uMjk5NmVlZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdApAQCAtMzU0LDI2ICszNTQsMjkgQEAKICAgIFRoZSBudW1lcmljIGxpdGVyYWxzIGFjY2VwdGVkIGluY2x1ZGUgdGhlIGRpZ2l0cyBgYDBgYCB0byBgYDlgYCBvciBhbnkKICAgIFVuaWNvZGUgZXF1aXZhbGVudCAoY29kZSBwb2ludHMgd2l0aCB0aGUgYGBOZGBgIHByb3BlcnR5KS4KIAotICAgU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9leHRyYWN0ZWQvRGVyaXZlZE51bWVyaWNUeXBlLnR4dAorICAgU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzguMC4wL3VjZC9leHRyYWN0ZWQvRGVyaXZlZE51bWVyaWNUeXBlLnR4dAogICAgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBjb2RlIHBvaW50cyB3aXRoIHRoZSBgYE5kYGAgcHJvcGVydHkuCiAKIAogQWxsIDpjbGFzczpgbnVtYmVycy5SZWFsYCB0eXBlcyAoOmNsYXNzOmBpbnRgIGFuZCA6Y2xhc3M6YGZsb2F0YCkgYWxzbyBpbmNsdWRlCiB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnM6CiAKLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rCi18IE9wZXJhdGlvbiAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgfAotKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PSsKLXwgYGBtYXRoLnRydW5jKHgpYGAgIHwgKngqIHRydW5jYXRlZCB0byBJbnRlZ3JhbCAgICAgICAgICB8ICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKwotfCBgYHJvdW5kKHhbLCBuXSlgYCAgfCAqeCogcm91bmRlZCB0byBuIGRpZ2l0cywgICAgICAgICAgIHwgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgcm91bmRpbmcgaGFsZiB0byBldmVuLiBJZiBuIGlzICAgICB8ICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICB8IG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIDAuICAgICAgICAgfCAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSsKLXwgYGBtYXRoLmZsb29yKHgpYGAgIHwgdGhlIGdyZWF0ZXN0IGludGVncmFsIGZsb2F0IDw9ICp4KiB8ICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKwotfCBgYG1hdGguY2VpbCh4KWBgICAgfCB0aGUgbGVhc3QgaW50ZWdyYWwgZmxvYXQgPj0gKngqICAgIHwgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPcGVyYXRpb24gICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IDpmdW5jOmBtYXRoLnRydW5jKFx8ICp4KiB0cnVuY2F0ZWQgdG8gOmNsYXNzOmB+bnVtYmVycy5JbnRlZ3JhbGAgfAorfCB4KSA8bWF0aC50cnVuYz5gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpmdW5jOmByb3VuZCh4WywgICB8ICp4KiByb3VuZGVkIHRvICpuKiBkaWdpdHMsICAgICAgICAgICAgICAgICAgfAorfCBuXSkgPHJvdW5kPmAgICAgICAgfCByb3VuZGluZyBoYWxmIHRvIGV2ZW4uIElmICpuKiBpcyAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gMC4gICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6ZnVuYzpgbWF0aC5mbG9vcihcfCB0aGUgZ3JlYXRlc3QgOmNsYXNzOmB+bnVtYmVycy5JbnRlZ3JhbGAgICAgIHwKK3wgeCkgPG1hdGguZmxvb3I+YCAgIHwgPD0gKngqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6ZnVuYzpgbWF0aC5jZWlsKHgpfCB0aGUgbGVhc3QgOmNsYXNzOmB+bnVtYmVycy5JbnRlZ3JhbGAgPj0gKngqIHwKK3wgPG1hdGguY2VpbD5gICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiBGb3IgYWRkaXRpb25hbCBudW1lcmljIG9wZXJhdGlvbnMgc2VlIHRoZSA6bW9kOmBtYXRoYCBhbmQgOm1vZDpgY21hdGhgCiBtb2R1bGVzLgpAQCAtMzk3LDggKzQwMCw4IEBACiAgICBvcGVyYXRvcjogPj4KIAogQml0d2lzZSBvcGVyYXRpb25zIG9ubHkgbWFrZSBzZW5zZSBmb3IgaW50ZWdlcnMuICBOZWdhdGl2ZSBudW1iZXJzIGFyZSB0cmVhdGVkCi1hcyB0aGVpciAyJ3MgY29tcGxlbWVudCB2YWx1ZSAodGhpcyBhc3N1bWVzIGEgc3VmZmljaWVudGx5IGxhcmdlIG51bWJlciBvZiBiaXRzCi10aGF0IG5vIG92ZXJmbG93IG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbikuCithcyB0aGVpciAyJ3MgY29tcGxlbWVudCB2YWx1ZSAodGhpcyBhc3N1bWVzIHRoYXQgdGhlcmUgYXJlIGVub3VnaCBiaXRzIHNvIHRoYXQKK25vIG92ZXJmbG93IG9jY3VycyBkdXJpbmcgdGhlIG9wZXJhdGlvbikuCiAKIFRoZSBwcmlvcml0aWVzIG9mIHRoZSBiaW5hcnkgYml0d2lzZSBvcGVyYXRpb25zIGFyZSBhbGwgbG93ZXIgdGhhbiB0aGUgbnVtZXJpYwogb3BlcmF0aW9ucyBhbmQgaGlnaGVyIHRoYW4gdGhlIGNvbXBhcmlzb25zOyB0aGUgdW5hcnkgb3BlcmF0aW9uIGBgfmBgIGhhcyB0aGUKQEAgLTY4OSwxNiArNjkyLDE2IEBACiAgICAgICAgICAgIG0sIG4gPSBtIC8vIFAsIG4gLy8gUAogCiAgICAgICAgaWYgbiAlIFAgPT0gMDoKLSAgICAgICAgICAgaGFzaF8gPSBzeXMuaGFzaF9pbmZvLmluZgorICAgICAgICAgICBoYXNoX3ZhbHVlID0gc3lzLmhhc2hfaW5mby5pbmYKICAgICAgICBlbHNlOgogICAgICAgICAgICAjIEZlcm1hdCdzIExpdHRsZSBUaGVvcmVtOiBwb3cobiwgUC0xLCBQKSBpcyAxLCBzbwogICAgICAgICAgICAjIHBvdyhuLCBQLTIsIFApIGdpdmVzIHRoZSBpbnZlcnNlIG9mIG4gbW9kdWxvIFAuCi0gICAgICAgICAgIGhhc2hfID0gKGFicyhtKSAlIFApICogcG93KG4sIFAgLSAyLCBQKSAlIFAKKyAgICAgICAgICAgaGFzaF92YWx1ZSA9IChhYnMobSkgJSBQKSAqIHBvdyhuLCBQIC0gMiwgUCkgJSBQCiAgICAgICAgaWYgbSA8IDA6Ci0gICAgICAgICAgIGhhc2hfID0gLWhhc2hfCi0gICAgICAgaWYgaGFzaF8gPT0gLTE6Ci0gICAgICAgICAgIGhhc2hfID0gLTIKLSAgICAgICByZXR1cm4gaGFzaF8KKyAgICAgICAgICAgaGFzaF92YWx1ZSA9IC1oYXNoX3ZhbHVlCisgICAgICAgaWYgaGFzaF92YWx1ZSA9PSAtMToKKyAgICAgICAgICAgaGFzaF92YWx1ZSA9IC0yCisgICAgICAgcmV0dXJuIGhhc2hfdmFsdWUKIAogICAgZGVmIGhhc2hfZmxvYXQoeCk6CiAgICAgICAgIiIiQ29tcHV0ZSB0aGUgaGFzaCBvZiBhIGZsb2F0IHguIiIiCkBAIC03MTMsMTMgKzcxNiwxMyBAQAogICAgZGVmIGhhc2hfY29tcGxleCh6KToKICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIG9mIGEgY29tcGxleCBudW1iZXIgei4iIiIKIAotICAgICAgIGhhc2hfID0gaGFzaF9mbG9hdCh6LnJlYWwpICsgc3lzLmhhc2hfaW5mby5pbWFnICogaGFzaF9mbG9hdCh6LmltYWcpCisgICAgICAgaGFzaF92YWx1ZSA9IGhhc2hfZmxvYXQoei5yZWFsKSArIHN5cy5oYXNoX2luZm8uaW1hZyAqIGhhc2hfZmxvYXQoei5pbWFnKQogICAgICAgICMgZG8gYSBzaWduZWQgcmVkdWN0aW9uIG1vZHVsbyAyKipzeXMuaGFzaF9pbmZvLndpZHRoCiAgICAgICAgTSA9IDIqKihzeXMuaGFzaF9pbmZvLndpZHRoIC0gMSkKLSAgICAgICBoYXNoXyA9IChoYXNoXyAmIChNIC0gMSkpIC0gKGhhc2ggJiBNKQotICAgICAgIGlmIGhhc2hfID09IC0xOgotICAgICAgICAgICBoYXNoXyA9PSAtMgotICAgICAgIHJldHVybiBoYXNoXworICAgICAgIGhhc2hfdmFsdWUgPSAoaGFzaF92YWx1ZSAmIChNIC0gMSkpIC0gKGhhc2hfdmFsdWUgJiBNKQorICAgICAgIGlmIGhhc2hfdmFsdWUgPT0gLTE6CisgICAgICAgICAgIGhhc2hfdmFsdWUgPSAtMgorICAgICAgIHJldHVybiBoYXNoX3ZhbHVlCiAKIC4uIF90eXBlaXRlcjoKIApAQCAtMTI5OCwxNiArMTMwMSwxNiBAQAogICAgb25seSByZXByZXNlbnQgc2VxdWVuY2VzIHRoYXQgZm9sbG93IGEgc3RyaWN0IHBhdHRlcm4gYW5kIHJlcGV0aXRpb24gYW5kCiAgICBjb25jYXRlbmF0aW9uIHdpbGwgdXN1YWxseSB2aW9sYXRlIHRoYXQgcGF0dGVybikuCiAKLSAgIC4uIGRhdGE6IHN0YXJ0CisgICAuLiBhdHRyaWJ1dGU6OiBzdGFydAogCiAgICAgICBUaGUgdmFsdWUgb2YgdGhlICpzdGFydCogcGFyYW1ldGVyIChvciBgYDBgYCBpZiB0aGUgcGFyYW1ldGVyIHdhcwogICAgICAgbm90IHN1cHBsaWVkKQogCi0gICAuLiBkYXRhOiBzdG9wCisgICAuLiBhdHRyaWJ1dGU6OiBzdG9wCiAKICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgKnN0b3AqIHBhcmFtZXRlcgogCi0gICAuLiBkYXRhOiBzdGVwCisgICAuLiBhdHRyaWJ1dGU6OiBzdGVwCiAKICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgKnN0ZXAqIHBhcmFtZXRlciAob3IgYGAxYGAgaWYgdGhlIHBhcmFtZXRlciB3YXMKICAgICAgIG5vdCBzdXBwbGllZCkKQEAgLTE0NTAsNyArMTQ1Myw3IEBACiAKICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBgYHN0cmBgIGNsYXNzIGFuZCBpdHMgbWV0aG9kcywgc2VlCiAgICA6cmVmOmB0ZXh0c2VxYCBhbmQgdGhlIDpyZWY6YHN0cmluZy1tZXRob2RzYCBzZWN0aW9uIGJlbG93LiAgVG8gb3V0cHV0Ci0gICBmb3JtYXR0ZWQgc3RyaW5ncywgc2VlIHRoZSA6cmVmOmBzdHJpbmctZm9ybWF0dGluZ2Agc2VjdGlvbi4gIEluIGFkZGl0aW9uLAorICAgZm9ybWF0dGVkIHN0cmluZ3MsIHNlZSB0aGUgOnJlZjpgZm9ybWF0c3RyaW5nc2Agc2VjdGlvbi4gIEluIGFkZGl0aW9uLAogICAgc2VlIHRoZSA6cmVmOmBzdHJpbmdzZXJ2aWNlc2Agc2VjdGlvbi4KIAogCkBAIC0xOTQ5LDYgKzE5NTIsMTYgQEAKICAgICAgID4+PiAnd3d3LmV4YW1wbGUuY29tJy5zdHJpcCgnY21vd3ouJykKICAgICAgICdleGFtcGxlJwogCisgICBUaGUgb3V0ZXJtb3N0IGxlYWRpbmcgYW5kIHRyYWlsaW5nICpjaGFycyogYXJndW1lbnQgdmFsdWVzIGFyZSBzdHJpcHBlZAorICAgZnJvbSB0aGUgc3RyaW5nLiBDaGFyYWN0ZXJzIGFyZSByZW1vdmVkIGZyb20gdGhlIGxlYWRpbmcgZW5kIHVudGlsCisgICByZWFjaGluZyBhIHN0cmluZyBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBzZXQgb2YKKyAgIGNoYXJhY3RlcnMgaW4gKmNoYXJzKi4gQSBzaW1pbGFyIGFjdGlvbiB0YWtlcyBwbGFjZSBvbiB0aGUgdHJhaWxpbmcgZW5kLgorICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gY29tbWVudF9zdHJpbmcgPSAnIy4uLi4uLi4gU2VjdGlvbiAzLjIuMSBJc3N1ZSAjMzIgLi4uLi4uLicKKyAgICAgID4+PiBjb21tZW50X3N0cmluZy5zdHJpcCgnLiMhICcpCisgICAgICAnU2VjdGlvbiAzLjIuMSBJc3N1ZSAjMzInCisKIAogLi4gbWV0aG9kOjogc3RyLnN3YXBjYXNlKCkKIApAQCAtMjMwMiw2ICsyMzE1LDE5IEBACiAgICA+Pj4gYnl0ZXMuZnJvbWhleCgnMkVmMCBGMWYyICAnKQogICAgYicuXHhmMFx4ZjFceGYyJwogCitBIHJldmVyc2UgY29udmVyc2lvbiBmdW5jdGlvbiBleGlzdHMgdG8gdHJhbnNmb3JtIGEgYnl0ZXMgb2JqZWN0IGludG8gaXRzCitoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKworLi4gbWV0aG9kOjogYnl0ZXMuaGV4KCkKKworICAgUmV0dXJuIGEgc3RyaW5nIG9iamVjdCBjb250YWluaW5nIHR3byBoZXhhZGVjaW1hbCBkaWdpdHMgZm9yIGVhY2gKKyAgIGJ5dGUgaW4gdGhlIGluc3RhbmNlLgorCisgICA+Pj4gYidceGYwXHhmMVx4ZjInLmhleCgpCisgICAnZjBmMWYyJworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogU2luY2UgYnl0ZXMgb2JqZWN0cyBhcmUgc2VxdWVuY2VzIG9mIGludGVnZXJzIChha2luIHRvIGEgdHVwbGUpLCBmb3IgYSBieXRlcwogb2JqZWN0ICpiKiwgYGBiWzBdYGAgd2lsbCBiZSBhbiBpbnRlZ2VyLCB3aGlsZSBgYGJbMDoxXWBgIHdpbGwgYmUgYSBieXRlcwogb2JqZWN0IG9mIGxlbmd0aCAxLiAgKFRoaXMgY29udHJhc3RzIHdpdGggdGV4dCBzdHJpbmdzLCB3aGVyZSBib3RoIGluZGV4aW5nCkBAIC0yMzU3LDYgKzIzODMsMTkgQEAKICAgID4+PiBieXRlYXJyYXkuZnJvbWhleCgnMkVmMCBGMWYyICAnKQogICAgYnl0ZWFycmF5KGInLlx4ZjBceGYxXHhmMicpCiAKK0EgcmV2ZXJzZSBjb252ZXJzaW9uIGZ1bmN0aW9uIGV4aXN0cyB0byB0cmFuc2Zvcm0gYSBieXRlYXJyYXkgb2JqZWN0IGludG8gaXRzCitoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKworLi4gbWV0aG9kOjogYnl0ZWFycmF5LmhleCgpCisKKyAgIFJldHVybiBhIHN0cmluZyBvYmplY3QgY29udGFpbmluZyB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIGZvciBlYWNoCisgICBieXRlIGluIHRoZSBpbnN0YW5jZS4KKworICAgPj4+IGJ5dGVhcnJheShiJ1x4ZjBceGYxXHhmMicpLmhleCgpCisgICAnZjBmMWYyJworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogU2luY2UgYnl0ZWFycmF5IG9iamVjdHMgYXJlIHNlcXVlbmNlcyBvZiBpbnRlZ2VycyAoYWtpbiB0byBhIGxpc3QpLCBmb3IgYQogYnl0ZWFycmF5IG9iamVjdCAqYiosIGBgYlswXWBgIHdpbGwgYmUgYW4gaW50ZWdlciwgd2hpbGUgYGBiWzA6MV1gYCB3aWxsIGJlCiBhIGJ5dGVhcnJheSBvYmplY3Qgb2YgbGVuZ3RoIDEuICAoVGhpcyBjb250cmFzdHMgd2l0aCB0ZXh0IHN0cmluZ3MsIHdoZXJlCkBAIC0zMTAyLDYgKzMxNDEsMjAzIEBACiAgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgogCiAKKy4uIF9ieXRlcy1mb3JtYXR0aW5nOgorCitgYHByaW50ZmBgLXN0eWxlIEJ5dGVzIEZvcm1hdHRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gaW5kZXg6OgorICAgc2luZ2xlOiBmb3JtYXR0aW5nLCBieXRlcyAoJSkKKyAgIHNpbmdsZTogZm9ybWF0dGluZywgYnl0ZWFycmF5ICglKQorICAgc2luZ2xlOiBpbnRlcnBvbGF0aW9uLCBieXRlcyAoJSkKKyAgIHNpbmdsZTogaW50ZXJwb2xhdGlvbiwgYnl0ZWFycmF5ICglKQorICAgc2luZ2xlOiBieXRlczsgZm9ybWF0dGluZworICAgc2luZ2xlOiBieXRlYXJyYXk7IGZvcm1hdHRpbmcKKyAgIHNpbmdsZTogYnl0ZXM7IGludGVycG9sYXRpb24KKyAgIHNpbmdsZTogYnl0ZWFycmF5OyBpbnRlcnBvbGF0aW9uCisgICBzaW5nbGU6IHByaW50Zi1zdHlsZSBmb3JtYXR0aW5nCisgICBzaW5nbGU6IHNwcmludGYtc3R5bGUgZm9ybWF0dGluZworICAgc2luZ2xlOiAlIGZvcm1hdHRpbmcKKyAgIHNpbmdsZTogJSBpbnRlcnBvbGF0aW9uCisKKy4uIG5vdGU6OgorCisgICBUaGUgZm9ybWF0dGluZyBvcGVyYXRpb25zIGRlc2NyaWJlZCBoZXJlIGV4aGliaXQgYSB2YXJpZXR5IG9mIHF1aXJrcyB0aGF0CisgICBsZWFkIHRvIGEgbnVtYmVyIG9mIGNvbW1vbiBlcnJvcnMgKHN1Y2ggYXMgZmFpbGluZyB0byBkaXNwbGF5IHR1cGxlcyBhbmQKKyAgIGRpY3Rpb25hcmllcyBjb3JyZWN0bHkpLiAgSWYgdGhlIHZhbHVlIGJlaW5nIHByaW50ZWQgbWF5IGJlIGEgdHVwbGUgb3IKKyAgIGRpY3Rpb25hcnksIHdyYXAgaXQgaW4gYSB0dXBsZS4KKworQnl0ZXMgb2JqZWN0cyAoYGBieXRlc2BgL2BgYnl0ZWFycmF5YGApIGhhdmUgb25lIHVuaXF1ZSBidWlsdC1pbiBvcGVyYXRpb246Cit0aGUgYGAlYGAgb3BlcmF0b3IgKG1vZHVsbykuCitUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlIGJ5dGVzICpmb3JtYXR0aW5nKiBvciAqaW50ZXJwb2xhdGlvbiogb3BlcmF0b3IuCitHaXZlbiBgYGZvcm1hdCAlIHZhbHVlc2BgICh3aGVyZSAqZm9ybWF0KiBpcyBhIGJ5dGVzIG9iamVjdCksIGBgJWBgIGNvbnZlcnNpb24KK3NwZWNpZmljYXRpb25zIGluICpmb3JtYXQqIGFyZSByZXBsYWNlZCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cyBvZiAqdmFsdWVzKi4KK1RoZSBlZmZlY3QgaXMgc2ltaWxhciB0byB1c2luZyB0aGUgOmM6ZnVuYzpgc3ByaW50ZmAgaW4gdGhlIEMgbGFuZ3VhZ2UuCisKK0lmICpmb3JtYXQqIHJlcXVpcmVzIGEgc2luZ2xlIGFyZ3VtZW50LCAqdmFsdWVzKiBtYXkgYmUgYSBzaW5nbGUgbm9uLXR1cGxlCitvYmplY3QuIFs1XV8gIE90aGVyd2lzZSwgKnZhbHVlcyogbXVzdCBiZSBhIHR1cGxlIHdpdGggZXhhY3RseSB0aGUgbnVtYmVyIG9mCitpdGVtcyBzcGVjaWZpZWQgYnkgdGhlIGZvcm1hdCBieXRlcyBvYmplY3QsIG9yIGEgc2luZ2xlIG1hcHBpbmcgb2JqZWN0IChmb3IKK2V4YW1wbGUsIGEgZGljdGlvbmFyeSkuCisKK0EgY29udmVyc2lvbiBzcGVjaWZpZXIgY29udGFpbnMgdHdvIG9yIG1vcmUgY2hhcmFjdGVycyBhbmQgaGFzIHRoZSBmb2xsb3dpbmcKK2NvbXBvbmVudHMsIHdoaWNoIG11c3Qgb2NjdXIgaW4gdGhpcyBvcmRlcjoKKworIy4gVGhlIGBgJyUnYGAgY2hhcmFjdGVyLCB3aGljaCBtYXJrcyB0aGUgc3RhcnQgb2YgdGhlIHNwZWNpZmllci4KKworIy4gTWFwcGluZyBrZXkgKG9wdGlvbmFsKSwgY29uc2lzdGluZyBvZiBhIHBhcmVudGhlc2lzZWQgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycworICAgKGZvciBleGFtcGxlLCBgYChzb21lbmFtZSlgYCkuCisKKyMuIENvbnZlcnNpb24gZmxhZ3MgKG9wdGlvbmFsKSwgd2hpY2ggYWZmZWN0IHRoZSByZXN1bHQgb2Ygc29tZSBjb252ZXJzaW9uCisgICB0eXBlcy4KKworIy4gTWluaW11bSBmaWVsZCB3aWR0aCAob3B0aW9uYWwpLiAgSWYgc3BlY2lmaWVkIGFzIGFuIGBgJyonYGAgKGFzdGVyaXNrKSwgdGhlCisgICBhY3R1YWwgd2lkdGggaXMgcmVhZCBmcm9tIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIHR1cGxlIGluICp2YWx1ZXMqLCBhbmQgdGhlCisgICBvYmplY3QgdG8gY29udmVydCBjb21lcyBhZnRlciB0aGUgbWluaW11bSBmaWVsZCB3aWR0aCBhbmQgb3B0aW9uYWwgcHJlY2lzaW9uLgorCisjLiBQcmVjaXNpb24gKG9wdGlvbmFsKSwgZ2l2ZW4gYXMgYSBgYCcuJ2BgIChkb3QpIGZvbGxvd2VkIGJ5IHRoZSBwcmVjaXNpb24uICBJZgorICAgc3BlY2lmaWVkIGFzIGBgJyonYGAgKGFuIGFzdGVyaXNrKSwgdGhlIGFjdHVhbCBwcmVjaXNpb24gaXMgcmVhZCBmcm9tIHRoZSBuZXh0CisgICBlbGVtZW50IG9mIHRoZSB0dXBsZSBpbiAqdmFsdWVzKiwgYW5kIHRoZSB2YWx1ZSB0byBjb252ZXJ0IGNvbWVzIGFmdGVyIHRoZQorICAgcHJlY2lzaW9uLgorCisjLiBMZW5ndGggbW9kaWZpZXIgKG9wdGlvbmFsKS4KKworIy4gQ29udmVyc2lvbiB0eXBlLgorCitXaGVuIHRoZSByaWdodCBhcmd1bWVudCBpcyBhIGRpY3Rpb25hcnkgKG9yIG90aGVyIG1hcHBpbmcgdHlwZSksIHRoZW4gdGhlCitmb3JtYXRzIGluIHRoZSBieXRlcyBvYmplY3QgKm11c3QqIGluY2x1ZGUgYSBwYXJlbnRoZXNpc2VkIG1hcHBpbmcga2V5IGludG8gdGhhdAorZGljdGlvbmFyeSBpbnNlcnRlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgYGAnJSdgYCBjaGFyYWN0ZXIuIFRoZSBtYXBwaW5nIGtleQorc2VsZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkIGZyb20gdGhlIG1hcHBpbmcuICBGb3IgZXhhbXBsZToKKworICAgPj4+IHByaW50KGInJShsYW5ndWFnZSlzIGhhcyAlKG51bWJlcikwM2QgcXVvdGUgdHlwZXMuJyAlCisgICAuLi4gICAgICAge2InbGFuZ3VhZ2UnOiBiIlB5dGhvbiIsIGIibnVtYmVyIjogMn0pCisgICBiJ1B5dGhvbiBoYXMgMDAyIHF1b3RlIHR5cGVzLicKKworSW4gdGhpcyBjYXNlIG5vIGBgKmBgIHNwZWNpZmllcnMgbWF5IG9jY3VyIGluIGEgZm9ybWF0IChzaW5jZSB0aGV5IHJlcXVpcmUgYQorc2VxdWVudGlhbCBwYXJhbWV0ZXIgbGlzdCkuCisKK1RoZSBjb252ZXJzaW9uIGZsYWcgY2hhcmFjdGVycyBhcmU6CisKKystLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGbGFnICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgYGAnIydgYCB8IFRoZSB2YWx1ZSBjb252ZXJzaW9uIHdpbGwgdXNlIHRoZSAiYWx0ZXJuYXRlIGZvcm0iICh3aGVyZSBkZWZpbmVkICAgfAorfCAgICAgICAgIHwgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGAnMCdgYCB8IFRoZSBjb252ZXJzaW9uIHdpbGwgYmUgemVybyBwYWRkZWQgZm9yIG51bWVyaWMgdmFsdWVzLiAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgJy0nYGAgfCBUaGUgY29udmVydGVkIHZhbHVlIGlzIGxlZnQgYWRqdXN0ZWQgKG92ZXJyaWRlcyB0aGUgYGAnMCdgYCAgICAgICAgIHwKK3wgICAgICAgICB8IGNvbnZlcnNpb24gaWYgYm90aCBhcmUgZ2l2ZW4pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgJyAnYGAgfCAoYSBzcGFjZSkgQSBibGFuayBzaG91bGQgYmUgbGVmdCBiZWZvcmUgYSBwb3NpdGl2ZSBudW1iZXIgKG9yIGVtcHR5IHwKK3wgICAgICAgICB8IHN0cmluZykgcHJvZHVjZWQgYnkgYSBzaWduZWQgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgJysnYGAgfCBBIHNpZ24gY2hhcmFjdGVyIChgYCcrJ2BgIG9yIGBgJy0nYGApIHdpbGwgcHJlY2VkZSB0aGUgY29udmVyc2lvbiAgIHwKK3wgICAgICAgICB8IChvdmVycmlkZXMgYSAic3BhY2UiIGZsYWcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0EgbGVuZ3RoIG1vZGlmaWVyIChgYGhgYCwgYGBsYGAsIG9yIGBgTGBgKSBtYXkgYmUgcHJlc2VudCwgYnV0IGlzIGlnbm9yZWQgYXMgaXQKK2lzIG5vdCBuZWNlc3NhcnkgZm9yIFB5dGhvbiAtLSBzbyBlLmcuIGBgJWxkYGAgaXMgaWRlbnRpY2FsIHRvIGBgJWRgYC4KKworVGhlIGNvbnZlcnNpb24gdHlwZXMgYXJlOgorCisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IENvbnZlcnNpb24gfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8CisrPT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT0rCit8IGBgJ2QnYGAgICAgfCBTaWduZWQgaW50ZWdlciBkZWNpbWFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ2knYGAgICAgfCBTaWduZWQgaW50ZWdlciBkZWNpbWFsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ28nYGAgICAgfCBTaWduZWQgb2N0YWwgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcKDEpICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ3UnYGAgICAgfCBPYnNvbGV0ZSB0eXBlIC0tIGl0IGlzIGlkZW50aWNhbCB0byBgYCdkJ2BgLiAgICAgICAgfCBcKDgpICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ3gnYGAgICAgfCBTaWduZWQgaGV4YWRlY2ltYWwgKGxvd2VyY2FzZSkuICAgICAgICAgICAgICAgICAgICAgfCBcKDIpICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ1gnYGAgICAgfCBTaWduZWQgaGV4YWRlY2ltYWwgKHVwcGVyY2FzZSkuICAgICAgICAgICAgICAgICAgICAgfCBcKDIpICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ2UnYGAgICAgfCBGbG9hdGluZyBwb2ludCBleHBvbmVudGlhbCBmb3JtYXQgKGxvd2VyY2FzZSkuICAgICAgfCBcKDMpICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ0UnYGAgICAgfCBGbG9hdGluZyBwb2ludCBleHBvbmVudGlhbCBmb3JtYXQgKHVwcGVyY2FzZSkuICAgICAgfCBcKDMpICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ2YnYGAgICAgfCBGbG9hdGluZyBwb2ludCBkZWNpbWFsIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgfCBcKDMpICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ0YnYGAgICAgfCBGbG9hdGluZyBwb2ludCBkZWNpbWFsIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgfCBcKDMpICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ2cnYGAgICAgfCBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgbG93ZXJjYXNlIGV4cG9uZW50aWFsICAgfCBcKDQpICB8Cit8ICAgICAgICAgICAgfCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgbGVzcyB0aGFuIC00IG9yIG5vdCBsZXNzIHRoYW4gfCAgICAgICB8Cit8ICAgICAgICAgICAgfCBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ0cnYGAgICAgfCBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgdXBwZXJjYXNlIGV4cG9uZW50aWFsICAgfCBcKDQpICB8Cit8ICAgICAgICAgICAgfCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgbGVzcyB0aGFuIC00IG9yIG5vdCBsZXNzIHRoYW4gfCAgICAgICB8Cit8ICAgICAgICAgICAgfCBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ2MnYGAgICAgfCBTaW5nbGUgYnl0ZSAoYWNjZXB0cyBpbnRlZ2VyIG9yIHNpbmdsZSAgICAgICAgICAgICAgfCAgICAgICB8Cit8ICAgICAgICAgICAgfCBieXRlIG9iamVjdHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ2InYGAgICAgfCBCeXRlcyAoYW55IG9iamVjdCB0aGF0IGZvbGxvd3MgdGhlICAgICAgICAgICAgICAgICAgfCBcKDUpICB8Cit8ICAgICAgICAgICAgfCA6cmVmOmBidWZmZXIgcHJvdG9jb2wgPGJ1ZmZlcm9iamVjdHM+YCBvciBoYXMgICAgICAgfCAgICAgICB8Cit8ICAgICAgICAgICAgfCA6bWV0aDpgX19ieXRlc19fYCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ3MnYGAgICAgfCBgYCdzJ2BgIGlzIGFuIGFsaWFzIGZvciBgYCdiJ2BgIGFuZCBzaG91bGQgb25seSAgICAgfCBcKDYpICB8Cit8ICAgICAgICAgICAgfCBiZSB1c2VkIGZvciBQeXRob24yLzMgY29kZSBiYXNlcy4gICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ2EnYGAgICAgfCBCeXRlcyAoY29udmVydHMgYW55IFB5dGhvbiBvYmplY3QgdXNpbmcgICAgICAgICAgICAgfCBcKDUpICB8Cit8ICAgICAgICAgICAgfCBgYHJlcHIob2JqKS5lbmNvZGUoJ2FzY2lpJywnYmFja3NsYXNocmVwbGFjZSlgYCkuICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJ3InYGAgICAgfCBgYCdyJ2BgIGlzIGFuIGFsaWFzIGZvciBgYCdhJ2BgIGFuZCBzaG91bGQgb25seSAgICAgfCBcKDcpICB8Cit8ICAgICAgICAgICAgfCBiZSB1c2VkIGZvciBQeXRob24yLzMgY29kZSBiYXNlcy4gICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCit8IGBgJyUnYGAgICAgfCBObyBhcmd1bWVudCBpcyBjb252ZXJ0ZWQsIHJlc3VsdHMgaW4gYSBgYCclJ2BgICAgICAgfCAgICAgICB8Cit8ICAgICAgICAgICAgfCBjaGFyYWN0ZXIgaW4gdGhlIHJlc3VsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCisKK05vdGVzOgorCisoMSkKKyAgIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgYSBsZWFkaW5nIHplcm8gKGBgJzAnYGApIHRvIGJlIGluc2VydGVkIGJldHdlZW4KKyAgIGxlZnQtaGFuZCBwYWRkaW5nIGFuZCB0aGUgZm9ybWF0dGluZyBvZiB0aGUgbnVtYmVyIGlmIHRoZSBsZWFkaW5nIGNoYXJhY3RlcgorICAgb2YgdGhlIHJlc3VsdCBpcyBub3QgYWxyZWFkeSBhIHplcm8uCisKKygyKQorICAgVGhlIGFsdGVybmF0ZSBmb3JtIGNhdXNlcyBhIGxlYWRpbmcgYGAnMHgnYGAgb3IgYGAnMFgnYGAgKGRlcGVuZGluZyBvbiB3aGV0aGVyCisgICB0aGUgYGAneCdgYCBvciBgYCdYJ2BgIGZvcm1hdCB3YXMgdXNlZCkgdG8gYmUgaW5zZXJ0ZWQgYmV0d2VlbiBsZWZ0LWhhbmQgcGFkZGluZworICAgYW5kIHRoZSBmb3JtYXR0aW5nIG9mIHRoZSBudW1iZXIgaWYgdGhlIGxlYWRpbmcgY2hhcmFjdGVyIG9mIHRoZSByZXN1bHQgaXMgbm90CisgICBhbHJlYWR5IGEgemVyby4KKworKDMpCisgICBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIHRoZSByZXN1bHQgdG8gYWx3YXlzIGNvbnRhaW4gYSBkZWNpbWFsIHBvaW50LCBldmVuIGlmCisgICBubyBkaWdpdHMgZm9sbG93IGl0LgorCisgICBUaGUgcHJlY2lzaW9uIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgYW5kCisgICBkZWZhdWx0cyB0byA2LgorCisoNCkKKyAgIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWwgcG9pbnQsIGFuZAorICAgdHJhaWxpbmcgemVyb2VzIGFyZSBub3QgcmVtb3ZlZCBhcyB0aGV5IHdvdWxkIG90aGVyd2lzZSBiZS4KKworICAgVGhlIHByZWNpc2lvbiBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisgICBkZWNpbWFsIHBvaW50IGFuZCBkZWZhdWx0cyB0byA2LgorCisoNSkKKyAgIElmIHByZWNpc2lvbiBpcyBgYE5gYCwgdGhlIG91dHB1dCBpcyB0cnVuY2F0ZWQgdG8gYGBOYGAgY2hhcmFjdGVycy4KKworKDYpCisgICBgYGInJXMnYGAgaXMgZGVwcmVjYXRlZCwgYnV0IHdpbGwgbm90IGJlIHJlbW92ZWQgZHVyaW5nIHRoZSAzLnggc2VyaWVzLgorCisoNykKKyAgIGBgYiclcidgYCBpcyBkZXByZWNhdGVkLCBidXQgd2lsbCBub3QgYmUgcmVtb3ZlZCBkdXJpbmcgdGhlIDMueCBzZXJpZXMuCisKKyg4KQorICAgU2VlIDpwZXA6YDIzN2AuCisKKy4uIG5vdGU6OgorCisgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0gaXQKKyAgIGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKy4uIHNlZWFsc286OiA6cGVwOmA0NjFgLgorLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIC4uIF90eXBlbWVtb3J5dmlldzoKIAogTWVtb3J5IFZpZXdzCkBAIC0zMTMwLDEwICszMzY2LDggQEAKICAgIHRoZSB2aWV3LiBUaGUgOmNsYXNzOmB+bWVtb3J5dmlldy5pdGVtc2l6ZWAgYXR0cmlidXRlIHdpbGwgZ2l2ZSB5b3UgdGhlCiAgICBudW1iZXIgb2YgYnl0ZXMgaW4gYSBzaW5nbGUgZWxlbWVudC4KIAotICAgQSA6Y2xhc3M6YG1lbW9yeXZpZXdgIHN1cHBvcnRzIHNsaWNpbmcgdG8gZXhwb3NlIGl0cyBkYXRhLiBJZgotICAgOmNsYXNzOmB+bWVtb3J5dmlldy5mb3JtYXRgIGlzIG9uZSBvZiB0aGUgbmF0aXZlIGZvcm1hdCBzcGVjaWZpZXJzCi0gICBmcm9tIHRoZSA6bW9kOmBzdHJ1Y3RgIG1vZHVsZSwgaW5kZXhpbmcgd2lsbCByZXR1cm4gYSBzaW5nbGUgZWxlbWVudAotICAgd2l0aCB0aGUgY29ycmVjdCB0eXBlLiBGdWxsIHNsaWNpbmcgd2lsbCByZXN1bHQgaW4gYSBzdWJ2aWV3OjoKKyAgIEEgOmNsYXNzOmBtZW1vcnl2aWV3YCBzdXBwb3J0cyBzbGljaW5nIGFuZCBpbmRleGluZyB0byBleHBvc2UgaXRzIGRhdGEuCisgICBPbmUtZGltZW5zaW9uYWwgc2xpY2luZyB3aWxsIHJlc3VsdCBpbiBhIHN1YnZpZXc6OgogCiAgICAgPj4+IHYgPSBtZW1vcnl2aWV3KGInYWJjZWZnJykKICAgICA+Pj4gdlsxXQpAQCAtMzE0NSwyNSArMzM3OSwyOSBAQAogICAgID4+PiBieXRlcyh2WzE6NF0pCiAgICAgYidiY2UnCiAKLSAgIE90aGVyIG5hdGl2ZSBmb3JtYXRzOjoKKyAgIElmIDpjbGFzczpgfm1lbW9yeXZpZXcuZm9ybWF0YCBpcyBvbmUgb2YgdGhlIG5hdGl2ZSBmb3JtYXQgc3BlY2lmaWVycworICAgZnJvbSB0aGUgOm1vZDpgc3RydWN0YCBtb2R1bGUsIGluZGV4aW5nIHdpdGggYW4gaW50ZWdlciBvciBhIHR1cGxlIG9mCisgICBpbnRlZ2VycyBpcyBhbHNvIHN1cHBvcnRlZCBhbmQgcmV0dXJucyBhIHNpbmdsZSAqZWxlbWVudCogd2l0aAorICAgdGhlIGNvcnJlY3QgdHlwZS4gIE9uZS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cyBjYW4gYmUgaW5kZXhlZAorICAgd2l0aCBhbiBpbnRlZ2VyIG9yIGEgb25lLWludGVnZXIgdHVwbGUuICBNdWx0aS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cworICAgY2FuIGJlIGluZGV4ZWQgd2l0aCB0dXBsZXMgb2YgZXhhY3RseSAqbmRpbSogaW50ZWdlcnMgd2hlcmUgKm5kaW0qIGlzCisgICB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuICBaZXJvLWRpbWVuc2lvbmFsIG1lbW9yeXZpZXdzIGNhbiBiZSBpbmRleGVkCisgICB3aXRoIHRoZSBlbXB0eSB0dXBsZS4KKworICAgSGVyZSBpcyBhbiBleGFtcGxlIHdpdGggYSBub24tYnl0ZSBmb3JtYXQ6OgogCiAgICAgICA+Pj4gaW1wb3J0IGFycmF5CiAgICAgICA+Pj4gYSA9IGFycmF5LmFycmF5KCdsJywgWy0xMTExMTExMSwgMjIyMjIyMjIsIC0zMzMzMzMzMywgNDQ0NDQ0NDRdKQotICAgICAgPj4+IGFbMF0KKyAgICAgID4+PiBtID0gbWVtb3J5dmlldyhhKQorICAgICAgPj4+IG1bMF0KICAgICAgIC0xMTExMTExMQotICAgICAgPj4+IGFbLTFdCisgICAgICA+Pj4gbVstMV0KICAgICAgIDQ0NDQ0NDQ0Ci0gICAgICA+Pj4gYVsyOjNdLnRvbGlzdCgpCi0gICAgICBbLTMzMzMzMzMzXQotICAgICAgPj4+IGFbOjoyXS50b2xpc3QoKQorICAgICAgPj4+IG1bOjoyXS50b2xpc3QoKQogICAgICAgWy0xMTExMTExMSwgLTMzMzMzMzMzXQotICAgICAgPj4+IGFbOjotMV0udG9saXN0KCkKLSAgICAgIFs0NDQ0NDQ0NCwgLTMzMzMzMzMzLCAyMjIyMjIyMiwgLTExMTExMTExXQogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKLQotICAgSWYgdGhlIHVuZGVybHlpbmcgb2JqZWN0IGlzIHdyaXRhYmxlLCB0aGUgbWVtb3J5dmlldyBzdXBwb3J0cyBzbGljZQotICAgYXNzaWdubWVudC4gUmVzaXppbmcgaXMgbm90IGFsbG93ZWQ6OgorICAgSWYgdGhlIHVuZGVybHlpbmcgb2JqZWN0IGlzIHdyaXRhYmxlLCB0aGUgbWVtb3J5dmlldyBzdXBwb3J0cworICAgb25lLWRpbWVuc2lvbmFsIHNsaWNlIGFzc2lnbm1lbnQuIFJlc2l6aW5nIGlzIG5vdCBhbGxvd2VkOjoKIAogICAgICAgPj4+IGRhdGEgPSBieXRlYXJyYXkoYidhYmNlZmcnKQogICAgICAgPj4+IHYgPSBtZW1vcnl2aWV3KGRhdGEpCkBAIC0zMTk2LDEyICszNDM0LDE2IEBACiAgICAgICBUcnVlCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBPbmUtZGltZW5zaW9uYWwgbWVtb3J5dmlld3MgY2FuIG5vdyBiZSBzbGljZWQuCiAgICAgICBPbmUtZGltZW5zaW9uYWwgbWVtb3J5dmlld3Mgd2l0aCBmb3JtYXRzICdCJywgJ2InIG9yICdjJyBhcmUgbm93IGhhc2hhYmxlLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAogICAgICAgbWVtb3J5dmlldyBpcyBub3cgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5IHdpdGgKICAgICAgIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYAogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgbWVtb3J5dmlld3MgY2FuIG5vdyBiZSBpbmRleGVkIHdpdGggdHVwbGUgb2YgaW50ZWdlcnMuCisKICAgIDpjbGFzczpgbWVtb3J5dmlld2AgaGFzIHNldmVyYWwgbWV0aG9kczoKIAogICAgLi4gbWV0aG9kOjogX19lcV9fKGV4cG9ydGVyKQpAQCAtMzI2OCw2ICszNTEwLDE3IEBACiAgICAgICBzdXBwb3J0cyBhbGwgZm9ybWF0IHN0cmluZ3MsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBub3QgaW4KICAgICAgIDptb2Q6YHN0cnVjdGAgbW9kdWxlIHN5bnRheC4KIAorICAgLi4gbWV0aG9kOjogaGV4KCkKKworICAgICAgUmV0dXJuIGEgc3RyaW5nIG9iamVjdCBjb250YWluaW5nIHR3byBoZXhhZGVjaW1hbCBkaWdpdHMgZm9yIGVhY2gKKyAgICAgIGJ5dGUgaW4gdGhlIGJ1ZmZlci4gOjoKKworICAgICAgICAgPj4+IG0gPSBtZW1vcnl2aWV3KGIiYWJjIikKKyAgICAgICAgID4+PiBtLmhleCgpCisgICAgICAgICAnNjE2MjYzJworCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogICAgLi4gbWV0aG9kOjogdG9saXN0KCkKIAogICAgICAgUmV0dXJuIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgYXMgYSBsaXN0IG9mIGVsZW1lbnRzLiA6OgpAQCAtMzMyMywxMCArMzU3NiwxMCBAQAogICAgICAgQ2FzdCBhIG1lbW9yeXZpZXcgdG8gYSBuZXcgZm9ybWF0IG9yIHNoYXBlLiAqc2hhcGUqIGRlZmF1bHRzIHRvCiAgICAgICBgYFtieXRlX2xlbmd0aC8vbmV3X2l0ZW1zaXplXWBgLCB3aGljaCBtZWFucyB0aGF0IHRoZSByZXN1bHQgdmlldwogICAgICAgd2lsbCBiZSBvbmUtZGltZW5zaW9uYWwuIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBuZXcgbWVtb3J5dmlldywgYnV0Ci0gICAgICB0aGUgYnVmZmVyIGl0c2VsZiBpcyBub3QgY29waWVkLiBTdXBwb3J0ZWQgY2FzdHMgYXJlIDFEIC0+IEMtY29udGlndW91cworICAgICAgdGhlIGJ1ZmZlciBpdHNlbGYgaXMgbm90IGNvcGllZC4gU3VwcG9ydGVkIGNhc3RzIGFyZSAxRCAtPiBDLTp0ZXJtOmBjb250aWd1b3VzYAogICAgICAgYW5kIEMtY29udGlndW91cyAtPiAxRC4KIAotICAgICAgQm90aCBmb3JtYXRzIGFyZSByZXN0cmljdGVkIHRvIHNpbmdsZSBlbGVtZW50IG5hdGl2ZSBmb3JtYXRzIGluCisgICAgICBUaGUgZGVzdGluYXRpb24gZm9ybWF0IGlzIHJlc3RyaWN0ZWQgdG8gYSBzaW5nbGUgZWxlbWVudCBuYXRpdmUgZm9ybWF0IGluCiAgICAgICA6bW9kOmBzdHJ1Y3RgIHN5bnRheC4gT25lIG9mIHRoZSBmb3JtYXRzIG11c3QgYmUgYSBieXRlIGZvcm1hdAogICAgICAgKCdCJywgJ2InIG9yICdjJykuIFRoZSBieXRlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IG11c3QgYmUgdGhlIHNhbWUKICAgICAgIGFzIHRoZSBvcmlnaW5hbCBsZW5ndGguCkBAIC0zNDA3LDYgKzM2NjAsOSBAQAogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICAgIFRoZSBzb3VyY2UgZm9ybWF0IGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHdoZW4gY2FzdGluZyB0byBhIGJ5dGUgdmlldy4KKwogICAgVGhlcmUgYXJlIGFsc28gc2V2ZXJhbCByZWFkb25seSBhdHRyaWJ1dGVzIGF2YWlsYWJsZToKIAogICAgLi4gYXR0cmlidXRlOjogb2JqCkBAIC0zNTExLDE5ICszNzY3LDE5IEBACiAKICAgIC4uIGF0dHJpYnV0ZTo6IGNfY29udGlndW91cwogCi0gICAgICBBIGJvb2wgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtZW1vcnkgaXMgQy1jb250aWd1b3VzLgorICAgICAgQSBib29sIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWVtb3J5IGlzIEMtOnRlcm06YGNvbnRpZ3VvdXNgLgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogICAgLi4gYXR0cmlidXRlOjogZl9jb250aWd1b3VzCiAKLSAgICAgIEEgYm9vbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1lbW9yeSBpcyBGb3J0cmFuIGNvbnRpZ3VvdXMuCisgICAgICBBIGJvb2wgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtZW1vcnkgaXMgRm9ydHJhbiA6dGVybTpgY29udGlndW91c2AuCiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAgICAuLiBhdHRyaWJ1dGU6OiBjb250aWd1b3VzCiAKLSAgICAgIEEgYm9vbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1lbW9yeSBpcyBjb250aWd1b3VzLgorICAgICAgQSBib29sIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWVtb3J5IGlzIDp0ZXJtOmBjb250aWd1b3VzYC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKQEAgLTM1NzUsNyArMzgzMSw3IEBACiAKICAgIC4uIGRlc2NyaWJlOjogbGVuKHMpCiAKLSAgICAgIFJldHVybiB0aGUgY2FyZGluYWxpdHkgb2Ygc2V0ICpzKi4KKyAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHNldCAqcyogKGNhcmRpbmFsaXR5IG9mICpzKikuCiAKICAgIC4uIGRlc2NyaWJlOjogeCBpbiBzCiAKQEAgLTQxMDQsOSArNDM2MCwxMCBAQAogQSBzcGVjaWFsIGF0dHJpYnV0ZSBvZiBldmVyeSBtb2R1bGUgaXMgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gLiBUaGlzIGlzIHRoZQogZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBtb2R1bGUncyBzeW1ib2wgdGFibGUuIE1vZGlmeWluZyB0aGlzIGRpY3Rpb25hcnkgd2lsbAogYWN0dWFsbHkgY2hhbmdlIHRoZSBtb2R1bGUncyBzeW1ib2wgdGFibGUsIGJ1dCBkaXJlY3QgYXNzaWdubWVudCB0byB0aGUKLTphdHRyOmBfX2RpY3RfX2AgYXR0cmlidXRlIGlzIG5vdCBwb3NzaWJsZSAoeW91IGNhbiB3cml0ZQorOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGF0dHJpYnV0ZSBpcyBub3QgcG9zc2libGUgKHlvdSBjYW4gd3JpdGUKIGBgbS5fX2RpY3RfX1snYSddID0gMWBgLCB3aGljaCBkZWZpbmVzIGBgbS5hYGAgdG8gYmUgYGAxYGAsIGJ1dCB5b3UgY2FuJ3Qgd3JpdGUKLWBgbS5fX2RpY3RfXyA9IHt9YGApLiAgTW9kaWZ5aW5nIDphdHRyOmBfX2RpY3RfX2AgZGlyZWN0bHkgaXMgbm90IHJlY29tbWVuZGVkLgorYGBtLl9fZGljdF9fID0ge31gYCkuICBNb2RpZnlpbmcgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGRpcmVjdGx5IGlzCitub3QgcmVjb21tZW5kZWQuCiAKIE1vZHVsZXMgYnVpbHQgaW50byB0aGUgaW50ZXJwcmV0ZXIgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiBgYDxtb2R1bGUgJ3N5cycKIChidWlsdC1pbik+YGAuICBJZiBsb2FkZWQgZnJvbSBhIGZpbGUsIHRoZXkgYXJlIHdyaXR0ZW4gYXMgYGA8bW9kdWxlICdvcycgZnJvbQpAQCAtNDE4MCwxMyArNDQzNywxMyBAQAogU2VlIDpyZWY6YHR5cGVzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCisuLiBpbmRleDo6IG9iamVjdDsgY29kZSwgY29kZSBvYmplY3QKKwogLi4gX2JsdGluLWNvZGUtb2JqZWN0czoKIAogQ29kZSBPYmplY3RzCiAtLS0tLS0tLS0tLS0KIAotLi4gaW5kZXg6OiBvYmplY3Q6IGNvZGUKLQogLi4gaW5kZXg6OgogICAgYnVpbHRpbjogY29tcGlsZQogICAgc2luZ2xlOiBfX2NvZGVfXyAoZnVuY3Rpb24gb2JqZWN0IGF0dHJpYnV0ZSkKQEAgLTQzMTksMTQgKzQ1NzYsMTYgQEAKICAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuCiAKIAotLi4gYXR0cmlidXRlOjogY2xhc3MuX19uYW1lX18KKy4uIGF0dHJpYnV0ZTo6IGRlZmluaXRpb24uX19uYW1lX18KIAotICAgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9yIHR5cGUuCisgICBUaGUgbmFtZSBvZiB0aGUgY2xhc3MsIGZ1bmN0aW9uLCBtZXRob2QsIGRlc2NyaXB0b3IsIG9yCisgICBnZW5lcmF0b3IgaW5zdGFuY2UuCiAKIAotLi4gYXR0cmlidXRlOjogY2xhc3MuX19xdWFsbmFtZV9fCisuLiBhdHRyaWJ1dGU6OiBkZWZpbml0aW9uLl9fcXVhbG5hbWVfXwogCi0gICBUaGUgOnRlcm06YHF1YWxpZmllZCBuYW1lYCBvZiB0aGUgY2xhc3Mgb3IgdHlwZS4KKyAgIFRoZSA6dGVybTpgcXVhbGlmaWVkIG5hbWVgIG9mIHRoZSBjbGFzcywgZnVuY3Rpb24sIG1ldGhvZCwgZGVzY3JpcHRvciwKKyAgIG9yIGdlbmVyYXRvciBpbnN0YW5jZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QgYi9Eb2MvbGlicmFyeS9zdHJpbmcucnN0CmluZGV4IDE5YmRiMjEuLmQ1ZDI0MzAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RyaW5nLnJzdApAQCAtNzUsMTQgKzc1LDE0IEBACiAKIC4uIF9zdHJpbmctZm9ybWF0dGluZzoKIAotU3RyaW5nIEZvcm1hdHRpbmcKLS0tLS0tLS0tLS0tLS0tLS0tCitDdXN0b20gU3RyaW5nIEZvcm1hdHRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgYnVpbHQtaW4gc3RyaW5nIGNsYXNzIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGRvIGNvbXBsZXggdmFyaWFibGUKLXN1YnN0aXR1dGlvbnMgYW5kIHZhbHVlIGZvcm1hdHRpbmcgdmlhIHRoZSA6ZnVuYzpgZm9ybWF0YCBtZXRob2QgZGVzY3JpYmVkIGluCitzdWJzdGl0dXRpb25zIGFuZCB2YWx1ZSBmb3JtYXR0aW5nIHZpYSB0aGUgOm1ldGg6YH5zdHIuZm9ybWF0YCBtZXRob2QgZGVzY3JpYmVkIGluCiA6cGVwOmAzMTAxYC4gIFRoZSA6Y2xhc3M6YEZvcm1hdHRlcmAgY2xhc3MgaW4gdGhlIDptb2Q6YHN0cmluZ2AgbW9kdWxlIGFsbG93cwogeW91IHRvIGNyZWF0ZSBhbmQgY3VzdG9taXplIHlvdXIgb3duIHN0cmluZyBmb3JtYXR0aW5nIGJlaGF2aW9ycyB1c2luZyB0aGUgc2FtZQotaW1wbGVtZW50YXRpb24gYXMgdGhlIGJ1aWx0LWluIDptZXRoOmBmb3JtYXRgIG1ldGhvZC4KK2ltcGxlbWVudGF0aW9uIGFzIHRoZSBidWlsdC1pbiA6bWV0aDpgfnN0ci5mb3JtYXRgIG1ldGhvZC4KIAogCiAuLiBjbGFzczo6IEZvcm1hdHRlcgpAQCAtOTEsOSArOTEsMTMgQEAKIAogICAgLi4gbWV0aG9kOjogZm9ybWF0KGZvcm1hdF9zdHJpbmcsICphcmdzLCAqKmt3YXJncykKIAotICAgICAgOm1ldGg6YGZvcm1hdGAgaXMgdGhlIHByaW1hcnkgQVBJIG1ldGhvZC4gIEl0IHRha2VzIGEgZm9ybWF0IHN0cmluZyBhbmQKKyAgICAgIFRoZSBwcmltYXJ5IEFQSSBtZXRob2QuICBJdCB0YWtlcyBhIGZvcm1hdCBzdHJpbmcgYW5kCiAgICAgICBhbiBhcmJpdHJhcnkgc2V0IG9mIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzLgotICAgICAgOm1ldGg6YGZvcm1hdGAgaXMganVzdCBhIHdyYXBwZXIgdGhhdCBjYWxscyA6bWV0aDpgdmZvcm1hdGAuCisgICAgICBJdCBpcyBqdXN0IGEgd3JhcHBlciB0aGF0IGNhbGxzIDptZXRoOmB2Zm9ybWF0YC4KKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNQorICAgICAgICAgUGFzc2luZyBhIGZvcm1hdCBzdHJpbmcgYXMga2V5d29yZCBhcmd1bWVudCAqZm9ybWF0X3N0cmluZyogaGFzIGJlZW4KKyAgICAgICAgIGRlcHJlY2F0ZWQuCiAKICAgIC4uIG1ldGhvZDo6IHZmb3JtYXQoZm9ybWF0X3N0cmluZywgYXJncywga3dhcmdzKQogCkBAIC0yMzAsMTIgKzIzNCwxMiBAQAogCiBTb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOjoKIAotICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQKLSAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50Ci0gICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSIKLSAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50ICduYW1lJwotICAgIldlaWdodCBpbiB0b25zIHswLndlaWdodH0iICAgICAgIyAnd2VpZ2h0JyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmcKLSAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50ICdwbGF5ZXJzJy4KKyAgICJGaXJzdCwgdGhvdSBzaGFsdCBjb3VudCB0byB7MH0iICAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudAorICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50CisgICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAgIyBTYW1lIGFzICJGcm9tIHswfSB0byB7MX0iCisgICAiTXkgcXVlc3QgaXMge25hbWV9IiAgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgJ25hbWUnCisgICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAgIyAnd2VpZ2h0JyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmcKKyAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCAncGxheWVycycuCiAKIFRoZSAqY29udmVyc2lvbiogZmllbGQgY2F1c2VzIGEgdHlwZSBjb2VyY2lvbiBiZWZvcmUgZm9ybWF0dGluZy4gIE5vcm1hbGx5LCB0aGUKIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGUgOm1ldGg6YF9fZm9ybWF0X19gIG1ldGhvZCBvZiB0aGUgdmFsdWUKQEAgLTI2Myw4ICsyNjcsOSBAQAogZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCiAKIEEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIGl0LgotVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGQgbmFtZTsgY29udmVyc2lvbiBmbGFncwotYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGUgcmVwbGFjZW1lbnQgZmllbGRzIHdpdGhpbiB0aGUKK1RoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgbWF5IGNvbnRhaW4gYSBmaWVsZCBuYW1lLCBjb252ZXJzaW9uIGZsYWcKK2FuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbiwgYnV0IGRlZXBlciBuZXN0aW5nIGlzCitub3QgYWxsb3dlZC4gIFRoZSByZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZQogZm9ybWF0X3NwZWMgYXJlIHN1YnN0aXR1dGVkIGJlZm9yZSB0aGUgKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuCiBUaGlzIGFsbG93cyB0aGUgZm9ybWF0dGluZyBvZiBhIHZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC4KIApAQCAtMzAyLDggKzMwNywxMCBAQAogCiBJZiBhIHZhbGlkICphbGlnbiogdmFsdWUgaXMgc3BlY2lmaWVkLCBpdCBjYW4gYmUgcHJlY2VkZWQgYnkgYSAqZmlsbCoKIGNoYXJhY3RlciB0aGF0IGNhbiBiZSBhbnkgY2hhcmFjdGVyIGFuZCBkZWZhdWx0cyB0byBhIHNwYWNlIGlmIG9taXR0ZWQuCi1Ob3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSBgYHtgYCBhbmQgYGB9YGAgYXMgKmZpbGwqIGNoYXIgd2hpbGUKLXVzaW5nIHRoZSA6bWV0aDpgc3RyLmZvcm1hdGAgbWV0aG9kOyB0aGlzIGxpbWl0YXRpb24gaG93ZXZlciBkb2Vzbid0CitJdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIGEgbGl0ZXJhbCBjdXJseSBicmFjZSAoImBge2BgIiBvciAiYGB9YGAiKSBhcwordGhlICpmaWxsKiBjaGFyYWN0ZXIgd2hlbiB1c2luZyB0aGUgOm1ldGg6YHN0ci5mb3JtYXRgCittZXRob2QuICBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byBpbnNlcnQgYSBjdXJseSBicmFjZQord2l0aCBhIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZC4gIFRoaXMgbGltaXRhdGlvbiBkb2Vzbid0CiBhZmZlY3QgdGhlIDpmdW5jOmBmb3JtYXRgIGZ1bmN0aW9uLgogCiBUaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOgpAQCAtMzIwLDcgKzMyNyw4IEBACiAgICB8IGBgJz0nYGAgfCBGb3JjZXMgdGhlIHBhZGRpbmcgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBzaWduIChpZiBhbnkpICB8CiAgICB8ICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyB8CiAgICB8ICAgICAgICAgfCBpbiB0aGUgZm9ybSAnKzAwMDAwMDEyMCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICB8Ci0gICB8ICAgICAgICAgfCB2YWxpZCBmb3IgbnVtZXJpYyB0eXBlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgfCB2YWxpZCBmb3IgbnVtZXJpYyB0eXBlcy4gIEl0IGJlY29tZXMgdGhlIGRlZmF1bHQgd2hlbiAnMCd8CisgICB8ICAgICAgICAgfCBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgZmllbGQgd2lkdGguICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IGBgJ14nYGAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgICB8CiAgICB8ICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC0zNjksNyArMzc3LDggQEAKICp3aWR0aCogaXMgYSBkZWNpbWFsIGludGVnZXIgZGVmaW5pbmcgdGhlIG1pbmltdW0gZmllbGQgd2lkdGguICBJZiBub3QKIHNwZWNpZmllZCwgdGhlbiB0aGUgZmllbGQgd2lkdGggd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50LgogCi1QcmVjZWRpbmcgdGhlICp3aWR0aCogZmllbGQgYnkgYSB6ZXJvIChgYCcwJ2BgKSBjaGFyYWN0ZXIgZW5hYmxlcworV2hlbiBubyBleHBsaWNpdCBhbGlnbm1lbnQgaXMgZ2l2ZW4sIHByZWNlZGluZyB0aGUgKndpZHRoKiBmaWVsZCBieSBhIHplcm8KKyhgYCcwJ2BgKSBjaGFyYWN0ZXIgZW5hYmxlcwogc2lnbi1hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWMgdHlwZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSAqZmlsbCoKIGNoYXJhY3RlciBvZiBgYCcwJ2BgIHdpdGggYW4gKmFsaWdubWVudCogdHlwZSBvZiBgYCc9J2BgLgogCkBAIC00OTIsOCArNTAxLDggQEAKIEZvcm1hdCBleGFtcGxlcwogXl5eXl5eXl5eXl5eXl5eCiAKLVRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb24gd2l0aAotdGhlIG9sZCBgYCVgYC1mb3JtYXR0aW5nLgorVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGV4YW1wbGVzIG9mIHRoZSA6bWV0aDpgc3RyLmZvcm1hdGAgc3ludGF4IGFuZAorY29tcGFyaXNvbiB3aXRoIHRoZSBvbGQgYGAlYGAtZm9ybWF0dGluZy4KIAogSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGQgYGAlYGAtZm9ybWF0dGluZywgd2l0aCB0aGUKIGFkZGl0aW9uIG9mIHRoZSBgYHt9YGAgYW5kIHdpdGggYGA6YGAgdXNlZCBpbnN0ZWFkIG9mIGBgJWBgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RyaW5ncHJlcC5yc3QgYi9Eb2MvbGlicmFyeS9zdHJpbmdwcmVwLnJzdAppbmRleCBmYzg5MGNiLi5lN2ZhZTU2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdHJpbmdwcmVwLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdHJpbmdwcmVwLnJzdApAQCAtMyw5ICszLDEzIEBACiAKIC4uIG1vZHVsZTo6IHN0cmluZ3ByZXAKICAgIDpzeW5vcHNpczogU3RyaW5nIHByZXBhcmF0aW9uLCBhcyBwZXIgUkZDIDM0NTMKKwogLi4gbW9kdWxlYXV0aG9yOjogTWFydGluIHYuIEzDtndpcyA8bWFydGluQHYubG9ld2lzLmRlPgogLi4gc2VjdGlvbmF1dGhvcjo6IE1hcnRpbiB2LiBMw7Z3aXMgPG1hcnRpbkB2LmxvZXdpcy5kZT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3RyaW5ncHJlcC5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogV2hlbiBpZGVudGlmeWluZyB0aGluZ3MgKHN1Y2ggYXMgaG9zdCBuYW1lcykgaW4gdGhlIGludGVybmV0LCBpdCBpcyBvZnRlbgogbmVjZXNzYXJ5IHRvIGNvbXBhcmUgc3VjaCBpZGVudGlmaWNhdGlvbnMgZm9yICJlcXVhbGl0eSIuIEV4YWN0bHkgaG93IHRoaXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CmluZGV4IDEyZDRmYmMuLmFlMmUzOGYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdApAQCAtNCwxMCArNCwxNCBAQAogLi4gbW9kdWxlOjogc3RydWN0CiAgICA6c3lub3BzaXM6IEludGVycHJldCBieXRlcyBhcyBwYWNrZWQgYmluYXJ5IGRhdGEuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N0cnVjdC5weWAKKwogLi4gaW5kZXg6OgogICAgcGFpcjogQzsgc3RydWN0dXJlcwogICAgdHJpcGxlOiBwYWNraW5nOyBiaW5hcnk7IGRhdGEKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgcGVyZm9ybXMgY29udmVyc2lvbnMgYmV0d2VlbiBQeXRob24gdmFsdWVzIGFuZCBDIHN0cnVjdHMgcmVwcmVzZW50ZWQKIGFzIFB5dGhvbiA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzLiAgVGhpcyBjYW4gYmUgdXNlZCBpbiBoYW5kbGluZyBiaW5hcnkgZGF0YQogc3RvcmVkIGluIGZpbGVzIG9yIGZyb20gbmV0d29yayBjb25uZWN0aW9ucywgYW1vbmcgb3RoZXIgc291cmNlcy4gIEl0IHVzZXMKQEAgLTYyLDE2ICs2NiwxNiBAQAogCiAgICBVbnBhY2sgZnJvbSB0aGUgYnVmZmVyICpidWZmZXIqIChwcmVzdW1hYmx5IHBhY2tlZCBieSBgYHBhY2soZm10LCAuLi4pYGApCiAgICBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBzdHJpbmcgKmZtdCouICBUaGUgcmVzdWx0IGlzIGEgdHVwbGUgZXZlbiBpZiBpdAotICAgY29udGFpbnMgZXhhY3RseSBvbmUgaXRlbS4gIFRoZSBidWZmZXIgbXVzdCBjb250YWluIGV4YWN0bHkgdGhlIGFtb3VudCBvZgotICAgZGF0YSByZXF1aXJlZCBieSB0aGUgZm9ybWF0IChgYGxlbihieXRlcylgYCBtdXN0IGVxdWFsIGBgY2FsY3NpemUoZm10KWBgKS4KKyAgIGNvbnRhaW5zIGV4YWN0bHkgb25lIGl0ZW0uICBUaGUgYnVmZmVyJ3Mgc2l6ZSBpbiBieXRlcyBtdXN0IG1hdGNoIHRoZQorICAgc2l6ZSByZXF1aXJlZCBieSB0aGUgZm9ybWF0LCBhcyByZWZsZWN0ZWQgYnkgOmZ1bmM6YGNhbGNzaXplYC4KIAogCiAuLiBmdW5jdGlvbjo6IHVucGFja19mcm9tKGZtdCwgYnVmZmVyLCBvZmZzZXQ9MCkKIAogICAgVW5wYWNrIGZyb20gKmJ1ZmZlciogc3RhcnRpbmcgYXQgcG9zaXRpb24gKm9mZnNldCosIGFjY29yZGluZyB0byB0aGUgZm9ybWF0CiAgICBzdHJpbmcgKmZtdCouICBUaGUgcmVzdWx0IGlzIGEgdHVwbGUgZXZlbiBpZiBpdCBjb250YWlucyBleGFjdGx5IG9uZQotICAgaXRlbS4gICpidWZmZXIqIG11c3QgY29udGFpbiBhdCBsZWFzdCB0aGUgYW1vdW50IG9mIGRhdGEgcmVxdWlyZWQgYnkgdGhlCi0gICBmb3JtYXQgKGBgbGVuKGJ1ZmZlcltvZmZzZXQ6XSlgYCBtdXN0IGJlIGF0IGxlYXN0IGBgY2FsY3NpemUoZm10KWBgKS4KKyAgIGl0ZW0uICBUaGUgYnVmZmVyJ3Mgc2l6ZSBpbiBieXRlcywgbWludXMgKm9mZnNldCosIG11c3QgYmUgYXQgbGVhc3QKKyAgIHRoZSBzaXplIHJlcXVpcmVkIGJ5IHRoZSBmb3JtYXQsIGFzIHJlZmxlY3RlZCBieSA6ZnVuYzpgY2FsY3NpemVgLgogCiAKIC4uIGZ1bmN0aW9uOjogaXRlcl91bnBhY2soZm10LCBidWZmZXIpCkBAIC03OSw4ICs4Myw4IEBACiAgICBJdGVyYXRpdmVseSB1bnBhY2sgZnJvbSB0aGUgYnVmZmVyICpidWZmZXIqIGFjY29yZGluZyB0byB0aGUgZm9ybWF0CiAgICBzdHJpbmcgKmZtdCouICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gaXRlcmF0b3Igd2hpY2ggd2lsbCByZWFkCiAgICBlcXVhbGx5LXNpemVkIGNodW5rcyBmcm9tIHRoZSBidWZmZXIgdW50aWwgYWxsIGl0cyBjb250ZW50cyBoYXZlIGJlZW4KLSAgIGNvbnN1bWVkLiAgVGhlIGJ1ZmZlcidzIHNpemUgaW4gYnl0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBhbW91bnQKLSAgIG9mIGRhdGEgcmVxdWlyZWQgYnkgdGhlIGZvcm1hdCwgYXMgcmVmbGVjdGVkIGJ5IDpmdW5jOmBjYWxjc2l6ZWAuCisgICBjb25zdW1lZC4gIFRoZSBidWZmZXIncyBzaXplIGluIGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgc2l6ZQorICAgcmVxdWlyZWQgYnkgdGhlIGZvcm1hdCwgYXMgcmVmbGVjdGVkIGJ5IDpmdW5jOmBjYWxjc2l6ZWAuCiAKICAgIEVhY2ggaXRlcmF0aW9uIHlpZWxkcyBhIHR1cGxlIGFzIHNwZWNpZmllZCBieSB0aGUgZm9ybWF0IHN0cmluZy4KIApAQCAtMzg5LDcgKzM5Myw3IEBACiAgICAuLiBtZXRob2Q6OiBwYWNrKHYxLCB2MiwgLi4uKQogCiAgICAgICBJZGVudGljYWwgdG8gdGhlIDpmdW5jOmBwYWNrYCBmdW5jdGlvbiwgdXNpbmcgdGhlIGNvbXBpbGVkIGZvcm1hdC4KLSAgICAgIChgYGxlbihyZXN1bHQpYGAgd2lsbCBlcXVhbCA6YXR0cjpgc2VsZi5zaXplYC4pCisgICAgICAoYGBsZW4ocmVzdWx0KWBgIHdpbGwgZXF1YWwgOmF0dHI6YHNpemVgLikKIAogCiAgICAuLiBtZXRob2Q6OiBwYWNrX2ludG8oYnVmZmVyLCBvZmZzZXQsIHYxLCB2MiwgLi4uKQpAQCAtNDAwLDE5ICs0MDQsMjAgQEAKICAgIC4uIG1ldGhvZDo6IHVucGFjayhidWZmZXIpCiAKICAgICAgIElkZW50aWNhbCB0byB0aGUgOmZ1bmM6YHVucGFja2AgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBmb3JtYXQuCi0gICAgICAoYGBsZW4oYnVmZmVyKWBgIG11c3QgZXF1YWwgOmF0dHI6YHNlbGYuc2l6ZWApLgorICAgICAgVGhlIGJ1ZmZlcidzIHNpemUgaW4gYnl0ZXMgbXVzdCBlcXVhbCA6YXR0cjpgc2l6ZWAuCiAKIAogICAgLi4gbWV0aG9kOjogdW5wYWNrX2Zyb20oYnVmZmVyLCBvZmZzZXQ9MCkKIAogICAgICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgdW5wYWNrX2Zyb21gIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgZm9ybWF0LgotICAgICAgKGBgbGVuKGJ1ZmZlcltvZmZzZXQ6XSlgYCBtdXN0IGJlIGF0IGxlYXN0IDphdHRyOmBzZWxmLnNpemVgKS4KKyAgICAgIFRoZSBidWZmZXIncyBzaXplIGluIGJ5dGVzLCBtaW51cyAqb2Zmc2V0KiwgbXVzdCBiZSBhdCBsZWFzdAorICAgICAgOmF0dHI6YHNpemVgLgogCiAKICAgIC4uIG1ldGhvZDo6IGl0ZXJfdW5wYWNrKGJ1ZmZlcikKIAogICAgICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgaXRlcl91bnBhY2tgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgZm9ybWF0LgotICAgICAgKGBgbGVuKGJ1ZmZlcilgYCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOmF0dHI6YHNlbGYuc2l6ZWApLgorICAgICAgVGhlIGJ1ZmZlcidzIHNpemUgaW4gYnl0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDphdHRyOmBzaXplYC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0IGIvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKaW5kZXggOWFjODg4Mi4uMzU2NjA1ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKQEAgLTMsOSArMywxMyBAQAogCiAuLiBtb2R1bGU6OiBzdWJwcm9jZXNzCiAgICA6c3lub3BzaXM6IFN1YnByb2Nlc3MgbWFuYWdlbWVudC4KKwogLi4gbW9kdWxlYXV0aG9yOjogUGV0ZXIgw4VzdHJhbmQgPGFzdHJhbmRAbHlzYXRvci5saXUuc2U+CiAuLiBzZWN0aW9uYXV0aG9yOjogUGV0ZXIgw4VzdHJhbmQgPGFzdHJhbmRAbHlzYXRvci5saXUuc2U+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N1YnByb2Nlc3MucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUgYWxsb3dzIHlvdSB0byBzcGF3biBuZXcgcHJvY2Vzc2VzLCBjb25uZWN0IHRvIHRoZWlyCiBpbnB1dC9vdXRwdXQvZXJyb3IgcGlwZXMsIGFuZCBvYnRhaW4gdGhlaXIgcmV0dXJuIGNvZGVzLiAgVGhpcyBtb2R1bGUgaW50ZW5kcyB0bwpAQCAtMjUsMTA0ICsyOSwzMiBAQAogVXNpbmcgdGhlIDptb2Q6YHN1YnByb2Nlc3NgIE1vZHVsZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggdG8gaW52b2tpbmcgc3VicHJvY2Vzc2VzIGlzIHRvIHVzZSB0aGUgZm9sbG93aW5nCi1jb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGFsbCB1c2UgY2FzZXMgdGhleSBjYW4gaGFuZGxlLiBGb3IgbW9yZSBhZHZhbmNlZAotdXNlIGNhc2VzLCB0aGUgdW5kZXJseWluZyA6Y2xhc3M6YFBvcGVuYCBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgZGlyZWN0bHkuCitUaGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggdG8gaW52b2tpbmcgc3VicHJvY2Vzc2VzIGlzIHRvIHVzZSB0aGUgOmZ1bmM6YHJ1bmAKK2Z1bmN0aW9uIGZvciBhbGwgdXNlIGNhc2VzIGl0IGNhbiBoYW5kbGUuIEZvciBtb3JlIGFkdmFuY2VkIHVzZSBjYXNlcywgdGhlCit1bmRlcmx5aW5nIDpjbGFzczpgUG9wZW5gIGludGVyZmFjZSBjYW4gYmUgdXNlZCBkaXJlY3RseS4KKworVGhlIDpmdW5jOmBydW5gIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiBQeXRob24gMy41OyBpZiB5b3UgbmVlZCB0byByZXRhaW4KK2NvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucywgc2VlIHRoZSA6cmVmOmBjYWxsLWZ1bmN0aW9uLXRyaW9gIHNlY3Rpb24uCiAKIAotLi4gZnVuY3Rpb246OiBjYWxsKGFyZ3MsICosIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHRpbWVvdXQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcnVuKGFyZ3MsICosIHN0ZGluPU5vbmUsIGlucHV0PU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSxcCisgICAgICAgICAgICAgICAgICBzaGVsbD1GYWxzZSwgdGltZW91dD1Ob25lLCBjaGVjaz1GYWxzZSkKIAogICAgUnVuIHRoZSBjb21tYW5kIGRlc2NyaWJlZCBieSAqYXJncyouICBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlLCB0aGVuCi0gICByZXR1cm4gdGhlIDphdHRyOmByZXR1cm5jb2RlYCBhdHRyaWJ1dGUuCisgICByZXR1cm4gYSA6Y2xhc3M6YENvbXBsZXRlZFByb2Nlc3NgIGluc3RhbmNlLgogCiAgICBUaGUgYXJndW1lbnRzIHNob3duIGFib3ZlIGFyZSBtZXJlbHkgdGhlIG1vc3QgY29tbW9uIG9uZXMsIGRlc2NyaWJlZCBiZWxvdwogICAgaW4gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgKGhlbmNlIHRoZSB1c2Ugb2Yga2V5d29yZC1vbmx5IG5vdGF0aW9uCiAgICBpbiB0aGUgYWJicmV2aWF0ZWQgc2lnbmF0dXJlKS4gVGhlIGZ1bGwgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGxhcmdlbHkgdGhlCi0gICBzYW1lIGFzIHRoYXQgb2YgdGhlIDpjbGFzczpgUG9wZW5gIGNvbnN0cnVjdG9yIC0gdGhpcyBmdW5jdGlvbiBwYXNzZXMgYWxsCi0gICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0byB0aGF0IGludGVyZmFjZS4KKyAgIHNhbWUgYXMgdGhhdCBvZiB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IgLSBhcGFydCBmcm9tICp0aW1lb3V0KiwKKyAgICppbnB1dCogYW5kICpjaGVjayosIGFsbCB0aGUgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gYXJlIHBhc3NlZCB0aHJvdWdoIHRvCisgICB0aGF0IGludGVyZmFjZS4KIAotICAgVGhlICp0aW1lb3V0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLndhaXRgLiBJZiB0aGUgdGltZW91dAotICAgZXhwaXJlcywgdGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWQgYW5kIHRoZW4gd2FpdGVkIGZvciBhZ2Fpbi4gIFRoZQotICAgOmV4YzpgVGltZW91dEV4cGlyZWRgIGV4Y2VwdGlvbiB3aWxsIGJlIHJlLXJhaXNlZCBhZnRlciB0aGUgY2hpbGQgcHJvY2VzcwotICAgaGFzIHRlcm1pbmF0ZWQuCisgICBUaGlzIGRvZXMgbm90IGNhcHR1cmUgc3Rkb3V0IG9yIHN0ZGVyciBieSBkZWZhdWx0LiBUbyBkbyBzbywgcGFzcworICAgOmRhdGE6YFBJUEVgIGZvciB0aGUgKnN0ZG91dCogYW5kL29yICpzdGRlcnIqIGFyZ3VtZW50cy4KIAotICAgRXhhbXBsZXM6OgotCi0gICAgICA+Pj4gc3VicHJvY2Vzcy5jYWxsKFsibHMiLCAiLWwiXSkKLSAgICAgIDAKLQotICAgICAgPj4+IHN1YnByb2Nlc3MuY2FsbCgiZXhpdCAxIiwgc2hlbGw9VHJ1ZSkKLSAgICAgIDEKLQotICAgLi4gbm90ZTo6Ci0KLSAgICAgIERvIG5vdCB1c2UgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMKLSAgICAgIGZ1bmN0aW9uLiAgVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBibG9jayBpZiBpdCBnZW5lcmF0ZXMgZW5vdWdoCi0gICAgICBvdXRwdXQgdG8gYSBwaXBlIHRvIGZpbGwgdXAgdGhlIE9TIHBpcGUgYnVmZmVyIGFzIHRoZSBwaXBlcyBhcmUKLSAgICAgIG5vdCBiZWluZyByZWFkIGZyb20uCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICAqdGltZW91dCogd2FzIGFkZGVkLgotCi0KLS4uIGZ1bmN0aW9uOjogY2hlY2tfY2FsbChhcmdzLCAqLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIHNoZWxsPUZhbHNlLCB0aW1lb3V0PU5vbmUpCi0KLSAgIFJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzLiAgV2FpdCBmb3IgY29tbWFuZCB0byBjb21wbGV0ZS4gSWYgdGhlIHJldHVybgotICAgY29kZSB3YXMgemVybyB0aGVuIHJldHVybiwgb3RoZXJ3aXNlIHJhaXNlIDpleGM6YENhbGxlZFByb2Nlc3NFcnJvcmAuIFRoZQotICAgOmV4YzpgQ2FsbGVkUHJvY2Vzc0Vycm9yYCBvYmplY3Qgd2lsbCBoYXZlIHRoZSByZXR1cm4gY29kZSBpbiB0aGUKLSAgIDphdHRyOmB+Q2FsbGVkUHJvY2Vzc0Vycm9yLnJldHVybmNvZGVgIGF0dHJpYnV0ZS4KLQotICAgVGhlIGFyZ3VtZW50cyBzaG93biBhYm92ZSBhcmUgbWVyZWx5IHRoZSBtb3N0IGNvbW1vbiBvbmVzLCBkZXNjcmliZWQgYmVsb3cKLSAgIGluIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIChoZW5jZSB0aGUgdXNlIG9mIGtleXdvcmQtb25seSBub3RhdGlvbgotICAgaW4gdGhlIGFiYnJldmlhdGVkIHNpZ25hdHVyZSkuIFRoZSBmdWxsIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBsYXJnZWx5IHRoZQotICAgc2FtZSBhcyB0aGF0IG9mIHRoZSA6Y2xhc3M6YFBvcGVuYCBjb25zdHJ1Y3RvciAtIHRoaXMgZnVuY3Rpb24gcGFzc2VzIGFsbAotICAgc3VwcGxpZWQgYXJndW1lbnRzIG90aGVyIHRoYW4gKnRpbWVvdXQqIGRpcmVjdGx5IHRocm91Z2ggdG8gdGhhdCBpbnRlcmZhY2UuCi0KLSAgIFRoZSAqdGltZW91dCogYXJndW1lbnQgaXMgcGFzc2VkIHRvIDptZXRoOmBQb3Blbi53YWl0YC4gSWYgdGhlIHRpbWVvdXQKLSAgIGV4cGlyZXMsIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmUga2lsbGVkIGFuZCB0aGVuIHdhaXRlZCBmb3IgYWdhaW4uICBUaGUKLSAgIDpleGM6YFRpbWVvdXRFeHBpcmVkYCBleGNlcHRpb24gd2lsbCBiZSByZS1yYWlzZWQgYWZ0ZXIgdGhlIGNoaWxkIHByb2Nlc3MKLSAgIGhhcyB0ZXJtaW5hdGVkLgotCi0gICBFeGFtcGxlczo6Ci0KLSAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyJscyIsICItbCJdKQotICAgICAgMAotCi0gICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19jYWxsKCJleGl0IDEiLCBzaGVsbD1UcnVlKQotICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgICAgICAgLi4uCi0gICAgICBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjogQ29tbWFuZCAnZXhpdCAxJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAxCi0KLSAgIC4uIG5vdGU6OgotCi0gICAgICBEbyBub3QgdXNlIGBgc3Rkb3V0PVBJUEVgYCBvciBgYHN0ZGVycj1QSVBFYGAgd2l0aCB0aGlzCi0gICAgICBmdW5jdGlvbi4gIFRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmxvY2sgaWYgaXQgZ2VuZXJhdGVzIGVub3VnaAotICAgICAgb3V0cHV0IHRvIGEgcGlwZSB0byBmaWxsIHVwIHRoZSBPUyBwaXBlIGJ1ZmZlciBhcyB0aGUgcGlwZXMgYXJlCi0gICAgICBub3QgYmVpbmcgcmVhZCBmcm9tLgotCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KLQotCi0uLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dChhcmdzLCAqLCBpbnB1dD1Ob25lLCBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdGltZW91dD1Ob25lKQotCi0gICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuCi0KLSAgIElmIHRoZSByZXR1cm4gY29kZSB3YXMgbm9uLXplcm8gaXQgcmFpc2VzIGEgOmV4YzpgQ2FsbGVkUHJvY2Vzc0Vycm9yYC4gVGhlCi0gICA6ZXhjOmBDYWxsZWRQcm9jZXNzRXJyb3JgIG9iamVjdCB3aWxsIGhhdmUgdGhlIHJldHVybiBjb2RlIGluIHRoZQotICAgOmF0dHI6YH5DYWxsZWRQcm9jZXNzRXJyb3IucmV0dXJuY29kZWAgYXR0cmlidXRlIGFuZCBhbnkgb3V0cHV0IGluIHRoZQotICAgOmF0dHI6YH5DYWxsZWRQcm9jZXNzRXJyb3Iub3V0cHV0YCBhdHRyaWJ1dGUuCi0KLSAgIFRoZSBhcmd1bWVudHMgc2hvd24gYWJvdmUgYXJlIG1lcmVseSB0aGUgbW9zdCBjb21tb24gb25lcywgZGVzY3JpYmVkIGJlbG93Ci0gICBpbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCAoaGVuY2UgdGhlIHVzZSBvZiBrZXl3b3JkLW9ubHkgbm90YXRpb24KLSAgIGluIHRoZSBhYmJyZXZpYXRlZCBzaWduYXR1cmUpLiBUaGUgZnVsbCBmdW5jdGlvbiBzaWduYXR1cmUgaXMgbGFyZ2VseSB0aGUKLSAgIHNhbWUgYXMgdGhhdCBvZiB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IgLSB0aGlzIGZ1bmN0aW9ucyBwYXNzZXMgYWxsCi0gICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqaW5wdXQqIGFuZCAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0bwotICAgdGhhdCBpbnRlcmZhY2UuICBJbiBhZGRpdGlvbiwgKnN0ZG91dCogaXMgbm90IHBlcm1pdHRlZCBhcyBhbiBhcmd1bWVudCwgYXMKLSAgIGl0IGlzIHVzZWQgaW50ZXJuYWxseSB0byBjb2xsZWN0IHRoZSBvdXRwdXQgZnJvbSB0aGUgc3VicHJvY2Vzcy4KLQotICAgVGhlICp0aW1lb3V0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLndhaXRgLiBJZiB0aGUgdGltZW91dAotICAgZXhwaXJlcywgdGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBiZSBraWxsZWQgYW5kIHRoZW4gd2FpdGVkIGZvciBhZ2Fpbi4gIFRoZQorICAgVGhlICp0aW1lb3V0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLmNvbW11bmljYXRlYC4gSWYgdGhlIHRpbWVvdXQKKyAgIGV4cGlyZXMsIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmUga2lsbGVkIGFuZCB3YWl0ZWQgZm9yLiAgVGhlCiAgICA6ZXhjOmBUaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uIHdpbGwgYmUgcmUtcmFpc2VkIGFmdGVyIHRoZSBjaGlsZCBwcm9jZXNzCiAgICBoYXMgdGVybWluYXRlZC4KIApAQCAtMTMyLDUzICs2NCw2NCBAQAogICAgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHdpdGggYGBzdGRpbj1QSVBFYGAsIGFuZCB0aGUgKnN0ZGluKiBhcmd1bWVudCBtYXkKICAgIG5vdCBiZSB1c2VkIGFzIHdlbGwuCiAKKyAgIElmICpjaGVjayogaXMgVHJ1ZSwgYW5kIHRoZSBwcm9jZXNzIGV4aXRzIHdpdGggYSBub24temVybyBleGl0IGNvZGUsIGEKKyAgIDpleGM6YENhbGxlZFByb2Nlc3NFcnJvcmAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiBBdHRyaWJ1dGVzIG9mIHRoYXQKKyAgIGV4Y2VwdGlvbiBob2xkIHRoZSBhcmd1bWVudHMsIHRoZSBleGl0IGNvZGUsIGFuZCBzdGRvdXQgYW5kIHN0ZGVyciBpZiB0aGV5CisgICB3ZXJlIGNhcHR1cmVkLgorCiAgICBFeGFtcGxlczo6CiAKLSAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImVjaG8iLCAiSGVsbG8gV29ybGQhIl0pCi0gICAgICBiJ0hlbGxvIFdvcmxkIVxuJworICAgICAgPj4+IHN1YnByb2Nlc3MucnVuKFsibHMiLCAiLWwiXSkgICMgZG9lc24ndCBjYXB0dXJlIG91dHB1dAorICAgICAgQ29tcGxldGVkUHJvY2VzcyhhcmdzPVsnbHMnLCAnLWwnXSwgcmV0dXJuY29kZT0wKQogCi0gICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJlY2hvIiwgIkhlbGxvIFdvcmxkISJdLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKLSAgICAgICdIZWxsbyBXb3JsZCFcbicKLQotICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsic2VkIiwgIi1lIiwgInMvZm9vL2Jhci8iXSwKLSAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dD1iIndoZW4gaW4gdGhlIGNvdXJzZSBvZiBmb29tYW4gZXZlbnRzXG4iKQotICAgICAgYid3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgYmFybWFuIGV2ZW50c1xuJwotCi0gICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImV4aXQgMSIsIHNoZWxsPVRydWUpCisgICAgICA+Pj4gc3VicHJvY2Vzcy5ydW4oImV4aXQgMSIsIHNoZWxsPVRydWUsIGNoZWNrPVRydWUpCiAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgICAgICAuLi4KKyAgICAgICAgLi4uCiAgICAgICBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjogQ29tbWFuZCAnZXhpdCAxJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAxCiAKLSAgIEJ5IGRlZmF1bHQsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGRhdGEgYXMgZW5jb2RlZCBieXRlcy4gVGhlIGFjdHVhbAotICAgZW5jb2Rpbmcgb2YgdGhlIG91dHB1dCBkYXRhIG1heSBkZXBlbmQgb24gdGhlIGNvbW1hbmQgYmVpbmcgaW52b2tlZCwgc28gdGhlCi0gICBkZWNvZGluZyB0byB0ZXh0IHdpbGwgb2Z0ZW4gbmVlZCB0byBiZSBoYW5kbGVkIGF0IHRoZSBhcHBsaWNhdGlvbiBsZXZlbC4KKyAgICAgID4+PiBzdWJwcm9jZXNzLnJ1bihbImxzIiwgIi1sIiwgIi9kZXYvbnVsbCJdLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgQ29tcGxldGVkUHJvY2VzcyhhcmdzPVsnbHMnLCAnLWwnLCAnL2Rldi9udWxsJ10sIHJldHVybmNvZGU9MCwKKyAgICAgIHN0ZG91dD1iJ2Nydy1ydy1ydy0gMSByb290IHJvb3QgMSwgMyBKYW4gMjMgMTY6MjMgL2Rldi9udWxsXG4nKQogCi0gICBUaGlzIGJlaGF2aW91ciBtYXkgYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nICp1bml2ZXJzYWxfbmV3bGluZXMqIHRvCi0gICBgYFRydWVgYCBhcyBkZXNjcmliZWQgYmVsb3cgaW4gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AuCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKIAotICAgVG8gYWxzbyBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIGluIHRoZSByZXN1bHQsIHVzZQotICAgYGBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVRgYDo6CisuLiBjbGFzczo6IENvbXBsZXRlZFByb2Nlc3MKIAotICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAotICAgICAgLi4uICAgICAibHMgbm9uX2V4aXN0ZW50X2ZpbGU7IGV4aXQgMCIsCi0gICAgICAuLi4gICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKLSAgICAgIC4uLiAgICAgc2hlbGw9VHJ1ZSkKLSAgICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKKyAgIFRoZSByZXR1cm4gdmFsdWUgZnJvbSA6ZnVuYzpgcnVuYCwgcmVwcmVzZW50aW5nIGEgcHJvY2VzcyB0aGF0IGhhcyBmaW5pc2hlZC4KIAotICAgLi4gbm90ZTo6CisgICAuLiBhdHRyaWJ1dGU6OiBhcmdzCiAKLSAgICAgIERvIG5vdCB1c2UgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMKLSAgICAgIGZ1bmN0aW9uLiAgVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBibG9jayBpZiBpdCBnZW5lcmF0ZXMgZW5vdWdoCi0gICAgICBvdXRwdXQgdG8gYSBwaXBlIHRvIGZpbGwgdXAgdGhlIE9TIHBpcGUgYnVmZmVyIGFzIHRoZSBwaXBlcyBhcmUKLSAgICAgIG5vdCBiZWluZyByZWFkIGZyb20uCisgICAgICBUaGUgYXJndW1lbnRzIHVzZWQgdG8gbGF1bmNoIHRoZSBwcm9jZXNzLiBUaGlzIG1heSBiZSBhIGxpc3Qgb3IgYSBzdHJpbmcuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQorICAgLi4gYXR0cmlidXRlOjogcmV0dXJuY29kZQogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KKyAgICAgIEV4aXQgc3RhdHVzIG9mIHRoZSBjaGlsZCBwcm9jZXNzLiBUeXBpY2FsbHksIGFuIGV4aXQgc3RhdHVzIG9mIDAgaW5kaWNhdGVzCisgICAgICB0aGF0IGl0IHJhbiBzdWNjZXNzZnVsbHkuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40Ci0gICAgICAqaW5wdXQqIHdhcyBhZGRlZC4KKyAgICAgIEEgbmVnYXRpdmUgdmFsdWUgYGAtTmBgIGluZGljYXRlcyB0aGF0IHRoZSBjaGlsZCB3YXMgdGVybWluYXRlZCBieSBzaWduYWwKKyAgICAgIGBgTmBgIChQT1NJWCBvbmx5KS4KKworICAgLi4gYXR0cmlidXRlOjogc3Rkb3V0CisKKyAgICAgIENhcHR1cmVkIHN0ZG91dCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzLiBBIGJ5dGVzIHNlcXVlbmNlLCBvciBhIHN0cmluZyBpZgorICAgICAgOmZ1bmM6YHJ1bmAgd2FzIGNhbGxlZCB3aXRoIGBgdW5pdmVyc2FsX25ld2xpbmVzPVRydWVgYC4gTm9uZSBpZiBzdGRvdXQKKyAgICAgIHdhcyBub3QgY2FwdHVyZWQuCisKKyAgICAgIElmIHlvdSByYW4gdGhlIHByb2Nlc3Mgd2l0aCBgYHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVGBgLCBzdGRvdXQgYW5kCisgICAgICBzdGRlcnIgd2lsbCBiZSBjb21iaW5lZCBpbiB0aGlzIGF0dHJpYnV0ZSwgYW5kIDphdHRyOmBzdGRlcnJgIHdpbGwgYmUKKyAgICAgIE5vbmUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0ZGVycgorCisgICAgICBDYXB0dXJlZCBzdGRlcnIgZnJvbSB0aGUgY2hpbGQgcHJvY2Vzcy4gQSBieXRlcyBzZXF1ZW5jZSwgb3IgYSBzdHJpbmcgaWYKKyAgICAgIDpmdW5jOmBydW5gIHdhcyBjYWxsZWQgd2l0aCBgYHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlYGAuIE5vbmUgaWYgc3RkZXJyCisgICAgICB3YXMgbm90IGNhcHR1cmVkLgorCisgICAuLiBtZXRob2Q6OiBjaGVja19yZXR1cm5jb2RlKCkKKworICAgICAgSWYgOmF0dHI6YHJldHVybmNvZGVgIGlzIG5vbi16ZXJvLCByYWlzZSBhIDpleGM6YENhbGxlZFByb2Nlc3NFcnJvcmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQogCiAuLiBkYXRhOjogREVWTlVMTAogCkBAIC0yMjUsMTEgKzE2OCwyMiBAQAogCiAgICAgLi4gYXR0cmlidXRlOjogb3V0cHV0CiAKLSAgICAgICAgT3V0cHV0IG9mIHRoZSBjaGlsZCBwcm9jZXNzIGlmIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBieQorICAgICAgICBPdXRwdXQgb2YgdGhlIGNoaWxkIHByb2Nlc3MgaWYgaXQgd2FzIGNhcHR1cmVkIGJ5IDpmdW5jOmBydW5gIG9yCiAgICAgICAgIDpmdW5jOmBjaGVja19vdXRwdXRgLiAgT3RoZXJ3aXNlLCBgYE5vbmVgYC4KIAorICAgIC4uIGF0dHJpYnV0ZTo6IHN0ZG91dAorCisgICAgICAgIEFsaWFzIGZvciBvdXRwdXQsIGZvciBzeW1tZXRyeSB3aXRoIDphdHRyOmBzdGRlcnJgLgorCisgICAgLi4gYXR0cmlidXRlOjogc3RkZXJyCisKKyAgICAgICAgU3RkZXJyIG91dHB1dCBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpZiBpdCB3YXMgY2FwdHVyZWQgYnkgOmZ1bmM6YHJ1bmAuCisgICAgICAgIE90aGVyd2lzZSwgYGBOb25lYGAuCisKICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICAgICpzdGRvdXQqIGFuZCAqc3RkZXJyKiBhdHRyaWJ1dGVzIGFkZGVkCiAKIC4uIGV4Y2VwdGlvbjo6IENhbGxlZFByb2Nlc3NFcnJvcgogCkBAIC0yMzgsNyArMTkyLDggQEAKIAogICAgIC4uIGF0dHJpYnV0ZTo6IHJldHVybmNvZGUKIAotICAgICAgICBFeGl0IHN0YXR1cyBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAgICAgICAgRXhpdCBzdGF0dXMgb2YgdGhlIGNoaWxkIHByb2Nlc3MuICBJZiB0aGUgcHJvY2VzcyBleGl0ZWQgZHVlIHRvIGEKKyAgICAgICAgc2lnbmFsLCB0aGlzIHdpbGwgYmUgdGhlIG5lZ2F0aXZlIHNpZ25hbCBudW1iZXIuCiAKICAgICAuLiBhdHRyaWJ1dGU6OiBjbWQKIApAQCAtMjQ2LDkgKzIwMSwyMCBAQAogCiAgICAgLi4gYXR0cmlidXRlOjogb3V0cHV0CiAKLSAgICAgICAgT3V0cHV0IG9mIHRoZSBjaGlsZCBwcm9jZXNzIGlmIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBieQorICAgICAgICBPdXRwdXQgb2YgdGhlIGNoaWxkIHByb2Nlc3MgaWYgaXQgd2FzIGNhcHR1cmVkIGJ5IDpmdW5jOmBydW5gIG9yCiAgICAgICAgIDpmdW5jOmBjaGVja19vdXRwdXRgLiAgT3RoZXJ3aXNlLCBgYE5vbmVgYC4KIAorICAgIC4uIGF0dHJpYnV0ZTo6IHN0ZG91dAorCisgICAgICAgIEFsaWFzIGZvciBvdXRwdXQsIGZvciBzeW1tZXRyeSB3aXRoIDphdHRyOmBzdGRlcnJgLgorCisgICAgLi4gYXR0cmlidXRlOjogc3RkZXJyCisKKyAgICAgICAgU3RkZXJyIG91dHB1dCBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpZiBpdCB3YXMgY2FwdHVyZWQgYnkgOmZ1bmM6YHJ1bmAuCisgICAgICAgIE90aGVyd2lzZSwgYGBOb25lYGAuCisKKyAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgICAqc3Rkb3V0KiBhbmQgKnN0ZGVyciogYXR0cmlidXRlcyBhZGRlZAogCiAKIC4uIF9mcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzOgpAQCAtNTE0LDcgKzQ4MCw3IEBACiAgICAgICBleGVjdXRlLiAgT24gV2luZG93cywgaW4gb3JkZXIgdG8gcnVuIGEgYHNpZGUtYnktc2lkZSBhc3NlbWJseWBfIHRoZQogICAgICAgc3BlY2lmaWVkICplbnYqICoqbXVzdCoqIGluY2x1ZGUgYSB2YWxpZCA6ZW52dmFyOmBTeXN0ZW1Sb290YC4KIAotICAgLi4gX3NpZGUtYnktc2lkZSBhc3NlbWJseTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaWRlLWJ5LVNpZGVfQXNzZW1ibHkKKyAgIC4uIF9zaWRlLWJ5LXNpZGUgYXNzZW1ibHk6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NpZGUtYnktU2lkZV9Bc3NlbWJseQogCiAgICBJZiAqdW5pdmVyc2FsX25ld2xpbmVzKiBpcyBgYFRydWVgYCwgdGhlIGZpbGUgb2JqZWN0cyAqc3RkaW4qLCAqc3Rkb3V0KgogICAgYW5kICpzdGRlcnIqIGFyZSBvcGVuZWQgYXMgdGV4dCBzdHJlYW1zIGluIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLCBhcwpAQCAtNTc1LDcgKzU0MSw3IEBACiBJZiB0aGUgc2hlbGwgaXMgaW52b2tlZCBleHBsaWNpdGx5LCB2aWEgYGBzaGVsbD1UcnVlYGAsIGl0IGlzIHRoZSBhcHBsaWNhdGlvbidzCiByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBhbGwgd2hpdGVzcGFjZSBhbmQgbWV0YWNoYXJhY3RlcnMgYXJlCiBxdW90ZWQgYXBwcm9wcmlhdGVseSB0byBhdm9pZAotYHNoZWxsIGluamVjdGlvbiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGVsbF9pbmplY3Rpb24jU2hlbGxfaW5qZWN0aW9uPmBfCitgc2hlbGwgaW5qZWN0aW9uIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGVsbF9pbmplY3Rpb24jU2hlbGxfaW5qZWN0aW9uPmBfCiB2dWxuZXJhYmlsaXRpZXMuCiAKIFdoZW4gdXNpbmcgYGBzaGVsbD1UcnVlYGAsIHRoZSA6ZnVuYzpgc2hsZXgucXVvdGVgIGZ1bmN0aW9uIGNhbiBiZQpAQCAtNjM1LDYgKzYwMSw3IEBACiAgICBtdXN0IGJlIGJ5dGVzIG9yLCBpZiAqdW5pdmVyc2FsX25ld2xpbmVzKiB3YXMgYGBUcnVlYGAsIGEgc3RyaW5nLgogCiAgICA6bWV0aDpgY29tbXVuaWNhdGVgIHJldHVybnMgYSB0dXBsZSBgYChzdGRvdXRfZGF0YSwgc3RkZXJyX2RhdGEpYGAuCisgICBUaGUgZGF0YSB3aWxsIGJlIGJ5dGVzIG9yLCBpZiAqdW5pdmVyc2FsX25ld2xpbmVzKiB3YXMgYGBUcnVlYGAsIHN0cmluZ3MuCiAKICAgIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byBzZW5kIGRhdGEgdG8gdGhlIHByb2Nlc3MncyBzdGRpbiwgeW91IG5lZWQgdG8gY3JlYXRlCiAgICB0aGUgUG9wZW4gb2JqZWN0IHdpdGggYGBzdGRpbj1QSVBFYGAuICBTaW1pbGFybHksIHRvIGdldCBhbnl0aGluZyBvdGhlciB0aGFuCkBAIC03NTksNyArNzI2LDcgQEAKIC4uIGNsYXNzOjogU1RBUlRVUElORk8oKQogCiAgICBQYXJ0aWFsIHN1cHBvcnQgb2YgdGhlIFdpbmRvd3MKLSAgIGBTVEFSVFVQSU5GTyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNjg2MzMxKHY9dnMuODUpLmFzcHg+YF9fCisgICBgU1RBUlRVUElORk8gPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2ODYzMzEodj12cy44NSkuYXNweD5gX18KICAgIHN0cnVjdHVyZSBpcyB1c2VkIGZvciA6Y2xhc3M6YFBvcGVuYCBjcmVhdGlvbi4KIAogICAgLi4gYXR0cmlidXRlOjogZHdGbGFncwpAQCAtNzk1LDcgKzc2Miw3IEBACiAgICAgICBJZiA6YXR0cjpgZHdGbGFnc2Agc3BlY2lmaWVzIDpkYXRhOmBTVEFSVEZfVVNFU0hPV1dJTkRPV2AsIHRoaXMgYXR0cmlidXRlCiAgICAgICBjYW4gYmUgYW55IG9mIHRoZSB2YWx1ZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBgYG5DbWRTaG93YGAKICAgICAgIHBhcmFtZXRlciBmb3IgdGhlCi0gICAgICBgU2hvd1dpbmRvdyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNjMzNTQ4KHY9dnMuODUpLmFzcHg+YF9fCisgICAgICBgU2hvd1dpbmRvdyA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczYzMzU0OCh2PXZzLjg1KS5hc3B4PmBfXwogICAgICAgZnVuY3Rpb24sIGV4Y2VwdCBmb3IgYGBTV19TSE9XREVGQVVMVGBgLiBPdGhlcndpc2UsIHRoaXMgYXR0cmlidXRlIGlzCiAgICAgICBpZ25vcmVkLgogCkBAIC04NTEsNiArODE4LDExMiBAQAogCiAgICBUaGlzIGZsYWcgaXMgaWdub3JlZCBpZiA6ZGF0YTpgQ1JFQVRFX05FV19DT05TT0xFYCBpcyBzcGVjaWZpZWQuCiAKKy4uIF9jYWxsLWZ1bmN0aW9uLXRyaW86CisKK09sZGVyIGhpZ2gtbGV2ZWwgQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQcmlvciB0byBQeXRob24gMy41LCB0aGVzZSB0aHJlZSBmdW5jdGlvbnMgY29tcHJpc2VkIHRoZSBoaWdoIGxldmVsIEFQSSB0bworc3VicHJvY2Vzcy4gWW91IGNhbiBub3cgdXNlIDpmdW5jOmBydW5gIGluIG1hbnkgY2FzZXMsIGJ1dCBsb3RzIG9mIGV4aXN0aW5nIGNvZGUKK2NhbGxzIHRoZXNlIGZ1bmN0aW9ucy4KKworLi4gZnVuY3Rpb246OiBjYWxsKGFyZ3MsICosIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHRpbWVvdXQ9Tm9uZSkKKworICAgUnVuIHRoZSBjb21tYW5kIGRlc2NyaWJlZCBieSAqYXJncyouICBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlLCB0aGVuCisgICByZXR1cm4gdGhlIDphdHRyOmB+UG9wZW4ucmV0dXJuY29kZWAgYXR0cmlidXRlLgorCisgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG86OgorCisgICAgICAgcnVuKC4uLikucmV0dXJuY29kZQorCisgICAoZXhjZXB0IHRoYXQgdGhlICppbnB1dCogYW5kICpjaGVjayogcGFyYW1ldGVycyBhcmUgbm90IHN1cHBvcnRlZCkKKworICAgVGhlIGFyZ3VtZW50cyBzaG93biBhYm92ZSBhcmUgbWVyZWx5IHRoZSBtb3N0CisgICBjb21tb24gb25lcy4gVGhlIGZ1bGwgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGxhcmdlbHkgdGhlCisgICBzYW1lIGFzIHRoYXQgb2YgdGhlIDpjbGFzczpgUG9wZW5gIGNvbnN0cnVjdG9yIC0gdGhpcyBmdW5jdGlvbiBwYXNzZXMgYWxsCisgICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0byB0aGF0IGludGVyZmFjZS4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIERvIG5vdCB1c2UgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMKKyAgICAgIGZ1bmN0aW9uLiAgVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBibG9jayBpZiBpdCBnZW5lcmF0ZXMgZW5vdWdoCisgICAgICBvdXRwdXQgdG8gYSBwaXBlIHRvIGZpbGwgdXAgdGhlIE9TIHBpcGUgYnVmZmVyIGFzIHRoZSBwaXBlcyBhcmUKKyAgICAgIG5vdCBiZWluZyByZWFkIGZyb20uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgorCisuLiBmdW5jdGlvbjo6IGNoZWNrX2NhbGwoYXJncywgKiwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBzaGVsbD1GYWxzZSwgdGltZW91dD1Ob25lKQorCisgICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cy4gIFdhaXQgZm9yIGNvbW1hbmQgdG8gY29tcGxldGUuIElmIHRoZSByZXR1cm4KKyAgIGNvZGUgd2FzIHplcm8gdGhlbiByZXR1cm4sIG90aGVyd2lzZSByYWlzZSA6ZXhjOmBDYWxsZWRQcm9jZXNzRXJyb3JgLiBUaGUKKyAgIDpleGM6YENhbGxlZFByb2Nlc3NFcnJvcmAgb2JqZWN0IHdpbGwgaGF2ZSB0aGUgcmV0dXJuIGNvZGUgaW4gdGhlCisgICA6YXR0cjpgfkNhbGxlZFByb2Nlc3NFcnJvci5yZXR1cm5jb2RlYCBhdHRyaWJ1dGUuCisKKyAgIFRoaXMgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgICBydW4oLi4uLCBjaGVjaz1UcnVlKQorCisgICAoZXhjZXB0IHRoYXQgdGhlICppbnB1dCogcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQpCisKKyAgIFRoZSBhcmd1bWVudHMgc2hvd24gYWJvdmUgYXJlIG1lcmVseSB0aGUgbW9zdAorICAgY29tbW9uIG9uZXMuIFRoZSBmdWxsIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBsYXJnZWx5IHRoZQorICAgc2FtZSBhcyB0aGF0IG9mIHRoZSA6Y2xhc3M6YFBvcGVuYCBjb25zdHJ1Y3RvciAtIHRoaXMgZnVuY3Rpb24gcGFzc2VzIGFsbAorICAgc3VwcGxpZWQgYXJndW1lbnRzIG90aGVyIHRoYW4gKnRpbWVvdXQqIGRpcmVjdGx5IHRocm91Z2ggdG8gdGhhdCBpbnRlcmZhY2UuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBEbyBub3QgdXNlIGBgc3Rkb3V0PVBJUEVgYCBvciBgYHN0ZGVycj1QSVBFYGAgd2l0aCB0aGlzCisgICAgICBmdW5jdGlvbi4gIFRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmxvY2sgaWYgaXQgZ2VuZXJhdGVzIGVub3VnaAorICAgICAgb3V0cHV0IHRvIGEgcGlwZSB0byBmaWxsIHVwIHRoZSBPUyBwaXBlIGJ1ZmZlciBhcyB0aGUgcGlwZXMgYXJlCisgICAgICBub3QgYmVpbmcgcmVhZCBmcm9tLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KKworCisuLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dChhcmdzLCAqLCBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdGltZW91dD1Ob25lKQorCisgICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuCisKKyAgIElmIHRoZSByZXR1cm4gY29kZSB3YXMgbm9uLXplcm8gaXQgcmFpc2VzIGEgOmV4YzpgQ2FsbGVkUHJvY2Vzc0Vycm9yYC4gVGhlCisgICA6ZXhjOmBDYWxsZWRQcm9jZXNzRXJyb3JgIG9iamVjdCB3aWxsIGhhdmUgdGhlIHJldHVybiBjb2RlIGluIHRoZQorICAgOmF0dHI6YH5DYWxsZWRQcm9jZXNzRXJyb3IucmV0dXJuY29kZWAgYXR0cmlidXRlIGFuZCBhbnkgb3V0cHV0IGluIHRoZQorICAgOmF0dHI6YH5DYWxsZWRQcm9jZXNzRXJyb3Iub3V0cHV0YCBhdHRyaWJ1dGUuCisKKyAgIFRoaXMgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgICBydW4oLi4uLCBjaGVjaz1UcnVlLCBzdGRvdXQ9UElQRSkuc3Rkb3V0CisKKyAgIFRoZSBhcmd1bWVudHMgc2hvd24gYWJvdmUgYXJlIG1lcmVseSB0aGUgbW9zdCBjb21tb24gb25lcy4KKyAgIFRoZSBmdWxsIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBsYXJnZWx5IHRoZSBzYW1lIGFzIHRoYXQgb2YgOmZ1bmM6YHJ1bmAgLQorICAgbW9zdCBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0aHJvdWdoIHRvIHRoYXQgaW50ZXJmYWNlLgorICAgSG93ZXZlciwgZXhwbGljaXRseSBwYXNzaW5nIGBgaW5wdXQ9Tm9uZWBgIHRvIGluaGVyaXQgdGhlIHBhcmVudCdzCisgICBzdGFuZGFyZCBpbnB1dCBmaWxlIGhhbmRsZSBpcyBub3Qgc3VwcG9ydGVkLgorCisgICBCeSBkZWZhdWx0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBkYXRhIGFzIGVuY29kZWQgYnl0ZXMuIFRoZSBhY3R1YWwKKyAgIGVuY29kaW5nIG9mIHRoZSBvdXRwdXQgZGF0YSBtYXkgZGVwZW5kIG9uIHRoZSBjb21tYW5kIGJlaW5nIGludm9rZWQsIHNvIHRoZQorICAgZGVjb2RpbmcgdG8gdGV4dCB3aWxsIG9mdGVuIG5lZWQgdG8gYmUgaGFuZGxlZCBhdCB0aGUgYXBwbGljYXRpb24gbGV2ZWwuCisKKyAgIFRoaXMgYmVoYXZpb3VyIG1heSBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgKnVuaXZlcnNhbF9uZXdsaW5lcyogdG8KKyAgIGBgVHJ1ZWBgIGFzIGRlc2NyaWJlZCBhYm92ZSBpbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYC4KKworICAgVG8gYWxzbyBjYXB0dXJlIHN0YW5kYXJkIGVycm9yIGluIHRoZSByZXN1bHQsIHVzZQorICAgYGBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVRgYDo6CisKKyAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgIC4uLiAgICAgImxzIG5vbl9leGlzdGVudF9maWxlOyBleGl0IDAiLAorICAgICAgLi4uICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAuLi4gICAgIHNoZWxsPVRydWUpCisgICAgICAnbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFN1cHBvcnQgZm9yIHRoZSAqaW5wdXQqIGtleXdvcmQgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAuLiBfc3VicHJvY2Vzcy1yZXBsYWNlbWVudHM6CiAKQEAgLTg3NywyMCArOTUwLDIzIEBACiBSZXBsYWNpbmcgL2Jpbi9zaCBzaGVsbCBiYWNrcXVvdGUKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi06OgorLi4gY29kZS1ibG9jazo6IGJhc2gKIAogICAgb3V0cHV0PWBteWNtZCBteWFyZ2AKLSAgICMgYmVjb21lcwotICAgb3V0cHV0ID0gY2hlY2tfb3V0cHV0KFsibXljbWQiLCAibXlhcmciXSkKIAorYmVjb21lczo6CisKKyAgIG91dHB1dCA9IGNoZWNrX291dHB1dChbIm15Y21kIiwgIm15YXJnIl0pCiAKIFJlcGxhY2luZyBzaGVsbCBwaXBlbGluZQogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLTo6CisuLiBjb2RlLWJsb2NrOjogYmFzaAogCiAgICBvdXRwdXQ9YGRtZXNnIHwgZ3JlcCBoZGFgCi0gICAjIGJlY29tZXMKKworYmVjb21lczo6CisKICAgIHAxID0gUG9wZW4oWyJkbWVzZyJdLCBzdGRvdXQ9UElQRSkKICAgIHAyID0gUG9wZW4oWyJncmVwIiwgImhkYSJdLCBzdGRpbj1wMS5zdGRvdXQsIHN0ZG91dD1QSVBFKQogICAgcDEuc3Rkb3V0LmNsb3NlKCkgICMgQWxsb3cgcDEgdG8gcmVjZWl2ZSBhIFNJR1BJUEUgaWYgcDIgZXhpdHMuCkBAIC05MDAsMTAgKzk3NiwxNCBAQAogdG8gcmVjZWl2ZSBhIFNJR1BJUEUgaWYgcDIgZXhpdHMgYmVmb3JlIHAxLgogCiBBbHRlcm5hdGl2ZWx5LCBmb3IgdHJ1c3RlZCBpbnB1dCwgdGhlIHNoZWxsJ3Mgb3duIHBpcGVsaW5lIHN1cHBvcnQgbWF5IHN0aWxsCi1iZSB1c2VkIGRpcmVjdGx5OjoKK2JlIHVzZWQgZGlyZWN0bHk6CisKKy4uIGNvZGUtYmxvY2s6OiBiYXNoCiAKICAgIG91dHB1dD1gZG1lc2cgfCBncmVwIGhkYWAKLSAgICMgYmVjb21lcworCitiZWNvbWVzOjoKKwogICAgb3V0cHV0PWNoZWNrX291dHB1dCgiZG1lc2cgfCBncmVwIGhkYSIsIHNoZWxsPVRydWUpCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VuYXUucnN0IGIvRG9jL2xpYnJhcnkvc3VuYXUucnN0CmluZGV4IGJkMzdlZTIuLmQwZmQwYTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N1bmF1LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHN1bmF1CiAgICA6c3lub3BzaXM6IFByb3ZpZGUgYW4gaW50ZXJmYWNlIHRvIHRoZSBTdW4gQVUgc291bmQgZm9ybWF0LgorCiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zdW5hdS5weWAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5bWJvbC5yc3QgYi9Eb2MvbGlicmFyeS9zeW1ib2wucnN0CmluZGV4IGVmOWVmMWUuLjQ0OTk2OTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5bWJvbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3ltYm9sLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogc3ltYm9sCiAgICA6c3lub3BzaXM6IENvbnN0YW50cyByZXByZXNlbnRpbmcgaW50ZXJuYWwgbm9kZXMgb2YgdGhlIHBhcnNlIHRyZWUuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zeW1ib2wucHlgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeW10YWJsZS5yc3QgYi9Eb2MvbGlicmFyeS9zeW10YWJsZS5yc3QKaW5kZXggMjUwM2QzMy4uYmEyY2FmZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3ltdGFibGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5bXRhYmxlLnJzdApAQCAtNzEsMTAgKzcxLDYgQEAKIAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBibG9jayB1c2VzIGBgZXhlY2BgLgogCi0gICAuLiBtZXRob2Q6OiBoYXNfaW1wb3J0X3N0YXIoKQotCi0gICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGJsb2NrIHVzZXMgYSBzdGFycmVkIGZyb20taW1wb3J0LgotCiAgICAuLiBtZXRob2Q6OiBnZXRfaWRlbnRpZmllcnMoKQogCiAgICAgICBSZXR1cm4gYSBsaXN0IG9mIG5hbWVzIG9mIHN5bWJvbHMgaW4gdGhpcyB0YWJsZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5cy5yc3QgYi9Eb2MvbGlicmFyeS9zeXMucnN0CmluZGV4IGMwMzc4ZTAuLmVkNWRiMDUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3lzLnJzdApAQCAtNCw2ICs0LDcgQEAKIC4uIG1vZHVsZTo6IHN5cwogICAgOnN5bm9wc2lzOiBBY2Nlc3Mgc3lzdGVtLXNwZWNpZmljIHBhcmFtZXRlcnMgYW5kIGZ1bmN0aW9ucy4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHNvbWUgdmFyaWFibGVzIHVzZWQgb3IgbWFpbnRhaW5lZCBieSB0aGUKIGludGVycHJldGVyIGFuZCB0byBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCBzdHJvbmdseSB3aXRoIHRoZSBpbnRlcnByZXRlci4gSXQgaXMKQEAgLTE2Nyw3ICsxNjgsNyBAQAogCiAuLiBkYXRhOjogZG9udF93cml0ZV9ieXRlY29kZQogCi0gICBJZiB0aGlzIGlzIHRydWUsIFB5dGhvbiB3b24ndCB0cnkgdG8gd3JpdGUgYGAucHljYGAgb3IgYGAucHlvYGAgZmlsZXMgb24gdGhlCisgICBJZiB0aGlzIGlzIHRydWUsIFB5dGhvbiB3b24ndCB0cnkgdG8gd3JpdGUgYGAucHljYGAgZmlsZXMgb24gdGhlCiAgICBpbXBvcnQgb2Ygc291cmNlIG1vZHVsZXMuICBUaGlzIHZhbHVlIGlzIGluaXRpYWxseSBzZXQgdG8gYGBUcnVlYGAgb3IKICAgIGBgRmFsc2VgYCBkZXBlbmRpbmcgb24gdGhlIDpvcHRpb246YC1CYCBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCB0aGUKICAgIDplbnZ2YXI6YFBZVEhPTkRPTlRXUklURUJZVEVDT0RFYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYnV0IHlvdSBjYW4gc2V0IGl0CkBAIC00NzQsNyArNDc1LDcgQEAKICAgIGFkZGl0aW9uYWwgZ2FyYmFnZSBjb2xsZWN0b3Igb3ZlcmhlYWQgaWYgdGhlIG9iamVjdCBpcyBtYW5hZ2VkIGJ5IHRoZSBnYXJiYWdlCiAgICBjb2xsZWN0b3IuCiAKLSAgIFNlZSBgcmVjdXJzaXZlIHNpemVvZiByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzUwND5gXworICAgU2VlIGByZWN1cnNpdmUgc2l6ZW9mIHJlY2lwZSA8aHR0cHM6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzUwND5gXwogICAgZm9yIGFuIGV4YW1wbGUgb2YgdXNpbmcgOmZ1bmM6YGdldHNpemVvZmAgcmVjdXJzaXZlbHkgdG8gZmluZCB0aGUgc2l6ZSBvZgogICAgY29udGFpbmVycyBhbmQgYWxsIHRoZWlyIGNvbnRlbnRzLgogCkBAIC01NzYsNiArNTc3LDE4IEBACiAgICAgICAqc2VydmljZV9wYWNrX21ham9yKiwgKnN1aXRlX21hc2sqLCBhbmQgKnByb2R1Y3RfdHlwZSouCiAKIAorLi4gZnVuY3Rpb246OiBnZXRfY29yb3V0aW5lX3dyYXBwZXIoKQorCisgICBSZXR1cm5zIGBgTm9uZWBgLCBvciBhIHdyYXBwZXIgc2V0IGJ5IDpmdW5jOmBzZXRfY29yb3V0aW5lX3dyYXBwZXJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKyAgICAgIFNlZSA6cGVwOmA0OTJgIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIC4uIG5vdGU6OgorICAgICAgVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBhZGRlZCBvbiBhIHByb3Zpc2lvbmFsIGJhc2lzIChzZWUgOnBlcDpgNDExYAorICAgICAgZm9yIGRldGFpbHMuKSAgVXNlIGl0IG9ubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKworCiAuLiBkYXRhOjogaGFzaF9pbmZvCiAKICAgIEEgOnRlcm06YHN0cnVjdCBzZXF1ZW5jZWAgZ2l2aW5nIHBhcmFtZXRlcnMgb2YgdGhlIG51bWVyaWMgaGFzaApAQCAtNzE4LDYgKzczMSwxNCBAQAogICAgdmFsdWUgb2YgOmZ1bmM6YGludGVybmAgYXJvdW5kIHRvIGJlbmVmaXQgZnJvbSBpdC4KIAogCisuLiBmdW5jdGlvbjo6IGlzX2ZpbmFsaXppbmcoKQorCisgICBSZXR1cm4gOmNvbnN0OmBUcnVlYCBpZiB0aGUgUHl0aG9uIGludGVycHJldGVyIGlzCisgICA6dGVybTpgc2h1dHRpbmcgZG93biA8aW50ZXJwcmV0ZXIgc2h1dGRvd24+YCwgOmNvbnN0OmBGYWxzZWAgb3RoZXJ3aXNlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBkYXRhOjogbGFzdF90eXBlCiAgICAgICAgICAgbGFzdF92YWx1ZQogICAgICAgICAgIGxhc3RfdHJhY2ViYWNrCkBAIC03NTQsMTkgKzc3NSwzMiBAQAogCiAuLiBkYXRhOjogbWV0YV9wYXRoCiAKLSAgICBBIGxpc3Qgb2YgOnRlcm06YGZpbmRlcmAgb2JqZWN0cyB0aGF0IGhhdmUgdGhlaXIgOm1ldGg6YGZpbmRfbW9kdWxlYAotICAgIG1ldGhvZHMgY2FsbGVkIHRvIHNlZSBpZiBvbmUgb2YgdGhlIG9iamVjdHMgY2FuIGZpbmQgdGhlIG1vZHVsZSB0byBiZQotICAgIGltcG9ydGVkLiBUaGUgOm1ldGg6YGZpbmRfbW9kdWxlYCBtZXRob2QgaXMgY2FsbGVkIGF0IGxlYXN0IHdpdGggdGhlCi0gICAgYWJzb2x1dGUgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkLiBJZiB0aGUgbW9kdWxlIHRvIGJlIGltcG9ydGVkIGlzCi0gICAgY29udGFpbmVkIGluIHBhY2thZ2UgdGhlbiB0aGUgcGFyZW50IHBhY2thZ2UncyA6YXR0cjpgX19wYXRoX19gIGF0dHJpYnV0ZQotICAgIGlzIHBhc3NlZCBpbiBhcyBhIHNlY29uZCBhcmd1bWVudC4gVGhlIG1ldGhvZCByZXR1cm5zIGBgTm9uZWBgIGlmCi0gICAgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQsIGVsc2UgcmV0dXJucyBhIDp0ZXJtOmBsb2FkZXJgLgorICAgIEEgbGlzdCBvZiA6dGVybTpgbWV0YSBwYXRoIGZpbmRlcmAgb2JqZWN0cyB0aGF0IGhhdmUgdGhlaXIKKyAgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9zcGVjYCBtZXRob2RzIGNhbGxlZCB0byBzZWUgaWYgb25lCisgICAgb2YgdGhlIG9iamVjdHMgY2FuIGZpbmQgdGhlIG1vZHVsZSB0byBiZSBpbXBvcnRlZC4gVGhlCisgICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGF0CisgICAgbGVhc3QgdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZC4gSWYgdGhlIG1vZHVsZSB0byBiZQorICAgIGltcG9ydGVkIGlzIGNvbnRhaW5lZCBpbiBhIHBhY2thZ2UsIHRoZW4gdGhlIHBhcmVudCBwYWNrYWdlJ3MgOmF0dHI6YF9fcGF0aF9fYAorICAgIGF0dHJpYnV0ZSBpcyBwYXNzZWQgaW4gYXMgYSBzZWNvbmQgYXJndW1lbnQuIFRoZSBtZXRob2QgcmV0dXJucyBhCisgICAgOnRlcm06YG1vZHVsZSBzcGVjYCwgb3IgYGBOb25lYGAgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCiAKLSAgICA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAgaXMgc2VhcmNoZWQgYmVmb3JlIGFueSBpbXBsaWNpdCBkZWZhdWx0IGZpbmRlcnMgb3IKLSAgICA6ZGF0YTpgc3lzLnBhdGhgLgorICAgIC4uIHNlZWFsc286OgogCi0gICAgU2VlIDpwZXA6YDMwMmAgZm9yIHRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uLgorICAgICAgICA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXJgCisgICAgICAgICAgVGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgZGVmaW5pbmcgdGhlIGludGVyZmFjZSBvZiBmaW5kZXIgb2JqZWN0cyBvbgorICAgICAgICAgIDpkYXRhOmBtZXRhX3BhdGhgLgorICAgICAgICA6Y2xhc3M6YGltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlY2AKKyAgICAgICAgICBUaGUgY29uY3JldGUgY2xhc3Mgd2hpY2gKKyAgICAgICAgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9zcGVjYCBzaG91bGQgcmV0dXJuCisgICAgICAgICAgaW5zdGFuY2VzIG9mLgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgICAgICA6dGVybTpgTW9kdWxlIHNwZWNzIDxtb2R1bGUgc3BlYz5gIHdlcmUgaW50cm9kdWNlZCBpbiBQeXRob24gMy40LCBieQorICAgICAgICA6cGVwOmA0NTFgLiBFYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbiBsb29rZWQgZm9yIGEgbWV0aG9kIGNhbGxlZAorICAgICAgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9tb2R1bGVgLgorICAgICAgICBUaGlzIGlzIHN0aWxsIGNhbGxlZCBhcyBhIGZhbGxiYWNrIGlmIGEgOmRhdGE6YG1ldGFfcGF0aGAgZW50cnkgZG9lc24ndAorICAgICAgICBoYXZlIGEgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kLgogCiAuLiBkYXRhOjogbW9kdWxlcwogCkBAIC05NTUsNiArOTg5LDEzIEBACiAgICB0aGF0IHN1cHBvcnRzIGEgaGlnaGVyIGxpbWl0LiAgVGhpcyBzaG91bGQgYmUgZG9uZSB3aXRoIGNhcmUsIGJlY2F1c2UgYSB0b28taGlnaAogICAgbGltaXQgY2FuIGxlYWQgdG8gYSBjcmFzaC4KIAorICAgSWYgdGhlIG5ldyBsaW1pdCBpcyB0b28gbG93IGF0IHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBkZXB0aCwgYQorICAgOmV4YzpgUmVjdXJzaW9uRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41LjEKKyAgICAgIEEgOmV4YzpgUmVjdXJzaW9uRXJyb3JgIGV4Y2VwdGlvbiBpcyBub3cgcmFpc2VkIGlmIHRoZSBuZXcgbGltaXQgaXMgdG9vCisgICAgICBsb3cgYXQgdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoLgorCiAKIC4uIGZ1bmN0aW9uOjogc2V0c3dpdGNoaW50ZXJ2YWwoaW50ZXJ2YWwpCiAKQEAgLTEwNTMsNiArMTA5NCw0NiBAQAogICAgICAgdGh1cyBub3QgbGlrZWx5IHRvIGJlIGltcGxlbWVudGVkIGVsc2V3aGVyZS4KIAogCisuLiBmdW5jdGlvbjo6IHNldF9jb3JvdXRpbmVfd3JhcHBlcih3cmFwcGVyKQorCisgICBBbGxvd3MgaW50ZXJjZXB0aW5nIGNyZWF0aW9uIG9mIDp0ZXJtOmBjb3JvdXRpbmVgIG9iamVjdHMgKG9ubHkgb25lcyB0aGF0CisgICBhcmUgY3JlYXRlZCBieSBhbiA6a2V5d29yZDpgYXN5bmMgZGVmYCBmdW5jdGlvbjsgZ2VuZXJhdG9ycyBkZWNvcmF0ZWQgd2l0aAorICAgOmZ1bmM6YHR5cGVzLmNvcm91dGluZWAgb3IgOmZ1bmM6YGFzeW5jaW8uY29yb3V0aW5lYCB3aWxsIG5vdCBiZQorICAgaW50ZXJjZXB0ZWQpLgorCisgICBUaGUgKndyYXBwZXIqIGFyZ3VtZW50IG11c3QgYmUgZWl0aGVyOgorCisgICAqIGEgY2FsbGFibGUgdGhhdCBhY2NlcHRzIG9uZSBhcmd1bWVudCAoYSBjb3JvdXRpbmUgb2JqZWN0KTsKKyAgICogYGBOb25lYGAsIHRvIHJlc2V0IHRoZSB3cmFwcGVyLgorCisgICBJZiBjYWxsZWQgdHdpY2UsIHRoZSBuZXcgd3JhcHBlciByZXBsYWNlcyB0aGUgcHJldmlvdXMgb25lLiAgVGhlIGZ1bmN0aW9uCisgICBpcyB0aHJlYWQtc3BlY2lmaWMuCisKKyAgIFRoZSAqd3JhcHBlciogY2FsbGFibGUgY2Fubm90IGRlZmluZSBuZXcgY29yb3V0aW5lcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5OjoKKworICAgICAgICBkZWYgd3JhcHBlcihjb3JvKToKKyAgICAgICAgICAgIGFzeW5jIGRlZiB3cmFwKGNvcm8pOgorICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBjb3JvCisgICAgICAgICAgICByZXR1cm4gd3JhcChjb3JvKQorICAgICAgICBzeXMuc2V0X2Nvcm91dGluZV93cmFwcGVyKHdyYXBwZXIpCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBsaW5lIHdpbGwgZmFpbCB3aXRoIGEgUnVudGltZUVycm9yLCBiZWNhdXNlCisgICAgICAgICMgYGB3cmFwcGVyYGAgY3JlYXRlcyBhIGBgd3JhcChjb3JvKWBgIGNvcm91dGluZToKKyAgICAgICAgZm9vKCkKKworICAgU2VlIGFsc28gOmZ1bmM6YGdldF9jb3JvdXRpbmVfd3JhcHBlcmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorICAgICAgU2VlIDpwZXA6YDQ5MmAgZm9yIG1vcmUgZGV0YWlscy4KKworICAgLi4gbm90ZTo6CisgICAgICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIG9uIGEgcHJvdmlzaW9uYWwgYmFzaXMgKHNlZSA6cGVwOmA0MTFgCisgICAgICBmb3IgZGV0YWlscy4pICBVc2UgaXQgb25seSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCisKIC4uIGRhdGE6OiBzdGRpbgogICAgICAgICAgIHN0ZG91dAogICAgICAgICAgIHN0ZGVycgpAQCAtMTIwMSw3ICsxMjgyLDkgQEAKIAogICAgQSBkaWN0aW9uYXJ5IG9mIHRoZSB2YXJpb3VzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGZsYWdzIHBhc3NlZCB0aHJvdWdoCiAgICB0aGUgOm9wdGlvbjpgLVhgIGNvbW1hbmQtbGluZSBvcHRpb24uICBPcHRpb24gbmFtZXMgYXJlIGVpdGhlciBtYXBwZWQgdG8KLSAgIHRoZWlyIHZhbHVlcywgaWYgZ2l2ZW4gZXhwbGljaXRseSwgb3IgdG8gOmNvbnN0OmBUcnVlYC4gIEV4YW1wbGU6OgorICAgdGhlaXIgdmFsdWVzLCBpZiBnaXZlbiBleHBsaWNpdGx5LCBvciB0byA6Y29uc3Q6YFRydWVgLiAgRXhhbXBsZToKKworICAgLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgICAgJCAuL3B5dGhvbiAtWGE9YiAtWGMKICAgICAgIFB5dGhvbiAzLjJhMysgKHB5M2ssIE9jdCAxNiAyMDEwLCAyMDoxNDo1MCkKQEAgLTEyMjMsNCArMTMwNiwzIEBACiAuLiBydWJyaWM6OiBDaXRhdGlvbnMKIAogLi4gW0M5OV0gSVNPL0lFQyA5ODk5OjE5OTkuICAiUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIC0tIEMuIiAgQSBwdWJsaWMgZHJhZnQgb2YgdGhpcyBzdGFuZGFyZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMTQvd3d3L2RvY3MvbjEyNTYucGRmXCAuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CmluZGV4IDUzNWFjNTQuLmM1MTU2N2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdApAQCAtMywxNiArMywxNyBAQAogCiAuLiBtb2R1bGU6OiBzeXNjb25maWcKICAgIDpzeW5vcHNpczogUHl0aG9uJ3MgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorCiAuLiBtb2R1bGVhdXRob3I6OiBUYXJlayBaaWFkw6kgPHRhcmVrQHppYWRlLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBUYXJlayBaaWFkw6kgPHRhcmVrQHppYWRlLm9yZz4KIAotLi4gaW5kZXg6OgotICAgc2luZ2xlOiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCi0KIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zeXNjb25maWcucHlgCiAKKy4uIGluZGV4OjoKKyAgIHNpbmdsZTogY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorCiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgc3lzY29uZmlnYCBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIFB5dGhvbidzIGNvbmZpZ3VyYXRpb24KQEAgLTIyOCw3ICsyMjksOSBAQAogVXNpbmcgOm1vZDpgc3lzY29uZmlnYCBhcyBhIHNjcmlwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Zb3UgY2FuIHVzZSA6bW9kOmBzeXNjb25maWdgIGFzIGEgc2NyaXB0IHdpdGggUHl0aG9uJ3MgKi1tKiBvcHRpb246OgorWW91IGNhbiB1c2UgOm1vZDpgc3lzY29uZmlnYCBhcyBhIHNjcmlwdCB3aXRoIFB5dGhvbidzICotbSogb3B0aW9uOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gLW0gc3lzY29uZmlnCiAgICAgUGxhdGZvcm06ICJtYWNvc3gtMTAuNC1pMzg2IgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3lzbG9nLnJzdCBiL0RvYy9saWJyYXJ5L3N5c2xvZy5yc3QKaW5kZXggNmU5MGRjMC4uYWYzZmI5YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3lzbG9nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeXNsb2cucnN0CkBAIC01LDYgKzUsNyBAQAogICAgOnBsYXRmb3JtOiBVbml4CiAgICA6c3lub3BzaXM6IEFuIGludGVyZmFjZSB0byB0aGUgVW5peCBzeXNsb2cgbGlicmFyeSByb3V0aW5lcy4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBVbml4IGBgc3lzbG9nYGAgbGlicmFyeSByb3V0aW5lcy4KIFJlZmVyIHRvIHRoZSBVbml4IG1hbnVhbCBwYWdlcyBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgYGBzeXNsb2dgYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGFibmFubnkucnN0IGIvRG9jL2xpYnJhcnkvdGFibmFubnkucnN0CmluZGV4IDRmM2U3MDUuLjFlZGIwZmIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RhYm5hbm55LnJzdAorKysgYi9Eb2MvbGlicmFyeS90YWJuYW5ueS5yc3QKQEAgLTQsNiArNCw3IEBACiAuLiBtb2R1bGU6OiB0YWJuYW5ueQogICAgOnN5bm9wc2lzOiBUb29sIGZvciBkZXRlY3Rpbmcgd2hpdGUgc3BhY2UgcmVsYXRlZCBwcm9ibGVtcyBpbiBQeXRob24KICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGluIGEgZGlyZWN0b3J5IHRyZWUuCisKIC4uIG1vZHVsZWF1dGhvcjo6IFRpbSBQZXRlcnMgPHRpbV9vbmVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogLi4gc2VjdGlvbmF1dGhvcjo6IFBldGVyIEZ1bmsgPHBmQGFydGNvbS1nbWJoLmRlPgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CmluZGV4IDA1ZjI5YWQuLjViOTVlZjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CkBAIC00LDcgKzQsNiBAQAogLi4gbW9kdWxlOjogdGFyZmlsZQogICAgOnN5bm9wc2lzOiBSZWFkIGFuZCB3cml0ZSB0YXItZm9ybWF0IGFyY2hpdmUgZmlsZXMuCiAKLQogLi4gbW9kdWxlYXV0aG9yOjogTGFycyBHdXN0w6RiZWwgPGxhcnNAZ3VzdGFlYmVsLmRlPgogLi4gc2VjdGlvbmF1dGhvcjo6IExhcnMgR3VzdMOkYmVsIDxsYXJzQGd1c3RhZWJlbC5kZT4KIApAQCAtNjIsNiArNjEsMjMgQEAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBgYCdyOnh6J2BgICAgICAgIHwgT3BlbiBmb3IgcmVhZGluZyB3aXRoIGx6bWEgY29tcHJlc3Npb24uICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGAneCdgYCBvciAgICAgICB8IENyZWF0ZSBhIHRhcmZpbGUgZXhjbHVzaXZlbHkgd2l0aG91dCAgICAgICAgfAorICAgfCBgYCd4OidgYCAgICAgICAgIHwgY29tcHJlc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgfCBSYWlzZSBhbiA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGV4Y2VwdGlvbiAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICB8IGlmIGl0IGFscmVhZHkgZXhpc3RzLiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgJ3g6Z3onYGAgICAgICAgfCBDcmVhdGUgYSB0YXJmaWxlIHdpdGggZ3ppcCBjb21wcmVzc2lvbi4gICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICB8IFJhaXNlIGFuIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgZXhjZXB0aW9uICAgfAorICAgfCAgICAgICAgICAgICAgICAgIHwgaWYgaXQgYWxyZWFkeSBleGlzdHMuICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGAneDpiejInYGAgICAgICB8IENyZWF0ZSBhIHRhcmZpbGUgd2l0aCBiemlwMiBjb21wcmVzc2lvbi4gICAgfAorICAgfCAgICAgICAgICAgICAgICAgIHwgUmFpc2UgYW4gOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBleGNlcHRpb24gICB8CisgICB8ICAgICAgICAgICAgICAgICAgfCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYCd4Onh6J2BgICAgICAgIHwgQ3JlYXRlIGEgdGFyZmlsZSB3aXRoIGx6bWEgY29tcHJlc3Npb24uICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgfCBSYWlzZSBhbiA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGV4Y2VwdGlvbiAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICB8IGlmIGl0IGFscmVhZHkgZXhpc3RzLiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IGBgJ2EnIG9yICdhOidgYCAgfCBPcGVuIGZvciBhcHBlbmRpbmcgd2l0aCBubyBjb21wcmVzc2lvbi4gVGhlIHwKICAgIHwgICAgICAgICAgICAgICAgICB8IGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC4gICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC04Miw5ICs5OCw5IEBACiAgICBJZiAqZmlsZW9iaiogaXMgc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIGEgOnRlcm06YGZpbGUgb2JqZWN0YAogICAgb3BlbmVkIGluIGJpbmFyeSBtb2RlIGZvciAqbmFtZSouIEl0IGlzIHN1cHBvc2VkIHRvIGJlIGF0IHBvc2l0aW9uIDAuCiAKLSAgIEZvciBtb2RlcyBgYCd3Omd6J2BgLCBgYCdyOmd6J2BgLCBgYCd3OmJ6MidgYCwgYGAncjpiejInYGAsIDpmdW5jOmB0YXJmaWxlLm9wZW5gCi0gICBhY2NlcHRzIHRoZSBrZXl3b3JkIGFyZ3VtZW50ICpjb21wcmVzc2xldmVsKiB0byBzcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvZgotICAgdGhlIGZpbGUuCisgICBGb3IgbW9kZXMgYGAndzpneidgYCwgYGAncjpneidgYCwgYGAndzpiejInYGAsIGBgJ3I6YnoyJ2BgLCBgYCd4Omd6J2BgLAorICAgYGAneDpiejInYGAsIDpmdW5jOmB0YXJmaWxlLm9wZW5gIGFjY2VwdHMgdGhlIGtleXdvcmQgYXJndW1lbnQKKyAgICpjb21wcmVzc2xldmVsKiAoZGVmYXVsdCBgYDlgYCkgdG8gc3BlY2lmeSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgb2YgdGhlIGZpbGUuCiAKICAgIEZvciBzcGVjaWFsIHB1cnBvc2VzLCB0aGVyZSBpcyBhIHNlY29uZCBmb3JtYXQgZm9yICptb2RlKjoKICAgIGBgJ2ZpbGVtb2RlfFtjb21wcmVzc2lvbl0nYGAuICA6ZnVuYzpgdGFyZmlsZS5vcGVuYCB3aWxsIHJldHVybiBhIDpjbGFzczpgVGFyRmlsZWAKQEAgLTk0LDcgKzExMCw3IEBACiAgICBzcGVjaWZpZXMgdGhlIGJsb2Nrc2l6ZSBhbmQgZGVmYXVsdHMgdG8gYGAyMCAqIDUxMmBgIGJ5dGVzLiBVc2UgdGhpcyB2YXJpYW50CiAgICBpbiBjb21iaW5hdGlvbiB3aXRoIGUuZy4gYGBzeXMuc3RkaW5gYCwgYSBzb2NrZXQgOnRlcm06YGZpbGUgb2JqZWN0YCBvciBhIHRhcGUKICAgIGRldmljZS4gSG93ZXZlciwgc3VjaCBhIDpjbGFzczpgVGFyRmlsZWAgb2JqZWN0IGlzIGxpbWl0ZWQgaW4gdGhhdCBpdCBkb2VzCi0gICBub3QgYWxsb3cgdG8gYmUgYWNjZXNzZWQgcmFuZG9tbHksIHNlZSA6cmVmOmB0YXItZXhhbXBsZXNgLiAgVGhlIGN1cnJlbnRseQorICAgbm90IGFsbG93IHJhbmRvbSBhY2Nlc3MsIHNlZSA6cmVmOmB0YXItZXhhbXBsZXNgLiAgVGhlIGN1cnJlbnRseQogICAgcG9zc2libGUgbW9kZXM6CiAKICAgICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMTEyLDcgKzEyOCw3IEBACiAgICB8IGBgJ3J8YnoyJ2BgIHwgT3BlbiBhIGJ6aXAyIGNvbXByZXNzZWQgKnN0cmVhbSogZm9yICAgICAgIHwKICAgIHwgICAgICAgICAgICAgfCByZWFkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IGBgJ3J8eHonYGAgIHwgT3BlbiBhIGx6bWEgY29tcHJlc3NlZCAqc3RyZWFtKiBmb3IgICAgICAgIHwKKyAgIHwgYGAncnx4eidgYCAgfCBPcGVuIGFuIGx6bWEgY29tcHJlc3NlZCAqc3RyZWFtKiBmb3IgICAgICAgfAogICAgfCAgICAgICAgICAgICB8IHJlYWRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgYGAnd3wnYGAgICAgfCBPcGVuIGFuIHVuY29tcHJlc3NlZCAqc3RyZWFtKiBmb3Igd3JpdGluZy4gfApAQCAtMTI3LDExICsxNDMsMTMgQEAKICAgIHwgICAgICAgICAgICAgfCB3cml0aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgYGAneCdgYCAoZXhjbHVzaXZlIGNyZWF0aW9uKSBtb2RlIHdhcyBhZGRlZC4KIAogLi4gY2xhc3M6OiBUYXJGaWxlCiAKLSAgIENsYXNzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRhciBhcmNoaXZlcy4gRG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LAotICAgYmV0dGVyIHVzZSA6ZnVuYzpgdGFyZmlsZS5vcGVuYCBpbnN0ZWFkLiBTZWUgOnJlZjpgdGFyZmlsZS1vYmplY3RzYC4KKyAgIENsYXNzIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRhciBhcmNoaXZlcy4gRG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5OgorICAgdXNlIDpmdW5jOmB0YXJmaWxlLm9wZW5gIGluc3RlYWQuIFNlZSA6cmVmOmB0YXJmaWxlLW9iamVjdHNgLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNfdGFyZmlsZShuYW1lKQpAQCAtMjE5LDcgKzIzNyw3IEBACiAgICAgICBEb2N1bWVudGF0aW9uIG9mIHRoZSBoaWdoZXItbGV2ZWwgYXJjaGl2aW5nIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlCiAgICAgICBzdGFuZGFyZCA6bW9kOmBzaHV0aWxgIG1vZHVsZS4KIAotICAgYEdOVSB0YXIgbWFudWFsLCBCYXNpYyBUYXIgRm9ybWF0IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGFyL21hbnVhbC9odG1sX25vZGUvU3RhbmRhcmQuaHRtbD5gXworICAgYEdOVSB0YXIgbWFudWFsLCBCYXNpYyBUYXIgRm9ybWF0IDxodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3Rhci9tYW51YWwvaHRtbF9ub2RlL1N0YW5kYXJkLmh0bWw+YF8KICAgICAgIERvY3VtZW50YXRpb24gZm9yIHRhciBhcmNoaXZlIGZpbGVzLCBpbmNsdWRpbmcgR05VIHRhciBleHRlbnNpb25zLgogCiAKQEAgLTI1Miw4ICsyNzAsOCBAQAogICAgSW4gdGhpcyBjYXNlLCB0aGUgZmlsZSBvYmplY3QncyA6YXR0cjpgbmFtZWAgYXR0cmlidXRlIGlzIHVzZWQgaWYgaXQgZXhpc3RzLgogCiAgICAqbW9kZSogaXMgZWl0aGVyIGBgJ3InYGAgdG8gcmVhZCBmcm9tIGFuIGV4aXN0aW5nIGFyY2hpdmUsIGBgJ2EnYGAgdG8gYXBwZW5kCi0gICBkYXRhIHRvIGFuIGV4aXN0aW5nIGZpbGUgb3IgYGAndydgYCB0byBjcmVhdGUgYSBuZXcgZmlsZSBvdmVyd3JpdGluZyBhbiBleGlzdGluZwotICAgb25lLgorICAgZGF0YSB0byBhbiBleGlzdGluZyBmaWxlLCBgYCd3J2BgIHRvIGNyZWF0ZSBhIG5ldyBmaWxlIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nCisgICBvbmUsIG9yIGBgJ3gnYGAgdG8gY3JlYXRlIGEgbmV3IGZpbGUgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogCiAgICBJZiAqZmlsZW9iaiogaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgZm9yIHJlYWRpbmcgb3Igd3JpdGluZyBkYXRhLiBJZiBpdCBjYW4gYmUKICAgIGRldGVybWluZWQsICptb2RlKiBpcyBvdmVycmlkZGVuIGJ5ICpmaWxlb2JqKidzIG1vZGUuICpmaWxlb2JqKiB3aWxsIGJlIHVzZWQKQEAgLTI5MiwxMiArMzEwLDE0IEBACiAgICB0byBiZSBoYW5kbGVkLiBUaGUgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIHdvcmsgZm9yIG1vc3QgdXNlcnMuCiAgICBTZWUgc2VjdGlvbiA6cmVmOmB0YXItdW5pY29kZWAgZm9yIGluLWRlcHRoIGluZm9ybWF0aW9uLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgICAgVXNlIGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYCBhcyB0aGUgZGVmYXVsdCBmb3IgdGhlICplcnJvcnMqIGFyZ3VtZW50LgotCiAgICBUaGUgKnBheF9oZWFkZXJzKiBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5IG9mIHN0cmluZ3Mgd2hpY2gKICAgIHdpbGwgYmUgYWRkZWQgYXMgYSBwYXggZ2xvYmFsIGhlYWRlciBpZiAqZm9ybWF0KiBpcyA6Y29uc3Q6YFBBWF9GT1JNQVRgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVXNlIGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYCBhcyB0aGUgZGVmYXVsdCBmb3IgdGhlICplcnJvcnMqIGFyZ3VtZW50LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIGBgJ3gnYGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZSB3YXMgYWRkZWQuCiAKIC4uIGNsYXNzbWV0aG9kOjogVGFyRmlsZS5vcGVuKC4uLikKIApAQCAtMzI4LDExICszNDgsMTUgQEAKICAgIHJldHVybmVkIGJ5IDptZXRoOmBnZXRtZW1iZXJzYC4KIAogCi0uLiBtZXRob2Q6OiBUYXJGaWxlLmxpc3QodmVyYm9zZT1UcnVlKQorLi4gbWV0aG9kOjogVGFyRmlsZS5saXN0KHZlcmJvc2U9VHJ1ZSwgKiwgbWVtYmVycz1Ob25lKQogCiAgICBQcmludCBhIHRhYmxlIG9mIGNvbnRlbnRzIHRvIGBgc3lzLnN0ZG91dGBgLiBJZiAqdmVyYm9zZSogaXMgOmNvbnN0OmBGYWxzZWAsCiAgICBvbmx5IHRoZSBuYW1lcyBvZiB0aGUgbWVtYmVycyBhcmUgcHJpbnRlZC4gSWYgaXQgaXMgOmNvbnN0OmBUcnVlYCwgb3V0cHV0Ci0gICBzaW1pbGFyIHRvIHRoYXQgb2YgOnByb2dyYW06YGxzIC1sYCBpcyBwcm9kdWNlZC4KKyAgIHNpbWlsYXIgdG8gdGhhdCBvZiA6cHJvZ3JhbTpgbHMgLWxgIGlzIHByb2R1Y2VkLiBJZiBvcHRpb25hbCAqbWVtYmVycyogaXMKKyAgIGdpdmVuLCBpdCBtdXN0IGJlIGEgc3Vic2V0IG9mIHRoZSBsaXN0IHJldHVybmVkIGJ5IDptZXRoOmBnZXRtZW1iZXJzYC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHRoZSAqbWVtYmVycyogcGFyYW1ldGVyLgogCiAKIC4uIG1ldGhvZDo6IFRhckZpbGUubmV4dCgpCkBAIC0zNDIsNyArMzY2LDcgQEAKICAgIGF2YWlsYWJsZS4KIAogCi0uLiBtZXRob2Q6OiBUYXJGaWxlLmV4dHJhY3RhbGwocGF0aD0iLiIsIG1lbWJlcnM9Tm9uZSkKKy4uIG1ldGhvZDo6IFRhckZpbGUuZXh0cmFjdGFsbChwYXRoPSIuIiwgbWVtYmVycz1Ob25lLCAqLCBudW1lcmljX293bmVyPUZhbHNlKQogCiAgICBFeHRyYWN0IGFsbCBtZW1iZXJzIGZyb20gdGhlIGFyY2hpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3IKICAgIGRpcmVjdG9yeSAqcGF0aCouIElmIG9wdGlvbmFsICptZW1iZXJzKiBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhIHN1YnNldCBvZiB0aGUKQEAgLTM1Miw2ICszNzYsMTAgQEAKICAgIHJlc2V0IGVhY2ggdGltZSBhIGZpbGUgaXMgY3JlYXRlZCBpbiBpdC4gQW5kLCBpZiBhIGRpcmVjdG9yeSdzIHBlcm1pc3Npb25zIGRvCiAgICBub3QgYWxsb3cgd3JpdGluZywgZXh0cmFjdGluZyBmaWxlcyB0byBpdCB3aWxsIGZhaWwuCiAKKyAgIElmICpudW1lcmljX293bmVyKiBpcyA6Y29uc3Q6YFRydWVgLCB0aGUgdWlkIGFuZCBnaWQgbnVtYmVycyBmcm9tIHRoZSB0YXJmaWxlCisgICBhcmUgdXNlZCB0byBzZXQgdGhlIG93bmVyL2dyb3VwIGZvciB0aGUgZXh0cmFjdGVkIGZpbGVzLiBPdGhlcndpc2UsIHRoZSBuYW1lZAorICAgdmFsdWVzIGZyb20gdGhlIHRhcmZpbGUgYXJlIHVzZWQuCisKICAgIC4uIHdhcm5pbmc6OgogCiAgICAgICBOZXZlciBleHRyYWN0IGFyY2hpdmVzIGZyb20gdW50cnVzdGVkIHNvdXJjZXMgd2l0aG91dCBwcmlvciBpbnNwZWN0aW9uLgpAQCAtMzU5LDggKzM4NywxMSBAQAogICAgICAgdGhhdCBoYXZlIGFic29sdXRlIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoIGBgIi8iYGAgb3IgZmlsZW5hbWVzIHdpdGggdHdvCiAgICAgICBkb3RzIGBgIi4uImBgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgQWRkZWQgdGhlICpudW1lcmljX29ubHkqIHBhcmFtZXRlci4KIAotLi4gbWV0aG9kOjogVGFyRmlsZS5leHRyYWN0KG1lbWJlciwgcGF0aD0iIiwgc2V0X2F0dHJzPVRydWUpCisKKy4uIG1ldGhvZDo6IFRhckZpbGUuZXh0cmFjdChtZW1iZXIsIHBhdGg9IiIsIHNldF9hdHRycz1UcnVlLCAqLCBudW1lcmljX293bmVyPUZhbHNlKQogCiAgICBFeHRyYWN0IGEgbWVtYmVyIGZyb20gdGhlIGFyY2hpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIHVzaW5nIGl0cwogICAgZnVsbCBuYW1lLiBJdHMgZmlsZSBpbmZvcm1hdGlvbiBpcyBleHRyYWN0ZWQgYXMgYWNjdXJhdGVseSBhcyBwb3NzaWJsZS4gKm1lbWJlcioKQEAgLTM2OCw2ICszOTksMTAgQEAKICAgIGRpcmVjdG9yeSB1c2luZyAqcGF0aCouIEZpbGUgYXR0cmlidXRlcyAob3duZXIsIG10aW1lLCBtb2RlKSBhcmUgc2V0IHVubGVzcwogICAgKnNldF9hdHRycyogaXMgZmFsc2UuCiAKKyAgIElmICpudW1lcmljX293bmVyKiBpcyA6Y29uc3Q6YFRydWVgLCB0aGUgdWlkIGFuZCBnaWQgbnVtYmVycyBmcm9tIHRoZSB0YXJmaWxlCisgICBhcmUgdXNlZCB0byBzZXQgdGhlIG93bmVyL2dyb3VwIGZvciB0aGUgZXh0cmFjdGVkIGZpbGVzLiBPdGhlcndpc2UsIHRoZSBuYW1lZAorICAgdmFsdWVzIGZyb20gdGhlIHRhcmZpbGUgYXJlIHVzZWQuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGUgOm1ldGg6YGV4dHJhY3RgIG1ldGhvZCBkb2VzIG5vdCB0YWtlIGNhcmUgb2Ygc2V2ZXJhbCBleHRyYWN0aW9uIGlzc3Vlcy4KQEAgLTM4MCw2ICs0MTUsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIHRoZSAqc2V0X2F0dHJzKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCB0aGUgKm51bWVyaWNfb25seSogcGFyYW1ldGVyLgorCiAuLiBtZXRob2Q6OiBUYXJGaWxlLmV4dHJhY3RmaWxlKG1lbWJlcikKIAogICAgRXh0cmFjdCBhIG1lbWJlciBmcm9tIHRoZSBhcmNoaXZlIGFzIGEgZmlsZSBvYmplY3QuICptZW1iZXIqIG1heSBiZSBhIGZpbGVuYW1lCkBAIC00MTcsMjEgKzQ1NSwyOCBAQAogLi4gbWV0aG9kOjogVGFyRmlsZS5hZGRmaWxlKHRhcmluZm8sIGZpbGVvYmo9Tm9uZSkKIAogICAgQWRkIHRoZSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdCAqdGFyaW5mbyogdG8gdGhlIGFyY2hpdmUuIElmICpmaWxlb2JqKiBpcyBnaXZlbiwKKyAgIGl0IHNob3VsZCBiZSBhIDp0ZXJtOmBiaW5hcnkgZmlsZWAsIGFuZAogICAgYGB0YXJpbmZvLnNpemVgYCBieXRlcyBhcmUgcmVhZCBmcm9tIGl0IGFuZCBhZGRlZCB0byB0aGUgYXJjaGl2ZS4gIFlvdSBjYW4KLSAgIGNyZWF0ZSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdHMgdXNpbmcgOm1ldGg6YGdldHRhcmluZm9gLgotCi0gICAuLiBub3RlOjoKLQotICAgICAgT24gV2luZG93cyBwbGF0Zm9ybXMsICpmaWxlb2JqKiBzaG91bGQgYWx3YXlzIGJlIG9wZW5lZCB3aXRoIG1vZGUgYGAncmInYGAgdG8KLSAgICAgIGF2b2lkIGlycml0YXRpb24gYWJvdXQgdGhlIGZpbGUgc2l6ZS4KKyAgIGNyZWF0ZSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdHMgZGlyZWN0bHksIG9yIGJ5IHVzaW5nIDptZXRoOmBnZXR0YXJpbmZvYC4KIAogCiAuLiBtZXRob2Q6OiBUYXJGaWxlLmdldHRhcmluZm8obmFtZT1Ob25lLCBhcmNuYW1lPU5vbmUsIGZpbGVvYmo9Tm9uZSkKIAotICAgQ3JlYXRlIGEgOmNsYXNzOmBUYXJJbmZvYCBvYmplY3QgZm9yIGVpdGhlciB0aGUgZmlsZSAqbmFtZSogb3IgdGhlIDp0ZXJtOmBmaWxlCi0gICBvYmplY3RgICpmaWxlb2JqKiAodXNpbmcgOmZ1bmM6YG9zLmZzdGF0YCBvbiBpdHMgZmlsZSBkZXNjcmlwdG9yKS4gIFlvdSBjYW4gbW9kaWZ5Ci0gICBzb21lIG9mIHRoZSA6Y2xhc3M6YFRhckluZm9gJ3MgYXR0cmlidXRlcyBiZWZvcmUgeW91IGFkZCBpdCB1c2luZyA6bWV0aDpgYWRkZmlsZWAuCi0gICBJZiBnaXZlbiwgKmFyY25hbWUqIHNwZWNpZmllcyBhbiBhbHRlcm5hdGl2ZSBuYW1lIGZvciB0aGUgZmlsZSBpbiB0aGUgYXJjaGl2ZS4KKyAgIENyZWF0ZSBhIDpjbGFzczpgVGFySW5mb2Agb2JqZWN0IGZyb20gdGhlIHJlc3VsdCBvZiA6ZnVuYzpgb3Muc3RhdGAgb3IKKyAgIGVxdWl2YWxlbnQgb24gYW4gZXhpc3RpbmcgZmlsZS4gIFRoZSBmaWxlIGlzIGVpdGhlciBuYW1lZCBieSAqbmFtZSosIG9yCisgICBzcGVjaWZpZWQgYXMgYSA6dGVybTpgZmlsZSBvYmplY3RgICpmaWxlb2JqKiB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yLiAgSWYKKyAgIGdpdmVuLCAqYXJjbmFtZSogc3BlY2lmaWVzIGFuIGFsdGVybmF0aXZlIG5hbWUgZm9yIHRoZSBmaWxlIGluIHRoZQorICAgYXJjaGl2ZSwgb3RoZXJ3aXNlLCB0aGUgbmFtZSBpcyB0YWtlbiBmcm9tICpmaWxlb2JqKuKAmXMKKyAgIDphdHRyOmB+aW8uRmlsZUlPLm5hbWVgIGF0dHJpYnV0ZSwgb3IgdGhlICpuYW1lKiBhcmd1bWVudC4gIFRoZSBuYW1lCisgICBzaG91bGQgYmUgYSB0ZXh0IHN0cmluZy4KKworICAgWW91IGNhbiBtb2RpZnkKKyAgIHNvbWUgb2YgdGhlIDpjbGFzczpgVGFySW5mb2DigJlzIGF0dHJpYnV0ZXMgYmVmb3JlIHlvdSBhZGQgaXQgdXNpbmcgOm1ldGg6YGFkZGZpbGVgLgorICAgSWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCBhbiBvcmRpbmFyeSBmaWxlIG9iamVjdCBwb3NpdGlvbmVkIGF0IHRoZQorICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLCBhdHRyaWJ1dGVzIHN1Y2ggYXMgOmF0dHI6YH5UYXJJbmZvLnNpemVgIG1heSBuZWVkCisgICBtb2RpZnlpbmcuICBUaGlzIGlzIHRoZSBjYXNlIGZvciBvYmplY3RzIHN1Y2ggYXMgOmNsYXNzOmB+Z3ppcC5HemlwRmlsZWAuCisgICBUaGUgOmF0dHI6YH5UYXJJbmZvLm5hbWVgIG1heSBhbHNvIGJlIG1vZGlmaWVkLCBpbiB3aGljaCBjYXNlICphcmNuYW1lKgorICAgY291bGQgYmUgYSBkdW1teSBzdHJpbmcuCiAKIAogLi4gbWV0aG9kOjogVGFyRmlsZS5jbG9zZSgpCkBAIC02MDksMjUgKzY1NCwzNSBAQAogd2l0aCB0YXIgYXJjaGl2ZXMuCiAKIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyB0YXIgYXJjaGl2ZSwgc3BlY2lmeSBpdHMgbmFtZSBhZnRlciB0aGUgOm9wdGlvbjpgLWNgCi1vcHRpb24gYW5kIHRoZW4gbGlzdCB0aGUgZmlsZW5hbWUocykgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQ6Ogorb3B0aW9uIGFuZCB0aGVuIGxpc3QgdGhlIGZpbGVuYW1lKHMpIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gLW0gdGFyZmlsZSAtYyBtb250eS50YXIgIHNwYW0udHh0IGVnZ3MudHh0CiAKLVBhc3NpbmcgYSBkaXJlY3RvcnkgaXMgYWxzbyBhY2NlcHRhYmxlOjoKK1Bhc3NpbmcgYSBkaXJlY3RvcnkgaXMgYWxzbyBhY2NlcHRhYmxlOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gLW0gdGFyZmlsZSAtYyBtb250eS50YXIgbGlmZS1vZi1icmlhbl8xOTc5LwogCiBJZiB5b3Ugd2FudCB0byBleHRyYWN0IGEgdGFyIGFyY2hpdmUgaW50byB0aGUgY3VycmVudCBkaXJlY3RvcnksIHVzZQotdGhlIDpvcHRpb246YC1lYCBvcHRpb246OgordGhlIDpvcHRpb246YC1lYCBvcHRpb246CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1lIG1vbnR5LnRhcgogCiBZb3UgY2FuIGFsc28gZXh0cmFjdCBhIHRhciBhcmNoaXZlIGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IGJ5IHBhc3NpbmcgdGhlCi1kaXJlY3RvcnkncyBuYW1lOjoKK2RpcmVjdG9yeSdzIG5hbWU6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1lIG1vbnR5LnRhciAgb3RoZXItZGlyLwogCi1Gb3IgYSBsaXN0IG9mIHRoZSBmaWxlcyBpbiBhIHRhciBhcmNoaXZlLCB1c2UgdGhlIDpvcHRpb246YC1sYCBvcHRpb246OgorRm9yIGEgbGlzdCBvZiB0aGUgZmlsZXMgaW4gYSB0YXIgYXJjaGl2ZSwgdXNlIHRoZSA6b3B0aW9uOmAtbGAgb3B0aW9uOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICAgJCBweXRob24gLW0gdGFyZmlsZSAtbCBtb250eS50YXIKIApAQCAtODAyLDQgKzg1NywzIEBACiBiZWNhdXNlIGFsbCB0aGUgbWV0YWRhdGEgaXMgc3RvcmVkIHVzaW5nICpVVEYtOCouICplbmNvZGluZyogaXMgb25seSB1c2VkIGluCiB0aGUgcmFyZSBjYXNlcyB3aGVuIGJpbmFyeSBwYXggaGVhZGVycyBhcmUgZGVjb2RlZCBvciB3aGVuIHN0cmluZ3Mgd2l0aAogc3Vycm9nYXRlIGNoYXJhY3RlcnMgYXJlIHN0b3JlZC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdCBiL0RvYy9saWJyYXJ5L3RlbG5ldGxpYi5yc3QKaW5kZXggNDA0MGY3Mi4uYjk1MGU0MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZWxuZXRsaWIucnN0CkBAIC0zLDEzICszLDEzIEBACiAKIC4uIG1vZHVsZTo6IHRlbG5ldGxpYgogICAgOnN5bm9wc2lzOiBUZWxuZXQgY2xpZW50IGNsYXNzLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogU2tpcCBNb250YW5hcm8gPHNraXBAcG9ib3guY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi90ZWxuZXRsaWIucHlgCiAKIC4uIGluZGV4Ojogc2luZ2xlOiBwcm90b2NvbDsgVGVsbmV0CiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3RlbG5ldGxpYi5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHRlbG5ldGxpYmAgbW9kdWxlIHByb3ZpZGVzIGEgOmNsYXNzOmBUZWxuZXRgIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RlbXBmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3RlbXBmaWxlLnJzdAppbmRleCAxZWZiNWU2Li42NjUyNjFmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90ZW1wZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGVtcGZpbGUucnN0CkBAIC0xLDY2ICsxLDc5IEBACiA6bW9kOmB0ZW1wZmlsZWAgLS0tIEdlbmVyYXRlIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0uLiBzZWN0aW9uYXV0aG9yOjogWmFjayBXZWluYmVyZyA8emFja0Bjb2Rlc291cmNlcnkuY29tPgotCi0KIC4uIG1vZHVsZTo6IHRlbXBmaWxlCiAgICA6c3lub3BzaXM6IEdlbmVyYXRlIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAKKy4uIHNlY3Rpb25hdXRob3I6OiBaYWNrIFdlaW5iZXJnIDx6YWNrQGNvZGVzb3VyY2VyeS5jb20+CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3RlbXBmaWxlLnB5YAogCiAuLiBpbmRleDo6CiAgICBwYWlyOiB0ZW1wb3Jhcnk7IGZpbGUgbmFtZQogICAgcGFpcjogdGVtcG9yYXJ5OyBmaWxlCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3RlbXBmaWxlLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCi1UaGlzIG1vZHVsZSBnZW5lcmF0ZXMgdGVtcG9yYXJ5IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gIEl0IHdvcmtzIG9uIGFsbAotc3VwcG9ydGVkIHBsYXRmb3Jtcy4gIEl0IHByb3ZpZGVzIHRocmVlIG5ldyBmdW5jdGlvbnMsCi06ZnVuYzpgTmFtZWRUZW1wb3JhcnlGaWxlYCwgOmZ1bmM6YG1rc3RlbXBgLCBhbmQgOmZ1bmM6YG1rZHRlbXBgLCB3aGljaCBzaG91bGQKLWVsaW1pbmF0ZSBhbGwgcmVtYWluaW5nIG5lZWQgdG8gdXNlIHRoZSBpbnNlY3VyZSA6ZnVuYzpgbWt0ZW1wYCBmdW5jdGlvbi4KLVRlbXBvcmFyeSBmaWxlIG5hbWVzIGNyZWF0ZWQgYnkgdGhpcyBtb2R1bGUgbm8gbG9uZ2VyIGNvbnRhaW4gdGhlIHByb2Nlc3MgSUQ7Ci1pbnN0ZWFkIGEgc3RyaW5nIG9mIHNpeCByYW5kb20gY2hhcmFjdGVycyBpcyB1c2VkLgorVGhpcyBtb2R1bGUgY3JlYXRlcyB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiAgSXQgd29ya3Mgb24gYWxsCitzdXBwb3J0ZWQgcGxhdGZvcm1zLiA6Y2xhc3M6YFRlbXBvcmFyeUZpbGVgLCA6Y2xhc3M6YE5hbWVkVGVtcG9yYXJ5RmlsZWAsCis6Y2xhc3M6YFRlbXBvcmFyeURpcmVjdG9yeWAsIGFuZCA6Y2xhc3M6YFNwb29sZWRUZW1wb3JhcnlGaWxlYCBhcmUgaGlnaC1sZXZlbAoraW50ZXJmYWNlcyB3aGljaCBwcm92aWRlIGF1dG9tYXRpYyBjbGVhbnVwIGFuZCBjYW4gYmUgdXNlZCBhcworY29udGV4dCBtYW5hZ2Vycy4gOmZ1bmM6YG1rc3RlbXBgIGFuZAorOmZ1bmM6YG1rZHRlbXBgIGFyZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMgd2hpY2ggcmVxdWlyZSBtYW51YWwgY2xlYW51cC4KIAotQWxzbywgYWxsIHRoZSB1c2VyLWNhbGxhYmxlIGZ1bmN0aW9ucyBub3cgdGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aGljaAotYWxsb3cgZGlyZWN0IGNvbnRyb2wgb3ZlciB0aGUgbG9jYXRpb24gYW5kIG5hbWUgb2YgdGVtcG9yYXJ5IGZpbGVzLiAgSXQgaXMKLW5vIGxvbmdlciBuZWNlc3NhcnkgdG8gdXNlIHRoZSBnbG9iYWwgKnRlbXBkaXIqIHZhcmlhYmxlLgorQWxsIHRoZSB1c2VyLWNhbGxhYmxlIGZ1bmN0aW9ucyBhbmQgY29uc3RydWN0b3JzIHRha2UgYWRkaXRpb25hbCBhcmd1bWVudHMgd2hpY2gKK2FsbG93IGRpcmVjdCBjb250cm9sIG92ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYW1lIG9mIHRlbXBvcmFyeSBmaWxlcyBhbmQKK2RpcmVjdG9yaWVzLiBGaWxlcyBuYW1lcyB1c2VkIGJ5IHRoaXMgbW9kdWxlIGluY2x1ZGUgYSBzdHJpbmcgb2YKK3JhbmRvbSBjaGFyYWN0ZXJzIHdoaWNoIGFsbG93cyB0aG9zZSBmaWxlcyB0byBiZSBzZWN1cmVseSBjcmVhdGVkIGluCitzaGFyZWQgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgogVG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIGFyZ3VtZW50IG9yZGVyIGlzIHNvbWV3aGF0IG9kZDsgaXQKIGlzIHJlY29tbWVuZGVkIHRvIHVzZSBrZXl3b3JkIGFyZ3VtZW50cyBmb3IgY2xhcml0eS4KIAogVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgdXNlci1jYWxsYWJsZSBpdGVtczoKIAotLi4gZnVuY3Rpb246OiBUZW1wb3JhcnlGaWxlKG1vZGU9J3crYicsIGJ1ZmZlcmluZz1Ob25lLCBlbmNvZGluZz1Ob25lLCBuZXdsaW5lPU5vbmUsIHN1ZmZpeD0nJywgcHJlZml4PSd0bXAnLCBkaXI9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogVGVtcG9yYXJ5RmlsZShtb2RlPSd3K2InLCBidWZmZXJpbmc9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSwgbmV3bGluZT1Ob25lLCBzdWZmaXg9Tm9uZSwgcHJlZml4PU5vbmUsIGRpcj1Ob25lKQogCiAgICBSZXR1cm4gYSA6dGVybTpgZmlsZS1saWtlIG9iamVjdGAgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHRlbXBvcmFyeSBzdG9yYWdlIGFyZWEuCi0gICBUaGUgZmlsZSBpcyBjcmVhdGVkIHVzaW5nIDpmdW5jOmBta3N0ZW1wYC4gSXQgd2lsbCBiZSBkZXN0cm95ZWQgYXMgc29vbgorICAgVGhlIGZpbGUgaXMgY3JlYXRlZCBzZWN1cmVseSwgdXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgOmZ1bmM6YG1rc3RlbXBgLiBJdCB3aWxsIGJlIGRlc3Ryb3llZCBhcyBzb29uCiAgICBhcyBpdCBpcyBjbG9zZWQgKGluY2x1ZGluZyBhbiBpbXBsaWNpdCBjbG9zZSB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZQotICAgY29sbGVjdGVkKS4gIFVuZGVyIFVuaXgsIHRoZSBkaXJlY3RvcnkgZW50cnkgZm9yIHRoZSBmaWxlIGlzIHJlbW92ZWQKKyAgIGNvbGxlY3RlZCkuICBVbmRlciBVbml4LCB0aGUgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUgZmlsZSBpcyBlaXRoZXIgbm90IGNyZWF0ZWQgYXQgYWxsIG9yIGlzIHJlbW92ZWQKICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmaWxlIGlzIGNyZWF0ZWQuICBPdGhlciBwbGF0Zm9ybXMgZG8gbm90IHN1cHBvcnQKICAgIHRoaXM7IHlvdXIgY29kZSBzaG91bGQgbm90IHJlbHkgb24gYSB0ZW1wb3JhcnkgZmlsZSBjcmVhdGVkIHVzaW5nIHRoaXMKICAgIGZ1bmN0aW9uIGhhdmluZyBvciBub3QgaGF2aW5nIGEgdmlzaWJsZSBuYW1lIGluIHRoZSBmaWxlIHN5c3RlbS4KIAorICAgVGhlIHJlc3VsdGluZyBvYmplY3QgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgKHNlZQorICAgOnJlZjpgdGVtcGZpbGUtZXhhbXBsZXNgKS4gIE9uIGNvbXBsZXRpb24gb2YgdGhlIGNvbnRleHQgb3IKKyAgIGRlc3RydWN0aW9uIG9mIHRoZSBmaWxlIG9iamVjdCB0aGUgdGVtcG9yYXJ5IGZpbGUgd2lsbCBiZSByZW1vdmVkCisgICBmcm9tIHRoZSBmaWxlc3lzdGVtLgorCiAgICBUaGUgKm1vZGUqIHBhcmFtZXRlciBkZWZhdWx0cyB0byBgYCd3K2InYGAgc28gdGhhdCB0aGUgZmlsZSBjcmVhdGVkIGNhbgogICAgYmUgcmVhZCBhbmQgd3JpdHRlbiB3aXRob3V0IGJlaW5nIGNsb3NlZC4gIEJpbmFyeSBtb2RlIGlzIHVzZWQgc28gdGhhdCBpdAogICAgYmVoYXZlcyBjb25zaXN0ZW50bHkgb24gYWxsIHBsYXRmb3JtcyB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlIGRhdGEgdGhhdCBpcwogICAgc3RvcmVkLiAgKmJ1ZmZlcmluZyosICplbmNvZGluZyogYW5kICpuZXdsaW5lKiBhcmUgaW50ZXJwcmV0ZWQgYXMgZm9yCiAgICA6ZnVuYzpgb3BlbmAuCiAKLSAgIFRoZSAqZGlyKiwgKnByZWZpeCogYW5kICpzdWZmaXgqIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0byA6ZnVuYzpgbWtzdGVtcGAuCisgICBUaGUgKmRpciosICpwcmVmaXgqIGFuZCAqc3VmZml4KiBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhbmQKKyAgIGRlZmF1bHRzIGFzIHdpdGggOmZ1bmM6YG1rc3RlbXBgLgogCiAgICBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIGEgdHJ1ZSBmaWxlIG9iamVjdCBvbiBQT1NJWCBwbGF0Zm9ybXMuICBPbiBvdGhlcgogICAgcGxhdGZvcm1zLCBpdCBpcyBhIGZpbGUtbGlrZSBvYmplY3Qgd2hvc2UgOmF0dHI6YCFmaWxlYCBhdHRyaWJ1dGUgaXMgdGhlCi0gICB1bmRlcmx5aW5nIHRydWUgZmlsZSBvYmplY3QuIFRoaXMgZmlsZS1saWtlIG9iamVjdCBjYW4gYmUgdXNlZCBpbiBhCi0gICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCBqdXN0IGxpa2UgYSBub3JtYWwgZmlsZS4KKyAgIHVuZGVybHlpbmcgdHJ1ZSBmaWxlIG9iamVjdC4KKworICAgVGhlIDpweTpkYXRhOmBvcy5PX1RNUEZJTEVgIGZsYWcgaXMgdXNlZCBpZiBpdCBpcyBhdmFpbGFibGUgYW5kIHdvcmtzCisgICAoTGludXgtc3BlY2lmaWMsIHJlcXVpcmVzIExpbnV4IGtlcm5lbCAzLjExIG9yIGxhdGVyKS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKworICAgICAgVGhlIDpweTpkYXRhOmBvcy5PX1RNUEZJTEVgIGZsYWcgaXMgbm93IHVzZWQgaWYgYXZhaWxhYmxlLgogCiAKLS4uIGZ1bmN0aW9uOjogTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3crYicsIGJ1ZmZlcmluZz1Ob25lLCBlbmNvZGluZz1Ob25lLCBuZXdsaW5lPU5vbmUsIHN1ZmZpeD0nJywgcHJlZml4PSd0bXAnLCBkaXI9Tm9uZSwgZGVsZXRlPVRydWUpCisuLiBmdW5jdGlvbjo6IE5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3K2InLCBidWZmZXJpbmc9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSwgbmV3bGluZT1Ob25lLCBzdWZmaXg9Tm9uZSwgcHJlZml4PU5vbmUsIGRpcj1Ob25lLCBkZWxldGU9VHJ1ZSkKIAogICAgVGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBleGFjdGx5IGFzIDpmdW5jOmBUZW1wb3JhcnlGaWxlYCBkb2VzLCBleGNlcHQgdGhhdAogICAgdGhlIGZpbGUgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGEgdmlzaWJsZSBuYW1lIGluIHRoZSBmaWxlIHN5c3RlbSAob24KICAgIFVuaXgsIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgbm90IHVubGlua2VkKS4gIFRoYXQgbmFtZSBjYW4gYmUgcmV0cmlldmVkCi0gICBmcm9tIHRoZSA6YXR0cjpgbmFtZWAgYXR0cmlidXRlIG9mIHRoZSBmaWxlIG9iamVjdC4gIFdoZXRoZXIgdGhlIG5hbWUgY2FuIGJlCisgICBmcm9tIHRoZSA6YXR0cjpgbmFtZWAgYXR0cmlidXRlIG9mIHRoZSByZXR1cm5lZAorICAgZmlsZS1saWtlIG9iamVjdC4gIFdoZXRoZXIgdGhlIG5hbWUgY2FuIGJlCiAgICB1c2VkIHRvIG9wZW4gdGhlIGZpbGUgYSBzZWNvbmQgdGltZSwgd2hpbGUgdGhlIG5hbWVkIHRlbXBvcmFyeSBmaWxlIGlzCiAgICBzdGlsbCBvcGVuLCB2YXJpZXMgYWNyb3NzIHBsYXRmb3JtcyAoaXQgY2FuIGJlIHNvIHVzZWQgb24gVW5peDsgaXQgY2Fubm90CiAgICBvbiBXaW5kb3dzIE5UIG9yIGxhdGVyKS4gIElmICpkZWxldGUqIGlzIHRydWUgKHRoZSBkZWZhdWx0KSwgdGhlIGZpbGUgaXMKQEAgLTcwLDcgKzgzLDcgQEAKICAgIGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCBqdXN0IGxpa2UgYSBub3JtYWwgZmlsZS4KIAogCi0uLiBmdW5jdGlvbjo6IFNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTAsIG1vZGU9J3crYicsIGJ1ZmZlcmluZz1Ob25lLCBlbmNvZGluZz1Ob25lLCBuZXdsaW5lPU5vbmUsIHN1ZmZpeD0nJywgcHJlZml4PSd0bXAnLCBkaXI9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogU3Bvb2xlZFRlbXBvcmFyeUZpbGUobWF4X3NpemU9MCwgbW9kZT0ndytiJywgYnVmZmVyaW5nPU5vbmUsIGVuY29kaW5nPU5vbmUsIG5ld2xpbmU9Tm9uZSwgc3VmZml4PU5vbmUsIHByZWZpeD1Ob25lLCBkaXI9Tm9uZSkKIAogICAgVGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBleGFjdGx5IGFzIDpmdW5jOmBUZW1wb3JhcnlGaWxlYCBkb2VzLCBleGNlcHQgdGhhdAogICAgZGF0YSBpcyBzcG9vbGVkIGluIG1lbW9yeSB1bnRpbCB0aGUgZmlsZSBzaXplIGV4Y2VlZHMgKm1heF9zaXplKiwgb3IKQEAgLTkyLDEyICsxMDUsMTEgQEAKICAgICAgIHRoZSB0cnVuY2F0ZSBtZXRob2Qgbm93IGFjY2VwdHMgYSBgYHNpemVgYCBhcmd1bWVudC4KIAogCi0uLiBmdW5jdGlvbjo6IFRlbXBvcmFyeURpcmVjdG9yeShzdWZmaXg9JycsIHByZWZpeD0ndG1wJywgZGlyPU5vbmUpCisuLiBmdW5jdGlvbjo6IFRlbXBvcmFyeURpcmVjdG9yeShzdWZmaXg9Tm9uZSwgcHJlZml4PU5vbmUsIGRpcj1Ob25lKQogCi0gICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHVzaW5nIDpmdW5jOmBta2R0ZW1wYAotICAgKHRoZSBzdXBwbGllZCBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBmdW5jdGlvbikuCisgICBUaGlzIGZ1bmN0aW9uIHNlY3VyZWx5IGNyZWF0ZXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHVzaW5nIHRoZSBzYW1lIHJ1bGVzIGFzIDpmdW5jOmBta2R0ZW1wYC4KICAgIFRoZSByZXN1bHRpbmcgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIChzZWUKLSAgIDpyZWY6YGNvbnRleHQtbWFuYWdlcnNgKS4gIE9uIGNvbXBsZXRpb24gb2YgdGhlIGNvbnRleHQgb3IgZGVzdHJ1Y3Rpb24KKyAgIDpyZWY6YHRlbXBmaWxlLWV4YW1wbGVzYCkuICBPbiBjb21wbGV0aW9uIG9mIHRoZSBjb250ZXh0IG9yIGRlc3RydWN0aW9uCiAgICBvZiB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBvYmplY3QgdGhlIG5ld2x5IGNyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeQogICAgYW5kIGFsbCBpdHMgY29udGVudHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZmlsZXN5c3RlbS4KIApAQCAtMTEyLDcgKzEyNCw3IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCi0uLiBmdW5jdGlvbjo6IG1rc3RlbXAoc3VmZml4PScnLCBwcmVmaXg9J3RtcCcsIGRpcj1Ob25lLCB0ZXh0PUZhbHNlKQorLi4gZnVuY3Rpb246OiBta3N0ZW1wKHN1ZmZpeD1Ob25lLCBwcmVmaXg9Tm9uZSwgZGlyPU5vbmUsIHRleHQ9RmFsc2UpCiAKICAgIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgbW9zdCBzZWN1cmUgbWFubmVyIHBvc3NpYmxlLiAgVGhlcmUgYXJlCiAgICBubyByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGZpbGUncyBjcmVhdGlvbiwgYXNzdW1pbmcgdGhhdCB0aGUgcGxhdGZvcm0KQEAgLTEyNSwxNSArMTM3LDE2IEBACiAgICBVbmxpa2UgOmZ1bmM6YFRlbXBvcmFyeUZpbGVgLCB0aGUgdXNlciBvZiA6ZnVuYzpgbWtzdGVtcGAgaXMgcmVzcG9uc2libGUKICAgIGZvciBkZWxldGluZyB0aGUgdGVtcG9yYXJ5IGZpbGUgd2hlbiBkb25lIHdpdGggaXQuCiAKLSAgIElmICpzdWZmaXgqIGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgbmFtZSB3aWxsIGVuZCB3aXRoIHRoYXQgc3VmZml4LAorICAgSWYgKnN1ZmZpeCogaXMgbm90IGBgTm9uZWBgLCB0aGUgZmlsZSBuYW1lIHdpbGwgZW5kIHdpdGggdGhhdCBzdWZmaXgsCiAgICBvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBubyBzdWZmaXguICA6ZnVuYzpgbWtzdGVtcGAgZG9lcyBub3QgcHV0IGEgZG90CiAgICBiZXR3ZWVuIHRoZSBmaWxlIG5hbWUgYW5kIHRoZSBzdWZmaXg7IGlmIHlvdSBuZWVkIG9uZSwgcHV0IGl0IGF0IHRoZQogICAgYmVnaW5uaW5nIG9mICpzdWZmaXgqLgogCi0gICBJZiAqcHJlZml4KiBpcyBzcGVjaWZpZWQsIHRoZSBmaWxlIG5hbWUgd2lsbCBiZWdpbiB3aXRoIHRoYXQgcHJlZml4OwotICAgb3RoZXJ3aXNlLCBhIGRlZmF1bHQgcHJlZml4IGlzIHVzZWQuCisgICBJZiAqcHJlZml4KiBpcyBub3QgYGBOb25lYGAsIHRoZSBmaWxlIG5hbWUgd2lsbCBiZWdpbiB3aXRoIHRoYXQgcHJlZml4OworICAgb3RoZXJ3aXNlLCBhIGRlZmF1bHQgcHJlZml4IGlzIHVzZWQuICBUaGUgZGVmYXVsdCBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICA6ZnVuYzpgZ2V0dGVtcHByZWZpeGAgb3IgOmZ1bmM6YGdldHRlbXBwcmVmaXhiYCwgYXMgYXBwcm9wcmlhdGUuCiAKLSAgIElmICpkaXIqIGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoYXQgZGlyZWN0b3J5OworICAgSWYgKmRpciogaXMgbm90IGBgTm9uZWBgLCB0aGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhhdCBkaXJlY3Rvcnk7CiAgICBvdGhlcndpc2UsIGEgZGVmYXVsdCBkaXJlY3RvcnkgaXMgdXNlZC4gIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcyBjaG9zZW4KICAgIGZyb20gYSBwbGF0Zm9ybS1kZXBlbmRlbnQgbGlzdCwgYnV0IHRoZSB1c2VyIG9mIHRoZSBhcHBsaWNhdGlvbiBjYW4KICAgIGNvbnRyb2wgdGhlIGRpcmVjdG9yeSBsb2NhdGlvbiBieSBzZXR0aW5nIHRoZSAqVE1QRElSKiwgKlRFTVAqIG9yICpUTVAqCkBAIC0xNDEsNiArMTU0LDEyIEBACiAgICBmaWxlbmFtZSB3aWxsIGhhdmUgYW55IG5pY2UgcHJvcGVydGllcywgc3VjaCBhcyBub3QgcmVxdWlyaW5nIHF1b3RpbmcKICAgIHdoZW4gcGFzc2VkIHRvIGV4dGVybmFsIGNvbW1hbmRzIHZpYSBgYG9zLnBvcGVuKClgYC4KIAorICAgSWYgYW55IG9mICpzdWZmaXgqLCAqcHJlZml4KiwgYW5kICpkaXIqIGFyZSBub3QKKyAgIGBgTm9uZWBgLCB0aGV5IG11c3QgYmUgdGhlIHNhbWUgdHlwZS4KKyAgIElmIHRoZXkgYXJlIGJ5dGVzLCB0aGUgcmV0dXJuZWQgbmFtZSB3aWxsIGJlIGJ5dGVzIGluc3RlYWQgb2Ygc3RyLgorICAgSWYgeW91IHdhbnQgdG8gZm9yY2UgYSBieXRlcyByZXR1cm4gdmFsdWUgd2l0aCBvdGhlcndpc2UgZGVmYXVsdCBiZWhhdmlvciwKKyAgIHBhc3MgYGBzdWZmaXg9YicnYGAuCisKICAgIElmICp0ZXh0KiBpcyBzcGVjaWZpZWQsIGl0IGluZGljYXRlcyB3aGV0aGVyIHRvIG9wZW4gdGhlIGZpbGUgaW4gYmluYXJ5CiAgICBtb2RlICh0aGUgZGVmYXVsdCkgb3IgdGV4dCBtb2RlLiAgT24gc29tZSBwbGF0Zm9ybXMsIHRoaXMgbWFrZXMgbm8KICAgIGRpZmZlcmVuY2UuCkBAIC0xNDksOCArMTY4LDE0IEBACiAgICBmaWxlIChhcyB3b3VsZCBiZSByZXR1cm5lZCBieSA6ZnVuYzpgb3Mub3BlbmApIGFuZCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUKICAgIG9mIHRoYXQgZmlsZSwgaW4gdGhhdCBvcmRlci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICpzdWZmaXgqLCAqcHJlZml4KiwgYW5kICpkaXIqIG1heSBub3cgYmUgc3VwcGxpZWQgaW4gYnl0ZXMgaW4gb3JkZXIgdG8KKyAgICAgIG9idGFpbiBhIGJ5dGVzIHJldHVybiB2YWx1ZS4gIFByaW9yIHRvIHRoaXMsIG9ubHkgc3RyIHdhcyBhbGxvd2VkLgorICAgICAgKnN1ZmZpeCogYW5kICpwcmVmaXgqIG5vdyBhY2NlcHQgYW5kIGRlZmF1bHQgdG8gYGBOb25lYGAgdG8gY2F1c2UKKyAgICAgIGFuIGFwcHJvcHJpYXRlIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZC4KIAotLi4gZnVuY3Rpb246OiBta2R0ZW1wKHN1ZmZpeD0nJywgcHJlZml4PSd0bXAnLCBkaXI9Tm9uZSkKKworLi4gZnVuY3Rpb246OiBta2R0ZW1wKHN1ZmZpeD1Ob25lLCBwcmVmaXg9Tm9uZSwgZGlyPU5vbmUpCiAKICAgIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIHRoZSBtb3N0IHNlY3VyZSBtYW5uZXIgcG9zc2libGUuIFRoZXJlCiAgICBhcmUgbm8gcmFjZSBjb25kaXRpb25zIGluIHRoZSBkaXJlY3RvcnkncyBjcmVhdGlvbi4gIFRoZSBkaXJlY3RvcnkgaXMKQEAgLTE2NCw1MCArMTg5LDIxIEBACiAKICAgIDpmdW5jOmBta2R0ZW1wYCByZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRobmFtZSBvZiB0aGUgbmV3IGRpcmVjdG9yeS4KIAotCi0uLiBmdW5jdGlvbjo6IG1rdGVtcChzdWZmaXg9JycsIHByZWZpeD0ndG1wJywgZGlyPU5vbmUpCi0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjMKLSAgICAgIFVzZSA6ZnVuYzpgbWtzdGVtcGAgaW5zdGVhZC4KLQotICAgUmV0dXJuIGFuIGFic29sdXRlIHBhdGhuYW1lIG9mIGEgZmlsZSB0aGF0IGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlCi0gICBjYWxsIGlzIG1hZGUuICBUaGUgKnByZWZpeCosICpzdWZmaXgqLCBhbmQgKmRpciogYXJndW1lbnRzIGFyZSB0aGUgc2FtZQotICAgYXMgZm9yIDpmdW5jOmBta3N0ZW1wYC4KLQotICAgLi4gd2FybmluZzo6Ci0KLSAgICAgIFVzZSBvZiB0aGlzIGZ1bmN0aW9uIG1heSBpbnRyb2R1Y2UgYSBzZWN1cml0eSBob2xlIGluIHlvdXIgcHJvZ3JhbS4gIEJ5Ci0gICAgICB0aGUgdGltZSB5b3UgZ2V0IGFyb3VuZCB0byBkb2luZyBhbnl0aGluZyB3aXRoIHRoZSBmaWxlIG5hbWUgaXQgcmV0dXJucywKLSAgICAgIHNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBiZWF0ZW4geW91IHRvIHRoZSBwdW5jaC4gIDpmdW5jOmBta3RlbXBgIHVzYWdlIGNhbgotICAgICAgYmUgcmVwbGFjZWQgZWFzaWx5IHdpdGggOmZ1bmM6YE5hbWVkVGVtcG9yYXJ5RmlsZWAsIHBhc3NpbmcgaXQgdGhlCi0gICAgICBgYGRlbGV0ZT1GYWxzZWBgIHBhcmFtZXRlcjo6Ci0KLSAgICAgICAgID4+PiBmID0gTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkKLSAgICAgICAgID4+PiBmLm5hbWUKLSAgICAgICAgICcvdG1wL3RtcHRqdWpqdCcKLSAgICAgICAgID4+PiBmLndyaXRlKGIiSGVsbG8gV29ybGQhXG4iKQotICAgICAgICAgMTMKLSAgICAgICAgID4+PiBmLmNsb3NlKCkKLSAgICAgICAgID4+PiBvcy51bmxpbmsoZi5uYW1lKQotICAgICAgICAgPj4+IG9zLnBhdGguZXhpc3RzKGYubmFtZSkKLSAgICAgICAgIEZhbHNlCi0KLVRoZSBtb2R1bGUgdXNlcyBhIGdsb2JhbCB2YXJpYWJsZSB0aGF0IHRlbGwgaXQgaG93IHRvIGNvbnN0cnVjdCBhCi10ZW1wb3JhcnkgbmFtZS4gIFRoZXkgYXJlIGluaXRpYWxpemVkIGF0IHRoZSBmaXJzdCBjYWxsIHRvIGFueSBvZiB0aGUKLWZ1bmN0aW9ucyBhYm92ZS4gIFRoZSBjYWxsZXIgbWF5IGNoYW5nZSB0aGVtLCBidXQgdGhpcyBpcyBkaXNjb3VyYWdlZDsgdXNlCi10aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gYXJndW1lbnRzLCBpbnN0ZWFkLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICpzdWZmaXgqLCAqcHJlZml4KiwgYW5kICpkaXIqIG1heSBub3cgYmUgc3VwcGxpZWQgaW4gYnl0ZXMgaW4gb3JkZXIgdG8KKyAgICAgIG9idGFpbiBhIGJ5dGVzIHJldHVybiB2YWx1ZS4gIFByaW9yIHRvIHRoaXMsIG9ubHkgc3RyIHdhcyBhbGxvd2VkLgorICAgICAgKnN1ZmZpeCogYW5kICpwcmVmaXgqIG5vdyBhY2NlcHQgYW5kIGRlZmF1bHQgdG8gYGBOb25lYGAgdG8gY2F1c2UKKyAgICAgIGFuIGFwcHJvcHJpYXRlIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZC4KIAogCi0uLiBkYXRhOjogdGVtcGRpcgorLi4gZnVuY3Rpb246OiBnZXR0ZW1wZGlyKCkKIAotICAgV2hlbiBzZXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBgTm9uZWBgLCB0aGlzIHZhcmlhYmxlIGRlZmluZXMgdGhlCi0gICBkZWZhdWx0IHZhbHVlIGZvciB0aGUgKmRpciogYXJndW1lbnQgdG8gYWxsIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzCi0gICBtb2R1bGUuCisgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB1c2VkIGZvciB0ZW1wb3JhcnkgZmlsZXMuIFRoaXMKKyAgIGRlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSAqZGlyKiBhcmd1bWVudCB0byBhbGwgZnVuY3Rpb25zCisgICBpbiB0aGlzIG1vZHVsZS4KIAotICAgSWYgYGB0ZW1wZGlyYGAgaXMgdW5zZXQgb3IgYGBOb25lYGAgYXQgYW55IGNhbGwgdG8gYW55IG9mIHRoZSBhYm92ZQotICAgZnVuY3Rpb25zLCBQeXRob24gc2VhcmNoZXMgYSBzdGFuZGFyZCBsaXN0IG9mIGRpcmVjdG9yaWVzIGFuZCBzZXRzCi0gICAqdGVtcGRpciogdG8gdGhlIGZpcnN0IG9uZSB3aGljaCB0aGUgY2FsbGluZyB1c2VyIGNhbiBjcmVhdGUgZmlsZXMgaW4uCi0gICBUaGUgbGlzdCBpczoKKyAgIFB5dGhvbiBzZWFyY2hlcyBhIHN0YW5kYXJkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gZmluZCBvbmUgd2hpY2gKKyAgIHRoZSBjYWxsaW5nIHVzZXIgY2FuIGNyZWF0ZSBmaWxlcyBpbi4gIFRoZSBsaXN0IGlzOgogCiAgICAjLiBUaGUgZGlyZWN0b3J5IG5hbWVkIGJ5IHRoZSA6ZW52dmFyOmBUTVBESVJgIGVudmlyb25tZW50IHZhcmlhYmxlLgogCkBAIC0yMjUsMTkgKzIyMSw0MyBAQAogCiAgICAjLiBBcyBhIGxhc3QgcmVzb3J0LCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KIAorICAgVGhlIHJlc3VsdCBvZiB0aGlzIHNlYXJjaCBpcyBjYWNoZWQsIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YKKyAgIDpkYXRhOmB0ZW1wZGlyYCBiZWxvdy4KIAotLi4gZnVuY3Rpb246OiBnZXR0ZW1wZGlyKCkKKy4uIGZ1bmN0aW9uOjogZ2V0dGVtcGRpcmIoKQogCi0gICBSZXR1cm4gdGhlIGRpcmVjdG9yeSBjdXJyZW50bHkgc2VsZWN0ZWQgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlcyBpbi4gSWYKLSAgIDpkYXRhOmB0ZW1wZGlyYCBpcyBub3QgYGBOb25lYGAsIHRoaXMgc2ltcGx5IHJldHVybnMgaXRzIGNvbnRlbnRzOyBvdGhlcndpc2UsCi0gICB0aGUgc2VhcmNoIGRlc2NyaWJlZCBhYm92ZSBpcyBwZXJmb3JtZWQsIGFuZCB0aGUgcmVzdWx0IHJldHVybmVkLgorICAgU2FtZSBhcyA6ZnVuYzpgZ2V0dGVtcGRpcmAgYnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgaW4gYnl0ZXMuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQogCiAuLiBmdW5jdGlvbjo6IGdldHRlbXBwcmVmaXgoKQogCiAgICBSZXR1cm4gdGhlIGZpbGVuYW1lIHByZWZpeCB1c2VkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZXMuICBUaGlzIGRvZXMgbm90CiAgICBjb250YWluIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50LgogCisuLiBmdW5jdGlvbjo6IGdldHRlbXBwcmVmaXhiKCkKKworICAgU2FtZSBhcyA6ZnVuYzpgZ2V0dGVtcHByZWZpeGAgYnV0IHRoZSByZXR1cm4gdmFsdWUgaXMgaW4gYnl0ZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCitUaGUgbW9kdWxlIHVzZXMgYSBnbG9iYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeQordXNlZCBmb3IgdGVtcG9yYXJ5IGZpbGVzIHJldHVybmVkIGJ5IDpmdW5jOmBnZXR0ZW1wZGlyYC4gIEl0IGNhbiBiZQorc2V0IGRpcmVjdGx5IHRvIG92ZXJyaWRlIHRoZSBzZWxlY3Rpb24gcHJvY2VzcywgYnV0IHRoaXMgaXMgZGlzY291cmFnZWQuCitBbGwgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHRha2UgYSAqZGlyKiBhcmd1bWVudCB3aGljaCBjYW4gYmUgdXNlZAordG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IGFuZCB0aGlzIGlzIHRoZSByZWNvbW1lbmQgYXBwcm9hY2guCisKKy4uIGRhdGE6OiB0ZW1wZGlyCisKKyAgIFdoZW4gc2V0IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5vbmVgYCwgdGhpcyB2YXJpYWJsZSBkZWZpbmVzIHRoZQorICAgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlICpkaXIqIGFyZ3VtZW50IHRvIGFsbCB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhpcworICAgbW9kdWxlLgorCisgICBJZiBgYHRlbXBkaXJgYCBpcyB1bnNldCBvciBgYE5vbmVgYCBhdCBhbnkgY2FsbCB0byBhbnkgb2YgdGhlIGFib3ZlCisgICBmdW5jdGlvbnMgZXhjZXB0IDpmdW5jOmBnZXR0ZW1wcHJlZml4YCBpdCBpcyBpbml0aWFsaXplZCBmb2xsb3dpbmcgdGhlCisgICBhbGdvcml0aG0gZGVzY3JpYmVkIGluIDpmdW5jOmBnZXR0ZW1wZGlyYC4KKworLi4gX3RlbXBmaWxlLWV4YW1wbGVzOgogCiBFeGFtcGxlcwogLS0tLS0tLS0KQEAgLTI3MSwzICsyOTEsNDMgQEAKICAgICA+Pj4KICAgICAjIGRpcmVjdG9yeSBhbmQgY29udGVudHMgaGF2ZSBiZWVuIHJlbW92ZWQKIAorCitEZXByZWNhdGVkIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgaGlzdG9yaWNhbCB3YXkgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlcyB3YXMgdG8gZmlyc3QgZ2VuZXJhdGUgYQorZmlsZSBuYW1lIHdpdGggdGhlIDpmdW5jOmBta3RlbXBgIGZ1bmN0aW9uIGFuZCB0aGVuIGNyZWF0ZSBhIGZpbGUKK3VzaW5nIHRoaXMgbmFtZS4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIG5vdCBzZWN1cmUsIGJlY2F1c2UgYSBkaWZmZXJlbnQKK3Byb2Nlc3MgbWF5IGNyZWF0ZSBhIGZpbGUgd2l0aCB0aGlzIG5hbWUgaW4gdGhlIHRpbWUgYmV0d2VlbiB0aGUgY2FsbAordG8gOmZ1bmM6YG1rdGVtcGAgYW5kIHRoZSBzdWJzZXF1ZW50IGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBmaWxlIGJ5IHRoZQorZmlyc3QgcHJvY2Vzcy4gVGhlIHNvbHV0aW9uIGlzIHRvIGNvbWJpbmUgdGhlIHR3byBzdGVwcyBhbmQgY3JlYXRlIHRoZQorZmlsZSBpbW1lZGlhdGVseS4gVGhpcyBhcHByb2FjaCBpcyB1c2VkIGJ5IDpmdW5jOmBta3N0ZW1wYCBhbmQgdGhlCitvdGhlciBmdW5jdGlvbnMgZGVzY3JpYmVkIGFib3ZlLgorCisuLiBmdW5jdGlvbjo6IG1rdGVtcChzdWZmaXg9JycsIHByZWZpeD0ndG1wJywgZGlyPU5vbmUpCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAyLjMKKyAgICAgIFVzZSA6ZnVuYzpgbWtzdGVtcGAgaW5zdGVhZC4KKworICAgUmV0dXJuIGFuIGFic29sdXRlIHBhdGhuYW1lIG9mIGEgZmlsZSB0aGF0IGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlCisgICBjYWxsIGlzIG1hZGUuICBUaGUgKnByZWZpeCosICpzdWZmaXgqLCBhbmQgKmRpciogYXJndW1lbnRzIGFyZSBzaW1pbGFyCisgICB0byB0aG9zZSBvZiA6ZnVuYzpgbWtzdGVtcGAsIGV4Y2VwdCB0aGF0IGJ5dGVzIGZpbGUgbmFtZXMsIGBgc3VmZml4PU5vbmVgYAorICAgYW5kIGBgcHJlZml4PU5vbmVgYCBhcmUgbm90IHN1cHBvcnRlZC4KKworICAgLi4gd2FybmluZzo6CisKKyAgICAgIFVzZSBvZiB0aGlzIGZ1bmN0aW9uIG1heSBpbnRyb2R1Y2UgYSBzZWN1cml0eSBob2xlIGluIHlvdXIgcHJvZ3JhbS4gIEJ5CisgICAgICB0aGUgdGltZSB5b3UgZ2V0IGFyb3VuZCB0byBkb2luZyBhbnl0aGluZyB3aXRoIHRoZSBmaWxlIG5hbWUgaXQgcmV0dXJucywKKyAgICAgIHNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBiZWF0ZW4geW91IHRvIHRoZSBwdW5jaC4gIDpmdW5jOmBta3RlbXBgIHVzYWdlIGNhbgorICAgICAgYmUgcmVwbGFjZWQgZWFzaWx5IHdpdGggOmZ1bmM6YE5hbWVkVGVtcG9yYXJ5RmlsZWAsIHBhc3NpbmcgaXQgdGhlCisgICAgICBgYGRlbGV0ZT1GYWxzZWBgIHBhcmFtZXRlcjo6CisKKyAgICAgICAgID4+PiBmID0gTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkKKyAgICAgICAgID4+PiBmLm5hbWUKKyAgICAgICAgICcvdG1wL3RtcHRqdWpqdCcKKyAgICAgICAgID4+PiBmLndyaXRlKGIiSGVsbG8gV29ybGQhXG4iKQorICAgICAgICAgMTMKKyAgICAgICAgID4+PiBmLmNsb3NlKCkKKyAgICAgICAgID4+PiBvcy51bmxpbmsoZi5uYW1lKQorICAgICAgICAgPj4+IG9zLnBhdGguZXhpc3RzKGYubmFtZSkKKyAgICAgICAgIEZhbHNlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXJtaW9zLnJzdCBiL0RvYy9saWJyYXJ5L3Rlcm1pb3MucnN0CmluZGV4IGE5MGE4MjUuLmFkNmE5ZjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rlcm1pb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rlcm1pb3MucnN0CkBAIC01LDE1ICs1LDE2IEBACiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogUE9TSVggc3R5bGUgdHR5IGNvbnRyb2wuCiAKLQogLi4gaW5kZXg6OgogICAgcGFpcjogUE9TSVg7IEkvTyBjb250cm9sCiAgICBwYWlyOiB0dHk7IEkvTyBjb250cm9sCiAKLVRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgUE9TSVggY2FsbHMgZm9yIHR0eSBJL08gY29udHJvbC4gIEZvciBhCi1jb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGVzZSBjYWxscywgc2VlIHRoZSBQT1NJWCBvciBVbml4IG1hbnVhbCBwYWdlcy4gIEl0IGlzCi1vbmx5IGF2YWlsYWJsZSBmb3IgdGhvc2UgVW5peCB2ZXJzaW9ucyB0aGF0IHN1cHBvcnQgUE9TSVggKnRlcm1pb3MqIHN0eWxlIHR0eQotSS9PIGNvbnRyb2wgKGFuZCB0aGVuIG9ubHkgaWYgY29uZmlndXJlZCBhdCBpbnN0YWxsYXRpb24gdGltZSkuCistLS0tLS0tLS0tLS0tLQorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIFBPU0lYIGNhbGxzIGZvciB0dHkgSS9PIGNvbnRyb2wuIEZvciBhCitjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGVzZSBjYWxscywgc2VlIDptYW5wYWdlOmB0ZXJtaW9zKDIpYCBVbml4IG1hbnVhbAorcGFnZS4gIEl0IGlzIG9ubHkgYXZhaWxhYmxlIGZvciB0aG9zZSBVbml4IHZlcnNpb25zIHRoYXQgc3VwcG9ydCBQT1NJWAorKnRlcm1pb3MqIHN0eWxlIHR0eSBJL08gY29udHJvbCBjb25maWd1cmVkIGR1cmluZyBpbnN0YWxsYXRpb24uCiAKIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgdGFrZSBhIGZpbGUgZGVzY3JpcHRvciAqZmQqIGFzIHRoZWlyIGZpcnN0CiBhcmd1bWVudC4gIFRoaXMgY2FuIGJlIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yLCBzdWNoIGFzIHJldHVybmVkIGJ5CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CmluZGV4IDJmZGFmOGMuLjJlYTljMjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CkBAIC0zLDYgKzMsNyBAQAogCiAuLiBtb2R1bGU6OiB0ZXN0CiAgICA6c3lub3BzaXM6IFJlZ3Jlc3Npb24gdGVzdHMgcGFja2FnZSBjb250YWluaW5nIHRoZSB0ZXN0aW5nIHN1aXRlIGZvciBQeXRob24uCisKIC4uIHNlY3Rpb25hdXRob3I6OiBCcmV0dCBDYW5ub24gPGJyZXR0QHB5dGhvbi5vcmc+CiAKIC4uIG5vdGU6OgpAQCAtMTIsNiArMTMsNyBAQAogICAgbWVudGlvbmVkIGhlcmUgY2FuIGNoYW5nZSBvciBiZSByZW1vdmVkIHdpdGhvdXQgbm90aWNlIGJldHdlZW4gcmVsZWFzZXMgb2YKICAgIFB5dGhvbi4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHRlc3RgIHBhY2thZ2UgY29udGFpbnMgYWxsIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIFB5dGhvbiBhcyB3ZWxsIGFzIHRoZQogbW9kdWxlcyA6bW9kOmB0ZXN0LnN1cHBvcnRgIGFuZCA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YC4KQEAgLTU1MCw3ICs1NTIsNyBAQAogICAgb3IgcGFzc2VkIHRvIGFuIGV4dGVybmFsIHByb2dyYW0gKGkuZS4gdGhlIGBgLWFjY2VwdGBgIGFyZ3VtZW50IHRvCiAgICBvcGVuc3NsJ3Mgc19zZXJ2ZXIgbW9kZSkuICBBbHdheXMgcHJlZmVyIDpmdW5jOmBiaW5kX3BvcnRgIG92ZXIKICAgIDpmdW5jOmBmaW5kX3VudXNlZF9wb3J0YCB3aGVyZSBwb3NzaWJsZS4gIFVzaW5nIGEgaGFyZCBjb2RlZCBwb3J0IGlzCi0gICBkaXNjb3VyYWdlZCBzaW5jZSBpdCBjYW4gbWFrZXMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSB0ZXN0IGltcG9zc2libGUgdG8KKyAgIGRpc2NvdXJhZ2VkIHNpbmNlIGl0IGNhbiBtYWtlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgdGVzdCBpbXBvc3NpYmxlIHRvCiAgICBydW4gc2ltdWx0YW5lb3VzbHksIHdoaWNoIGlzIGEgcHJvYmxlbSBmb3IgYnVpbGRib3RzLgogCiAKQEAgLTU2OCw2ICs1NzAsMTcgQEAKICAgICAgIGRlZiBsb2FkX3Rlc3RzKCphcmdzKToKICAgICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQogCisuLiBmdW5jdGlvbjo6IGRldGVjdF9hcGlfbWlzbWF0Y2gocmVmX2FwaSwgb3RoZXJfYXBpLCAqLCBpZ25vcmU9KCkpOgorCisgICBSZXR1cm5zIHRoZSBzZXQgb2YgYXR0cmlidXRlcywgZnVuY3Rpb25zIG9yIG1ldGhvZHMgb2YgKnJlZl9hcGkqIG5vdAorICAgZm91bmQgb24gKm90aGVyX2FwaSosIGV4Y2VwdCBmb3IgYSBkZWZpbmVkIGxpc3Qgb2YgaXRlbXMgdG8gYmUKKyAgIGlnbm9yZWQgaW4gdGhpcyBjaGVjayBzcGVjaWZpZWQgaW4gKmlnbm9yZSouCisKKyAgIEJ5IGRlZmF1bHQgdGhpcyBza2lwcyBwcml2YXRlIGF0dHJpYnV0ZXMgYmVnaW5uaW5nIHdpdGggJ18nIGJ1dAorICAgaW5jbHVkZXMgYWxsIG1hZ2ljIG1ldGhvZHMsIGkuZS4gdGhvc2Ugc3RhcnRpbmcgYW5kIGVuZGluZyBpbiAnX18nLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogCiBUaGUgOm1vZDpgdGVzdC5zdXBwb3J0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CiAKQEAgLTYwOCw3ICs2MjEsNyBAQAogICAgYXJlIGV4cGVjdGVkIHRvIGNyYXNoIGEgc3VicHJvY2Vzcy4KIAogICAgT24gV2luZG93cywgaXQgZGlzYWJsZXMgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZwotICAgYFNldEVycm9yTW9kZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMS5hc3B4PmBfLgorICAgYFNldEVycm9yTW9kZSA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjEuYXNweD5gXy4KIAogICAgT24gVU5JWCwgOmZ1bmM6YHJlc291cmNlLnNldHJsaW1pdGAgaXMgdXNlZCB0byBzZXQKICAgIDphdHRyOmByZXNvdXJjZS5STElNSVRfQ09SRWAncyBzb2Z0IGxpbWl0IHRvIDAgdG8gcHJldmVudCBjb3JlZHVtcCBmaWxlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QgYi9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKaW5kZXggOWZlN2EzNS4uNDM4MDA3ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogdGV4dHdyYXAKICAgIDpzeW5vcHNpczogVGV4dCB3cmFwcGluZyBhbmQgZmlsbGluZworCiAuLiBtb2R1bGVhdXRob3I6OiBHcmVnIFdhcmQgPGd3YXJkQHB5dGhvbi5uZXQ+CiAuLiBzZWN0aW9uYXV0aG9yOjogR3JlZyBXYXJkIDxnd2FyZEBweXRob24ubmV0PgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0IGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAppbmRleCBjNTZkNzA3Li4zMDY2NDk2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKQEAgLTg0Nyw3ICs4NDcsNyBAQAogICAgICAgIHByaW50KCJoZWxsbywgd29ybGQiKQogCiAgICB0ID0gVGltZXIoMzAuMCwgaGVsbG8pCi0gICB0LnN0YXJ0KCkgIyBhZnRlciAzMCBzZWNvbmRzLCAiaGVsbG8sIHdvcmxkIiB3aWxsIGJlIHByaW50ZWQKKyAgIHQuc3RhcnQoKSAgIyBhZnRlciAzMCBzZWNvbmRzLCAiaGVsbG8sIHdvcmxkIiB3aWxsIGJlIHByaW50ZWQKIAogCiAuLiBjbGFzczo6IFRpbWVyKGludGVydmFsLCBmdW5jdGlvbiwgYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RpbWUucnN0IGIvRG9jL2xpYnJhcnkvdGltZS5yc3QKaW5kZXggMGEzZDk3Ny4uZTY2MjZmMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGltZS5yc3QKQEAgLTQsNiArNCw3IEBACiAuLiBtb2R1bGU6OiB0aW1lCiAgICA6c3lub3BzaXM6IFRpbWUgYWNjZXNzIGFuZCBjb252ZXJzaW9ucy4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdmFyaW91cyB0aW1lLXJlbGF0ZWQgZnVuY3Rpb25zLiBGb3IgcmVsYXRlZAogZnVuY3Rpb25hbGl0eSwgc2VlIGFsc28gdGhlIDptb2Q6YGRhdGV0aW1lYCBhbmQgOm1vZDpgY2FsZW5kYXJgIG1vZHVsZXMuCkBAIC0zMTQsOSArMzE1LDkgQEAKICAgIHByb2Nlc3NlcyBydW5uaW5nIGZvciBtb3JlIHRoYW4gNDkgZGF5cy4gT24gbW9yZSByZWNlbnQgdmVyc2lvbnMgb2YgV2luZG93cwogICAgYW5kIG9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLCA6ZnVuYzpgbW9ub3RvbmljYCBpcyBzeXN0ZW0td2lkZS4KIAotICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLCBNYWMgT1MgWCwgTGludXgsIEZyZWVCU0QsIE9wZW5CU0QsIFNvbGFyaXMuCi0KICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSBmdW5jdGlvbiBpcyBub3cgYWx3YXlzIGF2YWlsYWJsZS4KIAogCiAuLiBmdW5jdGlvbjo6IHBlcmZfY291bnRlcigpCkBAIC0zNTAsNiArMzUxLDExIEBACiAgICByZXF1ZXN0ZWQgYnkgYW4gYXJiaXRyYXJ5IGFtb3VudCBiZWNhdXNlIG9mIHRoZSBzY2hlZHVsaW5nIG9mIG90aGVyIGFjdGl2aXR5CiAgICBpbiB0aGUgc3lzdGVtLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIGZ1bmN0aW9uIG5vdyBzbGVlcHMgYXQgbGVhc3QgKnNlY3MqIGV2ZW4gaWYgdGhlIHNsZWVwIGlzIGludGVycnVwdGVkCisgICAgICBieSBhIHNpZ25hbCwgZXhjZXB0IGlmIHRoZSBzaWduYWwgaGFuZGxlciByYWlzZXMgYW4gZXhjZXB0aW9uIChzZWUKKyAgICAgIDpwZXA6YDQ3NWAgZm9yIHRoZSByYXRpb25hbGUpLgorCiAKIC4uIGZ1bmN0aW9uOjogc3RyZnRpbWUoZm9ybWF0WywgdF0pCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CmluZGV4IDcwZGY0MDkuLjU3YTQ4MzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGltZWl0LnJzdApAQCAtNCwxNyArNCwxNiBAQAogLi4gbW9kdWxlOjogdGltZWl0CiAgICA6c3lub3BzaXM6IE1lYXN1cmUgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIHNtYWxsIGNvZGUgc25pcHBldHMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3RpbWVpdC5weWAKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBCZW5jaG1hcmtpbmcKICAgIHNpbmdsZTogUGVyZm9ybWFuY2UKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdGltZWl0LnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gdGltZSBzbWFsbCBiaXRzIG9mIFB5dGhvbiBjb2RlLiBJdCBoYXMgYm90aAotYSA6cmVmOmBjb21tYW5kLWxpbmUtaW50ZXJmYWNlYCBhcyB3ZWxsIGFzIGEgOnJlZjpgY2FsbGFibGUgPHB5dGhvbi1pbnRlcmZhY2U+YAorYSA6cmVmOmB0aW1laXQtY29tbWFuZC1saW5lLWludGVyZmFjZWAgYXMgd2VsbCBhcyBhIDpyZWY6YGNhbGxhYmxlIDxweXRob24taW50ZXJmYWNlPmAKIG9uZS4gIEl0IGF2b2lkcyBhIG51bWJlciBvZiBjb21tb24gdHJhcHMgZm9yIG1lYXN1cmluZyBleGVjdXRpb24gdGltZXMuCiBTZWUgYWxzbyBUaW0gUGV0ZXJzJyBpbnRyb2R1Y3Rpb24gdG8gdGhlICJBbGdvcml0aG1zIiBjaGFwdGVyIGluIHRoZSAqUHl0aG9uCiBDb29rYm9vayosIHB1Ymxpc2hlZCBieSBPJ1JlaWxseS4KQEAgLTIzLDcgKzIyLDcgQEAKIEJhc2ljIEV4YW1wbGVzCiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRoZSA6cmVmOmBjb21tYW5kLWxpbmUtaW50ZXJmYWNlYAorVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0aGUgOnJlZjpgdGltZWl0LWNvbW1hbmQtbGluZS1pbnRlcmZhY2VgCiBjYW4gYmUgdXNlZCB0byBjb21wYXJlIHRocmVlIGRpZmZlcmVudCBleHByZXNzaW9uczoKIAogLi4gY29kZS1ibG9jazo6IHNoCkBAIC01OSwxOCArNTgsMjYgQEAKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aHJlZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgYW5kIGEgcHVibGljIGNsYXNzOgogCiAKLS4uIGZ1bmN0aW9uOjogdGltZWl0KHN0bXQ9J3Bhc3MnLCBzZXR1cD0ncGFzcycsIHRpbWVyPTxkZWZhdWx0IHRpbWVyPiwgbnVtYmVyPTEwMDAwMDApCisuLiBmdW5jdGlvbjo6IHRpbWVpdChzdG10PSdwYXNzJywgc2V0dXA9J3Bhc3MnLCB0aW1lcj08ZGVmYXVsdCB0aW1lcj4sIG51bWJlcj0xMDAwMDAwLCBnbG9iYWxzPU5vbmUpCiAKICAgIENyZWF0ZSBhIDpjbGFzczpgVGltZXJgIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHN0YXRlbWVudCwgKnNldHVwKiBjb2RlIGFuZAogICAgKnRpbWVyKiBmdW5jdGlvbiBhbmQgcnVuIGl0cyA6bWV0aDpgLnRpbWVpdGAgbWV0aG9kIHdpdGggKm51bWJlciogZXhlY3V0aW9ucy4KKyAgIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYXJndW1lbnQgc3BlY2lmaWVzIGEgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV4ZWN1dGUgdGhlCisgICBjb2RlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgogCiAKLS4uIGZ1bmN0aW9uOjogcmVwZWF0KHN0bXQ9J3Bhc3MnLCBzZXR1cD0ncGFzcycsIHRpbWVyPTxkZWZhdWx0IHRpbWVyPiwgcmVwZWF0PTMsIG51bWJlcj0xMDAwMDAwKQorLi4gZnVuY3Rpb246OiByZXBlYXQoc3RtdD0ncGFzcycsIHNldHVwPSdwYXNzJywgdGltZXI9PGRlZmF1bHQgdGltZXI+LCByZXBlYXQ9MywgbnVtYmVyPTEwMDAwMDAsIGdsb2JhbHM9Tm9uZSkKIAogICAgQ3JlYXRlIGEgOmNsYXNzOmBUaW1lcmAgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gc3RhdGVtZW50LCAqc2V0dXAqIGNvZGUgYW5kCiAgICAqdGltZXIqIGZ1bmN0aW9uIGFuZCBydW4gaXRzIDptZXRoOmAucmVwZWF0YCBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gKnJlcGVhdCoKLSAgIGNvdW50IGFuZCAqbnVtYmVyKiBleGVjdXRpb25zLgorICAgY291bnQgYW5kICpudW1iZXIqIGV4ZWN1dGlvbnMuICBUaGUgb3B0aW9uYWwgKmdsb2JhbHMqIGFyZ3VtZW50IHNwZWNpZmllcyBhCisgICBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXhlY3V0ZSB0aGUgY29kZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAogLi4gZnVuY3Rpb246OiBkZWZhdWx0X3RpbWVyKCkKIApAQCAtODAsNyArODcsNyBAQAogICAgICAgOmZ1bmM6YHRpbWUucGVyZl9jb3VudGVyYCBpcyBub3cgdGhlIGRlZmF1bHQgdGltZXIuCiAKIAotLi4gY2xhc3M6OiBUaW1lcihzdG10PSdwYXNzJywgc2V0dXA9J3Bhc3MnLCB0aW1lcj08dGltZXIgZnVuY3Rpb24+KQorLi4gY2xhc3M6OiBUaW1lcihzdG10PSdwYXNzJywgc2V0dXA9J3Bhc3MnLCB0aW1lcj08dGltZXIgZnVuY3Rpb24+LCBnbG9iYWxzPU5vbmUpCiAKICAgIENsYXNzIGZvciB0aW1pbmcgZXhlY3V0aW9uIHNwZWVkIG9mIHNtYWxsIGNvZGUgc25pcHBldHMuCiAKQEAgLTg4LDcgKzk1LDkgQEAKICAgIGZvciBzZXR1cCwgYW5kIGEgdGltZXIgZnVuY3Rpb24uICBCb3RoIHN0YXRlbWVudHMgZGVmYXVsdCB0byBgYCdwYXNzJ2BgOwogICAgdGhlIHRpbWVyIGZ1bmN0aW9uIGlzIHBsYXRmb3JtLWRlcGVuZGVudCAoc2VlIHRoZSBtb2R1bGUgZG9jIHN0cmluZykuCiAgICAqc3RtdCogYW5kICpzZXR1cCogbWF5IGFsc28gY29udGFpbiBtdWx0aXBsZSBzdGF0ZW1lbnRzIHNlcGFyYXRlZCBieSBgYDtgYAotICAgb3IgbmV3bGluZXMsIGFzIGxvbmcgYXMgdGhleSBkb24ndCBjb250YWluIG11bHRpLWxpbmUgc3RyaW5nIGxpdGVyYWxzLgorICAgb3IgbmV3bGluZXMsIGFzIGxvbmcgYXMgdGhleSBkb24ndCBjb250YWluIG11bHRpLWxpbmUgc3RyaW5nIGxpdGVyYWxzLiAgVGhlCisgICBzdGF0ZW1lbnQgd2lsbCBieSBkZWZhdWx0IGJlIGV4ZWN1dGVkIHdpdGhpbiB0aW1laXQncyBuYW1lc3BhY2U7IHRoaXMgYmVoYXZpb3IKKyAgIGNhbiBiZSBjb250cm9sbGVkIGJ5IHBhc3NpbmcgYSBuYW1lc3BhY2UgdG8gKmdsb2JhbHMqLgogCiAgICBUbyBtZWFzdXJlIHRoZSBleGVjdXRpb24gdGltZSBvZiB0aGUgZmlyc3Qgc3RhdGVtZW50LCB1c2UgdGhlIDptZXRoOmAudGltZWl0YAogICAgbWV0aG9kLiAgVGhlIDptZXRoOmAucmVwZWF0YCBtZXRob2QgaXMgYSBjb252ZW5pZW5jZSB0byBjYWxsIDptZXRoOmAudGltZWl0YApAQCAtMTAxLDYgKzExMCw4IEBACiAgICB3aWxsIHRoZW4gYmUgZXhlY3V0ZWQgYnkgOm1ldGg6YC50aW1laXRgLiAgTm90ZSB0aGF0IHRoZSB0aW1pbmcgb3ZlcmhlYWQgaXMgYQogICAgbGl0dGxlIGxhcmdlciBpbiB0aGlzIGNhc2UgYmVjYXVzZSBvZiB0aGUgZXh0cmEgZnVuY3Rpb24gY2FsbHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBUaGUgb3B0aW9uYWwgKmdsb2JhbHMqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAKICAgIC4uIG1ldGhvZDo6IFRpbWVyLnRpbWVpdChudW1iZXI9MTAwMDAwMCkKIApAQCAtMTYyLDE0ICsxNzMsMTQgQEAKICAgICAgIHdoZXJlIHRoZSB0cmFjZWJhY2sgaXMgc2VudDsgaXQgZGVmYXVsdHMgdG8gOmRhdGE6YHN5cy5zdGRlcnJgLgogCiAKLS4uIF9jb21tYW5kLWxpbmUtaW50ZXJmYWNlOgorLi4gX3RpbWVpdC1jb21tYW5kLWxpbmUtaW50ZXJmYWNlOgogCiBDb21tYW5kLUxpbmUgSW50ZXJmYWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoZW4gY2FsbGVkIGFzIGEgcHJvZ3JhbSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBmb2xsb3dpbmcgZm9ybSBpcyB1c2VkOjoKIAotICAgcHl0aG9uIC1tIHRpbWVpdCBbLW4gTl0gWy1yIE5dIFstcyBTXSBbLXRdIFstY10gWy1oXSBbc3RhdGVtZW50IC4uLl0KKyAgIHB5dGhvbiAtbSB0aW1laXQgWy1uIE5dIFstciBOXSBbLXUgVV0gWy1zIFNdIFstdF0gWy1jXSBbLWhdIFtzdGF0ZW1lbnQgLi4uXQogCiBXaGVyZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVuZGVyc3Rvb2Q6CiAKQEAgLTE5OCw2ICsyMDksMTIgQEAKIAogICAgdXNlIDpmdW5jOmB0aW1lLnRpbWVgIChkZXByZWNhdGVkKQogCisuLiBjbWRvcHRpb246OiAtdSwgLS11bml0PVUKKworICAgIHNwZWNpZnkgYSB0aW1lIHVuaXQgZm9yIHRpbWVyIG91dHB1dDsgY2FuIHNlbGVjdCB1c2VjLCBtc2VjLCBvciBzZWMKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKIC4uIGNtZG9wdGlvbjo6IC1jLCAtLWNsb2NrCiAKICAgIHVzZSA6ZnVuYzpgdGltZS5jbG9ja2AgKGRlcHJlY2F0ZWQpCkBAIC0zMjAsMyArMzM3LDE3IEBACiAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAgIGltcG9ydCB0aW1laXQKICAgICAgICBwcmludCh0aW1laXQudGltZWl0KCJ0ZXN0KCkiLCBzZXR1cD0iZnJvbSBfX21haW5fXyBpbXBvcnQgdGVzdCIpKQorCitBbm90aGVyIG9wdGlvbiBpcyB0byBwYXNzIDpmdW5jOmBnbG9iYWxzYCB0byB0aGUgICpnbG9iYWxzKiBwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgY2F1c2UgdGhlIGNvZGUKK3RvIGJlIGV4ZWN1dGVkIHdpdGhpbiB5b3VyIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZS4gIFRoaXMgY2FuIGJlIG1vcmUgY29udmVuaWVudAordGhhbiBpbmRpdmlkdWFsbHkgc3BlY2lmeWluZyBpbXBvcnRzOjoKKworICAgZGVmIGYoeCk6CisgICAgICAgcmV0dXJuIHgqKjIKKyAgIGRlZiBnKHgpOgorICAgICAgIHJldHVybiB4Kio0CisgICBkZWYgaCh4KToKKyAgICAgICByZXR1cm4geCoqOAorCisgICBpbXBvcnQgdGltZWl0CisgICBwcmludCh0aW1laXQudGltZWl0KCdbZnVuYyg0MikgZm9yIGZ1bmMgaW4gKGYsZyxoKV0nLCBnbG9iYWxzPWdsb2JhbHMoKSkpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90a2ludGVyLnJzdCBiL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CmluZGV4IDhiNzM4YzMuLjNlMWZhZWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CkBAIC0zLDggKzMsMTIgQEAKIAogLi4gbW9kdWxlOjogdGtpbnRlcgogICAgOnN5bm9wc2lzOiBJbnRlcmZhY2UgdG8gVGNsL1RrIGZvciBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzCisKIC4uIG1vZHVsZWF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQFB5dGhvbi5vcmc+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3RraW50ZXIvX19pbml0X18ucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmB0a2ludGVyYCBwYWNrYWdlICgiVGsgaW50ZXJmYWNlIikgaXMgdGhlIHN0YW5kYXJkIFB5dGhvbiBpbnRlcmZhY2UgdG8KIHRoZSBUayBHVUkgdG9vbGtpdC4gIEJvdGggVGsgYW5kIDptb2Q6YHRraW50ZXJgIGFyZSBhdmFpbGFibGUgb24gbW9zdCBVbml4CkBAIC0yMiwyMiArMjYsMjIgQEAKICAgIGBUS0RvY3MgPGh0dHA6Ly93d3cudGtkb2NzLmNvbS8+YF8KICAgICAgIEV4dGVuc2l2ZSB0dXRvcmlhbCBwbHVzIGZyaWVuZGxpZXIgd2lkZ2V0IHBhZ2VzIGZvciBzb21lIG9mIHRoZSB3aWRnZXRzLgogCi0gICBgVGtpbnRlciByZWZlcmVuY2U6IGEgR1VJIGZvciBQeXRob24gPGh0dHA6Ly9pbmZvaG9zdC5ubXQuZWR1L3RjYy9oZWxwL3B1YnMvdGtpbnRlci93ZWIvaW5kZXguaHRtbD5gXworICAgYFRraW50ZXIgcmVmZXJlbmNlOiBhIEdVSSBmb3IgUHl0aG9uIDxodHRwczovL2luZm9ob3N0Lm5tdC5lZHUvdGNjL2hlbHAvcHVicy90a2ludGVyL3dlYi9pbmRleC5odG1sPmBfCiAgICAgICBPbi1saW5lIHJlZmVyZW5jZSBtYXRlcmlhbC4KIAogICAgYFRraW50ZXIgZG9jcyBmcm9tIGVmZmJvdCA8aHR0cDovL2VmZmJvdC5vcmcvdGtpbnRlcmJvb2svPmBfCiAgICAgICBPbmxpbmUgcmVmZXJlbmNlIGZvciB0a2ludGVyIHN1cHBvcnRlZCBieSBlZmZib3Qub3JnLgogCi0gICBgVGNsL1RrIG1hbnVhbCA8aHR0cDovL3d3dy50Y2wudGsvbWFuL3RjbDguNS8+YF8KKyAgIGBUY2wvVGsgbWFudWFsIDxodHRwczovL3d3dy50Y2wudGsvbWFuL3RjbDguNS8+YF8KICAgICAgIE9mZmljaWFsIG1hbnVhbCBmb3IgdGhlIGxhdGVzdCB0Y2wvdGsgdmVyc2lvbi4KIAotICAgYFByb2dyYW1taW5nIFB5dGhvbiA8aHR0cDovL3d3dy5ybWkubmV0L35sdXR6L2Fib3V0LXBwNGUuaHRtbD5gXworICAgYFByb2dyYW1taW5nIFB5dGhvbiA8aHR0cDovL2xlYXJuaW5nLXB5dGhvbi5jb20vYm9va3MvYWJvdXQtcHA0ZS5odG1sPmBfCiAgICAgICBCb29rIGJ5IE1hcmsgTHV0eiwgaGFzIGV4Y2VsbGVudCBjb3ZlcmFnZSBvZiBUa2ludGVyLgogCiAgICBgTW9kZXJuIFRraW50ZXIgZm9yIEJ1c3kgUHl0aG9uIERldmVsb3BlcnMgPGh0dHA6Ly93d3cuYW1hem9uLmNvbS9Nb2Rlcm4tVGtpbnRlci1QeXRob24tRGV2ZWxvcGVycy1lYm9vay9kcC9CMDA3MVFETkxPLz5gXwogICAgICAgQm9vayBieSBNYXJrIFJvemVybWFuIGFib3V0IGJ1aWxkaW5nIGF0dHJhY3RpdmUgYW5kIG1vZGVybiBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzIHdpdGggUHl0aG9uIGFuZCBUa2ludGVyLgogCi0gICBgUHl0aG9uIGFuZCBUa2ludGVyIFByb2dyYW1taW5nIDxodHRwOi8vd3d3Lm1hbm5pbmcuY29tL2dyYXlzb24vPmBfCisgICBgUHl0aG9uIGFuZCBUa2ludGVyIFByb2dyYW1taW5nIDxodHRwczovL3d3dy5tYW5uaW5nLmNvbS9ib29rcy9weXRob24tYW5kLXRraW50ZXItcHJvZ3JhbW1pbmc+YF8KICAgICAgIFRoZSBib29rIGJ5IEpvaG4gR3JheXNvbiAoSVNCTiAxLTg4NDc3Ny04MS0zKS4KIAogCkBAIC0xNzMsNyArMTc3LDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBUY2wvVGsgOC42IG1hbiBwYWdlcyA8aHR0cDovL3d3dy50Y2wudGsvbWFuL3RjbDguNi8+YF8KKyAgIGBUY2wvVGsgOC42IG1hbiBwYWdlcyA8aHR0cHM6Ly93d3cudGNsLnRrL21hbi90Y2w4LjYvPmBfCiAgICAgICBUaGUgVGNsL1RrIG1hbnVhbCBvbiB3d3cudGNsLnRrLgogCiAgICBgQWN0aXZlU3RhdGUgVGNsIEhvbWUgUGFnZSA8aHR0cDovL3RjbC5hY3RpdmVzdGF0ZS5jb20vPmBfCkBAIC0xOTUsMTkgKzE5OSwxOSBAQAogCiAgICAgY2xhc3MgQXBwbGljYXRpb24odGsuRnJhbWUpOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICAgICAgdGsuRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtYXN0ZXIpCiAgICAgICAgICAgICBzZWxmLnBhY2soKQotICAgICAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3dpZGdldHMoKQogCi0gICAgICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgorICAgICAgICBkZWYgY3JlYXRlX3dpZGdldHMoc2VsZik6CiAgICAgICAgICAgICBzZWxmLmhpX3RoZXJlID0gdGsuQnV0dG9uKHNlbGYpCiAgICAgICAgICAgICBzZWxmLmhpX3RoZXJlWyJ0ZXh0Il0gPSAiSGVsbG8gV29ybGRcbihjbGljayBtZSkiCiAgICAgICAgICAgICBzZWxmLmhpX3RoZXJlWyJjb21tYW5kIl0gPSBzZWxmLnNheV9oaQogICAgICAgICAgICAgc2VsZi5oaV90aGVyZS5wYWNrKHNpZGU9InRvcCIpCiAKLSAgICAgICAgICAgIHNlbGYuUVVJVCA9IHRrLkJ1dHRvbihzZWxmLCB0ZXh0PSJRVUlUIiwgZmc9InJlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXJvb3QuZGVzdHJveSkKLSAgICAgICAgICAgIHNlbGYuUVVJVC5wYWNrKHNpZGU9ImJvdHRvbSIpCisgICAgICAgICAgICBzZWxmLnF1aXQgPSB0ay5CdXR0b24oc2VsZiwgdGV4dD0iUVVJVCIsIGZnPSJyZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9cm9vdC5kZXN0cm95KQorICAgICAgICAgICAgc2VsZi5xdWl0LnBhY2soc2lkZT0iYm90dG9tIikKIAogICAgICAgICBkZWYgc2F5X2hpKHNlbGYpOgogICAgICAgICAgICAgcHJpbnQoImhpIHRoZXJlLCBldmVyeW9uZSEiKQpAQCAtNTMyLDcgKzUzNiw3IEBACiAKICAgIGNsYXNzIEFwcChGcmFtZSk6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQorICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1hc3RlcikKICAgICAgICAgICAgc2VsZi5wYWNrKCkKIAogICAgICAgICAgICBzZWxmLmVudHJ5dGhpbmd5ID0gRW50cnkoKQpAQCAtNTc3LDEyICs1ODEsMTIgQEAKIAogSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiB0eXBpY2FsIHVzYWdlOjoKIAotICAgZnJvbSB0a2ludGVyIGltcG9ydCAqCi0gICBjbGFzcyBBcHAoRnJhbWUpOgotICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlcikKLSAgICAgICAgICAgc2VsZi5wYWNrKCkKKyAgIGltcG9ydCB0a2ludGVyIGFzIHRrCiAKKyAgIGNsYXNzIEFwcCh0ay5GcmFtZSk6CisgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKKyAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtYXN0ZXIpCisgICAgICAgICAgIHNlbGYucGFjaygpCiAKICAgICMgY3JlYXRlIHRoZSBhcHBsaWNhdGlvbgogICAgbXlhcHAgPSBBcHAoKQpAQCAtNzA0LDEzICs3MDgsMTMgQEAKIAogRm9yIGV4YW1wbGU6OgogCi0gICBkZWYgdHVyblJlZChzZWxmLCBldmVudCk6CisgICBkZWYgdHVybl9yZWQoc2VsZiwgZXZlbnQpOgogICAgICAgIGV2ZW50LndpZGdldFsiYWN0aXZlZm9yZWdyb3VuZCJdID0gInJlZCIKIAotICAgc2VsZi5idXR0b24uYmluZCgiPEVudGVyPiIsIHNlbGYudHVyblJlZCkKKyAgIHNlbGYuYnV0dG9uLmJpbmQoIjxFbnRlcj4iLCBzZWxmLnR1cm5fcmVkKQogCiBOb3RpY2UgaG93IHRoZSB3aWRnZXQgZmllbGQgb2YgdGhlIGV2ZW50IGlzIGJlaW5nIGFjY2Vzc2VkIGluIHRoZQotOm1ldGg6YHR1cm5SZWRgIGNhbGxiYWNrLiAgVGhpcyBmaWVsZCBjb250YWlucyB0aGUgd2lkZ2V0IHRoYXQgY2F1Z2h0IHRoZSBYCitgYHR1cm5fcmVkKClgYCBjYWxsYmFjay4gIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIHdpZGdldCB0aGF0IGNhdWdodCB0aGUgWAogZXZlbnQuICBUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBvdGhlciBldmVudCBmaWVsZHMgeW91IGNhbiBhY2Nlc3MsIGFuZCBob3cKIHRoZXkgYXJlIGRlbm90ZWQgaW4gVGssIHdoaWNoIGNhbiBiZSB1c2VmdWwgd2hlbiByZWZlcnJpbmcgdG8gdGhlIFRrIG1hbiBwYWdlcy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGtpbnRlci5zY3JvbGxlZHRleHQucnN0IGIvRG9jL2xpYnJhcnkvdGtpbnRlci5zY3JvbGxlZHRleHQucnN0CmluZGV4IDUyMDk3MGYuLjEzODcyMGUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RraW50ZXIuc2Nyb2xsZWR0ZXh0LnJzdAorKysgYi9Eb2MvbGlicmFyeS90a2ludGVyLnNjcm9sbGVkdGV4dC5yc3QKQEAgLTQsOCArNCwxMiBAQAogLi4gbW9kdWxlOjogdGtpbnRlci5zY3JvbGxlZHRleHQKICAgIDpwbGF0Zm9ybTogVGsKICAgIDpzeW5vcHNpczogVGV4dCB3aWRnZXQgd2l0aCBhIHZlcnRpY2FsIHNjcm9sbCBiYXIuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi90a2ludGVyL3Njcm9sbGVkdGV4dC5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHRraW50ZXIuc2Nyb2xsZWR0ZXh0YCBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyBvZiB0aGUgc2FtZSBuYW1lIHdoaWNoCiBpbXBsZW1lbnRzIGEgYmFzaWMgdGV4dCB3aWRnZXQgd2hpY2ggaGFzIGEgdmVydGljYWwgc2Nyb2xsIGJhciBjb25maWd1cmVkIHRvIGRvCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90a2ludGVyLnRpeC5yc3QgYi9Eb2MvbGlicmFyeS90a2ludGVyLnRpeC5yc3QKaW5kZXggOWRlNzNhZC4uNDFmMjBkZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGtpbnRlci50aXgucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RraW50ZXIudGl4LnJzdApAQCAtMywxMSArMywxNSBAQAogCiAuLiBtb2R1bGU6OiB0a2ludGVyLnRpeAogICAgOnN5bm9wc2lzOiBUayBFeHRlbnNpb24gV2lkZ2V0cyBmb3IgVGtpbnRlcgorCiAuLiBzZWN0aW9uYXV0aG9yOjogTWlrZSBDbGFya3NvbiA8bWlrZWNsYXJrc29uQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdGtpbnRlci90aXgucHlgCiAKIC4uIGluZGV4Ojogc2luZ2xlOiBUaXgKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YHRraW50ZXIudGl4YCAoVGsgSW50ZXJmYWNlIEV4dGVuc2lvbikgbW9kdWxlIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwKIHJpY2ggc2V0IG9mIHdpZGdldHMuIEFsdGhvdWdoIHRoZSBzdGFuZGFyZCBUayBsaWJyYXJ5IGhhcyBtYW55IHVzZWZ1bCB3aWRnZXRzLAogdGhleSBhcmUgZmFyIGZyb20gY29tcGxldGUuIFRoZSA6bW9kOmB0a2ludGVyLnRpeGAgbGlicmFyeSBwcm92aWRlcyBtb3N0IG9mIHRoZQpAQCAtMTQyLDcgKzE0Niw3IEBACiAKICAgIFRoZSBgTGFiZWxFbnRyeQogICAgPGh0dHA6Ly90aXguc291cmNlZm9yZ2UubmV0L2Rpc3QvY3VycmVudC9tYW4vaHRtbC9UaXhDbWQvdGl4TGFiZWxFbnRyeS5odG0+YF8KLSAgIHdpZGdldCBwYWNrYWdlcyBhbiBlbnRyeSB3aWRnZXQgYW5kIGEgbGFiZWwgaW50byBvbmUgbWVnYSB3aWRnZXQuIEl0IGNhbiBiZSB1c2VkCisgICB3aWRnZXQgcGFja2FnZXMgYW4gZW50cnkgd2lkZ2V0IGFuZCBhIGxhYmVsIGludG8gb25lIG1lZ2Egd2lkZ2V0LiBJdCBjYW4KICAgIGJlIHVzZWQgdG8gc2ltcGxpZnkgdGhlIGNyZWF0aW9uIG9mICJlbnRyeS1mb3JtIiB0eXBlIG9mIGludGVyZmFjZS4KIAogLi4gUHl0aG9uIERlbW8gb2Y6CkBAIC0yNjcsNyArMjcxLDcgQEAKIAogICAgVGhlIGBFeEZpbGVTZWxlY3RCb3gKICAgIDxodHRwOi8vdGl4LnNvdXJjZWZvcmdlLm5ldC9kaXN0L2N1cnJlbnQvbWFuL2h0bWwvVGl4Q21kL3RpeEV4RmlsZVNlbGVjdEJveC5odG0+YF8KLSAgIHdpZGdldCBpcyB1c3VhbGx5IGVtYmVkZGVkIGluIGEgdGl4RXhGaWxlU2VsZWN0RGlhbG9nIHdpZGdldC4gSXQgcHJvdmlkZXMgYW4KKyAgIHdpZGdldCBpcyB1c3VhbGx5IGVtYmVkZGVkIGluIGEgdGl4RXhGaWxlU2VsZWN0RGlhbG9nIHdpZGdldC4gSXQgcHJvdmlkZXMgYQogICAgY29udmVuaWVudCBtZXRob2QgZm9yIHRoZSB1c2VyIHRvIHNlbGVjdCBmaWxlcy4gVGhlIHN0eWxlIG9mIHRoZQogICAgOmNsYXNzOmBFeEZpbGVTZWxlY3RCb3hgIHdpZGdldCBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIGZpbGUgZGlhbG9nIG9uCiAgICBNUyBXaW5kb3dzIDMuMS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RraW50ZXIudHRrLnJzdCBiL0RvYy9saWJyYXJ5L3RraW50ZXIudHRrLnJzdAppbmRleCA0NjAxMTcxLi5kYmI1YmQyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90a2ludGVyLnR0ay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGtpbnRlci50dGsucnN0CkBAIC0zLDExICszLDE1IEBACiAKIC4uIG1vZHVsZTo6IHRraW50ZXIudHRrCiAgICA6c3lub3BzaXM6IFRrIHRoZW1lZCB3aWRnZXQgc2V0CisKIC4uIHNlY3Rpb25hdXRob3I6OiBHdWlsaGVybWUgUG9sbyA8Z2dwb2xvQGdtYWlsLmNvbT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdGtpbnRlci90dGsucHlgCiAKIC4uIGluZGV4Ojogc2luZ2xlOiB0dGsKIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YHRraW50ZXIudHRrYCBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBUayB0aGVtZWQgd2lkZ2V0IHNldCwKIGludHJvZHVjZWQgaW4gVGsgOC41LiBJZiBQeXRob24gaGFzIG5vdCBiZWVuIGNvbXBpbGVkIGFnYWluc3QgVGsgOC41LCB0aGlzCiBtb2R1bGUgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkIGlmICpUaWxlKiBoYXMgYmVlbiBpbnN0YWxsZWQuICBUaGUgZm9ybWVyCkBAIC0yMiw3ICsyNiw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgVGsgV2lkZ2V0IFN0eWxpbmcgU3VwcG9ydCA8aHR0cDovL3d3dy50Y2wudGsvY2dpLWJpbi90Y3QvdGlwLzQ4PmBfCisgICBgVGsgV2lkZ2V0IFN0eWxpbmcgU3VwcG9ydCA8aHR0cHM6Ly93d3cudGNsLnRrL2NnaS1iaW4vdGN0L3RpcC80OD5gXwogICAgICAgQSBkb2N1bWVudCBpbnRyb2R1Y2luZyB0aGVtaW5nIHN1cHBvcnQgZm9yIFRrCiAKIApAQCAtMjk5LDcgKzMwMyw3IEBACiA6bWV0aDpgV2lkZ2V0LmNvbmZpZ3VyZWAsIDptZXRoOmBXaWRnZXQuaWRlbnRpZnlgLCA6bWV0aDpgV2lkZ2V0Lmluc3RhdGVgCiBhbmQgOm1ldGg6YFdpZGdldC5zdGF0ZWAsIGFuZCB0aGUgZm9sbG93aW5nIGluaGVyaXRlZCBmcm9tIDpjbGFzczpgRW50cnlgOgogOm1ldGg6YEVudHJ5LmJib3hgLCA6bWV0aDpgRW50cnkuZGVsZXRlYCwgOm1ldGg6YEVudHJ5LmljdXJzb3JgLAotOm1ldGg6YEVudHJ5LmluZGV4YCwgOm1ldGg6YEVudHJ5Lmluc2V0YCwgOm1ldGg6YEVudHJ5LnNlbGVjdGlvbmAsCis6bWV0aDpgRW50cnkuaW5kZXhgLCA6bWV0aDpgRW50cnkuaW5zZXJ0YCwgOm1ldGg6YEVudHJ5LnNlbGVjdGlvbmAsCiA6bWV0aDpgRW50cnkueHZpZXdgLCBpdCBoYXMgc29tZSBvdGhlciBtZXRob2RzLCBkZXNjcmliZWQgYXQKIDpjbGFzczpgdHRrLkNvbWJvYm94YC4KIApAQCAtNzAxLDcgKzcwNSw3IEBACiBoZWFkaW5ncy4gQ29sdW1ucyBtYXkgYmUgYWNjZXNzZWQgYnkgbnVtYmVyIG9yIHN5bWJvbGljIG5hbWVzIGxpc3RlZCBpbiB0aGUKIHdpZGdldCBvcHRpb24gY29sdW1ucy4gU2VlIGBDb2x1bW4gSWRlbnRpZmllcnNgXy4KIAotRWFjaCBpdGVtIGlzIGlkZW50aWZpZWQgYnkgYW4gdW5pcXVlIG5hbWUuIFRoZSB3aWRnZXQgd2lsbCBnZW5lcmF0ZSBpdGVtIElEcworRWFjaCBpdGVtIGlzIGlkZW50aWZpZWQgYnkgYSB1bmlxdWUgbmFtZS4gVGhlIHdpZGdldCB3aWxsIGdlbmVyYXRlIGl0ZW0gSURzCiBpZiB0aGV5IGFyZSBub3Qgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4gVGhlcmUgaXMgYSBkaXN0aW5ndWlzaGVkIHJvb3QgaXRlbSwKIG5hbWVkIGBge31gYC4gVGhlIHJvb3QgaXRlbSBpdHNlbGYgaXMgbm90IGRpc3BsYXllZDsgaXRzIGNoaWxkcmVuIGFwcGVhciBhdCB0aGUKIHRvcCBsZXZlbCBvZiB0aGUgaGllcmFyY2h5LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdG9rZW4ucnN0IGIvRG9jL2xpYnJhcnkvdG9rZW4ucnN0CmluZGV4IDRjZDcwOTguLjExNmVmY2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rva2VuLnJzdAorKysgYi9Eb2MvbGlicmFyeS90b2tlbi5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHRva2VuCiAgICA6c3lub3BzaXM6IENvbnN0YW50cyByZXByZXNlbnRpbmcgdGVybWluYWwgbm9kZXMgb2YgdGhlIHBhcnNlIHRyZWUuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi90b2tlbi5weWAKQEAgLTkzLDEzICs5NCwyMCBAQAogICAgICAgICAgIERPVUJMRVNMQVNICiAgICAgICAgICAgRE9VQkxFU0xBU0hFUVVBTAogICAgICAgICAgIEFUCisgICAgICAgICAgQVRFUVVBTAogICAgICAgICAgIFJBUlJPVwogICAgICAgICAgIEVMTElQU0lTCiAgICAgICAgICAgT1AKKyAgICAgICAgICBBV0FJVAorICAgICAgICAgIEFTWU5DCiAgICAgICAgICAgRVJST1JUT0tFTgogICAgICAgICAgIE5fVE9LRU5TCiAgICAgICAgICAgTlRfT0ZGU0VUCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICBBZGRlZCA6ZGF0YTpgQVdBSVRgIGFuZCA6ZGF0YTpgQVNZTkNgIHRva2Vucy4gU3RhcnRpbmcgd2l0aAorICAgICAgUHl0aG9uIDMuNywgImFzeW5jIiBhbmQgImF3YWl0IiB3aWxsIGJlIHRva2VuaXplZCBhcyA6ZGF0YTpgTkFNRWAKKyAgICAgIHRva2VucywgYW5kIDpkYXRhOmBBV0FJVGAgYW5kIDpkYXRhOmBBU1lOQ2Agd2lsbCBiZSByZW1vdmVkLgogCiAuLiBzZWVhbHNvOjoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0IGIvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0CmluZGV4IGM5Y2I1MTguLmZmNTVhYWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdAorKysgYi9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHRva2VuaXplCiAgICA6c3lub3BzaXM6IExleGljYWwgc2Nhbm5lciBmb3IgUHl0aG9uIHNvdXJjZSBjb2RlLgorCiAuLiBtb2R1bGVhdXRob3I6OiBLYSBQaW5nIFllZQogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKQEAgLTI3LDcgKzI4LDcgQEAKIAogLi4gZnVuY3Rpb246OiB0b2tlbml6ZShyZWFkbGluZSkKIAotICAgVGhlIDpmdW5jOmB0b2tlbml6ZWAgZ2VuZXJhdG9yIHJlcXVpcmVzIG9uZSBhcmd1bWVudCwgKnJlYWRsaW5lKiwgd2hpY2gKKyAgIFRoZSA6ZnVuYzpgLnRva2VuaXplYCBnZW5lcmF0b3IgcmVxdWlyZXMgb25lIGFyZ3VtZW50LCAqcmVhZGxpbmUqLCB3aGljaAogICAgbXVzdCBiZSBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCBwcm92aWRlcyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlCiAgICA6bWV0aDpgaW8uSU9CYXNlLnJlYWRsaW5lYCBtZXRob2Qgb2YgZmlsZSBvYmplY3RzLiAgRWFjaCBjYWxsIHRvIHRoZQogICAgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBvbmUgbGluZSBvZiBpbnB1dCBhcyBieXRlcy4KQEAgLTUyLDcgKzUzLDcgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBgYGV4YWN0X3R5cGVgYC4KIAotICAgOmZ1bmM6YHRva2VuaXplYCBkZXRlcm1pbmVzIHRoZSBzb3VyY2UgZW5jb2Rpbmcgb2YgdGhlIGZpbGUgYnkgbG9va2luZyBmb3IgYQorICAgOmZ1bmM6YC50b2tlbml6ZWAgZGV0ZXJtaW5lcyB0aGUgc291cmNlIGVuY29kaW5nIG9mIHRoZSBmaWxlIGJ5IGxvb2tpbmcgZm9yIGEKICAgIFVURi04IEJPTSBvciBlbmNvZGluZyBjb29raWUsIGFjY29yZGluZyB0byA6cGVwOmAyNjNgLgogCiAKQEAgLTc0LDcgKzc1LDcgQEAKIC4uIGRhdGE6OiBFTkNPRElORwogCiAgICAgVG9rZW4gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gZGVjb2RlIHRoZSBzb3VyY2UgYnl0ZXMKLSAgICBpbnRvIHRleHQuIFRoZSBmaXJzdCB0b2tlbiByZXR1cm5lZCBieSA6ZnVuYzpgdG9rZW5pemVgIHdpbGwgYWx3YXlzIGJlIGFuCisgICAgaW50byB0ZXh0LiBUaGUgZmlyc3QgdG9rZW4gcmV0dXJuZWQgYnkgOmZ1bmM6YC50b2tlbml6ZWAgd2lsbCBhbHdheXMgYmUgYW4KICAgICBFTkNPRElORyB0b2tlbi4KIAogCkBAIC05NiwxNyArOTcsMTcgQEAKICAgICBwb3NpdGlvbnMpIG1heSBjaGFuZ2UuCiAKICAgICBJdCByZXR1cm5zIGJ5dGVzLCBlbmNvZGVkIHVzaW5nIHRoZSBFTkNPRElORyB0b2tlbiwgd2hpY2ggaXMgdGhlIGZpcnN0Ci0gICAgdG9rZW4gc2VxdWVuY2Ugb3V0cHV0IGJ5IDpmdW5jOmB0b2tlbml6ZWAuCisgICAgdG9rZW4gc2VxdWVuY2Ugb3V0cHV0IGJ5IDpmdW5jOmAudG9rZW5pemVgLgogCiAKLTpmdW5jOmB0b2tlbml6ZWAgbmVlZHMgdG8gZGV0ZWN0IHRoZSBlbmNvZGluZyBvZiBzb3VyY2UgZmlsZXMgaXQgdG9rZW5pemVzLiBUaGUKKzpmdW5jOmAudG9rZW5pemVgIG5lZWRzIHRvIGRldGVjdCB0aGUgZW5jb2Rpbmcgb2Ygc291cmNlIGZpbGVzIGl0IHRva2VuaXplcy4gVGhlCiBmdW5jdGlvbiBpdCB1c2VzIHRvIGRvIHRoaXMgaXMgYXZhaWxhYmxlOgogCiAuLiBmdW5jdGlvbjo6IGRldGVjdF9lbmNvZGluZyhyZWFkbGluZSkKIAogICAgIFRoZSA6ZnVuYzpgZGV0ZWN0X2VuY29kaW5nYCBmdW5jdGlvbiBpcyB1c2VkIHRvIGRldGVjdCB0aGUgZW5jb2RpbmcgdGhhdAogICAgIHNob3VsZCBiZSB1c2VkIHRvIGRlY29kZSBhIFB5dGhvbiBzb3VyY2UgZmlsZS4gSXQgcmVxdWlyZXMgb25lIGFyZ3VtZW50LAotICAgIHJlYWRsaW5lLCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIDpmdW5jOmB0b2tlbml6ZWAgZ2VuZXJhdG9yLgorICAgIHJlYWRsaW5lLCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIDpmdW5jOmAudG9rZW5pemVgIGdlbmVyYXRvci4KIAogICAgIEl0IHdpbGwgY2FsbCByZWFkbGluZSBhIG1heGltdW0gb2YgdHdpY2UsIGFuZCByZXR1cm4gdGhlIGVuY29kaW5nIHVzZWQKICAgICAoYXMgYSBzdHJpbmcpIGFuZCBhIGxpc3Qgb2YgYW55IGxpbmVzIChub3QgZGVjb2RlZCBmcm9tIGJ5dGVzKSBpdCBoYXMgcmVhZApAQCAtMTIwLDcgKzEyMSw3IEBACiAgICAgSWYgbm8gZW5jb2RpbmcgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSBkZWZhdWx0IG9mIGBgJ3V0Zi04J2BgIHdpbGwgYmUKICAgICByZXR1cm5lZC4KIAotICAgIFVzZSA6ZnVuYzpgb3BlbmAgdG8gb3BlbiBQeXRob24gc291cmNlIGZpbGVzOiBpdCB1c2VzCisgICAgVXNlIDpmdW5jOmAub3BlbmAgdG8gb3BlbiBQeXRob24gc291cmNlIGZpbGVzOiBpdCB1c2VzCiAgICAgOmZ1bmM6YGRldGVjdF9lbmNvZGluZ2AgdG8gZGV0ZWN0IHRoZSBmaWxlIGVuY29kaW5nLgogCiAKQEAgLTIwMSw3ICsyMDIsNyBAQAogICAgICAgICB3ZSdyZSBvbmx5IHNob3dpbmcgMTIgZGlnaXRzLCBhbmQgdGhlIDEzdGggaXNuJ3QgY2xvc2UgdG8gNSwgdGhlCiAgICAgICAgIHJlc3Qgb2YgdGhlIG91dHB1dCBzaG91bGQgYmUgcGxhdGZvcm0taW5kZXBlbmRlbnQuCiAKLSAgICAgICAgPj4+IGV4ZWMocykgI2RvY3Rlc3Q6ICtFTExJUFNJUworICAgICAgICA+Pj4gZXhlYyhzKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwogICAgICAgICAtMy4yMTcxNjAzNDI3MmUtMC4uLjcKIAogICAgICAgICBPdXRwdXQgZnJvbSBjYWxjdWxhdGlvbnMgd2l0aCBEZWNpbWFsIHNob3VsZCBiZSBpZGVudGljYWwgYWNyb3NzIGFsbApAQCAtMjExLDggKzIxMiw4IEBACiAgICAgICAgIC0zLjIxNzE2MDM0MjcxNzI1ODI2MTkzMzkwNDUyOUUtNwogICAgICAgICAiIiIKICAgICAgICAgcmVzdWx0ID0gW10KLSAgICAgICAgZyA9IHRva2VuaXplKEJ5dGVzSU8ocy5lbmNvZGUoJ3V0Zi04JykpLnJlYWRsaW5lKSAjIHRva2VuaXplIHRoZSBzdHJpbmcKLSAgICAgICAgZm9yIHRva251bSwgdG9rdmFsLCBfLCBfLCBfICBpbiBnOgorICAgICAgICBnID0gdG9rZW5pemUoQnl0ZXNJTyhzLmVuY29kZSgndXRmLTgnKSkucmVhZGxpbmUpICAjIHRva2VuaXplIHRoZSBzdHJpbmcKKyAgICAgICAgZm9yIHRva251bSwgdG9rdmFsLCBfLCBfLCBfIGluIGc6CiAgICAgICAgICAgICBpZiB0b2tudW0gPT0gTlVNQkVSIGFuZCAnLicgaW4gdG9rdmFsOiAgIyByZXBsYWNlIE5VTUJFUiB0b2tlbnMKICAgICAgICAgICAgICAgICByZXN1bHQuZXh0ZW5kKFsKICAgICAgICAgICAgICAgICAgICAgKE5BTUUsICdEZWNpbWFsJyksCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0IGIvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdAppbmRleCAxNWZiZWRjLi42ZWM5YWRhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiB0cmFjZWJhY2sKICAgIDpzeW5vcHNpczogUHJpbnQgb3IgcmV0cmlldmUgYSBzdGFjayB0cmFjZWJhY2suCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3RyYWNlYmFjay5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBzdGFuZGFyZCBpbnRlcmZhY2UgdG8gZXh0cmFjdCwgZm9ybWF0IGFuZCBwcmludCBzdGFjawogdHJhY2VzIG9mIFB5dGhvbiBwcm9ncmFtcy4gIEl0IGV4YWN0bHkgbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgUHl0aG9uCkBAIC0yMCwyNyArMjMsMzMgQEAKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCi0uLiBmdW5jdGlvbjo6IHByaW50X3RiKHRyYWNlYmFjaywgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKQorLi4gZnVuY3Rpb246OiBwcmludF90Yih0YiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKQogCi0gICBQcmludCB1cCB0byAqbGltaXQqIHN0YWNrIHRyYWNlIGVudHJpZXMgZnJvbSAqdHJhY2ViYWNrKi4gIElmICpsaW1pdCogaXMgb21pdHRlZAotICAgb3IgYGBOb25lYGAsIGFsbCBlbnRyaWVzIGFyZSBwcmludGVkLiBJZiAqZmlsZSogaXMgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlCi0gICBvdXRwdXQgZ29lcyB0byBgYHN5cy5zdGRlcnJgYDsgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBhbiBvcGVuIGZpbGUgb3IgZmlsZS1saWtlCi0gICBvYmplY3QgdG8gcmVjZWl2ZSB0aGUgb3V0cHV0LgorICAgUHJpbnQgdXAgdG8gKmxpbWl0KiBzdGFjayB0cmFjZSBlbnRyaWVzIGZyb20gdHJhY2ViYWNrIG9iamVjdCAqdGIqIChzdGFydGluZworICAgZnJvbSB0aGUgY2FsbGVyJ3MgZnJhbWUpIGlmICpsaW1pdCogaXMgcG9zaXRpdmUuICBPdGhlcndpc2UsIHByaW50IHRoZSBsYXN0CisgICBgYGFicyhsaW1pdClgYCBlbnRyaWVzLiAgSWYgKmxpbWl0KiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCBhbGwgZW50cmllcyBhcmUKKyAgIHByaW50ZWQuICBJZiAqZmlsZSogaXMgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlIG91dHB1dCBnb2VzIHRvCisgICBgYHN5cy5zdGRlcnJgYDsgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBhbiBvcGVuIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdCB0bworICAgcmVjZWl2ZSB0aGUgb3V0cHV0LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgIEFkZGVkIG5lZ2F0aXZlICpsaW1pdCogc3VwcG9ydC4KIAogCi0uLiBmdW5jdGlvbjo6IHByaW50X2V4Y2VwdGlvbih0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpCisuLiBmdW5jdGlvbjo6IHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpCiAKLSAgIFByaW50IGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBhbmQgdXAgdG8gKmxpbWl0KiBzdGFjayB0cmFjZSBlbnRyaWVzIGZyb20KLSAgICp0cmFjZWJhY2sqIHRvICpmaWxlKi4gVGhpcyBkaWZmZXJzIGZyb20gOmZ1bmM6YHByaW50X3RiYCBpbiB0aGUgZm9sbG93aW5nCisgICBQcmludCBleGNlcHRpb24gaW5mb3JtYXRpb24gYW5kIHN0YWNrIHRyYWNlIGVudHJpZXMgZnJvbSB0cmFjZWJhY2sgb2JqZWN0CisgICAqdGIqIHRvICpmaWxlKi4gVGhpcyBkaWZmZXJzIGZyb20gOmZ1bmM6YHByaW50X3RiYCBpbiB0aGUgZm9sbG93aW5nCiAgICB3YXlzOgogCi0gICAqIGlmICp0cmFjZWJhY2sqIGlzIG5vdCBgYE5vbmVgYCwgaXQgcHJpbnRzIGEgaGVhZGVyIGBgVHJhY2ViYWNrIChtb3N0IHJlY2VudAorICAgKiBpZiAqdGIqIGlzIG5vdCBgYE5vbmVgYCwgaXQgcHJpbnRzIGEgaGVhZGVyIGBgVHJhY2ViYWNrIChtb3N0IHJlY2VudAogICAgICBjYWxsIGxhc3QpOmBgCi0gICAqIGl0IHByaW50cyB0aGUgZXhjZXB0aW9uICp0eXBlKiBhbmQgKnZhbHVlKiBhZnRlciB0aGUgc3RhY2sgdHJhY2UKLSAgICogaWYgKnR5cGUqIGlzIDpleGM6YFN5bnRheEVycm9yYCBhbmQgKnZhbHVlKiBoYXMgdGhlIGFwcHJvcHJpYXRlIGZvcm1hdCwgaXQKKyAgICogaXQgcHJpbnRzIHRoZSBleGNlcHRpb24gKmV0eXBlKiBhbmQgKnZhbHVlKiBhZnRlciB0aGUgc3RhY2sgdHJhY2UKKyAgICogaWYgKmV0eXBlKiBpcyA6ZXhjOmBTeW50YXhFcnJvcmAgYW5kICp2YWx1ZSogaGFzIHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQsIGl0CiAgICAgIHByaW50cyB0aGUgbGluZSB3aGVyZSB0aGUgc3ludGF4IGVycm9yIG9jY3VycmVkIHdpdGggYSBjYXJldCBpbmRpY2F0aW5nIHRoZQogICAgICBhcHByb3hpbWF0ZSBwb3NpdGlvbiBvZiB0aGUgZXJyb3IuCiAKKyAgIFRoZSBvcHRpb25hbCAqbGltaXQqIGFyZ3VtZW50IGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciA6ZnVuYzpgcHJpbnRfdGJgLgogICAgSWYgKmNoYWluKiBpcyB0cnVlICh0aGUgZGVmYXVsdCksIHRoZW4gY2hhaW5lZCBleGNlcHRpb25zICh0aGUKICAgIDphdHRyOmBfX2NhdXNlX19gIG9yIDphdHRyOmBfX2NvbnRleHRfX2AgYXR0cmlidXRlcyBvZiB0aGUgZXhjZXB0aW9uKSB3aWxsIGJlCiAgICBwcmludGVkIGFzIHdlbGwsIGxpa2UgdGhlIGludGVycHJldGVyIGl0c2VsZiBkb2VzIHdoZW4gcHJpbnRpbmcgYW4gdW5oYW5kbGVkCkBAIC00OSwzMyArNTgsNDEgQEAKIAogLi4gZnVuY3Rpb246OiBwcmludF9leGMobGltaXQ9Tm9uZSwgZmlsZT1Ob25lLCBjaGFpbj1UcnVlKQogCi0gICBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciBgYHByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpYGAuCisgICBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciBgYHByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCksIGxpbWl0LCBmaWxlLAorICAgY2hhaW4pYGAuCiAKIAogLi4gZnVuY3Rpb246OiBwcmludF9sYXN0KGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSkKIAogICAgVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgYGBwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwgc3lzLmxhc3RfdmFsdWUsCi0gICBzeXMubGFzdF90cmFjZWJhY2ssIGxpbWl0LCBmaWxlKWBgLiAgSW4gZ2VuZXJhbCBpdCB3aWxsIHdvcmsgb25seSBhZnRlcgotICAgYW4gZXhjZXB0aW9uIGhhcyByZWFjaGVkIGFuIGludGVyYWN0aXZlIHByb21wdCAoc2VlIDpkYXRhOmBzeXMubGFzdF90eXBlYCkuCisgICBzeXMubGFzdF90cmFjZWJhY2ssIGxpbWl0LCBmaWxlLCBjaGFpbilgYC4gIEluIGdlbmVyYWwgaXQgd2lsbCB3b3JrIG9ubHkKKyAgIGFmdGVyIGFuIGV4Y2VwdGlvbiBoYXMgcmVhY2hlZCBhbiBpbnRlcmFjdGl2ZSBwcm9tcHQgKHNlZQorICAgOmRhdGE6YHN5cy5sYXN0X3R5cGVgKS4KIAogCiAuLiBmdW5jdGlvbjo6IHByaW50X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKQogCi0gICBUaGlzIGZ1bmN0aW9uIHByaW50cyBhIHN0YWNrIHRyYWNlIGZyb20gaXRzIGludm9jYXRpb24gcG9pbnQuICBUaGUgb3B0aW9uYWwgKmYqCi0gICBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBzdGFjayBmcmFtZSB0byBzdGFydC4gIFRoZSBvcHRpb25hbAotICAgKmxpbWl0KiBhbmQgKmZpbGUqIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yCi0gICA6ZnVuYzpgcHJpbnRfZXhjZXB0aW9uYC4KKyAgIFByaW50IHVwIHRvICpsaW1pdCogc3RhY2sgdHJhY2UgZW50cmllcyAoc3RhcnRpbmcgZnJvbSB0aGUgaW52b2NhdGlvbgorICAgcG9pbnQpIGlmICpsaW1pdCogaXMgcG9zaXRpdmUuICBPdGhlcndpc2UsIHByaW50IHRoZSBsYXN0IGBgYWJzKGxpbWl0KWBgCisgICBlbnRyaWVzLiAgSWYgKmxpbWl0KiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCBhbGwgZW50cmllcyBhcmUgcHJpbnRlZC4KKyAgIFRoZSBvcHRpb25hbCAqZiogYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGUgc3RhY2sgZnJhbWUKKyAgIHRvIHN0YXJ0LiAgVGhlIG9wdGlvbmFsICpmaWxlKiBhcmd1bWVudCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IKKyAgIDpmdW5jOmBwcmludF90YmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICAgICAgQWRkZWQgbmVnYXRpdmUgKmxpbWl0KiBzdXBwb3J0LgogCiAKLS4uIGZ1bmN0aW9uOjogZXh0cmFjdF90Yih0cmFjZWJhY2ssIGxpbWl0PU5vbmUpCisuLiBmdW5jdGlvbjo6IGV4dHJhY3RfdGIodGIsIGxpbWl0PU5vbmUpCiAKLSAgIFJldHVybiBhIGxpc3Qgb2YgdXAgdG8gKmxpbWl0KiAicHJlLXByb2Nlc3NlZCIgc3RhY2sgdHJhY2UgZW50cmllcyBleHRyYWN0ZWQKLSAgIGZyb20gdGhlIHRyYWNlYmFjayBvYmplY3QgKnRyYWNlYmFjayouICBJdCBpcyB1c2VmdWwgZm9yIGFsdGVybmF0ZSBmb3JtYXR0aW5nIG9mCi0gICBzdGFjayB0cmFjZXMuICBJZiAqbGltaXQqIGlzIG9taXR0ZWQgb3IgYGBOb25lYGAsIGFsbCBlbnRyaWVzIGFyZSBleHRyYWN0ZWQuICBBCi0gICAicHJlLXByb2Nlc3NlZCIgc3RhY2sgdHJhY2UgZW50cnkgaXMgYSA0LXR1cGxlICgqZmlsZW5hbWUqLCAqbGluZSBudW1iZXIqLAotICAgKmZ1bmN0aW9uIG5hbWUqLCAqdGV4dCopIHJlcHJlc2VudGluZyB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyB1c3VhbGx5IHByaW50ZWQKLSAgIGZvciBhIHN0YWNrIHRyYWNlLiAgVGhlICp0ZXh0KiBpcyBhIHN0cmluZyB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UKLSAgIHN0cmlwcGVkOyBpZiB0aGUgc291cmNlIGlzIG5vdCBhdmFpbGFibGUgaXQgaXMgYGBOb25lYGAuCisgICBSZXR1cm4gYSBsaXN0IG9mICJwcmUtcHJvY2Vzc2VkIiBzdGFjayB0cmFjZSBlbnRyaWVzIGV4dHJhY3RlZCBmcm9tIHRoZQorICAgdHJhY2ViYWNrIG9iamVjdCAqdGIqLiAgSXQgaXMgdXNlZnVsIGZvciBhbHRlcm5hdGUgZm9ybWF0dGluZyBvZgorICAgc3RhY2sgdHJhY2VzLiAgVGhlIG9wdGlvbmFsICpsaW1pdCogYXJndW1lbnQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yCisgICA6ZnVuYzpgcHJpbnRfdGJgLiAgQSAicHJlLXByb2Nlc3NlZCIgc3RhY2sgdHJhY2UgZW50cnkgaXMgYSA0LXR1cGxlCisgICAoKmZpbGVuYW1lKiwgKmxpbmUgbnVtYmVyKiwgKmZ1bmN0aW9uIG5hbWUqLCAqdGV4dCopIHJlcHJlc2VudGluZyB0aGUKKyAgIGluZm9ybWF0aW9uIHRoYXQgaXMgdXN1YWxseSBwcmludGVkIGZvciBhIHN0YWNrIHRyYWNlLiAgVGhlICp0ZXh0KiBpcyBhCisgICBzdHJpbmcgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHN0cmlwcGVkOyBpZiB0aGUgc291cmNlIGlzCisgICBub3QgYXZhaWxhYmxlIGl0IGlzIGBgTm9uZWBgLgogCiAKIC4uIGZ1bmN0aW9uOjogZXh0cmFjdF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUpCkBAIC04NSwzOSArMTAyLDQwIEBACiAgICBhcmd1bWVudHMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciA6ZnVuYzpgcHJpbnRfc3RhY2tgLgogCiAKLS4uIGZ1bmN0aW9uOjogZm9ybWF0X2xpc3QobGlzdCkKKy4uIGZ1bmN0aW9uOjogZm9ybWF0X2xpc3QoZXh0cmFjdGVkX2xpc3QpCiAKICAgIEdpdmVuIGEgbGlzdCBvZiB0dXBsZXMgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGV4dHJhY3RfdGJgIG9yCi0gICA6ZnVuYzpgZXh0cmFjdF9zdGFja2AsIHJldHVybiBhIGxpc3Qgb2Ygc3RyaW5ncyByZWFkeSBmb3IgcHJpbnRpbmcuICBFYWNoIHN0cmluZwotICAgaW4gdGhlIHJlc3VsdGluZyBsaXN0IGNvcnJlc3BvbmRzIHRvIHRoZSBpdGVtIHdpdGggdGhlIHNhbWUgaW5kZXggaW4gdGhlCi0gICBhcmd1bWVudCBsaXN0LiAgRWFjaCBzdHJpbmcgZW5kcyBpbiBhIG5ld2xpbmU7IHRoZSBzdHJpbmdzIG1heSBjb250YWluIGludGVybmFsCi0gICBuZXdsaW5lcyBhcyB3ZWxsLCBmb3IgdGhvc2UgaXRlbXMgd2hvc2Ugc291cmNlIHRleHQgbGluZSBpcyBub3QgYGBOb25lYGAuCisgICA6ZnVuYzpgZXh0cmFjdF9zdGFja2AsIHJldHVybiBhIGxpc3Qgb2Ygc3RyaW5ncyByZWFkeSBmb3IgcHJpbnRpbmcuIEVhY2gKKyAgIHN0cmluZyBpbiB0aGUgcmVzdWx0aW5nIGxpc3QgY29ycmVzcG9uZHMgdG8gdGhlIGl0ZW0gd2l0aCB0aGUgc2FtZSBpbmRleCBpbgorICAgdGhlIGFyZ3VtZW50IGxpc3QuICBFYWNoIHN0cmluZyBlbmRzIGluIGEgbmV3bGluZTsgdGhlIHN0cmluZ3MgbWF5IGNvbnRhaW4KKyAgIGludGVybmFsIG5ld2xpbmVzIGFzIHdlbGwsIGZvciB0aG9zZSBpdGVtcyB3aG9zZSBzb3VyY2UgdGV4dCBsaW5lIGlzIG5vdAorICAgYGBOb25lYGAuCiAKIAotLi4gZnVuY3Rpb246OiBmb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZSwgdmFsdWUpCisuLiBmdW5jdGlvbjo6IGZvcm1hdF9leGNlcHRpb25fb25seShldHlwZSwgdmFsdWUpCiAKLSAgIEZvcm1hdCB0aGUgZXhjZXB0aW9uIHBhcnQgb2YgYSB0cmFjZWJhY2suICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgZXhjZXB0aW9uIHR5cGUKLSAgIGFuZCB2YWx1ZSBzdWNoIGFzIGdpdmVuIGJ5IGBgc3lzLmxhc3RfdHlwZWBgIGFuZCBgYHN5cy5sYXN0X3ZhbHVlYGAuICBUaGUgcmV0dXJuCi0gICB2YWx1ZSBpcyBhIGxpc3Qgb2Ygc3RyaW5ncywgZWFjaCBlbmRpbmcgaW4gYSBuZXdsaW5lLiAgTm9ybWFsbHksIHRoZSBsaXN0Ci0gICBjb250YWlucyBhIHNpbmdsZSBzdHJpbmc7IGhvd2V2ZXIsIGZvciA6ZXhjOmBTeW50YXhFcnJvcmAgZXhjZXB0aW9ucywgaXQKLSAgIGNvbnRhaW5zIHNldmVyYWwgbGluZXMgdGhhdCAod2hlbiBwcmludGVkKSBkaXNwbGF5IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0Ci0gICB3aGVyZSB0aGUgc3ludGF4IGVycm9yIG9jY3VycmVkLiAgVGhlIG1lc3NhZ2UgaW5kaWNhdGluZyB3aGljaCBleGNlcHRpb24KLSAgIG9jY3VycmVkIGlzIHRoZSBhbHdheXMgbGFzdCBzdHJpbmcgaW4gdGhlIGxpc3QuCisgICBGb3JtYXQgdGhlIGV4Y2VwdGlvbiBwYXJ0IG9mIGEgdHJhY2ViYWNrLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIGV4Y2VwdGlvbgorICAgdHlwZSBhbmQgdmFsdWUgc3VjaCBhcyBnaXZlbiBieSBgYHN5cy5sYXN0X3R5cGVgYCBhbmQgYGBzeXMubGFzdF92YWx1ZWBgLgorICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGxpc3Qgb2Ygc3RyaW5ncywgZWFjaCBlbmRpbmcgaW4gYSBuZXdsaW5lLiAgTm9ybWFsbHksCisgICB0aGUgbGlzdCBjb250YWlucyBhIHNpbmdsZSBzdHJpbmc7IGhvd2V2ZXIsIGZvciA6ZXhjOmBTeW50YXhFcnJvcmAKKyAgIGV4Y2VwdGlvbnMsIGl0IGNvbnRhaW5zIHNldmVyYWwgbGluZXMgdGhhdCAod2hlbiBwcmludGVkKSBkaXNwbGF5IGRldGFpbGVkCisgICBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0aGUgc3ludGF4IGVycm9yIG9jY3VycmVkLiAgVGhlIG1lc3NhZ2UgaW5kaWNhdGluZworICAgd2hpY2ggZXhjZXB0aW9uIG9jY3VycmVkIGlzIHRoZSBhbHdheXMgbGFzdCBzdHJpbmcgaW4gdGhlIGxpc3QuCiAKIAotLi4gZnVuY3Rpb246OiBmb3JtYXRfZXhjZXB0aW9uKHR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9Tm9uZSwgY2hhaW49VHJ1ZSkKKy4uIGZ1bmN0aW9uOjogZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1Ob25lLCBjaGFpbj1UcnVlKQogCiAgICBGb3JtYXQgYSBzdGFjayB0cmFjZSBhbmQgdGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4gIFRoZSBhcmd1bWVudHMgIGhhdmUgdGhlCiAgICBzYW1lIG1lYW5pbmcgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnRzIHRvIDpmdW5jOmBwcmludF9leGNlcHRpb25gLiAgVGhlCi0gICByZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9mIHN0cmluZ3MsIGVhY2ggZW5kaW5nIGluIGEgbmV3bGluZSBhbmQgc29tZSBjb250YWluaW5nCi0gICBpbnRlcm5hbCBuZXdsaW5lcy4gIFdoZW4gdGhlc2UgbGluZXMgYXJlIGNvbmNhdGVuYXRlZCBhbmQgcHJpbnRlZCwgZXhhY3RseSB0aGUKLSAgIHNhbWUgdGV4dCBpcyBwcmludGVkIGFzIGRvZXMgOmZ1bmM6YHByaW50X2V4Y2VwdGlvbmAuCisgICByZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9mIHN0cmluZ3MsIGVhY2ggZW5kaW5nIGluIGEgbmV3bGluZSBhbmQgc29tZQorICAgY29udGFpbmluZyBpbnRlcm5hbCBuZXdsaW5lcy4gIFdoZW4gdGhlc2UgbGluZXMgYXJlIGNvbmNhdGVuYXRlZCBhbmQgcHJpbnRlZCwKKyAgIGV4YWN0bHkgdGhlIHNhbWUgdGV4dCBpcyBwcmludGVkIGFzIGRvZXMgOmZ1bmM6YHByaW50X2V4Y2VwdGlvbmAuCiAKIAogLi4gZnVuY3Rpb246OiBmb3JtYXRfZXhjKGxpbWl0PU5vbmUsIGNoYWluPVRydWUpCiAKLSAgIFRoaXMgaXMgbGlrZSBgYHByaW50X2V4YyhsaW1pdClgYCBidXQgcmV0dXJucyBhIHN0cmluZyBpbnN0ZWFkIG9mIHByaW50aW5nIHRvIGEKLSAgIGZpbGUuCisgICBUaGlzIGlzIGxpa2UgYGBwcmludF9leGMobGltaXQpYGAgYnV0IHJldHVybnMgYSBzdHJpbmcgaW5zdGVhZCBvZiBwcmludGluZyB0bworICAgYSBmaWxlLgogCiAKIC4uIGZ1bmN0aW9uOjogZm9ybWF0X3RiKHRiLCBsaW1pdD1Ob25lKQpAQCAtMTM2LDYgKzE1NCwxNjIgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKKy4uIGZ1bmN0aW9uOjogd2Fsa19zdGFjayhmKQorCisgICBXYWxrIGEgc3RhY2sgZm9sbG93aW5nIGBgZi5mX2JhY2tgYCBmcm9tIHRoZSBnaXZlbiBmcmFtZSwgeWllbGRpbmcgdGhlIGZyYW1lCisgICBhbmQgbGluZSBudW1iZXIgZm9yIGVhY2ggZnJhbWUuIElmICpmKiBpcyBgYE5vbmVgYCwgdGhlIGN1cnJlbnQgc3RhY2sgaXMKKyAgIHVzZWQuIFRoaXMgaGVscGVyIGlzIHVzZWQgd2l0aCA6bWV0aDpgU3RhY2tTdW1tYXJ5LmV4dHJhY3RgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworLi4gZnVuY3Rpb246OiB3YWxrX3RiKHRiKQorCisgICBXYWxrIGEgdHJhY2ViYWNrIGZvbGxvd2luZyBgYHRiX25leHRgYCB5aWVsZGluZyB0aGUgZnJhbWUgYW5kIGxpbmUgbnVtYmVyCisgICBmb3IgZWFjaCBmcmFtZS4gVGhpcyBoZWxwZXIgaXMgdXNlZCB3aXRoIDptZXRoOmBTdGFja1N1bW1hcnkuZXh0cmFjdGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCitUaGUgbW9kdWxlIGFsc28gZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CisKKzpjbGFzczpgVHJhY2ViYWNrRXhjZXB0aW9uYCBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworOmNsYXNzOmBUcmFjZWJhY2tFeGNlcHRpb25gIG9iamVjdHMgYXJlIGNyZWF0ZWQgZnJvbSBhY3R1YWwgZXhjZXB0aW9ucyB0bworY2FwdHVyZSBkYXRhIGZvciBsYXRlciBwcmludGluZyBpbiBhIGxpZ2h0d2VpZ2h0IGZhc2hpb24uCisKKy4uIGNsYXNzOjogVHJhY2ViYWNrRXhjZXB0aW9uKGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190cmFjZWJhY2ssICosIGxpbWl0PU5vbmUsIGxvb2t1cF9saW5lcz1UcnVlLCBjYXB0dXJlX2xvY2Fscz1GYWxzZSkKKworICAgQ2FwdHVyZSBhbiBleGNlcHRpb24gZm9yIGxhdGVyIHJlbmRlcmluZy4gKmxpbWl0KiwgKmxvb2t1cF9saW5lcyogYW5kCisgICAqY2FwdHVyZV9sb2NhbHMqIGFyZSBhcyBmb3IgdGhlIDpjbGFzczpgU3RhY2tTdW1tYXJ5YCBjbGFzcy4KKworICAgTm90ZSB0aGF0IHdoZW4gbG9jYWxzIGFyZSBjYXB0dXJlZCwgdGhleSBhcmUgYWxzbyBzaG93biBpbiB0aGUgdHJhY2ViYWNrLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX2NhdXNlX18KKworICAgICAgQSA6Y2xhc3M6YFRyYWNlYmFja0V4Y2VwdGlvbmAgb2YgdGhlIG9yaWdpbmFsIGBgX19jYXVzZV9fYGAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fY29udGV4dF9fCisKKyAgICAgIEEgOmNsYXNzOmBUcmFjZWJhY2tFeGNlcHRpb25gIG9mIHRoZSBvcmlnaW5hbCBgYF9fY29udGV4dF9fYGAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fc3VwcHJlc3NfY29udGV4dF9fCisKKyAgICAgIFRoZSBgYF9fc3VwcHJlc3NfY29udGV4dF9fYGAgdmFsdWUgZnJvbSB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdGFjaworCisgICAgICBBIDpjbGFzczpgU3RhY2tTdW1tYXJ5YCByZXByZXNlbnRpbmcgdGhlIHRyYWNlYmFjay4KKworICAgLi4gYXR0cmlidXRlOjogZXhjX3R5cGUKKworICAgICAgVGhlIGNsYXNzIG9mIHRoZSBvcmlnaW5hbCB0cmFjZWJhY2suCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lCisKKyAgICAgIEZvciBzeW50YXggZXJyb3JzIC0gdGhlIGZpbGUgbmFtZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxpbmVubworCisgICAgICBGb3Igc3ludGF4IGVycm9ycyAtIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRleHQKKworICAgICAgRm9yIHN5bnRheCBlcnJvcnMgLSB0aGUgdGV4dCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG9mZnNldAorCisgICAgICBGb3Igc3ludGF4IGVycm9ycyAtIHRoZSBvZmZzZXQgaW50byB0aGUgdGV4dCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG1zZworCisgICAgICBGb3Igc3ludGF4IGVycm9ycyAtIHRoZSBjb21waWxlciBlcnJvciBtZXNzYWdlLgorCisgICAuLiBjbGFzc21ldGhvZDo6IGZyb21fZXhjZXB0aW9uKGV4YywgKiwgbGltaXQ9Tm9uZSwgbG9va3VwX2xpbmVzPVRydWUsIGNhcHR1cmVfbG9jYWxzPUZhbHNlKQorCisgICAgICBDYXB0dXJlIGFuIGV4Y2VwdGlvbiBmb3IgbGF0ZXIgcmVuZGVyaW5nLiAqbGltaXQqLCAqbG9va3VwX2xpbmVzKiBhbmQKKyAgICAgICpjYXB0dXJlX2xvY2FscyogYXJlIGFzIGZvciB0aGUgOmNsYXNzOmBTdGFja1N1bW1hcnlgIGNsYXNzLgorCisgICAgICBOb3RlIHRoYXQgd2hlbiBsb2NhbHMgYXJlIGNhcHR1cmVkLCB0aGV5IGFyZSBhbHNvIHNob3duIGluIHRoZSB0cmFjZWJhY2suCisKKyAgIC4uIG1ldGhvZDo6IGZvcm1hdCgqLCBjaGFpbj1UcnVlKQorCisgICAgICBGb3JtYXQgdGhlIGV4Y2VwdGlvbi4KKworICAgICAgSWYgKmNoYWluKiBpcyBub3QgYGBUcnVlYGAsIGBgX19jYXVzZV9fYGAgYW5kIGBgX19jb250ZXh0X19gYCB3aWxsIG5vdAorICAgICAgYmUgZm9ybWF0dGVkLgorCisgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgZ2VuZXJhdG9yIG9mIHN0cmluZ3MsIGVhY2ggZW5kaW5nIGluIGEgbmV3bGluZSBhbmQKKyAgICAgIHNvbWUgY29udGFpbmluZyBpbnRlcm5hbCBuZXdsaW5lcy4gOmZ1bmM6YH50cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uYAorICAgICAgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGlzIG1ldGhvZCB3aGljaCBqdXN0IHByaW50cyB0aGUgbGluZXMgdG8gYSBmaWxlLgorCisgICAgICBUaGUgbWVzc2FnZSBpbmRpY2F0aW5nIHdoaWNoIGV4Y2VwdGlvbiBvY2N1cnJlZCBpcyBhbHdheXMgdGhlIGxhc3QKKyAgICAgIHN0cmluZyBpbiB0aGUgb3V0cHV0LgorCisgICAuLiBtZXRob2Q6OiAgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KCkKKworICAgICAgRm9ybWF0IHRoZSBleGNlcHRpb24gcGFydCBvZiB0aGUgdHJhY2ViYWNrLgorCisgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgZ2VuZXJhdG9yIG9mIHN0cmluZ3MsIGVhY2ggZW5kaW5nIGluIGEgbmV3bGluZS4KKworICAgICAgTm9ybWFsbHksIHRoZSBnZW5lcmF0b3IgZW1pdHMgYSBzaW5nbGUgc3RyaW5nOyBob3dldmVyLCBmb3IKKyAgICAgIDpleGM6YFN5bnRheEVycm9yYCBleGNlcHRpb25zLCBpdCBlbWl0cyBzZXZlcmFsIGxpbmVzIHRoYXQgKHdoZW4KKyAgICAgIHByaW50ZWQpIGRpc3BsYXkgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIHN5bnRheAorICAgICAgZXJyb3Igb2NjdXJyZWQuCisKKyAgICAgIFRoZSBtZXNzYWdlIGluZGljYXRpbmcgd2hpY2ggZXhjZXB0aW9uIG9jY3VycmVkIGlzIGFsd2F5cyB0aGUgbGFzdAorICAgICAgc3RyaW5nIGluIHRoZSBvdXRwdXQuCisKKworOmNsYXNzOmBTdGFja1N1bW1hcnlgIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCis6Y2xhc3M6YFN0YWNrU3VtbWFyeWAgb2JqZWN0cyByZXByZXNlbnQgYSBjYWxsIHN0YWNrIHJlYWR5IGZvciBmb3JtYXR0aW5nLgorCisuLiBjbGFzczo6IFN0YWNrU3VtbWFyeQorCisgICAuLiBjbGFzc21ldGhvZDo6IGV4dHJhY3QoZnJhbWVfZ2VuLCAqLCBsaW1pdD1Ob25lLCBsb29rdXBfbGluZXM9VHJ1ZSwgY2FwdHVyZV9sb2NhbHM9RmFsc2UpCisKKyAgICAgIENvbnN0cnVjdCBhIDpjbGFzczpgU3RhY2tTdW1tYXJ5YCBvYmplY3QgZnJvbSBhIGZyYW1lIGdlbmVyYXRvciAoc3VjaCBhcworICAgICAgaXMgcmV0dXJuZWQgYnkgOmZ1bmM6YH50cmFjZWJhY2sud2Fsa19zdGFja2Agb3IKKyAgICAgIDpmdW5jOmB+dHJhY2ViYWNrLndhbGtfdGJgKS4KKworICAgICAgSWYgKmxpbWl0KiBpcyBzdXBwbGllZCwgb25seSB0aGlzIG1hbnkgZnJhbWVzIGFyZSB0YWtlbiBmcm9tICpmcmFtZV9nZW4qLgorICAgICAgSWYgKmxvb2t1cF9saW5lcyogaXMgYGBGYWxzZWBgLCB0aGUgcmV0dXJuZWQgOmNsYXNzOmBGcmFtZVN1bW1hcnlgCisgICAgICBvYmplY3RzIHdpbGwgbm90IGhhdmUgcmVhZCB0aGVpciBsaW5lcyBpbiB5ZXQsIG1ha2luZyB0aGUgY29zdCBvZgorICAgICAgY3JlYXRpbmcgdGhlIDpjbGFzczpgU3RhY2tTdW1tYXJ5YCBjaGVhcGVyICh3aGljaCBtYXkgYmUgdmFsdWFibGUgaWYgaXQKKyAgICAgIG1heSBub3QgYWN0dWFsbHkgZ2V0IGZvcm1hdHRlZCkuIElmICpjYXB0dXJlX2xvY2FscyogaXMgYGBUcnVlYGAgdGhlCisgICAgICBsb2NhbCB2YXJpYWJsZXMgaW4gZWFjaCA6Y2xhc3M6YEZyYW1lU3VtbWFyeWAgYXJlIGNhcHR1cmVkIGFzIG9iamVjdAorICAgICAgcmVwcmVzZW50YXRpb25zLgorCisgICAuLiBjbGFzc21ldGhvZDo6IGZyb21fbGlzdChhX2xpc3QpCisKKyAgICAgIENvbnN0cnVjdCBhIDpjbGFzczpgU3RhY2tTdW1tYXJ5YCBvYmplY3QgZnJvbSBhIHN1cHBsaWVkIG9sZC1zdHlsZSBsaXN0CisgICAgICBvZiB0dXBsZXMuIEVhY2ggdHVwbGUgc2hvdWxkIGJlIGEgNC10dXBsZSB3aXRoIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsCisgICAgICBsaW5lIGFzIHRoZSBlbGVtZW50cy4KKworCis6Y2xhc3M6YEZyYW1lU3VtbWFyeWAgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKzpjbGFzczpgRnJhbWVTdW1tYXJ5YCBvYmplY3RzIHJlcHJlc2VudCBhIHNpbmdsZSBmcmFtZSBpbiBhIHRyYWNlYmFjay4KKworLi4gY2xhc3M6OiBGcmFtZVN1bW1hcnkoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbG9va3VwX2xpbmU9VHJ1ZSwgbG9jYWxzPU5vbmUsIGxpbmU9Tm9uZSkKKworICAgUmVwcmVzZW50IGEgc2luZ2xlIGZyYW1lIGluIHRoZSB0cmFjZWJhY2sgb3Igc3RhY2sgdGhhdCBpcyBiZWluZyBmb3JtYXR0ZWQKKyAgIG9yIHByaW50ZWQuIEl0IG1heSBvcHRpb25hbGx5IGhhdmUgYSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSBmcmFtZXMKKyAgIGxvY2FscyBpbmNsdWRlZCBpbiBpdC4gSWYgKmxvb2t1cF9saW5lKiBpcyBgYEZhbHNlYGAsIHRoZSBzb3VyY2UgY29kZSBpcyBub3QKKyAgIGxvb2tlZCB1cCB1bnRpbCB0aGUgOmNsYXNzOmBGcmFtZVN1bW1hcnlgIGhhcyB0aGUgOmF0dHI6YH5GcmFtZVN1bW1hcnkubGluZWAKKyAgIGF0dHJpYnV0ZSBhY2Nlc3NlZCAod2hpY2ggYWxzbyBoYXBwZW5zIHdoZW4gY2FzdGluZyBpdCB0byBhIHR1cGxlKS4KKyAgIDphdHRyOmB+RnJhbWVTdW1tYXJ5LmxpbmVgIG1heSBiZSBkaXJlY3RseSBwcm92aWRlZCwgYW5kIHdpbGwgcHJldmVudCBsaW5lCisgICBsb29rdXBzIGhhcHBlbmluZyBhdCBhbGwuICpsb2NhbHMqIGlzIGFuIG9wdGlvbmFsIGxvY2FsIHZhcmlhYmxlCisgICBkaWN0aW9uYXJ5LCBhbmQgaWYgc3VwcGxpZWQgdGhlIHZhcmlhYmxlIHJlcHJlc2VudGF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZQorICAgc3VtbWFyeSBmb3IgbGF0ZXIgZGlzcGxheS4KIAogLi4gX3RyYWNlYmFjay1leGFtcGxlOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QgYi9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QKaW5kZXggY2Q2MmU1NS4uM2EwYjFlMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RyYWNlbWFsbG9jLnJzdApAQCAtNiw2ICs2LDEwIEBACiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi90cmFjZW1hbGxvYy5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBhIGRlYnVnIHRvb2wgdG8gdHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkKIFB5dGhvbi4gSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKIApAQCAtMzYzLDcgKzM2Nyw3IEBACiAgICBGaWx0ZXIgb24gdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MuCiAKICAgIFNlZSB0aGUgOmZ1bmM6YGZubWF0Y2guZm5tYXRjaGAgZnVuY3Rpb24gZm9yIHRoZSBzeW50YXggb2YKLSAgICpmaWxlbmFtZV9wYXR0ZXJuKi4gVGhlIGBgJy5weWMnYGAgYW5kIGBgJy5weW8nYGAgZmlsZSBleHRlbnNpb25zIGFyZQorICAgKmZpbGVuYW1lX3BhdHRlcm4qLiBUaGUgYGAnLnB5YydgYCBmaWxlIGV4dGVuc2lvbiBpcwogICAgcmVwbGFjZWQgd2l0aCBgYCcucHknYGAuCiAKICAgIEV4YW1wbGVzOgpAQCAtMzc0LDYgKzM3OCwxMCBAQAogICAgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlCiAgICAqIGBgRmlsdGVyKEZhbHNlLCAiPHVua25vd24+IilgYCBleGNsdWRlcyBlbXB0eSB0cmFjZWJhY2tzCiAKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIFRoZSBgYCcucHlvJ2BgIGZpbGUgZXh0ZW5zaW9uIGlzIG5vIGxvbmdlciByZXBsYWNlZCB3aXRoIGBgJy5weSdgYC4KKwogICAgLi4gYXR0cmlidXRlOjogaW5jbHVzaXZlCiAKICAgICAgIElmICppbmNsdXNpdmUqIGlzIGBgVHJ1ZWBgIChpbmNsdWRlKSwgb25seSB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZApAQCAtNjE2LDcgKzYyNCw3IEBACiAgICAgICAqbGltaXQqIGlzIHNldCwgb25seSBmb3JtYXQgdGhlICpsaW1pdCogbW9zdCByZWNlbnQgZnJhbWVzLgogCiAgICAgICBTaW1pbGFyIHRvIHRoZSA6ZnVuYzpgdHJhY2ViYWNrLmZvcm1hdF90YmAgZnVuY3Rpb24sIGV4Y2VwdCB0aGF0Ci0gICAgICA6bWV0aDpgZm9ybWF0YCBkb2VzIG5vdCBpbmNsdWRlIG5ld2xpbmVzLgorICAgICAgOm1ldGg6YC5mb3JtYXRgIGRvZXMgbm90IGluY2x1ZGUgbmV3bGluZXMuCiAKICAgICAgIEV4YW1wbGU6OgogCkBAIC02MzEsNCArNjM5LDMgQEAKICAgICAgICAgICAgICAgb2JqID0gT2JqZWN0KCkKICAgICAgICAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDEyCiAgICAgICAgICAgICAgIHRiID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2soZigpKQotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dHkucnN0IGIvRG9jL2xpYnJhcnkvdHR5LnJzdAppbmRleCBkMTNjNmY5Li5iMzBiYzNjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90dHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3R0eS5yc3QKQEAgLTQsOSArNCwxMyBAQAogLi4gbW9kdWxlOjogdHR5CiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogVXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBwZXJmb3JtIGNvbW1vbiB0ZXJtaW5hbCBjb250cm9sIG9wZXJhdGlvbnMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IFN0ZWVuIEx1bWhvbHQKIC4uIHNlY3Rpb25hdXRob3I6OiBNb3NoZSBaYWRrYSA8bW9zaGV6QHphZGthLnNpdGUuY28uaWw+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3R0eS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHR0eWAgbW9kdWxlIGRlZmluZXMgZnVuY3Rpb25zIGZvciBwdXR0aW5nIHRoZSB0dHkgaW50byBjYnJlYWsgYW5kIHJhdwogbW9kZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLmRpYSBiL0RvYy9saWJyYXJ5L3R1bGlwX2Nvcm8uZGlhCmluZGV4IGVjY2Y0ZmEuLjcwYTMzZTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3R1bGlwX2Nvcm8uZGlhCisrKyBiL0RvYy9saWJyYXJ5L3R1bGlwX2Nvcm8uZGlhCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3R1bGlwX2Nvcm8ucG5nIGIvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5wbmcKaW5kZXggNjViNjk1MS4uMzZjZWQ4ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5wbmcKKysrIGIvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHVydGxlLnJzdCBiL0RvYy9saWJyYXJ5L3R1cnRsZS5yc3QKaW5kZXggZWZlNWM1NC4uZTRhODJlYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHVydGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90dXJ0bGUucnN0CkBAIC00LDEzICs0LDE4IEBACiAKIC4uIG1vZHVsZTo6IHR1cnRsZQogICAgOnN5bm9wc2lzOiBBbiBlZHVjYXRpb25hbCBmcmFtZXdvcmsgZm9yIHNpbXBsZSBncmFwaGljcyBhcHBsaWNhdGlvbnMKKwogLi4gc2VjdGlvbmF1dGhvcjo6IEdyZWdvciBMaW5nbCA8Z3JlZ29yLmxpbmdsQGFvbi5hdD4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdHVydGxlLnB5YAorCiAuLiB0ZXN0c2V0dXA6OiBkZWZhdWx0CiAKICAgIGZyb20gdHVydGxlIGltcG9ydCAqCiAgICB0dXJ0bGUgPSBUdXJ0bGUoKQogCistLS0tLS0tLS0tLS0tLQorCiBJbnRyb2R1Y3Rpb24KID09PT09PT09PT09PQogCkBAIC0xODc5LDcgKzE4ODQsNyBAQAogCiAgICAgICA+Pj4gY3YgPSBzY3JlZW4uZ2V0Y2FudmFzKCkKICAgICAgID4+PiBjdgotICAgICAgPHR1cnRsZS5TY3JvbGxlZENhbnZhcyBvYmplY3QgYXQgLi4uPgorICAgICAgPHR1cnRsZS5TY3JvbGxlZENhbnZhcyBvYmplY3QgLi4uPgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0c2hhcGVzKCkKQEAgLTIzNTEsNiArMjM1Niw5IEBACiB8ICAgICAgICAgICAgICAgIHwgcGFpcndpc2UgaW4gb3Bwb3NpdGUgICAgICAgICB8IHNoYXBlc2l6ZSwgdGlsdCwgICAgICB8CiB8ICAgICAgICAgICAgICAgIHwgZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICB8IGdldF9zaGFwZXBvbHksIHVwZGF0ZSB8CiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHNvcnRpbmdfYW5pbWF0ZXwgdmlzdWFsIGRlbW9uc3RyYXRpb24gb2YgICAgICB8IHNpbXBsZSBhbGlnbm1lbnQsICAgICB8Cit8ICAgICAgICAgICAgICAgIHwgZGlmZmVyZW50IHNvcnRpbmcgbWV0aG9kcyAgICB8IHJhbmRvbWl6YXRpb24gICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHRyZWUgICAgICAgICAgIHwgYSAoZ3JhcGhpY2FsKSBicmVhZHRoICAgICAgICB8IDpmdW5jOmBjbG9uZWAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgIHwgZmlyc3QgdHJlZSAodXNpbmcgZ2VuZXJhdG9ycyl8ICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS90eXBlcy5yc3QKaW5kZXggYWJkYjkzOS4uMTE4YmM0YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdApAQCAtODYsOCArODYsMTYgQEAKIAogLi4gZGF0YTo6IEdlbmVyYXRvclR5cGUKIAotICAgVGhlIHR5cGUgb2YgOnRlcm06YGdlbmVyYXRvcmAtaXRlcmF0b3Igb2JqZWN0cywgcHJvZHVjZWQgYnkgY2FsbGluZyBhCi0gICBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICBUaGUgdHlwZSBvZiA6dGVybTpgZ2VuZXJhdG9yYC1pdGVyYXRvciBvYmplY3RzLCBjcmVhdGVkIGJ5CisgICBnZW5lcmF0b3IgZnVuY3Rpb25zLgorCisKKy4uIGRhdGE6OiBDb3JvdXRpbmVUeXBlCisKKyAgIFRoZSB0eXBlIG9mIDp0ZXJtOmBjb3JvdXRpbmVgIG9iamVjdHMsIGNyZWF0ZWQgYnkKKyAgIDprZXl3b3JkOmBhc3luYyBkZWZgIGZ1bmN0aW9ucy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CiAKIAogLi4gZGF0YTo6IENvZGVUeXBlCkBAIC0xMTUsNiArMTIzLDEwIEBACiAgICBUaGUgdHlwZSBvZiA6dGVybTpgbW9kdWxlcyA8bW9kdWxlPmAuIENvbnN0cnVjdG9yIHRha2VzIHRoZSBuYW1lIG9mIHRoZQogICAgbW9kdWxlIHRvIGJlIGNyZWF0ZWQgYW5kIG9wdGlvbmFsbHkgaXRzIDp0ZXJtOmBkb2NzdHJpbmdgLgogCisgICAuLiBub3RlOjoKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zyb21fc3BlY2AgdG8gY3JlYXRlIGEgbmV3IG1vZHVsZSBpZiB5b3UKKyAgICAgIHdpc2ggdG8gc2V0IHRoZSB2YXJpb3VzIGltcG9ydC1jb250cm9sbGVkIGF0dHJpYnV0ZXMuCisKICAgIC4uIGF0dHJpYnV0ZTo6IF9fZG9jX18KIAogICAgICAgVGhlIDp0ZXJtOmBkb2NzdHJpbmdgIG9mIHRoZSBtb2R1bGUuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgpAQCAtMjQwLDEwICsyNTIsMTIgQEAKICAgICAgICBjbGFzcyBTaW1wbGVOYW1lc3BhY2U6CiAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShrd2FyZ3MpCisKICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAgICAgICAga2V5cyA9IHNvcnRlZChzZWxmLl9fZGljdF9fKQogICAgICAgICAgICAgICAgaXRlbXMgPSAoInt9PXshcn0iLmZvcm1hdChrLCBzZWxmLl9fZGljdF9fW2tdKSBmb3IgayBpbiBrZXlzKQogICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLCAiLCAiLmpvaW4oaXRlbXMpKQorCiAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KIApAQCAtMjY3LDMgKzI4MSwyNSBAQAogICAgYXR0cmlidXRlcyBvbiB0aGUgY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lIChzZWUgRW51bSBmb3IgYW4gZXhhbXBsZSkuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKK0Nvcm91dGluZSBVdGlsaXR5IEZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogY29yb3V0aW5lKGdlbl9mdW5jKQorCisgICBUaGlzIGZ1bmN0aW9uIHRyYW5zZm9ybXMgYSA6dGVybTpgZ2VuZXJhdG9yYCBmdW5jdGlvbiBpbnRvIGEKKyAgIDp0ZXJtOmBjb3JvdXRpbmUgZnVuY3Rpb25gIHdoaWNoIHJldHVybnMgYSBnZW5lcmF0b3ItYmFzZWQgY29yb3V0aW5lLgorICAgVGhlIGdlbmVyYXRvci1iYXNlZCBjb3JvdXRpbmUgaXMgc3RpbGwgYSA6dGVybTpgZ2VuZXJhdG9yIGl0ZXJhdG9yYCwKKyAgIGJ1dCBpcyBhbHNvIGNvbnNpZGVyZWQgdG8gYmUgYSA6dGVybTpgY29yb3V0aW5lYCBvYmplY3QgYW5kIGlzCisgICA6dGVybTpgYXdhaXRhYmxlYC4gIEhvd2V2ZXIsIGl0IG1heSBub3QgbmVjZXNzYXJpbHkgaW1wbGVtZW50CisgICB0aGUgOm1ldGg6YF9fYXdhaXRfX2AgbWV0aG9kLgorCisgICBJZiAqZ2VuX2Z1bmMqIGlzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIG1vZGlmaWVkIGluLXBsYWNlLgorCisgICBJZiAqZ2VuX2Z1bmMqIGlzIG5vdCBhIGdlbmVyYXRvciBmdW5jdGlvbiwgaXQgd2lsbCBiZSB3cmFwcGVkLiBJZiBpdAorICAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YGNvbGxlY3Rpb25zLmFiYy5HZW5lcmF0b3JgLCB0aGUgaW5zdGFuY2UKKyAgIHdpbGwgYmUgd3JhcHBlZCBpbiBhbiAqYXdhaXRhYmxlKiBwcm94eSBvYmplY3QuICBBbGwgb3RoZXIgdHlwZXMKKyAgIG9mIG9iamVjdHMgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90eXBpbmcucnN0IGIvRG9jL2xpYnJhcnkvdHlwaW5nLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzk3YWVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvdHlwaW5nLnJzdApAQCAtMCwwICsxLDYyOCBAQAorOm1vZDpgdHlwaW5nYCAtLS0gU3VwcG9ydCBmb3IgdHlwZSBoaW50cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiB0eXBpbmcKKyAgIDpzeW5vcHNpczogU3VwcG9ydCBmb3IgdHlwZSBoaW50cyAoc2VlIFBFUCA0ODQpLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdHlwaW5nLnB5YAorCistLS0tLS0tLS0tLS0tLQorCitUaGlzIG1vZHVsZSBzdXBwb3J0cyB0eXBlIGhpbnRzIGFzIHNwZWNpZmllZCBieSA6cGVwOmA0ODRgLiAgVGhlIG1vc3QKK2Z1bmRhbWVudGFsIHN1cHBvcnQgY29uc2lzdHMgb2YgdGhlIHR5cGUgOmNsYXNzOmBBbnlgLCA6Y2xhc3M6YFVuaW9uYCwKKzpjbGFzczpgVHVwbGVgLCA6Y2xhc3M6YENhbGxhYmxlYCwgOmNsYXNzOmBUeXBlVmFyYCwgYW5kCis6Y2xhc3M6YEdlbmVyaWNgLiAgRm9yIGZ1bGwgc3BlY2lmaWNhdGlvbiBwbGVhc2Ugc2VlIDpwZXA6YDQ4NGAuICBGb3IKK2Egc2ltcGxpZmllZCBpbnRyb2R1Y3Rpb24gdG8gdHlwZSBoaW50cyBzZWUgOnBlcDpgNDgzYC4KKworCitUaGUgZnVuY3Rpb24gYmVsb3cgdGFrZXMgYW5kIHJldHVybnMgYSBzdHJpbmcgYW5kIGlzIGFubm90YXRlZCBhcyBmb2xsb3dzOjoKKworICAgZGVmIGdyZWV0aW5nKG5hbWU6IHN0cikgLT4gc3RyOgorICAgICAgIHJldHVybiAnSGVsbG8gJyArIG5hbWUKKworSW4gdGhlIGZ1bmN0aW9uIGBgZ3JlZXRpbmdgYCwgdGhlIGFyZ3VtZW50IGBgbmFtZWBgIGlzIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUKKzpjbGFzczpgc3RyYCBhbmQgdGhlIHJldHVybiB0eXBlIDpjbGFzczpgc3RyYC4gU3VidHlwZXMgYXJlIGFjY2VwdGVkIGFzCithcmd1bWVudHMuCisKK1R5cGUgYWxpYXNlcworLS0tLS0tLS0tLS0tCisKK0EgdHlwZSBhbGlhcyBpcyBkZWZpbmVkIGJ5IGFzc2lnbmluZyB0aGUgdHlwZSB0byB0aGUgYWxpYXMuIEluIHRoaXMgZXhhbXBsZSwKK2BgVmVjdG9yYGAgYW5kIGBgTGlzdFtmbG9hdF1gYCB3aWxsIGJlIHRyZWF0ZWQgYXMgaW50ZXJjaGFuZ2VhYmxlIHN5bm9ueW1zOjoKKworICAgZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKKyAgIFZlY3RvciA9IExpc3RbZmxvYXRdCisKKyAgIGRlZiBzY2FsZShzY2FsYXI6IGZsb2F0LCB2ZWN0b3I6IFZlY3RvcikgLT4gVmVjdG9yOgorICAgICAgIHJldHVybiBbc2NhbGFyICogbnVtIGZvciBudW0gaW4gdmVjdG9yXQorCisgICAjIHR5cGVjaGVja3M7IGEgbGlzdCBvZiBmbG9hdHMgcXVhbGlmaWVzIGFzIGEgVmVjdG9yLgorICAgbmV3X3ZlY3RvciA9IHNjYWxlKDIuMCwgWzEuMCwgLTQuMiwgNS40XSkKKworVHlwZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNpbXBsaWZ5aW5nIGNvbXBsZXggdHlwZSBzaWduYXR1cmVzLiBGb3IgZXhhbXBsZTo6CisKKyAgIGZyb20gdHlwaW5nIGltcG9ydCBEaWN0LCBUdXBsZSwgTGlzdAorCisgICBDb25uZWN0aW9uT3B0aW9ucyA9IERpY3Rbc3RyLCBzdHJdCisgICBBZGRyZXNzID0gVHVwbGVbc3RyLCBpbnRdCisgICBTZXJ2ZXIgPSBUdXBsZVtBZGRyZXNzLCBDb25uZWN0aW9uT3B0aW9uc10KKworICAgZGVmIGJyb2FkY2FzdF9tZXNzYWdlKG1lc3NhZ2U6IHN0ciwgc2VydmVyczogTGlzdFtTZXJ2ZXJdKSAtPiBOb25lOgorICAgICAgIC4uLgorCisgICAjIFRoZSBzdGF0aWMgdHlwZSBjaGVja2VyIHdpbGwgdHJlYXQgdGhlIHByZXZpb3VzIHR5cGUgc2lnbmF0dXJlIGFzCisgICAjIGJlaW5nIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGlzIG9uZS4KKyAgIGRlZiBicm9hZGNhc3RfbWVzc2FnZSgKKyAgICAgICAgICAgbWVzc2FnZTogc3RyLAorICAgICAgICAgICBzZXJ2ZXJzOiBMaXN0W1R1cGxlW1R1cGxlW3N0ciwgaW50XSwgRGljdFtzdHIsIHN0cl1dXSkgLT4gTm9uZToKKyAgICAgICAuLi4KKworTmV3VHlwZQorLS0tLS0tLQorCitVc2UgdGhlIGBgTmV3VHlwZWBgIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgZGlzdGluY3QgdHlwZXM6OgorCisgICBmcm9tIHR5cGluZyBpbXBvcnQgTmV3VHlwZQorCisgICBVc2VySWQgPSBOZXdUeXBlKCdVc2VySWQnLCBpbnQpCisgICBzb21lX2lkID0gVXNlcklkKDUyNDMxMykKKworVGhlIHN0YXRpYyB0eXBlIGNoZWNrZXIgd2lsbCB0cmVhdCB0aGUgbmV3IHR5cGUgYXMgaWYgaXQgd2VyZSBhIHN1YmNsYXNzCitvZiB0aGUgb3JpZ2luYWwgdHlwZS4gVGhpcyBpcyB1c2VmdWwgaW4gaGVscGluZyBjYXRjaCBsb2dpY2FsIGVycm9yczo6CisKKyAgIGRlZiBnZXRfdXNlcl9uYW1lKHVzZXJfaWQ6IFVzZXJJZCkgLT4gc3RyOgorICAgICAgIC4uLgorCisgICAjIHR5cGVjaGVja3MKKyAgIHVzZXJfYSA9IGdldF91c2VyX25hbWUoVXNlcklkKDQyMzUxKSkKKworICAgIyBkb2VzIG5vdCB0eXBlY2hlY2s7IGFuIGludCBpcyBub3QgYSBVc2VySWQKKyAgIHVzZXJfYiA9IGdldF91c2VyX25hbWUoLTEpCisKK1lvdSBtYXkgc3RpbGwgcGVyZm9ybSBhbGwgYGBpbnRgYCBvcGVyYXRpb25zIG9uIGEgdmFyaWFibGUgb2YgdHlwZSBgYFVzZXJJZGBgLAorYnV0IHRoZSByZXN1bHQgd2lsbCBhbHdheXMgYmUgb2YgdHlwZSBgYGludGBgLiBUaGlzIGxldHMgeW91IHBhc3MgaW4gYQorYGBVc2VySWRgYCB3aGVyZXZlciBhbiBgYGludGBgIG1pZ2h0IGJlIGV4cGVjdGVkLCBidXQgd2lsbCBwcmV2ZW50IHlvdSBmcm9tCithY2NpZGVudGFsbHkgY3JlYXRpbmcgYSBgYFVzZXJJZGBgIGluIGFuIGludmFsaWQgd2F5OjoKKworICAgIyAnb3V0cHV0JyBpcyBvZiB0eXBlICdpbnQnLCBub3QgJ1VzZXJJZCcKKyAgIG91dHB1dCA9IFVzZXJJZCgyMzQxMykgKyBVc2VySWQoNTQzNDEpCisKK05vdGUgdGhhdCB0aGVzZSBjaGVja3MgYXJlIGVuZm9yY2VkIG9ubHkgYnkgdGhlIHN0YXRpYyB0eXBlIGNoZWNrZXIuIEF0IHJ1bnRpbWUKK3RoZSBzdGF0ZW1lbnQgYGBEZXJpdmVkID0gTmV3VHlwZSgnRGVyaXZlZCcsIEJhc2UpYGAgd2lsbCBtYWtlIGBgRGVyaXZlZGBgIGEKK2Z1bmN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcmV0dXJucyB3aGF0ZXZlciBwYXJhbWV0ZXIgeW91IHBhc3MgaXQuIFRoYXQgbWVhbnMKK3RoZSBleHByZXNzaW9uIGBgRGVyaXZlZChzb21lX3ZhbHVlKWBgIGRvZXMgbm90IGNyZWF0ZSBhIG5ldyBjbGFzcyBvciBpbnRyb2R1Y2UKK2FueSBvdmVyaGVhZCBiZXlvbmQgdGhhdCBvZiBhIHJlZ3VsYXIgZnVuY3Rpb24gY2FsbC4KKworTW9yZSBwcmVjaXNlbHksIHRoZSBleHByZXNzaW9uIGBgc29tZV92YWx1ZSBpcyBEZXJpdmVkKHNvbWVfdmFsdWUpYGAgaXMgYWx3YXlzCit0cnVlIGF0IHJ1bnRpbWUuCisKK1RoaXMgYWxzbyBtZWFucyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYSBzdWJ0eXBlIG9mIGBgRGVyaXZlZGBgCitzaW5jZSBpdCBpcyBhbiBpZGVudGl0eSBmdW5jdGlvbiBhdCBydW50aW1lLCBub3QgYW4gYWN0dWFsIHR5cGUuIFNpbWlsYXJseSwgaXQKK2lzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYW5vdGhlciBgYE5ld1R5cGVgYCBiYXNlZCBvbiBhIGBgRGVyaXZlZGBgIHR5cGU6OgorCisgICBmcm9tIHR5cGluZyBpbXBvcnQgTmV3VHlwZQorCisgICBVc2VySWQgPSBOZXdUeXBlKCdVc2VySWQnLCBpbnQpCisKKyAgICMgRmFpbHMgYXQgcnVudGltZSBhbmQgZG9lcyBub3QgdHlwZWNoZWNrCisgICBjbGFzcyBBZG1pblVzZXJJZChVc2VySWQpOiBwYXNzCisKKyAgICMgQWxzbyBkb2VzIG5vdCB0eXBlY2hlY2sKKyAgIFByb1VzZXJJZCA9IE5ld1R5cGUoJ1Byb1VzZXJJZCcsIFVzZXJJZCkKKworU2VlIDpwZXA6YDQ4NGAgZm9yIG1vcmUgZGV0YWlscy4KKworLi4gbm90ZTo6CisKKyAgIFJlY2FsbCB0aGF0IHRoZSB1c2Ugb2YgYSB0eXBlIGFsaWFzIGRlY2xhcmVzIHR3byB0eXBlcyB0byBiZSAqZXF1aXZhbGVudCogdG8KKyAgIG9uZSBhbm90aGVyLiBEb2luZyBgYEFsaWFzID0gT3JpZ2luYWxgYCB3aWxsIG1ha2UgdGhlIHN0YXRpYyB0eXBlIGNoZWNrZXIKKyAgIHRyZWF0IGBgQWxpYXNgYCBhcyBiZWluZyAqZXhhY3RseSBlcXVpdmFsZW50KiB0byBgYE9yaWdpbmFsYGAgaW4gYWxsIGNhc2VzLgorICAgVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBzaW1wbGlmeSBjb21wbGV4IHR5cGUgc2lnbmF0dXJlcy4KKworICAgSW4gY29udHJhc3QsIGBgTmV3VHlwZWBgIGRlY2xhcmVzIG9uZSB0eXBlIHRvIGJlIGEgKnN1YnR5cGUqIG9mIGFub3RoZXIuCisgICBEb2luZyBgYERlcml2ZWQgPSBOZXdUeXBlKCdEZXJpdmVkJywgT3JpZ2luYWwpYGAgd2lsbCBtYWtlIHRoZSBzdGF0aWMgdHlwZQorICAgY2hlY2tlciB0cmVhdCBgYERlcml2ZWRgYCBhcyBhICpzdWJjbGFzcyogb2YgYGBPcmlnaW5hbGBgLCB3aGljaCBtZWFucyBhCisgICB2YWx1ZSBvZiB0eXBlIGBgT3JpZ2luYWxgYCBjYW5ub3QgYmUgdXNlZCBpbiBwbGFjZXMgd2hlcmUgYSB2YWx1ZSBvZiB0eXBlCisgICBgYERlcml2ZWRgYCBpcyBleHBlY3RlZC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBwcmV2ZW50IGxvZ2ljCisgICBlcnJvcnMgd2l0aCBtaW5pbWFsIHJ1bnRpbWUgY29zdC4KKworQ2FsbGFibGUKKy0tLS0tLS0tCisKK0ZyYW1ld29ya3MgZXhwZWN0aW5nIGNhbGxiYWNrIGZ1bmN0aW9ucyBvZiBzcGVjaWZpYyBzaWduYXR1cmVzIG1pZ2h0IGJlCit0eXBlIGhpbnRlZCB1c2luZyBgYENhbGxhYmxlW1tBcmcxVHlwZSwgQXJnMlR5cGVdLCBSZXR1cm5UeXBlXWBgLgorCitGb3IgZXhhbXBsZTo6CisKKyAgIGZyb20gdHlwaW5nIGltcG9ydCBDYWxsYWJsZQorCisgICBkZWYgZmVlZGVyKGdldF9uZXh0X2l0ZW06IENhbGxhYmxlW1tdLCBzdHJdKSAtPiBOb25lOgorICAgICAgICMgQm9keQorCisgICBkZWYgYXN5bmNfcXVlcnkob25fc3VjY2VzczogQ2FsbGFibGVbW2ludF0sIE5vbmVdLAorICAgICAgICAgICAgICAgICAgIG9uX2Vycm9yOiBDYWxsYWJsZVtbaW50LCBFeGNlcHRpb25dLCBOb25lXSkgLT4gTm9uZToKKyAgICAgICAjIEJvZHkKKworSXQgaXMgcG9zc2libGUgdG8gZGVjbGFyZSB0aGUgcmV0dXJuIHR5cGUgb2YgYSBjYWxsYWJsZSB3aXRob3V0IHNwZWNpZnlpbmcKK3RoZSBjYWxsIHNpZ25hdHVyZSBieSBzdWJzdGl0dXRpbmcgYSBsaXRlcmFsIGVsbGlwc2lzCitmb3IgdGhlIGxpc3Qgb2YgYXJndW1lbnRzIGluIHRoZSB0eXBlIGhpbnQ6IGBgQ2FsbGFibGVbLi4uLCBSZXR1cm5UeXBlXWBgLgorYGBOb25lYGAgYXMgYSB0eXBlIGhpbnQgaXMgYSBzcGVjaWFsIGNhc2UgYW5kIGlzIHJlcGxhY2VkIGJ5IGBgdHlwZShOb25lKWBgLgorCitHZW5lcmljcworLS0tLS0tLS0KKworU2luY2UgdHlwZSBpbmZvcm1hdGlvbiBhYm91dCBvYmplY3RzIGtlcHQgaW4gY29udGFpbmVycyBjYW5ub3QgYmUgc3RhdGljYWxseQoraW5mZXJyZWQgaW4gYSBnZW5lcmljIHdheSwgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGhhdmUgYmVlbiBleHRlbmRlZCB0byBzdXBwb3J0CitzdWJzY3JpcHRpb24gdG8gZGVub3RlIGV4cGVjdGVkIHR5cGVzIGZvciBjb250YWluZXIgZWxlbWVudHMuCisKKzo6CisKKyAgIGZyb20gdHlwaW5nIGltcG9ydCBNYXBwaW5nLCBTZXF1ZW5jZQorCisgICBkZWYgbm90aWZ5X2J5X2VtYWlsKGVtcGxveWVlczogU2VxdWVuY2VbRW1wbG95ZWVdLAorICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZXM6IE1hcHBpbmdbc3RyLCBzdHJdKSAtPiBOb25lOiAuLi4KKworR2VuZXJpY3MgY2FuIGJlIHBhcmFtZXRyaXplZCBieSB1c2luZyBhIG5ldyBmYWN0b3J5IGF2YWlsYWJsZSBpbiB0eXBpbmcKK2NhbGxlZCA6Y2xhc3M6YFR5cGVWYXJgLgorCis6OgorCisgICBmcm9tIHR5cGluZyBpbXBvcnQgU2VxdWVuY2UsIFR5cGVWYXIKKworICAgVCA9IFR5cGVWYXIoJ1QnKSAgICAgICMgRGVjbGFyZSB0eXBlIHZhcmlhYmxlCisKKyAgIGRlZiBmaXJzdChsOiBTZXF1ZW5jZVtUXSkgLT4gVDogICAjIEdlbmVyaWMgZnVuY3Rpb24KKyAgICAgICByZXR1cm4gbFswXQorCisKK1VzZXItZGVmaW5lZCBnZW5lcmljIHR5cGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHVzZXItZGVmaW5lZCBjbGFzcyBjYW4gYmUgZGVmaW5lZCBhcyBhIGdlbmVyaWMgY2xhc3MuCisKKzo6CisKKyAgIGZyb20gdHlwaW5nIGltcG9ydCBUeXBlVmFyLCBHZW5lcmljCisgICBmcm9tIGxvZ2dpbmcgaW1wb3J0IExvZ2dlcgorCisgICBUID0gVHlwZVZhcignVCcpCisKKyAgIGNsYXNzIExvZ2dlZFZhcihHZW5lcmljW1RdKToKKyAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU6IFQsIG5hbWU6IHN0ciwgbG9nZ2VyOiBMb2dnZXIpIC0+IE5vbmU6CisgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICAgICBkZWYgc2V0KHNlbGYsIG5ldzogVCkgLT4gTm9uZToKKyAgICAgICAgICAgc2VsZi5sb2coJ1NldCAnICsgcmVwcihzZWxmLnZhbHVlKSkKKyAgICAgICAgICAgc2VsZi52YWx1ZSA9IG5ldworCisgICAgICAgZGVmIGdldChzZWxmKSAtPiBUOgorICAgICAgICAgICBzZWxmLmxvZygnR2V0ICcgKyByZXByKHNlbGYudmFsdWUpKQorICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgZGVmIGxvZyhzZWxmLCBtZXNzYWdlOiBzdHIpIC0+IE5vbmU6CisgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oJ3t9OiB7fScuZm9ybWF0KHNlbGYubmFtZSwgbWVzc2FnZSkpCisKK2BgR2VuZXJpY1tUXWBgIGFzIGEgYmFzZSBjbGFzcyBkZWZpbmVzIHRoYXQgdGhlIGNsYXNzIGBgTG9nZ2VkVmFyYGAgdGFrZXMgYQorc2luZ2xlIHR5cGUgcGFyYW1ldGVyIGBgVGBgIC4gVGhpcyBhbHNvIG1ha2VzIGBgVGBgIHZhbGlkIGFzIGEgdHlwZSB3aXRoaW4gdGhlCitjbGFzcyBib2R5LgorCitUaGUgOmNsYXNzOmBHZW5lcmljYCBiYXNlIGNsYXNzIHVzZXMgYSBtZXRhY2xhc3MgdGhhdCBkZWZpbmVzCis6bWV0aDpgX19nZXRpdGVtX19gIHNvIHRoYXQgYGBMb2dnZWRWYXJbdF1gYCBpcyB2YWxpZCBhcyBhIHR5cGU6OgorCisgICBmcm9tIHR5cGluZyBpbXBvcnQgSXRlcmFibGUKKworICAgZGVmIHplcm9fYWxsX3ZhcnModmFyczogSXRlcmFibGVbTG9nZ2VkVmFyW2ludF1dKSAtPiBOb25lOgorICAgICAgIGZvciB2YXIgaW4gdmFyczoKKyAgICAgICAgICAgdmFyLnNldCgwKQorCitBIGdlbmVyaWMgdHlwZSBjYW4gaGF2ZSBhbnkgbnVtYmVyIG9mIHR5cGUgdmFyaWFibGVzLCBhbmQgdHlwZSB2YXJpYWJsZXMgbWF5CitiZSBjb25zdHJhaW5lZDo6CisKKyAgIGZyb20gdHlwaW5nIGltcG9ydCBUeXBlVmFyLCBHZW5lcmljCisgICAuLi4KKworICAgVCA9IFR5cGVWYXIoJ1QnKQorICAgUyA9IFR5cGVWYXIoJ1MnLCBpbnQsIHN0cikKKworICAgY2xhc3MgU3RyYW5nZVBhaXIoR2VuZXJpY1tULCBTXSk6CisgICAgICAgLi4uCisKK0VhY2ggdHlwZSB2YXJpYWJsZSBhcmd1bWVudCB0byA6Y2xhc3M6YEdlbmVyaWNgIG11c3QgYmUgZGlzdGluY3QuCitUaGlzIGlzIHRodXMgaW52YWxpZDo6CisKKyAgIGZyb20gdHlwaW5nIGltcG9ydCBUeXBlVmFyLCBHZW5lcmljCisgICAuLi4KKworICAgVCA9IFR5cGVWYXIoJ1QnKQorCisgICBjbGFzcyBQYWlyKEdlbmVyaWNbVCwgVF0pOiAgICMgSU5WQUxJRAorICAgICAgIC4uLgorCitZb3UgY2FuIHVzZSBtdWx0aXBsZSBpbmhlcml0YW5jZSB3aXRoIDpjbGFzczpgR2VuZXJpY2A6OgorCisgICBmcm9tIHR5cGluZyBpbXBvcnQgVHlwZVZhciwgR2VuZXJpYywgU2l6ZWQKKworICAgVCA9IFR5cGVWYXIoJ1QnKQorCisgICBjbGFzcyBMaW5rZWRMaXN0KFNpemVkLCBHZW5lcmljW1RdKToKKyAgICAgICAuLi4KKworV2hlbiBpbmhlcml0aW5nIGZyb20gZ2VuZXJpYyBjbGFzc2VzLCBzb21lIHR5cGUgdmFyaWFibGVzIGNvdWxkIGJlIGZpeGVkOjoKKworICAgIGZyb20gdHlwaW5nIGltcG9ydCBUeXBlVmFyLCBNYXBwaW5nCisKKyAgICBUID0gVHlwZVZhcignVCcpCisKKyAgICBjbGFzcyBNeURpY3QoTWFwcGluZ1tzdHIsIFRdKToKKyAgICAgICAgLi4uCisKK0luIHRoaXMgY2FzZSBgYE15RGljdGBgIGhhcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIGBgVGBgLgorCitTdWJjbGFzc2luZyBhIGdlbmVyaWMgY2xhc3Mgd2l0aG91dCBzcGVjaWZ5aW5nIHR5cGUgcGFyYW1ldGVycyBhc3N1bWVzCis6Y2xhc3M6YEFueWAgZm9yIGVhY2ggcG9zaXRpb24uIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgYGBNeUl0ZXJhYmxlYGAgaXMKK25vdCBnZW5lcmljIGJ1dCBpbXBsaWNpdGx5IGluaGVyaXRzIGZyb20gYGBJdGVyYWJsZVtBbnldYGA6OgorCisgICBmcm9tIHR5cGluZyBpbXBvcnQgSXRlcmFibGUKKworICAgY2xhc3MgTXlJdGVyYWJsZShJdGVyYWJsZSk6ICMgU2FtZSBhcyBJdGVyYWJsZVtBbnldCisKK1RoZSBtZXRhY2xhc3MgdXNlZCBieSA6Y2xhc3M6YEdlbmVyaWNgIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBhYmMuQUJDTWV0YWAuCitBIGdlbmVyaWMgY2xhc3MgY2FuIGJlIGFuIEFCQyBieSBpbmNsdWRpbmcgYWJzdHJhY3QgbWV0aG9kcyBvciBwcm9wZXJ0aWVzLAorYW5kIGdlbmVyaWMgY2xhc3NlcyBjYW4gYWxzbyBoYXZlIEFCQ3MgYXMgYmFzZSBjbGFzc2VzIHdpdGhvdXQgYSBtZXRhY2xhc3MKK2NvbmZsaWN0LiAgR2VuZXJpYyBtZXRhY2xhc3NlcyBhcmUgbm90IHN1cHBvcnRlZC4KKworCitUaGUgOmNsYXNzOmBBbnlgIHR5cGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHNwZWNpYWwga2luZCBvZiB0eXBlIGlzIDpjbGFzczpgQW55YC4gRXZlcnkgdHlwZSBpcyBhIHN1YnR5cGUgb2YKKzpjbGFzczpgQW55YC4gVGhpcyBpcyBhbHNvIHRydWUgZm9yIHRoZSBidWlsdGluIHR5cGUgb2JqZWN0LiBIb3dldmVyLCB0byB0aGUKK3N0YXRpYyB0eXBlIGNoZWNrZXIgdGhlc2UgYXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LgorCitXaGVuIHRoZSB0eXBlIG9mIGEgdmFsdWUgaXMgOmNsYXNzOmBvYmplY3RgLCB0aGUgdHlwZSBjaGVja2VyIHdpbGwgcmVqZWN0CithbG1vc3QgYWxsIG9wZXJhdGlvbnMgb24gaXQsIGFuZCBhc3NpZ25pbmcgaXQgdG8gYSB2YXJpYWJsZSAob3IgdXNpbmcgaXQgYXMgYQorcmV0dXJuIHZhbHVlKSBvZiBhIG1vcmUgc3BlY2lhbGl6ZWQgdHlwZSBpcyBhIHR5cGUgZXJyb3IuIE9uIHRoZSBvdGhlciBoYW5kLAord2hlbiBhIHZhbHVlIGhhcyB0eXBlIDpjbGFzczpgQW55YCwgdGhlIHR5cGUgY2hlY2tlciB3aWxsIGFsbG93IGFsbCBvcGVyYXRpb25zCitvbiBpdCwgYW5kIGEgdmFsdWUgb2YgdHlwZSA6Y2xhc3M6YEFueWAgY2FuIGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgKG9yIHVzZWQKK2FzIGEgcmV0dXJuIHZhbHVlKSBvZiBhIG1vcmUgY29uc3RyYWluZWQgdHlwZS4KKworCitDbGFzc2VzLCBmdW5jdGlvbnMsIGFuZCBkZWNvcmF0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNsYXNzZXMsIGZ1bmN0aW9ucyBhbmQgZGVjb3JhdG9yczoKKworLi4gY2xhc3M6OiBBbnkKKworICAgU3BlY2lhbCB0eXBlIGluZGljYXRpbmcgYW4gdW5jb25zdHJhaW5lZCB0eXBlLgorCisgICAqIEFueSBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBBbnlgLgorICAgKiBBbnkgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YEFueWAuCisgICAqIEFzIGEgc3BlY2lhbCBjYXNlLCA6Y2xhc3M6YEFueWAgYW5kIDpjbGFzczpgb2JqZWN0YCBhcmUgc3ViY2xhc3NlcyBvZgorICAgICBlYWNoIG90aGVyLgorCisuLiBjbGFzczo6IFR5cGVWYXIKKworICAgIFR5cGUgdmFyaWFibGUuCisKKyAgICBVc2FnZTo6CisKKyAgICAgIFQgPSBUeXBlVmFyKCdUJykgICMgQ2FuIGJlIGFueXRoaW5nCisgICAgICBBID0gVHlwZVZhcignQScsIHN0ciwgYnl0ZXMpICAjIE11c3QgYmUgc3RyIG9yIGJ5dGVzCisKKyAgICBUeXBlIHZhcmlhYmxlcyBleGlzdCBwcmltYXJpbHkgZm9yIHRoZSBiZW5lZml0IG9mIHN0YXRpYyB0eXBlCisgICAgY2hlY2tlcnMuICBUaGV5IHNlcnZlIGFzIHRoZSBwYXJhbWV0ZXJzIGZvciBnZW5lcmljIHR5cGVzIGFzIHdlbGwKKyAgICBhcyBmb3IgZ2VuZXJpYyBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFNlZSBjbGFzcyBHZW5lcmljIGZvciBtb3JlCisgICAgaW5mb3JtYXRpb24gb24gZ2VuZXJpYyB0eXBlcy4gIEdlbmVyaWMgZnVuY3Rpb25zIHdvcmsgYXMgZm9sbG93czo6CisKKyAgICAgICBkZWYgcmVwZWF0KHg6IFQsIG46IGludCkgLT4gU2VxdWVuY2VbVF06CisgICAgICAgICAgICIiIlJldHVybiBhIGxpc3QgY29udGFpbmluZyBuIHJlZmVyZW5jZXMgdG8geC4iIiIKKyAgICAgICAgICAgcmV0dXJuIFt4XSpuCisKKyAgICAgICBkZWYgbG9uZ2VzdCh4OiBBLCB5OiBBKSAtPiBBOgorICAgICAgICAgICAiIiJSZXR1cm4gdGhlIGxvbmdlc3Qgb2YgdHdvIHN0cmluZ3MuIiIiCisgICAgICAgICAgIHJldHVybiB4IGlmIGxlbih4KSA+PSBsZW4oeSkgZWxzZSB5CisKKyAgICBUaGUgbGF0dGVyIGV4YW1wbGUncyBzaWduYXR1cmUgaXMgZXNzZW50aWFsbHkgdGhlIG92ZXJsb2FkaW5nCisgICAgb2YgYGAoc3RyLCBzdHIpIC0+IHN0cmBgIGFuZCBgYChieXRlcywgYnl0ZXMpIC0+IGJ5dGVzYGAuICBBbHNvIG5vdGUKKyAgICB0aGF0IGlmIHRoZSBhcmd1bWVudHMgYXJlIGluc3RhbmNlcyBvZiBzb21lIHN1YmNsYXNzIG9mIDpjbGFzczpgc3RyYCwKKyAgICB0aGUgcmV0dXJuIHR5cGUgaXMgc3RpbGwgcGxhaW4gOmNsYXNzOmBzdHJgLgorCisgICAgQXQgcnVudGltZSwgYGBpc2luc3RhbmNlKHgsIFQpYGAgd2lsbCByYWlzZSA6ZXhjOmBUeXBlRXJyb3JgLiAgSW4gZ2VuZXJhbCwKKyAgICA6ZnVuYzpgaXNpbnN0YW5jZWAgYW5kIDpmdW5jOmBpc3N1YmNsYXNzYCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCB0eXBlcy4KKworICAgIFR5cGUgdmFyaWFibGVzIG1heSBiZSBtYXJrZWQgY292YXJpYW50IG9yIGNvbnRyYXZhcmlhbnQgYnkgcGFzc2luZworICAgIGBgY292YXJpYW50PVRydWVgYCBvciBgYGNvbnRyYXZhcmlhbnQ9VHJ1ZWBgLiAgU2VlIDpwZXA6YDQ4NGAgZm9yIG1vcmUKKyAgICBkZXRhaWxzLiAgQnkgZGVmYXVsdCB0eXBlIHZhcmlhYmxlcyBhcmUgaW52YXJpYW50LiAgQWx0ZXJuYXRpdmVseSwKKyAgICBhIHR5cGUgdmFyaWFibGUgbWF5IHNwZWNpZnkgYW4gdXBwZXIgYm91bmQgdXNpbmcgYGBib3VuZD08dHlwZT5gYC4KKyAgICBUaGlzIG1lYW5zIHRoYXQgYW4gYWN0dWFsIHR5cGUgc3Vic3RpdHV0ZWQgKGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSkKKyAgICBmb3IgdGhlIHR5cGUgdmFyaWFibGUgbXVzdCBiZSBhIHN1YmNsYXNzIG9mIHRoZSBib3VuZGFyeSB0eXBlLAorICAgIHNlZSA6cGVwOmA0ODRgLgorCisuLiBjbGFzczo6IFVuaW9uCisKKyAgIFVuaW9uIHR5cGU7IGBgVW5pb25bWCwgWV1gYCBtZWFucyBlaXRoZXIgWCBvciBZLgorCisgICBUbyBkZWZpbmUgYSB1bmlvbiwgdXNlIGUuZy4gYGBVbmlvbltpbnQsIHN0cl1gYC4gIERldGFpbHM6CisKKyAgICogVGhlIGFyZ3VtZW50cyBtdXN0IGJlIHR5cGVzIGFuZCB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZS4KKworICAgKiBVbmlvbnMgb2YgdW5pb25zIGFyZSBmbGF0dGVuZWQsIGUuZy46OgorCisgICAgICAgVW5pb25bVW5pb25baW50LCBzdHJdLCBmbG9hdF0gPT0gVW5pb25baW50LCBzdHIsIGZsb2F0XQorCisgICAqIFVuaW9ucyBvZiBhIHNpbmdsZSBhcmd1bWVudCB2YW5pc2gsIGUuZy46OgorCisgICAgICAgVW5pb25baW50XSA9PSBpbnQgICMgVGhlIGNvbnN0cnVjdG9yIGFjdHVhbGx5IHJldHVybnMgaW50CisKKyAgICogUmVkdW5kYW50IGFyZ3VtZW50cyBhcmUgc2tpcHBlZCwgZS5nLjo6CisKKyAgICAgICBVbmlvbltpbnQsIHN0ciwgaW50XSA9PSBVbmlvbltpbnQsIHN0cl0KKworICAgKiBXaGVuIGNvbXBhcmluZyB1bmlvbnMsIHRoZSBhcmd1bWVudCBvcmRlciBpcyBpZ25vcmVkLCBlLmcuOjoKKworICAgICAgIFVuaW9uW2ludCwgc3RyXSA9PSBVbmlvbltzdHIsIGludF0KKworICAgKiBJZiA6Y2xhc3M6YEFueWAgaXMgcHJlc2VudCBpdCBpcyB0aGUgc29sZSBzdXJ2aXZvciwgZS5nLjo6CisKKyAgICAgICBVbmlvbltpbnQsIEFueV0gPT0gQW55CisKKyAgICogWW91IGNhbm5vdCBzdWJjbGFzcyBvciBpbnN0YW50aWF0ZSBhIHVuaW9uLgorCisgICAqIFlvdSBjYW5ub3Qgd3JpdGUgYGBVbmlvbltYXVtZXWBgLgorCisgICAqIFlvdSBjYW4gdXNlIGBgT3B0aW9uYWxbWF1gYCBhcyBhIHNob3J0aGFuZCBmb3IgYGBVbmlvbltYLCBOb25lXWBgLgorCisuLiBjbGFzczo6IE9wdGlvbmFsCisKKyAgIE9wdGlvbmFsIHR5cGUuCisKKyAgIGBgT3B0aW9uYWxbWF1gYCBpcyBlcXVpdmFsZW50IHRvIGBgVW5pb25bWCwgdHlwZShOb25lKV1gYC4KKworICAgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBzYW1lIGNvbmNlcHQgYXMgYW4gb3B0aW9uYWwgYXJndW1lbnQsCisgICB3aGljaCBpcyBvbmUgdGhhdCBoYXMgYSBkZWZhdWx0LiAgQW4gb3B0aW9uYWwgYXJndW1lbnQgd2l0aCBhCisgICBkZWZhdWx0IG5lZWRuJ3QgdXNlIHRoZSBgYE9wdGlvbmFsYGAgcXVhbGlmaWVyIG9uIGl0cyB0eXBlCisgICBhbm5vdGF0aW9uIChhbHRob3VnaCBpdCBpcyBpbmZlcnJlZCBpZiB0aGUgZGVmYXVsdCBpcyBgYE5vbmVgYCkuCisgICBBIG1hbmRhdG9yeSBhcmd1bWVudCBtYXkgc3RpbGwgaGF2ZSBhbiBgYE9wdGlvbmFsYGAgdHlwZSBpZiBhbgorICAgZXhwbGljaXQgdmFsdWUgb2YgYGBOb25lYGAgaXMgYWxsb3dlZC4KKworLi4gY2xhc3M6OiBUdXBsZQorCisgIFR1cGxlIHR5cGU7IGBgVHVwbGVbWCwgWV1gYCBpcyB0aGUgdHlwZSBvZiBhIHR1cGxlIG9mIHR3byBpdGVtcworICB3aXRoIHRoZSBmaXJzdCBpdGVtIG9mIHR5cGUgWCBhbmQgdGhlIHNlY29uZCBvZiB0eXBlIFkuCisKKyAgRXhhbXBsZTogYGBUdXBsZVtUMSwgVDJdYGAgaXMgYSB0dXBsZSBvZiB0d28gZWxlbWVudHMgY29ycmVzcG9uZGluZworICB0byB0eXBlIHZhcmlhYmxlcyBUMSBhbmQgVDIuICBgYFR1cGxlW2ludCwgZmxvYXQsIHN0cl1gYCBpcyBhIHR1cGxlCisgIG9mIGFuIGludCwgYSBmbG9hdCBhbmQgYSBzdHJpbmcuCisKKyAgVG8gc3BlY2lmeSBhIHZhcmlhYmxlLWxlbmd0aCB0dXBsZSBvZiBob21vZ2VuZW91cyB0eXBlLAorICB1c2UgbGl0ZXJhbCBlbGxpcHNpcywgZS5nLiBgYFR1cGxlW2ludCwgLi4uXWBgLgorCisuLiBjbGFzczo6IENhbGxhYmxlCisKKyAgIENhbGxhYmxlIHR5cGU7IGBgQ2FsbGFibGVbW2ludF0sIHN0cl1gYCBpcyBhIGZ1bmN0aW9uIG9mIChpbnQpIC0+IHN0ci4KKworICAgVGhlIHN1YnNjcmlwdGlvbiBzeW50YXggbXVzdCBhbHdheXMgYmUgdXNlZCB3aXRoIGV4YWN0bHkgdHdvCisgICB2YWx1ZXM6IHRoZSBhcmd1bWVudCBsaXN0IGFuZCB0aGUgcmV0dXJuIHR5cGUuICBUaGUgYXJndW1lbnQgbGlzdAorICAgbXVzdCBiZSBhIGxpc3Qgb2YgdHlwZXM7IHRoZSByZXR1cm4gdHlwZSBtdXN0IGJlIGEgc2luZ2xlIHR5cGUuCisKKyAgIFRoZXJlIGlzIG5vIHN5bnRheCB0byBpbmRpY2F0ZSBvcHRpb25hbCBvciBrZXl3b3JkIGFyZ3VtZW50cywKKyAgIHN1Y2ggZnVuY3Rpb24gdHlwZXMgYXJlIHJhcmVseSB1c2VkIGFzIGNhbGxiYWNrIHR5cGVzLgorICAgYGBDYWxsYWJsZVsuLi4sIFJldHVyblR5cGVdYGAgY291bGQgYmUgdXNlZCB0byB0eXBlIGhpbnQgYSBjYWxsYWJsZQorICAgdGFraW5nIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5pbmcgYGBSZXR1cm5UeXBlYGAuCisgICBBIHBsYWluIDpjbGFzczpgQ2FsbGFibGVgIGlzIGVxdWl2YWxlbnQgdG8gYGBDYWxsYWJsZVsuLi4sIEFueV1gYC4KKworLi4gY2xhc3M6OiBHZW5lcmljCisKKyAgIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGdlbmVyaWMgdHlwZXMuCisKKyAgIEEgZ2VuZXJpYyB0eXBlIGlzIHR5cGljYWxseSBkZWNsYXJlZCBieSBpbmhlcml0aW5nIGZyb20gYW4KKyAgIGluc3RhbnRpYXRpb24gb2YgdGhpcyBjbGFzcyB3aXRoIG9uZSBvciBtb3JlIHR5cGUgdmFyaWFibGVzLgorICAgRm9yIGV4YW1wbGUsIGEgZ2VuZXJpYyBtYXBwaW5nIHR5cGUgbWlnaHQgYmUgZGVmaW5lZCBhczo6CisKKyAgICAgIGNsYXNzIE1hcHBpbmcoR2VuZXJpY1tLVCwgVlRdKToKKyAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5OiBLVCkgLT4gVlQ6CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICAjIEV0Yy4KKworICAgVGhpcyBjbGFzcyBjYW4gdGhlbiBiZSB1c2VkIGFzIGZvbGxvd3M6OgorCisgICAgICBYID0gVHlwZVZhcignWCcpCisgICAgICBZID0gVHlwZVZhcignWScpCisKKyAgICAgIGRlZiBsb29rdXBfbmFtZShtYXBwaW5nOiBNYXBwaW5nW1gsIFldLCBrZXk6IFgsIGRlZmF1bHQ6IFkpIC0+IFk6CisgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICByZXR1cm4gbWFwcGluZ1trZXldCisgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisuLiBjbGFzczo6IEl0ZXJhYmxlKEdlbmVyaWNbVF9jb10pCisKKyAgICBBIGdlbmVyaWMgdmVyc2lvbiBvZiB0aGUgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGVgLgorCisuLiBjbGFzczo6IEl0ZXJhdG9yKEl0ZXJhYmxlW1RfY29dKQorCisgICAgQSBnZW5lcmljIHZlcnNpb24gb2YgdGhlIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLkl0ZXJhdG9yYC4KKworLi4gY2xhc3M6OiBTdXBwb3J0c0ludAorCisgICAgQW4gQUJDIHdpdGggb25lIGFic3RyYWN0IG1ldGhvZCBgYF9faW50X19gYC4KKworLi4gY2xhc3M6OiBTdXBwb3J0c0Zsb2F0CisKKyAgICBBbiBBQkMgd2l0aCBvbmUgYWJzdHJhY3QgbWV0aG9kIGBgX19mbG9hdF9fYGAuCisKKy4uIGNsYXNzOjogU3VwcG9ydHNBYnMKKworICAgIEFuIEFCQyB3aXRoIG9uZSBhYnN0cmFjdCBtZXRob2QgYGBfX2Fic19fYGAgdGhhdCBpcyBjb3ZhcmlhbnQKKyAgICBpbiBpdHMgcmV0dXJuIHR5cGUuCisKKy4uIGNsYXNzOjogU3VwcG9ydHNSb3VuZAorCisgICAgQW4gQUJDIHdpdGggb25lIGFic3RyYWN0IG1ldGhvZCBgYF9fcm91bmRfX2BgCisgICAgdGhhdCBpcyBjb3ZhcmlhbnQgaW4gaXRzIHJldHVybiB0eXBlLgorCisuLiBjbGFzczo6IFJldmVyc2libGUKKworICAgIEFuIEFCQyB3aXRoIG9uZSBhYnN0cmFjdCBtZXRob2QgYGBfX3JldmVyc2VkX19gYCByZXR1cm5pbmcKKyAgICBhbiBgYEl0ZXJhdG9yW1RfY29dYGAuCisKKy4uIGNsYXNzOjogQ29udGFpbmVyKEdlbmVyaWNbVF9jb10pCisKKyAgICBBIGdlbmVyaWMgdmVyc2lvbiBvZiA6Y2xhc3M6YGNvbGxlY3Rpb25zLmFiYy5Db250YWluZXJgLgorCisuLiBjbGFzczo6IEFic3RyYWN0U2V0KFNpemVkLCBJdGVyYWJsZVtUX2NvXSwgQ29udGFpbmVyW1RfY29dKQorCisgICAgQSBnZW5lcmljIHZlcnNpb24gb2YgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuU2V0YC4KKworLi4gY2xhc3M6OiBNdXRhYmxlU2V0KEFic3RyYWN0U2V0W1RdKQorCisgICAgQSBnZW5lcmljIHZlcnNpb24gb2YgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZVNldGAuCisKKy4uIGNsYXNzOjogTWFwcGluZyhTaXplZCwgSXRlcmFibGVbS1RdLCBDb250YWluZXJbS1RdLCBHZW5lcmljW1ZUX2NvXSkKKworICAgIEEgZ2VuZXJpYyB2ZXJzaW9uIG9mIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLk1hcHBpbmdgLgorCisuLiBjbGFzczo6IE11dGFibGVNYXBwaW5nKE1hcHBpbmdbS1QsIFZUXSkKKworICAgIEEgZ2VuZXJpYyB2ZXJzaW9uIG9mIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLk11dGFibGVNYXBwaW5nYC4KKworLi4gY2xhc3M6OiBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGVbVF9jb10sIENvbnRhaW5lcltUX2NvXSkKKworICAgIEEgZ2VuZXJpYyB2ZXJzaW9uIG9mIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYC4KKworLi4gY2xhc3M6OiBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2VbVF0pCisKKyAgIEEgZ2VuZXJpYyB2ZXJzaW9uIG9mIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZWAuCisKKy4uIGNsYXNzOjogQnl0ZVN0cmluZyhTZXF1ZW5jZVtpbnRdKQorCisgICBBIGdlbmVyaWMgdmVyc2lvbiBvZiA6Y2xhc3M6YGNvbGxlY3Rpb25zLmFiYy5CeXRlU3RyaW5nYC4KKworICAgVGhpcyB0eXBlIHJlcHJlc2VudHMgdGhlIHR5cGVzIDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAsCisgICBhbmQgOmNsYXNzOmBtZW1vcnl2aWV3YC4KKworICAgQXMgYSBzaG9ydGhhbmQgZm9yIHRoaXMgdHlwZSwgOmNsYXNzOmBieXRlc2AgY2FuIGJlIHVzZWQgdG8KKyAgIGFubm90YXRlIGFyZ3VtZW50cyBvZiBhbnkgb2YgdGhlIHR5cGVzIG1lbnRpb25lZCBhYm92ZS4KKworLi4gY2xhc3M6OiBMaXN0KGxpc3QsIE11dGFibGVTZXF1ZW5jZVtUXSkKKworICAgR2VuZXJpYyB2ZXJzaW9uIG9mIDpjbGFzczpgbGlzdGAuCisgICBVc2VmdWwgZm9yIGFubm90YXRpbmcgcmV0dXJuIHR5cGVzLiBUbyBhbm5vdGF0ZSBhcmd1bWVudHMgaXQgaXMgcHJlZmVycmVkCisgICB0byB1c2UgYWJzdHJhY3QgY29sbGVjdGlvbiB0eXBlcyBzdWNoIGFzIDpjbGFzczpgTWFwcGluZ2AsIDpjbGFzczpgU2VxdWVuY2VgLAorICAgb3IgOmNsYXNzOmBBYnN0cmFjdFNldGAuCisKKyAgIFRoaXMgdHlwZSBtYXkgYmUgdXNlZCBhcyBmb2xsb3dzOjoKKworICAgICAgVCA9IFR5cGVWYXIoJ1QnLCBpbnQsIGZsb2F0KQorCisgICAgICBkZWYgdmVjMih4OiBULCB5OiBUKSAtPiBMaXN0W1RdOgorICAgICAgICAgIHJldHVybiBbeCwgeV0KKworICAgICAgZGVmIGtlZXBfcG9zaXRpdmVzKHZlY3RvcjogU2VxdWVuY2VbVF0pIC0+IExpc3RbVF06CisgICAgICAgICAgcmV0dXJuIFtpdGVtIGZvciBpdGVtIGluIHZlY3RvciBpZiBpdGVtID4gMF0KKworLi4gY2xhc3M6OiBTZXQoc2V0LCBNdXRhYmxlU2V0W1RdKQorCisgICBBIGdlbmVyaWMgdmVyc2lvbiBvZiA6Y2xhc3M6YGJ1aWx0aW5zLnNldCA8c2V0PmAuCisKKy4uIGNsYXNzOjogTWFwcGluZ1ZpZXcoU2l6ZWQsIEl0ZXJhYmxlW1RfY29dKQorCisgICBBIGdlbmVyaWMgdmVyc2lvbiBvZiA6Y2xhc3M6YGNvbGxlY3Rpb25zLmFiYy5NYXBwaW5nVmlld2AuCisKKy4uIGNsYXNzOjogS2V5c1ZpZXcoTWFwcGluZ1ZpZXdbS1RfY29dLCBBYnN0cmFjdFNldFtLVF9jb10pCisKKyAgIEEgZ2VuZXJpYyB2ZXJzaW9uIG9mIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLktleXNWaWV3YC4KKworLi4gY2xhc3M6OiBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIEdlbmVyaWNbS1RfY28sIFZUX2NvXSkKKworICAgQSBnZW5lcmljIHZlcnNpb24gb2YgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuSXRlbXNWaWV3YC4KKworLi4gY2xhc3M6OiBWYWx1ZXNWaWV3KE1hcHBpbmdWaWV3W1ZUX2NvXSkKKworICAgQSBnZW5lcmljIHZlcnNpb24gb2YgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuVmFsdWVzVmlld2AuCisKKy4uIGNsYXNzOjogRGljdChkaWN0LCBNdXRhYmxlTWFwcGluZ1tLVCwgVlRdKQorCisgICBBIGdlbmVyaWMgdmVyc2lvbiBvZiA6Y2xhc3M6YGRpY3RgLgorICAgVGhlIHVzYWdlIG9mIHRoaXMgdHlwZSBpcyBhcyBmb2xsb3dzOjoKKworICAgICAgZGVmIGdldF9wb3NpdGlvbl9pbl9pbmRleCh3b3JkX2xpc3Q6IERpY3Rbc3RyLCBpbnRdLCB3b3JkOiBzdHIpIC0+IGludDoKKyAgICAgICAgICByZXR1cm4gd29yZF9saXN0W3dvcmRdCisKKy4uIGNsYXNzOjogR2VuZXJhdG9yKEl0ZXJhdG9yW1RfY29dLCBHZW5lcmljW1RfY28sIFRfY29udHJhLCBWX2NvXSkKKworLi4gY2xhc3M6OiBpbworCisgICBXcmFwcGVyIG5hbWVzcGFjZSBmb3IgSS9PIHN0cmVhbSB0eXBlcy4KKworICAgVGhpcyBkZWZpbmVzIHRoZSBnZW5lcmljIHR5cGUgYGBJT1tBbnlTdHJdYGAgYW5kIGFsaWFzZXMgYGBUZXh0SU9gYAorICAgYW5kIGBgQmluYXJ5SU9gYCBmb3IgcmVzcGVjdGl2ZWx5IGBgSU9bc3RyXWBgIGFuZCBgYElPW2J5dGVzXWBgLgorICAgVGhlc2UgcmVwcmVzZW50aW5nIHRoZSB0eXBlcyBvZiBJL08gc3RyZWFtcyBzdWNoIGFzIHJldHVybmVkIGJ5CisgICA6ZnVuYzpgb3BlbmAuCisKKy4uIGNsYXNzOjogcmUKKworICAgV3JhcHBlciBuYW1lc3BhY2UgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyB0eXBlcy4KKworICAgVGhpcyBkZWZpbmVzIHRoZSB0eXBlIGFsaWFzZXMgYGBQYXR0ZXJuYGAgYW5kIGBgTWF0Y2hgYCB3aGljaAorICAgY29ycmVzcG9uZCB0byB0aGUgcmV0dXJuIHR5cGVzIGZyb20gOmZ1bmM6YHJlLmNvbXBpbGVgIGFuZAorICAgOmZ1bmM6YHJlLm1hdGNoYC4gIFRoZXNlIHR5cGVzIChhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zKQorICAgYXJlIGdlbmVyaWMgaW4gYGBBbnlTdHJgYCBhbmQgY2FuIGJlIG1hZGUgc3BlY2lmaWMgYnkgd3JpdGluZworICAgYGBQYXR0ZXJuW3N0cl1gYCwgYGBQYXR0ZXJuW2J5dGVzXWBgLCBgYE1hdGNoW3N0cl1gYCwgb3IKKyAgIGBgTWF0Y2hbYnl0ZXNdYGAuCisKKy4uIGZ1bmN0aW9uOjogTmFtZWRUdXBsZSh0eXBlbmFtZSwgZmllbGRzKQorCisgICBUeXBlZCB2ZXJzaW9uIG9mIG5hbWVkdHVwbGUuCisKKyAgIFVzYWdlOjoKKworICAgICAgIEVtcGxveWVlID0gdHlwaW5nLk5hbWVkVHVwbGUoJ0VtcGxveWVlJywgWygnbmFtZScsIHN0ciksICgnaWQnLCBpbnQpXSkKKworICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvOjoKKworICAgICAgIEVtcGxveWVlID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgnRW1wbG95ZWUnLCBbJ25hbWUnLCAnaWQnXSkKKworICAgVGhlIHJlc3VsdGluZyBjbGFzcyBoYXMgb25lIGV4dHJhIGF0dHJpYnV0ZTogX2ZpZWxkX3R5cGVzLAorICAgZ2l2aW5nIGEgZGljdCBtYXBwaW5nIGZpZWxkIG5hbWVzIHRvIHR5cGVzLiAgKFRoZSBmaWVsZCBuYW1lcworICAgYXJlIGluIHRoZSBfZmllbGRzIGF0dHJpYnV0ZSwgd2hpY2ggaXMgcGFydCBvZiB0aGUgbmFtZWR0dXBsZQorICAgQVBJLikKKworLi4gZnVuY3Rpb246OiBjYXN0KHR5cCwgdmFsKQorCisgICBDYXN0IGEgdmFsdWUgdG8gYSB0eXBlLgorCisgICBUaGlzIHJldHVybnMgdGhlIHZhbHVlIHVuY2hhbmdlZC4gIFRvIHRoZSB0eXBlIGNoZWNrZXIgdGhpcworICAgc2lnbmFscyB0aGF0IHRoZSByZXR1cm4gdmFsdWUgaGFzIHRoZSBkZXNpZ25hdGVkIHR5cGUsIGJ1dCBhdAorICAgcnVudGltZSB3ZSBpbnRlbnRpb25hbGx5IGRvbid0IGNoZWNrIGFueXRoaW5nICh3ZSB3YW50IHRoaXMKKyAgIHRvIGJlIGFzIGZhc3QgYXMgcG9zc2libGUpLgorCisuLiBmdW5jdGlvbjo6IGdldF90eXBlX2hpbnRzKG9iaikKKworICAgUmV0dXJuIHR5cGUgaGludHMgZm9yIGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdC4KKworICAgVGhpcyBpcyBvZnRlbiB0aGUgc2FtZSBhcyBgYG9iai5fX2Fubm90YXRpb25zX19gYCwgYnV0IGl0IGhhbmRsZXMKKyAgIGZvcndhcmQgcmVmZXJlbmNlcyBlbmNvZGVkIGFzIHN0cmluZyBsaXRlcmFscywgYW5kIGlmIG5lY2Vzc2FyeQorICAgYWRkcyBgYE9wdGlvbmFsW3RdYGAgaWYgYSBkZWZhdWx0IHZhbHVlIGVxdWFsIHRvIE5vbmUgaXMgc2V0LgorCisuLiBkZWNvcmF0b3I6OiBub190eXBlX2NoZWNrKGFyZykKKworICAgRGVjb3JhdG9yIHRvIGluZGljYXRlIHRoYXQgYW5ub3RhdGlvbnMgYXJlIG5vdCB0eXBlIGhpbnRzLgorCisgICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIGNsYXNzIG9yIGZ1bmN0aW9uOyBpZiBpdCBpcyBhIGNsYXNzLCBpdAorICAgYXBwbGllcyByZWN1cnNpdmVseSB0byBhbGwgbWV0aG9kcyBkZWZpbmVkIGluIHRoYXQgY2xhc3MgKGJ1dCBub3QKKyAgIHRvIG1ldGhvZHMgZGVmaW5lZCBpbiBpdHMgc3VwZXJjbGFzc2VzIG9yIHN1YmNsYXNzZXMpLgorCisgICBUaGlzIG11dGF0ZXMgdGhlIGZ1bmN0aW9uKHMpIGluIHBsYWNlLgorCisuLiBkZWNvcmF0b3I6OiBub190eXBlX2NoZWNrX2RlY29yYXRvcihkZWNvcmF0b3IpCisKKyAgIERlY29yYXRvciB0byBnaXZlIGFub3RoZXIgZGVjb3JhdG9yIHRoZSA6ZnVuYzpgbm9fdHlwZV9jaGVja2AgZWZmZWN0LgorCisgICBUaGlzIHdyYXBzIHRoZSBkZWNvcmF0b3Igd2l0aCBzb21ldGhpbmcgdGhhdCB3cmFwcyB0aGUgZGVjb3JhdGVkCisgICBmdW5jdGlvbiBpbiA6ZnVuYzpgbm9fdHlwZV9jaGVja2AuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QgYi9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKaW5kZXggM2IzZDNhMC4uNmNkODEzMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdApAQCAtMywyMCArMywyMiBAQAogCiAuLiBtb2R1bGU6OiB1bmljb2RlZGF0YQogICAgOnN5bm9wc2lzOiBBY2Nlc3MgdGhlIFVuaWNvZGUgRGF0YWJhc2UuCisKIC4uIG1vZHVsZWF1dGhvcjo6IE1hcmMtQW5kcsOpIExlbWJ1cmcgPG1hbEBsZW1idXJnLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBNYXJjLUFuZHLDqSBMZW1idXJnIDxtYWxAbGVtYnVyZy5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogTWFydGluIHYuIEzDtndpcyA8bWFydGluQHYubG9ld2lzLmRlPgogCi0KIC4uIGluZGV4OjoKICAgIHNpbmdsZTogVW5pY29kZQogICAgc2luZ2xlOiBjaGFyYWN0ZXIKICAgIHBhaXI6IFVuaWNvZGU7IGRhdGFiYXNlCiAKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgKFVDRCkgd2hpY2gKIGRlZmluZXMgY2hhcmFjdGVyIHByb3BlcnRpZXMgZm9yIGFsbCBVbmljb2RlIGNoYXJhY3RlcnMuIFRoZSBkYXRhIGNvbnRhaW5lZCBpbgotdGhpcyBkYXRhYmFzZSBpcyBjb21waWxlZCBmcm9tIHRoZSBgVUNEIHZlcnNpb24gNi4zLjAKLTxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2Q+YF8uCit0aGlzIGRhdGFiYXNlIGlzIGNvbXBpbGVkIGZyb20gdGhlIGBVQ0QgdmVyc2lvbiA4LjAuMAorPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzguMC4wL3VjZD5gXy4KIAogVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgVW5pY29kZQogU3RhbmRhcmQgQW5uZXggIzQ0LCBgIlVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIgpAQCAtMTY2LDYgKzE2OCw2IEBACiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCi0uLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkL05hbWVBbGlhc2VzLnR4dAorLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzguMC4wL3VjZC9OYW1lQWxpYXNlcy50eHQKIAotLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQKKy4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy84LjAuMC91Y2QvTmFtZWRTZXF1ZW5jZXMudHh0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CmluZGV4IDA1NWFiZTAuLjA1ZjMzNzQwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdApAQCAtMzU5LDcgKzM1OSw3IEBACiAKIEEgbmljZSBwYXR0ZXJuIGlzIHRvIGFjdHVhbGx5IGRlY29yYXRlIHRlc3QgbWV0aG9kcyB0aGVtc2VsdmVzOgogCi0gICAgPj4+IGNsYXNzIE15VGVzdCh1bml0dGVzdDIuVGVzdENhc2UpOgorICAgID4+PiBjbGFzcyBNeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIC4uLiAgICAgQHBhdGNoLm9iamVjdChTb21lQ2xhc3MsICdhdHRyaWJ1dGUnLCBzZW50aW5lbC5hdHRyaWJ1dGUpCiAgICAgLi4uICAgICBkZWYgdGVzdF9zb21ldGhpbmcoc2VsZik6CiAgICAgLi4uICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lQ2xhc3MuYXR0cmlidXRlLCBzZW50aW5lbC5hdHRyaWJ1dGUpCkBAIC0zNzIsNyArMzcyLDcgQEAKIChvciA6ZnVuYzpgcGF0Y2gub2JqZWN0YCB3aXRoIHR3byBhcmd1bWVudHMpLiBUaGUgbW9jayB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSBhbmQKIHBhc3NlZCBpbnRvIHRoZSB0ZXN0IGZ1bmN0aW9uIC8gbWV0aG9kOgogCi0gICAgPj4+IGNsYXNzIE15VGVzdCh1bml0dGVzdDIuVGVzdENhc2UpOgorICAgID4+PiBjbGFzcyBNeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIC4uLiAgICAgQHBhdGNoLm9iamVjdChTb21lQ2xhc3MsICdzdGF0aWNfbWV0aG9kJykKICAgICAuLi4gICAgIGRlZiB0ZXN0X3NvbWV0aGluZyhzZWxmLCBtb2NrX21ldGhvZCk6CiAgICAgLi4uICAgICAgICAgU29tZUNsYXNzLnN0YXRpY19tZXRob2QoKQpAQCAtMzgyLDcgKzM4Miw3IEBACiAKIFlvdSBjYW4gc3RhY2sgdXAgbXVsdGlwbGUgcGF0Y2ggZGVjb3JhdG9ycyB1c2luZyB0aGlzIHBhdHRlcm46CiAKLSAgICA+Pj4gY2xhc3MgTXlUZXN0KHVuaXR0ZXN0Mi5UZXN0Q2FzZSk6CisgICAgPj4+IGNsYXNzIE15VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgLi4uICAgICBAcGF0Y2goJ3BhY2thZ2UubW9kdWxlLkNsYXNzTmFtZTEnKQogICAgIC4uLiAgICAgQHBhdGNoKCdwYWNrYWdlLm1vZHVsZS5DbGFzc05hbWUyJykKICAgICAuLi4gICAgIGRlZiB0ZXN0X3NvbWV0aGluZyhzZWxmLCBNb2NrQ2xhc3MyLCBNb2NrQ2xhc3MxKToKQEAgLTU0OSw3ICs1NDksNyBAQAogCiBBbiBhbHRlcm5hdGl2ZSB3YXkgb2YgZGVhbGluZyB3aXRoIG1vY2tpbmcgZGF0ZXMsIG9yIG90aGVyIGJ1aWx0aW4gY2xhc3NlcywKIGlzIGRpc2N1c3NlZCBpbiBgdGhpcyBibG9nIGVudHJ5Ci08aHR0cDovL3d3dy53aWxsaWFtam9obmJlcnQuY29tLzIwMTEvMDcvaG93LXRvLXVuaXQtdGVzdGluZy1pbi1kamFuZ28td2l0aC1tb2NraW5nLWFuZC1wYXRjaGluZy8+YF8uCis8aHR0cHM6Ly93aWxsaWFtYmVydC5vbmxpbmUvMjAxMS8wNy9ob3ctdG8tdW5pdC10ZXN0aW5nLWluLWRqYW5nby13aXRoLW1vY2tpbmctYW5kLXBhdGNoaW5nLz5gXy4KIAogCiBNb2NraW5nIGEgR2VuZXJhdG9yIE1ldGhvZApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIFNvbWV0aW1lcyB0aGlzIGlzIGluY29udmVuaWVudC4gRm9yIGV4YW1wbGUsIGBvbmUgdXNlcgogPGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvbW9jay9pc3N1ZXMvZGV0YWlsP2lkPTEwNT5gXyBpcyBzdWJjbGFzc2luZyBtb2NrIHRvCiBjcmVhdGVkIGEgYFR3aXN0ZWQgYWRhcHRvcgotPGh0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS9kb2N1bWVudHMvMTEuMC4wL2FwaS90d2lzdGVkLnB5dGhvbi5jb21wb25lbnRzLmh0bWw+YF8uCis8aHR0cHM6Ly90d2lzdGVkbWF0cml4LmNvbS9kb2N1bWVudHMvMTEuMC4wL2FwaS90d2lzdGVkLnB5dGhvbi5jb21wb25lbnRzLmh0bWw+YF8uCiBIYXZpbmcgdGhpcyBhcHBsaWVkIHRvIGF0dHJpYnV0ZXMgdG9vIGFjdHVhbGx5IGNhdXNlcyBlcnJvcnMuCiAKIGBgTW9ja2BgIChpbiBhbGwgaXRzIGZsYXZvdXJzKSB1c2VzIGEgbWV0aG9kIGNhbGxlZCBgYF9nZXRfY2hpbGRfbW9ja2BgIHRvIGNyZWF0ZQpAQCAtMTI1MSw3ICsxMjUxLDcgQEAKIDpleGM6YEFzc2VydGlvbkVycm9yYCBkaXJlY3RseSBhbmQgcHJvdmlkZSBhIG1vcmUgdXNlZnVsIGZhaWx1cmUgbWVzc2FnZS4KIAogQXMgb2YgdmVyc2lvbiAxLjUsIHRoZSBQeXRob24gdGVzdGluZyBsaWJyYXJ5IGBQeUhhbWNyZXN0Ci08aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9QeUhhbWNyZXN0PmBfIHByb3ZpZGVzIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSwKKzxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3Mub3JnLz5gXyBwcm92aWRlcyBzaW1pbGFyIGZ1bmN0aW9uYWxpdHksCiB0aGF0IG1heSBiZSB1c2VmdWwgaGVyZSwgaW4gdGhlIGZvcm0gb2YgaXRzIGVxdWFsaXR5IG1hdGNoZXIKIChgaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eQotPGh0dHA6Ly9weXRob25ob3N0ZWQub3JnL1B5SGFtY3Jlc3QvaW50ZWdyYXRpb24uaHRtbCNoYW1jcmVzdC5saWJyYXJ5LmludGVncmF0aW9uLm1hdGNoX2VxdWFsaXR5Lm1hdGNoX2VxdWFsaXR5PmBfKS4KKzxodHRwczovL3B5aGFtY3Jlc3QucmVhZHRoZWRvY3Mub3JnL2VuL3JlbGVhc2UtMS44L2ludGVncmF0aW9uLyNtb2R1bGUtaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eT5gXykuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CmluZGV4IGQ3ZDczNWMuLmMxM2YwOTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CkBAIC00LDExICs0LDE2IEBACiAKIC4uIG1vZHVsZTo6IHVuaXR0ZXN0Lm1vY2sKICAgIDpzeW5vcHNpczogTW9jayBvYmplY3QgbGlicmFyeS4KKwogLi4gbW9kdWxlYXV0aG9yOjogTWljaGFlbCBGb29yZCA8bWljaGFlbEBweXRob24ub3JnPgogLi4gY3VycmVudG1vZHVsZTo6IHVuaXR0ZXN0Lm1vY2sKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3VuaXR0ZXN0L21vY2sucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIDptb2Q6YHVuaXR0ZXN0Lm1vY2tgIGlzIGEgbGlicmFyeSBmb3IgdGVzdGluZyBpbiBQeXRob24uIEl0IGFsbG93cyB5b3UgdG8KIHJlcGxhY2UgcGFydHMgb2YgeW91ciBzeXN0ZW0gdW5kZXIgdGVzdCB3aXRoIG1vY2sgb2JqZWN0cyBhbmQgbWFrZSBhc3NlcnRpb25zCiBhYm91dCBob3cgdGhleSBoYXZlIGJlZW4gdXNlZC4KQEAgLTMyLDggKzM3LDYgQEAKIFRoZXJlIGlzIGEgYmFja3BvcnQgb2YgOm1vZDpgdW5pdHRlc3QubW9ja2AgZm9yIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLAogYXZhaWxhYmxlIGFzIGBtb2NrIG9uIFB5UEkgPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvbW9jaz5gXy4KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdW5pdHRlc3QvbW9jay5weWAKLQogCiBRdWljayBHdWlkZQogLS0tLS0tLS0tLS0KQEAgLTE5OCw3ICsyMDEsNyBAQAogdGhlICpuZXdfY2FsbGFibGUqIGFyZ3VtZW50IHRvIDpmdW5jOmBwYXRjaGAuCiAKIAotLi4gY2xhc3M6OiBNb2NrKHNwZWM9Tm9uZSwgc2lkZV9lZmZlY3Q9Tm9uZSwgcmV0dXJuX3ZhbHVlPURFRkFVTFQsIHdyYXBzPU5vbmUsIG5hbWU9Tm9uZSwgc3BlY19zZXQ9Tm9uZSwgKiprd2FyZ3MpCisuLiBjbGFzczo6IE1vY2soc3BlYz1Ob25lLCBzaWRlX2VmZmVjdD1Ob25lLCByZXR1cm5fdmFsdWU9REVGQVVMVCwgd3JhcHM9Tm9uZSwgbmFtZT1Ob25lLCBzcGVjX3NldD1Ob25lLCB1bnNhZmU9RmFsc2UsICoqa3dhcmdzKQogCiAgICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgTW9ja2Agb2JqZWN0LiA6Y2xhc3M6YE1vY2tgIHRha2VzIHNldmVyYWwgb3B0aW9uYWwgYXJndW1lbnRzCiAgICAgdGhhdCBzcGVjaWZ5IHRoZSBiZWhhdmlvdXIgb2YgdGhlIE1vY2sgb2JqZWN0OgpAQCAtMjM1LDYgKzIzOCwxMiBAQAogICAgICAgdGhpcyBpcyBhIG5ldyBNb2NrIChjcmVhdGVkIG9uIGZpcnN0IGFjY2VzcykuIFNlZSB0aGUKICAgICAgIDphdHRyOmByZXR1cm5fdmFsdWVgIGF0dHJpYnV0ZS4KIAorICAgICogKnVuc2FmZSo6IEJ5IGRlZmF1bHQgaWYgYW55IGF0dHJpYnV0ZSBzdGFydHMgd2l0aCAqYXNzZXJ0KiBvcgorICAgICAgKmFzc3JldCogd2lsbCByYWlzZSBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuIFBhc3NpbmcgYGB1bnNhZmU9VHJ1ZWBgCisgICAgICB3aWxsIGFsbG93IGFjY2VzcyB0byB0aGVzZSBhdHRyaWJ1dGVzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogICAgICogKndyYXBzKjogSXRlbSBmb3IgdGhlIG1vY2sgb2JqZWN0IHRvIHdyYXAuIElmICp3cmFwcyogaXMgbm90IE5vbmUgdGhlbgogICAgICAgY2FsbGluZyB0aGUgTW9jayB3aWxsIHBhc3MgdGhlIGNhbGwgdGhyb3VnaCB0byB0aGUgd3JhcHBlZCBvYmplY3QKICAgICAgIChyZXR1cm5pbmcgdGhlIHJlYWwgcmVzdWx0KS4gQXR0cmlidXRlIGFjY2VzcyBvbiB0aGUgbW9jayB3aWxsIHJldHVybiBhCkBAIC0zMTUsNiArMzI0LDIwIEBACiAgICAgICAgICAgICA+Pj4gY2FsbHMgPSBbY2FsbCg0KSwgY2FsbCgyKSwgY2FsbCgzKV0KICAgICAgICAgICAgID4+PiBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMsIGFueV9vcmRlcj1UcnVlKQogCisgICAgLi4gbWV0aG9kOjogYXNzZXJ0X25vdF9jYWxsZWQoKQorCisgICAgICAgIEFzc2VydCB0aGUgbW9jayB3YXMgbmV2ZXIgY2FsbGVkLgorCisgICAgICAgICAgICA+Pj4gbSA9IE1vY2soKQorICAgICAgICAgICAgPj4+IG0uaGVsbG8uYXNzZXJ0X25vdF9jYWxsZWQoKQorICAgICAgICAgICAgPj4+IG9iaiA9IG0uaGVsbG8oKQorICAgICAgICAgICAgPj4+IG0uaGVsbG8uYXNzZXJ0X25vdF9jYWxsZWQoKQorICAgICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yOiBFeHBlY3RlZCAnaGVsbG8nIHRvIG5vdCBoYXZlIGJlZW4gY2FsbGVkLiBDYWxsZWQgMSB0aW1lcy4KKworICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKwogCiAgICAgLi4gbWV0aG9kOjogcmVzZXRfbW9jaygpCiAKQEAgLTEwMzIsNiArMTA1NSwxMiBAQAogICAgIGRlZmF1bHQgYmVjYXVzZSBpdCBjYW4gYmUgZGFuZ2Vyb3VzLiBXaXRoIGl0IHN3aXRjaGVkIG9uIHlvdSBjYW4gd3JpdGUKICAgICBwYXNzaW5nIHRlc3RzIGFnYWluc3QgQVBJcyB0aGF0IGRvbid0IGFjdHVhbGx5IGV4aXN0IQogCisgICAgLi4gbm90ZTo6CisKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICAgICAgSWYgeW91IGFyZSBwYXRjaGluZyBidWlsdGlucyBpbiBhIG1vZHVsZSB0aGVuIHlvdSBkb24ndAorICAgICAgICAgICBuZWVkIHRvIHBhc3MgYGBjcmVhdGU9VHJ1ZWBgLCBpdCB3aWxsIGJlIGFkZGVkIGJ5IGRlZmF1bHQuCisKICAgICBQYXRjaCBjYW4gYmUgdXNlZCBhcyBhIDpjbGFzczpgVGVzdENhc2VgIGNsYXNzIGRlY29yYXRvci4gSXQgd29ya3MgYnkKICAgICBkZWNvcmF0aW5nIGVhY2ggdGVzdCBtZXRob2QgaW4gdGhlIGNsYXNzLiBUaGlzIHJlZHVjZXMgdGhlIGJvaWxlcnBsYXRlCiAgICAgY29kZSB3aGVuIHlvdXIgdGVzdCBtZXRob2RzIHNoYXJlIGEgY29tbW9uIHBhdGNoaW5ncyBzZXQuIDpmdW5jOmBwYXRjaGAgZmluZHMKQEAgLTE0MDMsNiArMTQzMiwyMiBAQAogICAgIFN0b3AgYWxsIGFjdGl2ZSBwYXRjaGVzLiBPbmx5IHN0b3BzIHBhdGNoZXMgc3RhcnRlZCB3aXRoIGBgc3RhcnRgYC4KIAogCisuLiBfcGF0Y2gtYnVpbHRpbnM6CisKK3BhdGNoIGJ1aWx0aW5zCit+fn5+fn5+fn5+fn5+fgorWW91IGNhbiBwYXRjaCBhbnkgYnVpbHRpbnMgd2l0aGluIGEgbW9kdWxlLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgcGF0Y2hlcworYnVpbHRpbiA6ZnVuYzpgb3JkYDoKKworICAgID4+PiBAcGF0Y2goJ19fbWFpbl9fLm9yZCcpCisgICAgLi4uIGRlZiB0ZXN0KG1vY2tfb3JkKToKKyAgICAuLi4gICAgIG1vY2tfb3JkLnJldHVybl92YWx1ZSA9IDEwMQorICAgIC4uLiAgICAgcHJpbnQob3JkKCdjJykpCisgICAgLi4uCisgICAgPj4+IHRlc3QoKQorICAgIDEwMQorCisKIFRFU1RfUFJFRklYCiB+fn5+fn5+fn5+fgogCkBAIC0xNTg3LDcgKzE2MzIsNyBAQAogKiBDb250ZXh0IG1hbmFnZXI6IGBgX19lbnRlcl9fYGAgYW5kIGBgX19leGl0X19gYAogKiBVbmFyeSBudW1lcmljIG1ldGhvZHM6IGBgX19uZWdfX2BgLCBgYF9fcG9zX19gYCBhbmQgYGBfX2ludmVydF9fYGAKICogVGhlIG51bWVyaWMgbWV0aG9kcyAoaW5jbHVkaW5nIHJpZ2h0IGhhbmQgYW5kIGluLXBsYWNlIHZhcmlhbnRzKToKLSAgYGBfX2FkZF9fYGAsIGBgX19zdWJfX2BgLCBgYF9fbXVsX19gYCwgYGBfX2Rpdl9fYGAsIGBgX190cnVlZGl2X19gYCwKKyAgYGBfX2FkZF9fYGAsIGBgX19zdWJfX2BgLCBgYF9fbXVsX19gYCwgYGBfX21hdG11bF9fYGAsIGBgX19kaXZfX2BgLCBgYF9fdHJ1ZWRpdl9fYGAsCiAgIGBgX19mbG9vcmRpdl9fYGAsIGBgX19tb2RfX2BgLCBgYF9fZGl2bW9kX19gYCwgYGBfX2xzaGlmdF9fYGAsCiAgIGBgX19yc2hpZnRfX2BgLCBgYF9fYW5kX19gYCwgYGBfX3hvcl9fYGAsIGBgX19vcl9fYGAsIGFuZCBgYF9fcG93X19gYAogKiBOdW1lcmljIGNvbnZlcnNpb24gbWV0aG9kczogYGBfX2NvbXBsZXhfX2BgLCBgYF9faW50X19gYCwgYGBfX2Zsb2F0X19gYApAQCAtMTY1NSw3ICsxNzAwLDcgQEAKICogYGBfX2dlX19gYDogTm90SW1wbGVtZW50ZWQKICogYGBfX2ludF9fYGA6IDEKICogYGBfX2NvbnRhaW5zX19gYDogRmFsc2UKLSogYGBfX2xlbl9fYGA6IDEKKyogYGBfX2xlbl9fYGA6IDAKICogYGBfX2l0ZXJfX2BgOiBpdGVyKFtdKQogKiBgYF9fZXhpdF9fYGA6IEZhbHNlCiAqIGBgX19jb21wbGV4X19gYDogMWoKQEAgLTIwMDYsNyArMjA1MSw3IEBACiAgICAgICBUaGUgbW9jayBvZiA6bWV0aDpgfmlvLklPQmFzZS5yZWFkYCBjaGFuZ2VkIHRvIGNvbnN1bWUgKnJlYWRfZGF0YSogcmF0aGVyCiAgICAgICB0aGFuIHJldHVybmluZyBpdCBvbiBlYWNoIGNhbGwuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CiAgICAgICAqcmVhZF9kYXRhKiBpcyBub3cgcmVzZXQgb24gZWFjaCBjYWxsIHRvIHRoZSAqbW9jayouCiAKIFVzaW5nIDpmdW5jOmBvcGVuYCBhcyBhIGNvbnRleHQgbWFuYWdlciBpcyBhIGdyZWF0IHdheSB0byBlbnN1cmUgeW91ciBmaWxlIGhhbmRsZXMKQEAgLTIwMjMsNyArMjA2OCw3IEBACiBlbm91Z2ggdGhhdCBhIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VmdWwuCiAKICAgICA+Pj4gbSA9IG1vY2tfb3BlbigpCi0gICAgPj4+IHdpdGggcGF0Y2goJ19fbWFpbl9fLm9wZW4nLCBtLCBjcmVhdGU9VHJ1ZSk6CisgICAgPj4+IHdpdGggcGF0Y2goJ19fbWFpbl9fLm9wZW4nLCBtKToKICAgICAuLi4gICAgIHdpdGggb3BlbignZm9vJywgJ3cnKSBhcyBoOgogICAgIC4uLiAgICAgICAgIGgud3JpdGUoJ3NvbWUgc3R1ZmYnKQogICAgIC4uLgpAQCAtMjAzOCw3ICsyMDgzLDcgQEAKIAogQW5kIGZvciByZWFkaW5nIGZpbGVzOgogCi0gICAgPj4+IHdpdGggcGF0Y2goJ19fbWFpbl9fLm9wZW4nLCBtb2NrX29wZW4ocmVhZF9kYXRhPSdiaWJibGUnKSwgY3JlYXRlPVRydWUpIGFzIG06CisgICAgPj4+IHdpdGggcGF0Y2goJ19fbWFpbl9fLm9wZW4nLCBtb2NrX29wZW4ocmVhZF9kYXRhPSdiaWJibGUnKSkgYXMgbToKICAgICAuLi4gICAgIHdpdGggb3BlbignZm9vJykgYXMgaDoKICAgICAuLi4gICAgICAgICByZXN1bHQgPSBoLnJlYWQoKQogICAgIC4uLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CmluZGV4IGE4OTZmYzEuLjBmYzAyYzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKQEAgLTMsMTEgKzMsMTYgQEAKIAogLi4gbW9kdWxlOjogdW5pdHRlc3QKICAgIDpzeW5vcHNpczogVW5pdCB0ZXN0aW5nIGZyYW1ld29yayBmb3IgUHl0aG9uLgorCiAuLiBtb2R1bGVhdXRob3I6OiBTdGV2ZSBQdXJjZWxsIDxzdGVwaGVuX3B1cmNlbGxAeWFob28uY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZXZlIFB1cmNlbGwgPHN0ZXBoZW5fcHVyY2VsbEB5YWhvby5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3VuaXR0ZXN0L19faW5pdF9fLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiAoSWYgeW91IGFyZSBhbHJlYWR5IGZhbWlsaWFyIHdpdGggdGhlIGJhc2ljIGNvbmNlcHRzIG9mIHRlc3RpbmcsIHlvdSBtaWdodCB3YW50CiB0byBza2lwIHRvIDpyZWY6YHRoZSBsaXN0IG9mIGFzc2VydCBtZXRob2RzIDxhc3NlcnQtbWV0aG9kcz5gLikKIApAQCAtNjcsNyArNzIsNyBAQAogICAgYSBHVUkgdG9vbCBmb3IgdGVzdCBkaXNjb3ZlcnkgYW5kIGV4ZWN1dGlvbi4gIFRoaXMgaXMgaW50ZW5kZWQgbGFyZ2VseSBmb3IgZWFzZSBvZiB1c2UKICAgIGZvciB0aG9zZSBuZXcgdG8gdW5pdCB0ZXN0aW5nLiAgRm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIGl0IGlzCiAgICByZWNvbW1lbmRlZCB0aGF0IHRlc3RzIGJlIGRyaXZlbiBieSBhIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gc3lzdGVtIHN1Y2ggYXMKLSAgIGBCdWlsZGJvdCA8aHR0cDovL2J1aWxkYm90Lm5ldC8+YF8sIGBKZW5raW5zIDxodHRwOi8vamVua2lucy1jaS5vcmcvPmBfCisgICBgQnVpbGRib3QgPGh0dHBzOi8vYnVpbGRib3QubmV0Lz5gXywgYEplbmtpbnMgPGh0dHBzOi8vamVua2lucy5pby8+YF8KICAgIG9yICBgSHVkc29uIDxodHRwOi8vaHVkc29uLWNpLm9yZy8+YF8uCiAKIApAQCAtODYsMTkgKzkxLDE5IEBACiAKICAgY2xhc3MgVGVzdFN0cmluZ01ldGhvZHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHRlc3RfdXBwZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ZvbycudXBwZXIoKSwgJ0ZPTycpCisgICAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKKyAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28nLnVwcGVyKCksICdGT08nKQogCi0gICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGT08nLmlzdXBwZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnRm9vJy5pc3VwcGVyKCkpCisgICAgICBkZWYgdGVzdF9pc3VwcGVyKHNlbGYpOgorICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRk9PJy5pc3VwcGVyKCkpCisgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnRm9vJy5pc3VwcGVyKCkpCiAKLSAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKLSAgICAgICAgcyA9ICdoZWxsbyB3b3JsZCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnNwbGl0KCksIFsnaGVsbG8nLCAnd29ybGQnXSkKLSAgICAgICAgIyBjaGVjayB0aGF0IHMuc3BsaXQgZmFpbHMgd2hlbiB0aGUgc2VwYXJhdG9yIGlzIG5vdCBhIHN0cmluZwotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBzLnNwbGl0KDIpCisgICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKKyAgICAgICAgICBzID0gJ2hlbGxvIHdvcmxkJworICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zcGxpdCgpLCBbJ2hlbGxvJywgJ3dvcmxkJ10pCisgICAgICAgICAgIyBjaGVjayB0aGF0IHMuc3BsaXQgZmFpbHMgd2hlbiB0aGUgc2VwYXJhdG9yIGlzIG5vdCBhIHN0cmluZworICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgcy5zcGxpdCgyKQogCiAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICB1bml0dGVzdC5tYWluKCkKQEAgLTIxNCw5ICsyMTksMTYgQEAKIAogICAgU3RvcCB0aGUgdGVzdCBydW4gb24gdGhlIGZpcnN0IGVycm9yIG9yIGZhaWx1cmUuCiAKKy4uIGNtZG9wdGlvbjo6IC0tbG9jYWxzCisKKyAgIFNob3cgbG9jYWwgdmFyaWFibGVzIGluIHRyYWNlYmFja3MuCisKIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogICAgVGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIGBgLWJgYCwgYGAtY2BgIGFuZCBgYC1mYGAgd2VyZSBhZGRlZC4KIAorLi4gdmVyc2lvbmFkZGVkOjogMy41CisgICBUaGUgY29tbWFuZC1saW5lIG9wdGlvbiBgYC0tbG9jYWxzYGAuCisKIFRoZSBjb21tYW5kIGxpbmUgY2FuIGFsc28gYmUgdXNlZCBmb3IgdGVzdCBkaXNjb3ZlcnksIGZvciBydW5uaW5nIGFsbCBvZiB0aGUKIHRlc3RzIGluIGEgcHJvamVjdCBvciBqdXN0IGEgc3Vic2V0LgogCkBAIC02NzMsMTAgKzY4NSwxMiBAQAogICAgICAgTWV0aG9kIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGVzdCBtZXRob2QgaGFzIGJlZW4gY2FsbGVkIGFuZCB0aGUKICAgICAgIHJlc3VsdCByZWNvcmRlZC4gIFRoaXMgaXMgY2FsbGVkIGV2ZW4gaWYgdGhlIHRlc3QgbWV0aG9kIHJhaXNlZCBhbgogICAgICAgZXhjZXB0aW9uLCBzbyB0aGUgaW1wbGVtZW50YXRpb24gaW4gc3ViY2xhc3NlcyBtYXkgbmVlZCB0byBiZSBwYXJ0aWN1bGFybHkKLSAgICAgIGNhcmVmdWwgYWJvdXQgY2hlY2tpbmcgaW50ZXJuYWwgc3RhdGUuICBBbnkgZXhjZXB0aW9uLCBvdGhlciB0aGFuIDpleGM6YEFzc2VydGlvbkVycm9yYAotICAgICAgb3IgOmV4YzpgU2tpcFRlc3RgLCByYWlzZWQgYnkgdGhpcyBtZXRob2Qgd2lsbCBiZSBjb25zaWRlcmVkIGFuIGVycm9yIHJhdGhlciB0aGFuIGEKLSAgICAgIHRlc3QgZmFpbHVyZS4gIFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlIDptZXRoOmBzZXRVcGAgc3VjY2VlZHMsCi0gICAgICByZWdhcmRsZXNzIG9mIHRoZSBvdXRjb21lIG9mIHRoZSB0ZXN0IG1ldGhvZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgorICAgICAgY2FyZWZ1bCBhYm91dCBjaGVja2luZyBpbnRlcm5hbCBzdGF0ZS4gIEFueSBleGNlcHRpb24sIG90aGVyIHRoYW4KKyAgICAgIDpleGM6YEFzc2VydGlvbkVycm9yYCBvciA6ZXhjOmBTa2lwVGVzdGAsIHJhaXNlZCBieSB0aGlzIG1ldGhvZCB3aWxsIGJlCisgICAgICBjb25zaWRlcmVkIGFuIGFkZGl0aW9uYWwgZXJyb3IgcmF0aGVyIHRoYW4gYSB0ZXN0IGZhaWx1cmUgKHRodXMgaW5jcmVhc2luZworICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiByZXBvcnRlZCBlcnJvcnMpLiBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmCisgICAgICB0aGUgOm1ldGg6YHNldFVwYCBzdWNjZWVkcywgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSBvZiB0aGUgdGVzdCBtZXRob2QuCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCiAKIAogICAgLi4gbWV0aG9kOjogc2V0VXBDbGFzcygpCkBAIC03NTUsOCArNzY5LDkgQEAKIAogICAgLi4gX2Fzc2VydC1tZXRob2RzOgogCi0gICBUaGUgOmNsYXNzOmBUZXN0Q2FzZWAgY2xhc3MgcHJvdmlkZXMgYSBudW1iZXIgb2YgbWV0aG9kcyB0byBjaGVjayBmb3IgYW5kCi0gICByZXBvcnQgZmFpbHVyZXMsIHN1Y2ggYXM6CisgICBUaGUgOmNsYXNzOmBUZXN0Q2FzZWAgY2xhc3MgcHJvdmlkZXMgc2V2ZXJhbCBhc3NlcnQgbWV0aG9kcyB0byBjaGVjayBmb3IgYW5kCisgICByZXBvcnQgZmFpbHVyZXMuICBUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgbWV0aG9kcworICAgKHNlZSB0aGUgdGFibGVzIGJlbG93IGZvciBtb3JlIGFzc2VydCBtZXRob2RzKToKIAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKICAgIHwgTWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2hlY2tzIHRoYXQgICAgICAgICAgICAgICAgIHwgTmV3IGluICAgICAgICB8CkBAIC04NzcsNyArODkyLDcgQEAKIAogCiAKLSAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hlY2sgdGhlIHByb2R1Y3Rpb24gb2YgZXhjZXB0aW9ucywgd2FybmluZ3MgYW5kCisgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoZSBwcm9kdWN0aW9uIG9mIGV4Y2VwdGlvbnMsIHdhcm5pbmdzLCBhbmQKICAgIGxvZyBtZXNzYWdlcyB1c2luZyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwpAQCAtMTU0MSw2ICsxNTU2LDIwIEBACiAgICA6ZGF0YTpgdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXJgLiAgVXNpbmcgYSBzdWJjbGFzcyBvciBpbnN0YW5jZSwgaG93ZXZlciwKICAgIGFsbG93cyBjdXN0b21pemF0aW9uIG9mIHNvbWUgY29uZmlndXJhYmxlIHByb3BlcnRpZXMuCiAKKyAgIDpjbGFzczpgVGVzdExvYWRlcmAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworCisgICAuLiBhdHRyaWJ1dGU6OiBlcnJvcnMKKworICAgICAgQSBsaXN0IG9mIHRoZSBub24tZmF0YWwgZXJyb3JzIGVuY291bnRlcmVkIHdoaWxlIGxvYWRpbmcgdGVzdHMuIE5vdCByZXNldAorICAgICAgYnkgdGhlIGxvYWRlciBhdCBhbnkgcG9pbnQuIEZhdGFsIGVycm9ycyBhcmUgc2lnbmFsbGVkIGJ5IHRoZSByZWxldmFudAorICAgICAgYSBtZXRob2QgcmFpc2luZyBhbiBleGNlcHRpb24gdG8gdGhlIGNhbGxlci4gTm9uLWZhdGFsIGVycm9ycyBhcmUgYWxzbworICAgICAgaW5kaWNhdGVkIGJ5IGEgc3ludGhldGljIHRlc3QgdGhhdCB3aWxsIHJhaXNlIHRoZSBvcmlnaW5hbCBlcnJvciB3aGVuCisgICAgICBydW4uCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisKICAgIDpjbGFzczpgVGVzdExvYWRlcmAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogCkBAIC0xNTU2LDcgKzE1ODUsNyBAQAogICAgICAgY2FzZSBpcyBjcmVhdGVkIGZvciB0aGF0IG1ldGhvZCBpbnN0ZWFkLgogCiAKLSAgIC4uIG1ldGhvZDo6IGxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQorICAgLi4gbWV0aG9kOjogbG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUsIHBhdHRlcm49Tm9uZSkKIAogICAgICAgUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gbW9kdWxlLiBUaGlzCiAgICAgICBtZXRob2Qgc2VhcmNoZXMgKm1vZHVsZSogZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIDpjbGFzczpgVGVzdENhc2VgIGFuZApAQCAtMTU3MywxMSArMTYwMiwxOCBAQAogCiAgICAgICBJZiBhIG1vZHVsZSBwcm92aWRlcyBhIGBgbG9hZF90ZXN0c2BgIGZ1bmN0aW9uIGl0IHdpbGwgYmUgY2FsbGVkIHRvCiAgICAgICBsb2FkIHRoZSB0ZXN0cy4gVGhpcyBhbGxvd3MgbW9kdWxlcyB0byBjdXN0b21pemUgdGVzdCBsb2FkaW5nLgotICAgICAgVGhpcyBpcyB0aGUgYGxvYWRfdGVzdHMgcHJvdG9jb2xgXy4KKyAgICAgIFRoaXMgaXMgdGhlIGBsb2FkX3Rlc3RzIHByb3RvY29sYF8uICBUaGUgKnBhdHRlcm4qIGFyZ3VtZW50IGlzIHBhc3NlZCBhcworICAgICAgdGhlIHRoaXJkIGFyZ3VtZW50IHRvIGBgbG9hZF90ZXN0c2BgLgogCiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgICAgU3VwcG9ydCBmb3IgYGBsb2FkX3Rlc3RzYGAgYWRkZWQuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICAgICBUaGUgdW5kb2N1bWVudGVkIGFuZCB1bm9mZmljaWFsICp1c2VfbG9hZF90ZXN0cyogZGVmYXVsdCBhcmd1bWVudCBpcworICAgICAgICAgZGVwcmVjYXRlZCBhbmQgaWdub3JlZCwgYWx0aG91Z2ggaXQgaXMgc3RpbGwgYWNjZXB0ZWQgZm9yIGJhY2t3YXJkCisgICAgICAgICBjb21wYXRpYmlsaXR5LiAgVGhlIG1ldGhvZCBhbHNvIG5vdyBhY2NlcHRzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50CisgICAgICAgICAqcGF0dGVybiogd2hpY2ggaXMgcGFzc2VkIHRvIGBgbG9hZF90ZXN0c2BgIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4KKwogCiAgICAuLiBtZXRob2Q6OiBsb2FkVGVzdHNGcm9tTmFtZShuYW1lLCBtb2R1bGU9Tm9uZSkKIApAQCAtMTYwMyw2ICsxNjM5LDEyIEBACiAKICAgICAgIFRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyAqbmFtZSogcmVsYXRpdmUgdG8gdGhlIGdpdmVuICptb2R1bGUqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgSWYgYW4gOmV4YzpgSW1wb3J0RXJyb3JgIG9yIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBvY2N1cnMgd2hpbGUgdHJhdmVyc2luZworICAgICAgKm5hbWUqIHRoZW4gYSBzeW50aGV0aWMgdGVzdCB0aGF0IHJhaXNlcyB0aGF0IGVycm9yIHdoZW4gcnVuIHdpbGwgYmUKKyAgICAgIHJldHVybmVkLiBUaGVzZSBlcnJvcnMgYXJlIGluY2x1ZGVkIGluIHRoZSBlcnJvcnMgYWNjdW11bGF0ZWQgYnkKKyAgICAgIHNlbGYuZXJyb3JzLgorCiAKICAgIC4uIG1ldGhvZDo6IGxvYWRUZXN0c0Zyb21OYW1lcyhuYW1lcywgbW9kdWxlPU5vbmUpCiAKQEAgLTE2MjksMTggKzE2NzEsMjIgQEAKICAgICAgIHRoZSBzdGFydCBkaXJlY3RvcnkgaXMgbm90IHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IHRoZW4gdGhlIHRvcCBsZXZlbAogICAgICAgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkuCiAKLSAgICAgIElmIGltcG9ydGluZyBhIG1vZHVsZSBmYWlscywgZm9yIGV4YW1wbGUgZHVlIHRvIGEgc3ludGF4IGVycm9yLCB0aGVuIHRoaXMKLSAgICAgIHdpbGwgYmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgZXJyb3IgYW5kIGRpc2NvdmVyeSB3aWxsIGNvbnRpbnVlLiAgSWYgdGhlCi0gICAgICBpbXBvcnQgZmFpbHVyZSBpcyBkdWUgdG8gOmV4YzpgU2tpcFRlc3RgIGJlaW5nIHJhaXNlZCwgaXQgd2lsbCBiZSByZWNvcmRlZAotICAgICAgYXMgYSBza2lwIGluc3RlYWQgb2YgYW4gZXJyb3IuCisgICAgICBJZiBpbXBvcnRpbmcgYSBtb2R1bGUgZmFpbHMsIGZvciBleGFtcGxlIGR1ZSB0byBhIHN5bnRheCBlcnJvciwgdGhlbgorICAgICAgdGhpcyB3aWxsIGJlIHJlY29yZGVkIGFzIGEgc2luZ2xlIGVycm9yIGFuZCBkaXNjb3Zlcnkgd2lsbCBjb250aW51ZS4gIElmCisgICAgICB0aGUgaW1wb3J0IGZhaWx1cmUgaXMgZHVlIHRvIDpleGM6YFNraXBUZXN0YCBiZWluZyByYWlzZWQsIGl0IHdpbGwgYmUKKyAgICAgIHJlY29yZGVkIGFzIGEgc2tpcCBpbnN0ZWFkIG9mIGFuIGVycm9yLgogCi0gICAgICBJZiBhIHRlc3QgcGFja2FnZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCA6ZmlsZTpgX19pbml0X18ucHlgKSBtYXRjaGVzIHRoZQotICAgICAgcGF0dGVybiB0aGVuIHRoZSBwYWNrYWdlIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBgYGxvYWRfdGVzdHNgYAotICAgICAgZnVuY3Rpb24uIElmIHRoaXMgZXhpc3RzIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCAqbG9hZGVyKiwgKnRlc3RzKiwKLSAgICAgICpwYXR0ZXJuKi4KKyAgICAgIElmIGEgcGFja2FnZSAoYSBkaXJlY3RvcnkgY29udGFpbmluZyBhIGZpbGUgbmFtZWQgOmZpbGU6YF9faW5pdF9fLnB5YCkgaXMKKyAgICAgIGZvdW5kLCB0aGUgcGFja2FnZSB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgYGBsb2FkX3Rlc3RzYGAgZnVuY3Rpb24uIElmIHRoaXMKKyAgICAgIGV4aXN0cyB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkCisgICAgICBgYHBhY2thZ2UubG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKWBgLiBUZXN0IGRpc2NvdmVyeSB0YWtlcyBjYXJlCisgICAgICB0byBlbnN1cmUgdGhhdCBhIHBhY2thZ2UgaXMgb25seSBjaGVja2VkIGZvciB0ZXN0cyBvbmNlIGR1cmluZyBhbgorICAgICAgaW52b2NhdGlvbiwgZXZlbiBpZiB0aGUgbG9hZF90ZXN0cyBmdW5jdGlvbiBpdHNlbGYgY2FsbHMKKyAgICAgIGBgbG9hZGVyLmRpc2NvdmVyYGAuCiAKLSAgICAgIElmIGBgbG9hZF90ZXN0c2BgIGV4aXN0cyB0aGVuIGRpc2NvdmVyeSBkb2VzICpub3QqIHJlY3Vyc2UgaW50byB0aGUgcGFja2FnZSwKLSAgICAgIGBgbG9hZF90ZXN0c2BgIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGFsbCB0ZXN0cyBpbiB0aGUgcGFja2FnZS4KKyAgICAgIElmIGBgbG9hZF90ZXN0c2BgIGV4aXN0cyB0aGVuIGRpc2NvdmVyeSBkb2VzICpub3QqIHJlY3Vyc2UgaW50byB0aGUKKyAgICAgIHBhY2thZ2UsIGBgbG9hZF90ZXN0c2BgIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGFsbCB0ZXN0cyBpbiB0aGUKKyAgICAgIHBhY2thZ2UuCiAKICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlbGliZXJhdGVseSBub3Qgc3RvcmVkIGFzIGEgbG9hZGVyIGF0dHJpYnV0ZSBzbyB0aGF0CiAgICAgICBwYWNrYWdlcyBjYW4gY29udGludWUgZGlzY292ZXJ5IHRoZW1zZWx2ZXMuICp0b3BfbGV2ZWxfZGlyKiBpcyBzdG9yZWQgc28KQEAgLTE2NTksNiArMTcwNSwxMSBAQAogICAgICAgICAgICB0aGUgc2FtZSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtJ3Mgb3JkZXJpbmcgaXMgbm90CiAgICAgICAgICAgIGRlcGVuZGVudCBvbiBmaWxlIG5hbWUuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICAgICAgICBGb3VuZCBwYWNrYWdlcyBhcmUgbm93IGNoZWNrZWQgZm9yIGBgbG9hZF90ZXN0c2BgIHJlZ2FyZGxlc3Mgb2YKKyAgICAgICAgIHdoZXRoZXIgdGhlaXIgcGF0aCBtYXRjaGVzICpwYXR0ZXJuKiwgYmVjYXVzZSBpdCBpcyBpbXBvc3NpYmxlIGZvcgorICAgICAgICAgYSBwYWNrYWdlIG5hbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgcGF0dGVybi4KKwogCiAgICBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgb2YgYSA6Y2xhc3M6YFRlc3RMb2FkZXJgIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciBieQogICAgc3ViY2xhc3Npbmcgb3IgYXNzaWdubWVudCBvbiBhbiBpbnN0YW5jZToKQEAgLTE3NDEsMTIgKzE3OTIsMTAgQEAKIAogICAgICAgU2V0IHRvIGBgVHJ1ZWBgIHdoZW4gdGhlIGV4ZWN1dGlvbiBvZiB0ZXN0cyBzaG91bGQgc3RvcCBieSA6bWV0aDpgc3RvcGAuCiAKLQogICAgLi4gYXR0cmlidXRlOjogdGVzdHNSdW4KIAogICAgICAgVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLgogCi0KICAgIC4uIGF0dHJpYnV0ZTo6IGJ1ZmZlcgogCiAgICAgICBJZiBzZXQgdG8gdHJ1ZSwgYGBzeXMuc3Rkb3V0YGAgYW5kIGBgc3lzLnN0ZGVycmBgIHdpbGwgYmUgYnVmZmVyZWQgaW4gYmV0d2VlbgpAQCAtMTc1Niw3ICsxODA1LDYgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLQogICAgLi4gYXR0cmlidXRlOjogZmFpbGZhc3QKIAogICAgICAgSWYgc2V0IHRvIHRydWUgOm1ldGg6YHN0b3BgIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBmaXJzdCBmYWlsdXJlIG9yIGVycm9yLApAQCAtMTc2NCw2ICsxODEyLDExIEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiBhdHRyaWJ1dGU6OiB0Yl9sb2NhbHMKKworICAgICAgSWYgc2V0IHRvIHRydWUgdGhlbiBsb2NhbCB2YXJpYWJsZXMgd2lsbCBiZSBzaG93biBpbiB0cmFjZWJhY2tzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKIAogICAgLi4gbWV0aG9kOjogd2FzU3VjY2Vzc2Z1bCgpCiAKQEAgLTE3NzQsNyArMTgyNyw2IEBACiAgICAgICAgICBSZXR1cm5zIGBgRmFsc2VgYCBpZiB0aGVyZSB3ZXJlIGFueSA6YXR0cjpgdW5leHBlY3RlZFN1Y2Nlc3Nlc2AKICAgICAgICAgIGZyb20gdGVzdHMgbWFya2VkIHdpdGggdGhlIDpmdW5jOmBleHBlY3RlZEZhaWx1cmVgIGRlY29yYXRvci4KIAotCiAgICAuLiBtZXRob2Q6OiBzdG9wKCkKIAogICAgICAgVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCB0byBzaWduYWwgdGhhdCB0aGUgc2V0IG9mIHRlc3RzIGJlaW5nIHJ1biBzaG91bGQKQEAgLTE5MDYsMTIgKzE5NTgsMTQgQEAKIAogCiAuLiBjbGFzczo6IFRleHRUZXN0UnVubmVyKHN0cmVhbT1Ob25lLCBkZXNjcmlwdGlvbnM9VHJ1ZSwgdmVyYm9zaXR5PTEsIGZhaWxmYXN0PUZhbHNlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcj1GYWxzZSwgcmVzdWx0Y2xhc3M9Tm9uZSwgd2FybmluZ3M9Tm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyPUZhbHNlLCByZXN1bHRjbGFzcz1Ob25lLCB3YXJuaW5ncz1Ob25lLCAqLCB0Yl9sb2NhbHM9RmFsc2UpCiAKICAgIEEgYmFzaWMgdGVzdCBydW5uZXIgaW1wbGVtZW50YXRpb24gdGhhdCBvdXRwdXRzIHJlc3VsdHMgdG8gYSBzdHJlYW0uIElmICpzdHJlYW0qCiAgICBpcyBgYE5vbmVgYCwgdGhlIGRlZmF1bHQsIDpkYXRhOmBzeXMuc3RkZXJyYCBpcyB1c2VkIGFzIHRoZSBvdXRwdXQgc3RyZWFtLiBUaGlzIGNsYXNzCiAgICBoYXMgYSBmZXcgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMsIGJ1dCBpcyBlc3NlbnRpYWxseSB2ZXJ5IHNpbXBsZS4gIEdyYXBoaWNhbAotICAgYXBwbGljYXRpb25zIHdoaWNoIHJ1biB0ZXN0IHN1aXRlcyBzaG91bGQgcHJvdmlkZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zLgorICAgYXBwbGljYXRpb25zIHdoaWNoIHJ1biB0ZXN0IHN1aXRlcyBzaG91bGQgcHJvdmlkZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zLiBTdWNoCisgICBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFjY2VwdCBgYCoqa3dhcmdzYGAgYXMgdGhlIGludGVyZmFjZSB0byBjb25zdHJ1Y3QgcnVubmVycworICAgY2hhbmdlcyB3aGVuIGZlYXR1cmVzIGFyZSBhZGRlZCB0byB1bml0dGVzdC4KIAogICAgQnkgZGVmYXVsdCB0aGlzIHJ1bm5lciBzaG93cyA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgLAogICAgOmV4YzpgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ2AsIDpleGM6YFJlc291cmNlV2FybmluZ2AgYW5kCkBAIC0xOTMwLDYgKzE5ODQsOSBAQAogICAgICAgVGhlIGRlZmF1bHQgc3RyZWFtIGlzIHNldCB0byA6ZGF0YTpgc3lzLnN0ZGVycmAgYXQgaW5zdGFudGlhdGlvbiB0aW1lIHJhdGhlcgogICAgICAgdGhhbiBpbXBvcnQgdGltZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHRoZSB0Yl9sb2NhbHMgcGFyYW1ldGVyLgorCiAgICAuLiBtZXRob2Q6OiBfbWFrZVJlc3VsdCgpCiAKICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGluc3RhbmNlIG9mIGBgVGVzdFJlc3VsdGBgIHVzZWQgYnkgOm1ldGg6YHJ1bmAuCkBAIC0yMDI3LDcgKzIwODQsMTAgQEAKIElmIGEgdGVzdCBtb2R1bGUgZGVmaW5lcyBgYGxvYWRfdGVzdHNgYCBpdCB3aWxsIGJlIGNhbGxlZCBieQogOm1ldGg6YFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZWAgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo6CiAKLSAgICBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIE5vbmUpCisgICAgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKQorCit3aGVyZSAqcGF0dGVybiogaXMgcGFzc2VkIHN0cmFpZ2h0IHRocm91Z2ggZnJvbSBgYGxvYWRUZXN0c0Zyb21Nb2R1bGVgYC4gIEl0CitkZWZhdWx0cyB0byBgYE5vbmVgYC4KIAogSXQgc2hvdWxkIHJldHVybiBhIDpjbGFzczpgVGVzdFN1aXRlYC4KIApAQCAtMjA0OSwyMSArMjEwOSwxMiBAQAogICAgICAgICAgICAgc3VpdGUuYWRkVGVzdHModGVzdHMpCiAgICAgICAgIHJldHVybiBzdWl0ZQogCi1JZiBkaXNjb3ZlcnkgaXMgc3RhcnRlZCwgZWl0aGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSBvciBieSBjYWxsaW5nCi06bWV0aDpgVGVzdExvYWRlci5kaXNjb3ZlcmAsIHdpdGggYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBhIHBhY2thZ2UKLW5hbWUgdGhlbiB0aGUgcGFja2FnZSA6ZmlsZTpgX19pbml0X18ucHlgIHdpbGwgYmUgY2hlY2tlZCBmb3IgYGBsb2FkX3Rlc3RzYGAuCi0KLS4uIG5vdGU6OgotCi0gICBUaGUgZGVmYXVsdCBwYXR0ZXJuIGlzIGBgJ3Rlc3QqLnB5J2BgLiBUaGlzIG1hdGNoZXMgYWxsIFB5dGhvbiBmaWxlcwotICAgdGhhdCBzdGFydCB3aXRoIGBgJ3Rlc3QnYGAgYnV0ICp3b24ndCogbWF0Y2ggYW55IHRlc3QgZGlyZWN0b3JpZXMuCi0KLSAgIEEgcGF0dGVybiBsaWtlIGBgJ3Rlc3QqJ2BgIHdpbGwgbWF0Y2ggdGVzdCBwYWNrYWdlcyBhcyB3ZWxsIGFzCi0gICBtb2R1bGVzLgotCi1JZiB0aGUgcGFja2FnZSA6ZmlsZTpgX19pbml0X18ucHlgIGRlZmluZXMgYGBsb2FkX3Rlc3RzYGAgdGhlbiBpdCB3aWxsIGJlCi1jYWxsZWQgYW5kIGRpc2NvdmVyeSBub3QgY29udGludWVkIGludG8gdGhlIHBhY2thZ2UuIGBgbG9hZF90ZXN0c2BgCi1pcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo6CitJZiBkaXNjb3ZlcnkgaXMgc3RhcnRlZCBpbiBhIGRpcmVjdG9yeSBjb250YWluaW5nIGEgcGFja2FnZSwgZWl0aGVyIGZyb20gdGhlCitjb21tYW5kIGxpbmUgb3IgYnkgY2FsbGluZyA6bWV0aDpgVGVzdExvYWRlci5kaXNjb3ZlcmAsIHRoZW4gdGhlIHBhY2thZ2UKKzpmaWxlOmBfX2luaXRfXy5weWAgd2lsbCBiZSBjaGVja2VkIGZvciBgYGxvYWRfdGVzdHNgYC4gIElmIHRoYXQgZnVuY3Rpb24gZG9lcworbm90IGV4aXN0LCBkaXNjb3Zlcnkgd2lsbCByZWN1cnNlIGludG8gdGhlIHBhY2thZ2UgYXMgdGhvdWdoIGl0IHdlcmUganVzdAorYW5vdGhlciBkaXJlY3RvcnkuICBPdGhlcndpc2UsIGRpc2NvdmVyeSBvZiB0aGUgcGFja2FnZSdzIHRlc3RzIHdpbGwgYmUgbGVmdCB1cAordG8gYGBsb2FkX3Rlc3RzYGAgd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6OgogCiAgICAgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKQogCkBAIC0yMDgyLDYgKzIxMzMsMTEgQEAKICAgICAgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKICAgICAgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICBEaXNjb3Zlcnkgbm8gbG9uZ2VyIGNoZWNrcyBwYWNrYWdlIG5hbWVzIGZvciBtYXRjaGluZyAqcGF0dGVybiogZHVlIHRvIHRoZQorICAgaW1wb3NzaWJpbGl0eSBvZiBwYWNrYWdlIG5hbWVzIG1hdGNoaW5nIHRoZSBkZWZhdWx0IHBhdHRlcm4uCisKKwogCiBDbGFzcyBhbmQgTW9kdWxlIEZpeHR1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdAppbmRleCBmN2YwYzk3Li41NTE3YjA0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKQEAgLTMsOSArMywxMyBAQAogCiAuLiBtb2R1bGU6OiB1cmxsaWIuZXJyb3IKICAgIDpzeW5vcHNpczogRXhjZXB0aW9uIGNsYXNzZXMgcmFpc2VkIGJ5IHVybGxpYi5yZXF1ZXN0LgorCiAuLiBtb2R1bGVhdXRob3I6OiBKZXJlbXkgSHlsdG9uIDxqZXJlbXlAYWx1bS5taXQuZWR1PgogLi4gc2VjdGlvbmF1dGhvcjo6IFNlbnRoaWwgS3VtYXJhbiA8b3JzZW50aGlsQGdtYWlsLmNvbT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdXJsbGliL2Vycm9yLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgdXJsbGliLmVycm9yYCBtb2R1bGUgZGVmaW5lcyB0aGUgZXhjZXB0aW9uIGNsYXNzZXMgZm9yIGV4Y2VwdGlvbnMKIHJhaXNlZCBieSA6bW9kOmB1cmxsaWIucmVxdWVzdGAuICBUaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgaXMgOmV4YzpgVVJMRXJyb3JgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnBhcnNlLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5wYXJzZS5yc3QKaW5kZXggYWMwNGY5OS4uYzZkZTIzMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnBhcnNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucGFyc2UucnN0CkBAIC00LDYgKzQsNyBAQAogLi4gbW9kdWxlOjogdXJsbGliLnBhcnNlCiAgICA6c3lub3BzaXM6IFBhcnNlIFVSTHMgaW50byBvciBhc3NlbWJsZSB0aGVtIGZyb20gY29tcG9uZW50cy4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdXJsbGliL3BhcnNlLnB5YAogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IFdXVwpAQCAtMTIsOCArMTMsNiBAQAogICAgcGFpcjogVVJMOyBwYXJzaW5nCiAgICBwYWlyOiByZWxhdGl2ZTsgVVJMCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3VybGxpYi9wYXJzZS5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIHN0YW5kYXJkIGludGVyZmFjZSB0byBicmVhayBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkKQEAgLTI3MCw2ICsyNjksMTEgQEAKICAgIDpmdW5jOmB1cmx1bnNwbGl0YCwgcmVtb3ZpbmcgcG9zc2libGUgKnNjaGVtZSogYW5kICpuZXRsb2MqIHBhcnRzLgogCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisKKyAgICAgIEJlaGF2aW91ciB1cGRhdGVkIHRvIG1hdGNoIHRoZSBzZW1hbnRpY3MgZGVmaW5lZCBpbiA6cmZjOmAzOTg2YC4KKworCiAuLiBmdW5jdGlvbjo6IHVybGRlZnJhZyh1cmwpCiAKICAgIElmICp1cmwqIGNvbnRhaW5zIGEgZnJhZ21lbnQgaWRlbnRpZmllciwgcmV0dXJuIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiAqdXJsKgpAQCAtNTE2LDcgKzUyMCw4IEBACiAgICBFeGFtcGxlOiBgYHVucXVvdGVfdG9fYnl0ZXMoJ2ElMjYlRUYnKWBgIHlpZWxkcyBgYGInYSZceGVmJ2BgLgogCiAKLS4uIGZ1bmN0aW9uOjogdXJsZW5jb2RlKHF1ZXJ5LCBkb3NlcT1GYWxzZSwgc2FmZT0nJywgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpCisuLiBmdW5jdGlvbjo6IHVybGVuY29kZShxdWVyeSwgZG9zZXE9RmFsc2UsIHNhZmU9JycsIGVuY29kaW5nPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz1Ob25lLCBxdW90ZV92aWE9cXVvdGVfcGx1cykKIAogICAgQ29udmVydCBhIG1hcHBpbmcgb2JqZWN0IG9yIGEgc2VxdWVuY2Ugb2YgdHdvLWVsZW1lbnQgdHVwbGVzLCB3aGljaCBtYXkKICAgIGNvbnRhaW4gOmNsYXNzOmBzdHJgIG9yIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMsIHRvIGEgcGVyY2VudC1lbmNvZGVkIEFTQ0lJCkBAIC01MjYsOCArNTMxLDE2IEBACiAgICA6ZXhjOmBUeXBlRXJyb3JgLgogCiAgICBUaGUgcmVzdWx0aW5nIHN0cmluZyBpcyBhIHNlcmllcyBvZiBgYGtleT12YWx1ZWBgIHBhaXJzIHNlcGFyYXRlZCBieSBgYCcmJ2BgCi0gICBjaGFyYWN0ZXJzLCB3aGVyZSBib3RoICprZXkqIGFuZCAqdmFsdWUqIGFyZSBxdW90ZWQgdXNpbmcgOmZ1bmM6YHF1b3RlX3BsdXNgCi0gICBhYm92ZS4gV2hlbiBhIHNlcXVlbmNlIG9mIHR3by1lbGVtZW50IHR1cGxlcyBpcyB1c2VkIGFzIHRoZSAqcXVlcnkqCisgICBjaGFyYWN0ZXJzLCB3aGVyZSBib3RoICprZXkqIGFuZCAqdmFsdWUqIGFyZSBxdW90ZWQgdXNpbmcgdGhlICpxdW90ZV92aWEqCisgICBmdW5jdGlvbi4gIEJ5IGRlZmF1bHQsIDpmdW5jOmBxdW90ZV9wbHVzYCBpcyB1c2VkIHRvIHF1b3RlIHRoZSB2YWx1ZXMsIHdoaWNoCisgICBtZWFucyBzcGFjZXMgYXJlIHF1b3RlZCBhcyBhIGBgJysnYGAgY2hhcmFjdGVyIGFuZCAnLycgY2hhcmFjdGVycyBhcmUKKyAgIGVuY29kZWQgYXMgYGAlMkZgYCwgd2hpY2ggZm9sbG93cyB0aGUgc3RhbmRhcmQgZm9yIEdFVCByZXF1ZXN0cworICAgKGBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYGApLiAgQW4gYWx0ZXJuYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlCisgICBwYXNzZWQgYXMgKnF1b3RlX3ZpYSogaXMgOmZ1bmM6YHF1b3RlYCwgd2hpY2ggd2lsbCBlbmNvZGUgc3BhY2VzIGFzIGBgJTIwYGAKKyAgIGFuZCBub3QgZW5jb2RlICcvJyBjaGFyYWN0ZXJzLiAgRm9yIG1heGltdW0gY29udHJvbCBvZiB3aGF0IGlzIHF1b3RlZCwgdXNlCisgICBgYHF1b3RlYGAgYW5kIHNwZWNpZnkgYSB2YWx1ZSBmb3IgKnNhZmUqLgorCisgICBXaGVuIGEgc2VxdWVuY2Ugb2YgdHdvLWVsZW1lbnQgdHVwbGVzIGlzIHVzZWQgYXMgdGhlICpxdWVyeSoKICAgIGFyZ3VtZW50LCB0aGUgZmlyc3QgZWxlbWVudCBvZiBlYWNoIHR1cGxlIGlzIGEga2V5IGFuZCB0aGUgc2Vjb25kIGlzIGEKICAgIHZhbHVlLiBUaGUgdmFsdWUgZWxlbWVudCBpbiBpdHNlbGYgY2FuIGJlIGEgc2VxdWVuY2UgYW5kIGluIHRoYXQgY2FzZSwgaWYKICAgIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgKmRvc2VxKiBpcyBldmFsdWF0ZXMgdG8gKlRydWUqLCBpbmRpdmlkdWFsCkBAIC01MzYsNyArNTQ5LDcgQEAKICAgIHN0cmluZyB3aWxsIG1hdGNoIHRoZSBvcmRlciBvZiBwYXJhbWV0ZXIgdHVwbGVzIGluIHRoZSBzZXF1ZW5jZS4KIAogICAgVGhlICpzYWZlKiwgKmVuY29kaW5nKiwgYW5kICplcnJvcnMqIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkb3duIHRvCi0gICA6ZnVuYzpgcXVvdGVfcGx1c2AgKHRoZSAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiBwYXJhbWV0ZXJzIGFyZSBvbmx5IHBhc3NlZAorICAgKnF1b3RlX3ZpYSogKHRoZSAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiBwYXJhbWV0ZXJzIGFyZSBvbmx5IHBhc3NlZAogICAgd2hlbiBhIHF1ZXJ5IGVsZW1lbnQgaXMgYSA6Y2xhc3M6YHN0cmApLgogCiAgICBUbyByZXZlcnNlIHRoaXMgZW5jb2RpbmcgcHJvY2VzcywgOmZ1bmM6YHBhcnNlX3FzYCBhbmQgOmZ1bmM6YHBhcnNlX3FzbGAgYXJlCkBAIC01NDgsNiArNTYxLDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBRdWVyeSBwYXJhbWV0ZXIgc3VwcG9ydHMgYnl0ZXMgYW5kIHN0cmluZyBvYmplY3RzLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKyAgICAgICpxdW90ZV92aWEqIHBhcmFtZXRlci4KKwogCiAuLiBzZWVhbHNvOjoKIApAQCAtNTY1LDcgKzU4MSw3IEBACiAgICAgICBOYW1lcyAoVVJOcykgYW5kIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvcnMgKFVSTHMpLgogCiAgICA6cmZjOmAyMzY4YCAtIFRoZSBtYWlsdG8gVVJMIHNjaGVtZS4KLSAgICAgIFBhcnNpbmcgcmVxdWlyZW1lbnRzIGZvciBtYWlsdG8gdXJsIHNjaGVtZXMuCisgICAgICBQYXJzaW5nIHJlcXVpcmVtZW50cyBmb3IgbWFpbHRvIFVSTCBzY2hlbWVzLgogCiAgICA6cmZjOmAxODA4YCAtIFJlbGF0aXZlIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvcnMKICAgICAgIFRoaXMgUmVxdWVzdCBGb3IgQ29tbWVudHMgaW5jbHVkZXMgdGhlIHJ1bGVzIGZvciBqb2luaW5nIGFuIGFic29sdXRlIGFuZCBhCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKaW5kZXggNDRkYjNlMS4uMTI5MWFlYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdApAQCAtMywxMCArMywxNCBAQAogCiAuLiBtb2R1bGU6OiB1cmxsaWIucmVxdWVzdAogICAgOnN5bm9wc2lzOiBFeHRlbnNpYmxlIGxpYnJhcnkgZm9yIG9wZW5pbmcgVVJMcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogSmVyZW15IEh5bHRvbiA8amVyZW15QGFsdW0ubWl0LmVkdT4KIC4uIHNlY3Rpb25hdXRob3I6OiBNb3NoZSBaYWRrYSA8bW9zaGV6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIC4uIHNlY3Rpb25hdXRob3I6OiBTZW50aGlsIEt1bWFyYW4gPHNlbnRoaWxAdXRoY29kZS5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3VybGxpYi9yZXF1ZXN0LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgdXJsbGliLnJlcXVlc3RgIG1vZHVsZSBkZWZpbmVzIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyB3aGljaCBoZWxwIGluCiBvcGVuaW5nIFVSTHMgKG1vc3RseSBIVFRQKSBpbiBhIGNvbXBsZXggd29ybGQgLS0tIGJhc2ljIGFuZCBkaWdlc3QKQEAgLTE0LDggKzE4LDggQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgICBUaGUgYFJlcXVlc3RzIHBhY2thZ2UgPGh0dHA6Ly9yZXF1ZXN0cy5yZWFkdGhlZG9jcy5vcmcvPmBfCi0gICAgaXMgcmVjb21tZW5kZWQgZm9yIGEgaGlnaGVyLWxldmVsIGh0dHAgY2xpZW50IGludGVyZmFjZS4KKyAgICBUaGUgYFJlcXVlc3RzIHBhY2thZ2UgPGh0dHBzOi8vcmVxdWVzdHMucmVhZHRoZWRvY3Mub3JnLz5gXworICAgIGlzIHJlY29tbWVuZGVkIGZvciBhIGhpZ2hlci1sZXZlbCBIVFRQIGNsaWVudCBpbnRlcmZhY2UuCiAKIAogVGhlIDptb2Q6YHVybGxpYi5yZXF1ZXN0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKQEAgLTU5LDcgKzYzLDcgQEAKIAogICAgVGhlICpjYWRlZmF1bHQqIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogCi0gICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBjYW4gd29yayBhcworICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggY2FuIHdvcmsgYXMgYQogICAgOnRlcm06YGNvbnRleHQgbWFuYWdlcmAgYW5kIGhhcyBtZXRob2RzIHN1Y2ggYXMKIAogICAgKiA6bWV0aDpgfnVybGxpYi5yZXNwb25zZS5hZGRpbmZvdXJsLmdldHVybGAgLS0tIHJldHVybiB0aGUgVVJMIG9mIHRoZSByZXNvdXJjZSByZXRyaWV2ZWQsCkBAIC02NywxMSArNzEsMTEgQEAKIAogICAgKiA6bWV0aDpgfnVybGxpYi5yZXNwb25zZS5hZGRpbmZvdXJsLmluZm9gIC0tLSByZXR1cm4gdGhlIG1ldGEtaW5mb3JtYXRpb24gb2YgdGhlIHBhZ2UsIHN1Y2ggYXMgaGVhZGVycywKICAgICAgaW4gdGhlIGZvcm0gb2YgYW4gOmZ1bmM6YGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmdgIGluc3RhbmNlIChzZWUKLSAgICAgYFF1aWNrIFJlZmVyZW5jZSB0byBIVFRQIEhlYWRlcnMgPGh0dHA6Ly93d3cuY3MudHV0LmZpL35qa29ycGVsYS9odHRwLmh0bWw+YF8pCisgICAgIGBRdWljayBSZWZlcmVuY2UgdG8gSFRUUCBIZWFkZXJzIDxodHRwczovL3d3dy5jcy50dXQuZmkvfmprb3JwZWxhL2h0dHAuaHRtbD5gXykKIAogICAgKiA6bWV0aDpgfnVybGxpYi5yZXNwb25zZS5hZGRpbmZvdXJsLmdldGNvZGVgIC0tIHJldHVybiB0aGUgSFRUUCBzdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UuCiAKLSAgIEZvciBodHRwIGFuZCBodHRwcyB1cmxzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYQorICAgRm9yIEhUVFAgYW5kIEhUVFBTIFVSTHMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCiAgICA6Y2xhc3M6YGh0dHAuY2xpZW50LkhUVFBSZXNwb25zZWAgb2JqZWN0IHNsaWdodGx5IG1vZGlmaWVkLiBJbiBhZGRpdGlvbgogICAgdG8gdGhlIHRocmVlIG5ldyBtZXRob2RzIGFib3ZlLCB0aGUgbXNnIGF0dHJpYnV0ZSBjb250YWlucyB0aGUKICAgIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlIDphdHRyOmB+aHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLnJlYXNvbmAKQEAgLTc5LDExICs4MywxMSBAQAogICAgdGhlIHJlc3BvbnNlIGhlYWRlcnMgYXMgaXQgaXMgc3BlY2lmaWVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgogICAgOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlYC4KIAotICAgRm9yIGZ0cCwgZmlsZSwgYW5kIGRhdGEgdXJscyBhbmQgcmVxdWVzdHMgZXhwbGljaXRseSBoYW5kbGVkIGJ5IGxlZ2FjeQorICAgRm9yIEZUUCwgZmlsZSwgYW5kIGRhdGEgVVJMcyBhbmQgcmVxdWVzdHMgZXhwbGljaXRseSBoYW5kbGVkIGJ5IGxlZ2FjeQogICAgOmNsYXNzOmBVUkxvcGVuZXJgIGFuZCA6Y2xhc3M6YEZhbmN5VVJMb3BlbmVyYCBjbGFzc2VzLCB0aGlzIGZ1bmN0aW9uCiAgICByZXR1cm5zIGEgOmNsYXNzOmB1cmxsaWIucmVzcG9uc2UuYWRkaW5mb3VybGAgb2JqZWN0LgogCi0gICBSYWlzZXMgOmV4YzpgfnVybGxpYi5lcnJvci5VUkxFcnJvcmAgb24gZXJyb3JzLgorICAgUmFpc2VzIDpleGM6YH51cmxsaWIuZXJyb3IuVVJMRXJyb3JgIG9uIHByb3RvY29sIGVycm9ycy4KIAogICAgTm90ZSB0aGF0IGBgTm9uZWBgIG1heSBiZSByZXR1cm5lZCBpZiBubyBoYW5kbGVyIGhhbmRsZXMgdGhlIHJlcXVlc3QgKHRob3VnaAogICAgdGhlIGRlZmF1bHQgaW5zdGFsbGVkIGdsb2JhbCA6Y2xhc3M6YE9wZW5lckRpcmVjdG9yYCB1c2VzCkBAIC0xMTYsNiArMTIwLDcgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKICAgICAgICpjb250ZXh0KiB3YXMgYWRkZWQuCiAKKwogLi4gZnVuY3Rpb246OiBpbnN0YWxsX29wZW5lcihvcGVuZXIpCiAKICAgIEluc3RhbGwgYW4gOmNsYXNzOmBPcGVuZXJEaXJlY3RvcmAgaW5zdGFuY2UgYXMgdGhlIGRlZmF1bHQgZ2xvYmFsIG9wZW5lci4KQEAgLTE2NSwxNSArMTcwLDE5IEBACiAgICBpbiBhIGNhc2UgaW5zZW5zaXRpdmUgYXBwcm9hY2gsIGZvciBhbGwgb3BlcmF0aW5nIHN5c3RlbXMgZmlyc3QsIGFuZCB3aGVuIGl0CiAgICBjYW5ub3QgZmluZCBpdCwgbG9va3MgZm9yIHByb3h5IGluZm9ybWF0aW9uIGZyb20gTWFjIE9TWCBTeXN0ZW0KICAgIENvbmZpZ3VyYXRpb24gZm9yIE1hYyBPUyBYIGFuZCBXaW5kb3dzIFN5c3RlbXMgUmVnaXN0cnkgZm9yIFdpbmRvd3MuCisgICBJZiBib3RoIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBleGlzdCAoYW5kIGRpc2FncmVlKSwKKyAgIGxvd2VyY2FzZSBpcyBwcmVmZXJyZWQuCiAKLSAgIC4uIG5vdGU6OgorICAgIC4uIG5vdGU6OgogCi0gICAgICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBSRVFVRVNUX01FVEhPRGBgIGlzIHNldCwgd2hpY2ggdXN1YWxseQotICAgICAgaW5kaWNhdGVzIHlvdXIgc2NyaXB0IGlzIHJ1bm5pbmcgaW4gYSBDR0kgZW52aXJvbm1lbnQsIHRoZSBlbnZpcm9ubWVudAotICAgICAgdmFyaWFibGUgYGBIVFRQX1BST1hZYGAgKHVwcGVyY2FzZSBgYF9QUk9YWWBgKSB3aWxsIGJlIGlnbm9yZWQuIFRoaXMgaXMKLSAgICAgIGJlY2F1c2UgdGhhdCB2YXJpYWJsZSBjYW4gYmUgaW5qZWN0ZWQgYnkgYSBjbGllbnQgdXNpbmcgdGhlICJQcm94eToiIEhUVFAKLSAgICAgIGhlYWRlci4gSWYgeW91IG5lZWQgdG8gdXNlIGFuIEhUVFAgcHJveHkgaW4gYSBDR0kgZW52aXJvbm1lbnQgdXNlCi0gICAgICBgYFByb3h5SGFuZGxlcmBgIGV4cGxpY2l0bHkuCisgICAgICAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQsIHdoaWNoIHVzdWFsbHkKKyAgICAgICBpbmRpY2F0ZXMgeW91ciBzY3JpcHQgaXMgcnVubmluZyBpbiBhIENHSSBlbnZpcm9ubWVudCwgdGhlIGVudmlyb25tZW50CisgICAgICAgdmFyaWFibGUgYGBIVFRQX1BST1hZYGAgKHVwcGVyY2FzZSBgYF9QUk9YWWBgKSB3aWxsIGJlIGlnbm9yZWQuIFRoaXMgaXMKKyAgICAgICBiZWNhdXNlIHRoYXQgdmFyaWFibGUgY2FuIGJlIGluamVjdGVkIGJ5IGEgY2xpZW50IHVzaW5nIHRoZSAiUHJveHk6IiBIVFRQCisgICAgICAgaGVhZGVyLiBJZiB5b3UgbmVlZCB0byB1c2UgYW4gSFRUUCBwcm94eSBpbiBhIENHSSBlbnZpcm9ubWVudCwgZWl0aGVyIHVzZQorICAgICAgIGBgUHJveHlIYW5kbGVyYGAgZXhwbGljaXRseSwgb3IgbWFrZSBzdXJlIHRoZSB2YXJpYWJsZSBuYW1lIGlzIGluCisgICAgICAgbG93ZXJjYXNlIChvciBhdCBsZWFzdCB0aGUgYGBfcHJveHlgYCBzdWZmaXgpLgorCiAKIFRoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgcHJvdmlkZWQ6CiAKQEAgLTE5NCw3ICsyMDMsNyBAQAogCiAgICAqaGVhZGVycyogc2hvdWxkIGJlIGEgZGljdGlvbmFyeSwgYW5kIHdpbGwgYmUgdHJlYXRlZCBhcyBpZgogICAgOm1ldGg6YGFkZF9oZWFkZXJgIHdhcyBjYWxsZWQgd2l0aCBlYWNoIGtleSBhbmQgdmFsdWUgYXMgYXJndW1lbnRzLgotICAgVGhpcyBpcyBvZnRlbiB1c2VkIHRvICJzcG9vZiIgdGhlIGBgVXNlci1BZ2VudGBgIGhlYWRlciwgd2hpY2ggaXMKKyAgIFRoaXMgaXMgb2Z0ZW4gdXNlZCB0byAic3Bvb2YiIHRoZSBgYFVzZXItQWdlbnRgYCBoZWFkZXIgdmFsdWUsIHdoaWNoIGlzCiAgICB1c2VkIGJ5IGEgYnJvd3NlciB0byBpZGVudGlmeSBpdHNlbGYgLS0gc29tZSBIVFRQIHNlcnZlcnMgb25seQogICAgYWxsb3cgcmVxdWVzdHMgY29taW5nIGZyb20gY29tbW9uIGJyb3dzZXJzIGFzIG9wcG9zZWQgdG8gc2NyaXB0cy4KICAgIEZvciBleGFtcGxlLCBNb3ppbGxhIEZpcmVmb3ggbWF5IGlkZW50aWZ5IGl0c2VsZiBhcyBgYCJNb3ppbGxhLzUuMApAQCAtMjc2LDEwICsyODUsMTUgQEAKIAogICAgVG8gZGlzYWJsZSBhdXRvZGV0ZWN0ZWQgcHJveHkgcGFzcyBhbiBlbXB0eSBkaWN0aW9uYXJ5LgogCi0gICAuLiBub3RlOjoKKyAgIFRoZSA6ZW52dmFyOmBub19wcm94eWAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBob3N0cworICAgd2hpY2ggc2hvdWxkbid0IGJlIHJlYWNoZWQgdmlhIHByb3h5OyBpZiBzZXQsIGl0IHNob3VsZCBiZSBhIGNvbW1hLXNlcGFyYXRlZAorICAgbGlzdCBvZiBob3N0bmFtZSBzdWZmaXhlcywgb3B0aW9uYWxseSB3aXRoIGBgOnBvcnRgYCBhcHBlbmRlZCwgZm9yIGV4YW1wbGUKKyAgIGBgY2Vybi5jaCxuY3NhLnVpdWMuZWR1LHNvbWUuaG9zdDo4MDgwYGAuCiAKLSAgICAgIGBgSFRUUF9QUk9YWWBgIHdpbGwgYmUgaWdub3JlZCBpZiBhIHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQ7Ci0gICAgICBzZWUgdGhlIGRvY3VtZW50YXRpb24gb24gOmZ1bmM6YH51cmxsaWIucmVxdWVzdC5nZXRwcm94aWVzYC4KKyAgICAuLiBub3RlOjoKKworICAgICAgIGBgSFRUUF9QUk9YWWBgIHdpbGwgYmUgaWdub3JlZCBpZiBhIHZhcmlhYmxlIGBgUkVRVUVTVF9NRVRIT0RgYCBpcyBzZXQ7CisgICAgICAgc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIDpmdW5jOmB+dXJsbGliLnJlcXVlc3QuZ2V0cHJveGllc2AuCiAKIAogLi4gY2xhc3M6OiBIVFRQUGFzc3dvcmRNZ3IoKQpAQCAtMjk0LDEzICszMDgsMzcgQEAKICAgIGZpdHMuCiAKIAorLi4gY2xhc3M6OiBIVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoKCkKKworICAgQSB2YXJpYW50IG9mIDpjbGFzczpgSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbWAgdGhhdCBhbHNvIGhhcyBhCisgICBkYXRhYmFzZSBvZiBgYHVyaSAtPiBpc19hdXRoZW50aWNhdGVkYGAgbWFwcGluZ3MuICBDYW4gYmUgdXNlZCBieSBhCisgICBCYXNpY0F1dGggaGFuZGxlciB0byBkZXRlcm1pbmUgd2hlbiB0byBzZW5kIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzCisgICBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEgYGA0MDFgYCByZXNwb25zZSBmaXJzdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKwogLi4gY2xhc3M6OiBBYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXIocGFzc3dvcmRfbWdyPU5vbmUpCiAKICAgIFRoaXMgaXMgYSBtaXhpbiBjbGFzcyB0aGF0IGhlbHBzIHdpdGggSFRUUCBhdXRoZW50aWNhdGlvbiwgYm90aCB0byB0aGUgcmVtb3RlCiAgICBob3N0IGFuZCB0byBhIHByb3h5LiAqcGFzc3dvcmRfbWdyKiwgaWYgZ2l2ZW4sIHNob3VsZCBiZSBzb21ldGhpbmcgdGhhdCBpcwogICAgY29tcGF0aWJsZSB3aXRoIDpjbGFzczpgSFRUUFBhc3N3b3JkTWdyYDsgcmVmZXIgdG8gc2VjdGlvbgogICAgOnJlZjpgaHR0cC1wYXNzd29yZC1tZ3JgIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgaW50ZXJmYWNlIHRoYXQgbXVzdCBiZQotICAgc3VwcG9ydGVkLgorICAgc3VwcG9ydGVkLiAgSWYgKnBhc3N3ZF9tZ3IqIGFsc28gcHJvdmlkZXMgYGBpc19hdXRoZW50aWNhdGVkYGAgYW5kCisgICBgYHVwZGF0ZV9hdXRoZW50aWNhdGVkYGAgbWV0aG9kcyAoc2VlCisgICA6cmVmOmBodHRwLXBhc3N3b3JkLW1nci13aXRoLXByaW9yLWF1dGhgKSwgdGhlbiB0aGUgaGFuZGxlciB3aWxsIHVzZSB0aGUKKyAgIGBgaXNfYXV0aGVudGljYXRlZGBgIHJlc3VsdCBmb3IgYSBnaXZlbiBVUkkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvCisgICBzZW5kIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIHdpdGggdGhlIHJlcXVlc3QuICBJZiBgYGlzX2F1dGhlbnRpY2F0ZWRgYAorICAgcmV0dXJucyBgYFRydWVgYCBmb3IgdGhlIFVSSSwgY3JlZGVudGlhbHMgYXJlIHNlbnQuICBJZiBgYGlzX2F1dGhlbnRpY2F0ZWRgYAorICAgaXMgYGBGYWxzZWBgLCBjcmVkZW50aWFscyBhcmUgbm90IHNlbnQsIGFuZCB0aGVuIGlmIGEgYGA0MDFgYCByZXNwb25zZSBpcworICAgcmVjZWl2ZWQgdGhlIHJlcXVlc3QgaXMgcmUtc2VudCB3aXRoIHRoZSBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscy4gIElmCisgICBhdXRoZW50aWNhdGlvbiBzdWNjZWVkcywgYGB1cGRhdGVfYXV0aGVudGljYXRlZGBgIGlzIGNhbGxlZCB0byBzZXQKKyAgIGBgaXNfYXV0aGVudGljYXRlZGBgIGBgVHJ1ZWBgIGZvciB0aGUgVVJJLCBzbyB0aGF0IHN1YnNlcXVlbnQgcmVxdWVzdHMgdG8KKyAgIHRoZSBVUkkgb3IgYW55IG9mIGl0cyBzdXBlci1VUklzIHdpbGwgYXV0b21hdGljYWxseSBpbmNsdWRlIHRoZQorICAgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQorICAgICAgQWRkZWQgYGBpc19hdXRoZW50aWNhdGVkYGAgc3VwcG9ydC4KIAogCiAuLiBjbGFzczo6IEhUVFBCYXNpY0F1dGhIYW5kbGVyKHBhc3N3b3JkX21ncj1Ob25lKQpAQCAtNDM0LDcgKzQ3Miw3IEBACiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0LnNlbGVjdG9yCiAKICAgIFRoZSBVUkkgcGF0aC4gIElmIHRoZSA6Y2xhc3M6YFJlcXVlc3RgIHVzZXMgYSBwcm94eSwgdGhlbiBzZWxlY3RvcgotICAgd2lsbCBiZSB0aGUgZnVsbCB1cmwgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHByb3h5LgorICAgd2lsbCBiZSB0aGUgZnVsbCBVUkwgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHByb3h5LgogCiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0LmRhdGEKIApAQCAtNzUzLDggKzc5MSw4IEBACiAgICBkZXRhaWxzIG9mIHRoZSBwcmVjaXNlIG1lYW5pbmdzIG9mIHRoZSB2YXJpb3VzIHJlZGlyZWN0aW9uIGNvZGVzLgogCiAgICBBbiA6Y2xhc3M6YEhUVFBFcnJvcmAgZXhjZXB0aW9uIHJhaXNlZCBhcyBhIHNlY3VyaXR5IGNvbnNpZGVyYXRpb24gaWYgdGhlCi0gICBIVFRQUmVkaXJlY3RIYW5kbGVyIGlzIHByZXNlbnRlZCB3aXRoIGEgcmVkaXJlY3RlZCB1cmwgd2hpY2ggaXMgbm90IGFuIEhUVFAsCi0gICBIVFRQUyBvciBGVFAgdXJsLgorICAgSFRUUFJlZGlyZWN0SGFuZGxlciBpcyBwcmVzZW50ZWQgd2l0aCBhIHJlZGlyZWN0ZWQgVVJMIHdoaWNoIGlzIG5vdCBhbiBIVFRQLAorICAgSFRUUFMgb3IgRlRQIFVSTC4KIAogCiAuLiBtZXRob2Q6OiBIVFRQUmVkaXJlY3RIYW5kbGVyLnJlZGlyZWN0X3JlcXVlc3QocmVxLCBmcCwgY29kZSwgbXNnLCBoZHJzLCBuZXd1cmwpCkBAIC04NTIsNiArODkwLDQyIEBACiAgICBzZWFyY2hlZCBpZiB0aGUgZ2l2ZW4gKnJlYWxtKiBoYXMgbm8gbWF0Y2hpbmcgdXNlci9wYXNzd29yZC4KIAogCisuLiBfaHR0cC1wYXNzd29yZC1tZ3Itd2l0aC1wcmlvci1hdXRoOgorCitIVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHBhc3N3b3JkIG1hbmFnZXIgZXh0ZW5kcyA6Y2xhc3M6YEhUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG1gIHRvIHN1cHBvcnQKK3RyYWNraW5nIFVSSXMgZm9yIHdoaWNoIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIHNob3VsZCBhbHdheXMgYmUgc2VudC4KKworCisuLiBtZXRob2Q6OiBIVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoLmFkZF9wYXNzd29yZChyZWFsbSwgdXJpLCB1c2VyLCBcCisgICAgICAgICAgICBwYXNzd2QsIGlzX2F1dGhlbnRpY2F0ZWQ9RmFsc2UpCisKKyAgICpyZWFsbSosICp1cmkqLCAqdXNlciosICpwYXNzd2QqIGFyZSBhcyBmb3IKKyAgIDptZXRoOmBIVFRQUGFzc3dvcmRNZ3IuYWRkX3Bhc3N3b3JkYC4gICppc19hdXRoZW50aWNhdGVkKiBzZXRzIHRoZSBpbml0aWFsCisgICB2YWx1ZSBvZiB0aGUgYGBpc19hdXRoZW50aWNhdGVkYGAgZmxhZyBmb3IgdGhlIGdpdmVuIFVSSSBvciBsaXN0IG9mIFVSSXMuCisgICBJZiAqaXNfYXV0aGVudGljYXRlZCogaXMgc3BlY2lmaWVkIGFzIGBgVHJ1ZWBgLCAqcmVhbG0qIGlzIGlnbm9yZWQuCisKKworLi4gbWV0aG9kOjogSFRUUFBhc3N3b3JkTWdyLmZpbmRfdXNlcl9wYXNzd29yZChyZWFsbSwgYXV0aHVyaSkKKworICAgU2FtZSBhcyBmb3IgOmNsYXNzOmBIVFRQUGFzc3dvcmRNZ3JXaXRoRGVmYXVsdFJlYWxtYCBvYmplY3RzCisKKworLi4gbWV0aG9kOjogSFRUUFBhc3N3b3JkTWdyV2l0aFByaW9yQXV0aC51cGRhdGVfYXV0aGVudGljYXRlZChzZWxmLCB1cmksIFwKKyAgICAgICAgICAgIGlzX2F1dGhlbnRpY2F0ZWQ9RmFsc2UpCisKKyAgIFVwZGF0ZSB0aGUgYGBpc19hdXRoZW50aWNhdGVkYGAgZmxhZyBmb3IgdGhlIGdpdmVuICp1cmkqIG9yIGxpc3QKKyAgIG9mIFVSSXMuCisKKworLi4gbWV0aG9kOjogSFRUUFBhc3N3b3JkTWdyV2l0aFByaW9yQXV0aC5pc19hdXRoZW50aWNhdGVkKHNlbGYsIGF1dGh1cmkpCisKKyAgIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGBgaXNfYXV0aGVudGljYXRlZGBgIGZsYWcgZm9yCisgICB0aGUgZ2l2ZW4gVVJJLgorCisKIC4uIF9hYnN0cmFjdC1iYXNpYy1hdXRoLWhhbmRsZXI6CiAKIEFic3RyYWN0QmFzaWNBdXRoSGFuZGxlciBPYmplY3RzCkBAIC0xMDU2LDYgKzExMzAsOSBAQAogRXhhbXBsZXMKIC0tLS0tLS0tCiAKK0luIGFkZGl0aW9uIHRvIHRoZSBleGFtcGxlcyBiZWxvdywgbW9yZSBleGFtcGxlcyBhcmUgZ2l2ZW4gaW4KKzpyZWY6YHVybGxpYi1ob3d0b2AuCisKIFRoaXMgZXhhbXBsZSBnZXRzIHRoZSBweXRob24ub3JnIG1haW4gcGFnZSBhbmQgZGlzcGxheXMgdGhlIGZpcnN0IDMwMCBieXRlcyBvZgogaXQuIDo6CiAKQEAgLTEwNzEsMTIgKzExNDgsMTIgQEAKIAogTm90ZSB0aGF0IHVybG9wZW4gcmV0dXJucyBhIGJ5dGVzIG9iamVjdC4gIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkKIGZvciB1cmxvcGVuIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIHRoZSBlbmNvZGluZyBvZiB0aGUgYnl0ZSBzdHJlYW0KLWl0IHJlY2VpdmVzIGZyb20gdGhlIGh0dHAgc2VydmVyLiBJbiBnZW5lcmFsLCBhIHByb2dyYW0gd2lsbCBkZWNvZGUKK2l0IHJlY2VpdmVzIGZyb20gdGhlIEhUVFAgc2VydmVyLiBJbiBnZW5lcmFsLCBhIHByb2dyYW0gd2lsbCBkZWNvZGUKIHRoZSByZXR1cm5lZCBieXRlcyBvYmplY3QgdG8gc3RyaW5nIG9uY2UgaXQgZGV0ZXJtaW5lcyBvciBndWVzc2VzCiB0aGUgYXBwcm9wcmlhdGUgZW5jb2RpbmcuCiAKLVRoZSBmb2xsb3dpbmcgVzNDIGRvY3VtZW50LCBodHRwOi8vd3d3LnczLm9yZy9JbnRlcm5hdGlvbmFsL08tY2hhcnNldFwgLCBsaXN0cwotdGhlIHZhcmlvdXMgd2F5cyBpbiB3aGljaCBhIChYKUhUTUwgb3IgYSBYTUwgZG9jdW1lbnQgY291bGQgaGF2ZSBzcGVjaWZpZWQgaXRzCitUaGUgZm9sbG93aW5nIFczQyBkb2N1bWVudCwgaHR0cHM6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvTy1jaGFyc2V0XCAsIGxpc3RzCit0aGUgdmFyaW91cyB3YXlzIGluIHdoaWNoIGFuIChYKUhUTUwgb3IgYW4gWE1MIGRvY3VtZW50IGNvdWxkIGhhdmUgc3BlY2lmaWVkIGl0cwogZW5jb2RpbmcgaW5mb3JtYXRpb24uCiAKIEFzIHRoZSBweXRob24ub3JnIHdlYnNpdGUgdXNlcyAqdXRmLTgqIGVuY29kaW5nIGFzIHNwZWNpZmllZCBpbiBpdHMgbWV0YSB0YWcsIHdlCkBAIC0xMTE5LDcgKzExOTYsNyBAQAogSGVyZSBpcyBhbiBleGFtcGxlIG9mIGRvaW5nIGEgYGBQVVRgYCByZXF1ZXN0IHVzaW5nIDpjbGFzczpgUmVxdWVzdGA6OgogCiAgICAgaW1wb3J0IHVybGxpYi5yZXF1ZXN0Ci0gICAgREFUQT1iJ3NvbWUgZGF0YScKKyAgICBEQVRBID0gYidzb21lIGRhdGEnCiAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmw9J2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MCcsIGRhdGE9REFUQSxtZXRob2Q9J1BVVCcpCiAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkgYXMgZjoKICAgICAgICAgcGFzcwpAQCAtMTE2NSw2ICsxMjQyLDggQEAKICAgIGltcG9ydCB1cmxsaWIucmVxdWVzdAogICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgnaHR0cDovL3d3dy5leGFtcGxlLmNvbS8nKQogICAgcmVxLmFkZF9oZWFkZXIoJ1JlZmVyZXInLCAnaHR0cDovL3d3dy5weXRob24ub3JnLycpCisgICAjIEN1c3RvbWl6ZSB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IGhlYWRlciB2YWx1ZToKKyAgIHJlcS5hZGRfaGVhZGVyKCdVc2VyLUFnZW50JywgJ3VybGxpYi1leGFtcGxlLzAuMSAoQ29udGFjdDogLiAuIC4pJykKICAgIHIgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKIAogOmNsYXNzOmBPcGVuZXJEaXJlY3RvcmAgYXV0b21hdGljYWxseSBhZGRzIGEgOm1haWxoZWFkZXI6YFVzZXItQWdlbnRgIGhlYWRlciB0bwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJvYm90cGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5yb2JvdHBhcnNlci5yc3QKaW5kZXggZjE3OWRlMi4uYmE3MDFjMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnJvYm90cGFyc2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucm9ib3RwYXJzZXIucnN0CkBAIC00LDggKzQsMTAgQEAKIC4uIG1vZHVsZTo6IHVybGxpYi5yb2JvdHBhcnNlcgogICAgOnN5bm9wc2lzOiBMb2FkIGEgcm9ib3RzLnR4dCBmaWxlIGFuZCBhbnN3ZXIgcXVlc3Rpb25zIGFib3V0CiAgICAgICAgICAgICAgIGZldGNoYWJpbGl0eSBvZiBvdGhlciBVUkxzLgorCiAuLiBzZWN0aW9uYXV0aG9yOjogU2tpcCBNb250YW5hcm8gPHNraXBAcG9ib3guY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi91cmxsaWIvcm9ib3RwYXJzZXIucHlgCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogV1dXCkBAIC0xMyw2ICsxNSw4IEBACiAgICBzaW5nbGU6IFVSTAogICAgc2luZ2xlOiByb2JvdHMudHh0CiAKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgc2luZ2xlIGNsYXNzLCA6Y2xhc3M6YFJvYm90RmlsZVBhcnNlcmAsIHdoaWNoIGFuc3dlcnMKIHF1ZXN0aW9ucyBhYm91dCB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgdXNlciBhZ2VudCBjYW4gZmV0Y2ggYSBVUkwgb24gdGhlCiBXZWIgc2l0ZSB0aGF0IHB1Ymxpc2hlZCB0aGUgOmZpbGU6YHJvYm90cy50eHRgIGZpbGUuICBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5yc3QKaW5kZXggOGUzMDhiYy4uNjI0ZTE2NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucnN0CkBAIC0zLDYgKzMsMTAgQEAKIAogLi4gbW9kdWxlOjogdXJsbGliCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3VybGxpYi9gCisKKy0tLS0tLS0tLS0tLS0tCisKIGBgdXJsbGliYGAgaXMgYSBwYWNrYWdlIHRoYXQgY29sbGVjdHMgc2V2ZXJhbCBtb2R1bGVzIGZvciB3b3JraW5nIHdpdGggVVJMczoKIAogKiA6bW9kOmB1cmxsaWIucmVxdWVzdGAgZm9yIG9wZW5pbmcgYW5kIHJlYWRpbmcgVVJMcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXUucnN0IGIvRG9jL2xpYnJhcnkvdXUucnN0CmluZGV4IGQ2MWMxNzguLjMzZmIzNmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3V1LnJzdAorKysgYi9Eb2MvbGlicmFyeS91dS5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHV1CiAgICA6c3lub3BzaXM6IEVuY29kZSBhbmQgZGVjb2RlIGZpbGVzIGluIHV1ZW5jb2RlIGZvcm1hdC4KKwogLi4gbW9kdWxlYXV0aG9yOjogTGFuY2UgRWxsaW5naG91c2UKIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdXUucHlgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91dWlkLnJzdCBiL0RvYy9saWJyYXJ5L3V1aWQucnN0CmluZGV4IDdkYzQ2YWMuLjUzY2JkNmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3V1aWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3V1aWQucnN0CkBAIC02LDYgKzYsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogS2EtUGluZyBZZWUgPHBpbmdAemVzdHkuY2E+CiAuLiBzZWN0aW9uYXV0aG9yOjogR2VvcmdlIFlvc2hpZGEgPHF1aXZlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3V1aWQucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGltbXV0YWJsZSA6Y2xhc3M6YFVVSURgIG9iamVjdHMgKHRoZSA6Y2xhc3M6YFVVSURgIGNsYXNzKQogYW5kIHRoZSBmdW5jdGlvbnMgOmZ1bmM6YHV1aWQxYCwgOmZ1bmM6YHV1aWQzYCwgOmZ1bmM6YHV1aWQ0YCwgOmZ1bmM6YHV1aWQ1YCBmb3IKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ZlbnYucnN0IGIvRG9jL2xpYnJhcnkvdmVudi5yc3QKaW5kZXggZTllZGU4Yi4uYWY0YTZkMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdmVudi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdmVudi5yc3QKQEAgLTMsMTUgKzMsMTUgQEAKIAogLi4gbW9kdWxlOjogdmVudgogICAgOnN5bm9wc2lzOiBDcmVhdGlvbiBvZiB2aXJ0dWFsIGVudmlyb25tZW50cy4KKwogLi4gbW9kdWxlYXV0aG9yOjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHlhaG9vLmNvLnVrPgogLi4gc2VjdGlvbmF1dGhvcjo6IFZpbmF5IFNhamlwIDx2aW5heV9zYWppcEB5YWhvby5jby51az4KIAotCi0uLiBpbmRleDo6IHBhaXI6IEVudmlyb25tZW50czsgdmlydHVhbAotCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdmVudmAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3ZlbnYvYAorCisuLiBpbmRleDo6IHBhaXI6IEVudmlyb25tZW50czsgdmlydHVhbAogCiAtLS0tLS0tLS0tLS0tLQogCkBAIC00MywxMSArNDMsNiBAQAogICAgQ29tbW9uIGluc3RhbGxhdGlvbiB0b29scyBzdWNoIGFzIGBgU2V0dXB0b29sc2BgIGFuZCBgYHBpcGBgIHdvcmsgYXMKICAgIGV4cGVjdGVkIHdpdGggdmVudnMgLSBpLmUuIHdoZW4gYSB2ZW52IGlzIGFjdGl2ZSwgdGhleSBpbnN0YWxsIFB5dGhvbgogICAgcGFja2FnZXMgaW50byB0aGUgdmVudiB3aXRob3V0IG5lZWRpbmcgdG8gYmUgdG9sZCB0byBkbyBzbyBleHBsaWNpdGx5LgotICAgT2YgY291cnNlLCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZW0gaW50byB0aGUgdmVudiBmaXJzdDogdGhpcyBjb3VsZCBiZQotICAgZG9uZSBieSBydW5uaW5nIGBgZXpfc2V0dXAucHlgYCB3aXRoIHRoZSB2ZW52IGFjdGl2YXRlZCwKLSAgIGZvbGxvd2VkIGJ5IHJ1bm5pbmcgYGBlYXN5X2luc3RhbGwgcGlwYGAuIEFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBkb3dubG9hZAotICAgdGhlIHNvdXJjZSB0YXJiYWxscyBhbmQgcnVuIGBgcHl0aG9uIHNldHVwLnB5IGluc3RhbGxgYCBhZnRlciB1bnBhY2tpbmcsCi0gICB3aXRoIHRoZSB2ZW52IGFjdGl2YXRlZC4KIAogICAgV2hlbiBhIHZlbnYgaXMgYWN0aXZlIChpLmUuIHRoZSB2ZW52J3MgUHl0aG9uIGludGVycHJldGVyIGlzIHJ1bm5pbmcpLCB0aGUKICAgIGF0dHJpYnV0ZXMgOmF0dHI6YHN5cy5wcmVmaXhgIGFuZCA6YXR0cjpgc3lzLmV4ZWNfcHJlZml4YCBwb2ludCB0byB0aGUgYmFzZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2FybmluZ3MucnN0IGIvRG9jL2xpYnJhcnkvd2FybmluZ3MucnN0CmluZGV4IDhhNTM4YWQuLjM3ZjY4NzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dhcm5pbmdzLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXJuaW5ncy5yc3QKQEAgLTEsMTMgKzEsMTMgQEAKIDptb2Q6YHdhcm5pbmdzYCAtLS0gV2FybmluZyBjb250cm9sCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0uLiBpbmRleDo6IHNpbmdsZTogd2FybmluZ3MKLQogLi4gbW9kdWxlOjogd2FybmluZ3MKICAgIDpzeW5vcHNpczogSXNzdWUgd2FybmluZyBtZXNzYWdlcyBhbmQgY29udHJvbCB0aGVpciBkaXNwb3NpdGlvbi4KIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvd2FybmluZ3MucHlgCiAKKy4uIGluZGV4Ojogc2luZ2xlOiB3YXJuaW5ncworCiAtLS0tLS0tLS0tLS0tLQogCiBXYXJuaW5nIG1lc3NhZ2VzIGFyZSB0eXBpY2FsbHkgaXNzdWVkIGluIHNpdHVhdGlvbnMgd2hlcmUgaXQgaXMgdXNlZnVsIHRvIGFsZXJ0CkBAIC0xNDEsMTQgKzE0MSwxNSBAQAogICB8ICAgICAgICAgICAgICAgfCB3YXJuaW5ncywgcmVnYXJkbGVzcyBvZiBsb2NhdGlvbiAgICAgICAgICAgICB8CiAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotKiAqbWVzc2FnZSogaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRoZSB3YXJuaW5nIG1lc3NhZ2UKLSAgbXVzdCBtYXRjaCAodGhlIG1hdGNoIGlzIGNvbXBpbGVkIHRvIGFsd2F5cyBiZSBjYXNlLWluc2Vuc2l0aXZlKS4KKyogKm1lc3NhZ2UqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgc3RhcnQgb2YKKyAgdGhlIHdhcm5pbmcgbWVzc2FnZSBtdXN0IG1hdGNoLiAgVGhlIGV4cHJlc3Npb24gaXMgY29tcGlsZWQgdG8gYWx3YXlzIGJlCisgIGNhc2UtaW5zZW5zaXRpdmUuCiAKICogKmNhdGVnb3J5KiBpcyBhIGNsYXNzIChhIHN1YmNsYXNzIG9mIDpleGM6YFdhcm5pbmdgKSBvZiB3aGljaCB0aGUgd2FybmluZwogICBjYXRlZ29yeSBtdXN0IGJlIGEgc3ViY2xhc3MgaW4gb3JkZXIgdG8gbWF0Y2guCiAKICogKm1vZHVsZSogaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHRoZSBtb2R1bGUgbmFtZSBtdXN0Ci0gIG1hdGNoICh0aGUgbWF0Y2ggaXMgY29tcGlsZWQgdG8gYmUgY2FzZS1zZW5zaXRpdmUpLgorICBtYXRjaC4gIFRoZSBleHByZXNzaW9uIGlzIGNvbXBpbGVkIHRvIGJlIGNhc2Utc2Vuc2l0aXZlLgogCiAqICpsaW5lbm8qIGlzIGFuIGludGVnZXIgdGhhdCB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIHdhcm5pbmcgb2NjdXJyZWQgbXVzdAogICBtYXRjaCwgb3IgYGAwYGAgdG8gbWF0Y2ggYWxsIGxpbmUgbnVtYmVycy4KQEAgLTI2NSw3ICsyNjYsNyBAQAogCiBXYXJuaW5ncyB0aGF0IGFyZSBvbmx5IG9mIGludGVyZXN0IHRvIHRoZSBkZXZlbG9wZXIgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4gQXMKIHN1Y2ggeW91IHNob3VsZCBtYWtlIHN1cmUgdG8gdGVzdCB5b3VyIGNvZGUgd2l0aCB0eXBpY2FsbHkgaWdub3JlZCB3YXJuaW5ncwotbWFkZSB2aXNpYmxlLiBZb3UgY2FuIGRvIHRoaXMgZnJvbSB0aGUgY29tbWFuZC1saW5lIGJ5IHBhc3NpbmcgOm9wdGlvbjpgLVdkYAorbWFkZSB2aXNpYmxlLiBZb3UgY2FuIGRvIHRoaXMgZnJvbSB0aGUgY29tbWFuZC1saW5lIGJ5IHBhc3NpbmcgOm9wdGlvbjpgLVdkIDwtVz5gCiB0byB0aGUgaW50ZXJwcmV0ZXIgKHRoaXMgaXMgc2hvcnRoYW5kIGZvciA6b3B0aW9uOmAtVyBkZWZhdWx0YCkuICBUaGlzIGVuYWJsZXMKIGRlZmF1bHQgaGFuZGxpbmcgZm9yIGFsbCB3YXJuaW5ncywgaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4KIFRvIGNoYW5nZSB3aGF0IGFjdGlvbiBpcyB0YWtlbiBmb3IgZW5jb3VudGVyZWQgd2FybmluZ3MgeW91IHNpbXBseSBjaGFuZ2Ugd2hhdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QgYi9Eb2MvbGlicmFyeS93YXZlLnJzdAppbmRleCBhYjY0OTc4Li43MTQ0Mzc5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93YXZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXZlLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogd2F2ZQogICAgOnN5bm9wc2lzOiBQcm92aWRlIGFuIGludGVyZmFjZSB0byB0aGUgV0FWIHNvdW5kIGZvcm1hdC4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IE1vc2hlIFphZGthIDxtb3NoZXpAemFka2Euc2l0ZS5jby5pbD4KIC4uIERvY3VtZW50YXRpb25zIHN0b2xlbiBmcm9tIGNvbW1lbnRzIGluIGZpbGUuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0IGIvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKaW5kZXggY2M4ODNiMS4uMDQ3MGJkMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHdlYWtyZWYKICAgIDpzeW5vcHNpczogU3VwcG9ydCBmb3Igd2VhayByZWZlcmVuY2VzIGFuZCB3ZWFrIGRpY3Rpb25hcmllcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIC4uIG1vZHVsZWF1dGhvcjo6IE5laWwgU2NoZW1lbmF1ZXIgPG5hc0BhcmN0cml4LmNvbT4KIC4uIG1vZHVsZWF1dGhvcjo6IE1hcnRpbiB2b24gTMO2d2lzIDxtYXJ0aW5AbG9ld2lzLmhvbWUuY3MudHUtYmVybGluLmRlPgpAQCAtMjU4LDcgKzI1OSw3IEBACiAgICBhcmUgY2FsbGVkIGluIHJldmVyc2Ugb3JkZXIgb2YgY3JlYXRpb24uCiAKICAgIEEgZmluYWxpemVyIHdpbGwgbmV2ZXIgaW52b2tlIGl0cyBjYWxsYmFjayBkdXJpbmcgdGhlIGxhdGVyIHBhcnQgb2YKLSAgIHRoZSBpbnRlcnByZXRlciBzaHV0ZG93biB3aGVuIG1vZHVsZSBnbG9iYWxzIGFyZSBsaWFibGUgdG8gaGF2ZQorICAgdGhlIDp0ZXJtOmBpbnRlcnByZXRlciBzaHV0ZG93bmAgd2hlbiBtb2R1bGUgZ2xvYmFscyBhcmUgbGlhYmxlIHRvIGhhdmUKICAgIGJlZW4gcmVwbGFjZWQgYnkgOmNvbnN0OmBOb25lYC4KIAogICAgLi4gbWV0aG9kOjogX19jYWxsX18oKQpAQCAtMzI5LDcgKzMzMCw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICA6cGVwOmAwMjA1YCAtIFdlYWsgUmVmZXJlbmNlcworICAgOnBlcDpgMjA1YCAtIFdlYWsgUmVmZXJlbmNlcwogICAgICAgVGhlIHByb3Bvc2FsIGFuZCByYXRpb25hbGUgZm9yIHRoaXMgZmVhdHVyZSwgaW5jbHVkaW5nIGxpbmtzIHRvIGVhcmxpZXIKICAgICAgIGltcGxlbWVudGF0aW9ucyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgc2ltaWxhciBmZWF0dXJlcyBpbiBvdGhlciBsYW5ndWFnZXMuCiAKQEAgLTUyNyw4ICs1MjgsOCBAQAogCiBTdGFydGluZyB3aXRoIFB5dGhvbiAzLjQsIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIG5vIGxvbmdlciBwcmV2ZW50CiByZWZlcmVuY2UgY3ljbGVzIGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQsIGFuZCBtb2R1bGUgZ2xvYmFscyBhcmUKLW5vIGxvbmdlciBmb3JjZWQgdG8gOmNvbnN0OmBOb25lYCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24uIFNvIHRoaXMKLWNvZGUgc2hvdWxkIHdvcmsgd2l0aG91dCBhbnkgaXNzdWVzIG9uIENQeXRob24uCitubyBsb25nZXIgZm9yY2VkIHRvIDpjb25zdDpgTm9uZWAgZHVyaW5nIDp0ZXJtOmBpbnRlcnByZXRlciBzaHV0ZG93bmAuCitTbyB0aGlzIGNvZGUgc2hvdWxkIHdvcmsgd2l0aG91dCBhbnkgaXNzdWVzIG9uIENQeXRob24uCiAKIEhvd2V2ZXIsIGhhbmRsaW5nIG9mIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGlzIG5vdG9yaW91c2x5IGltcGxlbWVudGF0aW9uCiBzcGVjaWZpYywgc2luY2UgaXQgZGVwZW5kcyBvbiBpbnRlcm5hbCBkZXRhaWxzIG9mIHRoZSBpbnRlcnByZXRlcidzIGdhcmJhZ2UKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dlYmJyb3dzZXIucnN0IGIvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKaW5kZXggYWE1ZTRhZC4uODVkMzYzNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHdlYmJyb3dzZXIKICAgIDpzeW5vcHNpczogRWFzeS10by11c2UgY29udHJvbGxlciBmb3IgV2ViIGJyb3dzZXJzLgorCiAuLiBtb2R1bGVhdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKQEAgLTMzLDcgKzM0LDcgQEAKIGJyb3dzZXIgYW5kIHdhaXQuCiAKIFRoZSBzY3JpcHQgOnByb2dyYW06YHdlYmJyb3dzZXJgIGNhbiBiZSB1c2VkIGFzIGEgY29tbWFuZC1saW5lIGludGVyZmFjZSBmb3IgdGhlCi1tb2R1bGUuIEl0IGFjY2VwdHMgYW4gVVJMIGFzIHRoZSBhcmd1bWVudC4gSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIG9wdGlvbmFsCittb2R1bGUuIEl0IGFjY2VwdHMgYSBVUkwgYXMgdGhlIGFyZ3VtZW50LiBJdCBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uYWwKIHBhcmFtZXRlcnM6IGBgLW5gYCBvcGVucyB0aGUgVVJMIGluIGEgbmV3IGJyb3dzZXIgd2luZG93LCBpZiBwb3NzaWJsZTsKIGBgLXRgYCBvcGVucyB0aGUgVVJMIGluIGEgbmV3IGJyb3dzZXIgcGFnZSAoInRhYiIpLiBUaGUgb3B0aW9ucyBhcmUsCiBuYXR1cmFsbHksIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIFVzYWdlIGV4YW1wbGU6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2lucmVnLnJzdCBiL0RvYy9saWJyYXJ5L3dpbnJlZy5yc3QKaW5kZXggNmM5MjBiNC4uNTJkNTkxYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2lucmVnLnJzdAorKysgYi9Eb2MvbGlicmFyeS93aW5yZWcucnN0CkBAIC00LDggKzQsMTAgQEAKIC4uIG1vZHVsZTo6IHdpbnJlZwogICAgOnBsYXRmb3JtOiBXaW5kb3dzCiAgICA6c3lub3BzaXM6IFJvdXRpbmVzIGFuZCBvYmplY3RzIGZvciBtYW5pcHVsYXRpbmcgdGhlIFdpbmRvd3MgcmVnaXN0cnkuCisKIC4uIHNlY3Rpb25hdXRob3I6OiBNYXJrIEhhbW1vbmQgPE1hcmtIQEFjdGl2ZVN0YXRlLmNvbT4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhlc2UgZnVuY3Rpb25zIGV4cG9zZSB0aGUgV2luZG93cyByZWdpc3RyeSBBUEkgdG8gUHl0aG9uLiAgSW5zdGVhZCBvZiB1c2luZyBhbgogaW50ZWdlciBhcyB0aGUgcmVnaXN0cnkgaGFuZGxlLCBhIDpyZWY6YGhhbmRsZSBvYmplY3QgPGhhbmRsZS1vYmplY3Q+YCBpcyB1c2VkCkBAIC0xMzQsNyArMTM2LDcgQEAKICAgICAgIFRoZSA6ZnVuYzpgRGVsZXRlS2V5RXhgIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGggdGhlIFJlZ0RlbGV0ZUtleUV4CiAgICAgICBXaW5kb3dzIEFQSSBmdW5jdGlvbiwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gNjQtYml0IHZlcnNpb25zIG9mIFdpbmRvd3MuCiAgICAgICBTZWUgdGhlIGBSZWdEZWxldGVLZXlFeCBkb2N1bWVudGF0aW9uCi0gICAgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzI0ODQ3JTI4VlMuODUlMjkuYXNweD5gX18uCisgICAgICA8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczcyNDg0NyUyOFZTLjg1JTI5LmFzcHg+YF9fLgogCiAgICAqa2V5KiBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBvbmUgb2YgdGhlIHByZWRlZmluZWQKICAgIDpyZWY6YEhLRVlfKiBjb25zdGFudHMgPGhrZXktY29uc3RhbnRzPmAuCkBAIC0yNjgsNyArMjcwLDcgQEAKICAgIEEgY2FsbCB0byA6ZnVuYzpgTG9hZEtleWAgZmFpbHMgaWYgdGhlIGNhbGxpbmcgcHJvY2VzcyBkb2VzIG5vdCBoYXZlIHRoZQogICAgOmNvbnN0OmBTRV9SRVNUT1JFX1BSSVZJTEVHRWAgcHJpdmlsZWdlLiAgTm90ZSB0aGF0IHByaXZpbGVnZXMgYXJlIGRpZmZlcmVudAogICAgZnJvbSBwZXJtaXNzaW9ucyAtLSBzZWUgdGhlIGBSZWdMb2FkS2V5IGRvY3VtZW50YXRpb24KLSAgIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM3MjQ4ODklMjh2PVZTLjg1JTI5LmFzcHg+YF9fIGZvcgorICAgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM3MjQ4ODklMjh2PVZTLjg1JTI5LmFzcHg+YF9fIGZvcgogICAgbW9yZSBkZXRhaWxzLgogCiAgICBJZiAqa2V5KiBpcyBhIGhhbmRsZSByZXR1cm5lZCBieSA6ZnVuYzpgQ29ubmVjdFJlZ2lzdHJ5YCwgdGhlbiB0aGUgcGF0aApAQCAtMzgzLDcgKzM4NSw3IEBACiAgICBwb3NzZXNzIHRoZSA6Y29uc3Q6YFNlQmFja3VwUHJpdmlsZWdlYCBzZWN1cml0eSBwcml2aWxlZ2UuICBOb3RlIHRoYXQKICAgIHByaXZpbGVnZXMgYXJlIGRpZmZlcmVudCB0aGFuIHBlcm1pc3Npb25zIC0tIHNlZSB0aGUKICAgIGBDb25mbGljdHMgQmV0d2VlbiBVc2VyIFJpZ2h0cyBhbmQgUGVybWlzc2lvbnMgZG9jdW1lbnRhdGlvbgotICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczcyNDg3OCUyOHY9VlMuODUlMjkuYXNweD5gX18KKyAgIDxodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzI0ODc4JTI4dj1WUy44NSUyOS5hc3B4PmBfXwogICAgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgVGhpcyBmdW5jdGlvbiBwYXNzZXMgTlVMTCBmb3IgKnNlY3VyaXR5X2F0dHJpYnV0ZXMqIHRvIHRoZSBBUEkuCkBAIC01NDcsNyArNTQ5LDcgQEAKICsrKysrKysrKysrKysKIAogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBgUmVnaXN0cnkgS2V5IFNlY3VyaXR5IGFuZCBBY2Nlc3MKLTxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM3MjQ4NzglMjh2PVZTLjg1JTI5LmFzcHg+YF9fLgorPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM3MjQ4NzglMjh2PVZTLjg1JTI5LmFzcHg+YF9fLgogCiAuLiBkYXRhOjogS0VZX0FMTF9BQ0NFU1MKIApAQCAtNjAyLDcgKzYwNCw3IEBACiAqKioqKioqKioqKioqKioKIAogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBgQWNjZXNzaW5nIGFuIEFsdGVybmF0ZSBSZWdpc3RyeSBWaWV3Ci08aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzg0MTI5KHY9VlMuODUpLmFzcHg+YF9fLgorPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzODQxMjkodj1WUy44NSkuYXNweD5gX18uCiAKIC4uIGRhdGE6OiBLRVlfV09XNjRfNjRLRVkKIApAQCAtNjIxLDcgKzYyMyw3IEBACiArKysrKysrKysrKwogCiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBSZWdpc3RyeSBWYWx1ZSBUeXBlcwotPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczcyNDg4NCUyOHY9VlMuODUlMjkuYXNweD5gX18uCis8aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczcyNDg4NCUyOHY9VlMuODUlMjkuYXNweD5gX18uCiAKIC4uIGRhdGE6OiBSRUdfQklOQVJZCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dpbnNvdW5kLnJzdCBiL0RvYy9saWJyYXJ5L3dpbnNvdW5kLnJzdAppbmRleCA2MWYzNGNkLi5kMmM0MjEwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93aW5zb3VuZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2luc291bmQucnN0CkBAIC00LDkgKzQsMTEgQEAKIC4uIG1vZHVsZTo6IHdpbnNvdW5kCiAgICA6cGxhdGZvcm06IFdpbmRvd3MKICAgIDpzeW5vcHNpczogQWNjZXNzIHRvIHRoZSBzb3VuZC1wbGF5aW5nIG1hY2hpbmVyeSBmb3IgV2luZG93cy4KKwogLi4gbW9kdWxlYXV0aG9yOjogVG9ieSBEaWNrZW5zb24gPGh0cmQ5MEB6ZXBsZXIub3JnPgogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmB3aW5zb3VuZGAgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYmFzaWMgc291bmQtcGxheWluZyBtYWNoaW5lcnkKIHByb3ZpZGVkIGJ5IFdpbmRvd3MgcGxhdGZvcm1zLiAgSXQgaW5jbHVkZXMgZnVuY3Rpb25zIGFuZCBzZXZlcmFsIGNvbnN0YW50cy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dzZ2lyZWYucnN0IGIvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKaW5kZXggNGVkOTQ1NC4uYWFkMjdhOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKQEAgLTMsOSArMywxMSBAQAogCiAuLiBtb2R1bGU6OiB3c2dpcmVmCiAgICA6c3lub3BzaXM6IFdTR0kgVXRpbGl0aWVzIGFuZCBSZWZlcmVuY2UgSW1wbGVtZW50YXRpb24uCisKIC4uIG1vZHVsZWF1dGhvcjo6IFBoaWxsaXAgSi4gRWJ5IDxwamVAdGVsZWNvbW11bml0eS5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogUGhpbGxpcCBKLiBFYnkgPHBqZUB0ZWxlY29tbXVuaXR5LmNvbT4KIAorLS0tLS0tLS0tLS0tLS0KIAogVGhlIFdlYiBTZXJ2ZXIgR2F0ZXdheSBJbnRlcmZhY2UgKFdTR0kpIGlzIGEgc3RhbmRhcmQgaW50ZXJmYWNlIGJldHdlZW4gd2ViCiBzZXJ2ZXIgc29mdHdhcmUgYW5kIHdlYiBhcHBsaWNhdGlvbnMgd3JpdHRlbiBpbiBQeXRob24uIEhhdmluZyBhIHN0YW5kYXJkCkBAIC0yNCw4ICsyNiw4IEBACiBhbmQgYSB2YWxpZGF0aW9uIHRvb2wgdGhhdCBjaGVja3MgV1NHSSBzZXJ2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgZm9yIGNvbmZvcm1hbmNlCiB0byB0aGUgV1NHSSBzcGVjaWZpY2F0aW9uICg6cGVwOmAzMzMzYCkuCiAKLVNlZSBodHRwOi8vd3d3LndzZ2kub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFdTR0ksIGFuZCBsaW5rcyB0byB0dXRvcmlhbHMKLWFuZCBvdGhlciByZXNvdXJjZXMuCitTZWUgaHR0cHM6Ly93c2dpLnJlYWR0aGVkb2NzLm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgV1NHSSwgYW5kIGxpbmtzIHRvCit0dXRvcmlhbHMgYW5kIG90aGVyIHJlc291cmNlcy4KIAogLi4gWFhYIElmIHlvdSdyZSBqdXN0IHRyeWluZyB0byB3cml0ZSBhIHdlYiBhcHBsaWNhdGlvbi4uLgogCkBAIC0xODQsMTAgKzE4NiwxMSBAQAogbWFuaXB1bGF0aW9uIG9mIFdTR0kgcmVzcG9uc2UgaGVhZGVycyB1c2luZyBhIG1hcHBpbmctbGlrZSBpbnRlcmZhY2UuCiAKIAotLi4gY2xhc3M6OiBIZWFkZXJzKGhlYWRlcnMpCisuLiBjbGFzczo6IEhlYWRlcnMoW2hlYWRlcnNdKQogCiAgICBDcmVhdGUgYSBtYXBwaW5nLWxpa2Ugb2JqZWN0IHdyYXBwaW5nICpoZWFkZXJzKiwgd2hpY2ggbXVzdCBiZSBhIGxpc3Qgb2YgaGVhZGVyCi0gICBuYW1lL3ZhbHVlIHR1cGxlcyBhcyBkZXNjcmliZWQgaW4gOnBlcDpgMzMzM2AuCisgICBuYW1lL3ZhbHVlIHR1cGxlcyBhcyBkZXNjcmliZWQgaW4gOnBlcDpgMzMzM2AuIFRoZSBkZWZhdWx0IHZhbHVlIG9mICpoZWFkZXJzKiBpcworICAgYW4gZW1wdHkgbGlzdC4KIAogICAgOmNsYXNzOmBIZWFkZXJzYCBvYmplY3RzIHN1cHBvcnQgdHlwaWNhbCBtYXBwaW5nIG9wZXJhdGlvbnMgaW5jbHVkaW5nCiAgICA6bWV0aDpgX19nZXRpdGVtX19gLCA6bWV0aDpgZ2V0YCwgOm1ldGg6YF9fc2V0aXRlbV9fYCwgOm1ldGg6YHNldGRlZmF1bHRgLApAQCAtMjUxLDYgKzI1NCwxMCBAQAogICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImJ1ZC5naWYiCiAKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgICpoZWFkZXJzKiBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuCisKKwogOm1vZDpgd3NnaXJlZi5zaW1wbGVfc2VydmVyYCAtLSBhIHNpbXBsZSBXU0dJIEhUVFAgc2VydmVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDE0LDggKzQyMSw4IEBACiAgICAgICAjIE91ciBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggaXMgaW50ZW50aW9uYWxseSBub3QgY29tcGxpYW50IHRvIHRoZQogICAgICAgIyBzdGFuZGFyZCwgc28gdGhlIHZhbGlkYXRvciBpcyBnb2luZyB0byBicmVhawogICAgICAgZGVmIHNpbXBsZV9hcHAoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgotICAgICAgICAgIHN0YXR1cyA9ICcyMDAgT0snICMgSFRUUCBTdGF0dXMKLSAgICAgICAgICBoZWFkZXJzID0gWygnQ29udGVudC10eXBlJywgJ3RleHQvcGxhaW4nKV0gIyBIVFRQIEhlYWRlcnMKKyAgICAgICAgICBzdGF0dXMgPSAnMjAwIE9LJyAgIyBIVFRQIFN0YXR1cworICAgICAgICAgIGhlYWRlcnMgPSBbKCdDb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbicpXSAgIyBIVFRQIEhlYWRlcnMKICAgICAgICAgICBzdGFydF9yZXNwb25zZShzdGF0dXMsIGhlYWRlcnMpCiAKICAgICAgICAgICAjIFRoaXMgaXMgZ29pbmcgdG8gYnJlYWsgYmVjYXVzZSB3ZSBuZWVkIHRvIHJldHVybiBhIGxpc3QsIGFuZApAQCAtNTEwLDYgKzUxNyw5IEBACiAgICBzdHJlYW1zIGFyZSBzdG9yZWQgaW4gdGhlIDphdHRyOmBzdGRpbmAsIDphdHRyOmBzdGRvdXRgLCA6YXR0cjpgc3RkZXJyYCwgYW5kCiAgICA6YXR0cjpgZW52aXJvbmAgYXR0cmlidXRlcy4KIAorICAgVGhlIDptZXRoOmB+aW8uQnVmZmVyZWRJT0Jhc2Uud3JpdGVgIG1ldGhvZCBvZiAqc3Rkb3V0KiBzaG91bGQgd3JpdGUKKyAgIGVhY2ggY2h1bmsgaW4gZnVsbCwgbGlrZSA6Y2xhc3M6YGlvLkJ1ZmZlcmVkSU9CYXNlYC4KKwogCiAuLiBjbGFzczo6IEJhc2VIYW5kbGVyKCkKIApAQCAtNzU3LDggKzc2Nyw4IEBACiAgICAjIGlzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIENHSS1zdHlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHRoZQogICAgIyBzZWNvbmQgdmFyaWFibGUgaXMgdGhlIGNhbGxhYmxlIG9iamVjdCAoc2VlIFBFUCAzMzMpLgogICAgZGVmIGhlbGxvX3dvcmxkX2FwcChlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6Ci0gICAgICAgc3RhdHVzID0gJzIwMCBPSycgIyBIVFRQIFN0YXR1cwotICAgICAgIGhlYWRlcnMgPSBbKCdDb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpXSAjIEhUVFAgSGVhZGVycworICAgICAgIHN0YXR1cyA9ICcyMDAgT0snICAjIEhUVFAgU3RhdHVzCisgICAgICAgaGVhZGVycyA9IFsoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04JyldICAjIEhUVFAgSGVhZGVycwogICAgICAgIHN0YXJ0X3Jlc3BvbnNlKHN0YXR1cywgaGVhZGVycykKIAogICAgICAgICMgVGhlIHJldHVybmVkIG9iamVjdCBpcyBnb2luZyB0byBiZSBwcmludGVkCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94ZHJsaWIucnN0IGIvRG9jL2xpYnJhcnkveGRybGliLnJzdAppbmRleCA1YzdkZmE0Li40MmEwM2E0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94ZHJsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3hkcmxpYi5yc3QKQEAgLTQsMTMgKzQsMTIgQEAKIC4uIG1vZHVsZTo6IHhkcmxpYgogICAgOnN5bm9wc2lzOiBFbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIHRoZSBFeHRlcm5hbCBEYXRhIFJlcHJlc2VudGF0aW9uIChYRFIpLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi94ZHJsaWIucHlgCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogWERSCiAgICBzaW5nbGU6IEV4dGVybmFsIERhdGEgUmVwcmVzZW50YXRpb24KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveGRybGliLnB5YAotCiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgeGRybGliYCBtb2R1bGUgc3VwcG9ydHMgdGhlIEV4dGVybmFsIERhdGEgUmVwcmVzZW50YXRpb24gU3RhbmRhcmQgYXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZG9tLm1pbmlkb20ucnN0CmluZGV4IDY3NjJlOTEuLjJlOWU4MTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogeG1sLmRvbS5taW5pZG9tCiAgICA6c3lub3BzaXM6IE1pbmltYWwgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIGltcGxlbWVudGF0aW9uLgorCiAuLiBtb2R1bGVhdXRob3I6OiBQYXVsIFByZXNjb2QgPHBhdWxAcHJlc2NvZC5uZXQ+CiAuLiBzZWN0aW9uYXV0aG9yOjogUGF1bCBQcmVzY29kIDxwYXVsQHByZXNjb2QubmV0PgogLi4gc2VjdGlvbmF1dGhvcjo6IE1hcnRpbiB2LiBMw7Z3aXMgPG1hcnRpbkB2LmxvZXdpcy5kZT4KQEAgLTMwLDEwICszMSwxMCBAQAogCiAgICBmcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgcGFyc2UsIHBhcnNlU3RyaW5nCiAKLSAgIGRvbTEgPSBwYXJzZSgnYzpcXHRlbXBcXG15ZGF0YS54bWwnKSAjIHBhcnNlIGFuIFhNTCBmaWxlIGJ5IG5hbWUKKyAgIGRvbTEgPSBwYXJzZSgnYzpcXHRlbXBcXG15ZGF0YS54bWwnKSAgIyBwYXJzZSBhbiBYTUwgZmlsZSBieSBuYW1lCiAKICAgIGRhdGFzb3VyY2UgPSBvcGVuKCdjOlxcdGVtcFxcbXlkYXRhLnhtbCcpCi0gICBkb20yID0gcGFyc2UoZGF0YXNvdXJjZSkgICAjIHBhcnNlIGFuIG9wZW4gZmlsZQorICAgZG9tMiA9IHBhcnNlKGRhdGFzb3VyY2UpICAjIHBhcnNlIGFuIG9wZW4gZmlsZQogCiAgICBkb20zID0gcGFyc2VTdHJpbmcoJzxteXhtbD5Tb21lIGRhdGE8ZW1wdHkvPiBzb21lIG1vcmUgZGF0YTwvbXl4bWw+JykKIApAQCAtOTMsMTQgKzk0LDE0IEBACiAKIFdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIGEgRE9NIHRyZWUsIHlvdSBtYXkgb3B0aW9uYWxseSBjYWxsIHRoZQogOm1ldGg6YHVubGlua2AgbWV0aG9kIHRvIGVuY291cmFnZSBlYXJseSBjbGVhbnVwIG9mIHRoZSBub3ctdW5uZWVkZWQKLW9iamVjdHMuICA6bWV0aDpgdW5saW5rYCBpcyBhIDptb2Q6YHhtbC5kb20ubWluaWRvbWBcIC1zcGVjaWZpYworb2JqZWN0cy4gIDptZXRoOmB1bmxpbmtgIGlzIGFuIDptb2Q6YHhtbC5kb20ubWluaWRvbWBcIC1zcGVjaWZpYwogZXh0ZW5zaW9uIHRvIHRoZSBET00gQVBJIHRoYXQgcmVuZGVycyB0aGUgbm9kZSBhbmQgaXRzIGRlc2NlbmRhbnRzIGFyZQogZXNzZW50aWFsbHkgdXNlbGVzcy4gIE90aGVyd2lzZSwgUHl0aG9uJ3MgZ2FyYmFnZSBjb2xsZWN0b3Igd2lsbAogZXZlbnR1YWxseSB0YWtlIGNhcmUgb2YgdGhlIG9iamVjdHMgaW4gdGhlIHRyZWUuCiAKIC4uIHNlZWFsc286OgogCi0gICBgRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIExldmVsIDEgU3BlY2lmaWNhdGlvbiA8aHR0cDovL3d3dy53My5vcmcvVFIvUkVDLURPTS1MZXZlbC0xLz5gXworICAgYERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBMZXZlbCAxIFNwZWNpZmljYXRpb24gPGh0dHBzOi8vd3d3LnczLm9yZy9UUi9SRUMtRE9NLUxldmVsLTEvPmBfCiAgICAgICBUaGUgVzNDIHJlY29tbWVuZGF0aW9uIGZvciB0aGUgRE9NIHN1cHBvcnRlZCBieSA6bW9kOmB4bWwuZG9tLm1pbmlkb21gLgogCiAKQEAgLTI1MSw1ICsyNTIsNSBAQAogICAgdGhlIGFwcHJvcHJpYXRlIHN0YW5kYXJkcy4gRm9yIGV4YW1wbGUsICJVVEYtOCIgaXMgdmFsaWQsIGJ1dAogICAgIlVURjgiIGlzIG5vdCB2YWxpZCBpbiBhbiBYTUwgZG9jdW1lbnQncyBkZWNsYXJhdGlvbiwgZXZlbiB0aG91Z2gKICAgIFB5dGhvbiBhY2NlcHRzIGl0IGFzIGFuIGVuY29kaW5nIG5hbWUuCi0gICBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwNi9SRUMteG1sMTEtMjAwNjA4MTYvI05ULUVuY29kaW5nRGVjbAotICAgYW5kIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMvY2hhcmFjdGVyLXNldHMueGh0bWwuCisgICBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKKyAgIGFuZCBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54aHRtbC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZG9tLnB1bGxkb20ucnN0CmluZGV4IGEzYjhiYzEuLmMzMzM5ZWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLnJzdApAQCAtMyw2ICszLDcgQEAKIAogLi4gbW9kdWxlOjogeG1sLmRvbS5wdWxsZG9tCiAgICA6c3lub3BzaXM6IFN1cHBvcnQgZm9yIGJ1aWxkaW5nIHBhcnRpYWwgRE9NIHRyZWVzIGZyb20gU0FYIGV2ZW50cy4KKwogLi4gbW9kdWxlYXV0aG9yOjogUGF1bCBQcmVzY29kIDxwYXVsQHByZXNjb2QubmV0PgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi94bWwvZG9tL3B1bGxkb20ucHlgCkBAIC0xMTQsMTMgKzExNSwxNSBAQAogCiAgICAgICBFeHBhbmRzIGFsbCBjaGlsZHJlbiBvZiAqbm9kZSogaW50byAqbm9kZSouIEV4YW1wbGU6OgogCisgICAgICAgICAgZnJvbSB4bWwuZG9tIGltcG9ydCBwdWxsZG9tCisKICAgICAgICAgICB4bWwgPSAnPGh0bWw+PHRpdGxlPkZvbzwvdGl0bGU+IDxwPlNvbWUgdGV4dCA8ZGl2PmFuZCBtb3JlPC9kaXY+PC9wPiA8L2h0bWw+JwogICAgICAgICAgIGRvYyA9IHB1bGxkb20ucGFyc2VTdHJpbmcoeG1sKQogICAgICAgICAgIGZvciBldmVudCwgbm9kZSBpbiBkb2M6CiAgICAgICAgICAgICAgIGlmIGV2ZW50ID09IHB1bGxkb20uU1RBUlRfRUxFTUVOVCBhbmQgbm9kZS50YWdOYW1lID09ICdwJzoKICAgICAgICAgICAgICAgICAgICMgRm9sbG93aW5nIHN0YXRlbWVudCBvbmx5IHByaW50cyAnPHAvPicKICAgICAgICAgICAgICAgICAgIHByaW50KG5vZGUudG94bWwoKSkKLSAgICAgICAgICAgICAgICAgIGRvYy5leGFuZE5vZGUobm9kZSkKKyAgICAgICAgICAgICAgICAgIGRvYy5leHBhbmROb2RlKG5vZGUpCiAgICAgICAgICAgICAgICAgICAjIEZvbGxvd2luZyBzdGF0ZW1lbnQgcHJpbnRzIG5vZGUgd2l0aCBhbGwgaXRzIGNoaWxkcmVuICc8cD5Tb21lIHRleHQgPGRpdj5hbmQgbW9yZTwvZGl2PjwvcD4nCiAgICAgICAgICAgICAgICAgICBwcmludChub2RlLnRveG1sKCkpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0IGIvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKaW5kZXggYTQzMjIwMi4uYjAzN2ZmNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKQEAgLTMsOSArMywxMyBAQAogCiAuLiBtb2R1bGU6OiB4bWwuZG9tCiAgICA6c3lub3BzaXM6IERvY3VtZW50IE9iamVjdCBNb2RlbCBBUEkgZm9yIFB5dGhvbi4KKwogLi4gc2VjdGlvbmF1dGhvcjo6IFBhdWwgUHJlc2NvZCA8cGF1bEBwcmVzY29kLm5ldD4KIC4uIHNlY3Rpb25hdXRob3I6OiBNYXJ0aW4gdi4gTMO2d2lzIDxtYXJ0aW5Adi5sb2V3aXMuZGU+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3htbC9kb20vX19pbml0X18ucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSBEb2N1bWVudCBPYmplY3QgTW9kZWwsIG9yICJET00sIiBpcyBhIGNyb3NzLWxhbmd1YWdlIEFQSSBmcm9tIHRoZSBXb3JsZCBXaWRlCiBXZWIgQ29uc29ydGl1bSAoVzNDKSBmb3IgYWNjZXNzaW5nIGFuZCBtb2RpZnlpbmcgWE1MIGRvY3VtZW50cy4gIEEgRE9NCkBAIC02MywxMCArNjcsMTAgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBEb2N1bWVudCBPYmplY3QgTW9kZWwgKERPTSkgTGV2ZWwgMiBTcGVjaWZpY2F0aW9uIDxodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1Db3JlLz5gXworICAgYERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBMZXZlbCAyIFNwZWNpZmljYXRpb24gPGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1Db3JlLz5gXwogICAgICAgVGhlIFczQyByZWNvbW1lbmRhdGlvbiB1cG9uIHdoaWNoIHRoZSBQeXRob24gRE9NIEFQSSBpcyBiYXNlZC4KIAotICAgYERvY3VtZW50IE9iamVjdCBNb2RlbCAoRE9NKSBMZXZlbCAxIFNwZWNpZmljYXRpb24gPGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1ET00tTGV2ZWwtMS8+YF8KKyAgIGBEb2N1bWVudCBPYmplY3QgTW9kZWwgKERPTSkgTGV2ZWwgMSBTcGVjaWZpY2F0aW9uIDxodHRwczovL3d3dy53My5vcmcvVFIvUkVDLURPTS1MZXZlbC0xLz5gXwogICAgICAgVGhlIFczQyByZWNvbW1lbmRhdGlvbiBmb3IgdGhlIERPTSBzdXBwb3J0ZWQgYnkgOm1vZDpgeG1sLmRvbS5taW5pZG9tYC4KIAogICAgYFB5dGhvbiBMYW5ndWFnZSBNYXBwaW5nIFNwZWNpZmljYXRpb24gPGh0dHA6Ly93d3cub21nLm9yZy9zcGVjL1BZVEgvMS4yL1BERj5gXwpAQCAtMTE1LDIwICsxMTksMjAgQEAKIC4uIGRhdGE6OiBYTUxfTkFNRVNQQUNFCiAKICAgIFRoZSBuYW1lc3BhY2UgVVJJIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzZXJ2ZWQgcHJlZml4IGBgeG1sYGAsIGFzIGRlZmluZWQgYnkKLSAgIGBOYW1lc3BhY2VzIGluIFhNTCA8aHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8+YF8gKHNlY3Rpb24gNCkuCisgICBgTmFtZXNwYWNlcyBpbiBYTUwgPGh0dHBzOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLz5gXyAoc2VjdGlvbiA0KS4KIAogCiAuLiBkYXRhOjogWE1MTlNfTkFNRVNQQUNFCiAKICAgIFRoZSBuYW1lc3BhY2UgVVJJIGZvciBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLCBhcyBkZWZpbmVkIGJ5IGBEb2N1bWVudCBPYmplY3QKICAgIE1vZGVsIChET00pIExldmVsIDIgQ29yZSBTcGVjaWZpY2F0aW9uCi0gICA8aHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItQ29yZS9jb3JlLmh0bWw+YF8gKHNlY3Rpb24gMS4xLjgpLgorICAgPGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1Db3JlL2NvcmUuaHRtbD5gXyAoc2VjdGlvbiAxLjEuOCkuCiAKIAogLi4gZGF0YTo6IFhIVE1MX05BTUVTUEFDRQogCiAgICBUaGUgVVJJIG9mIHRoZSBYSFRNTCBuYW1lc3BhY2UgYXMgZGVmaW5lZCBieSBgWEhUTUwgMS4wOiBUaGUgRXh0ZW5zaWJsZQotICAgSHlwZXJUZXh0IE1hcmt1cCBMYW5ndWFnZSA8aHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxLz5gXyAoc2VjdGlvbiAzLjEuMSkuCisgICBIeXBlclRleHQgTWFya3VwIExhbmd1YWdlIDxodHRwczovL3d3dy53My5vcmcvVFIveGh0bWwxLz5gXyAoc2VjdGlvbiAzLjEuMSkuCiAKIAogSW4gYWRkaXRpb24sIDptb2Q6YHhtbC5kb21gIGNvbnRhaW5zIGEgYmFzZSA6Y2xhc3M6YE5vZGVgIGNsYXNzIGFuZCB0aGUgRE9NCkBAIC04NzQsNyArODc4LDcgQEAKIC4uIGV4Y2VwdGlvbjo6IE5hbWVzcGFjZUVycgogCiAgICBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gY2hhbmdlIGFueSBvYmplY3QgaW4gYSB3YXkgdGhhdCBpcyBub3QgcGVybWl0dGVkIHdpdGgKLSAgIHJlZ2FyZCB0byB0aGUgYE5hbWVzcGFjZXMgaW4gWE1MIDxodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLz5gXworICAgcmVnYXJkIHRvIHRoZSBgTmFtZXNwYWNlcyBpbiBYTUwgPGh0dHBzOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLz5gXwogICAgcmVjb21tZW5kYXRpb24sIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0IGIvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdAppbmRleCBkYzAyNzRlLi45OWQ3ZThiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKQEAgLTMsOCArMywxMyBAQAogCiAuLiBtb2R1bGU6OiB4bWwuZXRyZWUuRWxlbWVudFRyZWUKICAgIDpzeW5vcHNpczogSW1wbGVtZW50YXRpb24gb2YgdGhlIEVsZW1lbnRUcmVlIEFQSS4KKwogLi4gbW9kdWxlYXV0aG9yOjogRnJlZHJpayBMdW5kaCA8ZnJlZHJpa0BweXRob253YXJlLmNvbT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGUgOm1vZDpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlYCBtb2R1bGUgaW1wbGVtZW50cyBhIHNpbXBsZSBhbmQgZWZmaWNpZW50IEFQSQogZm9yIHBhcnNpbmcgYW5kIGNyZWF0aW5nIFhNTCBkYXRhLgogCkBAIC05NCw3ICs5OSw3IEBACiBJdCBhbHNvIGhhcyBjaGlsZHJlbiBub2RlcyBvdmVyIHdoaWNoIHdlIGNhbiBpdGVyYXRlOjoKIAogICAgPj4+IGZvciBjaGlsZCBpbiByb290OgotICAgLi4uICAgcHJpbnQoY2hpbGQudGFnLCBjaGlsZC5hdHRyaWIpCisgICAuLi4gICAgIHByaW50KGNoaWxkLnRhZywgY2hpbGQuYXR0cmliKQogICAgLi4uCiAgICBjb3VudHJ5IHsnbmFtZSc6ICdMaWVjaHRlbnN0ZWluJ30KICAgIGNvdW50cnkgeyduYW1lJzogJ1NpbmdhcG9yZSd9CkBAIC0xNDMsOCArMTQ4LDggQEAKICAgIFsoJ3N0YXJ0JywgPEVsZW1lbnQgJ215dGFnJyBhdCAweDdmYTY2ZGIyYmU1OD4pXQogICAgPj4+IHBhcnNlci5mZWVkKCcgbW9yZSB0ZXh0PC9teXRhZz4nKQogICAgPj4+IGZvciBldmVudCwgZWxlbSBpbiBwYXJzZXIucmVhZF9ldmVudHMoKToKLSAgIC4uLiAgIHByaW50KGV2ZW50KQotICAgLi4uICAgcHJpbnQoZWxlbS50YWcsICd0ZXh0PScsIGVsZW0udGV4dCkKKyAgIC4uLiAgICAgcHJpbnQoZXZlbnQpCisgICAuLi4gICAgIHByaW50KGVsZW0udGFnLCAndGV4dD0nLCBlbGVtLnRleHQpCiAgICAuLi4KICAgIGVuZAogCkBAIC0xNjYsNyArMTcxLDcgQEAKIDptZXRoOmBFbGVtZW50Lml0ZXJgOjoKIAogICAgPj4+IGZvciBuZWlnaGJvciBpbiByb290Lml0ZXIoJ25laWdoYm9yJyk6Ci0gICAuLi4gICBwcmludChuZWlnaGJvci5hdHRyaWIpCisgICAuLi4gICAgIHByaW50KG5laWdoYm9yLmF0dHJpYikKICAgIC4uLgogICAgeyduYW1lJzogJ0F1c3RyaWEnLCAnZGlyZWN0aW9uJzogJ0UnfQogICAgeyduYW1lJzogJ1N3aXR6ZXJsYW5kJywgJ2RpcmVjdGlvbic6ICdXJ30KQEAgLTE4MCw5ICsxODUsOSBAQAogY29udGVudC4gIDptZXRoOmBFbGVtZW50LmdldGAgYWNjZXNzZXMgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzOjoKIAogICAgPj4+IGZvciBjb3VudHJ5IGluIHJvb3QuZmluZGFsbCgnY291bnRyeScpOgotICAgLi4uICAgcmFuayA9IGNvdW50cnkuZmluZCgncmFuaycpLnRleHQKLSAgIC4uLiAgIG5hbWUgPSBjb3VudHJ5LmdldCgnbmFtZScpCi0gICAuLi4gICBwcmludChuYW1lLCByYW5rKQorICAgLi4uICAgICByYW5rID0gY291bnRyeS5maW5kKCdyYW5rJykudGV4dAorICAgLi4uICAgICBuYW1lID0gY291bnRyeS5nZXQoJ25hbWUnKQorICAgLi4uICAgICBwcmludChuYW1lLCByYW5rKQogICAgLi4uCiAgICBMaWVjaHRlbnN0ZWluIDEKICAgIFNpbmdhcG9yZSA0CkBAIC0yMDYsOSArMjExLDkgQEAKIGF0dHJpYnV0ZSB0byB0aGUgcmFuayBlbGVtZW50OjoKIAogICAgPj4+IGZvciByYW5rIGluIHJvb3QuaXRlcigncmFuaycpOgotICAgLi4uICAgbmV3X3JhbmsgPSBpbnQocmFuay50ZXh0KSArIDEKLSAgIC4uLiAgIHJhbmsudGV4dCA9IHN0cihuZXdfcmFuaykKLSAgIC4uLiAgIHJhbmsuc2V0KCd1cGRhdGVkJywgJ3llcycpCisgICAuLi4gICAgIG5ld19yYW5rID0gaW50KHJhbmsudGV4dCkgKyAxCisgICAuLi4gICAgIHJhbmsudGV4dCA9IHN0cihuZXdfcmFuaykKKyAgIC4uLiAgICAgcmFuay5zZXQoJ3VwZGF0ZWQnLCAneWVzJykKICAgIC4uLgogICAgPj4+IHRyZWUud3JpdGUoJ291dHB1dC54bWwnKQogCkBAIC0yNDQsOSArMjQ5LDkgQEAKIHJlbW92ZSBhbGwgY291bnRyaWVzIHdpdGggYSByYW5rIGhpZ2hlciB0aGFuIDUwOjoKIAogICAgPj4+IGZvciBjb3VudHJ5IGluIHJvb3QuZmluZGFsbCgnY291bnRyeScpOgotICAgLi4uICAgcmFuayA9IGludChjb3VudHJ5LmZpbmQoJ3JhbmsnKS50ZXh0KQotICAgLi4uICAgaWYgcmFuayA+IDUwOgotICAgLi4uICAgICByb290LnJlbW92ZShjb3VudHJ5KQorICAgLi4uICAgICByYW5rID0gaW50KGNvdW50cnkuZmluZCgncmFuaycpLnRleHQpCisgICAuLi4gICAgIGlmIHJhbmsgPiA1MDoKKyAgIC4uLiAgICAgICAgIHJvb3QucmVtb3ZlKGNvdW50cnkpCiAgICAuLi4KICAgID4+PiB0cmVlLndyaXRlKCdvdXRwdXQueG1sJykKIApAQCAtMjkyLDcgKzI5Nyw3IEBACiB3aXRoIHByZWZpeGVzIGluIHRoZSBmb3JtIGBgcHJlZml4OnNvbWV0YWdgYCBnZXQgZXhwYW5kZWQgdG8KIGBge3VyaX1zb21ldGFnYGAgd2hlcmUgdGhlICpwcmVmaXgqIGlzIHJlcGxhY2VkIGJ5IHRoZSBmdWxsICpVUkkqLgogQWxzbywgaWYgdGhlcmUgaXMgYSBgZGVmYXVsdCBuYW1lc3BhY2UKLTxodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA2L1JFQy14bWwtbmFtZXMtMjAwNjA4MTYvI2RlZmF1bHRpbmc+YF9fLAorPGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA2L1JFQy14bWwtbmFtZXMtMjAwNjA4MTYvI2RlZmF1bHRpbmc+YF9fLAogdGhhdCBmdWxsIFVSSSBnZXRzIHByZXBlbmRlZCB0byBhbGwgb2YgdGhlIG5vbi1wcmVmaXhlZCB0YWdzLgogCiBIZXJlIGlzIGFuIFhNTCBleGFtcGxlIHRoYXQgaW5jb3Jwb3JhdGVzIHR3byBuYW1lc3BhY2VzLCBvbmUgd2l0aCB0aGUKQEAgLTM2Myw3ICszNjgsNyBAQAogLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBsaW1pdGVkIHN1cHBvcnQgZm9yCi1gWFBhdGggZXhwcmVzc2lvbnMgPGh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoPmBfIGZvciBsb2NhdGluZyBlbGVtZW50cyBpbiBhCitgWFBhdGggZXhwcmVzc2lvbnMgPGh0dHBzOi8vd3d3LnczLm9yZy9UUi94cGF0aD5gXyBmb3IgbG9jYXRpbmcgZWxlbWVudHMgaW4gYQogdHJlZS4gIFRoZSBnb2FsIGlzIHRvIHN1cHBvcnQgYSBzbWFsbCBzdWJzZXQgb2YgdGhlIGFiYnJldmlhdGVkIHN5bnRheDsgYSBmdWxsCiBYUGF0aCBlbmdpbmUgaXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIG1vZHVsZS4KIApAQCAtOTc4LDcgKzk4Myw3IEBACiAgICB0byBnZXQgcHJvcGVyIG5hbWVzcGFjZSBoYW5kbGluZyBvbiBvdXRwdXQuICAqdGV4dF9vcl91cmkqIGlzIGEgc3RyaW5nCiAgICBjb250YWluaW5nIHRoZSBRTmFtZSB2YWx1ZSwgaW4gdGhlIGZvcm0ge3VyaX1sb2NhbCwgb3IsIGlmIHRoZSB0YWcgYXJndW1lbnQKICAgIGlzIGdpdmVuLCB0aGUgVVJJIHBhcnQgb2YgYSBRTmFtZS4gIElmICp0YWcqIGlzIGdpdmVuLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMKLSAgIGludGVycHJldGVkIGFzIGFuIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgorICAgaW50ZXJwcmV0ZWQgYXMgYSBVUkksIGFuZCB0aGlzIGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzIGEgbG9jYWwgbmFtZS4KICAgIDpjbGFzczpgUU5hbWVgIGluc3RhbmNlcyBhcmUgb3BhcXVlLgogCiAKQEAgLTEwNDQsMTYgKzEwNDksMTYgQEAKIAogICAgVGhpcyBjbGFzcyBpcyB0aGUgbG93LWxldmVsIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBtb2R1bGUuICBJdCB1c2VzCiAgICA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAgZm9yIGVmZmljaWVudCwgZXZlbnQtYmFzZWQgcGFyc2luZyBvZiBYTUwuICBJdCBjYW4KLSAgIGJlIGZlZCBYTUwgZGF0YSBpbmNyZW1lbnRhbGwgd2l0aCB0aGUgOm1ldGg6YGZlZWRgIG1ldGhvZCwgYW5kIHBhcnNpbmcgZXZlbnRzCi0gICBhcmUgdHJhbnNsYXRlZCB0byBhIHB1c2ggQVBJIC0gYnkgaW52b2tpbmcgY2FsbGJhY2tzIG9uIHRoZSAqdGFyZ2V0KiBvYmplY3QuCi0gICBJZiAqdGFyZ2V0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgaXMgdXNlZC4gIFRoZQotICAgKmh0bWwqIGFyZ3VtZW50IHdhcyBoaXN0b3JpY2FsbHkgdXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGlzIG5vdwotICAgZGVwcmVjYXRlZC4gIElmICplbmNvZGluZyogWzFdXyBpcyBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcKLSAgIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGUuCisgICBiZSBmZWQgWE1MIGRhdGEgaW5jcmVtZW50YWxseSB3aXRoIHRoZSA6bWV0aDpgZmVlZGAgbWV0aG9kLCBhbmQgcGFyc2luZworICAgZXZlbnRzIGFyZSB0cmFuc2xhdGVkIHRvIGEgcHVzaCBBUEkgLSBieSBpbnZva2luZyBjYWxsYmFja3Mgb24gdGhlICp0YXJnZXQqCisgICBvYmplY3QuICBJZiAqdGFyZ2V0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgaXMgdXNlZC4KKyAgIFRoZSAqaHRtbCogYXJndW1lbnQgd2FzIGhpc3RvcmljYWxseSB1c2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgaXMKKyAgIG5vdyBkZXByZWNhdGVkLiAgSWYgKmVuY29kaW5nKiBbMV1fIGlzIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzIHRoZQorICAgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZS4KIAogICAgLi4gZGVwcmVjYXRlZDo6IDMuNAogICAgICAgVGhlICpodG1sKiBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIHNob3VsZCBiZSBwYXNzZWQgdmlhCi0gICAgICBrZXl3d29yZCB0byBwcmVwYXJlIGZvciB0aGUgcmVtb3ZhbCBvZiB0aGUgKmh0bWwqIGFyZ3VtZW50LgorICAgICAga2V5d29yZCB0byBwcmVwYXJlIGZvciB0aGUgcmVtb3ZhbCBvZiB0aGUgKmh0bWwqIGFyZ3VtZW50LgogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCiAKQEAgLTExODksNSArMTE5NCw1IEBACiAKIC4uIFsjXSBUaGUgZW5jb2Rpbmcgc3RyaW5nIGluY2x1ZGVkIGluIFhNTCBvdXRwdXQgc2hvdWxkIGNvbmZvcm0gdG8gdGhlCiAgICBhcHByb3ByaWF0ZSBzdGFuZGFyZHMuICBGb3IgZXhhbXBsZSwgIlVURi04IiBpcyB2YWxpZCwgYnV0ICJVVEY4IiBpcwotICAgbm90LiAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKLSAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzL2NoYXJhY3Rlci1zZXRzLnhodG1sLgorICAgbm90LiAgU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA2L1JFQy14bWwxMS0yMDA2MDgxNi8jTlQtRW5jb2RpbmdEZWNsCisgICBhbmQgaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMvY2hhcmFjdGVyLXNldHMueGh0bWwuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwucnN0IGIvRG9jL2xpYnJhcnkveG1sLnJzdAppbmRleCAwMTg4MjE5Li4zYzJmYzg5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5yc3QKQEAgLTUsOSArNSwxMyBAQAogCiAuLiBtb2R1bGU6OiB4bWwKICAgIDpzeW5vcHNpczogUGFja2FnZSBjb250YWluaW5nIFhNTCBwcm9jZXNzaW5nIG1vZHVsZXMKKwogLi4gc2VjdGlvbmF1dGhvcjo6IENocmlzdGlhbiBIZWltZXMgPGNocmlzdGlhbkBweXRob24ub3JnPgogLi4gc2VjdGlvbmF1dGhvcjo6IEdlb3JnIEJyYW5kbCA8Z2VvcmdAcHl0aG9uLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveG1sL2AKKworLS0tLS0tLS0tLS0tLS0KIAogUHl0aG9uJ3MgaW50ZXJmYWNlcyBmb3IgcHJvY2Vzc2luZyBYTUwgYXJlIGdyb3VwZWQgaW4gdGhlIGBgeG1sYGAgcGFja2FnZS4KIApAQCAtNjIsNyArNjYsNyBAQAogYmlsbGlvbiBsYXVnaHMgICAgICAgICAgICAgKipZZXMqKiAgICoqWWVzKiogICAgKipZZXMqKiAgICAqKlllcyoqICAgKipZZXMqKgogcXVhZHJhdGljIGJsb3d1cCAgICAgICAgICAgKipZZXMqKiAgICoqWWVzKiogICAgKipZZXMqKiAgICAqKlllcyoqICAgKipZZXMqKgogZXh0ZXJuYWwgZW50aXR5IGV4cGFuc2lvbiAgKipZZXMqKiAgIE5vICAgICgxKSAgTm8gICAgKDIpICAqKlllcyoqICAgTm8gICAgKDMpCi1EVEQgcmV0cmlldmFsICAgICAgICAgICAgICAqKlllcyoqICAgTm8gICAgICAgICBObyAgICAgICAgICoqWWVzKiogICBObworYERURGBfIHJldHJpZXZhbCAgICAgICAgICAgKipZZXMqKiAgIE5vICAgICAgICAgTm8gICAgICAgICAqKlllcyoqICAgTm8KIGRlY29tcHJlc3Npb24gYm9tYiAgICAgICAgIE5vICAgICAgICBObyAgICAgICAgIE5vICAgICAgICAgTm8gICAgICAgICoqWWVzKioKID09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT0gID09PT09PT09PQogCkBAIC05Miw3ICs5Niw3IEBACiAgIGFsc28gcG9pbnQgdG8gZXh0ZXJuYWwgcmVzb3VyY2VzIG9yIGxvY2FsIGZpbGVzLiBUaGUgWE1MCiAgIHBhcnNlciBhY2Nlc3NlcyB0aGUgcmVzb3VyY2UgYW5kIGVtYmVkcyB0aGUgY29udGVudCBpbnRvIHRoZSBYTUwgZG9jdW1lbnQuCiAKLURURCByZXRyaWV2YWwKK2BEVERgXyByZXRyaWV2YWwKICAgU29tZSBYTUwgbGlicmFyaWVzIGxpa2UgUHl0aG9uJ3MgOm1vZDpgeG1sLmRvbS5wdWxsZG9tYCByZXRyaWV2ZSBkb2N1bWVudCB0eXBlCiAgIGRlZmluaXRpb25zIGZyb20gcmVtb3RlIG9yIGxvY2FsIGxvY2F0aW9ucy4gVGhlIGZlYXR1cmUgaGFzIHNpbWlsYXIKICAgaW1wbGljYXRpb25zIGFzIHRoZSBleHRlcm5hbCBlbnRpdHkgZXhwYW5zaW9uIGlzc3VlLgpAQCAtMTI4LDYgKzEzMiw2IEBACiAKIC4uIF9kZWZ1c2VkeG1sOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2RlZnVzZWR4bWwvCiAuLiBfZGVmdXNlZGV4cGF0OiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2RlZnVzZWRleHBhdC8KLS4uIF9CaWxsaW9uIExhdWdoczogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaWxsaW9uX2xhdWdocwotLi4gX1pJUCBib21iOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ppcF9ib21iCi0uLiBfRFREOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RvY3VtZW50X1R5cGVfRGVmaW5pdGlvbgorLi4gX0JpbGxpb24gTGF1Z2hzOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CaWxsaW9uX2xhdWdocworLi4gX1pJUCBib21iOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9aaXBfYm9tYgorLi4gX0RURDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRG9jdW1lbnRfdHlwZV9kZWZpbml0aW9uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIucnN0IGIvRG9jL2xpYnJhcnkveG1sLnNheC5oYW5kbGVyLnJzdAppbmRleCAwZmIzMzQxLi5hZTA4NzdjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuc2F4LmhhbmRsZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5zYXguaGFuZGxlci5yc3QKQEAgLTMsOSArMywxMyBAQAogCiAuLiBtb2R1bGU6OiB4bWwuc2F4LmhhbmRsZXIKICAgIDpzeW5vcHNpczogQmFzZSBjbGFzc2VzIGZvciBTQVggZXZlbnQgaGFuZGxlcnMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IExhcnMgTWFyaXVzIEdhcnNob2wgPGxhcnNnYUBnYXJzaG9sLnByaXYubm8+CiAuLiBzZWN0aW9uYXV0aG9yOjogTWFydGluIHYuIEzDtndpcyA8bWFydGluQHYubG9ld2lzLmRlPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi94bWwvc2F4L2hhbmRsZXIucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSBTQVggQVBJIGRlZmluZXMgZm91ciBraW5kcyBvZiBoYW5kbGVyczogY29udGVudCBoYW5kbGVycywgRFREIGhhbmRsZXJzLAogZXJyb3IgaGFuZGxlcnMsIGFuZCBlbnRpdHkgcmVzb2x2ZXJzLiBBcHBsaWNhdGlvbnMgbm9ybWFsbHkgb25seSBuZWVkIHRvCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuc2F4LnJlYWRlci5yc3QgYi9Eb2MvbGlicmFyeS94bWwuc2F4LnJlYWRlci5yc3QKaW5kZXggM2FiNjA2My4uYzM2OGZjMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLnNheC5yZWFkZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5zYXgucmVhZGVyLnJzdApAQCAtMyw5ICszLDEzIEBACiAKIC4uIG1vZHVsZTo6IHhtbC5zYXgueG1scmVhZGVyCiAgICA6c3lub3BzaXM6IEludGVyZmFjZSB3aGljaCBTQVgtY29tcGxpYW50IFhNTCBwYXJzZXJzIG11c3QgaW1wbGVtZW50LgorCiAuLiBtb2R1bGVhdXRob3I6OiBMYXJzIE1hcml1cyBHYXJzaG9sIDxsYXJzZ2FAZ2Fyc2hvbC5wcml2Lm5vPgogLi4gc2VjdGlvbmF1dGhvcjo6IE1hcnRpbiB2LiBMw7Z3aXMgPG1hcnRpbkB2LmxvZXdpcy5kZT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveG1sL3NheC94bWxyZWFkZXIucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFNBWCBwYXJzZXJzIGltcGxlbWVudCB0aGUgOmNsYXNzOmBYTUxSZWFkZXJgIGludGVyZmFjZS4gVGhleSBhcmUgaW1wbGVtZW50ZWQgaW4KIGEgUHl0aG9uIG1vZHVsZSwgd2hpY2ggbXVzdCBwcm92aWRlIGEgZnVuY3Rpb24gOmZ1bmM6YGNyZWF0ZV9wYXJzZXJgLiBUaGlzCkBAIC05OCwxMCArMTAyLDEyIEBACiAKICAgIFByb2Nlc3MgYW4gaW5wdXQgc291cmNlLCBwcm9kdWNpbmcgU0FYIGV2ZW50cy4gVGhlICpzb3VyY2UqIG9iamVjdCBjYW4gYmUgYQogICAgc3lzdGVtIGlkZW50aWZpZXIgKGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBpbnB1dCBzb3VyY2UgLS0gdHlwaWNhbGx5IGEgZmlsZQotICAgbmFtZSBvciBhbiBVUkwpLCBhIGZpbGUtbGlrZSBvYmplY3QsIG9yIGFuIDpjbGFzczpgSW5wdXRTb3VyY2VgIG9iamVjdC4gV2hlbgorICAgbmFtZSBvciBhIFVSTCksIGEgZmlsZS1saWtlIG9iamVjdCwgb3IgYW4gOmNsYXNzOmBJbnB1dFNvdXJjZWAgb2JqZWN0LiBXaGVuCiAgICA6bWV0aDpgcGFyc2VgIHJldHVybnMsIHRoZSBpbnB1dCBpcyBjb21wbGV0ZWx5IHByb2Nlc3NlZCwgYW5kIHRoZSBwYXJzZXIgb2JqZWN0Ci0gICBjYW4gYmUgZGlzY2FyZGVkIG9yIHJlc2V0LiBBcyBhIGxpbWl0YXRpb24sIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkKLSAgIGFjY2VwdHMgYnl0ZSBzdHJlYW1zOyBwcm9jZXNzaW5nIG9mIGNoYXJhY3RlciBzdHJlYW1zIGlzIGZvciBmdXJ0aGVyIHN0dWR5LgorICAgY2FuIGJlIGRpc2NhcmRlZCBvciByZXNldC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFkZGVkIHN1cHBvcnQgb2YgY2hhcmFjdGVyIHN0cmVhbXMuCiAKIAogLi4gbWV0aG9kOjogWE1MUmVhZGVyLmdldENvbnRlbnRIYW5kbGVyKCkKQEAgLTIyNiwxMiArMjMyLDEyIEBACiAKIC4uIG1ldGhvZDo6IExvY2F0b3IuZ2V0Q29sdW1uTnVtYmVyKCkKIAotICAgUmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBjdXJyZW50IGV2ZW50IGVuZHMuCisgICBSZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgd2hlcmUgdGhlIGN1cnJlbnQgZXZlbnQgYmVnaW5zLgogCiAKIC4uIG1ldGhvZDo6IExvY2F0b3IuZ2V0TGluZU51bWJlcigpCiAKLSAgIFJldHVybiB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIGN1cnJlbnQgZXZlbnQgZW5kcy4KKyAgIFJldHVybiB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIGN1cnJlbnQgZXZlbnQgYmVnaW5zLgogCiAKIC4uIG1ldGhvZDo6IExvY2F0b3IuZ2V0UHVibGljSWQoKQpAQCAtMjg4LDggKzI5NCw3IEBACiAKIC4uIG1ldGhvZDo6IElucHV0U291cmNlLnNldEJ5dGVTdHJlYW0oYnl0ZWZpbGUpCiAKLSAgIFNldCB0aGUgYnl0ZSBzdHJlYW0gKGEgUHl0aG9uIGZpbGUtbGlrZSBvYmplY3Qgd2hpY2ggZG9lcyBub3QgcGVyZm9ybQotICAgYnl0ZS10by1jaGFyYWN0ZXIgY29udmVyc2lvbikgZm9yIHRoaXMgaW5wdXQgc291cmNlLgorICAgU2V0IHRoZSBieXRlIHN0cmVhbSAoYSA6dGVybTpgYmluYXJ5IGZpbGVgKSBmb3IgdGhpcyBpbnB1dCBzb3VyY2UuCiAKICAgIFRoZSBTQVggcGFyc2VyIHdpbGwgaWdub3JlIHRoaXMgaWYgdGhlcmUgaXMgYWxzbyBhIGNoYXJhY3RlciBzdHJlYW0gc3BlY2lmaWVkLAogICAgYnV0IGl0IHdpbGwgdXNlIGEgYnl0ZSBzdHJlYW0gaW4gcHJlZmVyZW5jZSB0byBvcGVuaW5nIGEgVVJJIGNvbm5lY3Rpb24gaXRzZWxmLgpAQCAtMzA4LDggKzMxMyw3IEBACiAKIC4uIG1ldGhvZDo6IElucHV0U291cmNlLnNldENoYXJhY3RlclN0cmVhbShjaGFyZmlsZSkKIAotICAgU2V0IHRoZSBjaGFyYWN0ZXIgc3RyZWFtIGZvciB0aGlzIGlucHV0IHNvdXJjZS4gKFRoZSBzdHJlYW0gbXVzdCBiZSBhIFB5dGhvbiAxLjYKLSAgIFVuaWNvZGUtd3JhcHBlZCBmaWxlLWxpa2UgdGhhdCBwZXJmb3JtcyBjb252ZXJzaW9uIHRvIHN0cmluZ3MuKQorICAgU2V0IHRoZSBjaGFyYWN0ZXIgc3RyZWFtIChhIDp0ZXJtOmB0ZXh0IGZpbGVgKSBmb3IgdGhpcyBpbnB1dCBzb3VyY2UuCiAKICAgIElmIHRoZXJlIGlzIGEgY2hhcmFjdGVyIHN0cmVhbSBzcGVjaWZpZWQsIHRoZSBTQVggcGFyc2VyIHdpbGwgaWdub3JlIGFueSBieXRlCiAgICBzdHJlYW0gYW5kIHdpbGwgbm90IGF0dGVtcHQgdG8gb3BlbiBhIFVSSSBjb25uZWN0aW9uIHRvIHRoZSBzeXN0ZW0gaWRlbnRpZmllci4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5zYXgucnN0IGIvRG9jL2xpYnJhcnkveG1sLnNheC5yc3QKaW5kZXggZTk1ZDZiMC4uNzhkNjYzMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLnNheC5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLnNheC5yc3QKQEAgLTMsMTAgKzMsMTQgQEAKIAogLi4gbW9kdWxlOjogeG1sLnNheAogICAgOnN5bm9wc2lzOiBQYWNrYWdlIGNvbnRhaW5pbmcgU0FYMiBiYXNlIGNsYXNzZXMgYW5kIGNvbnZlbmllbmNlIGZ1bmN0aW9ucy4KKwogLi4gbW9kdWxlYXV0aG9yOjogTGFycyBNYXJpdXMgR2Fyc2hvbCA8bGFyc2dhQGdhcnNob2wucHJpdi5ubz4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogLi4gc2VjdGlvbmF1dGhvcjo6IE1hcnRpbiB2LiBMw7Z3aXMgPG1hcnRpbkB2LmxvZXdpcy5kZT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveG1sL3NheC9fX2luaXRfXy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHhtbC5zYXhgIHBhY2thZ2UgcHJvdmlkZXMgYSBudW1iZXIgb2YgbW9kdWxlcyB3aGljaCBpbXBsZW1lbnQgdGhlCiBTaW1wbGUgQVBJIGZvciBYTUwgKFNBWCkgaW50ZXJmYWNlIGZvciBQeXRob24uICBUaGUgcGFja2FnZSBpdHNlbGYgcHJvdmlkZXMgdGhlCkBAIC00Nyw3ICs1MSwxMSBAQAogLi4gZnVuY3Rpb246OiBwYXJzZVN0cmluZyhzdHJpbmcsIGhhbmRsZXIsIGVycm9yX2hhbmRsZXI9aGFuZGxlci5FcnJvckhhbmRsZXIoKSkKIAogICAgU2ltaWxhciB0byA6ZnVuYzpgcGFyc2VgLCBidXQgcGFyc2VzIGZyb20gYSBidWZmZXIgKnN0cmluZyogcmVjZWl2ZWQgYXMgYQotICAgcGFyYW1ldGVyLgorICAgcGFyYW1ldGVyLiAgKnN0cmluZyogbXVzdCBiZSBhIDpjbGFzczpgc3RyYCBpbnN0YW5jZSBvciBhCisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgQWRkZWQgc3VwcG9ydCBvZiA6Y2xhc3M6YHN0cmAgaW5zdGFuY2VzLgogCiBBIHR5cGljYWwgU0FYIGFwcGxpY2F0aW9uIHVzZXMgdGhyZWUga2luZHMgb2Ygb2JqZWN0czogcmVhZGVycywgaGFuZGxlcnMgYW5kCiBpbnB1dCBzb3VyY2VzLiAgIlJlYWRlciIgaW4gdGhpcyBjb250ZXh0IGlzIGFub3RoZXIgdGVybSBmb3IgcGFyc2VyLCBpLmUuIHNvbWUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5zYXgudXRpbHMucnN0IGIvRG9jL2xpYnJhcnkveG1sLnNheC51dGlscy5yc3QKaW5kZXggMTRjZjA3OC4uNTM4Yjc5OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLnNheC51dGlscy5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLnNheC51dGlscy5yc3QKQEAgLTMsOSArMywxMyBAQAogCiAuLiBtb2R1bGU6OiB4bWwuc2F4LnNheHV0aWxzCiAgICA6c3lub3BzaXM6IENvbnZlbmllbmNlIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBmb3IgdXNlIHdpdGggU0FYLgorCiAuLiBtb2R1bGVhdXRob3I6OiBMYXJzIE1hcml1cyBHYXJzaG9sIDxsYXJzZ2FAZ2Fyc2hvbC5wcml2Lm5vPgogLi4gc2VjdGlvbmF1dGhvcjo6IE1hcnRpbiB2LiBMw7Z3aXMgPG1hcnRpbkB2LmxvZXdpcy5kZT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveG1sL3NheC9zYXh1dGlscy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIG1vZHVsZSA6bW9kOmB4bWwuc2F4LnNheHV0aWxzYCBjb250YWlucyBhIG51bWJlciBvZiBjbGFzc2VzIGFuZCBmdW5jdGlvbnMKIHRoYXQgYXJlIGNvbW1vbmx5IHVzZWZ1bCB3aGVuIGNyZWF0aW5nIFNBWCBhcHBsaWNhdGlvbnMsIGVpdGhlciBpbiBkaXJlY3QgdXNlLApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1scnBjLmNsaWVudC5yc3QgYi9Eb2MvbGlicmFyeS94bWxycGMuY2xpZW50LnJzdAppbmRleCBjYzVlODNhLi5lNzkxNmQyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWxycGMuY2xpZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWxycGMuY2xpZW50LnJzdApAQCAtMywxOCArMywxOCBAQAogCiAuLiBtb2R1bGU6OiB4bWxycGMuY2xpZW50CiAgICA6c3lub3BzaXM6IFhNTC1SUEMgY2xpZW50IGFjY2Vzcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogRnJlZHJpayBMdW5kaCA8ZnJlZHJpa0BweXRob253YXJlLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBFcmljIFMuIFJheW1vbmQgPGVzckBzbmFyay50aHlyc3VzLmNvbT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveG1scnBjL2NsaWVudC5weWAKIAogLi4gWFhYIE5vdCBldmVyeXRoaW5nIGlzIGRvY3VtZW50ZWQgeWV0LiAgSXQgbWlnaHQgYmUgZ29vZCB0byBkZXNjcmliZQogICAgTWFyc2hhbGxlciwgVW5tYXJzaGFsbGVyLCBnZXRwYXJzZXIgYW5kIFRyYW5zcG9ydC4KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveG1scnBjL2NsaWVudC5weWAKLQogLS0tLS0tLS0tLS0tLS0KIAotWE1MLVJQQyBpcyBhIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCBtZXRob2QgdGhhdCB1c2VzIFhNTCBwYXNzZWQgdmlhIEhUVFAgYXMgYQorWE1MLVJQQyBpcyBhIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCBtZXRob2QgdGhhdCB1c2VzIFhNTCBwYXNzZWQgdmlhIEhUVFAoUykgYXMgYQogdHJhbnNwb3J0LiAgV2l0aCBpdCwgYSBjbGllbnQgY2FuIGNhbGwgbWV0aG9kcyB3aXRoIHBhcmFtZXRlcnMgb24gYSByZW1vdGUKIHNlcnZlciAodGhlIHNlcnZlciBpcyBuYW1lZCBieSBhIFVSSSkgYW5kIGdldCBiYWNrIHN0cnVjdHVyZWQgZGF0YS4gIFRoaXMgbW9kdWxlCiBzdXBwb3J0cyB3cml0aW5nIFhNTC1SUEMgY2xpZW50IGNvZGU7IGl0IGhhbmRsZXMgYWxsIHRoZSBkZXRhaWxzIG9mIHRyYW5zbGF0aW5nCkBAIC0yNywxMCArMjcsMTAgQEAKICAgIGNvbnN0cnVjdGVkIGRhdGEuICBJZiB5b3UgbmVlZCB0byBwYXJzZSB1bnRydXN0ZWQgb3IgdW5hdXRoZW50aWNhdGVkIGRhdGEgc2VlCiAgICA6cmVmOmB4bWwtdnVsbmVyYWJpbGl0aWVzYC4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuMworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKIAotICAgRm9yIGh0dHBzIFVSSXMsIDptb2Q6YHhtbHJwYy5jbGllbnRgIG5vdyBwZXJmb3JtcyBhbGwgdGhlIG5lY2Vzc2FyeQotICAgY2VydGlmaWNhdGUgYW5kIGhvc3RuYW1lIGNoZWNrcyBieSBkZWZhdWx0CisgICBGb3IgSFRUUFMgVVJJcywgOm1vZDpgeG1scnBjLmNsaWVudGAgbm93IHBlcmZvcm1zIGFsbCB0aGUgbmVjZXNzYXJ5CisgICBjZXJ0aWZpY2F0ZSBhbmQgaG9zdG5hbWUgY2hlY2tzIGJ5IGRlZmF1bHQuCiAKIC4uIGNsYXNzOjogU2VydmVyUHJveHkodXJpLCB0cmFuc3BvcnQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSwgdmVyYm9zZT1GYWxzZSwgXAogICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19ub25lPUZhbHNlLCB1c2VfZGF0ZXRpbWU9RmFsc2UsIFwKQEAgLTQ2LDE1ICs0NiwxOSBAQAogICAgOmNsYXNzOmBTYWZlVHJhbnNwb3J0YCBpbnN0YW5jZSBmb3IgaHR0cHM6IFVSTHMgYW5kIGFuIGludGVybmFsIEhUVFAKICAgIDpjbGFzczpgVHJhbnNwb3J0YCBpbnN0YW5jZSBvdGhlcndpc2UuICBUaGUgb3B0aW9uYWwgdGhpcmQgYXJndW1lbnQgaXMgYW4KICAgIGVuY29kaW5nLCBieSBkZWZhdWx0IFVURi04LiBUaGUgb3B0aW9uYWwgZm91cnRoIGFyZ3VtZW50IGlzIGEgZGVidWdnaW5nIGZsYWcuCisKKyAgIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgcmV0dXJuZWQgcHJveHkgaW5zdGFuY2UuCiAgICBJZiAqYWxsb3dfbm9uZSogaXMgdHJ1ZSwgIHRoZSBQeXRob24gY29uc3RhbnQgYGBOb25lYGAgd2lsbCBiZSB0cmFuc2xhdGVkIGludG8KICAgIFhNTDsgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIGZvciBgYE5vbmVgYCB0byByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIFRoaXMgaXMKICAgIGEgY29tbW9ubHktdXNlZCBleHRlbnNpb24gdG8gdGhlIFhNTC1SUEMgc3BlY2lmaWNhdGlvbiwgYnV0IGlzbid0IHN1cHBvcnRlZCBieQotICAgYWxsIGNsaWVudHMgYW5kIHNlcnZlcnM7IHNlZSBodHRwOi8vb250b3N5cy5jb20veG1sLXJwYy9leHRlbnNpb25zLnBocCBmb3IgYQotICAgZGVzY3JpcHRpb24uICBUaGUgKnVzZV9idWlsdGluX3R5cGVzKiBmbGFnIGNhbiBiZSB1c2VkIHRvIGNhdXNlIGRhdGUvdGltZSB2YWx1ZXMKKyAgIGFsbCBjbGllbnRzIGFuZCBzZXJ2ZXJzOyBzZWUgYGh0dHA6Ly9vbnRvc3lzLmNvbS94bWwtcnBjL2V4dGVuc2lvbnMucGhwCisgICA8aHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTMwMTIwMDc0ODA0L2h0dHA6Ly9vbnRvc3lzLmNvbS94bWwtcnBjL2V4dGVuc2lvbnMucGhwPmBfCisgICBmb3IgYSBkZXNjcmlwdGlvbi4KKyAgIFRoZSAqdXNlX2J1aWx0aW5fdHlwZXMqIGZsYWcgY2FuIGJlIHVzZWQgdG8gY2F1c2UgZGF0ZS90aW1lIHZhbHVlcwogICAgdG8gYmUgcHJlc2VudGVkIGFzIDpjbGFzczpgZGF0ZXRpbWUuZGF0ZXRpbWVgIG9iamVjdHMgYW5kIGJpbmFyeSBkYXRhIHRvIGJlCiAgICBwcmVzZW50ZWQgYXMgOmNsYXNzOmBieXRlc2Agb2JqZWN0czsgdGhpcyBmbGFnIGlzIGZhbHNlIGJ5IGRlZmF1bHQuCi0gICA6Y2xhc3M6YGRhdGV0aW1lLmRhdGV0aW1lYCBhbmQgOmNsYXNzOmBieXRlc2Agb2JqZWN0cyBtYXkgYmUgcGFzc2VkIHRvIGNhbGxzLgotCisgICA6Y2xhc3M6YGRhdGV0aW1lLmRhdGV0aW1lYCwgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzCisgICBtYXkgYmUgcGFzc2VkIHRvIGNhbGxzLgogICAgVGhlIG9ic29sZXRlICp1c2VfZGF0ZXRpbWUqIGZsYWcgaXMgc2ltaWxhciB0byAqdXNlX2J1aWx0aW5fdHlwZXMqIGJ1dCBpdAogICAgYXBwbGllcyBvbmx5IHRvIGRhdGUvdGltZSB2YWx1ZXMuCiAKQEAgLTYzLDcgKzY3LDcgQEAKICAgIHBvcnRpb24gd2lsbCBiZSBiYXNlNjQtZW5jb2RlZCBhcyBhbiBIVFRQICdBdXRob3JpemF0aW9uJyBoZWFkZXIsIGFuZCBzZW50IHRvCiAgICB0aGUgcmVtb3RlIHNlcnZlciBhcyBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHByb2Nlc3Mgd2hlbiBpbnZva2luZyBhbiBYTUwtUlBDCiAgICBtZXRob2QuICBZb3Ugb25seSBuZWVkIHRvIHVzZSB0aGlzIGlmIHRoZSByZW1vdGUgc2VydmVyIHJlcXVpcmVzIGEgQmFzaWMKLSAgIEF1dGhlbnRpY2F0aW9uIHVzZXIgYW5kIHBhc3N3b3JkLiBJZiBhbiBIVFRQUyB1cmwgaXMgcHJvdmlkZWQsICpjb250ZXh0KiBtYXkKKyAgIEF1dGhlbnRpY2F0aW9uIHVzZXIgYW5kIHBhc3N3b3JkLiBJZiBhbiBIVFRQUyBVUkwgaXMgcHJvdmlkZWQsICpjb250ZXh0KiBtYXkKICAgIGJlIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIGFuZCBjb25maWd1cmVzIHRoZSBTU0wgc2V0dGluZ3Mgb2YgdGhlIHVuZGVybHlpbmcKICAgIEhUVFBTIGNvbm5lY3Rpb24uCiAKQEAgLTczLDQyICs3Nyw0MyBAQAogICAgbWV0aG9kcyBpdCBzdXBwb3J0cyAoc2VydmljZSBkaXNjb3ZlcnkpIGFuZCBmZXRjaCBvdGhlciBzZXJ2ZXItYXNzb2NpYXRlZAogICAgbWV0YWRhdGEuCiAKLSAgIDpjbGFzczpgU2VydmVyUHJveHlgIGluc3RhbmNlIG1ldGhvZHMgdGFrZSBQeXRob24gYmFzaWMgdHlwZXMgYW5kIG9iamVjdHMgYXMKLSAgIGFyZ3VtZW50cyBhbmQgcmV0dXJuIFB5dGhvbiBiYXNpYyB0eXBlcyBhbmQgY2xhc3Nlcy4gIFR5cGVzIHRoYXQgYXJlIGNvbmZvcm1hYmxlCi0gICAoZS5nLiB0aGF0IGNhbiBiZSBtYXJzaGFsbGVkIHRocm91Z2ggWE1MKSwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIChhbmQgZXhjZXB0Ci0gICB3aGVyZSBub3RlZCwgdGhleSBhcmUgdW5tYXJzaGFsbGVkIGFzIHRoZSBzYW1lIFB5dGhvbiB0eXBlKToKKyAgIFR5cGVzIHRoYXQgYXJlIGNvbmZvcm1hYmxlIChlLmcuIHRoYXQgY2FuIGJlIG1hcnNoYWxsZWQgdGhyb3VnaCBYTUwpLAorICAgaW5jbHVkZSB0aGUgZm9sbG93aW5nIChhbmQgZXhjZXB0IHdoZXJlIG5vdGVkLCB0aGV5IGFyZSB1bm1hcnNoYWxsZWQKKyAgIGFzIHRoZSBzYW1lIFB5dGhvbiB0eXBlKToKIAogICAgLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAogCi0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi0gICB8IDpjb25zdDpgYm9vbGVhbmAgICAgICAgICAgICAgICAgfCBUaGUgOmNvbnN0OmBUcnVlYCBhbmQgOmNvbnN0OmBGYWxzZWAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDpjb25zdDpgaW50ZWdlcnNgICAgICAgICAgICAgICAgfCBQYXNzIGluIGRpcmVjdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YGZsb2F0aW5nLXBvaW50IG51bWJlcnNgIHwgUGFzcyBpbiBkaXJlY3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBzdHJpbmdzYCAgICAgICAgICAgICAgICB8IFBhc3MgaW4gZGlyZWN0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDpjb25zdDpgYXJyYXlzYCAgICAgICAgICAgICAgICAgfCBBbnkgUHl0aG9uIHNlcXVlbmNlIHR5cGUgY29udGFpbmluZyAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbmZvcm1hYmxlIGVsZW1lbnRzLiBBcnJheXMgYXJlIHJldHVybmVkICAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXMgbGlzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBzdHJ1Y3R1cmVzYCAgICAgICAgICAgICB8IEEgUHl0aG9uIGRpY3Rpb25hcnkuIEtleXMgbXVzdCBiZSBzdHJpbmdzLCAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdmFsdWVzIG1heSBiZSBhbnkgY29uZm9ybWFibGUgdHlwZS4gT2JqZWN0cyB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcyBjYW4gYmUgcGFzc2VkIGluOyAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9ubHkgdGhlaXIgKl9fZGljdF9fKiBhdHRyaWJ1dGUgaXMgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNtaXR0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBkYXRlc2AgICAgICAgICAgICAgICAgICB8IEluIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLiAgUGFzcyBpbiBhbiAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgRGF0ZVRpbWVgIGNsYXNzIG9yICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhIDpjbGFzczpgZGF0ZXRpbWUuZGF0ZXRpbWVgIGluc3RhbmNlLiAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCA6Y29uc3Q6YGJpbmFyeSBkYXRhYCAgICAgICAgICAgIHwgUGFzcyBpbiBhbiBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBCaW5hcnlgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3cmFwcGVyIGNsYXNzIG9yIGEgOmNsYXNzOmBieXRlc2AgaW5zdGFuY2UuIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgWE1MLVJQQyB0eXBlICAgICAgICAgfCBQeXRob24gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYGJvb2xlYW5gYCAgICAgICAgICB8IDpjbGFzczpgYm9vbGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgaW50YGAgb3IgYGBpNGBgICAgIHwgOmNsYXNzOmBpbnRgIGluIHJhbmdlIGZyb20gLTIxNDc0ODM2NDggdG8gMjE0NzQ4MzY0Ny4gfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGBkb3VibGVgYCAgICAgICAgICAgfCA6Y2xhc3M6YGZsb2F0YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHN0cmluZ2BgICAgICAgICAgICB8IDpjbGFzczpgc3RyYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgYXJyYXlgYCAgICAgICAgICAgIHwgOmNsYXNzOmBsaXN0YCBvciA6Y2xhc3M6YHR1cGxlYCBjb250YWluaW5nICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICB8IGNvbmZvcm1hYmxlIGVsZW1lbnRzLiAgQXJyYXlzIGFyZSByZXR1cm5lZCBhcyAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YGxpc3RzIDxsaXN0PmAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHN0cnVjdGBgICAgICAgICAgICB8IDpjbGFzczpgZGljdGAuICBLZXlzIG11c3QgYmUgc3RyaW5ncywgdmFsdWVzIG1heSBiZSAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBhbnkgY29uZm9ybWFibGUgdHlwZS4gIE9iamVjdHMgb2YgdXNlci1kZWZpbmVkICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NlcyBjYW4gYmUgcGFzc2VkIGluOyBvbmx5IHRoZWlyICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICB8IDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBhdHRyaWJ1dGUgaXMgdHJhbnNtaXR0ZWQuICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgZGF0ZVRpbWUuaXNvODYwMWBgIHwgOmNsYXNzOmBEYXRlVGltZWAgb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAuICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICB8IFJldHVybmVkIHR5cGUgZGVwZW5kcyBvbiB2YWx1ZXMgb2YgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAqdXNlX2J1aWx0aW5fdHlwZXMqIGFuZCAqdXNlX2RhdGV0aW1lKiBmbGFncy4gICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYGJhc2U2NGBgICAgICAgICAgICB8IDpjbGFzczpgQmluYXJ5YCwgOmNsYXNzOmBieXRlc2Agb3IgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YGJ5dGVhcnJheWAuICBSZXR1cm5lZCB0eXBlIGRlcGVuZHMgb24gdGhlICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgdmFsdWUgb2YgdGhlICp1c2VfYnVpbHRpbl90eXBlcyogZmxhZy4gICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGBuaWxgYCAgICAgICAgICAgICAgfCBUaGUgYGBOb25lYGAgY29uc3RhbnQuICBQYXNzaW5nIGlzIGFsbG93ZWQgb25seSBpZiAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgKmFsbG93X25vbmUqIGlzIHRydWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogICAgVGhpcyBpcyB0aGUgZnVsbCBzZXQgb2YgZGF0YSB0eXBlcyBzdXBwb3J0ZWQgYnkgWE1MLVJQQy4gIE1ldGhvZCBjYWxscyBtYXkgYWxzbwogICAgcmFpc2UgYSBzcGVjaWFsIDpleGM6YEZhdWx0YCBpbnN0YW5jZSwgdXNlZCB0byBzaWduYWwgWE1MLVJQQyBzZXJ2ZXIgZXJyb3JzLCBvcgpAQCAtMTIzLDEzICsxMjgsMTMgQEAKICAgIHRoZSBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBBU0NJSSB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAzMSAoZXhjZXB0LCBvZiBjb3Vyc2UsCiAgICB0YWIsIG5ld2xpbmUgYW5kIGNhcnJpYWdlIHJldHVybik7IGZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiBhbiBYTUwtUlBDCiAgICByZXF1ZXN0IHRoYXQgaXNuJ3Qgd2VsbC1mb3JtZWQgWE1MLiAgSWYgeW91IGhhdmUgdG8gcGFzcyBhcmJpdHJhcnkgYnl0ZXMKLSAgIHZpYSBYTUwtUlBDLCB1c2UgdGhlIDpjbGFzczpgYnl0ZXNgIGNsYXNzIG9yIHRoZSBjbGFzczpgQmluYXJ5YCB3cmFwcGVyIGNsYXNzCi0gICBkZXNjcmliZWQgYmVsb3cuCisgICB2aWEgWE1MLVJQQywgdXNlIDpjbGFzczpgYnl0ZXNgIG9yIDpjbGFzczpgYnl0ZWFycmF5YCBjbGFzc2VzIG9yIHRoZQorICAgOmNsYXNzOmBCaW5hcnlgIHdyYXBwZXIgY2xhc3MgZGVzY3JpYmVkIGJlbG93LgogCiAgICA6Y2xhc3M6YFNlcnZlcmAgaXMgcmV0YWluZWQgYXMgYW4gYWxpYXMgZm9yIDpjbGFzczpgU2VydmVyUHJveHlgIGZvciBiYWNrd2FyZHMKICAgIGNvbXBhdGliaWxpdHkuICBOZXcgY29kZSBzaG91bGQgdXNlIDpjbGFzczpgU2VydmVyUHJveHlgLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4zCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQogICAgICAgQWRkZWQgdGhlICpjb250ZXh0KiBhcmd1bWVudC4KIAogCkBAIC0xNDIsNyArMTQ3LDcgQEAKICAgIGBYTUwtUlBDIEludHJvc3BlY3Rpb24gPGh0dHA6Ly94bWxycGMtYy5zb3VyY2Vmb3JnZS5uZXQvaW50cm9zcGVjdGlvbi5odG1sPmBfCiAgICAgICBEZXNjcmliZXMgdGhlIFhNTC1SUEMgcHJvdG9jb2wgZXh0ZW5zaW9uIGZvciBpbnRyb3NwZWN0aW9uLgogCi0gICBgWE1MLVJQQyBTcGVjaWZpY2F0aW9uIDxodHRwOi8vd3d3LnhtbHJwYy5jb20vc3BlYz5gXworICAgYFhNTC1SUEMgU3BlY2lmaWNhdGlvbiA8aHR0cDovL3htbHJwYy5zY3JpcHRpbmcuY29tL3NwZWMuaHRtbD5gXwogICAgICAgVGhlIG9mZmljaWFsIHNwZWNpZmljYXRpb24uCiAKICAgIGBVbm9mZmljaWFsIFhNTC1SUEMgRXJyYXRhIDxodHRwOi8vZWZmYm90Lm9yZy96b25lL3htbHJwYy1lcnJhdGEuaHRtPmBfCkBAIC0xNjQsNyArMTY5LDcgQEAKIDpjbGFzczpgRmF1bHRgIG9yIDpjbGFzczpgUHJvdG9jb2xFcnJvcmAgb2JqZWN0IGluZGljYXRpbmcgYW4gZXJyb3IuCiAKIFNlcnZlcnMgdGhhdCBzdXBwb3J0IHRoZSBYTUwgaW50cm9zcGVjdGlvbiBBUEkgc3VwcG9ydCBzb21lIGNvbW1vbiBtZXRob2RzCi1ncm91cGVkIHVuZGVyIHRoZSByZXNlcnZlZCA6YXR0cjpgc3lzdGVtYCBhdHRyaWJ1dGU6Citncm91cGVkIHVuZGVyIHRoZSByZXNlcnZlZCA6YXR0cjpgflNlcnZlclByb3h5LnN5c3RlbWAgYXR0cmlidXRlOgogCiAKIC4uIG1ldGhvZDo6IFNlcnZlclByb3h5LnN5c3RlbS5saXN0TWV0aG9kcygpCkBAIC0yMDAsMTMgKzIwNSwxOCBAQAogICAgbm8gc3VjaCBzdHJpbmcgaXMgYXZhaWxhYmxlLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuIFRoZSBkb2N1bWVudGF0aW9uCiAgICBzdHJpbmcgbWF5IGNvbnRhaW4gSFRNTCBtYXJrdXAuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisKKyAgIEluc3RhbmNlcyBvZiA6Y2xhc3M6YFNlcnZlclByb3h5YCBzdXBwb3J0IHRoZSA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbAorICAgZm9yIGNsb3NpbmcgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0LgorCiAKIEEgd29ya2luZyBleGFtcGxlIGZvbGxvd3MuIFRoZSBzZXJ2ZXIgY29kZTo6CiAKICAgIGZyb20geG1scnBjLnNlcnZlciBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyCiAKICAgIGRlZiBpc19ldmVuKG4pOgotICAgICAgIHJldHVybiBuJTIgPT0gMAorICAgICAgIHJldHVybiBuICUgMiA9PSAwCiAKICAgIHNlcnZlciA9IFNpbXBsZVhNTFJQQ1NlcnZlcigoImxvY2FsaG9zdCIsIDgwMDApKQogICAgcHJpbnQoIkxpc3RlbmluZyBvbiBwb3J0IDgwMDAuLi4iKQpAQCAtMjE3LDMzICsyMjcsMzUgQEAKIAogICAgaW1wb3J0IHhtbHJwYy5jbGllbnQKIAotICAgcHJveHkgPSB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5KCJodHRwOi8vbG9jYWxob3N0OjgwMDAvIikKLSAgIHByaW50KCIzIGlzIGV2ZW46ICVzIiAlIHN0cihwcm94eS5pc19ldmVuKDMpKSkKLSAgIHByaW50KCIxMDAgaXMgZXZlbjogJXMiICUgc3RyKHByb3h5LmlzX2V2ZW4oMTAwKSkpCisgICB3aXRoIHhtbHJwYy5jbGllbnQuU2VydmVyUHJveHkoImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC8iKSBhcyBwcm94eToKKyAgICAgICBwcmludCgiMyBpcyBldmVuOiAlcyIgJSBzdHIocHJveHkuaXNfZXZlbigzKSkpCisgICAgICAgcHJpbnQoIjEwMCBpcyBldmVuOiAlcyIgJSBzdHIocHJveHkuaXNfZXZlbigxMDApKSkKIAogLi4gX2RhdGV0aW1lLW9iamVjdHM6CiAKIERhdGVUaW1lIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0KIAotVGhpcyBjbGFzcyBtYXkgYmUgaW5pdGlhbGl6ZWQgd2l0aCBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCwgYSB0aW1lCi10dXBsZSwgYW4gSVNPIDg2MDEgdGltZS9kYXRlIHN0cmluZywgb3IgYSA6Y2xhc3M6YGRhdGV0aW1lLmRhdGV0aW1lYAotaW5zdGFuY2UuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzLCBzdXBwb3J0ZWQgbWFpbmx5IGZvciBpbnRlcm5hbAotdXNlIGJ5IHRoZSBtYXJzaGFsbGluZy91bm1hcnNoYWxsaW5nIGNvZGU6CisuLiBjbGFzczo6IERhdGVUaW1lCisKKyAgIFRoaXMgY2xhc3MgbWF5IGJlIGluaXRpYWxpemVkIHdpdGggc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gsIGEgdGltZQorICAgdHVwbGUsIGFuIElTTyA4NjAxIHRpbWUvZGF0ZSBzdHJpbmcsIG9yIGEgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAKKyAgIGluc3RhbmNlLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcywgc3VwcG9ydGVkIG1haW5seSBmb3IgaW50ZXJuYWwKKyAgIHVzZSBieSB0aGUgbWFyc2hhbGxpbmcvdW5tYXJzaGFsbGluZyBjb2RlOgogCiAKLS4uIG1ldGhvZDo6IERhdGVUaW1lLmRlY29kZShzdHJpbmcpCisgICAuLiBtZXRob2Q6OiBkZWNvZGUoc3RyaW5nKQogCi0gICBBY2NlcHQgYSBzdHJpbmcgYXMgdGhlIGluc3RhbmNlJ3MgbmV3IHRpbWUgdmFsdWUuCisgICAgICBBY2NlcHQgYSBzdHJpbmcgYXMgdGhlIGluc3RhbmNlJ3MgbmV3IHRpbWUgdmFsdWUuCiAKIAotLi4gbWV0aG9kOjogRGF0ZVRpbWUuZW5jb2RlKG91dCkKKyAgIC4uIG1ldGhvZDo6IGVuY29kZShvdXQpCiAKLSAgIFdyaXRlIHRoZSBYTUwtUlBDIGVuY29kaW5nIG9mIHRoaXMgOmNsYXNzOmBEYXRlVGltZWAgaXRlbSB0byB0aGUgKm91dCogc3RyZWFtCi0gICBvYmplY3QuCisgICAgICBXcml0ZSB0aGUgWE1MLVJQQyBlbmNvZGluZyBvZiB0aGlzIDpjbGFzczpgRGF0ZVRpbWVgIGl0ZW0gdG8gdGhlICpvdXQqIHN0cmVhbQorICAgICAgb2JqZWN0LgogCi1JdCBhbHNvIHN1cHBvcnRzIGNlcnRhaW4gb2YgUHl0aG9uJ3MgYnVpbHQtaW4gb3BlcmF0b3JzIHRocm91Z2ggcmljaCBjb21wYXJpc29uCi1hbmQgOm1ldGg6YF9fcmVwcl9fYCBtZXRob2RzLgorICAgSXQgYWxzbyBzdXBwb3J0cyBjZXJ0YWluIG9mIFB5dGhvbidzIGJ1aWx0LWluIG9wZXJhdG9ycyB0aHJvdWdoIHJpY2ggY29tcGFyaXNvbgorICAgYW5kIDptZXRoOmBfX3JlcHJfX2AgbWV0aG9kcy4KIAogQSB3b3JraW5nIGV4YW1wbGUgZm9sbG93cy4gVGhlIHNlcnZlciBjb2RlOjoKIApAQCAtMjc3LDM2ICsyODksMzggQEAKIEJpbmFyeSBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLQogCi1UaGlzIGNsYXNzIG1heSBiZSBpbml0aWFsaXplZCBmcm9tIGJ5dGVzIGRhdGEgKHdoaWNoIG1heSBpbmNsdWRlIE5VTHMpLiBUaGUKLXByaW1hcnkgYWNjZXNzIHRvIHRoZSBjb250ZW50IG9mIGEgOmNsYXNzOmBCaW5hcnlgIG9iamVjdCBpcyBwcm92aWRlZCBieSBhbgotYXR0cmlidXRlOgorLi4gY2xhc3M6OiBCaW5hcnkKKworICAgVGhpcyBjbGFzcyBtYXkgYmUgaW5pdGlhbGl6ZWQgZnJvbSBieXRlcyBkYXRhICh3aGljaCBtYXkgaW5jbHVkZSBOVUxzKS4gVGhlCisgICBwcmltYXJ5IGFjY2VzcyB0byB0aGUgY29udGVudCBvZiBhIDpjbGFzczpgQmluYXJ5YCBvYmplY3QgaXMgcHJvdmlkZWQgYnkgYW4KKyAgIGF0dHJpYnV0ZToKIAogCi0uLiBhdHRyaWJ1dGU6OiBCaW5hcnkuZGF0YQorICAgLi4gYXR0cmlidXRlOjogZGF0YQogCi0gICBUaGUgYmluYXJ5IGRhdGEgZW5jYXBzdWxhdGVkIGJ5IHRoZSA6Y2xhc3M6YEJpbmFyeWAgaW5zdGFuY2UuICBUaGUgZGF0YSBpcwotICAgcHJvdmlkZWQgYXMgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QuCisgICAgICBUaGUgYmluYXJ5IGRhdGEgZW5jYXBzdWxhdGVkIGJ5IHRoZSA6Y2xhc3M6YEJpbmFyeWAgaW5zdGFuY2UuICBUaGUgZGF0YSBpcworICAgICAgcHJvdmlkZWQgYXMgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QuCiAKLTpjbGFzczpgQmluYXJ5YCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzLCBzdXBwb3J0ZWQgbWFpbmx5IGZvcgotaW50ZXJuYWwgdXNlIGJ5IHRoZSBtYXJzaGFsbGluZy91bm1hcnNoYWxsaW5nIGNvZGU6CisgICA6Y2xhc3M6YEJpbmFyeWAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcywgc3VwcG9ydGVkIG1haW5seSBmb3IKKyAgIGludGVybmFsIHVzZSBieSB0aGUgbWFyc2hhbGxpbmcvdW5tYXJzaGFsbGluZyBjb2RlOgogCiAKLS4uIG1ldGhvZDo6IEJpbmFyeS5kZWNvZGUoYnl0ZXMpCisgICAuLiBtZXRob2Q6OiBkZWNvZGUoYnl0ZXMpCiAKLSAgIEFjY2VwdCBhIGJhc2U2NCA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgYW5kIGRlY29kZSBpdCBhcyB0aGUgaW5zdGFuY2UncyBuZXcgZGF0YS4KKyAgICAgIEFjY2VwdCBhIGJhc2U2NCA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgYW5kIGRlY29kZSBpdCBhcyB0aGUgaW5zdGFuY2UncyBuZXcgZGF0YS4KIAogCi0uLiBtZXRob2Q6OiBCaW5hcnkuZW5jb2RlKG91dCkKKyAgIC4uIG1ldGhvZDo6IGVuY29kZShvdXQpCiAKLSAgIFdyaXRlIHRoZSBYTUwtUlBDIGJhc2UgNjQgZW5jb2Rpbmcgb2YgdGhpcyBiaW5hcnkgaXRlbSB0byB0aGUgb3V0IHN0cmVhbSBvYmplY3QuCisgICAgICBXcml0ZSB0aGUgWE1MLVJQQyBiYXNlIDY0IGVuY29kaW5nIG9mIHRoaXMgYmluYXJ5IGl0ZW0gdG8gdGhlICpvdXQqIHN0cmVhbSBvYmplY3QuCiAKLSAgIFRoZSBlbmNvZGVkIGRhdGEgd2lsbCBoYXZlIG5ld2xpbmVzIGV2ZXJ5IDc2IGNoYXJhY3RlcnMgYXMgcGVyCi0gICBgUkZDIDIwNDUgc2VjdGlvbiA2LjggPGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDUjc2VjdGlvbi02Ljg+YF8sCi0gICB3aGljaCB3YXMgdGhlIGRlIGZhY3RvIHN0YW5kYXJkIGJhc2U2NCBzcGVjaWZpY2F0aW9uIHdoZW4gdGhlCi0gICBYTUwtUlBDIHNwZWMgd2FzIHdyaXR0ZW4uCisgICAgICBUaGUgZW5jb2RlZCBkYXRhIHdpbGwgaGF2ZSBuZXdsaW5lcyBldmVyeSA3NiBjaGFyYWN0ZXJzIGFzIHBlcgorICAgICAgYFJGQyAyMDQ1IHNlY3Rpb24gNi44IDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NSNzZWN0aW9uLTYuOD5gXywKKyAgICAgIHdoaWNoIHdhcyB0aGUgZGUgZmFjdG8gc3RhbmRhcmQgYmFzZTY0IHNwZWNpZmljYXRpb24gd2hlbiB0aGUKKyAgICAgIFhNTC1SUEMgc3BlYyB3YXMgd3JpdHRlbi4KIAotSXQgYWxzbyBzdXBwb3J0cyBjZXJ0YWluIG9mIFB5dGhvbidzIGJ1aWx0LWluIG9wZXJhdG9ycyB0aHJvdWdoIDptZXRoOmBfX2VxX19gCi1hbmQgOm1ldGg6YF9fbmVfX2AgbWV0aG9kcy4KKyAgIEl0IGFsc28gc3VwcG9ydHMgY2VydGFpbiBvZiBQeXRob24ncyBidWlsdC1pbiBvcGVyYXRvcnMgdGhyb3VnaCA6bWV0aDpgX19lcV9fYAorICAgYW5kIDptZXRoOmBfX25lX19gIG1ldGhvZHMuCiAKIEV4YW1wbGUgdXNhZ2Ugb2YgdGhlIGJpbmFyeSBvYmplY3RzLiAgV2UncmUgZ29pbmcgdG8gdHJhbnNmZXIgYW4gaW1hZ2Ugb3ZlcgogWE1MUlBDOjoKQEAgLTMzNywxOCArMzUxLDIwIEBACiBGYXVsdCBPYmplY3RzCiAtLS0tLS0tLS0tLS0tCiAKLUEgOmNsYXNzOmBGYXVsdGAgb2JqZWN0IGVuY2Fwc3VsYXRlcyB0aGUgY29udGVudCBvZiBhbiBYTUwtUlBDIGZhdWx0IHRhZy4gRmF1bHQKLW9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisuLiBjbGFzczo6IEZhdWx0CisKKyAgIEEgOmNsYXNzOmBGYXVsdGAgb2JqZWN0IGVuY2Fwc3VsYXRlcyB0aGUgY29udGVudCBvZiBhbiBYTUwtUlBDIGZhdWx0IHRhZy4gRmF1bHQKKyAgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CiAKIAotLi4gYXR0cmlidXRlOjogRmF1bHQuZmF1bHRDb2RlCisgICAuLiBhdHRyaWJ1dGU6OiBmYXVsdENvZGUKIAotICAgQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgZmF1bHQgdHlwZS4KKyAgICAgIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGZhdWx0IHR5cGUuCiAKIAotLi4gYXR0cmlidXRlOjogRmF1bHQuZmF1bHRTdHJpbmcKKyAgIC4uIGF0dHJpYnV0ZTo6IGZhdWx0U3RyaW5nCiAKLSAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkaWFnbm9zdGljIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBmYXVsdC4KKyAgICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkaWFnbm9zdGljIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBmYXVsdC4KIAogSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIHdlJ3JlIGdvaW5nIHRvIGludGVudGlvbmFsbHkgY2F1c2UgYSA6ZXhjOmBGYXVsdGAgYnkKIHJldHVybmluZyBhIGNvbXBsZXggdHlwZSBvYmplY3QuICBUaGUgc2VydmVyIGNvZGU6OgpAQCAtMzU3LDcgKzM3Myw3IEBACiAKICAgICMgQSBtYXJzaGFsbGluZyBlcnJvciBpcyBnb2luZyB0byBvY2N1ciBiZWNhdXNlIHdlJ3JlIHJldHVybmluZyBhCiAgICAjIGNvbXBsZXggbnVtYmVyCi0gICBkZWYgYWRkKHgseSk6CisgICBkZWYgYWRkKHgsIHkpOgogICAgICAgIHJldHVybiB4K3krMGoKIAogICAgc2VydmVyID0gU2ltcGxlWE1MUlBDU2VydmVyKCgibG9jYWxob3N0IiwgODAwMCkpCkBAIC0zODUsMzcgKzQwMSwzOSBAQAogUHJvdG9jb2xFcnJvciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQSA6Y2xhc3M6YFByb3RvY29sRXJyb3JgIG9iamVjdCBkZXNjcmliZXMgYSBwcm90b2NvbCBlcnJvciBpbiB0aGUgdW5kZXJseWluZwotdHJhbnNwb3J0IGxheWVyIChzdWNoIGFzIGEgNDA0ICdub3QgZm91bmQnIGVycm9yIGlmIHRoZSBzZXJ2ZXIgbmFtZWQgYnkgdGhlIFVSSQotZG9lcyBub3QgZXhpc3QpLiAgSXQgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKy4uIGNsYXNzOjogUHJvdG9jb2xFcnJvcgorCisgICBBIDpjbGFzczpgUHJvdG9jb2xFcnJvcmAgb2JqZWN0IGRlc2NyaWJlcyBhIHByb3RvY29sIGVycm9yIGluIHRoZSB1bmRlcmx5aW5nCisgICB0cmFuc3BvcnQgbGF5ZXIgKHN1Y2ggYXMgYSA0MDQgJ25vdCBmb3VuZCcgZXJyb3IgaWYgdGhlIHNlcnZlciBuYW1lZCBieSB0aGUgVVJJCisgICBkb2VzIG5vdCBleGlzdCkuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgogCiAKLS4uIGF0dHJpYnV0ZTo6IFByb3RvY29sRXJyb3IudXJsCisgICAuLiBhdHRyaWJ1dGU6OiB1cmwKIAotICAgVGhlIFVSSSBvciBVUkwgdGhhdCB0cmlnZ2VyZWQgdGhlIGVycm9yLgorICAgICAgVGhlIFVSSSBvciBVUkwgdGhhdCB0cmlnZ2VyZWQgdGhlIGVycm9yLgogCiAKLS4uIGF0dHJpYnV0ZTo6IFByb3RvY29sRXJyb3IuZXJyY29kZQorICAgLi4gYXR0cmlidXRlOjogZXJyY29kZQogCi0gICBUaGUgZXJyb3IgY29kZS4KKyAgICAgIFRoZSBlcnJvciBjb2RlLgogCiAKLS4uIGF0dHJpYnV0ZTo6IFByb3RvY29sRXJyb3IuZXJybXNnCisgICAuLiBhdHRyaWJ1dGU6OiBlcnJtc2cKIAotICAgVGhlIGVycm9yIG1lc3NhZ2Ugb3IgZGlhZ25vc3RpYyBzdHJpbmcuCisgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBvciBkaWFnbm9zdGljIHN0cmluZy4KIAogCi0uLiBhdHRyaWJ1dGU6OiBQcm90b2NvbEVycm9yLmhlYWRlcnMKKyAgIC4uIGF0dHJpYnV0ZTo6IGhlYWRlcnMKIAotICAgQSBkaWN0IGNvbnRhaW5pbmcgdGhlIGhlYWRlcnMgb2YgdGhlIEhUVFAvSFRUUFMgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCB0aGUKLSAgIGVycm9yLgorICAgICAgQSBkaWN0IGNvbnRhaW5pbmcgdGhlIGhlYWRlcnMgb2YgdGhlIEhUVFAvSFRUUFMgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCB0aGUKKyAgICAgIGVycm9yLgogCiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgd2UncmUgZ29pbmcgdG8gaW50ZW50aW9uYWxseSBjYXVzZSBhIDpleGM6YFByb3RvY29sRXJyb3JgCiBieSBwcm92aWRpbmcgYW4gaW52YWxpZCBVUkk6OgogCiAgICBpbXBvcnQgeG1scnBjLmNsaWVudAogCi0gICAjIGNyZWF0ZSBhIFNlcnZlclByb3h5IHdpdGggYW4gVVJJIHRoYXQgZG9lc24ndCByZXNwb25kIHRvIFhNTFJQQyByZXF1ZXN0cworICAgIyBjcmVhdGUgYSBTZXJ2ZXJQcm94eSB3aXRoIGEgVVJJIHRoYXQgZG9lc24ndCByZXNwb25kIHRvIFhNTFJQQyByZXF1ZXN0cwogICAgcHJveHkgPSB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5KCJodHRwOi8vZ29vZ2xlLmNvbS8iKQogCiAgICB0cnk6CkBAIC01MjcsMTYgKzU0NSwxNiBAQAogICAgZnJvbSB4bWxycGMuY2xpZW50IGltcG9ydCBTZXJ2ZXJQcm94eSwgRXJyb3IKIAogICAgIyBzZXJ2ZXIgPSBTZXJ2ZXJQcm94eSgiaHR0cDovL2xvY2FsaG9zdDo4MDAwIikgIyBsb2NhbCBzZXJ2ZXIKLSAgIHNlcnZlciA9IFNlcnZlclByb3h5KCJodHRwOi8vYmV0dHkudXNlcmxhbmQuY29tIikKKyAgIHdpdGggU2VydmVyUHJveHkoImh0dHA6Ly9iZXR0eS51c2VybGFuZC5jb20iKSBhcyBwcm94eToKIAotICAgcHJpbnQoc2VydmVyKQorICAgICAgIHByaW50KHByb3h5KQogCi0gICB0cnk6Ci0gICAgICAgcHJpbnQoc2VydmVyLmV4YW1wbGVzLmdldFN0YXRlTmFtZSg0MSkpCi0gICBleGNlcHQgRXJyb3IgYXMgdjoKLSAgICAgICBwcmludCgiRVJST1IiLCB2KQorICAgICAgIHRyeToKKyAgICAgICAgICAgcHJpbnQocHJveHkuZXhhbXBsZXMuZ2V0U3RhdGVOYW1lKDQxKSkKKyAgICAgICBleGNlcHQgRXJyb3IgYXMgdjoKKyAgICAgICAgICAgcHJpbnQoIkVSUk9SIiwgdikKIAotVG8gYWNjZXNzIGFuIFhNTC1SUEMgc2VydmVyIHRocm91Z2ggYSBwcm94eSwgeW91IG5lZWQgdG8gZGVmaW5lICBhIGN1c3RvbQorVG8gYWNjZXNzIGFuIFhNTC1SUEMgc2VydmVyIHRocm91Z2ggYSBIVFRQIHByb3h5LCB5b3UgbmVlZCB0byBkZWZpbmUgYSBjdXN0b20KIHRyYW5zcG9ydC4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3c6CiAKIC4uIEV4YW1wbGUgdGFrZW4gZnJvbSBodHRwOi8vbG93bGlmZS5qcC9ub2Jvbm9iby93aWtpL3htbHJwY3dpdGhwcm94eS5odG1sCkBAIC01NDgsMTggKzU2NiwyMSBAQAogICAgY2xhc3MgUHJveGllZFRyYW5zcG9ydCh4bWxycGMuY2xpZW50LlRyYW5zcG9ydCk6CiAgICAgICAgZGVmIHNldF9wcm94eShzZWxmLCBwcm94eSk6CiAgICAgICAgICAgIHNlbGYucHJveHkgPSBwcm94eQorCiAgICAgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKICAgICAgICAgICAgc2VsZi5yZWFsaG9zdCA9IGhvc3QKLSAgICAgICAgICAgaCA9IGh0dHAuY2xpZW50LkhUVFAoc2VsZi5wcm94eSkKKyAgICAgICAgICAgaCA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKHNlbGYucHJveHkpCiAgICAgICAgICAgIHJldHVybiBoCi0gICAgICAgZGVmIHNlbmRfcmVxdWVzdChzZWxmLCBjb25uZWN0aW9uLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHkpOgorCisgICAgICAgZGVmIHNlbmRfcmVxdWVzdChzZWxmLCBjb25uZWN0aW9uLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIGRlYnVnKToKICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRyZXF1ZXN0KCJQT1NUIiwgJ2h0dHA6Ly8lcyVzJyAlIChzZWxmLnJlYWxob3N0LCBoYW5kbGVyKSkKKwogICAgICAgIGRlZiBzZW5kX2hvc3Qoc2VsZiwgY29ubmVjdGlvbiwgaG9zdCk6CiAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCdIb3N0Jywgc2VsZi5yZWFsaG9zdCkKIAogICAgcCA9IFByb3hpZWRUcmFuc3BvcnQoKQogICAgcC5zZXRfcHJveHkoJ3Byb3h5LXNlcnZlcjo4MDgwJykKLSAgIHNlcnZlciA9IHhtbHJwYy5jbGllbnQuU2VydmVyKCdodHRwOi8vdGltZS54bWxycGMuY29tL1JQQzInLCB0cmFuc3BvcnQ9cCkKKyAgIHNlcnZlciA9IHhtbHJwYy5jbGllbnQuU2VydmVyUHJveHkoJ2h0dHA6Ly90aW1lLnhtbHJwYy5jb20vUlBDMicsIHRyYW5zcG9ydD1wKQogICAgcHJpbnQoc2VydmVyLmN1cnJlbnRUaW1lLmdldEN1cnJlbnRUaW1lKCkpCiAKIApAQCAtNTcyLDcgKzU5Myw3IEBACiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIFRoaXMgYXBwcm9hY2ggaGFzIGJlZW4gZmlyc3QgcHJlc2VudGVkIGluIGBhIGRpc2N1c3Npb24gb24geG1scnBjLmNvbQotICAgPGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMDYwNjI0MjMwMzAzL2h0dHA6Ly93d3cueG1scnBjLmNvbS9kaXNjdXNzL21zZ1JlYWRlciQxMjA4P21vZGU9dG9waWM+YF8uCisgICA8aHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMDYwNjI0MjMwMzAzL2h0dHA6Ly93d3cueG1scnBjLmNvbS9kaXNjdXNzL21zZ1JlYWRlciQxMjA4P21vZGU9dG9waWM+YF8uCiAuLiB0aGUgbGluayBub3cgcG9pbnRzIHRvIHdlYmFyY2hpdmUgc2luY2UgdGhlIG9uZSBhdAogLi4gaHR0cDovL3d3dy54bWxycGMuY29tL2Rpc2N1c3MvbXNnUmVhZGVyJTI0MTIwOCBpcyBicm9rZW4gKGFuZCB3ZWJhZG1pbgogLi4gZG9lc24ndCByZXBseSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkveG1scnBjLnNlcnZlci5yc3QKaW5kZXggMzdkMTM5My4uMWM3N2U4NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1scnBjLnNlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1scnBjLnNlcnZlci5yc3QKQEAgLTMsNiArMyw3IEBACiAKIC4uIG1vZHVsZTo6IHhtbHJwYy5zZXJ2ZXIKICAgIDpzeW5vcHNpczogQmFzaWMgWE1MLVJQQyBzZXJ2ZXIgaW1wbGVtZW50YXRpb25zLgorCiAuLiBtb2R1bGVhdXRob3I6OiBCcmlhbiBRdWlubGFuIDxicmlhbnFAYWN0aXZlc3RhdGUuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKQEAgLTE4LDcgKzE5LDcgQEAKIAogLi4gd2FybmluZzo6CiAKLSAgIFRoZSA6bW9kOmB4bWxycGMuY2xpZW50YCBtb2R1bGUgaXMgbm90IHNlY3VyZSBhZ2FpbnN0IG1hbGljaW91c2x5CisgICBUaGUgOm1vZDpgeG1scnBjLnNlcnZlcmAgbW9kdWxlIGlzIG5vdCBzZWN1cmUgYWdhaW5zdCBtYWxpY2lvdXNseQogICAgY29uc3RydWN0ZWQgZGF0YS4gIElmIHlvdSBuZWVkIHRvIHBhcnNlIHVudHJ1c3RlZCBvciB1bmF1dGhlbnRpY2F0ZWQgZGF0YSBzZWUKICAgIDpyZWY6YHhtbC12dWxuZXJhYmlsaXRpZXNgLgogCkBAIC0yOTIsNyArMjkzLDcgQEAKIAogLi4gbWV0aG9kOjogQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIuaGFuZGxlX3JlcXVlc3QocmVxdWVzdF90ZXh0PU5vbmUpCiAKLSAgIEhhbmRsZSBhIFhNTC1SUEMgcmVxdWVzdC4gSWYgKnJlcXVlc3RfdGV4dCogaXMgZ2l2ZW4sIGl0ICBzaG91bGQgYmUgdGhlIFBPU1QKKyAgIEhhbmRsZSBhbiBYTUwtUlBDIHJlcXVlc3QuIElmICpyZXF1ZXN0X3RleHQqIGlzIGdpdmVuLCBpdCBzaG91bGQgYmUgdGhlIFBPU1QKICAgIGRhdGEgcHJvdmlkZWQgYnkgdGhlIEhUVFAgc2VydmVyLCAgb3RoZXJ3aXNlIHRoZSBjb250ZW50cyBvZiBzdGRpbiB3aWxsIGJlIHVzZWQuCiAKIEV4YW1wbGU6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvemlwYXBwLnJzdCBiL0RvYy9saWJyYXJ5L3ppcGFwcC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3NzY3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3ppcGFwcC5yc3QKQEAgLTAsMCArMSwyNTggQEAKKzptb2Q6YHppcGFwcGAgLS0tIE1hbmFnZSBleGVjdXRhYmxlIHB5dGhvbiB6aXAgYXJjaGl2ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogemlwYXBwCisgICA6c3lub3BzaXM6IE1hbmFnZSBleGVjdXRhYmxlIHB5dGhvbiB6aXAgYXJjaGl2ZXMKKworLi4gdmVyc2lvbmFkZGVkOjogMy41CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3ppcGFwcC5weWAKKworLi4gaW5kZXg6OgorICAgc2luZ2xlOiBFeGVjdXRhYmxlIFppcCBGaWxlcworCistLS0tLS0tLS0tLS0tLQorCitUaGlzIG1vZHVsZSBwcm92aWRlcyB0b29scyB0byBtYW5hZ2UgdGhlIGNyZWF0aW9uIG9mIHppcCBmaWxlcyBjb250YWluaW5nCitQeXRob24gY29kZSwgd2hpY2ggY2FuIGJlICA6cmVmOmBleGVjdXRlZCBkaXJlY3RseSBieSB0aGUgUHl0aG9uIGludGVycHJldGVyCis8dXNpbmctb24taW50ZXJmYWNlLW9wdGlvbnM+YC4gIFRoZSBtb2R1bGUgcHJvdmlkZXMgYm90aCBhCis6cmVmOmB6aXBhcHAtY29tbWFuZC1saW5lLWludGVyZmFjZWAgYW5kIGEgOnJlZjpgemlwYXBwLXB5dGhvbi1hcGlgLgorCisKK0Jhc2ljIEV4YW1wbGUKKy0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0aGUgOnJlZjpgemlwYXBwLWNvbW1hbmQtbGluZS1pbnRlcmZhY2VgCitjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSBhcmNoaXZlIGZyb20gYSBkaXJlY3RvcnkgY29udGFpbmluZworUHl0aG9uIGNvZGUuICBXaGVuIHJ1biwgdGhlIGFyY2hpdmUgd2lsbCBleGVjdXRlIHRoZSBgYG1haW5gYCBmdW5jdGlvbiBmcm9tCit0aGUgbW9kdWxlIGBgbXlhcHBgYCBpbiB0aGUgYXJjaGl2ZS4KKworLi4gY29kZS1ibG9jazo6IHNoCisKKyAgICQgcHl0aG9uIC1tIHppcGFwcCBteWFwcCAtbSAibXlhcHA6bWFpbiIKKyAgICQgcHl0aG9uIG15YXBwLnB5egorICAgPG91dHB1dCBmcm9tIG15YXBwPgorCisKKy4uIF96aXBhcHAtY29tbWFuZC1saW5lLWludGVyZmFjZToKKworQ29tbWFuZC1MaW5lIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGNhbGxlZCBhcyBhIHByb2dyYW0gZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGUgZm9sbG93aW5nIGZvcm0gaXMgdXNlZDoKKworLi4gY29kZS1ibG9jazo6IHNoCisKKyAgICQgcHl0aG9uIC1tIHppcGFwcCBzb3VyY2UgW29wdGlvbnNdCisKK0lmICpzb3VyY2UqIGlzIGEgZGlyZWN0b3J5LCB0aGlzIHdpbGwgY3JlYXRlIGFuIGFyY2hpdmUgZnJvbSB0aGUgY29udGVudHMgb2YKKypzb3VyY2UqLiAgSWYgKnNvdXJjZSogaXMgYSBmaWxlLCBpdCBzaG91bGQgYmUgYW4gYXJjaGl2ZSwgYW5kIGl0IHdpbGwgYmUKK2NvcGllZCB0byB0aGUgdGFyZ2V0IGFyY2hpdmUgKG9yIHRoZSBjb250ZW50cyBvZiBpdHMgc2hlYmFuZyBsaW5lIHdpbGwgYmUKK2Rpc3BsYXllZCBpZiB0aGUgLS1pbmZvIG9wdGlvbiBpcyBzcGVjaWZpZWQpLgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVuZGVyc3Rvb2Q6CisKKy4uIHByb2dyYW06OiB6aXBhcHAKKworLi4gY21kb3B0aW9uOjogLW8gPG91dHB1dD4sIC0tb3V0cHV0PTxvdXRwdXQ+CisKKyAgIFdyaXRlIHRoZSBvdXRwdXQgdG8gYSBmaWxlIG5hbWVkICpvdXRwdXQqLiAgSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwKKyAgIHRoZSBvdXRwdXQgZmlsZW5hbWUgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgaW5wdXQgKnNvdXJjZSosIHdpdGggdGhlCisgICBleHRlbnNpb24gYGAucHl6YGAgYWRkZWQuICBJZiBhbiBleHBsaWNpdCBmaWxlbmFtZSBpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcworICAgaXMgKHNvIGEgYGAucHl6YGAgZXh0ZW5zaW9uIHNob3VsZCBiZSBpbmNsdWRlZCBpZiByZXF1aXJlZCkuCisKKyAgIEFuIG91dHB1dCBmaWxlbmFtZSBtdXN0IGJlIHNwZWNpZmllZCBpZiB0aGUgKnNvdXJjZSogaXMgYW4gYXJjaGl2ZSAoYW5kIGluCisgICB0aGF0IGNhc2UsICpvdXRwdXQqIG11c3Qgbm90IGJlIHRoZSBzYW1lIGFzICpzb3VyY2UqKS4KKworLi4gY21kb3B0aW9uOjogLXAgPGludGVycHJldGVyPiwgLS1weXRob249PGludGVycHJldGVyPgorCisgICBBZGQgYSBgYCMhYGAgbGluZSB0byB0aGUgYXJjaGl2ZSBzcGVjaWZ5aW5nICppbnRlcnByZXRlciogYXMgdGhlIGNvbW1hbmQKKyAgIHRvIHJ1bi4gIEFsc28sIG9uIFBPU0lYLCBtYWtlIHRoZSBhcmNoaXZlIGV4ZWN1dGFibGUuICBUaGUgZGVmYXVsdCBpcyB0bworICAgd3JpdGUgbm8gYGAjIWBgIGxpbmUsIGFuZCBub3QgbWFrZSB0aGUgZmlsZSBleGVjdXRhYmxlLgorCisuLiBjbWRvcHRpb246OiAtbSA8bWFpbmZuPiwgLS1tYWluPTxtYWluZm4+CisKKyAgIFdyaXRlIGEgYGBfX21haW5fXy5weWBgIGZpbGUgdG8gdGhlIGFyY2hpdmUgdGhhdCBleGVjdXRlcyAqbWFpbmZuKi4gIFRoZQorICAgKm1haW5mbiogYXJndW1lbnQgc2hvdWxkIGhhdmUgdGhlIGZvcm0gInBrZy5tb2Q6Zm4iLCB3aGVyZSAicGtnLm1vZCIgaXMgYQorICAgcGFja2FnZS9tb2R1bGUgaW4gdGhlIGFyY2hpdmUsIGFuZCAiZm4iIGlzIGEgY2FsbGFibGUgaW4gdGhlIGdpdmVuIG1vZHVsZS4KKyAgIFRoZSBgYF9fbWFpbl9fLnB5YGAgZmlsZSB3aWxsIGV4ZWN1dGUgdGhhdCBjYWxsYWJsZS4KKworICAgOm9wdGlvbjpgLS1tYWluYCBjYW5ub3QgYmUgc3BlY2lmaWVkIHdoZW4gY29weWluZyBhbiBhcmNoaXZlLgorCisuLiBjbWRvcHRpb246OiAtLWluZm8KKworICAgRGlzcGxheSB0aGUgaW50ZXJwcmV0ZXIgZW1iZWRkZWQgaW4gdGhlIGFyY2hpdmUsIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLiAgSW4KKyAgIHRoaXMgY2FzZSwgYW55IG90aGVyIG9wdGlvbnMgYXJlIGlnbm9yZWQgYW5kIFNPVVJDRSBtdXN0IGJlIGFuIGFyY2hpdmUsIG5vdCBhCisgICBkaXJlY3RvcnkuCisKKy4uIGNtZG9wdGlvbjo6IC1oLCAtLWhlbHAKKworICAgUHJpbnQgYSBzaG9ydCB1c2FnZSBtZXNzYWdlIGFuZCBleGl0LgorCisKKy4uIF96aXBhcHAtcHl0aG9uLWFwaToKKworUHl0aG9uIEFQSQorLS0tLS0tLS0tLQorCitUaGUgbW9kdWxlIGRlZmluZXMgdHdvIGNvbnZlbmllbmNlIGZ1bmN0aW9uczoKKworCisuLiBmdW5jdGlvbjo6IGNyZWF0ZV9hcmNoaXZlKHNvdXJjZSwgdGFyZ2V0PU5vbmUsIGludGVycHJldGVyPU5vbmUsIG1haW49Tm9uZSkKKworICAgQ3JlYXRlIGFuIGFwcGxpY2F0aW9uIGFyY2hpdmUgZnJvbSAqc291cmNlKi4gIFRoZSBzb3VyY2UgY2FuIGJlIGFueQorICAgb2YgdGhlIGZvbGxvd2luZzoKKworICAgKiBUaGUgbmFtZSBvZiBhIGRpcmVjdG9yeSwgb3IgYSA6Y2xhc3M6YHBhdGhsaWIuUGF0aGAgb2JqZWN0IHJlZmVycmluZworICAgICB0byBhIGRpcmVjdG9yeSwgaW4gd2hpY2ggY2FzZSBhIG5ldyBhcHBsaWNhdGlvbiBhcmNoaXZlIHdpbGwgYmUKKyAgICAgY3JlYXRlZCBmcm9tIHRoZSBjb250ZW50IG9mIHRoYXQgZGlyZWN0b3J5LgorICAgKiBUaGUgbmFtZSBvZiBhbiBleGlzdGluZyBhcHBsaWNhdGlvbiBhcmNoaXZlIGZpbGUsIG9yIGEgOmNsYXNzOmBwYXRobGliLlBhdGhgCisgICAgIG9iamVjdCByZWZlcnJpbmcgdG8gc3VjaCBhIGZpbGUsIGluIHdoaWNoIGNhc2UgdGhlIGZpbGUgaXMgY29waWVkIHRvCisgICAgIHRoZSB0YXJnZXQgKG1vZGlmeWluZyBpdCB0byByZWZsZWN0IHRoZSB2YWx1ZSBnaXZlbiBmb3IgdGhlICppbnRlcnByZXRlcioKKyAgICAgYXJndW1lbnQpLiAgVGhlIGZpbGUgbmFtZSBzaG91bGQgaW5jbHVkZSB0aGUgYGAucHl6YGAgZXh0ZW5zaW9uLCBpZiByZXF1aXJlZC4KKyAgICogQSBmaWxlIG9iamVjdCBvcGVuIGZvciByZWFkaW5nIGluIGJ5dGVzIG1vZGUuICBUaGUgY29udGVudCBvZiB0aGUKKyAgICAgZmlsZSBzaG91bGQgYmUgYW4gYXBwbGljYXRpb24gYXJjaGl2ZSwgYW5kIHRoZSBmaWxlIG9iamVjdCBpcworICAgICBhc3N1bWVkIHRvIGJlIHBvc2l0aW9uZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBhcmNoaXZlLgorCisgICBUaGUgKnRhcmdldCogYXJndW1lbnQgZGV0ZXJtaW5lcyB3aGVyZSB0aGUgcmVzdWx0aW5nIGFyY2hpdmUgd2lsbCBiZQorICAgd3JpdHRlbjoKKworICAgKiBJZiBpdCBpcyB0aGUgbmFtZSBvZiBhIGZpbGUsIG9yIGEgOmNsYXNzOmBwYXRobGIuUGF0aGAgb2JqZWN0LAorICAgICB0aGUgYXJjaGl2ZSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhhdCBmaWxlLgorICAgKiBJZiBpdCBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0LCB0aGUgYXJjaGl2ZSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhhdAorICAgICBmaWxlIG9iamVjdCwgd2hpY2ggbXVzdCBiZSBvcGVuIGZvciB3cml0aW5nIGluIGJ5dGVzIG1vZGUuCisgICAqIElmIHRoZSB0YXJnZXQgaXMgb21pdHRlZCAob3IgTm9uZSksIHRoZSBzb3VyY2UgbXVzdCBiZSBhIGRpcmVjdG9yeQorICAgICBhbmQgdGhlIHRhcmdldCB3aWxsIGJlIGEgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHNvdXJjZSwgd2l0aAorICAgICBhIGBgLnB5emBgIGV4dGVuc2lvbiBhZGRlZC4KKworICAgVGhlICppbnRlcnByZXRlciogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBQeXRob24KKyAgIGludGVycHJldGVyIHdpdGggd2hpY2ggdGhlIGFyY2hpdmUgd2lsbCBiZSBleGVjdXRlZC4gIEl0IGlzIHdyaXR0ZW4gYXMKKyAgIGEgInNoZWJhbmciIGxpbmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBhcmNoaXZlLiAgT24gUE9TSVgsIHRoaXMgd2lsbCBiZQorICAgaW50ZXJwcmV0ZWQgYnkgdGhlIE9TLCBhbmQgb24gV2luZG93cyBpdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIFB5dGhvbgorICAgbGF1bmNoZXIuICBPbWl0dGluZyB0aGUgKmludGVycHJldGVyKiByZXN1bHRzIGluIG5vIHNoZWJhbmcgbGluZSBiZWluZworICAgd3JpdHRlbi4gIElmIGFuIGludGVycHJldGVyIGlzIHNwZWNpZmllZCwgYW5kIHRoZSB0YXJnZXQgaXMgYQorICAgZmlsZW5hbWUsIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgdGFyZ2V0IGZpbGUgd2lsbCBiZSBzZXQuCisKKyAgIFRoZSAqbWFpbiogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgY2FsbGFibGUgd2hpY2ggd2lsbCBiZQorICAgdXNlZCBhcyB0aGUgbWFpbiBwcm9ncmFtIGZvciB0aGUgYXJjaGl2ZS4gIEl0IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZgorICAgdGhlIHNvdXJjZSBpcyBhIGRpcmVjdG9yeSwgYW5kIHRoZSBzb3VyY2UgZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGEKKyAgIGBgX19tYWluX18ucHlgYCBmaWxlLiAgVGhlICptYWluKiBhcmd1bWVudCBzaG91bGQgdGFrZSB0aGUgZm9ybQorICAgInBrZy5tb2R1bGU6Y2FsbGFibGUiIGFuZCB0aGUgYXJjaGl2ZSB3aWxsIGJlIHJ1biBieSBpbXBvcnRpbmcKKyAgICJwa2cubW9kdWxlIiBhbmQgZXhlY3V0aW5nIHRoZSBnaXZlbiBjYWxsYWJsZSB3aXRoIG5vIGFyZ3VtZW50cy4gIEl0CisgICBpcyBhbiBlcnJvciB0byBvbWl0ICptYWluKiBpZiB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IGFuZCBkb2VzIG5vdAorICAgY29udGFpbiBhIGBgX19tYWluX18ucHlgYCBmaWxlLCBhcyBvdGhlcndpc2UgdGhlIHJlc3VsdGluZyBhcmNoaXZlCisgICB3b3VsZCBub3QgYmUgZXhlY3V0YWJsZS4KKworICAgSWYgYSBmaWxlIG9iamVjdCBpcyBzcGVjaWZpZWQgZm9yICpzb3VyY2UqIG9yICp0YXJnZXQqLCBpdCBpcyB0aGUKKyAgIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsb3NlIGl0IGFmdGVyIGNhbGxpbmcgY3JlYXRlX2FyY2hpdmUuCisKKyAgIFdoZW4gY29weWluZyBhbiBleGlzdGluZyBhcmNoaXZlLCBmaWxlIG9iamVjdHMgc3VwcGxpZWQgb25seSBuZWVkCisgICBgYHJlYWRgYCBhbmQgYGByZWFkbGluZWBgLCBvciBgYHdyaXRlYGAgbWV0aG9kcy4gIFdoZW4gY3JlYXRpbmcgYW4KKyAgIGFyY2hpdmUgZnJvbSBhIGRpcmVjdG9yeSwgaWYgdGhlIHRhcmdldCBpcyBhIGZpbGUgb2JqZWN0IGl0IHdpbGwgYmUKKyAgIHBhc3NlZCB0byB0aGUgYGB6aXBmaWxlLlppcEZpbGVgYCBjbGFzcywgYW5kIG11c3Qgc3VwcGx5IHRoZSBtZXRob2RzCisgICBuZWVkZWQgYnkgdGhhdCBjbGFzcy4KKworLi4gZnVuY3Rpb246OiBnZXRfaW50ZXJwcmV0ZXIoYXJjaGl2ZSkKKworICAgUmV0dXJuIHRoZSBpbnRlcnByZXRlciBzcGVjaWZpZWQgaW4gdGhlIGBgIyFgYCBsaW5lIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgIGFyY2hpdmUuICBJZiB0aGVyZSBpcyBubyBgYCMhYGAgbGluZSwgcmV0dXJuIDpjb25zdDpgTm9uZWAuCisgICBUaGUgKmFyY2hpdmUqIGFyZ3VtZW50IGNhbiBiZSBhIGZpbGVuYW1lIG9yIGEgZmlsZS1saWtlIG9iamVjdCBvcGVuCisgICBmb3IgcmVhZGluZyBpbiBieXRlcyBtb2RlLiAgSXQgaXMgYXNzdW1lZCB0byBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGFyY2hpdmUuCisKKworLi4gX3ppcGFwcC1leGFtcGxlczoKKworRXhhbXBsZXMKKy0tLS0tLS0tCisKK1BhY2sgdXAgYSBkaXJlY3RvcnkgaW50byBhbiBhcmNoaXZlLCBhbmQgcnVuIGl0LgorCisuLiBjb2RlLWJsb2NrOjogc2gKKworICAgJCBweXRob24gLW0gemlwYXBwIG15YXBwCisgICAkIHB5dGhvbiBteWFwcC5weXoKKyAgIDxvdXRwdXQgZnJvbSBteWFwcD4KKworVGhlIHNhbWUgY2FuIGJlIGRvbmUgdXNpbmcgdGhlIDpmdW5jOmBjcmVhdGVfYXJjaGl2ZWAgZnVuY3Rvbjo6CisKKyAgID4+PiBpbXBvcnQgemlwYXBwCisgICA+Pj4gemlwYXBwLmNyZWF0ZV9hcmNoaXZlKCdteWFwcC5weXonLCAnbXlhcHAnKQorCitUbyBtYWtlIHRoZSBhcHBsaWNhdGlvbiBkaXJlY3RseSBleGVjdXRhYmxlIG9uIFBPU0lYLCBzcGVjaWZ5IGFuIGludGVycHJldGVyCit0byB1c2UuCisKKy4uIGNvZGUtYmxvY2s6OiBzaAorCisgICAkIHB5dGhvbiAtbSB6aXBhcHAgbXlhcHAgLXAgIi91c3IvYmluL2VudiBweXRob24iCisgICAkIC4vbXlhcHAucHl6CisgICA8b3V0cHV0IGZyb20gbXlhcHA+CisKK1RvIHJlcGxhY2UgdGhlIHNoZWJhbmcgbGluZSBvbiBhbiBleGlzdGluZyBhcmNoaXZlLCBjcmVhdGUgYSBtb2RpZmllZCBhcmNoaXZlCit1c2luZyB0aGUgOmZ1bmM6YGNyZWF0ZV9hcmNoaXZlYCBmdW5jdGlvbjo6CisKKyAgID4+PiBpbXBvcnQgemlwYXBwCisgICA+Pj4gemlwYXBwLmNyZWF0ZV9hcmNoaXZlKCdvbGRfYXJjaGl2ZS5weXonLCAnbmV3X2FyY2hpdmUucHl6JywgJy91c3IvYmluL3B5dGhvbjMnKQorCitUbyB1cGRhdGUgdGhlIGZpbGUgaW4gcGxhY2UsIGRvIHRoZSByZXBsYWNlbWVudCBpbiBtZW1vcnkgdXNpbmcgYSA6Y2xhc3M6YEJ5dGVzSU9gCitvYmplY3QsIGFuZCB0aGVuIG92ZXJ3cml0ZSB0aGUgc291cmNlIGFmdGVyd2FyZHMuICBOb3RlIHRoYXQgdGhlcmUgaXMgYSByaXNrCit3aGVuIG92ZXJ3cml0aW5nIGEgZmlsZSBpbiBwbGFjZSB0aGF0IGFuIGVycm9yIHdpbGwgcmVzdWx0IGluIHRoZSBsb3NzIG9mCit0aGUgb3JpZ2luYWwgZmlsZS4gIFRoaXMgY29kZSBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3Qgc3VjaCBlcnJvcnMsIGJ1dAorcHJvZHVjdGlvbiBjb2RlIHNob3VsZCBkbyBzby4gIEFsc28sIHRoaXMgbWV0aG9kIHdpbGwgb25seSB3b3JrIGlmIHRoZSBhcmNoaXZlCitmaXRzIGluIG1lbW9yeTo6CisKKyAgID4+PiBpbXBvcnQgemlwYXBwCisgICA+Pj4gaW1wb3J0IGlvCisgICA+Pj4gdGVtcCA9IGlvLkJ5dGVzSU8oKQorICAgPj4+IHppcGFwcC5jcmVhdGVfYXJjaGl2ZSgnbXlhcHAucHl6JywgdGVtcCwgJy91c3IvYmluL3B5dGhvbjInKQorICAgPj4+IHdpdGggb3BlbignbXlhcHAucHl6JywgJ3diJykgYXMgZjoKKyAgID4+PiAgICAgZi53cml0ZSh0ZW1wLmdldHZhbHVlKCkpCisKK05vdGUgdGhhdCBpZiB5b3Ugc3BlY2lmeSBhbiBpbnRlcnByZXRlciBhbmQgdGhlbiBkaXN0cmlidXRlIHlvdXIgYXBwbGljYXRpb24KK2FyY2hpdmUsIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBpbnRlcnByZXRlciB1c2VkIGlzIHBvcnRhYmxlLiAgVGhlIFB5dGhvbgorbGF1bmNoZXIgZm9yIFdpbmRvd3Mgc3VwcG9ydHMgbW9zdCBjb21tb24gZm9ybXMgb2YgUE9TSVggYGAjIWBgIGxpbmUsIGJ1dCB0aGVyZQorYXJlIG90aGVyIGlzc3VlcyB0byBjb25zaWRlcjoKKworKiBJZiB5b3UgdXNlICIvdXNyL2Jpbi9lbnYgcHl0aG9uIiAob3Igb3RoZXIgZm9ybXMgb2YgdGhlICJweXRob24iIGNvbW1hbmQsCisgIHN1Y2ggYXMgIi91c3IvYmluL3B5dGhvbiIpLCB5b3UgbmVlZCB0byBjb25zaWRlciB0aGF0IHlvdXIgdXNlcnMgbWF5IGhhdmUKKyAgZWl0aGVyIFB5dGhvbiAyIG9yIFB5dGhvbiAzIGFzIHRoZWlyIGRlZmF1bHQsIGFuZCB3cml0ZSB5b3VyIGNvZGUgdG8gd29yaworICB1bmRlciBib3RoIHZlcnNpb25zLgorKiBJZiB5b3UgdXNlIGFuIGV4cGxpY2l0IHZlcnNpb24sIGZvciBleGFtcGxlICIvdXNyL2Jpbi9lbnYgcHl0aG9uMyIgeW91cgorICBhcHBsaWNhdGlvbiB3aWxsIG5vdCB3b3JrIGZvciB1c2VycyB3aG8gZG8gbm90IGhhdmUgdGhhdCB2ZXJzaW9uLiAgKFRoaXMKKyAgbWF5IGJlIHdoYXQgeW91IHdhbnQgaWYgeW91IGhhdmUgbm90IG1hZGUgeW91ciBjb2RlIFB5dGhvbiAyIGNvbXBhdGlibGUpLgorKiBUaGVyZSBpcyBubyB3YXkgdG8gc2F5ICJweXRob24gWC5ZIG9yIGxhdGVyIiwgc28gYmUgY2FyZWZ1bCBvZiB1c2luZyBhbgorICBleGFjdCB2ZXJzaW9uIGxpa2UgIi91c3IvYmluL2VudiBweXRob24zLjQiIGFzIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHlvdXIKKyAgc2hlYmFuZyBsaW5lIGZvciB1c2VycyBvZiBQeXRob24gMy41LCBmb3IgZXhhbXBsZS4KKworVGhlIFB5dGhvbiBaaXAgQXBwbGljYXRpb24gQXJjaGl2ZSBGb3JtYXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B5dGhvbiBoYXMgYmVlbiBhYmxlIHRvIGV4ZWN1dGUgemlwIGZpbGVzIHdoaWNoIGNvbnRhaW4gYSBgYF9fbWFpbl9fLnB5YGAgZmlsZQorc2luY2UgdmVyc2lvbiAyLjYuICBJbiBvcmRlciB0byBiZSBleGVjdXRlZCBieSBQeXRob24sIGFuIGFwcGxpY2F0aW9uIGFyY2hpdmUKK3NpbXBseSBoYXMgdG8gYmUgYSBzdGFuZGFyZCB6aXAgZmlsZSBjb250YWluaW5nIGEgYGBfX21haW5fXy5weWBgIGZpbGUgd2hpY2gKK3dpbGwgYmUgcnVuIGFzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGFwcGxpY2F0aW9uLiAgQXMgdXN1YWwgZm9yIGFueSBQeXRob24KK3NjcmlwdCwgdGhlIHBhcmVudCBvZiB0aGUgc2NyaXB0IChpbiB0aGlzIGNhc2UgdGhlIHppcCBmaWxlKSB3aWxsIGJlIHBsYWNlZCBvbgorOmRhdGE6YHN5cy5wYXRoYCBhbmQgdGh1cyBmdXJ0aGVyIG1vZHVsZXMgY2FuIGJlIGltcG9ydGVkIGZyb20gdGhlIHppcCBmaWxlLgorCitUaGUgemlwIGZpbGUgZm9ybWF0IGFsbG93cyBhcmJpdHJhcnkgZGF0YSB0byBiZSBwcmVwZW5kZWQgdG8gYSB6aXAgZmlsZS4gIFRoZQoremlwIGFwcGxpY2F0aW9uIGZvcm1hdCB1c2VzIHRoaXMgYWJpbGl0eSB0byBwcmVwZW5kIGEgc3RhbmRhcmQgUE9TSVggInNoZWJhbmciCitsaW5lIHRvIHRoZSBmaWxlIChgYCMhL3BhdGgvdG8vaW50ZXJwcmV0ZXJgYCkuCisKK0Zvcm1hbGx5LCB0aGUgUHl0aG9uIHppcCBhcHBsaWNhdGlvbiBmb3JtYXQgaXMgdGhlcmVmb3JlOgorCisxLiBBbiBvcHRpb25hbCBzaGViYW5nIGxpbmUsIGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlcnMgYGBiJyMhJ2BgIGZvbGxvd2VkIGJ5IGFuCisgICBpbnRlcnByZXRlciBuYW1lLCBhbmQgdGhlbiBhIG5ld2xpbmUgKGBgYidcbidgYCkgY2hhcmFjdGVyLiAgVGhlIGludGVycHJldGVyCisgICBuYW1lIGNhbiBiZSBhbnl0aGluZyBhY2NlcHRhYmxlIHRvIHRoZSBPUyAic2hlYmFuZyIgcHJvY2Vzc2luZywgb3IgdGhlIFB5dGhvbgorICAgbGF1bmNoZXIgb24gV2luZG93cy4gIFRoZSBpbnRlcnByZXRlciBzaG91bGQgYmUgZW5jb2RlZCBpbiBVVEYtOCBvbiBXaW5kb3dzLAorICAgYW5kIGluIDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKClgIG9uIFBPU0lYLgorMi4gU3RhbmRhcmQgemlwZmlsZSBkYXRhLCBhcyBnZW5lcmF0ZWQgYnkgdGhlIDptb2Q6YHppcGZpbGVgIG1vZHVsZS4gIFRoZQorICAgemlwZmlsZSBjb250ZW50ICptdXN0KiBpbmNsdWRlIGEgZmlsZSBjYWxsZWQgYGBfX21haW5fXy5weWBgICh3aGljaCBtdXN0IGJlCisgICBpbiB0aGUgInJvb3QiIG9mIHRoZSB6aXBmaWxlIC0gaS5lLiwgaXQgY2Fubm90IGJlIGluIGEgc3ViZGlyZWN0b3J5KS4gIFRoZQorICAgemlwZmlsZSBkYXRhIGNhbiBiZSBjb21wcmVzc2VkIG9yIHVuY29tcHJlc3NlZC4KKworSWYgYW4gYXBwbGljYXRpb24gYXJjaGl2ZSBoYXMgYSBzaGViYW5nIGxpbmUsIGl0IG1heSBoYXZlIHRoZSBleGVjdXRhYmxlIGJpdCBzZXQKK29uIFBPU0lYIHN5c3RlbXMsIHRvIGFsbG93IGl0IHRvIGJlIGV4ZWN1dGVkIGRpcmVjdGx5LgorCitUaGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IHRoZSB0b29scyBpbiB0aGlzIG1vZHVsZSBhcmUgdXNlZCB0byBjcmVhdGUKK2FwcGxpY2F0aW9uIGFyY2hpdmVzIC0gdGhlIG1vZHVsZSBpcyBhIGNvbnZlbmllbmNlLCBidXQgYXJjaGl2ZXMgaW4gdGhlIGFib3ZlCitmb3JtYXQgY3JlYXRlZCBieSBhbnkgbWVhbnMgYXJlIGFjY2VwdGFibGUgdG8gUHl0aG9uLgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CmluZGV4IDEwYTA5NGYuLmFiZTM4YzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CkBAIC0zLDYgKzMsNyBAQAogCiAuLiBtb2R1bGU6OiB6aXBmaWxlCiAgICA6c3lub3BzaXM6IFJlYWQgYW5kIHdyaXRlIFpJUC1mb3JtYXQgYXJjaGl2ZSBmaWxlcy4KKwogLi4gbW9kdWxlYXV0aG9yOjogSmFtZXMgQy4gQWhsc3Ryb20gPGppbUBpbnRlcmV0LmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBKYW1lcyBDLiBBaGxzdHJvbSA8amltQGludGVyZXQuY29tPgogCkBAIC0xMyw4ICsxNCw3IEBACiBUaGUgWklQIGZpbGUgZm9ybWF0IGlzIGEgY29tbW9uIGFyY2hpdmUgYW5kIGNvbXByZXNzaW9uIHN0YW5kYXJkLiBUaGlzIG1vZHVsZQogcHJvdmlkZXMgdG9vbHMgdG8gY3JlYXRlLCByZWFkLCB3cml0ZSwgYXBwZW5kLCBhbmQgbGlzdCBhIFpJUCBmaWxlLiAgQW55CiBhZHZhbmNlZCB1c2Ugb2YgdGhpcyBtb2R1bGUgd2lsbCByZXF1aXJlIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZvcm1hdCwgYXMKLWRlZmluZWQgaW4gYFBLWklQIEFwcGxpY2F0aW9uIE5vdGUKLTxodHRwOi8vd3d3LnBrd2FyZS5jb20vZG9jdW1lbnRzL2Nhc2VzdHVkaWVzL0FQUE5PVEUuVFhUPmBfLgorZGVmaW5lZCBpbiBgUEtaSVAgQXBwbGljYXRpb24gTm90ZWBfLgogCiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBjdXJyZW50bHkgaGFuZGxlIG11bHRpLWRpc2sgWklQIGZpbGVzLgogSXQgY2FuIGhhbmRsZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0IGV4dGVuc2lvbnMKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYFBLWklQIEFwcGxpY2F0aW9uIE5vdGUgPGh0dHA6Ly93d3cucGt3YXJlLmNvbS9kb2N1bWVudHMvY2FzZXN0dWRpZXMvQVBQTk9URS5UWFQ+YF8KKyAgIGBQS1pJUCBBcHBsaWNhdGlvbiBOb3RlYF8KICAgICAgIERvY3VtZW50YXRpb24gb24gdGhlIFpJUCBmaWxlIGZvcm1hdCBieSBQaGlsIEthdHosIHRoZSBjcmVhdG9yIG9mIHRoZSBmb3JtYXQgYW5kCiAgICAgICBhbGdvcml0aG1zIHVzZWQuCiAKQEAgLTEzNCwxMiArMTM0LDE2IEBACiAKICAgIE9wZW4gYSBaSVAgZmlsZSwgd2hlcmUgKmZpbGUqIGNhbiBiZSBlaXRoZXIgYSBwYXRoIHRvIGEgZmlsZSAoYSBzdHJpbmcpIG9yIGEKICAgIGZpbGUtbGlrZSBvYmplY3QuICBUaGUgKm1vZGUqIHBhcmFtZXRlciBzaG91bGQgYmUgYGAncidgYCB0byByZWFkIGFuIGV4aXN0aW5nCi0gICBmaWxlLCBgYCd3J2BgIHRvIHRydW5jYXRlIGFuZCB3cml0ZSBhIG5ldyBmaWxlLCBvciBgYCdhJ2BgIHRvIGFwcGVuZCB0byBhbgotICAgZXhpc3RpbmcgZmlsZS4gIElmICptb2RlKiBpcyBgYCdhJ2BgIGFuZCAqZmlsZSogcmVmZXJzIHRvIGFuIGV4aXN0aW5nIFpJUAorICAgZmlsZSwgYGAndydgYCB0byB0cnVuY2F0ZSBhbmQgd3JpdGUgYSBuZXcgZmlsZSwgYGAnYSdgYCB0byBhcHBlbmQgdG8gYW4KKyAgIGV4aXN0aW5nIGZpbGUsIG9yIGBgJ3gnYGAgdG8gZXhjbHVzaXZlbHkgY3JlYXRlIGFuZCB3cml0ZSBhIG5ldyBmaWxlLgorICAgSWYgKm1vZGUqIGlzIGBgJ3gnYGAgYW5kICpmaWxlKiByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZmlsZSwKKyAgIGEgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKyAgIElmICptb2RlKiBpcyBgYCdhJ2BgIGFuZCAqZmlsZSogcmVmZXJzIHRvIGFuIGV4aXN0aW5nIFpJUAogICAgZmlsZSwgdGhlbiBhZGRpdGlvbmFsIGZpbGVzIGFyZSBhZGRlZCB0byBpdC4gIElmICpmaWxlKiBkb2VzIG5vdCByZWZlciB0byBhCiAgICBaSVAgZmlsZSwgdGhlbiBhIG5ldyBaSVAgYXJjaGl2ZSBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZS4gIFRoaXMgaXMgbWVhbnQgZm9yCiAgICBhZGRpbmcgYSBaSVAgYXJjaGl2ZSB0byBhbm90aGVyIGZpbGUgKHN1Y2ggYXMgOmZpbGU6YHB5dGhvbi5leGVgKS4gIElmCiAgICAqbW9kZSogaXMgYGBhYGAgYW5kIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IGF0IGFsbCwgaXQgaXMgY3JlYXRlZC4KKyAgIElmICptb2RlKiBpcyBgYHJgYCBvciBgYGFgYCwgdGhlIGZpbGUgc2hvdWxkIGJlIHNlZWthYmxlLgogICAgKmNvbXByZXNzaW9uKiBpcyB0aGUgWklQIGNvbXByZXNzaW9uIG1ldGhvZCB0byB1c2Ugd2hlbiB3cml0aW5nIHRoZSBhcmNoaXZlLAogICAgYW5kIHNob3VsZCBiZSA6Y29uc3Q6YFpJUF9TVE9SRURgLCA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAsCiAgICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWA7IHVucmVjb2duaXplZApAQCAtMTUxLDcgKzE1NSw3IEBACiAgICBleHRlbnNpb25zIHdoZW4gdGhlIHppcGZpbGUgaXMgbGFyZ2VyIHRoYW4gMiBHaUIuIElmIGl0IGlzICBmYWxzZSA6bW9kOmB6aXBmaWxlYAogICAgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgWklQIGZpbGUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zLgogCi0gICBJZiB0aGUgZmlsZSBpcyBjcmVhdGVkIHdpdGggbW9kZSBgYCdhJ2BgIG9yIGBgJ3cnYGAgYW5kIHRoZW4KKyAgIElmIHRoZSBmaWxlIGlzIGNyZWF0ZWQgd2l0aCBtb2RlIGBgJ3cnYGAsIGBgJ3gnYGAgb3IgYGAnYSdgYCBhbmQgdGhlbgogICAgOm1ldGg6YGNsb3NlZCA8Y2xvc2U+YCB3aXRob3V0IGFkZGluZyBhbnkgZmlsZXMgdG8gdGhlIGFyY2hpdmUsIHRoZSBhcHByb3ByaWF0ZQogICAgWklQIHN0cnVjdHVyZXMgZm9yIGFuIGVtcHR5IGFyY2hpdmUgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBmaWxlLgogCkBAIC0xNzEsNiArMTc1LDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAogICAgICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgICAgQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyB0byB1bnNlZWthYmxlIHN0cmVhbXMuCisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAneCdgYCBtb2RlLgorCiAKIC4uIG1ldGhvZDo6IFppcEZpbGUuY2xvc2UoKQogCkBAIC0yMjYsMTQgKzIzNCw4IEBACiAKICAgIC4uIG5vdGU6OgogCi0gICAgICBJZiB0aGUgWmlwRmlsZSB3YXMgY3JlYXRlZCBieSBwYXNzaW5nIGluIGEgZmlsZS1saWtlIG9iamVjdCBhcyB0aGUgIGZpcnN0Ci0gICAgICBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IsIHRoZW4gdGhlIG9iamVjdCByZXR1cm5lZCBieSA6bWV0aDpgLm9wZW5gIHNoYXJlcyB0aGUKLSAgICAgIFppcEZpbGUncyBmaWxlIHBvaW50ZXIuICBVbmRlciB0aGVzZSAgY2lyY3Vtc3RhbmNlcywgdGhlIG9iamVjdCByZXR1cm5lZCBieQotICAgICAgOm1ldGg6YC5vcGVuYCBzaG91bGQgbm90ICBiZSB1c2VkIGFmdGVyIGFueSBhZGRpdGlvbmFsIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZAotICAgICAgb24gdGhlICBaaXBGaWxlIG9iamVjdC4gIElmIHRoZSBaaXBGaWxlIHdhcyBjcmVhdGVkIGJ5IHBhc3NpbmcgaW4gYSBzdHJpbmcgKHRoZQotICAgICAgZmlsZW5hbWUpIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IsIHRoZW4gIDptZXRoOmAub3BlbmAgd2lsbAotICAgICAgY3JlYXRlIGEgbmV3IGZpbGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBoZWxkIGJ5IHRoZSBaaXBFeHRGaWxlLCBhbGxvd2luZyBpdCB0bwotICAgICAgb3BlcmF0ZSBpbmRlcGVuZGVudGx5IG9mIHRoZSAgWmlwRmlsZS4KKyAgICAgIE9iamVjdHMgcmV0dXJuZWQgYnkgOm1ldGg6YC5vcGVuYCBjYW4gb3BlcmF0ZSBpbmRlcGVuZGVudGx5IG9mIHRoZQorICAgICAgWmlwRmlsZS4KIAogICAgLi4gbm90ZTo6CiAKQEAgLTI0OCw3ICsyNTAsNyBAQAogLi4gbWV0aG9kOjogWmlwRmlsZS5leHRyYWN0KG1lbWJlciwgcGF0aD1Ob25lLCBwd2Q9Tm9uZSkKIAogICAgRXh0cmFjdCBhIG1lbWJlciBmcm9tIHRoZSBhcmNoaXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OyAqbWVtYmVyKgotICAgbXVzdCBiZSBpdHMgZnVsbCBuYW1lIG9yIGEgOmNsYXNzOmBaaXBJbmZvYCBvYmplY3QpLiAgSXRzIGZpbGUgaW5mb3JtYXRpb24gaXMKKyAgIG11c3QgYmUgaXRzIGZ1bGwgbmFtZSBvciBhIDpjbGFzczpgWmlwSW5mb2Agb2JqZWN0LiAgSXRzIGZpbGUgaW5mb3JtYXRpb24gaXMKICAgIGV4dHJhY3RlZCBhcyBhY2N1cmF0ZWx5IGFzIHBvc3NpYmxlLiAgKnBhdGgqIHNwZWNpZmllcyBhIGRpZmZlcmVudCBkaXJlY3RvcnkKICAgIHRvIGV4dHJhY3QgdG8uICAqbWVtYmVyKiBjYW4gYmUgYSBmaWxlbmFtZSBvciBhIDpjbGFzczpgWmlwSW5mb2Agb2JqZWN0LgogICAgKnB3ZCogaXMgdGhlIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRlZCBmaWxlcy4KQEAgLTMxOCw3ICszMjAsOCBAQAogICAgKmFyY25hbWUqIChieSBkZWZhdWx0LCB0aGlzIHdpbGwgYmUgdGhlIHNhbWUgYXMgKmZpbGVuYW1lKiwgYnV0IHdpdGhvdXQgYSBkcml2ZQogICAgbGV0dGVyIGFuZCB3aXRoIGxlYWRpbmcgcGF0aCBzZXBhcmF0b3JzIHJlbW92ZWQpLiAgSWYgZ2l2ZW4sICpjb21wcmVzc190eXBlKgogICAgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBnaXZlbiBmb3IgdGhlICpjb21wcmVzc2lvbiogcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IKLSAgIHRoZSBuZXcgZW50cnkuICBUaGUgYXJjaGl2ZSBtdXN0IGJlIG9wZW4gd2l0aCBtb2RlIGBgJ3cnYGAgb3IgYGAnYSdgYCAtLSBjYWxsaW5nCisgICB0aGUgbmV3IGVudHJ5LgorICAgVGhlIGFyY2hpdmUgbXVzdCBiZSBvcGVuIHdpdGggbW9kZSBgYCd3J2BgLCBgYCd4J2BgIG9yIGBgJ2EnYGAgLS0gY2FsbGluZwogICAgOm1ldGg6YHdyaXRlYCBvbiBhIFppcEZpbGUgY3JlYXRlZCB3aXRoIG1vZGUgYGAncidgYCB3aWxsIHJhaXNlIGEKICAgIDpleGM6YFJ1bnRpbWVFcnJvcmAuICBDYWxsaW5nICA6bWV0aDpgd3JpdGVgIG9uIGEgY2xvc2VkIFppcEZpbGUgd2lsbCByYWlzZSBhCiAgICA6ZXhjOmBSdW50aW1lRXJyb3JgLgpAQCAtMzQwLDE2ICszNDMsMTYgQEAKICAgICAgIElmIGBgYXJjbmFtZWBgIChvciBgYGZpbGVuYW1lYGAsIGlmIGBgYXJjbmFtZWBgIGlzICBub3QgZ2l2ZW4pIGNvbnRhaW5zIGEgbnVsbAogICAgICAgYnl0ZSwgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUgd2lsbCBiZSB0cnVuY2F0ZWQgYXQgdGhlIG51bGwgYnl0ZS4KIAorLi4gbWV0aG9kOjogWmlwRmlsZS53cml0ZXN0cih6aW5mb19vcl9hcmNuYW1lLCBkYXRhWywgY29tcHJlc3NfdHlwZV0pCiAKLS4uIG1ldGhvZDo6IFppcEZpbGUud3JpdGVzdHIoemluZm9fb3JfYXJjbmFtZSwgYnl0ZXNbLCBjb21wcmVzc190eXBlXSkKLQotICAgV3JpdGUgdGhlIHN0cmluZyAqYnl0ZXMqIHRvIHRoZSBhcmNoaXZlOyAqemluZm9fb3JfYXJjbmFtZSogaXMgZWl0aGVyIHRoZSBmaWxlCisgICBXcml0ZSB0aGUgc3RyaW5nICpkYXRhKiB0byB0aGUgYXJjaGl2ZTsgKnppbmZvX29yX2FyY25hbWUqIGlzIGVpdGhlciB0aGUgZmlsZQogICAgbmFtZSBpdCB3aWxsIGJlIGdpdmVuIGluIHRoZSBhcmNoaXZlLCBvciBhIDpjbGFzczpgWmlwSW5mb2AgaW5zdGFuY2UuICBJZiBpdCdzCiAgICBhbiBpbnN0YW5jZSwgYXQgbGVhc3QgdGhlIGZpbGVuYW1lLCBkYXRlLCBhbmQgdGltZSBtdXN0IGJlIGdpdmVuLiAgSWYgaXQncyBhCi0gICBuYW1lLCB0aGUgZGF0ZSBhbmQgdGltZSBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS4gVGhlIGFyY2hpdmUgbXVzdCBiZQotICAgb3BlbmVkIHdpdGggbW9kZSBgYCd3J2BgIG9yIGBgJ2EnYGAgLS0gY2FsbGluZyAgOm1ldGg6YHdyaXRlc3RyYCBvbiBhIFppcEZpbGUKLSAgIGNyZWF0ZWQgd2l0aCBtb2RlIGBgJ3InYGAgIHdpbGwgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXJyb3JgLiAgQ2FsbGluZwotICAgOm1ldGg6YHdyaXRlc3RyYCBvbiBhIGNsb3NlZCBaaXBGaWxlIHdpbGwgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXJyb3JgLgorICAgbmFtZSwgdGhlIGRhdGUgYW5kIHRpbWUgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCisgICBUaGUgYXJjaGl2ZSBtdXN0IGJlIG9wZW5lZCB3aXRoIG1vZGUgYGAndydgYCwgYGAneCdgYCBvciBgYCdhJ2BgIC0tIGNhbGxpbmcKKyAgIDptZXRoOmB3cml0ZXN0cmAgb24gYSBaaXBGaWxlIGNyZWF0ZWQgd2l0aCBtb2RlIGBgJ3InYGAgd2lsbCByYWlzZSBhCisgICA6ZXhjOmBSdW50aW1lRXJyb3JgLiAgQ2FsbGluZyA6bWV0aDpgd3JpdGVzdHJgIG9uIGEgY2xvc2VkIFppcEZpbGUgd2lsbAorICAgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXJyb3JgLgogCiAgICBJZiBnaXZlbiwgKmNvbXByZXNzX3R5cGUqIG92ZXJyaWRlcyB0aGUgdmFsdWUgZ2l2ZW4gZm9yIHRoZSAqY29tcHJlc3Npb24qCiAgICBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgbmV3IGVudHJ5LCBvciBpbiB0aGUgKnppbmZvX29yX2FyY25hbWUqCkBAIC0zNzcsNyArMzgwLDggQEAKIC4uIGF0dHJpYnV0ZTo6IFppcEZpbGUuY29tbWVudAogCiAgICBUaGUgY29tbWVudCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgWklQIGZpbGUuICBJZiBhc3NpZ25pbmcgYSBjb21tZW50IHRvIGEKLSAgIDpjbGFzczpgWmlwRmlsZWAgaW5zdGFuY2UgY3JlYXRlZCB3aXRoIG1vZGUgJ2EnIG9yICd3JywgdGhpcyBzaG91bGQgYmUgYQorICAgOmNsYXNzOmBaaXBGaWxlYCBpbnN0YW5jZSBjcmVhdGVkIHdpdGggbW9kZSBgYCd3J2BgLCBgYCd4J2BgIG9yIGBgJ2EnYGAsCisgICB0aGlzIHNob3VsZCBiZSBhCiAgICBzdHJpbmcgbm8gbG9uZ2VyIHRoYW4gNjU1MzUgYnl0ZXMuICBDb21tZW50cyBsb25nZXIgdGhhbiB0aGlzIHdpbGwgYmUKICAgIHRydW5jYXRlZCBpbiB0aGUgd3JpdHRlbiBhcmNoaXZlIHdoZW4gOm1ldGg6YGNsb3NlYCBpcyBjYWxsZWQuCiAKQEAgLTQwNyw4ICs0MTEsNyBAQAogICAgICAgYXJjaGl2ZS4KIAogICAgICAgSWYgdGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyIHRvIDpjbGFzczpgUHlaaXBGaWxlYCB3YXMgbm90IGdpdmVuIG9yIGBgLTFgYCwKLSAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgaXMgYSA6ZmlsZTpgXCoucHlvYCBmaWxlIGlmIGF2YWlsYWJsZSwgZWxzZSBhCi0gICAgICA6ZmlsZTpgXCoucHljYCBmaWxlLCBjb21waWxpbmcgaWYgbmVjZXNzYXJ5LgorICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSBpcyBhIDpmaWxlOmBcKi5weWNgIGZpbGUsIGNvbXBpbGluZyBpZiBuZWNlc3NhcnkuCiAKICAgICAgIElmIHRoZSAqb3B0aW1pemUqIHBhcmFtZXRlciB0byA6Y2xhc3M6YFB5WmlwRmlsZWAgd2FzIGBgMGBgLCBgYDFgYCBvcgogICAgICAgYGAyYGAsIG9ubHkgZmlsZXMgd2l0aCB0aGF0IG9wdGltaXphdGlvbiBsZXZlbCAoc2VlIDpmdW5jOmBjb21waWxlYCkgYXJlCkBAIC01MDgsOCArNTExLDcgQEAKIAogLi4gYXR0cmlidXRlOjogWmlwSW5mby5leHRyYQogCi0gICBFeHBhbnNpb24gZmllbGQgZGF0YS4gIFRoZSBgUEtaSVAgQXBwbGljYXRpb24gTm90ZQotICAgPGh0dHA6Ly93d3cucGt3YXJlLmNvbS9kb2N1bWVudHMvY2FzZXN0dWRpZXMvQVBQTk9URS5UWFQ+YF8gY29udGFpbnMKKyAgIEV4cGFuc2lvbiBmaWVsZCBkYXRhLiAgVGhlIGBQS1pJUCBBcHBsaWNhdGlvbiBOb3RlYF8gY29udGFpbnMKICAgIHNvbWUgY29tbWVudHMgb24gdGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhpcyBzdHJpbmcuCiAKIApAQCAtNTcyLDMgKzU3NCw0IEBACiAKICAgIFNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBmaWxlLgogCisuLiBfUEtaSVAgQXBwbGljYXRpb24gTm90ZTogaHR0cHM6Ly9wa3dhcmUuY2FjaGVmbHkubmV0L3dlYmRvY3MvY2FzZXN0dWRpZXMvQVBQTk9URS5UWFQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ppcGltcG9ydC5yc3QgYi9Eb2MvbGlicmFyeS96aXBpbXBvcnQucnN0CmluZGV4IDJjZjUwOGIuLjQ2YjhjMjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ppcGltcG9ydC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemlwaW1wb3J0LnJzdApAQCAtMyw4ICszLDEwIEBACiAKIC4uIG1vZHVsZTo6IHppcGltcG9ydAogICAgOnN5bm9wc2lzOiBzdXBwb3J0IGZvciBpbXBvcnRpbmcgUHl0aG9uIG1vZHVsZXMgZnJvbSBaSVAgYXJjaGl2ZXMuCisKIC4uIG1vZHVsZWF1dGhvcjo6IEp1c3QgdmFuIFJvc3N1bSA8anVzdEBsZXR0ZXJyb3IuY29tPgogCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBhZGRzIHRoZSBhYmlsaXR5IHRvIGltcG9ydCBQeXRob24gbW9kdWxlcyAoOmZpbGU6YFwqLnB5YCwKIDpmaWxlOmBcKi5weVtjb11gKSBhbmQgcGFja2FnZXMgZnJvbSBaSVAtZm9ybWF0IGFyY2hpdmVzLiBJdCBpcyB1c3VhbGx5IG5vdApAQCAtMjAsMTcgKzIyLDE3IEBACiBpbXBvcnQgZnJvbSB0aGUgOmZpbGU6YGxpYi9gIHN1YmRpcmVjdG9yeSB3aXRoaW4gdGhlIGFyY2hpdmUuCiAKIEFueSBmaWxlcyBtYXkgYmUgcHJlc2VudCBpbiB0aGUgWklQIGFyY2hpdmUsIGJ1dCBvbmx5IGZpbGVzIDpmaWxlOmAucHlgIGFuZAotOmZpbGU6YC5weVtjb11gIGFyZSBhdmFpbGFibGUgZm9yIGltcG9ydC4gIFpJUCBpbXBvcnQgb2YgZHluYW1pYyBtb2R1bGVzCis6ZmlsZTpgLnB5Y2AgYXJlIGF2YWlsYWJsZSBmb3IgaW1wb3J0LiAgWklQIGltcG9ydCBvZiBkeW5hbWljIG1vZHVsZXMKICg6ZmlsZTpgLnB5ZGAsIDpmaWxlOmAuc29gKSBpcyBkaXNhbGxvd2VkLiBOb3RlIHRoYXQgaWYgYW4gYXJjaGl2ZSBvbmx5IGNvbnRhaW5zCiA6ZmlsZTpgLnB5YCBmaWxlcywgUHl0aG9uIHdpbGwgbm90IGF0dGVtcHQgdG8gbW9kaWZ5IHRoZSBhcmNoaXZlIGJ5IGFkZGluZyB0aGUKLWNvcnJlc3BvbmRpbmcgOmZpbGU6YC5weWNgIG9yIDpmaWxlOmAucHlvYCBmaWxlLCBtZWFuaW5nIHRoYXQgaWYgYSBaSVAgYXJjaGl2ZQorY29ycmVzcG9uZGluZyA6ZmlsZTpgLnB5Y2AgZmlsZSwgbWVhbmluZyB0aGF0IGlmIGEgWklQIGFyY2hpdmUKIGRvZXNuJ3QgY29udGFpbiA6ZmlsZTpgLnB5Y2AgZmlsZXMsIGltcG9ydGluZyBtYXkgYmUgcmF0aGVyIHNsb3cuCiAKIFpJUCBhcmNoaXZlcyB3aXRoIGFuIGFyY2hpdmUgY29tbWVudCBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCiAKIC4uIHNlZWFsc286OgogCi0gICBgUEtaSVAgQXBwbGljYXRpb24gTm90ZSA8aHR0cDovL3d3dy5wa3dhcmUuY29tL2RvY3VtZW50cy9jYXNlc3R1ZGllcy9BUFBOT1RFLlRYVD5gXworICAgYFBLWklQIEFwcGxpY2F0aW9uIE5vdGUgPGh0dHBzOi8vcGt3YXJlLmNhY2hlZmx5Lm5ldC93ZWJkb2NzL2Nhc2VzdHVkaWVzL0FQUE5PVEUuVFhUPmBfCiAgICAgICBEb2N1bWVudGF0aW9uIG9uIHRoZSBaSVAgZmlsZSBmb3JtYXQgYnkgUGhpbCBLYXR6LCB0aGUgY3JlYXRvciBvZiB0aGUgZm9ybWF0IGFuZAogICAgICAgYWxnb3JpdGhtcyB1c2VkLgogCkBAIC0xNDUsNyArMTQ3LDkgQEAKIC0tLS0tLS0tCiAKIEhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGltcG9ydHMgYSBtb2R1bGUgZnJvbSBhIFpJUCBhcmNoaXZlIC0gbm90ZSB0aGF0IHRoZQotOm1vZDpgemlwaW1wb3J0YCBtb2R1bGUgaXMgbm90IGV4cGxpY2l0bHkgdXNlZC4gOjoKKzptb2Q6YHppcGltcG9ydGAgbW9kdWxlIGlzIG5vdCBleHBsaWNpdGx5IHVzZWQuCisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgdW56aXAgLWwgZXhhbXBsZS56aXAKICAgIEFyY2hpdmU6ICBleGFtcGxlLnppcApAQCAtMTYxLDQgKzE2NSwzIEBACiAgICA+Pj4gaW1wb3J0IGp3enRocmVhZGluZwogICAgPj4+IGp3enRocmVhZGluZy5fX2ZpbGVfXwogICAgJ2V4YW1wbGUuemlwL2p3enRocmVhZGluZy5weScKLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvemxpYi5yc3QgYi9Eb2MvbGlicmFyeS96bGliLnJzdAppbmRleCA1OGZjMzFiMC4uMWRlN2JhZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvemxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemxpYi5yc3QKQEAgLTUsNiArNSw3IEBACiAgICA6c3lub3BzaXM6IExvdy1sZXZlbCBpbnRlcmZhY2UgdG8gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gcm91dGluZXMKICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIGd6aXAuCiAKKy0tLS0tLS0tLS0tLS0tCiAKIEZvciBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIGRhdGEgY29tcHJlc3Npb24sIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUKIGFsbG93IGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLCB1c2luZyB0aGUgemxpYiBsaWJyYXJ5LiBUaGUgemxpYiBsaWJyYXJ5CkBAIC0zMSwyMiArMzIsMTkgQEAKIC4uIGZ1bmN0aW9uOjogYWRsZXIzMihkYXRhWywgdmFsdWVdKQogCiAgICBDb21wdXRlcyBhbiBBZGxlci0zMiBjaGVja3N1bSBvZiAqZGF0YSouICAoQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFzCi0gICByZWxpYWJsZSBhcyBhIENSQzMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQgbXVjaCBtb3JlIHF1aWNrbHkuKSAgSWYgKnZhbHVlKiBpcwotICAgcHJlc2VudCwgaXQgaXMgdXNlZCBhcyB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNoZWNrc3VtOyBvdGhlcndpc2UsIGEgZml4ZWQKLSAgIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4gIFRoaXMgYWxsb3dzIGNvbXB1dGluZyBhIHJ1bm5pbmcgY2hlY2tzdW0gb3ZlciB0aGUKKyAgIHJlbGlhYmxlIGFzIGEgQ1JDMzIgYnV0IGNhbiBiZSBjb21wdXRlZCBtdWNoIG1vcmUgcXVpY2tseS4pICBUaGUgcmVzdWx0CisgICBpcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4gIElmICp2YWx1ZSogaXMgcHJlc2VudCwgaXQgaXMgdXNlZCBhcworICAgdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bTsgb3RoZXJ3aXNlLCBhIGRlZmF1bHQgdmFsdWUgb2YgMQorICAgaXMgdXNlZC4gIFBhc3NpbmcgaW4gKnZhbHVlKiBhbGxvd3MgY29tcHV0aW5nIGEgcnVubmluZyBjaGVja3N1bSBvdmVyIHRoZQogICAgY29uY2F0ZW5hdGlvbiBvZiBzZXZlcmFsIGlucHV0cy4gIFRoZSBhbGdvcml0aG0gaXMgbm90IGNyeXB0b2dyYXBoaWNhbGx5CiAgICBzdHJvbmcsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIG9yIGRpZ2l0YWwgc2lnbmF0dXJlcy4gIFNpbmNlCiAgICB0aGUgYWxnb3JpdGhtIGlzIGRlc2lnbmVkIGZvciB1c2UgYXMgYSBjaGVja3N1bSBhbGdvcml0aG0sIGl0IGlzIG5vdCBzdWl0YWJsZQogICAgZm9yIHVzZSBhcyBhIGdlbmVyYWwgaGFzaCBhbGdvcml0aG0uCiAKLSAgIEFsd2F5cyByZXR1cm5zIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgotCi0uLiBub3RlOjoKLSAgIFRvIGdlbmVyYXRlIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYWNyb3NzIGFsbCBQeXRob24gdmVyc2lvbnMgYW5kCi0gICBwbGF0Zm9ybXMgdXNlIGFkbGVyMzIoZGF0YSkgJiAweGZmZmZmZmZmLiAgSWYgeW91IGFyZSBvbmx5IHVzaW5nCi0gICB0aGUgY2hlY2tzdW0gaW4gcGFja2VkIGJpbmFyeSBmb3JtYXQgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGFzIHRoZQotICAgcmV0dXJuIHZhbHVlIGlzIHRoZSBjb3JyZWN0IDMyYml0IGJpbmFyeSByZXByZXNlbnRhdGlvbgotICAgcmVnYXJkbGVzcyBvZiBzaWduLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjAKKyAgICAgIEFsd2F5cyByZXR1cm5zIGFuIHVuc2lnbmVkIHZhbHVlLgorICAgICAgVG8gZ2VuZXJhdGUgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhY3Jvc3MgYWxsIFB5dGhvbiB2ZXJzaW9ucyBhbmQKKyAgICAgIHBsYXRmb3JtcywgdXNlIGBgYWRsZXIzMihkYXRhKSAmIDB4ZmZmZmZmZmZgYC4KIAogCiAuLiBmdW5jdGlvbjo6IGNvbXByZXNzKGRhdGFbLCBsZXZlbF0pCkBAIC02MywxNyArNjEsMzEgQEAKICAgIFJldHVybnMgYSBjb21wcmVzc2lvbiBvYmplY3QsIHRvIGJlIHVzZWQgZm9yIGNvbXByZXNzaW5nIGRhdGEgc3RyZWFtcyB0aGF0IHdvbid0CiAgICBmaXQgaW50byBtZW1vcnkgYXQgb25jZS4KIAotICAgKmxldmVsKiBpcyB0aGUgY29tcHJlc3Npb24gbGV2ZWwgLS0gYW4gaW50ZWdlciBmcm9tIGBgMGBgIHRvIGBgOWBgLiBBIHZhbHVlCi0gICBvZiBgYDFgYCBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sIHdoaWxlIGEgdmFsdWUgb2YKKyAgICpsZXZlbCogaXMgdGhlIGNvbXByZXNzaW9uIGxldmVsIC0tIGFuIGludGVnZXIgZnJvbSBgYDBgYCB0byBgYDlgYCBvciBgYC0xYGAuCisgICBBIHZhbHVlIG9mIGBgMWBgIGlzIGZhc3Rlc3QgYW5kIHByb2R1Y2VzIHRoZSBsZWFzdCBjb21wcmVzc2lvbiwgd2hpbGUgYSB2YWx1ZSBvZgogICAgYGA5YGAgaXMgc2xvd2VzdCBhbmQgcHJvZHVjZXMgdGhlIG1vc3QuIGBgMGBgIGlzIG5vIGNvbXByZXNzaW9uLiBUaGUgZGVmYXVsdAotICAgdmFsdWUgaXMgYGA2YGAuCisgICB2YWx1ZSBpcyBgYC0xYGAgKFpfREVGQVVMVF9DT01QUkVTU0lPTikuIFpfREVGQVVMVF9DT01QUkVTU0lPTiByZXByZXNlbnRzIGEgZGVmYXVsdAorICAgY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFuZCBjb21wcmVzc2lvbiAoY3VycmVudGx5IGVxdWl2YWxlbnQgdG8gbGV2ZWwgNikuCiAKICAgICptZXRob2QqIGlzIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZhbHVlIGlzCiAgICBgYERFRkxBVEVEYGAuCiAKLSAgICp3Yml0cyogaXMgdGhlIGJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgc2l6ZSBvZiB0aGUgd2luZG93IGJ1ZmZlci4gVGhpcwotICAgc2hvdWxkIGJlIGFuIGludGVnZXIgZnJvbSBgYDhgYCB0byBgYDE1YGAuIEhpZ2hlciB2YWx1ZXMgZ2l2ZSBiZXR0ZXIKLSAgIGNvbXByZXNzaW9uLCBidXQgdXNlIG1vcmUgbWVtb3J5LgorICAgVGhlICp3Yml0cyogYXJndW1lbnQgY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyIChvciB0aGUKKyAgICJ3aW5kb3cgc2l6ZSIpIHVzZWQgd2hlbiBjb21wcmVzc2luZyBkYXRhLCBhbmQgd2hldGhlciBhIGhlYWRlciBhbmQKKyAgIHRyYWlsZXIgaXMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gIEl0IGNhbiB0YWtlIHNldmVyYWwgcmFuZ2VzIG9mIHZhbHVlczoKKworICAgKiArOSB0byArMTU6IFRoZSBiYXNlLXR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplLCB3aGljaAorICAgICB0aGVyZWZvcmUgcmFuZ2VzIGJldHdlZW4gNTEyIGFuZCAzMjc2OC4gIExhcmdlciB2YWx1ZXMgcHJvZHVjZQorICAgICBiZXR0ZXIgY29tcHJlc3Npb24gYXQgdGhlIGV4cGVuc2Ugb2YgZ3JlYXRlciBtZW1vcnkgdXNhZ2UuICBUaGUKKyAgICAgcmVzdWx0aW5nIG91dHB1dCB3aWxsIGluY2x1ZGUgYSB6bGliLXNwZWNpZmljIGhlYWRlciBhbmQgdHJhaWxlci4KKworICAgKiDiiJI5IHRvIOKIkjE1OiBVc2VzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiAqd2JpdHMqIGFzIHRoZQorICAgICB3aW5kb3cgc2l6ZSBsb2dhcml0aG0sIHdoaWxlIHByb2R1Y2luZyBhIHJhdyBvdXRwdXQgc3RyZWFtIHdpdGggbm8KKyAgICAgaGVhZGVyIG9yIHRyYWlsaW5nIGNoZWNrc3VtLgorCisgICAqICsyNSB0byArMzEgPSAxNiArICg5IHRvIDE1KTogVXNlcyB0aGUgbG93IDQgYml0cyBvZiB0aGUgdmFsdWUgYXMgdGhlCisgICAgIHdpbmRvdyBzaXplIGxvZ2FyaXRobSwgd2hpbGUgaW5jbHVkaW5nIGEgYmFzaWMgOnByb2dyYW06YGd6aXBgIGhlYWRlcgorICAgICBhbmQgdHJhaWxpbmcgY2hlY2tzdW0gaW4gdGhlIG91dHB1dC4KIAogICAgVGhlICptZW1MZXZlbCogYXJndW1lbnQgY29udHJvbHMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBmb3IgdGhlCiAgICBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4gVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gYGAxYGAgdG8gYGA5YGAuCkBAIC05Nyw0MiArMTA5LDU4IEBACiAgICAgICBzaW5nbGU6IEN5Y2xpYyBSZWR1bmRhbmN5IENoZWNrCiAgICAgICBzaW5nbGU6IGNoZWNrc3VtOyBDeWNsaWMgUmVkdW5kYW5jeSBDaGVjawogCi0gICBDb21wdXRlcyBhIENSQyAoQ3ljbGljIFJlZHVuZGFuY3kgQ2hlY2spICBjaGVja3N1bSBvZiAqZGF0YSouIElmICp2YWx1ZSogaXMKLSAgIHByZXNlbnQsIGl0IGlzIHVzZWQgYXMgdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bTsgb3RoZXJ3aXNlLCBhIGZpeGVkCi0gICBkZWZhdWx0IHZhbHVlIGlzIHVzZWQuICBUaGlzIGFsbG93cyBjb21wdXRpbmcgYSBydW5uaW5nIGNoZWNrc3VtIG92ZXIgdGhlCisgICBDb21wdXRlcyBhIENSQyAoQ3ljbGljIFJlZHVuZGFuY3kgQ2hlY2spIGNoZWNrc3VtIG9mICpkYXRhKi4gVGhlCisgICByZXN1bHQgaXMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIuIElmICp2YWx1ZSogaXMgcHJlc2VudCwgaXQgaXMgdXNlZAorICAgYXMgdGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bTsgb3RoZXJ3aXNlLCBhIGRlZmF1bHQgdmFsdWUgb2YgMAorICAgaXMgdXNlZC4gIFBhc3NpbmcgaW4gKnZhbHVlKiBhbGxvd3MgY29tcHV0aW5nIGEgcnVubmluZyBjaGVja3N1bSBvdmVyIHRoZQogICAgY29uY2F0ZW5hdGlvbiBvZiBzZXZlcmFsIGlucHV0cy4gIFRoZSBhbGdvcml0aG0gaXMgbm90IGNyeXB0b2dyYXBoaWNhbGx5CiAgICBzdHJvbmcsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIG9yIGRpZ2l0YWwgc2lnbmF0dXJlcy4gIFNpbmNlCiAgICB0aGUgYWxnb3JpdGhtIGlzIGRlc2lnbmVkIGZvciB1c2UgYXMgYSBjaGVja3N1bSBhbGdvcml0aG0sIGl0IGlzIG5vdCBzdWl0YWJsZQogICAgZm9yIHVzZSBhcyBhIGdlbmVyYWwgaGFzaCBhbGdvcml0aG0uCiAKLSAgIEFsd2F5cyByZXR1cm5zIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgotCi0gICAuLiBub3RlOjoKLQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjAKKyAgICAgIEFsd2F5cyByZXR1cm5zIGFuIHVuc2lnbmVkIHZhbHVlLgogICAgICAgVG8gZ2VuZXJhdGUgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhY3Jvc3MgYWxsIFB5dGhvbiB2ZXJzaW9ucyBhbmQKLSAgICAgIHBsYXRmb3JtcywgdXNlIGBgY3JjMzIoZGF0YSkgJiAweGZmZmZmZmZmYGAuICBJZiB5b3UgYXJlIG9ubHkgdXNpbmcKLSAgICAgIHRoZSBjaGVja3N1bSBpbiBwYWNrZWQgYmluYXJ5IGZvcm1hdCB0aGlzIGlzIG5vdCBuZWNlc3NhcnkgYXMgdGhlCi0gICAgICByZXR1cm4gdmFsdWUgaXMgdGhlIGNvcnJlY3QgMzItYml0IGJpbmFyeSByZXByZXNlbnRhdGlvbgotICAgICAgcmVnYXJkbGVzcyBvZiBzaWduLgorICAgICAgcGxhdGZvcm1zLCB1c2UgYGBjcmMzMihkYXRhKSAmIDB4ZmZmZmZmZmZgYC4KIAogCiAuLiBmdW5jdGlvbjo6IGRlY29tcHJlc3MoZGF0YVssIHdiaXRzWywgYnVmc2l6ZV1dKQogCiAgICBEZWNvbXByZXNzZXMgdGhlIGJ5dGVzIGluICpkYXRhKiwgcmV0dXJuaW5nIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YS4gIFRoZSAqd2JpdHMqIHBhcmFtZXRlciBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgd2luZG93Ci0gICBidWZmZXIsIGFuZCBpcyBkaXNjdXNzZWQgZnVydGhlciBiZWxvdy4KKyAgIHVuY29tcHJlc3NlZCBkYXRhLiAgVGhlICp3Yml0cyogcGFyYW1ldGVyIGRlcGVuZHMgb24KKyAgIHRoZSBmb3JtYXQgb2YgKmRhdGEqLCBhbmQgaXMgZGlzY3Vzc2VkIGZ1cnRoZXIgYmVsb3cuCiAgICBJZiAqYnVmc2l6ZSogaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgYXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgb3V0cHV0CiAgICBidWZmZXIuICBSYWlzZXMgdGhlIDpleGM6YGVycm9yYCBleGNlcHRpb24gaWYgYW55IGVycm9yIG9jY3Vycy4KIAotICAgVGhlIGFic29sdXRlIHZhbHVlIG9mICp3Yml0cyogaXMgdGhlIGJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgc2l6ZSBvZiB0aGUKLSAgIGhpc3RvcnkgYnVmZmVyICh0aGUgIndpbmRvdyBzaXplIikgdXNlZCB3aGVuIGNvbXByZXNzaW5nIGRhdGEuICBJdHMgYWJzb2x1dGUKLSAgIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDggYW5kIDE1IGZvciB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIHpsaWIKLSAgIGxpYnJhcnksIGxhcmdlciB2YWx1ZXMgcmVzdWx0aW5nIGluIGJldHRlciBjb21wcmVzc2lvbiBhdCB0aGUgZXhwZW5zZSBvZiBncmVhdGVyCi0gICBtZW1vcnkgdXNhZ2UuICBXaGVuIGRlY29tcHJlc3NpbmcgYSBzdHJlYW0sICp3Yml0cyogbXVzdCBub3QgYmUgc21hbGxlcgorICAgLi4gX2RlY29tcHJlc3Mtd2JpdHM6CisKKyAgIFRoZSAqd2JpdHMqIHBhcmFtZXRlciBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIKKyAgIChvciAid2luZG93IHNpemUiKSwgYW5kIHdoYXQgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCBpcyBleHBlY3RlZC4KKyAgIEl0IGlzIHNpbWlsYXIgdG8gdGhlIHBhcmFtZXRlciBmb3IgOmZ1bmM6YGNvbXByZXNzb2JqYCwgYnV0IGFjY2VwdHMKKyAgIG1vcmUgcmFuZ2VzIG9mIHZhbHVlczoKKworICAgKiArOCB0byArMTU6IFRoZSBiYXNlLXR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplLiAgVGhlIGlucHV0CisgICAgIG11c3QgaW5jbHVkZSBhIHpsaWIgaGVhZGVyIGFuZCB0cmFpbGVyLgorCisgICAqIDA6IEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIHRoZSB3aW5kb3cgc2l6ZSBmcm9tIHRoZSB6bGliIGhlYWRlci4KKyAgICAgT25seSBzdXBwb3J0ZWQgc2luY2UgemxpYiAxLjIuMy41LgorCisgICAqIOKIkjggdG8g4oiSMTU6IFVzZXMgdGhlIGFic29sdXRlIHZhbHVlIG9mICp3Yml0cyogYXMgdGhlIHdpbmRvdyBzaXplCisgICAgIGxvZ2FyaXRobS4gIFRoZSBpbnB1dCBtdXN0IGJlIGEgcmF3IHN0cmVhbSB3aXRoIG5vIGhlYWRlciBvciB0cmFpbGVyLgorCisgICAqICsyNCB0byArMzEgPSAxNiArICg4IHRvIDE1KTogVXNlcyB0aGUgbG93IDQgYml0cyBvZiB0aGUgdmFsdWUgYXMKKyAgICAgdGhlIHdpbmRvdyBzaXplIGxvZ2FyaXRobS4gIFRoZSBpbnB1dCBtdXN0IGluY2x1ZGUgYSBnemlwIGhlYWRlciBhbmQKKyAgICAgdHJhaWxlci4KKworICAgKiArNDAgdG8gKzQ3ID0gMzIgKyAoOCB0byAxNSk6IFVzZXMgdGhlIGxvdyA0IGJpdHMgb2YgdGhlIHZhbHVlIGFzCisgICAgIHRoZSB3aW5kb3cgc2l6ZSBsb2dhcml0aG0sIGFuZCBhdXRvbWF0aWNhbGx5IGFjY2VwdHMgZWl0aGVyCisgICAgIHRoZSB6bGliIG9yIGd6aXAgZm9ybWF0LgorCisgICBXaGVuIGRlY29tcHJlc3NpbmcgYSBzdHJlYW0sIHRoZSB3aW5kb3cgc2l6ZSBtdXN0IG5vdCBiZSBzbWFsbGVyCiAgICB0aGFuIHRoZSBzaXplIG9yaWdpbmFsbHkgdXNlZCB0byBjb21wcmVzcyB0aGUgc3RyZWFtOyB1c2luZyBhIHRvby1zbWFsbAotICAgdmFsdWUgd2lsbCByZXN1bHQgaW4gYW4gZXhjZXB0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGVyZWZvcmUgdGhlCi0gICBoaWdoZXN0IHZhbHVlLCAxNS4gIFdoZW4gKndiaXRzKiBpcyBuZWdhdGl2ZSwgdGhlIHN0YW5kYXJkCi0gICA6cHJvZ3JhbTpgZ3ppcGAgaGVhZGVyIGlzIHN1cHByZXNzZWQuCisgICB2YWx1ZSBtYXkgcmVzdWx0IGluIGFuIDpleGM6YGVycm9yYCBleGNlcHRpb24uIFRoZSBkZWZhdWx0ICp3Yml0cyogdmFsdWUKKyAgIGlzIDE1LCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgbGFyZ2VzdCB3aW5kb3cgc2l6ZSBhbmQgcmVxdWlyZXMgYSB6bGliCisgICBoZWFkZXIgYW5kIHRyYWlsZXIgdG8gYmUgaW5jbHVkZWQuCiAKICAgICpidWZzaXplKiBpcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBidWZmZXIgdXNlZCB0byBob2xkIGRlY29tcHJlc3NlZCBkYXRhLiAgSWYKICAgIG1vcmUgc3BhY2UgaXMgcmVxdWlyZWQsIHRoZSBidWZmZXIgc2l6ZSB3aWxsIGJlIGluY3JlYXNlZCBhcyBuZWVkZWQsIHNvIHlvdQpAQCAtMTQ1LDcgKzE3Myw5IEBACiAgICBSZXR1cm5zIGEgZGVjb21wcmVzc2lvbiBvYmplY3QsIHRvIGJlIHVzZWQgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBzdHJlYW1zIHRoYXQKICAgIHdvbid0IGZpdCBpbnRvIG1lbW9yeSBhdCBvbmNlLgogCi0gICBUaGUgKndiaXRzKiBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIHdpbmRvdyBidWZmZXIuCisgICBUaGUgKndiaXRzKiBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyIChvciB0aGUKKyAgICJ3aW5kb3cgc2l6ZSIpLCBhbmQgd2hhdCBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0IGlzIGV4cGVjdGVkLiAgSXQgaGFzCisgICB0aGUgc2FtZSBtZWFuaW5nIGFzIGBkZXNjcmliZWQgZm9yIGRlY29tcHJlc3MoKSA8I2RlY29tcHJlc3Mtd2JpdHM+YF9fLgogCiAgICBUaGUgKnpkaWN0KiBwYXJhbWV0ZXIgc3BlY2lmaWVzIGEgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LiBJZgogICAgcHJvdmlkZWQsIHRoaXMgbXVzdCBiZSB0aGUgc2FtZSBkaWN0aW9uYXJ5IGFzIHdhcyB1c2VkIGJ5IHRoZSBjb21wcmVzc29yIHRoYXQKZGlmZiAtLWdpdCBhL0RvYy9saWNlbnNlLnJzdCBiL0RvYy9saWNlbnNlLnJzdAppbmRleCA4YTYxM2IyLi44ODQzMTE2IDEwMDY0NAotLS0gYS9Eb2MvbGljZW5zZS5yc3QKKysrIGIvRG9jL2xpY2Vuc2UucnN0CkBAIC0xMSwxMiArMTEsMTIgQEAKID09PT09PT09PT09PT09PT09PT09PT09CiAKIFB5dGhvbiB3YXMgY3JlYXRlZCBpbiB0aGUgZWFybHkgMTk5MHMgYnkgR3VpZG8gdmFuIFJvc3N1bSBhdCBTdGljaHRpbmcKLU1hdGhlbWF0aXNjaCBDZW50cnVtIChDV0ksIHNlZSBodHRwOi8vd3d3LmN3aS5ubC8pIGluIHRoZSBOZXRoZXJsYW5kcyBhcyBhCitNYXRoZW1hdGlzY2ggQ2VudHJ1bSAoQ1dJLCBzZWUgaHR0cHM6Ly93d3cuY3dpLm5sLykgaW4gdGhlIE5ldGhlcmxhbmRzIGFzIGEKIHN1Y2Nlc3NvciBvZiBhIGxhbmd1YWdlIGNhbGxlZCBBQkMuICBHdWlkbyByZW1haW5zIFB5dGhvbidzIHByaW5jaXBhbCBhdXRob3IsCiBhbHRob3VnaCBpdCBpbmNsdWRlcyBtYW55IGNvbnRyaWJ1dGlvbnMgZnJvbSBvdGhlcnMuCiAKIEluIDE5OTUsIEd1aWRvIGNvbnRpbnVlZCBoaXMgd29yayBvbiBQeXRob24gYXQgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbAotUmVzZWFyY2ggSW5pdGlhdGl2ZXMgKENOUkksIHNlZSBodHRwOi8vd3d3LmNucmkucmVzdG9uLnZhLnVzLykgaW4gUmVzdG9uLAorUmVzZWFyY2ggSW5pdGlhdGl2ZXMgKENOUkksIHNlZSBodHRwczovL3d3dy5jbnJpLnJlc3Rvbi52YS51cy8pIGluIFJlc3RvbiwKIFZpcmdpbmlhIHdoZXJlIGhlIHJlbGVhc2VkIHNldmVyYWwgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlLgogCiBJbiBNYXkgMjAwMCwgR3VpZG8gYW5kIHRoZSBQeXRob24gY29yZSBkZXZlbG9wbWVudCB0ZWFtIG1vdmVkIHRvIEJlT3Blbi5jb20gdG8KQEAgLTI3LDcgKzI3LDcgQEAKIHNwZWNpZmljYWxseSB0byBvd24gUHl0aG9uLXJlbGF0ZWQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LiAgWm9wZSBDb3Jwb3JhdGlvbiBpcyBhCiBzcG9uc29yaW5nIG1lbWJlciBvZiB0aGUgUFNGLgogCi1BbGwgUHl0aG9uIHJlbGVhc2VzIGFyZSBPcGVuIFNvdXJjZSAoc2VlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy8gZm9yIHRoZSBPcGVuCitBbGwgUHl0aG9uIHJlbGVhc2VzIGFyZSBPcGVuIFNvdXJjZSAoc2VlIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvIGZvciB0aGUgT3BlbgogU291cmNlIERlZmluaXRpb24pLiBIaXN0b3JpY2FsbHksIG1vc3QsIGJ1dCBub3QgYWxsLCBQeXRob24gcmVsZWFzZXMgaGF2ZSBhbHNvCiBiZWVuIEdQTC1jb21wYXRpYmxlOyB0aGUgdGFibGUgYmVsb3cgc3VtbWFyaXplcyB0aGUgdmFyaW91cyByZWxlYXNlcy4KIApAQCAtNzMsMTgxICs3MywxODkgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKLS4uIGNlbnRlcmVkOjogUFNGIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gfHJlbGVhc2V8CitQU0YgTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiB8cmVsZWFzZXwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uICgiUFNGIiksIGFuZAotICAgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24KLSAgIHxyZWxlYXNlfCBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisuLiBwYXJzZWQtbGl0ZXJhbDo6CiAKLSMuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFBTRiBoZXJlYnkKLSAgIGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLAotICAgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLAotICAgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIHxyZWxlYXNlfCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZQotICAgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgUFNGJ3MgTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRidzIG5vdGljZSBvZgotICAgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IMKpIDIwMDEtMjAxNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjsgQWxsIFJpZ2h0cwotICAgUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gfHJlbGVhc2V8IGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24KLSAgIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgorICAgMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiAoIlBTRiIpLCBhbmQKKyAgICAgIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcgUHl0aG9uCisgICAgICB8cmVsZWFzZXwgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgogCi0jLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbiBvcgotICAgaW5jb3Jwb3JhdGVzIFB5dGhvbiB8cmVsZWFzZXwgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UgdGhlCi0gICBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4gTGljZW5zZWUgaGVyZWJ5Ci0gICBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbgotICAgfHJlbGVhc2V8LgorICAgMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUFNGIGhlcmVieQorICAgICAgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsCisgICAgICBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsCisgICAgICBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gfHJlbGVhc2V8IGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlCisgICAgICB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBQU0YncyBMaWNlbnNlIEFncmVlbWVudCBhbmQgUFNGJ3Mgbm90aWNlIG9mCisgICAgICBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgwqkgMjAwMS0yMDE2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzCisgICAgICBSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiB8cmVsZWFzZXwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbgorICAgICAgcHJlcGFyZWQgYnkgTGljZW5zZWUuCiAKLSMuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIHxyZWxlYXNlfCBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIiBiYXNpcy4KLSAgIFBTRiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELiAgQlkgV0FZIE9GCi0gICBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUgotICAgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUKLSAgIFVTRSBPRiBQWVRIT04gfHJlbGVhc2V8IFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisgICAzLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbiBvcgorICAgICAgaW5jb3Jwb3JhdGVzIFB5dGhvbiB8cmVsZWFzZXwgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UgdGhlCisgICAgICBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4gTGljZW5zZWUgaGVyZWJ5CisgICAgICBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbgorICAgICAgfHJlbGVhc2V8LgogCi0jLiBQU0YgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OIHxyZWxlYXNlfAotICAgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUyBBIFJFU1VMVCBPRgotICAgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gfHJlbGVhc2V8LCBPUiBBTlkgREVSSVZBVElWRQotICAgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorICAgNC4gUFNGIGlzIG1ha2luZyBQeXRob24gfHJlbGVhc2V8IGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiIGJhc2lzLgorICAgICAgUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuICBCWSBXQVkgT0YKKyAgICAgIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgUFNGIE1BS0VTIE5PIEFORCBESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SCisgICAgICBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRQorICAgICAgVVNFIE9GIFBZVEhPTiB8cmVsZWFzZXwgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KIAotIy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbCBicmVhY2ggb2YKLSAgIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKyAgIDUuIFBTRiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04gfHJlbGVhc2V8CisgICAgICBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTIEEgUkVTVUxUIE9GCisgICAgICBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiB8cmVsZWFzZXwsIE9SIEFOWSBERVJJVkFUSVZFCisgICAgICBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCiAKLSMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAKLSAgIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBQU0YgYW5kIExpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlCi0gICBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgUFNGIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhCi0gICB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkKLSAgIHRoaXJkIHBhcnR5LgorICAgNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbCBicmVhY2ggb2YKKyAgICAgIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KIAotIy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIHxyZWxlYXNlfCwgTGljZW5zZWUgYWdyZWVzCi0gICB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKyAgIDcuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAKKyAgICAgIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBQU0YgYW5kIExpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlCisgICAgICBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgUFNGIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhCisgICAgICB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkKKyAgICAgIHRoaXJkIHBhcnR5LgorCisgICA4LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24gfHJlbGVhc2V8LCBMaWNlbnNlZSBhZ3JlZXMKKyAgICAgIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgogCiAKLS4uIGNlbnRlcmVkOjogQkVPUEVOLkNPTSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDIuMAorQkVPUEVOLkNPTSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDIuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCRU9QRU4gUFlUSE9OIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UIFZFUlNJT04gMQorCisuLiBwYXJzZWQtbGl0ZXJhbDo6CisKKyAgIDEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBCZU9wZW4uY29tICgiQmVPcGVuIiksIGhhdmluZyBhbiBvZmZpY2UgYXQKKyAgICAgIDE2MCBTYXJhdG9nYSBBdmVudWUsIFNhbnRhIENsYXJhLCBDQSA5NTA1MSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbgorICAgICAgKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeQorICAgICAgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAoInRoZSBTb2Z0d2FyZSIpLgorCisgICAyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEJlT3BlbiBQeXRob24gTGljZW5zZSBBZ3JlZW1lbnQsCisgICAgICBCZU9wZW4gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlCisgICAgICB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZQorICAgICAgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIHRoZSBTb2Z0d2FyZSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZQorICAgICAgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJlT3BlbiBQeXRob24gTGljZW5zZSBpcyByZXRhaW5lZCBpbiB0aGUKKyAgICAgIFNvZnR3YXJlLCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgorCisgICAzLiBCZU9wZW4gaXMgbWFraW5nIHRoZSBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIiBiYXNpcy4KKyAgICAgIEJFT1BFTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELiAgQlkgV0FZIE9GCisgICAgICBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIEJFT1BFTiBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUgorICAgICAgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUKKyAgICAgIFVTRSBPRiBUSEUgU09GVFdBUkUgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworICAgNC4gQkVPUEVOIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFRIRSBTT0ZUV0FSRSBGT1IKKyAgICAgIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUyBBIFJFU1VMVCBPRiBVU0lORywKKyAgICAgIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFLCBPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGCisgICAgICBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCisgICA1LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsIGJyZWFjaCBvZgorICAgICAgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCisgICA2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwgcmVzcGVjdHMKKyAgICAgIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4KKyAgICAgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YKKyAgICAgIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBCZU9wZW4gYW5kIExpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlCisgICAgICBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgQmVPcGVuIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgaW4gYQorICAgICAgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55CisgICAgICB0aGlyZCBwYXJ0eS4gIEFzIGFuIGV4Y2VwdGlvbiwgdGhlICJCZU9wZW4gUHl0aG9uIiBsb2dvcyBhdmFpbGFibGUgYXQKKyAgICAgIGh0dHA6Ly93d3cucHl0aG9ubGFicy5jb20vbG9nb3MuaHRtbCBtYXkgYmUgdXNlZCBhY2NvcmRpbmcgdG8gdGhlIHBlcm1pc3Npb25zCisgICAgICBncmFudGVkIG9uIHRoYXQgd2ViIHBhZ2UuCisKKyAgIDcuIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIHRoZSBzb2Z0d2FyZSwgTGljZW5zZWUgYWdyZWVzIHRvIGJlCisgICAgICBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KIAogCi0uLiBjZW50ZXJlZDo6IEJFT1BFTiBQWVRIT04gT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JFRU1FTlQgVkVSU0lPTiAxCitDTlJJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gQmVPcGVuLmNvbSAoIkJlT3BlbiIpLCBoYXZpbmcgYW4gb2ZmaWNlIGF0Ci0gICAxNjAgU2FyYXRvZ2EgQXZlbnVlLCBTYW50YSBDbGFyYSwgQ0EgOTUwNTEsIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24KLSAgICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyB0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkKLSAgIGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gKCJ0aGUgU29mdHdhcmUiKS4KKy4uIHBhcnNlZC1saXRlcmFsOjoKIAotIy4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgQWdyZWVtZW50LAotICAgQmVPcGVuIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZQotICAgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUKLSAgIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUKLSAgIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoZSBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgaXMgcmV0YWluZWQgaW4gdGhlCi0gICBTb2Z0d2FyZSwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KKyAgIDEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoCisgICAgICBJbml0aWF0aXZlcywgaGF2aW5nIGFuIG9mZmljZSBhdCAxODk1IFByZXN0b24gV2hpdGUgRHJpdmUsIFJlc3RvbiwgVkEgMjAxOTEKKyAgICAgICgiQ05SSSIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kCisgICAgICBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNi4xIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzCisgICAgICBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCiAKLSMuIEJlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiIGJhc2lzLgotICAgQkVPUEVOIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuICBCWSBXQVkgT0YKLSAgIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORCBESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SCi0gICBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRQotICAgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorICAgMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgQ05SSSBoZXJlYnkKKyAgICAgIGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLAorICAgICAgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLAorICAgICAgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNi4xIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sCisgICAgICBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBDTlJJJ3MgTGljZW5zZSBBZ3JlZW1lbnQgYW5kIENOUkkncyBub3RpY2Ugb2YgY29weXJpZ2h0LAorICAgICAgaS5lLiwgIkNvcHlyaWdodCDCqSAxOTk1LTIwMDEgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzOyBBbGwKKyAgICAgIFJpZ2h0cyBSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiAxLjYuMSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uCisgICAgICBwcmVwYXJlZCBieSBMaWNlbnNlZS4gIEFsdGVybmF0ZWx5LCBpbiBsaWV1IG9mIENOUkkncyBMaWNlbnNlIEFncmVlbWVudCwKKyAgICAgIExpY2Vuc2VlIG1heSBzdWJzdGl0dXRlIHRoZSBmb2xsb3dpbmcgdGV4dCAob21pdHRpbmcgdGhlIHF1b3Rlcyk6ICJQeXRob24gMS42LjEKKyAgICAgIGlzIG1hZGUgYXZhaWxhYmxlIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGluIENOUkkncyBMaWNlbnNlCisgICAgICBBZ3JlZW1lbnQuICBUaGlzIEFncmVlbWVudCB0b2dldGhlciB3aXRoIFB5dGhvbiAxLjYuMSBtYXkgYmUgbG9jYXRlZCBvbiB0aGUKKyAgICAgIEludGVybmV0IHVzaW5nIHRoZSBmb2xsb3dpbmcgdW5pcXVlLCBwZXJzaXN0ZW50IGlkZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKToKKyAgICAgIDE4OTUuMjIvMTAxMy4gIFRoaXMgQWdyZWVtZW50IG1heSBhbHNvIGJlIG9idGFpbmVkIGZyb20gYSBwcm94eSBzZXJ2ZXIgb24gdGhlCisgICAgICBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2hkbC5oYW5kbGUubmV0LzE4OTUuMjIvMTAxMy4iCiAKLSMuIEJFT1BFTiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBUSEUgU09GVFdBUkUgRk9SCi0gICBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQSBSRVNVTFQgT0YgVVNJTkcsCi0gICBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRgotICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKyAgIDMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uIG9yCisgICAgICBpbmNvcnBvcmF0ZXMgUHl0aG9uIDEuNi4xIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlIHRoZSBkZXJpdmF0aXZlCisgICAgICB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuIExpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8KKyAgICAgIGluY2x1ZGUgaW4gYW55IHN1Y2ggd29yayBhIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24gMS42LjEuCiAKLSMuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwgYnJlYWNoIG9mCi0gICBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisgICA0LiBDTlJJIGlzIG1ha2luZyBQeXRob24gMS42LjEgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIgYmFzaXMuICBDTlJJCisgICAgICBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsCisgICAgICBCVVQgTk9UIExJTUlUQVRJT04sIENOUkkgTUFLRVMgTk8gQU5EIERJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkKKyAgICAgIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRgorICAgICAgUFlUSE9OIDEuNi4xIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCiAKLSMuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGludGVycHJldGVkIGluIGFsbCByZXNwZWN0cwotICAgYnkgdGhlIGxhdyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjbHVkaW5nIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLgotICAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZgotICAgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIEJlT3BlbiBhbmQgTGljZW5zZWUuICBUaGlzIExpY2Vuc2UKLSAgIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhCi0gICB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkKLSAgIHRoaXJkIHBhcnR5LiAgQXMgYW4gZXhjZXB0aW9uLCB0aGUgIkJlT3BlbiBQeXRob24iIGxvZ29zIGF2YWlsYWJsZSBhdAotICAgaHR0cDovL3d3dy5weXRob25sYWJzLmNvbS9sb2dvcy5odG1sIG1heSBiZSB1c2VkIGFjY29yZGluZyB0byB0aGUgcGVybWlzc2lvbnMKLSAgIGdyYW50ZWQgb24gdGhhdCB3ZWIgcGFnZS4KKyAgIDUuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OIDEuNi4xIEZPUgorICAgICAgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTIEEgUkVTVUxUIE9GCisgICAgICBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiAxLjYuMSwgT1IgQU5ZIERFUklWQVRJVkUKKyAgICAgIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KIAotIy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUKLSAgIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorICAgNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbCBicmVhY2ggb2YKKyAgICAgIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworICAgNy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgZmVkZXJhbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkKKyAgICAgIGxhdyBvZiB0aGUgVW5pdGVkIFN0YXRlcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgZmVkZXJhbCBjb3B5cmlnaHQKKyAgICAgIGxhdywgYW5kLCB0byB0aGUgZXh0ZW50IHN1Y2ggVS5TLiBmZWRlcmFsIGxhdyBkb2VzIG5vdCBhcHBseSwgYnkgdGhlIGxhdyBvZiB0aGUKKyAgICAgIENvbW1vbndlYWx0aCBvZiBWaXJnaW5pYSwgZXhjbHVkaW5nIFZpcmdpbmlhJ3MgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgd2l0aCByZWdhcmQgdG8gZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiBQeXRob24KKyAgICAgIDEuNi4xIHRoYXQgaW5jb3Jwb3JhdGUgbm9uLXNlcGFyYWJsZSBtYXRlcmlhbCB0aGF0IHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkCisgICAgICB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHRoZSBsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZgorICAgICAgVmlyZ2luaWEgc2hhbGwgZ292ZXJuIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgb25seSBhcyB0byBpc3N1ZXMgYXJpc2luZyB1bmRlciBvcgorICAgICAgd2l0aCByZXNwZWN0IHRvIFBhcmFncmFwaHMgNCwgNSwgYW5kIDcgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gIE5vdGhpbmcgaW4KKyAgICAgIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwKKyAgICAgIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQ05SSSBhbmQgTGljZW5zZWUuICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50CisgICAgICBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBDTlJJIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyaworICAgICAgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQKKyAgICAgIHBhcnR5LgorCisgICA4LiBCeSBjbGlja2luZyBvbiB0aGUgIkFDQ0VQVCIgYnV0dG9uIHdoZXJlIGluZGljYXRlZCwgb3IgYnkgY29weWluZywgaW5zdGFsbGluZworICAgICAgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSwgTGljZW5zZWUgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQKKyAgICAgIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KIAogCi0uLiBjZW50ZXJlZDo6IENOUkkgTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAxLjYuMQorQ1dJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMC45LjAgVEhST1VHSCAxLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoCi0gICBJbml0aWF0aXZlcywgaGF2aW5nIGFuIG9mZmljZSBhdCAxODk1IFByZXN0b24gV2hpdGUgRHJpdmUsIFJlc3RvbiwgVkEgMjAxOTEKLSAgICgiQ05SSSIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kCi0gICBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNi4xIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzCi0gICBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisuLiBwYXJzZWQtbGl0ZXJhbDo6CiAKLSMuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIENOUkkgaGVyZWJ5Ci0gICBncmFudHMgTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwKLSAgIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywKLSAgIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbiAxLjYuMSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLAotICAgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgQ05SSSdzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBDTlJJJ3Mgbm90aWNlIG9mIGNvcHlyaWdodCwKLSAgIGkuZS4sICJDb3B5cmlnaHQgwqkgMTk5NS0yMDAxIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlczsgQWxsCi0gICBSaWdodHMgUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gMS42LjEgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbgotICAgcHJlcGFyZWQgYnkgTGljZW5zZWUuICBBbHRlcm5hdGVseSwgaW4gbGlldSBvZiBDTlJJJ3MgTGljZW5zZSBBZ3JlZW1lbnQsCi0gICBMaWNlbnNlZSBtYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZSBxdW90ZXMpOiAiUHl0aG9uIDEuNi4xCi0gICBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiBDTlJJJ3MgTGljZW5zZQotICAgQWdyZWVtZW50LiAgVGhpcyBBZ3JlZW1lbnQgdG9nZXRoZXIgd2l0aCBQeXRob24gMS42LjEgbWF5IGJlIGxvY2F0ZWQgb24gdGhlCi0gICBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIHVuaXF1ZSwgcGVyc2lzdGVudCBpZGVudGlmaWVyIChrbm93biBhcyBhIGhhbmRsZSk6Ci0gICAxODk1LjIyLzEwMTMuICBUaGlzIEFncmVlbWVudCBtYXkgYWxzbyBiZSBvYnRhaW5lZCBmcm9tIGEgcHJveHkgc2VydmVyIG9uIHRoZQotICAgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZyBVUkw6IGh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1LjIyLzEwMTMuIgorICAgQ29weXJpZ2h0IMKpIDE5OTEgLSAxOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gQW1zdGVyZGFtLCBUaGUKKyAgIE5ldGhlcmxhbmRzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotIy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24gb3IKLSAgIGluY29ycG9yYXRlcyBQeXRob24gMS42LjEgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UgdGhlIGRlcml2YXRpdmUKLSAgIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4gTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0bwotICAgaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbiAxLjYuMS4KKyAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICAgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisgICB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0CisgICBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKKyAgIHRoZSBuYW1lIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAgIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbgorICAgcHJpb3IgcGVybWlzc2lvbi4KIAotIy4gQ05SSSBpcyBtYWtpbmcgUHl0aG9uIDEuNi4xIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiIGJhc2lzLiAgQ05SSQotICAgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLAotICAgQlVUIE5PVCBMSU1JVEFUSU9OLCBDTlJJIE1BS0VTIE5PIEFORCBESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZCi0gICBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YKLSAgIFBZVEhPTiAxLjYuMSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgotCi0jLiBDTlJJIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTiAxLjYuMSBGT1IKLSAgIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUyBBIFJFU1VMVCBPRgotICAgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMS42LjEsIE9SIEFOWSBERVJJVkFUSVZFCi0gICBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCi0KLSMuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwgYnJlYWNoIG9mCi0gICBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCi0KLSMuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGZlZGVyYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5Ci0gICBsYXcgb2YgdGhlIFVuaXRlZCBTdGF0ZXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIGZlZGVyYWwgY29weXJpZ2h0Ci0gICBsYXcsIGFuZCwgdG8gdGhlIGV4dGVudCBzdWNoIFUuUy4gZmVkZXJhbCBsYXcgZG9lcyBub3QgYXBwbHksIGJ5IHRoZSBsYXcgb2YgdGhlCi0gICBDb21tb253ZWFsdGggb2YgVmlyZ2luaWEsIGV4Y2x1ZGluZyBWaXJnaW5pYSdzIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLgotICAgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdpdGggcmVnYXJkIHRvIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gUHl0aG9uCi0gICAxLjYuMSB0aGF0IGluY29ycG9yYXRlIG5vbi1zZXBhcmFibGUgbWF0ZXJpYWwgdGhhdCB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZAotICAgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB0aGUgbGF3IG9mIHRoZSBDb21tb253ZWFsdGggb2YKLSAgIFZpcmdpbmlhIHNoYWxsIGdvdmVybiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IG9ubHkgYXMgdG8gaXNzdWVzIGFyaXNpbmcgdW5kZXIgb3IKLSAgIHdpdGggcmVzcGVjdCB0byBQYXJhZ3JhcGhzIDQsIDUsIGFuZCA3IG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuICBOb3RoaW5nIGluCi0gICB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksCi0gICBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIENOUkkgYW5kIExpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlIEFncmVlbWVudAotICAgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgQ05SSSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsKLSAgIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkCi0gICBwYXJ0eS4KLQotIy4gQnkgY2xpY2tpbmcgb24gdGhlICJBQ0NFUFQiIGJ1dHRvbiB3aGVyZSBpbmRpY2F0ZWQsIG9yIGJ5IGNvcHlpbmcsIGluc3RhbGxpbmcKLSAgIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEsIExpY2Vuc2VlIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kCi0gICBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCi0KLQotLi4gY2VudGVyZWQ6OiBBQ0NFUFQKLQotCi0uLiBjZW50ZXJlZDo6IENXSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDAuOS4wIFRIUk9VR0ggMS4yCi0KLUNvcHlyaWdodCDCqSAxOTkxIC0gMTk5NSwgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtIEFtc3RlcmRhbSwgVGhlCi1OZXRoZXJsYW5kcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0Ci10aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0Ci1ub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKLXRoZSBuYW1lIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLXB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbgotcHJpb3IgcGVybWlzc2lvbi4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTCi1TT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTwotRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUCi1PUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKLURBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKLUFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwotU09GVFdBUkUuCisgICBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMKKyAgIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisgICBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QKKyAgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorICAgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICAgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgICBTT0ZUV0FSRS4KIAogCiBMaWNlbnNlcyBhbmQgQWNrbm93bGVkZ2VtZW50cyBmb3IgSW5jb3Jwb3JhdGVkIFNvZnR3YXJlCkBAIC0zMjksMTQgKzMzNywxNCBAQAogICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gICBHQUlfQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCiAgICBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAgIEZPUiBHQUlfQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICAgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKICAgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCiAgICBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBHQUlfQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gR0FJX0FOWSBXQVkKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiAgICBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgICBTVUNIIERBTUFHRS4KIApAQCAtOTQ2LDUgKzk1NCwzIEBACiAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiAgICBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgICBTVUNIIERBTUFHRS4KLQotCmRpZmYgLS1naXQgYS9Eb2MvbWFrZS5iYXQgYi9Eb2MvbWFrZS5iYXQKaW5kZXggMjUxZjgyMi4uNWFiODA4NSAxMDA2NDQKLS0tIGEvRG9jL21ha2UuYmF0CisrKyBiL0RvYy9tYWtlLmJhdApAQCAtOCw5ICs4LDIzIEBACiBpZiAiJVNQSElOWEJVSUxEJSIgRVFVICIiIHNldCBTUEhJTlhCVUlMRD1zcGhpbngtYnVpbGQNCiBpZiAiJVBZVEhPTiUiIEVRVSAiIiBzZXQgUFlUSE9OPXB5DQogDQotaWYgREVGSU5FRCBQcm9ncmFtRmlsZXMoeDg2KSBzZXQgX1BSR01GTFM9JVByb2dyYW1GaWxlcyh4ODYpJQ0KLWlmIE5PVCBERUZJTkVEIFByb2dyYW1GaWxlcyh4ODYpIHNldCBfUFJHTUZMUz0lUHJvZ3JhbUZpbGVzJQ0KLWlmICIlSFRNTEhFTFAlIiBFUVUgIiIgc2V0IEhUTUxIRUxQPSVfUFJHTUZMUyVcSFRNTCBIZWxwIFdvcmtzaG9wXGhoYy5leGUNCitpZiAiJTEiIE5FUSAiaHRtbGhlbHAiIGdvdG8gOnNraXBoaGNzZWFyY2gNCitpZiBleGlzdCAiJUhUTUxIRUxQJSIgZ290byA6c2tpcGhoY3NlYXJjaA0KKw0KK3JlbSBTZWFyY2ggZm9yIEhIQyBpbiBsaWtlbHkgcGxhY2VzDQorc2V0IEhUTUxIRUxQPQ0KK3doZXJlIGhoYyAvcSAmJiBzZXQgSFRNTEhFTFA9aGhjICYmIGdvdG8gOnNraXBoaGNzZWFyY2gNCit3aGVyZSAvUiAuLlxleHRlcm5hbHMgaGhjID4gIiVURU1QJVxoaGMubG9jIiAyPiBudWwgJiYgc2V0IC9QIEhUTUxIRUxQPSA8ICIlVEVNUCVcaGhjLmxvYyIgJiBkZWwgIiVURU1QJVxoaGMubG9jIg0KK2lmIG5vdCBleGlzdCAiJUhUTUxIRUxQJSIgd2hlcmUgL1IgIiVQcm9ncmFtRmlsZXMoeDg2KSUiIGhoYyA+ICIlVEVNUCVcaGhjLmxvYyIgMj4gbnVsICYmIHNldCAvUCBIVE1MSEVMUD0gPCAiJVRFTVAlXGhoYy5sb2MiICYgZGVsICIlVEVNUCVcaGhjLmxvYyINCitpZiBub3QgZXhpc3QgIiVIVE1MSEVMUCUiIHdoZXJlIC9SICIlUHJvZ3JhbUZpbGVzJSIgaGhjID4gIiVURU1QJVxoaGMubG9jIiAyPiBudWwgJiYgc2V0IC9QIEhUTUxIRUxQPSA8ICIlVEVNUCVcaGhjLmxvYyIgJiBkZWwgIiVURU1QJVxoaGMubG9jIg0KK2lmIG5vdCBleGlzdCAiJUhUTUxIRUxQJSIgKA0KKyAgICBlY2hvLg0KKyAgICBlY2hvLlRoZSBIVE1MIEhlbHAgV29ya3Nob3Agd2FzIG5vdCBmb3VuZC4gIFNldCB0aGUgSFRNTEhFTFAgdmFyaWFibGUNCisgICAgZWNoby50byB0aGUgcGF0aCB0byBoaGMuZXhlIG9yIGRvd25sb2FkIGFuZCBpbnN0YWxsIGl0IGZyb20NCisgICAgZWNoby5odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2Njk5ODUNCisgICAgZXhpdCAvQiAxDQorKQ0KKzpza2lwaGhjc2VhcmNoDQogDQogaWYgIiVESVNUVkVSU0lPTiUiIEVRVSAiIiBmb3IgL2YgInVzZWJhY2txIiAlJXYgaW4gKGAlUFlUSE9OJSB0b29scy9leHRlbnNpb25zL3BhdGNobGV2ZWwucHlgKSBkbyBzZXQgRElTVFZFUlNJT049JSV2DQogDQpAQCAtMzYsNyArNTAsOCBAQAogICAgIGVjaG8uDQogICAgIGVjaG8uSWYgeW91IGRvbid0IGhhdmUgU3BoaW54IGluc3RhbGxlZCwgZ3JhYiBpdCBmcm9tDQogICAgIGVjaG8uaHR0cDovL3NwaGlueC1kb2Mub3JnLw0KLSAgICBnb3RvIGVuZA0KKyAgICBwb3BkDQorICAgIGV4aXQgL0IgMQ0KICkNCiANCiByZW0gVGFyZ2V0cyB0aGF0IGRvIHJlcXVpcmUgc3BoaW54LWJ1aWxkIGFuZCBoYXZlIHRoZWlyIG93biBsYWJlbA0KQEAgLTc2LDE1ICs5MSw2IEBACiBjbWQgL0MgJVNQSElOWEJVSUxEJSAlU1BISU5YT1BUUyUgLWIlMSAtZGJ1aWxkXGRvY3RyZWVzIC4gJUJVSUxERElSJVwlKg0KIA0KIGlmICIlMSIgRVFVICJodG1saGVscCIgKA0KLSAgICBpZiAgbm90IGV4aXN0ICIlSFRNTEhFTFAlIiAoDQotICAgICAgICBlY2hvLg0KLSAgICAgICAgZWNoby5UaGUgSFRNTCBIZWxwIFdvcmtzaG9wIHdhcyBub3QgZm91bmQuICBTZXQgdGhlIEhUTUxIRUxQIHZhcmlhYmxlDQotICAgICAgICBlY2hvLnRvIHRoZSBwYXRoIHRvIGhoYy5leGUgb3IgZG93bmxvYWQgYW5kIGluc3RhbGwgaXQgZnJvbQ0KLSAgICAgICAgZWNoby5odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2Njk5ODUNCi0gICAgICAgIHJlbSBTZXQgZXJyb3JsZXZlbCB0byAxIGFuZCBleGl0DQotICAgICAgICBjbWQgL0MgZXhpdCAvYiAxDQotICAgICAgICBnb3RvIGVuZA0KLSAgICApDQogICAgIGNtZCAvQyAiJUhUTUxIRUxQJSIgYnVpbGRcaHRtbGhlbHBccHl0aG9uJURJU1RWRVJTSU9OOi49JS5oaHANCiAgICAgcmVtIGhoYy5leGUgc2VlbXMgdG8gYWx3YXlzIGV4aXQgd2l0aCBjb2RlIDEsIHJlc2V0IHRvIDAgZm9yIGxlc3MgdGhhbiAyDQogICAgIGlmIG5vdCBlcnJvcmxldmVsIDIgY21kIC9DIGV4aXQgL2IgMA0KZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKaW5kZXggNWRkMTdlYi4uODhiOTRlYSAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKQEAgLTUxLDYgKzUxLDkgQEAKICAgICAgICAgICAgICAgICA6IHwgYHdpdGhfc3RtdGAKICAgICAgICAgICAgICAgICA6IHwgYGZ1bmNkZWZgCiAgICAgICAgICAgICAgICAgOiB8IGBjbGFzc2RlZmAKKyAgICAgICAgICAgICAgICA6IHwgYGFzeW5jX3dpdGhfc3RtdGAKKyAgICAgICAgICAgICAgICA6IHwgYGFzeW5jX2Zvcl9zdG10YAorICAgICAgICAgICAgICAgIDogfCBgYXN5bmNfZnVuY2RlZmAKICAgIHN1aXRlOiBgc3RtdF9saXN0YCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgYHN0YXRlbWVudGArIERFREVOVAogICAgc3RhdGVtZW50OiBgc3RtdF9saXN0YCBORVdMSU5FIHwgYGNvbXBvdW5kX3N0bXRgCiAgICBzdG10X2xpc3Q6IGBzaW1wbGVfc3RtdGAgKCI7IiBgc2ltcGxlX3N0bXRgKSogWyI7Il0KQEAgLTQzNiw3ICs0MzksNyBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgOnBlcDpgMDM0M2AgLSBUaGUgIndpdGgiIHN0YXRlbWVudAorICAgOnBlcDpgMzQzYCAtIFRoZSAid2l0aCIgc3RhdGVtZW50CiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uIDprZXl3b3JkOmB3aXRoYAogICAgICAgc3RhdGVtZW50LgogCkBAIC00NjYsNyArNDY5LDcgQEAKIC4uIHByb2R1Y3Rpb25saXN0OjoKICAgIGZ1bmNkZWY6IFtgZGVjb3JhdG9yc2BdICJkZWYiIGBmdW5jbmFtZWAgIigiIFtgcGFyYW1ldGVyX2xpc3RgXSAiKSIgWyItPiIgYGV4cHJlc3Npb25gXSAiOiIgYHN1aXRlYAogICAgZGVjb3JhdG9yczogYGRlY29yYXRvcmArCi0gICBkZWNvcmF0b3I6ICJAIiBgZG90dGVkX25hbWVgIFsiKCIgW2BwYXJhbWV0ZXJfbGlzdGAgWyIsIl1dICIpIl0gTkVXTElORQorICAgZGVjb3JhdG9yOiAiQCIgYGRvdHRlZF9uYW1lYCBbIigiIFtgYXJndW1lbnRfbGlzdGAgWyIsIl1dICIpIl0gTkVXTElORQogICAgZG90dGVkX25hbWU6IGBpZGVudGlmaWVyYCAoIi4iIGBpZGVudGlmaWVyYCkqCiAgICBwYXJhbWV0ZXJfbGlzdDogKGBkZWZwYXJhbWV0ZXJgICIsIikqCiAgICAgICAgICAgICAgICAgIDogfCAiKiIgW2BwYXJhbWV0ZXJgXSAoIiwiIGBkZWZwYXJhbWV0ZXJgKSogWyIsIiAiKioiIGBwYXJhbWV0ZXJgXQpAQCAtNTAwLDExICs1MDMsMTMgQEAKICAgIEBmMgogICAgZGVmIGZ1bmMoKTogcGFzcwogCi1pcyBlcXVpdmFsZW50IHRvIDo6CitpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gOjoKIAogICAgZGVmIGZ1bmMoKTogcGFzcwogICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpCiAKK2V4Y2VwdCB0aGF0IHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpcyBub3QgdGVtcG9yYXJpbHkgYm91bmQgdG8gdGhlIG5hbWUgYGBmdW5jYGAuCisKIC4uIGluZGV4OjoKICAgIHRyaXBsZTogZGVmYXVsdDsgcGFyYW1ldGVyOyB2YWx1ZQogICAgc2luZ2xlOiBhcmd1bWVudDsgZnVuY3Rpb24gZGVmaW5pdGlvbgpAQCAtNjAxLDcgKzYwNiw3IEBACiAKIC4uIHByb2R1Y3Rpb25saXN0OjoKICAgIGNsYXNzZGVmOiBbYGRlY29yYXRvcnNgXSAiY2xhc3MiIGBjbGFzc25hbWVgIFtgaW5oZXJpdGFuY2VgXSAiOiIgYHN1aXRlYAotICAgaW5oZXJpdGFuY2U6ICIoIiBbYHBhcmFtZXRlcl9saXN0YF0gIikiCisgICBpbmhlcml0YW5jZTogIigiIFtgYXJndW1lbnRfbGlzdGBdICIpIgogICAgY2xhc3NuYW1lOiBgaWRlbnRpZmllcmAKIAogQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3QgdXN1YWxseQpAQCAtNjM1LDE0ICs2NDAsMTMgQEAKICAgIEBmMgogICAgY2xhc3MgRm9vOiBwYXNzCiAKLWlzIGVxdWl2YWxlbnQgdG8gOjoKK2lzIHJvdWdobHkgZXF1aXZhbGVudCB0byA6OgogCiAgICBjbGFzcyBGb286IHBhc3MKICAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSkKIAogVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBmdW5jdGlvbgotZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlbiBib3VuZCB0byB0aGUgY2xhc3MKLW5hbWUuCitkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBpcyB0aGVuIGJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLgogCiAqKlByb2dyYW1tZXIncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZSBjbGFzcwogYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXMgY2FuIGJlIHNldCBpbiBhCkBAIC02NjAsNiArNjY0LDEzMCBAQAogICAgOnBlcDpgMzEyOWAgLSBDbGFzcyBEZWNvcmF0b3JzCiAKIAorQ29yb3V0aW5lcworPT09PT09PT09PQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworLi4gaW5kZXg6OiBzdGF0ZW1lbnQ6IGFzeW5jIGRlZgorLi4gX2Bhc3luYyBkZWZgOgorCitDb3JvdXRpbmUgZnVuY3Rpb24gZGVmaW5pdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gcHJvZHVjdGlvbmxpc3Q6OgorICAgYXN5bmNfZnVuY2RlZjogW2BkZWNvcmF0b3JzYF0gImFzeW5jIiAiZGVmIiBgZnVuY25hbWVgICIoIiBbYHBhcmFtZXRlcl9saXN0YF0gIikiIFsiLT4iIGBleHByZXNzaW9uYF0gIjoiIGBzdWl0ZWAKKworLi4gaW5kZXg6OgorICAga2V5d29yZDogYXN5bmMKKyAgIGtleXdvcmQ6IGF3YWl0CisKK0V4ZWN1dGlvbiBvZiBQeXRob24gY29yb3V0aW5lcyBjYW4gYmUgc3VzcGVuZGVkIGFuZCByZXN1bWVkIGF0IG1hbnkgcG9pbnRzCisoc2VlIDp0ZXJtOmBjb3JvdXRpbmVgKS4gIEluIHRoZSBib2R5IG9mIGEgY29yb3V0aW5lLCBhbnkgYGBhd2FpdGBgIGFuZAorYGBhc3luY2BgIGlkZW50aWZpZXJzIGJlY29tZSByZXNlcnZlZCBrZXl3b3JkczsgOmtleXdvcmQ6YGF3YWl0YCBleHByZXNzaW9ucywKKzprZXl3b3JkOmBhc3luYyBmb3JgIGFuZCA6a2V5d29yZDpgYXN5bmMgd2l0aGAgY2FuIG9ubHkgYmUgdXNlZCBpbgorY29yb3V0aW5lIGJvZGllcy4KKworRnVuY3Rpb25zIGRlZmluZWQgd2l0aCBgYGFzeW5jIGRlZmBgIHN5bnRheCBhcmUgYWx3YXlzIGNvcm91dGluZSBmdW5jdGlvbnMsCitldmVuIGlmIHRoZXkgZG8gbm90IGNvbnRhaW4gYGBhd2FpdGBgIG9yIGBgYXN5bmNgYCBrZXl3b3Jkcy4KKworSXQgaXMgYSA6ZXhjOmBTeW50YXhFcnJvcmAgdG8gdXNlIDprZXl3b3JkOmB5aWVsZGAgZXhwcmVzc2lvbnMgaW4KK2BgYXN5bmMgZGVmYGAgY29yb3V0aW5lcy4KKworQW4gZXhhbXBsZSBvZiBhIGNvcm91dGluZSBmdW5jdGlvbjo6CisKKyAgICBhc3luYyBkZWYgZnVuYyhwYXJhbTEsIHBhcmFtMik6CisgICAgICAgIGRvX3N0dWZmKCkKKyAgICAgICAgYXdhaXQgc29tZV9jb3JvdXRpbmUoKQorCisKKy4uIGluZGV4Ojogc3RhdGVtZW50OiBhc3luYyBmb3IKKy4uIF9gYXN5bmMgZm9yYDoKKworVGhlIDprZXl3b3JkOmBhc3luYyBmb3JgIHN0YXRlbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBwcm9kdWN0aW9ubGlzdDo6CisgICBhc3luY19mb3Jfc3RtdDogImFzeW5jIiBgZm9yX3N0bXRgCisKK0FuIDp0ZXJtOmBhc3luY2hyb25vdXMgaXRlcmFibGVgIGlzIGFibGUgdG8gY2FsbCBhc3luY2hyb25vdXMgY29kZSBpbiBpdHMKKyppdGVyKiBpbXBsZW1lbnRhdGlvbiwgYW5kIDp0ZXJtOmBhc3luY2hyb25vdXMgaXRlcmF0b3JgIGNhbiBjYWxsIGFzeW5jaHJvbm91cworY29kZSBpbiBpdHMgKm5leHQqIG1ldGhvZC4KKworVGhlIGBgYXN5bmMgZm9yYGAgc3RhdGVtZW50IGFsbG93cyBjb252ZW5pZW50IGl0ZXJhdGlvbiBvdmVyIGFzeW5jaHJvbm91cworaXRlcmF0b3JzLgorCitUaGUgZm9sbG93aW5nIGNvZGU6OgorCisgICAgYXN5bmMgZm9yIFRBUkdFVCBpbiBJVEVSOgorICAgICAgICBCTE9DSworICAgIGVsc2U6CisgICAgICAgIEJMT0NLMgorCitJcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0bzo6CisKKyAgICBpdGVyID0gKElURVIpCisgICAgaXRlciA9IHR5cGUoaXRlcikuX19haXRlcl9fKGl0ZXIpCisgICAgcnVubmluZyA9IFRydWUKKyAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBUQVJHRVQgPSBhd2FpdCB0eXBlKGl0ZXIpLl9fYW5leHRfXyhpdGVyKQorICAgICAgICBleGNlcHQgU3RvcEFzeW5jSXRlcmF0aW9uOgorICAgICAgICAgICAgcnVubmluZyA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBCTE9DSworICAgIGVsc2U6CisgICAgICAgIEJMT0NLMgorCitTZWUgYWxzbyA6bWV0aDpgX19haXRlcl9fYCBhbmQgOm1ldGg6YF9fYW5leHRfX2AgZm9yIGRldGFpbHMuCisKK0l0IGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgIHRvIHVzZSBgYGFzeW5jIGZvcmBgIHN0YXRlbWVudCBvdXRzaWRlIG9mIGFuCis6a2V5d29yZDpgYXN5bmMgZGVmYCBmdW5jdGlvbi4KKworCisuLiBpbmRleDo6IHN0YXRlbWVudDogYXN5bmMgd2l0aAorLi4gX2Bhc3luYyB3aXRoYDoKKworVGhlIDprZXl3b3JkOmBhc3luYyB3aXRoYCBzdGF0ZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHByb2R1Y3Rpb25saXN0OjoKKyAgIGFzeW5jX3dpdGhfc3RtdDogImFzeW5jIiBgd2l0aF9zdG10YAorCitBbiA6dGVybTpgYXN5bmNocm9ub3VzIGNvbnRleHQgbWFuYWdlcmAgaXMgYSA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCB0aGF0IGlzCithYmxlIHRvIHN1c3BlbmQgZXhlY3V0aW9uIGluIGl0cyAqZW50ZXIqIGFuZCAqZXhpdCogbWV0aG9kcy4KKworVGhlIGZvbGxvd2luZyBjb2RlOjoKKworICAgIGFzeW5jIHdpdGggRVhQUiBhcyBWQVI6CisgICAgICAgIEJMT0NLCisKK0lzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvOjoKKworICAgIG1nciA9IChFWFBSKQorICAgIGFleGl0ID0gdHlwZShtZ3IpLl9fYWV4aXRfXworICAgIGFlbnRlciA9IHR5cGUobWdyKS5fX2FlbnRlcl9fKG1ncikKKyAgICBleGMgPSBUcnVlCisKKyAgICBWQVIgPSBhd2FpdCBhZW50ZXIKKyAgICB0cnk6CisgICAgICAgIEJMT0NLCisgICAgZXhjZXB0OgorICAgICAgICBpZiBub3QgYXdhaXQgYWV4aXQobWdyLCAqc3lzLmV4Y19pbmZvKCkpOgorICAgICAgICAgICAgcmFpc2UKKyAgICBlbHNlOgorICAgICAgICBhd2FpdCBhZXhpdChtZ3IsIE5vbmUsIE5vbmUsIE5vbmUpCisKK1NlZSBhbHNvIDptZXRoOmBfX2FlbnRlcl9fYCBhbmQgOm1ldGg6YF9fYWV4aXRfX2AgZm9yIGRldGFpbHMuCisKK0l0IGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgIHRvIHVzZSBgYGFzeW5jIHdpdGhgYCBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBhbgorOmtleXdvcmQ6YGFzeW5jIGRlZmAgZnVuY3Rpb24uCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0OTJgIC0gQ29yb3V0aW5lcyB3aXRoIGFzeW5jIGFuZCBhd2FpdCBzeW50YXgKKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3MKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdAppbmRleCAxNTYwYWQwLi5mOTdlYjA4IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CkBAIC00NTQsNiArNDU0LDE5IEBACiAKICAgICAgIC4uIHRhYnVsYXJjb2x1bW5zOjogfGx8THxsfAogCisgICAgICAuLiBpbmRleDo6CisgICAgICAgICBzaW5nbGU6IF9fZG9jX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogX19uYW1lX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogX19tb2R1bGVfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBfX2RpY3RfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBfX2RlZmF1bHRzX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogX19jbG9zdXJlX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogX19jb2RlX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogX19nbG9iYWxzX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogX19hbm5vdGF0aW9uc19fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IF9fa3dkZWZhdWx0c19fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCisgICAgICAgICBwYWlyOiBnbG9iYWw7IG5hbWVzcGFjZQorCiAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwogICAgICAgfCBBdHRyaWJ1dGUgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKICAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT0rCkBAIC00NjIsMTAgKzQ3NSwxMSBAQAogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlOyBub3QgaW5oZXJpdGVkIGJ5IHwgICAgICAgICAgIHwKICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdWJjbGFzc2VzICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8CiAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwotICAgICAgfCA6YXR0cjpgX19uYW1lX19gICAgICAgICB8IFRoZSBmdW5jdGlvbidzIG5hbWUgICAgICAgICAgIHwgV3JpdGFibGUgIHwKKyAgICAgIHwgOmF0dHI6YH5kZWZpbml0aW9uLlwgICAgfCBUaGUgZnVuY3Rpb24ncyBuYW1lICAgICAgICAgICB8IFdyaXRhYmxlICB8CisgICAgICB8IF9fbmFtZV9fYCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKLSAgICAgIHwgOmF0dHI6YF9fcXVhbG5hbWVfX2AgICAgfCBUaGUgZnVuY3Rpb24ncyAgICAgICAgICAgICAgICB8IFdyaXRhYmxlICB8Ci0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOnRlcm06YHF1YWxpZmllZCBuYW1lYCAgICAgICAgfCAgICAgICAgICAgfAorICAgICAgfCA6YXR0cjpgfmRlZmluaXRpb24uXCAgICB8IFRoZSBmdW5jdGlvbidzICAgICAgICAgICAgICAgIHwgV3JpdGFibGUgIHwKKyAgICAgIHwgX19xdWFsbmFtZV9fYCAgICAgICAgICAgfCA6dGVybTpgcXVhbGlmaWVkIG5hbWVgICAgICAgICB8ICAgICAgICAgICB8CiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IC4uIHZlcnNpb25hZGRlZDo6IDMuMyAgICAgICAgIHwgICAgICAgICAgIHwKICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rCkBAIC00ODksNyArNTAzLDcgQEAKICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBtb2R1bGUgaW4gd2hpY2ggdGhlIGZ1bmN0aW9uICB8ICAgICAgICAgICB8CiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2FzIGRlZmluZWQuICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKLSAgICAgIHwgOmF0dHI6YF9fZGljdF9fYCAgICAgICAgfCBUaGUgbmFtZXNwYWNlIHN1cHBvcnRpbmcgICAgICB8IFdyaXRhYmxlICB8CisgICAgICB8IDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgfCBXcml0YWJsZSAgfAogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyYml0cmFyeSBmdW5jdGlvbiAgICAgICAgICAgIHwgICAgICAgICAgIHwKICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBhdHRyaWJ1dGVzLiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8CiAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwpAQCAtNTE5LDE5ICs1MzMsNiBAQAogICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBjYW4gYmUgcmV0cmlldmVkIGZyb20gaXRzCiAgICAgICBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbCB0eXBlcyBiZWxvdy4KIAotICAgICAgLi4gaW5kZXg6OgotICAgICAgICAgc2luZ2xlOiBfX2RvY19fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IF9fbW9kdWxlX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogX19kaWN0X18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogX19kZWZhdWx0c19fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IF9fY2xvc3VyZV9fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IF9fY29kZV9fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IF9fZ2xvYmFsc19fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IF9fYW5ub3RhdGlvbnNfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBfX2t3ZGVmYXVsdHNfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQotICAgICAgICAgcGFpcjogZ2xvYmFsOyBuYW1lc3BhY2UKLQogICAgSW5zdGFuY2UgbWV0aG9kcwogICAgICAgLi4gaW5kZXg6OgogICAgICAgICAgb2JqZWN0OiBtZXRob2QKQEAgLTU1MCw3ICs1NTEsNyBAQAogCiAgICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiA6YXR0cjpgX19zZWxmX19gIGlzIHRoZSBjbGFzcyBpbnN0YW5jZSBvYmplY3QsCiAgICAgICA6YXR0cjpgX19mdW5jX19gIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7IDphdHRyOmBfX2RvY19fYCBpcyB0aGUgbWV0aG9kJ3MKLSAgICAgIGRvY3VtZW50YXRpb24gKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX2RvY19fYGApOyA6YXR0cjpgX19uYW1lX19gIGlzIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyBgYF9fZnVuY19fLl9fZG9jX19gYCk7IDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgaXMgdGhlCiAgICAgICBtZXRob2QgbmFtZSAoc2FtZSBhcyBgYF9fZnVuY19fLl9fbmFtZV9fYGApOyA6YXR0cjpgX19tb2R1bGVfX2AgaXMgdGhlCiAgICAgICBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIG1ldGhvZCB3YXMgZGVmaW5lZCBpbiwgb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuCiAKQEAgLTYxNiw2ICs2MTcsMTYgQEAKICAgICAgIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2YKICAgICAgIHZhbHVlcyB0byBiZSByZXR1cm5lZC4KIAorICAgQ29yb3V0aW5lIGZ1bmN0aW9ucworICAgICAgLi4gaW5kZXg6OgorICAgICAgICAgc2luZ2xlOiBjb3JvdXRpbmU7IGZ1bmN0aW9uCisKKyAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIGlzIGRlZmluZWQgdXNpbmcgOmtleXdvcmQ6YGFzeW5jIGRlZmAgaXMgY2FsbGVkCisgICAgICBhIDpkZm46YGNvcm91dGluZSBmdW5jdGlvbmAuICBTdWNoIGEgZnVuY3Rpb24sIHdoZW4gY2FsbGVkLCByZXR1cm5zIGEKKyAgICAgIDp0ZXJtOmBjb3JvdXRpbmVgIG9iamVjdC4gIEl0IG1heSBjb250YWluIDprZXl3b3JkOmBhd2FpdGAgZXhwcmVzc2lvbnMsCisgICAgICBhcyB3ZWxsIGFzIDprZXl3b3JkOmBhc3luYyB3aXRoYCBhbmQgOmtleXdvcmQ6YGFzeW5jIGZvcmAgc3RhdGVtZW50cy4gU2VlCisgICAgICBhbHNvIHRoZSA6cmVmOmBjb3JvdXRpbmUtb2JqZWN0c2Agc2VjdGlvbi4KKwogICAgQnVpbHQtaW4gZnVuY3Rpb25zCiAgICAgICAuLiBpbmRleDo6CiAgICAgICAgICBvYmplY3Q6IGJ1aWx0LWluIGZ1bmN0aW9uCkBAIC02MjcsNyArNjM4LDcgQEAKICAgICAgIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2YgdGhlIGFyZ3VtZW50cyBhcmUKICAgICAgIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6CiAgICAgICA6YXR0cjpgX19kb2NfX2AgaXMgdGhlIGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmCi0gICAgICB1bmF2YWlsYWJsZTsgOmF0dHI6YF9fbmFtZV9fYCBpcyB0aGUgZnVuY3Rpb24ncyBuYW1lOyA6YXR0cjpgX19zZWxmX19gIGlzCisgICAgICB1bmF2YWlsYWJsZTsgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBpcyB0aGUgZnVuY3Rpb24ncyBuYW1lOyA6YXR0cjpgX19zZWxmX19gIGlzCiAgICAgICBzZXQgdG8gYGBOb25lYGAgKGJ1dCBzZWUgdGhlIG5leHQgaXRlbSk7IDphdHRyOmBfX21vZHVsZV9fYCBpcyB0aGUgbmFtZSBvZgogICAgICAgdGhlIG1vZHVsZSB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4gb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuCiAKQEAgLTY3Nyw3ICs2ODgsNyBAQAogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogX19kaWN0X18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKLSAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogOmF0dHI6YF9fZGljdF9fYCBpcyB0aGUgbW9kdWxlJ3MgbmFtZXNwYWNlIGFzIGEKKyAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGlzIHRoZSBtb2R1bGUncyBuYW1lc3BhY2UgYXMgYQogICAgZGljdGlvbmFyeSBvYmplY3QuCiAKICAgIC4uIGltcGwtZGV0YWlsOjoKQEAgLTczMyw3ICs3NDQsNyBAQAogICAgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgdGhlIHN0YXRpYyBtZXRob2QKICAgIG9iamVjdC4gU2VlIHNlY3Rpb24gOnJlZjpgZGVzY3JpcHRvcnNgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzCiAgICByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heSBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzCi0gICA6YXR0cjpgX19kaWN0X19gLgorICAgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gLgogCiAgICAuLiBpbmRleDo6IHRyaXBsZTogY2xhc3M7IGF0dHJpYnV0ZTsgYXNzaWdubWVudAogCkBAIC03NTEsOCArNzYyLDggQEAKICAgICAgIHNpbmdsZTogX19iYXNlc19fIChjbGFzcyBhdHRyaWJ1dGUpCiAgICAgICBzaW5nbGU6IF9fZG9jX18gKGNsYXNzIGF0dHJpYnV0ZSkKIAotICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiA6YXR0cjpgX19uYW1lX19gIGlzIHRoZSBjbGFzcyBuYW1lOyA6YXR0cjpgX19tb2R1bGVfX2AgaXMKLSAgIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7IDphdHRyOmBfX2RpY3RfX2AgaXMgdGhlCisgICBTcGVjaWFsIGF0dHJpYnV0ZXM6IDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgaXMgdGhlIGNsYXNzIG5hbWU7IDphdHRyOmBfX21vZHVsZV9fYCBpcworICAgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZDsgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGlzIHRoZQogICAgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjbGFzcydzIG5hbWVzcGFjZTsgOmF0dHI6YH5jbGFzcy5fX2Jhc2VzX19gIGlzIGEKICAgIHR1cGxlIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLCBpbiB0aGUKICAgIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDsgOmF0dHI6YF9fZG9jX19gIGlzIHRoZQpAQCAtNzc1LDcgKzc4Niw3IEBACiAgICBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzbyB0cmFuc2Zvcm1lZDsgc2VlIGFib3ZlIHVuZGVyICJDbGFzc2VzIi4gIFNlZQogICAgc2VjdGlvbiA6cmVmOmBkZXNjcmlwdG9yc2AgZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcwogICAgcmV0cmlldmVkIHZpYSBpdHMgaW5zdGFuY2VzIG1heSBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4KLSAgIHRoZSBjbGFzcydzIDphdHRyOmBfX2RpY3RfX2AuICBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQsIGFuZCB0aGUKKyAgIHRoZSBjbGFzcydzIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYC4gIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZQogICAgb2JqZWN0J3MgY2xhc3MgaGFzIGEgOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QsIHRoYXQgaXMgY2FsbGVkIHRvIHNhdGlzZnkKICAgIHRoZSBsb29rdXAuCiAKQEAgLTgzNiwxMSArODQ3LDkgQEAKICAgIGRlZmluaXRpb25zIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLCBidXQgdGhleSBhcmUKICAgIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuCiAKLSAgIENvZGUgb2JqZWN0cwotICAgICAgLi4gaW5kZXg6OgotICAgICAgICAgc2luZ2xlOiBieXRlY29kZQotICAgICAgICAgb2JqZWN0OiBjb2RlCisgICAuLiBpbmRleDo6IGJ5dGVjb2RlLCBvYmplY3Q7IGNvZGUsIGNvZGUgb2JqZWN0CiAKKyAgIENvZGUgb2JqZWN0cwogICAgICAgQ29kZSBvYmplY3RzIHJlcHJlc2VudCAqYnl0ZS1jb21waWxlZCogZXhlY3V0YWJsZSBQeXRob24gY29kZSwgb3IgOnRlcm06YGJ5dGVjb2RlYC4KICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb2RlIG9iamVjdCBhbmQgYSBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24KICAgICAgIG9iamVjdCBjb250YWlucyBhbiBleHBsaWNpdCByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uJ3MgZ2xvYmFscyAodGhlIG1vZHVsZSBpbgpAQCAtMTQ1OCw3ICsxNDY3LDcgQEAKIGRlc2NyaXB0b3IgbXVzdCBiZSBpbiBlaXRoZXIgdGhlIG93bmVyJ3MgY2xhc3MgZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MKIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGUgZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIgogcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpcyB0aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIKLWNsYXNzJyA6YXR0cjpgX19kaWN0X19gLgorY2xhc3MnIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYC4KIAogCiAuLiBtZXRob2Q6OiBvYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpCkBAIC0xNzI0LDYgKzE3MzMsMTEgQEAKIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIChpZiBhbnkpIGFuZCB0aGUgcmVzdWx0aW5nIG9iamVjdCBpcyBib3VuZAogaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyB0aGUgZGVmaW5lZCBjbGFzcy4KIAorV2hlbiBhIG5ldyBjbGFzcyBpcyBjcmVhdGVkIGJ5IGBgdHlwZS5fX25ld19fYGAsIHRoZSBvYmplY3QgcHJvdmlkZWQgYXMgdGhlCituYW1lc3BhY2UgcGFyYW1ldGVyIGlzIGNvcGllZCB0byBhIHN0YW5kYXJkIFB5dGhvbiBkaWN0aW9uYXJ5IGFuZCB0aGUgb3JpZ2luYWwKK29iamVjdCBpcyBkaXNjYXJkZWQuIFRoZSBuZXcgY29weSBiZWNvbWVzIHRoZSA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlCitvZiB0aGUgY2xhc3Mgb2JqZWN0LgorCiAuLiBzZWVhbHNvOjoKIAogICAgOnBlcDpgMzEzNWAgLSBOZXcgc3VwZXIKQEAgLTE3NDMsMTEgKzE3NTcsMTEgQEAKIAogICAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKToKIAotICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6CiAgICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQogCi0gICAgICAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsICoqa3dkcyk6CisgICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiprd2RzKToKICAgICAgICAgICAgIHJlc3VsdCA9IHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KG5hbWVzcGFjZSkpCiAgICAgICAgICAgICByZXN1bHQubWVtYmVycyA9IHR1cGxlKG5hbWVzcGFjZSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKQEAgLTE5OTAsNiArMjAwNCw3IEBACiAuLiBtZXRob2Q6OiBvYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcikKICAgICAgICAgICAgIG9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKQogICAgICAgICAgICAgb2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpCisgICAgICAgICAgICBvYmplY3QuX19tYXRtdWxfXyhzZWxmLCBvdGhlcikKICAgICAgICAgICAgIG9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcikKICAgICAgICAgICAgIG9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpCiAgICAgICAgICAgICBvYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcikKQEAgLTIwMDYsMTUgKzIwMjEsMTYgQEAKICAgICAgIGJ1aWx0aW46IHBvdwogICAgICAgYnVpbHRpbjogcG93CiAKLSAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKGBgK2BgLAotICAgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCwgOmZ1bmM6YGRpdm1vZGAsIDpmdW5jOmBwb3dgLCBgYCoqYGAsIGBgPDxgYCwKLSAgIGBgPj5gYCwgYGAmYGAsIGBgXmBgLCBgYHxgYCkuICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uCi0gICBgYHggKyB5YGAsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuIDptZXRoOmBfX2FkZF9fYAotICAgbWV0aG9kLCBgYHguX19hZGRfXyh5KWBgIGlzIGNhbGxlZC4gIFRoZSA6bWV0aDpgX19kaXZtb2RfX2AgbWV0aG9kIHNob3VsZCBiZSB0aGUKLSAgIGVxdWl2YWxlbnQgdG8gdXNpbmcgOm1ldGg6YF9fZmxvb3JkaXZfX2AgYW5kIDptZXRoOmBfX21vZF9fYDsgaXQgc2hvdWxkIG5vdCBiZQotICAgcmVsYXRlZCB0byA6bWV0aDpgX190cnVlZGl2X19gLiAgTm90ZSB0aGF0IDptZXRoOmBfX3Bvd19fYCBzaG91bGQgYmUgZGVmaW5lZAotICAgdG8gYWNjZXB0IGFuIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluCi0gICA6ZnVuYzpgcG93YCBmdW5jdGlvbiBpcyB0byBiZSBzdXBwb3J0ZWQuCisgICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zCisgICAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGBAYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgLCA6ZnVuYzpgZGl2bW9kYCwKKyAgIDpmdW5jOmBwb3dgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsIGBgfGBgKS4gIEZvciBpbnN0YW5jZSwgdG8KKyAgIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGBgeCArIHlgYCwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdAorICAgaGFzIGFuIDptZXRoOmBfX2FkZF9fYCBtZXRob2QsIGBgeC5fX2FkZF9fKHkpYGAgaXMgY2FsbGVkLiAgVGhlCisgICA6bWV0aDpgX19kaXZtb2RfX2AgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZworICAgOm1ldGg6YF9fZmxvb3JkaXZfX2AgYW5kIDptZXRoOmBfX21vZF9fYDsgaXQgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvCisgICA6bWV0aDpgX190cnVlZGl2X19gLiAgTm90ZSB0aGF0IDptZXRoOmBfX3Bvd19fYCBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQKKyAgIGFuIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluIDpmdW5jOmBwb3dgCisgICBmdW5jdGlvbiBpcyB0byBiZSBzdXBwb3J0ZWQuCiAKICAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZSBzdXBwbGllZAogICAgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYC4KQEAgLTIwMjMsNiArMjAzOSw3IEBACiAuLiBtZXRob2Q6OiBvYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpCiAgICAgICAgICAgICBvYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpCiAgICAgICAgICAgICBvYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpCisgICAgICAgICAgICBvYmplY3QuX19ybWF0bXVsX18oc2VsZiwgb3RoZXIpCiAgICAgICAgICAgICBvYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKQogICAgICAgICAgICAgb2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpCiAgICAgICAgICAgICBvYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpCkBAIC0yMDM4LDE0ICsyMDU1LDE0IEBACiAgICAgICBidWlsdGluOiBkaXZtb2QKICAgICAgIGJ1aWx0aW46IHBvdwogCi0gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChgYCtgYCwKLSAgIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsIDpmdW5jOmBkaXZtb2RgLCA6ZnVuYzpgcG93YCwgYGAqKmBgLAotICAgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCwgYGB8YGApIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy4KLSAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdCBzdXBwb3J0IHRoZQotICAgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLiBbI11fICBGb3IKLSAgIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggLSB5YGAsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZgotICAgYSBjbGFzcyB0aGF0IGhhcyBhbiA6bWV0aDpgX19yc3ViX19gIG1ldGhvZCwgYGB5Ll9fcnN1Yl9fKHgpYGAgaXMgY2FsbGVkIGlmCi0gICBgYHguX19zdWJfXyh5KWBgIHJldHVybnMgKk5vdEltcGxlbWVudGVkKi4KKyAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMKKyAgIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYEBgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsIDpmdW5jOmBkaXZtb2RgLAorICAgOmZ1bmM6YHBvd2AsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCwgYGB8YGApIHdpdGggcmVmbGVjdGVkCisgICAoc3dhcHBlZCkgb3BlcmFuZHMuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZG9lcworICAgbm90IHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGFuZCB0aGUgb3BlcmFuZHMgYXJlIG9mIGRpZmZlcmVudAorICAgdHlwZXMuIFsjXV8gRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggLSB5YGAsIHdoZXJlICp5KiBpcworICAgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiA6bWV0aDpgX19yc3ViX19gIG1ldGhvZCwgYGB5Ll9fcnN1Yl9fKHgpYGAKKyAgIGlzIGNhbGxlZCBpZiBgYHguX19zdWJfXyh5KWBgIHJldHVybnMgKk5vdEltcGxlbWVudGVkKi4KIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBwb3cKIApAQCAtMjA2Myw2ICsyMDgwLDcgQEAKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcikKICAgICAgICAgICAgIG9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcikKICAgICAgICAgICAgIG9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcikKKyAgICAgICAgICAgIG9iamVjdC5fX2ltYXRtdWxfXyhzZWxmLCBvdGhlcikKICAgICAgICAgICAgIG9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpCiAgICAgICAgICAgICBvYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcikKICAgICAgICAgICAgIG9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcikKQEAgLTIwNzQsMTcgKzIwOTIsMTcgQEAKICAgICAgICAgICAgIG9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKQogCiAgICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpYyBhc3NpZ25tZW50cwotICAgKGBgKz1gYCwgYGAtPWBgLCBgYCo9YGAsIGBgLz1gYCwgYGAvLz1gYCwgYGAlPWBgLCBgYCoqPWBgLCBgYDw8PWBgLCBgYD4+PWBgLAotICAgYGAmPWBgLCBgYF49YGAsIGBgfD1gYCkuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZSBvcGVyYXRpb24KLSAgIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoIGNvdWxkIGJlLCBidXQgZG9lcwotICAgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZCBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZAotICAgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWwgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgaWYgKngqIGlzIGFuCi0gICBpbnN0YW5jZSBvZiBhIGNsYXNzIHdpdGggYW4gOm1ldGg6YF9faWFkZF9fYCBtZXRob2QsIGBgeCArPSB5YGAgaXMgZXF1aXZhbGVudAotICAgdG8gYGB4ID0geC5fX2lhZGRfXyh5KWBgIC4gT3RoZXJ3aXNlLCBgYHguX19hZGRfXyh5KWBgIGFuZCBgYHkuX19yYWRkX18oeClgYAotICAgYXJlIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgYGB4ICsgeWBgLiBJbiBjZXJ0YWluIHNpdHVhdGlvbnMsCi0gICBhdWdtZW50ZWQgYXNzaWdubWVudCBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgZXJyb3JzIChzZWUKLSAgIDpyZWY6YGZhcS1hdWdtZW50ZWQtYXNzaWdubWVudC10dXBsZS1lcnJvcmApLCBidXQgdGhpcyBiZWhhdmlvciBpcyBpbgotICAgZmFjdCBwYXJ0IG9mIHRoZSBkYXRhIG1vZGVsLgorICAgKGBgKz1gYCwgYGAtPWBgLCBgYCo9YGAsIGBgQD1gYCwgYGAvPWBgLCBgYC8vPWBgLCBgYCU9YGAsIGBgKio9YGAsIGBgPDw9YGAsCisgICBgYD4+PWBgLCBgYCY9YGAsIGBgXj1gYCwgYGB8PWBgKS4gIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlCisgICBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZCByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2ggY291bGQgYmUsCisgICBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSwgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCB0aGUKKyAgIGF1Z21lbnRlZCBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbCBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCBpZiAqeCoKKyAgIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3Mgd2l0aCBhbiA6bWV0aDpgX19pYWRkX19gIG1ldGhvZCwgYGB4ICs9IHlgYCBpcworICAgZXF1aXZhbGVudCB0byBgYHggPSB4Ll9faWFkZF9fKHkpYGAgLiBPdGhlcndpc2UsIGBgeC5fX2FkZF9fKHkpYGAgYW5kCisgICBgYHkuX19yYWRkX18oeClgYCBhcmUgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgYHggKyB5YGAuIEluCisgICBjZXJ0YWluIHNpdHVhdGlvbnMsIGF1Z21lbnRlZCBhc3NpZ25tZW50IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBlcnJvcnMgKHNlZQorICAgOnJlZjpgZmFxLWF1Z21lbnRlZC1hc3NpZ25tZW50LXR1cGxlLWVycm9yYCksIGJ1dCB0aGlzIGJlaGF2aW9yIGlzIGluIGZhY3QKKyAgIHBhcnQgb2YgdGhlIGRhdGEgbW9kZWwuCiAKIAogLi4gbWV0aG9kOjogb2JqZWN0Ll9fbmVnX18oc2VsZikKQEAgLTIxNzQsNyArMjE5Miw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICA6cGVwOmAwMzQzYCAtIFRoZSAid2l0aCIgc3RhdGVtZW50CisgICA6cGVwOmAzNDNgIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnQKICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gOmtleXdvcmQ6YHdpdGhgCiAgICAgICBzdGF0ZW1lbnQuCiAKQEAgLTIyNTQsNiArMjI3MiwyMDMgQEAKIG9iamVjdCBpdHNlbGYgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS4KIAogCisuLiBpbmRleDo6CisgICBzaW5nbGU6IGNvcm91dGluZQorCitDb3JvdXRpbmVzCis9PT09PT09PT09CisKKworQXdhaXRhYmxlIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIDp0ZXJtOmBhd2FpdGFibGVgIG9iamVjdCBnZW5lcmFsbHkgaW1wbGVtZW50cyBhbiA6bWV0aDpgX19hd2FpdF9fYCBtZXRob2QuCis6dGVybTpgQ29yb3V0aW5lYCBvYmplY3RzIHJldHVybmVkIGZyb20gOmtleXdvcmQ6YGFzeW5jIGRlZmAgZnVuY3Rpb25zCithcmUgYXdhaXRhYmxlLgorCisuLiBub3RlOjoKKworICAgVGhlIDp0ZXJtOmBnZW5lcmF0b3IgaXRlcmF0b3JgIG9iamVjdHMgcmV0dXJuZWQgZnJvbSBnZW5lcmF0b3JzCisgICBkZWNvcmF0ZWQgd2l0aCA6ZnVuYzpgdHlwZXMuY29yb3V0aW5lYCBvciA6ZnVuYzpgYXN5bmNpby5jb3JvdXRpbmVgCisgICBhcmUgYWxzbyBhd2FpdGFibGUsIGJ1dCB0aGV5IGRvIG5vdCBpbXBsZW1lbnQgOm1ldGg6YF9fYXdhaXRfX2AuCisKKy4uIG1ldGhvZDo6IG9iamVjdC5fX2F3YWl0X18oc2VsZikKKworICAgTXVzdCByZXR1cm4gYW4gOnRlcm06YGl0ZXJhdG9yYC4gIFNob3VsZCBiZSB1c2VkIHRvIGltcGxlbWVudAorICAgOnRlcm06YGF3YWl0YWJsZWAgb2JqZWN0cy4gIEZvciBpbnN0YW5jZSwgOmNsYXNzOmBhc3luY2lvLkZ1dHVyZWAgaW1wbGVtZW50cworICAgdGhpcyBtZXRob2QgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSA6a2V5d29yZDpgYXdhaXRgIGV4cHJlc3Npb24uCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisuLiBzZWVhbHNvOjogOnBlcDpgNDkyYCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhd2FpdGFibGUgb2JqZWN0cy4KKworCisuLiBfY29yb3V0aW5lLW9iamVjdHM6CisKK0Nvcm91dGluZSBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLQorCis6dGVybTpgQ29yb3V0aW5lYCBvYmplY3RzIGFyZSA6dGVybTpgYXdhaXRhYmxlYCBvYmplY3RzLgorQSBjb3JvdXRpbmUncyBleGVjdXRpb24gY2FuIGJlIGNvbnRyb2xsZWQgYnkgY2FsbGluZyA6bWV0aDpgX19hd2FpdF9fYCBhbmQKK2l0ZXJhdGluZyBvdmVyIHRoZSByZXN1bHQuICBXaGVuIHRoZSBjb3JvdXRpbmUgaGFzIGZpbmlzaGVkIGV4ZWN1dGluZyBhbmQKK3JldHVybnMsIHRoZSBpdGVyYXRvciByYWlzZXMgOmV4YzpgU3RvcEl0ZXJhdGlvbmAsIGFuZCB0aGUgZXhjZXB0aW9uJ3MKKzphdHRyOmB+U3RvcEl0ZXJhdGlvbi52YWx1ZWAgYXR0cmlidXRlIGhvbGRzIHRoZSByZXR1cm4gdmFsdWUuICBJZiB0aGUKK2Nvcm91dGluZSByYWlzZXMgYW4gZXhjZXB0aW9uLCBpdCBpcyBwcm9wYWdhdGVkIGJ5IHRoZSBpdGVyYXRvci4gIENvcm91dGluZXMKK3Nob3VsZCBub3QgZGlyZWN0bHkgcmFpc2UgdW5oYW5kbGVkIDpleGM6YFN0b3BJdGVyYXRpb25gIGV4Y2VwdGlvbnMuCisKK0Nvcm91dGluZXMgYWxzbyBoYXZlIHRoZSBtZXRob2RzIGxpc3RlZCBiZWxvdywgd2hpY2ggYXJlIGFuYWxvZ291cyB0bwordGhvc2Ugb2YgZ2VuZXJhdG9ycyAoc2VlIDpyZWY6YGdlbmVyYXRvci1tZXRob2RzYCkuICBIb3dldmVyLCB1bmxpa2UKK2dlbmVyYXRvcnMsIGNvcm91dGluZXMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaXRlcmF0aW9uLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNS4yCisgICBJdCBpcyBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgdG8gYXdhaXQgb24gYSBjb3JvdXRpbmUgbW9yZSB0aGFuIG9uY2UuCisKKworLi4gbWV0aG9kOjogY29yb3V0aW5lLnNlbmQodmFsdWUpCisKKyAgIFN0YXJ0cyBvciByZXN1bWVzIGV4ZWN1dGlvbiBvZiB0aGUgY29yb3V0aW5lLiAgSWYgKnZhbHVlKiBpcyBgYE5vbmVgYCwKKyAgIHRoaXMgaXMgZXF1aXZhbGVudCB0byBhZHZhbmNpbmcgdGhlIGl0ZXJhdG9yIHJldHVybmVkIGJ5CisgICA6bWV0aDpgX19hd2FpdF9fYC4gIElmICp2YWx1ZSogaXMgbm90IGBgTm9uZWBgLCB0aGlzIG1ldGhvZCBkZWxlZ2F0ZXMKKyAgIHRvIHRoZSA6bWV0aDpgfmdlbmVyYXRvci5zZW5kYCBtZXRob2Qgb2YgdGhlIGl0ZXJhdG9yIHRoYXQgY2F1c2VkCisgICB0aGUgY29yb3V0aW5lIHRvIHN1c3BlbmQuICBUaGUgcmVzdWx0IChyZXR1cm4gdmFsdWUsCisgICA6ZXhjOmBTdG9wSXRlcmF0aW9uYCwgb3Igb3RoZXIgZXhjZXB0aW9uKSBpcyB0aGUgc2FtZSBhcyB3aGVuCisgICBpdGVyYXRpbmcgb3ZlciB0aGUgOm1ldGg6YF9fYXdhaXRfX2AgcmV0dXJuIHZhbHVlLCBkZXNjcmliZWQgYWJvdmUuCisKKy4uIG1ldGhvZDo6IGNvcm91dGluZS50aHJvdyh0eXBlWywgdmFsdWVbLCB0cmFjZWJhY2tdXSkKKworICAgUmFpc2VzIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIGluIHRoZSBjb3JvdXRpbmUuICBUaGlzIG1ldGhvZCBkZWxlZ2F0ZXMKKyAgIHRvIHRoZSA6bWV0aDpgfmdlbmVyYXRvci50aHJvd2AgbWV0aG9kIG9mIHRoZSBpdGVyYXRvciB0aGF0IGNhdXNlZAorICAgdGhlIGNvcm91dGluZSB0byBzdXNwZW5kLCBpZiBpdCBoYXMgc3VjaCBhIG1ldGhvZC4gIE90aGVyd2lzZSwKKyAgIHRoZSBleGNlcHRpb24gaXMgcmFpc2VkIGF0IHRoZSBzdXNwZW5zaW9uIHBvaW50LiAgVGhlIHJlc3VsdAorICAgKHJldHVybiB2YWx1ZSwgOmV4YzpgU3RvcEl0ZXJhdGlvbmAsIG9yIG90aGVyIGV4Y2VwdGlvbikgaXMgdGhlIHNhbWUgYXMKKyAgIHdoZW4gaXRlcmF0aW5nIG92ZXIgdGhlIDptZXRoOmBfX2F3YWl0X19gIHJldHVybiB2YWx1ZSwgZGVzY3JpYmVkCisgICBhYm92ZS4gIElmIHRoZSBleGNlcHRpb24gaXMgbm90IGNhdWdodCBpbiB0aGUgY29yb3V0aW5lLCBpdCBwcm9wYWdhdGVzCisgICBiYWNrIHRvIHRoZSBjYWxsZXIuCisKKy4uIG1ldGhvZDo6IGNvcm91dGluZS5jbG9zZSgpCisKKyAgIENhdXNlcyB0aGUgY29yb3V0aW5lIHRvIGNsZWFuIGl0c2VsZiB1cCBhbmQgZXhpdC4gIElmIHRoZSBjb3JvdXRpbmUKKyAgIGlzIHN1c3BlbmRlZCwgdGhpcyBtZXRob2QgZmlyc3QgZGVsZWdhdGVzIHRvIHRoZSA6bWV0aDpgfmdlbmVyYXRvci5jbG9zZWAKKyAgIG1ldGhvZCBvZiB0aGUgaXRlcmF0b3IgdGhhdCBjYXVzZWQgdGhlIGNvcm91dGluZSB0byBzdXNwZW5kLCBpZiBpdAorICAgaGFzIHN1Y2ggYSBtZXRob2QuICBUaGVuIGl0IHJhaXNlcyA6ZXhjOmBHZW5lcmF0b3JFeGl0YCBhdCB0aGUKKyAgIHN1c3BlbnNpb24gcG9pbnQsIGNhdXNpbmcgdGhlIGNvcm91dGluZSB0byBpbW1lZGlhdGVseSBjbGVhbiBpdHNlbGYgdXAuCisgICBGaW5hbGx5LCB0aGUgY29yb3V0aW5lIGlzIG1hcmtlZCBhcyBoYXZpbmcgZmluaXNoZWQgZXhlY3V0aW5nLCBldmVuIGlmCisgICBpdCB3YXMgbmV2ZXIgc3RhcnRlZC4KKworICAgQ29yb3V0aW5lIG9iamVjdHMgYXJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHVzaW5nIHRoZSBhYm92ZSBwcm9jZXNzIHdoZW4KKyAgIHRoZXkgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4KKworLi4gX2FzeW5jLWl0ZXJhdG9yczoKKworQXN5bmNocm9ub3VzIEl0ZXJhdG9ycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiAqYXN5bmNocm9ub3VzIGl0ZXJhYmxlKiBpcyBhYmxlIHRvIGNhbGwgYXN5bmNocm9ub3VzIGNvZGUgaW4gaXRzCitgYF9fYWl0ZXJfX2BgIGltcGxlbWVudGF0aW9uLCBhbmQgYW4gKmFzeW5jaHJvbm91cyBpdGVyYXRvciogY2FuIGNhbGwKK2FzeW5jaHJvbm91cyBjb2RlIGluIGl0cyBgYF9fYW5leHRfX2BgIG1ldGhvZC4KKworQXN5bmNocm9ub3VzIGl0ZXJhdG9ycyBjYW4gYmUgdXNlZCBpbiBhbiA6a2V5d29yZDpgYXN5bmMgZm9yYCBzdGF0ZW1lbnQuCisKKy4uIG1ldGhvZDo6IG9iamVjdC5fX2FpdGVyX18oc2VsZikKKworICAgTXVzdCByZXR1cm4gYW4gKmFzeW5jaHJvbm91cyBpdGVyYXRvciogb2JqZWN0LgorCisuLiBtZXRob2Q6OiBvYmplY3QuX19hbmV4dF9fKHNlbGYpCisKKyAgIE11c3QgcmV0dXJuIGFuICphd2FpdGFibGUqIHJlc3VsdGluZyBpbiBhIG5leHQgdmFsdWUgb2YgdGhlIGl0ZXJhdG9yLiAgU2hvdWxkCisgICByYWlzZSBhIDpleGM6YFN0b3BBc3luY0l0ZXJhdGlvbmAgZXJyb3Igd2hlbiB0aGUgaXRlcmF0aW9uIGlzIG92ZXIuCisKK0FuIGV4YW1wbGUgb2YgYW4gYXN5bmNocm9ub3VzIGl0ZXJhYmxlIG9iamVjdDo6CisKKyAgICBjbGFzcyBSZWFkZXI6CisgICAgICAgIGFzeW5jIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgICAgIC4uLgorCisgICAgICAgIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGFzeW5jIGRlZiBfX2FuZXh0X18oc2VsZik6CisgICAgICAgICAgICB2YWwgPSBhd2FpdCBzZWxmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIHZhbCA9PSBiJyc6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEFzeW5jSXRlcmF0aW9uCisgICAgICAgICAgICByZXR1cm4gdmFsCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCisuLiBub3RlOjoKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUuMgorICAgICAgU3RhcnRpbmcgd2l0aCBDUHl0aG9uIDMuNS4yLCBgYF9fYWl0ZXJfX2BgIGNhbiBkaXJlY3RseSByZXR1cm4KKyAgICAgIDp0ZXJtOmBhc3luY2hyb25vdXMgaXRlcmF0b3JzIDxhc3luY2hyb25vdXMgaXRlcmF0b3I+YC4gIFJldHVybmluZworICAgICAgYW4gOnRlcm06YGF3YWl0YWJsZWAgb2JqZWN0IHdpbGwgcmVzdWx0IGluIGEKKyAgICAgIDpleGM6YFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmdgLgorCisgICAgICBUaGUgcmVjb21tZW5kZWQgd2F5IG9mIHdyaXRpbmcgYmFja3dhcmRzIGNvbXBhdGlibGUgY29kZSBpbgorICAgICAgQ1B5dGhvbiAzLjUueCBpcyB0byBjb250aW51ZSByZXR1cm5pbmcgYXdhaXRhYmxlcyBmcm9tCisgICAgICBgYF9fYWl0ZXJfX2BgLiAgSWYgeW91IHdhbnQgdG8gYXZvaWQgdGhlIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcKKyAgICAgIGFuZCBrZWVwIHRoZSBjb2RlIGJhY2t3YXJkcyBjb21wYXRpYmxlLCB0aGUgZm9sbG93aW5nIGRlY29yYXRvcgorICAgICAgY2FuIGJlIHVzZWQ6OgorCisgICAgICAgICAgaW1wb3J0IGZ1bmN0b29scworICAgICAgICAgIGltcG9ydCBzeXMKKworICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgNSwgMik6CisgICAgICAgICAgICAgIGRlZiBhaXRlcl9jb21wYXQoZnVuYyk6CisgICAgICAgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgICAgICAgICAgICAgICBhc3luYyBkZWYgd3JhcHBlcihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYyhzZWxmKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIKKyAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICBkZWYgYWl0ZXJfY29tcGF0KGZ1bmMpOgorICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKworICAgICAgRXhhbXBsZTo6CisKKyAgICAgICAgICBjbGFzcyBBc3luY0l0ZXJhdG9yOgorCisgICAgICAgICAgICAgIEBhaXRlcl9jb21wYXQKKyAgICAgICAgICAgICAgZGVmIF9fYWl0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgICAgYXN5bmMgZGVmIF9fYW5leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgIC4uLgorCisgICAgICBTdGFydGluZyB3aXRoIENQeXRob24gMy42LCB0aGUgOmV4YzpgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ2AKKyAgICAgIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYC4KKyAgICAgIEluIENQeXRob24gMy43LCByZXR1cm5pbmcgYW4gYXdhaXRhYmxlIGZyb20gYGBfX2FpdGVyX19gYCB3aWxsCisgICAgICByZXN1bHQgaW4gYSA6ZXhjOmBSdW50aW1lRXJyb3JgLgorCisKK0FzeW5jaHJvbm91cyBDb250ZXh0IE1hbmFnZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiAqYXN5bmNocm9ub3VzIGNvbnRleHQgbWFuYWdlciogaXMgYSAqY29udGV4dCBtYW5hZ2VyKiB0aGF0IGlzIGFibGUgdG8KK3N1c3BlbmQgZXhlY3V0aW9uIGluIGl0cyBgYF9fYWVudGVyX19gYCBhbmQgYGBfX2FleGl0X19gYCBtZXRob2RzLgorCitBc3luY2hyb25vdXMgY29udGV4dCBtYW5hZ2VycyBjYW4gYmUgdXNlZCBpbiBhbiA6a2V5d29yZDpgYXN5bmMgd2l0aGAgc3RhdGVtZW50LgorCisuLiBtZXRob2Q6OiBvYmplY3QuX19hZW50ZXJfXyhzZWxmKQorCisgICBUaGlzIG1ldGhvZCBpcyBzZW1hbnRpY2FsbHkgc2ltaWxhciB0byB0aGUgOm1ldGg6YF9fZW50ZXJfX2AsIHdpdGggb25seQorICAgZGlmZmVyZW5jZSB0aGF0IGl0IG11c3QgcmV0dXJuIGFuICphd2FpdGFibGUqLgorCisuLiBtZXRob2Q6OiBvYmplY3QuX19hZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaykKKworICAgVGhpcyBtZXRob2QgaXMgc2VtYW50aWNhbGx5IHNpbWlsYXIgdG8gdGhlIDptZXRoOmBfX2V4aXRfX2AsIHdpdGggb25seQorICAgZGlmZmVyZW5jZSB0aGF0IGl0IG11c3QgcmV0dXJuIGFuICphd2FpdGFibGUqLgorCitBbiBleGFtcGxlIG9mIGFuIGFzeW5jaHJvbm91cyBjb250ZXh0IG1hbmFnZXIgY2xhc3M6OgorCisgICAgY2xhc3MgQXN5bmNDb250ZXh0TWFuYWdlcjoKKyAgICAgICAgYXN5bmMgZGVmIF9fYWVudGVyX18oc2VsZik6CisgICAgICAgICAgICBhd2FpdCBsb2coJ2VudGVyaW5nIGNvbnRleHQnKQorCisgICAgICAgIGFzeW5jIGRlZiBfX2FleGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4YywgdGIpOgorICAgICAgICAgICAgYXdhaXQgbG9nKCdleGl0aW5nIGNvbnRleHQnKQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIEl0ICppcyogcG9zc2libGUgaW4gc29tZSBjYXNlcyB0byBjaGFuZ2UgYW4gb2JqZWN0J3MgdHlwZSwgdW5kZXIgY2VydGFpbgpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QgYi9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdAppbmRleCBiNmIyYjAwLi5lYWZkNzBhIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdApAQCAtMTMzLDcgKzEzMyw3IEBACiBBIHBhcmVudGhlc2l6ZWQgZm9ybSBpcyBhbiBvcHRpb25hbCBleHByZXNzaW9uIGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXM6CiAKIC4uIHByb2R1Y3Rpb25saXN0OjoKLSAgIHBhcmVudGhfZm9ybTogIigiIFtgZXhwcmVzc2lvbl9saXN0YF0gIikiCisgICBwYXJlbnRoX2Zvcm06ICIoIiBbYHN0YXJyZWRfZXhwcmVzc2lvbmBdICIpIgogCiBBIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiBsaXN0IHlpZWxkcyB3aGF0ZXZlciB0aGF0IGV4cHJlc3Npb24gbGlzdCB5aWVsZHM6IGlmCiB0aGUgbGlzdCBjb250YWlucyBhdCBsZWFzdCBvbmUgY29tbWEsIGl0IHlpZWxkcyBhIHR1cGxlOyBvdGhlcndpc2UsIGl0IHlpZWxkcwpAQCAtMjAyLDcgKzIwMiw3IEBACiBicmFja2V0czoKIAogLi4gcHJvZHVjdGlvbmxpc3Q6OgotICAgbGlzdF9kaXNwbGF5OiAiWyIgW2BleHByZXNzaW9uX2xpc3RgIHwgYGNvbXByZWhlbnNpb25gXSAiXSIKKyAgIGxpc3RfZGlzcGxheTogIlsiIFtgc3RhcnJlZF9saXN0YCB8IGBjb21wcmVoZW5zaW9uYF0gIl0iCiAKIEEgbGlzdCBkaXNwbGF5IHlpZWxkcyBhIG5ldyBsaXN0IG9iamVjdCwgdGhlIGNvbnRlbnRzIGJlaW5nIHNwZWNpZmllZCBieSBlaXRoZXIKIGEgbGlzdCBvZiBleHByZXNzaW9ucyBvciBhIGNvbXByZWhlbnNpb24uICBXaGVuIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKQEAgLTIyMyw3ICsyMjMsNyBAQAogZGlzcGxheXMgYnkgdGhlIGxhY2sgb2YgY29sb25zIHNlcGFyYXRpbmcga2V5cyBhbmQgdmFsdWVzOgogCiAuLiBwcm9kdWN0aW9ubGlzdDo6Ci0gICBzZXRfZGlzcGxheTogInsiIChgZXhwcmVzc2lvbl9saXN0YCB8IGBjb21wcmVoZW5zaW9uYCkgIn0iCisgICBzZXRfZGlzcGxheTogInsiIChgc3RhcnJlZF9saXN0YCB8IGBjb21wcmVoZW5zaW9uYCkgIn0iCiAKIEEgc2V0IGRpc3BsYXkgeWllbGRzIGEgbmV3IG11dGFibGUgc2V0IG9iamVjdCwgdGhlIGNvbnRlbnRzIGJlaW5nIHNwZWNpZmllZCBieQogZWl0aGVyIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnMgb3IgYSBjb21wcmVoZW5zaW9uLiAgV2hlbiBhIGNvbW1hLXNlcGFyYXRlZApAQCAtMjUwLDcgKzI1MCw3IEBACiAuLiBwcm9kdWN0aW9ubGlzdDo6CiAgICBkaWN0X2Rpc3BsYXk6ICJ7IiBbYGtleV9kYXR1bV9saXN0YCB8IGBkaWN0X2NvbXByZWhlbnNpb25gXSAifSIKICAgIGtleV9kYXR1bV9saXN0OiBga2V5X2RhdHVtYCAoIiwiIGBrZXlfZGF0dW1gKSogWyIsIl0KLSAgIGtleV9kYXR1bTogYGV4cHJlc3Npb25gICI6IiBgZXhwcmVzc2lvbmAKKyAgIGtleV9kYXR1bTogYGV4cHJlc3Npb25gICI6IiBgZXhwcmVzc2lvbmAgfCAiKioiIGBvcl9leHByYAogICAgZGljdF9jb21wcmVoZW5zaW9uOiBgZXhwcmVzc2lvbmAgIjoiIGBleHByZXNzaW9uYCBgY29tcF9mb3JgCiAKIEEgZGljdGlvbmFyeSBkaXNwbGF5IHlpZWxkcyBhIG5ldyBkaWN0aW9uYXJ5IG9iamVjdC4KQEAgLTI2MSw2ICsyNjEsMTYgQEAKIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHRoZSBzYW1lIGtleSBtdWx0aXBsZSB0aW1lcyBpbiB0aGUga2V5L2RhdHVtIGxpc3QsIGFuZCB0aGUKIGZpbmFsIGRpY3Rpb25hcnkncyB2YWx1ZSBmb3IgdGhhdCBrZXkgd2lsbCBiZSB0aGUgbGFzdCBvbmUgZ2l2ZW4uCiAKKy4uIGluZGV4OjogdW5wYWNraW5nOyBkaWN0aW9uYXJ5LCAqKjsgaW4gZGljdGlvbmFyeSBkaXNwbGF5cworCitBIGRvdWJsZSBhc3RlcmlzayBgYCoqYGAgZGVub3RlcyA6ZGZuOmBkaWN0aW9uYXJ5IHVucGFja2luZ2AuCitJdHMgb3BlcmFuZCBtdXN0IGJlIGEgOnRlcm06YG1hcHBpbmdgLiAgRWFjaCBtYXBwaW5nIGl0ZW0gaXMgYWRkZWQKK3RvIHRoZSBuZXcgZGljdGlvbmFyeS4gIExhdGVyIHZhbHVlcyByZXBsYWNlIHZhbHVlcyBhbHJlYWR5IHNldCBieQorZWFybGllciBrZXkvZGF0dW0gcGFpcnMgYW5kIGVhcmxpZXIgZGljdGlvbmFyeSB1bnBhY2tpbmdzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKyAgIFVucGFja2luZyBpbnRvIGRpY3Rpb25hcnkgZGlzcGxheXMsIG9yaWdpbmFsbHkgcHJvcG9zZWQgYnkgOnBlcDpgNDQ4YC4KKwogQSBkaWN0IGNvbXByZWhlbnNpb24sIGluIGNvbnRyYXN0IHRvIGxpc3QgYW5kIHNldCBjb21wcmVoZW5zaW9ucywgbmVlZHMgdHdvCiBleHByZXNzaW9ucyBzZXBhcmF0ZWQgd2l0aCBhIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSB1c3VhbCAiZm9yIiBhbmQgImlmIiBjbGF1c2VzLgogV2hlbiB0aGUgY29tcHJlaGVuc2lvbiBpcyBydW4sIHRoZSByZXN1bHRpbmcga2V5IGFuZCB2YWx1ZSBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQKQEAgLTM3OCwxOCArMzg4LDE5IEBACiAKIC4uIHNlZWFsc286OgogCi0gICA6cGVwOmAwMjU1YCAtIFNpbXBsZSBHZW5lcmF0b3JzCisgICA6cGVwOmAyNTVgIC0gU2ltcGxlIEdlbmVyYXRvcnMKICAgICAgIFRoZSBwcm9wb3NhbCBmb3IgYWRkaW5nIGdlbmVyYXRvcnMgYW5kIHRoZSA6a2V5d29yZDpgeWllbGRgIHN0YXRlbWVudCB0byBQeXRob24uCiAKLSAgIDpwZXA6YDAzNDJgIC0gQ29yb3V0aW5lcyB2aWEgRW5oYW5jZWQgR2VuZXJhdG9ycworICAgOnBlcDpgMzQyYCAtIENvcm91dGluZXMgdmlhIEVuaGFuY2VkIEdlbmVyYXRvcnMKICAgICAgIFRoZSBwcm9wb3NhbCB0byBlbmhhbmNlIHRoZSBBUEkgYW5kIHN5bnRheCBvZiBnZW5lcmF0b3JzLCBtYWtpbmcgdGhlbQogICAgICAgdXNhYmxlIGFzIHNpbXBsZSBjb3JvdXRpbmVzLgogCi0gICA6cGVwOmAwMzgwYCAtIFN5bnRheCBmb3IgRGVsZWdhdGluZyB0byBhIFN1YmdlbmVyYXRvcgorICAgOnBlcDpgMzgwYCAtIFN5bnRheCBmb3IgRGVsZWdhdGluZyB0byBhIFN1YmdlbmVyYXRvcgogICAgICAgVGhlIHByb3Bvc2FsIHRvIGludHJvZHVjZSB0aGUgOnRva2VuOmB5aWVsZF9mcm9tYCBzeW50YXgsIG1ha2luZyBkZWxlZ2F0aW9uCiAgICAgICB0byBzdWItZ2VuZXJhdG9ycyBlYXN5LgogCiAuLiBpbmRleDo6IG9iamVjdDogZ2VuZXJhdG9yCisuLiBfZ2VuZXJhdG9yLW1ldGhvZHM6CiAKIEdlbmVyYXRvci1pdGVyYXRvciBtZXRob2RzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpAQCAtNDQzLDEyICs0NTQsMTIgQEAKIC4uIG1ldGhvZDo6IGdlbmVyYXRvci5jbG9zZSgpCiAKICAgIFJhaXNlcyBhIDpleGM6YEdlbmVyYXRvckV4aXRgIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIHdhcwotICAgcGF1c2VkLiAgSWYgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiB0aGVuIHJhaXNlcyA6ZXhjOmBTdG9wSXRlcmF0aW9uYCAoYnkKLSAgIGV4aXRpbmcgbm9ybWFsbHksIG9yIGR1ZSB0byBhbHJlYWR5IGJlaW5nIGNsb3NlZCkgb3IgOmV4YzpgR2VuZXJhdG9yRXhpdGAgKGJ5Ci0gICBub3QgY2F0Y2hpbmcgdGhlIGV4Y2VwdGlvbiksIGNsb3NlIHJldHVybnMgdG8gaXRzIGNhbGxlci4gIElmIHRoZSBnZW5lcmF0b3IKLSAgIHlpZWxkcyBhIHZhbHVlLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLiAgSWYgdGhlIGdlbmVyYXRvciByYWlzZXMgYW55Ci0gICBvdGhlciBleGNlcHRpb24sIGl0IGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGNhbGxlci4gIDptZXRoOmBjbG9zZWAgZG9lcyBub3RoaW5nCi0gICBpZiB0aGUgZ2VuZXJhdG9yIGhhcyBhbHJlYWR5IGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uIG9yIG5vcm1hbCBleGl0LgorICAgcGF1c2VkLiAgSWYgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiB0aGVuIGV4aXRzIGdyYWNlZnVsbHksIGlzIGFscmVhZHkgY2xvc2VkLAorICAgb3IgcmFpc2VzIDpleGM6YEdlbmVyYXRvckV4aXRgIChieSBub3QgY2F0Y2hpbmcgdGhlIGV4Y2VwdGlvbiksIGNsb3NlCisgICByZXR1cm5zIHRvIGl0cyBjYWxsZXIuICBJZiB0aGUgZ2VuZXJhdG9yIHlpZWxkcyBhIHZhbHVlLCBhCisgICA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4gIElmIHRoZSBnZW5lcmF0b3IgcmFpc2VzIGFueSBvdGhlciBleGNlcHRpb24sCisgICBpdCBpcyBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIuICA6bWV0aDpgY2xvc2VgIGRvZXMgbm90aGluZyBpZiB0aGUgZ2VuZXJhdG9yCisgICBoYXMgYWxyZWFkeSBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiBvciBub3JtYWwgZXhpdC4KIAogLi4gaW5kZXg6OiBzaW5nbGU6IHlpZWxkOyBleGFtcGxlcwogCkBAIC02NDgsMTUgKzY1OSwxNSBAQAogCiAuLiBwcm9kdWN0aW9ubGlzdDo6CiAgICBjYWxsOiBgcHJpbWFyeWAgIigiIFtgYXJndW1lbnRfbGlzdGAgWyIsIl0gfCBgY29tcHJlaGVuc2lvbmBdICIpIgotICAgYXJndW1lbnRfbGlzdDogYHBvc2l0aW9uYWxfYXJndW1lbnRzYCBbIiwiIGBrZXl3b3JkX2FyZ3VtZW50c2BdCi0gICAgICAgICAgICAgICAgOiAgIFsiLCIgIioiIGBleHByZXNzaW9uYF0gWyIsIiBga2V5d29yZF9hcmd1bWVudHNgXQotICAgICAgICAgICAgICAgIDogICBbIiwiICIqKiIgYGV4cHJlc3Npb25gXQotICAgICAgICAgICAgICAgIDogfCBga2V5d29yZF9hcmd1bWVudHNgIFsiLCIgIioiIGBleHByZXNzaW9uYF0KLSAgICAgICAgICAgICAgICA6ICAgWyIsIiBga2V5d29yZF9hcmd1bWVudHNgXSBbIiwiICIqKiIgYGV4cHJlc3Npb25gXQotICAgICAgICAgICAgICAgIDogfCAiKiIgYGV4cHJlc3Npb25gIFsiLCIgYGtleXdvcmRfYXJndW1lbnRzYF0gWyIsIiAiKioiIGBleHByZXNzaW9uYF0KLSAgICAgICAgICAgICAgICA6IHwgIioqIiBgZXhwcmVzc2lvbmAKLSAgIHBvc2l0aW9uYWxfYXJndW1lbnRzOiBgZXhwcmVzc2lvbmAgKCIsIiBgZXhwcmVzc2lvbmApKgotICAga2V5d29yZF9hcmd1bWVudHM6IGBrZXl3b3JkX2l0ZW1gICgiLCIgYGtleXdvcmRfaXRlbWApKgorICAgYXJndW1lbnRfbGlzdDogYHBvc2l0aW9uYWxfYXJndW1lbnRzYCBbIiwiIGBzdGFycmVkX2FuZF9rZXl3b3Jkc2BdCisgICAgICAgICAgICAgICAgOiAgIFsiLCIgYGtleXdvcmRzX2FyZ3VtZW50c2BdCisgICAgICAgICAgICAgICAgOiB8IGBzdGFycmVkX2FuZF9rZXl3b3Jkc2AgWyIsIiBga2V5d29yZHNfYXJndW1lbnRzYF0KKyAgICAgICAgICAgICAgICA6IHwgYGtleXdvcmRzX2FyZ3VtZW50c2AKKyAgIHBvc2l0aW9uYWxfYXJndW1lbnRzOiBbIioiXSBgZXhwcmVzc2lvbmAgKCIsIiBbIioiXSBgZXhwcmVzc2lvbmApKgorICAgc3RhcnJlZF9hbmRfa2V5d29yZHM6ICgiKiIgYGV4cHJlc3Npb25gIHwgYGtleXdvcmRfaXRlbWApCisgICAgICAgICAgICAgICAgOiAoIiwiICIqIiBgZXhwcmVzc2lvbmAgfCAiLCIgYGtleXdvcmRfaXRlbWApKgorICAga2V5d29yZHNfYXJndW1lbnRzOiAoYGtleXdvcmRfaXRlbWAgfCAiKioiIGBleHByZXNzaW9uYCkKKyAgICAgICAgICAgICAgICA6ICgiLCIgYGtleXdvcmRfaXRlbWAgfCAiKioiIGBleHByZXNzaW9uYCkqCiAgICBrZXl3b3JkX2l0ZW06IGBpZGVudGlmaWVyYCAiPSIgYGV4cHJlc3Npb25gCiAKIEFuIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cwpAQCAtNzE0LDIwICs3MjUsMjEgQEAKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiAqOyBpbiBmdW5jdGlvbiBjYWxscworICAgc2luZ2xlOiB1bnBhY2tpbmc7IGluIGZ1bmN0aW9uIGNhbGxzCiAKIElmIHRoZSBzeW50YXggYGAqZXhwcmVzc2lvbmBgIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsIGBgZXhwcmVzc2lvbmBgIG11c3QKLWV2YWx1YXRlIHRvIGFuIGl0ZXJhYmxlLiAgRWxlbWVudHMgZnJvbSB0aGlzIGl0ZXJhYmxlIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkKLXdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50czsgaWYgdGhlcmUgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzCi0qeDEqLCAuLi4sICp4TiosIGFuZCBgYGV4cHJlc3Npb25gYCBldmFsdWF0ZXMgdG8gYSBzZXF1ZW5jZSAqeTEqLCAuLi4sICp5TSosCi10aGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBjYWxsIHdpdGggTStOIHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosIC4uLiwgKnhOKiwKLSp5MSosIC4uLiwgKnlNKi4KK2V2YWx1YXRlIHRvIGFuIDp0ZXJtOmBpdGVyYWJsZWAuICBFbGVtZW50cyBmcm9tIHRoZXNlIGl0ZXJhYmxlcyBhcmUKK3RyZWF0ZWQgYXMgaWYgdGhleSB3ZXJlIGFkZGl0aW9uYWwgcG9zaXRpb25hbCBhcmd1bWVudHMuICBGb3IgdGhlIGNhbGwKK2BgZih4MSwgeDIsICp5LCB4MywgeDQpYGAsIGlmICp5KiBldmFsdWF0ZXMgdG8gYSBzZXF1ZW5jZSAqeTEqLCAuLi4sICp5TSosCit0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBjYWxsIHdpdGggTSs0IHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosICp4MiosCisqeTEqLCAuLi4sICp5TSosICp4MyosICp4NCouCiAKIEEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSBgYCpleHByZXNzaW9uYGAgc3ludGF4IG1heSBhcHBlYXIKLSphZnRlciogc29tZSBrZXl3b3JkIGFyZ3VtZW50cywgaXQgaXMgcHJvY2Vzc2VkICpiZWZvcmUqIHRoZSBrZXl3b3JkIGFyZ3VtZW50cwotKGFuZCB0aGUgYGAqKmV4cHJlc3Npb25gYCBhcmd1bWVudCwgaWYgYW55IC0tIHNlZSBiZWxvdykuICBTbzo6CisqYWZ0ZXIqIGV4cGxpY2l0IGtleXdvcmQgYXJndW1lbnRzLCBpdCBpcyBwcm9jZXNzZWQgKmJlZm9yZSogdGhlCitrZXl3b3JkIGFyZ3VtZW50cyAoYW5kIGFueSBgYCoqZXhwcmVzc2lvbmBgIGFyZ3VtZW50cyAtLSBzZWUgYmVsb3cpLiAgU286OgogCiAgICA+Pj4gZGVmIGYoYSwgYik6Ci0gICAuLi4gIHByaW50KGEsIGIpCisgICAuLi4gICAgIHByaW50KGEsIGIpCiAgICAuLi4KICAgID4+PiBmKGI9MSwgKigyLCkpCiAgICAyIDEKQEAgLTc0NSwxMyArNzU3LDIwIEBACiAgICBzaW5nbGU6ICoqOyBpbiBmdW5jdGlvbiBjYWxscwogCiBJZiB0aGUgc3ludGF4IGBgKipleHByZXNzaW9uYGAgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCwgYGBleHByZXNzaW9uYGAgbXVzdAotZXZhbHVhdGUgdG8gYSBtYXBwaW5nLCB0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlIHRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkCi1hcmd1bWVudHMuICBJbiB0aGUgY2FzZSBvZiBhIGtleXdvcmQgYXBwZWFyaW5nIGluIGJvdGggYGBleHByZXNzaW9uYGAgYW5kIGFzIGFuCi1leHBsaWNpdCBrZXl3b3JkIGFyZ3VtZW50LCBhIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KK2V2YWx1YXRlIHRvIGEgOnRlcm06YG1hcHBpbmdgLCB0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlIHRyZWF0ZWQgYXMKK2FkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMuICBJZiBhIGtleXdvcmQgaXMgYWxyZWFkeSBwcmVzZW50CisoYXMgYW4gZXhwbGljaXQga2V5d29yZCBhcmd1bWVudCwgb3IgZnJvbSBhbm90aGVyIHVucGFja2luZyksCithIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogRm9ybWFsIHBhcmFtZXRlcnMgdXNpbmcgdGhlIHN5bnRheCBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYCBjYW5ub3QgYmUKIHVzZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBzbG90cyBvciBhcyBrZXl3b3JkIGFyZ3VtZW50IG5hbWVzLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNQorICAgRnVuY3Rpb24gY2FsbHMgYWNjZXB0IGFueSBudW1iZXIgb2YgYGAqYGAgYW5kIGBgKipgYCB1bnBhY2tpbmdzLAorICAgcG9zaXRpb25hbCBhcmd1bWVudHMgbWF5IGZvbGxvdyBpdGVyYWJsZSB1bnBhY2tpbmdzIChgYCpgYCksCisgICBhbmQga2V5d29yZCBhcmd1bWVudHMgbWF5IGZvbGxvdyBkaWN0aW9uYXJ5IHVucGFja2luZ3MgKGBgKipgYCkuCisgICBPcmlnaW5hbGx5IHByb3Bvc2VkIGJ5IDpwZXA6YDQ0OGAuCisKIEEgY2FsbCBhbHdheXMgcmV0dXJucyBzb21lIHZhbHVlLCBwb3NzaWJseSBgYE5vbmVgYCwgdW5sZXNzIGl0IHJhaXNlcyBhbgogZXhjZXB0aW9uLiAgSG93IHRoaXMgdmFsdWUgaXMgY29tcHV0ZWQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiB0aGUgY2FsbGFibGUKIG9iamVjdC4KQEAgLTgxMSw2ICs4MzAsMjAgQEAKICAgIGlmIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQuCiAKIAorLi4gX2F3YWl0OgorCitBd2FpdCBleHByZXNzaW9uCis9PT09PT09PT09PT09PT09CisKK1N1c3BlbmQgdGhlIGV4ZWN1dGlvbiBvZiA6dGVybTpgY29yb3V0aW5lYCBvbiBhbiA6dGVybTpgYXdhaXRhYmxlYCBvYmplY3QuCitDYW4gb25seSBiZSB1c2VkIGluc2lkZSBhIDp0ZXJtOmBjb3JvdXRpbmUgZnVuY3Rpb25gLgorCisuLiBwcm9kdWN0aW9ubGlzdDo6CisgICBhd2FpdF9leHByOiAiYXdhaXQiIGBwcmltYXJ5YAorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjUKKworCiAuLiBfcG93ZXI6CiAKIFRoZSBwb3dlciBvcGVyYXRvcgpAQCAtODIwLDcgKzg1Myw3IEBACiBsZXNzIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzIHJpZ2h0LiAgVGhlIHN5bnRheCBpczoKIAogLi4gcHJvZHVjdGlvbmxpc3Q6OgotICAgcG93ZXI6IGBwcmltYXJ5YCBbIioqIiBgdV9leHByYF0KKyAgIHBvd2VyOiAoIGBhd2FpdF9leHByYCB8IGBwcmltYXJ5YCApIFsiKioiIGB1X2V4cHJgXQogCiBUaHVzLCBpbiBhbiB1bnBhcmVudGhlc2l6ZWQgc2VxdWVuY2Ugb2YgcG93ZXIgYW5kIHVuYXJ5IG9wZXJhdG9ycywgdGhlIG9wZXJhdG9ycwogYXJlIGV2YWx1YXRlZCBmcm9tIHJpZ2h0IHRvIGxlZnQgKHRoaXMgZG9lcyBub3QgY29uc3RyYWluIHRoZSBldmFsdWF0aW9uIG9yZGVyCkBAIC04OTEsOCArOTI0LDkgQEAKIG9wZXJhdG9ycyBhbmQgb25lIGZvciBhZGRpdGl2ZSBvcGVyYXRvcnM6CiAKIC4uIHByb2R1Y3Rpb25saXN0OjoKLSAgIG1fZXhwcjogYHVfZXhwcmAgfCBgbV9leHByYCAiKiIgYHVfZXhwcmAgfCBgbV9leHByYCAiLy8iIGB1X2V4cHJgIHwgYG1fZXhwcmAgIi8iIGB1X2V4cHJgCi0gICAgICAgICA6IHwgYG1fZXhwcmAgIiUiIGB1X2V4cHJgCisgICBtX2V4cHI6IGB1X2V4cHJgIHwgYG1fZXhwcmAgIioiIGB1X2V4cHJgIHwgYG1fZXhwcmAgIkAiIGBtX2V4cHJgIHwKKyAgICAgICAgIDogYG1fZXhwcmAgIi8vIiBgdV9leHByYHwgYG1fZXhwcmAgIi8iIGB1X2V4cHJgIHwKKyAgICAgICAgIDogYG1fZXhwcmAgIiUiIGB1X2V4cHJgCiAgICBhX2V4cHI6IGBtX2V4cHJgIHwgYGFfZXhwcmAgIisiIGBtX2V4cHJgIHwgYGFfZXhwcmAgIi0iIGBtX2V4cHJgCiAKIC4uIGluZGV4Ojogc2luZ2xlOiBtdWx0aXBsaWNhdGlvbgpAQCAtOTAzLDYgKzkzNywxMyBAQAogY29tbW9uIHR5cGUgYW5kIHRoZW4gbXVsdGlwbGllZCB0b2dldGhlci4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgc2VxdWVuY2UKIHJlcGV0aXRpb24gaXMgcGVyZm9ybWVkOyBhIG5lZ2F0aXZlIHJlcGV0aXRpb24gZmFjdG9yIHlpZWxkcyBhbiBlbXB0eSBzZXF1ZW5jZS4KIAorLi4gaW5kZXg6OiBzaW5nbGU6IG1hdHJpeCBtdWx0aXBsaWNhdGlvbgorCitUaGUgYGBAYGAgKGF0KSBvcGVyYXRvciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBtYXRyaXggbXVsdGlwbGljYXRpb24uICBObworYnVpbHRpbiBQeXRob24gdHlwZXMgaW1wbGVtZW50IHRoaXMgb3BlcmF0b3IuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCiAuLiBpbmRleDo6CiAgICBleGNlcHRpb246IFplcm9EaXZpc2lvbkVycm9yCiAgICBzaW5nbGU6IGRpdmlzaW9uCkBAIC0xMzY1LDcgKzE0MDYsOSBAQAogCiBMYW1iZGEgZXhwcmVzc2lvbnMgKHNvbWV0aW1lcyBjYWxsZWQgbGFtYmRhIGZvcm1zKSBhcmUgdXNlZCB0byBjcmVhdGUgYW5vbnltb3VzCiBmdW5jdGlvbnMuIFRoZSBleHByZXNzaW9uIGBgbGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbmBgIHlpZWxkcyBhIGZ1bmN0aW9uCi1vYmplY3QuICBUaGUgdW5uYW1lZCBvYmplY3QgYmVoYXZlcyBsaWtlIGEgZnVuY3Rpb24gb2JqZWN0IGRlZmluZWQgd2l0aCA6Ogorb2JqZWN0LiAgVGhlIHVubmFtZWQgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIGZ1bmN0aW9uIG9iamVjdCBkZWZpbmVkIHdpdGg6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCiAKICAgIGRlZiA8bGFtYmRhPihhcmd1bWVudHMpOgogICAgICAgIHJldHVybiBleHByZXNzaW9uCkBAIC0xMzg0LDEzICsxNDI3LDI5IEBACiAKIC4uIHByb2R1Y3Rpb25saXN0OjoKICAgIGV4cHJlc3Npb25fbGlzdDogYGV4cHJlc3Npb25gICggIiwiIGBleHByZXNzaW9uYCApKiBbIiwiXQorICAgc3RhcnJlZF9saXN0OiBgc3RhcnJlZF9pdGVtYCAoICIsIiBgc3RhcnJlZF9pdGVtYCApKiBbIiwiXQorICAgc3RhcnJlZF9leHByZXNzaW9uOiBgZXhwcmVzc2lvbmAgfCAoIGBzdGFycmVkX2l0ZW1gICIsIiApKiBbYHN0YXJyZWRfaXRlbWBdCisgICBzdGFycmVkX2l0ZW06IGBleHByZXNzaW9uYCB8ICIqIiBgb3JfZXhwcmAKIAogLi4gaW5kZXg6OiBvYmplY3Q6IHR1cGxlCiAKLUFuIGV4cHJlc3Npb24gbGlzdCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBjb21tYSB5aWVsZHMgYSB0dXBsZS4gIFRoZSBsZW5ndGggb2YKK0V4Y2VwdCB3aGVuIHBhcnQgb2YgYSBsaXN0IG9yIHNldCBkaXNwbGF5LCBhbiBleHByZXNzaW9uIGxpc3QKK2NvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIGNvbW1hIHlpZWxkcyBhIHR1cGxlLiAgVGhlIGxlbmd0aCBvZgogdGhlIHR1cGxlIGlzIHRoZSBudW1iZXIgb2YgZXhwcmVzc2lvbnMgaW4gdGhlIGxpc3QuICBUaGUgZXhwcmVzc2lvbnMgYXJlCiBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LgogCisuLiBpbmRleDo6CisgICBwYWlyOiBpdGVyYWJsZTsgdW5wYWNraW5nCisgICBzaW5nbGU6ICo7IGluIGV4cHJlc3Npb24gbGlzdHMKKworQW4gYXN0ZXJpc2sgYGAqYGAgZGVub3RlcyA6ZGZuOmBpdGVyYWJsZSB1bnBhY2tpbmdgLiAgSXRzIG9wZXJhbmQgbXVzdCBiZQorYW4gOnRlcm06YGl0ZXJhYmxlYC4gIFRoZSBpdGVyYWJsZSBpcyBleHBhbmRlZCBpbnRvIGEgc2VxdWVuY2Ugb2YgaXRlbXMsCit3aGljaCBhcmUgaW5jbHVkZWQgaW4gdGhlIG5ldyB0dXBsZSwgbGlzdCwgb3Igc2V0LCBhdCB0aGUgc2l0ZSBvZgordGhlIHVucGFja2luZy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy41CisgICBJdGVyYWJsZSB1bnBhY2tpbmcgaW4gZXhwcmVzc2lvbiBsaXN0cywgb3JpZ2luYWxseSBwcm9wb3NlZCBieSA6cGVwOmA0NDhgLgorCiAuLiBpbmRleDo6IHBhaXI6IHRyYWlsaW5nOyBjb21tYQogCiBUaGUgdHJhaWxpbmcgY29tbWEgaXMgcmVxdWlyZWQgb25seSB0byBjcmVhdGUgYSBzaW5nbGUgdHVwbGUgKGEuay5hLiBhCkBAIC0xNDY2LDEzICsxNTI1LDE2IEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYGArYGAsIGBgLWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgcmVtYWluZGVyIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyNdXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBgYCpgYCwgYGBAYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGlvbiwgbWF0cml4ICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG11bHRpcGxpY2F0aW9uIGRpdmlzaW9uLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVtYWluZGVyIFsjXV8gICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgK3hgYCwgYGAteGBgLCBgYH54YGAgICAgICAgICAgICAgICAgICAgICAgICB8IFBvc2l0aXZlLCBuZWdhdGl2ZSwgYml0d2lzZSBOT1QgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBgYCoqYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeHBvbmVudGlhdGlvbiBbI11fICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBhd2FpdGBgIGBgeGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQXdhaXQgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgeFtpbmRleF1gYCwgYGB4W2luZGV4OmluZGV4XWBgLCAgICAgICAgICAgICB8IFN1YnNjcmlwdGlvbiwgc2xpY2luZywgICAgICAgICAgICAgIHwKIHwgYGB4KGFyZ3VtZW50cy4uLilgYCwgYGB4LmF0dHJpYnV0ZWBgICAgICAgICAgIHwgY2FsbCwgYXR0cmlidXRlIHJlZmVyZW5jZSAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKaW5kZXggMTZkMjhkOC4uMjE0NGMxZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdApAQCAtMjksMTEgKzI5LDEwIEBACiBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24uCiAKIFdoZW4gY2FsbGluZyA6ZnVuYzpgX19pbXBvcnRfX2AgYXMgcGFydCBvZiBhbiBpbXBvcnQgc3RhdGVtZW50LCB0aGUKLWltcG9ydCBzeXN0ZW0gZmlyc3QgY2hlY2tzIHRoZSBtb2R1bGUgZ2xvYmFsIG5hbWVzcGFjZSBmb3IgYSBmdW5jdGlvbiBieQotdGhhdCBuYW1lLiBJZiBpdCBpcyBub3QgZm91bmQsIHRoZW4gdGhlIHN0YW5kYXJkIGJ1aWx0aW4gOmZ1bmM6YF9faW1wb3J0X19gCi1pcyBjYWxsZWQuIE90aGVyIG1lY2hhbmlzbXMgZm9yIGludm9raW5nIHRoZSBpbXBvcnQgc3lzdGVtIChzdWNoIGFzCi06ZnVuYzpgaW1wb3J0bGliLmltcG9ydF9tb2R1bGVgKSBkbyBub3QgcGVyZm9ybSB0aGlzIGNoZWNrIGFuZCB3aWxsIGFsd2F5cwotdXNlIHRoZSBzdGFuZGFyZCBpbXBvcnQgc3lzdGVtLgorc3RhbmRhcmQgYnVpbHRpbiA6ZnVuYzpgX19pbXBvcnRfX2AgaXMgY2FsbGVkLiBPdGhlciBtZWNoYW5pc21zIGZvcgoraW52b2tpbmcgdGhlIGltcG9ydCBzeXN0ZW0gKHN1Y2ggYXMgOmZ1bmM6YGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlYCkgbWF5CitjaG9vc2UgdG8gc3VidmVydCA6ZnVuYzpgX19pbXBvcnRfX2AgYW5kIHVzZSBpdHMgb3duIHNvbHV0aW9uIHRvCitpbXBsZW1lbnQgaW1wb3J0IHNlbWFudGljcy4KIAogV2hlbiBhIG1vZHVsZSBpcyBmaXJzdCBpbXBvcnRlZCwgUHl0aG9uIHNlYXJjaGVzIGZvciB0aGUgbW9kdWxlIGFuZCBpZiBmb3VuZCwKIGl0IGNyZWF0ZXMgYSBtb2R1bGUgb2JqZWN0IFsjZm5tb11fLCBpbml0aWFsaXppbmcgaXQuICBJZiB0aGUgbmFtZWQgbW9kdWxlCkBAIC0zMzksNiArMzM4LDcgQEAKIAogICAgIG1vZHVsZSA9IE5vbmUKICAgICBpZiBzcGVjLmxvYWRlciBpcyBub3QgTm9uZSBhbmQgaGFzYXR0cihzcGVjLmxvYWRlciwgJ2NyZWF0ZV9tb2R1bGUnKToKKyAgICAgICAgIyBJdCBpcyBhc3N1bWVkICdleGVjX21vZHVsZScgd2lsbCBhbHNvIGJlIGRlZmluZWQgb24gdGhlIGxvYWRlci4KICAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIuY3JlYXRlX21vZHVsZShzcGVjKQogICAgIGlmIG1vZHVsZSBpcyBOb25lOgogICAgICAgICBtb2R1bGUgPSBNb2R1bGVUeXBlKHNwZWMubmFtZSkKQEAgLTQyNyw3ICs0MjcsNyBAQAogYnkgaW1wbGVtZW50aW5nIGEgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5jcmVhdGVfbW9kdWxlYCBtZXRob2QuCiBJdCB0YWtlcyBvbmUgYXJndW1lbnQsIHRoZSBtb2R1bGUgc3BlYywgYW5kIHJldHVybnMgdGhlIG5ldyBtb2R1bGUgb2JqZWN0CiB0byB1c2UgZHVyaW5nIGxvYWRpbmcuICBgYGNyZWF0ZV9tb2R1bGUoKWBgIGRvZXMgbm90IG5lZWQgdG8gc2V0IGFueSBhdHRyaWJ1dGVzCi1vbiB0aGUgbW9kdWxlIG9iamVjdC4gIElmIHRoZSBsb2FkZXIgZG9lcyBub3QgZGVmaW5lIGBgY3JlYXRlX21vZHVsZSgpYGAsIHRoZQorb24gdGhlIG1vZHVsZSBvYmplY3QuICBJZiB0aGUgbWV0aG9kIHJldHVybnMgYGBOb25lYGAsIHRoZQogaW1wb3J0IG1hY2hpbmVyeSB3aWxsIGNyZWF0ZSB0aGUgbmV3IG1vZHVsZSBpdHNlbGYuCiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuNApAQCAtNDU5LDcgKzQ1OSwxMyBAQAogCiAgICAgKiBJZiBsb2FkaW5nIGZhaWxzLCB0aGUgbG9hZGVyIG11c3QgcmVtb3ZlIGFueSBtb2R1bGVzIGl0IGhhcyBpbnNlcnRlZAogICAgICAgaW50byA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBidXQgaXQgbXVzdCByZW1vdmUgKipvbmx5KiogdGhlIGZhaWxpbmcKLSAgICAgIG1vZHVsZSwgYW5kIG9ubHkgaWYgdGhlIGxvYWRlciBpdHNlbGYgaGFzIGxvYWRlZCBpdCBleHBsaWNpdGx5LgorICAgICAgbW9kdWxlKHMpLCBhbmQgb25seSBpZiB0aGUgbG9hZGVyIGl0c2VsZiBoYXMgbG9hZGVkIHRoZSBtb2R1bGUocykKKyAgICAgIGV4cGxpY2l0bHkuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CisgICBBIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgaXMgcmFpc2VkIHdoZW4gYGBleGVjX21vZHVsZSgpYGAgaXMgZGVmaW5lZCBidXQKKyAgIGBgY3JlYXRlX21vZHVsZSgpYGAgaXMgbm90LiBTdGFydGluZyBpbiBQeXRob24gMy42IGl0IHdpbGwgYmUgYW4gZXJyb3IgdG8gbm90CisgICBkZWZpbmUgYGBjcmVhdGVfbW9kdWxlKClgYCBvbiBhIGxvYWRlciBhdHRhY2hlZCB0byBhIE1vZHVsZVNwZWMuCiAKIFN1Ym1vZHVsZXMKIC0tLS0tLS0tLS0KQEAgLTY3NCw3ICs2ODAsNyBAQAogCiBUaGUgZGVmYXVsdCBzZXQgb2YgcGF0aCBlbnRyeSBmaW5kZXJzIGltcGxlbWVudCBhbGwgdGhlIHNlbWFudGljcyBmb3IgZmluZGluZwogbW9kdWxlcyBvbiB0aGUgZmlsZSBzeXN0ZW0sIGhhbmRsaW5nIHNwZWNpYWwgZmlsZSB0eXBlcyBzdWNoIGFzIFB5dGhvbiBzb3VyY2UKLWNvZGUgKGBgLnB5YGAgZmlsZXMpLCBQeXRob24gYnl0ZSBjb2RlIChgYC5weWNgYCBhbmQgYGAucHlvYGAgZmlsZXMpIGFuZAorY29kZSAoYGAucHlgYCBmaWxlcyksIFB5dGhvbiBieXRlIGNvZGUgKGBgLnB5Y2BgIGZpbGVzKSBhbmQKIHNoYXJlZCBsaWJyYXJpZXMgKGUuZy4gYGAuc29gYCBmaWxlcykuIFdoZW4gc3VwcG9ydGVkIGJ5IHRoZSA6bW9kOmB6aXBpbXBvcnRgCiBtb2R1bGUgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHRoZSBkZWZhdWx0IHBhdGggZW50cnkgZmluZGVycyBhbHNvIGhhbmRsZQogbG9hZGluZyBhbGwgb2YgdGhlc2UgZmlsZSB0eXBlcyAob3RoZXIgdGhhbiBzaGFyZWQgbGlicmFyaWVzKSBmcm9tIHppcGZpbGVzLgpAQCAtNzg4LDYgKzc5NCwxNSBAQAogdG8gYXNrIHRoZSBmaW5kZXIgZm9yIGEgbW9kdWxlIHNwZWMsIHdoaWNoIGlzIHRoZW4gdXNlZCB3aGVuIGxvYWRpbmcgdGhlCiBtb2R1bGUuCiAKK1RoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IC0tIGRlbm90ZWQgYnkgYW4gZW1wdHkgc3RyaW5nIC0tIGlzIGhhbmRsZWQKK3NsaWdodGx5IGRpZmZlcmVudGx5IGZyb20gb3RoZXIgZW50cmllcyBvbiA6ZGF0YTpgc3lzLnBhdGhgLiBGaXJzdCwgaWYgdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIGZvdW5kIHRvIG5vdCBleGlzdCwgbm8gdmFsdWUgaXMgc3RvcmVkIGluCis6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLiBTZWNvbmQsIHRoZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgd29ya2luZworZGlyZWN0b3J5IGlzIGxvb2tlZCB1cCBmcmVzaCBmb3IgZWFjaCBtb2R1bGUgbG9va3VwLiBUaGlyZCwgdGhlIHBhdGggdXNlZCBmb3IKKzpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYW5kIHJldHVybmVkIGJ5Cis6bWV0aDpgaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlY2Agd2lsbCBiZSB0aGUgYWN0dWFsIGN1cnJlbnQKK3dvcmtpbmcgZGlyZWN0b3J5IGFuZCBub3QgdGhlIGVtcHR5IHN0cmluZy4KKwogUGF0aCBlbnRyeSBmaW5kZXIgcHJvdG9jb2wKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLnJzdCBiL0RvYy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLnJzdAppbmRleCA1NjMzYWUzLi5iYjdlMzkwIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2ludHJvZHVjdGlvbi5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24ucnN0CkBAIC02MCw3ICs2MCw3IEBACiAgICBUaGlzIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHVzZXMgdGhlIENQeXRob24gaW1wbGVtZW50YXRpb24sIGJ1dCBpcyBhIG1hbmFnZWQKICAgIC5ORVQgYXBwbGljYXRpb24gYW5kIG1ha2VzIC5ORVQgbGlicmFyaWVzIGF2YWlsYWJsZS4gIEl0IHdhcyBjcmVhdGVkIGJ5IEJyaWFuCiAgICBMbG95ZC4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGBQeXRob24gZm9yIC5ORVQgaG9tZSBwYWdlCi0gICA8aHR0cDovL3B5dGhvbm5ldC5zb3VyY2Vmb3JnZS5uZXQ+YF8uCisgICA8aHR0cHM6Ly9weXRob25uZXQuZ2l0aHViLmlvLz5gXy4KIAogSXJvblB5dGhvbgogICAgQW4gYWx0ZXJuYXRlIFB5dGhvbiBmb3IgLk5FVC4gIFVubGlrZSBQeXRob24uTkVULCB0aGlzIGlzIGEgY29tcGxldGUgUHl0aG9uCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0IGIvRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdAppbmRleCBhMTI2NWNmLi4zN2YyNWYxIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QKQEAgLTMxMyw3ICszMTMsNyBAQAogKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzCiAqICpQYyogLSBjb25uZWN0b3IgcHVuY3R1YXRpb25zCiAqICpPdGhlcl9JRF9TdGFydCogLSBleHBsaWNpdCBsaXN0IG9mIGNoYXJhY3RlcnMgaW4gYFByb3BMaXN0LnR4dAotICA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkL1Byb3BMaXN0LnR4dD5gXyB0byBzdXBwb3J0IGJhY2t3YXJkcworICA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvOC4wLjAvdWNkL1Byb3BMaXN0LnR4dD5gXyB0byBzdXBwb3J0IGJhY2t3YXJkcwogICBjb21wYXRpYmlsaXR5CiAqICpPdGhlcl9JRF9Db250aW51ZSogLSBsaWtld2lzZQogCkBAIC0zMjIsNyArMzIyLDcgQEAKIAogQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yIFVuaWNvZGUKIDQuMSBjYW4gYmUgZm91bmQgYXQKLWh0dHA6Ly93d3cuZGNsLmhwaS51bmktcG90c2RhbS5kZS9ob21lL2xvZXdpcy90YWJsZS0zMTMxLmh0bWwuCitodHRwczovL3d3dy5kY2wuaHBpLnVuaS1wb3RzZGFtLmRlL2hvbWUvbG9ld2lzL3RhYmxlLTMxMzEuaHRtbC4KIAogCiAuLiBfa2V5d29yZHM6CkBAIC01MzgsOCArNTM4LDcgQEAKICAgICAgIFN1cHBvcnQgZm9yIG5hbWUgYWxpYXNlcyBbI11fIGhhcyBiZWVuIGFkZGVkLgogCiAoNSkKLSAgIEluZGl2aWR1YWwgY29kZSB1bml0cyB3aGljaCBmb3JtIHBhcnRzIG9mIGEgc3Vycm9nYXRlIHBhaXIgY2FuIGJlIGVuY29kZWQgdXNpbmcKLSAgIHRoaXMgZXNjYXBlIHNlcXVlbmNlLiAgRXhhY3RseSBmb3VyIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLgorICAgRXhhY3RseSBmb3VyIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLgogCiAoNikKICAgIEFueSBVbmljb2RlIGNoYXJhY3RlciBjYW4gYmUgZW5jb2RlZCB0aGlzIHdheS4gIEV4YWN0bHkgZWlnaHQgaGV4IGRpZ2l0cwpAQCAtNjkwLDkgKzY4OSwxMiBAQAogCiAuLiBpbmRleDo6IHNpbmdsZTogb3BlcmF0b3JzCiAKLVRoZSBmb2xsb3dpbmcgdG9rZW5zIGFyZSBvcGVyYXRvcnM6OgorVGhlIGZvbGxvd2luZyB0b2tlbnMgYXJlIG9wZXJhdG9yczoKIAotICAgKyAgICAgICAtICAgICAgICogICAgICAgKiogICAgICAvICAgICAgIC8vICAgICAgJQorLi4gY29kZS1ibG9jazo6IG5vbmUKKworCisgICArICAgICAgIC0gICAgICAgKiAgICAgICAqKiAgICAgIC8gICAgICAgLy8gICAgICAlICAgICAgQAogICAgPDwgICAgICA+PiAgICAgICYgICAgICAgfCAgICAgICBeICAgICAgIH4KICAgIDwgICAgICAgPiAgICAgICA8PSAgICAgID49ICAgICAgPT0gICAgICAhPQogCkBAIC03MDQsMTEgKzcwNiwxMyBAQAogCiAuLiBpbmRleDo6IHNpbmdsZTogZGVsaW1pdGVycwogCi1UaGUgZm9sbG93aW5nIHRva2VucyBzZXJ2ZSBhcyBkZWxpbWl0ZXJzIGluIHRoZSBncmFtbWFyOjoKK1RoZSBmb2xsb3dpbmcgdG9rZW5zIHNlcnZlIGFzIGRlbGltaXRlcnMgaW4gdGhlIGdyYW1tYXI6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCiAKICAgICggICAgICAgKSAgICAgICBbICAgICAgIF0gICAgICAgeyAgICAgICB9CiAgICAsICAgICAgIDogICAgICAgLiAgICAgICA7ICAgICAgIEAgICAgICAgPSAgICAgICAtPgotICAgKz0gICAgICAtPSAgICAgICo9ICAgICAgLz0gICAgICAvLz0gICAgICU9CisgICArPSAgICAgIC09ICAgICAgKj0gICAgICAvPSAgICAgIC8vPSAgICAgJT0gICAgICBAPQogICAgJj0gICAgICB8PSAgICAgIF49ICAgICAgPj49ICAgICA8PD0gICAgICoqPQogCiBUaGUgcGVyaW9kIGNhbiBhbHNvIG9jY3VyIGluIGZsb2F0aW5nLXBvaW50IGFuZCBpbWFnaW5hcnkgbGl0ZXJhbHMuICBBIHNlcXVlbmNlCkBAIC03MTcsMTYgKzcyMSwyMCBAQAogYnV0IGFsc28gcGVyZm9ybSBhbiBvcGVyYXRpb24uCiAKIFRoZSBmb2xsb3dpbmcgcHJpbnRpbmcgQVNDSUkgY2hhcmFjdGVycyBoYXZlIHNwZWNpYWwgbWVhbmluZyBhcyBwYXJ0IG9mIG90aGVyCi10b2tlbnMgb3IgYXJlIG90aGVyd2lzZSBzaWduaWZpY2FudCB0byB0aGUgbGV4aWNhbCBhbmFseXplcjo6Cit0b2tlbnMgb3IgYXJlIG90aGVyd2lzZSBzaWduaWZpY2FudCB0byB0aGUgbGV4aWNhbCBhbmFseXplcjoKKworLi4gY29kZS1ibG9jazo6IG5vbmUKIAogICAgJyAgICAgICAiICAgICAgICMgICAgICAgXAogCiBUaGUgZm9sbG93aW5nIHByaW50aW5nIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIG5vdCB1c2VkIGluIFB5dGhvbi4gIFRoZWlyCi1vY2N1cnJlbmNlIG91dHNpZGUgc3RyaW5nIGxpdGVyYWxzIGFuZCBjb21tZW50cyBpcyBhbiB1bmNvbmRpdGlvbmFsIGVycm9yOjoKK29jY3VycmVuY2Ugb3V0c2lkZSBzdHJpbmcgbGl0ZXJhbHMgYW5kIGNvbW1lbnRzIGlzIGFuIHVuY29uZGl0aW9uYWwgZXJyb3I6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCiAKICAgICQgICAgICAgPyAgICAgICBgCiAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKLS4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2QvTmFtZUFsaWFzZXMudHh0CisuLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvOC4wLjAvdWNkL05hbWVBbGlhc2VzLnR4dApkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0CmluZGV4IDg5NDZiNGYuLmQ0MDNjNGQgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QKQEAgLTQ1LDcgKzQ1LDcgQEAKIGV4cHJlc3Npb24gc3RhdGVtZW50IGlzOgogCiAuLiBwcm9kdWN0aW9ubGlzdDo6Ci0gICBleHByZXNzaW9uX3N0bXQ6IGBleHByZXNzaW9uX2xpc3RgCisgICBleHByZXNzaW9uX3N0bXQ6IGBzdGFycmVkX2V4cHJlc3Npb25gCiAKIEFuIGV4cHJlc3Npb24gc3RhdGVtZW50IGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBsaXN0ICh3aGljaCBtYXkgYmUgYSBzaW5nbGUKIGV4cHJlc3Npb24pLgpAQCAtODEsMTEgKzgxLDExIEBACiBhdHRyaWJ1dGVzIG9yIGl0ZW1zIG9mIG11dGFibGUgb2JqZWN0czoKIAogLi4gcHJvZHVjdGlvbmxpc3Q6OgotICAgYXNzaWdubWVudF9zdG10OiAoYHRhcmdldF9saXN0YCAiPSIpKyAoYGV4cHJlc3Npb25fbGlzdGAgfCBgeWllbGRfZXhwcmVzc2lvbmApCisgICBhc3NpZ25tZW50X3N0bXQ6IChgdGFyZ2V0X2xpc3RgICI9IikrIChgc3RhcnJlZF9leHByZXNzaW9uYCB8IGB5aWVsZF9leHByZXNzaW9uYCkKICAgIHRhcmdldF9saXN0OiBgdGFyZ2V0YCAoIiwiIGB0YXJnZXRgKSogWyIsIl0KICAgIHRhcmdldDogYGlkZW50aWZpZXJgCiAgICAgICAgICA6IHwgIigiIGB0YXJnZXRfbGlzdGAgIikiCi0gICAgICAgICA6IHwgIlsiIGB0YXJnZXRfbGlzdGAgIl0iCisgICAgICAgICA6IHwgIlsiIFtgdGFyZ2V0X2xpc3RgXSAiXSIKICAgICAgICAgIDogfCBgYXR0cmlidXRlcmVmYAogICAgICAgICAgOiB8IGBzdWJzY3JpcHRpb25gCiAgICAgICAgICA6IHwgYHNsaWNpbmdgCkBAIC0xMTUsMjEgKzExNSwyNSBAQAogQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSB0YXJnZXQgbGlzdCwgb3B0aW9uYWxseSBlbmNsb3NlZCBpbiBwYXJlbnRoZXNlcyBvcgogc3F1YXJlIGJyYWNrZXRzLCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzIGZvbGxvd3MuCiAKLSogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgc2luZ2xlIHRhcmdldDogVGhlIG9iamVjdCBpcyBhc3NpZ25lZCB0byB0aGF0IHRhcmdldC4KKyogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGVtcHR5OiBUaGUgb2JqZWN0IG11c3QgYWxzbyBiZSBhbiBlbXB0eSBpdGVyYWJsZS4KIAotKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0YXJnZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4KLSAgaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LAotICBhbmQgdGhlIGl0ZW1zIGFyZSBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLgorKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBzaW5nbGUgdGFyZ2V0IGluIHBhcmVudGhlc2VzOiBUaGUgb2JqZWN0IGlzIGFzc2lnbmVkCisgIHRvIHRoYXQgdGFyZ2V0LgorCisqIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRhcmdldHMsIG9yIGEgc2luZ2xlIHRhcmdldAorICBpbiBzcXVhcmUgYnJhY2tldHM6IFRoZSBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYWJsZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZgorICBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlIGFzc2lnbmVkLAorICBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuCiAKICAgKiBJZiB0aGUgdGFyZ2V0IGxpc3QgY29udGFpbnMgb25lIHRhcmdldCBwcmVmaXhlZCB3aXRoIGFuIGFzdGVyaXNrLCBjYWxsZWQgYQotICAgICJzdGFycmVkIiB0YXJnZXQ6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlIHdpdGggYXQgbGVhc3QgYXMgbWFueSBpdGVtcworICAgICJzdGFycmVkIiB0YXJnZXQ6IFRoZSBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYWJsZSB3aXRoIGF0IGxlYXN0IGFzIG1hbnkgaXRlbXMKICAgICBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIG1pbnVzIG9uZS4gIFRoZSBmaXJzdCBpdGVtcyBvZiB0aGUKLSAgICBzZXF1ZW5jZSBhcmUgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIHRhcmdldHMgYmVmb3JlIHRoZSBzdGFycmVkCi0gICAgdGFyZ2V0LiAgVGhlIGZpbmFsIGl0ZW1zIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQgdG8gdGhlIHRhcmdldHMgYWZ0ZXIKLSAgICB0aGUgc3RhcnJlZCB0YXJnZXQuICBBIGxpc3Qgb2YgdGhlIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgaXMgdGhlbgorICAgIGl0ZXJhYmxlIGFyZSBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgdGFyZ2V0cyBiZWZvcmUgdGhlIHN0YXJyZWQKKyAgICB0YXJnZXQuICBUaGUgZmluYWwgaXRlbXMgb2YgdGhlIGl0ZXJhYmxlIGFyZSBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0cyBhZnRlcgorICAgIHRoZSBzdGFycmVkIHRhcmdldC4gIEEgbGlzdCBvZiB0aGUgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSBpdGVyYWJsZSBpcyB0aGVuCiAgICAgYXNzaWduZWQgdG8gdGhlIHN0YXJyZWQgdGFyZ2V0ICh0aGUgbGlzdCBjYW4gYmUgZW1wdHkpLgogCi0gICogRWxzZTogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2Ugd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMgYXMgdGhlcmUKKyAgKiBFbHNlOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMgYXMgdGhlcmUKICAgICBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8KICAgICByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy4KIApAQCAtMTUwLDExICsxNTQsNiBAQAogICBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoIHplcm8sIGNhdXNpbmcgdGhlCiAgIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0IGhhcyBvbmUpIHRvIGJlIGNhbGxlZC4KIAotKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW4gc3F1YXJlIGJyYWNrZXRzOgotICBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMgYXMgdGhlcmUgYXJlCi0gIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZSBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LAotICB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLgotCiAgIC4uIGluZGV4OjogcGFpcjogYXR0cmlidXRlOyBhc3NpZ25tZW50CiAKICogSWYgdGhlIHRhcmdldCBpcyBhbiBhdHRyaWJ1dGUgcmVmZXJlbmNlOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluIHRoZQpAQCAtMjM3LDcgKzIzNiw3IEBACiAgICBwaGFzZSwgY2F1c2luZyBsZXNzIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzLgogCiBBbHRob3VnaCB0aGUgZGVmaW5pdGlvbiBvZiBhc3NpZ25tZW50IGltcGxpZXMgdGhhdCBvdmVybGFwcyBiZXR3ZWVuIHRoZQotbGVmdC1oYW5kIHNpZGUgYW5kIHRoZSByaWdodC1oYW5kIHNpZGUgYXJlICdzaW11bHRhbmVub3VzJyAoZm9yIGV4YW1wbGUgYGBhLCBiID0KK2xlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSAnc2ltdWx0YW5lb3VzJyAoZm9yIGV4YW1wbGUgYGBhLCBiID0KIGIsIGFgYCBzd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlIGNvbGxlY3Rpb24gb2YgYXNzaWduZWQtdG8KIHZhcmlhYmxlcyBvY2N1ciBsZWZ0LXRvLXJpZ2h0LCBzb21ldGltZXMgcmVzdWx0aW5nIGluIGNvbmZ1c2lvbi4gIEZvciBpbnN0YW5jZSwKIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBwcmludHMgYGBbMCwgMl1gYDo6CkBAIC0yODEsNyArMjgwLDcgQEAKIC4uIHByb2R1Y3Rpb25saXN0OjoKICAgIGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXQ6IGBhdWd0YXJnZXRgIGBhdWdvcGAgKGBleHByZXNzaW9uX2xpc3RgIHwgYHlpZWxkX2V4cHJlc3Npb25gKQogICAgYXVndGFyZ2V0OiBgaWRlbnRpZmllcmAgfCBgYXR0cmlidXRlcmVmYCB8IGBzdWJzY3JpcHRpb25gIHwgYHNsaWNpbmdgCi0gICBhdWdvcDogIis9IiB8ICItPSIgfCAiKj0iIHwgIi89IiB8ICIvLz0iIHwgIiU9IiB8ICIqKj0iCisgICBhdWdvcDogIis9IiB8ICItPSIgfCAiKj0iIHwgIkA9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IgogICAgICAgICA6IHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IgogCiAoU2VlIHNlY3Rpb24gOnJlZjpgcHJpbWFyaWVzYCBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBvZiB0aGUgbGFzdCB0aHJlZQpAQCAtMzMxLDEyICszMzAsMTIgQEAKIFRoZSBzaW1wbGUgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbmBgLCBpcyBlcXVpdmFsZW50IHRvIDo6CiAKICAgIGlmIF9fZGVidWdfXzoKLSAgICAgIGlmIG5vdCBleHByZXNzaW9uOiByYWlzZSBBc3NlcnRpb25FcnJvcgorICAgICAgIGlmIG5vdCBleHByZXNzaW9uOiByYWlzZSBBc3NlcnRpb25FcnJvcgogCiBUaGUgZXh0ZW5kZWQgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yYGAsIGlzIGVxdWl2YWxlbnQgdG8gOjoKIAogICAgaWYgX19kZWJ1Z19fOgotICAgICAgaWYgbm90IGV4cHJlc3Npb24xOiByYWlzZSBBc3NlcnRpb25FcnJvcihleHByZXNzaW9uMikKKyAgICAgICBpZiBub3QgZXhwcmVzc2lvbjE6IHJhaXNlIEFzc2VydGlvbkVycm9yKGV4cHJlc3Npb24yKQogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IF9fZGVidWdfXwpAQCAtNjYxLDcgKzY2MCw3IEBACiAKIFdoZW4gdGhlIHN0YXRlbWVudCBjb250YWlucyBtdWx0aXBsZSBjbGF1c2VzIChzZXBhcmF0ZWQgYnkKIGNvbW1hcykgdGhlIHR3byBzdGVwcyBhcmUgY2FycmllZCBvdXQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGF1c2UsIGp1c3QKLWFzIHRob3VnaCB0aGUgY2xhdXNlcyBoYWQgYmVlbiBzZXBhcmF0ZWQgb3V0IGludG8gaW5kaXZpZGl1YWwgaW1wb3J0CithcyB0aG91Z2ggdGhlIGNsYXVzZXMgaGFkIGJlZW4gc2VwYXJhdGVkIG91dCBpbnRvIGluZGl2aWR1YWwgaW1wb3J0CiBzdGF0ZW1lbnRzLgogCiBUaGUgZGV0YWlscyBvZiB0aGUgZmlyc3Qgc3RlcCwgZmluZGluZyBhbmQgbG9hZGluZyBtb2R1bGVzIGFyZSBkZXNjcmliZWQgaW4KQEAgLTg5Myw3ICs4OTIsNyBAQAogICAgbm9ubG9jYWxfc3RtdDogIm5vbmxvY2FsIiBgaWRlbnRpZmllcmAgKCIsIiBgaWRlbnRpZmllcmApKgogCiAuLiBYWFggYWRkIHdoZW4gaW1wbGVtZW50ZWQKLSAgICAgICAgICAgICAgICA6IFsiPSIgKGB0YXJnZXRfbGlzdGAgIj0iKSsgZXhwcmVzc2lvbl9saXN0XQorICAgICAgICAgICAgICAgIDogWyI9IiAoYHRhcmdldF9saXN0YCAiPSIpKyBzdGFycmVkX2V4cHJlc3Npb25dCiAgICAgICAgICAgICAgICAgOiB8ICJub25sb2NhbCIgaWRlbnRpZmllciBhdWdvcCBleHByZXNzaW9uX2xpc3QKIAogVGhlIDprZXl3b3JkOmBub25sb2NhbGAgc3RhdGVtZW50IGNhdXNlcyB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIHRvIHJlZmVyIHRvCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvZXh0ZW5zaW9ucy9weXNwZWNpZmljLnB5IGIvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvcHlzcGVjaWZpYy5weQppbmRleCA2NGE1NjY1Li42MzExMjgzIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvZXh0ZW5zaW9ucy9weXNwZWNpZmljLnB5CisrKyBiL0RvYy90b29scy9leHRlbnNpb25zL3B5c3BlY2lmaWMucHkKQEAgLTM0LDcgKzM0LDcgQEAKIAogCiBJU1NVRV9VUkkgPSAnaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUlcycKLVNPVVJDRV9VUkkgPSAnaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vZmlsZS8zLjQvJXMnCitTT1VSQ0VfVVJJID0gJ2h0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2ZpbGUvMy41LyVzJwogCiAjIG1vbmtleS1wYXRjaCByZVNUIHBhcnNlciB0byBkaXNhYmxlIGFscGhhYmV0aWMgYW5kIHJvbWFuIGVudW1lcmF0ZWQgbGlzdHMKIGZyb20gZG9jdXRpbHMucGFyc2Vycy5yc3Quc3RhdGVzIGltcG9ydCBCb2R5CkBAIC0xNjQsNiArMTY0LDE5IEBACiAgICAgICAgIHJldHVybiBQeUNsYXNzbWVtYmVyLnJ1bihzZWxmKQogCiAKK2NsYXNzIFB5QWJzdHJhY3RNZXRob2QoUHlDbGFzc21lbWJlcik6CisKKyAgICBkZWYgaGFuZGxlX3NpZ25hdHVyZShzZWxmLCBzaWcsIHNpZ25vZGUpOgorICAgICAgICByZXQgPSBzdXBlcihQeUFic3RyYWN0TWV0aG9kLCBzZWxmKS5oYW5kbGVfc2lnbmF0dXJlKHNpZywgc2lnbm9kZSkKKyAgICAgICAgc2lnbm9kZS5pbnNlcnQoMCwgYWRkbm9kZXMuZGVzY19hbm5vdGF0aW9uKCdhYnN0cmFjdG1ldGhvZCAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic3RyYWN0bWV0aG9kICcpKQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAncHk6bWV0aG9kJworICAgICAgICByZXR1cm4gUHlDbGFzc21lbWJlci5ydW4oc2VsZikKKworCiAjIFN1cHBvcnQgZm9yIGRvY3VtZW50aW5nIHZlcnNpb24gb2YgcmVtb3ZhbCBpbiBkZXByZWNhdGlvbnMKIAogY2xhc3MgRGVwcmVjYXRlZFJlbW92ZWQoRGlyZWN0aXZlKToKQEAgLTM2OCw1ICszODEsNiBAQAogICAgIGFwcC5hZGRfZGlyZWN0aXZlX3RvX2RvbWFpbigncHknLCAnZGVjb3JhdG9ybWV0aG9kJywgUHlEZWNvcmF0b3JNZXRob2QpCiAgICAgYXBwLmFkZF9kaXJlY3RpdmVfdG9fZG9tYWluKCdweScsICdjb3JvdXRpbmVmdW5jdGlvbicsIFB5Q29yb3V0aW5lRnVuY3Rpb24pCiAgICAgYXBwLmFkZF9kaXJlY3RpdmVfdG9fZG9tYWluKCdweScsICdjb3JvdXRpbmVtZXRob2QnLCBQeUNvcm91dGluZU1ldGhvZCkKKyAgICBhcHAuYWRkX2RpcmVjdGl2ZV90b19kb21haW4oJ3B5JywgJ2Fic3RyYWN0bWV0aG9kJywgUHlBYnN0cmFjdE1ldGhvZCkKICAgICBhcHAuYWRkX2RpcmVjdGl2ZSgnbWlzY25ld3MnLCBNaXNjTmV3cykKICAgICByZXR1cm4geyd2ZXJzaW9uJzogJzEuMCcsICdwYXJhbGxlbF9yZWFkX3NhZmUnOiBUcnVlfQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvc3VzcGljaW91cy5weSBiL0RvYy90b29scy9leHRlbnNpb25zL3N1c3BpY2lvdXMucHkKaW5kZXggZDNlZDg0OS4uMGE3MGU1NyAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvc3VzcGljaW91cy5weQorKysgYi9Eb2MvdG9vbHMvZXh0ZW5zaW9ucy9zdXNwaWNpb3VzLnB5CkBAIC0yNzAsNSArMjcwLDUgQEAKICAgICAgICAgIyBpZ25vcmUgY29tbWVudHMgLS0gdG9vIG11Y2ggZmFsc2UgcG9zaXRpdmVzLgogICAgICAgICAjIChhbHRob3VnaCBkb2luZyB0aGlzIGNvdWxkIG1pc3Mgc29tZSBlcnJvcnM7CiAgICAgICAgICMgdGhlcmUgd2VyZSB0d28gc2VjdGlvbnMgImNvbW1lbnRlZC1vdXQiIGJ5IG1pc3Rha2UKLSAgICAgICAgIyBpbiB0aGUgUHl0aG9uIGRvY3MgdGhhdCB3b3VsZCBub3QgYmUgY2F0Y2hlZCkKKyAgICAgICAgIyBpbiB0aGUgUHl0aG9uIGRvY3MgdGhhdCB3b3VsZCBub3QgYmUgY2F1Z2h0KQogICAgICAgICByYWlzZSBub2Rlcy5Ta2lwTm9kZQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3B5ZG9jdGhlbWUvc3RhdGljL3B5ZG9jdGhlbWUuY3NzIGIvRG9jL3Rvb2xzL3B5ZG9jdGhlbWUvc3RhdGljL3B5ZG9jdGhlbWUuY3NzCmluZGV4IDUwODM1YmIuLmUyNDA0M2YgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9weWRvY3RoZW1lL3N0YXRpYy9weWRvY3RoZW1lLmNzcworKysgYi9Eb2MvdG9vbHMvcHlkb2N0aGVtZS9zdGF0aWMvcHlkb2N0aGVtZS5jc3MKQEAgLTE3NiwzICsxNzYsOCBAQAogLnN0YWJsZWFiaSB7CiAgICAgY29sb3I6ICMyMjk7CiB9CisKKy5oaWdobGlnaHQgeworICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsKK30KKwpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3JzdGxpbnQucHkgYi9Eb2MvdG9vbHMvcnN0bGludC5weQppbmRleCA3ZGNjZjcyLi5kZTc4MDQxIDEwMDc1NQotLS0gYS9Eb2MvdG9vbHMvcnN0bGludC5weQorKysgYi9Eb2MvdG9vbHMvcnN0bGludC5weQpAQCAtNDMsNyArNDMsNyBAQAogXQogCiBhbGxfZGlyZWN0aXZlcyA9ICcoJyArICd8Jy5qb2luKGRpcmVjdGl2ZXMpICsgJyknCi1zZWVtc19kaXJlY3RpdmVfcmUgPSByZS5jb21waWxlKHInXC5cLiAlcyhbXmEtejpdfDooPyE6KSknICUgYWxsX2RpcmVjdGl2ZXMpCitzZWVtc19kaXJlY3RpdmVfcmUgPSByZS5jb21waWxlKHInKD88IVwuKVwuXC4gJXMoW15hLXo6XXw6KD8hOikpJyAlIGFsbF9kaXJlY3RpdmVzKQogZGVmYXVsdF9yb2xlX3JlID0gcmUuY29tcGlsZShyJyhefCApYFx3KFteYF0qP1x3KT9gKCR8ICknKQogbGVha2VkX21hcmt1cF9yZSA9IHJlLmNvbXBpbGUocidbYS16XTo6XHN8YHxcLlwuXHMqXHcrOicpCiAKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAiIiJDaGVjayBmb3Igc3VzcGljaW91cyByZVNUIGNvbnN0cnVjdHMuIiIiCiAgICAgaW5wcm9kID0gRmFsc2UKICAgICBmb3IgbG5vLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcyk6Ci0gICAgICAgIGlmIHNlZW1zX2RpcmVjdGl2ZV9yZS5tYXRjaChsaW5lKToKKyAgICAgICAgaWYgc2VlbXNfZGlyZWN0aXZlX3JlLnNlYXJjaChsaW5lKToKICAgICAgICAgICAgIHlpZWxkIGxubysxLCAnY29tbWVudCBzZWVtcyB0byBiZSBpbnRlbmRlZCBhcyBhIGRpcmVjdGl2ZScKICAgICAgICAgaWYgJy4uIHByb2R1Y3Rpb25saXN0OjonIGluIGxpbmU6CiAgICAgICAgICAgICBpbnByb2QgPSBUcnVlCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3VzcC1pZ25vcmVkLmNzdiBiL0RvYy90b29scy9zdXNwLWlnbm9yZWQuY3N2CmluZGV4IDAzMjUzMWQuLmRiYTkzYmYgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zdXNwLWlnbm9yZWQuY3N2CisrKyBiL0RvYy90b29scy9zdXNwLWlnbm9yZWQuY3N2CkBAIC04Miw3ICs4Miw3IEBACiBob3d0by9weXBvcnRpbmcsLDo6LFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzCiBob3d0by9yZWdleCwsOjosCiBob3d0by9yZWdleCwsOmZvbywoPzpmb28pCi1ob3d0by91cmxsaWIyLCw6ZXhhbXBsZSwiZm9yIGV4YW1wbGUgIiJqb2VAcGFzc3dvcmQ6ZXhhbXBsZS5jb20iIiIKK2hvd3RvL3VybGxpYjIsLDpwYXNzd29yZCwiZm9yIGV4YW1wbGUgIiJqb2U6cGFzc3dvcmRAZXhhbXBsZS5jb20iIiIKIGxpYnJhcnkvYXVkaW9vcCwsOmlwb3MsIiMgZmFjdG9yID0gYXVkaW9vcC5maW5kZmFjdG9yKGluX3Rlc3RbaXBvcyoyOmlwb3MqMitsZW4ob3V0X3Rlc3QpXSwiCiBsaWJyYXJ5L2Jpc2VjdCwzMiw6aGksYWxsKHZhbCA+PSB4IGZvciB2YWwgaW4gYVtpOmhpXSkKIGxpYnJhcnkvYmlzZWN0LDQyLDpoaSxhbGwodmFsID4geCBmb3IgdmFsIGluIGFbaTpoaV0pCkBAIC0xMjEsNiArMTIxLDggQEAKIGxpYnJhcnkvaXBhZGRyZXNzLCw6Oiw+Pj4gaXBhZGRyZXNzLklQdjZBZGRyZXNzKCcyMDAxOmRiODo6MTAwMCcpCiBsaWJyYXJ5L2lwYWRkcmVzcywsOmRiOCxJUHY2QWRkcmVzcygnMjAwMTpkYjg6OjEwMDAnKQogbGlicmFyeS9pcGFkZHJlc3MsLDo6LElQdjZBZGRyZXNzKCcyMDAxOmRiODo6MTAwMCcpCitsaWJyYXJ5L2lwYWRkcmVzcywsOmRiOCwiPj4+IGlwYWRkcmVzcy5pcF9hZGRyZXNzKCIiMjAwMTpkYjg6OjEiIikucmV2ZXJzZV9wb2ludGVyIgorbGlicmFyeS9pcGFkZHJlc3MsLDo6LCI+Pj4gaXBhZGRyZXNzLmlwX2FkZHJlc3MoIiIyMDAxOmRiODo6MSIiKS5yZXZlcnNlX3BvaW50ZXIiCiBsaWJyYXJ5L2lwYWRkcmVzcywsOjosIiIiOjphYmM6NzpkZWYiIiIKIGxpYnJhcnkvaXBhZGRyZXNzLCw6ZGVmLCIiIjo6YWJjOjc6ZGVmIiIiCiBsaWJyYXJ5L2lwYWRkcmVzcywsOjosOjpGRkZGLzk2CkBAIC0xMzgsOCArMTQwLDYgQEAKIGxpYnJhcnkvbG9nZ2luZy5oYW5kbGVycywsOnBvcnQsaG9zdDpwb3J0CiBsaWJyYXJ5L21tYXAsLDppMixvYmpbaTE6aTJdCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIEFkZCBtb3JlIHRhc2tzIHVzaW5nIGBwdXQoKWAKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoMjAsKSkgICAgICMgZXF1aXYgdG8gYGxbMjBdYCIKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoc2xpY2UoMiwgNyksKSkgICMgZXF1aXYgdG8gYGxbMjo3XWAiCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsOnF1ZXVlLCI+Pj4gUXVldWVNYW5hZ2VyLnJlZ2lzdGVyKCdnZXRfcXVldWUnLCBjYWxsYWJsZT1sYW1iZGE6cXVldWUpIgogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyByZWdpc3RlciB0aGUgRm9vIGNsYXNzOyBtYWtlIGBmKClgIGFuZCBgZygpYCBhY2Nlc3NpYmxlIHZpYSBwcm94eQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyByZWdpc3RlciB0aGUgRm9vIGNsYXNzOyBtYWtlIGBnKClgIGFuZCBgX2goKWAgYWNjZXNzaWJsZSB2aWEgcHJveHkKQEAgLTE3Niw4ICsxNzYsNiBAQAogbGlicmFyeS9zc2wsLDpvcHMsRW1haWwgQWRkcmVzcyBbXTpvcHNAbXlzZXJ2ZXIubXlncm91cC5teW9yZ2FuaXphdGlvbi5jb20KIGxpYnJhcnkvc3NsLCw6U29tZSwiTG9jYWxpdHkgTmFtZSAoZWcsIGNpdHkpIFtdOlNvbWUgQ2l0eSIKIGxpYnJhcnkvc3NsLCw6VVMsQ291bnRyeSBOYW1lICgyIGxldHRlciBjb2RlKSBbQVVdOlVTCi1saWJyYXJ5L3N0ZHR5cGVzLCw6Oiw+Pj4gYVs6Oi0xXS50b2xpc3QoKQotbGlicmFyeS9zdGR0eXBlcywsOjosPj4+IGFbOjoyXS50b2xpc3QoKQogbGlicmFyeS9zdGR0eXBlcywsOmVuZCxzW3N0YXJ0OmVuZF0KIGxpYnJhcnkvc3RkdHlwZXMsLDo6LD4+PiBoYXNoKHZbOjotMl0pID09IGhhc2goYidhYmNlZmcnWzo6LTJdKQogbGlicmFyeS9zdGR0eXBlcywsOmxlbixzW2xlbihzKTpsZW4ocyldCkBAIC0yMDAsNiArMTk4LDcgQEAKIGxpYnJhcnkvdW5pdHRlc3QsLDpmb28sJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKIGxpYnJhcnkvdW5pdHRlc3QsLDpzZWNvbmQsJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpjbG9zZSxDb25uZWN0aW9uOmNsb3NlCitsaWJyYXJ5L3VybGxpYi5yZXF1ZXN0LCw6cG9ydCw6cG9ydAogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmxhbmcsInhtbG5zPSIiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIiIHhtbDpsYW5nPSIiZW4iIiBsYW5nPSIiZW4iIj5cblxuPGhlYWQ+XG4iCiBsaWJyYXJ5L3VybGxpYi5yZXF1ZXN0LCw6cGFzc3dvcmQsIiIiam9lOnBhc3N3b3JkQHB5dGhvbi5vcmciIiIKIGxpYnJhcnkvdXVpZCwsOnV1aWQsdXJuOnV1aWQ6MTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4CkBAIC0yMDcsMTYgKzIwNiw2IEBACiBsaWJyYXJ5L3ZlbnYsLDpwYXJhbSwiOnBhcmFtIHByb2dyZXNzOiBJZiBzZXR1cHRvb2xzIG9yIHBpcCBhcmUgaW5zdGFsbGVkLCB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIgogbGlicmFyeS92ZW52LCw6cGFyYW0sIjpwYXJhbSBub3BpcDogSWYgVHJ1ZSwgcGlwIGlzIG5vdCBpbnN0YWxsZWQgaW50byB0aGUgY3JlYXRlZCIKIGxpYnJhcnkvdmVudiwsOnBhcmFtLDpwYXJhbSBjb250ZXh0OiBUaGUgaW5mb3JtYXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudCBjcmVhdGlvbiByZXF1ZXN0Ci1saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOnNvbWV0YWcscHJlZml4OnNvbWV0YWcKLWxpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6ZmljdGlvbmFsLCI8YWN0b3JzIHhtbG5zOmZpY3Rpb25hbD0iImh0dHA6Ly9jaGFyYWN0ZXJzLmV4YW1wbGUuY29tIiIiCi1saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3Rlciw8ZmljdGlvbmFsOmNoYXJhY3Rlcj5MYW5jZWxvdDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KLWxpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkFyY2hpZSBMZWFjaDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KLWxpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPlNpciBSb2JpbjwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KLWxpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkd1bnRoZXI8L2ZpY3Rpb25hbDpjaGFyYWN0ZXI+Ci1saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3Rlciw8ZmljdGlvbmFsOmNoYXJhY3Rlcj5Db21tYW5kZXIgQ2xlbWVudDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KLWxpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6YWN0b3IsImZvciBhY3RvciBpbiByb290LmZpbmRhbGwoJ3JlYWxfcGVyc29uOmFjdG9yJywgbnMpOiIKLWxpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6bmFtZSwibmFtZSA9IGFjdG9yLmZpbmQoJ3JlYWxfcGVyc29uOm5hbWUnLCBucykiCi1saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3RlciwiZm9yIGNoYXIgaW4gYWN0b3IuZmluZGFsbCgncm9sZTpjaGFyYWN0ZXInLCBucyk6IgogbGlicmFyeS94bWxycGMuY2xpZW50LCw6cGFzcyxodHRwOi8vdXNlcjpwYXNzQGhvc3Q6cG9ydC9wYXRoCiBsaWJyYXJ5L3htbHJwYy5jbGllbnQsLDpwYXNzLHVzZXI6cGFzcwogbGlicmFyeS94bWxycGMuY2xpZW50LCw6cG9ydCxodHRwOi8vdXNlcjpwYXNzQGhvc3Q6cG9ydC9wYXRoCkBAIC0yNDMsMTQgKzIzMiwxMyBAQAogdHV0b3JpYWwvc3RkbGliMiwsOnN0YXJ0LCJmaWVsZHMgPSBzdHJ1Y3QudW5wYWNrKCc8SUlJSEgnLCBkYXRhW3N0YXJ0OnN0YXJ0KzE2XSkiCiB0dXRvcmlhbC9zdGRsaWIyLCw6c3RhcnQsZmlsZW5hbWUgPSBkYXRhW3N0YXJ0OnN0YXJ0K2ZpbGVuYW1lc2l6ZV0KIHR1dG9yaWFsL3N0ZGxpYjIsLDpXYXJuaW5nLFdBUk5JTkc6cm9vdDpXYXJuaW5nOmNvbmZpZyBmaWxlIHNlcnZlci5jb25mIG5vdCBmb3VuZAotdHV0b3JpYWwvdmVudiwsOmM3Yjk2NDVhNmYzNSwiUHl0aG9uIDMuNC4zKyAoMy40OmM3Yjk2NDVhNmYzNSssIE1heSAyMiAyMDE1LCAwOTozMToyNSkiCiB1c2luZy9jbWRsaW5lLCw6Y2F0ZWdvcnksYWN0aW9uOm1lc3NhZ2U6Y2F0ZWdvcnk6bW9kdWxlOmxpbmUKIHVzaW5nL2NtZGxpbmUsLDplcnJvcmhhbmRsZXIsOmVycm9yaGFuZGxlcgogdXNpbmcvY21kbGluZSwsOmxpbmUsYWN0aW9uOm1lc3NhZ2U6Y2F0ZWdvcnk6bW9kdWxlOmxpbmUKIHVzaW5nL2NtZGxpbmUsLDpsaW5lLGZpbGU6bGluZTogY2F0ZWdvcnk6IG1lc3NhZ2UKIHVzaW5nL2NtZGxpbmUsLDptZXNzYWdlLGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lCiB1c2luZy9jbWRsaW5lLCw6bW9kdWxlLGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lCi11c2luZy91bml4LCw6UGFja2FnaW5nLGh0dHA6Ly9lbi5vcGVuc3VzZS5vcmcvUG9ydGFsOlBhY2thZ2luZwordXNpbmcvdW5peCwsOlBhY2thZ2luZyxodHRwczovL2VuLm9wZW5zdXNlLm9yZy9Qb3J0YWw6UGFja2FnaW5nCiB3aGF0c25ldy8yLjAsNDE4LDpsZW4sCiB3aGF0c25ldy8yLjMsLDo6LAogd2hhdHNuZXcvMi4zLCw6Y29uZmlnLApAQCAtMjY0LDYgKzI1MiwxMSBAQAogd2hhdHNuZXcvMi41LCw6bWVtb3J5LDptZW1vcnk6CiB3aGF0c25ldy8yLjUsLDpzdGVwLFtzdGFydDpzdG9wOnN0ZXBdCiB3aGF0c25ldy8yLjUsLDpzdG9wLFtzdGFydDpzdG9wOnN0ZXBdCit3aGF0c25ldy8yLjcsLDo6LCJQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLCBuZXRsb2M9J1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdJywiCit3aGF0c25ldy8yLjcsLDo6LD4+PiB1cmxwYXJzZS51cmxwYXJzZSgnaHR0cDovL1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdL2ZvbycpCit3aGF0c25ldy8yLjcsLDpTdW5kYXksJzIwMDk6NDpTdW5kYXknCit3aGF0c25ldy8yLjcsLDpDb29raWUsImV4cG9ydCBQWVRIT05XQVJOSU5HUz1hbGwsZXJyb3I6OjpDb29raWU6MCIKK3doYXRzbmV3LzIuNywsOjosImV4cG9ydCBQWVRIT05XQVJOSU5HUz1hbGwsZXJyb3I6OjpDb29raWU6MCIKIHdoYXRzbmV3LzMuMiwsOmFmZmUsIm5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLCIKIHdoYXRzbmV3LzMuMiwsOmFmZmUsPj4+IHVybGxpYi5wYXJzZS51cmxwYXJzZSgnaHR0cDovL1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdL2Zvby8nKQogd2hhdHNuZXcvMy4yLCw6YmVlZiwibmV0bG9jPSdbZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXScsIgpAQCAtMjc5LDE0ICsyNzIsMjcgQEAKIHdoYXRzbmV3LzMuMiwsOmd6LCI+Pj4gd2l0aCB0YXJmaWxlLm9wZW4obmFtZT0nbXlhcmNoaXZlLnRhci5neicsIG1vZGU9J3c6Z3onKSBhcyB0ZjoiCiB3aGF0c25ldy8zLjIsLDpsb2NhdGlvbix6b3BlOS1sb2NhdGlvbiA9ICR7em9wZTk6bG9jYXRpb259CiB3aGF0c25ldy8zLjIsLDpwcmVmaXgsem9wZS1jb25mID0gJHtjdXN0b206cHJlZml4fS9ldGMvem9wZS5jb25mCi13aGF0c25ldy9jaGFuZ2Vsb2csLDpwbGF0Zm9ybSw6cGxhdGZvcm06CiB3aGF0c25ldy9jaGFuZ2Vsb2csLDpneiwiOiBUYXJGaWxlIG9wZW5lZCB3aXRoIGV4dGVybmFsIGZpbGVvYmogYW5kICIidzpneiIiIG1vZGUgZGlkbid0Igotd2hhdHNuZXcvY2hhbmdlbG9nLCw6UHl0aG9uQ21kLCJXaXRoIFRrIDwgOC41IF90a2ludGVyLmM6UHl0aG9uQ21kKCkgcmFpc2VkIFVuaWNvZGVEZWNvZGVFcnJvciwgY2F1c2VkIgotd2hhdHNuZXcvY2hhbmdlbG9nLCw6OiwiOiBGaXggRlRQIHRlc3RzIGZvciBJUHY2LCBiaW5kIHRvICIiOjoxIiIgaW5zdGVhZCBvZiAiImxvY2FsaG9zdCIiLiIKIHdoYXRzbmV3L2NoYW5nZWxvZywsOjosIjogVXNlICIiMTI3LjAuMC4xIiIgb3IgIiI6OjEiIiBpbnN0ZWFkIG9mICIibG9jYWxob3N0IiIgYXMgbXVjaCBhcyIKLXdoYXRzbmV3L2NoYW5nZWxvZywsOnBhc3N3b3JkLHVzZXI6cGFzc3dvcmQKLXdoYXRzbmV3LzIuNyw3ODAsOlN1bmRheSwnMjAwOTo0OlN1bmRheScKLXdoYXRzbmV3LzIuNyw5MDcsOjosImV4cG9ydCBQWVRIT05XQVJOSU5HUz1hbGwsZXJyb3I6OjpDb29raWU6MCIKLXdoYXRzbmV3LzIuNyw5MDcsOkNvb2tpZSwiZXhwb3J0IFBZVEhPTldBUk5JTkdTPWFsbCxlcnJvcjo6OkNvb2tpZTowIgotd2hhdHNuZXcvMi43LDE2NTcsOjosPj4+IHVybHBhcnNlLnVybHBhcnNlKCdodHRwOi8vWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0vZm9vJykKLXdoYXRzbmV3LzIuNywxNjU3LDo6LCJQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLCBuZXRsb2M9J1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdJywiCitsaWJyYXJ5L3RhcmZpbGUsMTQ5LDp4eiwneDp4eicKK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLDI5MCw6c29tZXRhZyxwcmVmaXg6c29tZXRhZworbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUsMzAxLDpmaWN0aW9uYWwsIjxhY3RvcnMgeG1sbnM6ZmljdGlvbmFsPSIiaHR0cDovL2NoYXJhY3RlcnMuZXhhbXBsZS5jb20iIiIKK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLDMwMSw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkxhbmNlbG90PC9maWN0aW9uYWw6Y2hhcmFjdGVyPgorbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUsMzAxLDpjaGFyYWN0ZXIsPGZpY3Rpb25hbDpjaGFyYWN0ZXI+QXJjaGllIExlYWNoPC9maWN0aW9uYWw6Y2hhcmFjdGVyPgorbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUsMzAxLDpjaGFyYWN0ZXIsPGZpY3Rpb25hbDpjaGFyYWN0ZXI+U2lyIFJvYmluPC9maWN0aW9uYWw6Y2hhcmFjdGVyPgorbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUsMzAxLDpjaGFyYWN0ZXIsPGZpY3Rpb25hbDpjaGFyYWN0ZXI+R3VudGhlcjwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLDMwMSw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkNvbW1hbmRlciBDbGVtZW50PC9maWN0aW9uYWw6Y2hhcmFjdGVyPgorbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUsLDphY3RvciwiZm9yIGFjdG9yIGluIHJvb3QuZmluZGFsbCgncmVhbF9wZXJzb246YWN0b3InLCBucyk6IgorbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUsLDpuYW1lLCJuYW1lID0gYWN0b3IuZmluZCgncmVhbF9wZXJzb246bmFtZScsIG5zKSIKK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLCJmb3IgY2hhciBpbiBhY3Rvci5maW5kYWxsKCdyb2xlOmNoYXJhY3RlcicsIG5zKToiCitsaWJyYXJ5L3ppcGFwcCwzMSw6bWFpbiwiJCBweXRob24gLW0gemlwYXBwIG15YXBwIC1tICIibXlhcHA6bWFpbiIiIgorbGlicmFyeS96aXBhcHAsODIsOmZuLCJhcmd1bWVudCBzaG91bGQgaGF2ZSB0aGUgZm9ybSAiInBrZy5tb2Q6Zm4iIiwgd2hlcmUgIiJwa2cubW9kIiIgaXMgYSIKK2xpYnJhcnkvemlwYXBwLDE1NSw6Y2FsbGFibGUsIiIicGtnLm1vZHVsZTpjYWxsYWJsZSIiIGFuZCB0aGUgYXJjaGl2ZSB3aWxsIGJlIHJ1biBieSBpbXBvcnRpbmciCitsaWJyYXJ5L3N0ZHR5cGVzLCw6Oiw+Pj4gbVs6OjJdLnRvbGlzdCgpCitsaWJyYXJ5L3N5cywsYCwjIGBgd3JhcHBlcmBgIGNyZWF0ZXMgYSBgYHdyYXAoY29ybylgYCBjb3JvdXRpbmU6Cit0dXRvcmlhbC92ZW52LDc3LDpjN2I5NjQ1YTZmMzUsIlB5dGhvbiAzLjQuMysgKDMuNDpjN2I5NjQ1YTZmMzUrLCBNYXkgMjIgMjAxNSwgMDk6MzE6MjUpIgord2hhdHNuZXcvMy41LCw6cm9vdCwnV0FSTklORzpyb290Ondhcm5pbmdcbicKK3doYXRzbmV3LzMuNSwsOndhcm5pbmcsJ1dBUk5JTkc6cm9vdDp3YXJuaW5nXG4nCit3aGF0c25ldy8zLjUsLDo6LD4+PiBhZGRyNiA9IGlwYWRkcmVzcy5JUHY2QWRkcmVzcygnOjoxJykKK3doYXRzbmV3LzMuNSwsOnJvb3QsRVJST1I6cm9vdDpleGNlcHRpb24KK3doYXRzbmV3LzMuNSwsOmV4Y2VwdGlvbixFUlJPUjpyb290OmV4Y2VwdGlvbgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3RlbXBsYXRlcy9pbmRleGNvbnRlbnQuaHRtbCBiL0RvYy90b29scy90ZW1wbGF0ZXMvaW5kZXhjb250ZW50Lmh0bWwKaW5kZXggOTY5MDk5YS4uMTA3NmMxZiAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3RlbXBsYXRlcy9pbmRleGNvbnRlbnQuaHRtbAorKysgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4Y29udGVudC5odG1sCkBAIC0xLDU5ICsxLDU5IEBACiB7JSBleHRlbmRzICJkZWZpbmRleC5odG1sIiAlfQogeyUgYmxvY2sgdGFibGVzICV9Ci0gIDxwPjxzdHJvbmc+UGFydHMgb2YgdGhlIGRvY3VtZW50YXRpb246PC9zdHJvbmc+PC9wPgorICA8cD48c3Ryb25nPnslIHRyYW5zICV9UGFydHMgb2YgdGhlIGRvY3VtZW50YXRpb246eyUgZW5kdHJhbnMgJX08L3N0cm9uZz48L3A+CiAgIDx0YWJsZSBjbGFzcz0iY29udGVudHN0YWJsZSIgYWxpZ249ImNlbnRlciI+PHRyPgogICAgIDx0ZCB3aWR0aD0iNTAlIj4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJ3aGF0c25ldy8iICsgdmVyc2lvbikgfX0iPldoYXQncyBuZXcgaW4gUHl0aG9uIHt7IHZlcnNpb24gfX0/PC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5vciA8YSBocmVmPSJ7eyBwYXRodG8oIndoYXRzbmV3L2luZGV4IikgfX0iPmFsbCAiV2hhdCdzIG5ldyIgZG9jdW1lbnRzPC9hPiBzaW5jZSAyLjA8L3NwYW4+PC9wPgotICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInR1dG9yaWFsL2luZGV4IikgfX0iPlR1dG9yaWFsPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5zdGFydCBoZXJlPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJsaWJyYXJ5L2luZGV4IikgfX0iPkxpYnJhcnkgUmVmZXJlbmNlPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5rZWVwIHRoaXMgdW5kZXIgeW91ciBwaWxsb3c8L3NwYW4+PC9wPgotICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInJlZmVyZW5jZS9pbmRleCIpIH19Ij5MYW5ndWFnZSBSZWZlcmVuY2U8L2E+PGJyLz4KLSAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPmRlc2NyaWJlcyBzeW50YXggYW5kIGxhbmd1YWdlIGVsZW1lbnRzPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJ1c2luZy9pbmRleCIpIH19Ij5QeXRob24gU2V0dXAgYW5kIFVzYWdlPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5ob3cgdG8gdXNlIFB5dGhvbiBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJob3d0by9pbmRleCIpIH19Ij5QeXRob24gSE9XVE9zPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5pbi1kZXB0aCBkb2N1bWVudHMgb24gc3BlY2lmaWMgdG9waWNzPC9zcGFuPjwvcD4KKyAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJ3aGF0c25ldy8iICsgdmVyc2lvbikgfX0iPnslIHRyYW5zICV9V2hhdCdzIG5ldyBpbiBQeXRob24ge3sgdmVyc2lvbiB9fT97JSBlbmR0cmFucyAlfTwvYT48YnIvPgorICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj4geyUgdHJhbnMgd2hhdHNuZXdfaW5kZXg9cGF0aHRvKCJ3aGF0c25ldy9pbmRleCIpICV9b3IgPGEgaHJlZj0ie3sgd2hhdHNuZXdfaW5kZXggfX0iPmFsbCAiV2hhdCdzIG5ldyIgZG9jdW1lbnRzPC9hPiBzaW5jZSAyLjB7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygidHV0b3JpYWwvaW5kZXgiKSB9fSI+eyUgdHJhbnMgJX1UdXRvcmlhbHslIGVuZHRyYW5zICV9PC9hPjxici8+CisgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj57JSB0cmFucyAlfXN0YXJ0IGhlcmV7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygibGlicmFyeS9pbmRleCIpIH19Ij57JSB0cmFucyAlfUxpYnJhcnkgUmVmZXJlbmNleyUgZW5kdHJhbnMgJX08L2E+PGJyLz4KKyAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnslIHRyYW5zICV9a2VlcCB0aGlzIHVuZGVyIHlvdXIgcGlsbG93eyUgZW5kdHJhbnMgJX08L3NwYW4+PC9wPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInJlZmVyZW5jZS9pbmRleCIpIH19Ij57JSB0cmFucyAlfUxhbmd1YWdlIFJlZmVyZW5jZXslIGVuZHRyYW5zICV9PC9hPjxici8+CisgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj57JSB0cmFucyAlfWRlc2NyaWJlcyBzeW50YXggYW5kIGxhbmd1YWdlIGVsZW1lbnRzeyUgZW5kdHJhbnMgJX08L3NwYW4+PC9wPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInVzaW5nL2luZGV4IikgfX0iPnslIHRyYW5zICV9UHl0aG9uIFNldHVwIGFuZCBVc2FnZXslIGVuZHRyYW5zICV9PC9hPjxici8+CisgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj57JSB0cmFucyAlfWhvdyB0byB1c2UgUHl0aG9uIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXN7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiaG93dG8vaW5kZXgiKSB9fSI+eyUgdHJhbnMgJX1QeXRob24gSE9XVE9zeyUgZW5kdHJhbnMgJX08L2E+PGJyLz4KKyAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnslIHRyYW5zICV9aW4tZGVwdGggZG9jdW1lbnRzIG9uIHNwZWNpZmljIHRvcGljc3slIGVuZHRyYW5zICV9PC9zcGFuPjwvcD4KICAgICA8L3RkPjx0ZCB3aWR0aD0iNTAlIj4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJpbnN0YWxsaW5nL2luZGV4IikgfX0iPkluc3RhbGxpbmcgUHl0aG9uIE1vZHVsZXM8L2E+PGJyLz4KLSAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPmluc3RhbGxpbmcgZnJvbSB0aGUgUHl0aG9uIFBhY2thZ2UgSW5kZXggJmFtcDsgb3RoZXIgc291cmNlczwvc3Bhbj48L3A+Ci0gICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZGlzdHJpYnV0aW5nL2luZGV4IikgfX0iPkRpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlczwvYT48YnIvPgotICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+cHVibGlzaGluZyBtb2R1bGVzIGZvciBpbnN0YWxsYXRpb24gYnkgb3RoZXJzPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJleHRlbmRpbmcvaW5kZXgiKSB9fSI+RXh0ZW5kaW5nIGFuZCBFbWJlZGRpbmc8L2E+PGJyLz4KLSAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnR1dG9yaWFsIGZvciBDL0MrKyBwcm9ncmFtbWVyczwvc3Bhbj48L3A+Ci0gICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiYy1hcGkvaW5kZXgiKSB9fSI+UHl0aG9uL0MgQVBJPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5yZWZlcmVuY2UgZm9yIEMvQysrIHByb2dyYW1tZXJzPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJmYXEvaW5kZXgiKSB9fSI+RkFRczwvYT48YnIvPgotICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+ZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMgKHdpdGggYW5zd2VycyEpPC9zcGFuPjwvcD4KKyAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJpbnN0YWxsaW5nL2luZGV4IikgfX0iPnslIHRyYW5zICV9SW5zdGFsbGluZyBQeXRob24gTW9kdWxlc3slIGVuZHRyYW5zICV9PC9hPjxici8+CisgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj57JSB0cmFucyAlfWluc3RhbGxpbmcgZnJvbSB0aGUgUHl0aG9uIFBhY2thZ2UgSW5kZXggJmFtcDsgb3RoZXIgc291cmNlc3slIGVuZHRyYW5zICV9PC9zcGFuPjwvcD4KKyAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJkaXN0cmlidXRpbmcvaW5kZXgiKSB9fSI+eyUgdHJhbnMgJX1EaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXN7JSBlbmR0cmFucyAlfTwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+eyUgdHJhbnMgJX1wdWJsaXNoaW5nIG1vZHVsZXMgZm9yIGluc3RhbGxhdGlvbiBieSBvdGhlcnN7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZXh0ZW5kaW5nL2luZGV4IikgfX0iPnslIHRyYW5zICV9RXh0ZW5kaW5nIGFuZCBFbWJlZGRpbmd7JSBlbmR0cmFucyAlfTwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+eyUgdHJhbnMgJX10dXRvcmlhbCBmb3IgQy9DKysgcHJvZ3JhbW1lcnN7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiYy1hcGkvaW5kZXgiKSB9fSI+eyUgdHJhbnMgJX1QeXRob24vQyBBUEl7JSBlbmR0cmFucyAlfTwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+eyUgdHJhbnMgJX1yZWZlcmVuY2UgZm9yIEMvQysrIHByb2dyYW1tZXJzeyUgZW5kdHJhbnMgJX08L3NwYW4+PC9wPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImZhcS9pbmRleCIpIH19Ij57JSB0cmFucyAlfUZBUXN7JSBlbmR0cmFucyAlfTwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+eyUgdHJhbnMgJX1mcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyAod2l0aCBhbnN3ZXJzISl7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CiAgICAgPC90ZD48L3RyPgogICA8L3RhYmxlPgogCi0gIDxwPjxzdHJvbmc+SW5kaWNlcyBhbmQgdGFibGVzOjwvc3Ryb25nPjwvcD4KKyAgPHA+PHN0cm9uZz57JSB0cmFucyAlfUluZGljZXMgYW5kIHRhYmxlczp7JSBlbmR0cmFucyAlfTwvc3Ryb25nPjwvcD4KICAgPHRhYmxlIGNsYXNzPSJjb250ZW50c3RhYmxlIiBhbGlnbj0iY2VudGVyIj48dHI+CiAgICAgPHRkIHdpZHRoPSI1MCUiPgotICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInB5LW1vZGluZGV4IikgfX0iPkdsb2JhbCBNb2R1bGUgSW5kZXg8L2E+PGJyLz4KLSAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnF1aWNrIGFjY2VzcyB0byBhbGwgbW9kdWxlczwvc3Bhbj48L3A+Ci0gICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZ2VuaW5kZXgiKSB9fSI+R2VuZXJhbCBJbmRleDwvYT48YnIvPgotICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+YWxsIGZ1bmN0aW9ucywgY2xhc3NlcywgdGVybXM8L3NwYW4+PC9wPgotICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImdsb3NzYXJ5IikgfX0iPkdsb3NzYXJ5PC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj50aGUgbW9zdCBpbXBvcnRhbnQgdGVybXMgZXhwbGFpbmVkPC9zcGFuPjwvcD4KKyAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJweS1tb2RpbmRleCIpIH19Ij57JSB0cmFucyAlfUdsb2JhbCBNb2R1bGUgSW5kZXh7JSBlbmR0cmFucyAlfTwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+eyUgdHJhbnMgJX1xdWljayBhY2Nlc3MgdG8gYWxsIG1vZHVsZXN7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZ2VuaW5kZXgiKSB9fSI+eyUgdHJhbnMgJX1HZW5lcmFsIEluZGV4eyUgZW5kdHJhbnMgJX08L2E+PGJyLz4KKyAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnslIHRyYW5zICV9YWxsIGZ1bmN0aW9ucywgY2xhc3NlcywgdGVybXN7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZ2xvc3NhcnkiKSB9fSI+eyUgdHJhbnMgJX1HbG9zc2FyeXslIGVuZHRyYW5zICV9PC9hPjxici8+CisgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj57JSB0cmFucyAlfXRoZSBtb3N0IGltcG9ydGFudCB0ZXJtcyBleHBsYWluZWR7JSBlbmR0cmFucyAlfTwvc3Bhbj48L3A+CiAgICAgPC90ZD48dGQgd2lkdGg9IjUwJSI+Ci0gICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygic2VhcmNoIikgfX0iPlNlYXJjaCBwYWdlPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5zZWFyY2ggdGhpcyBkb2N1bWVudGF0aW9uPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJjb250ZW50cyIpIH19Ij5Db21wbGV0ZSBUYWJsZSBvZiBDb250ZW50czwvYT48YnIvPgotICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+bGlzdHMgYWxsIHNlY3Rpb25zIGFuZCBzdWJzZWN0aW9uczwvc3Bhbj48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygic2VhcmNoIikgfX0iPnslIHRyYW5zICV9U2VhcmNoIHBhZ2V7JSBlbmR0cmFucyAlfTwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+eyUgdHJhbnMgJX1zZWFyY2ggdGhpcyBkb2N1bWVudGF0aW9ueyUgZW5kdHJhbnMgJX08L3NwYW4+PC9wPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImNvbnRlbnRzIikgfX0iPnslIHRyYW5zICV9Q29tcGxldGUgVGFibGUgb2YgQ29udGVudHN7JSBlbmR0cmFucyAlfTwvYT48YnIvPgorICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+eyUgdHJhbnMgJX1saXN0cyBhbGwgc2VjdGlvbnMgYW5kIHN1YnNlY3Rpb25zeyUgZW5kdHJhbnMgJX08L3NwYW4+PC9wPgogICAgIDwvdGQ+PC90cj4KICAgPC90YWJsZT4KIAotICA8cD48c3Ryb25nPk1ldGEgaW5mb3JtYXRpb246PC9zdHJvbmc+PC9wPgorICA8cD48c3Ryb25nPnslIHRyYW5zICV9TWV0YSBpbmZvcm1hdGlvbjp7JSBlbmR0cmFucyAlfTwvc3Ryb25nPjwvcD4KICAgPHRhYmxlIGNsYXNzPSJjb250ZW50c3RhYmxlIiBhbGlnbj0iY2VudGVyIj48dHI+CiAgICAgPHRkIHdpZHRoPSI1MCUiPgotICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImJ1Z3MiKSB9fSI+UmVwb3J0aW5nIGJ1Z3M8L2E+PC9wPgotICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImFib3V0IikgfX0iPkFib3V0IHRoZSBkb2N1bWVudGF0aW9uPC9hPjwvcD4KKyAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJidWdzIikgfX0iPnslIHRyYW5zICV9UmVwb3J0aW5nIGJ1Z3N7JSBlbmR0cmFucyAlfTwvYT48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiYWJvdXQiKSB9fSI+eyUgdHJhbnMgJX1BYm91dCB0aGUgZG9jdW1lbnRhdGlvbnslIGVuZHRyYW5zICV9PC9hPjwvcD4KICAgICA8L3RkPjx0ZCB3aWR0aD0iNTAlIj4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJsaWNlbnNlIikgfX0iPkhpc3RvcnkgYW5kIExpY2Vuc2Ugb2YgUHl0aG9uPC9hPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJjb3B5cmlnaHQiKSB9fSI+Q29weXJpZ2h0PC9hPjwvcD4KKyAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJsaWNlbnNlIikgfX0iPnslIHRyYW5zICV9SGlzdG9yeSBhbmQgTGljZW5zZSBvZiBQeXRob257JSBlbmR0cmFucyAlfTwvYT48L3A+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiY29weXJpZ2h0IikgfX0iPnslIHRyYW5zICV9Q29weXJpZ2h0eyUgZW5kdHJhbnMgJX08L2E+PC9wPgogICAgIDwvdGQ+PC90cj4KICAgPC90YWJsZT4KIHslIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4c2lkZWJhci5odG1sIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9pbmRleHNpZGViYXIuaHRtbAppbmRleCBhYmRmMDcwLi5iYjQ0OWVmIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4c2lkZWJhci5odG1sCisrKyBiL0RvYy90b29scy90ZW1wbGF0ZXMvaW5kZXhzaWRlYmFyLmh0bWwKQEAgLTEsMTggKzEsMTcgQEAKLTxoMz5Eb3dubG9hZDwvaDM+Ci08cD48YSBocmVmPSJ7eyBwYXRodG8oJ2Rvd25sb2FkJykgfX0iPkRvd25sb2FkIHRoZXNlIGRvY3VtZW50czwvYT48L3A+Ci08aDM+RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnM8L2gzPgorPGgzPnslIHRyYW5zICV9RG93bmxvYWR7JSBlbmR0cmFucyAlfTwvaDM+Cis8cD48YSBocmVmPSJ7eyBwYXRodG8oJ2Rvd25sb2FkJykgfX0iPnslIHRyYW5zICV9RG93bmxvYWQgdGhlc2UgZG9jdW1lbnRzeyUgZW5kdHJhbnMgJX08L2E+PC9wPgorPGgzPnslIHRyYW5zICV9RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnN7JSBlbmR0cmFucyAlfTwvaDM+CiA8dWw+Ci0gIDxsaT48YSBocmVmPSJodHRwczovL2RvY3MucHl0aG9uLm9yZy8yLjcvIj5QeXRob24gMi43IChzdGFibGUpPC9hPjwvbGk+Ci0gIDxsaT48YSBocmVmPSJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjMvIj5QeXRob24gMy4zIChzdGFibGUpPC9hPjwvbGk+Ci0gIDxsaT48YSBocmVmPSJodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjUvIj5QeXRob24gMy41IChpbiBkZXZlbG9wbWVudCk8L2E+PC9saT4KLSAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG9jL3ZlcnNpb25zLyI+T2xkIHZlcnNpb25zPC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJodHRwczovL2RvY3MucHl0aG9uLm9yZy8yLjcvIj57JSB0cmFucyAlfVB5dGhvbiAyLjcgKHN0YWJsZSl7JSBlbmR0cmFucyAlfTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LyI+eyUgdHJhbnMgJX1QeXRob24gMy40IChzdGFibGUpeyUgZW5kdHJhbnMgJX08L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG9jL3ZlcnNpb25zLyI+eyUgdHJhbnMgJX1PbGQgdmVyc2lvbnN7JSBlbmR0cmFucyAlfTwvYT48L2xpPgogPC91bD4KIAotPGgzPk90aGVyIHJlc291cmNlczwvaDM+Cis8aDM+eyUgdHJhbnMgJX1PdGhlciByZXNvdXJjZXN7JSBlbmR0cmFucyAlfTwvaDM+CiA8dWw+CiAgIHsjIFhYWDogbWFueSBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgbWVyZ2VkIGluIHRoZSBtYWluIGRvY3MgI30KLSAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvIj5QRVAgSW5kZXg8L2E+PC9saT4KLSAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGUiPkJlZ2lubmVyJ3MgR3VpZGU8L2E+PC9saT4KLSAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vUHl0aG9uQm9va3MiPkJvb2sgTGlzdDwvYT48L2xpPgotICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb2MvYXYvIj5BdWRpby9WaXN1YWwgVGFsa3M8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvIj57JSB0cmFucyAlfVBFUCBJbmRleHslIGVuZHRyYW5zICV9PC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0JlZ2lubmVyc0d1aWRlIj57JSB0cmFucyAlfUJlZ2lubmVyJ3MgR3VpZGV7JSBlbmR0cmFucyAlfTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25Cb29rcyI+eyUgdHJhbnMgJX1Cb29rIExpc3R7JSBlbmR0cmFucyAlfTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb2MvYXYvIj57JSB0cmFucyAlfUF1ZGlvL1Zpc3VhbCBUYWxrc3slIGVuZHRyYW5zICV9PC9hPjwvbGk+CiA8L3VsPgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3RlbXBsYXRlcy9sYXlvdXQuaHRtbCBiL0RvYy90b29scy90ZW1wbGF0ZXMvbGF5b3V0Lmh0bWwKaW5kZXggOGFlNmUyMy4uMTg4N2I4NSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3RlbXBsYXRlcy9sYXlvdXQuaHRtbAorKysgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL2xheW91dC5odG1sCkBAIC02LDcgKzYsNyBAQAogICAgICAgICA8bGk+CiAgICAgICAgICAgeyUtIGlmIHZlcnNpb25zd2l0Y2hlciBpcyBkZWZpbmVkICV9CiAgICAgICAgICAgPHNwYW4gY2xhc3M9InZlcnNpb25fc3dpdGNoZXJfcGxhY2Vob2xkZXIiPnt7IHJlbGVhc2UgfX08L3NwYW4+Ci0gICAgICAgICAgPGEgaHJlZj0ie3sgcGF0aHRvKCdpbmRleCcpIH19Ij5Eb2N1bWVudGF0aW9uPC9hPnt7IHJlbGRlbGltMSB9fQorICAgICAgICAgIDxhIGhyZWY9Int7IHBhdGh0bygnaW5kZXgnKSB9fSI+eyUgdHJhbnMgJX1Eb2N1bWVudGF0aW9uIHslIGVuZHRyYW5zICV9PC9hPnt7IHJlbGRlbGltMSB9fQogICAgICAgICAgIHslLSBlbHNlICV9CiAgICAgICAgICAgPGEgaHJlZj0ie3sgcGF0aHRvKCdpbmRleCcpIH19Ij57eyBzaG9ydHRpdGxlIH19PC9hPnt7IHJlbGRlbGltMSB9fQogICAgICAgICAgIHslLSBlbmRpZiAlfQpAQCAtNzksMjQgKzc5LDI0IEBACiB7JSBlbmRibG9jayAlfQogeyUgYmxvY2sgZm9vdGVyICV9CiAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KLSAgICAmY29weTsgPGEgaHJlZj0ie3sgcGF0aHRvKCdjb3B5cmlnaHQnKSB9fSI+Q29weXJpZ2h0PC9hPiB7eyBjb3B5cmlnaHR8ZSB9fS4KKyAgICAmY29weTsgPGEgaHJlZj0ie3sgcGF0aHRvKCdjb3B5cmlnaHQnKSB9fSI+eyUgdHJhbnMgJX1Db3B5cmlnaHR7JSBlbmR0cmFucyAlfTwvYT4ge3sgY29weXJpZ2h0fGUgfX0uCiAgICAgPGJyIC8+Ci0gICAgVGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIGlzIGEgbm9uLXByb2ZpdCBjb3Jwb3JhdGlvbi4KLSAgICA8YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj5QbGVhc2UgZG9uYXRlLjwvYT4KKyAgICB7JSB0cmFucyAlfVRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBpcyBhIG5vbi1wcm9maXQgY29ycG9yYXRpb24ueyUgZW5kdHJhbnMgJX0KKyAgICA8YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj57JSB0cmFucyAlfVBsZWFzZSBkb25hdGUueyUgZW5kdHJhbnMgJX08L2E+CiAgICAgPGJyIC8+Ci0gICAgTGFzdCB1cGRhdGVkIG9uIHt7IGxhc3RfdXBkYXRlZHxlIH19LgotICAgIDxhIGhyZWY9Int7IHBhdGh0bygnYnVncycpIH19Ij5Gb3VuZCBhIGJ1ZzwvYT4/CisgICAgeyUgdHJhbnMgbGFzdF91cGRhdGVkPWxhc3RfdXBkYXRlZHxlICV9TGFzdCB1cGRhdGVkIG9uIHt7IGxhc3RfdXBkYXRlZCB9fS57JSBlbmR0cmFucyAlfQorICAgIHslIHRyYW5zIHBhdGh0b19idWdzPXBhdGh0bygnYnVncycpICV9PGEgaHJlZj0ie3sgcGF0aHRvX2J1Z3MgfX0iPkZvdW5kIGEgYnVnPC9hPj97JSBlbmR0cmFucyAlfQogICAgIDxiciAvPgotICAgIENyZWF0ZWQgdXNpbmcgPGEgaHJlZj0iaHR0cDovL3NwaGlueC5wb2Nvby5vcmcvIj5TcGhpbng8L2E+IHt7IHNwaGlueF92ZXJzaW9ufGUgfX0uCisgICAgeyUgdHJhbnMgc3BoaW54X3ZlcnNpb249c3BoaW54X3ZlcnNpb258ZSAlfUNyZWF0ZWQgdXNpbmcgPGEgaHJlZj0iaHR0cDovL3NwaGlueC5wb2Nvby5vcmcvIj5TcGhpbng8L2E+IHt7IHNwaGlueF92ZXJzaW9uIH19LnslIGVuZHRyYW5zICV9CiAgICAgPC9kaXY+CiB7JSBlbmRibG9jayAlfQogeyUgYmxvY2sgc2lkZWJhcnNvdXJjZWxpbmsgJX0KIHslLSBpZiBzaG93X3NvdXJjZSBhbmQgaGFzX3NvdXJjZSBhbmQgc291cmNlbmFtZSAlfQogPGgzPnt7IF8oJ1RoaXMgUGFnZScpIH19PC9oMz4KIDx1bCBjbGFzcz0idGhpcy1wYWdlLW1lbnUiPgotICA8bGk+PGEgaHJlZj0ie3sgcGF0aHRvKCdidWdzJykgfX0iPlJlcG9ydCBhIEJ1ZzwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0ie3sgcGF0aHRvKCdidWdzJykgfX0iPnslIHRyYW5zICV9UmVwb3J0IGEgQnVneyUgZW5kdHJhbnMgJX08L2E+PC9saT4KICAgPGxpPjxhIGhyZWY9Int7IHBhdGh0bygnX3NvdXJjZXMvJyArIHNvdXJjZW5hbWUsIHRydWUpfGUgfX0iCi0gICAgICAgICByZWw9Im5vZm9sbG93Ij5TaG93IFNvdXJjZTwvYT48L2xpPgorICAgICAgICAgcmVsPSJub2ZvbGxvdyI+eyUgdHJhbnMgJX1TaG93IFNvdXJjZXslIGVuZHRyYW5zICV9PC9hPjwvbGk+CiA8L3VsPgogeyUtIGVuZGlmICV9CiB7JSBlbmRibG9jayAlfQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2FwcGVuZGl4LnJzdCBiL0RvYy90dXRvcmlhbC9hcHBlbmRpeC5yc3QKaW5kZXggY2U1MGMxZS4uZmZkMTZhYSAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2FwcGVuZGl4LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvYXBwZW5kaXgucnN0CkBAIC00MCw3ICs0MCw3IEBACiBPbiBCU0QnaXNoIFVuaXggc3lzdGVtcywgUHl0aG9uIHNjcmlwdHMgY2FuIGJlIG1hZGUgZGlyZWN0bHkgZXhlY3V0YWJsZSwgbGlrZQogc2hlbGwgc2NyaXB0cywgYnkgcHV0dGluZyB0aGUgbGluZSA6OgogCi0gICAjIS91c3IvYmluL2VudiBweXRob24zLjQKKyAgICMhL3Vzci9iaW4vZW52IHB5dGhvbjMuNQogCiAoYXNzdW1pbmcgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgb24gdGhlIHVzZXIncyA6ZW52dmFyOmBQQVRIYCkgYXQgdGhlIGJlZ2lubmluZwogb2YgdGhlIHNjcmlwdCBhbmQgZ2l2aW5nIHRoZSBmaWxlIGFuIGV4ZWN1dGFibGUgbW9kZS4gIFRoZSBgYCMhYGAgbXVzdCBiZSB0aGUKQEAgLTkyLDcgKzkyLDcgQEAKICAgIGZpbGVuYW1lID0gb3MuZW52aXJvbi5nZXQoJ1BZVEhPTlNUQVJUVVAnKQogICAgaWYgZmlsZW5hbWUgYW5kIG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKToKICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZvYmo6Ci0gICAgICAgICAgc3RhcnR1cF9maWxlID0gZm9iai5yZWFkKCkKKyAgICAgICAgICAgc3RhcnR1cF9maWxlID0gZm9iai5yZWFkKCkKICAgICAgICBleGVjKHN0YXJ0dXBfZmlsZSkKIAogCkBAIC0xMDcsNyArMTA3LDcgQEAKIAogICAgPj4+IGltcG9ydCBzaXRlCiAgICA+Pj4gc2l0ZS5nZXR1c2Vyc2l0ZXBhY2thZ2VzKCkKLSAgICcvaG9tZS91c2VyLy5sb2NhbC9saWIvcHl0aG9uMy40L3NpdGUtcGFja2FnZXMnCisgICAnL2hvbWUvdXNlci8ubG9jYWwvbGliL3B5dGhvbjMuNS9zaXRlLXBhY2thZ2VzJwogCiBOb3cgeW91IGNhbiBjcmVhdGUgYSBmaWxlIG5hbWVkIDpmaWxlOmB1c2VyY3VzdG9taXplLnB5YCBpbiB0aGF0IGRpcmVjdG9yeSBhbmQKIHB1dCBhbnl0aGluZyB5b3Ugd2FudCBpbiBpdC4gIEl0IHdpbGwgYWZmZWN0IGV2ZXJ5IGludm9jYXRpb24gb2YgUHl0aG9uLCB1bmxlc3MKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdCBiL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdAppbmRleCA3ZTAxNGVmLi4wM2I3N2UwIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0CkBAIC0xMjAsNyArMTIwLDcgQEAKIElmIGEgbmFtZSBpcyBkZWNsYXJlZCBnbG9iYWwsIHRoZW4gYWxsIHJlZmVyZW5jZXMgYW5kIGFzc2lnbm1lbnRzIGdvIGRpcmVjdGx5IHRvCiB0aGUgbWlkZGxlIHNjb3BlIGNvbnRhaW5pbmcgdGhlIG1vZHVsZSdzIGdsb2JhbCBuYW1lcy4gIFRvIHJlYmluZCB2YXJpYWJsZXMKIGZvdW5kIG91dHNpZGUgb2YgdGhlIGlubmVybW9zdCBzY29wZSwgdGhlIDprZXl3b3JkOmBub25sb2NhbGAgc3RhdGVtZW50IGNhbiBiZQotdXNlZDsgaWYgbm90IGRlY2xhcmVkIG5vbmxvY2FsLCB0aG9zZSB2YXJpYWJsZSBhcmUgcmVhZC1vbmx5IChhbiBhdHRlbXB0IHRvCit1c2VkOyBpZiBub3QgZGVjbGFyZWQgbm9ubG9jYWwsIHRob3NlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5IChhbiBhdHRlbXB0IHRvCiB3cml0ZSB0byBzdWNoIGEgdmFyaWFibGUgd2lsbCBzaW1wbHkgY3JlYXRlIGEgKm5ldyogbG9jYWwgdmFyaWFibGUgaW4gdGhlCiBpbm5lcm1vc3Qgc2NvcGUsIGxlYXZpbmcgdGhlIGlkZW50aWNhbGx5IG5hbWVkIG91dGVyIHZhcmlhYmxlIHVuY2hhbmdlZCkuCiAKQEAgLTE2MiwxMiArMTYyLDE1IEBACiAgICBkZWYgc2NvcGVfdGVzdCgpOgogICAgICAgIGRlZiBkb19sb2NhbCgpOgogICAgICAgICAgICBzcGFtID0gImxvY2FsIHNwYW0iCisKICAgICAgICBkZWYgZG9fbm9ubG9jYWwoKToKICAgICAgICAgICAgbm9ubG9jYWwgc3BhbQogICAgICAgICAgICBzcGFtID0gIm5vbmxvY2FsIHNwYW0iCisKICAgICAgICBkZWYgZG9fZ2xvYmFsKCk6CiAgICAgICAgICAgIGdsb2JhbCBzcGFtCiAgICAgICAgICAgIHNwYW0gPSAiZ2xvYmFsIHNwYW0iCisKICAgICAgICBzcGFtID0gInRlc3Qgc3BhbSIKICAgICAgICBkb19sb2NhbCgpCiAgICAgICAgcHJpbnQoIkFmdGVyIGxvY2FsIGFzc2lnbm1lbnQ6Iiwgc3BhbSkKQEAgLTI2MCw2ICsyNjMsNyBAQAogICAgY2xhc3MgTXlDbGFzczoKICAgICAgICAiIiJBIHNpbXBsZSBleGFtcGxlIGNsYXNzIiIiCiAgICAgICAgaSA9IDEyMzQ1CisKICAgICAgICBkZWYgZihzZWxmKToKICAgICAgICAgICAgcmV0dXJuICdoZWxsbyB3b3JsZCcKIApAQCAtNTA4LDggKzUxMiwxMCBAQAogCiAgICBjbGFzcyBDOgogICAgICAgIGYgPSBmMQorCiAgICAgICAgZGVmIGcoc2VsZik6CiAgICAgICAgICAgIHJldHVybiAnaGVsbG8gd29ybGQnCisKICAgICAgICBoID0gZwogCiBOb3cgYGBmYGAsIGBgZ2BgIGFuZCBgYGhgYCBhcmUgYWxsIGF0dHJpYnV0ZXMgb2YgY2xhc3MgOmNsYXNzOmBDYCB0aGF0IHJlZmVyIHRvCkBAIC01MjMsOCArNTI5LDEwIEBACiAgICBjbGFzcyBCYWc6CiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICBzZWxmLmRhdGEgPSBbXQorCiAgICAgICAgZGVmIGFkZChzZWxmLCB4KToKICAgICAgICAgICAgc2VsZi5kYXRhLmFwcGVuZCh4KQorCiAgICAgICAgZGVmIGFkZHR3aWNlKHNlbGYsIHgpOgogICAgICAgICAgICBzZWxmLmFkZCh4KQogICAgICAgICAgICBzZWxmLmFkZCh4KQpAQCAtNzEzLDcgKzcyMSw3IEBACiAgICBjbGFzcyBFbXBsb3llZToKICAgICAgICBwYXNzCiAKLSAgIGpvaG4gPSBFbXBsb3llZSgpICMgQ3JlYXRlIGFuIGVtcHR5IGVtcGxveWVlIHJlY29yZAorICAgam9obiA9IEVtcGxveWVlKCkgICMgQ3JlYXRlIGFuIGVtcHR5IGVtcGxveWVlIHJlY29yZAogCiAgICAjIEZpbGwgdGhlIGZpZWxkcyBvZiB0aGUgcmVjb3JkCiAgICBqb2huLm5hbWUgPSAnSm9obiBEb2UnCkBAIC04MzksOCArODQ3LDEwIEBACiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgogICAgICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICAgICAgICAgIHNlbGYuaW5kZXggPSBsZW4oZGF0YSkKKwogICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgICAgcmV0dXJuIHNlbGYKKwogICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgICAgaWYgc2VsZi5pbmRleCA9PSAwOgogICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgpAQCAtOTQxLDggKzk1MSw4IEBACiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIEV4Y2VwdCBmb3Igb25lIHRoaW5nLiAgTW9kdWxlIG9iamVjdHMgaGF2ZSBhIHNlY3JldCByZWFkLW9ubHkgYXR0cmlidXRlIGNhbGxlZAotICAgOmF0dHI6YF9fZGljdF9fYCB3aGljaCByZXR1cm5zIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gaW1wbGVtZW50IHRoZSBtb2R1bGUncwotICAgbmFtZXNwYWNlOyB0aGUgbmFtZSA6YXR0cjpgX19kaWN0X19gIGlzIGFuIGF0dHJpYnV0ZSBidXQgbm90IGEgZ2xvYmFsIG5hbWUuCisgICA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2Agd2hpY2ggcmV0dXJucyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGltcGxlbWVudCB0aGUgbW9kdWxlJ3MKKyAgIG5hbWVzcGFjZTsgdGhlIG5hbWUgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGlzIGFuIGF0dHJpYnV0ZSBidXQgbm90IGEgZ2xvYmFsIG5hbWUuCiAgICBPYnZpb3VzbHksIHVzaW5nIHRoaXMgdmlvbGF0ZXMgdGhlIGFic3RyYWN0aW9uIG9mIG5hbWVzcGFjZSBpbXBsZW1lbnRhdGlvbiwgYW5kCiAgICBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byB0aGluZ3MgbGlrZSBwb3N0LW1vcnRlbSBkZWJ1Z2dlcnMuCiAKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QgYi9Eb2MvdHV0b3JpYWwvY29udHJvbGZsb3cucnN0CmluZGV4IDgxM2M4MjguLjEyOTg5YjIgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdApAQCAtMzEyLDcgKzMxMiw3IEBACiBJdCBpcyBzaW1wbGUgdG8gd3JpdGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBsaXN0IG9mIHRoZSBudW1iZXJzIG9mIHRoZQogRmlib25hY2NpIHNlcmllcywgaW5zdGVhZCBvZiBwcmludGluZyBpdDo6CiAKLSAgID4+PiBkZWYgZmliMihuKTogIyByZXR1cm4gRmlib25hY2NpIHNlcmllcyB1cCB0byBuCisgICA+Pj4gZGVmIGZpYjIobik6ICAjIHJldHVybiBGaWJvbmFjY2kgc2VyaWVzIHVwIHRvIG4KICAgIC4uLiAgICAgIiIiUmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHRoZSBGaWJvbmFjY2kgc2VyaWVzIHVwIHRvIG4uIiIiCiAgICAuLi4gICAgIHJlc3VsdCA9IFtdCiAgICAuLi4gICAgIGEsIGIgPSAwLCAxCkBAIC0zNjEsNyArMzYxLDcgQEAKIFRoaXMgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRoIGZld2VyIGFyZ3VtZW50cyB0aGFuIGl0IGlzCiBkZWZpbmVkIHRvIGFsbG93LiAgRm9yIGV4YW1wbGU6OgogCi0gICBkZWYgYXNrX29rKHByb21wdCwgcmV0cmllcz00LCBjb21wbGFpbnQ9J1llcyBvciBubywgcGxlYXNlIScpOgorICAgZGVmIGFza19vayhwcm9tcHQsIHJldHJpZXM9NCwgcmVtaW5kZXI9J1BsZWFzZSB0cnkgYWdhaW4hJyk6CiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgb2sgPSBpbnB1dChwcm9tcHQpCiAgICAgICAgICAgIGlmIG9rIGluICgneScsICd5ZScsICd5ZXMnKToKQEAgLTM3MCw4ICszNzAsOCBAQAogICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgIHJldHJpZXMgPSByZXRyaWVzIC0gMQogICAgICAgICAgICBpZiByZXRyaWVzIDwgMDoKLSAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3VuY29vcGVyYXRpdmUgdXNlcicpCi0gICAgICAgICAgIHByaW50KGNvbXBsYWludCkKKyAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgdXNlciByZXNwb25zZScpCisgICAgICAgICAgIHByaW50KHJlbWluZGVyKQogCiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW4gc2V2ZXJhbCB3YXlzOgogCkBAIC01MDEsNyArNTAxLDkgQEAKICAgICAgICAgICAgICAgY2xpZW50PSJKb2huIENsZWVzZSIsCiAgICAgICAgICAgICAgIHNrZXRjaD0iQ2hlZXNlIFNob3AgU2tldGNoIikKIAotYW5kIG9mIGNvdXJzZSBpdCB3b3VsZCBwcmludDo6CithbmQgb2YgY291cnNlIGl0IHdvdWxkIHByaW50OgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQogCiAgICAtLSBEbyB5b3UgaGF2ZSBhbnkgTGltYnVyZ2VyID8KICAgIC0tIEknbSBzb3JyeSwgd2UncmUgYWxsIG91dCBvZiBMaW1idXJnZXIKQEAgLTU0MCw3ICs1NDIsNyBAQAoga2V5d29yZHMgcmF0aGVyIHRoYW4gcG9zaXRpb25hbCBhcmd1bWVudHMuIDo6CiAKICAgID4+PiBkZWYgY29uY2F0KCphcmdzLCBzZXA9Ii8iKToKLSAgIC4uLiAgICByZXR1cm4gc2VwLmpvaW4oYXJncykKKyAgIC4uLiAgICAgcmV0dXJuIHNlcC5qb2luKGFyZ3MpCiAgICAuLi4KICAgID4+PiBjb25jYXQoImVhcnRoIiwgIm1hcnMiLCAidmVudXMiKQogICAgJ2VhcnRoL21hcnMvdmVudXMnCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0IGIvRG9jL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLnJzdAppbmRleCAxZWEyOTlmLi5iMzliZGY0IDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5yc3QKQEAgLTczLDEwICs3MywxMSBAQAogICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgKngqIGFwcGVhcnMgaW4gdGhlIGxpc3QuCiAKIAotLi4gbWV0aG9kOjogbGlzdC5zb3J0KCkKKy4uIG1ldGhvZDo6IGxpc3Quc29ydChrZXk9Tm9uZSwgcmV2ZXJzZT1GYWxzZSkKICAgIDpub2luZGV4OgogCi0gICBTb3J0IHRoZSBpdGVtcyBvZiB0aGUgbGlzdCBpbiBwbGFjZS4KKyAgIFNvcnQgdGhlIGl0ZW1zIG9mIHRoZSBsaXN0IGluIHBsYWNlICh0aGUgYXJndW1lbnRzIGNhbiBiZSB1c2VkIGZvciBzb3J0CisgICBjdXN0b21pemF0aW9uLCBzZWUgOmZ1bmM6YHNvcnRlZGAgZm9yIHRoZWlyIGV4cGxhbmF0aW9uKS4KIAogCiAuLiBtZXRob2Q6OiBsaXN0LnJldmVyc2UoKQpAQCAtMzk2LDcgKzM5Nyw3IEBACiAKIFRob3VnaCB0dXBsZXMgbWF5IHNlZW0gc2ltaWxhciB0byBsaXN0cywgdGhleSBhcmUgb2Z0ZW4gdXNlZCBpbiBkaWZmZXJlbnQKIHNpdHVhdGlvbnMgYW5kIGZvciBkaWZmZXJlbnQgcHVycG9zZXMuCi1UdXBsZXMgYXJlIDp0ZXJtOmBpbW11dGFibGVgLCBhbmQgdXN1YWxseSBjb250YWluIGFuIGhldGVyb2dlbmVvdXMgc2VxdWVuY2Ugb2YKK1R1cGxlcyBhcmUgOnRlcm06YGltbXV0YWJsZWAsIGFuZCB1c3VhbGx5IGNvbnRhaW4gYSBoZXRlcm9nZW5lb3VzIHNlcXVlbmNlIG9mCiBlbGVtZW50cyB0aGF0IGFyZSBhY2Nlc3NlZCB2aWEgdW5wYWNraW5nIChzZWUgbGF0ZXIgaW4gdGhpcyBzZWN0aW9uKSBvciBpbmRleGluZwogKG9yIGV2ZW4gYnkgYXR0cmlidXRlIGluIHRoZSBjYXNlIG9mIDpmdW5jOmBuYW1lZHR1cGxlcyA8Y29sbGVjdGlvbnMubmFtZWR0dXBsZT5gKS4KIExpc3RzIGFyZSA6dGVybTpgbXV0YWJsZWAsIGFuZCB0aGVpciBlbGVtZW50cyBhcmUgdXN1YWxseSBob21vZ2VuZW91cyBhbmQgYXJlCkBAIC02MTEsMTggKzYxMiwxOCBAQAogICAgb3JhbmdlCiAgICBwZWFyCiAKLVRvIGNoYW5nZSBhIHNlcXVlbmNlIHlvdSBhcmUgaXRlcmF0aW5nIG92ZXIgd2hpbGUgaW5zaWRlIHRoZSBsb29wIChmb3IKLWV4YW1wbGUgdG8gZHVwbGljYXRlIGNlcnRhaW4gaXRlbXMpLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBmaXJzdCBtYWtlCi1hIGNvcHkuICBMb29waW5nIG92ZXIgYSBzZXF1ZW5jZSBkb2VzIG5vdCBpbXBsaWNpdGx5IG1ha2UgYSBjb3B5LiAgVGhlIHNsaWNlCi1ub3RhdGlvbiBtYWtlcyB0aGlzIGVzcGVjaWFsbHkgY29udmVuaWVudDo6CitJdCBpcyBzb21ldGltZXMgdGVtcHRpbmcgdG8gY2hhbmdlIGEgbGlzdCB3aGlsZSB5b3UgYXJlIGxvb3Bpbmcgb3ZlciBpdDsKK2hvd2V2ZXIsIGl0IGlzIG9mdGVuIHNpbXBsZXIgYW5kIHNhZmVyIHRvIGNyZWF0ZSBhIG5ldyBsaXN0IGluc3RlYWQuIDo6CiAKLSAgID4+PiB3b3JkcyA9IFsnY2F0JywgJ3dpbmRvdycsICdkZWZlbmVzdHJhdGUnXQotICAgPj4+IGZvciB3IGluIHdvcmRzWzpdOiAgIyBMb29wIG92ZXIgYSBzbGljZSBjb3B5IG9mIHRoZSBlbnRpcmUgbGlzdC4KLSAgIC4uLiAgICAgaWYgbGVuKHcpID4gNjoKLSAgIC4uLiAgICAgICAgIHdvcmRzLmluc2VydCgwLCB3KQorICAgPj4+IGltcG9ydCBtYXRoCisgICA+Pj4gcmF3X2RhdGEgPSBbNTYuMiwgZmxvYXQoJ05hTicpLCA1MS43LCA1NS4zLCA1Mi41LCBmbG9hdCgnTmFOJyksIDQ3LjhdCisgICA+Pj4gZmlsdGVyZWRfZGF0YSA9IFtdCisgICA+Pj4gZm9yIHZhbHVlIGluIHJhd19kYXRhOgorICAgLi4uICAgICBpZiBub3QgbWF0aC5pc25hbih2YWx1ZSk6CisgICAuLi4gICAgICAgICBmaWx0ZXJlZF9kYXRhLmFwcGVuZCh2YWx1ZSkKICAgIC4uLgotICAgPj4+IHdvcmRzCi0gICBbJ2RlZmVuZXN0cmF0ZScsICdjYXQnLCAnd2luZG93JywgJ2RlZmVuZXN0cmF0ZSddCisgICA+Pj4gZmlsdGVyZWRfZGF0YQorICAgWzU2LjIsIDUxLjcsIDU1LjMsIDUyLjUsIDQ3LjhdCiAKIAogLi4gX3R1dC1jb25kaXRpb25zOgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2Vycm9ycy5yc3QgYi9Eb2MvdHV0b3JpYWwvZXJyb3JzLnJzdAppbmRleCAzNTFlZTUyLi40MTk1YzdlIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvZXJyb3JzLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvZXJyb3JzLnJzdApAQCAtMTcwLDE1ICsxNzAsMTUgQEAKIHJhaXNpbmcgaXQgYW5kIGFkZCBhbnkgYXR0cmlidXRlcyB0byBpdCBhcyBkZXNpcmVkLiA6OgogCiAgICA+Pj4gdHJ5OgotICAgLi4uICAgIHJhaXNlIEV4Y2VwdGlvbignc3BhbScsICdlZ2dzJykKKyAgIC4uLiAgICAgcmFpc2UgRXhjZXB0aW9uKCdzcGFtJywgJ2VnZ3MnKQogICAgLi4uIGV4Y2VwdCBFeGNlcHRpb24gYXMgaW5zdDoKLSAgIC4uLiAgICBwcmludCh0eXBlKGluc3QpKSAgICAjIHRoZSBleGNlcHRpb24gaW5zdGFuY2UKLSAgIC4uLiAgICBwcmludChpbnN0LmFyZ3MpICAgICAjIGFyZ3VtZW50cyBzdG9yZWQgaW4gLmFyZ3MKLSAgIC4uLiAgICBwcmludChpbnN0KSAgICAgICAgICAjIF9fc3RyX18gYWxsb3dzIGFyZ3MgdG8gYmUgcHJpbnRlZCBkaXJlY3RseSwKLSAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAjIGJ1dCBtYXkgYmUgb3ZlcnJpZGRlbiBpbiBleGNlcHRpb24gc3ViY2xhc3NlcwotICAgLi4uICAgIHgsIHkgPSBpbnN0LmFyZ3MgICAgICMgdW5wYWNrIGFyZ3MKLSAgIC4uLiAgICBwcmludCgneCA9JywgeCkKLSAgIC4uLiAgICBwcmludCgneSA9JywgeSkKKyAgIC4uLiAgICAgcHJpbnQodHlwZShpbnN0KSkgICAgIyB0aGUgZXhjZXB0aW9uIGluc3RhbmNlCisgICAuLi4gICAgIHByaW50KGluc3QuYXJncykgICAgICMgYXJndW1lbnRzIHN0b3JlZCBpbiAuYXJncworICAgLi4uICAgICBwcmludChpbnN0KSAgICAgICAgICAjIF9fc3RyX18gYWxsb3dzIGFyZ3MgdG8gYmUgcHJpbnRlZCBkaXJlY3RseSwKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBidXQgbWF5IGJlIG92ZXJyaWRkZW4gaW4gZXhjZXB0aW9uIHN1YmNsYXNzZXMKKyAgIC4uLiAgICAgeCwgeSA9IGluc3QuYXJncyAgICAgIyB1bnBhY2sgYXJncworICAgLi4uICAgICBwcmludCgneCA9JywgeCkKKyAgIC4uLiAgICAgcHJpbnQoJ3kgPScsIHkpCiAgICAuLi4KICAgIDxjbGFzcyAnRXhjZXB0aW9uJz4KICAgICgnc3BhbScsICdlZ2dzJykKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9mbG9hdGluZ3BvaW50LnJzdCBiL0RvYy90dXRvcmlhbC9mbG9hdGluZ3BvaW50LnJzdAppbmRleCA5YzNjMTQzLi5kNDQwZTUzIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvZmxvYXRpbmdwb2ludC5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQucnN0CkBAIC0xNTUsNyArMTU1LDcgQEAKIAogSWYgeW91IGFyZSBhIGhlYXZ5IHVzZXIgb2YgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyB5b3Ugc2hvdWxkIHRha2UgYSBsb29rCiBhdCB0aGUgTnVtZXJpY2FsIFB5dGhvbiBwYWNrYWdlIGFuZCBtYW55IG90aGVyIHBhY2thZ2VzIGZvciBtYXRoZW1hdGljYWwgYW5kCi1zdGF0aXN0aWNhbCBvcGVyYXRpb25zIHN1cHBsaWVkIGJ5IHRoZSBTY2lQeSBwcm9qZWN0LiBTZWUgPGh0dHA6Ly9zY2lweS5vcmc+Lgorc3RhdGlzdGljYWwgb3BlcmF0aW9ucyBzdXBwbGllZCBieSB0aGUgU2NpUHkgcHJvamVjdC4gU2VlIDxodHRwczovL3NjaXB5Lm9yZz4uCiAKIFB5dGhvbiBwcm92aWRlcyB0b29scyB0aGF0IG1heSBoZWxwIG9uIHRob3NlIHJhcmUgb2NjYXNpb25zIHdoZW4geW91IHJlYWxseQogKmRvKiB3YW50IHRvIGtub3cgdGhlIGV4YWN0IHZhbHVlIG9mIGEgZmxvYXQuICBUaGUKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbnB1dG91dHB1dC5yc3QgYi9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0CmluZGV4IGMxNTdmMjIuLmRkOWM3Y2QgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9pbnB1dG91dHB1dC5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2lucHV0b3V0cHV0LnJzdApAQCAtMTUyLDExICsxNTIsMTEgQEAKIGBgJyFhJ2BgIChhcHBseSA6ZnVuYzpgYXNjaWlgKSwgYGAnIXMnYGAgKGFwcGx5IDpmdW5jOmBzdHJgKSBhbmQgYGAnIXInYGAKIChhcHBseSA6ZnVuYzpgcmVwcmApIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIHZhbHVlIGJlZm9yZSBpdCBpcyBmb3JtYXR0ZWQ6OgogCi0gICA+Pj4gaW1wb3J0IG1hdGgKLSAgID4+PiBwcmludCgnVGhlIHZhbHVlIG9mIFBJIGlzIGFwcHJveGltYXRlbHkge30uJy5mb3JtYXQobWF0aC5waSkpCi0gICBUaGUgdmFsdWUgb2YgUEkgaXMgYXBwcm94aW1hdGVseSAzLjE0MTU5MjY1MzU5LgotICAgPj4+IHByaW50KCdUaGUgdmFsdWUgb2YgUEkgaXMgYXBwcm94aW1hdGVseSB7IXJ9LicuZm9ybWF0KG1hdGgucGkpKQotICAgVGhlIHZhbHVlIG9mIFBJIGlzIGFwcHJveGltYXRlbHkgMy4xNDE1OTI2NTM1ODk3OTMuCisgICA+Pj4gY29udGVudHMgPSAnZWVscycKKyAgID4+PiBwcmludCgnTXkgaG92ZXJjcmFmdCBpcyBmdWxsIG9mIHt9LicuZm9ybWF0KGNvbnRlbnRzKSkKKyAgIE15IGhvdmVyY3JhZnQgaXMgZnVsbCBvZiBlZWxzLgorICAgPj4+IHByaW50KCdNeSBob3ZlcmNyYWZ0IGlzIGZ1bGwgb2YgeyFyfS4nLmZvcm1hdChjb250ZW50cykpCisgICBNeSBob3ZlcmNyYWZ0IGlzIGZ1bGwgb2YgJ2VlbHMnLgogCiBBbiBvcHRpb25hbCBgYCc6J2BgIGFuZCBmb3JtYXQgc3BlY2lmaWVyIGNhbiBmb2xsb3cgdGhlIGZpZWxkIG5hbWUuIFRoaXMgYWxsb3dzCiBncmVhdGVyIGNvbnRyb2wgb3ZlciBob3cgdGhlIHZhbHVlIGlzIGZvcm1hdHRlZC4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQpAQCAtMjcxLDEwICsyNzEsMTEgQEAKIGBgZmBgIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4KIAogVG8gcmVhZCBhIGZpbGUncyBjb250ZW50cywgY2FsbCBgYGYucmVhZChzaXplKWBgLCB3aGljaCByZWFkcyBzb21lIHF1YW50aXR5IG9mCi1kYXRhIGFuZCByZXR1cm5zIGl0IGFzIGEgc3RyaW5nIG9yIGJ5dGVzIG9iamVjdC4gICpzaXplKiBpcyBhbiBvcHRpb25hbCBudW1lcmljCi1hcmd1bWVudC4gIFdoZW4gKnNpemUqIGlzIG9taXR0ZWQgb3IgbmVnYXRpdmUsIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGZpbGUKLXdpbGwgYmUgcmVhZCBhbmQgcmV0dXJuZWQ7IGl0J3MgeW91ciBwcm9ibGVtIGlmIHRoZSBmaWxlIGlzIHR3aWNlIGFzIGxhcmdlIGFzCi15b3VyIG1hY2hpbmUncyBtZW1vcnkuIE90aGVyd2lzZSwgYXQgbW9zdCAqc2l6ZSogYnl0ZXMgYXJlIHJlYWQgYW5kIHJldHVybmVkLgorZGF0YSBhbmQgcmV0dXJucyBpdCBhcyBhIHN0cmluZyAoaW4gdGV4dCBtb2RlKSBvciBieXRlcyBvYmplY3QgKGluIGJpbmFyeSBtb2RlKS4KKypzaXplKiBpcyBhbiBvcHRpb25hbCBudW1lcmljIGFyZ3VtZW50LiAgV2hlbiAqc2l6ZSogaXMgb21pdHRlZCBvciBuZWdhdGl2ZSwgdGhlCitlbnRpcmUgY29udGVudHMgb2YgdGhlIGZpbGUgd2lsbCBiZSByZWFkIGFuZCByZXR1cm5lZDsgaXQncyB5b3VyIHByb2JsZW0gaWYgdGhlCitmaWxlIGlzIHR3aWNlIGFzIGxhcmdlIGFzIHlvdXIgbWFjaGluZSdzIG1lbW9yeS4gT3RoZXJ3aXNlLCBhdCBtb3N0ICpzaXplKiBieXRlcworYXJlIHJlYWQgYW5kIHJldHVybmVkLgogSWYgdGhlIGVuZCBvZiB0aGUgZmlsZSBoYXMgYmVlbiByZWFjaGVkLCBgYGYucmVhZCgpYGAgd2lsbCByZXR1cm4gYW4gZW1wdHkKIHN0cmluZyAoYGAnJ2BgKS4gIDo6CiAKQEAgLTMxNSwxMSArMzE2LDExIEBACiAgICA+Pj4gZi53cml0ZSgnVGhpcyBpcyBhIHRlc3RcbicpCiAgICAxNQogCi1UbyB3cml0ZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHN0cmluZywgaXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgc3RyaW5nCi1maXJzdDo6CitPdGhlciB0eXBlcyBvZiBvYmplY3RzIG5lZWQgdG8gYmUgY29udmVydGVkIC0tIGVpdGhlciB0byBhIHN0cmluZyAoaW4gdGV4dCBtb2RlKQorb3IgYSBieXRlcyBvYmplY3QgKGluIGJpbmFyeSBtb2RlKSAtLSBiZWZvcmUgd3JpdGluZyB0aGVtOjoKIAogICAgPj4+IHZhbHVlID0gKCd0aGUgYW5zd2VyJywgNDIpCi0gICA+Pj4gcyA9IHN0cih2YWx1ZSkKKyAgID4+PiBzID0gc3RyKHZhbHVlKSAgIyBjb252ZXJ0IHRoZSB0dXBsZSB0byBzdHJpbmcKICAgID4+PiBmLndyaXRlKHMpCiAgICAxOAogCkBAIC0zMzcsMTEgKzMzOCwxMSBAQAogICAgPj4+IGYgPSBvcGVuKCd3b3JrZmlsZScsICdyYisnKQogICAgPj4+IGYud3JpdGUoYicwMTIzNDU2Nzg5YWJjZGVmJykKICAgIDE2Ci0gICA+Pj4gZi5zZWVrKDUpICAgICAjIEdvIHRvIHRoZSA2dGggYnl0ZSBpbiB0aGUgZmlsZQorICAgPj4+IGYuc2Vlayg1KSAgICAgICMgR28gdG8gdGhlIDZ0aCBieXRlIGluIHRoZSBmaWxlCiAgICA1CiAgICA+Pj4gZi5yZWFkKDEpCiAgICBiJzUnCi0gICA+Pj4gZi5zZWVrKC0zLCAyKSAjIEdvIHRvIHRoZSAzcmQgYnl0ZSBiZWZvcmUgdGhlIGVuZAorICAgPj4+IGYuc2VlaygtMywgMikgICMgR28gdG8gdGhlIDNyZCBieXRlIGJlZm9yZSB0aGUgZW5kCiAgICAxMwogICAgPj4+IGYucmVhZCgxKQogICAgYidkJwpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdCBiL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKaW5kZXggYWJmMzBmMC4uZDczY2ZlYiAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CkBAIC00OSw2ICs0OSw2IEBACiBicHl0aG9uXy4KIAogCi0uLiBfR05VIFJlYWRsaW5lOiBodHRwOi8vdGlzd3d3LmNhc2UuZWR1L3BocC9jaGV0L3JlYWRsaW5lL3JsdG9wLmh0bWwKLS4uIF9JUHl0aG9uOiBodHRwOi8vaXB5dGhvbi5zY2lweS5vcmcvCisuLiBfR05VIFJlYWRsaW5lOiBodHRwczovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9yZWFkbGluZS9ybHRvcC5odG1sCisuLiBfSVB5dGhvbjogaHR0cHM6Ly9pcHl0aG9uLm9yZy8KIC4uIF9icHl0aG9uOiBodHRwOi8vd3d3LmJweXRob24taW50ZXJwcmV0ZXIub3JnLwpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdCBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKaW5kZXggZGQ2YjFhOS4uZThkOGUyYiAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CkBAIC0xMCwxMyArMTAsMTMgQEAKIEludm9raW5nIHRoZSBJbnRlcnByZXRlcgogPT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgdXN1YWxseSBpbnN0YWxsZWQgYXMgOmZpbGU6YC91c3IvbG9jYWwvYmluL3B5dGhvbjMuNGAKK1RoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgdXN1YWxseSBpbnN0YWxsZWQgYXMgOmZpbGU6YC91c3IvbG9jYWwvYmluL3B5dGhvbjMuNWAKIG9uIHRob3NlIG1hY2hpbmVzIHdoZXJlIGl0IGlzIGF2YWlsYWJsZTsgcHV0dGluZyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW5gIGluIHlvdXIKIFVuaXggc2hlbGwncyBzZWFyY2ggcGF0aCBtYWtlcyBpdCBwb3NzaWJsZSB0byBzdGFydCBpdCBieSB0eXBpbmcgdGhlIGNvbW1hbmQ6CiAKIC4uIGNvZGUtYmxvY2s6OiB0ZXh0CiAKLSAgIHB5dGhvbjMuNAorICAgcHl0aG9uMy41CiAKIHRvIHRoZSBzaGVsbC4gWyNdXyBTaW5jZSB0aGUgY2hvaWNlIG9mIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGludGVycHJldGVyIGxpdmVzCiBpcyBhbiBpbnN0YWxsYXRpb24gb3B0aW9uLCBvdGhlciBwbGFjZXMgYXJlIHBvc3NpYmxlOyBjaGVjayB3aXRoIHlvdXIgbG9jYWwKQEAgLTI0LDExICsyNCwxMSBAQAogcG9wdWxhciBhbHRlcm5hdGl2ZSBsb2NhdGlvbi4pCiAKIE9uIFdpbmRvd3MgbWFjaGluZXMsIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uIGlzIHVzdWFsbHkgcGxhY2VkIGluCi06ZmlsZTpgQzpcXFB5dGhvbjM0YCwgdGhvdWdoIHlvdSBjYW4gY2hhbmdlIHRoaXMgd2hlbiB5b3UncmUgcnVubmluZyB0aGUKKzpmaWxlOmBDOlxcUHl0aG9uMzVgLCB0aG91Z2ggeW91IGNhbiBjaGFuZ2UgdGhpcyB3aGVuIHlvdSdyZSBydW5uaW5nIHRoZQogaW5zdGFsbGVyLiAgVG8gYWRkIHRoaXMgZGlyZWN0b3J5IHRvIHlvdXIgcGF0aCwgIHlvdSBjYW4gdHlwZSB0aGUgZm9sbG93aW5nCiBjb21tYW5kIGludG8gdGhlIGNvbW1hbmQgcHJvbXB0IGluIGEgRE9TIGJveDo6CiAKLSAgIHNldCBwYXRoPSVwYXRoJTtDOlxweXRob24zNAorICAgc2V0IHBhdGg9JXBhdGglO0M6XHB5dGhvbjM1CiAKIFR5cGluZyBhbiBlbmQtb2YtZmlsZSBjaGFyYWN0ZXIgKDprYmQ6YENvbnRyb2wtRGAgb24gVW5peCwgOmtiZDpgQ29udHJvbC1aYCBvbgogV2luZG93cykgYXQgdGhlIHByaW1hcnkgcHJvbXB0IGNhdXNlcyB0aGUgaW50ZXJwcmV0ZXIgdG8gZXhpdCB3aXRoIGEgemVybyBleGl0CkBAIC05NCwxMCArOTQsMTIgQEAKIHVzdWFsbHkgdGhyZWUgZ3JlYXRlci10aGFuIHNpZ25zIChgYD4+PmBgKTsgZm9yIGNvbnRpbnVhdGlvbiBsaW5lcyBpdCBwcm9tcHRzCiB3aXRoIHRoZSAqc2Vjb25kYXJ5IHByb21wdCosIGJ5IGRlZmF1bHQgdGhyZWUgZG90cyAoYGAuLi5gYCkuIFRoZSBpbnRlcnByZXRlcgogcHJpbnRzIGEgd2VsY29tZSBtZXNzYWdlIHN0YXRpbmcgaXRzIHZlcnNpb24gbnVtYmVyIGFuZCBhIGNvcHlyaWdodCBub3RpY2UKLWJlZm9yZSBwcmludGluZyB0aGUgZmlyc3QgcHJvbXB0OjoKK2JlZm9yZSBwcmludGluZyB0aGUgZmlyc3QgcHJvbXB0OgogCi0gICAkIHB5dGhvbjMuNAotICAgUHl0aG9uIDMuNCAoZGVmYXVsdCwgTWFyIDE2IDIwMTQsIDA5OjI1OjA0KQorLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KKworICAgJCBweXRob24zLjUKKyAgIFB5dGhvbiAzLjUgKGRlZmF1bHQsIFNlcCAxNiAyMDE1LCAwOToyNTowNCkKICAgIFtHQ0MgNC44LjJdIG9uIGxpbnV4CiAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICA+Pj4KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbnRyb2R1Y3Rpb24ucnN0IGIvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QKaW5kZXggYzVjMTM0My4uMjE0MDMyOSAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QKQEAgLTIzMiw3ICsyMzIsNyBAQAogVGhpcyBmZWF0dXJlIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBicmVhayBsb25nIHN0cmluZ3M6OgogCiAgICA+Pj4gdGV4dCA9ICgnUHV0IHNldmVyYWwgc3RyaW5ncyB3aXRoaW4gcGFyZW50aGVzZXMgJwotICAgICAgICAgICAgICAgJ3RvIGhhdmUgdGhlbSBqb2luZWQgdG9nZXRoZXIuJykKKyAgIC4uLiAgICAgICAgICd0byBoYXZlIHRoZW0gam9pbmVkIHRvZ2V0aGVyLicpCiAgICA+Pj4gdGV4dAogICAgJ1B1dCBzZXZlcmFsIHN0cmluZ3Mgd2l0aGluIHBhcmVudGhlc2VzIHRvIGhhdmUgdGhlbSBqb2luZWQgdG9nZXRoZXIuJwogCkBAIC0yNzYsMTEgKzI3NiwxMSBAQAogU2xpY2UgaW5kaWNlcyBoYXZlIHVzZWZ1bCBkZWZhdWx0czsgYW4gb21pdHRlZCBmaXJzdCBpbmRleCBkZWZhdWx0cyB0byB6ZXJvLCBhbgogb21pdHRlZCBzZWNvbmQgaW5kZXggZGVmYXVsdHMgdG8gdGhlIHNpemUgb2YgdGhlIHN0cmluZyBiZWluZyBzbGljZWQuIDo6CiAKLSAgID4+PiB3b3JkWzoyXSAgIyBjaGFyYWN0ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHBvc2l0aW9uIDIgKGV4Y2x1ZGVkKQorICAgPj4+IHdvcmRbOjJdICAgIyBjaGFyYWN0ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHBvc2l0aW9uIDIgKGV4Y2x1ZGVkKQogICAgJ1B5JwotICAgPj4+IHdvcmRbNDpdICAjIGNoYXJhY3RlcnMgZnJvbSBwb3NpdGlvbiA0IChpbmNsdWRlZCkgdG8gdGhlIGVuZAorICAgPj4+IHdvcmRbNDpdICAgIyBjaGFyYWN0ZXJzIGZyb20gcG9zaXRpb24gNCAoaW5jbHVkZWQpIHRvIHRoZSBlbmQKICAgICdvbicKLSAgID4+PiB3b3JkWy0yOl0gIyBjaGFyYWN0ZXJzIGZyb20gdGhlIHNlY29uZC1sYXN0IChpbmNsdWRlZCkgdG8gdGhlIGVuZAorICAgPj4+IHdvcmRbLTI6XSAgIyBjaGFyYWN0ZXJzIGZyb20gdGhlIHNlY29uZC1sYXN0IChpbmNsdWRlZCkgdG8gdGhlIGVuZAogICAgJ29uJwogCiBPbmUgd2F5IHRvIHJlbWVtYmVyIGhvdyBzbGljZXMgd29yayBpcyB0byB0aGluayBvZiB0aGUgaW5kaWNlcyBhcyBwb2ludGluZwpAQCAtMzUyLDkgKzM1Miw4IEBACiAgICAgICBTdHJpbmdzIHN1cHBvcnQgYSBsYXJnZSBudW1iZXIgb2YgbWV0aG9kcyBmb3IKICAgICAgIGJhc2ljIHRyYW5zZm9ybWF0aW9ucyBhbmQgc2VhcmNoaW5nLgogCi0gICA6cmVmOmBzdHJpbmctZm9ybWF0dGluZ2AKLSAgICAgIEluZm9ybWF0aW9uIGFib3V0IHN0cmluZyBmb3JtYXR0aW5nIHdpdGggOm1ldGg6YHN0ci5mb3JtYXRgIGlzIGRlc2NyaWJlZAotICAgICAgaGVyZS4KKyAgIDpyZWY6YGZvcm1hdHN0cmluZ3NgCisgICAgICBJbmZvcm1hdGlvbiBhYm91dCBzdHJpbmcgZm9ybWF0dGluZyB3aXRoIDptZXRoOmBzdHIuZm9ybWF0YC4KIAogICAgOnJlZjpgb2xkLXN0cmluZy1mb3JtYXR0aW5nYAogICAgICAgVGhlIG9sZCBmb3JtYXR0aW5nIG9wZXJhdGlvbnMgaW52b2tlZCB3aGVuIHN0cmluZ3MgYW5kIFVuaWNvZGUgc3RyaW5ncyBhcmUKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdCBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdAppbmRleCBmZDM2MWFlLi4zNWRiMzA1IDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgICAgIGEsIGIgPSBiLCBhK2IKICAgICAgICBwcmludCgpCiAKLSAgIGRlZiBmaWIyKG4pOiAjIHJldHVybiBGaWJvbmFjY2kgc2VyaWVzIHVwIHRvIG4KKyAgIGRlZiBmaWIyKG4pOiAgICMgcmV0dXJuIEZpYm9uYWNjaSBzZXJpZXMgdXAgdG8gbgogICAgICAgIHJlc3VsdCA9IFtdCiAgICAgICAgYSwgYiA9IDAsIDEKICAgICAgICB3aGlsZSBiIDwgbjoKQEAgLTExNyw3ICsxMTcsOCBAQAogICAgRm9yIGVmZmljaWVuY3kgcmVhc29ucywgZWFjaCBtb2R1bGUgaXMgb25seSBpbXBvcnRlZCBvbmNlIHBlciBpbnRlcnByZXRlcgogICAgc2Vzc2lvbi4gIFRoZXJlZm9yZSwgaWYgeW91IGNoYW5nZSB5b3VyIG1vZHVsZXMsIHlvdSBtdXN0IHJlc3RhcnQgdGhlCiAgICBpbnRlcnByZXRlciAtLSBvciwgaWYgaXQncyBqdXN0IG9uZSBtb2R1bGUgeW91IHdhbnQgdG8gdGVzdCBpbnRlcmFjdGl2ZWx5LAotICAgdXNlIDpmdW5jOmBpbXAucmVsb2FkYCwgZS5nLiBgYGltcG9ydCBpbXA7IGltcC5yZWxvYWQobW9kdWxlbmFtZSlgYC4KKyAgIHVzZSA6ZnVuYzpgaW1wb3J0bGliLnJlbG9hZGAsIGUuZy4gYGBpbXBvcnQgaW1wb3J0bGliOworICAgaW1wb3J0bGliLnJlbG9hZChtb2R1bGVuYW1lKWBgLgogCiAKIC4uIF90dXQtbW9kdWxlc2Fzc2NyaXB0czoKQEAgLTEzOSw3ICsxNDAsOSBAQAogCiB5b3UgY2FuIG1ha2UgdGhlIGZpbGUgdXNhYmxlIGFzIGEgc2NyaXB0IGFzIHdlbGwgYXMgYW4gaW1wb3J0YWJsZSBtb2R1bGUsCiBiZWNhdXNlIHRoZSBjb2RlIHRoYXQgcGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgb25seSBydW5zIGlmIHRoZSBtb2R1bGUgaXMKLWV4ZWN1dGVkIGFzIHRoZSAibWFpbiIgZmlsZTo6CitleGVjdXRlZCBhcyB0aGUgIm1haW4iIGZpbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgcHl0aG9uIGZpYm8ucHkgNTAKICAgIDEgMSAyIDMgNSA4IDEzIDIxIDM0CkBAIC0yMTYsMTUgKzIxOSwxNSBAQAogICBzdGF0ZW1lbnRzLCB0aGUgYGAtT09gYCBzd2l0Y2ggcmVtb3ZlcyBib3RoIGFzc2VydCBzdGF0ZW1lbnRzIGFuZCBfX2RvY19fCiAgIHN0cmluZ3MuICBTaW5jZSBzb21lIHByb2dyYW1zIG1heSByZWx5IG9uIGhhdmluZyB0aGVzZSBhdmFpbGFibGUsIHlvdSBzaG91bGQKICAgb25seSB1c2UgdGhpcyBvcHRpb24gaWYgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuICAiT3B0aW1pemVkIiBtb2R1bGVzIGhhdmUKLSAgYSAucHlvIHJhdGhlciB0aGFuIGEgLnB5YyBzdWZmaXggYW5kIGFyZSB1c3VhbGx5IHNtYWxsZXIuICBGdXR1cmUgcmVsZWFzZXMgbWF5CisgIGFuIGBgb3B0LWBgIHRhZyBhbmQgYXJlIHVzdWFsbHkgc21hbGxlci4gIEZ1dHVyZSByZWxlYXNlcyBtYXkKICAgY2hhbmdlIHRoZSBlZmZlY3RzIG9mIG9wdGltaXphdGlvbi4KIAotKiBBIHByb2dyYW0gZG9lc24ndCBydW4gYW55IGZhc3RlciB3aGVuIGl0IGlzIHJlYWQgZnJvbSBhIGBgLnB5Y2BgIG9yIGBgLnB5b2BgCisqIEEgcHJvZ3JhbSBkb2Vzbid0IHJ1biBhbnkgZmFzdGVyIHdoZW4gaXQgaXMgcmVhZCBmcm9tIGEgYGAucHljYGAKICAgZmlsZSB0aGFuIHdoZW4gaXQgaXMgcmVhZCBmcm9tIGEgYGAucHlgYCBmaWxlOyB0aGUgb25seSB0aGluZyB0aGF0J3MgZmFzdGVyCi0gIGFib3V0IGBgLnB5Y2BgIG9yIGBgLnB5b2BgIGZpbGVzIGlzIHRoZSBzcGVlZCB3aXRoIHdoaWNoIHRoZXkgYXJlIGxvYWRlZC4KKyAgYWJvdXQgYGAucHljYGAgZmlsZXMgaXMgdGhlIHNwZWVkIHdpdGggd2hpY2ggdGhleSBhcmUgbG9hZGVkLgogCi0qIFRoZSBtb2R1bGUgOm1vZDpgY29tcGlsZWFsbGAgY2FuIGNyZWF0ZSAucHljIGZpbGVzIChvciAucHlvIGZpbGVzIHdoZW4KLSAgOm9wdGlvbjpgLU9gIGlzIHVzZWQpIGZvciBhbGwgbW9kdWxlcyBpbiBhIGRpcmVjdG9yeS4KKyogVGhlIG1vZHVsZSA6bW9kOmBjb21waWxlYWxsYCBjYW4gY3JlYXRlIC5weWMgZmlsZXMgZm9yIGFsbCBtb2R1bGVzIGluIGEKKyAgZGlyZWN0b3J5LgogCiAqIFRoZXJlIGlzIG1vcmUgZGV0YWlsIG9uIHRoaXMgcHJvY2VzcywgaW5jbHVkaW5nIGEgZmxvdyBjaGFydCBvZiB0aGUKICAgZGVjaXNpb25zLCBpbiBQRVAgMzE0Ny4KQEAgLTU0OCw0ICs1NTEsMyBAQAogLi4gWyNdIEluIGZhY3QgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYXJlIGFsc28gJ3N0YXRlbWVudHMnIHRoYXQgYXJlICdleGVjdXRlZCc7IHRoZQogICAgZXhlY3V0aW9uIG9mIGEgbW9kdWxlLWxldmVsIGZ1bmN0aW9uIGRlZmluaXRpb24gZW50ZXJzIHRoZSBmdW5jdGlvbiBuYW1lIGluCiAgICB0aGUgbW9kdWxlJ3MgZ2xvYmFsIHN5bWJvbCB0YWJsZS4KLQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAppbmRleCA3MmQ1MWRlLi41MmZmZGJlIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdApAQCAtMTUsNyArMTUsNyBAQAogCiAgICA+Pj4gaW1wb3J0IG9zCiAgICA+Pj4gb3MuZ2V0Y3dkKCkgICAgICAjIFJldHVybiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQotICAgJ0M6XFxQeXRob24zNCcKKyAgICdDOlxcUHl0aG9uMzUnCiAgICA+Pj4gb3MuY2hkaXIoJy9zZXJ2ZXIvYWNjZXNzbG9ncycpICAgIyBDaGFuZ2UgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQogICAgPj4+IG9zLnN5c3RlbSgnbWtkaXIgdG9kYXknKSAgICMgUnVuIHRoZSBjb21tYW5kIG1rZGlyIGluIHRoZSBzeXN0ZW0gc2hlbGwKICAgIDAKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgID4+PiBzdGF0aXN0aWNzLnZhcmlhbmNlKGRhdGEpCiAgICAgMS4zNzIwMjM4MDk1MjM4MDk1CiAKLVRoZSBTY2lQeSBwcm9qZWN0IDxodHRwOi8vc2NpcHkub3JnPiBoYXMgbWFueSBvdGhlciBtb2R1bGVzIGZvciBudW1lcmljYWwKK1RoZSBTY2lQeSBwcm9qZWN0IDxodHRwczovL3NjaXB5Lm9yZz4gaGFzIG1hbnkgb3RoZXIgbW9kdWxlcyBmb3IgbnVtZXJpY2FsCiBjb21wdXRhdGlvbnMuCiAKIC4uIF90dXQtaW50ZXJuZXQtYWNjZXNzOgpAQCAtMzAxLDcgKzMwMSw3IEBACiAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgIGF2ZXJhZ2UoMjAsIDMwLCA3MCkKIAotICAgdW5pdHRlc3QubWFpbigpICMgQ2FsbGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaW52b2tlcyBhbGwgdGVzdHMKKyAgIHVuaXR0ZXN0Lm1haW4oKSAgIyBDYWxsaW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZSBpbnZva2VzIGFsbCB0ZXN0cwogCiAKIC4uIF90dXQtYmF0dGVyaWVzLWluY2x1ZGVkOgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0IGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CmluZGV4IGMwMTk3ZWEuLjM3MTQzODQgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKQEAgLTE4LDcgKzE4LDcgQEAKIAogICAgPj4+IGltcG9ydCByZXBybGliCiAgICA+Pj4gcmVwcmxpYi5yZXByKHNldCgnc3VwZXJjYWxpZnJhZ2lsaXN0aWNleHBpYWxpZG9jaW91cycpKQotICAgInNldChbJ2EnLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgLi4uXSkiCisgICAieydhJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsIC4uLn0iCiAKIFRoZSA6bW9kOmBwcHJpbnRgIG1vZHVsZSBvZmZlcnMgbW9yZSBzb3BoaXN0aWNhdGVkIGNvbnRyb2wgb3ZlciBwcmludGluZyBib3RoCiBidWlsdC1pbiBhbmQgdXNlciBkZWZpbmVkIG9iamVjdHMgaW4gYSB3YXkgdGhhdCBpcyByZWFkYWJsZSBieSB0aGUgaW50ZXJwcmV0ZXIuCkBAIC0xODAsNiArMTgwLDcgQEAKICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQogICAgICAgICAgICBzZWxmLmluZmlsZSA9IGluZmlsZQogICAgICAgICAgICBzZWxmLm91dGZpbGUgPSBvdXRmaWxlCisKICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAgICBmID0gemlwZmlsZS5aaXBGaWxlKHNlbGYub3V0ZmlsZSwgJ3cnLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKICAgICAgICAgICAgZi53cml0ZShzZWxmLmluZmlsZSkKQEAgLTI3Nyw3ICsyNzgsNyBAQAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgogICAgICAgIGRbJ3ByaW1hcnknXSAgICAgICAgICAgICAgICAjIGVudHJ5IHdhcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQKLSAgICAgRmlsZSAiQzovcHl0aG9uMzQvbGliL3dlYWtyZWYucHkiLCBsaW5lIDQ2LCBpbiBfX2dldGl0ZW1fXworICAgICBGaWxlICJDOi9weXRob24zNS9saWIvd2Vha3JlZi5weSIsIGxpbmUgNDYsIGluIF9fZ2V0aXRlbV9fCiAgICAgICAgbyA9IHNlbGYuZGF0YVtrZXldKCkKICAgIEtleUVycm9yOiAncHJpbWFyeScKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3doYXRub3cucnN0IGIvRG9jL3R1dG9yaWFsL3doYXRub3cucnN0CmluZGV4IDQ3OTU0MmMuLjFlYTIyYWUgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC93aGF0bm93LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvd2hhdG5vdy5yc3QKQEAgLTQzLDcgKzQzLDcgQEAKICAgZm9yIGRvd25sb2FkLiAgT25jZSB5b3UgYmVnaW4gcmVsZWFzaW5nIGNvZGUsIHlvdSBjYW4gcmVnaXN0ZXIgaXQgaGVyZSBzbyB0aGF0CiAgIG90aGVycyBjYW4gZmluZCBpdC4KIAotKiBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy9sYW5ncy9weXRob24vOiBUaGUgUHl0aG9uIENvb2tib29rIGlzIGEKKyogaHR0cHM6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzL2xhbmdzL3B5dGhvbi86IFRoZSBQeXRob24gQ29va2Jvb2sgaXMgYQogICBzaXphYmxlIGNvbGxlY3Rpb24gb2YgY29kZSBleGFtcGxlcywgbGFyZ2VyIG1vZHVsZXMsIGFuZCB1c2VmdWwgc2NyaXB0cy4KICAgUGFydGljdWxhcmx5IG5vdGFibGUgY29udHJpYnV0aW9ucyBhcmUgY29sbGVjdGVkIGluIGEgYm9vayBhbHNvIHRpdGxlZCBQeXRob24KICAgQ29va2Jvb2sgKE8nUmVpbGx5ICYgQXNzb2NpYXRlcywgSVNCTiAwLTU5Ni0wMDc5Ny0zLikKQEAgLTUxLDcgKzUxLDcgQEAKICogaHR0cDovL3d3dy5weXZpZGVvLm9yZyBjb2xsZWN0cyBsaW5rcyB0byBQeXRob24tcmVsYXRlZCB2aWRlb3MgZnJvbQogICBjb25mZXJlbmNlcyBhbmQgdXNlci1ncm91cCBtZWV0aW5ncy4KIAotKiBodHRwOi8vc2NpcHkub3JnOiBUaGUgU2NpZW50aWZpYyBQeXRob24gcHJvamVjdCBpbmNsdWRlcyBtb2R1bGVzIGZvciBmYXN0CisqIGh0dHBzOi8vc2NpcHkub3JnOiBUaGUgU2NpZW50aWZpYyBQeXRob24gcHJvamVjdCBpbmNsdWRlcyBtb2R1bGVzIGZvciBmYXN0CiAgIGFycmF5IGNvbXB1dGF0aW9ucyBhbmQgbWFuaXB1bGF0aW9ucyBwbHVzIGEgaG9zdCBvZiBwYWNrYWdlcyBmb3Igc3VjaAogICB0aGluZ3MgYXMgbGluZWFyIGFsZ2VicmEsIEZvdXJpZXIgdHJhbnNmb3Jtcywgbm9uLWxpbmVhciBzb2x2ZXJzLAogICByYW5kb20gbnVtYmVyIGRpc3RyaWJ1dGlvbnMsIHN0YXRpc3RpY2FsIGFuYWx5c2lzIGFuZCB0aGUgbGlrZS4KZGlmZiAtLWdpdCBhL0RvYy91c2luZy9jbWRsaW5lLnJzdCBiL0RvYy91c2luZy9jbWRsaW5lLnJzdAppbmRleCBhNDYzNDliLi5lYzc0NGEzIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvY21kbGluZS5yc3QKKysrIGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CkBAIC03Nyw3ICs3Nyw3IEBACiAgICB0aGUgOm1vZDpgX19tYWluX19gIG1vZHVsZS4KIAogICAgU2luY2UgdGhlIGFyZ3VtZW50IGlzIGEgKm1vZHVsZSogbmFtZSwgeW91IG11c3Qgbm90IGdpdmUgYSBmaWxlIGV4dGVuc2lvbgotICAgKGBgLnB5YGApLiAgVGhlIGBgbW9kdWxlLW5hbWVgYCBzaG91bGQgYmUgYSB2YWxpZCBQeXRob24gbW9kdWxlIG5hbWUsIGJ1dAorICAgKGBgLnB5YGApLiAgVGhlIG1vZHVsZSBuYW1lIHNob3VsZCBiZSBhIHZhbGlkIGFic29sdXRlIFB5dGhvbiBtb2R1bGUgbmFtZSwgYnV0CiAgICB0aGUgaW1wbGVtZW50YXRpb24gbWF5IG5vdCBhbHdheXMgZW5mb3JjZSB0aGlzIChlLmcuIGl0IG1heSBhbGxvdyB5b3UgdG8KICAgIHVzZSBhIG5hbWUgdGhhdCBpbmNsdWRlcyBhIGh5cGhlbikuCiAKQEAgLTE5MCwxMyArMTkwLDE2IEBACiAKIC4uIGNtZG9wdGlvbjo6IC1iCiAKLSAgIElzc3VlIGEgd2FybmluZyB3aGVuIGNvbXBhcmluZyBzdHIgYW5kIGJ5dGVzLiBJc3N1ZSBhbiBlcnJvciB3aGVuIHRoZQorICAgSXNzdWUgYSB3YXJuaW5nIHdoZW4gY29tcGFyaW5nIDpjbGFzczpgYnl0ZXNgIG9yIDpjbGFzczpgYnl0ZWFycmF5YCB3aXRoCisgICA6Y2xhc3M6YHN0cmAgb3IgOmNsYXNzOmBieXRlc2Agd2l0aCA6Y2xhc3M6YGludGAuICBJc3N1ZSBhbiBlcnJvciB3aGVuIHRoZQogICAgb3B0aW9uIGlzIGdpdmVuIHR3aWNlICg6b3B0aW9uOmAtYmJgKS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUKKyAgICAgIEFmZmVjdHMgY29tcGFyaXNvbnMgb2YgOmNsYXNzOmBieXRlc2Agd2l0aCA6Y2xhc3M6YGludGAuCiAKIC4uIGNtZG9wdGlvbjo6IC1CCiAKLSAgIElmIGdpdmVuLCBQeXRob24gd29uJ3QgdHJ5IHRvIHdyaXRlIGBgLnB5Y2BgIG9yIGBgLnB5b2BgIGZpbGVzIG9uIHRoZQorICAgSWYgZ2l2ZW4sIFB5dGhvbiB3b24ndCB0cnkgdG8gd3JpdGUgYGAucHljYGAgZmlsZXMgb24gdGhlCiAgICBpbXBvcnQgb2Ygc291cmNlIG1vZHVsZXMuICBTZWUgYWxzbyA6ZW52dmFyOmBQWVRIT05ET05UV1JJVEVCWVRFQ09ERWAuCiAKIApAQCAtMzk1LDcgKzM5OCw3IEBACiAgICAgIHRyYWNpbmcgd2l0aCBhIHRyYWNlYmFjayBsaW1pdCBvZiAqTkZSQU1FKiBmcmFtZXMuIFNlZSB0aGUKICAgICAgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAotICAgSXQgYWxzbyBhbGxvd3MgdG8gcGFzcyBhcmJpdHJhcnkgdmFsdWVzIGFuZCByZXRyaWV2ZSB0aGVtIHRocm91Z2ggdGhlCisgICBJdCBhbHNvIGFsbG93cyBwYXNzaW5nIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZpbmcgdGhlbSB0aHJvdWdoIHRoZQogICAgOmRhdGE6YHN5cy5feG9wdGlvbnNgIGRpY3Rpb25hcnkuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvbWFjLnJzdCBiL0RvYy91c2luZy9tYWMucnN0CmluZGV4IGVmMDkxZTUuLjA1YzkxYmIgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy9tYWMucnN0CisrKyBiL0RvYy91c2luZy9tYWMucnN0CkBAIC0yNSw3ICsyNSw3IEBACiAKIFdoYXQgeW91IGdldCBhZnRlciBpbnN0YWxsaW5nIGlzIGEgbnVtYmVyIG9mIHRoaW5nczoKIAotKiBBIDpmaWxlOmBNYWNQeXRob24gMy40YCBmb2xkZXIgaW4geW91ciA6ZmlsZTpgQXBwbGljYXRpb25zYCBmb2xkZXIuIEluIGhlcmUKKyogQSA6ZmlsZTpgTWFjUHl0aG9uIDMuNWAgZm9sZGVyIGluIHlvdXIgOmZpbGU6YEFwcGxpY2F0aW9uc2AgZm9sZGVyLiBJbiBoZXJlCiAgIHlvdSBmaW5kIElETEUsIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB0aGF0IGlzIGEgc3RhbmRhcmQgcGFydCBvZiBvZmZpY2lhbAogICBQeXRob24gZGlzdHJpYnV0aW9uczsgUHl0aG9uTGF1bmNoZXIsIHdoaWNoIGhhbmRsZXMgZG91YmxlLWNsaWNraW5nIFB5dGhvbgogICBzY3JpcHRzIGZyb20gdGhlIEZpbmRlcjsgYW5kIHRoZSAiQnVpbGQgQXBwbGV0IiB0b29sLCB3aGljaCBhbGxvd3MgeW91IHRvCkBAIC02NSw3ICs2NSw3IEBACiA6cHJvZ3JhbTpgZW1hY3NgIGFtb25nIHRoZW0uIElmIHlvdSB3YW50IGEgbW9yZSBNYWMtbGlrZSBlZGl0b3IsCiA6cHJvZ3JhbTpgQkJFZGl0YCBvciA6cHJvZ3JhbTpgVGV4dFdyYW5nbGVyYCBmcm9tIEJhcmUgQm9uZXMgU29mdHdhcmUgKHNlZQogaHR0cDovL3d3dy5iYXJlYm9uZXMuY29tL3Byb2R1Y3RzL2JiZWRpdC9pbmRleC5odG1sKSBhcmUgZ29vZCBjaG9pY2VzLCBhcyBpcwotOnByb2dyYW06YFRleHRNYXRlYCAoc2VlIGh0dHA6Ly9tYWNyb21hdGVzLmNvbS8pLiBPdGhlciBlZGl0b3JzIGluY2x1ZGUKKzpwcm9ncmFtOmBUZXh0TWF0ZWAgKHNlZSBodHRwczovL21hY3JvbWF0ZXMuY29tLykuIE90aGVyIGVkaXRvcnMgaW5jbHVkZQogOnByb2dyYW06YEd2aW1gIChodHRwOi8vbWFjdmltLm9yZykgYW5kIDpwcm9ncmFtOmBBcXVhbWFjc2AKIChodHRwOi8vYXF1YW1hY3Mub3JnLykuCiAKQEAgLTkzLDcgKzkzLDcgQEAKIGFueXRoaW5nIHRoYXQgaGFzIGEgR1VJKSBuZWVkIHRvIGJlIHJ1biBpbiBhIHNwZWNpYWwgd2F5LiBVc2UgOnByb2dyYW06YHB5dGhvbndgCiBpbnN0ZWFkIG9mIDpwcm9ncmFtOmBweXRob25gIHRvIHN0YXJ0IHN1Y2ggc2NyaXB0cy4KIAotV2l0aCBQeXRob24gMy40LCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgorV2l0aCBQeXRob24gMy41LCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgogCiAKIENvbmZpZ3VyYXRpb24KQEAgLTE0NCwyMiArMTQ0LDIyIEBACiBhdmFpbGFibGUgZnJvbSBodHRwczovL3B5dGhvbmhvc3RlZC5vcmcvcHlvYmpjLy4KIAogVGhlIHN0YW5kYXJkIFB5dGhvbiBHVUkgdG9vbGtpdCBpcyA6bW9kOmB0a2ludGVyYCwgYmFzZWQgb24gdGhlIGNyb3NzLXBsYXRmb3JtCi1UayB0b29sa2l0IChodHRwOi8vd3d3LnRjbC50aykuIEFuIEFxdWEtbmF0aXZlIHZlcnNpb24gb2YgVGsgaXMgYnVuZGxlZCB3aXRoIE9TCitUayB0b29sa2l0IChodHRwczovL3d3dy50Y2wudGspLiBBbiBBcXVhLW5hdGl2ZSB2ZXJzaW9uIG9mIFRrIGlzIGJ1bmRsZWQgd2l0aCBPUwogWCBieSBBcHBsZSwgYW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBjYW4gYmUgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkIGZyb20KLWh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tOyBpdCBjYW4gYWxzbyBiZSBidWlsdCBmcm9tIHNvdXJjZS4KK2h0dHBzOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbTsgaXQgY2FuIGFsc28gYmUgYnVpbHQgZnJvbSBzb3VyY2UuCiAKICp3eFB5dGhvbiogaXMgYW5vdGhlciBwb3B1bGFyIGNyb3NzLXBsYXRmb3JtIEdVSSB0b29sa2l0IHRoYXQgcnVucyBuYXRpdmVseSBvbgogTWFjIE9TIFguIFBhY2thZ2VzIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3Lnd4cHl0aG9uLm9yZy4KIAogKlB5UXQqIGlzIGFub3RoZXIgcG9wdWxhciBjcm9zcy1wbGF0Zm9ybSBHVUkgdG9vbGtpdCB0aGF0IHJ1bnMgbmF0aXZlbHkgb24gTWFjCiBPUyBYLiBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBhdAotaHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlxdC9pbnRyby4KK2h0dHBzOi8vcml2ZXJiYW5rY29tcHV0aW5nLmNvbS9zb2Z0d2FyZS9weXF0L2ludHJvLgogCiAKIERpc3RyaWJ1dGluZyBQeXRob24gQXBwbGljYXRpb25zIG9uIHRoZSBNYWMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlICJCdWlsZCBBcHBsZXQiIHRvb2wgdGhhdCBpcyBwbGFjZWQgaW4gdGhlIE1hY1B5dGhvbiAzLjQgZm9sZGVyIGlzIGZpbmUgZm9yCitUaGUgIkJ1aWxkIEFwcGxldCIgdG9vbCB0aGF0IGlzIHBsYWNlZCBpbiB0aGUgTWFjUHl0aG9uIDMuNSBmb2xkZXIgaXMgZmluZSBmb3IKIHBhY2thZ2luZyBzbWFsbCBQeXRob24gc2NyaXB0cyBvbiB5b3VyIG93biBtYWNoaW5lIHRvIHJ1biBhcyBhIHN0YW5kYXJkIE1hYwogYXBwbGljYXRpb24uIFRoaXMgdG9vbCwgaG93ZXZlciwgaXMgbm90IHJvYnVzdCBlbm91Z2ggdG8gZGlzdHJpYnV0ZSBQeXRob24KIGFwcGxpY2F0aW9ucyB0byBvdGhlciB1c2Vycy4KZGlmZiAtLWdpdCBhL0RvYy91c2luZy91bml4LnJzdCBiL0RvYy91c2luZy91bml4LnJzdAppbmRleCA1ZGExZjIzLi40NDQ5ZDRmIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvdW5peC5yc3QKKysrIGIvRG9jL3VzaW5nL3VuaXgucnN0CkBAIC0yNiwxMSArMjYsMTEgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGh0dHA6Ly93d3cuZGViaWFuLm9yZy9kb2MvbWFudWFscy9tYWludC1ndWlkZS9maXJzdC5lbi5odG1sCisgICBodHRwczovL3d3dy5kZWJpYW4ub3JnL2RvYy9tYW51YWxzL21haW50LWd1aWRlL2ZpcnN0LmVuLmh0bWwKICAgICAgIGZvciBEZWJpYW4gdXNlcnMKLSAgIGh0dHA6Ly9lbi5vcGVuc3VzZS5vcmcvUG9ydGFsOlBhY2thZ2luZworICAgaHR0cHM6Ly9lbi5vcGVuc3VzZS5vcmcvUG9ydGFsOlBhY2thZ2luZwogICAgICAgZm9yIE9wZW5TdXNlIHVzZXJzCi0gICBodHRwOi8vZG9jcy5mZWRvcmFwcm9qZWN0Lm9yZy9lbi1VUy9GZWRvcmFfRHJhZnRfRG9jdW1lbnRhdGlvbi8wLjEvaHRtbC9SUE1fR3VpZGUvY2gtY3JlYXRpbmctcnBtcy5odG1sCisgICBodHRwczovL2RvY3MuZmVkb3JhcHJvamVjdC5vcmcvZW4tVVMvRmVkb3JhX0RyYWZ0X0RvY3VtZW50YXRpb24vMC4xL2h0bWwvUlBNX0d1aWRlL2NoLWNyZWF0aW5nLXJwbXMuaHRtbAogICAgICAgZm9yIEZlZG9yYSB1c2VycwogICAgaHR0cDovL3d3dy5zbGFja2Jvb2sub3JnL2h0bWwvcGFja2FnZS1tYW5hZ2VtZW50LW1ha2luZy1wYWNrYWdlcy5odG1sCiAgICAgICBmb3IgU2xhY2t3YXJlIHVzZXJzCkBAIC01NSw3ICs1NSw3IEBACiBPbiBPcGVuU29sYXJpcwogLS0tLS0tLS0tLS0tLS0KIAotWW91IGNhbiBnZXQgUHl0aG9uIGZyb20gYE9wZW5DU1cgPGh0dHA6Ly93d3cub3BlbmNzdy5vcmcvPmBfLiAgVmFyaW91cyB2ZXJzaW9ucworWW91IGNhbiBnZXQgUHl0aG9uIGZyb20gYE9wZW5DU1cgPGh0dHBzOi8vd3d3Lm9wZW5jc3cub3JnLz5gXy4gIFZhcmlvdXMgdmVyc2lvbnMKIG9mIFB5dGhvbiBhcmUgYXZhaWxhYmxlIGFuZCBjYW4gYmUgaW5zdGFsbGVkIHdpdGggZS5nLiBgYHBrZ3V0aWwgLWkgcHl0aG9uMjdgYC4KIAogCkBAIC02NSw3ICs2NSw3IEBACiA9PT09PT09PT09PT09PT0KIAogSWYgeW91IHdhbnQgdG8gY29tcGlsZSBDUHl0aG9uIHlvdXJzZWxmLCBmaXJzdCB0aGluZyB5b3Ugc2hvdWxkIGRvIGlzIGdldCB0aGUKLWBzb3VyY2UgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvc291cmNlLz5gXy4gWW91IGNhbiBkb3dubG9hZCBlaXRoZXIgdGhlCitgc291cmNlIDxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2Fkcy9zb3VyY2UvPmBfLiBZb3UgY2FuIGRvd25sb2FkIGVpdGhlciB0aGUKIGxhdGVzdCByZWxlYXNlJ3Mgc291cmNlIG9yIGp1c3QgZ3JhYiBhIGZyZXNoIGBjbG9uZQogPGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL3NldHVwLmh0bWwjZ2V0dGluZy10aGUtc291cmNlLWNvZGU+YF8uICAoSWYgeW91IHdhbnQKIHRvIGNvbnRyaWJ1dGUgcGF0Y2hlcywgeW91IHdpbGwgbmVlZCBhIGNsb25lLikKQEAgLTEzOSwxMCArMTM5LDEwIEBACiBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29kZSBpbiBQeXRob24gaW4gdGhlc2UgZWRpdG9ycywgbG9vayBhdDoKIAogKiBodHRwOi8vd3d3LnZpbS5vcmcvc2NyaXB0cy9zY3JpcHQucGhwP3NjcmlwdF9pZD03OTAKLSogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9weXRob24tbW9kZQorKiBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9weXRob24tbW9kZQogCiBHZWFueSBpcyBhbiBleGNlbGxlbnQgSURFIHdpdGggc3VwcG9ydCBmb3IgYSBsb3Qgb2YgbGFuZ3VhZ2VzLiBGb3IgbW9yZQotaW5mb3JtYXRpb24sIHJlYWQ6IGh0dHA6Ly93d3cuZ2Vhbnkub3JnLworaW5mb3JtYXRpb24sIHJlYWQ6IGh0dHBzOi8vd3d3LmdlYW55Lm9yZy8KIAogS29tb2RvIGVkaXQgaXMgYW5vdGhlciBleHRyZW1lbHkgZ29vZCBJREUuICBJdCBhbHNvIGhhcyBzdXBwb3J0IGZvciBhIGxvdCBvZgotbGFuZ3VhZ2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCBodHRwOi8va29tb2RvaWRlLmNvbS8uCitsYW5ndWFnZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIGh0dHBzOi8va29tb2RvaWRlLmNvbS8uCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jIGIvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYwppbmRleCA0NWJkZDVhLi43YWQzMDA4IDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCisrKyBiL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKQEAgLTE0LDIzICsxNCwyNCBAQAogLi4gc2VlYWxzbzo6CiAKICAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IENyZWF0aW5nIGFuZCB1c2luZyB2aXJ0dWFsIGVudmlyb25tZW50cwotICAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2luc3RhbGxpbmcuaHRtbCN2aXJ0dWFsLWVudmlyb25tZW50cz5gX18KKyAgIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9pbnN0YWxsaW5nLyNjcmVhdGluZy12aXJ0dWFsLWVudmlyb25tZW50cz5gX18KIAogLi4gaGlnaGxpZ2h0Ojogbm9uZQogCiBPbiBXaW5kb3dzLCB5b3UgbWF5IGhhdmUgdG8gaW52b2tlIHRoZSBgYHB5dmVudmBgIHNjcmlwdCBhcyBmb2xsb3dzLCBpZiB5b3UKIGRvbid0IGhhdmUgdGhlIHJlbGV2YW50IFBBVEggYW5kIFBBVEhFWFQgc2V0dGluZ3M6OgogCi0gICAgYzpcVGVtcD5jOlxQeXRob24zNFxweXRob24gYzpcUHl0aG9uMzRcVG9vbHNcU2NyaXB0c1xweXZlbnYucHkgbXllbnYKKyAgICBjOlxUZW1wPmM6XFB5dGhvbjM1XHB5dGhvbiBjOlxQeXRob24zNVxUb29sc1xTY3JpcHRzXHB5dmVudi5weSBteWVudgogCiBvciBlcXVpdmFsZW50bHk6OgogCi0gICAgYzpcVGVtcD5jOlxQeXRob24zNFxweXRob24gLW0gdmVudiBteWVudgorICAgIGM6XFRlbXA+YzpcUHl0aG9uMzVccHl0aG9uIC1tIHZlbnYgbXllbnYKIAogVGhlIGNvbW1hbmQsIGlmIHJ1biB3aXRoIGBgLWhgYCwgd2lsbCBzaG93IHRoZSBhdmFpbGFibGUgb3B0aW9uczo6CiAKLSAgICB1c2FnZTogdmVudiBbLWhdIFstLXN5c3RlbS1zaXRlLXBhY2thZ2VzXSBbLS1zeW1saW5rc10gWy0tY2xlYXJdCi0gICAgICAgICAgICAgICAgWy0tdXBncmFkZV0gWy0td2l0aG91dC1waXBdIEVOVl9ESVIgW0VOVl9ESVIgLi4uXQorICAgIHVzYWdlOiB2ZW52IFstaF0gWy0tc3lzdGVtLXNpdGUtcGFja2FnZXNdIFstLXN5bWxpbmtzIHwgLS1jb3BpZXNdIFstLWNsZWFyXQorICAgICAgICAgICAgICAgIFstLXVwZ3JhZGVdIFstLXdpdGhvdXQtcGlwXQorICAgICAgICAgICAgICAgIEVOVl9ESVIgW0VOVl9ESVIgLi4uXQogCiAgICAgQ3JlYXRlcyB2aXJ0dWFsIFB5dGhvbiBlbnZpcm9ubWVudHMgaW4gb25lIG9yIG1vcmUgdGFyZ2V0IGRpcmVjdG9yaWVzLgogCkBAIC0zOSwxNSArNDAsMTQgQEAKIAogICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAotICAgICAgLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlcyBHaXZlIGFjY2VzcyB0byB0aGUgZ2xvYmFsIHNpdGUtcGFja2FnZXMgZGlyIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGVudmlyb25tZW50LgorICAgICAgLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlcyBHaXZlIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGFjY2VzcyB0byB0aGUgc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpdGUtcGFja2FnZXMgZGlyLgogICAgICAgLS1zeW1saW5rcyAgICAgICAgICAgICBUcnkgdG8gdXNlIHN5bWxpbmtzIHJhdGhlciB0aGFuIGNvcGllcywgd2hlbiBzeW1saW5rcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgbm90IHRoZSBkZWZhdWx0IGZvciB0aGUgcGxhdGZvcm0uCiAgICAgICAtLWNvcGllcyAgICAgICAgICAgICAgIFRyeSB0byB1c2UgY29waWVzIHJhdGhlciB0aGFuIHN5bWxpbmtzLCBldmVuIHdoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3MgYXJlIHRoZSBkZWZhdWx0IGZvciB0aGUgcGxhdGZvcm0uCi0gICAgICAtLWNsZWFyICAgICAgICAgICAgICAgIERlbGV0ZSB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IGlmIGl0IGFscmVhZHkgZXhpc3RzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0cywgYW4gZXJyb3IgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkLgorICAgICAgLS1jbGVhciAgICAgICAgICAgICAgICBEZWxldGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RvcnkgaWYgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBleGlzdHMsIGJlZm9yZSBlbnZpcm9ubWVudCBjcmVhdGlvbi4KICAgICAgIC0tdXBncmFkZSAgICAgICAgICAgICAgVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuCiAgICAgICAtLXdpdGhvdXQtcGlwICAgICAgICAgIFNraXBzIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHBpcCBpbiB0aGUgdmlydHVhbApAQCAtODksOSArODksOSBAQAogKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICAgIHwgY3NoL3Rjc2ggICAgICAgIHwgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZS5jc2ggICAgICAgIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBXaW5kb3dzICAgICB8IGNtZC5leGUgICAgICAgICB8IEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUuYmF0ICAgICAgICB8Cit8IFdpbmRvd3MgICAgIHwgY21kLmV4ZSAgICAgICAgIHwgQzpcXD4gPHZlbnY+XFxTY3JpcHRzXFxhY3RpdmF0ZS5iYXQgICAgIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCAgICAgICAgICAgICB8IFBvd2VyU2hlbGwgICAgICB8IFBTIEM6XD4gPHZlbnY+L1NjcmlwdHMvQWN0aXZhdGUucHMxICAgICB8Cit8ICAgICAgICAgICAgIHwgUG93ZXJTaGVsbCAgICAgIHwgUFMgQzpcXD4gPHZlbnY+XFxTY3JpcHRzXFxBY3RpdmF0ZS5wczEgIHwKICstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiBZb3UgZG9uJ3Qgc3BlY2lmaWNhbGx5ICpuZWVkKiB0byBhY3RpdmF0ZSBhbiBlbnZpcm9ubWVudDsgYWN0aXZhdGlvbiBqdXN0CmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvd2luX2luc3RhbGxlci5wbmcgYi9Eb2MvdXNpbmcvd2luX2luc3RhbGxlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjODhhOAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy91c2luZy93aW5faW5zdGFsbGVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvd2luZG93cy5yc3QgYi9Eb2MvdXNpbmcvd2luZG93cy5yc3QKaW5kZXggYzA1ZjcyYS4uZDAxMGE2MSAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL3dpbmRvd3MucnN0CisrKyBiL0RvYy91c2luZy93aW5kb3dzLnJzdApAQCAtNyw0MCArNywyNTYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioKIAogLi4gc2VjdGlvbmF1dGhvcjo6IFJvYmVydCBMZWhtYW5uIDxsZWhtYW5ucm9AZ21haWwuY29tPgorLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZXZlIERvd2VyIDxzdGV2ZS5kb3dlckBtaWNyb3NvZnQuY29tPgogCiBUaGlzIGRvY3VtZW50IGFpbXMgdG8gZ2l2ZSBhbiBvdmVydmlldyBvZiBXaW5kb3dzLXNwZWNpZmljIGJlaGF2aW91ciB5b3Ugc2hvdWxkCiBrbm93IGFib3V0IHdoZW4gdXNpbmcgUHl0aG9uIG9uIE1pY3Jvc29mdCBXaW5kb3dzLgogCi0uLiBYWFggKG5jb2dobGFuKQotCi0gICBUaGlzIGxvb2tzIHJhdGhlciBzdGFsZSB0byBtZS4uLgotCi0KIEluc3RhbGxpbmcgUHl0aG9uCiA9PT09PT09PT09PT09PT09PQogCi1Vbmxpa2UgbW9zdCBVbml4IHN5c3RlbXMgYW5kIHNlcnZpY2VzLCBXaW5kb3dzIGRvZXMgbm90IHJlcXVpcmUgUHl0aG9uIG5hdGl2ZWx5Ci1hbmQgdGh1cyBkb2VzIG5vdCBwcmUtaW5zdGFsbCBhIHZlcnNpb24gb2YgUHl0aG9uLiAgSG93ZXZlciwgdGhlIENQeXRob24gdGVhbQorVW5saWtlIG1vc3QgVW5peCBzeXN0ZW1zIGFuZCBzZXJ2aWNlcywgV2luZG93cyBkb2VzIG5vdCBpbmNsdWRlIGEgc3lzdGVtCitzdXBwb3J0ZWQgaW5zdGFsbGF0aW9uIG9mIFB5dGhvbi4gVG8gbWFrZSBQeXRob24gYXZhaWxhYmxlLCB0aGUgQ1B5dGhvbiB0ZWFtCiBoYXMgY29tcGlsZWQgV2luZG93cyBpbnN0YWxsZXJzIChNU0kgcGFja2FnZXMpIHdpdGggZXZlcnkgYHJlbGVhc2UKLTxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLz5gXyBmb3IgbWFueSB5ZWFycy4KKzxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLz5gXyBmb3IgbWFueSB5ZWFycy4gVGhlc2UgaW5zdGFsbGVycworYXJlIHByaW1hcmlseSBpbnRlbmRlZCB0byBhZGQgYSBwZXItdXNlciBpbnN0YWxsYXRpb24gb2YgUHl0aG9uLCB3aXRoIHRoZQorY29yZSBpbnRlcnByZXRlciBhbmQgbGlicmFyeSBiZWluZyB1c2VkIGJ5IGEgc2luZ2xlIHVzZXIuIFRoZSBpbnN0YWxsZXIgaXMgYWxzbworYWJsZSB0byBpbnN0YWxsIGZvciBhbGwgdXNlcnMgb2YgYSBzaW5nbGUgbWFjaGluZSwgYW5kIGEgc2VwYXJhdGUgWklQIGZpbGUgaXMKK2F2YWlsYWJsZSBmb3IgYXBwbGljYXRpb24tbG9jYWwgZGlzdHJpYnV0aW9ucy4KKworU3VwcG9ydGVkIFZlcnNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgc3BlY2lmaWVkIGluIDpwZXA6YDExYCwgYSBQeXRob24gcmVsZWFzZSBvbmx5IHN1cHBvcnRzIGEgV2luZG93cyBwbGF0Zm9ybQord2hpbGUgTWljcm9zb2Z0IGNvbnNpZGVycyB0aGUgcGxhdGZvcm0gdW5kZXIgZXh0ZW5kZWQgc3VwcG9ydC4gVGhpcyBtZWFucyB0aGF0CitQeXRob24gMy41IHN1cHBvcnRzIFdpbmRvd3MgVmlzdGEgYW5kIG5ld2VyLiBJZiB5b3UgcmVxdWlyZSBXaW5kb3dzIFhQIHN1cHBvcnQKK3RoZW4gcGxlYXNlIGluc3RhbGwgUHl0aG9uIDMuNC4KKworSW5zdGFsbGF0aW9uIFN0ZXBzCistLS0tLS0tLS0tLS0tLS0tLS0KKworRm91ciBQeXRob24gMy41IGluc3RhbGxlcnMgYXJlIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgLSB0d28gZWFjaCBmb3IgdGhlIDMyLWJpdAorYW5kIDY0LWJpdCB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuIFRoZSAqd2ViIGluc3RhbGxlciogaXMgYSBzbWFsbCBpbml0aWFsCitkb3dubG9hZCwgYW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBkb3dubG9hZCB0aGUgcmVxdWlyZWQgY29tcG9uZW50cyBhcworbmVjZXNzYXJ5LiBUaGUgKm9mZmxpbmUgaW5zdGFsbGVyKiBpbmNsdWRlcyB0aGUgY29tcG9uZW50cyBuZWNlc3NhcnkgZm9yIGEKK2RlZmF1bHQgaW5zdGFsbGF0aW9uIGFuZCBvbmx5IHJlcXVpcmVzIGFuIGludGVybmV0IGNvbm5lY3Rpb24gZm9yIG9wdGlvbmFsCitmZWF0dXJlcy4gU2VlIDpyZWY6YGluc3RhbGwtbGF5b3V0LW9wdGlvbmAgZm9yIG90aGVyIHdheXMgdG8gYXZvaWQgZG93bmxvYWRpbmcKK2R1cmluZyBpbnN0YWxsYXRpb24uCisKK0FmdGVyIHN0YXJ0aW5nIHRoZSBpbnN0YWxsZXIsIG9uZSBvZiB0d28gb3B0aW9ucyBtYXkgYmUgc2VsZWN0ZWQ6CisKKy4uIGltYWdlOjogd2luX2luc3RhbGxlci5wbmcKKworSWYgeW91IHNlbGVjdCAiSW5zdGFsbCBOb3ciOgorCisqIFlvdSB3aWxsICpub3QqIG5lZWQgdG8gYmUgYW4gYWRtaW5pc3RyYXRvciAodW5sZXNzIGEgc3lzdGVtIHVwZGF0ZSBmb3IgdGhlCisgIEMgUnVudGltZSBMaWJyYXJ5IGlzIHJlcXVpcmVkIG9yIHlvdSBpbnN0YWxsIHRoZSA6cmVmOmBsYXVuY2hlcmAgZm9yIGFsbAorICB1c2VycykKKyogUHl0aG9uIHdpbGwgYmUgaW5zdGFsbGVkIGludG8geW91ciB1c2VyIGRpcmVjdG9yeQorKiBUaGUgOnJlZjpgbGF1bmNoZXJgIHdpbGwgYmUgaW5zdGFsbGVkIGFjY29yZGluZyB0byB0aGUgb3B0aW9uIGF0IHRoZSBib3R0b20KKyAgb2YgdGhlIGZpcnN0IHBhZ2UKKyogVGhlIHN0YW5kYXJkIGxpYnJhcnksIHRlc3Qgc3VpdGUsIGxhdW5jaGVyIGFuZCBwaXAgd2lsbCBiZSBpbnN0YWxsZWQKKyogSWYgc2VsZWN0ZWQsIHRoZSBpbnN0YWxsIGRpcmVjdG9yeSB3aWxsIGJlIGFkZGVkIHRvIHlvdXIgOmVudnZhcjpgUEFUSGAKKyogU2hvcnRjdXRzIHdpbGwgb25seSBiZSB2aXNpYmxlIGZvciB0aGUgY3VycmVudCB1c2VyCisKK1NlbGVjdGluZyAiQ3VzdG9taXplIGluc3RhbGxhdGlvbiIgd2lsbCBhbGxvdyB5b3UgdG8gc2VsZWN0IHRoZSBmZWF0dXJlcyB0bworaW5zdGFsbCwgdGhlIGluc3RhbGxhdGlvbiBsb2NhdGlvbiBhbmQgb3RoZXIgb3B0aW9ucyBvciBwb3N0LWluc3RhbGwgYWN0aW9ucy4KK1RvIGluc3RhbGwgZGVidWdnaW5nIHN5bWJvbHMgb3IgYmluYXJpZXMsIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uLgorCitUbyBwZXJmb3JtIGFuIGFsbC11c2VycyBpbnN0YWxsYXRpb24sIHlvdSBzaG91bGQgc2VsZWN0ICJDdXN0b21pemUKK2luc3RhbGxhdGlvbiIuIEluIHRoaXMgY2FzZToKKworKiBZb3UgbWF5IGJlIHJlcXVpcmVkIHRvIHByb3ZpZGUgYWRtaW5pc3RyYXRpdmUgY3JlZGVudGlhbHMgb3IgYXBwcm92YWwKKyogUHl0aG9uIHdpbGwgYmUgaW5zdGFsbGVkIGludG8gdGhlIFByb2dyYW0gRmlsZXMgZGlyZWN0b3J5CisqIFRoZSA6cmVmOmBsYXVuY2hlcmAgd2lsbCBiZSBpbnN0YWxsZWQgaW50byB0aGUgV2luZG93cyBkaXJlY3RvcnkKKyogT3B0aW9uYWwgZmVhdHVyZXMgbWF5IGJlIHNlbGVjdGVkIGR1cmluZyBpbnN0YWxsYXRpb24KKyogVGhlIHN0YW5kYXJkIGxpYnJhcnkgY2FuIGJlIHByZS1jb21waWxlZCB0byBieXRlY29kZQorKiBJZiBzZWxlY3RlZCwgdGhlIGluc3RhbGwgZGlyZWN0b3J5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHN5c3RlbSA6ZW52dmFyOmBQQVRIYAorKiBTaG9ydGN1dHMgYXJlIGF2YWlsYWJsZSBmb3IgYWxsIHVzZXJzCisKKy4uIF9pbnN0YWxsLXF1aWV0LW9wdGlvbjoKKworSW5zdGFsbGluZyBXaXRob3V0IFVJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgaW5zdGFsbGVyIFVJIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmcm9tIHRoZQorY29tbWFuZCBsaW5lLCBhbGxvd2luZyBzY3JpcHRlZCBpbnN0YWxsZXJzIHRvIHJlcGxpY2F0ZSBhbiBpbnN0YWxsYXRpb24gb24gbWFueQorbWFjaGluZXMgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uLiAgVGhlc2Ugb3B0aW9ucyBtYXkgYWxzbyBiZSBzZXQgd2l0aG91dAorc3VwcHJlc3NpbmcgdGhlIFVJIGluIG9yZGVyIHRvIGNoYW5nZSBzb21lIG9mIHRoZSBkZWZhdWx0cy4KKworVG8gY29tcGxldGVseSBoaWRlIHRoZSBpbnN0YWxsZXIgVUkgYW5kIGluc3RhbGwgUHl0aG9uIHNpbGVudGx5LCBwYXNzIHRoZQorYGAvcXVpZXRgYCBvcHRpb24uIFRvIHNraXAgcGFzdCB0aGUgdXNlciBpbnRlcmFjdGlvbiBidXQgc3RpbGwgZGlzcGxheQorcHJvZ3Jlc3MgYW5kIGVycm9ycywgcGFzcyB0aGUgYGAvcGFzc2l2ZWBgIG9wdGlvbi4gVGhlIGBgL3VuaW5zdGFsbGBgCitvcHRpb24gbWF5IGJlIHBhc3NlZCB0byBpbW1lZGlhdGVseSBiZWdpbiByZW1vdmluZyBQeXRob24gLSBubyBwcm9tcHQgd2lsbCBiZQorZGlzcGxheWVkLgorCitBbGwgb3RoZXIgb3B0aW9ucyBhcmUgcGFzc2VkIGFzIGBgbmFtZT12YWx1ZWBgLCB3aGVyZSB0aGUgdmFsdWUgaXMgdXN1YWxseQorYGAwYGAgdG8gZGlzYWJsZSBhIGZlYXR1cmUsIGBgMWBgIHRvIGVuYWJsZSBhIGZlYXR1cmUsIG9yIGEgcGF0aC4gVGhlIGZ1bGwgbGlzdAorb2YgYXZhaWxhYmxlIG9wdGlvbnMgaXMgc2hvd24gYmVsb3cuCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE5hbWUgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWZhdWx0ICAgICAgICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgSW5zdGFsbEFsbFVzZXJzICAgICAgICAgICB8IFBlcmZvcm0gYSBzeXN0ZW0td2lkZSBpbnN0YWxsYXRpb24uICB8IDAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXJnZXREaXIgICAgICAgICAgICAgICAgIHwgVGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgICAgICAgICAgIHwgU2VsZWN0ZWQgYmFzZWQgb24gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEluc3RhbGxBbGxVc2VycyAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBEZWZhdWx0QWxsVXNlcnNUYXJnZXREaXIgIHwgVGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSAgIHwgOmZpbGU6YCVQcm9ncmFtRmlsZXMlXFxcIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvciBhbGwtdXNlciBpbnN0YWxscyAgICAgICAgICAgICAgICB8IFB5dGhvbiBYLllgIG9yIDpmaWxlOmBcICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAlUHJvZ3JhbUZpbGVzKHg4NiklXFxcICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUHl0aG9uIFguWWAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IERlZmF1bHRKdXN0Rm9yTWVUYXJnZXREaXIgfCBUaGUgZGVmYXVsdCBpbnN0YWxsIGRpcmVjdG9yeSBmb3IgICAgfCA6ZmlsZTpgJUxvY2FsQXBwRGF0YSVcXFwgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwganVzdC1mb3ItbWUgaW5zdGFsbHMgICAgICAgICAgICAgICAgIHwgUHJvZ3JhbXNcXFB5dGhvblhZYCBvciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDpmaWxlOmAlTG9jYWxBcHBEYXRhJVxcXCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQcm9ncmFtc1xcUHl0aG9uWFktMzJgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRGVmYXVsdEN1c3RvbVRhcmdldERpciAgICB8IFRoZSBkZWZhdWx0IGN1c3RvbSBpbnN0YWxsIGRpcmVjdG9yeSB8IChlbXB0eSkgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaXNwbGF5ZWQgaW4gdGhlIFVJICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgQXNzb2NpYXRlRmlsZXMgICAgICAgICAgICB8IENyZWF0ZSBmaWxlIGFzc29jaWF0aW9ucyBpZiB0aGUgICAgICB8IDEgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsYXVuY2hlciBpcyBhbHNvIGluc3RhbGxlZC4gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgQ29tcGlsZUFsbCAgICAgICAgICAgICAgICB8IENvbXBpbGUgYWxsIGBgLnB5YGAgZmlsZXMgdG8gICAgICAgICB8IDAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYC5weWNgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUHJlcGVuZFBhdGggICAgICAgICAgICAgICB8IEFkZCBpbnN0YWxsIGFuZCBTY3JpcHRzIGRpcmVjdG9yaWVzICB8IDAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aG8gOmVudnZhcjpgUEFUSGAgYW5kIGBgLlBZYGAgdG8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmVudnZhcjpgUEFUSEVYVGAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFNob3J0Y3V0cyAgICAgICAgICAgICAgICAgfCBDcmVhdGUgc2hvcnRjdXRzIGZvciB0aGUgaW50ZXJwcmV0ZXIsfCAxICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZG9jdW1lbnRhdGlvbiBhbmQgSURMRSBpZiBpbnN0YWxsZWQuIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEluY2x1ZGVfZG9jICAgICAgICAgICAgICAgfCBJbnN0YWxsIFB5dGhvbiBtYW51YWwgICAgICAgICAgICAgICAgfCAxICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5jbHVkZV9kZWJ1ZyAgICAgICAgICAgICB8IEluc3RhbGwgZGVidWcgYmluYXJpZXMgICAgICAgICAgICAgICB8IDAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbmNsdWRlX2RldiAgICAgICAgICAgICAgIHwgSW5zdGFsbCBkZXZlbG9wZXIgaGVhZGVycyBhbmQgICAgICAgIHwgMSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxpYnJhcmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbmNsdWRlX2V4ZSAgICAgICAgICAgICAgIHwgSW5zdGFsbCA6ZmlsZTpgcHl0aG9uLmV4ZWAgYW5kICAgICAgIHwgMSAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlbGF0ZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbmNsdWRlX2xhdW5jaGVyICAgICAgICAgIHwgSW5zdGFsbCA6cmVmOmBsYXVuY2hlcmAuICAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEluc3RhbGxMYXVuY2hlckFsbFVzZXJzICAgfCBJbnN0YWxscyA6cmVmOmBsYXVuY2hlcmAgZm9yIGFsbCAgICAgfCAxICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXNlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEluY2x1ZGVfbGliICAgICAgICAgICAgICAgfCBJbnN0YWxsIHN0YW5kYXJkIGxpYnJhcnkgYW5kICAgICAgICAgfCAxICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXh0ZW5zaW9uIG1vZHVsZXMgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEluY2x1ZGVfcGlwICAgICAgICAgICAgICAgfCBJbnN0YWxsIGJ1bmRsZWQgcGlwIGFuZCBzZXR1cHRvb2xzICAgfCAxICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5jbHVkZV9zeW1ib2xzICAgICAgICAgICB8IEluc3RhbGwgZGVidWdnaW5nIHN5bWJvbHMgKGAqYC5wZGIpICB8IDAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbmNsdWRlX3RjbHRrICAgICAgICAgICAgIHwgSW5zdGFsbCBUY2wvVGsgc3VwcG9ydCBhbmQgSURMRSAgICAgIHwgMSAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEluY2x1ZGVfdGVzdCAgICAgICAgICAgICAgfCBJbnN0YWxsIHN0YW5kYXJkIGxpYnJhcnkgdGVzdCBzdWl0ZSAgfCAxICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5jbHVkZV90b29scyAgICAgICAgICAgICB8IEluc3RhbGwgdXRpbGl0eSBzY3JpcHRzICAgICAgICAgICAgICB8IDEgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBMYXVuY2hlck9ubHkgICAgICAgICAgICAgIHwgT25seSBpbnN0YWxscyB0aGUgbGF1bmNoZXIuIFRoaXMgICAgIHwgMCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdpbGwgb3ZlcnJpZGUgbW9zdCBvdGhlciBvcHRpb25zLiAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBTaW1wbGVJbnN0YWxsICAgICAgICAgICAgIHwgRGlzYWJsZSBtb3N0IGluc3RhbGwgVUkgICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFNpbXBsZUluc3RhbGxEZXNjcmlwdGlvbiAgfCBBIGN1c3RvbSBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiB0aGUgfCAoZW1wdHkpICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2ltcGxpZmllZCBpbnN0YWxsIFVJIGlzIHVzZWQuICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0ZvciBleGFtcGxlLCB0byBzaWxlbnRseSBpbnN0YWxsIGEgZGVmYXVsdCwgc3lzdGVtLXdpZGUgUHl0aG9uIGluc3RhbGxhdGlvbiwKK3lvdSBjb3VsZCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIChmcm9tIGFuIGVsZXZhdGVkIGNvbW1hbmQgcHJvbXB0KTo6CisKKyAgICBweXRob24tMy41LjAuZXhlIC9xdWlldCBJbnN0YWxsQWxsVXNlcnM9MSBQcmVwZW5kUGF0aD0xIEluY2x1ZGVfdGVzdD0wCisKK1RvIGFsbG93IHVzZXJzIHRvIGVhc2lseSBpbnN0YWxsIGEgcGVyc29uYWwgY29weSBvZiBQeXRob24gd2l0aG91dCB0aGUgdGVzdAorc3VpdGUsIHlvdSBjb3VsZCBwcm92aWRlIGEgc2hvcnRjdXQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmQuIFRoaXMgd2lsbAorZGlzcGxheSBhIHNpbXBsaWZpZWQgaW5pdGlhbCBwYWdlIGFuZCBkaXNhbGxvdyBjdXN0b21pemF0aW9uOjoKKworICAgIHB5dGhvbi0zLjUuMC5leGUgSW5zdGFsbEFsbFVzZXJzPTAgSW5jbHVkZV9sYXVuY2hlcj0wIEluY2x1ZGVfdGVzdD0wCisgICAgICAgIFNpbXBsZUluc3RhbGw9MSBTaW1wbGVJbnN0YWxsRGVzY3JpcHRpb249Ikp1c3QgZm9yIG1lLCBubyB0ZXN0IHN1aXRlLiIKKworKE5vdGUgdGhhdCBvbWl0dGluZyB0aGUgbGF1bmNoZXIgYWxzbyBvbWl0cyBmaWxlIGFzc29jaWF0aW9ucywgYW5kIGlzIG9ubHkKK3JlY29tbWVuZGVkIGZvciBwZXItdXNlciBpbnN0YWxscyB3aGVuIHRoZXJlIGlzIGFsc28gYSBzeXN0ZW0td2lkZSBpbnN0YWxsYXRpb24KK3RoYXQgaW5jbHVkZWQgdGhlIGxhdW5jaGVyLikKKworVGhlIG9wdGlvbnMgbGlzdGVkIGFib3ZlIGNhbiBhbHNvIGJlIHByb3ZpZGVkIGluIGEgZmlsZSBuYW1lZCBgYHVuYXR0ZW5kLnhtbGBgCithbG9uZ3NpZGUgdGhlIGV4ZWN1dGFibGUuIFRoaXMgZmlsZSBzcGVjaWZpZXMgYSBsaXN0IG9mIG9wdGlvbnMgYW5kIHZhbHVlcy4KK1doZW4gYSB2YWx1ZSBpcyBwcm92aWRlZCBhcyBhbiBhdHRyaWJ1dGUsIGl0IHdpbGwgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIGlmCitwb3NzaWJsZS4gVmFsdWVzIHByb3ZpZGVkIGFzIGVsZW1lbnQgdGV4dCBhcmUgYWx3YXlzIGxlZnQgYXMgc3RyaW5ncy4gVGhpcworZXhhbXBsZSBmaWxlIHNldHMgdGhlIHNhbWUgb3B0aW9ucyBhbmQgdGhlIHByZXZpb3VzIGV4YW1wbGU6OgorCisgICAgPE9wdGlvbnM+CisgICAgICAgIDxPcHRpb24gTmFtZT0iSW5zdGFsbEFsbFVzZXJzIiBWYWx1ZT0ibm8iIC8+CisgICAgICAgIDxPcHRpb24gTmFtZT0iSW5jbHVkZV9sYXVuY2hlciIgVmFsdWU9IjAiIC8+CisgICAgICAgIDxPcHRpb24gTmFtZT0iSW5jbHVkZV90ZXN0IiBWYWx1ZT0ibm8iIC8+CisgICAgICAgIDxPcHRpb24gTmFtZT0iU2ltcGxlSW5zdGFsbCIgVmFsdWU9InllcyIgLz4KKyAgICAgICAgPE9wdGlvbiBOYW1lPSJTaW1wbGVJbnN0YWxsRGVzY3JpcHRpb24iPkp1c3QgZm9yIG1lLCBubyB0ZXN0IHN1aXRlPC9PcHRpb24+CisgICAgPC9PcHRpb25zPgorCisuLiBfaW5zdGFsbC1sYXlvdXQtb3B0aW9uOgorCitJbnN0YWxsaW5nIFdpdGhvdXQgRG93bmxvYWRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyBzb21lIGZlYXR1cmVzIG9mIFB5dGhvbiBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBpbml0aWFsIGluc3RhbGxlciBkb3dubG9hZCwKK3NlbGVjdGluZyB0aG9zZSBmZWF0dXJlcyBtYXkgcmVxdWlyZSBhbiBpbnRlcm5ldCBjb25uZWN0aW9uLiAgVG8gYXZvaWQgdGhpcworbmVlZCwgYWxsIHBvc3NpYmxlIGNvbXBvbmVudHMgbWF5IGJlIGRvd25sb2FkZWQgb24tZGVtYW5kIHRvIGNyZWF0ZSBhIGNvbXBsZXRlCisqbGF5b3V0KiB0aGF0IHdpbGwgbm8gbG9uZ2VyIHJlcXVpcmUgYW4gaW50ZXJuZXQgY29ubmVjdGlvbiByZWdhcmRsZXNzIG9mIHRoZQorc2VsZWN0ZWQgZmVhdHVyZXMuIE5vdGUgdGhhdCB0aGlzIGRvd25sb2FkIG1heSBiZSBiaWdnZXIgdGhhbiByZXF1aXJlZCwgYnV0Cit3aGVyZSBhIGxhcmdlIG51bWJlciBvZiBpbnN0YWxsYXRpb25zIGFyZSBnb2luZyB0byBiZSBwZXJmb3JtZWQgaXQgaXMgdmVyeQordXNlZnVsIHRvIGhhdmUgYSBsb2NhbGx5IGNhY2hlZCBjb3B5LgorCitFeGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBmcm9tIENvbW1hbmQgUHJvbXB0IHRvIGRvd25sb2FkIGFsbCBwb3NzaWJsZQorcmVxdWlyZWQgZmlsZXMuICBSZW1lbWJlciB0byBzdWJzdGl0dXRlIGBgcHl0aG9uLTMuNS4wLmV4ZWBgIGZvciB0aGUgYWN0dWFsCituYW1lIG9mIHlvdXIgaW5zdGFsbGVyLCBhbmQgdG8gY3JlYXRlIGxheW91dHMgaW4gdGhlaXIgb3duIGRpcmVjdG9yaWVzIHRvCithdm9pZCBjb2xsaXNpb25zIGJldHdlZW4gZmlsZXMgd2l0aCB0aGUgc2FtZSBuYW1lLgorCis6OgorCisgICAgcHl0aG9uLTMuNS4wLmV4ZSAvbGF5b3V0IFtvcHRpb25hbCB0YXJnZXQgZGlyZWN0b3J5XQorCitZb3UgbWF5IGFsc28gc3BlY2lmeSB0aGUgYGAvcXVpZXRgYCBvcHRpb24gdG8gaGlkZSB0aGUgcHJvZ3Jlc3MgZGlzcGxheS4KKworTW9kaWZ5aW5nIGFuIGluc3RhbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uY2UgUHl0aG9uIGhhcyBiZWVuIGluc3RhbGxlZCwgeW91IGNhbiBhZGQgb3IgcmVtb3ZlIGZlYXR1cmVzIHRocm91Z2ggdGhlCitQcm9ncmFtcyBhbmQgRmVhdHVyZXMgdG9vbCB0aGF0IGlzIHBhcnQgb2YgV2luZG93cy4gU2VsZWN0IHRoZSBQeXRob24gZW50cnkgYW5kCitjaG9vc2UgIlVuaW5zdGFsbC9DaGFuZ2UiIHRvIG9wZW4gdGhlIGluc3RhbGxlciBpbiBtYWludGVuYW5jZSBtb2RlLgorCisiTW9kaWZ5IiBhbGxvd3MgeW91IHRvIGFkZCBvciByZW1vdmUgZmVhdHVyZXMgYnkgbW9kaWZ5aW5nIHRoZSBjaGVja2JveGVzIC0KK3VuY2hhbmdlZCBjaGVja2JveGVzIHdpbGwgbm90IGluc3RhbGwgb3IgcmVtb3ZlIGFueXRoaW5nLiBTb21lIG9wdGlvbnMgY2Fubm90IGJlCitjaGFuZ2VkIGluIHRoaXMgbW9kZSwgc3VjaCBhcyB0aGUgaW5zdGFsbCBkaXJlY3Rvcnk7IHRvIG1vZGlmeSB0aGVzZSwgeW91IHdpbGwKK25lZWQgdG8gcmVtb3ZlIGFuZCB0aGVuIHJlaW5zdGFsbCBQeXRob24gY29tcGxldGVseS4KKworIlJlcGFpciIgd2lsbCB2ZXJpZnkgYWxsIHRoZSBmaWxlcyB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgdXNpbmcgdGhlIGN1cnJlbnQKK3NldHRpbmdzIGFuZCByZXBsYWNlIGFueSB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIG9yIG1vZGlmaWVkLgorCisiVW5pbnN0YWxsIiB3aWxsIHJlbW92ZSBQeXRob24gZW50aXJlbHksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUKKzpyZWY6YGxhdW5jaGVyYCwgd2hpY2ggaGFzIGl0cyBvd24gZW50cnkgaW4gUHJvZ3JhbXMgYW5kIEZlYXR1cmVzLgorCitPdGhlciBQbGF0Zm9ybXMKKy0tLS0tLS0tLS0tLS0tLQogCiBXaXRoIG9uZ29pbmcgZGV2ZWxvcG1lbnQgb2YgUHl0aG9uLCBzb21lIHBsYXRmb3JtcyB0aGF0IHVzZWQgdG8gYmUgc3VwcG9ydGVkCiBlYXJsaWVyIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIChkdWUgdG8gdGhlIGxhY2sgb2YgdXNlcnMgb3IgZGV2ZWxvcGVycykuCiBDaGVjayA6cGVwOmAxMWAgZm9yIGRldGFpbHMgb24gYWxsIHVuc3VwcG9ydGVkIHBsYXRmb3Jtcy4KIAogKiBgV2luZG93cyBDRSA8aHR0cDovL3B5dGhvbmNlLnNvdXJjZWZvcmdlLm5ldC8+YF8gaXMgc3RpbGwgc3VwcG9ydGVkLgotKiBUaGUgYEN5Z3dpbiA8aHR0cDovL2N5Z3dpbi5jb20vPmBfIGluc3RhbGxlciBvZmZlcnMgdG8gaW5zdGFsbCB0aGUgUHl0aG9uCisqIFRoZSBgQ3lnd2luIDxodHRwczovL2N5Z3dpbi5jb20vPmBfIGluc3RhbGxlciBvZmZlcnMgdG8gaW5zdGFsbCB0aGUgUHl0aG9uCiAgIGludGVycHJldGVyIGFzIHdlbGwgKGNmLiBgQ3lnd2luIHBhY2thZ2Ugc291cmNlCiAgIDxmdHA6Ly9mdHAudW5pLWVybGFuZ2VuLmRlL3B1Yi9wYy9nbnV3aW4zMi9jeWd3aW4vbWlycm9ycy9jeWdudXMvCiAgIHJlbGVhc2UvcHl0aG9uPmBfLCBgTWFpbnRhaW5lciByZWxlYXNlcwogICA8aHR0cDovL3d3dy50aXNobGVyLm5ldC9qYXNvbi9zb2Z0d2FyZS9weXRob24vPmBfKQogCi1TZWUgYFB5dGhvbiBmb3IgV2luZG93cyA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC93aW5kb3dzLz5gXworU2VlIGBQeXRob24gZm9yIFdpbmRvd3MgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzL3dpbmRvd3MvPmBfCiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgcGxhdGZvcm1zIHdpdGggcHJlLWNvbXBpbGVkIGluc3RhbGxlcnMuCiAKIC4uIHNlZWFsc286OgogCi0gICBgUHl0aG9uIG9uIFhQIDxodHRwOi8vd3d3LnJpY2hhcmRkb29saW5nLmNvbS9pbmRleC5waHAvMjAwNi8wMy8xNC9weXRob24tb24teHAtNy1taW51dGVzLXRvLWhlbGxvLXdvcmxkLz5gXworICAgYFB5dGhvbiBvbiBYUCA8aHR0cDovL2Rvb2xpbmcuY29tL2luZGV4LnBocC8yMDA2LzAzLzE0L3B5dGhvbi1vbi14cC03LW1pbnV0ZXMtdG8taGVsbG8td29ybGQvPmBfCiAgICAgICAiNyBNaW51dGVzIHRvICJIZWxsbyBXb3JsZCEiIgogICAgICAgYnkgUmljaGFyZCBEb29saW5nLCAyMDA2CiAKQEAgLTUwLDkgKzI2Niw5IEBACiAgICAgICBieSBNYXJrIFBpbGdyaW0sIDIwMDQsCiAgICAgICBJU0JOIDEtNTkwNTktMzU2LTEKIAotICAgYEZvciBXaW5kb3dzIHVzZXJzIDxodHRwOi8vd3d3LnN3YXJvb3BjaC5jb20vbm90ZXMvcHl0aG9uLyNpbnN0YWxsX3dpbmRvd3M+YF8KKyAgIGBGb3IgV2luZG93cyB1c2VycyA8aHR0cDovL3B5dGhvbi5zd2Fyb29wY2guY29tL2luc3RhbGxhdGlvbi5odG1sI2luc3RhbGxhdGlvbi1vbi13aW5kb3dzPmBfCiAgICAgICBpbiAiSW5zdGFsbGluZyBQeXRob24iCi0gICAgICBpbiAiYEEgQnl0ZSBvZiBQeXRob24gPGh0dHA6Ly93d3cuc3dhcm9vcGNoLmNvbS9ub3Rlcy9weXRob24vPmBfIgorICAgICAgaW4gImBBIEJ5dGUgb2YgUHl0aG9uIDxodHRwOi8vcHl0aG9uLnN3YXJvb3BjaC5jb20vPmBfIgogICAgICAgYnkgU3dhcm9vcCBDIEgsIDIwMDMKIAogCkBAIC02MywyMiArMjc5LDM0IEBACiBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuICBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBwb3B1bGFyIHZlcnNpb25zIGFuZCB0aGVpcgoga2V5IGZlYXR1cmVzOgogCi1gQWN0aXZlUHl0aG9uIDxodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVweXRob24vPmBfCitgQWN0aXZlUHl0aG9uIDxodHRwczovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcHl0aG9uLz5gXwogICAgIEluc3RhbGxlciB3aXRoIG11bHRpLXBsYXRmb3JtIGNvbXBhdGliaWxpdHksIGRvY3VtZW50YXRpb24sIFB5V2luMzIKIAotYEVudGhvdWdodCBQeXRob24gRGlzdHJpYnV0aW9uIDxodHRwczovL3d3dy5lbnRob3VnaHQuY29tL3Byb2R1Y3RzL2VwZC8+YF8KLSAgICBQb3B1bGFyIG1vZHVsZXMgKHN1Y2ggYXMgUHlXaW4zMikgd2l0aCB0aGVpciByZXNwZWN0aXZlIGRvY3VtZW50YXRpb24sIHRvb2wKLSAgICBzdWl0ZSBmb3IgYnVpbGRpbmcgZXh0ZW5zaWJsZSBQeXRob24gYXBwbGljYXRpb25zCitgQW5hY29uZGEgPGh0dHBzOi8vd3d3LmNvbnRpbnV1bS5pby9kb3dubG9hZHMvPmBfCisgICAgUG9wdWxhciBzY2llbnRpZmljIG1vZHVsZXMgKHN1Y2ggYXMgbnVtcHksIHNjaXB5IGFuZCBwYW5kYXMpIGFuZCB0aGUKKyAgICBgYGNvbmRhYGAgcGFja2FnZSBtYW5hZ2VyLgogCi1Ob3RpY2UgdGhhdCB0aGVzZSBwYWNrYWdlcyBhcmUgbGlrZWx5IHRvIGluc3RhbGwgKm9sZGVyKiB2ZXJzaW9ucyBvZiBQeXRob24uCitgQ2Fub3B5IDxodHRwczovL3d3dy5lbnRob3VnaHQuY29tL3Byb2R1Y3RzL2Nhbm9weS8+YF8KKyAgICBBICJjb21wcmVoZW5zaXZlIFB5dGhvbiBhbmFseXNpcyBlbnZpcm9ubWVudCIgd2l0aCBlZGl0b3JzIGFuZCBvdGhlcgorICAgIGRldmVsb3BtZW50IHRvb2xzLgorCitgV2luUHl0aG9uIDxodHRwczovL3dpbnB5dGhvbi5naXRodWIuaW8vPmBfCisgICAgV2luZG93cy1zcGVjaWZpYyBkaXN0cmlidXRpb24gd2l0aCBwcmVidWlsdCBzY2llbnRpZmljIHBhY2thZ2VzIGFuZAorICAgIHRvb2xzIGZvciBidWlsZGluZyBwYWNrYWdlcy4KKworTm90ZSB0aGF0IHRoZXNlIHBhY2thZ2VzIG1heSBub3QgaW5jbHVkZSB0aGUgbGF0ZXN0IHZlcnNpb25zIG9mIFB5dGhvbiBvcgorb3RoZXIgbGlicmFyaWVzLCBhbmQgYXJlIG5vdCBtYWludGFpbmVkIG9yIHN1cHBvcnRlZCBieSB0aGUgY29yZSBQeXRob24gdGVhbS4KIAogCiAKIENvbmZpZ3VyaW5nIFB5dGhvbgogPT09PT09PT09PT09PT09PT09CiAKLUluIG9yZGVyIHRvIHJ1biBQeXRob24gZmxhd2xlc3NseSwgeW91IG1pZ2h0IGhhdmUgdG8gY2hhbmdlIGNlcnRhaW4gZW52aXJvbm1lbnQKLXNldHRpbmdzIGluIFdpbmRvd3MuCitUbyBydW4gUHl0aG9uIGNvbnZlbmllbnRseSBmcm9tIGEgY29tbWFuZCBwcm9tcHQsIHlvdSBtaWdodCBjb25zaWRlciBjaGFuZ2luZworc29tZSBkZWZhdWx0IGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBXaW5kb3dzLiAgV2hpbGUgdGhlIGluc3RhbGxlciBwcm92aWRlcyBhbgorb3B0aW9uIHRvIGNvbmZpZ3VyZSB0aGUgUEFUSCBhbmQgUEFUSEVYVCB2YXJpYWJsZXMgZm9yIHlvdSwgdGhpcyBpcyBvbmx5CityZWxpYWJsZSBmb3IgYSBzaW5nbGUsIHN5c3RlbS13aWRlIGluc3RhbGxhdGlvbi4gIElmIHlvdSByZWd1bGFybHkgdXNlIG11bHRpcGxlCit2ZXJzaW9ucyBvZiBQeXRob24sIGNvbnNpZGVyIHVzaW5nIHRoZSA6cmVmOmBsYXVuY2hlcmAuCiAKIAogLi4gX3NldHRpbmctZW52dmFyczoKQEAgLTg2LDE2MyArMzE0LDg2IEBACiBFeGN1cnN1czogU2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaW5kb3dzIGhhcyBhIGJ1aWx0LWluIGRpYWxvZyBmb3IgY2hhbmdpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChmb2xsb3dpbmcKLWd1aWRlIGFwcGxpZXMgdG8gWFAgY2xhc3NpY2FsIHZpZXcpOiBSaWdodC1jbGljayB0aGUgaWNvbiBmb3IgeW91ciBtYWNoaW5lCi0odXN1YWxseSBsb2NhdGVkIG9uIHlvdXIgRGVza3RvcCBhbmQgY2FsbGVkICJNeSBDb21wdXRlciIpIGFuZCBjaG9vc2UKLTptZW51c2VsZWN0aW9uOmBQcm9wZXJ0aWVzYCB0aGVyZS4gIFRoZW4sIG9wZW4gdGhlIDpndWlsYWJlbDpgQWR2YW5jZWRgIHRhYgotYW5kIGNsaWNrIHRoZSA6Z3VpbGFiZWw6YEVudmlyb25tZW50IFZhcmlhYmxlc2AgYnV0dG9uLgorV2luZG93cyBhbGxvd3MgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGJlIGNvbmZpZ3VyZWQgcGVybWFuZW50bHkgYXQgYm90aCB0aGUKK1VzZXIgbGV2ZWwgYW5kIHRoZSBTeXN0ZW0gbGV2ZWwsIG9yIHRlbXBvcmFyaWx5IGluIGEgY29tbWFuZCBwcm9tcHQuCiAKLUluIHNob3J0LCB5b3VyIHBhdGggaXM6CitUbyB0ZW1wb3JhcmlseSBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBvcGVuIENvbW1hbmQgUHJvbXB0IGFuZCB1c2UgdGhlCis6Y29tbWFuZDpgc2V0YCBjb21tYW5kOjoKIAotICAgIDptZW51c2VsZWN0aW9uOmBNeSBDb21wdXRlcgotICAgIC0tPiBQcm9wZXJ0aWVzCi0gICAgLS0+IEFkdmFuY2VkCi0gICAgLS0+IEVudmlyb25tZW50IFZhcmlhYmxlc2AKKyAgICBDOlw+c2V0IFBBVEg9QzpcUHJvZ3JhbSBGaWxlc1xQeXRob24gMy41OyVQQVRIJQorICAgIEM6XD5zZXQgUFlUSE9OUEFUSD0lUFlUSE9OUEFUSCU7QzpcTXlfcHl0aG9uX2xpYgorICAgIEM6XD5weXRob24KIAorVGhlc2UgY2hhbmdlcyB3aWxsIGFwcGx5IHRvIGFueSBmdXJ0aGVyIGNvbW1hbmRzIGV4ZWN1dGVkIGluIHRoYXQgY29uc29sZSwgYW5kCit3aWxsIGJlIGluaGVyaXRlZCBieSBhbnkgYXBwbGljYXRpb25zIHN0YXJ0ZWQgZnJvbSB0aGUgY29uc29sZS4KKworSW5jbHVkaW5nIHRoZSB2YXJpYWJsZSBuYW1lIHdpdGhpbiBwZXJjZW50IHNpZ25zIHdpbGwgZXhwYW5kIHRvIHRoZSBleGlzdGluZwordmFsdWUsIGFsbG93aW5nIHlvdSB0byBhZGQgeW91ciBuZXcgdmFsdWUgYXQgZWl0aGVyIHRoZSBzdGFydCBvciB0aGUgZW5kLgorTW9kaWZ5aW5nIDplbnZ2YXI6YFBBVEhgIGJ5IGFkZGluZyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcKKzpwcm9ncmFtOmBweXRob24uZXhlYCB0byB0aGUgc3RhcnQgaXMgYSBjb21tb24gd2F5IHRvIGVuc3VyZSB0aGUgY29ycmVjdCB2ZXJzaW9uCitvZiBQeXRob24gaXMgbGF1bmNoZWQuCisKK1RvIHBlcm1hbmVudGx5IG1vZGlmeSB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGNsaWNrIFN0YXJ0IGFuZCBzZWFyY2gKK2ZvciAnZWRpdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMnLCBvciBvcGVuIFN5c3RlbSBwcm9wZXJ0aWVzLCA6Z3VpbGFiZWw6YEFkdmFuY2VkCitzeXN0ZW0gc2V0dGluZ3NgIGFuZCBjbGljayB0aGUgOmd1aWxhYmVsOmBFbnZpcm9ubWVudCBWYXJpYWJsZXNgIGJ1dHRvbi4KIEluIHRoaXMgZGlhbG9nLCB5b3UgY2FuIGFkZCBvciBtb2RpZnkgVXNlciBhbmQgU3lzdGVtIHZhcmlhYmxlcy4gVG8gY2hhbmdlCiBTeXN0ZW0gdmFyaWFibGVzLCB5b3UgbmVlZCBub24tcmVzdHJpY3RlZCBhY2Nlc3MgdG8geW91ciBtYWNoaW5lCiAoaS5lLiBBZG1pbmlzdHJhdG9yIHJpZ2h0cykuCiAKLUFub3RoZXIgd2F5IG9mIGFkZGluZyB2YXJpYWJsZXMgdG8geW91ciBlbnZpcm9ubWVudCBpcyB1c2luZyB0aGUgOmNvbW1hbmQ6YHNldGAKLWNvbW1hbmQ6OgorLi4gbm90ZTo6CiAKLSAgICBzZXQgUFlUSE9OUEFUSD0lUFlUSE9OUEFUSCU7QzpcTXlfcHl0aG9uX2xpYgorICAgIFdpbmRvd3Mgd2lsbCBjb25jYXRlbmF0ZSBVc2VyIHZhcmlhYmxlcyAqYWZ0ZXIqIFN5c3RlbSB2YXJpYWJsZXMsIHdoaWNoIG1heQorICAgIGNhdXNlIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGVuIG1vZGlmeWluZyA6ZW52dmFyOmBQQVRIYC4KIAotVG8gbWFrZSB0aGlzIHNldHRpbmcgcGVybWFuZW50LCB5b3UgY291bGQgYWRkIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1hbmQgbGluZSB0bwoteW91ciA6ZmlsZTpgYXV0b2V4ZWMuYmF0YC4gOnByb2dyYW06YG1zY29uZmlnYCBpcyBhIGdyYXBoaWNhbCBpbnRlcmZhY2UgdG8gdGhpcwotZmlsZS4KLQotVmlld2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGFsc28gYmUgZG9uZSBtb3JlIHN0cmFpZ2h0LWZvcndhcmQ6IFRoZQotY29tbWFuZCBwcm9tcHQgd2lsbCBleHBhbmQgc3RyaW5ncyB3cmFwcGVkIGludG8gcGVyY2VudCBzaWducyBhdXRvbWF0aWNhbGx5OjoKLQotICAgIGVjaG8gJVBBVEglCi0KLUNvbnN1bHQgOmNvbW1hbmQ6YHNldCAvP2AgZm9yIGRldGFpbHMgb24gdGhpcyBiZWhhdmlvdXIuCisgICAgVGhlIDplbnZ2YXI6YFBZVEhPTlBBVEhgIHZhcmlhYmxlIGlzIHVzZWQgYnkgYWxsIHZlcnNpb25zIG9mIFB5dGhvbiAyIGFuZAorICAgIFB5dGhvbiAzLCBzbyB5b3Ugc2hvdWxkIG5vdCBwZXJtYW5lbnRseSBjb25maWd1cmUgdGhpcyB2YXJpYWJsZSB1bmxlc3MgaXQKKyAgICBvbmx5IGluY2x1ZGVzIGNvZGUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIG9mIHlvdXIgaW5zdGFsbGVkIFB5dGhvbgorICAgIHZlcnNpb25zLgogCiAuLiBzZWVhbHNvOjoKIAotICAgaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi8xMDA4NDMKKyAgICBodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi8xMDA4NDMKICAgICAgIEVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBXaW5kb3dzIE5UCiAKLSAgIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvMzEwNTE5CisgICAgaHR0cHM6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9jYzc1NDI1MC5hc3B4CisgICAgICBUaGUgU0VUIGNvbW1hbmQsIGZvciB0ZW1wb3JhcmlseSBtb2RpZnlpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKKyAgICBodHRwczovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2NjNzU1MTA0LmFzcHgKKyAgICAgIFRoZSBTRVRYIGNvbW1hbmQsIGZvciBwZXJtYW5lbnRseSBtb2RpZnlpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKKyAgICBodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi8zMTA1MTkKICAgICAgIEhvdyBUbyBNYW5hZ2UgRW52aXJvbm1lbnQgVmFyaWFibGVzIGluIFdpbmRvd3MgWFAKIAotICAgaHR0cDovL3d3dy5jaGVtLmdsYS5hYy51ay9+bG91aXMvc29mdHdhcmUvZmFxL3ExLmh0bWwKKyAgICBodHRwczovL3d3dy5jaGVtLmdsYS5hYy51ay9+bG91aXMvc29mdHdhcmUvZmFxL3ExLmh0bWwKICAgICAgIFNldHRpbmcgRW52aXJvbm1lbnQgdmFyaWFibGVzLCBMb3VpcyBKLiBGYXJydWdpYQogCi0KIC4uIF93aW5kb3dzLXBhdGgtbW9kOgogCiBGaW5kaW5nIHRoZSBQeXRob24gZXhlY3V0YWJsZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy41CiAKIEJlc2lkZXMgdXNpbmcgdGhlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBzdGFydCBtZW51IGVudHJ5IGZvciB0aGUgUHl0aG9uCi1pbnRlcnByZXRlciwgeW91IG1pZ2h0IHdhbnQgdG8gc3RhcnQgUHl0aG9uIGluIHRoZSBjb21tYW5kIHByb21wdC4gQXMgb2YKLVB5dGhvbiAzLjMsIHRoZSBpbnN0YWxsZXIgaGFzIGFuIG9wdGlvbiB0byBzZXQgdGhhdCB1cCBmb3IgeW91LgoraW50ZXJwcmV0ZXIsIHlvdSBtaWdodCB3YW50IHRvIHN0YXJ0IFB5dGhvbiBpbiB0aGUgY29tbWFuZCBwcm9tcHQuIFRoZQoraW5zdGFsbGVyIGZvciBQeXRob24gMy41IGFuZCBsYXRlciBoYXMgYW4gb3B0aW9uIHRvIHNldCB0aGF0IHVwIGZvciB5b3UuCiAKLUF0IHRoZSAiQ3VzdG9taXplIFB5dGhvbiAzLjMiIHNjcmVlbiwgYW4gb3B0aW9uIGNhbGxlZAotIkFkZCBweXRob24uZXhlIHRvIHNlYXJjaCBwYXRoIiBjYW4gYmUgZW5hYmxlZCB0byBoYXZlIHRoZSBpbnN0YWxsZXIgcGxhY2UKLXlvdXIgaW5zdGFsbGF0aW9uIGludG8gdGhlIDplbnZ2YXI6YCVQQVRIJWAuIFRoaXMgYWxsb3dzIHlvdSB0byB0eXBlCi06Y29tbWFuZDpgcHl0aG9uYCB0byBydW4gdGhlIGludGVycHJldGVyLiBUaHVzLCB5b3UgY2FuIGFsc28gZXhlY3V0ZSB5b3VyCitPbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgaW5zdGFsbGVyLCBhbiBvcHRpb24gbGFiZWxsZWQgIkFkZCBQeXRob24gMy41IHRvCitQQVRIIiBjYW4gYmUgc2VsZWN0ZWQgdG8gaGF2ZSB0aGUgaW5zdGFsbGVyIGFkZCB0aGUgaW5zdGFsbCBsb2NhdGlvbiBpbnRvIHRoZQorOmVudnZhcjpgUEFUSGAuICBUaGUgbG9jYXRpb24gb2YgdGhlIDpmaWxlOmBTY3JpcHRzXFxgIGZvbGRlciBpcyBhbHNvIGFkZGVkLgorVGhpcyBhbGxvd3MgeW91IHRvIHR5cGUgOmNvbW1hbmQ6YHB5dGhvbmAgdG8gcnVuIHRoZSBpbnRlcnByZXRlciwgYW5kCis6Y29tbWFuZDpgcGlwYCBvciAuIFRodXMsIHlvdSBjYW4gYWxzbyBleGVjdXRlIHlvdXIKIHNjcmlwdHMgd2l0aCBjb21tYW5kIGxpbmUgb3B0aW9ucywgc2VlIDpyZWY6YHVzaW5nLW9uLWNtZGxpbmVgIGRvY3VtZW50YXRpb24uCiAKIElmIHlvdSBkb24ndCBlbmFibGUgdGhpcyBvcHRpb24gYXQgaW5zdGFsbCB0aW1lLCB5b3UgY2FuIGFsd2F5cyByZS1ydW4gdGhlCi1pbnN0YWxsZXIgdG8gY2hvb3NlIGl0LgoraW5zdGFsbGVyLCBzZWxlY3QgTW9kaWZ5LCBhbmQgZW5hYmxlIGl0LiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBtYW51YWxseQorbW9kaWZ5IHRoZSA6ZW52dmFyOmBQQVRIYCB1c2luZyB0aGUgZGlyZWN0aW9ucyBpbiA6cmVmOmBzZXR0aW5nLWVudnZhcnNgLiAgWW91CituZWVkIHRvIHNldCB5b3VyIDplbnZ2YXI6YFBBVEhgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGluY2x1ZGUgdGhlIGRpcmVjdG9yeQorb2YgeW91ciBQeXRob24gaW5zdGFsbGF0aW9uLCBkZWxpbWl0ZWQgYnkgYSBzZW1pY29sb24gZnJvbSBvdGhlciBlbnRyaWVzLiAgQW4KK2V4YW1wbGUgdmFyaWFibGUgY291bGQgbG9vayBsaWtlIHRoaXMgKGFzc3VtaW5nIHRoZSBmaXJzdCB0d28gZW50cmllcyBhbHJlYWR5CitleGlzdGVkKTo6CiAKLVRoZSBhbHRlcm5hdGl2ZSBpcyBtYW51YWxseSBtb2RpZnlpbmcgdGhlIDplbnZ2YXI6YCVQQVRIJWAgdXNpbmcgdGhlCi1kaXJlY3Rpb25zIGluIDpyZWY6YHNldHRpbmctZW52dmFyc2AuIFlvdSBuZWVkIHRvIHNldCB5b3VyIDplbnZ2YXI6YCVQQVRIJWAKLWVudmlyb25tZW50IHZhcmlhYmxlIHRvIGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBvZiB5b3VyIFB5dGhvbiBkaXN0cmlidXRpb24sCi1kZWxpbWl0ZWQgYnkgYSBzZW1pY29sb24gZnJvbSBvdGhlciBlbnRyaWVzLiBBbiBleGFtcGxlIHZhcmlhYmxlIGNvdWxkIGxvb2sKLWxpa2UgdGhpcyAoYXNzdW1pbmcgdGhlIGZpcnN0IHR3byBlbnRyaWVzIGFyZSBXaW5kb3dzJyBkZWZhdWx0KTo6Ci0KLSAgICBDOlxXSU5ET1dTXHN5c3RlbTMyO0M6XFdJTkRPV1M7QzpcUHl0aG9uMzMKLQotCi1GaW5kaW5nIG1vZHVsZXMKLS0tLS0tLS0tLS0tLS0tLQotCi1QeXRob24gdXN1YWxseSBzdG9yZXMgaXRzIGxpYnJhcnkgKGFuZCB0aGVyZWJ5IHlvdXIgc2l0ZS1wYWNrYWdlcyBmb2xkZXIpIGluIHRoZQotaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4gIFNvLCBpZiB5b3UgaGFkIGluc3RhbGxlZCBQeXRob24gdG8KLTpmaWxlOmBDOlxcUHl0aG9uXFxgLCB0aGUgZGVmYXVsdCBsaWJyYXJ5IHdvdWxkIHJlc2lkZSBpbgotOmZpbGU6YEM6XFxQeXRob25cXExpYlxcYCBhbmQgdGhpcmQtcGFydHkgbW9kdWxlcyBzaG91bGQgYmUgc3RvcmVkIGluCi06ZmlsZTpgQzpcXFB5dGhvblxcTGliXFxzaXRlLXBhY2thZ2VzXFxgLgotCi1UaGlzIGlzIGhvdyA6ZGF0YTpgc3lzLnBhdGhgIGlzIHBvcHVsYXRlZCBvbiBXaW5kb3dzOgotCi0qIEFuIGVtcHR5IGVudHJ5IGlzIGFkZGVkIGF0IHRoZSBzdGFydCwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQKLSAgZGlyZWN0b3J5LgotCi0qIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA6ZW52dmFyOmBQWVRIT05QQVRIYCBleGlzdHMsIGFzIGRlc2NyaWJlZCBpbgotICA6cmVmOmB1c2luZy1vbi1lbnZ2YXJzYCwgaXRzIGVudHJpZXMgYXJlIGFkZGVkIG5leHQuICBOb3RlIHRoYXQgb24gV2luZG93cywKLSAgcGF0aHMgaW4gdGhpcyB2YXJpYWJsZSBtdXN0IGJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLCB0byBkaXN0aW5ndWlzaCB0aGVtCi0gIGZyb20gdGhlIGNvbG9uIHVzZWQgaW4gZHJpdmUgaWRlbnRpZmllcnMgKGBgQzpcYGAgZXRjLikuCi0KLSogQWRkaXRpb25hbCAiYXBwbGljYXRpb24gcGF0aHMiIGNhbiBiZSBhZGRlZCBpbiB0aGUgcmVnaXN0cnkgYXMgc3Via2V5cyBvZgotICA6c2FtcDpgXFxTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFx7dmVyc2lvbn1cXFB5dGhvblBhdGhgIHVuZGVyIGJvdGggdGhlCi0gIGBgSEtFWV9DVVJSRU5UX1VTRVJgYCBhbmQgYGBIS0VZX0xPQ0FMX01BQ0hJTkVgYCBoaXZlcy4gIFN1YmtleXMgd2hpY2ggaGF2ZQotICBzZW1pY29sb24tZGVsaW1pdGVkIHBhdGggc3RyaW5ncyBhcyB0aGVpciBkZWZhdWx0IHZhbHVlIHdpbGwgY2F1c2UgZWFjaCBwYXRoCi0gIHRvIGJlIGFkZGVkIHRvIDpkYXRhOmBzeXMucGF0aGAuICAoTm90ZSB0aGF0IGFsbCBrbm93biBpbnN0YWxsZXJzIG9ubHkgdXNlCi0gIEhLTE0sIHNvIEhLQ1UgaXMgdHlwaWNhbGx5IGVtcHR5LikKLQotKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgOmVudnZhcjpgUFlUSE9OSE9NRWAgaXMgc2V0LCBpdCBpcyBhc3N1bWVkIGFzCi0gICJQeXRob24gSG9tZSIuICBPdGhlcndpc2UsIHRoZSBwYXRoIG9mIHRoZSBtYWluIFB5dGhvbiBleGVjdXRhYmxlIGlzIHVzZWQgdG8KLSAgbG9jYXRlIGEgImxhbmRtYXJrIGZpbGUiIChgYExpYlxvcy5weWBgKSB0byBkZWR1Y2UgdGhlICJQeXRob24gSG9tZSIuICBJZiBhCi0gIFB5dGhvbiBob21lIGlzIGZvdW5kLCB0aGUgcmVsZXZhbnQgc3ViLWRpcmVjdG9yaWVzIGFkZGVkIHRvIDpkYXRhOmBzeXMucGF0aGAKLSAgKGBgTGliYGAsIGBgcGxhdC13aW5gYCwgZXRjKSBhcmUgYmFzZWQgb24gdGhhdCBmb2xkZXIuICBPdGhlcndpc2UsIHRoZSBjb3JlCi0gIFB5dGhvbiBwYXRoIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIFB5dGhvblBhdGggc3RvcmVkIGluIHRoZSByZWdpc3RyeS4KLQotKiBJZiB0aGUgUHl0aG9uIEhvbWUgY2Fubm90IGJlIGxvY2F0ZWQsIG5vIDplbnZ2YXI6YFBZVEhPTlBBVEhgIGlzIHNwZWNpZmllZCBpbgotICB0aGUgZW52aXJvbm1lbnQsIGFuZCBubyByZWdpc3RyeSBlbnRyaWVzIGNhbiBiZSBmb3VuZCwgYSBkZWZhdWx0IHBhdGggd2l0aAotICByZWxhdGl2ZSBlbnRyaWVzIGlzIHVzZWQgKGUuZy4gYGAuXExpYjsuXHBsYXQtd2luYGAsIGV0YykuCi0KLVRoZSBlbmQgcmVzdWx0IG9mIGFsbCB0aGlzIGlzOgotCi0qIFdoZW4gcnVubmluZyA6ZmlsZTpgcHl0aG9uLmV4ZWAsIG9yIGFueSBvdGhlciAuZXhlIGluIHRoZSBtYWluIFB5dGhvbgotICBkaXJlY3RvcnkgKGVpdGhlciBhbiBpbnN0YWxsZWQgdmVyc2lvbiwgb3IgZGlyZWN0bHkgZnJvbSB0aGUgUENidWlsZAotICBkaXJlY3RvcnkpLCB0aGUgY29yZSBwYXRoIGlzIGRlZHVjZWQsIGFuZCB0aGUgY29yZSBwYXRocyBpbiB0aGUgcmVnaXN0cnkgYXJlCi0gIGlnbm9yZWQuICBPdGhlciAiYXBwbGljYXRpb24gcGF0aHMiIGluIHRoZSByZWdpc3RyeSBhcmUgYWx3YXlzIHJlYWQuCi0KLSogV2hlbiBQeXRob24gaXMgaG9zdGVkIGluIGFub3RoZXIgLmV4ZSAoZGlmZmVyZW50IGRpcmVjdG9yeSwgZW1iZWRkZWQgdmlhIENPTSwKLSAgZXRjKSwgdGhlICJQeXRob24gSG9tZSIgd2lsbCBub3QgYmUgZGVkdWNlZCwgc28gdGhlIGNvcmUgcGF0aCBmcm9tIHRoZQotICByZWdpc3RyeSBpcyB1c2VkLiAgT3RoZXIgImFwcGxpY2F0aW9uIHBhdGhzIiBpbiB0aGUgcmVnaXN0cnkgYXJlIGFsd2F5cyByZWFkLgotCi0qIElmIFB5dGhvbiBjYW4ndCBmaW5kIGl0cyBob21lIGFuZCB0aGVyZSBpcyBubyByZWdpc3RyeSAoZWcsIGZyb3plbiAuZXhlLCBzb21lCi0gIHZlcnkgc3RyYW5nZSBpbnN0YWxsYXRpb24gc2V0dXApIHlvdSBnZXQgYSBwYXRoIHdpdGggc29tZSBkZWZhdWx0LCBidXQKLSAgcmVsYXRpdmUsIHBhdGhzLgotCi0KLUV4ZWN1dGluZyBzY3JpcHRzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1BcyBvZiBQeXRob24gMy4zLCBQeXRob24gaW5jbHVkZXMgYSBsYXVuY2hlciB3aGljaCBmYWNpbGl0YXRlcyBydW5uaW5nIFB5dGhvbgotc2NyaXB0cy4gU2VlIDpyZWY6YGxhdW5jaGVyYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotRXhlY3V0aW5nIHNjcmlwdHMgd2l0aG91dCB0aGUgUHl0aG9uIGxhdW5jaGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2l0aG91dCB0aGUgUHl0aG9uIGxhdW5jaGVyIGluc3RhbGxlZCwgUHl0aG9uIHNjcmlwdHMgKGZpbGVzIHdpdGggdGhlIGV4dGVuc2lvbgotYGAucHlgYCkgd2lsbCBiZSBleGVjdXRlZCBieSA6cHJvZ3JhbTpgcHl0aG9uLmV4ZWAgYnkgZGVmYXVsdC4gIFRoaXMgZXhlY3V0YWJsZQotb3BlbnMgYSB0ZXJtaW5hbCwgd2hpY2ggc3RheXMgb3BlbiBldmVuIGlmIHRoZSBwcm9ncmFtIHVzZXMgYSBHVUkuICBJZiB5b3UgZG8KLW5vdCB3YW50IHRoaXMgdG8gaGFwcGVuLCB1c2UgdGhlIGV4dGVuc2lvbiBgYC5weXdgYCB3aGljaCB3aWxsIGNhdXNlIHRoZSBzY3JpcHQKLXRvIGJlIGV4ZWN1dGVkIGJ5IDpwcm9ncmFtOmBweXRob253LmV4ZWAgYnkgZGVmYXVsdCAoYm90aCBleGVjdXRhYmxlcyBhcmUKLWxvY2F0ZWQgaW4gdGhlIHRvcC1sZXZlbCBvZiB5b3VyIFB5dGhvbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5KS4gIFRoaXMKLXN1cHByZXNzZXMgdGhlIHRlcm1pbmFsIHdpbmRvdyBvbiBzdGFydHVwLgotCi1Zb3UgY2FuIGFsc28gbWFrZSBhbGwgYGAucHlgYCBzY3JpcHRzIGV4ZWN1dGUgd2l0aCA6cHJvZ3JhbTpgcHl0aG9udy5leGVgLAotc2V0dGluZyB0aGlzIHRocm91Z2ggdGhlIHVzdWFsIGZhY2lsaXRpZXMsIGZvciBleGFtcGxlIChtaWdodCByZXF1aXJlCi1hZG1pbmlzdHJhdGl2ZSByaWdodHMpOgotCi0jLiBMYXVuY2ggYSBjb21tYW5kIHByb21wdC4KLSMuIEFzc29jaWF0ZSB0aGUgY29ycmVjdCBmaWxlIGdyb3VwIHdpdGggYGAucHlgYCBzY3JpcHRzOjoKLQotICAgICAgYXNzb2MgLnB5PVB5dGhvbi5GaWxlCi0KLSMuIFJlZGlyZWN0IGFsbCBQeXRob24gZmlsZXMgdG8gdGhlIG5ldyBleGVjdXRhYmxlOjoKLQotICAgICAgZnR5cGUgUHl0aG9uLkZpbGU9QzpcUGF0aFx0b1xweXRob253LmV4ZSAiJTEiICUqCi0KKyAgICBDOlxXSU5ET1dTXHN5c3RlbTMyO0M6XFdJTkRPV1M7QzpcUHJvZ3JhbSBGaWxlc1xQeXRob24gMy41CiAKIC4uIF9sYXVuY2hlcjoKIApAQCAtMjUxLDIxICs0MDIsMjYgQEAKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLVRoZSBQeXRob24gbGF1bmNoZXIgZm9yIFdpbmRvd3MgaXMgYSB1dGlsaXR5IHdoaWNoIGFpZHMgaW4gdGhlIGxvY2F0aW9uIGFuZAotZXhlY3V0aW9uIG9mIGRpZmZlcmVudCBQeXRob24gdmVyc2lvbnMuICBJdCBhbGxvd3Mgc2NyaXB0cyAob3IgdGhlCitUaGUgUHl0aG9uIGxhdW5jaGVyIGZvciBXaW5kb3dzIGlzIGEgdXRpbGl0eSB3aGljaCBhaWRzIGluIGxvY2F0aW5nIGFuZAorZXhlY3V0aW5nIG9mIGRpZmZlcmVudCBQeXRob24gdmVyc2lvbnMuICBJdCBhbGxvd3Mgc2NyaXB0cyAob3IgdGhlCiBjb21tYW5kLWxpbmUpIHRvIGluZGljYXRlIGEgcHJlZmVyZW5jZSBmb3IgYSBzcGVjaWZpYyBQeXRob24gdmVyc2lvbiwgYW5kCiB3aWxsIGxvY2F0ZSBhbmQgZXhlY3V0ZSB0aGF0IHZlcnNpb24uCiAKK1VubGlrZSB0aGUgOmVudnZhcjpgUEFUSGAgdmFyaWFibGUsIHRoZSBsYXVuY2hlciB3aWxsIGNvcnJlY3RseSBzZWxlY3QgdGhlIG1vc3QKK2FwcHJvcHJpYXRlIHZlcnNpb24gb2YgUHl0aG9uLiBJdCB3aWxsIHByZWZlciBwZXItdXNlciBpbnN0YWxsYXRpb25zIG92ZXIKK3N5c3RlbS13aWRlIG9uZXMsIGFuZCBvcmRlcnMgYnkgbGFuZ3VhZ2UgdmVyc2lvbiByYXRoZXIgdGhhbiB1c2luZyB0aGUgbW9zdAorcmVjZW50bHkgaW5zdGFsbGVkIHZlcnNpb24uCisKIEdldHRpbmcgc3RhcnRlZAogLS0tLS0tLS0tLS0tLS0tCiAKIEZyb20gdGhlIGNvbW1hbmQtbGluZQogXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVlvdSBzaG91bGQgZW5zdXJlIHRoZSBsYXVuY2hlciBpcyBvbiB5b3VyIFBBVEggLSBkZXBlbmRpbmcgb24gaG93IGl0IHdhcwotaW5zdGFsbGVkIGl0IG1heSBhbHJlYWR5IGJlIHRoZXJlLCBidXQgY2hlY2sganVzdCBpbiBjYXNlIGl0IGlzIG5vdC4KLQotRnJvbSBhIGNvbW1hbmQtcHJvbXB0LCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKK1N5c3RlbS13aWRlIGluc3RhbGxhdGlvbnMgb2YgUHl0aG9uIDMuMyBhbmQgbGF0ZXIgd2lsbCBwdXQgdGhlIGxhdW5jaGVyIG9uIHlvdXIKKzplbnZ2YXI6YFBBVEhgLiBUaGUgbGF1bmNoZXIgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBhdmFpbGFibGUgdmVyc2lvbnMgb2YKK1B5dGhvbiwgc28gaXQgZG9lcyBub3QgbWF0dGVyIHdoaWNoIHZlcnNpb24gaXMgaW5zdGFsbGVkLiBUbyBjaGVjayB0aGF0IHRoZQorbGF1bmNoZXIgaXMgYXZhaWxhYmxlLCBleGVjdXRlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiBDb21tYW5kIFByb21wdDoKIAogOjoKIApAQCAtMjkxLDYgKzQ0NywyOCBAQAogCiBZb3Ugc2hvdWxkIGZpbmQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFB5dGhvbiAzLnggc3RhcnRzLgogCitJZiB5b3Ugc2VlIHRoZSBmb2xsb3dpbmcgZXJyb3IsIHlvdSBkbyBub3QgaGF2ZSB0aGUgbGF1bmNoZXIgaW5zdGFsbGVkOgorCis6OgorCisgICdweScgaXMgbm90IHJlY29nbml6ZWQgYXMgYW4gaW50ZXJuYWwgb3IgZXh0ZXJuYWwgY29tbWFuZCwKKyAgb3BlcmFibGUgcHJvZ3JhbSBvciBiYXRjaCBmaWxlLgorCitQZXItdXNlciBpbnN0YWxsYXRpb25zIG9mIFB5dGhvbiBkbyBub3QgYWRkIHRoZSBsYXVuY2hlciB0byA6ZW52dmFyOmBQQVRIYAordW5sZXNzIHRoZSBvcHRpb24gd2FzIHNlbGVjdGVkIG9uIGluc3RhbGxhdGlvbi4KKworVmlydHVhbCBlbnZpcm9ubWVudHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCitJZiB0aGUgbGF1bmNoZXIgaXMgcnVuIHdpdGggbm8gZXhwbGljaXQgUHl0aG9uIHZlcnNpb24gc3BlY2lmaWNhdGlvbiwgYW5kIGEKK3ZpcnR1YWwgZW52aXJvbm1lbnQgKGNyZWF0ZWQgd2l0aCB0aGUgc3RhbmRhcmQgbGlicmFyeSA6bW9kOmB2ZW52YCBtb2R1bGUgb3IKK3RoZSBleHRlcm5hbCBgYHZpcnR1YWxlbnZgYCB0b29sKSBhY3RpdmUsIHRoZSBsYXVuY2hlciB3aWxsIHJ1biB0aGUgdmlydHVhbAorZW52aXJvbm1lbnQncyBpbnRlcnByZXRlciByYXRoZXIgdGhhbiB0aGUgZ2xvYmFsIG9uZS4gIFRvIHJ1biB0aGUgZ2xvYmFsCitpbnRlcnByZXRlciwgZWl0aGVyIGRlYWN0aXZhdGUgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQsIG9yIGV4cGxpY2l0bHkgc3BlY2lmeQordGhlIGdsb2JhbCBQeXRob24gdmVyc2lvbi4KKwogRnJvbSBhIHNjcmlwdAogXl5eXl5eXl5eXl5eXgogCkBAIC0zMjYsNyArNTA0LDcgQEAKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogVGhlIGxhdW5jaGVyIHNob3VsZCBoYXZlIGJlZW4gYXNzb2NpYXRlZCB3aXRoIFB5dGhvbiBmaWxlcyAoaS5lLiBgYC5weWBgLAotYGAucHl3YGAsIGBgLnB5Y2BgLCBgYC5weW9gYCBmaWxlcykgd2hlbiBpdCB3YXMgaW5zdGFsbGVkLiAgVGhpcyBtZWFucyB0aGF0CitgYC5weXdgYCwgYGAucHljYGAgZmlsZXMpIHdoZW4gaXQgd2FzIGluc3RhbGxlZC4gIFRoaXMgbWVhbnMgdGhhdAogd2hlbiB5b3UgZG91YmxlLWNsaWNrIG9uIG9uZSBvZiB0aGVzZSBmaWxlcyBmcm9tIFdpbmRvd3MgZXhwbG9yZXIgdGhlIGxhdW5jaGVyCiB3aWxsIGJlIHVzZWQsIGFuZCB0aGVyZWZvcmUgeW91IGNhbiB1c2UgdGhlIHNhbWUgZmFjaWxpdGllcyBkZXNjcmliZWQgYWJvdmUgdG8KIGhhdmUgdGhlIHNjcmlwdCBzcGVjaWZ5IHRoZSB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkLgpAQCAtMzY1LDYgKzU0MywxNiBAQAogb24gV2luZG93cyB3aGljaCB5b3UgaG9wZSB3aWxsIGJlIHVzZWZ1bCBvbiBVbml4LCB5b3Ugc2hvdWxkIHVzZSBvbmUgb2YgdGhlCiBzaGViYW5nIGxpbmVzIHN0YXJ0aW5nIHdpdGggYGAvdXNyYGAuCiAKK0FueSBvZiB0aGUgYWJvdmUgdmlydHVhbCBjb21tYW5kcyBjYW4gYmUgc3VmZml4ZWQgd2l0aCBhbiBleHBsaWNpdCB2ZXJzaW9uCisoZWl0aGVyIGp1c3QgdGhlIG1ham9yIHZlcnNpb24sIG9yIHRoZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbikgLSBmb3IgZXhhbXBsZQorYGAvdXNyL2Jpbi9weXRob24yLjdgYCAtIHdoaWNoIHdpbGwgY2F1c2UgdGhhdCBzcGVjaWZpYyB2ZXJzaW9uIHRvIGJlIGxvY2F0ZWQKK2FuZCB1c2VkLgorCitUaGUgYGAvdXNyL2Jpbi9lbnZgYCBmb3JtIG9mIHNoZWJhbmcgbGluZSBoYXMgb25lIGZ1cnRoZXIgc3BlY2lhbCBwcm9wZXJ0eS4KK0JlZm9yZSBsb29raW5nIGZvciBpbnN0YWxsZWQgUHl0aG9uIGludGVycHJldGVycywgdGhpcyBmb3JtIHdpbGwgc2VhcmNoIHRoZQorZXhlY3V0YWJsZSA6ZW52dmFyOmBQQVRIYCBmb3IgYSBQeXRob24gZXhlY3V0YWJsZS4gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUKK2JlaGF2aW91ciBvZiB0aGUgVW5peCBgYGVudmBgIHByb2dyYW0sIHdoaWNoIHBlcmZvcm1zIGEgOmVudnZhcjpgUEFUSGAgc2VhcmNoLgorCiBBcmd1bWVudHMgaW4gc2hlYmFuZyBsaW5lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzgzLDE3ICs1NzEsMTYgQEAKIEN1c3RvbWl6YXRpb24gdmlhIElOSSBmaWxlcwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLSAgICBUd28gLmluaSBmaWxlcyB3aWxsIGJlIHNlYXJjaGVkIGJ5IHRoZSBsYXVuY2hlciAtIGBgcHkuaW5pYGAgaW4gdGhlCi0gICAgY3VycmVudCB1c2VyJ3MgImFwcGxpY2F0aW9uIGRhdGEiIGRpcmVjdG9yeSAoaS5lLiB0aGUgZGlyZWN0b3J5IHJldHVybmVkCi0gICAgYnkgY2FsbGluZyB0aGUgV2luZG93cyBmdW5jdGlvbiBTSEdldEZvbGRlclBhdGggd2l0aCBDU0lETF9MT0NBTF9BUFBEQVRBKQotICAgIGFuZCBgYHB5LmluaWBgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgbGF1bmNoZXIuICBUaGUgc2FtZSAuaW5pCi0gICAgZmlsZXMgYXJlIHVzZWQgZm9yIGJvdGggdGhlICdjb25zb2xlJyB2ZXJzaW9uIG9mIHRoZSBsYXVuY2hlciAoaS5lLgotICAgIHB5LmV4ZSkgYW5kIGZvciB0aGUgJ3dpbmRvd3MnIHZlcnNpb24gKGkuZS4gcHl3LmV4ZSkKK1R3byAuaW5pIGZpbGVzIHdpbGwgYmUgc2VhcmNoZWQgYnkgdGhlIGxhdW5jaGVyIC0gYGBweS5pbmlgYCBpbiB0aGUgY3VycmVudAordXNlcidzICJhcHBsaWNhdGlvbiBkYXRhIiBkaXJlY3RvcnkgKGkuZS4gdGhlIGRpcmVjdG9yeSByZXR1cm5lZCBieSBjYWxsaW5nIHRoZQorV2luZG93cyBmdW5jdGlvbiBTSEdldEZvbGRlclBhdGggd2l0aCBDU0lETF9MT0NBTF9BUFBEQVRBKSBhbmQgYGBweS5pbmlgYCBpbiB0aGUKK3NhbWUgZGlyZWN0b3J5IGFzIHRoZSBsYXVuY2hlci4gVGhlIHNhbWUgLmluaSBmaWxlcyBhcmUgdXNlZCBmb3IgYm90aCB0aGUKKydjb25zb2xlJyB2ZXJzaW9uIG9mIHRoZSBsYXVuY2hlciAoaS5lLiBweS5leGUpIGFuZCBmb3IgdGhlICd3aW5kb3dzJyB2ZXJzaW9uCisoaS5lLiBweXcuZXhlKQogCi0gICAgQ3VzdG9taXphdGlvbiBzcGVjaWZpZWQgaW4gdGhlICJhcHBsaWNhdGlvbiBkaXJlY3RvcnkiIHdpbGwgaGF2ZQotICAgIHByZWNlZGVuY2Ugb3ZlciB0aGUgb25lIG5leHQgdG8gdGhlIGV4ZWN1dGFibGUsIHNvIGEgdXNlciwgd2hvIG1heSBub3QKLSAgICBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGUgLmluaSBmaWxlIG5leHQgdG8gdGhlIGxhdW5jaGVyLCBjYW4gb3ZlcnJpZGUKLSAgICBjb21tYW5kcyBpbiB0aGF0IGdsb2JhbCAuaW5pIGZpbGUpCitDdXN0b21pemF0aW9uIHNwZWNpZmllZCBpbiB0aGUgImFwcGxpY2F0aW9uIGRpcmVjdG9yeSIgd2lsbCBoYXZlIHByZWNlZGVuY2Ugb3ZlcgordGhlIG9uZSBuZXh0IHRvIHRoZSBleGVjdXRhYmxlLCBzbyBhIHVzZXIsIHdobyBtYXkgbm90IGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoZQorLmluaSBmaWxlIG5leHQgdG8gdGhlIGxhdW5jaGVyLCBjYW4gb3ZlcnJpZGUgY29tbWFuZHMgaW4gdGhhdCBnbG9iYWwgLmluaSBmaWxlKQogCiBDdXN0b21pemluZyBkZWZhdWx0IFB5dGhvbiB2ZXJzaW9ucwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KQEAgLTQ4OCw2ICs2NzUsOTkgQEAKIHRhcmdldCBQeXRob24uCiAKIAorCisuLiBmaW5kaW5nX21vZHVsZXM6CisKK0ZpbmRpbmcgbW9kdWxlcworPT09PT09PT09PT09PT09CisKK1B5dGhvbiB1c3VhbGx5IHN0b3JlcyBpdHMgbGlicmFyeSAoYW5kIHRoZXJlYnkgeW91ciBzaXRlLXBhY2thZ2VzIGZvbGRlcikgaW4gdGhlCitpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiAgU28sIGlmIHlvdSBoYWQgaW5zdGFsbGVkIFB5dGhvbiB0bworOmZpbGU6YEM6XFxQeXRob25cXGAsIHRoZSBkZWZhdWx0IGxpYnJhcnkgd291bGQgcmVzaWRlIGluCis6ZmlsZTpgQzpcXFB5dGhvblxcTGliXFxgIGFuZCB0aGlyZC1wYXJ0eSBtb2R1bGVzIHNob3VsZCBiZSBzdG9yZWQgaW4KKzpmaWxlOmBDOlxcUHl0aG9uXFxMaWJcXHNpdGUtcGFja2FnZXNcXGAuCisKK1RoaXMgaXMgaG93IDpkYXRhOmBzeXMucGF0aGAgaXMgcG9wdWxhdGVkIG9uIFdpbmRvd3M6CisKKyogQW4gZW1wdHkgZW50cnkgaXMgYWRkZWQgYXQgdGhlIHN0YXJ0LCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudAorICBkaXJlY3RvcnkuCisKKyogSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDplbnZ2YXI6YFBZVEhPTlBBVEhgIGV4aXN0cywgYXMgZGVzY3JpYmVkIGluCisgIDpyZWY6YHVzaW5nLW9uLWVudnZhcnNgLCBpdHMgZW50cmllcyBhcmUgYWRkZWQgbmV4dC4gIE5vdGUgdGhhdCBvbiBXaW5kb3dzLAorICBwYXRocyBpbiB0aGlzIHZhcmlhYmxlIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIHRvIGRpc3Rpbmd1aXNoIHRoZW0KKyAgZnJvbSB0aGUgY29sb24gdXNlZCBpbiBkcml2ZSBpZGVudGlmaWVycyAoYGBDOlxgYCBldGMuKS4KKworKiBBZGRpdGlvbmFsICJhcHBsaWNhdGlvbiBwYXRocyIgY2FuIGJlIGFkZGVkIGluIHRoZSByZWdpc3RyeSBhcyBzdWJrZXlzIG9mCisgIDpzYW1wOmBcXFNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXHt2ZXJzaW9ufVxcUHl0aG9uUGF0aGAgdW5kZXIgYm90aCB0aGUKKyAgYGBIS0VZX0NVUlJFTlRfVVNFUmBgIGFuZCBgYEhLRVlfTE9DQUxfTUFDSElORWBgIGhpdmVzLiAgU3Via2V5cyB3aGljaCBoYXZlCisgIHNlbWljb2xvbi1kZWxpbWl0ZWQgcGF0aCBzdHJpbmdzIGFzIHRoZWlyIGRlZmF1bHQgdmFsdWUgd2lsbCBjYXVzZSBlYWNoIHBhdGgKKyAgdG8gYmUgYWRkZWQgdG8gOmRhdGE6YHN5cy5wYXRoYC4gIChOb3RlIHRoYXQgYWxsIGtub3duIGluc3RhbGxlcnMgb25seSB1c2UKKyAgSEtMTSwgc28gSEtDVSBpcyB0eXBpY2FsbHkgZW1wdHkuKQorCisqIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA6ZW52dmFyOmBQWVRIT05IT01FYCBpcyBzZXQsIGl0IGlzIGFzc3VtZWQgYXMKKyAgIlB5dGhvbiBIb21lIi4gIE90aGVyd2lzZSwgdGhlIHBhdGggb2YgdGhlIG1haW4gUHl0aG9uIGV4ZWN1dGFibGUgaXMgdXNlZCB0bworICBsb2NhdGUgYSAibGFuZG1hcmsgZmlsZSIgKGBgTGliXG9zLnB5YGApIHRvIGRlZHVjZSB0aGUgIlB5dGhvbiBIb21lIi4gIElmIGEKKyAgUHl0aG9uIGhvbWUgaXMgZm91bmQsIHRoZSByZWxldmFudCBzdWItZGlyZWN0b3JpZXMgYWRkZWQgdG8gOmRhdGE6YHN5cy5wYXRoYAorICAoYGBMaWJgYCwgYGBwbGF0LXdpbmBgLCBldGMpIGFyZSBiYXNlZCBvbiB0aGF0IGZvbGRlci4gIE90aGVyd2lzZSwgdGhlIGNvcmUKKyAgUHl0aG9uIHBhdGggaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgUHl0aG9uUGF0aCBzdG9yZWQgaW4gdGhlIHJlZ2lzdHJ5LgorCisqIElmIHRoZSBQeXRob24gSG9tZSBjYW5ub3QgYmUgbG9jYXRlZCwgbm8gOmVudnZhcjpgUFlUSE9OUEFUSGAgaXMgc3BlY2lmaWVkIGluCisgIHRoZSBlbnZpcm9ubWVudCwgYW5kIG5vIHJlZ2lzdHJ5IGVudHJpZXMgY2FuIGJlIGZvdW5kLCBhIGRlZmF1bHQgcGF0aCB3aXRoCisgIHJlbGF0aXZlIGVudHJpZXMgaXMgdXNlZCAoZS5nLiBgYC5cTGliOy5ccGxhdC13aW5gYCwgZXRjKS4KKworSWYgYSBgYHB5dmVudi5jZmdgYCBmaWxlIGlzIGZvdW5kIGFsb25nc2lkZSB0aGUgbWFpbiBleGVjdXRhYmxlIG9yIGluIHRoZQorZGlyZWN0b3J5IG9uZSBsZXZlbCBhYm92ZSB0aGUgZXhlY3V0YWJsZSwgdGhlIGZvbGxvd2luZyB2YXJpYXRpb25zIGFwcGx5OgorCisqIElmIGBgaG9tZWBgIGlzIGFuIGFic29sdXRlIHBhdGggYW5kIDplbnZ2YXI6YFBZVEhPTkhPTUVgIGlzIG5vdCBzZXQsIHRoaXMKKyAgcGF0aCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIHBhdGggdG8gdGhlIG1haW4gZXhlY3V0YWJsZSB3aGVuIGRlZHVjaW5nIHRoZQorICBob21lIGxvY2F0aW9uLgorCisqIElmIGBgYXBwbG9jYWxgYCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGBgaG9tZWBgIHByb3BlcnR5IG9yIHRoZSBtYWluIGV4ZWN1dGFibGUKKyAgaXMgYWx3YXlzIHVzZWQgYXMgdGhlIGhvbWUgcGF0aCwgYW5kIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgcmVnaXN0cnkKKyAgdmFsdWVzIGFmZmVjdGluZyB0aGUgcGF0aCBhcmUgaWdub3JlZC4gVGhlIGxhbmRtYXJrIGZpbGUgaXMgbm90IGNoZWNrZWQuCisKK1RoZSBlbmQgcmVzdWx0IG9mIGFsbCB0aGlzIGlzOgorCisqIFdoZW4gcnVubmluZyA6ZmlsZTpgcHl0aG9uLmV4ZWAsIG9yIGFueSBvdGhlciAuZXhlIGluIHRoZSBtYWluIFB5dGhvbgorICBkaXJlY3RvcnkgKGVpdGhlciBhbiBpbnN0YWxsZWQgdmVyc2lvbiwgb3IgZGlyZWN0bHkgZnJvbSB0aGUgUENidWlsZAorICBkaXJlY3RvcnkpLCB0aGUgY29yZSBwYXRoIGlzIGRlZHVjZWQsIGFuZCB0aGUgY29yZSBwYXRocyBpbiB0aGUgcmVnaXN0cnkgYXJlCisgIGlnbm9yZWQuICBPdGhlciAiYXBwbGljYXRpb24gcGF0aHMiIGluIHRoZSByZWdpc3RyeSBhcmUgYWx3YXlzIHJlYWQuCisKKyogV2hlbiBQeXRob24gaXMgaG9zdGVkIGluIGFub3RoZXIgLmV4ZSAoZGlmZmVyZW50IGRpcmVjdG9yeSwgZW1iZWRkZWQgdmlhIENPTSwKKyAgZXRjKSwgdGhlICJQeXRob24gSG9tZSIgd2lsbCBub3QgYmUgZGVkdWNlZCwgc28gdGhlIGNvcmUgcGF0aCBmcm9tIHRoZQorICByZWdpc3RyeSBpcyB1c2VkLiAgT3RoZXIgImFwcGxpY2F0aW9uIHBhdGhzIiBpbiB0aGUgcmVnaXN0cnkgYXJlIGFsd2F5cyByZWFkLgorCisqIElmIFB5dGhvbiBjYW4ndCBmaW5kIGl0cyBob21lIGFuZCB0aGVyZSBhcmUgbm8gcmVnaXN0cnkgdmFsdWUgKGZyb3plbiAuZXhlLAorICBzb21lIHZlcnkgc3RyYW5nZSBpbnN0YWxsYXRpb24gc2V0dXApIHlvdSBnZXQgYSBwYXRoIHdpdGggc29tZSBkZWZhdWx0LCBidXQKKyAgcmVsYXRpdmUsIHBhdGhzLgorCitGb3IgdGhvc2Ugd2hvIHdhbnQgdG8gYnVuZGxlIFB5dGhvbiBpbnRvIHRoZWlyIGFwcGxpY2F0aW9uIG9yIGRpc3RyaWJ1dGlvbiwgdGhlCitmb2xsb3dpbmcgYWR2aWNlIHdpbGwgcHJldmVudCBjb25mbGljdHMgd2l0aCBvdGhlciBpbnN0YWxsYXRpb25zOgorCisqIEluY2x1ZGUgYSBgYHB5dmVudi5jZmdgYCBmaWxlIGFsb25nc2lkZSB5b3VyIGV4ZWN1dGFibGUgY29udGFpbmluZworICBgYGFwcGxvY2FsID0gdHJ1ZWBgLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgeW91ciBvd24gZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCB0bworICByZXNvbHZlIHBhdGhzIGV2ZW4gaWYgeW91IGhhdmUgaW5jbHVkZWQgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW4gYSBaSVAgZmlsZS4KKyAgSXQgd2lsbCBhbHNvIGlnbm9yZSB1c2VyIHNpdGUtcGFja2FnZXMgYW5kIG90aGVyIHBhdGhzIGxpc3RlZCBpbiB0aGUKKyAgcmVnaXN0cnkuCisKKyogSWYgeW91IGFyZSBsb2FkaW5nIDpmaWxlOmBweXRob24zLmRsbGAgb3IgOmZpbGU6YHB5dGhvbjM1LmRsbGAgaW4geW91ciBvd24KKyAgZXhlY3V0YWJsZSwgZXhwbGljaXRseSBjYWxsIDpjOmZ1bmM6YFB5X1NldFBhdGhgIG9yIChhdCBsZWFzdCkKKyAgOmM6ZnVuYzpgUHlfU2V0UHJvZ3JhbU5hbWVgIGJlZm9yZSA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYC4KKworKiBDbGVhciBhbmQvb3Igb3ZlcndyaXRlIDplbnZ2YXI6YFBZVEhPTlBBVEhgIGFuZCBzZXQgOmVudnZhcjpgUFlUSE9OSE9NRWAKKyAgYmVmb3JlIGxhdW5jaGluZyA6ZmlsZTpgcHl0aG9uLmV4ZWAgZnJvbSB5b3VyIGFwcGxpY2F0aW9uLgorCisqIElmIHlvdSBjYW5ub3QgdXNlIHRoZSBwcmV2aW91cyBzdWdnZXN0aW9ucyAoZm9yIGV4YW1wbGUsIHlvdSBhcmUgYQorICBkaXN0cmlidXRpb24gdGhhdCBhbGxvd3MgcGVvcGxlIHRvIHJ1biA6ZmlsZTpgcHl0aG9uLmV4ZWAgZGlyZWN0bHkpLCBlbnN1cmUKKyAgdGhhdCB0aGUgbGFuZG1hcmsgZmlsZSAoOmZpbGU6YExpYlxcb3MucHlgKSBleGlzdHMgaW4geW91ciBpbnN0YWxsIGRpcmVjdG9yeS4KKyAgKE5vdGUgdGhhdCBpdCB3aWxsIG5vdCBiZSBkZXRlY3RlZCBpbnNpZGUgYSBaSVAgZmlsZS4pCisKK1RoZXNlIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGZpbGVzIGluIGEgc3lzdGVtLXdpZGUgaW5zdGFsbGF0aW9uIHdpbGwgbm90IHRha2UKK3ByZWNlZGVuY2Ugb3ZlciB0aGUgY29weSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSBidW5kbGVkIHdpdGggeW91ciBhcHBsaWNhdGlvbi4KK090aGVyd2lzZSwgeW91ciB1c2VycyBtYXkgZXhwZXJpZW5jZSBwcm9ibGVtcyB1c2luZyB5b3VyIGFwcGxpY2F0aW9uLiBOb3RlIHRoYXQKK3RoZSBmaXJzdCBzdWdnZXN0aW9uIGlzIHRoZSBiZXN0LCBhcyB0aGUgb3RoZXIgbWF5IHN0aWxsIGJlIHN1c2NlcHRpYmxlIHRvCitub24tc3RhbmRhcmQgcGF0aHMgaW4gdGhlIHJlZ2lzdHJ5IGFuZCB1c2VyIHNpdGUtcGFja2FnZXMuCisKIEFkZGl0aW9uYWwgbW9kdWxlcwogPT09PT09PT09PT09PT09PT09CiAKQEAgLTQ5OCwyMiArNzc4LDIxIEBACiBUaGUgV2luZG93cy1zcGVjaWZpYyBzdGFuZGFyZCBtb2R1bGVzIGFyZSBkb2N1bWVudGVkIGluCiA6cmVmOmBtc3dpbi1zcGVjaWZpYy1zZXJ2aWNlc2AuCiAKLQogUHlXaW4zMgogLS0tLS0tLQogCi1UaGUgYFB5V2luMzIgPGh0dHA6Ly9weXRob24ubmV0L2NyZXcvbWhhbW1vbmQvd2luMzIvPmBfIG1vZHVsZSBieSBNYXJrIEhhbW1vbmQKK1RoZSBgUHlXaW4zMiA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9weXdpbjMyPmBfIG1vZHVsZSBieSBNYXJrIEhhbW1vbmQKIGlzIGEgY29sbGVjdGlvbiBvZiBtb2R1bGVzIGZvciBhZHZhbmNlZCBXaW5kb3dzLXNwZWNpZmljIHN1cHBvcnQuICBUaGlzIGluY2x1ZGVzCiB1dGlsaXRpZXMgZm9yOgogCi0qIGBDb21wb25lbnQgT2JqZWN0IE1vZGVsIDxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vY29tLz5gXyAoQ09NKQorKiBgQ29tcG9uZW50IE9iamVjdCBNb2RlbCA8aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9jb20vPmBfIChDT00pCiAqIFdpbjMyIEFQSSBjYWxscwogKiBSZWdpc3RyeQogKiBFdmVudCBsb2cKLSogYE1pY3Jvc29mdCBGb3VuZGF0aW9uIENsYXNzZXMgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9mZTFjZjcyMSUyOFZTLjgwJTI5LmFzcHg+YF8gKE1GQykKKyogYE1pY3Jvc29mdCBGb3VuZGF0aW9uIENsYXNzZXMgPGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZmUxY2Y3MjElMjhWUy44MCUyOS5hc3B4PmBfIChNRkMpCiAgIHVzZXIgaW50ZXJmYWNlcwogCi1gUHl0aG9uV2luIDxodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA2MDUyNDA0MjQyMi8KK2BQeXRob25XaW4gPGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA2MDUyNDA0MjQyMi8KIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvd2luZG93cy9weXRob253aW4vPmBfIGlzIGEgc2FtcGxlIE1GQyBhcHBsaWNhdGlvbgogc2hpcHBlZCB3aXRoIFB5V2luMzIuICBJdCBpcyBhbiBlbWJlZGRhYmxlIElERSB3aXRoIGEgYnVpbHQtaW4gZGVidWdnZXIuCiAKQEAgLTU1MiwyNSArODMxLDEzIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogSWYgeW91IHdhbnQgdG8gY29tcGlsZSBDUHl0aG9uIHlvdXJzZWxmLCBmaXJzdCB0aGluZyB5b3Ugc2hvdWxkIGRvIGlzIGdldCB0aGUKLWBzb3VyY2UgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvc291cmNlLz5gXy4gWW91IGNhbiBkb3dubG9hZCBlaXRoZXIgdGhlCitgc291cmNlIDxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2Fkcy9zb3VyY2UvPmBfLiBZb3UgY2FuIGRvd25sb2FkIGVpdGhlciB0aGUKIGxhdGVzdCByZWxlYXNlJ3Mgc291cmNlIG9yIGp1c3QgZ3JhYiBhIGZyZXNoIGBjaGVja291dAogPGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL3NldHVwLmh0bWwjZ2V0dGluZy10aGUtc291cmNlLWNvZGU+YF8uCiAKIFRoZSBzb3VyY2UgdHJlZSBjb250YWlucyBhIGJ1aWxkIHNvbHV0aW9uIGFuZCBwcm9qZWN0IGZpbGVzIGZvciBNaWNyb3NvZnQKLVZpc3VhbCBDKyssIHdoaWNoIGlzIHRoZSBjb21waWxlciB1c2VkIHRvIGJ1aWxkIHRoZSBvZmZpY2lhbCBQeXRob24gcmVsZWFzZXMuCi1WaWV3IHRoZSA6ZmlsZTpgcmVhZG1lLnR4dGAgaW4gdGhlaXIgcmVzcGVjdGl2ZSBkaXJlY3RvcmllczoKLQotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBEaXJlY3RvcnkgICAgICAgICAgfCBNU1ZDIHZlcnNpb24gfCBWaXN1YWwgU3R1ZGlvIHZlcnNpb24gfAotKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09KwotfCA6ZmlsZTpgUEMvVlM5LjAvYCAgfCA5LjAgICAgICAgICAgfCAyMDA4ICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6ZmlsZTpgUENidWlsZC9gICAgfCAxMC4wICAgICAgICAgfCAyMDEwICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi1Ob3RlIHRoYXQgYW55IGJ1aWxkIGRpcmVjdG9yaWVzIHdpdGhpbiB0aGUgOmZpbGU6YFBDYCBkaXJlY3RvcnkgYXJlIG5vdAotbmVjZXNzYXJpbHkgZnVsbHkgc3VwcG9ydGVkLiAgVGhlIDpmaWxlOmBQQ2J1aWxkYCBkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGVzCi1mb3IgdGhlIGNvbXBpbGVyIHVzZWQgdG8gYnVpbGQgdGhlIG9mZmljaWFsIHJlbGVhc2UuCitWaXN1YWwgU3R1ZGlvIDIwMTUsIHdoaWNoIGlzIHRoZSBjb21waWxlciB1c2VkIHRvIGJ1aWxkIHRoZSBvZmZpY2lhbCBQeXRob24KK3JlbGVhc2VzLiBUaGVzZSBmaWxlcyBhcmUgaW4gdGhlIDpmaWxlOmBQQ2J1aWxkYCBkaXJlY3RvcnkuCiAKIENoZWNrIDpmaWxlOmBQQ2J1aWxkL3JlYWRtZS50eHRgIGZvciBnZW5lcmFsIGluZm9ybWF0aW9uIG9uIHRoZSBidWlsZCBwcm9jZXNzLgogCkBAIC01ODgsNiArODU1LDgzIEBACiAgICAgICBieSBUcmVudCBBcHRlZCBldCBhbCwgMjAwNwogCiAKK0VtYmVkZGVkIERpc3RyaWJ1dGlvbgorPT09PT09PT09PT09PT09PT09PT09CisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNQorCitUaGUgZW1iZWRkZWQgZGlzdHJpYnV0aW9uIGlzIGEgWklQIGZpbGUgY29udGFpbmluZyBhIG1pbmltYWwgUHl0aG9uIGVudmlyb25tZW50LgorSXQgaXMgaW50ZW5kZWQgZm9yIGFjdGluZyBhcyBwYXJ0IG9mIGFub3RoZXIgYXBwbGljYXRpb24sIHJhdGhlciB0aGFuIGJlaW5nCitkaXJlY3RseSBhY2Nlc3NlZCBieSBlbmQtdXNlcnMuCisKK1doZW4gZXh0cmFjdGVkLCB0aGUgZW1iZWRkZWQgZGlzdHJpYnV0aW9uIGlzIChhbG1vc3QpIGZ1bGx5IGlzb2xhdGVkIGZyb20gdGhlCit1c2VyJ3Mgc3lzdGVtLCBpbmNsdWRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBzeXN0ZW0gcmVnaXN0cnkgc2V0dGluZ3MsIGFuZAoraW5zdGFsbGVkIHBhY2thZ2VzLiBUaGUgc3RhbmRhcmQgbGlicmFyeSBpcyBpbmNsdWRlZCBhcyBwcmUtY29tcGlsZWQgYW5kCitvcHRpbWl6ZWQgYGAucHljYGAgZmlsZXMgaW4gYSBaSVAsIGFuZCBgYHB5dGhvbjMuZGxsYGAsIGBgcHl0aG9uMzUuZGxsYGAsCitgYHB5dGhvbi5leGVgYCBhbmQgYGBweXRob253LmV4ZWBgIGFyZSBhbGwgcHJvdmlkZWQuIFRjbC90ayAoaW5jbHVkaW5nIGFsbAorZGVwZW5kYW50cywgc3VjaCBhcyBJZGxlKSwgcGlwIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gYXJlIG5vdCBpbmNsdWRlZC4KKworLi4gbm90ZTo6CisKKyAgICBUaGUgZW1iZWRkZWQgZGlzdHJpYnV0aW9uIGRvZXMgbm90IGluY2x1ZGUgdGhlIGBNaWNyb3NvZnQgQyBSdW50aW1lCisgICAgPGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vZW4tdXMvZG93bmxvYWQvZGV0YWlscy5hc3B4P2lkPTQ4MTQ1PmBfIGFuZCBpdCBpcworICAgIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVyIHRvIHByb3ZpZGUgdGhpcy4gVGhlCisgICAgcnVudGltZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkIG9uIGEgdXNlcidzIHN5c3RlbSBwcmV2aW91c2x5IG9yCisgICAgYXV0b21hdGljYWxseSB2aWEgV2luZG93cyBVcGRhdGUsIGFuZCBjYW4gYmUgZGV0ZWN0ZWQgYnkgZmluZGluZworICAgIGBgdWNydGJhc2UuZGxsYGAgaW4gdGhlIHN5c3RlbSBkaXJlY3RvcnkuCisKK1RoaXJkLXBhcnR5IHBhY2thZ2VzIHNob3VsZCBiZSBpbnN0YWxsZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGluc3RhbGxlciBhbG9uZ3NpZGUKK3RoZSBlbWJlZGRlZCBkaXN0cmlidXRpb24uIFVzaW5nIHBpcCB0byBtYW5hZ2UgZGVwZW5kZW5jaWVzIGFzIGZvciBhIHJlZ3VsYXIKK1B5dGhvbiBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uLCB0aG91Z2ggd2l0aCBzb21lCitjYXJlIGl0IG1heSBiZSBwb3NzaWJsZSB0byBpbmNsdWRlIGFuZCB1c2UgcGlwIGZvciBhdXRvbWF0aWMgdXBkYXRlcy4gSW4KK2dlbmVyYWwsIHRoaXJkLXBhcnR5IHBhY2thZ2VzIHNob3VsZCBiZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIGFwcGxpY2F0aW9uCisoInZlbmRvcmluZyIpIHNvIHRoYXQgdGhlIGRldmVsb3BlciBjYW4gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBuZXdlcgordmVyc2lvbnMgYmVmb3JlIHByb3ZpZGluZyB1cGRhdGVzIHRvIHVzZXJzLgorCitUaGUgdHdvIHJlY29tbWVuZGVkIHVzZSBjYXNlcyBmb3IgdGhpcyBkaXN0cmlidXRpb24gYXJlIGRlc2NyaWJlZCBiZWxvdy4KKworUHl0aG9uIEFwcGxpY2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gYXBwbGljYXRpb24gd3JpdHRlbiBpbiBQeXRob24gZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVxdWlyZSB1c2VycyB0byBiZSBhd2FyZQorb2YgdGhhdCBmYWN0LiBUaGUgZW1iZWRkZWQgZGlzdHJpYnV0aW9uIG1heSBiZSB1c2VkIGluIHRoaXMgY2FzZSB0byBpbmNsdWRlIGEKK3ByaXZhdGUgdmVyc2lvbiBvZiBQeXRob24gaW4gYW4gaW5zdGFsbCBwYWNrYWdlLiBEZXBlbmRpbmcgb24gaG93IHRyYW5zcGFyZW50IGl0CitzaG91bGQgYmUgKG9yIGNvbnZlcnNlbHksIGhvdyBwcm9mZXNzaW9uYWwgaXQgc2hvdWxkIGFwcGVhciksIHRoZXJlIGFyZSB0d28KK29wdGlvbnMuCisKK1VzaW5nIGEgc3BlY2lhbGl6ZWQgZXhlY3V0YWJsZSBhcyBhIGxhdW5jaGVyIHJlcXVpcmVzIHNvbWUgY29kaW5nLCBidXQgcHJvdmlkZXMKK3RoZSBtb3N0IHRyYW5zcGFyZW50IGV4cGVyaWVuY2UgZm9yIHVzZXJzLiBXaXRoIGEgY3VzdG9taXplZCBsYXVuY2hlciwgdGhlcmUgYXJlCitubyBvYnZpb3VzIGluZGljYXRpb25zIHRoYXQgdGhlIHByb2dyYW0gaXMgcnVubmluZyBvbiBQeXRob246IGljb25zIGNhbiBiZQorY3VzdG9taXplZCwgY29tcGFueSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiBjYW4gYmUgc3BlY2lmaWVkLCBhbmQgZmlsZQorYXNzb2NpYXRpb25zIGJlaGF2ZSBwcm9wZXJseS4gSW4gbW9zdCBjYXNlcywgYSBjdXN0b20gbGF1bmNoZXIgc2hvdWxkIHNpbXBseSBiZQorYWJsZSB0byBjYWxsIGBgUHlfTWFpbmBgIHdpdGggYSBoYXJkLWNvZGVkIGNvbW1hbmQgbGluZS4KKworVGhlIHNpbXBsZXIgYXBwcm9hY2ggaXMgdG8gcHJvdmlkZSBhIGJhdGNoIGZpbGUgb3IgZ2VuZXJhdGVkIHNob3J0Y3V0IHRoYXQKK2RpcmVjdGx5IGNhbGxzIHRoZSBgYHB5dGhvbi5leGVgYCBvciBgYHB5dGhvbncuZXhlYGAgd2l0aCB0aGUgcmVxdWlyZWQKK2NvbW1hbmQtbGluZSBhcmd1bWVudHMuIEluIHRoaXMgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYXBwZWFyIHRvIGJlIFB5dGhvbgorYW5kIG5vdCBpdHMgYWN0dWFsIG5hbWUsIGFuZCB1c2VycyBtYXkgaGF2ZSB0cm91YmxlIGRpc3Rpbmd1aXNoaW5nIGl0IGZyb20gb3RoZXIKK3J1bm5pbmcgUHl0aG9uIHByb2Nlc3NlcyBvciBmaWxlIGFzc29jaWF0aW9ucy4KKworV2l0aCB0aGUgbGF0dGVyIGFwcHJvYWNoLCBwYWNrYWdlcyBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGRpcmVjdG9yaWVzIGFsb25nc2lkZQordGhlIFB5dGhvbiBleGVjdXRhYmxlIHRvIGVuc3VyZSB0aGV5IGFyZSBhdmFpbGFibGUgb24gdGhlIHBhdGguIFdpdGggdGhlCitzcGVjaWFsaXplZCBsYXVuY2hlciwgcGFja2FnZXMgY2FuIGJlIGxvY2F0ZWQgaW4gb3RoZXIgbG9jYXRpb25zIGFzIHRoZXJlIGlzIGFuCitvcHBvcnR1bml0eSB0byBzcGVjaWZ5IHRoZSBzZWFyY2ggcGF0aCBiZWZvcmUgbGF1bmNoaW5nIHRoZSBhcHBsaWNhdGlvbi4KKworRW1iZWRkaW5nIFB5dGhvbgorLS0tLS0tLS0tLS0tLS0tLQorCitBcHBsaWNhdGlvbnMgd3JpdHRlbiBpbiBuYXRpdmUgY29kZSBvZnRlbiByZXF1aXJlIHNvbWUgZm9ybSBvZiBzY3JpcHRpbmcKK2xhbmd1YWdlLCBhbmQgdGhlIGVtYmVkZGVkIFB5dGhvbiBkaXN0cmlidXRpb24gY2FuIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4gSW4KK2dlbmVyYWwsIHRoZSBtYWpvcml0eSBvZiB0aGUgYXBwbGljYXRpb24gaXMgaW4gbmF0aXZlIGNvZGUsIGFuZCBzb21lIHBhcnQgd2lsbAorZWl0aGVyIGludm9rZSBgYHB5dGhvbi5leGVgYCBvciBkaXJlY3RseSB1c2UgYGBweXRob24zLmRsbGBgLiBGb3IgZWl0aGVyIGNhc2UsCitleHRyYWN0aW5nIHRoZSBlbWJlZGRlZCBkaXN0cmlidXRpb24gdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGFwcGxpY2F0aW9uCitpbnN0YWxsYXRpb24gaXMgc3VmZmljaWVudCB0byBwcm92aWRlIGEgbG9hZGFibGUgUHl0aG9uIGludGVycHJldGVyLgorCitBcyB3aXRoIHRoZSBhcHBsaWNhdGlvbiB1c2UsIHBhY2thZ2VzIGNhbiBiZSBpbnN0YWxsZWQgdG8gYW55IGxvY2F0aW9uIGFzIHRoZXJlCitpcyBhbiBvcHBvcnR1bml0eSB0byBzcGVjaWZ5IHNlYXJjaCBwYXRocyBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBpbnRlcnByZXRlci4KK090aGVyd2lzZSwgdGhlcmUgaXMgbm8gZnVuZGFtZW50YWwgZGlmZmVyZW5jZXMgYmV0d2VlbiB1c2luZyB0aGUgZW1iZWRkZWQKK2Rpc3RyaWJ1dGlvbiBhbmQgYSByZWd1bGFyIGluc3RhbGxhdGlvbi4KKwogT3RoZXIgcmVzb3VyY2VzCiA9PT09PT09PT09PT09PT0KIApAQCAtNjAzLDUgKzk0NywzIEBACiAKICAgIDpwZXA6YDM5N2AgLSBQeXRob24gbGF1bmNoZXIgZm9yIFdpbmRvd3MKICAgICAgIFRoZSBwcm9wb3NhbCBmb3IgdGhlIGxhdW5jaGVyIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgotCi0KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjAucnN0IGIvRG9jL3doYXRzbmV3LzIuMC5yc3QKaW5kZXggMTBiYjI5ZS4uNGQ0OWFmMSAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuMC5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuMC5yc3QKQEAgLTYxLDcgKzYxLDcgQEAKIG1hZGUgYXZhaWxhYmxlIGJ5IFNvdXJjZUZvcmdlIGZvciBzdG9yaW5nICBzb3VyY2UgY29kZSwgdHJhY2tpbmcgYnVnIHJlcG9ydHMsCiBhbmQgbWFuYWdpbmcgdGhlIHF1ZXVlIG9mIHBhdGNoIHN1Ym1pc3Npb25zLiAgVG8gcmVwb3J0IGJ1Z3Mgb3Igc3VibWl0IHBhdGNoZXMKIGZvciBQeXRob24gMi4wLCB1c2UgdGhlIGJ1ZyB0cmFja2luZyBhbmQgcGF0Y2ggbWFuYWdlciB0b29scyBhdmFpbGFibGUgZnJvbQotUHl0aG9uJ3MgcHJvamVjdCBwYWdlLCBsb2NhdGVkIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHl0aG9uLy4KK1B5dGhvbidzIHByb2plY3QgcGFnZSwgbG9jYXRlZCBhdCBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9weXRob24vLgogCiBUaGUgbW9zdCBpbXBvcnRhbnQgb2YgdGhlIHNlcnZpY2VzIG5vdyBob3N0ZWQgYXQgU291cmNlRm9yZ2UgaXMgdGhlIFB5dGhvbiBDVlMKIHRyZWUsIHRoZSB2ZXJzaW9uLWNvbnRyb2xsZWQgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgUHl0aG9uLgpAQCAtMTMwLDcgKzEzMCw3IEBACiBSZWFkIHRoZSByZXN0IG9mIFBFUCAxIGZvciB0aGUgZGV0YWlscyBvZiB0aGUgUEVQIGVkaXRvcmlhbCBwcm9jZXNzLCBzdHlsZSwgYW5kCiBmb3JtYXQuICBQRVBzIGFyZSBrZXB0IGluIHRoZSBQeXRob24gQ1ZTIHRyZWUgb24gU291cmNlRm9yZ2UsIHRob3VnaCB0aGV5J3JlIG5vdAogcGFydCBvZiB0aGUgUHl0aG9uIDIuMCBkaXN0cmlidXRpb24sIGFuZCBhcmUgYWxzbyBhdmFpbGFibGUgaW4gSFRNTCBmb3JtIGZyb20KLWh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcGVwcy8uICBBcyBvZiBTZXB0ZW1iZXIgMjAwMCwgdGhlcmUgYXJlIDI1IFBFUFMsIHJhbmdpbmcKK2h0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvLiAgQXMgb2YgU2VwdGVtYmVyIDIwMDAsIHRoZXJlIGFyZSAyNSBQRVBTLCByYW5naW5nCiBmcm9tIFBFUCAyMDEsICJMb2Nrc3RlcCBJdGVyYXRpb24iLCB0byBQRVAgMjI1LCAiRWxlbWVudHdpc2UvT2JqZWN0d2lzZQogT3BlcmF0b3JzIi4KIApAQCAtMzM3LDcgKzMzNyw3IEBACiAgICBbICh4LHkpIGZvciB4IGluIHNlcTEgZm9yIHkgaW4gc2VxMl0KIAogVGhlIGlkZWEgb2YgbGlzdCBjb21wcmVoZW5zaW9ucyBvcmlnaW5hbGx5IGNvbWVzIGZyb20gdGhlIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcKLWxhbmd1YWdlIEhhc2tlbGwgKGh0dHA6Ly93d3cuaGFza2VsbC5vcmcpLiAgR3JlZyBFd2luZyBhcmd1ZWQgbW9zdCBlZmZlY3RpdmVseQorbGFuZ3VhZ2UgSGFza2VsbCAoaHR0cHM6Ly93d3cuaGFza2VsbC5vcmcpLiAgR3JlZyBFd2luZyBhcmd1ZWQgbW9zdCBlZmZlY3RpdmVseQogZm9yIGFkZGluZyB0aGVtIHRvIFB5dGhvbiBhbmQgd3JvdGUgdGhlIGluaXRpYWwgbGlzdCBjb21wcmVoZW5zaW9uIHBhdGNoLCB3aGljaAogd2FzIHRoZW4gZGlzY3Vzc2VkIGZvciBhIHNlZW1pbmdseSBlbmRsZXNzIHRpbWUgb24gdGhlIHB5dGhvbi1kZXYgbWFpbGluZyBsaXN0CiBhbmQga2VwdCB1cC10by1kYXRlIGJ5IFNraXAgTW9udGFuYXJvLgpAQCAtNTA2LDcgKzUwNiw3IEBACiB5b3UnZCB1c2UgdGhlIDpmdW5jOmBhcHBseWAgYnVpbHQtaW4gZnVuY3Rpb246IGBgYXBwbHkoZiwgYXJncywga3cpYGAgY2FsbHMgdGhlCiBmdW5jdGlvbiA6ZnVuYzpgZmAgd2l0aCB0aGUgYXJndW1lbnQgdHVwbGUgKmFyZ3MqIGFuZCB0aGUga2V5d29yZCBhcmd1bWVudHMgaW4KIHRoZSBkaWN0aW9uYXJ5ICprdyouICA6ZnVuYzpgYXBwbHlgICBpcyB0aGUgc2FtZSBpbiAyLjAsIGJ1dCB0aGFua3MgdG8gYSBwYXRjaAotZnJvbSBHcmVnIEV3aW5nLCBgYGYoKmFyZ3MsICoqa3cpYGAgYXMgYSBzaG9ydGVyIGFuZCBjbGVhcmVyIHdheSB0byBhY2hpZXZlIHRoZQorZnJvbSBHcmVnIEV3aW5nLCBgYGYoKmFyZ3MsICoqa3cpYGAgaXMgYSBzaG9ydGVyIGFuZCBjbGVhcmVyIHdheSB0byBhY2hpZXZlIHRoZQogc2FtZSBlZmZlY3QuICBUaGlzIHN5bnRheCBpcyBzeW1tZXRyaWNhbCB3aXRoIHRoZSBzeW50YXggZm9yIGRlZmluaW5nCiBmdW5jdGlvbnM6OgogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi4xLnJzdCBiL0RvYy93aGF0c25ldy8yLjEucnN0CmluZGV4IDZkZTViZjUuLjA2MzY2YjggMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjEucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjEucnN0CkBAIC00NDIsOCArNDQyLDggQEAKICAgIGYuZ3JhbW1hciA9ICJBIDo6PSBCIChDIEQpKiIKIAogVGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBhcyB0aGUgZnVuY3Rpb24ncwotOmF0dHI6YF9fZGljdF9fYC4gVW5saWtlIHRoZSA6YXR0cjpgX19kaWN0X19gIGF0dHJpYnV0ZSBvZiBjbGFzcyBpbnN0YW5jZXMsIGluCi1mdW5jdGlvbnMgeW91IGNhbiBhY3R1YWxseSBhc3NpZ24gYSBuZXcgZGljdGlvbmFyeSB0byA6YXR0cjpgX19kaWN0X19gLCB0aG91Z2gKKzphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYC4gVW5saWtlIHRoZSA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlIG9mIGNsYXNzIGluc3RhbmNlcywgaW4KK2Z1bmN0aW9ucyB5b3UgY2FuIGFjdHVhbGx5IGFzc2lnbiBhIG5ldyBkaWN0aW9uYXJ5IHRvIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCwgdGhvdWdoCiB0aGUgbmV3IHZhbHVlIGlzIHJlc3RyaWN0ZWQgdG8gYSByZWd1bGFyIFB5dGhvbiBkaWN0aW9uYXJ5OyB5b3UgKmNhbid0KiBiZQogdHJpY2t5IGFuZCBzZXQgaXQgdG8gYSA6Y2xhc3M6YFVzZXJEaWN0YCBpbnN0YW5jZSwgb3IgYW55IG90aGVyIHJhbmRvbSBvYmplY3QKIHRoYXQgYmVoYXZlcyBsaWtlIGEgbWFwcGluZy4KQEAgLTU2Miw3ICs1NjIsNyBAQAogdXNpbmcgUHl0aG9uIDIuMSwgc2luY2UgYSBuZXcgcmVsZWFzZSBvZiB0aGUgRGlzdHV0aWxzIHdpbGwgYmUgbWFkZSBmb3IgdXNlcnMgb2YKIGVhcmxpZXIgUHl0aG9uIHZlcnNpb25zLiAgVmVyc2lvbiAxLjAuMiBvZiB0aGUgRGlzdHV0aWxzIGluY2x1ZGVzIHRoZSBjaGFuZ2VzCiBkZXNjcmliZWQgaW4gUEVQIDI0MSwgYXMgd2VsbCBhcyB2YXJpb3VzIGJ1Z2ZpeGVzIGFuZCBlbmhhbmNlbWVudHMuICBJdCB3aWxsIGJlCi1hdmFpbGFibGUgZnJvbSAgdGhlIERpc3R1dGlscyBTSUcgYXQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9zaWdzL2Rpc3R1dGlscy1zaWcvLgorYXZhaWxhYmxlIGZyb20gdGhlIERpc3R1dGlscyBTSUcgYXQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9jb21tdW5pdHkvc2lncy9jdXJyZW50L2Rpc3R1dGlscy1zaWcvLgogCiAKIC4uIHNlZWFsc286OgpAQCAtNzMxLDcgKzczMSw3IEBACiAgICAgICAgICAuLi4KIAogICBGb3IgYSBmdWxsZXIgZGlzY3Vzc2lvbiBvZiB0aGUgbGluZSBJL08gY2hhbmdlcywgc2VlIHRoZSBweXRob24tZGV2IHN1bW1hcnkgZm9yCi0gIEphbnVhcnkgMS0xNSwgMjAwMSBhdCBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9zdW1tYXJ5LzIwMDEtMDEtMS8uCisgIEphbnVhcnkgMS0xNSwgMjAwMSBhdCBodHRwczovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDAxLUphbnVhcnkvLgogCiAqIEEgbmV3IG1ldGhvZCwgOm1ldGg6YHBvcGl0ZW1gLCB3YXMgYWRkZWQgdG8gZGljdGlvbmFyaWVzIHRvIGVuYWJsZQogICBkZXN0cnVjdGl2ZWx5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBjb250ZW50cyBvZiBhIGRpY3Rpb25hcnk7IHRoaXMgY2FuIGJlIGZhc3RlcgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuMi5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi4yLnJzdAppbmRleCBmM2M0YTkxLi40ZThkN2ZhIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi4yLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi4yLnJzdApAQCAtMjQsOCArMjQsOCBAQAogVGhpcyBhcnRpY2xlIGRvZXNuJ3QgYXR0ZW1wdCB0byBwcm92aWRlIGEgY29tcGxldGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgbmV3CiBmZWF0dXJlcywgYnV0IGluc3RlYWQgcHJvdmlkZXMgYSBjb252ZW5pZW50IG92ZXJ2aWV3LiAgRm9yIGZ1bGwgZGV0YWlscywgeW91CiBzaG91bGQgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAyLjIsIHN1Y2ggYXMgdGhlIGBQeXRob24gTGlicmFyeQotUmVmZXJlbmNlIDxodHRwczovL3d3dy5weXRob24ub3JnL2RvYy8yLjIvbGliL2xpYi5odG1sPmBfIGFuZCB0aGUgYFB5dGhvbgotUmVmZXJlbmNlIE1hbnVhbCA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4yL3JlZi9yZWYuaHRtbD5gXy4gIElmIHlvdSB3YW50IHRvCitSZWZlcmVuY2UgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIuMi9saWIvbGliLmh0bWw+YF8gYW5kIHRoZSBgUHl0aG9uCitSZWZlcmVuY2UgTWFudWFsIDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8yLjIvcmVmL3JlZi5odG1sPmBfLiAgSWYgeW91IHdhbnQgdG8KIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGFuZCBkZXNpZ24gcmF0aW9uYWxlIGZvciBhIGNoYW5nZSwgcmVmZXIKIHRvIHRoZSBQRVAgZm9yIGEgcGFydGljdWxhciBuZXcgZmVhdHVyZS4KIApAQCAtMTU3LDcgKzE1Nyw3IEBACiBjb252ZW50aW9ucywgc3VjaCBhcyBkZWZpbmluZyA6YXR0cjpgX19tZW1iZXJzX19gIGFuZCA6YXR0cjpgX19tZXRob2RzX19gCiBhdHRyaWJ1dGVzIHRoYXQgd2VyZSBsaXN0cyBvZiBuYW1lcywgYnV0IG9mdGVuIHRoZSBhdXRob3Igb2YgYW4gZXh0ZW5zaW9uIHR5cGUKIG9yIGEgY2xhc3Mgd291bGRuJ3QgYm90aGVyIHRvIGRlZmluZSB0aGVtLiAgWW91IGNvdWxkIGZhbGwgYmFjayBvbiBpbnNwZWN0aW5nCi10aGUgOmF0dHI6YF9fZGljdF9fYCBvZiBhbiBvYmplY3QsIGJ1dCB3aGVuIGNsYXNzIGluaGVyaXRhbmNlIG9yIGFuIGFyYml0cmFyeQordGhlIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBvZiBhbiBvYmplY3QsIGJ1dCB3aGVuIGNsYXNzIGluaGVyaXRhbmNlIG9yIGFuIGFyYml0cmFyeQogOm1ldGg6YF9fZ2V0YXR0cl9fYCBob29rIHdlcmUgaW4gdXNlIHRoaXMgY291bGQgc3RpbGwgYmUgaW5hY2N1cmF0ZS4KIAogVGhlIG9uZSBiaWcgaWRlYSB1bmRlcmx5aW5nIHRoZSBuZXcgY2xhc3MgbW9kZWwgaXMgdGhhdCBhbiBBUEkgZm9yIGRlc2NyaWJpbmcKQEAgLTE2OSw3ICsxNjksNyBAQAogQXR0cmlidXRlIGRlc2NyaXB0b3JzIGFyZSBvYmplY3RzIHRoYXQgbGl2ZSBpbnNpZGUgY2xhc3Mgb2JqZWN0cywgYW5kIGhhdmUgYSBmZXcKIGF0dHJpYnV0ZXMgb2YgdGhlaXIgb3duOgogCi0qIDphdHRyOmBfX25hbWVfX2AgaXMgdGhlIGF0dHJpYnV0ZSdzIG5hbWUuCisqIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgaXMgdGhlIGF0dHJpYnV0ZSdzIG5hbWUuCiAKICogOmF0dHI6YF9fZG9jX19gIGlzIHRoZSBhdHRyaWJ1dGUncyBkb2NzdHJpbmcuCiAKQEAgLTMyOSw3ICszMjksNyBAQAogdG8gdHJhcCBhdHRyaWJ1dGUgcmVmZXJlbmNlcy4gIFdyaXRpbmcgYSA6bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZCBpcwogY29tcGxpY2F0ZWQgYmVjYXVzZSB0byBhdm9pZCByZWN1cnNpb24geW91IGNhbid0IHVzZSByZWd1bGFyIGF0dHJpYnV0ZSBhY2Nlc3NlcwogaW5zaWRlIHRoZW0sIGFuZCBpbnN0ZWFkIGhhdmUgdG8gbWVzcyBhcm91bmQgd2l0aCB0aGUgY29udGVudHMgb2YKLTphdHRyOmBfX2RpY3RfX2AuIDptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kcyBhbHNvIGVuZCB1cCBiZWluZyBjYWxsZWQgYnkgUHl0aG9uCis6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AuIDptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kcyBhbHNvIGVuZCB1cCBiZWluZyBjYWxsZWQgYnkgUHl0aG9uCiB3aGVuIGl0IGNoZWNrcyBmb3Igb3RoZXIgbWV0aG9kcyBzdWNoIGFzIDptZXRoOmBfX3JlcHJfX2Agb3IgOm1ldGg6YF9fY29lcmNlX19gLAogYW5kIHNvIGhhdmUgdG8gYmUgd3JpdHRlbiB3aXRoIHRoaXMgaW4gbWluZC4gRmluYWxseSwgY2FsbGluZyBhIGZ1bmN0aW9uIG9uCiBldmVyeSBhdHRyaWJ1dGUgYWNjZXNzIHJlc3VsdHMgaW4gYSBzaXphYmxlIHBlcmZvcm1hbmNlIGxvc3MuCkBAIC0zNTcsMTUgKzM1NywxNSBAQAogVGhhdCBpcyBjZXJ0YWlubHkgY2xlYXJlciBhbmQgZWFzaWVyIHRvIHdyaXRlIHRoYW4gYSBwYWlyIG9mCiA6bWV0aDpgX19nZXRhdHRyX19gLzptZXRoOmBfX3NldGF0dHJfX2AgbWV0aG9kcyB0aGF0IGNoZWNrIGZvciB0aGUgOmF0dHI6YHNpemVgCiBhdHRyaWJ1dGUgYW5kIGhhbmRsZSBpdCBzcGVjaWFsbHkgd2hpbGUgcmV0cmlldmluZyBhbGwgb3RoZXIgYXR0cmlidXRlcyBmcm9tIHRoZQotaW5zdGFuY2UncyA6YXR0cjpgX19kaWN0X19gLiAgQWNjZXNzZXMgdG8gOmF0dHI6YHNpemVgIGFyZSBhbHNvIHRoZSBvbmx5IG9uZXMKK2luc3RhbmNlJ3MgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gLiAgQWNjZXNzZXMgdG8gOmF0dHI6YHNpemVgIGFyZSBhbHNvIHRoZSBvbmx5IG9uZXMKIHdoaWNoIGhhdmUgdG8gcGVyZm9ybSB0aGUgd29yayBvZiBjYWxsaW5nIGEgZnVuY3Rpb24sIHNvIHJlZmVyZW5jZXMgdG8gb3RoZXIKIGF0dHJpYnV0ZXMgcnVuIGF0IHRoZWlyIHVzdWFsIHNwZWVkLgogCiBGaW5hbGx5LCBpdCdzIHBvc3NpYmxlIHRvIGNvbnN0cmFpbiB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlCi1yZWZlcmVuY2VkIG9uIGFuIG9iamVjdCB1c2luZyB0aGUgbmV3IDphdHRyOmBfX3Nsb3RzX19gIGNsYXNzIGF0dHJpYnV0ZS4gUHl0aG9uCityZWZlcmVuY2VkIG9uIGFuIG9iamVjdCB1c2luZyB0aGUgbmV3IDphdHRyOmB+b2JqZWN0Ll9fc2xvdHNfX2AgY2xhc3MgYXR0cmlidXRlLiBQeXRob24KIG9iamVjdHMgYXJlIHVzdWFsbHkgdmVyeSBkeW5hbWljOyBhdCBhbnkgdGltZSBpdCdzIHBvc3NpYmxlIHRvIGRlZmluZSBhIG5ldwogYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlIGJ5IGp1c3QgZG9pbmcgYGBvYmoubmV3X2F0dHI9MWBgLiAgIEEgbmV3LXN0eWxlIGNsYXNzCi1jYW4gZGVmaW5lIGEgY2xhc3MgYXR0cmlidXRlIG5hbWVkIDphdHRyOmBfX3Nsb3RzX19gIHRvIGxpbWl0IHRoZSBsZWdhbAorY2FuIGRlZmluZSBhIGNsYXNzIGF0dHJpYnV0ZSBuYW1lZCA6YXR0cjpgfm9iamVjdC5fX3Nsb3RzX19gIHRvIGxpbWl0IHRoZSBsZWdhbAogYXR0cmlidXRlcyAgdG8gYSBwYXJ0aWN1bGFyIHNldCBvZiBuYW1lcy4gIEFuIGV4YW1wbGUgd2lsbCBtYWtlIHRoaXMgY2xlYXI6OgogCiAgICA+Pj4gY2xhc3MgQyhvYmplY3QpOgpAQCAtMzgzLDcgKzM4Myw3IEBACiAgICBBdHRyaWJ1dGVFcnJvcjogJ0MnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICduZXdhdHRyJwogCiBOb3RlIGhvdyB5b3UgZ2V0IGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBvbiB0aGUgYXR0ZW1wdCB0byBhc3NpZ24gdG8gYW4KLWF0dHJpYnV0ZSBub3QgbGlzdGVkIGluIDphdHRyOmBfX3Nsb3RzX19gLgorYXR0cmlidXRlIG5vdCBsaXN0ZWQgaW4gOmF0dHI6YH5vYmplY3QuX19zbG90c19fYC4KIAogCiAuLiBfc2VjdC1yZWxsaW5rczoKQEAgLTM5NSw3ICszOTUsNyBAQAogb2YgYW4gZXhwbGFuYXRpb24gdG8gc3RhcnQgeW91IHByb2dyYW1taW5nLCBidXQgbWFueSBkZXRhaWxzIGhhdmUgYmVlbgogc2ltcGxpZmllZCBvciBpZ25vcmVkLiAgV2hlcmUgc2hvdWxkIHlvdSBnbyB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmU/CiAKLWh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvMi4yL2Rlc2NyaW50cm8uaHRtbCBpcyBhIGxlbmd0aHkgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvCitodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXYvaG93dG8vZGVzY3JpcHRvci5odG1sIGlzIGEgbGVuZ3RoeSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8KIHRoZSBkZXNjcmlwdG9yIGZlYXR1cmVzLCB3cml0dGVuIGJ5IEd1aWRvIHZhbiBSb3NzdW0uIElmIG15IGRlc2NyaXB0aW9uIGhhcwogd2hldHRlZCB5b3VyIGFwcGV0aXRlLCBnbyByZWFkIHRoaXMgdHV0b3JpYWwgbmV4dCwgYmVjYXVzZSBpdCBnb2VzIGludG8gbXVjaAogbW9yZSBkZXRhaWwgYWJvdXQgdGhlIG5ldyBmZWF0dXJlcyB3aGlsZSBzdGlsbCByZW1haW5pbmcgcXVpdGUgZWFzeSB0byByZWFkLgpAQCAtNjMyLDEwICs2MzIsMTAgQEAKIGV2ZXJ5IHNxdWFyZSBvZiBhbiAkTnhOJCBjaGVzc2JvYXJkIHdpdGhvdXQgdmlzaXRpbmcgYW55IHNxdWFyZSB0d2ljZSkuCiAKIFRoZSBpZGVhIG9mIGdlbmVyYXRvcnMgY29tZXMgZnJvbSBvdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMsIGVzcGVjaWFsbHkgSWNvbgotKGh0dHA6Ly93d3cuY3MuYXJpem9uYS5lZHUvaWNvbi8pLCB3aGVyZSB0aGUgaWRlYSBvZiBnZW5lcmF0b3JzIGlzIGNlbnRyYWwuICBJbgorKGh0dHBzOi8vd3d3LmNzLmFyaXpvbmEuZWR1L2ljb24vKSwgd2hlcmUgdGhlIGlkZWEgb2YgZ2VuZXJhdG9ycyBpcyBjZW50cmFsLiAgSW4KIEljb24sIGV2ZXJ5IGV4cHJlc3Npb24gYW5kIGZ1bmN0aW9uIGNhbGwgYmVoYXZlcyBsaWtlIGEgZ2VuZXJhdG9yLiAgT25lIGV4YW1wbGUKIGZyb20gIkFuIE92ZXJ2aWV3IG9mIHRoZSBJY29uIFByb2dyYW1taW5nIExhbmd1YWdlIiBhdAotaHR0cDovL3d3dy5jcy5hcml6b25hLmVkdS9pY29uL2RvY3MvaXBkMjY2Lmh0bSBnaXZlcyBhbiBpZGVhIG9mIHdoYXQgdGhpcyBsb29rcworaHR0cHM6Ly93d3cuY3MuYXJpem9uYS5lZHUvaWNvbi9kb2NzL2lwZDI2Ni5odG0gZ2l2ZXMgYW4gaWRlYSBvZiB3aGF0IHRoaXMgbG9va3MKIGxpa2U6OgogCiAgICBzZW50ZW5jZSA6PSAiU3RvcmUgaXQgaW4gdGhlIG5laWdoYm9yaW5nIGhhcmJvciIKQEAgLTcyMCw3ICs3MjAsNyBAQAogCiAoVGhlIGNvbnRyb3ZlcnN5IGlzIG92ZXIgd2hldGhlciB0aGlzIGlzICpyZWFsbHkqIGEgZGVzaWduIGZsYXcsIGFuZCB3aGV0aGVyCiBpdCdzIHdvcnRoIGJyZWFraW5nIGV4aXN0aW5nIGNvZGUgdG8gZml4IHRoaXMuICBJdCdzIGNhdXNlZCBlbmRsZXNzIGRpc2N1c3Npb25zCi1vbiBweXRob24tZGV2LCBhbmQgaW4gSnVseSAyMDAxIGVydXB0ZWQgaW50byBhbiBzdG9ybSBvZiBhY2lkbHkgc2FyY2FzdGljCitvbiBweXRob24tZGV2LCBhbmQgaW4gSnVseSAyMDAxIGVydXB0ZWQgaW50byBhIHN0b3JtIG9mIGFjaWRseSBzYXJjYXN0aWMKIHBvc3RpbmdzIG9uIDpuZXdzZ3JvdXA6YGNvbXAubGFuZy5weXRob25gLiBJIHdvbid0IGFyZ3VlIGZvciBlaXRoZXIgc2lkZSBoZXJlCiBhbmQgd2lsbCBzdGljayB0byBkZXNjcmliaW5nIHdoYXQncyAgaW1wbGVtZW50ZWQgaW4gMi4yLiAgUmVhZCA6cGVwOmAyMzhgIGZvciBhCiBzdW1tYXJ5IG9mIGFyZ3VtZW50cyBhbmQgY291bnRlci1hcmd1bWVudHMuKQpAQCAtNzU4LDcgKzc1OCw3IEBACiAgIG9wZXJhdG9ycy4KIAogKiBQeXRob24gMi4yIHN1cHBvcnRzIHNvbWUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBmb3IgdGVzdGluZyB3aGV0aGVyIGNvZGUgd2lsbAotICB3b3JrcyB3aXRoIHRoZSBjaGFuZ2VkIGRpdmlzaW9uIHNlbWFudGljcy4gIFJ1bm5pbmcgcHl0aG9uIHdpdGggOm9wdGlvbjpgLVEKKyAgd29yayB3aXRoIHRoZSBjaGFuZ2VkIGRpdmlzaW9uIHNlbWFudGljcy4gIFJ1bm5pbmcgcHl0aG9uIHdpdGggOm9wdGlvbjpgLVEKICAgd2FybmAgd2lsbCBjYXVzZSBhIHdhcm5pbmcgdG8gYmUgaXNzdWVkIHdoZW5ldmVyIGRpdmlzaW9uIGlzIGFwcGxpZWQgdG8gdHdvCiAgIGludGVnZXJzLiAgWW91IGNhbiB1c2UgdGhpcyB0byBmaW5kIGNvZGUgdGhhdCdzIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UgYW5kIGZpeAogICBpdC4gIEJ5IGRlZmF1bHQsIFB5dGhvbiAyLjIgd2lsbCBzaW1wbHkgcGVyZm9ybSBjbGFzc2ljIGRpdmlzaW9uIHdpdGhvdXQgYQpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuMy5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi4zLnJzdAppbmRleCA5ZDk5MDc0Li5lYmRhZTY5IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi4zLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi4zLnJzdApAQCAtMjE4LDEwICsyMTgsMTAgQEAKIGV2ZXJ5IHNxdWFyZSBvZiBhbiAkTnhOJCBjaGVzc2JvYXJkIHdpdGhvdXQgdmlzaXRpbmcgYW55IHNxdWFyZSB0d2ljZSkuCiAKIFRoZSBpZGVhIG9mIGdlbmVyYXRvcnMgY29tZXMgZnJvbSBvdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMsIGVzcGVjaWFsbHkgSWNvbgotKGh0dHA6Ly93d3cuY3MuYXJpem9uYS5lZHUvaWNvbi8pLCB3aGVyZSB0aGUgaWRlYSBvZiBnZW5lcmF0b3JzIGlzIGNlbnRyYWwuICBJbgorKGh0dHBzOi8vd3d3LmNzLmFyaXpvbmEuZWR1L2ljb24vKSwgd2hlcmUgdGhlIGlkZWEgb2YgZ2VuZXJhdG9ycyBpcyBjZW50cmFsLiAgSW4KIEljb24sIGV2ZXJ5IGV4cHJlc3Npb24gYW5kIGZ1bmN0aW9uIGNhbGwgYmVoYXZlcyBsaWtlIGEgZ2VuZXJhdG9yLiAgT25lIGV4YW1wbGUKIGZyb20gIkFuIE92ZXJ2aWV3IG9mIHRoZSBJY29uIFByb2dyYW1taW5nIExhbmd1YWdlIiBhdAotaHR0cDovL3d3dy5jcy5hcml6b25hLmVkdS9pY29uL2RvY3MvaXBkMjY2Lmh0bSBnaXZlcyBhbiBpZGVhIG9mIHdoYXQgdGhpcyBsb29rcworaHR0cHM6Ly93d3cuY3MuYXJpem9uYS5lZHUvaWNvbi9kb2NzL2lwZDI2Ni5odG0gZ2l2ZXMgYW4gaWRlYSBvZiB3aGF0IHRoaXMgbG9va3MKIGxpa2U6OgogCiAgICBzZW50ZW5jZSA6PSAiU3RvcmUgaXQgaW4gdGhlIG5laWdoYm9yaW5nIGhhcmJvciIKQEAgLTI5MSw3ICsyOTEsOSBAQAogVGhlIG5ldyA6bW9kOmB6aXBpbXBvcnRgIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIGltcG9ydGluZyBtb2R1bGVzIGZyb20gYSBaSVAtCiBmb3JtYXQgYXJjaGl2ZS4gIFlvdSBkb24ndCBuZWVkIHRvIGltcG9ydCB0aGUgbW9kdWxlIGV4cGxpY2l0bHk7IGl0IHdpbGwgYmUKIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQgaWYgYSBaSVAgYXJjaGl2ZSdzIGZpbGVuYW1lIGlzIGFkZGVkIHRvIGBgc3lzLnBhdGhgYC4KLUZvciBleGFtcGxlOjoKK0ZvciBleGFtcGxlOgorCisuLiBjb2RlLWJsb2NrOjogc2hlbGwtc2Vzc2lvbgogCiAgICBhbWtAbnltYW46fi9zcmMvcHl0aG9uJCB1bnppcCAtbCAvdG1wL2V4YW1wbGUuemlwCiAgICBBcmNoaXZlOiAgL3RtcC9leGFtcGxlLnppcApAQCAtMTA1Nyw3ICsxMDU5LDcgQEAKICogQSBuZXcgd2FybmluZywgOmV4YzpgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ2Agd2FzIGFkZGVkIHRvIGluZGljYXRlIGZlYXR1cmVzCiAgIHdoaWNoIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXByZWNhdGVkLiAgVGhlIHdhcm5pbmcgd2lsbCAqbm90KiBiZSBwcmludGVkCiAgIGJ5IGRlZmF1bHQuICBUbyBjaGVjayBmb3IgdXNlIG9mIGZlYXR1cmVzIHRoYXQgd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUsCi0gIHN1cHBseSA6b3B0aW9uOmAtV2Fsd2F5czo6UGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZzo6YCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yCisgIHN1cHBseSA6b3B0aW9uOmAtV2Fsd2F5czo6UGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZzo6IDwtVz5gIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IKICAgdXNlIDpmdW5jOmB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5nc2AuCiAKICogVGhlIHByb2Nlc3Mgb2YgZGVwcmVjYXRpbmcgc3RyaW5nLWJhc2VkIGV4Y2VwdGlvbnMsIGFzIGluIGBgcmFpc2UgIkVycm9yCkBAIC0xMDgwLDkgKzEwODIsOSBAQAogICBoaWVyYXJjaHkuICBDbGFzc2ljIGNsYXNzZXMgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuICBQeXRob24gMi4yCiAgIG9yaWdpbmFsbHkgdXNlZCBhIHRvcG9sb2dpY2FsIHNvcnQgb2YgYSBjbGFzcydzIGFuY2VzdG9ycywgYnV0IDIuMyBub3cgdXNlcyB0aGUKICAgQzMgYWxnb3JpdGhtIGFzIGRlc2NyaWJlZCBpbiB0aGUgcGFwZXIgYCJBIE1vbm90b25pYyBTdXBlcmNsYXNzIExpbmVhcml6YXRpb24KLSAgZm9yIER5bGFuIiA8aHR0cDovL3d3dy53ZWJjb20uY29tL2hhYWhyL2R5bGFuL2xpbmVhcml6YXRpb24tb29wc2xhOTYuaHRtbD5gXy4gVG8KKyAgZm9yIER5bGFuIiA8aHR0cDovL2NpdGVzZWVyeC5pc3QucHN1LmVkdS92aWV3ZG9jL3N1bW1hcnk/ZG9pPTEwLjEuMS4xOS4zOTEwPmBfLiBUbwogICB1bmRlcnN0YW5kIHRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGNoYW5nZSwgIHJlYWQgTWljaGVsZSBTaW1pb25hdG8ncyBhcnRpY2xlCi0gIGAiUHl0aG9uIDIuMyBNZXRob2QgUmVzb2x1dGlvbiBPcmRlciIgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvMi4zL21yby5odG1sPmBfLCBvcgorICBgIlB5dGhvbiAyLjMgTWV0aG9kIFJlc29sdXRpb24gT3JkZXIiIDxodHRwOi8vd3d3LnBoeWFzdC5waXR0LmVkdS9+bWljaGVsZXMvbXJvLmh0bWw+YF8sIG9yCiAgIHJlYWQgdGhlIHRocmVhZCBvbiBweXRob24tZGV2IHN0YXJ0aW5nIHdpdGggdGhlIG1lc3NhZ2UgYXQKICAgaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwMi1PY3RvYmVyLzAyOTAzNS5odG1sLiBTYW11ZWxlCiAgIFBlZHJvbmkgZmlyc3QgcG9pbnRlZCBvdXQgdGhlIHByb2JsZW0gYW5kIGFsc28gaW1wbGVtZW50ZWQgdGhlIGZpeCBieSBjb2RpbmcgdGhlCkBAIC0xMTExLDEwICsxMTEzLDEwIEBACiAgICAgIDx0eXBlICdfc29ja2V0LnNvY2tldCc+CiAKICogT25lIG9mIHRoZSBub3RlZCBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuIG9sZC0gYW5kIG5ldy1zdHlsZSBjbGFzc2VzIGhhcyBiZWVuCi0gIHJlbW92ZWQ6IHlvdSBjYW4gbm93IGFzc2lnbiB0byB0aGUgOmF0dHI6YF9fbmFtZV9fYCBhbmQgOmF0dHI6YF9fYmFzZXNfX2AKKyAgcmVtb3ZlZDogeW91IGNhbiBub3cgYXNzaWduIHRvIHRoZSA6YXR0cjpgfmRlZmluaXRpb24uX19uYW1lX19gIGFuZCA6YXR0cjpgfmNsYXNzLl9fYmFzZXNfX2AKICAgYXR0cmlidXRlcyBvZiBuZXctc3R5bGUgY2xhc3Nlcy4gIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9ucyBvbiB3aGF0IGNhbiBiZQotICBhc3NpZ25lZCB0byA6YXR0cjpgX19iYXNlc19fYCBhbG9uZyB0aGUgbGluZXMgb2YgdGhvc2UgcmVsYXRpbmcgdG8gYXNzaWduaW5nIHRvCi0gIGFuIGluc3RhbmNlJ3MgOmF0dHI6YF9fY2xhc3NfX2AgYXR0cmlidXRlLgorICBhc3NpZ25lZCB0byA6YXR0cjpgfmNsYXNzLl9fYmFzZXNfX2AgYWxvbmcgdGhlIGxpbmVzIG9mIHRob3NlIHJlbGF0aW5nIHRvIGFzc2lnbmluZyB0bworICBhbiBpbnN0YW5jZSdzIDphdHRyOmB+aW5zdGFuY2UuX19jbGFzc19fYCBhdHRyaWJ1dGUuCiAKIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTMwNiw3ICsxMzA4LDcgQEAKICAgcGFydGlhbGx5IHNvcnRlZCBvcmRlciBzdWNoIHRoYXQsIGZvciBldmVyeSBpbmRleCAqayosIGBgaGVhcFtrXSA8PQogICBoZWFwWzIqaysxXWBgIGFuZCBgYGhlYXBba10gPD0gaGVhcFsyKmsrMl1gYC4gIFRoaXMgbWFrZXMgaXQgcXVpY2sgdG8gcmVtb3ZlIHRoZQogICBzbWFsbGVzdCBpdGVtLCBhbmQgaW5zZXJ0aW5nIGEgbmV3IGl0ZW0gd2hpbGUgbWFpbnRhaW5pbmcgdGhlIGhlYXAgcHJvcGVydHkgaXMKLSAgTyhsZyBuKS4gIChTZWUgaHR0cDovL3d3dy5uaXN0Lmdvdi9kYWRzL0hUTUwvcHJpb3JpdHlxdWUuaHRtbCBmb3IgbW9yZQorICBPKGxnIG4pLiAgKFNlZSBodHRwczovL3hsaW51eC5uaXN0Lmdvdi9kYWRzLy9IVE1ML3ByaW9yaXR5cXVlLmh0bWwgZm9yIG1vcmUKICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByaW9yaXR5IHF1ZXVlIGRhdGEgc3RydWN0dXJlLikKIAogICBUaGUgOm1vZDpgaGVhcHFgIG1vZHVsZSBwcm92aWRlcyA6ZnVuYzpgaGVhcHB1c2hgIGFuZCA6ZnVuYzpgaGVhcHBvcGAgZnVuY3Rpb25zCkBAIC0xNzM0LDcgKzE3MzYsNyBAQAogVGhlIDptb2Q6YGdldG9wdGAgbW9kdWxlIHByb3ZpZGVzIHNpbXBsZSBwYXJzaW5nIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuICBUaGUKIG5ldyA6bW9kOmBvcHRwYXJzZWAgbW9kdWxlIChvcmlnaW5hbGx5IG5hbWVkIE9wdGlrKSBwcm92aWRlcyBtb3JlIGVsYWJvcmF0ZQogY29tbWFuZC1saW5lIHBhcnNpbmcgdGhhdCBmb2xsb3dzIHRoZSBVbml4IGNvbnZlbnRpb25zLCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMKLXRoZSBvdXRwdXQgZm9yIDpvcHRpb246YC0taGVscGAsIGFuZCBjYW4gcGVyZm9ybSBkaWZmZXJlbnQgYWN0aW9ucyBmb3IgZGlmZmVyZW50Cit0aGUgb3V0cHV0IGZvciA6b3B0aW9uOmAhLS1oZWxwYCwgYW5kIGNhbiBwZXJmb3JtIGRpZmZlcmVudCBhY3Rpb25zIGZvciBkaWZmZXJlbnQKIG9wdGlvbnMuCiAKIFlvdSBzdGFydCBieSBjcmVhdGluZyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YE9wdGlvblBhcnNlcmAgYW5kIHRlbGxpbmcgaXQgd2hhdApAQCAtMTc2MSw3ICsxNzYzLDkgQEAKIHN0cmluZ3MgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KIAogSW52b2tpbmcgdGhlIHNjcmlwdCB3aXRoIHRoZSB2YXJpb3VzIGFyZ3VtZW50cyBub3cgd29ya3MgYXMgeW91J2QgZXhwZWN0IGl0IHRvLgotTm90ZSB0aGF0IHRoZSBsZW5ndGggYXJndW1lbnQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlci4gOjoKK05vdGUgdGhhdCB0aGUgbGVuZ3RoIGFyZ3VtZW50IGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGludGVnZXIuCisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICQgLi9weXRob24gb3B0LnB5IC1pIGRhdGEgYXJnMQogICAgPFZhbHVlcyBhdCAweDQwMGNhZDRjOiB7J2lucHV0JzogJ2RhdGEnLCAnbGVuZ3RoJzogTm9uZX0+CkBAIC0xNzcxLDcgKzE3NzUsOSBAQAogICAgW10KICAgICQKIAotVGhlIGhlbHAgbWVzc2FnZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmb3IgeW91OjoKK1RoZSBoZWxwIG1lc3NhZ2UgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZm9yIHlvdToKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgJCAuL3B5dGhvbiBvcHQucHkgLS1oZWxwCiAgICB1c2FnZTogb3B0LnB5IFtvcHRpb25zXQpAQCAtMTg1OCw3ICsxODY0LDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGh0dHBzOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vdHJ1bmsvT2JqZWN0cy9vYm1hbGxvYy5jCisgICBodHRwczovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlL2RlZmF1bHQvT2JqZWN0cy9vYm1hbGxvYy5jCiAgICAgICBGb3IgdGhlIGZ1bGwgZGV0YWlscyBvZiB0aGUgcHltYWxsb2MgaW1wbGVtZW50YXRpb24sIHNlZSB0aGUgY29tbWVudHMgYXQKICAgICAgIHRoZSB0b3Agb2YgdGhlIGZpbGUgOmZpbGU6YE9iamVjdHMvb2JtYWxsb2MuY2AgaW4gdGhlIFB5dGhvbiBzb3VyY2UgY29kZS4KICAgICAgIFRoZSBhYm92ZSBsaW5rIHBvaW50cyB0byB0aGUgZmlsZSB3aXRoaW4gdGhlIHB5dGhvbi5vcmcgU1ZOIGJyb3dzZXIuCkBAIC0xOTIwLDcgKzE5MjYsNyBAQAogCiAqIElmIHlvdSBkeW5hbWljYWxseSBhbGxvY2F0ZSB0eXBlIG9iamVjdHMgaW4geW91ciBleHRlbnNpb24sIHlvdSBzaG91bGQgYmUKICAgYXdhcmUgb2YgYSBjaGFuZ2UgaW4gdGhlIHJ1bGVzIHJlbGF0aW5nIHRvIHRoZSA6YXR0cjpgX19tb2R1bGVfX2AgYW5kCi0gIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcy4gIEluIHN1bW1hcnksIHlvdSB3aWxsIHdhbnQgdG8gZW5zdXJlIHRoZSB0eXBlJ3MKKyAgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBhdHRyaWJ1dGVzLiAgSW4gc3VtbWFyeSwgeW91IHdpbGwgd2FudCB0byBlbnN1cmUgdGhlIHR5cGUncwogICBkaWN0aW9uYXJ5IGNvbnRhaW5zIGEgYGAnX19tb2R1bGVfXydgYCBrZXk7IG1ha2luZyB0aGUgbW9kdWxlIG5hbWUgdGhlIHBhcnQgb2YKICAgdGhlIHR5cGUgbmFtZSBsZWFkaW5nIHVwIHRvIHRoZSBmaW5hbCBwZXJpb2Qgd2lsbCBubyBsb25nZXIgaGF2ZSB0aGUgZGVzaXJlZAogICBlZmZlY3QuICBGb3IgbW9yZSBkZXRhaWwsIHJlYWQgdGhlIEFQSSByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbiBvciB0aGUgIHNvdXJjZS4KQEAgLTE5NDksNyArMTk1NSw3IEBACiBzb3VyY2UgZGlzdHJpYnV0aW9uLCB3ZXJlIHVwZGF0ZWQgZm9yIDIuMy4gIChDb250cmlidXRlZCBieSBTZWFuIFJlaWZzY2huZWlkZXIuKQogCiBPdGhlciBuZXcgcGxhdGZvcm1zIG5vdyBzdXBwb3J0ZWQgYnkgUHl0aG9uIGluY2x1ZGUgQXRoZU9TCi0oaHR0cDovL3d3dy5hdGhlb3MuY3gvKSwgR05VL0h1cmQsIGFuZCBPcGVuVk1TLgorKGh0dHA6Ly9hdGhlb3MuY3gvKSwgR05VL0h1cmQsIGFuZCBPcGVuVk1TLgogCiAuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTE5NzMsNyArMTk3OSw3IEBACiAgIHRoZSBQeXRob24gcHJvZ3JhbSBhcyBwYXJ0IG9mIGl0cyBleGVjdXRpb24uCiAKICogVGhlIDpmaWxlOmByZWdydGVzdC5weWAgc2NyaXB0IG5vdyBwcm92aWRlcyBhIHdheSB0byBhbGxvdyAiYWxsIHJlc291cmNlcwotICBleGNlcHQgKmZvbyouIiAgQSByZXNvdXJjZSBuYW1lIHBhc3NlZCB0byB0aGUgOm9wdGlvbjpgLXVgIG9wdGlvbiBjYW4gbm93IGJlCisgIGV4Y2VwdCAqZm9vKi4iICBBIHJlc291cmNlIG5hbWUgcGFzc2VkIHRvIHRoZSA6b3B0aW9uOmAhLXVgIG9wdGlvbiBjYW4gbm93IGJlCiAgIHByZWZpeGVkIHdpdGggYSBoeXBoZW4gKGBgJy0nYGApIHRvIG1lYW4gInJlbW92ZSB0aGlzIHJlc291cmNlLiIgIEZvciBleGFtcGxlLAogICB0aGUgb3B0aW9uICdgYC11YWxsLC1ic2RkYmBgJyBjb3VsZCBiZSB1c2VkIHRvIGVuYWJsZSB0aGUgdXNlIG9mIGFsbCByZXNvdXJjZXMKICAgZXhjZXB0IGBgYnNkZGJgYC4KQEAgLTIwNzgsNCArMjA4NCwzIEBACiBNYWNJbnR5cmUsIExhbG8gTWFydGlucywgQ2hhZCBOZXR6ZXIsIEd1c3Rhdm8gTmllbWV5ZXIsIE5lYWwgTm9yd2l0eiwgSGFucwogTm93YWssIENocmlzIFJlZWR5LCBGcmFuY2VzY28gUmljY2lhcmRpLCBWaW5heSBTYWppcCwgTmVpbCBTY2hlbWVuYXVlciwgUm9tYW4KIFN1emksIEphc29uIFRpc2hsZXIsIEp1c3QgdmFuIFJvc3N1bS4KLQpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi40LnJzdAppbmRleCA1NjllNWU5Li41ZmI1MmZlIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi40LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi40LnJzdApAQCAtMzM3LDcgKzMzNyw3IEBACiAgICAgICB3cm90ZSBwYXRjaGVzIGltcGxlbWVudGluZyBmdW5jdGlvbiBkZWNvcmF0b3JzLCBidXQgdGhlIG9uZSB0aGF0IHdhcyBhY3R1YWxseQogICAgICAgY2hlY2tlZCBpbiB3YXMgcGF0Y2ggIzk3OTcyOCwgd3JpdHRlbiBieSBNYXJrIFJ1c3NlbGwuCiAKLSAgIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvbW9pbi9QeXRob25EZWNvcmF0b3JMaWJyYXJ5CisgICBodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1B5dGhvbkRlY29yYXRvckxpYnJhcnkKICAgICAgIFRoaXMgV2lraSBwYWdlIGNvbnRhaW5zIHNldmVyYWwgZXhhbXBsZXMgb2YgZGVjb3JhdG9ycy4KIAogLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNjg3LDcgKzY4Nyw3IEBACiAgICAgICBUaGUgYXJ0aWNsZSB1c2VzIEZvcnRyYW4gY29kZSB0byBpbGx1c3RyYXRlIG1hbnkgb2YgdGhlIHByb2JsZW1zIHRoYXQgZmxvYXRpbmctCiAgICAgICBwb2ludCBpbmFjY3VyYWN5IGNhbiBjYXVzZS4KIAotICAgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwvCisgICBodHRwOi8vc3BlbGVvdHJvdmUuY29tL2RlY2ltYWwvCiAgICAgICBBIGRlc2NyaXB0aW9uIG9mIGEgZGVjaW1hbC1iYXNlZCByZXByZXNlbnRhdGlvbi4gIFRoaXMgcmVwcmVzZW50YXRpb24gaXMgYmVpbmcKICAgICAgIHByb3Bvc2VkIGFzIGEgc3RhbmRhcmQsIGFuZCB1bmRlcmxpZXMgdGhlIG5ldyBQeXRob24gZGVjaW1hbCB0eXBlLiAgTXVjaCBvZiB0aGlzCiAgICAgICBtYXRlcmlhbCB3YXMgd3JpdHRlbiBieSBNaWtlIENvd2xpc2hhdywgZGVzaWduZXIgb2YgdGhlIFJleHggbGFuZ3VhZ2UuCkBAIC03NTYsNyArNzU2LDcgQEAKICAgOmM6dHlwZTpgZG91YmxlYCB0byBhbiBBU0NJSSBzdHJpbmcuCiAKIFRoZSBjb2RlIGZvciB0aGVzZSBmdW5jdGlvbnMgY2FtZSBmcm9tIHRoZSBHTGliIGxpYnJhcnkKLShodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi9zdGFibGUvKSwgd2hvc2UgZGV2ZWxvcGVycyBraW5kbHkKKyhodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2xpYi9zdGFibGUvKSwgd2hvc2UgZGV2ZWxvcGVycyBraW5kbHkKIHJlbGljZW5zZWQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhbmQgZG9uYXRlZCB0aGVtIHRvIHRoZSBQeXRob24gU29mdHdhcmUKIEZvdW5kYXRpb24uICBUaGUgOm1vZDpgbG9jYWxlYCBtb2R1bGUgIGNhbiBub3cgY2hhbmdlIHRoZSBudW1lcmljIGxvY2FsZSwKIGxldHRpbmcgZXh0ZW5zaW9ucyBzdWNoIGFzIEdUSysgIHByb2R1Y2UgdGhlIGNvcnJlY3QgcmVzdWx0cy4KQEAgLTE0MjUsNyArMTQyNSw5IEBACiAgICAgICAgICAgIHByaW50IHdvcmQKIAogUnVubmluZyB0aGUgYWJvdmUgZnVuY3Rpb24ncyB0ZXN0cyB3aXRoIDpjb25zdDpgZG9jdGVzdC5SRVBPUlRfVURJRkZgIHNwZWNpZmllZCwKLXlvdSBnZXQgdGhlIGZvbGxvd2luZyBvdXRwdXQ6OgoreW91IGdldCB0aGUgZm9sbG93aW5nIG91dHB1dDoKKworLi4gY29kZS1ibG9jazo6IG5vbmUKIAogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgRmlsZSAidC5weSIsIGxpbmUgMTUsIGluIGcKQEAgLTE0ODEsMTAgKzE0ODMsMTAgQEAKIAogKiBQeXRob24gY2FuIG5vdyBiZSBidWlsdCB3aXRoIGFkZGl0aW9uYWwgcHJvZmlsaW5nIGZvciB0aGUgaW50ZXJwcmV0ZXIgaXRzZWxmLAogICBpbnRlbmRlZCBhcyBhbiBhaWQgdG8gcGVvcGxlIGRldmVsb3BpbmcgdGhlIFB5dGhvbiBjb3JlLiAgUHJvdmlkaW5nCi0gIDpvcHRpb246YC0tLS1lbmFibGUtcHJvZmlsaW5nYCB0byB0aGUgOnByb2dyYW06YGNvbmZpZ3VyZWAgc2NyaXB0IHdpbGwgbGV0IHlvdQorICA6b3B0aW9uOmAtLWVuYWJsZS1wcm9maWxpbmdgIHRvIHRoZSA6cHJvZ3JhbTpgY29uZmlndXJlYCBzY3JpcHQgd2lsbCBsZXQgeW91CiAgIHByb2ZpbGUgdGhlIGludGVycHJldGVyIHdpdGggOnByb2dyYW06YGdwcm9mYCwgYW5kIHByb3ZpZGluZyB0aGUKLSAgOm9wdGlvbjpgLS0tLXdpdGgtdHNjYCBzd2l0Y2ggZW5hYmxlcyBwcm9maWxpbmcgdXNpbmcgdGhlIFBlbnRpdW0ncyBUaW1lLVN0YW1wLQotICBDb3VudGVyIHJlZ2lzdGVyLiAgTm90ZSB0aGF0IHRoZSA6b3B0aW9uOmAtLS0td2l0aC10c2NgIHN3aXRjaCBpcyBzbGlnaHRseQorICA6b3B0aW9uOmAtLXdpdGgtdHNjYCBzd2l0Y2ggZW5hYmxlcyBwcm9maWxpbmcgdXNpbmcgdGhlIFBlbnRpdW0ncyBUaW1lLVN0YW1wLQorICBDb3VudGVyIHJlZ2lzdGVyLiAgTm90ZSB0aGF0IHRoZSA6b3B0aW9uOmAtLXdpdGgtdHNjYCBzd2l0Y2ggaXMgc2xpZ2h0bHkKICAgbWlzbmFtZWQsIGJlY2F1c2UgdGhlIHByb2ZpbGluZyBmZWF0dXJlIGFsc28gd29ya3Mgb24gdGhlIFBvd2VyUEMgcGxhdGZvcm0sCiAgIHRob3VnaCB0aGF0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmUgZG9lc24ndCBjYWxsIHRoYXQgcmVnaXN0ZXIgInRoZSBUU0MKICAgcmVnaXN0ZXIiLiAgKENvbnRyaWJ1dGVkIGJ5IEplcmVteSBIeWx0b24uKQpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNS5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi41LnJzdAppbmRleCBjYjkyZTA4Li4wOTMxODllIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi41LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi41LnJzdApAQCAtMzMwLDcgKzMzMCw3IEBACiAgICA6cGVwOmAzMjhgIC0gSW1wb3J0czogTXVsdGktTGluZSBhbmQgQWJzb2x1dGUvUmVsYXRpdmUKICAgICAgIFBFUCB3cml0dGVuIGJ5IEFhaHo7IGltcGxlbWVudGVkIGJ5IFRob21hcyBXb3V0ZXJzLgogCi0gICBodHRwOi8vY29kZXNwZWFrLm5ldC9weS9jdXJyZW50L2RvYy9pbmRleC5odG1sCisgICBodHRwczovL3B5bGliLnJlYWR0aGVkb2NzLm9yZy8KICAgICAgIFRoZSBweSBsaWJyYXJ5IGJ5IEhvbGdlciBLcmVrZWwsIHdoaWNoIGNvbnRhaW5zIHRoZSA6bW9kOmBweS5zdGRgIHBhY2thZ2UuCiAKIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTU0Nyw3ICs1NDcsNyBAQAogICAgICAgRWFybGllciB2ZXJzaW9ucyBvZiB0aGVzZSBmZWF0dXJlcyB3ZXJlIHByb3Bvc2VkIGluICA6cGVwOmAyODhgIGJ5IFJheW1vbmQKICAgICAgIEhldHRpbmdlciBhbmQgOnBlcDpgMzI1YCBieSBTYW11ZWxlIFBlZHJvbmkuCiAKLSAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29yb3V0aW5lCisgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db3JvdXRpbmUKICAgICAgIFRoZSBXaWtpcGVkaWEgZW50cnkgZm9yICBjb3JvdXRpbmVzLgogCiAgICBodHRwOi8vd3d3LnNpZGhlLm9yZy9+ZGFuL2Jsb2cvYXJjaGl2ZXMvMDAwMTc4Lmh0bWwKQEAgLTEwOTUsNyArMTA5NSw3IEBACiAgIGxvZyBhbGwgdGhlIHBhdGhzIHNlYXJjaGVkLiBJbiBQeXRob24gMi41LCBhIG5ldyA6ZXhjOmBJbXBvcnRXYXJuaW5nYCB3YXJuaW5nIGlzCiAgIHRyaWdnZXJlZCB3aGVuIGFuIGltcG9ydCB3b3VsZCBoYXZlIHBpY2tlZCB1cCBhIGRpcmVjdG9yeSBhcyBhIHBhY2thZ2UgYnV0IG5vCiAgIDpmaWxlOmBfX2luaXRfXy5weWAgd2FzIGZvdW5kLiAgVGhpcyB3YXJuaW5nIGlzIHNpbGVudGx5IGlnbm9yZWQgYnkgZGVmYXVsdDsKLSAgcHJvdmlkZSB0aGUgOm9wdGlvbjpgLVdkYCBvcHRpb24gd2hlbiBydW5uaW5nIHRoZSBQeXRob24gZXhlY3V0YWJsZSB0byBkaXNwbGF5CisgIHByb3ZpZGUgdGhlIDpvcHRpb246YC1XZCA8LVc+YCBvcHRpb24gd2hlbiBydW5uaW5nIHRoZSBQeXRob24gZXhlY3V0YWJsZSB0byBkaXNwbGF5CiAgIHRoZSB3YXJuaW5nIG1lc3NhZ2UuIChJbXBsZW1lbnRlZCBieSBUaG9tYXMgV291dGVycy4pCiAKICogVGhlIGxpc3Qgb2YgYmFzZSBjbGFzc2VzIGluIGEgY2xhc3MgZGVmaW5pdGlvbiBjYW4gbm93IGJlIGVtcHR5LiAgIEFzIGFuCkBAIC0xMTI2LDcgKzExMjYsNyBAQAogR2VvcmcgQnJhbmRsLikKIAogVGhlIFB5dGhvbiBleGVjdXRhYmxlIG5vdyBhY2NlcHRzIHRoZSBzdGFuZGFyZCBsb25nIG9wdGlvbnMgIDpvcHRpb246YC0taGVscGAKLWFuZCA6b3B0aW9uOmAtLXZlcnNpb25gOyBvbiBXaW5kb3dzLCAgaXQgYWxzbyBhY2NlcHRzIHRoZSA6b3B0aW9uOmAvP2Agb3B0aW9uCithbmQgOm9wdGlvbjpgLS12ZXJzaW9uYDsgb24gV2luZG93cywgIGl0IGFsc28gYWNjZXB0cyB0aGUgOm9wdGlvbjpgLz8gPC0/PmAgb3B0aW9uCiBmb3IgZGlzcGxheWluZyBhIGhlbHAgbWVzc2FnZS4gKEltcGxlbWVudGVkIGJ5IEdlb3JnIEJyYW5kbC4pCiAKIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1MjgsNyArMTUyOCw3IEBACiAqIFRoZSA6bW9kOmBzb2NrZXRgIG1vZHVsZSBub3cgc3VwcG9ydHMgOmNvbnN0OmBBRl9ORVRMSU5LYCBzb2NrZXRzIG9uIExpbnV4LAogICB0aGFua3MgdG8gYSBwYXRjaCBmcm9tIFBoaWxpcHBlIEJpb25kaS4gICBOZXRsaW5rIHNvY2tldHMgYXJlIGEgTGludXgtc3BlY2lmaWMKICAgbWVjaGFuaXNtIGZvciBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIGEgdXNlci1zcGFjZSBwcm9jZXNzIGFuZCBrZXJuZWwgY29kZTsgYW4KLSAgaW50cm9kdWN0b3J5ICBhcnRpY2xlIGFib3V0IHRoZW0gaXMgYXQgaHR0cDovL3d3dy5saW51eGpvdXJuYWwuY29tL2FydGljbGUvNzM1Ni4KKyAgaW50cm9kdWN0b3J5ICBhcnRpY2xlIGFib3V0IHRoZW0gaXMgYXQgaHR0cHM6Ly93d3cubGludXhqb3VybmFsLmNvbS9hcnRpY2xlLzczNTYuCiAgIEluIFB5dGhvbiBjb2RlLCBuZXRsaW5rIGFkZHJlc3NlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYSB0dXBsZSBvZiAyIGludGVnZXJzLAogICBgYChwaWQsIGdyb3VwX21hc2spYGAuCiAKQEAgLTE2NDAsNyArMTY0MCw3IEBACiAqIFRoZSA6bW9kOmB3ZWJicm93c2VyYCBtb2R1bGUgcmVjZWl2ZWQgYSBudW1iZXIgb2YgZW5oYW5jZW1lbnRzLiBJdCdzIG5vdwogICB1c2FibGUgYXMgYSBzY3JpcHQgd2l0aCBgYHB5dGhvbiAtbSB3ZWJicm93c2VyYGAsIHRha2luZyBhIFVSTCBhcyB0aGUgYXJndW1lbnQ7CiAgIHRoZXJlIGFyZSBhIG51bWJlciBvZiBzd2l0Y2hlcyAgdG8gY29udHJvbCB0aGUgYmVoYXZpb3VyICg6b3B0aW9uOmAtbmAgZm9yIGEgbmV3Ci0gIGJyb3dzZXIgd2luZG93LCAgOm9wdGlvbjpgLXRgIGZvciBhIG5ldyB0YWIpLiAgTmV3IG1vZHVsZS1sZXZlbCBmdW5jdGlvbnMsCisgIGJyb3dzZXIgd2luZG93LCAgOm9wdGlvbjpgIS10YCBmb3IgYSBuZXcgdGFiKS4gIE5ldyBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zLAogICA6ZnVuYzpgb3Blbl9uZXdgIGFuZCA6ZnVuYzpgb3Blbl9uZXdfdGFiYCwgd2VyZSBhZGRlZCAgdG8gc3VwcG9ydCB0aGlzLiAgVGhlCiAgIG1vZHVsZSdzIDpmdW5jOmBvcGVuYCBmdW5jdGlvbiBzdXBwb3J0cyBhbiBhZGRpdGlvbmFsIGZlYXR1cmUsIGFuICphdXRvcmFpc2UqCiAgIHBhcmFtZXRlciB0aGF0IHNpZ25hbHMgd2hldGhlciB0byByYWlzZSB0aGUgb3BlbiB3aW5kb3cgd2hlbiBwb3NzaWJsZS4gQSBudW1iZXIKQEAgLTIwMTMsNyArMjAxMyw3IEBACiAgICA+Pj4KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFNRTCBkaWFsZWN0IHN1cHBvcnRlZCBieSBTUUxpdGUsIHNlZQotaHR0cDovL3d3dy5zcWxpdGUub3JnLgoraHR0cHM6Ly93d3cuc3FsaXRlLm9yZy4KIAogCiAuLiBzZWVhbHNvOjoKQEAgLTIwMjEsNyArMjAyMSw3IEBACiAgICBodHRwOi8vd3d3LnB5c3FsaXRlLm9yZwogICAgICAgVGhlIHB5c3FsaXRlIHdlYiBwYWdlLgogCi0gICBodHRwOi8vd3d3LnNxbGl0ZS5vcmcKKyAgIGh0dHBzOi8vd3d3LnNxbGl0ZS5vcmcKICAgICAgIFRoZSBTUUxpdGUgd2ViIHBhZ2U7IHRoZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGUgc3ludGF4IGFuZCB0aGUgYXZhaWxhYmxlCiAgICAgICBkYXRhIHR5cGVzIGZvciB0aGUgc3VwcG9ydGVkIFNRTCBkaWFsZWN0LgogCkBAIC0yMDg4LDcgKzIwODgsNyBAQAogICBwcm92aWRlZCB0aGUgcmVzdWx0cyBvZiB0aGVpciBleGFtaW5hdGlvbiBvZiB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlLiAgVGhlCiAgIGFuYWx5c2lzIGZvdW5kIGFib3V0IDYwIGJ1Z3MgdGhhdCAgd2VyZSBxdWlja2x5IGZpeGVkLiAgTWFueSBvZiB0aGUgYnVncyB3ZXJlCiAgIHJlZmNvdW50aW5nIHByb2JsZW1zLCBvZnRlbiBvY2N1cnJpbmcgaW4gZXJyb3ItaGFuZGxpbmcgY29kZS4gIFNlZQotICBodHRwOi8vc2Nhbi5jb3Zlcml0eS5jb20gZm9yIHRoZSBzdGF0aXN0aWNzLgorICBodHRwczovL3NjYW4uY292ZXJpdHkuY29tIGZvciB0aGUgc3RhdGlzdGljcy4KIAogKiBUaGUgbGFyZ2VzdCBjaGFuZ2UgdG8gdGhlIEMgQVBJIGNhbWUgZnJvbSA6cGVwOmAzNTNgLCB3aGljaCBtb2RpZmllcyB0aGUKICAgaW50ZXJwcmV0ZXIgdG8gdXNlIGEgOmM6dHlwZTpgUHlfc3NpemVfdGAgdHlwZSBkZWZpbml0aW9uIGluc3RlYWQgb2YKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjYucnN0IGIvRG9jL3doYXRzbmV3LzIuNi5yc3QKaW5kZXggZTc2MzI2NS4uNGFiMTY1NiAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuNi5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuNi5yc3QKQEAgLTE1MywxMCArMTUzLDEwIEBACiB0aGVyZWZvcmUgcG9zdGVkIGEgY2FsbCBmb3IgaXNzdWUgdHJhY2tlcnMsIGFza2luZyB2b2x1bnRlZXJzIHRvIHNldAogdXAgZGlmZmVyZW50IHByb2R1Y3RzIGFuZCBpbXBvcnQgc29tZSBvZiB0aGUgYnVncyBhbmQgcGF0Y2hlcyBmcm9tCiBTb3VyY2VGb3JnZS4gIEZvdXIgZGlmZmVyZW50IHRyYWNrZXJzIHdlcmUgZXhhbWluZWQ6IGBKaXJhCi08aHR0cDovL3d3dy5hdGxhc3NpYW4uY29tL3NvZnR3YXJlL2ppcmEvPmBfXywKLWBMYXVuY2hwYWQgPGh0dHA6Ly93d3cubGF1bmNocGFkLm5ldD5gX18sCis8aHR0cHM6Ly93d3cuYXRsYXNzaWFuLmNvbS9zb2Z0d2FyZS9qaXJhLz5gX18sCitgTGF1bmNocGFkIDxodHRwczovL2xhdW5jaHBhZC5uZXQvPmBfXywKIGBSb3VuZHVwIDxodHRwOi8vcm91bmR1cC5zb3VyY2Vmb3JnZS5uZXQvPmBfXywgYW5kCi1gVHJhYyA8aHR0cDovL3RyYWMuZWRnZXdhbGwub3JnLz5gX18uCitgVHJhYyA8aHR0cHM6Ly90cmFjLmVkZ2V3YWxsLm9yZy8+YF9fLgogVGhlIGNvbW1pdHRlZSBldmVudHVhbGx5IHNldHRsZWQgb24gSmlyYQogYW5kIFJvdW5kdXAgYXMgdGhlIHR3byBjYW5kaWRhdGVzLiAgSmlyYSBpcyBhIGNvbW1lcmNpYWwgcHJvZHVjdCB0aGF0CiBvZmZlcnMgbm8tY29zdCBob3N0ZWQgaW5zdGFuY2VzIHRvIGZyZWUtc29mdHdhcmUgcHJvamVjdHM7IFJvdW5kdXAKQEAgLTIxNyw3ICsyMTcsNyBAQAogRHVyaW5nIHRoZSAyLjYgZGV2ZWxvcG1lbnQgY3ljbGUsIEdlb3JnIEJyYW5kbCBwdXQgYSBsb3Qgb2YgZWZmb3J0CiBpbnRvIGJ1aWxkaW5nIGEgbmV3IHRvb2xjaGFpbiBmb3IgcHJvY2Vzc2luZyB0aGUgZG9jdW1lbnRhdGlvbi4gIFRoZQogcmVzdWx0aW5nIHBhY2thZ2UgaXMgY2FsbGVkIFNwaGlueCwgYW5kIGlzIGF2YWlsYWJsZSBmcm9tCi1odHRwOi8vc3BoaW54LnBvY29vLm9yZy8uCitodHRwOi8vc3BoaW54LWRvYy5vcmcvLgogCiBTcGhpbnggY29uY2VudHJhdGVzIG9uIEhUTUwgb3V0cHV0LCBwcm9kdWNpbmcgYXR0cmFjdGl2ZWx5IHN0eWxlZCBhbmQKIG1vZGVybiBIVE1MOyBwcmludGVkIG91dHB1dCBpcyBzdGlsbCBzdXBwb3J0ZWQgdGhyb3VnaCBjb252ZXJzaW9uIHRvCkBAIC0xNDMxLDcgKzE0MzEsNyBAQAogICAgOnBlcDpgMzE0MWAgLSBBIFR5cGUgSGllcmFyY2h5IGZvciBOdW1iZXJzCiAgICAgICBQRVAgd3JpdHRlbiBieSBKZWZmcmV5IFlhc3NraW4uCiAKLSAgIGBTY2hlbWUncyBudW1lcmljYWwgdG93ZXIgPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ndWlsZS9tYW51YWwvaHRtbF9ub2RlL051bWVyaWNhbC1Ub3dlci5odG1sI051bWVyaWNhbC1Ub3dlcj5gX18sIGZyb20gdGhlIEd1aWxlIG1hbnVhbC4KKyAgIGBTY2hlbWUncyBudW1lcmljYWwgdG93ZXIgPGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3VpbGUvbWFudWFsL2h0bWxfbm9kZS9OdW1lcmljYWwtVG93ZXIuaHRtbCNOdW1lcmljYWwtVG93ZXI+YF9fLCBmcm9tIHRoZSBHdWlsZSBtYW51YWwuCiAKICAgIGBTY2hlbWUncyBudW1iZXIgZGF0YXR5cGVzIDxodHRwOi8vc2NoZW1lcnMub3JnL0RvY3VtZW50cy9TdGFuZGFyZHMvUjVSUy9IVE1ML3I1cnMtWi1ILTkuaHRtbCMlX3NlY182LjI+YF9fIGZyb20gdGhlIFI1UlMgU2NoZW1lIHNwZWNpZmljYXRpb24uCiAKQEAgLTE3OTYsNyArMTc5Niw3IEBACiAqIFRoZSA6bW9kOmBic2RkYmAgbW9kdWxlIGFsc28gaGFzIGEgbmV3IG1haW50YWluZXIsIEplc8O6cyBDZWEgQXZpw7NuLCBhbmQgdGhlIHBhY2thZ2UKICAgaXMgbm93IGF2YWlsYWJsZSBhcyBhIHN0YW5kYWxvbmUgcGFja2FnZS4gIFRoZSB3ZWIgcGFnZSBmb3IgdGhlIHBhY2thZ2UgaXMKICAgYHd3dy5qY2VhLmVzL3Byb2dyYW1hY2lvbi9weWJzZGRiLmh0bQotICA8aHR0cDovL3d3dy5qY2VhLmVzL3Byb2dyYW1hY2lvbi9weWJzZGRiLmh0bT5gX18uCisgIDxodHRwczovL3d3dy5qY2VhLmVzL3Byb2dyYW1hY2lvbi9weWJzZGRiLmh0bT5gX18uCiAgIFRoZSBwbGFuIGlzIHRvIHJlbW92ZSB0aGUgcGFja2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CiAgIGluIFB5dGhvbiAzLjAsIGJlY2F1c2UgaXRzIHBhY2Ugb2YgcmVsZWFzZXMgaXMgbXVjaCBtb3JlIGZyZXF1ZW50IHRoYW4KICAgUHl0aG9uJ3MuCkBAIC0xOTI2LDcgKzE5MjYsNyBAQAogICB0aGUgbGVmdCB0byBzaXggcGxhY2VzLiAgKENvbnRyaWJ1dGVkIGJ5IFNraXAgTW9udGFuYXJvOyA6aXNzdWU6YDExNThgLikKIAogKiBUaGUgOm1vZDpgZGVjaW1hbGAgbW9kdWxlIHdhcyB1cGRhdGVkIHRvIHZlcnNpb24gMS42NiBvZgotICBgdGhlIEdlbmVyYWwgRGVjaW1hbCBTcGVjaWZpY2F0aW9uIDxodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbC9kZWNhcml0aC5odG1sPmBfXy4gIE5ldyBmZWF0dXJlcworICBgdGhlIEdlbmVyYWwgRGVjaW1hbCBTcGVjaWZpY2F0aW9uIDxodHRwOi8vc3BlbGVvdHJvdmUuY29tL2RlY2ltYWwvZGVjYXJpdGguaHRtbD5gX18uICBOZXcgZmVhdHVyZXMKICAgaW5jbHVkZSBzb21lIG1ldGhvZHMgZm9yIHNvbWUgYmFzaWMgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucyBzdWNoIGFzCiAgIDptZXRoOmBleHBgIGFuZCA6bWV0aDpgbG9nMTBgOjoKIApAQCAtMjg4OSw3ICsyODg5LDcgQEAKIAogQmlsbCBKYW5zc2VuIG1hZGUgZXh0ZW5zaXZlIGltcHJvdmVtZW50cyB0byBQeXRob24gMi42J3Mgc3VwcG9ydCBmb3IKIHRoZSBTZWN1cmUgU29ja2V0cyBMYXllciBieSBhZGRpbmcgYSBuZXcgbW9kdWxlLCA6bW9kOmBzc2xgLCB0aGF0J3MKLWJ1aWx0IGF0b3AgdGhlIGBPcGVuU1NMIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnLz5gX18gbGlicmFyeS4KK2J1aWx0IGF0b3AgdGhlIGBPcGVuU1NMIDxodHRwczovL3d3dy5vcGVuc3NsLm9yZy8+YF9fIGxpYnJhcnkuCiBUaGlzIG5ldyBtb2R1bGUgcHJvdmlkZXMgbW9yZSBjb250cm9sIG92ZXIgdGhlIHByb3RvY29sIG5lZ290aWF0ZWQsCiB0aGUgWC41MDkgY2VydGlmaWNhdGVzIHVzZWQsIGFuZCBoYXMgYmV0dGVyIHN1cHBvcnQgZm9yIHdyaXRpbmcgU1NMCiBzZXJ2ZXJzIChhcyBvcHBvc2VkIHRvIGNsaWVudHMpIGluIFB5dGhvbi4gIFRoZSBleGlzdGluZyBTU0wgc3VwcG9ydApAQCAtMzE1NCw3ICszMTU0LDcgQEAKICAgOmZ1bmM6YG1hY29zdG9vbHMudG91Y2hlZGAgZnVuY3Rpb24gdG8gYmUgcmVtb3ZlZCBiZWNhdXNlIGl0IGRlcGVuZGVkIG9uIHRoZQogICA6bW9kOmBtYWNmc2AgbW9kdWxlLiAgKDppc3N1ZTpgMTQ5MDE5MGApCiAKLSogTWFueSBvdGhlciBNYWMgT1MgbW9kdWxlcyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCByZW1vdmVkIGluCisqIE1hbnkgb3RoZXIgTWFjIE9TIG1vZHVsZXMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbgogICBQeXRob24gMy4wOgogICA6bW9kOmBfYnVpbHRpblN1aXRlc2AsCiAgIDptb2Q6YGFlcGFja2AsCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi43LnJzdCBiL0RvYy93aGF0c25ldy8yLjcucnN0CmluZGV4IDM5NjZjYjQuLjg2ZjAxOTcgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjcucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjcucnN0CkBAIC02MTMsNiArNjEzLDkgQEAKIFRoZSA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdCBwcm92aWRlcyBhIHZpZXcgb2YgYW5vdGhlciBvYmplY3QncwogbWVtb3J5IGNvbnRlbnQgdGhhdCBtYXRjaGVzIHRoZSA6Y2xhc3M6YGJ5dGVzYCB0eXBlJ3MgaW50ZXJmYWNlLgogCisuLiBkb2N0ZXN0OjoKKyAgICA6b3B0aW9uczogK1NLSVAKKwogICAgID4+PiBpbXBvcnQgc3RyaW5nCiAgICAgPj4+IG0gPSBtZW1vcnl2aWV3KHN0cmluZy5sZXR0ZXJzKQogICAgID4+PiBtCkBAIC02MjgsNiArNjMxLDkgQEAKIFRoZSBjb250ZW50IG9mIHRoZSB2aWV3IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgb2YgYnl0ZXMgb3IKIGEgbGlzdCBvZiBpbnRlZ2VyczoKIAorLi4gZG9jdGVzdDo6CisgICAgOm9wdGlvbnM6ICtTS0lQCisKICAgICA+Pj4gbTIudG9ieXRlcygpCiAgICAgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwogICAgID4+PiBtMi50b2xpc3QoKQpAQCAtNjM3LDYgKzY0Myw5IEBACiA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdHMgYWxsb3cgbW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBpZgogaXQncyBhIG11dGFibGUgb2JqZWN0LgogCisuLiBkb2N0ZXN0OjoKKyAgICA6b3B0aW9uczogK1NLSVAKKwogICAgID4+PiBtMlswXSA9IDc1CiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KQEAgLTY3MSw2ICs2ODAsOSBAQAogICBgYHt9YGAgY29udGludWVzIHRvIHJlcHJlc2VudCBhbiBlbXB0eSBkaWN0aW9uYXJ5OyB1c2UKICAgYGBzZXQoKWBgIGZvciBhbiBlbXB0eSBzZXQuCiAKKyAgLi4gZG9jdGVzdDo6CisgICAgOm9wdGlvbnM6ICtTS0lQCisKICAgICA+Pj4gezEsIDIsIDMsIDQsIDV9CiAgICAgc2V0KFsxLCAyLCAzLCA0LCA1XSkKICAgICA+Pj4gc2V0KCkgIyBlbXB0eSBzZXQKQEAgLTY4NCw2ICs2OTYsOSBAQAogICAzLngsIGdlbmVyYWxpemluZyBsaXN0L2dlbmVyYXRvciBjb21wcmVoZW5zaW9ucyB0byB1c2UKICAgdGhlIGxpdGVyYWwgc3ludGF4IGZvciBzZXRzIGFuZCBkaWN0aW9uYXJpZXMuCiAKKyAgLi4gZG9jdGVzdDo6CisgICAgOm9wdGlvbnM6ICtTS0lQCisKICAgICA+Pj4ge3g6IHgqeCBmb3IgeCBpbiByYW5nZSg2KX0KICAgICB7MDogMCwgMTogMSwgMjogNCwgMzogOSwgNDogMTYsIDU6IDI1fQogICAgID4+PiB7KCdhJyp4KSBmb3IgeCBpbiByYW5nZSg2KX0KQEAgLTEwMjksNyArMTA0NCw3IEBACiAKICogVXBkYXRlZCBtb2R1bGU6IHRoZSA6bW9kOmBic2RkYmAgbW9kdWxlIGhhcyBiZWVuIHVwZGF0ZWQgZnJvbSA0LjcuMmRldmVsOQogICB0byB2ZXJzaW9uIDQuOC40IG9mCi0gIGB0aGUgcHlic2RkYiBwYWNrYWdlIDxodHRwOi8vd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtPmBfXy4KKyAgYHRoZSBweWJzZGRiIHBhY2thZ2UgPGh0dHBzOi8vd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtPmBfXy4KICAgVGhlIG5ldyB2ZXJzaW9uIGZlYXR1cmVzIGJldHRlciBQeXRob24gMy54IGNvbXBhdGliaWxpdHksIHZhcmlvdXMgYnVnIGZpeGVzLAogICBhbmQgYWRkcyBzZXZlcmFsIG5ldyBCZXJrZWxleURCIGZsYWdzIGFuZCBtZXRob2RzLgogICAoVXBkYXRlZCBieSBKZXPDunMgQ2VhIEF2acOzbjsgOmlzc3VlOmA4MTU2YC4gIFRoZSBweWJzZGRiCkBAIC0xMDUyLDcgKzEwNjcsNyBAQAogICAgICA+Pj4gZm9yIGxldHRlciBpbiAnaGVyZSBpcyBhIHNhbXBsZSBvZiBlbmdsaXNoIHRleHQnOgogICAgICAuLi4gICBjW2xldHRlcl0gKz0gMQogICAgICAuLi4KLSAgICAgPj4+IGMKKyAgICAgPj4+IGMgIyBkb2N0ZXN0OiArU0tJUAogICAgICBDb3VudGVyKHsnICc6IDYsICdlJzogNSwgJ3MnOiAzLCAnYSc6IDIsICdpJzogMiwgJ2gnOiAyLAogICAgICAnbCc6IDIsICd0JzogMiwgJ2cnOiAxLCAnZic6IDEsICdtJzogMSwgJ28nOiAxLCAnbic6IDEsCiAgICAgICdwJzogMSwgJ3InOiAxLCAneCc6IDF9KQpAQCAtMTE1Nyw3ICsxMTcyLDcgQEAKICogVGhlIDptb2Q6YGN0eXBlc2AgbW9kdWxlIG5vdyBhbHdheXMgY29udmVydHMgYGBOb25lYGAgdG8gYSBDIE5VTEwKICAgcG9pbnRlciBmb3IgYXJndW1lbnRzIGRlY2xhcmVkIGFzIHBvaW50ZXJzLiAgKENoYW5nZWQgYnkgVGhvbWFzCiAgIEhlbGxlcjsgOmlzc3VlOmA0NjA2YC4pICBUaGUgdW5kZXJseWluZyBgbGliZmZpIGxpYnJhcnkKLSAgPGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9saWJmZmkvPmBfXyBoYXMgYmVlbiB1cGRhdGVkIHRvIHZlcnNpb24KKyAgPGh0dHBzOi8vc291cmNld2FyZS5vcmcvbGliZmZpLz5gX18gaGFzIGJlZW4gdXBkYXRlZCB0byB2ZXJzaW9uCiAgIDMuMC45LCBjb250YWluaW5nIHZhcmlvdXMgZml4ZXMgZm9yIGRpZmZlcmVudCBwbGF0Zm9ybXMuICAoVXBkYXRlZAogICBieSBNYXR0aGlhcyBLbG9zZTsgOmlzc3VlOmA4MTQyYC4pCiAKQEAgLTE1MTMsNyArMTUyOCw3IEBACiAgIChDb250cmlidXRlZCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb247IDppc3N1ZTpgNjE5MmAgYW5kIDppc3N1ZTpgNjI2N2AuKQogCiAqIFVwZGF0ZWQgbW9kdWxlOiB0aGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIGhhcyBiZWVuIHVwZGF0ZWQgdG8KLSAgdmVyc2lvbiAyLjYuMCBvZiB0aGUgYHB5c3FsaXRlIHBhY2thZ2UgPGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weXNxbGl0ZS8+YF9fLiBWZXJzaW9uIDIuNi4wIGluY2x1ZGVzIGEgbnVtYmVyIG9mIGJ1Z2ZpeGVzLCBhbmQgYWRkcworICB2ZXJzaW9uIDIuNi4wIG9mIHRoZSBgcHlzcWxpdGUgcGFja2FnZSA8aHR0cHM6Ly9naXRodWIuY29tL2doYWVyaW5nL3B5c3FsaXRlPmBfXy4gVmVyc2lvbiAyLjYuMCBpbmNsdWRlcyBhIG51bWJlciBvZiBidWdmaXhlcywgYW5kIGFkZHMKICAgdGhlIGFiaWxpdHkgdG8gbG9hZCBTUUxpdGUgZXh0ZW5zaW9ucyBmcm9tIHNoYXJlZCBsaWJyYXJpZXMuCiAgIENhbGwgdGhlIGBgZW5hYmxlX2xvYWRfZXh0ZW5zaW9uKFRydWUpYGAgbWV0aG9kIHRvIGVuYWJsZSBleHRlbnNpb25zLAogICBhbmQgdGhlbiBjYWxsIDptZXRoOmB+c3FsaXRlMy5Db25uZWN0aW9uLmxvYWRfZXh0ZW5zaW9uYCB0byBsb2FkIGEgcGFydGljdWxhciBzaGFyZWQgbGlicmFyeS4KQEAgLTE1MzAsNyArMTU0NSw3IEBACiAgICpjaXBoZXJzKiBhcmd1bWVudCB0aGF0J3MgYSBzdHJpbmcgbGlzdGluZyB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG1zCiAgIHRvIGJlIGFsbG93ZWQ7IHRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBkZXNjcmliZWQKICAgYGluIHRoZSBPcGVuU1NMIGRvY3VtZW50YXRpb24KLSAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVJfTElTVF9GT1JNQVQ+YF9fLgorICA8aHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVItTElTVC1GT1JNQVQ+YF9fLgogICAoQWRkZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODMyMmAuKQogCiAgIEFub3RoZXIgY2hhbmdlIG1ha2VzIHRoZSBleHRlbnNpb24gbG9hZCBhbGwgb2YgT3BlblNTTCdzIGNpcGhlcnMgYW5kCkBAIC0xNjM4LDEyICsxNjUzLDE4IEBACiAgIHdvcmtlZCBhcm91bmQgdGhlIG9sZCBiZWhhdmlvdXIuICBGb3IgZXhhbXBsZSwgUHl0aG9uIDIuNi40IG9yIDIuNQogICB3aWxsIHJldHVybiB0aGUgZm9sbG93aW5nOgogCisgIC4uIGRvY3Rlc3Q6OgorICAgIDpvcHRpb25zOiArU0tJUAorCiAgICAgPj4+IGltcG9ydCB1cmxwYXJzZQogICAgID4+PiB1cmxwYXJzZS51cmxzcGxpdCgnaW52ZW50ZWQ6Ly9ob3N0L2ZpbGVuYW1lP3F1ZXJ5JykKICAgICAoJ2ludmVudGVkJywgJycsICcvL2hvc3QvZmlsZW5hbWU/cXVlcnknLCAnJywgJycpCiAKICAgUHl0aG9uIDIuNyAoYW5kIFB5dGhvbiAyLjYuNSkgd2lsbCByZXR1cm46CiAKKyAgLi4gZG9jdGVzdDo6CisgICAgOm9wdGlvbnM6ICtTS0lQCisKICAgICA+Pj4gaW1wb3J0IHVybHBhcnNlCiAgICAgPj4+IHVybHBhcnNlLnVybHNwbGl0KCdpbnZlbnRlZDovL2hvc3QvZmlsZW5hbWU/cXVlcnknKQogICAgICgnaW52ZW50ZWQnLCAnaG9zdCcsICcvZmlsZW5hbWU/cXVlcnknLCAnJywgJycpCkBAIC0xNjUyLDcgKzE2NzMsMTAgQEAKICAgcmV0dXJucyBhIG5hbWVkIHR1cGxlIGluc3RlYWQgb2YgYSBzdGFuZGFyZCB0dXBsZS4pCiAKICAgVGhlIDptb2Q6YHVybHBhcnNlYCBtb2R1bGUgYWxzbyBzdXBwb3J0cyBJUHY2IGxpdGVyYWwgYWRkcmVzc2VzIGFzIGRlZmluZWQgYnkKLSAgOnJmYzpgMjczMmAgKGNvbnRyaWJ1dGVkIGJ5IFNlbnRoaWwgS3VtYXJhbjsgOmlzc3VlOmAyOTg3YCkuIDo6CisgIDpyZmM6YDI3MzJgIChjb250cmlidXRlZCBieSBTZW50aGlsIEt1bWFyYW47IDppc3N1ZTpgMjk4N2ApLgorCisgIC4uIGRvY3Rlc3Q6OgorICAgIDpvcHRpb25zOiArU0tJUAogCiAgICAgPj4+IHVybHBhcnNlLnVybHBhcnNlKCdodHRwOi8vWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0vZm9vJykKICAgICBQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLCBuZXRsb2M9J1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdJywKQEAgLTE3ODMsNyArMTgwNyw3IEBACiBUbyBsZWFybiBtb3JlLCByZWFkIHRoZSA6bW9kOmB0dGtgIG1vZHVsZSBkb2N1bWVudGF0aW9uLiAgWW91IG1heSBhbHNvCiB3aXNoIHRvIHJlYWQgdGhlIFRjbC9UayBtYW51YWwgcGFnZSBkZXNjcmliaW5nIHRoZQogVHRrIHRoZW1lIGVuZ2luZSwgYXZhaWxhYmxlIGF0Ci1odHRwOi8vd3d3LnRjbC50ay9tYW4vdGNsOC41L1RrQ21kL3R0a19pbnRyby5odG0uIFNvbWUKK2h0dHBzOi8vd3d3LnRjbC50ay9tYW4vdGNsOC41L1RrQ21kL3R0a19pbnRyby5odG0uIFNvbWUKIHNjcmVlbnNob3RzIG9mIHRoZSBQeXRob24vVHRrIGNvZGUgaW4gdXNlIGFyZSBhdAogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5dGhvbi10dGsvd2lraS9TY3JlZW5zaG90cy4KIApAQCAtMTgyMCwxMiArMTg0NCwxMiBAQAogCiBUaGUgOmZ1bmM6YH51bml0dGVzdC5tYWluYCBmdW5jdGlvbiBzdXBwb3J0cyBzb21lIG90aGVyIG5ldyBvcHRpb25zOgogCi0qIDpvcHRpb246YC1iYCBvciA6b3B0aW9uOmAtLWJ1ZmZlcmAgd2lsbCBidWZmZXIgdGhlIHN0YW5kYXJkIG91dHB1dAorKiA6b3B0aW9uOmAtYiA8dW5pdHRlc3QgLWI+YCBvciA6b3B0aW9uOmAtLWJ1ZmZlcmAgd2lsbCBidWZmZXIgdGhlIHN0YW5kYXJkIG91dHB1dAogICBhbmQgc3RhbmRhcmQgZXJyb3Igc3RyZWFtcyBkdXJpbmcgZWFjaCB0ZXN0LiAgSWYgdGhlIHRlc3QgcGFzc2VzLAogICBhbnkgcmVzdWx0aW5nIG91dHB1dCB3aWxsIGJlIGRpc2NhcmRlZDsgb24gZmFpbHVyZSwgdGhlIGJ1ZmZlcmVkCiAgIG91dHB1dCB3aWxsIGJlIGRpc3BsYXllZC4KIAotKiA6b3B0aW9uOmAtY2Agb3IgOm9wdGlvbjpgLS1jYXRjaGAgd2lsbCBjYXVzZSB0aGUgY29udHJvbC1DIGludGVycnVwdAorKiA6b3B0aW9uOmAtYyA8dW5pdHRlc3QgLWM+YCBvciA6b3B0aW9uOmAtLWNhdGNoYCB3aWxsIGNhdXNlIHRoZSBjb250cm9sLUMgaW50ZXJydXB0CiAgIHRvIGJlIGhhbmRsZWQgbW9yZSBncmFjZWZ1bGx5LiAgSW5zdGVhZCBvZiBpbnRlcnJ1cHRpbmcgdGhlIHRlc3QKICAgcHJvY2VzcyBpbW1lZGlhdGVseSwgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlc3Qgd2lsbCBiZSBjb21wbGV0ZWQKICAgYW5kIHRoZW4gdGhlIHBhcnRpYWwgcmVzdWx0cyB1cCB0byB0aGUgaW50ZXJydXB0aW9uIHdpbGwgYmUgcmVwb3J0ZWQuCkBAIC0xODM5LDcgKzE4NjMsNyBAQAogICA6ZnVuYzpgfnVuaXR0ZXN0LnJlbW92ZUhhbmRsZXJgIGRlY29yYXRvciB0aGF0IGNhbiBiZSB1c2VkIHRvIG1hcmsgdGVzdHMgdGhhdAogICBzaG91bGQgaGF2ZSB0aGUgY29udHJvbC1DIGhhbmRsaW5nIGRpc2FibGVkLgogCi0qIDpvcHRpb246YC1mYCBvciA6b3B0aW9uOmAtLWZhaWxmYXN0YCBtYWtlcworKiA6b3B0aW9uOmAtZiA8dW5pdHRlc3QgLWY+YCBvciA6b3B0aW9uOmAtLWZhaWxmYXN0YCBtYWtlcwogICB0ZXN0IGV4ZWN1dGlvbiBzdG9wIGltbWVkaWF0ZWx5IHdoZW4gYSB0ZXN0IGZhaWxzIGluc3RlYWQgb2YKICAgY29udGludWluZyB0byBleGVjdXRlIGZ1cnRoZXIgdGVzdHMuICAoU3VnZ2VzdGVkIGJ5IENsaWZmIER5ZXIgYW5kCiAgIGltcGxlbWVudGVkIGJ5IE1pY2hhZWwgRm9vcmQ7IDppc3N1ZTpgODA3NGAuKQpAQCAtMjA3OSw3ICsyMTAzLDcgQEAKIAogKiBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgdGhlIEdOVSBEZWJ1Z2dlciwgR0RCIDcsIGNhbiBiZSBgc2NyaXB0ZWQKICAgdXNpbmcgUHl0aG9uCi0gIDxodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL2N1cnJlbnQvb25saW5lZG9jcy9nZGIvUHl0aG9uLmh0bWw+YF9fLgorICA8aHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9nZGIvY3VycmVudC9vbmxpbmVkb2NzL2dkYi9QeXRob24uaHRtbD5gX18uCiAgIFdoZW4geW91IGJlZ2luIGRlYnVnZ2luZyBhbiBleGVjdXRhYmxlIHByb2dyYW0gUCwgR0RCIHdpbGwgbG9vayBmb3IKICAgYSBmaWxlIG5hbWVkIGBgUC1nZGIucHlgYCBhbmQgYXV0b21hdGljYWxseSByZWFkIGl0LiAgRGF2ZSBNYWxjb2xtCiAgIGNvbnRyaWJ1dGVkIGEgOmZpbGU6YHB5dGhvbi1nZGIucHlgIHRoYXQgYWRkcyBhIG51bWJlciBvZgpAQCAtMjE0OSw3ICsyMTczLDcgQEAKICAgd2l0aCAqdXBkYXRlcGF0aCogc2V0IHRvIGZhbHNlLgogCiAgIFNlY3VyaXR5IGlzc3VlIHJlcG9ydGVkIGFzIGBDVkUtMjAwOC01OTgzCi0gIDxodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDgtNTk4Mz5gXzsKKyAgPGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDgtNTk4Mz5gXzsKICAgZGlzY3Vzc2VkIGluIDppc3N1ZTpgNTc1M2AsIGFuZCBmaXhlZCBieSBBbnRvaW5lIFBpdHJvdS4KIAogKiBOZXcgbWFjcm9zOiB0aGUgUHl0aG9uIGhlYWRlciBmaWxlcyBub3cgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm9zOgpAQCAtMjI2Niw3ICsyMjkwLDkgQEAKIHdyaXR0ZW4gaW4gcHVyZSBQeXRob24gY291bGQgY2F1c2UgYSBzZWdtZW50YXRpb24gZmF1bHQgYnkgdGFraW5nIGEKIDpjOnR5cGU6YFB5Q09iamVjdGAgZnJvbSBtb2R1bGUgQSBhbmQgc29tZWhvdyBzdWJzdGl0dXRpbmcgaXQgZm9yIHRoZQogOmM6dHlwZTpgUHlDT2JqZWN0YCBpbiBtb2R1bGUgQi4gICBDYXBzdWxlcyBrbm93IHRoZWlyIG93biBuYW1lLAotYW5kIGdldHRpbmcgdGhlIHBvaW50ZXIgcmVxdWlyZXMgcHJvdmlkaW5nIHRoZSBuYW1lOjoKK2FuZCBnZXR0aW5nIHRoZSBwb2ludGVyIHJlcXVpcmVzIHByb3ZpZGluZyB0aGUgbmFtZToKKworLi4gY29kZS1ibG9jazo6IGMKIAogICAgdm9pZCAqdnRhYmxlOwogCkBAIC0yMzgxLDcgKzI0MDcsNyBAQAogICB0YWtlcyBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgaG93IG1hbnkgdGVzdHMgcnVuIGluIHBhcmFsbGVsLiBUaGlzCiAgIGFsbG93cyByZWR1Y2luZyB0aGUgdG90YWwgcnVudGltZSBvbiBtdWx0aS1jb3JlIG1hY2hpbmVzLgogICBUaGlzIG9wdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggc2V2ZXJhbCBvdGhlciBvcHRpb25zLCBpbmNsdWRpbmcgdGhlCi0gIDpvcHRpb246YC1SYCBzd2l0Y2ggd2hpY2ggaXMga25vd24gdG8gcHJvZHVjZSBsb25nIHJ1bnRpbWVzLgorICA6b3B0aW9uOmAhLVJgIHN3aXRjaCB3aGljaCBpcyBrbm93biB0byBwcm9kdWNlIGxvbmcgcnVudGltZXMuCiAgIChBZGRlZCBieSBBbnRvaW5lIFBpdHJvdSwgOmlzc3VlOmA2MTUyYC4pICBUaGlzIGNhbiBhbHNvIGJlIHVzZWQKICAgd2l0aCBhIG5ldyA6b3B0aW9uOmAtRmAgc3dpdGNoIHRoYXQgcnVucyBzZWxlY3RlZCB0ZXN0cyBpbiBhIGxvb3AKICAgdW50aWwgdGhleSBmYWlsLiAgKEFkZGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDczMTJgLikKQEAgLTI0NzUsMTIgKzI1MDEsMTggQEAKICAgd29ya2VkIGFyb3VuZCB0aGUgb2xkIGJlaGF2aW91ci4gIEZvciBleGFtcGxlLCBQeXRob24gMi42LjQgb3IgMi41CiAgIHdpbGwgcmV0dXJuIHRoZSBmb2xsb3dpbmc6CiAKKyAgLi4gZG9jdGVzdDo6CisgICAgOm9wdGlvbnM6ICtTS0lQCisKICAgICA+Pj4gaW1wb3J0IHVybHBhcnNlCiAgICAgPj4+IHVybHBhcnNlLnVybHNwbGl0KCdpbnZlbnRlZDovL2hvc3QvZmlsZW5hbWU/cXVlcnknKQogICAgICgnaW52ZW50ZWQnLCAnJywgJy8vaG9zdC9maWxlbmFtZT9xdWVyeScsICcnLCAnJykKIAogICBQeXRob24gMi43IChhbmQgUHl0aG9uIDIuNi41KSB3aWxsIHJldHVybjoKIAorICAuLiBkb2N0ZXN0OjoKKyAgICA6b3B0aW9uczogK1NLSVAKKwogICAgID4+PiBpbXBvcnQgdXJscGFyc2UKICAgICA+Pj4gdXJscGFyc2UudXJsc3BsaXQoJ2ludmVudGVkOi8vaG9zdC9maWxlbmFtZT9xdWVyeScpCiAgICAgKCdpbnZlbnRlZCcsICdob3N0JywgJy9maWxlbmFtZT9xdWVyeScsICcnLCAnJykKQEAgLTI1ODYsNCArMjYxOCwzIEBACiBzdWdnZXN0aW9ucywgY29ycmVjdGlvbnMgYW5kIGFzc2lzdGFuY2Ugd2l0aCB2YXJpb3VzIGRyYWZ0cyBvZiB0aGlzCiBhcnRpY2xlOiBOaWNrIENvZ2hsYW4sIFBoaWxpcCBKZW52ZXksIFJ5YW4gTG92ZXR0LCBSLiBEYXZpZCBNdXJyYXksCiBIdWdoIFNlY2tlci1XYWxrZXIuCi0KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8zLjAucnN0IGIvRG9jL3doYXRzbmV3LzMuMC5yc3QKaW5kZXggOTk0MTEzMC4uYTNkM2ZhZCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzMuMC5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzMuMC5yc3QKQEAgLTExNyw3ICsxMTcsOSBAQAogCiAgIHByaW50KCJUaGVyZSBhcmUgPCIsIDIqKjMyLCAiPiBwb3NzaWJpbGl0aWVzISIsIHNlcD0iIikKIAotd2hpY2ggcHJvZHVjZXM6Ogord2hpY2ggcHJvZHVjZXM6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCiAKICAgVGhlcmUgYXJlIDw0Mjk0OTY3Mjk2PiBwb3NzaWJpbGl0aWVzIQogCkBAIC0yMDQsMTEgKzIwNiwxMSBAQAogSW50ZWdlcnMKIC0tLS0tLS0tCiAKLSogOnBlcDpgMDIzN2A6IEVzc2VudGlhbGx5LCA6Y2xhc3M6YGxvbmdgIHJlbmFtZWQgdG8gOmNsYXNzOmBpbnRgLgorKiA6cGVwOmAyMzdgOiBFc3NlbnRpYWxseSwgOmNsYXNzOmBsb25nYCByZW5hbWVkIHRvIDpjbGFzczpgaW50YC4KICAgVGhhdCBpcywgdGhlcmUgaXMgb25seSBvbmUgYnVpbHQtaW4gaW50ZWdyYWwgdHlwZSwgbmFtZWQKICAgOmNsYXNzOmBpbnRgOyBidXQgaXQgYmVoYXZlcyBtb3N0bHkgbGlrZSB0aGUgb2xkIDpjbGFzczpgbG9uZ2AgdHlwZS4KIAotKiA6cGVwOmAwMjM4YDogQW4gZXhwcmVzc2lvbiBsaWtlIGBgMS8yYGAgcmV0dXJucyBhIGZsb2F0LiAgVXNlCisqIDpwZXA6YDIzOGA6IEFuIGV4cHJlc3Npb24gbGlrZSBgYDEvMmBgIHJldHVybnMgYSBmbG9hdC4gIFVzZQogICBgYDEvLzJgYCB0byBnZXQgdGhlIHRydW5jYXRpbmcgYmVoYXZpb3IuICAoVGhlIGxhdHRlciBzeW50YXggaGFzCiAgIGV4aXN0ZWQgZm9yIHllYXJzLCBhdCBsZWFzdCBzaW5jZSBQeXRob24gMi4yLikKIApAQCAtMzg0LDcgKzM4Niw3IEBACiAKICogRGljdGlvbmFyeSBjb21wcmVoZW5zaW9uczogYGB7azogdiBmb3IgaywgdiBpbiBzdHVmZn1gYCBtZWFucyB0aGUKICAgc2FtZSB0aGluZyBhcyBgYGRpY3Qoc3R1ZmYpYGAgYnV0IGlzIG1vcmUgZmxleGlibGUuICAoVGhpcyBpcwotICA6cGVwOmAwMjc0YCB2aW5kaWNhdGVkLiA6LSkKKyAgOnBlcDpgMjc0YCB2aW5kaWNhdGVkLiA6LSkKIAogKiBTZXQgbGl0ZXJhbHMsIGUuZy4gYGB7MSwgMn1gYC4gIE5vdGUgdGhhdCBgYHt9YGAgaXMgYW4gZW1wdHkKICAgZGljdGlvbmFyeTsgdXNlIGBgc2V0KClgYCBmb3IgYW4gZW1wdHkgc2V0LiAgU2V0IGNvbXByZWhlbnNpb25zIGFyZQpAQCAtNDY5LDcgKzQ3MSw3IEBACiAKICogVGhlIG9ubHkgYWNjZXB0YWJsZSBzeW50YXggZm9yIHJlbGF0aXZlIGltcG9ydHMgaXMgOnNhbXA6YGZyb20gLlt7bW9kdWxlfV0KICAgaW1wb3J0IHtuYW1lfWAuICBBbGwgOmtleXdvcmQ6YGltcG9ydGAgZm9ybXMgbm90IHN0YXJ0aW5nIHdpdGggYGAuYGAgYXJlCi0gIGludGVycHJldGVkIGFzIGFic29sdXRlIGltcG9ydHMuICAoOnBlcDpgMDMyOGApCisgIGludGVycHJldGVkIGFzIGFic29sdXRlIGltcG9ydHMuICAoOnBlcDpgMzI4YCkKIAogKiBDbGFzc2ljIGNsYXNzZXMgYXJlIGdvbmUuCiAKQEAgLTU1NSw5ICs1NTcsOSBAQAogCiAqIE1hbnkgb2xkIG1vZHVsZXMgd2VyZSByZW1vdmVkLiAgU29tZSwgbGlrZSA6bW9kOmBnb3BoZXJsaWJgIChubwogICBsb25nZXIgdXNlZCkgYW5kIDptb2Q6YG1kNWAgKHJlcGxhY2VkIGJ5IDptb2Q6YGhhc2hsaWJgKSwgd2VyZQotICBhbHJlYWR5IGRlcHJlY2F0ZWQgYnkgOnBlcDpgMDAwNGAuICBPdGhlcnMgd2VyZSByZW1vdmVkIGFzIGEgcmVzdWx0CisgIGFscmVhZHkgZGVwcmVjYXRlZCBieSA6cGVwOmA0YC4gIE90aGVycyB3ZXJlIHJlbW92ZWQgYXMgYSByZXN1bHQKICAgb2YgdGhlIHJlbW92YWwgb2Ygc3VwcG9ydCBmb3IgdmFyaW91cyBwbGF0Zm9ybXMgc3VjaCBhcyBJcml4LCBCZU9TCi0gIGFuZCBNYWMgT1MgOSAoc2VlIDpwZXA6YDAwMTFgKS4gIFNvbWUgbW9kdWxlcyB3ZXJlIGFsc28gc2VsZWN0ZWQgZm9yCisgIGFuZCBNYWMgT1MgOSAoc2VlIDpwZXA6YDExYCkuICBTb21lIG1vZHVsZXMgd2VyZSBhbHNvIHNlbGVjdGVkIGZvcgogICByZW1vdmFsIGluIFB5dGhvbiAzLjAgZHVlIHRvIGxhY2sgb2YgdXNlIG9yIGJlY2F1c2UgYSBiZXR0ZXIKICAgcmVwbGFjZW1lbnQgZXhpc3RzLiAgU2VlIDpwZXA6YDMxMDhgIGZvciBhbiBleGhhdXN0aXZlIGxpc3QuCiAKQEAgLTU2NSwxMCArNTY3LDEwIEBACiAgIGNvcmUgc3RhbmRhcmQgbGlicmFyeSBoYXMgcHJvdmVkIG92ZXIgdGltZSB0byBiZSBhIHBhcnRpY3VsYXIgYnVyZGVuCiAgIGZvciB0aGUgY29yZSBkZXZlbG9wZXJzIGR1ZSB0byB0ZXN0aW5nIGluc3RhYmlsaXR5IGFuZCBCZXJrZWxleSBEQidzCiAgIHJlbGVhc2Ugc2NoZWR1bGUuICBIb3dldmVyLCB0aGUgcGFja2FnZSBpcyBhbGl2ZSBhbmQgd2VsbCwKLSAgZXh0ZXJuYWxseSBtYWludGFpbmVkIGF0IGh0dHA6Ly93d3cuamNlYS5lcy9wcm9ncmFtYWNpb24vcHlic2RkYi5odG0uCisgIGV4dGVybmFsbHkgbWFpbnRhaW5lZCBhdCBodHRwczovL3d3dy5qY2VhLmVzL3Byb2dyYW1hY2lvbi9weWJzZGRiLmh0bS4KIAogKiBTb21lIG1vZHVsZXMgd2VyZSByZW5hbWVkIGJlY2F1c2UgdGhlaXIgb2xkIG5hbWUgZGlzb2JleWVkCi0gIDpwZXA6YDAwMDhgLCBvciBmb3IgdmFyaW91cyBvdGhlciByZWFzb25zLiAgSGVyZSdzIHRoZSBsaXN0OgorICA6cGVwOmA4YCwgb3IgZm9yIHZhcmlvdXMgb3RoZXIgcmVhc29ucy4gIEhlcmUncyB0aGUgbGlzdDoKIAogICA9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT0KICAgT2xkIE5hbWUgICAgICAgICAgICAgICAgIE5ldyBOYW1lCkBAIC02ODUsNyArNjg3LDcgQEAKIFRoZSBBUElzIGZvciByYWlzaW5nIGFuZCBjYXRjaGluZyBleGNlcHRpb24gaGF2ZSBiZWVuIGNsZWFuZWQgdXAgYW5kCiBuZXcgcG93ZXJmdWwgZmVhdHVyZXMgYWRkZWQ6CiAKLSogOnBlcDpgMDM1MmA6IEFsbCBleGNlcHRpb25zIG11c3QgYmUgZGVyaXZlZCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkKKyogOnBlcDpgMzUyYDogQWxsIGV4Y2VwdGlvbnMgbXVzdCBiZSBkZXJpdmVkIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQogICBmcm9tIDpleGM6YEJhc2VFeGNlcHRpb25gLiAgVGhpcyBpcyB0aGUgcm9vdCBvZiB0aGUgZXhjZXB0aW9uCiAgIGhpZXJhcmNoeS4gIFRoaXMgaXMgbm90IG5ldyBhcyBhIHJlY29tbWVuZGF0aW9uLCBidXQgdGhlCiAgICpyZXF1aXJlbWVudCogdG8gaW5oZXJpdCBmcm9tIDpleGM6YEJhc2VFeGNlcHRpb25gIGlzIG5ldy4gIChQeXRob24KQEAgLTc4Myw4ICs3ODUsOCBAQAogICA6YXR0cjpgZnVuY19jbG9zdXJlYCwgOmF0dHI6YGZ1bmNfY29kZWAsIDphdHRyOmBmdW5jX2RlZmF1bHRzYCwKICAgOmF0dHI6YGZ1bmNfZGljdGAsIDphdHRyOmBmdW5jX2RvY2AsIDphdHRyOmBmdW5jX2dsb2JhbHNgLAogICA6YXR0cjpgZnVuY19uYW1lYCB3ZXJlIHJlbmFtZWQgdG8gOmF0dHI6YF9fY2xvc3VyZV9fYCwKLSAgOmF0dHI6YF9fY29kZV9fYCwgOmF0dHI6YF9fZGVmYXVsdHNfX2AsIDphdHRyOmBfX2RpY3RfX2AsCi0gIDphdHRyOmBfX2RvY19fYCwgOmF0dHI6YF9fZ2xvYmFsc19fYCwgOmF0dHI6YF9fbmFtZV9fYCwKKyAgOmF0dHI6YF9fY29kZV9fYCwgOmF0dHI6YF9fZGVmYXVsdHNfX2AsIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCwKKyAgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19nbG9iYWxzX19gLCA6YXR0cjpgfmRlZmluaXRpb24uX19uYW1lX19gLAogICByZXNwZWN0aXZlbHkuCiAKICogOm1ldGg6YF9fbm9uemVyb19fYCBpcyBub3cgOm1ldGg6YF9fYm9vbF9fYC4KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8zLjIucnN0IGIvRG9jL3doYXRzbmV3LzMuMi5yc3QKaW5kZXggNTgyMjUwNC4uNjZjMmFlYyAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzMuMi5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzMuMi5yc3QKQEAgLTExNiw3ICsxMTYsNyBAQAogCiBFeGFtcGxlIG9mIGNhbGxpbmcgdGhlIHBhcnNlciBvbiBhIGNvbW1hbmQgc3RyaW5nOjoKIAotICAgID4+PiBjbWQgID0gJ2RlcGxveSBzbmVlenkuZXhhbXBsZS5jb20gc2xlZXB5LmV4YW1wbGUuY29tIC11IHNreWNhcHRhaW4nCisgICAgPj4+IGNtZCA9ICdkZXBsb3kgc25lZXp5LmV4YW1wbGUuY29tIHNsZWVweS5leGFtcGxlLmNvbSAtdSBza3ljYXB0YWluJwogICAgID4+PiByZXN1bHQgPSBwYXJzZXIucGFyc2VfYXJncyhjbWQuc3BsaXQoKSkKICAgICA+Pj4gcmVzdWx0LmFjdGlvbgogICAgICdkZXBsb3knCkBAIC0xNjAsNiArMTYwLDggQEAKICAgICBwYXJzZXJfbS5hZGRfYXJndW1lbnQoJy1jJywgJy0tY291cnNlJywgdHlwZT1pbnQsIHJlcXVpcmVkPVRydWUpCiAgICAgcGFyc2VyX20uYWRkX2FyZ3VtZW50KCctcycsICctLXNwZWVkJywgdHlwZT1pbnQsIGRlZmF1bHQ9MCkKIAorLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KKwogICAgICQgLi9oZWxtLnB5IC0taGVscCAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvcCBsZXZlbCBoZWxwIChsYXVuY2ggYW5kIG1vdmUpCiAgICAgJCAuL2hlbG0ucHkgbGF1bmNoIC0taGVscCAgICAgICAgICAgICAgICAgICMgaGVscCBmb3IgbGF1bmNoIG9wdGlvbnMKICAgICAkIC4vaGVsbS5weSBsYXVuY2ggLS1taXNzaWxlcyAgICAgICAgICAgICAgIyBzZXQgbWlzc2lsZXM9VHJ1ZSBhbmQgdG9ycGVkb3M9RmFsc2UKQEAgLTIxMiw3ICsyMTQsOCBAQAogCiAgICA+Pj4gaW1wb3J0IGpzb24sIGxvZ2dpbmcuY29uZmlnCiAgICA+Pj4gd2l0aCBvcGVuKCdjb25mLmpzb24nKSBhcyBmOgotICAgICAgICAgICBjb25mID0ganNvbi5sb2FkKGYpCisgICAuLi4gICAgIGNvbmYgPSBqc29uLmxvYWQoZikKKyAgIC4uLgogICAgPj4+IGxvZ2dpbmcuY29uZmlnLmRpY3RDb25maWcoY29uZikKICAgID4+PiBsb2dnaW5nLmluZm8oIlRyYW5zYWN0aW9uIGNvbXBsZXRlZCBub3JtYWxseSIpCiAgICBJTkZPICAgIDogcm9vdCAgICAgICAgICAgOiBUcmFuc2FjdGlvbiBjb21wbGV0ZWQgbm9ybWFsbHkKQEAgLTQ2MCwxNSArNDYzLDE1IEBACiAgICAgJ1RoZSB0ZXN0aW5nIHByb2plY3Qgc3RhdHVzIGlzIGdyZWVuIGFzIG9mIEZlYnJ1YXJ5IDE1LCAyMDExJwogCiAgICAgPj4+IGNsYXNzIExvd2VyQ2FzZWREaWN0KGRpY3QpOgotICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5Lmxvd2VyKCkpCisgICAgLi4uICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAuLi4gICAgICAgICByZXR1cm4gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkubG93ZXIoKSkKICAgICA+Pj4gbGNkID0gTG93ZXJDYXNlZERpY3QocGFydD0nd2lkZ2V0cycsIHF1YW50aXR5PTEwKQogICAgID4+PiAnVGhlcmUgYXJlIHtRVUFOVElUWX0ge1BhcnR9IGluIHN0b2NrJy5mb3JtYXRfbWFwKGxjZCkKICAgICAnVGhlcmUgYXJlIDEwIHdpZGdldHMgaW4gc3RvY2snCiAKICAgICA+Pj4gY2xhc3MgUGxhY2Vob2xkZXJEaWN0KGRpY3QpOgotICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICc8e30+Jy5mb3JtYXQoa2V5KQorICAgIC4uLiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgLi4uICAgICAgICAgcmV0dXJuICc8e30+Jy5mb3JtYXQoa2V5KQogICAgID4+PiAnSGVsbG8ge25hbWV9LCB3ZWxjb21lIHRvIHtsb2NhdGlvbn0nLmZvcm1hdF9tYXAoUGxhY2Vob2xkZXJEaWN0KCkpCiAgICAgJ0hlbGxvIDxuYW1lPiwgd2VsY29tZSB0byA8bG9jYXRpb24+JwogCkBAIC00NzcsNyArNDgwLDkgQEAKIAogKiBUaGUgaW50ZXJwcmV0ZXIgY2FuIG5vdyBiZSBzdGFydGVkIHdpdGggYSBxdWlldCBvcHRpb24sIGBgLXFgYCwgdG8gcHJldmVudAogICB0aGUgY29weXJpZ2h0IGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gYmVpbmcgZGlzcGxheWVkIGluIHRoZSBpbnRlcmFjdGl2ZQotICBtb2RlLiAgVGhlIG9wdGlvbiBjYW4gYmUgaW50cm9zcGVjdGVkIHVzaW5nIHRoZSA6YXR0cjpgc3lzLmZsYWdzYCBhdHRyaWJ1dGU6OgorICBtb2RlLiAgVGhlIG9wdGlvbiBjYW4gYmUgaW50cm9zcGVjdGVkIHVzaW5nIHRoZSA6YXR0cjpgc3lzLmZsYWdzYCBhdHRyaWJ1dGU6CisKKyAgLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgICQgcHl0aG9uIC1xCiAgICAgPj4+IHN5cy5mbGFncwpAQCAtNDk2LDEwICs1MDEsMTAgQEAKICAgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2g6OgogCiAgICAgPj4+IGNsYXNzIEE6Ci0gICAgICAgICAgICBAcHJvcGVydHkKLSAgICAgICAgICAgIGRlZiBmKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAxIC8vIDAKLQorICAgIC4uLiAgICAgQHByb3BlcnR5CisgICAgLi4uICAgICBkZWYgZihzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gMSAvLyAwCisgICAgLi4uCiAgICAgPj4+IGEgPSBBKCkKICAgICA+Pj4gaGFzYXR0cihhLCAnZicpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgpAQCAtNTM3LDcgKzU0Miw3IEBACiAKICAgICAgICBkZWYgb3V0ZXIoeCk6CiAgICAgICAgICAgIGRlZiBpbm5lcigpOgotICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgICAgcmV0dXJuIHgKICAgICAgICAgICAgaW5uZXIoKQogICAgICAgICAgICBkZWwgeAogCkBAIC01NDcsMTIgKzU1MiwxMiBAQAogCiAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgZGVmIHByaW50X2Vycm9yKCk6Ci0gICAgICAgICAgICAgIHByaW50KGUpCisgICAgICAgICAgICAgICBwcmludChlKQogICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgIHNvbWV0aGluZworICAgICAgICAgICAgICAgc29tZXRoaW5nCiAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoKQotICAgICAgICAgICAgICAjIGltcGxpY2l0ICJkZWwgZSIgaGVyZQorICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoKQorICAgICAgICAgICAgICAgIyBpbXBsaWNpdCAiZGVsIGUiIGhlcmUKIAogICAoU2VlIDppc3N1ZTpgNDYxN2AuKQogCkBAIC01NzIsNyArNTc3LDkgQEAKICAgYnkgQmVuamFtaW4gUGV0ZXJzb24gaW4gOmlzc3VlOmA4NDEzYC4pCiAKICogV2FybmluZ3MgYXJlIG5vdyBlYXNpZXIgdG8gY29udHJvbCB1c2luZyB0aGUgOmVudnZhcjpgUFlUSE9OV0FSTklOR1NgCi0gIGVudmlyb25tZW50IHZhcmlhYmxlIGFzIGFuIGFsdGVybmF0aXZlIHRvIHVzaW5nIGBgLVdgYCBhdCB0aGUgY29tbWFuZCBsaW5lOjoKKyAgZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgYGAtV2BgIGF0IHRoZSBjb21tYW5kIGxpbmU6CisKKyAgLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgICQgZXhwb3J0IFBZVEhPTldBUk5JTkdTPSdpZ25vcmU6OlJ1bnRpbWVXYXJuaW5nOjosb25jZTo6VW5pY29kZVdhcm5pbmc6OicKIApAQCAtNTk0LDcgKzYwMSw5IEBACiAgIG9iamVjdCBlbnN1cmVzIGl0IGNsb3NlcyB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIHJlc291cmNlCiAgICh1c3VhbGx5LCBhIGZpbGUgZGVzY3JpcHRvciksIHRoZSBkZWxheSBpbiBkZWFsbG9jYXRpbmcgdGhlIG9iamVjdCBjb3VsZAogICBwcm9kdWNlIHZhcmlvdXMgaXNzdWVzLCBlc3BlY2lhbGx5IHVuZGVyIFdpbmRvd3MuICBIZXJlIGlzIGFuIGV4YW1wbGUKLSAgb2YgZW5hYmxpbmcgdGhlIHdhcm5pbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lOjoKKyAgb2YgZW5hYmxpbmcgdGhlIHdhcm5pbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lOgorCisgIC4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICAgICQgcHl0aG9uIC1xIC1XZGVmYXVsdAogICAgICAgPj4+IGYgPSBvcGVuKCJmb28iLCAid2IiKQpAQCAtNzY5LDggKzc3OCw4IEBACiAKICAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyIGFuZCBpbmNvcnBvcmF0aW5nIGRlc2lnbiBpZGVhcyBmcm9tIEppbQogICBCYWtlciwgTWlraSBUZWJla2EsIGFuZCBOaWNrIENvZ2hsYW47IHNlZSBgcmVjaXBlIDQ5ODI0NQotICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNDk4MjQ1PmBfXCwgYHJlY2lwZSA1Nzc0NzkKLSAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzQ3OT5gX1wsIDppc3N1ZTpgMTA1ODZgLCBhbmQKKyAgPGh0dHBzOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy80OTgyNDU+YF9cLCBgcmVjaXBlIDU3NzQ3OQorICA8aHR0cHM6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzQ3OT5gX1wsIDppc3N1ZTpgMTA1ODZgLCBhbmQKICAgOmlzc3VlOmAxMDU5M2AuKQogCiAqIFRoZSA6ZnVuYzpgZnVuY3Rvb2xzLndyYXBzYCBkZWNvcmF0b3Igbm93IGFkZHMgYSA6YXR0cjpgX193cmFwcGVkX19gIGF0dHJpYnV0ZQpAQCAtNzk5LDYgKzgwOCw3IEBACiAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA9PQogICAgICAgICAgICAgICAgICAgICAob3RoZXIubGFzdG5hbWUubG93ZXIoKSwgb3RoZXIuZmlyc3RuYW1lLmxvd2VyKCkpKQorCiAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA8CiAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCkBAIC04NDUsOSArODU1LDkgQEAKIAogKiBUaGUgOmNsYXNzOmBjb2xsZWN0aW9ucy5Db3VudGVyYCBjbGFzcyBub3cgaGFzIHR3byBmb3JtcyBvZiBpbi1wbGFjZQogICBzdWJ0cmFjdGlvbiwgdGhlIGV4aXN0aW5nICotPSogb3BlcmF0b3IgZm9yIGBzYXR1cmF0aW5nIHN1YnRyYWN0aW9uCi0gIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NhdHVyYXRpb25fYXJpdGhtZXRpYz5gXyBhbmQgdGhlIG5ldworICA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2F0dXJhdGlvbl9hcml0aG1ldGljPmBfIGFuZCB0aGUgbmV3CiAgIDptZXRoOmB+Y29sbGVjdGlvbnMuQ291bnRlci5zdWJ0cmFjdGAgbWV0aG9kIGZvciByZWd1bGFyIHN1YnRyYWN0aW9uLiAgVGhlCi0gIGZvcm1lciBpcyBzdWl0YWJsZSBmb3IgYG11bHRpc2V0cyA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NdWx0aXNldD5gXworICBmb3JtZXIgaXMgc3VpdGFibGUgZm9yIGBtdWx0aXNldHMgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL011bHRpc2V0PmBfCiAgIHdoaWNoIG9ubHkgaGF2ZSBwb3NpdGl2ZSBjb3VudHMsIGFuZCB0aGUgbGF0dGVyIGlzIG1vcmUgc3VpdGFibGUgZm9yIHVzZSBjYXNlcwogICB0aGF0IGFsbG93IG5lZ2F0aXZlIGNvdW50czoKIApAQCAtOTA2LDcgKzkxNiw3IEBACiBjb21wbGV0ZS4KIAogQmFycmllcnMgY2FuIHdvcmsgd2l0aCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHRocmVhZHMuICBUaGlzIGlzIGEgZ2VuZXJhbGl6YXRpb24KLW9mIGEgYFJlbmRlenZvdXMgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3luY2hyb25vdXNfcmVuZGV6dm91cz5gXyB3aGljaAorb2YgYSBgUmVuZGV6dm91cyA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3luY2hyb25vdXNfcmVuZGV6dm91cz5gXyB3aGljaAogaXMgZGVmaW5lZCBmb3Igb25seSB0d28gdGhyZWFkcy4KIAogSW1wbGVtZW50ZWQgYXMgYSB0d28tcGhhc2UgY3ljbGljIGJhcnJpZXIsIDpjbGFzczpgfnRocmVhZGluZy5CYXJyaWVyYCBvYmplY3RzCkBAIC05NDIsNyArOTUyLDcgQEAKICAgICBkZWYgZ2V0X3ZvdGVzKHNpdGUpOgogICAgICAgICBiYWxsb3RzID0gY29uZHVjdF9lbGVjdGlvbihzaXRlKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhbGxfcG9sbHNfY2xvc2VkLndhaXQodGltZW91dCA9IG1pZG5pZ2h0IC0gdGltZS5ub3coKSkKKyAgICAgICAgICAgIGFsbF9wb2xsc19jbG9zZWQud2FpdCh0aW1lb3V0PW1pZG5pZ2h0IC0gdGltZS5ub3coKSkKICAgICAgICAgZXhjZXB0IEJyb2tlbkJhcnJpZXJFcnJvcjoKICAgICAgICAgICAgIGxvY2tib3ggPSBzZWFsX2JhbGxvdHMoYmFsbG90cykKICAgICAgICAgICAgIHF1ZXVlLnB1dChsb2NrYm94KQpAQCAtOTU1LDcgKzk2NSw3IEBACiBzZWFsZWQgYW5kIGRlcG9zaXRlZCBpbiBhIHF1ZXVlIGZvciBsYXRlciBoYW5kbGluZy4KIAogU2VlIGBCYXJyaWVyIFN5bmNocm9uaXphdGlvbiBQYXR0ZXJucwotPGh0dHA6Ly9wYXJsYWIuZWVjcy5iZXJrZWxleS5lZHUvd2lraS9fbWVkaWEvcGF0dGVybnMvcGFyYXBsb3BfZzFfMy5wZGY+YF8gZm9yCis8aHR0cHM6Ly9wYXJsYWIuZWVjcy5iZXJrZWxleS5lZHUvd2lraS9fbWVkaWEvcGF0dGVybnMvcGFyYXBsb3BfZzFfMy5wZGY+YF8gZm9yCiBtb3JlIGV4YW1wbGVzIG9mIGhvdyBiYXJyaWVycyBjYW4gYmUgdXNlZCBpbiBwYXJhbGxlbCBjb21wdXRpbmcuICBBbHNvLCB0aGVyZSBpcwogYSBzaW1wbGUgYnV0IHRob3JvdWdoIGV4cGxhbmF0aW9uIG9mIGJhcnJpZXJzIGluIGBUaGUgTGl0dGxlIEJvb2sgb2YgU2VtYXBob3JlcwogPGh0dHA6Ly9ncmVlbnRlYXByZXNzLmNvbS9zZW1hcGhvcmVzL2Rvd25leTA4c2VtYXBob3Jlcy5wZGY+YF8sICpzZWN0aW9uIDMuNiouCkBAIC0xMDQzLDcgKzEwNTMsNyBAQAogMC4wMTM3NjU3NjI0Njc2NTI5MDkKIAogVGhlIDpmdW5jOmB+bWF0aC5lcmZgIGZ1bmN0aW9uIGNvbXB1dGVzIGEgcHJvYmFiaWxpdHkgaW50ZWdyYWwgb3IgYEdhdXNzaWFuCi1lcnJvciBmdW5jdGlvbiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FcnJvcl9mdW5jdGlvbj5gXy4gIFRoZQorZXJyb3IgZnVuY3Rpb24gPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Vycm9yX2Z1bmN0aW9uPmBfLiAgVGhlCiBjb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uLCA6ZnVuYzpgfm1hdGguZXJmY2AsIGlzIGBgMSAtIGVyZih4KWBgOgogCiA+Pj4gZXJmKDEuMC9zcXJ0KDIuMCkpICAgIyBwb3J0aW9uIG9mIG5vcm1hbCBkaXN0cmlidXRpb24gd2l0aGluIDEgc3RhbmRhcmQgZGV2aWF0aW9uCkBAIC0xMDU0LDcgKzEwNjQsNyBAQAogMS4wCiAKIFRoZSA6ZnVuYzpgfm1hdGguZ2FtbWFgIGZ1bmN0aW9uIGlzIGEgY29udGludW91cyBleHRlbnNpb24gb2YgdGhlIGZhY3RvcmlhbAotZnVuY3Rpb24uICBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HYW1tYV9mdW5jdGlvbiBmb3IgZGV0YWlscy4gIEJlY2F1c2UKK2Z1bmN0aW9uLiAgU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dhbW1hX2Z1bmN0aW9uIGZvciBkZXRhaWxzLiAgQmVjYXVzZQogdGhlIGZ1bmN0aW9uIGlzIHJlbGF0ZWQgdG8gZmFjdG9yaWFscywgaXQgZ3Jvd3MgbGFyZ2UgZXZlbiBmb3Igc21hbGwgdmFsdWVzIG9mCiAqeCosIHNvIHRoZXJlIGlzIGFsc28gYSA6ZnVuYzpgfm1hdGgubGdhbW1hYCBmdW5jdGlvbiBmb3IgY29tcHV0aW5nIHRoZSBuYXR1cmFsCiBsb2dhcml0aG0gb2YgdGhlIGdhbW1hIGZ1bmN0aW9uOgpAQCAtMTA5NywxNiArMTEwNywxNiBAQAogICAgID4+PiBSRUNfTEVOLCBMT0NfU1RBUlQsIExPQ19MRU4gPSAzNCwgNywgMTEKIAogICAgID4+PiBkZWYgY2hhbmdlX2xvY2F0aW9uKGJ1ZmZlciwgcmVjb3JkX251bWJlciwgbG9jYXRpb24pOgotICAgICAgICAgICAgc3RhcnQgPSByZWNvcmRfbnVtYmVyICogUkVDX0xFTiArIExPQ19TVEFSVAotICAgICAgICAgICAgYnVmZmVyW3N0YXJ0OiBzdGFydCtMT0NfTEVOXSA9IGxvY2F0aW9uCisgICAgLi4uICAgICBzdGFydCA9IHJlY29yZF9udW1iZXIgKiBSRUNfTEVOICsgTE9DX1NUQVJUCisgICAgLi4uICAgICBidWZmZXJbc3RhcnQ6IHN0YXJ0K0xPQ19MRU5dID0gbG9jYXRpb24KIAogICAgID4+PiBpbXBvcnQgaW8KIAogICAgID4+PiBieXRlX3N0cmVhbSA9IGlvLkJ5dGVzSU8oCi0gICAgICAgIGInRzM4MDUgIHN0b3Jlcm9vbSAgTWFpbiBjaGFzc2lzICAgICcKLSAgICAgICAgYidYNzg5OSAgc2hpcHBpbmcgICBSZXNlcnZlIGNvZyAgICAgJwotICAgICAgICBiJ0w2OTg4ICByZWNlaXZpbmcgIFByaW1hcnkgc3Byb2NrZXQnCi0gICAgKQorICAgIC4uLiAgICAgYidHMzgwNSAgc3RvcmVyb29tICBNYWluIGNoYXNzaXMgICAgJworICAgIC4uLiAgICAgYidYNzg5OSAgc2hpcHBpbmcgICBSZXNlcnZlIGNvZyAgICAgJworICAgIC4uLiAgICAgYidMNjk4OCAgcmVjZWl2aW5nICBQcmltYXJ5IHNwcm9ja2V0JworICAgIC4uLiApCiAgICAgPj4+IGJ1ZmZlciA9IGJ5dGVfc3RyZWFtLmdldGJ1ZmZlcigpCiAgICAgPj4+IGNoYW5nZV9sb2NhdGlvbihidWZmZXIsIDEsIGInd2FyZWhvdXNlICAnKQogICAgID4+PiBjaGFuZ2VfbG9jYXRpb24oYnVmZmVyLCAwLCBiJ3Nob3dyb29tICAgJykKQEAgLTExMzEsMTAgKzExNDEsMTAgQEAKIDptZXRoOmBfX3JlcHJfX2AgYW5kIHN1YnN0aXR1dGluZyBhIHBsYWNlaG9sZGVyIHN0cmluZyBpbnN0ZWFkOjoKIAogICAgICAgICA+Pj4gY2xhc3MgTXlMaXN0KGxpc3QpOgotICAgICAgICAgICAgICAgIEByZWN1cnNpdmVfcmVwcigpCi0gICAgICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwnICsgJ3wnLmpvaW4obWFwKHJlcHIsIHNlbGYpKSArICc+JwotCisgICAgICAgIC4uLiAgICAgQHJlY3Vyc2l2ZV9yZXByKCkKKyAgICAgICAgLi4uICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIC4uLiAgICAgICAgIHJldHVybiAnPCcgKyAnfCcuam9pbihtYXAocmVwciwgc2VsZikpICsgJz4nCisgICAgICAgIC4uLgogICAgICAgICA+Pj4gbSA9IE15TGlzdCgnYWJjJykKICAgICAgICAgPj4+IG0uYXBwZW5kKG0pCiAgICAgICAgID4+PiBtLmFwcGVuZCgneCcpCkBAIC0xMTk3LDggKzEyMDcsOCBAQAogICAgID4+PiB3LndyaXRlaGVhZGVyKCkKICAgICAibmFtZSIsImRlcHQiCiAgICAgPj4+IHcud3JpdGVyb3dzKFsKLSAgICAgICAgICAgIHsnbmFtZSc6ICd0b20nLCAnZGVwdCc6ICdhY2NvdW50aW5nJ30sCi0gICAgICAgICAgICB7J25hbWUnOiAnc3VzYW4nLCAnZGVwdCc6ICdTYWxlc2wnfV0pCisgICAgLi4uICAgICB7J25hbWUnOiAndG9tJywgJ2RlcHQnOiAnYWNjb3VudGluZyd9LAorICAgIC4uLiAgICAgeyduYW1lJzogJ3N1c2FuJywgJ2RlcHQnOiAnU2FsZXNsJ31dKQogICAgICJ0b20iLCJhY2NvdW50aW5nIgogICAgICJzdXNhbiIsInNhbGVzIgogCkBAIC0xNDIzLDE0ICsxNDMzLDE0IEBACiAgICAgPj4+IGltcG9ydCB0YXJmaWxlLCBnbG9iCiAKICAgICA+Pj4gZGVmIG15ZmlsdGVyKHRhcmluZm8pOgotICAgICAgICAgICBpZiB0YXJpbmZvLmlzZmlsZSgpOiAgICAgICAgICAgICAjIG9ubHkgc2F2ZSByZWFsIGZpbGVzCi0gICAgICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9ICdtb250eScgICAgICMgcmVkYWN0IHRoZSB1c2VyIG5hbWUKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFyaW5mbworICAgIC4uLiAgICAgaWYgdGFyaW5mby5pc2ZpbGUoKTogICAgICAgICAgICAgIyBvbmx5IHNhdmUgcmVhbCBmaWxlcworICAgIC4uLiAgICAgICAgIHRhcmluZm8udW5hbWUgPSAnbW9udHknICAgICAgIyByZWRhY3QgdGhlIHVzZXIgbmFtZQorICAgIC4uLiAgICAgICAgIHJldHVybiB0YXJpbmZvCiAKICAgICA+Pj4gd2l0aCB0YXJmaWxlLm9wZW4obmFtZT0nbXlhcmNoaXZlLnRhci5neicsIG1vZGU9J3c6Z3onKSBhcyB0ZjoKLSAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBnbG9iLmdsb2IoJyoudHh0Jyk6Ci0gICAgICAgICAgICAgICAgdGYuYWRkKGZpbGVuYW1lLCBmaWx0ZXI9bXlmaWx0ZXIpCi0gICAgICAgICAgICB0Zi5saXN0KCkKKyAgICAuLi4gICAgIGZvciBmaWxlbmFtZSBpbiBnbG9iLmdsb2IoJyoudHh0Jyk6CisgICAgLi4uICAgICAgICAgdGYuYWRkKGZpbGVuYW1lLCBmaWx0ZXI9bXlmaWx0ZXIpCisgICAgLi4uICAgICB0Zi5saXN0KCkKICAgICAtcnctci0tci0tIG1vbnR5LzUwMSAgICAgICAgOTAyIDIwMTEtMDEtMjYgMTc6NTk6MTEgYW5ub3RhdGlvbnMudHh0CiAgICAgLXJ3LXItLXItLSBtb250eS81MDEgICAgICAgIDEyMyAyMDExLTAxLTI2IDE3OjU5OjExIGdlbmVyYWxfcXVlc3Rpb25zLnR4dAogICAgIC1ydy1yLS1yLS0gbW9udHkvNTAxICAgICAgIDM1MTQgMjAxMS0wMS0yNiAxNzo1OToxMSBwcmlvbi50eHQKQEAgLTE1MzYsMjYgKzE1NDYsMjYgQEAKIAogICAgID4+PiBpbXBvcnQgc2h1dGlsLCBwcHJpbnQKIAotICAgID4+PiBvcy5jaGRpcignbXlkYXRhJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2UgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyAgICA+Pj4gb3MuY2hkaXIoJ215ZGF0YScpICAjIGNoYW5nZSB0byB0aGUgc291cmNlIGRpcmVjdG9yeQogICAgID4+PiBmID0gc2h1dGlsLm1ha2VfYXJjaGl2ZSgnL3Zhci9iYWNrdXAvbXlkYXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ppcCcpICAgICAgICAgICAgICAgICAgICMgYXJjaGl2ZSB0aGUgY3VycmVudCBkaXJlY3RvcnkKLSAgICA+Pj4gZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgbmFtZSBvZiBhcmNoaXZlCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICd6aXAnKSAgICAgICMgYXJjaGl2ZSB0aGUgY3VycmVudCBkaXJlY3RvcnkKKyAgICA+Pj4gZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IHRoZSBuYW1lIG9mIGFyY2hpdmUKICAgICAnL3Zhci9iYWNrdXAvbXlkYXRhLnppcCcKLSAgICA+Pj4gb3MuY2hkaXIoJ3RtcCcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlIHRvIGFuIHVucGFja2luZworICAgID4+PiBvcy5jaGRpcigndG1wJykgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZSB0byBhbiB1bnBhY2tpbmcKICAgICA+Pj4gc2h1dGlsLnVucGFja19hcmNoaXZlKCcvdmFyL2JhY2t1cC9teWRhdGEuemlwJykgICMgcmVjb3ZlciB0aGUgZGF0YQogCi0gICAgPj4+IHBwcmludC5wcHJpbnQoc2h1dGlsLmdldF9hcmNoaXZlX2Zvcm1hdHMoKSkgICAgICAjIGRpc3BsYXkga25vd24gZm9ybWF0cworICAgID4+PiBwcHJpbnQucHByaW50KHNodXRpbC5nZXRfYXJjaGl2ZV9mb3JtYXRzKCkpICAjIGRpc3BsYXkga25vd24gZm9ybWF0cwogICAgIFsoJ2J6dGFyJywgImJ6aXAyJ2VkIHRhci1maWxlIiksCiAgICAgICgnZ3p0YXInLCAiZ3ppcCdlZCB0YXItZmlsZSIpLAogICAgICAoJ3RhcicsICd1bmNvbXByZXNzZWQgdGFyIGZpbGUnKSwKICAgICAgKCd6aXAnLCAnWklQIGZpbGUnKV0KIAotICAgID4+PiBzaHV0aWwucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoICAgICAgICAgICAgICAgICAgIyByZWdpc3RlciBhIG5ldyBhcmNoaXZlIGZvcm1hdAotICAgICAgICAgICAgbmFtZSA9ICd4eicsCi0gICAgICAgICAgICBmdW5jdGlvbiA9IHh6LmNvbXByZXNzLCAgICAgICAgICAgICAgICAgICAgICAjIGNhbGxhYmxlIGFyY2hpdmluZyBmdW5jdGlvbgotICAgICAgICAgICAgZXh0cmFfYXJncyA9IFsoJ2xldmVsJywgOCldLCAgICAgICAgICAgICAgICAgIyBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uCi0gICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICd4eiBjb21wcmVzc2lvbicKLSAgICApCisgICAgPj4+IHNodXRpbC5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCggICAgICMgcmVnaXN0ZXIgYSBuZXcgYXJjaGl2ZSBmb3JtYXQKKyAgICAuLi4gICAgIG5hbWU9J3h6JywKKyAgICAuLi4gICAgIGZ1bmN0aW9uPXh6LmNvbXByZXNzLCAgICAgICAgICAgIyBjYWxsYWJsZSBhcmNoaXZpbmcgZnVuY3Rpb24KKyAgICAuLi4gICAgIGV4dHJhX2FyZ3M9WygnbGV2ZWwnLCA4KV0sICAgICAgIyBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uCisgICAgLi4uICAgICBkZXNjcmlwdGlvbj0neHogY29tcHJlc3Npb24nCisgICAgLi4uICkKIAogKENvbnRyaWJ1dGVkIGJ5IFRhcmVrIFppYWTDqS4pCiAKQEAgLTE2MTgsNyArMTYyOCw3IEBACiAqIFRoZSA6ZnVuYzpgc3NsLndyYXBfc29ja2V0YCBjb25zdHJ1Y3RvciBmdW5jdGlvbiBub3cgdGFrZXMgYSAqY2lwaGVycyoKICAgYXJndW1lbnQuICBUaGUgKmNpcGhlcnMqIHN0cmluZyBsaXN0cyB0aGUgYWxsb3dlZCBlbmNyeXB0aW9uIGFsZ29yaXRobXMgdXNpbmcKICAgdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhlIGBPcGVuU1NMIGRvY3VtZW50YXRpb24KLSAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVJfTElTVF9GT1JNQVQ+YF9fLgorICA8aHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVItTElTVC1GT1JNQVQ+YF9fLgogCiAqIFdoZW4gbGlua2VkIGFnYWluc3QgcmVjZW50IHZlcnNpb25zIG9mIE9wZW5TU0wsIHRoZSA6bW9kOmBzc2xgIG1vZHVsZSBub3cKICAgc3VwcG9ydHMgdGhlIFNlcnZlciBOYW1lIEluZGljYXRpb24gZXh0ZW5zaW9uIHRvIHRoZSBUTFMgcHJvdG9jb2wsIGFsbG93aW5nCkBAIC0xNzE4LDcgKzE3MjgsOSBAQAogICB0ZXN0IGRpc2NvdmVyeSBjYW4gZmluZCB0ZXN0cyB3aXRoaW4gcGFja2FnZXMsIGxvY2F0aW5nIGFueSB0ZXN0IGltcG9ydGFibGUKICAgZnJvbSB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gIFRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IGNhbiBiZSBzcGVjaWZpZWQgd2l0aAogICB0aGUgYC10YCBvcHRpb24sIGEgcGF0dGVybiBmb3IgbWF0Y2hpbmcgZmlsZXMgd2l0aCBgYC1wYGAsIGFuZCBhIGRpcmVjdG9yeSB0bwotICBzdGFydCBkaXNjb3Zlcnkgd2l0aCBgYC1zYGA6OgorICBzdGFydCBkaXNjb3Zlcnkgd2l0aCBgYC1zYGA6CisKKyAgLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgICQgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIC1zIG15X3Byb2pfZGlyIC1wIF90ZXN0LnB5CiAKQEAgLTE4NTQsNyArMTg2Niw3IEBACiAKICAgICA+Pj4gZnJvbSBpbnNwZWN0IGltcG9ydCBnZXRnZW5lcmF0b3JzdGF0ZQogICAgID4+PiBkZWYgZ2VuKCk6Ci0gICAgICAgICAgICB5aWVsZCAnZGVtbycKKyAgICAuLi4gICAgIHlpZWxkICdkZW1vJwogICAgID4+PiBnID0gZ2VuKCkKICAgICA+Pj4gZ2V0Z2VuZXJhdG9yc3RhdGUoZykKICAgICAnR0VOX0NSRUFURUQnCkBAIC0xODc0LDExICsxODg2LDExIEBACiAgIGNoYW5nZSBzdGF0ZSB3aGlsZSBpdCBpcyBzZWFyY2hpbmc6OgogCiAgICAgPj4+IGNsYXNzIEE6Ci0gICAgICAgICAgICBAcHJvcGVydHkKLSAgICAgICAgICAgIGRlZiBmKHNlbGYpOgotICAgICAgICAgICAgICAgIHByaW50KCdSdW5uaW5nJykKLSAgICAgICAgICAgICAgICByZXR1cm4gMTAKLQorICAgIC4uLiAgICAgQHByb3BlcnR5CisgICAgLi4uICAgICBkZWYgZihzZWxmKToKKyAgICAuLi4gICAgICAgICBwcmludCgnUnVubmluZycpCisgICAgLi4uICAgICAgICAgcmV0dXJuIDEwCisgICAgLi4uCiAgICAgPj4+IGEgPSBBKCkKICAgICA+Pj4gZ2V0YXR0cihhLCAnZicpCiAgICAgUnVubmluZwpAQCAtMTg5Myw3ICsxOTA1LDkgQEAKIAogVGhlIDptb2Q6YHB5ZG9jYCBtb2R1bGUgbm93IHByb3ZpZGVzIGEgbXVjaC1pbXByb3ZlZCBXZWIgc2VydmVyIGludGVyZmFjZSwgYXMKIHdlbGwgYXMgYSBuZXcgY29tbWFuZC1saW5lIG9wdGlvbiBgYC1iYGAgdG8gYXV0b21hdGljYWxseSBvcGVuIGEgYnJvd3NlciB3aW5kb3cKLXRvIGRpc3BsYXkgdGhhdCBzZXJ2ZXI6OgordG8gZGlzcGxheSB0aGF0IHNlcnZlcjoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgICQgcHlkb2MzLjIgLWIKIApAQCAtMTk5Niw3ICsyMDEwLDkgQEAKICAgICAnL1VzZXJzL3JheW1vbmRoZXR0aW5nZXIvTGlicmFyeS9QeXRob24vMy4yL2xpYi9weXRob24vc2l0ZS1wYWNrYWdlcycKIAogQ29udmVuaWVudGx5LCBzb21lIG9mIHNpdGUncyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbSB0aGUKLWNvbW1hbmQtbGluZTo6Citjb21tYW5kLWxpbmU6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICAkIHB5dGhvbiAtbSBzaXRlIC0tdXNlci1iYXNlCiAgICAgL1VzZXJzL3JheW1vbmRoZXR0aW5nZXIvLmxvY2FsCkBAIC0yMDI5LDcgKzIwNDUsOSBAQAogKiA6ZnVuYzpgfnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnNgIHJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIHBsYXRmb3JtIHNwZWNpZmljCiAgIHZhcmlhYmxlcy4KIAotVGhlcmUgaXMgYWxzbyBhIGNvbnZlbmllbnQgY29tbWFuZC1saW5lIGludGVyZmFjZTo6CitUaGVyZSBpcyBhbHNvIGEgY29udmVuaWVudCBjb21tYW5kLWxpbmUgaW50ZXJmYWNlOgorCisuLiBjb2RlLWJsb2NrOjogZG9zY29uCiAKICAgQzpcUHl0aG9uMzI+cHl0aG9uIC1tIHN5c2NvbmZpZwogICBQbGF0Zm9ybTogIndpbjMyIgpAQCAtMjEwMiwxOSArMjEyMCwxOSBAQAogCiAgICAgPj4+IHBhcnNlciA9IENvbmZpZ1BhcnNlcigpCiAgICAgPj4+IHBhcnNlci5yZWFkX3N0cmluZygiIiIKLSAgICBbREVGQVVMVF0KLSAgICBsb2NhdGlvbiA9IHVwcGVyIGxlZnQKLSAgICB2aXNpYmxlID0geWVzCi0gICAgZWRpdGFibGUgPSBubwotICAgIGNvbG9yID0gYmx1ZQotCi0gICAgW21haW5dCi0gICAgdGl0bGUgPSBNYWluIE1lbnUKLSAgICBjb2xvciA9IGdyZWVuCi0KLSAgICBbb3B0aW9uc10KLSAgICB0aXRsZSA9IE9wdGlvbnMKLSAgICAiIiIpCisgICAgLi4uIFtERUZBVUxUXQorICAgIC4uLiBsb2NhdGlvbiA9IHVwcGVyIGxlZnQKKyAgICAuLi4gdmlzaWJsZSA9IHllcworICAgIC4uLiBlZGl0YWJsZSA9IG5vCisgICAgLi4uIGNvbG9yID0gYmx1ZQorICAgIC4uLgorICAgIC4uLiBbbWFpbl0KKyAgICAuLi4gdGl0bGUgPSBNYWluIE1lbnUKKyAgICAuLi4gY29sb3IgPSBncmVlbgorICAgIC4uLgorICAgIC4uLiBbb3B0aW9uc10KKyAgICAuLi4gdGl0bGUgPSBPcHRpb25zCisgICAgLi4uICIiIikKICAgICA+Pj4gcGFyc2VyWydtYWluJ11bJ2NvbG9yJ10KICAgICAnZ3JlZW4nCiAgICAgPj4+IHBhcnNlclsnbWFpbiddWydlZGl0YWJsZSddCkBAIC0yMTM4LDI0ICsyMTU2LDI0IEBACiAKICAgPj4+IHBhcnNlciA9IENvbmZpZ1BhcnNlcihpbnRlcnBvbGF0aW9uPUV4dGVuZGVkSW50ZXJwb2xhdGlvbigpKQogICA+Pj4gcGFyc2VyLnJlYWRfZGljdCh7J2J1aWxkb3V0JzogeydkaXJlY3RvcnknOiAnL2hvbWUvYW1idi96b3BlOSd9LAotICAgICAgICAgICAgICAgICAgICAgICAgJ2N1c3RvbSc6IHsncHJlZml4JzogJy91c3IvbG9jYWwnfX0pCisgIC4uLiAgICAgICAgICAgICAgICAgICAnY3VzdG9tJzogeydwcmVmaXgnOiAnL3Vzci9sb2NhbCd9fSkKICAgPj4+IHBhcnNlci5yZWFkX3N0cmluZygiIiIKLSAgICAgIFtidWlsZG91dF0KLSAgICAgIHBhcnRzID0KLSAgICAgICAgem9wZTkKLSAgICAgICAgaW5zdGFuY2UKLSAgICAgIGZpbmQtbGlua3MgPQotICAgICAgICAke2J1aWxkb3V0OmRpcmVjdG9yeX0vZG93bmxvYWRzL2Rpc3QKLQotICAgICAgW3pvcGU5XQotICAgICAgcmVjaXBlID0gcGxvbmUucmVjaXBlLnpvcGU5aW5zdGFsbAotICAgICAgbG9jYXRpb24gPSAvb3B0L3pvcGUKLQotICAgICAgW2luc3RhbmNlXQotICAgICAgcmVjaXBlID0gcGxvbmUucmVjaXBlLnpvcGU5aW5zdGFuY2UKLSAgICAgIHpvcGU5LWxvY2F0aW9uID0gJHt6b3BlOTpsb2NhdGlvbn0KLSAgICAgIHpvcGUtY29uZiA9ICR7Y3VzdG9tOnByZWZpeH0vZXRjL3pvcGUuY29uZgotICAgICAgIiIiKQorICAuLi4gW2J1aWxkb3V0XQorICAuLi4gcGFydHMgPQorICAuLi4gICB6b3BlOQorICAuLi4gICBpbnN0YW5jZQorICAuLi4gZmluZC1saW5rcyA9CisgIC4uLiAgICR7YnVpbGRvdXQ6ZGlyZWN0b3J5fS9kb3dubG9hZHMvZGlzdAorICAuLi4KKyAgLi4uIFt6b3BlOV0KKyAgLi4uIHJlY2lwZSA9IHBsb25lLnJlY2lwZS56b3BlOWluc3RhbGwKKyAgLi4uIGxvY2F0aW9uID0gL29wdC96b3BlCisgIC4uLgorICAuLi4gW2luc3RhbmNlXQorICAuLi4gcmVjaXBlID0gcGxvbmUucmVjaXBlLnpvcGU5aW5zdGFuY2UKKyAgLi4uIHpvcGU5LWxvY2F0aW9uID0gJHt6b3BlOTpsb2NhdGlvbn0KKyAgLi4uIHpvcGUtY29uZiA9ICR7Y3VzdG9tOnByZWZpeH0vZXRjL3pvcGUuY29uZgorICAuLi4gIiIiKQogICA+Pj4gcGFyc2VyWydidWlsZG91dCddWydmaW5kLWxpbmtzJ10KICAgJ1xuL2hvbWUvYW1idi96b3BlOS9kb3dubG9hZHMvZGlzdCcKICAgPj4+IHBhcnNlclsnaW5zdGFuY2UnXVsnem9wZS1jb25mJ10KQEAgLTIxODAsNyArMjE5OCw3IEBACiBBIG51bWJlciBvZiB1c2FiaWxpdHkgaW1wcm92ZW1lbnRzIHdlcmUgbWFkZSBmb3IgdGhlIDptb2Q6YHVybGxpYi5wYXJzZWAgbW9kdWxlLgogCiBUaGUgOmZ1bmM6YH51cmxsaWIucGFyc2UudXJscGFyc2VgIGZ1bmN0aW9uIG5vdyBzdXBwb3J0cyBgSVB2NgotPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVB2Nj5gXyBhZGRyZXNzZXMgYXMgZGVzY3JpYmVkIGluIDpyZmM6YDI3MzJgOgorPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lQdjY+YF8gYWRkcmVzc2VzIGFzIGRlc2NyaWJlZCBpbiA6cmZjOmAyNzMyYDoKIAogICAgID4+PiBpbXBvcnQgdXJsbGliLnBhcnNlCiAgICAgPj4+IHVybGxpYi5wYXJzZS51cmxwYXJzZSgnaHR0cDovL1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdL2Zvby8nKQpAQCAtMjIwNyw5ICsyMjI1LDkgQEAKIDpmdW5jOmB+dXJsbGliLnBhcnNlLnF1b3RlX3BsdXNgIGZvciBlbmNvZGluZzo6CiAKICAgICA+Pj4gdXJsbGliLnBhcnNlLnVybGVuY29kZShbCi0gICAgICAgICAgICAgKCd0eXBlJywgJ3RlbGVub3ZlbGEnKSwKLSAgICAgICAgICAgICAoJ25hbWUnLCAnwr9Ew7NuZGUgRXN0w6EgRWxpc2E/JyldLAotICAgICAgICAgICAgIGVuY29kaW5nPSdsYXRpbi0xJykKKyAgICAuLi4gICAgICAoJ3R5cGUnLCAndGVsZW5vdmVsYScpLAorICAgIC4uLiAgICAgICgnbmFtZScsICfCv0TDs25kZSBFc3TDoSBFbGlzYT8nKV0sCisgICAgLi4uICAgICAgZW5jb2Rpbmc9J2xhdGluLTEnKQogICAgICd0eXBlPXRlbGVub3ZlbGEmbmFtZT0lQkZEJUYzbmRlK0VzdCVFMStFbGlzYSUzRicKIAogQXMgZGV0YWlsZWQgaW4gOnJlZjpgcGFyc2luZy1hc2NpaS1lbmNvZGVkLWJ5dGVzYCwgYWxsIHRoZSA6bW9kOmB1cmxsaWIucGFyc2VgCkBAIC0yMjYzLDcgKzIyODEsOSBAQAogVGhlIGRlbW9uc3RyYXRpb24gY29kZSBmb3IgdGhlIDptb2Q6YHR1cnRsZWAgbW9kdWxlIHdhcyBtb3ZlZCBmcm9tIHRoZSAqRGVtbyoKIGRpcmVjdG9yeSB0byBtYWluIGxpYnJhcnkuICBJdCBpbmNsdWRlcyBvdmVyIGEgZG96ZW4gc2FtcGxlIHNjcmlwdHMgd2l0aAogbGl2ZWx5IGRpc3BsYXlzLiAgQmVpbmcgb24gOmF0dHI6YHN5cy5wYXRoYCwgaXQgY2FuIG5vdyBiZSBydW4gZGlyZWN0bHkKLWZyb20gdGhlIGNvbW1hbmQtbGluZTo6Citmcm9tIHRoZSBjb21tYW5kLWxpbmU6CisKKy4uIGNvZGUtYmxvY2s6OiBzaGVsbC1zZXNzaW9uCiAKICAgICAkIHB5dGhvbiAtbSB0dXJ0bGVkZW1vCiAKQEAgLTIzMjgsNyArMjM0OCw3IEBACiAgIChDb250cmlidXRlZCBieSBBbGV4YW5kcmUgVmFzc2Fsb3R0aSwgQW50b2luZSBQaXRyb3UKICAgYW5kIHRoZSBVbmxhZGVuIFN3YWxsb3cgdGVhbSBpbiA6aXNzdWU6YDk0MTBgIGFuZCA6aXNzdWU6YDM4NzNgLikKIAotKiBUaGUgYFRpbXNvcnQgYWxnb3JpdGhtIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbXNvcnQ+YF8gdXNlZCBpbgorKiBUaGUgYFRpbXNvcnQgYWxnb3JpdGhtIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UaW1zb3J0PmBfIHVzZWQgaW4KICAgOm1ldGg6YGxpc3Quc29ydGAgYW5kIDpmdW5jOmBzb3J0ZWRgIG5vdyBydW5zIGZhc3RlciBhbmQgdXNlcyBsZXNzIG1lbW9yeQogICB3aGVuIGNhbGxlZCB3aXRoIGEgOnRlcm06YGtleSBmdW5jdGlvbmAuICBQcmV2aW91c2x5LCBldmVyeSBlbGVtZW50IG9mCiAgIGEgbGlzdCB3YXMgd3JhcHBlZCB3aXRoIGEgdGVtcG9yYXJ5IG9iamVjdCB0aGF0IHJlbWVtYmVyZWQgdGhlIGtleSB2YWx1ZQpAQCAtMjM4MCw3ICsyNDAwLDcgQEAKIAogUHl0aG9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gYFVuaWNvZGUgNi4wLjAKIDxodHRwOi8vdW5pY29kZS5vcmcvdmVyc2lvbnMvVW5pY29kZTYuMC4wLz5gXy4gIFRoZSB1cGRhdGUgdG8gdGhlIHN0YW5kYXJkIGFkZHMKLW92ZXIgMiwwMDAgbmV3IGNoYXJhY3RlcnMgaW5jbHVkaW5nIGBlbW9qaSA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbW9qaT5gXworb3ZlciAyLDAwMCBuZXcgY2hhcmFjdGVycyBpbmNsdWRpbmcgYGVtb2ppIDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbW9qaT5gXwogc3ltYm9scyB3aGljaCBhcmUgaW1wb3J0YW50IGZvciBtb2JpbGUgcGhvbmVzLgogCiBJbiBhZGRpdGlvbiwgdGhlIHVwZGF0ZWQgc3RhbmRhcmQgaGFzIGFsdGVyZWQgdGhlIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGZvciB0d28KQEAgLTI0MzIsNyArMjQ1Miw3IEBACiAgICAgKipTb3VyY2UgY29kZSoqIDpzb3VyY2U6YExpYi9mdW5jdG9vbHMucHlgLgogCiAgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgc2VlCi0gIGByYXRpb25hbGUgPGh0dHA6Ly9yaGV0dGluZ2VyLndvcmRwcmVzcy5jb20vMjAxMS8wMS8yOC9vcGVuLXlvdXItc291cmNlLW1vcmUvPmBfLikKKyAgYHJhdGlvbmFsZSA8aHR0cHM6Ly9yaGV0dGluZ2VyLndvcmRwcmVzcy5jb20vMjAxMS8wMS8yOC9vcGVuLXlvdXItc291cmNlLW1vcmUvPmBfLikKIAogKiBUaGUgZG9jcyBub3cgY29udGFpbiBtb3JlIGV4YW1wbGVzIGFuZCByZWNpcGVzLiAgSW4gcGFydGljdWxhciwgOm1vZDpgcmVgCiAgIG1vZHVsZSBoYXMgYW4gZXh0ZW5zaXZlIHNlY3Rpb24sIDpyZWY6YHJlLWV4YW1wbGVzYC4gIExpa2V3aXNlLCB0aGUKQEAgLTI0NjgsNyArMjQ4OCw3IEBACiA9PT09PT09PT09PT09PT0KIAogSW4gYWRkaXRpb24gdG8gdGhlIGV4aXN0aW5nIFN1YnZlcnNpb24gY29kZSByZXBvc2l0b3J5IGF0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZwotdGhlcmUgaXMgbm93IGEgYE1lcmN1cmlhbCA8aHR0cDovL21lcmN1cmlhbC5zZWxlbmljLmNvbS8+YF8gcmVwb3NpdG9yeSBhdAordGhlcmUgaXMgbm93IGEgYE1lcmN1cmlhbCA8aHR0cHM6Ly93d3cubWVyY3VyaWFsLXNjbS5vcmcvPmBfIHJlcG9zaXRvcnkgYXQKIGh0dHBzOi8vaGcucHl0aG9uLm9yZy9cIC4KIAogQWZ0ZXIgdGhlIDMuMiByZWxlYXNlLCB0aGVyZSBhcmUgcGxhbnMgdG8gc3dpdGNoIHRvIE1lcmN1cmlhbCBhcyB0aGUgcHJpbWFyeQpAQCAtMjQ3OCw3ICsyNDk4LDcgQEAKIAogVG8gbGVhcm4gdG8gdXNlIHRoZSBuZXcgdmVyc2lvbiBjb250cm9sIHN5c3RlbSwgc2VlIHRoZSBgdHV0b3JpYWwgYnkgSm9lbAogU3BvbHNreSA8aHR0cDovL2hnaW5pdC5jb20+YF8gb3IgdGhlIGBHdWlkZSB0byBNZXJjdXJpYWwgV29ya2Zsb3dzCi08aHR0cDovL21lcmN1cmlhbC5zZWxlbmljLmNvbS9ndWlkZT5gXy4KKzxodHRwczovL3d3dy5tZXJjdXJpYWwtc2NtLm9yZy9ndWlkZT5gXy4KIAogCiBCdWlsZCBhbmQgQyBBUEkgQ2hhbmdlcwpAQCAtMjU1OSw3ICsyNTc5LDcgQEAKIDpzb3VyY2U6YE1hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0YCBmb3IgZGV0YWlscy4gIEZvciB1c2VycyBydW5uaW5nIGEgMzIvNjQtYml0CiBidWlsZCwgdGhlcmUgaXMgYSBrbm93biBwcm9ibGVtIHdpdGggdGhlIGRlZmF1bHQgVGNsL1RrIG9uIE1hYyBPUyBYIDEwLjYuCiBBY2NvcmRpbmdseSwgd2UgcmVjb21tZW5kIGluc3RhbGxpbmcgYW4gdXBkYXRlZCBhbHRlcm5hdGl2ZSBzdWNoIGFzCi1gQWN0aXZlU3RhdGUgVGNsL1RrIDguNS45IDxodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmV0Y2wvZG93bmxvYWRzPmBfXC4KK2BBY3RpdmVTdGF0ZSBUY2wvVGsgOC41LjkgPGh0dHBzOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmV0Y2wvZG93bmxvYWRzPmBfXC4KIFNlZSBodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8gZm9yIGFkZGl0aW9uYWwgZGV0YWlscy4KIAogUG9ydGluZyB0byBQeXRob24gMy4yCkBAIC0yNjY0LDcgKzI2ODQsNyBAQAogCiAqIFRoZSA6Y2xhc3M6YHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgY2xhc3Mgbm93IHJhaXNlcyBhbgogICA6ZXhjOmB4bWwuZXRyZWUuRWxlbWVudFRyZWUuUGFyc2VFcnJvcmAgd2hlbiBhIHBhcnNlIGZhaWxzLiBQcmV2aW91c2x5IGl0Ci0gIHJhaXNlZCBhIDpleGM6YHhtbC5wYXJzZXJzLmV4cGF0LkV4cGF0RXJyb3JgLgorICByYWlzZWQgYW4gOmV4YzpgeG1sLnBhcnNlcnMuZXhwYXQuRXhwYXRFcnJvcmAuCiAKICogVGhlIG5ldywgbG9uZ2VyIDpmdW5jOmBzdHJgIHZhbHVlIG9uIGZsb2F0cyBtYXkgYnJlYWsgZG9jdGVzdHMgd2hpY2ggcmVseSBvbgogICB0aGUgb2xkIG91dHB1dCBmb3JtYXQuCkBAIC0yNjk5LDQgKzI3MTksMyBAQAogCiAqIER1ZSB0byB0aGUgbmV3IDp0ZXJtOmBHSUxgIGltcGxlbWVudGF0aW9uLCA6YzpmdW5jOmBQeUV2YWxfSW5pdFRocmVhZHMoKWAKICAgY2Fubm90IGJlIGNhbGxlZCBiZWZvcmUgOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZSgpYCBhbnltb3JlLgotCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy4zLnJzdCBiL0RvYy93aGF0c25ldy8zLjMucnN0CmluZGV4IDA5NGVmZjguLjNlNDhjODIgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8zLjMucnN0CisrKyBiL0RvYy93aGF0c25ldy8zLjMucnN0CkBAIC00NDAsMTUgKzQ0MCwxNSBAQAogICAgIC4uLgogICAgID4+PiB0YWxsaWVzID0gW10KICAgICA+Pj4gYWNjID0gZ2F0aGVyX3RhbGxpZXModGFsbGllcykKLSAgICA+Pj4gbmV4dChhY2MpICMgRW5zdXJlIHRoZSBhY2N1bXVsYXRvciBpcyByZWFkeSB0byBhY2NlcHQgdmFsdWVzCisgICAgPj4+IG5leHQoYWNjKSAgIyBFbnN1cmUgdGhlIGFjY3VtdWxhdG9yIGlzIHJlYWR5IHRvIGFjY2VwdCB2YWx1ZXMKICAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoNCk6CiAgICAgLi4uICAgICBhY2Muc2VuZChpKQogICAgIC4uLgotICAgID4+PiBhY2Muc2VuZChOb25lKSAjIEZpbmlzaCB0aGUgZmlyc3QgdGFsbHkKKyAgICA+Pj4gYWNjLnNlbmQoTm9uZSkgICMgRmluaXNoIHRoZSBmaXJzdCB0YWxseQogICAgID4+PiBmb3IgaSBpbiByYW5nZSg1KToKICAgICAuLi4gICAgIGFjYy5zZW5kKGkpCiAgICAgLi4uCi0gICAgPj4+IGFjYy5zZW5kKE5vbmUpICMgRmluaXNoIHRoZSBzZWNvbmQgdGFsbHkKKyAgICA+Pj4gYWNjLnNlbmQoTm9uZSkgICMgRmluaXNoIHRoZSBzZWNvbmQgdGFsbHkKICAgICA+Pj4gdGFsbGllcwogICAgIFs2LCAxMF0KIApAQCAtODcxLDcgKzg3MSw5IEBACiA6ZW52dmFyOmBQWVRIT05GQVVMVEhBTkRMRVJgIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGJ5IHVzaW5nIDpvcHRpb246YC1YYAogYGBmYXVsdGhhbmRsZXJgYCBjb21tYW5kIGxpbmUgb3B0aW9uLgogCi1FeGFtcGxlIG9mIGEgc2VnbWVudGF0aW9uIGZhdWx0IG9uIExpbnV4OiA6OgorRXhhbXBsZSBvZiBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBMaW51eDoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KIAogICAgICQgcHl0aG9uIC1xIC1YIGZhdWx0aGFuZGxlcgogICAgID4+PiBpbXBvcnQgY3R5cGVzCkBAIC05OTksNyArMTAwMSw2IEBACiBJbmNyZW1lbnRhbCBDSksgY29kZWMgZW5jb2RlcnMgYXJlIG5vIGxvbmdlciByZXNldCBhdCBlYWNoIGNhbGwgdG8gdGhlaXIKIGVuY29kZSgpIG1ldGhvZHMuIEZvciBleGFtcGxlOjoKIAotICAgICQgLi9weXRob24gLXEKICAgICA+Pj4gaW1wb3J0IGNvZGVjcwogICAgID4+PiBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcignaHonKSgnc3RyaWN0JykKICAgICA+Pj4gYicnLmpvaW4oZW5jb2Rlci5lbmNvZGUoeCkgZm9yIHggaW4gJ1x1NTJmZlx1NjViZFx1NjViY1x1NGViYVx1MzAwMiBCeWUuJykKQEAgLTE1MjgsNyArMTUyOSw3IEBACiBtdWx0aXByb2Nlc3NpbmcKIC0tLS0tLS0tLS0tLS0tLQogCi1UaGUgbmV3IDpmdW5jOmBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi53YWl0YCBmdW5jdGlvbiBhbGxvd3MgdG8gcG9sbAorVGhlIG5ldyA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24ud2FpdGAgZnVuY3Rpb24gYWxsb3dzIHBvbGxpbmcKIG11bHRpcGxlIG9iamVjdHMgKHN1Y2ggYXMgY29ubmVjdGlvbnMsIHNvY2tldHMgYW5kIHBpcGVzKSB3aXRoIGEgdGltZW91dC4KIChDb250cmlidXRlZCBieSBSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmAxMjMyOGAuKQogCkBAIC0xNzE1LDggKzE3MTYsOCBAQAogLS0tLS0tCiAKIDpjbGFzczpgcGlja2xlLlBpY2tsZXJgIG9iamVjdHMgbm93IGhhdmUgYW4gb3B0aW9uYWwKLTphdHRyOmB+cGlja2xlLlBpY2tsZXIuZGlzcGF0Y2hfdGFibGVgIGF0dHJpYnV0ZSBhbGxvd2luZyB0byBzZXQgcGVyLXBpY2tsZXIKLXJlZHVjdGlvbiBmdW5jdGlvbnMuCis6YXR0cjpgfnBpY2tsZS5QaWNrbGVyLmRpc3BhdGNoX3RhYmxlYCBhdHRyaWJ1dGUgYWxsb3dpbmcgcGVyLXBpY2tsZXIKK3JlZHVjdGlvbiBmdW5jdGlvbnMgdG8gYmUgc2V0LgogCiAoQ29udHJpYnV0ZWQgYnkgUmljaGFyZCBPdWRrZXJrIGluIDppc3N1ZTpgMTQxNjZgLikKIApAQCAtMTg4NCwxMyArMTg4NSwxMyBAQAogICBIZWlrbyBXdW5kcmFtKQogCiAqIFRoZSA6Y2xhc3M6YH5zb2NrZXQuc29ja2V0YCBjbGFzcyBub3cgc3VwcG9ydHMgdGhlIFBGX0NBTiBwcm90b2NvbCBmYW1pbHkKLSAgKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU29ja2V0Y2FuKSwgb24gTGludXgKLSAgKGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzI1MzQyNSkuCisgIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Tb2NrZXRjYW4pLCBvbiBMaW51eAorICAoaHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzI1MzQyNSkuCiAKICAgKENvbnRyaWJ1dGVkIGJ5IE1hdHRoaWFzIEZ1Y2hzLCB1cGRhdGVkIGJ5IFRpYWdvIEdvbsOnYWx2ZXMgaW4gOmlzc3VlOmAxMDE0MWAuKQogCiAqIFRoZSA6Y2xhc3M6YH5zb2NrZXQuc29ja2V0YCBjbGFzcyBub3cgc3VwcG9ydHMgdGhlIFBGX1JEUyBwcm90b2NvbCBmYW1pbHkKLSAgKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVsaWFibGVfRGF0YWdyYW1fU29ja2V0cyBhbmQKKyAgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlbGlhYmxlX0RhdGFncmFtX1NvY2tldHMgYW5kCiAgIGh0dHBzOi8vb3NzLm9yYWNsZS5jb20vcHJvamVjdHMvcmRzLykuCiAKICogVGhlIDpjbGFzczpgfnNvY2tldC5zb2NrZXRgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgYGBQRl9TWVNURU1gYCBwcm90b2NvbApkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuNC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdAppbmRleCA3ZDliYzBkLi4xZTVjOWQxIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMy40LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdApAQCAtMTQ0LDcgKzE0NCw3IEBACiAgIGFsbCBvZiB0aGUgcGFyZW50J3MgaW5oZXJpdGFibGUgaGFuZGxlcywgb25seSB0aGUgbmVjZXNzYXJ5IG9uZXMuCiAqIEEgbmV3IDpmdW5jOmBoYXNobGliLnBia2RmMl9obWFjYCBmdW5jdGlvbiBwcm92aWRlcwogICB0aGUgYFBLQ1MjNSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyCi0gIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BCS0RGMj5gXy4KKyAgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BCS0RGMj5gXy4KICogOnJlZjpgVExTdjEuMSBhbmQgVExTdjEuMiBzdXBwb3J0IDx3aGF0c25ldy10bHMtMTEtMTI+YCBmb3IgOm1vZDpgc3NsYC4KICogOnJlZjpgUmV0cmlldmluZyBjZXJ0aWZpY2F0ZXMgZnJvbSB0aGUgV2luZG93cyBzeXN0ZW0gY2VydCBzdG9yZSBzdXBwb3J0CiAgIDx3aGF0c25ldzM0LXdpbi1jZXJ0LXN0b3JlPmAgZm9yIDptb2Q6YHNzbGAuCkBAIC03NDYsNyArNzQ2LDcgQEAKIG1ldGhvZCwgZXF1aXZhbGVudCB0byBjYWxsaW5nIDptb2Q6YH5kaXMuZGlzYCBvbiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnQsIGJ1dAogcmV0dXJuZWQgYXMgYSBtdWx0aS1saW5lIHN0cmluZzo6CiAKLSAgICA+Pj4gYnl0ZWNvZGUgPSBkaXMuQnl0ZWNvZGUobGFtYmRhIHg6IHggKzEsIGN1cnJlbnRfb2Zmc2V0PTMpCisgICAgPj4+IGJ5dGVjb2RlID0gZGlzLkJ5dGVjb2RlKGxhbWJkYSB4OiB4ICsgMSwgY3VycmVudF9vZmZzZXQ9MykKICAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgogICAgIC4uLiAgICAgcHJpbnQoJ3t9ICh7fSknLmZvcm1hdChpbnN0ci5vcG5hbWUsIGluc3RyLm9wY29kZSkpCiAgICAgTE9BRF9GQVNUICgxMjQpCkBAIC05MDIsNyArOTAyLDcgQEAKIAogQSBuZXcgOmZ1bmM6YGhhc2hsaWIucGJrZGYyX2htYWNgIGZ1bmN0aW9uIHByb3ZpZGVzCiB0aGUgYFBLQ1MjNSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyCi08aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QQktERjI+YF8uICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuCis8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUEJLREYyPmBfLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbgogSGVpbWVzIGluIDppc3N1ZTpgMTg1ODJgLikKIAogVGhlIDphdHRyOmB+aGFzaGxpYi5oYXNoLm5hbWVgIGF0dHJpYnV0ZSBvZiA6bW9kOmBoYXNobGliYCBoYXNoIG9iamVjdHMgaXMgbm93CkBAIC0xMzIyLDcgKzEzMjIsNyBAQAogYWJpbGl0eSB0byBxdWVyeSBvciBzZXQgdGhlIHJlc291cmNlIGxpbWl0cyBmb3IgcHJvY2Vzc2VzIG90aGVyIHRoYW4gdGhlIG9uZQogbWFraW5nIHRoZSBjYWxsLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjU5NWAuKQogCi1PbiBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjYuMzYgb3IgbGF0ZXIsIHRoZXJlIGFyZSB0aGVyZSBhcmUgYWxzbyBzb21lIG5ldworT24gTGludXgga2VybmVsIHZlcnNpb24gMi42LjM2IG9yIGxhdGVyLCB0aGVyZSBhcmUgYWxzbyBzb21lIG5ldwogTGludXggc3BlY2lmaWMgY29uc3RhbnRzOiA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9NU0dRVUVVRWAsCiA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9OSUNFYCwgOmF0dHI6YH5yZXNvdXJjZS5STElNSVRfUlRQUklPYCwKIDphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1JUVElNRWAsIGFuZCA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9TSUdQRU5ESU5HYC4KQEAgLTE0MTAsNyArMTQxMCw3IEBACiAKIEEgbmV3IGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSA6ZnVuYzpgfnNxbGl0ZTMuY29ubmVjdGAgZnVuY3Rpb24sICp1cmkqLCBjYW4gYmUKIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgKmRhdGFiYXNlKiBwYXJhbWV0ZXIgaXMgYSBgYHVyaWBgIChzZWUgdGhlIGBTUUxpdGUKLVVSSSBkb2N1bWVudGF0aW9uIDxodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdXJpLmh0bWw+YF8pLiAgKENvbnRyaWJ1dGVkIGJ5IHBvcSBpbgorVVJJIGRvY3VtZW50YXRpb24gPGh0dHBzOi8vd3d3LnNxbGl0ZS5vcmcvdXJpLmh0bWw+YF8pLiAgKENvbnRyaWJ1dGVkIGJ5IHBvcSBpbgogOmlzc3VlOmAxMzc3M2AuKQogCiAKQEAgLTE0NTcsNyArMTQ1Nyw3IEBACiBsaXN0IG9mIHRoZSBsb2FkZWQgYGBDQWBgIGNlcnRpZmljYXRlcy4gIChDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluCiA6aXNzdWU6YDE4MTQ3YC4pCiAKLUlmIE9wZW5TU0wgMC45Ljggb3IgbGF0ZXIgaXMgYXZhaWxhYmxlLCA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgaGFzIGFuIG5ldworSWYgT3BlblNTTCAwLjkuOCBvciBsYXRlciBpcyBhdmFpbGFibGUsIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBoYXMgYSBuZXcKIGF0dHJpYnV0ZSA6YXR0cjpgfnNzbC5TU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZQogY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgYnkgc2V0dGluZyBpdCB0byBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZSBuZXcKIGNvbnN0YW50cyA6ZGF0YTpgfnNzbC5WRVJJRllfREVGQVVMVGAsIDpkYXRhOmB+c3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRmAsCkBAIC0xOTE3LDggKzE5MTcsOCBAQAogICA6aXNzdWU6YDE4NTk2YC4pCiAKICogVGhlIFdpbmRvd3MgYnVpbGQgbm93IHVzZXMgYEFkZHJlc3MgU3BhY2UgTGF5b3V0IFJhbmRvbWl6YXRpb24KLSAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQVNMUj5gXyBhbmQgYERhdGEgRXhlY3V0aW9uIFByZXZlbnRpb24KLSAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0YV9FeGVjdXRpb25fUHJldmVudGlvbj5gXy4gIChDb250cmlidXRlZCBieQorICA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWRkcmVzc19zcGFjZV9sYXlvdXRfcmFuZG9taXphdGlvbj5gXyBhbmQgYERhdGEgRXhlY3V0aW9uIFByZXZlbnRpb24KKyAgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGFfRXhlY3V0aW9uX1ByZXZlbnRpb24+YF8uICAoQ29udHJpYnV0ZWQgYnkKICAgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE2NjMyYC4pCiAKICogTmV3IGZ1bmN0aW9uIDpjOmZ1bmM6YFB5T2JqZWN0X0xlbmd0aEhpbnRgIGlzIHRoZSBDIEFQSSBlcXVpdmFsZW50CmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy41LnJzdCBiL0RvYy93aGF0c25ldy8zLjUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOWRiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mvd2hhdHNuZXcvMy41LnJzdApAQCAtMCwwICsxLDI1MzcgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgV2hhdCdzIE5ldyBJbiBQeXRob24gMy41CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKzpFZGl0b3JzOiBFbHZpcyBQcmFuc2tldmljaHVzIDxlbHZpc0BtYWdpYy5pbz4sIFl1cnkgU2VsaXZhbm92IDx5dXJ5QG1hZ2ljLmlvPgorCisuLiBSdWxlcyBmb3IgbWFpbnRlbmFuY2U6CisKKyAgICogQW55b25lIGNhbiBhZGQgdGV4dCB0byB0aGlzIGRvY3VtZW50LiAgRG8gbm90IHNwZW5kIHZlcnkgbXVjaCB0aW1lCisgICBvbiB0aGUgd29yZGluZyBvZiB5b3VyIGNoYW5nZXMsIGJlY2F1c2UgeW91ciB0ZXh0IHdpbGwgcHJvYmFibHkKKyAgIGdldCByZXdyaXR0ZW4gdG8gc29tZSBkZWdyZWUuCisKKyAgICogVGhlIG1haW50YWluZXIgd2lsbCBnbyB0aHJvdWdoIE1pc2MvTkVXUyBwZXJpb2RpY2FsbHkgYW5kIGFkZAorICAgY2hhbmdlczsgaXQncyB0aGVyZWZvcmUgbW9yZSBpbXBvcnRhbnQgdG8gYWRkIHlvdXIgY2hhbmdlcyB0bworICAgTWlzYy9ORVdTIHRoYW4gdG8gdGhpcyBmaWxlLgorCisgICAqIFRoaXMgaXMgbm90IGEgY29tcGxldGUgbGlzdCBvZiBldmVyeSBzaW5nbGUgY2hhbmdlOyBjb21wbGV0ZW5lc3MKKyAgIGlzIHRoZSBwdXJwb3NlIG9mIE1pc2MvTkVXUy4gIFNvbWUgY2hhbmdlcyBJIGNvbnNpZGVyIHRvbyBzbWFsbAorICAgb3IgZXNvdGVyaWMgdG8gaW5jbHVkZS4gIElmIHN1Y2ggYSBjaGFuZ2UgaXMgYWRkZWQgdG8gdGhlIHRleHQsCisgICBJJ2xsIGp1c3QgcmVtb3ZlIGl0LiAgKFRoaXMgaXMgYW5vdGhlciByZWFzb24geW91IHNob3VsZG4ndCBzcGVuZAorICAgdG9vIG11Y2ggdGltZSBvbiB3cml0aW5nIHlvdXIgYWRkaXRpb24uKQorCisgICAqIElmIHlvdSB3YW50IHRvIGRyYXcgeW91ciBuZXcgdGV4dCB0byB0aGUgYXR0ZW50aW9uIG9mIHRoZQorICAgbWFpbnRhaW5lciwgYWRkICdYWFgnIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcmFncmFwaCBvcgorICAgc2VjdGlvbi4KKworICAgKiBJdCdzIE9LIHRvIGp1c3QgYWRkIGEgZnJhZ21lbnRhcnkgbm90ZSBhYm91dCBhIGNoYW5nZS4gIEZvcgorICAgZXhhbXBsZTogIlhYWCBEZXNjcmliZSB0aGUgdHJhbnNtb2dyaWZ5KCkgZnVuY3Rpb24gYWRkZWQgdG8gdGhlCisgICBzb2NrZXQgbW9kdWxlLiIgIFRoZSBtYWludGFpbmVyIHdpbGwgcmVzZWFyY2ggdGhlIGNoYW5nZSBhbmQKKyAgIHdyaXRlIHRoZSBuZWNlc3NhcnkgdGV4dC4KKworICAgKiBZb3UgY2FuIGNvbW1lbnQgb3V0IHlvdXIgYWRkaXRpb25zIGlmIHlvdSBsaWtlLCBidXQgaXQncyBub3QKKyAgIG5lY2Vzc2FyeSAoZXNwZWNpYWxseSB3aGVuIGEgZmluYWwgcmVsZWFzZSBpcyBzb21lIG1vbnRocyBhd2F5KS4KKworICAgKiBDcmVkaXQgdGhlIGF1dGhvciBvZiBhIHBhdGNoIG9yIGJ1Z2ZpeC4gICBKdXN0IHRoZSBuYW1lIGlzCisgICBzdWZmaWNpZW50OyB0aGUgZS1tYWlsIGFkZHJlc3MgaXNuJ3QgbmVjZXNzYXJ5LgorCisgICAqIEl0J3MgaGVscGZ1bCB0byBhZGQgdGhlIGJ1Zy9wYXRjaCBudW1iZXIgYXMgYSBjb21tZW50OgorCisgICBYWFggRGVzY3JpYmUgdGhlIHRyYW5zbW9ncmlmeSgpIGZ1bmN0aW9uIGFkZGVkIHRvIHRoZSBzb2NrZXQKKyAgIG1vZHVsZS4KKyAgIChDb250cmlidXRlZCBieSBQLlkuIERldmVsb3BlciBpbiA6aXNzdWU6YDEyMzQ1YC4pCisKKyAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgdGhlIGVmZm9ydCBvZiBnb2luZyB0aHJvdWdoIHRoZSBNZXJjdXJpYWwgbG9nCisgICB3aGVuIHJlc2VhcmNoaW5nIGEgY2hhbmdlLgorCitUaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMy41LCBjb21wYXJlZCB0byAzLjQuCitQeXRob24gMy41IHdhcyByZWxlYXNlZCBvbiBTZXB0ZW1iZXIgMTMsIDIwMTUuIMKgU2VlIHRoZQorYGNoYW5nZWxvZyA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy41L3doYXRzbmV3L2NoYW5nZWxvZy5odG1sPmBfIGZvciBhIGZ1bGwKK2xpc3Qgb2YgY2hhbmdlcy4KKworLi4gc2VlYWxzbzo6CisKKyAgICA6cGVwOmA0NzhgIC0gUHl0aG9uIDMuNSBSZWxlYXNlIFNjaGVkdWxlCisKKworU3VtbWFyeSAtLSBSZWxlYXNlIGhpZ2hsaWdodHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05ldyBzeW50YXggZmVhdHVyZXM6CisKKyogOnJlZjpgUEVQIDQ5MiA8d2hhdHNuZXctcGVwLTQ5Mj5gLCBjb3JvdXRpbmVzIHdpdGggYXN5bmMgYW5kIGF3YWl0IHN5bnRheC4KKyogOnJlZjpgUEVQIDQ2NSA8d2hhdHNuZXctcGVwLTQ2NT5gLCBhIG5ldyBtYXRyaXggbXVsdGlwbGljYXRpb24gb3BlcmF0b3I6IGBgYSBAIGJgYC4KKyogOnJlZjpgUEVQIDQ0OCA8d2hhdHNuZXctcGVwLTQ0OD5gLCBhZGRpdGlvbmFsIHVucGFja2luZyBnZW5lcmFsaXphdGlvbnMuCisKKworTmV3IGxpYnJhcnkgbW9kdWxlczoKKworKiA6bW9kOmB0eXBpbmdgOiA6cmVmOmBQRVAgNDg0IC0tIFR5cGUgSGludHMgPHdoYXRzbmV3LXBlcC00ODQ+YC4KKyogOm1vZDpgemlwYXBwYDogOnJlZjpgUEVQIDQ0MSBJbXByb3ZpbmcgUHl0aG9uIFpJUCBBcHBsaWNhdGlvbiBTdXBwb3J0CisgIDx3aGF0c25ldy16aXBhcHA+YC4KKworCitOZXcgYnVpbHQtaW4gZmVhdHVyZXM6CisKKyogYGBieXRlcyAlIGFyZ3NgYCwgYGBieXRlYXJyYXkgJSBhcmdzYGA6IDpyZWY6YFBFUCA0NjEgPHdoYXRzbmV3LXBlcC00NjE+YCAtLQorICBBZGRpbmcgYGAlYGAgZm9ybWF0dGluZyB0byBieXRlcyBhbmQgYnl0ZWFycmF5LgorCisqIE5ldyA6bWV0aDpgYnl0ZXMuaGV4YCwgOm1ldGg6YGJ5dGVhcnJheS5oZXhgIGFuZCA6bWV0aDpgbWVtb3J5dmlldy5oZXhgCisgIG1ldGhvZHMuIChDb250cmlidXRlZCBieSBBcm5vbiBZYWFyaSBpbiA6aXNzdWU6YDk5NTFgLikKKworKiA6Y2xhc3M6YG1lbW9yeXZpZXdgIG5vdyBzdXBwb3J0cyB0dXBsZSBpbmRleGluZyAoaW5jbHVkaW5nIG11bHRpLWRpbWVuc2lvbmFsKS4KKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMjM2MzJgLikKKworKiBHZW5lcmF0b3JzIGhhdmUgYSBuZXcgYGBnaV95aWVsZGZyb21gYCBhdHRyaWJ1dGUsIHdoaWNoIHJldHVybnMgdGhlCisgIG9iamVjdCBiZWluZyBpdGVyYXRlZCBieSBgYHlpZWxkIGZyb21gYCBleHByZXNzaW9ucy4gKENvbnRyaWJ1dGVkCisgIGJ5IEJlbm5vIExlc2xpZSBhbmQgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAyNDQ1MGAuKQorCisqIEEgbmV3IDpleGM6YFJlY3Vyc2lvbkVycm9yYCBleGNlcHRpb24gaXMgbm93IHJhaXNlZCB3aGVuIG1heGltdW0KKyAgcmVjdXJzaW9uIGRlcHRoIGlzIHJlYWNoZWQuICAoQ29udHJpYnV0ZWQgYnkgR2VvcmcgQnJhbmRsCisgIGluIDppc3N1ZTpgMTkyMzVgLikKKworCitDUHl0aG9uIGltcGxlbWVudGF0aW9uIGltcHJvdmVtZW50czoKKworKiBXaGVuIHRoZSBgYExDX1RZUEVgYCBsb2NhbGUgaXMgdGhlIFBPU0lYIGxvY2FsZSAoYGBDYGAgbG9jYWxlKSwKKyAgOnB5OmRhdGE6YHN5cy5zdGRpbmAgYW5kIDpweTpkYXRhOmBzeXMuc3Rkb3V0YCBub3cgdXNlIHRoZQorICBgYHN1cnJvZ2F0ZWVzY2FwZWBgIGVycm9yIGhhbmRsZXIsIGluc3RlYWQgb2YgdGhlIGBgc3RyaWN0YGAgZXJyb3IgaGFuZGxlci4KKyAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMTk5NzdgLikKKworKiBgYC5weW9gYCBmaWxlcyBhcmUgbm8gbG9uZ2VyIHVzZWQgYW5kIGhhdmUgYmVlbiByZXBsYWNlZCBieSBhIG1vcmUgZmxleGlibGUKKyAgc2NoZW1lIHRoYXQgaW5jbHVkZXMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBleHBsaWNpdGx5IGluIGBgLnB5Y2BgIG5hbWUuCisgIChTZWUgOnJlZjpgUEVQIDQ4OCBvdmVydmlldyA8d2hhdHNuZXctcGVwLTQ4OD5gLikKKworKiBCdWlsdGluIGFuZCBleHRlbnNpb24gbW9kdWxlcyBhcmUgbm93IGluaXRpYWxpemVkIGluIGEgbXVsdGktcGhhc2UgcHJvY2VzcywKKyAgd2hpY2ggaXMgc2ltaWxhciB0byBob3cgUHl0aG9uIG1vZHVsZXMgYXJlIGxvYWRlZC4KKyAgKFNlZSA6cmVmOmBQRVAgNDg5IG92ZXJ2aWV3IDx3aGF0c25ldy1wZXAtNDg5PmAuKQorCisKK1NpZ25pZmljYW50IGltcHJvdmVtZW50cyBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeToKKworKiA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCBpcyBub3cKKyAgOnJlZjpgaW1wbGVtZW50ZWQgaW4gQyA8d2hhdHNuZXctb3JkZXJlZGRpY3Q+YCwgd2hpY2ggbWFrZXMgaXQKKyAgNCB0byAxMDAgdGltZXMgZmFzdGVyLgorCisqIFRoZSA6bW9kOmBzc2xgIG1vZHVsZSBnYWluZWQKKyAgOnJlZjpgc3VwcG9ydCBmb3IgTWVtb3J5IEJJTyA8d2hhdHNuZXctc3NsbWVtb3J5YmlvPmAsIHdoaWNoIGRlY291cGxlcyBTU0wKKyAgcHJvdG9jb2wgaGFuZGxpbmcgZnJvbSBuZXR3b3JrIElPLgorCisqIFRoZSBuZXcgOmZ1bmM6YG9zLnNjYW5kaXJgIGZ1bmN0aW9uIHByb3ZpZGVzIGEKKyAgOnJlZjpgYmV0dGVyIGFuZCBzaWduaWZpY2FudGx5IGZhc3RlciB3YXkgPHdoYXRzbmV3LXBlcC00NzE+YAorICBvZiBkaXJlY3RvcnkgdHJhdmVyc2FsLgorCisqIDpmdW5jOmBmdW5jdG9vbHMubHJ1X2NhY2hlYCBoYXMgYmVlbiBtb3N0bHkKKyAgOnJlZjpgcmVpbXBsZW1lbnRlZCBpbiBDIDx3aGF0c25ldy1scnVjYWNoZT5gLCB5aWVsZGluZyBtdWNoIGJldHRlcgorICBwZXJmb3JtYW5jZS4KKworKiBUaGUgbmV3IDpmdW5jOmBzdWJwcm9jZXNzLnJ1bmAgZnVuY3Rpb24gcHJvdmlkZXMgYQorICA6cmVmOmBzdHJlYW1saW5lZCB3YXkgdG8gcnVuIHN1YnByb2Nlc3NlcyA8d2hhdHNuZXctc3VicHJvY2Vzcz5gLgorCisqIFRoZSA6bW9kOmB0cmFjZWJhY2tgIG1vZHVsZSBoYXMgYmVlbiBzaWduaWZpY2FudGx5CisgIDpyZWY6YGVuaGFuY2VkIDx3aGF0c25ldy10cmFjZWJhY2s+YCBmb3IgaW1wcm92ZWQKKyAgcGVyZm9ybWFuY2UgYW5kIGRldmVsb3BlciBjb252ZW5pZW5jZS4KKworCitTZWN1cml0eSBpbXByb3ZlbWVudHM6CisKKyogU1NMdjMgaXMgbm93IGRpc2FibGVkIHRocm91Z2hvdXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCisgIEl0IGNhbiBzdGlsbCBiZSBlbmFibGVkIGJ5IGluc3RhbnRpYXRpbmcgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YAorICBtYW51YWxseS4gIChTZWUgOmlzc3VlOmAyMjYzOGAgZm9yIG1vcmUgZGV0YWlsczsgdGhpcyBjaGFuZ2Ugd2FzCisgIGJhY2twb3J0ZWQgdG8gQ1B5dGhvbiAzLjQgYW5kIDIuNy4pCisKKyogSFRUUCBjb29raWUgcGFyc2luZyBpcyBub3cgc3RyaWN0ZXIsIGluIG9yZGVyIHRvIHByb3RlY3QKKyAgYWdhaW5zdCBwb3RlbnRpYWwgaW5qZWN0aW9uIGF0dGFja3MuIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdQorICBpbiA6aXNzdWU6YDIyNzk2YC4pCisKKworV2luZG93cyBpbXByb3ZlbWVudHM6CisKKyogQSBuZXcgaW5zdGFsbGVyIGZvciBXaW5kb3dzIGhhcyByZXBsYWNlZCB0aGUgb2xkIE1TSS4KKyAgU2VlIDpyZWY6YHVzaW5nLW9uLXdpbmRvd3NgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisqIFdpbmRvd3MgYnVpbGRzIG5vdyB1c2UgTWljcm9zb2Z0IFZpc3VhbCBDKysgMTQuMCwgYW5kIGV4dGVuc2lvbiBtb2R1bGVzCisgIHNob3VsZCB1c2UgdGhlIHNhbWUuCisKKworUGxlYXNlIHJlYWQgb24gZm9yIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHVzZXItZmFjaW5nIGNoYW5nZXMsIGluY2x1ZGluZyBtYW55CitvdGhlciBzbWFsbGVyIGltcHJvdmVtZW50cywgQ1B5dGhvbiBvcHRpbWl6YXRpb25zLCBkZXByZWNhdGlvbnMsIGFuZCBwb3RlbnRpYWwKK3BvcnRpbmcgaXNzdWVzLgorCisKK05ldyBGZWF0dXJlcworPT09PT09PT09PT09CisKKy4uIF93aGF0c25ldy1wZXAtNDkyOgorCitQRVAgNDkyIC0gQ29yb3V0aW5lcyB3aXRoIGFzeW5jIGFuZCBhd2FpdCBzeW50YXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0OTJgIGdyZWF0bHkgaW1wcm92ZXMgc3VwcG9ydCBmb3IgYXN5bmNocm9ub3VzIHByb2dyYW1taW5nIGluIFB5dGhvbgorYnkgYWRkaW5nIDp0ZXJtOmBhd2FpdGFibGUgb2JqZWN0cyA8YXdhaXRhYmxlPmAsCis6dGVybTpgY29yb3V0aW5lIGZ1bmN0aW9ucyA8Y29yb3V0aW5lIGZ1bmN0aW9uPmAsCis6dGVybTpgYXN5bmNocm9ub3VzIGl0ZXJhdGlvbiA8YXN5bmNocm9ub3VzIGl0ZXJhYmxlPmAsCithbmQgOnRlcm06YGFzeW5jaHJvbm91cyBjb250ZXh0IG1hbmFnZXJzIDxhc3luY2hyb25vdXMgY29udGV4dCBtYW5hZ2VyPmAuCisKK0Nvcm91dGluZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIHVzaW5nIHRoZSBuZXcgOmtleXdvcmQ6YGFzeW5jIGRlZmAgc3ludGF4OjoKKworICAgID4+PiBhc3luYyBkZWYgY29ybygpOgorICAgIC4uLiAgICAgcmV0dXJuICdzcGFtJworCitJbnNpZGUgYSBjb3JvdXRpbmUgZnVuY3Rpb24sIHRoZSBuZXcgOmtleXdvcmQ6YGF3YWl0YCBleHByZXNzaW9uIGNhbiBiZSB1c2VkCit0byBzdXNwZW5kIGNvcm91dGluZSBleGVjdXRpb24gdW50aWwgdGhlIHJlc3VsdCBpcyBhdmFpbGFibGUuICBBbnkgb2JqZWN0CitjYW4gYmUgKmF3YWl0ZWQqLCBhcyBsb25nIGFzIGl0IGltcGxlbWVudHMgdGhlIDp0ZXJtOmBhd2FpdGFibGVgIHByb3RvY29sIGJ5CitkZWZpbmluZyB0aGUgOm1ldGg6YF9fYXdhaXRfX2AgbWV0aG9kLgorCitQRVAgNDkyIGFsc28gYWRkcyA6a2V5d29yZDpgYXN5bmMgZm9yYCBzdGF0ZW1lbnQgZm9yIGNvbnZlbmllbnQgaXRlcmF0aW9uCitvdmVyIGFzeW5jaHJvbm91cyBpdGVyYWJsZXMuCisKK0FuIGV4YW1wbGUgb2YgYSBydWRpbWVudGFyeSBIVFRQIGNsaWVudCB3cml0dGVuIHVzaW5nIHRoZSBuZXcgc3ludGF4OjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBhc3luYyBkZWYgaHR0cF9nZXQoZG9tYWluKToKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBhd2FpdCBhc3luY2lvLm9wZW5fY29ubmVjdGlvbihkb21haW4sIDgwKQorCisgICAgICAgIHdyaXRlci53cml0ZShiJ1xyXG4nLmpvaW4oWworICAgICAgICAgICAgYidHRVQgLyBIVFRQLzEuMScsCisgICAgICAgICAgICBiJ0hvc3Q6ICViJyAlIGRvbWFpbi5lbmNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgIGInQ29ubmVjdGlvbjogY2xvc2UnLAorICAgICAgICAgICAgYicnLCBiJycKKyAgICAgICAgXSkpCisKKyAgICAgICAgYXN5bmMgZm9yIGxpbmUgaW4gcmVhZGVyOgorICAgICAgICAgICAgcHJpbnQoJz4+PicsIGxpbmUpCisKKyAgICAgICAgd3JpdGVyLmNsb3NlKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGh0dHBfZ2V0KCdleGFtcGxlLmNvbScpKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvb3AuY2xvc2UoKQorCisKK1NpbWlsYXJseSB0byBhc3luY2hyb25vdXMgaXRlcmF0aW9uLCB0aGVyZSBpcyBhIG5ldyBzeW50YXggZm9yIGFzeW5jaHJvbm91cworY29udGV4dCBtYW5hZ2Vycy4gIFRoZSBmb2xsb3dpbmcgc2NyaXB0OjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBhc3luYyBkZWYgY29ybyhuYW1lLCBsb2NrKToKKyAgICAgICAgcHJpbnQoJ2Nvcm8ge306IHdhaXRpbmcgZm9yIGxvY2snLmZvcm1hdChuYW1lKSkKKyAgICAgICAgYXN5bmMgd2l0aCBsb2NrOgorICAgICAgICAgICAgcHJpbnQoJ2Nvcm8ge306IGhvbGRpbmcgdGhlIGxvY2snLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMSkKKyAgICAgICAgICAgIHByaW50KCdjb3JvIHt9OiByZWxlYXNpbmcgdGhlIGxvY2snLmZvcm1hdChuYW1lKSkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBsb2NrID0gYXN5bmNpby5Mb2NrKCkKKyAgICBjb3JvcyA9IGFzeW5jaW8uZ2F0aGVyKGNvcm8oMSwgbG9jayksIGNvcm8oMiwgbG9jaykpCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvcykKKyAgICBmaW5hbGx5OgorICAgICAgICBsb29wLmNsb3NlKCkKKword2lsbCBvdXRwdXQ6OgorCisgICAgY29ybyAyOiB3YWl0aW5nIGZvciBsb2NrCisgICAgY29ybyAyOiBob2xkaW5nIHRoZSBsb2NrCisgICAgY29ybyAxOiB3YWl0aW5nIGZvciBsb2NrCisgICAgY29ybyAyOiByZWxlYXNpbmcgdGhlIGxvY2sKKyAgICBjb3JvIDE6IGhvbGRpbmcgdGhlIGxvY2sKKyAgICBjb3JvIDE6IHJlbGVhc2luZyB0aGUgbG9jaworCitOb3RlIHRoYXQgYm90aCA6a2V5d29yZDpgYXN5bmMgZm9yYCBhbmQgOmtleXdvcmQ6YGFzeW5jIHdpdGhgIGNhbiBvbmx5CitiZSB1c2VkIGluc2lkZSBhIGNvcm91dGluZSBmdW5jdGlvbiBkZWNsYXJlZCB3aXRoIDprZXl3b3JkOmBhc3luYyBkZWZgLgorCitDb3JvdXRpbmUgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSBydW4gaW5zaWRlIGEgY29tcGF0aWJsZSBldmVudCBsb29wLAorc3VjaCBhcyB0aGUgOnJlZjpgYXN5bmNpbyBsb29wIDxhc3luY2lvLWV2ZW50LWxvb3A+YC4KKworCisuLiBub3RlOjoKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjUuMgorICAgICAgU3RhcnRpbmcgd2l0aCBDUHl0aG9uIDMuNS4yLCBgYF9fYWl0ZXJfX2BgIGNhbiBkaXJlY3RseSByZXR1cm4KKyAgICAgIDp0ZXJtOmBhc3luY2hyb25vdXMgaXRlcmF0b3JzIDxhc3luY2hyb25vdXMgaXRlcmF0b3I+YC4gIFJldHVybmluZworICAgICAgYW4gOnRlcm06YGF3YWl0YWJsZWAgb2JqZWN0IHdpbGwgcmVzdWx0IGluIGEKKyAgICAgIDpleGM6YFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmdgLgorCisgICAgICBTZWUgbW9yZSBkZXRhaWxzIGluIHRoZSA6cmVmOmBhc3luYy1pdGVyYXRvcnNgIGRvY3VtZW50YXRpb24KKyAgICAgIHNlY3Rpb24uCisKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ5MmAgLS0gQ29yb3V0aW5lcyB3aXRoIGFzeW5jIGFuZCBhd2FpdCBzeW50YXgKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBZdXJ5IFNlbGl2YW5vdi4KKworCisuLiBfd2hhdHNuZXctcGVwLTQ2NToKKworUEVQIDQ2NSAtIEEgZGVkaWNhdGVkIGluZml4IG9wZXJhdG9yIGZvciBtYXRyaXggbXVsdGlwbGljYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpwZXA6YDQ2NWAgYWRkcyB0aGUgYGBAYGAgaW5maXggb3BlcmF0b3IgZm9yIG1hdHJpeCBtdWx0aXBsaWNhdGlvbi4KK0N1cnJlbnRseSwgbm8gYnVpbHRpbiBQeXRob24gdHlwZXMgaW1wbGVtZW50IHRoZSBuZXcgb3BlcmF0b3IsIGhvd2V2ZXIsIGl0CitjYW4gYmUgaW1wbGVtZW50ZWQgYnkgZGVmaW5pbmcgOm1ldGg6YF9fbWF0bXVsX19gLCA6bWV0aDpgX19ybWF0bXVsX19gLAorYW5kIDptZXRoOmBfX2ltYXRtdWxfX2AgZm9yIHJlZ3VsYXIsIHJlZmxlY3RlZCwgYW5kIGluLXBsYWNlIG1hdHJpeAorbXVsdGlwbGljYXRpb24uICBUaGUgc2VtYW50aWNzIG9mIHRoZXNlIG1ldGhvZHMgaXMgc2ltaWxhciB0byB0aGF0IG9mCittZXRob2RzIGRlZmluaW5nIG90aGVyIGluZml4IGFyaXRobWV0aWMgb3BlcmF0b3JzLgorCitNYXRyaXggbXVsdGlwbGljYXRpb24gaXMgYSBub3RhYmx5IGNvbW1vbiBvcGVyYXRpb24gaW4gbWFueSBmaWVsZHMgb2YKK21hdGhlbWF0aWNzLCBzY2llbmNlLCBlbmdpbmVlcmluZywgYW5kIHRoZSBhZGRpdGlvbiBvZiBgYEBgYCBhbGxvd3Mgd3JpdGluZworY2xlYW5lciBjb2RlOjoKKworICAgIFMgPSAoSCBAIGJldGEgLSByKS5UIEAgaW52KEggQCBWIEAgSC5UKSBAIChIIEAgYmV0YSAtIHIpCisKK2luc3RlYWQgb2Y6OgorCisgICAgUyA9IGRvdCgoZG90KEgsIGJldGEpIC0gcikuVCwKKyAgICAgICAgICAgIGRvdChpbnYoZG90KGRvdChILCBWKSwgSC5UKSksIGRvdChILCBiZXRhKSAtIHIpKQorCitOdW1QeSAxLjEwIGhhcyBzdXBwb3J0IGZvciB0aGUgbmV3IG9wZXJhdG9yOjoKKworICAgID4+PiBpbXBvcnQgbnVtcHkKKworICAgID4+PiB4ID0gbnVtcHkub25lcygzKQorICAgID4+PiB4CisgICAgYXJyYXkoWyAxLiwgMS4sIDEuXSkKKworICAgID4+PiBtID0gbnVtcHkuZXllKDMpCisgICAgPj4+IG0KKyAgICBhcnJheShbWyAxLiwgMC4sIDAuXSwKKyAgICAgICAgICAgWyAwLiwgMS4sIDAuXSwKKyAgICAgICAgICAgWyAwLiwgMC4sIDEuXV0pCisKKyAgICA+Pj4geCBAIG0KKyAgICBhcnJheShbIDEuLCAxLiwgMS5dKQorCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NjVgIC0tIEEgZGVkaWNhdGVkIGluZml4IG9wZXJhdG9yIGZvciBtYXRyaXggbXVsdGlwbGljYXRpb24KKyAgICAgIFBFUCB3cml0dGVuIGJ5IE5hdGhhbmllbCBKLiBTbWl0aDsgaW1wbGVtZW50ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24uCisKKworLi4gX3doYXRzbmV3LXBlcC00NDg6CisKK1BFUCA0NDggLSBBZGRpdGlvbmFsIFVucGFja2luZyBHZW5lcmFsaXphdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDQ4YCBleHRlbmRzIHRoZSBhbGxvd2VkIHVzZXMgb2YgdGhlIGBgKmBgIGl0ZXJhYmxlIHVucGFja2luZworb3BlcmF0b3IgYW5kIGBgKipgYCBkaWN0aW9uYXJ5IHVucGFja2luZyBvcGVyYXRvci4gIEl0IGlzIG5vdyBwb3NzaWJsZQordG8gdXNlIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdW5wYWNraW5ncyBpbiA6cmVmOmBmdW5jdGlvbiBjYWxscyA8Y2FsbHM+YDo6CisKKyAgICA+Pj4gcHJpbnQoKlsxXSwgKlsyXSwgMywgKls0LCA1XSkKKyAgICAxIDIgMyA0IDUKKworICAgID4+PiBkZWYgZm4oYSwgYiwgYywgZCk6CisgICAgLi4uICAgICBwcmludChhLCBiLCBjLCBkKQorICAgIC4uLgorCisgICAgPj4+IGZuKCoqeydhJzogMSwgJ2MnOiAzfSwgKip7J2InOiAyLCAnZCc6IDR9KQorICAgIDEgMiAzIDQKKworU2ltaWxhcmx5LCB0dXBsZSwgbGlzdCwgc2V0LCBhbmQgZGljdGlvbmFyeSBkaXNwbGF5cyBhbGxvdyBtdWx0aXBsZQordW5wYWNraW5ncyAoc2VlIDpyZWY6YGV4cHJsaXN0c2AgYW5kIDpyZWY6YGRpY3RgKTo6CisKKyAgICA+Pj4gKnJhbmdlKDQpLCA0CisgICAgKDAsIDEsIDIsIDMsIDQpCisKKyAgICA+Pj4gWypyYW5nZSg0KSwgNF0KKyAgICBbMCwgMSwgMiwgMywgNF0KKworICAgID4+PiB7KnJhbmdlKDQpLCA0LCAqKDUsIDYsIDcpfQorICAgIHswLCAxLCAyLCAzLCA0LCA1LCA2LCA3fQorCisgICAgPj4+IHsneCc6IDEsICoqeyd5JzogMn19CisgICAgeyd4JzogMSwgJ3knOiAyfQorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQ4YCAtLSBBZGRpdGlvbmFsIFVucGFja2luZyBHZW5lcmFsaXphdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGJ5IEpvc2h1YSBMYW5kYXU7IGltcGxlbWVudGVkIGJ5IE5laWwgR2lyZGhhciwKKyAgICAgIFRob21hcyBXb3V0ZXJzLCBhbmQgSm9zaHVhIExhbmRhdS4KKworCisuLiBfd2hhdHNuZXctcGVwLTQ2MToKKworUEVQIDQ2MSAtIHBlcmNlbnQgZm9ybWF0dGluZyBzdXBwb3J0IGZvciBieXRlcyBhbmQgYnl0ZWFycmF5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDYxYCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBgYCVgYAorOnJlZjpgaW50ZXJwb2xhdGlvbiBvcGVyYXRvciA8Ynl0ZXMtZm9ybWF0dGluZz5gIHRvIDpjbGFzczpgYnl0ZXNgCithbmQgOmNsYXNzOmBieXRlYXJyYXlgLgorCitXaGlsZSBpbnRlcnBvbGF0aW9uIGlzIHVzdWFsbHkgdGhvdWdodCBvZiBhcyBhIHN0cmluZyBvcGVyYXRpb24sIHRoZXJlIGFyZQorY2FzZXMgd2hlcmUgaW50ZXJwb2xhdGlvbiBvbiBgYGJ5dGVzYGAgb3IgYGBieXRlYXJyYXlzYGAgbWFrZXMgc2Vuc2UsIGFuZCB0aGUKK3dvcmsgbmVlZGVkIHRvIG1ha2UgdXAgZm9yIHRoaXMgbWlzc2luZyBmdW5jdGlvbmFsaXR5IGRldHJhY3RzIGZyb20gdGhlCitvdmVyYWxsIHJlYWRhYmlsaXR5IG9mIHRoZSBjb2RlLiAgVGhpcyBpc3N1ZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4KK2RlYWxpbmcgd2l0aCB3aXJlIGZvcm1hdCBwcm90b2NvbHMsIHdoaWNoIGFyZSBvZnRlbiBhIG1peHR1cmUgb2YgYmluYXJ5CithbmQgQVNDSUkgY29tcGF0aWJsZSB0ZXh0LgorCitFeGFtcGxlczo6CisKKyAgICA+Pj4gYidIZWxsbyAlYiEnICUgYidXb3JsZCcKKyAgICBiJ0hlbGxvIFdvcmxkIScKKworICAgID4+PiBiJ3g9JWkgeT0lZicgJSAoMSwgMi41KQorICAgIGIneD0xIHk9Mi41MDAwMDAnCisKK1VuaWNvZGUgaXMgbm90IGFsbG93ZWQgZm9yIGBgJWJgYCwgYnV0IGl0IGlzIGFjY2VwdGVkIGJ5IGBgJWFgYCAoZXF1aXZhbGVudCBvZgorYGByZXByKG9iaikuZW5jb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJylgYCk6OgorCisgICAgPj4+IGInSGVsbG8gJWIhJyAlICdXb3JsZCcKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIFR5cGVFcnJvcjogJWIgcmVxdWlyZXMgYnl0ZXMsIG9yIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgX19ieXRlc19fLCBub3QgJ3N0cicKKworICAgID4+PiBiJ3ByaWNlOiAlYScgJSAnMTDigqwnCisgICAgYiJwcmljZTogJzEwXFx1MjBhYyciCisKK05vdGUgdGhhdCBgYCVzYGAgYW5kIGBgJXJgYCBjb252ZXJzaW9uIHR5cGVzLCBhbHRob3VnaCBzdXBwb3J0ZWQsIHNob3VsZAorb25seSBiZSB1c2VkIGluIGNvZGViYXNlcyB0aGF0IG5lZWQgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDYxYCAtLSBBZGRpbmcgJSBmb3JtYXR0aW5nIHRvIGJ5dGVzIGFuZCBieXRlYXJyYXkKKyAgICAgIFBFUCB3cml0dGVuIGJ5IEV0aGFuIEZ1cm1hbjsgaW1wbGVtZW50ZWQgYnkgTmVpbCBTY2hlbWVuYXVlciBhbmQKKyAgICAgIEV0aGFuIEZ1cm1hbi4KKworCisuLiBfd2hhdHNuZXctcGVwLTQ4NDoKKworUEVQIDQ4NCAtIFR5cGUgSGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Z1bmN0aW9uIGFubm90YXRpb24gc3ludGF4IGhhcyBiZWVuIGEgUHl0aG9uIGZlYXR1cmUgc2luY2UgdmVyc2lvbiAzLjAKKyg6cGVwOmAzMTA3YCksIGhvd2V2ZXIgdGhlIHNlbWFudGljcyBvZiBhbm5vdGF0aW9ucyBoYXMgYmVlbiBsZWZ0IHVuZGVmaW5lZC4KKworRXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCB0aGUgbWFqb3JpdHkgb2YgZnVuY3Rpb24gYW5ub3RhdGlvbgordXNlcyB3ZXJlIHRvIHByb3ZpZGUgdHlwZSBoaW50cyB0byBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWVzLiAgSXQKK2JlY2FtZSBldmlkZW50IHRoYXQgaXQgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgUHl0aG9uIHVzZXJzLCBpZiB0aGUKK3N0YW5kYXJkIGxpYnJhcnkgaW5jbHVkZWQgdGhlIGJhc2UgZGVmaW5pdGlvbnMgYW5kIHRvb2xzIGZvciB0eXBlIGFubm90YXRpb25zLgorCis6cGVwOmA0ODRgIGludHJvZHVjZXMgYSA6dGVybTpgcHJvdmlzaW9uYWwgbW9kdWxlIDxwcm92aXNpb25hbCBhcGk+YCB0bworcHJvdmlkZSB0aGVzZSBzdGFuZGFyZCBkZWZpbml0aW9ucyBhbmQgdG9vbHMsIGFsb25nIHdpdGggc29tZSBjb252ZW50aW9ucworZm9yIHNpdHVhdGlvbnMgd2hlcmUgYW5ub3RhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUuCisKK0ZvciBleGFtcGxlLCBoZXJlIGlzIGEgc2ltcGxlIGZ1bmN0aW9uIHdob3NlIGFyZ3VtZW50IGFuZCByZXR1cm4gdHlwZQorYXJlIGRlY2xhcmVkIGluIHRoZSBhbm5vdGF0aW9uczo6CisKKyAgICBkZWYgZ3JlZXRpbmcobmFtZTogc3RyKSAtPiBzdHI6CisgICAgICAgIHJldHVybiAnSGVsbG8gJyArIG5hbWUKKworV2hpbGUgdGhlc2UgYW5ub3RhdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCBydW50aW1lIHRocm91Z2ggdGhlIHVzdWFsCis6YXR0cjpgX19hbm5vdGF0aW9uc19fYCBhdHRyaWJ1dGUsICpubyBhdXRvbWF0aWMgdHlwZSBjaGVja2luZyBoYXBwZW5zIGF0CitydW50aW1lKi4gIEluc3RlYWQsIGl0IGlzIGFzc3VtZWQgdGhhdCBhIHNlcGFyYXRlIG9mZi1saW5lIHR5cGUgY2hlY2tlcgorKGUuZy4gYG15cHkgPGh0dHA6Ly9teXB5LWxhbmcub3JnPmBfKSB3aWxsIGJlIHVzZWQgZm9yIG9uLWRlbWFuZAorc291cmNlIGNvZGUgYW5hbHlzaXMuCisKK1RoZSB0eXBlIHN5c3RlbSBzdXBwb3J0cyB1bmlvbnMsIGdlbmVyaWMgdHlwZXMsIGFuZCBhIHNwZWNpYWwgdHlwZQorbmFtZWQgOmNsYXNzOmB+dHlwaW5nLkFueWAgd2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIChpLmUuIGFzc2lnbmFibGUgdG8KK2FuZCBmcm9tKSBhbGwgdHlwZXMuCisKKy4uIHNlZWFsc286OgorCisgICAqIDptb2Q6YHR5cGluZ2AgbW9kdWxlIGRvY3VtZW50YXRpb24KKyAgICogOnBlcDpgNDg0YCAtLSBUeXBlIEhpbnRzCisgICAgICAgIFBFUCB3cml0dGVuIGJ5IEd1aWRvIHZhbiBSb3NzdW0sIEp1a2thIExlaHRvc2FsbywgYW5kIMWBdWthc3ogTGFuZ2E7CisgICAgICAgIGltcGxlbWVudGVkIGJ5IEd1aWRvIHZhbiBSb3NzdW0uCisgICAqIDpwZXA6YDQ4M2AgLS0gVGhlIFRoZW9yeSBvZiBUeXBlIEhpbnRzCisgICAgICAgIFBFUCB3cml0dGVuIGJ5IEd1aWRvIHZhbiBSb3NzdW0KKworCisuLiBfd2hhdHNuZXctcGVwLTQ3MToKKworUEVQIDQ3MSAtIG9zLnNjYW5kaXIoKSBmdW5jdGlvbiAtLSBhIGJldHRlciBhbmQgZmFzdGVyIGRpcmVjdG9yeSBpdGVyYXRvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NzFgIGFkZHMgYSBuZXcgZGlyZWN0b3J5IGl0ZXJhdGlvbiBmdW5jdGlvbiwgOmZ1bmM6YG9zLnNjYW5kaXJgLAordG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkuICBBZGRpdGlvbmFsbHksIDpmdW5jOmBvcy53YWxrYCBpcyBub3cKK2ltcGxlbWVudGVkIHVzaW5nIGBgc2NhbmRpcmBgLCB3aGljaCBtYWtlcyBpdCAzIHRvIDUgdGltZXMgZmFzdGVyCitvbiBQT1NJWCBzeXN0ZW1zIGFuZCA3IHRvIDIwIHRpbWVzIGZhc3RlciBvbiBXaW5kb3dzIHN5c3RlbXMuICBUaGlzIGlzCitsYXJnZWx5IGFjaGlldmVkIGJ5IGdyZWF0bHkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBjYWxscyB0byA6ZnVuYzpgb3Muc3RhdGAKK3JlcXVpcmVkIHRvIHdhbGsgYSBkaXJlY3RvcnkgdHJlZS4KKworQWRkaXRpb25hbGx5LCBgYHNjYW5kaXJgYCByZXR1cm5zIGFuIGl0ZXJhdG9yLCBhcyBvcHBvc2VkIHRvIHJldHVybmluZworYSBsaXN0IG9mIGZpbGUgbmFtZXMsIHdoaWNoIGltcHJvdmVzIG1lbW9yeSBlZmZpY2llbmN5IHdoZW4gaXRlcmF0aW5nCitvdmVyIHZlcnkgbGFyZ2UgZGlyZWN0b3JpZXMuCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBhIHNpbXBsZSB1c2Ugb2YgOmZ1bmM6YG9zLnNjYW5kaXJgIHRvIGRpc3BsYXkgYWxsCit0aGUgZmlsZXMgKGV4Y2x1ZGluZyBkaXJlY3RvcmllcykgaW4gdGhlIGdpdmVuICpwYXRoKiB0aGF0IGRvbid0IHN0YXJ0IHdpdGgKK2BgJy4nYGAuIFRoZSA6bWV0aDpgZW50cnkuaXNfZmlsZSgpIDxvcy5EaXJFbnRyeS5pc19maWxlPmAgY2FsbCB3aWxsIGdlbmVyYWxseQorbm90IG1ha2UgYW4gYWRkaXRpb25hbCBzeXN0ZW0gY2FsbDo6CisKKyAgICBmb3IgZW50cnkgaW4gb3Muc2NhbmRpcihwYXRoKToKKyAgICAgICAgaWYgbm90IGVudHJ5Lm5hbWUuc3RhcnRzd2l0aCgnLicpIGFuZCBlbnRyeS5pc19maWxlKCk6CisgICAgICAgICAgICBwcmludChlbnRyeS5uYW1lKQorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDcxYCAtLSBvcy5zY2FuZGlyKCkgZnVuY3Rpb24gLS0gYSBiZXR0ZXIgYW5kIGZhc3RlciBkaXJlY3RvcnkgaXRlcmF0b3IKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBCZW4gSG95dCB3aXRoIHRoZSBoZWxwIG9mIFZpY3RvciBTdGlubmVyLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDc1OgorCitQRVAgNDc1OiBSZXRyeSBzeXN0ZW0gY2FsbHMgZmFpbGluZyB3aXRoIEVJTlRSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIDpweTpkYXRhOmBlcnJuby5FSU5UUmAgZXJyb3IgY29kZSBpcyByZXR1cm5lZCB3aGVuZXZlciBhIHN5c3RlbSBjYWxsLCB0aGF0CitpcyB3YWl0aW5nIGZvciBJL08sIGlzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLiAgUHJldmlvdXNseSwgUHl0aG9uIHdvdWxkCityYWlzZSA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBpbiBzdWNoIGNhc2VzLiAgVGhpcyBtZWFudCB0aGF0LCB3aGVuIHdyaXRpbmcgYQorUHl0aG9uIGFwcGxpY2F0aW9uLCB0aGUgZGV2ZWxvcGVyIGhhZCB0d28gY2hvaWNlczoKKworIy4gSWdub3JlIHRoZSBgYEludGVycnVwdGVkRXJyb3JgYC4KKyMuIEhhbmRsZSB0aGUgYGBJbnRlcnJ1cHRlZEVycm9yYGAgYW5kIGF0dGVtcHQgdG8gcmVzdGFydCB0aGUgaW50ZXJydXB0ZWQKKyAgIHN5c3RlbSBjYWxsIGF0IGV2ZXJ5IGNhbGwgc2l0ZS4KKworVGhlIGZpcnN0IG9wdGlvbiBtYWtlcyBhbiBhcHBsaWNhdGlvbiBmYWlsIGludGVybWl0dGVudGx5LgorVGhlIHNlY29uZCBvcHRpb24gYWRkcyBhIGxhcmdlIGFtb3VudCBvZiBib2lsZXJwbGF0ZSB0aGF0IG1ha2VzIHRoZQorY29kZSBuZWFybHkgdW5yZWFkYWJsZS4gIENvbXBhcmU6OgorCisgICAgcHJpbnQoIkhlbGxvIFdvcmxkIikKKworYW5kOjoKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50KCJIZWxsbyBXb3JsZCIpCisgICAgICAgICAgICBicmVhaworICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKzpwZXA6YDQ3NWAgaW1wbGVtZW50cyBhdXRvbWF0aWMgcmV0cnkgb2Ygc3lzdGVtIGNhbGxzIG9uCitgYEVJTlRSYGAuICBUaGlzIHJlbW92ZXMgdGhlIGJ1cmRlbiBvZiBkZWFsaW5nIHdpdGggYGBFSU5UUmBgCitvciA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBpbiB1c2VyIGNvZGUgaW4gbW9zdCBzaXR1YXRpb25zIGFuZCBtYWtlcworUHl0aG9uIHByb2dyYW1zLCBpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnksIG1vcmUgcm9idXN0LiAgTm90ZSB0aGF0Cit0aGUgc3lzdGVtIGNhbGwgaXMgb25seSByZXRyaWVkIGlmIHRoZSBzaWduYWwgaGFuZGxlciBkb2VzIG5vdCByYWlzZSBhbgorZXhjZXB0aW9uLgorCitCZWxvdyBpcyBhIGxpc3Qgb2YgZnVuY3Rpb25zIHdoaWNoIGFyZSBub3cgcmV0cmllZCB3aGVuIGludGVycnVwdGVkCitieSBhIHNpZ25hbDoKKworKiA6ZnVuYzpgb3BlbmAgYW5kIDpmdW5jOmBpby5vcGVuYDsKKworKiBmdW5jdGlvbnMgb2YgdGhlIDptb2Q6YGZhdWx0aGFuZGxlcmAgbW9kdWxlOworCisqIDptb2Q6YG9zYCBmdW5jdGlvbnM6IDpmdW5jOmB+b3MuZmNoZGlyYCwgOmZ1bmM6YH5vcy5mY2htb2RgLAorICA6ZnVuYzpgfm9zLmZjaG93bmAsIDpmdW5jOmB+b3MuZmRhdGFzeW5jYCwgOmZ1bmM6YH5vcy5mc3RhdGAsCisgIDpmdW5jOmB+b3MuZnN0YXR2ZnNgLCA6ZnVuYzpgfm9zLmZzeW5jYCwgOmZ1bmM6YH5vcy5mdHJ1bmNhdGVgLAorICA6ZnVuYzpgfm9zLm1rZmlmb2AsIDpmdW5jOmB+b3MubWtub2RgLCA6ZnVuYzpgfm9zLm9wZW5gLAorICA6ZnVuYzpgfm9zLnBvc2l4X2ZhZHZpc2VgLCA6ZnVuYzpgfm9zLnBvc2l4X2ZhbGxvY2F0ZWAsIDpmdW5jOmB+b3MucHJlYWRgLAorICA6ZnVuYzpgfm9zLnB3cml0ZWAsIDpmdW5jOmB+b3MucmVhZGAsIDpmdW5jOmB+b3MucmVhZHZgLCA6ZnVuYzpgfm9zLnNlbmRmaWxlYCwKKyAgOmZ1bmM6YH5vcy53YWl0M2AsIDpmdW5jOmB+b3Mud2FpdDRgLCA6ZnVuYzpgfm9zLndhaXRgLAorICA6ZnVuYzpgfm9zLndhaXRpZGAsIDpmdW5jOmB+b3Mud2FpdHBpZGAsIDpmdW5jOmB+b3Mud3JpdGVgLAorICA6ZnVuYzpgfm9zLndyaXRldmA7CisKKyogc3BlY2lhbCBjYXNlczogOmZ1bmM6YG9zLmNsb3NlYCBhbmQgOmZ1bmM6YG9zLmR1cDJgIG5vdyBpZ25vcmUKKyAgOnB5OmRhdGE6YH5lcnJuby5FSU5UUmAgZXJyb3JzOyB0aGUgc3lzY2FsbCBpcyBub3QgcmV0cmllZCAoc2VlIHRoZSBQRVAKKyAgZm9yIHRoZSByYXRpb25hbGUpOworCisqIDptb2Q6YHNlbGVjdGAgZnVuY3Rpb25zOiA6ZnVuYzpgZGV2cG9sbC5wb2xsKCkgPHNlbGVjdC5kZXZwb2xsLnBvbGw+YCwKKyAgOmZ1bmM6YGVwb2xsLnBvbGwoKSA8c2VsZWN0LmVwb2xsLnBvbGw+YCwKKyAgOmZ1bmM6YGtxdWV1ZS5jb250cm9sKCkgPHNlbGVjdC5rcXVldWUuY29udHJvbD5gLAorICA6ZnVuYzpgcG9sbC5wb2xsKCkgPHNlbGVjdC5wb2xsLnBvbGw+YCwgOmZ1bmM6YH5zZWxlY3Quc2VsZWN0YDsKKworKiBtZXRob2RzIG9mIHRoZSA6Y2xhc3M6YH5zb2NrZXQuc29ja2V0YCBjbGFzczogOm1ldGg6YH5zb2NrZXQuc29ja2V0LmFjY2VwdGAsCisgIDptZXRoOmB+c29ja2V0LnNvY2tldC5jb25uZWN0YCAoZXhjZXB0IGZvciBub24tYmxvY2tpbmcgc29ja2V0cyksCisgIDptZXRoOmB+c29ja2V0LnNvY2tldC5yZWN2YCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3Zmcm9tYCwKKyAgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3Ztc2dgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZGAsCisgIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZW5kYWxsYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNlbmRtc2dgLAorICA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZHRvYDsKKworKiA6ZnVuYzpgc2lnbmFsLnNpZ3RpbWVkd2FpdGAgYW5kIDpmdW5jOmBzaWduYWwuc2lnd2FpdGluZm9gOworCisqIDpmdW5jOmB0aW1lLnNsZWVwYC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ3NWAgLS0gUmV0cnkgc3lzdGVtIGNhbGxzIGZhaWxpbmcgd2l0aCBFSU5UUgorICAgICAgUEVQIGFuZCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaSBhbmQKKyAgICAgIFZpY3RvciBTdGlubmVyLCB3aXRoIHRoZSBoZWxwIG9mIEFudG9pbmUgUGl0cm91ICh0aGUgRnJlbmNoIGNvbm5lY3Rpb24pLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDc5OgorCitQRVAgNDc5OiBDaGFuZ2UgU3RvcEl0ZXJhdGlvbiBoYW5kbGluZyBpbnNpZGUgZ2VuZXJhdG9ycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGludGVyYWN0aW9uIG9mIGdlbmVyYXRvcnMgYW5kIDpleGM6YFN0b3BJdGVyYXRpb25gIGluIFB5dGhvbiAzLjQgYW5kCitlYXJsaWVyIHdhcyBzb21ldGltZXMgc3VycHJpc2luZywgYW5kIGNvdWxkIGNvbmNlYWwgb2JzY3VyZSBidWdzLiAgUHJldmlvdXNseSwKK2BgU3RvcEl0ZXJhdGlvbmBgIHJhaXNlZCBhY2NpZGVudGFsbHkgaW5zaWRlIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIHdhcworaW50ZXJwcmV0ZWQgYXMgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uIGJ5IHRoZSBsb29wIGNvbnN0cnVjdCBkcml2aW5nIHRoZQorZ2VuZXJhdG9yLgorCis6cGVwOmA0NzlgIGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIGdlbmVyYXRvcnM6IHdoZW4gYSBgYFN0b3BJdGVyYXRpb25gYAorZXhjZXB0aW9uIGlzIHJhaXNlZCBpbnNpZGUgYSBnZW5lcmF0b3IsIGl0IGlzIHJlcGxhY2VkIHdpdGggYQorOmV4YzpgUnVudGltZUVycm9yYCBiZWZvcmUgaXQgZXhpdHMgdGhlIGdlbmVyYXRvciBmcmFtZS4gIFRoZSBtYWluIGdvYWwgb2YKK3RoaXMgY2hhbmdlIGlzIHRvIGVhc2UgZGVidWdnaW5nIGluIHRoZSBzaXR1YXRpb24gd2hlcmUgYW4gdW5ndWFyZGVkCis6ZnVuYzpgbmV4dGAgY2FsbCByYWlzZXMgYGBTdG9wSXRlcmF0aW9uYGAgYW5kIGNhdXNlcyB0aGUgaXRlcmF0aW9uIGNvbnRyb2xsZWQKK2J5IHRoZSBnZW5lcmF0b3IgdG8gdGVybWluYXRlIHNpbGVudGx5LiBUaGlzIGlzIHBhcnRpY3VsYXJseSBwZXJuaWNpb3VzIGluCitjb21iaW5hdGlvbiB3aXRoIHRoZSBgYHlpZWxkIGZyb21gYCBjb25zdHJ1Y3QuCisKK1RoaXMgaXMgYSBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZSwgc28gdG8gZW5hYmxlIHRoZSBuZXcgYmVoYXZpb3IsCithIDp0ZXJtOmBfX2Z1dHVyZV9fYCBpbXBvcnQgaXMgbmVjZXNzYXJ5OjoKKworICAgID4+PiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGdlbmVyYXRvcl9zdG9wCisKKyAgICA+Pj4gZGVmIGdlbigpOgorICAgIC4uLiAgICAgbmV4dChpdGVyKFtdKSkKKyAgICAuLi4gICAgIHlpZWxkCisgICAgLi4uCisgICAgPj4+IG5leHQoZ2VuKCkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gZ2VuCisgICAgU3RvcEl0ZXJhdGlvbgorCisgICAgVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjoKKworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgUnVudGltZUVycm9yOiBnZW5lcmF0b3IgcmFpc2VkIFN0b3BJdGVyYXRpb24KKworV2l0aG91dCBhIGBgX19mdXR1cmVfX2BgIGltcG9ydCwgYSA6ZXhjOmBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nYCB3aWxsIGJlCityYWlzZWQgd2hlbmV2ZXIgYSBgYFN0b3BJdGVyYXRpb25gYCBleGNlcHRpb24gaXMgcmFpc2VkIGluc2lkZSBhIGdlbmVyYXRvci4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ3OWAgLS0gQ2hhbmdlIFN0b3BJdGVyYXRpb24gaGFuZGxpbmcgaW5zaWRlIGdlbmVyYXRvcnMKKyAgICAgIFBFUCB3cml0dGVuIGJ5IENocmlzIEFuZ2VsaWNvIGFuZCBHdWlkbyB2YW4gUm9zc3VtLiBJbXBsZW1lbnRlZCBieQorICAgICAgQ2hyaXMgQW5nZWxpY28sIFl1cnkgU2VsaXZhbm92IGFuZCBOaWNrIENvZ2hsYW4uCisKKworLi4gX3doYXRzbmV3LXBlcC00ODU6CisKK1BFUCA0ODU6IEEgZnVuY3Rpb24gZm9yIHRlc3RpbmcgYXBwcm94aW1hdGUgZXF1YWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDg1YCBhZGRzIHRoZSA6ZnVuYzpgbWF0aC5pc2Nsb3NlYCBhbmQgOmZ1bmM6YGNtYXRoLmlzY2xvc2VgCitmdW5jdGlvbnMgd2hpY2ggdGVsbCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwgb3IKKyJjbG9zZSIgdG8gZWFjaCBvdGhlci4gIFdoZXRoZXIgb3Igbm90IHR3byB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQKK2Nsb3NlIGlzIGRldGVybWluZWQgYWNjb3JkaW5nIHRvIGdpdmVuIGFic29sdXRlIGFuZCByZWxhdGl2ZSB0b2xlcmFuY2VzLgorUmVsYXRpdmUgdG9sZXJhbmNlIGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIGBgaXNjbG9zZWBgCithcmd1bWVudHMsIHJlbGF0aXZlIHRvIHRoZSBsYXJnZXIgYWJzb2x1dGUgdmFsdWU6OgorCisgICAgPj4+IGltcG9ydCBtYXRoCisgICAgPj4+IGEgPSA1LjAKKyAgICA+Pj4gYiA9IDQuOTk5OTgKKyAgICA+Pj4gbWF0aC5pc2Nsb3NlKGEsIGIsIHJlbF90b2w9MWUtNSkKKyAgICBUcnVlCisgICAgPj4+IG1hdGguaXNjbG9zZShhLCBiLCByZWxfdG9sPTFlLTYpCisgICAgRmFsc2UKKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjb21wYXJlIHR3byB2YWx1ZXMgdXNpbmcgYWJzb2x1dGUgdG9sZXJhbmNlLCB3aGljaAorbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSB2YWx1ZTo6CisKKyAgICA+Pj4gaW1wb3J0IG1hdGgKKyAgICA+Pj4gYSA9IDUuMAorICAgID4+PiBiID0gNC45OTk5OAorICAgID4+PiBtYXRoLmlzY2xvc2UoYSwgYiwgYWJzX3RvbD0wLjAwMDAzKQorICAgIFRydWUKKyAgICA+Pj4gbWF0aC5pc2Nsb3NlKGEsIGIsIGFic190b2w9MC4wMDAwMSkKKyAgICBGYWxzZQorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDg1YCAtLSBBIGZ1bmN0aW9uIGZvciB0ZXN0aW5nIGFwcHJveGltYXRlIGVxdWFsaXR5CisgICAgICBQRVAgd3JpdHRlbiBieSBDaHJpc3RvcGhlciBCYXJrZXI7IGltcGxlbWVudGVkIGJ5IENocmlzIEJhcmtlciBhbmQKKyAgICAgIFRhbCBFaW5hdC4KKworCisuLiBfd2hhdHNuZXctcGVwLTQ4NjoKKworUEVQIDQ4NjogTWFrZSB0aGUgUHl0aG9uIExhdW5jaGVyIGF3YXJlIG9mIHZpcnR1YWwgZW52aXJvbm1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDg2YCBtYWtlcyB0aGUgV2luZG93cyBsYXVuY2hlciAoc2VlIDpwZXA6YDM5N2ApIGF3YXJlIG9mIGFuIGFjdGl2ZQordmlydHVhbCBlbnZpcm9ubWVudC4gV2hlbiB0aGUgZGVmYXVsdCBpbnRlcnByZXRlciB3b3VsZCBiZSB1c2VkIGFuZCB0aGUKK2BgVklSVFVBTF9FTlZgYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHRoZSBpbnRlcnByZXRlciBpbiB0aGUgdmlydHVhbAorZW52aXJvbm1lbnQgd2lsbCBiZSB1c2VkLgorCisuLiBzZWVhbHNvOjoKKworICAgIDpwZXA6YDQ4NmAgLS0gTWFrZSB0aGUgUHl0aG9uIExhdW5jaGVyIGF3YXJlIG9mIHZpcnR1YWwgZW52aXJvbm1lbnRzCisgICAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBQYXVsIE1vb3JlLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDg4OgorCitQRVAgNDg4OiBFbGltaW5hdGlvbiBvZiBQWU8gZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0ODhgIGRvZXMgYXdheSB3aXRoIHRoZSBjb25jZXB0IG9mIGBgLnB5b2BgIGZpbGVzLiBUaGlzIG1lYW5zIHRoYXQKK2BgLnB5Y2BgIGZpbGVzIHJlcHJlc2VudCBib3RoIHVub3B0aW1pemVkIGFuZCBvcHRpbWl6ZWQgYnl0ZWNvZGUuIFRvIHByZXZlbnQgdGhlCituZWVkIHRvIGNvbnN0YW50bHkgcmVnZW5lcmF0ZSBieXRlY29kZSBmaWxlcywgYGAucHljYGAgZmlsZXMgbm93IGhhdmUgYW4KK29wdGlvbmFsIGBgb3B0LWBgIHRhZyBpbiB0aGVpciBuYW1lIHdoZW4gdGhlIGJ5dGVjb2RlIGlzIG9wdGltaXplZC4gVGhpcyBoYXMgdGhlCitzaWRlLWVmZmVjdCBvZiBubyBtb3JlIGJ5dGVjb2RlIGZpbGUgbmFtZSBjbGFzaGVzIHdoZW4gcnVubmluZyB1bmRlciBlaXRoZXIKKzpvcHRpb246YC1PYCBvciA6b3B0aW9uOmAtT09gLiBDb25zZXF1ZW50bHksIGJ5dGVjb2RlIGZpbGVzIGdlbmVyYXRlZCBmcm9tCis6b3B0aW9uOmAtT2AsIGFuZCA6b3B0aW9uOmAtT09gIG1heSBub3cgZXhpc3Qgc2ltdWx0YW5lb3VzbHkuCis6ZnVuYzpgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgIGhhcyBhbiB1cGRhdGVkIEFQSSB0byBoZWxwIHdpdGgKK3RoaXMgY2hhbmdlLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDg4YCAtLSBFbGltaW5hdGlvbiBvZiBQWU8gZmlsZXMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBCcmV0dCBDYW5ub24uCisKKworLi4gX3doYXRzbmV3LXBlcC00ODk6CisKK1BFUCA0ODk6IE11bHRpLXBoYXNlIGV4dGVuc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDg5YCB1cGRhdGVzIGV4dGVuc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlCit0d28gc3RlcCBtb2R1bGUgbG9hZGluZyBtZWNoYW5pc20gaW50cm9kdWNlZCBieSA6cGVwOmA0NTFgIGluIFB5dGhvbiAzLjQuCisKK1RoaXMgY2hhbmdlIGJyaW5ncyB0aGUgaW1wb3J0IHNlbWFudGljcyBvZiBleHRlbnNpb24gbW9kdWxlcyB0aGF0IG9wdC1pbiB0bwordXNpbmcgdGhlIG5ldyBtZWNoYW5pc20gbXVjaCBjbG9zZXIgdG8gdGhvc2Ugb2YgUHl0aG9uIHNvdXJjZSBhbmQgYnl0ZWNvZGUKK21vZHVsZXMsIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byB1c2UgYW55IHZhbGlkIGlkZW50aWZpZXIgYXMgYSBtb2R1bGUgbmFtZSwKK3JhdGhlciB0aGFuIGJlaW5nIHJlc3RyaWN0ZWQgdG8gQVNDSUkuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0ODlgIC0tIE11bHRpLXBoYXNlIGV4dGVuc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAgICAgIFBFUCB3cml0dGVuIGJ5IFBldHIgVmlrdG9yaW4sIFN0ZWZhbiBCZWhuZWwsIGFuZCBOaWNrIENvZ2hsYW47CisgICAgICBpbXBsZW1lbnRlZCBieSBQZXRyIFZpa3RvcmluLgorCisKK090aGVyIExhbmd1YWdlIENoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworU29tZSBzbWFsbGVyIGNoYW5nZXMgbWFkZSB0byB0aGUgY29yZSBQeXRob24gbGFuZ3VhZ2UgYXJlOgorCisqIEFkZGVkIHRoZSBgYCJuYW1lcmVwbGFjZSJgYCBlcnJvciBoYW5kbGVycy4gIFRoZSBgYCJiYWNrc2xhc2hyZXBsYWNlImBgCisgIGVycm9yIGhhbmRsZXJzIG5vdyB3b3JrIHdpdGggZGVjb2RpbmcgYW5kIHRyYW5zbGF0aW5nLgorICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE5Njc2YCBhbmQgOmlzc3VlOmAyMjI4NmAuKQorCisqIFRoZSA6b3B0aW9uOmAtYmAgb3B0aW9uIG5vdyBhZmZlY3RzIGNvbXBhcmlzb25zIG9mIDpjbGFzczpgYnl0ZXNgIHdpdGgKKyAgOmNsYXNzOmBpbnRgLiAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAyMzY4MWAuKQorCisqIE5ldyBLYXpha2ggYGBrejEwNDhgYCBhbmQgVGFqaWsgYGBrb2k4X3RgYCA6cmVmOmBjb2RlY3MgPHN0YW5kYXJkLWVuY29kaW5ncz5gLgorICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDIyNjgyYCBhbmQgOmlzc3VlOmAyMjY4MWAuKQorCisqIFByb3BlcnR5IGRvY3N0cmluZ3MgYXJlIG5vdyB3cml0YWJsZS4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IKKyAgOmZ1bmM6YGNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGRvY3N0cmluZ3MuCisgIChDb250cmlidXRlZCBieSBCZXJrZXIgUGVrc2FnIGluIDppc3N1ZTpgMjQwNjRgLikKKworKiBDaXJjdWxhciBpbXBvcnRzIGludm9sdmluZyByZWxhdGl2ZSBpbXBvcnRzIGFyZSBub3cgc3VwcG9ydGVkLgorICAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGFuZCBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3NjM2YC4pCisKKworTmV3IE1vZHVsZXMKKz09PT09PT09PT09CisKK3R5cGluZworLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgdHlwaW5nYCA6dGVybTpgcHJvdmlzaW9uYWwgPHByb3Zpc2lvbmFsIGFwaT5gIG1vZHVsZQorcHJvdmlkZXMgc3RhbmRhcmQgZGVmaW5pdGlvbnMgYW5kIHRvb2xzIGZvciBmdW5jdGlvbiB0eXBlIGFubm90YXRpb25zLgorU2VlIDpyZWY6YFR5cGUgSGludHMgPHdoYXRzbmV3LXBlcC00ODQ+YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLi4gX3doYXRzbmV3LXppcGFwcDoKKworemlwYXBwCistLS0tLS0KKworVGhlIG5ldyA6bW9kOmB6aXBhcHBgIG1vZHVsZSAoc3BlY2lmaWVkIGluIDpwZXA6YDQ0MWApIHByb3ZpZGVzIGFuIEFQSSBhbmQKK2NvbW1hbmQgbGluZSB0b29sIGZvciBjcmVhdGluZyBleGVjdXRhYmxlIFB5dGhvbiBaaXAgQXBwbGljYXRpb25zLCB3aGljaAord2VyZSBpbnRyb2R1Y2VkIGluIFB5dGhvbiAyLjYgaW4gOmlzc3VlOmAxNzM5NDY4YCwgYnV0IHdoaWNoIHdlcmUgbm90IHdlbGwKK3B1YmxpY2l6ZWQsIGVpdGhlciBhdCB0aGUgdGltZSBvciBzaW5jZS4KKworV2l0aCB0aGUgbmV3IG1vZHVsZSwgYnVuZGxpbmcgeW91ciBhcHBsaWNhdGlvbiBpcyBhcyBzaW1wbGUgYXMgcHV0dGluZyBhbGwKK3RoZSBmaWxlcywgaW5jbHVkaW5nIGEgYGBfX21haW5fXy5weWBgIGZpbGUsIGludG8gYSBkaXJlY3RvcnkgYGBteWFwcGBgCithbmQgcnVubmluZzoKKworLi4gY29kZS1ibG9jazo6IHNoZWxsLXNlc3Npb24KKworICAgICQgcHl0aG9uIC1tIHppcGFwcCBteWFwcAorICAgICQgcHl0aG9uIG15YXBwLnB5egorCitUaGUgbW9kdWxlIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIGNvbnRyaWJ1dGVkIGJ5IFBhdWwgTW9vcmUgaW4KKzppc3N1ZTpgMjM0OTFgLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQxYCAtLSBJbXByb3ZpbmcgUHl0aG9uIFpJUCBBcHBsaWNhdGlvbiBTdXBwb3J0CisKKworSW1wcm92ZWQgTW9kdWxlcworPT09PT09PT09PT09PT09PQorCithcmdwYXJzZQorLS0tLS0tLS0KKworVGhlIDpjbGFzczpgfmFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyYCBjbGFzcyBub3cgYWxsb3dzIGRpc2FibGluZworOnJlZjpgYWJicmV2aWF0ZWQgdXNhZ2UgPHByZWZpeC1tYXRjaGluZz5gIG9mIGxvbmcgb3B0aW9ucyBieSBzZXR0aW5nCis6cmVmOmBhbGxvd19hYmJyZXZgIHRvIGBgRmFsc2VgYC4gIChDb250cmlidXRlZCBieSBKb25hdGhhbiBQYXVnaCwKK1N0ZXZlbiBCZXRoYXJkLCBwYXVsIGozIGFuZCBEYW5pZWwgRXJpa3Nzb24gaW4gOmlzc3VlOmAxNDkxMGAuKQorCisKK2FzeW5jaW8KKy0tLS0tLS0KKworU2luY2UgdGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBpcyA6dGVybTpgcHJvdmlzaW9uYWwgPHByb3Zpc2lvbmFsIGFwaT5gLAorYWxsIGNoYW5nZXMgaW50cm9kdWNlZCBpbiBQeXRob24gMy41IGhhdmUgYWxzbyBiZWVuIGJhY2twb3J0ZWQgdG8gUHl0aG9uIDMuNC54LgorCitOb3RhYmxlIGNoYW5nZXMgaW4gdGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBzaW5jZSBQeXRob24gMy40LjA6CisKKyogTmV3IGRlYnVnZ2luZyBBUElzOiA6bWV0aDpgbG9vcC5zZXRfZGVidWcoKSA8YXN5bmNpby5CYXNlRXZlbnRMb29wLnNldF9kZWJ1Zz5gCisgIGFuZCA6bWV0aDpgbG9vcC5nZXRfZGVidWcoKSA8YXN5bmNpby5CYXNlRXZlbnRMb29wLmdldF9kZWJ1Zz5gIG1ldGhvZHMuCisgIChDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lci4pCisKKyogVGhlIHByb2FjdG9yIGV2ZW50IGxvb3Agbm93IHN1cHBvcnRzIFNTTC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGFuZCBWaWN0b3IgU3Rpbm5lciBpbiA6aXNzdWU6YDIyNTYwYC4pCisKKyogQSBuZXcgOm1ldGg6YGxvb3AuaXNfY2xvc2VkKCkgPGFzeW5jaW8uQmFzZUV2ZW50TG9vcC5pc19jbG9zZWQ+YCBtZXRob2QgdG8KKyAgY2hlY2sgaWYgdGhlIGV2ZW50IGxvb3AgaXMgY2xvc2VkLgorICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAyMTMyNmAuKQorCisqIEEgbmV3IDptZXRoOmBsb29wLmNyZWF0ZV90YXNrKCkgPGFzeW5jaW8uQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFzaz5gCisgIHRvIGNvbnZlbmllbnRseSBjcmVhdGUgYW5kIHNjaGVkdWxlIGEgbmV3IDpjbGFzczpgfmFzeW5jaW8uVGFza2AKKyAgZm9yIGEgY29yb3V0aW5lLiAgVGhlIGBgY3JlYXRlX3Rhc2tgYCBtZXRob2QgaXMgYWxzbyB1c2VkIGJ5IGFsbAorICBhc3luY2lvIGZ1bmN0aW9ucyB0aGF0IHdyYXAgY29yb3V0aW5lcyBpbnRvIHRhc2tzLCBzdWNoIGFzCisgIDpmdW5jOmBhc3luY2lvLndhaXRgLCA6ZnVuYzpgYXN5bmNpby5nYXRoZXJgLCBldGMuCisgIChDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lci4pCisKKyogQSBuZXcgOm1ldGg6YHRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpIDxhc3luY2lvLldyaXRlVHJhbnNwb3J0LmdldF93cml0ZV9idWZmZXJfbGltaXRzPmAKKyAgbWV0aG9kIHRvIGlucXVpcmUgZm9yICpoaWdoLSogYW5kICpsb3ctKiB3YXRlciBsaW1pdHMgb2YgdGhlIGZsb3cKKyAgY29udHJvbC4KKyAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyLikKKworKiBUaGUgOmZ1bmM6YH5hc3luY2lvLmFzeW5jYCBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mCisgIDpmdW5jOmB+YXN5bmNpby5lbnN1cmVfZnV0dXJlYC4KKyAgKENvbnRyaWJ1dGVkIGJ5IFl1cnkgU2VsaXZhbm92LikKKworKiBOZXcgOm1ldGg6YGxvb3Auc2V0X3Rhc2tfZmFjdG9yeSgpIDxhc3luY2lvLkJhc2VFdmVudExvb3Auc2V0X3Rhc2tfZmFjdG9yeT5gCisgIGFuZCA6bWV0aDpgbG9vcC5zZXRfdGFza19mYWN0b3J5KCkgPGFzeW5jaW8uQmFzZUV2ZW50TG9vcC5nZXRfdGFza19mYWN0b3J5PmAKKyAgbWV0aG9kcyB0byBjdXN0b21pemUgdGhlIHRhc2sgZmFjdG9yeSB0aGF0CisgIDptZXRoOmBsb29wLmNyZWF0ZV90YXNrKCkgPGFzeW5jaW8uQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFzaz5gIG1ldGhvZCB1c2VzLgorICAoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YuKQorCisqIE5ldyA6bWV0aDpgUXVldWUuam9pbigpIDxhc3luY2lvLlF1ZXVlLmpvaW4+YCBhbmQKKyAgOm1ldGg6YFF1ZXVlLnRhc2tfZG9uZSgpIDxhc3luY2lvLlF1ZXVlLnRhc2tfZG9uZT5gIHF1ZXVlIG1ldGhvZHMuCisgIChDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lci4pCisKKyogVGhlIGBgSm9pbmFibGVRdWV1ZWBgIGNsYXNzIHdhcyByZW1vdmVkLCBpbiBmYXZvciBvZiB0aGUKKyAgOmNsYXNzOmBhc3luY2lvLlF1ZXVlYCBjbGFzcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyLikKKworVXBkYXRlcyBpbiAzLjUuMToKKworKiBUaGUgOmZ1bmM6YH5hc3luY2lvLmVuc3VyZV9mdXR1cmVgIGZ1bmN0aW9uIGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQKKyAgdXNlIGl0LCBzdWNoIGFzIDptZXRoOmBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgpIDxhc3luY2lvLkJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlPmAsCisgIG5vdyBhY2NlcHQgYWxsIGtpbmRzIG9mIDp0ZXJtOmBhd2FpdGFibGUgb2JqZWN0cyA8YXdhaXRhYmxlPmAuCisgIChDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdi4pCisKKyogTmV3IDpmdW5jOmB+YXN5bmNpby5ydW5fY29yb3V0aW5lX3RocmVhZHNhZmVgIGZ1bmN0aW9uIHRvIHN1Ym1pdAorICBjb3JvdXRpbmVzIHRvIGV2ZW50IGxvb3BzIGZyb20gb3RoZXIgdGhyZWFkcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IFZpbmNlbnQgTWljaGVsLikKKworKiBOZXcgOm1ldGg6YFRyYW5zcG9ydC5pc19jbG9zaW5nKCkgPGFzeW5jaW8uQmFzZVRyYW5zcG9ydC5pc19jbG9zaW5nPmAKKyAgbWV0aG9kIHRvIGNoZWNrIGlmIHRoZSB0cmFuc3BvcnQgaXMgY2xvc2luZyBvciBjbG9zZWQuCisgIChDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdi4pCisKKyogVGhlIDptZXRoOmBsb29wLmNyZWF0ZV9zZXJ2ZXIoKSA8YXN5bmNpby5CYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXI+YAorICBtZXRob2QgY2FuIG5vdyBhY2NlcHQgYSBsaXN0IG9mIGhvc3RzLgorICAoQ29udHJpYnV0ZWQgYnkgWWFubiBTaW9ubmVhdS4pCisKK1VwZGF0ZXMgaW4gMy41LjI6CisKKyogTmV3IDptZXRoOmBsb29wLmNyZWF0ZV9mdXR1cmUoKSA8YXN5bmNpby5CYXNlRXZlbnRMb29wLmNyZWF0ZV9mdXR1cmU+YAorICBtZXRob2QgdG8gY3JlYXRlIEZ1dHVyZSBvYmplY3RzLiAgVGhpcyBhbGxvd3MgYWx0ZXJuYXRpdmUgZXZlbnQKKyAgbG9vcCBpbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMKKyAgYHV2bG9vcCA8aHR0cHM6Ly9naXRodWIuY29tL01hZ2ljU3RhY2svdXZsb29wPmBfLCB0byBwcm92aWRlIGEgZmFzdGVyCisgIDpjbGFzczpgYXN5bmNpby5GdXR1cmVgIGltcGxlbWVudGF0aW9uLgorICAoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YuKQorCisqIE5ldyA6bWV0aDpgbG9vcC5nZXRfZXhjZXB0aW9uX2hhbmRsZXIoKSA8YXN5bmNpby5CYXNlRXZlbnRMb29wLmdldF9leGNlcHRpb25faGFuZGxlcj5gCisgIG1ldGhvZCB0byBnZXQgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIGhhbmRsZXIuCisgIChDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdi4pCisKKyogTmV3IDptZXRoOmBTdHJlYW1SZWFkZXIucmVhZHVudGlsKCkgPGFzeW5jaW8uU3RyZWFtUmVhZGVyLnJlYWR1bnRpbD5gCisgIG1ldGhvZCB0byByZWFkIGRhdGEgZnJvbSB0aGUgc3RyZWFtIHVudGlsIGEgc2VwYXJhdG9yIGJ5dGVzCisgIHNlcXVlbmNlIGFwcGVhcnMuCisgIChDb250cmlidXRlZCBieSBNYXJrIEtvcmVuYmVyZy4pCisKKyogVGhlIDptZXRoOmBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKCkgPGFzeW5jaW8uQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbj5gCisgIGFuZCA6bWV0aDpgbG9vcC5jcmVhdGVfc2VydmVyKCkgPGFzeW5jaW8uQmFzZUV2ZW50TG9vcC5jcmVhdGVfc2VydmVyPmAKKyAgbWV0aG9kcyBhcmUgb3B0aW1pemVkIHRvIGF2b2lkIGNhbGxpbmcgdGhlIHN5c3RlbSBgYGdldGFkZHJpbmZvYGAKKyAgZnVuY3Rpb24gaWYgdGhlIGFkZHJlc3MgaXMgYWxyZWFkeSByZXNvbHZlZC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEEuIEplc3NlIEppcnl1IERhdmlzLikKKworKiBUaGUgOm1ldGg6YGxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpIDxhc3luY2lvLkJhc2VFdmVudExvb3Auc29ja19jb25uZWN0PmAKKyAgbm8gbG9uZ2VyIHJlcXVpcmVzIHRoZSAqYWRkcmVzcyogdG8gYmUgcmVzb2x2ZWQgcHJpb3IgdG8gdGhlIGNhbGwuCisgIChDb250cmlidXRlZCBieSBBLiBKZXNzZSBKaXJ5dSBEYXZpcy4pCisKKworYnoyCistLS0KKworVGhlIDptZXRoOmBCWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzcyA8YnoyLkJaMkRlY29tcHJlc3Nvci5kZWNvbXByZXNzPmAKK21ldGhvZCBub3cgYWNjZXB0cyBhbiBvcHRpb25hbCAqbWF4X2xlbmd0aCogYXJndW1lbnQgdG8gbGltaXQgdGhlIG1heGltdW0KK3NpemUgb2YgZGVjb21wcmVzc2VkIGRhdGEuIChDb250cmlidXRlZCBieSBOaWtvbGF1cyBSYXRoIGluIDppc3N1ZTpgMTU5NTVgLikKKworCitjZ2kKKy0tLQorCitUaGUgOmNsYXNzOmB+Y2dpLkZpZWxkU3RvcmFnZWAgY2xhc3Mgbm93IHN1cHBvcnRzIHRoZSA6dGVybTpgY29udGV4dCBtYW5hZ2VyYAorcHJvdG9jb2wuICAoQ29udHJpYnV0ZWQgYnkgQmVya2VyIFBla3NhZyBpbiA6aXNzdWU6YDIwMjg5YC4pCisKKworY21hdGgKKy0tLS0tCisKK0EgbmV3IGZ1bmN0aW9uIDpmdW5jOmB+Y21hdGguaXNjbG9zZWAgcHJvdmlkZXMgYSB3YXkgdG8gdGVzdCBmb3IgYXBwcm94aW1hdGUKK2VxdWFsaXR5LiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzIEJhcmtlciBhbmQgVGFsIEVpbmF0IGluIDppc3N1ZTpgMjQyNzBgLikKKworCitjb2RlCistLS0tCisKK1RoZSA6ZnVuYzpgSW50ZXJhY3RpdmVJbnRlcnByZXRlci5zaG93dHJhY2ViYWNrKCkgPGNvZGUuSW50ZXJhY3RpdmVJbnRlcnByZXRlci5zaG93dHJhY2ViYWNrPmAKK21ldGhvZCBub3cgcHJpbnRzIHRoZSBmdWxsIGNoYWluZWQgdHJhY2ViYWNrLCBqdXN0IGxpa2UgdGhlIGludGVyYWN0aXZlCitpbnRlcnByZXRlci4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzQ0MmAuKQorCisKK2NvbGxlY3Rpb25zCistLS0tLS0tLS0tLQorCisuLiBfd2hhdHNuZXctb3JkZXJlZGRpY3Q6CisKK1RoZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgY2xhc3MgaXMgbm93IGltcGxlbWVudGVkIGluIEMsIHdoaWNoCittYWtlcyBpdCA0IHRvIDEwMCB0aW1lcyBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgRXJpYyBTbm93IGluIDppc3N1ZTpgMTY5OTFgLikKKworOm1ldGg6YE9yZGVyZWREaWN0Lml0ZW1zKCkgPGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0Lml0ZW1zPmAsCis6bWV0aDpgT3JkZXJlZERpY3Qua2V5cygpIDxjb2xsZWN0aW9ucy5PcmRlcmVkRGljdC5rZXlzPmAsCis6bWV0aDpgT3JkZXJlZERpY3QudmFsdWVzKCkgPGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0LnZhbHVlcz5gIHZpZXdzIG5vdyBzdXBwb3J0Cis6ZnVuYzpgcmV2ZXJzZWRgIGl0ZXJhdGlvbi4KKyhDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTk1MDVgLikKKworVGhlIDpjbGFzczpgfmNvbGxlY3Rpb25zLmRlcXVlYCBjbGFzcyBub3cgZGVmaW5lcworOm1ldGg6YH5jb2xsZWN0aW9ucy5kZXF1ZS5pbmRleGAsIDptZXRoOmB+Y29sbGVjdGlvbnMuZGVxdWUuaW5zZXJ0YCwgYW5kCis6bWV0aDpgfmNvbGxlY3Rpb25zLmRlcXVlLmNvcHlgLCBhbmQgc3VwcG9ydHMgdGhlIGBgK2BgIGFuZCBgYCpgYCBvcGVyYXRvcnMuCitUaGlzIGFsbG93cyBkZXF1ZXMgdG8gYmUgcmVjb2duaXplZCBhcyBhIDpjbGFzczpgfmNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2VgCithbmQgaW1wcm92ZXMgdGhlaXIgc3Vic3RpdHV0YWJpbGl0eSBmb3IgbGlzdHMuCisoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4gOmlzc3VlOmAyMzcwNGAuKQorCitEb2NzdHJpbmdzIHByb2R1Y2VkIGJ5IDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgY2FuIG5vdyBiZSB1cGRhdGVkOjoKKworICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCBbJ3gnLCAneSddKQorICAgIFBvaW50Ll9fZG9jX18gKz0gJzogQ2FydGVzaWFuIGNvb2RpbmF0ZScKKyAgICBQb2ludC54Ll9fZG9jX18gPSAnYWJzY2lzc2EnCisgICAgUG9pbnQueS5fX2RvY19fID0gJ29yZGluYXRlJworCisoQ29udHJpYnV0ZWQgYnkgQmVya2VyIFBla3NhZyBpbiA6aXNzdWU6YDI0MDY0YC4pCisKK1RoZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5Vc2VyU3RyaW5nYCBjbGFzcyBub3cgaW1wbGVtZW50cyB0aGUKKzptZXRoOmBfX2dldG5ld2FyZ3NfX2AsIDptZXRoOmBfX3Jtb2RfX2AsIDptZXRoOmB+c3RyLmNhc2Vmb2xkYCwKKzptZXRoOmB+c3RyLmZvcm1hdF9tYXBgLCA6bWV0aDpgfnN0ci5pc3ByaW50YWJsZWAsIGFuZCA6bWV0aDpgfnN0ci5tYWtldHJhbnNgCittZXRob2RzIHRvIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMgb2YgOmNsYXNzOmBzdHJgLgorKENvbnRyaWJ1dGVkIGJ5IEpvZSBKZXZuaWsgaW4gOmlzc3VlOmAyMjE4OWAuKQorCisKK2NvbGxlY3Rpb25zLmFiYworLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bWV0aDpgU2VxdWVuY2UuaW5kZXgoKSA8Y29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlLmluZGV4PmAgbWV0aG9kIG5vdworYWNjZXB0cyAqc3RhcnQqIGFuZCAqc3RvcCogYXJndW1lbnRzIHRvIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZHMKK29mIDpjbGFzczpgdHVwbGVgLCA6Y2xhc3M6YGxpc3RgLCBldGMuCisoQ29udHJpYnV0ZWQgYnkgRGV2aW4gSmVhbnBpZXJyZSBpbiA6aXNzdWU6YDIzMDg2YC4pCisKK0EgbmV3IDpjbGFzczpgfmNvbGxlY3Rpb25zLmFiYy5HZW5lcmF0b3JgIGFic3RyYWN0IGJhc2UgY2xhc3MuIChDb250cmlidXRlZAorYnkgU3RlZmFuIEJlaG5lbCBpbiA6aXNzdWU6YDI0MDE4YC4pCisKK05ldyA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5hYmMuQXdhaXRhYmxlYCwgOmNsYXNzOmB+Y29sbGVjdGlvbnMuYWJjLkNvcm91dGluZWAsCis6Y2xhc3M6YH5jb2xsZWN0aW9ucy5hYmMuQXN5bmNJdGVyYXRvcmAsIGFuZAorOmNsYXNzOmB+Y29sbGVjdGlvbnMuYWJjLkFzeW5jSXRlcmFibGVgIGFic3RyYWN0IGJhc2UgY2xhc3Nlcy4KKyhDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdiBpbiA6aXNzdWU6YDI0MTg0YC4pCisKK0ZvciBlYXJsaWVyIFB5dGhvbiB2ZXJzaW9ucywgYSBiYWNrcG9ydCBvZiB0aGUgbmV3IEFCQ3MgaXMgYXZhaWxhYmxlIGluIGFuCitleHRlcm5hbCBgUHlQSSBwYWNrYWdlIDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2JhY2twb3J0c19hYmM+YF8uCisKKworY29tcGlsZWFsbAorLS0tLS0tLS0tLQorCitBIG5ldyA6bW9kOmBjb21waWxlYWxsYCBvcHRpb24sIDpzYW1wOmAtaiB7Tn1gLCBhbGxvd3MgcnVubmluZyAqTiogd29ya2Vycworc2ltdWx0YW5lb3VzbHkgdG8gcGVyZm9ybSBwYXJhbGxlbCBieXRlY29kZSBjb21waWxhdGlvbi4KK1RoZSA6ZnVuYzpgfmNvbXBpbGVhbGwuY29tcGlsZV9kaXJgIGZ1bmN0aW9uIGhhcyBhIGNvcnJlc3BvbmRpbmcgYGB3b3JrZXJzYGAKK3BhcmFtZXRlci4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNjEwNGAuKQorCitBbm90aGVyIG5ldyBvcHRpb24sIGBgLXJgYCwgYWxsb3dzIGNvbnRyb2xsaW5nIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbgorbGV2ZWwgZm9yIHN1YmRpcmVjdG9yaWVzLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE5NjI4YC4pCisKK1RoZSBgYC1xYGAgY29tbWFuZCBsaW5lIG9wdGlvbiBjYW4gbm93IGJlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSwgaW4KK3doaWNoIGNhc2UgYWxsIG91dHB1dCwgaW5jbHVkaW5nIGVycm9ycywgd2lsbCBiZSBzdXBwcmVzc2VkLiAgVGhlIGNvcnJlc3BvbmRpbmcKK2BgcXVpZXRgYCBwYXJhbWV0ZXIgaW4gOmZ1bmM6YH5jb21waWxlYWxsLmNvbXBpbGVfZGlyYCwKKzpmdW5jOmB+Y29tcGlsZWFsbC5jb21waWxlX2ZpbGVgLCBhbmQgOmZ1bmM6YH5jb21waWxlYWxsLmNvbXBpbGVfcGF0aGAgY2FuIG5vdworYWNjZXB0IGFuIGludGVnZXIgdmFsdWUgaW5kaWNhdGluZyB0aGUgbGV2ZWwgb2Ygb3V0cHV0IHN1cHByZXNzaW9uLgorKENvbnRyaWJ1dGVkIGJ5IFRob21hcyBLbHV5dmVyIGluIDppc3N1ZTpgMjEzMzhgLikKKworCitjb25jdXJyZW50LmZ1dHVyZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1ldGg6YEV4ZWN1dG9yLm1hcCgpIDxjb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3IubWFwPmAgbWV0aG9kIG5vdyBhY2NlcHRzIGEKKypjaHVua3NpemUqIGFyZ3VtZW50IHRvIGFsbG93IGJhdGNoaW5nIG9mIHRhc2tzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugd2hlbgorOm1ldGg6YH5jb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgaXMgdXNlZC4KKyhDb250cmlidXRlZCBieSBEYW4gTydSZWlsbHkgaW4gOmlzc3VlOmAxMTI3MWAuKQorCitUaGUgbnVtYmVyIG9mIHdvcmtlcnMgaW4gdGhlIDpjbGFzczpgfmNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3JgCitjb25zdHJ1Y3RvciBpcyBvcHRpb25hbCBub3cuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1IHRpbWVzIHRoZSBudW1iZXIgb2YgQ1BVcy4KKyhDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAyMTUyN2AuKQorCisKK2NvbmZpZ3BhcnNlcgorLS0tLS0tLS0tLS0tCisKKzptb2Q6YGNvbmZpZ3BhcnNlcmAgbm93IHByb3ZpZGVzIGEgd2F5IHRvIGN1c3RvbWl6ZSB0aGUgY29udmVyc2lvbgorb2YgdmFsdWVzIGJ5IHNwZWNpZnlpbmcgYSBkaWN0aW9uYXJ5IG9mIGNvbnZlcnRlcnMgaW4gdGhlCis6Y2xhc3M6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyYCBjb25zdHJ1Y3Rvciwgb3IgYnkgZGVmaW5pbmcgdGhlbQorYXMgbWV0aG9kcyBpbiBgYENvbmZpZ1BhcnNlcmBgIHN1YmNsYXNzZXMuICBDb252ZXJ0ZXJzIGRlZmluZWQgaW4KK2EgcGFyc2VyIGluc3RhbmNlIGFyZSBpbmhlcml0ZWQgYnkgaXRzIHNlY3Rpb24gcHJveGllcy4KKworRXhhbXBsZTo6CisKKyAgICA+Pj4gaW1wb3J0IGNvbmZpZ3BhcnNlcgorICAgID4+PiBjb252ID0ge30KKyAgICA+Pj4gY29udlsnbGlzdCddID0gbGFtYmRhIHY6IFtlLnN0cmlwKCkgZm9yIGUgaW4gdi5zcGxpdCgpIGlmIGUuc3RyaXAoKV0KKyAgICA+Pj4gY2ZnID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcihjb252ZXJ0ZXJzPWNvbnYpCisgICAgPj4+IGNmZy5yZWFkX3N0cmluZygiIiIKKyAgICAuLi4gW3NdCisgICAgLi4uIGxpc3QgPSBhIGIgYyBkIGUgZiBnCisgICAgLi4uICIiIikKKyAgICA+Pj4gY2ZnLmdldCgncycsICdsaXN0JykKKyAgICAnYSBiIGMgZCBlIGYgZycKKyAgICA+Pj4gY2ZnLmdldGxpc3QoJ3MnLCAnbGlzdCcpCisgICAgWydhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJ10KKyAgICA+Pj4gc2VjdGlvbiA9IGNmZ1sncyddCisgICAgPj4+IHNlY3Rpb24uZ2V0bGlzdCgnbGlzdCcpCisgICAgWydhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJ10KKworKENvbnRyaWJ1dGVkIGJ5IMWBdWthc3ogTGFuZ2EgaW4gOmlzc3VlOmAxODE1OWAuKQorCisKK2NvbnRleHRsaWIKKy0tLS0tLS0tLS0KKworVGhlIG5ldyA6ZnVuYzpgfmNvbnRleHRsaWIucmVkaXJlY3Rfc3RkZXJyYCA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCAoc2ltaWxhciB0bworOmZ1bmM6YH5jb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dGApIG1ha2VzIGl0IGVhc2llciBmb3IgdXRpbGl0eSBzY3JpcHRzIHRvCitoYW5kbGUgaW5mbGV4aWJsZSBBUElzIHRoYXQgd3JpdGUgdGhlaXIgb3V0cHV0IHRvIDpkYXRhOmBzeXMuc3RkZXJyYCBhbmQKK2Rvbid0IHByb3ZpZGUgYW55IG9wdGlvbnMgdG8gcmVkaXJlY3QgaXQ6OgorCisgICAgPj4+IGltcG9ydCBjb250ZXh0bGliLCBpbywgbG9nZ2luZworICAgID4+PiBmID0gaW8uU3RyaW5nSU8oKQorICAgID4+PiB3aXRoIGNvbnRleHRsaWIucmVkaXJlY3Rfc3RkZXJyKGYpOgorICAgIC4uLiAgICAgbG9nZ2luZy53YXJuaW5nKCd3YXJuaW5nJykKKyAgICAuLi4KKyAgICA+Pj4gZi5nZXR2YWx1ZSgpCisgICAgJ1dBUk5JTkc6cm9vdDp3YXJuaW5nXG4nCisKKyhDb250cmlidXRlZCBieSBCZXJrZXIgUGVrc2FnIGluIDppc3N1ZTpgMjIzODlgLikKKworCitjc3YKKy0tLQorCitUaGUgOm1ldGg6YH5jc3YuY3N2d3JpdGVyLndyaXRlcm93YCBtZXRob2Qgbm93IHN1cHBvcnRzIGFyYml0cmFyeSBpdGVyYWJsZXMsCitub3QganVzdCBzZXF1ZW5jZXMuICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDIzMTcxYC4pCisKKworY3Vyc2VzCistLS0tLS0KKworVGhlIG5ldyA6ZnVuYzpgfmN1cnNlcy51cGRhdGVfbGluZXNfY29sc2AgZnVuY3Rpb24gdXBkYXRlcyB0aGUgOmVudnZhcjpgTElORVNgCithbmQgOmVudnZhcjpgQ09MU2AgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGRldGVjdGluZworbWFudWFsIHNjcmVlbiByZXNpemluZy4gIChDb250cmlidXRlZCBieSBBcm5vbiBZYWFyaSBpbiA6aXNzdWU6YDQyNTRgLikKKworCitkYm0KKy0tLQorCis6ZnVuYzpgZHVtYi5vcGVuIDxkYm0uZHVtYi5vcGVuPmAgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgZGF0YWJhc2Ugd2hlbiB0aGUgZmxhZworaGFzIHRoZSB2YWx1ZSBgYCJuImBgLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE4MDM5YC4pCisKKworZGlmZmxpYgorLS0tLS0tLQorCitUaGUgY2hhcnNldCBvZiBIVE1MIGRvY3VtZW50cyBnZW5lcmF0ZWQgYnkKKzptZXRoOmBIdG1sRGlmZi5tYWtlX2ZpbGUoKSA8ZGlmZmxpYi5IdG1sRGlmZi5tYWtlX2ZpbGU+YAorY2FuIG5vdyBiZSBjdXN0b21pemVkIGJ5IHVzaW5nIGEgbmV3ICpjaGFyc2V0KiBrZXl3b3JkLW9ubHkgYXJndW1lbnQuCitUaGUgZGVmYXVsdCBjaGFyc2V0IG9mIEhUTUwgZG9jdW1lbnQgY2hhbmdlZCBmcm9tIGBgIklTTy04ODU5LTEiYGAKK3RvIGBgInV0Zi04ImBgLgorKENvbnRyaWJ1dGVkIGJ5IEJlcmtlciBQZWtzYWcgaW4gOmlzc3VlOmAyMDUyYC4pCisKK1RoZSA6ZnVuYzpgfmRpZmZsaWIuZGlmZl9ieXRlc2AgZnVuY3Rpb24gY2FuIG5vdyBjb21wYXJlIGxpc3RzIG9mIGJ5dGUKK3N0cmluZ3MuICBUaGlzIGZpeGVzIGEgcmVncmVzc2lvbiBmcm9tIFB5dGhvbiAyLgorKENvbnRyaWJ1dGVkIGJ5IFRlcnJ5IEouIFJlZWR5IGFuZCBHcmVnIFdhcmQgaW4gOmlzc3VlOmAxNzQ0NWAuKQorCisKK2Rpc3R1dGlscworLS0tLS0tLS0tCisKK0JvdGggdGhlIGBgYnVpbGRgYCBhbmQgYGBidWlsZF9leHRgYCBjb21tYW5kcyBub3cgYWNjZXB0IGEgYGAtamBgIG9wdGlvbiB0bworZW5hYmxlIHBhcmFsbGVsIGJ1aWxkaW5nIG9mIGV4dGVuc2lvbiBtb2R1bGVzLgorKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgNTMwOWAuKQorCitUaGUgOm1vZDpgZGlzdHV0aWxzYCBtb2R1bGUgbm93IHN1cHBvcnRzIGBgeHpgYCBjb21wcmVzc2lvbiwgYW5kIGNhbiBiZQorZW5hYmxlZCBieSBwYXNzaW5nIGBgeHp0YXJgYCBhcyBhbiBhcmd1bWVudCB0byBgYGJkaXN0IC0tZm9ybWF0YGAuCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE2MzE0YC4pCisKKworZG9jdGVzdAorLS0tLS0tLQorCitUaGUgOmZ1bmM6YH5kb2N0ZXN0LkRvY1Rlc3RTdWl0ZWAgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eQorOmNsYXNzOmB1bml0dGVzdC5UZXN0U3VpdGVgIGlmICptb2R1bGUqIGNvbnRhaW5zIG5vIGRvY3N0cmluZ3MsIGluc3RlYWQgb2YKK3JhaXNpbmcgOmV4YzpgVmFsdWVFcnJvcmAuICAoQ29udHJpYnV0ZWQgYnkgR2xlbm4gSm9uZXMgaW4gOmlzc3VlOmAxNTkxNmAuKQorCisKK2VtYWlsCistLS0tLQorCitBIG5ldyBwb2xpY3kgb3B0aW9uIDphdHRyOmBQb2xpY3kubWFuZ2xlX2Zyb21fIDxlbWFpbC5wb2xpY3kuUG9saWN5Lm1hbmdsZV9mcm9tXz5gCitjb250cm9scyB3aGV0aGVyIG9yIG5vdCBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggYGAiRnJvbSAiYGAgaW4gZW1haWwgYm9kaWVzIGFyZQorcHJlZml4ZWQgd2l0aCBhIGBgIj4iYGAgY2hhcmFjdGVyIGJ5IGdlbmVyYXRvcnMuICBUaGUgZGVmYXVsdCBpcyBgYFRydWVgYCBmb3IKKzphdHRyOmB+ZW1haWwucG9saWN5LmNvbXBhdDMyYCBhbmQgYGBGYWxzZWBgIGZvciBhbGwgb3RoZXIgcG9saWNpZXMuCisoQ29udHJpYnV0ZWQgYnkgTWlsYW4gT2JlcmtpcmNoIGluIDppc3N1ZTpgMjAwOThgLikKKworQSBuZXcKKzptZXRoOmBNZXNzYWdlLmdldF9jb250ZW50X2Rpc3Bvc2l0aW9uKCkgPGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudF9kaXNwb3NpdGlvbj5gCittZXRob2QgcHJvdmlkZXMgZWFzeSBhY2Nlc3MgdG8gYSBjYW5vbmljYWwgdmFsdWUgZm9yIHRoZQorOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlci4KKyhDb250cmlidXRlZCBieSBBYmhpbGFzaCBSYWogaW4gOmlzc3VlOmAyMTA4M2AuKQorCitBIG5ldyBwb2xpY3kgb3B0aW9uIDphdHRyOmBFbWFpbFBvbGljeS51dGY4IDxlbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kudXRmOD5gCitjYW4gYmUgc2V0IHRvIGBgVHJ1ZWBgIHRvIGVuY29kZSBlbWFpbCBoZWFkZXJzIHVzaW5nIHRoZSBVVEYtOCBjaGFyc2V0IGluc3RlYWQKK29mIHVzaW5nIGVuY29kZWQgd29yZHMuICBUaGlzIGFsbG93cyBgYE1lc3NhZ2VzYGAgdG8gYmUgZm9ybWF0dGVkIGFjY29yZGluZyB0bworOnJmYzpgNjUzMmAgYW5kIHVzZWQgd2l0aCBhbiBTTVRQIHNlcnZlciB0aGF0IHN1cHBvcnRzIHRoZSA6cmZjOmA2NTMxYAorYGBTTVRQVVRGOGBgIGV4dGVuc2lvbi4gIChDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4KKzppc3N1ZTpgMjQyMTFgLikKKworVGhlIDpjbGFzczpgbWltZS50ZXh0Lk1JTUVUZXh0IDxlbWFpbC5taW1lLnRleHQuTUlNRVRleHQ+YCBjb25zdHJ1Y3RvciBub3cKK2FjY2VwdHMgYSA6Y2xhc3M6YGNoYXJzZXQuQ2hhcnNldCA8ZW1haWwuY2hhcnNldC5DaGFyc2V0PmAgaW5zdGFuY2UuCisoQ29udHJpYnV0ZWQgYnkgQ2xhdWRlIFBhcm96IGFuZCBCZXJrZXIgUGVrc2FnIGluIDppc3N1ZTpgMTYzMjRgLikKKworCitlbnVtCistLS0tCisKK1RoZSA6Y2xhc3M6YH5lbnVtLkVudW1gIGNhbGxhYmxlIGhhcyBhIG5ldyBwYXJhbWV0ZXIgKnN0YXJ0KiB0bworc3BlY2lmeSB0aGUgaW5pdGlhbCBudW1iZXIgb2YgZW51bSB2YWx1ZXMgaWYgb25seSAqbmFtZXMqIGFyZSBwcm92aWRlZDo6CisKKyAgICA+Pj4gQW5pbWFsID0gZW51bS5FbnVtKCdBbmltYWwnLCAnY2F0IGRvZycsIHN0YXJ0PTEwKQorICAgID4+PiBBbmltYWwuY2F0CisgICAgPEFuaW1hbC5jYXQ6IDEwPgorICAgID4+PiBBbmltYWwuZG9nCisgICAgPEFuaW1hbC5kb2c6IDExPgorCisoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMjE3MDZgLikKKworCitmYXVsdGhhbmRsZXIKKy0tLS0tLS0tLS0tLQorCitUaGUgOmZ1bmM6YH5mYXVsdGhhbmRsZXIuZW5hYmxlYCwgOmZ1bmM6YH5mYXVsdGhhbmRsZXIucmVnaXN0ZXJgLAorOmZ1bmM6YH5mYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tgIGFuZAorOmZ1bmM6YH5mYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXJgIGZ1bmN0aW9ucyBub3cgYWNjZXB0IGZpbGUKK2Rlc2NyaXB0b3JzIGluIGFkZGl0aW9uIHRvIGZpbGUtbGlrZSBvYmplY3RzLgorKENvbnRyaWJ1dGVkIGJ5IFdlaSBXdSBpbiA6aXNzdWU6YDIzNTY2YC4pCisKKworZnVuY3Rvb2xzCistLS0tLS0tLS0KKworLi4gX3doYXRzbmV3LWxydWNhY2hlOgorCitNb3N0IG9mIHRoZSA6ZnVuYzpgfmZ1bmN0b29scy5scnVfY2FjaGVgIG1hY2hpbmVyeSBpcyBub3cgaW1wbGVtZW50ZWQgaW4gQywgbWFraW5nCitpdCBzaWduaWZpY2FudGx5IGZhc3Rlci4gIChDb250cmlidXRlZCBieSBNYXR0IEpvaW5lciwgQWxleGV5IEthY2hheWV2LCBhbmQKK1NlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNDM3M2AuKQorCisKK2dsb2IKKy0tLS0KKworVGhlIDpmdW5jOmB+Z2xvYi5pZ2xvYmAgYW5kIDpmdW5jOmB+Z2xvYi5nbG9iYCBmdW5jdGlvbnMgbm93IHN1cHBvcnQgcmVjdXJzaXZlCitzZWFyY2ggaW4gc3ViZGlyZWN0b3JpZXMsIHVzaW5nIHRoZSBgYCIqKiJgYCBwYXR0ZXJuLgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxMzk2OGAuKQorCisKK2d6aXAKKy0tLS0KKworVGhlICptb2RlKiBhcmd1bWVudCBvZiB0aGUgOmNsYXNzOmB+Z3ppcC5HemlwRmlsZWAgY29uc3RydWN0b3Igbm93CithY2NlcHRzIGBgIngiYGAgdG8gcmVxdWVzdCBleGNsdXNpdmUgY3JlYXRpb24uCisoQ29udHJpYnV0ZWQgYnkgVGltIEhlYW5leSBpbiA6aXNzdWU6YDE5MjIyYC4pCisKKworaGVhcHEKKy0tLS0tCisKK0VsZW1lbnQgY29tcGFyaXNvbiBpbiA6ZnVuYzpgfmhlYXBxLm1lcmdlYCBjYW4gbm93IGJlIGN1c3RvbWl6ZWQgYnkKK3Bhc3NpbmcgYSA6dGVybTpga2V5IGZ1bmN0aW9uYCBpbiBhIG5ldyBvcHRpb25hbCAqa2V5KiBrZXl3b3JkIGFyZ3VtZW50LAorYW5kIGEgbmV3IG9wdGlvbmFsICpyZXZlcnNlKiBrZXl3b3JkIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHJldmVyc2UgZWxlbWVudAorY29tcGFyaXNvbjo6CisKKyAgICA+Pj4gaW1wb3J0IGhlYXBxCisgICAgPj4+IGEgPSBbJzknLCAnNzc3JywgJzU1NTU1J10KKyAgICA+Pj4gYiA9IFsnODgnLCAnNjY2NiddCisgICAgPj4+IGxpc3QoaGVhcHEubWVyZ2UoYSwgYiwga2V5PWxlbikpCisgICAgWyc5JywgJzg4JywgJzc3NycsICc2NjY2JywgJzU1NTU1J10KKyAgICA+Pj4gbGlzdChoZWFwcS5tZXJnZShyZXZlcnNlZChhKSwgcmV2ZXJzZWQoYiksIGtleT1sZW4sIHJldmVyc2U9VHJ1ZSkpCisgICAgWyc1NTU1NScsICc2NjY2JywgJzc3NycsICc4OCcsICc5J10KKworKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyIGluIDppc3N1ZTpgMTM3NDJgLikKKworCitodHRwCistLS0tCisKK0EgbmV3IDpjbGFzczpgSFRUUFN0YXR1cyA8aHR0cC5IVFRQU3RhdHVzPmAgZW51bSB0aGF0IGRlZmluZXMgYSBzZXQgb2YKK0hUVFAgc3RhdHVzIGNvZGVzLCByZWFzb24gcGhyYXNlcyBhbmQgbG9uZyBkZXNjcmlwdGlvbnMgd3JpdHRlbiBpbiBFbmdsaXNoLgorKENvbnRyaWJ1dGVkIGJ5IERlbWlhbiBCcmVjaHQgaW4gOmlzc3VlOmAyMTc5M2AuKQorCisKK2h0dHAuY2xpZW50CistLS0tLS0tLS0tLQorCis6bWV0aDpgSFRUUENvbm5lY3Rpb24uZ2V0cmVzcG9uc2UoKSA8aHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24uZ2V0cmVzcG9uc2U+YAorbm93IHJhaXNlcyBhIDpleGM6YH5odHRwLmNsaWVudC5SZW1vdGVEaXNjb25uZWN0ZWRgIGV4Y2VwdGlvbiB3aGVuIGEKK3JlbW90ZSBzZXJ2ZXIgY29ubmVjdGlvbiBpcyBjbG9zZWQgdW5leHBlY3RlZGx5LiAgQWRkaXRpb25hbGx5LCBpZiBhCis6ZXhjOmBDb25uZWN0aW9uRXJyb3JgIChvZiB3aGljaCBgYFJlbW90ZURpc2Nvbm5lY3RlZGBgCitpcyBhIHN1YmNsYXNzKSBpcyByYWlzZWQsIHRoZSBjbGllbnQgc29ja2V0IGlzIG5vdyBjbG9zZWQgYXV0b21hdGljYWxseSwKK2FuZCB3aWxsIHJlY29ubmVjdCBvbiB0aGUgbmV4dCByZXF1ZXN0OjoKKworICAgIGltcG9ydCBodHRwLmNsaWVudAorICAgIGNvbm4gPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LnB5dGhvbi5vcmcnKQorICAgIGZvciByZXRyaWVzIGluIHJhbmdlKDMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLnJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgICAgIHJlc3AgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgZXhjZXB0IGh0dHAuY2xpZW50LlJlbW90ZURpc2Nvbm5lY3RlZDoKKyAgICAgICAgICAgIHBhc3MKKworKENvbnRyaWJ1dGVkIGJ5IE1hcnRpbiBQYW50ZXIgaW4gOmlzc3VlOmAzNTY2YC4pCisKKworaWRsZWxpYiBhbmQgSURMRQorLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSBpZGxlbGliIGltcGxlbWVudHMgdGhlIElETEUgc2hlbGwgYW5kIGVkaXRvciBhbmQgaXMgbm90IGludGVuZGVkIGZvcgoraW1wb3J0IGJ5IG90aGVyIHByb2dyYW1zLCBpdCBnZXRzIGltcHJvdmVtZW50cyB3aXRoIGV2ZXJ5IHJlbGVhc2UuICBTZWUKKzpmaWxlOmBMaWIvaWRsZWxpYi9ORVdTLnR4dGAgZm9yIGEgY3VtdWxhdGl2ZSBsaXN0IG9mIGNoYW5nZXMgc2luY2UgMy40LjAsCithcyB3ZWxsIGFzIGNoYW5nZXMgbWFkZSBpbiBmdXR1cmUgMy41LnggcmVsZWFzZXMuIFRoaXMgZmlsZSBpcyBhbHNvIGF2YWlsYWJsZQorZnJvbSB0aGUgSURMRSA6bWVudXNlbGVjdGlvbjpgSGVscCAtLT4gQWJvdXQgSURMRWAgZGlhbG9nLgorCisKK2ltYXBsaWIKKy0tLS0tLS0KKworVGhlIDpjbGFzczpgfmltYXBsaWIuSU1BUDRgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgOnRlcm06YGNvbnRleHQgbWFuYWdlcmAgcHJvdG9jb2wuCitXaGVuIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCB0aGUgSU1BUDQgYGBMT0dPVVRgYAorY29tbWFuZCB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgorKENvbnRyaWJ1dGVkIGJ5IFRhcmVrIFppYWTDqSBhbmQgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDQ5NzJgLikKKworVGhlIDptb2Q6YGltYXBsaWJgIG1vZHVsZSBub3cgc3VwcG9ydHMgOnJmYzpgNTE2MWAgKEVOQUJMRSBFeHRlbnNpb24pCithbmQgOnJmYzpgNjg1NWAgKFVURi04IFN1cHBvcnQpIHZpYSB0aGUgOm1ldGg6YElNQVA0LmVuYWJsZSgpIDxpbWFwbGliLklNQVA0LmVuYWJsZT5gCittZXRob2QuICBBIG5ldyA6YXR0cjpgSU1BUDQudXRmOF9lbmFibGVkIDxpbWFwbGliLklNQVA0LnV0ZjhfZW5hYmxlZD5gCithdHRyaWJ1dGUgdHJhY2tzIHdoZXRoZXIgb3Igbm90IDpyZmM6YDY4NTVgIHN1cHBvcnQgaXMgZW5hYmxlZC4KKyhDb250cmlidXRlZCBieSBNaWxhbiBPYmVya2lyY2gsIFIuIERhdmlkIE11cnJheSwgYW5kIE1hY2llaiBTenVsaWsgaW4KKzppc3N1ZTpgMjE4MDBgLikKKworVGhlIDptb2Q6YGltYXBsaWJgIG1vZHVsZSBub3cgYXV0b21hdGljYWxseSBlbmNvZGVzIG5vbi1BU0NJSSBzdHJpbmcgdXNlcm5hbWVzCithbmQgcGFzc3dvcmRzIHVzaW5nIFVURi04LCBhcyByZWNvbW1lbmRlZCBieSB0aGUgUkZDcy4gIChDb250cmlidXRlZCBieSBNaWxhbgorT2JlcmtpcmNoIGluIDppc3N1ZTpgMjE4MDBgLikKKworCitpbWdoZHIKKy0tLS0tLQorCitUaGUgOmZ1bmM6YH5pbWdoZHIud2hhdGAgZnVuY3Rpb24gbm93IHJlY29nbml6ZXMgdGhlCitgT3BlbkVYUiA8aHR0cDovL3d3dy5vcGVuZXhyLmNvbT5gXyBmb3JtYXQKKyhjb250cmlidXRlZCBieSBNYXJ0aW4gVmlnbmFsaSBhbmQgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMjAyOTVgKSwKK2FuZCB0aGUgYFdlYlAgPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYlA+YF8gZm9ybWF0CisoY29udHJpYnV0ZWQgYnkgRmFicmljZSBBbmVjaGUgYW5kIENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDIwMTk3YC4pCisKKworaW1wb3J0bGliCistLS0tLS0tLS0KKworVGhlIDpjbGFzczpgdXRpbC5MYXp5TG9hZGVyIDxpbXBvcnRsaWIudXRpbC5MYXp5TG9hZGVyPmAgY2xhc3MgYWxsb3dzIGZvcgorbGF6eSBsb2FkaW5nIG9mIG1vZHVsZXMgaW4gYXBwbGljYXRpb25zIHdoZXJlIHN0YXJ0dXAgdGltZSBpcyBpbXBvcnRhbnQuCisoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTc2MjFgLikKKworVGhlIDpmdW5jOmBhYmMuSW5zcGVjdExvYWRlci5zb3VyY2VfdG9fY29kZSgpIDxpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuc291cmNlX3RvX2NvZGU+YAorbWV0aG9kIGlzIG5vdyBhIHN0YXRpYyBtZXRob2QuICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBpbml0aWFsaXplIGEgbW9kdWxlCitvYmplY3Qgd2l0aCBjb2RlIGNvbXBpbGVkIGZyb20gYSBzdHJpbmcgYnkgcnVubmluZworYGBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXylgYC4KKyhDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24gaW4gOmlzc3VlOmAyMTE1NmAuKQorCitUaGUgbmV3IDpmdW5jOmB1dGlsLm1vZHVsZV9mcm9tX3NwZWMoKSA8aW1wb3J0bGliLnV0aWwubW9kdWxlX2Zyb21fc3BlYz5gCitmdW5jdGlvbiBpcyBub3cgdGhlIHByZWZlcnJlZCB3YXkgdG8gY3JlYXRlIGEgbmV3IG1vZHVsZS4gIEFzIG9wcG9zZWQgdG8KK2NyZWF0aW5nIGEgOmNsYXNzOmB0eXBlcy5Nb2R1bGVUeXBlYCBpbnN0YW5jZSBkaXJlY3RseSwgdGhpcyBuZXcgZnVuY3Rpb24KK3dpbGwgc2V0IHRoZSB2YXJpb3VzIGltcG9ydC1jb250cm9sbGVkIGF0dHJpYnV0ZXMgYmFzZWQgb24gdGhlIHBhc3NlZC1pbgorc3BlYyBvYmplY3QuICAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMjAzODNgLikKKworCitpbnNwZWN0CistLS0tLS0tCisKK0JvdGggdGhlIDpjbGFzczpgfmluc3BlY3QuU2lnbmF0dXJlYCBhbmQgOmNsYXNzOmB+aW5zcGVjdC5QYXJhbWV0ZXJgIGNsYXNzZXMgYXJlCitub3cgcGlja2xhYmxlIGFuZCBoYXNoYWJsZS4gIChDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdiBpbiA6aXNzdWU6YDIwNzI2YAorYW5kIDppc3N1ZTpgMjAzMzRgLikKKworQSBuZXcKKzptZXRoOmBCb3VuZEFyZ3VtZW50cy5hcHBseV9kZWZhdWx0cygpIDxpbnNwZWN0LkJvdW5kQXJndW1lbnRzLmFwcGx5X2RlZmF1bHRzPmAKK21ldGhvZCBwcm92aWRlcyBhIHdheSB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3NpbmcgYXJndW1lbnRzOjoKKworICAgID4+PiBkZWYgZm9vKGEsIGI9J2hhbScsICphcmdzKTogcGFzcworICAgID4+PiBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykuYmluZCgnc3BhbScpCisgICAgPj4+IGJhLmFwcGx5X2RlZmF1bHRzKCkKKyAgICA+Pj4gYmEuYXJndW1lbnRzCisgICAgT3JkZXJlZERpY3QoWygnYScsICdzcGFtJyksICgnYicsICdoYW0nKSwgKCdhcmdzJywgKCkpXSkKKworKENvbnRyaWJ1dGVkIGJ5IFl1cnkgU2VsaXZhbm92IGluIDppc3N1ZTpgMjQxOTBgLikKKworQSBuZXcgY2xhc3MgbWV0aG9kCis6bWV0aDpgU2lnbmF0dXJlLmZyb21fY2FsbGFibGUoKSA8aW5zcGVjdC5TaWduYXR1cmUuZnJvbV9jYWxsYWJsZT5gIG1ha2VzCitzdWJjbGFzc2luZyBvZiA6Y2xhc3M6YH5pbnNwZWN0LlNpZ25hdHVyZWAgZWFzaWVyLiAgKENvbnRyaWJ1dGVkCitieSBZdXJ5IFNlbGl2YW5vdiBhbmQgRXJpYyBTbm93IGluIDppc3N1ZTpgMTczNzNgLikKKworVGhlIDpmdW5jOmB+aW5zcGVjdC5zaWduYXR1cmVgIGZ1bmN0aW9uIG5vdyBhY2NlcHRzIGEgKmZvbGxvd193cmFwcGVkKgorb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCwgd2hpY2gsIHdoZW4gc2V0IHRvIGBgRmFsc2VgYCwgZGlzYWJsZXMgYXV0b21hdGljCitmb2xsb3dpbmcgb2YgYGBfX3dyYXBwZWRfX2BgIGxpbmtzLgorKENvbnRyaWJ1dGVkIGJ5IFl1cnkgU2VsaXZhbm92IGluIDppc3N1ZTpgMjA2OTFgLikKKworQSBzZXQgb2YgbmV3IGZ1bmN0aW9ucyB0byBpbnNwZWN0Cis6dGVybTpgY29yb3V0aW5lIGZ1bmN0aW9ucyA8Y29yb3V0aW5lIGZ1bmN0aW9uPmAgYW5kCis6dGVybTpgY29yb3V0aW5lIG9iamVjdHMgPGNvcm91dGluZT5gIGhhcyBiZWVuIGFkZGVkOgorOmZ1bmM6YH5pbnNwZWN0LmlzY29yb3V0aW5lYCwgOmZ1bmM6YH5pbnNwZWN0LmlzY29yb3V0aW5lZnVuY3Rpb25gLAorOmZ1bmM6YH5pbnNwZWN0LmlzYXdhaXRhYmxlYCwgOmZ1bmM6YH5pbnNwZWN0LmdldGNvcm91dGluZWxvY2Fsc2AsCithbmQgOmZ1bmM6YH5pbnNwZWN0LmdldGNvcm91dGluZXN0YXRlYC4KKyhDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdiBpbiA6aXNzdWU6YDI0MDE3YCBhbmQgOmlzc3VlOmAyNDQwMGAuKQorCitUaGUgOmZ1bmM6YH5pbnNwZWN0LnN0YWNrYCwgOmZ1bmM6YH5pbnNwZWN0LnRyYWNlYCwKKzpmdW5jOmB+aW5zcGVjdC5nZXRvdXRlcmZyYW1lc2AsIGFuZCA6ZnVuYzpgfmluc3BlY3QuZ2V0aW5uZXJmcmFtZXNgCitmdW5jdGlvbnMgbm93IHJldHVybiBhIGxpc3Qgb2YgbmFtZWQgdHVwbGVzLgorKENvbnRyaWJ1dGVkIGJ5IERhbmllbCBTaGFoYWYgaW4gOmlzc3VlOmAxNjgwOGAuKQorCisKK2lvCistLQorCitBIG5ldyA6bWV0aDpgQnVmZmVyZWRJT0Jhc2UucmVhZGludG8xKCkgPGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRpbnRvMT5gCittZXRob2QsIHRoYXQgdXNlcyBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0ncworOm1ldGg6YFJhd0lPQmFzZS5yZWFkKCkgPGlvLlJhd0lPQmFzZS5yZWFkPmAgb3IKKzptZXRoOmBSYXdJT0Jhc2UucmVhZGludG8oKSA8aW8uUmF3SU9CYXNlLnJlYWRpbnRvPmAgbWV0aG9kcy4KKyhDb250cmlidXRlZCBieSBOaWtvbGF1cyBSYXRoIGluIDppc3N1ZTpgMjA1NzhgLikKKworCitpcGFkZHJlc3MKKy0tLS0tLS0tLQorCitCb3RoIHRoZSA6Y2xhc3M6YH5pcGFkZHJlc3MuSVB2NE5ldHdvcmtgIGFuZCA6Y2xhc3M6YH5pcGFkZHJlc3MuSVB2Nk5ldHdvcmtgIGNsYXNzZXMKK25vdyBhY2NlcHQgYW4gYGAoYWRkcmVzcywgbmV0bWFzaylgYCB0dXBsZSBhcmd1bWVudCwgc28gYXMgdG8gZWFzaWx5IGNvbnN0cnVjdAorbmV0d29yayBvYmplY3RzIGZyb20gZXhpc3RpbmcgYWRkcmVzc2VzOjoKKworICAgID4+PiBpbXBvcnQgaXBhZGRyZXNzCisgICAgPj4+IGlwYWRkcmVzcy5JUHY0TmV0d29yaygoJzEyNy4wLjAuMCcsIDgpKQorICAgIElQdjROZXR3b3JrKCcxMjcuMC4wLjAvOCcpCisgICAgPj4+IGlwYWRkcmVzcy5JUHY0TmV0d29yaygoJzEyNy4wLjAuMCcsICcyNTUuMC4wLjAnKSkKKyAgICBJUHY0TmV0d29yaygnMTI3LjAuMC4wLzgnKQorCisoQ29udHJpYnV0ZWQgYnkgUGV0ZXIgTW9vZHkgYW5kIEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTY1MzFgLikKKworQSBuZXcgOmF0dHI6YH5pcGFkZHJlc3MuSVB2NE5ldHdvcmsucmV2ZXJzZV9wb2ludGVyYCBhdHRyaWJ1dGUgZm9yIHRoZQorOmNsYXNzOmB+aXBhZGRyZXNzLklQdjROZXR3b3JrYCBhbmQgOmNsYXNzOmB+aXBhZGRyZXNzLklQdjZOZXR3b3JrYCBjbGFzc2VzCityZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSByZXZlcnNlIEROUyBQVFIgcmVjb3JkOjoKKworICAgID4+PiBpbXBvcnQgaXBhZGRyZXNzCisgICAgPj4+IGFkZHIgPSBpcGFkZHJlc3MuSVB2NEFkZHJlc3MoJzEyNy4wLjAuMScpCisgICAgPj4+IGFkZHIucmV2ZXJzZV9wb2ludGVyCisgICAgJzEuMC4wLjEyNy5pbi1hZGRyLmFycGEnCisgICAgPj4+IGFkZHI2ID0gaXBhZGRyZXNzLklQdjZBZGRyZXNzKCc6OjEnKQorICAgID4+PiBhZGRyNi5yZXZlcnNlX3BvaW50ZXIKKyAgICAnMS4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLmlwNi5hcnBhJworCisoQ29udHJpYnV0ZWQgYnkgTGVvbiBXZWJlciBpbiA6aXNzdWU6YDIwNDgwYC4pCisKKworanNvbgorLS0tLQorCitUaGUgOm1vZDpganNvbi50b29sYCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIG5vdyBwcmVzZXJ2ZXMgdGhlIG9yZGVyIG9mIGtleXMgaW4KK0pTT04gb2JqZWN0cyBwYXNzZWQgaW4gaW5wdXQuICBUaGUgbmV3IGBgLS1zb3J0LWtleXNgYCBvcHRpb24gY2FuIGJlIHVzZWQKK3RvIHNvcnQgdGhlIGtleXMgYWxwaGFiZXRpY2FsbHkuIChDb250cmlidXRlZCBieSBCZXJrZXIgUGVrc2FnCitpbiA6aXNzdWU6YDIxNjUwYC4pCisKK0pTT04gZGVjb2RlciBub3cgcmFpc2VzIDpleGM6YH5qc29uLkpTT05EZWNvZGVFcnJvcmAgaW5zdGVhZCBvZgorOmV4YzpgVmFsdWVFcnJvcmAgdG8gcHJvdmlkZSBiZXR0ZXIgY29udGV4dCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IuCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE5MzYxYC4pCisKKworbGluZWNhY2hlCistLS0tLS0tLS0KKworQSBuZXcgOmZ1bmM6YH5saW5lY2FjaGUubGF6eWNhY2hlYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjYXB0dXJlIGluZm9ybWF0aW9uCithYm91dCBhIG5vbi1maWxlLWJhc2VkIG1vZHVsZSB0byBwZXJtaXQgZ2V0dGluZyBpdHMgbGluZXMgbGF0ZXIgdmlhCis6ZnVuYzpgfmxpbmVjYWNoZS5nZXRsaW5lYC4gVGhpcyBhdm9pZHMgZG9pbmcgSS9PIHVudGlsIGEgbGluZSBpcyBhY3R1YWxseQorbmVlZGVkLCB3aXRob3V0IGhhdmluZyB0byBjYXJyeSB0aGUgbW9kdWxlIGdsb2JhbHMgYXJvdW5kIGluZGVmaW5pdGVseS4KKyhDb250cmlidXRlZCBieSBSb2JlcnQgQ29sbGlucyBpbiA6aXNzdWU6YDE3OTExYC4pCisKKworbG9jYWxlCistLS0tLS0KKworQSBuZXcgOmZ1bmM6YH5sb2NhbGUuZGVsb2NhbGl6ZWAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBhIHN0cmluZyBpbnRvCithIG5vcm1hbGl6ZWQgbnVtYmVyIHN0cmluZywgdGFraW5nIHRoZSBgYExDX05VTUVSSUNgYCBzZXR0aW5ncyBpbnRvIGFjY291bnQ6OgorCisgICAgPj4+IGltcG9ydCBsb2NhbGUKKyAgICA+Pj4gbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfTlVNRVJJQywgJ2RlX0RFLlVURi04JykKKyAgICAnZGVfREUuVVRGLTgnCisgICAgPj4+IGxvY2FsZS5kZWxvY2FsaXplKCcxLjIzNCw1NicpCisgICAgJzEyMzQuNTYnCisgICAgPj4+IGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX05VTUVSSUMsICdlbl9VUy5VVEYtOCcpCisgICAgJ2VuX1VTLlVURi04JworICAgID4+PiBsb2NhbGUuZGVsb2NhbGl6ZSgnMSwyMzQuNTYnKQorICAgICcxMjM0LjU2JworCisoQ29udHJpYnV0ZWQgYnkgQ8OpZHJpYyBLcmllciBpbiA6aXNzdWU6YDEzOTE4YC4pCisKKworbG9nZ2luZworLS0tLS0tLQorCitBbGwgbG9nZ2luZyBtZXRob2RzICg6Y2xhc3M6YH5sb2dnaW5nLkxvZ2dlcmAgOm1ldGg6YH5sb2dnaW5nLkxvZ2dlci5sb2dgLAorOm1ldGg6YH5sb2dnaW5nLkxvZ2dlci5leGNlcHRpb25gLCA6bWV0aDpgfmxvZ2dpbmcuTG9nZ2VyLmNyaXRpY2FsYCwKKzptZXRoOmB+bG9nZ2luZy5Mb2dnZXIuZGVidWdgLCBldGMuKSwgbm93IGFjY2VwdCBleGNlcHRpb24gaW5zdGFuY2VzCithcyBhbiAqZXhjX2luZm8qIGFyZ3VtZW50LCBpbiBhZGRpdGlvbiB0byBib29sZWFuIHZhbHVlcyBhbmQgZXhjZXB0aW9uCit0dXBsZXM6OgorCisgICAgPj4+IGltcG9ydCBsb2dnaW5nCisgICAgPj4+IHRyeToKKyAgICAuLi4gICAgIDEvMAorICAgIC4uLiBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXg6CisgICAgLi4uICAgICBsb2dnaW5nLmVycm9yKCdleGNlcHRpb24nLCBleGNfaW5mbz1leCkKKyAgICBFUlJPUjpyb290OmV4Y2VwdGlvbgorCisoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAyMDUzN2AuKQorCitUaGUgOmNsYXNzOmBoYW5kbGVycy5IVFRQSGFuZGxlciA8bG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlcj5gIGNsYXNzIG5vdworYWNjZXB0cyBhbiBvcHRpb25hbCA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBpbnN0YW5jZSB0byBjb25maWd1cmUgU1NMCitzZXR0aW5ncyB1c2VkIGluIGFuIEhUVFAgY29ubmVjdGlvbi4KKyhDb250cmlidXRlZCBieSBBbGV4IEdheW5vciBpbiA6aXNzdWU6YDIyNzg4YC4pCisKK1RoZSA6Y2xhc3M6YGhhbmRsZXJzLlF1ZXVlTGlzdGVuZXIgPGxvZ2dpbmcuaGFuZGxlcnMuUXVldWVMaXN0ZW5lcj5gIGNsYXNzIG5vdwordGFrZXMgYSAqcmVzcGVjdF9oYW5kbGVyX2xldmVsKiBrZXl3b3JkIGFyZ3VtZW50IHdoaWNoLCBpZiBzZXQgdG8gYGBUcnVlYGAsCit3aWxsIHBhc3MgbWVzc2FnZXMgdG8gaGFuZGxlcnMgdGFraW5nIGhhbmRsZXIgbGV2ZWxzIGludG8gYWNjb3VudC4KKyhDb250cmlidXRlZCBieSBWaW5heSBTYWppcC4pCisKKworbHptYQorLS0tLQorCitUaGUgOm1ldGg6YExaTUFEZWNvbXByZXNzb3IuZGVjb21wcmVzcygpIDxsem1hLkxaTUFEZWNvbXByZXNzb3IuZGVjb21wcmVzcz5gCittZXRob2Qgbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwgKm1heF9sZW5ndGgqIGFyZ3VtZW50IHRvIGxpbWl0IHRoZSBtYXhpbXVtCitzaXplIG9mIGRlY29tcHJlc3NlZCBkYXRhLgorKENvbnRyaWJ1dGVkIGJ5IE1hcnRpbiBQYW50ZXIgaW4gOmlzc3VlOmAxNTk1NWAuKQorCisKK21hdGgKKy0tLS0KKworVHdvIG5ldyBjb25zdGFudHMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSA6bW9kOmBtYXRoYCBtb2R1bGU6IDpkYXRhOmB+bWF0aC5pbmZgCithbmQgOmRhdGE6YH5tYXRoLm5hbmAuICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb24gaW4gOmlzc3VlOmAyMzE4NWAuKQorCitBIG5ldyBmdW5jdGlvbiA6ZnVuYzpgfm1hdGguaXNjbG9zZWAgcHJvdmlkZXMgYSB3YXkgdG8gdGVzdCBmb3IgYXBwcm94aW1hdGUKK2VxdWFsaXR5LiAoQ29udHJpYnV0ZWQgYnkgQ2hyaXMgQmFya2VyIGFuZCBUYWwgRWluYXQgaW4gOmlzc3VlOmAyNDI3MGAuKQorCitBIG5ldyA6ZnVuYzpgfm1hdGguZ2NkYCBmdW5jdGlvbiBoYXMgYmVlbiBhZGRlZC4gIFRoZSA6ZnVuYzpgZnJhY3Rpb25zLmdjZGAKK2Z1bmN0aW9uIGlzIG5vdyBkZXByZWNhdGVkLiAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb24gYW5kIFNlcmhpeQorU3RvcmNoYWthIGluIDppc3N1ZTpgMjI0ODZgLikKKworCittdWx0aXByb2Nlc3NpbmcKKy0tLS0tLS0tLS0tLS0tLQorCis6ZnVuYzpgc2hhcmVkY3R5cGVzLnN5bmNocm9uaXplZCgpIDxtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzLnN5bmNocm9uaXplZD5gCitvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbC4KKyhDb250cmlidXRlZCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkgaW4gOmlzc3VlOmAyMTU2NWAuKQorCisKK29wZXJhdG9yCistLS0tLS0tLQorCis6ZnVuYzpgfm9wZXJhdG9yLmF0dHJnZXR0ZXJgLCA6ZnVuYzpgfm9wZXJhdG9yLml0ZW1nZXR0ZXJgLAorYW5kIDpmdW5jOmB+b3BlcmF0b3IubWV0aG9kY2FsbGVyYCBvYmplY3RzIG5vdyBzdXBwb3J0IHBpY2tsaW5nLgorKENvbnRyaWJ1dGVkIGJ5IEpvc2ggUm9zZW5iZXJnIGFuZCBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjI5NTVgLikKKworTmV3IDpmdW5jOmB+b3BlcmF0b3IubWF0bXVsYCBhbmQgOmZ1bmM6YH5vcGVyYXRvci5pbWF0bXVsYCBmdW5jdGlvbnMKK3RvIHBlcmZvcm0gbWF0cml4IG11bHRpcGxpY2F0aW9uLgorKENvbnRyaWJ1dGVkIGJ5IEJlbmphbWluIFBldGVyc29uIGluIDppc3N1ZTpgMjExNzZgLikKKworCitvcworLS0KKworVGhlIG5ldyA6ZnVuYzpgfm9zLnNjYW5kaXJgIGZ1bmN0aW9uIHJldHVybmluZyBhbiBpdGVyYXRvciBvZgorOmNsYXNzOmB+b3MuRGlyRW50cnlgIG9iamVjdHMgaGFzIGJlZW4gYWRkZWQuICBJZiBwb3NzaWJsZSwgOmZ1bmM6YH5vcy5zY2FuZGlyYAorZXh0cmFjdHMgZmlsZSBhdHRyaWJ1dGVzIHdoaWxlIHNjYW5uaW5nIGEgZGlyZWN0b3J5LCByZW1vdmluZyB0aGUgbmVlZCB0bworcGVyZm9ybSBzdWJzZXF1ZW50IHN5c3RlbSBjYWxscyB0byBkZXRlcm1pbmUgZmlsZSB0eXBlIG9yIGF0dHJpYnV0ZXMsIHdoaWNoIG1heQorc2lnbmlmaWNhbnRseSBpbXByb3ZlIHBlcmZvcm1hbmNlLiAgKENvbnRyaWJ1dGVkIGJ5IEJlbiBIb3l0IHdpdGggdGhlIGhlbHAKK29mIFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMjI1MjRgLikKKworT24gV2luZG93cywgYSBuZXcKKzphdHRyOmBzdGF0X3Jlc3VsdC5zdF9maWxlX2F0dHJpYnV0ZXMgPG9zLnN0YXRfcmVzdWx0LnN0X2ZpbGVfYXR0cmlidXRlcz5gCithdHRyaWJ1dGUgaXMgbm93IGF2YWlsYWJsZS4gIEl0IGNvcnJlc3BvbmRzIHRvIHRoZSBgYGR3RmlsZUF0dHJpYnV0ZXNgYCBtZW1iZXIKK29mIHRoZSBgYEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OYGAgc3RydWN0dXJlIHJldHVybmVkIGJ5CitgYEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKClgYC4gIChDb250cmlidXRlZCBieSBCZW4gSG95dCBpbiA6aXNzdWU6YDIxNzE5YC4pCisKK1RoZSA6ZnVuYzpgfm9zLnVyYW5kb21gIGZ1bmN0aW9uIG5vdyB1c2VzIHRoZSBgYGdldHJhbmRvbSgpYGAgc3lzY2FsbCBvbiBMaW51eCAzLjE3CitvciBuZXdlciwgYW5kIGBgZ2V0ZW50cm9weSgpYGAgb24gT3BlbkJTRCA1LjYgYW5kIG5ld2VyLCByZW1vdmluZyB0aGUgbmVlZCB0bwordXNlIGBgL2Rldi91cmFuZG9tYGAgYW5kIGF2b2lkaW5nIGZhaWx1cmVzIGR1ZSB0byBwb3RlbnRpYWwgZmlsZSBkZXNjcmlwdG9yCitleGhhdXN0aW9uLiAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMjIxODFgLikKKworTmV3IDpmdW5jOmB+b3MuZ2V0X2Jsb2NraW5nYCBhbmQgOmZ1bmM6YH5vcy5zZXRfYmxvY2tpbmdgIGZ1bmN0aW9ucyBhbGxvdworZ2V0dGluZyBhbmQgc2V0dGluZyBhIGZpbGUgZGVzY3JpcHRvcidzIGJsb2NraW5nIG1vZGUgKDpkYXRhOmB+b3MuT19OT05CTE9DS2AuKQorKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMjIwNTRgLikKKworVGhlIDpmdW5jOmB+b3MudHJ1bmNhdGVgIGFuZCA6ZnVuYzpgfm9zLmZ0cnVuY2F0ZWAgZnVuY3Rpb25zIGFyZSBub3cgc3VwcG9ydGVkCitvbiBXaW5kb3dzLiAgKENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIERvd2VyIGluIDppc3N1ZTpgMjM2NjhgLikKKworVGhlcmUgaXMgYSBuZXcgOmZ1bmM6YG9zLnBhdGguY29tbW9ucGF0aGAgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb25nZXN0Citjb21tb24gc3ViLXBhdGggb2YgZWFjaCBwYXNzZWQgcGF0aG5hbWUuICBVbmxpa2UgdGhlCis6ZnVuYzpgb3MucGF0aC5jb21tb25wcmVmaXhgIGZ1bmN0aW9uLCBpdCBhbHdheXMgcmV0dXJucyBhIHZhbGlkCitwYXRoOjoKKworICAgID4+PiBvcy5wYXRoLmNvbW1vbnByZWZpeChbJy91c3IvbGliJywgJy91c3IvbG9jYWwvbGliJ10pCisgICAgJy91c3IvbCcKKworICAgID4+PiBvcy5wYXRoLmNvbW1vbnBhdGgoWycvdXNyL2xpYicsICcvdXNyL2xvY2FsL2xpYiddKQorICAgICcvdXNyJworCisoQ29udHJpYnV0ZWQgYnkgUmFmaWsgRHJhb3VpIGFuZCBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTAzOTVgLikKKworCitwYXRobGliCistLS0tLS0tCisKK1RoZSBuZXcgOm1ldGg6YFBhdGguc2FtZWZpbGUoKSA8cGF0aGxpYi5QYXRoLnNhbWVmaWxlPmAgbWV0aG9kIGNhbiBiZSB1c2VkCit0byBjaGVjayB3aGV0aGVyIHRoZSBwYXRoIHBvaW50cyB0byB0aGUgc2FtZSBmaWxlIGFzIGFub3RoZXIgcGF0aCwgd2hpY2ggY2FuCitiZSBlaXRoZXIgYW5vdGhlciA6Y2xhc3M6YH5wYXRobGliLlBhdGhgIG9iamVjdCwgb3IgYSBzdHJpbmc6OgorCisgICAgPj4+IGltcG9ydCBwYXRobGliCisgICAgPj4+IHAxID0gcGF0aGxpYi5QYXRoKCcvZXRjL2hvc3RzJykKKyAgICA+Pj4gcDIgPSBwYXRobGliLlBhdGgoJy9ldGMvLi4vZXRjL2hvc3RzJykKKyAgICA+Pj4gcDEuc2FtZWZpbGUocDIpCisgICAgVHJ1ZQorCisoQ29udHJpYnV0ZWQgYnkgVmFqcmFza3kgS29rIGFuZCBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE5Nzc1YC4pCisKK1RoZSA6bWV0aDpgUGF0aC5ta2RpcigpIDxwYXRobGliLlBhdGgubWtkaXI+YCBtZXRob2Qgbm93IGFjY2VwdHMgYSBuZXcgb3B0aW9uYWwKKypleGlzdF9vayogYXJndW1lbnQgdG8gbWF0Y2ggYGBta2RpciAtcGBgIGFuZCA6ZnVuYzpgb3MubWFrZWRpcnNgCitmdW5jdGlvbmFsaXR5LiAgKENvbnRyaWJ1dGVkIGJ5IEJlcmtlciBQZWtzYWcgaW4gOmlzc3VlOmAyMTUzOWAuKQorCitUaGVyZSBpcyBhIG5ldyA6bWV0aDpgUGF0aC5leHBhbmR1c2VyKCkgPHBhdGhsaWIuUGF0aC5leHBhbmR1c2VyPmAgbWV0aG9kIHRvCitleHBhbmQgYGB+YGAgYW5kIGBgfnVzZXJgYCBwcmVmaXhlcy4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGFuZAorQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTk3NzZgLikKKworQSBuZXcgOm1ldGg6YFBhdGguaG9tZSgpIDxwYXRobGliLlBhdGguaG9tZT5gIGNsYXNzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBnZXQKK2EgOmNsYXNzOmB+cGF0aGxpYi5QYXRoYCBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIHVzZXLigJlzIGhvbWUKK2RpcmVjdG9yeS4KKyhDb250cmlidXRlZCBieSBWaWN0b3IgU2FsZ2FkbyBhbmQgTWF5YW5rIFRyaXBhdGhpIGluIDppc3N1ZTpgMTk3NzdgLikKKworTmV3IDptZXRoOmBQYXRoLndyaXRlX3RleHQoKSA8cGF0aGxpYi5QYXRoLndyaXRlX3RleHQ+YCwKKzptZXRoOmBQYXRoLnJlYWRfdGV4dCgpIDxwYXRobGliLlBhdGgucmVhZF90ZXh0PmAsCis6bWV0aDpgUGF0aC53cml0ZV9ieXRlcygpIDxwYXRobGliLlBhdGgud3JpdGVfYnl0ZXM+YCwKKzptZXRoOmBQYXRoLnJlYWRfYnl0ZXMoKSA8cGF0aGxpYi5QYXRoLnJlYWRfYnl0ZXM+YCBtZXRob2RzIHRvIHNpbXBsaWZ5CityZWFkL3dyaXRlIG9wZXJhdGlvbnMgb24gZmlsZXMuCisKK1RoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IHdpbGwgY3JlYXRlIG9yIHJld3JpdGUgZXhpc3RpbmcgZmlsZQorYGB+L3NwYW00MmBgOjoKKworICAgID4+PiBpbXBvcnQgcGF0aGxpYgorICAgID4+PiBwID0gcGF0aGxpYi5QYXRoKCd+L3NwYW00MicpCisgICAgPj4+IHAuZXhwYW5kdXNlcigpLndyaXRlX3RleHQoJ2hhbScpCisgICAgMworCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0b3BoZXIgV2VsYm9ybiBpbiA6aXNzdWU6YDIwMjE4YC4pCisKKworcGlja2xlCistLS0tLS0KKworTmVzdGVkIG9iamVjdHMsIHN1Y2ggYXMgdW5ib3VuZCBtZXRob2RzIG9yIG5lc3RlZCBjbGFzc2VzLCBjYW4gbm93IGJlIHBpY2tsZWQKK3VzaW5nIDpyZWY6YHBpY2tsZSBwcm90b2NvbHMgPHBpY2tsZS1wcm90b2NvbHM+YCBvbGRlciB0aGFuIHByb3RvY29sIHZlcnNpb24gNC4KK1Byb3RvY29sIHZlcnNpb24gNCBhbHJlYWR5IHN1cHBvcnRzIHRoZXNlIGNhc2VzLiAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeQorU3RvcmNoYWthIGluIDppc3N1ZTpgMjM2MTFgLikKKworCitwb3BsaWIKKy0tLS0tLQorCitBIG5ldyA6bWV0aDpgUE9QMy51dGY4KCkgPHBvcGxpYi5QT1AzLnV0Zjg+YCBjb21tYW5kIGVuYWJsZXMgOnJmYzpgNjg1NmAKKyhJbnRlcm5hdGlvbmFsaXplZCBFbWFpbCkgc3VwcG9ydCwgaWYgYSBQT1Agc2VydmVyIHN1cHBvcnRzIGl0LgorKENvbnRyaWJ1dGVkIGJ5IE1pbGFuIE9iZXJLaXJjaCBpbiA6aXNzdWU6YDIxODA0YC4pCisKKworcmUKKy0tCisKK1JlZmVyZW5jZXMgYW5kIGNvbmRpdGlvbmFsIHJlZmVyZW5jZXMgdG8gZ3JvdXBzIHdpdGggZml4ZWQgbGVuZ3RoIGFyZSBub3cKK2FsbG93ZWQgaW4gbG9va2JlaGluZCBhc3NlcnRpb25zOjoKKworICAgID4+PiBpbXBvcnQgcmUKKyAgICA+Pj4gcGF0ID0gcmUuY29tcGlsZShyJyhhfGIpLig/PD1cMSljJykKKyAgICA+Pj4gcGF0Lm1hdGNoKCdhYWMnKQorICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDMpLCBtYXRjaD0nYWFjJz4KKyAgICA+Pj4gcGF0Lm1hdGNoKCdiYmMnKQorICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDMpLCBtYXRjaD0nYmJjJz4KKworKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmA5MTc5YC4pCisKK1RoZSBudW1iZXIgb2YgY2FwdHVyaW5nIGdyb3VwcyBpbiByZWd1bGFyIGV4cHJlc3Npb25zIGlzIG5vIGxvbmdlciBsaW1pdGVkIHRvCisxMDAuICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDIyNDM3YC4pCisKK1RoZSA6ZnVuYzpgfnJlLnN1YmAgYW5kIDpmdW5jOmB+cmUuc3VibmAgZnVuY3Rpb25zIG5vdyByZXBsYWNlIHVubWF0Y2hlZAorZ3JvdXBzIHdpdGggZW1wdHkgc3RyaW5ncyBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXhjZXB0aW9uLgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNTE5NjM4YC4pCisKK1RoZSA6Y2xhc3M6YHJlLmVycm9yYCBleGNlcHRpb25zIGhhdmUgbmV3IGF0dHJpYnV0ZXMsCis6YXR0cjpgfnJlLmVycm9yLm1zZ2AsIDphdHRyOmB+cmUuZXJyb3IucGF0dGVybmAsCis6YXR0cjpgfnJlLmVycm9yLnBvc2AsIDphdHRyOmB+cmUuZXJyb3IubGluZW5vYCwKK2FuZCA6YXR0cjpgfnJlLmVycm9yLmNvbG5vYCwgdGhhdCBwcm92aWRlIGJldHRlciBjb250ZXh0CitpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3I6OgorCisgICAgPj4+IHJlLmNvbXBpbGUoIiIiCisgICAgLi4uICAgICAoP3gpCisgICAgLi4uICAgICAuKysKKyAgICAuLi4gIiIiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICBzcmVfY29uc3RhbnRzLmVycm9yOiBtdWx0aXBsZSByZXBlYXQgYXQgcG9zaXRpb24gMTYgKGxpbmUgMywgY29sdW1uIDcpCisKKyhDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjI1NzhgLikKKworCityZWFkbGluZQorLS0tLS0tLS0KKworQSBuZXcgOmZ1bmM6YH5yZWFkbGluZS5hcHBlbmRfaGlzdG9yeV9maWxlYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhcHBlbmQKK3RoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRyYWlsaW5nIGVsZW1lbnRzIGluIGhpc3RvcnkgdG8gdGhlIGdpdmVuIGZpbGUuCisoQ29udHJpYnV0ZWQgYnkgQnJ1bm8gQ2F1ZXQgaW4gOmlzc3VlOmAyMjk0MGAuKQorCisKK3NlbGVjdG9ycworLS0tLS0tLS0tCisKK1RoZSBuZXcgOmNsYXNzOmB+c2VsZWN0b3JzLkRldnBvbGxTZWxlY3RvcmAgc3VwcG9ydHMgZWZmaWNpZW50CitgYC9kZXYvcG9sbGBgIHBvbGxpbmcgb24gU29sYXJpcy4KKyhDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2xhJyBpbiA6aXNzdWU6YDE4OTMxYC4pCisKKworc2h1dGlsCistLS0tLS0KKworVGhlIDpmdW5jOmB+c2h1dGlsLm1vdmVgIGZ1bmN0aW9uIG5vdyBhY2NlcHRzIGEgKmNvcHlfZnVuY3Rpb24qIGFyZ3VtZW50LAorYWxsb3dpbmcsIGZvciBleGFtcGxlLCB0aGUgOmZ1bmM6YH5zaHV0aWwuY29weWAgZnVuY3Rpb24gdG8gYmUgdXNlZCBpbnN0ZWFkIG9mCit0aGUgZGVmYXVsdCA6ZnVuYzpgfnNodXRpbC5jb3B5MmAgaWYgdGhlcmUgaXMgYSBuZWVkIHRvIGlnbm9yZSBmaWxlIG1ldGFkYXRhCit3aGVuIG1vdmluZy4KKyhDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxOTg0MGAuKQorCitUaGUgOmZ1bmM6YH5zaHV0aWwubWFrZV9hcmNoaXZlYCBmdW5jdGlvbiBub3cgc3VwcG9ydHMgdGhlICp4enRhciogZm9ybWF0LgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmA1NDExYC4pCisKKworc2lnbmFsCistLS0tLS0KKworT24gV2luZG93cywgdGhlIDpmdW5jOmB+c2lnbmFsLnNldF93YWtldXBfZmRgIGZ1bmN0aW9uIG5vdyBhbHNvIHN1cHBvcnRzCitzb2NrZXQgaGFuZGxlcy4gIChDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lciBpbiA6aXNzdWU6YDIyMDE4YC4pCisKK1ZhcmlvdXMgYGBTSUcqYGAgY29uc3RhbnRzIGluIHRoZSA6bW9kOmBzaWduYWxgIG1vZHVsZSBoYXZlIGJlZW4gY29udmVydGVkIGludG8KKzptb2Q6YEVudW1zIDxlbnVtPmAuICBUaGlzIGFsbG93cyBtZWFuaW5nZnVsIG5hbWVzIHRvIGJlIHByaW50ZWQKK2R1cmluZyBkZWJ1Z2dpbmcsIGluc3RlYWQgb2YgaW50ZWdlciAibWFnaWMgbnVtYmVycyIuCisoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sYScgaW4gOmlzc3VlOmAyMTA3NmAuKQorCisKK3NtdHBkCistLS0tLQorCitCb3RoIHRoZSA6Y2xhc3M6YH5zbXRwZC5TTVRQU2VydmVyYCBhbmQgOmNsYXNzOmB+c210cGQuU01UUENoYW5uZWxgIGNsYXNzZXMgbm93CithY2NlcHQgYSAqZGVjb2RlX2RhdGEqIGtleXdvcmQgYXJndW1lbnQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgYERBVEFgYCBwb3J0aW9uIG9mCit0aGUgU01UUCB0cmFuc2FjdGlvbiBpcyBkZWNvZGVkIHVzaW5nIHRoZSBgYCJ1dGYtOCJgYCBjb2RlYyBvciBpcyBpbnN0ZWFkCitwcm92aWRlZCB0byB0aGUKKzptZXRoOmBTTVRQU2VydmVyLnByb2Nlc3NfbWVzc2FnZSgpIDxzbXRwZC5TTVRQU2VydmVyLnByb2Nlc3NfbWVzc2FnZT5gCittZXRob2QgYXMgYSBieXRlIHN0cmluZy4gIFRoZSBkZWZhdWx0IGlzIGBgVHJ1ZWBgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CityZWFzb25zLCBidXQgd2lsbCBjaGFuZ2UgdG8gYGBGYWxzZWBgIGluIFB5dGhvbiAzLjYuICBJZiAqZGVjb2RlX2RhdGEqIGlzIHNldAordG8gYGBGYWxzZWBgLCB0aGUgYGBwcm9jZXNzX21lc3NhZ2VgYCBtZXRob2QgbXVzdCBiZSBwcmVwYXJlZCB0byBhY2NlcHQga2V5d29yZAorYXJndW1lbnRzLgorKENvbnRyaWJ1dGVkIGJ5IE1hY2llaiBTenVsaWsgaW4gOmlzc3VlOmAxOTY2MmAuKQorCitUaGUgOmNsYXNzOmB+c210cGQuU01UUFNlcnZlcmAgY2xhc3Mgbm93IGFkdmVydGlzZXMgdGhlIGBgOEJJVE1JTUVgYCBleHRlbnNpb24KKyg6cmZjOmA2MTUyYCkgaWYgKmRlY29kZV9kYXRhKiBoYXMgYmVlbiBzZXQgYGBUcnVlYGAuICBJZiB0aGUgY2xpZW50CitzcGVjaWZpZXMgYGBCT0RZPThCSVRNSU1FYGAgb24gdGhlIGBgTUFJTGBgIGNvbW1hbmQsIGl0IGlzIHBhc3NlZCB0bworOm1ldGg6YFNNVFBTZXJ2ZXIucHJvY2Vzc19tZXNzYWdlKCkgPHNtdHBkLlNNVFBTZXJ2ZXIucHJvY2Vzc19tZXNzYWdlPmAKK3ZpYSB0aGUgKm1haWxfb3B0aW9ucyoga2V5d29yZC4KKyhDb250cmlidXRlZCBieSBNaWxhbiBPYmVya2lyY2ggYW5kIFIuICBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAyMTc5NWAuKQorCitUaGUgOmNsYXNzOmB+c210cGQuU01UUFNlcnZlcmAgY2xhc3Mgbm93IGFsc28gc3VwcG9ydHMgdGhlIGBgU01UUFVURjhgYAorZXh0ZW5zaW9uICg6cmZjOmA2NTMxYDogSW50ZXJuYXRpb25hbGl6ZWQgRW1haWwpLiAgSWYgdGhlIGNsaWVudCBzcGVjaWZpZWQKK2BgU01UUFVURjggQk9EWT04QklUTUlNRWBgIG9uIHRoZSBgYE1BSUxgYCBjb21tYW5kLCB0aGV5IGFyZSBwYXNzZWQgdG8KKzptZXRoOmBTTVRQU2VydmVyLnByb2Nlc3NfbWVzc2FnZSgpIDxzbXRwZC5TTVRQU2VydmVyLnByb2Nlc3NfbWVzc2FnZT5gCit2aWEgdGhlICptYWlsX29wdGlvbnMqIGtleXdvcmQuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlCitgYHByb2Nlc3NfbWVzc2FnZWBgIG1ldGhvZCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBgYFNNVFBVVEY4YGAgZGF0YS4KKyhDb250cmlidXRlZCBieSBNaWxhbiBPYmVya2lyY2ggaW4gOmlzc3VlOmAyMTcyNWAuKQorCitJdCBpcyBub3cgcG9zc2libGUgdG8gcHJvdmlkZSwgZGlyZWN0bHkgb3IgdmlhIG5hbWUgcmVzb2x1dGlvbiwgSVB2NgorYWRkcmVzc2VzIGluIHRoZSA6Y2xhc3M6YH5zbXRwZC5TTVRQU2VydmVyYCBjb25zdHJ1Y3RvciwgYW5kIGhhdmUgaXQKK3N1Y2Nlc3NmdWxseSBjb25uZWN0LiAgKENvbnRyaWJ1dGVkIGJ5IE1pbGFuIE9iZXJraXJjaCBpbiA6aXNzdWU6YDE0NzU4YC4pCisKKworc210cGxpYgorLS0tLS0tLQorCitBIG5ldyA6bWV0aDpgU01UUC5hdXRoKCkgPHNtdHBsaWIuU01UUC5hdXRoPmAgbWV0aG9kIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgdG8KK2ltcGxlbWVudCBjdXN0b20gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcy4gKENvbnRyaWJ1dGVkIGJ5IE1pbGFuCitPYmVya2lyY2ggaW4gOmlzc3VlOmAxNTAxNGAuKQorCitUaGUgOm1ldGg6YFNNVFAuc2V0X2RlYnVnbGV2ZWwoKSA8c210cGxpYi5TTVRQLnNldF9kZWJ1Z2xldmVsPmAgbWV0aG9kIG5vdworYWNjZXB0cyBhbiBhZGRpdGlvbmFsIGRlYnVnbGV2ZWwgKDIpLCB3aGljaCBlbmFibGVzIHRpbWVzdGFtcHMgaW4gZGVidWcKK21lc3NhZ2VzLiAoQ29udHJpYnV0ZWQgYnkgR2F2aW4gQ2hhcHBlbGwgYW5kIE1hY2llaiBTenVsaWsgaW4gOmlzc3VlOmAxNjkxNGAuKQorCitCb3RoIHRoZSA6bWV0aDpgU01UUC5zZW5kbWFpbCgpIDxzbXRwbGliLlNNVFAuc2VuZG1haWw+YCBhbmQKKzptZXRoOmBTTVRQLnNlbmRfbWVzc2FnZSgpIDxzbXRwbGliLlNNVFAuc2VuZF9tZXNzYWdlPmAgbWV0aG9kcyBub3cKK3N1cHBvcnQgOnJmYzpgNjUzMWAgKFNNVFBVVEY4KS4KKyhDb250cmlidXRlZCBieSBNaWxhbiBPYmVya2lyY2ggYW5kIFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDIyMDI3YC4pCisKKworc25kaGRyCistLS0tLS0KKworVGhlIDpmdW5jOmB+c25kaGRyLndoYXRgIGFuZCA6ZnVuYzpgfnNuZGhkci53aGF0aGRyYCBmdW5jdGlvbnMgIG5vdyByZXR1cm4KK2EgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYC4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4KKzppc3N1ZTpgMTg2MTVgLikKKworCitzb2NrZXQKKy0tLS0tLQorCitGdW5jdGlvbnMgd2l0aCB0aW1lb3V0cyBub3cgdXNlIGEgbW9ub3RvbmljIGNsb2NrLCBpbnN0ZWFkIG9mIGEgc3lzdGVtIGNsb2NrLgorKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMjIwNDNgLikKKworQSBuZXcgOm1ldGg6YHNvY2tldC5zZW5kZmlsZSgpIDxzb2NrZXQuc29ja2V0LnNlbmRmaWxlPmAgbWV0aG9kIGFsbG93cworc2VuZGluZyBhIGZpbGUgb3ZlciBhIHNvY2tldCBieSB1c2luZyB0aGUgaGlnaC1wZXJmb3JtYW5jZSA6ZnVuYzpgb3Muc2VuZGZpbGVgCitmdW5jdGlvbiBvbiBVTklYLCByZXN1bHRpbmcgaW4gdXBsb2FkcyBiZWluZyBmcm9tIDIgdG8gMyB0aW1lcyBmYXN0ZXIgdGhhbiB3aGVuCit1c2luZyBwbGFpbiA6bWV0aDpgc29ja2V0LnNlbmQoKSA8c29ja2V0LnNvY2tldC5zZW5kPmAuCisoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sYScgaW4gOmlzc3VlOmAxNzU1MmAuKQorCitUaGUgOm1ldGg6YHNvY2tldC5zZW5kYWxsKCkgPHNvY2tldC5zb2NrZXQuc2VuZGFsbD5gIG1ldGhvZCBubyBsb25nZXIgcmVzZXRzIHRoZQorc29ja2V0IHRpbWVvdXQgZXZlcnkgdGltZSBieXRlcyBhcmUgcmVjZWl2ZWQgb3Igc2VudC4gIFRoZSBzb2NrZXQgdGltZW91dCBpcworbm93IHRoZSBtYXhpbXVtIHRvdGFsIGR1cmF0aW9uIHRvIHNlbmQgYWxsIGRhdGEuCisoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAyMzg1M2AuKQorCitUaGUgKmJhY2tsb2cqIGFyZ3VtZW50IG9mIHRoZSA6bWV0aDpgc29ja2V0Lmxpc3RlbigpIDxzb2NrZXQuc29ja2V0Lmxpc3Rlbj5gCittZXRob2QgaXMgbm93IG9wdGlvbmFsLiAgQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8KKzpkYXRhOmBTT01BWENPTk4gPHNvY2tldC5TT01BWENPTk4+YCBvciB0byBgYDEyOGBgLCB3aGljaGV2ZXIgaXMgbGVzcy4KKyhDb250cmlidXRlZCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkgaW4gOmlzc3VlOmAyMTQ1NWAuKQorCisKK3NzbAorLS0tCisKKy4uIF93aGF0c25ldy1zc2xtZW1vcnliaW86CisKK01lbW9yeSBCSU8gU3VwcG9ydAorfn5+fn5+fn5+fn5+fn5+fn5+CisKKyhDb250cmlidXRlZCBieSBHZWVydCBKYW5zZW4gaW4gOmlzc3VlOmAyMTk2NWAuKQorCitUaGUgbmV3IDpjbGFzczpgfnNzbC5TU0xPYmplY3RgIGNsYXNzIGhhcyBiZWVuIGFkZGVkIHRvIHByb3ZpZGUgU1NMIHByb3RvY29sCitzdXBwb3J0IGZvciBjYXNlcyB3aGVuIHRoZSBuZXR3b3JrIEkvTyBjYXBhYmlsaXRpZXMgb2YgOmNsYXNzOmB+c3NsLlNTTFNvY2tldGAKK2FyZSBub3QgbmVjZXNzYXJ5IG9yIGFyZSBzdWJvcHRpbWFsLiAgYGBTU0xPYmplY3RgYCByZXByZXNlbnRzCithbiBTU0wgcHJvdG9jb2wgaW5zdGFuY2UsIGJ1dCBkb2VzIG5vdCBpbXBsZW1lbnQgYW55IG5ldHdvcmsgSS9PIG1ldGhvZHMsIGFuZAoraW5zdGVhZCBwcm92aWRlcyBhIG1lbW9yeSBidWZmZXIgaW50ZXJmYWNlLiAgVGhlIG5ldyA6Y2xhc3M6YH5zc2wuTWVtb3J5QklPYAorY2xhc3MgY2FuIGJlIHVzZWQgdG8gcGFzcyBkYXRhIGJldHdlZW4gUHl0aG9uIGFuZCBhbiBTU0wgcHJvdG9jb2wgaW5zdGFuY2UuCisKK1RoZSBtZW1vcnkgQklPIFNTTCBzdXBwb3J0IGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBiZSB1c2VkIGluIGZyYW1ld29ya3MKK2ltcGxlbWVudGluZyBhc3luY2hyb25vdXMgSS9PIGZvciB3aGljaCA6Y2xhc3M6YH5zc2wuU1NMU29ja2V0YCdzIHJlYWRpbmVzcworbW9kZWwgKCJzZWxlY3QvcG9sbCIpIGlzIGluZWZmaWNpZW50LgorCitBIG5ldyA6bWV0aDpgU1NMQ29udGV4dC53cmFwX2JpbygpIDxzc2wuU1NMQ29udGV4dC53cmFwX2Jpbz5gIG1ldGhvZCBjYW4gYmUgdXNlZAordG8gY3JlYXRlIGEgbmV3IGBgU1NMT2JqZWN0YGAgaW5zdGFuY2UuCisKKworQXBwbGljYXRpb24tTGF5ZXIgUHJvdG9jb2wgTmVnb3RpYXRpb24gU3VwcG9ydAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisoQ29udHJpYnV0ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24gaW4gOmlzc3VlOmAyMDE4OGAuKQorCitXaGVyZSBPcGVuU1NMIHN1cHBvcnQgaXMgcHJlc2VudCwgdGhlIDptb2Q6YHNzbGAgbW9kdWxlIG5vdyBpbXBsZW1lbnRzCit0aGUgKkFwcGxpY2F0aW9uLUxheWVyIFByb3RvY29sIE5lZ290aWF0aW9uKiBUTFMgZXh0ZW5zaW9uIGFzIGRlc2NyaWJlZAoraW4gOnJmYzpgNzMwMWAuCisKK1RoZSBuZXcgOm1ldGg6YFNTTENvbnRleHQuc2V0X2FscG5fcHJvdG9jb2xzKCkgPHNzbC5TU0xDb250ZXh0LnNldF9hbHBuX3Byb3RvY29scz5gCitjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIHByb3RvY29scyBhIHNvY2tldCBzaG91bGQgYWR2ZXJ0aXNlIGR1cmluZwordGhlIFRMUyBoYW5kc2hha2UuCisKK1RoZSBuZXcKKzptZXRoOmBTU0xTb2NrZXQuc2VsZWN0ZWRfYWxwbl9wcm90b2NvbCgpIDxzc2wuU1NMU29ja2V0LnNlbGVjdGVkX2FscG5fcHJvdG9jb2w+YAorcmV0dXJucyB0aGUgcHJvdG9jb2wgdGhhdCB3YXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBUTFMgaGFuZHNoYWtlLgorVGhlIDpkYXRhOmB+c3NsLkhBU19BTFBOYCBmbGFnIGluZGljYXRlcyB3aGV0aGVyIEFMUE4gc3VwcG9ydCBpcyBwcmVzZW50LgorCisKK090aGVyIENoYW5nZXMKK35+fn5+fn5+fn5+fn4KKworVGhlcmUgaXMgYSBuZXcgOm1ldGg6YFNTTFNvY2tldC52ZXJzaW9uKCkgPHNzbC5TU0xTb2NrZXQudmVyc2lvbj5gIG1ldGhvZCB0bworcXVlcnkgdGhlIGFjdHVhbCBwcm90b2NvbCB2ZXJzaW9uIGluIHVzZS4KKyhDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDIwNDIxYC4pCisKK1RoZSA6Y2xhc3M6YH5zc2wuU1NMU29ja2V0YCBjbGFzcyBub3cgaW1wbGVtZW50cworYSA6bWV0aDpgU1NMU29ja2V0LnNlbmRmaWxlKCkgPHNzbC5TU0xTb2NrZXQuc2VuZGZpbGU+YCBtZXRob2QuCisoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sYScgaW4gOmlzc3VlOmAxNzU1MmAuKQorCitUaGUgOm1ldGg6YFNTTFNvY2tldC5zZW5kKCkgPHNzbC5TU0xTb2NrZXQuc2VuZD5gIG1ldGhvZCBub3cgcmFpc2VzIGVpdGhlcgordGhlIDpleGM6YHNzbC5TU0xXYW50UmVhZEVycm9yYCBvciA6ZXhjOmBzc2wuU1NMV2FudFdyaXRlRXJyb3JgIGV4Y2VwdGlvbiBvbiBhCitub24tYmxvY2tpbmcgc29ja2V0IGlmIHRoZSBvcGVyYXRpb24gd291bGQgYmxvY2suIFByZXZpb3VzbHksIGl0IHdvdWxkIHJldHVybgorYGAwYGAuICAoQ29udHJpYnV0ZWQgYnkgTmlrb2xhdXMgUmF0aCBpbiA6aXNzdWU6YDIwOTUxYC4pCisKK1RoZSA6ZnVuYzpgfnNzbC5jZXJ0X3RpbWVfdG9fc2Vjb25kc2AgZnVuY3Rpb24gbm93IGludGVycHJldHMgdGhlIGlucHV0IHRpbWUKK2FzIFVUQyBhbmQgbm90IGFzIGxvY2FsIHRpbWUsIHBlciA6cmZjOmA1MjgwYC4gIEFkZGl0aW9uYWxseSwgdGhlIHJldHVybgordmFsdWUgaXMgYWx3YXlzIGFuIDpjbGFzczpgaW50YC4gKENvbnRyaWJ1dGVkIGJ5IEFraXJhIExpIGluIDppc3N1ZTpgMTk5NDBgLikKKworTmV3IDptZXRoOmBTU0xPYmplY3Quc2hhcmVkX2NpcGhlcnMoKSA8c3NsLlNTTE9iamVjdC5zaGFyZWRfY2lwaGVycz5gIGFuZAorOm1ldGg6YFNTTFNvY2tldC5zaGFyZWRfY2lwaGVycygpIDxzc2wuU1NMU29ja2V0LnNoYXJlZF9jaXBoZXJzPmAgbWV0aG9kcyByZXR1cm4KK3RoZSBsaXN0IG9mIGNpcGhlcnMgc2VudCBieSB0aGUgY2xpZW50IGR1cmluZyB0aGUgaGFuZHNoYWtlLgorKENvbnRyaWJ1dGVkIGJ5IEJlbmphbWluIFBldGVyc29uIGluIDppc3N1ZTpgMjMxODZgLikKKworVGhlIDptZXRoOmBTU0xTb2NrZXQuZG9faGFuZHNoYWtlKCkgPHNzbC5TU0xTb2NrZXQuZG9faGFuZHNoYWtlPmAsCis6bWV0aDpgU1NMU29ja2V0LnJlYWQoKSA8c3NsLlNTTFNvY2tldC5yZWFkPmAsCis6bWV0aDpgU1NMU29ja2V0LnNodXRkb3duKCkgPHNzbC5TU0xTb2NrZXQuc2h1dGRvd24+YCwgYW5kCis6bWV0aDpgU1NMU29ja2V0LndyaXRlKCkgPHNzbC5TU0xTb2NrZXQud3JpdGU+YCBtZXRob2RzIG9mIHRoZSA6Y2xhc3M6YH5zc2wuU1NMU29ja2V0YAorY2xhc3Mgbm8gbG9uZ2VyIHJlc2V0IHRoZSBzb2NrZXQgdGltZW91dCBldmVyeSB0aW1lIGJ5dGVzIGFyZSByZWNlaXZlZCBvciBzZW50LgorVGhlIHNvY2tldCB0aW1lb3V0IGlzIG5vdyB0aGUgbWF4aW11bSB0b3RhbCBkdXJhdGlvbiBvZiB0aGUgbWV0aG9kLgorKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMjM4NTNgLikKKworVGhlIDpmdW5jOmB+c3NsLm1hdGNoX2hvc3RuYW1lYCBmdW5jdGlvbiBub3cgc3VwcG9ydHMgbWF0Y2hpbmcgb2YgSVAgYWRkcmVzc2VzLgorKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMjMyMzlgLikKKworCitzcWxpdGUzCistLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH5zcWxpdGUzLlJvd2AgY2xhc3Mgbm93IGZ1bGx5IHN1cHBvcnRzIHRoZSBzZXF1ZW5jZSBwcm90b2NvbCwKK2luIHBhcnRpY3VsYXIgOmZ1bmM6YHJldmVyc2VkYCBpdGVyYXRpb24gYW5kIHNsaWNlIGluZGV4aW5nLgorKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDEwMjAzYDsgYnkgTHVjYXMgU2luY2xhaXIsCitKZXNzaWNhIE1jS2VsbGFyLCBhbmQgIFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxMzU4M2AuKQorCisKKy4uIF93aGF0c25ldy1zdWJwcm9jZXNzOgorCitzdWJwcm9jZXNzCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOmZ1bmM6YH5zdWJwcm9jZXNzLnJ1bmAgZnVuY3Rpb24gaGFzIGJlZW4gYWRkZWQuCitJdCBydW5zIHRoZSBzcGVjaWZpZWQgY29tbWFuZCBhbmQgcmV0dXJucyBhCis6Y2xhc3M6YH5zdWJwcm9jZXNzLkNvbXBsZXRlZFByb2Nlc3NgIG9iamVjdCwgd2hpY2ggZGVzY3JpYmVzIGEgZmluaXNoZWQKK3Byb2Nlc3MuICBUaGUgbmV3IEFQSSBpcyBtb3JlIGNvbnNpc3RlbnQgYW5kIGlzIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaAordG8gaW52b2tpbmcgc3VicHJvY2Vzc2VzIGluIFB5dGhvbiBjb2RlIHRoYXQgZG9lcyBub3QgbmVlZCB0byBtYWludGFpbgorY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgUHl0aG9uIHZlcnNpb25zLgorKENvbnRyaWJ1dGVkIGJ5IFRob21hcyBLbHV5dmVyIGluIDppc3N1ZTpgMjMzNDJgLikKKworRXhhbXBsZXM6OgorCisgICAgPj4+IHN1YnByb2Nlc3MucnVuKFsibHMiLCAiLWwiXSkgICMgZG9lc24ndCBjYXB0dXJlIG91dHB1dAorICAgIENvbXBsZXRlZFByb2Nlc3MoYXJncz1bJ2xzJywgJy1sJ10sIHJldHVybmNvZGU9MCkKKworICAgID4+PiBzdWJwcm9jZXNzLnJ1bigiZXhpdCAxIiwgc2hlbGw9VHJ1ZSwgY2hlY2s9VHJ1ZSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjogQ29tbWFuZCAnZXhpdCAxJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAxCisKKyAgICA+Pj4gc3VicHJvY2Vzcy5ydW4oWyJscyIsICItbCIsICIvZGV2L251bGwiXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICBDb21wbGV0ZWRQcm9jZXNzKGFyZ3M9WydscycsICctbCcsICcvZGV2L251bGwnXSwgcmV0dXJuY29kZT0wLAorICAgIHN0ZG91dD1iJ2Nydy1ydy1ydy0gMSByb290IHJvb3QgMSwgMyBKYW4gMjMgMTY6MjMgL2Rldi9udWxsXG4nKQorCisKK3N5cworLS0tCisKK0EgbmV3IDpmdW5jOmB+c3lzLnNldF9jb3JvdXRpbmVfd3JhcHBlcmAgZnVuY3Rpb24gYWxsb3dzIHNldHRpbmcgYSBnbG9iYWwKK2hvb2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIDp0ZXJtOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YAoraXMgY3JlYXRlZCBieSBhbiA6a2V5d29yZDpgYXN5bmMgZGVmYCBmdW5jdGlvbi4gIEEgY29ycmVzcG9uZGluZworOmZ1bmM6YH5zeXMuZ2V0X2Nvcm91dGluZV93cmFwcGVyYCBjYW4gYmUgdXNlZCB0byBvYnRhaW4gYSBjdXJyZW50bHkgc2V0Cit3cmFwcGVyLiAgQm90aCBmdW5jdGlvbnMgYXJlIDp0ZXJtOmBwcm92aXNpb25hbCA8cHJvdmlzaW9uYWwgYXBpPmAsCithbmQgYXJlIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seS4gIChDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdgoraW4gOmlzc3VlOmAyNDAxN2AuKQorCitBIG5ldyA6ZnVuYzpgfnN5cy5pc19maW5hbGl6aW5nYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjaGVjayBpZiB0aGUgUHl0aG9uCitpbnRlcnByZXRlciBpcyA6dGVybTpgc2h1dHRpbmcgZG93biA8aW50ZXJwcmV0ZXIgc2h1dGRvd24+YC4KKyhDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDIyNjk2YC4pCisKKworc3lzY29uZmlnCistLS0tLS0tLS0KKworVGhlIG5hbWUgb2YgdGhlIHVzZXIgc2NyaXB0cyBkaXJlY3Rvcnkgb24gV2luZG93cyBub3cgaW5jbHVkZXMgdGhlIGZpcnN0Cit0d28gY29tcG9uZW50cyBvZiB0aGUgUHl0aG9uIHZlcnNpb24uIChDb250cmlidXRlZCBieSBQYXVsIE1vb3JlCitpbiA6aXNzdWU6YDIzNDM3YC4pCisKKwordGFyZmlsZQorLS0tLS0tLQorCitUaGUgKm1vZGUqIGFyZ3VtZW50IG9mIHRoZSA6ZnVuYzpgfnRhcmZpbGUub3BlbmAgZnVuY3Rpb24gbm93IGFjY2VwdHMgYGAieCJgYAordG8gcmVxdWVzdCBleGNsdXNpdmUgY3JlYXRpb24uICAoQ29udHJpYnV0ZWQgYnkgQmVya2VyIFBla3NhZyBpbiA6aXNzdWU6YDIxNzE3YC4pCisKK1RoZSA6bWV0aDpgVGFyRmlsZS5leHRyYWN0YWxsKCkgPHRhcmZpbGUuVGFyRmlsZS5leHRyYWN0YWxsPmAgYW5kCis6bWV0aDpgVGFyRmlsZS5leHRyYWN0KCkgPHRhcmZpbGUuVGFyRmlsZS5leHRyYWN0PmAgbWV0aG9kcyBub3cgdGFrZSBhIGtleXdvcmQKK2FyZ3VtZW50ICpudW1lcmljX29ubHkqLiAgSWYgc2V0IHRvIGBgVHJ1ZWBgLCB0aGUgZXh0cmFjdGVkIGZpbGVzIGFuZAorZGlyZWN0b3JpZXMgd2lsbCBiZSBvd25lZCBieSB0aGUgbnVtZXJpYyBgYHVpZGBgIGFuZCBgYGdpZGBgIGZyb20gdGhlIHRhcmZpbGUuCitJZiBzZXQgdG8gYGBGYWxzZWBgICh0aGUgZGVmYXVsdCwgYW5kIHRoZSBiZWhhdmlvciBpbiB2ZXJzaW9ucyBwcmlvciB0byAzLjUpLAordGhleSB3aWxsIGJlIG93bmVkIGJ5IHRoZSBuYW1lZCB1c2VyIGFuZCBncm91cCBpbiB0aGUgdGFyZmlsZS4KKyhDb250cmlidXRlZCBieSBNaWNoYWVsIFZvZ3QgYW5kIEVyaWMgU21pdGggaW4gOmlzc3VlOmAyMzE5M2AuKQorCitUaGUgOm1ldGg6YFRhckZpbGUubGlzdCgpIDx0YXJmaWxlLlRhckZpbGUubGlzdD5gIG5vdyBhY2NlcHRzIGFuIG9wdGlvbmFsCisqbWVtYmVycyoga2V5d29yZCBhcmd1bWVudCB0aGF0IGNhbiBiZSBzZXQgdG8gYSBzdWJzZXQgb2YgdGhlIGxpc3QgcmV0dXJuZWQKK2J5IDptZXRoOmBUYXJGaWxlLmdldG1lbWJlcnMoKSA8dGFyZmlsZS5UYXJGaWxlLmdldG1lbWJlcnM+YC4KKyhDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjE1NDlgLikKKworCit0aHJlYWRpbmcKKy0tLS0tLS0tLQorCitCb3RoIHRoZSA6bWV0aDpgTG9jay5hY3F1aXJlKCkgPHRocmVhZGluZy5Mb2NrLmFjcXVpcmU+YCBhbmQKKzptZXRoOmBSTG9jay5hY3F1aXJlKCkgPHRocmVhZGluZy5STG9jay5hY3F1aXJlPmAgbWV0aG9kcworbm93IHVzZSBhIG1vbm90b25pYyBjbG9jayBmb3IgdGltZW91dCBtYW5hZ2VtZW50LgorKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMjIwNDNgLikKKworCit0aW1lCistLS0tCisKK1RoZSA6ZnVuYzpgfnRpbWUubW9ub3RvbmljYCBmdW5jdGlvbiBpcyBub3cgYWx3YXlzIGF2YWlsYWJsZS4KKyhDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lciBpbiA6aXNzdWU6YDIyMDQzYC4pCisKKwordGltZWl0CistLS0tLS0KKworQSBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbiBgYC11YGAgb3IgOnNhbXA6YC0tdW5pdD17VX1gIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHRpbWUKK3VuaXQgZm9yIHRoZSB0aW1lciBvdXRwdXQuICBTdXBwb3J0ZWQgb3B0aW9ucyBhcmUgYGB1c2VjYGAsIGBgbXNlY2BgLAorb3IgYGBzZWNgYC4gIChDb250cmlidXRlZCBieSBKdWxpYW4gR2luZGkgaW4gOmlzc3VlOmAxODk4M2AuKQorCitUaGUgOmZ1bmM6YH50aW1laXQudGltZWl0YCBmdW5jdGlvbiBoYXMgYSBuZXcgKmdsb2JhbHMqIHBhcmFtZXRlciBmb3IKK3NwZWNpZnlpbmcgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0aGUgY29kZSB3aWxsIGJlIHJ1bm5pbmcuCisoQ29udHJpYnV0ZWQgYnkgQmVuIFJvYmVydHMgaW4gOmlzc3VlOmAyNTI3YC4pCisKKwordGtpbnRlcgorLS0tLS0tLQorCitUaGUgOm1vZDpgdGtpbnRlci5fZml4YCBtb2R1bGUgdXNlZCBmb3Igc2V0dGluZyB1cCB0aGUgVGNsL1RrIGVudmlyb25tZW50CitvbiBXaW5kb3dzIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgcHJpdmF0ZSBmdW5jdGlvbiBpbiB0aGUgOm1vZDpgX3RraW50ZXJgCittb2R1bGUgd2hpY2ggbWFrZXMgbm8gcGVybWFuZW50IGNoYW5nZXMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKENvbnRyaWJ1dGVkIGJ5IFphY2hhcnkgV2FyZSBpbiA6aXNzdWU6YDIwMDM1YC4pCisKKworLi4gX3doYXRzbmV3LXRyYWNlYmFjazoKKwordHJhY2ViYWNrCistLS0tLS0tLS0KKworTmV3IDpmdW5jOmB+dHJhY2ViYWNrLndhbGtfc3RhY2tgIGFuZCA6ZnVuYzpgfnRyYWNlYmFjay53YWxrX3RiYAorZnVuY3Rpb25zIHRvIGNvbnZlbmllbnRseSB0cmF2ZXJzZSBmcmFtZSBhbmQgdHJhY2ViYWNrIG9iamVjdHMuCisoQ29udHJpYnV0ZWQgYnkgUm9iZXJ0IENvbGxpbnMgaW4gOmlzc3VlOmAxNzkxMWAuKQorCitOZXcgbGlnaHR3ZWlnaHQgY2xhc3NlczogOmNsYXNzOmB+dHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbmAsCis6Y2xhc3M6YH50cmFjZWJhY2suU3RhY2tTdW1tYXJ5YCwgYW5kIDpjbGFzczpgfnRyYWNlYmFjay5GcmFtZVN1bW1hcnlgLgorKENvbnRyaWJ1dGVkIGJ5IFJvYmVydCBDb2xsaW5zIGluIDppc3N1ZTpgMTc5MTFgLikKKworQm90aCB0aGUgOmZ1bmM6YH50cmFjZWJhY2sucHJpbnRfdGJgIGFuZCA6ZnVuYzpgfnRyYWNlYmFjay5wcmludF9zdGFja2AgZnVuY3Rpb25zCitub3cgc3VwcG9ydCBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHRoZSAqbGltaXQqIGFyZ3VtZW50LgorKENvbnRyaWJ1dGVkIGJ5IERtaXRyeSBLYXpha292IGluIDppc3N1ZTpgMjI2MTlgLikKKworCit0eXBlcworLS0tLS0KKworQSBuZXcgOmZ1bmM6YH50eXBlcy5jb3JvdXRpbmVgIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybQorOnRlcm06YGdlbmVyYXRvciA8Z2VuZXJhdG9yIGl0ZXJhdG9yPmAgYW5kCis6Y2xhc3M6YGdlbmVyYXRvci1saWtlIDxjb2xsZWN0aW9ucy5hYmMuR2VuZXJhdG9yPmAgb2JqZWN0cyBpbnRvCis6dGVybTpgYXdhaXRhYmxlcyA8YXdhaXRhYmxlPmAuCisoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAyNDAxN2AuKQorCitBIG5ldyB0eXBlIGNhbGxlZCA6Y2xhc3M6YH50eXBlcy5Db3JvdXRpbmVUeXBlYCwgd2hpY2ggaXMgdXNlZCBmb3IKKzp0ZXJtOmBjb3JvdXRpbmVgIG9iamVjdHMgY3JlYXRlZCBieSA6a2V5d29yZDpgYXN5bmMgZGVmYCBmdW5jdGlvbnMuCisoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAyNDQwMGAuKQorCisKK3VuaWNvZGVkYXRhCistLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgdW5pY29kZWRhdGFgIG1vZHVsZSBub3cgdXNlcyBkYXRhIGZyb20gYFVuaWNvZGUgOC4wLjAKKzxodHRwOi8vdW5pY29kZS5vcmcvdmVyc2lvbnMvVW5pY29kZTguMC4wLz5gXy4KKworCit1bml0dGVzdAorLS0tLS0tLS0KKworVGhlIDptZXRoOmBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoKSA8dW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlPmAKK21ldGhvZCBub3cgYWNjZXB0cyBhIGtleXdvcmQtb25seSBhcmd1bWVudCAqcGF0dGVybiogd2hpY2ggaXMgcGFzc2VkIHRvCitgYGxvYWRfdGVzdHNgYCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuICBGb3VuZCBwYWNrYWdlcyBhcmUgbm93IGNoZWNrZWQgZm9yCitgYGxvYWRfdGVzdHNgYCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXIgcGF0aCBtYXRjaGVzICpwYXR0ZXJuKiwgYmVjYXVzZSBpdAoraXMgaW1wb3NzaWJsZSBmb3IgYSBwYWNrYWdlIG5hbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgcGF0dGVybi4KKyhDb250cmlidXRlZCBieSBSb2JlcnQgQ29sbGlucyBhbmQgQmFycnkgQS4gV2Fyc2F3IGluIDppc3N1ZTpgMTY2NjJgLikKKworVW5pdHRlc3QgZGlzY292ZXJ5IGVycm9ycyBub3cgYXJlIGV4cG9zZWQgaW4gdGhlCis6ZGF0YTpgVGVzdExvYWRlci5lcnJvcnMgPHVuaXR0ZXN0LlRlc3RMb2FkZXIuZXJyb3JzPmAgYXR0cmlidXRlIG9mIHRoZQorOmNsYXNzOmB+dW5pdHRlc3QuVGVzdExvYWRlcmAgaW5zdGFuY2UuCisoQ29udHJpYnV0ZWQgYnkgUm9iZXJ0IENvbGxpbnMgaW4gOmlzc3VlOmAxOTc0NmAuKQorCitBIG5ldyBjb21tYW5kIGxpbmUgb3B0aW9uIGBgLS1sb2NhbHNgYCB0byBzaG93IGxvY2FsIHZhcmlhYmxlcyBpbgordHJhY2ViYWNrcy4gIChDb250cmlidXRlZCBieSBSb2JlcnQgQ29sbGlucyBpbiA6aXNzdWU6YDIyOTM2YC4pCisKKwordW5pdHRlc3QubW9jaworLS0tLS0tLS0tLS0tLQorCitUaGUgOmNsYXNzOmB+dW5pdHRlc3QubW9jay5Nb2NrYCBjbGFzcyBoYXMgdGhlIGZvbGxvd2luZyBpbXByb3ZlbWVudHM6CisKKyogVGhlIGNsYXNzIGNvbnN0cnVjdG9yIGhhcyBhIG5ldyAqdW5zYWZlKiBwYXJhbWV0ZXIsIHdoaWNoIGNhdXNlcyBtb2NrCisgIG9iamVjdHMgdG8gcmFpc2UgOmV4YzpgQXR0cmlidXRlRXJyb3JgIG9uIGF0dHJpYnV0ZSBuYW1lcyBzdGFydGluZworICB3aXRoIGBgImFzc2VydCJgYC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEt1c2hhbCBEYXMgaW4gOmlzc3VlOmAyMTIzOGAuKQorCisqIEEgbmV3IDptZXRoOmBNb2NrLmFzc2VydF9ub3RfY2FsbGVkKCkgPHVuaXR0ZXN0Lm1vY2suTW9jay5hc3NlcnRfbm90X2NhbGxlZD5gCisgIG1ldGhvZCB0byBjaGVjayBpZiB0aGUgbW9jayBvYmplY3Qgd2FzIGNhbGxlZC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEt1c2hhbCBEYXMgaW4gOmlzc3VlOmAyMTI2MmAuKQorCitUaGUgOmNsYXNzOmB+dW5pdHRlc3QubW9jay5NYWdpY01vY2tgIGNsYXNzIG5vdyBzdXBwb3J0cyA6bWV0aDpgX190cnVlZGl2X19gLAorOm1ldGg6YF9fZGl2bW9kX19gIGFuZCA6bWV0aDpgX19tYXRtdWxfX2Agb3BlcmF0b3JzLgorKENvbnRyaWJ1dGVkIGJ5IEpvaGFubmVzIEJhaXRlciBpbiA6aXNzdWU6YDIwOTY4YCwgYW5kIEjDpWthbiBMw7Z2ZGFobAoraW4gOmlzc3VlOmAyMzU4MWAgYW5kIDppc3N1ZTpgMjM1NjhgLikKKworSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IHBhc3MgYGBjcmVhdGU9VHJ1ZWBgIHRvIHRoZQorOmZ1bmM6YH51bml0dGVzdC5tb2NrLnBhdGNoYCBmdW5jdGlvbiB3aGVuIHBhdGNoaW5nIGJ1aWx0aW4gbmFtZXMuCisoQ29udHJpYnV0ZWQgYnkgS3VzaGFsIERhcyBpbiA6aXNzdWU6YDE3NjYwYC4pCisKKwordXJsbGliCistLS0tLS0KKworQSBuZXcKKzpjbGFzczpgcmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoIDx1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoPmAKK2NsYXNzIGFsbG93cyBIVFRQIEJhc2ljIEF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIHRvIGJlIG1hbmFnZWQgc28gYXMgdG8KK2VsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBgYDQwMWBgIHJlc3BvbnNlIGhhbmRsaW5nLCBvciB0byB1bmNvbmRpdGlvbmFsbHkgc2VuZAorY3JlZGVudGlhbHMgb24gdGhlIGZpcnN0IHJlcXVlc3QgaW4gb3JkZXIgdG8gY29tbXVuaWNhdGUgd2l0aCBzZXJ2ZXJzIHRoYXQKK3JldHVybiBhIGBgNDA0YGAgcmVzcG9uc2UgaW5zdGVhZCBvZiBhIGBgNDAxYGAgaWYgdGhlIGBgQXV0aG9yaXphdGlvbmBgIGhlYWRlcgoraXMgbm90IHNlbnQuIChDb250cmlidXRlZCBieSBNYXRlaiBDZXBsIGluIDppc3N1ZTpgMTk0OTRgIGFuZCBBa3NoaXQgS2h1cmFuYSBpbgorOmlzc3VlOmA3MTU5YC4pCisKK0EgbmV3ICpxdW90ZV92aWEqIGFyZ3VtZW50IGZvciB0aGUKKzpmdW5jOmBwYXJzZS51cmxlbmNvZGUoKSA8dXJsbGliLnBhcnNlLnVybGVuY29kZT5gCitmdW5jdGlvbiBwcm92aWRlcyBhIHdheSB0byBjb250cm9sIHRoZSBlbmNvZGluZyBvZiBxdWVyeSBwYXJ0cyBpZiBuZWVkZWQuCisoQ29udHJpYnV0ZWQgYnkgU2Ftd3lzZSBhbmQgQXJub24gWWFhcmkgaW4gOmlzc3VlOmAxMzg2NmAuKQorCitUaGUgOmZ1bmM6YHJlcXVlc3QudXJsb3BlbigpIDx1cmxsaWIucmVxdWVzdC51cmxvcGVuPmAgZnVuY3Rpb24gYWNjZXB0cyBhbgorOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IGFzIGEgKmNvbnRleHQqIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIHVzZWQgZm9yCit0aGUgSFRUUFMgY29ubmVjdGlvbi4gIChDb250cmlidXRlZCBieSBBbGV4IEdheW5vciBpbiA6aXNzdWU6YDIyMzY2YC4pCisKK1RoZSA6ZnVuYzpgcGFyc2UudXJsam9pbigpIDx1cmxsaWIucGFyc2UudXJsam9pbj5gIHdhcyB1cGRhdGVkIHRvIHVzZSB0aGUKKzpyZmM6YDM5ODZgIHNlbWFudGljcyBmb3IgdGhlIHJlc29sdXRpb24gb2YgcmVsYXRpdmUgVVJMcywgcmF0aGVyIHRoYW4KKzpyZmM6YDE4MDhgIGFuZCA6cmZjOmAyMzk2YC4KKyhDb250cmlidXRlZCBieSBEZW1pYW4gQnJlY2h0IGFuZCBTZW50aGlsIEt1bWFyYW4gaW4gOmlzc3VlOmAyMjExOGAuKQorCisKK3dzZ2lyZWYKKy0tLS0tLS0KKworVGhlICpoZWFkZXJzKiBhcmd1bWVudCBvZiB0aGUgOmNsYXNzOmBoZWFkZXJzLkhlYWRlcnMgPHdzZ2lyZWYuaGVhZGVycy5IZWFkZXJzPmAKK2NsYXNzIGNvbnN0cnVjdG9yIGlzIG5vdyBvcHRpb25hbC4KKyhDb250cmlidXRlZCBieSBQYWJsbyBUb3JyZXMgTmF2YXJyZXRlIGFuZCBTaWxlbnRHaG9zdCBpbiA6aXNzdWU6YDU4MDBgLikKKworCit4bWxycGMKKy0tLS0tLQorCitUaGUgOmNsYXNzOmBjbGllbnQuU2VydmVyUHJveHkgPHhtbHJwYy5jbGllbnQuU2VydmVyUHJveHk+YCBjbGFzcyBub3cgc3VwcG9ydHMKK3RoZSA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbC4KKyhDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAyMDYyN2AuKQorCitUaGUgOmNsYXNzOmBjbGllbnQuU2VydmVyUHJveHkgPHhtbHJwYy5jbGllbnQuU2VydmVyUHJveHk+YCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cworYW4gb3B0aW9uYWwgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgaW5zdGFuY2UuCisoQ29udHJpYnV0ZWQgYnkgQWxleCBHYXlub3IgaW4gOmlzc3VlOmAyMjk2MGAuKQorCisKK3htbC5zYXgKKy0tLS0tLS0KKworU0FYIHBhcnNlcnMgbm93IHN1cHBvcnQgYSBjaGFyYWN0ZXIgc3RyZWFtIG9mIHRoZQorOmNsYXNzOmB4bWxyZWFkZXIuSW5wdXRTb3VyY2UgPHhtbC5zYXgueG1scmVhZGVyLklucHV0U291cmNlPmAgb2JqZWN0LgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAyMTc1YC4pCisKKzpmdW5jOmB+eG1sLnNheC5wYXJzZVN0cmluZ2Agbm93IGFjY2VwdHMgYSA6Y2xhc3M6YHN0cmAgaW5zdGFuY2UuCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDEwNTkwYC4pCisKKworemlwZmlsZQorLS0tLS0tLQorCitaSVAgb3V0cHV0IGNhbiBub3cgYmUgd3JpdHRlbiB0byB1bnNlZWthYmxlIHN0cmVhbXMuCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDIzMjUyYC4pCisKK1RoZSAqbW9kZSogYXJndW1lbnQgb2YgOm1ldGg6YFppcEZpbGUub3BlbigpIDx6aXBmaWxlLlppcEZpbGUub3Blbj5gIG1ldGhvZCBub3cKK2FjY2VwdHMgYGAieCJgYCB0byByZXF1ZXN0IGV4Y2x1c2l2ZSBjcmVhdGlvbi4KKyhDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjE3MTdgLikKKworCitPdGhlciBtb2R1bGUtbGV2ZWwgY2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTWFueSBmdW5jdGlvbnMgaW4gdGhlIDptb2Q6YG1tYXBgLCA6bW9kOmBvc3NhdWRpb2RldmAsIDptb2Q6YHNvY2tldGAsCis6bW9kOmBzc2xgLCBhbmQgOm1vZDpgY29kZWNzYCBtb2R1bGVzIG5vdyBhY2NlcHQgd3JpdGFibGUKKzp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMgPGJ5dGVzLWxpa2Ugb2JqZWN0PmAuCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDIzMDAxYC4pCisKKworT3B0aW1pemF0aW9ucworPT09PT09PT09PT09PQorCitUaGUgOmZ1bmM6YG9zLndhbGtgIGZ1bmN0aW9uIGhhcyBiZWVuIHNwZWQgdXAgYnkgMyB0byA1IHRpbWVzIG9uIFBPU0lYIHN5c3RlbXMsCithbmQgYnkgNyB0byAyMCB0aW1lcyBvbiBXaW5kb3dzLiAgVGhpcyB3YXMgZG9uZSB1c2luZyB0aGUgbmV3IDpmdW5jOmBvcy5zY2FuZGlyYAorZnVuY3Rpb24sIHdoaWNoIGV4cG9zZXMgZmlsZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1bmRlcmx5aW5nIGBgcmVhZGRpcmBgIG9yCitgYEZpbmRGaXJzdEZpbGVgYC9gYEZpbmROZXh0RmlsZWBgIHN5c3RlbSBjYWxscy4gIChDb250cmlidXRlZCBieQorQmVuIEhveXQgd2l0aCBoZWxwIGZyb20gVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAyMzYwNWAuKQorCitDb25zdHJ1Y3Rpb24gb2YgYGBieXRlcyhpbnQpYGAgKGZpbGxlZCBieSB6ZXJvIGJ5dGVzKSBpcyBmYXN0ZXIgYW5kIHVzZXMgbGVzcworbWVtb3J5IGZvciBsYXJnZSBvYmplY3RzLiBgYGNhbGxvYygpYGAgaXMgdXNlZCBpbnN0ZWFkIG9mIGBgbWFsbG9jKClgYCB0bworYWxsb2NhdGUgbWVtb3J5IGZvciB0aGVzZSBvYmplY3RzLgorKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMjEyMzNgLikKKworU29tZSBvcGVyYXRpb25zIG9uIDptb2Q6YGlwYWRkcmVzc2AgOmNsYXNzOmB+aXBhZGRyZXNzLklQdjROZXR3b3JrYCBhbmQKKzpjbGFzczpgfmlwYWRkcmVzcy5JUHY2TmV0d29ya2AgaGF2ZSBiZWVuIG1hc3NpdmVseSBzcGVkIHVwLCBzdWNoIGFzCis6bWV0aDpgfmlwYWRkcmVzcy5JUHY0TmV0d29yay5zdWJuZXRzYCwgOm1ldGg6YH5pcGFkZHJlc3MuSVB2NE5ldHdvcmsuc3VwZXJuZXRgLAorOmZ1bmM6YH5pcGFkZHJlc3Muc3VtbWFyaXplX2FkZHJlc3NfcmFuZ2VgLCA6ZnVuYzpgfmlwYWRkcmVzcy5jb2xsYXBzZV9hZGRyZXNzZXNgLgorVGhlIHNwZWVkIHVwIGNhbiByYW5nZSBmcm9tIDMgdG8gMTUgdGltZXMuCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UsIE1pY2hlbCBBbGJlcnQsIGFuZCBNYXJrdXMgaW4KKzppc3N1ZTpgMjE0ODZgLCA6aXNzdWU6YDIxNDg3YCwgOmlzc3VlOmAyMDgyNmAsIDppc3N1ZTpgMjMyNjZgLikKKworUGlja2xpbmcgb2YgOm1vZDpgaXBhZGRyZXNzYCBvYmplY3RzIHdhcyBvcHRpbWl6ZWQgdG8gcHJvZHVjZSBzaWduaWZpY2FudGx5CitzbWFsbGVyIG91dHB1dC4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjMxMzNgLikKKworTWFueSBvcGVyYXRpb25zIG9uIDpjbGFzczpgaW8uQnl0ZXNJT2AgYXJlIG5vdyA1MCUgdG8gMTAwJSBmYXN0ZXIuCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE1MzgxYCBhbmQgRGF2aWQgV2lsc29uIGluCis6aXNzdWU6YDIyMDAzYC4pCisKK1RoZSA6ZnVuYzpgbWFyc2hhbC5kdW1wc2AgZnVuY3Rpb24gaXMgbm93IGZhc3RlcjogNjUtODUlIHdpdGggdmVyc2lvbnMgMworYW5kIDQsIDIwLTI1JSB3aXRoIHZlcnNpb25zIDAgdG8gMiBvbiB0eXBpY2FsIGRhdGEsIGFuZCB1cCB0byA1IHRpbWVzIGluCitiZXN0IGNhc2VzLgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAyMDQxNmAgYW5kIDppc3N1ZTpgMjMzNDRgLikKKworVGhlIFVURi0zMiBlbmNvZGVyIGlzIG5vdyAzIHRvIDcgdGltZXMgZmFzdGVyLgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNTAyN2AuKQorCitSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBub3cgcGFyc2VkIHVwIHRvIDEwJSBmYXN0ZXIuCisoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE5MzgwYC4pCisKK1RoZSA6ZnVuYzpganNvbi5kdW1wc2AgZnVuY3Rpb24gd2FzIG9wdGltaXplZCB0byBydW4gd2l0aAorYGBlbnN1cmVfYXNjaWk9RmFsc2VgYCBhcyBmYXN0IGFzIHdpdGggYGBlbnN1cmVfYXNjaWk9VHJ1ZWBgLgorKENvbnRyaWJ1dGVkIGJ5IE5hb2tpIEluYWRhIGluIDppc3N1ZTpgMjMyMDZgLikKKworVGhlIDpjOmZ1bmM6YFB5T2JqZWN0X0lzSW5zdGFuY2VgIGFuZCA6YzpmdW5jOmBQeU9iamVjdF9Jc1N1YmNsYXNzYAorZnVuY3Rpb25zIGhhdmUgYmVlbiBzcGVkIHVwIGluIHRoZSBjb21tb24gY2FzZSB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQKK2hhcyA6Y2xhc3M6YHR5cGVgIGFzIGl0cyBtZXRhY2xhc3MuCisoQ29udHJpYnV0ZWQgR2VvcmcgQnJhbmRsIGJ5IGluIDppc3N1ZTpgMjI1NDBgLikKKworTWV0aG9kIGNhY2hpbmcgd2FzIHNsaWdodGx5IGltcHJvdmVkLCB5aWVsZGluZyB1cCB0byA1JSBwZXJmb3JtYW5jZQoraW1wcm92ZW1lbnQgaW4gc29tZSBiZW5jaG1hcmtzLgorKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMjI4NDdgLikKKworT2JqZWN0cyBmcm9tIHRoZSA6bW9kOmByYW5kb21gIG1vZHVsZSBub3cgdXNlIDUwJSBsZXNzIG1lbW9yeSBvbiA2NC1iaXQKK2J1aWxkcy4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjM0ODhgLikKKworVGhlIDpmdW5jOmBwcm9wZXJ0eWAgZ2V0dGVyIGNhbGxzIGFyZSB1cCB0byAyNSUgZmFzdGVyLgorKENvbnRyaWJ1dGVkIGJ5IEpvZSBKZXZuaWsgaW4gOmlzc3VlOmAyMzkxMGAuKQorCitJbnN0YW50aWF0aW9uIG9mIDpjbGFzczpgZnJhY3Rpb25zLkZyYWN0aW9uYCBpcyBub3cgdXAgdG8gMzAlIGZhc3Rlci4KKyhDb250cmlidXRlZCBieSBTdGVmYW4gQmVobmVsIGluIDppc3N1ZTpgMjI0NjRgLikKKworU3RyaW5nIG1ldGhvZHMgOm1ldGg6YH5zdHIuZmluZGAsIDptZXRoOmB+c3RyLnJmaW5kYCwgOm1ldGg6YH5zdHIuc3BsaXRgLAorOm1ldGg6YH5zdHIucGFydGl0aW9uYCBhbmQgdGhlIDprZXl3b3JkOmBpbmAgc3RyaW5nIG9wZXJhdG9yIGFyZSBub3cgc2lnbmlmaWNhbnRseQorZmFzdGVyIGZvciBzZWFyY2hpbmcgMS1jaGFyYWN0ZXIgc3Vic3RyaW5ncy4KKyhDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjM1NzNgLikKKworCitCdWlsZCBhbmQgQyBBUEkgQ2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PT0KKworTmV3IGBgY2FsbG9jYGAgZnVuY3Rpb25zIHdlcmUgYWRkZWQ6CisKKyogOmM6ZnVuYzpgUHlNZW1fUmF3Q2FsbG9jYCwKKyogOmM6ZnVuYzpgUHlNZW1fQ2FsbG9jYCwKKyogOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbG9jYCwKKyogOmM6ZnVuYzpgX1B5T2JqZWN0X0dDX0NhbGxvY2AuCisKKyhDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lciBpbiA6aXNzdWU6YDIxMjMzYC4pCisKK05ldyBlbmNvZGluZy9kZWNvZGluZyBoZWxwZXIgZnVuY3Rpb25zOgorCisqIDpjOmZ1bmM6YFB5X0RlY29kZUxvY2FsZWAgKHJlcGxhY2VkIGBgX1B5X2NoYXIyd2NoYXIoKWBgKSwKKyogOmM6ZnVuYzpgUHlfRW5jb2RlTG9jYWxlYCAocmVwbGFjZWQgYGBfUHlfd2NoYXIyY2hhcigpYGApLgorCisoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAxODM5NWAuKQorCitBIG5ldyA6YzpmdW5jOmBQeUNvZGVjX05hbWVSZXBsYWNlRXJyb3JzYCBmdW5jdGlvbiB0byByZXBsYWNlIHRoZSB1bmljb2RlCitlbmNvZGUgZXJyb3Igd2l0aCBgYFxOey4uLn1gYCBlc2NhcGVzLgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxOTY3NmAuKQorCitBIG5ldyA6YzpmdW5jOmBQeUVycl9Gb3JtYXRWYCBmdW5jdGlvbiBzaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX0Zvcm1hdGAsCitidXQgYWNjZXB0cyBhIGBgdmFfbGlzdGBgIGFyZ3VtZW50LgorKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTg3MTFgLikKKworQSBuZXcgOmM6ZGF0YTpgUHlFeGNfUmVjdXJzaW9uRXJyb3JgIGV4Y2VwdGlvbi4KKyhDb250cmlidXRlZCBieSBHZW9yZyBCcmFuZGwgaW4gOmlzc3VlOmAxOTIzNWAuKQorCitOZXcgOmM6ZnVuYzpgUHlNb2R1bGVfRnJvbURlZkFuZFNwZWNgLCA6YzpmdW5jOmBQeU1vZHVsZV9Gcm9tRGVmQW5kU3BlYzJgLAorYW5kIDpjOmZ1bmM6YFB5TW9kdWxlX0V4ZWNEZWZgIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGJ5IDpwZXA6YDQ4OWAgLS0KK211bHRpLXBoYXNlIGV4dGVuc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCisoQ29udHJpYnV0ZWQgYnkgUGV0ciBWaWt0b3JpbiBpbiA6aXNzdWU6YDI0MjY4YC4pCisKK05ldyA6YzpmdW5jOmBQeU51bWJlcl9NYXRyaXhNdWx0aXBseWAgYW5kCis6YzpmdW5jOmBQeU51bWJlcl9JblBsYWNlTWF0cml4TXVsdGlwbHlgIGZ1bmN0aW9ucyB0byBwZXJmb3JtIG1hdHJpeAorbXVsdGlwbGljYXRpb24uCisoQ29udHJpYnV0ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24gaW4gOmlzc3VlOmAyMTE3NmAuICBTZWUgYWxzbyA6cGVwOmA0NjVgCitmb3IgZGV0YWlscy4pCisKK1RoZSA6YzptZW1iZXI6YFB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgc2xvdCBpcyBub3cgcGFydCBvZiB0aGUgc3RhYmxlIEFCSS4KKworV2luZG93cyBidWlsZHMgbm93IHJlcXVpcmUgTWljcm9zb2Z0IFZpc3VhbCBDKysgMTQuMCwgd2hpY2gKK2lzIGF2YWlsYWJsZSBhcyBwYXJ0IG9mIGBWaXN1YWwgU3R1ZGlvIDIwMTUgPGh0dHBzOi8vd3d3LnZpc3VhbHN0dWRpby5jb20vPmBfLgorCitFeHRlbnNpb24gbW9kdWxlcyBub3cgaW5jbHVkZSBhIHBsYXRmb3JtIGluZm9ybWF0aW9uIHRhZyBpbiB0aGVpciBmaWxlbmFtZSBvbgorc29tZSBwbGF0Zm9ybXMgKHRoZSB0YWcgaXMgb3B0aW9uYWwsIGFuZCBDUHl0aG9uIHdpbGwgaW1wb3J0IGV4dGVuc2lvbnMgd2l0aG91dAoraXQsIGFsdGhvdWdoIGlmIHRoZSB0YWcgaXMgcHJlc2VudCBhbmQgbWlzbWF0Y2hlZCwgdGhlIGV4dGVuc2lvbiB3b24ndCBiZQorbG9hZGVkKToKKworKiBPbiBMaW51eCwgZXh0ZW5zaW9uIG1vZHVsZSBmaWxlbmFtZXMgZW5kIHdpdGgKKyAgYGAuY3B5dGhvbi08bWFqb3I+PG1pbm9yPm0tPGFyY2hpdGVjdHVyZT4tPG9zPi5weWRgYDoKKworICAqIGBgPG1ham9yPmBgIGlzIHRoZSBtYWpvciBudW1iZXIgb2YgdGhlIFB5dGhvbiB2ZXJzaW9uOworICAgIGZvciBQeXRob24gMy41IHRoaXMgaXMgYGAzYGAuCisKKyAgKiBgYDxtaW5vcj5gYCBpcyB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBQeXRob24gdmVyc2lvbjsKKyAgICBmb3IgUHl0aG9uIDMuNSB0aGlzIGlzIGBgNWBgLgorCisgICogYGA8YXJjaGl0ZWN0dXJlPmBgIGlzIHRoZSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgdGhlIGV4dGVuc2lvbiBtb2R1bGUKKyAgICB3YXMgYnVpbHQgdG8gcnVuIG9uLiBJdCdzIG1vc3QgY29tbW9ubHkgZWl0aGVyIGBgaTM4NmBgIGZvciAzMi1iaXQgSW50ZWwKKyAgICBwbGF0Zm9ybXMgb3IgYGB4ODZfNjRgYCBmb3IgNjQtYml0IEludGVsIChhbmQgQU1EKSBwbGF0Zm9ybXMuCisKKyAgKiBgYDxvcz5gYCBpcyBhbHdheXMgYGBsaW51eC1nbnVgYCwgZXhjZXB0IGZvciBleHRlbnNpb25zIGJ1aWx0IHRvCisgICAgdGFsayB0byB0aGUgMzItYml0IEFCSSBvbiA2NC1iaXQgcGxhdGZvcm1zLCBpbiB3aGljaCBjYXNlIGl0IGlzCisgICAgYGBsaW51eC1nbnUzMmBgIChhbmQgYGA8YXJjaGl0ZWN0dXJlPmBgIHdpbGwgYmUgYGB4ODZfNjRgYCkuCisKKyogT24gV2luZG93cywgZXh0ZW5zaW9uIG1vZHVsZSBmaWxlbmFtZXMgZW5kIHdpdGgKKyAgYGA8ZGVidWc+LmNwPG1ham9yPjxtaW5vcj4tPHBsYXRmb3JtPi5weWRgYDoKKworICAqIGBgPG1ham9yPmBgIGlzIHRoZSBtYWpvciBudW1iZXIgb2YgdGhlIFB5dGhvbiB2ZXJzaW9uOworICAgIGZvciBQeXRob24gMy41IHRoaXMgaXMgYGAzYGAuCisKKyAgKiBgYDxtaW5vcj5gYCBpcyB0aGUgbWlub3IgbnVtYmVyIG9mIHRoZSBQeXRob24gdmVyc2lvbjsKKyAgICBmb3IgUHl0aG9uIDMuNSB0aGlzIGlzIGBgNWBgLgorCisgICogYGA8cGxhdGZvcm0+YGAgaXMgdGhlIHBsYXRmb3JtIHRoZSBleHRlbnNpb24gbW9kdWxlIHdhcyBidWlsdCBmb3IsCisgICAgZWl0aGVyIGBgd2luMzJgYCBmb3IgV2luMzIsIGBgd2luX2FtZDY0YGAgZm9yIFdpbjY0LCBgYHdpbl9pYTY0YGAgZm9yCisgICAgV2luZG93cyBJdGFuaXVtIDY0LCBhbmQgYGB3aW5fYXJtYGAgZm9yIFdpbmRvd3Mgb24gQVJNLgorCisgICogSWYgYnVpbHQgaW4gZGVidWcgbW9kZSwgYGA8ZGVidWc+YGAgd2lsbCBiZSBgYF9kYGAsCisgICAgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYmxhbmsuCisKKyogT24gT1MgWCBwbGF0Zm9ybXMsIGV4dGVuc2lvbiBtb2R1bGUgZmlsZW5hbWVzIG5vdyBlbmQgd2l0aCBgYC1kYXJ3aW4uc29gYC4KKworKiBPbiBhbGwgb3RoZXIgcGxhdGZvcm1zLCBleHRlbnNpb24gbW9kdWxlIGZpbGVuYW1lcyBhcmUgdGhlIHNhbWUgYXMgdGhleSB3ZXJlCisgIHdpdGggUHl0aG9uIDMuNC4KKworCitEZXByZWNhdGVkCis9PT09PT09PT09CisKK05ldyBLZXl3b3JkcworLS0tLS0tLS0tLS0tCisKK2BgYXN5bmNgYCBhbmQgYGBhd2FpdGBgIGFyZSBub3QgcmVjb21tZW5kZWQgdG8gYmUgdXNlZCBhcyB2YXJpYWJsZSwgY2xhc3MsCitmdW5jdGlvbiBvciBtb2R1bGUgbmFtZXMuICBJbnRyb2R1Y2VkIGJ5IDpwZXA6YDQ5MmAgaW4gUHl0aG9uIDMuNSwgdGhleSB3aWxsCitiZWNvbWUgcHJvcGVyIGtleXdvcmRzIGluIFB5dGhvbiAzLjcuCisKKworRGVwcmVjYXRlZCBQeXRob24gQmVoYXZpb3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JhaXNpbmcgdGhlIDpleGM6YFN0b3BJdGVyYXRpb25gIGV4Y2VwdGlvbiBpbnNpZGUgYSBnZW5lcmF0b3Igd2lsbCBub3cgZ2VuZXJhdGUgYSBzaWxlbnQKKzpleGM6YFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmdgLCB3aGljaCB3aWxsIGJlY29tZSBhIG5vbi1zaWxlbnQgZGVwcmVjYXRpb24KK3dhcm5pbmcgaW4gUHl0aG9uIDMuNiBhbmQgd2lsbCB0cmlnZ2VyIGEgOmV4YzpgUnVudGltZUVycm9yYCBpbiBQeXRob24gMy43LgorU2VlIDpyZWY6YFBFUCA0Nzk6IENoYW5nZSBTdG9wSXRlcmF0aW9uIGhhbmRsaW5nIGluc2lkZSBnZW5lcmF0b3JzIDx3aGF0c25ldy1wZXAtNDc5PmAKK2ZvciBkZXRhaWxzLgorCisKK1Vuc3VwcG9ydGVkIE9wZXJhdGluZyBTeXN0ZW1zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaW5kb3dzIFhQIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgTWljcm9zb2Z0LCB0aHVzLCBwZXIgOlBFUDpgMTFgLCBDUHl0aG9uCiszLjUgaXMgbm8gbG9uZ2VyIG9mZmljaWFsbHkgc3VwcG9ydGVkIG9uIHRoaXMgT1MuCisKKworRGVwcmVjYXRlZCBQeXRob24gbW9kdWxlcywgZnVuY3Rpb25zIGFuZCBtZXRob2RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YGZvcm1hdHRlcmAgbW9kdWxlIGhhcyBub3cgZ3JhZHVhdGVkIHRvIGZ1bGwgZGVwcmVjYXRpb24gYW5kIGlzIHN0aWxsCitzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNi4KKworVGhlIDpmdW5jOmBhc3luY2lvLmFzeW5jYCBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mCis6ZnVuYzpgfmFzeW5jaW8uZW5zdXJlX2Z1dHVyZWAuCisKK1RoZSA6bW9kOmBzbXRwZGAgbW9kdWxlIGhhcyBpbiB0aGUgcGFzdCBhbHdheXMgZGVjb2RlZCB0aGUgREFUQSBwb3J0aW9uIG9mCitlbWFpbCBtZXNzYWdlcyB1c2luZyB0aGUgYGB1dGYtOGBgIGNvZGVjLiAgVGhpcyBjYW4gbm93IGJlIGNvbnRyb2xsZWQgYnkgdGhlCituZXcgKmRlY29kZV9kYXRhKiBrZXl3b3JkIHRvIDpjbGFzczpgfnNtdHBkLlNNVFBTZXJ2ZXJgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMKK2BgVHJ1ZWBgLCBidXQgdGhpcyBkZWZhdWx0IGlzIGRlcHJlY2F0ZWQuICBTcGVjaWZ5IHRoZSAqZGVjb2RlX2RhdGEqIGtleXdvcmQKK3dpdGggYW4gYXBwcm9wcmlhdGUgdmFsdWUgdG8gYXZvaWQgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisKK0RpcmVjdGx5IGFzc2lnbmluZyB2YWx1ZXMgdG8gdGhlIDphdHRyOmB+aHR0cC5jb29raWVzLk1vcnNlbC5rZXlgLAorOmF0dHI6YH5odHRwLmNvb2tpZXMuTW9yc2VsLnZhbHVlYCBhbmQKKzphdHRyOmB+aHR0cC5jb29raWVzLk1vcnNlbC5jb2RlZF92YWx1ZWAgb2YgOmNsYXNzOmBodHRwLmNvb2tpZXMuTW9yc2VsYAorb2JqZWN0cyBpcyBkZXByZWNhdGVkLiAgVXNlIHRoZSA6bWV0aDpgfmh0dHAuY29va2llcy5Nb3JzZWwuc2V0YCBtZXRob2QKK2luc3RlYWQuICBJbiBhZGRpdGlvbiwgdGhlIHVuZG9jdW1lbnRlZCAqTGVnYWxDaGFycyogcGFyYW1ldGVyIG9mCis6bWV0aDpgfmh0dHAuY29va2llcy5Nb3JzZWwuc2V0YCBpcyBkZXByZWNhdGVkLCBhbmQgaXMgbm93IGlnbm9yZWQuCisKK1Bhc3NpbmcgYSBmb3JtYXQgc3RyaW5nIGFzIGtleXdvcmQgYXJndW1lbnQgKmZvcm1hdF9zdHJpbmcqIHRvIHRoZQorOm1ldGg6YH5zdHJpbmcuRm9ybWF0dGVyLmZvcm1hdGAgbWV0aG9kIG9mIHRoZSA6Y2xhc3M6YHN0cmluZy5Gb3JtYXR0ZXJgCitjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkLgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAyMzY3MWAuKQorCitUaGUgOmZ1bmM6YHBsYXRmb3JtLmRpc3RgIGFuZCA6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCBmdW5jdGlvbnMKK2FyZSBub3cgZGVwcmVjYXRlZC4gIExpbnV4IGRpc3RyaWJ1dGlvbnMgdXNlIHRvbyBtYW55IGRpZmZlcmVudCB3YXlzIG9mCitkZXNjcmliaW5nIHRoZW1zZWx2ZXMsIHNvIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGxlZnQgdG8gYSBwYWNrYWdlLgorKENvbnRyaWJ1dGVkIGJ5IFZhanJhc2t5IEtvayBhbmQgQmVya2VyIFBla3NhZyBpbiA6aXNzdWU6YDEzMjJgLikKKworVGhlIHByZXZpb3VzbHkgdW5kb2N1bWVudGVkIGBgZnJvbV9mdW5jdGlvbmBgIGFuZCBgYGZyb21fYnVpbHRpbmBgIG1ldGhvZHMgb2YKKzpjbGFzczpgaW5zcGVjdC5TaWduYXR1cmVgIGFyZSBkZXByZWNhdGVkLiAgVXNlIHRoZSBuZXcKKzptZXRoOmBTaWduYXR1cmUuZnJvbV9jYWxsYWJsZSgpIDxpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2NhbGxhYmxlPmAKK21ldGhvZCBpbnN0ZWFkLiAoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAyNDI0OGAuKQorCitUaGUgOmZ1bmM6YGluc3BlY3QuZ2V0YXJnc3BlY2AgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgc2NoZWR1bGVkIHRvIGJlCityZW1vdmVkIGluIFB5dGhvbiAzLjYuICAoU2VlIDppc3N1ZTpgMjA0MzhgIGZvciBkZXRhaWxzLikKKworVGhlIDptb2Q6YGluc3BlY3RgIDpmdW5jOmB+aW5zcGVjdC5nZXRmdWxsYXJnc3BlY2AsCis6ZnVuYzpgfmluc3BlY3QuZ2V0YXJndmFsdWVzYCwgOmZ1bmM6YH5pbnNwZWN0LmdldGNhbGxhcmdzYCwKKzpmdW5jOmB+aW5zcGVjdC5nZXRhcmd2YWx1ZXNgLCA6ZnVuYzpgfmluc3BlY3QuZm9ybWF0YXJnc3BlY2AsIGFuZAorOmZ1bmM6YH5pbnNwZWN0LmZvcm1hdGFyZ3ZhbHVlc2AgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mCit0aGUgOmZ1bmM6YGluc3BlY3Quc2lnbmF0dXJlYCBBUEkuCisoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAyMDQzOGAuKQorCitVc2Ugb2YgOmNvbnN0OmByZS5MT0NBTEVgIGZsYWcgd2l0aCBzdHIgcGF0dGVybnMgb3IgOmNvbnN0OmByZS5BU0NJSWAgaXMgbm93CitkZXByZWNhdGVkLiAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAyMjQwN2AuKQorCitVc2Ugb2YgdW5yZWNvZ25pemVkIHNwZWNpYWwgc2VxdWVuY2VzIGNvbnNpc3Rpbmcgb2YgYGAnXCdgYCBhbmQgYW4gQVNDSUkgbGV0dGVyCitpbiByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybnMgYW5kIHJlcGxhY2VtZW50IHBhdHRlcm5zIG5vdyByYWlzZXMgYQorZGVwcmVjYXRpb24gd2FybmluZyBhbmQgd2lsbCBiZSBmb3JiaWRkZW4gaW4gUHl0aG9uIDMuNi4KKyhDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjM2MjJgLikKKworVGhlIHVuZG9jdW1lbnRlZCBhbmQgdW5vZmZpY2lhbCAqdXNlX2xvYWRfdGVzdHMqIGRlZmF1bHQgYXJndW1lbnQgb2YgdGhlCis6bWV0aDpgdW5pdHRlc3QuVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlYCBtZXRob2Qgbm93IGlzCitkZXByZWNhdGVkIGFuZCBpZ25vcmVkLgorKENvbnRyaWJ1dGVkIGJ5IFJvYmVydCBDb2xsaW5zIGFuZCBCYXJyeSBBLiBXYXJzYXcgaW4gOmlzc3VlOmAxNjY2MmAuKQorCisKK1JlbW92ZWQKKz09PT09PT0KKworQVBJIGFuZCBGZWF0dXJlIFJlbW92YWxzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBvYnNvbGV0ZSBhbmQgcHJldmlvdXNseSBkZXByZWNhdGVkIEFQSXMgYW5kIGZlYXR1cmVzIGhhdmUgYmVlbgorcmVtb3ZlZDoKKworKiBUaGUgYGBfX3ZlcnNpb25fX2BgIGF0dHJpYnV0ZSBoYXMgYmVlbiBkcm9wcGVkIGZyb20gdGhlIGVtYWlsIHBhY2thZ2UuICBUaGUKKyAgZW1haWwgY29kZSBoYXNuJ3QgYmVlbiBzaGlwcGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgc3RkbGliIGZvciBhIGxvbmcgdGltZSwKKyAgYW5kIHRoZSBgYF9fdmVyc2lvbl9fYGAgc3RyaW5nIHdhcyBub3QgdXBkYXRlZCBpbiB0aGUgbGFzdCBmZXcgcmVsZWFzZXMuCisKKyogVGhlIGludGVybmFsIGBgTmV0cmNgYCBjbGFzcyBpbiB0aGUgOm1vZDpgZnRwbGliYCBtb2R1bGUgd2FzIGRlcHJlY2F0ZWQgaW4KKyAgMy40LCBhbmQgaGFzIG5vdyBiZWVuIHJlbW92ZWQuCisgIChDb250cmlidXRlZCBieSBNYXR0IENoYXB1dCBpbiA6aXNzdWU6YDY2MjNgLikKKworKiBUaGUgY29uY2VwdCBvZiBgYC5weW9gYCBmaWxlcyBoYXMgYmVlbiByZW1vdmVkLgorCisqIFRoZSBKb2luYWJsZVF1ZXVlIGNsYXNzIGluIHRoZSBwcm92aXNpb25hbCA6bW9kOmBhc3luY2lvYCBtb2R1bGUgd2FzCisgIGRlcHJlY2F0ZWQgaW4gMy40LjQgYW5kIGlzIG5vdyByZW1vdmVkLgorICAoQ29udHJpYnV0ZWQgYnkgQS4gSmVzc2UgSmlyeXUgRGF2aXMgaW4gOmlzc3VlOmAyMzQ2NGAuKQorCisKK1BvcnRpbmcgdG8gUHl0aG9uIDMuNQorPT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBsaXN0cyBwcmV2aW91c2x5IGRlc2NyaWJlZCBjaGFuZ2VzIGFuZCBvdGhlciBidWdmaXhlcwordGhhdCBtYXkgcmVxdWlyZSBjaGFuZ2VzIHRvIHlvdXIgY29kZS4KKworCitDaGFuZ2VzIGluIFB5dGhvbiBiZWhhdmlvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBEdWUgdG8gYW4gb3ZlcnNpZ2h0LCBlYXJsaWVyIFB5dGhvbiB2ZXJzaW9ucyBlcnJvbmVvdXNseSBhY2NlcHRlZCB0aGUKKyAgZm9sbG93aW5nIHN5bnRheDo6CisKKyAgICAgIGYoMSBmb3IgeCBpbiBbMV0sICphcmdzKQorICAgICAgZigxIGZvciB4IGluIFsxXSwgKiprd2FyZ3MpCisKKyAgUHl0aG9uIDMuNSBub3cgY29ycmVjdGx5IHJhaXNlcyBhIDpleGM6YFN5bnRheEVycm9yYCwgYXMgZ2VuZXJhdG9yCisgIGV4cHJlc3Npb25zIG11c3QgYmUgcHV0IGluIHBhcmVudGhlc2VzIGlmIG5vdCBhIHNvbGUgYXJndW1lbnQgdG8gYSBmdW5jdGlvbi4KKworCitDaGFuZ2VzIGluIHRoZSBQeXRob24gQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogOnBlcDpgNDc1YDogU3lzdGVtIGNhbGxzIGFyZSBub3cgcmV0cmllZCB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGluc3RlYWQKKyAgb2YgcmFpc2luZyA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBpZiB0aGUgUHl0aG9uIHNpZ25hbCBoYW5kbGVyIGRvZXMgbm90CisgIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKworKiBCZWZvcmUgUHl0aG9uIDMuNSwgYSA6Y2xhc3M6YGRhdGV0aW1lLnRpbWVgIG9iamVjdCB3YXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZQorICBpZiBpdCByZXByZXNlbnRlZCBtaWRuaWdodCBpbiBVVEMuICBUaGlzIGJlaGF2aW9yIHdhcyBjb25zaWRlcmVkIG9ic2N1cmUgYW5kCisgIGVycm9yLXByb25lIGFuZCBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjUuICBTZWUgOmlzc3VlOmAxMzkzNmAgZm9yIGZ1bGwKKyAgZGV0YWlscy4KKworKiBUaGUgOm1ldGg6YHNzbC5TU0xTb2NrZXQuc2VuZCgpYCBtZXRob2Qgbm93IHJhaXNlcyBlaXRoZXIKKyAgOmV4Yzpgc3NsLlNTTFdhbnRSZWFkRXJyb3JgIG9yIDpleGM6YHNzbC5TU0xXYW50V3JpdGVFcnJvcmAKKyAgb24gYSBub24tYmxvY2tpbmcgc29ja2V0IGlmIHRoZSBvcGVyYXRpb24gd291bGQgYmxvY2suICBQcmV2aW91c2x5LAorICBpdCB3b3VsZCByZXR1cm4gYGAwYGAuICAoQ29udHJpYnV0ZWQgYnkgTmlrb2xhdXMgUmF0aCBpbiA6aXNzdWU6YDIwOTUxYC4pCisKKyogVGhlIGBgX19uYW1lX19gYCBhdHRyaWJ1dGUgb2YgZ2VuZXJhdG9ycyBpcyBub3cgc2V0IGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUsCisgIGluc3RlYWQgb2YgYmVpbmcgc2V0IGZyb20gdGhlIGNvZGUgbmFtZS4gVXNlIGBgZ2VuLmdpX2NvZGUuY29fbmFtZWBgIHRvCisgIHJldHJpZXZlIHRoZSBjb2RlIG5hbWUuIEdlbmVyYXRvcnMgYWxzbyBoYXZlIGEgbmV3IGBgX19xdWFsbmFtZV9fYGAKKyAgYXR0cmlidXRlLCB0aGUgcXVhbGlmaWVkIG5hbWUsIHdoaWNoIGlzIG5vdyB1c2VkIGZvciB0aGUgcmVwcmVzZW50YXRpb24KKyAgb2YgYSBnZW5lcmF0b3IgKGBgcmVwcihnZW4pYGApLgorICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAyMTIwNWAuKQorCisqIFRoZSBkZXByZWNhdGVkICJzdHJpY3QiIG1vZGUgYW5kIGFyZ3VtZW50IG9mIDpjbGFzczpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZXJgLAorICA6bWV0aDpgSFRNTFBhcnNlci5lcnJvcmAsIGFuZCB0aGUgOmV4YzpgSFRNTFBhcnNlckVycm9yYCBleGNlcHRpb24gaGF2ZSBiZWVuCisgIHJlbW92ZWQuICAoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTUxMTRgLikKKyAgVGhlICpjb252ZXJ0X2NoYXJyZWZzKiBhcmd1bWVudCBvZiA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBpcworICBub3cgYGBUcnVlYGAgYnkgZGVmYXVsdC4gIChDb250cmlidXRlZCBieSBCZXJrZXIgUGVrc2FnIGluIDppc3N1ZTpgMjEwNDdgLikKKworKiBBbHRob3VnaCBpdCBpcyBub3QgZm9ybWFsbHkgcGFydCBvZiB0aGUgQVBJLCBpdCBpcyB3b3J0aCBub3RpbmcgZm9yIHBvcnRpbmcKKyAgcHVycG9zZXMgKGllOiBmaXhpbmcgdGVzdHMpIHRoYXQgZXJyb3IgbWVzc2FnZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgb2YgdGhlCisgIGZvcm0gIidzb21ldHlwZScgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIHByb3RvY29sIiBhcmUgbm93IG9mIHRoZSBmb3JtICJhCisgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaXMgcmVxdWlyZWQsIG5vdCAnc29tZXR5cGUnIi4KKyAgKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDE2NTE4YC4pCisKKyogSWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHNldCB0byBhIGRpcmVjdG9yeSB0aGF0IG5vIGxvbmdlciBleGlzdHMgdGhlbgorICA6ZXhjOmBGaWxlTm90Rm91bmRFcnJvcmAgd2lsbCBubyBsb25nZXIgYmUgcmFpc2VkIGFuZCBpbnN0ZWFkCisgIDptZXRoOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLmZpbmRfc3BlY2Agd2lsbCByZXR1cm4gYGBOb25lYGAKKyAgKip3aXRob3V0KiogY2FjaGluZyBgYE5vbmVgYCBpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLCB3aGljaCBpcworICBkaWZmZXJlbnQgdGhhbiB0aGUgdHlwaWNhbCBjYXNlICg6aXNzdWU6YDIyODM0YCkuCisKKyogSFRUUCBzdGF0dXMgY29kZSBhbmQgbWVzc2FnZXMgZnJvbSA6bW9kOmBodHRwLmNsaWVudGAgYW5kIDptb2Q6YGh0dHAuc2VydmVyYAorICB3ZXJlIHJlZmFjdG9yZWQgaW50byBhIGNvbW1vbiA6Y2xhc3M6YH5odHRwLkhUVFBTdGF0dXNgIGVudW0uICBUaGUgdmFsdWVzIGluCisgIDptb2Q6YGh0dHAuY2xpZW50YCBhbmQgOm1vZDpgaHR0cC5zZXJ2ZXJgIHJlbWFpbiBhdmFpbGFibGUgZm9yIGJhY2t3YXJkcworICBjb21wYXRpYmlsaXR5LiAgKENvbnRyaWJ1dGVkIGJ5IERlbWlhbiBCcmVjaHQgaW4gOmlzc3VlOmAyMTc5M2AuKQorCisqIFdoZW4gYW4gaW1wb3J0IGxvYWRlciBkZWZpbmVzIDptZXRoOmBpbXBvcnRsaWIubWFjaGluZXJ5LkxvYWRlci5leGVjX21vZHVsZWAKKyAgaXQgaXMgbm93IGV4cGVjdGVkIHRvIGFsc28gZGVmaW5lCisgIDptZXRoOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5Mb2FkZXIuY3JlYXRlX21vZHVsZWAgKHJhaXNlcyBhCisgIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2Agbm93LCB3aWxsIGJlIGFuIGVycm9yIGluIFB5dGhvbiAzLjYpLiBJZiB0aGUgbG9hZGVyCisgIGluaGVyaXRzIGZyb20gOmNsYXNzOmBpbXBvcnRsaWIuYWJjLkxvYWRlcmAgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLCBlbHNlCisgIHNpbXBseSBkZWZpbmUgOm1ldGg6YH5pbXBvcnRsaWIubWFjaGluZXJ5LkxvYWRlci5jcmVhdGVfbW9kdWxlYCB0byByZXR1cm4KKyAgYGBOb25lYGAuICAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMjMwMTRgLikKKworKiBUaGUgOmZ1bmM6YHJlLnNwbGl0YCBmdW5jdGlvbiBhbHdheXMgaWdub3JlZCBlbXB0eSBwYXR0ZXJuIG1hdGNoZXMsIHNvIHRoZQorICBgYCJ4KiJgYCBwYXR0ZXJuIHdvcmtlZCB0aGUgc2FtZSBhcyBgYCJ4KyJgYCwgYW5kIHRoZSBgYCJcYiJgYCBwYXR0ZXJuIG5ldmVyCisgIHdvcmtlZC4gIE5vdyA6ZnVuYzpgcmUuc3BsaXRgIHJhaXNlcyBhIHdhcm5pbmcgaWYgdGhlIHBhdHRlcm4gY291bGQgbWF0Y2gKKyAgYW4gZW1wdHkgc3RyaW5nLiAgRm9yIGNvbXBhdGliaWxpdHksIHVzZSBwYXR0ZXJucyB0aGF0IG5ldmVyIG1hdGNoIGFuIGVtcHR5CisgIHN0cmluZyAoZS5nLiBgYCJ4KyJgYCBpbnN0ZWFkIG9mIGBgIngqImBgKS4gIFBhdHRlcm5zIHRoYXQgY291bGQgb25seSBtYXRjaAorICBhbiBlbXB0eSBzdHJpbmcgKHN1Y2ggYXMgYGAiXGIiYGApIG5vdyByYWlzZSBhbiBlcnJvci4KKyAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAyMjgxOGAuKQorCisqIFRoZSA6Y2xhc3M6YGh0dHAuY29va2llcy5Nb3JzZWxgIGRpY3QtbGlrZSBpbnRlcmZhY2UgaGFzIGJlZW4gbWFkZSBzZWxmCisgIGNvbnNpc3RlbnQ6ICBtb3JzZWwgY29tcGFyaXNvbiBub3cgdGFrZXMgdGhlIDphdHRyOmB+aHR0cC5jb29raWVzLk1vcnNlbC5rZXlgCisgIGFuZCA6YXR0cjpgfmh0dHAuY29va2llcy5Nb3JzZWwudmFsdWVgIGludG8gYWNjb3VudCwKKyAgOm1ldGg6YH5odHRwLmNvb2tpZXMuTW9yc2VsLmNvcHlgIG5vdyByZXN1bHRzIGluIGEKKyAgOmNsYXNzOmB+aHR0cC5jb29raWVzLk1vcnNlbGAgaW5zdGFuY2UgcmF0aGVyIHRoYW4gYSA6Y2xhc3M6YGRpY3RgLCBhbmQKKyAgOm1ldGg6YH5odHRwLmNvb2tpZXMuTW9yc2VsLnVwZGF0ZWAgd2lsbCBub3cgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGFueSBvZiB0aGUKKyAga2V5cyBpbiB0aGUgdXBkYXRlIGRpY3Rpb25hcnkgYXJlIGludmFsaWQuICBJbiBhZGRpdGlvbiwgdGhlIHVuZG9jdW1lbnRlZAorICAqTGVnYWxDaGFycyogcGFyYW1ldGVyIG9mIDpmdW5jOmB+aHR0cC5jb29raWVzLk1vcnNlbC5zZXRgIGlzIGRlcHJlY2F0ZWQgYW5kCisgIGlzIG5vdyBpZ25vcmVkLiAgKENvbnRyaWJ1dGVkIGJ5IERlbWlhbiBCcmVjaHQgaW4gOmlzc3VlOmAyMjExYC4pCisKKyogOnBlcDpgNDg4YCBoYXMgcmVtb3ZlZCBgYC5weW9gYCBmaWxlcyBmcm9tIFB5dGhvbiBhbmQgaW50cm9kdWNlZCB0aGUgb3B0aW9uYWwKKyAgYGBvcHQtYGAgdGFnIGluIGBgLnB5Y2BgIGZpbGUgbmFtZXMuIFRoZQorICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgIGhhcyBnYWluZWQgYW4gKm9wdGltaXphdGlvbioKKyAgcGFyYW1ldGVyIHRvIGhlbHAgY29udHJvbCB0aGUgYGBvcHQtYGAgdGFnLiBCZWNhdXNlIG9mIHRoaXMsIHRoZQorICAqZGVidWdfb3ZlcnJpZGUqIHBhcmFtZXRlciBvZiB0aGUgZnVuY3Rpb24gaXMgbm93IGRlcHJlY2F0ZWQuIGAucHlvYCBmaWxlcworICBhcmUgYWxzbyBubyBsb25nZXIgc3VwcG9ydGVkIGFzIGEgZmlsZSBhcmd1bWVudCB0byB0aGUgUHl0aG9uIGludGVycHJldGVyIGFuZAorICB0aHVzIHNlcnZlIG5vIHB1cnBvc2Ugd2hlbiBkaXN0cmlidXRlZCBvbiB0aGVpciBvd24gKGkuZS4gc291cmNsZXNzIGNvZGUKKyAgZGlzdHJpYnV0aW9uKS4gRHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlIG1hZ2ljIG51bWJlciBmb3IgYnl0ZWNvZGUgaGFzIGNoYW5nZWQKKyAgaW4gUHl0aG9uIDMuNSwgYWxsIG9sZCBgLnB5b2AgZmlsZXMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24gYXJlCisgIGludmFsaWQgcmVnYXJkbGVzcyBvZiB0aGlzIFBFUC4KKworKiBUaGUgOm1vZDpgc29ja2V0YCBtb2R1bGUgbm93IGV4cG9ydHMgdGhlIDpkYXRhOmB+c29ja2V0LkNBTl9SQVdfRkRfRlJBTUVTYAorICBjb25zdGFudCBvbiBsaW51eCAzLjYgYW5kIGdyZWF0ZXIuCisKKyogVGhlIDpmdW5jOmBzc2wuY2VydF90aW1lX3RvX3NlY29uZHNgIGZ1bmN0aW9uIG5vdyBpbnRlcnByZXRzIHRoZSBpbnB1dCB0aW1lCisgIGFzIFVUQyBhbmQgbm90IGFzIGxvY2FsIHRpbWUsIHBlciA6cmZjOmA1MjgwYC4gIEFkZGl0aW9uYWxseSwgdGhlIHJldHVybgorICB2YWx1ZSBpcyBhbHdheXMgYW4gOmNsYXNzOmBpbnRgLiAoQ29udHJpYnV0ZWQgYnkgQWtpcmEgTGkgaW4gOmlzc3VlOmAxOTk0MGAuKQorCisqIFRoZSBgYHB5Z2V0dGV4dC5weWBgIFRvb2wgbm93IHVzZXMgdGhlIHN0YW5kYXJkICtOTk5OIGZvcm1hdCBmb3IgdGltZXpvbmVzIGluCisgIHRoZSBQT1QtQ3JlYXRpb24tRGF0ZSBoZWFkZXIuCisKKyogVGhlIDptb2Q6YHNtdHBsaWJgIG1vZHVsZSBub3cgdXNlcyA6ZGF0YTpgc3lzLnN0ZGVycmAgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMKKyAgbW9kdWxlLWxldmVsIDpkYXRhOmBzdGRlcnJgIHZhcmlhYmxlIGZvciBkZWJ1ZyBvdXRwdXQuICBJZiB5b3VyICh0ZXN0KQorICBwcm9ncmFtIGRlcGVuZHMgb24gcGF0Y2hpbmcgdGhlIG1vZHVsZS1sZXZlbCB2YXJpYWJsZSB0byBjYXB0dXJlIHRoZSBkZWJ1ZworICBvdXRwdXQsIHlvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIGl0IHRvIGNhcHR1cmUgc3lzLnN0ZGVyciBpbnN0ZWFkLgorCisqIFRoZSA6bWV0aDpgc3RyLnN0YXJ0c3dpdGhgIGFuZCA6bWV0aDpgc3RyLmVuZHN3aXRoYCBtZXRob2RzIG5vIGxvbmdlciByZXR1cm4KKyAgYGBUcnVlYGAgd2hlbiBmaW5kaW5nIHRoZSBlbXB0eSBzdHJpbmcgYW5kIHRoZSBpbmRleGVzIGFyZSBjb21wbGV0ZWx5IG91dCBvZgorICByYW5nZS4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMjQyODRgLikKKworKiBUaGUgOmZ1bmM6YGluc3BlY3QuZ2V0ZG9jYCBmdW5jdGlvbiBub3cgcmV0dXJucyBkb2N1bWVudGF0aW9uIHN0cmluZ3MKKyAgaW5oZXJpdGVkIGZyb20gYmFzZSBjbGFzc2VzLiAgRG9jdW1lbnRhdGlvbiBzdHJpbmdzIG5vIGxvbmdlciBuZWVkIHRvIGJlCisgIGR1cGxpY2F0ZWQgaWYgdGhlIGluaGVyaXRlZCBkb2N1bWVudGF0aW9uIGlzIGFwcHJvcHJpYXRlLiAgVG8gc3VwcHJlc3MgYW4KKyAgaW5oZXJpdGVkIHN0cmluZywgYW4gZW1wdHkgc3RyaW5nIG11c3QgYmUgc3BlY2lmaWVkIChvciB0aGUgZG9jdW1lbnRhdGlvbgorICBtYXkgYmUgZmlsbGVkIGluKS4gIFRoaXMgY2hhbmdlIGFmZmVjdHMgdGhlIG91dHB1dCBvZiB0aGUgOm1vZDpgcHlkb2NgCisgIG1vZHVsZSBhbmQgdGhlIDpmdW5jOmBoZWxwYCBmdW5jdGlvbi4KKyAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNTU4MmAuKQorCisqIE5lc3RlZCA6ZnVuYzpgZnVuY3Rvb2xzLnBhcnRpYWxgIGNhbGxzIGFyZSBub3cgZmxhdHRlbmVkLiAgSWYgeW91IHdlcmUKKyAgcmVseWluZyBvbiB0aGUgcHJldmlvdXMgYmVoYXZpb3IsIHlvdSBjYW4gbm93IGVpdGhlciBhZGQgYW4gYXR0cmlidXRlIHRvIGEKKyAgOmZ1bmM6YGZ1bmN0b29scy5wYXJ0aWFsYCBvYmplY3Qgb3IgeW91IGNhbiBjcmVhdGUgYSBzdWJjbGFzcyBvZgorICA6ZnVuYzpgZnVuY3Rvb2xzLnBhcnRpYWxgLgorICAoQ29udHJpYnV0ZWQgYnkgQWxleGFuZGVyIEJlbG9wb2xza3kgaW4gOmlzc3VlOmA3ODMwYC4pCisKK0NoYW5nZXMgaW4gdGhlIEMgQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSB1bmRvY3VtZW50ZWQgOmM6bWVtYmVyOmB+UHlNZW1vcnlWaWV3T2JqZWN0LmZvcm1hdGAgbWVtYmVyIG9mIHRoZQorICAobm9uLXB1YmxpYykgOmM6dHlwZTpgUHlNZW1vcnlWaWV3T2JqZWN0YCBzdHJ1Y3R1cmUgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgQWxsIGV4dGVuc2lvbnMgcmVseWluZyBvbiB0aGUgcmVsZXZhbnQgcGFydHMgaW4gYGBtZW1vcnlvYmplY3QuaGBgCisgIG11c3QgYmUgcmVidWlsdC4KKworKiBUaGUgOmM6dHlwZTpgUHlNZW1BbGxvY2F0b3JgIHN0cnVjdHVyZSB3YXMgcmVuYW1lZCB0bworICA6Yzp0eXBlOmBQeU1lbUFsbG9jYXRvckV4YCBhbmQgYSBuZXcgYGBjYWxsb2NgYCBmaWVsZCB3YXMgYWRkZWQuCisKKyogUmVtb3ZlZCBub24tZG9jdW1lbnRlZCBtYWNybyA6YzptYWNybzpgUHlPYmplY3RfUkVQUmAgd2hpY2ggbGVha2VkIHJlZmVyZW5jZXMuCisgIFVzZSBmb3JtYXQgY2hhcmFjdGVyIGBgJVJgYCBpbiA6YzpmdW5jOmBQeVVuaWNvZGVfRnJvbUZvcm1hdGAtbGlrZSBmdW5jdGlvbnMKKyAgdG8gZm9ybWF0IHRoZSA6ZnVuYzpgcmVwcmAgb2YgdGhlIG9iamVjdC4KKyAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAyMjQ1M2AuKQorCisqIEJlY2F1c2UgdGhlIGxhY2sgb2YgdGhlIDphdHRyOmBfX21vZHVsZV9fYCBhdHRyaWJ1dGUgYnJlYWtzIHBpY2tsaW5nIGFuZAorICBpbnRyb3NwZWN0aW9uLCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgaXMgbm93IHJhaXNlZCBmb3IgYnVpbHRpbiB0eXBlcyB3aXRob3V0CisgIHRoZSA6YXR0cjpgX19tb2R1bGVfX2AgYXR0cmlidXRlLiAgVGhpcyB3b3VsZCBiZSBhbiBBdHRyaWJ1dGVFcnJvciBpbgorICB0aGUgZnV0dXJlLgorICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDIwMjA0YC4pCisKKyogQXMgcGFydCBvZiB0aGUgOnBlcDpgNDkyYCBpbXBsZW1lbnRhdGlvbiwgdGhlIGBgdHBfcmVzZXJ2ZWRgYCBzbG90IG9mCisgIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgd2FzIHJlcGxhY2VkIHdpdGggYQorICA6YzptZW1iZXI6YHRwX2FzX2FzeW5jYCBzbG90LiAgUmVmZXIgdG8gOnJlZjpgY29yby1vYmplY3RzYCBmb3IKKyAgbmV3IHR5cGVzLCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuCisKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QgYi9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CmluZGV4IDI5OTAyZTQuLmVkYjU1MDIgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QKKysrIGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdApAQCAtMTEsNiArMTEsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKIAorICAgMy41LnJzdAogICAgMy40LnJzdAogICAgMy4zLnJzdAogICAgMy4yLnJzdApkaWZmIC0tZ2l0IGEvR3JhbW1hci9HcmFtbWFyIGIvR3JhbW1hci9HcmFtbWFyCmluZGV4IDA1YzMxODEuLjQzMDc1MjMgMTAwNjQ0Ci0tLSBhL0dyYW1tYXIvR3JhbW1hcgorKysgYi9HcmFtbWFyL0dyYW1tYXIKQEAgLTIxLDggKzIxLDExIEBACiAKIGRlY29yYXRvcjogJ0AnIGRvdHRlZF9uYW1lIFsgJygnIFthcmdsaXN0XSAnKScgXSBORVdMSU5FCiBkZWNvcmF0b3JzOiBkZWNvcmF0b3IrCi1kZWNvcmF0ZWQ6IGRlY29yYXRvcnMgKGNsYXNzZGVmIHwgZnVuY2RlZikKK2RlY29yYXRlZDogZGVjb3JhdG9ycyAoY2xhc3NkZWYgfCBmdW5jZGVmIHwgYXN5bmNfZnVuY2RlZikKKworYXN5bmNfZnVuY2RlZjogQVNZTkMgZnVuY2RlZgogZnVuY2RlZjogJ2RlZicgTkFNRSBwYXJhbWV0ZXJzIFsnLT4nIHRlc3RdICc6JyBzdWl0ZQorCiBwYXJhbWV0ZXJzOiAnKCcgW3R5cGVkYXJnc2xpc3RdICcpJwogdHlwZWRhcmdzbGlzdDogKHRmcGRlZiBbJz0nIHRlc3RdICgnLCcgdGZwZGVmIFsnPScgdGVzdF0pKiBbJywnCiAgICAgICAgWycqJyBbdGZwZGVmXSAoJywnIHRmcGRlZiBbJz0nIHRlc3RdKSogWycsJyAnKionIHRmcGRlZl0gfCAnKionIHRmcGRlZl1dCkBAIC00MCw3ICs0Myw3IEBACiBleHByX3N0bXQ6IHRlc3RsaXN0X3N0YXJfZXhwciAoYXVnYXNzaWduICh5aWVsZF9leHByfHRlc3RsaXN0KSB8CiAgICAgICAgICAgICAgICAgICAgICAoJz0nICh5aWVsZF9leHByfHRlc3RsaXN0X3N0YXJfZXhwcikpKikKIHRlc3RsaXN0X3N0YXJfZXhwcjogKHRlc3R8c3Rhcl9leHByKSAoJywnICh0ZXN0fHN0YXJfZXhwcikpKiBbJywnXQotYXVnYXNzaWduOiAoJys9JyB8ICctPScgfCAnKj0nIHwgJy89JyB8ICclPScgfCAnJj0nIHwgJ3w9JyB8ICdePScgfAorYXVnYXNzaWduOiAoJys9JyB8ICctPScgfCAnKj0nIHwgJ0A9JyB8ICcvPScgfCAnJT0nIHwgJyY9JyB8ICd8PScgfCAnXj0nIHwKICAgICAgICAgICAgICc8PD0nIHwgJz4+PScgfCAnKio9JyB8ICcvLz0nKQogIyBGb3Igbm9ybWFsIGFzc2lnbm1lbnRzLCBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBlbmZvcmNlZCBieSB0aGUgaW50ZXJwcmV0ZXIKIGRlbF9zdG10OiAnZGVsJyBleHBybGlzdApAQCAtNjUsNyArNjgsOCBAQAogbm9ubG9jYWxfc3RtdDogJ25vbmxvY2FsJyBOQU1FICgnLCcgTkFNRSkqCiBhc3NlcnRfc3RtdDogJ2Fzc2VydCcgdGVzdCBbJywnIHRlc3RdCiAKLWNvbXBvdW5kX3N0bXQ6IGlmX3N0bXQgfCB3aGlsZV9zdG10IHwgZm9yX3N0bXQgfCB0cnlfc3RtdCB8IHdpdGhfc3RtdCB8IGZ1bmNkZWYgfCBjbGFzc2RlZiB8IGRlY29yYXRlZAorY29tcG91bmRfc3RtdDogaWZfc3RtdCB8IHdoaWxlX3N0bXQgfCBmb3Jfc3RtdCB8IHRyeV9zdG10IHwgd2l0aF9zdG10IHwgZnVuY2RlZiB8IGNsYXNzZGVmIHwgZGVjb3JhdGVkIHwgYXN5bmNfc3RtdAorYXN5bmNfc3RtdDogQVNZTkMgKGZ1bmNkZWYgfCB3aXRoX3N0bXQgfCBmb3Jfc3RtdCkKIGlmX3N0bXQ6ICdpZicgdGVzdCAnOicgc3VpdGUgKCdlbGlmJyB0ZXN0ICc6JyBzdWl0ZSkqIFsnZWxzZScgJzonIHN1aXRlXQogd2hpbGVfc3RtdDogJ3doaWxlJyB0ZXN0ICc6JyBzdWl0ZSBbJ2Vsc2UnICc6JyBzdWl0ZV0KIGZvcl9zdG10OiAnZm9yJyBleHBybGlzdCAnaW4nIHRlc3RsaXN0ICc6JyBzdWl0ZSBbJ2Vsc2UnICc6JyBzdWl0ZV0KQEAgLTg5LDcgKzkzLDcgQEAKIG5vdF90ZXN0OiAnbm90JyBub3RfdGVzdCB8IGNvbXBhcmlzb24KIGNvbXBhcmlzb246IGV4cHIgKGNvbXBfb3AgZXhwcikqCiAjIDw+IGlzbid0IGFjdHVhbGx5IGEgdmFsaWQgY29tcGFyaXNvbiBvcGVyYXRvciBpbiBQeXRob24uIEl0J3MgaGVyZSBmb3IgdGhlCi0jIHNha2Ugb2YgYSBfX2Z1dHVyZV9fIGltcG9ydCBkZXNjcmliZWQgaW4gUEVQIDQwMQorIyBzYWtlIG9mIGEgX19mdXR1cmVfXyBpbXBvcnQgZGVzY3JpYmVkIGluIFBFUCA0MDEgKHdoaWNoIHJlYWxseSB3b3JrcyA6LSkKIGNvbXBfb3A6ICc8J3wnPid8Jz09J3wnPj0nfCc8PSd8Jzw+J3wnIT0nfCdpbid8J25vdCcgJ2luJ3wnaXMnfCdpcycgJ25vdCcKIHN0YXJfZXhwcjogJyonIGV4cHIKIGV4cHI6IHhvcl9leHByICgnfCcgeG9yX2V4cHIpKgpAQCAtOTcsOSArMTAxLDEwIEBACiBhbmRfZXhwcjogc2hpZnRfZXhwciAoJyYnIHNoaWZ0X2V4cHIpKgogc2hpZnRfZXhwcjogYXJpdGhfZXhwciAoKCc8PCd8Jz4+JykgYXJpdGhfZXhwcikqCiBhcml0aF9leHByOiB0ZXJtICgoJysnfCctJykgdGVybSkqCi10ZXJtOiBmYWN0b3IgKCgnKid8Jy8nfCclJ3wnLy8nKSBmYWN0b3IpKgordGVybTogZmFjdG9yICgoJyonfCdAJ3wnLyd8JyUnfCcvLycpIGZhY3RvcikqCiBmYWN0b3I6ICgnKyd8Jy0nfCd+JykgZmFjdG9yIHwgcG93ZXIKLXBvd2VyOiBhdG9tIHRyYWlsZXIqIFsnKionIGZhY3Rvcl0KK3Bvd2VyOiBhdG9tX2V4cHIgWycqKicgZmFjdG9yXQorYXRvbV9leHByOiBbQVdBSVRdIGF0b20gdHJhaWxlcioKIGF0b206ICgnKCcgW3lpZWxkX2V4cHJ8dGVzdGxpc3RfY29tcF0gJyknIHwKICAgICAgICAnWycgW3Rlc3RsaXN0X2NvbXBdICddJyB8CiAgICAgICAgJ3snIFtkaWN0b3JzZXRtYWtlcl0gJ30nIHwKQEAgLTExMSwxNyArMTE2LDI5IEBACiBzbGljZW9wOiAnOicgW3Rlc3RdCiBleHBybGlzdDogKGV4cHJ8c3Rhcl9leHByKSAoJywnIChleHByfHN0YXJfZXhwcikpKiBbJywnXQogdGVzdGxpc3Q6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10KLWRpY3RvcnNldG1ha2VyOiAoICh0ZXN0ICc6JyB0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddKSkgfAotICAgICAgICAgICAgICAgICAgKHRlc3QgKGNvbXBfZm9yIHwgKCcsJyB0ZXN0KSogWycsJ10pKSApCitkaWN0b3JzZXRtYWtlcjogKCAoKHRlc3QgJzonIHRlc3QgfCAnKionIGV4cHIpCisgICAgICAgICAgICAgICAgICAgKGNvbXBfZm9yIHwgKCcsJyAodGVzdCAnOicgdGVzdCB8ICcqKicgZXhwcikpKiBbJywnXSkpIHwKKyAgICAgICAgICAgICAgICAgICgodGVzdCB8IHN0YXJfZXhwcikKKyAgICAgICAgICAgICAgICAgICAoY29tcF9mb3IgfCAoJywnICh0ZXN0IHwgc3Rhcl9leHByKSkqIFsnLCddKSkgKQogCiBjbGFzc2RlZjogJ2NsYXNzJyBOQU1FIFsnKCcgW2FyZ2xpc3RdICcpJ10gJzonIHN1aXRlCiAKLWFyZ2xpc3Q6IChhcmd1bWVudCAnLCcpKiAoYXJndW1lbnQgWycsJ10KLSAgICAgICAgICAgICAgICAgICAgICAgICB8JyonIHRlc3QgKCcsJyBhcmd1bWVudCkqIFsnLCcgJyoqJyB0ZXN0XSAKLSAgICAgICAgICAgICAgICAgICAgICAgICB8JyoqJyB0ZXN0KQorYXJnbGlzdDogYXJndW1lbnQgKCcsJyBhcmd1bWVudCkqICBbJywnXQorCiAjIFRoZSByZWFzb24gdGhhdCBrZXl3b3JkcyBhcmUgdGVzdCBub2RlcyBpbnN0ZWFkIG9mIE5BTUUgaXMgdGhhdCB1c2luZyBOQU1FCiAjIHJlc3VsdHMgaW4gYW4gYW1iaWd1aXR5LiBhc3QuYyBtYWtlcyBzdXJlIGl0J3MgYSBOQU1FLgotYXJndW1lbnQ6IHRlc3QgW2NvbXBfZm9yXSB8IHRlc3QgJz0nIHRlc3QgICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdAorIyAidGVzdCAnPScgdGVzdCIgaXMgcmVhbGx5ICJrZXl3b3JkICc9JyB0ZXN0IiwgYnV0IHdlIGhhdmUgbm8gc3VjaCB0b2tlbi4KKyMgVGhlc2UgbmVlZCB0byBiZSBpbiBhIHNpbmdsZSBydWxlIHRvIGF2b2lkIGdyYW1tYXIgdGhhdCBpcyBhbWJpZ3VvdXMKKyMgdG8gb3VyIExMKDEpIHBhcnNlci4gRXZlbiB0aG91Z2ggJ3Rlc3QnIGluY2x1ZGVzICcqZXhwcicgaW4gc3Rhcl9leHByLAorIyB3ZSBleHBsaWNpdGx5IG1hdGNoICcqJyBoZXJlLCB0b28sIHRvIGdpdmUgaXQgcHJvcGVyIHByZWNlZGVuY2UuCisjIElsbGVnYWwgY29tYmluYXRpb25zIGFuZCBvcmRlcmluZ3MgYXJlIGJsb2NrZWQgaW4gYXN0LmM6CisjIG11bHRpcGxlICh0ZXN0IGNvbXBfZm9yKSBhcmd1bWVudHMgYXJlIGJsb2NrZWQ7IGtleXdvcmQgdW5wYWNraW5ncworIyB0aGF0IHByZWNlZGUgaXRlcmFibGUgdW5wYWNraW5ncyBhcmUgYmxvY2tlZDsgZXRjLgorYXJndW1lbnQ6ICggdGVzdCBbY29tcF9mb3JdIHwKKyAgICAgICAgICAgIHRlc3QgJz0nIHRlc3QgfAorICAgICAgICAgICAgJyoqJyB0ZXN0IHwKKyAgICAgICAgICAgICcqJyB0ZXN0ICkKKwogY29tcF9pdGVyOiBjb21wX2ZvciB8IGNvbXBfaWYKIGNvbXBfZm9yOiAnZm9yJyBleHBybGlzdCAnaW4nIG9yX3Rlc3QgW2NvbXBfaXRlcl0KIGNvbXBfaWY6ICdpZicgdGVzdF9ub2NvbmQgW2NvbXBfaXRlcl0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvUHl0aG9uLWFzdC5oIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKaW5kZXggNjdkNjc3Yi4uMmQzZWFjYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24tYXN0LmgKKysrIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKQEAgLTE1LDkgKzE1LDkgQEAKIAogdHlwZWRlZiBlbnVtIF9ib29sb3AgeyBBbmQ9MSwgT3I9MiB9IGJvb2xvcF90eTsKIAotdHlwZWRlZiBlbnVtIF9vcGVyYXRvciB7IEFkZD0xLCBTdWI9MiwgTXVsdD0zLCBEaXY9NCwgTW9kPTUsIFBvdz02LCBMU2hpZnQ9NywKLSAgICAgICAgICAgICAgICAgICAgICAgICBSU2hpZnQ9OCwgQml0T3I9OSwgQml0WG9yPTEwLCBCaXRBbmQ9MTEsIEZsb29yRGl2PTEyIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcl90eTsKK3R5cGVkZWYgZW51bSBfb3BlcmF0b3IgeyBBZGQ9MSwgU3ViPTIsIE11bHQ9MywgTWF0TXVsdD00LCBEaXY9NSwgTW9kPTYsIFBvdz03LAorICAgICAgICAgICAgICAgICAgICAgICAgIExTaGlmdD04LCBSU2hpZnQ9OSwgQml0T3I9MTAsIEJpdFhvcj0xMSwgQml0QW5kPTEyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZsb29yRGl2PTEzIH0gb3BlcmF0b3JfdHk7CiAKIHR5cGVkZWYgZW51bSBfdW5hcnlvcCB7IEludmVydD0xLCBOb3Q9MiwgVUFkZD0zLCBVU3ViPTQgfSB1bmFyeW9wX3R5OwogCkBAIC02MywxMiArNjMsMTMgQEAKICAgICB9IHY7CiB9OwogCi1lbnVtIF9zdG10X2tpbmQge0Z1bmN0aW9uRGVmX2tpbmQ9MSwgQ2xhc3NEZWZfa2luZD0yLCBSZXR1cm5fa2luZD0zLAotICAgICAgICAgICAgICAgICAgRGVsZXRlX2tpbmQ9NCwgQXNzaWduX2tpbmQ9NSwgQXVnQXNzaWduX2tpbmQ9NiwgRm9yX2tpbmQ9NywKLSAgICAgICAgICAgICAgICAgIFdoaWxlX2tpbmQ9OCwgSWZfa2luZD05LCBXaXRoX2tpbmQ9MTAsIFJhaXNlX2tpbmQ9MTEsCi0gICAgICAgICAgICAgICAgICBUcnlfa2luZD0xMiwgQXNzZXJ0X2tpbmQ9MTMsIEltcG9ydF9raW5kPTE0LAotICAgICAgICAgICAgICAgICAgSW1wb3J0RnJvbV9raW5kPTE1LCBHbG9iYWxfa2luZD0xNiwgTm9ubG9jYWxfa2luZD0xNywKLSAgICAgICAgICAgICAgICAgIEV4cHJfa2luZD0xOCwgUGFzc19raW5kPTE5LCBCcmVha19raW5kPTIwLCBDb250aW51ZV9raW5kPTIxfTsKK2VudW0gX3N0bXRfa2luZCB7RnVuY3Rpb25EZWZfa2luZD0xLCBBc3luY0Z1bmN0aW9uRGVmX2tpbmQ9MiwgQ2xhc3NEZWZfa2luZD0zLAorICAgICAgICAgICAgICAgICAgUmV0dXJuX2tpbmQ9NCwgRGVsZXRlX2tpbmQ9NSwgQXNzaWduX2tpbmQ9NiwKKyAgICAgICAgICAgICAgICAgIEF1Z0Fzc2lnbl9raW5kPTcsIEZvcl9raW5kPTgsIEFzeW5jRm9yX2tpbmQ9OSwgV2hpbGVfa2luZD0xMCwKKyAgICAgICAgICAgICAgICAgIElmX2tpbmQ9MTEsIFdpdGhfa2luZD0xMiwgQXN5bmNXaXRoX2tpbmQ9MTMsIFJhaXNlX2tpbmQ9MTQsCisgICAgICAgICAgICAgICAgICBUcnlfa2luZD0xNSwgQXNzZXJ0X2tpbmQ9MTYsIEltcG9ydF9raW5kPTE3LAorICAgICAgICAgICAgICAgICAgSW1wb3J0RnJvbV9raW5kPTE4LCBHbG9iYWxfa2luZD0xOSwgTm9ubG9jYWxfa2luZD0yMCwKKyAgICAgICAgICAgICAgICAgIEV4cHJfa2luZD0yMSwgUGFzc19raW5kPTIyLCBCcmVha19raW5kPTIzLCBDb250aW51ZV9raW5kPTI0fTsKIHN0cnVjdCBfc3RtdCB7CiAgICAgZW51bSBfc3RtdF9raW5kIGtpbmQ7CiAgICAgdW5pb24gewpAQCAtODIsMTAgKzgzLDE2IEBACiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgaWRlbnRpZmllciBuYW1lOworICAgICAgICAgICAgYXJndW1lbnRzX3R5IGFyZ3M7CisgICAgICAgICAgICBhc2RsX3NlcSAqYm9keTsKKyAgICAgICAgICAgIGFzZGxfc2VxICpkZWNvcmF0b3JfbGlzdDsKKyAgICAgICAgICAgIGV4cHJfdHkgcmV0dXJuczsKKyAgICAgICAgfSBBc3luY0Z1bmN0aW9uRGVmOworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGlkZW50aWZpZXIgbmFtZTsKICAgICAgICAgICAgIGFzZGxfc2VxICpiYXNlczsKICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkczsKLSAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3M7Ci0gICAgICAgICAgICBleHByX3R5IGt3YXJnczsKICAgICAgICAgICAgIGFzZGxfc2VxICpib2R5OwogICAgICAgICAgICAgYXNkbF9zZXEgKmRlY29yYXRvcl9saXN0OwogICAgICAgICB9IENsYXNzRGVmOwpAQCAtMTE3LDYgKzEyNCwxMyBAQAogICAgICAgICB9IEZvcjsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBleHByX3R5IHRhcmdldDsKKyAgICAgICAgICAgIGV4cHJfdHkgaXRlcjsKKyAgICAgICAgICAgIGFzZGxfc2VxICpib2R5OworICAgICAgICAgICAgYXNkbF9zZXEgKm9yZWxzZTsKKyAgICAgICAgfSBBc3luY0ZvcjsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBleHByX3R5IHRlc3Q7CiAgICAgICAgICAgICBhc2RsX3NlcSAqYm9keTsKICAgICAgICAgICAgIGFzZGxfc2VxICpvcmVsc2U7CkBAIC0xMzQsNiArMTQ4LDExIEBACiAgICAgICAgIH0gV2l0aDsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBhc2RsX3NlcSAqaXRlbXM7CisgICAgICAgICAgICBhc2RsX3NlcSAqYm9keTsKKyAgICAgICAgfSBBc3luY1dpdGg7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgZXhwcl90eSBleGM7CiAgICAgICAgICAgICBleHByX3R5IGNhdXNlOwogICAgICAgICB9IFJhaXNlOwpAQCAtMTgwLDExICsxOTksMTEgQEAKIGVudW0gX2V4cHJfa2luZCB7Qm9vbE9wX2tpbmQ9MSwgQmluT3Bfa2luZD0yLCBVbmFyeU9wX2tpbmQ9MywgTGFtYmRhX2tpbmQ9NCwKICAgICAgICAgICAgICAgICAgIElmRXhwX2tpbmQ9NSwgRGljdF9raW5kPTYsIFNldF9raW5kPTcsIExpc3RDb21wX2tpbmQ9OCwKICAgICAgICAgICAgICAgICAgIFNldENvbXBfa2luZD05LCBEaWN0Q29tcF9raW5kPTEwLCBHZW5lcmF0b3JFeHBfa2luZD0xMSwKLSAgICAgICAgICAgICAgICAgIFlpZWxkX2tpbmQ9MTIsIFlpZWxkRnJvbV9raW5kPTEzLCBDb21wYXJlX2tpbmQ9MTQsCi0gICAgICAgICAgICAgICAgICBDYWxsX2tpbmQ9MTUsIE51bV9raW5kPTE2LCBTdHJfa2luZD0xNywgQnl0ZXNfa2luZD0xOCwKLSAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9raW5kPTE5LCBFbGxpcHNpc19raW5kPTIwLCBBdHRyaWJ1dGVfa2luZD0yMSwKLSAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdF9raW5kPTIyLCBTdGFycmVkX2tpbmQ9MjMsIE5hbWVfa2luZD0yNCwKLSAgICAgICAgICAgICAgICAgIExpc3Rfa2luZD0yNSwgVHVwbGVfa2luZD0yNn07CisgICAgICAgICAgICAgICAgICBBd2FpdF9raW5kPTEyLCBZaWVsZF9raW5kPTEzLCBZaWVsZEZyb21fa2luZD0xNCwKKyAgICAgICAgICAgICAgICAgIENvbXBhcmVfa2luZD0xNSwgQ2FsbF9raW5kPTE2LCBOdW1fa2luZD0xNywgU3RyX2tpbmQ9MTgsCisgICAgICAgICAgICAgICAgICBCeXRlc19raW5kPTE5LCBOYW1lQ29uc3RhbnRfa2luZD0yMCwgRWxsaXBzaXNfa2luZD0yMSwKKyAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZV9raW5kPTIyLCBTdWJzY3JpcHRfa2luZD0yMywgU3RhcnJlZF9raW5kPTI0LAorICAgICAgICAgICAgICAgICAgTmFtZV9raW5kPTI1LCBMaXN0X2tpbmQ9MjYsIFR1cGxlX2tpbmQ9Mjd9Owogc3RydWN0IF9leHByIHsKICAgICBlbnVtIF9leHByX2tpbmQga2luZDsKICAgICB1bmlvbiB7CkBAIC0yNDcsNiArMjY2LDEwIEBACiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKKyAgICAgICAgfSBBd2FpdDsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBleHByX3R5IHZhbHVlOwogICAgICAgICB9IFlpZWxkOwogICAgICAgICAKICAgICAgICAgc3RydWN0IHsKQEAgLTI2Myw4ICsyODYsNiBAQAogICAgICAgICAgICAgZXhwcl90eSBmdW5jOwogICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3M7CiAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHM7Ci0gICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzOwotICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3M7CiAgICAgICAgIH0gQ2FsbDsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCB7CkBAIC00MDYsMTEgKzQyNywxNCBAQAogc3RtdF90eSBfUHlfRnVuY3Rpb25EZWYoaWRlbnRpZmllciBuYW1lLCBhcmd1bWVudHNfdHkgYXJncywgYXNkbF9zZXEgKiBib2R5LAogICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBkZWNvcmF0b3JfbGlzdCwgZXhwcl90eSByZXR1cm5zLCBpbnQgbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKLSNkZWZpbmUgQ2xhc3NEZWYoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTkpIF9QeV9DbGFzc0RlZihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSkKKyNkZWZpbmUgQXN5bmNGdW5jdGlvbkRlZihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpIF9QeV9Bc3luY0Z1bmN0aW9uRGVmKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykKK3N0bXRfdHkgX1B5X0FzeW5jRnVuY3Rpb25EZWYoaWRlbnRpZmllciBuYW1lLCBhcmd1bWVudHNfdHkgYXJncywgYXNkbF9zZXEgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LCBhc2RsX3NlcSAqIGRlY29yYXRvcl9saXN0LCBleHByX3R5IHJldHVybnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIENsYXNzRGVmKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykgX1B5X0NsYXNzRGVmKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykKIHN0bXRfdHkgX1B5X0NsYXNzRGVmKGlkZW50aWZpZXIgbmFtZSwgYXNkbF9zZXEgKiBiYXNlcywgYXNkbF9zZXEgKiBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3MsIGV4cHJfdHkga3dhcmdzLCBhc2RsX3NlcSAqIGJvZHksCi0gICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqIGRlY29yYXRvcl9saXN0LCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICogYm9keSwgYXNkbF9zZXEgKiBkZWNvcmF0b3JfbGlzdCwgaW50IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIFJldHVybihhMCwgYTEsIGEyLCBhMykgX1B5X1JldHVybihhMCwgYTEsIGEyLCBhMykKIHN0bXRfdHkgX1B5X1JldHVybihleHByX3R5IHZhbHVlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBEZWxldGUoYTAsIGExLCBhMiwgYTMpIF9QeV9EZWxldGUoYTAsIGExLCBhMiwgYTMpCkBAIC00MjUsNiArNDQ5LDkgQEAKICNkZWZpbmUgRm9yKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSBfUHlfRm9yKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KQogc3RtdF90eSBfUHlfRm9yKGV4cHJfdHkgdGFyZ2V0LCBleHByX3R5IGl0ZXIsIGFzZGxfc2VxICogYm9keSwgYXNkbF9zZXEgKgogICAgICAgICAgICAgICAgIG9yZWxzZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgQXN5bmNGb3IoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpIF9QeV9Bc3luY0ZvcihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikKK3N0bXRfdHkgX1B5X0FzeW5jRm9yKGV4cHJfdHkgdGFyZ2V0LCBleHByX3R5IGl0ZXIsIGFzZGxfc2VxICogYm9keSwgYXNkbF9zZXEgKgorICAgICAgICAgICAgICAgICAgICAgb3JlbHNlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBXaGlsZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSBfUHlfV2hpbGUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkKIHN0bXRfdHkgX1B5X1doaWxlKGV4cHJfdHkgdGVzdCwgYXNkbF9zZXEgKiBib2R5LCBhc2RsX3NlcSAqIG9yZWxzZSwgaW50IGxpbmVubywKICAgICAgICAgICAgICAgICAgIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CkBAIC00MzQsNiArNDYxLDkgQEAKICNkZWZpbmUgV2l0aChhMCwgYTEsIGEyLCBhMywgYTQpIF9QeV9XaXRoKGEwLCBhMSwgYTIsIGEzLCBhNCkKIHN0bXRfdHkgX1B5X1dpdGgoYXNkbF9zZXEgKiBpdGVtcywgYXNkbF9zZXEgKiBib2R5LCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwKICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpOworI2RlZmluZSBBc3luY1dpdGgoYTAsIGExLCBhMiwgYTMsIGE0KSBfUHlfQXN5bmNXaXRoKGEwLCBhMSwgYTIsIGEzLCBhNCkKK3N0bXRfdHkgX1B5X0FzeW5jV2l0aChhc2RsX3NlcSAqIGl0ZW1zLCBhc2RsX3NlcSAqIGJvZHksIGludCBsaW5lbm8sIGludAorICAgICAgICAgICAgICAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgUmFpc2UoYTAsIGExLCBhMiwgYTMsIGE0KSBfUHlfUmFpc2UoYTAsIGExLCBhMiwgYTMsIGE0KQogc3RtdF90eSBfUHlfUmFpc2UoZXhwcl90eSBleGMsIGV4cHJfdHkgY2F1c2UsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpOwpAQCAtNDk2LDYgKzUyNiw4IEBACiAjZGVmaW5lIEdlbmVyYXRvckV4cChhMCwgYTEsIGEyLCBhMywgYTQpIF9QeV9HZW5lcmF0b3JFeHAoYTAsIGExLCBhMiwgYTMsIGE0KQogZXhwcl90eSBfUHlfR2VuZXJhdG9yRXhwKGV4cHJfdHkgZWx0LCBhc2RsX3NlcSAqIGdlbmVyYXRvcnMsIGludCBsaW5lbm8sIGludAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgQXdhaXQoYTAsIGExLCBhMiwgYTMpIF9QeV9Bd2FpdChhMCwgYTEsIGEyLCBhMykKK2V4cHJfdHkgX1B5X0F3YWl0KGV4cHJfdHkgdmFsdWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIFlpZWxkKGEwLCBhMSwgYTIsIGEzKSBfUHlfWWllbGQoYTAsIGExLCBhMiwgYTMpCiBleHByX3R5IF9QeV9ZaWVsZChleHByX3R5IHZhbHVlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBZaWVsZEZyb20oYTAsIGExLCBhMiwgYTMpIF9QeV9ZaWVsZEZyb20oYTAsIGExLCBhMiwgYTMpCkBAIC01MDQsMTAgKzUzNiw5IEBACiAjZGVmaW5lIENvbXBhcmUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkgX1B5X0NvbXBhcmUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkKIGV4cHJfdHkgX1B5X0NvbXBhcmUoZXhwcl90eSBsZWZ0LCBhc2RsX2ludF9zZXEgKiBvcHMsIGFzZGxfc2VxICogY29tcGFyYXRvcnMsCiAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7Ci0jZGVmaW5lIENhbGwoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3KSBfUHlfQ2FsbChhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpCi1leHByX3R5IF9QeV9DYWxsKGV4cHJfdHkgZnVuYywgYXNkbF9zZXEgKiBhcmdzLCBhc2RsX3NlcSAqIGtleXdvcmRzLCBleHByX3R5Ci0gICAgICAgICAgICAgICAgIHN0YXJhcmdzLCBleHByX3R5IGt3YXJncywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKLSAgICAgICAgICAgICAgICAgKmFyZW5hKTsKKyNkZWZpbmUgQ2FsbChhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSBfUHlfQ2FsbChhMCwgYTEsIGEyLCBhMywgYTQsIGE1KQorZXhwcl90eSBfUHlfQ2FsbChleHByX3R5IGZ1bmMsIGFzZGxfc2VxICogYXJncywgYXNkbF9zZXEgKiBrZXl3b3JkcywgaW50CisgICAgICAgICAgICAgICAgIGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgTnVtKGEwLCBhMSwgYTIsIGEzKSBfUHlfTnVtKGEwLCBhMSwgYTIsIGEzKQogZXhwcl90eSBfUHlfTnVtKG9iamVjdCBuLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBTdHIoYTAsIGExLCBhMiwgYTMpIF9QeV9TdHIoYTAsIGExLCBhMiwgYTMpCkBAIC01NTQsOCArNTg1LDkgQEAKIGFyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncywgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgYXJnX3R5IGt3YXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOwotI2RlZmluZSBhcmcoYTAsIGExLCBhMikgX1B5X2FyZyhhMCwgYTEsIGEyKQotYXJnX3R5IF9QeV9hcmcoaWRlbnRpZmllciBhcmcsIGV4cHJfdHkgYW5ub3RhdGlvbiwgUHlBcmVuYSAqYXJlbmEpOworI2RlZmluZSBhcmcoYTAsIGExLCBhMiwgYTMsIGE0KSBfUHlfYXJnKGEwLCBhMSwgYTIsIGEzLCBhNCkKK2FyZ190eSBfUHlfYXJnKGlkZW50aWZpZXIgYXJnLCBleHByX3R5IGFubm90YXRpb24sIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LAorICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBrZXl3b3JkKGEwLCBhMSwgYTIpIF9QeV9rZXl3b3JkKGEwLCBhMSwgYTIpCiBrZXl3b3JkX3R5IF9QeV9rZXl3b3JkKGlkZW50aWZpZXIgYXJnLCBleHByX3R5IHZhbHVlLCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIGFsaWFzKGEwLCBhMSwgYTIpIF9QeV9hbGlhcyhhMCwgYTEsIGEyKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24uaCBiL0luY2x1ZGUvUHl0aG9uLmgKaW5kZXggMmRkODI5MC4uODU4ZGJkMSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24uaAorKysgYi9JbmNsdWRlL1B5dGhvbi5oCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAidHVwbGVvYmplY3QuaCIKICNpbmNsdWRlICJsaXN0b2JqZWN0LmgiCiAjaW5jbHVkZSAiZGljdG9iamVjdC5oIgorI2luY2x1ZGUgIm9kaWN0b2JqZWN0LmgiCiAjaW5jbHVkZSAiZW51bW9iamVjdC5oIgogI2luY2x1ZGUgInNldG9iamVjdC5oIgogI2luY2x1ZGUgIm1ldGhvZG9iamVjdC5oIgpAQCAtMTEyLDYgKzExMyw3IEBACiAjaW5jbHVkZSAicHlhcmVuYS5oIgogI2luY2x1ZGUgIm1vZHN1cHBvcnQuaCIKICNpbmNsdWRlICJweXRob25ydW4uaCIKKyNpbmNsdWRlICJweWxpZmVjeWNsZS5oIgogI2luY2x1ZGUgImNldmFsLmgiCiAjaW5jbHVkZSAic3lzbW9kdWxlLmgiCiAjaW5jbHVkZSAiaW50cmNoZWNrLmgiCmRpZmYgLS1naXQgYS9JbmNsdWRlL2Fic3RyYWN0LmggYi9JbmNsdWRlL2Fic3RyYWN0LmgKaW5kZXggYmJlZGFmZC4uNGZmNzlmMiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hYnN0cmFjdC5oCisrKyBiL0luY2x1ZGUvYWJzdHJhY3QuaApAQCAtMTkyLDggKzE5Miw4IEBACiAgICAgIGludCBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KTsKIAogICAgICBTZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYXR0cl9uYW1lLCBmb3Igb2JqZWN0IG8sCi0gICAgIHRvIHRoZSB2YWx1ZSwgdi4gUmV0dXJucyAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcwotICAgICB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudDogby5hdHRyX25hbWU9di4KKyAgICAgdG8gdGhlIHZhbHVlIHYuIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGZhaWx1cmU7IHJldHVybiAwIG9uCisgICAgIHN1Y2Nlc3MuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IG8uYXR0cl9uYW1lPXYuCiAKICAgICAgICAqLwogCkBAIC0yMDIsOCArMjAyLDggQEAKICAgICAgaW50IFB5T2JqZWN0X1NldEF0dHIoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KTsKIAogICAgICBTZXQgdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYXR0cl9uYW1lLCBmb3Igb2JqZWN0IG8sCi0gICAgIHRvIHRoZSB2YWx1ZSwgdi4gUmV0dXJucyAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcwotICAgICB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudDogby5hdHRyX25hbWU9di4KKyAgICAgdG8gdGhlIHZhbHVlIHYuIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGZhaWx1cmU7IHJldHVybiAwIG9uCisgICAgIHN1Y2Nlc3MuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IG8uYXR0cl9uYW1lPXYuCiAKICAgICAgICAqLwogCkBAIC0yNjYsNiArMjY2LDEyIEBACiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbChQeU9iamVjdCAqY2FsbGFibGVfb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdyk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlfQ2hlY2tGdW5jdGlvblJlc3VsdChQeU9iamVjdCAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKndoZXJlKTsKKyNlbmRpZgorCiAgICAgICAgLyoKICAgICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QsIGNhbGxhYmxlX29iamVjdCwgd2l0aAogICAgICBhcmd1bWVudHMgYW5kIGtleXdvcmRzIGFyZ3VtZW50cy4gIFRoZSAnYXJncycgYXJndW1lbnQgY2FuIG5vdCBiZQpAQCAtNDI5LDkgKzQzNSw5IEBACiAgICAgIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9TZXRJdGVtKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqdik7CiAKICAgICAgICAvKgotICAgICBNYXAgdGhlIG9iamVjdCwga2V5LCB0byB0aGUgdmFsdWUsIHYuICBSZXR1cm5zCi0gICAgIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24KLSAgICAgc3RhdGVtZW50OiBvW2tleV09di4KKyAgICAgTWFwIHRoZSBvYmplY3Qga2V5IHRvIHRoZSB2YWx1ZSB2LiAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEKKyAgICAgb24gZmFpbHVyZTsgcmV0dXJuIDAgb24gc3VjY2Vzcy4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbgorICAgICBzdGF0ZW1lbnQgb1trZXldPXYuCiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKQEAgLTY1OCw2ICs2NjQsMTIgQEAKICAgICAgbzEqbzIuCiAgICAgICAgKi8KIAorICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TnVtYmVyX01hdHJpeE11bHRpcGx5KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKTsKKworICAgICAgIC8qCisgICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uOiBvMSBAIG8yLgorICAgICAgICovCisKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU51bWJlcl9GbG9vckRpdmlkZShQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMik7CiAKICAgICAgICAvKgpAQCAtODMyLDYgKzg0NCwxMiBAQAogICAgICBvMSAqPSBvMi4KICAgICAgICAqLwogCisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlOdW1iZXJfSW5QbGFjZU1hdHJpeE11bHRpcGx5KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKTsKKworICAgICAgIC8qCisgICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uOiBvMSBAPSBvMi4KKyAgICAgICAqLworCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlKFB5T2JqZWN0ICpvMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm8yKTsKIApAQCAtOTc1LDkgKzk5Myw5IEBACiAgICAgIFB5QVBJX0ZVTkMoaW50KSBQeVNlcXVlbmNlX1NldEl0ZW0oUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKnYpOwogCiAgICAgICAgLyoKLSAgICAgQXNzaWduIG9iamVjdCB2IHRvIHRoZSBpdGggZWxlbWVudCBvZiBvLiAgUmV0dXJucwotICAgICAtMSBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uCi0gICAgIHN0YXRlbWVudDogb1tpXT12LgorICAgICBBc3NpZ24gb2JqZWN0IHYgdG8gdGhlIGl0aCBlbGVtZW50IG9mIG8uICBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybgorICAgICAtMSBvbiBmYWlsdXJlOyByZXR1cm4gMCBvbiBzdWNjZXNzLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUKKyAgICAgUHl0aG9uIHN0YXRlbWVudCBvW2ldPXYuCiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKGludCkgUHlTZXF1ZW5jZV9EZWxJdGVtKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGkpOwpAQCAtMTE5OCwyMyArMTIxNiwyMyBAQAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19LZXlzKFB5T2JqZWN0ICpvKTsKIAogICAgICAgIC8qCi0gICAgIE9uIHN1Y2Nlc3MsIHJldHVybiBhIGxpc3Qgb3IgdHVwbGUgb2YgdGhlIGtleXMgaW4gb2JqZWN0IG8uCi0gICAgIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMLgorICAgICBPbiBzdWNjZXNzLCByZXR1cm4gYSBsaXN0LCBhIHR1cGxlIG9yIGEgZGljdGlvbmFyeSB2aWV3IGluIGNhc2Ugb2YgYSBkaWN0LAorICAgICBvZiB0aGUga2V5cyBpbiBvYmplY3Qgby4gT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwuCiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19WYWx1ZXMoUHlPYmplY3QgKm8pOwogCiAgICAgICAgLyoKLSAgICAgT24gc3VjY2VzcywgcmV0dXJuIGEgbGlzdCBvciB0dXBsZSBvZiB0aGUgdmFsdWVzIGluIG9iamVjdCBvLgotICAgICBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTC4KKyAgICAgT24gc3VjY2VzcywgcmV0dXJuIGEgbGlzdCwgYSB0dXBsZSBvciBhIGRpY3Rpb25hcnkgdmlldyBpbiBjYXNlIG9mIGEgZGljdCwKKyAgICAgb2YgdGhlIHZhbHVlcyBpbiBvYmplY3Qgby4gT24gZmFpbHVyZSwgcmV0dXJuIE5VTEwuCiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19JdGVtcyhQeU9iamVjdCAqbyk7CiAKICAgICAgICAvKgotICAgICBPbiBzdWNjZXNzLCByZXR1cm4gYSBsaXN0IG9yIHR1cGxlIG9mIHRoZSBpdGVtcyBpbiBvYmplY3QgbywKLSAgICAgd2hlcmUgZWFjaCBpdGVtIGlzIGEgdHVwbGUgY29udGFpbmluZyBhIGtleS12YWx1ZSBwYWlyLgotICAgICBPbiBmYWlsdXJlLCByZXR1cm4gTlVMTC4KKyAgICAgT24gc3VjY2VzcywgcmV0dXJuIGEgbGlzdCwgYSB0dXBsZSBvciBhIGRpY3Rpb25hcnkgdmlldyBpbiBjYXNlIG9mIGEgZGljdCwKKyAgICAgb2YgdGhlIGl0ZW1zIGluIG9iamVjdCBvLCB3aGVyZSBlYWNoIGl0ZW0gaXMgYSB0dXBsZSBjb250YWluaW5nIGEga2V5LXZhbHVlCisgICAgIHBhaXIuIE9uIGZhaWx1cmUsIHJldHVybiBOVUxMLgogCiAgICAgICAgKi8KIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlc19tZXRob2RzLmggYi9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaAppbmRleCAxNDk4YjhmLi4xMWQ1ZjQyIDEwMDY0NAotLS0gYS9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaAorKysgYi9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaApAQCAtMjEsOCArMjEsOCBAQAogZXh0ZXJuIHZvaWQgX1B5X2J5dGVzX2NhcGl0YWxpemUoY2hhciAqcmVzdWx0LCBjaGFyICpzLCBQeV9zc2l6ZV90IGxlbik7CiBleHRlcm4gdm9pZCBfUHlfYnl0ZXNfc3dhcGNhc2UoY2hhciAqcmVzdWx0LCBjaGFyICpzLCBQeV9zc2l6ZV90IGxlbik7CiAKLS8qIFRoaXMgb25lIGdldHMgdGhlIHJhdyBhcmd1bWVudCBsaXN0LiAqLwotZXh0ZXJuIFB5T2JqZWN0KiBfUHlfYnl0ZXNfbWFrZXRyYW5zKFB5T2JqZWN0ICphcmdzKTsKKy8qIFRoZSBtYWtldHJhbnMoKSBzdGF0aWMgbWV0aG9kLiAqLworZXh0ZXJuIFB5T2JqZWN0KiBfUHlfYnl0ZXNfbWFrZXRyYW5zKFB5X2J1ZmZlciAqZnJtLCBQeV9idWZmZXIgKnRvKTsKIAogLyogU2hhcmVkIF9fZG9jX18gc3RyaW5ncy4gKi8KIGV4dGVybiBjb25zdCBjaGFyIF9QeV9pc3NwYWNlX19kb2NfX1tdOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlc29iamVjdC5oIGIvSW5jbHVkZS9ieXRlc29iamVjdC5oCmluZGV4IDBlZThkMzYuLjZjMWUwYzMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYnl0ZXNvYmplY3QuaAorKysgYi9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKQEAgLTYyLDYgKzYyLDcgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlCeXRlc19Db25jYXRBbmREZWwoUHlPYmplY3QgKiosIFB5T2JqZWN0ICopOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIF9QeUJ5dGVzX1Jlc2l6ZShQeU9iamVjdCAqKiwgUHlfc3NpemVfdCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUJ5dGVzX0Zvcm1hdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKICNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUJ5dGVzX0RlY29kZUVzY2FwZShjb25zdCBjaGFyICosIFB5X3NzaXplX3QsCiAJCQkJCQkgICBjb25zdCBjaGFyICosIFB5X3NzaXplX3QsCkBAIC04MSw3ICs4Miw3IEBACiAjZW5kaWYKIAogLyogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbCBkYXRhIGJ1ZmZlciBhbmQgc2l6ZSBvZiBhIHN0cmluZwotICAgb2JqZWN0IG9yIHRoZSBkZWZhdWx0IGVuY29kZWQgdmVyc2lvbiBvZiBhbiBVbmljb2RlIG9iamVjdC4gUGFzc2luZworICAgb2JqZWN0IG9yIHRoZSBkZWZhdWx0IGVuY29kZWQgdmVyc2lvbiBvZiBhIFVuaWNvZGUgb2JqZWN0LiBQYXNzaW5nCiAgICBOVUxMIGFzICpsZW4gcGFyYW1ldGVyIHdpbGwgZm9yY2UgdGhlIHN0cmluZyBidWZmZXIgdG8gYmUKICAgIDAtdGVybWluYXRlZCAocGFzc2luZyBhIHN0cmluZyB3aXRoIGVtYmVkZGVkIE5VTEwgY2hhcmFjdGVycyB3aWxsCiAgICBjYXVzZSBhbiBleGNlcHRpb24pLiAgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvY2V2YWwuaCBiL0luY2x1ZGUvY2V2YWwuaAppbmRleCA0OTM3ZjJjLi5iNTM3M2E5IDEwMDY0NAotLS0gYS9JbmNsdWRlL2NldmFsLmgKKysrIGIvSW5jbHVkZS9jZXZhbC5oCkBAIC0yMyw2ICsyMyw4IEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIFB5RXZhbF9TZXRQcm9maWxlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXZhbF9TZXRUcmFjZShQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlFdmFsX1NldENvcm91dGluZVdyYXBwZXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUV2YWxfR2V0Q29yb3V0aW5lV3JhcHBlcih2b2lkKTsKICNlbmRpZgogCiBzdHJ1Y3QgX2ZyYW1lOyAvKiBBdm9pZCBpbmNsdWRpbmcgZnJhbWVvYmplY3QuaCAqLwpAQCAtNDYsMTYgKzQ4LDE2IEBACiAKICAgIEluIFB5dGhvbiAzLjAsIHRoaXMgcHJvdGVjdGlvbiBoYXMgdHdvIGxldmVsczoKICAgICogbm9ybWFsIGFudGktcmVjdXJzaW9uIHByb3RlY3Rpb24gaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHJlY3Vyc2lvbiBsZXZlbAotICAgICBleGNlZWRzIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBsaW1pdC4gSXQgcmFpc2VzIGEgUnVudGltZUVycm9yLCBhbmQgc2V0cworICAgICBleGNlZWRzIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBsaW1pdC4gSXQgcmFpc2VzIGEgUmVjdXJzaW9uRXJyb3IsIGFuZCBzZXRzCiAgICAgIHRoZSAib3ZlcmZsb3dlZCIgZmxhZyBpbiB0aGUgdGhyZWFkIHN0YXRlIHN0cnVjdHVyZS4gVGhpcyBmbGFnCiAgICAgIHRlbXBvcmFyaWx5ICpkaXNhYmxlcyogdGhlIG5vcm1hbCBwcm90ZWN0aW9uOyB0aGlzIGFsbG93cyBjbGVhbnVwIGNvZGUKICAgICAgdG8gcG90ZW50aWFsbHkgb3V0Z3JvdyB0aGUgcmVjdXJzaW9uIGxpbWl0IHdoaWxlIHByb2Nlc3NpbmcgdGhlCi0gICAgIFJ1bnRpbWVFcnJvci4KKyAgICAgUmVjdXJzaW9uRXJyb3IuCiAgICAqICJsYXN0IGNoYW5jZSIgYW50aS1yZWN1cnNpb24gcHJvdGVjdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgcmVjdXJzaW9uCiAgICAgIGxldmVsIGV4Y2VlZHMgImN1cnJlbnQgcmVjdXJzaW9uIGxpbWl0ICsgNTAiLiBCeSBjb25zdHJ1Y3Rpb24sIHRoaXMKICAgICAgcHJvdGVjdGlvbiBjYW4gb25seSBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgIm92ZXJmbG93ZWQiIGZsYWcgaXMgc2V0LiBJdAogICAgICBtZWFucyB0aGUgY2xlYW51cCBjb2RlIGhhcyBpdHNlbGYgZ29uZSBpbnRvIGFuIGluZmluaXRlIGxvb3AsIG9yIHRoZQotICAgICBSdW50aW1lRXJyb3IgaGFzIGJlZW4gbWlzdGFraW5nbHkgaWdub3JlZC4gV2hlbiB0aGlzIHByb3RlY3Rpb24gaXMKKyAgICAgUmVjdXJzaW9uRXJyb3IgaGFzIGJlZW4gbWlzdGFraW5nbHkgaWdub3JlZC4gV2hlbiB0aGlzIHByb3RlY3Rpb24gaXMKICAgICAgdHJpZ2dlcmVkLCB0aGUgaW50ZXJwcmV0ZXIgYWJvcnRzIHdpdGggYSBGYXRhbCBFcnJvci4KIAogICAgSW4gYWRkaXRpb24sIHRoZSAib3ZlcmZsb3dlZCIgZmxhZyBpcyBhdXRvbWF0aWNhbGx5IHJlc2V0IHdoZW4gdGhlCkBAIC05MiwxMCArOTQsMTYgQEAKICMgIGRlZmluZSBfUHlfTWFrZVJlY0NoZWNrKHgpICAoKysoeCkgPiBfUHlfQ2hlY2tSZWN1cnNpb25MaW1pdCkKICNlbmRpZgogCisvKiBDb21wdXRlIHRoZSAibG93ZXItd2F0ZXIgbWFyayIgZm9yIGEgcmVjdXJzaW9uIGxpbWl0LiBXaGVuCisgKiBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKSBpcyBjYWxsZWQgd2l0aCBhIHJlY3Vyc2lvbiBkZXB0aCBiZWxvdyB0aGlzIG1hcmssCisgKiB0aGUgb3ZlcmZsb3dlZCBmbGFnIGlzIHJlc2V0IHRvIDAuICovCisjZGVmaW5lIF9QeV9SZWN1cnNpb25MaW1pdExvd2VyV2F0ZXJNYXJrKGxpbWl0KSBcCisgICAgKCgobGltaXQpID4gMjAwKSBcCisgICAgICAgID8gKChsaW1pdCkgLSA1MCkgXAorICAgICAgICA6ICgzICogKChsaW1pdCkgPj4gMikpKQorCiAjZGVmaW5lIF9QeV9NYWtlRW5kUmVjQ2hlY2soeCkgXAotICAgICgtLSh4KSA8ICgoX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgPiAxMDApIFwKLSAgICAgICAgPyAoX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgLSA1MCkgXAotICAgICAgICA6ICgzICogKF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0ID4+IDIpKSkpCisgICAgKC0tKHgpIDwgX1B5X1JlY3Vyc2lvbkxpbWl0TG93ZXJXYXRlck1hcmsoX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQpKQogCiAjZGVmaW5lIFB5X0FMTE9XX1JFQ1VSU0lPTiBcCiAgIGRvIHsgdW5zaWduZWQgY2hhciBfb2xkID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+cmVjdXJzaW9uX2NyaXRpY2FsO1wKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29kZS5oIGIvSW5jbHVkZS9jb2RlLmgKaW5kZXggN2M3ZTViZi4uOGVjZjM4YSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb2RlLmgKKysrIGIvSW5jbHVkZS9jb2RlLmgKQEAgLTIxLDcgKzIxLDEyIEBACiAgICAgUHlPYmplY3QgKmNvX3Zhcm5hbWVzOwkvKiB0dXBsZSBvZiBzdHJpbmdzIChsb2NhbCB2YXJpYWJsZSBuYW1lcykgKi8KICAgICBQeU9iamVjdCAqY29fZnJlZXZhcnM7CS8qIHR1cGxlIG9mIHN0cmluZ3MgKGZyZWUgdmFyaWFibGUgbmFtZXMpICovCiAgICAgUHlPYmplY3QgKmNvX2NlbGx2YXJzOyAgICAgIC8qIHR1cGxlIG9mIHN0cmluZ3MgKGNlbGwgdmFyaWFibGUgbmFtZXMpICovCi0gICAgLyogVGhlIHJlc3QgZG9lc24ndCBjb3VudCBmb3IgaGFzaCBvciBjb21wYXJpc29ucyAqLworICAgIC8qIFRoZSByZXN0IGFyZW4ndCB1c2VkIGluIGVpdGhlciBoYXNoIG9yIGNvbXBhcmlzb25zLCBleGNlcHQgZm9yCisgICAgICAgY29fbmFtZSAodXNlZCBpbiBib3RoKSBhbmQgY29fZmlyc3RsaW5lbm8gKHVzZWQgb25seSBpbgorICAgICAgIGNvbXBhcmlzb25zKS4gIFRoaXMgaXMgZG9uZSB0byBwcmVzZXJ2ZSB0aGUgbmFtZSBhbmQgbGluZSBudW1iZXIKKyAgICAgICBmb3IgdHJhY2ViYWNrcyBhbmQgZGVidWdnZXJzOyBvdGhlcndpc2UsIGNvbnN0YW50IGRlLWR1cGxpY2F0aW9uCisgICAgICAgd291bGQgY29sbGFwc2UgaWRlbnRpY2FsIGZ1bmN0aW9ucy9sYW1iZGFzIGRlZmluZWQgb24gZGlmZmVyZW50IGxpbmVzLgorICAgICovCiAgICAgdW5zaWduZWQgY2hhciAqY29fY2VsbDJhcmc7IC8qIE1hcHMgY2VsbCB2YXJzIHdoaWNoIGFyZSBhcmd1bWVudHMuICovCiAgICAgUHlPYmplY3QgKmNvX2ZpbGVuYW1lOwkvKiB1bmljb2RlICh3aGVyZSBpdCB3YXMgbG9hZGVkIGZyb20pICovCiAgICAgUHlPYmplY3QgKmNvX25hbWU7CQkvKiB1bmljb2RlIChuYW1lLCBmb3IgcmVmZXJlbmNlKSAqLwpAQCAtNDYsNiArNTEsMTEgQEAKICovCiAjZGVmaW5lIENPX05PRlJFRSAgICAgICAweDAwNDAKIAorLyogVGhlIENPX0NPUk9VVElORSBmbGFnIGlzIHNldCBmb3IgY29yb3V0aW5lIGZ1bmN0aW9ucyAoZGVmaW5lZCB3aXRoCisgICBgYGFzeW5jIGRlZmBgIGtleXdvcmRzKSAqLworI2RlZmluZSBDT19DT1JPVVRJTkUgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgQ09fSVRFUkFCTEVfQ09ST1VUSU5FICAgMHgwMTAwCisKIC8qIFRoZXNlIGFyZSBubyBsb25nZXIgdXNlZC4gKi8KICNpZiAwCiAjZGVmaW5lIENPX0dFTkVSQVRPUl9BTExPV0VEICAgIDB4MTAwMApAQCAtNTcsNiArNjcsNyBAQAogI2RlZmluZSBDT19GVVRVUkVfVU5JQ09ERV9MSVRFUkFMUyAweDIwMDAwCiAKICNkZWZpbmUgQ09fRlVUVVJFX0JBUlJZX0FTX0JERkwgIDB4NDAwMDAKKyNkZWZpbmUgQ09fRlVUVVJFX0dFTkVSQVRPUl9TVE9QICAweDgwMDAwCiAKIC8qIFRoaXMgdmFsdWUgaXMgZm91bmQgaW4gdGhlIGNvX2NlbGwyYXJnIGFycmF5IHdoZW4gdGhlIGFzc29jaWF0ZWQgY2VsbAogICAgdmFyaWFibGUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbiBhcmd1bWVudC4gVGhlIG1heGltdW0gbnVtYmVyIG9mCkBAIC05NywxMiArMTA4LDIxIEBACiAgICAgICAgIGludCBhcF91cHBlcjsKIH0gUHlBZGRyUGFpcjsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogLyogVXBkYXRlICpib3VuZHMgdG8gZGVzY3JpYmUgdGhlIGZpcnN0IGFuZCBvbmUtcGFzdC10aGUtbGFzdCBpbnN0cnVjdGlvbnMgaW4gdGhlCiAgICBzYW1lIGxpbmUgYXMgbGFzdGkuICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGF0IGxpbmUuCiAqLwotI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIF9QeUNvZGVfQ2hlY2tMaW5lTnVtYmVyKFB5Q29kZU9iamVjdCogY28sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RpLCBQeUFkZHJQYWlyICpib3VuZHMpOworCisvKiBDcmVhdGUgYSBjb21wYXJhYmxlIGtleSB1c2VkIHRvIGNvbXBhcmUgY29uc3RhbnRzIHRha2luZyBpbiBhY2NvdW50IHRoZQorICogb2JqZWN0IHR5cGUuIEl0IGlzIHVzZWQgdG8gbWFrZSBzdXJlIHR5cGVzIGFyZSBub3QgY29lcmNlZCAoZS5nLiwgZmxvYXQgYW5kCisgKiBjb21wbGV4KSBfYW5kXyB0byBkaXN0aW5ndWlzaCAwLjAgZnJvbSAtMC4wIGUuZy4gb24gSUVFRSBwbGF0Zm9ybXMKKyAqCisgKiBSZXR1cm4gKHR5cGUob2JqKSwgb2JqLCAuLi4pOiBhIHR1cGxlIHdpdGggdmFyaWFibGUgc2l6ZSAoYXQgbGVhc3QgMiBpdGVtcykKKyAqIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBhbmQgdGhlIHZhbHVlLiBUaGUgdHlwZSBpcyB0aGUgZmlyc3QgaXRlbSB0byBub3QKKyAqIGNvbXBhcmUgYnl0ZXMgYW5kIHN0ciB3aGljaCBjYW4gcmFpc2UgYSBCeXRlc1dhcm5pbmcgZXhjZXB0aW9uLiAqLworUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeUNvZGVfQ29uc3RhbnRLZXkoUHlPYmplY3QgKm9iaik7CiAjZW5kaWYKIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5Q29kZV9PcHRpbWl6ZShQeU9iamVjdCAqY29kZSwgUHlPYmplY3QqIGNvbnN0cywKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29kZWNzLmggYi9JbmNsdWRlL2NvZGVjcy5oCmluZGV4IGRmY2ZhOWMuLmY4Mjc1YTEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29kZWNzLmgKKysrIGIvSW5jbHVkZS9jb2RlY3MuaApAQCAtNzEsNyArNzEsNyBAQAogICAgb2JqZWN0IGlzIHBhc3NlZCB0aHJvdWdoIHRoZSBlbmNvZGVyIGZ1bmN0aW9uIGZvdW5kIGZvciB0aGUgZ2l2ZW4KICAgIGVuY29kaW5nIHVzaW5nIHRoZSBlcnJvciBoYW5kbGluZyBtZXRob2QgZGVmaW5lZCBieSBlcnJvcnMuIGVycm9ycwogICAgbWF5IGJlIE5VTEwgdG8gdXNlIHRoZSBkZWZhdWx0IG1ldGhvZCBkZWZpbmVkIGZvciB0aGUgY29kZWMuCi0gICAKKwogICAgUmFpc2VzIGEgTG9va3VwRXJyb3IgaW4gY2FzZSBubyBlbmNvZGVyIGNhbiBiZSBmb3VuZC4KIAogICovCkBAIC04Nyw3ICs4Nyw3IEBACiAgICBvYmplY3QgaXMgcGFzc2VkIHRocm91Z2ggdGhlIGRlY29kZXIgZnVuY3Rpb24gZm91bmQgZm9yIHRoZSBnaXZlbgogICAgZW5jb2RpbmcgdXNpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG1ldGhvZCBkZWZpbmVkIGJ5IGVycm9ycy4gZXJyb3JzCiAgICBtYXkgYmUgTlVMTCB0byB1c2UgdGhlIGRlZmF1bHQgbWV0aG9kIGRlZmluZWQgZm9yIHRoZSBjb2RlYy4KLSAgIAorCiAgICBSYWlzZXMgYSBMb29rdXBFcnJvciBpbiBjYXNlIG5vIGVuY29kZXIgY2FuIGJlIGZvdW5kLgogCiAgKi8KQEAgLTE0NSw3ICsxNDUsNyBAQAogCiAKIAotLyogLS0tIENvZGVjIExvb2t1cCBBUElzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorLyogLS0tIENvZGVjIExvb2t1cCBBUElzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgIEFsbCBBUElzIHJldHVybiBhIGNvZGVjIG9iamVjdCB3aXRoIGluY3JlbWVudGVkIHJlZmNvdW50IGFuZCBhcmUKICAgIGJhc2VkIG9uIF9QeUNvZGVjX0xvb2t1cCgpLiAgVGhlIHNhbWUgY29tbWVudHMgdy9yIHRvIHRoZSBlbmNvZGluZwpAQCAtMjI1LDYgKzIyNSw5IEBACiAvKiByZXBsYWNlIHRoZSB1bmljb2RlIGVuY29kZSBlcnJvciB3aXRoIGJhY2tzbGFzaCBlc2NhcGVzIChceCwgXHUgYW5kIFxVKSAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMoUHlPYmplY3QgKmV4Yyk7CiAKKy8qIHJlcGxhY2UgdGhlIHVuaWNvZGUgZW5jb2RlIGVycm9yIHdpdGggYmFja3NsYXNoIGVzY2FwZXMgKFxOLCBceCwgXHUgYW5kIFxVKSAqLworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNvZGVjX05hbWVSZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpOworCiBQeUFQSV9EQVRBKGNvbnN0IGNoYXIgKikgUHlfaGV4ZGlnaXRzOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29tcGlsZS5oIGIvSW5jbHVkZS9jb21waWxlLmgKaW5kZXggYzY2NTBkNy4uZWNkOGRjMSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb21waWxlLmgKKysrIGIvSW5jbHVkZS9jb21waWxlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgRlVUVVJFX1BSSU5UX0ZVTkNUSU9OICJwcmludF9mdW5jdGlvbiIKICNkZWZpbmUgRlVUVVJFX1VOSUNPREVfTElURVJBTFMgInVuaWNvZGVfbGl0ZXJhbHMiCiAjZGVmaW5lIEZVVFVSRV9CQVJSWV9BU19CREZMICJiYXJyeV9hc19GTFVGTCIKKyNkZWZpbmUgRlVUVVJFX0dFTkVSQVRPUl9TVE9QICJnZW5lcmF0b3Jfc3RvcCIKIAogc3RydWN0IF9tb2Q7IC8qIERlY2xhcmUgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHR5cGUgKi8KICNkZWZpbmUgUHlBU1RfQ29tcGlsZShtb2QsIHMsIGYsIGFyKSBQeUFTVF9Db21waWxlRXgobW9kLCBzLCBmLCAtMSwgYXIpCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvbXBsZXhvYmplY3QuaCBiL0luY2x1ZGUvY29tcGxleG9iamVjdC5oCmluZGV4IDE5MzRmM2IuLmNiOGM1MmMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29tcGxleG9iamVjdC5oCisrKyBiL0luY2x1ZGUvY29tcGxleG9iamVjdC5oCkBAIC0xNCwyMSArMTQsMTMgQEAKIAogLyogT3BlcmF0aW9ucyBvbiBjb21wbGV4IG51bWJlcnMgZnJvbSBjb21wbGV4bW9kdWxlLmMgKi8KIAotI2RlZmluZSBjX3N1bSBfUHlfY19zdW0KLSNkZWZpbmUgY19kaWZmIF9QeV9jX2RpZmYKLSNkZWZpbmUgY19uZWcgX1B5X2NfbmVnCi0jZGVmaW5lIGNfcHJvZCBfUHlfY19wcm9kCi0jZGVmaW5lIGNfcXVvdCBfUHlfY19xdW90Ci0jZGVmaW5lIGNfcG93IF9QeV9jX3BvdwotI2RlZmluZSBjX2FicyBfUHlfY19hYnMKLQotUHlBUElfRlVOQyhQeV9jb21wbGV4KSBjX3N1bShQeV9jb21wbGV4LCBQeV9jb21wbGV4KTsKLVB5QVBJX0ZVTkMoUHlfY29tcGxleCkgY19kaWZmKFB5X2NvbXBsZXgsIFB5X2NvbXBsZXgpOwotUHlBUElfRlVOQyhQeV9jb21wbGV4KSBjX25lZyhQeV9jb21wbGV4KTsKLVB5QVBJX0ZVTkMoUHlfY29tcGxleCkgY19wcm9kKFB5X2NvbXBsZXgsIFB5X2NvbXBsZXgpOwotUHlBUElfRlVOQyhQeV9jb21wbGV4KSBjX3F1b3QoUHlfY29tcGxleCwgUHlfY29tcGxleCk7Ci1QeUFQSV9GVU5DKFB5X2NvbXBsZXgpIGNfcG93KFB5X2NvbXBsZXgsIFB5X2NvbXBsZXgpOwotUHlBUElfRlVOQyhkb3VibGUpIGNfYWJzKFB5X2NvbXBsZXgpOworUHlBUElfRlVOQyhQeV9jb21wbGV4KSBfUHlfY19zdW0oUHlfY29tcGxleCwgUHlfY29tcGxleCk7CitQeUFQSV9GVU5DKFB5X2NvbXBsZXgpIF9QeV9jX2RpZmYoUHlfY29tcGxleCwgUHlfY29tcGxleCk7CitQeUFQSV9GVU5DKFB5X2NvbXBsZXgpIF9QeV9jX25lZyhQeV9jb21wbGV4KTsKK1B5QVBJX0ZVTkMoUHlfY29tcGxleCkgX1B5X2NfcHJvZChQeV9jb21wbGV4LCBQeV9jb21wbGV4KTsKK1B5QVBJX0ZVTkMoUHlfY29tcGxleCkgX1B5X2NfcXVvdChQeV9jb21wbGV4LCBQeV9jb21wbGV4KTsKK1B5QVBJX0ZVTkMoUHlfY29tcGxleCkgX1B5X2NfcG93KFB5X2NvbXBsZXgsIFB5X2NvbXBsZXgpOworUHlBUElfRlVOQyhkb3VibGUpIF9QeV9jX2FicyhQeV9jb21wbGV4KTsKICNlbmRpZgogCiAvKiBDb21wbGV4IG9iamVjdCBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvZGljdG9iamVjdC5oIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKaW5kZXggZWYxMjJiZC4uYmE5MGFhZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9kaWN0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9kaWN0b2JqZWN0LmgKQEAgLTI3LDYgKzI3LDExIEBACiAgICAgUHlPYmplY3QgKiptYV92YWx1ZXM7CiB9IFB5RGljdE9iamVjdDsKIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeURpY3RPYmplY3QgKmR2X2RpY3Q7Cit9IF9QeURpY3RWaWV3T2JqZWN0OworCiAjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RGljdF9UeXBlOwpAQCAtNDAsOSArNDUsOSBAQAogI2RlZmluZSBQeURpY3RfQ2hlY2sob3ApIFwKICAgICAgICAgICAgICAgICAgUHlUeXBlX0Zhc3RTdWJjbGFzcyhQeV9UWVBFKG9wKSwgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTKQogI2RlZmluZSBQeURpY3RfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeURpY3RfVHlwZSkKLSNkZWZpbmUgUHlEaWN0S2V5c19DaGVjayhvcCkgKFB5X1RZUEUob3ApID09ICZQeURpY3RLZXlzX1R5cGUpCi0jZGVmaW5lIFB5RGljdEl0ZW1zX0NoZWNrKG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5RGljdEl0ZW1zX1R5cGUpCi0jZGVmaW5lIFB5RGljdFZhbHVlc19DaGVjayhvcCkgKFB5X1RZUEUob3ApID09ICZQeURpY3RWYWx1ZXNfVHlwZSkKKyNkZWZpbmUgUHlEaWN0S2V5c19DaGVjayhvcCkgUHlPYmplY3RfVHlwZUNoZWNrKG9wLCAmUHlEaWN0S2V5c19UeXBlKQorI2RlZmluZSBQeURpY3RJdGVtc19DaGVjayhvcCkgUHlPYmplY3RfVHlwZUNoZWNrKG9wLCAmUHlEaWN0SXRlbXNfVHlwZSkKKyNkZWZpbmUgUHlEaWN0VmFsdWVzX0NoZWNrKG9wKSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsICZQeURpY3RWYWx1ZXNfVHlwZSkKIC8qIFRoaXMgZXhjbHVkZXMgVmFsdWVzLCBzaW5jZSB0aGV5IGFyZSBub3Qgc2V0cy4gKi8KICMgZGVmaW5lIFB5RGljdFZpZXdTZXRfQ2hlY2sob3ApIFwKICAgICAoUHlEaWN0S2V5c19DaGVjayhvcCkgfHwgUHlEaWN0SXRlbXNfQ2hlY2sob3ApKQpAQCAtNTAsNiArNTUsMTAgQEAKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfTmV3KHZvaWQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfR2V0SXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0dldEl0ZW1fS25vd25IYXNoKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoKTsKKyNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0dldEl0ZW1JZFdpdGhFcnJvcihQeU9iamVjdCAqZHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqa2V5KTsKQEAgLTU4LDcgKzY3LDE1IEBACiAgICAgUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdG9iaik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfU2V0SXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICppdGVtKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlEaWN0X1NldEl0ZW1fS25vd25IYXNoKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtLCBQeV9oYXNoX3QgaGFzaCk7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeURpY3RfRGVsSXRlbV9Lbm93bkhhc2goUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gpOworI2VuZGlmCiBQeUFQSV9GVU5DKHZvaWQpIFB5RGljdF9DbGVhcihQeU9iamVjdCAqbXApOwogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9OZXh0KAogICAgIFB5T2JqZWN0ICptcCwgUHlfc3NpemVfdCAqcG9zLCBQeU9iamVjdCAqKmtleSwgUHlPYmplY3QgKip2YWx1ZSk7CkBAIC02Nyw2ICs4NCw3IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0dlbmVyaWNHZXREaWN0KFB5T2JqZWN0ICosIHZvaWQgKik7CiBQeUFQSV9GVU5DKGludCkgX1B5RGljdF9OZXh0KAogICAgIFB5T2JqZWN0ICptcCwgUHlfc3NpemVfdCAqcG9zLCBQeU9iamVjdCAqKmtleSwgUHlPYmplY3QgKip2YWx1ZSwgUHlfaGFzaF90ICpoYXNoKTsKK1B5T2JqZWN0ICpfUHlEaWN0Vmlld19OZXcoUHlPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICopOwogI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGljdF9LZXlzKFB5T2JqZWN0ICptcCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGljdF9WYWx1ZXMoUHlPYmplY3QgKm1wKTsKQEAgLTgwLDYgKzk4LDkgQEAKIFB5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9NYXliZVVudHJhY2soUHlPYmplY3QgKm1wKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlEaWN0X0hhc09ubHlTdHJpbmdLZXlzKFB5T2JqZWN0ICptcCk7CiBQeV9zc2l6ZV90IF9QeURpY3RfS2V5c1NpemUoUHlEaWN0S2V5c09iamVjdCAqa2V5cyk7CitQeV9zc2l6ZV90IF9QeURpY3RfU2l6ZU9mKFB5RGljdE9iamVjdCAqKTsKK1B5T2JqZWN0ICpfUHlEaWN0X1BvcChQeURpY3RPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitQeU9iamVjdCAqX1B5RGljdF9Gcm9tS2V5cyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKICNkZWZpbmUgX1B5RGljdF9IYXNTcGxpdFRhYmxlKGQpICgoZCktPm1hX3ZhbHVlcyAhPSBOVUxMKQogCiBQeUFQSV9GVU5DKGludCkgUHlEaWN0X0NsZWFyRnJlZUxpc3Qodm9pZCk7CkBAIC05Nyw2ICsxMTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm90aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3ZlcnJpZGUpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RWaWV3X0ludGVyc2VjdChQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKm90aGVyKTsKKyNlbmRpZgorCiAvKiBQeURpY3RfTWVyZ2VGcm9tU2VxMiB1cGRhdGVzL21lcmdlcyBmcm9tIGFuIGl0ZXJhYmxlIG9iamVjdCBwcm9kdWNpbmcKICAgIGl0ZXJhYmxlIG9iamVjdHMgb2YgbGVuZ3RoIDIuICBJZiBvdmVycmlkZSBpcyB0cnVlLCB0aGUgbGFzdCBvY2N1cnJlbmNlCiAgICBvZiBhIGtleSB3aW5zLCBlbHNlIHRoZSBmaXJzdC4gIFRoZSBQeXRob24gZGljdCBjb25zdHJ1Y3RvciBkaWN0KHNlcTIpCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZpbGVvYmplY3QuaCBiL0luY2x1ZGUvZmlsZW9iamVjdC5oCmluZGV4IDA5Mzk3NDQuLjAzMTU1ZDMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZmlsZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZmlsZW9iamVjdC5oCkBAIC0zMiwxNyArMzIsNiBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfTmV3U3RkUHJpbnRlcihpbnQpOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U3RkUHJpbnRlcl9UeXBlOwotCi0jaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwCi0vKiBBIHJvdXRpbmUgdG8gY2hlY2sgaWYgYSBmaWxlIGRlc2NyaXB0b3IgaXMgdmFsaWQgb24gV2luZG93cy4gIFJldHVybnMgMAotICogYW5kIHNldHMgZXJybm8gdG8gRUJBREYgaWYgaXQgaXNuJ3QuICBUaGlzIGlzIHRvIGF2b2lkIEFzc2VydGlvbnMKLSAqIGZyb20gdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlIFdpbmRvd3MgQ1JUIGJlZ2lubmluZyB3aXRoCi0gKiBWaXN1YWwgU3R1ZGlvIDIwMDUKLSAqLwotaW50IF9QeVZlcmlmeV9mZChpbnQgZmQpOwotI2Vsc2UKLSNkZWZpbmUgX1B5VmVyaWZ5X2ZkKEEpICgxKSAvKiBkdW1teSAqLwotI2VuZGlmCiAjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogLyogQSByb3V0aW5lIHRvIGNoZWNrIGlmIGEgZmlsZSBkZXNjcmlwdG9yIGNhbiBiZSBzZWxlY3QoKS1lZC4gKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvZmlsZXV0aWxzLmggYi9JbmNsdWRlL2ZpbGV1dGlscy5oCmluZGV4IGU5YmFkODAuLmI0YTY4M2MgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZmlsZXV0aWxzLmgKKysrIGIvSW5jbHVkZS9maWxldXRpbHMuaApAQCAtNywzMCArNyw1OSBAQAogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeV9kZXZpY2VfZW5jb2RpbmcoaW50KTsKIAotUHlBUElfRlVOQyh3Y2hhcl90ICopIF9QeV9jaGFyMndjaGFyKAorUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0RlY29kZUxvY2FsZSgKICAgICBjb25zdCBjaGFyICphcmcsCiAgICAgc2l6ZV90ICpzaXplKTsKIAotUHlBUElfRlVOQyhjaGFyKikgX1B5X3djaGFyMmNoYXIoCitQeUFQSV9GVU5DKGNoYXIqKSBQeV9FbmNvZGVMb2NhbGUoCiAgICAgY29uc3Qgd2NoYXJfdCAqdGV4dCwKICAgICBzaXplX3QgKmVycm9yX3Bvcyk7CiAKLSNpZiBkZWZpbmVkKEhBVkVfU1RBVCkgJiYgIWRlZmluZWQoTVNfV0lORE9XUykKLVB5QVBJX0ZVTkMoaW50KSBfUHlfd3N0YXQoCi0gICAgY29uc3Qgd2NoYXJfdCogcGF0aCwKLSAgICBzdHJ1Y3Qgc3RhdCAqYnVmKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKworI2lmZGVmIE1TX1dJTkRPV1MKK3N0cnVjdCBfUHlfc3RhdF9zdHJ1Y3QgeworICAgIHVuc2lnbmVkIGxvbmcgc3RfZGV2OworICAgIF9faW50NjQgc3RfaW5vOworICAgIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisgICAgaW50IHN0X25saW5rOworICAgIGludCBzdF91aWQ7CisgICAgaW50IHN0X2dpZDsKKyAgICB1bnNpZ25lZCBsb25nIHN0X3JkZXY7CisgICAgX19pbnQ2NCBzdF9zaXplOworICAgIHRpbWVfdCBzdF9hdGltZTsKKyAgICBpbnQgc3RfYXRpbWVfbnNlYzsKKyAgICB0aW1lX3Qgc3RfbXRpbWU7CisgICAgaW50IHN0X210aW1lX25zZWM7CisgICAgdGltZV90IHN0X2N0aW1lOworICAgIGludCBzdF9jdGltZV9uc2VjOworICAgIHVuc2lnbmVkIGxvbmcgc3RfZmlsZV9hdHRyaWJ1dGVzOworfTsKKyNlbHNlCisjICBkZWZpbmUgX1B5X3N0YXRfc3RydWN0IHN0YXQKICNlbmRpZgogCi0jaWZkZWYgSEFWRV9TVEFUCitQeUFQSV9GVU5DKGludCkgX1B5X2ZzdGF0KAorICAgIGludCBmZCwKKyAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0ICpzdGF0dXMpOworCitQeUFQSV9GVU5DKGludCkgX1B5X2ZzdGF0X25vcmFpc2UoCisgICAgaW50IGZkLAorICAgIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3QgKnN0YXR1cyk7CisjZW5kaWYgICAvKiBQeV9MSU1JVEVEX0FQSSAqLworCiBQeUFQSV9GVU5DKGludCkgX1B5X3N0YXQoCiAgICAgUHlPYmplY3QgKnBhdGgsCi0gICAgc3RydWN0IHN0YXQgKnN0YXRidWYpOwotI2VuZGlmCisgICAgc3RydWN0IHN0YXQgKnN0YXR1cyk7CiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoaW50KSBfUHlfb3BlbigKICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKICAgICBpbnQgZmxhZ3MpOworCitQeUFQSV9GVU5DKGludCkgX1B5X29wZW5fbm9yYWlzZSgKKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICBpbnQgZmxhZ3MpOwogI2VuZGlmCiAKIFB5QVBJX0ZVTkMoRklMRSAqKSBfUHlfd2ZvcGVuKApAQCAtNDUsNiArNzQsMjEgQEAKICAgICBQeU9iamVjdCAqcGF0aCwKICAgICBjb25zdCBjaGFyICptb2RlKTsKIAorUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfcmVhZCgKKyAgICBpbnQgZmQsCisgICAgdm9pZCAqYnVmLAorICAgIHNpemVfdCBjb3VudCk7CisKK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5X3dyaXRlKAorICAgIGludCBmZCwKKyAgICBjb25zdCB2b2lkICpidWYsCisgICAgc2l6ZV90IGNvdW50KTsKKworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfd3JpdGVfbm9yYWlzZSgKKyAgICBpbnQgZmQsCisgICAgY29uc3Qgdm9pZCAqYnVmLAorICAgIHNpemVfdCBjb3VudCk7CisKICNpZmRlZiBIQVZFX1JFQURMSU5LCiBQeUFQSV9GVU5DKGludCkgX1B5X3dyZWFkbGluaygKICAgICBjb25zdCB3Y2hhcl90ICpwYXRoLApAQCAtNzAsOCArMTE0LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzKTsKIAogUHlBUElfRlVOQyhpbnQpIF9QeV9kdXAoaW50IGZkKTsKKworI2lmbmRlZiBNU19XSU5ET1dTCitQeUFQSV9GVU5DKGludCkgX1B5X2dldF9ibG9ja2luZyhpbnQgZmQpOworCitQeUFQSV9GVU5DKGludCkgX1B5X3NldF9ibG9ja2luZyhpbnQgZmQsIGludCBibG9ja2luZyk7CisjZW5kaWYgICAvKiAhTVNfV0lORE9XUyAqLworCisjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwICYmIF9NU0NfVkVSIDwgMTkwMAorLyogQSByb3V0aW5lIHRvIGNoZWNrIGlmIGEgZmlsZSBkZXNjcmlwdG9yIGlzIHZhbGlkIG9uIFdpbmRvd3MuICBSZXR1cm5zIDAKKyAqIGFuZCBzZXRzIGVycm5vIHRvIEVCQURGIGlmIGl0IGlzbid0LiAgVGhpcyBpcyB0byBhdm9pZCBBc3NlcnRpb25zCisgKiBmcm9tIHZhcmlvdXMgZnVuY3Rpb25zIGluIHRoZSBXaW5kb3dzIENSVCBiZWdpbm5pbmcgd2l0aAorICogVmlzdWFsIFN0dWRpbyAyMDA1CisgKi8KK2ludCBfUHlWZXJpZnlfZmQoaW50IGZkKTsKKworI2Vsc2UKKyNkZWZpbmUgX1B5VmVyaWZ5X2ZkKEEpICgxKSAvKiBkdW1teSAqLwogI2VuZGlmCiAKKyNlbmRpZiAgIC8qIFB5X0xJTUlURURfQVBJICovCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmggYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKaW5kZXggOTY2ZmYxZi4uMDBjNTA5MyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaApAQCAtMjgsMTMgKzI4LDEzIEBACiAgICAgUHlPYmplY3QgKipmX3N0YWNrdG9wOwogICAgIFB5T2JqZWN0ICpmX3RyYWNlOyAgICAgICAgICAvKiBUcmFjZSBmdW5jdGlvbiAqLwogCi0gICAgICAgIC8qIEluIGEgZ2VuZXJhdG9yLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc3dhcCBiZXR3ZWVuIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgc3RhdGUgaW5zaWRlIHRoZSBnZW5lcmF0b3IgYW5kIHRoZSBleGNlcHRpb24gc3RhdGUgb2YgdGhlIGNhbGxpbmcKLSAgICAgICAgICAgZnJhbWUgKHdoaWNoIHNob3VsZG4ndCBiZSBpbXBhY3RlZCB3aGVuIHRoZSBnZW5lcmF0b3IgInlpZWxkcyIKLSAgICAgICAgICAgZnJvbSBhbiBleGNlcHQgaGFuZGxlcikuCi0gICAgICAgICAgIFRoZXNlIHRocmVlIGZpZWxkcyBleGlzdCBleGFjdGx5IGZvciB0aGF0LCBhbmQgYXJlIHVudXNlZCBmb3IKLSAgICAgICAgICAgbm9uLWdlbmVyYXRvciBmcmFtZXMuIFNlZSB0aGUgc2F2ZV9leGNfc3RhdGUgYW5kIHN3YXBfZXhjX3N0YXRlCi0gICAgICAgICAgIGZ1bmN0aW9ucyBpbiBjZXZhbC5jIGZvciBkZXRhaWxzIG9mIHRoZWlyIHVzZS4gKi8KKyAgICAvKiBJbiBhIGdlbmVyYXRvciwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIHN3YXAgYmV0d2VlbiB0aGUgZXhjZXB0aW9uCisgICAgICAgc3RhdGUgaW5zaWRlIHRoZSBnZW5lcmF0b3IgYW5kIHRoZSBleGNlcHRpb24gc3RhdGUgb2YgdGhlIGNhbGxpbmcKKyAgICAgICBmcmFtZSAod2hpY2ggc2hvdWxkbid0IGJlIGltcGFjdGVkIHdoZW4gdGhlIGdlbmVyYXRvciAieWllbGRzIgorICAgICAgIGZyb20gYW4gZXhjZXB0IGhhbmRsZXIpLgorICAgICAgIFRoZXNlIHRocmVlIGZpZWxkcyBleGlzdCBleGFjdGx5IGZvciB0aGF0LCBhbmQgYXJlIHVudXNlZCBmb3IKKyAgICAgICBub24tZ2VuZXJhdG9yIGZyYW1lcy4gU2VlIHRoZSBzYXZlX2V4Y19zdGF0ZSBhbmQgc3dhcF9leGNfc3RhdGUKKyAgICAgICBmdW5jdGlvbnMgaW4gY2V2YWwuYyBmb3IgZGV0YWlscyBvZiB0aGVpciB1c2UuICovCiAgICAgUHlPYmplY3QgKmZfZXhjX3R5cGUsICpmX2V4Y192YWx1ZSwgKmZfZXhjX3RyYWNlYmFjazsKICAgICAvKiBCb3Jyb3dlZCByZWZlcmVuY2UgdG8gYSBnZW5lcmF0b3IsIG9yIE5VTEwgKi8KICAgICBQeU9iamVjdCAqZl9nZW47CmRpZmYgLS1naXQgYS9JbmNsdWRlL2dlbm9iamVjdC5oIGIvSW5jbHVkZS9nZW5vYmplY3QuaAppbmRleCA2NWYxZWNmLi4xZmYzMmE4IDEwMDY0NAotLS0gYS9JbmNsdWRlL2dlbm9iamVjdC5oCisrKyBiL0luY2x1ZGUvZ2Vub2JqZWN0LmgKQEAgLTEwLDIxICsxMCwyNiBAQAogCiBzdHJ1Y3QgX2ZyYW1lOyAvKiBBdm9pZCBpbmNsdWRpbmcgZnJhbWVvYmplY3QuaCAqLwogCisvKiBfUHlHZW5PYmplY3RfSEVBRCBkZWZpbmVzIHRoZSBpbml0aWFsIHNlZ21lbnQgb2YgZ2VuZXJhdG9yCisgICBhbmQgY29yb3V0aW5lIG9iamVjdHMuICovCisjZGVmaW5lIF9QeUdlbk9iamVjdF9IRUFEKHByZWZpeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFB5T2JqZWN0X0hFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBOb3RlOiBnaV9mcmFtZSBjYW4gYmUgTlVMTCBpZiB0aGUgZ2VuZXJhdG9yIGlzICJmaW5pc2hlZCIgKi8gICAgICAgICBcCisgICAgc3RydWN0IF9mcmFtZSAqcHJlZml4IyNfZnJhbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC8qIFRydWUgaWYgZ2VuZXJhdG9yIGlzIGJlaW5nIGV4ZWN1dGVkLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjaGFyIHByZWZpeCMjX3J1bm5pbmc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogVGhlIGNvZGUgb2JqZWN0IGJhY2tpbmcgdGhlIGdlbmVyYXRvciAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFB5T2JqZWN0ICpwcmVmaXgjI19jb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUHlPYmplY3QgKnByZWZpeCMjX3dlYWtyZWZsaXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC8qIE5hbWUgb2YgdGhlIGdlbmVyYXRvci4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQeU9iamVjdCAqcHJlZml4IyNfbmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogUXVhbGlmaWVkIG5hbWUgb2YgdGhlIGdlbmVyYXRvci4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFB5T2JqZWN0ICpwcmVmaXgjI19xdWFsbmFtZTsKKwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIFB5T2JqZWN0X0hFQUQKICAgICAvKiBUaGUgZ2lfIHByZWZpeCBpcyBpbnRlbmRlZCB0byByZW1pbmQgb2YgZ2VuZXJhdG9yLWl0ZXJhdG9yLiAqLwotCi0gICAgLyogTm90ZTogZ2lfZnJhbWUgY2FuIGJlIE5VTEwgaWYgdGhlIGdlbmVyYXRvciBpcyAiZmluaXNoZWQiICovCi0gICAgc3RydWN0IF9mcmFtZSAqZ2lfZnJhbWU7Ci0KLSAgICAvKiBUcnVlIGlmIGdlbmVyYXRvciBpcyBiZWluZyBleGVjdXRlZC4gKi8KLSAgICBjaGFyIGdpX3J1bm5pbmc7Ci0KLSAgICAvKiBUaGUgY29kZSBvYmplY3QgYmFja2luZyB0aGUgZ2VuZXJhdG9yICovCi0gICAgUHlPYmplY3QgKmdpX2NvZGU7Ci0KLSAgICAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlLiAqLwotICAgIFB5T2JqZWN0ICpnaV93ZWFrcmVmbGlzdDsKKyAgICBfUHlHZW5PYmplY3RfSEVBRChnaSkKIH0gUHlHZW5PYmplY3Q7CiAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUdlbl9UeXBlOwpAQCAtMzMsMTEgKzM4LDMyIEBACiAjZGVmaW5lIFB5R2VuX0NoZWNrRXhhY3Qob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlHZW5fVHlwZSkKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUdlbl9OZXcoc3RydWN0IF9mcmFtZSAqKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlHZW5fTmV3V2l0aFF1YWxOYW1lKHN0cnVjdCBfZnJhbWUgKiwKKyAgICBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnF1YWxuYW1lKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUdlbl9OZWVkc0ZpbmFsaXppbmcoUHlHZW5PYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgX1B5R2VuX0ZldGNoU3RvcEl0ZXJhdGlvblZhbHVlKFB5T2JqZWN0ICoqKTsKIFB5T2JqZWN0ICpfUHlHZW5fU2VuZChQeUdlbk9iamVjdCAqLCBQeU9iamVjdCAqKTsKK1B5T2JqZWN0ICpfUHlHZW5feWYoUHlHZW5PYmplY3QgKik7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUdlbl9GaW5hbGl6ZShQeU9iamVjdCAqc2VsZik7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBfUHlHZW5PYmplY3RfSEVBRChjcikKK30gUHlDb3JvT2JqZWN0OworCitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlDb3JvX1R5cGU7CitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgX1B5Q29yb1dyYXBwZXJfVHlwZTsKKworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIF9QeUFJdGVyV3JhcHBlcl9UeXBlOworUHlPYmplY3QgKl9QeUFJdGVyV3JhcHBlcl9OZXcoUHlPYmplY3QgKmFpdGVyKTsKKworI2RlZmluZSBQeUNvcm9fQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeUNvcm9fVHlwZSkKK1B5T2JqZWN0ICpfUHlDb3JvX0dldEF3YWl0YWJsZUl0ZXIoUHlPYmplY3QgKm8pOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNvcm9fTmV3KHN0cnVjdCBfZnJhbWUgKiwKKyAgICBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnF1YWxuYW1lKTsKKyNlbmRpZgorCisjdW5kZWYgX1B5R2VuT2JqZWN0X0hFQUQKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2dyYW1pbml0LmggYi9JbmNsdWRlL2dyYW1pbml0LmgKaW5kZXggM2VjOTQ5YS4uZDAzMGJjMyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ncmFtaW5pdC5oCisrKyBiL0luY2x1ZGUvZ3JhbWluaXQuaApAQCAtNiw3OSArNiw4MiBAQAogI2RlZmluZSBkZWNvcmF0b3IgMjU5CiAjZGVmaW5lIGRlY29yYXRvcnMgMjYwCiAjZGVmaW5lIGRlY29yYXRlZCAyNjEKLSNkZWZpbmUgZnVuY2RlZiAyNjIKLSNkZWZpbmUgcGFyYW1ldGVycyAyNjMKLSNkZWZpbmUgdHlwZWRhcmdzbGlzdCAyNjQKLSNkZWZpbmUgdGZwZGVmIDI2NQotI2RlZmluZSB2YXJhcmdzbGlzdCAyNjYKLSNkZWZpbmUgdmZwZGVmIDI2NwotI2RlZmluZSBzdG10IDI2OAotI2RlZmluZSBzaW1wbGVfc3RtdCAyNjkKLSNkZWZpbmUgc21hbGxfc3RtdCAyNzAKLSNkZWZpbmUgZXhwcl9zdG10IDI3MQotI2RlZmluZSB0ZXN0bGlzdF9zdGFyX2V4cHIgMjcyCi0jZGVmaW5lIGF1Z2Fzc2lnbiAyNzMKLSNkZWZpbmUgZGVsX3N0bXQgMjc0Ci0jZGVmaW5lIHBhc3Nfc3RtdCAyNzUKLSNkZWZpbmUgZmxvd19zdG10IDI3NgotI2RlZmluZSBicmVha19zdG10IDI3NwotI2RlZmluZSBjb250aW51ZV9zdG10IDI3OAotI2RlZmluZSByZXR1cm5fc3RtdCAyNzkKLSNkZWZpbmUgeWllbGRfc3RtdCAyODAKLSNkZWZpbmUgcmFpc2Vfc3RtdCAyODEKLSNkZWZpbmUgaW1wb3J0X3N0bXQgMjgyCi0jZGVmaW5lIGltcG9ydF9uYW1lIDI4MwotI2RlZmluZSBpbXBvcnRfZnJvbSAyODQKLSNkZWZpbmUgaW1wb3J0X2FzX25hbWUgMjg1Ci0jZGVmaW5lIGRvdHRlZF9hc19uYW1lIDI4NgotI2RlZmluZSBpbXBvcnRfYXNfbmFtZXMgMjg3Ci0jZGVmaW5lIGRvdHRlZF9hc19uYW1lcyAyODgKLSNkZWZpbmUgZG90dGVkX25hbWUgMjg5Ci0jZGVmaW5lIGdsb2JhbF9zdG10IDI5MAotI2RlZmluZSBub25sb2NhbF9zdG10IDI5MQotI2RlZmluZSBhc3NlcnRfc3RtdCAyOTIKLSNkZWZpbmUgY29tcG91bmRfc3RtdCAyOTMKLSNkZWZpbmUgaWZfc3RtdCAyOTQKLSNkZWZpbmUgd2hpbGVfc3RtdCAyOTUKLSNkZWZpbmUgZm9yX3N0bXQgMjk2Ci0jZGVmaW5lIHRyeV9zdG10IDI5NwotI2RlZmluZSB3aXRoX3N0bXQgMjk4Ci0jZGVmaW5lIHdpdGhfaXRlbSAyOTkKLSNkZWZpbmUgZXhjZXB0X2NsYXVzZSAzMDAKLSNkZWZpbmUgc3VpdGUgMzAxCi0jZGVmaW5lIHRlc3QgMzAyCi0jZGVmaW5lIHRlc3Rfbm9jb25kIDMwMwotI2RlZmluZSBsYW1iZGVmIDMwNAotI2RlZmluZSBsYW1iZGVmX25vY29uZCAzMDUKLSNkZWZpbmUgb3JfdGVzdCAzMDYKLSNkZWZpbmUgYW5kX3Rlc3QgMzA3Ci0jZGVmaW5lIG5vdF90ZXN0IDMwOAotI2RlZmluZSBjb21wYXJpc29uIDMwOQotI2RlZmluZSBjb21wX29wIDMxMAotI2RlZmluZSBzdGFyX2V4cHIgMzExCi0jZGVmaW5lIGV4cHIgMzEyCi0jZGVmaW5lIHhvcl9leHByIDMxMwotI2RlZmluZSBhbmRfZXhwciAzMTQKLSNkZWZpbmUgc2hpZnRfZXhwciAzMTUKLSNkZWZpbmUgYXJpdGhfZXhwciAzMTYKLSNkZWZpbmUgdGVybSAzMTcKLSNkZWZpbmUgZmFjdG9yIDMxOAotI2RlZmluZSBwb3dlciAzMTkKLSNkZWZpbmUgYXRvbSAzMjAKLSNkZWZpbmUgdGVzdGxpc3RfY29tcCAzMjEKLSNkZWZpbmUgdHJhaWxlciAzMjIKLSNkZWZpbmUgc3Vic2NyaXB0bGlzdCAzMjMKLSNkZWZpbmUgc3Vic2NyaXB0IDMyNAotI2RlZmluZSBzbGljZW9wIDMyNQotI2RlZmluZSBleHBybGlzdCAzMjYKLSNkZWZpbmUgdGVzdGxpc3QgMzI3Ci0jZGVmaW5lIGRpY3RvcnNldG1ha2VyIDMyOAotI2RlZmluZSBjbGFzc2RlZiAzMjkKLSNkZWZpbmUgYXJnbGlzdCAzMzAKLSNkZWZpbmUgYXJndW1lbnQgMzMxCi0jZGVmaW5lIGNvbXBfaXRlciAzMzIKLSNkZWZpbmUgY29tcF9mb3IgMzMzCi0jZGVmaW5lIGNvbXBfaWYgMzM0Ci0jZGVmaW5lIGVuY29kaW5nX2RlY2wgMzM1Ci0jZGVmaW5lIHlpZWxkX2V4cHIgMzM2Ci0jZGVmaW5lIHlpZWxkX2FyZyAzMzcKKyNkZWZpbmUgYXN5bmNfZnVuY2RlZiAyNjIKKyNkZWZpbmUgZnVuY2RlZiAyNjMKKyNkZWZpbmUgcGFyYW1ldGVycyAyNjQKKyNkZWZpbmUgdHlwZWRhcmdzbGlzdCAyNjUKKyNkZWZpbmUgdGZwZGVmIDI2NgorI2RlZmluZSB2YXJhcmdzbGlzdCAyNjcKKyNkZWZpbmUgdmZwZGVmIDI2OAorI2RlZmluZSBzdG10IDI2OQorI2RlZmluZSBzaW1wbGVfc3RtdCAyNzAKKyNkZWZpbmUgc21hbGxfc3RtdCAyNzEKKyNkZWZpbmUgZXhwcl9zdG10IDI3MgorI2RlZmluZSB0ZXN0bGlzdF9zdGFyX2V4cHIgMjczCisjZGVmaW5lIGF1Z2Fzc2lnbiAyNzQKKyNkZWZpbmUgZGVsX3N0bXQgMjc1CisjZGVmaW5lIHBhc3Nfc3RtdCAyNzYKKyNkZWZpbmUgZmxvd19zdG10IDI3NworI2RlZmluZSBicmVha19zdG10IDI3OAorI2RlZmluZSBjb250aW51ZV9zdG10IDI3OQorI2RlZmluZSByZXR1cm5fc3RtdCAyODAKKyNkZWZpbmUgeWllbGRfc3RtdCAyODEKKyNkZWZpbmUgcmFpc2Vfc3RtdCAyODIKKyNkZWZpbmUgaW1wb3J0X3N0bXQgMjgzCisjZGVmaW5lIGltcG9ydF9uYW1lIDI4NAorI2RlZmluZSBpbXBvcnRfZnJvbSAyODUKKyNkZWZpbmUgaW1wb3J0X2FzX25hbWUgMjg2CisjZGVmaW5lIGRvdHRlZF9hc19uYW1lIDI4NworI2RlZmluZSBpbXBvcnRfYXNfbmFtZXMgMjg4CisjZGVmaW5lIGRvdHRlZF9hc19uYW1lcyAyODkKKyNkZWZpbmUgZG90dGVkX25hbWUgMjkwCisjZGVmaW5lIGdsb2JhbF9zdG10IDI5MQorI2RlZmluZSBub25sb2NhbF9zdG10IDI5MgorI2RlZmluZSBhc3NlcnRfc3RtdCAyOTMKKyNkZWZpbmUgY29tcG91bmRfc3RtdCAyOTQKKyNkZWZpbmUgYXN5bmNfc3RtdCAyOTUKKyNkZWZpbmUgaWZfc3RtdCAyOTYKKyNkZWZpbmUgd2hpbGVfc3RtdCAyOTcKKyNkZWZpbmUgZm9yX3N0bXQgMjk4CisjZGVmaW5lIHRyeV9zdG10IDI5OQorI2RlZmluZSB3aXRoX3N0bXQgMzAwCisjZGVmaW5lIHdpdGhfaXRlbSAzMDEKKyNkZWZpbmUgZXhjZXB0X2NsYXVzZSAzMDIKKyNkZWZpbmUgc3VpdGUgMzAzCisjZGVmaW5lIHRlc3QgMzA0CisjZGVmaW5lIHRlc3Rfbm9jb25kIDMwNQorI2RlZmluZSBsYW1iZGVmIDMwNgorI2RlZmluZSBsYW1iZGVmX25vY29uZCAzMDcKKyNkZWZpbmUgb3JfdGVzdCAzMDgKKyNkZWZpbmUgYW5kX3Rlc3QgMzA5CisjZGVmaW5lIG5vdF90ZXN0IDMxMAorI2RlZmluZSBjb21wYXJpc29uIDMxMQorI2RlZmluZSBjb21wX29wIDMxMgorI2RlZmluZSBzdGFyX2V4cHIgMzEzCisjZGVmaW5lIGV4cHIgMzE0CisjZGVmaW5lIHhvcl9leHByIDMxNQorI2RlZmluZSBhbmRfZXhwciAzMTYKKyNkZWZpbmUgc2hpZnRfZXhwciAzMTcKKyNkZWZpbmUgYXJpdGhfZXhwciAzMTgKKyNkZWZpbmUgdGVybSAzMTkKKyNkZWZpbmUgZmFjdG9yIDMyMAorI2RlZmluZSBwb3dlciAzMjEKKyNkZWZpbmUgYXRvbV9leHByIDMyMgorI2RlZmluZSBhdG9tIDMyMworI2RlZmluZSB0ZXN0bGlzdF9jb21wIDMyNAorI2RlZmluZSB0cmFpbGVyIDMyNQorI2RlZmluZSBzdWJzY3JpcHRsaXN0IDMyNgorI2RlZmluZSBzdWJzY3JpcHQgMzI3CisjZGVmaW5lIHNsaWNlb3AgMzI4CisjZGVmaW5lIGV4cHJsaXN0IDMyOQorI2RlZmluZSB0ZXN0bGlzdCAzMzAKKyNkZWZpbmUgZGljdG9yc2V0bWFrZXIgMzMxCisjZGVmaW5lIGNsYXNzZGVmIDMzMgorI2RlZmluZSBhcmdsaXN0IDMzMworI2RlZmluZSBhcmd1bWVudCAzMzQKKyNkZWZpbmUgY29tcF9pdGVyIDMzNQorI2RlZmluZSBjb21wX2ZvciAzMzYKKyNkZWZpbmUgY29tcF9pZiAzMzcKKyNkZWZpbmUgZW5jb2RpbmdfZGVjbCAzMzgKKyNkZWZpbmUgeWllbGRfZXhwciAzMzkKKyNkZWZpbmUgeWllbGRfYXJnIDM0MApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ncmFtbWFyLmggYi9JbmNsdWRlL2dyYW1tYXIuaAppbmRleCBiYTdkMTlkLi44NTEyMGI5IDEwMDY0NAotLS0gYS9JbmNsdWRlL2dyYW1tYXIuaAorKysgYi9JbmNsdWRlL2dyYW1tYXIuaApAQCAtMzcsNyArMzcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGludAkJIHNfbmFyY3M7CiAgICAgYXJjCQkqc19hcmM7CQkvKiBBcnJheSBvZiBhcmNzICovCi0JCisKICAgICAvKiBPcHRpb25hbCBhY2NlbGVyYXRvcnMgKi8KICAgICBpbnQJCSBzX2xvd2VyOwkvKiBMb3dlc3QgbGFiZWwgaW5kZXggKi8KICAgICBpbnQJCSBzX3VwcGVyOwkvKiBIaWdoZXN0IGxhYmVsIGluZGV4ICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL2xpc3RvYmplY3QuaCBiL0luY2x1ZGUvbGlzdG9iamVjdC5oCmluZGV4IDc0Y2Y0NmYuLjMxODQzYjUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbGlzdG9iamVjdC5oCisrKyBiL0luY2x1ZGUvbGlzdG9iamVjdC5oCkBAIC0yLDcgKzIsNyBAQAogLyogTGlzdCBvYmplY3QgaW50ZXJmYWNlICovCiAKIC8qCi1Bbm90aGVyIGdlbmVyYWxseSB1c2VmdWwgb2JqZWN0IHR5cGUgaXMgYW4gbGlzdCBvZiBvYmplY3QgcG9pbnRlcnMuCitBbm90aGVyIGdlbmVyYWxseSB1c2VmdWwgb2JqZWN0IHR5cGUgaXMgYSBsaXN0IG9mIG9iamVjdCBwb2ludGVycy4KIFRoaXMgaXMgYSBtdXRhYmxlIHR5cGU6IHRoZSBsaXN0IGl0ZW1zIGNhbiBiZSBjaGFuZ2VkLCBhbmQgaXRlbXMgY2FuIGJlCiBhZGRlZCBvciByZW1vdmVkLiAgT3V0LW9mLXJhbmdlIGluZGljZXMgb3Igbm9uLWxpc3Qgb2JqZWN0cyBhcmUgaWdub3JlZC4KIApAQCAtNzIsNiArNzIsNyBAQAogI2RlZmluZSBQeUxpc3RfR0VUX0lURU0ob3AsIGkpICgoKFB5TGlzdE9iamVjdCAqKShvcCkpLT5vYl9pdGVtW2ldKQogI2RlZmluZSBQeUxpc3RfU0VUX0lURU0ob3AsIGksIHYpICgoKFB5TGlzdE9iamVjdCAqKShvcCkpLT5vYl9pdGVtW2ldID0gKHYpKQogI2RlZmluZSBQeUxpc3RfR0VUX1NJWkUob3ApICAgIFB5X1NJWkUob3ApCisjZGVmaW5lIF9QeUxpc3RfSVRFTVMob3ApICAgICAgKCgoUHlMaXN0T2JqZWN0ICopKG9wKSktPm9iX2l0ZW0pCiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL2xvbmdvYmplY3QuaCBiL0luY2x1ZGUvbG9uZ29iamVjdC5oCmluZGV4IGZmNDMzMDkuLjJhMmVlY2YgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbG9uZ29iamVjdC5oCisrKyBiL0luY2x1ZGUvbG9uZ29iamVjdC5oCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgZXhhbXBsZSwgaWYgaXNfc2lnbmVkIGlzIDAgYW5kIHRoZXJlIGFyZSBtb3JlIGRpZ2l0cyBpbiB0aGUgdiB0aGFuCiAgICAgIGZpdCBpbiBuOyBvciBpZiBpc19zaWduZWQgaXMgMSwgdiA8IDAsIGFuZCBuIGlzIGp1c3QgMSBiaXQgc2h5IG9mCiAgICAgIGJlaW5nIGxhcmdlIGVub3VnaCB0byBob2xkIGEgc2lnbiBiaXQuICBPdmVyZmxvd0Vycm9yIGlzIHNldCBpbiB0aGlzCi0gICAgIGNhc2UsIGJ1dCBieXRlcyBob2xkcyB0aGUgbGVhc3Qtc2lnbmZpY2FudCBuIGJ5dGVzIG9mIHRoZSB0cnVlIHZhbHVlLgorICAgICBjYXNlLCBidXQgYnl0ZXMgaG9sZHMgdGhlIGxlYXN0LXNpZ25pZmljYW50IG4gYnl0ZXMgb2YgdGhlIHRydWUgdmFsdWUuCiAqLwogUHlBUElfRlVOQyhpbnQpIF9QeUxvbmdfQXNCeXRlQXJyYXkoUHlMb25nT2JqZWN0KiB2LAogICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBzaXplX3QgbiwKQEAgLTE5OCw2ICsxOTgsOSBAQAogUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeU9TX3N0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogUHlBUElfRlVOQyhsb25nKSBQeU9TX3N0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAKKy8qIEZvciB1c2UgYnkgdGhlIGdjZCBmdW5jdGlvbiBpbiBtYXRobW9kdWxlLmMgKi8KK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5TG9uZ19HQ0QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL21lbW9yeW9iamVjdC5oIGIvSW5jbHVkZS9tZW1vcnlvYmplY3QuaAppbmRleCAzODJjYTkyLi5hYjVlZTA5IDEwMDY0NAotLS0gYS9JbmNsdWRlL21lbW9yeW9iamVjdC5oCisrKyBiL0luY2x1ZGUvbWVtb3J5b2JqZWN0LmgKQEAgLTQ1LDkgKzQ1LDYgQEAKIH0gX1B5TWFuYWdlZEJ1ZmZlck9iamVjdDsKIAogCi0vKiBkZXByZWNhdGVkLCByZW1vdmVkIGluIDMuNSAqLwotI2RlZmluZSBfUHlfTUVNT1JZVklFV19NQVhfRk9STUFUIDMgLyogbXVzdCBiZSA+PSAzICovCi0KIC8qIG1lbW9yeXZpZXcgc3RhdGUgZmxhZ3MgKi8KICNkZWZpbmUgX1B5X01FTU9SWVZJRVdfUkVMRUFTRUQgICAgMHgwMDEgIC8qIGFjY2VzcyB0byBtYXN0ZXIgYnVmZmVyIGJsb2NrZWQgKi8KICNkZWZpbmUgX1B5X01FTU9SWVZJRVdfQyAgICAgICAgICAgMHgwMDIgIC8qIEMtY29udGlndW91cyBsYXlvdXQgKi8KQEAgLTYyLDcgKzU5LDYgQEAKICAgICBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAvKiBzdGF0ZSBmbGFncyAqLwogICAgIFB5X3NzaXplX3QgZXhwb3J0czsgICAgICAgICAgIC8qIG51bWJlciBvZiBidWZmZXIgcmUtZXhwb3J0cyAqLwogICAgIFB5X2J1ZmZlciB2aWV3OyAgICAgICAgICAgICAgIC8qIHByaXZhdGUgY29weSBvZiB0aGUgZXhwb3J0ZXIncyB2aWV3ICovCi0gICAgY2hhciBmb3JtYXRbX1B5X01FTU9SWVZJRVdfTUFYX0ZPUk1BVF07IC8qIGRlcHJlY2F0ZWQsIHJlbW92ZWQgaW4gMy41ICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIFB5X3NzaXplX3Qgb2JfYXJyYXlbMV07ICAgICAgIC8qIHNoYXBlLCBzdHJpZGVzLCBzdWJvZmZzZXRzICovCiB9IFB5TWVtb3J5Vmlld09iamVjdDsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbWV0aG9kb2JqZWN0LmggYi9JbmNsdWRlL21ldGhvZG9iamVjdC5oCmluZGV4IDNjYzJlYTkuLmUyYWQ4MDQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbWV0aG9kb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9tZXRob2RvYmplY3QuaApAQCAtNDcsNyArNDcsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgUHlNZXRob2REZWYgUHlNZXRob2REZWY7CiAKICNkZWZpbmUgUHlDRnVuY3Rpb25fTmV3KE1MLCBTRUxGKSBQeUNGdW5jdGlvbl9OZXdFeCgoTUwpLCAoU0VMRiksIE5VTEwpCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Q0Z1bmN0aW9uX05ld0V4KFB5TWV0aG9kRGVmICosIFB5T2JqZWN0ICosIAorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNGdW5jdGlvbl9OZXdFeChQeU1ldGhvZERlZiAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKTsKIAogLyogRmxhZyBwYXNzZWQgdG8gbmV3bWV0aG9kb2JqZWN0ICovCkBAIC02Niw3ICs2Niw3IEBACiAKIC8qIE1FVEhfQ09FWElTVCBhbGxvd3MgYSBtZXRob2QgdG8gYmUgZW50ZXJlZCBldmVuIHRob3VnaCBhIHNsb3QgaGFzCiAgICBhbHJlYWR5IGZpbGxlZCB0aGUgZW50cnkuICBXaGVuIGRlZmluZWQsIHRoZSBmbGFnIGFsbG93cyBhIHNlcGFyYXRlCi0gICBtZXRob2QsICJfX2NvbnRhaW5zX18iIGZvciBleGFtcGxlLCB0byBjb2V4aXN0IHdpdGggYSBkZWZpbmVkIAorICAgbWV0aG9kLCAiX19jb250YWluc19fIiBmb3IgZXhhbXBsZSwgdG8gY29leGlzdCB3aXRoIGEgZGVmaW5lZAogICAgc2xvdCBsaWtlIHNxX2NvbnRhaW5zLiAqLwogCiAjZGVmaW5lIE1FVEhfQ09FWElTVCAgIDB4MDA0MApAQCAtNzcsNiArNzcsNyBAQAogICAgIFB5TWV0aG9kRGVmICptX21sOyAvKiBEZXNjcmlwdGlvbiBvZiB0aGUgQyBmdW5jdGlvbiB0byBjYWxsICovCiAgICAgUHlPYmplY3QgICAgKm1fc2VsZjsgLyogUGFzc2VkIGFzICdzZWxmJyBhcmcgdG8gdGhlIEMgZnVuYywgY2FuIGJlIE5VTEwgKi8KICAgICBQeU9iamVjdCAgICAqbV9tb2R1bGU7IC8qIFRoZSBfX21vZHVsZV9fIGF0dHJpYnV0ZSwgY2FuIGJlIGFueXRoaW5nICovCisgICAgUHlPYmplY3QgICAgKm1fd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9IFB5Q0Z1bmN0aW9uT2JqZWN0OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbW9kc3VwcG9ydC5oIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKaW5kZXggNWRlMDQ1OC4uODI5YWFmOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2RzdXBwb3J0LmgKKysrIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKQEAgLTEyLDEzICsxMiwxMyBAQAogLyogSWYgUFlfU1NJWkVfVF9DTEVBTiBpcyBkZWZpbmVkLCBlYWNoIGZ1bmN0aW9ucyB0cmVhdHMgIy1zcGVjaWZpZXIKICAgIHRvIG1lYW4gUHlfc3NpemVfdCAqLwogI2lmZGVmIFBZX1NTSVpFX1RfQ0xFQU4KLSNkZWZpbmUgUHlBcmdfUGFyc2UJCQlfUHlBcmdfUGFyc2VfU2l6ZVQKLSNkZWZpbmUgUHlBcmdfUGFyc2VUdXBsZQkJX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQKLSNkZWZpbmUgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCV9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKLSNkZWZpbmUgUHlBcmdfVmFQYXJzZQkJCV9QeUFyZ19WYVBhcnNlX1NpemVUCi0jZGVmaW5lIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzCV9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotI2RlZmluZSBQeV9CdWlsZFZhbHVlCQkJX1B5X0J1aWxkVmFsdWVfU2l6ZVQKLSNkZWZpbmUgUHlfVmFCdWlsZFZhbHVlCQkJX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAorI2RlZmluZSBQeUFyZ19QYXJzZSAgICAgICAgICAgICAgICAgICAgIF9QeUFyZ19QYXJzZV9TaXplVAorI2RlZmluZSBQeUFyZ19QYXJzZVR1cGxlICAgICAgICAgICAgICAgIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCisjZGVmaW5lIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyAgICAgX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAorI2RlZmluZSBQeUFyZ19WYVBhcnNlICAgICAgICAgICAgICAgICAgIF9QeUFyZ19WYVBhcnNlX1NpemVUCisjZGVmaW5lIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzICAgX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCisjZGVmaW5lIFB5X0J1aWxkVmFsdWUgICAgICAgICAgICAgICAgICAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQKKyNkZWZpbmUgUHlfVmFCdWlsZFZhbHVlICAgICAgICAgICAgICAgICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUCiAjZWxzZQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlfVmFCdWlsZFZhbHVlX1NpemVUKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CiAjZW5kaWYKQEAgLTUwLDYgKzUwLDEzIEBACiAjZGVmaW5lIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIGMpIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICNjLCBjKQogI2RlZmluZSBQeU1vZHVsZV9BZGRTdHJpbmdNYWNybyhtLCBjKSBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAjYywgYykKIAorI2lmICFkZWZpbmVkKFB5X0xJTUlURURfQVBJKSB8fCBQeV9MSU1JVEVEX0FQSSswID49IDB4MDMwNTAwMDAKKy8qIE5ldyBpbiAzLjUgKi8KK1B5QVBJX0ZVTkMoaW50KSBQeU1vZHVsZV9TZXREb2NTdHJpbmcoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKTsKK1B5QVBJX0ZVTkMoaW50KSBQeU1vZHVsZV9BZGRGdW5jdGlvbnMoUHlPYmplY3QgKiwgUHlNZXRob2REZWYgKik7CitQeUFQSV9GVU5DKGludCkgUHlNb2R1bGVfRXhlY0RlZihQeU9iamVjdCAqbW9kdWxlLCBQeU1vZHVsZURlZiAqZGVmKTsKKyNlbmRpZgorCiAjZGVmaW5lIFB5X0NMRUFOVVBfU1VQUE9SVEVEIDB4MjAwMDAKIAogI2RlZmluZSBQWVRIT05fQVBJX1ZFUlNJT04gMTAxMwpAQCAtNjcsMzUgKzc0LDM1IEBACiAgICBQbGVhc2UgYWRkIGEgbGluZSBvciB0d28gdG8gdGhlIHRvcCBvZiB0aGlzIGxvZyBmb3IgZWFjaCBBUEkKICAgIHZlcnNpb24gY2hhbmdlOgogCi0gICAyMi1GZWItMjAwNiAgTXZMCTEwMTMJUEVQIDM1MyAtIGxvbmcgaW5kaWNlcyBmb3Igc2VxdWVuY2UgbGVuZ3RocworICAgMjItRmViLTIwMDYgIE12TCAgICAgMTAxMyAgICBQRVAgMzUzIC0gbG9uZyBpbmRpY2VzIGZvciBzZXF1ZW5jZSBsZW5ndGhzCiAKLSAgIDE5LUF1Zy0yMDAyICBHdlIJMTAxMglDaGFuZ2VzIHRvIHN0cmluZyBvYmplY3Qgc3RydWN0IGZvcgotICAgCQkJCWludGVybmluZyBjaGFuZ2VzLCBzYXZpbmcgMyBieXRlcy4KKyAgIDE5LUF1Zy0yMDAyICBHdlIgICAgIDEwMTIgICAgQ2hhbmdlcyB0byBzdHJpbmcgb2JqZWN0IHN0cnVjdCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuaW5nIGNoYW5nZXMsIHNhdmluZyAzIGJ5dGVzLgogCi0gICAxNy1KdWwtMjAwMQlHdlIJMTAxMQlEZXNjci1icmFuY2gsIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZQorICAgMTctSnVsLTIwMDEgIEd2UiAgICAgMTAxMSAgICBEZXNjci1icmFuY2gsIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZQogCiAgICAyNS1KYW4tMjAwMSAgRkxEICAgICAxMDEwICAgIFBhcmFtZXRlcnMgYWRkZWQgdG8gUHlDb2RlX05ldygpIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZyYW1lX05ldygpOyBQeXRob24gMi4xYTIKIAogICAgMTQtTWFyLTIwMDAgIEd2UiAgICAgMTAwOSAgICBVbmljb2RlIEFQSSBhZGRlZAogCi0gICAzLUphbi0xOTk5CUd2UgkxMDA3CURlY2lkZWQgdG8gY2hhbmdlIGJhY2shICAoRG9uJ3QgcmV1c2UgMTAwOCEpCisgICAzLUphbi0xOTk5ICAgR3ZSICAgICAxMDA3ICAgIERlY2lkZWQgdG8gY2hhbmdlIGJhY2shICAoRG9uJ3QgcmV1c2UgMTAwOCEpCiAKLSAgIDMtRGVjLTE5OTgJR3ZSCTEwMDgJUHl0aG9uIDEuNS4yYjEKKyAgIDMtRGVjLTE5OTggICBHdlIgICAgIDEwMDggICAgUHl0aG9uIDEuNS4yYjEKIAotICAgMTgtSmFuLTE5OTcJR3ZSCTEwMDcJc3RyaW5nIGludGVybmluZyBhbmQgb3RoZXIgc3BlZWR1cHMKKyAgIDE4LUphbi0xOTk3ICBHdlIgICAgIDEwMDcgICAgc3RyaW5nIGludGVybmluZyBhbmQgb3RoZXIgc3BlZWR1cHMKIAotICAgMTEtT2N0LTE5OTYJR3ZSCXJlbmFtZWQgUHlfRWxsaXBzZXMgdG8gUHlfRWxsaXBzaXMgOi0oCisgICAxMS1PY3QtMTk5NiAgR3ZSICAgICByZW5hbWVkIFB5X0VsbGlwc2VzIHRvIFB5X0VsbGlwc2lzIDotKAogCi0gICAzMC1KdWwtMTk5NglHdlIJU2xpY2UgYW5kIGVsbGlwc2VzIHN5bnRheCBhZGRlZAorICAgMzAtSnVsLTE5OTYgIEd2UiAgICAgU2xpY2UgYW5kIGVsbGlwc2VzIHN5bnRheCBhZGRlZAogCi0gICAyMy1KdWwtMTk5NglHdlIJRm9yIDEuNCAtLSBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5IHRoaXMgdGltZSA6LSkKKyAgIDIzLUp1bC0xOTk2ICBHdlIgICAgIEZvciAxLjQgLS0gYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSB0aGlzIHRpbWUgOi0pCiAKLSAgIDctTm92LTE5OTUJR3ZSCUtleXdvcmQgYXJndW1lbnRzIChzaG91bGQndmUgYmVlbiBkb25lIGF0IDEuMyA6LSggKQorICAgNy1Ob3YtMTk5NSAgIEd2UiAgICAgS2V5d29yZCBhcmd1bWVudHMgKHNob3VsZCd2ZSBiZWVuIGRvbmUgYXQgMS4zIDotKCApCiAKLSAgIDEwLUphbi0xOTk1CUd2UglSZW5hbWVkIGdsb2JhbHMgdG8gbmV3IG5hbWluZyBzY2hlbWUKKyAgIDEwLUphbi0xOTk1ICBHdlIgICAgIFJlbmFtZWQgZ2xvYmFscyB0byBuZXcgbmFtaW5nIHNjaGVtZQogCi0gICA5LUphbi0xOTk1CUd2UglJbml0aWFsIHZlcnNpb24gKGluY29tcGF0aWJsZSB3aXRoIG9sZGVyIEFQSSkKKyAgIDktSmFuLTE5OTUgICBHdlIgICAgIEluaXRpYWwgdmVyc2lvbiAoaW5jb21wYXRpYmxlIHdpdGggb2xkZXIgQVBJKQogKi8KIAogLyogVGhlIFBZVEhPTl9BQklfVkVSU0lPTiBpcyBpbnRyb2R1Y2VkIGluIFBFUCAzODQuIEZvciB0aGUgbGlmZXRpbWUgb2YKQEAgLTEwNSwxMCArMTEyLDExIEBACiAjZGVmaW5lIFBZVEhPTl9BQklfU1RSSU5HICIzIgogCiAjaWZkZWYgUHlfVFJBQ0VfUkVGUwotIC8qIFdoZW4gd2UgYXJlIHRyYWNpbmcgcmVmZXJlbmNlIGNvdW50cywgcmVuYW1lIFB5TW9kdWxlX0NyZWF0ZTIgc28KKyAvKiBXaGVuIHdlIGFyZSB0cmFjaW5nIHJlZmVyZW5jZSBjb3VudHMsIHJlbmFtZSBtb2R1bGUgY3JlYXRpb24gZnVuY3Rpb25zIHNvCiAgICAgbW9kdWxlcyBjb21waWxlZCB3aXRoIGluY29tcGF0aWJsZSBzZXR0aW5ncyB3aWxsIGdlbmVyYXRlIGEKICAgICBsaW5rLXRpbWUgZXJyb3IuICovCiAgI2RlZmluZSBQeU1vZHVsZV9DcmVhdGUyIFB5TW9kdWxlX0NyZWF0ZTJUcmFjZVJlZnMKKyAjZGVmaW5lIFB5TW9kdWxlX0Zyb21EZWZBbmRTcGVjMiBQeU1vZHVsZV9Gcm9tRGVmQW5kU3BlYzJUcmFjZVJlZnMKICNlbmRpZgogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TW9kdWxlX0NyZWF0ZTIoc3RydWN0IFB5TW9kdWxlRGVmKiwKQEAgLTExNiwxMiArMTI0LDI3IEBACiAKICNpZmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeU1vZHVsZV9DcmVhdGUobW9kdWxlKSBcCi0JUHlNb2R1bGVfQ3JlYXRlMihtb2R1bGUsIFBZVEhPTl9BQklfVkVSU0lPTikKKyAgICAgICAgUHlNb2R1bGVfQ3JlYXRlMihtb2R1bGUsIFBZVEhPTl9BQklfVkVSU0lPTikKICNlbHNlCiAjZGVmaW5lIFB5TW9kdWxlX0NyZWF0ZShtb2R1bGUpIFwKLQlQeU1vZHVsZV9DcmVhdGUyKG1vZHVsZSwgUFlUSE9OX0FQSV9WRVJTSU9OKQorICAgICAgICBQeU1vZHVsZV9DcmVhdGUyKG1vZHVsZSwgUFlUSE9OX0FQSV9WRVJTSU9OKQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDUwMDAwCisvKiBOZXcgaW4gMy41ICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TW9kdWxlX0Zyb21EZWZBbmRTcGVjMihQeU1vZHVsZURlZiAqZGVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kdWxlX2FwaV92ZXJzaW9uKTsKKworI2lmZGVmIFB5X0xJTUlURURfQVBJCisjZGVmaW5lIFB5TW9kdWxlX0Zyb21EZWZBbmRTcGVjKG1vZHVsZSwgc3BlYykgXAorICAgIFB5TW9kdWxlX0Zyb21EZWZBbmRTcGVjMihtb2R1bGUsIHNwZWMsIFBZVEhPTl9BQklfVkVSU0lPTikKKyNlbHNlCisjZGVmaW5lIFB5TW9kdWxlX0Zyb21EZWZBbmRTcGVjKG1vZHVsZSwgc3BlYykgXAorICAgIFB5TW9kdWxlX0Zyb21EZWZBbmRTcGVjMihtb2R1bGUsIHNwZWMsIFBZVEhPTl9BUElfVkVSU0lPTikKKyNlbmRpZiAvKiBQeV9MSU1JVEVEX0FQSSAqLworI2VuZGlmIC8qIE5ldyBpbiAzLjUgKi8KKwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfREFUQShjaGFyICopIF9QeV9QYWNrYWdlQ29udGV4dDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tb2R1bGVvYmplY3QuaCBiL0luY2x1ZGUvbW9kdWxlb2JqZWN0LmgKaW5kZXggZjExOTM2NC4uMjI5ZDdmYSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2R1bGVvYmplY3QuaAorKysgYi9JbmNsdWRlL21vZHVsZW9iamVjdC5oCkBAIC0zMCw2ICszMCwxMiBAQAogUHlBUElfRlVOQyhzdHJ1Y3QgUHlNb2R1bGVEZWYqKSBQeU1vZHVsZV9HZXREZWYoUHlPYmplY3QqKTsKIFB5QVBJX0ZVTkModm9pZCopIFB5TW9kdWxlX0dldFN0YXRlKFB5T2JqZWN0Kik7CiAKKyNpZiAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDUwMDAwCisvKiBOZXcgaW4gMy41ICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TW9kdWxlRGVmX0luaXQoc3RydWN0IFB5TW9kdWxlRGVmKik7CitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlNb2R1bGVEZWZfVHlwZTsKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCBQeU1vZHVsZURlZl9CYXNlIHsKICAgUHlPYmplY3RfSEVBRAogICBQeU9iamVjdCogKCptX2luaXQpKHZvaWQpOwpAQCAtNDQsMTkgKzUwLDM1IEBACiAgICAgTlVMTCwgLyogbV9jb3B5ICovICAgICAgICAgIFwKICAgfQogCitzdHJ1Y3QgUHlNb2R1bGVEZWZfU2xvdDsKKyNpZiAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDUwMDAwCisvKiBOZXcgaW4gMy41ICovCit0eXBlZGVmIHN0cnVjdCBQeU1vZHVsZURlZl9TbG90eworICAgIGludCBzbG90OworICAgIHZvaWQgKnZhbHVlOworfSBQeU1vZHVsZURlZl9TbG90OworCisjZGVmaW5lIFB5X21vZF9jcmVhdGUgMQorI2RlZmluZSBQeV9tb2RfZXhlYyAyCisKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKyNkZWZpbmUgX1B5X21vZF9MQVNUX1NMT1QgMgorI2VuZGlmCisKKyNlbmRpZiAvKiBOZXcgaW4gMy41ICovCisKIHR5cGVkZWYgc3RydWN0IFB5TW9kdWxlRGVmewogICBQeU1vZHVsZURlZl9CYXNlIG1fYmFzZTsKICAgY29uc3QgY2hhciogbV9uYW1lOwogICBjb25zdCBjaGFyKiBtX2RvYzsKICAgUHlfc3NpemVfdCBtX3NpemU7CiAgIFB5TWV0aG9kRGVmICptX21ldGhvZHM7Ci0gIGlucXVpcnkgbV9yZWxvYWQ7CisgIHN0cnVjdCBQeU1vZHVsZURlZl9TbG90KiBtX3Nsb3RzOwogICB0cmF2ZXJzZXByb2MgbV90cmF2ZXJzZTsKICAgaW5xdWlyeSBtX2NsZWFyOwogICBmcmVlZnVuYyBtX2ZyZWU7CiB9UHlNb2R1bGVEZWY7CiAKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbm9kZS5oIGIvSW5jbHVkZS9ub2RlLmgKaW5kZXggMmU0ZTJiYS4uNjU0YWQ4NSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ub2RlLmgKKysrIGIvSW5jbHVkZS9ub2RlLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAogLyogTm9kZSBhY2Nlc3MgZnVuY3Rpb25zICovCiAjZGVmaW5lIE5DSChuKQkJKChuKS0+bl9uY2hpbGRyZW4pCi0JCisKICNkZWZpbmUgQ0hJTEQobiwgaSkJKCYobiktPm5fY2hpbGRbaV0pCiAjZGVmaW5lIFJDSElMRChuLCBpKQkoQ0hJTEQobiwgTkNIKG4pICsgaSkpCiAjZGVmaW5lIFRZUEUobikJCSgobiktPm5fdHlwZSkKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2JqZWN0LmggYi9JbmNsdWRlL29iamVjdC5oCmluZGV4IDVmODYyYWIuLjUwZDk3NDcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9vYmplY3QuaApAQCAtNjUsNiArNjUsNyBAQAogI2Vycm9yIFB5X0xJTUlURURfQVBJIGlzIGluY29tcGF0aWJsZSB3aXRoIFB5X0RFQlVHLCBQeV9UUkFDRV9SRUZTLCBhbmQgUHlfUkVGX0RFQlVHCiAjZW5kaWYKIAorCiAjaWZkZWYgUHlfVFJBQ0VfUkVGUwogLyogRGVmaW5lIHBvaW50ZXJzIHRvIHN1cHBvcnQgYSBkb3VibHktbGlua2VkIGxpc3Qgb2YgYWxsIGxpdmUgaGVhcCBvYmplY3RzLiAqLwogI2RlZmluZSBfUHlPYmplY3RfSEVBRF9FWFRSQSAgICAgICAgICAgIFwKQEAgLTEzMyw3ICsxMzQsNyBAQAogICAgdXNhZ2UsIHRoZSBzdHJpbmcgImZvbyIgaXMgaW50ZXJuZWQsIGFuZCB0aGUgc3RydWN0dXJlcyBhcmUgbGlua2VkLiBPbiBpbnRlcnByZXRlcgogICAgc2h1dGRvd24sIGFsbCBzdHJpbmdzIGFyZSByZWxlYXNlZCAodGhyb3VnaCBfUHlVbmljb2RlX0NsZWFyU3RhdGljU3RyaW5ncykuCiAKLSAgIEFsdGVybmF0aXZlbHksIF9QeV9zdGF0aWNfc3RyaW5nIGFsbG93cyB0byBjaG9vc2UgdGhlIHZhcmlhYmxlIG5hbWUuCisgICBBbHRlcm5hdGl2ZWx5LCBfUHlfc3RhdGljX3N0cmluZyBhbGxvd3MgY2hvb3NpbmcgdGhlIHZhcmlhYmxlIG5hbWUuCiAgICBfUHlVbmljb2RlX0Zyb21JZCByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSBpbnRlcm5lZCBzdHJpbmcuCiAgICBfUHlPYmplY3Rfe0dldCxTZXQsSGFzfUF0dHJJZCBhcmUgX19nZXRhdHRyX18gdmVyc2lvbnMgdXNpbmcgX1B5X0lkZW50aWZpZXIqLgogKi8KQEAgLTI3NSw2ICsyNzYsOSBAQAogICAgIGJpbmFyeWZ1bmMgbmJfaW5wbGFjZV90cnVlX2RpdmlkZTsKIAogICAgIHVuYXJ5ZnVuYyBuYl9pbmRleDsKKworICAgIGJpbmFyeWZ1bmMgbmJfbWF0cml4X211bHRpcGx5OworICAgIGJpbmFyeWZ1bmMgbmJfaW5wbGFjZV9tYXRyaXhfbXVsdGlwbHk7CiB9IFB5TnVtYmVyTWV0aG9kczsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMjk3LDYgKzMwMSwxMSBAQAogICAgIG9iam9iamFyZ3Byb2MgbXBfYXNzX3N1YnNjcmlwdDsKIH0gUHlNYXBwaW5nTWV0aG9kczsKIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuYXJ5ZnVuYyBhbV9hd2FpdDsKKyAgICB1bmFyeWZ1bmMgYW1fYWl0ZXI7CisgICAgdW5hcnlmdW5jIGFtX2FuZXh0OworfSBQeUFzeW5jTWV0aG9kczsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgICBnZXRidWZmZXJwcm9jIGJmX2dldGJ1ZmZlcjsKQEAgLTM0Miw3ICszNTEsOCBAQAogICAgIHByaW50ZnVuYyB0cF9wcmludDsKICAgICBnZXRhdHRyZnVuYyB0cF9nZXRhdHRyOwogICAgIHNldGF0dHJmdW5jIHRwX3NldGF0dHI7Ci0gICAgdm9pZCAqdHBfcmVzZXJ2ZWQ7IC8qIGZvcm1lcmx5IGtub3duIGFzIHRwX2NvbXBhcmUgKi8KKyAgICBQeUFzeW5jTWV0aG9kcyAqdHBfYXNfYXN5bmM7IC8qIGZvcm1lcmx5IGtub3duIGFzIHRwX2NvbXBhcmUgKFB5dGhvbiAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdHBfcmVzZXJ2ZWQgKFB5dGhvbiAzKSAqLwogICAgIHJlcHJmdW5jIHRwX3JlcHI7CiAKICAgICAvKiBNZXRob2Qgc3VpdGVzIGZvciBzdGFuZGFyZCBjbGFzc2VzICovCkBAIC00NDksNiArNDU5LDcgQEAKICAgICAvKiBOb3RlOiB0aGVyZSdzIGEgZGVwZW5kZW5jeSBvbiB0aGUgb3JkZXIgb2YgdGhlc2UgbWVtYmVycwogICAgICAgIGluIHNsb3RwdHIoKSBpbiB0eXBlb2JqZWN0LmMgLiAqLwogICAgIFB5VHlwZU9iamVjdCBodF90eXBlOworICAgIFB5QXN5bmNNZXRob2RzIGFzX2FzeW5jOwogICAgIFB5TnVtYmVyTWV0aG9kcyBhc19udW1iZXI7CiAgICAgUHlNYXBwaW5nTWV0aG9kcyBhc19tYXBwaW5nOwogICAgIFB5U2VxdWVuY2VNZXRob2RzIGFzX3NlcXVlbmNlOyAvKiBhc19zZXF1ZW5jZSBjb21lcyBhZnRlciBhc19tYXBwaW5nLApAQCAtNTcyLDEzICs1ODMsNiBAQAogUHlBUElfRlVOQyhpbnQpIFB5X1JlcHJFbnRlcihQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlfUmVwckxlYXZlKFB5T2JqZWN0ICopOwogCi0jaWZuZGVmIFB5X0xJTUlURURfQVBJCi0vKiBIZWxwZXIgZm9yIHBhc3Npbmcgb2JqZWN0cyB0byBwcmludGYgYW5kIHRoZSBsaWtlLgotICAgTGVha3MgcmVmY291bnRzLiAgRG9uJ3QgdXNlIGl0IQotKi8KLSNkZWZpbmUgUHlPYmplY3RfUkVQUihvYmopIFB5VW5pY29kZV9Bc1VURjgoUHlPYmplY3RfUmVwcihvYmopKQotI2VuZGlmCi0KIC8qIEZsYWcgYml0cyBmb3IgcHJpbnRpbmc6ICovCiAjZGVmaW5lIFB5X1BSSU5UX1JBVyAgICAxICAgICAgIC8qIE5vIHN0cmluZyBxdW90ZXMgZXRjLiAqLwogCkBAIC03MTQsMTEgKzcxOCwxNyBAQAogICAgICAgICAgICAgICAgIF9QeV9OZWdhdGl2ZVJlZmNvdW50KF9fRklMRV9fLCBfX0xJTkVfXywgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikoT1ApKTsgICAgICAgICBcCiB9CisvKiBQeV9SRUZfREVCVUcgYWxzbyBjb250cm9scyB0aGUgZGlzcGxheSBvZiByZWZjb3VudHMgYW5kIG1lbW9yeSBibG9jaworICogYWxsb2NhdGlvbnMgYXQgdGhlIGludGVyYWN0aXZlIHByb21wdCBhbmQgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24KKyAqLworUHlBUElfRlVOQyh2b2lkKSBfUHlEZWJ1Z19QcmludFRvdGFsUmVmcyh2b2lkKTsKKyNkZWZpbmUgX1BZX0RFQlVHX1BSSU5UX1RPVEFMX1JFRlMoKSBfUHlEZWJ1Z19QcmludFRvdGFsUmVmcygpCiAjZWxzZQogI2RlZmluZSBfUHlfSU5DX1JFRlRPVEFMCiAjZGVmaW5lIF9QeV9ERUNfUkVGVE9UQUwKICNkZWZpbmUgX1B5X1JFRl9ERUJVR19DT01NQQogI2RlZmluZSBfUHlfQ0hFQ0tfUkVGQ05UKE9QKSAgICAvKiBhIHNlbWljb2xvbiAqLzsKKyNkZWZpbmUgX1BZX0RFQlVHX1BSSU5UX1RPVEFMX1JFRlMoKQogI2VuZGlmIC8qIFB5X1JFRl9ERUJVRyAqLwogCiAjaWZkZWYgQ09VTlRfQUxMT0NTCkBAIC04MzYsNiArODQ2LDQyIEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoX3B5X3hkZWNyZWZfdG1wKTsgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorLyogU2FmZWx5IGRlY3JlZiBgb3BgIGFuZCBzZXQgYG9wYCB0byBgb3AyYC4KKyAqCisgKiBBcyBpbiBjYXNlIG9mIFB5X0NMRUFSICJ0aGUgb2J2aW91cyIgY29kZSBjYW4gYmUgZGVhZGx5OgorICoKKyAqICAgICBQeV9ERUNSRUYob3ApOworICogICAgIG9wID0gb3AyOworICoKKyAqIFRoZSBzYWZlIHdheSBpczoKKyAqCisgKiAgICAgIFB5X1NFVFJFRihvcCwgb3AyKTsKKyAqCisgKiBUaGF0IGFycmFuZ2VzIHRvIHNldCBgb3BgIHRvIGBvcDJgIF9iZWZvcmVfIGRlY3JlZidpbmcsIHNvIHRoYXQgYW55IGNvZGUKKyAqIHRyaWdnZXJlZCBhcyBhIHNpZGUtZWZmZWN0IG9mIGBvcGAgZ2V0dGluZyB0b3JuIGRvd24gbm8gbG9uZ2VyIGJlbGlldmVzCisgKiBgb3BgIHBvaW50cyB0byBhIHZhbGlkIG9iamVjdC4KKyAqCisgKiBQeV9YU0VUUkVGIGlzIGEgdmFyaWFudCBvZiBQeV9TRVRSRUYgdGhhdCB1c2VzIFB5X1hERUNSRUYgaW5zdGVhZCBvZgorICogUHlfREVDUkVGLgorICovCisKKyNkZWZpbmUgUHlfU0VUUkVGKG9wLCBvcDIpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKl9weV90bXAgPSAoUHlPYmplY3QgKikob3ApOyAgIFwKKyAgICAgICAgKG9wKSA9IChvcDIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKF9weV90bXApOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFB5X1hTRVRSRUYob3AsIG9wMikgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgICBcCisgICAgICAgIChvcCkgPSAob3AyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1hERUNSRUYoX3B5X3RtcCk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIGlmbmRlZiBQeV9MSU1JVEVEX0FQSSAqLworCiAvKgogVGhlc2UgYXJlIHByb3ZpZGVkIGFzIGNvbnZlbmllbmNlcyB0byBQeXRob24gcnVudGltZSBlbWJlZGRlcnMsIHNvIHRoYXQKIHRoZXkgY2FuIGhhdmUgb2JqZWN0IGNvZGUgdGhhdCBpcyBub3QgZGVwZW5kZW50IG9uIFB5dGhvbiBjb21waWxhdGlvbiBmbGFncy4KZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2JqaW1wbC5oIGIvSW5jbHVkZS9vYmppbXBsLmgKaW5kZXggM2YyMWI3MC4uNjViNmQ5MSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vYmppbXBsLmgKKysrIGIvSW5jbHVkZS9vYmppbXBsLmgKQEAgLTk1LDYgKzk1LDcgQEAKICAgIHRoZSByYXcgbWVtb3J5LgogKi8KIFB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9NYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X0NhbGxvYyhzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpOwogUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOwogUHlBUElfRlVOQyh2b2lkKSBQeU9iamVjdF9GcmVlKHZvaWQgKnB0cik7CiAKQEAgLTMyMSw3ICszMjIsOCBAQAogICAgICAgICAoIVB5VHVwbGVfQ2hlY2tFeGFjdChvYmopIHx8IF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKG9iaikpKQogI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplX3QpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfR0NfTWFsbG9jKHNpemVfdCBzaXplKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0dDX0NhbGxvYyhzaXplX3Qgc2l6ZSk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9HQ19OZXcoUHlUeXBlT2JqZWN0ICopOwogUHlBUElfRlVOQyhQeVZhck9iamVjdCAqKSBfUHlPYmplY3RfR0NfTmV3VmFyKFB5VHlwZU9iamVjdCAqLCBQeV9zc2l6ZV90KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfR0NfVHJhY2sodm9pZCAqKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2RpY3RvYmplY3QuaCBiL0luY2x1ZGUvb2RpY3RvYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWQ5NTkyCi0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9vZGljdG9iamVjdC5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgUHlfT0RJQ1RPQkpFQ1RfSAorI2RlZmluZSBQeV9PRElDVE9CSkVDVF9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyogT3JkZXJlZERpY3QgKi8KKworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorCit0eXBlZGVmIHN0cnVjdCBfb2RpY3RvYmplY3QgUHlPRGljdE9iamVjdDsKKworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5T0RpY3RfVHlwZTsKK1B5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeU9EaWN0SXRlcl9UeXBlOworUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5T0RpY3RLZXlzX1R5cGU7CitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlPRGljdEl0ZW1zX1R5cGU7CitQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlPRGljdFZhbHVlc19UeXBlOworCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KKworI2RlZmluZSBQeU9EaWN0X0NoZWNrKG9wKSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsICZQeU9EaWN0X1R5cGUpCisjZGVmaW5lIFB5T0RpY3RfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeU9EaWN0X1R5cGUpCisjZGVmaW5lIFB5T0RpY3RfU0laRShvcCkgKChQeURpY3RPYmplY3QgKilvcCktPm1hX3VzZWQKKyNkZWZpbmUgUHlPRGljdF9IYXNLZXkob2QsIGtleSkgKFB5TWFwcGluZ19IYXNLZXkoUHlPYmplY3QgKilvZCwga2V5KQorCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T0RpY3RfTmV3KHZvaWQpOworUHlBUElfRlVOQyhpbnQpIFB5T0RpY3RfU2V0SXRlbShQeU9iamVjdCAqb2QsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICppdGVtKTsKK1B5QVBJX0ZVTkMoaW50KSBQeU9EaWN0X0RlbEl0ZW0oUHlPYmplY3QgKm9kLCBQeU9iamVjdCAqa2V5KTsKKworLyogd3JhcHBlcnMgYXJvdW5kIFB5RGljdCogZnVuY3Rpb25zICovCisjZGVmaW5lIFB5T0RpY3RfR2V0SXRlbShvZCwga2V5KSBQeURpY3RfR2V0SXRlbSgoUHlPYmplY3QgKilvZCwga2V5KQorI2RlZmluZSBQeU9EaWN0X0dldEl0ZW1XaXRoRXJyb3Iob2QsIGtleSkgXAorICAgIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKChQeU9iamVjdCAqKW9kLCBrZXkpCisjZGVmaW5lIFB5T0RpY3RfQ29udGFpbnMob2QsIGtleSkgUHlEaWN0X0NvbnRhaW5zKChQeU9iamVjdCAqKW9kLCBrZXkpCisjZGVmaW5lIFB5T0RpY3RfU2l6ZShvZCkgUHlEaWN0X1NpemUoKFB5T2JqZWN0ICopb2QpCisjZGVmaW5lIFB5T0RpY3RfR2V0SXRlbVN0cmluZyhvZCwga2V5KSBcCisgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoKFB5T2JqZWN0ICopb2QsIGtleSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiAhUHlfT0RJQ1RPQkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vcGNvZGUuaCBiL0luY2x1ZGUvb3Bjb2RlLmgKaW5kZXggMDkzNmYyZC4uM2Y5MTdmYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vcGNvZGUuaAorKysgYi9JbmNsdWRlL29wY29kZS5oCkBAIC0xLDMgKzEsNCBAQAorLyogQXV0by1nZW5lcmF0ZWQgYnkgVG9vbHMvc2NyaXB0cy9nZW5lcmF0ZV9vcGNvZGVfaC5weSAqLwogI2lmbmRlZiBQeV9PUENPREVfSAogI2RlZmluZSBQeV9PUENPREVfSAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC01LDE0MSArNiwxMjIgQEAKICNlbmRpZgogCiAKLS8qIEluc3RydWN0aW9uIG9wY29kZXMgZm9yIGNvbXBpbGVkIGNvZGUgKi8KLQotI2RlZmluZSBQT1BfVE9QICAgICAgICAgMQotI2RlZmluZSBST1RfVFdPICAgICAgICAgMgotI2RlZmluZSBST1RfVEhSRUUgICAgICAgMwotI2RlZmluZSBEVVBfVE9QICAgICAgICAgNAotI2RlZmluZSBEVVBfVE9QX1RXTyAgICAgNQotI2RlZmluZSBOT1AgICAgICAgICAgICAgOQotCi0jZGVmaW5lIFVOQVJZX1BPU0lUSVZFICAxMAotI2RlZmluZSBVTkFSWV9ORUdBVElWRSAgMTEKLSNkZWZpbmUgVU5BUllfTk9UICAgICAgIDEyCi0KLSNkZWZpbmUgVU5BUllfSU5WRVJUICAgIDE1Ci0KLSNkZWZpbmUgQklOQVJZX1BPV0VSICAgIDE5Ci0KLSNkZWZpbmUgQklOQVJZX01VTFRJUExZIDIwCi0KLSNkZWZpbmUgQklOQVJZX01PRFVMTyAgIDIyCi0jZGVmaW5lIEJJTkFSWV9BREQgICAgICAyMwotI2RlZmluZSBCSU5BUllfU1VCVFJBQ1QgMjQKLSNkZWZpbmUgQklOQVJZX1NVQlNDUiAgIDI1Ci0jZGVmaW5lIEJJTkFSWV9GTE9PUl9ESVZJREUgMjYKLSNkZWZpbmUgQklOQVJZX1RSVUVfRElWSURFIDI3Ci0jZGVmaW5lIElOUExBQ0VfRkxPT1JfRElWSURFIDI4Ci0jZGVmaW5lIElOUExBQ0VfVFJVRV9ESVZJREUgMjkKLQotI2RlZmluZSBTVE9SRV9NQVAgICAgICAgNTQKLSNkZWZpbmUgSU5QTEFDRV9BREQgICAgIDU1Ci0jZGVmaW5lIElOUExBQ0VfU1VCVFJBQ1QgICAgICAgIDU2Ci0jZGVmaW5lIElOUExBQ0VfTVVMVElQTFkgICAgICAgIDU3Ci0KLSNkZWZpbmUgSU5QTEFDRV9NT0RVTE8gIDU5Ci0jZGVmaW5lIFNUT1JFX1NVQlNDUiAgICA2MAotI2RlZmluZSBERUxFVEVfU1VCU0NSICAgNjEKLQotI2RlZmluZSBCSU5BUllfTFNISUZUICAgNjIKLSNkZWZpbmUgQklOQVJZX1JTSElGVCAgIDYzCi0jZGVmaW5lIEJJTkFSWV9BTkQgICAgICA2NAotI2RlZmluZSBCSU5BUllfWE9SICAgICAgNjUKLSNkZWZpbmUgQklOQVJZX09SICAgICAgIDY2Ci0jZGVmaW5lIElOUExBQ0VfUE9XRVIgICA2NwotI2RlZmluZSBHRVRfSVRFUiAgICAgICAgNjgKLSNkZWZpbmUgUFJJTlRfRVhQUiAgICAgIDcwCi0jZGVmaW5lIExPQURfQlVJTERfQ0xBU1MgNzEKLSNkZWZpbmUgWUlFTERfRlJPTSAgICAgIDcyCi0KLSNkZWZpbmUgSU5QTEFDRV9MU0hJRlQgIDc1Ci0jZGVmaW5lIElOUExBQ0VfUlNISUZUICA3NgotI2RlZmluZSBJTlBMQUNFX0FORCAgICAgNzcKLSNkZWZpbmUgSU5QTEFDRV9YT1IgICAgIDc4Ci0jZGVmaW5lIElOUExBQ0VfT1IgICAgICA3OQotI2RlZmluZSBCUkVBS19MT09QICAgICAgODAKLSNkZWZpbmUgV0lUSF9DTEVBTlVQICAgIDgxCi0KLSNkZWZpbmUgUkVUVVJOX1ZBTFVFICAgIDgzCi0jZGVmaW5lIElNUE9SVF9TVEFSICAgICA4NAotCi0jZGVmaW5lIFlJRUxEX1ZBTFVFICAgICA4NgotI2RlZmluZSBQT1BfQkxPQ0sgICAgICAgODcKLSNkZWZpbmUgRU5EX0ZJTkFMTFkgICAgIDg4Ci0jZGVmaW5lIFBPUF9FWENFUFQgICAgICA4OQotCi0jZGVmaW5lIEhBVkVfQVJHVU1FTlQgICA5MCAgICAgIC8qIE9wY29kZXMgZnJvbSBoZXJlIGhhdmUgYW4gYXJndW1lbnQ6ICovCi0KLSNkZWZpbmUgU1RPUkVfTkFNRSAgICAgIDkwICAgICAgLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCi0jZGVmaW5lIERFTEVURV9OQU1FICAgICA5MSAgICAgIC8qICIiICovCi0jZGVmaW5lIFVOUEFDS19TRVFVRU5DRSA5MiAgICAgIC8qIE51bWJlciBvZiBzZXF1ZW5jZSBpdGVtcyAqLwotI2RlZmluZSBGT1JfSVRFUiAgICAgICAgOTMKLSNkZWZpbmUgVU5QQUNLX0VYICAgICAgIDk0ICAgICAgLyogTnVtIGl0ZW1zIGJlZm9yZSB2YXJpYWJsZSBwYXJ0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE51bSBpdGVtcyBhZnRlciB2YXJpYWJsZSBwYXJ0IDw8IDgpICovCi0KLSNkZWZpbmUgU1RPUkVfQVRUUiAgICAgIDk1ICAgICAgLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCi0jZGVmaW5lIERFTEVURV9BVFRSICAgICA5NiAgICAgIC8qICIiICovCi0jZGVmaW5lIFNUT1JFX0dMT0JBTCAgICA5NyAgICAgIC8qICIiICovCi0jZGVmaW5lIERFTEVURV9HTE9CQUwgICA5OCAgICAgIC8qICIiICovCi0KLSNkZWZpbmUgTE9BRF9DT05TVCAgICAgIDEwMCAgICAgLyogSW5kZXggaW4gY29uc3QgbGlzdCAqLwotI2RlZmluZSBMT0FEX05BTUUgICAgICAgMTAxICAgICAvKiBJbmRleCBpbiBuYW1lIGxpc3QgKi8KLSNkZWZpbmUgQlVJTERfVFVQTEUgICAgIDEwMiAgICAgLyogTnVtYmVyIG9mIHR1cGxlIGl0ZW1zICovCi0jZGVmaW5lIEJVSUxEX0xJU1QgICAgICAxMDMgICAgIC8qIE51bWJlciBvZiBsaXN0IGl0ZW1zICovCi0jZGVmaW5lIEJVSUxEX1NFVCAgICAgICAxMDQgICAgIC8qIE51bWJlciBvZiBzZXQgaXRlbXMgKi8KLSNkZWZpbmUgQlVJTERfTUFQICAgICAgIDEwNSAgICAgLyogQWx3YXlzIHplcm8gZm9yIG5vdyAqLwotI2RlZmluZSBMT0FEX0FUVFIgICAgICAgMTA2ICAgICAvKiBJbmRleCBpbiBuYW1lIGxpc3QgKi8KLSNkZWZpbmUgQ09NUEFSRV9PUCAgICAgIDEwNyAgICAgLyogQ29tcGFyaXNvbiBvcGVyYXRvciAqLwotI2RlZmluZSBJTVBPUlRfTkFNRSAgICAgMTA4ICAgICAvKiBJbmRleCBpbiBuYW1lIGxpc3QgKi8KLSNkZWZpbmUgSU1QT1JUX0ZST00gICAgIDEwOSAgICAgLyogSW5kZXggaW4gbmFtZSBsaXN0ICovCi0KLSNkZWZpbmUgSlVNUF9GT1JXQVJEICAgIDExMCAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgKi8KLSNkZWZpbmUgSlVNUF9JRl9GQUxTRV9PUl9QT1AgMTExICAgICAgICAvKiBUYXJnZXQgYnl0ZSBvZmZzZXQgZnJvbSBiZWdpbm5pbmcgb2YgY29kZSAqLwotI2RlZmluZSBKVU1QX0lGX1RSVUVfT1JfUE9QIDExMiAvKiAiIiAqLwotI2RlZmluZSBKVU1QX0FCU09MVVRFICAgMTEzICAgICAvKiAiIiAqLwotI2RlZmluZSBQT1BfSlVNUF9JRl9GQUxTRSAxMTQgICAvKiAiIiAqLwotI2RlZmluZSBQT1BfSlVNUF9JRl9UUlVFIDExNSAgICAvKiAiIiAqLwotCi0jZGVmaW5lIExPQURfR0xPQkFMICAgICAxMTYgICAgIC8qIEluZGV4IGluIG5hbWUgbGlzdCAqLwotCi0jZGVmaW5lIENPTlRJTlVFX0xPT1AgICAxMTkgICAgIC8qIFN0YXJ0IG9mIGxvb3AgKGFic29sdXRlKSAqLwotI2RlZmluZSBTRVRVUF9MT09QICAgICAgMTIwICAgICAvKiBUYXJnZXQgYWRkcmVzcyAocmVsYXRpdmUpICovCi0jZGVmaW5lIFNFVFVQX0VYQ0VQVCAgICAxMjEgICAgIC8qICIiICovCi0jZGVmaW5lIFNFVFVQX0ZJTkFMTFkgICAxMjIgICAgIC8qICIiICovCi0KLSNkZWZpbmUgTE9BRF9GQVNUICAgICAgIDEyNCAgICAgLyogTG9jYWwgdmFyaWFibGUgbnVtYmVyICovCi0jZGVmaW5lIFNUT1JFX0ZBU1QgICAgICAxMjUgICAgIC8qIExvY2FsIHZhcmlhYmxlIG51bWJlciAqLwotI2RlZmluZSBERUxFVEVfRkFTVCAgICAgMTI2ICAgICAvKiBMb2NhbCB2YXJpYWJsZSBudW1iZXIgKi8KLQotI2RlZmluZSBSQUlTRV9WQVJBUkdTICAgMTMwICAgICAvKiBOdW1iZXIgb2YgcmFpc2UgYXJndW1lbnRzICgxLCAyIG9yIDMpICovCi0vKiBDQUxMX0ZVTkNUSU9OX1hYWCBvcGNvZGVzIGRlZmluZWQgYmVsb3cgZGVwZW5kIG9uIHRoaXMgZGVmaW5pdGlvbiAqLwotI2RlZmluZSBDQUxMX0ZVTkNUSU9OICAgMTMxICAgICAvKiAjYXJncyArICgja3dhcmdzPDw4KSAqLwotI2RlZmluZSBNQUtFX0ZVTkNUSU9OICAgMTMyICAgICAvKiAjZGVmYXVsdHMgKyAja3dkZWZhdWx0czw8OCArICNhbm5vdGF0aW9uczw8MTYgKi8KLSNkZWZpbmUgQlVJTERfU0xJQ0UgICAgIDEzMyAgICAgLyogTnVtYmVyIG9mIGl0ZW1zICovCi0KLSNkZWZpbmUgTUFLRV9DTE9TVVJFICAgIDEzNCAgICAgLyogc2FtZSBhcyBNQUtFX0ZVTkNUSU9OICovCi0jZGVmaW5lIExPQURfQ0xPU1VSRSAgICAxMzUgICAgIC8qIExvYWQgZnJlZSB2YXJpYWJsZSBmcm9tIGNsb3N1cmUgKi8KLSNkZWZpbmUgTE9BRF9ERVJFRiAgICAgIDEzNiAgICAgLyogTG9hZCBhbmQgZGVyZWZlcmVuY2UgZnJvbSBjbG9zdXJlIGNlbGwgKi8gCi0jZGVmaW5lIFNUT1JFX0RFUkVGICAgICAxMzcgICAgIC8qIFN0b3JlIGludG8gY2VsbCAqLyAKLSNkZWZpbmUgREVMRVRFX0RFUkVGICAgIDEzOCAgICAgLyogRGVsZXRlIGNsb3N1cmUgY2VsbCAqLyAKLQotLyogVGhlIG5leHQgMyBvcGNvZGVzIG11c3QgYmUgY29udGlndW91cyBhbmQgc2F0aXNmeQotICAgKENBTExfRlVOQ1RJT05fVkFSIC0gQ0FMTF9GVU5DVElPTikgJiAzID09IDEgICovCi0jZGVmaW5lIENBTExfRlVOQ1RJT05fVkFSICAgICAgICAgIDE0MCAgLyogI2FyZ3MgKyAoI2t3YXJnczw8OCkgKi8KLSNkZWZpbmUgQ0FMTF9GVU5DVElPTl9LVyAgICAgICAgICAgMTQxICAvKiAjYXJncyArICgja3dhcmdzPDw4KSAqLwotI2RlZmluZSBDQUxMX0ZVTkNUSU9OX1ZBUl9LVyAgICAgICAxNDIgIC8qICNhcmdzICsgKCNrd2FyZ3M8PDgpICovCi0KLSNkZWZpbmUgU0VUVVBfV0lUSCAxNDMKLQotLyogU3VwcG9ydCBmb3Igb3BhcmdzIG1vcmUgdGhhbiAxNiBiaXRzIGxvbmcgKi8KLSNkZWZpbmUgRVhURU5ERURfQVJHICAxNDQKLQotI2RlZmluZSBMSVNUX0FQUEVORCAgICAgMTQ1Ci0jZGVmaW5lIFNFVF9BREQgICAgICAgICAxNDYKLSNkZWZpbmUgTUFQX0FERCAgICAgICAgIDE0NwotCi0jZGVmaW5lIExPQURfQ0xBU1NERVJFRiAgIDE0OAorICAgIC8qIEluc3RydWN0aW9uIG9wY29kZXMgZm9yIGNvbXBpbGVkIGNvZGUgKi8KKyNkZWZpbmUgUE9QX1RPUCAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJPVF9UV08gICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBST1RfVEhSRUUgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRFVQX1RPUCAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIERVUF9UT1BfVFdPICAgICAgICAgICAgICAgNQorI2RlZmluZSBOT1AgICAgICAgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgVU5BUllfUE9TSVRJVkUgICAgICAgICAgIDEwCisjZGVmaW5lIFVOQVJZX05FR0FUSVZFICAgICAgICAgICAxMQorI2RlZmluZSBVTkFSWV9OT1QgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgVU5BUllfSU5WRVJUICAgICAgICAgICAgIDE1CisjZGVmaW5lIEJJTkFSWV9NQVRSSVhfTVVMVElQTFkgICAxNgorI2RlZmluZSBJTlBMQUNFX01BVFJJWF9NVUxUSVBMWSAgMTcKKyNkZWZpbmUgQklOQVJZX1BPV0VSICAgICAgICAgICAgIDE5CisjZGVmaW5lIEJJTkFSWV9NVUxUSVBMWSAgICAgICAgICAyMAorI2RlZmluZSBCSU5BUllfTU9EVUxPICAgICAgICAgICAgMjIKKyNkZWZpbmUgQklOQVJZX0FERCAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIEJJTkFSWV9TVUJUUkFDVCAgICAgICAgICAyNAorI2RlZmluZSBCSU5BUllfU1VCU0NSICAgICAgICAgICAgMjUKKyNkZWZpbmUgQklOQVJZX0ZMT09SX0RJVklERSAgICAgIDI2CisjZGVmaW5lIEJJTkFSWV9UUlVFX0RJVklERSAgICAgICAyNworI2RlZmluZSBJTlBMQUNFX0ZMT09SX0RJVklERSAgICAgMjgKKyNkZWZpbmUgSU5QTEFDRV9UUlVFX0RJVklERSAgICAgIDI5CisjZGVmaW5lIEdFVF9BSVRFUiAgICAgICAgICAgICAgICA1MAorI2RlZmluZSBHRVRfQU5FWFQgICAgICAgICAgICAgICAgNTEKKyNkZWZpbmUgQkVGT1JFX0FTWU5DX1dJVEggICAgICAgIDUyCisjZGVmaW5lIElOUExBQ0VfQUREICAgICAgICAgICAgICA1NQorI2RlZmluZSBJTlBMQUNFX1NVQlRSQUNUICAgICAgICAgNTYKKyNkZWZpbmUgSU5QTEFDRV9NVUxUSVBMWSAgICAgICAgIDU3CisjZGVmaW5lIElOUExBQ0VfTU9EVUxPICAgICAgICAgICA1OQorI2RlZmluZSBTVE9SRV9TVUJTQ1IgICAgICAgICAgICAgNjAKKyNkZWZpbmUgREVMRVRFX1NVQlNDUiAgICAgICAgICAgIDYxCisjZGVmaW5lIEJJTkFSWV9MU0hJRlQgICAgICAgICAgICA2MgorI2RlZmluZSBCSU5BUllfUlNISUZUICAgICAgICAgICAgNjMKKyNkZWZpbmUgQklOQVJZX0FORCAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEJJTkFSWV9YT1IgICAgICAgICAgICAgICA2NQorI2RlZmluZSBCSU5BUllfT1IgICAgICAgICAgICAgICAgNjYKKyNkZWZpbmUgSU5QTEFDRV9QT1dFUiAgICAgICAgICAgIDY3CisjZGVmaW5lIEdFVF9JVEVSICAgICAgICAgICAgICAgICA2OAorI2RlZmluZSBHRVRfWUlFTERfRlJPTV9JVEVSICAgICAgNjkKKyNkZWZpbmUgUFJJTlRfRVhQUiAgICAgICAgICAgICAgIDcwCisjZGVmaW5lIExPQURfQlVJTERfQ0xBU1MgICAgICAgICA3MQorI2RlZmluZSBZSUVMRF9GUk9NICAgICAgICAgICAgICAgNzIKKyNkZWZpbmUgR0VUX0FXQUlUQUJMRSAgICAgICAgICAgIDczCisjZGVmaW5lIElOUExBQ0VfTFNISUZUICAgICAgICAgICA3NQorI2RlZmluZSBJTlBMQUNFX1JTSElGVCAgICAgICAgICAgNzYKKyNkZWZpbmUgSU5QTEFDRV9BTkQgICAgICAgICAgICAgIDc3CisjZGVmaW5lIElOUExBQ0VfWE9SICAgICAgICAgICAgICA3OAorI2RlZmluZSBJTlBMQUNFX09SICAgICAgICAgICAgICAgNzkKKyNkZWZpbmUgQlJFQUtfTE9PUCAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIFdJVEhfQ0xFQU5VUF9TVEFSVCAgICAgICA4MQorI2RlZmluZSBXSVRIX0NMRUFOVVBfRklOSVNIICAgICAgODIKKyNkZWZpbmUgUkVUVVJOX1ZBTFVFICAgICAgICAgICAgIDgzCisjZGVmaW5lIElNUE9SVF9TVEFSICAgICAgICAgICAgICA4NAorI2RlZmluZSBZSUVMRF9WQUxVRSAgICAgICAgICAgICAgODYKKyNkZWZpbmUgUE9QX0JMT0NLICAgICAgICAgICAgICAgIDg3CisjZGVmaW5lIEVORF9GSU5BTExZICAgICAgICAgICAgICA4OAorI2RlZmluZSBQT1BfRVhDRVBUICAgICAgICAgICAgICAgODkKKyNkZWZpbmUgSEFWRV9BUkdVTUVOVCAgICAgICAgICAgIDkwCisjZGVmaW5lIFNUT1JFX05BTUUgICAgICAgICAgICAgICA5MAorI2RlZmluZSBERUxFVEVfTkFNRSAgICAgICAgICAgICAgOTEKKyNkZWZpbmUgVU5QQUNLX1NFUVVFTkNFICAgICAgICAgIDkyCisjZGVmaW5lIEZPUl9JVEVSICAgICAgICAgICAgICAgICA5MworI2RlZmluZSBVTlBBQ0tfRVggICAgICAgICAgICAgICAgOTQKKyNkZWZpbmUgU1RPUkVfQVRUUiAgICAgICAgICAgICAgIDk1CisjZGVmaW5lIERFTEVURV9BVFRSICAgICAgICAgICAgICA5NgorI2RlZmluZSBTVE9SRV9HTE9CQUwgICAgICAgICAgICAgOTcKKyNkZWZpbmUgREVMRVRFX0dMT0JBTCAgICAgICAgICAgIDk4CisjZGVmaW5lIExPQURfQ09OU1QgICAgICAgICAgICAgIDEwMAorI2RlZmluZSBMT0FEX05BTUUgICAgICAgICAgICAgICAxMDEKKyNkZWZpbmUgQlVJTERfVFVQTEUgICAgICAgICAgICAgMTAyCisjZGVmaW5lIEJVSUxEX0xJU1QgICAgICAgICAgICAgIDEwMworI2RlZmluZSBCVUlMRF9TRVQgICAgICAgICAgICAgICAxMDQKKyNkZWZpbmUgQlVJTERfTUFQICAgICAgICAgICAgICAgMTA1CisjZGVmaW5lIExPQURfQVRUUiAgICAgICAgICAgICAgIDEwNgorI2RlZmluZSBDT01QQVJFX09QICAgICAgICAgICAgICAxMDcKKyNkZWZpbmUgSU1QT1JUX05BTUUgICAgICAgICAgICAgMTA4CisjZGVmaW5lIElNUE9SVF9GUk9NICAgICAgICAgICAgIDEwOQorI2RlZmluZSBKVU1QX0ZPUldBUkQgICAgICAgICAgICAxMTAKKyNkZWZpbmUgSlVNUF9JRl9GQUxTRV9PUl9QT1AgICAgMTExCisjZGVmaW5lIEpVTVBfSUZfVFJVRV9PUl9QT1AgICAgIDExMgorI2RlZmluZSBKVU1QX0FCU09MVVRFICAgICAgICAgICAxMTMKKyNkZWZpbmUgUE9QX0pVTVBfSUZfRkFMU0UgICAgICAgMTE0CisjZGVmaW5lIFBPUF9KVU1QX0lGX1RSVUUgICAgICAgIDExNQorI2RlZmluZSBMT0FEX0dMT0JBTCAgICAgICAgICAgICAxMTYKKyNkZWZpbmUgQ09OVElOVUVfTE9PUCAgICAgICAgICAgMTE5CisjZGVmaW5lIFNFVFVQX0xPT1AgICAgICAgICAgICAgIDEyMAorI2RlZmluZSBTRVRVUF9FWENFUFQgICAgICAgICAgICAxMjEKKyNkZWZpbmUgU0VUVVBfRklOQUxMWSAgICAgICAgICAgMTIyCisjZGVmaW5lIExPQURfRkFTVCAgICAgICAgICAgICAgIDEyNAorI2RlZmluZSBTVE9SRV9GQVNUICAgICAgICAgICAgICAxMjUKKyNkZWZpbmUgREVMRVRFX0ZBU1QgICAgICAgICAgICAgMTI2CisjZGVmaW5lIFJBSVNFX1ZBUkFSR1MgICAgICAgICAgIDEzMAorI2RlZmluZSBDQUxMX0ZVTkNUSU9OICAgICAgICAgICAxMzEKKyNkZWZpbmUgTUFLRV9GVU5DVElPTiAgICAgICAgICAgMTMyCisjZGVmaW5lIEJVSUxEX1NMSUNFICAgICAgICAgICAgIDEzMworI2RlZmluZSBNQUtFX0NMT1NVUkUgICAgICAgICAgICAxMzQKKyNkZWZpbmUgTE9BRF9DTE9TVVJFICAgICAgICAgICAgMTM1CisjZGVmaW5lIExPQURfREVSRUYgICAgICAgICAgICAgIDEzNgorI2RlZmluZSBTVE9SRV9ERVJFRiAgICAgICAgICAgICAxMzcKKyNkZWZpbmUgREVMRVRFX0RFUkVGICAgICAgICAgICAgMTM4CisjZGVmaW5lIENBTExfRlVOQ1RJT05fVkFSICAgICAgIDE0MAorI2RlZmluZSBDQUxMX0ZVTkNUSU9OX0tXICAgICAgICAxNDEKKyNkZWZpbmUgQ0FMTF9GVU5DVElPTl9WQVJfS1cgICAgMTQyCisjZGVmaW5lIFNFVFVQX1dJVEggICAgICAgICAgICAgIDE0MworI2RlZmluZSBFWFRFTkRFRF9BUkcgICAgICAgICAgICAxNDQKKyNkZWZpbmUgTElTVF9BUFBFTkQgICAgICAgICAgICAgMTQ1CisjZGVmaW5lIFNFVF9BREQgICAgICAgICAgICAgICAgIDE0NgorI2RlZmluZSBNQVBfQUREICAgICAgICAgICAgICAgICAxNDcKKyNkZWZpbmUgTE9BRF9DTEFTU0RFUkVGICAgICAgICAgMTQ4CisjZGVmaW5lIEJVSUxEX0xJU1RfVU5QQUNLICAgICAgIDE0OQorI2RlZmluZSBCVUlMRF9NQVBfVU5QQUNLICAgICAgICAxNTAKKyNkZWZpbmUgQlVJTERfTUFQX1VOUEFDS19XSVRIX0NBTEwgMTUxCisjZGVmaW5lIEJVSUxEX1RVUExFX1VOUEFDSyAgICAgIDE1MgorI2RlZmluZSBCVUlMRF9TRVRfVU5QQUNLICAgICAgICAxNTMKKyNkZWZpbmUgU0VUVVBfQVNZTkNfV0lUSCAgICAgICAgMTU0CiAKIC8qIEVYQ0VQVF9IQU5ETEVSIGlzIGEgc3BlY2lhbCwgaW1wbGljaXQgYmxvY2sgdHlwZSB3aGljaCBpcyBjcmVhdGVkIHdoZW4KICAgIGVudGVyaW5nIGFuIGV4Y2VwdCBoYW5kbGVyLiBJdCBpcyBub3QgYW4gb3Bjb2RlIGJ1dCB3ZSBkZWZpbmUgaXQgaGVyZQpAQCAtMTQ4LDggKzEzMCw5IEBACiAjZGVmaW5lIEVYQ0VQVF9IQU5ETEVSIDI1NwogCiAKLWVudW0gY21wX29wIHtQeUNtcF9MVD1QeV9MVCwgUHlDbXBfTEU9UHlfTEUsIFB5Q21wX0VRPVB5X0VRLCBQeUNtcF9ORT1QeV9ORSwgUHlDbXBfR1Q9UHlfR1QsIFB5Q21wX0dFPVB5X0dFLAotICAgICAgICAgICAgIFB5Q21wX0lOLCBQeUNtcF9OT1RfSU4sIFB5Q21wX0lTLCBQeUNtcF9JU19OT1QsIFB5Q21wX0VYQ19NQVRDSCwgUHlDbXBfQkFEfTsKK2VudW0gY21wX29wIHtQeUNtcF9MVD1QeV9MVCwgUHlDbXBfTEU9UHlfTEUsIFB5Q21wX0VRPVB5X0VRLCBQeUNtcF9ORT1QeV9ORSwKKyAgICAgICAgICAgICAgICBQeUNtcF9HVD1QeV9HVCwgUHlDbXBfR0U9UHlfR0UsIFB5Q21wX0lOLCBQeUNtcF9OT1RfSU4sCisgICAgICAgICAgICAgICAgUHlDbXBfSVMsIFB5Q21wX0lTX05PVCwgUHlDbXBfRVhDX01BVENILCBQeUNtcF9CQUR9OwogCiAjZGVmaW5lIEhBU19BUkcob3ApICgob3ApID49IEhBVkVfQVJHVU1FTlQpCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb3NkZWZzLmggYi9JbmNsdWRlL29zZGVmcy5oCmluZGV4IDBjMmUzNGIuLmJkODRjMWMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb3NkZWZzLmgKKysrIGIvSW5jbHVkZS9vc2RlZnMuaApAQCAtNywxNSArNywxMiBAQAogCiAvKiBPcGVyYXRpbmcgc3lzdGVtIGRlcGVuZGVuY2llcyAqLwogCi0vKiBNb2QgYnkgY2hyaXNoOiBRTlggaGFzIFdBVENPTSwgYnV0IGlzbid0IERPUyAqLwotI2lmICFkZWZpbmVkKF9fUU5YX18pCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykgfHwgZGVmaW5lZChfX1dBVENPTUNfXykgfHwgZGVmaW5lZChfX0RKR1BQX18pCisjaWZkZWYgTVNfV0lORE9XUwogI2RlZmluZSBTRVAgTCdcXCcKICNkZWZpbmUgQUxUU0VQIEwnLycKICNkZWZpbmUgTUFYUEFUSExFTiAyNTYKICNkZWZpbmUgREVMSU0gTCc7JwogI2VuZGlmCi0jZW5kaWYKIAogLyogRmlsZW5hbWUgc2VwYXJhdG9yICovCiAjaWZuZGVmIFNFUApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9wYXRjaGxldmVsLmggYi9JbmNsdWRlL3BhdGNobGV2ZWwuaAppbmRleCBmYjc5MmExLi40NWU1NzM2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhdGNobGV2ZWwuaAorKysgYi9JbmNsdWRlL3BhdGNobGV2ZWwuaApAQCAtMTcsMTMgKzE3LDEzIEBACiAvKiBWZXJzaW9uIHBhcnNlZCBvdXQgaW50byBudW1lcmljIHZhbHVlcyAqLwogLyotLXN0YXJ0IGNvbnN0YW50cy0tKi8KICNkZWZpbmUgUFlfTUFKT1JfVkVSU0lPTgkzCi0jZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JNAotI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTUKKyNkZWZpbmUgUFlfTUlOT1JfVkVSU0lPTgk1CisjZGVmaW5lIFBZX01JQ1JPX1ZFUlNJT04JMgogI2RlZmluZSBQWV9SRUxFQVNFX0xFVkVMCVBZX1JFTEVBU0VfTEVWRUxfRklOQUwKICNkZWZpbmUgUFlfUkVMRUFTRV9TRVJJQUwJMAogCiAvKiBWZXJzaW9uIGFzIGEgc3RyaW5nICovCi0jZGVmaW5lIFBZX1ZFUlNJT04gICAgICAJIjMuNC41KyIKKyNkZWZpbmUgUFlfVkVSU0lPTiAgICAgIAkiMy41LjIrIgogLyotLWVuZCBjb25zdGFudHMtLSovCiAKIC8qIFZlcnNpb24gYXMgYSBzaW5nbGUgNC1ieXRlIGhleCBudW1iZXIsIGUuZy4gMHgwMTA1MDJCMiA9PSAxLjUuMmIyLgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWF0b21pYy5oIGIvSW5jbHVkZS9weWF0b21pYy5oCmluZGV4IGQ0ZTE5ZTAuLjg5MDI4ZWYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlhdG9taWMuaAorKysgYi9JbmNsdWRlL3B5YXRvbWljLmgKQEAgLTEsMTQgKzEsMTMgQEAKLSNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNpZm5kZWYgUHlfQVRPTUlDX0gKICNkZWZpbmUgUHlfQVRPTUlDX0gKLS8qIFhYWDogV2hlbiBjb21waWxlcnMgc3RhcnQgb2ZmZXJpbmcgYSBzdGRhdG9taWMuaCB3aXRoIGxvY2stZnJlZQotICAgYXRvbWljX2ludCBhbmQgYXRvbWljX2FkZHJlc3MgdHlwZXMsIGluY2x1ZGUgdGhhdCBoZXJlIGFuZCByZXdyaXRlCi0gICB0aGUgYXRvbWljIG9wZXJhdGlvbnMgaW4gdGVybXMgb2YgaXQuICovCisjaWZkZWYgUHlfQlVJTERfQ09SRQogCiAjaW5jbHVkZSAiZHluYW1pY19hbm5vdGF0aW9ucy5oIgogCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgeworI2luY2x1ZGUgInB5Y29uZmlnLmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfU1REX0FUT01JQykKKyNpbmNsdWRlIDxzdGRhdG9taWMuaD4KICNlbmRpZgogCiAvKiBUaGlzIGlzIG1vZGVsZWQgYWZ0ZXIgdGhlIGF0b21pY3MgaW50ZXJmYWNlIGZyb20gQzF4LCBhY2NvcmRpbmcgdG8KQEAgLTIwLDYgKzE5LDc2IEBACiAgKiBCZXdhcmUsIHRoZSBpbXBsZW1lbnRhdGlvbnMgaGVyZSBhcmUgZGVlcCBtYWdpYy4KICAqLwogCisjaWYgZGVmaW5lZChIQVZFX1NURF9BVE9NSUMpCisKK3R5cGVkZWYgZW51bSBfUHlfbWVtb3J5X29yZGVyIHsKKyAgICBfUHlfbWVtb3J5X29yZGVyX3JlbGF4ZWQgPSBtZW1vcnlfb3JkZXJfcmVsYXhlZCwKKyAgICBfUHlfbWVtb3J5X29yZGVyX2FjcXVpcmUgPSBtZW1vcnlfb3JkZXJfYWNxdWlyZSwKKyAgICBfUHlfbWVtb3J5X29yZGVyX3JlbGVhc2UgPSBtZW1vcnlfb3JkZXJfcmVsZWFzZSwKKyAgICBfUHlfbWVtb3J5X29yZGVyX2FjcV9yZWwgPSBtZW1vcnlfb3JkZXJfYWNxX3JlbCwKKyAgICBfUHlfbWVtb3J5X29yZGVyX3NlcV9jc3QgPSBtZW1vcnlfb3JkZXJfc2VxX2NzdAorfSBfUHlfbWVtb3J5X29yZGVyOworCit0eXBlZGVmIHN0cnVjdCBfUHlfYXRvbWljX2FkZHJlc3MgeworICAgIGF0b21pY191aW50cHRyX3QgX3ZhbHVlOworfSBfUHlfYXRvbWljX2FkZHJlc3M7CisKK3R5cGVkZWYgc3RydWN0IF9QeV9hdG9taWNfaW50IHsKKyAgICBhdG9taWNfaW50IF92YWx1ZTsKK30gX1B5X2F0b21pY19pbnQ7CisKKyNkZWZpbmUgX1B5X2F0b21pY19zaWduYWxfZmVuY2UoLyptZW1vcnlfb3JkZXIqLyBPUkRFUikgXAorICAgIGF0b21pY19zaWduYWxfZmVuY2UoT1JERVIpCisKKyNkZWZpbmUgX1B5X2F0b21pY190aHJlYWRfZmVuY2UoLyptZW1vcnlfb3JkZXIqLyBPUkRFUikgXAorICAgIGF0b21pY190aHJlYWRfZmVuY2UoT1JERVIpCisKKyNkZWZpbmUgX1B5X2F0b21pY19zdG9yZV9leHBsaWNpdChBVE9NSUNfVkFMLCBORVdfVkFMLCBPUkRFUikgXAorICAgIGF0b21pY19zdG9yZV9leHBsaWNpdCgmKEFUT01JQ19WQUwpLT5fdmFsdWUsIE5FV19WQUwsIE9SREVSKQorCisjZGVmaW5lIF9QeV9hdG9taWNfbG9hZF9leHBsaWNpdChBVE9NSUNfVkFMLCBPUkRFUikgXAorICAgIGF0b21pY19sb2FkX2V4cGxpY2l0KCYoQVRPTUlDX1ZBTCktPl92YWx1ZSwgT1JERVIpCisKKy8qIFVzZSBidWlsdGluIGF0b21pYyBvcGVyYXRpb25zIGluIEdDQyA+PSA0LjcgKi8KKyNlbGlmIGRlZmluZWQoSEFWRV9CVUlMVElOX0FUT01JQykKKwordHlwZWRlZiBlbnVtIF9QeV9tZW1vcnlfb3JkZXIgeworICAgIF9QeV9tZW1vcnlfb3JkZXJfcmVsYXhlZCA9IF9fQVRPTUlDX1JFTEFYRUQsCisgICAgX1B5X21lbW9yeV9vcmRlcl9hY3F1aXJlID0gX19BVE9NSUNfQUNRVUlSRSwKKyAgICBfUHlfbWVtb3J5X29yZGVyX3JlbGVhc2UgPSBfX0FUT01JQ19SRUxFQVNFLAorICAgIF9QeV9tZW1vcnlfb3JkZXJfYWNxX3JlbCA9IF9fQVRPTUlDX0FDUV9SRUwsCisgICAgX1B5X21lbW9yeV9vcmRlcl9zZXFfY3N0ID0gX19BVE9NSUNfU0VRX0NTVAorfSBfUHlfbWVtb3J5X29yZGVyOworCit0eXBlZGVmIHN0cnVjdCBfUHlfYXRvbWljX2FkZHJlc3MgeworICAgIFB5X3VpbnRwdHJfdCBfdmFsdWU7Cit9IF9QeV9hdG9taWNfYWRkcmVzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1B5X2F0b21pY19pbnQgeworICAgIGludCBfdmFsdWU7Cit9IF9QeV9hdG9taWNfaW50OworCisjZGVmaW5lIF9QeV9hdG9taWNfc2lnbmFsX2ZlbmNlKC8qbWVtb3J5X29yZGVyKi8gT1JERVIpIFwKKyAgICBfX2F0b21pY19zaWduYWxfZmVuY2UoT1JERVIpCisKKyNkZWZpbmUgX1B5X2F0b21pY190aHJlYWRfZmVuY2UoLyptZW1vcnlfb3JkZXIqLyBPUkRFUikgXAorICAgIF9fYXRvbWljX3RocmVhZF9mZW5jZShPUkRFUikKKworI2RlZmluZSBfUHlfYXRvbWljX3N0b3JlX2V4cGxpY2l0KEFUT01JQ19WQUwsIE5FV19WQUwsIE9SREVSKSBcCisgICAgKGFzc2VydCgoT1JERVIpID09IF9fQVRPTUlDX1JFTEFYRUQgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHx8IChPUkRFUikgPT0gX19BVE9NSUNfU0VRX0NTVCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfHwgKE9SREVSKSA9PSBfX0FUT01JQ19SRUxFQVNFKSwgICAgICAgICAgICAgICAgICBcCisgICAgIF9fYXRvbWljX3N0b3JlX24oJihBVE9NSUNfVkFMKS0+X3ZhbHVlLCBORVdfVkFMLCBPUkRFUikpCisKKyNkZWZpbmUgX1B5X2F0b21pY19sb2FkX2V4cGxpY2l0KEFUT01JQ19WQUwsIE9SREVSKSAgICAgICAgICAgXAorICAgIChhc3NlcnQoKE9SREVSKSA9PSBfX0FUT01JQ19SRUxBWEVEICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB8fCAoT1JERVIpID09IF9fQVRPTUlDX1NFUV9DU1QgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHx8IChPUkRFUikgPT0gX19BVE9NSUNfQUNRVUlSRSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfHwgKE9SREVSKSA9PSBfX0FUT01JQ19DT05TVU1FKSwgICAgICAgICAgICAgICAgICBcCisgICAgIF9fYXRvbWljX2xvYWRfbigmKEFUT01JQ19WQUwpLT5fdmFsdWUsIE9SREVSKSkKKworI2Vsc2UKKwogdHlwZWRlZiBlbnVtIF9QeV9tZW1vcnlfb3JkZXIgewogICAgIF9QeV9tZW1vcnlfb3JkZXJfcmVsYXhlZCwKICAgICBfUHlfbWVtb3J5X29yZGVyX2FjcXVpcmUsCkBAIC0yOSw3ICs5OCw3IEBACiB9IF9QeV9tZW1vcnlfb3JkZXI7CiAKIHR5cGVkZWYgc3RydWN0IF9QeV9hdG9taWNfYWRkcmVzcyB7Ci0gICAgdm9pZCAqX3ZhbHVlOworICAgIFB5X3VpbnRwdHJfdCBfdmFsdWU7CiB9IF9QeV9hdG9taWNfYWRkcmVzczsKIAogdHlwZWRlZiBzdHJ1Y3QgX1B5X2F0b21pY19pbnQgewpAQCAtMTYyLDYgKzIzMSw3IEBACiAgICAgKChBVE9NSUNfVkFMKS0+X3ZhbHVlKQogCiAjZW5kaWYgIC8qICFnY2MgeDg2ICovCisjZW5kaWYKIAogLyogU3RhbmRhcmRpemVkIHNob3J0Y3V0cy4gKi8KICNkZWZpbmUgX1B5X2F0b21pY19zdG9yZShBVE9NSUNfVkFMLCBORVdfVkFMKSBcCkBAIC0xNzYsOSArMjQ2LDUgQEAKICNkZWZpbmUgX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoQVRPTUlDX1ZBTCkgXAogICAgIF9QeV9hdG9taWNfbG9hZF9leHBsaWNpdChBVE9NSUNfVkFMLCBfUHlfbWVtb3J5X29yZGVyX3JlbGF4ZWQpCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KKyNlbmRpZiAgLyogUHlfQlVJTERfQ09SRSAqLwogI2VuZGlmICAvKiBQeV9BVE9NSUNfSCAqLwotI2VuZGlmICAvKiBQeV9MSU1JVEVEX0FQSSAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWRlYnVnLmggYi9JbmNsdWRlL3B5ZGVidWcuaAppbmRleCA4ZmU5ODE4Li4xOWJlYzJiIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZGVidWcuaAorKysgYi9JbmNsdWRlL3B5ZGVidWcuaApAQCAtNSw2ICs1LDggQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKy8qIFRoZXNlIGdsb2JhbCB2YXJpYWJsZSBhcmUgZGVmaW5lZCBpbiBweWxpZmVjeWNsZS5jICovCisvKiBYWFggKG5jb2dobGFuKTogbW92ZSB0aGVzZSBkZWNsYXJhdGlvbnMgdG8gcHlsaWZlY3ljbGUuaD8gKi8KIFB5QVBJX0RBVEEoaW50KSBQeV9EZWJ1Z0ZsYWc7CiBQeUFQSV9EQVRBKGludCkgUHlfVmVyYm9zZUZsYWc7CiBQeUFQSV9EQVRBKGludCkgUHlfUXVpZXRGbGFnOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWVycm9ycy5oIGIvSW5jbHVkZS9weWVycm9ycy5oCmluZGV4IDAyZjY1ZDYuLjM1YWVkYjcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHllcnJvcnMuaAorKysgYi9JbmNsdWRlL3B5ZXJyb3JzLmgKQEAgLTk5LDYgKzk5LDcgQEAKICNkZWZpbmUgX1B5X05PX1JFVFVSTgogI2VuZGlmCiAKKy8qIERlZmluZWQgaW4gUHl0aG9uL3B5bGlmZWN5Y2xlLmMgKi8KIFB5QVBJX0ZVTkModm9pZCkgUHlfRmF0YWxFcnJvcihjb25zdCBjaGFyICptZXNzYWdlKSBfUHlfTk9fUkVUVVJOOwogCiAjaWYgZGVmaW5lZChQeV9ERUJVRykgfHwgZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkKQEAgLTE0Niw2ICsxNDcsNyBAQAogCiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX0Jhc2VFeGNlcHRpb247CiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX0V4Y2VwdGlvbjsKK1B5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfU3RvcEFzeW5jSXRlcmF0aW9uOwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19TdG9wSXRlcmF0aW9uOwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19HZW5lcmF0b3JFeGl0OwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19Bcml0aG1ldGljRXJyb3I7CkBAIC0xNjUsNiArMTY3LDcgQEAKIFB5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfTmFtZUVycm9yOwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19PdmVyZmxvd0Vycm9yOwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19SdW50aW1lRXJyb3I7CitQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX1JlY3Vyc2lvbkVycm9yOwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yOwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19TeW50YXhFcnJvcjsKIFB5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfSW5kZW50YXRpb25FcnJvcjsKQEAgLTI0NCw2ICsyNDcsMTIgQEAKICAgICBjb25zdCBjaGFyICpmb3JtYXQsICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgICovCiAgICAgLi4uCiAgICAgKTsKKyNpZiAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDUwMDAwCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX0Zvcm1hdFYoCisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwKKyAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgdmFfbGlzdCB2YXJncyk7CisjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bGlmZWN5Y2xlLmggYi9JbmNsdWRlL3B5bGlmZWN5Y2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkZWJlMgotLS0gL2Rldi9udWxsCisrKyBiL0luY2x1ZGUvcHlsaWZlY3ljbGUuaApAQCAtMCwwICsxLDEyNCBAQAorCisvKiBJbnRlcmZhY2VzIHRvIGNvbmZpZ3VyZSwgcXVlcnksIGNyZWF0ZSAmIGRlc3Ryb3kgdGhlIFB5dGhvbiBydW50aW1lICovCisKKyNpZm5kZWYgUHlfUFlMSUZFQ1lDTEVfSAorI2RlZmluZSBQeV9QWUxJRkVDWUNMRV9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK1B5QVBJX0ZVTkModm9pZCkgUHlfU2V0UHJvZ3JhbU5hbWUod2NoYXJfdCAqKTsKK1B5QVBJX0ZVTkMod2NoYXJfdCAqKSBQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKKworUHlBUElfRlVOQyh2b2lkKSBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKik7CitQeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0UHl0aG9uSG9tZSh2b2lkKTsKKworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorLyogT25seSB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGVtYmVkIHRoZSBpbnRlcnByZXRlciBhbmQgbmVlZCB0bworICogb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGVuY29kaW5nIGRldGVybWluYXRpb24gbWVjaGFuaXNtCisgKi8KK1B5QVBJX0ZVTkMoaW50KSBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKyNlbmRpZgorCitQeUFQSV9GVU5DKHZvaWQpIFB5X0luaXRpYWxpemUodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIFB5X0luaXRpYWxpemVFeChpbnQpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyh2b2lkKSBfUHlfSW5pdGlhbGl6ZUV4X1ByaXZhdGUoaW50LCBpbnQpOworI2VuZGlmCitQeUFQSV9GVU5DKHZvaWQpIFB5X0ZpbmFsaXplKHZvaWQpOworUHlBUElfRlVOQyhpbnQpIFB5X0lzSW5pdGlhbGl6ZWQodm9pZCk7CitQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlfTmV3SW50ZXJwcmV0ZXIodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIFB5X0VuZEludGVycHJldGVyKFB5VGhyZWFkU3RhdGUgKik7CisKKworLyogUHlfUHlBdEV4aXQgaXMgZm9yIHRoZSBhdGV4aXQgbW9kdWxlLCBQeV9BdEV4aXQgaXMgZm9yIGxvdy1sZXZlbAorICogZXhpdCBmdW5jdGlvbnMuCisgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCkgX1B5X1B5QXRFeGl0KHZvaWQgKCpmdW5jKSh2b2lkKSk7CisjZW5kaWYKK1B5QVBJX0ZVTkMoaW50KSBQeV9BdEV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKTsKKworUHlBUElfRlVOQyh2b2lkKSBQeV9FeGl0KGludCk7CisKKy8qIFJlc3RvcmUgc2lnbmFscyB0aGF0IHRoZSBpbnRlcnByZXRlciBoYXMgY2FsbGVkIFNJR19JR04gb24gdG8gU0lHX0RGTC4gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCkgX1B5X1Jlc3RvcmVTaWduYWxzKHZvaWQpOworCitQeUFQSV9GVU5DKGludCkgUHlfRmRJc0ludGVyYWN0aXZlKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisvKiBCb290c3RyYXAgX19tYWluX18gKGRlZmluZWQgaW4gTW9kdWxlcy9tYWluLmMpICovCitQeUFQSV9GVU5DKGludCkgUHlfTWFpbihpbnQgYXJnYywgd2NoYXJfdCAqKmFyZ3YpOworCisvKiBJbiBnZXRwYXRoLmMgKi8KK1B5QVBJX0ZVTkMod2NoYXJfdCAqKSBQeV9HZXRQcm9ncmFtRnVsbFBhdGgodm9pZCk7CitQeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0UHJlZml4KHZvaWQpOworUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldEV4ZWNQcmVmaXgodm9pZCk7CitQeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0UGF0aCh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgICAgICBQeV9TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKik7CisjaWZkZWYgTVNfV0lORE9XUworaW50IF9QeV9DaGVja1B5dGhvbjMoKTsKKyNlbmRpZgorCisvKiBJbiB0aGVpciBvd24gZmlsZXMgKi8KK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRWZXJzaW9uKHZvaWQpOworUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFBsYXRmb3JtKHZvaWQpOworUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvcHlyaWdodCh2b2lkKTsKK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgX1B5X2hnaWRlbnRpZmllcih2b2lkKTsKK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBfUHlfaGd2ZXJzaW9uKHZvaWQpOworI2VuZGlmCisKKy8qIEludGVybmFsIC0tIHZhcmlvdXMgb25lLXRpbWUgaW5pdGlhbGl6YXRpb25zICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUJ1aWx0aW5fSW5pdCh2b2lkKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U3lzX0luaXQodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeUltcG9ydF9Jbml0KHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlFeGNfSW5pdChQeU9iamVjdCAqIGJsdGlubW9kKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5SW1wb3J0SG9va3NfSW5pdCh2b2lkKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlGcmFtZV9Jbml0KHZvaWQpOworUHlBUElfRlVOQyhpbnQpIF9QeUZsb2F0X0luaXQodm9pZCk7CitQeUFQSV9GVU5DKGludCkgUHlCeXRlQXJyYXlfSW5pdCh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5UmFuZG9tX0luaXQodm9pZCk7CisjZW5kaWYKKworLyogVmFyaW91cyBpbnRlcm5hbCBmaW5hbGl6ZXJzICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeUV4Y19GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRfRmluaSh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlNZXRob2RfRmluaSh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlGcmFtZV9GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBQeUNGdW5jdGlvbl9GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBQeURpY3RfRmluaSh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlUdXBsZV9GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBQeUxpc3RfRmluaSh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlTZXRfRmluaSh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlCeXRlc19GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBQeUJ5dGVBcnJheV9GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBQeUZsb2F0X0Zpbmkodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIFB5T1NfRmluaUludGVycnVwdHModm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeUdDX0R1bXBTaHV0ZG93blN0YXRzKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlHQ19GaW5pKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBQeVNsaWNlX0Zpbmkodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVR5cGVfRmluaSh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5UmFuZG9tX0Zpbmkodm9pZCk7CisKK1B5QVBJX0RBVEEoUHlUaHJlYWRTdGF0ZSAqKSBfUHlfRmluYWxpemluZzsKKyNlbmRpZgorCisvKiBTaWduYWxzICovCit0eXBlZGVmIHZvaWQgKCpQeU9TX3NpZ2hhbmRsZXJfdCkoaW50KTsKK1B5QVBJX0ZVTkMoUHlPU19zaWdoYW5kbGVyX3QpIFB5T1NfZ2V0c2lnKGludCk7CitQeUFQSV9GVU5DKFB5T1Nfc2lnaGFuZGxlcl90KSBQeU9TX3NldHNpZyhpbnQsIFB5T1Nfc2lnaGFuZGxlcl90KTsKKworLyogUmFuZG9tICovCitQeUFQSV9GVU5DKGludCkgX1B5T1NfVVJhbmRvbSAodm9pZCAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qICFQeV9QWUxJRkVDWUNMRV9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWFjY29uZmlnLmggYi9JbmNsdWRlL3B5bWFjY29uZmlnLmgKaW5kZXggMjRlN2I4ZC4uMGMyOGY1YyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1hY2NvbmZpZy5oCisrKyBiL0luY2x1ZGUvcHltYWNjb25maWcuaApAQCAtNjYsNyArNjYsNyBAQAogICAgICAgKiBUaGVyZWZvcmUgc3VycHJlc3MgdGhlIHRvb2xib3gtZ2x1ZSBpbiA2NC1iaXQgbW9kZS4KICAgICAgICovCiAKLSAgICAvKiBJbiA2NC1iaXQgbW9kZSBzZXRwZ3JwIGFsd2F5cyBoYXMgbm8gYXJnbWVudHMsIGluIDMyLWJpdAorICAgIC8qIEluIDY0LWJpdCBtb2RlIHNldHBncnAgYWx3YXlzIGhhcyBubyBhcmd1bWVudHMsIGluIDMyLWJpdAogICAgICAqIG1vZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudAogICAgICAqLwogIyAgICAgICB1bmRlZiBTRVRQR1JQX0hBVkVfQVJHCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWFjcm8uaCBiL0luY2x1ZGUvcHltYWNyby5oCmluZGV4IDc5OTdjNTUuLjNmNmY1ZGMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHltYWNyby5oCisrKyBiL0luY2x1ZGUvcHltYWNyby5oCkBAIC0xLDEzICsxLDI2IEBACiAjaWZuZGVmIFB5X1BZTUFDUk9fSAogI2RlZmluZSBQeV9QWU1BQ1JPX0gKIAorLyogTWluaW11bSB2YWx1ZSBiZXR3ZWVuIHggYW5kIHkgKi8KICNkZWZpbmUgUHlfTUlOKHgsIHkpICgoKHgpID4gKHkpKSA/ICh5KSA6ICh4KSkKKworLyogTWF4aW11bSB2YWx1ZSBiZXR3ZWVuIHggYW5kIHkgKi8KICNkZWZpbmUgUHlfTUFYKHgsIHkpICgoKHgpID4gKHkpKSA/ICh4KSA6ICh5KSkKIAorLyogQWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciB4ICovCisjZGVmaW5lIFB5X0FCUyh4KSAoKHgpIDwgMCA/IC0oeCkgOiAoeCkpCisKKyNkZWZpbmUgX1B5X1hTVFJJTkdJRlkoeCkgI3gKKworLyogQ29udmVydCB0aGUgYXJndW1lbnQgdG8gYSBzdHJpbmcuIEZvciBleGFtcGxlLCBQeV9TVFJJTkdJRlkoMTIzKSBpcyByZXBsYWNlZAorICAgd2l0aCAiMTIzIiBieSB0aGUgcHJlcHJvY2Vzc29yLiBEZWZpbmVzIGFyZSBhbHNvIHJlcGxhY2VkIGJ5IHRoZWlyIHZhbHVlLgorICAgRm9yIGV4YW1wbGUgUHlfU1RSSU5HSUZZKF9fTElORV9fKSBpcyByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIsIG5vdAorICAgYnkgIl9fTElORV9fIi4gKi8KKyNkZWZpbmUgUHlfU1RSSU5HSUZZKHgpIF9QeV9YU1RSSU5HSUZZKHgpCisKIC8qIEFyZ3VtZW50IG11c3QgYmUgYSBjaGFyIG9yIGFuIGludCBpbiBbLTEyOCwgMTI3XSBvciBbMCwgMjU1XS4gKi8KICNkZWZpbmUgUHlfQ0hBUk1BU0soYykgKCh1bnNpZ25lZCBjaGFyKSgoYykgJiAweGZmKSkKIAotCiAvKiBBc3NlcnQgYSBidWlsZC10aW1lIGRlcGVuZGVuY3ksIGFzIGFuIGV4cHJlc3Npb24uCiAKICAgIFlvdXIgY29tcGlsZSB3aWxsIGZhaWwgaWYgdGhlIGNvbmRpdGlvbiBpc24ndCB0cnVlLCBvciBjYW4ndCBiZSBldmFsdWF0ZWQKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHltZW0uaCBiL0luY2x1ZGUvcHltZW0uaAppbmRleCAyMzcyYjg2Li4wNDNkYjY0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5bWVtLmgKKysrIGIvSW5jbHVkZS9weW1lbS5oCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd0NhbGxvYyhzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpOwogUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOwogUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cik7CiAjZW5kaWYKQEAgLTU3LDYgKzU4LDcgQEAKICovCiAKIFB5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9NYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX0NhbGxvYyhzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpOwogUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOwogUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9GcmVlKHZvaWQgKnB0cik7CiAKQEAgLTEyNiwyMiArMTI4LDI1IEBACiB9IFB5TWVtQWxsb2NhdG9yRG9tYWluOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgLyogdXNlciBjb250ZXh0IHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIDMgZnVuY3Rpb25zICovCisgICAgLyogdXNlciBjb250ZXh0IHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIDQgZnVuY3Rpb25zICovCiAgICAgdm9pZCAqY3R4OwogCiAgICAgLyogYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgKi8KICAgICB2b2lkKiAoKm1hbGxvYykgKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpOwogCisgICAgLyogYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgaW5pdGlhbGl6ZWQgYnkgemVyb3MgKi8KKyAgICB2b2lkKiAoKmNhbGxvYykgKHZvaWQgKmN0eCwgc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKTsKKwogICAgIC8qIGFsbG9jYXRlIG9yIHJlc2l6ZSBhIG1lbW9yeSBibG9jayAqLwogICAgIHZvaWQqICgqcmVhbGxvYykgKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOwogCiAgICAgLyogcmVsZWFzZSBhIG1lbW9yeSBibG9jayAqLwogICAgIHZvaWQgKCpmcmVlKSAodm9pZCAqY3R4LCB2b2lkICpwdHIpOwotfSBQeU1lbUFsbG9jYXRvcjsKK30gUHlNZW1BbGxvY2F0b3JFeDsKIAogLyogR2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLiAqLwogUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbUFsbG9jYXRvckV4ICphbGxvY2F0b3IpOwogCiAvKiBTZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCiAKQEAgLTE1NSw3ICsxNjAsNyBAQAogICAgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKCkgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdG8gcmVpbnN0YWxsIHRoZSBkZWJ1ZyBob29rcwogICAgb24gdG9wIG9uIHRoZSBuZXcgYWxsb2NhdG9yLiAqLwogUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9TZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbUFsbG9jYXRvckV4ICphbGxvY2F0b3IpOwogCiAvKiBTZXR1cCBob29rcyB0byBkZXRlY3QgYnVncyBpbiB0aGUgZm9sbG93aW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9yCiAgICBmdW5jdGlvbnM6CmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5cG9ydC5oIGIvSW5jbHVkZS9weXBvcnQuaAppbmRleCBiMjlmOWJkLi42NmUwMGQ0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5cG9ydC5oCisrKyBiL0luY2x1ZGUvcHlwb3J0LmgKQEAgLTM1NywyOCArMzU3LDYgQEAKICAqIHN0YXQoKSBhbmQgZnN0YXQoKSBmaWRkbGluZyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogV2UgZXhwZWN0IHRoYXQgc3RhdCBhbmQgZnN0YXQgZXhpc3Qgb24gbW9zdCBzeXN0ZW1zLgotICogIEl0J3MgY29uZmlybWVkIG9uIFVuaXgsIE1hYyBhbmQgV2luZG93cy4KLSAqICBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtLCBhZGQKLSAqICAgICAgI2RlZmluZSBET05UX0hBVkVfU1RBVAotICogYW5kL29yCi0gKiAgICAgICNkZWZpbmUgRE9OVF9IQVZFX0ZTVEFUCi0gKiB0byB5b3VyIHB5Y29uZmlnLmguIFB5dGhvbiBjb2RlIGJleW9uZCB0aGlzIHNob3VsZCBjaGVjayBIQVZFX1NUQVQgYW5kCi0gKiBIQVZFX0ZTVEFUIGluc3RlYWQuCi0gKiBBbHNvCi0gKiAgICAgICNkZWZpbmUgSEFWRV9TWVNfU1RBVF9ICi0gKiBpZiA8c3lzL3N0YXQuaD4gZXhpc3RzIG9uIHlvdXIgcGxhdGZvcm0sIGFuZAotICogICAgICAjZGVmaW5lIEhBVkVfU1RBVF9ICi0gKiBpZiA8c3RhdC5oPiBkb2VzLgotICovCi0jaWZuZGVmIERPTlRfSEFWRV9TVEFUCi0jZGVmaW5lIEhBVkVfU1RBVAotI2VuZGlmCi0KLSNpZm5kZWYgRE9OVF9IQVZFX0ZTVEFUCi0jZGVmaW5lIEhBVkVfRlNUQVQKLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX0gpCkBAIC01ODgsNiArNTY2LDI1IEBACiAgICAgfSB3aGlsZSAoMCkKICNlbmRpZgogCisjaWZkZWYgSEFWRV9HQ0NfQVNNX0ZPUl9NQzY4ODgxCisjZGVmaW5lIEhBVkVfUFlfU0VUXzUzQklUX1BSRUNJU0lPTiAxCisjZGVmaW5lIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0hFQURFUiBcCisgIHVuc2lnbmVkIGludCBvbGRfZnBjciwgbmV3X2ZwY3IKKyNkZWZpbmUgX1B5X1NFVF81M0JJVF9QUkVDSVNJT05fU1RBUlQJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBfX2FzbV9fICgiZm1vdmUubCAlJWZwY3IsJTAiIDogIj1nIiAob2xkX2ZwY3IpKTsJCQlcCisgICAgLyogU2V0IGRvdWJsZSBwcmVjaXNpb24gLyByb3VuZCB0byBuZWFyZXN0LiAgKi8JCQlcCisgICAgbmV3X2ZwY3IgPSAob2xkX2ZwY3IgJiB+MHhmMCkgfCAweDgwOwkJCQlcCisgICAgaWYgKG5ld19mcGNyICE9IG9sZF9mcGNyKQkJCQkJCVwKKyAgICAgIF9fYXNtX18gdm9sYXRpbGUgKCJmbW92ZS5sICUwLCUlZnBjciIgOiA6ICJnIiAobmV3X2ZwY3IpKTsJXAorICB9IHdoaWxlICgwKQorI2RlZmluZSBfUHlfU0VUXzUzQklUX1BSRUNJU0lPTl9FTkQJCQkJCVwKKyAgZG8gewkJCQkJCQkJCVwKKyAgICBpZiAobmV3X2ZwY3IgIT0gb2xkX2ZwY3IpCQkJCQkJXAorICAgICAgX19hc21fXyB2b2xhdGlsZSAoImZtb3ZlLmwgJTAsJSVmcGNyIiA6IDogImciIChvbGRfZnBjcikpOwlcCisgIH0gd2hpbGUgKDApCisjZW5kaWYKKwogLyogZGVmYXVsdCBkZWZpbml0aW9ucyBhcmUgZW1wdHkgKi8KICNpZm5kZWYgSEFWRV9QWV9TRVRfNTNCSVRfUFJFQ0lTSU9OCiAjZGVmaW5lIF9QeV9TRVRfNTNCSVRfUFJFQ0lTSU9OX0hFQURFUgpAQCAtODgwLDQgKzg3NywyNCBAQAogI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDEKICNlbmRpZgogCisjaWZkZWYgUHlfQlVJTERfQ09SRSAKKy8qCisgKiBNYWNyb3MgdG8gcHJvdGVjdCBDUlQgY2FsbHMgYWdhaW5zdCBpbnN0YW50IHRlcm1pbmF0aW9uIHdoZW4gcGFzc2VkIGFuCisgKiBpbnZhbGlkIHBhcmFtZXRlciAoaXNzdWUyMzUyNCkuCisgKi8KKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE5MDAKKworZXh0ZXJuIF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyIF9QeV9zaWxlbnRfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlcjsKKyNkZWZpbmUgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSCB7IF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyIF9QeV9vbGRfaGFuZGxlciA9IFwKKyAgICBfc2V0X3RocmVhZF9sb2NhbF9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyKF9QeV9zaWxlbnRfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlcik7CisjZGVmaW5lIF9QeV9FTkRfU1VQUFJFU1NfSVBIIF9zZXRfdGhyZWFkX2xvY2FsX2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIoX1B5X29sZF9oYW5kbGVyKTsgfQorCisjZWxzZQorCisjZGVmaW5lIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyNkZWZpbmUgX1B5X0VORF9TVVBQUkVTU19JUEgKKworI2VuZGlmIC8qIF9NU0NfVkVSID49IDE5MDAgKi8KKyNlbmRpZiAvKiBQeV9CVUlMRF9DT1JFICovCisKICNlbmRpZiAvKiBQeV9QWVBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXN0YXRlLmggYi9JbmNsdWRlL3B5c3RhdGUuaAppbmRleCA0OTkyYzIyLi4wNDk5YTc0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5c3RhdGUuaAorKysgYi9JbmNsdWRlL3B5c3RhdGUuaApAQCAtMTM0LDYgKzEzNCw5IEBACiAgICAgdm9pZCAoKm9uX2RlbGV0ZSkodm9pZCAqKTsKICAgICB2b2lkICpvbl9kZWxldGVfZGF0YTsKIAorICAgIFB5T2JqZWN0ICpjb3JvdXRpbmVfd3JhcHBlcjsKKyAgICBpbnQgaW5fY29yb3V0aW5lX3dyYXBwZXI7CisKICAgICAvKiBYWFggc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBhbHNvIGJlIGhlcmUgKi8KIAogfSBQeVRocmVhZFN0YXRlOwpAQCAtMTY1LDcgKzE2OCwxNSBAQAogUHlBUElfRlVOQyh2b2lkKSBfUHlHSUxTdGF0ZV9SZWluaXQodm9pZCk7CiAjZW5kaWYKIAorLyogUmV0dXJuIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZS4gVGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZC4KKyAqIFdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGlzIE5VTEwsIHRoaXMgaXNzdWVzIGEgZmF0YWwgZXJyb3IgKHNvIHRoYXQKKyAqIHRoZSBjYWxsZXIgbmVlZG4ndCBjaGVjayBmb3IgTlVMTCkuICovCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlUaHJlYWRTdGF0ZV9HZXQodm9pZCk7CisKKy8qIFNpbWlsYXIgdG8gUHlUaHJlYWRTdGF0ZV9HZXQoKSwgYnV0IGRvbid0IGlzc3VlIGEgZmF0YWwgZXJyb3IKKyAqIGlmIGl0IGlzIE5VTEwuICovCitQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgX1B5VGhyZWFkU3RhdGVfVW5jaGVja2VkR2V0KHZvaWQpOworCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlUaHJlYWRTdGF0ZV9Td2FwKFB5VGhyZWFkU3RhdGUgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VGhyZWFkU3RhdGVfR2V0RGljdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjKGxvbmcsIFB5T2JqZWN0ICopOwpAQCAtMTc1LDE1ICsxODYsMTIgQEAKIAogLyogQXNzdW1pbmcgdGhlIGN1cnJlbnQgdGhyZWFkIGhvbGRzIHRoZSBHSUwsIHRoaXMgaXMgdGhlCiAgICBQeVRocmVhZFN0YXRlIGZvciB0aGUgY3VycmVudCB0aHJlYWQuICovCi0jaWZuZGVmIFB5X0xJTUlURURfQVBJCisjaWZkZWYgUHlfQlVJTERfQ09SRQogUHlBUElfREFUQShfUHlfYXRvbWljX2FkZHJlc3MpIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoUHlfREVCVUcpIHx8IGRlZmluZWQoUHlfTElNSVRFRF9BUEkpCi0jZGVmaW5lIFB5VGhyZWFkU3RhdGVfR0VUKCkgUHlUaHJlYWRTdGF0ZV9HZXQoKQorIyAgZGVmaW5lIFB5VGhyZWFkU3RhdGVfR0VUKCkgXAorICAgICAgICAgICAgICgoUHlUaHJlYWRTdGF0ZSopX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpKQogI2Vsc2UKLSNkZWZpbmUgUHlUaHJlYWRTdGF0ZV9HRVQoKSBcCi0gICAgKChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkpCisjICBkZWZpbmUgUHlUaHJlYWRTdGF0ZV9HRVQoKSBQeVRocmVhZFN0YXRlX0dldCgpCiAjZW5kaWYKIAogdHlwZWRlZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXN0cmhleC5oIGIvSW5jbHVkZS9weXN0cmhleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzEyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9JbmNsdWRlL3B5c3RyaGV4LmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBQeV9TVFJIRVhfSAorI2RlZmluZSBQeV9TVFJIRVhfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFJldHVybnMgYSBzdHIoKSBjb250YWluaW5nIHRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgYXJnYnVmLiAqLworUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeV9zdHJoZXgoY29uc3QgY2hhciogYXJnYnVmLCBjb25zdCBQeV9zc2l6ZV90IGFyZ2xlbik7CisvKiBSZXR1cm5zIGEgYnl0ZXMoKSBjb250YWluaW5nIHRoZSBBU0NJSSBoZXggcmVwcmVzZW50YXRpb24gb2YgYXJnYnVmLiAqLworUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeV9zdHJoZXhfYnl0ZXMoY29uc3QgY2hhciogYXJnYnVmLCBjb25zdCBQeV9zc2l6ZV90IGFyZ2xlbik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhUHlfU1RSSEVYX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHl0aG9ucnVuLmggYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCmluZGV4IDJmYzU1NzguLjljMmU4MTMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrIGIvSW5jbHVkZS9weXRob25ydW4uaApAQCAtOSw3ICs5LDggQEAKIAogI2RlZmluZSBQeUNGX01BU0sgKENPX0ZVVFVSRV9ESVZJU0lPTiB8IENPX0ZVVFVSRV9BQlNPTFVURV9JTVBPUlQgfCBcCiAgICAgICAgICAgICAgICAgICAgQ09fRlVUVVJFX1dJVEhfU1RBVEVNRU5UIHwgQ09fRlVUVVJFX1BSSU5UX0ZVTkNUSU9OIHwgXAotICAgICAgICAgICAgICAgICAgIENPX0ZVVFVSRV9VTklDT0RFX0xJVEVSQUxTIHwgQ09fRlVUVVJFX0JBUlJZX0FTX0JERkwpCisgICAgICAgICAgICAgICAgICAgQ09fRlVUVVJFX1VOSUNPREVfTElURVJBTFMgfCBDT19GVVRVUkVfQkFSUllfQVNfQkRGTCB8IFwKKyAgICAgICAgICAgICAgICAgICBDT19GVVRVUkVfR0VORVJBVE9SX1NUT1ApCiAjZGVmaW5lIFB5Q0ZfTUFTS19PQlNPTEVURSAoQ09fTkVTVEVEKQogI2RlZmluZSBQeUNGX1NPVVJDRV9JU19VVEY4ICAweDAxMDAKICNkZWZpbmUgUHlDRl9ET05UX0lNUExZX0RFREVOVCAweDAyMDAKQEAgLTIyLDMwICsyMyw2IEBACiB9IFB5Q29tcGlsZXJGbGFnczsKICNlbmRpZgogCi1QeUFQSV9GVU5DKHZvaWQpIFB5X1NldFByb2dyYW1OYW1lKHdjaGFyX3QgKik7Ci1QeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7Ci0KLVB5QVBJX0ZVTkModm9pZCkgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICopOwotUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldFB5dGhvbkhvbWUodm9pZCk7Ci0KLSNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLS8qIE9ubHkgdXNlZCBieSBhcHBsaWNhdGlvbnMgdGhhdCBlbWJlZCB0aGUgaW50ZXJwcmV0ZXIgYW5kIG5lZWQgdG8KLSAqIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlbmNvZGluZyBkZXRlcm1pbmF0aW9uIG1lY2hhbmlzbQotICovCi1QeUFQSV9GVU5DKGludCkgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7Ci0jZW5kaWYKLQotUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplKHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplRXgoaW50KTsKLSNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLVB5QVBJX0ZVTkModm9pZCkgX1B5X0luaXRpYWxpemVFeF9Qcml2YXRlKGludCwgaW50KTsKLSNlbmRpZgotUHlBUElfRlVOQyh2b2lkKSBQeV9GaW5hbGl6ZSh2b2lkKTsKLVB5QVBJX0ZVTkMoaW50KSBQeV9Jc0luaXRpYWxpemVkKHZvaWQpOwotUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIFB5X05ld0ludGVycHJldGVyKHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBQeV9FbmRJbnRlcnByZXRlcihQeVRocmVhZFN0YXRlICopOwotCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGludCkgUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBQeUNvbXBpbGVyRmxhZ3MgKik7CiBQeUFQSV9GVU5DKGludCkgUHlSdW5fQW55RmlsZUZsYWdzKEZJTEUgKiwgY29uc3QgY2hhciAqLCBQeUNvbXBpbGVyRmxhZ3MgKik7CkBAIC0xNjYsMjYgKzE0Myw2IEBACiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1ByaW50RXgoaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfRGlzcGxheShQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIAotLyogUHlfUHlBdEV4aXQgaXMgZm9yIHRoZSBhdGV4aXQgbW9kdWxlLCBQeV9BdEV4aXQgaXMgZm9yIGxvdy1sZXZlbAotICogZXhpdCBmdW5jdGlvbnMuCi0gKi8KLSNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLVB5QVBJX0ZVTkModm9pZCkgX1B5X1B5QXRFeGl0KHZvaWQgKCpmdW5jKSh2b2lkKSk7Ci0jZW5kaWYKLVB5QVBJX0ZVTkMoaW50KSBQeV9BdEV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKTsKLQotUHlBUElfRlVOQyh2b2lkKSBQeV9FeGl0KGludCk7Ci0KLS8qIFJlc3RvcmUgc2lnbmFscyB0aGF0IHRoZSBpbnRlcnByZXRlciBoYXMgY2FsbGVkIFNJR19JR04gb24gdG8gU0lHX0RGTC4gKi8KLSNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLVB5QVBJX0ZVTkModm9pZCkgX1B5X1Jlc3RvcmVTaWduYWxzKHZvaWQpOwotCi1QeUFQSV9GVU5DKGludCkgUHlfRmRJc0ludGVyYWN0aXZlKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKLSNlbmRpZgotCi0vKiBCb290c3RyYXAgKi8KLVB5QVBJX0ZVTkMoaW50KSBQeV9NYWluKGludCBhcmdjLCB3Y2hhcl90ICoqYXJndik7Ci0KICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIC8qIFVzZSBtYWNyb3MgZm9yIGEgYnVuY2ggb2Ygb2xkIHZhcmlhbnRzICovCiAjZGVmaW5lIFB5UnVuX1N0cmluZyhzdHIsIHMsIGcsIGwpIFB5UnVuX1N0cmluZ0ZsYWdzKHN0ciwgcywgZywgbCwgTlVMTCkKQEAgLTIwNyw2NCArMTY0LDYgQEAKICAgICBQeVJ1bl9GaWxlRXhGbGFncyhmcCwgcCwgcywgZywgbCwgMCwgZmxhZ3MpCiAjZW5kaWYKIAotLyogSW4gZ2V0cGF0aC5jICovCi1QeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpOwotUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldFByZWZpeCh2b2lkKTsKLVB5QVBJX0ZVTkMod2NoYXJfdCAqKSBQeV9HZXRFeGVjUHJlZml4KHZvaWQpOwotUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldFBhdGgodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpICAgICAgUHlfU2V0UGF0aChjb25zdCB3Y2hhcl90ICopOwotI2lmZGVmIE1TX1dJTkRPV1MKLWludCBfUHlfQ2hlY2tQeXRob24zKCk7Ci0jZW5kaWYKLQotLyogSW4gdGhlaXIgb3duIGZpbGVzICovCi1QeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0VmVyc2lvbih2b2lkKTsKLVB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRQbGF0Zm9ybSh2b2lkKTsKLVB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb3B5cmlnaHQodm9pZCk7Ci1QeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29tcGlsZXIodm9pZCk7Ci1QeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0QnVpbGRJbmZvKHZvaWQpOwotI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfRlVOQyhjb25zdCBjaGFyICopIF9QeV9oZ2lkZW50aWZpZXIodm9pZCk7Ci1QeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgX1B5X2hndmVyc2lvbih2b2lkKTsKLSNlbmRpZgotCi0vKiBJbnRlcm5hbCAtLSB2YXJpb3VzIG9uZS10aW1lIGluaXRpYWxpemF0aW9ucyAqLwotI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlCdWlsdGluX0luaXQodm9pZCk7Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVN5c19Jbml0KHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRfSW5pdCh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5RXhjX0luaXQoUHlPYmplY3QgKiBibHRpbm1vZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeUltcG9ydEhvb2tzX0luaXQodm9pZCk7Ci1QeUFQSV9GVU5DKGludCkgX1B5RnJhbWVfSW5pdCh2b2lkKTsKLVB5QVBJX0ZVTkMoaW50KSBfUHlGbG9hdF9Jbml0KHZvaWQpOwotUHlBUElfRlVOQyhpbnQpIFB5Qnl0ZUFycmF5X0luaXQodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeVJhbmRvbV9Jbml0KHZvaWQpOwotI2VuZGlmCi0KLS8qIFZhcmlvdXMgaW50ZXJuYWwgZmluYWxpemVycyAqLwotI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfRlVOQyh2b2lkKSBfUHlFeGNfRmluaSh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5SW1wb3J0X0Zpbmkodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5TWV0aG9kX0Zpbmkodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5RnJhbWVfRmluaSh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgUHlDRnVuY3Rpb25fRmluaSh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgUHlEaWN0X0Zpbmkodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5VHVwbGVfRmluaSh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgUHlMaXN0X0Zpbmkodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5U2V0X0Zpbmkodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5Qnl0ZXNfRmluaSh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgUHlCeXRlQXJyYXlfRmluaSh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgUHlGbG9hdF9GaW5pKHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBQeU9TX0ZpbmlJbnRlcnJ1cHRzKHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5R0NfRmluaSh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgUHlTbGljZV9GaW5pKHZvaWQpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlUeXBlX0Zpbmkodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeVJhbmRvbV9GaW5pKHZvaWQpOwotCi1QeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUgKikgX1B5X0ZpbmFsaXppbmc7Ci0jZW5kaWYKLQogLyogU3R1ZmYgd2l0aCBubyBwcm9wZXIgaG9tZSAoeWV0KSAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhjaGFyICopIFB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CkBAIC0yNzcsNyArMTc2LDcgQEAKIAogLyogU3RhY2sgc2l6ZSwgaW4gInBvaW50ZXJzIiAoc28gd2UgZ2V0IGV4dHJhIHNhZmV0eSBtYXJnaW5zCiAgICBvbiA2NC1iaXQgcGxhdGZvcm1zKS4gIE9uIGEgMzItYml0IHBsYXRmb3JtLCB0aGlzIHRyYW5zbGF0ZXMKLSAgIHRvIGEgOGsgbWFyZ2luLiAqLworICAgdG8gYW4gOGsgbWFyZ2luLiAqLwogI2RlZmluZSBQWU9TX1NUQUNLX01BUkdJTiAyMDQ4CiAKICNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChNU19XSU42NCkgJiYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTMwMApAQCAtMjkwLDE0ICsxODksNiBAQAogUHlBUElfRlVOQyhpbnQpIFB5T1NfQ2hlY2tTdGFjayh2b2lkKTsKICNlbmRpZgogCi0vKiBTaWduYWxzICovCi10eXBlZGVmIHZvaWQgKCpQeU9TX3NpZ2hhbmRsZXJfdCkoaW50KTsKLVB5QVBJX0ZVTkMoUHlPU19zaWdoYW5kbGVyX3QpIFB5T1NfZ2V0c2lnKGludCk7Ci1QeUFQSV9GVU5DKFB5T1Nfc2lnaGFuZGxlcl90KSBQeU9TX3NldHNpZyhpbnQsIFB5T1Nfc2lnaGFuZGxlcl90KTsKLQotLyogUmFuZG9tICovCi1QeUFQSV9GVU5DKGludCkgX1B5T1NfVVJhbmRvbSAodm9pZCAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUpOwotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRpbWUuaCBiL0luY2x1ZGUvcHl0aW1lLmgKaW5kZXggYjBmYzZkMC4uNDk0MzIyYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXRpbWUuaAorKysgYi9JbmNsdWRlL3B5dGltZS5oCkBAIC0xMyw2MCArMTMsMjYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0dFVFRJTUVPRkRBWQotdHlwZWRlZiBzdHJ1Y3QgdGltZXZhbCBfUHlUaW1lX3RpbWV2YWw7CisjaWZkZWYgUFlfSU5UNjRfVAorLyogX1B5VGltZV90OiBQeXRob24gdGltZXN0YW1wIHdpdGggc3Vic2Vjb25kIHByZWNpc2lvbi4gSXQgY2FuIGJlIHVzZWQgdG8KKyAgIHN0b3JlIGEgZHVyYXRpb24sIGFuZCBzbyBpbmRpcmVjdGx5IGEgZGF0ZSAocmVsYXRlZCB0byBhbm90aGVyIGRhdGUsIGxpa2UKKyAgIFVOSVggZXBvY2gpLiAqLwordHlwZWRlZiBQWV9JTlQ2NF9UIF9QeVRpbWVfdDsKKyNkZWZpbmUgX1B5VGltZV9NSU4gUFlfTExPTkdfTUlOCisjZGVmaW5lIF9QeVRpbWVfTUFYIFBZX0xMT05HX01BWAogI2Vsc2UKLXR5cGVkZWYgc3RydWN0IHsKLSAgICB0aW1lX3QgICAgICAgdHZfc2VjOyAgIC8qIHNlY29uZHMgc2luY2UgSmFuLiAxLCAxOTcwICovCi0gICAgbG9uZyAgICAgICAgIHR2X3VzZWM7ICAvKiBhbmQgbWljcm9zZWNvbmRzICovCi19IF9QeVRpbWVfdGltZXZhbDsKKyMgIGVycm9yICJfUHlUaW1lX3QgbmVlZCBzaWduZWQgNjQtYml0IGludGVnZXIgdHlwZSIKICNlbmRpZgogCi0vKiBTdHJ1Y3R1cmUgdXNlZCBieSB0aW1lLmdldF9jbG9ja19pbmZvKCkgKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjb25zdCBjaGFyICppbXBsZW1lbnRhdGlvbjsKLSAgICBpbnQgbW9ub3RvbmljOwotICAgIGludCBhZGp1c3RhYmxlOwotICAgIGRvdWJsZSByZXNvbHV0aW9uOwotfSBfUHlfY2xvY2tfaW5mb190OwotCi0vKiBTaW1pbGFyIHRvIFBPU0lYIGdldHRpbWVvZmRheSBidXQgY2Fubm90IGZhaWwuICBJZiBzeXN0ZW0gZ2V0dGltZW9mZGF5Ci0gKiBmYWlscyBvciBpcyBub3QgYXZhaWxhYmxlLCBmYWxsIGJhY2sgdG8gbG93ZXIgcmVzb2x1dGlvbiBjbG9ja3MuCi0gKi8KLVB5QVBJX0ZVTkModm9pZCkgX1B5VGltZV9nZXR0aW1lb2ZkYXkoX1B5VGltZV90aW1ldmFsICp0cCk7Ci0KLS8qIFNpbWlsYXIgdG8gX1B5VGltZV9nZXR0aW1lb2ZkYXkoKSBidXQgcmV0cmlldmUgYWxzbyBpbmZvcm1hdGlvbiBvbiB0aGUKLSAqIGNsb2NrIHVzZWQgdG8gZ2V0IHRoZSBjdXJyZW50IHRpbWUuICovCi1QeUFQSV9GVU5DKHZvaWQpIF9QeVRpbWVfZ2V0dGltZW9mZGF5X2luZm8oCi0gICAgX1B5VGltZV90aW1ldmFsICp0cCwKLSAgICBfUHlfY2xvY2tfaW5mb190ICppbmZvKTsKLQotI2RlZmluZSBfUHlUaW1lX0FERF9TRUNPTkRTKHR2LCBpbnRlcnZhbCkgXAotZG8geyBcCi0gICAgdHYudHZfdXNlYyArPSAobG9uZykgKCgobG9uZykgaW50ZXJ2YWwgLSBpbnRlcnZhbCkgKiAxMDAwMDAwKTsgXAotICAgIHR2LnR2X3NlYyArPSAodGltZV90KSBpbnRlcnZhbCArICh0aW1lX3QpICh0di50dl91c2VjIC8gMTAwMDAwMCk7IFwKLSAgICB0di50dl91c2VjICU9IDEwMDAwMDA7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX1B5VGltZV9JTlRFUlZBTCh0dl9zdGFydCwgdHZfZW5kKSBcCi0gICAgKCh0dl9lbmQudHZfc2VjIC0gdHZfc3RhcnQudHZfc2VjKSArIFwKLSAgICAgKHR2X2VuZC50dl91c2VjIC0gdHZfc3RhcnQudHZfdXNlYykgKiAwLjAwMDAwMSkKLQotI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotCiB0eXBlZGVmIGVudW0gewotICAgIC8qIFJvdW5kIHRvd2FyZHMgemVyby4gKi8KLSAgICBfUHlUaW1lX1JPVU5EX0RPV049MCwKLSAgICAvKiBSb3VuZCBhd2F5IGZyb20gemVyby4gKi8KLSAgICBfUHlUaW1lX1JPVU5EX1VQCisgICAgLyogUm91bmQgdG93YXJkcyBtaW51cyBpbmZpbml0eSAoLWluZikuCisgICAgICAgRm9yIGV4YW1wbGUsIHVzZWQgdG8gcmVhZCBhIGNsb2NrLiAqLworICAgIF9QeVRpbWVfUk9VTkRfRkxPT1I9MCwKKyAgICAvKiBSb3VuZCB0b3dhcmRzIGluZmluaXR5ICgraW5mKS4KKyAgICAgICBGb3IgZXhhbXBsZSwgdXNlZCBmb3IgdGltZW91dCB0byB3YWl0ICJhdCBsZWFzdCIgTiBzZWNvbmRzLiAqLworICAgIF9QeVRpbWVfUk9VTkRfQ0VJTElORwogfSBfUHlUaW1lX3JvdW5kX3Q7CiAKLS8qIENvbnZlcnQgYSBudW1iZXIgb2Ygc2Vjb25kcywgaW50IG9yIGZsb2F0LCB0byB0aW1lX3QuICovCi1QeUFQSV9GVU5DKGludCkgX1B5VGltZV9PYmplY3RUb1RpbWVfdCgKLSAgICBQeU9iamVjdCAqb2JqLAotICAgIHRpbWVfdCAqc2VjLAotICAgIF9QeVRpbWVfcm91bmRfdCk7Ci0KIC8qIENvbnZlcnQgYSB0aW1lX3QgdG8gYSBQeUxvbmcuICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUxvbmdfRnJvbVRpbWVfdCgKICAgICB0aW1lX3Qgc2VjKTsKQEAgLTc1LDYgKzQxLDEyIEBACiBQeUFQSV9GVU5DKHRpbWVfdCkgX1B5TG9uZ19Bc1RpbWVfdCgKICAgICBQeU9iamVjdCAqb2JqKTsKIAorLyogQ29udmVydCBhIG51bWJlciBvZiBzZWNvbmRzLCBpbnQgb3IgZmxvYXQsIHRvIHRpbWVfdC4gKi8KK1B5QVBJX0ZVTkMoaW50KSBfUHlUaW1lX09iamVjdFRvVGltZV90KAorICAgIFB5T2JqZWN0ICpvYmosCisgICAgdGltZV90ICpzZWMsCisgICAgX1B5VGltZV9yb3VuZF90KTsKKwogLyogQ29udmVydCBhIG51bWJlciBvZiBzZWNvbmRzLCBpbnQgb3IgZmxvYXQsIHRvIGEgdGltZXZhbCBzdHJ1Y3R1cmUuCiAgICB1c2VjIGlzIGluIHRoZSByYW5nZSBbMDsgOTk5OTk5XSBhbmQgcm91bmRlZCB0b3dhcmRzIHplcm8uCiAgICBGb3IgZXhhbXBsZSwgLTEuMiBpcyBjb252ZXJ0ZWQgdG8gKC0yLCA4MDAwMDApLiAqLwpAQCAtOTIsMTAgKzY0LDEyNiBAQAogICAgIHRpbWVfdCAqc2VjLAogICAgIGxvbmcgKm5zZWMsCiAgICAgX1B5VGltZV9yb3VuZF90KTsKKworCisvKiBDcmVhdGUgYSB0aW1lc3RhbXAgZnJvbSBhIG51bWJlciBvZiBzZWNvbmRzLiAqLworUHlBUElfRlVOQyhfUHlUaW1lX3QpIF9QeVRpbWVfRnJvbVNlY29uZHMoaW50IHNlY29uZHMpOworCisvKiBNYWNybyB0byBjcmVhdGUgYSB0aW1lc3RhbXAgZnJvbSBhIG51bWJlciBvZiBzZWNvbmRzLCBubyBpbnRlZ2VyIG92ZXJmbG93LgorICAgT25seSB1c2UgdGhlIG1hY3JvIGZvciBzbWFsbCB2YWx1ZXMsIHByZWZlciBfUHlUaW1lX0Zyb21TZWNvbmRzKCkuICovCisjZGVmaW5lIF9QWVRJTUVfRlJPTVNFQ09ORFMoc2Vjb25kcykgXAorICAgICAgICAgICAgKChfUHlUaW1lX3QpKHNlY29uZHMpICogKDEwMDAgKiAxMDAwICogMTAwMCkpCisKKy8qIENyZWF0ZSBhIHRpbWVzdGFtcCBmcm9tIGEgbnVtYmVyIG9mIG5hbm9zZWNvbmRzLiAqLworUHlBUElfRlVOQyhfUHlUaW1lX3QpIF9QeVRpbWVfRnJvbU5hbm9zZWNvbmRzKFBZX0xPTkdfTE9ORyBucyk7CisKKy8qIENvbnZlcnQgYSBudW1iZXIgb2Ygc2Vjb25kcyAoUHl0aG9uIGZsb2F0IG9yIGludCkgdG8gYSB0aW1ldGFtcC4KKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLCByZXR1cm4gMCBvbiBzdWNjZXNzLiAqLworUHlBUElfRlVOQyhpbnQpIF9QeVRpbWVfRnJvbVNlY29uZHNPYmplY3QoX1B5VGltZV90ICp0LAorICAgIFB5T2JqZWN0ICpvYmosCisgICAgX1B5VGltZV9yb3VuZF90IHJvdW5kKTsKKworLyogQ29udmVydCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgKFB5dGhvbiBmbG9hdCBvciBpbnQsIDEwXi0zKSB0byBhIHRpbWV0YW1wLgorICAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IsIHJldHVybiAwIG9uIHN1Y2Nlc3MuICovCitQeUFQSV9GVU5DKGludCkgX1B5VGltZV9Gcm9tTWlsbGlzZWNvbmRzT2JqZWN0KF9QeVRpbWVfdCAqdCwKKyAgICBQeU9iamVjdCAqb2JqLAorICAgIF9QeVRpbWVfcm91bmRfdCByb3VuZCk7CisKKy8qIENvbnZlcnQgYSB0aW1lc3RhbXAgdG8gYSBudW1iZXIgb2Ygc2Vjb25kcyBhcyBhIEMgZG91YmxlLiAqLworUHlBUElfRlVOQyhkb3VibGUpIF9QeVRpbWVfQXNTZWNvbmRzRG91YmxlKF9QeVRpbWVfdCB0KTsKKworLyogQ29udmVydCB0aW1lc3RhbXAgdG8gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzICgxMF4tMyBzZWNvbmRzKS4gKi8KK1B5QVBJX0ZVTkMoX1B5VGltZV90KSBfUHlUaW1lX0FzTWlsbGlzZWNvbmRzKF9QeVRpbWVfdCB0LAorICAgIF9QeVRpbWVfcm91bmRfdCByb3VuZCk7CisKKy8qIENvbnZlcnQgdGltZXN0YW1wIHRvIGEgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyAoMTBeLTYgc2Vjb25kcykuICovCitQeUFQSV9GVU5DKF9QeVRpbWVfdCkgX1B5VGltZV9Bc01pY3Jvc2Vjb25kcyhfUHlUaW1lX3QgdCwKKyAgICBfUHlUaW1lX3JvdW5kX3Qgcm91bmQpOworCisvKiBDb252ZXJ0IHRpbWVzdGFtcCB0byBhIG51bWJlciBvZiBuYW5vc2Vjb25kcyAoMTBeLTkgc2Vjb25kcykgYXMgYSBQeXRob24gaW50CisgICBvYmplY3QuICovCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVRpbWVfQXNOYW5vc2Vjb25kc09iamVjdChfUHlUaW1lX3QgdCk7CisKKy8qIENvbnZlcnQgYSB0aW1lc3RhbXAgdG8gYSB0aW1ldmFsIHN0cnVjdHVyZSAobWljcm9zZWNvbmQgcmVzb2x1dGlvbikuCisgICB0dl91c2VjIGlzIGFsd2F5cyBwb3NpdGl2ZS4KKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIGlmIHRoZSBjb252ZXJzaW9uIG92ZXJmbG93ZWQsCisgICByZXR1cm4gMCBvbiBzdWNjZXNzLiAqLworUHlBUElfRlVOQyhpbnQpIF9QeVRpbWVfQXNUaW1ldmFsKF9QeVRpbWVfdCB0LAorICAgIHN0cnVjdCB0aW1ldmFsICp0diwKKyAgICBfUHlUaW1lX3JvdW5kX3Qgcm91bmQpOworCisvKiBTaW1pbGFyIHRvIF9QeVRpbWVfQXNUaW1ldmFsKCksIGJ1dCBkb24ndCByYWlzZSBhbiBleGNlcHRpb24gb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkgX1B5VGltZV9Bc1RpbWV2YWxfbm9yYWlzZShfUHlUaW1lX3QgdCwKKyAgICBzdHJ1Y3QgdGltZXZhbCAqdHYsCisgICAgX1B5VGltZV9yb3VuZF90IHJvdW5kKTsKKworLyogQ29udmVydCBhIHRpbWVzdGFtcCB0byBhIG51bWJlciBvZiBzZWNvbmRzIChzZWNzKSBhbmQgbWljcm9zZWNvbmRzICh1cykuCisgICB1cyBpcyBhbHdheXMgcG9zaXRpdmUuIFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byBfUHlUaW1lX0FzVGltZXZhbCgpCisgICBleGNlcHQgdGhhdCBzZWNzIGlzIGFsd2F5cyBhIHRpbWVfdCB0eXBlLCB3aGVyZWFzIHRoZSB0aW1ldmFsIHN0cnVjdHVyZQorICAgdXNlcyBhIEMgbG9uZyBmb3IgdHZfc2VjIG9uIFdpbmRvd3MuCisgICBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBpZiB0aGUgY29udmVyc2lvbiBvdmVyZmxvd2VkLAorICAgcmV0dXJuIDAgb24gc3VjY2Vzcy4gKi8KK1B5QVBJX0ZVTkMoaW50KSBfUHlUaW1lX0FzVGltZXZhbFRpbWVfdCgKKyAgICBfUHlUaW1lX3QgdCwKKyAgICB0aW1lX3QgKnNlY3MsCisgICAgaW50ICp1cywKKyAgICBfUHlUaW1lX3JvdW5kX3Qgcm91bmQpOworCisjaWYgZGVmaW5lZChIQVZFX0NMT0NLX0dFVFRJTUUpIHx8IGRlZmluZWQoSEFWRV9LUVVFVUUpCisvKiBDb252ZXJ0IGEgdGltZXN0YW1wIHRvIGEgdGltZXNwZWMgc3RydWN0dXJlIChuYW5vc2Vjb25kIHJlc29sdXRpb24pLgorICAgdHZfbnNlYyBpcyBhbHdheXMgcG9zaXRpdmUuCisgICBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvciwgcmV0dXJuIDAgb24gc3VjY2Vzcy4gKi8KK1B5QVBJX0ZVTkMoaW50KSBfUHlUaW1lX0FzVGltZXNwZWMoX1B5VGltZV90IHQsIHN0cnVjdCB0aW1lc3BlYyAqdHMpOwogI2VuZGlmCiAKLS8qIER1bW15IHRvIGZvcmNlIGxpbmtpbmcuICovCi1QeUFQSV9GVU5DKHZvaWQpIF9QeVRpbWVfSW5pdCh2b2lkKTsKKy8qIEdldCB0aGUgY3VycmVudCB0aW1lIGZyb20gdGhlIHN5c3RlbSBjbG9jay4KKworICAgVGhlIGZ1bmN0aW9uIGNhbm5vdCBmYWlsLiBfUHlUaW1lX0luaXQoKSBlbnN1cmVzIHRoYXQgdGhlIHN5c3RlbSBjbG9jaworICAgd29ya3MuICovCitQeUFQSV9GVU5DKF9QeVRpbWVfdCkgX1B5VGltZV9HZXRTeXN0ZW1DbG9jayh2b2lkKTsKKworLyogR2V0IHRoZSB0aW1lIG9mIGEgbW9ub3RvbmljIGNsb2NrLCBpLmUuIGEgY2xvY2sgdGhhdCBjYW5ub3QgZ28gYmFja3dhcmRzLgorICAgVGhlIGNsb2NrIGlzIG5vdCBhZmZlY3RlZCBieSBzeXN0ZW0gY2xvY2sgdXBkYXRlcy4gVGhlIHJlZmVyZW5jZSBwb2ludCBvZgorICAgdGhlIHJldHVybmVkIHZhbHVlIGlzIHVuZGVmaW5lZCwgc28gdGhhdCBvbmx5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCisgICByZXN1bHRzIG9mIGNvbnNlY3V0aXZlIGNhbGxzIGlzIHZhbGlkLgorCisgICBUaGUgZnVuY3Rpb24gY2Fubm90IGZhaWwuIF9QeVRpbWVfSW5pdCgpIGVuc3VyZXMgdGhhdCBhIG1vbm90b25pYyBjbG9jaworICAgaXMgYXZhaWxhYmxlIGFuZCB3b3Jrcy4gKi8KK1B5QVBJX0ZVTkMoX1B5VGltZV90KSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKHZvaWQpOworCisKKy8qIFN0cnVjdHVyZSB1c2VkIGJ5IHRpbWUuZ2V0X2Nsb2NrX2luZm8oKSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIgKmltcGxlbWVudGF0aW9uOworICAgIGludCBtb25vdG9uaWM7CisgICAgaW50IGFkanVzdGFibGU7CisgICAgZG91YmxlIHJlc29sdXRpb247Cit9IF9QeV9jbG9ja19pbmZvX3Q7CisKKy8qIEdldCB0aGUgY3VycmVudCB0aW1lIGZyb20gdGhlIHN5c3RlbSBjbG9jay4KKyAqIEZpbGwgY2xvY2sgaW5mb3JtYXRpb24gaWYgaW5mbyBpcyBub3QgTlVMTC4KKyAqIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLCByZXR1cm4gMCBvbiBzdWNjZXNzLgorICovCitQeUFQSV9GVU5DKGludCkgX1B5VGltZV9HZXRTeXN0ZW1DbG9ja1dpdGhJbmZvKAorICAgIF9QeVRpbWVfdCAqdCwKKyAgICBfUHlfY2xvY2tfaW5mb190ICppbmZvKTsKKworLyogR2V0IHRoZSB0aW1lIG9mIGEgbW9ub3RvbmljIGNsb2NrLCBpLmUuIGEgY2xvY2sgdGhhdCBjYW5ub3QgZ28gYmFja3dhcmRzLgorICAgVGhlIGNsb2NrIGlzIG5vdCBhZmZlY3RlZCBieSBzeXN0ZW0gY2xvY2sgdXBkYXRlcy4gVGhlIHJlZmVyZW5jZSBwb2ludCBvZgorICAgdGhlIHJldHVybmVkIHZhbHVlIGlzIHVuZGVmaW5lZCwgc28gdGhhdCBvbmx5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCisgICByZXN1bHRzIG9mIGNvbnNlY3V0aXZlIGNhbGxzIGlzIHZhbGlkLgorCisgICBGaWxsIGluZm8gKGlmIHNldCkgd2l0aCBpbmZvcm1hdGlvbiBvZiB0aGUgZnVuY3Rpb24gdXNlZCB0byBnZXQgdGhlIHRpbWUuCisKKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworUHlBUElfRlVOQyhpbnQpIF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2tXaXRoSW5mbygKKyAgICBfUHlUaW1lX3QgKnQsCisgICAgX1B5X2Nsb2NrX2luZm9fdCAqaW5mbyk7CisKKworLyogSW5pdGlhbGl6ZSB0aW1lLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkgX1B5VGltZV9Jbml0KHZvaWQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvc2V0b2JqZWN0LmggYi9JbmNsdWRlL3NldG9iamVjdC5oCmluZGV4IGFlM2Y1NTYuLmYxN2JjMWIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc2V0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9zZXRvYmplY3QuaApAQCAtNiwzOCArNiw0MyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogCi0vKgotVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIHNsb3RzIGluIHRoZSB0YWJsZToKKy8qIFRoZXJlIGFyZSB0aHJlZSBraW5kcyBvZiBlbnRyaWVzIGluIHRoZSB0YWJsZToKIAogMS4gVW51c2VkOiAga2V5ID09IE5VTEwKIDIuIEFjdGl2ZTogIGtleSAhPSBOVUxMIGFuZCBrZXkgIT0gZHVtbXkKIDMuIER1bW15OiAgIGtleSA9PSBkdW1teQogCi1Ob3RlOiAucG9wKCkgYWJ1c2VzIHRoZSBoYXNoIGZpZWxkIG9mIGFuIFVudXNlZCBvciBEdW1teSBzbG90IHRvCi1ob2xkIGEgc2VhcmNoIGZpbmdlci4gIFRoZSBoYXNoIGZpZWxkIG9mIFVudXNlZCBvciBEdW1teSBzbG90cyBoYXMKLW5vIG1lYW5pbmcgb3RoZXJ3aXNlLgorVGhlIGhhc2ggZmllbGQgb2YgVW51c2VkIHNsb3RzIGhhdmUgbm8gbWVhbmluZy4KK1RoZSBoYXNoIGZpZWxkIG9mIER1bW1ueSBzbG90cyBhcmUgc2V0IHRvIC0xCittZWFuaW5nIHRoYXQgZHVtbXkgZW50cmllcyBjYW4gYmUgZGV0ZWN0ZWQgYnkKK2VpdGhlciBlbnRyeS0+a2V5PT1kdW1teSBvciBieSBlbnRyeS0+aGFzaD09LTEuCiAqLwotI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorCiAjZGVmaW5lIFB5U2V0X01JTlNJWkUgOAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgLyogQ2FjaGVkIGhhc2ggY29kZSBvZiB0aGUga2V5LiAqLwogICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgUHlfaGFzaF90IGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgIC8qIENhY2hlZCBoYXNoIGNvZGUgb2YgdGhlIGtleSAqLwogfSBzZXRlbnRyeTsKIAorLyogVGhlIFNldE9iamVjdCBkYXRhIHN0cnVjdHVyZSBpcyBzaGFyZWQgYnkgc2V0IGFuZCBmcm96ZW5zZXQgb2JqZWN0cy4KIAotLyoKLVRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgc2hhcmVkIGJ5IHNldCBhbmQgZnJvemVuc2V0IG9iamVjdHMuCitJbnZhcmlhbnQgZm9yIHNldHM6CisgLSBoYXNoIGlzIC0xCisKK0ludmFyaWFudHMgZm9yIGZyb3plbnNldHM6CisgLSBkYXRhIGlzIGltbXV0YWJsZS4KKyAtIGhhc2ggaXMgdGhlIGhhc2ggb2YgdGhlIGZyb3plbnNldCBvciAtMSBpZiBub3QgY29tcHV0ZWQgeWV0LgorCiAqLwogCi10eXBlZGVmIHN0cnVjdCBfc2V0b2JqZWN0IFB5U2V0T2JqZWN0Owotc3RydWN0IF9zZXRvYmplY3QgewordHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKIAotICAgIFB5X3NzaXplX3QgZmlsbDsgIC8qICMgQWN0aXZlICsgIyBEdW1teSAqLwotICAgIFB5X3NzaXplX3QgdXNlZDsgIC8qICMgQWN0aXZlICovCisgICAgUHlfc3NpemVfdCBmaWxsOyAgICAgICAgICAgIC8qIE51bWJlciBhY3RpdmUgYW5kIGR1bW15IGVudHJpZXMqLworICAgIFB5X3NzaXplX3QgdXNlZDsgICAgICAgICAgICAvKiBOdW1iZXIgYWN0aXZlIGVudHJpZXMgKi8KIAogICAgIC8qIFRoZSB0YWJsZSBjb250YWlucyBtYXNrICsgMSBzbG90cywgYW5kIHRoYXQncyBhIHBvd2VyIG9mIDIuCiAgICAgICogV2Ugc3RvcmUgdGhlIG1hc2sgaW5zdGVhZCBvZiB0aGUgc2l6ZSBiZWNhdXNlIHRoZSBtYXNrIGlzIG1vcmUKQEAgLTQ1LDMzICs1MCw0MiBAQAogICAgICAqLwogICAgIFB5X3NzaXplX3QgbWFzazsKIAotICAgIC8qIHRhYmxlIHBvaW50cyB0byBzbWFsbHRhYmxlIGZvciBzbWFsbCB0YWJsZXMsIGVsc2UgdG8KLSAgICAgKiBhZGRpdGlvbmFsIG1hbGxvYydlZCBtZW1vcnkuICB0YWJsZSBpcyBuZXZlciBOVUxMISAgVGhpcyBydWxlCi0gICAgICogc2F2ZXMgcmVwZWF0ZWQgcnVudGltZSBudWxsLXRlc3RzLgorICAgIC8qIFRoZSB0YWJsZSBwb2ludHMgdG8gYSBmaXhlZC1zaXplIHNtYWxsdGFibGUgZm9yIHNtYWxsIHRhYmxlcworICAgICAqIG9yIHRvIGFkZGl0aW9uYWwgbWFsbG9jJ2VkIG1lbW9yeSBmb3IgYmlnZ2VyIHRhYmxlcy4KKyAgICAgKiBUaGUgdGFibGUgcG9pbnRlciBpcyBuZXZlciBOVUxMIHdoaWNoIHNhdmVzIHVzIGZyb20gcmVwZWF0ZWQKKyAgICAgKiBydW50aW1lIG51bGwtdGVzdHMuCiAgICAgICovCiAgICAgc2V0ZW50cnkgKnRhYmxlOwotICAgIHNldGVudHJ5ICooKmxvb2t1cCkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCk7Ci0gICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgIC8qIG9ubHkgdXNlZCBieSBmcm96ZW5zZXQgb2JqZWN0cyAqLwotICAgIHNldGVudHJ5IHNtYWxsdGFibGVbUHlTZXRfTUlOU0laRV07CisgICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgIC8qIE9ubHkgdXNlZCBieSBmcm96ZW5zZXQgb2JqZWN0cyAqLworICAgIFB5X3NzaXplX3QgZmluZ2VyOyAgICAgICAgICAvKiBTZWFyY2ggZmluZ2VyIGZvciBwb3AoKSAqLwogCisgICAgc2V0ZW50cnkgc21hbGx0YWJsZVtQeVNldF9NSU5TSVpFXTsKICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7ICAgICAgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KLX07Ci0jZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KK30gUHlTZXRPYmplY3Q7CisKKyNkZWZpbmUgUHlTZXRfR0VUX1NJWkUoc28pICgoKFB5U2V0T2JqZWN0ICopKHNvKSktPnVzZWQpCisKK1B5QVBJX0RBVEEoUHlPYmplY3QgKikgX1B5U2V0X0R1bW15OworCitQeUFQSV9GVU5DKGludCkgX1B5U2V0X05leHRFbnRyeShQeU9iamVjdCAqc2V0LCBQeV9zc2l6ZV90ICpwb3MsIFB5T2JqZWN0ICoqa2V5LCBQeV9oYXNoX3QgKmhhc2gpOworUHlBUElfRlVOQyhpbnQpIF9QeVNldF9VcGRhdGUoUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKml0ZXJhYmxlKTsKK1B5QVBJX0ZVTkMoaW50KSBQeVNldF9DbGVhckZyZWVMaXN0KHZvaWQpOworCisjZW5kaWYgLyogU2VjdGlvbiBleGNsdWRlZCBieSBQeV9MSU1JVEVEX0FQSSAqLwogCiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlTZXRfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUZyb3plblNldF9UeXBlOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2V0SXRlcl9UeXBlOwotI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfREFUQShQeU9iamVjdCAqKSBfUHlTZXRfRHVtbXk7Ci0jZW5kaWYKIAorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVNldF9OZXcoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RnJvemVuU2V0X05ldyhQeU9iamVjdCAqKTsKIAotLyogSW52YXJpYW50cyBmb3IgZnJvemVuc2V0czoKLSAqICAgICBkYXRhIGlzIGltbXV0YWJsZS4KLSAqICAgICBoYXNoIGlzIHRoZSBoYXNoIG9mIHRoZSBmcm96ZW5zZXQgb3IgLTEgaWYgbm90IGNvbXB1dGVkIHlldC4KLSAqIEludmFyaWFudHMgZm9yIHNldHM6Ci0gKiAgICAgaGFzaCBpcyAtMQotICovCitQeUFQSV9GVU5DKGludCkgUHlTZXRfQWRkKFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICprZXkpOworUHlBUElfRlVOQyhpbnQpIFB5U2V0X0NsZWFyKFB5T2JqZWN0ICpzZXQpOworUHlBUElfRlVOQyhpbnQpIFB5U2V0X0NvbnRhaW5zKFB5T2JqZWN0ICphbnlzZXQsIFB5T2JqZWN0ICprZXkpOworUHlBUElfRlVOQyhpbnQpIFB5U2V0X0Rpc2NhcmQoUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKmtleSk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U2V0X1BvcChQeU9iamVjdCAqc2V0KTsKK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlTZXRfU2l6ZShQeU9iamVjdCAqYW55c2V0KTsKIAogI2RlZmluZSBQeUZyb3plblNldF9DaGVja0V4YWN0KG9iKSAoUHlfVFlQRShvYikgPT0gJlB5RnJvemVuU2V0X1R5cGUpCiAjZGVmaW5lIFB5QW55U2V0X0NoZWNrRXhhY3Qob2IpIFwKQEAgLTg3LDI2ICsxMDEsNiBAQAogICAgIChQeV9UWVBFKG9iKSA9PSAmUHlGcm96ZW5TZXRfVHlwZSB8fCBcCiAgICAgICBQeVR5cGVfSXNTdWJ0eXBlKFB5X1RZUEUob2IpLCAmUHlGcm96ZW5TZXRfVHlwZSkpCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTZXRfTmV3KFB5T2JqZWN0ICopOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZyb3plblNldF9OZXcoUHlPYmplY3QgKik7Ci1QeUFQSV9GVU5DKFB5X3NzaXplX3QpIFB5U2V0X1NpemUoUHlPYmplY3QgKmFueXNldCk7Ci0jaWZuZGVmIFB5X0xJTUlURURfQVBJCi0jZGVmaW5lIFB5U2V0X0dFVF9TSVpFKHNvKSAoKChQeVNldE9iamVjdCAqKShzbykpLT51c2VkKQotI2VuZGlmCi1QeUFQSV9GVU5DKGludCkgUHlTZXRfQ2xlYXIoUHlPYmplY3QgKnNldCk7Ci1QeUFQSV9GVU5DKGludCkgUHlTZXRfQ29udGFpbnMoUHlPYmplY3QgKmFueXNldCwgUHlPYmplY3QgKmtleSk7Ci1QeUFQSV9GVU5DKGludCkgUHlTZXRfRGlzY2FyZChQeU9iamVjdCAqc2V0LCBQeU9iamVjdCAqa2V5KTsKLVB5QVBJX0ZVTkMoaW50KSBQeVNldF9BZGQoUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKmtleSk7Ci0jaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKGludCkgX1B5U2V0X05leHRFbnRyeShQeU9iamVjdCAqc2V0LCBQeV9zc2l6ZV90ICpwb3MsIFB5T2JqZWN0ICoqa2V5LCBQeV9oYXNoX3QgKmhhc2gpOwotI2VuZGlmCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U2V0X1BvcChQeU9iamVjdCAqc2V0KTsKLSNpZm5kZWYgUHlfTElNSVRFRF9BUEkKLVB5QVBJX0ZVTkMoaW50KSBfUHlTZXRfVXBkYXRlKFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICppdGVyYWJsZSk7Ci0KLVB5QVBJX0ZVTkMoaW50KSBQeVNldF9DbGVhckZyZWVMaXN0KHZvaWQpOwotI2VuZGlmCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3NsaWNlb2JqZWN0LmggYi9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKaW5kZXggZjdlZTkwYy4uMjYzNzBlMCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zbGljZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvc2xpY2VvYmplY3QuaApAQCAtNDEsNyArNDEsNyBAQAogUHlBUElfRlVOQyhpbnQpIFB5U2xpY2VfR2V0SW5kaWNlcyhQeU9iamVjdCAqciwgUHlfc3NpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXApOwogUHlBUElfRlVOQyhpbnQpIFB5U2xpY2VfR2V0SW5kaWNlc0V4KFB5T2JqZWN0ICpyLCBQeV9zc2l6ZV90IGxlbmd0aCwKLQkJCQkgICAgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIAorCQkJCSAgICBQeV9zc2l6ZV90ICpzdGFydCwgUHlfc3NpemVfdCAqc3RvcCwKIAkJCQkgICAgUHlfc3NpemVfdCAqc3RlcCwgUHlfc3NpemVfdCAqc2xpY2VsZW5ndGgpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3ltdGFibGUuaCBiL0luY2x1ZGUvc3ltdGFibGUuaAppbmRleCAxY2ZkODg0Li4xNDA5Y2Q5IDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5bXRhYmxlLmgKKysrIGIvSW5jbHVkZS9zeW10YWJsZS5oCkBAIC00Myw3ICs0Myw2IEBACiAgICAgUHlPYmplY3QgKnN0ZV9jaGlsZHJlbjsgIC8qIGxpc3Qgb2YgY2hpbGQgYmxvY2tzICovCiAgICAgUHlPYmplY3QgKnN0ZV9kaXJlY3RpdmVzOy8qIGxvY2F0aW9ucyBvZiBnbG9iYWwgYW5kIG5vbmxvY2FsIHN0YXRlbWVudHMgKi8KICAgICBfUHlfYmxvY2tfdHkgc3RlX3R5cGU7ICAgLyogbW9kdWxlLCBjbGFzcywgb3IgZnVuY3Rpb24gKi8KLSAgICBpbnQgc3RlX3Vub3B0aW1pemVkOyAgICAgLyogZmFsc2UgaWYgbmFtZXNwYWNlIGlzIG9wdGltaXplZCAqLwogICAgIGludCBzdGVfbmVzdGVkOyAgICAgIC8qIHRydWUgaWYgYmxvY2sgaXMgbmVzdGVkICovCiAgICAgdW5zaWduZWQgc3RlX2ZyZWUgOiAxOyAgICAgICAgLyogdHJ1ZSBpZiBibG9jayBoYXMgZnJlZSB2YXJpYWJsZXMgKi8KICAgICB1bnNpZ25lZCBzdGVfY2hpbGRfZnJlZSA6IDE7ICAvKiB0cnVlIGlmIGEgY2hpbGQgYmxvY2sgaGFzIGZyZWUgdmFycywKQEAgLTEwOCwxMCArMTA3LDYgQEAKICNkZWZpbmUgRlJFRSA0CiAjZGVmaW5lIENFTEwgNQogCi0vKiBUaGUgZm9sbG93aW5nIHR3byBuYW1lcyBhcmUgdXNlZCBmb3IgdGhlIHN0ZV91bm9wdGltaXplZCBiaXQgZmllbGQgKi8KLSNkZWZpbmUgT1BUX0lNUE9SVF9TVEFSIDEKLSNkZWZpbmUgT1BUX1RPUExFVkVMIDIgIC8qIHRvcC1sZXZlbCBuYW1lcywgaW5jbHVkaW5nIGV2YWwgYW5kIGV4ZWMgKi8KLQogI2RlZmluZSBHRU5FUkFUT1IgMQogI2RlZmluZSBHRU5FUkFUT1JfRVhQUkVTU0lPTiAyCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvdG9rZW4uaCBiL0luY2x1ZGUvdG9rZW4uaAppbmRleCA5MDUwMjJiLi41OTVhZmEwIDEwMDY0NAotLS0gYS9JbmNsdWRlL3Rva2VuLmgKKysrIGIvSW5jbHVkZS90b2tlbi5oCkBAIC01OCwxMyArNTgsMTYgQEAKICNkZWZpbmUgRE9VQkxFU1RBUkVRVUFMCTQ2CiAjZGVmaW5lIERPVUJMRVNMQVNICTQ3CiAjZGVmaW5lIERPVUJMRVNMQVNIRVFVQUwgNDgKLSNkZWZpbmUgQVQgICAgICAgICAgICAgIDQ5CQotI2RlZmluZSBSQVJST1cgICAgICAgICAgNTAKLSNkZWZpbmUgRUxMSVBTSVMgICAgICAgIDUxCisjZGVmaW5lIEFUICAgICAgICAgICAgICA0OQorI2RlZmluZSBBVEVRVUFMCQk1MAorI2RlZmluZSBSQVJST1cgICAgICAgICAgNTEKKyNkZWZpbmUgRUxMSVBTSVMgICAgICAgIDUyCiAvKiBEb24ndCBmb3JnZXQgdG8gdXBkYXRlIHRoZSB0YWJsZSBfUHlQYXJzZXJfVG9rZW5OYW1lcyBpbiB0b2tlbml6ZXIuYyEgKi8KLSNkZWZpbmUgT1AJCTUyCi0jZGVmaW5lIEVSUk9SVE9LRU4JNTMKLSNkZWZpbmUgTl9UT0tFTlMJNTQKKyNkZWZpbmUgT1AJCTUzCisjZGVmaW5lIEFXQUlUCQk1NAorI2RlZmluZSBBU1lOQwkJNTUKKyNkZWZpbmUgRVJST1JUT0tFTgk1NgorI2RlZmluZSBOX1RPS0VOUwk1NwogCiAvKiBTcGVjaWFsIGRlZmluaXRpb25zIGZvciBjb29wZXJhdGlvbiB3aXRoIHBhcnNlciAqLwogCmRpZmYgLS1naXQgYS9JbmNsdWRlL3RyYWNlYmFjay5oIGIvSW5jbHVkZS90cmFjZWJhY2suaAppbmRleCA4OTEwMDBjLi5jM2VjYmUyIDEwMDY0NAotLS0gYS9JbmNsdWRlL3RyYWNlYmFjay5oCisrKyBiL0luY2x1ZGUvdHJhY2ViYWNrLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogICAgVGhpcyBmdW5jdGlvbiBpcyBzaWduYWwgc2FmZS4gKi8KIAotUHlBUElfREFUQSh2b2lkKSBfUHlfRHVtcFRyYWNlYmFjaygKK1B5QVBJX0ZVTkModm9pZCkgX1B5X0R1bXBUcmFjZWJhY2soCiAgICAgaW50IGZkLAogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSk7CiAKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgVGhpcyBmdW5jdGlvbiBpcyBzaWduYWwgc2FmZS4gKi8KIAotUHlBUElfREFUQShjb25zdCBjaGFyKikgX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKAorUHlBUElfRlVOQyhjb25zdCBjaGFyKikgX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKAogICAgIGludCBmZCwgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAsCiAgICAgUHlUaHJlYWRTdGF0ZSAqY3VycmVudF90aHJlYWQpOwogCmRpZmYgLS1naXQgYS9JbmNsdWRlL3R5cGVzbG90cy5oIGIvSW5jbHVkZS90eXBlc2xvdHMuaAppbmRleCBhZDNjZGZiLi4wY2U2YTM3IDEwMDY0NAotLS0gYS9JbmNsdWRlL3R5cGVzbG90cy5oCisrKyBiL0luY2x1ZGUvdHlwZXNsb3RzLmgKQEAgLTc0LDMgKzc0LDEyIEBACiAjZGVmaW5lIFB5X3RwX21lbWJlcnMgNzIKICNkZWZpbmUgUHlfdHBfZ2V0c2V0IDczCiAjZGVmaW5lIFB5X3RwX2ZyZWUgNzQKKyNkZWZpbmUgUHlfbmJfbWF0cml4X211bHRpcGx5IDc1CisjZGVmaW5lIFB5X25iX2lucGxhY2VfbWF0cml4X211bHRpcGx5IDc2CisjZGVmaW5lIFB5X2FtX2F3YWl0IDc3CisjZGVmaW5lIFB5X2FtX2FpdGVyIDc4CisjZGVmaW5lIFB5X2FtX2FuZXh0IDc5CisjaWYgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzA1MDAwMAorLyogTmV3IGluIDMuNSAqLworI2RlZmluZSBQeV90cF9maW5hbGl6ZSA4MAorI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3Vjbmhhc2guaCBiL0luY2x1ZGUvdWNuaGFzaC5oCmluZGV4IDhkZTliYTAuLjQ1MzYyZTkgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdWNuaGFzaC5oCisrKyBiL0luY2x1ZGUvdWNuaGFzaC5oCkBAIC0xNiw3ICsxNiw3IEBACiAgICAgaW50IHNpemU7CiAKICAgICAvKiBHZXQgbmFtZSBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIgY29kZS4gIFJldHVybnMgbm9uLXplcm8gaWYKLSAgICAgICBzdWNjZXNzLCB6ZXJvIGlmIG5vdC4gIERvZXMgbm90IHNldCBQeXRob24gZXhjZXB0aW9ucy4gCisgICAgICAgc3VjY2VzcywgemVybyBpZiBub3QuICBEb2VzIG5vdCBzZXQgUHl0aG9uIGV4Y2VwdGlvbnMuCiAgICAgICAgSWYgc2VsZiBpcyBOVUxMLCBkYXRhIGNvbWUgZnJvbSB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZS4KICAgICAgICBJZiBpdCBpcyBub3QgTlVMTCwgaXQgc2hvdWxkIGJlIGEgdW5pY29kZWRhdGEudWNkX1hfWV9aIG9iamVjdCAqLwogICAgIGludCAoKmdldG5hbWUpKFB5T2JqZWN0ICpzZWxmLCBQeV9VQ1M0IGNvZGUsIGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmxlbiwKZGlmZiAtLWdpdCBhL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oIGIvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKaW5kZXggZjE5ZDliZi4uNTMzZGQ3NSAxMDA2NDQKLS0tIGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKQEAgLTgyMyw3ICs4MjMsNyBAQAogUHlBUElfRlVOQyhQeV9VTklDT0RFKSBQeVVuaWNvZGVfR2V0TWF4KHZvaWQpOwogI2VuZGlmCiAKLS8qIFJlc2l6ZSBhbiBVbmljb2RlIG9iamVjdC4gVGhlIGxlbmd0aCBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIGV4Y2VwdAorLyogUmVzaXplIGEgVW5pY29kZSBvYmplY3QuIFRoZSBsZW5ndGggaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzLCBleGNlcHQKICAgIGlmIHRoZSBraW5kIG9mIHRoZSBzdHJpbmcgaXMgUHlVbmljb2RlX1dDSEFSX0tJTkQ6IGluIHRoaXMgY2FzZSwgdGhlIGxlbmd0aAogICAgaXMgdGhlIG51bWJlciBvZiBQeV9VTklDT0RFIGNoYXJhY3RlcnMuCiAKQEAgLTg0NCwxNyArODQ0LDEzIEBACiAgICAgUHlfc3NpemVfdCBsZW5ndGggICAgICAgICAgIC8qIE5ldyBsZW5ndGggKi8KICAgICApOwogCi0vKiBDb2VyY2Ugb2JqIHRvIGFuIFVuaWNvZGUgb2JqZWN0IGFuZCByZXR1cm4gYSByZWZlcmVuY2Ugd2l0aAotICAgKmluY3JlbWVudGVkKiByZWZjb3VudC4KKy8qIERlY29kZSBvYmogdG8gYSBVbmljb2RlIG9iamVjdC4KIAotICAgQ29lcmNpb24gaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHdheToKKyAgIGJ5dGVzLCBieXRlYXJyYXkgYW5kIG90aGVyIGJ5dGVzLWxpa2Ugb2JqZWN0cyBhcmUgZGVjb2RlZCBhY2NvcmRpbmcgdG8gdGhlCisgICBnaXZlbiBlbmNvZGluZyBhbmQgZXJyb3IgaGFuZGxlci4gVGhlIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGVyIGNhbiBiZQorICAgTlVMTCB0byBoYXZlIHRoZSBpbnRlcmZhY2UgdXNlIFVURi04IGFuZCAic3RyaWN0Ii4KIAotICAgMS4gYnl0ZXMsIGJ5dGVhcnJheSBhbmQgb3RoZXIgYnl0ZXMtbGlrZSBvYmplY3RzIGFyZSBkZWNvZGVkCi0gICAgICB1bmRlciB0aGUgYXNzdW1wdGlvbnMgdGhhdCB0aGV5IGNvbnRhaW4gZGF0YSB1c2luZyB0aGUgVVRGLTgKLSAgICAgIGVuY29kaW5nLiBEZWNvZGluZyBpcyBkb25lIGluICJzdHJpY3QiIG1vZGUuCi0KLSAgIDIuIEFsbCBvdGhlciBvYmplY3RzIChpbmNsdWRpbmcgVW5pY29kZSBvYmplY3RzKSByYWlzZSBhbgotICAgICAgZXhjZXB0aW9uLgorICAgQWxsIG90aGVyIG9iamVjdHMgKGluY2x1ZGluZyBVbmljb2RlIG9iamVjdHMpIHJhaXNlIGFuIGV4Y2VwdGlvbi4KIAogICAgVGhlIEFQSSByZXR1cm5zIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQogICAgZm9yIGRlY3JlZidpbmcgdGhlIHJldHVybmVkIG9iamVjdHMuCkBAIC04NjcsMTMgKzg2Myw5IEBACiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKIAotLyogQ29lcmNlIG9iaiB0byBhbiBVbmljb2RlIG9iamVjdCBhbmQgcmV0dXJuIGEgcmVmZXJlbmNlIHdpdGgKLSAgICppbmNyZW1lbnRlZCogcmVmY291bnQuCi0KLSAgIFVuaWNvZGUgb2JqZWN0cyBhcmUgcGFzc2VkIGJhY2sgYXMtaXMgKHN1YmNsYXNzZXMgYXJlIGNvbnZlcnRlZCB0bwotICAgdHJ1ZSBVbmljb2RlIG9iamVjdHMpLCBhbGwgb3RoZXIgb2JqZWN0cyBhcmUgZGVsZWdhdGVkIHRvCi0gICBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qob2JqLCBOVUxMLCAic3RyaWN0Iikgd2hpY2ggcmVzdWx0cyBpbgotICAgdXNpbmcgVVRGLTggZW5jb2RpbmcgYXMgYmFzaXMgZm9yIGRlY29kaW5nIHRoZSBvYmplY3QuCisvKiBDb3B5IGFuIGluc3RhbmNlIG9mIGEgVW5pY29kZSBzdWJ0eXBlIHRvIGEgbmV3IHRydWUgVW5pY29kZSBvYmplY3QgaWYKKyAgIG5lY2Vzc2FyeS4gSWYgb2JqIGlzIGFscmVhZHkgYSB0cnVlIFVuaWNvZGUgb2JqZWN0IChub3QgYSBzdWJ0eXBlKSwgcmV0dXJuCisgICB0aGUgcmVmZXJlbmNlIHdpdGggKmluY3JlbWVudGVkKiByZWZjb3VudC4KIAogICAgVGhlIEFQSSByZXR1cm5zIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQogICAgZm9yIGRlY3JlZidpbmcgdGhlIHJldHVybmVkIG9iamVjdHMuCkBAIC05ODEsNyArOTczLDcgQEAKICAgICBQeV9zc2l6ZV90IGxlbiAgICAgICAgICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgKi8KICAgICApOwogCi0vKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSB3cml0ZXIgYXMgYW4gVW5pY29kZSBzdHJpbmcuIENsZWFyIHRoZQorLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgd3JpdGVyIGFzIGEgVW5pY29kZSBzdHJpbmcuIENsZWFyIHRoZQogICAgYnVmZmVyIG9mIHRoZSB3cml0ZXIuIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIE5VTEwKICAgIG9uIGVycm9yLiAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKQpAQCAtMjA1Miw3ICsyMDQ0LDcgQEAKIC8qIENoZWNrcyB3aGV0aGVyIGVsZW1lbnQgaXMgY29udGFpbmVkIGluIGNvbnRhaW5lciBhbmQgcmV0dXJuIDEvMAogICAgYWNjb3JkaW5nbHkuCiAKLSAgIGVsZW1lbnQgaGFzIHRvIGNvZXJjZSB0byBhbiBvbmUgZWxlbWVudCBVbmljb2RlIHN0cmluZy4gLTEgaXMKKyAgIGVsZW1lbnQgaGFzIHRvIGNvZXJjZSB0byBhIG9uZSBlbGVtZW50IFVuaWNvZGUgc3RyaW5nLiAtMSBpcwogICAgcmV0dXJuZWQgaW4gY2FzZSBvZiBhbiBlcnJvci4gKi8KIAogUHlBUElfRlVOQyhpbnQpIFB5VW5pY29kZV9Db250YWlucygKQEAgLTIwNjAsMTIgKzIwNTIsNiBAQAogICAgIFB5T2JqZWN0ICplbGVtZW50ICAgICAgICAgICAvKiBFbGVtZW50IHN0cmluZyAqLwogICAgICk7CiAKLS8qIENoZWNrcyB3aGV0aGVyIHRoZSBzdHJpbmcgY29udGFpbnMgYW55IE5VTCBjaGFyYWN0ZXJzLiAqLwotCi0jaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKGludCkgX1B5VW5pY29kZV9IYXNOVUxDaGFycyhQeU9iamVjdCAqKTsKLSNlbmRpZgotCiAvKiBDaGVja3Mgd2hldGhlciBhcmd1bWVudCBpcyBhIHZhbGlkIGlkZW50aWZpZXIuICovCiAKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfSXNJZGVudGlmaWVyKFB5T2JqZWN0ICpzKTsKQEAgLTIyNDUsNiArMjIzMSw4IEBACiAgICAgUHlfVU5JQ09ERSBjCiAgICAgKTsKIAorUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeVVuaWNvZGVfRm9ybWF0TG9uZyhQeU9iamVjdCAqLCBpbnQsIGludCwgaW50KTsKKwogLyogQ3JlYXRlIGEgY29weSBvZiBhIHVuaWNvZGUgc3RyaW5nIGVuZGluZyB3aXRoIGEgbnVsIGNoYXJhY3Rlci4gUmV0dXJuIE5VTEwKICAgIGFuZCByYWlzZSBhIE1lbW9yeUVycm9yIGV4Y2VwdGlvbiBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLCBvdGhlcndpc2UKICAgIHJldHVybiBhIG5ldyBhbGxvY2F0ZWQgYnVmZmVyICh1c2UgUHlNZW1fRnJlZSgpIHRvIGZyZWUgdGhlIGJ1ZmZlcikuICovCmRpZmYgLS1naXQgYS9MaWIvX19mdXR1cmVfXy5weSBiL0xpYi9fX2Z1dHVyZV9fLnB5CmluZGV4IDNiMmQ1ZWMuLjYzYjJiZTMgMTAwNjQ0Ci0tLSBhL0xpYi9fX2Z1dHVyZV9fLnB5CisrKyBiL0xpYi9fX2Z1dHVyZV9fLnB5CkBAIC01Niw2ICs1Niw3IEBACiAgICAgInByaW50X2Z1bmN0aW9uIiwKICAgICAidW5pY29kZV9saXRlcmFscyIsCiAgICAgImJhcnJ5X2FzX0ZMVUZMIiwKKyAgICAiZ2VuZXJhdG9yX3N0b3AiLAogXQogCiBfX2FsbF9fID0gWyJhbGxfZmVhdHVyZV9uYW1lcyJdICsgYWxsX2ZlYXR1cmVfbmFtZXMKQEAgLTcyLDYgKzczLDcgQEAKIENPX0ZVVFVSRV9QUklOVF9GVU5DVElPTiAgPSAweDEwMDAwICAgIyBwcmludCBmdW5jdGlvbgogQ09fRlVUVVJFX1VOSUNPREVfTElURVJBTFMgPSAweDIwMDAwICMgdW5pY29kZSBzdHJpbmcgbGl0ZXJhbHMKIENPX0ZVVFVSRV9CQVJSWV9BU19CREZMID0gMHg0MDAwMAorQ09fRlVUVVJFX0dFTkVSQVRPUl9TVE9QICA9IDB4ODAwMDAgIyBTdG9wSXRlcmF0aW9uIGJlY29tZXMgUnVudGltZUVycm9yIGluIGdlbmVyYXRvcnMKIAogY2xhc3MgX0ZlYXR1cmU6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbmFsUmVsZWFzZSwgbWFuZGF0b3J5UmVsZWFzZSwgY29tcGlsZXJfZmxhZyk6CkBAIC0xMzIsMyArMTM0LDcgQEAKIGJhcnJ5X2FzX0ZMVUZMID0gX0ZlYXR1cmUoKDMsIDEsIDAsICJhbHBoYSIsIDIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgzLCA5LCAwLCAiYWxwaGEiLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBDT19GVVRVUkVfQkFSUllfQVNfQkRGTCkKKworZ2VuZXJhdG9yX3N0b3AgPSBfRmVhdHVyZSgoMywgNSwgMCwgImJldGEiLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMywgNywgMCwgImFscGhhIiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgQ09fRlVUVVJFX0dFTkVSQVRPUl9TVE9QKQpkaWZmIC0tZ2l0IGEvTGliL19jb2xsZWN0aW9uc19hYmMucHkgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQppbmRleCAzM2I1OWFiLi5mYzljOWYxIDEwMDY0NAotLS0gYS9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQorKysgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQpAQCAtOSw3ICs5LDggQEAKIGZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAogaW1wb3J0IHN5cwogCi1fX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCitfX2FsbF9fID0gWyJBd2FpdGFibGUiLCAiQ29yb3V0aW5lIiwgIkFzeW5jSXRlcmFibGUiLCAiQXN5bmNJdGVyYXRvciIsCisgICAgICAgICAgICJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsICJHZW5lcmF0b3IiLAogICAgICAgICAgICAiU2l6ZWQiLCAiQ29udGFpbmVyIiwgIkNhbGxhYmxlIiwKICAgICAgICAgICAgIlNldCIsICJNdXRhYmxlU2V0IiwKICAgICAgICAgICAgIk1hcHBpbmciLCAiTXV0YWJsZU1hcHBpbmciLApAQCAtNTAsNiArNTEsMTMgQEAKIGRpY3RfaXRlbXMgPSB0eXBlKHt9Lml0ZW1zKCkpCiAjIyBtaXNjICMjCiBtYXBwaW5ncHJveHkgPSB0eXBlKHR5cGUuX19kaWN0X18pCitnZW5lcmF0b3IgPSB0eXBlKChsYW1iZGE6ICh5aWVsZCkpKCkpCisjIyBjb3JvdXRpbmUgIyMKK2FzeW5jIGRlZiBfY29ybygpOiBwYXNzCitfY29ybyA9IF9jb3JvKCkKK2Nvcm91dGluZSA9IHR5cGUoX2Nvcm8pCitfY29yby5jbG9zZSgpICAjIFByZXZlbnQgUmVzb3VyY2VXYXJuaW5nCitkZWwgX2Nvcm8KIAogCiAjIyMgT05FLVRSSUNLIFBPTklFUyAjIyMKQEAgLTczLDYgKzgxLDExMyBAQAogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogCitjbGFzcyBBd2FpdGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgIHlpZWxkCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgQXdhaXRhYmxlOgorICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgorICAgICAgICAgICAgICAgIGlmICJfX2F3YWl0X18iIGluIEIuX19kaWN0X186CisgICAgICAgICAgICAgICAgICAgIGlmIEIuX19kaWN0X19bIl9fYXdhaXRfXyJdOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQ29yb3V0aW5lKEF3YWl0YWJsZSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlbmQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJTZW5kIGEgdmFsdWUgaW50byB0aGUgY29yb3V0aW5lLgorICAgICAgICBSZXR1cm4gbmV4dCB5aWVsZGVkIHZhbHVlIG9yIHJhaXNlIFN0b3BJdGVyYXRpb24uCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgdGhyb3coc2VsZiwgdHlwLCB2YWw9Tm9uZSwgdGI9Tm9uZSk6CisgICAgICAgICIiIlJhaXNlIGFuIGV4Y2VwdGlvbiBpbiB0aGUgY29yb3V0aW5lLgorICAgICAgICBSZXR1cm4gbmV4dCB5aWVsZGVkIHZhbHVlIG9yIHJhaXNlIFN0b3BJdGVyYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHRiIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgdHlwCisgICAgICAgICAgICB2YWwgPSB0eXAoKQorICAgICAgICBpZiB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbCA9IHZhbC53aXRoX3RyYWNlYmFjayh0YikKKyAgICAgICAgcmFpc2UgdmFsCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIlJhaXNlIEdlbmVyYXRvckV4aXQgaW5zaWRlIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGhyb3coR2VuZXJhdG9yRXhpdCkKKyAgICAgICAgZXhjZXB0IChHZW5lcmF0b3JFeGl0LCBTdG9wSXRlcmF0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY29yb3V0aW5lIGlnbm9yZWQgR2VuZXJhdG9yRXhpdCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgQ29yb3V0aW5lOgorICAgICAgICAgICAgbXJvID0gQy5fX21yb19fCisgICAgICAgICAgICBmb3IgbWV0aG9kIGluICgnX19hd2FpdF9fJywgJ3NlbmQnLCAndGhyb3cnLCAnY2xvc2UnKToKKyAgICAgICAgICAgICAgICBmb3IgYmFzZSBpbiBtcm86CisgICAgICAgICAgICAgICAgICAgIGlmIG1ldGhvZCBpbiBiYXNlLl9fZGljdF9fOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK0Nvcm91dGluZS5yZWdpc3Rlcihjb3JvdXRpbmUpCisKKworY2xhc3MgQXN5bmNJdGVyYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fYWl0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIEFzeW5jSXRlcmF0b3IoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEFzeW5jSXRlcmFibGU6CisgICAgICAgICAgICBpZiBhbnkoIl9fYWl0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEFzeW5jSXRlcmF0b3IoQXN5bmNJdGVyYWJsZSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgYXN5bmMgZGVmIF9fYW5leHRfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBuZXh0IGl0ZW0gb3IgcmFpc2UgU3RvcEFzeW5jSXRlcmF0aW9uIHdoZW4gZXhoYXVzdGVkLiIiIgorICAgICAgICByYWlzZSBTdG9wQXN5bmNJdGVyYXRpb24KKworICAgIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgQXN5bmNJdGVyYXRvcjoKKyAgICAgICAgICAgIGlmIChhbnkoIl9fYW5leHRfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pIGFuZAorICAgICAgICAgICAgICAgIGFueSgiX19haXRlcl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKIGNsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKIAogICAgIF9fc2xvdHNfXyA9ICgpCkBAIC0xMjQsNiArMjM5LDY0IEBACiBJdGVyYXRvci5yZWdpc3Rlcih0dXBsZV9pdGVyYXRvcikKIEl0ZXJhdG9yLnJlZ2lzdGVyKHppcF9pdGVyYXRvcikKIAorCitjbGFzcyBHZW5lcmF0b3IoSXRlcmF0b3IpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgZ2VuZXJhdG9yLgorICAgICAgICBXaGVuIGV4aGF1c3RlZCwgcmFpc2UgU3RvcEl0ZXJhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnNlbmQoTm9uZSkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBzZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiU2VuZCBhIHZhbHVlIGludG8gdGhlIGdlbmVyYXRvci4KKyAgICAgICAgUmV0dXJuIG5leHQgeWllbGRlZCB2YWx1ZSBvciByYWlzZSBTdG9wSXRlcmF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHRocm93KHNlbGYsIHR5cCwgdmFsPU5vbmUsIHRiPU5vbmUpOgorICAgICAgICAiIiJSYWlzZSBhbiBleGNlcHRpb24gaW4gdGhlIGdlbmVyYXRvci4KKyAgICAgICAgUmV0dXJuIG5leHQgeWllbGRlZCB2YWx1ZSBvciByYWlzZSBTdG9wSXRlcmF0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0YiBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIHR5cAorICAgICAgICAgICAgdmFsID0gdHlwKCkKKyAgICAgICAgaWYgdGIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWwgPSB2YWwud2l0aF90cmFjZWJhY2sodGIpCisgICAgICAgIHJhaXNlIHZhbAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJSYWlzZSBHZW5lcmF0b3JFeGl0IGluc2lkZSBnZW5lcmF0b3IuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnRocm93KEdlbmVyYXRvckV4aXQpCisgICAgICAgIGV4Y2VwdCAoR2VuZXJhdG9yRXhpdCwgU3RvcEl0ZXJhdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEdlbmVyYXRvcjoKKyAgICAgICAgICAgIG1ybyA9IEMuX19tcm9fXworICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ19faXRlcl9fJywgJ19fbmV4dF9fJywgJ3NlbmQnLCAndGhyb3cnLCAnY2xvc2UnKToKKyAgICAgICAgICAgICAgICBmb3IgYmFzZSBpbiBtcm86CisgICAgICAgICAgICAgICAgICAgIGlmIG1ldGhvZCBpbiBiYXNlLl9fZGljdF9fOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK0dlbmVyYXRvci5yZWdpc3RlcihnZW5lcmF0b3IpCisKKwogY2xhc3MgU2l6ZWQobWV0YWNsYXNzPUFCQ01ldGEpOgogCiAgICAgX19zbG90c19fID0gKCkKQEAgLTQ1Myw2ICs2MjYsOCBAQAogCiBjbGFzcyBNYXBwaW5nVmlldyhTaXplZCk6CiAKKyAgICBfX3Nsb3RzX18gPSAnX21hcHBpbmcnLAorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgogICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZwogCkBAIC00NjUsNiArNjQwLDggQEAKIAogY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CiAKKyAgICBfX3Nsb3RzX18gPSAoKQorCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKICAgICAgICAgcmV0dXJuIHNldChpdCkKQEAgLTQ4MCw2ICs2NTcsOCBAQAogCiBjbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CiAKKyAgICBfX3Nsb3RzX18gPSAoKQorCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKHNlbGYsIGl0KToKICAgICAgICAgcmV0dXJuIHNldChpdCkKQEAgLTUwMiw2ICs2ODEsOCBAQAogCiBjbGFzcyBWYWx1ZXNWaWV3KE1hcHBpbmdWaWV3KToKIAorICAgIF9fc2xvdHNfXyA9ICgpCisKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgogICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgpAQCAtNjQ3LDEzICs4MjgsMjMgQEAKICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6CiAgICAgICAgICAgICB5aWVsZCBzZWxmW2ldCiAKLSAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgotICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KKyAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUsIHN0YXJ0PTAsIHN0b3A9Tm9uZSk6CisgICAgICAgICcnJ1MuaW5kZXgodmFsdWUsIFtzdGFydCwgW3N0b3BdXSkgLT4gaW50ZWdlciAtLSByZXR1cm4gZmlyc3QgaW5kZXggb2YgdmFsdWUuCiAgICAgICAgICAgIFJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KICAgICAgICAgJycnCi0gICAgICAgIGZvciBpLCB2IGluIGVudW1lcmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgaWYgc3RhcnQgaXMgbm90IE5vbmUgYW5kIHN0YXJ0IDwgMDoKKyAgICAgICAgICAgIHN0YXJ0ID0gbWF4KGxlbihzZWxmKSArIHN0YXJ0LCAwKQorICAgICAgICBpZiBzdG9wIGlzIG5vdCBOb25lIGFuZCBzdG9wIDwgMDoKKyAgICAgICAgICAgIHN0b3AgKz0gbGVuKHNlbGYpCisKKyAgICAgICAgaSA9IHN0YXJ0CisgICAgICAgIHdoaWxlIHN0b3AgaXMgTm9uZSBvciBpIDwgc3RvcDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmW2ldID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGkgKz0gMQogICAgICAgICByYWlzZSBWYWx1ZUVycm9yCiAKICAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgpkaWZmIC0tZ2l0IGEvTGliL19jb21wYXRfcGlja2xlLnB5IGIvTGliL19jb21wYXRfcGlja2xlLnB5CmluZGV4IDZlMzlkNGEuLmMwZTA0NDMgMTAwNjQ0Ci0tLSBhL0xpYi9fY29tcGF0X3BpY2tsZS5weQorKysgYi9MaWIvX2NvbXBhdF9waWNrbGUucHkKQEAgLTE3Nyw2ICsxNzcsMTMgQEAKICAgICAnRG9jWE1MUlBDU2VydmVyJzogJ3htbHJwYy5zZXJ2ZXInLAogICAgICdTaW1wbGVIVFRQU2VydmVyJzogJ2h0dHAuc2VydmVyJywKICAgICAnQ0dJSFRUUFNlcnZlcic6ICdodHRwLnNlcnZlcicsCisgICAgIyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGJyb2tlbiBwaWNrbGVzIHNhdmVkIGluIG9sZCBQeXRob24gMyB2ZXJzaW9ucworICAgICdVc2VyRGljdCc6ICdjb2xsZWN0aW9ucycsCisgICAgJ1VzZXJMaXN0JzogJ2NvbGxlY3Rpb25zJywKKyAgICAnVXNlclN0cmluZyc6ICdjb2xsZWN0aW9ucycsCisgICAgJ3doaWNoZGInOiAnZGJtJywKKyAgICAnU3RyaW5nSU8nOiAgJ2lvJywKKyAgICAnY1N0cmluZ0lPJzogJ2lvJywKIH0pCiAKIFJFVkVSU0VfSU1QT1JUX01BUFBJTkcudXBkYXRlKHsKZGlmZiAtLWdpdCBhL0xpYi9fY29tcHJlc3Npb24ucHkgYi9MaWIvX2NvbXByZXNzaW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMGYzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX2NvbXByZXNzaW9uLnB5CkBAIC0wLDAgKzEsMTUyIEBACisiIiJJbnRlcm5hbCBjbGFzc2VzIHVzZWQgYnkgdGhlIGd6aXAsIGx6bWEgYW5kIGJ6MiBtb2R1bGVzIiIiCisKK2ltcG9ydCBpbworCisKK0JVRkZFUl9TSVpFID0gaW8uREVGQVVMVF9CVUZGRVJfU0laRSAgIyBDb21wcmVzc2VkIGRhdGEgcmVhZCBjaHVuayBzaXplCisKKworY2xhc3MgQmFzZVN0cmVhbShpby5CdWZmZXJlZElPQmFzZSk6CisgICAgIiIiTW9kZS1jaGVja2luZyBoZWxwZXIgZnVuY3Rpb25zLiIiIgorCisgICAgZGVmIF9jaGVja19ub3RfY2xvc2VkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQorCisgICAgZGVmIF9jaGVja19jYW5fcmVhZChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG5vdCBvcGVuIGZvciByZWFkaW5nIikKKworICAgIGRlZiBfY2hlY2tfY2FuX3dyaXRlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi53cml0YWJsZSgpOgorICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHdyaXRpbmciKQorCisgICAgZGVmIF9jaGVja19jYW5fc2VlayhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJTZWVraW5nIGlzIG9ubHkgc3VwcG9ydGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBmaWxlcyBvcGVuIGZvciByZWFkaW5nIikKKyAgICAgICAgaWYgbm90IHNlbGYuc2Vla2FibGUoKToKKyAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJUaGUgdW5kZXJseWluZyBmaWxlIG9iamVjdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9lcyBub3Qgc3VwcG9ydCBzZWVraW5nIikKKworCitjbGFzcyBEZWNvbXByZXNzUmVhZGVyKGlvLlJhd0lPQmFzZSk6CisgICAgIiIiQWRhcHRzIHRoZSBkZWNvbXByZXNzb3IgQVBJIHRvIGEgUmF3SU9CYXNlIHJlYWRlciBBUEkiIiIKKworICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcCwgZGVjb21wX2ZhY3RvcnksIHRyYWlsaW5nX2Vycm9yPSgpLCAqKmRlY29tcF9hcmdzKToKKyAgICAgICAgc2VsZi5fZnAgPSBmcAorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZQorICAgICAgICBzZWxmLl9wb3MgPSAwICAjIEN1cnJlbnQgb2Zmc2V0IGluIGRlY29tcHJlc3NlZCBzdHJlYW0KKworICAgICAgICAjIFNldCB0byBzaXplIG9mIGRlY29tcHJlc3NlZCBzdHJlYW0gb25jZSBpdCBpcyBrbm93biwgZm9yIFNFRUtfRU5ECisgICAgICAgIHNlbGYuX3NpemUgPSAtMQorCisgICAgICAgICMgU2F2ZSB0aGUgZGVjb21wcmVzc29yIGZhY3RvcnkgYW5kIGFyZ3VtZW50cy4KKyAgICAgICAgIyBJZiB0aGUgZmlsZSBjb250YWlucyBtdWx0aXBsZSBjb21wcmVzc2VkIHN0cmVhbXMsIGVhY2gKKyAgICAgICAgIyBzdHJlYW0gd2lsbCBuZWVkIGEgc2VwYXJhdGUgZGVjb21wcmVzc29yIG9iamVjdC4gQSBuZXcgZGVjb21wcmVzc29yCisgICAgICAgICMgb2JqZWN0IGlzIGFsc28gbmVlZGVkIHdoZW4gaW1wbGVtZW50aW5nIGEgYmFja3dhcmRzIHNlZWsoKS4KKyAgICAgICAgc2VsZi5fZGVjb21wX2ZhY3RvcnkgPSBkZWNvbXBfZmFjdG9yeQorICAgICAgICBzZWxmLl9kZWNvbXBfYXJncyA9IGRlY29tcF9hcmdzCisgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IHNlbGYuX2RlY29tcF9mYWN0b3J5KCoqc2VsZi5fZGVjb21wX2FyZ3MpCisKKyAgICAgICAgIyBFeGNlcHRpb24gY2xhc3MgdG8gY2F0Y2ggZnJvbSBkZWNvbXByZXNzb3Igc2lnbmlmeWluZyBpbnZhbGlkCisgICAgICAgICMgdHJhaWxpbmcgZGF0YSB0byBpZ25vcmUKKyAgICAgICAgc2VsZi5fdHJhaWxpbmdfZXJyb3IgPSB0cmFpbGluZ19lcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCisgICAgICAgIHJldHVybiBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZwLnNlZWthYmxlKCkKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKKyAgICAgICAgd2l0aCBtZW1vcnl2aWV3KGIpIGFzIHZpZXcsIHZpZXcuY2FzdCgiQiIpIGFzIGJ5dGVfdmlldzoKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobGVuKGJ5dGVfdmlldykpCisgICAgICAgICAgICBieXRlX3ZpZXdbOmxlbihkYXRhKV0gPSBkYXRhCisgICAgICAgIHJldHVybiBsZW4oZGF0YSkKKworICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgorICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRhbGwoKQorCisgICAgICAgIGlmIG5vdCBzaXplIG9yIHNlbGYuX2VvZjoKKyAgICAgICAgICAgIHJldHVybiBiIiIKKyAgICAgICAgZGF0YSA9IE5vbmUgICMgRGVmYXVsdCBpZiBFT0YgaXMgZW5jb3VudGVyZWQKKyAgICAgICAgIyBEZXBlbmRpbmcgb24gdGhlIGlucHV0IGRhdGEsIG91ciBjYWxsIHRvIHRoZSBkZWNvbXByZXNzb3IgbWF5IG5vdAorICAgICAgICAjIHJldHVybiBhbnkgZGF0YS4gSW4gdGhpcyBjYXNlLCB0cnkgYWdhaW4gYWZ0ZXIgcmVhZGluZyBhbm90aGVyIGJsb2NrLgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKKyAgICAgICAgICAgICAgICByYXdibG9jayA9IChzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGEgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcC5yZWFkKEJVRkZFUl9TSVpFKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIyBDb250aW51ZSB0byBuZXh0IHN0cmVhbS4KKyAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBzZWxmLl9kZWNvbXBfZmFjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAgKipzZWxmLl9kZWNvbXBfYXJncykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhyYXdibG9jaywgc2l6ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc2VsZi5fdHJhaWxpbmdfZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgVHJhaWxpbmcgZGF0YSBpc24ndCBhIHZhbGlkIGNvbXByZXNzZWQgc3RyZWFtOyBpZ25vcmUgaXQuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3Nvci5uZWVkc19pbnB1dDoKKyAgICAgICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9mcC5yZWFkKEJVRkZFUl9TSVpFKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZC1vZi1zdHJlYW0gbWFya2VyIHdhcyByZWFjaGVkIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYXdibG9jayA9IGIiIgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhyYXdibG9jaywgc2l6ZSkKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICBzZWxmLl9lb2YgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9zaXplID0gc2VsZi5fcG9zCisgICAgICAgICAgICByZXR1cm4gYiIiCisgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICMgUmV3aW5kIHRoZSBmaWxlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgc3RyZWFtLgorICAgIGRlZiBfcmV3aW5kKHNlbGYpOgorICAgICAgICBzZWxmLl9mcC5zZWVrKDApCisgICAgICAgIHNlbGYuX2VvZiA9IEZhbHNlCisgICAgICAgIHNlbGYuX3BvcyA9IDAKKyAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gc2VsZi5fZGVjb21wX2ZhY3RvcnkoKipzZWxmLl9kZWNvbXBfYXJncykKKworICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPWlvLlNFRUtfU0VUKToKKyAgICAgICAgIyBSZWNhbGN1bGF0ZSBvZmZzZXQgYXMgYW4gYWJzb2x1dGUgZmlsZSBwb3NpdGlvbi4KKyAgICAgICAgaWYgd2hlbmNlID09IGlvLlNFRUtfU0VUOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbGlmIHdoZW5jZSA9PSBpby5TRUVLX0NVUjoKKyAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuX3BvcyArIG9mZnNldAorICAgICAgICBlbGlmIHdoZW5jZSA9PSBpby5TRUVLX0VORDoKKyAgICAgICAgICAgICMgU2Vla2luZyByZWxhdGl2ZSB0byBFT0YgLSB3ZSBuZWVkIHRvIGtub3cgdGhlIGZpbGUncyBzaXplLgorICAgICAgICAgICAgaWYgc2VsZi5fc2l6ZSA8IDA6CisgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5yZWFkKGlvLkRFRkFVTFRfQlVGRkVSX1NJWkUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBvZmZzZXQgPSBzZWxmLl9zaXplICsgb2Zmc2V0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciB3aGVuY2U6IHt9Ii5mb3JtYXQod2hlbmNlKSkKKworICAgICAgICAjIE1ha2UgaXQgc28gdGhhdCBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwIGZvcndhcmQuCisgICAgICAgIGlmIG9mZnNldCA8IHNlbGYuX3BvczoKKyAgICAgICAgICAgIHNlbGYuX3Jld2luZCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvZmZzZXQgLT0gc2VsZi5fcG9zCisKKyAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGRhdGEgdW50aWwgd2UgcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uCisgICAgICAgIHdoaWxlIG9mZnNldCA+IDA6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkKG1pbihpby5ERUZBVUxUX0JVRkZFUl9TSVpFLCBvZmZzZXQpKQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIG9mZnNldCAtPSBsZW4oZGF0YSkKKworICAgICAgICByZXR1cm4gc2VsZi5fcG9zCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24uIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9wb3MKZGlmZiAtLWdpdCBhL0xpYi9fZHVtbXlfdGhyZWFkLnB5IGIvTGliL19kdW1teV90aHJlYWQucHkKaW5kZXggYjY3Y2ZiOS4uMzZlNWYzOCAxMDA2NDQKLS0tIGEvTGliL19kdW1teV90aHJlYWQucHkKKysrIGIvTGliL19kdW1teV90aHJlYWQucHkKQEAgLTE0MCw2ICsxNDAsMTQgQEAKICAgICBkZWYgbG9ja2VkKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5sb2NrZWRfc3RhdHVzCiAKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPCVzICVzLiVzIG9iamVjdCBhdCAlcz4iICUgKAorICAgICAgICAgICAgImxvY2tlZCIgaWYgc2VsZi5sb2NrZWRfc3RhdHVzIGVsc2UgInVubG9ja2VkIiwKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICBoZXgoaWQoc2VsZikpCisgICAgICAgICkKKwogIyBVc2VkIHRvIHNpZ25hbCB0aGF0IGludGVycnVwdF9tYWluIHdhcyBjYWxsZWQgaW4gYSAidGhyZWFkIgogX2ludGVycnVwdCA9IEZhbHNlCiAjIFRydWUgd2hlbiBub3QgZXhlY3V0aW5nIGluIGEgInRocmVhZCIKZGlmZiAtLWdpdCBhL0xpYi9fb3N4X3N1cHBvcnQucHkgYi9MaWIvX29zeF9zdXBwb3J0LnB5CmluZGV4IGIwN2U3NWQuLjEzZmNkOGIgMTAwNjQ0Ci0tLSBhL0xpYi9fb3N4X3N1cHBvcnQucHkKKysrIGIvTGliL19vc3hfc3VwcG9ydC5weQpAQCAtMTUxLDEzICsxNTEsMTMgQEAKICAgICAjICAgIGNhbiBvbmx5IGJlIGZvdW5kIGluc2lkZSBYY29kZS5hcHAgaWYgdGhlICJDb21tYW5kIExpbmUgVG9vbHMiCiAgICAgIyAgICBhcmUgbm90IGluc3RhbGxlZC4KICAgICAjCi0gICAgIyAgICBGdXRoZXJtb3JlLCB0aGUgY29tcGlsZXIgdGhhdCBjYW4gYmUgdXNlZCB2YXJpZXMgYmV0d2VlbgorICAgICMgICAgRnVydGhlcm1vcmUsIHRoZSBjb21waWxlciB0aGF0IGNhbiBiZSB1c2VkIHZhcmllcyBiZXR3ZWVuCiAgICAgIyAgICBYY29kZSByZWxlYXNlcy4gVXAgdG8gWGNvZGUgNCBpdCB3YXMgcG9zc2libGUgdG8gdXNlICdnY2MtNC4yJwogICAgICMgICAgYXMgdGhlIGNvbXBpbGVyLCBhZnRlciB0aGF0ICdjbGFuZycgc2hvdWxkIGJlIHVzZWQgYmVjYXVzZQogICAgICMgICAgZ2NjLTQuMiBpcyBlaXRoZXIgbm90IHByZXNlbnQsIG9yIGEgY29weSBvZiAnbGx2bS1nY2MnIHRoYXQKICAgICAjICAgIG1pc2NvbXBpbGVzIFB5dGhvbi4KIAotICAgICMgc2tpcCBjaGVja3MgaWYgdGhlIGNvbXBpbGVyIHdhcyBvdmVycmlkZW4gd2l0aCBhIENDIGVudiB2YXJpYWJsZQorICAgICMgc2tpcCBjaGVja3MgaWYgdGhlIGNvbXBpbGVyIHdhcyBvdmVycmlkZGVuIHdpdGggYSBDQyBlbnYgdmFyaWFibGUKICAgICBpZiAnQ0MnIGluIG9zLmVudmlyb246CiAgICAgICAgIHJldHVybiBfY29uZmlnX3ZhcnMKIApAQCAtMTkzLDcgKzE5Myw3IEBACiAgICAgaWYgY2MgIT0gb2xkY2M6CiAgICAgICAgICMgRm91bmQgYSByZXBsYWNlbWVudCBjb21waWxlci4KICAgICAgICAgIyBNb2RpZnkgY29uZmlnIHZhcnMgdXNpbmcgbmV3IGNvbXBpbGVyLCBpZiBub3QgYWxyZWFkeSBleHBsaWNpdGx5Ci0gICAgICAgICMgb3ZlcnJpZGVuIGJ5IGFuIGVudiB2YXJpYWJsZSwgcHJlc2VydmluZyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KKyAgICAgICAgIyBvdmVycmlkZGVuIGJ5IGFuIGVudiB2YXJpYWJsZSwgcHJlc2VydmluZyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KICAgICAgICAgZm9yIGN2IGluIF9DT01QSUxFUl9DT05GSUdfVkFSUzoKICAgICAgICAgICAgIGlmIGN2IGluIF9jb25maWdfdmFycyBhbmQgY3Ygbm90IGluIG9zLmVudmlyb246CiAgICAgICAgICAgICAgICAgY3Zfc3BsaXQgPSBfY29uZmlnX3ZhcnNbY3ZdLnNwbGl0KCkKQEAgLTIwNyw3ICsyMDcsNyBAQAogICAgICIiIlJlbW92ZSBhbGwgdW5pdmVyc2FsIGJ1aWxkIGFyZ3VtZW50cyBmcm9tIGNvbmZpZyB2YXJzIiIiCiAKICAgICBmb3IgY3YgaW4gX1VOSVZFUlNBTF9DT05GSUdfVkFSUzoKLSAgICAgICAgIyBEbyBub3QgYWx0ZXIgYSBjb25maWcgdmFyIGV4cGxpY2l0bHkgb3ZlcnJpZGVuIGJ5IGVudiB2YXIKKyAgICAgICAgIyBEbyBub3QgYWx0ZXIgYSBjb25maWcgdmFyIGV4cGxpY2l0bHkgb3ZlcnJpZGRlbiBieSBlbnYgdmFyCiAgICAgICAgIGlmIGN2IGluIF9jb25maWdfdmFycyBhbmQgY3Ygbm90IGluIG9zLmVudmlyb246CiAgICAgICAgICAgICBmbGFncyA9IF9jb25maWdfdmFyc1tjdl0KICAgICAgICAgICAgIGZsYWdzID0gcmUuc3ViKCctYXJjaFxzK1x3K1xzJywgJyAnLCBmbGFncywgcmUuQVNDSUkpCkBAIC0yMjgsNyArMjI4LDcgQEAKICAgICAjIGJ1aWxkIGV4dGVuc2lvbnMgb24gT1NYIDEwLjcgYW5kIGxhdGVyIHdpdGggdGhlIHByZWJ1aWx0CiAgICAgIyAzMi1iaXQgaW5zdGFsbGVyIG9uIHRoZSBweXRob24ub3JnIHdlYnNpdGUuCiAKLSAgICAjIHNraXAgY2hlY2tzIGlmIHRoZSBjb21waWxlciB3YXMgb3ZlcnJpZGVuIHdpdGggYSBDQyBlbnYgdmFyaWFibGUKKyAgICAjIHNraXAgY2hlY2tzIGlmIHRoZSBjb21waWxlciB3YXMgb3ZlcnJpZGRlbiB3aXRoIGEgQ0MgZW52IHZhcmlhYmxlCiAgICAgaWYgJ0NDJyBpbiBvcy5lbnZpcm9uOgogICAgICAgICByZXR1cm4gX2NvbmZpZ192YXJzCiAKQEAgLTI0NCw3ICsyNDQsNyBAQAogICAgICAgICAgICAgIyBhY3Jvc3MgWGNvZGUgYW5kIGNvbXBpbGVyIHZlcnNpb25zLCB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkKICAgICAgICAgICAgICMgdG8gYmUgc3VyZSB3aHkgaXQgZmFpbGVkLiAgQXNzdW1lIGhlcmUgaXQgd2FzIGR1ZSB0byBsYWNrIG9mCiAgICAgICAgICAgICAjIFBQQyBzdXBwb3J0IGFuZCByZW1vdmUgdGhlIHJlbGF0ZWQgJy1hcmNoJyBmbGFncyBmcm9tIGVhY2gKLSAgICAgICAgICAgICMgY29uZmlnIHZhcmlhYmxlcyBub3QgZXhwbGljaXRseSBvdmVycmlkZW4gYnkgYW4gZW52aXJvbm1lbnQKKyAgICAgICAgICAgICMgY29uZmlnIHZhcmlhYmxlcyBub3QgZXhwbGljaXRseSBvdmVycmlkZGVuIGJ5IGFuIGVudmlyb25tZW50CiAgICAgICAgICAgICAjIHZhcmlhYmxlLiAgSWYgdGhlIGVycm9yIHdhcyBmb3Igc29tZSBvdGhlciByZWFzb24sIHdlIGhvcGUgdGhlCiAgICAgICAgICAgICAjIGZhaWx1cmUgd2lsbCBzaG93IHVwIGFnYWluIHdoZW4gdHJ5aW5nIHRvIGNvbXBpbGUgYW4gZXh0ZW5zaW9uCiAgICAgICAgICAgICAjIG1vZHVsZS4KQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICBzZGsgPSBtLmdyb3VwKDEpCiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZGspOgogICAgICAgICAgICAgZm9yIGN2IGluIF9VTklWRVJTQUxfQ09ORklHX1ZBUlM6Ci0gICAgICAgICAgICAgICAgIyBEbyBub3QgYWx0ZXIgYSBjb25maWcgdmFyIGV4cGxpY2l0bHkgb3ZlcnJpZGVuIGJ5IGVudiB2YXIKKyAgICAgICAgICAgICAgICAjIERvIG5vdCBhbHRlciBhIGNvbmZpZyB2YXIgZXhwbGljaXRseSBvdmVycmlkZGVuIGJ5IGVudiB2YXIKICAgICAgICAgICAgICAgICBpZiBjdiBpbiBfY29uZmlnX3ZhcnMgYW5kIGN2IG5vdCBpbiBvcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgICAgICBmbGFncyA9IF9jb25maWdfdmFyc1tjdl0KICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSByZS5zdWIocictaXN5c3Jvb3RccytcUysoPzpcc3wkKScsICcgJywgZmxhZ3MpCmRpZmYgLS1naXQgYS9MaWIvX3B5ZGVjaW1hbC5weSBiL0xpYi9fcHlkZWNpbWFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MTk0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX3B5ZGVjaW1hbC5weQpAQCAtMCwwICsxLDYzODAgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDA0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisjIFdyaXR0ZW4gYnkgRXJpYyBQcmljZSA8ZXByaWNlIGF0IHRqaHNzdC5lZHU+CisjICAgIGFuZCBGYWN1bmRvIEJhdGlzdGEgPGZhY3VuZG8gYXQgdGFuaXF1ZXRpbC5jb20uYXI+CisjICAgIGFuZCBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+CisjICAgIGFuZCBBYWh6IDxhYWh6IGF0IHBvYm94LmNvbT4KKyMgICAgYW5kIFRpbSBQZXRlcnMKKworIyBUaGlzIG1vZHVsZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIGxhdGVzdCB1cGRhdGVzIG9mIHRoZQorIyBJQk0gc3BlY2lmaWNhdGlvbiBhcyBpdCBldm9sdmVzLiAgVGhvc2UgdXBkYXRlcyB3aWxsIGJlIHRyZWF0ZWQKKyMgYXMgYnVnIGZpeGVzIChkZXZpYXRpb24gZnJvbSB0aGUgc3BlYyBpcyBhIGNvbXBhdGliaWxpdHksIHVzYWJpbGl0eQorIyBidWcpIGFuZCB3aWxsIGJlIGJhY2twb3J0ZWQuICBBdCB0aGlzIHBvaW50IHRoZSBzcGVjIGlzIHN0YWJpbGl6aW5nCisjIGFuZCB0aGUgdXBkYXRlcyBhcmUgYmVjb21pbmcgZmV3ZXIsIHNtYWxsZXIsIGFuZCBsZXNzIHNpZ25pZmljYW50LgorCisiIiIKK1RoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljIGJhc2VkIG9uCit0aGUgR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgU3BlY2lmaWNhdGlvbjoKKworICAgIGh0dHA6Ly9zcGVsZW90cm92ZS5jb20vZGVjaW1hbC9kZWNhcml0aC5odG1sCisKK2FuZCBJRUVFIHN0YW5kYXJkIDg1NC0xOTg3OgorCisgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JRUVFXzg1NC0xOTg3CisKK0RlY2ltYWwgZmxvYXRpbmcgcG9pbnQgaGFzIGZpbml0ZSBwcmVjaXNpb24gd2l0aCBhcmJpdHJhcmlseSBsYXJnZSBib3VuZHMuCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgbW9kdWxlIGlzIHRvIHN1cHBvcnQgYXJpdGhtZXRpYyB1c2luZyBmYW1pbGlhcgorInNjaG9vbGhvdXNlIiBydWxlcyBhbmQgdG8gYXZvaWQgc29tZSBvZiB0aGUgdHJpY2t5IHJlcHJlc2VudGF0aW9uCitpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIGJpbmFyeSBmbG9hdGluZyBwb2ludC4gIFRoZSBwYWNrYWdlIGlzIGVzcGVjaWFsbHkKK3VzZWZ1bCBmb3IgZmluYW5jaWFsIGFwcGxpY2F0aW9ucyBvciBmb3IgY29udGV4dHMgd2hlcmUgdXNlcnMgaGF2ZQorZXhwZWN0YXRpb25zIHRoYXQgYXJlIGF0IG9kZHMgd2l0aCBiaW5hcnkgZmxvYXRpbmcgcG9pbnQgKGZvciBpbnN0YW5jZSwKK2luIGJpbmFyeSBmbG9hdGluZyBwb2ludCwgMS4wMCAlIDAuMSBnaXZlcyAwLjA5OTk5OTk5OTk5OTk5OTk1IGluc3RlYWQKK29mIDAuMDsgRGVjaW1hbCgnMS4wMCcpICUgRGVjaW1hbCgnMC4xJykgcmV0dXJucyB0aGUgZXhwZWN0ZWQKK0RlY2ltYWwoJzAuMDAnKSkuCisKK0hlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgdXNpbmcgdGhlIGRlY2ltYWwgbW9kdWxlOgorCis+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCAqCis+Pj4gc2V0Y29udGV4dChFeHRlbmRlZENvbnRleHQpCis+Pj4gRGVjaW1hbCgwKQorRGVjaW1hbCgnMCcpCis+Pj4gRGVjaW1hbCgnMScpCitEZWNpbWFsKCcxJykKKz4+PiBEZWNpbWFsKCctLjAxMjMnKQorRGVjaW1hbCgnLTAuMDEyMycpCis+Pj4gRGVjaW1hbCgxMjM0NTYpCitEZWNpbWFsKCcxMjM0NTYnKQorPj4+IERlY2ltYWwoJzEyMy40NWUxMjM0NTY3OCcpCitEZWNpbWFsKCcxLjIzNDVFKzEyMzQ1NjgwJykKKz4+PiBEZWNpbWFsKCcxLjMzJykgKyBEZWNpbWFsKCcxLjI3JykKK0RlY2ltYWwoJzIuNjAnKQorPj4+IERlY2ltYWwoJzEyLjM0JykgKyBEZWNpbWFsKCczLjg3JykgLSBEZWNpbWFsKCcxOC40MScpCitEZWNpbWFsKCctMi4yMCcpCis+Pj4gZGlnID0gRGVjaW1hbCgxKQorPj4+IHByaW50KGRpZyAvIERlY2ltYWwoMykpCiswLjMzMzMzMzMzMworPj4+IGdldGNvbnRleHQoKS5wcmVjID0gMTgKKz4+PiBwcmludChkaWcgLyBEZWNpbWFsKDMpKQorMC4zMzMzMzMzMzMzMzMzMzMzMzMKKz4+PiBwcmludChkaWcuc3FydCgpKQorMQorPj4+IHByaW50KERlY2ltYWwoMykuc3FydCgpKQorMS43MzIwNTA4MDc1Njg4NzcyOQorPj4+IHByaW50KERlY2ltYWwoMykgKiogMTIzKQorNC44NTE5Mjc4MDk3Njg5NjQyN0UrNTgKKz4+PiBpbmYgPSBEZWNpbWFsKDEpIC8gRGVjaW1hbCgwKQorPj4+IHByaW50KGluZikKK0luZmluaXR5Cis+Pj4gbmVnaW5mID0gRGVjaW1hbCgtMSkgLyBEZWNpbWFsKDApCis+Pj4gcHJpbnQobmVnaW5mKQorLUluZmluaXR5Cis+Pj4gcHJpbnQobmVnaW5mICsgaW5mKQorTmFOCis+Pj4gcHJpbnQobmVnaW5mICogaW5mKQorLUluZmluaXR5Cis+Pj4gcHJpbnQoZGlnIC8gMCkKK0luZmluaXR5Cis+Pj4gZ2V0Y29udGV4dCgpLnRyYXBzW0RpdmlzaW9uQnlaZXJvXSA9IDEKKz4+PiBwcmludChkaWcgLyAwKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLi4KKyAgLi4uCisgIC4uLgorZGVjaW1hbC5EaXZpc2lvbkJ5WmVybzogeCAvIDAKKz4+PiBjID0gQ29udGV4dCgpCis+Pj4gYy50cmFwc1tJbnZhbGlkT3BlcmF0aW9uXSA9IDAKKz4+PiBwcmludChjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dKQorMAorPj4+IGMuZGl2aWRlKERlY2ltYWwoMCksIERlY2ltYWwoMCkpCitEZWNpbWFsKCdOYU4nKQorPj4+IGMudHJhcHNbSW52YWxpZE9wZXJhdGlvbl0gPSAxCis+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKKzEKKz4+PiBjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dID0gMAorPj4+IHByaW50KGMuZmxhZ3NbSW52YWxpZE9wZXJhdGlvbl0pCiswCis+Pj4gcHJpbnQoYy5kaXZpZGUoRGVjaW1hbCgwKSwgRGVjaW1hbCgwKSkpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorICAuLi4KKyAgLi4uCitkZWNpbWFsLkludmFsaWRPcGVyYXRpb246IDAgLyAwCis+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKKzEKKz4+PiBjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dID0gMAorPj4+IGMudHJhcHNbSW52YWxpZE9wZXJhdGlvbl0gPSAwCis+Pj4gcHJpbnQoYy5kaXZpZGUoRGVjaW1hbCgwKSwgRGVjaW1hbCgwKSkpCitOYU4KKz4+PiBwcmludChjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dKQorMQorPj4+CisiIiIKKworX19hbGxfXyA9IFsKKyAgICAjIFR3byBtYWpvciBjbGFzc2VzCisgICAgJ0RlY2ltYWwnLCAnQ29udGV4dCcsCisKKyAgICAjIE5hbWVkIHR1cGxlIHJlcHJlc2VudGF0aW9uCisgICAgJ0RlY2ltYWxUdXBsZScsCisKKyAgICAjIENvbnRleHRzCisgICAgJ0RlZmF1bHRDb250ZXh0JywgJ0Jhc2ljQ29udGV4dCcsICdFeHRlbmRlZENvbnRleHQnLAorCisgICAgIyBFeGNlcHRpb25zCisgICAgJ0RlY2ltYWxFeGNlcHRpb24nLCAnQ2xhbXBlZCcsICdJbnZhbGlkT3BlcmF0aW9uJywgJ0RpdmlzaW9uQnlaZXJvJywKKyAgICAnSW5leGFjdCcsICdSb3VuZGVkJywgJ1N1Ym5vcm1hbCcsICdPdmVyZmxvdycsICdVbmRlcmZsb3cnLAorICAgICdGbG9hdE9wZXJhdGlvbicsCisKKyAgICAjIEV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIEludmFsaWRPcGVyYXRpb24KKyAgICAnRGl2aXNpb25JbXBvc3NpYmxlJywgJ0ludmFsaWRDb250ZXh0JywgJ0NvbnZlcnNpb25TeW50YXgnLCAnRGl2aXNpb25VbmRlZmluZWQnLAorCisgICAgIyBDb25zdGFudHMgZm9yIHVzZSBpbiBzZXR0aW5nIHVwIGNvbnRleHRzCisgICAgJ1JPVU5EX0RPV04nLCAnUk9VTkRfSEFMRl9VUCcsICdST1VORF9IQUxGX0VWRU4nLCAnUk9VTkRfQ0VJTElORycsCisgICAgJ1JPVU5EX0ZMT09SJywgJ1JPVU5EX1VQJywgJ1JPVU5EX0hBTEZfRE9XTicsICdST1VORF8wNVVQJywKKworICAgICMgRnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgY29udGV4dHMKKyAgICAnc2V0Y29udGV4dCcsICdnZXRjb250ZXh0JywgJ2xvY2FsY29udGV4dCcsCisKKyAgICAjIExpbWl0cyBmb3IgdGhlIEMgdmVyc2lvbiBmb3IgY29tcGF0aWJpbGl0eQorICAgICdNQVhfUFJFQycsICAnTUFYX0VNQVgnLCAnTUlOX0VNSU4nLCAnTUlOX0VUSU5ZJywKKworICAgICMgQyB2ZXJzaW9uOiBjb21waWxlIHRpbWUgY2hvaWNlIHRoYXQgZW5hYmxlcyB0aGUgdGhyZWFkIGxvY2FsIGNvbnRleHQKKyAgICAnSEFWRV9USFJFQURTJworXQorCitfX3huYW1lX18gPSBfX25hbWVfXyAgICAjIHN5cy5tb2R1bGVzIGxvb2t1cCAoLS13aXRob3V0LXRocmVhZHMpCitfX25hbWVfXyA9ICdkZWNpbWFsJyAgICAjIEZvciBwaWNrbGluZworX192ZXJzaW9uX18gPSAnMS43MCcgICAgIyBIaWdoZXN0IHZlcnNpb24gb2YgdGhlIHNwZWMgdGhpcyBjb21wbGllcyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAjIFNlZSBodHRwOi8vc3BlbGVvdHJvdmUuY29tL2RlY2ltYWwvCitfX2xpYm1wZGVjX3ZlcnNpb25fXyA9ICIyLjQuMSIgIyBjb21wYXRpYmxlIGxpYm1wZGVjIHZlcnNpb24KKworaW1wb3J0IG1hdGggYXMgX21hdGgKK2ltcG9ydCBudW1iZXJzIGFzIF9udW1iZXJzCitpbXBvcnQgc3lzCisKK3RyeToKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlIGFzIF9uYW1lZHR1cGxlCisgICAgRGVjaW1hbFR1cGxlID0gX25hbWVkdHVwbGUoJ0RlY2ltYWxUdXBsZScsICdzaWduIGRpZ2l0cyBleHBvbmVudCcpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgRGVjaW1hbFR1cGxlID0gbGFtYmRhICphcmdzOiBhcmdzCisKKyMgUm91bmRpbmcKK1JPVU5EX0RPV04gPSAnUk9VTkRfRE9XTicKK1JPVU5EX0hBTEZfVVAgPSAnUk9VTkRfSEFMRl9VUCcKK1JPVU5EX0hBTEZfRVZFTiA9ICdST1VORF9IQUxGX0VWRU4nCitST1VORF9DRUlMSU5HID0gJ1JPVU5EX0NFSUxJTkcnCitST1VORF9GTE9PUiA9ICdST1VORF9GTE9PUicKK1JPVU5EX1VQID0gJ1JPVU5EX1VQJworUk9VTkRfSEFMRl9ET1dOID0gJ1JPVU5EX0hBTEZfRE9XTicKK1JPVU5EXzA1VVAgPSAnUk9VTkRfMDVVUCcKKworIyBDb21wYXRpYmlsaXR5IHdpdGggdGhlIEMgdmVyc2lvbgorSEFWRV9USFJFQURTID0gVHJ1ZQoraWYgc3lzLm1heHNpemUgPT0gMioqNjMtMToKKyAgICBNQVhfUFJFQyA9IDk5OTk5OTk5OTk5OTk5OTk5OQorICAgIE1BWF9FTUFYID0gOTk5OTk5OTk5OTk5OTk5OTk5CisgICAgTUlOX0VNSU4gPSAtOTk5OTk5OTk5OTk5OTk5OTk5CitlbHNlOgorICAgIE1BWF9QUkVDID0gNDI1MDAwMDAwCisgICAgTUFYX0VNQVggPSA0MjUwMDAwMDAKKyAgICBNSU5fRU1JTiA9IC00MjUwMDAwMDAKKworTUlOX0VUSU5ZID0gTUlOX0VNSU4gLSAoTUFYX1BSRUMtMSkKKworIyBFcnJvcnMKKworY2xhc3MgRGVjaW1hbEV4Y2VwdGlvbihBcml0aG1ldGljRXJyb3IpOgorICAgICIiIkJhc2UgZXhjZXB0aW9uIGNsYXNzLgorCisgICAgVXNlZCBleGNlcHRpb25zIGRlcml2ZSBmcm9tIHRoaXMuCisgICAgSWYgYW4gZXhjZXB0aW9uIGRlcml2ZXMgZnJvbSBhbm90aGVyIGV4Y2VwdGlvbiBiZXNpZGVzIHRoaXMgKHN1Y2ggYXMKKyAgICBVbmRlcmZsb3cgKEluZXhhY3QsIFJvdW5kZWQsIFN1Ym5vcm1hbCkgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBvbmx5CisgICAgY2FsbGVkIGlmIHRoZSBvdGhlcnMgYXJlIHByZXNlbnQuICBUaGlzIGlzbid0IGFjdHVhbGx5IHVzZWQgZm9yCisgICAgYW55dGhpbmcsIHRob3VnaC4KKworICAgIGhhbmRsZSAgLS0gQ2FsbGVkIHdoZW4gY29udGV4dC5fcmFpc2VfZXJyb3IgaXMgY2FsbGVkIGFuZCB0aGUKKyAgICAgICAgICAgICAgIHRyYXBfZW5hYmxlciBpcyBub3Qgc2V0LiAgRmlyc3QgYXJndW1lbnQgaXMgc2VsZiwgc2Vjb25kIGlzIHRoZQorICAgICAgICAgICAgICAgY29udGV4dC4gIE1vcmUgYXJndW1lbnRzIGNhbiBiZSBnaXZlbiwgdGhvc2UgYmVpbmcgYWZ0ZXIKKyAgICAgICAgICAgICAgIHRoZSBleHBsYW5hdGlvbiBpbiBfcmFpc2VfZXJyb3IgKEZvciBleGFtcGxlLAorICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoTmV3RXJyb3IsICcoLXgpIScsIHNlbGYuX3NpZ24pIHdvdWxkCisgICAgICAgICAgICAgICBjYWxsIE5ld0Vycm9yKCkuaGFuZGxlKGNvbnRleHQsIHNlbGYuX3NpZ24pLikKKworICAgIFRvIGRlZmluZSBhIG5ldyBleGNlcHRpb24sIGl0IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGhhdmUgaXQgZGVyaXZlCisgICAgZnJvbSBEZWNpbWFsRXhjZXB0aW9uLgorICAgICIiIgorICAgIGRlZiBoYW5kbGUoc2VsZiwgY29udGV4dCwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgQ2xhbXBlZChEZWNpbWFsRXhjZXB0aW9uKToKKyAgICAiIiJFeHBvbmVudCBvZiBhIDAgY2hhbmdlZCB0byBmaXQgYm91bmRzLgorCisgICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgY2xhbXBlZCBpZiB0aGUgZXhwb25lbnQgb2YgYSByZXN1bHQgaGFzIGJlZW4KKyAgICBhbHRlcmVkIGluIG9yZGVyIHRvIGZpdCB0aGUgY29uc3RyYWludHMgb2YgYSBzcGVjaWZpYyBjb25jcmV0ZQorICAgIHJlcHJlc2VudGF0aW9uLiAgVGhpcyBtYXkgb2NjdXIgd2hlbiB0aGUgZXhwb25lbnQgb2YgYSB6ZXJvIHJlc3VsdCB3b3VsZAorICAgIGJlIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBhIHJlcHJlc2VudGF0aW9uLCBvciB3aGVuIGEgbGFyZ2Ugbm9ybWFsCisgICAgbnVtYmVyIHdvdWxkIGhhdmUgYW4gZW5jb2RlZCBleHBvbmVudCB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZC4gIEluCisgICAgdGhpcyBsYXR0ZXIgY2FzZSwgdGhlIGV4cG9uZW50IGlzIHJlZHVjZWQgdG8gZml0IGFuZCB0aGUgY29ycmVzcG9uZGluZworICAgIG51bWJlciBvZiB6ZXJvIGRpZ2l0cyBhcmUgYXBwZW5kZWQgdG8gdGhlIGNvZWZmaWNpZW50ICgiZm9sZC1kb3duIikuCisgICAgIiIiCisKK2NsYXNzIEludmFsaWRPcGVyYXRpb24oRGVjaW1hbEV4Y2VwdGlvbik6CisgICAgIiIiQW4gaW52YWxpZCBvcGVyYXRpb24gd2FzIHBlcmZvcm1lZC4KKworICAgIFZhcmlvdXMgYmFkIHRoaW5ncyBjYXVzZSB0aGlzOgorCisgICAgU29tZXRoaW5nIGNyZWF0ZXMgYSBzaWduYWxpbmcgTmFOCisgICAgLUlORiArIElORgorICAgIDAgKiAoKy0pSU5GCisgICAgKCstKUlORiAvICgrLSlJTkYKKyAgICB4ICUgMAorICAgICgrLSlJTkYgJSB4CisgICAgeC5fcmVzY2FsZSggbm9uLWludGVnZXIgKQorICAgIHNxcnQoLXgpICwgeCA+IDAKKyAgICAwICoqIDAKKyAgICB4ICoqIChub24taW50ZWdlcikKKyAgICB4ICoqICgrLSlJTkYKKyAgICBBbiBvcGVyYW5kIGlzIGludmFsaWQKKworICAgIFRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiBhZnRlciB0aGVzZSBpcyBhIHF1aWV0IHBvc2l0aXZlIE5hTiwKKyAgICBleGNlcHQgd2hlbiB0aGUgY2F1c2UgaXMgYSBzaWduYWxpbmcgTmFOLCBpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMKKyAgICBhbHNvIGEgcXVpZXQgTmFOLCBidXQgd2l0aCB0aGUgb3JpZ2luYWwgc2lnbiwgYW5kIGFuIG9wdGlvbmFsCisgICAgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4KKyAgICAiIiIKKyAgICBkZWYgaGFuZGxlKHNlbGYsIGNvbnRleHQsICphcmdzKToKKyAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoYXJnc1swXS5fc2lnbiwgYXJnc1swXS5faW50LCAnbicsIFRydWUpCisgICAgICAgICAgICByZXR1cm4gYW5zLl9maXhfbmFuKGNvbnRleHQpCisgICAgICAgIHJldHVybiBfTmFOCisKK2NsYXNzIENvbnZlcnNpb25TeW50YXgoSW52YWxpZE9wZXJhdGlvbik6CisgICAgIiIiVHJ5aW5nIHRvIGNvbnZlcnQgYmFkbHkgZm9ybWVkIHN0cmluZy4KKworICAgIFRoaXMgb2NjdXJzIGFuZCBzaWduYWxzIGludmFsaWQtb3BlcmF0aW9uIGlmIGEgc3RyaW5nIGlzIGJlaW5nCisgICAgY29udmVydGVkIHRvIGEgbnVtYmVyIGFuZCBpdCBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBudW1lcmljIHN0cmluZworICAgIHN5bnRheC4gIFRoZSByZXN1bHQgaXMgWzAscU5hTl0uCisgICAgIiIiCisgICAgZGVmIGhhbmRsZShzZWxmLCBjb250ZXh0LCAqYXJncyk6CisgICAgICAgIHJldHVybiBfTmFOCisKK2NsYXNzIERpdmlzaW9uQnlaZXJvKERlY2ltYWxFeGNlcHRpb24sIFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAiIiJEaXZpc2lvbiBieSAwLgorCisgICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgZGl2aXNpb24tYnktemVybyBpZiBkaXZpc2lvbiBvZiBhIGZpbml0ZSBudW1iZXIKKyAgICBieSB6ZXJvIHdhcyBhdHRlbXB0ZWQgKGR1cmluZyBhIGRpdmlkZS1pbnRlZ2VyIG9yIGRpdmlkZSBvcGVyYXRpb24sIG9yIGEKKyAgICBwb3dlciBvcGVyYXRpb24gd2l0aCBuZWdhdGl2ZSByaWdodC1oYW5kIG9wZXJhbmQpLCBhbmQgdGhlIGRpdmlkZW5kIHdhcworICAgIG5vdCB6ZXJvLgorCisgICAgVGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uIGlzIFtzaWduLGluZl0sIHdoZXJlIHNpZ24gaXMgdGhlIGV4Y2x1c2l2ZQorICAgIG9yIG9mIHRoZSBzaWducyBvZiB0aGUgb3BlcmFuZHMgZm9yIGRpdmlkZSwgb3IgaXMgMSBmb3IgYW4gb2RkIHBvd2VyIG9mCisgICAgLTAsIGZvciBwb3dlci4KKyAgICAiIiIKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgY29udGV4dCwgc2lnbiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gX1NpZ25lZEluZmluaXR5W3NpZ25dCisKK2NsYXNzIERpdmlzaW9uSW1wb3NzaWJsZShJbnZhbGlkT3BlcmF0aW9uKToKKyAgICAiIiJDYW5ub3QgcGVyZm9ybSB0aGUgZGl2aXNpb24gYWRlcXVhdGVseS4KKworICAgIFRoaXMgb2NjdXJzIGFuZCBzaWduYWxzIGludmFsaWQtb3BlcmF0aW9uIGlmIHRoZSBpbnRlZ2VyIHJlc3VsdCBvZiBhCisgICAgZGl2aWRlLWludGVnZXIgb3IgcmVtYWluZGVyIG9wZXJhdGlvbiBoYWQgdG9vIG1hbnkgZGlnaXRzICh3b3VsZCBiZQorICAgIGxvbmdlciB0aGFuIHByZWNpc2lvbikuICBUaGUgcmVzdWx0IGlzIFswLHFOYU5dLgorICAgICIiIgorCisgICAgZGVmIGhhbmRsZShzZWxmLCBjb250ZXh0LCAqYXJncyk6CisgICAgICAgIHJldHVybiBfTmFOCisKK2NsYXNzIERpdmlzaW9uVW5kZWZpbmVkKEludmFsaWRPcGVyYXRpb24sIFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAiIiJVbmRlZmluZWQgcmVzdWx0IG9mIGRpdmlzaW9uLgorCisgICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgaW52YWxpZC1vcGVyYXRpb24gaWYgZGl2aXNpb24gYnkgemVybyB3YXMKKyAgICBhdHRlbXB0ZWQgKGR1cmluZyBhIGRpdmlkZS1pbnRlZ2VyLCBkaXZpZGUsIG9yIHJlbWFpbmRlciBvcGVyYXRpb24pLCBhbmQKKyAgICB0aGUgZGl2aWRlbmQgaXMgYWxzbyB6ZXJvLiAgVGhlIHJlc3VsdCBpcyBbMCxxTmFOXS4KKyAgICAiIiIKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgY29udGV4dCwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gX05hTgorCitjbGFzcyBJbmV4YWN0KERlY2ltYWxFeGNlcHRpb24pOgorICAgICIiIkhhZCB0byByb3VuZCwgbG9zaW5nIGluZm9ybWF0aW9uLgorCisgICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgaW5leGFjdCB3aGVuZXZlciB0aGUgcmVzdWx0IG9mIGFuIG9wZXJhdGlvbiBpcworICAgIG5vdCBleGFjdCAodGhhdCBpcywgaXQgbmVlZGVkIHRvIGJlIHJvdW5kZWQgYW5kIGFueSBkaXNjYXJkZWQgZGlnaXRzCisgICAgd2VyZSBub24temVybyksIG9yIGlmIGFuIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBjb25kaXRpb24gb2NjdXJzLiAgVGhlCisgICAgcmVzdWx0IGluIGFsbCBjYXNlcyBpcyB1bmNoYW5nZWQuCisKKyAgICBUaGUgaW5leGFjdCBzaWduYWwgbWF5IGJlIHRlc3RlZCAob3IgdHJhcHBlZCkgdG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4KKyAgICBvcGVyYXRpb24gKG9yIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMpIHdhcyBpbmV4YWN0LgorICAgICIiIgorCitjbGFzcyBJbnZhbGlkQ29udGV4dChJbnZhbGlkT3BlcmF0aW9uKToKKyAgICAiIiJJbnZhbGlkIGNvbnRleHQuICBVbmtub3duIHJvdW5kaW5nLCBmb3IgZXhhbXBsZS4KKworICAgIFRoaXMgb2NjdXJzIGFuZCBzaWduYWxzIGludmFsaWQtb3BlcmF0aW9uIGlmIGFuIGludmFsaWQgY29udGV4dCB3YXMKKyAgICBkZXRlY3RlZCBkdXJpbmcgYW4gb3BlcmF0aW9uLiAgVGhpcyBjYW4gb2NjdXIgaWYgY29udGV4dHMgYXJlIG5vdCBjaGVja2VkCisgICAgb24gY3JlYXRpb24gYW5kIGVpdGhlciB0aGUgcHJlY2lzaW9uIGV4Y2VlZHMgdGhlIGNhcGFiaWxpdHkgb2YgdGhlCisgICAgdW5kZXJseWluZyBjb25jcmV0ZSByZXByZXNlbnRhdGlvbiBvciBhbiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIHJvdW5kaW5nCisgICAgd2FzIHNwZWNpZmllZC4gIFRoZXNlIGFzcGVjdHMgb2YgdGhlIGNvbnRleHQgbmVlZCBvbmx5IGJlIGNoZWNrZWQgd2hlbgorICAgIHRoZSB2YWx1ZXMgYXJlIHJlcXVpcmVkIHRvIGJlIHVzZWQuICBUaGUgcmVzdWx0IGlzIFswLHFOYU5dLgorICAgICIiIgorCisgICAgZGVmIGhhbmRsZShzZWxmLCBjb250ZXh0LCAqYXJncyk6CisgICAgICAgIHJldHVybiBfTmFOCisKK2NsYXNzIFJvdW5kZWQoRGVjaW1hbEV4Y2VwdGlvbik6CisgICAgIiIiTnVtYmVyIGdvdCByb3VuZGVkIChub3QgIG5lY2Vzc2FyaWx5IGNoYW5nZWQgZHVyaW5nIHJvdW5kaW5nKS4KKworICAgIFRoaXMgb2NjdXJzIGFuZCBzaWduYWxzIHJvdW5kZWQgd2hlbmV2ZXIgdGhlIHJlc3VsdCBvZiBhbiBvcGVyYXRpb24gaXMKKyAgICByb3VuZGVkICh0aGF0IGlzLCBzb21lIHplcm8gb3Igbm9uLXplcm8gZGlnaXRzIHdlcmUgZGlzY2FyZGVkIGZyb20gdGhlCisgICAgY29lZmZpY2llbnQpLCBvciBpZiBhbiBvdmVyZmxvdyBvciB1bmRlcmZsb3cgY29uZGl0aW9uIG9jY3Vycy4gIFRoZQorICAgIHJlc3VsdCBpbiBhbGwgY2FzZXMgaXMgdW5jaGFuZ2VkLgorCisgICAgVGhlIHJvdW5kZWQgc2lnbmFsIG1heSBiZSB0ZXN0ZWQgKG9yIHRyYXBwZWQpIHRvIGRldGVybWluZSBpZiBhIGdpdmVuCisgICAgb3BlcmF0aW9uIChvciBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zKSBjYXVzZWQgYSBsb3NzIG9mIHByZWNpc2lvbi4KKyAgICAiIiIKKworY2xhc3MgU3Vibm9ybWFsKERlY2ltYWxFeGNlcHRpb24pOgorICAgICIiIkV4cG9uZW50IDwgRW1pbiBiZWZvcmUgcm91bmRpbmcuCisKKyAgICBUaGlzIG9jY3VycyBhbmQgc2lnbmFscyBzdWJub3JtYWwgd2hlbmV2ZXIgdGhlIHJlc3VsdCBvZiBhIGNvbnZlcnNpb24gb3IKKyAgICBvcGVyYXRpb24gaXMgc3Vibm9ybWFsICh0aGF0IGlzLCBpdHMgYWRqdXN0ZWQgZXhwb25lbnQgaXMgbGVzcyB0aGFuCisgICAgRW1pbiwgYmVmb3JlIGFueSByb3VuZGluZykuICBUaGUgcmVzdWx0IGluIGFsbCBjYXNlcyBpcyB1bmNoYW5nZWQuCisKKyAgICBUaGUgc3Vibm9ybWFsIHNpZ25hbCBtYXkgYmUgdGVzdGVkIChvciB0cmFwcGVkKSB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbgorICAgIG9yIG9wZXJhdGlvbiAob3Igc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucykgeWllbGRlZCBhIHN1Ym5vcm1hbCByZXN1bHQuCisgICAgIiIiCisKK2NsYXNzIE92ZXJmbG93KEluZXhhY3QsIFJvdW5kZWQpOgorICAgICIiIk51bWVyaWNhbCBvdmVyZmxvdy4KKworICAgIFRoaXMgb2NjdXJzIGFuZCBzaWduYWxzIG92ZXJmbG93IGlmIHRoZSBhZGp1c3RlZCBleHBvbmVudCBvZiBhIHJlc3VsdAorICAgIChmcm9tIGEgY29udmVyc2lvbiBvciBmcm9tIGFuIG9wZXJhdGlvbiB0aGF0IGlzIG5vdCBhbiBhdHRlbXB0IHRvIGRpdmlkZQorICAgIGJ5IHplcm8pLCBhZnRlciByb3VuZGluZywgd291bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSBsYXJnZXN0IHZhbHVlIHRoYXQKKyAgICBjYW4gYmUgaGFuZGxlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gKHRoZSB2YWx1ZSBFbWF4KS4KKworICAgIFRoZSByZXN1bHQgZGVwZW5kcyBvbiB0aGUgcm91bmRpbmcgbW9kZToKKworICAgIEZvciByb3VuZC1oYWxmLXVwIGFuZCByb3VuZC1oYWxmLWV2ZW4gKGFuZCBmb3Igcm91bmQtaGFsZi1kb3duIGFuZAorICAgIHJvdW5kLXVwLCBpZiBpbXBsZW1lbnRlZCksIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiBpcyBbc2lnbixpbmZdLAorICAgIHdoZXJlIHNpZ24gaXMgdGhlIHNpZ24gb2YgdGhlIGludGVybWVkaWF0ZSByZXN1bHQuICBGb3Igcm91bmQtZG93biwgdGhlCisgICAgcmVzdWx0IGlzIHRoZSBsYXJnZXN0IGZpbml0ZSBudW1iZXIgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gdGhlCisgICAgY3VycmVudCBwcmVjaXNpb24sIHdpdGggdGhlIHNpZ24gb2YgdGhlIGludGVybWVkaWF0ZSByZXN1bHQuICBGb3IKKyAgICByb3VuZC1jZWlsaW5nLCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGZvciByb3VuZC1kb3duIGlmIHRoZSBzaWduIG9mCisgICAgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgaXMgMSwgb3IgaXMgWzAsaW5mXSBvdGhlcndpc2UuICBGb3Igcm91bmQtZmxvb3IsCisgICAgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBmb3Igcm91bmQtZG93biBpZiB0aGUgc2lnbiBvZiB0aGUgaW50ZXJtZWRpYXRlCisgICAgcmVzdWx0IGlzIDAsIG9yIGlzIFsxLGluZl0gb3RoZXJ3aXNlLiAgSW4gYWxsIGNhc2VzLCBJbmV4YWN0IGFuZCBSb3VuZGVkCisgICAgd2lsbCBhbHNvIGJlIHJhaXNlZC4KKyAgICAiIiIKKworICAgIGRlZiBoYW5kbGUoc2VsZiwgY29udGV4dCwgc2lnbiwgKmFyZ3MpOgorICAgICAgICBpZiBjb250ZXh0LnJvdW5kaW5nIGluIChST1VORF9IQUxGX1VQLCBST1VORF9IQUxGX0VWRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPVU5EX0hBTEZfRE9XTiwgUk9VTkRfVVApOgorICAgICAgICAgICAgcmV0dXJuIF9TaWduZWRJbmZpbml0eVtzaWduXQorICAgICAgICBpZiBzaWduID09IDA6CisgICAgICAgICAgICBpZiBjb250ZXh0LnJvdW5kaW5nID09IFJPVU5EX0NFSUxJTkc6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9TaWduZWRJbmZpbml0eVtzaWduXQorICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgJzknKmNvbnRleHQucHJlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LkVtYXgtY29udGV4dC5wcmVjKzEpCisgICAgICAgIGlmIHNpZ24gPT0gMToKKyAgICAgICAgICAgIGlmIGNvbnRleHQucm91bmRpbmcgPT0gUk9VTkRfRkxPT1I6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9TaWduZWRJbmZpbml0eVtzaWduXQorICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgJzknKmNvbnRleHQucHJlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5FbWF4LWNvbnRleHQucHJlYysxKQorCisKK2NsYXNzIFVuZGVyZmxvdyhJbmV4YWN0LCBSb3VuZGVkLCBTdWJub3JtYWwpOgorICAgICIiIk51bWVyaWNhbCB1bmRlcmZsb3cgd2l0aCByZXN1bHQgcm91bmRlZCB0byAwLgorCisgICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgdW5kZXJmbG93IGlmIGEgcmVzdWx0IGlzIGluZXhhY3QgYW5kIHRoZQorICAgIGFkanVzdGVkIGV4cG9uZW50IG9mIHRoZSByZXN1bHQgd291bGQgYmUgc21hbGxlciAobW9yZSBuZWdhdGl2ZSkgdGhhbgorICAgIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiAodGhlIHZhbHVlCisgICAgRW1pbikuICBUaGF0IGlzLCB0aGUgcmVzdWx0IGlzIGJvdGggaW5leGFjdCBhbmQgc3Vibm9ybWFsLgorCisgICAgVGhlIHJlc3VsdCBhZnRlciBhbiB1bmRlcmZsb3cgd2lsbCBiZSBhIHN1Ym5vcm1hbCBudW1iZXIgcm91bmRlZCwgaWYKKyAgICBuZWNlc3NhcnksIHNvIHRoYXQgaXRzIGV4cG9uZW50IGlzIG5vdCBsZXNzIHRoYW4gRXRpbnkuICBUaGlzIG1heSByZXN1bHQKKyAgICBpbiAwIHdpdGggdGhlIHNpZ24gb2YgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgYW5kIGFuIGV4cG9uZW50IG9mIEV0aW55LgorCisgICAgSW4gYWxsIGNhc2VzLCBJbmV4YWN0LCBSb3VuZGVkLCBhbmQgU3Vibm9ybWFsIHdpbGwgYWxzbyBiZSByYWlzZWQuCisgICAgIiIiCisKK2NsYXNzIEZsb2F0T3BlcmF0aW9uKERlY2ltYWxFeGNlcHRpb24sIFR5cGVFcnJvcik6CisgICAgIiIiRW5hYmxlIHN0cmljdGVyIHNlbWFudGljcyBmb3IgbWl4aW5nIGZsb2F0cyBhbmQgRGVjaW1hbHMuCisKKyAgICBJZiB0aGUgc2lnbmFsIGlzIG5vdCB0cmFwcGVkIChkZWZhdWx0KSwgbWl4aW5nIGZsb2F0cyBhbmQgRGVjaW1hbHMgaXMKKyAgICBwZXJtaXR0ZWQgaW4gdGhlIERlY2ltYWwoKSBjb25zdHJ1Y3RvciwgY29udGV4dC5jcmVhdGVfZGVjaW1hbCgpIGFuZAorICAgIGFsbCBjb21wYXJpc29uIG9wZXJhdG9ycy4gQm90aCBjb252ZXJzaW9uIGFuZCBjb21wYXJpc29ucyBhcmUgZXhhY3QuCisgICAgQW55IG9jY3VycmVuY2Ugb2YgYSBtaXhlZCBvcGVyYXRpb24gaXMgc2lsZW50bHkgcmVjb3JkZWQgYnkgc2V0dGluZworICAgIEZsb2F0T3BlcmF0aW9uIGluIHRoZSBjb250ZXh0IGZsYWdzLiAgRXhwbGljaXQgY29udmVyc2lvbnMgd2l0aAorICAgIERlY2ltYWwuZnJvbV9mbG9hdCgpIG9yIGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCgpIGRvIG5vdAorICAgIHNldCB0aGUgZmxhZy4KKworICAgIE90aGVyd2lzZSAodGhlIHNpZ25hbCBpcyB0cmFwcGVkKSwgb25seSBlcXVhbGl0eSBjb21wYXJpc29ucyBhbmQgZXhwbGljaXQKKyAgICBjb252ZXJzaW9ucyBhcmUgc2lsZW50LiBBbGwgb3RoZXIgbWl4ZWQgb3BlcmF0aW9ucyByYWlzZSBGbG9hdE9wZXJhdGlvbi4KKyAgICAiIiIKKworIyBMaXN0IG9mIHB1YmxpYyB0cmFwcyBhbmQgZmxhZ3MKK19zaWduYWxzID0gW0NsYW1wZWQsIERpdmlzaW9uQnlaZXJvLCBJbmV4YWN0LCBPdmVyZmxvdywgUm91bmRlZCwKKyAgICAgICAgICAgIFVuZGVyZmxvdywgSW52YWxpZE9wZXJhdGlvbiwgU3Vibm9ybWFsLCBGbG9hdE9wZXJhdGlvbl0KKworIyBNYXAgY29uZGl0aW9ucyAocGVyIHRoZSBzcGVjKSB0byBzaWduYWxzCitfY29uZGl0aW9uX21hcCA9IHtDb252ZXJzaW9uU3ludGF4OkludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICBEaXZpc2lvbkltcG9zc2libGU6SW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgIERpdmlzaW9uVW5kZWZpbmVkOkludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICBJbnZhbGlkQ29udGV4dDpJbnZhbGlkT3BlcmF0aW9ufQorCisjIFZhbGlkIHJvdW5kaW5nIG1vZGVzCitfcm91bmRpbmdfbW9kZXMgPSAoUk9VTkRfRE9XTiwgUk9VTkRfSEFMRl9VUCwgUk9VTkRfSEFMRl9FVkVOLCBST1VORF9DRUlMSU5HLAorICAgICAgICAgICAgICAgICAgIFJPVU5EX0ZMT09SLCBST1VORF9VUCwgUk9VTkRfSEFMRl9ET1dOLCBST1VORF8wNVVQKQorCisjIyMjIyBDb250ZXh0IEZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFRoZSBnZXRjb250ZXh0KCkgYW5kIHNldGNvbnRleHQoKSBmdW5jdGlvbiBtYW5hZ2UgYWNjZXNzIHRvIGEgdGhyZWFkLWxvY2FsCisjIGN1cnJlbnQgY29udGV4dC4gIFB5Mi40IG9mZmVycyBkaXJlY3Qgc3VwcG9ydCBmb3IgdGhyZWFkIGxvY2Fscy4gIElmIHRoYXQKKyMgaXMgbm90IGF2YWlsYWJsZSwgdXNlIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIHdoaWNoIGlzIHNsb3dlciBidXQgd2lsbAorIyB3b3JrIGZvciBvbGRlciBQeXRob25zLiAgSWYgdGhyZWFkcyBhcmUgbm90IHBhcnQgb2YgdGhlIGJ1aWxkLCBjcmVhdGUgYQorIyBtb2NrIHRocmVhZGluZyBvYmplY3Qgd2l0aCB0aHJlYWRpbmcubG9jYWwoKSByZXR1cm5pbmcgdGhlIG1vZHVsZSBuYW1lc3BhY2UuCisKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBQeXRob24gd2FzIGNvbXBpbGVkIHdpdGhvdXQgdGhyZWFkczsgY3JlYXRlIGEgbW9jayBvYmplY3QgaW5zdGVhZAorICAgIGNsYXNzIE1vY2tUaHJlYWRpbmcob2JqZWN0KToKKyAgICAgICAgZGVmIGxvY2FsKHNlbGYsIHN5cz1zeXMpOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW19feG5hbWVfX10KKyAgICB0aHJlYWRpbmcgPSBNb2NrVGhyZWFkaW5nKCkKKyAgICBkZWwgTW9ja1RocmVhZGluZworCit0cnk6CisgICAgdGhyZWFkaW5nLmxvY2FsCisKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKworICAgICMgVG8gZml4IHJlbG9hZGluZywgZm9yY2UgaXQgdG8gY3JlYXRlIGEgbmV3IGNvbnRleHQKKyAgICAjIE9sZCBjb250ZXh0cyBoYXZlIGRpZmZlcmVudCBleGNlcHRpb25zIGluIHRoZWlyIGRpY3RzLCBtYWtpbmcgcHJvYmxlbXMuCisgICAgaWYgaGFzYXR0cih0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgJ19fZGVjaW1hbF9jb250ZXh0X18nKToKKyAgICAgICAgZGVsIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLl9fZGVjaW1hbF9jb250ZXh0X18KKworICAgIGRlZiBzZXRjb250ZXh0KGNvbnRleHQpOgorICAgICAgICAiIiJTZXQgdGhpcyB0aHJlYWQncyBjb250ZXh0IHRvIGNvbnRleHQuIiIiCisgICAgICAgIGlmIGNvbnRleHQgaW4gKERlZmF1bHRDb250ZXh0LCBCYXNpY0NvbnRleHQsIEV4dGVuZGVkQ29udGV4dCk6CisgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5jb3B5KCkKKyAgICAgICAgICAgIGNvbnRleHQuY2xlYXJfZmxhZ3MoKQorICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5fX2RlY2ltYWxfY29udGV4dF9fID0gY29udGV4dAorCisgICAgZGVmIGdldGNvbnRleHQoKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGlzIHRocmVhZCdzIGNvbnRleHQuCisKKyAgICAgICAgSWYgdGhpcyB0aHJlYWQgZG9lcyBub3QgeWV0IGhhdmUgYSBjb250ZXh0LCByZXR1cm5zCisgICAgICAgIGEgbmV3IGNvbnRleHQgYW5kIHNldHMgdGhpcyB0aHJlYWQncyBjb250ZXh0LgorICAgICAgICBOZXcgY29udGV4dHMgYXJlIGNvcGllcyBvZiBEZWZhdWx0Q29udGV4dC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5fX2RlY2ltYWxfY29udGV4dF9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRleHQgPSBDb250ZXh0KCkKKyAgICAgICAgICAgIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLl9fZGVjaW1hbF9jb250ZXh0X18gPSBjb250ZXh0CisgICAgICAgICAgICByZXR1cm4gY29udGV4dAorCitlbHNlOgorCisgICAgbG9jYWwgPSB0aHJlYWRpbmcubG9jYWwoKQorICAgIGlmIGhhc2F0dHIobG9jYWwsICdfX2RlY2ltYWxfY29udGV4dF9fJyk6CisgICAgICAgIGRlbCBsb2NhbC5fX2RlY2ltYWxfY29udGV4dF9fCisKKyAgICBkZWYgZ2V0Y29udGV4dChfbG9jYWw9bG9jYWwpOgorICAgICAgICAiIiJSZXR1cm5zIHRoaXMgdGhyZWFkJ3MgY29udGV4dC4KKworICAgICAgICBJZiB0aGlzIHRocmVhZCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIGNvbnRleHQsIHJldHVybnMKKyAgICAgICAgYSBuZXcgY29udGV4dCBhbmQgc2V0cyB0aGlzIHRocmVhZCdzIGNvbnRleHQuCisgICAgICAgIE5ldyBjb250ZXh0cyBhcmUgY29waWVzIG9mIERlZmF1bHRDb250ZXh0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIF9sb2NhbC5fX2RlY2ltYWxfY29udGV4dF9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRleHQgPSBDb250ZXh0KCkKKyAgICAgICAgICAgIF9sb2NhbC5fX2RlY2ltYWxfY29udGV4dF9fID0gY29udGV4dAorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQKKworICAgIGRlZiBzZXRjb250ZXh0KGNvbnRleHQsIF9sb2NhbD1sb2NhbCk6CisgICAgICAgICIiIlNldCB0aGlzIHRocmVhZCdzIGNvbnRleHQgdG8gY29udGV4dC4iIiIKKyAgICAgICAgaWYgY29udGV4dCBpbiAoRGVmYXVsdENvbnRleHQsIEJhc2ljQ29udGV4dCwgRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNvcHkoKQorICAgICAgICAgICAgY29udGV4dC5jbGVhcl9mbGFncygpCisgICAgICAgIF9sb2NhbC5fX2RlY2ltYWxfY29udGV4dF9fID0gY29udGV4dAorCisgICAgZGVsIHRocmVhZGluZywgbG9jYWwgICAgICAgICMgRG9uJ3QgY29udGFtaW5hdGUgdGhlIG5hbWVzcGFjZQorCitkZWYgbG9jYWxjb250ZXh0KGN0eD1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgZm9yIGEgY29weSBvZiB0aGUgc3VwcGxpZWQgY29udGV4dAorCisgICAgVXNlcyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBpZiBubyBjb250ZXh0IGlzIHNwZWNpZmllZAorICAgIFRoZSByZXR1cm5lZCBjb250ZXh0IG1hbmFnZXIgY3JlYXRlcyBhIGxvY2FsIGRlY2ltYWwgY29udGV4dAorICAgIGluIGEgd2l0aCBzdGF0ZW1lbnQ6CisgICAgICAgIGRlZiBzaW4oeCk6CisgICAgICAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQoKSBhcyBjdHg6CisgICAgICAgICAgICAgICAgIGN0eC5wcmVjICs9IDIKKyAgICAgICAgICAgICAgICAgIyBSZXN0IG9mIHNpbiBjYWxjdWxhdGlvbiBhbGdvcml0aG0KKyAgICAgICAgICAgICAgICAgIyB1c2VzIGEgcHJlY2lzaW9uIDIgZ3JlYXRlciB0aGFuIG5vcm1hbAorICAgICAgICAgICAgIHJldHVybiArcyAgIyBDb252ZXJ0IHJlc3VsdCB0byBub3JtYWwgcHJlY2lzaW9uCisKKyAgICAgICAgIGRlZiBzaW4oeCk6CisgICAgICAgICAgICAgd2l0aCBsb2NhbGNvbnRleHQoRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgICAgICAgICAgIyBSZXN0IG9mIHNpbiBjYWxjdWxhdGlvbiBhbGdvcml0aG0KKyAgICAgICAgICAgICAgICAgIyB1c2VzIHRoZSBFeHRlbmRlZCBDb250ZXh0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgICMgR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgU3BlY2lmaWNhdGlvbgorICAgICAgICAgICAgIHJldHVybiArcyAgIyBDb252ZXJ0IHJlc3VsdCB0byBub3JtYWwgY29udGV4dAorCisgICAgPj4+IHNldGNvbnRleHQoRGVmYXVsdENvbnRleHQpCisgICAgPj4+IHByaW50KGdldGNvbnRleHQoKS5wcmVjKQorICAgIDI4CisgICAgPj4+IHdpdGggbG9jYWxjb250ZXh0KCk6CisgICAgLi4uICAgICBjdHggPSBnZXRjb250ZXh0KCkKKyAgICAuLi4gICAgIGN0eC5wcmVjICs9IDIKKyAgICAuLi4gICAgIHByaW50KGN0eC5wcmVjKQorICAgIC4uLgorICAgIDMwCisgICAgPj4+IHdpdGggbG9jYWxjb250ZXh0KEV4dGVuZGVkQ29udGV4dCk6CisgICAgLi4uICAgICBwcmludChnZXRjb250ZXh0KCkucHJlYykKKyAgICAuLi4KKyAgICA5CisgICAgPj4+IHByaW50KGdldGNvbnRleHQoKS5wcmVjKQorICAgIDI4CisgICAgIiIiCisgICAgaWYgY3R4IGlzIE5vbmU6IGN0eCA9IGdldGNvbnRleHQoKQorICAgIHJldHVybiBfQ29udGV4dE1hbmFnZXIoY3R4KQorCisKKyMjIyMjIERlY2ltYWwgY2xhc3MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIERvIG5vdCBzdWJjbGFzcyBEZWNpbWFsIGZyb20gbnVtYmVycy5SZWFsIGFuZCBkbyBub3QgcmVnaXN0ZXIgaXQgYXMgc3VjaAorIyAoYmVjYXVzZSBEZWNpbWFscyBhcmUgbm90IGludGVyb3BlcmFibGUgd2l0aCBmbG9hdHMpLiAgU2VlIHRoZSBub3RlcyBpbgorIyBudW1iZXJzLnB5IGZvciBtb3JlIGRldGFpbC4KKworY2xhc3MgRGVjaW1hbChvYmplY3QpOgorICAgICIiIkZsb2F0aW5nIHBvaW50IGNsYXNzIGZvciBkZWNpbWFsIGFyaXRobWV0aWMuIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ19leHAnLCdfaW50JywnX3NpZ24nLCAnX2lzX3NwZWNpYWwnKQorICAgICMgR2VuZXJhbGx5LCB0aGUgdmFsdWUgb2YgdGhlIERlY2ltYWwgaW5zdGFuY2UgaXMgZ2l2ZW4gYnkKKyAgICAjICAoLTEpKipfc2lnbiAqIF9pbnQgKiAxMCoqX2V4cAorICAgICMgU3BlY2lhbCB2YWx1ZXMgYXJlIHNpZ25pZmllZCBieSBfaXNfc3BlY2lhbCA9PSBUcnVlCisKKyAgICAjIFdlJ3JlIGltbXV0YWJsZSwgc28gdXNlIF9fbmV3X18gbm90IF9faW5pdF9fCisgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZT0iMCIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIGRlY2ltYWwgcG9pbnQgaW5zdGFuY2UuCisKKyAgICAgICAgPj4+IERlY2ltYWwoJzMuMTQnKSAgICAgICAgICAgICAgIyBzdHJpbmcgaW5wdXQKKyAgICAgICAgRGVjaW1hbCgnMy4xNCcpCisgICAgICAgID4+PiBEZWNpbWFsKCgwLCAoMywgMSwgNCksIC0yKSkgICMgdHVwbGUgKHNpZ24sIGRpZ2l0X3R1cGxlLCBleHBvbmVudCkKKyAgICAgICAgRGVjaW1hbCgnMy4xNCcpCisgICAgICAgID4+PiBEZWNpbWFsKDMxNCkgICAgICAgICAgICAgICAgICMgaW50CisgICAgICAgIERlY2ltYWwoJzMxNCcpCisgICAgICAgID4+PiBEZWNpbWFsKERlY2ltYWwoMzE0KSkgICAgICAgICMgYW5vdGhlciBkZWNpbWFsIGluc3RhbmNlCisgICAgICAgIERlY2ltYWwoJzMxNCcpCisgICAgICAgID4+PiBEZWNpbWFsKCcgIDMuMTQgIFxcbicpICAgICAgICAjIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ugb2theQorICAgICAgICBEZWNpbWFsKCczLjE0JykKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIGNvZWZmaWNpZW50LCBzZWxmLl9pbnQsIGlzIGFjdHVhbGx5IHN0b3JlZCBhcworICAgICAgICAjIGEgc3RyaW5nIHJhdGhlciB0aGFuIGFzIGEgdHVwbGUgb2YgZGlnaXRzLiAgVGhpcyBzcGVlZHMgdXAKKyAgICAgICAgIyB0aGUgImRpZ2l0cyB0byBpbnRlZ2VyIiBhbmQgImludGVnZXIgdG8gZGlnaXRzIiBjb252ZXJzaW9ucworICAgICAgICAjIHRoYXQgYXJlIHVzZWQgaW4gYWxtb3N0IGV2ZXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9uIG9uCisgICAgICAgICMgRGVjaW1hbHMuICBUaGlzIGlzIGFuIGludGVybmFsIGRldGFpbDogdGhlIGFzX3R1cGxlIGZ1bmN0aW9uCisgICAgICAgICMgYW5kIHRoZSBEZWNpbWFsIGNvbnN0cnVjdG9yIHN0aWxsIGRlYWwgd2l0aCB0dXBsZXMgb2YKKyAgICAgICAgIyBkaWdpdHMuCisKKyAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKworICAgICAgICAjIEZyb20gYSBzdHJpbmcKKyAgICAgICAgIyBSRXMgaW5zaXN0IG9uIHJlYWwgc3RyaW5ncywgc28gd2UgY2FuIHRvby4KKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIG0gPSBfcGFyc2VyKHZhbHVlLnN0cmlwKCkpCisgICAgICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKENvbnZlcnNpb25TeW50YXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGxpdGVyYWwgZm9yIERlY2ltYWw6ICVyIiAlIHZhbHVlKQorCisgICAgICAgICAgICBpZiBtLmdyb3VwKCdzaWduJykgPT0gIi0iOgorICAgICAgICAgICAgICAgIHNlbGYuX3NpZ24gPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NpZ24gPSAwCisgICAgICAgICAgICBpbnRwYXJ0ID0gbS5ncm91cCgnaW50JykKKyAgICAgICAgICAgIGlmIGludHBhcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBmaW5pdGUgbnVtYmVyCisgICAgICAgICAgICAgICAgZnJhY3BhcnQgPSBtLmdyb3VwKCdmcmFjJykgb3IgJycKKyAgICAgICAgICAgICAgICBleHAgPSBpbnQobS5ncm91cCgnZXhwJykgb3IgJzAnKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludCA9IHN0cihpbnQoaW50cGFydCtmcmFjcGFydCkpCisgICAgICAgICAgICAgICAgc2VsZi5fZXhwID0gZXhwIC0gbGVuKGZyYWNwYXJ0KQorICAgICAgICAgICAgICAgIHNlbGYuX2lzX3NwZWNpYWwgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaWFnID0gbS5ncm91cCgnZGlhZycpCisgICAgICAgICAgICAgICAgaWYgZGlhZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBOYU4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faW50ID0gc3RyKGludChkaWFnIG9yICcwJykpLmxzdHJpcCgnMCcpCisgICAgICAgICAgICAgICAgICAgIGlmIG0uZ3JvdXAoJ3NpZ25hbCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwID0gJ04nCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHAgPSAnbicKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGluZmluaXR5CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludCA9ICcwJworICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHAgPSAnRicKKyAgICAgICAgICAgICAgICBzZWxmLl9pc19zcGVjaWFsID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAjIEZyb20gYW4gaW50ZWdlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgaWYgdmFsdWUgPj0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLl9zaWduID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zaWduID0gMQorICAgICAgICAgICAgc2VsZi5fZXhwID0gMAorICAgICAgICAgICAgc2VsZi5faW50ID0gc3RyKGFicyh2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLl9pc19zcGVjaWFsID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgIyBGcm9tIGFub3RoZXIgZGVjaW1hbAorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBEZWNpbWFsKToKKyAgICAgICAgICAgIHNlbGYuX2V4cCAgPSB2YWx1ZS5fZXhwCisgICAgICAgICAgICBzZWxmLl9zaWduID0gdmFsdWUuX3NpZ24KKyAgICAgICAgICAgIHNlbGYuX2ludCAgPSB2YWx1ZS5faW50CisgICAgICAgICAgICBzZWxmLl9pc19zcGVjaWFsICA9IHZhbHVlLl9pc19zcGVjaWFsCisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICMgRnJvbSBhbiBpbnRlcm5hbCB3b3JraW5nIHZhbHVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIF9Xb3JrUmVwKToKKyAgICAgICAgICAgIHNlbGYuX3NpZ24gPSB2YWx1ZS5zaWduCisgICAgICAgICAgICBzZWxmLl9pbnQgPSBzdHIodmFsdWUuaW50KQorICAgICAgICAgICAgc2VsZi5fZXhwID0gaW50KHZhbHVlLmV4cCkKKyAgICAgICAgICAgIHNlbGYuX2lzX3NwZWNpYWwgPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAjIHR1cGxlL2xpc3QgY29udmVyc2lvbiAocG9zc2libHkgZnJvbSBhc190dXBsZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCx0dXBsZSkpOgorICAgICAgICAgICAgaWYgbGVuKHZhbHVlKSAhPSAzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgdHVwbGUgc2l6ZSBpbiBjcmVhdGlvbiBvZiBEZWNpbWFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tIGxpc3Qgb3IgdHVwbGUuICBUaGUgbGlzdCBvciB0dXBsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIGhhdmUgZXhhY3RseSB0aHJlZSBlbGVtZW50cy4nKQorICAgICAgICAgICAgIyBwcm9jZXNzIHNpZ24uICBUaGUgaXNpbnN0YW5jZSB0ZXN0IHJlamVjdHMgZmxvYXRzCisgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2UodmFsdWVbMF0sIGludCkgYW5kIHZhbHVlWzBdIGluICgwLDEpKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHNpZ24uICBUaGUgZmlyc3QgdmFsdWUgaW4gdGhlIHR1cGxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgYW4gaW50ZWdlcjsgZWl0aGVyIDAgZm9yIGEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aXZlIG51bWJlciBvciAxIGZvciBhIG5lZ2F0aXZlIG51bWJlci4iKQorICAgICAgICAgICAgc2VsZi5fc2lnbiA9IHZhbHVlWzBdCisgICAgICAgICAgICBpZiB2YWx1ZVsyXSA9PSAnRic6CisgICAgICAgICAgICAgICAgIyBpbmZpbml0eTogdmFsdWVbMV0gaXMgaWdub3JlZAorICAgICAgICAgICAgICAgIHNlbGYuX2ludCA9ICcwJworICAgICAgICAgICAgICAgIHNlbGYuX2V4cCA9IHZhbHVlWzJdCisgICAgICAgICAgICAgICAgc2VsZi5faXNfc3BlY2lhbCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBwcm9jZXNzIGFuZCB2YWxpZGF0ZSB0aGUgZGlnaXRzIGluIHZhbHVlWzFdCisgICAgICAgICAgICAgICAgZGlnaXRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZGlnaXQgaW4gdmFsdWVbMV06CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGlnaXQsIGludCkgYW5kIDAgPD0gZGlnaXQgPD0gOToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBsZWFkaW5nIHplcm9zCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkaWdpdHMgb3IgZGlnaXQgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMuYXBwZW5kKGRpZ2l0KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIHNlY29uZCB2YWx1ZSBpbiB0aGUgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBjb21wb3NlZCBvZiBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCB0aHJvdWdoIDkuIikKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZVsyXSBpbiAoJ24nLCAnTicpOgorICAgICAgICAgICAgICAgICAgICAjIE5hTjogZGlnaXRzIGZvcm0gdGhlIGRpYWdub3N0aWMKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faW50ID0gJycuam9pbihtYXAoc3RyLCBkaWdpdHMpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHAgPSB2YWx1ZVsyXQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9pc19zcGVjaWFsID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZVsyXSwgaW50KToKKyAgICAgICAgICAgICAgICAgICAgIyBmaW5pdGUgbnVtYmVyOiBkaWdpdHMgZ2l2ZSB0aGUgY29lZmZpY2llbnQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faW50ID0gJycuam9pbihtYXAoc3RyLCBkaWdpdHMgb3IgWzBdKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwID0gdmFsdWVbMl0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faXNfc3BlY2lhbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIHRoaXJkIHZhbHVlIGluIHRoZSB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYW4gaW50ZWdlciwgb3Igb25lIG9mIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZ3MgJ0YnLCAnbicsICdOJy4iKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoRmxvYXRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgInN0cmljdCBzZW1hbnRpY3MgZm9yIG1peGluZyBmbG9hdHMgYW5kIERlY2ltYWxzIGFyZSAiCisgICAgICAgICAgICAgICAgImVuYWJsZWQiKQorICAgICAgICAgICAgdmFsdWUgPSBEZWNpbWFsLmZyb21fZmxvYXQodmFsdWUpCisgICAgICAgICAgICBzZWxmLl9leHAgID0gdmFsdWUuX2V4cAorICAgICAgICAgICAgc2VsZi5fc2lnbiA9IHZhbHVlLl9zaWduCisgICAgICAgICAgICBzZWxmLl9pbnQgID0gdmFsdWUuX2ludAorICAgICAgICAgICAgc2VsZi5faXNfc3BlY2lhbCAgPSB2YWx1ZS5faXNfc3BlY2lhbAorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvIERlY2ltYWwiICUgdmFsdWUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9mbG9hdChjbHMsIGYpOgorICAgICAgICAiIiJDb252ZXJ0cyBhIGZsb2F0IHRvIGEgZGVjaW1hbCBudW1iZXIsIGV4YWN0bHkuCisKKyAgICAgICAgTm90ZSB0aGF0IERlY2ltYWwuZnJvbV9mbG9hdCgwLjEpIGlzIG5vdCB0aGUgc2FtZSBhcyBEZWNpbWFsKCcwLjEnKS4KKyAgICAgICAgU2luY2UgMC4xIGlzIG5vdCBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gYmluYXJ5IGZsb2F0aW5nIHBvaW50LCB0aGUKKyAgICAgICAgdmFsdWUgaXMgc3RvcmVkIGFzIHRoZSBuZWFyZXN0IHJlcHJlc2VudGFibGUgdmFsdWUgd2hpY2ggaXMKKyAgICAgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTQuICBUaGUgZXhhY3QgZXF1aXZhbGVudCBvZiB0aGUgdmFsdWUgaW4gZGVjaW1hbAorICAgICAgICBpcyAwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUuCisKKyAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdCgwLjEpCisgICAgICAgIERlY2ltYWwoJzAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNScpCisgICAgICAgID4+PiBEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ25hbicpKQorICAgICAgICBEZWNpbWFsKCdOYU4nKQorICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCdpbmYnKSkKKyAgICAgICAgRGVjaW1hbCgnSW5maW5pdHknKQorICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KC1mbG9hdCgnaW5mJykpCisgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCisgICAgICAgID4+PiBEZWNpbWFsLmZyb21fZmxvYXQoLTAuMCkKKyAgICAgICAgRGVjaW1hbCgnLTAnKQorCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKGYsIGludCk6ICAgICAgICAgICAgICAgICMgaGFuZGxlIGludGVnZXIgaW5wdXRzCisgICAgICAgICAgICByZXR1cm4gY2xzKGYpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIGZsb2F0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgbXVzdCBiZSBpbnQgb3IgZmxvYXQuIikKKyAgICAgICAgaWYgX21hdGguaXNpbmYoZikgb3IgX21hdGguaXNuYW4oZik6CisgICAgICAgICAgICByZXR1cm4gY2xzKHJlcHIoZikpCisgICAgICAgIGlmIF9tYXRoLmNvcHlzaWduKDEuMCwgZikgPT0gMS4wOgorICAgICAgICAgICAgc2lnbiA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNpZ24gPSAxCisgICAgICAgIG4sIGQgPSBhYnMoZikuYXNfaW50ZWdlcl9yYXRpbygpCisgICAgICAgIGsgPSBkLmJpdF9sZW5ndGgoKSAtIDEKKyAgICAgICAgcmVzdWx0ID0gX2RlY19mcm9tX3RyaXBsZShzaWduLCBzdHIobio1KiprKSwgLWspCisgICAgICAgIGlmIGNscyBpcyBEZWNpbWFsOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGNscyhyZXN1bHQpCisKKyAgICBkZWYgX2lzbmFuKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIG51bWJlciBpcyBub3QgYWN0dWFsbHkgb25lLgorCisgICAgICAgIDAgaWYgYSBudW1iZXIKKyAgICAgICAgMSBpZiBOYU4KKyAgICAgICAgMiBpZiBzTmFOCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgZXhwID0gc2VsZi5fZXhwCisgICAgICAgICAgICBpZiBleHAgPT0gJ24nOgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICBlbGlmIGV4cCA9PSAnTic6CisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBfaXNpbmZpbml0eShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBudW1iZXIgaXMgaW5maW5pdGUKKworICAgICAgICAwIGlmIGZpbml0ZSBvciBub3QgYSBudW1iZXIKKyAgICAgICAgMSBpZiArSU5GCisgICAgICAgIC0xIGlmIC1JTkYKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2V4cCA9PSAnRic6CisgICAgICAgICAgICBpZiBzZWxmLl9zaWduOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBfY2hlY2tfbmFucyhzZWxmLCBvdGhlcj1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIG51bWJlciBpcyBub3QgYWN0dWFsbHkgb25lLgorCisgICAgICAgIGlmIHNlbGYsIG90aGVyIGFyZSBzTmFOLCBzaWduYWwKKyAgICAgICAgaWYgc2VsZiwgb3RoZXIgYXJlIE5hTiByZXR1cm4gbmFuCisgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgRG9uZSBiZWZvcmUgb3BlcmF0aW9ucy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZl9pc19uYW4gPSBzZWxmLl9pc25hbigpCisgICAgICAgIGlmIG90aGVyIGlzIE5vbmU6CisgICAgICAgICAgICBvdGhlcl9pc19uYW4gPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3RoZXJfaXNfbmFuID0gb3RoZXIuX2lzbmFuKCkKKworICAgICAgICBpZiBzZWxmX2lzX25hbiBvciBvdGhlcl9pc19uYW46CisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgICAgICBpZiBzZWxmX2lzX25hbiA9PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnc05hTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikKKyAgICAgICAgICAgIGlmIG90aGVyX2lzX25hbiA9PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnc05hTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIpCisgICAgICAgICAgICBpZiBzZWxmX2lzX25hbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZml4X25hbihjb250ZXh0KQorCisgICAgICAgICAgICByZXR1cm4gb3RoZXIuX2ZpeF9uYW4oY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBfY29tcGFyZV9jaGVja19uYW5zKHNlbGYsIG90aGVyLCBjb250ZXh0KToKKyAgICAgICAgIiIiVmVyc2lvbiBvZiBfY2hlY2tfbmFucyB1c2VkIGZvciB0aGUgc2lnbmFsaW5nIGNvbXBhcmlzb25zCisgICAgICAgIGNvbXBhcmVfc2lnbmFsLCBfX2xlX18sIF9fbHRfXywgX19nZV9fLCBfX2d0X18uCisKKyAgICAgICAgU2lnbmFsIEludmFsaWRPcGVyYXRpb24gaWYgZWl0aGVyIHNlbGYgb3Igb3RoZXIgaXMgYSAocXVpZXQKKyAgICAgICAgb3Igc2lnbmFsaW5nKSBOYU4uICBTaWduYWxpbmcgTmFOcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBxdWlldAorICAgICAgICBOYU5zLgorCisgICAgICAgIFJldHVybiAwIGlmIG5laXRoZXIgb3BlcmFuZCBpcyBhIE5hTi4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICBpZiBzZWxmLmlzX3NuYW4oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBhcmlzb24gaW52b2x2aW5nIHNOYU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKQorICAgICAgICAgICAgZWxpZiBvdGhlci5pc19zbmFuKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wYXJpc29uIGludm9sdmluZyBzTmFOJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIpCisgICAgICAgICAgICBlbGlmIHNlbGYuaXNfcW5hbigpOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGFyaXNvbiBpbnZvbHZpbmcgTmFOJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikKKyAgICAgICAgICAgIGVsaWYgb3RoZXIuaXNfcW5hbigpOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGFyaXNvbiBpbnZvbHZpbmcgTmFOJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIpCisgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgX19ib29sX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgbm9uemVybzsgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4KKworICAgICAgICBOYU5zIGFuZCBpbmZpbml0aWVzIGFyZSBjb25zaWRlcmVkIG5vbnplcm8uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5faXNfc3BlY2lhbCBvciBzZWxmLl9pbnQgIT0gJzAnCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkNvbXBhcmUgdGhlIHR3byBub24tTmFOIGRlY2ltYWwgaW5zdGFuY2VzIHNlbGYgYW5kIG90aGVyLgorCisgICAgICAgIFJldHVybnMgLTEgaWYgc2VsZiA8IG90aGVyLCAwIGlmIHNlbGYgPT0gb3RoZXIgYW5kIDEKKyAgICAgICAgaWYgc2VsZiA+IG90aGVyLiAgVGhpcyByb3V0aW5lIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS4iIiIKKworICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIG90aGVyLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgc2VsZl9pbmYgPSBzZWxmLl9pc2luZmluaXR5KCkKKyAgICAgICAgICAgIG90aGVyX2luZiA9IG90aGVyLl9pc2luZmluaXR5KCkKKyAgICAgICAgICAgIGlmIHNlbGZfaW5mID09IG90aGVyX2luZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgZWxpZiBzZWxmX2luZiA8IG90aGVyX2luZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICAjIGNoZWNrIGZvciB6ZXJvczsgIERlY2ltYWwoJzAnKSA9PSBEZWNpbWFsKCctMCcpCisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAtKCgtMSkqKm90aGVyLl9zaWduKQorICAgICAgICBpZiBub3Qgb3RoZXI6CisgICAgICAgICAgICByZXR1cm4gKC0xKSoqc2VsZi5fc2lnbgorCisgICAgICAgICMgSWYgZGlmZmVyZW50IHNpZ25zLCBuZWcgb25lIGlzIGxlc3MKKyAgICAgICAgaWYgb3RoZXIuX3NpZ24gPCBzZWxmLl9zaWduOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIHNlbGYuX3NpZ24gPCBvdGhlci5fc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgc2VsZl9hZGp1c3RlZCA9IHNlbGYuYWRqdXN0ZWQoKQorICAgICAgICBvdGhlcl9hZGp1c3RlZCA9IG90aGVyLmFkanVzdGVkKCkKKyAgICAgICAgaWYgc2VsZl9hZGp1c3RlZCA9PSBvdGhlcl9hZGp1c3RlZDoKKyAgICAgICAgICAgIHNlbGZfcGFkZGVkID0gc2VsZi5faW50ICsgJzAnKihzZWxmLl9leHAgLSBvdGhlci5fZXhwKQorICAgICAgICAgICAgb3RoZXJfcGFkZGVkID0gb3RoZXIuX2ludCArICcwJyoob3RoZXIuX2V4cCAtIHNlbGYuX2V4cCkKKyAgICAgICAgICAgIGlmIHNlbGZfcGFkZGVkID09IG90aGVyX3BhZGRlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgZWxpZiBzZWxmX3BhZGRlZCA8IG90aGVyX3BhZGRlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLSgtMSkqKnNlbGYuX3NpZ24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSkqKnNlbGYuX3NpZ24KKyAgICAgICAgZWxpZiBzZWxmX2FkanVzdGVkID4gb3RoZXJfYWRqdXN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gKC0xKSoqc2VsZi5fc2lnbgorICAgICAgICBlbHNlOiAjIHNlbGZfYWRqdXN0ZWQgPCBvdGhlcl9hZGp1c3RlZAorICAgICAgICAgICAgcmV0dXJuIC0oKC0xKSoqc2VsZi5fc2lnbikKKworICAgICMgTm90ZTogVGhlIERlY2ltYWwgc3RhbmRhcmQgZG9lc24ndCBjb3ZlciByaWNoIGNvbXBhcmlzb25zIGZvcgorICAgICMgRGVjaW1hbHMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgc3BlY2lmaWNhdGlvbiBpcyBzaWxlbnQgb24gdGhlCisgICAgIyBzdWJqZWN0IG9mIHdoYXQgc2hvdWxkIGhhcHBlbiBmb3IgYSBjb21wYXJpc29uIGludm9sdmluZyBhIE5hTi4KKyAgICAjIFdlIHRha2UgdGhlIGZvbGxvd2luZyBhcHByb2FjaDoKKyAgICAjCisgICAgIyAgID09IGNvbXBhcmlzb25zIGludm9sdmluZyBhIHF1aWV0IE5hTiBhbHdheXMgcmV0dXJuIEZhbHNlCisgICAgIyAgICE9IGNvbXBhcmlzb25zIGludm9sdmluZyBhIHF1aWV0IE5hTiBhbHdheXMgcmV0dXJuIFRydWUKKyAgICAjICAgPT0gb3IgIT0gY29tcGFyaXNvbnMgaW52b2x2aW5nIGEgc2lnbmFsaW5nIE5hTiBzaWduYWwKKyAgICAjICAgICAgSW52YWxpZE9wZXJhdGlvbiwgYW5kIHJldHVybiBGYWxzZSBvciBUcnVlIGFzIGFib3ZlIGlmIHRoZQorICAgICMgICAgICBJbnZhbGlkT3BlcmF0aW9uIGlzIG5vdCB0cmFwcGVkLgorICAgICMgICA8LCA+LCA8PSBhbmQgPj0gY29tcGFyaXNvbnMgaW52b2x2aW5nIGEgKHF1aWV0IG9yIHNpZ25hbGluZykKKyAgICAjICAgICAgTmFOIHNpZ25hbCBJbnZhbGlkT3BlcmF0aW9uLCBhbmQgcmV0dXJuIEZhbHNlIGlmIHRoZQorICAgICMgICAgICBJbnZhbGlkT3BlcmF0aW9uIGlzIG5vdCB0cmFwcGVkLgorICAgICMKKyAgICAjIFRoaXMgYmVoYXZpb3IgaXMgZGVzaWduZWQgdG8gY29uZm9ybSBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlIHRvCisgICAgIyB0aGF0IHNwZWNpZmllZCBieSBJRUVFIDc1NC4KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgIHNlbGYsIG90aGVyID0gX2NvbnZlcnRfZm9yX2NvbXBhcmlzb24oc2VsZiwgb3RoZXIsIGVxdWFsaXR5X29wPVRydWUpCisgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmV0dXJuIG90aGVyCisgICAgICAgIGlmIHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID09IDAKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgIHNlbGYsIG90aGVyID0gX2NvbnZlcnRfZm9yX2NvbXBhcmlzb24oc2VsZiwgb3RoZXIpCisgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmV0dXJuIG90aGVyCisgICAgICAgIGFucyA9IHNlbGYuX2NvbXBhcmVfY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKKyAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDwgMAorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgc2VsZiwgb3RoZXIgPSBfY29udmVydF9mb3JfY29tcGFyaXNvbihzZWxmLCBvdGhlcikKKyAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3RoZXIKKyAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPD0gMAorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgc2VsZiwgb3RoZXIgPSBfY29udmVydF9mb3JfY29tcGFyaXNvbihzZWxmLCBvdGhlcikKKyAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3RoZXIKKyAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPiAwCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBzZWxmLCBvdGhlciA9IF9jb252ZXJ0X2Zvcl9jb21wYXJpc29uKHNlbGYsIG90aGVyKQorICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBvdGhlcgorICAgICAgICBhbnMgPSBzZWxmLl9jb21wYXJlX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCisgICAgICAgIGlmIGFuczoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA+PSAwCisKKyAgICBkZWYgY29tcGFyZShzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiQ29tcGFyZSBzZWxmIHRvIG90aGVyLiAgUmV0dXJuIGEgZGVjaW1hbCB2YWx1ZToKKworICAgICAgICBhIG9yIGIgaXMgYSBOYU4gPT0+IERlY2ltYWwoJ05hTicpCisgICAgICAgIGEgPCBiICAgICAgICAgICA9PT4gRGVjaW1hbCgnLTEnKQorICAgICAgICBhID09IGIgICAgICAgICAgPT0+IERlY2ltYWwoJzAnKQorICAgICAgICBhID4gYiAgICAgICAgICAgPT0+IERlY2ltYWwoJzEnKQorICAgICAgICAiIiIKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQorCisgICAgICAgICMgQ29tcGFyZShOYU4sIE5hTikgPSBOYU4KKyAgICAgICAgaWYgKHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIgYW5kIG90aGVyLl9pc19zcGVjaWFsKToKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCisgICAgICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYuX2NtcChvdGhlcikpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICIiInguX19oYXNoX18oKSA8PT0+IGhhc2goeCkiIiIKKworICAgICAgICAjIEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBoYXNoIG9mIGEgRGVjaW1hbCBpbnN0YW5jZQorICAgICAgICAjIGFncmVlcyB3aXRoIHRoZSBoYXNoIG9mIGEgbnVtZXJpY2FsbHkgZXF1YWwgaW50ZWdlciwgZmxvYXQKKyAgICAgICAgIyBvciBGcmFjdGlvbiwgd2UgZm9sbG93IHRoZSBydWxlcyBmb3IgbnVtZXJpYyBoYXNoZXMgb3V0bGluZWQKKyAgICAgICAgIyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gIChTZWUgbGlicmFyeSBkb2NzLCAnQnVpbHQtaW4gVHlwZXMnKS4KKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfc25hbigpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGhhc2ggYSBzaWduYWxpbmcgTmFOIHZhbHVlLicpCisgICAgICAgICAgICBlbGlmIHNlbGYuaXNfbmFuKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9QeUhBU0hfTkFOCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NpZ246CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtX1B5SEFTSF9JTkYKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1B5SEFTSF9JTkYKKworICAgICAgICBpZiBzZWxmLl9leHAgPj0gMDoKKyAgICAgICAgICAgIGV4cF9oYXNoID0gcG93KDEwLCBzZWxmLl9leHAsIF9QeUhBU0hfTU9EVUxVUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4cF9oYXNoID0gcG93KF9QeUhBU0hfMTBJTlYsIC1zZWxmLl9leHAsIF9QeUhBU0hfTU9EVUxVUykKKyAgICAgICAgaGFzaF8gPSBpbnQoc2VsZi5faW50KSAqIGV4cF9oYXNoICUgX1B5SEFTSF9NT0RVTFVTCisgICAgICAgIGFucyA9IGhhc2hfIGlmIHNlbGYgPj0gMCBlbHNlIC1oYXNoXworICAgICAgICByZXR1cm4gLTIgaWYgYW5zID09IC0xIGVsc2UgYW5zCisKKyAgICBkZWYgYXNfdHVwbGUoc2VsZik6CisgICAgICAgICIiIlJlcHJlc2VudHMgdGhlIG51bWJlciBhcyBhIHRyaXBsZSB0dXBsZS4KKworICAgICAgICBUbyBzaG93IHRoZSBpbnRlcm5hbHMgZXhhY3RseSBhcyB0aGV5IGFyZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBEZWNpbWFsVHVwbGUoc2VsZi5fc2lnbiwgdHVwbGUobWFwKGludCwgc2VsZi5faW50KSksIHNlbGYuX2V4cCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgIiIiUmVwcmVzZW50cyB0aGUgbnVtYmVyIGFzIGFuIGluc3RhbmNlIG9mIERlY2ltYWwuIiIiCisgICAgICAgICMgSW52YXJpYW50OiAgZXZhbChyZXByKGQpKSA9PSBkCisgICAgICAgIHJldHVybiAiRGVjaW1hbCgnJXMnKSIgJSBzdHIoc2VsZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYsIGVuZz1GYWxzZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgbm90YXRpb24uCisKKyAgICAgICAgQ2FwdHVyZXMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgdW5kZXJseWluZyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2lnbiA9IFsnJywgJy0nXVtzZWxmLl9zaWduXQorICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgaWYgc2VsZi5fZXhwID09ICdGJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiArICdJbmZpbml0eScKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fZXhwID09ICduJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiArICdOYU4nICsgc2VsZi5faW50CisgICAgICAgICAgICBlbHNlOiAjIHNlbGYuX2V4cCA9PSAnTicKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiArICdzTmFOJyArIHNlbGYuX2ludAorCisgICAgICAgICMgbnVtYmVyIG9mIGRpZ2l0cyBvZiBzZWxmLl9pbnQgdG8gbGVmdCBvZiBkZWNpbWFsIHBvaW50CisgICAgICAgIGxlZnRkaWdpdHMgPSBzZWxmLl9leHAgKyBsZW4oc2VsZi5faW50KQorCisgICAgICAgICMgZG90cGxhY2UgaXMgbnVtYmVyIG9mIGRpZ2l0cyBvZiBzZWxmLl9pbnQgdG8gdGhlIGxlZnQgb2YgdGhlCisgICAgICAgICMgZGVjaW1hbCBwb2ludCBpbiB0aGUgbWFudGlzc2Egb2YgdGhlIG91dHB1dCBzdHJpbmcgKHRoYXQgaXMsCisgICAgICAgICMgYWZ0ZXIgYWRqdXN0aW5nIHRoZSBleHBvbmVudCkKKyAgICAgICAgaWYgc2VsZi5fZXhwIDw9IDAgYW5kIGxlZnRkaWdpdHMgPiAtNjoKKyAgICAgICAgICAgICMgbm8gZXhwb25lbnQgcmVxdWlyZWQKKyAgICAgICAgICAgIGRvdHBsYWNlID0gbGVmdGRpZ2l0cworICAgICAgICBlbGlmIG5vdCBlbmc6CisgICAgICAgICAgICAjIHVzdWFsIHNjaWVudGlmaWMgbm90YXRpb246IDEgZGlnaXQgb24gbGVmdCBvZiB0aGUgcG9pbnQKKyAgICAgICAgICAgIGRvdHBsYWNlID0gMQorICAgICAgICBlbGlmIHNlbGYuX2ludCA9PSAnMCc6CisgICAgICAgICAgICAjIGVuZ2luZWVyaW5nIG5vdGF0aW9uLCB6ZXJvCisgICAgICAgICAgICBkb3RwbGFjZSA9IChsZWZ0ZGlnaXRzICsgMSkgJSAzIC0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBlbmdpbmVlcmluZyBub3RhdGlvbiwgbm9uemVybworICAgICAgICAgICAgZG90cGxhY2UgPSAobGVmdGRpZ2l0cyAtIDEpICUgMyArIDEKKworICAgICAgICBpZiBkb3RwbGFjZSA8PSAwOgorICAgICAgICAgICAgaW50cGFydCA9ICcwJworICAgICAgICAgICAgZnJhY3BhcnQgPSAnLicgKyAnMCcqKC1kb3RwbGFjZSkgKyBzZWxmLl9pbnQKKyAgICAgICAgZWxpZiBkb3RwbGFjZSA+PSBsZW4oc2VsZi5faW50KToKKyAgICAgICAgICAgIGludHBhcnQgPSBzZWxmLl9pbnQrJzAnKihkb3RwbGFjZS1sZW4oc2VsZi5faW50KSkKKyAgICAgICAgICAgIGZyYWNwYXJ0ID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGludHBhcnQgPSBzZWxmLl9pbnRbOmRvdHBsYWNlXQorICAgICAgICAgICAgZnJhY3BhcnQgPSAnLicgKyBzZWxmLl9pbnRbZG90cGxhY2U6XQorICAgICAgICBpZiBsZWZ0ZGlnaXRzID09IGRvdHBsYWNlOgorICAgICAgICAgICAgZXhwID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisgICAgICAgICAgICBleHAgPSBbJ2UnLCAnRSddW2NvbnRleHQuY2FwaXRhbHNdICsgIiUrZCIgJSAobGVmdGRpZ2l0cy1kb3RwbGFjZSkKKworICAgICAgICByZXR1cm4gc2lnbiArIGludHBhcnQgKyBmcmFjcGFydCArIGV4cAorCisgICAgZGVmIHRvX2VuZ19zdHJpbmcoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiQ29udmVydCB0byBlbmdpbmVlcmluZy10eXBlIHN0cmluZy4KKworICAgICAgICBFbmdpbmVlcmluZyBub3RhdGlvbiBoYXMgYW4gZXhwb25lbnQgd2hpY2ggaXMgYSBtdWx0aXBsZSBvZiAzLCBzbyB0aGVyZQorICAgICAgICBhcmUgdXAgdG8gMyBkaWdpdHMgbGVmdCBvZiB0aGUgZGVjaW1hbCBwbGFjZS4KKworICAgICAgICBTYW1lIHJ1bGVzIGZvciB3aGVuIGluIGV4cG9uZW50aWFsIGFuZCB3aGVuIGFzIGEgdmFsdWUgYXMgaW4gX19zdHJfXy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9fc3RyX18oZW5nPVRydWUsIGNvbnRleHQ9Y29udGV4dCkKKworICAgIGRlZiBfX25lZ19fKHNlbGYsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgYSBjb3B5IHdpdGggdGhlIHNpZ24gc3dpdGNoZWQuCisKKyAgICAgICAgUm91bmRzLCBpZiBpdCBoYXMgcmVhc29uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMoY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgaWYgbm90IHNlbGYgYW5kIGNvbnRleHQucm91bmRpbmcgIT0gUk9VTkRfRkxPT1I6CisgICAgICAgICAgICAjIC1EZWNpbWFsKCcwJykgaXMgRGVjaW1hbCgnMCcpLCBub3QgRGVjaW1hbCgnLTAnKSwgZXhjZXB0CisgICAgICAgICAgICAjIGluIFJPVU5EX0ZMT09SIHJvdW5kaW5nIG1vZGUuCisgICAgICAgICAgICBhbnMgPSBzZWxmLmNvcHlfYWJzKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFucyA9IHNlbGYuY29weV9uZWdhdGUoKQorCisgICAgICAgIHJldHVybiBhbnMuX2ZpeChjb250ZXh0KQorCisgICAgZGVmIF9fcG9zX18oc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGNvcHksIHVubGVzcyBpdCBpcyBhIHNOYU4uCisKKyAgICAgICAgUm91bmRzIHRoZSBudW1iZXIgKGlmIG1vcmUgdGhhbiBwcmVjaXNpb24gZGlnaXRzKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMoY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgaWYgbm90IHNlbGYgYW5kIGNvbnRleHQucm91bmRpbmcgIT0gUk9VTkRfRkxPT1I6CisgICAgICAgICAgICAjICsgKC0wKSA9IDAsIGV4Y2VwdCBpbiBST1VORF9GTE9PUiByb3VuZGluZyBtb2RlLgorICAgICAgICAgICAgYW5zID0gc2VsZi5jb3B5X2FicygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhbnMgPSBEZWNpbWFsKHNlbGYpCisKKyAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCisKKyAgICBkZWYgX19hYnNfXyhzZWxmLCByb3VuZD1UcnVlLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBzZWxmLgorCisgICAgICAgIElmIHRoZSBrZXl3b3JkIGFyZ3VtZW50ICdyb3VuZCcgaXMgZmFsc2UsIGRvIG5vdCByb3VuZC4gIFRoZQorICAgICAgICBleHByZXNzaW9uIHNlbGYuX19hYnNfXyhyb3VuZD1GYWxzZSkgaXMgZXF1aXZhbGVudCB0bworICAgICAgICBzZWxmLmNvcHlfYWJzKCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgcm91bmQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb3B5X2FicygpCisKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMoY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICBpZiBzZWxmLl9zaWduOgorICAgICAgICAgICAgYW5zID0gc2VsZi5fX25lZ19fKGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX19wb3NfXyhjb250ZXh0PWNvbnRleHQpCisKKyAgICAgICAgcmV0dXJuIGFucworCisgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgc2VsZiArIG90aGVyLgorCisgICAgICAgIC1JTkYgKyBJTkYgKG9yIHRoZSByZXZlcnNlKSBjYXVzZSBJbnZhbGlkT3BlcmF0aW9uIGVycm9ycy4KKyAgICAgICAgIiIiCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmV0dXJuIG90aGVyCisKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorICAgICAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgICAgICMgSWYgYm90aCBJTkYsIHNhbWUgc2lnbiA9PiBzYW1lIGFzIGJvdGgsIG9wcG9zaXRlID0+IGVycm9yLgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NpZ24gIT0gb3RoZXIuX3NpZ24gYW5kIG90aGVyLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnLUlORiArIElORicpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKKyAgICAgICAgICAgIGlmIG90aGVyLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwob3RoZXIpICAjIENhbid0IGJvdGggYmUgaW5maW5pdHkgaGVyZQorCisgICAgICAgIGV4cCA9IG1pbihzZWxmLl9leHAsIG90aGVyLl9leHApCisgICAgICAgIG5lZ2F0aXZlemVybyA9IDAKKyAgICAgICAgaWYgY29udGV4dC5yb3VuZGluZyA9PSBST1VORF9GTE9PUiBhbmQgc2VsZi5fc2lnbiAhPSBvdGhlci5fc2lnbjoKKyAgICAgICAgICAgICMgSWYgdGhlIGFuc3dlciBpcyAwLCB0aGUgc2lnbiBzaG91bGQgYmUgbmVnYXRpdmUsIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgIG5lZ2F0aXZlemVybyA9IDEKKworICAgICAgICBpZiBub3Qgc2VsZiBhbmQgbm90IG90aGVyOgorICAgICAgICAgICAgc2lnbiA9IG1pbihzZWxmLl9zaWduLCBvdGhlci5fc2lnbikKKyAgICAgICAgICAgIGlmIG5lZ2F0aXZlemVybzoKKyAgICAgICAgICAgICAgICBzaWduID0gMQorICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShzaWduLCAnMCcsIGV4cCkKKyAgICAgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4gYW5zCisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgZXhwID0gbWF4KGV4cCwgb3RoZXIuX2V4cCAtIGNvbnRleHQucHJlYy0xKQorICAgICAgICAgICAgYW5zID0gb3RoZXIuX3Jlc2NhbGUoZXhwLCBjb250ZXh0LnJvdW5kaW5nKQorICAgICAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybiBhbnMKKyAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgZXhwID0gbWF4KGV4cCwgc2VsZi5fZXhwIC0gY29udGV4dC5wcmVjLTEpCisgICAgICAgICAgICBhbnMgPSBzZWxmLl9yZXNjYWxlKGV4cCwgY29udGV4dC5yb3VuZGluZykKKyAgICAgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgb3AxID0gX1dvcmtSZXAoc2VsZikKKyAgICAgICAgb3AyID0gX1dvcmtSZXAob3RoZXIpCisgICAgICAgIG9wMSwgb3AyID0gX25vcm1hbGl6ZShvcDEsIG9wMiwgY29udGV4dC5wcmVjKQorCisgICAgICAgIHJlc3VsdCA9IF9Xb3JrUmVwKCkKKyAgICAgICAgaWYgb3AxLnNpZ24gIT0gb3AyLnNpZ246CisgICAgICAgICAgICAjIEVxdWFsIGFuZCBvcHBvc2l0ZQorICAgICAgICAgICAgaWYgb3AxLmludCA9PSBvcDIuaW50OgorICAgICAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUobmVnYXRpdmV6ZXJvLCAnMCcsIGV4cCkKKyAgICAgICAgICAgICAgICBhbnMgPSBhbnMuX2ZpeChjb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiBhbnMKKyAgICAgICAgICAgIGlmIG9wMS5pbnQgPCBvcDIuaW50OgorICAgICAgICAgICAgICAgIG9wMSwgb3AyID0gb3AyLCBvcDEKKyAgICAgICAgICAgICAgICAjIE9LLCBub3cgYWJzKG9wMSkgPiBhYnMob3AyKQorICAgICAgICAgICAgaWYgb3AxLnNpZ24gPT0gMToKKyAgICAgICAgICAgICAgICByZXN1bHQuc2lnbiA9IDEKKyAgICAgICAgICAgICAgICBvcDEuc2lnbiwgb3AyLnNpZ24gPSBvcDIuc2lnbiwgb3AxLnNpZ24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0LnNpZ24gPSAwCisgICAgICAgICAgICAgICAgIyBTbyB3ZSBrbm93IHRoZSBzaWduLCBhbmQgb3AxID4gMC4KKyAgICAgICAgZWxpZiBvcDEuc2lnbiA9PSAxOgorICAgICAgICAgICAgcmVzdWx0LnNpZ24gPSAxCisgICAgICAgICAgICBvcDEuc2lnbiwgb3AyLnNpZ24gPSAoMCwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5zaWduID0gMAorICAgICAgICAjIE5vdywgb3AxID4gYWJzKG9wMikgPiAwCisKKyAgICAgICAgaWYgb3AyLnNpZ24gPT0gMDoKKyAgICAgICAgICAgIHJlc3VsdC5pbnQgPSBvcDEuaW50ICsgb3AyLmludAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0LmludCA9IG9wMS5pbnQgLSBvcDIuaW50CisKKyAgICAgICAgcmVzdWx0LmV4cCA9IG9wMS5leHAKKyAgICAgICAgYW5zID0gRGVjaW1hbChyZXN1bHQpCisgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgIHJldHVybiBhbnMKKworICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBzZWxmIC0gb3RoZXIiIiIKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3RoZXIKKworICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIG90aGVyLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICAjIHNlbGYgLSBvdGhlciBpcyBjb21wdXRlZCBhcyBzZWxmICsgb3RoZXIuY29weV9uZWdhdGUoKQorICAgICAgICByZXR1cm4gc2VsZi5fX2FkZF9fKG90aGVyLmNvcHlfbmVnYXRlKCksIGNvbnRleHQ9Y29udGV4dCkKKworICAgIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIG90aGVyIC0gc2VsZiIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBvdGhlcgorCisgICAgICAgIHJldHVybiBvdGhlci5fX3N1Yl9fKHNlbGYsIGNvbnRleHQ9Y29udGV4dCkKKworICAgIGRlZiBfX211bF9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gc2VsZiAqIG90aGVyLgorCisgICAgICAgICgrLSkgSU5GICogMCAob3IgaXRzIHJldmVyc2UpIHJhaXNlIEludmFsaWRPcGVyYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBvdGhlcgorCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICByZXN1bHRzaWduID0gc2VsZi5fc2lnbiBeIG90aGVyLl9zaWduCisKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlci5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCisgICAgICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJygrLSlJTkYgKiAwJykKKyAgICAgICAgICAgICAgICByZXR1cm4gX1NpZ25lZEluZmluaXR5W3Jlc3VsdHNpZ25dCisKKyAgICAgICAgICAgIGlmIG90aGVyLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnMCAqICgrLSlJTkYnKQorICAgICAgICAgICAgICAgIHJldHVybiBfU2lnbmVkSW5maW5pdHlbcmVzdWx0c2lnbl0KKworICAgICAgICByZXN1bHRleHAgPSBzZWxmLl9leHAgKyBvdGhlci5fZXhwCisKKyAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIG11bHRpcGx5aW5nIGJ5IHplcm8KKyAgICAgICAgaWYgbm90IHNlbGYgb3Igbm90IG90aGVyOgorICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShyZXN1bHRzaWduLCAnMCcsIHJlc3VsdGV4cCkKKyAgICAgICAgICAgICMgRml4aW5nIGluIGNhc2UgdGhlIGV4cG9uZW50IGlzIG91dCBvZiBib3VuZHMKKyAgICAgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIG11bHRpcGx5aW5nIGJ5IHBvd2VyIG9mIDEwCisgICAgICAgIGlmIHNlbGYuX2ludCA9PSAnMSc6CisgICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHJlc3VsdHNpZ24sIG90aGVyLl9pbnQsIHJlc3VsdGV4cCkKKyAgICAgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4gYW5zCisgICAgICAgIGlmIG90aGVyLl9pbnQgPT0gJzEnOgorICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShyZXN1bHRzaWduLCBzZWxmLl9pbnQsIHJlc3VsdGV4cCkKKyAgICAgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgb3AxID0gX1dvcmtSZXAoc2VsZikKKyAgICAgICAgb3AyID0gX1dvcmtSZXAob3RoZXIpCisKKyAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShyZXN1bHRzaWduLCBzdHIob3AxLmludCAqIG9wMi5pbnQpLCByZXN1bHRleHApCisgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisKKyAgICAgICAgcmV0dXJuIGFucworICAgIF9fcm11bF9fID0gX19tdWxfXworCisgICAgZGVmIF9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gc2VsZiAvIG90aGVyLiIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICBzaWduID0gc2VsZi5fc2lnbiBeIG90aGVyLl9zaWduCisKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlci5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCisgICAgICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgYW5kIG90aGVyLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICcoKy0pSU5GLygrLSlJTkYnKQorCisgICAgICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9TaWduZWRJbmZpbml0eVtzaWduXQorCisgICAgICAgICAgICBpZiBvdGhlci5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKENsYW1wZWQsICdEaXZpc2lvbiBieSBpbmZpbml0eScpCisgICAgICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgJzAnLCBjb250ZXh0LkV0aW55KCkpCisKKyAgICAgICAgIyBTcGVjaWFsIGNhc2VzIGZvciB6ZXJvZXMKKyAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uVW5kZWZpbmVkLCAnMCAvIDAnKQorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uQnlaZXJvLCAneCAvIDAnLCBzaWduKQorCisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgZXhwID0gc2VsZi5fZXhwIC0gb3RoZXIuX2V4cAorICAgICAgICAgICAgY29lZmYgPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE9LLCBzbyBuZWl0aGVyID0gMCwgSU5GIG9yIE5hTgorICAgICAgICAgICAgc2hpZnQgPSBsZW4ob3RoZXIuX2ludCkgLSBsZW4oc2VsZi5faW50KSArIGNvbnRleHQucHJlYyArIDEKKyAgICAgICAgICAgIGV4cCA9IHNlbGYuX2V4cCAtIG90aGVyLl9leHAgLSBzaGlmdAorICAgICAgICAgICAgb3AxID0gX1dvcmtSZXAoc2VsZikKKyAgICAgICAgICAgIG9wMiA9IF9Xb3JrUmVwKG90aGVyKQorICAgICAgICAgICAgaWYgc2hpZnQgPj0gMDoKKyAgICAgICAgICAgICAgICBjb2VmZiwgcmVtYWluZGVyID0gZGl2bW9kKG9wMS5pbnQgKiAxMCoqc2hpZnQsIG9wMi5pbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvZWZmLCByZW1haW5kZXIgPSBkaXZtb2Qob3AxLmludCwgb3AyLmludCAqIDEwKiotc2hpZnQpCisgICAgICAgICAgICBpZiByZW1haW5kZXI6CisgICAgICAgICAgICAgICAgIyByZXN1bHQgaXMgbm90IGV4YWN0OyBhZGp1c3QgdG8gZW5zdXJlIGNvcnJlY3Qgcm91bmRpbmcKKyAgICAgICAgICAgICAgICBpZiBjb2VmZiAlIDUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29lZmYgKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHJlc3VsdCBpcyBleGFjdDsgZ2V0IGFzIGNsb3NlIHRvIGlkZWFsIGV4cG9uZW50IGFzIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgaWRlYWxfZXhwID0gc2VsZi5fZXhwIC0gb3RoZXIuX2V4cAorICAgICAgICAgICAgICAgIHdoaWxlIGV4cCA8IGlkZWFsX2V4cCBhbmQgY29lZmYgJSAxMCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb2VmZiAvLz0gMTAKKyAgICAgICAgICAgICAgICAgICAgZXhwICs9IDEKKworICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHNpZ24sIHN0cihjb2VmZiksIGV4cCkKKyAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCisKKyAgICBkZWYgX2RpdmlkZShzZWxmLCBvdGhlciwgY29udGV4dCk6CisgICAgICAgICIiIlJldHVybiAoc2VsZiAvLyBvdGhlciwgc2VsZiAlIG90aGVyKSwgdG8gY29udGV4dC5wcmVjIHByZWNpc2lvbi4KKworICAgICAgICBBc3N1bWVzIHRoYXQgbmVpdGhlciBzZWxmIG5vciBvdGhlciBpcyBhIE5hTiwgdGhhdCBzZWxmIGlzIG5vdAorICAgICAgICBpbmZpbml0ZSBhbmQgdGhhdCBvdGhlciBpcyBub256ZXJvLgorICAgICAgICAiIiIKKyAgICAgICAgc2lnbiA9IHNlbGYuX3NpZ24gXiBvdGhlci5fc2lnbgorICAgICAgICBpZiBvdGhlci5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgaWRlYWxfZXhwID0gc2VsZi5fZXhwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZGVhbF9leHAgPSBtaW4oc2VsZi5fZXhwLCBvdGhlci5fZXhwKQorCisgICAgICAgIGV4cGRpZmYgPSBzZWxmLmFkanVzdGVkKCkgLSBvdGhlci5hZGp1c3RlZCgpCisgICAgICAgIGlmIG5vdCBzZWxmIG9yIG90aGVyLl9pc2luZmluaXR5KCkgb3IgZXhwZGlmZiA8PSAtMjoKKyAgICAgICAgICAgIHJldHVybiAoX2RlY19mcm9tX3RyaXBsZShzaWduLCAnMCcsIDApLAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXNjYWxlKGlkZWFsX2V4cCwgY29udGV4dC5yb3VuZGluZykpCisgICAgICAgIGlmIGV4cGRpZmYgPD0gY29udGV4dC5wcmVjOgorICAgICAgICAgICAgb3AxID0gX1dvcmtSZXAoc2VsZikKKyAgICAgICAgICAgIG9wMiA9IF9Xb3JrUmVwKG90aGVyKQorICAgICAgICAgICAgaWYgb3AxLmV4cCA+PSBvcDIuZXhwOgorICAgICAgICAgICAgICAgIG9wMS5pbnQgKj0gMTAqKihvcDEuZXhwIC0gb3AyLmV4cCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3AyLmludCAqPSAxMCoqKG9wMi5leHAgLSBvcDEuZXhwKQorICAgICAgICAgICAgcSwgciA9IGRpdm1vZChvcDEuaW50LCBvcDIuaW50KQorICAgICAgICAgICAgaWYgcSA8IDEwKipjb250ZXh0LnByZWM6CisgICAgICAgICAgICAgICAgcmV0dXJuIChfZGVjX2Zyb21fdHJpcGxlKHNpZ24sIHN0cihxKSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sIHN0cihyKSwgaWRlYWxfZXhwKSkKKworICAgICAgICAjIEhlcmUgdGhlIHF1b3RpZW50IGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRhYmxlCisgICAgICAgIGFucyA9IGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uSW1wb3NzaWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1b3RpZW50IHRvbyBsYXJnZSBpbiAvLywgJSBvciBkaXZtb2QnKQorICAgICAgICByZXR1cm4gYW5zLCBhbnMKKworICAgIGRlZiBfX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlN3YXBzIHNlbGYvb3RoZXIgYW5kIHJldHVybnMgX190cnVlZGl2X18uIiIiCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmV0dXJuIG90aGVyCisgICAgICAgIHJldHVybiBvdGhlci5fX3RydWVkaXZfXyhzZWxmLCBjb250ZXh0PWNvbnRleHQpCisKKyAgICBkZWYgX19kaXZtb2RfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiAoc2VsZiAvLyBvdGhlciwgc2VsZiAlIG90aGVyKQorICAgICAgICAiIiIKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3RoZXIKKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKKyAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgcmV0dXJuIChhbnMsIGFucykKKworICAgICAgICBzaWduID0gc2VsZi5fc2lnbiBeIG90aGVyLl9zaWduCisgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKToKKyAgICAgICAgICAgIGlmIG90aGVyLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgYW5zID0gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ2Rpdm1vZChJTkYsIElORiknKQorICAgICAgICAgICAgICAgIHJldHVybiBhbnMsIGFucworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKF9TaWduZWRJbmZpbml0eVtzaWduXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICdJTkYgJSB4JykpCisKKyAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICAgICAgYW5zID0gY29udGV4dC5fcmFpc2VfZXJyb3IoRGl2aXNpb25VbmRlZmluZWQsICdkaXZtb2QoMCwgMCknKQorICAgICAgICAgICAgICAgIHJldHVybiBhbnMsIGFucworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uQnlaZXJvLCAneCAvLyAwJywgc2lnbiksCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAneCAlIDAnKSkKKworICAgICAgICBxdW90aWVudCwgcmVtYWluZGVyID0gc2VsZi5fZGl2aWRlKG90aGVyLCBjb250ZXh0KQorICAgICAgICByZW1haW5kZXIgPSByZW1haW5kZXIuX2ZpeChjb250ZXh0KQorICAgICAgICByZXR1cm4gcXVvdGllbnQsIHJlbWFpbmRlcgorCisgICAgZGVmIF9fcmRpdm1vZF9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJTd2FwcyBzZWxmL290aGVyIGFuZCByZXR1cm5zIF9fZGl2bW9kX18uIiIiCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmV0dXJuIG90aGVyCisgICAgICAgIHJldHVybiBvdGhlci5fX2Rpdm1vZF9fKHNlbGYsIGNvbnRleHQ9Y29udGV4dCkKKworICAgIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZiAlIG90aGVyCisgICAgICAgICIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBvdGhlcgorCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICdJTkYgJSB4JykKKyAgICAgICAgZWxpZiBub3Qgb3RoZXI6CisgICAgICAgICAgICBpZiBzZWxmOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAneCAlIDAnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoRGl2aXNpb25VbmRlZmluZWQsICcwICUgMCcpCisKKyAgICAgICAgcmVtYWluZGVyID0gc2VsZi5fZGl2aWRlKG90aGVyLCBjb250ZXh0KVsxXQorICAgICAgICByZW1haW5kZXIgPSByZW1haW5kZXIuX2ZpeChjb250ZXh0KQorICAgICAgICByZXR1cm4gcmVtYWluZGVyCisKKyAgICBkZWYgX19ybW9kX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlN3YXBzIHNlbGYvb3RoZXIgYW5kIHJldHVybnMgX19tb2RfXy4iIiIKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3RoZXIKKyAgICAgICAgcmV0dXJuIG90aGVyLl9fbW9kX18oc2VsZiwgY29udGV4dD1jb250ZXh0KQorCisgICAgZGVmIHJlbWFpbmRlcl9uZWFyKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVtYWluZGVyIG5lYXJlc3QgdG8gMC0gIGFicyhyZW1haW5kZXItbmVhcikgPD0gb3RoZXIvMgorICAgICAgICAiIiIKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgIyBzZWxmID09ICsvLWluZmluaXR5IC0+IEludmFsaWRPcGVyYXRpb24KKyAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbWFpbmRlcl9uZWFyKGluZmluaXR5LCB4KScpCisKKyAgICAgICAgIyBvdGhlciA9PSAwIC0+IGVpdGhlciBJbnZhbGlkT3BlcmF0aW9uIG9yIERpdmlzaW9uVW5kZWZpbmVkCisgICAgICAgIGlmIG5vdCBvdGhlcjoKKyAgICAgICAgICAgIGlmIHNlbGY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZW1haW5kZXJfbmVhcih4LCAwKScpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihEaXZpc2lvblVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbWFpbmRlcl9uZWFyKDAsIDApJykKKworICAgICAgICAjIG90aGVyID0gKy8taW5maW5pdHkgLT4gcmVtYWluZGVyID0gc2VsZgorICAgICAgICBpZiBvdGhlci5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgYW5zID0gRGVjaW1hbChzZWxmKQorICAgICAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCisKKyAgICAgICAgIyBzZWxmID0gMCAtPiByZW1haW5kZXIgPSBzZWxmLCB3aXRoIGlkZWFsIGV4cG9uZW50CisgICAgICAgIGlkZWFsX2V4cG9uZW50ID0gbWluKHNlbGYuX2V4cCwgb3RoZXIuX2V4cCkKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sICcwJywgaWRlYWxfZXhwb25lbnQpCisgICAgICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKKworICAgICAgICAjIGNhdGNoIG1vc3QgY2FzZXMgb2YgbGFyZ2Ugb3Igc21hbGwgcXVvdGllbnQKKyAgICAgICAgZXhwZGlmZiA9IHNlbGYuYWRqdXN0ZWQoKSAtIG90aGVyLmFkanVzdGVkKCkKKyAgICAgICAgaWYgZXhwZGlmZiA+PSBjb250ZXh0LnByZWMgKyAxOgorICAgICAgICAgICAgIyBleHBkaWZmID49IHByZWMrMSA9PiBhYnMoc2VsZi9vdGhlcikgPiAxMCoqcHJlYworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uSW1wb3NzaWJsZSkKKyAgICAgICAgaWYgZXhwZGlmZiA8PSAtMjoKKyAgICAgICAgICAgICMgZXhwZGlmZiA8PSAtMiA9PiBhYnMoc2VsZi9vdGhlcikgPCAwLjEKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX3Jlc2NhbGUoaWRlYWxfZXhwb25lbnQsIGNvbnRleHQucm91bmRpbmcpCisgICAgICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKKworICAgICAgICAjIGFkanVzdCBib3RoIGFyZ3VtZW50cyB0byBoYXZlIHRoZSBzYW1lIGV4cG9uZW50LCB0aGVuIGRpdmlkZQorICAgICAgICBvcDEgPSBfV29ya1JlcChzZWxmKQorICAgICAgICBvcDIgPSBfV29ya1JlcChvdGhlcikKKyAgICAgICAgaWYgb3AxLmV4cCA+PSBvcDIuZXhwOgorICAgICAgICAgICAgb3AxLmludCAqPSAxMCoqKG9wMS5leHAgLSBvcDIuZXhwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3AyLmludCAqPSAxMCoqKG9wMi5leHAgLSBvcDEuZXhwKQorICAgICAgICBxLCByID0gZGl2bW9kKG9wMS5pbnQsIG9wMi5pbnQpCisgICAgICAgICMgcmVtYWluZGVyIGlzIHIqMTAqKmlkZWFsX2V4cG9uZW50OyBvdGhlciBpcyArLy1vcDIuaW50ICoKKyAgICAgICAgIyAxMCoqaWRlYWxfZXhwb25lbnQuICAgQXBwbHkgY29ycmVjdGlvbiB0byBlbnN1cmUgdGhhdAorICAgICAgICAjIGFicyhyZW1haW5kZXIpIDw9IGFicyhvdGhlcikvMgorICAgICAgICBpZiAyKnIgKyAocSYxKSA+IG9wMi5pbnQ6CisgICAgICAgICAgICByIC09IG9wMi5pbnQKKyAgICAgICAgICAgIHEgKz0gMQorCisgICAgICAgIGlmIHEgPj0gMTAqKmNvbnRleHQucHJlYzoKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihEaXZpc2lvbkltcG9zc2libGUpCisKKyAgICAgICAgIyByZXN1bHQgaGFzIHNhbWUgc2lnbiBhcyBzZWxmIHVubGVzcyByIGlzIG5lZ2F0aXZlCisgICAgICAgIHNpZ24gPSBzZWxmLl9zaWduCisgICAgICAgIGlmIHIgPCAwOgorICAgICAgICAgICAgc2lnbiA9IDEtc2lnbgorICAgICAgICAgICAgciA9IC1yCisKKyAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShzaWduLCBzdHIociksIGlkZWFsX2V4cG9uZW50KQorICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKKworICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiInNlbGYgLy8gb3RoZXIiIiIKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3RoZXIKKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKKyAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKToKKyAgICAgICAgICAgIGlmIG90aGVyLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICdJTkYgLy8gSU5GJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9TaWduZWRJbmZpbml0eVtzZWxmLl9zaWduIF4gb3RoZXIuX3NpZ25dCisKKyAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgaWYgc2VsZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoRGl2aXNpb25CeVplcm8sICd4IC8vIDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaWduIF4gb3RoZXIuX3NpZ24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihEaXZpc2lvblVuZGVmaW5lZCwgJzAgLy8gMCcpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RpdmlkZShvdGhlciwgY29udGV4dClbMF0KKworICAgIGRlZiBfX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJTd2FwcyBzZWxmL290aGVyIGFuZCByZXR1cm5zIF9fZmxvb3JkaXZfXy4iIiIKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByZXR1cm4gb3RoZXIKKyAgICAgICAgcmV0dXJuIG90aGVyLl9fZmxvb3JkaXZfXyhzZWxmLCBjb250ZXh0PWNvbnRleHQpCisKKyAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAiIiJGbG9hdCByZXByZXNlbnRhdGlvbi4iIiIKKyAgICAgICAgaWYgc2VsZi5faXNuYW4oKToKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfc25hbigpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHNpZ25hbGluZyBOYU4gdG8gZmxvYXQiKQorICAgICAgICAgICAgcyA9ICItbmFuIiBpZiBzZWxmLl9zaWduIGVsc2UgIm5hbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHMgPSBzdHIoc2VsZikKKyAgICAgICAgcmV0dXJuIGZsb2F0KHMpCisKKyAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udmVydHMgc2VsZiB0byBhbiBpbnQsIHRydW5jYXRpbmcgaWYgbmVjZXNzYXJ5LiIiIgorICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgaWYgc2VsZi5faXNuYW4oKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCBOYU4gdG8gaW50ZWdlciIpCisgICAgICAgICAgICBlbGlmIHNlbGYuX2lzaW5maW5pdHkoKToKKyAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJDYW5ub3QgY29udmVydCBpbmZpbml0eSB0byBpbnRlZ2VyIikKKyAgICAgICAgcyA9ICgtMSkqKnNlbGYuX3NpZ24KKyAgICAgICAgaWYgc2VsZi5fZXhwID49IDA6CisgICAgICAgICAgICByZXR1cm4gcyppbnQoc2VsZi5faW50KSoxMCoqc2VsZi5fZXhwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcyppbnQoc2VsZi5faW50WzpzZWxmLl9leHBdIG9yICcwJykKKworICAgIF9fdHJ1bmNfXyA9IF9faW50X18KKworICAgIGRlZiByZWFsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIHJlYWwgPSBwcm9wZXJ0eShyZWFsKQorCisgICAgZGVmIGltYWcoc2VsZik6CisgICAgICAgIHJldHVybiBEZWNpbWFsKDApCisgICAgaW1hZyA9IHByb3BlcnR5KGltYWcpCisKKyAgICBkZWYgY29uanVnYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gY29tcGxleChmbG9hdChzZWxmKSkKKworICAgIGRlZiBfZml4X25hbihzZWxmLCBjb250ZXh0KToKKyAgICAgICAgIiIiRGVjYXBpdGF0ZSB0aGUgcGF5bG9hZCBvZiBhIE5hTiB0byBmaXQgdGhlIGNvbnRleHQiIiIKKyAgICAgICAgcGF5bG9hZCA9IHNlbGYuX2ludAorCisgICAgICAgICMgbWF4aW11bSBsZW5ndGggb2YgcGF5bG9hZCBpcyBwcmVjaXNpb24gaWYgY2xhbXA9MCwKKyAgICAgICAgIyBwcmVjaXNpb24tMSBpZiBjbGFtcD0xLgorICAgICAgICBtYXhfcGF5bG9hZF9sZW4gPSBjb250ZXh0LnByZWMgLSBjb250ZXh0LmNsYW1wCisgICAgICAgIGlmIGxlbihwYXlsb2FkKSA+IG1heF9wYXlsb2FkX2xlbjoKKyAgICAgICAgICAgIHBheWxvYWQgPSBwYXlsb2FkW2xlbihwYXlsb2FkKS1tYXhfcGF5bG9hZF9sZW46XS5sc3RyaXAoJzAnKQorICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgcGF5bG9hZCwgc2VsZi5fZXhwLCBUcnVlKQorICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQorCisgICAgZGVmIF9maXgoc2VsZiwgY29udGV4dCk6CisgICAgICAgICIiIlJvdW5kIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBrZWVwIHNlbGYgd2l0aGluIHByZWMgcHJlY2lzaW9uLgorCisgICAgICAgIFJvdW5kcyBhbmQgZml4ZXMgdGhlIGV4cG9uZW50LiAgRG9lcyBub3QgcmFpc2Ugb24gYSBzTmFOLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgc2VsZiAtIERlY2ltYWwgaW5zdGFuY2UKKyAgICAgICAgY29udGV4dCAtIGNvbnRleHQgdXNlZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2lzbmFuKCk6CisgICAgICAgICAgICAgICAgIyBkZWNhcGl0YXRlIHBheWxvYWQgaWYgbmVjZXNzYXJ5CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeF9uYW4oY29udGV4dCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBzZWxmIGlzICsvLUluZmluaXR5OyByZXR1cm4gdW5hbHRlcmVkCisgICAgICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKKworICAgICAgICAjIGlmIHNlbGYgaXMgemVybyB0aGVuIGV4cG9uZW50IHNob3VsZCBiZSBiZXR3ZWVuIEV0aW55IGFuZAorICAgICAgICAjIEVtYXggaWYgY2xhbXA9PTAsIGFuZCBiZXR3ZWVuIEV0aW55IGFuZCBFdG9wIGlmIGNsYW1wPT0xLgorICAgICAgICBFdGlueSA9IGNvbnRleHQuRXRpbnkoKQorICAgICAgICBFdG9wID0gY29udGV4dC5FdG9wKCkKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICBleHBfbWF4ID0gW2NvbnRleHQuRW1heCwgRXRvcF1bY29udGV4dC5jbGFtcF0KKyAgICAgICAgICAgIG5ld19leHAgPSBtaW4obWF4KHNlbGYuX2V4cCwgRXRpbnkpLCBleHBfbWF4KQorICAgICAgICAgICAgaWYgbmV3X2V4cCAhPSBzZWxmLl9leHA6CisgICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoQ2xhbXBlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMCcsIG5ld19leHApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCisKKyAgICAgICAgIyBleHBfbWluIGlzIHRoZSBzbWFsbGVzdCBhbGxvd2FibGUgZXhwb25lbnQgb2YgdGhlIHJlc3VsdCwKKyAgICAgICAgIyBlcXVhbCB0byBtYXgoc2VsZi5hZGp1c3RlZCgpLWNvbnRleHQucHJlYysxLCBFdGlueSkKKyAgICAgICAgZXhwX21pbiA9IGxlbihzZWxmLl9pbnQpICsgc2VsZi5fZXhwIC0gY29udGV4dC5wcmVjCisgICAgICAgIGlmIGV4cF9taW4gPiBFdG9wOgorICAgICAgICAgICAgIyBvdmVyZmxvdzogZXhwX21pbiA+IEV0b3AgaWZmIHNlbGYuYWRqdXN0ZWQoKSA+IEVtYXgKKyAgICAgICAgICAgIGFucyA9IGNvbnRleHQuX3JhaXNlX2Vycm9yKE92ZXJmbG93LCAnYWJvdmUgRW1heCcsIHNlbGYuX3NpZ24pCisgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbmV4YWN0KQorICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoUm91bmRlZCkKKyAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICBzZWxmX2lzX3N1Ym5vcm1hbCA9IGV4cF9taW4gPCBFdGlueQorICAgICAgICBpZiBzZWxmX2lzX3N1Ym5vcm1hbDoKKyAgICAgICAgICAgIGV4cF9taW4gPSBFdGlueQorCisgICAgICAgICMgcm91bmQgaWYgc2VsZiBoYXMgdG9vIG1hbnkgZGlnaXRzCisgICAgICAgIGlmIHNlbGYuX2V4cCA8IGV4cF9taW46CisgICAgICAgICAgICBkaWdpdHMgPSBsZW4oc2VsZi5faW50KSArIHNlbGYuX2V4cCAtIGV4cF9taW4KKyAgICAgICAgICAgIGlmIGRpZ2l0cyA8IDA6CisgICAgICAgICAgICAgICAgc2VsZiA9IF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgJzEnLCBleHBfbWluLTEpCisgICAgICAgICAgICAgICAgZGlnaXRzID0gMAorICAgICAgICAgICAgcm91bmRpbmdfbWV0aG9kID0gc2VsZi5fcGlja19yb3VuZGluZ19mdW5jdGlvbltjb250ZXh0LnJvdW5kaW5nXQorICAgICAgICAgICAgY2hhbmdlZCA9IHJvdW5kaW5nX21ldGhvZChzZWxmLCBkaWdpdHMpCisgICAgICAgICAgICBjb2VmZiA9IHNlbGYuX2ludFs6ZGlnaXRzXSBvciAnMCcKKyAgICAgICAgICAgIGlmIGNoYW5nZWQgPiAwOgorICAgICAgICAgICAgICAgIGNvZWZmID0gc3RyKGludChjb2VmZikrMSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oY29lZmYpID4gY29udGV4dC5wcmVjOgorICAgICAgICAgICAgICAgICAgICBjb2VmZiA9IGNvZWZmWzotMV0KKyAgICAgICAgICAgICAgICAgICAgZXhwX21pbiArPSAxCisKKyAgICAgICAgICAgICMgY2hlY2sgd2hldGhlciB0aGUgcm91bmRpbmcgcHVzaGVkIHRoZSBleHBvbmVudCBvdXQgb2YgcmFuZ2UKKyAgICAgICAgICAgIGlmIGV4cF9taW4gPiBFdG9wOgorICAgICAgICAgICAgICAgIGFucyA9IGNvbnRleHQuX3JhaXNlX2Vycm9yKE92ZXJmbG93LCAnYWJvdmUgRW1heCcsIHNlbGYuX3NpZ24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgY29lZmYsIGV4cF9taW4pCisKKyAgICAgICAgICAgICMgcmFpc2UgdGhlIGFwcHJvcHJpYXRlIHNpZ25hbHMsIHRha2luZyBjYXJlIHRvIHJlc3BlY3QKKyAgICAgICAgICAgICMgdGhlIHByZWNlZGVuY2UgZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpY2F0aW9uCisgICAgICAgICAgICBpZiBjaGFuZ2VkIGFuZCBzZWxmX2lzX3N1Ym5vcm1hbDoKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihVbmRlcmZsb3cpCisgICAgICAgICAgICBpZiBzZWxmX2lzX3N1Ym5vcm1hbDoKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihTdWJub3JtYWwpCisgICAgICAgICAgICBpZiBjaGFuZ2VkOgorICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEluZXhhY3QpCisgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihSb3VuZGVkKQorICAgICAgICAgICAgaWYgbm90IGFuczoKKyAgICAgICAgICAgICAgICAjIHJhaXNlIENsYW1wZWQgb24gdW5kZXJmbG93IHRvIDAKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihDbGFtcGVkKQorICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgIGlmIHNlbGZfaXNfc3Vibm9ybWFsOgorICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoU3Vibm9ybWFsKQorCisgICAgICAgICMgZm9sZCBkb3duIGlmIGNsYW1wID09IDEgYW5kIHNlbGYgaGFzIHRvbyBmZXcgZGlnaXRzCisgICAgICAgIGlmIGNvbnRleHQuY2xhbXAgPT0gMSBhbmQgc2VsZi5fZXhwID4gRXRvcDoKKyAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKENsYW1wZWQpCisgICAgICAgICAgICBzZWxmX3BhZGRlZCA9IHNlbGYuX2ludCArICcwJyooc2VsZi5fZXhwIC0gRXRvcCkKKyAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sIHNlbGZfcGFkZGVkLCBFdG9wKQorCisgICAgICAgICMgaGVyZSBzZWxmIHdhcyByZXByZXNlbnRhYmxlIHRvIGJlZ2luIHdpdGg7IHJldHVybiB1bmNoYW5nZWQKKyAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKKworICAgICMgZm9yIGVhY2ggb2YgdGhlIHJvdW5kaW5nIGZ1bmN0aW9ucyBiZWxvdzoKKyAgICAjICAgc2VsZiBpcyBhIGZpbml0ZSwgbm9uemVybyBEZWNpbWFsCisgICAgIyAgIHByZWMgaXMgYW4gaW50ZWdlciBzYXRpc2Z5aW5nIDAgPD0gcHJlYyA8IGxlbihzZWxmLl9pbnQpCisgICAgIworICAgICMgZWFjaCBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciAtMSwgMCwgb3IgMSwgYXMgZm9sbG93czoKKyAgICAjICAgMSBpbmRpY2F0ZXMgdGhhdCBzZWxmIHNob3VsZCBiZSByb3VuZGVkIHVwIChhd2F5IGZyb20gemVybykKKyAgICAjICAgMCBpbmRpY2F0ZXMgdGhhdCBzZWxmIHNob3VsZCBiZSB0cnVuY2F0ZWQsIGFuZCB0aGF0IGFsbCB0aGUKKyAgICAjICAgICBkaWdpdHMgdG8gYmUgdHJ1bmNhdGVkIGFyZSB6ZXJvcyAoc28gdGhlIHZhbHVlIGlzIHVuY2hhbmdlZCkKKyAgICAjICAtMSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgbm9uemVybyBkaWdpdHMgdG8gYmUgdHJ1bmNhdGVkCisKKyAgICBkZWYgX3JvdW5kX2Rvd24oc2VsZiwgcHJlYyk6CisgICAgICAgICIiIkFsc28ga25vd24gYXMgcm91bmQtdG93YXJkcy0wLCB0cnVuY2F0ZS4iIiIKKyAgICAgICAgaWYgX2FsbF96ZXJvcyhzZWxmLl9pbnQsIHByZWMpOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgZGVmIF9yb3VuZF91cChzZWxmLCBwcmVjKToKKyAgICAgICAgIiIiUm91bmRzIGF3YXkgZnJvbSAwLiIiIgorICAgICAgICByZXR1cm4gLXNlbGYuX3JvdW5kX2Rvd24ocHJlYykKKworICAgIGRlZiBfcm91bmRfaGFsZl91cChzZWxmLCBwcmVjKToKKyAgICAgICAgIiIiUm91bmRzIDUgdXAgKGF3YXkgZnJvbSAwKSIiIgorICAgICAgICBpZiBzZWxmLl9pbnRbcHJlY10gaW4gJzU2Nzg5JzoKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGVsaWYgX2FsbF96ZXJvcyhzZWxmLl9pbnQsIHByZWMpOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgZGVmIF9yb3VuZF9oYWxmX2Rvd24oc2VsZiwgcHJlYyk6CisgICAgICAgICIiIlJvdW5kIDUgZG93biIiIgorICAgICAgICBpZiBfZXhhY3RfaGFsZihzZWxmLl9pbnQsIHByZWMpOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcm91bmRfaGFsZl91cChwcmVjKQorCisgICAgZGVmIF9yb3VuZF9oYWxmX2V2ZW4oc2VsZiwgcHJlYyk6CisgICAgICAgICIiIlJvdW5kIDUgdG8gZXZlbiwgcmVzdCB0byBuZWFyZXN0LiIiIgorICAgICAgICBpZiBfZXhhY3RfaGFsZihzZWxmLl9pbnQsIHByZWMpIGFuZCBcCisgICAgICAgICAgICAgICAgKHByZWMgPT0gMCBvciBzZWxmLl9pbnRbcHJlYy0xXSBpbiAnMDI0NjgnKToKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JvdW5kX2hhbGZfdXAocHJlYykKKworICAgIGRlZiBfcm91bmRfY2VpbGluZyhzZWxmLCBwcmVjKToKKyAgICAgICAgIiIiUm91bmRzIHVwIChub3QgYXdheSBmcm9tIDAgaWYgbmVnYXRpdmUuKSIiIgorICAgICAgICBpZiBzZWxmLl9zaWduOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JvdW5kX2Rvd24ocHJlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAtc2VsZi5fcm91bmRfZG93bihwcmVjKQorCisgICAgZGVmIF9yb3VuZF9mbG9vcihzZWxmLCBwcmVjKToKKyAgICAgICAgIiIiUm91bmRzIGRvd24gKG5vdCB0b3dhcmRzIDAgaWYgbmVnYXRpdmUpIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9zaWduOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JvdW5kX2Rvd24ocHJlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAtc2VsZi5fcm91bmRfZG93bihwcmVjKQorCisgICAgZGVmIF9yb3VuZF8wNXVwKHNlbGYsIHByZWMpOgorICAgICAgICAiIiJSb3VuZCBkb3duIHVubGVzcyBkaWdpdCBwcmVjLTEgaXMgMCBvciA1LiIiIgorICAgICAgICBpZiBwcmVjIGFuZCBzZWxmLl9pbnRbcHJlYy0xXSBub3QgaW4gJzA1JzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yb3VuZF9kb3duKHByZWMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gLXNlbGYuX3JvdW5kX2Rvd24ocHJlYykKKworICAgIF9waWNrX3JvdW5kaW5nX2Z1bmN0aW9uID0gZGljdCgKKyAgICAgICAgUk9VTkRfRE9XTiA9IF9yb3VuZF9kb3duLAorICAgICAgICBST1VORF9VUCA9IF9yb3VuZF91cCwKKyAgICAgICAgUk9VTkRfSEFMRl9VUCA9IF9yb3VuZF9oYWxmX3VwLAorICAgICAgICBST1VORF9IQUxGX0RPV04gPSBfcm91bmRfaGFsZl9kb3duLAorICAgICAgICBST1VORF9IQUxGX0VWRU4gPSBfcm91bmRfaGFsZl9ldmVuLAorICAgICAgICBST1VORF9DRUlMSU5HID0gX3JvdW5kX2NlaWxpbmcsCisgICAgICAgIFJPVU5EX0ZMT09SID0gX3JvdW5kX2Zsb29yLAorICAgICAgICBST1VORF8wNVVQID0gX3JvdW5kXzA1dXAsCisgICAgKQorCisgICAgZGVmIF9fcm91bmRfXyhzZWxmLCBuPU5vbmUpOgorICAgICAgICAiIiJSb3VuZCBzZWxmIHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIG9yIHRvIGEgZ2l2ZW4gcHJlY2lzaW9uLgorCisgICAgICAgIElmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHN1cHBsaWVkLCByb3VuZCBhIGZpbml0ZSBEZWNpbWFsCisgICAgICAgIGluc3RhbmNlIHNlbGYgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4gIElmIHNlbGYgaXMgaW5maW5pdGUgb3IKKyAgICAgICAgYSBOYU4gdGhlbiBhIFB5dGhvbiBleGNlcHRpb24gaXMgcmFpc2VkLiAgSWYgc2VsZiBpcyBmaW5pdGUKKyAgICAgICAgYW5kIGxpZXMgZXhhY3RseSBoYWxmd2F5IGJldHdlZW4gdHdvIGludGVnZXJzIHRoZW4gaXQgaXMKKyAgICAgICAgcm91bmRlZCB0byB0aGUgaW50ZWdlciB3aXRoIGV2ZW4gbGFzdCBkaWdpdC4KKworICAgICAgICA+Pj4gcm91bmQoRGVjaW1hbCgnMTIzLjQ1NicpKQorICAgICAgICAxMjMKKyAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJy00NTYuNzg5JykpCisgICAgICAgIC00NTcKKyAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJy0zLjAnKSkKKyAgICAgICAgLTMKKyAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJzIuNScpKQorICAgICAgICAyCisgICAgICAgID4+PiByb3VuZChEZWNpbWFsKCczLjUnKSkKKyAgICAgICAgNAorICAgICAgICA+Pj4gcm91bmQoRGVjaW1hbCgnSW5mJykpCisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgICAuLi4KKyAgICAgICAgT3ZlcmZsb3dFcnJvcjogY2Fubm90IHJvdW5kIGFuIGluZmluaXR5CisgICAgICAgID4+PiByb3VuZChEZWNpbWFsKCdOYU4nKSkKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAgIC4uLgorICAgICAgICBWYWx1ZUVycm9yOiBjYW5ub3Qgcm91bmQgYSBOYU4KKworICAgICAgICBJZiBhIHNlY29uZCBhcmd1bWVudCBuIGlzIHN1cHBsaWVkLCBzZWxmIGlzIHJvdW5kZWQgdG8gbgorICAgICAgICBkZWNpbWFsIHBsYWNlcyB1c2luZyB0aGUgcm91bmRpbmcgbW9kZSBmb3IgdGhlIGN1cnJlbnQKKyAgICAgICAgY29udGV4dC4KKworICAgICAgICBGb3IgYW4gaW50ZWdlciBuLCByb3VuZChzZWxmLCAtbikgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvCisgICAgICAgIHNlbGYucXVhbnRpemUoRGVjaW1hbCgnMUVuJykpLgorCisgICAgICAgID4+PiByb3VuZChEZWNpbWFsKCcxMjMuNDU2JyksIDApCisgICAgICAgIERlY2ltYWwoJzEyMycpCisgICAgICAgID4+PiByb3VuZChEZWNpbWFsKCcxMjMuNDU2JyksIDIpCisgICAgICAgIERlY2ltYWwoJzEyMy40NicpCisgICAgICAgID4+PiByb3VuZChEZWNpbWFsKCcxMjMuNDU2JyksIC0yKQorICAgICAgICBEZWNpbWFsKCcxRSsyJykKKyAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJy1JbmZpbml0eScpLCAzNykKKyAgICAgICAgRGVjaW1hbCgnTmFOJykKKyAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJ3NOYU4xMjMnKSwgMCkKKyAgICAgICAgRGVjaW1hbCgnTmFOMTIzJykKKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgdHdvLWFyZ3VtZW50IGZvcm06IHVzZSB0aGUgZXF1aXZhbGVudCBxdWFudGl6ZSBjYWxsCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuLCBpbnQpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignU2Vjb25kIGFyZ3VtZW50IHRvIHJvdW5kIHNob3VsZCBiZSBpbnRlZ3JhbCcpCisgICAgICAgICAgICBleHAgPSBfZGVjX2Zyb21fdHJpcGxlKDAsICcxJywgLW4pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5xdWFudGl6ZShleHApCisKKyAgICAgICAgIyBvbmUtYXJndW1lbnQgZm9ybQorICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgaWYgc2VsZi5pc19uYW4oKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW5ub3Qgcm91bmQgYSBOYU4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJjYW5ub3Qgcm91bmQgYW4gaW5maW5pdHkiKQorICAgICAgICByZXR1cm4gaW50KHNlbGYuX3Jlc2NhbGUoMCwgUk9VTkRfSEFMRl9FVkVOKSkKKworICAgIGRlZiBfX2Zsb29yX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgZmxvb3Igb2Ygc2VsZiwgYXMgYW4gaW50ZWdlci4KKworICAgICAgICBGb3IgYSBmaW5pdGUgRGVjaW1hbCBpbnN0YW5jZSBzZWxmLCByZXR1cm4gdGhlIGdyZWF0ZXN0CisgICAgICAgIGludGVnZXIgbiBzdWNoIHRoYXQgbiA8PSBzZWxmLiAgSWYgc2VsZiBpcyBpbmZpbml0ZSBvciBhIE5hTgorICAgICAgICB0aGVuIGEgUHl0aG9uIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICBpZiBzZWxmLmlzX25hbigpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbm5vdCByb3VuZCBhIE5hTiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoImNhbm5vdCByb3VuZCBhbiBpbmZpbml0eSIpCisgICAgICAgIHJldHVybiBpbnQoc2VsZi5fcmVzY2FsZSgwLCBST1VORF9GTE9PUikpCisKKyAgICBkZWYgX19jZWlsX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgY2VpbGluZyBvZiBzZWxmLCBhcyBhbiBpbnRlZ2VyLgorCisgICAgICAgIEZvciBhIGZpbml0ZSBEZWNpbWFsIGluc3RhbmNlIHNlbGYsIHJldHVybiB0aGUgbGVhc3QgaW50ZWdlciBuCisgICAgICAgIHN1Y2ggdGhhdCBuID49IHNlbGYuICBJZiBzZWxmIGlzIGluZmluaXRlIG9yIGEgTmFOIHRoZW4gYQorICAgICAgICBQeXRob24gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGlmIHNlbGYuaXNfbmFuKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2Fubm90IHJvdW5kIGEgTmFOIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigiY2Fubm90IHJvdW5kIGFuIGluZmluaXR5IikKKyAgICAgICAgcmV0dXJuIGludChzZWxmLl9yZXNjYWxlKDAsIFJPVU5EX0NFSUxJTkcpKQorCisgICAgZGVmIGZtYShzZWxmLCBvdGhlciwgdGhpcmQsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIkZ1c2VkIG11bHRpcGx5LWFkZC4KKworICAgICAgICBSZXR1cm5zIHNlbGYqb3RoZXIrdGhpcmQgd2l0aCBubyByb3VuZGluZyBvZiB0aGUgaW50ZXJtZWRpYXRlCisgICAgICAgIHByb2R1Y3Qgc2VsZipvdGhlci4KKworICAgICAgICBzZWxmIGFuZCBvdGhlciBhcmUgbXVsdGlwbGllZCB0b2dldGhlciwgd2l0aCBubyByb3VuZGluZyBvZgorICAgICAgICB0aGUgcmVzdWx0LiAgVGhlIHRoaXJkIG9wZXJhbmQgaXMgdGhlbiBhZGRlZCB0byB0aGUgcmVzdWx0LAorICAgICAgICBhbmQgYSBzaW5nbGUgZmluYWwgcm91bmRpbmcgaXMgcGVyZm9ybWVkLgorICAgICAgICAiIiIKKworICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCisgICAgICAgIHRoaXJkID0gX2NvbnZlcnRfb3RoZXIodGhpcmQsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICAjIGNvbXB1dGUgcHJvZHVjdDsgcmFpc2UgSW52YWxpZE9wZXJhdGlvbiBpZiBlaXRoZXIgb3BlcmFuZCBpcworICAgICAgICAjIGEgc2lnbmFsaW5nIE5hTiBvciBpZiB0aGUgcHJvZHVjdCBpcyB6ZXJvIHRpbWVzIGluZmluaXR5LgorICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIG90aGVyLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2V4cCA9PSAnTic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICdzTmFOJywgc2VsZikKKyAgICAgICAgICAgIGlmIG90aGVyLl9leHAgPT0gJ04nOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnc05hTicsIG90aGVyKQorICAgICAgICAgICAgaWYgc2VsZi5fZXhwID09ICduJzoKKyAgICAgICAgICAgICAgICBwcm9kdWN0ID0gc2VsZgorICAgICAgICAgICAgZWxpZiBvdGhlci5fZXhwID09ICduJzoKKyAgICAgICAgICAgICAgICBwcm9kdWN0ID0gb3RoZXIKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fZXhwID09ICdGJzoKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3RoZXI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lORiAqIDAgaW4gZm1hJykKKyAgICAgICAgICAgICAgICBwcm9kdWN0ID0gX1NpZ25lZEluZmluaXR5W3NlbGYuX3NpZ24gXiBvdGhlci5fc2lnbl0KKyAgICAgICAgICAgIGVsaWYgb3RoZXIuX2V4cCA9PSAnRic6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgKiBJTkYgaW4gZm1hJykKKyAgICAgICAgICAgICAgICBwcm9kdWN0ID0gX1NpZ25lZEluZmluaXR5W3NlbGYuX3NpZ24gXiBvdGhlci5fc2lnbl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2R1Y3QgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24gXiBvdGhlci5fc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihpbnQoc2VsZi5faW50KSAqIGludChvdGhlci5faW50KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHAgKyBvdGhlci5fZXhwKQorCisgICAgICAgIHJldHVybiBwcm9kdWN0Ll9fYWRkX18odGhpcmQsIGNvbnRleHQpCisKKyAgICBkZWYgX3Bvd2VyX21vZHVsbyhzZWxmLCBvdGhlciwgbW9kdWxvLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJUaHJlZSBhcmd1bWVudCB2ZXJzaW9uIG9mIF9fcG93X18iIiIKKworICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBvdGhlcgorICAgICAgICBtb2R1bG8gPSBfY29udmVydF9vdGhlcihtb2R1bG8pCisgICAgICAgIGlmIG1vZHVsbyBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBtb2R1bG8KKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgIyBkZWFsIHdpdGggTmFOczogaWYgdGhlcmUgYXJlIGFueSBzTmFOcyB0aGVuIGZpcnN0IG9uZSB3aW5zLAorICAgICAgICAjIChpLmUuIGJlaGF2aW91ciBmb3IgTmFOcyBpcyBpZGVudGljYWwgdG8gdGhhdCBvZiBmbWEpCisgICAgICAgIHNlbGZfaXNfbmFuID0gc2VsZi5faXNuYW4oKQorICAgICAgICBvdGhlcl9pc19uYW4gPSBvdGhlci5faXNuYW4oKQorICAgICAgICBtb2R1bG9faXNfbmFuID0gbW9kdWxvLl9pc25hbigpCisgICAgICAgIGlmIHNlbGZfaXNfbmFuIG9yIG90aGVyX2lzX25hbiBvciBtb2R1bG9faXNfbmFuOgorICAgICAgICAgICAgaWYgc2VsZl9pc19uYW4gPT0gMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ3NOYU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpCisgICAgICAgICAgICBpZiBvdGhlcl9pc19uYW4gPT0gMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ3NOYU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyKQorICAgICAgICAgICAgaWYgbW9kdWxvX2lzX25hbiA9PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnc05hTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxvKQorICAgICAgICAgICAgaWYgc2VsZl9pc19uYW46CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeF9uYW4oY29udGV4dCkKKyAgICAgICAgICAgIGlmIG90aGVyX2lzX25hbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIuX2ZpeF9uYW4oY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybiBtb2R1bG8uX2ZpeF9uYW4oY29udGV4dCkKKworICAgICAgICAjIGNoZWNrIGlucHV0czogd2UgYXBwbHkgc2FtZSByZXN0cmljdGlvbnMgYXMgUHl0aG9uJ3MgcG93KCkKKyAgICAgICAgaWYgbm90IChzZWxmLl9pc2ludGVnZXIoKSBhbmQKKyAgICAgICAgICAgICAgICBvdGhlci5faXNpbnRlZ2VyKCkgYW5kCisgICAgICAgICAgICAgICAgbW9kdWxvLl9pc2ludGVnZXIoKSk6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG93KCkgM3JkIGFyZ3VtZW50IG5vdCBhbGxvd2VkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5sZXNzIGFsbCBhcmd1bWVudHMgYXJlIGludGVnZXJzJykKKyAgICAgICAgaWYgb3RoZXIgPCAwOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvdygpIDJuZCBhcmd1bWVudCBjYW5ub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZWdhdGl2ZSB3aGVuIDNyZCBhcmd1bWVudCBzcGVjaWZpZWQnKQorICAgICAgICBpZiBub3QgbW9kdWxvOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvdygpIDNyZCBhcmd1bWVudCBjYW5ub3QgYmUgMCcpCisKKyAgICAgICAgIyBhZGRpdGlvbmFsIHJlc3RyaWN0aW9uIGZvciBkZWNpbWFsOiB0aGUgbW9kdWx1cyBtdXN0IGJlIGxlc3MKKyAgICAgICAgIyB0aGFuIDEwKipwcmVjIGluIGFic29sdXRlIHZhbHVlCisgICAgICAgIGlmIG1vZHVsby5hZGp1c3RlZCgpID49IGNvbnRleHQucHJlYzoKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnN1ZmZpY2llbnQgcHJlY2lzaW9uOiBwb3coKSAzcmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmd1bWVudCBtdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZWNpc2lvbiBkaWdpdHMnKQorCisgICAgICAgICMgZGVmaW5lIDAqKjAgPT0gTmFOLCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0d28tYXJndW1lbnQgcG93CisgICAgICAgICMgKGV2ZW4gdGhvdWdoIGl0IGh1cnRzISkKKyAgICAgICAgaWYgbm90IG90aGVyIGFuZCBub3Qgc2VsZjoKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdCBsZWFzdCBvbmUgb2YgcG93KCkgMXN0IGFyZ3VtZW50ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIDJuZCBhcmd1bWVudCBtdXN0IGJlIG5vbnplcm8gOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCoqMCBpcyBub3QgZGVmaW5lZCcpCisKKyAgICAgICAgIyBjb21wdXRlIHNpZ24gb2YgcmVzdWx0CisgICAgICAgIGlmIG90aGVyLl9pc2V2ZW4oKToKKyAgICAgICAgICAgIHNpZ24gPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaWduID0gc2VsZi5fc2lnbgorCisgICAgICAgICMgY29udmVydCBtb2R1bG8gdG8gYSBQeXRob24gaW50ZWdlciwgYW5kIHNlbGYgYW5kIG90aGVyIHRvCisgICAgICAgICMgRGVjaW1hbCBpbnRlZ2VycyAoaS5lLiBmb3JjZSB0aGVpciBleHBvbmVudHMgdG8gYmUgPj0gMCkKKyAgICAgICAgbW9kdWxvID0gYWJzKGludChtb2R1bG8pKQorICAgICAgICBiYXNlID0gX1dvcmtSZXAoc2VsZi50b19pbnRlZ3JhbF92YWx1ZSgpKQorICAgICAgICBleHBvbmVudCA9IF9Xb3JrUmVwKG90aGVyLnRvX2ludGVncmFsX3ZhbHVlKCkpCisKKyAgICAgICAgIyBjb21wdXRlIHJlc3VsdCB1c2luZyBpbnRlZ2VyIHBvdygpCisgICAgICAgIGJhc2UgPSAoYmFzZS5pbnQgJSBtb2R1bG8gKiBwb3coMTAsIGJhc2UuZXhwLCBtb2R1bG8pKSAlIG1vZHVsbworICAgICAgICBmb3IgaSBpbiByYW5nZShleHBvbmVudC5leHApOgorICAgICAgICAgICAgYmFzZSA9IHBvdyhiYXNlLCAxMCwgbW9kdWxvKQorICAgICAgICBiYXNlID0gcG93KGJhc2UsIGV4cG9uZW50LmludCwgbW9kdWxvKQorCisgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNpZ24sIHN0cihiYXNlKSwgMCkKKworICAgIGRlZiBfcG93ZXJfZXhhY3Qoc2VsZiwgb3RoZXIsIHApOgorICAgICAgICAiIiJBdHRlbXB0IHRvIGNvbXB1dGUgc2VsZioqb3RoZXIgZXhhY3RseS4KKworICAgICAgICBHaXZlbiBEZWNpbWFscyBzZWxmIGFuZCBvdGhlciBhbmQgYW4gaW50ZWdlciBwLCBhdHRlbXB0IHRvCisgICAgICAgIGNvbXB1dGUgYW4gZXhhY3QgcmVzdWx0IGZvciB0aGUgcG93ZXIgc2VsZioqb3RoZXIsIHdpdGggcAorICAgICAgICBkaWdpdHMgb2YgcHJlY2lzaW9uLiAgUmV0dXJuIE5vbmUgaWYgc2VsZioqb3RoZXIgaXMgbm90CisgICAgICAgIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBwIGRpZ2l0cy4KKworICAgICAgICBBc3N1bWVzIHRoYXQgZWxpbWluYXRpb24gb2Ygc3BlY2lhbCBjYXNlcyBoYXMgYWxyZWFkeSBiZWVuCisgICAgICAgIHBlcmZvcm1lZDogc2VsZiBhbmQgb3RoZXIgbXVzdCBib3RoIGJlIG5vbnNwZWNpYWw7IHNlbGYgbXVzdAorICAgICAgICBiZSBwb3NpdGl2ZSBhbmQgbm90IG51bWVyaWNhbGx5IGVxdWFsIHRvIDE7IG90aGVyIG11c3QgYmUKKyAgICAgICAgbm9uemVyby4gIEZvciBlZmZpY2llbmN5LCBvdGhlci5fZXhwIHNob3VsZCBub3QgYmUgdG9vIGxhcmdlLAorICAgICAgICBzbyB0aGF0IDEwKiphYnMob3RoZXIuX2V4cCkgaXMgYSBmZWFzaWJsZSBjYWxjdWxhdGlvbi4iIiIKKworICAgICAgICAjIEluIHRoZSBjb21tZW50cyBiZWxvdywgd2Ugd3JpdGUgeCBmb3IgdGhlIHZhbHVlIG9mIHNlbGYgYW5kIHkgZm9yIHRoZQorICAgICAgICAjIHZhbHVlIG9mIG90aGVyLiAgV3JpdGUgeCA9IHhjKjEwKip4ZSBhbmQgYWJzKHkpID0geWMqMTAqKnllLCB3aXRoIHhjCisgICAgICAgICMgYW5kIHljIHBvc2l0aXZlIGludGVnZXJzIG5vdCBkaXZpc2libGUgYnkgMTAuCisKKyAgICAgICAgIyBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGlkZW50aWZ5IHRoZSAqZmFpbHVyZSoKKyAgICAgICAgIyBvZiB4Kip5IHRvIGJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZSB3aXRoIGFzIGxpdHRsZSBlZmZvcnQgYXMKKyAgICAgICAgIyBwb3NzaWJsZS4gIFNvIHdlIGxvb2sgZm9yIGNoZWFwIGFuZCBlYXN5IHRlc3RzIHRoYXQKKyAgICAgICAgIyBlbGltaW5hdGUgdGhlIHBvc3NpYmlsaXR5IG9mIHgqKnkgYmVpbmcgZXhhY3QuICBPbmx5IGlmIGFsbAorICAgICAgICAjIHRoZXNlIHRlc3RzIGFyZSBwYXNzZWQgZG8gd2UgZ28gb24gdG8gYWN0dWFsbHkgY29tcHV0ZSB4Kip5LgorCisgICAgICAgICMgSGVyZSdzIHRoZSBtYWluIGlkZWEuICBFeHByZXNzIHkgYXMgYSByYXRpb25hbCBudW1iZXIgbS9uLCB3aXRoIG0gYW5kCisgICAgICAgICMgbiByZWxhdGl2ZWx5IHByaW1lIGFuZCBuPjAuICBUaGVuIGZvciB4Kip5IHRvIGJlIGV4YWN0bHkKKyAgICAgICAgIyByZXByZXNlbnRhYmxlIChhdCAqYW55KiBwcmVjaXNpb24pLCB4YyBtdXN0IGJlIHRoZSBudGggcG93ZXIgb2YgYQorICAgICAgICAjIHBvc2l0aXZlIGludGVnZXIgYW5kIHhlIG11c3QgYmUgZGl2aXNpYmxlIGJ5IG4uICBJZiB5IGlzIG5lZ2F0aXZlCisgICAgICAgICMgdGhlbiBhZGRpdGlvbmFsbHkgeGMgbXVzdCBiZSBhIHBvd2VyIG9mIGVpdGhlciAyIG9yIDUsIGhlbmNlIGEgcG93ZXIKKyAgICAgICAgIyBvZiAyKipuIG9yIDUqKm4uCisgICAgICAgICMKKyAgICAgICAgIyBUaGVyZSdzIGEgbGltaXQgdG8gaG93IHNtYWxsIHx5fCBjYW4gYmU6IGlmIHk9bS9uIGFzIGFib3ZlCisgICAgICAgICMgdGhlbjoKKyAgICAgICAgIworICAgICAgICAjICAoMSkgaWYgeGMgIT0gMSB0aGVuIGZvciB0aGUgcmVzdWx0IHRvIGJlIHJlcHJlc2VudGFibGUgd2UKKyAgICAgICAgIyAgICAgIG5lZWQgeGMqKigxL24pID49IDIsIGFuZCBoZW5jZSBhbHNvIHhjKip8eXwgPj0gMi4gIFNvCisgICAgICAgICMgICAgICBpZiB8eXwgPD0gMS9uYml0cyh4YykgdGhlbiB4YyA8IDIqKm5iaXRzKHhjKSA8PQorICAgICAgICAjICAgICAgMioqKDEvfHl8KSwgaGVuY2UgeGMqKnx5fCA8IDIgYW5kIHRoZSByZXN1bHQgaXMgbm90CisgICAgICAgICMgICAgICByZXByZXNlbnRhYmxlLgorICAgICAgICAjCisgICAgICAgICMgICgyKSBpZiB4ZSAhPSAwLCB8eGV8KigxL24pID49IDEsIHNvIHx4ZXwqfHl8ID49IDEuICBIZW5jZSBpZgorICAgICAgICAjICAgICAgfHl8IDwgMS98eGV8IHRoZW4gdGhlIHJlc3VsdCBpcyBub3QgcmVwcmVzZW50YWJsZS4KKyAgICAgICAgIworICAgICAgICAjIE5vdGUgdGhhdCBzaW5jZSB4IGlzIG5vdCBlcXVhbCB0byAxLCBhdCBsZWFzdCBvbmUgb2YgKDEpIGFuZAorICAgICAgICAjICgyKSBtdXN0IGFwcGx5LiAgTm93IHx5fCA8IDEvbmJpdHMoeGMpIGlmZiB8eWN8Km5iaXRzKHhjKSA8CisgICAgICAgICMgMTAqKi15ZSBpZmYgbGVuKHN0cih8eWN8Km5iaXRzKHhjKSkgPD0gLXllLgorICAgICAgICAjCisgICAgICAgICMgVGhlcmUncyBhbHNvIGEgbGltaXQgdG8gaG93IGxhcmdlIHkgY2FuIGJlLCBhdCBsZWFzdCBpZiBpdCdzCisgICAgICAgICMgcG9zaXRpdmU6IHRoZSBub3JtYWxpemVkIHJlc3VsdCB3aWxsIGhhdmUgY29lZmZpY2llbnQgeGMqKnksCisgICAgICAgICMgc28gaWYgaXQncyByZXByZXNlbnRhYmxlIHRoZW4geGMqKnkgPCAxMCoqcCwgYW5kIHkgPAorICAgICAgICAjIHAvbG9nMTAoeGMpLiAgSGVuY2UgaWYgeSpsb2cxMCh4YykgPj0gcCB0aGVuIHRoZSByZXN1bHQgaXMKKyAgICAgICAgIyBub3QgZXhhY3RseSByZXByZXNlbnRhYmxlLgorCisgICAgICAgICMgaWYgbGVuKHN0cihhYnMoeWMqeGUpKSA8PSAteWUgdGhlbiBhYnMoeWMqeGUpIDwgMTAqKi15ZSwKKyAgICAgICAgIyBzbyB8eXwgPCAxL3hlIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCByZXByZXNlbnRhYmxlLgorICAgICAgICAjIFNpbWlsYXJseSwgbGVuKHN0cihhYnMoeWMpKnhjX2JpdHMpKSA8PSAteWUgaW1wbGllcyB8eXwKKyAgICAgICAgIyA8IDEvbmJpdHMoeGMpLgorCisgICAgICAgIHggPSBfV29ya1JlcChzZWxmKQorICAgICAgICB4YywgeGUgPSB4LmludCwgeC5leHAKKyAgICAgICAgd2hpbGUgeGMgJSAxMCA9PSAwOgorICAgICAgICAgICAgeGMgLy89IDEwCisgICAgICAgICAgICB4ZSArPSAxCisKKyAgICAgICAgeSA9IF9Xb3JrUmVwKG90aGVyKQorICAgICAgICB5YywgeWUgPSB5LmludCwgeS5leHAKKyAgICAgICAgd2hpbGUgeWMgJSAxMCA9PSAwOgorICAgICAgICAgICAgeWMgLy89IDEwCisgICAgICAgICAgICB5ZSArPSAxCisKKyAgICAgICAgIyBjYXNlIHdoZXJlIHhjID09IDE6IHJlc3VsdCBpcyAxMCoqKHhlKnkpLCB3aXRoIHhlKnkKKyAgICAgICAgIyByZXF1aXJlZCB0byBiZSBhbiBpbnRlZ2VyCisgICAgICAgIGlmIHhjID09IDE6CisgICAgICAgICAgICB4ZSAqPSB5YworICAgICAgICAgICAgIyByZXN1bHQgaXMgbm93IDEwKiooeGUgKiAxMCoqeWUpOyAgeGUgKiAxMCoqeWUgbXVzdCBiZSBpbnRlZ3JhbAorICAgICAgICAgICAgd2hpbGUgeGUgJSAxMCA9PSAwOgorICAgICAgICAgICAgICAgIHhlIC8vPSAxMAorICAgICAgICAgICAgICAgIHllICs9IDEKKyAgICAgICAgICAgIGlmIHllIDwgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZXhwb25lbnQgPSB4ZSAqIDEwKip5ZQorICAgICAgICAgICAgaWYgeS5zaWduID09IDE6CisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSAtZXhwb25lbnQKKyAgICAgICAgICAgICMgaWYgb3RoZXIgaXMgYSBub25uZWdhdGl2ZSBpbnRlZ2VyLCB1c2UgaWRlYWwgZXhwb25lbnQKKyAgICAgICAgICAgIGlmIG90aGVyLl9pc2ludGVnZXIoKSBhbmQgb3RoZXIuX3NpZ24gPT0gMDoKKyAgICAgICAgICAgICAgICBpZGVhbF9leHBvbmVudCA9IHNlbGYuX2V4cCppbnQob3RoZXIpCisgICAgICAgICAgICAgICAgemVyb3MgPSBtaW4oZXhwb25lbnQtaWRlYWxfZXhwb25lbnQsIHAtMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgemVyb3MgPSAwCisgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZSgwLCAnMScgKyAnMCcqemVyb3MsIGV4cG9uZW50LXplcm9zKQorCisgICAgICAgICMgY2FzZSB3aGVyZSB5IGlzIG5lZ2F0aXZlOiB4YyBtdXN0IGJlIGVpdGhlciBhIHBvd2VyCisgICAgICAgICMgb2YgMiBvciBhIHBvd2VyIG9mIDUuCisgICAgICAgIGlmIHkuc2lnbiA9PSAxOgorICAgICAgICAgICAgbGFzdF9kaWdpdCA9IHhjICUgMTAKKyAgICAgICAgICAgIGlmIGxhc3RfZGlnaXQgaW4gKDIsNCw2LDgpOgorICAgICAgICAgICAgICAgICMgcXVpY2sgdGVzdCBmb3IgcG93ZXIgb2YgMgorICAgICAgICAgICAgICAgIGlmIHhjICYgLXhjICE9IHhjOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgICMgbm93IHhjIGlzIGEgcG93ZXIgb2YgMjsgZSBpcyBpdHMgZXhwb25lbnQKKyAgICAgICAgICAgICAgICBlID0gX25iaXRzKHhjKS0xCisKKyAgICAgICAgICAgICAgICAjIFdlIG5vdyBoYXZlOgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjICAgeCA9IDIqKmUgKiAxMCoqeGUsIGUgPiAwLCBhbmQgeSA8IDAuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhlIGV4YWN0IHJlc3VsdCBpczoKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyAgIHgqKnkgPSA1KiooLWUqeSkgKiAxMCoqKGUqeSArIHhlKnkpCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgcHJvdmlkZWQgdGhhdCBib3RoIGUqeSBhbmQgeGUqeSBhcmUgaW50ZWdlcnMuICBOb3RlIHRoYXQgaWYKKyAgICAgICAgICAgICAgICAjIDUqKigtZSp5KSA+PSAxMCoqcCwgdGhlbiB0aGUgcmVzdWx0IGNhbid0IGJlIGV4cHJlc3NlZAorICAgICAgICAgICAgICAgICMgZXhhY3RseSB3aXRoIHAgZGlnaXRzIG9mIHByZWNpc2lvbi4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBVc2luZyB0aGUgYWJvdmUsIHdlIGNhbiBndWFyZCBhZ2FpbnN0IGxhcmdlIHZhbHVlcyBvZiB5ZS4KKyAgICAgICAgICAgICAgICAjIDkzLzY1IGlzIGFuIHVwcGVyIGJvdW5kIGZvciBsb2coMTApL2xvZyg1KSwgc28gaWYKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyAgIHllID49IGxlbihzdHIoOTMqcC8vNjUpKQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIHRoZW4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyAgIC1lKnkgPj0gLXkgPj0gMTAqKnllID4gOTMqcC82NSA+IHAqbG9nKDEwKS9sb2coNSksCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgc28gNSoqKC1lKnkpID49IDEwKipwLCBhbmQgdGhlIGNvZWZmaWNpZW50IG9mIHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAjIGNhbid0IGJlIGV4cHJlc3NlZCBpbiBwIGRpZ2l0cy4KKworICAgICAgICAgICAgICAgICMgZW1heCA+PSBsYXJnZXN0IGUgc3VjaCB0aGF0IDUqKmUgPCAxMCoqcC4KKyAgICAgICAgICAgICAgICBlbWF4ID0gcCo5My8vNjUKKyAgICAgICAgICAgICAgICBpZiB5ZSA+PSBsZW4oc3RyKGVtYXgpKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgICMgRmluZCAtZSp5IGFuZCAteGUqeTsgYm90aCBtdXN0IGJlIGludGVnZXJzCisgICAgICAgICAgICAgICAgZSA9IF9kZWNpbWFsX2xzaGlmdF9leGFjdChlICogeWMsIHllKQorICAgICAgICAgICAgICAgIHhlID0gX2RlY2ltYWxfbHNoaWZ0X2V4YWN0KHhlICogeWMsIHllKQorICAgICAgICAgICAgICAgIGlmIGUgaXMgTm9uZSBvciB4ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICAgICAgaWYgZSA+IGVtYXg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgeGMgPSA1KiplCisKKyAgICAgICAgICAgIGVsaWYgbGFzdF9kaWdpdCA9PSA1OgorICAgICAgICAgICAgICAgICMgZSA+PSBsb2dfNSh4YykgaWYgeGMgaXMgYSBwb3dlciBvZiA1OyB3ZSBoYXZlCisgICAgICAgICAgICAgICAgIyBlcXVhbGl0eSBhbGwgdGhlIHdheSB1cCB0byB4Yz01KioyNjU4CisgICAgICAgICAgICAgICAgZSA9IF9uYml0cyh4YykqMjgvLzY1CisgICAgICAgICAgICAgICAgeGMsIHJlbWFpbmRlciA9IGRpdm1vZCg1KiplLCB4YykKKyAgICAgICAgICAgICAgICBpZiByZW1haW5kZXI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgd2hpbGUgeGMgJSA1ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHhjIC8vPSA1CisgICAgICAgICAgICAgICAgICAgIGUgLT0gMQorCisgICAgICAgICAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGxhcmdlIHZhbHVlcyBvZiB5ZSwgdXNpbmcgdGhlIHNhbWUgbG9naWMgYXMgaW4KKyAgICAgICAgICAgICAgICAjIHRoZSAneGMgaXMgYSBwb3dlciBvZiAyJyBicmFuY2guICAxMC8zIGlzIGFuIHVwcGVyIGJvdW5kIGZvcgorICAgICAgICAgICAgICAgICMgbG9nKDEwKS9sb2coMikuCisgICAgICAgICAgICAgICAgZW1heCA9IHAqMTAvLzMKKyAgICAgICAgICAgICAgICBpZiB5ZSA+PSBsZW4oc3RyKGVtYXgpKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgIGUgPSBfZGVjaW1hbF9sc2hpZnRfZXhhY3QoZSAqIHljLCB5ZSkKKyAgICAgICAgICAgICAgICB4ZSA9IF9kZWNpbWFsX2xzaGlmdF9leGFjdCh4ZSAqIHljLCB5ZSkKKyAgICAgICAgICAgICAgICBpZiBlIGlzIE5vbmUgb3IgeGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgIGlmIGUgPiBlbWF4OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgIHhjID0gMioqZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBpZiB4YyA+PSAxMCoqcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgeGUgPSAtZS14ZQorICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoMCwgc3RyKHhjKSwgeGUpCisKKyAgICAgICAgIyBub3cgeSBpcyBwb3NpdGl2ZTsgZmluZCBtIGFuZCBuIHN1Y2ggdGhhdCB5ID0gbS9uCisgICAgICAgIGlmIHllID49IDA6CisgICAgICAgICAgICBtLCBuID0geWMqMTAqKnllLCAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB4ZSAhPSAwIGFuZCBsZW4oc3RyKGFicyh5Yyp4ZSkpKSA8PSAteWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHhjX2JpdHMgPSBfbmJpdHMoeGMpCisgICAgICAgICAgICBpZiB4YyAhPSAxIGFuZCBsZW4oc3RyKGFicyh5YykqeGNfYml0cykpIDw9IC15ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgbSwgbiA9IHljLCAxMCoqKC15ZSkKKyAgICAgICAgICAgIHdoaWxlIG0gJSAyID09IG4gJSAyID09IDA6CisgICAgICAgICAgICAgICAgbSAvLz0gMgorICAgICAgICAgICAgICAgIG4gLy89IDIKKyAgICAgICAgICAgIHdoaWxlIG0gJSA1ID09IG4gJSA1ID09IDA6CisgICAgICAgICAgICAgICAgbSAvLz0gNQorICAgICAgICAgICAgICAgIG4gLy89IDUKKworICAgICAgICAjIGNvbXB1dGUgbnRoIHJvb3Qgb2YgeGMqMTAqKnhlCisgICAgICAgIGlmIG4gPiAxOgorICAgICAgICAgICAgIyBpZiAxIDwgeGMgPCAyKipuIHRoZW4geGMgaXNuJ3QgYW4gbnRoIHBvd2VyCisgICAgICAgICAgICBpZiB4YyAhPSAxIGFuZCB4Y19iaXRzIDw9IG46CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgeGUsIHJlbSA9IGRpdm1vZCh4ZSwgbikKKyAgICAgICAgICAgIGlmIHJlbSAhPSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgY29tcHV0ZSBudGggcm9vdCBvZiB4YyB1c2luZyBOZXd0b24ncyBtZXRob2QKKyAgICAgICAgICAgIGEgPSAxIDw8IC0oLV9uYml0cyh4YykvL24pICMgaW5pdGlhbCBlc3RpbWF0ZQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBxLCByID0gZGl2bW9kKHhjLCBhKioobi0xKSkKKyAgICAgICAgICAgICAgICBpZiBhIDw9IHE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYSA9IChhKihuLTEpICsgcSkvL24KKyAgICAgICAgICAgIGlmIG5vdCAoYSA9PSBxIGFuZCByID09IDApOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICB4YyA9IGEKKworICAgICAgICAjIG5vdyB4YyoxMCoqeGUgaXMgdGhlIG50aCByb290IG9mIHRoZSBvcmlnaW5hbCB4YyoxMCoqeGUKKyAgICAgICAgIyBjb21wdXRlIG10aCBwb3dlciBvZiB4YyoxMCoqeGUKKworICAgICAgICAjIGlmIG0gPiBwKjEwMC8vX2xvZzEwX2xiKHhjKSB0aGVuIG0gPiBwL2xvZzEwKHhjKSwgaGVuY2UgeGMqKm0gPgorICAgICAgICAjIDEwKipwIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCByZXByZXNlbnRhYmxlLgorICAgICAgICBpZiB4YyA+IDEgYW5kIG0gPiBwKjEwMC8vX2xvZzEwX2xiKHhjKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHhjID0geGMqKm0KKyAgICAgICAgeGUgKj0gbQorICAgICAgICBpZiB4YyA+IDEwKipwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIGJ5IHRoaXMgcG9pbnQgdGhlIHJlc3VsdCAqaXMqIGV4YWN0bHkgcmVwcmVzZW50YWJsZQorICAgICAgICAjIGFkanVzdCB0aGUgZXhwb25lbnQgdG8gZ2V0IGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBpZGVhbAorICAgICAgICAjIGV4cG9uZW50LCBpZiBuZWNlc3NhcnkKKyAgICAgICAgc3RyX3hjID0gc3RyKHhjKQorICAgICAgICBpZiBvdGhlci5faXNpbnRlZ2VyKCkgYW5kIG90aGVyLl9zaWduID09IDA6CisgICAgICAgICAgICBpZGVhbF9leHBvbmVudCA9IHNlbGYuX2V4cCppbnQob3RoZXIpCisgICAgICAgICAgICB6ZXJvcyA9IG1pbih4ZS1pZGVhbF9leHBvbmVudCwgcC1sZW4oc3RyX3hjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHplcm9zID0gMAorICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZSgwLCBzdHJfeGMrJzAnKnplcm9zLCB4ZS16ZXJvcykKKworICAgIGRlZiBfX3Bvd19fKHNlbGYsIG90aGVyLCBtb2R1bG89Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIHNlbGYgKiogb3RoZXIgWyAlIG1vZHVsb10uCisKKyAgICAgICAgV2l0aCB0d28gYXJndW1lbnRzLCBjb21wdXRlIHNlbGYqKm90aGVyLgorCisgICAgICAgIFdpdGggdGhyZWUgYXJndW1lbnRzLCBjb21wdXRlIChzZWxmKipvdGhlcikgJSBtb2R1bG8uICBGb3IgdGhlCisgICAgICAgIHRocmVlIGFyZ3VtZW50IGZvcm0sIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIG9uIHRoZQorICAgICAgICBhcmd1bWVudHMgaG9sZDoKKworICAgICAgICAgLSBhbGwgdGhyZWUgYXJndW1lbnRzIG11c3QgYmUgaW50ZWdyYWwKKyAgICAgICAgIC0gb3RoZXIgbXVzdCBiZSBub25uZWdhdGl2ZQorICAgICAgICAgLSBlaXRoZXIgc2VsZiBvciBvdGhlciAob3IgYm90aCkgbXVzdCBiZSBub256ZXJvCisgICAgICAgICAtIG1vZHVsbyBtdXN0IGJlIG5vbnplcm8gYW5kIG11c3QgaGF2ZSBhdCBtb3N0IHAgZGlnaXRzLAorICAgICAgICAgICB3aGVyZSBwIGlzIHRoZSBjb250ZXh0IHByZWNpc2lvbi4KKworICAgICAgICBJZiBhbnkgb2YgdGhlc2UgcmVzdHJpY3Rpb25zIGlzIHZpb2xhdGVkIHRoZSBJbnZhbGlkT3BlcmF0aW9uCisgICAgICAgIGZsYWcgaXMgcmFpc2VkLgorCisgICAgICAgIFRoZSByZXN1bHQgb2YgcG93KHNlbGYsIG90aGVyLCBtb2R1bG8pIGlzIGlkZW50aWNhbCB0byB0aGUKKyAgICAgICAgcmVzdWx0IHRoYXQgd291bGQgYmUgb2J0YWluZWQgYnkgY29tcHV0aW5nIChzZWxmKipvdGhlcikgJQorICAgICAgICBtb2R1bG8gd2l0aCB1bmJvdW5kZWQgcHJlY2lzaW9uLCBidXQgaXMgY29tcHV0ZWQgbW9yZQorICAgICAgICBlZmZpY2llbnRseS4gIEl0IGlzIGFsd2F5cyBleGFjdC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbW9kdWxvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Bvd2VyX21vZHVsbyhvdGhlciwgbW9kdWxvLCBjb250ZXh0KQorCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmV0dXJuIG90aGVyCisKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgICMgZWl0aGVyIGFyZ3VtZW50IGlzIGEgTmFOID0+IHJlc3VsdCBpcyBOYU4KKyAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKKyAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgICMgMCoqMCA9IE5hTiAoISksIHgqKjAgPSAxIGZvciBub256ZXJvIHggKGluY2x1ZGluZyArLy1JbmZpbml0eSkKKyAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICcwICoqIDAnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gX09uZQorCisgICAgICAgICMgcmVzdWx0IGhhcyBzaWduIDEgaWZmIHNlbGYuX3NpZ24gaXMgMSBhbmQgb3RoZXIgaXMgYW4gb2RkIGludGVnZXIKKyAgICAgICAgcmVzdWx0X3NpZ24gPSAwCisgICAgICAgIGlmIHNlbGYuX3NpZ24gPT0gMToKKyAgICAgICAgICAgIGlmIG90aGVyLl9pc2ludGVnZXIoKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3RoZXIuX2lzZXZlbigpOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfc2lnbiA9IDEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyAtdmUqKm5vbmludGVnZXIgPSBOYU4KKyAgICAgICAgICAgICAgICAjICgtMCkqKm5vbmludGVnZXIgPSAwKipub25pbnRlZ2VyCisgICAgICAgICAgICAgICAgaWYgc2VsZjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAneCAqKiB5IHdpdGggeCBuZWdhdGl2ZSBhbmQgeSBub3QgYW4gaW50ZWdlcicpCisgICAgICAgICAgICAjIG5lZ2F0ZSBzZWxmLCB3aXRob3V0IGRvaW5nIGFueSB1bndhbnRlZCByb3VuZGluZworICAgICAgICAgICAgc2VsZiA9IHNlbGYuY29weV9uZWdhdGUoKQorCisgICAgICAgICMgMCoqKCt2ZSBvciBJbmYpPSAwOyAwKiooLXZlIG9yIC1JbmYpID0gSW5maW5pdHkKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICBpZiBvdGhlci5fc2lnbiA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHJlc3VsdF9zaWduLCAnMCcsIDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBfU2lnbmVkSW5maW5pdHlbcmVzdWx0X3NpZ25dCisKKyAgICAgICAgIyBJbmYqKigrdmUgb3IgSW5mKSA9IEluZjsgSW5mKiooLXZlIG9yIC1JbmYpID0gMAorICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICBpZiBvdGhlci5fc2lnbiA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBfU2lnbmVkSW5maW5pdHlbcmVzdWx0X3NpZ25dCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHJlc3VsdF9zaWduLCAnMCcsIDApCisKKyAgICAgICAgIyAxKipvdGhlciA9IDEsIGJ1dCB0aGUgY2hvaWNlIG9mIGV4cG9uZW50IGFuZCB0aGUgZmxhZ3MKKyAgICAgICAgIyBkZXBlbmQgb24gdGhlIGV4cG9uZW50IG9mIHNlbGYsIGFuZCBvbiB3aGV0aGVyIG90aGVyIGlzIGEKKyAgICAgICAgIyBwb3NpdGl2ZSBpbnRlZ2VyLCBhIG5lZ2F0aXZlIGludGVnZXIsIG9yIG5laXRoZXIKKyAgICAgICAgaWYgc2VsZiA9PSBfT25lOgorICAgICAgICAgICAgaWYgb3RoZXIuX2lzaW50ZWdlcigpOgorICAgICAgICAgICAgICAgICMgZXhwID0gbWF4KHNlbGYuX2V4cCptYXgoaW50KG90aGVyKSwgMCksCisgICAgICAgICAgICAgICAgIyAxLWNvbnRleHQucHJlYykgYnV0IGV2YWx1YXRpbmcgaW50KG90aGVyKSBkaXJlY3RseQorICAgICAgICAgICAgICAgICMgaXMgZGFuZ2Vyb3VzIHVudGlsIHdlIGtub3cgb3RoZXIgaXMgc21hbGwgKG90aGVyCisgICAgICAgICAgICAgICAgIyBjb3VsZCBiZSAxZTk5OTk5OTk5OSkKKyAgICAgICAgICAgICAgICBpZiBvdGhlci5fc2lnbiA9PSAxOgorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gMAorICAgICAgICAgICAgICAgIGVsaWYgb3RoZXIgPiBjb250ZXh0LnByZWM6CisgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSBjb250ZXh0LnByZWMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gaW50KG90aGVyKQorCisgICAgICAgICAgICAgICAgZXhwID0gc2VsZi5fZXhwICogbXVsdGlwbGllcgorICAgICAgICAgICAgICAgIGlmIGV4cCA8IDEtY29udGV4dC5wcmVjOgorICAgICAgICAgICAgICAgICAgICBleHAgPSAxLWNvbnRleHQucHJlYworICAgICAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihSb3VuZGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbmV4YWN0KQorICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFJvdW5kZWQpCisgICAgICAgICAgICAgICAgZXhwID0gMS1jb250ZXh0LnByZWMKKworICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUocmVzdWx0X3NpZ24sICcxJysnMCcqLWV4cCwgZXhwKQorCisgICAgICAgICMgY29tcHV0ZSBhZGp1c3RlZCBleHBvbmVudCBvZiBzZWxmCisgICAgICAgIHNlbGZfYWRqID0gc2VsZi5hZGp1c3RlZCgpCisKKyAgICAgICAgIyBzZWxmICoqIGluZmluaXR5IGlzIGluZmluaXR5IGlmIHNlbGYgPiAxLCAwIGlmIHNlbGYgPCAxCisgICAgICAgICMgc2VsZiAqKiAtaW5maW5pdHkgaXMgaW5maW5pdHkgaWYgc2VsZiA8IDEsIDAgaWYgc2VsZiA+IDEKKyAgICAgICAgaWYgb3RoZXIuX2lzaW5maW5pdHkoKToKKyAgICAgICAgICAgIGlmIChvdGhlci5fc2lnbiA9PSAwKSA9PSAoc2VsZl9hZGogPCAwKToKKyAgICAgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShyZXN1bHRfc2lnbiwgJzAnLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gX1NpZ25lZEluZmluaXR5W3Jlc3VsdF9zaWduXQorCisgICAgICAgICMgZnJvbSBoZXJlIG9uLCB0aGUgcmVzdWx0IGFsd2F5cyBnb2VzIHRocm91Z2ggdGhlIGNhbGwKKyAgICAgICAgIyB0byBfZml4IGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgYW5zID0gTm9uZQorICAgICAgICBleGFjdCA9IEZhbHNlCisKKyAgICAgICAgIyBjcnVkZSB0ZXN0IHRvIGNhdGNoIGNhc2VzIG9mIGV4dHJlbWUgb3ZlcmZsb3cvdW5kZXJmbG93LiAgSWYKKyAgICAgICAgIyBsb2cxMChzZWxmKSpvdGhlciA+PSAxMCoqYm91bmQgYW5kIGJvdW5kID49IGxlbihzdHIoRW1heCkpCisgICAgICAgICMgdGhlbiAxMCoqYm91bmQgPj0gMTAqKmxlbihzdHIoRW1heCkpID49IEVtYXgrMSBhbmQgaGVuY2UKKyAgICAgICAgIyBzZWxmKipvdGhlciA+PSAxMCoqKEVtYXgrMSksIHNvIG92ZXJmbG93IG9jY3Vycy4gIFRoZSB0ZXN0CisgICAgICAgICMgZm9yIHVuZGVyZmxvdyBpcyBzaW1pbGFyLgorICAgICAgICBib3VuZCA9IHNlbGYuX2xvZzEwX2V4cF9ib3VuZCgpICsgb3RoZXIuYWRqdXN0ZWQoKQorICAgICAgICBpZiAoc2VsZl9hZGogPj0gMCkgPT0gKG90aGVyLl9zaWduID09IDApOgorICAgICAgICAgICAgIyBzZWxmID4gMSBhbmQgb3RoZXIgK3ZlLCBvciBzZWxmIDwgMSBhbmQgb3RoZXIgLXZlCisgICAgICAgICAgICAjIHBvc3NpYmlsaXR5IG9mIG92ZXJmbG93CisgICAgICAgICAgICBpZiBib3VuZCA+PSBsZW4oc3RyKGNvbnRleHQuRW1heCkpOgorICAgICAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUocmVzdWx0X3NpZ24sICcxJywgY29udGV4dC5FbWF4KzEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHNlbGYgPiAxIGFuZCBvdGhlciAtdmUsIG9yIHNlbGYgPCAxIGFuZCBvdGhlciArdmUKKyAgICAgICAgICAgICMgcG9zc2liaWxpdHkgb2YgdW5kZXJmbG93IHRvIDAKKyAgICAgICAgICAgIEV0aW55ID0gY29udGV4dC5FdGlueSgpCisgICAgICAgICAgICBpZiBib3VuZCA+PSBsZW4oc3RyKC1FdGlueSkpOgorICAgICAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUocmVzdWx0X3NpZ24sICcxJywgRXRpbnktMSkKKworICAgICAgICAjIHRyeSBmb3IgYW4gZXhhY3QgcmVzdWx0IHdpdGggcHJlY2lzaW9uICsxCisgICAgICAgIGlmIGFucyBpcyBOb25lOgorICAgICAgICAgICAgYW5zID0gc2VsZi5fcG93ZXJfZXhhY3Qob3RoZXIsIGNvbnRleHQucHJlYyArIDEpCisgICAgICAgICAgICBpZiBhbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0X3NpZ24gPT0gMToKKyAgICAgICAgICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZSgxLCBhbnMuX2ludCwgYW5zLl9leHApCisgICAgICAgICAgICAgICAgZXhhY3QgPSBUcnVlCisKKyAgICAgICAgIyB1c3VhbCBjYXNlOiBpbmV4YWN0IHJlc3VsdCwgeCoqeSBjb21wdXRlZCBkaXJlY3RseSBhcyBleHAoeSpsb2coeCkpCisgICAgICAgIGlmIGFucyBpcyBOb25lOgorICAgICAgICAgICAgcCA9IGNvbnRleHQucHJlYworICAgICAgICAgICAgeCA9IF9Xb3JrUmVwKHNlbGYpCisgICAgICAgICAgICB4YywgeGUgPSB4LmludCwgeC5leHAKKyAgICAgICAgICAgIHkgPSBfV29ya1JlcChvdGhlcikKKyAgICAgICAgICAgIHljLCB5ZSA9IHkuaW50LCB5LmV4cAorICAgICAgICAgICAgaWYgeS5zaWduID09IDE6CisgICAgICAgICAgICAgICAgeWMgPSAteWMKKworICAgICAgICAgICAgIyBjb21wdXRlIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdDogIHN0YXJ0IHdpdGggcHJlY2lzaW9uICszLAorICAgICAgICAgICAgIyB0aGVuIGluY3JlYXNlIHByZWNpc2lvbiB1bnRpbCByZXN1bHQgaXMgdW5hbWJpZ3VvdXNseSByb3VuZGFibGUKKyAgICAgICAgICAgIGV4dHJhID0gMworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBjb2VmZiwgZXhwID0gX2Rwb3dlcih4YywgeGUsIHljLCB5ZSwgcCtleHRyYSkKKyAgICAgICAgICAgICAgICBpZiBjb2VmZiAlICg1KjEwKioobGVuKHN0cihjb2VmZikpLXAtMSkpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4dHJhICs9IDMKKworICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShyZXN1bHRfc2lnbiwgc3RyKGNvZWZmKSwgZXhwKQorCisgICAgICAgICMgdW5saWtlIGV4cCwgbG4gYW5kIGxvZzEwLCB0aGUgcG93ZXIgZnVuY3Rpb24gcmVzcGVjdHMgdGhlCisgICAgICAgICMgcm91bmRpbmcgbW9kZTsgbm8gbmVlZCB0byBzd2l0Y2ggdG8gUk9VTkRfSEFMRl9FVkVOIGhlcmUKKworICAgICAgICAjIFRoZXJlJ3MgYSBkaWZmaWN1bHR5IGhlcmUgd2hlbiAnb3RoZXInIGlzIG5vdCBhbiBpbnRlZ2VyIGFuZAorICAgICAgICAjIHRoZSByZXN1bHQgaXMgZXhhY3QuICBJbiB0aGlzIGNhc2UsIHRoZSBzcGVjaWZpY2F0aW9uCisgICAgICAgICMgcmVxdWlyZXMgdGhhdCB0aGUgSW5leGFjdCBmbGFnIGJlIHJhaXNlZCAoaW4gc3BpdGUgb2YKKyAgICAgICAgIyBleGFjdG5lc3MpLCBidXQgc2luY2UgdGhlIHJlc3VsdCBpcyBleGFjdCBfZml4IHdvbid0IGRvIHRoaXMKKyAgICAgICAgIyBmb3IgdXMuICAoQ29ycmVzcG9uZGluZ2x5LCB0aGUgVW5kZXJmbG93IHNpZ25hbCBzaG91bGQgYWxzbworICAgICAgICAjIGJlIHJhaXNlZCBmb3Igc3Vibm9ybWFsIHJlc3VsdHMuKSAgV2UgY2FuJ3QgZGlyZWN0bHkgcmFpc2UKKyAgICAgICAgIyB0aGVzZSBzaWduYWxzIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgY2FsbGluZyBfZml4LCBzaW5jZQorICAgICAgICAjIHRoYXQgd291bGQgdmlvbGF0ZSB0aGUgcHJlY2VkZW5jZSBmb3Igc2lnbmFscy4gIFNvIHdlIHdyYXAKKyAgICAgICAgIyB0aGUgLl9maXggY2FsbCBpbiBhIHRlbXBvcmFyeSBjb250ZXh0LCBhbmQgcmVyYWlzZQorICAgICAgICAjIGFmdGVyd2FyZHMuCisgICAgICAgIGlmIGV4YWN0IGFuZCBub3Qgb3RoZXIuX2lzaW50ZWdlcigpOgorICAgICAgICAgICAgIyBwYWQgd2l0aCB6ZXJvcyB1cCB0byBsZW5ndGggY29udGV4dC5wcmVjKzEgaWYgbmVjZXNzYXJ5OyB0aGlzCisgICAgICAgICAgICAjIGVuc3VyZXMgdGhhdCB0aGUgUm91bmRlZCBzaWduYWwgd2lsbCBiZSByYWlzZWQuCisgICAgICAgICAgICBpZiBsZW4oYW5zLl9pbnQpIDw9IGNvbnRleHQucHJlYzoKKyAgICAgICAgICAgICAgICBleHBkaWZmID0gY29udGV4dC5wcmVjICsgMSAtIGxlbihhbnMuX2ludCkKKyAgICAgICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKGFucy5fc2lnbiwgYW5zLl9pbnQrJzAnKmV4cGRpZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnMuX2V4cC1leHBkaWZmKQorCisgICAgICAgICAgICAjIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgY29udGV4dCwgd2l0aCBjbGVhcmVkIGZsYWdzL3RyYXBzCisgICAgICAgICAgICBuZXdjb250ZXh0ID0gY29udGV4dC5jb3B5KCkKKyAgICAgICAgICAgIG5ld2NvbnRleHQuY2xlYXJfZmxhZ3MoKQorICAgICAgICAgICAgZm9yIGV4Y2VwdGlvbiBpbiBfc2lnbmFsczoKKyAgICAgICAgICAgICAgICBuZXdjb250ZXh0LnRyYXBzW2V4Y2VwdGlvbl0gPSAwCisKKyAgICAgICAgICAgICMgcm91bmQgaW4gdGhlIG5ldyBjb250ZXh0CisgICAgICAgICAgICBhbnMgPSBhbnMuX2ZpeChuZXdjb250ZXh0KQorCisgICAgICAgICAgICAjIHJhaXNlIEluZXhhY3QsIGFuZCBpZiBuZWNlc3NhcnksIFVuZGVyZmxvdworICAgICAgICAgICAgbmV3Y29udGV4dC5fcmFpc2VfZXJyb3IoSW5leGFjdCkKKyAgICAgICAgICAgIGlmIG5ld2NvbnRleHQuZmxhZ3NbU3Vibm9ybWFsXToKKyAgICAgICAgICAgICAgICBuZXdjb250ZXh0Ll9yYWlzZV9lcnJvcihVbmRlcmZsb3cpCisKKyAgICAgICAgICAgICMgcHJvcGFnYXRlIHNpZ25hbHMgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQ7IF9maXggY291bGQKKyAgICAgICAgICAgICMgaGF2ZSByYWlzZWQgYW55IG9mIE92ZXJmbG93LCBVbmRlcmZsb3csIFN1Ym5vcm1hbCwKKyAgICAgICAgICAgICMgSW5leGFjdCwgUm91bmRlZCwgQ2xhbXBlZC4gIE92ZXJmbG93IG5lZWRzIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAjIGFyZ3VtZW50cy4gIE5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIGV4Y2VwdGlvbnMgaXMKKyAgICAgICAgICAgICMgaW1wb3J0YW50IGhlcmUuCisgICAgICAgICAgICBpZiBuZXdjb250ZXh0LmZsYWdzW092ZXJmbG93XToKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihPdmVyZmxvdywgJ2Fib3ZlIEVtYXgnLCBhbnMuX3NpZ24pCisgICAgICAgICAgICBmb3IgZXhjZXB0aW9uIGluIFVuZGVyZmxvdywgU3Vibm9ybWFsLCBJbmV4YWN0LCBSb3VuZGVkLCBDbGFtcGVkOgorICAgICAgICAgICAgICAgIGlmIG5ld2NvbnRleHQuZmxhZ3NbZXhjZXB0aW9uXToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoZXhjZXB0aW9uKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhbnMgPSBhbnMuX2ZpeChjb250ZXh0KQorCisgICAgICAgIHJldHVybiBhbnMKKworICAgIGRlZiBfX3Jwb3dfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiU3dhcHMgc2VsZi9vdGhlciBhbmQgcmV0dXJucyBfX3Bvd19fLiIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQorICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJldHVybiBvdGhlcgorICAgICAgICByZXR1cm4gb3RoZXIuX19wb3dfXyhzZWxmLCBjb250ZXh0PWNvbnRleHQpCisKKyAgICBkZWYgbm9ybWFsaXplKHNlbGYsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIk5vcm1hbGl6ZS0gc3RyaXAgdHJhaWxpbmcgMHMsIGNoYW5nZSBhbnl0aGluZyBlcXVhbCB0byAwIHRvIDBlMCIiIgorCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCisgICAgICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgIGR1cCA9IHNlbGYuX2ZpeChjb250ZXh0KQorICAgICAgICBpZiBkdXAuX2lzaW5maW5pdHkoKToKKyAgICAgICAgICAgIHJldHVybiBkdXAKKworICAgICAgICBpZiBub3QgZHVwOgorICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoZHVwLl9zaWduLCAnMCcsIDApCisgICAgICAgIGV4cF9tYXggPSBbY29udGV4dC5FbWF4LCBjb250ZXh0LkV0b3AoKV1bY29udGV4dC5jbGFtcF0KKyAgICAgICAgZW5kID0gbGVuKGR1cC5faW50KQorICAgICAgICBleHAgPSBkdXAuX2V4cAorICAgICAgICB3aGlsZSBkdXAuX2ludFtlbmQtMV0gPT0gJzAnIGFuZCBleHAgPCBleHBfbWF4OgorICAgICAgICAgICAgZXhwICs9IDEKKyAgICAgICAgICAgIGVuZCAtPSAxCisgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKGR1cC5fc2lnbiwgZHVwLl9pbnRbOmVuZF0sIGV4cCkKKworICAgIGRlZiBxdWFudGl6ZShzZWxmLCBleHAsIHJvdW5kaW5nPU5vbmUsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlF1YW50aXplIHNlbGYgc28gaXRzIGV4cG9uZW50IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgZXhwLgorCisgICAgICAgIFNpbWlsYXIgdG8gc2VsZi5fcmVzY2FsZShleHAuX2V4cCkgYnV0IHdpdGggZXJyb3IgY2hlY2tpbmcuCisgICAgICAgICIiIgorICAgICAgICBleHAgPSBfY29udmVydF9vdGhlcihleHAsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIGlmIHJvdW5kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICByb3VuZGluZyA9IGNvbnRleHQucm91bmRpbmcKKworICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIGV4cC5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMoZXhwLCBjb250ZXh0KQorICAgICAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICAgICAgaWYgZXhwLl9pc2luZmluaXR5KCkgb3Igc2VsZi5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgICAgIGlmIGV4cC5faXNpbmZpbml0eSgpIGFuZCBzZWxmLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpICAjIGlmIGJvdGggYXJlIGluZiwgaXQgaXMgT0sKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVhbnRpemUgd2l0aCBvbmUgSU5GJykKKworICAgICAgICAjIGV4cC5fZXhwIHNob3VsZCBiZSBiZXR3ZWVuIEV0aW55IGFuZCBFbWF4CisgICAgICAgIGlmIG5vdCAoY29udGV4dC5FdGlueSgpIDw9IGV4cC5fZXhwIDw9IGNvbnRleHQuRW1heCk6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAndGFyZ2V0IGV4cG9uZW50IG91dCBvZiBib3VuZHMgaW4gcXVhbnRpemUnKQorCisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMCcsIGV4cC5fZXhwKQorICAgICAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCisKKyAgICAgICAgc2VsZl9hZGp1c3RlZCA9IHNlbGYuYWRqdXN0ZWQoKQorICAgICAgICBpZiBzZWxmX2FkanVzdGVkID4gY29udGV4dC5FbWF4OgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cG9uZW50IG9mIHF1YW50aXplIHJlc3VsdCB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgY29udGV4dCcpCisgICAgICAgIGlmIHNlbGZfYWRqdXN0ZWQgLSBleHAuX2V4cCArIDEgPiBjb250ZXh0LnByZWM6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVhbnRpemUgcmVzdWx0IGhhcyB0b28gbWFueSBkaWdpdHMgZm9yIGN1cnJlbnQgY29udGV4dCcpCisKKyAgICAgICAgYW5zID0gc2VsZi5fcmVzY2FsZShleHAuX2V4cCwgcm91bmRpbmcpCisgICAgICAgIGlmIGFucy5hZGp1c3RlZCgpID4gY29udGV4dC5FbWF4OgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cG9uZW50IG9mIHF1YW50aXplIHJlc3VsdCB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgY29udGV4dCcpCisgICAgICAgIGlmIGxlbihhbnMuX2ludCkgPiBjb250ZXh0LnByZWM6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVhbnRpemUgcmVzdWx0IGhhcyB0b28gbWFueSBkaWdpdHMgZm9yIGN1cnJlbnQgY29udGV4dCcpCisKKyAgICAgICAgIyByYWlzZSBhcHByb3ByaWF0ZSBmbGFncworICAgICAgICBpZiBhbnMgYW5kIGFucy5hZGp1c3RlZCgpIDwgY29udGV4dC5FbWluOgorICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoU3Vibm9ybWFsKQorICAgICAgICBpZiBhbnMuX2V4cCA+IHNlbGYuX2V4cDoKKyAgICAgICAgICAgIGlmIGFucyAhPSBzZWxmOgorICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEluZXhhY3QpCisgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihSb3VuZGVkKQorCisgICAgICAgICMgY2FsbCB0byBmaXggdGFrZXMgY2FyZSBvZiBhbnkgbmVjZXNzYXJ5IGZvbGRkb3duLCBhbmQKKyAgICAgICAgIyBzaWduYWxzIENsYW1wZWQgaWYgbmVjZXNzYXJ5CisgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgIHJldHVybiBhbnMKKworICAgIGRlZiBzYW1lX3F1YW50dW0oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgYW5kIG90aGVyIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQ7IG90aGVyd2lzZQorICAgICAgICByZXR1cm4gRmFsc2UuCisKKyAgICAgICAgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBzcGVjaWFsIHZhbHVlLCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFyZSB1c2VkOgorICAgICAgICAgICAqIHJldHVybiBUcnVlIGlmIGJvdGggb3BlcmFuZHMgYXJlIGluZmluaXRpZXMKKyAgICAgICAgICAgKiByZXR1cm4gVHJ1ZSBpZiBib3RoIG9wZXJhbmRzIGFyZSBOYU5zCisgICAgICAgICAgICogb3RoZXJ3aXNlLCByZXR1cm4gRmFsc2UuCisgICAgICAgICIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuaXNfbmFuKCkgYW5kIG90aGVyLmlzX25hbigpIG9yCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaXNfaW5maW5pdGUoKSBhbmQgb3RoZXIuaXNfaW5maW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cCA9PSBvdGhlci5fZXhwCisKKyAgICBkZWYgX3Jlc2NhbGUoc2VsZiwgZXhwLCByb3VuZGluZyk6CisgICAgICAgICIiIlJlc2NhbGUgc2VsZiBzbyB0aGF0IHRoZSBleHBvbmVudCBpcyBleHAsIGVpdGhlciBieSBwYWRkaW5nIHdpdGggemVyb3MKKyAgICAgICAgb3IgYnkgdHJ1bmNhdGluZyBkaWdpdHMsIHVzaW5nIHRoZSBnaXZlbiByb3VuZGluZyBtb2RlLgorCisgICAgICAgIFNwZWNpYWxzIGFyZSByZXR1cm5lZCB3aXRob3V0IGNoYW5nZS4gIFRoaXMgb3BlcmF0aW9uIGlzCisgICAgICAgIHF1aWV0OiBpdCByYWlzZXMgbm8gZmxhZ3MsIGFuZCB1c2VzIG5vIGluZm9ybWF0aW9uIGZyb20gdGhlCisgICAgICAgIGNvbnRleHQuCisKKyAgICAgICAgZXhwID0gZXhwIHRvIHNjYWxlIHRvIChhbiBpbnRlZ2VyKQorICAgICAgICByb3VuZGluZyA9IHJvdW5kaW5nIG1vZGUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQorICAgICAgICBpZiBub3Qgc2VsZjoKKyAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sICcwJywgZXhwKQorCisgICAgICAgIGlmIHNlbGYuX2V4cCA+PSBleHA6CisgICAgICAgICAgICAjIHBhZCBhbnN3ZXIgd2l0aCB6ZXJvcyBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW50ICsgJzAnKihzZWxmLl9leHAgLSBleHApLCBleHApCisKKyAgICAgICAgIyB0b28gbWFueSBkaWdpdHM7IHJvdW5kIGFuZCBsb3NlIGRhdGEuICBJZiBzZWxmLmFkanVzdGVkKCkgPAorICAgICAgICAjIGV4cC0xLCByZXBsYWNlIHNlbGYgYnkgMTAqKihleHAtMSkgYmVmb3JlIHJvdW5kaW5nCisgICAgICAgIGRpZ2l0cyA9IGxlbihzZWxmLl9pbnQpICsgc2VsZi5fZXhwIC0gZXhwCisgICAgICAgIGlmIGRpZ2l0cyA8IDA6CisgICAgICAgICAgICBzZWxmID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMScsIGV4cC0xKQorICAgICAgICAgICAgZGlnaXRzID0gMAorICAgICAgICB0aGlzX2Z1bmN0aW9uID0gc2VsZi5fcGlja19yb3VuZGluZ19mdW5jdGlvbltyb3VuZGluZ10KKyAgICAgICAgY2hhbmdlZCA9IHRoaXNfZnVuY3Rpb24oc2VsZiwgZGlnaXRzKQorICAgICAgICBjb2VmZiA9IHNlbGYuX2ludFs6ZGlnaXRzXSBvciAnMCcKKyAgICAgICAgaWYgY2hhbmdlZCA9PSAxOgorICAgICAgICAgICAgY29lZmYgPSBzdHIoaW50KGNvZWZmKSsxKQorICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCBjb2VmZiwgZXhwKQorCisgICAgZGVmIF9yb3VuZChzZWxmLCBwbGFjZXMsIHJvdW5kaW5nKToKKyAgICAgICAgIiIiUm91bmQgYSBub256ZXJvLCBub25zcGVjaWFsIERlY2ltYWwgdG8gYSBmaXhlZCBudW1iZXIgb2YKKyAgICAgICAgc2lnbmlmaWNhbnQgZmlndXJlcywgdXNpbmcgdGhlIGdpdmVuIHJvdW5kaW5nIG1vZGUuCisKKyAgICAgICAgSW5maW5pdGllcywgTmFOcyBhbmQgemVyb3MgYXJlIHJldHVybmVkIHVuYWx0ZXJlZC4KKworICAgICAgICBUaGlzIG9wZXJhdGlvbiBpcyBxdWlldDogaXQgcmFpc2VzIG5vIGZsYWdzLCBhbmQgdXNlcyBubworICAgICAgICBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjb250ZXh0LgorCisgICAgICAgICIiIgorICAgICAgICBpZiBwbGFjZXMgPD0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhdCBsZWFzdCAxIGluIF9yb3VuZCIpCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igbm90IHNlbGY6CisgICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQorICAgICAgICBhbnMgPSBzZWxmLl9yZXNjYWxlKHNlbGYuYWRqdXN0ZWQoKSsxLXBsYWNlcywgcm91bmRpbmcpCisgICAgICAgICMgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSByZXNjYWxlIGFsdGVycyB0aGUgYWRqdXN0ZWQgZXhwb25lbnQ7CisgICAgICAgICMgZm9yIGV4YW1wbGUgd2hlbiByb3VuZGluZyA5OS45NyB0byAzIHNpZ25pZmljYW50IGZpZ3VyZXMuCisgICAgICAgICMgV2hlbiB0aGlzIGhhcHBlbnMgd2UgZW5kIHVwIHdpdGggYW4gZXh0cmEgMCBhdCB0aGUgZW5kIG9mCisgICAgICAgICMgdGhlIG51bWJlcjsgYSBzZWNvbmQgcmVzY2FsZSBmaXhlcyB0aGlzLgorICAgICAgICBpZiBhbnMuYWRqdXN0ZWQoKSAhPSBzZWxmLmFkanVzdGVkKCk6CisgICAgICAgICAgICBhbnMgPSBhbnMuX3Jlc2NhbGUoYW5zLmFkanVzdGVkKCkrMS1wbGFjZXMsIHJvdW5kaW5nKQorICAgICAgICByZXR1cm4gYW5zCisKKyAgICBkZWYgdG9faW50ZWdyYWxfZXhhY3Qoc2VsZiwgcm91bmRpbmc9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUm91bmRzIHRvIGEgbmVhcmJ5IGludGVnZXIuCisKKyAgICAgICAgSWYgbm8gcm91bmRpbmcgbW9kZSBpcyBzcGVjaWZpZWQsIHRha2UgdGhlIHJvdW5kaW5nIG1vZGUgZnJvbQorICAgICAgICB0aGUgY29udGV4dC4gIFRoaXMgbWV0aG9kIHJhaXNlcyB0aGUgUm91bmRlZCBhbmQgSW5leGFjdCBmbGFncworICAgICAgICB3aGVuIGFwcHJvcHJpYXRlLgorCisgICAgICAgIFNlZSBhbHNvOiB0b19pbnRlZ3JhbF92YWx1ZSwgd2hpY2ggZG9lcyBleGFjdGx5IHRoZSBzYW1lIGFzCisgICAgICAgIHRoaXMgbWV0aG9kIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgcmFpc2UgSW5leGFjdCBvciBSb3VuZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMoY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgICAgIHJldHVybiBhbnMKKyAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCisgICAgICAgIGlmIHNlbGYuX2V4cCA+PSAwOgorICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMCcsIDApCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKyAgICAgICAgaWYgcm91bmRpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5yb3VuZGluZworICAgICAgICBhbnMgPSBzZWxmLl9yZXNjYWxlKDAsIHJvdW5kaW5nKQorICAgICAgICBpZiBhbnMgIT0gc2VsZjoKKyAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEluZXhhY3QpCisgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFJvdW5kZWQpCisgICAgICAgIHJldHVybiBhbnMKKworICAgIGRlZiB0b19pbnRlZ3JhbF92YWx1ZShzZWxmLCByb3VuZGluZz1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSb3VuZHMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgd2l0aG91dCByYWlzaW5nIGluZXhhY3QsIHJvdW5kZWQuIiIiCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKyAgICAgICAgaWYgcm91bmRpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5yb3VuZGluZworICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCisgICAgICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFucworICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKKyAgICAgICAgaWYgc2VsZi5fZXhwID49IDA6CisgICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc2NhbGUoMCwgcm91bmRpbmcpCisKKyAgICAjIHRoZSBtZXRob2QgbmFtZSBjaGFuZ2VkLCBidXQgd2UgcHJvdmlkZSBhbHNvIHRoZSBvbGQgb25lLCBmb3IgY29tcGF0aWJpbGl0eQorICAgIHRvX2ludGVncmFsID0gdG9faW50ZWdyYWxfdmFsdWUKKworICAgIGRlZiBzcXJ0KHNlbGYsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2Ygc2VsZi4iIiIKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgICAgIGlmIGFuczoKKyAgICAgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSBhbmQgc2VsZi5fc2lnbiA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCisKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICAjIGV4cG9uZW50ID0gc2VsZi5fZXhwIC8vIDIuICBzcXJ0KC0wKSA9IC0wCisgICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sICcwJywgc2VsZi5fZXhwIC8vIDIpCisgICAgICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKKworICAgICAgICBpZiBzZWxmLl9zaWduID09IDE6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ3NxcnQoLXgpLCB4ID4gMCcpCisKKyAgICAgICAgIyBBdCB0aGlzIHBvaW50IHNlbGYgcmVwcmVzZW50cyBhIHBvc2l0aXZlIG51bWJlci4gIExldCBwIGJlCisgICAgICAgICMgdGhlIGRlc2lyZWQgcHJlY2lzaW9uIGFuZCBleHByZXNzIHNlbGYgaW4gdGhlIGZvcm0gYyoxMDAqKmUKKyAgICAgICAgIyB3aXRoIGMgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBhbmQgZSBhbiBpbnRlZ2VyLCBjIGFuZCBlCisgICAgICAgICMgYmVpbmcgY2hvc2VuIHNvIHRoYXQgMTAwKioocC0xKSA8PSBjIDwgMTAwKipwLiAgVGhlbiB0aGUKKyAgICAgICAgIyAoZXhhY3QpIHNxdWFyZSByb290IG9mIHNlbGYgaXMgc3FydChjKSoxMCoqZSwgYW5kIDEwKioocC0xKQorICAgICAgICAjIDw9IHNxcnQoYykgPCAxMCoqcCwgc28gdGhlIGNsb3Nlc3QgcmVwcmVzZW50YWJsZSBEZWNpbWFsIGF0CisgICAgICAgICMgcHJlY2lzaW9uIHAgaXMgbioxMCoqZSB3aGVyZSBuID0gcm91bmRfaGFsZl9ldmVuKHNxcnQoYykpLAorICAgICAgICAjIHRoZSBjbG9zZXN0IGludGVnZXIgdG8gc3FydChjKSB3aXRoIHRoZSBldmVuIGludGVnZXIgY2hvc2VuCisgICAgICAgICMgaW4gdGhlIGNhc2Ugb2YgYSB0aWUuCisgICAgICAgICMKKyAgICAgICAgIyBUbyBlbnN1cmUgY29ycmVjdCByb3VuZGluZyBpbiBhbGwgY2FzZXMsIHdlIHVzZSB0aGUKKyAgICAgICAgIyBmb2xsb3dpbmcgdHJpY2s6IHdlIGNvbXB1dGUgdGhlIHNxdWFyZSByb290IHRvIGFuIGV4dHJhCisgICAgICAgICMgcGxhY2UgKHByZWNpc2lvbiBwKzEgaW5zdGVhZCBvZiBwcmVjaXNpb24gcCksIHJvdW5kaW5nIGRvd24uCisgICAgICAgICMgVGhlbiwgaWYgdGhlIHJlc3VsdCBpcyBpbmV4YWN0IGFuZCBpdHMgbGFzdCBkaWdpdCBpcyAwIG9yIDUsCisgICAgICAgICMgd2UgaW5jcmVhc2UgdGhlIGxhc3QgZGlnaXQgdG8gMSBvciA2IHJlc3BlY3RpdmVseTsgaWYgaXQncworICAgICAgICAjIGV4YWN0IHdlIGxlYXZlIHRoZSBsYXN0IGRpZ2l0IGFsb25lLiAgTm93IHRoZSBmaW5hbCByb3VuZCB0bworICAgICAgICAjIHAgcGxhY2VzIChvciBmZXdlciBpbiB0aGUgY2FzZSBvZiB1bmRlcmZsb3cpIHdpbGwgcm91bmQKKyAgICAgICAgIyBjb3JyZWN0bHkgYW5kIHJhaXNlIHRoZSBhcHByb3ByaWF0ZSBmbGFncy4KKworICAgICAgICAjIHVzZSBhbiBleHRyYSBkaWdpdCBvZiBwcmVjaXNpb24KKyAgICAgICAgcHJlYyA9IGNvbnRleHQucHJlYysxCisKKyAgICAgICAgIyB3cml0ZSBhcmd1bWVudCBpbiB0aGUgZm9ybSBjKjEwMCoqZSB3aGVyZSBlID0gc2VsZi5fZXhwLy8yCisgICAgICAgICMgaXMgdGhlICdpZGVhbCcgZXhwb25lbnQsIHRvIGJlIHVzZWQgaWYgdGhlIHNxdWFyZSByb290IGlzCisgICAgICAgICMgZXhhY3RseSByZXByZXNlbnRhYmxlLiAgbCBpcyB0aGUgbnVtYmVyIG9mICdkaWdpdHMnIG9mIGMgaW4KKyAgICAgICAgIyBiYXNlIDEwMCwgc28gdGhhdCAxMDAqKihsLTEpIDw9IGMgPCAxMDAqKmwuCisgICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZikKKyAgICAgICAgZSA9IG9wLmV4cCA+PiAxCisgICAgICAgIGlmIG9wLmV4cCAmIDE6CisgICAgICAgICAgICBjID0gb3AuaW50ICogMTAKKyAgICAgICAgICAgIGwgPSAobGVuKHNlbGYuX2ludCkgPj4gMSkgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjID0gb3AuaW50CisgICAgICAgICAgICBsID0gbGVuKHNlbGYuX2ludCkrMSA+PiAxCisKKyAgICAgICAgIyByZXNjYWxlIHNvIHRoYXQgYyBoYXMgZXhhY3RseSBwcmVjIGJhc2UgMTAwICdkaWdpdHMnCisgICAgICAgIHNoaWZ0ID0gcHJlYy1sCisgICAgICAgIGlmIHNoaWZ0ID49IDA6CisgICAgICAgICAgICBjICo9IDEwMCoqc2hpZnQKKyAgICAgICAgICAgIGV4YWN0ID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYywgcmVtYWluZGVyID0gZGl2bW9kKGMsIDEwMCoqLXNoaWZ0KQorICAgICAgICAgICAgZXhhY3QgPSBub3QgcmVtYWluZGVyCisgICAgICAgIGUgLT0gc2hpZnQKKworICAgICAgICAjIGZpbmQgbiA9IGZsb29yKHNxcnQoYykpIHVzaW5nIE5ld3RvbidzIG1ldGhvZAorICAgICAgICBuID0gMTAqKnByZWMKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHEgPSBjLy9uCisgICAgICAgICAgICBpZiBuIDw9IHE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbiA9IG4gKyBxID4+IDEKKyAgICAgICAgZXhhY3QgPSBleGFjdCBhbmQgbipuID09IGMKKworICAgICAgICBpZiBleGFjdDoKKyAgICAgICAgICAgICMgcmVzdWx0IGlzIGV4YWN0OyByZXNjYWxlIHRvIHVzZSBpZGVhbCBleHBvbmVudCBlCisgICAgICAgICAgICBpZiBzaGlmdCA+PSAwOgorICAgICAgICAgICAgICAgICMgYXNzZXJ0IG4gJSAxMCoqc2hpZnQgPT0gMAorICAgICAgICAgICAgICAgIG4gLy89IDEwKipzaGlmdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuICo9IDEwKiotc2hpZnQKKyAgICAgICAgICAgIGUgKz0gc2hpZnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcmVzdWx0IGlzIG5vdCBleGFjdDsgZml4IGxhc3QgZGlnaXQgYXMgZGVzY3JpYmVkIGFib3ZlCisgICAgICAgICAgICBpZiBuICUgNSA9PSAwOgorICAgICAgICAgICAgICAgIG4gKz0gMQorCisgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoMCwgc3RyKG4pLCBlKQorCisgICAgICAgICMgcm91bmQsIGFuZCBmaXQgdG8gY3VycmVudCBjb250ZXh0CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9zaGFsbG93X2NvcHkoKQorICAgICAgICByb3VuZGluZyA9IGNvbnRleHQuX3NldF9yb3VuZGluZyhST1VORF9IQUxGX0VWRU4pCisgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgIGNvbnRleHQucm91bmRpbmcgPSByb3VuZGluZworCisgICAgICAgIHJldHVybiBhbnMKKworICAgIGRlZiBtYXgoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGxhcmdlciB2YWx1ZS4KKworICAgICAgICBMaWtlIG1heChzZWxmLCBvdGhlcikgZXhjZXB0IGlmIG9uZSBpcyBub3QgYSBudW1iZXIsIHJldHVybnMKKyAgICAgICAgTmFOIChhbmQgc2lnbmFscyBpZiBvbmUgaXMgc05hTikuICBBbHNvIHJvdW5kcy4KKyAgICAgICAgIiIiCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlci5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgICMgSWYgb25lIG9wZXJhbmQgaXMgYSBxdWlldCBOYU4gYW5kIHRoZSBvdGhlciBpcyBudW1iZXIsIHRoZW4gdGhlCisgICAgICAgICAgICAjIG51bWJlciBpcyBhbHdheXMgcmV0dXJuZWQKKyAgICAgICAgICAgIHNuID0gc2VsZi5faXNuYW4oKQorICAgICAgICAgICAgb24gPSBvdGhlci5faXNuYW4oKQorICAgICAgICAgICAgaWYgc24gb3Igb246CisgICAgICAgICAgICAgICAgaWYgb24gPT0gMSBhbmQgc24gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeChjb250ZXh0KQorICAgICAgICAgICAgICAgIGlmIHNuID09IDEgYW5kIG9uID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlci5fZml4KGNvbnRleHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCisKKyAgICAgICAgYyA9IHNlbGYuX2NtcChvdGhlcikKKyAgICAgICAgaWYgYyA9PSAwOgorICAgICAgICAgICAgIyBJZiBib3RoIG9wZXJhbmRzIGFyZSBmaW5pdGUgYW5kIGVxdWFsIGluIG51bWVyaWNhbCB2YWx1ZQorICAgICAgICAgICAgIyB0aGVuIGFuIG9yZGVyaW5nIGlzIGFwcGxpZWQ6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIHRoZSBzaWducyBkaWZmZXIgdGhlbiBtYXggcmV0dXJucyB0aGUgb3BlcmFuZCB3aXRoIHRoZQorICAgICAgICAgICAgIyBwb3NpdGl2ZSBzaWduIGFuZCBtaW4gcmV0dXJucyB0aGUgb3BlcmFuZCB3aXRoIHRoZSBuZWdhdGl2ZSBzaWduCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIElmIHRoZSBzaWducyBhcmUgdGhlIHNhbWUgdGhlbiB0aGUgZXhwb25lbnQgaXMgdXNlZCB0byBzZWxlY3QKKyAgICAgICAgICAgICMgdGhlIHJlc3VsdC4gIFRoaXMgaXMgZXhhY3RseSB0aGUgb3JkZXJpbmcgdXNlZCBpbiBjb21wYXJlX3RvdGFsLgorICAgICAgICAgICAgYyA9IHNlbGYuY29tcGFyZV90b3RhbChvdGhlcikKKworICAgICAgICBpZiBjID09IC0xOgorICAgICAgICAgICAgYW5zID0gb3RoZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFucyA9IHNlbGYKKworICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKKworICAgIGRlZiBtaW4oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHNtYWxsZXIgdmFsdWUuCisKKyAgICAgICAgTGlrZSBtaW4oc2VsZiwgb3RoZXIpIGV4Y2VwdCBpZiBvbmUgaXMgbm90IGEgbnVtYmVyLCByZXR1cm5zCisgICAgICAgIE5hTiAoYW5kIHNpZ25hbHMgaWYgb25lIGlzIHNOYU4pLiAgQWxzbyByb3VuZHMuCisgICAgICAgICIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCisKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICAjIElmIG9uZSBvcGVyYW5kIGlzIGEgcXVpZXQgTmFOIGFuZCB0aGUgb3RoZXIgaXMgbnVtYmVyLCB0aGVuIHRoZQorICAgICAgICAgICAgIyBudW1iZXIgaXMgYWx3YXlzIHJldHVybmVkCisgICAgICAgICAgICBzbiA9IHNlbGYuX2lzbmFuKCkKKyAgICAgICAgICAgIG9uID0gb3RoZXIuX2lzbmFuKCkKKyAgICAgICAgICAgIGlmIHNuIG9yIG9uOgorICAgICAgICAgICAgICAgIGlmIG9uID09IDEgYW5kIHNuID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgoY29udGV4dCkKKyAgICAgICAgICAgICAgICBpZiBzbiA9PSAxIGFuZCBvbiA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIuX2ZpeChjb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorCisgICAgICAgIGMgPSBzZWxmLl9jbXAob3RoZXIpCisgICAgICAgIGlmIGMgPT0gMDoKKyAgICAgICAgICAgIGMgPSBzZWxmLmNvbXBhcmVfdG90YWwob3RoZXIpCisKKyAgICAgICAgaWYgYyA9PSAtMToKKyAgICAgICAgICAgIGFucyA9IHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFucyA9IG90aGVyCisKKyAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCisKKyAgICBkZWYgX2lzaW50ZWdlcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHNlbGYgaXMgYW4gaW50ZWdlciIiIgorICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2V4cCA+PSAwOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmVzdCA9IHNlbGYuX2ludFtzZWxmLl9leHA6XQorICAgICAgICByZXR1cm4gcmVzdCA9PSAnMCcqbGVuKHJlc3QpCisKKyAgICBkZWYgX2lzZXZlbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHNlbGYgaXMgZXZlbi4gIEFzc3VtZXMgc2VsZiBpcyBhbiBpbnRlZ2VyLiIiIgorICAgICAgICBpZiBub3Qgc2VsZiBvciBzZWxmLl9leHAgPiAwOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludFstMStzZWxmLl9leHBdIGluICcwMjQ2OCcKKworICAgIGRlZiBhZGp1c3RlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBhZGp1c3RlZCBleHBvbmVudCBvZiBzZWxmIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHAgKyBsZW4oc2VsZi5faW50KSAtIDEKKyAgICAgICAgIyBJZiBOYU4gb3IgSW5maW5pdHksIHNlbGYuX2V4cCBpcyBzdHJpbmcKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgY2Fub25pY2FsKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzYW1lIERlY2ltYWwgb2JqZWN0LgorCisgICAgICAgIEFzIHdlIGRvIG5vdCBoYXZlIGRpZmZlcmVudCBlbmNvZGluZ3MgZm9yIHRoZSBzYW1lIG51bWJlciwgdGhlCisgICAgICAgIHJlY2VpdmVkIG9iamVjdCBhbHJlYWR5IGlzIGluIGl0cyBjYW5vbmljYWwgZm9ybS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgY29tcGFyZV9zaWduYWwoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIkNvbXBhcmVzIHNlbGYgdG8gdGhlIG90aGVyIG9wZXJhbmQgbnVtZXJpY2FsbHkuCisKKyAgICAgICAgSXQncyBwcmV0dHkgbXVjaCBsaWtlIGNvbXBhcmUoKSwgYnV0IGFsbCBOYU5zIHNpZ25hbCwgd2l0aCBzaWduYWxpbmcKKyAgICAgICAgTmFOcyB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIHF1aWV0IE5hTnMuCisgICAgICAgICIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0ID0gVHJ1ZSkKKyAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICByZXR1cm4gYW5zCisgICAgICAgIHJldHVybiBzZWxmLmNvbXBhcmUob3RoZXIsIGNvbnRleHQ9Y29udGV4dCkKKworICAgIGRlZiBjb21wYXJlX3RvdGFsKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJDb21wYXJlcyBzZWxmIHRvIG90aGVyIHVzaW5nIHRoZSBhYnN0cmFjdCByZXByZXNlbnRhdGlvbnMuCisKKyAgICAgICAgVGhpcyBpcyBub3QgbGlrZSB0aGUgc3RhbmRhcmQgY29tcGFyZSwgd2hpY2ggdXNlIHRoZWlyIG51bWVyaWNhbAorICAgICAgICB2YWx1ZS4gTm90ZSB0aGF0IGEgdG90YWwgb3JkZXJpbmcgaXMgZGVmaW5lZCBmb3IgYWxsIHBvc3NpYmxlIGFic3RyYWN0CisgICAgICAgIHJlcHJlc2VudGF0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICAjIGlmIG9uZSBpcyBuZWdhdGl2ZSBhbmQgdGhlIG90aGVyIGlzIHBvc2l0aXZlLCBpdCdzIGVhc3kKKyAgICAgICAgaWYgc2VsZi5fc2lnbiBhbmQgbm90IG90aGVyLl9zaWduOgorICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQorICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbiBhbmQgb3RoZXIuX3NpZ246CisgICAgICAgICAgICByZXR1cm4gX09uZQorICAgICAgICBzaWduID0gc2VsZi5fc2lnbgorCisgICAgICAgICMgbGV0J3MgaGFuZGxlIGJvdGggTmFOIHR5cGVzCisgICAgICAgIHNlbGZfbmFuID0gc2VsZi5faXNuYW4oKQorICAgICAgICBvdGhlcl9uYW4gPSBvdGhlci5faXNuYW4oKQorICAgICAgICBpZiBzZWxmX25hbiBvciBvdGhlcl9uYW46CisgICAgICAgICAgICBpZiBzZWxmX25hbiA9PSBvdGhlcl9uYW46CisgICAgICAgICAgICAgICAgIyBjb21wYXJlIHBheWxvYWRzIGFzIHRob3VnaCB0aGV5J3JlIGludGVnZXJzCisgICAgICAgICAgICAgICAgc2VsZl9rZXkgPSBsZW4oc2VsZi5faW50KSwgc2VsZi5faW50CisgICAgICAgICAgICAgICAgb3RoZXJfa2V5ID0gbGVuKG90aGVyLl9pbnQpLCBvdGhlci5faW50CisgICAgICAgICAgICAgICAgaWYgc2VsZl9rZXkgPCBvdGhlcl9rZXk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX09uZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQorICAgICAgICAgICAgICAgIGlmIHNlbGZfa2V5ID4gb3RoZXJfa2V5OgorICAgICAgICAgICAgICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9PbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gX1plcm8KKworICAgICAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmX25hbiA9PSAxOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX05lZ2F0aXZlT25lCisgICAgICAgICAgICAgICAgaWYgb3RoZXJfbmFuID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfT25lCisgICAgICAgICAgICAgICAgaWYgc2VsZl9uYW4gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQorICAgICAgICAgICAgICAgIGlmIG90aGVyX25hbiA9PSAyOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX09uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmX25hbiA9PSAxOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX09uZQorICAgICAgICAgICAgICAgIGlmIG90aGVyX25hbiA9PSAxOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX05lZ2F0aXZlT25lCisgICAgICAgICAgICAgICAgaWYgc2VsZl9uYW4gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9PbmUKKyAgICAgICAgICAgICAgICBpZiBvdGhlcl9uYW4gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQorCisgICAgICAgIGlmIHNlbGYgPCBvdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBfTmVnYXRpdmVPbmUKKyAgICAgICAgaWYgc2VsZiA+IG90aGVyOgorICAgICAgICAgICAgcmV0dXJuIF9PbmUKKworICAgICAgICBpZiBzZWxmLl9leHAgPCBvdGhlci5fZXhwOgorICAgICAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gX09uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gX05lZ2F0aXZlT25lCisgICAgICAgIGlmIHNlbGYuX2V4cCA+IG90aGVyLl9leHA6CisgICAgICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgICAgIHJldHVybiBfTmVnYXRpdmVPbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9PbmUKKyAgICAgICAgcmV0dXJuIF9aZXJvCisKKworICAgIGRlZiBjb21wYXJlX3RvdGFsX21hZyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiQ29tcGFyZXMgc2VsZiB0byBvdGhlciB1c2luZyBhYnN0cmFjdCByZXByLiwgaWdub3Jpbmcgc2lnbi4KKworICAgICAgICBMaWtlIGNvbXBhcmVfdG90YWwsIGJ1dCB3aXRoIG9wZXJhbmQncyBzaWduIGlnbm9yZWQgYW5kIGFzc3VtZWQgdG8gYmUgMC4KKyAgICAgICAgIiIiCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICBzID0gc2VsZi5jb3B5X2FicygpCisgICAgICAgIG8gPSBvdGhlci5jb3B5X2FicygpCisgICAgICAgIHJldHVybiBzLmNvbXBhcmVfdG90YWwobykKKworICAgIGRlZiBjb3B5X2FicyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGNvcHkgd2l0aCB0aGUgc2lnbiBzZXQgdG8gMC4gIiIiCisgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsIHNlbGYuX2ludCwgc2VsZi5fZXhwLCBzZWxmLl9pc19zcGVjaWFsKQorCisgICAgZGVmIGNvcHlfbmVnYXRlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgY29weSB3aXRoIHRoZSBzaWduIGludmVydGVkLiIiIgorICAgICAgICBpZiBzZWxmLl9zaWduOgorICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoMCwgc2VsZi5faW50LCBzZWxmLl9leHAsIHNlbGYuX2lzX3NwZWNpYWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZSgxLCBzZWxmLl9pbnQsIHNlbGYuX2V4cCwgc2VsZi5faXNfc3BlY2lhbCkKKworICAgIGRlZiBjb3B5X3NpZ24oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgc2VsZiB3aXRoIHRoZSBzaWduIG9mIG90aGVyLiIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKG90aGVyLl9zaWduLCBzZWxmLl9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cCwgc2VsZi5faXNfc3BlY2lhbCkKKworICAgIGRlZiBleHAoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyBlICoqIHNlbGYuIiIiCisKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgICMgZXhwKE5hTikgPSBOYU4KKyAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCisgICAgICAgIGlmIGFuczoKKyAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICAjIGV4cCgtSW5maW5pdHkpID0gMAorICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgPT0gLTE6CisgICAgICAgICAgICByZXR1cm4gX1plcm8KKworICAgICAgICAjIGV4cCgwKSA9IDEKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICByZXR1cm4gX09uZQorCisgICAgICAgICMgZXhwKEluZmluaXR5KSA9IEluZmluaXR5CisgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKKworICAgICAgICAjIHRoZSByZXN1bHQgaXMgbm93IGd1YXJhbnRlZWQgdG8gYmUgaW5leGFjdCAodGhlIHRydWUKKyAgICAgICAgIyBtYXRoZW1hdGljYWwgcmVzdWx0IGlzIHRyYW5zY2VuZGVudGFsKS4gVGhlcmUncyBubyBuZWVkIHRvCisgICAgICAgICMgcmFpc2UgUm91bmRlZCBhbmQgSW5leGFjdCBoZXJlLS0tdGhleSdsbCBhbHdheXMgYmUgcmFpc2VkIGFzCisgICAgICAgICMgYSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gX2ZpeC4KKyAgICAgICAgcCA9IGNvbnRleHQucHJlYworICAgICAgICBhZGogPSBzZWxmLmFkanVzdGVkKCkKKworICAgICAgICAjIHdlIG9ubHkgbmVlZCB0byBkbyBhbnkgY29tcHV0YXRpb24gZm9yIHF1aXRlIGEgc21hbGwgcmFuZ2UKKyAgICAgICAgIyBvZiBhZGp1c3RlZCBleHBvbmVudHMtLS1mb3IgZXhhbXBsZSwgLTI5IDw9IGFkaiA8PSAxMCBmb3IKKyAgICAgICAgIyB0aGUgZGVmYXVsdCBjb250ZXh0LiAgRm9yIHNtYWxsZXIgZXhwb25lbnQgdGhlIHJlc3VsdCBpcworICAgICAgICAjIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gMSBhdCB0aGUgZ2l2ZW4gcHJlY2lzaW9uLCB3aGlsZSBmb3IKKyAgICAgICAgIyBsYXJnZXIgZXhwb25lbnQgdGhlIHJlc3VsdCBlaXRoZXIgb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3MuCisgICAgICAgIGlmIHNlbGYuX3NpZ24gPT0gMCBhbmQgYWRqID4gbGVuKHN0cigoY29udGV4dC5FbWF4KzEpKjMpKToKKyAgICAgICAgICAgICMgb3ZlcmZsb3cKKyAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoMCwgJzEnLCBjb250ZXh0LkVtYXgrMSkKKyAgICAgICAgZWxpZiBzZWxmLl9zaWduID09IDEgYW5kIGFkaiA+IGxlbihzdHIoKC1jb250ZXh0LkV0aW55KCkrMSkqMykpOgorICAgICAgICAgICAgIyB1bmRlcmZsb3cgdG8gMAorICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZSgwLCAnMScsIGNvbnRleHQuRXRpbnkoKS0xKQorICAgICAgICBlbGlmIHNlbGYuX3NpZ24gPT0gMCBhbmQgYWRqIDwgLXA6CisgICAgICAgICAgICAjIHArMSBkaWdpdHM7IGZpbmFsIHJvdW5kIHdpbGwgcmFpc2UgY29ycmVjdCBmbGFncworICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZSgwLCAnMScgKyAnMCcqKHAtMSkgKyAnMScsIC1wKQorICAgICAgICBlbGlmIHNlbGYuX3NpZ24gPT0gMSBhbmQgYWRqIDwgLXAtMToKKyAgICAgICAgICAgICMgcCsxIGRpZ2l0czsgZmluYWwgcm91bmQgd2lsbCByYWlzZSBjb3JyZWN0IGZsYWdzCisgICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKDAsICc5JyoocCsxKSwgLXAtMSkKKyAgICAgICAgIyBnZW5lcmFsIGNhc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZikKKyAgICAgICAgICAgIGMsIGUgPSBvcC5pbnQsIG9wLmV4cAorICAgICAgICAgICAgaWYgb3Auc2lnbiA9PSAxOgorICAgICAgICAgICAgICAgIGMgPSAtYworCisgICAgICAgICAgICAjIGNvbXB1dGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0OiBpbmNyZWFzZSBwcmVjaXNpb24gYnkKKyAgICAgICAgICAgICMgMyBkaWdpdHMgYXQgYSB0aW1lIHVudGlsIHdlIGdldCBhbiB1bmFtYmlndW91c2x5CisgICAgICAgICAgICAjIHJvdW5kYWJsZSByZXN1bHQKKyAgICAgICAgICAgIGV4dHJhID0gMworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBjb2VmZiwgZXhwID0gX2RleHAoYywgZSwgcCtleHRyYSkKKyAgICAgICAgICAgICAgICBpZiBjb2VmZiAlICg1KjEwKioobGVuKHN0cihjb2VmZikpLXAtMSkpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4dHJhICs9IDMKKworICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZSgwLCBzdHIoY29lZmYpLCBleHApCisKKyAgICAgICAgIyBhdCB0aGlzIHN0YWdlLCBhbnMgc2hvdWxkIHJvdW5kIGNvcnJlY3RseSB3aXRoICphbnkqCisgICAgICAgICMgcm91bmRpbmcgbW9kZSwgbm90IGp1c3Qgd2l0aCBST1VORF9IQUxGX0VWRU4KKyAgICAgICAgY29udGV4dCA9IGNvbnRleHQuX3NoYWxsb3dfY29weSgpCisgICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5fc2V0X3JvdW5kaW5nKFJPVU5EX0hBTEZfRVZFTikKKyAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKKyAgICAgICAgY29udGV4dC5yb3VuZGluZyA9IHJvdW5kaW5nCisKKyAgICAgICAgcmV0dXJuIGFucworCisgICAgZGVmIGlzX2Nhbm9uaWNhbChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgc2VsZiBpcyBjYW5vbmljYWw7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgZW5jb2Rpbmcgb2YgYSBEZWNpbWFsIGluc3RhbmNlIGlzIGFsd2F5cworICAgICAgICBjYW5vbmljYWwsIHNvIHRoaXMgbWV0aG9kIHJldHVybnMgVHJ1ZSBmb3IgYW55IERlY2ltYWwuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlzX2Zpbml0ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgc2VsZiBpcyBmaW5pdGU7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCisKKyAgICAgICAgQSBEZWNpbWFsIGluc3RhbmNlIGlzIGNvbnNpZGVyZWQgZmluaXRlIGlmIGl0IGlzIG5laXRoZXIKKyAgICAgICAgaW5maW5pdGUgbm9yIGEgTmFOLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9pc19zcGVjaWFsCisKKyAgICBkZWYgaXNfaW5maW5pdGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgaW5maW5pdGU7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9leHAgPT0gJ0YnCisKKyAgICBkZWYgaXNfbmFuKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzZWxmIGlzIGEgcU5hTiBvciBzTmFOOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwIGluICgnbicsICdOJykKKworICAgIGRlZiBpc19ub3JtYWwoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgc2VsZiBpcyBhIG5vcm1hbCBudW1iZXI7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIiIiCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igbm90IHNlbGY6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorICAgICAgICByZXR1cm4gY29udGV4dC5FbWluIDw9IHNlbGYuYWRqdXN0ZWQoKQorCisgICAgZGVmIGlzX3FuYW4oc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgYSBxdWlldCBOYU47IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9leHAgPT0gJ24nCisKKyAgICBkZWYgaXNfc2lnbmVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzZWxmIGlzIG5lZ2F0aXZlOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc2lnbiA9PSAxCisKKyAgICBkZWYgaXNfc25hbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgc2VsZiBpcyBhIHNpZ25hbGluZyBOYU47IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9leHAgPT0gJ04nCisKKyAgICBkZWYgaXNfc3Vibm9ybWFsKHNlbGYsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgc3Vibm9ybWFsOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgorICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIG5vdCBzZWxmOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuYWRqdXN0ZWQoKSA8IGNvbnRleHQuRW1pbgorCisgICAgZGVmIGlzX3plcm8oc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgYSB6ZXJvOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2lzX3NwZWNpYWwgYW5kIHNlbGYuX2ludCA9PSAnMCcKKworICAgIGRlZiBfbG5fZXhwX2JvdW5kKHNlbGYpOgorICAgICAgICAiIiJDb21wdXRlIGEgbG93ZXIgYm91bmQgZm9yIHRoZSBhZGp1c3RlZCBleHBvbmVudCBvZiBzZWxmLmxuKCkuCisgICAgICAgIEluIG90aGVyIHdvcmRzLCBjb21wdXRlIHIgc3VjaCB0aGF0IHNlbGYubG4oKSA+PSAxMCoqci4gIEFzc3VtZXMKKyAgICAgICAgdGhhdCBzZWxmIGlzIGZpbml0ZSBhbmQgcG9zaXRpdmUgYW5kIHRoYXQgc2VsZiAhPSAxLgorICAgICAgICAiIiIKKworICAgICAgICAjIGZvciAwLjEgPD0geCA8PSAxMCB3ZSB1c2UgdGhlIGluZXF1YWxpdGllcyAxLTEveCA8PSBsbih4KSA8PSB4LTEKKyAgICAgICAgYWRqID0gc2VsZi5fZXhwICsgbGVuKHNlbGYuX2ludCkgLSAxCisgICAgICAgIGlmIGFkaiA+PSAxOgorICAgICAgICAgICAgIyBhcmd1bWVudCA+PSAxMDsgd2UgdXNlIDIzLzEwID0gMi4zIGFzIGEgbG93ZXIgYm91bmQgZm9yIGxuKDEwKQorICAgICAgICAgICAgcmV0dXJuIGxlbihzdHIoYWRqKjIzLy8xMCkpIC0gMQorICAgICAgICBpZiBhZGogPD0gLTI6CisgICAgICAgICAgICAjIGFyZ3VtZW50IDw9IDAuMQorICAgICAgICAgICAgcmV0dXJuIGxlbihzdHIoKC0xLWFkaikqMjMvLzEwKSkgLSAxCisgICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZikKKyAgICAgICAgYywgZSA9IG9wLmludCwgb3AuZXhwCisgICAgICAgIGlmIGFkaiA9PSAwOgorICAgICAgICAgICAgIyAxIDwgc2VsZiA8IDEwCisgICAgICAgICAgICBudW0gPSBzdHIoYy0xMCoqLWUpCisgICAgICAgICAgICBkZW4gPSBzdHIoYykKKyAgICAgICAgICAgIHJldHVybiBsZW4obnVtKSAtIGxlbihkZW4pIC0gKG51bSA8IGRlbikKKyAgICAgICAgIyBhZGogPT0gLTEsIDAuMSA8PSBzZWxmIDwgMQorICAgICAgICByZXR1cm4gZSArIGxlbihzdHIoMTAqKi1lIC0gYykpIC0gMQorCisKKyAgICBkZWYgbG4oc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgbmF0dXJhbCAoYmFzZSBlKSBsb2dhcml0aG0gb2Ygc2VsZi4iIiIKKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgIyBsbihOYU4pID0gTmFOCisgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMoY29udGV4dD1jb250ZXh0KQorICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgIyBsbigwLjApID09IC1JbmZpbml0eQorICAgICAgICBpZiBub3Qgc2VsZjoKKyAgICAgICAgICAgIHJldHVybiBfTmVnYXRpdmVJbmZpbml0eQorCisgICAgICAgICMgbG4oSW5maW5pdHkpID0gSW5maW5pdHkKKyAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpID09IDE6CisgICAgICAgICAgICByZXR1cm4gX0luZmluaXR5CisKKyAgICAgICAgIyBsbigxLjApID09IDAuMAorICAgICAgICBpZiBzZWxmID09IF9PbmU6CisgICAgICAgICAgICByZXR1cm4gX1plcm8KKworICAgICAgICAjIGxuKG5lZ2F0aXZlKSByYWlzZXMgSW52YWxpZE9wZXJhdGlvbgorICAgICAgICBpZiBzZWxmLl9zaWduID09IDE6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG4gb2YgYSBuZWdhdGl2ZSB2YWx1ZScpCisKKyAgICAgICAgIyByZXN1bHQgaXMgaXJyYXRpb25hbCwgc28gbmVjZXNzYXJpbHkgaW5leGFjdAorICAgICAgICBvcCA9IF9Xb3JrUmVwKHNlbGYpCisgICAgICAgIGMsIGUgPSBvcC5pbnQsIG9wLmV4cAorICAgICAgICBwID0gY29udGV4dC5wcmVjCisKKyAgICAgICAgIyBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQ6IHJlcGVhdGVkbHkgaW5jcmVhc2UgcHJlY2lzaW9uIGJ5IDMKKyAgICAgICAgIyB1bnRpbCB3ZSBnZXQgYW4gdW5hbWJpZ3VvdXNseSByb3VuZGFibGUgcmVzdWx0CisgICAgICAgIHBsYWNlcyA9IHAgLSBzZWxmLl9sbl9leHBfYm91bmQoKSArIDIgIyBhdCBsZWFzdCBwKzMgcGxhY2VzCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjb2VmZiA9IF9kbG9nKGMsIGUsIHBsYWNlcykKKyAgICAgICAgICAgICMgYXNzZXJ0IGxlbihzdHIoYWJzKGNvZWZmKSkpLXAgPj0gMQorICAgICAgICAgICAgaWYgY29lZmYgJSAoNSoxMCoqKGxlbihzdHIoYWJzKGNvZWZmKSkpLXAtMSkpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwbGFjZXMgKz0gMworICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKGludChjb2VmZjwwKSwgc3RyKGFicyhjb2VmZikpLCAtcGxhY2VzKQorCisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9zaGFsbG93X2NvcHkoKQorICAgICAgICByb3VuZGluZyA9IGNvbnRleHQuX3NldF9yb3VuZGluZyhST1VORF9IQUxGX0VWRU4pCisgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCisgICAgICAgIGNvbnRleHQucm91bmRpbmcgPSByb3VuZGluZworICAgICAgICByZXR1cm4gYW5zCisKKyAgICBkZWYgX2xvZzEwX2V4cF9ib3VuZChzZWxmKToKKyAgICAgICAgIiIiQ29tcHV0ZSBhIGxvd2VyIGJvdW5kIGZvciB0aGUgYWRqdXN0ZWQgZXhwb25lbnQgb2Ygc2VsZi5sb2cxMCgpLgorICAgICAgICBJbiBvdGhlciB3b3JkcywgZmluZCByIHN1Y2ggdGhhdCBzZWxmLmxvZzEwKCkgPj0gMTAqKnIuCisgICAgICAgIEFzc3VtZXMgdGhhdCBzZWxmIGlzIGZpbml0ZSBhbmQgcG9zaXRpdmUgYW5kIHRoYXQgc2VsZiAhPSAxLgorICAgICAgICAiIiIKKworICAgICAgICAjIEZvciB4ID49IDEwIG9yIHggPCAwLjEgd2Ugb25seSBuZWVkIGEgYm91bmQgb24gdGhlIGludGVnZXIKKyAgICAgICAgIyBwYXJ0IG9mIGxvZzEwKHNlbGYpLCBhbmQgdGhpcyBjb21lcyBkaXJlY3RseSBmcm9tIHRoZQorICAgICAgICAjIGV4cG9uZW50IG9mIHguICBGb3IgMC4xIDw9IHggPD0gMTAgd2UgdXNlIHRoZSBpbmVxdWFsaXRpZXMKKyAgICAgICAgIyAxLTEveCA8PSBsb2coeCkgPD0geC0xLiBJZiB4ID4gMSB3ZSBoYXZlIHxsb2cxMCh4KXwgPgorICAgICAgICAjICgxLTEveCkvMi4zMSA+IDAuICBJZiB4IDwgMSB0aGVuIHxsb2cxMCh4KXwgPiAoMS14KS8yLjMxID4gMAorCisgICAgICAgIGFkaiA9IHNlbGYuX2V4cCArIGxlbihzZWxmLl9pbnQpIC0gMQorICAgICAgICBpZiBhZGogPj0gMToKKyAgICAgICAgICAgICMgc2VsZiA+PSAxMAorICAgICAgICAgICAgcmV0dXJuIGxlbihzdHIoYWRqKSktMQorICAgICAgICBpZiBhZGogPD0gLTI6CisgICAgICAgICAgICAjIHNlbGYgPCAwLjEKKyAgICAgICAgICAgIHJldHVybiBsZW4oc3RyKC0xLWFkaikpLTEKKyAgICAgICAgb3AgPSBfV29ya1JlcChzZWxmKQorICAgICAgICBjLCBlID0gb3AuaW50LCBvcC5leHAKKyAgICAgICAgaWYgYWRqID09IDA6CisgICAgICAgICAgICAjIDEgPCBzZWxmIDwgMTAKKyAgICAgICAgICAgIG51bSA9IHN0cihjLTEwKiotZSkKKyAgICAgICAgICAgIGRlbiA9IHN0cigyMzEqYykKKyAgICAgICAgICAgIHJldHVybiBsZW4obnVtKSAtIGxlbihkZW4pIC0gKG51bSA8IGRlbikgKyAyCisgICAgICAgICMgYWRqID09IC0xLCAwLjEgPD0gc2VsZiA8IDEKKyAgICAgICAgbnVtID0gc3RyKDEwKiotZS1jKQorICAgICAgICByZXR1cm4gbGVuKG51bSkgKyBlIC0gKG51bSA8ICIyMzEiKSAtIDEKKworICAgIGRlZiBsb2cxMChzZWxmLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiBzZWxmLiIiIgorCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICAjIGxvZzEwKE5hTikgPSBOYU4KKyAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCisgICAgICAgIGlmIGFuczoKKyAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICAjIGxvZzEwKDAuMCkgPT0gLUluZmluaXR5CisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZUluZmluaXR5CisKKyAgICAgICAgIyBsb2cxMChJbmZpbml0eSkgPSBJbmZpbml0eQorICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgPT0gMToKKyAgICAgICAgICAgIHJldHVybiBfSW5maW5pdHkKKworICAgICAgICAjIGxvZzEwKG5lZ2F0aXZlIG9yIC1JbmZpbml0eSkgcmFpc2VzIEludmFsaWRPcGVyYXRpb24KKyAgICAgICAgaWYgc2VsZi5fc2lnbiA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZzEwIG9mIGEgbmVnYXRpdmUgdmFsdWUnKQorCisgICAgICAgICMgbG9nMTAoMTAqKm4pID0gbgorICAgICAgICBpZiBzZWxmLl9pbnRbMF0gPT0gJzEnIGFuZCBzZWxmLl9pbnRbMTpdID09ICcwJyoobGVuKHNlbGYuX2ludCkgLSAxKToKKyAgICAgICAgICAgICMgYW5zd2VyIG1heSBuZWVkIHJvdW5kaW5nCisgICAgICAgICAgICBhbnMgPSBEZWNpbWFsKHNlbGYuX2V4cCArIGxlbihzZWxmLl9pbnQpIC0gMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcmVzdWx0IGlzIGlycmF0aW9uYWwsIHNvIG5lY2Vzc2FyaWx5IGluZXhhY3QKKyAgICAgICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZikKKyAgICAgICAgICAgIGMsIGUgPSBvcC5pbnQsIG9wLmV4cAorICAgICAgICAgICAgcCA9IGNvbnRleHQucHJlYworCisgICAgICAgICAgICAjIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdDogcmVwZWF0ZWRseSBpbmNyZWFzZSBwcmVjaXNpb24KKyAgICAgICAgICAgICMgdW50aWwgcmVzdWx0IGlzIHVuYW1iaWd1b3VzbHkgcm91bmRhYmxlCisgICAgICAgICAgICBwbGFjZXMgPSBwLXNlbGYuX2xvZzEwX2V4cF9ib3VuZCgpKzIKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgY29lZmYgPSBfZGxvZzEwKGMsIGUsIHBsYWNlcykKKyAgICAgICAgICAgICAgICAjIGFzc2VydCBsZW4oc3RyKGFicyhjb2VmZikpKS1wID49IDEKKyAgICAgICAgICAgICAgICBpZiBjb2VmZiAlICg1KjEwKioobGVuKHN0cihhYnMoY29lZmYpKSktcC0xKSk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcGxhY2VzICs9IDMKKyAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoaW50KGNvZWZmPDApLCBzdHIoYWJzKGNvZWZmKSksIC1wbGFjZXMpCisKKyAgICAgICAgY29udGV4dCA9IGNvbnRleHQuX3NoYWxsb3dfY29weSgpCisgICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5fc2V0X3JvdW5kaW5nKFJPVU5EX0hBTEZfRVZFTikKKyAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKKyAgICAgICAgY29udGV4dC5yb3VuZGluZyA9IHJvdW5kaW5nCisgICAgICAgIHJldHVybiBhbnMKKworICAgIGRlZiBsb2diKHNlbGYsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIiBSZXR1cm5zIHRoZSBleHBvbmVudCBvZiB0aGUgbWFnbml0dWRlIG9mIHNlbGYncyBNU0QuCisKKyAgICAgICAgVGhlIHJlc3VsdCBpcyB0aGUgaW50ZWdlciB3aGljaCBpcyB0aGUgZXhwb25lbnQgb2YgdGhlIG1hZ25pdHVkZQorICAgICAgICBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWdpdCBvZiBzZWxmIChhcyB0aG91Z2ggaXQgd2VyZSB0cnVuY2F0ZWQKKyAgICAgICAgdG8gYSBzaW5nbGUgZGlnaXQgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIHZhbHVlIG9mIHRoYXQgZGlnaXQgYW5kCisgICAgICAgIHdpdGhvdXQgbGltaXRpbmcgdGhlIHJlc3VsdGluZyBleHBvbmVudCkuCisgICAgICAgICIiIgorICAgICAgICAjIGxvZ2IoTmFOKSA9IE5hTgorICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICAjIGxvZ2IoKy8tSW5mKSA9ICtJbmYKKyAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgcmV0dXJuIF9JbmZpbml0eQorCisgICAgICAgICMgbG9nYigwKSA9IC1JbmYsIERpdmlzaW9uQnlaZXJvCisgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uQnlaZXJvLCAnbG9nYigwKScsIDEpCisKKyAgICAgICAgIyBvdGhlcndpc2UsIHNpbXBseSByZXR1cm4gdGhlIGFkanVzdGVkIGV4cG9uZW50IG9mIHNlbGYsIGFzIGEKKyAgICAgICAgIyBEZWNpbWFsLiAgTm90ZSB0aGF0IG5vIGF0dGVtcHQgaXMgbWFkZSB0byBmaXQgdGhlIHJlc3VsdAorICAgICAgICAjIGludG8gdGhlIGN1cnJlbnQgY29udGV4dC4KKyAgICAgICAgYW5zID0gRGVjaW1hbChzZWxmLmFkanVzdGVkKCkpCisgICAgICAgIHJldHVybiBhbnMuX2ZpeChjb250ZXh0KQorCisgICAgZGVmIF9pc2xvZ2ljYWwoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgYSBsb2dpY2FsIG9wZXJhbmQuCisKKyAgICAgICAgRm9yIGJlaW5nIGxvZ2ljYWwsIGl0IG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyIHdpdGggYSBzaWduIG9mIDAsCisgICAgICAgIGFuIGV4cG9uZW50IG9mIDAsIGFuZCBhIGNvZWZmaWNpZW50IHdob3NlIGRpZ2l0cyBtdXN0IGFsbCBiZQorICAgICAgICBlaXRoZXIgMCBvciAxLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc2lnbiAhPSAwIG9yIHNlbGYuX2V4cCAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBkaWcgaW4gc2VsZi5faW50OgorICAgICAgICAgICAgaWYgZGlnIG5vdCBpbiAnMDEnOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9maWxsX2xvZ2ljYWwoc2VsZiwgY29udGV4dCwgb3BhLCBvcGIpOgorICAgICAgICBkaWYgPSBjb250ZXh0LnByZWMgLSBsZW4ob3BhKQorICAgICAgICBpZiBkaWYgPiAwOgorICAgICAgICAgICAgb3BhID0gJzAnKmRpZiArIG9wYQorICAgICAgICBlbGlmIGRpZiA8IDA6CisgICAgICAgICAgICBvcGEgPSBvcGFbLWNvbnRleHQucHJlYzpdCisgICAgICAgIGRpZiA9IGNvbnRleHQucHJlYyAtIGxlbihvcGIpCisgICAgICAgIGlmIGRpZiA+IDA6CisgICAgICAgICAgICBvcGIgPSAnMCcqZGlmICsgb3BiCisgICAgICAgIGVsaWYgZGlmIDwgMDoKKyAgICAgICAgICAgIG9wYiA9IG9wYlstY29udGV4dC5wcmVjOl0KKyAgICAgICAgcmV0dXJuIG9wYSwgb3BiCisKKyAgICBkZWYgbG9naWNhbF9hbmQoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIkFwcGxpZXMgYW4gJ2FuZCcgb3BlcmF0aW9uIGJldHdlZW4gc2VsZiBhbmQgb3RoZXIncyBkaWdpdHMuIiIiCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2lzbG9naWNhbCgpIG9yIG5vdCBvdGhlci5faXNsb2dpY2FsKCk6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbikKKworICAgICAgICAjIGZpbGwgdG8gY29udGV4dC5wcmVjCisgICAgICAgIChvcGEsIG9wYikgPSBzZWxmLl9maWxsX2xvZ2ljYWwoY29udGV4dCwgc2VsZi5faW50LCBvdGhlci5faW50KQorCisgICAgICAgICMgbWFrZSB0aGUgb3BlcmF0aW9uLCBhbmQgY2xlYW4gc3RhcnRpbmcgemVyb2VzCisgICAgICAgIHJlc3VsdCA9ICIiLmpvaW4oW3N0cihpbnQoYSkmaW50KGIpKSBmb3IgYSxiIGluIHppcChvcGEsb3BiKV0pCisgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsIHJlc3VsdC5sc3RyaXAoJzAnKSBvciAnMCcsIDApCisKKyAgICBkZWYgbG9naWNhbF9pbnZlcnQoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiSW52ZXJ0IGFsbCBpdHMgZGlnaXRzLiIiIgorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIHJldHVybiBzZWxmLmxvZ2ljYWxfeG9yKF9kZWNfZnJvbV90cmlwbGUoMCwnMScqY29udGV4dC5wcmVjLDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KQorCisgICAgZGVmIGxvZ2ljYWxfb3Ioc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIkFwcGxpZXMgYW4gJ29yJyBvcGVyYXRpb24gYmV0d2VlbiBzZWxmIGFuZCBvdGhlcidzIGRpZ2l0cy4iIiIKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICBpZiBub3Qgc2VsZi5faXNsb2dpY2FsKCkgb3Igbm90IG90aGVyLl9pc2xvZ2ljYWwoKToKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uKQorCisgICAgICAgICMgZmlsbCB0byBjb250ZXh0LnByZWMKKyAgICAgICAgKG9wYSwgb3BiKSA9IHNlbGYuX2ZpbGxfbG9naWNhbChjb250ZXh0LCBzZWxmLl9pbnQsIG90aGVyLl9pbnQpCisKKyAgICAgICAgIyBtYWtlIHRoZSBvcGVyYXRpb24sIGFuZCBjbGVhbiBzdGFydGluZyB6ZXJvZXMKKyAgICAgICAgcmVzdWx0ID0gIiIuam9pbihbc3RyKGludChhKXxpbnQoYikpIGZvciBhLGIgaW4gemlwKG9wYSxvcGIpXSkKKyAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoMCwgcmVzdWx0LmxzdHJpcCgnMCcpIG9yICcwJywgMCkKKworICAgIGRlZiBsb2dpY2FsX3hvcihzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiQXBwbGllcyBhbiAneG9yJyBvcGVyYXRpb24gYmV0d2VlbiBzZWxmIGFuZCBvdGhlcidzIGRpZ2l0cy4iIiIKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICBpZiBub3Qgc2VsZi5faXNsb2dpY2FsKCkgb3Igbm90IG90aGVyLl9pc2xvZ2ljYWwoKToKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uKQorCisgICAgICAgICMgZmlsbCB0byBjb250ZXh0LnByZWMKKyAgICAgICAgKG9wYSwgb3BiKSA9IHNlbGYuX2ZpbGxfbG9naWNhbChjb250ZXh0LCBzZWxmLl9pbnQsIG90aGVyLl9pbnQpCisKKyAgICAgICAgIyBtYWtlIHRoZSBvcGVyYXRpb24sIGFuZCBjbGVhbiBzdGFydGluZyB6ZXJvZXMKKyAgICAgICAgcmVzdWx0ID0gIiIuam9pbihbc3RyKGludChhKV5pbnQoYikpIGZvciBhLGIgaW4gemlwKG9wYSxvcGIpXSkKKyAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoMCwgcmVzdWx0LmxzdHJpcCgnMCcpIG9yICcwJywgMCkKKworICAgIGRlZiBtYXhfbWFnKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJDb21wYXJlcyB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLiIiIgorICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCisKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICAjIElmIG9uZSBvcGVyYW5kIGlzIGEgcXVpZXQgTmFOIGFuZCB0aGUgb3RoZXIgaXMgbnVtYmVyLCB0aGVuIHRoZQorICAgICAgICAgICAgIyBudW1iZXIgaXMgYWx3YXlzIHJldHVybmVkCisgICAgICAgICAgICBzbiA9IHNlbGYuX2lzbmFuKCkKKyAgICAgICAgICAgIG9uID0gb3RoZXIuX2lzbmFuKCkKKyAgICAgICAgICAgIGlmIHNuIG9yIG9uOgorICAgICAgICAgICAgICAgIGlmIG9uID09IDEgYW5kIHNuID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgoY29udGV4dCkKKyAgICAgICAgICAgICAgICBpZiBzbiA9PSAxIGFuZCBvbiA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIuX2ZpeChjb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorCisgICAgICAgIGMgPSBzZWxmLmNvcHlfYWJzKCkuX2NtcChvdGhlci5jb3B5X2FicygpKQorICAgICAgICBpZiBjID09IDA6CisgICAgICAgICAgICBjID0gc2VsZi5jb21wYXJlX3RvdGFsKG90aGVyKQorCisgICAgICAgIGlmIGMgPT0gLTE6CisgICAgICAgICAgICBhbnMgPSBvdGhlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYW5zID0gc2VsZgorCisgICAgICAgIHJldHVybiBhbnMuX2ZpeChjb250ZXh0KQorCisgICAgZGVmIG1pbl9tYWcoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgbnVtZXJpY2FsbHkgd2l0aCB0aGVpciBzaWduIGlnbm9yZWQuIiIiCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlci5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgICMgSWYgb25lIG9wZXJhbmQgaXMgYSBxdWlldCBOYU4gYW5kIHRoZSBvdGhlciBpcyBudW1iZXIsIHRoZW4gdGhlCisgICAgICAgICAgICAjIG51bWJlciBpcyBhbHdheXMgcmV0dXJuZWQKKyAgICAgICAgICAgIHNuID0gc2VsZi5faXNuYW4oKQorICAgICAgICAgICAgb24gPSBvdGhlci5faXNuYW4oKQorICAgICAgICAgICAgaWYgc24gb3Igb246CisgICAgICAgICAgICAgICAgaWYgb24gPT0gMSBhbmQgc24gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeChjb250ZXh0KQorICAgICAgICAgICAgICAgIGlmIHNuID09IDEgYW5kIG9uID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlci5fZml4KGNvbnRleHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCisKKyAgICAgICAgYyA9IHNlbGYuY29weV9hYnMoKS5fY21wKG90aGVyLmNvcHlfYWJzKCkpCisgICAgICAgIGlmIGMgPT0gMDoKKyAgICAgICAgICAgIGMgPSBzZWxmLmNvbXBhcmVfdG90YWwob3RoZXIpCisKKyAgICAgICAgaWYgYyA9PSAtMToKKyAgICAgICAgICAgIGFucyA9IHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFucyA9IG90aGVyCisKKyAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCisKKyAgICBkZWYgbmV4dF9taW51cyhzZWxmLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIHNtYWxsZXIgdGhhbiBpdHNlbGYuIiIiCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSA9PSAtMToKKyAgICAgICAgICAgIHJldHVybiBfTmVnYXRpdmVJbmZpbml0eQorICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgPT0gMToKKyAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsICc5Jypjb250ZXh0LnByZWMsIGNvbnRleHQuRXRvcCgpKQorCisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNvcHkoKQorICAgICAgICBjb250ZXh0Ll9zZXRfcm91bmRpbmcoUk9VTkRfRkxPT1IpCisgICAgICAgIGNvbnRleHQuX2lnbm9yZV9hbGxfZmxhZ3MoKQorICAgICAgICBuZXdfc2VsZiA9IHNlbGYuX2ZpeChjb250ZXh0KQorICAgICAgICBpZiBuZXdfc2VsZiAhPSBzZWxmOgorICAgICAgICAgICAgcmV0dXJuIG5ld19zZWxmCisgICAgICAgIHJldHVybiBzZWxmLl9fc3ViX18oX2RlY19mcm9tX3RyaXBsZSgwLCAnMScsIGNvbnRleHQuRXRpbnkoKS0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KQorCisgICAgZGVmIG5leHRfcGx1cyhzZWxmLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzbWFsbGVzdCByZXByZXNlbnRhYmxlIG51bWJlciBsYXJnZXIgdGhhbiBpdHNlbGYuIiIiCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIF9JbmZpbml0eQorICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgPT0gLTE6CisgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZSgxLCAnOScqY29udGV4dC5wcmVjLCBjb250ZXh0LkV0b3AoKSkKKworICAgICAgICBjb250ZXh0ID0gY29udGV4dC5jb3B5KCkKKyAgICAgICAgY29udGV4dC5fc2V0X3JvdW5kaW5nKFJPVU5EX0NFSUxJTkcpCisgICAgICAgIGNvbnRleHQuX2lnbm9yZV9hbGxfZmxhZ3MoKQorICAgICAgICBuZXdfc2VsZiA9IHNlbGYuX2ZpeChjb250ZXh0KQorICAgICAgICBpZiBuZXdfc2VsZiAhPSBzZWxmOgorICAgICAgICAgICAgcmV0dXJuIG5ld19zZWxmCisgICAgICAgIHJldHVybiBzZWxmLl9fYWRkX18oX2RlY19mcm9tX3RyaXBsZSgwLCAnMScsIGNvbnRleHQuRXRpbnkoKS0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KQorCisgICAgZGVmIG5leHRfdG93YXJkKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgY2xvc2VzdCB0byBzZWxmLCBpbiB0aGUgZGlyZWN0aW9uIHRvd2FyZHMgb3RoZXIuCisKKyAgICAgICAgVGhlIHJlc3VsdCBpcyB0aGUgY2xvc2VzdCByZXByZXNlbnRhYmxlIG51bWJlciB0byBzZWxmCisgICAgICAgIChleGNsdWRpbmcgc2VsZikgdGhhdCBpcyBpbiB0aGUgZGlyZWN0aW9uIHRvd2FyZHMgb3RoZXIsCisgICAgICAgIHVubGVzcyBib3RoIGhhdmUgdGhlIHNhbWUgdmFsdWUuICBJZiB0aGUgdHdvIG9wZXJhbmRzIGFyZQorICAgICAgICBudW1lcmljYWxseSBlcXVhbCwgdGhlbiB0aGUgcmVzdWx0IGlzIGEgY29weSBvZiBzZWxmIHdpdGggdGhlCisgICAgICAgIHNpZ24gc2V0IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBzaWduIG9mIG90aGVyLgorICAgICAgICAiIiIKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQorCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgY29tcGFyaXNvbiA9IHNlbGYuX2NtcChvdGhlcikKKyAgICAgICAgaWYgY29tcGFyaXNvbiA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29weV9zaWduKG90aGVyKQorCisgICAgICAgIGlmIGNvbXBhcmlzb24gPT0gLTE6CisgICAgICAgICAgICBhbnMgPSBzZWxmLm5leHRfcGx1cyhjb250ZXh0KQorICAgICAgICBlbHNlOiAjIGNvbXBhcmlzb24gPT0gMQorICAgICAgICAgICAgYW5zID0gc2VsZi5uZXh0X21pbnVzKGNvbnRleHQpCisKKyAgICAgICAgIyBkZWNpZGUgd2hpY2ggZmxhZ3MgdG8gcmFpc2UgdXNpbmcgdmFsdWUgb2YgYW5zCisgICAgICAgIGlmIGFucy5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoT3ZlcmZsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW5maW5pdGUgcmVzdWx0IGZyb20gbmV4dF90b3dhcmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zLl9zaWduKQorICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoSW5leGFjdCkKKyAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFJvdW5kZWQpCisgICAgICAgIGVsaWYgYW5zLmFkanVzdGVkKCkgPCBjb250ZXh0LkVtaW46CisgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihVbmRlcmZsb3cpCisgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihTdWJub3JtYWwpCisgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbmV4YWN0KQorICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoUm91bmRlZCkKKyAgICAgICAgICAgICMgaWYgcHJlY2lzaW9uID09IDEgdGhlbiB3ZSBkb24ndCByYWlzZSBDbGFtcGVkIGZvciBhCisgICAgICAgICAgICAjIHJlc3VsdCAwRS1FdGlueS4KKyAgICAgICAgICAgIGlmIG5vdCBhbnM6CisgICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoQ2xhbXBlZCkKKworICAgICAgICByZXR1cm4gYW5zCisKKyAgICBkZWYgbnVtYmVyX2NsYXNzKHNlbGYsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgYW4gaW5kaWNhdGlvbiBvZiB0aGUgY2xhc3Mgb2Ygc2VsZi4KKworICAgICAgICBUaGUgY2xhc3MgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKKyAgICAgICAgICBzTmFOCisgICAgICAgICAgTmFOCisgICAgICAgICAgLUluZmluaXR5CisgICAgICAgICAgLU5vcm1hbAorICAgICAgICAgIC1TdWJub3JtYWwKKyAgICAgICAgICAtWmVybworICAgICAgICAgICtaZXJvCisgICAgICAgICAgK1N1Ym5vcm1hbAorICAgICAgICAgICtOb3JtYWwKKyAgICAgICAgICArSW5maW5pdHkKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuaXNfc25hbigpOgorICAgICAgICAgICAgcmV0dXJuICJzTmFOIgorICAgICAgICBpZiBzZWxmLmlzX3FuYW4oKToKKyAgICAgICAgICAgIHJldHVybiAiTmFOIgorICAgICAgICBpbmYgPSBzZWxmLl9pc2luZmluaXR5KCkKKyAgICAgICAgaWYgaW5mID09IDE6CisgICAgICAgICAgICByZXR1cm4gIitJbmZpbml0eSIKKyAgICAgICAgaWYgaW5mID09IC0xOgorICAgICAgICAgICAgcmV0dXJuICItSW5maW5pdHkiCisgICAgICAgIGlmIHNlbGYuaXNfemVybygpOgorICAgICAgICAgICAgaWYgc2VsZi5fc2lnbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIi1aZXJvIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIitaZXJvIgorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIGlmIHNlbGYuaXNfc3Vibm9ybWFsKGNvbnRleHQ9Y29udGV4dCk6CisgICAgICAgICAgICBpZiBzZWxmLl9zaWduOgorICAgICAgICAgICAgICAgIHJldHVybiAiLVN1Ym5vcm1hbCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIrU3Vibm9ybWFsIgorICAgICAgICAjIGp1c3QgYSBub3JtYWwsIHJlZ3VsYXIsIGJvcmluZyBudW1iZXIsIDopCisgICAgICAgIGlmIHNlbGYuX3NpZ246CisgICAgICAgICAgICByZXR1cm4gIi1Ob3JtYWwiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIitOb3JtYWwiCisKKyAgICBkZWYgcmFkaXgoc2VsZik6CisgICAgICAgICIiIkp1c3QgcmV0dXJucyAxMCwgYXMgdGhpcyBpcyBEZWNpbWFsLCA6KSIiIgorICAgICAgICByZXR1cm4gRGVjaW1hbCgxMCkKKworICAgIGRlZiByb3RhdGUoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybnMgYSByb3RhdGVkIGNvcHkgb2Ygc2VsZiwgdmFsdWUtb2Ytb3RoZXIgdGltZXMuIiIiCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKKworICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCisKKyAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKKyAgICAgICAgaWYgYW5zOgorICAgICAgICAgICAgcmV0dXJuIGFucworCisgICAgICAgIGlmIG90aGVyLl9leHAgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uKQorICAgICAgICBpZiBub3QgKC1jb250ZXh0LnByZWMgPD0gaW50KG90aGVyKSA8PSBjb250ZXh0LnByZWMpOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24pCisKKyAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgorICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKKworICAgICAgICAjIGdldCB2YWx1ZXMsIHBhZCBpZiBuZWNlc3NhcnkKKyAgICAgICAgdG9yb3QgPSBpbnQob3RoZXIpCisgICAgICAgIHJvdGRpZyA9IHNlbGYuX2ludAorICAgICAgICB0b3BhZCA9IGNvbnRleHQucHJlYyAtIGxlbihyb3RkaWcpCisgICAgICAgIGlmIHRvcGFkID4gMDoKKyAgICAgICAgICAgIHJvdGRpZyA9ICcwJyp0b3BhZCArIHJvdGRpZworICAgICAgICBlbGlmIHRvcGFkIDwgMDoKKyAgICAgICAgICAgIHJvdGRpZyA9IHJvdGRpZ1stdG9wYWQ6XQorCisgICAgICAgICMgbGV0J3Mgcm90YXRlIQorICAgICAgICByb3RhdGVkID0gcm90ZGlnW3Rvcm90Ol0gKyByb3RkaWdbOnRvcm90XQorICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVkLmxzdHJpcCgnMCcpIG9yICcwJywgc2VsZi5fZXhwKQorCisgICAgZGVmIHNjYWxlYihzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyBzZWxmIG9wZXJhbmQgYWZ0ZXIgYWRkaW5nIHRoZSBzZWNvbmQgdmFsdWUgdG8gaXRzIGV4cC4iIiIKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKKworICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQorICAgICAgICBpZiBhbnM6CisgICAgICAgICAgICByZXR1cm4gYW5zCisKKyAgICAgICAgaWYgb3RoZXIuX2V4cCAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24pCisgICAgICAgIGxpbWluZiA9IC0yICogKGNvbnRleHQuRW1heCArIGNvbnRleHQucHJlYykKKyAgICAgICAgbGltc3VwID0gIDIgKiAoY29udGV4dC5FbWF4ICsgY29udGV4dC5wcmVjKQorICAgICAgICBpZiBub3QgKGxpbWluZiA8PSBpbnQob3RoZXIpIDw9IGxpbXN1cCk6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbikKKworICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCk6CisgICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQorCisgICAgICAgIGQgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sIHNlbGYuX2ludCwgc2VsZi5fZXhwICsgaW50KG90aGVyKSkKKyAgICAgICAgZCA9IGQuX2ZpeChjb250ZXh0KQorICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIHNoaWZ0KHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIGEgc2hpZnRlZCBjb3B5IG9mIHNlbGYsIHZhbHVlLW9mLW90aGVyIHRpbWVzLiIiIgorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQorCisgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCisgICAgICAgIGlmIGFuczoKKyAgICAgICAgICAgIHJldHVybiBhbnMKKworICAgICAgICBpZiBvdGhlci5fZXhwICE9IDA6CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbikKKyAgICAgICAgaWYgbm90ICgtY29udGV4dC5wcmVjIDw9IGludChvdGhlcikgPD0gY29udGV4dC5wcmVjKToKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uKQorCisgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKToKKyAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCisKKyAgICAgICAgIyBnZXQgdmFsdWVzLCBwYWQgaWYgbmVjZXNzYXJ5CisgICAgICAgIHRvcm90ID0gaW50KG90aGVyKQorICAgICAgICByb3RkaWcgPSBzZWxmLl9pbnQKKyAgICAgICAgdG9wYWQgPSBjb250ZXh0LnByZWMgLSBsZW4ocm90ZGlnKQorICAgICAgICBpZiB0b3BhZCA+IDA6CisgICAgICAgICAgICByb3RkaWcgPSAnMCcqdG9wYWQgKyByb3RkaWcKKyAgICAgICAgZWxpZiB0b3BhZCA8IDA6CisgICAgICAgICAgICByb3RkaWcgPSByb3RkaWdbLXRvcGFkOl0KKworICAgICAgICAjIGxldCdzIHNoaWZ0IQorICAgICAgICBpZiB0b3JvdCA8IDA6CisgICAgICAgICAgICBzaGlmdGVkID0gcm90ZGlnWzp0b3JvdF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNoaWZ0ZWQgPSByb3RkaWcgKyAnMCcqdG9yb3QKKyAgICAgICAgICAgIHNoaWZ0ZWQgPSBzaGlmdGVkWy1jb250ZXh0LnByZWM6XQorCisgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdGVkLmxzdHJpcCgnMCcpIG9yICcwJywgc2VsZi5fZXhwKQorCisgICAgIyBTdXBwb3J0IGZvciBwaWNrbGluZywgY29weSwgYW5kIGRlZXBjb3B5CisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIChzdHIoc2VsZiksKSkKKworICAgIGRlZiBfX2NvcHlfXyhzZWxmKToKKyAgICAgICAgaWYgdHlwZShzZWxmKSBpcyBEZWNpbWFsOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYgICAgICMgSSdtIGltbXV0YWJsZTsgdGhlcmVmb3JlIEkgYW0gbXkgb3duIGNsb25lCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzdHIoc2VsZikpCisKKyAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW8pOgorICAgICAgICBpZiB0eXBlKHNlbGYpIGlzIERlY2ltYWw6CisgICAgICAgICAgICByZXR1cm4gc2VsZiAgICAgIyBNeSBjb21wb25lbnRzIGFyZSBhbHNvIGltbXV0YWJsZQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc3RyKHNlbGYpKQorCisgICAgIyBQRVAgMzEwMSBzdXBwb3J0LiAgdGhlIF9sb2NhbGVjb252IGtleXdvcmQgYXJndW1lbnQgc2hvdWxkIGJlCisgICAgIyBjb25zaWRlcmVkIHByaXZhdGU6IGl0J3MgcHJvdmlkZWQgZm9yIGVhc2Ugb2YgdGVzdGluZyBvbmx5LgorICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWNpZmllciwgY29udGV4dD1Ob25lLCBfbG9jYWxlY29udj1Ob25lKToKKyAgICAgICAgIiIiRm9ybWF0IGEgRGVjaW1hbCBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHNwZWNpZmllci4KKworICAgICAgICBUaGUgc3BlY2lmaWVyIHNob3VsZCBiZSBhIHN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIsIHdpdGggdGhlCisgICAgICAgIGZvcm0gZGVzY3JpYmVkIGluIFBFUCAzMTAxLiAgRm9ybWF0dGluZyB0eXBlcyAnZScsICdFJywgJ2YnLAorICAgICAgICAnRicsICdnJywgJ0cnLCAnbicgYW5kICclJyBhcmUgc3VwcG9ydGVkLiAgSWYgdGhlIGZvcm1hdHRpbmcKKyAgICAgICAgdHlwZSBpcyBvbWl0dGVkIGl0IGRlZmF1bHRzIHRvICdnJyBvciAnRycsIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgdmFsdWUgb2YgY29udGV4dC5jYXBpdGFscy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBOb3RlOiBQRVAgMzEwMSBzYXlzIHRoYXQgaWYgdGhlIHR5cGUgaXMgbm90IHByZXNlbnQgdGhlbgorICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAgICMgV2UgdGFrZSB0aGUgbGliZXJ0eSBvZiBpZ25vcmluZyB0aGlzIHJlcXVpcmVtZW50IGZvcgorICAgICAgICAjIERlY2ltYWwtLS1pdCdzIHByZXN1bWFibHkgdGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQKKyAgICAgICAgIyBmb3JtYXQoZmxvYXQsICcnKSBiZWhhdmVzIHNpbWlsYXJseSB0byBzdHIoZmxvYXQpLgorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCisKKyAgICAgICAgc3BlYyA9IF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyKHNwZWNpZmllciwgX2xvY2FsZWNvbnY9X2xvY2FsZWNvbnYpCisKKyAgICAgICAgIyBzcGVjaWFsIHZhbHVlcyBkb24ndCBjYXJlIGFib3V0IHRoZSB0eXBlIG9yIHByZWNpc2lvbgorICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgorICAgICAgICAgICAgc2lnbiA9IF9mb3JtYXRfc2lnbihzZWxmLl9zaWduLCBzcGVjKQorICAgICAgICAgICAgYm9keSA9IHN0cihzZWxmLmNvcHlfYWJzKCkpCisgICAgICAgICAgICBpZiBzcGVjWyd0eXBlJ10gPT0gJyUnOgorICAgICAgICAgICAgICAgIGJvZHkgKz0gJyUnCisgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzaWduLCBib2R5LCBzcGVjKQorCisgICAgICAgICMgYSB0eXBlIG9mIE5vbmUgZGVmYXVsdHMgdG8gJ2cnIG9yICdHJywgZGVwZW5kaW5nIG9uIGNvbnRleHQKKyAgICAgICAgaWYgc3BlY1sndHlwZSddIGlzIE5vbmU6CisgICAgICAgICAgICBzcGVjWyd0eXBlJ10gPSBbJ2cnLCAnRyddW2NvbnRleHQuY2FwaXRhbHNdCisKKyAgICAgICAgIyBpZiB0eXBlIGlzICclJywgYWRqdXN0IGV4cG9uZW50IG9mIHNlbGYgYWNjb3JkaW5nbHkKKyAgICAgICAgaWYgc3BlY1sndHlwZSddID09ICclJzoKKyAgICAgICAgICAgIHNlbGYgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sIHNlbGYuX2ludCwgc2VsZi5fZXhwKzIpCisKKyAgICAgICAgIyByb3VuZCBpZiBuZWNlc3NhcnksIHRha2luZyByb3VuZGluZyBtb2RlIGZyb20gdGhlIGNvbnRleHQKKyAgICAgICAgcm91bmRpbmcgPSBjb250ZXh0LnJvdW5kaW5nCisgICAgICAgIHByZWNpc2lvbiA9IHNwZWNbJ3ByZWNpc2lvbiddCisgICAgICAgIGlmIHByZWNpc2lvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl9yb3VuZChwcmVjaXNpb24rMSwgcm91bmRpbmcpCisgICAgICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKKyAgICAgICAgICAgICAgICBzZWxmID0gc2VsZi5fcmVzY2FsZSgtcHJlY2lzaW9uLCByb3VuZGluZykKKyAgICAgICAgICAgIGVsaWYgc3BlY1sndHlwZSddIGluICdnRycgYW5kIGxlbihzZWxmLl9pbnQpID4gcHJlY2lzaW9uOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl9yb3VuZChwcmVjaXNpb24sIHJvdW5kaW5nKQorICAgICAgICAjIHNwZWNpYWwgY2FzZTogemVyb3Mgd2l0aCBhIHBvc2l0aXZlIGV4cG9uZW50IGNhbid0IGJlCisgICAgICAgICMgcmVwcmVzZW50ZWQgaW4gZml4ZWQgcG9pbnQ7IHJlc2NhbGUgdGhlbSB0byAwZTAuCisgICAgICAgIGlmIG5vdCBzZWxmIGFuZCBzZWxmLl9leHAgPiAwIGFuZCBzcGVjWyd0eXBlJ10gaW4gJ2ZGJSc6CisgICAgICAgICAgICBzZWxmID0gc2VsZi5fcmVzY2FsZSgwLCByb3VuZGluZykKKworICAgICAgICAjIGZpZ3VyZSBvdXQgcGxhY2VtZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50CisgICAgICAgIGxlZnRkaWdpdHMgPSBzZWxmLl9leHAgKyBsZW4oc2VsZi5faW50KQorICAgICAgICBpZiBzcGVjWyd0eXBlJ10gaW4gJ2VFJzoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmIGFuZCBwcmVjaXNpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZG90cGxhY2UgPSAxIC0gcHJlY2lzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRvdHBsYWNlID0gMQorICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKKyAgICAgICAgICAgIGRvdHBsYWNlID0gbGVmdGRpZ2l0cworICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZ0cnOgorICAgICAgICAgICAgaWYgc2VsZi5fZXhwIDw9IDAgYW5kIGxlZnRkaWdpdHMgPiAtNjoKKyAgICAgICAgICAgICAgICBkb3RwbGFjZSA9IGxlZnRkaWdpdHMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZG90cGxhY2UgPSAxCisKKyAgICAgICAgIyBmaW5kIGRpZ2l0cyBiZWZvcmUgYW5kIGFmdGVyIGRlY2ltYWwgcG9pbnQsIGFuZCBnZXQgZXhwb25lbnQKKyAgICAgICAgaWYgZG90cGxhY2UgPCAwOgorICAgICAgICAgICAgaW50cGFydCA9ICcwJworICAgICAgICAgICAgZnJhY3BhcnQgPSAnMCcqKC1kb3RwbGFjZSkgKyBzZWxmLl9pbnQKKyAgICAgICAgZWxpZiBkb3RwbGFjZSA+IGxlbihzZWxmLl9pbnQpOgorICAgICAgICAgICAgaW50cGFydCA9IHNlbGYuX2ludCArICcwJyooZG90cGxhY2UtbGVuKHNlbGYuX2ludCkpCisgICAgICAgICAgICBmcmFjcGFydCA9ICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbnRwYXJ0ID0gc2VsZi5faW50Wzpkb3RwbGFjZV0gb3IgJzAnCisgICAgICAgICAgICBmcmFjcGFydCA9IHNlbGYuX2ludFtkb3RwbGFjZTpdCisgICAgICAgIGV4cCA9IGxlZnRkaWdpdHMtZG90cGxhY2UKKworICAgICAgICAjIGRvbmUgd2l0aCB0aGUgZGVjaW1hbC1zcGVjaWZpYyBzdHVmZjsgIGhhbmQgb3ZlciB0aGUgcmVzdAorICAgICAgICAjIG9mIHRoZSBmb3JtYXR0aW5nIHRvIHRoZSBfZm9ybWF0X251bWJlciBmdW5jdGlvbgorICAgICAgICByZXR1cm4gX2Zvcm1hdF9udW1iZXIoc2VsZi5fc2lnbiwgaW50cGFydCwgZnJhY3BhcnQsIGV4cCwgc3BlYykKKworZGVmIF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgY29lZmZpY2llbnQsIGV4cG9uZW50LCBzcGVjaWFsPUZhbHNlKToKKyAgICAiIiJDcmVhdGUgYSBkZWNpbWFsIGluc3RhbmNlIGRpcmVjdGx5LCB3aXRob3V0IGFueSB2YWxpZGF0aW9uLAorICAgIG5vcm1hbGl6YXRpb24gKGUuZy4gcmVtb3ZhbCBvZiBsZWFkaW5nIHplcm9zKSBvciBhcmd1bWVudAorICAgIGNvbnZlcnNpb24uCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGZvciAqaW50ZXJuYWwgdXNlIG9ubHkqLgorICAgICIiIgorCisgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKERlY2ltYWwpCisgICAgc2VsZi5fc2lnbiA9IHNpZ24KKyAgICBzZWxmLl9pbnQgPSBjb2VmZmljaWVudAorICAgIHNlbGYuX2V4cCA9IGV4cG9uZW50CisgICAgc2VsZi5faXNfc3BlY2lhbCA9IHNwZWNpYWwKKworICAgIHJldHVybiBzZWxmCisKKyMgUmVnaXN0ZXIgRGVjaW1hbCBhcyBhIGtpbmQgb2YgTnVtYmVyIChhbiBhYnN0cmFjdCBiYXNlIGNsYXNzKS4KKyMgSG93ZXZlciwgZG8gbm90IHJlZ2lzdGVyIGl0IGFzIFJlYWwgKGJlY2F1c2UgRGVjaW1hbHMgYXJlIG5vdAorIyBpbnRlcm9wZXJhYmxlIHdpdGggZmxvYXRzKS4KK19udW1iZXJzLk51bWJlci5yZWdpc3RlcihEZWNpbWFsKQorCisKKyMjIyMjIENvbnRleHQgY2xhc3MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBfQ29udGV4dE1hbmFnZXIob2JqZWN0KToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgY2xhc3MgdG8gc3VwcG9ydCBsb2NhbGNvbnRleHQoKS4KKworICAgICAgU2V0cyBhIGNvcHkgb2YgdGhlIHN1cHBsaWVkIGNvbnRleHQgaW4gX19lbnRlcl9fKCkgYW5kIHJlc3RvcmVzCisgICAgICB0aGUgcHJldmlvdXMgZGVjaW1hbCBjb250ZXh0IGluIF9fZXhpdF9fKCkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3X2NvbnRleHQpOgorICAgICAgICBzZWxmLm5ld19jb250ZXh0ID0gbmV3X2NvbnRleHQuY29weSgpCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zYXZlZF9jb250ZXh0ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIHNldGNvbnRleHQoc2VsZi5uZXdfY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHNlbGYubmV3X2NvbnRleHQKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgorICAgICAgICBzZXRjb250ZXh0KHNlbGYuc2F2ZWRfY29udGV4dCkKKworY2xhc3MgQ29udGV4dChvYmplY3QpOgorICAgICIiIkNvbnRhaW5zIHRoZSBjb250ZXh0IGZvciBhIERlY2ltYWwgaW5zdGFuY2UuCisKKyAgICBDb250YWluczoKKyAgICBwcmVjIC0gcHJlY2lzaW9uIChmb3IgdXNlIGluIHJvdW5kaW5nLCBkaXZpc2lvbiwgc3F1YXJlIHJvb3RzLi4pCisgICAgcm91bmRpbmcgLSByb3VuZGluZyB0eXBlIChob3cgeW91IHJvdW5kKQorICAgIHRyYXBzIC0gSWYgdHJhcHNbZXhjZXB0aW9uXSA9IDEsIHRoZW4gdGhlIGV4Y2VwdGlvbiBpcworICAgICAgICAgICAgICAgICAgICByYWlzZWQgd2hlbiBpdCBpcyBjYXVzZWQuICBPdGhlcndpc2UsIGEgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWQgaW4uCisgICAgZmxhZ3MgIC0gV2hlbiBhbiBleGNlcHRpb24gaXMgY2F1c2VkLCBmbGFnc1tleGNlcHRpb25dIGlzIHNldC4KKyAgICAgICAgICAgICAoV2hldGhlciBvciBub3QgdGhlIHRyYXBfZW5hYmxlciBpcyBzZXQpCisgICAgICAgICAgICAgU2hvdWxkIGJlIHJlc2V0IGJ5IHVzZXIgb2YgRGVjaW1hbCBpbnN0YW5jZS4KKyAgICBFbWluIC0gICBNaW5pbXVtIGV4cG9uZW50CisgICAgRW1heCAtICAgTWF4aW11bSBleHBvbmVudAorICAgIGNhcGl0YWxzIC0gICAgICBJZiAxLCAxKjEwXjEgaXMgcHJpbnRlZCBhcyAxRSsxLgorICAgICAgICAgICAgICAgICAgICBJZiAwLCBwcmludGVkIGFzIDFlMQorICAgIGNsYW1wIC0gIElmIDEsIGNoYW5nZSBleHBvbmVudHMgaWYgdG9vIGhpZ2ggKERlZmF1bHQgMCkKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVjPU5vbmUsIHJvdW5kaW5nPU5vbmUsIEVtaW49Tm9uZSwgRW1heD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBjYXBpdGFscz1Ob25lLCBjbGFtcD1Ob25lLCBmbGFncz1Ob25lLCB0cmFwcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBfaWdub3JlZF9mbGFncz1Ob25lKToKKyAgICAgICAgIyBTZXQgZGVmYXVsdHM7IGZvciBldmVyeXRoaW5nIGV4Y2VwdCBmbGFncyBhbmQgX2lnbm9yZWRfZmxhZ3MsCisgICAgICAgICMgaW5oZXJpdCBmcm9tIERlZmF1bHRDb250ZXh0LgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYyA9IERlZmF1bHRDb250ZXh0CisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5wcmVjID0gcHJlYyBpZiBwcmVjIGlzIG5vdCBOb25lIGVsc2UgZGMucHJlYworICAgICAgICBzZWxmLnJvdW5kaW5nID0gcm91bmRpbmcgaWYgcm91bmRpbmcgaXMgbm90IE5vbmUgZWxzZSBkYy5yb3VuZGluZworICAgICAgICBzZWxmLkVtaW4gPSBFbWluIGlmIEVtaW4gaXMgbm90IE5vbmUgZWxzZSBkYy5FbWluCisgICAgICAgIHNlbGYuRW1heCA9IEVtYXggaWYgRW1heCBpcyBub3QgTm9uZSBlbHNlIGRjLkVtYXgKKyAgICAgICAgc2VsZi5jYXBpdGFscyA9IGNhcGl0YWxzIGlmIGNhcGl0YWxzIGlzIG5vdCBOb25lIGVsc2UgZGMuY2FwaXRhbHMKKyAgICAgICAgc2VsZi5jbGFtcCA9IGNsYW1wIGlmIGNsYW1wIGlzIG5vdCBOb25lIGVsc2UgZGMuY2xhbXAKKworICAgICAgICBpZiBfaWdub3JlZF9mbGFncyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faWdub3JlZF9mbGFncyA9IFtdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9pZ25vcmVkX2ZsYWdzID0gX2lnbm9yZWRfZmxhZ3MKKworICAgICAgICBpZiB0cmFwcyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi50cmFwcyA9IGRjLnRyYXBzLmNvcHkoKQorICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHRyYXBzLCBkaWN0KToKKyAgICAgICAgICAgIHNlbGYudHJhcHMgPSBkaWN0KChzLCBpbnQocyBpbiB0cmFwcykpIGZvciBzIGluIF9zaWduYWxzICsgdHJhcHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRyYXBzID0gdHJhcHMKKworICAgICAgICBpZiBmbGFncyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5mbGFncyA9IGRpY3QuZnJvbWtleXMoX3NpZ25hbHMsIDApCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UoZmxhZ3MsIGRpY3QpOgorICAgICAgICAgICAgc2VsZi5mbGFncyA9IGRpY3QoKHMsIGludChzIGluIGZsYWdzKSkgZm9yIHMgaW4gX3NpZ25hbHMgKyBmbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmxhZ3MgPSBmbGFncworCisgICAgZGVmIF9zZXRfaW50ZWdlcl9jaGVjayhzZWxmLCBuYW1lLCB2YWx1ZSwgdm1pbiwgdm1heCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlcyBtdXN0IGJlIGFuIGludGVnZXIiICUgbmFtZSkKKyAgICAgICAgaWYgdm1pbiA9PSAnLWluZic6CisgICAgICAgICAgICBpZiB2YWx1ZSA+IHZtYXg6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgbXVzdCBiZSBpbiBbJXMsICVkXS4gZ290OiAlcyIgJSAobmFtZSwgdm1pbiwgdm1heCwgdmFsdWUpKQorICAgICAgICBlbGlmIHZtYXggPT0gJ2luZic6CisgICAgICAgICAgICBpZiB2YWx1ZSA8IHZtaW46CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgbXVzdCBiZSBpbiBbJWQsICVzXS4gZ290OiAlcyIgJSAobmFtZSwgdm1pbiwgdm1heCwgdmFsdWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgdmFsdWUgPCB2bWluIG9yIHZhbHVlID4gdm1heDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBtdXN0IGJlIGluIFslZCwgJWRdLiBnb3QgJXMiICUgKG5hbWUsIHZtaW4sIHZtYXgsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBfc2V0X3NpZ25hbF9kaWN0KHNlbGYsIG5hbWUsIGQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkLCBkaWN0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMgbXVzdCBiZSBhIHNpZ25hbCBkaWN0IiAlIGQpCisgICAgICAgIGZvciBrZXkgaW4gZDoKKyAgICAgICAgICAgIGlmIG5vdCBrZXkgaW4gX3NpZ25hbHM6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkIHNpZ25hbCBkaWN0IiAlIGQpCisgICAgICAgIGZvciBrZXkgaW4gX3NpZ25hbHM6CisgICAgICAgICAgICBpZiBub3Qga2V5IGluIGQ6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkIHNpZ25hbCBkaWN0IiAlIGQpCisgICAgICAgIHJldHVybiBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgZCkKKworICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIGlmIG5hbWUgPT0gJ3ByZWMnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NldF9pbnRlZ2VyX2NoZWNrKG5hbWUsIHZhbHVlLCAxLCAnaW5mJykKKyAgICAgICAgZWxpZiBuYW1lID09ICdFbWluJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zZXRfaW50ZWdlcl9jaGVjayhuYW1lLCB2YWx1ZSwgJy1pbmYnLCAwKQorICAgICAgICBlbGlmIG5hbWUgPT0gJ0VtYXgnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NldF9pbnRlZ2VyX2NoZWNrKG5hbWUsIHZhbHVlLCAwLCAnaW5mJykKKyAgICAgICAgZWxpZiBuYW1lID09ICdjYXBpdGFscyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2V0X2ludGVnZXJfY2hlY2sobmFtZSwgdmFsdWUsIDAsIDEpCisgICAgICAgIGVsaWYgbmFtZSA9PSAnY2xhbXAnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NldF9pbnRlZ2VyX2NoZWNrKG5hbWUsIHZhbHVlLCAwLCAxKQorICAgICAgICBlbGlmIG5hbWUgPT0gJ3JvdW5kaW5nJzoKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBpbiBfcm91bmRpbmdfbW9kZXM6CisgICAgICAgICAgICAgICAgIyByYWlzZSBUeXBlRXJyb3IgZXZlbiBmb3Igc3RyaW5ncyB0byBoYXZlIGNvbnNpc3RlbmN5CisgICAgICAgICAgICAgICAgIyBhbW9uZyB2YXJpb3VzIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzOiBpbnZhbGlkIHJvdW5kaW5nIG1vZGUiICUgdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorICAgICAgICBlbGlmIG5hbWUgPT0gJ2ZsYWdzJyBvciBuYW1lID09ICd0cmFwcyc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2V0X3NpZ25hbF9kaWN0KG5hbWUsIHZhbHVlKQorICAgICAgICBlbGlmIG5hbWUgPT0gJ19pZ25vcmVkX2ZsYWdzJzoKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAiJ2RlY2ltYWwuQ29udGV4dCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJSBuYW1lKQorCisgICAgZGVmIF9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJXMgY2Fubm90IGJlIGRlbGV0ZWQiICUgbmFtZSkKKworICAgICMgU3VwcG9ydCBmb3IgcGlja2xpbmcsIGNvcHksIGFuZCBkZWVwY29weQorICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICBmbGFncyA9IFtzaWcgZm9yIHNpZywgdiBpbiBzZWxmLmZsYWdzLml0ZW1zKCkgaWYgdl0KKyAgICAgICAgdHJhcHMgPSBbc2lnIGZvciBzaWcsIHYgaW4gc2VsZi50cmFwcy5pdGVtcygpIGlmIHZdCisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sCisgICAgICAgICAgICAgICAgKHNlbGYucHJlYywgc2VsZi5yb3VuZGluZywgc2VsZi5FbWluLCBzZWxmLkVtYXgsCisgICAgICAgICAgICAgICAgIHNlbGYuY2FwaXRhbHMsIHNlbGYuY2xhbXAsIGZsYWdzLCB0cmFwcykpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICIiIlNob3cgdGhlIGN1cnJlbnQgY29udGV4dC4iIiIKKyAgICAgICAgcyA9IFtdCisgICAgICAgIHMuYXBwZW5kKCdDb250ZXh0KHByZWM9JShwcmVjKWQsIHJvdW5kaW5nPSUocm91bmRpbmcpcywgJworICAgICAgICAgICAgICAgICAnRW1pbj0lKEVtaW4pZCwgRW1heD0lKEVtYXgpZCwgY2FwaXRhbHM9JShjYXBpdGFscylkLCAnCisgICAgICAgICAgICAgICAgICdjbGFtcD0lKGNsYW1wKWQnCisgICAgICAgICAgICAgICAgICUgdmFycyhzZWxmKSkKKyAgICAgICAgbmFtZXMgPSBbZi5fX25hbWVfXyBmb3IgZiwgdiBpbiBzZWxmLmZsYWdzLml0ZW1zKCkgaWYgdl0KKyAgICAgICAgcy5hcHBlbmQoJ2ZsYWdzPVsnICsgJywgJy5qb2luKG5hbWVzKSArICddJykKKyAgICAgICAgbmFtZXMgPSBbdC5fX25hbWVfXyBmb3IgdCwgdiBpbiBzZWxmLnRyYXBzLml0ZW1zKCkgaWYgdl0KKyAgICAgICAgcy5hcHBlbmQoJ3RyYXBzPVsnICsgJywgJy5qb2luKG5hbWVzKSArICddJykKKyAgICAgICAgcmV0dXJuICcsICcuam9pbihzKSArICcpJworCisgICAgZGVmIGNsZWFyX2ZsYWdzKHNlbGYpOgorICAgICAgICAiIiJSZXNldCBhbGwgZmxhZ3MgdG8gemVybyIiIgorICAgICAgICBmb3IgZmxhZyBpbiBzZWxmLmZsYWdzOgorICAgICAgICAgICAgc2VsZi5mbGFnc1tmbGFnXSA9IDAKKworICAgIGRlZiBjbGVhcl90cmFwcyhzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgYWxsIHRyYXBzIHRvIHplcm8iIiIKKyAgICAgICAgZm9yIGZsYWcgaW4gc2VsZi50cmFwczoKKyAgICAgICAgICAgIHNlbGYudHJhcHNbZmxhZ10gPSAwCisKKyAgICBkZWYgX3NoYWxsb3dfY29weShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHNoYWxsb3cgY29weSBmcm9tIHNlbGYuIiIiCisgICAgICAgIG5jID0gQ29udGV4dChzZWxmLnByZWMsIHNlbGYucm91bmRpbmcsIHNlbGYuRW1pbiwgc2VsZi5FbWF4LAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYXBpdGFscywgc2VsZi5jbGFtcCwgc2VsZi5mbGFncywgc2VsZi50cmFwcywKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lnbm9yZWRfZmxhZ3MpCisgICAgICAgIHJldHVybiBuYworCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgYSBkZWVwIGNvcHkgZnJvbSBzZWxmLiIiIgorICAgICAgICBuYyA9IENvbnRleHQoc2VsZi5wcmVjLCBzZWxmLnJvdW5kaW5nLCBzZWxmLkVtaW4sIHNlbGYuRW1heCwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FwaXRhbHMsIHNlbGYuY2xhbXAsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmZsYWdzLmNvcHkoKSwgc2VsZi50cmFwcy5jb3B5KCksCisgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pZ25vcmVkX2ZsYWdzKQorICAgICAgICByZXR1cm4gbmMKKyAgICBfX2NvcHlfXyA9IGNvcHkKKworICAgIGRlZiBfcmFpc2VfZXJyb3Ioc2VsZiwgY29uZGl0aW9uLCBleHBsYW5hdGlvbiA9IE5vbmUsICphcmdzKToKKyAgICAgICAgIiIiSGFuZGxlcyBhbiBlcnJvcgorCisgICAgICAgIElmIHRoZSBmbGFnIGlzIGluIF9pZ25vcmVkX2ZsYWdzLCByZXR1cm5zIHRoZSBkZWZhdWx0IHJlc3BvbnNlLgorICAgICAgICBPdGhlcndpc2UsIGl0IHNldHMgdGhlIGZsYWcsIHRoZW4sIGlmIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgIHRyYXBfZW5hYmxlciBpcyBzZXQsIGl0IHJlcmFpc2VzIHRoZSBleGNlcHRpb24uICBPdGhlcndpc2UsIGl0IHJldHVybnMKKyAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgc2V0dGluZyB0aGUgZmxhZy4KKyAgICAgICAgIiIiCisgICAgICAgIGVycm9yID0gX2NvbmRpdGlvbl9tYXAuZ2V0KGNvbmRpdGlvbiwgY29uZGl0aW9uKQorICAgICAgICBpZiBlcnJvciBpbiBzZWxmLl9pZ25vcmVkX2ZsYWdzOgorICAgICAgICAgICAgIyBEb24ndCB0b3VjaCB0aGUgZmxhZworICAgICAgICAgICAgcmV0dXJuIGVycm9yKCkuaGFuZGxlKHNlbGYsICphcmdzKQorCisgICAgICAgIHNlbGYuZmxhZ3NbZXJyb3JdID0gMQorICAgICAgICBpZiBub3Qgc2VsZi50cmFwc1tlcnJvcl06CisgICAgICAgICAgICAjIFRoZSBlcnJvcnMgZGVmaW5lIGhvdyB0byBoYW5kbGUgdGhlbXNlbHZlcy4KKyAgICAgICAgICAgIHJldHVybiBjb25kaXRpb24oKS5oYW5kbGUoc2VsZiwgKmFyZ3MpCisKKyAgICAgICAgIyBFcnJvcnMgc2hvdWxkIG9ubHkgYmUgcmlza2VkIG9uIGNvcGllcyBvZiB0aGUgY29udGV4dAorICAgICAgICAjIHNlbGYuX2lnbm9yZWRfZmxhZ3MgPSBbXQorICAgICAgICByYWlzZSBlcnJvcihleHBsYW5hdGlvbikKKworICAgIGRlZiBfaWdub3JlX2FsbF9mbGFncyhzZWxmKToKKyAgICAgICAgIiIiSWdub3JlIGFsbCBmbGFncywgaWYgdGhleSBhcmUgcmFpc2VkIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9pZ25vcmVfZmxhZ3MoKl9zaWduYWxzKQorCisgICAgZGVmIF9pZ25vcmVfZmxhZ3Moc2VsZiwgKmZsYWdzKToKKyAgICAgICAgIiIiSWdub3JlIHRoZSBmbGFncywgaWYgdGhleSBhcmUgcmFpc2VkIiIiCisgICAgICAgICMgRG8gbm90IG11dGF0ZS0tIFRoaXMgd2F5LCBjb3BpZXMgb2YgYSBjb250ZXh0IGxlYXZlIHRoZSBvcmlnaW5hbAorICAgICAgICAjIGFsb25lLgorICAgICAgICBzZWxmLl9pZ25vcmVkX2ZsYWdzID0gKHNlbGYuX2lnbm9yZWRfZmxhZ3MgKyBsaXN0KGZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGxpc3QoZmxhZ3MpCisKKyAgICBkZWYgX3JlZ2FyZF9mbGFncyhzZWxmLCAqZmxhZ3MpOgorICAgICAgICAiIiJTdG9wIGlnbm9yaW5nIHRoZSBmbGFncywgaWYgdGhleSBhcmUgcmFpc2VkIiIiCisgICAgICAgIGlmIGZsYWdzIGFuZCBpc2luc3RhbmNlKGZsYWdzWzBdLCAodHVwbGUsbGlzdCkpOgorICAgICAgICAgICAgZmxhZ3MgPSBmbGFnc1swXQorICAgICAgICBmb3IgZmxhZyBpbiBmbGFnczoKKyAgICAgICAgICAgIHNlbGYuX2lnbm9yZWRfZmxhZ3MucmVtb3ZlKGZsYWcpCisKKyAgICAjIFdlIGluaGVyaXQgb2JqZWN0Ll9faGFzaF9fLCBzbyB3ZSBtdXN0IGRlbnkgdGhpcyBleHBsaWNpdGx5CisgICAgX19oYXNoX18gPSBOb25lCisKKyAgICBkZWYgRXRpbnkoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgRXRpbnkgKD0gRW1pbiAtIHByZWMgKyAxKSIiIgorICAgICAgICByZXR1cm4gaW50KHNlbGYuRW1pbiAtIHNlbGYucHJlYyArIDEpCisKKyAgICBkZWYgRXRvcChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBtYXhpbXVtIGV4cG9uZW50ICg9IEVtYXggLSBwcmVjICsgMSkiIiIKKyAgICAgICAgcmV0dXJuIGludChzZWxmLkVtYXggLSBzZWxmLnByZWMgKyAxKQorCisgICAgZGVmIF9zZXRfcm91bmRpbmcoc2VsZiwgdHlwZSk6CisgICAgICAgICIiIlNldHMgdGhlIHJvdW5kaW5nIHR5cGUuCisKKyAgICAgICAgU2V0cyB0aGUgcm91bmRpbmcgdHlwZSwgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgKHByZXZpb3VzKQorICAgICAgICByb3VuZGluZyB0eXBlLiAgT2Z0ZW4gdXNlZCBsaWtlOgorCisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNvcHkoKQorICAgICAgICAjIHNvIHlvdSBkb24ndCBjaGFuZ2UgdGhlIGNhbGxpbmcgY29udGV4dAorICAgICAgICAjIGlmIGFuIGVycm9yIG9jY3VycyBpbiB0aGUgbWlkZGxlLgorICAgICAgICByb3VuZGluZyA9IGNvbnRleHQuX3NldF9yb3VuZGluZyhST1VORF9VUCkKKyAgICAgICAgdmFsID0gc2VsZi5fX3N1Yl9fKG90aGVyLCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgIGNvbnRleHQuX3NldF9yb3VuZGluZyhyb3VuZGluZykKKworICAgICAgICBUaGlzIHdpbGwgbWFrZSBpdCByb3VuZCB1cCBmb3IgdGhhdCBvcGVyYXRpb24uCisgICAgICAgICIiIgorICAgICAgICByb3VuZGluZyA9IHNlbGYucm91bmRpbmcKKyAgICAgICAgc2VsZi5yb3VuZGluZz0gdHlwZQorICAgICAgICByZXR1cm4gcm91bmRpbmcKKworICAgIGRlZiBjcmVhdGVfZGVjaW1hbChzZWxmLCBudW09JzAnKToKKyAgICAgICAgIiIiQ3JlYXRlcyBhIG5ldyBEZWNpbWFsIGluc3RhbmNlIGJ1dCB1c2luZyBzZWxmIGFzIGNvbnRleHQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaW1wbGVtZW50cyB0aGUgdG8tbnVtYmVyIG9wZXJhdGlvbiBvZiB0aGUKKyAgICAgICAgSUJNIERlY2ltYWwgc3BlY2lmaWNhdGlvbi4iIiIKKworICAgICAgICBpZiBpc2luc3RhbmNlKG51bSwgc3RyKSBhbmQgbnVtICE9IG51bS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JhaXNlX2Vycm9yKENvbnZlcnNpb25TeW50YXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcm1pdHRlZC4iKQorCisgICAgICAgIGQgPSBEZWNpbWFsKG51bSwgY29udGV4dD1zZWxmKQorICAgICAgICBpZiBkLl9pc25hbigpIGFuZCBsZW4oZC5faW50KSA+IHNlbGYucHJlYyAtIHNlbGYuY2xhbXA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmFpc2VfZXJyb3IoQ29udmVyc2lvblN5bnRheCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlhZ25vc3RpYyBpbmZvIHRvbyBsb25nIGluIE5hTiIpCisgICAgICAgIHJldHVybiBkLl9maXgoc2VsZikKKworICAgIGRlZiBjcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KHNlbGYsIGYpOgorICAgICAgICAiIiJDcmVhdGVzIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UgZnJvbSBhIGZsb2F0IGJ1dCByb3VuZGluZyB1c2luZyBzZWxmCisgICAgICAgIGFzIHRoZSBjb250ZXh0LgorCisgICAgICAgID4+PiBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHJvdW5kaW5nPVJPVU5EX0RPV04pCisgICAgICAgID4+PiBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoMy4xNDE1OTI2NTM1ODk3OTMyKQorICAgICAgICBEZWNpbWFsKCczLjE0MTUnKQorICAgICAgICA+Pj4gY29udGV4dCA9IENvbnRleHQocHJlYz01LCB0cmFwcz1bSW5leGFjdF0pCisgICAgICAgID4+PiBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoMy4xNDE1OTI2NTM1ODk3OTMyKQorICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgICAgICAuLi4KKyAgICAgICAgZGVjaW1hbC5JbmV4YWN0CisKKyAgICAgICAgIiIiCisgICAgICAgIGQgPSBEZWNpbWFsLmZyb21fZmxvYXQoZikgICAgICAgIyBBbiBleGFjdCBjb252ZXJzaW9uCisgICAgICAgIHJldHVybiBkLl9maXgoc2VsZikgICAgICAgICAgICAgIyBBcHBseSB0aGUgY29udGV4dCByb3VuZGluZworCisgICAgIyBNZXRob2RzCisgICAgZGVmIGFicyhzZWxmLCBhKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQuCisKKyAgICAgICAgSWYgdGhlIG9wZXJhbmQgaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgdXNpbmcgdGhlIG1pbnVzCisgICAgICAgIG9wZXJhdGlvbiBvbiB0aGUgb3BlcmFuZC4gIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyB1c2luZworICAgICAgICB0aGUgcGx1cyBvcGVyYXRpb24gb24gdGhlIG9wZXJhbmQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hYnMoRGVjaW1hbCgnMi4xJykpCisgICAgICAgIERlY2ltYWwoJzIuMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuYWJzKERlY2ltYWwoJy0xMDAnKSkKKyAgICAgICAgRGVjaW1hbCgnMTAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hYnMoRGVjaW1hbCgnMTAxLjUnKSkKKyAgICAgICAgRGVjaW1hbCgnMTAxLjUnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFicyhEZWNpbWFsKCctMTAxLjUnKSkKKyAgICAgICAgRGVjaW1hbCgnMTAxLjUnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFicygtMSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5fX2Fic19fKGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBhZGQoc2VsZiwgYSwgYik6CisgICAgICAgICIiIlJldHVybiB0aGUgc3VtIG9mIHRoZSB0d28gb3BlcmFuZHMuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoRGVjaW1hbCgnMTInKSwgRGVjaW1hbCgnNy4wMCcpKQorICAgICAgICBEZWNpbWFsKCcxOS4wMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuYWRkKERlY2ltYWwoJzFFKzInKSwgRGVjaW1hbCgnMS4wMUUrNCcpKQorICAgICAgICBEZWNpbWFsKCcxLjAyRSs0JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoMSwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuYWRkKERlY2ltYWwoOCksIDUpCisgICAgICAgIERlY2ltYWwoJzEzJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoNSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMTAnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19hZGRfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX2FwcGx5KHNlbGYsIGEpOgorICAgICAgICByZXR1cm4gc3RyKGEuX2ZpeChzZWxmKSkKKworICAgIGRlZiBjYW5vbmljYWwoc2VsZiwgYSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHNhbWUgRGVjaW1hbCBvYmplY3QuCisKKyAgICAgICAgQXMgd2UgZG8gbm90IGhhdmUgZGlmZmVyZW50IGVuY29kaW5ncyBmb3IgdGhlIHNhbWUgbnVtYmVyLCB0aGUKKyAgICAgICAgcmVjZWl2ZWQgb2JqZWN0IGFscmVhZHkgaXMgaW4gaXRzIGNhbm9uaWNhbCBmb3JtLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY2Fub25pY2FsKERlY2ltYWwoJzIuNTAnKSkKKyAgICAgICAgRGVjaW1hbCgnMi41MCcpCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhLCBEZWNpbWFsKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2Fub25pY2FsIHJlcXVpcmVzIGEgRGVjaW1hbCBhcyBhbiBhcmd1bWVudC4iKQorICAgICAgICByZXR1cm4gYS5jYW5vbmljYWwoKQorCisgICAgZGVmIGNvbXBhcmUoc2VsZiwgYSwgYik6CisgICAgICAgICIiIkNvbXBhcmVzIHZhbHVlcyBudW1lcmljYWxseS4KKworICAgICAgICBJZiB0aGUgc2lnbnMgb2YgdGhlIG9wZXJhbmRzIGRpZmZlciwgYSB2YWx1ZSByZXByZXNlbnRpbmcgZWFjaCBvcGVyYW5kCisgICAgICAgICgnLTEnIGlmIHRoZSBvcGVyYW5kIGlzIGxlc3MgdGhhbiB6ZXJvLCAnMCcgaWYgdGhlIG9wZXJhbmQgaXMgemVybyBvcgorICAgICAgICBuZWdhdGl2ZSB6ZXJvLCBvciAnMScgaWYgdGhlIG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIHplcm8pIGlzIHVzZWQgaW4KKyAgICAgICAgcGxhY2Ugb2YgdGhhdCBvcGVyYW5kIGZvciB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwKKyAgICAgICAgb3BlcmFuZC4KKworICAgICAgICBUaGUgY29tcGFyaXNvbiBpcyB0aGVuIGVmZmVjdGVkIGJ5IHN1YnRyYWN0aW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tCisgICAgICAgIHRoZSBmaXJzdCBhbmQgdGhlbiByZXR1cm5pbmcgYSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAgc3VidHJhY3Rpb246ICctMScgaWYgdGhlIHJlc3VsdCBpcyBsZXNzIHRoYW4gemVybywgJzAnIGlmIHRoZSByZXN1bHQgaXMKKyAgICAgICAgemVybyBvciBuZWdhdGl2ZSB6ZXJvLCBvciAnMScgaWYgdGhlIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gemVyby4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgnMi4xJyksIERlY2ltYWwoJzMnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgnMi4xJyksIERlY2ltYWwoJzIuMScpKQorICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlKERlY2ltYWwoJzIuMScpLCBEZWNpbWFsKCcyLjEwJykpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCcyLjEnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZShEZWNpbWFsKCcyLjEnKSwgRGVjaW1hbCgnLTMnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZShEZWNpbWFsKCctMycpLCBEZWNpbWFsKCcyLjEnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoMSwgMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoMSwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuY29tcGFyZShiLCBjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgY29tcGFyZV9zaWduYWwoc2VsZiwgYSwgYik6CisgICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIHR3byBvcGVyYW5kcyBudW1lcmljYWxseS4KKworICAgICAgICBJdCdzIHByZXR0eSBtdWNoIGxpa2UgY29tcGFyZSgpLCBidXQgYWxsIE5hTnMgc2lnbmFsLCB3aXRoIHNpZ25hbGluZworICAgICAgICBOYU5zIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgcXVpZXQgTmFOcy4KKworICAgICAgICA+Pj4gYyA9IEV4dGVuZGVkQ29udGV4dAorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKCcyLjEnKSwgRGVjaW1hbCgnMycpKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBjLmNvbXBhcmVfc2lnbmFsKERlY2ltYWwoJzIuMScpLCBEZWNpbWFsKCcyLjEnKSkKKyAgICAgICAgRGVjaW1hbCgnMCcpCisgICAgICAgID4+PiBjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dID0gMAorICAgICAgICA+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKKyAgICAgICAgMAorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKCdOYU4nKSwgRGVjaW1hbCgnMi4xJykpCisgICAgICAgIERlY2ltYWwoJ05hTicpCisgICAgICAgID4+PiBwcmludChjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dKQorICAgICAgICAxCisgICAgICAgID4+PiBjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dID0gMAorICAgICAgICA+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKKyAgICAgICAgMAorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKCdzTmFOJyksIERlY2ltYWwoJzIuMScpKQorICAgICAgICBEZWNpbWFsKCdOYU4nKQorICAgICAgICA+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKKyAgICAgICAgMQorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbCgtMSwgMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKC0xKSwgMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbCgtMSwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuY29tcGFyZV9zaWduYWwoYiwgY29udGV4dD1zZWxmKQorCisgICAgZGVmIGNvbXBhcmVfdG90YWwoc2VsZiwgYSwgYik6CisgICAgICAgICIiIkNvbXBhcmVzIHR3byBvcGVyYW5kcyB1c2luZyB0aGVpciBhYnN0cmFjdCByZXByZXNlbnRhdGlvbi4KKworICAgICAgICBUaGlzIGlzIG5vdCBsaWtlIHRoZSBzdGFuZGFyZCBjb21wYXJlLCB3aGljaCB1c2UgdGhlaXIgbnVtZXJpY2FsCisgICAgICAgIHZhbHVlLiBOb3RlIHRoYXQgYSB0b3RhbCBvcmRlcmluZyBpcyBkZWZpbmVkIGZvciBhbGwgcG9zc2libGUgYWJzdHJhY3QKKyAgICAgICAgcmVwcmVzZW50YXRpb25zLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbChEZWNpbWFsKCcxMi43MycpLCBEZWNpbWFsKCcxMjcuOScpKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbChEZWNpbWFsKCctMTI3JyksICBEZWNpbWFsKCcxMicpKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbChEZWNpbWFsKCcxMi4zMCcpLCBEZWNpbWFsKCcxMi4zJykpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKERlY2ltYWwoJzEyLjMwJyksIERlY2ltYWwoJzEyLjMwJykpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmVfdG90YWwoRGVjaW1hbCgnMTIuMycpLCAgRGVjaW1hbCgnMTIuMzAwJykpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmVfdG90YWwoRGVjaW1hbCgnMTIuMycpLCAgRGVjaW1hbCgnTmFOJykpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKDEsIDIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKERlY2ltYWwoMSksIDIpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKDEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLmNvbXBhcmVfdG90YWwoYikKKworICAgIGRlZiBjb21wYXJlX3RvdGFsX21hZyhzZWxmLCBhLCBiKToKKyAgICAgICAgIiIiQ29tcGFyZXMgdHdvIG9wZXJhbmRzIHVzaW5nIHRoZWlyIGFic3RyYWN0IHJlcHJlc2VudGF0aW9uIGlnbm9yaW5nIHNpZ24uCisKKyAgICAgICAgTGlrZSBjb21wYXJlX3RvdGFsLCBidXQgd2l0aCBvcGVyYW5kJ3Mgc2lnbiBpZ25vcmVkIGFuZCBhc3N1bWVkIHRvIGJlIDAuCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5jb21wYXJlX3RvdGFsX21hZyhiKQorCisgICAgZGVmIGNvcHlfYWJzKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm5zIGEgY29weSBvZiB0aGUgb3BlcmFuZCB3aXRoIHRoZSBzaWduIHNldCB0byAwLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9hYnMoRGVjaW1hbCgnMi4xJykpCisgICAgICAgIERlY2ltYWwoJzIuMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9hYnMoRGVjaW1hbCgnLTEwMCcpKQorICAgICAgICBEZWNpbWFsKCcxMDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfYWJzKC0xKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLmNvcHlfYWJzKCkKKworICAgIGRlZiBjb3B5X2RlY2ltYWwoc2VsZiwgYSk6CisgICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9mIHRoZSBkZWNpbWFsIG9iamVjdC4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfZGVjaW1hbChEZWNpbWFsKCcyLjEnKSkKKyAgICAgICAgRGVjaW1hbCgnMi4xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X2RlY2ltYWwoRGVjaW1hbCgnLTEuMDAnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEuMDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfZGVjaW1hbCgxKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBEZWNpbWFsKGEpCisKKyAgICBkZWYgY29weV9uZWdhdGUoc2VsZiwgYSk6CisgICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9mIHRoZSBvcGVyYW5kIHdpdGggdGhlIHNpZ24gaW52ZXJ0ZWQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X25lZ2F0ZShEZWNpbWFsKCcxMDEuNScpKQorICAgICAgICBEZWNpbWFsKCctMTAxLjUnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfbmVnYXRlKERlY2ltYWwoJy0xMDEuNScpKQorICAgICAgICBEZWNpbWFsKCcxMDEuNScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9uZWdhdGUoMSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuY29weV9uZWdhdGUoKQorCisgICAgZGVmIGNvcHlfc2lnbihzZWxmLCBhLCBiKToKKyAgICAgICAgIiIiQ29waWVzIHRoZSBzZWNvbmQgb3BlcmFuZCdzIHNpZ24gdG8gdGhlIGZpcnN0IG9uZS4KKworICAgICAgICBJbiBkZXRhaWwsIGl0IHJldHVybnMgYSBjb3B5IG9mIHRoZSBmaXJzdCBvcGVyYW5kIHdpdGggdGhlIHNpZ24KKyAgICAgICAgZXF1YWwgdG8gdGhlIHNpZ24gb2YgdGhlIHNlY29uZCBvcGVyYW5kLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKERlY2ltYWwoICcxLjUwJyksIERlY2ltYWwoJzcuMzMnKSkKKyAgICAgICAgRGVjaW1hbCgnMS41MCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKERlY2ltYWwoJy0xLjUwJyksIERlY2ltYWwoJzcuMzMnKSkKKyAgICAgICAgRGVjaW1hbCgnMS41MCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKERlY2ltYWwoICcxLjUwJyksIERlY2ltYWwoJy03LjMzJykpCisgICAgICAgIERlY2ltYWwoJy0xLjUwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X3NpZ24oRGVjaW1hbCgnLTEuNTAnKSwgRGVjaW1hbCgnLTcuMzMnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEuNTAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbigxLCAtMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbihEZWNpbWFsKDEpLCAtMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbigxLCBEZWNpbWFsKC0yKSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuY29weV9zaWduKGIpCisKKyAgICBkZWYgZGl2aWRlKHNlbGYsIGEsIGIpOgorICAgICAgICAiIiJEZWNpbWFsIGRpdmlzaW9uIGluIGEgc3BlY2lmaWVkIGNvbnRleHQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMScpLCBEZWNpbWFsKCczJykpCisgICAgICAgIERlY2ltYWwoJzAuMzMzMzMzMzMzJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCczJykpCisgICAgICAgIERlY2ltYWwoJzAuNjY2NjY2NjY3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnNScpLCBEZWNpbWFsKCcyJykpCisgICAgICAgIERlY2ltYWwoJzIuNScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKERlY2ltYWwoJzEnKSwgRGVjaW1hbCgnMTAnKSkKKyAgICAgICAgRGVjaW1hbCgnMC4xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMTInKSwgRGVjaW1hbCgnMTInKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKERlY2ltYWwoJzguMDAnKSwgRGVjaW1hbCgnMicpKQorICAgICAgICBEZWNpbWFsKCc0LjAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMi40MDAnKSwgRGVjaW1hbCgnMi4wJykpCisgICAgICAgIERlY2ltYWwoJzEuMjAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZShEZWNpbWFsKCcxMDAwJyksIERlY2ltYWwoJzEwMCcpKQorICAgICAgICBEZWNpbWFsKCcxMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKERlY2ltYWwoJzEwMDAnKSwgRGVjaW1hbCgnMScpKQorICAgICAgICBEZWNpbWFsKCcxMDAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMi40MEUrNicpLCBEZWNpbWFsKCcyJykpCisgICAgICAgIERlY2ltYWwoJzEuMjBFKzYnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZSg1LCA1KQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCg1KSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKDUsIERlY2ltYWwoNSkpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX190cnVlZGl2X18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIGRpdmlkZV9pbnQoc2VsZiwgYSwgYik6CisgICAgICAgICIiIkRpdmlkZXMgdHdvIG51bWJlcnMgYW5kIHJldHVybnMgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgcmVzdWx0LgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzMnKSkKKyAgICAgICAgRGVjaW1hbCgnMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludChEZWNpbWFsKCcxMCcpLCBEZWNpbWFsKCczJykpCisgICAgICAgIERlY2ltYWwoJzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZV9pbnQoRGVjaW1hbCgnMScpLCBEZWNpbWFsKCcwLjMnKSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludCgxMCwgMykKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludChEZWNpbWFsKDEwKSwgMykKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludCgxMCwgRGVjaW1hbCgzKSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX2Zsb29yZGl2X18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIGRpdm1vZChzZWxmLCBhLCBiKToKKyAgICAgICAgIiIiUmV0dXJuIChhIC8vIGIsIGEgJSBiKS4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZChEZWNpbWFsKDgpLCBEZWNpbWFsKDMpKQorICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcyJykpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2bW9kKERlY2ltYWwoOCksIERlY2ltYWwoNCkpCisgICAgICAgIChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZtb2QoOCwgNCkKKyAgICAgICAgKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMCcpKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZChEZWNpbWFsKDgpLCA0KQorICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcwJykpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2bW9kKDgsIERlY2ltYWwoNCkpCisgICAgICAgIChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHIgPSBhLl9fZGl2bW9kX18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIGV4cChzZWxmLCBhKToKKyAgICAgICAgIiIiUmV0dXJucyBlICoqIGEuCisKKyAgICAgICAgPj4+IGMgPSBFeHRlbmRlZENvbnRleHQuY29weSgpCisgICAgICAgID4+PiBjLkVtaW4gPSAtOTk5CisgICAgICAgID4+PiBjLkVtYXggPSA5OTkKKyAgICAgICAgPj4+IGMuZXhwKERlY2ltYWwoJy1JbmZpbml0eScpKQorICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IGMuZXhwKERlY2ltYWwoJy0xJykpCisgICAgICAgIERlY2ltYWwoJzAuMzY3ODc5NDQxJykKKyAgICAgICAgPj4+IGMuZXhwKERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBjLmV4cChEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJzIuNzE4MjgxODMnKQorICAgICAgICA+Pj4gYy5leHAoRGVjaW1hbCgnMC42OTMxNDcxODEnKSkKKyAgICAgICAgRGVjaW1hbCgnMi4wMDAwMDAwMCcpCisgICAgICAgID4+PiBjLmV4cChEZWNpbWFsKCcrSW5maW5pdHknKSkKKyAgICAgICAgRGVjaW1hbCgnSW5maW5pdHknKQorICAgICAgICA+Pj4gYy5leHAoMTApCisgICAgICAgIERlY2ltYWwoJzIyMDI2LjQ2NTgnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9X2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5leHAoY29udGV4dD1zZWxmKQorCisgICAgZGVmIGZtYShzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG11bHRpcGxpZWQgYnkgYiwgcGx1cyBjLgorCisgICAgICAgIFRoZSBmaXJzdCB0d28gb3BlcmFuZHMgYXJlIG11bHRpcGxpZWQgdG9nZXRoZXIsIHVzaW5nIG11bHRpcGx5LAorICAgICAgICB0aGUgdGhpcmQgb3BlcmFuZCBpcyB0aGVuIGFkZGVkIHRvIHRoZSByZXN1bHQgb2YgdGhhdAorICAgICAgICBtdWx0aXBsaWNhdGlvbiwgdXNpbmcgYWRkLCBhbGwgd2l0aCBvbmx5IG9uZSBmaW5hbCByb3VuZGluZy4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmZtYShEZWNpbWFsKCczJyksIERlY2ltYWwoJzUnKSwgRGVjaW1hbCgnNycpKQorICAgICAgICBEZWNpbWFsKCcyMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKERlY2ltYWwoJzMnKSwgRGVjaW1hbCgnLTUnKSwgRGVjaW1hbCgnNycpKQorICAgICAgICBEZWNpbWFsKCctOCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKERlY2ltYWwoJzg4ODU2NTI5MCcpLCBEZWNpbWFsKCcxNTU3Ljk2OTMwJyksIERlY2ltYWwoJy04NjA4Ny43NTc4JykpCisgICAgICAgIERlY2ltYWwoJzEuMzg0MzU3MzZFKzEyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5mbWEoMSwgMywgNCkKKyAgICAgICAgRGVjaW1hbCgnNycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKDEsIERlY2ltYWwoMyksIDQpCisgICAgICAgIERlY2ltYWwoJzcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmZtYSgxLCAzLCBEZWNpbWFsKDQpKQorICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLmZtYShiLCBjLCBjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgaXNfY2Fub25pY2FsKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBjYW5vbmljYWw7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCisKKyAgICAgICAgQ3VycmVudGx5LCB0aGUgZW5jb2Rpbmcgb2YgYSBEZWNpbWFsIGluc3RhbmNlIGlzIGFsd2F5cworICAgICAgICBjYW5vbmljYWwsIHNvIHRoaXMgbWV0aG9kIHJldHVybnMgVHJ1ZSBmb3IgYW55IERlY2ltYWwuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19jYW5vbmljYWwoRGVjaW1hbCgnMi41MCcpKQorICAgICAgICBUcnVlCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhLCBEZWNpbWFsKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaXNfY2Fub25pY2FsIHJlcXVpcmVzIGEgRGVjaW1hbCBhcyBhbiBhcmd1bWVudC4iKQorICAgICAgICByZXR1cm4gYS5pc19jYW5vbmljYWwoKQorCisgICAgZGVmIGlzX2Zpbml0ZShzZWxmLCBhKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIG9wZXJhbmQgaXMgZmluaXRlOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgorCisgICAgICAgIEEgRGVjaW1hbCBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIGZpbml0ZSBpZiBpdCBpcyBuZWl0aGVyCisgICAgICAgIGluZmluaXRlIG5vciBhIE5hTi4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2Zpbml0ZShEZWNpbWFsKCcyLjUwJykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19maW5pdGUoRGVjaW1hbCgnLTAuMycpKQorICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfZmluaXRlKERlY2ltYWwoJzAnKSkKKyAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2Zpbml0ZShEZWNpbWFsKCdJbmYnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19maW5pdGUoRGVjaW1hbCgnTmFOJykpCisgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfZmluaXRlKDEpCisgICAgICAgIFRydWUKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLmlzX2Zpbml0ZSgpCisKKyAgICBkZWYgaXNfaW5maW5pdGUoc2VsZiwgYSk6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBvcGVyYW5kIGlzIGluZmluaXRlOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfaW5maW5pdGUoRGVjaW1hbCgnMi41MCcpKQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKERlY2ltYWwoJy1JbmYnKSkKKyAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKERlY2ltYWwoJ05hTicpKQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKDEpCisgICAgICAgIEZhbHNlCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5pc19pbmZpbml0ZSgpCisKKyAgICBkZWYgaXNfbmFuKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBhIHFOYU4gb3Igc05hTjsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX25hbihEZWNpbWFsKCcyLjUwJykpCisgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfbmFuKERlY2ltYWwoJ05hTicpKQorICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfbmFuKERlY2ltYWwoJy1zTmFOJykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19uYW4oMSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLmlzX25hbigpCisKKyAgICBkZWYgaXNfbm9ybWFsKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBhIG5vcm1hbCBudW1iZXI7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCisKKyAgICAgICAgPj4+IGMgPSBFeHRlbmRlZENvbnRleHQuY29weSgpCisgICAgICAgID4+PiBjLkVtaW4gPSAtOTk5CisgICAgICAgID4+PiBjLkVtYXggPSA5OTkKKyAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJzIuNTAnKSkKKyAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gYy5pc19ub3JtYWwoRGVjaW1hbCgnMC4xRS05OTknKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJzAuMDAnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJy1JbmYnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJ05hTicpKQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gYy5pc19ub3JtYWwoMSkKKyAgICAgICAgVHJ1ZQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuaXNfbm9ybWFsKGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBpc19xbmFuKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBhIHF1aWV0IE5hTjsgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3FuYW4oRGVjaW1hbCgnMi41MCcpKQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3FuYW4oRGVjaW1hbCgnTmFOJykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19xbmFuKERlY2ltYWwoJ3NOYU4nKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19xbmFuKDEpCisgICAgICAgIEZhbHNlCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5pc19xbmFuKCkKKworICAgIGRlZiBpc19zaWduZWQoc2VsZiwgYSk6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBvcGVyYW5kIGlzIG5lZ2F0aXZlOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc2lnbmVkKERlY2ltYWwoJzIuNTAnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zaWduZWQoRGVjaW1hbCgnLTEyJykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zaWduZWQoRGVjaW1hbCgnLTAnKSkKKyAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NpZ25lZCg4KQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NpZ25lZCgtOCkKKyAgICAgICAgVHJ1ZQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuaXNfc2lnbmVkKCkKKworICAgIGRlZiBpc19zbmFuKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBhIHNpZ25hbGluZyBOYU47CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zbmFuKERlY2ltYWwoJzIuNTAnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zbmFuKERlY2ltYWwoJ05hTicpKQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NuYW4oRGVjaW1hbCgnc05hTicpKQorICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc25hbigxKQorICAgICAgICBGYWxzZQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuaXNfc25hbigpCisKKyAgICBkZWYgaXNfc3Vibm9ybWFsKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBzdWJub3JtYWw7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCisKKyAgICAgICAgPj4+IGMgPSBFeHRlbmRlZENvbnRleHQuY29weSgpCisgICAgICAgID4+PiBjLkVtaW4gPSAtOTk5CisgICAgICAgID4+PiBjLkVtYXggPSA5OTkKKyAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJzIuNTAnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJzAuMUUtOTk5JykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJzAuMDAnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJy1JbmYnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJ05hTicpKQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gYy5pc19zdWJub3JtYWwoMSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLmlzX3N1Ym5vcm1hbChjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgaXNfemVybyhzZWxmLCBhKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIG9wZXJhbmQgaXMgYSB6ZXJvOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybyhEZWNpbWFsKCcwJykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc196ZXJvKERlY2ltYWwoJzIuNTAnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc196ZXJvKERlY2ltYWwoJy0wRSsyJykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc196ZXJvKDEpCisgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybygwKQorICAgICAgICBUcnVlCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5pc196ZXJvKCkKKworICAgIGRlZiBsbihzZWxmLCBhKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgbmF0dXJhbCAoYmFzZSBlKSBsb2dhcml0aG0gb2YgdGhlIG9wZXJhbmQuCisKKyAgICAgICAgPj4+IGMgPSBFeHRlbmRlZENvbnRleHQuY29weSgpCisgICAgICAgID4+PiBjLkVtaW4gPSAtOTk5CisgICAgICAgID4+PiBjLkVtYXggPSA5OTkKKyAgICAgICAgPj4+IGMubG4oRGVjaW1hbCgnMCcpKQorICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQorICAgICAgICA+Pj4gYy5sbihEZWNpbWFsKCcxLjAwMCcpKQorICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IGMubG4oRGVjaW1hbCgnMi43MTgyODE4MycpKQorICAgICAgICBEZWNpbWFsKCcxLjAwMDAwMDAwJykKKyAgICAgICAgPj4+IGMubG4oRGVjaW1hbCgnMTAnKSkKKyAgICAgICAgRGVjaW1hbCgnMi4zMDI1ODUwOScpCisgICAgICAgID4+PiBjLmxuKERlY2ltYWwoJytJbmZpbml0eScpKQorICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgID4+PiBjLmxuKDEpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubG4oY29udGV4dD1zZWxmKQorCisgICAgZGVmIGxvZzEwKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiB0aGUgb3BlcmFuZC4KKworICAgICAgICA+Pj4gYyA9IEV4dGVuZGVkQ29udGV4dC5jb3B5KCkKKyAgICAgICAgPj4+IGMuRW1pbiA9IC05OTkKKyAgICAgICAgPj4+IGMuRW1heCA9IDk5OQorICAgICAgICA+Pj4gYy5sb2cxMChEZWNpbWFsKCcwJykpCisgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCisgICAgICAgID4+PiBjLmxvZzEwKERlY2ltYWwoJzAuMDAxJykpCisgICAgICAgIERlY2ltYWwoJy0zJykKKyAgICAgICAgPj4+IGMubG9nMTAoRGVjaW1hbCgnMS4wMDAnKSkKKyAgICAgICAgRGVjaW1hbCgnMCcpCisgICAgICAgID4+PiBjLmxvZzEwKERlY2ltYWwoJzInKSkKKyAgICAgICAgRGVjaW1hbCgnMC4zMDEwMjk5OTYnKQorICAgICAgICA+Pj4gYy5sb2cxMChEZWNpbWFsKCcxMCcpKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IGMubG9nMTAoRGVjaW1hbCgnNzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMS44NDUwOTgwNCcpCisgICAgICAgID4+PiBjLmxvZzEwKERlY2ltYWwoJytJbmZpbml0eScpKQorICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgID4+PiBjLmxvZzEwKDApCisgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCisgICAgICAgID4+PiBjLmxvZzEwKDEpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubG9nMTAoY29udGV4dD1zZWxmKQorCisgICAgZGVmIGxvZ2Ioc2VsZiwgYSk6CisgICAgICAgICIiIiBSZXR1cm5zIHRoZSBleHBvbmVudCBvZiB0aGUgbWFnbml0dWRlIG9mIHRoZSBvcGVyYW5kJ3MgTVNELgorCisgICAgICAgIFRoZSByZXN1bHQgaXMgdGhlIGludGVnZXIgd2hpY2ggaXMgdGhlIGV4cG9uZW50IG9mIHRoZSBtYWduaXR1ZGUKKyAgICAgICAgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQgb2YgdGhlIG9wZXJhbmQgKGFzIHRob3VnaCB0aGUKKyAgICAgICAgb3BlcmFuZCB3ZXJlIHRydW5jYXRlZCB0byBhIHNpbmdsZSBkaWdpdCB3aGlsZSBtYWludGFpbmluZyB0aGUKKyAgICAgICAgdmFsdWUgb2YgdGhhdCBkaWdpdCBhbmQgd2l0aG91dCBsaW1pdGluZyB0aGUgcmVzdWx0aW5nIGV4cG9uZW50KS4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoRGVjaW1hbCgnMjUwJykpCisgICAgICAgIERlY2ltYWwoJzInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoRGVjaW1hbCgnMi41MCcpKQorICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2diKERlY2ltYWwoJzAuMDMnKSkKKyAgICAgICAgRGVjaW1hbCgnLTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoRGVjaW1hbCgnMCcpKQorICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoMSkKKyAgICAgICAgRGVjaW1hbCgnMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9nYigxMCkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9nYigxMDApCisgICAgICAgIERlY2ltYWwoJzInKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubG9nYihjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgbG9naWNhbF9hbmQoc2VsZiwgYSwgYik6CisgICAgICAgICIiIkFwcGxpZXMgdGhlIGxvZ2ljYWwgb3BlcmF0aW9uICdhbmQnIGJldHdlZW4gZWFjaCBvcGVyYW5kJ3MgZGlnaXRzLgorCisgICAgICAgIFRoZSBvcGVyYW5kcyBtdXN0IGJlIGJvdGggbG9naWNhbCBudW1iZXJzLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCcwJykpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKERlY2ltYWwoJzAnKSwgRGVjaW1hbCgnMScpKQorICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZChEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoRGVjaW1hbCgnMScpLCBEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKERlY2ltYWwoJzExMDAnKSwgRGVjaW1hbCgnMTAxMCcpKQorICAgICAgICBEZWNpbWFsKCcxMDAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZChEZWNpbWFsKCcxMTExJyksIERlY2ltYWwoJzEwJykpCisgICAgICAgIERlY2ltYWwoJzEwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZCgxMTAsIDExMDEpCisgICAgICAgIERlY2ltYWwoJzEwMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoRGVjaW1hbCgxMTApLCAxMTAxKQorICAgICAgICBEZWNpbWFsKCcxMDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKDExMCwgRGVjaW1hbCgxMTAxKSkKKyAgICAgICAgRGVjaW1hbCgnMTAwJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLmxvZ2ljYWxfYW5kKGIsIGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBsb2dpY2FsX2ludmVydChzZWxmLCBhKToKKyAgICAgICAgIiIiSW52ZXJ0IGFsbCB0aGUgZGlnaXRzIGluIHRoZSBvcGVyYW5kLgorCisgICAgICAgIFRoZSBvcGVyYW5kIG11c3QgYmUgYSBsb2dpY2FsIG51bWJlci4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfaW52ZXJ0KERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMTExMTExMTExJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2ludmVydChEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJzExMTExMTExMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9pbnZlcnQoRGVjaW1hbCgnMTExMTExMTExJykpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfaW52ZXJ0KERlY2ltYWwoJzEwMTAxMDEwMScpKQorICAgICAgICBEZWNpbWFsKCcxMDEwMTAxMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9pbnZlcnQoMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTExMTEwMDEwJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLmxvZ2ljYWxfaW52ZXJ0KGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBsb2dpY2FsX29yKHNlbGYsIGEsIGIpOgorICAgICAgICAiIiJBcHBsaWVzIHRoZSBsb2dpY2FsIG9wZXJhdGlvbiAnb3InIGJldHdlZW4gZWFjaCBvcGVyYW5kJ3MgZGlnaXRzLgorCisgICAgICAgIFRoZSBvcGVyYW5kcyBtdXN0IGJlIGJvdGggbG9naWNhbCBudW1iZXJzLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcwJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcwJyksIERlY2ltYWwoJzEnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxJyksIERlY2ltYWwoJzEnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxMTAwJyksIERlY2ltYWwoJzEwMTAnKSkKKyAgICAgICAgRGVjaW1hbCgnMTExMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxMTEwJyksIERlY2ltYWwoJzEwJykpCisgICAgICAgIERlY2ltYWwoJzExMTAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfb3IoMTEwLCAxMTAxKQorICAgICAgICBEZWNpbWFsKCcxMTExJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX29yKERlY2ltYWwoMTEwKSwgMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTExMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcigxMTAsIERlY2ltYWwoMTEwMSkpCisgICAgICAgIERlY2ltYWwoJzExMTEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubG9naWNhbF9vcihiLCBjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgbG9naWNhbF94b3Ioc2VsZiwgYSwgYik6CisgICAgICAgICIiIkFwcGxpZXMgdGhlIGxvZ2ljYWwgb3BlcmF0aW9uICd4b3InIGJldHdlZW4gZWFjaCBvcGVyYW5kJ3MgZGlnaXRzLgorCisgICAgICAgIFRoZSBvcGVyYW5kcyBtdXN0IGJlIGJvdGggbG9naWNhbCBudW1iZXJzLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCcwJykpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoJzAnKSwgRGVjaW1hbCgnMScpKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX3hvcihEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoRGVjaW1hbCgnMScpLCBEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoJzExMDAnKSwgRGVjaW1hbCgnMTAxMCcpKQorICAgICAgICBEZWNpbWFsKCcxMTAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoJzExMTEnKSwgRGVjaW1hbCgnMTAnKSkKKyAgICAgICAgRGVjaW1hbCgnMTEwMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoMTEwLCAxMTAxKQorICAgICAgICBEZWNpbWFsKCcxMDExJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX3hvcihEZWNpbWFsKDExMCksIDExMDEpCisgICAgICAgIERlY2ltYWwoJzEwMTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKDExMCwgRGVjaW1hbCgxMTAxKSkKKyAgICAgICAgRGVjaW1hbCgnMTAxMScpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5sb2dpY2FsX3hvcihiLCBjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgbWF4KHNlbGYsIGEsIGIpOgorICAgICAgICAiIiJtYXggY29tcGFyZXMgdHdvIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJucyB0aGUgbWF4aW11bS4KKworICAgICAgICBJZiBlaXRoZXIgb3BlcmFuZCBpcyBhIE5hTiB0aGVuIHRoZSBnZW5lcmFsIHJ1bGVzIGFwcGx5LgorICAgICAgICBPdGhlcndpc2UsIHRoZSBvcGVyYW5kcyBhcmUgY29tcGFyZWQgYXMgdGhvdWdoIGJ5IHRoZSBjb21wYXJlCisgICAgICAgIG9wZXJhdGlvbi4gIElmIHRoZXkgYXJlIG51bWVyaWNhbGx5IGVxdWFsIHRoZW4gdGhlIGxlZnQtaGFuZCBvcGVyYW5kCisgICAgICAgIGlzIGNob3NlbiBhcyB0aGUgcmVzdWx0LiAgT3RoZXJ3aXNlIHRoZSBtYXhpbXVtIChjbG9zZXIgdG8gcG9zaXRpdmUKKyAgICAgICAgaW5maW5pdHkpIG9mIHRoZSB0d28gb3BlcmFuZHMgaXMgY2hvc2VuIGFzIHRoZSByZXN1bHQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCcyJykpCisgICAgICAgIERlY2ltYWwoJzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heChEZWNpbWFsKCctMTAnKSwgRGVjaW1hbCgnMycpKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgnMS4wJyksIERlY2ltYWwoJzEnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnTmFOJykpCisgICAgICAgIERlY2ltYWwoJzcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heCgxLCAyKQorICAgICAgICBEZWNpbWFsKCcyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KDEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJzInKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubWF4KGIsIGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBtYXhfbWFnKHNlbGYsIGEsIGIpOgorICAgICAgICAiIiJDb21wYXJlcyB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZyhEZWNpbWFsKCc3JyksIERlY2ltYWwoJ05hTicpKQorICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnLTEwJykpCisgICAgICAgIERlY2ltYWwoJy0xMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZygxLCAtMikKKyAgICAgICAgRGVjaW1hbCgnLTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heF9tYWcoRGVjaW1hbCgxKSwgLTIpCisgICAgICAgIERlY2ltYWwoJy0yJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKDEsIERlY2ltYWwoLTIpKQorICAgICAgICBEZWNpbWFsKCctMicpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5tYXhfbWFnKGIsIGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBtaW4oc2VsZiwgYSwgYik6CisgICAgICAgICIiIm1pbiBjb21wYXJlcyB0d28gdmFsdWVzIG51bWVyaWNhbGx5IGFuZCByZXR1cm5zIHRoZSBtaW5pbXVtLgorCisgICAgICAgIElmIGVpdGhlciBvcGVyYW5kIGlzIGEgTmFOIHRoZW4gdGhlIGdlbmVyYWwgcnVsZXMgYXBwbHkuCisgICAgICAgIE90aGVyd2lzZSwgdGhlIG9wZXJhbmRzIGFyZSBjb21wYXJlZCBhcyB0aG91Z2ggYnkgdGhlIGNvbXBhcmUKKyAgICAgICAgb3BlcmF0aW9uLiAgSWYgdGhleSBhcmUgbnVtZXJpY2FsbHkgZXF1YWwgdGhlbiB0aGUgbGVmdC1oYW5kIG9wZXJhbmQKKyAgICAgICAgaXMgY2hvc2VuIGFzIHRoZSByZXN1bHQuICBPdGhlcndpc2UgdGhlIG1pbmltdW0gKGNsb3NlciB0byBuZWdhdGl2ZQorICAgICAgICBpbmZpbml0eSkgb2YgdGhlIHR3byBvcGVyYW5kcyBpcyBjaG9zZW4gYXMgdGhlIHJlc3VsdC4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbihEZWNpbWFsKCczJyksIERlY2ltYWwoJzInKSkKKyAgICAgICAgRGVjaW1hbCgnMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoJy0xMCcpLCBEZWNpbWFsKCczJykpCisgICAgICAgIERlY2ltYWwoJy0xMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoJzEuMCcpLCBEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJzEuMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnTmFOJykpCisgICAgICAgIERlY2ltYWwoJzcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbigxLCAyKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW4oRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKDEsIERlY2ltYWwoMjkpKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLm1pbihiLCBjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgbWluX21hZyhzZWxmLCBhLCBiKToKKyAgICAgICAgIiIiQ29tcGFyZXMgdGhlIHZhbHVlcyBudW1lcmljYWxseSB3aXRoIHRoZWlyIHNpZ24gaWdub3JlZC4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCctMicpKQorICAgICAgICBEZWNpbWFsKCctMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluX21hZyhEZWNpbWFsKCctMycpLCBEZWNpbWFsKCdOYU4nKSkKKyAgICAgICAgRGVjaW1hbCgnLTMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoMSwgLTIpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoRGVjaW1hbCgxKSwgLTIpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoMSwgRGVjaW1hbCgtMikpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubWluX21hZyhiLCBjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgbWludXMoc2VsZiwgYSk6CisgICAgICAgICIiIk1pbnVzIGNvcnJlc3BvbmRzIHRvIHVuYXJ5IHByZWZpeCBtaW51cyBpbiBQeXRob24uCisKKyAgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBldmFsdWF0ZWQgdXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgc3VidHJhY3Q7IHRoZQorICAgICAgICBvcGVyYXRpb24gbWludXMoYSkgaXMgY2FsY3VsYXRlZCBhcyBzdWJ0cmFjdCgnMCcsIGEpIHdoZXJlIHRoZSAnMCcKKyAgICAgICAgaGFzIHRoZSBzYW1lIGV4cG9uZW50IGFzIHRoZSBvcGVyYW5kLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWludXMoRGVjaW1hbCgnMS4zJykpCisgICAgICAgIERlY2ltYWwoJy0xLjMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbnVzKERlY2ltYWwoJy0xLjMnKSkKKyAgICAgICAgRGVjaW1hbCgnMS4zJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW51cygxKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5fX25lZ19fKGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBtdWx0aXBseShzZWxmLCBhLCBiKToKKyAgICAgICAgIiIibXVsdGlwbHkgbXVsdGlwbGllcyB0d28gb3BlcmFuZHMuCisKKyAgICAgICAgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBzcGVjaWFsIHZhbHVlIHRoZW4gdGhlIGdlbmVyYWwgcnVsZXMgYXBwbHkuCisgICAgICAgIE90aGVyd2lzZSwgdGhlIG9wZXJhbmRzIGFyZSBtdWx0aXBsaWVkIHRvZ2V0aGVyCisgICAgICAgICgnbG9uZyBtdWx0aXBsaWNhdGlvbicpLCByZXN1bHRpbmcgaW4gYSBudW1iZXIgd2hpY2ggbWF5IGJlIGFzIGxvbmcgYXMKKyAgICAgICAgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgdHdvIG9wZXJhbmRzLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCgnMS4yMCcpLCBEZWNpbWFsKCczJykpCisgICAgICAgIERlY2ltYWwoJzMuNjAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm11bHRpcGx5KERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnMycpKQorICAgICAgICBEZWNpbWFsKCcyMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCgnMC45JyksIERlY2ltYWwoJzAuOCcpKQorICAgICAgICBEZWNpbWFsKCcwLjcyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseShEZWNpbWFsKCcwLjknKSwgRGVjaW1hbCgnLTAnKSkKKyAgICAgICAgRGVjaW1hbCgnLTAuMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCgnNjU0MzIxJyksIERlY2ltYWwoJzY1NDMyMScpKQorICAgICAgICBEZWNpbWFsKCc0LjI4MTM1OTcxRSsxMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoNywgNykKKyAgICAgICAgRGVjaW1hbCgnNDknKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm11bHRpcGx5KERlY2ltYWwoNyksIDcpCisgICAgICAgIERlY2ltYWwoJzQ5JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseSg3LCBEZWNpbWFsKDcpKQorICAgICAgICBEZWNpbWFsKCc0OScpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX211bF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKKworICAgIGRlZiBuZXh0X21pbnVzKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIHNtYWxsZXIgdGhhbiBhLgorCisgICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQorICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQorICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5CisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubmV4dF9taW51cyhEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJzAuOTk5OTk5OTk5JykKKyAgICAgICAgPj4+IGMubmV4dF9taW51cyhEZWNpbWFsKCcxRS0xMDA3JykpCisgICAgICAgIERlY2ltYWwoJzBFLTEwMDcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5leHRfbWludXMoRGVjaW1hbCgnLTEuMDAwMDAwMDMnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEuMDAwMDAwMDQnKQorICAgICAgICA+Pj4gYy5uZXh0X21pbnVzKERlY2ltYWwoJ0luZmluaXR5JykpCisgICAgICAgIERlY2ltYWwoJzkuOTk5OTk5OTlFKzk5OScpCisgICAgICAgID4+PiBjLm5leHRfbWludXMoMSkKKyAgICAgICAgRGVjaW1hbCgnMC45OTk5OTk5OTknKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubmV4dF9taW51cyhjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgbmV4dF9wbHVzKHNlbGYsIGEpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzbWFsbGVzdCByZXByZXNlbnRhYmxlIG51bWJlciBsYXJnZXIgdGhhbiBhLgorCisgICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQorICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQorICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5CisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubmV4dF9wbHVzKERlY2ltYWwoJzEnKSkKKyAgICAgICAgRGVjaW1hbCgnMS4wMDAwMDAwMScpCisgICAgICAgID4+PiBjLm5leHRfcGx1cyhEZWNpbWFsKCctMUUtMTAwNycpKQorICAgICAgICBEZWNpbWFsKCctMEUtMTAwNycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubmV4dF9wbHVzKERlY2ltYWwoJy0xLjAwMDAwMDAzJykpCisgICAgICAgIERlY2ltYWwoJy0xLjAwMDAwMDAyJykKKyAgICAgICAgPj4+IGMubmV4dF9wbHVzKERlY2ltYWwoJy1JbmZpbml0eScpKQorICAgICAgICBEZWNpbWFsKCctOS45OTk5OTk5OUUrOTk5JykKKyAgICAgICAgPj4+IGMubmV4dF9wbHVzKDEpCisgICAgICAgIERlY2ltYWwoJzEuMDAwMDAwMDEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubmV4dF9wbHVzKGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBuZXh0X3Rvd2FyZChzZWxmLCBhLCBiKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgbnVtYmVyIGNsb3Nlc3QgdG8gYSwgaW4gZGlyZWN0aW9uIHRvd2FyZHMgYi4KKworICAgICAgICBUaGUgcmVzdWx0IGlzIHRoZSBjbG9zZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIGZyb20gdGhlIGZpcnN0CisgICAgICAgIG9wZXJhbmQgKGJ1dCBub3QgdGhlIGZpcnN0IG9wZXJhbmQpIHRoYXQgaXMgaW4gdGhlIGRpcmVjdGlvbgorICAgICAgICB0b3dhcmRzIHRoZSBzZWNvbmQgb3BlcmFuZCwgdW5sZXNzIHRoZSBvcGVyYW5kcyBoYXZlIHRoZSBzYW1lCisgICAgICAgIHZhbHVlLgorCisgICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQorICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQorICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5CisgICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoJzEnKSwgRGVjaW1hbCgnMicpKQorICAgICAgICBEZWNpbWFsKCcxLjAwMDAwMDAxJykKKyAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoRGVjaW1hbCgnLTFFLTEwMDcnKSwgRGVjaW1hbCgnMScpKQorICAgICAgICBEZWNpbWFsKCctMEUtMTAwNycpCisgICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoJy0xLjAwMDAwMDAzJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEuMDAwMDAwMDInKQorICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMC45OTk5OTk5OTknKQorICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKCcxRS0xMDA3JyksIERlY2ltYWwoJy0xMDAnKSkKKyAgICAgICAgRGVjaW1hbCgnMEUtMTAwNycpCisgICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoJy0xLjAwMDAwMDAzJyksIERlY2ltYWwoJy0xMCcpKQorICAgICAgICBEZWNpbWFsKCctMS4wMDAwMDAwNCcpCisgICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoJzAuMDAnKSwgRGVjaW1hbCgnLTAuMDAwMCcpKQorICAgICAgICBEZWNpbWFsKCctMC4wMCcpCisgICAgICAgID4+PiBjLm5leHRfdG93YXJkKDAsIDEpCisgICAgICAgIERlY2ltYWwoJzFFLTEwMDcnKQorICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKDApLCAxKQorICAgICAgICBEZWNpbWFsKCcxRS0xMDA3JykKKyAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoMCwgRGVjaW1hbCgxKSkKKyAgICAgICAgRGVjaW1hbCgnMUUtMTAwNycpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5uZXh0X3Rvd2FyZChiLCBjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgbm9ybWFsaXplKHNlbGYsIGEpOgorICAgICAgICAiIiJub3JtYWxpemUgcmVkdWNlcyBhbiBvcGVyYW5kIHRvIGl0cyBzaW1wbGVzdCBmb3JtLgorCisgICAgICAgIEVzc2VudGlhbGx5IGEgcGx1cyBvcGVyYXRpb24gd2l0aCBhbGwgdHJhaWxpbmcgemVyb3MgcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICByZXN1bHQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoRGVjaW1hbCgnMi4xJykpCisgICAgICAgIERlY2ltYWwoJzIuMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubm9ybWFsaXplKERlY2ltYWwoJy0yLjAnKSkKKyAgICAgICAgRGVjaW1hbCgnLTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5vcm1hbGl6ZShEZWNpbWFsKCcxLjIwMCcpKQorICAgICAgICBEZWNpbWFsKCcxLjInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5vcm1hbGl6ZShEZWNpbWFsKCctMTIwJykpCisgICAgICAgIERlY2ltYWwoJy0xLjJFKzInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5vcm1hbGl6ZShEZWNpbWFsKCcxMjAuMDAnKSkKKyAgICAgICAgRGVjaW1hbCgnMS4yRSsyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoRGVjaW1hbCgnMC4wMCcpKQorICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoNikKKyAgICAgICAgRGVjaW1hbCgnNicpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5ub3JtYWxpemUoY29udGV4dD1zZWxmKQorCisgICAgZGVmIG51bWJlcl9jbGFzcyhzZWxmLCBhKToKKyAgICAgICAgIiIiUmV0dXJucyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBjbGFzcyBvZiB0aGUgb3BlcmFuZC4KKworICAgICAgICBUaGUgY2xhc3MgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKKyAgICAgICAgICAtc05hTgorICAgICAgICAgIC1OYU4KKyAgICAgICAgICAtSW5maW5pdHkKKyAgICAgICAgICAtTm9ybWFsCisgICAgICAgICAgLVN1Ym5vcm1hbAorICAgICAgICAgIC1aZXJvCisgICAgICAgICAgK1plcm8KKyAgICAgICAgICArU3Vibm9ybWFsCisgICAgICAgICAgK05vcm1hbAorICAgICAgICAgICtJbmZpbml0eQorCisgICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQorICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQorICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5CisgICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCdJbmZpbml0eScpKQorICAgICAgICAnK0luZmluaXR5JworICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgnMUUtMTAnKSkKKyAgICAgICAgJytOb3JtYWwnCisgICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCcyLjUwJykpCisgICAgICAgICcrTm9ybWFsJworICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgnMC4xRS05OTknKSkKKyAgICAgICAgJytTdWJub3JtYWwnCisgICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCcwJykpCisgICAgICAgICcrWmVybycKKyAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy0wJykpCisgICAgICAgICctWmVybycKKyAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy0wLjFFLTk5OScpKQorICAgICAgICAnLVN1Ym5vcm1hbCcKKyAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy0xRS0xMCcpKQorICAgICAgICAnLU5vcm1hbCcKKyAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy0yLjUwJykpCisgICAgICAgICctTm9ybWFsJworICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgnLUluZmluaXR5JykpCisgICAgICAgICctSW5maW5pdHknCisgICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCdOYU4nKSkKKyAgICAgICAgJ05hTicKKyAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy1OYU4nKSkKKyAgICAgICAgJ05hTicKKyAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJ3NOYU4nKSkKKyAgICAgICAgJ3NOYU4nCisgICAgICAgID4+PiBjLm51bWJlcl9jbGFzcygxMjMpCisgICAgICAgICcrTm9ybWFsJworICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEubnVtYmVyX2NsYXNzKGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBwbHVzKHNlbGYsIGEpOgorICAgICAgICAiIiJQbHVzIGNvcnJlc3BvbmRzIHRvIHVuYXJ5IHByZWZpeCBwbHVzIGluIFB5dGhvbi4KKworICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGV2YWx1YXRlZCB1c2luZyB0aGUgc2FtZSBydWxlcyBhcyBhZGQ7IHRoZQorICAgICAgICBvcGVyYXRpb24gcGx1cyhhKSBpcyBjYWxjdWxhdGVkIGFzIGFkZCgnMCcsIGEpIHdoZXJlIHRoZSAnMCcKKyAgICAgICAgaGFzIHRoZSBzYW1lIGV4cG9uZW50IGFzIHRoZSBvcGVyYW5kLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucGx1cyhEZWNpbWFsKCcxLjMnKSkKKyAgICAgICAgRGVjaW1hbCgnMS4zJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wbHVzKERlY2ltYWwoJy0xLjMnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEuMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucGx1cygtMSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuX19wb3NfXyhjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgcG93ZXIoc2VsZiwgYSwgYiwgbW9kdWxvPU5vbmUpOgorICAgICAgICAiIiJSYWlzZXMgYSB0byB0aGUgcG93ZXIgb2YgYiwgdG8gbW9kdWxvIGlmIGdpdmVuLgorCisgICAgICAgIFdpdGggdHdvIGFyZ3VtZW50cywgY29tcHV0ZSBhKipiLiAgSWYgYSBpcyBuZWdhdGl2ZSB0aGVuIGIKKyAgICAgICAgbXVzdCBiZSBpbnRlZ3JhbC4gIFRoZSByZXN1bHQgd2lsbCBiZSBpbmV4YWN0IHVubGVzcyBiIGlzCisgICAgICAgIGludGVncmFsIGFuZCB0aGUgcmVzdWx0IGlzIGZpbml0ZSBhbmQgY2FuIGJlIGV4cHJlc3NlZCBleGFjdGx5CisgICAgICAgIGluICdwcmVjaXNpb24nIGRpZ2l0cy4KKworICAgICAgICBXaXRoIHRocmVlIGFyZ3VtZW50cywgY29tcHV0ZSAoYSoqYikgJSBtb2R1bG8uICBGb3IgdGhlCisgICAgICAgIHRocmVlIGFyZ3VtZW50IGZvcm0sIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIG9uIHRoZQorICAgICAgICBhcmd1bWVudHMgaG9sZDoKKworICAgICAgICAgLSBhbGwgdGhyZWUgYXJndW1lbnRzIG11c3QgYmUgaW50ZWdyYWwKKyAgICAgICAgIC0gYiBtdXN0IGJlIG5vbm5lZ2F0aXZlCisgICAgICAgICAtIGF0IGxlYXN0IG9uZSBvZiBhIG9yIGIgbXVzdCBiZSBub256ZXJvCisgICAgICAgICAtIG1vZHVsbyBtdXN0IGJlIG5vbnplcm8gYW5kIGhhdmUgYXQgbW9zdCAncHJlY2lzaW9uJyBkaWdpdHMKKworICAgICAgICBUaGUgcmVzdWx0IG9mIHBvdyhhLCBiLCBtb2R1bG8pIGlzIGlkZW50aWNhbCB0byB0aGUgcmVzdWx0CisgICAgICAgIHRoYXQgd291bGQgYmUgb2J0YWluZWQgYnkgY29tcHV0aW5nIChhKipiKSAlIG1vZHVsbyB3aXRoCisgICAgICAgIHVuYm91bmRlZCBwcmVjaXNpb24sIGJ1dCBpcyBjb21wdXRlZCBtb3JlIGVmZmljaWVudGx5LiAgSXQgaXMKKyAgICAgICAgYWx3YXlzIGV4YWN0LgorCisgICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQorICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQorICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5CisgICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMycpKQorICAgICAgICBEZWNpbWFsKCc4JykKKyAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLTInKSwgRGVjaW1hbCgnMycpKQorICAgICAgICBEZWNpbWFsKCctOCcpCisgICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnLTMnKSkKKyAgICAgICAgRGVjaW1hbCgnMC4xMjUnKQorICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCcxLjcnKSwgRGVjaW1hbCgnOCcpKQorICAgICAgICBEZWNpbWFsKCc2OS43NTc1NzQ0JykKKyAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnMTAnKSwgRGVjaW1hbCgnMC4zMDEwMjk5OTYnKSkKKyAgICAgICAgRGVjaW1hbCgnMi4wMDAwMDAwMCcpCisgICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJ0luZmluaXR5JyksIERlY2ltYWwoJy0xJykpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCdJbmZpbml0eScpLCBEZWNpbWFsKCcwJykpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCdJbmZpbml0eScpLCBEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKKyAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLUluZmluaXR5JyksIERlY2ltYWwoJy0xJykpCisgICAgICAgIERlY2ltYWwoJy0wJykKKyAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLUluZmluaXR5JyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJy1JbmZpbml0eScpLCBEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCisgICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJy1JbmZpbml0eScpLCBEZWNpbWFsKCcyJykpCisgICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKKyAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCcwJykpCisgICAgICAgIERlY2ltYWwoJ05hTicpCisKKyAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCc3JyksIERlY2ltYWwoJzE2JykpCisgICAgICAgIERlY2ltYWwoJzExJykKKyAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLTMnKSwgRGVjaW1hbCgnNycpLCBEZWNpbWFsKCcxNicpKQorICAgICAgICBEZWNpbWFsKCctMTEnKQorICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCctMycpLCBEZWNpbWFsKCc4JyksIERlY2ltYWwoJzE2JykpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCczJyksIERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnLTE2JykpCisgICAgICAgIERlY2ltYWwoJzExJykKKyAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnMjNFMTIzNDUnKSwgRGVjaW1hbCgnNjdFMTg5JyksIERlY2ltYWwoJzEyMzQ1Njc4OScpKQorICAgICAgICBEZWNpbWFsKCcxMTcyOTgzMCcpCisgICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJy0wJyksIERlY2ltYWwoJzE3JyksIERlY2ltYWwoJzE3MjknKSkKKyAgICAgICAgRGVjaW1hbCgnLTAnKQorICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCctMjMnKSwgRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCc2NTUzNycpKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wb3dlcig3LCA3KQorICAgICAgICBEZWNpbWFsKCc4MjM1NDMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnBvd2VyKERlY2ltYWwoNyksIDcpCisgICAgICAgIERlY2ltYWwoJzgyMzU0MycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucG93ZXIoNywgRGVjaW1hbCg3KSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX3Bvd19fKGIsIG1vZHVsbywgY29udGV4dD1zZWxmKQorICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIHF1YW50aXplKHNlbGYsIGEsIGIpOgorICAgICAgICAiIiJSZXR1cm5zIGEgdmFsdWUgZXF1YWwgdG8gJ2EnIChyb3VuZGVkKSwgaGF2aW5nIHRoZSBleHBvbmVudCBvZiAnYicuCisKKyAgICAgICAgVGhlIGNvZWZmaWNpZW50IG9mIHRoZSByZXN1bHQgaXMgZGVyaXZlZCBmcm9tIHRoYXQgb2YgdGhlIGxlZnQtaGFuZAorICAgICAgICBvcGVyYW5kLiAgSXQgbWF5IGJlIHJvdW5kZWQgdXNpbmcgdGhlIGN1cnJlbnQgcm91bmRpbmcgc2V0dGluZyAoaWYgdGhlCisgICAgICAgIGV4cG9uZW50IGlzIGJlaW5nIGluY3JlYXNlZCksIG11bHRpcGxpZWQgYnkgYSBwb3NpdGl2ZSBwb3dlciBvZiB0ZW4gKGlmCisgICAgICAgIHRoZSBleHBvbmVudCBpcyBiZWluZyBkZWNyZWFzZWQpLCBvciBpcyB1bmNoYW5nZWQgKGlmIHRoZSBleHBvbmVudCBpcworICAgICAgICBhbHJlYWR5IGVxdWFsIHRvIHRoYXQgb2YgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCkuCisKKyAgICAgICAgVW5saWtlIG90aGVyIG9wZXJhdGlvbnMsIGlmIHRoZSBsZW5ndGggb2YgdGhlIGNvZWZmaWNpZW50IGFmdGVyIHRoZQorICAgICAgICBxdWFudGl6ZSBvcGVyYXRpb24gd291bGQgYmUgZ3JlYXRlciB0aGFuIHByZWNpc2lvbiB0aGVuIGFuIEludmFsaWQKKyAgICAgICAgb3BlcmF0aW9uIGNvbmRpdGlvbiBpcyByYWlzZWQuICBUaGlzIGd1YXJhbnRlZXMgdGhhdCwgdW5sZXNzIHRoZXJlIGlzCisgICAgICAgIGFuIGVycm9yIGNvbmRpdGlvbiwgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQgb2YgYSBxdWFudGl6ZSBpcyBhbHdheXMKKyAgICAgICAgZXF1YWwgdG8gdGhhdCBvZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kLgorCisgICAgICAgIEFsc28gdW5saWtlIG90aGVyIG9wZXJhdGlvbnMsIHF1YW50aXplIHdpbGwgbmV2ZXIgcmFpc2UgVW5kZXJmbG93LCBldmVuCisgICAgICAgIGlmIHRoZSByZXN1bHQgaXMgc3Vibm9ybWFsIGFuZCBpbmV4YWN0LgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcwLjAwMScpKQorICAgICAgICBEZWNpbWFsKCcyLjE3MCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcwLjAxJykpCisgICAgICAgIERlY2ltYWwoJzIuMTcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJzIuMTcnKSwgRGVjaW1hbCgnMC4xJykpCisgICAgICAgIERlY2ltYWwoJzIuMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcxZSswJykpCisgICAgICAgIERlY2ltYWwoJzInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJzIuMTcnKSwgRGVjaW1hbCgnMWUrMScpKQorICAgICAgICBEZWNpbWFsKCcwRSsxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZShEZWNpbWFsKCctSW5mJyksIERlY2ltYWwoJ0luZmluaXR5JykpCisgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCdJbmZpbml0eScpKQorICAgICAgICBEZWNpbWFsKCdOYU4nKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJy0wLjEnKSwgRGVjaW1hbCgnMScpKQorICAgICAgICBEZWNpbWFsKCctMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnLTAnKSwgRGVjaW1hbCgnMWUrNScpKQorICAgICAgICBEZWNpbWFsKCctMEUrNScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnKzM1MjM2NDUwLjYnKSwgRGVjaW1hbCgnMWUtMicpKQorICAgICAgICBEZWNpbWFsKCdOYU4nKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJy0zNTIzNjQ1MC42JyksIERlY2ltYWwoJzFlLTInKSkKKyAgICAgICAgRGVjaW1hbCgnTmFOJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZShEZWNpbWFsKCcyMTcnKSwgRGVjaW1hbCgnMWUtMScpKQorICAgICAgICBEZWNpbWFsKCcyMTcuMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMjE3JyksIERlY2ltYWwoJzFlLTAnKSkKKyAgICAgICAgRGVjaW1hbCgnMjE3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZShEZWNpbWFsKCcyMTcnKSwgRGVjaW1hbCgnMWUrMScpKQorICAgICAgICBEZWNpbWFsKCcyLjJFKzInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJzIxNycpLCBEZWNpbWFsKCcxZSsyJykpCisgICAgICAgIERlY2ltYWwoJzJFKzInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKDEsIDIpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoMSksIDIpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKDEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEucXVhbnRpemUoYiwgY29udGV4dD1zZWxmKQorCisgICAgZGVmIHJhZGl4KHNlbGYpOgorICAgICAgICAiIiJKdXN0IHJldHVybnMgMTAsIGFzIHRoaXMgaXMgRGVjaW1hbCwgOikKKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJhZGl4KCkKKyAgICAgICAgRGVjaW1hbCgnMTAnKQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIERlY2ltYWwoMTApCisKKyAgICBkZWYgcmVtYWluZGVyKHNlbGYsIGEsIGIpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSByZW1haW5kZXIgZnJvbSBpbnRlZ2VyIGRpdmlzaW9uLgorCisgICAgICAgIFRoZSByZXN1bHQgaXMgdGhlIHJlc2lkdWUgb2YgdGhlIGRpdmlkZW5kIGFmdGVyIHRoZSBvcGVyYXRpb24gb2YKKyAgICAgICAgY2FsY3VsYXRpbmcgaW50ZWdlciBkaXZpc2lvbiBhcyBkZXNjcmliZWQgZm9yIGRpdmlkZS1pbnRlZ2VyLCByb3VuZGVkCisgICAgICAgIHRvIHByZWNpc2lvbiBkaWdpdHMgaWYgbmVjZXNzYXJ5LiAgVGhlIHNpZ24gb2YgdGhlIHJlc3VsdCwgaWYKKyAgICAgICAgbm9uLXplcm8sIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIG9yaWdpbmFsIGRpdmlkZW5kLgorCisgICAgICAgIFRoaXMgb3BlcmF0aW9uIHdpbGwgZmFpbCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIGFzIGludGVnZXIgZGl2aXNpb24KKyAgICAgICAgKHRoYXQgaXMsIGlmIGludGVnZXIgZGl2aXNpb24gb24gdGhlIHNhbWUgdHdvIG9wZXJhbmRzIHdvdWxkIGZhaWwsIHRoZQorICAgICAgICByZW1haW5kZXIgY2Fubm90IGJlIGNhbGN1bGF0ZWQpLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoJzIuMScpLCBEZWNpbWFsKCczJykpCisgICAgICAgIERlY2ltYWwoJzIuMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoJzEwJyksIERlY2ltYWwoJzMnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoJy0xMCcpLCBEZWNpbWFsKCczJykpCisgICAgICAgIERlY2ltYWwoJy0xJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoRGVjaW1hbCgnMTAuMicpLCBEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJzAuMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoJzEwJyksIERlY2ltYWwoJzAuMycpKQorICAgICAgICBEZWNpbWFsKCcwLjEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcihEZWNpbWFsKCczLjYnKSwgRGVjaW1hbCgnMS4zJykpCisgICAgICAgIERlY2ltYWwoJzEuMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKDIyLCA2KQorICAgICAgICBEZWNpbWFsKCc0JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoRGVjaW1hbCgyMiksIDYpCisgICAgICAgIERlY2ltYWwoJzQnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcigyMiwgRGVjaW1hbCg2KSkKKyAgICAgICAgRGVjaW1hbCgnNCcpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX21vZF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKKworICAgIGRlZiByZW1haW5kZXJfbmVhcihzZWxmLCBhLCBiKToKKyAgICAgICAgIiIiUmV0dXJucyB0byBiZSAiYSAtIGIgKiBuIiwgd2hlcmUgbiBpcyB0aGUgaW50ZWdlciBuZWFyZXN0IHRoZSBleGFjdAorICAgICAgICB2YWx1ZSBvZiAieCAvIGIiIChpZiB0d28gaW50ZWdlcnMgYXJlIGVxdWFsbHkgbmVhciB0aGVuIHRoZSBldmVuIG9uZQorICAgICAgICBpcyBjaG9zZW4pLiAgSWYgdGhlIHJlc3VsdCBpcyBlcXVhbCB0byAwIHRoZW4gaXRzIHNpZ24gd2lsbCBiZSB0aGUKKyAgICAgICAgc2lnbiBvZiBhLgorCisgICAgICAgIFRoaXMgb3BlcmF0aW9uIHdpbGwgZmFpbCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIGFzIGludGVnZXIgZGl2aXNpb24KKyAgICAgICAgKHRoYXQgaXMsIGlmIGludGVnZXIgZGl2aXNpb24gb24gdGhlIHNhbWUgdHdvIG9wZXJhbmRzIHdvdWxkIGZhaWwsIHRoZQorICAgICAgICByZW1haW5kZXIgY2Fubm90IGJlIGNhbGN1bGF0ZWQpLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMi4xJyksIERlY2ltYWwoJzMnKSkKKyAgICAgICAgRGVjaW1hbCgnLTAuOScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMTAnKSwgRGVjaW1hbCgnNicpKQorICAgICAgICBEZWNpbWFsKCctMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMTAnKSwgRGVjaW1hbCgnMycpKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcihEZWNpbWFsKCctMTAnKSwgRGVjaW1hbCgnMycpKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMTAuMicpLCBEZWNpbWFsKCcxJykpCisgICAgICAgIERlY2ltYWwoJzAuMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMTAnKSwgRGVjaW1hbCgnMC4zJykpCisgICAgICAgIERlY2ltYWwoJzAuMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMy42JyksIERlY2ltYWwoJzEuMycpKQorICAgICAgICBEZWNpbWFsKCctMC4zJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcigzLCAxMSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgzKSwgMTEpCisgICAgICAgIERlY2ltYWwoJzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcl9uZWFyKDMsIERlY2ltYWwoMTEpKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLnJlbWFpbmRlcl9uZWFyKGIsIGNvbnRleHQ9c2VsZikKKworICAgIGRlZiByb3RhdGUoc2VsZiwgYSwgYik6CisgICAgICAgICIiIlJldHVybnMgYSByb3RhdGVkIGNvcHkgb2YgYSwgYiB0aW1lcy4KKworICAgICAgICBUaGUgY29lZmZpY2llbnQgb2YgdGhlIHJlc3VsdCBpcyBhIHJvdGF0ZWQgY29weSBvZiB0aGUgZGlnaXRzIGluCisgICAgICAgIHRoZSBjb2VmZmljaWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4gIFRoZSBudW1iZXIgb2YgcGxhY2VzIG9mCisgICAgICAgIHJvdGF0aW9uIGlzIHRha2VuIGZyb20gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCwKKyAgICAgICAgd2l0aCB0aGUgcm90YXRpb24gYmVpbmcgdG8gdGhlIGxlZnQgaWYgdGhlIHNlY29uZCBvcGVyYW5kIGlzCisgICAgICAgIHBvc2l0aXZlIG9yIHRvIHRoZSByaWdodCBvdGhlcndpc2UuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoRGVjaW1hbCgnMzQnKSwgRGVjaW1hbCgnOCcpKQorICAgICAgICBEZWNpbWFsKCc0MDAwMDAwMDMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZShEZWNpbWFsKCcxMicpLCBEZWNpbWFsKCc5JykpCisgICAgICAgIERlY2ltYWwoJzEyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoRGVjaW1hbCgnMTIzNDU2Nzg5JyksIERlY2ltYWwoJy0yJykpCisgICAgICAgIERlY2ltYWwoJzg5MTIzNDU2NycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCcwJykpCisgICAgICAgIERlY2ltYWwoJzEyMzQ1Njc4OScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCcrMicpKQorICAgICAgICBEZWNpbWFsKCczNDU2Nzg5MTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZSgxMzMzMzMzLCAxKQorICAgICAgICBEZWNpbWFsKCcxMzMzMzMzMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKERlY2ltYWwoMTMzMzMzMyksIDEpCisgICAgICAgIERlY2ltYWwoJzEzMzMzMzMwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoMTMzMzMzMywgRGVjaW1hbCgxKSkKKyAgICAgICAgRGVjaW1hbCgnMTMzMzMzMzAnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEucm90YXRlKGIsIGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBzYW1lX3F1YW50dW0oc2VsZiwgYSwgYik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0aGUgdHdvIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQuCisKKyAgICAgICAgVGhlIHJlc3VsdCBpcyBuZXZlciBhZmZlY3RlZCBieSBlaXRoZXIgdGhlIHNpZ24gb3IgdGhlIGNvZWZmaWNpZW50IG9mCisgICAgICAgIGVpdGhlciBvcGVyYW5kLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoJzIuMTcnKSwgRGVjaW1hbCgnMC4wMDEnKSkKKyAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcwLjAxJykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcxJykpCisgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoJ0luZicpLCBEZWNpbWFsKCctSW5mJykpCisgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oMTAwMDAsIC0xKQorICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoMTAwMDApLCAtMSkKKyAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNhbWVfcXVhbnR1bSgxMDAwMCwgRGVjaW1hbCgtMSkpCisgICAgICAgIFRydWUKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLnNhbWVfcXVhbnR1bShiKQorCisgICAgZGVmIHNjYWxlYiAoc2VsZiwgYSwgYik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZpcnN0IG9wZXJhbmQgYWZ0ZXIgYWRkaW5nIHRoZSBzZWNvbmQgdmFsdWUgaXRzIGV4cC4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNjYWxlYihEZWNpbWFsKCc3LjUwJyksIERlY2ltYWwoJy0yJykpCisgICAgICAgIERlY2ltYWwoJzAuMDc1MCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKERlY2ltYWwoJzcuNTAnKSwgRGVjaW1hbCgnMCcpKQorICAgICAgICBEZWNpbWFsKCc3LjUwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zY2FsZWIoRGVjaW1hbCgnNy41MCcpLCBEZWNpbWFsKCczJykpCisgICAgICAgIERlY2ltYWwoJzcuNTBFKzMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNjYWxlYigxLCA0KQorICAgICAgICBEZWNpbWFsKCcxRSs0JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zY2FsZWIoRGVjaW1hbCgxKSwgNCkKKyAgICAgICAgRGVjaW1hbCgnMUUrNCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKDEsIERlY2ltYWwoNCkpCisgICAgICAgIERlY2ltYWwoJzFFKzQnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuc2NhbGViKGIsIGNvbnRleHQ9c2VsZikKKworICAgIGRlZiBzaGlmdChzZWxmLCBhLCBiKToKKyAgICAgICAgIiIiUmV0dXJucyBhIHNoaWZ0ZWQgY29weSBvZiBhLCBiIHRpbWVzLgorCisgICAgICAgIFRoZSBjb2VmZmljaWVudCBvZiB0aGUgcmVzdWx0IGlzIGEgc2hpZnRlZCBjb3B5IG9mIHRoZSBkaWdpdHMKKyAgICAgICAgaW4gdGhlIGNvZWZmaWNpZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLiAgVGhlIG51bWJlciBvZiBwbGFjZXMKKyAgICAgICAgdG8gc2hpZnQgaXMgdGFrZW4gZnJvbSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kLAorICAgICAgICB3aXRoIHRoZSBzaGlmdCBiZWluZyB0byB0aGUgbGVmdCBpZiB0aGUgc2Vjb25kIG9wZXJhbmQgaXMKKyAgICAgICAgcG9zaXRpdmUgb3IgdG8gdGhlIHJpZ2h0IG90aGVyd2lzZS4gIERpZ2l0cyBzaGlmdGVkIGludG8gdGhlCisgICAgICAgIGNvZWZmaWNpZW50IGFyZSB6ZXJvcy4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoJzM0JyksIERlY2ltYWwoJzgnKSkKKyAgICAgICAgRGVjaW1hbCgnNDAwMDAwMDAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdChEZWNpbWFsKCcxMicpLCBEZWNpbWFsKCc5JykpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCctMicpKQorICAgICAgICBEZWNpbWFsKCcxMjM0NTY3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdChEZWNpbWFsKCcxMjM0NTY3ODknKSwgRGVjaW1hbCgnMCcpKQorICAgICAgICBEZWNpbWFsKCcxMjM0NTY3ODknKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCcrMicpKQorICAgICAgICBEZWNpbWFsKCczNDU2Nzg5MDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KDg4ODg4ODg4LCAyKQorICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoODg4ODg4ODgpLCAyKQorICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KDg4ODg4ODg4LCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuc2hpZnQoYiwgY29udGV4dD1zZWxmKQorCisgICAgZGVmIHNxcnQoc2VsZiwgYSk6CisgICAgICAgICIiIlNxdWFyZSByb290IG9mIGEgbm9uLW5lZ2F0aXZlIG51bWJlciB0byBjb250ZXh0IHByZWNpc2lvbi4KKworICAgICAgICBJZiB0aGUgcmVzdWx0IG11c3QgYmUgaW5leGFjdCwgaXQgaXMgcm91bmRlZCB1c2luZyB0aGUgcm91bmQtaGFsZi1ldmVuCisgICAgICAgIGFsZ29yaXRobS4KKworICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNxcnQoRGVjaW1hbCgnMCcpKQorICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJy0wJykpCisgICAgICAgIERlY2ltYWwoJy0wJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJzAuMzknKSkKKyAgICAgICAgRGVjaW1hbCgnMC42MjQ0OTk4MDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNxcnQoRGVjaW1hbCgnMTAwJykpCisgICAgICAgIERlY2ltYWwoJzEwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJzEnKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3FydChEZWNpbWFsKCcxLjAnKSkKKyAgICAgICAgRGVjaW1hbCgnMS4wJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJzEuMDAnKSkKKyAgICAgICAgRGVjaW1hbCgnMS4wJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJzcnKSkKKyAgICAgICAgRGVjaW1hbCgnMi42NDU3NTEzMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3FydChEZWNpbWFsKCcxMCcpKQorICAgICAgICBEZWNpbWFsKCczLjE2MjI3NzY2JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KDIpCisgICAgICAgIERlY2ltYWwoJzEuNDE0MjEzNTYnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnByZWMKKyAgICAgICAgOQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuc3FydChjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgc3VidHJhY3Qoc2VsZiwgYSwgYik6CisgICAgICAgICIiIlJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gb3BlcmFuZHMuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKCcxLjMnKSwgRGVjaW1hbCgnMS4wNycpKQorICAgICAgICBEZWNpbWFsKCcwLjIzJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKCcxLjMnKSwgRGVjaW1hbCgnMS4zMCcpKQorICAgICAgICBEZWNpbWFsKCcwLjAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKCcxLjMnKSwgRGVjaW1hbCgnMi4wNycpKQorICAgICAgICBEZWNpbWFsKCctMC43NycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoOCwgNSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoRGVjaW1hbCg4KSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoOCwgRGVjaW1hbCg1KSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByID0gYS5fX3N1Yl9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKKworICAgIGRlZiB0b19lbmdfc3RyaW5nKHNlbGYsIGEpOgorICAgICAgICAiIiJDb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgdXNpbmcgc2NpZW50aWZpYyBub3RhdGlvbi4KKworICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgY29udGV4dC4KKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHJldHVybiBhLnRvX2VuZ19zdHJpbmcoY29udGV4dD1zZWxmKQorCisgICAgZGVmIHRvX3NjaV9zdHJpbmcoc2VsZiwgYSk6CisgICAgICAgICIiIkNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nLCB1c2luZyBzY2llbnRpZmljIG5vdGF0aW9uLgorCisgICAgICAgIFRoZSBvcGVyYXRpb24gaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBjb250ZXh0LgorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEuX19zdHJfXyhjb250ZXh0PXNlbGYpCisKKyAgICBkZWYgdG9faW50ZWdyYWxfZXhhY3Qoc2VsZiwgYSk6CisgICAgICAgICIiIlJvdW5kcyB0byBhbiBpbnRlZ2VyLgorCisgICAgICAgIFdoZW4gdGhlIG9wZXJhbmQgaGFzIGEgbmVnYXRpdmUgZXhwb25lbnQsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUKKyAgICAgICAgYXMgdXNpbmcgdGhlIHF1YW50aXplKCkgb3BlcmF0aW9uIHVzaW5nIHRoZSBnaXZlbiBvcGVyYW5kIGFzIHRoZQorICAgICAgICBsZWZ0LWhhbmQtb3BlcmFuZCwgMUUrMCBhcyB0aGUgcmlnaHQtaGFuZC1vcGVyYW5kLCBhbmQgdGhlIHByZWNpc2lvbgorICAgICAgICBvZiB0aGUgb3BlcmFuZCBhcyB0aGUgcHJlY2lzaW9uIHNldHRpbmc7IEluZXhhY3QgYW5kIFJvdW5kZWQgZmxhZ3MKKyAgICAgICAgYXJlIGFsbG93ZWQgaW4gdGhpcyBvcGVyYXRpb24uICBUaGUgcm91bmRpbmcgbW9kZSBpcyB0YWtlbiBmcm9tIHRoZQorICAgICAgICBjb250ZXh0LgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgnMi4xJykpCisgICAgICAgIERlY2ltYWwoJzInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX2V4YWN0KERlY2ltYWwoJzEwMCcpKQorICAgICAgICBEZWNpbWFsKCcxMDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX2V4YWN0KERlY2ltYWwoJzEwMC4wJykpCisgICAgICAgIERlY2ltYWwoJzEwMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgnMTAxLjUnKSkKKyAgICAgICAgRGVjaW1hbCgnMTAyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF9leGFjdChEZWNpbWFsKCctMTAxLjUnKSkKKyAgICAgICAgRGVjaW1hbCgnLTEwMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgnMTBFKzUnKSkKKyAgICAgICAgRGVjaW1hbCgnMS4wRSs2JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF9leGFjdChEZWNpbWFsKCc3Ljg5RSs3NycpKQorICAgICAgICBEZWNpbWFsKCc3Ljg5RSs3NycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgnLUluZicpKQorICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQorICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIGEudG9faW50ZWdyYWxfZXhhY3QoY29udGV4dD1zZWxmKQorCisgICAgZGVmIHRvX2ludGVncmFsX3ZhbHVlKHNlbGYsIGEpOgorICAgICAgICAiIiJSb3VuZHMgdG8gYW4gaW50ZWdlci4KKworICAgICAgICBXaGVuIHRoZSBvcGVyYW5kIGhhcyBhIG5lZ2F0aXZlIGV4cG9uZW50LCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lCisgICAgICAgIGFzIHVzaW5nIHRoZSBxdWFudGl6ZSgpIG9wZXJhdGlvbiB1c2luZyB0aGUgZ2l2ZW4gb3BlcmFuZCBhcyB0aGUKKyAgICAgICAgbGVmdC1oYW5kLW9wZXJhbmQsIDFFKzAgYXMgdGhlIHJpZ2h0LWhhbmQtb3BlcmFuZCwgYW5kIHRoZSBwcmVjaXNpb24KKyAgICAgICAgb2YgdGhlIG9wZXJhbmQgYXMgdGhlIHByZWNpc2lvbiBzZXR0aW5nLCBleGNlcHQgdGhhdCBubyBmbGFncyB3aWxsCisgICAgICAgIGJlIHNldC4gIFRoZSByb3VuZGluZyBtb2RlIGlzIHRha2VuIGZyb20gdGhlIGNvbnRleHQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKCcyLjEnKSkKKyAgICAgICAgRGVjaW1hbCgnMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfdmFsdWUoRGVjaW1hbCgnMTAwJykpCisgICAgICAgIERlY2ltYWwoJzEwMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfdmFsdWUoRGVjaW1hbCgnMTAwLjAnKSkKKyAgICAgICAgRGVjaW1hbCgnMTAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKCcxMDEuNScpKQorICAgICAgICBEZWNpbWFsKCcxMDInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX3ZhbHVlKERlY2ltYWwoJy0xMDEuNScpKQorICAgICAgICBEZWNpbWFsKCctMTAyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKCcxMEUrNScpKQorICAgICAgICBEZWNpbWFsKCcxLjBFKzYnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX3ZhbHVlKERlY2ltYWwoJzcuODlFKzc3JykpCisgICAgICAgIERlY2ltYWwoJzcuODlFKzc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKCctSW5mJykpCisgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS50b19pbnRlZ3JhbF92YWx1ZShjb250ZXh0PXNlbGYpCisKKyAgICAjIHRoZSBtZXRob2QgbmFtZSBjaGFuZ2VkLCBidXQgd2UgcHJvdmlkZSBhbHNvIHRoZSBvbGQgb25lLCBmb3IgY29tcGF0aWJpbGl0eQorICAgIHRvX2ludGVncmFsID0gdG9faW50ZWdyYWxfdmFsdWUKKworY2xhc3MgX1dvcmtSZXAob2JqZWN0KToKKyAgICBfX3Nsb3RzX18gPSAoJ3NpZ24nLCdpbnQnLCdleHAnKQorICAgICMgc2lnbjogMCBvciAxCisgICAgIyBpbnQ6ICBpbnQKKyAgICAjIGV4cDogIE5vbmUsIGludCwgb3Igc3RyaW5nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9Tm9uZSk6CisgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNpZ24gPSBOb25lCisgICAgICAgICAgICBzZWxmLmludCA9IDAKKyAgICAgICAgICAgIHNlbGYuZXhwID0gTm9uZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERlY2ltYWwpOgorICAgICAgICAgICAgc2VsZi5zaWduID0gdmFsdWUuX3NpZ24KKyAgICAgICAgICAgIHNlbGYuaW50ID0gaW50KHZhbHVlLl9pbnQpCisgICAgICAgICAgICBzZWxmLmV4cCA9IHZhbHVlLl9leHAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKQorICAgICAgICAgICAgc2VsZi5zaWduID0gdmFsdWVbMF0KKyAgICAgICAgICAgIHNlbGYuaW50ID0gdmFsdWVbMV0KKyAgICAgICAgICAgIHNlbGYuZXhwID0gdmFsdWVbMl0KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIoJXIsICVyLCAlcikiICUgKHNlbGYuc2lnbiwgc2VsZi5pbnQsIHNlbGYuZXhwKQorCisgICAgX19zdHJfXyA9IF9fcmVwcl9fCisKKworCitkZWYgX25vcm1hbGl6ZShvcDEsIG9wMiwgcHJlYyA9IDApOgorICAgICIiIk5vcm1hbGl6ZXMgb3AxLCBvcDIgdG8gaGF2ZSB0aGUgc2FtZSBleHAgYW5kIGxlbmd0aCBvZiBjb2VmZmljaWVudC4KKworICAgIERvbmUgZHVyaW5nIGFkZGl0aW9uLgorICAgICIiIgorICAgIGlmIG9wMS5leHAgPCBvcDIuZXhwOgorICAgICAgICB0bXAgPSBvcDIKKyAgICAgICAgb3RoZXIgPSBvcDEKKyAgICBlbHNlOgorICAgICAgICB0bXAgPSBvcDEKKyAgICAgICAgb3RoZXIgPSBvcDIKKworICAgICMgTGV0IGV4cCA9IG1pbih0bXAuZXhwIC0gMSwgdG1wLmFkanVzdGVkKCkgLSBwcmVjaXNpb24gLSAxKS4KKyAgICAjIFRoZW4gYWRkaW5nIDEwKipleHAgdG8gdG1wIGhhcyB0aGUgc2FtZSBlZmZlY3QgKGFmdGVyIHJvdW5kaW5nKQorICAgICMgYXMgYWRkaW5nIGFueSBwb3NpdGl2ZSBxdWFudGl0eSBzbWFsbGVyIHRoYW4gMTAqKmV4cDsgc2ltaWxhcmx5CisgICAgIyBmb3Igc3VidHJhY3Rpb24uICBTbyBpZiBvdGhlciBpcyBzbWFsbGVyIHRoYW4gMTAqKmV4cCB3ZSByZXBsYWNlCisgICAgIyBpdCB3aXRoIDEwKipleHAuICBUaGlzIGF2b2lkcyB0bXAuZXhwIC0gb3RoZXIuZXhwIGdldHRpbmcgdG9vIGxhcmdlLgorICAgIHRtcF9sZW4gPSBsZW4oc3RyKHRtcC5pbnQpKQorICAgIG90aGVyX2xlbiA9IGxlbihzdHIob3RoZXIuaW50KSkKKyAgICBleHAgPSB0bXAuZXhwICsgbWluKC0xLCB0bXBfbGVuIC0gcHJlYyAtIDIpCisgICAgaWYgb3RoZXJfbGVuICsgb3RoZXIuZXhwIC0gMSA8IGV4cDoKKyAgICAgICAgb3RoZXIuaW50ID0gMQorICAgICAgICBvdGhlci5leHAgPSBleHAKKworICAgIHRtcC5pbnQgKj0gMTAgKiogKHRtcC5leHAgLSBvdGhlci5leHApCisgICAgdG1wLmV4cCA9IG90aGVyLmV4cAorICAgIHJldHVybiBvcDEsIG9wMgorCisjIyMjIyBJbnRlZ2VyIGFyaXRobWV0aWMgZnVuY3Rpb25zIHVzZWQgYnkgbG4sIGxvZzEwLCBleHAgYW5kIF9fcG93X18gIyMjIyMKKworX25iaXRzID0gaW50LmJpdF9sZW5ndGgKKworZGVmIF9kZWNpbWFsX2xzaGlmdF9leGFjdChuLCBlKToKKyAgICAiIiIgR2l2ZW4gaW50ZWdlcnMgbiBhbmQgZSwgcmV0dXJuIG4gKiAxMCoqZSBpZiBpdCdzIGFuIGludGVnZXIsIGVsc2UgTm9uZS4KKworICAgIFRoZSBjb21wdXRhdGlvbiBpcyBkZXNpZ25lZCB0byBhdm9pZCBjb21wdXRpbmcgbGFyZ2UgcG93ZXJzIG9mIDEwCisgICAgdW5uZWNlc3NhcmlseS4KKworICAgID4+PiBfZGVjaW1hbF9sc2hpZnRfZXhhY3QoMywgNCkKKyAgICAzMDAwMAorICAgID4+PiBfZGVjaW1hbF9sc2hpZnRfZXhhY3QoMzAwLCAtOTk5OTk5OTk5KSAgIyByZXR1cm5zIE5vbmUKKworICAgICIiIgorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmV0dXJuIDAKKyAgICBlbGlmIGUgPj0gMDoKKyAgICAgICAgcmV0dXJuIG4gKiAxMCoqZQorICAgIGVsc2U6CisgICAgICAgICMgdmFsX24gPSBsYXJnZXN0IHBvd2VyIG9mIDEwIGRpdmlkaW5nIG4uCisgICAgICAgIHN0cl9uID0gc3RyKGFicyhuKSkKKyAgICAgICAgdmFsX24gPSBsZW4oc3RyX24pIC0gbGVuKHN0cl9uLnJzdHJpcCgnMCcpKQorICAgICAgICByZXR1cm4gTm9uZSBpZiB2YWxfbiA8IC1lIGVsc2UgbiAvLyAxMCoqLWUKKworZGVmIF9zcXJ0X25lYXJlc3QobiwgYSk6CisgICAgIiIiQ2xvc2VzdCBpbnRlZ2VyIHRvIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgcG9zaXRpdmUgaW50ZWdlciBuLiAgYSBpcworICAgIGFuIGluaXRpYWwgYXBwcm94aW1hdGlvbiB0byB0aGUgc3F1YXJlIHJvb3QuICBBbnkgcG9zaXRpdmUgaW50ZWdlcgorICAgIHdpbGwgZG8gZm9yIGEsIGJ1dCB0aGUgY2xvc2VyIGEgaXMgdG8gdGhlIHNxdWFyZSByb290IG9mIG4gdGhlCisgICAgZmFzdGVyIGNvbnZlcmdlbmNlIHdpbGwgYmUuCisKKyAgICAiIiIKKyAgICBpZiBuIDw9IDAgb3IgYSA8PSAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJCb3RoIGFyZ3VtZW50cyB0byBfc3FydF9uZWFyZXN0IHNob3VsZCBiZSBwb3NpdGl2ZS4iKQorCisgICAgYj0wCisgICAgd2hpbGUgYSAhPSBiOgorICAgICAgICBiLCBhID0gYSwgYS0tbi8vYT4+MQorICAgIHJldHVybiBhCisKK2RlZiBfcnNoaWZ0X25lYXJlc3QoeCwgc2hpZnQpOgorICAgICIiIkdpdmVuIGFuIGludGVnZXIgeCBhbmQgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIHNoaWZ0LCByZXR1cm4gY2xvc2VzdAorICAgIGludGVnZXIgdG8geCAvIDIqKnNoaWZ0OyB1c2Ugcm91bmQtdG8tZXZlbiBpbiBjYXNlIG9mIGEgdGllLgorCisgICAgIiIiCisgICAgYiwgcSA9IDEgPDwgc2hpZnQsIHggPj4gc2hpZnQKKyAgICByZXR1cm4gcSArICgyKih4ICYgKGItMSkpICsgKHEmMSkgPiBiKQorCitkZWYgX2Rpdl9uZWFyZXN0KGEsIGIpOgorICAgICIiIkNsb3Nlc3QgaW50ZWdlciB0byBhL2IsIGEgYW5kIGIgcG9zaXRpdmUgaW50ZWdlcnM7IHJvdW5kcyB0byBldmVuCisgICAgaW4gdGhlIGNhc2Ugb2YgYSB0aWUuCisKKyAgICAiIiIKKyAgICBxLCByID0gZGl2bW9kKGEsIGIpCisgICAgcmV0dXJuIHEgKyAoMipyICsgKHEmMSkgPiBiKQorCitkZWYgX2lsb2coeCwgTSwgTCA9IDgpOgorICAgICIiIkludGVnZXIgYXBwcm94aW1hdGlvbiB0byBNKmxvZyh4L00pLCB3aXRoIGFic29sdXRlIGVycm9yIGJvdW5kYWJsZQorICAgIGluIHRlcm1zIG9ubHkgb2YgeC9NLgorCisgICAgR2l2ZW4gcG9zaXRpdmUgaW50ZWdlcnMgeCBhbmQgTSwgcmV0dXJuIGFuIGludGVnZXIgYXBwcm94aW1hdGlvbiB0bworICAgIE0gKiBsb2coeC9NKS4gIEZvciBMID0gOCBhbmQgMC4xIDw9IHgvTSA8PSAxMCB0aGUgZGlmZmVyZW5jZQorICAgIGJldHdlZW4gdGhlIGFwcHJveGltYXRpb24gYW5kIHRoZSBleGFjdCByZXN1bHQgaXMgYXQgbW9zdCAyMi4gIEZvcgorICAgIEwgPSA4IGFuZCAxLjAgPD0geC9NIDw9IDEwLjAgdGhlIGRpZmZlcmVuY2UgaXMgYXQgbW9zdCAxNS4gIEluCisgICAgYm90aCBjYXNlcyB0aGVzZSBhcmUgdXBwZXIgYm91bmRzIG9uIHRoZSBlcnJvcjsgaXQgd2lsbCB1c3VhbGx5IGJlCisgICAgbXVjaCBzbWFsbGVyLiIiIgorCisgICAgIyBUaGUgYmFzaWMgYWxnb3JpdGhtIGlzIHRoZSBmb2xsb3dpbmc6IGxldCBsb2cxcCBiZSB0aGUgZnVuY3Rpb24KKyAgICAjIGxvZzFwKHgpID0gbG9nKDEreCkuICBUaGVuIGxvZyh4L00pID0gbG9nMXAoKHgtTSkvTSkuICBXZSB1c2UKKyAgICAjIHRoZSByZWR1Y3Rpb24KKyAgICAjCisgICAgIyAgICBsb2cxcCh5KSA9IDIqbG9nMXAoeS8oMStzcXJ0KDEreSkpKQorICAgICMKKyAgICAjIHJlcGVhdGVkbHkgdW50aWwgdGhlIGFyZ3VtZW50IHRvIGxvZzFwIGlzIHNtYWxsICg8IDIqKi1MIGluCisgICAgIyBhYnNvbHV0ZSB2YWx1ZSkuICBGb3Igc21hbGwgeSB3ZSBjYW4gdXNlIHRoZSBUYXlsb3Igc2VyaWVzCisgICAgIyBleHBhbnNpb24KKyAgICAjCisgICAgIyAgICBsb2cxcCh5KSB+IHkgLSB5KioyLzIgKyB5KiozLzMgLSAuLi4gLSAoLXkpKipUL1QKKyAgICAjCisgICAgIyB0cnVuY2F0aW5nIGF0IFQgc3VjaCB0aGF0IHkqKlQgaXMgc21hbGwgZW5vdWdoLiAgVGhlIHdob2xlCisgICAgIyBjb21wdXRhdGlvbiBpcyBjYXJyaWVkIG91dCBpbiBhIGZvcm0gb2YgZml4ZWQtcG9pbnQgYXJpdGhtZXRpYywKKyAgICAjIHdpdGggYSByZWFsIG51bWJlciB6IGJlaW5nIHJlcHJlc2VudGVkIGJ5IGFuIGludGVnZXIKKyAgICAjIGFwcHJveGltYXRpb24gdG8geipNLiAgVG8gYXZvaWQgbG9zcyBvZiBwcmVjaXNpb24sIHRoZSB5IGJlbG93CisgICAgIyBpcyBhY3R1YWxseSBhbiBpbnRlZ2VyIGFwcHJveGltYXRpb24gdG8gMioqUip5Kk0sIHdoZXJlIFIgaXMgdGhlCisgICAgIyBudW1iZXIgb2YgcmVkdWN0aW9ucyBwZXJmb3JtZWQgc28gZmFyLgorCisgICAgeSA9IHgtTQorICAgICMgYXJndW1lbnQgcmVkdWN0aW9uOyBSID0gbnVtYmVyIG9mIHJlZHVjdGlvbnMgcGVyZm9ybWVkCisgICAgUiA9IDAKKyAgICB3aGlsZSAoUiA8PSBMIGFuZCBhYnMoeSkgPDwgTC1SID49IE0gb3IKKyAgICAgICAgICAgUiA+IEwgYW5kIGFicyh5KSA+PiBSLUwgPj0gTSk6CisgICAgICAgIHkgPSBfZGl2X25lYXJlc3QoKE0qeSkgPDwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNICsgX3NxcnRfbmVhcmVzdChNKihNK19yc2hpZnRfbmVhcmVzdCh5LCBSKSksIE0pKQorICAgICAgICBSICs9IDEKKworICAgICMgVGF5bG9yIHNlcmllcyB3aXRoIFQgdGVybXMKKyAgICBUID0gLWludCgtMTAqbGVuKHN0cihNKSkvLygzKkwpKQorICAgIHlzaGlmdCA9IF9yc2hpZnRfbmVhcmVzdCh5LCBSKQorICAgIHcgPSBfZGl2X25lYXJlc3QoTSwgVCkKKyAgICBmb3IgayBpbiByYW5nZShULTEsIDAsIC0xKToKKyAgICAgICAgdyA9IF9kaXZfbmVhcmVzdChNLCBrKSAtIF9kaXZfbmVhcmVzdCh5c2hpZnQqdywgTSkKKworICAgIHJldHVybiBfZGl2X25lYXJlc3Qodyp5LCBNKQorCitkZWYgX2Rsb2cxMChjLCBlLCBwKToKKyAgICAiIiJHaXZlbiBpbnRlZ2VycyBjLCBlIGFuZCBwIHdpdGggYyA+IDAsIHAgPj0gMCwgY29tcHV0ZSBhbiBpbnRlZ2VyCisgICAgYXBwcm94aW1hdGlvbiB0byAxMCoqcCAqIGxvZzEwKGMqMTAqKmUpLCB3aXRoIGFuIGFic29sdXRlIGVycm9yIG9mCisgICAgYXQgbW9zdCAxLiAgQXNzdW1lcyB0aGF0IGMqMTAqKmUgaXMgbm90IGV4YWN0bHkgMS4iIiIKKworICAgICMgaW5jcmVhc2UgcHJlY2lzaW9uIGJ5IDI7IGNvbXBlbnNhdGUgZm9yIHRoaXMgYnkgZGl2aWRpbmcKKyAgICAjIGZpbmFsIHJlc3VsdCBieSAxMDAKKyAgICBwICs9IDIKKworICAgICMgd3JpdGUgYyoxMCoqZSBhcyBkKjEwKipmIHdpdGggZWl0aGVyOgorICAgICMgICBmID49IDAgYW5kIDEgPD0gZCA8PSAxMCwgb3IKKyAgICAjICAgZiA8PSAwIGFuZCAwLjEgPD0gZCA8PSAxLgorICAgICMgVGh1cyBmb3IgYyoxMCoqZSBjbG9zZSB0byAxLCBmID0gMAorICAgIGwgPSBsZW4oc3RyKGMpKQorICAgIGYgPSBlK2wgLSAoZStsID49IDEpCisKKyAgICBpZiBwID4gMDoKKyAgICAgICAgTSA9IDEwKipwCisgICAgICAgIGsgPSBlK3AtZgorICAgICAgICBpZiBrID49IDA6CisgICAgICAgICAgICBjICo9IDEwKiprCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjID0gX2Rpdl9uZWFyZXN0KGMsIDEwKiotaykKKworICAgICAgICBsb2dfZCA9IF9pbG9nKGMsIE0pICMgZXJyb3IgPCA1ICsgMjIgPSAyNworICAgICAgICBsb2dfMTAgPSBfbG9nMTBfZGlnaXRzKHApICMgZXJyb3IgPCAxCisgICAgICAgIGxvZ19kID0gX2Rpdl9uZWFyZXN0KGxvZ19kKk0sIGxvZ18xMCkKKyAgICAgICAgbG9nX3RlbnBvd2VyID0gZipNICMgZXhhY3QKKyAgICBlbHNlOgorICAgICAgICBsb2dfZCA9IDAgICMgZXJyb3IgPCAyLjMxCisgICAgICAgIGxvZ190ZW5wb3dlciA9IF9kaXZfbmVhcmVzdChmLCAxMCoqLXApICMgZXJyb3IgPCAwLjUKKworICAgIHJldHVybiBfZGl2X25lYXJlc3QobG9nX3RlbnBvd2VyK2xvZ19kLCAxMDApCisKK2RlZiBfZGxvZyhjLCBlLCBwKToKKyAgICAiIiJHaXZlbiBpbnRlZ2VycyBjLCBlIGFuZCBwIHdpdGggYyA+IDAsIGNvbXB1dGUgYW4gaW50ZWdlcgorICAgIGFwcHJveGltYXRpb24gdG8gMTAqKnAgKiBsb2coYyoxMCoqZSksIHdpdGggYW4gYWJzb2x1dGUgZXJyb3Igb2YKKyAgICBhdCBtb3N0IDEuICBBc3N1bWVzIHRoYXQgYyoxMCoqZSBpcyBub3QgZXhhY3RseSAxLiIiIgorCisgICAgIyBJbmNyZWFzZSBwcmVjaXNpb24gYnkgMi4gVGhlIHByZWNpc2lvbiBpbmNyZWFzZSBpcyBjb21wZW5zYXRlZAorICAgICMgZm9yIGF0IHRoZSBlbmQgd2l0aCBhIGRpdmlzaW9uIGJ5IDEwMC4KKyAgICBwICs9IDIKKworICAgICMgcmV3cml0ZSBjKjEwKiplIGFzIGQqMTAqKmYgd2l0aCBlaXRoZXIgZiA+PSAwIGFuZCAxIDw9IGQgPD0gMTAsCisgICAgIyBvciBmIDw9IDAgYW5kIDAuMSA8PSBkIDw9IDEuICBUaGVuIHdlIGNhbiBjb21wdXRlIDEwKipwICogbG9nKGMqMTAqKmUpCisgICAgIyBhcyAxMCoqcCAqIGxvZyhkKSArIDEwKipwKmYgKiBsb2coMTApLgorICAgIGwgPSBsZW4oc3RyKGMpKQorICAgIGYgPSBlK2wgLSAoZStsID49IDEpCisKKyAgICAjIGNvbXB1dGUgYXBwcm94aW1hdGlvbiB0byAxMCoqcCpsb2coZCksIHdpdGggZXJyb3IgPCAyNworICAgIGlmIHAgPiAwOgorICAgICAgICBrID0gZStwLWYKKyAgICAgICAgaWYgayA+PSAwOgorICAgICAgICAgICAgYyAqPSAxMCoqaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYyA9IF9kaXZfbmVhcmVzdChjLCAxMCoqLWspICAjIGVycm9yIG9mIDw9IDAuNSBpbiBjCisKKyAgICAgICAgIyBfaWxvZyBtYWduaWZpZXMgZXhpc3RpbmcgZXJyb3IgaW4gYyBieSBhIGZhY3RvciBvZiBhdCBtb3N0IDEwCisgICAgICAgIGxvZ19kID0gX2lsb2coYywgMTAqKnApICMgZXJyb3IgPCA1ICsgMjIgPSAyNworICAgIGVsc2U6CisgICAgICAgICMgcCA8PSAwOiBqdXN0IGFwcHJveGltYXRlIHRoZSB3aG9sZSB0aGluZyBieSAwOyBlcnJvciA8IDIuMzEKKyAgICAgICAgbG9nX2QgPSAwCisKKyAgICAjIGNvbXB1dGUgYXBwcm94aW1hdGlvbiB0byBmKjEwKipwKmxvZygxMCksIHdpdGggZXJyb3IgPCAxMS4KKyAgICBpZiBmOgorICAgICAgICBleHRyYSA9IGxlbihzdHIoYWJzKGYpKSktMQorICAgICAgICBpZiBwICsgZXh0cmEgPj0gMDoKKyAgICAgICAgICAgICMgZXJyb3IgaW4gZiAqIF9sb2cxMF9kaWdpdHMocCtleHRyYSkgPCB8ZnwgKiAxID0gfGZ8CisgICAgICAgICAgICAjIGFmdGVyIGRpdmlzaW9uLCBlcnJvciA8IHxmfC8xMCoqZXh0cmEgKyAwLjUgPCAxMCArIDAuNSA8IDExCisgICAgICAgICAgICBmX2xvZ190ZW4gPSBfZGl2X25lYXJlc3QoZipfbG9nMTBfZGlnaXRzKHArZXh0cmEpLCAxMCoqZXh0cmEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmX2xvZ190ZW4gPSAwCisgICAgZWxzZToKKyAgICAgICAgZl9sb2dfdGVuID0gMAorCisgICAgIyBlcnJvciBpbiBzdW0gPCAxMSsyNyA9IDM4OyBlcnJvciBhZnRlciBkaXZpc2lvbiA8IDAuMzggKyAwLjUgPCAxCisgICAgcmV0dXJuIF9kaXZfbmVhcmVzdChmX2xvZ190ZW4gKyBsb2dfZCwgMTAwKQorCitjbGFzcyBfTG9nMTBNZW1vaXplKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgdG8gY29tcHV0ZSwgc3RvcmUsIGFuZCBhbGxvdyByZXRyaWV2YWwgb2YsIGRpZ2l0cyBvZiB0aGUKKyAgICBjb25zdGFudCBsb2coMTApID0gMi4zMDI1ODUuLi4uICBUaGlzIGNvbnN0YW50IGlzIG5lZWRlZCBieQorICAgIERlY2ltYWwubG4sIERlY2ltYWwubG9nMTAsIERlY2ltYWwuZXhwIGFuZCBEZWNpbWFsLl9fcG93X18uIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmRpZ2l0cyA9ICIyMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDg4NiIKKworICAgIGRlZiBnZXRkaWdpdHMoc2VsZiwgcCk6CisgICAgICAgICIiIkdpdmVuIGFuIGludGVnZXIgcCA+PSAwLCByZXR1cm4gZmxvb3IoMTAqKnApKmxvZygxMCkuCisKKyAgICAgICAgRm9yIGV4YW1wbGUsIHNlbGYuZ2V0ZGlnaXRzKDMpIHJldHVybnMgMjMwMi4KKyAgICAgICAgIiIiCisgICAgICAgICMgZGlnaXRzIGFyZSBzdG9yZWQgYXMgYSBzdHJpbmcsIGZvciBxdWljayBjb252ZXJzaW9uIHRvCisgICAgICAgICMgaW50ZWdlciBpbiB0aGUgY2FzZSB0aGF0IHdlJ3ZlIGFscmVhZHkgY29tcHV0ZWQgZW5vdWdoCisgICAgICAgICMgZGlnaXRzOyB0aGUgc3RvcmVkIGRpZ2l0cyBzaG91bGQgYWx3YXlzIGJlIGNvcnJlY3QKKyAgICAgICAgIyAodHJ1bmNhdGVkLCBub3Qgcm91bmRlZCB0byBuZWFyZXN0KS4KKyAgICAgICAgaWYgcCA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwIHNob3VsZCBiZSBub25uZWdhdGl2ZSIpCisKKyAgICAgICAgaWYgcCA+PSBsZW4oc2VsZi5kaWdpdHMpOgorICAgICAgICAgICAgIyBjb21wdXRlIHArMywgcCs2LCBwKzksIC4uLiBkaWdpdHM7IGNvbnRpbnVlIHVudGlsIGF0CisgICAgICAgICAgICAjIGxlYXN0IG9uZSBvZiB0aGUgZXh0cmEgZGlnaXRzIGlzIG5vbnplcm8KKyAgICAgICAgICAgIGV4dHJhID0gMworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAjIGNvbXB1dGUgcCtleHRyYSBkaWdpdHMsIGNvcnJlY3QgdG8gd2l0aGluIDF1bHAKKyAgICAgICAgICAgICAgICBNID0gMTAqKihwK2V4dHJhKzIpCisgICAgICAgICAgICAgICAgZGlnaXRzID0gc3RyKF9kaXZfbmVhcmVzdChfaWxvZygxMCpNLCBNKSwgMTAwKSkKKyAgICAgICAgICAgICAgICBpZiBkaWdpdHNbLWV4dHJhOl0gIT0gJzAnKmV4dHJhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4dHJhICs9IDMKKyAgICAgICAgICAgICMga2VlcCBhbGwgcmVsaWFibGUgZGlnaXRzIHNvIGZhcjsgcmVtb3ZlIHRyYWlsaW5nIHplcm9zCisgICAgICAgICAgICAjIGFuZCBuZXh0IG5vbnplcm8gZGlnaXQKKyAgICAgICAgICAgIHNlbGYuZGlnaXRzID0gZGlnaXRzLnJzdHJpcCgnMCcpWzotMV0KKyAgICAgICAgcmV0dXJuIGludChzZWxmLmRpZ2l0c1s6cCsxXSkKKworX2xvZzEwX2RpZ2l0cyA9IF9Mb2cxME1lbW9pemUoKS5nZXRkaWdpdHMKKworZGVmIF9pZXhwKHgsIE0sIEw9OCk6CisgICAgIiIiR2l2ZW4gaW50ZWdlcnMgeCBhbmQgTSwgTSA+IDAsIHN1Y2ggdGhhdCB4L00gaXMgc21hbGwgaW4gYWJzb2x1dGUKKyAgICB2YWx1ZSwgY29tcHV0ZSBhbiBpbnRlZ2VyIGFwcHJveGltYXRpb24gdG8gTSpleHAoeC9NKS4gIEZvciAwIDw9CisgICAgeC9NIDw9IDIuNCwgdGhlIGFic29sdXRlIGVycm9yIGluIHRoZSByZXN1bHQgaXMgYm91bmRlZCBieSA2MCAoYW5kCisgICAgaXMgdXN1YWxseSBtdWNoIHNtYWxsZXIpLiIiIgorCisgICAgIyBBbGdvcml0aG06IHRvIGNvbXB1dGUgZXhwKHopIGZvciBhIHJlYWwgbnVtYmVyIHosIGZpcnN0IGRpdmlkZSB6CisgICAgIyBieSBhIHN1aXRhYmxlIHBvd2VyIFIgb2YgMiBzbyB0aGF0IHx6LzIqKlJ8IDwgMioqLUwuICBUaGVuCisgICAgIyBjb21wdXRlIGV4cG0xKHovMioqUikgPSBleHAoei8yKipSKSAtIDEgdXNpbmcgdGhlIHVzdWFsIFRheWxvcgorICAgICMgc2VyaWVzCisgICAgIworICAgICMgICAgIGV4cG0xKHgpID0geCArIHgqKjIvMiEgKyB4KiozLzMhICsgLi4uCisgICAgIworICAgICMgTm93IHVzZSB0aGUgaWRlbnRpdHkKKyAgICAjCisgICAgIyAgICAgZXhwbTEoMngpID0gZXhwbTEoeCkqKGV4cG0xKHgpKzIpCisgICAgIworICAgICMgUiB0aW1lcyB0byBjb21wdXRlIHRoZSBzZXF1ZW5jZSBleHBtMSh6LzIqKlIpLAorICAgICMgZXhwbTEoei8yKiooUi0xKSksIC4uLiAsIGV4cCh6LzIpLCBleHAoeikuCisKKyAgICAjIEZpbmQgUiBzdWNoIHRoYXQgeC8yKipSL00gPD0gMioqLUwKKyAgICBSID0gX25iaXRzKCh4PDxMKS8vTSkKKworICAgICMgVGF5bG9yIHNlcmllcy4gICgyKipMKSoqVCA+IE0KKyAgICBUID0gLWludCgtMTAqbGVuKHN0cihNKSkvLygzKkwpKQorICAgIHkgPSBfZGl2X25lYXJlc3QoeCwgVCkKKyAgICBNc2hpZnQgPSBNPDxSCisgICAgZm9yIGkgaW4gcmFuZ2UoVC0xLCAwLCAtMSk6CisgICAgICAgIHkgPSBfZGl2X25lYXJlc3QoeCooTXNoaWZ0ICsgeSksIE1zaGlmdCAqIGkpCisKKyAgICAjIEV4cGFuc2lvbgorICAgIGZvciBrIGluIHJhbmdlKFItMSwgLTEsIC0xKToKKyAgICAgICAgTXNoaWZ0ID0gTTw8KGsrMikKKyAgICAgICAgeSA9IF9kaXZfbmVhcmVzdCh5Kih5K01zaGlmdCksIE1zaGlmdCkKKworICAgIHJldHVybiBNK3kKKworZGVmIF9kZXhwKGMsIGUsIHApOgorICAgICIiIkNvbXB1dGUgYW4gYXBwcm94aW1hdGlvbiB0byBleHAoYyoxMCoqZSksIHdpdGggcCBkZWNpbWFsIHBsYWNlcyBvZgorICAgIHByZWNpc2lvbi4KKworICAgIFJldHVybnMgaW50ZWdlcnMgZCwgZiBzdWNoIHRoYXQ6CisKKyAgICAgIDEwKioocC0xKSA8PSBkIDw9IDEwKipwLCBhbmQKKyAgICAgIChkLTEpKjEwKipmIDwgZXhwKGMqMTAqKmUpIDwgKGQrMSkqMTAqKmYKKworICAgIEluIG90aGVyIHdvcmRzLCBkKjEwKipmIGlzIGFuIGFwcHJveGltYXRpb24gdG8gZXhwKGMqMTAqKmUpIHdpdGggcAorICAgIGRpZ2l0cyBvZiBwcmVjaXNpb24sIGFuZCB3aXRoIGFuIGVycm9yIGluIGQgb2YgYXQgbW9zdCAxLiAgVGhpcyBpcworICAgIGFsbW9zdCwgYnV0IG5vdCBxdWl0ZSwgdGhlIHNhbWUgYXMgdGhlIGVycm9yIGJlaW5nIDwgMXVscDogd2hlbiBkCisgICAgPSAxMCoqKHAtMSkgdGhlIGVycm9yIGNvdWxkIGJlIHVwIHRvIDEwIHVscC4iIiIKKworICAgICMgd2UnbGwgY2FsbCBpZXhwIHdpdGggTSA9IDEwKioocCsyKSwgZ2l2aW5nIHArMyBkaWdpdHMgb2YgcHJlY2lzaW9uCisgICAgcCArPSAyCisKKyAgICAjIGNvbXB1dGUgbG9nKDEwKSB3aXRoIGV4dHJhIHByZWNpc2lvbiA9IGFkanVzdGVkIGV4cG9uZW50IG9mIGMqMTAqKmUKKyAgICBleHRyYSA9IG1heCgwLCBlICsgbGVuKHN0cihjKSkgLSAxKQorICAgIHEgPSBwICsgZXh0cmEKKworICAgICMgY29tcHV0ZSBxdW90aWVudCBjKjEwKiplLyhsb2coMTApKSA9IGMqMTAqKihlK3EpLyhsb2coMTApKjEwKipxKSwKKyAgICAjIHJvdW5kaW5nIGRvd24KKyAgICBzaGlmdCA9IGUrcQorICAgIGlmIHNoaWZ0ID49IDA6CisgICAgICAgIGNzaGlmdCA9IGMqMTAqKnNoaWZ0CisgICAgZWxzZToKKyAgICAgICAgY3NoaWZ0ID0gYy8vMTAqKi1zaGlmdAorICAgIHF1b3QsIHJlbSA9IGRpdm1vZChjc2hpZnQsIF9sb2cxMF9kaWdpdHMocSkpCisKKyAgICAjIHJlZHVjZSByZW1haW5kZXIgYmFjayB0byBvcmlnaW5hbCBwcmVjaXNpb24KKyAgICByZW0gPSBfZGl2X25lYXJlc3QocmVtLCAxMCoqZXh0cmEpCisKKyAgICAjIGVycm9yIGluIHJlc3VsdCBvZiBfaWV4cCA8IDEyMDsgIGVycm9yIGFmdGVyIGRpdmlzaW9uIDwgMC42MgorICAgIHJldHVybiBfZGl2X25lYXJlc3QoX2lleHAocmVtLCAxMCoqcCksIDEwMDApLCBxdW90IC0gcCArIDMKKworZGVmIF9kcG93ZXIoeGMsIHhlLCB5YywgeWUsIHApOgorICAgICIiIkdpdmVuIGludGVnZXJzIHhjLCB4ZSwgeWMgYW5kIHllIHJlcHJlc2VudGluZyBEZWNpbWFscyB4ID0geGMqMTAqKnhlIGFuZAorICAgIHkgPSB5YyoxMCoqeWUsIGNvbXB1dGUgeCoqeS4gIFJldHVybnMgYSBwYWlyIG9mIGludGVnZXJzIChjLCBlKSBzdWNoIHRoYXQ6CisKKyAgICAgIDEwKioocC0xKSA8PSBjIDw9IDEwKipwLCBhbmQKKyAgICAgIChjLTEpKjEwKiplIDwgeCoqeSA8IChjKzEpKjEwKiplCisKKyAgICBpbiBvdGhlciB3b3JkcywgYyoxMCoqZSBpcyBhbiBhcHByb3hpbWF0aW9uIHRvIHgqKnkgd2l0aCBwIGRpZ2l0cworICAgIG9mIHByZWNpc2lvbiwgYW5kIHdpdGggYW4gZXJyb3IgaW4gYyBvZiBhdCBtb3N0IDEuICAoVGhpcyBpcworICAgIGFsbW9zdCwgYnV0IG5vdCBxdWl0ZSwgdGhlIHNhbWUgYXMgdGhlIGVycm9yIGJlaW5nIDwgMXVscDogd2hlbiBjCisgICAgPT0gMTAqKihwLTEpIHdlIGNhbiBvbmx5IGd1YXJhbnRlZSBlcnJvciA8IDEwdWxwLikKKworICAgIFdlIGFzc3VtZSB0aGF0OiB4IGlzIHBvc2l0aXZlIGFuZCBub3QgZXF1YWwgdG8gMSwgYW5kIHkgaXMgbm9uemVyby4KKyAgICAiIiIKKworICAgICMgRmluZCBiIHN1Y2ggdGhhdCAxMCoqKGItMSkgPD0gfHl8IDw9IDEwKipiCisgICAgYiA9IGxlbihzdHIoYWJzKHljKSkpICsgeWUKKworICAgICMgbG9nKHgpID0gbHhjKjEwKiooLXAtYi0xKSwgdG8gcCtiKzEgcGxhY2VzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50CisgICAgbHhjID0gX2Rsb2coeGMsIHhlLCBwK2IrMSkKKworICAgICMgY29tcHV0ZSBwcm9kdWN0IHkqbG9nKHgpID0geWMqbHhjKjEwKiooLXAtYi0xK3llKSA9IHBjKjEwKiooLXAtMSkKKyAgICBzaGlmdCA9IHllLWIKKyAgICBpZiBzaGlmdCA+PSAwOgorICAgICAgICBwYyA9IGx4Yyp5YyoxMCoqc2hpZnQKKyAgICBlbHNlOgorICAgICAgICBwYyA9IF9kaXZfbmVhcmVzdChseGMqeWMsIDEwKiotc2hpZnQpCisKKyAgICBpZiBwYyA9PSAwOgorICAgICAgICAjIHdlIHByZWZlciBhIHJlc3VsdCB0aGF0IGlzbid0IGV4YWN0bHkgMTsgdGhpcyBtYWtlcyBpdAorICAgICAgICAjIGVhc2llciB0byBjb21wdXRlIGEgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IGluIF9fcG93X18KKyAgICAgICAgaWYgKChsZW4oc3RyKHhjKSkgKyB4ZSA+PSAxKSA9PSAoeWMgPiAwKSk6ICMgaWYgeCoqeSA+IDE6CisgICAgICAgICAgICBjb2VmZiwgZXhwID0gMTAqKihwLTEpKzEsIDEtcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29lZmYsIGV4cCA9IDEwKipwLTEsIC1wCisgICAgZWxzZToKKyAgICAgICAgY29lZmYsIGV4cCA9IF9kZXhwKHBjLCAtKHArMSksIHArMSkKKyAgICAgICAgY29lZmYgPSBfZGl2X25lYXJlc3QoY29lZmYsIDEwKQorICAgICAgICBleHAgKz0gMQorCisgICAgcmV0dXJuIGNvZWZmLCBleHAKKworZGVmIF9sb2cxMF9sYihjLCBjb3JyZWN0aW9uID0geworICAgICAgICAnMSc6IDEwMCwgJzInOiA3MCwgJzMnOiA1MywgJzQnOiA0MCwgJzUnOiAzMSwKKyAgICAgICAgJzYnOiAyMywgJzcnOiAxNiwgJzgnOiAxMCwgJzknOiA1fSk6CisgICAgIiIiQ29tcHV0ZSBhIGxvd2VyIGJvdW5kIGZvciAxMDAqbG9nMTAoYykgZm9yIGEgcG9zaXRpdmUgaW50ZWdlciBjLiIiIgorICAgIGlmIGMgPD0gMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIGFyZ3VtZW50IHRvIF9sb2cxMF9sYiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuIikKKyAgICBzdHJfYyA9IHN0cihjKQorICAgIHJldHVybiAxMDAqbGVuKHN0cl9jKSAtIGNvcnJlY3Rpb25bc3RyX2NbMF1dCisKKyMjIyMjIEhlbHBlciBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9RmFsc2UsIGFsbG93X2Zsb2F0PUZhbHNlKToKKyAgICAiIiJDb252ZXJ0IG90aGVyIHRvIERlY2ltYWwuCisKKyAgICBWZXJpZmllcyB0aGF0IGl0J3Mgb2sgdG8gdXNlIGluIGFuIGltcGxpY2l0IGNvbnN0cnVjdGlvbi4KKyAgICBJZiBhbGxvd19mbG9hdCBpcyB0cnVlLCBhbGxvdyBjb252ZXJzaW9uIGZyb20gZmxvYXQ7ICB0aGlzCisgICAgaXMgdXNlZCBpbiB0aGUgY29tcGFyaXNvbiBtZXRob2RzIChfX2VxX18gYW5kIGZyaWVuZHMpLgorCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgRGVjaW1hbCk6CisgICAgICAgIHJldHVybiBvdGhlcgorICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCk6CisgICAgICAgIHJldHVybiBEZWNpbWFsKG90aGVyKQorICAgIGlmIGFsbG93X2Zsb2F0IGFuZCBpc2luc3RhbmNlKG90aGVyLCBmbG9hdCk6CisgICAgICAgIHJldHVybiBEZWNpbWFsLmZyb21fZmxvYXQob3RoZXIpCisKKyAgICBpZiByYWlzZWl0OgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgb3RoZXIpCisgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKK2RlZiBfY29udmVydF9mb3JfY29tcGFyaXNvbihzZWxmLCBvdGhlciwgZXF1YWxpdHlfb3A9RmFsc2UpOgorICAgICIiIkdpdmVuIGEgRGVjaW1hbCBpbnN0YW5jZSBzZWxmIGFuZCBhIFB5dGhvbiBvYmplY3Qgb3RoZXIsIHJldHVybgorICAgIGEgcGFpciAocywgbykgb2YgRGVjaW1hbCBpbnN0YW5jZXMgc3VjaCB0aGF0ICJzIG9wIG8iIGlzCisgICAgZXF1aXZhbGVudCB0byAic2VsZiBvcCBvdGhlciIgZm9yIGFueSBvZiB0aGUgNiBjb21wYXJpc29uCisgICAgb3BlcmF0b3JzICJvcCIuCisKKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBEZWNpbWFsKToKKyAgICAgICAgcmV0dXJuIHNlbGYsIG90aGVyCisKKyAgICAjIENvbXBhcmlzb24gd2l0aCBhIFJhdGlvbmFsIGluc3RhbmNlIChhbHNvIGluY2x1ZGVzIGludGVnZXJzKToKKyAgICAjIHNlbGYgb3Agbi9kIDw9PiBzZWxmKmQgb3AgbiAoZm9yIG4gYW5kIGQgaW50ZWdlcnMsIGQgcG9zaXRpdmUpLgorICAgICMgQSBOYU4gb3IgaW5maW5pdHkgY2FuIGJlIGxlZnQgdW5jaGFuZ2VkIHdpdGhvdXQgYWZmZWN0aW5nIHRoZQorICAgICMgY29tcGFyaXNvbiByZXN1bHQuCisgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgX251bWJlcnMuUmF0aW9uYWwpOgorICAgICAgICBpZiBub3Qgc2VsZi5faXNfc3BlY2lhbDoKKyAgICAgICAgICAgIHNlbGYgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoaW50KHNlbGYuX2ludCkgKiBvdGhlci5kZW5vbWluYXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHApCisgICAgICAgIHJldHVybiBzZWxmLCBEZWNpbWFsKG90aGVyLm51bWVyYXRvcikKKworICAgICMgQ29tcGFyaXNvbnMgd2l0aCBmbG9hdCBhbmQgY29tcGxleCB0eXBlcy4gID09IGFuZCAhPSBjb21wYXJpc29ucworICAgICMgd2l0aCBjb21wbGV4IG51bWJlcnMgc2hvdWxkIHN1Y2NlZWQsIHJldHVybmluZyBlaXRoZXIgVHJ1ZSBvciBGYWxzZQorICAgICMgYXMgYXBwcm9wcmlhdGUuICBPdGhlciBjb21wYXJpc29ucyByZXR1cm4gTm90SW1wbGVtZW50ZWQuCisgICAgaWYgZXF1YWxpdHlfb3AgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIF9udW1iZXJzLkNvbXBsZXgpIGFuZCBvdGhlci5pbWFnID09IDA6CisgICAgICAgIG90aGVyID0gb3RoZXIucmVhbAorICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGZsb2F0KToKKyAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQorICAgICAgICBpZiBlcXVhbGl0eV9vcDoKKyAgICAgICAgICAgIGNvbnRleHQuZmxhZ3NbRmxvYXRPcGVyYXRpb25dID0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoRmxvYXRPcGVyYXRpb24sCisgICAgICAgICAgICAgICAgInN0cmljdCBzZW1hbnRpY3MgZm9yIG1peGluZyBmbG9hdHMgYW5kIERlY2ltYWxzIGFyZSBlbmFibGVkIikKKyAgICAgICAgcmV0dXJuIHNlbGYsIERlY2ltYWwuZnJvbV9mbG9hdChvdGhlcikKKyAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQsIE5vdEltcGxlbWVudGVkCisKKworIyMjIyMgU2V0dXAgU3BlY2lmaWMgQ29udGV4dHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBUaGUgZGVmYXVsdCBjb250ZXh0IHByb3RvdHlwZSB1c2VkIGJ5IENvbnRleHQoKQorIyBJcyBtdXRhYmxlLCBzbyB0aGF0IG5ldyBjb250ZXh0cyBjYW4gaGF2ZSBkaWZmZXJlbnQgZGVmYXVsdCB2YWx1ZXMKKworRGVmYXVsdENvbnRleHQgPSBDb250ZXh0KAorICAgICAgICBwcmVjPTI4LCByb3VuZGluZz1ST1VORF9IQUxGX0VWRU4sCisgICAgICAgIHRyYXBzPVtEaXZpc2lvbkJ5WmVybywgT3ZlcmZsb3csIEludmFsaWRPcGVyYXRpb25dLAorICAgICAgICBmbGFncz1bXSwKKyAgICAgICAgRW1heD05OTk5OTksCisgICAgICAgIEVtaW49LTk5OTk5OSwKKyAgICAgICAgY2FwaXRhbHM9MSwKKyAgICAgICAgY2xhbXA9MAorKQorCisjIFByZS1tYWRlIGFsdGVybmF0ZSBjb250ZXh0cyBvZmZlcmVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uCisjIERvbid0IGNoYW5nZSB0aGVzZTsgdGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gc2VsZWN0IHRoZXNlCisjIGNvbnRleHRzIGFuZCBiZSBhYmxlIHRvIHJlcHJvZHVjZSByZXN1bHRzIGZyb20gb3RoZXIgaW1wbGVtZW50YXRpb25zCisjIG9mIHRoZSBzcGVjLgorCitCYXNpY0NvbnRleHQgPSBDb250ZXh0KAorICAgICAgICBwcmVjPTksIHJvdW5kaW5nPVJPVU5EX0hBTEZfVVAsCisgICAgICAgIHRyYXBzPVtEaXZpc2lvbkJ5WmVybywgT3ZlcmZsb3csIEludmFsaWRPcGVyYXRpb24sIENsYW1wZWQsIFVuZGVyZmxvd10sCisgICAgICAgIGZsYWdzPVtdLAorKQorCitFeHRlbmRlZENvbnRleHQgPSBDb250ZXh0KAorICAgICAgICBwcmVjPTksIHJvdW5kaW5nPVJPVU5EX0hBTEZfRVZFTiwKKyAgICAgICAgdHJhcHM9W10sCisgICAgICAgIGZsYWdzPVtdLAorKQorCisKKyMjIyMjIGNydWQgZm9yIHBhcnNpbmcgc3RyaW5ncyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgUmVndWxhciBleHByZXNzaW9uIHVzZWQgZm9yIHBhcnNpbmcgbnVtZXJpYyBzdHJpbmdzLiAgQWRkaXRpb25hbAorIyBjb21tZW50czoKKyMKKyMgMS4gVW5jb21tZW50IHRoZSB0d28gJ1xzKicgbGluZXMgdG8gYWxsb3cgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcKKyMgd2hpdGVzcGFjZS4gIEJ1dCBub3RlIHRoYXQgdGhlIHNwZWNpZmljYXRpb24gZGlzYWxsb3dzIHdoaXRlc3BhY2UgaW4KKyMgYSBudW1lcmljIHN0cmluZy4KKyMKKyMgMi4gRm9yIGZpbml0ZSBudW1iZXJzIChub3QgaW5maW5pdGllcyBhbmQgTmFOcykgdGhlIGJvZHkgb2YgdGhlCisjIG51bWJlciBiZXR3ZWVuIHRoZSBvcHRpb25hbCBzaWduIGFuZCB0aGUgb3B0aW9uYWwgZXhwb25lbnQgbXVzdCBoYXZlCisjIGF0IGxlYXN0IG9uZSBkZWNpbWFsIGRpZ2l0LCBwb3NzaWJseSBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gIFRoZQorIyBsb29rYWhlYWQgZXhwcmVzc2lvbiAnKD89XGR8XC5cZCknIGNoZWNrcyB0aGlzLgorCitpbXBvcnQgcmUKK19wYXJzZXIgPSByZS5jb21waWxlKHIiIiIgICAgICAgICMgQSBudW1lcmljIHN0cmluZyBjb25zaXN0cyBvZjoKKyMgICAgXHMqCisgICAgKD9QPHNpZ24+Wy0rXSk/ICAgICAgICAgICAgICAjIGFuIG9wdGlvbmFsIHNpZ24sIGZvbGxvd2VkIGJ5IGVpdGhlci4uLgorICAgICgKKyAgICAgICAgKD89XGR8XC5cZCkgICAgICAgICAgICAgICMgLi4uYSBudW1iZXIgKHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0KQorICAgICAgICAoP1A8aW50PlxkKikgICAgICAgICAgICAgIyBoYXZpbmcgYSAocG9zc2libHkgZW1wdHkpIGludGVnZXIgcGFydAorICAgICAgICAoXC4oP1A8ZnJhYz5cZCopKT8gICAgICAgIyBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBmcmFjdGlvbmFsIHBhcnQKKyAgICAgICAgKEUoP1A8ZXhwPlstK10/XGQrKSk/ICAgICMgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgZXhwb25lbnQsIG9yLi4uCisgICAgfAorICAgICAgICBJbmYoaW5pdHkpPyAgICAgICAgICAgICAgIyAuLi5hbiBpbmZpbml0eSwgb3IuLi4KKyAgICB8CisgICAgICAgICg/UDxzaWduYWw+cyk/ICAgICAgICAgICAjIC4uLmFuIChvcHRpb25hbGx5IHNpZ25hbGluZykKKyAgICAgICAgTmFOICAgICAgICAgICAgICAgICAgICAgICMgTmFOCisgICAgICAgICg/UDxkaWFnPlxkKikgICAgICAgICAgICAjIHdpdGggKHBvc3NpYmx5IGVtcHR5KSBkaWFnbm9zdGljIGluZm8uCisgICAgKQorIyAgICBccyoKKyAgICBcWgorIiIiLCByZS5WRVJCT1NFIHwgcmUuSUdOT1JFQ0FTRSkubWF0Y2gKKworX2FsbF96ZXJvcyA9IHJlLmNvbXBpbGUoJzAqJCcpLm1hdGNoCitfZXhhY3RfaGFsZiA9IHJlLmNvbXBpbGUoJzUwKiQnKS5tYXRjaAorCisjIyMjIyBQRVAzMTAxIHN1cHBvcnQgZnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIHNlY3Rpb24gaGF2ZSBsaXR0bGUgdG8gZG8gd2l0aCB0aGUgRGVjaW1hbAorIyBjbGFzcywgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJldXNlZCBvciBhZGFwdGVkIGZvciBvdGhlciBwdXJlCisjIFB5dGhvbiBudW1lcmljIGNsYXNzZXMgdGhhdCB3YW50IHRvIGltcGxlbWVudCBfX2Zvcm1hdF9fCisjCisjIEEgZm9ybWF0IHNwZWNpZmllciBmb3IgRGVjaW1hbCBsb29rcyBsaWtlOgorIworIyAgIFtbZmlsbF1hbGlnbl1bc2lnbl1bI11bMF1bbWluaW11bXdpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXQorCitfcGFyc2VfZm9ybWF0X3NwZWNpZmllcl9yZWdleCA9IHJlLmNvbXBpbGUociIiIlxBCisoPzoKKyAgICg/UDxmaWxsPi4pPworICAgKD9QPGFsaWduPls8Pj1eXSkKKyk/CisoP1A8c2lnbj5bLSsgXSk/CisoP1A8YWx0PlwjKT8KKyg/UDx6ZXJvcGFkPjApPworKD9QPG1pbmltdW13aWR0aD4oPyEwKVxkKyk/CisoP1A8dGhvdXNhbmRzX3NlcD4sKT8KKyg/OlwuKD9QPHByZWNpc2lvbj4wfCg/ITApXGQrKSk/CisoP1A8dHlwZT5bZUVmRmdHbiVdKT8KK1xaCisiIiIsIHJlLlZFUkJPU0V8cmUuRE9UQUxMKQorCitkZWwgcmUKKworIyBUaGUgbG9jYWxlIG1vZHVsZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlICduJyBmb3JtYXQgc3BlY2lmaWVyLiAgVGhlCisjIHJlc3Qgb2YgdGhlIFBFUCAzMTAxIGNvZGUgZnVuY3Rpb25zIHF1aXRlIGhhcHBpbHkgd2l0aG91dCBpdCwgc28gd2UKKyMgZG9uJ3QgY2FyZSB0b28gbXVjaCBpZiBsb2NhbGUgaXNuJ3QgcHJlc2VudC4KK3RyeToKKyAgICBpbXBvcnQgbG9jYWxlIGFzIF9sb2NhbGUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKK2RlZiBfcGFyc2VfZm9ybWF0X3NwZWNpZmllcihmb3JtYXRfc3BlYywgX2xvY2FsZWNvbnY9Tm9uZSk6CisgICAgIiIiUGFyc2UgYW5kIHZhbGlkYXRlIGEgZm9ybWF0IHNwZWNpZmllci4KKworICAgIFR1cm5zIGEgc3RhbmRhcmQgbnVtZXJpYyBmb3JtYXQgc3BlY2lmaWVyIGludG8gYSBkaWN0LCB3aXRoIHRoZQorICAgIGZvbGxvd2luZyBlbnRyaWVzOgorCisgICAgICBmaWxsOiBmaWxsIGNoYXJhY3RlciB0byBwYWQgZmllbGQgdG8gbWluaW11bSB3aWR0aAorICAgICAgYWxpZ246IGFsaWdubWVudCB0eXBlLCBlaXRoZXIgJzwnLCAnPicsICc9JyBvciAnXicKKyAgICAgIHNpZ246IGVpdGhlciAnKycsICctJyBvciAnICcKKyAgICAgIG1pbmltdW13aWR0aDogbm9ubmVnYXRpdmUgaW50ZWdlciBnaXZpbmcgbWluaW11bSB3aWR0aAorICAgICAgemVyb3BhZDogYm9vbGVhbiwgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHBhZCB3aXRoIHplcm9zCisgICAgICB0aG91c2FuZHNfc2VwOiBzdHJpbmcgdG8gdXNlIGFzIHRob3VzYW5kcyBzZXBhcmF0b3IsIG9yICcnCisgICAgICBncm91cGluZzogZ3JvdXBpbmcgZm9yIHRob3VzYW5kcyBzZXBhcmF0b3JzLCBpbiBmb3JtYXQKKyAgICAgICAgdXNlZCBieSBsb2NhbGVjb252CisgICAgICBkZWNpbWFsX3BvaW50OiBzdHJpbmcgdG8gdXNlIGZvciBkZWNpbWFsIHBvaW50CisgICAgICBwcmVjaXNpb246IG5vbm5lZ2F0aXZlIGludGVnZXIgZ2l2aW5nIHByZWNpc2lvbiwgb3IgTm9uZQorICAgICAgdHlwZTogb25lIG9mIHRoZSBjaGFyYWN0ZXJzICdlRWZGZ0clJywgb3IgTm9uZQorCisgICAgIiIiCisgICAgbSA9IF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyX3JlZ2V4Lm1hdGNoKGZvcm1hdF9zcGVjKQorICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBmb3JtYXQgc3BlY2lmaWVyOiAiICsgZm9ybWF0X3NwZWMpCisKKyAgICAjIGdldCB0aGUgZGljdGlvbmFyeQorICAgIGZvcm1hdF9kaWN0ID0gbS5ncm91cGRpY3QoKQorCisgICAgIyB6ZXJvcGFkOyBkZWZhdWx0cyBmb3IgZmlsbCBhbmQgYWxpZ25tZW50LiAgSWYgemVybyBwYWRkaW5nCisgICAgIyBpcyByZXF1ZXN0ZWQsIHRoZSBmaWxsIGFuZCBhbGlnbiBmaWVsZHMgc2hvdWxkIGJlIGFic2VudC4KKyAgICBmaWxsID0gZm9ybWF0X2RpY3RbJ2ZpbGwnXQorICAgIGFsaWduID0gZm9ybWF0X2RpY3RbJ2FsaWduJ10KKyAgICBmb3JtYXRfZGljdFsnemVyb3BhZCddID0gKGZvcm1hdF9kaWN0Wyd6ZXJvcGFkJ10gaXMgbm90IE5vbmUpCisgICAgaWYgZm9ybWF0X2RpY3RbJ3plcm9wYWQnXToKKyAgICAgICAgaWYgZmlsbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZpbGwgY2hhcmFjdGVyIGNvbmZsaWN0cyB3aXRoICcwJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbiBmb3JtYXQgc3BlY2lmaWVyOiAiICsgZm9ybWF0X3NwZWMpCisgICAgICAgIGlmIGFsaWduIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQWxpZ25tZW50IGNvbmZsaWN0cyB3aXRoICcwJyBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgc3BlY2lmaWVyOiAiICsgZm9ybWF0X3NwZWMpCisgICAgZm9ybWF0X2RpY3RbJ2ZpbGwnXSA9IGZpbGwgb3IgJyAnCisgICAgIyBQRVAgMzEwMSBvcmlnaW5hbGx5IHNwZWNpZmllZCB0aGF0IHRoZSBkZWZhdWx0IGFsaWdubWVudCBzaG91bGQKKyAgICAjIGJlIGxlZnQ7ICBpdCB3YXMgbGF0ZXIgYWdyZWVkIHRoYXQgcmlnaHQtYWxpZ25lZCBtYWtlcyBtb3JlIHNlbnNlCisgICAgIyBmb3IgbnVtZXJpYyB0eXBlcy4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjg1Ny4KKyAgICBmb3JtYXRfZGljdFsnYWxpZ24nXSA9IGFsaWduIG9yICc+JworCisgICAgIyBkZWZhdWx0IHNpZ24gaGFuZGxpbmc6ICctJyBmb3IgbmVnYXRpdmUsICcnIGZvciBwb3NpdGl2ZQorICAgIGlmIGZvcm1hdF9kaWN0WydzaWduJ10gaXMgTm9uZToKKyAgICAgICAgZm9ybWF0X2RpY3RbJ3NpZ24nXSA9ICctJworCisgICAgIyBtaW5pbXVtd2lkdGggZGVmYXVsdHMgdG8gMDsgcHJlY2lzaW9uIHJlbWFpbnMgTm9uZSBpZiBub3QgZ2l2ZW4KKyAgICBmb3JtYXRfZGljdFsnbWluaW11bXdpZHRoJ10gPSBpbnQoZm9ybWF0X2RpY3RbJ21pbmltdW13aWR0aCddIG9yICcwJykKKyAgICBpZiBmb3JtYXRfZGljdFsncHJlY2lzaW9uJ10gaXMgbm90IE5vbmU6CisgICAgICAgIGZvcm1hdF9kaWN0WydwcmVjaXNpb24nXSA9IGludChmb3JtYXRfZGljdFsncHJlY2lzaW9uJ10pCisKKyAgICAjIGlmIGZvcm1hdCB0eXBlIGlzICdnJyBvciAnRycgdGhlbiBhIHByZWNpc2lvbiBvZiAwIG1ha2VzIGxpdHRsZQorICAgICMgc2Vuc2U7IGNvbnZlcnQgaXQgdG8gMS4gIFNhbWUgaWYgZm9ybWF0IHR5cGUgaXMgdW5zcGVjaWZpZWQuCisgICAgaWYgZm9ybWF0X2RpY3RbJ3ByZWNpc2lvbiddID09IDA6CisgICAgICAgIGlmIGZvcm1hdF9kaWN0Wyd0eXBlJ10gaXMgTm9uZSBvciBmb3JtYXRfZGljdFsndHlwZSddIGluICdnR24nOgorICAgICAgICAgICAgZm9ybWF0X2RpY3RbJ3ByZWNpc2lvbiddID0gMQorCisgICAgIyBkZXRlcm1pbmUgdGhvdXNhbmRzIHNlcGFyYXRvciwgZ3JvdXBpbmcsIGFuZCBkZWNpbWFsIHNlcGFyYXRvciwgYW5kCisgICAgIyBhZGQgYXBwcm9wcmlhdGUgZW50cmllcyB0byBmb3JtYXRfZGljdAorICAgIGlmIGZvcm1hdF9kaWN0Wyd0eXBlJ10gPT0gJ24nOgorICAgICAgICAjIGFwYXJ0IGZyb20gc2VwYXJhdG9ycywgJ24nIGJlaGF2ZXMganVzdCBsaWtlICdnJworICAgICAgICBmb3JtYXRfZGljdFsndHlwZSddID0gJ2cnCisgICAgICAgIGlmIF9sb2NhbGVjb252IGlzIE5vbmU6CisgICAgICAgICAgICBfbG9jYWxlY29udiA9IF9sb2NhbGUubG9jYWxlY29udigpCisgICAgICAgIGlmIGZvcm1hdF9kaWN0Wyd0aG91c2FuZHNfc2VwJ10gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBsaWNpdCB0aG91c2FuZHMgc2VwYXJhdG9yIGNvbmZsaWN0cyB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiduJyB0eXBlIGluIGZvcm1hdCBzcGVjaWZpZXI6ICIgKyBmb3JtYXRfc3BlYykKKyAgICAgICAgZm9ybWF0X2RpY3RbJ3Rob3VzYW5kc19zZXAnXSA9IF9sb2NhbGVjb252Wyd0aG91c2FuZHNfc2VwJ10KKyAgICAgICAgZm9ybWF0X2RpY3RbJ2dyb3VwaW5nJ10gPSBfbG9jYWxlY29udlsnZ3JvdXBpbmcnXQorICAgICAgICBmb3JtYXRfZGljdFsnZGVjaW1hbF9wb2ludCddID0gX2xvY2FsZWNvbnZbJ2RlY2ltYWxfcG9pbnQnXQorICAgIGVsc2U6CisgICAgICAgIGlmIGZvcm1hdF9kaWN0Wyd0aG91c2FuZHNfc2VwJ10gaXMgTm9uZToKKyAgICAgICAgICAgIGZvcm1hdF9kaWN0Wyd0aG91c2FuZHNfc2VwJ10gPSAnJworICAgICAgICBmb3JtYXRfZGljdFsnZ3JvdXBpbmcnXSA9IFszLCAwXQorICAgICAgICBmb3JtYXRfZGljdFsnZGVjaW1hbF9wb2ludCddID0gJy4nCisKKyAgICByZXR1cm4gZm9ybWF0X2RpY3QKKworZGVmIF9mb3JtYXRfYWxpZ24oc2lnbiwgYm9keSwgc3BlYyk6CisgICAgIiIiR2l2ZW4gYW4gdW5wYWRkZWQsIG5vbi1hbGlnbmVkIG51bWVyaWMgc3RyaW5nICdib2R5JyBhbmQgc2lnbgorICAgIHN0cmluZyAnc2lnbicsIGFkZCBwYWRkaW5nIGFuZCBhbGlnbm1lbnQgY29uZm9ybWluZyB0byB0aGUgZ2l2ZW4KKyAgICBmb3JtYXQgc3BlY2lmaWVyIGRpY3Rpb25hcnkgJ3NwZWMnIChhcyBwcm9kdWNlZCBieQorICAgIHBhcnNlX2Zvcm1hdF9zcGVjaWZpZXIpLgorCisgICAgIiIiCisgICAgIyBob3cgbXVjaCBleHRyYSBzcGFjZSBkbyB3ZSBoYXZlIHRvIHBsYXkgd2l0aD8KKyAgICBtaW5pbXVtd2lkdGggPSBzcGVjWydtaW5pbXVtd2lkdGgnXQorICAgIGZpbGwgPSBzcGVjWydmaWxsJ10KKyAgICBwYWRkaW5nID0gZmlsbCoobWluaW11bXdpZHRoIC0gbGVuKHNpZ24pIC0gbGVuKGJvZHkpKQorCisgICAgYWxpZ24gPSBzcGVjWydhbGlnbiddCisgICAgaWYgYWxpZ24gPT0gJzwnOgorICAgICAgICByZXN1bHQgPSBzaWduICsgYm9keSArIHBhZGRpbmcKKyAgICBlbGlmIGFsaWduID09ICc+JzoKKyAgICAgICAgcmVzdWx0ID0gcGFkZGluZyArIHNpZ24gKyBib2R5CisgICAgZWxpZiBhbGlnbiA9PSAnPSc6CisgICAgICAgIHJlc3VsdCA9IHNpZ24gKyBwYWRkaW5nICsgYm9keQorICAgIGVsaWYgYWxpZ24gPT0gJ14nOgorICAgICAgICBoYWxmID0gbGVuKHBhZGRpbmcpLy8yCisgICAgICAgIHJlc3VsdCA9IHBhZGRpbmdbOmhhbGZdICsgc2lnbiArIGJvZHkgKyBwYWRkaW5nW2hhbGY6XQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VucmVjb2duaXNlZCBhbGlnbm1lbnQgZmllbGQnKQorCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgX2dyb3VwX2xlbmd0aHMoZ3JvdXBpbmcpOgorICAgICIiIkNvbnZlcnQgYSBsb2NhbGVjb252LXN0eWxlIGdyb3VwaW5nIGludG8gYSAocG9zc2libHkgaW5maW5pdGUpCisgICAgaXRlcmFibGUgb2YgaW50ZWdlcnMgcmVwcmVzZW50aW5nIGdyb3VwIGxlbmd0aHMuCisKKyAgICAiIiIKKyAgICAjIFRoZSByZXN1bHQgZnJvbSBsb2NhbGVjb252KClbJ2dyb3VwaW5nJ10sIGFuZCB0aGUgaW5wdXQgdG8gdGhpcworICAgICMgZnVuY3Rpb24sIHNob3VsZCBiZSBhIGxpc3Qgb2YgaW50ZWdlcnMgaW4gb25lIG9mIHRoZQorICAgICMgZm9sbG93aW5nIHRocmVlIGZvcm1zOgorICAgICMKKyAgICAjICAgKDEpIGFuIGVtcHR5IGxpc3QsIG9yCisgICAgIyAgICgyKSBub25lbXB0eSBsaXN0IG9mIHBvc2l0aXZlIGludGVnZXJzICsgWzBdCisgICAgIyAgICgzKSBsaXN0IG9mIHBvc2l0aXZlIGludGVnZXJzICsgW2xvY2FsZS5DSEFSX01BWF0sIG9yCisKKyAgICBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIHJlcGVhdAorICAgIGlmIG5vdCBncm91cGluZzoKKyAgICAgICAgcmV0dXJuIFtdCisgICAgZWxpZiBncm91cGluZ1stMV0gPT0gMCBhbmQgbGVuKGdyb3VwaW5nKSA+PSAyOgorICAgICAgICByZXR1cm4gY2hhaW4oZ3JvdXBpbmdbOi0xXSwgcmVwZWF0KGdyb3VwaW5nWy0yXSkpCisgICAgZWxpZiBncm91cGluZ1stMV0gPT0gX2xvY2FsZS5DSEFSX01BWDoKKyAgICAgICAgcmV0dXJuIGdyb3VwaW5nWzotMV0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnJlY29nbmlzZWQgZm9ybWF0IGZvciBncm91cGluZycpCisKK2RlZiBfaW5zZXJ0X3Rob3VzYW5kc19zZXAoZGlnaXRzLCBzcGVjLCBtaW5fd2lkdGg9MSk6CisgICAgIiIiSW5zZXJ0IHRob3VzYW5kcyBzZXBhcmF0b3JzIGludG8gYSBkaWdpdCBzdHJpbmcuCisKKyAgICBzcGVjIGlzIGEgZGljdGlvbmFyeSB3aG9zZSBrZXlzIHNob3VsZCBpbmNsdWRlICd0aG91c2FuZHNfc2VwJyBhbmQKKyAgICAnZ3JvdXBpbmcnOyB0eXBpY2FsbHkgaXQncyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGZvcm1hdAorICAgIHNwZWNpZmllciB1c2luZyBfcGFyc2VfZm9ybWF0X3NwZWNpZmllci4KKworICAgIFRoZSBtaW5fd2lkdGgga2V5d29yZCBhcmd1bWVudCBnaXZlcyB0aGUgbWluaW11bSBsZW5ndGggb2YgdGhlCisgICAgcmVzdWx0LCB3aGljaCB3aWxsIGJlIHBhZGRlZCBvbiB0aGUgbGVmdCB3aXRoIHplcm9zIGlmIG5lY2Vzc2FyeS4KKworICAgIElmIG5lY2Vzc2FyeSwgdGhlIHplcm8gcGFkZGluZyBhZGRzIGFuIGV4dHJhICcwJyBvbiB0aGUgbGVmdCB0bworICAgIGF2b2lkIGEgbGVhZGluZyB0aG91c2FuZHMgc2VwYXJhdG9yLiAgRm9yIGV4YW1wbGUsIGluc2VydGluZworICAgIGNvbW1hcyBldmVyeSB0aHJlZSBkaWdpdHMgaW4gJzEyMzQ1NicsIHdpdGggbWluX3dpZHRoPTgsIGdpdmVzCisgICAgJzAsMTIzLDQ1NicsIGV2ZW4gdGhvdWdoIHRoYXQgaGFzIGxlbmd0aCA5LgorCisgICAgIiIiCisKKyAgICBzZXAgPSBzcGVjWyd0aG91c2FuZHNfc2VwJ10KKyAgICBncm91cGluZyA9IHNwZWNbJ2dyb3VwaW5nJ10KKworICAgIGdyb3VwcyA9IFtdCisgICAgZm9yIGwgaW4gX2dyb3VwX2xlbmd0aHMoZ3JvdXBpbmcpOgorICAgICAgICBpZiBsIDw9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJncm91cCBsZW5ndGggc2hvdWxkIGJlIHBvc2l0aXZlIikKKyAgICAgICAgIyBtYXgoLi4uLCAxKSBmb3JjZXMgYXQgbGVhc3QgMSBkaWdpdCB0byB0aGUgbGVmdCBvZiBhIHNlcGFyYXRvcgorICAgICAgICBsID0gbWluKG1heChsZW4oZGlnaXRzKSwgbWluX3dpZHRoLCAxKSwgbCkKKyAgICAgICAgZ3JvdXBzLmFwcGVuZCgnMCcqKGwgLSBsZW4oZGlnaXRzKSkgKyBkaWdpdHNbLWw6XSkKKyAgICAgICAgZGlnaXRzID0gZGlnaXRzWzotbF0KKyAgICAgICAgbWluX3dpZHRoIC09IGwKKyAgICAgICAgaWYgbm90IGRpZ2l0cyBhbmQgbWluX3dpZHRoIDw9IDA6CisgICAgICAgICAgICBicmVhaworICAgICAgICBtaW5fd2lkdGggLT0gbGVuKHNlcCkKKyAgICBlbHNlOgorICAgICAgICBsID0gbWF4KGxlbihkaWdpdHMpLCBtaW5fd2lkdGgsIDEpCisgICAgICAgIGdyb3Vwcy5hcHBlbmQoJzAnKihsIC0gbGVuKGRpZ2l0cykpICsgZGlnaXRzWy1sOl0pCisgICAgcmV0dXJuIHNlcC5qb2luKHJldmVyc2VkKGdyb3VwcykpCisKK2RlZiBfZm9ybWF0X3NpZ24oaXNfbmVnYXRpdmUsIHNwZWMpOgorICAgICIiIkRldGVybWluZSBzaWduIGNoYXJhY3Rlci4iIiIKKworICAgIGlmIGlzX25lZ2F0aXZlOgorICAgICAgICByZXR1cm4gJy0nCisgICAgZWxpZiBzcGVjWydzaWduJ10gaW4gJyArJzoKKyAgICAgICAgcmV0dXJuIHNwZWNbJ3NpZ24nXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJworCitkZWYgX2Zvcm1hdF9udW1iZXIoaXNfbmVnYXRpdmUsIGludHBhcnQsIGZyYWNwYXJ0LCBleHAsIHNwZWMpOgorICAgICIiIkZvcm1hdCBhIG51bWJlciwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBkYXRhOgorCisgICAgaXNfbmVnYXRpdmU6IHRydWUgaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgZWxzZSBmYWxzZQorICAgIGludHBhcnQ6IHN0cmluZyBvZiBkaWdpdHMgdGhhdCBtdXN0IGFwcGVhciBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBmcmFjcGFydDogc3RyaW5nIG9mIGRpZ2l0cyB0aGF0IG11c3QgY29tZSBhZnRlciB0aGUgcG9pbnQKKyAgICBleHA6IGV4cG9uZW50LCBhcyBhbiBpbnRlZ2VyCisgICAgc3BlYzogZGljdGlvbmFyeSByZXN1bHRpbmcgZnJvbSBwYXJzaW5nIHRoZSBmb3JtYXQgc3BlY2lmaWVyCisKKyAgICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGluZm9ybWF0aW9uIGluIHNwZWMgdG86CisgICAgICBpbnNlcnQgc2VwYXJhdG9ycyAoZGVjaW1hbCBzZXBhcmF0b3IgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3JzKQorICAgICAgZm9ybWF0IHRoZSBzaWduCisgICAgICBmb3JtYXQgdGhlIGV4cG9uZW50CisgICAgICBhZGQgdHJhaWxpbmcgJyUnIGZvciB0aGUgJyUnIHR5cGUKKyAgICAgIHplcm8tcGFkIGlmIG5lY2Vzc2FyeQorICAgICAgZmlsbCBhbmQgYWxpZ24gaWYgbmVjZXNzYXJ5CisgICAgIiIiCisKKyAgICBzaWduID0gX2Zvcm1hdF9zaWduKGlzX25lZ2F0aXZlLCBzcGVjKQorCisgICAgaWYgZnJhY3BhcnQgb3Igc3BlY1snYWx0J106CisgICAgICAgIGZyYWNwYXJ0ID0gc3BlY1snZGVjaW1hbF9wb2ludCddICsgZnJhY3BhcnQKKworICAgIGlmIGV4cCAhPSAwIG9yIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgorICAgICAgICBlY2hhciA9IHsnRSc6ICdFJywgJ2UnOiAnZScsICdHJzogJ0UnLCAnZyc6ICdlJ31bc3BlY1sndHlwZSddXQorICAgICAgICBmcmFjcGFydCArPSAiezB9ezE6K30iLmZvcm1hdChlY2hhciwgZXhwKQorICAgIGlmIHNwZWNbJ3R5cGUnXSA9PSAnJSc6CisgICAgICAgIGZyYWNwYXJ0ICs9ICclJworCisgICAgaWYgc3BlY1snemVyb3BhZCddOgorICAgICAgICBtaW5fd2lkdGggPSBzcGVjWydtaW5pbXVtd2lkdGgnXSAtIGxlbihmcmFjcGFydCkgLSBsZW4oc2lnbikKKyAgICBlbHNlOgorICAgICAgICBtaW5fd2lkdGggPSAwCisgICAgaW50cGFydCA9IF9pbnNlcnRfdGhvdXNhbmRzX3NlcChpbnRwYXJ0LCBzcGVjLCBtaW5fd2lkdGgpCisKKyAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzaWduLCBpbnRwYXJ0K2ZyYWNwYXJ0LCBzcGVjKQorCisKKyMjIyMjIFVzZWZ1bCBDb25zdGFudHMgKGludGVybmFsIHVzZSBvbmx5KSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFJldXNhYmxlIGRlZmF1bHRzCitfSW5maW5pdHkgPSBEZWNpbWFsKCdJbmYnKQorX05lZ2F0aXZlSW5maW5pdHkgPSBEZWNpbWFsKCctSW5mJykKK19OYU4gPSBEZWNpbWFsKCdOYU4nKQorX1plcm8gPSBEZWNpbWFsKDApCitfT25lID0gRGVjaW1hbCgxKQorX05lZ2F0aXZlT25lID0gRGVjaW1hbCgtMSkKKworIyBfU2lnbmVkSW5maW5pdHlbc2lnbl0gaXMgaW5maW5pdHkgdy8gdGhhdCBzaWduCitfU2lnbmVkSW5maW5pdHkgPSAoX0luZmluaXR5LCBfTmVnYXRpdmVJbmZpbml0eSkKKworIyBDb25zdGFudHMgcmVsYXRlZCB0byB0aGUgaGFzaCBpbXBsZW1lbnRhdGlvbjsgIGhhc2goeCkgaXMgYmFzZWQKKyMgb24gdGhlIHJlZHVjdGlvbiBvZiB4IG1vZHVsbyBfUHlIQVNIX01PRFVMVVMKK19QeUhBU0hfTU9EVUxVUyA9IHN5cy5oYXNoX2luZm8ubW9kdWx1cworIyBoYXNoIHZhbHVlcyB0byB1c2UgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBpbmZpbml0aWVzLCBhbmQgbmFucworX1B5SEFTSF9JTkYgPSBzeXMuaGFzaF9pbmZvLmluZgorX1B5SEFTSF9OQU4gPSBzeXMuaGFzaF9pbmZvLm5hbgorCisjIF9QeUhBU0hfMTBJTlYgaXMgdGhlIGludmVyc2Ugb2YgMTAgbW9kdWxvIHRoZSBwcmltZSBfUHlIQVNIX01PRFVMVVMKK19QeUhBU0hfMTBJTlYgPSBwb3coMTAsIF9QeUhBU0hfTU9EVUxVUyAtIDIsIF9QeUhBU0hfTU9EVUxVUykKK2RlbCBzeXMKZGlmZiAtLWdpdCBhL0xpYi9fcHlpby5weSBiL0xpYi9fcHlpby5weQppbmRleCBmMWUzYTc5Li4wZDk4Yjc0IDEwMDY0NAotLS0gYS9MaWIvX3B5aW8ucHkKKysrIGIvTGliL19weWlvLnB5CkBAIC02LDExICs2LDE4IEBACiBpbXBvcnQgYWJjCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgZXJybm8KK2ltcG9ydCBhcnJheQoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKICMgSW1wb3J0IF90aHJlYWQgaW5zdGVhZCBvZiB0aHJlYWRpbmcgdG8gcmVkdWNlIHN0YXJ0dXAgY29zdAogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBMb2NrCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZnJvbSBfZHVtbXlfdGhyZWFkIGltcG9ydCBhbGxvY2F0ZV9sb2NrIGFzIExvY2sKK2lmIHN5cy5wbGF0Zm9ybSBpbiB7J3dpbjMyJywgJ2N5Z3dpbid9OgorICAgIGZyb20gbXN2Y3J0IGltcG9ydCBzZXRtb2RlIGFzIF9zZXRtb2RlCitlbHNlOgorICAgIF9zZXRtb2RlID0gTm9uZQogCiBpbXBvcnQgaW8KIGZyb20gaW8gaW1wb3J0IChfX2FsbF9fLCBTRUVLX1NFVCwgU0VFS19DVVIsIFNFRUtfRU5EKQpAQCAtMjU2LDcgKzI2Myw3IEBACiAgICAgVHJpY2sgc28gdGhhdCBvcGVuIHdvbid0IGJlY29tZSBhIGJvdW5kIG1ldGhvZCB3aGVuIHN0b3JlZAogICAgIGFzIGEgY2xhc3MgdmFyaWFibGUgKGFzIGRibS5kdW1iIGRvZXMpLgogCi0gICAgU2VlIGluaXRzdGRpbygpIGluIFB5dGhvbi9weXRob25ydW4uYy4KKyAgICBTZWUgaW5pdHN0ZGlvKCkgaW4gUHl0aG9uL3B5bGlmZWN5Y2xlLmMuCiAgICAgIiIiCiAgICAgX19kb2NfXyA9IERvY0Rlc2NyaXB0b3IoKQogCkBAIC0yODksOCArMjk2LDkgQEAKICAgICBjYWxsZWQuCiAKICAgICBUaGUgYmFzaWMgdHlwZSB1c2VkIGZvciBiaW5hcnkgZGF0YSByZWFkIGZyb20gb3Igd3JpdHRlbiB0byBhIGZpbGUgaXMKLSAgICBieXRlcy4gYnl0ZWFycmF5cyBhcmUgYWNjZXB0ZWQgdG9vLCBhbmQgaW4gc29tZSBjYXNlcyAoc3VjaCBhcwotICAgIHJlYWRpbnRvKSBuZWVkZWQuIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLgorICAgIGJ5dGVzLiBPdGhlciBieXRlcy1saWtlIG9iamVjdHMgYXJlIGFjY2VwdGVkIGFzIG1ldGhvZCBhcmd1bWVudHMgdG9vLiBJbgorICAgIHNvbWUgY2FzZXMgKHN1Y2ggYXMgcmVhZGludG8pLCBhIHdyaXRhYmxlIG9iamVjdCBpcyByZXF1aXJlZC4gVGV4dCBJL08KKyAgICBjbGFzc2VzIHdvcmsgd2l0aCBzdHIgZGF0YS4KIAogICAgIE5vdGUgdGhhdCBjYWxsaW5nIGFueSBtZXRob2QgKGV2ZW4gaW5xdWlyaWVzKSBvbiBhIGNsb3NlZCBzdHJlYW0gaXMKICAgICB1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgT1NFcnJvciBpbiB0aGlzIGNhc2UuCkBAIC0zODMsNyArMzkxLDcgQEAKICAgICBkZWYgc2Vla2FibGUoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGJvb2wgaW5kaWNhdGluZyB3aGV0aGVyIG9iamVjdCBzdXBwb3J0cyByYW5kb20gYWNjZXNzLgogCi0gICAgICAgIElmIEZhbHNlLCBzZWVrKCksIHRlbGwoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uLgorICAgICAgICBJZiBGYWxzZSwgc2VlaygpLCB0ZWxsKCkgYW5kIHRydW5jYXRlKCkgd2lsbCByYWlzZSBPU0Vycm9yLgogICAgICAgICBUaGlzIG1ldGhvZCBtYXkgbmVlZCB0byBkbyBhIHRlc3Qgc2VlaygpLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC0zOTgsNyArNDA2LDcgQEAKICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGJvb2wgaW5kaWNhdGluZyB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciByZWFkaW5nLgogCi0gICAgICAgIElmIEZhbHNlLCByZWFkKCkgd2lsbCByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbi4KKyAgICAgICAgSWYgRmFsc2UsIHJlYWQoKSB3aWxsIHJhaXNlIE9TRXJyb3IuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRmFsc2UKIApAQCAtNDEyLDcgKzQyMCw3IEBACiAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBib29sIGluZGljYXRpbmcgd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy4KIAotICAgICAgICBJZiBGYWxzZSwgd3JpdGUoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uLgorICAgICAgICBJZiBGYWxzZSwgd3JpdGUoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIE9TRXJyb3IuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRmFsc2UKIApAQCAtNDMyLDcgKzQ0MCw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9fY2xvc2VkCiAKICAgICBkZWYgX2NoZWNrQ2xvc2VkKHNlbGYsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIFZhbHVlRXJyb3IgaWYgZmlsZSBpcyBjbG9zZWQKKyAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGEgVmFsdWVFcnJvciBpZiBmaWxlIGlzIGNsb3NlZAogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlLiIKQEAgLTU4OSw3ICs1OTcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGRhdGEKIAogICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKLSAgICAgICAgIiIiUmVhZCB1cCB0byBsZW4oYikgYnl0ZXMgaW50byBieXRlYXJyYXkgYi4KKyAgICAgICAgIiIiUmVhZCBieXRlcyBpbnRvIGEgcHJlLWFsbG9jYXRlZCBieXRlcy1saWtlIG9iamVjdCBiLgogCiAgICAgICAgIFJldHVybnMgYW4gaW50IHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKDAgZm9yIEVPRiksIG9yCiAgICAgICAgIE5vbmUgaWYgdGhlIG9iamVjdCBpcyBzZXQgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgpAQCAtNTk5LDcgKzYwNyw4IEBACiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICAiIiJXcml0ZSB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSBJTyBzdHJlYW0uCiAKLSAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIHdoaWNoIG1heSBiZSBsZXNzIHRoYW4gbGVuKGIpLgorICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbiB0aGUKKyAgICAgICAgbGVuZ3RoIG9mIGIgaW4gYnl0ZXMuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgid3JpdGUiKQogCkBAIC02NTIsNyArNjYxLDcgQEAKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQxIikKIAogICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKLSAgICAgICAgIiIiUmVhZCB1cCB0byBsZW4oYikgYnl0ZXMgaW50byBieXRlYXJyYXkgYi4KKyAgICAgICAgIiIiUmVhZCBieXRlcyBpbnRvIGEgcHJlLWFsbG9jYXRlZCBieXRlcy1saWtlIG9iamVjdCBiLgogCiAgICAgICAgIExpa2UgcmVhZCgpLCB0aGlzIG1heSBpc3N1ZSBtdWx0aXBsZSByZWFkcyB0byB0aGUgdW5kZXJseWluZyByYXcKICAgICAgICAgc3RyZWFtLCB1bmxlc3MgdGhlIGxhdHRlciBpcyAnaW50ZXJhY3RpdmUnLgpAQCAtNjYyLDIzICs2NzEsNDAgQEAKICAgICAgICAgUmFpc2VzIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGhhcyBubwogICAgICAgICBkYXRhIGF0IHRoZSBtb21lbnQuCiAgICAgICAgICIiIgotICAgICAgICAjIFhYWCBUaGlzIG91Z2h0IHRvIHdvcmsgd2l0aCBhbnl0aGluZyB0aGF0IHN1cHBvcnRzIHRoZSBidWZmZXIgQVBJCi0gICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobGVuKGIpKQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkaW50byhiLCByZWFkMT1GYWxzZSkKKworICAgIGRlZiByZWFkaW50bzEoc2VsZiwgYik6CisgICAgICAgICIiIlJlYWQgYnl0ZXMgaW50byBidWZmZXIgKmIqLCB1c2luZyBhdCBtb3N0IG9uZSBzeXN0ZW0gY2FsbAorCisgICAgICAgIFJldHVybnMgYW4gaW50IHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKDAgZm9yIEVPRikuCisKKyAgICAgICAgUmFpc2VzIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGhhcyBubworICAgICAgICBkYXRhIGF0IHRoZSBtb21lbnQuCisgICAgICAgICIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkaW50byhiLCByZWFkMT1UcnVlKQorCisgICAgZGVmIF9yZWFkaW50byhzZWxmLCBiLCByZWFkMSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGIsIG1lbW9yeXZpZXcpOgorICAgICAgICAgICAgYiA9IG1lbW9yeXZpZXcoYikKKyAgICAgICAgYiA9IGIuY2FzdCgnQicpCisKKyAgICAgICAgaWYgcmVhZDE6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkMShsZW4oYikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbihiKSkKICAgICAgICAgbiA9IGxlbihkYXRhKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBiWzpuXSA9IGRhdGEKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGIsIGFycmF5LmFycmF5KToKLSAgICAgICAgICAgICAgICByYWlzZSBlcnIKLSAgICAgICAgICAgIGJbOm5dID0gYXJyYXkuYXJyYXkoJ2InLCBkYXRhKQorCisgICAgICAgIGJbOm5dID0gZGF0YQorCiAgICAgICAgIHJldHVybiBuCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgICIiIldyaXRlIHRoZSBnaXZlbiBieXRlcyBidWZmZXIgdG8gdGhlIElPIHN0cmVhbS4KIAotICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCB3aGljaCBpcyBuZXZlciBsZXNzIHRoYW4KLSAgICAgICAgbGVuKGIpLgorICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCB3aGljaCBpcyBhbHdheXMgdGhlIGxlbmd0aCBvZiBiCisgICAgICAgIGluIGJ5dGVzLgogCiAgICAgICAgIFJhaXNlcyBCbG9ja2luZ0lPRXJyb3IgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsIGFuZCB0aGUKICAgICAgICAgdW5kZXJseWluZyByYXcgc3RyZWFtIGNhbm5vdCBhY2NlcHQgbW9yZSBkYXRhIGF0IHRoZSBtb21lbnQuCkBAIC03NjMsMTIgKzc4OSw2IEBACiAgICAgZGVmIHNlZWthYmxlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yYXcuc2Vla2FibGUoKQogCi0gICAgZGVmIHJlYWRhYmxlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcucmVhZGFibGUoKQotCi0gICAgZGVmIHdyaXRhYmxlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXcud3JpdGFibGUoKQotCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIHJhdyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3JhdwpAQCAtNzkwLDEzICs4MTAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18pKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBjbHNuYW1lID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgbW9kbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18KKyAgICAgICAgY2xzbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lID0gc2VsZi5uYW1lCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICByZXR1cm4gIjxfcHlpby57MH0+Ii5mb3JtYXQoY2xzbmFtZSkKKyAgICAgICAgICAgIHJldHVybiAiPHt9Lnt9PiIuZm9ybWF0KG1vZG5hbWUsIGNsc25hbWUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIjxfcHlpby57MH0gbmFtZT17MSFyfT4iLmZvcm1hdChjbHNuYW1lLCBuYW1lKQorICAgICAgICAgICAgcmV0dXJuICI8e30ue30gbmFtZT17IXJ9PiIuZm9ybWF0KG1vZG5hbWUsIGNsc25hbWUsIG5hbWUpCiAKICAgICAjIyMgTG93ZXItbGV2ZWwgQVBJcyAjIyMKIApAQCAtODY1LDcgKzg4Niw4IEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cml0ZSB0byBjbG9zZWQgZmlsZSIpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgc3RyKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FuJ3Qgd3JpdGUgc3RyIHRvIGJpbmFyeSBzdHJlYW0iKQotICAgICAgICBuID0gbGVuKGIpCisgICAgICAgIHdpdGggbWVtb3J5dmlldyhiKSBhcyB2aWV3OgorICAgICAgICAgICAgbiA9IHZpZXcubmJ5dGVzICAjIFNpemUgb2YgYW55IGJ5dGVzLWxpa2Ugb2JqZWN0CiAgICAgICAgIGlmIG4gPT0gMDoKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHBvcyA9IHNlbGYuX3BvcwpAQCAtOTU3LDYgKzk3OSw5IEBACiAgICAgICAgIHNlbGYuX3Jlc2V0X3JlYWRfYnVmKCkKICAgICAgICAgc2VsZi5fcmVhZF9sb2NrID0gTG9jaygpCiAKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhdy5yZWFkYWJsZSgpCisKICAgICBkZWYgX3Jlc2V0X3JlYWRfYnVmKHNlbGYpOgogICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IGIiIgogICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKQEAgLTk5MywxMCArMTAxOCw3IEBACiAgICAgICAgICAgICBjdXJyZW50X3NpemUgPSAwCiAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICMgUmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkIGJsb2NrLgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnJhdy5yZWFkKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYucmF3LnJlYWQoKQogICAgICAgICAgICAgICAgIGlmIGNodW5rIGluIGVtcHR5X3ZhbHVlczoKICAgICAgICAgICAgICAgICAgICAgbm9kYXRhX3ZhbCA9IGNodW5rCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xMDE1LDE2ICsxMDM3LDEzIEBACiAgICAgICAgIGNodW5rcyA9IFtidWZbcG9zOl1dCiAgICAgICAgIHdhbnRlZCA9IG1heChzZWxmLmJ1ZmZlcl9zaXplLCBuKQogICAgICAgICB3aGlsZSBhdmFpbCA8IG46Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnJhdy5yZWFkKHdhbnRlZCkKLSAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjaHVuayA9IHNlbGYucmF3LnJlYWQod2FudGVkKQogICAgICAgICAgICAgaWYgY2h1bmsgaW4gZW1wdHlfdmFsdWVzOgogICAgICAgICAgICAgICAgIG5vZGF0YV92YWwgPSBjaHVuawogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBhdmFpbCArPSBsZW4oY2h1bmspCiAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGNodW5rKQotICAgICAgICAjIG4gaXMgbW9yZSB0aGVuIGF2YWlsIG9ubHkgd2hlbiBhbiBFT0Ygb2NjdXJyZWQgb3Igd2hlbgorICAgICAgICAjIG4gaXMgbW9yZSB0aGFuIGF2YWlsIG9ubHkgd2hlbiBhbiBFT0Ygb2NjdXJyZWQgb3Igd2hlbgogICAgICAgICAjIHJlYWQoKSB3b3VsZCBoYXZlIGJsb2NrZWQuCiAgICAgICAgIG4gPSBtaW4obiwgYXZhaWwpCiAgICAgICAgIG91dCA9IGIiIi5qb2luKGNodW5rcykKQEAgLTEwNDcsMTIgKzEwNjYsNyBAQAogICAgICAgICBoYXZlID0gbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zCiAgICAgICAgIGlmIGhhdmUgPCB3YW50IG9yIGhhdmUgPD0gMDoKICAgICAgICAgICAgIHRvX3JlYWQgPSBzZWxmLmJ1ZmZlcl9zaXplIC0gaGF2ZQotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBzZWxmLnJhdy5yZWFkKHRvX3JlYWQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBzZWxmLnJhdy5yZWFkKHRvX3JlYWQpCiAgICAgICAgICAgICBpZiBjdXJyZW50OgogICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYnVmID0gc2VsZi5fcmVhZF9idWZbc2VsZi5fcmVhZF9wb3M6XSArIGN1cnJlbnQKICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKQEAgLTEwNzEsNiArMTA4NSw1NyBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQoCiAgICAgICAgICAgICAgICAgbWluKHNpemUsIGxlbihzZWxmLl9yZWFkX2J1ZikgLSBzZWxmLl9yZWFkX3BvcykpCiAKKyAgICAjIEltcGxlbWVudGluZyByZWFkaW50bygpIGFuZCByZWFkaW50bzEoKSBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5ICh3ZQorICAgICMgY291bGQgcmVseSBvbiB0aGUgYmFzZSBjbGFzcyB0aGF0IHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIGluIHRlcm1zIG9mCisgICAgIyByZWFkKCkgYW5kIHJlYWQxKCkpLiBXZSBkbyBpdCBhbnl3YXkgdG8ga2VlcCB0aGUgX3B5aW8gaW1wbGVtZW50YXRpb24KKyAgICAjIHNpbWlsYXIgdG8gdGhlIGlvIGltcGxlbWVudGF0aW9uICh3aGljaCBpbXBsZW1lbnRzIHRoZSBtZXRob2RzIGZvcgorICAgICMgcGVyZm9ybWFuY2UgcmVhc29ucykuCisgICAgZGVmIF9yZWFkaW50byhzZWxmLCBidWYsIHJlYWQxKToKKyAgICAgICAgIiIiUmVhZCBkYXRhIGludG8gKmJ1Ziogd2l0aCBhdCBtb3N0IG9uZSBzeXN0ZW0gY2FsbC4iIiIKKworICAgICAgICAjIE5lZWQgdG8gY3JlYXRlIGEgbWVtb3J5dmlldyBvYmplY3Qgb2YgdHlwZSAnYicsIG90aGVyd2lzZQorICAgICAgICAjIHdlIG1heSBub3QgYmUgYWJsZSB0byBhc3NpZ24gYnl0ZXMgdG8gaXQsIGFuZCBzbGljaW5nIGl0CisgICAgICAgICMgd291bGQgY3JlYXRlIGEgbmV3IG9iamVjdC4KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYnVmLCBtZW1vcnl2aWV3KToKKyAgICAgICAgICAgIGJ1ZiA9IG1lbW9yeXZpZXcoYnVmKQorICAgICAgICBpZiBidWYubmJ5dGVzID09IDA6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBidWYgPSBidWYuY2FzdCgnQicpCisKKyAgICAgICAgd3JpdHRlbiA9IDAKKyAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CisgICAgICAgICAgICB3aGlsZSB3cml0dGVuIDwgbGVuKGJ1Zik6CisKKyAgICAgICAgICAgICAgICAjIEZpcnN0IHRyeSB0byByZWFkIGZyb20gaW50ZXJuYWwgYnVmZmVyCisgICAgICAgICAgICAgICAgYXZhaWwgPSBtaW4obGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zLCBsZW4oYnVmKSkKKyAgICAgICAgICAgICAgICBpZiBhdmFpbDoKKyAgICAgICAgICAgICAgICAgICAgYnVmW3dyaXR0ZW46d3JpdHRlbithdmFpbF0gPSBcCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2J1ZltzZWxmLl9yZWFkX3BvczpzZWxmLl9yZWFkX3BvcythdmFpbF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9wb3MgKz0gYXZhaWwKKyAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiArPSBhdmFpbAorICAgICAgICAgICAgICAgICAgICBpZiB3cml0dGVuID09IGxlbihidWYpOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMgSWYgcmVtYWluaW5nIHNwYWNlIGluIGNhbGxlcnMgYnVmZmVyIGlzIGxhcmdlciB0aGFuCisgICAgICAgICAgICAgICAgIyBpbnRlcm5hbCBidWZmZXIsIHJlYWQgZGlyZWN0bHkgaW50byBjYWxsZXJzIGJ1ZmZlcgorICAgICAgICAgICAgICAgIGlmIGxlbihidWYpIC0gd3JpdHRlbiA+IHNlbGYuYnVmZmVyX3NpemU6CisgICAgICAgICAgICAgICAgICAgIG4gPSBzZWxmLnJhdy5yZWFkaW50byhidWZbd3JpdHRlbjpdKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICMgZW9mCisgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW4gKz0gbgorCisgICAgICAgICAgICAgICAgIyBPdGhlcndpc2UgcmVmaWxsIGludGVybmFsIGJ1ZmZlciAtIHVubGVzcyB3ZSdyZQorICAgICAgICAgICAgICAgICMgaW4gcmVhZDEgbW9kZSBhbmQgYWxyZWFkeSBnb3Qgc29tZSBkYXRhCisgICAgICAgICAgICAgICAgZWxpZiBub3QgKHJlYWQxIGFuZCB3cml0dGVuKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3BlZWtfdW5sb2NrZWQoMSk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayAjIGVvZgorCisgICAgICAgICAgICAgICAgIyBJbiByZWFkaW50bzEgbW9kZSwgcmV0dXJuIGFzIHNvb24gYXMgd2UgaGF2ZSBzb21lIGRhdGEKKyAgICAgICAgICAgICAgICBpZiByZWFkMSBhbmQgd3JpdHRlbjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gd3JpdHRlbgorCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBfQnVmZmVyZWRJT01peGluLnRlbGwoc2VsZikgLSBsZW4oc2VsZi5fcmVhZF9idWYpICsgc2VsZi5fcmVhZF9wb3MKIApAQCAtMTEwNCw2ICsxMTY5LDkgQEAKICAgICAgICAgc2VsZi5fd3JpdGVfYnVmID0gYnl0ZWFycmF5KCkKICAgICAgICAgc2VsZi5fd3JpdGVfbG9jayA9IExvY2soKQogCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXcud3JpdGFibGUoKQorCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlIHRvIGNsb3NlZCBmaWxlIikKQEAgLTExNDksOCArMTIxNyw2IEBACiAgICAgICAgIHdoaWxlIHNlbGYuX3dyaXRlX2J1ZjoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBuID0gc2VsZi5yYXcud3JpdGUoc2VsZi5fd3JpdGVfYnVmKQotICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJzZWxmLnJhdyBzaG91bGQgaW1wbGVtZW50IFJhd0lPQmFzZTogaXQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIG5vdCByYWlzZSBCbG9ja2luZ0lPRXJyb3IiKQpAQCAtMTIyMCw2ICsxMjg2LDkgQEAKICAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkMShzaXplKQogCisgICAgZGVmIHJlYWRpbnRvMShzZWxmLCBiKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRpbnRvMShiKQorCiAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZGFibGUoKQogCkBAIC0xMzA0LDYgKzEzNzMsMTAgQEAKICAgICAgICAgc2VsZi5mbHVzaCgpCiAgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkMShzZWxmLCBzaXplKQogCisgICAgZGVmIHJlYWRpbnRvMShzZWxmLCBiKToKKyAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkaW50bzEoc2VsZiwgYikKKwogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICAgICAgaWYgc2VsZi5fcmVhZF9idWY6CiAgICAgICAgICAgICAjIFVuZG8gcmVhZGFoZWFkCkBAIC0xMzEzLDYgKzEzODYsMzQ1IEBACiAgICAgICAgIHJldHVybiBCdWZmZXJlZFdyaXRlci53cml0ZShzZWxmLCBiKQogCiAKK2NsYXNzIEZpbGVJTyhSYXdJT0Jhc2UpOgorICAgIF9mZCA9IC0xCisgICAgX2NyZWF0ZWQgPSBGYWxzZQorICAgIF9yZWFkYWJsZSA9IEZhbHNlCisgICAgX3dyaXRhYmxlID0gRmFsc2UKKyAgICBfYXBwZW5kaW5nID0gRmFsc2UKKyAgICBfc2Vla2FibGUgPSBOb25lCisgICAgX2Nsb3NlZmQgPSBUcnVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT0ncicsIGNsb3NlZmQ9VHJ1ZSwgb3BlbmVyPU5vbmUpOgorICAgICAgICAiIiJPcGVuIGEgZmlsZS4gIFRoZSBtb2RlIGNhbiBiZSAncicgKGRlZmF1bHQpLCAndycsICd4JyBvciAnYScgZm9yIHJlYWRpbmcsCisgICAgICAgIHdyaXRpbmcsIGV4Y2x1c2l2ZSBjcmVhdGlvbiBvciBhcHBlbmRpbmcuICBUaGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQKKyAgICAgICAgZG9lc24ndCBleGlzdCB3aGVuIG9wZW5lZCBmb3Igd3JpdGluZyBvciBhcHBlbmRpbmc7IGl0IHdpbGwgYmUgdHJ1bmNhdGVkCisgICAgICAgIHdoZW4gb3BlbmVkIGZvciB3cml0aW5nLiAgQSBGaWxlRXhpc3RzRXJyb3Igd2lsbCBiZSByYWlzZWQgaWYgaXQgYWxyZWFkeQorICAgICAgICBleGlzdHMgd2hlbiBvcGVuZWQgZm9yIGNyZWF0aW5nLiBPcGVuaW5nIGEgZmlsZSBmb3IgY3JlYXRpbmcgaW1wbGllcworICAgICAgICB3cml0aW5nIHNvIHRoaXMgbW9kZSBiZWhhdmVzIGluIGEgc2ltaWxhciB3YXkgdG8gJ3cnLiBBZGQgYSAnKycgdG8gdGhlIG1vZGUKKyAgICAgICAgdG8gYWxsb3cgc2ltdWx0YW5lb3VzIHJlYWRpbmcgYW5kIHdyaXRpbmcuIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieQorICAgICAgICBwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUKKyAgICAgICAgb2JqZWN0IGlzIHRoZW4gb2J0YWluZWQgYnkgY2FsbGluZyBvcGVuZXIgd2l0aCAoKm5hbWUqLCAqZmxhZ3MqKS4KKyAgICAgICAgKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgKHBhc3Npbmcgb3Mub3BlbiBhcyAqb3BlbmVyKgorICAgICAgICByZXN1bHRzIGluIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBwYXNzaW5nIE5vbmUpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fZmQgPj0gMDoKKyAgICAgICAgICAgICMgSGF2ZSB0byBjbG9zZSB0aGUgZXhpc3RpbmcgZmlsZSBmaXJzdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZWZkOgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShzZWxmLl9mZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5fZmQgPSAtMQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgZmxvYXQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQnKQorICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIGludCk6CisgICAgICAgICAgICBmZCA9IGZpbGUKKyAgICAgICAgICAgIGlmIGZkIDwgMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduZWdhdGl2ZSBmaWxlIGRlc2NyaXB0b3InKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmQgPSAtMQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1vZGUsIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ludmFsaWQgbW9kZTogJXMnICUgKG1vZGUsKSkKKyAgICAgICAgaWYgbm90IHNldChtb2RlKSA8PSBzZXQoJ3hyd2FiKycpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBtb2RlOiAlcycgJSAobW9kZSwpKQorICAgICAgICBpZiBzdW0oYyBpbiAncndheCcgZm9yIGMgaW4gbW9kZSkgIT0gMSBvciBtb2RlLmNvdW50KCcrJykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIGNyZWF0ZS9yZWFkL3dyaXRlL2FwcGVuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2RlIGFuZCBhdCBtb3N0IG9uZSBwbHVzJykKKworICAgICAgICBpZiAneCcgaW4gbW9kZToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl93cml0YWJsZSA9IFRydWUKKyAgICAgICAgICAgIGZsYWdzID0gb3MuT19FWENMIHwgb3MuT19DUkVBVAorICAgICAgICBlbGlmICdyJyBpbiBtb2RlOgorICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBUcnVlCisgICAgICAgICAgICBmbGFncyA9IDAKKyAgICAgICAgZWxpZiAndycgaW4gbW9kZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRhYmxlID0gVHJ1ZQorICAgICAgICAgICAgZmxhZ3MgPSBvcy5PX0NSRUFUIHwgb3MuT19UUlVOQworICAgICAgICBlbGlmICdhJyBpbiBtb2RlOgorICAgICAgICAgICAgc2VsZi5fd3JpdGFibGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9hcHBlbmRpbmcgPSBUcnVlCisgICAgICAgICAgICBmbGFncyA9IG9zLk9fQVBQRU5EIHwgb3MuT19DUkVBVAorCisgICAgICAgIGlmICcrJyBpbiBtb2RlOgorICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl93cml0YWJsZSA9IFRydWUKKworICAgICAgICBpZiBzZWxmLl9yZWFkYWJsZSBhbmQgc2VsZi5fd3JpdGFibGU6CisgICAgICAgICAgICBmbGFncyB8PSBvcy5PX1JEV1IKKyAgICAgICAgZWxpZiBzZWxmLl9yZWFkYWJsZToKKyAgICAgICAgICAgIGZsYWdzIHw9IG9zLk9fUkRPTkxZCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmbGFncyB8PSBvcy5PX1dST05MWQorCisgICAgICAgIGZsYWdzIHw9IGdldGF0dHIob3MsICdPX0JJTkFSWScsIDApCisKKyAgICAgICAgbm9pbmhlcml0X2ZsYWcgPSAoZ2V0YXR0cihvcywgJ09fTk9JTkhFUklUJywgMCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihvcywgJ09fQ0xPRVhFQycsIDApKQorICAgICAgICBmbGFncyB8PSBub2luaGVyaXRfZmxhZworCisgICAgICAgIG93bmVkX2ZkID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBmZCA8IDA6CisgICAgICAgICAgICAgICAgaWYgbm90IGNsb3NlZmQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCB1c2UgY2xvc2VmZD1GYWxzZSB3aXRoIGZpbGUgbmFtZScpCisgICAgICAgICAgICAgICAgaWYgb3BlbmVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZkID0gb3Mub3BlbihmaWxlLCBmbGFncywgMG82NjYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmQgPSBvcGVuZXIoZmlsZSwgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZkLCBpbnQpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBpbnRlZ2VyIGZyb20gb3BlbmVyJykKKyAgICAgICAgICAgICAgICAgICAgaWYgZmQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTmVnYXRpdmUgZmlsZSBkZXNjcmlwdG9yJykKKyAgICAgICAgICAgICAgICBvd25lZF9mZCA9IGZkCisgICAgICAgICAgICAgICAgaWYgbm90IG5vaW5oZXJpdF9mbGFnOgorICAgICAgICAgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIEZhbHNlKQorCisgICAgICAgICAgICBzZWxmLl9jbG9zZWZkID0gY2xvc2VmZAorICAgICAgICAgICAgZmRmc3RhdCA9IG9zLmZzdGF0KGZkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHN0YXQuU19JU0RJUihmZGZzdGF0LnN0X21vZGUpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJc0FEaXJlY3RvcnlFcnJvcihlcnJuby5FSVNESVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0cmVycm9yKGVycm5vLkVJU0RJUiksIGZpbGUpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBJZ25vcmUgdGhlIEF0dHJpYnVlRXJyb3IgaWYgc3RhdC5TX0lTRElSIG9yIGVycm5vLkVJU0RJUgorICAgICAgICAgICAgICAgICMgZG9uJ3QgZXhpc3QuCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5fYmxrc2l6ZSA9IGdldGF0dHIoZmRmc3RhdCwgJ3N0X2Jsa3NpemUnLCAwKQorICAgICAgICAgICAgaWYgc2VsZi5fYmxrc2l6ZSA8PSAxOgorICAgICAgICAgICAgICAgIHNlbGYuX2Jsa3NpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFCisKKyAgICAgICAgICAgIGlmIF9zZXRtb2RlOgorICAgICAgICAgICAgICAgICMgZG9uJ3QgdHJhbnNsYXRlIG5ld2xpbmVzIChcclxuIDw9PiBcbikKKyAgICAgICAgICAgICAgICBfc2V0bW9kZShmZCwgb3MuT19CSU5BUlkpCisKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IGZpbGUKKyAgICAgICAgICAgIGlmIHNlbGYuX2FwcGVuZGluZzoKKyAgICAgICAgICAgICAgICAjIEZvciBjb25zaXN0ZW50IGJlaGF2aW91ciwgd2UgZXhwbGljaXRseSBzZWVrIHRvIHRoZQorICAgICAgICAgICAgICAgICMgZW5kIG9mIGZpbGUgKG90aGVyd2lzZSwgaXQgbWlnaHQgYmUgZG9uZSBvbmx5IG9uIHRoZQorICAgICAgICAgICAgICAgICMgZmlyc3Qgd3JpdGUoKSkuCisgICAgICAgICAgICAgICAgb3MubHNlZWsoZmQsIDAsIFNFRUtfRU5EKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBvd25lZF9mZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShvd25lZF9mZCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNlbGYuX2ZkID0gZmQKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9mZCA+PSAwIGFuZCBzZWxmLl9jbG9zZWZkIGFuZCBub3Qgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ3VuY2xvc2VkIGZpbGUgJXInICUgKHNlbGYsKSwgUmVzb3VyY2VXYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja2xldmVsPTIpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2Fubm90IHNlcmlhbGl6ZSAnJXMnIG9iamVjdCIsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBjbGFzc19uYW1lID0gJyVzLiVzJyAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX3F1YWxuYW1lX18pCisgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgW2Nsb3NlZF0+JyAlIGNsYXNzX25hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gKCc8JXMgZmQ9JWQgbW9kZT0lciBjbG9zZWZkPSVyPicgJQorICAgICAgICAgICAgICAgICAgICAoY2xhc3NfbmFtZSwgc2VsZi5fZmQsIHNlbGYubW9kZSwgc2VsZi5fY2xvc2VmZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKCc8JXMgbmFtZT0lciBtb2RlPSVyIGNsb3NlZmQ9JXI+JyAlCisgICAgICAgICAgICAgICAgICAgIChjbGFzc19uYW1lLCBuYW1lLCBzZWxmLm1vZGUsIHNlbGYuX2Nsb3NlZmQpKQorCisgICAgZGVmIF9jaGVja1JlYWRhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZGFibGU6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbignRmlsZSBub3Qgb3BlbiBmb3IgcmVhZGluZycpCisKKyAgICBkZWYgX2NoZWNrV3JpdGFibGUoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5fd3JpdGFibGU6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbignRmlsZSBub3Qgb3BlbiBmb3Igd3JpdGluZycpCisKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAiIiJSZWFkIGF0IG1vc3Qgc2l6ZSBieXRlcywgcmV0dXJuZWQgYXMgYnl0ZXMuCisKKyAgICAgICAgT25seSBtYWtlcyBvbmUgc3lzdGVtIGNhbGwsIHNvIGxlc3MgZGF0YSBtYXkgYmUgcmV0dXJuZWQgdGhhbiByZXF1ZXN0ZWQKKyAgICAgICAgSW4gbm9uLWJsb2NraW5nIG1vZGUsIHJldHVybnMgTm9uZSBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2NoZWNrUmVhZGFibGUoKQorICAgICAgICBpZiBzaXplIGlzIE5vbmUgb3Igc2l6ZSA8IDA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkYWxsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIG9zLnJlYWQoc2VsZi5fZmQsIHNpemUpCisgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJlYWRhbGwoc2VsZik6CisgICAgICAgICIiIlJlYWQgYWxsIGRhdGEgZnJvbSB0aGUgZmlsZSwgcmV0dXJuZWQgYXMgYnl0ZXMuCisKKyAgICAgICAgSW4gbm9uLWJsb2NraW5nIG1vZGUsIHJldHVybnMgYXMgbXVjaCBhcyBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsCisgICAgICAgIG9yIE5vbmUgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUuICBSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgc2VsZi5fY2hlY2tSZWFkYWJsZSgpCisgICAgICAgIGJ1ZnNpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBvcyA9IG9zLmxzZWVrKHNlbGYuX2ZkLCAwLCBTRUVLX0NVUikKKyAgICAgICAgICAgIGVuZCA9IG9zLmZzdGF0KHNlbGYuX2ZkKS5zdF9zaXplCisgICAgICAgICAgICBpZiBlbmQgPj0gcG9zOgorICAgICAgICAgICAgICAgIGJ1ZnNpemUgPSBlbmQgLSBwb3MgKyAxCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IGJ5dGVhcnJheSgpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0KSA+PSBidWZzaXplOgorICAgICAgICAgICAgICAgIGJ1ZnNpemUgPSBsZW4ocmVzdWx0KQorICAgICAgICAgICAgICAgIGJ1ZnNpemUgKz0gbWF4KGJ1ZnNpemUsIERFRkFVTFRfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICBuID0gYnVmc2l6ZSAtIGxlbihyZXN1bHQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2h1bmsgPSBvcy5yZWFkKHNlbGYuX2ZkLCBuKQorICAgICAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCBjaHVuazogIyByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVzdWx0ICs9IGNodW5rCisKKyAgICAgICAgcmV0dXJuIGJ5dGVzKHJlc3VsdCkKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKKyAgICAgICAgIiIiU2FtZSBhcyBSYXdJT0Jhc2UucmVhZGludG8oKS4iIiIKKyAgICAgICAgbSA9IG1lbW9yeXZpZXcoYikuY2FzdCgnQicpCisgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobGVuKG0pKQorICAgICAgICBuID0gbGVuKGRhdGEpCisgICAgICAgIG1bOm5dID0gZGF0YQorICAgICAgICByZXR1cm4gbgorCisgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICAiIiJXcml0ZSBieXRlcyBiIHRvIGZpbGUsIHJldHVybiBudW1iZXIgd3JpdHRlbi4KKworICAgICAgICBPbmx5IG1ha2VzIG9uZSBzeXN0ZW0gY2FsbCwgc28gbm90IGFsbCBvZiB0aGUgZGF0YSBtYXkgYmUgd3JpdHRlbi4KKyAgICAgICAgVGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIGlzIHJldHVybmVkLiAgSW4gbm9uLWJsb2NraW5nIG1vZGUsCisgICAgICAgIHJldHVybnMgTm9uZSBpZiB0aGUgd3JpdGUgd291bGQgYmxvY2suCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2NoZWNrV3JpdGFibGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gb3Mud3JpdGUoc2VsZi5fZmQsIGIpCisgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9U0VFS19TRVQpOgorICAgICAgICAiIiJNb3ZlIHRvIG5ldyBmaWxlIHBvc2l0aW9uLgorCisgICAgICAgIEFyZ3VtZW50IG9mZnNldCBpcyBhIGJ5dGUgY291bnQuICBPcHRpb25hbCBhcmd1bWVudCB3aGVuY2UgZGVmYXVsdHMgdG8KKyAgICAgICAgU0VFS19TRVQgb3IgMCAob2Zmc2V0IGZyb20gc3RhcnQgb2YgZmlsZSwgb2Zmc2V0IHNob3VsZCBiZSA+PSAwKTsgb3RoZXIgdmFsdWVzCisgICAgICAgIGFyZSBTRUVLX0NVUiBvciAxIChtb3ZlIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24sIHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSwKKyAgICAgICAgYW5kIFNFRUtfRU5EIG9yIDIgKG1vdmUgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUsIHVzdWFsbHkgbmVnYXRpdmUsIGFsdGhvdWdoCisgICAgICAgIG1hbnkgcGxhdGZvcm1zIGFsbG93IHNlZWtpbmcgYmV5b25kIHRoZSBlbmQgb2YgYSBmaWxlKS4KKworICAgICAgICBOb3RlIHRoYXQgbm90IGFsbCBmaWxlIG9iamVjdHMgYXJlIHNlZWthYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwb3MsIGZsb2F0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignYW4gaW50ZWdlciBpcyByZXF1aXJlZCcpCisgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIG9zLmxzZWVrKHNlbGYuX2ZkLCBwb3MsIHdoZW5jZSkKKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICAiIiJ0ZWxsKCkgLT4gaW50LiAgQ3VycmVudCBmaWxlIHBvc2l0aW9uLgorCisgICAgICAgIENhbiByYWlzZSBPU0Vycm9yIGZvciBub24gc2Vla2FibGUgZmlsZXMuIiIiCisgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIG9zLmxzZWVrKHNlbGYuX2ZkLCAwLCBTRUVLX0NVUikKKworICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAiIiJUcnVuY2F0ZSB0aGUgZmlsZSB0byBhdCBtb3N0IHNpemUgYnl0ZXMuCisKKyAgICAgICAgU2l6ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLCBhcyByZXR1cm5lZCBieSB0ZWxsKCkuCisgICAgICAgIFRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gaXMgY2hhbmdlZCB0byB0aGUgdmFsdWUgb2Ygc2l6ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgc2VsZi5fY2hlY2tXcml0YWJsZSgpCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSBzZWxmLnRlbGwoKQorICAgICAgICBvcy5mdHJ1bmNhdGUoc2VsZi5fZmQsIHNpemUpCisgICAgICAgIHJldHVybiBzaXplCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBmaWxlLgorCisgICAgICAgIEEgY2xvc2VkIGZpbGUgY2Fubm90IGJlIHVzZWQgZm9yIGZ1cnRoZXIgSS9PIG9wZXJhdGlvbnMuICBjbG9zZSgpIG1heSBiZQorICAgICAgICBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aG91dCBlcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZWZkOgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShzZWxmLl9mZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgc2Vla2FibGUoc2VsZik6CisgICAgICAgICIiIlRydWUgaWYgZmlsZSBzdXBwb3J0cyByYW5kb20tYWNjZXNzLiIiIgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIGlmIHNlbGYuX3NlZWthYmxlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi50ZWxsKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlZWthYmxlID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2Vla2FibGUgPSBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLl9zZWVrYWJsZQorCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAiIiJUcnVlIGlmIGZpbGUgd2FzIG9wZW5lZCBpbiBhIHJlYWQgbW9kZS4iIiIKKyAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZGFibGUKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgIiIiVHJ1ZSBpZiBmaWxlIHdhcyBvcGVuZWQgaW4gYSB3cml0ZSBtb2RlLiIiIgorICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmLl93cml0YWJsZQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciAoYW4gaW50ZWdlcikuIiIiCisgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZkCisKKyAgICBkZWYgaXNhdHR5KHNlbGYpOgorICAgICAgICAiIiJUcnVlIGlmIHRoZSBmaWxlIGlzIGNvbm5lY3RlZCB0byBhIFRUWSBkZXZpY2UuIiIiCisgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIG9zLmlzYXR0eShzZWxmLl9mZCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjbG9zZWZkKHNlbGYpOgorICAgICAgICAiIiJUcnVlIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSBjbG9zZWQgYnkgY2xvc2UoKS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nsb3NlZmQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtb2RlKHNlbGYpOgorICAgICAgICAiIiJTdHJpbmcgZ2l2aW5nIHRoZSBmaWxlIG1vZGUiIiIKKyAgICAgICAgaWYgc2VsZi5fY3JlYXRlZDoKKyAgICAgICAgICAgIGlmIHNlbGYuX3JlYWRhYmxlOgorICAgICAgICAgICAgICAgIHJldHVybiAneGIrJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3hiJworICAgICAgICBlbGlmIHNlbGYuX2FwcGVuZGluZzoKKyAgICAgICAgICAgIGlmIHNlbGYuX3JlYWRhYmxlOgorICAgICAgICAgICAgICAgIHJldHVybiAnYWIrJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2FiJworICAgICAgICBlbGlmIHNlbGYuX3JlYWRhYmxlOgorICAgICAgICAgICAgaWYgc2VsZi5fd3JpdGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuICdyYisnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAncmInCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ3diJworCisKIGNsYXNzIFRleHRJT0Jhc2UoSU9CYXNlKToKIAogICAgICIiIkJhc2UgY2xhc3MgZm9yIHRleHQgSS9PLgpAQCAtMTU2Niw3ICsxOTc4LDggQEAKICAgICAjICAgLSAiY2hhcnNfLi4uIiBmb3IgaW50ZWdlciB2YXJpYWJsZXMgdGhhdCBjb3VudCBkZWNvZGVkIGNoYXJhY3RlcnMKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gIjxfcHlpby5UZXh0SU9XcmFwcGVyIgorICAgICAgICByZXN1bHQgPSAiPHt9Lnt9Ii5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgpkaWZmIC0tZ2l0IGEvTGliL19zdHJwdGltZS5weSBiL0xpYi9fc3RycHRpbWUucHkKaW5kZXggNmQ2NDg1Ni4uZjg0MjI3YiAxMDA2NDQKLS0tIGEvTGliL19zdHJwdGltZS5weQorKysgYi9MaWIvX3N0cnB0aW1lLnB5CkBAIC0xNzEsOSArMTcxLDkgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi50em5hbWUgPSB0aW1lLnR6bmFtZQogICAgICAgICBzZWxmLmRheWxpZ2h0ID0gdGltZS5kYXlsaWdodAotICAgICAgICBub19zYXZpbmcgPSBmcm96ZW5zZXQoWyJ1dGMiLCAiZ210Iiwgc2VsZi50em5hbWVbMF0ubG93ZXIoKV0pCisgICAgICAgIG5vX3NhdmluZyA9IGZyb3plbnNldCh7InV0YyIsICJnbXQiLCBzZWxmLnR6bmFtZVswXS5sb3dlcigpfSkKICAgICAgICAgaWYgc2VsZi5kYXlsaWdodDoKLSAgICAgICAgICAgIGhhc19zYXZpbmcgPSBmcm96ZW5zZXQoW3NlbGYudHpuYW1lWzFdLmxvd2VyKCldKQorICAgICAgICAgICAgaGFzX3NhdmluZyA9IGZyb3plbnNldCh7c2VsZi50em5hbWVbMV0ubG93ZXIoKX0pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBoYXNfc2F2aW5nID0gZnJvemVuc2V0KCkKICAgICAgICAgc2VsZi50aW1lem9uZSA9IChub19zYXZpbmcsIGhhc19zYXZpbmcpCkBAIC0yNTcsOCArMjU3LDggQEAKICAgICAgICAgIyBmb3JtYXQgZGlyZWN0aXZlcyAoJW0sIGV0Yy4pLgogICAgICAgICByZWdleF9jaGFycyA9IHJlX2NvbXBpbGUociIoW1xcLl4kKis/XChcKXt9XFtcXXxdKSIpCiAgICAgICAgIGZvcm1hdCA9IHJlZ2V4X2NoYXJzLnN1YihyIlxcXDEiLCBmb3JtYXQpCi0gICAgICAgIHdoaXRlc3BhY2VfcmVwbGFjZW1lbnQgPSByZV9jb21waWxlKCdccysnKQotICAgICAgICBmb3JtYXQgPSB3aGl0ZXNwYWNlX3JlcGxhY2VtZW50LnN1YignXHMrJywgZm9ybWF0KQorICAgICAgICB3aGl0ZXNwYWNlX3JlcGxhY2VtZW50ID0gcmVfY29tcGlsZShyJ1xzKycpCisgICAgICAgIGZvcm1hdCA9IHdoaXRlc3BhY2VfcmVwbGFjZW1lbnQuc3ViKHInXFxzKycsIGZvcm1hdCkKICAgICAgICAgd2hpbGUgJyUnIGluIGZvcm1hdDoKICAgICAgICAgICAgIGRpcmVjdGl2ZV9pbmRleCA9IGZvcm1hdC5pbmRleCgnJScpKzEKICAgICAgICAgICAgIHByb2Nlc3NlZF9mb3JtYXQgPSAiJXMlcyVzIiAlIChwcm9jZXNzZWRfZm9ybWF0LApAQCAtMzExLDcgKzMxMSw2IEBACiAKICAgICBnbG9iYWwgX1RpbWVSRV9jYWNoZSwgX3JlZ2V4X2NhY2hlCiAgICAgd2l0aCBfY2FjaGVfbG9jazoKLQogICAgICAgICBsb2NhbGVfdGltZSA9IF9UaW1lUkVfY2FjaGUubG9jYWxlX3RpbWUKICAgICAgICAgaWYgKF9nZXRsYW5nKCkgIT0gbG9jYWxlX3RpbWUubGFuZyBvcgogICAgICAgICAgICAgdGltZS50em5hbWUgIT0gbG9jYWxlX3RpbWUudHpuYW1lIG9yCkBAIC00NjMsNiArNDYyLDEwIEBACiAgICAgICAgIHdlZWtfc3RhcnRzX01vbiA9IFRydWUgaWYgd2Vla19vZl95ZWFyX3N0YXJ0ID09IDAgZWxzZSBGYWxzZQogICAgICAgICBqdWxpYW4gPSBfY2FsY19qdWxpYW5fZnJvbV9VX29yX1coeWVhciwgd2Vla19vZl95ZWFyLCB3ZWVrZGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWVrX3N0YXJ0c19Nb24pCisgICAgICAgIGlmIGp1bGlhbiA8PSAwOgorICAgICAgICAgICAgeWVhciAtPSAxCisgICAgICAgICAgICB5ZGF5ID0gMzY2IGlmIGNhbGVuZGFyLmlzbGVhcCh5ZWFyKSBlbHNlIDM2NQorICAgICAgICAgICAganVsaWFuICs9IHlkYXkKICAgICAjIENhbm5vdCBwcmUtY2FsY3VsYXRlIGRhdGV0aW1lX2RhdGUoKSBzaW5jZSBjYW4gY2hhbmdlIGluIEp1bGlhbgogICAgICMgY2FsY3VsYXRpb24gYW5kIHRodXMgY291bGQgaGF2ZSBkaWZmZXJlbnQgdmFsdWUgZm9yIHRoZSBkYXkgb2YgdGhlIHdlZWsKICAgICAjIGNhbGN1bGF0aW9uLgpkaWZmIC0tZ2l0IGEvTGliL2FiYy5weSBiL0xpYi9hYmMucHkKaW5kZXggMDM1OGE0Ni4uMWNiZjk2YSAxMDA2NDQKLS0tIGEvTGliL2FiYy5weQorKysgYi9MaWIvYWJjLnB5CkBAIC0xNjgsNyArMTY4LDcgQEAKIAogICAgIGRlZiBfZHVtcF9yZWdpc3RyeShjbHMsIGZpbGU9Tm9uZSk6CiAgICAgICAgICIiIkRlYnVnIGhlbHBlciB0byBwcmludCB0aGUgQUJDIHJlZ2lzdHJ5LiIiIgotICAgICAgICBwcmludCgiQ2xhc3M6ICVzLiVzIiAlIChjbHMuX19tb2R1bGVfXywgY2xzLl9fbmFtZV9fKSwgZmlsZT1maWxlKQorICAgICAgICBwcmludCgiQ2xhc3M6ICVzLiVzIiAlIChjbHMuX19tb2R1bGVfXywgY2xzLl9fcXVhbG5hbWVfXyksIGZpbGU9ZmlsZSkKICAgICAgICAgcHJpbnQoIkludi5jb3VudGVyOiAlcyIgJSBBQkNNZXRhLl9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIsIGZpbGU9ZmlsZSkKICAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKGNscy5fX2RpY3RfXy5rZXlzKCkpOgogICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJfYWJjXyIpOgpkaWZmIC0tZ2l0IGEvTGliL2FyZ3BhcnNlLnB5IGIvTGliL2FyZ3BhcnNlLnB5CmluZGV4IGJlMjc2YmIuLjlhMDY3MTkgMTAwNjQ0Ci0tLSBhL0xpYi9hcmdwYXJzZS5weQorKysgYi9MaWIvYXJncGFyc2UucHkKQEAgLTEyMDksMTEgKzEyMDksNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIHJldHVybiB2YXJzKHNlbGYpID09IHZhcnMob3RoZXIpCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVzcGFjZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKICAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9fZGljdF9fCiAKQEAgLTE1OTUsNiArMTU5MCw3IEBACiAgICAgICAgIC0gYXJndW1lbnRfZGVmYXVsdCAtLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYWxsIGFyZ3VtZW50cwogICAgICAgICAtIGNvbmZsaWN0X2hhbmRsZXIgLS0gU3RyaW5nIGluZGljYXRpbmcgaG93IHRvIGhhbmRsZSBjb25mbGljdHMKICAgICAgICAgLSBhZGRfaGVscCAtLSBBZGQgYSAtaC8taGVscCBvcHRpb24KKyAgICAgICAgLSBhbGxvd19hYmJyZXYgLS0gQWxsb3cgbG9uZyBvcHRpb25zIHRvIGJlIGFiYnJldmlhdGVkIHVuYW1iaWd1b3VzbHkKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLApAQCAtMTYwOCw3ICsxNjA0LDggQEAKICAgICAgICAgICAgICAgICAgZnJvbWZpbGVfcHJlZml4X2NoYXJzPU5vbmUsCiAgICAgICAgICAgICAgICAgIGFyZ3VtZW50X2RlZmF1bHQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcj0nZXJyb3InLAotICAgICAgICAgICAgICAgICBhZGRfaGVscD1UcnVlKToKKyAgICAgICAgICAgICAgICAgYWRkX2hlbHA9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgYWxsb3dfYWJicmV2PVRydWUpOgogCiAgICAgICAgIHN1cGVyaW5pdCA9IHN1cGVyKEFyZ3VtZW50UGFyc2VyLCBzZWxmKS5fX2luaXRfXwogICAgICAgICBzdXBlcmluaXQoZGVzY3JpcHRpb249ZGVzY3JpcHRpb24sCkBAIC0xNjI2LDYgKzE2MjMsNyBAQAogICAgICAgICBzZWxmLmZvcm1hdHRlcl9jbGFzcyA9IGZvcm1hdHRlcl9jbGFzcwogICAgICAgICBzZWxmLmZyb21maWxlX3ByZWZpeF9jaGFycyA9IGZyb21maWxlX3ByZWZpeF9jaGFycwogICAgICAgICBzZWxmLmFkZF9oZWxwID0gYWRkX2hlbHAKKyAgICAgICAgc2VsZi5hbGxvd19hYmJyZXYgPSBhbGxvd19hYmJyZXYKIAogICAgICAgICBhZGRfZ3JvdXAgPSBzZWxmLmFkZF9hcmd1bWVudF9ncm91cAogICAgICAgICBzZWxmLl9wb3NpdGlvbmFscyA9IGFkZF9ncm91cChfKCdwb3NpdGlvbmFsIGFyZ3VtZW50cycpKQpAQCAtMjEwMywyMyArMjEwMSwyNCBAQAogICAgICAgICAgICAgICAgIGFjdGlvbiA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1tvcHRpb25fc3RyaW5nXQogICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZwogCi0gICAgICAgICMgc2VhcmNoIHRocm91Z2ggYWxsIHBvc3NpYmxlIHByZWZpeGVzIG9mIHRoZSBvcHRpb24gc3RyaW5nCi0gICAgICAgICMgYW5kIGFsbCBhY3Rpb25zIGluIHRoZSBwYXJzZXIgZm9yIHBvc3NpYmxlIGludGVycHJldGF0aW9ucwotICAgICAgICBvcHRpb25fdHVwbGVzID0gc2VsZi5fZ2V0X29wdGlvbl90dXBsZXMoYXJnX3N0cmluZykKKyAgICAgICAgaWYgc2VsZi5hbGxvd19hYmJyZXY6CisgICAgICAgICAgICAjIHNlYXJjaCB0aHJvdWdoIGFsbCBwb3NzaWJsZSBwcmVmaXhlcyBvZiB0aGUgb3B0aW9uIHN0cmluZworICAgICAgICAgICAgIyBhbmQgYWxsIGFjdGlvbnMgaW4gdGhlIHBhcnNlciBmb3IgcG9zc2libGUgaW50ZXJwcmV0YXRpb25zCisgICAgICAgICAgICBvcHRpb25fdHVwbGVzID0gc2VsZi5fZ2V0X29wdGlvbl90dXBsZXMoYXJnX3N0cmluZykKIAotICAgICAgICAjIGlmIG11bHRpcGxlIGFjdGlvbnMgbWF0Y2gsIHRoZSBvcHRpb24gc3RyaW5nIHdhcyBhbWJpZ3VvdXMKLSAgICAgICAgaWYgbGVuKG9wdGlvbl90dXBsZXMpID4gMToKLSAgICAgICAgICAgIG9wdGlvbnMgPSAnLCAnLmpvaW4oW29wdGlvbl9zdHJpbmcKLSAgICAgICAgICAgICAgICBmb3IgYWN0aW9uLCBvcHRpb25fc3RyaW5nLCBleHBsaWNpdF9hcmcgaW4gb3B0aW9uX3R1cGxlc10pCi0gICAgICAgICAgICBhcmdzID0geydvcHRpb24nOiBhcmdfc3RyaW5nLCAnbWF0Y2hlcyc6IG9wdGlvbnN9Ci0gICAgICAgICAgICBtc2cgPSBfKCdhbWJpZ3VvdXMgb3B0aW9uOiAlKG9wdGlvbilzIGNvdWxkIG1hdGNoICUobWF0Y2hlcylzJykKLSAgICAgICAgICAgIHNlbGYuZXJyb3IobXNnICUgYXJncykKKyAgICAgICAgICAgICMgaWYgbXVsdGlwbGUgYWN0aW9ucyBtYXRjaCwgdGhlIG9wdGlvbiBzdHJpbmcgd2FzIGFtYmlndW91cworICAgICAgICAgICAgaWYgbGVuKG9wdGlvbl90dXBsZXMpID4gMToKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gJywgJy5qb2luKFtvcHRpb25fc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIGZvciBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZyBpbiBvcHRpb25fdHVwbGVzXSkKKyAgICAgICAgICAgICAgICBhcmdzID0geydvcHRpb24nOiBhcmdfc3RyaW5nLCAnbWF0Y2hlcyc6IG9wdGlvbnN9CisgICAgICAgICAgICAgICAgbXNnID0gXygnYW1iaWd1b3VzIG9wdGlvbjogJShvcHRpb24pcyBjb3VsZCBtYXRjaCAlKG1hdGNoZXMpcycpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcihtc2cgJSBhcmdzKQogCi0gICAgICAgICMgaWYgZXhhY3RseSBvbmUgYWN0aW9uIG1hdGNoZWQsIHRoaXMgc2VnbWVudGF0aW9uIGlzIGdvb2QsCi0gICAgICAgICMgc28gcmV0dXJuIHRoZSBwYXJzZWQgYWN0aW9uCi0gICAgICAgIGVsaWYgbGVuKG9wdGlvbl90dXBsZXMpID09IDE6Ci0gICAgICAgICAgICBvcHRpb25fdHVwbGUsID0gb3B0aW9uX3R1cGxlcwotICAgICAgICAgICAgcmV0dXJuIG9wdGlvbl90dXBsZQorICAgICAgICAgICAgIyBpZiBleGFjdGx5IG9uZSBhY3Rpb24gbWF0Y2hlZCwgdGhpcyBzZWdtZW50YXRpb24gaXMgZ29vZCwKKyAgICAgICAgICAgICMgc28gcmV0dXJuIHRoZSBwYXJzZWQgYWN0aW9uCisgICAgICAgICAgICBlbGlmIGxlbihvcHRpb25fdHVwbGVzKSA9PSAxOgorICAgICAgICAgICAgICAgIG9wdGlvbl90dXBsZSwgPSBvcHRpb25fdHVwbGVzCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbl90dXBsZQogCiAgICAgICAgICMgaWYgaXQgd2FzIG5vdCBmb3VuZCBhcyBhbiBvcHRpb24sIGJ1dCBpdCBsb29rcyBsaWtlIGEgbmVnYXRpdmUKICAgICAgICAgIyBudW1iZXIsIGl0IHdhcyBtZWFudCB0byBiZSBwb3NpdGlvbmFsCmRpZmYgLS1naXQgYS9MaWIvYXN0LnB5IGIvTGliL2FzdC5weQppbmRleCAwMmMzYjI4Li4wMTcwNDcyIDEwMDY0NAotLS0gYS9MaWIvYXN0LnB5CisrKyBiL0xpYi9hc3QucHkKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgIGJlIGZvdW5kLiAgSWYgdGhlIG5vZGUgcHJvdmlkZWQgZG9lcyBub3QgaGF2ZSBkb2NzdHJpbmdzIGEgVHlwZUVycm9yCiAgICAgd2lsbCBiZSByYWlzZWQuCiAgICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZSwgKEZ1bmN0aW9uRGVmLCBDbGFzc0RlZiwgTW9kdWxlKSk6CisgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZSwgKEFzeW5jRnVuY3Rpb25EZWYsIEZ1bmN0aW9uRGVmLCBDbGFzc0RlZiwgTW9kdWxlKSk6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXIgY2FuJ3QgaGF2ZSBkb2NzdHJpbmdzIiAlIG5vZGUuX19jbGFzc19fLl9fbmFtZV9fKQogICAgIGlmIG5vZGUuYm9keSBhbmQgaXNpbnN0YW5jZShub2RlLmJvZHlbMF0sIEV4cHIpIGFuZCBcCiAgICAgICAgaXNpbnN0YW5jZShub2RlLmJvZHlbMF0udmFsdWUsIFN0cik6CkBAIC0yOTMsNyArMjkzLDYgQEAKIAogICAgIGRlZiBnZW5lcmljX3Zpc2l0KHNlbGYsIG5vZGUpOgogICAgICAgICBmb3IgZmllbGQsIG9sZF92YWx1ZSBpbiBpdGVyX2ZpZWxkcyhub2RlKToKLSAgICAgICAgICAgIG9sZF92YWx1ZSA9IGdldGF0dHIobm9kZSwgZmllbGQsIE5vbmUpCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9sZF92YWx1ZSwgbGlzdCk6CiAgICAgICAgICAgICAgICAgbmV3X3ZhbHVlcyA9IFtdCiAgICAgICAgICAgICAgICAgZm9yIHZhbHVlIGluIG9sZF92YWx1ZToKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2hhdC5weSBiL0xpYi9hc3luY2hhdC5weQppbmRleCAxNGMxNTJmLi5mNzI4ZDFiIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNoYXQucHkKKysrIGIvTGliL2FzeW5jaGF0LnB5CkBAIC0yODcsNiArMjg3LDkgQEAKIAogY2xhc3MgZmlmbzoKICAgICBkZWYgX19pbml0X18oc2VsZiwgbGlzdD1Ob25lKToKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ2ZpZm8gY2xhc3Mgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjYnLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgICAgICBpZiBub3QgbGlzdDoKICAgICAgICAgICAgIHNlbGYubGlzdCA9IGRlcXVlKCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKaW5kZXggNDUwNTczMi4uMDE3NDM3NSAxMDA2NDQKLS0tIGEvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKKysrIGIvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKQEAgLTE2LDEwICsxNiw4IEBACiAKIGltcG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcwotaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGhlYXBxCiBpbXBvcnQgaW5zcGVjdAotaW1wb3J0IGlwYWRkcmVzcwogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwpAQCAtNTQsNiArNTIsMTIgQEAKICMgYmVmb3JlIGNsZWFudXAgb2YgY2FuY2VsbGVkIGhhbmRsZXMgaXMgcGVyZm9ybWVkLgogX01JTl9DQU5DRUxMRURfVElNRVJfSEFORExFU19GUkFDVElPTiA9IDAuNQogCisjIEV4Y2VwdGlvbnMgd2hpY2ggbXVzdCBub3QgY2FsbCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaW4gZmF0YWwgZXJyb3IKKyMgbWV0aG9kcyAoX2ZhdGFsX2Vycm9yKCkpCitfRkFUQUxfRVJST1JfSUdOT1JFID0gKEJyb2tlblBpcGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlc2V0RXJyb3IsIENvbm5lY3Rpb25BYm9ydGVkRXJyb3IpCisKKwogZGVmIF9mb3JtYXRfaGFuZGxlKGhhbmRsZSk6CiAgICAgY2IgPSBoYW5kbGUuX2NhbGxiYWNrCiAgICAgaWYgaW5zcGVjdC5pc21ldGhvZChjYikgYW5kIGlzaW5zdGFuY2UoY2IuX19zZWxmX18sIHRhc2tzLlRhc2spOgpAQCAtODAsMTIgKzg0LDE0IEBACiAgICAgX1NPQ0tFVF9UWVBFX01BU0sgfD0gc29ja2V0LlNPQ0tfQ0xPRVhFQwogCiAKLUBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9MTAyNCkKIGRlZiBfaXBhZGRyX2luZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90byk6Ci0gICAgIyBUcnkgdG8gc2tpcCBnZXRhZGRyaW5mbyBpZiAiaG9zdCIgaXMgYWxyZWFkeSBhbiBJUC4gU2luY2UgZ2V0YWRkcmluZm8KLSAgICAjIGJsb2NrcyBvbiBhbiBleGNsdXNpdmUgbG9jayBvbiBzb21lIHBsYXRmb3JtcywgdXNlcnMgbWlnaHQgaGFuZGxlIG5hbWUKLSAgICAjIHJlc29sdXRpb24gaW4gdGhlaXIgb3duIGNvZGUgYW5kIHBhc3MgaW4gcmVzb2x2ZWQgSVBzLgotICAgIGlmIHByb3RvIG5vdCBpbiB7MCwgc29ja2V0LklQUFJPVE9fVENQLCBzb2NrZXQuSVBQUk9UT19VRFB9IG9yIGhvc3QgaXMgTm9uZToKKyAgICAjIFRyeSB0byBza2lwIGdldGFkZHJpbmZvIGlmICJob3N0IiBpcyBhbHJlYWR5IGFuIElQLiBVc2VycyBtaWdodCBoYXZlCisgICAgIyBoYW5kbGVkIG5hbWUgcmVzb2x1dGlvbiBpbiB0aGVpciBvd24gY29kZSBhbmQgcGFzcyBpbiByZXNvbHZlZCBJUHMuCisgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnaW5ldF9wdG9uJyk6CisgICAgICAgIHJldHVybgorCisgICAgaWYgcHJvdG8gbm90IGluIHswLCBzb2NrZXQuSVBQUk9UT19UQ1AsIHNvY2tldC5JUFBST1RPX1VEUH0gb3IgXAorICAgICAgICAgICAgaG9zdCBpcyBOb25lOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgdHlwZSAmPSB+X1NPQ0tFVF9UWVBFX01BU0sKQEAgLTk2LDU5ICsxMDIsNjMgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgaWYgaGFzYXR0cihzb2NrZXQsICdpbmV0X3B0b24nKToKLSAgICAgICAgaWYgZmFtaWx5ID09IHNvY2tldC5BRl9VTlNQRUM6Ci0gICAgICAgICAgICBhZnMgPSBbc29ja2V0LkFGX0lORVQsIHNvY2tldC5BRl9JTkVUNl0KKyAgICBpZiBwb3J0IGlzIE5vbmU6CisgICAgICAgIHBvcnQgPSAwCisgICAgZWxpZiBpc2luc3RhbmNlKHBvcnQsIGJ5dGVzKToKKyAgICAgICAgaWYgcG9ydCA9PSBiJyc6CisgICAgICAgICAgICBwb3J0ID0gMAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYWZzID0gW2ZhbWlseV0KLQotICAgICAgICBmb3IgYWYgaW4gYWZzOgotICAgICAgICAgICAgIyBMaW51eCdzIGluZXRfcHRvbiBkb2Vzbid0IGFjY2VwdCBhbiBJUHY2IHpvbmUgaW5kZXggYWZ0ZXIgaG9zdCwKLSAgICAgICAgICAgICMgbGlrZSAnOjoxJWxvMCcsIHNvIHN0cmlwIGl0LiBJZiB3ZSBoYXBwZW4gdG8gbWFrZSBhbiBpbnZhbGlkCi0gICAgICAgICAgICAjIGFkZHJlc3MgbG9vayB2YWxpZCwgd2UgZmFpbCBsYXRlciBpbiBzb2NrLmNvbm5lY3Qgb3Igc29jay5iaW5kLgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGFmID09IHNvY2tldC5BRl9JTkVUNjoKLSAgICAgICAgICAgICAgICAgICAgc29ja2V0LmluZXRfcHRvbihhZiwgaG9zdC5wYXJ0aXRpb24oJyUnKVswXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzb2NrZXQuaW5ldF9wdG9uKGFmLCBob3N0KQotICAgICAgICAgICAgICAgIHJldHVybiBhZiwgdHlwZSwgcHJvdG8sICcnLCAoaG9zdCwgcG9ydCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIE1pZ2h0IGJlIGEgc2VydmljZSBuYW1lIGxpa2UgYiJodHRwIi4KKyAgICAgICAgICAgICAgICBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUocG9ydC5kZWNvZGUoJ2FzY2lpJykpCisgICAgZWxpZiBpc2luc3RhbmNlKHBvcnQsIHN0cik6CisgICAgICAgIGlmIHBvcnQgPT0gJyc6CisgICAgICAgICAgICBwb3J0ID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICMgTWlnaHQgYmUgYSBzZXJ2aWNlIG5hbWUgbGlrZSAiaHR0cCIuCisgICAgICAgICAgICAgICAgcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHBvcnQpCiAKLSAgICAgICAgIyAiaG9zdCIgaXMgbm90IGFuIElQIGFkZHJlc3MuCisgICAgaWYgZmFtaWx5ID09IHNvY2tldC5BRl9VTlNQRUM6CisgICAgICAgIGFmcyA9IFtzb2NrZXQuQUZfSU5FVCwgc29ja2V0LkFGX0lORVQ2XQorICAgIGVsc2U6CisgICAgICAgIGFmcyA9IFtmYW1pbHldCisKKyAgICBpZiBpc2luc3RhbmNlKGhvc3QsIGJ5dGVzKToKKyAgICAgICAgaG9zdCA9IGhvc3QuZGVjb2RlKCdpZG5hJykKKyAgICBpZiAnJScgaW4gaG9zdDoKKyAgICAgICAgIyBMaW51eCdzIGluZXRfcHRvbiBkb2Vzbid0IGFjY2VwdCBhbiBJUHY2IHpvbmUgaW5kZXggYWZ0ZXIgaG9zdCwKKyAgICAgICAgIyBsaWtlICc6OjElbG8wJy4KICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgICMgTm8gaW5ldF9wdG9uLiAoT24gV2luZG93cyBpdCdzIG9ubHkgYXZhaWxhYmxlIHNpbmNlIFB5dGhvbiAzLjQuKQotICAgICMgRXZlbiB0aG91Z2ggZ2V0YWRkcmluZm8gd2l0aCBBSV9OVU1FUklDSE9TVCB3b3VsZCBiZSBub24tYmxvY2tpbmcsIGl0Ci0gICAgIyBzdGlsbCByZXF1aXJlcyBhIGxvY2sgb24gc29tZSBwbGF0Zm9ybXMsIGFuZCB3YWl0aW5nIGZvciB0aGF0IGxvY2sgY291bGQKLSAgICAjIGJsb2NrIHRoZSBldmVudCBsb29wLiBVc2UgaXBhZGRyZXNzIGluc3RlYWQsIGl0J3MganVzdCB0ZXh0IHBhcnNpbmcuCi0gICAgdHJ5OgotICAgICAgICBhZGRyID0gaXBhZGRyZXNzLklQdjRBZGRyZXNzKGhvc3QpCi0gICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgZm9yIGFmIGluIGFmczoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgYWRkciA9IGlwYWRkcmVzcy5JUHY2QWRkcmVzcyhob3N0LnBhcnRpdGlvbignJScpWzBdKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBzb2NrZXQuaW5ldF9wdG9uKGFmLCBob3N0KQorICAgICAgICAgICAgIyBUaGUgaG9zdCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLgorICAgICAgICAgICAgcmV0dXJuIGFmLCB0eXBlLCBwcm90bywgJycsIChob3N0LCBwb3J0KQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKIAotICAgIGFmID0gc29ja2V0LkFGX0lORVQgaWYgYWRkci52ZXJzaW9uID09IDQgZWxzZSBzb2NrZXQuQUZfSU5FVDYKLSAgICBpZiBmYW1pbHkgbm90IGluIChzb2NrZXQuQUZfVU5TUEVDLCBhZik6Ci0gICAgICAgICMgImhvc3QiIGlzIHdyb25nIElQIHZlcnNpb24gZm9yICJmYW1pbHkiLgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgcmV0dXJuIGFmLCB0eXBlLCBwcm90bywgJycsIChob3N0LCBwb3J0KQorICAgICMgImhvc3QiIGlzIG5vdCBhbiBJUCBhZGRyZXNzLgorICAgIHJldHVybiBOb25lCiAKIAotZGVmIF9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssIGFkZHJlc3MpOgotICAgICMgRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgaXMgYWxyZWFkeSByZXNvbHZlZCB0byBhdm9pZCB0aGUgdHJhcCBvZiBoYW5naW5nCi0gICAgIyB0aGUgZW50aXJlIGV2ZW50IGxvb3Agd2hlbiB0aGUgYWRkcmVzcyByZXF1aXJlcyBkb2luZyBhIEROUyBsb29rdXAuCi0KLSAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSBhbmQgc29jay5mYW1pbHkgPT0gc29ja2V0LkFGX1VOSVg6Ci0gICAgICAgIHJldHVybgotCitkZWYgX2Vuc3VyZV9yZXNvbHZlZChhZGRyZXNzLCAqLCBmYW1pbHk9MCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTAsCisgICAgICAgICAgICAgICAgICAgICBmbGFncz0wLCBsb29wKToKICAgICBob3N0LCBwb3J0ID0gYWRkcmVzc1s6Ml0KLSAgICBpZiBfaXBhZGRyX2luZm8oaG9zdCwgcG9ydCwgc29jay5mYW1pbHksIHNvY2sudHlwZSwgc29jay5wcm90bykgaXMgTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYWRkcmVzcyBtdXN0IGJlIHJlc29sdmVkIChJUCBhZGRyZXNzKSwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiBnb3QgaG9zdCAlciIgJSBob3N0KQorICAgIGluZm8gPSBfaXBhZGRyX2luZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bykKKyAgICBpZiBpbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAjICJob3N0IiBpcyBhbHJlYWR5IGEgcmVzb2x2ZWQgSVAuCisgICAgICAgIGZ1dCA9IGxvb3AuY3JlYXRlX2Z1dHVyZSgpCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFtpbmZvXSkKKyAgICAgICAgcmV0dXJuIGZ1dAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBsb29wLmdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQogCiAKIGRlZiBfcnVuX3VudGlsX2NvbXBsZXRlX2NiKGZ1dCk6CkBAIC0yMDMsNyArMjEzLDcgQEAKICAgICBkZWYgd2FpdF9jbG9zZWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuc29ja2V0cyBpcyBOb25lIG9yIHNlbGYuX3dhaXRlcnMgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2xvb3AuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKHdhaXRlcikKICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKIApAQCAtMjM3LDYgKzI0NywxMCBAQAogICAgICAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmlzX3J1bm5pbmcoKSwKICAgICAgICAgICAgICAgICAgICBzZWxmLmlzX2Nsb3NlZCgpLCBzZWxmLmdldF9kZWJ1ZygpKSkKIAorICAgIGRlZiBjcmVhdGVfZnV0dXJlKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYSBGdXR1cmUgb2JqZWN0IGF0dGFjaGVkIHRvIHRoZSBsb29wLiIiIgorICAgICAgICByZXR1cm4gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorCiAgICAgZGVmIGNyZWF0ZV90YXNrKHNlbGYsIGNvcm8pOgogICAgICAgICAiIiJTY2hlZHVsZSBhIGNvcm91dGluZSBvYmplY3QuCiAKQEAgLTUzMCw3ICs1NDQsNyBAQAogICAgICAgICAgICAgYXNzZXJ0IG5vdCBhcmdzCiAgICAgICAgICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UoZnVuYywgZXZlbnRzLlRpbWVySGFuZGxlKQogICAgICAgICAgICAgaWYgZnVuYy5fY2FuY2VsbGVkOgotICAgICAgICAgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgICAgICAgICAgZi5zZXRfcmVzdWx0KE5vbmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGYKICAgICAgICAgICAgIGZ1bmMsIGFyZ3MgPSBmdW5jLl9jYWxsYmFjaywgZnVuYy5fYXJncwpAQCAtNTcxLDEyICs1ODUsNyBAQAogCiAgICAgZGVmIGdldGFkZHJpbmZvKHNlbGYsIGhvc3QsIHBvcnQsICosCiAgICAgICAgICAgICAgICAgICAgIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApOgotICAgICAgICBpbmZvID0gX2lwYWRkcl9pbmZvKGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8pCi0gICAgICAgIGlmIGluZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCi0gICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChbaW5mb10pCi0gICAgICAgICAgICByZXR1cm4gZnV0Ci0gICAgICAgIGVsaWYgc2VsZi5fZGVidWc6CisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVuX2luX2V4ZWN1dG9yKE5vbmUsIHNlbGYuX2dldGFkZHJpbmZvX2RlYnVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzKQogICAgICAgICBlbHNlOgpAQCAtNjI1LDE0ICs2MzQsMTQgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAnaG9zdC9wb3J0IGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQogCi0gICAgICAgICAgICBmMSA9IHNlbGYuZ2V0YWRkcmluZm8oCi0gICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKLSAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgZjEgPSBfZW5zdXJlX3Jlc29sdmVkKChob3N0LCBwb3J0KSwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9ZmxhZ3MsIGxvb3A9c2VsZikKICAgICAgICAgICAgIGZzID0gW2YxXQogICAgICAgICAgICAgaWYgbG9jYWxfYWRkciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBmMiA9IHNlbGYuZ2V0YWRkcmluZm8oCi0gICAgICAgICAgICAgICAgICAgICpsb2NhbF9hZGRyLCBmYW1pbHk9ZmFtaWx5LAotICAgICAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgICAgIGYyID0gX2Vuc3VyZV9yZXNvbHZlZChsb2NhbF9hZGRyLCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPWZsYWdzLCBsb29wPXNlbGYpCiAgICAgICAgICAgICAgICAgZnMuYXBwZW5kKGYyKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmMiA9IE5vbmUKQEAgLTY5OCw4ICs3MDcsNiBAQAogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAnaG9zdCBhbmQgcG9ydCB3YXMgbm90IHNwZWNpZmllZCBhbmQgbm8gc29jayBzcGVjaWZpZWQnKQogCi0gICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCi0KICAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gc2VsZi5fY3JlYXRlX2Nvbm5lY3Rpb25fdHJhbnNwb3J0KAogICAgICAgICAgICAgc29jaywgcHJvdG9jb2xfZmFjdG9yeSwgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgpAQCAtNzEyLDE0ICs3MTksMTcgQEAKIAogICAgIEBjb3JvdXRpbmUKICAgICBkZWYgX2NyZWF0ZV9jb25uZWN0aW9uX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbF9mYWN0b3J5LCBzc2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUsIHNlcnZlcl9zaWRlPUZhbHNlKToKKworICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorCiAgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCi0gICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgd2FpdGVyID0gc2VsZi5jcmVhdGVfZnV0dXJlKCkKICAgICAgICAgaWYgc3NsOgogICAgICAgICAgICAgc3NsY29udGV4dCA9IE5vbmUgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpIGVsc2Ugc3NsCiAgICAgICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3NzbF90cmFuc3BvcnQoCiAgICAgICAgICAgICAgICAgc29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKLSAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1zZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzb2NrLCBwcm90b2NvbCwgd2FpdGVyKQogCkBAIC03NjcsOSArNzc3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGFkZHIsIHR1cGxlKSBhbmQgbGVuKGFkZHIpID09IDIsICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMi10dXBsZSBpcyBleHBlY3RlZCcpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZm9zID0geWllbGQgZnJvbSBzZWxmLmdldGFkZHJpbmZvKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZGRyLCBmYW1pbHk9ZmFtaWx5LCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvPXByb3RvLCBmbGFncz1mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9zID0geWllbGQgZnJvbSBfZW5zdXJlX3Jlc29sdmVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsIGZhbWlseT1mYW1pbHksIHR5cGU9c29ja2V0LlNPQ0tfREdSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzLCBsb29wPXNlbGYpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5mb3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKIApAQCAtODM0LDcgKzg0NCw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQogCiAgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCi0gICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgd2FpdGVyID0gc2VsZi5jcmVhdGVfZnV0dXJlKCkKICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoCiAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgcl9hZGRyLCB3YWl0ZXIpCiAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgpAQCAtODU3LDkgKzg2Nyw5IEBACiAKICAgICBAY29yb3V0aW5lCiAgICAgZGVmIF9jcmVhdGVfc2VydmVyX2dldGFkZHJpbmZvKHNlbGYsIGhvc3QsIHBvcnQsIGZhbWlseSwgZmxhZ3MpOgotICAgICAgICBpbmZvcyA9IHlpZWxkIGZyb20gc2VsZi5nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICBpbmZvcyA9IHlpZWxkIGZyb20gX2Vuc3VyZV9yZXNvbHZlZCgoaG9zdCwgcG9ydCksIGZhbWlseT1mYW1pbHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9ZmxhZ3MsIGxvb3A9c2VsZikKICAgICAgICAgaWYgbm90IGluZm9zOgogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oeyFyfSkgcmV0dXJuZWQgZW1wdHkgbGlzdCcuZm9ybWF0KGhvc3QpKQogICAgICAgICByZXR1cm4gaW5mb3MKQEAgLTg4MCw3ICs4OTAsMTAgQEAKICAgICAgICAgdG8gaG9zdCBhbmQgcG9ydC4KIAogICAgICAgICBUaGUgaG9zdCBwYXJhbWV0ZXIgY2FuIGFsc28gYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGFuZCBpbiB0aGF0IGNhc2UKLSAgICAgICAgdGhlIFRDUCBzZXJ2ZXIgaXMgYm91bmQgdG8gYWxsIGhvc3RzIG9mIHRoZSBzZXF1ZW5jZS4KKyAgICAgICAgdGhlIFRDUCBzZXJ2ZXIgaXMgYm91bmQgdG8gYWxsIGhvc3RzIG9mIHRoZSBzZXF1ZW5jZS4gSWYgYSBob3N0CisgICAgICAgIGFwcGVhcnMgbXVsdGlwbGUgdGltZXMgKHBvc3NpYmx5IGluZGlyZWN0bHkgZS5nLiB3aGVuIGhvc3RuYW1lcworICAgICAgICByZXNvbHZlIHRvIHRoZSBzYW1lIElQIGFkZHJlc3MpLCB0aGUgc2VydmVyIGlzIG9ubHkgYm91bmQgb25jZSB0byB0aGF0CisgICAgICAgIGhvc3QuCiAKICAgICAgICAgUmV0dXJuIGEgU2VydmVyIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHRoZSBzZXJ2aWNlLgogCkBAIC05MDksNyArOTIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9ZmxhZ3MpCiAgICAgICAgICAgICAgICAgICBmb3IgaG9zdCBpbiBob3N0c10KICAgICAgICAgICAgIGluZm9zID0geWllbGQgZnJvbSB0YXNrcy5nYXRoZXIoKmZzLCBsb29wPXNlbGYpCi0gICAgICAgICAgICBpbmZvcyA9IGl0ZXJ0b29scy5jaGFpbi5mcm9tX2l0ZXJhYmxlKGluZm9zKQorICAgICAgICAgICAgaW5mb3MgPSBzZXQoaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGUoaW5mb3MpKQogCiAgICAgICAgICAgICBjb21wbGV0ZWQgPSBGYWxzZQogICAgICAgICAgICAgdHJ5OgpAQCAtOTY4LDkgKzk4MSwyOCBAQAogICAgICAgICByZXR1cm4gc2VydmVyCiAKICAgICBAY29yb3V0aW5lCisgICAgZGVmIGNvbm5lY3RfYWNjZXB0ZWRfc29ja2V0KHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssICosIHNzbD1Ob25lKToKKyAgICAgICAgIiIiSGFuZGxlIGFuIGFjY2VwdGVkIGNvbm5lY3Rpb24uCisKKyAgICAgICAgVGhpcyBpcyB1c2VkIGJ5IHNlcnZlcnMgdGhhdCBhY2NlcHQgY29ubmVjdGlvbnMgb3V0c2lkZSBvZgorICAgICAgICBhc3luY2lvIGJ1dCB0aGF0IHVzZSBhc3luY2lvIHRvIGhhbmRsZSBjb25uZWN0aW9ucy4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZS4gIFdoZW4gY29tcGxldGVkLCB0aGUgY29yb3V0aW5lCisgICAgICAgIHJldHVybnMgYSAodHJhbnNwb3J0LCBwcm90b2NvbCkgcGFpci4KKyAgICAgICAgIiIiCisgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uX3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHNvY2ssIHByb3RvY29sX2ZhY3RvcnksIHNzbCwgJycsIHNlcnZlcl9zaWRlPVRydWUpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgIyBHZXQgdGhlIHNvY2tldCBmcm9tIHRoZSB0cmFuc3BvcnQgYmVjYXVzZSBTU0wgdHJhbnNwb3J0IGNsb3NlcworICAgICAgICAgICAgIyB0aGUgb2xkIHNvY2tldCBhbmQgY3JlYXRlcyBhIG5ldyBTU0wgc29ja2V0CisgICAgICAgICAgICBzb2NrID0gdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrZXQnKQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBoYW5kbGVkOiAoJXIsICVyKSIsIHNvY2ssIHRyYW5zcG9ydCwgcHJvdG9jb2wpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAY29yb3V0aW5lCiAgICAgZGVmIGNvbm5lY3RfcmVhZF9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgogICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQotICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHdhaXRlciA9IHNlbGYuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChwaXBlLCBwcm90b2NvbCwgd2FpdGVyKQogCiAgICAgICAgIHRyeToKQEAgLTk4Nyw3ICsxMDE5LDcgQEAKICAgICBAY29yb3V0aW5lCiAgICAgZGVmIGNvbm5lY3Rfd3JpdGVfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKLSAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB3YWl0ZXIgPSBzZWxmLmNyZWF0ZV9mdXR1cmUoKQogICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHBpcGUsIHByb3RvY29sLCB3YWl0ZXIpCiAKICAgICAgICAgdHJ5OgpAQCAtMTA2OSw2ICsxMTAxLDExIEBACiAgICAgICAgICAgICBsb2dnZXIuaW5mbygnJXM6ICVyJyAlIChkZWJ1Z19sb2csIHRyYW5zcG9ydCkpCiAgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCiAKKyAgICBkZWYgZ2V0X2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gZXhjZXB0aW9uIGhhbmRsZXIsIG9yIE5vbmUgaWYgdGhlIGRlZmF1bHQgb25lIGlzIGluIHVzZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb25faGFuZGxlcgorCiAgICAgZGVmIHNldF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBoYW5kbGVyKToKICAgICAgICAgIiIiU2V0IGhhbmRsZXIgYXMgdGhlIG5ldyBldmVudCBsb29wIGV4Y2VwdGlvbiBoYW5kbGVyLgogCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkgYi9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkKaW5kZXggNzM0MjVkOS4uOGZjMjUzYyAxMDA2NDQKLS0tIGEvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi9hc3luY2lvL2Jhc2Vfc3VicHJvY2Vzcy5weQpAQCAtMjEwLDYgKzIxMCwxMCBAQAogICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVyIGV4aXRlZCB3aXRoIHJldHVybiBjb2RlICVyJywKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHJldHVybmNvZGUpCiAgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSByZXR1cm5jb2RlCisgICAgICAgIGlmIHNlbGYuX3Byb2MucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgIyBhc3luY2lvIHVzZXMgYSBjaGlsZCB3YXRjaGVyOiBjb3B5IHRoZSBzdGF0dXMgaW50byB0aGUgUG9wZW4KKyAgICAgICAgICAgICMgb2JqZWN0LiBPbiBQeXRob24gMy42LCBpdCBpcyByZXF1aXJlZCB0byBhdm9pZCBhIFJlc291cmNlV2FybmluZy4KKyAgICAgICAgICAgIHNlbGYuX3Byb2MucmV0dXJuY29kZSA9IHJldHVybmNvZGUKICAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5wcm9jZXNzX2V4aXRlZCkKICAgICAgICAgc2VsZi5fdHJ5X2ZpbmlzaCgpCiAKQEAgLTIyNyw3ICsyMzEsNyBAQAogICAgICAgICBpZiBzZWxmLl9yZXR1cm5jb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybmNvZGUKIAotICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2xvb3AuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgIHNlbGYuX2V4aXRfd2FpdGVycy5hcHBlbmQod2FpdGVyKQogICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gd2FpdGVyKQogCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9jb21wYXQucHkgYi9MaWIvYXN5bmNpby9jb21wYXQucHkKaW5kZXggNjYwYjdlNy4uNDc5MGJiNCAxMDA2NDQKLS0tIGEvTGliL2FzeW5jaW8vY29tcGF0LnB5CisrKyBiL0xpYi9hc3luY2lvL2NvbXBhdC5weQpAQCAtNCw2ICs0LDcgQEAKIAogUFkzNCA9IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDQpCiBQWTM1ID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNSkKK1BZMzUyID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNSwgMikKIAogCiBkZWYgZmxhdHRlbl9saXN0X2J5dGVzKGxpc3Rfb2ZfZGF0YSk6CmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9jb3JvdXRpbmVzLnB5IGIvTGliL2FzeW5jaW8vY29yb3V0aW5lcy5weQppbmRleCAyN2FiNDJhLi43MWJjNmZiIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNpby9jb3JvdXRpbmVzLnB5CisrKyBiL0xpYi9hc3luY2lvL2Nvcm91dGluZXMucHkKQEAgLTIwNCw3ICsyMDQsOCBAQAogICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCiAgICAgICAgIGRlZiBjb3JvKCphcmdzLCAqKmt3KToKICAgICAgICAgICAgIHJlcyA9IGZ1bmMoKmFyZ3MsICoqa3cpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlcywgZnV0dXJlcy5GdXR1cmUpIG9yIGluc3BlY3QuaXNnZW5lcmF0b3IocmVzKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzLCBmdXR1cmVzLkZ1dHVyZSkgb3IgaW5zcGVjdC5pc2dlbmVyYXRvcihyZXMpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShyZXMsIENvcm9XcmFwcGVyKToKICAgICAgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHJlcwogICAgICAgICAgICAgZWxpZiBfQXdhaXRhYmxlQUJDIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICMgSWYgJ2Z1bmMnIHJldHVybnMgYW4gQXdhaXRhYmxlIChuZXcgaW4gMy41KSB3ZQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vZXZlbnRzLnB5CmluZGV4IDE3NmE4NDYuLmM0OGM1YmUgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY2lvL2V2ZW50cy5weQorKysgYi9MaWIvYXN5bmNpby9ldmVudHMucHkKQEAgLTI2Niw2ICsyNjYsOSBAQAogICAgIGRlZiB0aW1lKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKKyAgICBkZWYgY3JlYXRlX2Z1dHVyZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCiAgICAgIyBNZXRob2Qgc2NoZWR1bGluZyBhIGNvcm91dGluZSBvYmplY3Q6IGNyZWF0ZSBhIHRhc2suCiAKICAgICBkZWYgY3JlYXRlX3Rhc2soc2VsZiwgY29ybyk6CkBAIC00ODQsNiArNDg3LDkgQEAKIAogICAgICMgRXJyb3IgaGFuZGxlcnMuCiAKKyAgICBkZWYgZ2V0X2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKICAgICBkZWYgc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYsIGhhbmRsZXIpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Z1dHVyZXMucHkgYi9MaWIvYXN5bmNpby9mdXR1cmVzLnB5CmluZGV4IDRkY2I2NTQuLjFmZWJhNGQgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY2lvL2Z1dHVyZXMucHkKKysrIGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CiAgICAgICAgICIiIkluaXRpYWxpemUgdGhlIGZ1dHVyZS4KIAotICAgICAgICBUaGUgb3B0aW9uYWwgZXZlbnRfbG9vcCBhcmd1bWVudCBhbGxvd3MgdG8gZXhwbGljaXRseSBzZXQgdGhlIGV2ZW50CisgICAgICAgIFRoZSBvcHRpb25hbCBldmVudF9sb29wIGFyZ3VtZW50IGFsbG93cyBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGV2ZW50CiAgICAgICAgIGxvb3Agb2JqZWN0IHVzZWQgYnkgdGhlIGZ1dHVyZS4gSWYgaXQncyBub3QgcHJvdmlkZWQsIHRoZSBmdXR1cmUgdXNlcwogICAgICAgICB0aGUgZGVmYXVsdCBldmVudCBsb29wLgogICAgICAgICAiIiIKQEAgLTM0MSw2ICszNDEsOSBAQAogICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ3t9OiB7IXJ9Jy5mb3JtYXQoc2VsZi5fc3RhdGUsIHNlbGYpKQogICAgICAgICBpZiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgdHlwZSk6CiAgICAgICAgICAgICBleGNlcHRpb24gPSBleGNlcHRpb24oKQorICAgICAgICBpZiB0eXBlKGV4Y2VwdGlvbikgaXMgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiU3RvcEl0ZXJhdGlvbiBpbnRlcmFjdHMgYmFkbHkgd2l0aCBnZW5lcmF0b3JzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIGNhbm5vdCBiZSByYWlzZWQgaW50byBhIEZ1dHVyZSIpCiAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbgogICAgICAgICBzZWxmLl9zdGF0ZSA9IF9GSU5JU0hFRAogICAgICAgICBzZWxmLl9zY2hlZHVsZV9jYWxsYmFja3MoKQpAQCAtNDQ4LDYgKzQ1MSw4IEBACiAgICAgICAgIHJldHVybiBmdXR1cmUKICAgICBhc3NlcnQgaXNpbnN0YW5jZShmdXR1cmUsIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUpLCBcCiAgICAgICAgICdjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlIGlzIGV4cGVjdGVkLCBnb3QgeyFyfScuZm9ybWF0KGZ1dHVyZSkKLSAgICBuZXdfZnV0dXJlID0gRnV0dXJlKGxvb3A9bG9vcCkKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIG5ld19mdXR1cmUgPSBsb29wLmNyZWF0ZV9mdXR1cmUoKQogICAgIF9jaGFpbl9mdXR1cmUoZnV0dXJlLCBuZXdfZnV0dXJlKQogICAgIHJldHVybiBuZXdfZnV0dXJlCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9sb2Nrcy5weSBiL0xpYi9hc3luY2lvL2xvY2tzLnB5CmluZGV4IDM0ZjZiYzEuLjc0MWFhZjIgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY2lvL2xvY2tzLnB5CisrKyBiL0xpYi9hc3luY2lvL2xvY2tzLnB5CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICBhY3F1aXJlKCkgaXMgYSBjb3JvdXRpbmUgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCAneWllbGQgZnJvbScuCiAKICAgICBMb2NrcyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gICcoeWllbGQgZnJvbSBsb2NrKScKLSAgICBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbi4KKyAgICBzaG91bGQgYmUgdXNlZCBhcyB0aGUgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCiAKICAgICBVc2FnZToKIApAQCAtMTcwLDcgKzE3MCw3IEBACiAgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgZnV0ID0gc2VsZi5fbG9vcC5jcmVhdGVfZnV0dXJlKCkKICAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dApAQCAtMjU4LDcgKzI1OCw3IEBACiAgICAgICAgIGlmIHNlbGYuX3ZhbHVlOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGZ1dCA9IHNlbGYuX2xvb3AuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKQEAgLTMyMCw3ICszMjAsNyBAQAogCiAgICAgICAgIHNlbGYucmVsZWFzZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIGZ1dCA9IHNlbGYuX2xvb3AuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKQEAgLTMyOSw3ICszMjksMTMgQEAKICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCiAKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgICAgICMgTXVzdCByZWFjcXVpcmUgbG9jayBldmVuIGlmIHdhaXQgaXMgY2FuY2VsbGVkCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBAY29yb3V0aW5lCiAgICAgZGVmIHdhaXRfZm9yKHNlbGYsIHByZWRpY2F0ZSk6CkBAIC00MzMsNyArNDM5LDcgQEAKICAgICAgICAgVHJ1ZS4KICAgICAgICAgIiIiCiAgICAgICAgIHdoaWxlIHNlbGYuX3ZhbHVlIDw9IDA6Ci0gICAgICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICBmdXQgPSBzZWxmLl9sb29wLmNyZWF0ZV9mdXR1cmUoKQogICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkKaW5kZXggMTRjMDY1OS4uM2FjMzE0YyAxMDA2NDQKLS0tIGEvTGliL2FzeW5jaW8vcHJvYWN0b3JfZXZlbnRzLnB5CisrKyBiL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weQpAQCAtOTAsNyArOTAsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogCiAgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMsIG1lc3NhZ2U9J0ZhdGFsIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0Jyk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcikpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGV4YywgYmFzZV9ldmVudHMuX0ZBVEFMX0VSUk9SX0lHTk9SRSk6CiAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6ICVzIiwgc2VsZiwgbWVzc2FnZSwgZXhjX2luZm89VHJ1ZSkKICAgICAgICAgZWxzZToKQEAgLTQ0MCwxNCArNDQwLDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLnNlbmQoc29jaywgZGF0YSkKIAogICAgIGRlZiBzb2NrX2Nvbm5lY3Qoc2VsZiwgc29jaywgYWRkcmVzcyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssIGFkZHJlc3MpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKLSAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGVycikKLSAgICAgICAgICAgIHJldHVybiBmdXQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5jb25uZWN0KHNvY2ssIGFkZHJlc3MpCisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5jb25uZWN0KHNvY2ssIGFkZHJlc3MpCiAKICAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CiAgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5hY2NlcHQoc29jaykKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3F1ZXVlcy5weSBiL0xpYi9hc3luY2lvL3F1ZXVlcy5weQppbmRleCBlM2ExZDVlLi5jNDUzZjAyIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNpby9xdWV1ZXMucHkKKysrIGIvTGliL2FzeW5jaW8vcXVldWVzLnB5CkBAIC0xMjgsNyArMTI4LDcgQEAKICAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuCiAgICAgICAgICIiIgogICAgICAgICB3aGlsZSBzZWxmLmZ1bGwoKToKLSAgICAgICAgICAgIHB1dHRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHB1dHRlciA9IHNlbGYuX2xvb3AuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgICAgICBzZWxmLl9wdXR0ZXJzLmFwcGVuZChwdXR0ZXIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBwdXR0ZXIKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZS4KICAgICAgICAgIiIiCiAgICAgICAgIHdoaWxlIHNlbGYuZW1wdHkoKToKLSAgICAgICAgICAgIGdldHRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIGdldHRlciA9IHNlbGYuX2xvb3AuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgICAgICBzZWxmLl9nZXR0ZXJzLmFwcGVuZChnZXR0ZXIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBnZXR0ZXIKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weQppbmRleCA1YjI2NjMxLi5lZDJiNGQ3IDEwMDY0NAotLS0gYS9MaWIvYXN5bmNpby9zZWxlY3Rvcl9ldmVudHMucHkKKysrIGIvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5CkBAIC0xOTYsNyArMTk2LDcgQEAKICAgICAgICAgdHJhbnNwb3J0ID0gTm9uZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQotICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgd2FpdGVyID0gc2VsZi5jcmVhdGVfZnV0dXJlKCkKICAgICAgICAgICAgIGlmIHNzbGNvbnRleHQ6CiAgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zc2xfdHJhbnNwb3J0KAogICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyPXdhaXRlciwKQEAgLTMxNCw3ICszMTQsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5fZGVidWcgYW5kIHNvY2suZ2V0dGltZW91dCgpICE9IDA6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0aGUgc29ja2V0IG11c3QgYmUgbm9uLWJsb2NraW5nIikKLSAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBmdXQgPSBzZWxmLmNyZWF0ZV9mdXR1cmUoKQogICAgICAgICBzZWxmLl9zb2NrX3JlY3YoZnV0LCBGYWxzZSwgc29jaywgbikKICAgICAgICAgcmV0dXJuIGZ1dAogCkBAIC0zNTIsNyArMzUyLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuX2RlYnVnIGFuZCBzb2NrLmdldHRpbWVvdXQoKSAhPSAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGhlIHNvY2tldCBtdXN0IGJlIG5vbi1ibG9ja2luZyIpCi0gICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgZnV0ID0gc2VsZi5jcmVhdGVfZnV0dXJlKCkKICAgICAgICAgaWYgZGF0YToKICAgICAgICAgICAgIHNlbGYuX3NvY2tfc2VuZGFsbChmdXQsIEZhbHNlLCBzb2NrLCBkYXRhKQogICAgICAgICBlbHNlOgpAQCAtMzg1LDI0ICszODUsMjkgQEAKICAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgogICAgICAgICAiIiJDb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldCBhdCBhZGRyZXNzLgogCi0gICAgICAgIFRoZSBhZGRyZXNzIG11c3QgYmUgYWxyZWFkeSByZXNvbHZlZCB0byBhdm9pZCB0aGUgdHJhcCBvZiBoYW5naW5nIHRoZQotICAgICAgICBlbnRpcmUgZXZlbnQgbG9vcCB3aGVuIHRoZSBhZGRyZXNzIHJlcXVpcmVzIGRvaW5nIGEgRE5TIGxvb2t1cC4gRm9yCi0gICAgICAgIGV4YW1wbGUsIGl0IG11c3QgYmUgYW4gSVAgYWRkcmVzcywgbm90IGFuIGhvc3RuYW1lLCBmb3IgQUZfSU5FVCBhbmQKLSAgICAgICAgQUZfSU5FVDYgYWRkcmVzcyBmYW1pbGllcy4gVXNlIGdldGFkZHJpbmZvKCkgdG8gcmVzb2x2ZSB0aGUgaG9zdG5hbWUKLSAgICAgICAgYXN5bmNocm9ub3VzbHkuCi0KICAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuCiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLl9kZWJ1ZyBhbmQgc29jay5nZXR0aW1lb3V0KCkgIT0gMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRoZSBzb2NrZXQgbXVzdCBiZSBub24tYmxvY2tpbmciKQotICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisKKyAgICAgICAgZnV0ID0gc2VsZi5jcmVhdGVfZnV0dXJlKCkKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJykgYW5kIHNvY2suZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgorICAgICAgICAgICAgc2VsZi5fc29ja19jb25uZWN0KGZ1dCwgc29jaywgYWRkcmVzcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc29sdmVkID0gYmFzZV9ldmVudHMuX2Vuc3VyZV9yZXNvbHZlZCgKKyAgICAgICAgICAgICAgICBhZGRyZXNzLCBmYW1pbHk9c29jay5mYW1pbHksIHByb3RvPXNvY2sucHJvdG8sIGxvb3A9c2VsZikKKyAgICAgICAgICAgIHJlc29sdmVkLmFkZF9kb25lX2NhbGxiYWNrKAorICAgICAgICAgICAgICAgIGxhbWJkYSByZXNvbHZlZDogc2VsZi5fb25fcmVzb2x2ZWQoZnV0LCBzb2NrLCByZXNvbHZlZCkpCisKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9vbl9yZXNvbHZlZChzZWxmLCBmdXQsIHNvY2ssIHJlc29sdmVkKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgYWRkcmVzcykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXJyKQorICAgICAgICAgICAgXywgXywgXywgXywgYWRkcmVzcyA9IHJlc29sdmVkLnJlc3VsdCgpWzBdCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fc29ja19jb25uZWN0KGZ1dCwgc29jaywgYWRkcmVzcykKLSAgICAgICAgcmV0dXJuIGZ1dAogCiAgICAgZGVmIF9zb2NrX2Nvbm5lY3Qoc2VsZiwgZnV0LCBzb2NrLCBhZGRyZXNzKToKICAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCkBAIC00NTMsNyArNDU4LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuX2RlYnVnIGFuZCBzb2NrLmdldHRpbWVvdXQoKSAhPSAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGhlIHNvY2tldCBtdXN0IGJlIG5vbi1ibG9ja2luZyIpCi0gICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgZnV0ID0gc2VsZi5jcmVhdGVfZnV0dXJlKCkKICAgICAgICAgc2VsZi5fc29ja19hY2NlcHQoZnV0LCBGYWxzZSwgc29jaykKICAgICAgICAgcmV0dXJuIGZ1dAogCkBAIC01NjUsNiArNTcwLDcgQEAKICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CiAgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCiAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKIAogICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQpAQCAtNTc4LDggKzU4NCw3IEBACiAKICAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4YywgbWVzc2FnZT0nRmF0YWwgZXJyb3Igb24gdHJhbnNwb3J0Jyk6CiAgICAgICAgICMgU2hvdWxkIGJlIGNhbGxlZCBmcm9tIGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXNldEVycm9yLCBDb25uZWN0aW9uQWJvcnRlZEVycm9yKSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCBiYXNlX2V2ZW50cy5fRkFUQUxfRVJST1JfSUdOT1JFKToKICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcjogJXMiLCBzZWxmLCBtZXNzYWdlLCBleGNfaW5mbz1UcnVlKQogICAgICAgICBlbHNlOgpAQCAtNjU5LDYgKzY2NCw4IEBACiAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlc3VtZXMgcmVhZGluZyIsIHNlbGYpCiAKICAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fc29jay5yZWN2KHNlbGYubWF4X3NpemUpCiAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKQEAgLTY4Miw4ICs2ODksOCBAQAogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGEgYnl0ZXMtbGlrZSBvYmplY3QsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90ICVyJyAlIHR5cGUoZGF0YSkuX19uYW1lX18pCiAgICAgICAgIGlmIHNlbGYuX2VvZjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IGNhbGwgd3JpdGUoKSBhZnRlciB3cml0ZV9lb2YoKScpCiAgICAgICAgIGlmIG5vdCBkYXRhOgpAQCAtNzE4LDYgKzcyNSw4IEBACiAgICAgZGVmIF93cml0ZV9yZWFkeShzZWxmKToKICAgICAgICAgYXNzZXJ0IHNlbGYuX2J1ZmZlciwgJ0RhdGEgc2hvdWxkIG5vdCBiZSBlbXB0eScKIAorICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChzZWxmLl9idWZmZXIpCiAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKQEAgLTg4OCw2ICs4OTcsOCBAQAogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciByZXN1bWVzIHJlYWRpbmciLCBzZWxmKQogCiAgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi5fd3JpdGVfd2FudHNfcmVhZDoKICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQgPSBGYWxzZQogICAgICAgICAgICAgc2VsZi5fd3JpdGVfcmVhZHkoKQpAQCAtOTIwLDYgKzkzMSw4IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogCiAgICAgZGVmIF93cml0ZV9yZWFkeShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYuX3JlYWRfd2FudHNfd3JpdGU6CiAgICAgICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKICAgICAgICAgICAgIHNlbGYuX3JlYWRfcmVhZHkoKQpAQCAtOTU0LDggKzk2Nyw4IEBACiAKICAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYSBieXRlcy1saWtlIG9iamVjdCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3QgJXInICUgdHlwZShkYXRhKS5fX25hbWVfXykKICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICByZXR1cm4KIApAQCAtOTk3LDYgKzEwMTAsOCBAQAogICAgICAgICByZXR1cm4gc3VtKGxlbihkYXRhKSBmb3IgZGF0YSwgXyBpbiBzZWxmLl9idWZmZXIpCiAKICAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkYXRhLCBhZGRyID0gc2VsZi5fc29jay5yZWN2ZnJvbShzZWxmLm1heF9zaXplKQogICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CkBAIC0xMDEwLDggKzEwMjUsOCBAQAogCiAgICAgZGVmIHNlbmR0byhzZWxmLCBkYXRhLCBhZGRyPU5vbmUpOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGEgYnl0ZXMtbGlrZSBvYmplY3QsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90ICVyJyAlIHR5cGUoZGF0YSkuX19uYW1lX18pCiAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3NzbHByb3RvLnB5IGIvTGliL2FzeW5jaW8vc3NscHJvdG8ucHkKaW5kZXggZGRlOTgwYi4uMzNkNWRlMiAxMDA2NDQKLS0tIGEvTGliL2FzeW5jaW8vc3NscHJvdG8ucHkKKysrIGIvTGliL2FzeW5jaW8vc3NscHJvdG8ucHkKQEAgLTUsNiArNSw3IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKICAgICBzc2wgPSBOb25lCiAKK2Zyb20gLiBpbXBvcnQgYmFzZV9ldmVudHMKIGZyb20gLiBpbXBvcnQgY29tcGF0CiBmcm9tIC4gaW1wb3J0IHByb3RvY29scwogZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCkBAIC02MDMsNyArNjA0LDcgQEAKICAgICAgICAgc2VsZi5fd2FrZXVwX3dhaXRlcigpCiAgICAgICAgIHNlbGYuX3Nlc3Npb25fZXN0YWJsaXNoZWQgPSBUcnVlCiAgICAgICAgICMgSW4gY2FzZSB0cmFuc3BvcnQud3JpdGUoKSB3YXMgYWxyZWFkeSBjYWxsZWQuIERvbid0IGNhbGwKLSAgICAgICAgIyBpbW1lZGlhdGx5IF9wcm9jZXNzX3dyaXRlX2JhY2tsb2coKSwgYnV0IHNjaGVkdWxlIGl0OgorICAgICAgICAjIGltbWVkaWF0ZWx5IF9wcm9jZXNzX3dyaXRlX2JhY2tsb2coKSwgYnV0IHNjaGVkdWxlIGl0OgogICAgICAgICAjIF9vbl9oYW5kc2hha2VfY29tcGxldGUoKSBjYW4gYmUgY2FsbGVkIGluZGlyZWN0bHkgZnJvbQogICAgICAgICAjIF9wcm9jZXNzX3dyaXRlX2JhY2tsb2coKSwgYW5kIF9wcm9jZXNzX3dyaXRlX2JhY2tsb2coKSBpcyBub3QKICAgICAgICAgIyByZWVudHJhbnQuCkBAIC02NTUsNyArNjU2LDcgQEAKIAogICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjLCBtZXNzYWdlPSdGYXRhbCBlcnJvciBvbiB0cmFuc3BvcnQnKToKICAgICAgICAgIyBTaG91bGQgYmUgY2FsbGVkIGZyb20gZXhjZXB0aW9uIGhhbmRsZXIgb25seS4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCBiYXNlX2V2ZW50cy5fRkFUQUxfRVJST1JfSUdOT1JFKToKICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcjogJXMiLCBzZWxmLCBtZXNzYWdlLCBleGNfaW5mbz1UcnVlKQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vc3RyZWFtcy5weSBiL0xpYi9hc3luY2lvL3N0cmVhbXMucHkKaW5kZXggMDAwOGQ1MS4uYzg4YTg3YyAxMDA2NDQKLS0tIGEvTGliL2FzeW5jaW8vc3RyZWFtcy5weQorKysgYi9MaWIvYXN5bmNpby9zdHJlYW1zLnB5CkBAIC0xNCwxMyArMTQsMTIgQEAKIGZyb20gLiBpbXBvcnQgY29yb3V0aW5lcwogZnJvbSAuIGltcG9ydCBjb21wYXQKIGZyb20gLiBpbXBvcnQgZXZlbnRzCi1mcm9tIC4gaW1wb3J0IGZ1dHVyZXMKIGZyb20gLiBpbXBvcnQgcHJvdG9jb2xzCiBmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKIGZyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCiAKIAotX0RFRkFVTFRfTElNSVQgPSAyKioxNgorX0RFRkFVTFRfTElNSVQgPSAyICoqIDE2CiAKIAogY2xhc3MgSW5jb21wbGV0ZVJlYWRFcnJvcihFT0ZFcnJvcik6CkBAIC0zOCwxNSArMzcsMTMgQEAKIAogCiBjbGFzcyBMaW1pdE92ZXJydW5FcnJvcihFeGNlcHRpb24pOgotICAgICIiIlJlYWNoZWQgYnVmZmVyIGxpbWl0IHdoaWxlIGxvb2tpbmcgZm9yIHRoZSBzZXBhcmF0b3IuCisgICAgIiIiUmVhY2hlZCB0aGUgYnVmZmVyIGxpbWl0IHdoaWxlIGxvb2tpbmcgZm9yIGEgc2VwYXJhdG9yLgogCiAgICAgQXR0cmlidXRlczoKLSAgICAtIG1lc3NhZ2U6IGVycm9yIG1lc3NhZ2UKLSAgICAtIGNvbnN1bWVkOiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdGhhdCBzaG91bGQgYmUgY29uc3VtZWQKKyAgICAtIGNvbnN1bWVkOiB0b3RhbCBudW1iZXIgb2YgdG8gYmUgY29uc3VtZWQgYnl0ZXMuCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIGNvbnN1bWVkKToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtZXNzYWdlKQotICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCiAgICAgICAgIHNlbGYuY29uc3VtZWQgPSBjb25zdW1lZAogCiAKQEAgLTEzMiw3ICsxMjksNiBAQAogICAgICAgICB3cml0ZXIgPSBTdHJlYW1Xcml0ZXIodHJhbnNwb3J0LCBwcm90b2NvbCwgcmVhZGVyLCBsb29wKQogICAgICAgICByZXR1cm4gcmVhZGVyLCB3cml0ZXIKIAotCiAgICAgQGNvcm91dGluZQogICAgIGRlZiBzdGFydF91bml4X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBwYXRoPU5vbmUsICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9X0RFRkFVTFRfTElNSVQsICoqa3dkcyk6CkBAIC0yMTAsNyArMjA2LDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB3YWl0ZXIgPSBzZWxmLl9kcmFpbl93YWl0ZXIKICAgICAgICAgYXNzZXJ0IHdhaXRlciBpcyBOb25lIG9yIHdhaXRlci5jYW5jZWxsZWQoKQotICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2xvb3AuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IHdhaXRlcgogICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgogCkBAIC0yMjksOSArMjI1LDExIEBACiAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIgPSBzdHJlYW1fcmVhZGVyCiAgICAgICAgIHNlbGYuX3N0cmVhbV93cml0ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2IgPSBjbGllbnRfY29ubmVjdGVkX2NiCisgICAgICAgIHNlbGYuX292ZXJfc3NsID0gRmFsc2UKIAogICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5zZXRfdHJhbnNwb3J0KHRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5fb3Zlcl9zc2wgPSB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NzbGNvbnRleHQnKSBpcyBub3QgTm9uZQogICAgICAgICBpZiBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlciA9IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIsCkBAIC0yNDIsMTcgKzI0MCwyNSBAQAogICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY3JlYXRlX3Rhc2socmVzKQogCiAgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgotICAgICAgICBpZiBleGMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuZmVlZF9lb2YoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgaWYgc2VsZi5fc3RyZWFtX3JlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuZmVlZF9lb2YoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLnNldF9leGNlcHRpb24oZXhjKQogICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3N0cmVhbV93cml0ZXIgPSBOb25lCiAKICAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2RhdGEoZGF0YSkKIAogICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CiAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuZmVlZF9lb2YoKQorICAgICAgICBpZiBzZWxmLl9vdmVyX3NzbDoKKyAgICAgICAgICAgICMgUHJldmVudCBhIHdhcm5pbmcgaW4gU1NMUHJvdG9jb2wuZW9mX3JlY2VpdmVkOgorICAgICAgICAgICAgIyAicmV0dXJuaW5nIHRydWUgZnJvbSBlb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgIyBoYXMgbm8gZWZmZWN0IHdoZW4gdXNpbmcgc3NsIgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVlCiAKIApAQCAtNDEzLDggKzQxOSw4IEBACiAgICAgICAgIHNlbGYuX3dha2V1cF93YWl0ZXIoKQogCiAgICAgICAgIGlmIChzZWxmLl90cmFuc3BvcnQgaXMgbm90IE5vbmUgYW5kCi0gICAgICAgICAgICBub3Qgc2VsZi5fcGF1c2VkIGFuZAotICAgICAgICAgICAgbGVuKHNlbGYuX2J1ZmZlcikgPiAyKnNlbGYuX2xpbWl0KToKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5fcGF1c2VkIGFuZAorICAgICAgICAgICAgICAgIGxlbihzZWxmLl9idWZmZXIpID4gMiAqIHNlbGYuX2xpbWl0KToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucGF1c2VfcmVhZGluZygpCiAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKQEAgLTQ0Niw3ICs0NTIsNyBAQAogICAgICAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5yZXN1bWVfcmVhZGluZygpCiAKLSAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXIgPSBzZWxmLl9sb29wLmNyZWF0ZV9mdXR1cmUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3dhaXRlcgogICAgICAgICBmaW5hbGx5OgpAQCAtNDg2LDI0ICs0OTIsMjQgQEAKIAogICAgIEBjb3JvdXRpbmUKICAgICBkZWYgcmVhZHVudGlsKHNlbGYsIHNlcGFyYXRvcj1iJ1xuJyk6Ci0gICAgICAgICIiIlJlYWQgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSBzdHJlYW0gdW50aWwgYHNlcGFyYXRvcmAgaXMgZm91bmQuCisgICAgICAgICIiIlJlYWQgZGF0YSBmcm9tIHRoZSBzdHJlYW0gdW50aWwgYGBzZXBhcmF0b3JgYCBpcyBmb3VuZC4KIAotICAgICAgICBPbiBzdWNjZXNzLCBjaHVuayBhbmQgaXRzIHNlcGFyYXRvciB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpbnRlcm5hbCBidWZmZXIKLSAgICAgICAgKGkuZS4gY29uc3VtZWQpLiBSZXR1cm5lZCBjaHVuayB3aWxsIGluY2x1ZGUgc2VwYXJhdG9yIGF0IHRoZSBlbmQuCisgICAgICAgIE9uIHN1Y2Nlc3MsIHRoZSBkYXRhIGFuZCBzZXBhcmF0b3Igd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlCisgICAgICAgIGludGVybmFsIGJ1ZmZlciAoY29uc3VtZWQpLiBSZXR1cm5lZCBkYXRhIHdpbGwgaW5jbHVkZSB0aGUKKyAgICAgICAgc2VwYXJhdG9yIGF0IHRoZSBlbmQuCiAKLSAgICAgICAgQ29uZmlndXJlZCBzdHJlYW0gbGltaXQgaXMgdXNlZCB0byBjaGVjayByZXN1bHQuIExpbWl0IG1lYW5zIG1heGltYWwKLSAgICAgICAgbGVuZ3RoIG9mIGNodW5rIHRoYXQgY2FuIGJlIHJldHVybmVkLCBub3QgY291bnRpbmcgdGhlIHNlcGFyYXRvci4KKyAgICAgICAgQ29uZmlndXJlZCBzdHJlYW0gbGltaXQgaXMgdXNlZCB0byBjaGVjayByZXN1bHQuIExpbWl0IHNldHMgdGhlCisgICAgICAgIG1heGltYWwgbGVuZ3RoIG9mIGRhdGEgdGhhdCBjYW4gYmUgcmV0dXJuZWQsIG5vdCBjb3VudGluZyB0aGUKKyAgICAgICAgc2VwYXJhdG9yLgogCi0gICAgICAgIElmIEVPRiBvY2N1cnMgYW5kIGNvbXBsZXRlIHNlcGFyYXRvciBzdGlsbCBub3QgZm91bmQsCi0gICAgICAgIEluY29tcGxldGVSZWFkRXJyb3IoPHBhcnRpYWwgZGF0YT4sIE5vbmUpIHdpbGwgYmUgcmFpc2VkIGFuZCBpbnRlcm5hbAotICAgICAgICBidWZmZXIgYmVjb21lcyBlbXB0eS4gVGhpcyBwYXJ0aWFsIGRhdGEgbWF5IGNvbnRhaW4gYSBwYXJ0aWFsIHNlcGFyYXRvci4KKyAgICAgICAgSWYgYW4gRU9GIG9jY3VycyBhbmQgdGhlIGNvbXBsZXRlIHNlcGFyYXRvciBpcyBzdGlsbCBub3QgZm91bmQsCisgICAgICAgIGFuIEluY29tcGxldGVSZWFkRXJyb3IgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLCBhbmQgdGhlIGludGVybmFsCisgICAgICAgIGJ1ZmZlciB3aWxsIGJlIHJlc2V0LiAgVGhlIEluY29tcGxldGVSZWFkRXJyb3IucGFydGlhbCBhdHRyaWJ1dGUKKyAgICAgICAgbWF5IGNvbnRhaW4gdGhlIHNlcGFyYXRvciBwYXJ0aWFsbHkuCiAKLSAgICAgICAgSWYgY2h1bmsgY2Fubm90IGJlIHJlYWQgZHVlIHRvIG92ZXJsaW1pdCwgTGltaXRPdmVycnVuRXJyb3Igd2lsbCBiZSByYWlzZWQKLSAgICAgICAgYW5kIGRhdGEgd2lsbCBiZSBsZWZ0IGluIGludGVybmFsIGJ1ZmZlciwgc28gaXQgY2FuIGJlIHJlYWQgYWdhaW4sIGluCi0gICAgICAgIHNvbWUgZGlmZmVyZW50IHdheS4KLQotICAgICAgICBJZiBzdHJlYW0gd2FzIHBhdXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzdW1lIGl0IGlmCi0gICAgICAgIG5lZWRlZC4KKyAgICAgICAgSWYgdGhlIGRhdGEgY2Fubm90IGJlIHJlYWQgYmVjYXVzZSBvZiBvdmVyIGxpbWl0LCBhCisgICAgICAgIExpbWl0T3ZlcnJ1bkVycm9yIGV4Y2VwdGlvbiAgd2lsbCBiZSByYWlzZWQsIGFuZCB0aGUgZGF0YQorICAgICAgICB3aWxsIGJlIGxlZnQgaW4gdGhlIGludGVybmFsIGJ1ZmZlciwgc28gaXQgY2FuIGJlIHJlYWQgYWdhaW4uCiAgICAgICAgICIiIgogICAgICAgICBzZXBsZW4gPSBsZW4oc2VwYXJhdG9yKQogICAgICAgICBpZiBzZXBsZW4gPT0gMDoKQEAgLTUyOSw4ICs1MzUsOCBAQAogICAgICAgICAjICAgcGVyZm9ybWFuY2UgcHJvYmxlbXMuIEV2ZW4gd2hlbiByZWFkaW5nIE1JTUUtZW5jb2RlZAogICAgICAgICAjICAgbWVzc2FnZXMgOikKIAotICAgICAgICAjIGBvZmZzZXRgIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgd2hlcmUKLSAgICAgICAgIyBpcyBubyBvY2N1cnJlbmNlIG9mIGBzZXBhcmF0b3JgLgorICAgICAgICAjIGBvZmZzZXRgIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIKKyAgICAgICAgIyB3aGVyZSB0aGVyZSBpcyBubyBvY2N1cnJlbmNlIG9mIGBzZXBhcmF0b3JgLgogICAgICAgICBvZmZzZXQgPSAwCiAKICAgICAgICAgIyBMb29wIHVudGlsIHdlIGZpbmQgYHNlcGFyYXRvcmAgaW4gdGhlIGJ1ZmZlciwgZXhjZWVkIHRoZSBidWZmZXIgc2l6ZSwKQEAgLTU0NCwxNCArNTUwLDE2IEBACiAgICAgICAgICAgICAgICAgaXNlcCA9IHNlbGYuX2J1ZmZlci5maW5kKHNlcGFyYXRvciwgb2Zmc2V0KQogCiAgICAgICAgICAgICAgICAgaWYgaXNlcCAhPSAtMToKLSAgICAgICAgICAgICAgICAgICAgIyBgc2VwYXJhdG9yYCBpcyBpbiB0aGUgYnVmZmVyLiBgaXNlcGAgd2lsbCBiZSB1c2VkIGxhdGVyIHRvCi0gICAgICAgICAgICAgICAgICAgICMgcmV0cmlldmUgdGhlIGRhdGEuCisgICAgICAgICAgICAgICAgICAgICMgYHNlcGFyYXRvcmAgaXMgaW4gdGhlIGJ1ZmZlci4gYGlzZXBgIHdpbGwgYmUgdXNlZCBsYXRlcgorICAgICAgICAgICAgICAgICAgICAjIHRvIHJldHJpZXZlIHRoZSBkYXRhLgogICAgICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICAgICAgIyBzZWUgdXBwZXIgY29tbWVudCBmb3IgZXhwbGFuYXRpb24uCiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYnVmbGVuICsgMSAtIHNlcGxlbgogICAgICAgICAgICAgICAgIGlmIG9mZnNldCA+IHNlbGYuX2xpbWl0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBMaW1pdE92ZXJydW5FcnJvcignU2VwYXJhdG9yIGlzIG5vdCBmb3VuZCwgYW5kIGNodW5rIGV4Y2VlZCB0aGUgbGltaXQnLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIExpbWl0T3ZlcnJ1bkVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1NlcGFyYXRvciBpcyBub3QgZm91bmQsIGFuZCBjaHVuayBleGNlZWQgdGhlIGxpbWl0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCkKIAogICAgICAgICAgICAgIyBDb21wbGV0ZSBtZXNzYWdlICh3aXRoIGZ1bGwgc2VwYXJhdG9yKSBtYXkgYmUgcHJlc2VudCBpbiBidWZmZXIKICAgICAgICAgICAgICMgZXZlbiB3aGVuIEVPRiBmbGFnIGlzIHNldC4gVGhpcyBtYXkgaGFwcGVuIHdoZW4gdGhlIGxhc3QgY2h1bmsKQEAgLTU2Niw3ICs1NzQsOCBAQAogICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0X2Zvcl9kYXRhKCdyZWFkdW50aWwnKQogCiAgICAgICAgIGlmIGlzZXAgPiBzZWxmLl9saW1pdDoKLSAgICAgICAgICAgIHJhaXNlIExpbWl0T3ZlcnJ1bkVycm9yKCdTZXBhcmF0b3IgaXMgZm91bmQsIGJ1dCBjaHVuayBpcyBsb25nZXIgdGhhbiBsaW1pdCcsIGlzZXApCisgICAgICAgICAgICByYWlzZSBMaW1pdE92ZXJydW5FcnJvcigKKyAgICAgICAgICAgICAgICAnU2VwYXJhdG9yIGlzIGZvdW5kLCBidXQgY2h1bmsgaXMgbG9uZ2VyIHRoYW4gbGltaXQnLCBpc2VwKQogCiAgICAgICAgIGNodW5rID0gc2VsZi5fYnVmZmVyWzppc2VwICsgc2VwbGVuXQogICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzppc2VwICsgc2VwbGVuXQpAQCAtNTg4LDcgKzU5Nyw4IEBACiAgICAgICAgIHJlY2VpdmVkIGJlZm9yZSBhbnkgYnl0ZSBpcyByZWFkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgZW1wdHkgYnl0ZQogICAgICAgICBvYmplY3QuCiAKLSAgICAgICAgUmV0dXJuZWQgdmFsdWUgaXMgbm90IGxpbWl0ZWQgd2l0aCBsaW1pdCwgY29uZmlndXJlZCBhdCBzdHJlYW0gY3JlYXRpb24uCisgICAgICAgIFJldHVybmVkIHZhbHVlIGlzIG5vdCBsaW1pdGVkIHdpdGggbGltaXQsIGNvbmZpZ3VyZWQgYXQgc3RyZWFtCisgICAgICAgIGNyZWF0aW9uLgogCiAgICAgICAgIElmIHN0cmVhbSB3YXMgcGF1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSByZXN1bWUgaXQgaWYKICAgICAgICAgbmVlZGVkLgpAQCAtNjI3LDEzICs2MzcsMTQgQEAKICAgICBkZWYgcmVhZGV4YWN0bHkoc2VsZiwgbik6CiAgICAgICAgICIiIlJlYWQgZXhhY3RseSBgbmAgYnl0ZXMuCiAKLSAgICAgICAgUmFpc2UgYW4gYEluY29tcGxldGVSZWFkRXJyb3JgIGlmIEVPRiBpcyByZWFjaGVkIGJlZm9yZSBgbmAgYnl0ZXMgY2FuIGJlCi0gICAgICAgIHJlYWQuIFRoZSBgSW5jb21wbGV0ZVJlYWRFcnJvci5wYXJ0aWFsYCBhdHRyaWJ1dGUgb2YgdGhlIGV4Y2VwdGlvbiB3aWxsCisgICAgICAgIFJhaXNlIGFuIEluY29tcGxldGVSZWFkRXJyb3IgaWYgRU9GIGlzIHJlYWNoZWQgYmVmb3JlIGBuYCBieXRlcyBjYW4gYmUKKyAgICAgICAgcmVhZC4gVGhlIEluY29tcGxldGVSZWFkRXJyb3IucGFydGlhbCBhdHRyaWJ1dGUgb2YgdGhlIGV4Y2VwdGlvbiB3aWxsCiAgICAgICAgIGNvbnRhaW4gdGhlIHBhcnRpYWwgcmVhZCBieXRlcy4KIAogICAgICAgICBpZiBuIGlzIHplcm8sIHJldHVybiBlbXB0eSBieXRlcyBvYmplY3QuCiAKLSAgICAgICAgUmV0dXJuZWQgdmFsdWUgaXMgbm90IGxpbWl0ZWQgd2l0aCBsaW1pdCwgY29uZmlndXJlZCBhdCBzdHJlYW0gY3JlYXRpb24uCisgICAgICAgIFJldHVybmVkIHZhbHVlIGlzIG5vdCBsaW1pdGVkIHdpdGggbGltaXQsIGNvbmZpZ3VyZWQgYXQgc3RyZWFtCisgICAgICAgIGNyZWF0aW9uLgogCiAgICAgICAgIElmIHN0cmVhbSB3YXMgcGF1c2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSByZXN1bWUgaXQgaWYKICAgICAgICAgbmVlZGVkLgpAQCAtNjc4LDMgKzY4OSw5IEBACiAgICAgICAgICAgICBpZiB2YWwgPT0gYicnOgogICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BBc3luY0l0ZXJhdGlvbgogICAgICAgICAgICAgcmV0dXJuIHZhbAorCisgICAgaWYgY29tcGF0LlBZMzUyOgorICAgICAgICAjIEluIFB5dGhvbiAzLjUuMiBhbmQgZ3JlYXRlciwgX19haXRlcl9fIHNob3VsZCByZXR1cm4KKyAgICAgICAgIyB0aGUgYXN5bmNocm9ub3VzIGl0ZXJhdG9yIGRpcmVjdGx5LgorICAgICAgICBkZWYgX19haXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3N1YnByb2Nlc3MucHkgYi9MaWIvYXN5bmNpby9zdWJwcm9jZXNzLnB5CmluZGV4IGVhZDQwMzkuLmIyZjUzMDQgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY2lvL3N1YnByb2Nlc3MucHkKKysrIGIvTGliL2FzeW5jaW8vc3VicHJvY2Vzcy5weQpAQCAtMTY2LDcgKzE2Niw3IEBACiAKICAgICBAY29yb3V0aW5lCiAgICAgZGVmIGNvbW11bmljYXRlKHNlbGYsIGlucHV0PU5vbmUpOgotICAgICAgICBpZiBpbnB1dDoKKyAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX2ZlZWRfc3RkaW4oaW5wdXQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX25vb3AoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGFza3MucHkgYi9MaWIvYXN5bmNpby90YXNrcy5weQppbmRleCBjMzdhYTQxLi4wY2NhOGUzIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNpby90YXNrcy5weQorKysgYi9MaWIvYXN5bmNpby90YXNrcy5weQpAQCAtNCw3ICs0LDYgQEAKICAgICAgICAgICAgJ0ZJUlNUX0NPTVBMRVRFRCcsICdGSVJTVF9FWENFUFRJT04nLCAnQUxMX0NPTVBMRVRFRCcsCiAgICAgICAgICAgICd3YWl0JywgJ3dhaXRfZm9yJywgJ2FzX2NvbXBsZXRlZCcsICdzbGVlcCcsICdhc3luYycsCiAgICAgICAgICAgICdnYXRoZXInLCAnc2hpZWxkJywgJ2Vuc3VyZV9mdXR1cmUnLCAncnVuX2Nvcm91dGluZV90aHJlYWRzYWZlJywKLSAgICAgICAgICAgJ3RpbWVvdXQnLAogICAgICAgICAgICBdCiAKIGltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMKQEAgLTM3Myw3ICszNzIsNyBAQAogICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dCkKIAotICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICB3YWl0ZXIgPSBsb29wLmNyZWF0ZV9mdXR1cmUoKQogICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyKQogICAgIGNiID0gZnVuY3Rvb2xzLnBhcnRpYWwoX3JlbGVhc2Vfd2FpdGVyLCB3YWl0ZXIpCiAKQEAgLTQwMSwxMiArNDAwLDEyIEBACiAKIEBjb3JvdXRpbmUKIGRlZiBfd2FpdChmcywgdGltZW91dCwgcmV0dXJuX3doZW4sIGxvb3ApOgotICAgICIiIkludGVybmFsIGhlbHBlciBmb3Igd2FpdCgpIGFuZCBfd2FpdF9mb3IoKS4KKyAgICAiIiJJbnRlcm5hbCBoZWxwZXIgZm9yIHdhaXQoKSBhbmQgd2FpdF9mb3IoKS4KIAogICAgIFRoZSBmcyBhcmd1bWVudCBtdXN0IGJlIGEgY29sbGVjdGlvbiBvZiBGdXR1cmVzLgogICAgICIiIgogICAgIGFzc2VydCBmcywgJ1NldCBvZiBGdXR1cmVzIGlzIGVtcHR5LicKLSAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgd2FpdGVyID0gbG9vcC5jcmVhdGVfZnV0dXJlKCkKICAgICB0aW1lb3V0X2hhbmRsZSA9IE5vbmUKICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgogICAgICAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfcmVsZWFzZV93YWl0ZXIsIHdhaXRlcikKQEAgLTUwNyw3ICs1MDYsOSBAQAogICAgICAgICB5aWVsZAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBmdXR1cmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICBmdXR1cmUgPSBsb29wLmNyZWF0ZV9mdXR1cmUoKQogICAgIGggPSBmdXR1cmUuX2xvb3AuY2FsbF9sYXRlcihkZWxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlcy5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUsIHJlc3VsdCkKQEAgLTYwNCw3ICs2MDUsOSBAQAogICAgIGJlIGNhbmNlbGxlZC4pCiAgICAgIiIiCiAgICAgaWYgbm90IGNvcm9zX29yX2Z1dHVyZXM6Ci0gICAgICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgb3V0ZXIgPSBsb29wLmNyZWF0ZV9mdXR1cmUoKQogICAgICAgICBvdXRlci5zZXRfcmVzdWx0KFtdKQogICAgICAgICByZXR1cm4gb3V0ZXIKIApAQCAtNjkyLDcgKzY5NSw3IEBACiAgICAgICAgICMgU2hvcnRjdXQuCiAgICAgICAgIHJldHVybiBpbm5lcgogICAgIGxvb3AgPSBpbm5lci5fbG9vcAotICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIG91dGVyID0gbG9vcC5jcmVhdGVfZnV0dXJlKCkKIAogICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpbm5lcik6CiAgICAgICAgIGlmIG91dGVyLmNhbmNlbGxlZCgpOgpAQCAtNzMzLDUzICs3MzYsMyBAQAogCiAgICAgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaykKICAgICByZXR1cm4gZnV0dXJlCi0KLQotZGVmIHRpbWVvdXQodGltZW91dCwgKiwgbG9vcD1Ob25lKToKLSAgICAiIiJBIGZhY3Rvcnkgd2hpY2ggcHJvZHVjZSBhIGNvbnRleHQgbWFuYWdlciB3aXRoIHRpbWVvdXQuCi0KLSAgICBVc2VmdWwgaW4gY2FzZXMgd2hlbiB5b3Ugd2FudCB0byBhcHBseSB0aW1lb3V0IGxvZ2ljIGFyb3VuZCBibG9jawotICAgIG9mIGNvZGUgb3IgaW4gY2FzZXMgd2hlbiBhc3luY2lvLndhaXRfZm9yIGlzIG5vdCBzdWl0YWJsZS4KLQotICAgIEZvciBleGFtcGxlOgotCi0gICAgPj4+IHdpdGggYXN5bmNpby50aW1lb3V0KDAuMDAxKToKLSAgICAuLi4gICAgIHlpZWxkIGZyb20gY29ybygpCi0KLQotICAgIHRpbWVvdXQ6IHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcwotICAgIGxvb3A6IGFzeW5jaW8gY29tcGF0aWJsZSBldmVudCBsb29wCi0gICAgIiIiCi0gICAgaWYgbG9vcCBpcyBOb25lOgotICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKLSAgICByZXR1cm4gX1RpbWVvdXQodGltZW91dCwgbG9vcD1sb29wKQotCi0KLWNsYXNzIF9UaW1lb3V0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0LCAqLCBsb29wKToKLSAgICAgICAgc2VsZi5fdGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKLSAgICAgICAgc2VsZi5fdGFzayA9IE5vbmUKLSAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fY2FuY2VsX2hhbmRsZXIgPSBOb25lCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICBzZWxmLl90YXNrID0gVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLl9sb29wKQotICAgICAgICBpZiBzZWxmLl90YXNrIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RpbWVvdXQgY29udGV4dCBtYW5hZ2VyIHNob3VsZCBiZSB1c2VkICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5zaWRlIGEgdGFzaycpCi0gICAgICAgIHNlbGYuX2NhbmNlbF9oYW5kbGVyID0gc2VsZi5fbG9vcC5jYWxsX2xhdGVyKAotICAgICAgICAgICAgc2VsZi5fdGltZW91dCwgc2VsZi5fY2FuY2VsX3Rhc2spCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6Ci0gICAgICAgIGlmIGV4Y190eXBlIGlzIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IgYW5kIHNlbGYuX2NhbmNlbGxlZDoKLSAgICAgICAgICAgIHNlbGYuX2NhbmNlbF9oYW5kbGVyID0gTm9uZQotICAgICAgICAgICAgc2VsZi5fdGFzayA9IE5vbmUKLSAgICAgICAgICAgIHJhaXNlIGZ1dHVyZXMuVGltZW91dEVycm9yCi0gICAgICAgIHNlbGYuX2NhbmNlbF9oYW5kbGVyLmNhbmNlbCgpCi0gICAgICAgIHNlbGYuX2NhbmNlbF9oYW5kbGVyID0gTm9uZQotICAgICAgICBzZWxmLl90YXNrID0gTm9uZQotCi0gICAgZGVmIF9jYW5jZWxfdGFzayhzZWxmKToKLSAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gc2VsZi5fdGFzay5jYW5jZWwoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkgYi9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weQppbmRleCA3NzQ3ZmY0Li5kNzEyNzQ5IDEwMDY0NAotLS0gYS9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weQorKysgYi9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgICB3aXRoIGV2ZW50cy5nZXRfY2hpbGRfd2F0Y2hlcigpIGFzIHdhdGNoZXI6Ci0gICAgICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgICAgICB3YWl0ZXIgPSBzZWxmLmNyZWF0ZV9mdXR1cmUoKQogICAgICAgICAgICAgdHJhbnNwID0gX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyPXdhaXRlciwgZXh0cmE9ZXh0cmEsCkBAIC0zMjksMTQgKzMyOSwxNyBAQAogICAgICAgICBlbGlmIHNlbGYuX2Nsb3Npbmc6CiAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2luZycpCiAgICAgICAgIGluZm8uYXBwZW5kKCdmZD0lcycgJSBzZWxmLl9maWxlbm8pCi0gICAgICAgIGlmIHNlbGYuX3BpcGUgaXMgbm90IE5vbmU6CisgICAgICAgIHNlbGVjdG9yID0gZ2V0YXR0cihzZWxmLl9sb29wLCAnX3NlbGVjdG9yJywgTm9uZSkKKyAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZSBhbmQgc2VsZWN0b3IgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBwb2xsaW5nID0gc2VsZWN0b3JfZXZlbnRzLl90ZXN0X3NlbGVjdG9yX2V2ZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLl9zZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVubywgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCiAgICAgICAgICAgICBpZiBwb2xsaW5nOgogICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdwb2xsaW5nJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2lkbGUnKQorICAgICAgICBlbGlmIHNlbGYuX3BpcGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnb3BlbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2VkJykKICAgICAgICAgcmV0dXJuICc8JXM+JyAlICcgJy5qb2luKGluZm8pCkBAIC00NTMsOSArNDU2LDEwIEBACiAgICAgICAgIGVsaWYgc2VsZi5fY2xvc2luZzoKICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zaW5nJykKICAgICAgICAgaW5mby5hcHBlbmQoJ2ZkPSVzJyAlIHNlbGYuX2ZpbGVubykKLSAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgc2VsZWN0b3IgPSBnZXRhdHRyKHNlbGYuX2xvb3AsICdfc2VsZWN0b3InLCBOb25lKQorICAgICAgICBpZiBzZWxmLl9waXBlIGlzIG5vdCBOb25lIGFuZCBzZWxlY3RvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHBvbGxpbmcgPSBzZWxlY3Rvcl9ldmVudHMuX3Rlc3Rfc2VsZWN0b3JfZXZlbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuX3NlbGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5vLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCiAgICAgICAgICAgICBpZiBwb2xsaW5nOgogICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdwb2xsaW5nJykKQEAgLTQ2NCw2ICs0NjgsOCBAQAogCiAgICAgICAgICAgICBidWZzaXplID0gc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKQogICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2J1ZnNpemU9JXMnICUgYnVmc2l6ZSkKKyAgICAgICAgZWxpZiBzZWxmLl9waXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ29wZW4nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2Nsb3NlZCcpCiAgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQpAQCAtNTc1LDcgKzU4MSw3IEBACiAKICAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4YywgbWVzc2FnZT0nRmF0YWwgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKToKICAgICAgICAgIyBzaG91bGQgYmUgY2FsbGVkIGJ5IGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCBiYXNlX2V2ZW50cy5fRkFUQUxfRVJST1JfSUdOT1JFKToKICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CiAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcjogJXMiLCBzZWxmLCBtZXNzYWdlLCBleGNfaW5mbz1UcnVlKQogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQppbmRleCA5MjI1OTRmLi42NjhmZTE0IDEwMDY0NAotLS0gYS9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQorKysgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgICAgICMKICAgICAgICAgIyBJZiB0aGUgSW9jcFByb2FjdG9yIGFscmVhZHkgcmVjZWl2ZWQgdGhlIGV2ZW50LCBpdCdzIHNhZmUgdG8gY2FsbAogICAgICAgICAjIF91bnJlZ2lzdGVyKCkgYmVjYXVzZSB3ZSBrZXB0IGEgcmVmZXJlbmNlIHRvIHRoZSBPdmVybGFwcGVkIG9iamVjdAotICAgICAgICAjIHdoaWNoIGlzIHVzZWQgYXMgYW4gdW5pcXVlIGtleS4KKyAgICAgICAgIyB3aGljaCBpcyB1c2VkIGFzIGEgdW5pcXVlIGtleS4KICAgICAgICAgc2VsZi5fcHJvYWN0b3IuX3VucmVnaXN0ZXIoc2VsZi5fb3YpCiAgICAgICAgIHNlbGYuX3Byb2FjdG9yID0gTm9uZQogCkBAIC0zNjYsNyArMzY2LDcgQEAKICAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB3YWl0ZXIgPSBzZWxmLmNyZWF0ZV9mdXR1cmUoKQogICAgICAgICB0cmFuc3AgPSBfV2luZG93c1N1YnByb2Nlc3NUcmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyPXdhaXRlciwgZXh0cmE9ZXh0cmEsCkBAIC00MTcsNyArNDE3LDcgQEAKICAgICAgICAgcmV0dXJuIHRtcAogCiAgICAgZGVmIF9yZXN1bHQoc2VsZiwgdmFsdWUpOgotICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGZ1dCA9IHNlbGYuX2xvb3AuY3JlYXRlX2Z1dHVyZSgpCiAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KHZhbHVlKQogICAgICAgICByZXR1cm4gZnV0CiAKZGlmZiAtLWdpdCBhL0xpYi9hc3luY29yZS5weSBiL0xpYi9hc3luY29yZS5weQppbmRleCAwMGE2Mzk2Li4zYjUxZjBmIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNvcmUucHkKKysrIGIvTGliL2FzeW5jb3JlLnB5CkBAIC01Nyw4ICs1Nyw4IEBACiAgICAgIEVOT1RDT05OLCBFU0hVVERPV04sIEVJU0NPTk4sIEVCQURGLCBFQ09OTkFCT1JURUQsIEVQSVBFLCBFQUdBSU4sIFwKICAgICAgZXJyb3Jjb2RlCiAKLV9ESVNDT05ORUNURUQgPSBmcm96ZW5zZXQoKEVDT05OUkVTRVQsIEVOT1RDT05OLCBFU0hVVERPV04sIEVDT05OQUJPUlRFRCwgRVBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFQkFERikpCitfRElTQ09OTkVDVEVEID0gZnJvemVuc2V0KHtFQ09OTlJFU0VULCBFTk9UQ09OTiwgRVNIVVRET1dOLCBFQ09OTkFCT1JURUQsIEVQSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRUJBREZ9KQogCiB0cnk6CiAgICAgc29ja2V0X21hcApAQCAtMTQxLDEwICsxNDEsNyBAQAogICAgICAgICAgICAgdGltZS5zbGVlcCh0aW1lb3V0KQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgciwgdywgZSA9IHNlbGVjdC5zZWxlY3QociwgdywgZSwgdGltZW91dCkKLSAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgciwgdywgZSA9IHNlbGVjdC5zZWxlY3QociwgdywgZSwgdGltZW91dCkKIAogICAgICAgICBmb3IgZmQgaW4gcjoKICAgICAgICAgICAgIG9iaiA9IG1hcC5nZXQoZmQpCkBAIC0xODIsMTAgKzE3OSw4IEBACiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gc2VsZWN0LlBPTExPVVQKICAgICAgICAgICAgIGlmIGZsYWdzOgogICAgICAgICAgICAgICAgIHBvbGxzdGVyLnJlZ2lzdGVyKGZkLCBmbGFncykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgciA9IHBvbGxzdGVyLnBvbGwodGltZW91dCkKLSAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6Ci0gICAgICAgICAgICByID0gW10KKworICAgICAgICByID0gcG9sbHN0ZXIucG9sbCh0aW1lb3V0KQogICAgICAgICBmb3IgZmQsIGZsYWdzIGluIHI6CiAgICAgICAgICAgICBvYmogPSBtYXAuZ2V0KGZkKQogICAgICAgICAgICAgaWYgb2JqIGlzIE5vbmU6CkBAIC0yMjAsNyArMjE1LDcgQEAKICAgICBjb25uZWN0aW5nID0gRmFsc2UKICAgICBjbG9zaW5nID0gRmFsc2UKICAgICBhZGRyID0gTm9uZQotICAgIGlnbm9yZV9sb2dfdHlwZXMgPSBmcm96ZW5zZXQoWyd3YXJuaW5nJ10pCisgICAgaWdub3JlX2xvZ190eXBlcyA9IGZyb3plbnNldCh7J3dhcm5pbmcnfSkKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrPU5vbmUsIG1hcD1Ob25lKToKICAgICAgICAgaWYgbWFwIGlzIE5vbmU6CkBAIC0yNTUsNyArMjUwLDcgQEAKICAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBzdGF0dXMgPSBbc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXysiLiIrc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIHN0YXR1cyA9IFtzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fKyIuIitzZWxmLl9fY2xhc3NfXy5fX3F1YWxuYW1lX19dCiAgICAgICAgIGlmIHNlbGYuYWNjZXB0aW5nIGFuZCBzZWxmLmFkZHI6CiAgICAgICAgICAgICBzdGF0dXMuYXBwZW5kKCdsaXN0ZW5pbmcnKQogICAgICAgICBlbGlmIHNlbGYuY29ubmVjdGVkOgpAQCAtNDA0LDIwICszOTksNiBAQAogICAgICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIG5vdCBpbiAoRU5PVENPTk4sIEVCQURGKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAotICAgICMgY2hlYXAgaW5oZXJpdGFuY2UsIHVzZWQgdG8gcGFzcyBhbGwgb3RoZXIgYXR0cmlidXRlCi0gICAgIyByZWZlcmVuY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCi0gICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXRhdHRyID0gZ2V0YXR0cihzZWxmLnNvY2tldCwgYXR0cikKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIiVzIGluc3RhbmNlIGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGF0dHIpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnID0gIiUobWUpcy4lKGF0dHIpcyBpcyBkZXByZWNhdGVkOyB1c2UgJShtZSlzLnNvY2tldC4lKGF0dHIpcyAiIFwKLSAgICAgICAgICAgICAgICAgICJpbnN0ZWFkIiAlIHsnbWUnIDogc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICdhdHRyJyA6IGF0dHJ9Ci0gICAgICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgICAgICAgICByZXR1cm4gcmV0YXR0cgotCiAgICAgIyBsb2cgYW5kIGxvZ19pbmZvIG1heSBiZSBvdmVycmlkZGVuIHRvIHByb3ZpZGUgbW9yZSBzb3BoaXN0aWNhdGVkCiAgICAgIyBsb2dnaW5nIGFuZCB3YXJuaW5nIG1ldGhvZHMuIEluIGdlbmVyYWwsIGxvZyBpcyBmb3IgJ2hpdCcgbG9nZ2luZwogICAgICMgYW5kICdsb2dfaW5mbycgaXMgZm9yIGluZm9ybWF0aW9uYWwsIHdhcm5pbmcgYW5kIGVycm9yIGxvZ2dpbmcuCkBAIC02MDQsOCArNTg1LDYgQEAKICMgUmVnYXJkbGVzcywgdGhpcyBpcyB1c2VmdWwgZm9yIHBpcGVzLCBhbmQgc3RkaW4vc3Rkb3V0Li4uCiAKIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICBpbXBvcnQgZmNudGwKLQogICAgIGNsYXNzIGZpbGVfd3JhcHBlcjoKICAgICAgICAgIyBIZXJlIHdlIG92ZXJyaWRlIGp1c3QgZW5vdWdoIHRvIG1ha2UgYSBmaWxlCiAgICAgICAgICMgbG9vayBsaWtlIGEgc29ja2V0IGZvciB0aGUgcHVycG9zZXMgb2YgYXN5bmNvcmUuCkBAIC02NTYsOSArNjM1LDcgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBzZWxmLnNldF9maWxlKGZkKQogICAgICAgICAgICAgIyBzZXQgaXQgdG8gbm9uLWJsb2NraW5nIG1vZGUKLSAgICAgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwsIDApCi0gICAgICAgICAgICBmbGFncyA9IGZsYWdzIHwgb3MuT19OT05CTE9DSwotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsYWdzKQorICAgICAgICAgICAgb3Muc2V0X2Jsb2NraW5nKGZkLCBGYWxzZSkKIAogICAgICAgICBkZWYgc2V0X2ZpbGUoc2VsZiwgZmQpOgogICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBmaWxlX3dyYXBwZXIoZmQpCmRpZmYgLS1naXQgYS9MaWIvYmFzZTY0LnB5IGIvTGliL2Jhc2U2NC5weQppbmRleCA2NDBmNzg3Li5hZGFlYzFkIDEwMDc1NQotLS0gYS9MaWIvYmFzZTY0LnB5CisrKyBiL0xpYi9iYXNlNjQucHkKQEAgLTEyLDcgKzEyLDcgQEAKIAogCiBfX2FsbF9fID0gWwotICAgICMgTGVnYWN5IGludGVyZmFjZSBleHBvcnRzIHRyYWRpdGlvbmFsIFJGQyAxNTIxIEJhc2U2NCBlbmNvZGluZ3MKKyAgICAjIExlZ2FjeSBpbnRlcmZhY2UgZXhwb3J0cyB0cmFkaXRpb25hbCBSRkMgMjA0NSBCYXNlNjQgZW5jb2RpbmdzCiAgICAgJ2VuY29kZScsICdkZWNvZGUnLCAnZW5jb2RlYnl0ZXMnLCAnZGVjb2RlYnl0ZXMnLAogICAgICMgR2VuZXJhbGl6ZWQgaW50ZXJmYWNlIGZvciBvdGhlciBlbmNvZGluZ3MKICAgICAnYjY0ZW5jb2RlJywgJ2I2NGRlY29kZScsICdiMzJlbmNvZGUnLCAnYjMyZGVjb2RlJywKQEAgLTQ5LDE0ICs0OSwxMSBAQAogIyBCYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdXNlcyBiaW5hc2NpaQogCiBkZWYgYjY0ZW5jb2RlKHMsIGFsdGNoYXJzPU5vbmUpOgotICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEJhc2U2NC4KKyAgICAiIiJFbmNvZGUgdGhlIGJ5dGVzLWxpa2Ugb2JqZWN0IHMgdXNpbmcgQmFzZTY0IGFuZCByZXR1cm4gYSBieXRlcyBvYmplY3QuCiAKLSAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuICBPcHRpb25hbCBhbHRjaGFycyBtdXN0IGJlIGEgYnl0ZQotICAgIHN0cmluZyBvZiBsZW5ndGggMiB3aGljaCBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgYWxwaGFiZXQgZm9yIHRoZQotICAgICcrJyBhbmQgJy8nIGNoYXJhY3RlcnMuICBUaGlzIGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0bwotICAgIGUuZy4gZ2VuZXJhdGUgdXJsIG9yIGZpbGVzeXN0ZW0gc2FmZSBCYXNlNjQgc3RyaW5ncy4KLQotICAgIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorICAgIE9wdGlvbmFsIGFsdGNoYXJzIHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nIG9mIGxlbmd0aCAyIHdoaWNoIHNwZWNpZmllcyBhbgorICAgIGFsdGVybmF0aXZlIGFscGhhYmV0IGZvciB0aGUgJysnIGFuZCAnLycgY2hhcmFjdGVycy4gIFRoaXMgYWxsb3dzIGFuCisgICAgYXBwbGljYXRpb24gdG8gZS5nLiBnZW5lcmF0ZSB1cmwgb3IgZmlsZXN5c3RlbSBzYWZlIEJhc2U2NCBzdHJpbmdzLgogICAgICIiIgogICAgICMgU3RyaXAgb2ZmIHRoZSB0cmFpbGluZyBuZXdsaW5lCiAgICAgZW5jb2RlZCA9IGJpbmFzY2lpLmIyYV9iYXNlNjQocylbOi0xXQpAQCAtNjcsMTggKzY0LDE5IEBACiAKIAogZGVmIGI2NGRlY29kZShzLCBhbHRjaGFycz1Ob25lLCB2YWxpZGF0ZT1GYWxzZSk6Ci0gICAgIiIiRGVjb2RlIGEgQmFzZTY0IGVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICAgIiIiRGVjb2RlIHRoZSBCYXNlNjQgZW5jb2RlZCBieXRlcy1saWtlIG9iamVjdCBvciBBU0NJSSBzdHJpbmcgcy4KIAotICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGRlY29kZS4gIE9wdGlvbmFsIGFsdGNoYXJzIG11c3QgYmUgYQotICAgIHN0cmluZyBvZiBsZW5ndGggMiB3aGljaCBzcGVjaWZpZXMgdGhlIGFsdGVybmF0aXZlIGFscGhhYmV0IHVzZWQKLSAgICBpbnN0ZWFkIG9mIHRoZSAnKycgYW5kICcvJyBjaGFyYWN0ZXJzLgorICAgIE9wdGlvbmFsIGFsdGNoYXJzIG11c3QgYmUgYSBieXRlcy1saWtlIG9iamVjdCBvciBBU0NJSSBzdHJpbmcgb2YgbGVuZ3RoIDIKKyAgICB3aGljaCBzcGVjaWZpZXMgdGhlIGFsdGVybmF0aXZlIGFscGhhYmV0IHVzZWQgaW5zdGVhZCBvZiB0aGUgJysnIGFuZCAnLycKKyAgICBjaGFyYWN0ZXJzLgogCi0gICAgVGhlIGRlY29kZWQgc3RyaW5nIGlzIHJldHVybmVkLiAgQSBiaW5hc2NpaS5FcnJvciBpcyByYWlzZWQgaWYgcyBpcwotICAgIGluY29ycmVjdGx5IHBhZGRlZC4KKyAgICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgYnl0ZXMgb2JqZWN0LiAgQSBiaW5hc2NpaS5FcnJvciBpcyByYWlzZWQgaWYKKyAgICBzIGlzIGluY29ycmVjdGx5IHBhZGRlZC4KIAotICAgIElmIHZhbGlkYXRlIGlzIEZhbHNlICh0aGUgZGVmYXVsdCksIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBhcmUKLSAgICBkaXNjYXJkZWQgcHJpb3IgdG8gdGhlIHBhZGRpbmcgY2hlY2suICBJZiB2YWxpZGF0ZSBpcyBUcnVlLAotICAgIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBpbiB0aGUgaW5wdXQgcmVzdWx0IGluIGEgYmluYXNjaWkuRXJyb3IuCisgICAgSWYgdmFsaWRhdGUgaXMgRmFsc2UgKHRoZSBkZWZhdWx0KSwgY2hhcmFjdGVycyB0aGF0IGFyZSBuZWl0aGVyIGluIHRoZQorICAgIG5vcm1hbCBiYXNlLTY0IGFscGhhYmV0IG5vciB0aGUgYWx0ZXJuYXRpdmUgYWxwaGFiZXQgYXJlIGRpc2NhcmRlZCBwcmlvcgorICAgIHRvIHRoZSBwYWRkaW5nIGNoZWNrLiAgSWYgdmFsaWRhdGUgaXMgVHJ1ZSwgdGhlc2Ugbm9uLWFscGhhYmV0IGNoYXJhY3RlcnMKKyAgICBpbiB0aGUgaW5wdXQgcmVzdWx0IGluIGEgYmluYXNjaWkuRXJyb3IuCiAgICAgIiIiCiAgICAgcyA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKHMpCiAgICAgaWYgYWx0Y2hhcnMgaXMgbm90IE5vbmU6CkBAIC05MSwxOSArODksMTkgQEAKIAogCiBkZWYgc3RhbmRhcmRfYjY0ZW5jb2RlKHMpOgotICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBCYXNlNjQgYWxwaGFiZXQuCisgICAgIiIiRW5jb2RlIGJ5dGVzLWxpa2Ugb2JqZWN0IHMgdXNpbmcgdGhlIHN0YW5kYXJkIEJhc2U2NCBhbHBoYWJldC4KIAotICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGVuY29kZS4gIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorICAgIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgYXMgYSBieXRlcyBvYmplY3QuCiAgICAgIiIiCiAgICAgcmV0dXJuIGI2NGVuY29kZShzKQogCiBkZWYgc3RhbmRhcmRfYjY0ZGVjb2RlKHMpOgotICAgICIiIkRlY29kZSBhIGJ5dGUgc3RyaW5nIGVuY29kZWQgd2l0aCB0aGUgc3RhbmRhcmQgQmFzZTY0IGFscGhhYmV0LgorICAgICIiIkRlY29kZSBieXRlcyBlbmNvZGVkIHdpdGggdGhlIHN0YW5kYXJkIEJhc2U2NCBhbHBoYWJldC4KIAotICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGRlY29kZS4gIFRoZSBkZWNvZGVkIGJ5dGUgc3RyaW5nIGlzCi0gICAgcmV0dXJuZWQuICBiaW5hc2NpaS5FcnJvciBpcyByYWlzZWQgaWYgdGhlIGlucHV0IGlzIGluY29ycmVjdGx5Ci0gICAgcGFkZGVkIG9yIGlmIHRoZXJlIGFyZSBub24tYWxwaGFiZXQgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZQotICAgIGlucHV0LgorICAgIEFyZ3VtZW50IHMgaXMgYSBieXRlcy1saWtlIG9iamVjdCBvciBBU0NJSSBzdHJpbmcgdG8gZGVjb2RlLiAgVGhlIHJlc3VsdAorICAgIGlzIHJldHVybmVkIGFzIGEgYnl0ZXMgb2JqZWN0LiAgQSBiaW5hc2NpaS5FcnJvciBpcyByYWlzZWQgaWYgdGhlIGlucHV0CisgICAgaXMgaW5jb3JyZWN0bHkgcGFkZGVkLiAgQ2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHN0YW5kYXJkIGFscGhhYmV0CisgICAgYXJlIGRpc2NhcmRlZCBwcmlvciB0byB0aGUgcGFkZGluZyBjaGVjay4KICAgICAiIiIKICAgICByZXR1cm4gYjY0ZGVjb2RlKHMpCiAKQEAgLTExMiwyMSArMTEwLDIyIEBACiBfdXJsc2FmZV9kZWNvZGVfdHJhbnNsYXRpb24gPSBieXRlcy5tYWtldHJhbnMoYictXycsIGInKy8nKQogCiBkZWYgdXJsc2FmZV9iNjRlbmNvZGUocyk6Ci0gICAgIiIiRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgYSB1cmwtc2FmZSBCYXNlNjQgYWxwaGFiZXQuCisgICAgIiIiRW5jb2RlIGJ5dGVzIHVzaW5nIHRoZSBVUkwtIGFuZCBmaWxlc3lzdGVtLXNhZmUgQmFzZTY0IGFscGhhYmV0LgogCi0gICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMKLSAgICByZXR1cm5lZC4gIFRoZSBhbHBoYWJldCB1c2VzICctJyBpbnN0ZWFkIG9mICcrJyBhbmQgJ18nIGluc3RlYWQgb2YKKyAgICBBcmd1bWVudCBzIGlzIGEgYnl0ZXMtbGlrZSBvYmplY3QgdG8gZW5jb2RlLiAgVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhCisgICAgYnl0ZXMgb2JqZWN0LiAgVGhlIGFscGhhYmV0IHVzZXMgJy0nIGluc3RlYWQgb2YgJysnIGFuZCAnXycgaW5zdGVhZCBvZgogICAgICcvJy4KICAgICAiIiIKICAgICByZXR1cm4gYjY0ZW5jb2RlKHMpLnRyYW5zbGF0ZShfdXJsc2FmZV9lbmNvZGVfdHJhbnNsYXRpb24pCiAKIGRlZiB1cmxzYWZlX2I2NGRlY29kZShzKToKLSAgICAiIiJEZWNvZGUgYSBieXRlIHN0cmluZyBlbmNvZGVkIHdpdGggdGhlIHN0YW5kYXJkIEJhc2U2NCBhbHBoYWJldC4KKyAgICAiIiJEZWNvZGUgYnl0ZXMgdXNpbmcgdGhlIFVSTC0gYW5kIGZpbGVzeXN0ZW0tc2FmZSBCYXNlNjQgYWxwaGFiZXQuCiAKLSAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuICBUaGUgZGVjb2RlZCBieXRlIHN0cmluZyBpcwotICAgIHJldHVybmVkLiAgYmluYXNjaWkuRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBpbnB1dCBpcyBpbmNvcnJlY3RseQotICAgIHBhZGRlZCBvciBpZiB0aGVyZSBhcmUgbm9uLWFscGhhYmV0IGNoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUKLSAgICBpbnB1dC4KKyAgICBBcmd1bWVudCBzIGlzIGEgYnl0ZXMtbGlrZSBvYmplY3Qgb3IgQVNDSUkgc3RyaW5nIHRvIGRlY29kZS4gIFRoZSByZXN1bHQKKyAgICBpcyByZXR1cm5lZCBhcyBhIGJ5dGVzIG9iamVjdC4gIEEgYmluYXNjaWkuRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBpbnB1dAorICAgIGlzIGluY29ycmVjdGx5IHBhZGRlZC4gIENoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSBVUkwtc2FmZSBiYXNlLTY0CisgICAgYWxwaGFiZXQsIGFuZCBhcmUgbm90IGEgcGx1cyAnKycgb3Igc2xhc2ggJy8nLCBhcmUgZGlzY2FyZGVkIHByaW9yIHRvIHRoZQorICAgIHBhZGRpbmcgY2hlY2suCiAKICAgICBUaGUgYWxwaGFiZXQgdXNlcyAnLScgaW5zdGVhZCBvZiAnKycgYW5kICdfJyBpbnN0ZWFkIG9mICcvJy4KICAgICAiIiIKQEAgLTE0Miw5ICsxNDEsNyBAQAogX2IzMnJldiA9IE5vbmUKIAogZGVmIGIzMmVuY29kZShzKToKLSAgICAiIiJFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBCYXNlMzIuCi0KLSAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KKyAgICAiIiJFbmNvZGUgdGhlIGJ5dGVzLWxpa2Ugb2JqZWN0IHMgdXNpbmcgQmFzZTMyIGFuZCByZXR1cm4gYSBieXRlcyBvYmplY3QuCiAgICAgIiIiCiAgICAgZ2xvYmFsIF9iMzJ0YWIyCiAgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHRhYmxlIHRvIG5vdCB3YXN0ZSBtZW1vcnkKQEAgLTE4MiwxMSArMTc5LDEwIEBACiAgICAgcmV0dXJuIGJ5dGVzKGVuY29kZWQpCiAKIGRlZiBiMzJkZWNvZGUocywgY2FzZWZvbGQ9RmFsc2UsIG1hcDAxPU5vbmUpOgotICAgICIiIkRlY29kZSBhIEJhc2UzMiBlbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgICIiIkRlY29kZSB0aGUgQmFzZTMyIGVuY29kZWQgYnl0ZXMtbGlrZSBvYmplY3Qgb3IgQVNDSUkgc3RyaW5nIHMuCiAKLSAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuICBPcHRpb25hbCBjYXNlZm9sZCBpcyBhIGZsYWcKLSAgICBzcGVjaWZ5aW5nIHdoZXRoZXIgYSBsb3dlcmNhc2UgYWxwaGFiZXQgaXMgYWNjZXB0YWJsZSBhcyBpbnB1dC4KLSAgICBGb3Igc2VjdXJpdHkgcHVycG9zZXMsIHRoZSBkZWZhdWx0IGlzIEZhbHNlLgorICAgIE9wdGlvbmFsIGNhc2Vmb2xkIGlzIGEgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgYSBsb3dlcmNhc2UgYWxwaGFiZXQgaXMKKyAgICBhY2NlcHRhYmxlIGFzIGlucHV0LiAgRm9yIHNlY3VyaXR5IHB1cnBvc2VzLCB0aGUgZGVmYXVsdCBpcyBGYWxzZS4KIAogICAgIFJGQyAzNTQ4IGFsbG93cyBmb3Igb3B0aW9uYWwgbWFwcGluZyBvZiB0aGUgZGlnaXQgMCAoemVybykgdG8gdGhlCiAgICAgbGV0dGVyIE8gKG9oKSwgYW5kIGZvciBvcHRpb25hbCBtYXBwaW5nIG9mIHRoZSBkaWdpdCAxIChvbmUpIHRvCkBAIC0xOTYsNyArMTkyLDcgQEAKICAgICB0aGUgbGV0dGVyIE8pLiAgRm9yIHNlY3VyaXR5IHB1cnBvc2VzIHRoZSBkZWZhdWx0IGlzIE5vbmUsIHNvIHRoYXQKICAgICAwIGFuZCAxIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgaW5wdXQuCiAKLSAgICBUaGUgZGVjb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4gIGJpbmFzY2lpLkVycm9yIGlzIHJhaXNlZCBpZgorICAgIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgYXMgYSBieXRlcyBvYmplY3QuICBBIGJpbmFzY2lpLkVycm9yIGlzIHJhaXNlZCBpZgogICAgIHRoZSBpbnB1dCBpcyBpbmNvcnJlY3RseSBwYWRkZWQgb3IgaWYgdGhlcmUgYXJlIG5vbi1hbHBoYWJldAogICAgIGNoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUgaW5wdXQuCiAgICAgIiIiCkBAIC0yNTcsMjMgKzI1MywyMCBAQAogIyBsb3dlcmNhc2UuICBUaGUgUkZDIGFsc28gcmVjb21tZW5kcyBhZ2FpbnN0IGFjY2VwdGluZyBpbnB1dCBjYXNlCiAjIGluc2Vuc2l0aXZlbHkuCiBkZWYgYjE2ZW5jb2RlKHMpOgotICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEJhc2UxNi4KLQotICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGVuY29kZS4gIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorICAgICIiIkVuY29kZSB0aGUgYnl0ZXMtbGlrZSBvYmplY3QgcyB1c2luZyBCYXNlMTYgYW5kIHJldHVybiBhIGJ5dGVzIG9iamVjdC4KICAgICAiIiIKICAgICByZXR1cm4gYmluYXNjaWkuaGV4bGlmeShzKS51cHBlcigpCiAKIAogZGVmIGIxNmRlY29kZShzLCBjYXNlZm9sZD1GYWxzZSk6Ci0gICAgIiIiRGVjb2RlIGEgQmFzZTE2IGVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICAgIiIiRGVjb2RlIHRoZSBCYXNlMTYgZW5jb2RlZCBieXRlcy1saWtlIG9iamVjdCBvciBBU0NJSSBzdHJpbmcgcy4KIAotICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGRlY29kZS4gIE9wdGlvbmFsIGNhc2Vmb2xkIGlzIGEgZmxhZwotICAgIHNwZWNpZnlpbmcgd2hldGhlciBhIGxvd2VyY2FzZSBhbHBoYWJldCBpcyBhY2NlcHRhYmxlIGFzIGlucHV0LgotICAgIEZvciBzZWN1cml0eSBwdXJwb3NlcywgdGhlIGRlZmF1bHQgaXMgRmFsc2UuCisgICAgT3B0aW9uYWwgY2FzZWZvbGQgaXMgYSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciBhIGxvd2VyY2FzZSBhbHBoYWJldCBpcworICAgIGFjY2VwdGFibGUgYXMgaW5wdXQuICBGb3Igc2VjdXJpdHkgcHVycG9zZXMsIHRoZSBkZWZhdWx0IGlzIEZhbHNlLgogCi0gICAgVGhlIGRlY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuICBiaW5hc2NpaS5FcnJvciBpcyByYWlzZWQgaWYKLSAgICBzIHdlcmUgaW5jb3JyZWN0bHkgcGFkZGVkIG9yIGlmIHRoZXJlIGFyZSBub24tYWxwaGFiZXQgY2hhcmFjdGVycwotICAgIHByZXNlbnQgaW4gdGhlIHN0cmluZy4KKyAgICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgYnl0ZXMgb2JqZWN0LiAgQSBiaW5hc2NpaS5FcnJvciBpcyByYWlzZWQgaWYKKyAgICBzIGlzIGluY29ycmVjdGx5IHBhZGRlZCBvciBpZiB0aGVyZSBhcmUgbm9uLWFscGhhYmV0IGNoYXJhY3RlcnMgcHJlc2VudAorICAgIGluIHRoZSBpbnB1dC4KICAgICAiIiIKICAgICBzID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEocykKICAgICBpZiBjYXNlZm9sZDoKQEAgLTMxNiwxOSArMzA5LDE3IEBACiAgICAgcmV0dXJuIGInJy5qb2luKGNodW5rcykKIAogZGVmIGE4NWVuY29kZShiLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCB3cmFwY29sPTAsIHBhZD1GYWxzZSwgYWRvYmU9RmFsc2UpOgotICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEFzY2lpODUuCi0KLSAgICBiIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorICAgICIiIkVuY29kZSBieXRlcy1saWtlIG9iamVjdCBiIHVzaW5nIEFzY2lpODUgYW5kIHJldHVybiBhIGJ5dGVzIG9iamVjdC4KIAogICAgIGZvbGRzcGFjZXMgaXMgYW4gb3B0aW9uYWwgZmxhZyB0aGF0IHVzZXMgdGhlIHNwZWNpYWwgc2hvcnQgc2VxdWVuY2UgJ3knCiAgICAgaW5zdGVhZCBvZiA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkgYXMgc3VwcG9ydGVkIGJ5ICdidG9hJy4gVGhpcwogICAgIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBZG9iZSBlbmNvZGluZy4KIAotICAgIHdyYXBjb2wgY29udHJvbHMgd2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBoYXZlIG5ld2xpbmUgKCdcXG4nKSBjaGFyYWN0ZXJzCisgICAgd3JhcGNvbCBjb250cm9scyB3aGV0aGVyIHRoZSBvdXRwdXQgc2hvdWxkIGhhdmUgbmV3bGluZSAoYidcXG4nKSBjaGFyYWN0ZXJzCiAgICAgYWRkZWQgdG8gaXQuIElmIHRoaXMgaXMgbm9uLXplcm8sIGVhY2ggb3V0cHV0IGxpbmUgd2lsbCBiZSBhdCBtb3N0IHRoaXMKICAgICBtYW55IGNoYXJhY3RlcnMgbG9uZy4KIAotICAgIHBhZCBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgNCBiZWZvcmUKKyAgICBwYWQgY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgaXMgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgNCBiZWZvcmUKICAgICBlbmNvZGluZy4gTm90ZSB0aGF0IHRoZSBidG9hIGltcGxlbWVudGF0aW9uIGFsd2F5cyBwYWRzLgogCiAgICAgYWRvYmUgY29udHJvbHMgd2hldGhlciB0aGUgZW5jb2RlZCBieXRlIHNlcXVlbmNlIGlzIGZyYW1lZCB3aXRoIDx+IGFuZCB+PiwKQEAgLTM1OSw5ICszNTAsNyBAQAogICAgIHJldHVybiByZXN1bHQKIAogZGVmIGE4NWRlY29kZShiLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YicgXHRcblxyXHYnKToKLSAgICAiIiJEZWNvZGUgYW4gQXNjaWk4NSBlbmNvZGVkIGJ5dGUgc3RyaW5nLgotCi0gICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZGVjb2RlLgorICAgICIiIkRlY29kZSB0aGUgQXNjaWk4NSBlbmNvZGVkIGJ5dGVzLWxpa2Ugb2JqZWN0IG9yIEFTQ0lJIHN0cmluZyBiLgogCiAgICAgZm9sZHNwYWNlcyBpcyBhIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ3knIHNob3J0IHNlcXVlbmNlIHNob3VsZCBiZQogICAgIGFjY2VwdGVkIGFzIHNob3J0aGFuZCBmb3IgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApLiBUaGlzIGZlYXR1cmUgaXMKQEAgLTM3MywxMyArMzYyLDIwIEBACiAgICAgaWdub3JlY2hhcnMgc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGlnbm9yZSBmcm9tIHRoZQogICAgIGlucHV0LiBUaGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgYnkgZGVmYXVsdAogICAgIGNvbnRhaW5zIGFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gQVNDSUkuCisKKyAgICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgYnl0ZXMgb2JqZWN0LgogICAgICIiIgogICAgIGIgPSBfYnl0ZXNfZnJvbV9kZWNvZGVfZGF0YShiKQogICAgIGlmIGFkb2JlOgotICAgICAgICBpZiBub3QgKGIuc3RhcnRzd2l0aChfQTg1U1RBUlQpIGFuZCBiLmVuZHN3aXRoKF9BODVFTkQpKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFzY2lpODUgZW5jb2RlZCBieXRlIHNlcXVlbmNlcyBtdXN0IGJlIGJyYWNrZXRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieSB7IXJ9IGFuZCB7IXJ9Ii5mb3JtYXQoX0E4NVNUQVJULCBfQTg1RU5EKSkKLSAgICAgICAgYiA9IGJbMjotMl0gIyBTdHJpcCBvZmYgc3RhcnQvZW5kIG1hcmtlcnMKKyAgICAgICAgaWYgbm90IGIuZW5kc3dpdGgoX0E4NUVORCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJBc2NpaTg1IGVuY29kZWQgYnl0ZSBzZXF1ZW5jZXMgbXVzdCBlbmQgIgorICAgICAgICAgICAgICAgICJ3aXRoIHshcn0iLmZvcm1hdChfQTg1RU5EKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgaWYgYi5zdGFydHN3aXRoKF9BODVTVEFSVCk6CisgICAgICAgICAgICBiID0gYlsyOi0yXSAgIyBTdHJpcCBvZmYgc3RhcnQvZW5kIG1hcmtlcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGIgPSBiWzotMl0KICAgICAjCiAgICAgIyBXZSBoYXZlIHRvIGdvIHRocm91Z2ggdGhpcyBzdGVwd2lzZSwgc28gYXMgdG8gaWdub3JlIHNwYWNlcyBhbmQgaGFuZGxlCiAgICAgIyBzcGVjaWFsIHNob3J0IHNlcXVlbmNlcwpAQCAtNDMyLDEwICs0MjgsMTAgQEAKIF9iODVkZWMgPSBOb25lCiAKIGRlZiBiODVlbmNvZGUoYiwgcGFkPUZhbHNlKToKLSAgICAiIiJFbmNvZGUgYW4gQVNDSUktZW5jb2RlZCBieXRlIGFycmF5IGluIGJhc2U4NSBmb3JtYXQuCisgICAgIiIiRW5jb2RlIGJ5dGVzLWxpa2Ugb2JqZWN0IGIgaW4gYmFzZTg1IGZvcm1hdCBhbmQgcmV0dXJuIGEgYnl0ZXMgb2JqZWN0LgogCi0gICAgSWYgcGFkIGlzIHRydWUsIHRoZSBpbnB1dCBpcyBwYWRkZWQgd2l0aCAiXFwwIiBzbyBpdHMgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YKLSAgICA0IGNoYXJhY3RlcnMgYmVmb3JlIGVuY29kaW5nLgorICAgIElmIHBhZCBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggYidcXDAnIHNvIGl0cyBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZgorICAgIDQgYnl0ZXMgYmVmb3JlIGVuY29kaW5nLgogICAgICIiIgogICAgIGdsb2JhbCBfYjg1Y2hhcnMsIF9iODVjaGFyczIKICAgICAjIERlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0YWJsZXMgdG8gbm90IHdhc3RlIG1lbW9yeQpAQCAtNDQ2LDcgKzQ0MiwxMCBAQAogICAgIHJldHVybiBfODVlbmNvZGUoYiwgX2I4NWNoYXJzLCBfYjg1Y2hhcnMyLCBwYWQpCiAKIGRlZiBiODVkZWNvZGUoYik6Ci0gICAgIiIiRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgYXJyYXkiIiIKKyAgICAiIiJEZWNvZGUgdGhlIGJhc2U4NS1lbmNvZGVkIGJ5dGVzLWxpa2Ugb2JqZWN0IG9yIEFTQ0lJIHN0cmluZyBiCisKKyAgICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgYnl0ZXMgb2JqZWN0LgorICAgICIiIgogICAgIGdsb2JhbCBfYjg1ZGVjCiAgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGFibGVzIHRvIG5vdCB3YXN0ZSBtZW1vcnkKICAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKQEAgLTUzMSw3ICs1MzAsNyBAQAogCiAKIGRlZiBlbmNvZGVieXRlcyhzKToKLSAgICAiIiJFbmNvZGUgYSBieXRlc3RyaW5nIGludG8gYSBieXRlc3RyaW5nIGNvbnRhaW5pbmcgbXVsdGlwbGUgbGluZXMKKyAgICAiIiJFbmNvZGUgYSBieXRlc3RyaW5nIGludG8gYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBtdWx0aXBsZSBsaW5lcwogICAgIG9mIGJhc2UtNjQgZGF0YS4iIiIKICAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHBpZWNlcyA9IFtdCkBAIC01NDksNyArNTQ4LDcgQEAKIAogCiBkZWYgZGVjb2RlYnl0ZXMocyk6Ci0gICAgIiIiRGVjb2RlIGEgYnl0ZXN0cmluZyBvZiBiYXNlLTY0IGRhdGEgaW50byBhIGJ5dGVzdHJpbmcuIiIiCisgICAgIiIiRGVjb2RlIGEgYnl0ZXN0cmluZyBvZiBiYXNlLTY0IGRhdGEgaW50byBhIGJ5dGVzIG9iamVjdC4iIiIKICAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHJldHVybiBiaW5hc2NpaS5hMmJfYmFzZTY0KHMpCiAKZGlmZiAtLWdpdCBhL0xpYi9iaW5oZXgucHkgYi9MaWIvYmluaGV4LnB5CmluZGV4IDgyNzJkNWMuLjU2YjVmODUgMTAwNjQ0Ci0tLSBhL0xpYi9iaW5oZXgucHkKKysrIGIvTGliL2JpbmhleC5weQpAQCAtMjM1LDE0ICsyMzUsMTMgQEAKICAgICBmaW5mbyA9IGdldGZpbGVpbmZvKGlucCkKICAgICBvZnAgPSBCaW5IZXgoZmluZm8sIG91dCkKIAotICAgIGlmcCA9IGlvLm9wZW4oaW5wLCAncmInKQotICAgICMgWFhYWCBEbyB0ZXh0ZmlsZSB0cmFuc2xhdGlvbiBvbiBub24tbWFjIHN5c3RlbXMKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBkID0gaWZwLnJlYWQoMTI4MDAwKQotICAgICAgICBpZiBub3QgZDogYnJlYWsKLSAgICAgICAgb2ZwLndyaXRlKGQpCi0gICAgb2ZwLmNsb3NlX2RhdGEoKQotICAgIGlmcC5jbG9zZSgpCisgICAgd2l0aCBpby5vcGVuKGlucCwgJ3JiJykgYXMgaWZwOgorICAgICAgICAjIFhYWFggRG8gdGV4dGZpbGUgdHJhbnNsYXRpb24gb24gbm9uLW1hYyBzeXN0ZW1zCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBkID0gaWZwLnJlYWQoMTI4MDAwKQorICAgICAgICAgICAgaWYgbm90IGQ6IGJyZWFrCisgICAgICAgICAgICBvZnAud3JpdGUoZCkKKyAgICAgICAgb2ZwLmNsb3NlX2RhdGEoKQogCiAgICAgaWZwID0gb3BlbnJzcmMoaW5wLCAncmInKQogICAgIHdoaWxlIFRydWU6CkBAIC00NTksMTMgKzQ1OCwxMiBAQAogICAgIGlmIG5vdCBvdXQ6CiAgICAgICAgIG91dCA9IGlmcC5GTmFtZQogCi0gICAgb2ZwID0gaW8ub3BlbihvdXQsICd3YicpCi0gICAgIyBYWFhYIERvIHRyYW5zbGF0aW9uIG9uIG5vbi1tYWMgc3lzdGVtcwotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGQgPSBpZnAucmVhZCgxMjgwMDApCi0gICAgICAgIGlmIG5vdCBkOiBicmVhawotICAgICAgICBvZnAud3JpdGUoZCkKLSAgICBvZnAuY2xvc2UoKQorICAgIHdpdGggaW8ub3BlbihvdXQsICd3YicpIGFzIG9mcDoKKyAgICAgICAgIyBYWFhYIERvIHRyYW5zbGF0aW9uIG9uIG5vbi1tYWMgc3lzdGVtcworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZCA9IGlmcC5yZWFkKDEyODAwMCkKKyAgICAgICAgICAgIGlmIG5vdCBkOiBicmVhaworICAgICAgICAgICAgb2ZwLndyaXRlKGQpCiAgICAgaWZwLmNsb3NlX2RhdGEoKQogCiAgICAgZCA9IGlmcC5yZWFkX3JzcmMoMTI4MDAwKQpkaWZmIC0tZ2l0IGEvTGliL2J6Mi5weSBiL0xpYi9iejIucHkKaW5kZXggNmM1YTYwZC4uYmM3OGM1NCAxMDA2NDQKLS0tIGEvTGliL2J6Mi5weQorKysgYi9MaWIvYnoyLnB5CkBAIC0xMiw2ICsxMiw3IEBACiBmcm9tIGJ1aWx0aW5zIGltcG9ydCBvcGVuIGFzIF9idWlsdGluX29wZW4KIGltcG9ydCBpbwogaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgX2NvbXByZXNzaW9uCiAKIHRyeToKICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgUkxvY2sKQEAgLTIzLDEzICsyNCwxMSBAQAogCiBfTU9ERV9DTE9TRUQgICA9IDAKIF9NT0RFX1JFQUQgICAgID0gMQotX01PREVfUkVBRF9FT0YgPSAyCisjIFZhbHVlIDIgbm8gbG9uZ2VyIHVzZWQKIF9NT0RFX1dSSVRFICAgID0gMwogCi1fQlVGRkVSX1NJWkUgPSA4MTkyCiAKLQotY2xhc3MgQloyRmlsZShpby5CdWZmZXJlZElPQmFzZSk6CitjbGFzcyBCWjJGaWxlKF9jb21wcmVzc2lvbi5CYXNlU3RyZWFtKToKIAogICAgICIiIkEgZmlsZSBvYmplY3QgcHJvdmlkaW5nIHRyYW5zcGFyZW50IGJ6aXAyIChkZSljb21wcmVzc2lvbi4KIApAQCAtNjEsMTMgKzYwLDExIEBACiAgICAgICAgIG11bHRpcGxlIGNvbXByZXNzZWQgc3RyZWFtcy4KICAgICAgICAgIiIiCiAgICAgICAgICMgVGhpcyBsb2NrIG11c3QgYmUgcmVjdXJzaXZlLCBzbyB0aGF0IEJ1ZmZlcmVkSU9CYXNlJ3MKLSAgICAgICAgIyByZWFkbGluZSgpLCByZWFkbGluZXMoKSBhbmQgd3JpdGVsaW5lcygpIGRvbid0IGRlYWRsb2NrLgorICAgICAgICAjIHdyaXRlbGluZXMoKSBkb2VzIG5vdCBkZWFkbG9jay4KICAgICAgICAgc2VsZi5fbG9jayA9IFJMb2NrKCkKICAgICAgICAgc2VsZi5fZnAgPSBOb25lCiAgICAgICAgIHNlbGYuX2Nsb3NlZnAgPSBGYWxzZQogICAgICAgICBzZWxmLl9tb2RlID0gX01PREVfQ0xPU0VECi0gICAgICAgIHNlbGYuX3BvcyA9IDAKLSAgICAgICAgc2VsZi5fc2l6ZSA9IC0xCiAKICAgICAgICAgaWYgYnVmZmVyaW5nIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVXNlIG9mICdidWZmZXJpbmcnIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQiLApAQCAtNzksOSArNzYsNiBAQAogICAgICAgICBpZiBtb2RlIGluICgiIiwgInIiLCAicmIiKToKICAgICAgICAgICAgIG1vZGUgPSAicmIiCiAgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9SRUFECi0gICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBCWjJEZWNvbXByZXNzb3IoKQotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCi0gICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAogICAgICAgICBlbGlmIG1vZGUgaW4gKCJ3IiwgIndiIik6CiAgICAgICAgICAgICBtb2RlID0gIndiIgogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKQEAgLTEwNyw2ICsxMDEsMTMgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZmlsZW5hbWUgbXVzdCBiZSBhIHN0ciBvciBieXRlcyBvYmplY3QsIG9yIGEgZmlsZSIpCiAKKyAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEOgorICAgICAgICAgICAgcmF3ID0gX2NvbXByZXNzaW9uLkRlY29tcHJlc3NSZWFkZXIoc2VsZi5fZnAsCisgICAgICAgICAgICAgICAgQloyRGVjb21wcmVzc29yLCB0cmFpbGluZ19lcnJvcj1PU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcG9zID0gMAorCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICAiIiJGbHVzaCBhbmQgY2xvc2UgdGhlIGZpbGUuCiAKQEAgLTExNyw4ICsxMTgsOCBAQAogICAgICAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9DTE9TRUQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fbW9kZSBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xvc2UoKQogICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9XUklURToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc2VsZi5fY29tcHJlc3Nvci5mbHVzaCgpKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gTm9uZQpAQCAtMTMwLDggKzEzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZwID0gTm9uZQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jbG9zZWZwID0gRmFsc2UKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX0NMT1NFRAotICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGNsb3NlZChzZWxmKToKQEAgLTE0NSwxMjUgKzE0NSwxOCBAQAogCiAgICAgZGVmIHNlZWthYmxlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgZmlsZSBzdXBwb3J0cyBzZWVraW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkYWJsZSgpIGFuZCBzZWxmLl9mcC5zZWVrYWJsZSgpCisgICAgICAgIHJldHVybiBzZWxmLnJlYWRhYmxlKCkgYW5kIHNlbGYuX2J1ZmZlci5zZWVrYWJsZSgpCiAKICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBmaWxlIHdhcyBvcGVuZWQgZm9yIHJlYWRpbmcuIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQotICAgICAgICByZXR1cm4gc2VsZi5fbW9kZSBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpCisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQUQKIAogICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhlIGZpbGUgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy4iIiIKICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCiAgICAgICAgIHJldHVybiBzZWxmLl9tb2RlID09IF9NT0RFX1dSSVRFCiAKLSAgICAjIE1vZGUtY2hlY2tpbmcgaGVscGVyIGZ1bmN0aW9ucy4KLQotICAgIGRlZiBfY2hlY2tfbm90X2Nsb3NlZChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlIikKLQotICAgIGRlZiBfY2hlY2tfY2FuX3JlYWQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX21vZGUgbm90IGluIChfTU9ERV9SRUFELCBfTU9ERV9SRUFEX0VPRik6Ci0gICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKLSAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG5vdCBvcGVuIGZvciByZWFkaW5nIikKLQotICAgIGRlZiBfY2hlY2tfY2FuX3dyaXRlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9tb2RlICE9IF9NT0RFX1dSSVRFOgotICAgICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCi0gICAgICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbigiRmlsZSBub3Qgb3BlbiBmb3Igd3JpdGluZyIpCi0KLSAgICBkZWYgX2NoZWNrX2Nhbl9zZWVrKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9tb2RlIG5vdCBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgotICAgICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCi0gICAgICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbigiU2Vla2luZyBpcyBvbmx5IHN1cHBvcnRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gZmlsZXMgb3BlbiBmb3IgcmVhZGluZyIpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9mcC5zZWVrYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIlRoZSB1bmRlcmx5aW5nIGZpbGUgb2JqZWN0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmciKQotCi0gICAgIyBGaWxsIHRoZSByZWFkYWhlYWQgYnVmZmVyIGlmIGl0IGlzIGVtcHR5LiBSZXR1cm5zIEZhbHNlIG9uIEVPRi4KLSAgICBkZWYgX2ZpbGxfYnVmZmVyKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICMgRGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBkYXRhLCBvdXIgY2FsbCB0byB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKLSAgICAgICAgIyByZXR1cm4gYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgdHJ5IGFnYWluIGFmdGVyIHJlYWRpbmcgYW5vdGhlciBibG9jay4KLSAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgIHJhd2Jsb2NrID0gKHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAucmVhZChfQlVGRkVSX1NJWkUpKQotCi0gICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKLSAgICAgICAgICAgICAgICAgICAgIyBFbmQtb2Ytc3RyZWFtIG1hcmtlciBhbmQgZW5kIG9mIGZpbGUuIFdlJ3JlIGdvb2QuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFEX0VPRgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaXplID0gc2VsZi5fcG9zCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgUHJvYmxlbSAtIHdlIHdlcmUgZXhwZWN0aW5nIG1vcmUgY29tcHJlc3NlZCBkYXRhLgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kLW9mLXN0cmVhbSBtYXJrZXIgd2FzIHJlYWNoZWQiKQotCi0gICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgotICAgICAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCi0gICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gQloyRGVjb21wcmVzc29yKCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICAjIFRyYWlsaW5nIGRhdGEgaXNuJ3QgYSB2YWxpZCBiemlwMiBzdHJlYW0uIFdlJ3JlIGRvbmUgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQURfRU9GCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpemUgPSBzZWxmLl9wb3MKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQotICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICMgUmVhZCBkYXRhIHVudGlsIEVPRi4KLSAgICAjIElmIHJldHVybl9kYXRhIGlzIGZhbHNlLCBjb25zdW1lIHRoZSBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGl0LgotICAgIGRlZiBfcmVhZF9hbGwoc2VsZiwgcmV0dXJuX2RhdGE9VHJ1ZSk6Ci0gICAgICAgICMgVGhlIGxvb3AgYXNzdW1lcyB0aGF0IF9idWZmZXJfb2Zmc2V0IGlzIDAuIEVuc3VyZSB0aGF0IHRoaXMgaXMgdHJ1ZS4KLSAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQotICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAotCi0gICAgICAgIGJsb2NrcyA9IFtdCi0gICAgICAgIHdoaWxlIHNlbGYuX2ZpbGxfYnVmZmVyKCk6Ci0gICAgICAgICAgICBpZiByZXR1cm5fZGF0YToKLSAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKHNlbGYuX2J1ZmZlcikKLSAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oc2VsZi5fYnVmZmVyKQotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCi0gICAgICAgIGlmIHJldHVybl9kYXRhOgotICAgICAgICAgICAgcmV0dXJuIGIiIi5qb2luKGJsb2NrcykKLQotICAgICMgUmVhZCBhIGJsb2NrIG9mIHVwIHRvIG4gYnl0ZXMuCi0gICAgIyBJZiByZXR1cm5fZGF0YSBpcyBmYWxzZSwgY29uc3VtZSB0aGUgZGF0YSB3aXRob3V0IHJldHVybmluZyBpdC4KLSAgICBkZWYgX3JlYWRfYmxvY2soc2VsZiwgbiwgcmV0dXJuX2RhdGE9VHJ1ZSk6Ci0gICAgICAgICMgSWYgd2UgaGF2ZSBlbm91Z2ggZGF0YSBidWZmZXJlZCwgcmV0dXJuIGltbWVkaWF0ZWx5LgotICAgICAgICBlbmQgPSBzZWxmLl9idWZmZXJfb2Zmc2V0ICsgbgotICAgICAgICBpZiBlbmQgPD0gbGVuKHNlbGYuX2J1ZmZlcik6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQgOiBlbmRdCi0gICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gZW5kCi0gICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGRhdGEpCi0gICAgICAgICAgICByZXR1cm4gZGF0YSBpZiByZXR1cm5fZGF0YSBlbHNlIE5vbmUKLQotICAgICAgICAjIFRoZSBsb29wIGFzc3VtZXMgdGhhdCBfYnVmZmVyX29mZnNldCBpcyAwLiBFbnN1cmUgdGhhdCB0aGlzIGlzIHRydWUuCi0gICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KLSAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKLQotICAgICAgICBibG9ja3MgPSBbXQotICAgICAgICB3aGlsZSBuID4gMCBhbmQgc2VsZi5fZmlsbF9idWZmZXIoKToKLSAgICAgICAgICAgIGlmIG4gPCBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyWzpuXQotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBuCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIKLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKLSAgICAgICAgICAgIGlmIHJldHVybl9kYXRhOgotICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoZGF0YSkKLSAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKLSAgICAgICAgICAgIG4gLT0gbGVuKGRhdGEpCi0gICAgICAgIGlmIHJldHVybl9kYXRhOgotICAgICAgICAgICAgcmV0dXJuIGIiIi5qb2luKGJsb2NrcykKLQogICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6CiAgICAgICAgICIiIlJldHVybiBidWZmZXJlZCBkYXRhIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBmaWxlIHBvc2l0aW9uLgogCkBAIC0yNzIsOSArMTY1LDEwIEBACiAgICAgICAgICIiIgogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQorICAgICAgICAgICAgIyBSZWxpZXMgb24gdGhlIHVuZG9jdW1lbnRlZCBmYWN0IHRoYXQgQnVmZmVyZWRSZWFkZXIucGVlaygpCisgICAgICAgICAgICAjIGFsd2F5cyByZXR1cm5zIGF0IGxlYXN0IG9uZSBieXRlIChleGNlcHQgYXQgRU9GKSwgaW5kZXBlbmRlbnQKKyAgICAgICAgICAgICMgb2YgdGhlIHZhbHVlIG9mIG4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIucGVlayhuKQogCiAgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KQEAgLTI4NCw0NyArMTc4LDI5IEBACiAgICAgICAgICIiIgogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgICAgICBpZiBzaXplID09IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICAgICAgZWxpZiBzaXplIDwgMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9hbGwoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9ibG9jayhzaXplKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlci5yZWFkKHNpemUpCiAKICAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSB1bmNvbXByZXNzZWQgYnl0ZXMsIHdoaWxlIHRyeWluZyB0byBhdm9pZAotICAgICAgICBtYWtpbmcgbXVsdGlwbGUgcmVhZHMgZnJvbSB0aGUgdW5kZXJseWluZyBzdHJlYW0uCisgICAgICAgIG1ha2luZyBtdWx0aXBsZSByZWFkcyBmcm9tIHRoZSB1bmRlcmx5aW5nIHN0cmVhbS4gUmVhZHMgdXAgdG8gYQorICAgICAgICBidWZmZXIncyB3b3J0aCBvZiBkYXRhIGlmIHNpemUgaXMgbmVnYXRpdmUuCiAKICAgICAgICAgUmV0dXJucyBiJycgaWYgdGhlIGZpbGUgaXMgYXQgRU9GLgogICAgICAgICAiIiIKLSAgICAgICAgIyBVc3VhbGx5LCByZWFkMSgpIGNhbGxzIF9mcC5yZWFkKCkgYXQgbW9zdCBvbmNlLiBIb3dldmVyLCBzb21ldGltZXMKLSAgICAgICAgIyB0aGlzIGRvZXMgbm90IGdpdmUgZW5vdWdoIGRhdGEgZm9yIHRoZSBkZWNvbXByZXNzb3IgdG8gbWFrZSBwcm9ncmVzcy4KLSAgICAgICAgIyBJbiB0aGlzIGNhc2Ugd2UgbWFrZSBtdWx0aXBsZSByZWFkcywgdG8gYXZvaWQgcmV0dXJuaW5nIGIiIi4KICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCBvcgotICAgICAgICAgICAgICAgICMgT25seSBjYWxsIF9maWxsX2J1ZmZlcigpIGlmIHRoZSBidWZmZXIgaXMgYWN0dWFsbHkgZW1wdHkuCi0gICAgICAgICAgICAgICAgIyBUaGlzIGdpdmVzIGEgc2lnbmlmaWNhbnQgc3BlZWR1cCBpZiAqc2l6ZSogaXMgc21hbGwuCi0gICAgICAgICAgICAgICAgKHNlbGYuX2J1ZmZlcl9vZmZzZXQgPT0gbGVuKHNlbGYuX2J1ZmZlcikgYW5kIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpKSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICAgICAgaWYgc2l6ZSA+IDA6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgKyBzaXplXQotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgKz0gbGVuKGRhdGEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKLSAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKLSAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgICAgICBzaXplID0gaW8uREVGQVVMVF9CVUZGRVJfU0laRQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlci5yZWFkMShzaXplKQogCiAgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgotICAgICAgICAiIiJSZWFkIHVwIHRvIGxlbihiKSBieXRlcyBpbnRvIGIuCisgICAgICAgICIiIlJlYWQgYnl0ZXMgaW50byBiLgogCiAgICAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkICgwIGZvciBFT0YpLgogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgcmV0dXJuIGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRpbnRvKHNlbGYsIGIpCisgICAgICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLnJlYWRpbnRvKGIpCiAKICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICIiIlJlYWQgYSBsaW5lIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBmaWxlLgpAQCAtMzM5LDE1ICsyMTUsNyBAQAogICAgICAgICAgICAgc2l6ZSA9IHNpemUuX19pbmRleF9fKCkKICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICAgICAgIyBTaG9ydGN1dCBmb3IgdGhlIGNvbW1vbiBjYXNlIC0gdGhlIHdob2xlIGxpbmUgaXMgaW4gdGhlIGJ1ZmZlci4KLSAgICAgICAgICAgIGlmIHNpemUgPCAwOgotICAgICAgICAgICAgICAgIGVuZCA9IHNlbGYuX2J1ZmZlci5maW5kKGIiXG4iLCBzZWxmLl9idWZmZXJfb2Zmc2V0KSArIDEKLSAgICAgICAgICAgICAgICBpZiBlbmQgPiAwOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQgOiBlbmRdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBlbmQKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihsaW5lKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZQotICAgICAgICAgICAgcmV0dXJuIGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRsaW5lKHNlbGYsIHNpemUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLnJlYWRsaW5lKHNpemUpCiAKICAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIHNpemU9LTEpOgogICAgICAgICAiIiJSZWFkIGEgbGlzdCBvZiBsaW5lcyBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KQEAgLTM2MSw3ICsyMjksOCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiSW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCIpCiAgICAgICAgICAgICBzaXplID0gc2l6ZS5fX2luZGV4X18oKQogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGxpbmVzKHNlbGYsIHNpemUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLnJlYWRsaW5lcyhzaXplKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJXcml0ZSBhIGJ5dGUgc3RyaW5nIHRvIHRoZSBmaWxlLgpAQCAtMzg2LDE4ICsyNTUsOSBAQAogICAgICAgICBMaW5lIHNlcGFyYXRvcnMgYXJlIG5vdCBhZGRlZCBiZXR3ZWVuIHRoZSB3cml0dGVuIGJ5dGUgc3RyaW5ncy4KICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIHJldHVybiBpby5CdWZmZXJlZElPQmFzZS53cml0ZWxpbmVzKHNlbGYsIHNlcSkKKyAgICAgICAgICAgIHJldHVybiBfY29tcHJlc3Npb24uQmFzZVN0cmVhbS53cml0ZWxpbmVzKHNlbGYsIHNlcSkKIAotICAgICMgUmV3aW5kIHRoZSBmaWxlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgc3RyZWFtLgotICAgIGRlZiBfcmV3aW5kKHNlbGYpOgotICAgICAgICBzZWxmLl9mcC5zZWVrKDAsIDApCi0gICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFECi0gICAgICAgIHNlbGYuX3BvcyA9IDAKLSAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gQloyRGVjb21wcmVzc29yKCkKLSAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCi0gICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCi0KLSAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT0wKToKKyAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1pby5TRUVLX1NFVCk6CiAgICAgICAgICIiIkNoYW5nZSB0aGUgZmlsZSBwb3NpdGlvbi4KIAogICAgICAgICBUaGUgbmV3IHBvc2l0aW9uIGlzIHNwZWNpZmllZCBieSBvZmZzZXQsIHJlbGF0aXZlIHRvIHRoZQpAQCAtNDE0LDM1ICsyNzQsMTQgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9zZWVrKCkKLQotICAgICAgICAgICAgIyBSZWNhbGN1bGF0ZSBvZmZzZXQgYXMgYW4gYWJzb2x1dGUgZmlsZSBwb3NpdGlvbi4KLSAgICAgICAgICAgIGlmIHdoZW5jZSA9PSAwOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsaWYgd2hlbmNlID09IDE6Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5fcG9zICsgb2Zmc2V0Ci0gICAgICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgotICAgICAgICAgICAgICAgICMgU2Vla2luZyByZWxhdGl2ZSB0byBFT0YgLSB3ZSBuZWVkIHRvIGtub3cgdGhlIGZpbGUncyBzaXplLgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NpemUgPCAwOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2FsbChyZXR1cm5fZGF0YT1GYWxzZSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBzZWxmLl9zaXplICsgb2Zmc2V0Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgdmFsdWUgZm9yIHdoZW5jZTogJXMiICUgKHdoZW5jZSwpKQotCi0gICAgICAgICAgICAjIE1ha2UgaXQgc28gdGhhdCBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwIGZvcndhcmQuCi0gICAgICAgICAgICBpZiBvZmZzZXQgPCBzZWxmLl9wb3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmV3aW5kKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb2Zmc2V0IC09IHNlbGYuX3BvcwotCi0gICAgICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQgZGF0YSB1bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJlZCBwb3NpdGlvbi4KLSAgICAgICAgICAgIHNlbGYuX3JlYWRfYmxvY2sob2Zmc2V0LCByZXR1cm5fZGF0YT1GYWxzZSkKLQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlci5zZWVrKG9mZnNldCwgd2hlbmNlKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLiIiIgogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLnRlbGwoKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcwogCiAKZGlmZiAtLWdpdCBhL0xpYi9jZ2kucHkgYi9MaWIvY2dpLnB5CmluZGV4IDQ1YmFkZjYuLjE4OWM2ZDUgMTAwNzU1Ci0tLSBhL0xpYi9jZ2kucHkKKysrIGIvTGliL2NnaS5weQpAQCAtMTg0LDcgKzE4NCw3IEBACiAKIAogIyBwYXJzZSBxdWVyeSBzdHJpbmcgZnVuY3Rpb24gY2FsbGVkIGZyb20gdXJscGFyc2UsCi0jIHRoaXMgaXMgZG9uZSBpbiBvcmRlciB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmxpdHkuCisjIHRoaXMgaXMgZG9uZSBpbiBvcmRlciB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogCiBkZWYgcGFyc2VfcXMocXMsIGtlZXBfYmxhbmtfdmFsdWVzPTAsIHN0cmljdF9wYXJzaW5nPTApOgogICAgICIiIlBhcnNlIGEgcXVlcnkgZ2l2ZW4gYXMgYSBzdHJpbmcgYXJndW1lbnQuIiIiCkBAIC01NjYsNiArNTY2LDEyIEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQorCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwcmludGFibGUgcmVwcmVzZW50YXRpb24uIiIiCiAgICAgICAgIHJldHVybiAiRmllbGRTdG9yYWdlKCVyLCAlciwgJXIpIiAlICgKZGlmZiAtLWdpdCBhL0xpYi9jZ2l0Yi5weSBiL0xpYi9jZ2l0Yi5weQppbmRleCA2ZWI1MmU3Li5iMjkxMTAwIDEwMDY0NAotLS0gYS9MaWIvY2dpdGIucHkKKysrIGIvTGliL2NnaXRiLnB5CkBAIC0yOTQsOSArMjk0LDggQEAKICAgICAgICAgICAgIChmZCwgcGF0aCkgPSB0ZW1wZmlsZS5ta3N0ZW1wKHN1ZmZpeD1zdWZmaXgsIGRpcj1zZWxmLmxvZ2RpcikKIAogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5mZG9wZW4oZmQsICd3JykKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRlKGRvYykKLSAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKGRvYykKICAgICAgICAgICAgICAgICBtc2cgPSAnJXMgY29udGFpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgZXJyb3IuJyAlIHBhdGgKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBtc2cgPSAnVHJpZWQgdG8gc2F2ZSB0cmFjZWJhY2sgdG8gJXMsIGJ1dCBmYWlsZWQuJyAlIHBhdGgKZGlmZiAtLWdpdCBhL0xpYi9jb2RlLnB5IGIvTGliL2NvZGUucHkKaW5kZXggZjgxODRiNi4uNTMyNDRlMyAxMDA2NDQKLS0tIGEvTGliL2NvZGUucHkKKysrIGIvTGliL2NvZGUucHkKQEAgLTcsNiArNyw3IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBhcmdwYXJzZQogZnJvbSBjb2Rlb3AgaW1wb3J0IENvbW1hbmRDb21waWxlciwgY29tcGlsZV9jb21tYW5kCiAKIF9fYWxsX18gPSBbIkludGVyYWN0aXZlSW50ZXJwcmV0ZXIiLCAiSW50ZXJhY3RpdmVDb25zb2xlIiwgImludGVyYWN0IiwKQEAgLTEzNiwyNSArMTM3LDE4IEBACiAgICAgICAgIFRoZSBvdXRwdXQgaXMgd3JpdHRlbiBieSBzZWxmLndyaXRlKCksIGJlbG93LgogCiAgICAgICAgICIiIgorICAgICAgICBzeXMubGFzdF90eXBlLCBzeXMubGFzdF92YWx1ZSwgbGFzdF90YiA9IGVpID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgc3lzLmxhc3RfdHJhY2ViYWNrID0gbGFzdF90YgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgc3lzLmxhc3RfdHlwZSA9IHR5cGUKLSAgICAgICAgICAgIHN5cy5sYXN0X3ZhbHVlID0gdmFsdWUKLSAgICAgICAgICAgIHN5cy5sYXN0X3RyYWNlYmFjayA9IHRiCi0gICAgICAgICAgICB0Ymxpc3QgPSB0cmFjZWJhY2suZXh0cmFjdF90Yih0YikKLSAgICAgICAgICAgIGRlbCB0Ymxpc3RbOjFdCi0gICAgICAgICAgICBsaW5lcyA9IHRyYWNlYmFjay5mb3JtYXRfbGlzdCh0Ymxpc3QpCi0gICAgICAgICAgICBpZiBsaW5lczoKLSAgICAgICAgICAgICAgICBsaW5lcy5pbnNlcnQoMCwgIlRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiIpCi0gICAgICAgICAgICBsaW5lcy5leHRlbmQodHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSh0eXBlLCB2YWx1ZSkpCisgICAgICAgICAgICBsaW5lcyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGVpWzBdLCBlaVsxXSwgbGFzdF90Yi50Yl9uZXh0KQorICAgICAgICAgICAgaWYgc3lzLmV4Y2VwdGhvb2sgaXMgc3lzLl9fZXhjZXB0aG9va19fOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoJycuam9pbihsaW5lcykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSWYgc29tZW9uZSBoYXMgc2V0IHN5cy5leGNlcHRob29rLCB3ZSBsZXQgdGhhdCB0YWtlIHByZWNlZGVuY2UKKyAgICAgICAgICAgICAgICAjIG92ZXIgc2VsZi53cml0ZQorICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKGVpWzBdLCBlaVsxXSwgbGFzdF90YikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRibGlzdCA9IHRiID0gTm9uZQotICAgICAgICBpZiBzeXMuZXhjZXB0aG9vayBpcyBzeXMuX19leGNlcHRob29rX186Ci0gICAgICAgICAgICBzZWxmLndyaXRlKCcnLmpvaW4obGluZXMpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBJZiBzb21lb25lIGhhcyBzZXQgc3lzLmV4Y2VwdGhvb2ssIHdlIGxldCB0aGF0IHRha2UgcHJlY2VkZW5jZQotICAgICAgICAgICAgIyBvdmVyIHNlbGYud3JpdGUKLSAgICAgICAgICAgIHN5cy5leGNlcHRob29rKHR5cGUsIHZhbHVlLCB0YikKKyAgICAgICAgICAgIGxhc3RfdGIgPSBlaSA9IE5vbmUKIAogICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKICAgICAgICAgIiIiV3JpdGUgYSBzdHJpbmcuCkBAIC0yOTksNCArMjkzLDEyIEBACiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBpbnRlcmFjdCgpCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZG9uJ3QgcHJpbnQgdmVyc2lvbiBhbmQgY29weXJpZ2h0IG1lc3NhZ2VzIikKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIGFyZ3MucSBvciBzeXMuZmxhZ3MucXVpZXQ6CisgICAgICAgIGJhbm5lciA9ICcnCisgICAgZWxzZToKKyAgICAgICAgYmFubmVyID0gTm9uZQorICAgIGludGVyYWN0KGJhbm5lcikKZGlmZiAtLWdpdCBhL0xpYi9jb2RlY3MucHkgYi9MaWIvY29kZWNzLnB5CmluZGV4IDZjZGYzZjQuLjM5ZWM4NDUgMTAwNjQ0Ci0tLSBhL0xpYi9jb2RlY3MucHkKKysrIGIvTGliL2NvZGVjcy5weQpAQCAtMjcsNyArMjcsOCBAQAogICAgICAgICAgICAiZ2V0aW5jcmVtZW50YWxkZWNvZGVyIiwgImdldHJlYWRlciIsICJnZXR3cml0ZXIiLAogICAgICAgICAgICAiZW5jb2RlIiwgImRlY29kZSIsICJpdGVyZW5jb2RlIiwgIml0ZXJkZWNvZGUiLAogICAgICAgICAgICAic3RyaWN0X2Vycm9ycyIsICJpZ25vcmVfZXJyb3JzIiwgInJlcGxhY2VfZXJyb3JzIiwKLSAgICAgICAgICAgInhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycyIsICJiYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyIsCisgICAgICAgICAgICJ4bWxjaGFycmVmcmVwbGFjZV9lcnJvcnMiLAorICAgICAgICAgICAiYmFja3NsYXNocmVwbGFjZV9lcnJvcnMiLCAibmFtZXJlcGxhY2VfZXJyb3JzIiwKICAgICAgICAgICAgInJlZ2lzdGVyX2Vycm9yIiwgImxvb2t1cF9lcnJvciJdCiAKICMjIyBDb25zdGFudHMKQEAgLTEwNSw4ICsxMDYsOCBAQAogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjwlcy4lcyBvYmplY3QgZm9yIGVuY29kaW5nICVzIGF0IDB4JXg+IiAlIFwKLSAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgIHJldHVybiAiPCVzLiVzIG9iamVjdCBmb3IgZW5jb2RpbmcgJXMgYXQgJSN4PiIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXywKICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBpZChzZWxmKSkKIAogY2xhc3MgQ29kZWM6CkBAIC0xMjYsNyArMTI3LDggQEAKICAgICAgICAgICdzdXJyb2dhdGVlc2NhcGUnIC0gcmVwbGFjZSB3aXRoIHByaXZhdGUgY29kZSBwb2ludHMgVStEQ25uLgogICAgICAgICAgJ3htbGNoYXJyZWZyZXBsYWNlJyAtIFJlcGxhY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgWE1MCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHJlZmVyZW5jZSAob25seSBmb3IgZW5jb2RpbmcpLgotICAgICAgICAgJ2JhY2tzbGFzaHJlcGxhY2UnICAtIFJlcGxhY2Ugd2l0aCBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2VzCisgICAgICAgICAnYmFja3NsYXNocmVwbGFjZScgIC0gUmVwbGFjZSB3aXRoIGJhY2tzbGFzaGVkIGVzY2FwZSBzZXF1ZW5jZXMuCisgICAgICAgICAnbmFtZXJlcGxhY2UnICAgICAgIC0gUmVwbGFjZSB3aXRoIFxcTnsuLi59IGVzY2FwZSBzZXF1ZW5jZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSBmb3IgZW5jb2RpbmcpLgogCiAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMgY2FuIGJlIGV4dGVuZGVkIHZpYSByZWdpc3Rlcl9lcnJvci4KQEAgLTM1OCw3ICszNjAsOCBAQAogICAgICAgICAgICAgICd4bWxjaGFycmVmcmVwbGFjZScgLSBSZXBsYWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIFhNTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgcmVmZXJlbmNlLgogICAgICAgICAgICAgICdiYWNrc2xhc2hyZXBsYWNlJyAgLSBSZXBsYWNlIHdpdGggYmFja3NsYXNoZWQgZXNjYXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlcyAob25seSBmb3IgZW5jb2RpbmcpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZXMuCisgICAgICAgICAgICAgJ25hbWVyZXBsYWNlJyAgICAgICAtIFJlcGxhY2Ugd2l0aCBcXE57Li4ufSBlc2NhcGUgc2VxdWVuY2VzLgogCiAgICAgICAgICAgICBUaGUgc2V0IG9mIGFsbG93ZWQgcGFyYW1ldGVyIHZhbHVlcyBjYW4gYmUgZXh0ZW5kZWQgdmlhCiAgICAgICAgICAgICByZWdpc3Rlcl9lcnJvci4KQEAgLTQyOCw3ICs0MzEsOCBAQAogCiAgICAgICAgICAgICAgJ3N0cmljdCcgLSByYWlzZSBhIFZhbHVlRXJyb3IgKG9yIGEgc3ViY2xhc3MpCiAgICAgICAgICAgICAgJ2lnbm9yZScgLSBpZ25vcmUgdGhlIGNoYXJhY3RlciBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dAotICAgICAgICAgICAgICdyZXBsYWNlJy0gcmVwbGFjZSB3aXRoIGEgc3VpdGFibGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyOworICAgICAgICAgICAgICdyZXBsYWNlJy0gcmVwbGFjZSB3aXRoIGEgc3VpdGFibGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyCisgICAgICAgICAgICAgJ2JhY2tzbGFzaHJlcGxhY2UnIC0gUmVwbGFjZSB3aXRoIGJhY2tzbGFzaGVkIGVzY2FwZSBzZXF1ZW5jZXM7CiAKICAgICAgICAgICAgIFRoZSBzZXQgb2YgYWxsb3dlZCBwYXJhbWV0ZXIgdmFsdWVzIGNhbiBiZSBleHRlbmRlZCB2aWEKICAgICAgICAgICAgIHJlZ2lzdGVyX2Vycm9yLgpAQCAtMTA4MCw2ICsxMDg0LDcgQEAKICAgICByZXBsYWNlX2Vycm9ycyA9IGxvb2t1cF9lcnJvcigicmVwbGFjZSIpCiAgICAgeG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzID0gbG9va3VwX2Vycm9yKCJ4bWxjaGFycmVmcmVwbGFjZSIpCiAgICAgYmFja3NsYXNocmVwbGFjZV9lcnJvcnMgPSBsb29rdXBfZXJyb3IoImJhY2tzbGFzaHJlcGxhY2UiKQorICAgIG5hbWVyZXBsYWNlX2Vycm9ycyA9IGxvb2t1cF9lcnJvcigibmFtZXJlcGxhY2UiKQogZXhjZXB0IExvb2t1cEVycm9yOgogICAgICMgSW4gLS1kaXNhYmxlLXVuaWNvZGUgYnVpbGRzLCB0aGVzZSBlcnJvciBoYW5kbGVyIGFyZSBtaXNzaW5nCiAgICAgc3RyaWN0X2Vycm9ycyA9IE5vbmUKQEAgLTEwODcsNiArMTA5Miw3IEBACiAgICAgcmVwbGFjZV9lcnJvcnMgPSBOb25lCiAgICAgeG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzID0gTm9uZQogICAgIGJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzID0gTm9uZQorICAgIG5hbWVyZXBsYWNlX2Vycm9ycyA9IE5vbmUKIAogIyBUZWxsIG1vZHVsZWZpbmRlciB0aGF0IHVzaW5nIGNvZGVjcyBwcm9iYWJseSBuZWVkcyB0aGUgZW5jb2RpbmdzCiAjIHBhY2thZ2UKZGlmZiAtLWdpdCBhL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weSBiL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQppbmRleCBmOTQyMTBlLi5lYmU4ZWU3IDEwMDY0NAotLS0gYS9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKKysrIGIvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CkBAIC0xLDMgKzEsMTkgQEAKKycnJ1RoaXMgbW9kdWxlIGltcGxlbWVudHMgc3BlY2lhbGl6ZWQgY29udGFpbmVyIGRhdGF0eXBlcyBwcm92aWRpbmcKK2FsdGVybmF0aXZlcyB0byBQeXRob24ncyBnZW5lcmFsIHB1cnBvc2UgYnVpbHQtaW4gY29udGFpbmVycywgZGljdCwKK2xpc3QsIHNldCwgYW5kIHR1cGxlLgorCisqIG5hbWVkdHVwbGUgICBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyB0dXBsZSBzdWJjbGFzc2VzIHdpdGggbmFtZWQgZmllbGRzCisqIGRlcXVlICAgICAgICBsaXN0LWxpa2UgY29udGFpbmVyIHdpdGggZmFzdCBhcHBlbmRzIGFuZCBwb3BzIG9uIGVpdGhlciBlbmQKKyogQ2hhaW5NYXAgICAgIGRpY3QtbGlrZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBzaW5nbGUgdmlldyBvZiBtdWx0aXBsZSBtYXBwaW5ncworKiBDb3VudGVyICAgICAgZGljdCBzdWJjbGFzcyBmb3IgY291bnRpbmcgaGFzaGFibGUgb2JqZWN0cworKiBPcmRlcmVkRGljdCAgZGljdCBzdWJjbGFzcyB0aGF0IHJlbWVtYmVycyB0aGUgb3JkZXIgZW50cmllcyB3ZXJlIGFkZGVkCisqIGRlZmF1bHRkaWN0ICBkaWN0IHN1YmNsYXNzIHRoYXQgY2FsbHMgYSBmYWN0b3J5IGZ1bmN0aW9uIHRvIHN1cHBseSBtaXNzaW5nIHZhbHVlcworKiBVc2VyRGljdCAgICAgd3JhcHBlciBhcm91bmQgZGljdGlvbmFyeSBvYmplY3RzIGZvciBlYXNpZXIgZGljdCBzdWJjbGFzc2luZworKiBVc2VyTGlzdCAgICAgd3JhcHBlciBhcm91bmQgbGlzdCBvYmplY3RzIGZvciBlYXNpZXIgbGlzdCBzdWJjbGFzc2luZworKiBVc2VyU3RyaW5nICAgd3JhcHBlciBhcm91bmQgc3RyaW5nIG9iamVjdHMgZm9yIGVhc2llciBzdHJpbmcgc3ViY2xhc3NpbmcKKworJycnCisKIF9fYWxsX18gPSBbJ2RlcXVlJywgJ2RlZmF1bHRkaWN0JywgJ25hbWVkdHVwbGUnLCAnVXNlckRpY3QnLCAnVXNlckxpc3QnLAogICAgICAgICAgICAgJ1VzZXJTdHJpbmcnLCAnQ291bnRlcicsICdPcmRlcmVkRGljdCcsICdDaGFpbk1hcCddCiAKQEAgLTcsNyArMjMsNiBAQAogaW1wb3J0IF9jb2xsZWN0aW9uc19hYmMKIF9fYWxsX18gKz0gX2NvbGxlY3Rpb25zX2FiYy5fX2FsbF9fCiAKLWZyb20gX2NvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSwgZGVmYXVsdGRpY3QKIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIgYXMgX2l0ZW1nZXR0ZXIsIGVxIGFzIF9lcQogZnJvbSBrZXl3b3JkIGltcG9ydCBpc2tleXdvcmQgYXMgX2lza2V5d29yZAogaW1wb3J0IHN5cyBhcyBfc3lzCkBAIC0xNiwxMCArMzEsNDAgQEAKIGZyb20gaXRlcnRvb2xzIGltcG9ydCByZXBlYXQgYXMgX3JlcGVhdCwgY2hhaW4gYXMgX2NoYWluLCBzdGFybWFwIGFzIF9zdGFybWFwCiBmcm9tIHJlcHJsaWIgaW1wb3J0IHJlY3Vyc2l2ZV9yZXByIGFzIF9yZWN1cnNpdmVfcmVwcgogCit0cnk6CisgICAgZnJvbSBfY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBNdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoZGVxdWUpCisKK3RyeToKKyAgICBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBPcmRlcmVkRGljdAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAorY2xhc3MgX09yZGVyZWREaWN0S2V5c1ZpZXcoS2V5c1ZpZXcpOgorCisgICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSByZXZlcnNlZChzZWxmLl9tYXBwaW5nKQorCitjbGFzcyBfT3JkZXJlZERpY3RJdGVtc1ZpZXcoSXRlbXNWaWV3KToKKworICAgIGRlZiBfX3JldmVyc2VkX18oc2VsZik6CisgICAgICAgIGZvciBrZXkgaW4gcmV2ZXJzZWQoc2VsZi5fbWFwcGluZyk6CisgICAgICAgICAgICB5aWVsZCAoa2V5LCBzZWxmLl9tYXBwaW5nW2tleV0pCisKK2NsYXNzIF9PcmRlcmVkRGljdFZhbHVlc1ZpZXcoVmFsdWVzVmlldyk6CisKKyAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYpOgorICAgICAgICBmb3Iga2V5IGluIHJldmVyc2VkKHNlbGYuX21hcHBpbmcpOgorICAgICAgICAgICAgeWllbGQgc2VsZi5fbWFwcGluZ1trZXldCisKIGNsYXNzIF9MaW5rKG9iamVjdCk6CiAgICAgX19zbG90c19fID0gJ3ByZXYnLCAnbmV4dCcsICdrZXknLCAnX193ZWFrcmVmX18nCiAKQEAgLTgzLDYgKzEyOCw4IEBACiAgICAgICAgIGxpbmtfbmV4dCA9IGxpbmsubmV4dAogICAgICAgICBsaW5rX3ByZXYubmV4dCA9IGxpbmtfbmV4dAogICAgICAgICBsaW5rX25leHQucHJldiA9IGxpbmtfcHJldgorICAgICAgICBsaW5rLnByZXYgPSBOb25lCisgICAgICAgIGxpbmsubmV4dCA9IE5vbmUKIAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgJ29kLl9faXRlcl9fKCkgPD09PiBpdGVyKG9kKScKQEAgLTE2Niw5ICsyMTMsMTkgQEAKICAgICAgICAgcmV0dXJuIHNpemUKIAogICAgIHVwZGF0ZSA9IF9fdXBkYXRlID0gTXV0YWJsZU1hcHBpbmcudXBkYXRlCi0gICAga2V5cyA9IE11dGFibGVNYXBwaW5nLmtleXMKLSAgICB2YWx1ZXMgPSBNdXRhYmxlTWFwcGluZy52YWx1ZXMKLSAgICBpdGVtcyA9IE11dGFibGVNYXBwaW5nLml0ZW1zCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgIkQua2V5cygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGtleXMiCisgICAgICAgIHJldHVybiBfT3JkZXJlZERpY3RLZXlzVmlldyhzZWxmKQorCisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICAiRC5pdGVtcygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGl0ZW1zIgorICAgICAgICByZXR1cm4gX09yZGVyZWREaWN0SXRlbXNWaWV3KHNlbGYpCisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIgorICAgICAgICByZXR1cm4gX09yZGVyZWREaWN0VmFsdWVzVmlldyhzZWxmKQorCiAgICAgX19uZV9fID0gTXV0YWJsZU1hcHBpbmcuX19uZV9fCiAKICAgICBfX21hcmtlciA9IG9iamVjdCgpCkBAIC0yMzMsNiArMjkwLDEzIEBACiAgICAgICAgIHJldHVybiBkaWN0Ll9fZXFfXyhzZWxmLCBvdGhlcikKIAogCit0cnk6CisgICAgZnJvbSBfY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBMZWF2ZSB0aGUgcHVyZSBQeXRob24gdmVyc2lvbiBpbiBwbGFjZS4KKyAgICBwYXNzCisKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBuYW1lZHR1cGxlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMzAxLDcgKzM2NSw3IEBACiAgICAgPj4+IHgsIHkgPSBwICAgICAgICAgICAgICAgICAgICAgICAgIyB1bnBhY2sgbGlrZSBhIHJlZ3VsYXIgdHVwbGUKICAgICA+Pj4geCwgeQogICAgICgxMSwgMjIpCi0gICAgPj4+IHAueCArIHAueSAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZHMgYWxzbyBhY2Nlc3NhYmxlIGJ5IG5hbWUKKyAgICA+Pj4gcC54ICsgcC55ICAgICAgICAgICAgICAgICAgICAgICAjIGZpZWxkcyBhbHNvIGFjY2Vzc2libGUgYnkgbmFtZQogICAgIDMzCiAgICAgPj4+IGQgPSBwLl9hc2RpY3QoKSAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHRvIGEgZGljdGlvbmFyeQogICAgID4+PiBkWyd4J10KQEAgLTY5NiwxNCArNzYwLDIyIEBACiAKICAgICBkZWYgX19wb3NfXyhzZWxmKToKICAgICAgICAgJ0FkZHMgYW4gZW1wdHkgY291bnRlciwgZWZmZWN0aXZlbHkgc3RyaXBwaW5nIG5lZ2F0aXZlIGFuZCB6ZXJvIGNvdW50cycKLSAgICAgICAgcmV0dXJuIHNlbGYgKyBDb3VudGVyKCkKKyAgICAgICAgcmVzdWx0ID0gQ291bnRlcigpCisgICAgICAgIGZvciBlbGVtLCBjb3VudCBpbiBzZWxmLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBjb3VudCA+IDA6CisgICAgICAgICAgICAgICAgcmVzdWx0W2VsZW1dID0gY291bnQKKyAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIF9fbmVnX18oc2VsZik6CiAgICAgICAgICcnJ1N1YnRyYWN0cyBmcm9tIGFuIGVtcHR5IGNvdW50ZXIuICBTdHJpcHMgcG9zaXRpdmUgYW5kIHplcm8gY291bnRzLAogICAgICAgICBhbmQgZmxpcHMgdGhlIHNpZ24gb24gbmVnYXRpdmUgY291bnRzLgogCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gQ291bnRlcigpIC0gc2VsZgorICAgICAgICByZXN1bHQgPSBDb3VudGVyKCkKKyAgICAgICAgZm9yIGVsZW0sIGNvdW50IGluIHNlbGYuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGNvdW50IDwgMDoKKyAgICAgICAgICAgICAgICByZXN1bHRbZWxlbV0gPSAwIC0gY291bnQKKyAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIF9rZWVwX3Bvc2l0aXZlKHNlbGYpOgogICAgICAgICAnJydJbnRlcm5hbCBtZXRob2QgdG8gc3RyaXAgZWxlbWVudHMgd2l0aCBhIG5lZ2F0aXZlIG9yIHplcm8gY291bnQnJycKQEAgLTc3OCw3ICs4NTAsOCBAQAogICAgIHRvIGNyZWF0ZSBhIHNpbmdsZSwgdXBkYXRlYWJsZSB2aWV3LgogCiAgICAgVGhlIHVuZGVybHlpbmcgbWFwcGluZ3MgYXJlIHN0b3JlZCBpbiBhIGxpc3QuICBUaGF0IGxpc3QgaXMgcHVibGljIGFuZCBjYW4KLSAgICBhY2Nlc3NlZCBvciB1cGRhdGVkIHVzaW5nIHRoZSAqbWFwcyogYXR0cmlidXRlLiAgVGhlcmUgaXMgbm8gb3RoZXIgc3RhdGUuCisgICAgYmUgYWNjZXNzZWQgb3IgdXBkYXRlZCB1c2luZyB0aGUgKm1hcHMqIGF0dHJpYnV0ZS4gIFRoZXJlIGlzIG5vIG90aGVyCisgICAgc3RhdGUuCiAKICAgICBMb29rdXBzIHNlYXJjaCB0aGUgdW5kZXJseWluZyBtYXBwaW5ncyBzdWNjZXNzaXZlbHkgdW50aWwgYSBrZXkgaXMgZm91bmQuCiAgICAgSW4gY29udHJhc3QsIHdyaXRlcywgdXBkYXRlcywgYW5kIGRlbGV0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpcnN0CkBAIC05NjMsNyArMTAzNiw2IEBACiAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLmRhdGEgPCAgc2VsZi5fX2Nhc3Qob3RoZXIpCiAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLmRhdGEgPD0gc2VsZi5fX2Nhc3Qob3RoZXIpCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLmRhdGEgPT0gc2VsZi5fX2Nhc3Qob3RoZXIpCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLmRhdGEgIT0gc2VsZi5fX2Nhc3Qob3RoZXIpCiAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLmRhdGEgPiAgc2VsZi5fX2Nhc3Qob3RoZXIpCiAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLmRhdGEgPj0gc2VsZi5fX2Nhc3Qob3RoZXIpCiAgICAgZGVmIF9fY2FzdChzZWxmLCBvdGhlcik6CkBAIC0xMDM1LDE1ICsxMTA3LDEzIEBACiAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKTogcmV0dXJuIGZsb2F0KHNlbGYuZGF0YSkKICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6IHJldHVybiBjb21wbGV4KHNlbGYuZGF0YSkKICAgICBkZWYgX19oYXNoX18oc2VsZik6IHJldHVybiBoYXNoKHNlbGYuZGF0YSkKKyAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5kYXRhWzpdLCkKIAogICAgIGRlZiBfX2VxX18oc2VsZiwgc3RyaW5nKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShzdHJpbmcsIFVzZXJTdHJpbmcpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSA9PSBzdHJpbmcuZGF0YQogICAgICAgICByZXR1cm4gc2VsZi5kYXRhID09IHN0cmluZwotICAgIGRlZiBfX25lX18oc2VsZiwgc3RyaW5nKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShzdHJpbmcsIFVzZXJTdHJpbmcpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSAhPSBzdHJpbmcuZGF0YQotICAgICAgICByZXR1cm4gc2VsZi5kYXRhICE9IHN0cmluZwogICAgIGRlZiBfX2x0X18oc2VsZiwgc3RyaW5nKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShzdHJpbmcsIFVzZXJTdHJpbmcpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSA8IHN0cmluZy5kYXRhCkBAIC0xMDgzLDkgKzExNTMsMTMgQEAKICAgICBfX3JtdWxfXyA9IF9fbXVsX18KICAgICBkZWYgX19tb2RfXyhzZWxmLCBhcmdzKToKICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuZGF0YSAlIGFyZ3MpCisgICAgZGVmIF9fcm1vZF9fKHNlbGYsIGZvcm1hdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhmb3JtYXQgJSBhcmdzKQogCiAgICAgIyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGRlZmluZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyOgogICAgIGRlZiBjYXBpdGFsaXplKHNlbGYpOiByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5kYXRhLmNhcGl0YWxpemUoKSkKKyAgICBkZWYgY2FzZWZvbGQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmLmRhdGEuY2FzZWZvbGQoKSkKICAgICBkZWYgY2VudGVyKHNlbGYsIHdpZHRoLCAqYXJncyk6CiAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmLmRhdGEuY2VudGVyKHdpZHRoLCAqYXJncykpCiAgICAgZGVmIGNvdW50KHNlbGYsIHN1Yiwgc3RhcnQ9MCwgZW5kPV9zeXMubWF4c2l6ZSk6CkBAIC0xMTA4LDYgKzExODIsOCBAQAogICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmZpbmQoc3ViLCBzdGFydCwgZW5kKQogICAgIGRlZiBmb3JtYXQoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgIHJldHVybiBzZWxmLmRhdGEuZm9ybWF0KCphcmdzLCAqKmt3ZHMpCisgICAgZGVmIGZvcm1hdF9tYXAoc2VsZiwgbWFwcGluZyk6CisgICAgICAgIHJldHVybiBzZWxmLmRhdGEuZm9ybWF0X21hcChtYXBwaW5nKQogICAgIGRlZiBpbmRleChzZWxmLCBzdWIsIHN0YXJ0PTAsIGVuZD1fc3lzLm1heHNpemUpOgogICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmluZGV4KHN1Yiwgc3RhcnQsIGVuZCkKICAgICBkZWYgaXNhbHBoYShzZWxmKTogcmV0dXJuIHNlbGYuZGF0YS5pc2FscGhhKCkKQEAgLTExMTcsNiArMTE5Myw3IEBACiAgICAgZGVmIGlzaWRlbnRpZmllcihzZWxmKTogcmV0dXJuIHNlbGYuZGF0YS5pc2lkZW50aWZpZXIoKQogICAgIGRlZiBpc2xvd2VyKHNlbGYpOiByZXR1cm4gc2VsZi5kYXRhLmlzbG93ZXIoKQogICAgIGRlZiBpc251bWVyaWMoc2VsZik6IHJldHVybiBzZWxmLmRhdGEuaXNudW1lcmljKCkKKyAgICBkZWYgaXNwcmludGFibGUoc2VsZik6IHJldHVybiBzZWxmLmRhdGEuaXNwcmludGFibGUoKQogICAgIGRlZiBpc3NwYWNlKHNlbGYpOiByZXR1cm4gc2VsZi5kYXRhLmlzc3BhY2UoKQogICAgIGRlZiBpc3RpdGxlKHNlbGYpOiByZXR1cm4gc2VsZi5kYXRhLmlzdGl0bGUoKQogICAgIGRlZiBpc3VwcGVyKHNlbGYpOiByZXR1cm4gc2VsZi5kYXRhLmlzdXBwZXIoKQpAQCAtMTEyNSw2ICsxMjAyLDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuZGF0YS5sanVzdCh3aWR0aCwgKmFyZ3MpKQogICAgIGRlZiBsb3dlcihzZWxmKTogcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuZGF0YS5sb3dlcigpKQogICAgIGRlZiBsc3RyaXAoc2VsZiwgY2hhcnM9Tm9uZSk6IHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmLmRhdGEubHN0cmlwKGNoYXJzKSkKKyAgICBtYWtldHJhbnMgPSBzdHIubWFrZXRyYW5zCiAgICAgZGVmIHBhcnRpdGlvbihzZWxmLCBzZXApOgogICAgICAgICByZXR1cm4gc2VsZi5kYXRhLnBhcnRpdGlvbihzZXApCiAgICAgZGVmIHJlcGxhY2Uoc2VsZiwgb2xkLCBuZXcsIG1heHNwbGl0PS0xKToKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlYWxsLnB5IGIvTGliL2NvbXBpbGVhbGwucHkKaW5kZXggOGUxNTY5Yy4uMGNjMGMxZCAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVhbGwucHkKKysrIGIvTGliL2NvbXBpbGVhbGwucHkKQEAgLTEsNCArMSw0IEBACi0iIiJNb2R1bGUvc2NyaXB0IHRvIGJ5dGUtY29tcGlsZSBhbGwgLnB5IGZpbGVzIHRvIC5weWMgKG9yIC5weW8pIGZpbGVzLgorIiIiTW9kdWxlL3NjcmlwdCB0byBieXRlLWNvbXBpbGUgYWxsIC5weSBmaWxlcyB0byAucHljIGZpbGVzLgogCiBXaGVuIGNhbGxlZCBhcyBhIHNjcmlwdCB3aXRoIGFyZ3VtZW50cywgdGhpcyBjb21waWxlcyB0aGUgZGlyZWN0b3JpZXMKIGdpdmVuIGFzIGFyZ3VtZW50cyByZWN1cnNpdmVseTsgdGhlIC1sIG9wdGlvbiBwcmV2ZW50cyBpdCBmcm9tCkBAIC0xNiwzMiArMTYsMjQgQEAKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc3RydWN0CiAKK3RyeToKKyAgICBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgUHJvY2Vzc1Bvb2xFeGVjdXRvcgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFByb2Nlc3NQb29sRXhlY3V0b3IgPSBOb25lCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAorCiBfX2FsbF9fID0gWyJjb21waWxlX2RpciIsImNvbXBpbGVfZmlsZSIsImNvbXBpbGVfcGF0aCJdCiAKLWRlZiBjb21waWxlX2RpcihkaXIsIG1heGxldmVscz0xMCwgZGRpcj1Ob25lLCBmb3JjZT1GYWxzZSwgcng9Tm9uZSwKLSAgICAgICAgICAgICAgICBxdWlldD1GYWxzZSwgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSk6Ci0gICAgIiIiQnl0ZS1jb21waWxlIGFsbCBtb2R1bGVzIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkgdHJlZS4KLQotICAgIEFyZ3VtZW50cyAob25seSBkaXIgaXMgcmVxdWlyZWQpOgotCi0gICAgZGlyOiAgICAgICB0aGUgZGlyZWN0b3J5IHRvIGJ5dGUtY29tcGlsZQotICAgIG1heGxldmVsczogbWF4aW11bSByZWN1cnNpb24gbGV2ZWwgKGRlZmF1bHQgMTApCi0gICAgZGRpcjogICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIHBhdGggdG8gdGhlCi0gICAgICAgICAgICAgICBmaWxlIGFzIGl0IGlzIGNvbXBpbGVkIGludG8gZWFjaCBieXRlLWNvZGUgZmlsZS4KLSAgICBmb3JjZTogICAgIGlmIFRydWUsIGZvcmNlIGNvbXBpbGF0aW9uLCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUKLSAgICBxdWlldDogICAgIGlmIFRydWUsIGJlIHF1aWV0IGR1cmluZyBjb21waWxhdGlvbgotICAgIGxlZ2FjeTogICAgaWYgVHJ1ZSwgcHJvZHVjZSBsZWdhY3kgcHljIHBhdGhzIGluc3RlYWQgb2YgUEVQIDMxNDcgcGF0aHMKLSAgICBvcHRpbWl6ZTogIG9wdGltaXphdGlvbiBsZXZlbCBvciAtMSBmb3IgbGV2ZWwgb2YgdGhlIGludGVycHJldGVyCi0gICAgIiIiCitkZWYgX3dhbGtfZGlyKGRpciwgZGRpcj1Ob25lLCBtYXhsZXZlbHM9MTAsIHF1aWV0PTApOgogICAgIGlmIG5vdCBxdWlldDoKICAgICAgICAgcHJpbnQoJ0xpc3RpbmcgeyFyfS4uLicuZm9ybWF0KGRpcikpCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQogICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBwcmludCgiQ2FuJ3QgbGlzdCB7IXJ9Ii5mb3JtYXQoZGlyKSkKKyAgICAgICAgaWYgcXVpZXQgPCAyOgorICAgICAgICAgICAgcHJpbnQoIkNhbid0IGxpc3QgeyFyfSIuZm9ybWF0KGRpcikpCiAgICAgICAgIG5hbWVzID0gW10KICAgICBuYW1lcy5zb3J0KCkKLSAgICBzdWNjZXNzID0gMQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBpZiBuYW1lID09ICdfX3B5Y2FjaGVfXyc6CiAgICAgICAgICAgICBjb250aW51ZQpAQCAtNTEsMTcgKzQzLDUzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBkZmlsZSA9IE5vbmUKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpOgotICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZmlsZShmdWxsbmFtZSwgZGRpciwgZm9yY2UsIHJ4LCBxdWlldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnYWN5LCBvcHRpbWl6ZSk6Ci0gICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKKyAgICAgICAgICAgIHlpZWxkIGZ1bGxuYW1lCiAgICAgICAgIGVsaWYgKG1heGxldmVscyA+IDAgYW5kIG5hbWUgIT0gb3MuY3VyZGlyIGFuZCBuYW1lICE9IG9zLnBhcmRpciBhbmQKICAgICAgICAgICAgICAgb3MucGF0aC5pc2RpcihmdWxsbmFtZSkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhmdWxsbmFtZSkpOgotICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZGlyKGZ1bGxuYW1lLCBtYXhsZXZlbHMgLSAxLCBkZmlsZSwgZm9yY2UsIHJ4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0LCBsZWdhY3ksIG9wdGltaXplKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX3dhbGtfZGlyKGZ1bGxuYW1lLCBkZGlyPWRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGV2ZWxzPW1heGxldmVscyAtIDEsIHF1aWV0PXF1aWV0KQorCitkZWYgY29tcGlsZV9kaXIoZGlyLCBtYXhsZXZlbHM9MTAsIGRkaXI9Tm9uZSwgZm9yY2U9RmFsc2UsIHJ4PU5vbmUsCisgICAgICAgICAgICAgICAgcXVpZXQ9MCwgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSwgd29ya2Vycz0xKToKKyAgICAiIiJCeXRlLWNvbXBpbGUgYWxsIG1vZHVsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSB0cmVlLgorCisgICAgQXJndW1lbnRzIChvbmx5IGRpciBpcyByZXF1aXJlZCk6CisKKyAgICBkaXI6ICAgICAgIHRoZSBkaXJlY3RvcnkgdG8gYnl0ZS1jb21waWxlCisgICAgbWF4bGV2ZWxzOiBtYXhpbXVtIHJlY3Vyc2lvbiBsZXZlbCAoZGVmYXVsdCAxMCkKKyAgICBkZGlyOiAgICAgIHRoZSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgIGZpbGUgYXMgaXQgaXMgY29tcGlsZWQgaW50byBlYWNoIGJ5dGUtY29kZSBmaWxlLgorICAgIGZvcmNlOiAgICAgaWYgVHJ1ZSwgZm9yY2UgY29tcGlsYXRpb24sIGV2ZW4gaWYgdGltZXN0YW1wcyBhcmUgdXAtdG8tZGF0ZQorICAgIHF1aWV0OiAgICAgZnVsbCBvdXRwdXQgd2l0aCBGYWxzZSBvciAwLCBlcnJvcnMgb25seSB3aXRoIDEsCisgICAgICAgICAgICAgICBubyBvdXRwdXQgd2l0aCAyCisgICAgbGVnYWN5OiAgICBpZiBUcnVlLCBwcm9kdWNlIGxlZ2FjeSBweWMgcGF0aHMgaW5zdGVhZCBvZiBQRVAgMzE0NyBwYXRocworICAgIG9wdGltaXplOiAgb3B0aW1pemF0aW9uIGxldmVsIG9yIC0xIGZvciBsZXZlbCBvZiB0aGUgaW50ZXJwcmV0ZXIKKyAgICB3b3JrZXJzOiAgIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIHdvcmtlcnMKKyAgICAiIiIKKyAgICBmaWxlcyA9IF93YWxrX2RpcihkaXIsIHF1aWV0PXF1aWV0LCBtYXhsZXZlbHM9bWF4bGV2ZWxzLAorICAgICAgICAgICAgICAgICAgICAgIGRkaXI9ZGRpcikKKyAgICBzdWNjZXNzID0gMQorICAgIGlmIHdvcmtlcnMgaXMgbm90IE5vbmUgYW5kIHdvcmtlcnMgIT0gMSBhbmQgUHJvY2Vzc1Bvb2xFeGVjdXRvciBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgd29ya2VycyA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd3b3JrZXJzIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byAwJykKKworICAgICAgICB3b3JrZXJzID0gd29ya2VycyBvciBOb25lCisgICAgICAgIHdpdGggUHJvY2Vzc1Bvb2xFeGVjdXRvcihtYXhfd29ya2Vycz13b3JrZXJzKSBhcyBleGVjdXRvcjoKKyAgICAgICAgICAgIHJlc3VsdHMgPSBleGVjdXRvci5tYXAocGFydGlhbChjb21waWxlX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRpcj1kZGlyLCBmb3JjZT1mb3JjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeD1yeCwgcXVpZXQ9cXVpZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnYWN5PWxlZ2FjeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT1vcHRpbWl6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzKQorICAgICAgICAgICAgc3VjY2VzcyA9IG1pbihyZXN1bHRzLCBkZWZhdWx0PTEpCisgICAgZWxzZToKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBpZiBub3QgY29tcGlsZV9maWxlKGZpbGUsIGRkaXIsIGZvcmNlLCByeCwgcXVpZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZ2FjeSwgb3B0aW1pemUpOgogICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCiAgICAgcmV0dXJuIHN1Y2Nlc3MKIAotZGVmIGNvbXBpbGVfZmlsZShmdWxsbmFtZSwgZGRpcj1Ob25lLCBmb3JjZT1GYWxzZSwgcng9Tm9uZSwgcXVpZXQ9RmFsc2UsCitkZWYgY29tcGlsZV9maWxlKGZ1bGxuYW1lLCBkZGlyPU5vbmUsIGZvcmNlPUZhbHNlLCByeD1Ob25lLCBxdWlldD0wLAogICAgICAgICAgICAgICAgICBsZWdhY3k9RmFsc2UsIG9wdGltaXplPS0xKToKICAgICAiIiJCeXRlLWNvbXBpbGUgb25lIGZpbGUuCiAKQEAgLTcxLDcgKzk5LDggQEAKICAgICBkZGlyOiAgICAgIGlmIGdpdmVuLCB0aGUgZGlyZWN0b3J5IG5hbWUgY29tcGlsZWQgaW4gdG8gdGhlCiAgICAgICAgICAgICAgICBieXRlLWNvZGUgZmlsZS4KICAgICBmb3JjZTogICAgIGlmIFRydWUsIGZvcmNlIGNvbXBpbGF0aW9uLCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUKLSAgICBxdWlldDogICAgIGlmIFRydWUsIGJlIHF1aWV0IGR1cmluZyBjb21waWxhdGlvbgorICAgIHF1aWV0OiAgICAgZnVsbCBvdXRwdXQgd2l0aCBGYWxzZSBvciAwLCBlcnJvcnMgb25seSB3aXRoIDEsCisgICAgICAgICAgICAgICBubyBvdXRwdXQgd2l0aCAyCiAgICAgbGVnYWN5OiAgICBpZiBUcnVlLCBwcm9kdWNlIGxlZ2FjeSBweWMgcGF0aHMgaW5zdGVhZCBvZiBQRVAgMzE0NyBwYXRocwogICAgIG9wdGltaXplOiAgb3B0aW1pemF0aW9uIGxldmVsIG9yIC0xIGZvciBsZXZlbCBvZiB0aGUgaW50ZXJwcmV0ZXIKICAgICAiIiIKQEAgLTg3LDExICsxMTYsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzCiAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZnVsbG5hbWUpOgogICAgICAgICBpZiBsZWdhY3k6Ci0gICAgICAgICAgICBjZmlsZSA9IGZ1bGxuYW1lICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCisgICAgICAgICAgICBjZmlsZSA9IGZ1bGxuYW1lICsgJ2MnCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgorICAgICAgICAgICAgICAgIG9wdCA9IG9wdGltaXplIGlmIG9wdGltaXplID49IDEgZWxzZSAnJwogICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lLCBvcHRpbWl6YXRpb249b3B0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lKQogICAgICAgICAgICAgY2FjaGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGNmaWxlKQpAQCAtMTE0LDcgKzE0NCwxMCBAQAogICAgICAgICAgICAgICAgIG9rID0gcHlfY29tcGlsZS5jb21waWxlKGZ1bGxuYW1lLCBjZmlsZSwgZGZpbGUsIFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemU9b3B0aW1pemUpCiAgICAgICAgICAgICBleGNlcHQgcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKKyAgICAgICAgICAgICAgICBpZiBxdWlldCA+PSAyOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcworICAgICAgICAgICAgICAgIGVsaWYgcXVpZXQ6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogRXJyb3IgY29tcGlsaW5nIHshcn0uLi4nLmZvcm1hdChmdWxsbmFtZSkpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiAnLCBlbmQ9JycpCkBAIC0xMjMsMjAgKzE1NiwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz0nYmFja3NsYXNocmVwbGFjZScpCiAgICAgICAgICAgICAgICAgbXNnID0gbXNnLmRlY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nKQogICAgICAgICAgICAgICAgIHByaW50KG1zZykKLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAogICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBPU0Vycm9yKSBhcyBlOgotICAgICAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCisgICAgICAgICAgICAgICAgaWYgcXVpZXQgPj0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKKyAgICAgICAgICAgICAgICBlbGlmIHF1aWV0OgogICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIEVycm9yIGNvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogJywgZW5kPScnKQogICAgICAgICAgICAgICAgIHByaW50KGUuX19jbGFzc19fLl9fbmFtZV9fICsgJzonLCBlKQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGlmIG9rID09IDA6CiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCiAgICAgcmV0dXJuIHN1Y2Nlc3MKIAotZGVmIGNvbXBpbGVfcGF0aChza2lwX2N1cmRpcj0xLCBtYXhsZXZlbHM9MCwgZm9yY2U9RmFsc2UsIHF1aWV0PUZhbHNlLAorZGVmIGNvbXBpbGVfcGF0aChza2lwX2N1cmRpcj0xLCBtYXhsZXZlbHM9MCwgZm9yY2U9RmFsc2UsIHF1aWV0PTAsCiAgICAgICAgICAgICAgICAgIGxlZ2FjeT1GYWxzZSwgb3B0aW1pemU9LTEpOgogICAgICIiIkJ5dGUtY29tcGlsZSBhbGwgbW9kdWxlIG9uIHN5cy5wYXRoLgogCkBAIC0xNDUsMTQgKzE3OSwxNSBAQAogICAgIHNraXBfY3VyZGlyOiBpZiB0cnVlLCBza2lwIGN1cnJlbnQgZGlyZWN0b3J5IChkZWZhdWx0IFRydWUpCiAgICAgbWF4bGV2ZWxzOiAgIG1heCByZWN1cnNpb24gbGV2ZWwgKGRlZmF1bHQgMCkKICAgICBmb3JjZTogYXMgZm9yIGNvbXBpbGVfZGlyKCkgKGRlZmF1bHQgRmFsc2UpCi0gICAgcXVpZXQ6IGFzIGZvciBjb21waWxlX2RpcigpIChkZWZhdWx0IEZhbHNlKQorICAgIHF1aWV0OiBhcyBmb3IgY29tcGlsZV9kaXIoKSAoZGVmYXVsdCAwKQogICAgIGxlZ2FjeTogYXMgZm9yIGNvbXBpbGVfZGlyKCkgKGRlZmF1bHQgRmFsc2UpCiAgICAgb3B0aW1pemU6IGFzIGZvciBjb21waWxlX2RpcigpIChkZWZhdWx0IC0xKQogICAgICIiIgogICAgIHN1Y2Nlc3MgPSAxCiAgICAgZm9yIGRpciBpbiBzeXMucGF0aDoKICAgICAgICAgaWYgKG5vdCBkaXIgb3IgZGlyID09IG9zLmN1cmRpcikgYW5kIHNraXBfY3VyZGlyOgotICAgICAgICAgICAgcHJpbnQoJ1NraXBwaW5nIGN1cnJlbnQgZGlyZWN0b3J5JykKKyAgICAgICAgICAgIGlmIHF1aWV0IDwgMjoKKyAgICAgICAgICAgICAgICBwcmludCgnU2tpcHBpbmcgY3VycmVudCBkaXJlY3RvcnknKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgYW5kIGNvbXBpbGVfZGlyKGRpciwgbWF4bGV2ZWxzLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlLCBxdWlldD1xdWlldCwKQEAgLTE2OSwxMCArMjA0LDE1IEBACiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWwnLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MCwKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9MTAsIGRlc3Q9J21heGxldmVscycsCiAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJkb24ndCByZWN1cnNlIGludG8gc3ViZGlyZWN0b3JpZXMiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1yJywgdHlwZT1pbnQsIGRlc3Q9J3JlY3Vyc2lvbicsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnY29udHJvbCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGV2ZWwuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZiBgLWxgIGFuZCBgLXJgIG9wdGlvbnMgYXJlIHNwZWNpZmllZCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZW4gYC1yYCB0YWtlcyBwcmVjZWRlbmNlLicpKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nZm9yY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZm9yY2UgcmVidWlsZCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwIHRvIGRhdGUnKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0ncXVpZXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nb3V0cHV0IG9ubHkgZXJyb3IgbWVzc2FnZXMnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgYWN0aW9uPSdjb3VudCcsIGRlc3Q9J3F1aWV0JywgZGVmYXVsdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nb3V0cHV0IG9ubHkgZXJyb3IgbWVzc2FnZXM7IC1xcSB3aWxsIHN1cHByZXNzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBlcnJvciBtZXNzYWdlcyBhcyB3ZWxsLicpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdsZWdhY3knLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndXNlIGxlZ2FjeSAocHJlLVBFUDMxNDcpIGNvbXBpbGVkIGZpbGUgbG9jYXRpb25zJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsIG1ldGF2YXI9J0RFU1RESVInLCAgZGVzdD0nZGRpcicsIGRlZmF1bHQ9Tm9uZSwKQEAgLTE5MiwxNCArMjMyLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnemVybyBvciBtb3JlIGZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gY29tcGlsZTsgaWYgbm8gYXJndW1lbnRzIGdpdmVuLCBkZWZhdWx0cyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gdGhlIGVxdWl2YWxlbnQgb2YgLWwgc3lzLnBhdGgnKSkKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1qJywgJy0td29ya2VycycsIGRlZmF1bHQ9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9aW50LCBoZWxwPSdSdW4gY29tcGlsZWFsbCBjb25jdXJyZW50bHknKQogCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKICAgICBjb21waWxlX2Rlc3RzID0gYXJncy5jb21waWxlX2Rlc3QKIAogICAgIGlmIGFyZ3Mucng6CiAgICAgICAgIGltcG9ydCByZQogICAgICAgICBhcmdzLnJ4ID0gcmUuY29tcGlsZShhcmdzLnJ4KQogCisKKyAgICBpZiBhcmdzLnJlY3Vyc2lvbiBpcyBub3QgTm9uZToKKyAgICAgICAgbWF4bGV2ZWxzID0gYXJncy5yZWN1cnNpb24KKyAgICBlbHNlOgorICAgICAgICBtYXhsZXZlbHMgPSBhcmdzLm1heGxldmVscworCiAgICAgIyBpZiBmbGlzdCBpcyBwcm92aWRlZCB0aGVuIGxvYWQgaXQKICAgICBpZiBhcmdzLmZsaXN0OgogICAgICAgICB0cnk6CkBAIC0yMDcsOSArMjU1LDEzIEBACiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgICAgICAgICAgY29tcGlsZV9kZXN0cy5hcHBlbmQobGluZS5zdHJpcCgpKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHByaW50KCJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCB7fSIuZm9ybWF0KGFyZ3MuZmxpc3QpKQorICAgICAgICAgICAgaWYgYXJncy5xdWlldCA8IDI6CisgICAgICAgICAgICAgICAgcHJpbnQoIkVycm9yIHJlYWRpbmcgZmlsZSBsaXN0IHt9Ii5mb3JtYXQoYXJncy5mbGlzdCkpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAorICAgIGlmIGFyZ3Mud29ya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgYXJncy53b3JrZXJzID0gYXJncy53b3JrZXJzIG9yIE5vbmUKKwogICAgIHN1Y2Nlc3MgPSBUcnVlCiAgICAgdHJ5OgogICAgICAgICBpZiBjb21waWxlX2Rlc3RzOgpAQCAtMjE5LDE2ICsyNzEsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnF1aWV0LCBhcmdzLmxlZ2FjeSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRmFsc2UKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgY29tcGlsZV9kaXIoZGVzdCwgYXJncy5tYXhsZXZlbHMsIGFyZ3MuZGRpciwKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZGlyKGRlc3QsIG1heGxldmVscywgYXJncy5kZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5mb3JjZSwgYXJncy5yeCwgYXJncy5xdWlldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MubGVnYWN5KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MubGVnYWN5LCB3b3JrZXJzPWFyZ3Mud29ya2Vycyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gY29tcGlsZV9wYXRoKGxlZ2FjeT1hcmdzLmxlZ2FjeSwgZm9yY2U9YXJncy5mb3JjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQ9YXJncy5xdWlldCkKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgIHByaW50KCJcbltpbnRlcnJ1cHRlZF0iKQorICAgICAgICBpZiBhcmdzLnF1aWV0IDwgMjoKKyAgICAgICAgICAgIHByaW50KCJcbltpbnRlcnJ1cHRlZF0iKQogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQppbmRleCBiMjU5ODMzLi4yOTU0ODljIDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CisrKyBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKQEAgLTMwMiwxNyArMzAyLDIwIEBACiAgICAgICAgIHdpdGggc2VsZi5fY29uZGl0aW9uOgogICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gRklOSVNIRUQ6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzxGdXR1cmUgYXQgJXMgc3RhdGU9JXMgcmFpc2VkICVzPicgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICBoZXgoaWQoc2VsZikpLAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzwlcyBhdCAlI3ggc3RhdGU9JXMgcmFpc2VkICVzPicgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgX1NUQVRFX1RPX0RFU0NSSVBUSU9OX01BUFtzZWxmLl9zdGF0ZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb24uX19jbGFzc19fLl9fbmFtZV9fKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnPEZ1dHVyZSBhdCAlcyBzdGF0ZT0lcyByZXR1cm5lZCAlcz4nICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgaGV4KGlkKHNlbGYpKSwKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8JXMgYXQgJSN4IHN0YXRlPSVzIHJldHVybmVkICVzPicgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgX1NUQVRFX1RPX0RFU0NSSVBUSU9OX01BUFtzZWxmLl9zdGF0ZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHQuX19jbGFzc19fLl9fbmFtZV9fKQotICAgICAgICAgICAgcmV0dXJuICc8RnV0dXJlIGF0ICVzIHN0YXRlPSVzPicgJSAoCi0gICAgICAgICAgICAgICAgICAgIGhleChpZChzZWxmKSksCisgICAgICAgICAgICByZXR1cm4gJzwlcyBhdCAlI3ggc3RhdGU9JXM+JyAlICgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgIGlkKHNlbGYpLAogICAgICAgICAgICAgICAgICAgIF9TVEFURV9UT19ERVNDUklQVElPTl9NQVBbc2VsZi5fc3RhdGVdKQogCiAgICAgZGVmIGNhbmNlbChzZWxmKToKQEAgLTUxNyw3ICs1MjAsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAKLSAgICBkZWYgbWFwKHNlbGYsIGZuLCAqaXRlcmFibGVzLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiBtYXAoc2VsZiwgZm4sICppdGVyYWJsZXMsIHRpbWVvdXQ9Tm9uZSwgY2h1bmtzaXplPTEpOgogICAgICAgICAiIiJSZXR1cm5zIGFuIGl0ZXJhdG9yIGVxdWl2YWxlbnQgdG8gbWFwKGZuLCBpdGVyKS4KIAogICAgICAgICBBcmdzOgpAQCAtNTI1LDYgKzUyOCwxMCBAQAogICAgICAgICAgICAgICAgIHBhc3NlZCBpdGVyYWJsZXMuCiAgICAgICAgICAgICB0aW1lb3V0OiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0LiBJZiBOb25lLCB0aGVuIHRoZXJlCiAgICAgICAgICAgICAgICAgaXMgbm8gbGltaXQgb24gdGhlIHdhaXQgdGltZS4KKyAgICAgICAgICAgIGNodW5rc2l6ZTogVGhlIHNpemUgb2YgdGhlIGNodW5rcyB0aGUgaXRlcmFibGUgd2lsbCBiZSBicm9rZW4gaW50bworICAgICAgICAgICAgICAgIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYSBjaGlsZCBwcm9jZXNzLiBUaGlzIGFyZ3VtZW50IGlzIG9ubHkKKyAgICAgICAgICAgICAgICB1c2VkIGJ5IFByb2Nlc3NQb29sRXhlY3V0b3I7IGl0IGlzIGlnbm9yZWQgYnkKKyAgICAgICAgICAgICAgICBUaHJlYWRQb29sRXhlY3V0b3IuCiAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgIEFuIGl0ZXJhdG9yIGVxdWl2YWxlbnQgdG86IG1hcChmdW5jLCAqaXRlcmFibGVzKSBidXQgdGhlIGNhbGxzIG1heQpkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CmluZGV4IDA3YjUyMjUuLjU5MGVkYmEgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKQEAgLTU1LDYgKzU1LDkgQEAKIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB3ZWFrcmVmCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHRyYWNlYmFjawogCiAjIFdvcmtlcnMgYXJlIGNyZWF0ZWQgYXMgZGFlbW9uIHRocmVhZHMgYW5kIHByb2Nlc3Nlcy4gVGhpcyBpcyBkb25lIHRvIGFsbG93IHRoZQogIyBpbnRlcnByZXRlciB0byBleGl0IHdoZW4gdGhlcmUgYXJlIHN0aWxsIGlkbGUgcHJvY2Vzc2VzIGluIGEKQEAgLTg4LDYgKzkxLDI3IEBACiAjIChGdXR1cmVzIGluIHRoZSBjYWxsIHF1ZXVlIGNhbm5vdCBiZSBjYW5jZWxsZWQpLgogRVhUUkFfUVVFVUVEX0NBTExTID0gMQogCisjIEhhY2sgdG8gZW1iZWQgc3RyaW5naWZpY2F0aW9uIG9mIHJlbW90ZSB0cmFjZWJhY2sgaW4gbG9jYWwgdHJhY2ViYWNrCisKK2NsYXNzIF9SZW1vdGVUcmFjZWJhY2soRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGIpOgorICAgICAgICBzZWxmLnRiID0gdGIKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGIKKworY2xhc3MgX0V4Y2VwdGlvbldpdGhUcmFjZWJhY2s6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4YywgdGIpOgorICAgICAgICB0YiA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKHR5cGUoZXhjKSwgZXhjLCB0YikKKyAgICAgICAgdGIgPSAnJy5qb2luKHRiKQorICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBzZWxmLnRiID0gJ1xuIiIiXG4lcyIiIicgJSB0YgorICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gX3JlYnVpbGRfZXhjLCAoc2VsZi5leGMsIHNlbGYudGIpCisKK2RlZiBfcmVidWlsZF9leGMoZXhjLCB0Yik6CisgICAgZXhjLl9fY2F1c2VfXyA9IF9SZW1vdGVUcmFjZWJhY2sodGIpCisgICAgcmV0dXJuIGV4YworCiBjbGFzcyBfV29ya0l0ZW0ob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnV0dXJlLCBmbiwgYXJncywga3dhcmdzKToKICAgICAgICAgc2VsZi5mdXR1cmUgPSBmdXR1cmUKQEAgLTEwOCw2ICsxMzIsMjYgQEAKICAgICAgICAgc2VsZi5hcmdzID0gYXJncwogICAgICAgICBzZWxmLmt3YXJncyA9IGt3YXJncwogCitkZWYgX2dldF9jaHVua3MoKml0ZXJhYmxlcywgY2h1bmtzaXplKToKKyAgICAiIiIgSXRlcmF0ZXMgb3ZlciB6aXAoKWVkIGl0ZXJhYmxlcyBpbiBjaHVua3MuICIiIgorICAgIGl0ID0gemlwKCppdGVyYWJsZXMpCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgY2h1bmsgPSB0dXBsZShpdGVydG9vbHMuaXNsaWNlKGl0LCBjaHVua3NpemUpKQorICAgICAgICBpZiBub3QgY2h1bms6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgeWllbGQgY2h1bmsKKworZGVmIF9wcm9jZXNzX2NodW5rKGZuLCBjaHVuayk6CisgICAgIiIiIFByb2Nlc3NlcyBhIGNodW5rIG9mIGFuIGl0ZXJhYmxlIHBhc3NlZCB0byBtYXAuCisKKyAgICBSdW5zIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gbWFwKCkgb24gYSBjaHVuayBvZiB0aGUKKyAgICBpdGVyYWJsZSBwYXNzZWQgdG8gbWFwLgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBydW4gaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLgorCisgICAgIiIiCisgICAgcmV0dXJuIFtmbigqYXJncykgZm9yIGFyZ3MgaW4gY2h1bmtdCisKIGRlZiBfcHJvY2Vzc193b3JrZXIoY2FsbF9xdWV1ZSwgcmVzdWx0X3F1ZXVlKToKICAgICAiIiJFdmFsdWF0ZXMgY2FsbHMgZnJvbSBjYWxsX3F1ZXVlIGFuZCBwbGFjZXMgdGhlIHJlc3VsdHMgaW4gcmVzdWx0X3F1ZXVlLgogCkBAIC0xMzAsOCArMTc0LDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgciA9IGNhbGxfaXRlbS5mbigqY2FsbF9pdGVtLmFyZ3MsICoqY2FsbF9pdGVtLmt3YXJncykKICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIHJlc3VsdF9xdWV1ZS5wdXQoX1Jlc3VsdEl0ZW0oY2FsbF9pdGVtLndvcmtfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbj1lKSkKKyAgICAgICAgICAgIGV4YyA9IF9FeGNlcHRpb25XaXRoVHJhY2ViYWNrKGUsIGUuX190cmFjZWJhY2tfXykKKyAgICAgICAgICAgIHJlc3VsdF9xdWV1ZS5wdXQoX1Jlc3VsdEl0ZW0oY2FsbF9pdGVtLndvcmtfaWQsIGV4Y2VwdGlvbj1leGMpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmVzdWx0X3F1ZXVlLnB1dChfUmVzdWx0SXRlbShjYWxsX2l0ZW0ud29ya19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PXIpKQpAQCAtMzM0LDYgKzM3OCw5IEBACiAgICAgICAgIGlmIG1heF93b3JrZXJzIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG1heF93b3JrZXJzIDw9IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWF4X3dvcmtlcnMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCIpCisKICAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKIAogICAgICAgICAjIE1ha2UgdGhlIGNhbGwgcXVldWUgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBwcm9jZXNzZXMgdG8KQEAgLTQwOCw2ICs0NTUsMzUgQEAKICAgICAgICAgICAgIHJldHVybiBmCiAgICAgc3VibWl0Ll9fZG9jX18gPSBfYmFzZS5FeGVjdXRvci5zdWJtaXQuX19kb2NfXwogCisgICAgZGVmIG1hcChzZWxmLCBmbiwgKml0ZXJhYmxlcywgdGltZW91dD1Ob25lLCBjaHVua3NpemU9MSk6CisgICAgICAgICIiIlJldHVybnMgYW4gaXRlcmF0b3IgZXF1aXZhbGVudCB0byBtYXAoZm4sIGl0ZXIpLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmbjogQSBjYWxsYWJsZSB0aGF0IHdpbGwgdGFrZSBhcyBtYW55IGFyZ3VtZW50cyBhcyB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgICBwYXNzZWQgaXRlcmFibGVzLgorICAgICAgICAgICAgdGltZW91dDogVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdC4gSWYgTm9uZSwgdGhlbiB0aGVyZQorICAgICAgICAgICAgICAgIGlzIG5vIGxpbWl0IG9uIHRoZSB3YWl0IHRpbWUuCisgICAgICAgICAgICBjaHVua3NpemU6IElmIGdyZWF0ZXIgdGhhbiBvbmUsIHRoZSBpdGVyYWJsZXMgd2lsbCBiZSBjaG9wcGVkIGludG8KKyAgICAgICAgICAgICAgICBjaHVua3Mgb2Ygc2l6ZSBjaHVua3NpemUgYW5kIHN1Ym1pdHRlZCB0byB0aGUgcHJvY2VzcyBwb29sLgorICAgICAgICAgICAgICAgIElmIHNldCB0byBvbmUsIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCB3aWxsIGJlIHNlbnQgb25lIGF0IGEgdGltZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQW4gaXRlcmF0b3IgZXF1aXZhbGVudCB0bzogbWFwKGZ1bmMsICppdGVyYWJsZXMpIGJ1dCB0aGUgY2FsbHMgbWF5CisgICAgICAgICAgICBiZSBldmFsdWF0ZWQgb3V0LW9mLW9yZGVyLgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIFRpbWVvdXRFcnJvcjogSWYgdGhlIGVudGlyZSByZXN1bHQgaXRlcmF0b3IgY291bGQgbm90IGJlIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgZ2l2ZW4gdGltZW91dC4KKyAgICAgICAgICAgIEV4Y2VwdGlvbjogSWYgZm4oKmFyZ3MpIHJhaXNlcyBmb3IgYW55IHZhbHVlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNodW5rc2l6ZSA8IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjaHVua3NpemUgbXVzdCBiZSA+PSAxLiIpCisKKyAgICAgICAgcmVzdWx0cyA9IHN1cGVyKCkubWFwKHBhcnRpYWwoX3Byb2Nlc3NfY2h1bmssIGZuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nZXRfY2h1bmtzKCppdGVyYWJsZXMsIGNodW5rc2l6ZT1jaHVua3NpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD10aW1lb3V0KQorICAgICAgICByZXR1cm4gaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGUocmVzdWx0cykKKwogICAgIGRlZiBzaHV0ZG93bihzZWxmLCB3YWl0PVRydWUpOgogICAgICAgICB3aXRoIHNlbGYuX3NodXRkb3duX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9zaHV0ZG93bl90aHJlYWQgPSBUcnVlCmRpZmYgLS1naXQgYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weSBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvdGhyZWFkLnB5CmluZGV4IGY5YmViMGYuLjNhZTQ0MmQgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvdGhyZWFkLnB5CisrKyBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvdGhyZWFkLnB5CkBAIC0xMCw2ICsxMCw3IEBACiBpbXBvcnQgcXVldWUKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB3ZWFrcmVmCitpbXBvcnQgb3MKIAogIyBXb3JrZXJzIGFyZSBjcmVhdGVkIGFzIGRhZW1vbiB0aHJlYWRzLiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgdGhlIGludGVycHJldGVyCiAjIHRvIGV4aXQgd2hlbiB0aGVyZSBhcmUgc3RpbGwgaWRsZSB0aHJlYWRzIGluIGEgVGhyZWFkUG9vbEV4ZWN1dG9yJ3MgdGhyZWFkCkBAIC04MCwxMyArODEsMjAgQEAKICAgICAgICAgX2Jhc2UuTE9HR0VSLmNyaXRpY2FsKCdFeGNlcHRpb24gaW4gd29ya2VyJywgZXhjX2luZm89VHJ1ZSkKIAogY2xhc3MgVGhyZWFkUG9vbEV4ZWN1dG9yKF9iYXNlLkV4ZWN1dG9yKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4X3dvcmtlcnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhfd29ya2Vycz1Ob25lKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBuZXcgVGhyZWFkUG9vbEV4ZWN1dG9yIGluc3RhbmNlLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgICBtYXhfd29ya2VyczogVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgdGhhdCBjYW4gYmUgdXNlZCB0bwogICAgICAgICAgICAgICAgIGV4ZWN1dGUgdGhlIGdpdmVuIGNhbGxzLgogICAgICAgICAiIiIKKyAgICAgICAgaWYgbWF4X3dvcmtlcnMgaXMgTm9uZToKKyAgICAgICAgICAgICMgVXNlIHRoaXMgbnVtYmVyIGJlY2F1c2UgVGhyZWFkUG9vbEV4ZWN1dG9yIGlzIG9mdGVuCisgICAgICAgICAgICAjIHVzZWQgdG8gb3ZlcmxhcCBJL08gaW5zdGVhZCBvZiBDUFUgd29yay4KKyAgICAgICAgICAgIG1heF93b3JrZXJzID0gKG9zLmNwdV9jb3VudCgpIG9yIDEpICogNQorICAgICAgICBpZiBtYXhfd29ya2VycyA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWF4X3dvcmtlcnMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCIpCisKICAgICAgICAgc2VsZi5fbWF4X3dvcmtlcnMgPSBtYXhfd29ya2VycwogICAgICAgICBzZWxmLl93b3JrX3F1ZXVlID0gcXVldWUuUXVldWUoKQogICAgICAgICBzZWxmLl90aHJlYWRzID0gc2V0KCkKZGlmZiAtLWdpdCBhL0xpYi9jb25maWdwYXJzZXIucHkgYi9MaWIvY29uZmlncGFyc2VyLnB5CmluZGV4IGRjYjdlYzQuLjNhOWZiNTYgMTAwNjQ0Ci0tLSBhL0xpYi9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL2NvbmZpZ3BhcnNlci5weQpAQCAtMTcsNyArMTcsOCBAQAogICAgIF9faW5pdF9fKGRlZmF1bHRzPU5vbmUsIGRpY3RfdHlwZT1fZGVmYXVsdF9kaWN0LCBhbGxvd19ub192YWx1ZT1GYWxzZSwKICAgICAgICAgICAgICBkZWxpbWl0ZXJzPSgnPScsICc6JyksIGNvbW1lbnRfcHJlZml4ZXM9KCcjJywgJzsnKSwKICAgICAgICAgICAgICBpbmxpbmVfY29tbWVudF9wcmVmaXhlcz1Ob25lLCBzdHJpY3Q9VHJ1ZSwKLSAgICAgICAgICAgICBlbXB0eV9saW5lc19pbl92YWx1ZXM9VHJ1ZSk6CisgICAgICAgICAgICAgZW1wdHlfbGluZXNfaW5fdmFsdWVzPVRydWUsIGRlZmF1bHRfc2VjdGlvbj0nREVGQVVMVCcsCisgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbj08dW5zZXQ+LCBjb252ZXJ0ZXJzPTx1bnNldD4pOgogICAgICAgICBDcmVhdGUgdGhlIHBhcnNlci4gV2hlbiBgZGVmYXVsdHMnIGlzIGdpdmVuLCBpdCBpcyBpbml0aWFsaXplZCBpbnRvIHRoZQogICAgICAgICBkaWN0aW9uYXJ5IG9yIGludHJpbnNpYyBkZWZhdWx0cy4gVGhlIGtleXMgbXVzdCBiZSBzdHJpbmdzLCB0aGUgdmFsdWVzCiAgICAgICAgIG11c3QgYmUgYXBwcm9wcmlhdGUgZm9yICUoKXMgc3RyaW5nIGludGVycG9sYXRpb24uCkBAIC00Nyw2ICs0OCwyNSBAQAogICAgICAgICBXaGVuIGBhbGxvd19ub192YWx1ZScgaXMgVHJ1ZSAoZGVmYXVsdDogRmFsc2UpLCBvcHRpb25zIHdpdGhvdXQKICAgICAgICAgdmFsdWVzIGFyZSBhY2NlcHRlZDsgdGhlIHZhbHVlIHByZXNlbnRlZCBmb3IgdGhlc2UgaXMgTm9uZS4KIAorICAgICAgICBXaGVuIGBkZWZhdWx0X3NlY3Rpb24nIGlzIGdpdmVuLCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lhbCBzZWN0aW9uIGlzCisgICAgICAgIG5hbWVkIGFjY29yZGluZ2x5LiBCeSBkZWZhdWx0IGl0IGlzIGNhbGxlZCBgYCJERUZBVUxUImBgIGJ1dCB0aGlzIGNhbgorICAgICAgICBiZSBjdXN0b21pemVkIHRvIHBvaW50IHRvIGFueSBvdGhlciB2YWxpZCBzZWN0aW9uIG5hbWUuIEl0cyBjdXJyZW50CisgICAgICAgIHZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlIGBgcGFyc2VyX2luc3RhbmNlLmRlZmF1bHRfc2VjdGlvbmBgCisgICAgICAgIGF0dHJpYnV0ZSBhbmQgbWF5IGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUuCisKKyAgICAgICAgV2hlbiBgaW50ZXJwb2xhdGlvbmAgaXMgZ2l2ZW4sIGl0IHNob3VsZCBiZSBhbiBJbnRlcnBvbGF0aW9uIHN1YmNsYXNzCisgICAgICAgIGluc3RhbmNlLiBJdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGhhbmRsZXIgZm9yIG9wdGlvbiB2YWx1ZQorICAgICAgICBwcmUtcHJvY2Vzc2luZyB3aGVuIHVzaW5nIGdldHRlcnMuIFJhd0NvbmZpZ1BhcnNlciBvYmplY3QgcyBkb24ndCBkbworICAgICAgICBhbnkgc29ydCBvZiBpbnRlcnBvbGF0aW9uLCB3aGVyZWFzIENvbmZpZ1BhcnNlciB1c2VzIGFuIGluc3RhbmNlIG9mCisgICAgICAgIEJhc2ljSW50ZXJwb2xhdGlvbi4gVGhlIGxpYnJhcnkgYWxzbyBwcm92aWRlcyBhIGBgemMuYnVpbGRib3RgYAorICAgICAgICBpbnNwaXJlZCBFeHRlbmRlZEludGVycG9sYXRpb24gaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgV2hlbiBgY29udmVydGVyc2AgaXMgZ2l2ZW4sIGl0IHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgd2hlcmUgZWFjaCBrZXkKKyAgICAgICAgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiBhIHR5cGUgY29udmVydGVyIGFuZCBlYWNoIHZhbHVlIGlzIGEgY2FsbGFibGUKKyAgICAgICAgaW1wbGVtZW50aW5nIHRoZSBjb252ZXJzaW9uIGZyb20gc3RyaW5nIHRvIHRoZSBkZXNpcmVkIGRhdGF0eXBlLiBFdmVyeQorICAgICAgICBjb252ZXJ0ZXIgZ2V0cyBpdHMgY29ycmVzcG9uZGluZyBnZXQqKCkgbWV0aG9kIG9uIHRoZSBwYXJzZXIgb2JqZWN0IGFuZAorICAgICAgICBzZWN0aW9uIHByb3hpZXMuCisKICAgICBzZWN0aW9ucygpCiAgICAgICAgIFJldHVybiBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBuYW1lcywgc2FucyBERUZBVUxULgogCkBAIC0xMjksOSArMTQ5LDExIEBACiAKIF9fYWxsX18gPSBbIk5vU2VjdGlvbkVycm9yIiwgIkR1cGxpY2F0ZU9wdGlvbkVycm9yIiwgIkR1cGxpY2F0ZVNlY3Rpb25FcnJvciIsCiAgICAgICAgICAgICJOb09wdGlvbkVycm9yIiwgIkludGVycG9sYXRpb25FcnJvciIsICJJbnRlcnBvbGF0aW9uRGVwdGhFcnJvciIsCi0gICAgICAgICAgICJJbnRlcnBvbGF0aW9uU3ludGF4RXJyb3IiLCAiUGFyc2luZ0Vycm9yIiwKLSAgICAgICAgICAgIk1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IiLAorICAgICAgICAgICAiSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvciIsICJJbnRlcnBvbGF0aW9uU3ludGF4RXJyb3IiLAorICAgICAgICAgICAiUGFyc2luZ0Vycm9yIiwgIk1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IiLAogICAgICAgICAgICAiQ29uZmlnUGFyc2VyIiwgIlNhZmVDb25maWdQYXJzZXIiLCAiUmF3Q29uZmlnUGFyc2VyIiwKKyAgICAgICAgICAgIkludGVycG9sYXRpb24iLCAiQmFzaWNJbnRlcnBvbGF0aW9uIiwgICJFeHRlbmRlZEludGVycG9sYXRpb24iLAorICAgICAgICAgICAiTGVnYWN5SW50ZXJwb2xhdGlvbiIsICJTZWN0aW9uUHJveHkiLCAiQ29udmVydGVyTWFwcGluZyIsCiAgICAgICAgICAgICJERUZBVUxUU0VDVCIsICJNQVhfSU5URVJQT0xBVElPTl9ERVBUSCJdCiAKIERFRkFVTFRTRUNUID0gIkRFRkFVTFQiCkBAIC00MDgsNyArNDMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdiA9IG1hcFt2YXJdCiAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBJbnRlcnBvbGF0aW9uTWlzc2luZ09wdGlvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCBzZWN0aW9uLCByYXd2YWwsIHZhcikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgc2VjdGlvbiwgcmF3dmFsLCB2YXIpIGZyb20gTm9uZQogICAgICAgICAgICAgICAgIGlmICIlIiBpbiB2OgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnRlcnBvbGF0ZV9zb21lKHBhcnNlciwgb3B0aW9uLCBhY2N1bSwgdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCBtYXAsIGRlcHRoICsgMSkKQEAgLTQ4MSw3ICs1MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3JlIHRoYW4gb25lICc6JyBmb3VuZDogJXIiICUgKHJlc3QsKSkKICAgICAgICAgICAgICAgICBleGNlcHQgKEtleUVycm9yLCBOb1NlY3Rpb25FcnJvciwgTm9PcHRpb25FcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgIjoiLmpvaW4ocGF0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgIjoiLmpvaW4ocGF0aCkpIGZyb20gTm9uZQogICAgICAgICAgICAgICAgIGlmICIkIiBpbiB2OgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnRlcnBvbGF0ZV9zb21lKHBhcnNlciwgb3B0LCBhY2N1bSwgdiwgc2VjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KHBhcnNlci5pdGVtcyhzZWN0LCByYXc9VHJ1ZSkpLApAQCAtNTE0LDcgKzUzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgJSB2YXJzCiAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgZS5hcmdzWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCBzZWN0aW9uLCByYXd2YWwsIGUuYXJnc1swXSkgZnJvbSBOb25lCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIHZhbHVlIGFuZCAiJSgiIGluIHZhbHVlOgpAQCAtNTc5LDExICs2MDEsMTIgQEAKICAgICAgICAgICAgICAgICAgY29tbWVudF9wcmVmaXhlcz0oJyMnLCAnOycpLCBpbmxpbmVfY29tbWVudF9wcmVmaXhlcz1Ob25lLAogICAgICAgICAgICAgICAgICBzdHJpY3Q9VHJ1ZSwgZW1wdHlfbGluZXNfaW5fdmFsdWVzPVRydWUsCiAgICAgICAgICAgICAgICAgIGRlZmF1bHRfc2VjdGlvbj1ERUZBVUxUU0VDVCwKLSAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbj1fVU5TRVQpOgorICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uPV9VTlNFVCwgY29udmVydGVycz1fVU5TRVQpOgogCiAgICAgICAgIHNlbGYuX2RpY3QgPSBkaWN0X3R5cGUKICAgICAgICAgc2VsZi5fc2VjdGlvbnMgPSBzZWxmLl9kaWN0KCkKICAgICAgICAgc2VsZi5fZGVmYXVsdHMgPSBzZWxmLl9kaWN0KCkKKyAgICAgICAgc2VsZi5fY29udmVydGVycyA9IENvbnZlcnRlck1hcHBpbmcoc2VsZikKICAgICAgICAgc2VsZi5fcHJveGllcyA9IHNlbGYuX2RpY3QoKQogICAgICAgICBzZWxmLl9wcm94aWVzW2RlZmF1bHRfc2VjdGlvbl0gPSBTZWN0aW9uUHJveHkoc2VsZiwgZGVmYXVsdF9zZWN0aW9uKQogICAgICAgICBpZiBkZWZhdWx0czoKQEAgLTYxMSw2ICs2MzQsOCBAQAogICAgICAgICAgICAgc2VsZi5faW50ZXJwb2xhdGlvbiA9IHNlbGYuX0RFRkFVTFRfSU5URVJQT0xBVElPTgogICAgICAgICBpZiBzZWxmLl9pbnRlcnBvbGF0aW9uIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9pbnRlcnBvbGF0aW9uID0gSW50ZXJwb2xhdGlvbigpCisgICAgICAgIGlmIGNvbnZlcnRlcnMgaXMgbm90IF9VTlNFVDoKKyAgICAgICAgICAgIHNlbGYuX2NvbnZlcnRlcnMudXBkYXRlKGNvbnZlcnRlcnMpCiAKICAgICBkZWYgZGVmYXVsdHMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9kZWZhdWx0cwpAQCAtNjQ2LDcgKzY3MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9wdHMgPSBzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXS5jb3B5KCkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmFpc2UgTm9TZWN0aW9uRXJyb3Ioc2VjdGlvbikKKyAgICAgICAgICAgIHJhaXNlIE5vU2VjdGlvbkVycm9yKHNlY3Rpb24pIGZyb20gTm9uZQogICAgICAgICBvcHRzLnVwZGF0ZShzZWxmLl9kZWZhdWx0cykKICAgICAgICAgcmV0dXJuIGxpc3Qob3B0cy5rZXlzKCkpCiAKQEAgLTc3NCwzNiArNzk5LDMxIEBACiAgICAgZGVmIF9nZXQoc2VsZiwgc2VjdGlvbiwgY29udiwgb3B0aW9uLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBjb252KHNlbGYuZ2V0KHNlY3Rpb24sIG9wdGlvbiwgKiprd2FyZ3MpKQogCi0gICAgZGVmIGdldGludChzZWxmLCBzZWN0aW9uLCBvcHRpb24sICosIHJhdz1GYWxzZSwgdmFycz1Ob25lLAotICAgICAgICAgICAgICAgZmFsbGJhY2s9X1VOU0VUKToKKyAgICBkZWYgX2dldF9jb252KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgY29udiwgKiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICBmYWxsYmFjaz1fVU5TRVQsICoqa3dhcmdzKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldChzZWN0aW9uLCBpbnQsIG9wdGlvbiwgcmF3PXJhdywgdmFycz12YXJzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldChzZWN0aW9uLCBjb252LCBvcHRpb24sIHJhdz1yYXcsIHZhcnM9dmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCiAgICAgICAgIGV4Y2VwdCAoTm9TZWN0aW9uRXJyb3IsIE5vT3B0aW9uRXJyb3IpOgogICAgICAgICAgICAgaWYgZmFsbGJhY2sgaXMgX1VOU0VUOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICAjIGdldGludCwgZ2V0ZmxvYXQgYW5kIGdldGJvb2xlYW4gcHJvdmlkZWQgZGlyZWN0bHkgZm9yIGJhY2t3YXJkcyBjb21wYXQKKyAgICBkZWYgZ2V0aW50KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgKiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUsCisgICAgICAgICAgICAgICBmYWxsYmFjaz1fVU5TRVQsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jb252KHNlY3Rpb24sIG9wdGlvbiwgaW50LCByYXc9cmF3LCB2YXJzPXZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjaz1mYWxsYmFjaywgKiprd2FyZ3MpCiAKICAgICBkZWYgZ2V0ZmxvYXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCAqLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgZmFsbGJhY2s9X1VOU0VUKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldChzZWN0aW9uLCBmbG9hdCwgb3B0aW9uLCByYXc9cmF3LCB2YXJzPXZhcnMpCi0gICAgICAgIGV4Y2VwdCAoTm9TZWN0aW9uRXJyb3IsIE5vT3B0aW9uRXJyb3IpOgotICAgICAgICAgICAgaWYgZmFsbGJhY2sgaXMgX1VOU0VUOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworICAgICAgICAgICAgICAgICBmYWxsYmFjaz1fVU5TRVQsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jb252KHNlY3Rpb24sIG9wdGlvbiwgZmxvYXQsIHJhdz1yYXcsIHZhcnM9dmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPWZhbGxiYWNrLCAqKmt3YXJncykKIAogICAgIGRlZiBnZXRib29sZWFuKHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgKiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9X1VOU0VUKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldChzZWN0aW9uLCBzZWxmLl9jb252ZXJ0X3RvX2Jvb2xlYW4sIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3PXJhdywgdmFycz12YXJzKQotICAgICAgICBleGNlcHQgKE5vU2VjdGlvbkVycm9yLCBOb09wdGlvbkVycm9yKToKLSAgICAgICAgICAgIGlmIGZhbGxiYWNrIGlzIF9VTlNFVDoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2sKKyAgICAgICAgICAgICAgICAgICBmYWxsYmFjaz1fVU5TRVQsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jb252KHNlY3Rpb24sIG9wdGlvbiwgc2VsZi5fY29udmVydF90b19ib29sZWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3PXJhdywgdmFycz12YXJzLCBmYWxsYmFjaz1mYWxsYmFjaywgKiprd2FyZ3MpCiAKICAgICBkZWYgaXRlbXMoc2VsZiwgc2VjdGlvbj1fVU5TRVQsIHJhdz1GYWxzZSwgdmFycz1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcyBmb3IgZWFjaCBvcHRpb24gaW4gYSBzZWN0aW9uLgpAQCAtODc1LDcgKzg5NSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VjdGRpY3QgPSBzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIE5vU2VjdGlvbkVycm9yKHNlY3Rpb24pCisgICAgICAgICAgICAgICAgcmFpc2UgTm9TZWN0aW9uRXJyb3Ioc2VjdGlvbikgZnJvbSBOb25lCiAgICAgICAgIHNlY3RkaWN0W3NlbGYub3B0aW9ueGZvcm0ob3B0aW9uKV0gPSB2YWx1ZQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZwLCBzcGFjZV9hcm91bmRfZGVsaW1pdGVycz1UcnVlKToKQEAgLTkxNiw3ICs5MzYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlY3RkaWN0ID0gc2VsZi5fc2VjdGlvbnNbc2VjdGlvbl0KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBOb1NlY3Rpb25FcnJvcihzZWN0aW9uKQorICAgICAgICAgICAgICAgIHJhaXNlIE5vU2VjdGlvbkVycm9yKHNlY3Rpb24pIGZyb20gTm9uZQogICAgICAgICBvcHRpb24gPSBzZWxmLm9wdGlvbnhmb3JtKG9wdGlvbikKICAgICAgICAgZXhpc3RlZCA9IG9wdGlvbiBpbiBzZWN0ZGljdAogICAgICAgICBpZiBleGlzdGVkOgpAQCAtMTE1Myw2ICsxMTczLDEwIEBACiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm9wdGlvbiB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzIikKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb252ZXJ0ZXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29udmVydGVycworCiAKIGNsYXNzIENvbmZpZ1BhcnNlcihSYXdDb25maWdQYXJzZXIpOgogICAgICIiIkNvbmZpZ1BhcnNlciBpbXBsZW1lbnRpbmcgaW50ZXJwb2xhdGlvbi4iIiIKQEAgLTExOTMsNiArMTIxNywxMCBAQAogICAgICAgICAiIiJDcmVhdGVzIGEgdmlldyBvbiBhIHNlY3Rpb24gb2YgdGhlIHNwZWNpZmllZCBgbmFtZWAgaW4gYHBhcnNlcmAuIiIiCiAgICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgogICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBmb3IgY29udiBpbiBwYXJzZXIuY29udmVydGVyczoKKyAgICAgICAgICAgIGtleSA9ICdnZXQnICsgY29udgorICAgICAgICAgICAgZ2V0dGVyID0gZnVuY3Rvb2xzLnBhcnRpYWwoc2VsZi5nZXQsIF9pbXBsPWdldGF0dHIocGFyc2VyLCBrZXkpKQorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrZXksIGdldHRlcikKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICc8U2VjdGlvbjoge30+Jy5mb3JtYXQoc2VsZi5fbmFtZSkKQEAgLTEyMjYsMjIgKzEyNTQsNiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlci5kZWZhdWx0cygpCiAKLSAgICBkZWYgZ2V0KHNlbGYsIG9wdGlvbiwgZmFsbGJhY2s9Tm9uZSwgKiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VyLmdldChzZWxmLl9uYW1lLCBvcHRpb24sIHJhdz1yYXcsIHZhcnM9dmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9ZmFsbGJhY2spCi0KLSAgICBkZWYgZ2V0aW50KHNlbGYsIG9wdGlvbiwgZmFsbGJhY2s9Tm9uZSwgKiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VyLmdldGludChzZWxmLl9uYW1lLCBvcHRpb24sIHJhdz1yYXcsIHZhcnM9dmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9ZmFsbGJhY2spCi0KLSAgICBkZWYgZ2V0ZmxvYXQoc2VsZiwgb3B0aW9uLCBmYWxsYmFjaz1Ob25lLCAqLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wYXJzZXIuZ2V0ZmxvYXQoc2VsZi5fbmFtZSwgb3B0aW9uLCByYXc9cmF3LCB2YXJzPXZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9ZmFsbGJhY2spCi0KLSAgICBkZWYgZ2V0Ym9vbGVhbihzZWxmLCBvcHRpb24sIGZhbGxiYWNrPU5vbmUsICosIHJhdz1GYWxzZSwgdmFycz1Ob25lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlci5nZXRib29sZWFuKHNlbGYuX25hbWUsIG9wdGlvbiwgcmF3PXJhdywgdmFycz12YXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9ZmFsbGJhY2spCi0KICAgICBAcHJvcGVydHkKICAgICBkZWYgcGFyc2VyKHNlbGYpOgogICAgICAgICAjIFRoZSBwYXJzZXIgb2JqZWN0IG9mIHRoZSBwcm94eSBpcyByZWFkLW9ubHkuCkBAIC0xMjUxLDMgKzEyNjMsNzcgQEAKICAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAgIyBUaGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBvbiBhIHByb3h5IGlzIHJlYWQtb25seS4KICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBnZXQoc2VsZiwgb3B0aW9uLCBmYWxsYmFjaz1Ob25lLCAqLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSwKKyAgICAgICAgICAgIF9pbXBsPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiR2V0IGFuIG9wdGlvbiB2YWx1ZS4KKworICAgICAgICBVbmxlc3MgYGZhbGxiYWNrYCBpcyBwcm92aWRlZCwgYE5vbmVgIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIG9wdGlvbgorICAgICAgICBpcyBub3QgZm91bmQuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgSWYgYF9pbXBsYCBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIGJlIGEgZ2V0dGVyIG1ldGhvZCBvbiB0aGUgcGFyc2VyCisgICAgICAgICMgb2JqZWN0IHRoYXQgcHJvdmlkZXMgdGhlIGRlc2lyZWQgdHlwZSBjb252ZXJzaW9uLgorICAgICAgICBpZiBub3QgX2ltcGw6CisgICAgICAgICAgICBfaW1wbCA9IHNlbGYuX3BhcnNlci5nZXQKKyAgICAgICAgcmV0dXJuIF9pbXBsKHNlbGYuX25hbWUsIG9wdGlvbiwgcmF3PXJhdywgdmFycz12YXJzLAorICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9ZmFsbGJhY2ssICoqa3dhcmdzKQorCisKK2NsYXNzIENvbnZlcnRlck1hcHBpbmcoTXV0YWJsZU1hcHBpbmcpOgorICAgICIiIkVuYWJsZXMgcmV1c2Ugb2YgZ2V0KigpIG1ldGhvZHMgYmV0d2VlbiB0aGUgcGFyc2VyIGFuZCBzZWN0aW9uIHByb3hpZXMuCisKKyAgICBJZiBhIHBhcnNlciBjbGFzcyBpbXBsZW1lbnRzIGEgZ2V0dGVyIGRpcmVjdGx5LCB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbgorICAgIGtleSB3aWxsIGJlIGBgTm9uZWBgLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIGNvbnZlcnRlciBuYW1lIGhlcmUgZW5hYmxlcworICAgIHNlY3Rpb24gcHJveGllcyB0byBmaW5kIGFuZCB1c2UgdGhlIGltcGxlbWVudGF0aW9uIG9uIHRoZSBwYXJzZXIgY2xhc3MuCisgICAgIiIiCisKKyAgICBHRVRURVJDUkUgPSByZS5jb21waWxlKHIiXmdldCg/UDxuYW1lPi4rKSQiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnNlcik6CisgICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgorICAgICAgICBzZWxmLl9kYXRhID0ge30KKyAgICAgICAgZm9yIGdldHRlciBpbiBkaXIoc2VsZi5fcGFyc2VyKToKKyAgICAgICAgICAgIG0gPSBzZWxmLkdFVFRFUkNSRS5tYXRjaChnZXR0ZXIpCisgICAgICAgICAgICBpZiBub3QgbSBvciBub3QgY2FsbGFibGUoZ2V0YXR0cihzZWxmLl9wYXJzZXIsIGdldHRlcikpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLl9kYXRhW20uZ3JvdXAoJ25hbWUnKV0gPSBOb25lICAgIyBTZWUgY2xhc3MgZG9jc3RyaW5nLgorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9kYXRhW2tleV0KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgayA9ICdnZXQnICsga2V5CisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbmNvbXBhdGlibGUga2V5OiB7fSAodHlwZToge30pJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJy5mb3JtYXQoa2V5LCB0eXBlKGtleSkpKQorICAgICAgICBpZiBrID09ICdnZXQnOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5jb21wYXRpYmxlIGtleTogY2Fubm90IHVzZSAiIiBhcyBhIG5hbWUnKQorICAgICAgICBzZWxmLl9kYXRhW2tleV0gPSB2YWx1ZQorICAgICAgICBmdW5jID0gZnVuY3Rvb2xzLnBhcnRpYWwoc2VsZi5fcGFyc2VyLl9nZXRfY29udiwgY29udj12YWx1ZSkKKyAgICAgICAgZnVuYy5jb252ZXJ0ZXIgPSB2YWx1ZQorICAgICAgICBzZXRhdHRyKHNlbGYuX3BhcnNlciwgaywgZnVuYykKKyAgICAgICAgZm9yIHByb3h5IGluIHNlbGYuX3BhcnNlci52YWx1ZXMoKToKKyAgICAgICAgICAgIGdldHRlciA9IGZ1bmN0b29scy5wYXJ0aWFsKHByb3h5LmdldCwgX2ltcGw9ZnVuYykKKyAgICAgICAgICAgIHNldGF0dHIocHJveHksIGssIGdldHRlcikKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBrID0gJ2dldCcgKyAoa2V5IG9yIE5vbmUpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisgICAgICAgIGRlbCBzZWxmLl9kYXRhW2tleV0KKyAgICAgICAgZm9yIGluc3QgaW4gaXRlcnRvb2xzLmNoYWluKChzZWxmLl9wYXJzZXIsKSwgc2VsZi5fcGFyc2VyLnZhbHVlcygpKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWxhdHRyKGluc3QsIGspCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBkb24ndCByYWlzZSBzaW5jZSB0aGUgZW50cnkgd2FzIHByZXNlbnQgaW4gX2RhdGEsIHNpbGVudGx5CisgICAgICAgICAgICAgICAgIyBjbGVhbiB1cAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX2RhdGEpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9kYXRhKQpkaWZmIC0tZ2l0IGEvTGliL2NvbnRleHRsaWIucHkgYi9MaWIvY29udGV4dGxpYi5weQppbmRleCAwN2IyMjYxLi5kNDRlZGQ2IDEwMDY0NAotLS0gYS9MaWIvY29udGV4dGxpYi5weQorKysgYi9MaWIvY29udGV4dGxpYi5weQpAQCAtNSw3ICs1LDcgQEAKIGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogCiBfX2FsbF9fID0gWyJjb250ZXh0bWFuYWdlciIsICJjbG9zaW5nIiwgIkNvbnRleHREZWNvcmF0b3IiLCAiRXhpdFN0YWNrIiwKLSAgICAgICAgICAgInJlZGlyZWN0X3N0ZG91dCIsICJzdXBwcmVzcyJdCisgICAgICAgICAgICJyZWRpcmVjdF9zdGRvdXQiLCAicmVkaXJlY3Rfc3RkZXJyIiwgInN1cHByZXNzIl0KIAogCiBjbGFzcyBDb250ZXh0RGVjb3JhdG9yKG9iamVjdCk6CkBAIC03NywxMCArNzcsMjAgQEAKICAgICAgICAgICAgICAgICBzZWxmLmdlbi50aHJvdyh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKQogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZ2VuZXJhdG9yIGRpZG4ndCBzdG9wIGFmdGVyIHRocm93KCkiKQogICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXhjOgotICAgICAgICAgICAgICAgICMgU3VwcHJlc3MgdGhlIGV4Y2VwdGlvbiAqdW5sZXNzKiBpdCdzIHRoZSBzYW1lIGV4Y2VwdGlvbiB0aGF0CisgICAgICAgICAgICAgICAgIyBTdXBwcmVzcyBTdG9wSXRlcmF0aW9uICp1bmxlc3MqIGl0J3MgdGhlIHNhbWUgZXhjZXB0aW9uIHRoYXQKICAgICAgICAgICAgICAgICAjIHdhcyBwYXNzZWQgdG8gdGhyb3coKS4gIFRoaXMgcHJldmVudHMgYSBTdG9wSXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgIyByYWlzZWQgaW5zaWRlIHRoZSAid2l0aCIgc3RhdGVtZW50IGZyb20gYmVpbmcgc3VwcHJlc3NlZAorICAgICAgICAgICAgICAgICMgcmFpc2VkIGluc2lkZSB0aGUgIndpdGgiIHN0YXRlbWVudCBmcm9tIGJlaW5nIHN1cHByZXNzZWQuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4YyBpcyBub3QgdmFsdWUKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICMgRG9uJ3QgcmUtcmFpc2UgdGhlIHBhc3NlZCBpbiBleGNlcHRpb24uIChpc3N1ZTI3MTEyKQorICAgICAgICAgICAgICAgIGlmIGV4YyBpcyB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgIyBMaWtld2lzZSwgYXZvaWQgc3VwcHJlc3NpbmcgaWYgYSBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICMgd2FzIHBhc3NlZCB0byB0aHJvdygpIGFuZCBsYXRlciB3cmFwcGVkIGludG8gYSBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgICAgICAjIChzZWUgUEVQIDQ3OSkuCisgICAgICAgICAgICAgICAgaWYgZXhjLl9fY2F1c2VfXyBpcyB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAjIG9ubHkgcmUtcmFpc2UgaWYgaXQncyAqbm90KiB0aGUgZXhjZXB0aW9uIHRoYXQgd2FzCiAgICAgICAgICAgICAgICAgIyBwYXNzZWQgdG8gdGhyb3coKSwgYmVjYXVzZSBfX2V4aXRfXygpIG11c3Qgbm90IHJhaXNlCkBAIC0xNTEsOCArMTYxLDI3IEBACiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CiAgICAgICAgIHNlbGYudGhpbmcuY2xvc2UoKQogCi1jbGFzcyByZWRpcmVjdF9zdGRvdXQ6Ci0gICAgIiIiQ29udGV4dCBtYW5hZ2VyIGZvciB0ZW1wb3JhcmlseSByZWRpcmVjdGluZyBzdGRvdXQgdG8gYW5vdGhlciBmaWxlCisKK2NsYXNzIF9SZWRpcmVjdFN0cmVhbToKKworICAgIF9zdHJlYW0gPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3X3RhcmdldCk6CisgICAgICAgIHNlbGYuX25ld190YXJnZXQgPSBuZXdfdGFyZ2V0CisgICAgICAgICMgV2UgdXNlIGEgbGlzdCBvZiBvbGQgdGFyZ2V0cyB0byBtYWtlIHRoaXMgQ00gcmUtZW50cmFudAorICAgICAgICBzZWxmLl9vbGRfdGFyZ2V0cyA9IFtdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9vbGRfdGFyZ2V0cy5hcHBlbmQoZ2V0YXR0cihzeXMsIHNlbGYuX3N0cmVhbSkpCisgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLl9zdHJlYW0sIHNlbGYuX25ld190YXJnZXQpCisgICAgICAgIHJldHVybiBzZWxmLl9uZXdfdGFyZ2V0CisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjdHlwZSwgZXhjaW5zdCwgZXhjdGIpOgorICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5fc3RyZWFtLCBzZWxmLl9vbGRfdGFyZ2V0cy5wb3AoKSkKKworCitjbGFzcyByZWRpcmVjdF9zdGRvdXQoX1JlZGlyZWN0U3RyZWFtKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgZm9yIHRlbXBvcmFyaWx5IHJlZGlyZWN0aW5nIHN0ZG91dCB0byBhbm90aGVyIGZpbGUuCiAKICAgICAgICAgIyBIb3cgdG8gc2VuZCBoZWxwKCkgdG8gc3RkZXJyCiAgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KHN5cy5zdGRlcnIpOgpAQCAtMTY0LDE4ICsxOTMsMTMgQEAKICAgICAgICAgICAgICAgICBoZWxwKHBvdykKICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXdfdGFyZ2V0KToKLSAgICAgICAgc2VsZi5fbmV3X3RhcmdldCA9IG5ld190YXJnZXQKLSAgICAgICAgIyBXZSB1c2UgYSBsaXN0IG9mIG9sZCB0YXJnZXRzIHRvIG1ha2UgdGhpcyBDTSByZS1lbnRyYW50Ci0gICAgICAgIHNlbGYuX29sZF90YXJnZXRzID0gW10KKyAgICBfc3RyZWFtID0gInN0ZG91dCIKIAotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX29sZF90YXJnZXRzLmFwcGVuZChzeXMuc3Rkb3V0KQotICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5fbmV3X3RhcmdldAotICAgICAgICByZXR1cm4gc2VsZi5fbmV3X3RhcmdldAogCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y3R5cGUsIGV4Y2luc3QsIGV4Y3RiKToKLSAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX29sZF90YXJnZXRzLnBvcCgpCitjbGFzcyByZWRpcmVjdF9zdGRlcnIoX1JlZGlyZWN0U3RyZWFtKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgZm9yIHRlbXBvcmFyaWx5IHJlZGlyZWN0aW5nIHN0ZGVyciB0byBhbm90aGVyIGZpbGUuIiIiCisKKyAgICBfc3RyZWFtID0gInN0ZGVyciIKIAogCiBjbGFzcyBzdXBwcmVzczoKZGlmZiAtLWdpdCBhL0xpYi9jb3B5LnB5IGIvTGliL2NvcHkucHkKaW5kZXggZjBmYjQ0My4uOTcyYjk0YSAxMDA2NDQKLS0tIGEvTGliL2NvcHkucHkKKysrIGIvTGliL2NvcHkucHkKQEAgLTk0LDcgKzk0LDcgQEAKICAgICBlbHNlOgogICAgICAgICByZWR1Y3RvciA9IGdldGF0dHIoeCwgIl9fcmVkdWNlX2V4X18iLCBOb25lKQogICAgICAgICBpZiByZWR1Y3RvcjoKLSAgICAgICAgICAgIHJ2ID0gcmVkdWN0b3IoMikKKyAgICAgICAgICAgIHJ2ID0gcmVkdWN0b3IoNCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJlZHVjdG9yID0gZ2V0YXR0cih4LCAiX19yZWR1Y2VfXyIsIE5vbmUpCiAgICAgICAgICAgICBpZiByZWR1Y3RvcjoKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJlZHVjdG9yID0gZ2V0YXR0cih4LCAiX19yZWR1Y2VfZXhfXyIsIE5vbmUpCiAgICAgICAgICAgICAgICAgICAgIGlmIHJlZHVjdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgcnYgPSByZWR1Y3RvcigyKQorICAgICAgICAgICAgICAgICAgICAgICAgcnYgPSByZWR1Y3Rvcig0KQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVkdWN0b3IgPSBnZXRhdHRyKHgsICJfX3JlZHVjZV9fIiwgTm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlZHVjdG9yOgpAQCAtMjA3LDcgKzIwNyw2IEBACiBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgcGFzcwogZFt0eXBlXSA9IF9kZWVwY29weV9hdG9taWMKLWRbcmFuZ2VdID0gX2RlZXBjb3B5X2F0b21pYwogZFt0eXBlcy5CdWlsdGluRnVuY3Rpb25UeXBlXSA9IF9kZWVwY29weV9hdG9taWMKIGRbdHlwZXMuRnVuY3Rpb25UeXBlXSA9IF9kZWVwY29weV9hdG9taWMKIGRbd2Vha3JlZi5yZWZdID0gX2RlZXBjb3B5X2F0b21pYwpAQCAtMjIxLDE3ICsyMjAsMTUgQEAKIGRbbGlzdF0gPSBfZGVlcGNvcHlfbGlzdAogCiBkZWYgX2RlZXBjb3B5X3R1cGxlKHgsIG1lbW8pOgotICAgIHkgPSBbXQotICAgIGZvciBhIGluIHg6Ci0gICAgICAgIHkuYXBwZW5kKGRlZXBjb3B5KGEsIG1lbW8pKQorICAgIHkgPSBbZGVlcGNvcHkoYSwgbWVtbykgZm9yIGEgaW4geF0KICAgICAjIFdlJ3JlIG5vdCBnb2luZyB0byBwdXQgdGhlIHR1cGxlIGluIHRoZSBtZW1vLCBidXQgaXQncyBzdGlsbCBpbXBvcnRhbnQgd2UKICAgICAjIGNoZWNrIGZvciBpdCwgaW4gY2FzZSB0aGUgdHVwbGUgY29udGFpbnMgcmVjdXJzaXZlIG11dGFibGUgc3RydWN0dXJlcy4KICAgICB0cnk6CiAgICAgICAgIHJldHVybiBtZW1vW2lkKHgpXQogICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgcGFzcwotICAgIGZvciBpIGluIHJhbmdlKGxlbih4KSk6Ci0gICAgICAgIGlmIHhbaV0gaXMgbm90IHlbaV06CisgICAgZm9yIGssIGogaW4gemlwKHgsIHkpOgorICAgICAgICBpZiBrIGlzIG5vdCBqOgogICAgICAgICAgICAgeSA9IHR1cGxlKHkpCiAgICAgICAgICAgICBicmVhawogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvY3N2LnB5IGIvTGliL2Nzdi5weQppbmRleCBhNTZlZWQ4Li5jYTQwZTVlIDEwMDY0NAotLS0gYS9MaWIvY3N2LnB5CisrKyBiL0xpYi9jc3YucHkKQEAgLTE0NywxNiArMTQ3LDEzIEBACiAgICAgICAgICAgICBpZiB3cm9uZ19maWVsZHM6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZGljdCBjb250YWlucyBmaWVsZHMgbm90IGluIGZpZWxkbmFtZXM6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgIi5qb2luKFtyZXByKHgpIGZvciB4IGluIHdyb25nX2ZpZWxkc10pKQotICAgICAgICByZXR1cm4gW3Jvd2RpY3QuZ2V0KGtleSwgc2VsZi5yZXN0dmFsKSBmb3Iga2V5IGluIHNlbGYuZmllbGRuYW1lc10KKyAgICAgICAgcmV0dXJuIChyb3dkaWN0LmdldChrZXksIHNlbGYucmVzdHZhbCkgZm9yIGtleSBpbiBzZWxmLmZpZWxkbmFtZXMpCiAKICAgICBkZWYgd3JpdGVyb3coc2VsZiwgcm93ZGljdCk6CiAgICAgICAgIHJldHVybiBzZWxmLndyaXRlci53cml0ZXJvdyhzZWxmLl9kaWN0X3RvX2xpc3Qocm93ZGljdCkpCiAKICAgICBkZWYgd3JpdGVyb3dzKHNlbGYsIHJvd2RpY3RzKToKLSAgICAgICAgcm93cyA9IFtdCi0gICAgICAgIGZvciByb3dkaWN0IGluIHJvd2RpY3RzOgotICAgICAgICAgICAgcm93cy5hcHBlbmQoc2VsZi5fZGljdF90b19saXN0KHJvd2RpY3QpKQotICAgICAgICByZXR1cm4gc2VsZi53cml0ZXIud3JpdGVyb3dzKHJvd3MpCisgICAgICAgIHJldHVybiBzZWxmLndyaXRlci53cml0ZXJvd3MobWFwKHNlbGYuX2RpY3RfdG9fbGlzdCwgcm93ZGljdHMpKQogCiAjIEd1YXJkIFNuaWZmZXIncyB0eXBlIGNoZWNraW5nIGFnYWluc3QgYnVpbGRzIHRoYXQgZXhjbHVkZSBjb21wbGV4KCkKIHRyeToKQEAgLTIzMSwyMCArMjI4LDIxIEBACiAgICAgICAgIHF1b3RlcyA9IHt9CiAgICAgICAgIGRlbGltcyA9IHt9CiAgICAgICAgIHNwYWNlcyA9IDAKKyAgICAgICAgZ3JvdXBpbmRleCA9IHJlZ2V4cC5ncm91cGluZGV4CiAgICAgICAgIGZvciBtIGluIG1hdGNoZXM6Ci0gICAgICAgICAgICBuID0gcmVnZXhwLmdyb3VwaW5kZXhbJ3F1b3RlJ10gLSAxCisgICAgICAgICAgICBuID0gZ3JvdXBpbmRleFsncXVvdGUnXSAtIDEKICAgICAgICAgICAgIGtleSA9IG1bbl0KICAgICAgICAgICAgIGlmIGtleToKICAgICAgICAgICAgICAgICBxdW90ZXNba2V5XSA9IHF1b3Rlcy5nZXQoa2V5LCAwKSArIDEKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBuID0gcmVnZXhwLmdyb3VwaW5kZXhbJ2RlbGltJ10gLSAxCisgICAgICAgICAgICAgICAgbiA9IGdyb3VwaW5kZXhbJ2RlbGltJ10gLSAxCiAgICAgICAgICAgICAgICAga2V5ID0gbVtuXQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBrZXkgYW5kIChkZWxpbWl0ZXJzIGlzIE5vbmUgb3Iga2V5IGluIGRlbGltaXRlcnMpOgogICAgICAgICAgICAgICAgIGRlbGltc1trZXldID0gZGVsaW1zLmdldChrZXksIDApICsgMQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG4gPSByZWdleHAuZ3JvdXBpbmRleFsnc3BhY2UnXSAtIDEKKyAgICAgICAgICAgICAgICBuID0gZ3JvdXBpbmRleFsnc3BhY2UnXSAtIDEKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgbVtuXToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CmluZGV4IDVjODAzZmYuLjBkODYwNzggMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkKKysrIGIvTGliL2N0eXBlcy9fX2luaXRfXy5weQpAQCAtNDcsNyArNDcsNyBAQAogZGVmIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGluaXQsIHNpemU9Tm9uZSk6CiAgICAgIiIiY3JlYXRlX3N0cmluZ19idWZmZXIoYUJ5dGVzKSAtPiBjaGFyYWN0ZXIgYXJyYXkKICAgICBjcmVhdGVfc3RyaW5nX2J1ZmZlcihhbkludGVnZXIpIC0+IGNoYXJhY3RlciBhcnJheQotICAgIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGFTdHJpbmcsIGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CisgICAgY3JlYXRlX3N0cmluZ19idWZmZXIoYUJ5dGVzLCBhbkludGVnZXIpIC0+IGNoYXJhY3RlciBhcnJheQogICAgICIiIgogICAgIGlmIGlzaW5zdGFuY2UoaW5pdCwgYnl0ZXMpOgogICAgICAgICBpZiBzaXplIGlzIE5vbmU6CkBAIC0yMzcsMTQgKzIzNyw4IEBACiAKIGNsYXNzIGNfY2hhcl9wKF9TaW1wbGVDRGF0YSk6CiAgICAgX3R5cGVfID0gInoiCi0gICAgaWYgX29zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgaWYgbm90IHdpbmRsbC5rZXJuZWwzMi5Jc0JhZFN0cmluZ1B0ckEoc2VsZiwgLTEpOgotICAgICAgICAgICAgICAgIHJldHVybiAiJXMoJXIpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi52YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAiJXMoJXMpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgY2FzdChzZWxmLCBjX3ZvaWRfcCkudmFsdWUpCi0gICAgZWxzZToKLSAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICIlcyglcykiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBjYXN0KHNlbGYsIGNfdm9pZF9wKS52YWx1ZSkKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMoJXMpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgY192b2lkX3AuZnJvbV9idWZmZXIoc2VsZikudmFsdWUpCiBfY2hlY2tfc2l6ZShjX2NoYXJfcCwgIlAiKQogCiBjbGFzcyBjX3ZvaWRfcChfU2ltcGxlQ0RhdGEpOgpAQCAtMjU5LDYgKzI1Myw4IEBACiAKIGNsYXNzIGNfd2NoYXJfcChfU2ltcGxlQ0RhdGEpOgogICAgIF90eXBlXyA9ICJaIgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyglcykiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBjX3ZvaWRfcC5mcm9tX2J1ZmZlcihzZWxmKS52YWx1ZSkKIAogY2xhc3MgY193Y2hhcihfU2ltcGxlQ0RhdGEpOgogICAgIF90eXBlXyA9ICJ1IgpAQCAtMzUzLDcgKzM0OSw3IEBACiAgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSBoYW5kbGUKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8JXMgJyVzJywgaGFuZGxlICV4IGF0ICV4PiIgJSBcCisgICAgICAgIHJldHVybiAiPCVzICclcycsIGhhbmRsZSAleCBhdCAlI3g+IiAlIFwKICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fbmFtZSwKICAgICAgICAgICAgICAgICAoc2VsZi5faGFuZGxlICYgKF9zeXMubWF4c2l6ZSoyICsgMSkpLAogICAgICAgICAgICAgICAgIGlkKHNlbGYpICYgKF9zeXMubWF4c2l6ZSoyICsgMSkpCkBAIC0zNzIsOCArMzY4LDggQEAKICAgICAgICAgcmV0dXJuIGZ1bmMKIAogY2xhc3MgUHlETEwoQ0RMTCk6Ci0gICAgIiIiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBQeXRob24gbGlicmFyeSBpdHNlbGYuICBJdCBhbGxvd3MgdG8KLSAgICBhY2Nlc3MgUHl0aG9uIEFQSSBmdW5jdGlvbnMuICBUaGUgR0lMIGlzIG5vdCByZWxlYXNlZCwgYW5kCisgICAgIiIiVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBQeXRob24gbGlicmFyeSBpdHNlbGYuICBJdCBhbGxvd3MKKyAgICBhY2Nlc3NpbmcgUHl0aG9uIEFQSSBmdW5jdGlvbnMuICBUaGUgR0lMIGlzIG5vdCByZWxlYXNlZCwgYW5kCiAgICAgUHl0aG9uIGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgogICAgICIiIgogICAgIF9mdW5jX2ZsYWdzXyA9IF9GVU5DRkxBR19DREVDTCB8IF9GVU5DRkxBR19QWVRIT05BUEkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvX2VuZGlhbi5weSBiL0xpYi9jdHlwZXMvX2VuZGlhbi5weQppbmRleCBkYWU2NWZjLi4zNzQ0NGJkIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL19lbmRpYW4ucHkKKysrIGIvTGliL2N0eXBlcy9fZW5kaWFuLnB5CkBAIC00NSw2ICs0NSw3IEBACiAKICAgICBjbGFzcyBCaWdFbmRpYW5TdHJ1Y3R1cmUoU3RydWN0dXJlLCBtZXRhY2xhc3M9X3N3YXBwZWRfbWV0YSk6CiAgICAgICAgICIiIlN0cnVjdHVyZSB3aXRoIGJpZyBlbmRpYW4gYnl0ZSBvcmRlciIiIgorICAgICAgICBfX3Nsb3RzX18gPSAoKQogICAgICAgICBfc3dhcHBlZGJ5dGVzXyA9IE5vbmUKIAogZWxpZiBzeXMuYnl0ZW9yZGVyID09ICJiaWciOgpAQCAtNTMsNiArNTQsNyBAQAogICAgIEJpZ0VuZGlhblN0cnVjdHVyZSA9IFN0cnVjdHVyZQogICAgIGNsYXNzIExpdHRsZUVuZGlhblN0cnVjdHVyZShTdHJ1Y3R1cmUsIG1ldGFjbGFzcz1fc3dhcHBlZF9tZXRhKToKICAgICAgICAgIiIiU3RydWN0dXJlIHdpdGggbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyIiIiCisgICAgICAgIF9fc2xvdHNfXyA9ICgpCiAgICAgICAgIF9zd2FwcGVkYnl0ZXNfID0gTm9uZQogCiBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy9tYWNob2xpYi9SRUFETUUuY3R5cGVzIGIvTGliL2N0eXBlcy9tYWNob2xpYi9SRUFETUUuY3R5cGVzCmluZGV4IDRlMTBjYmUuLjI4NjZlOWYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvbWFjaG9saWIvUkVBRE1FLmN0eXBlcworKysgYi9MaWIvY3R5cGVzL21hY2hvbGliL1JFQURNRS5jdHlwZXMKQEAgLTEsNCArMSw0IEBACi1GaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBmcm9tIGZyb20gQm9iIElwcG9saXRvJ3MgcHkyYXBwLgorRmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY29tZSBmcm9tIEJvYiBJcHBvbGl0bydzIHB5MmFwcC4KIAogTGljZW5zZTogQW55IGNvbXBvbmVudHMgb2YgdGhlIHB5MmFwcCBzdWl0ZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKIHRoZSBNSVQgb3IgUFNGIG9wZW4gc291cmNlIGxpY2Vuc2VzLgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5CmluZGV4IDhjYTc3ZTAuLjRlZDU2NmIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKQEAgLTI0LDIwICsyNCwyNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaWEpLCBhbGVuKQogCiAgICAgICAgICAgICAjIHNsb3QgdmFsdWVzIG9rPwotICAgICAgICAgICAgdmFsdWVzID0gW2lhW2ldIGZvciBpIGluIHJhbmdlKGxlbihpbml0KSldCisgICAgICAgICAgICB2YWx1ZXMgPSBbaWFbaV0gZm9yIGkgaW4gcmFuZ2UoYWxlbildCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgaW5pdCkKIAorICAgICAgICAgICAgIyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHNob3VsZCBiZSBjYXVnaHQKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6IGlhW2FsZW5dCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOiBpYVstYWxlbi0xXQorCiAgICAgICAgICAgICAjIGNoYW5nZSB0aGUgaXRlbXMKICAgICAgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IHNldGl0ZW0KICAgICAgICAgICAgIG5ld192YWx1ZXMgPSBsaXN0KHJhbmdlKDQyLCA0MithbGVuKSkKICAgICAgICAgICAgIFtzZXRpdGVtKGlhLCBuLCBuZXdfdmFsdWVzW25dKSBmb3IgbiBpbiByYW5nZShhbGVuKV0KLSAgICAgICAgICAgIHZhbHVlcyA9IFtpYVtpXSBmb3IgaSBpbiByYW5nZShsZW4oaW5pdCkpXQorICAgICAgICAgICAgdmFsdWVzID0gW2lhW2ldIGZvciBpIGluIHJhbmdlKGFsZW4pXQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMsIG5ld192YWx1ZXMpCiAKICAgICAgICAgICAgICMgYXJlIHRoZSBpdGVtcyBpbml0aWFsaXplZCB0byAwPwogICAgICAgICAgICAgaWEgPSBpbnRfYXJyYXkoKQotICAgICAgICAgICAgdmFsdWVzID0gW2lhW2ldIGZvciBpIGluIHJhbmdlKGxlbihpbml0KSldCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgWzBdICogbGVuKGluaXQpKQorICAgICAgICAgICAgdmFsdWVzID0gW2lhW2ldIGZvciBpIGluIHJhbmdlKGFsZW4pXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMsIFswXSAqIGFsZW4pCiAKICAgICAgICAgICAgICMgVG9vIG1hbnkgaW5pdGlhbGl6ZXJzIHNob3VsZCBiZSBjYXVnaHQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGludF9hcnJheSwgKnJhbmdlKGFsZW4qMikpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkKaW5kZXggOTQ4YjQ2My4uMmEzNDg0YiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXNfcGFyYW1ldGVyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FzX3BhcmFtZXRlci5weQpAQCAtMTk0LDcgKzE5NCw3IEBACiAKICAgICAgICAgYSA9IEEoKQogICAgICAgICBhLl9hc19wYXJhbWV0ZXJfID0gYQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IpOgogICAgICAgICAgICAgY19pbnQuZnJvbV9wYXJhbShhKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J5dGVzd2FwLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKaW5kZXggNDI3YmI4Yi4uMDFjOTdlOCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKQEAgLTIyLDYgKzIyLDI2IEBACiAgICAgICAgICAgICBzZXRhdHRyKGJpdHMsICJpJXMiICUgaSwgMSkKICAgICAgICAgICAgIGR1bXAoYml0cykKIAorICAgIGRlZiB0ZXN0X3Nsb3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBCaWdQb2ludChCaWdFbmRpYW5TdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwgKCJ5IiwgY19pbnQpXQorCisgICAgICAgIGNsYXNzIExvd1BvaW50KExpdHRsZUVuZGlhblN0cnVjdHVyZSk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAoKQorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19pbnQpLCAoInkiLCBjX2ludCldCisKKyAgICAgICAgYmlnID0gQmlnUG9pbnQoKQorICAgICAgICBsaXR0bGUgPSBMb3dQb2ludCgpCisgICAgICAgIGJpZy54ID0gNAorICAgICAgICBiaWcueSA9IDIKKyAgICAgICAgbGl0dGxlLnggPSAyCisgICAgICAgIGxpdHRsZS55ID0gNAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGJpZy56ID0gNDIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBsaXR0bGUueiA9IDI0CisKICAgICBkZWYgdGVzdF9lbmRpYW5fc2hvcnQoc2VsZik6CiAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNfc2hvcnQuX19jdHlwZV9sZV9fLCBjX3Nob3J0KQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkKaW5kZXggZTZiYzE5ZC4uMjBjNTMzNyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9maW5kLnB5CkBAIC0xLDUgKzEsNSBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKK2ltcG9ydCBvcywgb3MucGF0aAogaW1wb3J0IHN5cwogaW1wb3J0IHRlc3Quc3VwcG9ydAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKQEAgLTY0LDYgKzY0LDExIEBACiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdsaWJfZ2xlIG5vdCBhdmFpbGFibGUnKQogICAgICAgICBzZWxmLmdsZS5nbGVHZXRKb2luU3R5bGUKIAorICAgIGRlZiB0ZXN0X3NoZWxsX2luamVjdGlvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZmluZF9saWJyYXJ5KCc7IGVjaG8gSGVsbG8gc2hlbGwgPiAnICsgdGVzdC5zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmxleGlzdHModGVzdC5zdXBwb3J0LlRFU1RGTikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKKwogIyBPbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgc3VmZml4IGlzICcuc28nLAogIyBhdCBsZWFzdCBzb21lIGxpYnJhcmllcyBjYW4gYmUgbG9hZGVkIGFzIGF0dHJpYnV0ZXMgb2YgdGhlIGNkbGwKICMgb2JqZWN0LCBzaW5jZSBjdHlwZXMgbm93IHRyaWVzIGxvYWRpbmcgdGhlIGxpYiBhZ2FpbgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Zyb21idWZmZXIucHkKaW5kZXggODY5NTRmZS4uMjljNWExOSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5CkBAIC00NCw3ICs0NCw3IEBACiAgICAgICAgICAgICAoY19jaGFyICogMTYpLmZyb21fYnVmZmVyKG1lbW9yeXZpZXcoYiJhIiAqIDE2KSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCBDIGNvbnRpZ3VvdXMiKToKICAgICAgICAgICAgIChjX2NoYXIgKiAxNikuZnJvbV9idWZmZXIobWVtb3J5dmlldyhieXRlYXJyYXkoYiJhIiAqIDE2KSlbOjotMV0pCi0gICAgICAgIG1zZyA9ICJkb2VzIG5vdCBoYXZlIHRoZSBidWZmZXIgaW50ZXJmYWNlIgorICAgICAgICBtc2cgPSAiYnl0ZXMtbGlrZSBvYmplY3QgaXMgcmVxdWlyZWQiCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CiAgICAgICAgICAgICAoY19jaGFyICogMTYpLmZyb21fYnVmZmVyKCJhIiAqIDE2KQogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9sb2FkaW5nLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weQppbmRleCA0ZmI4OTY0Li4yODQ2OGMxIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9sb2FkaW5nLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkKQEAgLTUyLDcgKzUyLDkgQEAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lIGluICgibnQiLCAiY2UiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzIChOVC9DRSknKQogICAgIGRlZiB0ZXN0X2xvYWRfbGlicmFyeShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobGliY19uYW1lKQorICAgICAgICAjIENSVCBpcyBubyBsb25nZXIgZGlyZWN0bHkgbG9hZGFibGUuIFNlZSBpc3N1ZTIzNjA2IGZvciB0aGUKKyAgICAgICAgIyBkaXNjdXNzaW9uIGFib3V0IGFsdGVybmF0aXZlIGFwcHJvYWNoZXMuCisgICAgICAgICNzZWxmLmFzc2VydElzTm90Tm9uZShsaWJjX25hbWUpCiAgICAgICAgIGlmIHRlc3Quc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoZmluZF9saWJyYXJ5KCJrZXJuZWwzMiIpKQogICAgICAgICAgICAgcHJpbnQoZmluZF9saWJyYXJ5KCJ1c2VyMzIiKSkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9udW1iZXJzLnB5CmluZGV4IDJhZmNhMjYuLmJhNGY1NjMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weQpAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KHYpLnZhbHVlLCB0cnV0aCh2KSkKIAogICAgIGRlZiB0ZXN0X3R5cGVlcnJvcihzZWxmKToKLSAgICAgICAgIyBPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIGNvbnRydWN0b3IsCisgICAgICAgICMgT25seSBudW1iZXJzIGFyZSBhbGxvd2VkIGluIHRoZSBjb25zdHJ1Y3RvciwKICAgICAgICAgIyBvdGhlcndpc2UgVHlwZUVycm9yIGlzIHJhaXNlZAogICAgICAgICBmb3IgdCBpbiBzaWduZWRfdHlwZXMgKyB1bnNpZ25lZF90eXBlcyArIGZsb2F0X3R5cGVzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCAiIikKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BvaW50ZXJzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkKaW5kZXggNmVlYTU4Zi4uNzUxZjg1ZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkKQEAgLTIyLDcgKzIyLDEwIEBACiAgICAgZGVmIHRlc3RfcGFzc19wb2ludGVycyhzZWxmKToKICAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCiAgICAgICAgIGZ1bmMgPSBkbGwuX3Rlc3RmdW5jX3BfcAotICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2xvbmcKKyAgICAgICAgaWYgc2l6ZW9mKGNfbG9uZ2xvbmcpID09IHNpemVvZihjX3ZvaWRfcCk6CisgICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2xvbmdsb25nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2xvbmcKIAogICAgICAgICBpID0gY19pbnQoMTIzNDU2NzgpCiAjIyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IChQT0lOVEVSKGNfaW50KSwpCkBAIC01Myw5ICs1NiwxMyBAQAogICAgICAgICAjIEMgY29kZToKICAgICAgICAgIyAgIGludCB4ID0gMTIzMjE7CiAgICAgICAgICMgICByZXMgPSAmeAotICAgICAgICByZXMuY29udGVudHMgPSBjX2ludCgxMjMyMSkKKyAgICAgICAgeCA9IGNfaW50KDEyMzIxKQorICAgICAgICByZXMuY29udGVudHMgPSB4CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS52YWx1ZSwgNTQzNDUpCiAKKyAgICAgICAgeC52YWx1ZSA9IC05OQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5jb250ZW50cy52YWx1ZSwgLTk5KQorCiAgICAgZGVmIHRlc3RfY2FsbGJhY2tzX3dpdGhfcG9pbnRlcnMoc2VsZik6CiAgICAgICAgICMgYSBmdW5jdGlvbiB0eXBlIHJlY2VpdmluZyBhIHBvaW50ZXIKICAgICAgICAgUFJPVE9UWVBFID0gQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKGNfaW50KSkKQEAgLTEyOCw5ICsxMzUsMTAgQEAKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICBwID0gcG9pbnRlcihjX2ludCg0MikpCi0gICAgICAgICMgQWx0aG91Z2ggYSBwb2ludGVyIGNhbiBiZSBpbmRleGVkLCBpdCBoYSBubyBsZW5ndGgKKyAgICAgICAgIyBBbHRob3VnaCBhIHBvaW50ZXIgY2FuIGJlIGluZGV4ZWQsIGl0IGhhcyBubyBsZW5ndGgKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFswXSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFswOjFdLCBbNDJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29udGVudHMudmFsdWUsIDQyKQogCiAgICAgZGVmIHRlc3RfY2hhcnBwKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkKaW5kZXggODE4YzExMS4uY2QwYzY0OSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5CkBAIC02OSw3ICs2OSwxMCBAQAogCiAgICAgZGVmIHRlc3RfaW50X3BvaW50ZXJfYXJnKHNlbGYpOgogICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCi0gICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfbG9uZworICAgICAgICBpZiBzaXplb2YoY19sb25nbG9uZykgPT0gc2l6ZW9mKGNfdm9pZF9wKToKKyAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfbG9uZ2xvbmcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfbG9uZwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGZ1bmMoMCkpCiAKICAgICAgICAgY2kgPSBjX2ludCgwKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKaW5kZXggODRkNDU2Yy4uYzRhNjUxYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlnbm1lbnQoWFgpLCBhbGlnbm1lbnQoWCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFhYKSwgY2FsY3NpemUoIjNzIDNzIDBzIikpCiAKLSAgICBkZWYgdGVzdF9lbXRweShzZWxmKToKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKICAgICAgICAgIyBJIGhhZCBwcm9ibGVtcyB3aXRoIHRoZXNlCiAgICAgICAgICMKICAgICAgICAgIyBBbHRob3VnaCB0aGVzZSBhcmUgcGF0aG9sb2dpY2FsIGNhc2VzOiBFbXB0eSBTdHJ1Y3R1cmVzIQpAQCAtMjI3LDEwICsyMjcsMTAgQEAKIAogICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX2luaXRpYWxpemVycyhzZWxmKToKICAgICAgICAgY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKLSAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwgKCJ5IiwgY19pbnQpXQorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJwaGkiLCBjX2Zsb2F0KSwgKCJyaG8iLCBjX2Zsb2F0KV0KICAgICAgICAgIyBjb25mbGljdGluZyBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQT0lOVCwgMiwgMywgeD00KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBPSU5ULCAyLCAzLCB5PTQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAicGhpIiwgUE9JTlQsIDIsIDMsIHBoaT00KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgInJobyIsIFBPSU5ULCAyLCAzLCByaG89NCkKIAogICAgICAgICAjIHRvbyBtYW55IGluaXRpYWxpemVycwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBPSU5ULCAyLCAzLCA0KQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5CmluZGV4IDY4NTBjZjAuLjVhM2E0N2YgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YWx1ZXMucHkKQEAgLTU4LDggKzU4LDEzIEBACiAgICAgICAgIGl0ZW1zID0gW10KICAgICAgICAgIyBfZnJvemVuX2ltcG9ydGxpYiBjaGFuZ2VzIHNpemUgd2hlbmV2ZXIgaW1wb3J0bGliLl9ib290c3RyYXAKICAgICAgICAgIyBjaGFuZ2VzLCBzbyBpdCBnZXRzIGEgc3BlY2lhbCBjYXNlLiAgV2Ugc2hvdWxkIG1ha2Ugc3VyZSBpdCdzCi0gICAgICAgICMgZm91bmQsIGJ1dCBkb24ndCB3b3JyeSBhYm91dCBpdHMgc2l6ZSB0b28gbXVjaC4KLSAgICAgICAgX2Z6bl9pbXBsaWJfc2VlbiA9IEZhbHNlCisgICAgICAgICMgZm91bmQsIGJ1dCBkb24ndCB3b3JyeSBhYm91dCBpdHMgc2l6ZSB0b28gbXVjaC4gIFRoZSBzYW1lCisgICAgICAgICMgYXBwbGllcyB0byBfZnJvemVuX2ltcG9ydGxpYl9leHRlcm5hbC4KKyAgICAgICAgYm9vdHN0cmFwX3NlZW4gPSBbXQorICAgICAgICBib290c3RyYXBfZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAgICAgYidfZnJvemVuX2ltcG9ydGxpYicsCisgICAgICAgICAgICAgICAgYidfZnJvemVuX2ltcG9ydGxpYl9leHRlcm5hbCcsCisgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgZW50cnkgaW4gZnQ6CiAgICAgICAgICAgICAjIFRoaXMgaXMgZGFuZ2Vyb3VzLiBXZSAqY2FuKiBpdGVyYXRlIG92ZXIgYSBwb2ludGVyLCBidXQKICAgICAgICAgICAgICMgdGhlIGxvb3Agd2lsbCBub3QgdGVybWluYXRlIChtYXliZSB3aXRoIGFuIGFjY2VzcwpAQCAtNjcsMjEgKzcyLDIyIEBACiAgICAgICAgICAgICBpZiBlbnRyeS5uYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgYnJlYWsKIAotICAgICAgICAgICAgaWYgZW50cnkubmFtZSA9PSBiJ19mcm96ZW5faW1wb3J0bGliJzoKLSAgICAgICAgICAgICAgICBfZnpuX2ltcGxpYl9zZWVuID0gVHJ1ZQorICAgICAgICAgICAgaWYgZW50cnkubmFtZSBpbiBib290c3RyYXBfZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgYm9vdHN0cmFwX3NlZW4uYXBwZW5kKGVudHJ5Lm5hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudHJ5LnNpemUsCi0gICAgICAgICAgICAgICAgICAgICJfZnJvemVuX2ltcG9ydGxpYiB3YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIG5vIHNpemUiKQorICAgICAgICAgICAgICAgICAgICAieyFyfSB3YXMgcmVwb3J0ZWQgYXMgaGF2aW5nIG5vIHNpemUiLmZvcm1hdChlbnRyeS5uYW1lKSkKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaXRlbXMuYXBwZW5kKChlbnRyeS5uYW1lLCBlbnRyeS5zaXplKSkKKyAgICAgICAgICAgIGl0ZW1zLmFwcGVuZCgoZW50cnkubmFtZS5kZWNvZGUoImFzY2lpIiksIGVudHJ5LnNpemUpKQogCi0gICAgICAgIGV4cGVjdGVkID0gWyhiIl9faGVsbG9fXyIsIDE2MSksCi0gICAgICAgICAgICAgICAgICAgIChiIl9fcGhlbGxvX18iLCAtMTYxKSwKLSAgICAgICAgICAgICAgICAgICAgKGIiX19waGVsbG9fXy5zcGFtIiwgMTYxKSwKKyAgICAgICAgZXhwZWN0ZWQgPSBbKCJfX2hlbGxvX18iLCAxNjEpLAorICAgICAgICAgICAgICAgICAgICAoIl9fcGhlbGxvX18iLCAtMTYxKSwKKyAgICAgICAgICAgICAgICAgICAgKCJfX3BoZWxsb19fLnNwYW0iLCAxNjEpLAogICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBleHBlY3RlZCwgIlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMgZXhhbXBsZSAiCisgICAgICAgICAgICAiaW4gRG9jL2xpYnJhcnkvY3R5cGVzLnJzdCBtYXkgYmUgb3V0IG9mIGRhdGUiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfZnpuX2ltcGxpYl9zZWVuLAotICAgICAgICAgICAgIl9mcm96ZW5faW1wb3J0bGliIHdhc24ndCBmb3VuZCBpbiBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoYm9vdHN0cmFwX3NlZW4pLCBib290c3RyYXBfZXhwZWN0ZWQsCisgICAgICAgICAgICAiZnJvemVuIGJvb3RzdHJhcCBtb2R1bGVzIGRpZCBub3QgbWF0Y2ggUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIpCiAKICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKICAgICAgICAgZGVsIF9wb2ludGVyX3R5cGVfY2FjaGVbc3RydWN0X2Zyb3plbl0KZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdXRpbC5weSBiL0xpYi9jdHlwZXMvdXRpbC5weQppbmRleCA1OTUxMTNiLi43Njg0ZWFiIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3V0aWwucHkKKysrIGIvTGliL2N0eXBlcy91dGlsLnB5CkBAIC0xLDYgKzEsNyBAQAotaW1wb3J0IHN5cywgb3MKLWltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCiAKICMgZmluZF9saWJyYXJ5KG5hbWUpIHJldHVybnMgdGhlIHBhdGhuYW1lIG9mIGEgbGlicmFyeSwgb3IgTm9uZS4KIGlmIG9zLm5hbWUgPT0gIm50IjoKQEAgLTE5LDYgKzIwLDggQEAKICAgICAgICAgaSA9IGkgKyBsZW4ocHJlZml4KQogICAgICAgICBzLCByZXN0ID0gc3lzLnZlcnNpb25baTpdLnNwbGl0KCIgIiwgMSkKICAgICAgICAgbWFqb3JWZXJzaW9uID0gaW50KHNbOi0yXSkgLSA2CisgICAgICAgIGlmIG1ham9yVmVyc2lvbiA+PSAxMzoKKyAgICAgICAgICAgIG1ham9yVmVyc2lvbiArPSAxCiAgICAgICAgIG1pbm9yVmVyc2lvbiA9IGludChzWzI6M10pIC8gMTAuMAogICAgICAgICAjIEkgZG9uJ3QgdGhpbmsgcGF0aHMgYXJlIGFmZmVjdGVkIGJ5IG1pbm9yIHZlcnNpb24gaW4gdmVyc2lvbiA2CiAgICAgICAgIGlmIG1ham9yVmVyc2lvbiA9PSA2OgpAQCAtMzYsOCArMzksMTIgQEAKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGlmIHZlcnNpb24gPD0gNjoKICAgICAgICAgICAgIGNsaWJuYW1lID0gJ21zdmNydCcKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiB2ZXJzaW9uIDw9IDEzOgogICAgICAgICAgICAgY2xpYm5hbWUgPSAnbXN2Y3IlZCcgJSAodmVyc2lvbiAqIDEwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBDUlQgaXMgbm8gbG9uZ2VyIGRpcmVjdGx5IGxvYWRhYmxlLiBTZWUgaXNzdWUyMzYwNiBmb3IgdGhlCisgICAgICAgICAgICAjIGRpc2N1c3Npb24gYWJvdXQgYWx0ZXJuYXRpdmUgYXBwcm9hY2hlcy4KKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAgICAgIyBJZiBweXRob24gd2FzIGJ1aWx0IHdpdGggaW4gZGVidWcgbW9kZQogICAgICAgICBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQpAQCAtODgsMjggKzk1LDQ2IEBACiAgICAgaW1wb3J0IHJlLCB0ZW1wZmlsZQogCiAgICAgZGVmIF9maW5kTGliX2djYyhuYW1lKToKLSAgICAgICAgZXhwciA9IHInW15cKFwpXHNdKmxpYiVzXC5bXlwoXClcc10qJyAlIHJlLmVzY2FwZShuYW1lKQotICAgICAgICBmZG91dCwgY2NvdXQgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKLSAgICAgICAgb3MuY2xvc2UoZmRvdXQpCi0gICAgICAgIGNtZCA9ICdpZiB0eXBlIGdjYyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gQ0M9Z2NjOyBlbGlmIHR5cGUgY2MgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIENDPWNjO2Vsc2UgZXhpdCAxMDsgZmk7JyBcCi0gICAgICAgICAgICAgICdMQU5HPUMgTENfQUxMPUMgJENDIC1XbCwtdCAtbyAnICsgY2NvdXQgKyAnIDI+JjEgLWwnICsgbmFtZQorICAgICAgICAjIFJ1biBHQ0MncyBsaW5rZXIgd2l0aCB0aGUgLXQgKGFrYSAtLXRyYWNlKSBvcHRpb24gYW5kIGV4YW1pbmUgdGhlCisgICAgICAgICMgbGlicmFyeSBuYW1lIGl0IHByaW50cyBvdXQuIFRoZSBHQ0MgY29tbWFuZCB3aWxsIGZhaWwgYmVjYXVzZSB3ZQorICAgICAgICAjIGhhdmVuJ3Qgc3VwcGxpZWQgYSBwcm9wZXIgcHJvZ3JhbSB3aXRoIG1haW4oKSwgYnV0IHRoYXQgZG9lcyBub3QKKyAgICAgICAgIyBtYXR0ZXIuCisgICAgICAgIGV4cHIgPSBvcy5mc2VuY29kZShyJ1teXChcKVxzXSpsaWIlc1wuW15cKFwpXHNdKicgJSByZS5lc2NhcGUobmFtZSkpCisKKyAgICAgICAgY19jb21waWxlciA9IHNodXRpbC53aGljaCgnZ2NjJykKKyAgICAgICAgaWYgbm90IGNfY29tcGlsZXI6CisgICAgICAgICAgICBjX2NvbXBpbGVyID0gc2h1dGlsLndoaWNoKCdjYycpCisgICAgICAgIGlmIG5vdCBjX2NvbXBpbGVyOgorICAgICAgICAgICAgIyBObyBDIGNvbXBpbGVyIGF2YWlsYWJsZSwgZ2l2ZSB1cAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICB0ZW1wID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9zLnBvcGVuKGNtZCkKKyAgICAgICAgICAgIGFyZ3MgPSBbY19jb21waWxlciwgJy1XbCwtdCcsICctbycsIHRlbXAubmFtZSwgJy1sJyArIG5hbWVdCisKKyAgICAgICAgICAgIGVudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgICAgICAgICAgIGVudlsnTENfQUxMJ10gPSAnQycKKyAgICAgICAgICAgIGVudlsnTEFORyddID0gJ0MnCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdHJhY2UgPSBmLnJlYWQoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBydiA9IGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAgIyBFLmcuIGJhZCBleGVjdXRhYmxlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHdpdGggcHJvYzoKKyAgICAgICAgICAgICAgICB0cmFjZSA9IHByb2Muc3Rkb3V0LnJlYWQoKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnVubGluayhjY291dCkKKyAgICAgICAgICAgICAgICB0ZW1wLmNsb3NlKCkKICAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFJhaXNlZCBpZiB0aGUgZmlsZSB3YXMgYWxyZWFkeSByZW1vdmVkLCB3aGljaCBpcyB0aGUgbm9ybWFsCisgICAgICAgICAgICAgICAgIyBiZWhhdmlvdXIgb2YgR0NDIGlmIGxpbmtpbmcgZmFpbHMKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGlmIHJ2ID09IDEwOgotICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2NjIG9yIGNjIGNvbW1hbmQgbm90IGZvdW5kJykKICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsIHRyYWNlKQogICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIHJlcy5ncm91cCgwKQorICAgICAgICByZXR1cm4gb3MuZnNkZWNvZGUocmVzLmdyb3VwKDApKQogCiAKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gInN1bm9zNSI6CkBAIC0xMTcsNTUgKzE0Miw3NSBAQAogICAgICAgICBkZWYgX2dldF9zb25hbWUoZik6CiAgICAgICAgICAgICBpZiBub3QgZjoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgY21kID0gIi91c3IvY2NzL2Jpbi9kdW1wIC1McHYgMj4vZGV2L251bGwgIiArIGYKLSAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKG9zLnBvcGVuKGNtZCkpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCi0gICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcWy4qXF1cc1NPTkFNRVxzKyhbXlxzXSspJywgZGF0YSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKCgiL3Vzci9jY3MvYmluL2R1bXAiLCAiLUxwdiIsIGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAgIyBFLmcuIGNvbW1hbmQgbm90IGZvdW5kCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHdpdGggcHJvYzoKKyAgICAgICAgICAgICAgICBkYXRhID0gcHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICByZXMgPSByZS5zZWFyY2goYnInXFsuKlxdXHNTT05BTUVccysoW15cc10rKScsIGRhdGEpCiAgICAgICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByZXR1cm4gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICByZXR1cm4gb3MuZnNkZWNvZGUocmVzLmdyb3VwKDEpKQogICAgIGVsc2U6CiAgICAgICAgIGRlZiBfZ2V0X3NvbmFtZShmKToKICAgICAgICAgICAgICMgYXNzdW1pbmcgR05VIGJpbnV0aWxzIC8gRUxGCiAgICAgICAgICAgICBpZiBub3QgZjoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgY21kID0gJ2lmICEgdHlwZSBvYmpkdW1wID4vZGV2L251bGwgMj4mMTsgdGhlbiBleGl0IDEwOyBmaTsnIFwKLSAgICAgICAgICAgICAgICAgICJvYmpkdW1wIC1wIC1qIC5keW5hbWljIDI+L2Rldi9udWxsICIgKyBmCi0gICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQorICAgICAgICAgICAgb2JqZHVtcCA9IHNodXRpbC53aGljaCgnb2JqZHVtcCcpCisgICAgICAgICAgICBpZiBub3Qgb2JqZHVtcDoKKyAgICAgICAgICAgICAgICAjIG9iamR1bXAgaXMgbm90IGF2YWlsYWJsZSwgZ2l2ZSB1cAorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBkdW1wID0gZi5yZWFkKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcnYgPSBmLmNsb3NlKCkKLSAgICAgICAgICAgIGlmIHJ2ID09IDEwOgotICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ29iamR1bXAgY29tbWFuZCBub3QgZm91bmQnKQotICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKHInXHNTT05BTUVccysoW15cc10rKScsIGR1bXApCisgICAgICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oKG9iamR1bXAsICctcCcsICctaicsICcuZHluYW1pYycsIGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAgIyBFLmcuIGJhZCBleGVjdXRhYmxlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHdpdGggcHJvYzoKKyAgICAgICAgICAgICAgICBkdW1wID0gcHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICByZXMgPSByZS5zZWFyY2goYnInXHNTT05BTUVccysoW15cc10rKScsIGR1bXApCiAgICAgICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByZXR1cm4gcmVzLmdyb3VwKDEpCisgICAgICAgICAgICByZXR1cm4gb3MuZnNkZWNvZGUocmVzLmdyb3VwKDEpKQogCiAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCJmcmVlYnNkIiwgIm9wZW5ic2QiLCAiZHJhZ29uZmx5IikpOgogCiAgICAgICAgIGRlZiBfbnVtX3ZlcnNpb24obGlibmFtZSk6CiAgICAgICAgICAgICAjICJsaWJ4eXouc28uTUFKT1IuTUlOT1IiID0+IFsgTUFKT1IsIE1JTk9SIF0KLSAgICAgICAgICAgIHBhcnRzID0gbGlibmFtZS5zcGxpdCgiLiIpCisgICAgICAgICAgICBwYXJ0cyA9IGxpYm5hbWUuc3BsaXQoYiIuIikKICAgICAgICAgICAgIG51bXMgPSBbXQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdoaWxlIHBhcnRzOgogICAgICAgICAgICAgICAgICAgICBudW1zLmluc2VydCgwLCBpbnQocGFydHMucG9wKCkpKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmV0dXJuIG51bXMgb3IgWyBzeXMubWF4c2l6ZSBdCisgICAgICAgICAgICByZXR1cm4gbnVtcyBvciBbc3lzLm1heHNpemVdCiAKICAgICAgICAgZGVmIGZpbmRfbGlicmFyeShuYW1lKToKICAgICAgICAgICAgIGVuYW1lID0gcmUuZXNjYXBlKG5hbWUpCiAgICAgICAgICAgICBleHByID0gcic6LWwlc1wuXFMrID0+IFxTKi8obGliJXNcLlxTKyknICUgKGVuYW1lLCBlbmFtZSkKLSAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKG9zLnBvcGVuKCcvc2Jpbi9sZGNvbmZpZyAtciAyPi9kZXYvbnVsbCcpKSBhcyBmOgotICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZXhwciA9IG9zLmZzZW5jb2RlKGV4cHIpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigoJy9zYmluL2xkY29uZmlnJywgJy1yJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICAjIEUuZy4gY29tbWFuZCBub3QgZm91bmQKKyAgICAgICAgICAgICAgICBkYXRhID0gYicnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdpdGggcHJvYzoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHByb2Muc3Rkb3V0LnJlYWQoKQorCiAgICAgICAgICAgICByZXMgPSByZS5maW5kYWxsKGV4cHIsIGRhdGEpCiAgICAgICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0X3NvbmFtZShfZmluZExpYl9nY2MobmFtZSkpCiAgICAgICAgICAgICByZXMuc29ydChrZXk9X251bV92ZXJzaW9uKQotICAgICAgICAgICAgcmV0dXJuIHJlc1stMV0KKyAgICAgICAgICAgIHJldHVybiBvcy5mc2RlY29kZShyZXNbLTFdKQogCiAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gInN1bm9zNSI6CiAKQEAgLTE3MywxNiArMjE4LDI3IEBACiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy91c3IvYmluL2NybGUnKToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgICAgICBpZiBpczY0OgotICAgICAgICAgICAgICAgIGNtZCA9ICdlbnYgTENfQUxMPUMgL3Vzci9iaW4vY3JsZSAtNjQgMj4vZGV2L251bGwnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNtZCA9ICdlbnYgTENfQUxMPUMgL3Vzci9iaW4vY3JsZSAyPi9kZXYvbnVsbCcKKyAgICAgICAgICAgIGVudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgICAgICAgICAgIGVudlsnTENfQUxMJ10gPSAnQycKIAotICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oY21kKSkgYXMgZjoKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgaWYgaXM2NDoKKyAgICAgICAgICAgICAgICBhcmdzID0gKCcvdXNyL2Jpbi9jcmxlJywgJy02NCcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSAoJy91c3IvYmluL2NybGUnLCkKKworICAgICAgICAgICAgcGF0aHMgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAgIyBFLmcuIGJhZCBleGVjdXRhYmxlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHdpdGggcHJvYzoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBwcm9jLnN0ZG91dDoKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KClbNF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKGInRGVmYXVsdCBMaWJyYXJ5IFBhdGggKEVMRik6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocyA9IG9zLmZzZGVjb2RlKGxpbmUpLnNwbGl0KClbNF0KIAogICAgICAgICAgICAgaWYgbm90IHBhdGhzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvY3Vyc2VzL2FzY2lpLnB5IGIvTGliL2N1cnNlcy9hc2NpaS5weQppbmRleCA4MDBmZDhiLi42YTQ2NmUwIDEwMDY0NAotLS0gYS9MaWIvY3Vyc2VzL2FzY2lpLnB5CisrKyBiL0xpYi9jdXJzZXMvYXNjaWkucHkKQEAgLTU0LDEzICs1NCwxMyBAQAogZGVmIGlzYWxudW0oYyk6IHJldHVybiBpc2FscGhhKGMpIG9yIGlzZGlnaXQoYykKIGRlZiBpc2FscGhhKGMpOiByZXR1cm4gaXN1cHBlcihjKSBvciBpc2xvd2VyKGMpCiBkZWYgaXNhc2NpaShjKTogcmV0dXJuIF9jdG9pKGMpIDw9IDEyNyAgICAgICAgICAjID8KLWRlZiBpc2JsYW5rKGMpOiByZXR1cm4gX2N0b2koYykgaW4gKDgsMzIpCi1kZWYgaXNjbnRybChjKTogcmV0dXJuIF9jdG9pKGMpIDw9IDMxCitkZWYgaXNibGFuayhjKTogcmV0dXJuIF9jdG9pKGMpIGluICg5LCAzMikKK2RlZiBpc2NudHJsKGMpOiByZXR1cm4gX2N0b2koYykgPD0gMzEgb3IgX2N0b2koYykgPT0gMTI3CiBkZWYgaXNkaWdpdChjKTogcmV0dXJuIF9jdG9pKGMpID49IDQ4IGFuZCBfY3RvaShjKSA8PSA1NwogZGVmIGlzZ3JhcGgoYyk6IHJldHVybiBfY3RvaShjKSA+PSAzMyBhbmQgX2N0b2koYykgPD0gMTI2CiBkZWYgaXNsb3dlcihjKTogcmV0dXJuIF9jdG9pKGMpID49IDk3IGFuZCBfY3RvaShjKSA8PSAxMjIKIGRlZiBpc3ByaW50KGMpOiByZXR1cm4gX2N0b2koYykgPj0gMzIgYW5kIF9jdG9pKGMpIDw9IDEyNgotZGVmIGlzcHVuY3QoYyk6IHJldHVybiBfY3RvaShjKSAhPSAzMiBhbmQgbm90IGlzYWxudW0oYykKK2RlZiBpc3B1bmN0KGMpOiByZXR1cm4gaXNncmFwaChjKSBhbmQgbm90IGlzYWxudW0oYykKIGRlZiBpc3NwYWNlKGMpOiByZXR1cm4gX2N0b2koYykgaW4gKDksIDEwLCAxMSwgMTIsIDEzLCAzMikKIGRlZiBpc3VwcGVyKGMpOiByZXR1cm4gX2N0b2koYykgPj0gNjUgYW5kIF9jdG9pKGMpIDw9IDkwCiBkZWYgaXN4ZGlnaXQoYyk6IHJldHVybiBpc2RpZ2l0KGMpIG9yIFwKZGlmZiAtLWdpdCBhL0xpYi9kYXRldGltZS5weSBiL0xpYi9kYXRldGltZS5weQppbmRleCAzYWYxMmU3Li5hMjE3OGM3IDEwMDY0NAotLS0gYS9MaWIvZGF0ZXRpbWUucHkKKysrIGIvTGliL2RhdGV0aW1lLnB5CkBAIC0xMiw3ICsxMiw3IEBACiAKIE1JTllFQVIgPSAxCiBNQVhZRUFSID0gOTk5OQotX01BWE9SRElOQUwgPSAzNjUyMDU5ICMgZGF0ZS5tYXgudG9vcmRpbmFsKCkKK19NQVhPUkRJTkFMID0gMzY1MjA1OSAgIyBkYXRlLm1heC50b29yZGluYWwoKQogCiAjIFV0aWxpdHkgZnVuY3Rpb25zLCBhZGFwdGVkIGZyb20gUHl0aG9uJ3MgRGVtby9jbGFzc2VzL0RhdGVzLnB5LCB3aGljaAogIyBhbHNvIGFzc3VtZXMgdGhlIGN1cnJlbnQgR3JlZ29yaWFuIGNhbGVuZGFyIGluZGVmaW5pdGVseSBleHRlbmRlZCBpbgpAQCAtMjYsNyArMjYsNyBAQAogIyAtMSBpcyBhIHBsYWNlaG9sZGVyIGZvciBpbmRleGluZyBwdXJwb3Nlcy4KIF9EQVlTX0lOX01PTlRIID0gWy0xLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXQogCi1fREFZU19CRUZPUkVfTU9OVEggPSBbLTFdICMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCitfREFZU19CRUZPUkVfTU9OVEggPSBbLTFdICAjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgogZGJtID0gMAogZm9yIGRpbSBpbiBfREFZU19JTl9NT05USFsxOl06CiAgICAgX0RBWVNfQkVGT1JFX01PTlRILmFwcGVuZChkYm0pCkBAIC0xNjIsOSArMTYyLDkgQEAKICMgQ29ycmVjdGx5IHN1YnN0aXR1dGUgZm9yICV6IGFuZCAlWiBlc2NhcGVzIGluIHN0cmZ0aW1lIGZvcm1hdHMuCiBkZWYgX3dyYXBfc3RyZnRpbWUob2JqZWN0LCBmb3JtYXQsIHRpbWV0dXBsZSk6CiAgICAgIyBEb24ndCBjYWxsIHV0Y29mZnNldCgpIG9yIHR6bmFtZSgpIHVubGVzcyBhY3R1YWxseSBuZWVkZWQuCi0gICAgZnJlcGxhY2UgPSBOb25lICMgdGhlIHN0cmluZyB0byB1c2UgZm9yICVmCi0gICAgenJlcGxhY2UgPSBOb25lICMgdGhlIHN0cmluZyB0byB1c2UgZm9yICV6Ci0gICAgWnJlcGxhY2UgPSBOb25lICMgdGhlIHN0cmluZyB0byB1c2UgZm9yICVaCisgICAgZnJlcGxhY2UgPSBOb25lICAjIHRoZSBzdHJpbmcgdG8gdXNlIGZvciAlZgorICAgIHpyZXBsYWNlID0gTm9uZSAgIyB0aGUgc3RyaW5nIHRvIHVzZSBmb3IgJXoKKyAgICBacmVwbGFjZSA9IE5vbmUgICMgdGhlIHN0cmluZyB0byB1c2UgZm9yICVaCiAKICAgICAjIFNjYW4gZm9ybWF0IGZvciAleiBhbmQgJVogZXNjYXBlcywgcmVwbGFjaW5nIGFzIG5lZWRlZC4KICAgICBuZXdmb3JtYXQgPSBbXQpAQCAtMjE3LDExICsyMTcsNiBAQAogICAgIG5ld2Zvcm1hdCA9ICIiLmpvaW4obmV3Zm9ybWF0KQogICAgIHJldHVybiBfdGltZS5zdHJmdGltZShuZXdmb3JtYXQsIHRpbWV0dXBsZSkKIAotZGVmIF9jYWxsX3R6aW5mb19tZXRob2QodHppbmZvLCBtZXRobmFtZSwgdHppbmZvYXJnKToKLSAgICBpZiB0emluZm8gaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICByZXR1cm4gZ2V0YXR0cih0emluZm8sIG1ldGhuYW1lKSh0emluZm9hcmcpCi0KICMgSnVzdCByYWlzZSBUeXBlRXJyb3IgaWYgdGhlIGFyZyBpc24ndCBOb25lIG9yIGEgc3RyaW5nLgogZGVmIF9jaGVja190em5hbWUobmFtZSk6CiAgICAgaWYgbmFtZSBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKQEAgLTI0NSwxMyArMjQwLDMxIEBACiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInR6aW5mby4lcygpIG11c3QgcmV0dXJuIGEgd2hvbGUgbnVtYmVyICIKICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgbWludXRlcywgZ290ICVzIiAlIChuYW1lLCBvZmZzZXQpKQogICAgIGlmIG5vdCAtdGltZWRlbHRhKDEpIDwgb2Zmc2V0IDwgdGltZWRlbHRhKDEpOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcygpPSVzLCBtdXN0IGJlIG11c3QgYmUgc3RyaWN0bHkgYmV0d2VlbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIC10aW1lZGVsdGEoaG91cnM9MjQpIGFuZCB0aW1lZGVsdGEoaG91cnM9MjQpIgotICAgICAgICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIG9mZnNldCkpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzKCk9JXMsIG11c3QgYmUgbXVzdCBiZSBzdHJpY3RseSBiZXR3ZWVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiLXRpbWVkZWx0YShob3Vycz0yNCkgYW5kIHRpbWVkZWx0YShob3Vycz0yNCkiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgb2Zmc2V0KSkKKworZGVmIF9jaGVja19pbnRfZmllbGQodmFsdWUpOgorICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgIHJldHVybiB2YWx1ZQorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuX19pbnRfXygpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ19faW50X18gcmV0dXJuZWQgbm9uLWludCAodHlwZSAlcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHZhbHVlKS5fX25hbWVfXykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIChnb3QgdHlwZSAlcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUodmFsdWUpLl9fbmFtZV9fKQorICAgIHJhaXNlIFR5cGVFcnJvcignaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0JykKIAogZGVmIF9jaGVja19kYXRlX2ZpZWxkcyh5ZWFyLCBtb250aCwgZGF5KToKLSAgICBpZiBub3QgaXNpbnN0YW5jZSh5ZWFyLCBpbnQpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ludCBleHBlY3RlZCcpCisgICAgeWVhciA9IF9jaGVja19pbnRfZmllbGQoeWVhcikKKyAgICBtb250aCA9IF9jaGVja19pbnRfZmllbGQobW9udGgpCisgICAgZGF5ID0gX2NoZWNrX2ludF9maWVsZChkYXkpCiAgICAgaWYgbm90IE1JTllFQVIgPD0geWVhciA8PSBNQVhZRUFSOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd5ZWFyIG11c3QgYmUgaW4gJWQuLiVkJyAlIChNSU5ZRUFSLCBNQVhZRUFSKSwgeWVhcikKICAgICBpZiBub3QgMSA8PSBtb250aCA8PSAxMjoKQEAgLTI1OSwxMCArMjcyLDEzIEBACiAgICAgZGltID0gX2RheXNfaW5fbW9udGgoeWVhciwgbW9udGgpCiAgICAgaWYgbm90IDEgPD0gZGF5IDw9IGRpbToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZGF5IG11c3QgYmUgaW4gMS4uJWQnICUgZGltLCBkYXkpCisgICAgcmV0dXJuIHllYXIsIG1vbnRoLCBkYXkKIAogZGVmIF9jaGVja190aW1lX2ZpZWxkcyhob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQpOgotICAgIGlmIG5vdCBpc2luc3RhbmNlKGhvdXIsIGludCk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcignaW50IGV4cGVjdGVkJykKKyAgICBob3VyID0gX2NoZWNrX2ludF9maWVsZChob3VyKQorICAgIG1pbnV0ZSA9IF9jaGVja19pbnRfZmllbGQobWludXRlKQorICAgIHNlY29uZCA9IF9jaGVja19pbnRfZmllbGQoc2Vjb25kKQorICAgIG1pY3Jvc2Vjb25kID0gX2NoZWNrX2ludF9maWVsZChtaWNyb3NlY29uZCkKICAgICBpZiBub3QgMCA8PSBob3VyIDw9IDIzOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdob3VyIG11c3QgYmUgaW4gMC4uMjMnLCBob3VyKQogICAgIGlmIG5vdCAwIDw9IG1pbnV0ZSA8PSA1OToKQEAgLTI3MSw2ICsyODcsNyBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzZWNvbmQgbXVzdCBiZSBpbiAwLi41OScsIHNlY29uZCkKICAgICBpZiBub3QgMCA8PSBtaWNyb3NlY29uZCA8PSA5OTk5OTk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ21pY3Jvc2Vjb25kIG11c3QgYmUgaW4gMC4uOTk5OTk5JywgbWljcm9zZWNvbmQpCisgICAgcmV0dXJuIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWNyb3NlY29uZAogCiBkZWYgX2NoZWNrX3R6aW5mb19hcmcodHopOgogICAgIGlmIHR6IGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZSh0eiwgdHppbmZvKToKQEAgLTMxNiw3ICszMzMsNyBAQAogICAgIFJlcHJlc2VudGF0aW9uOiAoZGF5cywgc2Vjb25kcywgbWljcm9zZWNvbmRzKS4gIFdoeT8gIEJlY2F1c2UgSQogICAgIGZlbHQgbGlrZSBpdC4KICAgICAiIiIKLSAgICBfX3Nsb3RzX18gPSAnX2RheXMnLCAnX3NlY29uZHMnLCAnX21pY3Jvc2Vjb25kcycKKyAgICBfX3Nsb3RzX18gPSAnX2RheXMnLCAnX3NlY29uZHMnLCAnX21pY3Jvc2Vjb25kcycsICdfaGFzaGNvZGUnCiAKICAgICBkZWYgX19uZXdfXyhjbHMsIGRheXM9MCwgc2Vjb25kcz0wLCBtaWNyb3NlY29uZHM9MCwKICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHM9MCwgbWludXRlcz0wLCBob3Vycz0wLCB3ZWVrcz0wKToKQEAgLTM4MiwzOCArMzk5LDI2IEBACiAgICAgICAgICMgc2Vjb25kc2ZyYWMgaXNuJ3QgcmVmZXJlbmNlZCBhZ2FpbgogCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWljcm9zZWNvbmRzLCBmbG9hdCk6Ci0gICAgICAgICAgICBtaWNyb3NlY29uZHMgKz0gdXNkb3VibGUKLSAgICAgICAgICAgIG1pY3Jvc2Vjb25kcyA9IHJvdW5kKG1pY3Jvc2Vjb25kcywgMCkKLSAgICAgICAgICAgIHNlY29uZHMsIG1pY3Jvc2Vjb25kcyA9IGRpdm1vZChtaWNyb3NlY29uZHMsIDFlNikKLSAgICAgICAgICAgIGFzc2VydCBtaWNyb3NlY29uZHMgPT0gaW50KG1pY3Jvc2Vjb25kcykKLSAgICAgICAgICAgIGFzc2VydCBzZWNvbmRzID09IGludChzZWNvbmRzKQotICAgICAgICAgICAgZGF5cywgc2Vjb25kcyA9IGRpdm1vZChzZWNvbmRzLCAyNC4qMzYwMC4pCi0gICAgICAgICAgICBhc3NlcnQgZGF5cyA9PSBpbnQoZGF5cykKLSAgICAgICAgICAgIGFzc2VydCBzZWNvbmRzID09IGludChzZWNvbmRzKQotICAgICAgICAgICAgZCArPSBpbnQoZGF5cykKLSAgICAgICAgICAgIHMgKz0gaW50KHNlY29uZHMpICAgIyBjYW4ndCBvdmVyZmxvdwotICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgaW50KQotICAgICAgICAgICAgYXNzZXJ0IGFicyhzKSA8PSAzICogMjQgKiAzNjAwCi0gICAgICAgIGVsc2U6CisgICAgICAgICAgICBtaWNyb3NlY29uZHMgPSByb3VuZChtaWNyb3NlY29uZHMgKyB1c2RvdWJsZSkKICAgICAgICAgICAgIHNlY29uZHMsIG1pY3Jvc2Vjb25kcyA9IGRpdm1vZChtaWNyb3NlY29uZHMsIDEwMDAwMDApCiAgICAgICAgICAgICBkYXlzLCBzZWNvbmRzID0gZGl2bW9kKHNlY29uZHMsIDI0KjM2MDApCiAgICAgICAgICAgICBkICs9IGRheXMKLSAgICAgICAgICAgIHMgKz0gaW50KHNlY29uZHMpICAgICMgY2FuJ3Qgb3ZlcmZsb3cKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHMsIGludCkKLSAgICAgICAgICAgIGFzc2VydCBhYnMocykgPD0gMyAqIDI0ICogMzYwMAotICAgICAgICAgICAgbWljcm9zZWNvbmRzID0gZmxvYXQobWljcm9zZWNvbmRzKQotICAgICAgICAgICAgbWljcm9zZWNvbmRzICs9IHVzZG91YmxlCi0gICAgICAgICAgICBtaWNyb3NlY29uZHMgPSByb3VuZChtaWNyb3NlY29uZHMsIDApCisgICAgICAgICAgICBzICs9IHNlY29uZHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1pY3Jvc2Vjb25kcyA9IGludChtaWNyb3NlY29uZHMpCisgICAgICAgICAgICBzZWNvbmRzLCBtaWNyb3NlY29uZHMgPSBkaXZtb2QobWljcm9zZWNvbmRzLCAxMDAwMDAwKQorICAgICAgICAgICAgZGF5cywgc2Vjb25kcyA9IGRpdm1vZChzZWNvbmRzLCAyNCozNjAwKQorICAgICAgICAgICAgZCArPSBkYXlzCisgICAgICAgICAgICBzICs9IHNlY29uZHMKKyAgICAgICAgICAgIG1pY3Jvc2Vjb25kcyA9IHJvdW5kKG1pY3Jvc2Vjb25kcyArIHVzZG91YmxlKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzLCBpbnQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG1pY3Jvc2Vjb25kcywgaW50KQogICAgICAgICBhc3NlcnQgYWJzKHMpIDw9IDMgKiAyNCAqIDM2MDAKICAgICAgICAgYXNzZXJ0IGFicyhtaWNyb3NlY29uZHMpIDwgMy4xZTYKIAogICAgICAgICAjIEp1c3QgYSBsaXR0bGUgYml0IG9mIGNhcnJ5aW5nIHBvc3NpYmxlIGZvciBtaWNyb3NlY29uZHMgYW5kIHNlY29uZHMuCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG1pY3Jvc2Vjb25kcywgZmxvYXQpCi0gICAgICAgIGFzc2VydCBpbnQobWljcm9zZWNvbmRzKSA9PSBtaWNyb3NlY29uZHMKLSAgICAgICAgdXMgPSBpbnQobWljcm9zZWNvbmRzKQotICAgICAgICBzZWNvbmRzLCB1cyA9IGRpdm1vZCh1cywgMTAwMDAwMCkKLSAgICAgICAgcyArPSBzZWNvbmRzICAgICMgY2FudCd0IG92ZXJmbG93Ci0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHMsIGludCkKKyAgICAgICAgc2Vjb25kcywgdXMgPSBkaXZtb2QobWljcm9zZWNvbmRzLCAxMDAwMDAwKQorICAgICAgICBzICs9IHNlY29uZHMKICAgICAgICAgZGF5cywgcyA9IGRpdm1vZChzLCAyNCozNjAwKQogICAgICAgICBkICs9IGRheXMKIApAQCAtNDIxLDI3ICs0MjYsMzEgQEAKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgaW50KSBhbmQgMCA8PSBzIDwgMjQqMzYwMAogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh1cywgaW50KSBhbmQgMCA8PSB1cyA8IDEwMDAwMDAKIAotICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQotCi0gICAgICAgIHNlbGYuX2RheXMgPSBkCi0gICAgICAgIHNlbGYuX3NlY29uZHMgPSBzCi0gICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kcyA9IHVzCiAgICAgICAgIGlmIGFicyhkKSA+IDk5OTk5OTk5OToKICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoInRpbWVkZWx0YSAjIG9mIGRheXMgaXMgdG9vIGxhcmdlOiAlZCIgJSBkKQogCisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuX2RheXMgPSBkCisgICAgICAgIHNlbGYuX3NlY29uZHMgPSBzCisgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kcyA9IHVzCisgICAgICAgIHNlbGYuX2hhc2hjb2RlID0gLTEKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5fbWljcm9zZWNvbmRzOgotICAgICAgICAgICAgcmV0dXJuICIlcyglZCwgJWQsICVkKSIgJSAoJ2RhdGV0aW1lLicgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RheXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWNvbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWljcm9zZWNvbmRzKQorICAgICAgICAgICAgcmV0dXJuICIlcy4lcyglZCwgJWQsICVkKSIgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RheXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWljcm9zZWNvbmRzKQogICAgICAgICBpZiBzZWxmLl9zZWNvbmRzOgotICAgICAgICAgICAgcmV0dXJuICIlcyglZCwgJWQpIiAlICgnZGF0ZXRpbWUuJyArIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWNvbmRzKQotICAgICAgICByZXR1cm4gIiVzKCVkKSIgJSAoJ2RhdGV0aW1lLicgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fZGF5cykKKyAgICAgICAgICAgIHJldHVybiAiJXMuJXMoJWQsICVkKSIgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWNvbmRzKQorICAgICAgICByZXR1cm4gIiVzLiVzKCVkKSIgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RheXMpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgbW0sIHNzID0gZGl2bW9kKHNlbGYuX3NlY29uZHMsIDYwKQpAQCAtNDU3LDcgKzQ2Niw3IEBACiAKICAgICBkZWYgdG90YWxfc2Vjb25kcyhzZWxmKToKICAgICAgICAgIiIiVG90YWwgc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24uIiIiCi0gICAgICAgIHJldHVybiAoKHNlbGYuZGF5cyAqIDg2NDAwICsgc2VsZi5zZWNvbmRzKSoxMCoqNiArCisgICAgICAgIHJldHVybiAoKHNlbGYuZGF5cyAqIDg2NDAwICsgc2VsZi5zZWNvbmRzKSAqIDEwKio2ICsKICAgICAgICAgICAgICAgICBzZWxmLm1pY3Jvc2Vjb25kcykgLyAxMCoqNgogCiAgICAgIyBSZWFkLW9ubHkgZmllbGQgYWNjZXNzb3JzCkBAIC01NzgsMTIgKzU4Nyw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lZGVsdGEpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgIT0gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lZGVsdGEpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPD0gMApAQCAtNjEzLDcgKzYxNiw5IEBACiAgICAgICAgIHJldHVybiBfY21wKHNlbGYuX2dldHN0YXRlKCksIG90aGVyLl9nZXRzdGF0ZSgpKQogCiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9nZXRzdGF0ZSgpKQorICAgICAgICBpZiBzZWxmLl9oYXNoY29kZSA9PSAtMToKKyAgICAgICAgICAgIHNlbGYuX2hhc2hjb2RlID0gaGFzaChzZWxmLl9nZXRzdGF0ZSgpKQorICAgICAgICByZXR1cm4gc2VsZi5faGFzaGNvZGUKIAogICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIChzZWxmLl9kYXlzICE9IDAgb3IKQEAgLTY2MSw3ICs2NjYsNyBAQAogICAgIFByb3BlcnRpZXMgKHJlYWRvbmx5KToKICAgICB5ZWFyLCBtb250aCwgZGF5CiAgICAgIiIiCi0gICAgX19zbG90c19fID0gJ195ZWFyJywgJ19tb250aCcsICdfZGF5JworICAgIF9fc2xvdHNfXyA9ICdfeWVhcicsICdfbW9udGgnLCAnX2RheScsICdfaGFzaGNvZGUnCiAKICAgICBkZWYgX19uZXdfXyhjbHMsIHllYXIsIG1vbnRoPU5vbmUsIGRheT1Ob25lKToKICAgICAgICAgIiIiQ29uc3RydWN0b3IuCkBAIC02NzAsMTcgKzY3NSwxOSBAQAogCiAgICAgICAgIHllYXIsIG1vbnRoLCBkYXkgKHJlcXVpcmVkLCBiYXNlIDEpCiAgICAgICAgICIiIgotICAgICAgICBpZiAoaXNpbnN0YW5jZSh5ZWFyLCBieXRlcykgYW5kIGxlbih5ZWFyKSA9PSA0IGFuZAotICAgICAgICAgICAgMSA8PSB5ZWFyWzJdIDw9IDEyIGFuZCBtb250aCBpcyBOb25lKTogICMgTW9udGggaXMgc2FuZQorICAgICAgICBpZiBtb250aCBpcyBOb25lIGFuZCBpc2luc3RhbmNlKHllYXIsIGJ5dGVzKSBhbmQgbGVuKHllYXIpID09IDQgYW5kIFwKKyAgICAgICAgICAgICAgICAxIDw9IHllYXJbMl0gPD0gMTI6CiAgICAgICAgICAgICAjIFBpY2tsZSBzdXBwb3J0CiAgICAgICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQogICAgICAgICAgICAgc2VsZi5fX3NldHN0YXRlKHllYXIpCisgICAgICAgICAgICBzZWxmLl9oYXNoY29kZSA9IC0xCiAgICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICBfY2hlY2tfZGF0ZV9maWVsZHMoeWVhciwgbW9udGgsIGRheSkKKyAgICAgICAgeWVhciwgbW9udGgsIGRheSA9IF9jaGVja19kYXRlX2ZpZWxkcyh5ZWFyLCBtb250aCwgZGF5KQogICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQogICAgICAgICBzZWxmLl95ZWFyID0geWVhcgogICAgICAgICBzZWxmLl9tb250aCA9IG1vbnRoCiAgICAgICAgIHNlbGYuX2RheSA9IGRheQorICAgICAgICBzZWxmLl9oYXNoY29kZSA9IC0xCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICAjIEFkZGl0aW9uYWwgY29uc3RydWN0b3JzCkBAIC02OTksNyArNzA2LDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tb3JkaW5hbChjbHMsIG4pOgotICAgICAgICAiIiJDb250cnVjdCBhIGRhdGUgZnJvbSBhIHByb2xlcHRpYyBHcmVnb3JpYW4gb3JkaW5hbC4KKyAgICAgICAgIiIiQ29uc3RydWN0IGEgZGF0ZSBmcm9tIGEgcHJvbGVwdGljIEdyZWdvcmlhbiBvcmRpbmFsLgogCiAgICAgICAgIEphbnVhcnkgMSBvZiB5ZWFyIDEgaXMgZGF5IDEuICBPbmx5IHRoZSB5ZWFyLCBtb250aCBhbmQgZGF5IGFyZQogICAgICAgICBub24temVybyBpbiB0aGUgcmVzdWx0LgpAQCAtNzIwLDEwICs3MjcsMTEgQEAKICAgICAgICAgPj4+IHJlcHIoZHQpCiAgICAgICAgICdkYXRldGltZS5kYXRldGltZSgyMDEwLCAxLCAxLCAwLCAwLCB0emluZm89ZGF0ZXRpbWUudGltZXpvbmUudXRjKScKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiAiJXMoJWQsICVkLCAlZCkiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3llYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vbnRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXkpCisgICAgICAgIHJldHVybiAiJXMuJXMoJWQsICVkLCAlZCkiICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5feWVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9udGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RheSkKICAgICAjIFhYWCBUaGVzZSBzaG91bGRuJ3QgZGVwZW5kIG9uIHRpbWUubG9jYWx0aW1lKCksIGJlY2F1c2UgdGhhdAogICAgICMgY2xpcHMgdGhlIHVzYWJsZSBkYXRlcyB0byBbMTk3MCAuLiAyMDM4KS4gIEF0IGxlYXN0IGN0aW1lKCkgaXMKICAgICAjIGVhc2lseSBkb25lIHdpdGhvdXQgdXNpbmcgc3RyZnRpbWUoKSAtLSB0aGF0J3MgYmV0dGVyIHRvbyBiZWNhdXNlCkBAIC03NDMsNiArNzUxLDggQEAKICAgICAgICAgcmV0dXJuIF93cmFwX3N0cmZ0aW1lKHNlbGYsIGZtdCwgc2VsZi50aW1ldHVwbGUoKSkKIAogICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZtdCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZtdCwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibXVzdCBiZSBzdHIsIG5vdCAlcyIgJSB0eXBlKGZtdCkuX19uYW1lX18pCiAgICAgICAgIGlmIGxlbihmbXQpICE9IDA6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdHJmdGltZShmbXQpCiAgICAgICAgIHJldHVybiBzdHIoc2VsZikKQEAgLTgwMCw3ICs4MTAsNiBAQAogICAgICAgICAgICAgbW9udGggPSBzZWxmLl9tb250aAogICAgICAgICBpZiBkYXkgaXMgTm9uZToKICAgICAgICAgICAgIGRheSA9IHNlbGYuX2RheQotICAgICAgICBfY2hlY2tfZGF0ZV9maWVsZHMoeWVhciwgbW9udGgsIGRheSkKICAgICAgICAgcmV0dXJuIGRhdGUoeWVhciwgbW9udGgsIGRheSkKIAogICAgICMgQ29tcGFyaXNvbnMgb2YgZGF0ZSBvYmplY3RzIHdpdGggb3RoZXIuCkBAIC04MTAsMTEgKzgxOSw2IEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA9PSAwCiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGRhdGUpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgIT0gMAotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQogICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBkYXRlKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDw9IDAKQEAgLTg0Myw3ICs4NDcsOSBAQAogCiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICAiSGFzaC4iCi0gICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2dldHN0YXRlKCkpCisgICAgICAgIGlmIHNlbGYuX2hhc2hjb2RlID09IC0xOgorICAgICAgICAgICAgc2VsZi5faGFzaGNvZGUgPSBoYXNoKHNlbGYuX2dldHN0YXRlKCkpCisgICAgICAgIHJldHVybiBzZWxmLl9oYXNoY29kZQogCiAgICAgIyBDb21wdXRhdGlvbnMKIApAQCAtODkwLDYgKzg5Niw3IEBACiAKICAgICAgICAgSVNPIGNhbGVuZGFyIGFsZ29yaXRobSB0YWtlbiBmcm9tCiAgICAgICAgIGh0dHA6Ly93d3cucGh5cy51dS5ubC9+dmdlbnQvY2FsZW5kYXIvaXNvY2FsZW5kYXIuaHRtCisgICAgICAgICh1c2VkIHdpdGggcGVybWlzc2lvbikKICAgICAgICAgIiIiCiAgICAgICAgIHllYXIgPSBzZWxmLl95ZWFyCiAgICAgICAgIHdlZWsxbW9uZGF5ID0gX2lzb3dlZWsxbW9uZGF5KHllYXIpCkBAIC05MTMsOCArOTIwLDYgQEAKICAgICAgICAgcmV0dXJuIGJ5dGVzKFt5aGksIHlsbywgc2VsZi5fbW9udGgsIHNlbGYuX2RheV0pLAogCiAgICAgZGVmIF9fc2V0c3RhdGUoc2VsZiwgc3RyaW5nKToKLSAgICAgICAgaWYgbGVuKHN0cmluZykgIT0gNCBvciBub3QgKDEgPD0gc3RyaW5nWzJdIDw9IDEyKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibm90IGVub3VnaCBhcmd1bWVudHMiKQogICAgICAgICB5aGksIHlsbywgc2VsZi5fbW9udGgsIHNlbGYuX2RheSA9IHN0cmluZwogICAgICAgICBzZWxmLl95ZWFyID0geWhpICogMjU2ICsgeWxvCiAKQEAgLTkzMyw2ICs5MzgsNyBAQAogICAgIFN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSB0aGUgbmFtZSgpLCB1dGNvZmZzZXQoKSBhbmQgZHN0KCkgbWV0aG9kcy4KICAgICAiIiIKICAgICBfX3Nsb3RzX18gPSAoKQorCiAgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6CiAgICAgICAgICJkYXRldGltZSAtPiBzdHJpbmcgbmFtZSBvZiB0aW1lIHpvbmUuIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJ0emluZm8gc3ViY2xhc3MgbXVzdCBvdmVycmlkZSB0em5hbWUoKSIpCkBAIC0xMDE5LDYgKzEwMjUsNyBAQAogICAgIFByb3BlcnRpZXMgKHJlYWRvbmx5KToKICAgICBob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQsIHR6aW5mbwogICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICdfaG91cicsICdfbWludXRlJywgJ19zZWNvbmQnLCAnX21pY3Jvc2Vjb25kJywgJ190emluZm8nLCAnX2hhc2hjb2RlJwogCiAgICAgZGVmIF9fbmV3X18oY2xzLCBob3VyPTAsIG1pbnV0ZT0wLCBzZWNvbmQ9MCwgbWljcm9zZWNvbmQ9MCwgdHppbmZvPU5vbmUpOgogICAgICAgICAiIiJDb25zdHJ1Y3Rvci4KQEAgLTEwMjksMTggKzEwMzYsMjIgQEAKICAgICAgICAgc2Vjb25kLCBtaWNyb3NlY29uZCAoZGVmYXVsdCB0byB6ZXJvKQogICAgICAgICB0emluZm8gKGRlZmF1bHQgdG8gTm9uZSkKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoaG91ciwgYnl0ZXMpIGFuZCBsZW4oaG91cikgPT0gNjoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShob3VyLCBieXRlcykgYW5kIGxlbihob3VyKSA9PSA2IGFuZCBob3VyWzBdIDwgMjQ6CiAgICAgICAgICAgICAjIFBpY2tsZSBzdXBwb3J0CisgICAgICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQogICAgICAgICAgICAgc2VsZi5fX3NldHN0YXRlKGhvdXIsIG1pbnV0ZSBvciBOb25lKQorICAgICAgICAgICAgc2VsZi5faGFzaGNvZGUgPSAtMQogICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pY3Jvc2Vjb25kID0gX2NoZWNrX3RpbWVfZmllbGRzKAorICAgICAgICAgICAgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pY3Jvc2Vjb25kKQogICAgICAgICBfY2hlY2tfdHppbmZvX2FyZyh0emluZm8pCi0gICAgICAgIF9jaGVja190aW1lX2ZpZWxkcyhob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQpCisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCiAgICAgICAgIHNlbGYuX2hvdXIgPSBob3VyCiAgICAgICAgIHNlbGYuX21pbnV0ZSA9IG1pbnV0ZQogICAgICAgICBzZWxmLl9zZWNvbmQgPSBzZWNvbmQKICAgICAgICAgc2VsZi5fbWljcm9zZWNvbmQgPSBtaWNyb3NlY29uZAogICAgICAgICBzZWxmLl90emluZm8gPSB0emluZm8KKyAgICAgICAgc2VsZi5faGFzaGNvZGUgPSAtMQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgIyBSZWFkLW9ubHkgZmllbGQgYWNjZXNzb3JzCkBAIC0xMDc5LDEyICsxMDkwLDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHRpbWUpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlciwgYWxsb3dfbWl4ZWQ9VHJ1ZSkgIT0gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDw9IDAKQEAgLTExMjUsOCArMTEzMCw4IEBACiAgICAgICAgIGlmIGJhc2VfY29tcGFyZToKICAgICAgICAgICAgIHJldHVybiBfY21wKChzZWxmLl9ob3VyLCBzZWxmLl9taW51dGUsIHNlbGYuX3NlY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9taWNyb3NlY29uZCksCi0gICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5faG91ciwgb3RoZXIuX21pbnV0ZSwgb3RoZXIuX3NlY29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLl9taWNyb3NlY29uZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIuX2hvdXIsIG90aGVyLl9taW51dGUsIG90aGVyLl9zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIuX21pY3Jvc2Vjb25kKSkKICAgICAgICAgaWYgbXlvZmYgaXMgTm9uZSBvciBvdG9mZiBpcyBOb25lOgogICAgICAgICAgICAgaWYgYWxsb3dfbWl4ZWQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDIgIyBhcmJpdHJhcnkgbm9uLXplcm8gdmFsdWUKQEAgLTExMzksMTYgKzExNDQsMjAgQEAKIAogICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgIiIiSGFzaC4iIiIKLSAgICAgICAgdHpvZmYgPSBzZWxmLnV0Y29mZnNldCgpCi0gICAgICAgIGlmIG5vdCB0em9mZjogIyB6ZXJvIG9yIE5vbmUKLSAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2dldHN0YXRlKClbMF0pCi0gICAgICAgIGgsIG0gPSBkaXZtb2QodGltZWRlbHRhKGhvdXJzPXNlbGYuaG91ciwgbWludXRlcz1zZWxmLm1pbnV0ZSkgLSB0em9mZiwKLSAgICAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEoaG91cnM9MSkpCi0gICAgICAgIGFzc2VydCBub3QgbSAlIHRpbWVkZWx0YShtaW51dGVzPTEpLCAid2hvbGUgbWludXRlIgotICAgICAgICBtIC8vPSB0aW1lZGVsdGEobWludXRlcz0xKQotICAgICAgICBpZiAwIDw9IGggPCAyNDoKLSAgICAgICAgICAgIHJldHVybiBoYXNoKHRpbWUoaCwgbSwgc2VsZi5zZWNvbmQsIHNlbGYubWljcm9zZWNvbmQpKQotICAgICAgICByZXR1cm4gaGFzaCgoaCwgbSwgc2VsZi5zZWNvbmQsIHNlbGYubWljcm9zZWNvbmQpKQorICAgICAgICBpZiBzZWxmLl9oYXNoY29kZSA9PSAtMToKKyAgICAgICAgICAgIHR6b2ZmID0gc2VsZi51dGNvZmZzZXQoKQorICAgICAgICAgICAgaWYgbm90IHR6b2ZmOiAgIyB6ZXJvIG9yIE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9oYXNoY29kZSA9IGhhc2goc2VsZi5fZ2V0c3RhdGUoKVswXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaCwgbSA9IGRpdm1vZCh0aW1lZGVsdGEoaG91cnM9c2VsZi5ob3VyLCBtaW51dGVzPXNlbGYubWludXRlKSAtIHR6b2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRlbHRhKGhvdXJzPTEpKQorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgbSAlIHRpbWVkZWx0YShtaW51dGVzPTEpLCAid2hvbGUgbWludXRlIgorICAgICAgICAgICAgICAgIG0gLy89IHRpbWVkZWx0YShtaW51dGVzPTEpCisgICAgICAgICAgICAgICAgaWYgMCA8PSBoIDwgMjQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhc2hjb2RlID0gaGFzaCh0aW1lKGgsIG0sIHNlbGYuc2Vjb25kLCBzZWxmLm1pY3Jvc2Vjb25kKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYXNoY29kZSA9IGhhc2goKGgsIG0sIHNlbGYuc2Vjb25kLCBzZWxmLm1pY3Jvc2Vjb25kKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2hjb2RlCiAKICAgICAjIENvbnZlcnNpb24gdG8gc3RyaW5nCiAKQEAgLTExNzYsOCArMTE4NSw5IEBACiAgICAgICAgICAgICBzID0gIiwgJWQiICUgc2VsZi5fc2Vjb25kCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzID0gIiIKLSAgICAgICAgcz0gIiVzKCVkLCAlZCVzKSIgJSAoJ2RhdGV0aW1lLicgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faG91ciwgc2VsZi5fbWludXRlLCBzKQorICAgICAgICBzPSAiJXMuJXMoJWQsICVkJXMpIiAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hvdXIsIHNlbGYuX21pbnV0ZSwgcykKICAgICAgICAgaWYgc2VsZi5fdHppbmZvIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgYXNzZXJ0IHNbLTE6XSA9PSAiKSIKICAgICAgICAgICAgIHMgPSBzWzotMV0gKyAiLCB0emluZm89JXIiICUgc2VsZi5fdHppbmZvICsgIikiCkBAIC0xMjEwLDYgKzEyMjAsOCBAQAogICAgICAgICByZXR1cm4gX3dyYXBfc3RyZnRpbWUoc2VsZiwgZm10LCB0aW1ldHVwbGUpCiAKICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmbXQpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmbXQsIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm11c3QgYmUgc3RyLCBub3QgJXMiICUgdHlwZShmbXQpLl9fbmFtZV9fKQogICAgICAgICBpZiBsZW4oZm10KSAhPSAwOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RyZnRpbWUoZm10KQogICAgICAgICByZXR1cm4gc3RyKHNlbGYpCkBAIC0xMjY2LDE2ICsxMjc4LDggQEAKICAgICAgICAgICAgIG1pY3Jvc2Vjb25kID0gc2VsZi5taWNyb3NlY29uZAogICAgICAgICBpZiB0emluZm8gaXMgVHJ1ZToKICAgICAgICAgICAgIHR6aW5mbyA9IHNlbGYudHppbmZvCi0gICAgICAgIF9jaGVja190aW1lX2ZpZWxkcyhob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQpCi0gICAgICAgIF9jaGVja190emluZm9fYXJnKHR6aW5mbykKICAgICAgICAgcmV0dXJuIHRpbWUoaG91ciwgbWludXRlLCBzZWNvbmQsIG1pY3Jvc2Vjb25kLCB0emluZm8pCiAKLSAgICBkZWYgX19ib29sX18oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuc2Vjb25kIG9yIHNlbGYubWljcm9zZWNvbmQ6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBvZmZzZXQgPSBzZWxmLnV0Y29mZnNldCgpIG9yIHRpbWVkZWx0YSgwKQotICAgICAgICByZXR1cm4gdGltZWRlbHRhKGhvdXJzPXNlbGYuaG91ciwgbWludXRlcz1zZWxmLm1pbnV0ZSkgIT0gb2Zmc2V0Ci0KICAgICAjIFBpY2tsZSBzdXBwb3J0LgogCiAgICAgZGVmIF9nZXRzdGF0ZShzZWxmKToKQEAgLTEyODksMTUgKzEyOTMsMTEgQEAKICAgICAgICAgICAgIHJldHVybiAoYmFzZXN0YXRlLCBzZWxmLl90emluZm8pCiAKICAgICBkZWYgX19zZXRzdGF0ZShzZWxmLCBzdHJpbmcsIHR6aW5mbyk6Ci0gICAgICAgIGlmIGxlbihzdHJpbmcpICE9IDYgb3Igc3RyaW5nWzBdID49IDI0OgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikKLSAgICAgICAgKHNlbGYuX2hvdXIsIHNlbGYuX21pbnV0ZSwgc2VsZi5fc2Vjb25kLAotICAgICAgICAgdXMxLCB1czIsIHVzMykgPSBzdHJpbmcKKyAgICAgICAgaWYgdHppbmZvIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZSh0emluZm8sIF90emluZm9fY2xhc3MpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJiYWQgdHppbmZvIHN0YXRlIGFyZyIpCisgICAgICAgIHNlbGYuX2hvdXIsIHNlbGYuX21pbnV0ZSwgc2VsZi5fc2Vjb25kLCB1czEsIHVzMiwgdXMzID0gc3RyaW5nCiAgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kID0gKCgodXMxIDw8IDgpIHwgdXMyKSA8PCA4KSB8IHVzMwotICAgICAgICBpZiB0emluZm8gaXMgTm9uZSBvciBpc2luc3RhbmNlKHR6aW5mbywgX3R6aW5mb19jbGFzcyk6Ci0gICAgICAgICAgICBzZWxmLl90emluZm8gPSB0emluZm8KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYmFkIHR6aW5mbyBzdGF0ZSBhcmcgJXIiICUgdHppbmZvKQorICAgICAgICBzZWxmLl90emluZm8gPSB0emluZm8KIAogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gKHRpbWUsIHNlbGYuX2dldHN0YXRlKCkpCkBAIC0xMzE0LDI1ICsxMzE0LDMwIEBACiAgICAgVGhlIHllYXIsIG1vbnRoIGFuZCBkYXkgYXJndW1lbnRzIGFyZSByZXF1aXJlZC4gdHppbmZvIG1heSBiZSBOb25lLCBvciBhbgogICAgIGluc3RhbmNlIG9mIGEgdHppbmZvIHN1YmNsYXNzLiBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBtYXkgYmUgaW50cy4KICAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSBkYXRlLl9fc2xvdHNfXyArIHRpbWUuX19zbG90c19fCiAKLSAgICBfX3Nsb3RzX18gPSBkYXRlLl9fc2xvdHNfXyArICgKLSAgICAgICAgJ19ob3VyJywgJ19taW51dGUnLCAnX3NlY29uZCcsCi0gICAgICAgICdfbWljcm9zZWNvbmQnLCAnX3R6aW5mbycpCiAgICAgZGVmIF9fbmV3X18oY2xzLCB5ZWFyLCBtb250aD1Ob25lLCBkYXk9Tm9uZSwgaG91cj0wLCBtaW51dGU9MCwgc2Vjb25kPTAsCiAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmQ9MCwgdHppbmZvPU5vbmUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHllYXIsIGJ5dGVzKSBhbmQgbGVuKHllYXIpID09IDEwOgorICAgICAgICBpZiBpc2luc3RhbmNlKHllYXIsIGJ5dGVzKSBhbmQgbGVuKHllYXIpID09IDEwIGFuZCAxIDw9IHllYXJbMl0gPD0gMTI6CiAgICAgICAgICAgICAjIFBpY2tsZSBzdXBwb3J0Ci0gICAgICAgICAgICBzZWxmID0gZGF0ZS5fX25ld19fKGNscywgeWVhcls6NF0pCisgICAgICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQogICAgICAgICAgICAgc2VsZi5fX3NldHN0YXRlKHllYXIsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5faGFzaGNvZGUgPSAtMQogICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgeWVhciwgbW9udGgsIGRheSA9IF9jaGVja19kYXRlX2ZpZWxkcyh5ZWFyLCBtb250aCwgZGF5KQorICAgICAgICBob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQgPSBfY2hlY2tfdGltZV9maWVsZHMoCisgICAgICAgICAgICBob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQpCiAgICAgICAgIF9jaGVja190emluZm9fYXJnKHR6aW5mbykKLSAgICAgICAgX2NoZWNrX3RpbWVfZmllbGRzKGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWNyb3NlY29uZCkKLSAgICAgICAgc2VsZiA9IGRhdGUuX19uZXdfXyhjbHMsIHllYXIsIG1vbnRoLCBkYXkpCisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuX3llYXIgPSB5ZWFyCisgICAgICAgIHNlbGYuX21vbnRoID0gbW9udGgKKyAgICAgICAgc2VsZi5fZGF5ID0gZGF5CiAgICAgICAgIHNlbGYuX2hvdXIgPSBob3VyCiAgICAgICAgIHNlbGYuX21pbnV0ZSA9IG1pbnV0ZQogICAgICAgICBzZWxmLl9zZWNvbmQgPSBzZWNvbmQKICAgICAgICAgc2VsZi5fbWljcm9zZWNvbmQgPSBtaWNyb3NlY29uZAogICAgICAgICBzZWxmLl90emluZm8gPSB0emluZm8KKyAgICAgICAgc2VsZi5faGFzaGNvZGUgPSAtMQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgIyBSZWFkLW9ubHkgZmllbGQgYWNjZXNzb3JzCkBAIC0xMzk5LDExICsxNDA0LDYgQEAKICAgICAgICAgIiIiQ29uc3RydWN0IGEgbmFpdmUgVVRDIGRhdGV0aW1lIGZyb20gYSBQT1NJWCB0aW1lc3RhbXAuIiIiCiAgICAgICAgIHJldHVybiBjbHMuX2Zyb210aW1lc3RhbXAodCwgVHJ1ZSwgTm9uZSkKIAotICAgICMgWFhYIFRoaXMgaXMgc3VwcG9zZWQgdG8gZG8gYmV0dGVyIHRoYW4gd2UgKmNhbiogZG8gYnkgdXNpbmcgdGltZS50aW1lKCksCi0gICAgIyBYWFggaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIGEgbW9yZSBhY2N1cmF0ZSB3YXkuICBUaGUgQyBpbXBsZW1lbnRhdGlvbgotICAgICMgWFhYIHVzZXMgZ2V0dGltZW9mZGF5IG9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgaXQsIGJ1dCB0aGF0IGlzbid0Ci0gICAgIyBYWFggYXZhaWxhYmxlIGZyb20gUHl0aG9uLiAgU28gbm93KCkgbWF5IHJldHVybiBkaWZmZXJlbnQgcmVzdWx0cwotICAgICMgWFhYIGFjcm9zcyB0aGUgaW1wbGVtZW50YXRpb25zLgogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBub3coY2xzLCB0ej1Ob25lKToKICAgICAgICAgIkNvbnN0cnVjdCBhIGRhdGV0aW1lIGZyb20gdGltZS50aW1lKCkgYW5kIG9wdGlvbmFsIHRpbWUgem9uZSBpbmZvLiIKQEAgLTE0OTAsMTEgKzE0OTAsOCBAQAogICAgICAgICAgICAgbWljcm9zZWNvbmQgPSBzZWxmLm1pY3Jvc2Vjb25kCiAgICAgICAgIGlmIHR6aW5mbyBpcyBUcnVlOgogICAgICAgICAgICAgdHppbmZvID0gc2VsZi50emluZm8KLSAgICAgICAgX2NoZWNrX2RhdGVfZmllbGRzKHllYXIsIG1vbnRoLCBkYXkpCi0gICAgICAgIF9jaGVja190aW1lX2ZpZWxkcyhob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQpCi0gICAgICAgIF9jaGVja190emluZm9fYXJnKHR6aW5mbykKLSAgICAgICAgcmV0dXJuIGRhdGV0aW1lKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZCwgdHppbmZvKQorICAgICAgICByZXR1cm4gZGF0ZXRpbWUoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pY3Jvc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKQogCiAgICAgZGVmIGFzdGltZXpvbmUoc2VsZiwgdHo9Tm9uZSk6CiAgICAgICAgIGlmIHR6IGlzIE5vbmU6CkBAIC0xNTY0LDEwICsxNTYxLDkgQEAKICAgICAgICAgT3B0aW9uYWwgYXJndW1lbnQgc2VwIHNwZWNpZmllcyB0aGUgc2VwYXJhdG9yIGJldHdlZW4gZGF0ZSBhbmQKICAgICAgICAgdGltZSwgZGVmYXVsdCAnVCcuCiAgICAgICAgICIiIgotICAgICAgICBzID0gKCIlMDRkLSUwMmQtJTAyZCVjIiAlIChzZWxmLl95ZWFyLCBzZWxmLl9tb250aCwgc2VsZi5fZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcCkgKwotICAgICAgICAgICAgICAgIF9mb3JtYXRfdGltZShzZWxmLl9ob3VyLCBzZWxmLl9taW51dGUsIHNlbGYuX3NlY29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWljcm9zZWNvbmQpKQorICAgICAgICBzID0gKCIlMDRkLSUwMmQtJTAyZCVjIiAlIChzZWxmLl95ZWFyLCBzZWxmLl9tb250aCwgc2VsZi5fZGF5LCBzZXApICsKKyAgICAgICAgICAgICBfZm9ybWF0X3RpbWUoc2VsZi5faG91ciwgc2VsZi5fbWludXRlLCBzZWxmLl9zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kKSkKICAgICAgICAgb2ZmID0gc2VsZi51dGNvZmZzZXQoKQogICAgICAgICBpZiBvZmYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBvZmYuZGF5cyA8IDA6CkBAIC0xNTgzLDE0ICsxNTc5LDE1IEBACiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICIiIkNvbnZlcnQgdG8gZm9ybWFsIHN0cmluZywgZm9yIHJlcHIoKS4iIiIKLSAgICAgICAgTCA9IFtzZWxmLl95ZWFyLCBzZWxmLl9tb250aCwgc2VsZi5fZGF5LCAjIFRoZXNlIGFyZSBuZXZlciB6ZXJvCisgICAgICAgIEwgPSBbc2VsZi5feWVhciwgc2VsZi5fbW9udGgsIHNlbGYuX2RheSwgICMgVGhlc2UgYXJlIG5ldmVyIHplcm8KICAgICAgICAgICAgICBzZWxmLl9ob3VyLCBzZWxmLl9taW51dGUsIHNlbGYuX3NlY29uZCwgc2VsZi5fbWljcm9zZWNvbmRdCiAgICAgICAgIGlmIExbLTFdID09IDA6CiAgICAgICAgICAgICBkZWwgTFstMV0KICAgICAgICAgaWYgTFstMV0gPT0gMDoKICAgICAgICAgICAgIGRlbCBMWy0xXQotICAgICAgICBzID0gIiwgIi5qb2luKG1hcChzdHIsIEwpKQotICAgICAgICBzID0gIiVzKCVzKSIgJSAoJ2RhdGV0aW1lLicgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgcykKKyAgICAgICAgcyA9ICIlcy4lcyglcykiICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiLmpvaW4obWFwKHN0ciwgTCkpKQogICAgICAgICBpZiBzZWxmLl90emluZm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBhc3NlcnQgc1stMTpdID09ICIpIgogICAgICAgICAgICAgcyA9IHNbOi0xXSArICIsIHR6aW5mbz0lciIgJSBzZWxmLl90emluZm8gKyAiKSIKQEAgLTE2MjIsNyArMTYxOSw5IEBACiAgICAgICAgIGl0IG1lYW4gYW55dGhpbmcgaW4gcGFydGljdWxhci4gRm9yIGV4YW1wbGUsICJHTVQiLCAiVVRDIiwgIi01MDAiLAogICAgICAgICAiLTU6MDAiLCAiRURUIiwgIlVTL0Vhc3Rlcm4iLCAiQW1lcmljYS9OZXcgWW9yayIgYXJlIGFsbCB2YWxpZCByZXBsaWVzLgogICAgICAgICAiIiIKLSAgICAgICAgbmFtZSA9IF9jYWxsX3R6aW5mb19tZXRob2Qoc2VsZi5fdHppbmZvLCAidHpuYW1lIiwgc2VsZikKKyAgICAgICAgaWYgc2VsZi5fdHppbmZvIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBuYW1lID0gc2VsZi5fdHppbmZvLnR6bmFtZShzZWxmKQogICAgICAgICBfY2hlY2tfdHpuYW1lKG5hbWUpCiAgICAgICAgIHJldHVybiBuYW1lCiAKQEAgLTE2NTEsMTQgKzE2NTAsNiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZGF0ZXRpbWUpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlciwgYWxsb3dfbWl4ZWQ9VHJ1ZSkgIT0gMAotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBkYXRlKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBkYXRldGltZSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8PSAwCkBAIC0xNzA4LDkgKzE2OTksOSBAQAogICAgICAgICAgICAgcmV0dXJuIF9jbXAoKHNlbGYuX3llYXIsIHNlbGYuX21vbnRoLCBzZWxmLl9kYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faG91ciwgc2VsZi5fbWludXRlLCBzZWxmLl9zZWNvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWljcm9zZWNvbmQpLAotICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIuX3llYXIsIG90aGVyLl9tb250aCwgb3RoZXIuX2RheSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLl9ob3VyLCBvdGhlci5fbWludXRlLCBvdGhlci5fc2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIuX21pY3Jvc2Vjb25kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5feWVhciwgb3RoZXIuX21vbnRoLCBvdGhlci5fZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLl9ob3VyLCBvdGhlci5fbWludXRlLCBvdGhlci5fc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLl9taWNyb3NlY29uZCkpCiAgICAgICAgIGlmIG15b2ZmIGlzIE5vbmUgb3Igb3RvZmYgaXMgTm9uZToKICAgICAgICAgICAgIGlmIGFsbG93X21peGVkOgogICAgICAgICAgICAgICAgIHJldHVybiAyICMgYXJiaXRyYXJ5IG5vbi16ZXJvIHZhbHVlCkBAIC0xNzY4LDEyICsxNzU5LDE1IEBACiAgICAgICAgIHJldHVybiBiYXNlICsgb3RvZmYgLSBteW9mZgogCiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICB0em9mZiA9IHNlbGYudXRjb2Zmc2V0KCkKLSAgICAgICAgaWYgdHpvZmYgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2dldHN0YXRlKClbMF0pCi0gICAgICAgIGRheXMgPSBfeW1kMm9yZChzZWxmLnllYXIsIHNlbGYubW9udGgsIHNlbGYuZGF5KQotICAgICAgICBzZWNvbmRzID0gc2VsZi5ob3VyICogMzYwMCArIHNlbGYubWludXRlICogNjAgKyBzZWxmLnNlY29uZAotICAgICAgICByZXR1cm4gaGFzaCh0aW1lZGVsdGEoZGF5cywgc2Vjb25kcywgc2VsZi5taWNyb3NlY29uZCkgLSB0em9mZikKKyAgICAgICAgaWYgc2VsZi5faGFzaGNvZGUgPT0gLTE6CisgICAgICAgICAgICB0em9mZiA9IHNlbGYudXRjb2Zmc2V0KCkKKyAgICAgICAgICAgIGlmIHR6b2ZmIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5faGFzaGNvZGUgPSBoYXNoKHNlbGYuX2dldHN0YXRlKClbMF0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRheXMgPSBfeW1kMm9yZChzZWxmLnllYXIsIHNlbGYubW9udGgsIHNlbGYuZGF5KQorICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWxmLmhvdXIgKiAzNjAwICsgc2VsZi5taW51dGUgKiA2MCArIHNlbGYuc2Vjb25kCisgICAgICAgICAgICAgICAgc2VsZi5faGFzaGNvZGUgPSBoYXNoKHRpbWVkZWx0YShkYXlzLCBzZWNvbmRzLCBzZWxmLm1pY3Jvc2Vjb25kKSAtIHR6b2ZmKQorICAgICAgICByZXR1cm4gc2VsZi5faGFzaGNvZGUKIAogICAgICMgUGlja2xlIHN1cHBvcnQuCiAKQEAgLTE3OTAsMTQgKzE3ODQsMTMgQEAKICAgICAgICAgICAgIHJldHVybiAoYmFzZXN0YXRlLCBzZWxmLl90emluZm8pCiAKICAgICBkZWYgX19zZXRzdGF0ZShzZWxmLCBzdHJpbmcsIHR6aW5mbyk6CisgICAgICAgIGlmIHR6aW5mbyBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UodHppbmZvLCBfdHppbmZvX2NsYXNzKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYmFkIHR6aW5mbyBzdGF0ZSBhcmciKQogICAgICAgICAoeWhpLCB5bG8sIHNlbGYuX21vbnRoLCBzZWxmLl9kYXksIHNlbGYuX2hvdXIsCiAgICAgICAgICBzZWxmLl9taW51dGUsIHNlbGYuX3NlY29uZCwgdXMxLCB1czIsIHVzMykgPSBzdHJpbmcKICAgICAgICAgc2VsZi5feWVhciA9IHloaSAqIDI1NiArIHlsbwogICAgICAgICBzZWxmLl9taWNyb3NlY29uZCA9ICgoKHVzMSA8PCA4KSB8IHVzMikgPDwgOCkgfCB1czMKLSAgICAgICAgaWYgdHppbmZvIGlzIE5vbmUgb3IgaXNpbnN0YW5jZSh0emluZm8sIF90emluZm9fY2xhc3MpOgotICAgICAgICAgICAgc2VsZi5fdHppbmZvID0gdHppbmZvCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImJhZCB0emluZm8gc3RhdGUgYXJnICVyIiAlIHR6aW5mbykKKyAgICAgICAgc2VsZi5fdHppbmZvID0gdHppbmZvCiAKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXywgc2VsZi5fZ2V0c3RhdGUoKSkKQEAgLTE4MTMsNyArMTgwNiw3IEBACiAgICAgIyBYWFggVGhpcyBjb3VsZCBiZSBkb25lIG1vcmUgZWZmaWNpZW50bHkKICAgICBUSFVSU0RBWSA9IDMKICAgICBmaXJzdGRheSA9IF95bWQyb3JkKHllYXIsIDEsIDEpCi0gICAgZmlyc3R3ZWVrZGF5ID0gKGZpcnN0ZGF5ICsgNikgJSA3ICMgU2VlIHdlZWtkYXkoKSBhYm92ZQorICAgIGZpcnN0d2Vla2RheSA9IChmaXJzdGRheSArIDYpICUgNyAgIyBTZWUgd2Vla2RheSgpIGFib3ZlCiAgICAgd2VlazFtb25kYXkgPSBmaXJzdGRheSAtIGZpcnN0d2Vla2RheQogICAgIGlmIGZpcnN0d2Vla2RheSA+IFRIVVJTREFZOgogICAgICAgICB3ZWVrMW1vbmRheSArPSA3CkBAIC0xODM0LDEzICsxODI3LDEyIEBACiAgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBtdXN0IGJlIGEgc3RyaW5nIikKICAgICAgICAgaWYgbm90IGNscy5fbWlub2Zmc2V0IDw9IG9mZnNldCA8PSBjbHMuX21heG9mZnNldDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdGltZWRlbHRhIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHN0cmljdGx5IGJldHdlZW4gLXRpbWVkZWx0YShob3Vycz0yNCkgYW5kIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRpbWVkZWx0YShob3Vycz0yNCkuIikKLSAgICAgICAgaWYgKG9mZnNldC5taWNyb3NlY29uZHMgIT0gMCBvcgotICAgICAgICAgICAgb2Zmc2V0LnNlY29uZHMgJSA2MCAhPSAwKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdGltZWRlbHRhIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlcHJlc2VudGluZyBhIHdob2xlIG51bWJlciBvZiBtaW51dGVzIikKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdGltZWRlbHRhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdGx5IGJldHdlZW4gLXRpbWVkZWx0YShob3Vycz0yNCkgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVkZWx0YShob3Vycz0yNCkuIikKKyAgICAgICAgaWYgKG9mZnNldC5taWNyb3NlY29uZHMgIT0gMCBvciBvZmZzZXQuc2Vjb25kcyAlIDYwICE9IDApOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB0aW1lZGVsdGEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVwcmVzZW50aW5nIGEgd2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMiKQogICAgICAgICByZXR1cm4gY2xzLl9jcmVhdGUob2Zmc2V0LCBuYW1lKQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0xODc3LDEwICsxODY5LDEyIEBACiAgICAgICAgIGlmIHNlbGYgaXMgc2VsZi51dGM6CiAgICAgICAgICAgICByZXR1cm4gJ2RhdGV0aW1lLnRpbWV6b25lLnV0YycKICAgICAgICAgaWYgc2VsZi5fbmFtZSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuICIlcyglcikiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0KQotICAgICAgICByZXR1cm4gIiVzKCVyLCAlcikiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0LCBzZWxmLl9uYW1lKQorICAgICAgICAgICAgcmV0dXJuICIlcy4lcyglcikiICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29mZnNldCkKKyAgICAgICAgcmV0dXJuICIlcy4lcyglciwgJXIpIiAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vZmZzZXQsIHNlbGYuX25hbWUpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYudHpuYW1lKE5vbmUpCkBAIC0yMTM1LDE0ICsyMTI5LDEzIEBACiAgICAgcGFzcwogZWxzZToKICAgICAjIENsZWFuIHVwIHVudXNlZCBuYW1lcwotICAgIGRlbCAoX0RBWU5BTUVTLCBfREFZU19CRUZPUkVfTU9OVEgsIF9EQVlTX0lOX01PTlRILAotICAgICAgICAgX0RJMTAwWSwgX0RJNDAwWSwgX0RJNFksIF9NQVhPUkRJTkFMLCBfTU9OVEhOQU1FUywKLSAgICAgICAgIF9idWlsZF9zdHJ1Y3RfdGltZSwgX2NhbGxfdHppbmZvX21ldGhvZCwgX2NoZWNrX2RhdGVfZmllbGRzLAotICAgICAgICAgX2NoZWNrX3RpbWVfZmllbGRzLCBfY2hlY2tfdHppbmZvX2FyZywgX2NoZWNrX3R6bmFtZSwKLSAgICAgICAgIF9jaGVja191dGNfb2Zmc2V0LCBfY21wLCBfY21wZXJyb3IsIF9kYXRlX2NsYXNzLCBfZGF5c19iZWZvcmVfbW9udGgsCi0gICAgICAgICBfZGF5c19iZWZvcmVfeWVhciwgX2RheXNfaW5fbW9udGgsIF9mb3JtYXRfdGltZSwgX2lzX2xlYXAsCi0gICAgICAgICBfaXNvd2VlazFtb25kYXksIF9tYXRoLCBfb3JkMnltZCwgX3RpbWUsIF90aW1lX2NsYXNzLCBfdHppbmZvX2NsYXNzLAotICAgICAgICAgX3dyYXBfc3RyZnRpbWUsIF95bWQyb3JkKQorICAgIGRlbCAoX0RBWU5BTUVTLCBfREFZU19CRUZPUkVfTU9OVEgsIF9EQVlTX0lOX01PTlRILCBfREkxMDBZLCBfREk0MDBZLAorICAgICAgICAgX0RJNFksIF9FUE9DSCwgX01BWE9SRElOQUwsIF9NT05USE5BTUVTLCBfYnVpbGRfc3RydWN0X3RpbWUsCisgICAgICAgICBfY2hlY2tfZGF0ZV9maWVsZHMsIF9jaGVja19pbnRfZmllbGQsIF9jaGVja190aW1lX2ZpZWxkcywKKyAgICAgICAgIF9jaGVja190emluZm9fYXJnLCBfY2hlY2tfdHpuYW1lLCBfY2hlY2tfdXRjX29mZnNldCwgX2NtcCwgX2NtcGVycm9yLAorICAgICAgICAgX2RhdGVfY2xhc3MsIF9kYXlzX2JlZm9yZV9tb250aCwgX2RheXNfYmVmb3JlX3llYXIsIF9kYXlzX2luX21vbnRoLAorICAgICAgICAgX2Zvcm1hdF90aW1lLCBfaXNfbGVhcCwgX2lzb3dlZWsxbW9uZGF5LCBfbWF0aCwgX29yZDJ5bWQsCisgICAgICAgICBfdGltZSwgX3RpbWVfY2xhc3MsIF90emluZm9fY2xhc3MsIF93cmFwX3N0cmZ0aW1lLCBfeW1kMm9yZCkKICAgICAjIFhYWCBTaW5jZSBpbXBvcnQgKiBhYm92ZSBleGNsdWRlcyBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggXywKICAgICAjIGRvY3N0cmluZyBkb2VzIG5vdCBnZXQgb3ZlcndyaXR0ZW4uIEluIHRoZSBmdXR1cmUsIGl0IG1heSBiZQogICAgICMgYXBwcm9wcmlhdGUgdG8gbWFpbnRhaW4gYSBzaW5nbGUgbW9kdWxlIGxldmVsIGRvY3N0cmluZyBhbmQKZGlmZiAtLWdpdCBhL0xpYi9kYm0vX19pbml0X18ucHkgYi9MaWIvZGJtL19faW5pdF9fLnB5CmluZGV4IDVmNDY2NGEuLjY4MzFhODQgMTAwNjQ0Ci0tLSBhL0xpYi9kYm0vX19pbml0X18ucHkKKysrIGIvTGliL2RibS9fX2luaXRfXy5weQpAQCAtMTUzLDkgKzE1Myw5IEBACiAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICAjIFJlYWQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIC0tIHRoZSBtYWdpYyBudW1iZXIKLSAgICBzMTYgPSBmLnJlYWQoMTYpCi0gICAgZi5jbG9zZSgpCisgICAgd2l0aCBmOgorICAgICAgICAjIFJlYWQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIC0tIHRoZSBtYWdpYyBudW1iZXIKKyAgICAgICAgczE2ID0gZi5yZWFkKDE2KQogICAgIHMgPSBzMTZbMDo0XQogCiAgICAgIyBSZXR1cm4gIiIgaWYgbm90IGF0IGxlYXN0IDQgYnl0ZXMKZGlmZiAtLWdpdCBhL0xpYi9kYm0vZHVtYi5weSBiL0xpYi9kYm0vZHVtYi5weQppbmRleCA2M2JjMzI5Li43Nzc3YTdjIDEwMDY0NAotLS0gYS9MaWIvZGJtL2R1bWIucHkKKysrIGIvTGliL2RibS9kdW1iLnB5CkBAIC00NSw3ICs0NSw3IEBACiAgICAgX29zID0gX29zICAgICAgICMgZm9yIF9jb21taXQoKQogICAgIF9pbyA9IF9pbyAgICAgICAjIGZvciBfY29tbWl0KCkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlYmFzZW5hbWUsIG1vZGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlYmFzZW5hbWUsIG1vZGUsIGZsYWc9J2MnKToKICAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKIAogICAgICAgICAjIFRoZSBkaXJlY3RvcnkgZmlsZSBpcyBhIHRleHQgZmlsZS4gIEVhY2ggbGluZSBsb29rcyBsaWtlCkBAIC02NSw2ICs2NSwxNyBAQAogICAgICAgICAjIFRoZSBpbmRleCBpcyBhbiBpbi1tZW1vcnkgZGljdCwgbWlycm9yaW5nIHRoZSBkaXJlY3RvcnkgZmlsZS4KICAgICAgICAgc2VsZi5faW5kZXggPSBOb25lICAjIG1hcHMga2V5cyB0byAocG9zLCBzaXopIHBhaXJzCiAKKyAgICAgICAgIyBIYW5kbGUgdGhlIGNyZWF0aW9uCisgICAgICAgIHNlbGYuX2NyZWF0ZShmbGFnKQorICAgICAgICBzZWxmLl91cGRhdGUoKQorCisgICAgZGVmIF9jcmVhdGUoc2VsZiwgZmxhZyk6CisgICAgICAgIGlmIGZsYWcgPT0gJ24nOgorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIChzZWxmLl9kYXRmaWxlLCBzZWxmLl9iYWtmaWxlLCBzZWxmLl9kaXJmaWxlKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9vcy5yZW1vdmUoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBNb2QgYnkgSmFjazogY3JlYXRlIGRhdGEgZmlsZSBpZiBuZWVkZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyJywgZW5jb2Rpbmc9IkxhdGluLTEiKQpAQCAtNzMsNyArODQsNiBAQAogICAgICAgICAgICAgICAgIHNlbGYuX2NobW9kKHNlbGYuX2RhdGZpbGUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fdXBkYXRlKCkKIAogICAgICMgUmVhZCBkaXJlY3RvcnkgZmlsZSBpbnRvIHRoZSBpbi1tZW1vcnkgaW5kZXggZGljdC4KICAgICBkZWYgX3VwZGF0ZShzZWxmKToKQEAgLTI2NiwyMCArMjc2LDIwIEBACiAgICAgICAgIHNlbGYuY2xvc2UoKQogCiAKLWRlZiBvcGVuKGZpbGUsIGZsYWc9Tm9uZSwgbW9kZT0wbzY2Nik6CitkZWYgb3BlbihmaWxlLCBmbGFnPSdjJywgbW9kZT0wbzY2Nik6CiAgICAgIiIiT3BlbiB0aGUgZGF0YWJhc2UgZmlsZSwgZmlsZW5hbWUsIGFuZCByZXR1cm4gY29ycmVzcG9uZGluZyBvYmplY3QuCiAKICAgICBUaGUgZmxhZyBhcmd1bWVudCwgdXNlZCB0byBjb250cm9sIGhvdyB0aGUgZGF0YWJhc2UgaXMgb3BlbmVkIGluIHRoZQotICAgIG90aGVyIERCTSBpbXBsZW1lbnRhdGlvbnMsIGlzIGlnbm9yZWQgaW4gdGhlIGRibS5kdW1iIG1vZHVsZTsgdGhlCi0gICAgZGF0YWJhc2UgaXMgYWx3YXlzIG9wZW5lZCBmb3IgdXBkYXRlLCBhbmQgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXMKLSAgICBub3QgZXhpc3QuCisgICAgb3RoZXIgREJNIGltcGxlbWVudGF0aW9ucywgc3VwcG9ydHMgb25seSB0aGUgc2VtYW50aWNzIG9mICdjJyBhbmQgJ24nCisgICAgdmFsdWVzLiAgT3RoZXIgdmFsdWVzIHdpbGwgZGVmYXVsdCB0byB0aGUgc2VtYW50aWNzIG9mICdjJyB2YWx1ZToKKyAgICB0aGUgZGF0YWJhc2Ugd2lsbCBhbHdheXMgb3BlbmVkIGZvciB1cGRhdGUgYW5kIHdpbGwgYmUgY3JlYXRlZCBpZiBpdAorICAgIGRvZXMgbm90IGV4aXN0LgogCiAgICAgVGhlIG9wdGlvbmFsIG1vZGUgYXJndW1lbnQgaXMgdGhlIFVOSVggbW9kZSBvZiB0aGUgZmlsZSwgdXNlZCBvbmx5IHdoZW4KICAgICB0aGUgZGF0YWJhc2UgaGFzIHRvIGJlIGNyZWF0ZWQuICBJdCBkZWZhdWx0cyB0byBvY3RhbCBjb2RlIDBvNjY2IChhbmQKICAgICB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSBwcmV2YWlsaW5nIHVtYXNrKS4KIAogICAgICIiIgotICAgICMgZmxhZyBhcmd1bWVudCBpcyBjdXJyZW50bHkgaWdub3JlZAogCiAgICAgIyBNb2RpZnkgbW9kZSBkZXBlbmRpbmcgb24gdGhlIHVtYXNrCiAgICAgdHJ5OgpAQCAtMjkwLDUgKzMwMCw0IEBACiAgICAgZWxzZToKICAgICAgICAgIyBUdXJuIG9mZiBhbnkgYml0cyB0aGF0IGFyZSBzZXQgaW4gdGhlIHVtYXNrCiAgICAgICAgIG1vZGUgPSBtb2RlICYgKH51bSkKLQotICAgIHJldHVybiBfRGF0YWJhc2UoZmlsZSwgbW9kZSkKKyAgICByZXR1cm4gX0RhdGFiYXNlKGZpbGUsIG1vZGUsIGZsYWc9ZmxhZykKZGlmZiAtLWdpdCBhL0xpYi9kZWNpbWFsLnB5IGIvTGliL2RlY2ltYWwucHkKaW5kZXggMzI0ZTRmOS4uNzc0NmVhMiAxMDA2NDQKLS0tIGEvTGliL2RlY2ltYWwucHkKKysrIGIvTGliL2RlY2ltYWwucHkKQEAgLTEsNjQxMyArMSwxMSBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMDQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSMgV3JpdHRlbiBieSBFcmljIFByaWNlIDxlcHJpY2UgYXQgdGpoc3N0LmVkdT4KLSMgICAgYW5kIEZhY3VuZG8gQmF0aXN0YSA8ZmFjdW5kbyBhdCB0YW5pcXVldGlsLmNvbS5hcj4KLSMgICAgYW5kIFJheW1vbmQgSGV0dGluZ2VyIDxweXRob24gYXQgcmNuLmNvbT4KLSMgICAgYW5kIEFhaHogPGFhaHogYXQgcG9ib3guY29tPgotIyAgICBhbmQgVGltIFBldGVycwotCi0jIFRoaXMgbW9kdWxlIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgbGF0ZXN0IHVwZGF0ZXMgb2YgdGhlCi0jIElCTSBzcGVjaWZpY2F0aW9uIGFzIGl0IGV2b2x2ZXMuICBUaG9zZSB1cGRhdGVzIHdpbGwgYmUgdHJlYXRlZAotIyBhcyBidWcgZml4ZXMgKGRldmlhdGlvbiBmcm9tIHRoZSBzcGVjIGlzIGEgY29tcGF0aWJpbGl0eSwgdXNhYmlsaXR5Ci0jIGJ1ZykgYW5kIHdpbGwgYmUgYmFja3BvcnRlZC4gIEF0IHRoaXMgcG9pbnQgdGhlIHNwZWMgaXMgc3RhYmlsaXppbmcKLSMgYW5kIHRoZSB1cGRhdGVzIGFyZSBiZWNvbWluZyBmZXdlciwgc21hbGxlciwgYW5kIGxlc3Mgc2lnbmlmaWNhbnQuCi0KLSIiIgotVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWMgYmFzZWQgb24KLXRoZSBHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBTcGVjaWZpY2F0aW9uOgotCi0gICAgaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsL2RlY2FyaXRoLmh0bWwKLQotYW5kIElFRUUgc3RhbmRhcmQgODU0LTE5ODc6Ci0KLSAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lFRUVfODU0LTE5ODcKLQotRGVjaW1hbCBmbG9hdGluZyBwb2ludCBoYXMgZmluaXRlIHByZWNpc2lvbiB3aXRoIGFyYml0cmFyaWx5IGxhcmdlIGJvdW5kcy4KLQotVGhlIHB1cnBvc2Ugb2YgdGhpcyBtb2R1bGUgaXMgdG8gc3VwcG9ydCBhcml0aG1ldGljIHVzaW5nIGZhbWlsaWFyCi0ic2Nob29saG91c2UiIHJ1bGVzIGFuZCB0byBhdm9pZCBzb21lIG9mIHRoZSB0cmlja3kgcmVwcmVzZW50YXRpb24KLWlzc3VlcyBhc3NvY2lhdGVkIHdpdGggYmluYXJ5IGZsb2F0aW5nIHBvaW50LiAgVGhlIHBhY2thZ2UgaXMgZXNwZWNpYWxseQotdXNlZnVsIGZvciBmaW5hbmNpYWwgYXBwbGljYXRpb25zIG9yIGZvciBjb250ZXh0cyB3aGVyZSB1c2VycyBoYXZlCi1leHBlY3RhdGlvbnMgdGhhdCBhcmUgYXQgb2RkcyB3aXRoIGJpbmFyeSBmbG9hdGluZyBwb2ludCAoZm9yIGluc3RhbmNlLAotaW4gYmluYXJ5IGZsb2F0aW5nIHBvaW50LCAxLjAwICUgMC4xIGdpdmVzIDAuMDk5OTk5OTk5OTk5OTk5OTUgaW5zdGVhZAotb2YgMC4wOyBEZWNpbWFsKCcxLjAwJykgJSBEZWNpbWFsKCcwLjEnKSByZXR1cm5zIHRoZSBleHBlY3RlZAotRGVjaW1hbCgnMC4wMCcpKS4KLQotSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiB1c2luZyB0aGUgZGVjaW1hbCBtb2R1bGU6Ci0KLT4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0ICoKLT4+PiBzZXRjb250ZXh0KEV4dGVuZGVkQ29udGV4dCkKLT4+PiBEZWNpbWFsKDApCi1EZWNpbWFsKCcwJykKLT4+PiBEZWNpbWFsKCcxJykKLURlY2ltYWwoJzEnKQotPj4+IERlY2ltYWwoJy0uMDEyMycpCi1EZWNpbWFsKCctMC4wMTIzJykKLT4+PiBEZWNpbWFsKDEyMzQ1NikKLURlY2ltYWwoJzEyMzQ1NicpCi0+Pj4gRGVjaW1hbCgnMTIzLjQ1ZTEyMzQ1Njc4JykKLURlY2ltYWwoJzEuMjM0NUUrMTIzNDU2ODAnKQotPj4+IERlY2ltYWwoJzEuMzMnKSArIERlY2ltYWwoJzEuMjcnKQotRGVjaW1hbCgnMi42MCcpCi0+Pj4gRGVjaW1hbCgnMTIuMzQnKSArIERlY2ltYWwoJzMuODcnKSAtIERlY2ltYWwoJzE4LjQxJykKLURlY2ltYWwoJy0yLjIwJykKLT4+PiBkaWcgPSBEZWNpbWFsKDEpCi0+Pj4gcHJpbnQoZGlnIC8gRGVjaW1hbCgzKSkKLTAuMzMzMzMzMzMzCi0+Pj4gZ2V0Y29udGV4dCgpLnByZWMgPSAxOAotPj4+IHByaW50KGRpZyAvIERlY2ltYWwoMykpCi0wLjMzMzMzMzMzMzMzMzMzMzMzMwotPj4+IHByaW50KGRpZy5zcXJ0KCkpCi0xCi0+Pj4gcHJpbnQoRGVjaW1hbCgzKS5zcXJ0KCkpCi0xLjczMjA1MDgwNzU2ODg3NzI5Ci0+Pj4gcHJpbnQoRGVjaW1hbCgzKSAqKiAxMjMpCi00Ljg1MTkyNzgwOTc2ODk2NDI3RSs1OAotPj4+IGluZiA9IERlY2ltYWwoMSkgLyBEZWNpbWFsKDApCi0+Pj4gcHJpbnQoaW5mKQotSW5maW5pdHkKLT4+PiBuZWdpbmYgPSBEZWNpbWFsKC0xKSAvIERlY2ltYWwoMCkKLT4+PiBwcmludChuZWdpbmYpCi0tSW5maW5pdHkKLT4+PiBwcmludChuZWdpbmYgKyBpbmYpCi1OYU4KLT4+PiBwcmludChuZWdpbmYgKiBpbmYpCi0tSW5maW5pdHkKLT4+PiBwcmludChkaWcgLyAwKQotSW5maW5pdHkKLT4+PiBnZXRjb250ZXh0KCkudHJhcHNbRGl2aXNpb25CeVplcm9dID0gMQotPj4+IHByaW50KGRpZyAvIDApCi1UcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gIC4uLgotICAuLi4KLSAgLi4uCi1kZWNpbWFsLkRpdmlzaW9uQnlaZXJvOiB4IC8gMAotPj4+IGMgPSBDb250ZXh0KCkKLT4+PiBjLnRyYXBzW0ludmFsaWRPcGVyYXRpb25dID0gMAotPj4+IHByaW50KGMuZmxhZ3NbSW52YWxpZE9wZXJhdGlvbl0pCi0wCi0+Pj4gYy5kaXZpZGUoRGVjaW1hbCgwKSwgRGVjaW1hbCgwKSkKLURlY2ltYWwoJ05hTicpCi0+Pj4gYy50cmFwc1tJbnZhbGlkT3BlcmF0aW9uXSA9IDEKLT4+PiBwcmludChjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dKQotMQotPj4+IGMuZmxhZ3NbSW52YWxpZE9wZXJhdGlvbl0gPSAwCi0+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKLTAKLT4+PiBwcmludChjLmRpdmlkZShEZWNpbWFsKDApLCBEZWNpbWFsKDApKSkKLVRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgLi4uCi0gIC4uLgotICAuLi4KLWRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbjogMCAvIDAKLT4+PiBwcmludChjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dKQotMQotPj4+IGMuZmxhZ3NbSW52YWxpZE9wZXJhdGlvbl0gPSAwCi0+Pj4gYy50cmFwc1tJbnZhbGlkT3BlcmF0aW9uXSA9IDAKLT4+PiBwcmludChjLmRpdmlkZShEZWNpbWFsKDApLCBEZWNpbWFsKDApKSkKLU5hTgotPj4+IHByaW50KGMuZmxhZ3NbSW52YWxpZE9wZXJhdGlvbl0pCi0xCi0+Pj4KLSIiIgotCi1fX2FsbF9fID0gWwotICAgICMgVHdvIG1ham9yIGNsYXNzZXMKLSAgICAnRGVjaW1hbCcsICdDb250ZXh0JywKLQotICAgICMgTmFtZWQgdHVwbGUgcmVwcmVzZW50YXRpb24KLSAgICAnRGVjaW1hbFR1cGxlJywKLQotICAgICMgQ29udGV4dHMKLSAgICAnRGVmYXVsdENvbnRleHQnLCAnQmFzaWNDb250ZXh0JywgJ0V4dGVuZGVkQ29udGV4dCcsCi0KLSAgICAjIEV4Y2VwdGlvbnMKLSAgICAnRGVjaW1hbEV4Y2VwdGlvbicsICdDbGFtcGVkJywgJ0ludmFsaWRPcGVyYXRpb24nLCAnRGl2aXNpb25CeVplcm8nLAotICAgICdJbmV4YWN0JywgJ1JvdW5kZWQnLCAnU3Vibm9ybWFsJywgJ092ZXJmbG93JywgJ1VuZGVyZmxvdycsCi0gICAgJ0Zsb2F0T3BlcmF0aW9uJywKLQotICAgICMgRXhjZXB0aW9uYWwgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgSW52YWxpZE9wZXJhdGlvbgotICAgICdEaXZpc2lvbkltcG9zc2libGUnLCAnSW52YWxpZENvbnRleHQnLCAnQ29udmVyc2lvblN5bnRheCcsICdEaXZpc2lvblVuZGVmaW5lZCcsCi0KLSAgICAjIENvbnN0YW50cyBmb3IgdXNlIGluIHNldHRpbmcgdXAgY29udGV4dHMKLSAgICAnUk9VTkRfRE9XTicsICdST1VORF9IQUxGX1VQJywgJ1JPVU5EX0hBTEZfRVZFTicsICdST1VORF9DRUlMSU5HJywKLSAgICAnUk9VTkRfRkxPT1InLCAnUk9VTkRfVVAnLCAnUk9VTkRfSEFMRl9ET1dOJywgJ1JPVU5EXzA1VVAnLAotCi0gICAgIyBGdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBjb250ZXh0cwotICAgICdzZXRjb250ZXh0JywgJ2dldGNvbnRleHQnLCAnbG9jYWxjb250ZXh0JywKLQotICAgICMgTGltaXRzIGZvciB0aGUgQyB2ZXJzaW9uIGZvciBjb21wYXRpYmlsaXR5Ci0gICAgJ01BWF9QUkVDJywgICdNQVhfRU1BWCcsICdNSU5fRU1JTicsICdNSU5fRVRJTlknLAotCi0gICAgIyBDIHZlcnNpb246IGNvbXBpbGUgdGltZSBjaG9pY2UgdGhhdCBlbmFibGVzIHRoZSB0aHJlYWQgbG9jYWwgY29udGV4dAotICAgICdIQVZFX1RIUkVBRFMnCi1dCi0KLV9fdmVyc2lvbl9fID0gJzEuNzAnICAgICMgSGlnaGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjIHRoaXMgY29tcGxpZXMgd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgIyBTZWUgaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsLwotX19saWJtcGRlY192ZXJzaW9uX18gPSAiMi40LjEiICMgY29tcGF0aWJsZSBsaWJtcGRlYyB2ZXJzaW9uCi0KLWltcG9ydCBtYXRoIGFzIF9tYXRoCi1pbXBvcnQgbnVtYmVycyBhcyBfbnVtYmVycwotaW1wb3J0IHN5cwogCiB0cnk6Ci0gICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSBhcyBfbmFtZWR0dXBsZQotICAgIERlY2ltYWxUdXBsZSA9IF9uYW1lZHR1cGxlKCdEZWNpbWFsVHVwbGUnLCAnc2lnbiBkaWdpdHMgZXhwb25lbnQnKQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIERlY2ltYWxUdXBsZSA9IGxhbWJkYSAqYXJnczogYXJncwotCi0jIFJvdW5kaW5nCi1ST1VORF9ET1dOID0gJ1JPVU5EX0RPV04nCi1ST1VORF9IQUxGX1VQID0gJ1JPVU5EX0hBTEZfVVAnCi1ST1VORF9IQUxGX0VWRU4gPSAnUk9VTkRfSEFMRl9FVkVOJwotUk9VTkRfQ0VJTElORyA9ICdST1VORF9DRUlMSU5HJwotUk9VTkRfRkxPT1IgPSAnUk9VTkRfRkxPT1InCi1ST1VORF9VUCA9ICdST1VORF9VUCcKLVJPVU5EX0hBTEZfRE9XTiA9ICdST1VORF9IQUxGX0RPV04nCi1ST1VORF8wNVVQID0gJ1JPVU5EXzA1VVAnCi0KLSMgQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSBDIHZlcnNpb24KLUhBVkVfVEhSRUFEUyA9IFRydWUKLWlmIHN5cy5tYXhzaXplID09IDIqKjYzLTE6Ci0gICAgTUFYX1BSRUMgPSA5OTk5OTk5OTk5OTk5OTk5OTkKLSAgICBNQVhfRU1BWCA9IDk5OTk5OTk5OTk5OTk5OTk5OQotICAgIE1JTl9FTUlOID0gLTk5OTk5OTk5OTk5OTk5OTk5OQotZWxzZToKLSAgICBNQVhfUFJFQyA9IDQyNTAwMDAwMAotICAgIE1BWF9FTUFYID0gNDI1MDAwMDAwCi0gICAgTUlOX0VNSU4gPSAtNDI1MDAwMDAwCi0KLU1JTl9FVElOWSA9IE1JTl9FTUlOIC0gKE1BWF9QUkVDLTEpCi0KLSMgRXJyb3JzCi0KLWNsYXNzIERlY2ltYWxFeGNlcHRpb24oQXJpdGhtZXRpY0Vycm9yKToKLSAgICAiIiJCYXNlIGV4Y2VwdGlvbiBjbGFzcy4KLQotICAgIFVzZWQgZXhjZXB0aW9ucyBkZXJpdmUgZnJvbSB0aGlzLgotICAgIElmIGFuIGV4Y2VwdGlvbiBkZXJpdmVzIGZyb20gYW5vdGhlciBleGNlcHRpb24gYmVzaWRlcyB0aGlzIChzdWNoIGFzCi0gICAgVW5kZXJmbG93IChJbmV4YWN0LCBSb3VuZGVkLCBTdWJub3JtYWwpIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgb25seQotICAgIGNhbGxlZCBpZiB0aGUgb3RoZXJzIGFyZSBwcmVzZW50LiAgVGhpcyBpc24ndCBhY3R1YWxseSB1c2VkIGZvcgotICAgIGFueXRoaW5nLCB0aG91Z2guCi0KLSAgICBoYW5kbGUgIC0tIENhbGxlZCB3aGVuIGNvbnRleHQuX3JhaXNlX2Vycm9yIGlzIGNhbGxlZCBhbmQgdGhlCi0gICAgICAgICAgICAgICB0cmFwX2VuYWJsZXIgaXMgbm90IHNldC4gIEZpcnN0IGFyZ3VtZW50IGlzIHNlbGYsIHNlY29uZCBpcyB0aGUKLSAgICAgICAgICAgICAgIGNvbnRleHQuICBNb3JlIGFyZ3VtZW50cyBjYW4gYmUgZ2l2ZW4sIHRob3NlIGJlaW5nIGFmdGVyCi0gICAgICAgICAgICAgICB0aGUgZXhwbGFuYXRpb24gaW4gX3JhaXNlX2Vycm9yIChGb3IgZXhhbXBsZSwKLSAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKE5ld0Vycm9yLCAnKC14KSEnLCBzZWxmLl9zaWduKSB3b3VsZAotICAgICAgICAgICAgICAgY2FsbCBOZXdFcnJvcigpLmhhbmRsZShjb250ZXh0LCBzZWxmLl9zaWduKS4pCi0KLSAgICBUbyBkZWZpbmUgYSBuZXcgZXhjZXB0aW9uLCBpdCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBoYXZlIGl0IGRlcml2ZQotICAgIGZyb20gRGVjaW1hbEV4Y2VwdGlvbi4KLSAgICAiIiIKLSAgICBkZWYgaGFuZGxlKHNlbGYsIGNvbnRleHQsICphcmdzKToKLSAgICAgICAgcGFzcwotCi0KLWNsYXNzIENsYW1wZWQoRGVjaW1hbEV4Y2VwdGlvbik6Ci0gICAgIiIiRXhwb25lbnQgb2YgYSAwIGNoYW5nZWQgdG8gZml0IGJvdW5kcy4KLQotICAgIFRoaXMgb2NjdXJzIGFuZCBzaWduYWxzIGNsYW1wZWQgaWYgdGhlIGV4cG9uZW50IG9mIGEgcmVzdWx0IGhhcyBiZWVuCi0gICAgYWx0ZXJlZCBpbiBvcmRlciB0byBmaXQgdGhlIGNvbnN0cmFpbnRzIG9mIGEgc3BlY2lmaWMgY29uY3JldGUKLSAgICByZXByZXNlbnRhdGlvbi4gIFRoaXMgbWF5IG9jY3VyIHdoZW4gdGhlIGV4cG9uZW50IG9mIGEgemVybyByZXN1bHQgd291bGQKLSAgICBiZSBvdXRzaWRlIHRoZSBib3VuZHMgb2YgYSByZXByZXNlbnRhdGlvbiwgb3Igd2hlbiBhIGxhcmdlIG5vcm1hbAotICAgIG51bWJlciB3b3VsZCBoYXZlIGFuIGVuY29kZWQgZXhwb25lbnQgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQuICBJbgotICAgIHRoaXMgbGF0dGVyIGNhc2UsIHRoZSBleHBvbmVudCBpcyByZWR1Y2VkIHRvIGZpdCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICBudW1iZXIgb2YgemVybyBkaWdpdHMgYXJlIGFwcGVuZGVkIHRvIHRoZSBjb2VmZmljaWVudCAoImZvbGQtZG93biIpLgotICAgICIiIgotCi1jbGFzcyBJbnZhbGlkT3BlcmF0aW9uKERlY2ltYWxFeGNlcHRpb24pOgotICAgICIiIkFuIGludmFsaWQgb3BlcmF0aW9uIHdhcyBwZXJmb3JtZWQuCi0KLSAgICBWYXJpb3VzIGJhZCB0aGluZ3MgY2F1c2UgdGhpczoKLQotICAgIFNvbWV0aGluZyBjcmVhdGVzIGEgc2lnbmFsaW5nIE5hTgotICAgIC1JTkYgKyBJTkYKLSAgICAwICogKCstKUlORgotICAgICgrLSlJTkYgLyAoKy0pSU5GCi0gICAgeCAlIDAKLSAgICAoKy0pSU5GICUgeAotICAgIHguX3Jlc2NhbGUoIG5vbi1pbnRlZ2VyICkKLSAgICBzcXJ0KC14KSAsIHggPiAwCi0gICAgMCAqKiAwCi0gICAgeCAqKiAobm9uLWludGVnZXIpCi0gICAgeCAqKiAoKy0pSU5GCi0gICAgQW4gb3BlcmFuZCBpcyBpbnZhbGlkCi0KLSAgICBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gYWZ0ZXIgdGhlc2UgaXMgYSBxdWlldCBwb3NpdGl2ZSBOYU4sCi0gICAgZXhjZXB0IHdoZW4gdGhlIGNhdXNlIGlzIGEgc2lnbmFsaW5nIE5hTiwgaW4gd2hpY2ggY2FzZSB0aGUgcmVzdWx0IGlzCi0gICAgYWxzbyBhIHF1aWV0IE5hTiwgYnV0IHdpdGggdGhlIG9yaWdpbmFsIHNpZ24sIGFuZCBhbiBvcHRpb25hbAotICAgIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uCi0gICAgIiIiCi0gICAgZGVmIGhhbmRsZShzZWxmLCBjb250ZXh0LCAqYXJncyk6Ci0gICAgICAgIGlmIGFyZ3M6Ci0gICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKGFyZ3NbMF0uX3NpZ24sIGFyZ3NbMF0uX2ludCwgJ24nLCBUcnVlKQotICAgICAgICAgICAgcmV0dXJuIGFucy5fZml4X25hbihjb250ZXh0KQotICAgICAgICByZXR1cm4gX05hTgotCi1jbGFzcyBDb252ZXJzaW9uU3ludGF4KEludmFsaWRPcGVyYXRpb24pOgotICAgICIiIlRyeWluZyB0byBjb252ZXJ0IGJhZGx5IGZvcm1lZCBzdHJpbmcuCi0KLSAgICBUaGlzIG9jY3VycyBhbmQgc2lnbmFscyBpbnZhbGlkLW9wZXJhdGlvbiBpZiBhbiBzdHJpbmcgaXMgYmVpbmcKLSAgICBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgYW5kIGl0IGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIG51bWVyaWMgc3RyaW5nCi0gICAgc3ludGF4LiAgVGhlIHJlc3VsdCBpcyBbMCxxTmFOXS4KLSAgICAiIiIKLSAgICBkZWYgaGFuZGxlKHNlbGYsIGNvbnRleHQsICphcmdzKToKLSAgICAgICAgcmV0dXJuIF9OYU4KLQotY2xhc3MgRGl2aXNpb25CeVplcm8oRGVjaW1hbEV4Y2VwdGlvbiwgWmVyb0RpdmlzaW9uRXJyb3IpOgotICAgICIiIkRpdmlzaW9uIGJ5IDAuCi0KLSAgICBUaGlzIG9jY3VycyBhbmQgc2lnbmFscyBkaXZpc2lvbi1ieS16ZXJvIGlmIGRpdmlzaW9uIG9mIGEgZmluaXRlIG51bWJlcgotICAgIGJ5IHplcm8gd2FzIGF0dGVtcHRlZCAoZHVyaW5nIGEgZGl2aWRlLWludGVnZXIgb3IgZGl2aWRlIG9wZXJhdGlvbiwgb3IgYQotICAgIHBvd2VyIG9wZXJhdGlvbiB3aXRoIG5lZ2F0aXZlIHJpZ2h0LWhhbmQgb3BlcmFuZCksIGFuZCB0aGUgZGl2aWRlbmQgd2FzCi0gICAgbm90IHplcm8uCi0KLSAgICBUaGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gaXMgW3NpZ24saW5mXSwgd2hlcmUgc2lnbiBpcyB0aGUgZXhjbHVzaXZlCi0gICAgb3Igb2YgdGhlIHNpZ25zIG9mIHRoZSBvcGVyYW5kcyBmb3IgZGl2aWRlLCBvciBpcyAxIGZvciBhbiBvZGQgcG93ZXIgb2YKLSAgICAtMCwgZm9yIHBvd2VyLgotICAgICIiIgotCi0gICAgZGVmIGhhbmRsZShzZWxmLCBjb250ZXh0LCBzaWduLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBfU2lnbmVkSW5maW5pdHlbc2lnbl0KLQotY2xhc3MgRGl2aXNpb25JbXBvc3NpYmxlKEludmFsaWRPcGVyYXRpb24pOgotICAgICIiIkNhbm5vdCBwZXJmb3JtIHRoZSBkaXZpc2lvbiBhZGVxdWF0ZWx5LgotCi0gICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgaW52YWxpZC1vcGVyYXRpb24gaWYgdGhlIGludGVnZXIgcmVzdWx0IG9mIGEKLSAgICBkaXZpZGUtaW50ZWdlciBvciByZW1haW5kZXIgb3BlcmF0aW9uIGhhZCB0b28gbWFueSBkaWdpdHMgKHdvdWxkIGJlCi0gICAgbG9uZ2VyIHRoYW4gcHJlY2lzaW9uKS4gIFRoZSByZXN1bHQgaXMgWzAscU5hTl0uCi0gICAgIiIiCi0KLSAgICBkZWYgaGFuZGxlKHNlbGYsIGNvbnRleHQsICphcmdzKToKLSAgICAgICAgcmV0dXJuIF9OYU4KLQotY2xhc3MgRGl2aXNpb25VbmRlZmluZWQoSW52YWxpZE9wZXJhdGlvbiwgWmVyb0RpdmlzaW9uRXJyb3IpOgotICAgICIiIlVuZGVmaW5lZCByZXN1bHQgb2YgZGl2aXNpb24uCi0KLSAgICBUaGlzIG9jY3VycyBhbmQgc2lnbmFscyBpbnZhbGlkLW9wZXJhdGlvbiBpZiBkaXZpc2lvbiBieSB6ZXJvIHdhcwotICAgIGF0dGVtcHRlZCAoZHVyaW5nIGEgZGl2aWRlLWludGVnZXIsIGRpdmlkZSwgb3IgcmVtYWluZGVyIG9wZXJhdGlvbiksIGFuZAotICAgIHRoZSBkaXZpZGVuZCBpcyBhbHNvIHplcm8uICBUaGUgcmVzdWx0IGlzIFswLHFOYU5dLgotICAgICIiIgotCi0gICAgZGVmIGhhbmRsZShzZWxmLCBjb250ZXh0LCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBfTmFOCi0KLWNsYXNzIEluZXhhY3QoRGVjaW1hbEV4Y2VwdGlvbik6Ci0gICAgIiIiSGFkIHRvIHJvdW5kLCBsb3NpbmcgaW5mb3JtYXRpb24uCi0KLSAgICBUaGlzIG9jY3VycyBhbmQgc2lnbmFscyBpbmV4YWN0IHdoZW5ldmVyIHRoZSByZXN1bHQgb2YgYW4gb3BlcmF0aW9uIGlzCi0gICAgbm90IGV4YWN0ICh0aGF0IGlzLCBpdCBuZWVkZWQgdG8gYmUgcm91bmRlZCBhbmQgYW55IGRpc2NhcmRlZCBkaWdpdHMKLSAgICB3ZXJlIG5vbi16ZXJvKSwgb3IgaWYgYW4gb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGNvbmRpdGlvbiBvY2N1cnMuICBUaGUKLSAgICByZXN1bHQgaW4gYWxsIGNhc2VzIGlzIHVuY2hhbmdlZC4KLQotICAgIFRoZSBpbmV4YWN0IHNpZ25hbCBtYXkgYmUgdGVzdGVkIChvciB0cmFwcGVkKSB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbgotICAgIG9wZXJhdGlvbiAob3Igc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucykgd2FzIGluZXhhY3QuCi0gICAgIiIiCi0KLWNsYXNzIEludmFsaWRDb250ZXh0KEludmFsaWRPcGVyYXRpb24pOgotICAgICIiIkludmFsaWQgY29udGV4dC4gIFVua25vd24gcm91bmRpbmcsIGZvciBleGFtcGxlLgotCi0gICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgaW52YWxpZC1vcGVyYXRpb24gaWYgYW4gaW52YWxpZCBjb250ZXh0IHdhcwotICAgIGRldGVjdGVkIGR1cmluZyBhbiBvcGVyYXRpb24uICBUaGlzIGNhbiBvY2N1ciBpZiBjb250ZXh0cyBhcmUgbm90IGNoZWNrZWQKLSAgICBvbiBjcmVhdGlvbiBhbmQgZWl0aGVyIHRoZSBwcmVjaXNpb24gZXhjZWVkcyB0aGUgY2FwYWJpbGl0eSBvZiB0aGUKLSAgICB1bmRlcmx5aW5nIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9uIG9yIGFuIHVua25vd24gb3IgdW5zdXBwb3J0ZWQgcm91bmRpbmcKLSAgICB3YXMgc3BlY2lmaWVkLiAgVGhlc2UgYXNwZWN0cyBvZiB0aGUgY29udGV4dCBuZWVkIG9ubHkgYmUgY2hlY2tlZCB3aGVuCi0gICAgdGhlIHZhbHVlcyBhcmUgcmVxdWlyZWQgdG8gYmUgdXNlZC4gIFRoZSByZXN1bHQgaXMgWzAscU5hTl0uCi0gICAgIiIiCi0KLSAgICBkZWYgaGFuZGxlKHNlbGYsIGNvbnRleHQsICphcmdzKToKLSAgICAgICAgcmV0dXJuIF9OYU4KLQotY2xhc3MgUm91bmRlZChEZWNpbWFsRXhjZXB0aW9uKToKLSAgICAiIiJOdW1iZXIgZ290IHJvdW5kZWQgKG5vdCAgbmVjZXNzYXJpbHkgY2hhbmdlZCBkdXJpbmcgcm91bmRpbmcpLgotCi0gICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgcm91bmRlZCB3aGVuZXZlciB0aGUgcmVzdWx0IG9mIGFuIG9wZXJhdGlvbiBpcwotICAgIHJvdW5kZWQgKHRoYXQgaXMsIHNvbWUgemVybyBvciBub24temVybyBkaWdpdHMgd2VyZSBkaXNjYXJkZWQgZnJvbSB0aGUKLSAgICBjb2VmZmljaWVudCksIG9yIGlmIGFuIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBjb25kaXRpb24gb2NjdXJzLiAgVGhlCi0gICAgcmVzdWx0IGluIGFsbCBjYXNlcyBpcyB1bmNoYW5nZWQuCi0KLSAgICBUaGUgcm91bmRlZCBzaWduYWwgbWF5IGJlIHRlc3RlZCAob3IgdHJhcHBlZCkgdG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4KLSAgICBvcGVyYXRpb24gKG9yIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMpIGNhdXNlZCBhIGxvc3Mgb2YgcHJlY2lzaW9uLgotICAgICIiIgotCi1jbGFzcyBTdWJub3JtYWwoRGVjaW1hbEV4Y2VwdGlvbik6Ci0gICAgIiIiRXhwb25lbnQgPCBFbWluIGJlZm9yZSByb3VuZGluZy4KLQotICAgIFRoaXMgb2NjdXJzIGFuZCBzaWduYWxzIHN1Ym5vcm1hbCB3aGVuZXZlciB0aGUgcmVzdWx0IG9mIGEgY29udmVyc2lvbiBvcgotICAgIG9wZXJhdGlvbiBpcyBzdWJub3JtYWwgKHRoYXQgaXMsIGl0cyBhZGp1c3RlZCBleHBvbmVudCBpcyBsZXNzIHRoYW4KLSAgICBFbWluLCBiZWZvcmUgYW55IHJvdW5kaW5nKS4gIFRoZSByZXN1bHQgaW4gYWxsIGNhc2VzIGlzIHVuY2hhbmdlZC4KLQotICAgIFRoZSBzdWJub3JtYWwgc2lnbmFsIG1heSBiZSB0ZXN0ZWQgKG9yIHRyYXBwZWQpIHRvIGRldGVybWluZSBpZiBhIGdpdmVuCi0gICAgb3Igb3BlcmF0aW9uIChvciBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zKSB5aWVsZGVkIGEgc3Vibm9ybWFsIHJlc3VsdC4KLSAgICAiIiIKLQotY2xhc3MgT3ZlcmZsb3coSW5leGFjdCwgUm91bmRlZCk6Ci0gICAgIiIiTnVtZXJpY2FsIG92ZXJmbG93LgotCi0gICAgVGhpcyBvY2N1cnMgYW5kIHNpZ25hbHMgb3ZlcmZsb3cgaWYgdGhlIGFkanVzdGVkIGV4cG9uZW50IG9mIGEgcmVzdWx0Ci0gICAgKGZyb20gYSBjb252ZXJzaW9uIG9yIGZyb20gYW4gb3BlcmF0aW9uIHRoYXQgaXMgbm90IGFuIGF0dGVtcHQgdG8gZGl2aWRlCi0gICAgYnkgemVybyksIGFmdGVyIHJvdW5kaW5nLCB3b3VsZCBiZSBncmVhdGVyIHRoYW4gdGhlIGxhcmdlc3QgdmFsdWUgdGhhdAotICAgIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiAodGhlIHZhbHVlIEVtYXgpLgotCi0gICAgVGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSByb3VuZGluZyBtb2RlOgotCi0gICAgRm9yIHJvdW5kLWhhbGYtdXAgYW5kIHJvdW5kLWhhbGYtZXZlbiAoYW5kIGZvciByb3VuZC1oYWxmLWRvd24gYW5kCi0gICAgcm91bmQtdXAsIGlmIGltcGxlbWVudGVkKSwgdGhlIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uIGlzIFtzaWduLGluZl0sCi0gICAgd2hlcmUgc2lnbiBpcyB0aGUgc2lnbiBvZiB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdC4gIEZvciByb3VuZC1kb3duLCB0aGUKLSAgICByZXN1bHQgaXMgdGhlIGxhcmdlc3QgZmluaXRlIG51bWJlciB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUKLSAgICBjdXJyZW50IHByZWNpc2lvbiwgd2l0aCB0aGUgc2lnbiBvZiB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdC4gIEZvcgotICAgIHJvdW5kLWNlaWxpbmcsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgZm9yIHJvdW5kLWRvd24gaWYgdGhlIHNpZ24gb2YKLSAgICB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBpcyAxLCBvciBpcyBbMCxpbmZdIG90aGVyd2lzZS4gIEZvciByb3VuZC1mbG9vciwKLSAgICB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGZvciByb3VuZC1kb3duIGlmIHRoZSBzaWduIG9mIHRoZSBpbnRlcm1lZGlhdGUKLSAgICByZXN1bHQgaXMgMCwgb3IgaXMgWzEsaW5mXSBvdGhlcndpc2UuICBJbiBhbGwgY2FzZXMsIEluZXhhY3QgYW5kIFJvdW5kZWQKLSAgICB3aWxsIGFsc28gYmUgcmFpc2VkLgotICAgICIiIgotCi0gICAgZGVmIGhhbmRsZShzZWxmLCBjb250ZXh0LCBzaWduLCAqYXJncyk6Ci0gICAgICAgIGlmIGNvbnRleHQucm91bmRpbmcgaW4gKFJPVU5EX0hBTEZfVVAsIFJPVU5EX0hBTEZfRVZFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9VTkRfSEFMRl9ET1dOLCBST1VORF9VUCk6Ci0gICAgICAgICAgICByZXR1cm4gX1NpZ25lZEluZmluaXR5W3NpZ25dCi0gICAgICAgIGlmIHNpZ24gPT0gMDoKLSAgICAgICAgICAgIGlmIGNvbnRleHQucm91bmRpbmcgPT0gUk9VTkRfQ0VJTElORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX1NpZ25lZEluZmluaXR5W3NpZ25dCi0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzaWduLCAnOScqY29udGV4dC5wcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuRW1heC1jb250ZXh0LnByZWMrMSkKLSAgICAgICAgaWYgc2lnbiA9PSAxOgotICAgICAgICAgICAgaWYgY29udGV4dC5yb3VuZGluZyA9PSBST1VORF9GTE9PUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gX1NpZ25lZEluZmluaXR5W3NpZ25dCi0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzaWduLCAnOScqY29udGV4dC5wcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LkVtYXgtY29udGV4dC5wcmVjKzEpCi0KLQotY2xhc3MgVW5kZXJmbG93KEluZXhhY3QsIFJvdW5kZWQsIFN1Ym5vcm1hbCk6Ci0gICAgIiIiTnVtZXJpY2FsIHVuZGVyZmxvdyB3aXRoIHJlc3VsdCByb3VuZGVkIHRvIDAuCi0KLSAgICBUaGlzIG9jY3VycyBhbmQgc2lnbmFscyB1bmRlcmZsb3cgaWYgYSByZXN1bHQgaXMgaW5leGFjdCBhbmQgdGhlCi0gICAgYWRqdXN0ZWQgZXhwb25lbnQgb2YgdGhlIHJlc3VsdCB3b3VsZCBiZSBzbWFsbGVyIChtb3JlIG5lZ2F0aXZlKSB0aGFuCi0gICAgdGhlIHNtYWxsZXN0IHZhbHVlIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uICh0aGUgdmFsdWUKLSAgICBFbWluKS4gIFRoYXQgaXMsIHRoZSByZXN1bHQgaXMgYm90aCBpbmV4YWN0IGFuZCBzdWJub3JtYWwuCi0KLSAgICBUaGUgcmVzdWx0IGFmdGVyIGFuIHVuZGVyZmxvdyB3aWxsIGJlIGEgc3Vibm9ybWFsIG51bWJlciByb3VuZGVkLCBpZgotICAgIG5lY2Vzc2FyeSwgc28gdGhhdCBpdHMgZXhwb25lbnQgaXMgbm90IGxlc3MgdGhhbiBFdGlueS4gIFRoaXMgbWF5IHJlc3VsdAotICAgIGluIDAgd2l0aCB0aGUgc2lnbiBvZiB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBhbmQgYW4gZXhwb25lbnQgb2YgRXRpbnkuCi0KLSAgICBJbiBhbGwgY2FzZXMsIEluZXhhY3QsIFJvdW5kZWQsIGFuZCBTdWJub3JtYWwgd2lsbCBhbHNvIGJlIHJhaXNlZC4KLSAgICAiIiIKLQotY2xhc3MgRmxvYXRPcGVyYXRpb24oRGVjaW1hbEV4Y2VwdGlvbiwgVHlwZUVycm9yKToKLSAgICAiIiJFbmFibGUgc3RyaWN0ZXIgc2VtYW50aWNzIGZvciBtaXhpbmcgZmxvYXRzIGFuZCBEZWNpbWFscy4KLQotICAgIElmIHRoZSBzaWduYWwgaXMgbm90IHRyYXBwZWQgKGRlZmF1bHQpLCBtaXhpbmcgZmxvYXRzIGFuZCBEZWNpbWFscyBpcwotICAgIHBlcm1pdHRlZCBpbiB0aGUgRGVjaW1hbCgpIGNvbnN0cnVjdG9yLCBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsKCkgYW5kCi0gICAgYWxsIGNvbXBhcmlzb24gb3BlcmF0b3JzLiBCb3RoIGNvbnZlcnNpb24gYW5kIGNvbXBhcmlzb25zIGFyZSBleGFjdC4KLSAgICBBbnkgb2NjdXJyZW5jZSBvZiBhIG1peGVkIG9wZXJhdGlvbiBpcyBzaWxlbnRseSByZWNvcmRlZCBieSBzZXR0aW5nCi0gICAgRmxvYXRPcGVyYXRpb24gaW4gdGhlIGNvbnRleHQgZmxhZ3MuICBFeHBsaWNpdCBjb252ZXJzaW9ucyB3aXRoCi0gICAgRGVjaW1hbC5mcm9tX2Zsb2F0KCkgb3IgY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KCkgZG8gbm90Ci0gICAgc2V0IHRoZSBmbGFnLgotCi0gICAgT3RoZXJ3aXNlICh0aGUgc2lnbmFsIGlzIHRyYXBwZWQpLCBvbmx5IGVxdWFsaXR5IGNvbXBhcmlzb25zIGFuZCBleHBsaWNpdAotICAgIGNvbnZlcnNpb25zIGFyZSBzaWxlbnQuIEFsbCBvdGhlciBtaXhlZCBvcGVyYXRpb25zIHJhaXNlIEZsb2F0T3BlcmF0aW9uLgotICAgICIiIgotCi0jIExpc3Qgb2YgcHVibGljIHRyYXBzIGFuZCBmbGFncwotX3NpZ25hbHMgPSBbQ2xhbXBlZCwgRGl2aXNpb25CeVplcm8sIEluZXhhY3QsIE92ZXJmbG93LCBSb3VuZGVkLAotICAgICAgICAgICAgVW5kZXJmbG93LCBJbnZhbGlkT3BlcmF0aW9uLCBTdWJub3JtYWwsIEZsb2F0T3BlcmF0aW9uXQotCi0jIE1hcCBjb25kaXRpb25zIChwZXIgdGhlIHNwZWMpIHRvIHNpZ25hbHMKLV9jb25kaXRpb25fbWFwID0ge0NvbnZlcnNpb25TeW50YXg6SW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgIERpdmlzaW9uSW1wb3NzaWJsZTpJbnZhbGlkT3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgRGl2aXNpb25VbmRlZmluZWQ6SW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgIEludmFsaWRDb250ZXh0OkludmFsaWRPcGVyYXRpb259Ci0KLSMgVmFsaWQgcm91bmRpbmcgbW9kZXMKLV9yb3VuZGluZ19tb2RlcyA9IChST1VORF9ET1dOLCBST1VORF9IQUxGX1VQLCBST1VORF9IQUxGX0VWRU4sIFJPVU5EX0NFSUxJTkcsCi0gICAgICAgICAgICAgICAgICAgUk9VTkRfRkxPT1IsIFJPVU5EX1VQLCBST1VORF9IQUxGX0RPV04sIFJPVU5EXzA1VVApCi0KLSMjIyMjIENvbnRleHQgRnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgVGhlIGdldGNvbnRleHQoKSBhbmQgc2V0Y29udGV4dCgpIGZ1bmN0aW9uIG1hbmFnZSBhY2Nlc3MgdG8gYSB0aHJlYWQtbG9jYWwKLSMgY3VycmVudCBjb250ZXh0LiAgUHkyLjQgb2ZmZXJzIGRpcmVjdCBzdXBwb3J0IGZvciB0aHJlYWQgbG9jYWxzLiAgSWYgdGhhdAotIyBpcyBub3QgYXZhaWxhYmxlLCB1c2UgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgd2hpY2ggaXMgc2xvd2VyIGJ1dCB3aWxsCi0jIHdvcmsgZm9yIG9sZGVyIFB5dGhvbnMuICBJZiB0aHJlYWRzIGFyZSBub3QgcGFydCBvZiB0aGUgYnVpbGQsIGNyZWF0ZSBhCi0jIG1vY2sgdGhyZWFkaW5nIG9iamVjdCB3aXRoIHRocmVhZGluZy5sb2NhbCgpIHJldHVybmluZyB0aGUgbW9kdWxlIG5hbWVzcGFjZS4KLQotdHJ5OgotICAgIGltcG9ydCB0aHJlYWRpbmcKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIFB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aG91dCB0aHJlYWRzOyBjcmVhdGUgYSBtb2NrIG9iamVjdCBpbnN0ZWFkCi0gICAgY2xhc3MgTW9ja1RocmVhZGluZyhvYmplY3QpOgotICAgICAgICBkZWYgbG9jYWwoc2VsZiwgc3lzPXN5cyk6Ci0gICAgICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbX19uYW1lX19dCi0gICAgdGhyZWFkaW5nID0gTW9ja1RocmVhZGluZygpCi0gICAgZGVsIE1vY2tUaHJlYWRpbmcKLQotdHJ5OgotICAgIHRocmVhZGluZy5sb2NhbAotCi1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0KLSAgICAjIFRvIGZpeCByZWxvYWRpbmcsIGZvcmNlIGl0IHRvIGNyZWF0ZSBhIG5ldyBjb250ZXh0Ci0gICAgIyBPbGQgY29udGV4dHMgaGF2ZSBkaWZmZXJlbnQgZXhjZXB0aW9ucyBpbiB0aGVpciBkaWN0cywgbWFraW5nIHByb2JsZW1zLgotICAgIGlmIGhhc2F0dHIodGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCksICdfX2RlY2ltYWxfY29udGV4dF9fJyk6Ci0gICAgICAgIGRlbCB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5fX2RlY2ltYWxfY29udGV4dF9fCi0KLSAgICBkZWYgc2V0Y29udGV4dChjb250ZXh0KToKLSAgICAgICAgIiIiU2V0IHRoaXMgdGhyZWFkJ3MgY29udGV4dCB0byBjb250ZXh0LiIiIgotICAgICAgICBpZiBjb250ZXh0IGluIChEZWZhdWx0Q29udGV4dCwgQmFzaWNDb250ZXh0LCBFeHRlbmRlZENvbnRleHQpOgotICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQuY29weSgpCi0gICAgICAgICAgICBjb250ZXh0LmNsZWFyX2ZsYWdzKCkKLSAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuX19kZWNpbWFsX2NvbnRleHRfXyA9IGNvbnRleHQKLQotICAgIGRlZiBnZXRjb250ZXh0KCk6Ci0gICAgICAgICIiIlJldHVybnMgdGhpcyB0aHJlYWQncyBjb250ZXh0LgotCi0gICAgICAgIElmIHRoaXMgdGhyZWFkIGRvZXMgbm90IHlldCBoYXZlIGEgY29udGV4dCwgcmV0dXJucwotICAgICAgICBhIG5ldyBjb250ZXh0IGFuZCBzZXRzIHRoaXMgdGhyZWFkJ3MgY29udGV4dC4KLSAgICAgICAgTmV3IGNvbnRleHRzIGFyZSBjb3BpZXMgb2YgRGVmYXVsdENvbnRleHQuCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuX19kZWNpbWFsX2NvbnRleHRfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBjb250ZXh0ID0gQ29udGV4dCgpCi0gICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5fX2RlY2ltYWxfY29udGV4dF9fID0gY29udGV4dAotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQKLQotZWxzZToKLQotICAgIGxvY2FsID0gdGhyZWFkaW5nLmxvY2FsKCkKLSAgICBpZiBoYXNhdHRyKGxvY2FsLCAnX19kZWNpbWFsX2NvbnRleHRfXycpOgotICAgICAgICBkZWwgbG9jYWwuX19kZWNpbWFsX2NvbnRleHRfXwotCi0gICAgZGVmIGdldGNvbnRleHQoX2xvY2FsPWxvY2FsKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGlzIHRocmVhZCdzIGNvbnRleHQuCi0KLSAgICAgICAgSWYgdGhpcyB0aHJlYWQgZG9lcyBub3QgeWV0IGhhdmUgYSBjb250ZXh0LCByZXR1cm5zCi0gICAgICAgIGEgbmV3IGNvbnRleHQgYW5kIHNldHMgdGhpcyB0aHJlYWQncyBjb250ZXh0LgotICAgICAgICBOZXcgY29udGV4dHMgYXJlIGNvcGllcyBvZiBEZWZhdWx0Q29udGV4dC4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBfbG9jYWwuX19kZWNpbWFsX2NvbnRleHRfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBjb250ZXh0ID0gQ29udGV4dCgpCi0gICAgICAgICAgICBfbG9jYWwuX19kZWNpbWFsX2NvbnRleHRfXyA9IGNvbnRleHQKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ci0KLSAgICBkZWYgc2V0Y29udGV4dChjb250ZXh0LCBfbG9jYWw9bG9jYWwpOgotICAgICAgICAiIiJTZXQgdGhpcyB0aHJlYWQncyBjb250ZXh0IHRvIGNvbnRleHQuIiIiCi0gICAgICAgIGlmIGNvbnRleHQgaW4gKERlZmF1bHRDb250ZXh0LCBCYXNpY0NvbnRleHQsIEV4dGVuZGVkQ29udGV4dCk6Ci0gICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5jb3B5KCkKLSAgICAgICAgICAgIGNvbnRleHQuY2xlYXJfZmxhZ3MoKQotICAgICAgICBfbG9jYWwuX19kZWNpbWFsX2NvbnRleHRfXyA9IGNvbnRleHQKLQotICAgIGRlbCB0aHJlYWRpbmcsIGxvY2FsICAgICAgICAjIERvbid0IGNvbnRhbWluYXRlIHRoZSBuYW1lc3BhY2UKLQotZGVmIGxvY2FsY29udGV4dChjdHg9Tm9uZSk6Ci0gICAgIiIiUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIGZvciBhIGNvcHkgb2YgdGhlIHN1cHBsaWVkIGNvbnRleHQKLQotICAgIFVzZXMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbnRleHQgaWYgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQKLSAgICBUaGUgcmV0dXJuZWQgY29udGV4dCBtYW5hZ2VyIGNyZWF0ZXMgYSBsb2NhbCBkZWNpbWFsIGNvbnRleHQKLSAgICBpbiBhIHdpdGggc3RhdGVtZW50OgotICAgICAgICBkZWYgc2luKHgpOgotICAgICAgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KCkgYXMgY3R4OgotICAgICAgICAgICAgICAgICBjdHgucHJlYyArPSAyCi0gICAgICAgICAgICAgICAgICMgUmVzdCBvZiBzaW4gY2FsY3VsYXRpb24gYWxnb3JpdGhtCi0gICAgICAgICAgICAgICAgICMgdXNlcyBhIHByZWNpc2lvbiAyIGdyZWF0ZXIgdGhhbiBub3JtYWwKLSAgICAgICAgICAgICByZXR1cm4gK3MgICMgQ29udmVydCByZXN1bHQgdG8gbm9ybWFsIHByZWNpc2lvbgotCi0gICAgICAgICBkZWYgc2luKHgpOgotICAgICAgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KEV4dGVuZGVkQ29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICMgUmVzdCBvZiBzaW4gY2FsY3VsYXRpb24gYWxnb3JpdGhtCi0gICAgICAgICAgICAgICAgICMgdXNlcyB0aGUgRXh0ZW5kZWQgQ29udGV4dCBmcm9tIHRoZQotICAgICAgICAgICAgICAgICAjIEdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFNwZWNpZmljYXRpb24KLSAgICAgICAgICAgICByZXR1cm4gK3MgICMgQ29udmVydCByZXN1bHQgdG8gbm9ybWFsIGNvbnRleHQKLQotICAgID4+PiBzZXRjb250ZXh0KERlZmF1bHRDb250ZXh0KQotICAgID4+PiBwcmludChnZXRjb250ZXh0KCkucHJlYykKLSAgICAyOAotICAgID4+PiB3aXRoIGxvY2FsY29udGV4dCgpOgotICAgIC4uLiAgICAgY3R4ID0gZ2V0Y29udGV4dCgpCi0gICAgLi4uICAgICBjdHgucHJlYyArPSAyCi0gICAgLi4uICAgICBwcmludChjdHgucHJlYykKLSAgICAuLi4KLSAgICAzMAotICAgID4+PiB3aXRoIGxvY2FsY29udGV4dChFeHRlbmRlZENvbnRleHQpOgotICAgIC4uLiAgICAgcHJpbnQoZ2V0Y29udGV4dCgpLnByZWMpCi0gICAgLi4uCi0gICAgOQotICAgID4+PiBwcmludChnZXRjb250ZXh0KCkucHJlYykKLSAgICAyOAotICAgICIiIgotICAgIGlmIGN0eCBpcyBOb25lOiBjdHggPSBnZXRjb250ZXh0KCkKLSAgICByZXR1cm4gX0NvbnRleHRNYW5hZ2VyKGN0eCkKLQotCi0jIyMjIyBEZWNpbWFsIGNsYXNzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBEbyBub3Qgc3ViY2xhc3MgRGVjaW1hbCBmcm9tIG51bWJlcnMuUmVhbCBhbmQgZG8gbm90IHJlZ2lzdGVyIGl0IGFzIHN1Y2gKLSMgKGJlY2F1c2UgRGVjaW1hbHMgYXJlIG5vdCBpbnRlcm9wZXJhYmxlIHdpdGggZmxvYXRzKS4gIFNlZSB0aGUgbm90ZXMgaW4KLSMgbnVtYmVycy5weSBmb3IgbW9yZSBkZXRhaWwuCi0KLWNsYXNzIERlY2ltYWwob2JqZWN0KToKLSAgICAiIiJGbG9hdGluZyBwb2ludCBjbGFzcyBmb3IgZGVjaW1hbCBhcml0aG1ldGljLiIiIgotCi0gICAgX19zbG90c19fID0gKCdfZXhwJywnX2ludCcsJ19zaWduJywgJ19pc19zcGVjaWFsJykKLSAgICAjIEdlbmVyYWxseSwgdGhlIHZhbHVlIG9mIHRoZSBEZWNpbWFsIGluc3RhbmNlIGlzIGdpdmVuIGJ5Ci0gICAgIyAgKC0xKSoqX3NpZ24gKiBfaW50ICogMTAqKl9leHAKLSAgICAjIFNwZWNpYWwgdmFsdWVzIGFyZSBzaWduaWZpZWQgYnkgX2lzX3NwZWNpYWwgPT0gVHJ1ZQotCi0gICAgIyBXZSdyZSBpbW11dGFibGUsIHNvIHVzZSBfX25ld19fIG5vdCBfX2luaXRfXwotICAgIGRlZiBfX25ld19fKGNscywgdmFsdWU9IjAiLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJDcmVhdGUgYSBkZWNpbWFsIHBvaW50IGluc3RhbmNlLgotCi0gICAgICAgID4+PiBEZWNpbWFsKCczLjE0JykgICAgICAgICAgICAgICMgc3RyaW5nIGlucHV0Ci0gICAgICAgIERlY2ltYWwoJzMuMTQnKQotICAgICAgICA+Pj4gRGVjaW1hbCgoMCwgKDMsIDEsIDQpLCAtMikpICAjIHR1cGxlIChzaWduLCBkaWdpdF90dXBsZSwgZXhwb25lbnQpCi0gICAgICAgIERlY2ltYWwoJzMuMTQnKQotICAgICAgICA+Pj4gRGVjaW1hbCgzMTQpICAgICAgICAgICAgICAgICAjIGludAotICAgICAgICBEZWNpbWFsKCczMTQnKQotICAgICAgICA+Pj4gRGVjaW1hbChEZWNpbWFsKDMxNCkpICAgICAgICAjIGFub3RoZXIgZGVjaW1hbCBpbnN0YW5jZQotICAgICAgICBEZWNpbWFsKCczMTQnKQotICAgICAgICA+Pj4gRGVjaW1hbCgnICAzLjE0ICBcXG4nKSAgICAgICAgIyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIG9rYXkKLSAgICAgICAgRGVjaW1hbCgnMy4xNCcpCi0gICAgICAgICIiIgotCi0gICAgICAgICMgTm90ZSB0aGF0IHRoZSBjb2VmZmljaWVudCwgc2VsZi5faW50LCBpcyBhY3R1YWxseSBzdG9yZWQgYXMKLSAgICAgICAgIyBhIHN0cmluZyByYXRoZXIgdGhhbiBhcyBhIHR1cGxlIG9mIGRpZ2l0cy4gIFRoaXMgc3BlZWRzIHVwCi0gICAgICAgICMgdGhlICJkaWdpdHMgdG8gaW50ZWdlciIgYW5kICJpbnRlZ2VyIHRvIGRpZ2l0cyIgY29udmVyc2lvbnMKLSAgICAgICAgIyB0aGF0IGFyZSB1c2VkIGluIGFsbW9zdCBldmVyeSBhcml0aG1ldGljIG9wZXJhdGlvbiBvbgotICAgICAgICAjIERlY2ltYWxzLiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBkZXRhaWw6IHRoZSBhc190dXBsZSBmdW5jdGlvbgotICAgICAgICAjIGFuZCB0aGUgRGVjaW1hbCBjb25zdHJ1Y3RvciBzdGlsbCBkZWFsIHdpdGggdHVwbGVzIG9mCi0gICAgICAgICMgZGlnaXRzLgotCi0gICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCi0KLSAgICAgICAgIyBGcm9tIGEgc3RyaW5nCi0gICAgICAgICMgUkVzIGluc2lzdCBvbiByZWFsIHN0cmluZ3MsIHNvIHdlIGNhbiB0b28uCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICBtID0gX3BhcnNlcih2YWx1ZS5zdHJpcCgpKQotICAgICAgICAgICAgaWYgbSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihDb252ZXJzaW9uU3ludGF4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBsaXRlcmFsIGZvciBEZWNpbWFsOiAlciIgJSB2YWx1ZSkKLQotICAgICAgICAgICAgaWYgbS5ncm91cCgnc2lnbicpID09ICItIjoKLSAgICAgICAgICAgICAgICBzZWxmLl9zaWduID0gMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9zaWduID0gMAotICAgICAgICAgICAgaW50cGFydCA9IG0uZ3JvdXAoJ2ludCcpCi0gICAgICAgICAgICBpZiBpbnRwYXJ0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICMgZmluaXRlIG51bWJlcgotICAgICAgICAgICAgICAgIGZyYWNwYXJ0ID0gbS5ncm91cCgnZnJhYycpIG9yICcnCi0gICAgICAgICAgICAgICAgZXhwID0gaW50KG0uZ3JvdXAoJ2V4cCcpIG9yICcwJykKLSAgICAgICAgICAgICAgICBzZWxmLl9pbnQgPSBzdHIoaW50KGludHBhcnQrZnJhY3BhcnQpKQotICAgICAgICAgICAgICAgIHNlbGYuX2V4cCA9IGV4cCAtIGxlbihmcmFjcGFydCkKLSAgICAgICAgICAgICAgICBzZWxmLl9pc19zcGVjaWFsID0gRmFsc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGlhZyA9IG0uZ3JvdXAoJ2RpYWcnKQotICAgICAgICAgICAgICAgIGlmIGRpYWcgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMgTmFOCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludCA9IHN0cihpbnQoZGlhZyBvciAnMCcpKS5sc3RyaXAoJzAnKQotICAgICAgICAgICAgICAgICAgICBpZiBtLmdyb3VwKCdzaWduYWwnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cCA9ICdOJwotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwID0gJ24nCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBpbmZpbml0eQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnQgPSAnMCcKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwID0gJ0YnCi0gICAgICAgICAgICAgICAgc2VsZi5faXNfc3BlY2lhbCA9IFRydWUKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSAgICAgICAgIyBGcm9tIGFuIGludGVnZXIKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgIGlmIHZhbHVlID49IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc2lnbiA9IDAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc2lnbiA9IDEKLSAgICAgICAgICAgIHNlbGYuX2V4cCA9IDAKLSAgICAgICAgICAgIHNlbGYuX2ludCA9IHN0cihhYnModmFsdWUpKQotICAgICAgICAgICAgc2VsZi5faXNfc3BlY2lhbCA9IEZhbHNlCi0gICAgICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgICAgICMgRnJvbSBhbm90aGVyIGRlY2ltYWwKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGVjaW1hbCk6Ci0gICAgICAgICAgICBzZWxmLl9leHAgID0gdmFsdWUuX2V4cAotICAgICAgICAgICAgc2VsZi5fc2lnbiA9IHZhbHVlLl9zaWduCi0gICAgICAgICAgICBzZWxmLl9pbnQgID0gdmFsdWUuX2ludAotICAgICAgICAgICAgc2VsZi5faXNfc3BlY2lhbCAgPSB2YWx1ZS5faXNfc3BlY2lhbAotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICAjIEZyb20gYW4gaW50ZXJuYWwgd29ya2luZyB2YWx1ZQotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBfV29ya1JlcCk6Ci0gICAgICAgICAgICBzZWxmLl9zaWduID0gdmFsdWUuc2lnbgotICAgICAgICAgICAgc2VsZi5faW50ID0gc3RyKHZhbHVlLmludCkKLSAgICAgICAgICAgIHNlbGYuX2V4cCA9IGludCh2YWx1ZS5leHApCi0gICAgICAgICAgICBzZWxmLl9pc19zcGVjaWFsID0gRmFsc2UKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSAgICAgICAgIyB0dXBsZS9saXN0IGNvbnZlcnNpb24gKHBvc3NpYmx5IGZyb20gYXNfdHVwbGUoKSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsdHVwbGUpKToKLSAgICAgICAgICAgIGlmIGxlbih2YWx1ZSkgIT0gMzoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHR1cGxlIHNpemUgaW4gY3JlYXRpb24gb2YgRGVjaW1hbCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJvbSBsaXN0IG9yIHR1cGxlLiAgVGhlIGxpc3Qgb3IgdHVwbGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBoYXZlIGV4YWN0bHkgdGhyZWUgZWxlbWVudHMuJykKLSAgICAgICAgICAgICMgcHJvY2VzcyBzaWduLiAgVGhlIGlzaW5zdGFuY2UgdGVzdCByZWplY3RzIGZsb2F0cwotICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKHZhbHVlWzBdLCBpbnQpIGFuZCB2YWx1ZVswXSBpbiAoMCwxKSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBzaWduLiAgVGhlIGZpcnN0IHZhbHVlIGluIHRoZSB0dXBsZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIGFuIGludGVnZXI7IGVpdGhlciAwIGZvciBhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGl2ZSBudW1iZXIgb3IgMSBmb3IgYSBuZWdhdGl2ZSBudW1iZXIuIikKLSAgICAgICAgICAgIHNlbGYuX3NpZ24gPSB2YWx1ZVswXQotICAgICAgICAgICAgaWYgdmFsdWVbMl0gPT0gJ0YnOgotICAgICAgICAgICAgICAgICMgaW5maW5pdHk6IHZhbHVlWzFdIGlzIGlnbm9yZWQKLSAgICAgICAgICAgICAgICBzZWxmLl9pbnQgPSAnMCcKLSAgICAgICAgICAgICAgICBzZWxmLl9leHAgPSB2YWx1ZVsyXQotICAgICAgICAgICAgICAgIHNlbGYuX2lzX3NwZWNpYWwgPSBUcnVlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgcHJvY2VzcyBhbmQgdmFsaWRhdGUgdGhlIGRpZ2l0cyBpbiB2YWx1ZVsxXQotICAgICAgICAgICAgICAgIGRpZ2l0cyA9IFtdCi0gICAgICAgICAgICAgICAgZm9yIGRpZ2l0IGluIHZhbHVlWzFdOgotICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRpZ2l0LCBpbnQpIGFuZCAwIDw9IGRpZ2l0IDw9IDk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIHNraXAgbGVhZGluZyB6ZXJvcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGlnaXRzIG9yIGRpZ2l0ICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzLmFwcGVuZChkaWdpdCkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRoZSBzZWNvbmQgdmFsdWUgaW4gdGhlIHR1cGxlIG11c3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgY29tcG9zZWQgb2YgaW50ZWdlcnMgaW4gdGhlIHJhbmdlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAgdGhyb3VnaCA5LiIpCi0gICAgICAgICAgICAgICAgaWYgdmFsdWVbMl0gaW4gKCduJywgJ04nKToKLSAgICAgICAgICAgICAgICAgICAgIyBOYU46IGRpZ2l0cyBmb3JtIHRoZSBkaWFnbm9zdGljCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludCA9ICcnLmpvaW4obWFwKHN0ciwgZGlnaXRzKSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwID0gdmFsdWVbMl0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5faXNfc3BlY2lhbCA9IFRydWUKLSAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWVbMl0sIGludCk6Ci0gICAgICAgICAgICAgICAgICAgICMgZmluaXRlIG51bWJlcjogZGlnaXRzIGdpdmUgdGhlIGNvZWZmaWNpZW50Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludCA9ICcnLmpvaW4obWFwKHN0ciwgZGlnaXRzIG9yIFswXSkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cCA9IHZhbHVlWzJdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2lzX3NwZWNpYWwgPSBGYWxzZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRoZSB0aGlyZCB2YWx1ZSBpbiB0aGUgdHVwbGUgbXVzdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGFuIGludGVnZXIsIG9yIG9uZSBvZiB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmdzICdGJywgJ24nLCAnTicuIikKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLSAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEZsb2F0T3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICJzdHJpY3Qgc2VtYW50aWNzIGZvciBtaXhpbmcgZmxvYXRzIGFuZCBEZWNpbWFscyBhcmUgIgotICAgICAgICAgICAgICAgICJlbmFibGVkIikKLSAgICAgICAgICAgIHZhbHVlID0gRGVjaW1hbC5mcm9tX2Zsb2F0KHZhbHVlKQotICAgICAgICAgICAgc2VsZi5fZXhwICA9IHZhbHVlLl9leHAKLSAgICAgICAgICAgIHNlbGYuX3NpZ24gPSB2YWx1ZS5fc2lnbgotICAgICAgICAgICAgc2VsZi5faW50ICA9IHZhbHVlLl9pbnQKLSAgICAgICAgICAgIHNlbGYuX2lzX3NwZWNpYWwgID0gdmFsdWUuX2lzX3NwZWNpYWwKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byBEZWNpbWFsIiAlIHZhbHVlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZyb21fZmxvYXQoY2xzLCBmKToKLSAgICAgICAgIiIiQ29udmVydHMgYSBmbG9hdCB0byBhIGRlY2ltYWwgbnVtYmVyLCBleGFjdGx5LgotCi0gICAgICAgIE5vdGUgdGhhdCBEZWNpbWFsLmZyb21fZmxvYXQoMC4xKSBpcyBub3QgdGhlIHNhbWUgYXMgRGVjaW1hbCgnMC4xJykuCi0gICAgICAgIFNpbmNlIDAuMSBpcyBub3QgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIGJpbmFyeSBmbG9hdGluZyBwb2ludCwgdGhlCi0gICAgICAgIHZhbHVlIGlzIHN0b3JlZCBhcyB0aGUgbmVhcmVzdCByZXByZXNlbnRhYmxlIHZhbHVlIHdoaWNoIGlzCi0gICAgICAgIDB4MS45OTk5OTk5OTk5OTlhcC00LiAgVGhlIGV4YWN0IGVxdWl2YWxlbnQgb2YgdGhlIHZhbHVlIGluIGRlY2ltYWwKLSAgICAgICAgaXMgMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1LgotCi0gICAgICAgID4+PiBEZWNpbWFsLmZyb21fZmxvYXQoMC4xKQotICAgICAgICBEZWNpbWFsKCcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKQotICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCduYW4nKSkKLSAgICAgICAgRGVjaW1hbCgnTmFOJykKLSAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnaW5mJykpCi0gICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKLSAgICAgICAgPj4+IERlY2ltYWwuZnJvbV9mbG9hdCgtZmxvYXQoJ2luZicpKQotICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQotICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KC0wLjApCi0gICAgICAgIERlY2ltYWwoJy0wJykKLQotICAgICAgICAiIiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShmLCBpbnQpOiAgICAgICAgICAgICAgICAjIGhhbmRsZSBpbnRlZ2VyIGlucHV0cwotICAgICAgICAgICAgcmV0dXJuIGNscyhmKQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmLCBmbG9hdCk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IG11c3QgYmUgaW50IG9yIGZsb2F0LiIpCi0gICAgICAgIGlmIF9tYXRoLmlzaW5mKGYpIG9yIF9tYXRoLmlzbmFuKGYpOgotICAgICAgICAgICAgcmV0dXJuIGNscyhyZXByKGYpKQotICAgICAgICBpZiBfbWF0aC5jb3B5c2lnbigxLjAsIGYpID09IDEuMDoKLSAgICAgICAgICAgIHNpZ24gPSAwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzaWduID0gMQotICAgICAgICBuLCBkID0gYWJzKGYpLmFzX2ludGVnZXJfcmF0aW8oKQotICAgICAgICBrID0gZC5iaXRfbGVuZ3RoKCkgLSAxCi0gICAgICAgIHJlc3VsdCA9IF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgc3RyKG4qNSoqayksIC1rKQotICAgICAgICBpZiBjbHMgaXMgRGVjaW1hbDoKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBjbHMocmVzdWx0KQotCi0gICAgZGVmIF9pc25hbihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbm90IGFjdHVhbGx5IG9uZS4KLQotICAgICAgICAwIGlmIGEgbnVtYmVyCi0gICAgICAgIDEgaWYgTmFOCi0gICAgICAgIDIgaWYgc05hTgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKLSAgICAgICAgICAgIGV4cCA9IHNlbGYuX2V4cAotICAgICAgICAgICAgaWYgZXhwID09ICduJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgZWxpZiBleHAgPT0gJ04nOgotICAgICAgICAgICAgICAgIHJldHVybiAyCi0gICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgX2lzaW5maW5pdHkoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgd2hldGhlciB0aGUgbnVtYmVyIGlzIGluZmluaXRlCi0KLSAgICAgICAgMCBpZiBmaW5pdGUgb3Igbm90IGEgbnVtYmVyCi0gICAgICAgIDEgaWYgK0lORgotICAgICAgICAtMSBpZiAtSU5GCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9leHAgPT0gJ0YnOgotICAgICAgICAgICAgaWYgc2VsZi5fc2lnbjoKLSAgICAgICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgX2NoZWNrX25hbnMoc2VsZiwgb3RoZXI9Tm9uZSwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbm90IGFjdHVhbGx5IG9uZS4KLQotICAgICAgICBpZiBzZWxmLCBvdGhlciBhcmUgc05hTiwgc2lnbmFsCi0gICAgICAgIGlmIHNlbGYsIG90aGVyIGFyZSBOYU4gcmV0dXJuIG5hbgotICAgICAgICByZXR1cm4gMAotCi0gICAgICAgIERvbmUgYmVmb3JlIG9wZXJhdGlvbnMuCi0gICAgICAgICIiIgotCi0gICAgICAgIHNlbGZfaXNfbmFuID0gc2VsZi5faXNuYW4oKQotICAgICAgICBpZiBvdGhlciBpcyBOb25lOgotICAgICAgICAgICAgb3RoZXJfaXNfbmFuID0gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG90aGVyX2lzX25hbiA9IG90aGVyLl9pc25hbigpCi0KLSAgICAgICAgaWYgc2VsZl9pc19uYW4gb3Igb3RoZXJfaXNfbmFuOgotICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICAgICAgaWYgc2VsZl9pc19uYW4gPT0gMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ3NOYU4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpCi0gICAgICAgICAgICBpZiBvdGhlcl9pc19uYW4gPT0gMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ3NOYU4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyKQotICAgICAgICAgICAgaWYgc2VsZl9pc19uYW46Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeF9uYW4oY29udGV4dCkKLQotICAgICAgICAgICAgcmV0dXJuIG90aGVyLl9maXhfbmFuKGNvbnRleHQpCi0gICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgX2NvbXBhcmVfY2hlY2tfbmFucyhzZWxmLCBvdGhlciwgY29udGV4dCk6Ci0gICAgICAgICIiIlZlcnNpb24gb2YgX2NoZWNrX25hbnMgdXNlZCBmb3IgdGhlIHNpZ25hbGluZyBjb21wYXJpc29ucwotICAgICAgICBjb21wYXJlX3NpZ25hbCwgX19sZV9fLCBfX2x0X18sIF9fZ2VfXywgX19ndF9fLgotCi0gICAgICAgIFNpZ25hbCBJbnZhbGlkT3BlcmF0aW9uIGlmIGVpdGhlciBzZWxmIG9yIG90aGVyIGlzIGEgKHF1aWV0Ci0gICAgICAgIG9yIHNpZ25hbGluZykgTmFOLiAgU2lnbmFsaW5nIE5hTnMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgcXVpZXQKLSAgICAgICAgTmFOcy4KLQotICAgICAgICBSZXR1cm4gMCBpZiBuZWl0aGVyIG9wZXJhbmQgaXMgYSBOYU4uCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIG90aGVyLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgaWYgc2VsZi5pc19zbmFuKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wYXJpc29uIGludm9sdmluZyBzTmFOJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikKLSAgICAgICAgICAgIGVsaWYgb3RoZXIuaXNfc25hbigpOgotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGFyaXNvbiBpbnZvbHZpbmcgc05hTicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyKQotICAgICAgICAgICAgZWxpZiBzZWxmLmlzX3FuYW4oKToKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBhcmlzb24gaW52b2x2aW5nIE5hTicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpCi0gICAgICAgICAgICBlbGlmIG90aGVyLmlzX3FuYW4oKToKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBhcmlzb24gaW52b2x2aW5nIE5hTicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyKQotICAgICAgICByZXR1cm4gMAotCi0gICAgZGVmIF9fYm9vbF9fKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzZWxmIGlzIG5vbnplcm87IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCi0KLSAgICAgICAgTmFOcyBhbmQgaW5maW5pdGllcyBhcmUgY29uc2lkZXJlZCBub256ZXJvLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2lzX3NwZWNpYWwgb3Igc2VsZi5faW50ICE9ICcwJwotCi0gICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgotICAgICAgICAiIiJDb21wYXJlIHRoZSB0d28gbm9uLU5hTiBkZWNpbWFsIGluc3RhbmNlcyBzZWxmIGFuZCBvdGhlci4KLQotICAgICAgICBSZXR1cm5zIC0xIGlmIHNlbGYgPCBvdGhlciwgMCBpZiBzZWxmID09IG90aGVyIGFuZCAxCi0gICAgICAgIGlmIHNlbGYgPiBvdGhlci4gIFRoaXMgcm91dGluZSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuIiIiCi0KLSAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlci5faXNfc3BlY2lhbDoKLSAgICAgICAgICAgIHNlbGZfaW5mID0gc2VsZi5faXNpbmZpbml0eSgpCi0gICAgICAgICAgICBvdGhlcl9pbmYgPSBvdGhlci5faXNpbmZpbml0eSgpCi0gICAgICAgICAgICBpZiBzZWxmX2luZiA9PSBvdGhlcl9pbmY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgIGVsaWYgc2VsZl9pbmYgPCBvdGhlcl9pbmY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0KLSAgICAgICAgIyBjaGVjayBmb3IgemVyb3M7ICBEZWNpbWFsKCcwJykgPT0gRGVjaW1hbCgnLTAnKQotICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgIGlmIG5vdCBvdGhlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gLSgoLTEpKipvdGhlci5fc2lnbikKLSAgICAgICAgaWYgbm90IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuICgtMSkqKnNlbGYuX3NpZ24KLQotICAgICAgICAjIElmIGRpZmZlcmVudCBzaWducywgbmVnIG9uZSBpcyBsZXNzCi0gICAgICAgIGlmIG90aGVyLl9zaWduIDwgc2VsZi5fc2lnbjoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBpZiBzZWxmLl9zaWduIDwgb3RoZXIuX3NpZ246Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0gICAgICAgIHNlbGZfYWRqdXN0ZWQgPSBzZWxmLmFkanVzdGVkKCkKLSAgICAgICAgb3RoZXJfYWRqdXN0ZWQgPSBvdGhlci5hZGp1c3RlZCgpCi0gICAgICAgIGlmIHNlbGZfYWRqdXN0ZWQgPT0gb3RoZXJfYWRqdXN0ZWQ6Ci0gICAgICAgICAgICBzZWxmX3BhZGRlZCA9IHNlbGYuX2ludCArICcwJyooc2VsZi5fZXhwIC0gb3RoZXIuX2V4cCkKLSAgICAgICAgICAgIG90aGVyX3BhZGRlZCA9IG90aGVyLl9pbnQgKyAnMCcqKG90aGVyLl9leHAgLSBzZWxmLl9leHApCi0gICAgICAgICAgICBpZiBzZWxmX3BhZGRlZCA9PSBvdGhlcl9wYWRkZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgIGVsaWYgc2VsZl9wYWRkZWQgPCBvdGhlcl9wYWRkZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0oLTEpKipzZWxmLl9zaWduCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpKipzZWxmLl9zaWduCi0gICAgICAgIGVsaWYgc2VsZl9hZGp1c3RlZCA+IG90aGVyX2FkanVzdGVkOgotICAgICAgICAgICAgcmV0dXJuICgtMSkqKnNlbGYuX3NpZ24KLSAgICAgICAgZWxzZTogIyBzZWxmX2FkanVzdGVkIDwgb3RoZXJfYWRqdXN0ZWQKLSAgICAgICAgICAgIHJldHVybiAtKCgtMSkqKnNlbGYuX3NpZ24pCi0KLSAgICAjIE5vdGU6IFRoZSBEZWNpbWFsIHN0YW5kYXJkIGRvZXNuJ3QgY292ZXIgcmljaCBjb21wYXJpc29ucyBmb3IKLSAgICAjIERlY2ltYWxzLiAgSW4gcGFydGljdWxhciwgdGhlIHNwZWNpZmljYXRpb24gaXMgc2lsZW50IG9uIHRoZQotICAgICMgc3ViamVjdCBvZiB3aGF0IHNob3VsZCBoYXBwZW4gZm9yIGEgY29tcGFyaXNvbiBpbnZvbHZpbmcgYSBOYU4uCi0gICAgIyBXZSB0YWtlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2g6Ci0gICAgIwotICAgICMgICA9PSBjb21wYXJpc29ucyBpbnZvbHZpbmcgYSBxdWlldCBOYU4gYWx3YXlzIHJldHVybiBGYWxzZQotICAgICMgICAhPSBjb21wYXJpc29ucyBpbnZvbHZpbmcgYSBxdWlldCBOYU4gYWx3YXlzIHJldHVybiBUcnVlCi0gICAgIyAgID09IG9yICE9IGNvbXBhcmlzb25zIGludm9sdmluZyBhIHNpZ25hbGluZyBOYU4gc2lnbmFsCi0gICAgIyAgICAgIEludmFsaWRPcGVyYXRpb24sIGFuZCByZXR1cm4gRmFsc2Ugb3IgVHJ1ZSBhcyBhYm92ZSBpZiB0aGUKLSAgICAjICAgICAgSW52YWxpZE9wZXJhdGlvbiBpcyBub3QgdHJhcHBlZC4KLSAgICAjICAgPCwgPiwgPD0gYW5kID49IGNvbXBhcmlzb25zIGludm9sdmluZyBhIChxdWlldCBvciBzaWduYWxpbmcpCi0gICAgIyAgICAgIE5hTiBzaWduYWwgSW52YWxpZE9wZXJhdGlvbiwgYW5kIHJldHVybiBGYWxzZSBpZiB0aGUKLSAgICAjICAgICAgSW52YWxpZE9wZXJhdGlvbiBpcyBub3QgdHJhcHBlZC4KLSAgICAjCi0gICAgIyBUaGlzIGJlaGF2aW9yIGlzIGRlc2lnbmVkIHRvIGNvbmZvcm0gYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB0bwotICAgICMgdGhhdCBzcGVjaWZpZWQgYnkgSUVFRSA3NTQuCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICBzZWxmLCBvdGhlciA9IF9jb252ZXJ0X2Zvcl9jb21wYXJpc29uKHNlbGYsIG90aGVyLCBlcXVhbGl0eV9vcD1UcnVlKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICBpZiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA9PSAwCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICBzZWxmLCBvdGhlciA9IF9jb252ZXJ0X2Zvcl9jb21wYXJpc29uKHNlbGYsIG90aGVyLCBlcXVhbGl0eV9vcD1UcnVlKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICBpZiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpICE9IDAKLQotCi0gICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgc2VsZiwgb3RoZXIgPSBfY29udmVydF9mb3JfY29tcGFyaXNvbihzZWxmLCBvdGhlcikKLSAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXIKLSAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPCAwCi0KLSAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICBzZWxmLCBvdGhlciA9IF9jb252ZXJ0X2Zvcl9jb21wYXJpc29uKHNlbGYsIG90aGVyKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICBhbnMgPSBzZWxmLl9jb21wYXJlX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCi0gICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8PSAwCi0KLSAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICBzZWxmLCBvdGhlciA9IF9jb252ZXJ0X2Zvcl9jb21wYXJpc29uKHNlbGYsIG90aGVyKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICBhbnMgPSBzZWxmLl9jb21wYXJlX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCi0gICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA+IDAKLQotICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgIHNlbGYsIG90aGVyID0gX2NvbnZlcnRfZm9yX2NvbXBhcmlzb24oc2VsZiwgb3RoZXIpCi0gICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIG90aGVyCi0gICAgICAgIGFucyA9IHNlbGYuX2NvbXBhcmVfY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKLSAgICAgICAgaWYgYW5zOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID49IDAKLQotICAgIGRlZiBjb21wYXJlKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJDb21wYXJlIHNlbGYgdG8gb3RoZXIuICBSZXR1cm4gYSBkZWNpbWFsIHZhbHVlOgotCi0gICAgICAgIGEgb3IgYiBpcyBhIE5hTiA9PT4gRGVjaW1hbCgnTmFOJykKLSAgICAgICAgYSA8IGIgICAgICAgICAgID09PiBEZWNpbWFsKCctMScpCi0gICAgICAgIGEgPT0gYiAgICAgICAgICA9PT4gRGVjaW1hbCgnMCcpCi0gICAgICAgIGEgPiBiICAgICAgICAgICA9PT4gRGVjaW1hbCgnMScpCi0gICAgICAgICIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCi0KLSAgICAgICAgIyBDb21wYXJlKE5hTiwgTmFOKSA9IE5hTgotICAgICAgICBpZiAoc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlciBhbmQgb3RoZXIuX2lzX3NwZWNpYWwpOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKLSAgICAgICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZi5fY21wKG90aGVyKSkKLQotICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKLSAgICAgICAgIiIieC5fX2hhc2hfXygpIDw9PT4gaGFzaCh4KSIiIgotCi0gICAgICAgICMgSW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGhhc2ggb2YgYSBEZWNpbWFsIGluc3RhbmNlCi0gICAgICAgICMgYWdyZWVzIHdpdGggdGhlIGhhc2ggb2YgYSBudW1lcmljYWxseSBlcXVhbCBpbnRlZ2VyLCBmbG9hdAotICAgICAgICAjIG9yIEZyYWN0aW9uLCB3ZSBmb2xsb3cgdGhlIHJ1bGVzIGZvciBudW1lcmljIGhhc2hlcyBvdXRsaW5lZAotICAgICAgICAjIGluIHRoZSBkb2N1bWVudGF0aW9uLiAgKFNlZSBsaWJyYXJ5IGRvY3MsICdCdWlsdC1pbiBUeXBlcycpLgotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgaWYgc2VsZi5pc19zbmFuKCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW5ub3QgaGFzaCBhIHNpZ25hbGluZyBOYU4gdmFsdWUuJykKLSAgICAgICAgICAgIGVsaWYgc2VsZi5pc19uYW4oKToKLSAgICAgICAgICAgICAgICByZXR1cm4gX1B5SEFTSF9OQU4KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fc2lnbjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1fUHlIQVNIX0lORgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfUHlIQVNIX0lORgotCi0gICAgICAgIGlmIHNlbGYuX2V4cCA+PSAwOgotICAgICAgICAgICAgZXhwX2hhc2ggPSBwb3coMTAsIHNlbGYuX2V4cCwgX1B5SEFTSF9NT0RVTFVTKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXhwX2hhc2ggPSBwb3coX1B5SEFTSF8xMElOViwgLXNlbGYuX2V4cCwgX1B5SEFTSF9NT0RVTFVTKQotICAgICAgICBoYXNoXyA9IGludChzZWxmLl9pbnQpICogZXhwX2hhc2ggJSBfUHlIQVNIX01PRFVMVVMKLSAgICAgICAgYW5zID0gaGFzaF8gaWYgc2VsZiA+PSAwIGVsc2UgLWhhc2hfCi0gICAgICAgIHJldHVybiAtMiBpZiBhbnMgPT0gLTEgZWxzZSBhbnMKLQotICAgIGRlZiBhc190dXBsZShzZWxmKToKLSAgICAgICAgIiIiUmVwcmVzZW50cyB0aGUgbnVtYmVyIGFzIGEgdHJpcGxlIHR1cGxlLgotCi0gICAgICAgIFRvIHNob3cgdGhlIGludGVybmFscyBleGFjdGx5IGFzIHRoZXkgYXJlLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIERlY2ltYWxUdXBsZShzZWxmLl9zaWduLCB0dXBsZShtYXAoaW50LCBzZWxmLl9pbnQpKSwgc2VsZi5fZXhwKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAiIiJSZXByZXNlbnRzIHRoZSBudW1iZXIgYXMgYW4gaW5zdGFuY2Ugb2YgRGVjaW1hbC4iIiIKLSAgICAgICAgIyBJbnZhcmlhbnQ6ICBldmFsKHJlcHIoZCkpID09IGQKLSAgICAgICAgcmV0dXJuICJEZWNpbWFsKCclcycpIiAlIHN0cihzZWxmKQotCi0gICAgZGVmIF9fc3RyX18oc2VsZiwgZW5nPUZhbHNlLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyBub3RhdGlvbi4KLQotICAgICAgICBDYXB0dXJlcyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSB1bmRlcmx5aW5nIHJlcHJlc2VudGF0aW9uLgotICAgICAgICAiIiIKLQotICAgICAgICBzaWduID0gWycnLCAnLSddW3NlbGYuX3NpZ25dCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBpZiBzZWxmLl9leHAgPT0gJ0YnOgotICAgICAgICAgICAgICAgIHJldHVybiBzaWduICsgJ0luZmluaXR5JwotICAgICAgICAgICAgZWxpZiBzZWxmLl9leHAgPT0gJ24nOgotICAgICAgICAgICAgICAgIHJldHVybiBzaWduICsgJ05hTicgKyBzZWxmLl9pbnQKLSAgICAgICAgICAgIGVsc2U6ICMgc2VsZi5fZXhwID09ICdOJwotICAgICAgICAgICAgICAgIHJldHVybiBzaWduICsgJ3NOYU4nICsgc2VsZi5faW50Ci0KLSAgICAgICAgIyBudW1iZXIgb2YgZGlnaXRzIG9mIHNlbGYuX2ludCB0byBsZWZ0IG9mIGRlY2ltYWwgcG9pbnQKLSAgICAgICAgbGVmdGRpZ2l0cyA9IHNlbGYuX2V4cCArIGxlbihzZWxmLl9pbnQpCi0KLSAgICAgICAgIyBkb3RwbGFjZSBpcyBudW1iZXIgb2YgZGlnaXRzIG9mIHNlbGYuX2ludCB0byB0aGUgbGVmdCBvZiB0aGUKLSAgICAgICAgIyBkZWNpbWFsIHBvaW50IGluIHRoZSBtYW50aXNzYSBvZiB0aGUgb3V0cHV0IHN0cmluZyAodGhhdCBpcywKLSAgICAgICAgIyBhZnRlciBhZGp1c3RpbmcgdGhlIGV4cG9uZW50KQotICAgICAgICBpZiBzZWxmLl9leHAgPD0gMCBhbmQgbGVmdGRpZ2l0cyA+IC02OgotICAgICAgICAgICAgIyBubyBleHBvbmVudCByZXF1aXJlZAotICAgICAgICAgICAgZG90cGxhY2UgPSBsZWZ0ZGlnaXRzCi0gICAgICAgIGVsaWYgbm90IGVuZzoKLSAgICAgICAgICAgICMgdXN1YWwgc2NpZW50aWZpYyBub3RhdGlvbjogMSBkaWdpdCBvbiBsZWZ0IG9mIHRoZSBwb2ludAotICAgICAgICAgICAgZG90cGxhY2UgPSAxCi0gICAgICAgIGVsaWYgc2VsZi5faW50ID09ICcwJzoKLSAgICAgICAgICAgICMgZW5naW5lZXJpbmcgbm90YXRpb24sIHplcm8KLSAgICAgICAgICAgIGRvdHBsYWNlID0gKGxlZnRkaWdpdHMgKyAxKSAlIDMgLSAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIGVuZ2luZWVyaW5nIG5vdGF0aW9uLCBub256ZXJvCi0gICAgICAgICAgICBkb3RwbGFjZSA9IChsZWZ0ZGlnaXRzIC0gMSkgJSAzICsgMQotCi0gICAgICAgIGlmIGRvdHBsYWNlIDw9IDA6Ci0gICAgICAgICAgICBpbnRwYXJ0ID0gJzAnCi0gICAgICAgICAgICBmcmFjcGFydCA9ICcuJyArICcwJyooLWRvdHBsYWNlKSArIHNlbGYuX2ludAotICAgICAgICBlbGlmIGRvdHBsYWNlID49IGxlbihzZWxmLl9pbnQpOgotICAgICAgICAgICAgaW50cGFydCA9IHNlbGYuX2ludCsnMCcqKGRvdHBsYWNlLWxlbihzZWxmLl9pbnQpKQotICAgICAgICAgICAgZnJhY3BhcnQgPSAnJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaW50cGFydCA9IHNlbGYuX2ludFs6ZG90cGxhY2VdCi0gICAgICAgICAgICBmcmFjcGFydCA9ICcuJyArIHNlbGYuX2ludFtkb3RwbGFjZTpdCi0gICAgICAgIGlmIGxlZnRkaWdpdHMgPT0gZG90cGxhY2U6Ci0gICAgICAgICAgICBleHAgPSAnJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLSAgICAgICAgICAgIGV4cCA9IFsnZScsICdFJ11bY29udGV4dC5jYXBpdGFsc10gKyAiJStkIiAlIChsZWZ0ZGlnaXRzLWRvdHBsYWNlKQotCi0gICAgICAgIHJldHVybiBzaWduICsgaW50cGFydCArIGZyYWNwYXJ0ICsgZXhwCi0KLSAgICBkZWYgdG9fZW5nX3N0cmluZyhzZWxmLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJDb252ZXJ0IHRvIGVuZ2luZWVyaW5nLXR5cGUgc3RyaW5nLgotCi0gICAgICAgIEVuZ2luZWVyaW5nIG5vdGF0aW9uIGhhcyBhbiBleHBvbmVudCB3aGljaCBpcyBhIG11bHRpcGxlIG9mIDMsIHNvIHRoZXJlCi0gICAgICAgIGFyZSB1cCB0byAzIGRpZ2l0cyBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBsYWNlLgotCi0gICAgICAgIFNhbWUgcnVsZXMgZm9yIHdoZW4gaW4gZXhwb25lbnRpYWwgYW5kIHdoZW4gYXMgYSB2YWx1ZSBhcyBpbiBfX3N0cl9fLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX19zdHJfXyhlbmc9VHJ1ZSwgY29udGV4dD1jb250ZXh0KQotCi0gICAgZGVmIF9fbmVnX18oc2VsZiwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGNvcHkgd2l0aCB0aGUgc2lnbiBzd2l0Y2hlZC4KLQotICAgICAgICBSb3VuZHMsIGlmIGl0IGhhcyByZWFzb24uCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCi0gICAgICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBpZiBub3Qgc2VsZiBhbmQgY29udGV4dC5yb3VuZGluZyAhPSBST1VORF9GTE9PUjoKLSAgICAgICAgICAgICMgLURlY2ltYWwoJzAnKSBpcyBEZWNpbWFsKCcwJyksIG5vdCBEZWNpbWFsKCctMCcpLCBleGNlcHQKLSAgICAgICAgICAgICMgaW4gUk9VTkRfRkxPT1Igcm91bmRpbmcgbW9kZS4KLSAgICAgICAgICAgIGFucyA9IHNlbGYuY29weV9hYnMoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYW5zID0gc2VsZi5jb3B5X25lZ2F0ZSgpCi0KLSAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCi0KLSAgICBkZWYgX19wb3NfXyhzZWxmLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm5zIGEgY29weSwgdW5sZXNzIGl0IGlzIGEgc05hTi4KLQotICAgICAgICBSb3VuZHMgdGhlIG51bWJlciAoaWYgbW9yZSB0aGVuIHByZWNpc2lvbiBkaWdpdHMpCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCi0gICAgICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBpZiBub3Qgc2VsZiBhbmQgY29udGV4dC5yb3VuZGluZyAhPSBST1VORF9GTE9PUjoKLSAgICAgICAgICAgICMgKyAoLTApID0gMCwgZXhjZXB0IGluIFJPVU5EX0ZMT09SIHJvdW5kaW5nIG1vZGUuCi0gICAgICAgICAgICBhbnMgPSBzZWxmLmNvcHlfYWJzKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFucyA9IERlY2ltYWwoc2VsZikKLQotICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKLQotICAgIGRlZiBfX2Fic19fKHNlbGYsIHJvdW5kPVRydWUsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHNlbGYuCi0KLSAgICAgICAgSWYgdGhlIGtleXdvcmQgYXJndW1lbnQgJ3JvdW5kJyBpcyBmYWxzZSwgZG8gbm90IHJvdW5kLiAgVGhlCi0gICAgICAgIGV4cHJlc3Npb24gc2VsZi5fX2Fic19fKHJvdW5kPUZhbHNlKSBpcyBlcXVpdmFsZW50IHRvCi0gICAgICAgIHNlbGYuY29weV9hYnMoKS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCByb3VuZDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmNvcHlfYWJzKCkKLQotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCi0gICAgICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgIGlmIHNlbGYuX3NpZ246Ci0gICAgICAgICAgICBhbnMgPSBzZWxmLl9fbmVnX18oY29udGV4dD1jb250ZXh0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fX3Bvc19fKGNvbnRleHQ9Y29udGV4dCkKLQotICAgICAgICByZXR1cm4gYW5zCi0KLSAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyBzZWxmICsgb3RoZXIuCi0KLSAgICAgICAgLUlORiArIElORiAob3IgdGhlIHJldmVyc2UpIGNhdXNlIEludmFsaWRPcGVyYXRpb24gZXJyb3JzLgotICAgICAgICAiIiIKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKLSAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXIKLQotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0KLSAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlci5faXNfc3BlY2lhbDoKLSAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCi0gICAgICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCk6Ci0gICAgICAgICAgICAgICAgIyBJZiBib3RoIElORiwgc2FtZSBzaWduID0+IHNhbWUgYXMgYm90aCwgb3Bwb3NpdGUgPT4gZXJyb3IuCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fc2lnbiAhPSBvdGhlci5fc2lnbiBhbmQgb3RoZXIuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICctSU5GICsgSU5GJykKLSAgICAgICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQotICAgICAgICAgICAgaWYgb3RoZXIuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gRGVjaW1hbChvdGhlcikgICMgQ2FuJ3QgYm90aCBiZSBpbmZpbml0eSBoZXJlCi0KLSAgICAgICAgZXhwID0gbWluKHNlbGYuX2V4cCwgb3RoZXIuX2V4cCkKLSAgICAgICAgbmVnYXRpdmV6ZXJvID0gMAotICAgICAgICBpZiBjb250ZXh0LnJvdW5kaW5nID09IFJPVU5EX0ZMT09SIGFuZCBzZWxmLl9zaWduICE9IG90aGVyLl9zaWduOgotICAgICAgICAgICAgIyBJZiB0aGUgYW5zd2VyIGlzIDAsIHRoZSBzaWduIHNob3VsZCBiZSBuZWdhdGl2ZSwgaW4gdGhpcyBjYXNlLgotICAgICAgICAgICAgbmVnYXRpdmV6ZXJvID0gMQotCi0gICAgICAgIGlmIG5vdCBzZWxmIGFuZCBub3Qgb3RoZXI6Ci0gICAgICAgICAgICBzaWduID0gbWluKHNlbGYuX3NpZ24sIG90aGVyLl9zaWduKQotICAgICAgICAgICAgaWYgbmVnYXRpdmV6ZXJvOgotICAgICAgICAgICAgICAgIHNpZ24gPSAxCi0gICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHNpZ24sICcwJywgZXhwKQotICAgICAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBhbnMKLSAgICAgICAgaWYgbm90IHNlbGY6Ci0gICAgICAgICAgICBleHAgPSBtYXgoZXhwLCBvdGhlci5fZXhwIC0gY29udGV4dC5wcmVjLTEpCi0gICAgICAgICAgICBhbnMgPSBvdGhlci5fcmVzY2FsZShleHAsIGNvbnRleHQucm91bmRpbmcpCi0gICAgICAgICAgICBhbnMgPSBhbnMuX2ZpeChjb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIGFucwotICAgICAgICBpZiBub3Qgb3RoZXI6Ci0gICAgICAgICAgICBleHAgPSBtYXgoZXhwLCBzZWxmLl9leHAgLSBjb250ZXh0LnByZWMtMSkKLSAgICAgICAgICAgIGFucyA9IHNlbGYuX3Jlc2NhbGUoZXhwLCBjb250ZXh0LnJvdW5kaW5nKQotICAgICAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICBvcDEgPSBfV29ya1JlcChzZWxmKQotICAgICAgICBvcDIgPSBfV29ya1JlcChvdGhlcikKLSAgICAgICAgb3AxLCBvcDIgPSBfbm9ybWFsaXplKG9wMSwgb3AyLCBjb250ZXh0LnByZWMpCi0KLSAgICAgICAgcmVzdWx0ID0gX1dvcmtSZXAoKQotICAgICAgICBpZiBvcDEuc2lnbiAhPSBvcDIuc2lnbjoKLSAgICAgICAgICAgICMgRXF1YWwgYW5kIG9wcG9zaXRlCi0gICAgICAgICAgICBpZiBvcDEuaW50ID09IG9wMi5pbnQ6Ci0gICAgICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShuZWdhdGl2ZXplcm8sICcwJywgZXhwKQotICAgICAgICAgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFucwotICAgICAgICAgICAgaWYgb3AxLmludCA8IG9wMi5pbnQ6Ci0gICAgICAgICAgICAgICAgb3AxLCBvcDIgPSBvcDIsIG9wMQotICAgICAgICAgICAgICAgICMgT0ssIG5vdyBhYnMob3AxKSA+IGFicyhvcDIpCi0gICAgICAgICAgICBpZiBvcDEuc2lnbiA9PSAxOgotICAgICAgICAgICAgICAgIHJlc3VsdC5zaWduID0gMQotICAgICAgICAgICAgICAgIG9wMS5zaWduLCBvcDIuc2lnbiA9IG9wMi5zaWduLCBvcDEuc2lnbgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXN1bHQuc2lnbiA9IDAKLSAgICAgICAgICAgICAgICAjIFNvIHdlIGtub3cgdGhlIHNpZ24sIGFuZCBvcDEgPiAwLgotICAgICAgICBlbGlmIG9wMS5zaWduID09IDE6Ci0gICAgICAgICAgICByZXN1bHQuc2lnbiA9IDEKLSAgICAgICAgICAgIG9wMS5zaWduLCBvcDIuc2lnbiA9ICgwLCAwKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0LnNpZ24gPSAwCi0gICAgICAgICMgTm93LCBvcDEgPiBhYnMob3AyKSA+IDAKLQotICAgICAgICBpZiBvcDIuc2lnbiA9PSAwOgotICAgICAgICAgICAgcmVzdWx0LmludCA9IG9wMS5pbnQgKyBvcDIuaW50Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXN1bHQuaW50ID0gb3AxLmludCAtIG9wMi5pbnQKLQotICAgICAgICByZXN1bHQuZXhwID0gb3AxLmV4cAotICAgICAgICBhbnMgPSBEZWNpbWFsKHJlc3VsdCkKLSAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGFucwotCi0gICAgX19yYWRkX18gPSBfX2FkZF9fCi0KLSAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJuIHNlbGYgLSBvdGhlciIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0PWNvbnRleHQpCi0gICAgICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgICMgc2VsZiAtIG90aGVyIGlzIGNvbXB1dGVkIGFzIHNlbGYgKyBvdGhlci5jb3B5X25lZ2F0ZSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9fYWRkX18ob3RoZXIuY29weV9uZWdhdGUoKSwgY29udGV4dD1jb250ZXh0KQotCi0gICAgZGVmIF9fcnN1Yl9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm4gb3RoZXIgLSBzZWxmIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCi0gICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIG90aGVyCi0KLSAgICAgICAgcmV0dXJuIG90aGVyLl9fc3ViX18oc2VsZiwgY29udGV4dD1jb250ZXh0KQotCi0gICAgZGVmIF9fbXVsX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiBzZWxmICogb3RoZXIuCi0KLSAgICAgICAgKCstKSBJTkYgKiAwIChvciBpdHMgcmV2ZXJzZSkgcmFpc2UgSW52YWxpZE9wZXJhdGlvbi4KLSAgICAgICAgIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCi0gICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIG90aGVyCi0KLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIHJlc3VsdHNpZ24gPSBzZWxmLl9zaWduIF4gb3RoZXIuX3NpZ24KLQotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIG90aGVyLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKLSAgICAgICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3RoZXI6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnKCstKUlORiAqIDAnKQotICAgICAgICAgICAgICAgIHJldHVybiBfU2lnbmVkSW5maW5pdHlbcmVzdWx0c2lnbl0KLQotICAgICAgICAgICAgaWYgb3RoZXIuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICcwICogKCstKUlORicpCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9TaWduZWRJbmZpbml0eVtyZXN1bHRzaWduXQotCi0gICAgICAgIHJlc3VsdGV4cCA9IHNlbGYuX2V4cCArIG90aGVyLl9leHAKLQotICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgbXVsdGlwbHlpbmcgYnkgemVybwotICAgICAgICBpZiBub3Qgc2VsZiBvciBub3Qgb3RoZXI6Ci0gICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHJlc3VsdHNpZ24sICcwJywgcmVzdWx0ZXhwKQotICAgICAgICAgICAgIyBGaXhpbmcgaW4gY2FzZSB0aGUgZXhwb25lbnQgaXMgb3V0IG9mIGJvdW5kcwotICAgICAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgbXVsdGlwbHlpbmcgYnkgcG93ZXIgb2YgMTAKLSAgICAgICAgaWYgc2VsZi5faW50ID09ICcxJzoKLSAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUocmVzdWx0c2lnbiwgb3RoZXIuX2ludCwgcmVzdWx0ZXhwKQotICAgICAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBhbnMKLSAgICAgICAgaWYgb3RoZXIuX2ludCA9PSAnMSc6Ci0gICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHJlc3VsdHNpZ24sIHNlbGYuX2ludCwgcmVzdWx0ZXhwKQotICAgICAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICBvcDEgPSBfV29ya1JlcChzZWxmKQotICAgICAgICBvcDIgPSBfV29ya1JlcChvdGhlcikKLQotICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHJlc3VsdHNpZ24sIHN0cihvcDEuaW50ICogb3AyLmludCksIHJlc3VsdGV4cCkKLSAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLQotICAgICAgICByZXR1cm4gYW5zCi0gICAgX19ybXVsX18gPSBfX211bF9fCi0KLSAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiBzZWxmIC8gb3RoZXIuIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCi0gICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIHNpZ24gPSBzZWxmLl9zaWduIF4gb3RoZXIuX3NpZ24KLQotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIG90aGVyLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKLSAgICAgICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSBhbmQgb3RoZXIuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJygrLSlJTkYvKCstKUlORicpCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gX1NpZ25lZEluZmluaXR5W3NpZ25dCi0KLSAgICAgICAgICAgIGlmIG90aGVyLl9pc2luZmluaXR5KCk6Ci0gICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoQ2xhbXBlZCwgJ0RpdmlzaW9uIGJ5IGluZmluaXR5JykKLSAgICAgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzaWduLCAnMCcsIGNvbnRleHQuRXRpbnkoKSkKLQotICAgICAgICAjIFNwZWNpYWwgY2FzZXMgZm9yIHplcm9lcwotICAgICAgICBpZiBub3Qgb3RoZXI6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoRGl2aXNpb25VbmRlZmluZWQsICcwIC8gMCcpCi0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoRGl2aXNpb25CeVplcm8sICd4IC8gMCcsIHNpZ24pCi0KLSAgICAgICAgaWYgbm90IHNlbGY6Ci0gICAgICAgICAgICBleHAgPSBzZWxmLl9leHAgLSBvdGhlci5fZXhwCi0gICAgICAgICAgICBjb2VmZiA9IDAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgT0ssIHNvIG5laXRoZXIgPSAwLCBJTkYgb3IgTmFOCi0gICAgICAgICAgICBzaGlmdCA9IGxlbihvdGhlci5faW50KSAtIGxlbihzZWxmLl9pbnQpICsgY29udGV4dC5wcmVjICsgMQotICAgICAgICAgICAgZXhwID0gc2VsZi5fZXhwIC0gb3RoZXIuX2V4cCAtIHNoaWZ0Ci0gICAgICAgICAgICBvcDEgPSBfV29ya1JlcChzZWxmKQotICAgICAgICAgICAgb3AyID0gX1dvcmtSZXAob3RoZXIpCi0gICAgICAgICAgICBpZiBzaGlmdCA+PSAwOgotICAgICAgICAgICAgICAgIGNvZWZmLCByZW1haW5kZXIgPSBkaXZtb2Qob3AxLmludCAqIDEwKipzaGlmdCwgb3AyLmludCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY29lZmYsIHJlbWFpbmRlciA9IGRpdm1vZChvcDEuaW50LCBvcDIuaW50ICogMTAqKi1zaGlmdCkKLSAgICAgICAgICAgIGlmIHJlbWFpbmRlcjoKLSAgICAgICAgICAgICAgICAjIHJlc3VsdCBpcyBub3QgZXhhY3Q7IGFkanVzdCB0byBlbnN1cmUgY29ycmVjdCByb3VuZGluZwotICAgICAgICAgICAgICAgIGlmIGNvZWZmICUgNSA9PSAwOgotICAgICAgICAgICAgICAgICAgICBjb2VmZiArPSAxCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgcmVzdWx0IGlzIGV4YWN0OyBnZXQgYXMgY2xvc2UgdG8gaWRlYWwgZXhwb25lbnQgYXMgcG9zc2libGUKLSAgICAgICAgICAgICAgICBpZGVhbF9leHAgPSBzZWxmLl9leHAgLSBvdGhlci5fZXhwCi0gICAgICAgICAgICAgICAgd2hpbGUgZXhwIDwgaWRlYWxfZXhwIGFuZCBjb2VmZiAlIDEwID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIGNvZWZmIC8vPSAxMAotICAgICAgICAgICAgICAgICAgICBleHAgKz0gMQotCi0gICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgc3RyKGNvZWZmKSwgZXhwKQotICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKLQotICAgIGRlZiBfZGl2aWRlKHNlbGYsIG90aGVyLCBjb250ZXh0KToKLSAgICAgICAgIiIiUmV0dXJuIChzZWxmIC8vIG90aGVyLCBzZWxmICUgb3RoZXIpLCB0byBjb250ZXh0LnByZWMgcHJlY2lzaW9uLgotCi0gICAgICAgIEFzc3VtZXMgdGhhdCBuZWl0aGVyIHNlbGYgbm9yIG90aGVyIGlzIGEgTmFOLCB0aGF0IHNlbGYgaXMgbm90Ci0gICAgICAgIGluZmluaXRlIGFuZCB0aGF0IG90aGVyIGlzIG5vbnplcm8uCi0gICAgICAgICIiIgotICAgICAgICBzaWduID0gc2VsZi5fc2lnbiBeIG90aGVyLl9zaWduCi0gICAgICAgIGlmIG90aGVyLl9pc2luZmluaXR5KCk6Ci0gICAgICAgICAgICBpZGVhbF9leHAgPSBzZWxmLl9leHAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlkZWFsX2V4cCA9IG1pbihzZWxmLl9leHAsIG90aGVyLl9leHApCi0KLSAgICAgICAgZXhwZGlmZiA9IHNlbGYuYWRqdXN0ZWQoKSAtIG90aGVyLmFkanVzdGVkKCkKLSAgICAgICAgaWYgbm90IHNlbGYgb3Igb3RoZXIuX2lzaW5maW5pdHkoKSBvciBleHBkaWZmIDw9IC0yOgotICAgICAgICAgICAgcmV0dXJuIChfZGVjX2Zyb21fdHJpcGxlKHNpZ24sICcwJywgMCksCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc2NhbGUoaWRlYWxfZXhwLCBjb250ZXh0LnJvdW5kaW5nKSkKLSAgICAgICAgaWYgZXhwZGlmZiA8PSBjb250ZXh0LnByZWM6Ci0gICAgICAgICAgICBvcDEgPSBfV29ya1JlcChzZWxmKQotICAgICAgICAgICAgb3AyID0gX1dvcmtSZXAob3RoZXIpCi0gICAgICAgICAgICBpZiBvcDEuZXhwID49IG9wMi5leHA6Ci0gICAgICAgICAgICAgICAgb3AxLmludCAqPSAxMCoqKG9wMS5leHAgLSBvcDIuZXhwKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvcDIuaW50ICo9IDEwKioob3AyLmV4cCAtIG9wMS5leHApCi0gICAgICAgICAgICBxLCByID0gZGl2bW9kKG9wMS5pbnQsIG9wMi5pbnQpCi0gICAgICAgICAgICBpZiBxIDwgMTAqKmNvbnRleHQucHJlYzoKLSAgICAgICAgICAgICAgICByZXR1cm4gKF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgc3RyKHEpLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgc3RyKHIpLCBpZGVhbF9leHApKQotCi0gICAgICAgICMgSGVyZSB0aGUgcXVvdGllbnQgaXMgdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGFibGUKLSAgICAgICAgYW5zID0gY29udGV4dC5fcmFpc2VfZXJyb3IoRGl2aXNpb25JbXBvc3NpYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVvdGllbnQgdG9vIGxhcmdlIGluIC8vLCAlIG9yIGRpdm1vZCcpCi0gICAgICAgIHJldHVybiBhbnMsIGFucwotCi0gICAgZGVmIF9fcnRydWVkaXZfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiU3dhcHMgc2VsZi9vdGhlciBhbmQgcmV0dXJucyBfX3RydWVkaXZfXy4iIiIKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKLSAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXIKLSAgICAgICAgcmV0dXJuIG90aGVyLl9fdHJ1ZWRpdl9fKHNlbGYsIGNvbnRleHQ9Y29udGV4dCkKLQotICAgIGRlZiBfX2Rpdm1vZF9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJuIChzZWxmIC8vIG90aGVyLCBzZWxmICUgb3RoZXIpCi0gICAgICAgICIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICByZXR1cm4gKGFucywgYW5zKQotCi0gICAgICAgIHNpZ24gPSBzZWxmLl9zaWduIF4gb3RoZXIuX3NpZ24KLSAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgotICAgICAgICAgICAgaWYgb3RoZXIuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICBhbnMgPSBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnZGl2bW9kKElORiwgSU5GKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFucywgYW5zCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAoX1NpZ25lZEluZmluaXR5W3NpZ25dLAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ0lORiAlIHgnKSkKLQotICAgICAgICBpZiBub3Qgb3RoZXI6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgICAgICBhbnMgPSBjb250ZXh0Ll9yYWlzZV9lcnJvcihEaXZpc2lvblVuZGVmaW5lZCwgJ2Rpdm1vZCgwLCAwKScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFucywgYW5zCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAoY29udGV4dC5fcmFpc2VfZXJyb3IoRGl2aXNpb25CeVplcm8sICd4IC8vIDAnLCBzaWduKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICd4ICUgMCcpKQotCi0gICAgICAgIHF1b3RpZW50LCByZW1haW5kZXIgPSBzZWxmLl9kaXZpZGUob3RoZXIsIGNvbnRleHQpCi0gICAgICAgIHJlbWFpbmRlciA9IHJlbWFpbmRlci5fZml4KGNvbnRleHQpCi0gICAgICAgIHJldHVybiBxdW90aWVudCwgcmVtYWluZGVyCi0KLSAgICBkZWYgX19yZGl2bW9kX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlN3YXBzIHNlbGYvb3RoZXIgYW5kIHJldHVybnMgX19kaXZtb2RfXy4iIiIKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKLSAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXIKLSAgICAgICAgcmV0dXJuIG90aGVyLl9fZGl2bW9kX18oc2VsZiwgY29udGV4dD1jb250ZXh0KQotCi0gICAgZGVmIF9fbW9kX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmICUgb3RoZXIKLSAgICAgICAgIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCi0gICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIG90aGVyCi0KLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCi0gICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCk6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ0lORiAlIHgnKQotICAgICAgICBlbGlmIG5vdCBvdGhlcjoKLSAgICAgICAgICAgIGlmIHNlbGY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICd4ICUgMCcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihEaXZpc2lvblVuZGVmaW5lZCwgJzAgJSAwJykKLQotICAgICAgICByZW1haW5kZXIgPSBzZWxmLl9kaXZpZGUob3RoZXIsIGNvbnRleHQpWzFdCi0gICAgICAgIHJlbWFpbmRlciA9IHJlbWFpbmRlci5fZml4KGNvbnRleHQpCi0gICAgICAgIHJldHVybiByZW1haW5kZXIKLQotICAgIGRlZiBfX3Jtb2RfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiU3dhcHMgc2VsZi9vdGhlciBhbmQgcmV0dXJucyBfX21vZF9fLiIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICByZXR1cm4gb3RoZXIuX19tb2RfXyhzZWxmLCBjb250ZXh0PWNvbnRleHQpCi0KLSAgICBkZWYgcmVtYWluZGVyX25lYXIoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIgotICAgICAgICBSZW1haW5kZXIgbmVhcmVzdCB0byAwLSAgYWJzKHJlbWFpbmRlci1uZWFyKSA8PSBvdGhlci8yCi0gICAgICAgICIiIgotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0KLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQotCi0gICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCi0gICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICAjIHNlbGYgPT0gKy8taW5maW5pdHkgLT4gSW52YWxpZE9wZXJhdGlvbgotICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCk6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVtYWluZGVyX25lYXIoaW5maW5pdHksIHgpJykKLQotICAgICAgICAjIG90aGVyID09IDAgLT4gZWl0aGVyIEludmFsaWRPcGVyYXRpb24gb3IgRGl2aXNpb25VbmRlZmluZWQKLSAgICAgICAgaWYgbm90IG90aGVyOgotICAgICAgICAgICAgaWYgc2VsZjoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbWFpbmRlcl9uZWFyKHgsIDApJykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uVW5kZWZpbmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVtYWluZGVyX25lYXIoMCwgMCknKQotCi0gICAgICAgICMgb3RoZXIgPSArLy1pbmZpbml0eSAtPiByZW1haW5kZXIgPSBzZWxmCi0gICAgICAgIGlmIG90aGVyLl9pc2luZmluaXR5KCk6Ci0gICAgICAgICAgICBhbnMgPSBEZWNpbWFsKHNlbGYpCi0gICAgICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKLQotICAgICAgICAjIHNlbGYgPSAwIC0+IHJlbWFpbmRlciA9IHNlbGYsIHdpdGggaWRlYWwgZXhwb25lbnQKLSAgICAgICAgaWRlYWxfZXhwb25lbnQgPSBtaW4oc2VsZi5fZXhwLCBvdGhlci5fZXhwKQotICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgJzAnLCBpZGVhbF9leHBvbmVudCkKLSAgICAgICAgICAgIHJldHVybiBhbnMuX2ZpeChjb250ZXh0KQotCi0gICAgICAgICMgY2F0Y2ggbW9zdCBjYXNlcyBvZiBsYXJnZSBvciBzbWFsbCBxdW90aWVudAotICAgICAgICBleHBkaWZmID0gc2VsZi5hZGp1c3RlZCgpIC0gb3RoZXIuYWRqdXN0ZWQoKQotICAgICAgICBpZiBleHBkaWZmID49IGNvbnRleHQucHJlYyArIDE6Ci0gICAgICAgICAgICAjIGV4cGRpZmYgPj0gcHJlYysxID0+IGFicyhzZWxmL290aGVyKSA+IDEwKipwcmVjCi0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoRGl2aXNpb25JbXBvc3NpYmxlKQotICAgICAgICBpZiBleHBkaWZmIDw9IC0yOgotICAgICAgICAgICAgIyBleHBkaWZmIDw9IC0yID0+IGFicyhzZWxmL290aGVyKSA8IDAuMQotICAgICAgICAgICAgYW5zID0gc2VsZi5fcmVzY2FsZShpZGVhbF9leHBvbmVudCwgY29udGV4dC5yb3VuZGluZykKLSAgICAgICAgICAgIHJldHVybiBhbnMuX2ZpeChjb250ZXh0KQotCi0gICAgICAgICMgYWRqdXN0IGJvdGggYXJndW1lbnRzIHRvIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQsIHRoZW4gZGl2aWRlCi0gICAgICAgIG9wMSA9IF9Xb3JrUmVwKHNlbGYpCi0gICAgICAgIG9wMiA9IF9Xb3JrUmVwKG90aGVyKQotICAgICAgICBpZiBvcDEuZXhwID49IG9wMi5leHA6Ci0gICAgICAgICAgICBvcDEuaW50ICo9IDEwKioob3AxLmV4cCAtIG9wMi5leHApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvcDIuaW50ICo9IDEwKioob3AyLmV4cCAtIG9wMS5leHApCi0gICAgICAgIHEsIHIgPSBkaXZtb2Qob3AxLmludCwgb3AyLmludCkKLSAgICAgICAgIyByZW1haW5kZXIgaXMgcioxMCoqaWRlYWxfZXhwb25lbnQ7IG90aGVyIGlzICsvLW9wMi5pbnQgKgotICAgICAgICAjIDEwKippZGVhbF9leHBvbmVudC4gICBBcHBseSBjb3JyZWN0aW9uIHRvIGVuc3VyZSB0aGF0Ci0gICAgICAgICMgYWJzKHJlbWFpbmRlcikgPD0gYWJzKG90aGVyKS8yCi0gICAgICAgIGlmIDIqciArIChxJjEpID4gb3AyLmludDoKLSAgICAgICAgICAgIHIgLT0gb3AyLmludAotICAgICAgICAgICAgcSArPSAxCi0KLSAgICAgICAgaWYgcSA+PSAxMCoqY29udGV4dC5wcmVjOgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uSW1wb3NzaWJsZSkKLQotICAgICAgICAjIHJlc3VsdCBoYXMgc2FtZSBzaWduIGFzIHNlbGYgdW5sZXNzIHIgaXMgbmVnYXRpdmUKLSAgICAgICAgc2lnbiA9IHNlbGYuX3NpZ24KLSAgICAgICAgaWYgciA8IDA6Ci0gICAgICAgICAgICBzaWduID0gMS1zaWduCi0gICAgICAgICAgICByID0gLXIKLQotICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHNpZ24sIHN0cihyKSwgaWRlYWxfZXhwb25lbnQpCi0gICAgICAgIHJldHVybiBhbnMuX2ZpeChjb250ZXh0KQotCi0gICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIic2VsZiAvLyBvdGhlciIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgotICAgICAgICAgICAgaWYgb3RoZXIuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ0lORiAvLyBJTkYnKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gX1NpZ25lZEluZmluaXR5W3NlbGYuX3NpZ24gXiBvdGhlci5fc2lnbl0KLQotICAgICAgICBpZiBub3Qgb3RoZXI6Ci0gICAgICAgICAgICBpZiBzZWxmOgotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihEaXZpc2lvbkJ5WmVybywgJ3ggLy8gMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpZ24gXiBvdGhlci5fc2lnbikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uVW5kZWZpbmVkLCAnMCAvLyAwJykKLQotICAgICAgICByZXR1cm4gc2VsZi5fZGl2aWRlKG90aGVyLCBjb250ZXh0KVswXQotCi0gICAgZGVmIF9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlN3YXBzIHNlbGYvb3RoZXIgYW5kIHJldHVybnMgX19mbG9vcmRpdl9fLiIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyKQotICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICByZXR1cm4gb3RoZXIuX19mbG9vcmRpdl9fKHNlbGYsIGNvbnRleHQ9Y29udGV4dCkKLQotICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6Ci0gICAgICAgICIiIkZsb2F0IHJlcHJlc2VudGF0aW9uLiIiIgotICAgICAgICBpZiBzZWxmLl9pc25hbigpOgotICAgICAgICAgICAgaWYgc2VsZi5pc19zbmFuKCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IGNvbnZlcnQgc2lnbmFsaW5nIE5hTiB0byBmbG9hdCIpCi0gICAgICAgICAgICBzID0gIi1uYW4iIGlmIHNlbGYuX3NpZ24gZWxzZSAibmFuIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcyA9IHN0cihzZWxmKQotICAgICAgICByZXR1cm4gZmxvYXQocykKLQotICAgIGRlZiBfX2ludF9fKHNlbGYpOgotICAgICAgICAiIiJDb252ZXJ0cyBzZWxmIHRvIGFuIGludCwgdHJ1bmNhdGluZyBpZiBuZWNlc3NhcnkuIiIiCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBpZiBzZWxmLl9pc25hbigpOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IE5hTiB0byBpbnRlZ2VyIikKLSAgICAgICAgICAgIGVsaWYgc2VsZi5faXNpbmZpbml0eSgpOgotICAgICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoIkNhbm5vdCBjb252ZXJ0IGluZmluaXR5IHRvIGludGVnZXIiKQotICAgICAgICBzID0gKC0xKSoqc2VsZi5fc2lnbgotICAgICAgICBpZiBzZWxmLl9leHAgPj0gMDoKLSAgICAgICAgICAgIHJldHVybiBzKmludChzZWxmLl9pbnQpKjEwKipzZWxmLl9leHAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzKmludChzZWxmLl9pbnRbOnNlbGYuX2V4cF0gb3IgJzAnKQotCi0gICAgX190cnVuY19fID0gX19pbnRfXwotCi0gICAgZGVmIHJlYWwoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmCi0gICAgcmVhbCA9IHByb3BlcnR5KHJlYWwpCi0KLSAgICBkZWYgaW1hZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIERlY2ltYWwoMCkKLSAgICBpbWFnID0gcHJvcGVydHkoaW1hZykKLQotICAgIGRlZiBjb25qdWdhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19jb21wbGV4X18oc2VsZik6Ci0gICAgICAgIHJldHVybiBjb21wbGV4KGZsb2F0KHNlbGYpKQotCi0gICAgZGVmIF9maXhfbmFuKHNlbGYsIGNvbnRleHQpOgotICAgICAgICAiIiJEZWNhcGl0YXRlIHRoZSBwYXlsb2FkIG9mIGEgTmFOIHRvIGZpdCB0aGUgY29udGV4dCIiIgotICAgICAgICBwYXlsb2FkID0gc2VsZi5faW50Ci0KLSAgICAgICAgIyBtYXhpbXVtIGxlbmd0aCBvZiBwYXlsb2FkIGlzIHByZWNpc2lvbiBpZiBjbGFtcD0wLAotICAgICAgICAjIHByZWNpc2lvbi0xIGlmIGNsYW1wPTEuCi0gICAgICAgIG1heF9wYXlsb2FkX2xlbiA9IGNvbnRleHQucHJlYyAtIGNvbnRleHQuY2xhbXAKLSAgICAgICAgaWYgbGVuKHBheWxvYWQpID4gbWF4X3BheWxvYWRfbGVuOgotICAgICAgICAgICAgcGF5bG9hZCA9IHBheWxvYWRbbGVuKHBheWxvYWQpLW1heF9wYXlsb2FkX2xlbjpdLmxzdHJpcCgnMCcpCi0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCBwYXlsb2FkLCBzZWxmLl9leHAsIFRydWUpCi0gICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCi0KLSAgICBkZWYgX2ZpeChzZWxmLCBjb250ZXh0KToKLSAgICAgICAgIiIiUm91bmQgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGtlZXAgc2VsZiB3aXRoaW4gcHJlYyBwcmVjaXNpb24uCi0KLSAgICAgICAgUm91bmRzIGFuZCBmaXhlcyB0aGUgZXhwb25lbnQuICBEb2VzIG5vdCByYWlzZSBvbiBhIHNOYU4uCi0KLSAgICAgICAgQXJndW1lbnRzOgotICAgICAgICBzZWxmIC0gRGVjaW1hbCBpbnN0YW5jZQotICAgICAgICBjb250ZXh0IC0gY29udGV4dCB1c2VkLgotICAgICAgICAiIiIKLQotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgaWYgc2VsZi5faXNuYW4oKToKLSAgICAgICAgICAgICAgICAjIGRlY2FwaXRhdGUgcGF5bG9hZCBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZml4X25hbihjb250ZXh0KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIHNlbGYgaXMgKy8tSW5maW5pdHk7IHJldHVybiB1bmFsdGVyZWQKLSAgICAgICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQotCi0gICAgICAgICMgaWYgc2VsZiBpcyB6ZXJvIHRoZW4gZXhwb25lbnQgc2hvdWxkIGJlIGJldHdlZW4gRXRpbnkgYW5kCi0gICAgICAgICMgRW1heCBpZiBjbGFtcD09MCwgYW5kIGJldHdlZW4gRXRpbnkgYW5kIEV0b3AgaWYgY2xhbXA9PTEuCi0gICAgICAgIEV0aW55ID0gY29udGV4dC5FdGlueSgpCi0gICAgICAgIEV0b3AgPSBjb250ZXh0LkV0b3AoKQotICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgIGV4cF9tYXggPSBbY29udGV4dC5FbWF4LCBFdG9wXVtjb250ZXh0LmNsYW1wXQotICAgICAgICAgICAgbmV3X2V4cCA9IG1pbihtYXgoc2VsZi5fZXhwLCBFdGlueSksIGV4cF9tYXgpCi0gICAgICAgICAgICBpZiBuZXdfZXhwICE9IHNlbGYuX2V4cDoKLSAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihDbGFtcGVkKQotICAgICAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sICcwJywgbmV3X2V4cCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKLQotICAgICAgICAjIGV4cF9taW4gaXMgdGhlIHNtYWxsZXN0IGFsbG93YWJsZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LAotICAgICAgICAjIGVxdWFsIHRvIG1heChzZWxmLmFkanVzdGVkKCktY29udGV4dC5wcmVjKzEsIEV0aW55KQotICAgICAgICBleHBfbWluID0gbGVuKHNlbGYuX2ludCkgKyBzZWxmLl9leHAgLSBjb250ZXh0LnByZWMKLSAgICAgICAgaWYgZXhwX21pbiA+IEV0b3A6Ci0gICAgICAgICAgICAjIG92ZXJmbG93OiBleHBfbWluID4gRXRvcCBpZmYgc2VsZi5hZGp1c3RlZCgpID4gRW1heAotICAgICAgICAgICAgYW5zID0gY29udGV4dC5fcmFpc2VfZXJyb3IoT3ZlcmZsb3csICdhYm92ZSBFbWF4Jywgc2VsZi5fc2lnbikKLSAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEluZXhhY3QpCi0gICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihSb3VuZGVkKQotICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgIHNlbGZfaXNfc3Vibm9ybWFsID0gZXhwX21pbiA8IEV0aW55Ci0gICAgICAgIGlmIHNlbGZfaXNfc3Vibm9ybWFsOgotICAgICAgICAgICAgZXhwX21pbiA9IEV0aW55Ci0KLSAgICAgICAgIyByb3VuZCBpZiBzZWxmIGhhcyB0b28gbWFueSBkaWdpdHMKLSAgICAgICAgaWYgc2VsZi5fZXhwIDwgZXhwX21pbjoKLSAgICAgICAgICAgIGRpZ2l0cyA9IGxlbihzZWxmLl9pbnQpICsgc2VsZi5fZXhwIC0gZXhwX21pbgotICAgICAgICAgICAgaWYgZGlnaXRzIDwgMDoKLSAgICAgICAgICAgICAgICBzZWxmID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMScsIGV4cF9taW4tMSkKLSAgICAgICAgICAgICAgICBkaWdpdHMgPSAwCi0gICAgICAgICAgICByb3VuZGluZ19tZXRob2QgPSBzZWxmLl9waWNrX3JvdW5kaW5nX2Z1bmN0aW9uW2NvbnRleHQucm91bmRpbmddCi0gICAgICAgICAgICBjaGFuZ2VkID0gcm91bmRpbmdfbWV0aG9kKHNlbGYsIGRpZ2l0cykKLSAgICAgICAgICAgIGNvZWZmID0gc2VsZi5faW50WzpkaWdpdHNdIG9yICcwJwotICAgICAgICAgICAgaWYgY2hhbmdlZCA+IDA6Ci0gICAgICAgICAgICAgICAgY29lZmYgPSBzdHIoaW50KGNvZWZmKSsxKQotICAgICAgICAgICAgICAgIGlmIGxlbihjb2VmZikgPiBjb250ZXh0LnByZWM6Ci0gICAgICAgICAgICAgICAgICAgIGNvZWZmID0gY29lZmZbOi0xXQotICAgICAgICAgICAgICAgICAgICBleHBfbWluICs9IDEKLQotICAgICAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZSByb3VuZGluZyBwdXNoZWQgdGhlIGV4cG9uZW50IG91dCBvZiByYW5nZQotICAgICAgICAgICAgaWYgZXhwX21pbiA+IEV0b3A6Ci0gICAgICAgICAgICAgICAgYW5zID0gY29udGV4dC5fcmFpc2VfZXJyb3IoT3ZlcmZsb3csICdhYm92ZSBFbWF4Jywgc2VsZi5fc2lnbikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCBjb2VmZiwgZXhwX21pbikKLQotICAgICAgICAgICAgIyByYWlzZSB0aGUgYXBwcm9wcmlhdGUgc2lnbmFscywgdGFraW5nIGNhcmUgdG8gcmVzcGVjdAotICAgICAgICAgICAgIyB0aGUgcHJlY2VkZW5jZSBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmljYXRpb24KLSAgICAgICAgICAgIGlmIGNoYW5nZWQgYW5kIHNlbGZfaXNfc3Vibm9ybWFsOgotICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFVuZGVyZmxvdykKLSAgICAgICAgICAgIGlmIHNlbGZfaXNfc3Vibm9ybWFsOgotICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFN1Ym5vcm1hbCkKLSAgICAgICAgICAgIGlmIGNoYW5nZWQ6Ci0gICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoSW5leGFjdCkKLSAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFJvdW5kZWQpCi0gICAgICAgICAgICBpZiBub3QgYW5zOgotICAgICAgICAgICAgICAgICMgcmFpc2UgQ2xhbXBlZCBvbiB1bmRlcmZsb3cgdG8gMAotICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKENsYW1wZWQpCi0gICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgaWYgc2VsZl9pc19zdWJub3JtYWw6Ci0gICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihTdWJub3JtYWwpCi0KLSAgICAgICAgIyBmb2xkIGRvd24gaWYgY2xhbXAgPT0gMSBhbmQgc2VsZiBoYXMgdG9vIGZldyBkaWdpdHMKLSAgICAgICAgaWYgY29udGV4dC5jbGFtcCA9PSAxIGFuZCBzZWxmLl9leHAgPiBFdG9wOgotICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoQ2xhbXBlZCkKLSAgICAgICAgICAgIHNlbGZfcGFkZGVkID0gc2VsZi5faW50ICsgJzAnKihzZWxmLl9leHAgLSBFdG9wKQotICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgc2VsZl9wYWRkZWQsIEV0b3ApCi0KLSAgICAgICAgIyBoZXJlIHNlbGYgd2FzIHJlcHJlc2VudGFibGUgdG8gYmVnaW4gd2l0aDsgcmV0dXJuIHVuY2hhbmdlZAotICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQotCi0gICAgIyBmb3IgZWFjaCBvZiB0aGUgcm91bmRpbmcgZnVuY3Rpb25zIGJlbG93OgotICAgICMgICBzZWxmIGlzIGEgZmluaXRlLCBub256ZXJvIERlY2ltYWwKLSAgICAjICAgcHJlYyBpcyBhbiBpbnRlZ2VyIHNhdGlzZnlpbmcgMCA8PSBwcmVjIDwgbGVuKHNlbGYuX2ludCkKLSAgICAjCi0gICAgIyBlYWNoIGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyIC0xLCAwLCBvciAxLCBhcyBmb2xsb3dzOgotICAgICMgICAxIGluZGljYXRlcyB0aGF0IHNlbGYgc2hvdWxkIGJlIHJvdW5kZWQgdXAgKGF3YXkgZnJvbSB6ZXJvKQotICAgICMgICAwIGluZGljYXRlcyB0aGF0IHNlbGYgc2hvdWxkIGJlIHRydW5jYXRlZCwgYW5kIHRoYXQgYWxsIHRoZQotICAgICMgICAgIGRpZ2l0cyB0byBiZSB0cnVuY2F0ZWQgYXJlIHplcm9zIChzbyB0aGUgdmFsdWUgaXMgdW5jaGFuZ2VkKQotICAgICMgIC0xIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBub256ZXJvIGRpZ2l0cyB0byBiZSB0cnVuY2F0ZWQKLQotICAgIGRlZiBfcm91bmRfZG93bihzZWxmLCBwcmVjKToKLSAgICAgICAgIiIiQWxzbyBrbm93biBhcyByb3VuZC10b3dhcmRzLTAsIHRydW5jYXRlLiIiIgotICAgICAgICBpZiBfYWxsX3plcm9zKHNlbGYuX2ludCwgcHJlYyk6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0KLSAgICBkZWYgX3JvdW5kX3VwKHNlbGYsIHByZWMpOgotICAgICAgICAiIiJSb3VuZHMgYXdheSBmcm9tIDAuIiIiCi0gICAgICAgIHJldHVybiAtc2VsZi5fcm91bmRfZG93bihwcmVjKQotCi0gICAgZGVmIF9yb3VuZF9oYWxmX3VwKHNlbGYsIHByZWMpOgotICAgICAgICAiIiJSb3VuZHMgNSB1cCAoYXdheSBmcm9tIDApIiIiCi0gICAgICAgIGlmIHNlbGYuX2ludFtwcmVjXSBpbiAnNTY3ODknOgotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZWxpZiBfYWxsX3plcm9zKHNlbGYuX2ludCwgcHJlYyk6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0KLSAgICBkZWYgX3JvdW5kX2hhbGZfZG93bihzZWxmLCBwcmVjKToKLSAgICAgICAgIiIiUm91bmQgNSBkb3duIiIiCi0gICAgICAgIGlmIF9leGFjdF9oYWxmKHNlbGYuX2ludCwgcHJlYyk6Ci0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yb3VuZF9oYWxmX3VwKHByZWMpCi0KLSAgICBkZWYgX3JvdW5kX2hhbGZfZXZlbihzZWxmLCBwcmVjKToKLSAgICAgICAgIiIiUm91bmQgNSB0byBldmVuLCByZXN0IHRvIG5lYXJlc3QuIiIiCi0gICAgICAgIGlmIF9leGFjdF9oYWxmKHNlbGYuX2ludCwgcHJlYykgYW5kIFwKLSAgICAgICAgICAgICAgICAocHJlYyA9PSAwIG9yIHNlbGYuX2ludFtwcmVjLTFdIGluICcwMjQ2OCcpOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcm91bmRfaGFsZl91cChwcmVjKQotCi0gICAgZGVmIF9yb3VuZF9jZWlsaW5nKHNlbGYsIHByZWMpOgotICAgICAgICAiIiJSb3VuZHMgdXAgKG5vdCBhd2F5IGZyb20gMCBpZiBuZWdhdGl2ZS4pIiIiCi0gICAgICAgIGlmIHNlbGYuX3NpZ246Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcm91bmRfZG93bihwcmVjKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIC1zZWxmLl9yb3VuZF9kb3duKHByZWMpCi0KLSAgICBkZWYgX3JvdW5kX2Zsb29yKHNlbGYsIHByZWMpOgotICAgICAgICAiIiJSb3VuZHMgZG93biAobm90IHRvd2FyZHMgMCBpZiBuZWdhdGl2ZSkiIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3NpZ246Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcm91bmRfZG93bihwcmVjKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIC1zZWxmLl9yb3VuZF9kb3duKHByZWMpCi0KLSAgICBkZWYgX3JvdW5kXzA1dXAoc2VsZiwgcHJlYyk6Ci0gICAgICAgICIiIlJvdW5kIGRvd24gdW5sZXNzIGRpZ2l0IHByZWMtMSBpcyAwIG9yIDUuIiIiCi0gICAgICAgIGlmIHByZWMgYW5kIHNlbGYuX2ludFtwcmVjLTFdIG5vdCBpbiAnMDUnOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JvdW5kX2Rvd24ocHJlYykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAtc2VsZi5fcm91bmRfZG93bihwcmVjKQotCi0gICAgX3BpY2tfcm91bmRpbmdfZnVuY3Rpb24gPSBkaWN0KAotICAgICAgICBST1VORF9ET1dOID0gX3JvdW5kX2Rvd24sCi0gICAgICAgIFJPVU5EX1VQID0gX3JvdW5kX3VwLAotICAgICAgICBST1VORF9IQUxGX1VQID0gX3JvdW5kX2hhbGZfdXAsCi0gICAgICAgIFJPVU5EX0hBTEZfRE9XTiA9IF9yb3VuZF9oYWxmX2Rvd24sCi0gICAgICAgIFJPVU5EX0hBTEZfRVZFTiA9IF9yb3VuZF9oYWxmX2V2ZW4sCi0gICAgICAgIFJPVU5EX0NFSUxJTkcgPSBfcm91bmRfY2VpbGluZywKLSAgICAgICAgUk9VTkRfRkxPT1IgPSBfcm91bmRfZmxvb3IsCi0gICAgICAgIFJPVU5EXzA1VVAgPSBfcm91bmRfMDV1cCwKLSAgICApCi0KLSAgICBkZWYgX19yb3VuZF9fKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJvdW5kIHNlbGYgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgb3IgdG8gYSBnaXZlbiBwcmVjaXNpb24uCi0KLSAgICAgICAgSWYgb25seSBvbmUgYXJndW1lbnQgaXMgc3VwcGxpZWQsIHJvdW5kIGEgZmluaXRlIERlY2ltYWwKLSAgICAgICAgaW5zdGFuY2Ugc2VsZiB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLiAgSWYgc2VsZiBpcyBpbmZpbml0ZSBvcgotICAgICAgICBhIE5hTiB0aGVuIGEgUHl0aG9uIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBJZiBzZWxmIGlzIGZpbml0ZQotICAgICAgICBhbmQgbGllcyBleGFjdGx5IGhhbGZ3YXkgYmV0d2VlbiB0d28gaW50ZWdlcnMgdGhlbiBpdCBpcwotICAgICAgICByb3VuZGVkIHRvIHRoZSBpbnRlZ2VyIHdpdGggZXZlbiBsYXN0IGRpZ2l0LgotCi0gICAgICAgID4+PiByb3VuZChEZWNpbWFsKCcxMjMuNDU2JykpCi0gICAgICAgIDEyMwotICAgICAgICA+Pj4gcm91bmQoRGVjaW1hbCgnLTQ1Ni43ODknKSkKLSAgICAgICAgLTQ1NwotICAgICAgICA+Pj4gcm91bmQoRGVjaW1hbCgnLTMuMCcpKQotICAgICAgICAtMwotICAgICAgICA+Pj4gcm91bmQoRGVjaW1hbCgnMi41JykpCi0gICAgICAgIDIKLSAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJzMuNScpKQotICAgICAgICA0Ci0gICAgICAgID4+PiByb3VuZChEZWNpbWFsKCdJbmYnKSkKLSAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgICAgICAgIC4uLgotICAgICAgICBPdmVyZmxvd0Vycm9yOiBjYW5ub3Qgcm91bmQgYW4gaW5maW5pdHkKLSAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJ05hTicpKQotICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgICAgICAgLi4uCi0gICAgICAgIFZhbHVlRXJyb3I6IGNhbm5vdCByb3VuZCBhIE5hTgotCi0gICAgICAgIElmIGEgc2Vjb25kIGFyZ3VtZW50IG4gaXMgc3VwcGxpZWQsIHNlbGYgaXMgcm91bmRlZCB0byBuCi0gICAgICAgIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHRoZSByb3VuZGluZyBtb2RlIGZvciB0aGUgY3VycmVudAotICAgICAgICBjb250ZXh0LgotCi0gICAgICAgIEZvciBhbiBpbnRlZ2VyIG4sIHJvdW5kKHNlbGYsIC1uKSBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8KLSAgICAgICAgc2VsZi5xdWFudGl6ZShEZWNpbWFsKCcxRW4nKSkuCi0KLSAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJzEyMy40NTYnKSwgMCkKLSAgICAgICAgRGVjaW1hbCgnMTIzJykKLSAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJzEyMy40NTYnKSwgMikKLSAgICAgICAgRGVjaW1hbCgnMTIzLjQ2JykKLSAgICAgICAgPj4+IHJvdW5kKERlY2ltYWwoJzEyMy40NTYnKSwgLTIpCi0gICAgICAgIERlY2ltYWwoJzFFKzInKQotICAgICAgICA+Pj4gcm91bmQoRGVjaW1hbCgnLUluZmluaXR5JyksIDM3KQotICAgICAgICBEZWNpbWFsKCdOYU4nKQotICAgICAgICA+Pj4gcm91bmQoRGVjaW1hbCgnc05hTjEyMycpLCAwKQotICAgICAgICBEZWNpbWFsKCdOYU4xMjMnKQotCi0gICAgICAgICIiIgotICAgICAgICBpZiBuIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyB0d28tYXJndW1lbnQgZm9ybTogdXNlIHRoZSBlcXVpdmFsZW50IHF1YW50aXplIGNhbGwKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG4sIGludCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdTZWNvbmQgYXJndW1lbnQgdG8gcm91bmQgc2hvdWxkIGJlIGludGVncmFsJykKLSAgICAgICAgICAgIGV4cCA9IF9kZWNfZnJvbV90cmlwbGUoMCwgJzEnLCAtbikKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnF1YW50aXplKGV4cCkKLQotICAgICAgICAjIG9uZS1hcmd1bWVudCBmb3JtCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBpZiBzZWxmLmlzX25hbigpOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbm5vdCByb3VuZCBhIE5hTiIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoImNhbm5vdCByb3VuZCBhbiBpbmZpbml0eSIpCi0gICAgICAgIHJldHVybiBpbnQoc2VsZi5fcmVzY2FsZSgwLCBST1VORF9IQUxGX0VWRU4pKQotCi0gICAgZGVmIF9fZmxvb3JfXyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBmbG9vciBvZiBzZWxmLCBhcyBhbiBpbnRlZ2VyLgotCi0gICAgICAgIEZvciBhIGZpbml0ZSBEZWNpbWFsIGluc3RhbmNlIHNlbGYsIHJldHVybiB0aGUgZ3JlYXRlc3QKLSAgICAgICAgaW50ZWdlciBuIHN1Y2ggdGhhdCBuIDw9IHNlbGYuICBJZiBzZWxmIGlzIGluZmluaXRlIG9yIGEgTmFOCi0gICAgICAgIHRoZW4gYSBQeXRob24gZXhjZXB0aW9uIGlzIHJhaXNlZC4KLQotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKLSAgICAgICAgICAgIGlmIHNlbGYuaXNfbmFuKCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2Fubm90IHJvdW5kIGEgTmFOIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigiY2Fubm90IHJvdW5kIGFuIGluZmluaXR5IikKLSAgICAgICAgcmV0dXJuIGludChzZWxmLl9yZXNjYWxlKDAsIFJPVU5EX0ZMT09SKSkKLQotICAgIGRlZiBfX2NlaWxfXyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBjZWlsaW5nIG9mIHNlbGYsIGFzIGFuIGludGVnZXIuCi0KLSAgICAgICAgRm9yIGEgZmluaXRlIERlY2ltYWwgaW5zdGFuY2Ugc2VsZiwgcmV0dXJuIHRoZSBsZWFzdCBpbnRlZ2VyIG4KLSAgICAgICAgc3VjaCB0aGF0IG4gPj0gc2VsZi4gIElmIHNlbGYgaXMgaW5maW5pdGUgb3IgYSBOYU4gdGhlbiBhCi0gICAgICAgIFB5dGhvbiBleGNlcHRpb24gaXMgcmFpc2VkLgotCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgaWYgc2VsZi5pc19uYW4oKToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW5ub3Qgcm91bmQgYSBOYU4iKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJjYW5ub3Qgcm91bmQgYW4gaW5maW5pdHkiKQotICAgICAgICByZXR1cm4gaW50KHNlbGYuX3Jlc2NhbGUoMCwgUk9VTkRfQ0VJTElORykpCi0KLSAgICBkZWYgZm1hKHNlbGYsIG90aGVyLCB0aGlyZCwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiRnVzZWQgbXVsdGlwbHktYWRkLgotCi0gICAgICAgIFJldHVybnMgc2VsZipvdGhlcit0aGlyZCB3aXRoIG5vIHJvdW5kaW5nIG9mIHRoZSBpbnRlcm1lZGlhdGUKLSAgICAgICAgcHJvZHVjdCBzZWxmKm90aGVyLgotCi0gICAgICAgIHNlbGYgYW5kIG90aGVyIGFyZSBtdWx0aXBsaWVkIHRvZ2V0aGVyLCB3aXRoIG5vIHJvdW5kaW5nIG9mCi0gICAgICAgIHRoZSByZXN1bHQuICBUaGUgdGhpcmQgb3BlcmFuZCBpcyB0aGVuIGFkZGVkIHRvIHRoZSByZXN1bHQsCi0gICAgICAgIGFuZCBhIHNpbmdsZSBmaW5hbCByb3VuZGluZyBpcyBwZXJmb3JtZWQuCi0gICAgICAgICIiIgotCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgdGhpcmQgPSBfY29udmVydF9vdGhlcih0aGlyZCwgcmFpc2VpdD1UcnVlKQotCi0gICAgICAgICMgY29tcHV0ZSBwcm9kdWN0OyByYWlzZSBJbnZhbGlkT3BlcmF0aW9uIGlmIGVpdGhlciBvcGVyYW5kIGlzCi0gICAgICAgICMgYSBzaWduYWxpbmcgTmFOIG9yIGlmIHRoZSBwcm9kdWN0IGlzIHplcm8gdGltZXMgaW5maW5pdHkuCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotICAgICAgICAgICAgaWYgc2VsZi5fZXhwID09ICdOJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ3NOYU4nLCBzZWxmKQotICAgICAgICAgICAgaWYgb3RoZXIuX2V4cCA9PSAnTic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICdzTmFOJywgb3RoZXIpCi0gICAgICAgICAgICBpZiBzZWxmLl9leHAgPT0gJ24nOgotICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBzZWxmCi0gICAgICAgICAgICBlbGlmIG90aGVyLl9leHAgPT0gJ24nOgotICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBvdGhlcgotICAgICAgICAgICAgZWxpZiBzZWxmLl9leHAgPT0gJ0YnOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvdGhlcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSU5GICogMCBpbiBmbWEnKQotICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBfU2lnbmVkSW5maW5pdHlbc2VsZi5fc2lnbiBeIG90aGVyLl9zaWduXQotICAgICAgICAgICAgZWxpZiBvdGhlci5fZXhwID09ICdGJzoKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCAqIElORiBpbiBmbWEnKQotICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBfU2lnbmVkSW5maW5pdHlbc2VsZi5fc2lnbiBeIG90aGVyLl9zaWduXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJvZHVjdCA9IF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiBeIG90aGVyLl9zaWduLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGludChzZWxmLl9pbnQpICogaW50KG90aGVyLl9pbnQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cCArIG90aGVyLl9leHApCi0KLSAgICAgICAgcmV0dXJuIHByb2R1Y3QuX19hZGRfXyh0aGlyZCwgY29udGV4dCkKLQotICAgIGRlZiBfcG93ZXJfbW9kdWxvKHNlbGYsIG90aGVyLCBtb2R1bG8sIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlRocmVlIGFyZ3VtZW50IHZlcnNpb24gb2YgX19wb3dfXyIiIgotCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCi0gICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIG90aGVyCi0gICAgICAgIG1vZHVsbyA9IF9jb252ZXJ0X290aGVyKG1vZHVsbykKLSAgICAgICAgaWYgbW9kdWxvIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIG1vZHVsbwotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICAjIGRlYWwgd2l0aCBOYU5zOiBpZiB0aGVyZSBhcmUgYW55IHNOYU5zIHRoZW4gZmlyc3Qgb25lIHdpbnMsCi0gICAgICAgICMgKGkuZS4gYmVoYXZpb3VyIGZvciBOYU5zIGlzIGlkZW50aWNhbCB0byB0aGF0IG9mIGZtYSkKLSAgICAgICAgc2VsZl9pc19uYW4gPSBzZWxmLl9pc25hbigpCi0gICAgICAgIG90aGVyX2lzX25hbiA9IG90aGVyLl9pc25hbigpCi0gICAgICAgIG1vZHVsb19pc19uYW4gPSBtb2R1bG8uX2lzbmFuKCkKLSAgICAgICAgaWYgc2VsZl9pc19uYW4gb3Igb3RoZXJfaXNfbmFuIG9yIG1vZHVsb19pc19uYW46Ci0gICAgICAgICAgICBpZiBzZWxmX2lzX25hbiA9PSAyOgotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnc05hTicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikKLSAgICAgICAgICAgIGlmIG90aGVyX2lzX25hbiA9PSAyOgotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLCAnc05hTicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIpCi0gICAgICAgICAgICBpZiBtb2R1bG9faXNfbmFuID09IDI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sICdzTmFOJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bG8pCi0gICAgICAgICAgICBpZiBzZWxmX2lzX25hbjoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZml4X25hbihjb250ZXh0KQotICAgICAgICAgICAgaWYgb3RoZXJfaXNfbmFuOgotICAgICAgICAgICAgICAgIHJldHVybiBvdGhlci5fZml4X25hbihjb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIG1vZHVsby5fZml4X25hbihjb250ZXh0KQotCi0gICAgICAgICMgY2hlY2sgaW5wdXRzOiB3ZSBhcHBseSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBQeXRob24ncyBwb3coKQotICAgICAgICBpZiBub3QgKHNlbGYuX2lzaW50ZWdlcigpIGFuZAotICAgICAgICAgICAgICAgIG90aGVyLl9pc2ludGVnZXIoKSBhbmQKLSAgICAgICAgICAgICAgICBtb2R1bG8uX2lzaW50ZWdlcigpKToKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3coKSAzcmQgYXJndW1lbnQgbm90IGFsbG93ZWQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmxlc3MgYWxsIGFyZ3VtZW50cyBhcmUgaW50ZWdlcnMnKQotICAgICAgICBpZiBvdGhlciA8IDA6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG93KCkgMm5kIGFyZ3VtZW50IGNhbm5vdCBiZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZ2F0aXZlIHdoZW4gM3JkIGFyZ3VtZW50IHNwZWNpZmllZCcpCi0gICAgICAgIGlmIG5vdCBtb2R1bG86Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG93KCkgM3JkIGFyZ3VtZW50IGNhbm5vdCBiZSAwJykKLQotICAgICAgICAjIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24gZm9yIGRlY2ltYWw6IHRoZSBtb2R1bHVzIG11c3QgYmUgbGVzcwotICAgICAgICAjIHRoYW4gMTAqKnByZWMgaW4gYWJzb2x1dGUgdmFsdWUKLSAgICAgICAgaWYgbW9kdWxvLmFkanVzdGVkKCkgPj0gY29udGV4dC5wcmVjOgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luc3VmZmljaWVudCBwcmVjaXNpb246IHBvdygpIDNyZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyZ3VtZW50IG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJlY2lzaW9uIGRpZ2l0cycpCi0KLSAgICAgICAgIyBkZWZpbmUgMCoqMCA9PSBOYU4sIGZvciBjb25zaXN0ZW5jeSB3aXRoIHR3by1hcmd1bWVudCBwb3cKLSAgICAgICAgIyAoZXZlbiB0aG91Z2ggaXQgaHVydHMhKQotICAgICAgICBpZiBub3Qgb3RoZXIgYW5kIG5vdCBzZWxmOgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0IGxlYXN0IG9uZSBvZiBwb3coKSAxc3QgYXJndW1lbnQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgMm5kIGFyZ3VtZW50IG11c3QgYmUgbm9uemVybyA7JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwKiowIGlzIG5vdCBkZWZpbmVkJykKLQotICAgICAgICAjIGNvbXB1dGUgc2lnbiBvZiByZXN1bHQKLSAgICAgICAgaWYgb3RoZXIuX2lzZXZlbigpOgotICAgICAgICAgICAgc2lnbiA9IDAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNpZ24gPSBzZWxmLl9zaWduCi0KLSAgICAgICAgIyBjb252ZXJ0IG1vZHVsbyB0byBhIFB5dGhvbiBpbnRlZ2VyLCBhbmQgc2VsZiBhbmQgb3RoZXIgdG8KLSAgICAgICAgIyBEZWNpbWFsIGludGVnZXJzIChpLmUuIGZvcmNlIHRoZWlyIGV4cG9uZW50cyB0byBiZSA+PSAwKQotICAgICAgICBtb2R1bG8gPSBhYnMoaW50KG1vZHVsbykpCi0gICAgICAgIGJhc2UgPSBfV29ya1JlcChzZWxmLnRvX2ludGVncmFsX3ZhbHVlKCkpCi0gICAgICAgIGV4cG9uZW50ID0gX1dvcmtSZXAob3RoZXIudG9faW50ZWdyYWxfdmFsdWUoKSkKLQotICAgICAgICAjIGNvbXB1dGUgcmVzdWx0IHVzaW5nIGludGVnZXIgcG93KCkKLSAgICAgICAgYmFzZSA9IChiYXNlLmludCAlIG1vZHVsbyAqIHBvdygxMCwgYmFzZS5leHAsIG1vZHVsbykpICUgbW9kdWxvCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGV4cG9uZW50LmV4cCk6Ci0gICAgICAgICAgICBiYXNlID0gcG93KGJhc2UsIDEwLCBtb2R1bG8pCi0gICAgICAgIGJhc2UgPSBwb3coYmFzZSwgZXhwb25lbnQuaW50LCBtb2R1bG8pCi0KLSAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgc3RyKGJhc2UpLCAwKQotCi0gICAgZGVmIF9wb3dlcl9leGFjdChzZWxmLCBvdGhlciwgcCk6Ci0gICAgICAgICIiIkF0dGVtcHQgdG8gY29tcHV0ZSBzZWxmKipvdGhlciBleGFjdGx5LgotCi0gICAgICAgIEdpdmVuIERlY2ltYWxzIHNlbGYgYW5kIG90aGVyIGFuZCBhbiBpbnRlZ2VyIHAsIGF0dGVtcHQgdG8KLSAgICAgICAgY29tcHV0ZSBhbiBleGFjdCByZXN1bHQgZm9yIHRoZSBwb3dlciBzZWxmKipvdGhlciwgd2l0aCBwCi0gICAgICAgIGRpZ2l0cyBvZiBwcmVjaXNpb24uICBSZXR1cm4gTm9uZSBpZiBzZWxmKipvdGhlciBpcyBub3QKLSAgICAgICAgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIHAgZGlnaXRzLgotCi0gICAgICAgIEFzc3VtZXMgdGhhdCBlbGltaW5hdGlvbiBvZiBzcGVjaWFsIGNhc2VzIGhhcyBhbHJlYWR5IGJlZW4KLSAgICAgICAgcGVyZm9ybWVkOiBzZWxmIGFuZCBvdGhlciBtdXN0IGJvdGggYmUgbm9uc3BlY2lhbDsgc2VsZiBtdXN0Ci0gICAgICAgIGJlIHBvc2l0aXZlIGFuZCBub3QgbnVtZXJpY2FsbHkgZXF1YWwgdG8gMTsgb3RoZXIgbXVzdCBiZQotICAgICAgICBub256ZXJvLiAgRm9yIGVmZmljaWVuY3ksIG90aGVyLl9leHAgc2hvdWxkIG5vdCBiZSB0b28gbGFyZ2UsCi0gICAgICAgIHNvIHRoYXQgMTAqKmFicyhvdGhlci5fZXhwKSBpcyBhIGZlYXNpYmxlIGNhbGN1bGF0aW9uLiIiIgotCi0gICAgICAgICMgSW4gdGhlIGNvbW1lbnRzIGJlbG93LCB3ZSB3cml0ZSB4IGZvciB0aGUgdmFsdWUgb2Ygc2VsZiBhbmQgeSBmb3IgdGhlCi0gICAgICAgICMgdmFsdWUgb2Ygb3RoZXIuICBXcml0ZSB4ID0geGMqMTAqKnhlIGFuZCBhYnMoeSkgPSB5YyoxMCoqeWUsIHdpdGggeGMKLSAgICAgICAgIyBhbmQgeWMgcG9zaXRpdmUgaW50ZWdlcnMgbm90IGRpdmlzaWJsZSBieSAxMC4KLQotICAgICAgICAjIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gaWRlbnRpZnkgdGhlICpmYWlsdXJlKgotICAgICAgICAjIG9mIHgqKnkgdG8gYmUgZXhhY3RseSByZXByZXNlbnRhYmxlIHdpdGggYXMgbGl0dGxlIGVmZm9ydCBhcwotICAgICAgICAjIHBvc3NpYmxlLiAgU28gd2UgbG9vayBmb3IgY2hlYXAgYW5kIGVhc3kgdGVzdHMgdGhhdAotICAgICAgICAjIGVsaW1pbmF0ZSB0aGUgcG9zc2liaWxpdHkgb2YgeCoqeSBiZWluZyBleGFjdC4gIE9ubHkgaWYgYWxsCi0gICAgICAgICMgdGhlc2UgdGVzdHMgYXJlIHBhc3NlZCBkbyB3ZSBnbyBvbiB0byBhY3R1YWxseSBjb21wdXRlIHgqKnkuCi0KLSAgICAgICAgIyBIZXJlJ3MgdGhlIG1haW4gaWRlYS4gIEV4cHJlc3MgeSBhcyBhIHJhdGlvbmFsIG51bWJlciBtL24sIHdpdGggbSBhbmQKLSAgICAgICAgIyBuIHJlbGF0aXZlbHkgcHJpbWUgYW5kIG4+MC4gIFRoZW4gZm9yIHgqKnkgdG8gYmUgZXhhY3RseQotICAgICAgICAjIHJlcHJlc2VudGFibGUgKGF0ICphbnkqIHByZWNpc2lvbiksIHhjIG11c3QgYmUgdGhlIG50aCBwb3dlciBvZiBhCi0gICAgICAgICMgcG9zaXRpdmUgaW50ZWdlciBhbmQgeGUgbXVzdCBiZSBkaXZpc2libGUgYnkgbi4gIElmIHkgaXMgbmVnYXRpdmUKLSAgICAgICAgIyB0aGVuIGFkZGl0aW9uYWxseSB4YyBtdXN0IGJlIGEgcG93ZXIgb2YgZWl0aGVyIDIgb3IgNSwgaGVuY2UgYSBwb3dlcgotICAgICAgICAjIG9mIDIqKm4gb3IgNSoqbi4KLSAgICAgICAgIwotICAgICAgICAjIFRoZXJlJ3MgYSBsaW1pdCB0byBob3cgc21hbGwgfHl8IGNhbiBiZTogaWYgeT1tL24gYXMgYWJvdmUKLSAgICAgICAgIyB0aGVuOgotICAgICAgICAjCi0gICAgICAgICMgICgxKSBpZiB4YyAhPSAxIHRoZW4gZm9yIHRoZSByZXN1bHQgdG8gYmUgcmVwcmVzZW50YWJsZSB3ZQotICAgICAgICAjICAgICAgbmVlZCB4YyoqKDEvbikgPj0gMiwgYW5kIGhlbmNlIGFsc28geGMqKnx5fCA+PSAyLiAgU28KLSAgICAgICAgIyAgICAgIGlmIHx5fCA8PSAxL25iaXRzKHhjKSB0aGVuIHhjIDwgMioqbmJpdHMoeGMpIDw9Ci0gICAgICAgICMgICAgICAyKiooMS98eXwpLCBoZW5jZSB4YyoqfHl8IDwgMiBhbmQgdGhlIHJlc3VsdCBpcyBub3QKLSAgICAgICAgIyAgICAgIHJlcHJlc2VudGFibGUuCi0gICAgICAgICMKLSAgICAgICAgIyAgKDIpIGlmIHhlICE9IDAsIHx4ZXwqKDEvbikgPj0gMSwgc28gfHhlfCp8eXwgPj0gMS4gIEhlbmNlIGlmCi0gICAgICAgICMgICAgICB8eXwgPCAxL3x4ZXwgdGhlbiB0aGUgcmVzdWx0IGlzIG5vdCByZXByZXNlbnRhYmxlLgotICAgICAgICAjCi0gICAgICAgICMgTm90ZSB0aGF0IHNpbmNlIHggaXMgbm90IGVxdWFsIHRvIDEsIGF0IGxlYXN0IG9uZSBvZiAoMSkgYW5kCi0gICAgICAgICMgKDIpIG11c3QgYXBwbHkuICBOb3cgfHl8IDwgMS9uYml0cyh4YykgaWZmIHx5Y3wqbmJpdHMoeGMpIDwKLSAgICAgICAgIyAxMCoqLXllIGlmZiBsZW4oc3RyKHx5Y3wqbmJpdHMoeGMpKSA8PSAteWUuCi0gICAgICAgICMKLSAgICAgICAgIyBUaGVyZSdzIGFsc28gYSBsaW1pdCB0byBob3cgbGFyZ2UgeSBjYW4gYmUsIGF0IGxlYXN0IGlmIGl0J3MKLSAgICAgICAgIyBwb3NpdGl2ZTogdGhlIG5vcm1hbGl6ZWQgcmVzdWx0IHdpbGwgaGF2ZSBjb2VmZmljaWVudCB4YyoqeSwKLSAgICAgICAgIyBzbyBpZiBpdCdzIHJlcHJlc2VudGFibGUgdGhlbiB4YyoqeSA8IDEwKipwLCBhbmQgeSA8Ci0gICAgICAgICMgcC9sb2cxMCh4YykuICBIZW5jZSBpZiB5KmxvZzEwKHhjKSA+PSBwIHRoZW4gdGhlIHJlc3VsdCBpcwotICAgICAgICAjIG5vdCBleGFjdGx5IHJlcHJlc2VudGFibGUuCi0KLSAgICAgICAgIyBpZiBsZW4oc3RyKGFicyh5Yyp4ZSkpIDw9IC15ZSB0aGVuIGFicyh5Yyp4ZSkgPCAxMCoqLXllLAotICAgICAgICAjIHNvIHx5fCA8IDEveGUgYW5kIHRoZSByZXN1bHQgaXMgbm90IHJlcHJlc2VudGFibGUuCi0gICAgICAgICMgU2ltaWxhcmx5LCBsZW4oc3RyKGFicyh5YykqeGNfYml0cykpIDw9IC15ZSBpbXBsaWVzIHx5fAotICAgICAgICAjIDwgMS9uYml0cyh4YykuCi0KLSAgICAgICAgeCA9IF9Xb3JrUmVwKHNlbGYpCi0gICAgICAgIHhjLCB4ZSA9IHguaW50LCB4LmV4cAotICAgICAgICB3aGlsZSB4YyAlIDEwID09IDA6Ci0gICAgICAgICAgICB4YyAvLz0gMTAKLSAgICAgICAgICAgIHhlICs9IDEKLQotICAgICAgICB5ID0gX1dvcmtSZXAob3RoZXIpCi0gICAgICAgIHljLCB5ZSA9IHkuaW50LCB5LmV4cAotICAgICAgICB3aGlsZSB5YyAlIDEwID09IDA6Ci0gICAgICAgICAgICB5YyAvLz0gMTAKLSAgICAgICAgICAgIHllICs9IDEKLQotICAgICAgICAjIGNhc2Ugd2hlcmUgeGMgPT0gMTogcmVzdWx0IGlzIDEwKiooeGUqeSksIHdpdGggeGUqeQotICAgICAgICAjIHJlcXVpcmVkIHRvIGJlIGFuIGludGVnZXIKLSAgICAgICAgaWYgeGMgPT0gMToKLSAgICAgICAgICAgIHhlICo9IHljCi0gICAgICAgICAgICAjIHJlc3VsdCBpcyBub3cgMTAqKih4ZSAqIDEwKip5ZSk7ICB4ZSAqIDEwKip5ZSBtdXN0IGJlIGludGVncmFsCi0gICAgICAgICAgICB3aGlsZSB4ZSAlIDEwID09IDA6Ci0gICAgICAgICAgICAgICAgeGUgLy89IDEwCi0gICAgICAgICAgICAgICAgeWUgKz0gMQotICAgICAgICAgICAgaWYgeWUgPCAwOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBleHBvbmVudCA9IHhlICogMTAqKnllCi0gICAgICAgICAgICBpZiB5LnNpZ24gPT0gMToKLSAgICAgICAgICAgICAgICBleHBvbmVudCA9IC1leHBvbmVudAotICAgICAgICAgICAgIyBpZiBvdGhlciBpcyBhIG5vbm5lZ2F0aXZlIGludGVnZXIsIHVzZSBpZGVhbCBleHBvbmVudAotICAgICAgICAgICAgaWYgb3RoZXIuX2lzaW50ZWdlcigpIGFuZCBvdGhlci5fc2lnbiA9PSAwOgotICAgICAgICAgICAgICAgIGlkZWFsX2V4cG9uZW50ID0gc2VsZi5fZXhwKmludChvdGhlcikKLSAgICAgICAgICAgICAgICB6ZXJvcyA9IG1pbihleHBvbmVudC1pZGVhbF9leHBvbmVudCwgcC0xKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB6ZXJvcyA9IDAKLSAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsICcxJyArICcwJyp6ZXJvcywgZXhwb25lbnQtemVyb3MpCi0KLSAgICAgICAgIyBjYXNlIHdoZXJlIHkgaXMgbmVnYXRpdmU6IHhjIG11c3QgYmUgZWl0aGVyIGEgcG93ZXIKLSAgICAgICAgIyBvZiAyIG9yIGEgcG93ZXIgb2YgNS4KLSAgICAgICAgaWYgeS5zaWduID09IDE6Ci0gICAgICAgICAgICBsYXN0X2RpZ2l0ID0geGMgJSAxMAotICAgICAgICAgICAgaWYgbGFzdF9kaWdpdCBpbiAoMiw0LDYsOCk6Ci0gICAgICAgICAgICAgICAgIyBxdWljayB0ZXN0IGZvciBwb3dlciBvZiAyCi0gICAgICAgICAgICAgICAgaWYgeGMgJiAteGMgIT0geGM6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgIyBub3cgeGMgaXMgYSBwb3dlciBvZiAyOyBlIGlzIGl0cyBleHBvbmVudAotICAgICAgICAgICAgICAgIGUgPSBfbmJpdHMoeGMpLTEKLQotICAgICAgICAgICAgICAgICMgV2Ugbm93IGhhdmU6Ci0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgICB4ID0gMioqZSAqIDEwKip4ZSwgZSA+IDAsIGFuZCB5IDwgMC4KLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyBUaGUgZXhhY3QgcmVzdWx0IGlzOgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjICAgeCoqeSA9IDUqKigtZSp5KSAqIDEwKiooZSp5ICsgeGUqeSkKLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyBwcm92aWRlZCB0aGF0IGJvdGggZSp5IGFuZCB4ZSp5IGFyZSBpbnRlZ2Vycy4gIE5vdGUgdGhhdCBpZgotICAgICAgICAgICAgICAgICMgNSoqKC1lKnkpID49IDEwKipwLCB0aGVuIHRoZSByZXN1bHQgY2FuJ3QgYmUgZXhwcmVzc2VkCi0gICAgICAgICAgICAgICAgIyBleGFjdGx5IHdpdGggcCBkaWdpdHMgb2YgcHJlY2lzaW9uLgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIFVzaW5nIHRoZSBhYm92ZSwgd2UgY2FuIGd1YXJkIGFnYWluc3QgbGFyZ2UgdmFsdWVzIG9mIHllLgotICAgICAgICAgICAgICAgICMgOTMvNjUgaXMgYW4gdXBwZXIgYm91bmQgZm9yIGxvZygxMCkvbG9nKDUpLCBzbyBpZgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjICAgeWUgPj0gbGVuKHN0cig5MypwLy82NSkpCi0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgdGhlbgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjICAgLWUqeSA+PSAteSA+PSAxMCoqeWUgPiA5MypwLzY1ID4gcCpsb2coMTApL2xvZyg1KSwKLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyBzbyA1KiooLWUqeSkgPj0gMTAqKnAsIGFuZCB0aGUgY29lZmZpY2llbnQgb2YgdGhlIHJlc3VsdAotICAgICAgICAgICAgICAgICMgY2FuJ3QgYmUgZXhwcmVzc2VkIGluIHAgZGlnaXRzLgotCi0gICAgICAgICAgICAgICAgIyBlbWF4ID49IGxhcmdlc3QgZSBzdWNoIHRoYXQgNSoqZSA8IDEwKipwLgotICAgICAgICAgICAgICAgIGVtYXggPSBwKjkzLy82NQotICAgICAgICAgICAgICAgIGlmIHllID49IGxlbihzdHIoZW1heCkpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgIyBGaW5kIC1lKnkgYW5kIC14ZSp5OyBib3RoIG11c3QgYmUgaW50ZWdlcnMKLSAgICAgICAgICAgICAgICBlID0gX2RlY2ltYWxfbHNoaWZ0X2V4YWN0KGUgKiB5YywgeWUpCi0gICAgICAgICAgICAgICAgeGUgPSBfZGVjaW1hbF9sc2hpZnRfZXhhY3QoeGUgKiB5YywgeWUpCi0gICAgICAgICAgICAgICAgaWYgZSBpcyBOb25lIG9yIHhlIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICBpZiBlID4gZW1heDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgICAgICB4YyA9IDUqKmUKLQotICAgICAgICAgICAgZWxpZiBsYXN0X2RpZ2l0ID09IDU6Ci0gICAgICAgICAgICAgICAgIyBlID49IGxvZ181KHhjKSBpZiB4YyBpcyBhIHBvd2VyIG9mIDU7IHdlIGhhdmUKLSAgICAgICAgICAgICAgICAjIGVxdWFsaXR5IGFsbCB0aGUgd2F5IHVwIHRvIHhjPTUqKjI2NTgKLSAgICAgICAgICAgICAgICBlID0gX25iaXRzKHhjKSoyOC8vNjUKLSAgICAgICAgICAgICAgICB4YywgcmVtYWluZGVyID0gZGl2bW9kKDUqKmUsIHhjKQotICAgICAgICAgICAgICAgIGlmIHJlbWFpbmRlcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgICAgICB3aGlsZSB4YyAlIDUgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgeGMgLy89IDUKLSAgICAgICAgICAgICAgICAgICAgZSAtPSAxCi0KLSAgICAgICAgICAgICAgICAjIEd1YXJkIGFnYWluc3QgbGFyZ2UgdmFsdWVzIG9mIHllLCB1c2luZyB0aGUgc2FtZSBsb2dpYyBhcyBpbgotICAgICAgICAgICAgICAgICMgdGhlICd4YyBpcyBhIHBvd2VyIG9mIDInIGJyYW5jaC4gIDEwLzMgaXMgYW4gdXBwZXIgYm91bmQgZm9yCi0gICAgICAgICAgICAgICAgIyBsb2coMTApL2xvZygyKS4KLSAgICAgICAgICAgICAgICBlbWF4ID0gcCoxMC8vMwotICAgICAgICAgICAgICAgIGlmIHllID49IGxlbihzdHIoZW1heCkpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgZSA9IF9kZWNpbWFsX2xzaGlmdF9leGFjdChlICogeWMsIHllKQotICAgICAgICAgICAgICAgIHhlID0gX2RlY2ltYWxfbHNoaWZ0X2V4YWN0KHhlICogeWMsIHllKQotICAgICAgICAgICAgICAgIGlmIGUgaXMgTm9uZSBvciB4ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgaWYgZSA+IGVtYXg6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgeGMgPSAyKiplCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgIGlmIHhjID49IDEwKipwOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICB4ZSA9IC1lLXhlCi0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZSgwLCBzdHIoeGMpLCB4ZSkKLQotICAgICAgICAjIG5vdyB5IGlzIHBvc2l0aXZlOyBmaW5kIG0gYW5kIG4gc3VjaCB0aGF0IHkgPSBtL24KLSAgICAgICAgaWYgeWUgPj0gMDoKLSAgICAgICAgICAgIG0sIG4gPSB5YyoxMCoqeWUsIDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHhlICE9IDAgYW5kIGxlbihzdHIoYWJzKHljKnhlKSkpIDw9IC15ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgeGNfYml0cyA9IF9uYml0cyh4YykKLSAgICAgICAgICAgIGlmIHhjICE9IDEgYW5kIGxlbihzdHIoYWJzKHljKSp4Y19iaXRzKSkgPD0gLXllOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBtLCBuID0geWMsIDEwKiooLXllKQotICAgICAgICAgICAgd2hpbGUgbSAlIDIgPT0gbiAlIDIgPT0gMDoKLSAgICAgICAgICAgICAgICBtIC8vPSAyCi0gICAgICAgICAgICAgICAgbiAvLz0gMgotICAgICAgICAgICAgd2hpbGUgbSAlIDUgPT0gbiAlIDUgPT0gMDoKLSAgICAgICAgICAgICAgICBtIC8vPSA1Ci0gICAgICAgICAgICAgICAgbiAvLz0gNQotCi0gICAgICAgICMgY29tcHV0ZSBudGggcm9vdCBvZiB4YyoxMCoqeGUKLSAgICAgICAgaWYgbiA+IDE6Ci0gICAgICAgICAgICAjIGlmIDEgPCB4YyA8IDIqKm4gdGhlbiB4YyBpc24ndCBhbiBudGggcG93ZXIKLSAgICAgICAgICAgIGlmIHhjICE9IDEgYW5kIHhjX2JpdHMgPD0gbjoKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICB4ZSwgcmVtID0gZGl2bW9kKHhlLCBuKQotICAgICAgICAgICAgaWYgcmVtICE9IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgIyBjb21wdXRlIG50aCByb290IG9mIHhjIHVzaW5nIE5ld3RvbidzIG1ldGhvZAotICAgICAgICAgICAgYSA9IDEgPDwgLSgtX25iaXRzKHhjKS8vbikgIyBpbml0aWFsIGVzdGltYXRlCi0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHEsIHIgPSBkaXZtb2QoeGMsIGEqKihuLTEpKQotICAgICAgICAgICAgICAgIGlmIGEgPD0gcToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBhID0gKGEqKG4tMSkgKyBxKS8vbgotICAgICAgICAgICAgaWYgbm90IChhID09IHEgYW5kIHIgPT0gMCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHhjID0gYQotCi0gICAgICAgICMgbm93IHhjKjEwKip4ZSBpcyB0aGUgbnRoIHJvb3Qgb2YgdGhlIG9yaWdpbmFsIHhjKjEwKip4ZQotICAgICAgICAjIGNvbXB1dGUgbXRoIHBvd2VyIG9mIHhjKjEwKip4ZQotCi0gICAgICAgICMgaWYgbSA+IHAqMTAwLy9fbG9nMTBfbGIoeGMpIHRoZW4gbSA+IHAvbG9nMTAoeGMpLCBoZW5jZSB4YyoqbSA+Ci0gICAgICAgICMgMTAqKnAgYW5kIHRoZSByZXN1bHQgaXMgbm90IHJlcHJlc2VudGFibGUuCi0gICAgICAgIGlmIHhjID4gMSBhbmQgbSA+IHAqMTAwLy9fbG9nMTBfbGIoeGMpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgeGMgPSB4YyoqbQotICAgICAgICB4ZSAqPSBtCi0gICAgICAgIGlmIHhjID4gMTAqKnA6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICMgYnkgdGhpcyBwb2ludCB0aGUgcmVzdWx0ICppcyogZXhhY3RseSByZXByZXNlbnRhYmxlCi0gICAgICAgICMgYWRqdXN0IHRoZSBleHBvbmVudCB0byBnZXQgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIGlkZWFsCi0gICAgICAgICMgZXhwb25lbnQsIGlmIG5lY2Vzc2FyeQotICAgICAgICBzdHJfeGMgPSBzdHIoeGMpCi0gICAgICAgIGlmIG90aGVyLl9pc2ludGVnZXIoKSBhbmQgb3RoZXIuX3NpZ24gPT0gMDoKLSAgICAgICAgICAgIGlkZWFsX2V4cG9uZW50ID0gc2VsZi5fZXhwKmludChvdGhlcikKLSAgICAgICAgICAgIHplcm9zID0gbWluKHhlLWlkZWFsX2V4cG9uZW50LCBwLWxlbihzdHJfeGMpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgemVyb3MgPSAwCi0gICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsIHN0cl94YysnMCcqemVyb3MsIHhlLXplcm9zKQotCi0gICAgZGVmIF9fcG93X18oc2VsZiwgb3RoZXIsIG1vZHVsbz1Ob25lLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm4gc2VsZiAqKiBvdGhlciBbICUgbW9kdWxvXS4KLQotICAgICAgICBXaXRoIHR3byBhcmd1bWVudHMsIGNvbXB1dGUgc2VsZioqb3RoZXIuCi0KLSAgICAgICAgV2l0aCB0aHJlZSBhcmd1bWVudHMsIGNvbXB1dGUgKHNlbGYqKm90aGVyKSAlIG1vZHVsby4gIEZvciB0aGUKLSAgICAgICAgdGhyZWUgYXJndW1lbnQgZm9ybSwgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgb24gdGhlCi0gICAgICAgIGFyZ3VtZW50cyBob2xkOgotCi0gICAgICAgICAtIGFsbCB0aHJlZSBhcmd1bWVudHMgbXVzdCBiZSBpbnRlZ3JhbAotICAgICAgICAgLSBvdGhlciBtdXN0IGJlIG5vbm5lZ2F0aXZlCi0gICAgICAgICAtIGVpdGhlciBzZWxmIG9yIG90aGVyIChvciBib3RoKSBtdXN0IGJlIG5vbnplcm8KLSAgICAgICAgIC0gbW9kdWxvIG11c3QgYmUgbm9uemVybyBhbmQgbXVzdCBoYXZlIGF0IG1vc3QgcCBkaWdpdHMsCi0gICAgICAgICAgIHdoZXJlIHAgaXMgdGhlIGNvbnRleHQgcHJlY2lzaW9uLgotCi0gICAgICAgIElmIGFueSBvZiB0aGVzZSByZXN0cmljdGlvbnMgaXMgdmlvbGF0ZWQgdGhlIEludmFsaWRPcGVyYXRpb24KLSAgICAgICAgZmxhZyBpcyByYWlzZWQuCi0KLSAgICAgICAgVGhlIHJlc3VsdCBvZiBwb3coc2VsZiwgb3RoZXIsIG1vZHVsbykgaXMgaWRlbnRpY2FsIHRvIHRoZQotICAgICAgICByZXN1bHQgdGhhdCB3b3VsZCBiZSBvYnRhaW5lZCBieSBjb21wdXRpbmcgKHNlbGYqKm90aGVyKSAlCi0gICAgICAgIG1vZHVsbyB3aXRoIHVuYm91bmRlZCBwcmVjaXNpb24sIGJ1dCBpcyBjb21wdXRlZCBtb3JlCi0gICAgICAgIGVmZmljaWVudGx5LiAgSXQgaXMgYWx3YXlzIGV4YWN0LgotICAgICAgICAiIiIKLQotICAgICAgICBpZiBtb2R1bG8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG93ZXJfbW9kdWxvKG90aGVyLCBtb2R1bG8sIGNvbnRleHQpCi0KLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKLSAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gb3RoZXIKLQotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0KLSAgICAgICAgIyBlaXRoZXIgYXJndW1lbnQgaXMgYSBOYU4gPT4gcmVzdWx0IGlzIE5hTgotICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgIyAwKiowID0gTmFOICghKSwgeCoqMCA9IDEgZm9yIG5vbnplcm8geCAoaW5jbHVkaW5nICsvLUluZmluaXR5KQotICAgICAgICBpZiBub3Qgb3RoZXI6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJzAgKiogMCcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBfT25lCi0KLSAgICAgICAgIyByZXN1bHQgaGFzIHNpZ24gMSBpZmYgc2VsZi5fc2lnbiBpcyAxIGFuZCBvdGhlciBpcyBhbiBvZGQgaW50ZWdlcgotICAgICAgICByZXN1bHRfc2lnbiA9IDAKLSAgICAgICAgaWYgc2VsZi5fc2lnbiA9PSAxOgotICAgICAgICAgICAgaWYgb3RoZXIuX2lzaW50ZWdlcigpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvdGhlci5faXNldmVuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zaWduID0gMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIC12ZSoqbm9uaW50ZWdlciA9IE5hTgotICAgICAgICAgICAgICAgICMgKC0wKSoqbm9uaW50ZWdlciA9IDAqKm5vbmludGVnZXIKLSAgICAgICAgICAgICAgICBpZiBzZWxmOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICd4ICoqIHkgd2l0aCB4IG5lZ2F0aXZlIGFuZCB5IG5vdCBhbiBpbnRlZ2VyJykKLSAgICAgICAgICAgICMgbmVnYXRlIHNlbGYsIHdpdGhvdXQgZG9pbmcgYW55IHVud2FudGVkIHJvdW5kaW5nCi0gICAgICAgICAgICBzZWxmID0gc2VsZi5jb3B5X25lZ2F0ZSgpCi0KLSAgICAgICAgIyAwKiooK3ZlIG9yIEluZik9IDA7IDAqKigtdmUgb3IgLUluZikgPSBJbmZpbml0eQotICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgIGlmIG90aGVyLl9zaWduID09IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUocmVzdWx0X3NpZ24sICcwJywgMCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9TaWduZWRJbmZpbml0eVtyZXN1bHRfc2lnbl0KLQotICAgICAgICAjIEluZioqKCt2ZSBvciBJbmYpID0gSW5mOyBJbmYqKigtdmUgb3IgLUluZikgPSAwCi0gICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgIGlmIG90aGVyLl9zaWduID09IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9TaWduZWRJbmZpbml0eVtyZXN1bHRfc2lnbl0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUocmVzdWx0X3NpZ24sICcwJywgMCkKLQotICAgICAgICAjIDEqKm90aGVyID0gMSwgYnV0IHRoZSBjaG9pY2Ugb2YgZXhwb25lbnQgYW5kIHRoZSBmbGFncwotICAgICAgICAjIGRlcGVuZCBvbiB0aGUgZXhwb25lbnQgb2Ygc2VsZiwgYW5kIG9uIHdoZXRoZXIgb3RoZXIgaXMgYQotICAgICAgICAjIHBvc2l0aXZlIGludGVnZXIsIGEgbmVnYXRpdmUgaW50ZWdlciwgb3IgbmVpdGhlcgotICAgICAgICBpZiBzZWxmID09IF9PbmU6Ci0gICAgICAgICAgICBpZiBvdGhlci5faXNpbnRlZ2VyKCk6Ci0gICAgICAgICAgICAgICAgIyBleHAgPSBtYXgoc2VsZi5fZXhwKm1heChpbnQob3RoZXIpLCAwKSwKLSAgICAgICAgICAgICAgICAjIDEtY29udGV4dC5wcmVjKSBidXQgZXZhbHVhdGluZyBpbnQob3RoZXIpIGRpcmVjdGx5Ci0gICAgICAgICAgICAgICAgIyBpcyBkYW5nZXJvdXMgdW50aWwgd2Uga25vdyBvdGhlciBpcyBzbWFsbCAob3RoZXIKLSAgICAgICAgICAgICAgICAjIGNvdWxkIGJlIDFlOTk5OTk5OTk5KQotICAgICAgICAgICAgICAgIGlmIG90aGVyLl9zaWduID09IDE6Ci0gICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSAwCi0gICAgICAgICAgICAgICAgZWxpZiBvdGhlciA+IGNvbnRleHQucHJlYzoKLSAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGllciA9IGNvbnRleHQucHJlYwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgPSBpbnQob3RoZXIpCi0KLSAgICAgICAgICAgICAgICBleHAgPSBzZWxmLl9leHAgKiBtdWx0aXBsaWVyCi0gICAgICAgICAgICAgICAgaWYgZXhwIDwgMS1jb250ZXh0LnByZWM6Ci0gICAgICAgICAgICAgICAgICAgIGV4cCA9IDEtY29udGV4dC5wcmVjCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFJvdW5kZWQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEluZXhhY3QpCi0gICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoUm91bmRlZCkKLSAgICAgICAgICAgICAgICBleHAgPSAxLWNvbnRleHQucHJlYwotCi0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShyZXN1bHRfc2lnbiwgJzEnKycwJyotZXhwLCBleHApCi0KLSAgICAgICAgIyBjb21wdXRlIGFkanVzdGVkIGV4cG9uZW50IG9mIHNlbGYKLSAgICAgICAgc2VsZl9hZGogPSBzZWxmLmFkanVzdGVkKCkKLQotICAgICAgICAjIHNlbGYgKiogaW5maW5pdHkgaXMgaW5maW5pdHkgaWYgc2VsZiA+IDEsIDAgaWYgc2VsZiA8IDEKLSAgICAgICAgIyBzZWxmICoqIC1pbmZpbml0eSBpcyBpbmZpbml0eSBpZiBzZWxmIDwgMSwgMCBpZiBzZWxmID4gMQotICAgICAgICBpZiBvdGhlci5faXNpbmZpbml0eSgpOgotICAgICAgICAgICAgaWYgKG90aGVyLl9zaWduID09IDApID09IChzZWxmX2FkaiA8IDApOgotICAgICAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHJlc3VsdF9zaWduLCAnMCcsIDApCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBfU2lnbmVkSW5maW5pdHlbcmVzdWx0X3NpZ25dCi0KLSAgICAgICAgIyBmcm9tIGhlcmUgb24sIHRoZSByZXN1bHQgYWx3YXlzIGdvZXMgdGhyb3VnaCB0aGUgY2FsbAotICAgICAgICAjIHRvIF9maXggYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLgotICAgICAgICBhbnMgPSBOb25lCi0gICAgICAgIGV4YWN0ID0gRmFsc2UKLQotICAgICAgICAjIGNydWRlIHRlc3QgdG8gY2F0Y2ggY2FzZXMgb2YgZXh0cmVtZSBvdmVyZmxvdy91bmRlcmZsb3cuICBJZgotICAgICAgICAjIGxvZzEwKHNlbGYpKm90aGVyID49IDEwKipib3VuZCBhbmQgYm91bmQgPj0gbGVuKHN0cihFbWF4KSkKLSAgICAgICAgIyB0aGVuIDEwKipib3VuZCA+PSAxMCoqbGVuKHN0cihFbWF4KSkgPj0gRW1heCsxIGFuZCBoZW5jZQotICAgICAgICAjIHNlbGYqKm90aGVyID49IDEwKiooRW1heCsxKSwgc28gb3ZlcmZsb3cgb2NjdXJzLiAgVGhlIHRlc3QKLSAgICAgICAgIyBmb3IgdW5kZXJmbG93IGlzIHNpbWlsYXIuCi0gICAgICAgIGJvdW5kID0gc2VsZi5fbG9nMTBfZXhwX2JvdW5kKCkgKyBvdGhlci5hZGp1c3RlZCgpCi0gICAgICAgIGlmIChzZWxmX2FkaiA+PSAwKSA9PSAob3RoZXIuX3NpZ24gPT0gMCk6Ci0gICAgICAgICAgICAjIHNlbGYgPiAxIGFuZCBvdGhlciArdmUsIG9yIHNlbGYgPCAxIGFuZCBvdGhlciAtdmUKLSAgICAgICAgICAgICMgcG9zc2liaWxpdHkgb2Ygb3ZlcmZsb3cKLSAgICAgICAgICAgIGlmIGJvdW5kID49IGxlbihzdHIoY29udGV4dC5FbWF4KSk6Ci0gICAgICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShyZXN1bHRfc2lnbiwgJzEnLCBjb250ZXh0LkVtYXgrMSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgc2VsZiA+IDEgYW5kIG90aGVyIC12ZSwgb3Igc2VsZiA8IDEgYW5kIG90aGVyICt2ZQotICAgICAgICAgICAgIyBwb3NzaWJpbGl0eSBvZiB1bmRlcmZsb3cgdG8gMAotICAgICAgICAgICAgRXRpbnkgPSBjb250ZXh0LkV0aW55KCkKLSAgICAgICAgICAgIGlmIGJvdW5kID49IGxlbihzdHIoLUV0aW55KSk6Ci0gICAgICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShyZXN1bHRfc2lnbiwgJzEnLCBFdGlueS0xKQotCi0gICAgICAgICMgdHJ5IGZvciBhbiBleGFjdCByZXN1bHQgd2l0aCBwcmVjaXNpb24gKzEKLSAgICAgICAgaWYgYW5zIGlzIE5vbmU6Ci0gICAgICAgICAgICBhbnMgPSBzZWxmLl9wb3dlcl9leGFjdChvdGhlciwgY29udGV4dC5wcmVjICsgMSkKLSAgICAgICAgICAgIGlmIGFucyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiByZXN1bHRfc2lnbiA9PSAxOgotICAgICAgICAgICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKDEsIGFucy5faW50LCBhbnMuX2V4cCkKLSAgICAgICAgICAgICAgICBleGFjdCA9IFRydWUKLQotICAgICAgICAjIHVzdWFsIGNhc2U6IGluZXhhY3QgcmVzdWx0LCB4Kip5IGNvbXB1dGVkIGRpcmVjdGx5IGFzIGV4cCh5KmxvZyh4KSkKLSAgICAgICAgaWYgYW5zIGlzIE5vbmU6Ci0gICAgICAgICAgICBwID0gY29udGV4dC5wcmVjCi0gICAgICAgICAgICB4ID0gX1dvcmtSZXAoc2VsZikKLSAgICAgICAgICAgIHhjLCB4ZSA9IHguaW50LCB4LmV4cAotICAgICAgICAgICAgeSA9IF9Xb3JrUmVwKG90aGVyKQotICAgICAgICAgICAgeWMsIHllID0geS5pbnQsIHkuZXhwCi0gICAgICAgICAgICBpZiB5LnNpZ24gPT0gMToKLSAgICAgICAgICAgICAgICB5YyA9IC15YwotCi0gICAgICAgICAgICAjIGNvbXB1dGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0OiAgc3RhcnQgd2l0aCBwcmVjaXNpb24gKzMsCi0gICAgICAgICAgICAjIHRoZW4gaW5jcmVhc2UgcHJlY2lzaW9uIHVudGlsIHJlc3VsdCBpcyB1bmFtYmlndW91c2x5IHJvdW5kYWJsZQotICAgICAgICAgICAgZXh0cmEgPSAzCi0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIGNvZWZmLCBleHAgPSBfZHBvd2VyKHhjLCB4ZSwgeWMsIHllLCBwK2V4dHJhKQotICAgICAgICAgICAgICAgIGlmIGNvZWZmICUgKDUqMTAqKihsZW4oc3RyKGNvZWZmKSktcC0xKSk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZXh0cmEgKz0gMwotCi0gICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHJlc3VsdF9zaWduLCBzdHIoY29lZmYpLCBleHApCi0KLSAgICAgICAgIyB1bmxpa2UgZXhwLCBsbiBhbmQgbG9nMTAsIHRoZSBwb3dlciBmdW5jdGlvbiByZXNwZWN0cyB0aGUKLSAgICAgICAgIyByb3VuZGluZyBtb2RlOyBubyBuZWVkIHRvIHN3aXRjaCB0byBST1VORF9IQUxGX0VWRU4gaGVyZQotCi0gICAgICAgICMgVGhlcmUncyBhIGRpZmZpY3VsdHkgaGVyZSB3aGVuICdvdGhlcicgaXMgbm90IGFuIGludGVnZXIgYW5kCi0gICAgICAgICMgdGhlIHJlc3VsdCBpcyBleGFjdC4gIEluIHRoaXMgY2FzZSwgdGhlIHNwZWNpZmljYXRpb24KLSAgICAgICAgIyByZXF1aXJlcyB0aGF0IHRoZSBJbmV4YWN0IGZsYWcgYmUgcmFpc2VkIChpbiBzcGl0ZSBvZgotICAgICAgICAjIGV4YWN0bmVzcyksIGJ1dCBzaW5jZSB0aGUgcmVzdWx0IGlzIGV4YWN0IF9maXggd29uJ3QgZG8gdGhpcwotICAgICAgICAjIGZvciB1cy4gIChDb3JyZXNwb25kaW5nbHksIHRoZSBVbmRlcmZsb3cgc2lnbmFsIHNob3VsZCBhbHNvCi0gICAgICAgICMgYmUgcmFpc2VkIGZvciBzdWJub3JtYWwgcmVzdWx0cy4pICBXZSBjYW4ndCBkaXJlY3RseSByYWlzZQotICAgICAgICAjIHRoZXNlIHNpZ25hbHMgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBjYWxsaW5nIF9maXgsIHNpbmNlCi0gICAgICAgICMgdGhhdCB3b3VsZCB2aW9sYXRlIHRoZSBwcmVjZWRlbmNlIGZvciBzaWduYWxzLiAgU28gd2Ugd3JhcAotICAgICAgICAjIHRoZSAuX2ZpeCBjYWxsIGluIGEgdGVtcG9yYXJ5IGNvbnRleHQsIGFuZCByZXJhaXNlCi0gICAgICAgICMgYWZ0ZXJ3YXJkcy4KLSAgICAgICAgaWYgZXhhY3QgYW5kIG5vdCBvdGhlci5faXNpbnRlZ2VyKCk6Ci0gICAgICAgICAgICAjIHBhZCB3aXRoIHplcm9zIHVwIHRvIGxlbmd0aCBjb250ZXh0LnByZWMrMSBpZiBuZWNlc3Nhcnk7IHRoaXMKLSAgICAgICAgICAgICMgZW5zdXJlcyB0aGF0IHRoZSBSb3VuZGVkIHNpZ25hbCB3aWxsIGJlIHJhaXNlZC4KLSAgICAgICAgICAgIGlmIGxlbihhbnMuX2ludCkgPD0gY29udGV4dC5wcmVjOgotICAgICAgICAgICAgICAgIGV4cGRpZmYgPSBjb250ZXh0LnByZWMgKyAxIC0gbGVuKGFucy5faW50KQotICAgICAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoYW5zLl9zaWduLCBhbnMuX2ludCsnMCcqZXhwZGlmZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFucy5fZXhwLWV4cGRpZmYpCi0KLSAgICAgICAgICAgICMgY3JlYXRlIGEgY29weSBvZiB0aGUgY3VycmVudCBjb250ZXh0LCB3aXRoIGNsZWFyZWQgZmxhZ3MvdHJhcHMKLSAgICAgICAgICAgIG5ld2NvbnRleHQgPSBjb250ZXh0LmNvcHkoKQotICAgICAgICAgICAgbmV3Y29udGV4dC5jbGVhcl9mbGFncygpCi0gICAgICAgICAgICBmb3IgZXhjZXB0aW9uIGluIF9zaWduYWxzOgotICAgICAgICAgICAgICAgIG5ld2NvbnRleHQudHJhcHNbZXhjZXB0aW9uXSA9IDAKLQotICAgICAgICAgICAgIyByb3VuZCBpbiB0aGUgbmV3IGNvbnRleHQKLSAgICAgICAgICAgIGFucyA9IGFucy5fZml4KG5ld2NvbnRleHQpCi0KLSAgICAgICAgICAgICMgcmFpc2UgSW5leGFjdCwgYW5kIGlmIG5lY2Vzc2FyeSwgVW5kZXJmbG93Ci0gICAgICAgICAgICBuZXdjb250ZXh0Ll9yYWlzZV9lcnJvcihJbmV4YWN0KQotICAgICAgICAgICAgaWYgbmV3Y29udGV4dC5mbGFnc1tTdWJub3JtYWxdOgotICAgICAgICAgICAgICAgIG5ld2NvbnRleHQuX3JhaXNlX2Vycm9yKFVuZGVyZmxvdykKLQotICAgICAgICAgICAgIyBwcm9wYWdhdGUgc2lnbmFscyB0byB0aGUgb3JpZ2luYWwgY29udGV4dDsgX2ZpeCBjb3VsZAotICAgICAgICAgICAgIyBoYXZlIHJhaXNlZCBhbnkgb2YgT3ZlcmZsb3csIFVuZGVyZmxvdywgU3Vibm9ybWFsLAotICAgICAgICAgICAgIyBJbmV4YWN0LCBSb3VuZGVkLCBDbGFtcGVkLiAgT3ZlcmZsb3cgbmVlZHMgdGhlIGNvcnJlY3QKLSAgICAgICAgICAgICMgYXJndW1lbnRzLiAgTm90ZSB0aGF0IHRoZSBvcmRlciBvZiB0aGUgZXhjZXB0aW9ucyBpcwotICAgICAgICAgICAgIyBpbXBvcnRhbnQgaGVyZS4KLSAgICAgICAgICAgIGlmIG5ld2NvbnRleHQuZmxhZ3NbT3ZlcmZsb3ddOgotICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKE92ZXJmbG93LCAnYWJvdmUgRW1heCcsIGFucy5fc2lnbikKLSAgICAgICAgICAgIGZvciBleGNlcHRpb24gaW4gVW5kZXJmbG93LCBTdWJub3JtYWwsIEluZXhhY3QsIFJvdW5kZWQsIENsYW1wZWQ6Ci0gICAgICAgICAgICAgICAgaWYgbmV3Y29udGV4dC5mbGFnc1tleGNlcHRpb25dOgotICAgICAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihleGNlcHRpb24pCi0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCi0KLSAgICAgICAgcmV0dXJuIGFucwotCi0gICAgZGVmIF9fcnBvd19fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJTd2FwcyBzZWxmL290aGVyIGFuZCByZXR1cm5zIF9fcG93X18uIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCi0gICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIG90aGVyCi0gICAgICAgIHJldHVybiBvdGhlci5fX3Bvd19fKHNlbGYsIGNvbnRleHQ9Y29udGV4dCkKLQotICAgIGRlZiBub3JtYWxpemUoc2VsZiwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiTm9ybWFsaXplLSBzdHJpcCB0cmFpbGluZyAwcywgY2hhbmdlIGFueXRoaW5nIGVxdWFsIHRvIDAgdG8gMGUwIiIiCi0KLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKLSAgICAgICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgZHVwID0gc2VsZi5fZml4KGNvbnRleHQpCi0gICAgICAgIGlmIGR1cC5faXNpbmZpbml0eSgpOgotICAgICAgICAgICAgcmV0dXJuIGR1cAotCi0gICAgICAgIGlmIG5vdCBkdXA6Ci0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShkdXAuX3NpZ24sICcwJywgMCkKLSAgICAgICAgZXhwX21heCA9IFtjb250ZXh0LkVtYXgsIGNvbnRleHQuRXRvcCgpXVtjb250ZXh0LmNsYW1wXQotICAgICAgICBlbmQgPSBsZW4oZHVwLl9pbnQpCi0gICAgICAgIGV4cCA9IGR1cC5fZXhwCi0gICAgICAgIHdoaWxlIGR1cC5faW50W2VuZC0xXSA9PSAnMCcgYW5kIGV4cCA8IGV4cF9tYXg6Ci0gICAgICAgICAgICBleHAgKz0gMQotICAgICAgICAgICAgZW5kIC09IDEKLSAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoZHVwLl9zaWduLCBkdXAuX2ludFs6ZW5kXSwgZXhwKQotCi0gICAgZGVmIHF1YW50aXplKHNlbGYsIGV4cCwgcm91bmRpbmc9Tm9uZSwgY29udGV4dD1Ob25lLCB3YXRjaGV4cD1UcnVlKToKLSAgICAgICAgIiIiUXVhbnRpemUgc2VsZiBzbyBpdHMgZXhwb25lbnQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiBleHAuCi0KLSAgICAgICAgU2ltaWxhciB0byBzZWxmLl9yZXNjYWxlKGV4cC5fZXhwKSBidXQgd2l0aCBlcnJvciBjaGVja2luZy4KLSAgICAgICAgIiIiCi0gICAgICAgIGV4cCA9IF9jb252ZXJ0X290aGVyKGV4cCwgcmFpc2VpdD1UcnVlKQotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLSAgICAgICAgaWYgcm91bmRpbmcgaXMgTm9uZToKLSAgICAgICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5yb3VuZGluZwotCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3IgZXhwLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhleHAsIGNvbnRleHQpCi0gICAgICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgICAgICBpZiBleHAuX2lzaW5maW5pdHkoKSBvciBzZWxmLl9pc2luZmluaXR5KCk6Ci0gICAgICAgICAgICAgICAgaWYgZXhwLl9pc2luZmluaXR5KCkgYW5kIHNlbGYuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikgICMgaWYgYm90aCBhcmUgaW5mLCBpdCBpcyBPSwotICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdWFudGl6ZSB3aXRoIG9uZSBJTkYnKQotCi0gICAgICAgICMgaWYgd2UncmUgbm90IHdhdGNoaW5nIGV4cG9uZW50cywgZG8gYSBzaW1wbGUgcmVzY2FsZQotICAgICAgICBpZiBub3Qgd2F0Y2hleHA6Ci0gICAgICAgICAgICBhbnMgPSBzZWxmLl9yZXNjYWxlKGV4cC5fZXhwLCByb3VuZGluZykKLSAgICAgICAgICAgICMgcmFpc2UgSW5leGFjdCBhbmQgUm91bmRlZCB3aGVyZSBhcHByb3ByaWF0ZQotICAgICAgICAgICAgaWYgYW5zLl9leHAgPiBzZWxmLl9leHA6Ci0gICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoUm91bmRlZCkKLSAgICAgICAgICAgICAgICBpZiBhbnMgIT0gc2VsZjoKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoSW5leGFjdCkKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICAjIGV4cC5fZXhwIHNob3VsZCBiZSBiZXR3ZWVuIEV0aW55IGFuZCBFbWF4Ci0gICAgICAgIGlmIG5vdCAoY29udGV4dC5FdGlueSgpIDw9IGV4cC5fZXhwIDw9IGNvbnRleHQuRW1heCk6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAndGFyZ2V0IGV4cG9uZW50IG91dCBvZiBib3VuZHMgaW4gcXVhbnRpemUnKQotCi0gICAgICAgIGlmIG5vdCBzZWxmOgotICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMCcsIGV4cC5fZXhwKQotICAgICAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCi0KLSAgICAgICAgc2VsZl9hZGp1c3RlZCA9IHNlbGYuYWRqdXN0ZWQoKQotICAgICAgICBpZiBzZWxmX2FkanVzdGVkID4gY29udGV4dC5FbWF4OgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cG9uZW50IG9mIHF1YW50aXplIHJlc3VsdCB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgY29udGV4dCcpCi0gICAgICAgIGlmIHNlbGZfYWRqdXN0ZWQgLSBleHAuX2V4cCArIDEgPiBjb250ZXh0LnByZWM6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVhbnRpemUgcmVzdWx0IGhhcyB0b28gbWFueSBkaWdpdHMgZm9yIGN1cnJlbnQgY29udGV4dCcpCi0KLSAgICAgICAgYW5zID0gc2VsZi5fcmVzY2FsZShleHAuX2V4cCwgcm91bmRpbmcpCi0gICAgICAgIGlmIGFucy5hZGp1c3RlZCgpID4gY29udGV4dC5FbWF4OgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cG9uZW50IG9mIHF1YW50aXplIHJlc3VsdCB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgY29udGV4dCcpCi0gICAgICAgIGlmIGxlbihhbnMuX2ludCkgPiBjb250ZXh0LnByZWM6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVhbnRpemUgcmVzdWx0IGhhcyB0b28gbWFueSBkaWdpdHMgZm9yIGN1cnJlbnQgY29udGV4dCcpCi0KLSAgICAgICAgIyByYWlzZSBhcHByb3ByaWF0ZSBmbGFncwotICAgICAgICBpZiBhbnMgYW5kIGFucy5hZGp1c3RlZCgpIDwgY29udGV4dC5FbWluOgotICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoU3Vibm9ybWFsKQotICAgICAgICBpZiBhbnMuX2V4cCA+IHNlbGYuX2V4cDoKLSAgICAgICAgICAgIGlmIGFucyAhPSBzZWxmOgotICAgICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEluZXhhY3QpCi0gICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihSb3VuZGVkKQotCi0gICAgICAgICMgY2FsbCB0byBmaXggdGFrZXMgY2FyZSBvZiBhbnkgbmVjZXNzYXJ5IGZvbGRkb3duLCBhbmQKLSAgICAgICAgIyBzaWduYWxzIENsYW1wZWQgaWYgbmVjZXNzYXJ5Ci0gICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCi0gICAgICAgIHJldHVybiBhbnMKLQotICAgIGRlZiBzYW1lX3F1YW50dW0oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgYW5kIG90aGVyIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQ7IG90aGVyd2lzZQotICAgICAgICByZXR1cm4gRmFsc2UuCi0KLSAgICAgICAgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBzcGVjaWFsIHZhbHVlLCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFyZSB1c2VkOgotICAgICAgICAgICAqIHJldHVybiBUcnVlIGlmIGJvdGggb3BlcmFuZHMgYXJlIGluZmluaXRpZXMKLSAgICAgICAgICAgKiByZXR1cm4gVHJ1ZSBpZiBib3RoIG9wZXJhbmRzIGFyZSBOYU5zCi0gICAgICAgICAgICogb3RoZXJ3aXNlLCByZXR1cm4gRmFsc2UuCi0gICAgICAgICIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICByZXR1cm4gKHNlbGYuaXNfbmFuKCkgYW5kIG90aGVyLmlzX25hbigpIG9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuaXNfaW5maW5pdGUoKSBhbmQgb3RoZXIuaXNfaW5maW5pdGUoKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4cCA9PSBvdGhlci5fZXhwCi0KLSAgICBkZWYgX3Jlc2NhbGUoc2VsZiwgZXhwLCByb3VuZGluZyk6Ci0gICAgICAgICIiIlJlc2NhbGUgc2VsZiBzbyB0aGF0IHRoZSBleHBvbmVudCBpcyBleHAsIGVpdGhlciBieSBwYWRkaW5nIHdpdGggemVyb3MKLSAgICAgICAgb3IgYnkgdHJ1bmNhdGluZyBkaWdpdHMsIHVzaW5nIHRoZSBnaXZlbiByb3VuZGluZyBtb2RlLgotCi0gICAgICAgIFNwZWNpYWxzIGFyZSByZXR1cm5lZCB3aXRob3V0IGNoYW5nZS4gIFRoaXMgb3BlcmF0aW9uIGlzCi0gICAgICAgIHF1aWV0OiBpdCByYWlzZXMgbm8gZmxhZ3MsIGFuZCB1c2VzIG5vIGluZm9ybWF0aW9uIGZyb20gdGhlCi0gICAgICAgIGNvbnRleHQuCi0KLSAgICAgICAgZXhwID0gZXhwIHRvIHNjYWxlIHRvIChhbiBpbnRlZ2VyKQotICAgICAgICByb3VuZGluZyA9IHJvdW5kaW5nIG1vZGUKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQotICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sICcwJywgZXhwKQotCi0gICAgICAgIGlmIHNlbGYuX2V4cCA+PSBleHA6Ci0gICAgICAgICAgICAjIHBhZCBhbnN3ZXIgd2l0aCB6ZXJvcyBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW50ICsgJzAnKihzZWxmLl9leHAgLSBleHApLCBleHApCi0KLSAgICAgICAgIyB0b28gbWFueSBkaWdpdHM7IHJvdW5kIGFuZCBsb3NlIGRhdGEuICBJZiBzZWxmLmFkanVzdGVkKCkgPAotICAgICAgICAjIGV4cC0xLCByZXBsYWNlIHNlbGYgYnkgMTAqKihleHAtMSkgYmVmb3JlIHJvdW5kaW5nCi0gICAgICAgIGRpZ2l0cyA9IGxlbihzZWxmLl9pbnQpICsgc2VsZi5fZXhwIC0gZXhwCi0gICAgICAgIGlmIGRpZ2l0cyA8IDA6Ci0gICAgICAgICAgICBzZWxmID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMScsIGV4cC0xKQotICAgICAgICAgICAgZGlnaXRzID0gMAotICAgICAgICB0aGlzX2Z1bmN0aW9uID0gc2VsZi5fcGlja19yb3VuZGluZ19mdW5jdGlvbltyb3VuZGluZ10KLSAgICAgICAgY2hhbmdlZCA9IHRoaXNfZnVuY3Rpb24oc2VsZiwgZGlnaXRzKQotICAgICAgICBjb2VmZiA9IHNlbGYuX2ludFs6ZGlnaXRzXSBvciAnMCcKLSAgICAgICAgaWYgY2hhbmdlZCA9PSAxOgotICAgICAgICAgICAgY29lZmYgPSBzdHIoaW50KGNvZWZmKSsxKQotICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCBjb2VmZiwgZXhwKQotCi0gICAgZGVmIF9yb3VuZChzZWxmLCBwbGFjZXMsIHJvdW5kaW5nKToKLSAgICAgICAgIiIiUm91bmQgYSBub256ZXJvLCBub25zcGVjaWFsIERlY2ltYWwgdG8gYSBmaXhlZCBudW1iZXIgb2YKLSAgICAgICAgc2lnbmlmaWNhbnQgZmlndXJlcywgdXNpbmcgdGhlIGdpdmVuIHJvdW5kaW5nIG1vZGUuCi0KLSAgICAgICAgSW5maW5pdGllcywgTmFOcyBhbmQgemVyb3MgYXJlIHJldHVybmVkIHVuYWx0ZXJlZC4KLQotICAgICAgICBUaGlzIG9wZXJhdGlvbiBpcyBxdWlldDogaXQgcmFpc2VzIG5vIGZsYWdzLCBhbmQgdXNlcyBubwotICAgICAgICBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjb250ZXh0LgotCi0gICAgICAgICIiIgotICAgICAgICBpZiBwbGFjZXMgPD0gMDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhdCBsZWFzdCAxIGluIF9yb3VuZCIpCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igbm90IHNlbGY6Ci0gICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQotICAgICAgICBhbnMgPSBzZWxmLl9yZXNjYWxlKHNlbGYuYWRqdXN0ZWQoKSsxLXBsYWNlcywgcm91bmRpbmcpCi0gICAgICAgICMgaXQgY2FuIGhhcHBlbiB0aGF0IHRoZSByZXNjYWxlIGFsdGVycyB0aGUgYWRqdXN0ZWQgZXhwb25lbnQ7Ci0gICAgICAgICMgZm9yIGV4YW1wbGUgd2hlbiByb3VuZGluZyA5OS45NyB0byAzIHNpZ25pZmljYW50IGZpZ3VyZXMuCi0gICAgICAgICMgV2hlbiB0aGlzIGhhcHBlbnMgd2UgZW5kIHVwIHdpdGggYW4gZXh0cmEgMCBhdCB0aGUgZW5kIG9mCi0gICAgICAgICMgdGhlIG51bWJlcjsgYSBzZWNvbmQgcmVzY2FsZSBmaXhlcyB0aGlzLgotICAgICAgICBpZiBhbnMuYWRqdXN0ZWQoKSAhPSBzZWxmLmFkanVzdGVkKCk6Ci0gICAgICAgICAgICBhbnMgPSBhbnMuX3Jlc2NhbGUoYW5zLmFkanVzdGVkKCkrMS1wbGFjZXMsIHJvdW5kaW5nKQotICAgICAgICByZXR1cm4gYW5zCi0KLSAgICBkZWYgdG9faW50ZWdyYWxfZXhhY3Qoc2VsZiwgcm91bmRpbmc9Tm9uZSwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUm91bmRzIHRvIGEgbmVhcmJ5IGludGVnZXIuCi0KLSAgICAgICAgSWYgbm8gcm91bmRpbmcgbW9kZSBpcyBzcGVjaWZpZWQsIHRha2UgdGhlIHJvdW5kaW5nIG1vZGUgZnJvbQotICAgICAgICB0aGUgY29udGV4dC4gIFRoaXMgbWV0aG9kIHJhaXNlcyB0aGUgUm91bmRlZCBhbmQgSW5leGFjdCBmbGFncwotICAgICAgICB3aGVuIGFwcHJvcHJpYXRlLgotCi0gICAgICAgIFNlZSBhbHNvOiB0b19pbnRlZ3JhbF92YWx1ZSwgd2hpY2ggZG9lcyBleGFjdGx5IHRoZSBzYW1lIGFzCi0gICAgICAgIHRoaXMgbWV0aG9kIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgcmFpc2UgSW5leGFjdCBvciBSb3VuZGVkLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbDoKLSAgICAgICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMoY29udGV4dD1jb250ZXh0KQotICAgICAgICAgICAgaWYgYW5zOgotICAgICAgICAgICAgICAgIHJldHVybiBhbnMKLSAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCi0gICAgICAgIGlmIHNlbGYuX2V4cCA+PSAwOgotICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKLSAgICAgICAgaWYgbm90IHNlbGY6Ci0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMCcsIDApCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLSAgICAgICAgaWYgcm91bmRpbmcgaXMgTm9uZToKLSAgICAgICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5yb3VuZGluZwotICAgICAgICBhbnMgPSBzZWxmLl9yZXNjYWxlKDAsIHJvdW5kaW5nKQotICAgICAgICBpZiBhbnMgIT0gc2VsZjoKLSAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKEluZXhhY3QpCi0gICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFJvdW5kZWQpCi0gICAgICAgIHJldHVybiBhbnMKLQotICAgIGRlZiB0b19pbnRlZ3JhbF92YWx1ZShzZWxmLCByb3VuZGluZz1Ob25lLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSb3VuZHMgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgd2l0aG91dCByYWlzaW5nIGluZXhhY3QsIHJvdW5kZWQuIiIiCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLSAgICAgICAgaWYgcm91bmRpbmcgaXMgTm9uZToKLSAgICAgICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5yb3VuZGluZwotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCi0gICAgICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFucwotICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKLSAgICAgICAgaWYgc2VsZi5fZXhwID49IDA6Ci0gICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc2NhbGUoMCwgcm91bmRpbmcpCi0KLSAgICAjIHRoZSBtZXRob2QgbmFtZSBjaGFuZ2VkLCBidXQgd2UgcHJvdmlkZSBhbHNvIHRoZSBvbGQgb25lLCBmb3IgY29tcGF0aWJpbGl0eQotICAgIHRvX2ludGVncmFsID0gdG9faW50ZWdyYWxfdmFsdWUKLQotICAgIGRlZiBzcXJ0KHNlbGYsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2Ygc2VsZi4iIiIKLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKLSAgICAgICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSBhbmQgc2VsZi5fc2lnbiA9PSAwOgotICAgICAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCi0KLSAgICAgICAgaWYgbm90IHNlbGY6Ci0gICAgICAgICAgICAjIGV4cG9uZW50ID0gc2VsZi5fZXhwIC8vIDIuICBzcXJ0KC0wKSA9IC0wCi0gICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sICcwJywgc2VsZi5fZXhwIC8vIDIpCi0gICAgICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKLQotICAgICAgICBpZiBzZWxmLl9zaWduID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwgJ3NxcnQoLXgpLCB4ID4gMCcpCi0KLSAgICAgICAgIyBBdCB0aGlzIHBvaW50IHNlbGYgcmVwcmVzZW50cyBhIHBvc2l0aXZlIG51bWJlci4gIExldCBwIGJlCi0gICAgICAgICMgdGhlIGRlc2lyZWQgcHJlY2lzaW9uIGFuZCBleHByZXNzIHNlbGYgaW4gdGhlIGZvcm0gYyoxMDAqKmUKLSAgICAgICAgIyB3aXRoIGMgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBhbmQgZSBhbiBpbnRlZ2VyLCBjIGFuZCBlCi0gICAgICAgICMgYmVpbmcgY2hvc2VuIHNvIHRoYXQgMTAwKioocC0xKSA8PSBjIDwgMTAwKipwLiAgVGhlbiB0aGUKLSAgICAgICAgIyAoZXhhY3QpIHNxdWFyZSByb290IG9mIHNlbGYgaXMgc3FydChjKSoxMCoqZSwgYW5kIDEwKioocC0xKQotICAgICAgICAjIDw9IHNxcnQoYykgPCAxMCoqcCwgc28gdGhlIGNsb3Nlc3QgcmVwcmVzZW50YWJsZSBEZWNpbWFsIGF0Ci0gICAgICAgICMgcHJlY2lzaW9uIHAgaXMgbioxMCoqZSB3aGVyZSBuID0gcm91bmRfaGFsZl9ldmVuKHNxcnQoYykpLAotICAgICAgICAjIHRoZSBjbG9zZXN0IGludGVnZXIgdG8gc3FydChjKSB3aXRoIHRoZSBldmVuIGludGVnZXIgY2hvc2VuCi0gICAgICAgICMgaW4gdGhlIGNhc2Ugb2YgYSB0aWUuCi0gICAgICAgICMKLSAgICAgICAgIyBUbyBlbnN1cmUgY29ycmVjdCByb3VuZGluZyBpbiBhbGwgY2FzZXMsIHdlIHVzZSB0aGUKLSAgICAgICAgIyBmb2xsb3dpbmcgdHJpY2s6IHdlIGNvbXB1dGUgdGhlIHNxdWFyZSByb290IHRvIGFuIGV4dHJhCi0gICAgICAgICMgcGxhY2UgKHByZWNpc2lvbiBwKzEgaW5zdGVhZCBvZiBwcmVjaXNpb24gcCksIHJvdW5kaW5nIGRvd24uCi0gICAgICAgICMgVGhlbiwgaWYgdGhlIHJlc3VsdCBpcyBpbmV4YWN0IGFuZCBpdHMgbGFzdCBkaWdpdCBpcyAwIG9yIDUsCi0gICAgICAgICMgd2UgaW5jcmVhc2UgdGhlIGxhc3QgZGlnaXQgdG8gMSBvciA2IHJlc3BlY3RpdmVseTsgaWYgaXQncwotICAgICAgICAjIGV4YWN0IHdlIGxlYXZlIHRoZSBsYXN0IGRpZ2l0IGFsb25lLiAgTm93IHRoZSBmaW5hbCByb3VuZCB0bwotICAgICAgICAjIHAgcGxhY2VzIChvciBmZXdlciBpbiB0aGUgY2FzZSBvZiB1bmRlcmZsb3cpIHdpbGwgcm91bmQKLSAgICAgICAgIyBjb3JyZWN0bHkgYW5kIHJhaXNlIHRoZSBhcHByb3ByaWF0ZSBmbGFncy4KLQotICAgICAgICAjIHVzZSBhbiBleHRyYSBkaWdpdCBvZiBwcmVjaXNpb24KLSAgICAgICAgcHJlYyA9IGNvbnRleHQucHJlYysxCi0KLSAgICAgICAgIyB3cml0ZSBhcmd1bWVudCBpbiB0aGUgZm9ybSBjKjEwMCoqZSB3aGVyZSBlID0gc2VsZi5fZXhwLy8yCi0gICAgICAgICMgaXMgdGhlICdpZGVhbCcgZXhwb25lbnQsIHRvIGJlIHVzZWQgaWYgdGhlIHNxdWFyZSByb290IGlzCi0gICAgICAgICMgZXhhY3RseSByZXByZXNlbnRhYmxlLiAgbCBpcyB0aGUgbnVtYmVyIG9mICdkaWdpdHMnIG9mIGMgaW4KLSAgICAgICAgIyBiYXNlIDEwMCwgc28gdGhhdCAxMDAqKihsLTEpIDw9IGMgPCAxMDAqKmwuCi0gICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZikKLSAgICAgICAgZSA9IG9wLmV4cCA+PiAxCi0gICAgICAgIGlmIG9wLmV4cCAmIDE6Ci0gICAgICAgICAgICBjID0gb3AuaW50ICogMTAKLSAgICAgICAgICAgIGwgPSAobGVuKHNlbGYuX2ludCkgPj4gMSkgKyAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjID0gb3AuaW50Ci0gICAgICAgICAgICBsID0gbGVuKHNlbGYuX2ludCkrMSA+PiAxCi0KLSAgICAgICAgIyByZXNjYWxlIHNvIHRoYXQgYyBoYXMgZXhhY3RseSBwcmVjIGJhc2UgMTAwICdkaWdpdHMnCi0gICAgICAgIHNoaWZ0ID0gcHJlYy1sCi0gICAgICAgIGlmIHNoaWZ0ID49IDA6Ci0gICAgICAgICAgICBjICo9IDEwMCoqc2hpZnQKLSAgICAgICAgICAgIGV4YWN0ID0gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYywgcmVtYWluZGVyID0gZGl2bW9kKGMsIDEwMCoqLXNoaWZ0KQotICAgICAgICAgICAgZXhhY3QgPSBub3QgcmVtYWluZGVyCi0gICAgICAgIGUgLT0gc2hpZnQKLQotICAgICAgICAjIGZpbmQgbiA9IGZsb29yKHNxcnQoYykpIHVzaW5nIE5ld3RvbidzIG1ldGhvZAotICAgICAgICBuID0gMTAqKnByZWMKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHEgPSBjLy9uCi0gICAgICAgICAgICBpZiBuIDw9IHE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbiA9IG4gKyBxID4+IDEKLSAgICAgICAgZXhhY3QgPSBleGFjdCBhbmQgbipuID09IGMKLQotICAgICAgICBpZiBleGFjdDoKLSAgICAgICAgICAgICMgcmVzdWx0IGlzIGV4YWN0OyByZXNjYWxlIHRvIHVzZSBpZGVhbCBleHBvbmVudCBlCi0gICAgICAgICAgICBpZiBzaGlmdCA+PSAwOgotICAgICAgICAgICAgICAgICMgYXNzZXJ0IG4gJSAxMCoqc2hpZnQgPT0gMAotICAgICAgICAgICAgICAgIG4gLy89IDEwKipzaGlmdAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBuICo9IDEwKiotc2hpZnQKLSAgICAgICAgICAgIGUgKz0gc2hpZnQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgcmVzdWx0IGlzIG5vdCBleGFjdDsgZml4IGxhc3QgZGlnaXQgYXMgZGVzY3JpYmVkIGFib3ZlCi0gICAgICAgICAgICBpZiBuICUgNSA9PSAwOgotICAgICAgICAgICAgICAgIG4gKz0gMQotCi0gICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoMCwgc3RyKG4pLCBlKQotCi0gICAgICAgICMgcm91bmQsIGFuZCBmaXQgdG8gY3VycmVudCBjb250ZXh0Ci0gICAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9zaGFsbG93X2NvcHkoKQotICAgICAgICByb3VuZGluZyA9IGNvbnRleHQuX3NldF9yb3VuZGluZyhST1VORF9IQUxGX0VWRU4pCi0gICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCi0gICAgICAgIGNvbnRleHQucm91bmRpbmcgPSByb3VuZGluZwotCi0gICAgICAgIHJldHVybiBhbnMKLQotICAgIGRlZiBtYXgoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGxhcmdlciB2YWx1ZS4KLQotICAgICAgICBMaWtlIG1heChzZWxmLCBvdGhlcikgZXhjZXB0IGlmIG9uZSBpcyBub3QgYSBudW1iZXIsIHJldHVybnMKLSAgICAgICAgTmFOIChhbmQgc2lnbmFscyBpZiBvbmUgaXMgc05hTikuICBBbHNvIHJvdW5kcy4KLSAgICAgICAgIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKLQotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0KLSAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlci5faXNfc3BlY2lhbDoKLSAgICAgICAgICAgICMgSWYgb25lIG9wZXJhbmQgaXMgYSBxdWlldCBOYU4gYW5kIHRoZSBvdGhlciBpcyBudW1iZXIsIHRoZW4gdGhlCi0gICAgICAgICAgICAjIG51bWJlciBpcyBhbHdheXMgcmV0dXJuZWQKLSAgICAgICAgICAgIHNuID0gc2VsZi5faXNuYW4oKQotICAgICAgICAgICAgb24gPSBvdGhlci5faXNuYW4oKQotICAgICAgICAgICAgaWYgc24gb3Igb246Ci0gICAgICAgICAgICAgICAgaWYgb24gPT0gMSBhbmQgc24gPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeChjb250ZXh0KQotICAgICAgICAgICAgICAgIGlmIHNuID09IDEgYW5kIG9uID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlci5fZml4KGNvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCi0KLSAgICAgICAgYyA9IHNlbGYuX2NtcChvdGhlcikKLSAgICAgICAgaWYgYyA9PSAwOgotICAgICAgICAgICAgIyBJZiBib3RoIG9wZXJhbmRzIGFyZSBmaW5pdGUgYW5kIGVxdWFsIGluIG51bWVyaWNhbCB2YWx1ZQotICAgICAgICAgICAgIyB0aGVuIGFuIG9yZGVyaW5nIGlzIGFwcGxpZWQ6Ci0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIElmIHRoZSBzaWducyBkaWZmZXIgdGhlbiBtYXggcmV0dXJucyB0aGUgb3BlcmFuZCB3aXRoIHRoZQotICAgICAgICAgICAgIyBwb3NpdGl2ZSBzaWduIGFuZCBtaW4gcmV0dXJucyB0aGUgb3BlcmFuZCB3aXRoIHRoZSBuZWdhdGl2ZSBzaWduCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIElmIHRoZSBzaWducyBhcmUgdGhlIHNhbWUgdGhlbiB0aGUgZXhwb25lbnQgaXMgdXNlZCB0byBzZWxlY3QKLSAgICAgICAgICAgICMgdGhlIHJlc3VsdC4gIFRoaXMgaXMgZXhhY3RseSB0aGUgb3JkZXJpbmcgdXNlZCBpbiBjb21wYXJlX3RvdGFsLgotICAgICAgICAgICAgYyA9IHNlbGYuY29tcGFyZV90b3RhbChvdGhlcikKLQotICAgICAgICBpZiBjID09IC0xOgotICAgICAgICAgICAgYW5zID0gb3RoZXIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFucyA9IHNlbGYKLQotICAgICAgICByZXR1cm4gYW5zLl9maXgoY29udGV4dCkKLQotICAgIGRlZiBtaW4oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHNtYWxsZXIgdmFsdWUuCi0KLSAgICAgICAgTGlrZSBtaW4oc2VsZiwgb3RoZXIpIGV4Y2VwdCBpZiBvbmUgaXMgbm90IGEgbnVtYmVyLCByZXR1cm5zCi0gICAgICAgIE5hTiAoYW5kIHNpZ25hbHMgaWYgb25lIGlzIHNOYU4pLiAgQWxzbyByb3VuZHMuCi0gICAgICAgICIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCi0KLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICAjIElmIG9uZSBvcGVyYW5kIGlzIGEgcXVpZXQgTmFOIGFuZCB0aGUgb3RoZXIgaXMgbnVtYmVyLCB0aGVuIHRoZQotICAgICAgICAgICAgIyBudW1iZXIgaXMgYWx3YXlzIHJldHVybmVkCi0gICAgICAgICAgICBzbiA9IHNlbGYuX2lzbmFuKCkKLSAgICAgICAgICAgIG9uID0gb3RoZXIuX2lzbmFuKCkKLSAgICAgICAgICAgIGlmIHNuIG9yIG9uOgotICAgICAgICAgICAgICAgIGlmIG9uID09IDEgYW5kIHNuID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgoY29udGV4dCkKLSAgICAgICAgICAgICAgICBpZiBzbiA9PSAxIGFuZCBvbiA9PSAwOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIuX2ZpeChjb250ZXh0KQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotCi0gICAgICAgIGMgPSBzZWxmLl9jbXAob3RoZXIpCi0gICAgICAgIGlmIGMgPT0gMDoKLSAgICAgICAgICAgIGMgPSBzZWxmLmNvbXBhcmVfdG90YWwob3RoZXIpCi0KLSAgICAgICAgaWYgYyA9PSAtMToKLSAgICAgICAgICAgIGFucyA9IHNlbGYKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFucyA9IG90aGVyCi0KLSAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCi0KLSAgICBkZWYgX2lzaW50ZWdlcihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHNlbGYgaXMgYW4gaW50ZWdlciIiIgotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIHNlbGYuX2V4cCA+PSAwOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmVzdCA9IHNlbGYuX2ludFtzZWxmLl9leHA6XQotICAgICAgICByZXR1cm4gcmVzdCA9PSAnMCcqbGVuKHJlc3QpCi0KLSAgICBkZWYgX2lzZXZlbihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHNlbGYgaXMgZXZlbi4gIEFzc3VtZXMgc2VsZiBpcyBhbiBpbnRlZ2VyLiIiIgotICAgICAgICBpZiBub3Qgc2VsZiBvciBzZWxmLl9leHAgPiAwOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ludFstMStzZWxmLl9leHBdIGluICcwMjQ2OCcKLQotICAgIGRlZiBhZGp1c3RlZChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBhZGp1c3RlZCBleHBvbmVudCBvZiBzZWxmIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHAgKyBsZW4oc2VsZi5faW50KSAtIDEKLSAgICAgICAgIyBJZiBOYU4gb3IgSW5maW5pdHksIHNlbGYuX2V4cCBpcyBzdHJpbmcKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgY2Fub25pY2FsKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBzYW1lIERlY2ltYWwgb2JqZWN0LgotCi0gICAgICAgIEFzIHdlIGRvIG5vdCBoYXZlIGRpZmZlcmVudCBlbmNvZGluZ3MgZm9yIHRoZSBzYW1lIG51bWJlciwgdGhlCi0gICAgICAgIHJlY2VpdmVkIG9iamVjdCBhbHJlYWR5IGlzIGluIGl0cyBjYW5vbmljYWwgZm9ybS4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgY29tcGFyZV9zaWduYWwoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIkNvbXBhcmVzIHNlbGYgdG8gdGhlIG90aGVyIG9wZXJhbmQgbnVtZXJpY2FsbHkuCi0KLSAgICAgICAgSXQncyBwcmV0dHkgbXVjaCBsaWtlIGNvbXBhcmUoKSwgYnV0IGFsbCBOYU5zIHNpZ25hbCwgd2l0aCBzaWduYWxpbmcKLSAgICAgICAgTmFOcyB0YWtpbmcgcHJlY2VkZW5jZSBvdmVyIHF1aWV0IE5hTnMuCi0gICAgICAgICIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0ID0gVHJ1ZSkKLSAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICByZXR1cm4gYW5zCi0gICAgICAgIHJldHVybiBzZWxmLmNvbXBhcmUob3RoZXIsIGNvbnRleHQ9Y29udGV4dCkKLQotICAgIGRlZiBjb21wYXJlX3RvdGFsKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJDb21wYXJlcyBzZWxmIHRvIG90aGVyIHVzaW5nIHRoZSBhYnN0cmFjdCByZXByZXNlbnRhdGlvbnMuCi0KLSAgICAgICAgVGhpcyBpcyBub3QgbGlrZSB0aGUgc3RhbmRhcmQgY29tcGFyZSwgd2hpY2ggdXNlIHRoZWlyIG51bWVyaWNhbAotICAgICAgICB2YWx1ZS4gTm90ZSB0aGF0IGEgdG90YWwgb3JkZXJpbmcgaXMgZGVmaW5lZCBmb3IgYWxsIHBvc3NpYmxlIGFic3RyYWN0Ci0gICAgICAgIHJlcHJlc2VudGF0aW9ucy4KLSAgICAgICAgIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKLQotICAgICAgICAjIGlmIG9uZSBpcyBuZWdhdGl2ZSBhbmQgdGhlIG90aGVyIGlzIHBvc2l0aXZlLCBpdCdzIGVhc3kKLSAgICAgICAgaWYgc2VsZi5fc2lnbiBhbmQgbm90IG90aGVyLl9zaWduOgotICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQotICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbiBhbmQgb3RoZXIuX3NpZ246Ci0gICAgICAgICAgICByZXR1cm4gX09uZQotICAgICAgICBzaWduID0gc2VsZi5fc2lnbgotCi0gICAgICAgICMgbGV0J3MgaGFuZGxlIGJvdGggTmFOIHR5cGVzCi0gICAgICAgIHNlbGZfbmFuID0gc2VsZi5faXNuYW4oKQotICAgICAgICBvdGhlcl9uYW4gPSBvdGhlci5faXNuYW4oKQotICAgICAgICBpZiBzZWxmX25hbiBvciBvdGhlcl9uYW46Ci0gICAgICAgICAgICBpZiBzZWxmX25hbiA9PSBvdGhlcl9uYW46Ci0gICAgICAgICAgICAgICAgIyBjb21wYXJlIHBheWxvYWRzIGFzIHRob3VnaCB0aGV5J3JlIGludGVnZXJzCi0gICAgICAgICAgICAgICAgc2VsZl9rZXkgPSBsZW4oc2VsZi5faW50KSwgc2VsZi5faW50Ci0gICAgICAgICAgICAgICAgb3RoZXJfa2V5ID0gbGVuKG90aGVyLl9pbnQpLCBvdGhlci5faW50Ci0gICAgICAgICAgICAgICAgaWYgc2VsZl9rZXkgPCBvdGhlcl9rZXk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNpZ246Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX09uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQotICAgICAgICAgICAgICAgIGlmIHNlbGZfa2V5ID4gb3RoZXJfa2V5OgotICAgICAgICAgICAgICAgICAgICBpZiBzaWduOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9PbmUKLSAgICAgICAgICAgICAgICByZXR1cm4gX1plcm8KLQotICAgICAgICAgICAgaWYgc2lnbjoKLSAgICAgICAgICAgICAgICBpZiBzZWxmX25hbiA9PSAxOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX05lZ2F0aXZlT25lCi0gICAgICAgICAgICAgICAgaWYgb3RoZXJfbmFuID09IDE6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfT25lCi0gICAgICAgICAgICAgICAgaWYgc2VsZl9uYW4gPT0gMjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQotICAgICAgICAgICAgICAgIGlmIG90aGVyX25hbiA9PSAyOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX09uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzZWxmX25hbiA9PSAxOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX09uZQotICAgICAgICAgICAgICAgIGlmIG90aGVyX25hbiA9PSAxOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX05lZ2F0aXZlT25lCi0gICAgICAgICAgICAgICAgaWYgc2VsZl9uYW4gPT0gMjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9PbmUKLSAgICAgICAgICAgICAgICBpZiBvdGhlcl9uYW4gPT0gMjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZU9uZQotCi0gICAgICAgIGlmIHNlbGYgPCBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiBfTmVnYXRpdmVPbmUKLSAgICAgICAgaWYgc2VsZiA+IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIF9PbmUKLQotICAgICAgICBpZiBzZWxmLl9leHAgPCBvdGhlci5fZXhwOgotICAgICAgICAgICAgaWYgc2lnbjoKLSAgICAgICAgICAgICAgICByZXR1cm4gX09uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gX05lZ2F0aXZlT25lCi0gICAgICAgIGlmIHNlbGYuX2V4cCA+IG90aGVyLl9leHA6Ci0gICAgICAgICAgICBpZiBzaWduOgotICAgICAgICAgICAgICAgIHJldHVybiBfTmVnYXRpdmVPbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9PbmUKLSAgICAgICAgcmV0dXJuIF9aZXJvCi0KLQotICAgIGRlZiBjb21wYXJlX3RvdGFsX21hZyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiQ29tcGFyZXMgc2VsZiB0byBvdGhlciB1c2luZyBhYnN0cmFjdCByZXByLiwgaWdub3Jpbmcgc2lnbi4KLQotICAgICAgICBMaWtlIGNvbXBhcmVfdG90YWwsIGJ1dCB3aXRoIG9wZXJhbmQncyBzaWduIGlnbm9yZWQgYW5kIGFzc3VtZWQgdG8gYmUgMC4KLSAgICAgICAgIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKLQotICAgICAgICBzID0gc2VsZi5jb3B5X2FicygpCi0gICAgICAgIG8gPSBvdGhlci5jb3B5X2FicygpCi0gICAgICAgIHJldHVybiBzLmNvbXBhcmVfdG90YWwobykKLQotICAgIGRlZiBjb3B5X2FicyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGNvcHkgd2l0aCB0aGUgc2lnbiBzZXQgdG8gMC4gIiIiCi0gICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsIHNlbGYuX2ludCwgc2VsZi5fZXhwLCBzZWxmLl9pc19zcGVjaWFsKQotCi0gICAgZGVmIGNvcHlfbmVnYXRlKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgY29weSB3aXRoIHRoZSBzaWduIGludmVydGVkLiIiIgotICAgICAgICBpZiBzZWxmLl9zaWduOgotICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoMCwgc2VsZi5faW50LCBzZWxmLl9leHAsIHNlbGYuX2lzX3NwZWNpYWwpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZSgxLCBzZWxmLl9pbnQsIHNlbGYuX2V4cCwgc2VsZi5faXNfc3BlY2lhbCkKLQotICAgIGRlZiBjb3B5X3NpZ24oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybnMgc2VsZiB3aXRoIHRoZSBzaWduIG9mIG90aGVyLiIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKG90aGVyLl9zaWduLCBzZWxmLl9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cCwgc2VsZi5faXNfc3BlY2lhbCkKLQotICAgIGRlZiBleHAoc2VsZiwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyBlICoqIHNlbGYuIiIiCi0KLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgICMgZXhwKE5hTikgPSBOYU4KLSAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCi0gICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICAjIGV4cCgtSW5maW5pdHkpID0gMAotICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgPT0gLTE6Ci0gICAgICAgICAgICByZXR1cm4gX1plcm8KLQotICAgICAgICAjIGV4cCgwKSA9IDEKLSAgICAgICAgaWYgbm90IHNlbGY6Ci0gICAgICAgICAgICByZXR1cm4gX09uZQotCi0gICAgICAgICMgZXhwKEluZmluaXR5KSA9IEluZmluaXR5Ci0gICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSA9PSAxOgotICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKLQotICAgICAgICAjIHRoZSByZXN1bHQgaXMgbm93IGd1YXJhbnRlZWQgdG8gYmUgaW5leGFjdCAodGhlIHRydWUKLSAgICAgICAgIyBtYXRoZW1hdGljYWwgcmVzdWx0IGlzIHRyYW5zY2VuZGVudGFsKS4gVGhlcmUncyBubyBuZWVkIHRvCi0gICAgICAgICMgcmFpc2UgUm91bmRlZCBhbmQgSW5leGFjdCBoZXJlLS0tdGhleSdsbCBhbHdheXMgYmUgcmFpc2VkIGFzCi0gICAgICAgICMgYSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gX2ZpeC4KLSAgICAgICAgcCA9IGNvbnRleHQucHJlYwotICAgICAgICBhZGogPSBzZWxmLmFkanVzdGVkKCkKLQotICAgICAgICAjIHdlIG9ubHkgbmVlZCB0byBkbyBhbnkgY29tcHV0YXRpb24gZm9yIHF1aXRlIGEgc21hbGwgcmFuZ2UKLSAgICAgICAgIyBvZiBhZGp1c3RlZCBleHBvbmVudHMtLS1mb3IgZXhhbXBsZSwgLTI5IDw9IGFkaiA8PSAxMCBmb3IKLSAgICAgICAgIyB0aGUgZGVmYXVsdCBjb250ZXh0LiAgRm9yIHNtYWxsZXIgZXhwb25lbnQgdGhlIHJlc3VsdCBpcwotICAgICAgICAjIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gMSBhdCB0aGUgZ2l2ZW4gcHJlY2lzaW9uLCB3aGlsZSBmb3IKLSAgICAgICAgIyBsYXJnZXIgZXhwb25lbnQgdGhlIHJlc3VsdCBlaXRoZXIgb3ZlcmZsb3dzIG9yIHVuZGVyZmxvd3MuCi0gICAgICAgIGlmIHNlbGYuX3NpZ24gPT0gMCBhbmQgYWRqID4gbGVuKHN0cigoY29udGV4dC5FbWF4KzEpKjMpKToKLSAgICAgICAgICAgICMgb3ZlcmZsb3cKLSAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoMCwgJzEnLCBjb250ZXh0LkVtYXgrMSkKLSAgICAgICAgZWxpZiBzZWxmLl9zaWduID09IDEgYW5kIGFkaiA+IGxlbihzdHIoKC1jb250ZXh0LkV0aW55KCkrMSkqMykpOgotICAgICAgICAgICAgIyB1bmRlcmZsb3cgdG8gMAotICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZSgwLCAnMScsIGNvbnRleHQuRXRpbnkoKS0xKQotICAgICAgICBlbGlmIHNlbGYuX3NpZ24gPT0gMCBhbmQgYWRqIDwgLXA6Ci0gICAgICAgICAgICAjIHArMSBkaWdpdHM7IGZpbmFsIHJvdW5kIHdpbGwgcmFpc2UgY29ycmVjdCBmbGFncwotICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZSgwLCAnMScgKyAnMCcqKHAtMSkgKyAnMScsIC1wKQotICAgICAgICBlbGlmIHNlbGYuX3NpZ24gPT0gMSBhbmQgYWRqIDwgLXAtMToKLSAgICAgICAgICAgICMgcCsxIGRpZ2l0czsgZmluYWwgcm91bmQgd2lsbCByYWlzZSBjb3JyZWN0IGZsYWdzCi0gICAgICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKDAsICc5JyoocCsxKSwgLXAtMSkKLSAgICAgICAgIyBnZW5lcmFsIGNhc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZikKLSAgICAgICAgICAgIGMsIGUgPSBvcC5pbnQsIG9wLmV4cAotICAgICAgICAgICAgaWYgb3Auc2lnbiA9PSAxOgotICAgICAgICAgICAgICAgIGMgPSAtYwotCi0gICAgICAgICAgICAjIGNvbXB1dGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0OiBpbmNyZWFzZSBwcmVjaXNpb24gYnkKLSAgICAgICAgICAgICMgMyBkaWdpdHMgYXQgYSB0aW1lIHVudGlsIHdlIGdldCBhbiB1bmFtYmlndW91c2x5Ci0gICAgICAgICAgICAjIHJvdW5kYWJsZSByZXN1bHQKLSAgICAgICAgICAgIGV4dHJhID0gMwotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBjb2VmZiwgZXhwID0gX2RleHAoYywgZSwgcCtleHRyYSkKLSAgICAgICAgICAgICAgICBpZiBjb2VmZiAlICg1KjEwKioobGVuKHN0cihjb2VmZikpLXAtMSkpOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGV4dHJhICs9IDMKLQotICAgICAgICAgICAgYW5zID0gX2RlY19mcm9tX3RyaXBsZSgwLCBzdHIoY29lZmYpLCBleHApCi0KLSAgICAgICAgIyBhdCB0aGlzIHN0YWdlLCBhbnMgc2hvdWxkIHJvdW5kIGNvcnJlY3RseSB3aXRoICphbnkqCi0gICAgICAgICMgcm91bmRpbmcgbW9kZSwgbm90IGp1c3Qgd2l0aCBST1VORF9IQUxGX0VWRU4KLSAgICAgICAgY29udGV4dCA9IGNvbnRleHQuX3NoYWxsb3dfY29weSgpCi0gICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5fc2V0X3JvdW5kaW5nKFJPVU5EX0hBTEZfRVZFTikKLSAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLSAgICAgICAgY29udGV4dC5yb3VuZGluZyA9IHJvdW5kaW5nCi0KLSAgICAgICAgcmV0dXJuIGFucwotCi0gICAgZGVmIGlzX2Nhbm9uaWNhbChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgc2VsZiBpcyBjYW5vbmljYWw7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCi0KLSAgICAgICAgQ3VycmVudGx5LCB0aGUgZW5jb2Rpbmcgb2YgYSBEZWNpbWFsIGluc3RhbmNlIGlzIGFsd2F5cwotICAgICAgICBjYW5vbmljYWwsIHNvIHRoaXMgbWV0aG9kIHJldHVybnMgVHJ1ZSBmb3IgYW55IERlY2ltYWwuCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGlzX2Zpbml0ZShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgc2VsZiBpcyBmaW5pdGU7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCi0KLSAgICAgICAgQSBEZWNpbWFsIGluc3RhbmNlIGlzIGNvbnNpZGVyZWQgZmluaXRlIGlmIGl0IGlzIG5laXRoZXIKLSAgICAgICAgaW5maW5pdGUgbm9yIGEgTmFOLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9pc19zcGVjaWFsCi0KLSAgICBkZWYgaXNfaW5maW5pdGUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgaW5maW5pdGU7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9leHAgPT0gJ0YnCi0KLSAgICBkZWYgaXNfbmFuKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzZWxmIGlzIGEgcU5hTiBvciBzTmFOOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZXhwIGluICgnbicsICdOJykKLQotICAgIGRlZiBpc19ub3JtYWwoc2VsZiwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgc2VsZiBpcyBhIG5vcm1hbCBudW1iZXI7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIiIiCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igbm90IHNlbGY6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotICAgICAgICByZXR1cm4gY29udGV4dC5FbWluIDw9IHNlbGYuYWRqdXN0ZWQoKQotCi0gICAgZGVmIGlzX3FuYW4oc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgYSBxdWlldCBOYU47IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9leHAgPT0gJ24nCi0KLSAgICBkZWYgaXNfc2lnbmVkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzZWxmIGlzIG5lZ2F0aXZlOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fc2lnbiA9PSAxCi0KLSAgICBkZWYgaXNfc25hbihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgc2VsZiBpcyBhIHNpZ25hbGluZyBOYU47IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9leHAgPT0gJ04nCi0KLSAgICBkZWYgaXNfc3Vibm9ybWFsKHNlbGYsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgc3Vibm9ybWFsOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsIG9yIG5vdCBzZWxmOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYuYWRqdXN0ZWQoKSA8IGNvbnRleHQuRW1pbgotCi0gICAgZGVmIGlzX3plcm8oc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgYSB6ZXJvOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgotICAgICAgICByZXR1cm4gbm90IHNlbGYuX2lzX3NwZWNpYWwgYW5kIHNlbGYuX2ludCA9PSAnMCcKLQotICAgIGRlZiBfbG5fZXhwX2JvdW5kKHNlbGYpOgotICAgICAgICAiIiJDb21wdXRlIGEgbG93ZXIgYm91bmQgZm9yIHRoZSBhZGp1c3RlZCBleHBvbmVudCBvZiBzZWxmLmxuKCkuCi0gICAgICAgIEluIG90aGVyIHdvcmRzLCBjb21wdXRlIHIgc3VjaCB0aGF0IHNlbGYubG4oKSA+PSAxMCoqci4gIEFzc3VtZXMKLSAgICAgICAgdGhhdCBzZWxmIGlzIGZpbml0ZSBhbmQgcG9zaXRpdmUgYW5kIHRoYXQgc2VsZiAhPSAxLgotICAgICAgICAiIiIKLQotICAgICAgICAjIGZvciAwLjEgPD0geCA8PSAxMCB3ZSB1c2UgdGhlIGluZXF1YWxpdGllcyAxLTEveCA8PSBsbih4KSA8PSB4LTEKLSAgICAgICAgYWRqID0gc2VsZi5fZXhwICsgbGVuKHNlbGYuX2ludCkgLSAxCi0gICAgICAgIGlmIGFkaiA+PSAxOgotICAgICAgICAgICAgIyBhcmd1bWVudCA+PSAxMDsgd2UgdXNlIDIzLzEwID0gMi4zIGFzIGEgbG93ZXIgYm91bmQgZm9yIGxuKDEwKQotICAgICAgICAgICAgcmV0dXJuIGxlbihzdHIoYWRqKjIzLy8xMCkpIC0gMQotICAgICAgICBpZiBhZGogPD0gLTI6Ci0gICAgICAgICAgICAjIGFyZ3VtZW50IDw9IDAuMQotICAgICAgICAgICAgcmV0dXJuIGxlbihzdHIoKC0xLWFkaikqMjMvLzEwKSkgLSAxCi0gICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZikKLSAgICAgICAgYywgZSA9IG9wLmludCwgb3AuZXhwCi0gICAgICAgIGlmIGFkaiA9PSAwOgotICAgICAgICAgICAgIyAxIDwgc2VsZiA8IDEwCi0gICAgICAgICAgICBudW0gPSBzdHIoYy0xMCoqLWUpCi0gICAgICAgICAgICBkZW4gPSBzdHIoYykKLSAgICAgICAgICAgIHJldHVybiBsZW4obnVtKSAtIGxlbihkZW4pIC0gKG51bSA8IGRlbikKLSAgICAgICAgIyBhZGogPT0gLTEsIDAuMSA8PSBzZWxmIDwgMQotICAgICAgICByZXR1cm4gZSArIGxlbihzdHIoMTAqKi1lIC0gYykpIC0gMQotCi0KLSAgICBkZWYgbG4oc2VsZiwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgbmF0dXJhbCAoYmFzZSBlKSBsb2dhcml0aG0gb2Ygc2VsZi4iIiIKLQotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0KLSAgICAgICAgIyBsbihOYU4pID0gTmFOCi0gICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMoY29udGV4dD1jb250ZXh0KQotICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgIyBsbigwLjApID09IC1JbmZpbml0eQotICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgIHJldHVybiBfTmVnYXRpdmVJbmZpbml0eQotCi0gICAgICAgICMgbG4oSW5maW5pdHkpID0gSW5maW5pdHkKLSAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gX0luZmluaXR5Ci0KLSAgICAgICAgIyBsbigxLjApID09IDAuMAotICAgICAgICBpZiBzZWxmID09IF9PbmU6Ci0gICAgICAgICAgICByZXR1cm4gX1plcm8KLQotICAgICAgICAjIGxuKG5lZ2F0aXZlKSByYWlzZXMgSW52YWxpZE9wZXJhdGlvbgotICAgICAgICBpZiBzZWxmLl9zaWduID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG4gb2YgYSBuZWdhdGl2ZSB2YWx1ZScpCi0KLSAgICAgICAgIyByZXN1bHQgaXMgaXJyYXRpb25hbCwgc28gbmVjZXNzYXJpbHkgaW5leGFjdAotICAgICAgICBvcCA9IF9Xb3JrUmVwKHNlbGYpCi0gICAgICAgIGMsIGUgPSBvcC5pbnQsIG9wLmV4cAotICAgICAgICBwID0gY29udGV4dC5wcmVjCi0KLSAgICAgICAgIyBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQ6IHJlcGVhdGVkbHkgaW5jcmVhc2UgcHJlY2lzaW9uIGJ5IDMKLSAgICAgICAgIyB1bnRpbCB3ZSBnZXQgYW4gdW5hbWJpZ3VvdXNseSByb3VuZGFibGUgcmVzdWx0Ci0gICAgICAgIHBsYWNlcyA9IHAgLSBzZWxmLl9sbl9leHBfYm91bmQoKSArIDIgIyBhdCBsZWFzdCBwKzMgcGxhY2VzCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBjb2VmZiA9IF9kbG9nKGMsIGUsIHBsYWNlcykKLSAgICAgICAgICAgICMgYXNzZXJ0IGxlbihzdHIoYWJzKGNvZWZmKSkpLXAgPj0gMQotICAgICAgICAgICAgaWYgY29lZmYgJSAoNSoxMCoqKGxlbihzdHIoYWJzKGNvZWZmKSkpLXAtMSkpOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBwbGFjZXMgKz0gMwotICAgICAgICBhbnMgPSBfZGVjX2Zyb21fdHJpcGxlKGludChjb2VmZjwwKSwgc3RyKGFicyhjb2VmZikpLCAtcGxhY2VzKQotCi0gICAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9zaGFsbG93X2NvcHkoKQotICAgICAgICByb3VuZGluZyA9IGNvbnRleHQuX3NldF9yb3VuZGluZyhST1VORF9IQUxGX0VWRU4pCi0gICAgICAgIGFucyA9IGFucy5fZml4KGNvbnRleHQpCi0gICAgICAgIGNvbnRleHQucm91bmRpbmcgPSByb3VuZGluZwotICAgICAgICByZXR1cm4gYW5zCi0KLSAgICBkZWYgX2xvZzEwX2V4cF9ib3VuZChzZWxmKToKLSAgICAgICAgIiIiQ29tcHV0ZSBhIGxvd2VyIGJvdW5kIGZvciB0aGUgYWRqdXN0ZWQgZXhwb25lbnQgb2Ygc2VsZi5sb2cxMCgpLgotICAgICAgICBJbiBvdGhlciB3b3JkcywgZmluZCByIHN1Y2ggdGhhdCBzZWxmLmxvZzEwKCkgPj0gMTAqKnIuCi0gICAgICAgIEFzc3VtZXMgdGhhdCBzZWxmIGlzIGZpbml0ZSBhbmQgcG9zaXRpdmUgYW5kIHRoYXQgc2VsZiAhPSAxLgotICAgICAgICAiIiIKLQotICAgICAgICAjIEZvciB4ID49IDEwIG9yIHggPCAwLjEgd2Ugb25seSBuZWVkIGEgYm91bmQgb24gdGhlIGludGVnZXIKLSAgICAgICAgIyBwYXJ0IG9mIGxvZzEwKHNlbGYpLCBhbmQgdGhpcyBjb21lcyBkaXJlY3RseSBmcm9tIHRoZQotICAgICAgICAjIGV4cG9uZW50IG9mIHguICBGb3IgMC4xIDw9IHggPD0gMTAgd2UgdXNlIHRoZSBpbmVxdWFsaXRpZXMKLSAgICAgICAgIyAxLTEveCA8PSBsb2coeCkgPD0geC0xLiBJZiB4ID4gMSB3ZSBoYXZlIHxsb2cxMCh4KXwgPgotICAgICAgICAjICgxLTEveCkvMi4zMSA+IDAuICBJZiB4IDwgMSB0aGVuIHxsb2cxMCh4KXwgPiAoMS14KS8yLjMxID4gMAotCi0gICAgICAgIGFkaiA9IHNlbGYuX2V4cCArIGxlbihzZWxmLl9pbnQpIC0gMQotICAgICAgICBpZiBhZGogPj0gMToKLSAgICAgICAgICAgICMgc2VsZiA+PSAxMAotICAgICAgICAgICAgcmV0dXJuIGxlbihzdHIoYWRqKSktMQotICAgICAgICBpZiBhZGogPD0gLTI6Ci0gICAgICAgICAgICAjIHNlbGYgPCAwLjEKLSAgICAgICAgICAgIHJldHVybiBsZW4oc3RyKC0xLWFkaikpLTEKLSAgICAgICAgb3AgPSBfV29ya1JlcChzZWxmKQotICAgICAgICBjLCBlID0gb3AuaW50LCBvcC5leHAKLSAgICAgICAgaWYgYWRqID09IDA6Ci0gICAgICAgICAgICAjIDEgPCBzZWxmIDwgMTAKLSAgICAgICAgICAgIG51bSA9IHN0cihjLTEwKiotZSkKLSAgICAgICAgICAgIGRlbiA9IHN0cigyMzEqYykKLSAgICAgICAgICAgIHJldHVybiBsZW4obnVtKSAtIGxlbihkZW4pIC0gKG51bSA8IGRlbikgKyAyCi0gICAgICAgICMgYWRqID09IC0xLCAwLjEgPD0gc2VsZiA8IDEKLSAgICAgICAgbnVtID0gc3RyKDEwKiotZS1jKQotICAgICAgICByZXR1cm4gbGVuKG51bSkgKyBlIC0gKG51bSA8ICIyMzEiKSAtIDEKLQotICAgIGRlZiBsb2cxMChzZWxmLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiBzZWxmLiIiIgotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICAjIGxvZzEwKE5hTikgPSBOYU4KLSAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhjb250ZXh0PWNvbnRleHQpCi0gICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICAjIGxvZzEwKDAuMCkgPT0gLUluZmluaXR5Ci0gICAgICAgIGlmIG5vdCBzZWxmOgotICAgICAgICAgICAgcmV0dXJuIF9OZWdhdGl2ZUluZmluaXR5Ci0KLSAgICAgICAgIyBsb2cxMChJbmZpbml0eSkgPSBJbmZpbml0eQotICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgPT0gMToKLSAgICAgICAgICAgIHJldHVybiBfSW5maW5pdHkKLQotICAgICAgICAjIGxvZzEwKG5lZ2F0aXZlIG9yIC1JbmZpbml0eSkgcmFpc2VzIEludmFsaWRPcGVyYXRpb24KLSAgICAgICAgaWYgc2VsZi5fc2lnbiA9PSAxOgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZzEwIG9mIGEgbmVnYXRpdmUgdmFsdWUnKQotCi0gICAgICAgICMgbG9nMTAoMTAqKm4pID0gbgotICAgICAgICBpZiBzZWxmLl9pbnRbMF0gPT0gJzEnIGFuZCBzZWxmLl9pbnRbMTpdID09ICcwJyoobGVuKHNlbGYuX2ludCkgLSAxKToKLSAgICAgICAgICAgICMgYW5zd2VyIG1heSBuZWVkIHJvdW5kaW5nCi0gICAgICAgICAgICBhbnMgPSBEZWNpbWFsKHNlbGYuX2V4cCArIGxlbihzZWxmLl9pbnQpIC0gMSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgcmVzdWx0IGlzIGlycmF0aW9uYWwsIHNvIG5lY2Vzc2FyaWx5IGluZXhhY3QKLSAgICAgICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZikKLSAgICAgICAgICAgIGMsIGUgPSBvcC5pbnQsIG9wLmV4cAotICAgICAgICAgICAgcCA9IGNvbnRleHQucHJlYwotCi0gICAgICAgICAgICAjIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdDogcmVwZWF0ZWRseSBpbmNyZWFzZSBwcmVjaXNpb24KLSAgICAgICAgICAgICMgdW50aWwgcmVzdWx0IGlzIHVuYW1iaWd1b3VzbHkgcm91bmRhYmxlCi0gICAgICAgICAgICBwbGFjZXMgPSBwLXNlbGYuX2xvZzEwX2V4cF9ib3VuZCgpKzIKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgY29lZmYgPSBfZGxvZzEwKGMsIGUsIHBsYWNlcykKLSAgICAgICAgICAgICAgICAjIGFzc2VydCBsZW4oc3RyKGFicyhjb2VmZikpKS1wID49IDEKLSAgICAgICAgICAgICAgICBpZiBjb2VmZiAlICg1KjEwKioobGVuKHN0cihhYnMoY29lZmYpKSktcC0xKSk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgcGxhY2VzICs9IDMKLSAgICAgICAgICAgIGFucyA9IF9kZWNfZnJvbV90cmlwbGUoaW50KGNvZWZmPDApLCBzdHIoYWJzKGNvZWZmKSksIC1wbGFjZXMpCi0KLSAgICAgICAgY29udGV4dCA9IGNvbnRleHQuX3NoYWxsb3dfY29weSgpCi0gICAgICAgIHJvdW5kaW5nID0gY29udGV4dC5fc2V0X3JvdW5kaW5nKFJPVU5EX0hBTEZfRVZFTikKLSAgICAgICAgYW5zID0gYW5zLl9maXgoY29udGV4dCkKLSAgICAgICAgY29udGV4dC5yb3VuZGluZyA9IHJvdW5kaW5nCi0gICAgICAgIHJldHVybiBhbnMKLQotICAgIGRlZiBsb2diKHNlbGYsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIiBSZXR1cm5zIHRoZSBleHBvbmVudCBvZiB0aGUgbWFnbml0dWRlIG9mIHNlbGYncyBNU0QuCi0KLSAgICAgICAgVGhlIHJlc3VsdCBpcyB0aGUgaW50ZWdlciB3aGljaCBpcyB0aGUgZXhwb25lbnQgb2YgdGhlIG1hZ25pdHVkZQotICAgICAgICBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWdpdCBvZiBzZWxmIChhcyB0aG91Z2ggaXQgd2VyZSB0cnVuY2F0ZWQKLSAgICAgICAgdG8gYSBzaW5nbGUgZGlnaXQgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIHZhbHVlIG9mIHRoYXQgZGlnaXQgYW5kCi0gICAgICAgIHdpdGhvdXQgbGltaXRpbmcgdGhlIHJlc3VsdGluZyBleHBvbmVudCkuCi0gICAgICAgICIiIgotICAgICAgICAjIGxvZ2IoTmFOKSA9IE5hTgotICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKLSAgICAgICAgaWYgYW5zOgotICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICAjIGxvZ2IoKy8tSW5mKSA9ICtJbmYKLSAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgotICAgICAgICAgICAgcmV0dXJuIF9JbmZpbml0eQotCi0gICAgICAgICMgbG9nYigwKSA9IC1JbmYsIERpdmlzaW9uQnlaZXJvCi0gICAgICAgIGlmIG5vdCBzZWxmOgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKERpdmlzaW9uQnlaZXJvLCAnbG9nYigwKScsIDEpCi0KLSAgICAgICAgIyBvdGhlcndpc2UsIHNpbXBseSByZXR1cm4gdGhlIGFkanVzdGVkIGV4cG9uZW50IG9mIHNlbGYsIGFzIGEKLSAgICAgICAgIyBEZWNpbWFsLiAgTm90ZSB0aGF0IG5vIGF0dGVtcHQgaXMgbWFkZSB0byBmaXQgdGhlIHJlc3VsdAotICAgICAgICAjIGludG8gdGhlIGN1cnJlbnQgY29udGV4dC4KLSAgICAgICAgYW5zID0gRGVjaW1hbChzZWxmLmFkanVzdGVkKCkpCi0gICAgICAgIHJldHVybiBhbnMuX2ZpeChjb250ZXh0KQotCi0gICAgZGVmIF9pc2xvZ2ljYWwoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHNlbGYgaXMgYSBsb2dpY2FsIG9wZXJhbmQuCi0KLSAgICAgICAgRm9yIGJlaW5nIGxvZ2ljYWwsIGl0IG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyIHdpdGggYSBzaWduIG9mIDAsCi0gICAgICAgIGFuIGV4cG9uZW50IG9mIDAsIGFuZCBhIGNvZWZmaWNpZW50IHdob3NlIGRpZ2l0cyBtdXN0IGFsbCBiZQotICAgICAgICBlaXRoZXIgMCBvciAxLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5fc2lnbiAhPSAwIG9yIHNlbGYuX2V4cCAhPSAwOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGZvciBkaWcgaW4gc2VsZi5faW50OgotICAgICAgICAgICAgaWYgZGlnIG5vdCBpbiAnMDEnOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9maWxsX2xvZ2ljYWwoc2VsZiwgY29udGV4dCwgb3BhLCBvcGIpOgotICAgICAgICBkaWYgPSBjb250ZXh0LnByZWMgLSBsZW4ob3BhKQotICAgICAgICBpZiBkaWYgPiAwOgotICAgICAgICAgICAgb3BhID0gJzAnKmRpZiArIG9wYQotICAgICAgICBlbGlmIGRpZiA8IDA6Ci0gICAgICAgICAgICBvcGEgPSBvcGFbLWNvbnRleHQucHJlYzpdCi0gICAgICAgIGRpZiA9IGNvbnRleHQucHJlYyAtIGxlbihvcGIpCi0gICAgICAgIGlmIGRpZiA+IDA6Ci0gICAgICAgICAgICBvcGIgPSAnMCcqZGlmICsgb3BiCi0gICAgICAgIGVsaWYgZGlmIDwgMDoKLSAgICAgICAgICAgIG9wYiA9IG9wYlstY29udGV4dC5wcmVjOl0KLSAgICAgICAgcmV0dXJuIG9wYSwgb3BiCi0KLSAgICBkZWYgbG9naWNhbF9hbmQoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIkFwcGxpZXMgYW4gJ2FuZCcgb3BlcmF0aW9uIGJldHdlZW4gc2VsZiBhbmQgb3RoZXIncyBkaWdpdHMuIiIiCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCi0KLSAgICAgICAgaWYgbm90IHNlbGYuX2lzbG9naWNhbCgpIG9yIG5vdCBvdGhlci5faXNsb2dpY2FsKCk6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbikKLQotICAgICAgICAjIGZpbGwgdG8gY29udGV4dC5wcmVjCi0gICAgICAgIChvcGEsIG9wYikgPSBzZWxmLl9maWxsX2xvZ2ljYWwoY29udGV4dCwgc2VsZi5faW50LCBvdGhlci5faW50KQotCi0gICAgICAgICMgbWFrZSB0aGUgb3BlcmF0aW9uLCBhbmQgY2xlYW4gc3RhcnRpbmcgemVyb2VzCi0gICAgICAgIHJlc3VsdCA9ICIiLmpvaW4oW3N0cihpbnQoYSkmaW50KGIpKSBmb3IgYSxiIGluIHppcChvcGEsb3BiKV0pCi0gICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsIHJlc3VsdC5sc3RyaXAoJzAnKSBvciAnMCcsIDApCi0KLSAgICBkZWYgbG9naWNhbF9pbnZlcnQoc2VsZiwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiSW52ZXJ0IGFsbCBpdHMgZGlnaXRzLiIiIgotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0gICAgICAgIHJldHVybiBzZWxmLmxvZ2ljYWxfeG9yKF9kZWNfZnJvbV90cmlwbGUoMCwnMScqY29udGV4dC5wcmVjLDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KQotCi0gICAgZGVmIGxvZ2ljYWxfb3Ioc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIkFwcGxpZXMgYW4gJ29yJyBvcGVyYXRpb24gYmV0d2VlbiBzZWxmIGFuZCBvdGhlcidzIGRpZ2l0cy4iIiIKLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKLQotICAgICAgICBpZiBub3Qgc2VsZi5faXNsb2dpY2FsKCkgb3Igbm90IG90aGVyLl9pc2xvZ2ljYWwoKToKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uKQotCi0gICAgICAgICMgZmlsbCB0byBjb250ZXh0LnByZWMKLSAgICAgICAgKG9wYSwgb3BiKSA9IHNlbGYuX2ZpbGxfbG9naWNhbChjb250ZXh0LCBzZWxmLl9pbnQsIG90aGVyLl9pbnQpCi0KLSAgICAgICAgIyBtYWtlIHRoZSBvcGVyYXRpb24sIGFuZCBjbGVhbiBzdGFydGluZyB6ZXJvZXMKLSAgICAgICAgcmVzdWx0ID0gIiIuam9pbihbc3RyKGludChhKXxpbnQoYikpIGZvciBhLGIgaW4gemlwKG9wYSxvcGIpXSkKLSAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoMCwgcmVzdWx0LmxzdHJpcCgnMCcpIG9yICcwJywgMCkKLQotICAgIGRlZiBsb2dpY2FsX3hvcihzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiQXBwbGllcyBhbiAneG9yJyBvcGVyYXRpb24gYmV0d2VlbiBzZWxmIGFuZCBvdGhlcidzIGRpZ2l0cy4iIiIKLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKLQotICAgICAgICBpZiBub3Qgc2VsZi5faXNsb2dpY2FsKCkgb3Igbm90IG90aGVyLl9pc2xvZ2ljYWwoKToKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uKQotCi0gICAgICAgICMgZmlsbCB0byBjb250ZXh0LnByZWMKLSAgICAgICAgKG9wYSwgb3BiKSA9IHNlbGYuX2ZpbGxfbG9naWNhbChjb250ZXh0LCBzZWxmLl9pbnQsIG90aGVyLl9pbnQpCi0KLSAgICAgICAgIyBtYWtlIHRoZSBvcGVyYXRpb24sIGFuZCBjbGVhbiBzdGFydGluZyB6ZXJvZXMKLSAgICAgICAgcmVzdWx0ID0gIiIuam9pbihbc3RyKGludChhKV5pbnQoYikpIGZvciBhLGIgaW4gemlwKG9wYSxvcGIpXSkKLSAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoMCwgcmVzdWx0LmxzdHJpcCgnMCcpIG9yICcwJywgMCkKLQotICAgIGRlZiBtYXhfbWFnKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJDb21wYXJlcyB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLiIiIgotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCi0KLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWwgb3Igb3RoZXIuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICAjIElmIG9uZSBvcGVyYW5kIGlzIGEgcXVpZXQgTmFOIGFuZCB0aGUgb3RoZXIgaXMgbnVtYmVyLCB0aGVuIHRoZQotICAgICAgICAgICAgIyBudW1iZXIgaXMgYWx3YXlzIHJldHVybmVkCi0gICAgICAgICAgICBzbiA9IHNlbGYuX2lzbmFuKCkKLSAgICAgICAgICAgIG9uID0gb3RoZXIuX2lzbmFuKCkKLSAgICAgICAgICAgIGlmIHNuIG9yIG9uOgotICAgICAgICAgICAgICAgIGlmIG9uID09IDEgYW5kIHNuID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgoY29udGV4dCkKLSAgICAgICAgICAgICAgICBpZiBzbiA9PSAxIGFuZCBvbiA9PSAwOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIuX2ZpeChjb250ZXh0KQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotCi0gICAgICAgIGMgPSBzZWxmLmNvcHlfYWJzKCkuX2NtcChvdGhlci5jb3B5X2FicygpKQotICAgICAgICBpZiBjID09IDA6Ci0gICAgICAgICAgICBjID0gc2VsZi5jb21wYXJlX3RvdGFsKG90aGVyKQotCi0gICAgICAgIGlmIGMgPT0gLTE6Ci0gICAgICAgICAgICBhbnMgPSBvdGhlcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYW5zID0gc2VsZgotCi0gICAgICAgIHJldHVybiBhbnMuX2ZpeChjb250ZXh0KQotCi0gICAgZGVmIG1pbl9tYWcoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgbnVtZXJpY2FsbHkgd2l0aCB0aGVpciBzaWduIGlnbm9yZWQuIiIiCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKLQotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0KLSAgICAgICAgaWYgc2VsZi5faXNfc3BlY2lhbCBvciBvdGhlci5faXNfc3BlY2lhbDoKLSAgICAgICAgICAgICMgSWYgb25lIG9wZXJhbmQgaXMgYSBxdWlldCBOYU4gYW5kIHRoZSBvdGhlciBpcyBudW1iZXIsIHRoZW4gdGhlCi0gICAgICAgICAgICAjIG51bWJlciBpcyBhbHdheXMgcmV0dXJuZWQKLSAgICAgICAgICAgIHNuID0gc2VsZi5faXNuYW4oKQotICAgICAgICAgICAgb24gPSBvdGhlci5faXNuYW4oKQotICAgICAgICAgICAgaWYgc24gb3Igb246Ci0gICAgICAgICAgICAgICAgaWYgb24gPT0gMSBhbmQgc24gPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeChjb250ZXh0KQotICAgICAgICAgICAgICAgIGlmIHNuID09IDEgYW5kIG9uID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlci5fZml4KGNvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCi0KLSAgICAgICAgYyA9IHNlbGYuY29weV9hYnMoKS5fY21wKG90aGVyLmNvcHlfYWJzKCkpCi0gICAgICAgIGlmIGMgPT0gMDoKLSAgICAgICAgICAgIGMgPSBzZWxmLmNvbXBhcmVfdG90YWwob3RoZXIpCi0KLSAgICAgICAgaWYgYyA9PSAtMToKLSAgICAgICAgICAgIGFucyA9IHNlbGYKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFucyA9IG90aGVyCi0KLSAgICAgICAgcmV0dXJuIGFucy5fZml4KGNvbnRleHQpCi0KLSAgICBkZWYgbmV4dF9taW51cyhzZWxmLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIHNtYWxsZXIgdGhhbiBpdHNlbGYuIiIiCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKLSAgICAgICAgaWYgYW5zOgotICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSA9PSAtMToKLSAgICAgICAgICAgIHJldHVybiBfTmVnYXRpdmVJbmZpbml0eQotICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgPT0gMToKLSAgICAgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsICc5Jypjb250ZXh0LnByZWMsIGNvbnRleHQuRXRvcCgpKQotCi0gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNvcHkoKQotICAgICAgICBjb250ZXh0Ll9zZXRfcm91bmRpbmcoUk9VTkRfRkxPT1IpCi0gICAgICAgIGNvbnRleHQuX2lnbm9yZV9hbGxfZmxhZ3MoKQotICAgICAgICBuZXdfc2VsZiA9IHNlbGYuX2ZpeChjb250ZXh0KQotICAgICAgICBpZiBuZXdfc2VsZiAhPSBzZWxmOgotICAgICAgICAgICAgcmV0dXJuIG5ld19zZWxmCi0gICAgICAgIHJldHVybiBzZWxmLl9fc3ViX18oX2RlY19mcm9tX3RyaXBsZSgwLCAnMScsIGNvbnRleHQuRXRpbnkoKS0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KQotCi0gICAgZGVmIG5leHRfcGx1cyhzZWxmLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBzbWFsbGVzdCByZXByZXNlbnRhYmxlIG51bWJlciBsYXJnZXIgdGhhbiBpdHNlbGYuIiIiCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKGNvbnRleHQ9Y29udGV4dCkKLSAgICAgICAgaWYgYW5zOgotICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKSA9PSAxOgotICAgICAgICAgICAgcmV0dXJuIF9JbmZpbml0eQotICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCkgPT0gLTE6Ci0gICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZSgxLCAnOScqY29udGV4dC5wcmVjLCBjb250ZXh0LkV0b3AoKSkKLQotICAgICAgICBjb250ZXh0ID0gY29udGV4dC5jb3B5KCkKLSAgICAgICAgY29udGV4dC5fc2V0X3JvdW5kaW5nKFJPVU5EX0NFSUxJTkcpCi0gICAgICAgIGNvbnRleHQuX2lnbm9yZV9hbGxfZmxhZ3MoKQotICAgICAgICBuZXdfc2VsZiA9IHNlbGYuX2ZpeChjb250ZXh0KQotICAgICAgICBpZiBuZXdfc2VsZiAhPSBzZWxmOgotICAgICAgICAgICAgcmV0dXJuIG5ld19zZWxmCi0gICAgICAgIHJldHVybiBzZWxmLl9fYWRkX18oX2RlY19mcm9tX3RyaXBsZSgwLCAnMScsIGNvbnRleHQuRXRpbnkoKS0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KQotCi0gICAgZGVmIG5leHRfdG93YXJkKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBudW1iZXIgY2xvc2VzdCB0byBzZWxmLCBpbiB0aGUgZGlyZWN0aW9uIHRvd2FyZHMgb3RoZXIuCi0KLSAgICAgICAgVGhlIHJlc3VsdCBpcyB0aGUgY2xvc2VzdCByZXByZXNlbnRhYmxlIG51bWJlciB0byBzZWxmCi0gICAgICAgIChleGNsdWRpbmcgc2VsZikgdGhhdCBpcyBpbiB0aGUgZGlyZWN0aW9uIHRvd2FyZHMgb3RoZXIsCi0gICAgICAgIHVubGVzcyBib3RoIGhhdmUgdGhlIHNhbWUgdmFsdWUuICBJZiB0aGUgdHdvIG9wZXJhbmRzIGFyZQotICAgICAgICBudW1lcmljYWxseSBlcXVhbCwgdGhlbiB0aGUgcmVzdWx0IGlzIGEgY29weSBvZiBzZWxmIHdpdGggdGhlCi0gICAgICAgIHNpZ24gc2V0IHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBzaWduIG9mIG90aGVyLgotICAgICAgICAiIiIKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQotCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgY29tcGFyaXNvbiA9IHNlbGYuX2NtcChvdGhlcikKLSAgICAgICAgaWYgY29tcGFyaXNvbiA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29weV9zaWduKG90aGVyKQotCi0gICAgICAgIGlmIGNvbXBhcmlzb24gPT0gLTE6Ci0gICAgICAgICAgICBhbnMgPSBzZWxmLm5leHRfcGx1cyhjb250ZXh0KQotICAgICAgICBlbHNlOiAjIGNvbXBhcmlzb24gPT0gMQotICAgICAgICAgICAgYW5zID0gc2VsZi5uZXh0X21pbnVzKGNvbnRleHQpCi0KLSAgICAgICAgIyBkZWNpZGUgd2hpY2ggZmxhZ3MgdG8gcmFpc2UgdXNpbmcgdmFsdWUgb2YgYW5zCi0gICAgICAgIGlmIGFucy5faXNpbmZpbml0eSgpOgotICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoT3ZlcmZsb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW5maW5pdGUgcmVzdWx0IGZyb20gbmV4dF90b3dhcmQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zLl9zaWduKQotICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoSW5leGFjdCkKLSAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFJvdW5kZWQpCi0gICAgICAgIGVsaWYgYW5zLmFkanVzdGVkKCkgPCBjb250ZXh0LkVtaW46Ci0gICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihVbmRlcmZsb3cpCi0gICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihTdWJub3JtYWwpCi0gICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbmV4YWN0KQotICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoUm91bmRlZCkKLSAgICAgICAgICAgICMgaWYgcHJlY2lzaW9uID09IDEgdGhlbiB3ZSBkb24ndCByYWlzZSBDbGFtcGVkIGZvciBhCi0gICAgICAgICAgICAjIHJlc3VsdCAwRS1FdGlueS4KLSAgICAgICAgICAgIGlmIG5vdCBhbnM6Ci0gICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoQ2xhbXBlZCkKLQotICAgICAgICByZXR1cm4gYW5zCi0KLSAgICBkZWYgbnVtYmVyX2NsYXNzKHNlbGYsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybnMgYW4gaW5kaWNhdGlvbiBvZiB0aGUgY2xhc3Mgb2Ygc2VsZi4KLQotICAgICAgICBUaGUgY2xhc3MgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKLSAgICAgICAgICBzTmFOCi0gICAgICAgICAgTmFOCi0gICAgICAgICAgLUluZmluaXR5Ci0gICAgICAgICAgLU5vcm1hbAotICAgICAgICAgIC1TdWJub3JtYWwKLSAgICAgICAgICAtWmVybwotICAgICAgICAgICtaZXJvCi0gICAgICAgICAgK1N1Ym5vcm1hbAotICAgICAgICAgICtOb3JtYWwKLSAgICAgICAgICArSW5maW5pdHkKLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuaXNfc25hbigpOgotICAgICAgICAgICAgcmV0dXJuICJzTmFOIgotICAgICAgICBpZiBzZWxmLmlzX3FuYW4oKToKLSAgICAgICAgICAgIHJldHVybiAiTmFOIgotICAgICAgICBpbmYgPSBzZWxmLl9pc2luZmluaXR5KCkKLSAgICAgICAgaWYgaW5mID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gIitJbmZpbml0eSIKLSAgICAgICAgaWYgaW5mID09IC0xOgotICAgICAgICAgICAgcmV0dXJuICItSW5maW5pdHkiCi0gICAgICAgIGlmIHNlbGYuaXNfemVybygpOgotICAgICAgICAgICAgaWYgc2VsZi5fc2lnbjoKLSAgICAgICAgICAgICAgICByZXR1cm4gIi1aZXJvIgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gIitaZXJvIgotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0gICAgICAgIGlmIHNlbGYuaXNfc3Vibm9ybWFsKGNvbnRleHQ9Y29udGV4dCk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zaWduOgotICAgICAgICAgICAgICAgIHJldHVybiAiLVN1Ym5vcm1hbCIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIrU3Vibm9ybWFsIgotICAgICAgICAjIGp1c3QgYSBub3JtYWwsIHJlZ3VsYXIsIGJvcmluZyBudW1iZXIsIDopCi0gICAgICAgIGlmIHNlbGYuX3NpZ246Ci0gICAgICAgICAgICByZXR1cm4gIi1Ob3JtYWwiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIitOb3JtYWwiCi0KLSAgICBkZWYgcmFkaXgoc2VsZik6Ci0gICAgICAgICIiIkp1c3QgcmV0dXJucyAxMCwgYXMgdGhpcyBpcyBEZWNpbWFsLCA6KSIiIgotICAgICAgICByZXR1cm4gRGVjaW1hbCgxMCkKLQotICAgIGRlZiByb3RhdGUoc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybnMgYSByb3RhdGVkIGNvcHkgb2Ygc2VsZiwgdmFsdWUtb2Ytb3RoZXIgdGltZXMuIiIiCi0gICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBnZXRjb250ZXh0KCkKLQotICAgICAgICBvdGhlciA9IF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PVRydWUpCi0KLSAgICAgICAgYW5zID0gc2VsZi5fY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKLSAgICAgICAgaWYgYW5zOgotICAgICAgICAgICAgcmV0dXJuIGFucwotCi0gICAgICAgIGlmIG90aGVyLl9leHAgIT0gMDoKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uKQotICAgICAgICBpZiBub3QgKC1jb250ZXh0LnByZWMgPD0gaW50KG90aGVyKSA8PSBjb250ZXh0LnByZWMpOgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24pCi0KLSAgICAgICAgaWYgc2VsZi5faXNpbmZpbml0eSgpOgotICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKLQotICAgICAgICAjIGdldCB2YWx1ZXMsIHBhZCBpZiBuZWNlc3NhcnkKLSAgICAgICAgdG9yb3QgPSBpbnQob3RoZXIpCi0gICAgICAgIHJvdGRpZyA9IHNlbGYuX2ludAotICAgICAgICB0b3BhZCA9IGNvbnRleHQucHJlYyAtIGxlbihyb3RkaWcpCi0gICAgICAgIGlmIHRvcGFkID4gMDoKLSAgICAgICAgICAgIHJvdGRpZyA9ICcwJyp0b3BhZCArIHJvdGRpZwotICAgICAgICBlbGlmIHRvcGFkIDwgMDoKLSAgICAgICAgICAgIHJvdGRpZyA9IHJvdGRpZ1stdG9wYWQ6XQotCi0gICAgICAgICMgbGV0J3Mgcm90YXRlIQotICAgICAgICByb3RhdGVkID0gcm90ZGlnW3Rvcm90Ol0gKyByb3RkaWdbOnRvcm90XQotICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVkLmxzdHJpcCgnMCcpIG9yICcwJywgc2VsZi5fZXhwKQotCi0gICAgZGVmIHNjYWxlYihzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyBzZWxmIG9wZXJhbmQgYWZ0ZXIgYWRkaW5nIHRoZSBzZWNvbmQgdmFsdWUgdG8gaXRzIGV4cC4iIiIKLSAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgotICAgICAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotCi0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKLQotICAgICAgICBhbnMgPSBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQotICAgICAgICBpZiBhbnM6Ci0gICAgICAgICAgICByZXR1cm4gYW5zCi0KLSAgICAgICAgaWYgb3RoZXIuX2V4cCAhPSAwOgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3JhaXNlX2Vycm9yKEludmFsaWRPcGVyYXRpb24pCi0gICAgICAgIGxpbWluZiA9IC0yICogKGNvbnRleHQuRW1heCArIGNvbnRleHQucHJlYykKLSAgICAgICAgbGltc3VwID0gIDIgKiAoY29udGV4dC5FbWF4ICsgY29udGV4dC5wcmVjKQotICAgICAgICBpZiBub3QgKGxpbWluZiA8PSBpbnQob3RoZXIpIDw9IGxpbXN1cCk6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbikKLQotICAgICAgICBpZiBzZWxmLl9pc2luZmluaXR5KCk6Ci0gICAgICAgICAgICByZXR1cm4gRGVjaW1hbChzZWxmKQotCi0gICAgICAgIGQgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sIHNlbGYuX2ludCwgc2VsZi5fZXhwICsgaW50KG90aGVyKSkKLSAgICAgICAgZCA9IGQuX2ZpeChjb250ZXh0KQotICAgICAgICByZXR1cm4gZAotCi0gICAgZGVmIHNoaWZ0KHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJSZXR1cm5zIGEgc2hpZnRlZCBjb3B5IG9mIHNlbGYsIHZhbHVlLW9mLW90aGVyIHRpbWVzLiIiIgotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0KLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQotCi0gICAgICAgIGFucyA9IHNlbGYuX2NoZWNrX25hbnMob3RoZXIsIGNvbnRleHQpCi0gICAgICAgIGlmIGFuczoKLSAgICAgICAgICAgIHJldHVybiBhbnMKLQotICAgICAgICBpZiBvdGhlci5fZXhwICE9IDA6Ci0gICAgICAgICAgICByZXR1cm4gY29udGV4dC5fcmFpc2VfZXJyb3IoSW52YWxpZE9wZXJhdGlvbikKLSAgICAgICAgaWYgbm90ICgtY29udGV4dC5wcmVjIDw9IGludChvdGhlcikgPD0gY29udGV4dC5wcmVjKToKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9yYWlzZV9lcnJvcihJbnZhbGlkT3BlcmF0aW9uKQotCi0gICAgICAgIGlmIHNlbGYuX2lzaW5maW5pdHkoKToKLSAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCi0KLSAgICAgICAgIyBnZXQgdmFsdWVzLCBwYWQgaWYgbmVjZXNzYXJ5Ci0gICAgICAgIHRvcm90ID0gaW50KG90aGVyKQotICAgICAgICByb3RkaWcgPSBzZWxmLl9pbnQKLSAgICAgICAgdG9wYWQgPSBjb250ZXh0LnByZWMgLSBsZW4ocm90ZGlnKQotICAgICAgICBpZiB0b3BhZCA+IDA6Ci0gICAgICAgICAgICByb3RkaWcgPSAnMCcqdG9wYWQgKyByb3RkaWcKLSAgICAgICAgZWxpZiB0b3BhZCA8IDA6Ci0gICAgICAgICAgICByb3RkaWcgPSByb3RkaWdbLXRvcGFkOl0KLQotICAgICAgICAjIGxldCdzIHNoaWZ0IQotICAgICAgICBpZiB0b3JvdCA8IDA6Ci0gICAgICAgICAgICBzaGlmdGVkID0gcm90ZGlnWzp0b3JvdF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNoaWZ0ZWQgPSByb3RkaWcgKyAnMCcqdG9yb3QKLSAgICAgICAgICAgIHNoaWZ0ZWQgPSBzaGlmdGVkWy1jb250ZXh0LnByZWM6XQotCi0gICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdGVkLmxzdHJpcCgnMCcpIG9yICcwJywgc2VsZi5fZXhwKQotCi0gICAgIyBTdXBwb3J0IGZvciBwaWNrbGluZywgY29weSwgYW5kIGRlZXBjb3B5Ci0gICAgZGVmIF9fcmVkdWNlX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIChzdHIoc2VsZiksKSkKLQotICAgIGRlZiBfX2NvcHlfXyhzZWxmKToKLSAgICAgICAgaWYgdHlwZShzZWxmKSBpcyBEZWNpbWFsOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYgICAgICMgSSdtIGltbXV0YWJsZTsgdGhlcmVmb3JlIEkgYW0gbXkgb3duIGNsb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzdHIoc2VsZikpCi0KLSAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW8pOgotICAgICAgICBpZiB0eXBlKHNlbGYpIGlzIERlY2ltYWw6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZiAgICAgIyBNeSBjb21wb25lbnRzIGFyZSBhbHNvIGltbXV0YWJsZQotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc3RyKHNlbGYpKQotCi0gICAgIyBQRVAgMzEwMSBzdXBwb3J0LiAgdGhlIF9sb2NhbGVjb252IGtleXdvcmQgYXJndW1lbnQgc2hvdWxkIGJlCi0gICAgIyBjb25zaWRlcmVkIHByaXZhdGU6IGl0J3MgcHJvdmlkZWQgZm9yIGVhc2Ugb2YgdGVzdGluZyBvbmx5LgotICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWNpZmllciwgY29udGV4dD1Ob25lLCBfbG9jYWxlY29udj1Ob25lKToKLSAgICAgICAgIiIiRm9ybWF0IGEgRGVjaW1hbCBpbnN0YW5jZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHNwZWNpZmllci4KLQotICAgICAgICBUaGUgc3BlY2lmaWVyIHNob3VsZCBiZSBhIHN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIsIHdpdGggdGhlCi0gICAgICAgIGZvcm0gZGVzY3JpYmVkIGluIFBFUCAzMTAxLiAgRm9ybWF0dGluZyB0eXBlcyAnZScsICdFJywgJ2YnLAotICAgICAgICAnRicsICdnJywgJ0cnLCAnbicgYW5kICclJyBhcmUgc3VwcG9ydGVkLiAgSWYgdGhlIGZvcm1hdHRpbmcKLSAgICAgICAgdHlwZSBpcyBvbWl0dGVkIGl0IGRlZmF1bHRzIHRvICdnJyBvciAnRycsIGRlcGVuZGluZyBvbiB0aGUKLSAgICAgICAgdmFsdWUgb2YgY29udGV4dC5jYXBpdGFscy4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgIyBOb3RlOiBQRVAgMzEwMSBzYXlzIHRoYXQgaWYgdGhlIHR5cGUgaXMgbm90IHByZXNlbnQgdGhlbgotICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCi0gICAgICAgICMgV2UgdGFrZSB0aGUgbGliZXJ0eSBvZiBpZ25vcmluZyB0aGlzIHJlcXVpcmVtZW50IGZvcgotICAgICAgICAjIERlY2ltYWwtLS1pdCdzIHByZXN1bWFibHkgdGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQKLSAgICAgICAgIyBmb3JtYXQoZmxvYXQsICcnKSBiZWhhdmVzIHNpbWlsYXJseSB0byBzdHIoZmxvYXQpLgotICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0KLSAgICAgICAgc3BlYyA9IF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyKHNwZWNpZmllciwgX2xvY2FsZWNvbnY9X2xvY2FsZWNvbnYpCi0KLSAgICAgICAgIyBzcGVjaWFsIHZhbHVlcyBkb24ndCBjYXJlIGFib3V0IHRoZSB0eXBlIG9yIHByZWNpc2lvbgotICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgotICAgICAgICAgICAgc2lnbiA9IF9mb3JtYXRfc2lnbihzZWxmLl9zaWduLCBzcGVjKQotICAgICAgICAgICAgYm9keSA9IHN0cihzZWxmLmNvcHlfYWJzKCkpCi0gICAgICAgICAgICBpZiBzcGVjWyd0eXBlJ10gPT0gJyUnOgotICAgICAgICAgICAgICAgIGJvZHkgKz0gJyUnCi0gICAgICAgICAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzaWduLCBib2R5LCBzcGVjKQotCi0gICAgICAgICMgYSB0eXBlIG9mIE5vbmUgZGVmYXVsdHMgdG8gJ2cnIG9yICdHJywgZGVwZW5kaW5nIG9uIGNvbnRleHQKLSAgICAgICAgaWYgc3BlY1sndHlwZSddIGlzIE5vbmU6Ci0gICAgICAgICAgICBzcGVjWyd0eXBlJ10gPSBbJ2cnLCAnRyddW2NvbnRleHQuY2FwaXRhbHNdCi0KLSAgICAgICAgIyBpZiB0eXBlIGlzICclJywgYWRqdXN0IGV4cG9uZW50IG9mIHNlbGYgYWNjb3JkaW5nbHkKLSAgICAgICAgaWYgc3BlY1sndHlwZSddID09ICclJzoKLSAgICAgICAgICAgIHNlbGYgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sIHNlbGYuX2ludCwgc2VsZi5fZXhwKzIpCi0KLSAgICAgICAgIyByb3VuZCBpZiBuZWNlc3NhcnksIHRha2luZyByb3VuZGluZyBtb2RlIGZyb20gdGhlIGNvbnRleHQKLSAgICAgICAgcm91bmRpbmcgPSBjb250ZXh0LnJvdW5kaW5nCi0gICAgICAgIHByZWNpc2lvbiA9IHNwZWNbJ3ByZWNpc2lvbiddCi0gICAgICAgIGlmIHByZWNpc2lvbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgotICAgICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl9yb3VuZChwcmVjaXNpb24rMSwgcm91bmRpbmcpCi0gICAgICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKLSAgICAgICAgICAgICAgICBzZWxmID0gc2VsZi5fcmVzY2FsZSgtcHJlY2lzaW9uLCByb3VuZGluZykKLSAgICAgICAgICAgIGVsaWYgc3BlY1sndHlwZSddIGluICdnRycgYW5kIGxlbihzZWxmLl9pbnQpID4gcHJlY2lzaW9uOgotICAgICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl9yb3VuZChwcmVjaXNpb24sIHJvdW5kaW5nKQotICAgICAgICAjIHNwZWNpYWwgY2FzZTogemVyb3Mgd2l0aCBhIHBvc2l0aXZlIGV4cG9uZW50IGNhbid0IGJlCi0gICAgICAgICMgcmVwcmVzZW50ZWQgaW4gZml4ZWQgcG9pbnQ7IHJlc2NhbGUgdGhlbSB0byAwZTAuCi0gICAgICAgIGlmIG5vdCBzZWxmIGFuZCBzZWxmLl9leHAgPiAwIGFuZCBzcGVjWyd0eXBlJ10gaW4gJ2ZGJSc6Ci0gICAgICAgICAgICBzZWxmID0gc2VsZi5fcmVzY2FsZSgwLCByb3VuZGluZykKLQotICAgICAgICAjIGZpZ3VyZSBvdXQgcGxhY2VtZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50Ci0gICAgICAgIGxlZnRkaWdpdHMgPSBzZWxmLl9leHAgKyBsZW4oc2VsZi5faW50KQotICAgICAgICBpZiBzcGVjWyd0eXBlJ10gaW4gJ2VFJzoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmIGFuZCBwcmVjaXNpb24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZG90cGxhY2UgPSAxIC0gcHJlY2lzaW9uCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRvdHBsYWNlID0gMQotICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZkYlJzoKLSAgICAgICAgICAgIGRvdHBsYWNlID0gbGVmdGRpZ2l0cwotICAgICAgICBlbGlmIHNwZWNbJ3R5cGUnXSBpbiAnZ0cnOgotICAgICAgICAgICAgaWYgc2VsZi5fZXhwIDw9IDAgYW5kIGxlZnRkaWdpdHMgPiAtNjoKLSAgICAgICAgICAgICAgICBkb3RwbGFjZSA9IGxlZnRkaWdpdHMKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZG90cGxhY2UgPSAxCi0KLSAgICAgICAgIyBmaW5kIGRpZ2l0cyBiZWZvcmUgYW5kIGFmdGVyIGRlY2ltYWwgcG9pbnQsIGFuZCBnZXQgZXhwb25lbnQKLSAgICAgICAgaWYgZG90cGxhY2UgPCAwOgotICAgICAgICAgICAgaW50cGFydCA9ICcwJwotICAgICAgICAgICAgZnJhY3BhcnQgPSAnMCcqKC1kb3RwbGFjZSkgKyBzZWxmLl9pbnQKLSAgICAgICAgZWxpZiBkb3RwbGFjZSA+IGxlbihzZWxmLl9pbnQpOgotICAgICAgICAgICAgaW50cGFydCA9IHNlbGYuX2ludCArICcwJyooZG90cGxhY2UtbGVuKHNlbGYuX2ludCkpCi0gICAgICAgICAgICBmcmFjcGFydCA9ICcnCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpbnRwYXJ0ID0gc2VsZi5faW50Wzpkb3RwbGFjZV0gb3IgJzAnCi0gICAgICAgICAgICBmcmFjcGFydCA9IHNlbGYuX2ludFtkb3RwbGFjZTpdCi0gICAgICAgIGV4cCA9IGxlZnRkaWdpdHMtZG90cGxhY2UKLQotICAgICAgICAjIGRvbmUgd2l0aCB0aGUgZGVjaW1hbC1zcGVjaWZpYyBzdHVmZjsgIGhhbmQgb3ZlciB0aGUgcmVzdAotICAgICAgICAjIG9mIHRoZSBmb3JtYXR0aW5nIHRvIHRoZSBfZm9ybWF0X251bWJlciBmdW5jdGlvbgotICAgICAgICByZXR1cm4gX2Zvcm1hdF9udW1iZXIoc2VsZi5fc2lnbiwgaW50cGFydCwgZnJhY3BhcnQsIGV4cCwgc3BlYykKLQotZGVmIF9kZWNfZnJvbV90cmlwbGUoc2lnbiwgY29lZmZpY2llbnQsIGV4cG9uZW50LCBzcGVjaWFsPUZhbHNlKToKLSAgICAiIiJDcmVhdGUgYSBkZWNpbWFsIGluc3RhbmNlIGRpcmVjdGx5LCB3aXRob3V0IGFueSB2YWxpZGF0aW9uLAotICAgIG5vcm1hbGl6YXRpb24gKGUuZy4gcmVtb3ZhbCBvZiBsZWFkaW5nIHplcm9zKSBvciBhcmd1bWVudAotICAgIGNvbnZlcnNpb24uCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGlzIGZvciAqaW50ZXJuYWwgdXNlIG9ubHkqLgotICAgICIiIgotCi0gICAgc2VsZiA9IG9iamVjdC5fX25ld19fKERlY2ltYWwpCi0gICAgc2VsZi5fc2lnbiA9IHNpZ24KLSAgICBzZWxmLl9pbnQgPSBjb2VmZmljaWVudAotICAgIHNlbGYuX2V4cCA9IGV4cG9uZW50Ci0gICAgc2VsZi5faXNfc3BlY2lhbCA9IHNwZWNpYWwKLQotICAgIHJldHVybiBzZWxmCi0KLSMgUmVnaXN0ZXIgRGVjaW1hbCBhcyBhIGtpbmQgb2YgTnVtYmVyIChhbiBhYnN0cmFjdCBiYXNlIGNsYXNzKS4KLSMgSG93ZXZlciwgZG8gbm90IHJlZ2lzdGVyIGl0IGFzIFJlYWwgKGJlY2F1c2UgRGVjaW1hbHMgYXJlIG5vdAotIyBpbnRlcm9wZXJhYmxlIHdpdGggZmxvYXRzKS4KLV9udW1iZXJzLk51bWJlci5yZWdpc3RlcihEZWNpbWFsKQotCi0KLSMjIyMjIENvbnRleHQgY2xhc3MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBfQ29udGV4dE1hbmFnZXIob2JqZWN0KToKLSAgICAiIiJDb250ZXh0IG1hbmFnZXIgY2xhc3MgdG8gc3VwcG9ydCBsb2NhbGNvbnRleHQoKS4KLQotICAgICAgU2V0cyBhIGNvcHkgb2YgdGhlIHN1cHBsaWVkIGNvbnRleHQgaW4gX19lbnRlcl9fKCkgYW5kIHJlc3RvcmVzCi0gICAgICB0aGUgcHJldmlvdXMgZGVjaW1hbCBjb250ZXh0IGluIF9fZXhpdF9fKCkKLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3X2NvbnRleHQpOgotICAgICAgICBzZWxmLm5ld19jb250ZXh0ID0gbmV3X2NvbnRleHQuY29weSgpCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgc2VsZi5zYXZlZF9jb250ZXh0ID0gZ2V0Y29udGV4dCgpCi0gICAgICAgIHNldGNvbnRleHQoc2VsZi5uZXdfY29udGV4dCkKLSAgICAgICAgcmV0dXJuIHNlbGYubmV3X2NvbnRleHQKLSAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgotICAgICAgICBzZXRjb250ZXh0KHNlbGYuc2F2ZWRfY29udGV4dCkKLQotY2xhc3MgQ29udGV4dChvYmplY3QpOgotICAgICIiIkNvbnRhaW5zIHRoZSBjb250ZXh0IGZvciBhIERlY2ltYWwgaW5zdGFuY2UuCi0KLSAgICBDb250YWluczoKLSAgICBwcmVjIC0gcHJlY2lzaW9uIChmb3IgdXNlIGluIHJvdW5kaW5nLCBkaXZpc2lvbiwgc3F1YXJlIHJvb3RzLi4pCi0gICAgcm91bmRpbmcgLSByb3VuZGluZyB0eXBlIChob3cgeW91IHJvdW5kKQotICAgIHRyYXBzIC0gSWYgdHJhcHNbZXhjZXB0aW9uXSA9IDEsIHRoZW4gdGhlIGV4Y2VwdGlvbiBpcwotICAgICAgICAgICAgICAgICAgICByYWlzZWQgd2hlbiBpdCBpcyBjYXVzZWQuICBPdGhlcndpc2UsIGEgdmFsdWUgaXMKLSAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0ZWQgaW4uCi0gICAgZmxhZ3MgIC0gV2hlbiBhbiBleGNlcHRpb24gaXMgY2F1c2VkLCBmbGFnc1tleGNlcHRpb25dIGlzIHNldC4KLSAgICAgICAgICAgICAoV2hldGhlciBvciBub3QgdGhlIHRyYXBfZW5hYmxlciBpcyBzZXQpCi0gICAgICAgICAgICAgU2hvdWxkIGJlIHJlc2V0IGJ5IHVzZXIgb2YgRGVjaW1hbCBpbnN0YW5jZS4KLSAgICBFbWluIC0gICBNaW5pbXVtIGV4cG9uZW50Ci0gICAgRW1heCAtICAgTWF4aW11bSBleHBvbmVudAotICAgIGNhcGl0YWxzIC0gICAgICBJZiAxLCAxKjEwXjEgaXMgcHJpbnRlZCBhcyAxRSsxLgotICAgICAgICAgICAgICAgICAgICBJZiAwLCBwcmludGVkIGFzIDFlMQotICAgIGNsYW1wIC0gIElmIDEsIGNoYW5nZSBleHBvbmVudHMgaWYgdG9vIGhpZ2ggKERlZmF1bHQgMCkKLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVjPU5vbmUsIHJvdW5kaW5nPU5vbmUsIEVtaW49Tm9uZSwgRW1heD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICBjYXBpdGFscz1Ob25lLCBjbGFtcD1Ob25lLCBmbGFncz1Ob25lLCB0cmFwcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICBfaWdub3JlZF9mbGFncz1Ob25lKToKLSAgICAgICAgIyBTZXQgZGVmYXVsdHM7IGZvciBldmVyeXRoaW5nIGV4Y2VwdCBmbGFncyBhbmQgX2lnbm9yZWRfZmxhZ3MsCi0gICAgICAgICMgaW5oZXJpdCBmcm9tIERlZmF1bHRDb250ZXh0LgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkYyA9IERlZmF1bHRDb250ZXh0Ci0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi5wcmVjID0gcHJlYyBpZiBwcmVjIGlzIG5vdCBOb25lIGVsc2UgZGMucHJlYwotICAgICAgICBzZWxmLnJvdW5kaW5nID0gcm91bmRpbmcgaWYgcm91bmRpbmcgaXMgbm90IE5vbmUgZWxzZSBkYy5yb3VuZGluZwotICAgICAgICBzZWxmLkVtaW4gPSBFbWluIGlmIEVtaW4gaXMgbm90IE5vbmUgZWxzZSBkYy5FbWluCi0gICAgICAgIHNlbGYuRW1heCA9IEVtYXggaWYgRW1heCBpcyBub3QgTm9uZSBlbHNlIGRjLkVtYXgKLSAgICAgICAgc2VsZi5jYXBpdGFscyA9IGNhcGl0YWxzIGlmIGNhcGl0YWxzIGlzIG5vdCBOb25lIGVsc2UgZGMuY2FwaXRhbHMKLSAgICAgICAgc2VsZi5jbGFtcCA9IGNsYW1wIGlmIGNsYW1wIGlzIG5vdCBOb25lIGVsc2UgZGMuY2xhbXAKLQotICAgICAgICBpZiBfaWdub3JlZF9mbGFncyBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5faWdub3JlZF9mbGFncyA9IFtdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9pZ25vcmVkX2ZsYWdzID0gX2lnbm9yZWRfZmxhZ3MKLQotICAgICAgICBpZiB0cmFwcyBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi50cmFwcyA9IGRjLnRyYXBzLmNvcHkoKQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHRyYXBzLCBkaWN0KToKLSAgICAgICAgICAgIHNlbGYudHJhcHMgPSBkaWN0KChzLCBpbnQocyBpbiB0cmFwcykpIGZvciBzIGluIF9zaWduYWxzICsgdHJhcHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnRyYXBzID0gdHJhcHMKLQotICAgICAgICBpZiBmbGFncyBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5mbGFncyA9IGRpY3QuZnJvbWtleXMoX3NpZ25hbHMsIDApCi0gICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UoZmxhZ3MsIGRpY3QpOgotICAgICAgICAgICAgc2VsZi5mbGFncyA9IGRpY3QoKHMsIGludChzIGluIGZsYWdzKSkgZm9yIHMgaW4gX3NpZ25hbHMgKyBmbGFncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmxhZ3MgPSBmbGFncwotCi0gICAgZGVmIF9zZXRfaW50ZWdlcl9jaGVjayhzZWxmLCBuYW1lLCB2YWx1ZSwgdm1pbiwgdm1heCk6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlcyBtdXN0IGJlIGFuIGludGVnZXIiICUgbmFtZSkKLSAgICAgICAgaWYgdm1pbiA9PSAnLWluZic6Ci0gICAgICAgICAgICBpZiB2YWx1ZSA+IHZtYXg6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgbXVzdCBiZSBpbiBbJXMsICVkXS4gZ290OiAlcyIgJSAobmFtZSwgdm1pbiwgdm1heCwgdmFsdWUpKQotICAgICAgICBlbGlmIHZtYXggPT0gJ2luZic6Ci0gICAgICAgICAgICBpZiB2YWx1ZSA8IHZtaW46Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgbXVzdCBiZSBpbiBbJWQsICVzXS4gZ290OiAlcyIgJSAobmFtZSwgdm1pbiwgdm1heCwgdmFsdWUpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgdmFsdWUgPCB2bWluIG9yIHZhbHVlID4gdm1heDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBtdXN0IGJlIGluIFslZCwgJWRdLiBnb3QgJXMiICUgKG5hbWUsIHZtaW4sIHZtYXgsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkKLQotICAgIGRlZiBfc2V0X3NpZ25hbF9kaWN0KHNlbGYsIG5hbWUsIGQpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkLCBkaWN0KToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMgbXVzdCBiZSBhIHNpZ25hbCBkaWN0IiAlIGQpCi0gICAgICAgIGZvciBrZXkgaW4gZDoKLSAgICAgICAgICAgIGlmIG5vdCBrZXkgaW4gX3NpZ25hbHM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkIHNpZ25hbCBkaWN0IiAlIGQpCi0gICAgICAgIGZvciBrZXkgaW4gX3NpZ25hbHM6Ci0gICAgICAgICAgICBpZiBub3Qga2V5IGluIGQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkIHNpZ25hbCBkaWN0IiAlIGQpCi0gICAgICAgIHJldHVybiBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgZCkKLQotICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIGlmIG5hbWUgPT0gJ3ByZWMnOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NldF9pbnRlZ2VyX2NoZWNrKG5hbWUsIHZhbHVlLCAxLCAnaW5mJykKLSAgICAgICAgZWxpZiBuYW1lID09ICdFbWluJzoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9zZXRfaW50ZWdlcl9jaGVjayhuYW1lLCB2YWx1ZSwgJy1pbmYnLCAwKQotICAgICAgICBlbGlmIG5hbWUgPT0gJ0VtYXgnOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NldF9pbnRlZ2VyX2NoZWNrKG5hbWUsIHZhbHVlLCAwLCAnaW5mJykKLSAgICAgICAgZWxpZiBuYW1lID09ICdjYXBpdGFscyc6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fc2V0X2ludGVnZXJfY2hlY2sobmFtZSwgdmFsdWUsIDAsIDEpCi0gICAgICAgIGVsaWYgbmFtZSA9PSAnY2xhbXAnOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NldF9pbnRlZ2VyX2NoZWNrKG5hbWUsIHZhbHVlLCAwLCAxKQotICAgICAgICBlbGlmIG5hbWUgPT0gJ3JvdW5kaW5nJzoKLSAgICAgICAgICAgIGlmIG5vdCB2YWx1ZSBpbiBfcm91bmRpbmdfbW9kZXM6Ci0gICAgICAgICAgICAgICAgIyByYWlzZSBUeXBlRXJyb3IgZXZlbiBmb3Igc3RyaW5ncyB0byBoYXZlIGNvbnNpc3RlbmN5Ci0gICAgICAgICAgICAgICAgIyBhbW9uZyB2YXJpb3VzIGltcGxlbWVudGF0aW9ucy4KLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzOiBpbnZhbGlkIHJvdW5kaW5nIG1vZGUiICUgdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQotICAgICAgICBlbGlmIG5hbWUgPT0gJ2ZsYWdzJyBvciBuYW1lID09ICd0cmFwcyc6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fc2V0X3NpZ25hbF9kaWN0KG5hbWUsIHZhbHVlKQotICAgICAgICBlbGlmIG5hbWUgPT0gJ19pZ25vcmVkX2ZsYWdzJzoKLSAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKLSAgICAgICAgICAgICAgICAiJ2RlY2ltYWwuQ29udGV4dCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJyVzJyIgJSBuYW1lKQotCi0gICAgZGVmIF9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJXMgY2Fubm90IGJlIGRlbGV0ZWQiICUgbmFtZSkKLQotICAgICMgU3VwcG9ydCBmb3IgcGlja2xpbmcsIGNvcHksIGFuZCBkZWVwY29weQotICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgotICAgICAgICBmbGFncyA9IFtzaWcgZm9yIHNpZywgdiBpbiBzZWxmLmZsYWdzLml0ZW1zKCkgaWYgdl0KLSAgICAgICAgdHJhcHMgPSBbc2lnIGZvciBzaWcsIHYgaW4gc2VsZi50cmFwcy5pdGVtcygpIGlmIHZdCi0gICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sCi0gICAgICAgICAgICAgICAgKHNlbGYucHJlYywgc2VsZi5yb3VuZGluZywgc2VsZi5FbWluLCBzZWxmLkVtYXgsCi0gICAgICAgICAgICAgICAgIHNlbGYuY2FwaXRhbHMsIHNlbGYuY2xhbXAsIGZsYWdzLCB0cmFwcykpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICIiIlNob3cgdGhlIGN1cnJlbnQgY29udGV4dC4iIiIKLSAgICAgICAgcyA9IFtdCi0gICAgICAgIHMuYXBwZW5kKCdDb250ZXh0KHByZWM9JShwcmVjKWQsIHJvdW5kaW5nPSUocm91bmRpbmcpcywgJwotICAgICAgICAgICAgICAgICAnRW1pbj0lKEVtaW4pZCwgRW1heD0lKEVtYXgpZCwgY2FwaXRhbHM9JShjYXBpdGFscylkLCAnCi0gICAgICAgICAgICAgICAgICdjbGFtcD0lKGNsYW1wKWQnCi0gICAgICAgICAgICAgICAgICUgdmFycyhzZWxmKSkKLSAgICAgICAgbmFtZXMgPSBbZi5fX25hbWVfXyBmb3IgZiwgdiBpbiBzZWxmLmZsYWdzLml0ZW1zKCkgaWYgdl0KLSAgICAgICAgcy5hcHBlbmQoJ2ZsYWdzPVsnICsgJywgJy5qb2luKG5hbWVzKSArICddJykKLSAgICAgICAgbmFtZXMgPSBbdC5fX25hbWVfXyBmb3IgdCwgdiBpbiBzZWxmLnRyYXBzLml0ZW1zKCkgaWYgdl0KLSAgICAgICAgcy5hcHBlbmQoJ3RyYXBzPVsnICsgJywgJy5qb2luKG5hbWVzKSArICddJykKLSAgICAgICAgcmV0dXJuICcsICcuam9pbihzKSArICcpJwotCi0gICAgZGVmIGNsZWFyX2ZsYWdzKHNlbGYpOgotICAgICAgICAiIiJSZXNldCBhbGwgZmxhZ3MgdG8gemVybyIiIgotICAgICAgICBmb3IgZmxhZyBpbiBzZWxmLmZsYWdzOgotICAgICAgICAgICAgc2VsZi5mbGFnc1tmbGFnXSA9IDAKLQotICAgIGRlZiBjbGVhcl90cmFwcyhzZWxmKToKLSAgICAgICAgIiIiUmVzZXQgYWxsIHRyYXBzIHRvIHplcm8iIiIKLSAgICAgICAgZm9yIGZsYWcgaW4gc2VsZi50cmFwczoKLSAgICAgICAgICAgIHNlbGYudHJhcHNbZmxhZ10gPSAwCi0KLSAgICBkZWYgX3NoYWxsb3dfY29weShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHNoYWxsb3cgY29weSBmcm9tIHNlbGYuIiIiCi0gICAgICAgIG5jID0gQ29udGV4dChzZWxmLnByZWMsIHNlbGYucm91bmRpbmcsIHNlbGYuRW1pbiwgc2VsZi5FbWF4LAotICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYXBpdGFscywgc2VsZi5jbGFtcCwgc2VsZi5mbGFncywgc2VsZi50cmFwcywKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lnbm9yZWRfZmxhZ3MpCi0gICAgICAgIHJldHVybiBuYwotCi0gICAgZGVmIGNvcHkoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgYSBkZWVwIGNvcHkgZnJvbSBzZWxmLiIiIgotICAgICAgICBuYyA9IENvbnRleHQoc2VsZi5wcmVjLCBzZWxmLnJvdW5kaW5nLCBzZWxmLkVtaW4sIHNlbGYuRW1heCwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FwaXRhbHMsIHNlbGYuY2xhbXAsCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLmZsYWdzLmNvcHkoKSwgc2VsZi50cmFwcy5jb3B5KCksCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLl9pZ25vcmVkX2ZsYWdzKQotICAgICAgICByZXR1cm4gbmMKLSAgICBfX2NvcHlfXyA9IGNvcHkKLQotICAgIGRlZiBfcmFpc2VfZXJyb3Ioc2VsZiwgY29uZGl0aW9uLCBleHBsYW5hdGlvbiA9IE5vbmUsICphcmdzKToKLSAgICAgICAgIiIiSGFuZGxlcyBhbiBlcnJvcgotCi0gICAgICAgIElmIHRoZSBmbGFnIGlzIGluIF9pZ25vcmVkX2ZsYWdzLCByZXR1cm5zIHRoZSBkZWZhdWx0IHJlc3BvbnNlLgotICAgICAgICBPdGhlcndpc2UsIGl0IHNldHMgdGhlIGZsYWcsIHRoZW4sIGlmIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICAgIHRyYXBfZW5hYmxlciBpcyBzZXQsIGl0IHJlcmFpc2VzIHRoZSBleGNlcHRpb24uICBPdGhlcndpc2UsIGl0IHJldHVybnMKLSAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgc2V0dGluZyB0aGUgZmxhZy4KLSAgICAgICAgIiIiCi0gICAgICAgIGVycm9yID0gX2NvbmRpdGlvbl9tYXAuZ2V0KGNvbmRpdGlvbiwgY29uZGl0aW9uKQotICAgICAgICBpZiBlcnJvciBpbiBzZWxmLl9pZ25vcmVkX2ZsYWdzOgotICAgICAgICAgICAgIyBEb24ndCB0b3VjaCB0aGUgZmxhZwotICAgICAgICAgICAgcmV0dXJuIGVycm9yKCkuaGFuZGxlKHNlbGYsICphcmdzKQotCi0gICAgICAgIHNlbGYuZmxhZ3NbZXJyb3JdID0gMQotICAgICAgICBpZiBub3Qgc2VsZi50cmFwc1tlcnJvcl06Ci0gICAgICAgICAgICAjIFRoZSBlcnJvcnMgZGVmaW5lIGhvdyB0byBoYW5kbGUgdGhlbXNlbHZlcy4KLSAgICAgICAgICAgIHJldHVybiBjb25kaXRpb24oKS5oYW5kbGUoc2VsZiwgKmFyZ3MpCi0KLSAgICAgICAgIyBFcnJvcnMgc2hvdWxkIG9ubHkgYmUgcmlza2VkIG9uIGNvcGllcyBvZiB0aGUgY29udGV4dAotICAgICAgICAjIHNlbGYuX2lnbm9yZWRfZmxhZ3MgPSBbXQotICAgICAgICByYWlzZSBlcnJvcihleHBsYW5hdGlvbikKLQotICAgIGRlZiBfaWdub3JlX2FsbF9mbGFncyhzZWxmKToKLSAgICAgICAgIiIiSWdub3JlIGFsbCBmbGFncywgaWYgdGhleSBhcmUgcmFpc2VkIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9pZ25vcmVfZmxhZ3MoKl9zaWduYWxzKQotCi0gICAgZGVmIF9pZ25vcmVfZmxhZ3Moc2VsZiwgKmZsYWdzKToKLSAgICAgICAgIiIiSWdub3JlIHRoZSBmbGFncywgaWYgdGhleSBhcmUgcmFpc2VkIiIiCi0gICAgICAgICMgRG8gbm90IG11dGF0ZS0tIFRoaXMgd2F5LCBjb3BpZXMgb2YgYSBjb250ZXh0IGxlYXZlIHRoZSBvcmlnaW5hbAotICAgICAgICAjIGFsb25lLgotICAgICAgICBzZWxmLl9pZ25vcmVkX2ZsYWdzID0gKHNlbGYuX2lnbm9yZWRfZmxhZ3MgKyBsaXN0KGZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGxpc3QoZmxhZ3MpCi0KLSAgICBkZWYgX3JlZ2FyZF9mbGFncyhzZWxmLCAqZmxhZ3MpOgotICAgICAgICAiIiJTdG9wIGlnbm9yaW5nIHRoZSBmbGFncywgaWYgdGhleSBhcmUgcmFpc2VkIiIiCi0gICAgICAgIGlmIGZsYWdzIGFuZCBpc2luc3RhbmNlKGZsYWdzWzBdLCAodHVwbGUsbGlzdCkpOgotICAgICAgICAgICAgZmxhZ3MgPSBmbGFnc1swXQotICAgICAgICBmb3IgZmxhZyBpbiBmbGFnczoKLSAgICAgICAgICAgIHNlbGYuX2lnbm9yZWRfZmxhZ3MucmVtb3ZlKGZsYWcpCi0KLSAgICAjIFdlIGluaGVyaXQgb2JqZWN0Ll9faGFzaF9fLCBzbyB3ZSBtdXN0IGRlbnkgdGhpcyBleHBsaWNpdGx5Ci0gICAgX19oYXNoX18gPSBOb25lCi0KLSAgICBkZWYgRXRpbnkoc2VsZik6Ci0gICAgICAgICIiIlJldHVybnMgRXRpbnkgKD0gRW1pbiAtIHByZWMgKyAxKSIiIgotICAgICAgICByZXR1cm4gaW50KHNlbGYuRW1pbiAtIHNlbGYucHJlYyArIDEpCi0KLSAgICBkZWYgRXRvcChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBtYXhpbXVtIGV4cG9uZW50ICg9IEVtYXggLSBwcmVjICsgMSkiIiIKLSAgICAgICAgcmV0dXJuIGludChzZWxmLkVtYXggLSBzZWxmLnByZWMgKyAxKQotCi0gICAgZGVmIF9zZXRfcm91bmRpbmcoc2VsZiwgdHlwZSk6Ci0gICAgICAgICIiIlNldHMgdGhlIHJvdW5kaW5nIHR5cGUuCi0KLSAgICAgICAgU2V0cyB0aGUgcm91bmRpbmcgdHlwZSwgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgKHByZXZpb3VzKQotICAgICAgICByb3VuZGluZyB0eXBlLiAgT2Z0ZW4gdXNlZCBsaWtlOgotCi0gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNvcHkoKQotICAgICAgICAjIHNvIHlvdSBkb24ndCBjaGFuZ2UgdGhlIGNhbGxpbmcgY29udGV4dAotICAgICAgICAjIGlmIGFuIGVycm9yIG9jY3VycyBpbiB0aGUgbWlkZGxlLgotICAgICAgICByb3VuZGluZyA9IGNvbnRleHQuX3NldF9yb3VuZGluZyhST1VORF9VUCkKLSAgICAgICAgdmFsID0gc2VsZi5fX3N1Yl9fKG90aGVyLCBjb250ZXh0PWNvbnRleHQpCi0gICAgICAgIGNvbnRleHQuX3NldF9yb3VuZGluZyhyb3VuZGluZykKLQotICAgICAgICBUaGlzIHdpbGwgbWFrZSBpdCByb3VuZCB1cCBmb3IgdGhhdCBvcGVyYXRpb24uCi0gICAgICAgICIiIgotICAgICAgICByb3VuZGluZyA9IHNlbGYucm91bmRpbmcKLSAgICAgICAgc2VsZi5yb3VuZGluZz0gdHlwZQotICAgICAgICByZXR1cm4gcm91bmRpbmcKLQotICAgIGRlZiBjcmVhdGVfZGVjaW1hbChzZWxmLCBudW09JzAnKToKLSAgICAgICAgIiIiQ3JlYXRlcyBhIG5ldyBEZWNpbWFsIGluc3RhbmNlIGJ1dCB1c2luZyBzZWxmIGFzIGNvbnRleHQuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgaW1wbGVtZW50cyB0aGUgdG8tbnVtYmVyIG9wZXJhdGlvbiBvZiB0aGUKLSAgICAgICAgSUJNIERlY2ltYWwgc3BlY2lmaWNhdGlvbi4iIiIKLQotICAgICAgICBpZiBpc2luc3RhbmNlKG51bSwgc3RyKSBhbmQgbnVtICE9IG51bS5zdHJpcCgpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JhaXNlX2Vycm9yKENvbnZlcnNpb25TeW50YXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcm1pdHRlZC4iKQotCi0gICAgICAgIGQgPSBEZWNpbWFsKG51bSwgY29udGV4dD1zZWxmKQotICAgICAgICBpZiBkLl9pc25hbigpIGFuZCBsZW4oZC5faW50KSA+IHNlbGYucHJlYyAtIHNlbGYuY2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmFpc2VfZXJyb3IoQ29udmVyc2lvblN5bnRheCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlhZ25vc3RpYyBpbmZvIHRvbyBsb25nIGluIE5hTiIpCi0gICAgICAgIHJldHVybiBkLl9maXgoc2VsZikKLQotICAgIGRlZiBjcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KHNlbGYsIGYpOgotICAgICAgICAiIiJDcmVhdGVzIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UgZnJvbSBhIGZsb2F0IGJ1dCByb3VuZGluZyB1c2luZyBzZWxmCi0gICAgICAgIGFzIHRoZSBjb250ZXh0LgotCi0gICAgICAgID4+PiBjb250ZXh0ID0gQ29udGV4dChwcmVjPTUsIHJvdW5kaW5nPVJPVU5EX0RPV04pCi0gICAgICAgID4+PiBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoMy4xNDE1OTI2NTM1ODk3OTMyKQotICAgICAgICBEZWNpbWFsKCczLjE0MTUnKQotICAgICAgICA+Pj4gY29udGV4dCA9IENvbnRleHQocHJlYz01LCB0cmFwcz1bSW5leGFjdF0pCi0gICAgICAgID4+PiBjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoMy4xNDE1OTI2NTM1ODk3OTMyKQotICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgICAgICAgICAuLi4KLSAgICAgICAgZGVjaW1hbC5JbmV4YWN0OiBOb25lCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGQgPSBEZWNpbWFsLmZyb21fZmxvYXQoZikgICAgICAgIyBBbiBleGFjdCBjb252ZXJzaW9uCi0gICAgICAgIHJldHVybiBkLl9maXgoc2VsZikgICAgICAgICAgICAgIyBBcHBseSB0aGUgY29udGV4dCByb3VuZGluZwotCi0gICAgIyBNZXRob2RzCi0gICAgZGVmIGFicyhzZWxmLCBhKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG9wZXJhbmQuCi0KLSAgICAgICAgSWYgdGhlIG9wZXJhbmQgaXMgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgdXNpbmcgdGhlIG1pbnVzCi0gICAgICAgIG9wZXJhdGlvbiBvbiB0aGUgb3BlcmFuZC4gIE90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyB1c2luZwotICAgICAgICB0aGUgcGx1cyBvcGVyYXRpb24gb24gdGhlIG9wZXJhbmQuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hYnMoRGVjaW1hbCgnMi4xJykpCi0gICAgICAgIERlY2ltYWwoJzIuMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuYWJzKERlY2ltYWwoJy0xMDAnKSkKLSAgICAgICAgRGVjaW1hbCgnMTAwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hYnMoRGVjaW1hbCgnMTAxLjUnKSkKLSAgICAgICAgRGVjaW1hbCgnMTAxLjUnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFicyhEZWNpbWFsKCctMTAxLjUnKSkKLSAgICAgICAgRGVjaW1hbCgnMTAxLjUnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFicygtMSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5fX2Fic19fKGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBhZGQoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgc3VtIG9mIHRoZSB0d28gb3BlcmFuZHMuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoRGVjaW1hbCgnMTInKSwgRGVjaW1hbCgnNy4wMCcpKQotICAgICAgICBEZWNpbWFsKCcxOS4wMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuYWRkKERlY2ltYWwoJzFFKzInKSwgRGVjaW1hbCgnMS4wMUUrNCcpKQotICAgICAgICBEZWNpbWFsKCcxLjAyRSs0JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoMSwgRGVjaW1hbCgyKSkKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuYWRkKERlY2ltYWwoOCksIDUpCi0gICAgICAgIERlY2ltYWwoJzEzJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoNSwgNSkKLSAgICAgICAgRGVjaW1hbCgnMTAnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgciA9IGEuX19hZGRfXyhiLCBjb250ZXh0PXNlbGYpCi0gICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiByCi0KLSAgICBkZWYgX2FwcGx5KHNlbGYsIGEpOgotICAgICAgICByZXR1cm4gc3RyKGEuX2ZpeChzZWxmKSkKLQotICAgIGRlZiBjYW5vbmljYWwoc2VsZiwgYSk6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIHNhbWUgRGVjaW1hbCBvYmplY3QuCi0KLSAgICAgICAgQXMgd2UgZG8gbm90IGhhdmUgZGlmZmVyZW50IGVuY29kaW5ncyBmb3IgdGhlIHNhbWUgbnVtYmVyLCB0aGUKLSAgICAgICAgcmVjZWl2ZWQgb2JqZWN0IGFscmVhZHkgaXMgaW4gaXRzIGNhbm9uaWNhbCBmb3JtLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY2Fub25pY2FsKERlY2ltYWwoJzIuNTAnKSkKLSAgICAgICAgRGVjaW1hbCgnMi41MCcpCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhLCBEZWNpbWFsKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2Fub25pY2FsIHJlcXVpcmVzIGEgRGVjaW1hbCBhcyBhbiBhcmd1bWVudC4iKQotICAgICAgICByZXR1cm4gYS5jYW5vbmljYWwoKQotCi0gICAgZGVmIGNvbXBhcmUoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkNvbXBhcmVzIHZhbHVlcyBudW1lcmljYWxseS4KLQotICAgICAgICBJZiB0aGUgc2lnbnMgb2YgdGhlIG9wZXJhbmRzIGRpZmZlciwgYSB2YWx1ZSByZXByZXNlbnRpbmcgZWFjaCBvcGVyYW5kCi0gICAgICAgICgnLTEnIGlmIHRoZSBvcGVyYW5kIGlzIGxlc3MgdGhhbiB6ZXJvLCAnMCcgaWYgdGhlIG9wZXJhbmQgaXMgemVybyBvcgotICAgICAgICBuZWdhdGl2ZSB6ZXJvLCBvciAnMScgaWYgdGhlIG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIHplcm8pIGlzIHVzZWQgaW4KLSAgICAgICAgcGxhY2Ugb2YgdGhhdCBvcGVyYW5kIGZvciB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwKLSAgICAgICAgb3BlcmFuZC4KLQotICAgICAgICBUaGUgY29tcGFyaXNvbiBpcyB0aGVuIGVmZmVjdGVkIGJ5IHN1YnRyYWN0aW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBmcm9tCi0gICAgICAgIHRoZSBmaXJzdCBhbmQgdGhlbiByZXR1cm5pbmcgYSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdCBvZiB0aGUKLSAgICAgICAgc3VidHJhY3Rpb246ICctMScgaWYgdGhlIHJlc3VsdCBpcyBsZXNzIHRoYW4gemVybywgJzAnIGlmIHRoZSByZXN1bHQgaXMKLSAgICAgICAgemVybyBvciBuZWdhdGl2ZSB6ZXJvLCBvciAnMScgaWYgdGhlIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gemVyby4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgnMi4xJyksIERlY2ltYWwoJzMnKSkKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgnMi4xJyksIERlY2ltYWwoJzIuMScpKQotICAgICAgICBEZWNpbWFsKCcwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlKERlY2ltYWwoJzIuMScpLCBEZWNpbWFsKCcyLjEwJykpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCcyLjEnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZShEZWNpbWFsKCcyLjEnKSwgRGVjaW1hbCgnLTMnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZShEZWNpbWFsKCctMycpLCBEZWNpbWFsKCcyLjEnKSkKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoMSwgMikKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoRGVjaW1hbCgxKSwgMikKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmUoMSwgRGVjaW1hbCgyKSkKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuY29tcGFyZShiLCBjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgY29tcGFyZV9zaWduYWwoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgb2YgdGhlIHR3byBvcGVyYW5kcyBudW1lcmljYWxseS4KLQotICAgICAgICBJdCdzIHByZXR0eSBtdWNoIGxpa2UgY29tcGFyZSgpLCBidXQgYWxsIE5hTnMgc2lnbmFsLCB3aXRoIHNpZ25hbGluZwotICAgICAgICBOYU5zIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgcXVpZXQgTmFOcy4KLQotICAgICAgICA+Pj4gYyA9IEV4dGVuZGVkQ29udGV4dAotICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKCcyLjEnKSwgRGVjaW1hbCgnMycpKQotICAgICAgICBEZWNpbWFsKCctMScpCi0gICAgICAgID4+PiBjLmNvbXBhcmVfc2lnbmFsKERlY2ltYWwoJzIuMScpLCBEZWNpbWFsKCcyLjEnKSkKLSAgICAgICAgRGVjaW1hbCgnMCcpCi0gICAgICAgID4+PiBjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dID0gMAotICAgICAgICA+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKLSAgICAgICAgMAotICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKCdOYU4nKSwgRGVjaW1hbCgnMi4xJykpCi0gICAgICAgIERlY2ltYWwoJ05hTicpCi0gICAgICAgID4+PiBwcmludChjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dKQotICAgICAgICAxCi0gICAgICAgID4+PiBjLmZsYWdzW0ludmFsaWRPcGVyYXRpb25dID0gMAotICAgICAgICA+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKLSAgICAgICAgMAotICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKCdzTmFOJyksIERlY2ltYWwoJzIuMScpKQotICAgICAgICBEZWNpbWFsKCdOYU4nKQotICAgICAgICA+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKLSAgICAgICAgMQotICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbCgtMSwgMikKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKC0xKSwgMikKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbCgtMSwgRGVjaW1hbCgyKSkKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuY29tcGFyZV9zaWduYWwoYiwgY29udGV4dD1zZWxmKQotCi0gICAgZGVmIGNvbXBhcmVfdG90YWwoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkNvbXBhcmVzIHR3byBvcGVyYW5kcyB1c2luZyB0aGVpciBhYnN0cmFjdCByZXByZXNlbnRhdGlvbi4KLQotICAgICAgICBUaGlzIGlzIG5vdCBsaWtlIHRoZSBzdGFuZGFyZCBjb21wYXJlLCB3aGljaCB1c2UgdGhlaXIgbnVtZXJpY2FsCi0gICAgICAgIHZhbHVlLiBOb3RlIHRoYXQgYSB0b3RhbCBvcmRlcmluZyBpcyBkZWZpbmVkIGZvciBhbGwgcG9zc2libGUgYWJzdHJhY3QKLSAgICAgICAgcmVwcmVzZW50YXRpb25zLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbChEZWNpbWFsKCcxMi43MycpLCBEZWNpbWFsKCcxMjcuOScpKQotICAgICAgICBEZWNpbWFsKCctMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbChEZWNpbWFsKCctMTI3JyksICBEZWNpbWFsKCcxMicpKQotICAgICAgICBEZWNpbWFsKCctMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbChEZWNpbWFsKCcxMi4zMCcpLCBEZWNpbWFsKCcxMi4zJykpCi0gICAgICAgIERlY2ltYWwoJy0xJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKERlY2ltYWwoJzEyLjMwJyksIERlY2ltYWwoJzEyLjMwJykpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmVfdG90YWwoRGVjaW1hbCgnMTIuMycpLCAgRGVjaW1hbCgnMTIuMzAwJykpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmVfdG90YWwoRGVjaW1hbCgnMTIuMycpLCAgRGVjaW1hbCgnTmFOJykpCi0gICAgICAgIERlY2ltYWwoJy0xJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKDEsIDIpCi0gICAgICAgIERlY2ltYWwoJy0xJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKERlY2ltYWwoMSksIDIpCi0gICAgICAgIERlY2ltYWwoJy0xJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlX3RvdGFsKDEsIERlY2ltYWwoMikpCi0gICAgICAgIERlY2ltYWwoJy0xJykKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLmNvbXBhcmVfdG90YWwoYikKLQotICAgIGRlZiBjb21wYXJlX3RvdGFsX21hZyhzZWxmLCBhLCBiKToKLSAgICAgICAgIiIiQ29tcGFyZXMgdHdvIG9wZXJhbmRzIHVzaW5nIHRoZWlyIGFic3RyYWN0IHJlcHJlc2VudGF0aW9uIGlnbm9yaW5nIHNpZ24uCi0KLSAgICAgICAgTGlrZSBjb21wYXJlX3RvdGFsLCBidXQgd2l0aCBvcGVyYW5kJ3Mgc2lnbiBpZ25vcmVkIGFuZCBhc3N1bWVkIHRvIGJlIDAuCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5jb21wYXJlX3RvdGFsX21hZyhiKQotCi0gICAgZGVmIGNvcHlfYWJzKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm5zIGEgY29weSBvZiB0aGUgb3BlcmFuZCB3aXRoIHRoZSBzaWduIHNldCB0byAwLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9hYnMoRGVjaW1hbCgnMi4xJykpCi0gICAgICAgIERlY2ltYWwoJzIuMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9hYnMoRGVjaW1hbCgnLTEwMCcpKQotICAgICAgICBEZWNpbWFsKCcxMDAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfYWJzKC0xKQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLmNvcHlfYWJzKCkKLQotICAgIGRlZiBjb3B5X2RlY2ltYWwoc2VsZiwgYSk6Ci0gICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9mIHRoZSBkZWNpbWFsIG9iamVjdC4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfZGVjaW1hbChEZWNpbWFsKCcyLjEnKSkKLSAgICAgICAgRGVjaW1hbCgnMi4xJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X2RlY2ltYWwoRGVjaW1hbCgnLTEuMDAnKSkKLSAgICAgICAgRGVjaW1hbCgnLTEuMDAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfZGVjaW1hbCgxKQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBEZWNpbWFsKGEpCi0KLSAgICBkZWYgY29weV9uZWdhdGUoc2VsZiwgYSk6Ci0gICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9mIHRoZSBvcGVyYW5kIHdpdGggdGhlIHNpZ24gaW52ZXJ0ZWQuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X25lZ2F0ZShEZWNpbWFsKCcxMDEuNScpKQotICAgICAgICBEZWNpbWFsKCctMTAxLjUnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfbmVnYXRlKERlY2ltYWwoJy0xMDEuNScpKQotICAgICAgICBEZWNpbWFsKCcxMDEuNScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9uZWdhdGUoMSkKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuY29weV9uZWdhdGUoKQotCi0gICAgZGVmIGNvcHlfc2lnbihzZWxmLCBhLCBiKToKLSAgICAgICAgIiIiQ29waWVzIHRoZSBzZWNvbmQgb3BlcmFuZCdzIHNpZ24gdG8gdGhlIGZpcnN0IG9uZS4KLQotICAgICAgICBJbiBkZXRhaWwsIGl0IHJldHVybnMgYSBjb3B5IG9mIHRoZSBmaXJzdCBvcGVyYW5kIHdpdGggdGhlIHNpZ24KLSAgICAgICAgZXF1YWwgdG8gdGhlIHNpZ24gb2YgdGhlIHNlY29uZCBvcGVyYW5kLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKERlY2ltYWwoICcxLjUwJyksIERlY2ltYWwoJzcuMzMnKSkKLSAgICAgICAgRGVjaW1hbCgnMS41MCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKERlY2ltYWwoJy0xLjUwJyksIERlY2ltYWwoJzcuMzMnKSkKLSAgICAgICAgRGVjaW1hbCgnMS41MCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9zaWduKERlY2ltYWwoICcxLjUwJyksIERlY2ltYWwoJy03LjMzJykpCi0gICAgICAgIERlY2ltYWwoJy0xLjUwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X3NpZ24oRGVjaW1hbCgnLTEuNTAnKSwgRGVjaW1hbCgnLTcuMzMnKSkKLSAgICAgICAgRGVjaW1hbCgnLTEuNTAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbigxLCAtMikKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbihEZWNpbWFsKDEpLCAtMikKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbigxLCBEZWNpbWFsKC0yKSkKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuY29weV9zaWduKGIpCi0KLSAgICBkZWYgZGl2aWRlKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJEZWNpbWFsIGRpdmlzaW9uIGluIGEgc3BlY2lmaWVkIGNvbnRleHQuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMScpLCBEZWNpbWFsKCczJykpCi0gICAgICAgIERlY2ltYWwoJzAuMzMzMzMzMzMzJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCczJykpCi0gICAgICAgIERlY2ltYWwoJzAuNjY2NjY2NjY3JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnNScpLCBEZWNpbWFsKCcyJykpCi0gICAgICAgIERlY2ltYWwoJzIuNScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKERlY2ltYWwoJzEnKSwgRGVjaW1hbCgnMTAnKSkKLSAgICAgICAgRGVjaW1hbCgnMC4xJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMTInKSwgRGVjaW1hbCgnMTInKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKERlY2ltYWwoJzguMDAnKSwgRGVjaW1hbCgnMicpKQotICAgICAgICBEZWNpbWFsKCc0LjAwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMi40MDAnKSwgRGVjaW1hbCgnMi4wJykpCi0gICAgICAgIERlY2ltYWwoJzEuMjAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZShEZWNpbWFsKCcxMDAwJyksIERlY2ltYWwoJzEwMCcpKQotICAgICAgICBEZWNpbWFsKCcxMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKERlY2ltYWwoJzEwMDAnKSwgRGVjaW1hbCgnMScpKQotICAgICAgICBEZWNpbWFsKCcxMDAwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCgnMi40MEUrNicpLCBEZWNpbWFsKCcyJykpCi0gICAgICAgIERlY2ltYWwoJzEuMjBFKzYnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZSg1LCA1KQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoRGVjaW1hbCg1KSwgNSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKDUsIERlY2ltYWwoNSkpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgciA9IGEuX190cnVlZGl2X18oYiwgY29udGV4dD1zZWxmKQotICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gcgotCi0gICAgZGVmIGRpdmlkZV9pbnQoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkRpdmlkZXMgdHdvIG51bWJlcnMgYW5kIHJldHVybnMgdGhlIGludGVnZXIgcGFydCBvZiB0aGUgcmVzdWx0LgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzMnKSkKLSAgICAgICAgRGVjaW1hbCgnMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludChEZWNpbWFsKCcxMCcpLCBEZWNpbWFsKCczJykpCi0gICAgICAgIERlY2ltYWwoJzMnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZV9pbnQoRGVjaW1hbCgnMScpLCBEZWNpbWFsKCcwLjMnKSkKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludCgxMCwgMykKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludChEZWNpbWFsKDEwKSwgMykKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludCgxMCwgRGVjaW1hbCgzKSkKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByID0gYS5fX2Zsb29yZGl2X18oYiwgY29udGV4dD1zZWxmKQotICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gcgotCi0gICAgZGVmIGRpdm1vZChzZWxmLCBhLCBiKToKLSAgICAgICAgIiIiUmV0dXJuIChhIC8vIGIsIGEgJSBiKS4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZChEZWNpbWFsKDgpLCBEZWNpbWFsKDMpKQotICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcyJykpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2bW9kKERlY2ltYWwoOCksIERlY2ltYWwoNCkpCi0gICAgICAgIChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZtb2QoOCwgNCkKLSAgICAgICAgKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMCcpKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZChEZWNpbWFsKDgpLCA0KQotICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcwJykpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2bW9kKDgsIERlY2ltYWwoNCkpCi0gICAgICAgIChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHIgPSBhLl9fZGl2bW9kX18oYiwgY29udGV4dD1zZWxmKQotICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gcgotCi0gICAgZGVmIGV4cChzZWxmLCBhKToKLSAgICAgICAgIiIiUmV0dXJucyBlICoqIGEuCi0KLSAgICAgICAgPj4+IGMgPSBFeHRlbmRlZENvbnRleHQuY29weSgpCi0gICAgICAgID4+PiBjLkVtaW4gPSAtOTk5Ci0gICAgICAgID4+PiBjLkVtYXggPSA5OTkKLSAgICAgICAgPj4+IGMuZXhwKERlY2ltYWwoJy1JbmZpbml0eScpKQotICAgICAgICBEZWNpbWFsKCcwJykKLSAgICAgICAgPj4+IGMuZXhwKERlY2ltYWwoJy0xJykpCi0gICAgICAgIERlY2ltYWwoJzAuMzY3ODc5NDQxJykKLSAgICAgICAgPj4+IGMuZXhwKERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBjLmV4cChEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJzIuNzE4MjgxODMnKQotICAgICAgICA+Pj4gYy5leHAoRGVjaW1hbCgnMC42OTMxNDcxODEnKSkKLSAgICAgICAgRGVjaW1hbCgnMi4wMDAwMDAwMCcpCi0gICAgICAgID4+PiBjLmV4cChEZWNpbWFsKCcrSW5maW5pdHknKSkKLSAgICAgICAgRGVjaW1hbCgnSW5maW5pdHknKQotICAgICAgICA+Pj4gYy5leHAoMTApCi0gICAgICAgIERlY2ltYWwoJzIyMDI2LjQ2NTgnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9X2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5leHAoY29udGV4dD1zZWxmKQotCi0gICAgZGVmIGZtYShzZWxmLCBhLCBiLCBjKToKLSAgICAgICAgIiIiUmV0dXJucyBhIG11bHRpcGxpZWQgYnkgYiwgcGx1cyBjLgotCi0gICAgICAgIFRoZSBmaXJzdCB0d28gb3BlcmFuZHMgYXJlIG11bHRpcGxpZWQgdG9nZXRoZXIsIHVzaW5nIG11bHRpcGx5LAotICAgICAgICB0aGUgdGhpcmQgb3BlcmFuZCBpcyB0aGVuIGFkZGVkIHRvIHRoZSByZXN1bHQgb2YgdGhhdAotICAgICAgICBtdWx0aXBsaWNhdGlvbiwgdXNpbmcgYWRkLCBhbGwgd2l0aCBvbmx5IG9uZSBmaW5hbCByb3VuZGluZy4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmZtYShEZWNpbWFsKCczJyksIERlY2ltYWwoJzUnKSwgRGVjaW1hbCgnNycpKQotICAgICAgICBEZWNpbWFsKCcyMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKERlY2ltYWwoJzMnKSwgRGVjaW1hbCgnLTUnKSwgRGVjaW1hbCgnNycpKQotICAgICAgICBEZWNpbWFsKCctOCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKERlY2ltYWwoJzg4ODU2NTI5MCcpLCBEZWNpbWFsKCcxNTU3Ljk2OTMwJyksIERlY2ltYWwoJy04NjA4Ny43NTc4JykpCi0gICAgICAgIERlY2ltYWwoJzEuMzg0MzU3MzZFKzEyJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5mbWEoMSwgMywgNCkKLSAgICAgICAgRGVjaW1hbCgnNycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKDEsIERlY2ltYWwoMyksIDQpCi0gICAgICAgIERlY2ltYWwoJzcnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmZtYSgxLCAzLCBEZWNpbWFsKDQpKQotICAgICAgICBEZWNpbWFsKCc3JykKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLmZtYShiLCBjLCBjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgaXNfY2Fub25pY2FsKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBjYW5vbmljYWw7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCi0KLSAgICAgICAgQ3VycmVudGx5LCB0aGUgZW5jb2Rpbmcgb2YgYSBEZWNpbWFsIGluc3RhbmNlIGlzIGFsd2F5cwotICAgICAgICBjYW5vbmljYWwsIHNvIHRoaXMgbWV0aG9kIHJldHVybnMgVHJ1ZSBmb3IgYW55IERlY2ltYWwuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19jYW5vbmljYWwoRGVjaW1hbCgnMi41MCcpKQotICAgICAgICBUcnVlCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhLCBEZWNpbWFsKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaXNfY2Fub25pY2FsIHJlcXVpcmVzIGEgRGVjaW1hbCBhcyBhbiBhcmd1bWVudC4iKQotICAgICAgICByZXR1cm4gYS5pc19jYW5vbmljYWwoKQotCi0gICAgZGVmIGlzX2Zpbml0ZShzZWxmLCBhKToKLSAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIG9wZXJhbmQgaXMgZmluaXRlOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgotCi0gICAgICAgIEEgRGVjaW1hbCBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIGZpbml0ZSBpZiBpdCBpcyBuZWl0aGVyCi0gICAgICAgIGluZmluaXRlIG5vciBhIE5hTi4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2Zpbml0ZShEZWNpbWFsKCcyLjUwJykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19maW5pdGUoRGVjaW1hbCgnLTAuMycpKQotICAgICAgICBUcnVlCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfZmluaXRlKERlY2ltYWwoJzAnKSkKLSAgICAgICAgVHJ1ZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2Zpbml0ZShEZWNpbWFsKCdJbmYnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19maW5pdGUoRGVjaW1hbCgnTmFOJykpCi0gICAgICAgIEZhbHNlCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfZmluaXRlKDEpCi0gICAgICAgIFRydWUKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLmlzX2Zpbml0ZSgpCi0KLSAgICBkZWYgaXNfaW5maW5pdGUoc2VsZiwgYSk6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBvcGVyYW5kIGlzIGluZmluaXRlOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfaW5maW5pdGUoRGVjaW1hbCgnMi41MCcpKQotICAgICAgICBGYWxzZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKERlY2ltYWwoJy1JbmYnKSkKLSAgICAgICAgVHJ1ZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKERlY2ltYWwoJ05hTicpKQotICAgICAgICBGYWxzZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKDEpCi0gICAgICAgIEZhbHNlCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5pc19pbmZpbml0ZSgpCi0KLSAgICBkZWYgaXNfbmFuKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBhIHFOYU4gb3Igc05hTjsKLSAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX25hbihEZWNpbWFsKCcyLjUwJykpCi0gICAgICAgIEZhbHNlCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfbmFuKERlY2ltYWwoJ05hTicpKQotICAgICAgICBUcnVlCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfbmFuKERlY2ltYWwoJy1zTmFOJykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19uYW4oMSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLmlzX25hbigpCi0KLSAgICBkZWYgaXNfbm9ybWFsKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBhIG5vcm1hbCBudW1iZXI7Ci0gICAgICAgIG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCi0KLSAgICAgICAgPj4+IGMgPSBFeHRlbmRlZENvbnRleHQuY29weSgpCi0gICAgICAgID4+PiBjLkVtaW4gPSAtOTk5Ci0gICAgICAgID4+PiBjLkVtYXggPSA5OTkKLSAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJzIuNTAnKSkKLSAgICAgICAgVHJ1ZQotICAgICAgICA+Pj4gYy5pc19ub3JtYWwoRGVjaW1hbCgnMC4xRS05OTknKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJzAuMDAnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJy1JbmYnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJ05hTicpKQotICAgICAgICBGYWxzZQotICAgICAgICA+Pj4gYy5pc19ub3JtYWwoMSkKLSAgICAgICAgVHJ1ZQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuaXNfbm9ybWFsKGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBpc19xbmFuKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBhIHF1aWV0IE5hTjsgb3RoZXJ3aXNlIHJldHVybiBGYWxzZS4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3FuYW4oRGVjaW1hbCgnMi41MCcpKQotICAgICAgICBGYWxzZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3FuYW4oRGVjaW1hbCgnTmFOJykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19xbmFuKERlY2ltYWwoJ3NOYU4nKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19xbmFuKDEpCi0gICAgICAgIEZhbHNlCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5pc19xbmFuKCkKLQotICAgIGRlZiBpc19zaWduZWQoc2VsZiwgYSk6Ci0gICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBvcGVyYW5kIGlzIG5lZ2F0aXZlOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc2lnbmVkKERlY2ltYWwoJzIuNTAnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zaWduZWQoRGVjaW1hbCgnLTEyJykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zaWduZWQoRGVjaW1hbCgnLTAnKSkKLSAgICAgICAgVHJ1ZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NpZ25lZCg4KQotICAgICAgICBGYWxzZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NpZ25lZCgtOCkKLSAgICAgICAgVHJ1ZQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuaXNfc2lnbmVkKCkKLQotICAgIGRlZiBpc19zbmFuKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBhIHNpZ25hbGluZyBOYU47Ci0gICAgICAgIG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zbmFuKERlY2ltYWwoJzIuNTAnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zbmFuKERlY2ltYWwoJ05hTicpKQotICAgICAgICBGYWxzZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NuYW4oRGVjaW1hbCgnc05hTicpKQotICAgICAgICBUcnVlCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc25hbigxKQotICAgICAgICBGYWxzZQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuaXNfc25hbigpCi0KLSAgICBkZWYgaXNfc3Vibm9ybWFsKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgb3BlcmFuZCBpcyBzdWJub3JtYWw7IG90aGVyd2lzZSByZXR1cm4gRmFsc2UuCi0KLSAgICAgICAgPj4+IGMgPSBFeHRlbmRlZENvbnRleHQuY29weSgpCi0gICAgICAgID4+PiBjLkVtaW4gPSAtOTk5Ci0gICAgICAgID4+PiBjLkVtYXggPSA5OTkKLSAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJzIuNTAnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJzAuMUUtOTk5JykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJzAuMDAnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJy1JbmYnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoJ05hTicpKQotICAgICAgICBGYWxzZQotICAgICAgICA+Pj4gYy5pc19zdWJub3JtYWwoMSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLmlzX3N1Ym5vcm1hbChjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgaXNfemVybyhzZWxmLCBhKToKLSAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIG9wZXJhbmQgaXMgYSB6ZXJvOyBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybyhEZWNpbWFsKCcwJykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc196ZXJvKERlY2ltYWwoJzIuNTAnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc196ZXJvKERlY2ltYWwoJy0wRSsyJykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc196ZXJvKDEpCi0gICAgICAgIEZhbHNlCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybygwKQotICAgICAgICBUcnVlCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5pc196ZXJvKCkKLQotICAgIGRlZiBsbihzZWxmLCBhKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgbmF0dXJhbCAoYmFzZSBlKSBsb2dhcml0aG0gb2YgdGhlIG9wZXJhbmQuCi0KLSAgICAgICAgPj4+IGMgPSBFeHRlbmRlZENvbnRleHQuY29weSgpCi0gICAgICAgID4+PiBjLkVtaW4gPSAtOTk5Ci0gICAgICAgID4+PiBjLkVtYXggPSA5OTkKLSAgICAgICAgPj4+IGMubG4oRGVjaW1hbCgnMCcpKQotICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQotICAgICAgICA+Pj4gYy5sbihEZWNpbWFsKCcxLjAwMCcpKQotICAgICAgICBEZWNpbWFsKCcwJykKLSAgICAgICAgPj4+IGMubG4oRGVjaW1hbCgnMi43MTgyODE4MycpKQotICAgICAgICBEZWNpbWFsKCcxLjAwMDAwMDAwJykKLSAgICAgICAgPj4+IGMubG4oRGVjaW1hbCgnMTAnKSkKLSAgICAgICAgRGVjaW1hbCgnMi4zMDI1ODUwOScpCi0gICAgICAgID4+PiBjLmxuKERlY2ltYWwoJytJbmZpbml0eScpKQotICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCi0gICAgICAgID4+PiBjLmxuKDEpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubG4oY29udGV4dD1zZWxmKQotCi0gICAgZGVmIGxvZzEwKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiB0aGUgb3BlcmFuZC4KLQotICAgICAgICA+Pj4gYyA9IEV4dGVuZGVkQ29udGV4dC5jb3B5KCkKLSAgICAgICAgPj4+IGMuRW1pbiA9IC05OTkKLSAgICAgICAgPj4+IGMuRW1heCA9IDk5OQotICAgICAgICA+Pj4gYy5sb2cxMChEZWNpbWFsKCcwJykpCi0gICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCi0gICAgICAgID4+PiBjLmxvZzEwKERlY2ltYWwoJzAuMDAxJykpCi0gICAgICAgIERlY2ltYWwoJy0zJykKLSAgICAgICAgPj4+IGMubG9nMTAoRGVjaW1hbCgnMS4wMDAnKSkKLSAgICAgICAgRGVjaW1hbCgnMCcpCi0gICAgICAgID4+PiBjLmxvZzEwKERlY2ltYWwoJzInKSkKLSAgICAgICAgRGVjaW1hbCgnMC4zMDEwMjk5OTYnKQotICAgICAgICA+Pj4gYy5sb2cxMChEZWNpbWFsKCcxMCcpKQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgPj4+IGMubG9nMTAoRGVjaW1hbCgnNzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMS44NDUwOTgwNCcpCi0gICAgICAgID4+PiBjLmxvZzEwKERlY2ltYWwoJytJbmZpbml0eScpKQotICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCi0gICAgICAgID4+PiBjLmxvZzEwKDApCi0gICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCi0gICAgICAgID4+PiBjLmxvZzEwKDEpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubG9nMTAoY29udGV4dD1zZWxmKQotCi0gICAgZGVmIGxvZ2Ioc2VsZiwgYSk6Ci0gICAgICAgICIiIiBSZXR1cm5zIHRoZSBleHBvbmVudCBvZiB0aGUgbWFnbml0dWRlIG9mIHRoZSBvcGVyYW5kJ3MgTVNELgotCi0gICAgICAgIFRoZSByZXN1bHQgaXMgdGhlIGludGVnZXIgd2hpY2ggaXMgdGhlIGV4cG9uZW50IG9mIHRoZSBtYWduaXR1ZGUKLSAgICAgICAgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQgb2YgdGhlIG9wZXJhbmQgKGFzIHRob3VnaCB0aGUKLSAgICAgICAgb3BlcmFuZCB3ZXJlIHRydW5jYXRlZCB0byBhIHNpbmdsZSBkaWdpdCB3aGlsZSBtYWludGFpbmluZyB0aGUKLSAgICAgICAgdmFsdWUgb2YgdGhhdCBkaWdpdCBhbmQgd2l0aG91dCBsaW1pdGluZyB0aGUgcmVzdWx0aW5nIGV4cG9uZW50KS4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoRGVjaW1hbCgnMjUwJykpCi0gICAgICAgIERlY2ltYWwoJzInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoRGVjaW1hbCgnMi41MCcpKQotICAgICAgICBEZWNpbWFsKCcwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2diKERlY2ltYWwoJzAuMDMnKSkKLSAgICAgICAgRGVjaW1hbCgnLTInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoRGVjaW1hbCgnMCcpKQotICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoMSkKLSAgICAgICAgRGVjaW1hbCgnMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9nYigxMCkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9nYigxMDApCi0gICAgICAgIERlY2ltYWwoJzInKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubG9nYihjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgbG9naWNhbF9hbmQoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkFwcGxpZXMgdGhlIGxvZ2ljYWwgb3BlcmF0aW9uICdhbmQnIGJldHdlZW4gZWFjaCBvcGVyYW5kJ3MgZGlnaXRzLgotCi0gICAgICAgIFRoZSBvcGVyYW5kcyBtdXN0IGJlIGJvdGggbG9naWNhbCBudW1iZXJzLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCcwJykpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKERlY2ltYWwoJzAnKSwgRGVjaW1hbCgnMScpKQotICAgICAgICBEZWNpbWFsKCcwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZChEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoRGVjaW1hbCgnMScpLCBEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKERlY2ltYWwoJzExMDAnKSwgRGVjaW1hbCgnMTAxMCcpKQotICAgICAgICBEZWNpbWFsKCcxMDAwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZChEZWNpbWFsKCcxMTExJyksIERlY2ltYWwoJzEwJykpCi0gICAgICAgIERlY2ltYWwoJzEwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZCgxMTAsIDExMDEpCi0gICAgICAgIERlY2ltYWwoJzEwMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoRGVjaW1hbCgxMTApLCAxMTAxKQotICAgICAgICBEZWNpbWFsKCcxMDAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKDExMCwgRGVjaW1hbCgxMTAxKSkKLSAgICAgICAgRGVjaW1hbCgnMTAwJykKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLmxvZ2ljYWxfYW5kKGIsIGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBsb2dpY2FsX2ludmVydChzZWxmLCBhKToKLSAgICAgICAgIiIiSW52ZXJ0IGFsbCB0aGUgZGlnaXRzIGluIHRoZSBvcGVyYW5kLgotCi0gICAgICAgIFRoZSBvcGVyYW5kIG11c3QgYmUgYSBsb2dpY2FsIG51bWJlci4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfaW52ZXJ0KERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMTExMTExMTExJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2ludmVydChEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJzExMTExMTExMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9pbnZlcnQoRGVjaW1hbCgnMTExMTExMTExJykpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfaW52ZXJ0KERlY2ltYWwoJzEwMTAxMDEwMScpKQotICAgICAgICBEZWNpbWFsKCcxMDEwMTAxMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9pbnZlcnQoMTEwMSkKLSAgICAgICAgRGVjaW1hbCgnMTExMTEwMDEwJykKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLmxvZ2ljYWxfaW52ZXJ0KGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBsb2dpY2FsX29yKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJBcHBsaWVzIHRoZSBsb2dpY2FsIG9wZXJhdGlvbiAnb3InIGJldHdlZW4gZWFjaCBvcGVyYW5kJ3MgZGlnaXRzLgotCi0gICAgICAgIFRoZSBvcGVyYW5kcyBtdXN0IGJlIGJvdGggbG9naWNhbCBudW1iZXJzLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcwJyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcwJyksIERlY2ltYWwoJzEnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxJyksIERlY2ltYWwoJzEnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxMTAwJyksIERlY2ltYWwoJzEwMTAnKSkKLSAgICAgICAgRGVjaW1hbCgnMTExMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKCcxMTEwJyksIERlY2ltYWwoJzEwJykpCi0gICAgICAgIERlY2ltYWwoJzExMTAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfb3IoMTEwLCAxMTAxKQotICAgICAgICBEZWNpbWFsKCcxMTExJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX29yKERlY2ltYWwoMTEwKSwgMTEwMSkKLSAgICAgICAgRGVjaW1hbCgnMTExMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcigxMTAsIERlY2ltYWwoMTEwMSkpCi0gICAgICAgIERlY2ltYWwoJzExMTEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubG9naWNhbF9vcihiLCBjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgbG9naWNhbF94b3Ioc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkFwcGxpZXMgdGhlIGxvZ2ljYWwgb3BlcmF0aW9uICd4b3InIGJldHdlZW4gZWFjaCBvcGVyYW5kJ3MgZGlnaXRzLgotCi0gICAgICAgIFRoZSBvcGVyYW5kcyBtdXN0IGJlIGJvdGggbG9naWNhbCBudW1iZXJzLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCcwJykpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoJzAnKSwgRGVjaW1hbCgnMScpKQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX3hvcihEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoRGVjaW1hbCgnMScpLCBEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoJzExMDAnKSwgRGVjaW1hbCgnMTAxMCcpKQotICAgICAgICBEZWNpbWFsKCcxMTAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoJzExMTEnKSwgRGVjaW1hbCgnMTAnKSkKLSAgICAgICAgRGVjaW1hbCgnMTEwMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoMTEwLCAxMTAxKQotICAgICAgICBEZWNpbWFsKCcxMDExJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX3hvcihEZWNpbWFsKDExMCksIDExMDEpCi0gICAgICAgIERlY2ltYWwoJzEwMTEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKDExMCwgRGVjaW1hbCgxMTAxKSkKLSAgICAgICAgRGVjaW1hbCgnMTAxMScpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5sb2dpY2FsX3hvcihiLCBjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgbWF4KHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJtYXggY29tcGFyZXMgdHdvIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJucyB0aGUgbWF4aW11bS4KLQotICAgICAgICBJZiBlaXRoZXIgb3BlcmFuZCBpcyBhIE5hTiB0aGVuIHRoZSBnZW5lcmFsIHJ1bGVzIGFwcGx5LgotICAgICAgICBPdGhlcndpc2UsIHRoZSBvcGVyYW5kcyBhcmUgY29tcGFyZWQgYXMgdGhvdWdoIGJ5IHRoZSBjb21wYXJlCi0gICAgICAgIG9wZXJhdGlvbi4gIElmIHRoZXkgYXJlIG51bWVyaWNhbGx5IGVxdWFsIHRoZW4gdGhlIGxlZnQtaGFuZCBvcGVyYW5kCi0gICAgICAgIGlzIGNob3NlbiBhcyB0aGUgcmVzdWx0LiAgT3RoZXJ3aXNlIHRoZSBtYXhpbXVtIChjbG9zZXIgdG8gcG9zaXRpdmUKLSAgICAgICAgaW5maW5pdHkpIG9mIHRoZSB0d28gb3BlcmFuZHMgaXMgY2hvc2VuIGFzIHRoZSByZXN1bHQuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCcyJykpCi0gICAgICAgIERlY2ltYWwoJzMnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heChEZWNpbWFsKCctMTAnKSwgRGVjaW1hbCgnMycpKQotICAgICAgICBEZWNpbWFsKCczJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgnMS4wJyksIERlY2ltYWwoJzEnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnTmFOJykpCi0gICAgICAgIERlY2ltYWwoJzcnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heCgxLCAyKQotICAgICAgICBEZWNpbWFsKCcyJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgxKSwgMikKLSAgICAgICAgRGVjaW1hbCgnMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KDEsIERlY2ltYWwoMikpCi0gICAgICAgIERlY2ltYWwoJzInKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubWF4KGIsIGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBtYXhfbWFnKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJDb21wYXJlcyB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZyhEZWNpbWFsKCc3JyksIERlY2ltYWwoJ05hTicpKQotICAgICAgICBEZWNpbWFsKCc3JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnLTEwJykpCi0gICAgICAgIERlY2ltYWwoJy0xMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZygxLCAtMikKLSAgICAgICAgRGVjaW1hbCgnLTInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heF9tYWcoRGVjaW1hbCgxKSwgLTIpCi0gICAgICAgIERlY2ltYWwoJy0yJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKDEsIERlY2ltYWwoLTIpKQotICAgICAgICBEZWNpbWFsKCctMicpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5tYXhfbWFnKGIsIGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBtaW4oc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIm1pbiBjb21wYXJlcyB0d28gdmFsdWVzIG51bWVyaWNhbGx5IGFuZCByZXR1cm5zIHRoZSBtaW5pbXVtLgotCi0gICAgICAgIElmIGVpdGhlciBvcGVyYW5kIGlzIGEgTmFOIHRoZW4gdGhlIGdlbmVyYWwgcnVsZXMgYXBwbHkuCi0gICAgICAgIE90aGVyd2lzZSwgdGhlIG9wZXJhbmRzIGFyZSBjb21wYXJlZCBhcyB0aG91Z2ggYnkgdGhlIGNvbXBhcmUKLSAgICAgICAgb3BlcmF0aW9uLiAgSWYgdGhleSBhcmUgbnVtZXJpY2FsbHkgZXF1YWwgdGhlbiB0aGUgbGVmdC1oYW5kIG9wZXJhbmQKLSAgICAgICAgaXMgY2hvc2VuIGFzIHRoZSByZXN1bHQuICBPdGhlcndpc2UgdGhlIG1pbmltdW0gKGNsb3NlciB0byBuZWdhdGl2ZQotICAgICAgICBpbmZpbml0eSkgb2YgdGhlIHR3byBvcGVyYW5kcyBpcyBjaG9zZW4gYXMgdGhlIHJlc3VsdC4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbihEZWNpbWFsKCczJyksIERlY2ltYWwoJzInKSkKLSAgICAgICAgRGVjaW1hbCgnMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoJy0xMCcpLCBEZWNpbWFsKCczJykpCi0gICAgICAgIERlY2ltYWwoJy0xMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoJzEuMCcpLCBEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJzEuMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnTmFOJykpCi0gICAgICAgIERlY2ltYWwoJzcnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbigxLCAyKQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW4oRGVjaW1hbCgxKSwgMikKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKDEsIERlY2ltYWwoMjkpKQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLm1pbihiLCBjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgbWluX21hZyhzZWxmLCBhLCBiKToKLSAgICAgICAgIiIiQ29tcGFyZXMgdGhlIHZhbHVlcyBudW1lcmljYWxseSB3aXRoIHRoZWlyIHNpZ24gaWdub3JlZC4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCctMicpKQotICAgICAgICBEZWNpbWFsKCctMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluX21hZyhEZWNpbWFsKCctMycpLCBEZWNpbWFsKCdOYU4nKSkKLSAgICAgICAgRGVjaW1hbCgnLTMnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoMSwgLTIpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoRGVjaW1hbCgxKSwgLTIpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoMSwgRGVjaW1hbCgtMikpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubWluX21hZyhiLCBjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgbWludXMoc2VsZiwgYSk6Ci0gICAgICAgICIiIk1pbnVzIGNvcnJlc3BvbmRzIHRvIHVuYXJ5IHByZWZpeCBtaW51cyBpbiBQeXRob24uCi0KLSAgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBldmFsdWF0ZWQgdXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgc3VidHJhY3Q7IHRoZQotICAgICAgICBvcGVyYXRpb24gbWludXMoYSkgaXMgY2FsY3VsYXRlZCBhcyBzdWJ0cmFjdCgnMCcsIGEpIHdoZXJlIHRoZSAnMCcKLSAgICAgICAgaGFzIHRoZSBzYW1lIGV4cG9uZW50IGFzIHRoZSBvcGVyYW5kLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWludXMoRGVjaW1hbCgnMS4zJykpCi0gICAgICAgIERlY2ltYWwoJy0xLjMnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbnVzKERlY2ltYWwoJy0xLjMnKSkKLSAgICAgICAgRGVjaW1hbCgnMS4zJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW51cygxKQotICAgICAgICBEZWNpbWFsKCctMScpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5fX25lZ19fKGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBtdWx0aXBseShzZWxmLCBhLCBiKToKLSAgICAgICAgIiIibXVsdGlwbHkgbXVsdGlwbGllcyB0d28gb3BlcmFuZHMuCi0KLSAgICAgICAgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBzcGVjaWFsIHZhbHVlIHRoZW4gdGhlIGdlbmVyYWwgcnVsZXMgYXBwbHkuCi0gICAgICAgIE90aGVyd2lzZSwgdGhlIG9wZXJhbmRzIGFyZSBtdWx0aXBsaWVkIHRvZ2V0aGVyCi0gICAgICAgICgnbG9uZyBtdWx0aXBsaWNhdGlvbicpLCByZXN1bHRpbmcgaW4gYSBudW1iZXIgd2hpY2ggbWF5IGJlIGFzIGxvbmcgYXMKLSAgICAgICAgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgdHdvIG9wZXJhbmRzLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCgnMS4yMCcpLCBEZWNpbWFsKCczJykpCi0gICAgICAgIERlY2ltYWwoJzMuNjAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm11bHRpcGx5KERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnMycpKQotICAgICAgICBEZWNpbWFsKCcyMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCgnMC45JyksIERlY2ltYWwoJzAuOCcpKQotICAgICAgICBEZWNpbWFsKCcwLjcyJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseShEZWNpbWFsKCcwLjknKSwgRGVjaW1hbCgnLTAnKSkKLSAgICAgICAgRGVjaW1hbCgnLTAuMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCgnNjU0MzIxJyksIERlY2ltYWwoJzY1NDMyMScpKQotICAgICAgICBEZWNpbWFsKCc0LjI4MTM1OTcxRSsxMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoNywgNykKLSAgICAgICAgRGVjaW1hbCgnNDknKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm11bHRpcGx5KERlY2ltYWwoNyksIDcpCi0gICAgICAgIERlY2ltYWwoJzQ5JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseSg3LCBEZWNpbWFsKDcpKQotICAgICAgICBEZWNpbWFsKCc0OScpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByID0gYS5fX211bF9fKGIsIGNvbnRleHQ9c2VsZikKLSAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHIKLQotICAgIGRlZiBuZXh0X21pbnVzKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIHNtYWxsZXIgdGhhbiBhLgotCi0gICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQotICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQotICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5Ci0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubmV4dF9taW51cyhEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJzAuOTk5OTk5OTk5JykKLSAgICAgICAgPj4+IGMubmV4dF9taW51cyhEZWNpbWFsKCcxRS0xMDA3JykpCi0gICAgICAgIERlY2ltYWwoJzBFLTEwMDcnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5leHRfbWludXMoRGVjaW1hbCgnLTEuMDAwMDAwMDMnKSkKLSAgICAgICAgRGVjaW1hbCgnLTEuMDAwMDAwMDQnKQotICAgICAgICA+Pj4gYy5uZXh0X21pbnVzKERlY2ltYWwoJ0luZmluaXR5JykpCi0gICAgICAgIERlY2ltYWwoJzkuOTk5OTk5OTlFKzk5OScpCi0gICAgICAgID4+PiBjLm5leHRfbWludXMoMSkKLSAgICAgICAgRGVjaW1hbCgnMC45OTk5OTk5OTknKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubmV4dF9taW51cyhjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgbmV4dF9wbHVzKHNlbGYsIGEpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSBzbWFsbGVzdCByZXByZXNlbnRhYmxlIG51bWJlciBsYXJnZXIgdGhhbiBhLgotCi0gICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQotICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQotICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5Ci0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubmV4dF9wbHVzKERlY2ltYWwoJzEnKSkKLSAgICAgICAgRGVjaW1hbCgnMS4wMDAwMDAwMScpCi0gICAgICAgID4+PiBjLm5leHRfcGx1cyhEZWNpbWFsKCctMUUtMTAwNycpKQotICAgICAgICBEZWNpbWFsKCctMEUtMTAwNycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubmV4dF9wbHVzKERlY2ltYWwoJy0xLjAwMDAwMDAzJykpCi0gICAgICAgIERlY2ltYWwoJy0xLjAwMDAwMDAyJykKLSAgICAgICAgPj4+IGMubmV4dF9wbHVzKERlY2ltYWwoJy1JbmZpbml0eScpKQotICAgICAgICBEZWNpbWFsKCctOS45OTk5OTk5OUUrOTk5JykKLSAgICAgICAgPj4+IGMubmV4dF9wbHVzKDEpCi0gICAgICAgIERlY2ltYWwoJzEuMDAwMDAwMDEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubmV4dF9wbHVzKGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBuZXh0X3Rvd2FyZChzZWxmLCBhLCBiKToKLSAgICAgICAgIiIiUmV0dXJucyB0aGUgbnVtYmVyIGNsb3Nlc3QgdG8gYSwgaW4gZGlyZWN0aW9uIHRvd2FyZHMgYi4KLQotICAgICAgICBUaGUgcmVzdWx0IGlzIHRoZSBjbG9zZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIGZyb20gdGhlIGZpcnN0Ci0gICAgICAgIG9wZXJhbmQgKGJ1dCBub3QgdGhlIGZpcnN0IG9wZXJhbmQpIHRoYXQgaXMgaW4gdGhlIGRpcmVjdGlvbgotICAgICAgICB0b3dhcmRzIHRoZSBzZWNvbmQgb3BlcmFuZCwgdW5sZXNzIHRoZSBvcGVyYW5kcyBoYXZlIHRoZSBzYW1lCi0gICAgICAgIHZhbHVlLgotCi0gICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQotICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQotICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5Ci0gICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoJzEnKSwgRGVjaW1hbCgnMicpKQotICAgICAgICBEZWNpbWFsKCcxLjAwMDAwMDAxJykKLSAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoRGVjaW1hbCgnLTFFLTEwMDcnKSwgRGVjaW1hbCgnMScpKQotICAgICAgICBEZWNpbWFsKCctMEUtMTAwNycpCi0gICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoJy0xLjAwMDAwMDAzJyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnLTEuMDAwMDAwMDInKQotICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMC45OTk5OTk5OTknKQotICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKCcxRS0xMDA3JyksIERlY2ltYWwoJy0xMDAnKSkKLSAgICAgICAgRGVjaW1hbCgnMEUtMTAwNycpCi0gICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoJy0xLjAwMDAwMDAzJyksIERlY2ltYWwoJy0xMCcpKQotICAgICAgICBEZWNpbWFsKCctMS4wMDAwMDAwNCcpCi0gICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoJzAuMDAnKSwgRGVjaW1hbCgnLTAuMDAwMCcpKQotICAgICAgICBEZWNpbWFsKCctMC4wMCcpCi0gICAgICAgID4+PiBjLm5leHRfdG93YXJkKDAsIDEpCi0gICAgICAgIERlY2ltYWwoJzFFLTEwMDcnKQotICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKDApLCAxKQotICAgICAgICBEZWNpbWFsKCcxRS0xMDA3JykKLSAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoMCwgRGVjaW1hbCgxKSkKLSAgICAgICAgRGVjaW1hbCgnMUUtMTAwNycpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5uZXh0X3Rvd2FyZChiLCBjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgbm9ybWFsaXplKHNlbGYsIGEpOgotICAgICAgICAiIiJub3JtYWxpemUgcmVkdWNlcyBhbiBvcGVyYW5kIHRvIGl0cyBzaW1wbGVzdCBmb3JtLgotCi0gICAgICAgIEVzc2VudGlhbGx5IGEgcGx1cyBvcGVyYXRpb24gd2l0aCBhbGwgdHJhaWxpbmcgemVyb3MgcmVtb3ZlZCBmcm9tIHRoZQotICAgICAgICByZXN1bHQuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoRGVjaW1hbCgnMi4xJykpCi0gICAgICAgIERlY2ltYWwoJzIuMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubm9ybWFsaXplKERlY2ltYWwoJy0yLjAnKSkKLSAgICAgICAgRGVjaW1hbCgnLTInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5vcm1hbGl6ZShEZWNpbWFsKCcxLjIwMCcpKQotICAgICAgICBEZWNpbWFsKCcxLjInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5vcm1hbGl6ZShEZWNpbWFsKCctMTIwJykpCi0gICAgICAgIERlY2ltYWwoJy0xLjJFKzInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm5vcm1hbGl6ZShEZWNpbWFsKCcxMjAuMDAnKSkKLSAgICAgICAgRGVjaW1hbCgnMS4yRSsyJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoRGVjaW1hbCgnMC4wMCcpKQotICAgICAgICBEZWNpbWFsKCcwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoNikKLSAgICAgICAgRGVjaW1hbCgnNicpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS5ub3JtYWxpemUoY29udGV4dD1zZWxmKQotCi0gICAgZGVmIG51bWJlcl9jbGFzcyhzZWxmLCBhKToKLSAgICAgICAgIiIiUmV0dXJucyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBjbGFzcyBvZiB0aGUgb3BlcmFuZC4KLQotICAgICAgICBUaGUgY2xhc3MgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKLSAgICAgICAgICAtc05hTgotICAgICAgICAgIC1OYU4KLSAgICAgICAgICAtSW5maW5pdHkKLSAgICAgICAgICAtTm9ybWFsCi0gICAgICAgICAgLVN1Ym5vcm1hbAotICAgICAgICAgIC1aZXJvCi0gICAgICAgICAgK1plcm8KLSAgICAgICAgICArU3Vibm9ybWFsCi0gICAgICAgICAgK05vcm1hbAotICAgICAgICAgICtJbmZpbml0eQotCi0gICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQotICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQotICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5Ci0gICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCdJbmZpbml0eScpKQotICAgICAgICAnK0luZmluaXR5JwotICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgnMUUtMTAnKSkKLSAgICAgICAgJytOb3JtYWwnCi0gICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCcyLjUwJykpCi0gICAgICAgICcrTm9ybWFsJwotICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgnMC4xRS05OTknKSkKLSAgICAgICAgJytTdWJub3JtYWwnCi0gICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCcwJykpCi0gICAgICAgICcrWmVybycKLSAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy0wJykpCi0gICAgICAgICctWmVybycKLSAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy0wLjFFLTk5OScpKQotICAgICAgICAnLVN1Ym5vcm1hbCcKLSAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy0xRS0xMCcpKQotICAgICAgICAnLU5vcm1hbCcKLSAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy0yLjUwJykpCi0gICAgICAgICctTm9ybWFsJwotICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgnLUluZmluaXR5JykpCi0gICAgICAgICctSW5maW5pdHknCi0gICAgICAgID4+PiBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKCdOYU4nKSkKLSAgICAgICAgJ05hTicKLSAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJy1OYU4nKSkKLSAgICAgICAgJ05hTicKLSAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKERlY2ltYWwoJ3NOYU4nKSkKLSAgICAgICAgJ3NOYU4nCi0gICAgICAgID4+PiBjLm51bWJlcl9jbGFzcygxMjMpCi0gICAgICAgICcrTm9ybWFsJwotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEubnVtYmVyX2NsYXNzKGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBwbHVzKHNlbGYsIGEpOgotICAgICAgICAiIiJQbHVzIGNvcnJlc3BvbmRzIHRvIHVuYXJ5IHByZWZpeCBwbHVzIGluIFB5dGhvbi4KLQotICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGV2YWx1YXRlZCB1c2luZyB0aGUgc2FtZSBydWxlcyBhcyBhZGQ7IHRoZQotICAgICAgICBvcGVyYXRpb24gcGx1cyhhKSBpcyBjYWxjdWxhdGVkIGFzIGFkZCgnMCcsIGEpIHdoZXJlIHRoZSAnMCcKLSAgICAgICAgaGFzIHRoZSBzYW1lIGV4cG9uZW50IGFzIHRoZSBvcGVyYW5kLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucGx1cyhEZWNpbWFsKCcxLjMnKSkKLSAgICAgICAgRGVjaW1hbCgnMS4zJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wbHVzKERlY2ltYWwoJy0xLjMnKSkKLSAgICAgICAgRGVjaW1hbCgnLTEuMycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucGx1cygtMSkKLSAgICAgICAgRGVjaW1hbCgnLTEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuX19wb3NfXyhjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgcG93ZXIoc2VsZiwgYSwgYiwgbW9kdWxvPU5vbmUpOgotICAgICAgICAiIiJSYWlzZXMgYSB0byB0aGUgcG93ZXIgb2YgYiwgdG8gbW9kdWxvIGlmIGdpdmVuLgotCi0gICAgICAgIFdpdGggdHdvIGFyZ3VtZW50cywgY29tcHV0ZSBhKipiLiAgSWYgYSBpcyBuZWdhdGl2ZSB0aGVuIGIKLSAgICAgICAgbXVzdCBiZSBpbnRlZ3JhbC4gIFRoZSByZXN1bHQgd2lsbCBiZSBpbmV4YWN0IHVubGVzcyBiIGlzCi0gICAgICAgIGludGVncmFsIGFuZCB0aGUgcmVzdWx0IGlzIGZpbml0ZSBhbmQgY2FuIGJlIGV4cHJlc3NlZCBleGFjdGx5Ci0gICAgICAgIGluICdwcmVjaXNpb24nIGRpZ2l0cy4KLQotICAgICAgICBXaXRoIHRocmVlIGFyZ3VtZW50cywgY29tcHV0ZSAoYSoqYikgJSBtb2R1bG8uICBGb3IgdGhlCi0gICAgICAgIHRocmVlIGFyZ3VtZW50IGZvcm0sIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIG9uIHRoZQotICAgICAgICBhcmd1bWVudHMgaG9sZDoKLQotICAgICAgICAgLSBhbGwgdGhyZWUgYXJndW1lbnRzIG11c3QgYmUgaW50ZWdyYWwKLSAgICAgICAgIC0gYiBtdXN0IGJlIG5vbm5lZ2F0aXZlCi0gICAgICAgICAtIGF0IGxlYXN0IG9uZSBvZiBhIG9yIGIgbXVzdCBiZSBub256ZXJvCi0gICAgICAgICAtIG1vZHVsbyBtdXN0IGJlIG5vbnplcm8gYW5kIGhhdmUgYXQgbW9zdCAncHJlY2lzaW9uJyBkaWdpdHMKLQotICAgICAgICBUaGUgcmVzdWx0IG9mIHBvdyhhLCBiLCBtb2R1bG8pIGlzIGlkZW50aWNhbCB0byB0aGUgcmVzdWx0Ci0gICAgICAgIHRoYXQgd291bGQgYmUgb2J0YWluZWQgYnkgY29tcHV0aW5nIChhKipiKSAlIG1vZHVsbyB3aXRoCi0gICAgICAgIHVuYm91bmRlZCBwcmVjaXNpb24sIGJ1dCBpcyBjb21wdXRlZCBtb3JlIGVmZmljaWVudGx5LiAgSXQgaXMKLSAgICAgICAgYWx3YXlzIGV4YWN0LgotCi0gICAgICAgID4+PiBjID0gRXh0ZW5kZWRDb250ZXh0LmNvcHkoKQotICAgICAgICA+Pj4gYy5FbWluID0gLTk5OQotICAgICAgICA+Pj4gYy5FbWF4ID0gOTk5Ci0gICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMycpKQotICAgICAgICBEZWNpbWFsKCc4JykKLSAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLTInKSwgRGVjaW1hbCgnMycpKQotICAgICAgICBEZWNpbWFsKCctOCcpCi0gICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnLTMnKSkKLSAgICAgICAgRGVjaW1hbCgnMC4xMjUnKQotICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCcxLjcnKSwgRGVjaW1hbCgnOCcpKQotICAgICAgICBEZWNpbWFsKCc2OS43NTc1NzQ0JykKLSAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnMTAnKSwgRGVjaW1hbCgnMC4zMDEwMjk5OTYnKSkKLSAgICAgICAgRGVjaW1hbCgnMi4wMDAwMDAwMCcpCi0gICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJ0luZmluaXR5JyksIERlY2ltYWwoJy0xJykpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCdJbmZpbml0eScpLCBEZWNpbWFsKCcwJykpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCdJbmZpbml0eScpLCBEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKLSAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLUluZmluaXR5JyksIERlY2ltYWwoJy0xJykpCi0gICAgICAgIERlY2ltYWwoJy0wJykKLSAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLUluZmluaXR5JyksIERlY2ltYWwoJzAnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJy1JbmZpbml0eScpLCBEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCi0gICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJy1JbmZpbml0eScpLCBEZWNpbWFsKCcyJykpCi0gICAgICAgIERlY2ltYWwoJ0luZmluaXR5JykKLSAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCcwJykpCi0gICAgICAgIERlY2ltYWwoJ05hTicpCi0KLSAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnMycpLCBEZWNpbWFsKCc3JyksIERlY2ltYWwoJzE2JykpCi0gICAgICAgIERlY2ltYWwoJzExJykKLSAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLTMnKSwgRGVjaW1hbCgnNycpLCBEZWNpbWFsKCcxNicpKQotICAgICAgICBEZWNpbWFsKCctMTEnKQotICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCctMycpLCBEZWNpbWFsKCc4JyksIERlY2ltYWwoJzE2JykpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCczJyksIERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnLTE2JykpCi0gICAgICAgIERlY2ltYWwoJzExJykKLSAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnMjNFMTIzNDUnKSwgRGVjaW1hbCgnNjdFMTg5JyksIERlY2ltYWwoJzEyMzQ1Njc4OScpKQotICAgICAgICBEZWNpbWFsKCcxMTcyOTgzMCcpCi0gICAgICAgID4+PiBjLnBvd2VyKERlY2ltYWwoJy0wJyksIERlY2ltYWwoJzE3JyksIERlY2ltYWwoJzE3MjknKSkKLSAgICAgICAgRGVjaW1hbCgnLTAnKQotICAgICAgICA+Pj4gYy5wb3dlcihEZWNpbWFsKCctMjMnKSwgRGVjaW1hbCgnMCcpLCBEZWNpbWFsKCc2NTUzNycpKQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wb3dlcig3LCA3KQotICAgICAgICBEZWNpbWFsKCc4MjM1NDMnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnBvd2VyKERlY2ltYWwoNyksIDcpCi0gICAgICAgIERlY2ltYWwoJzgyMzU0MycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucG93ZXIoNywgRGVjaW1hbCg3KSwgMikKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByID0gYS5fX3Bvd19fKGIsIG1vZHVsbywgY29udGV4dD1zZWxmKQotICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gcgotCi0gICAgZGVmIHF1YW50aXplKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJSZXR1cm5zIGEgdmFsdWUgZXF1YWwgdG8gJ2EnIChyb3VuZGVkKSwgaGF2aW5nIHRoZSBleHBvbmVudCBvZiAnYicuCi0KLSAgICAgICAgVGhlIGNvZWZmaWNpZW50IG9mIHRoZSByZXN1bHQgaXMgZGVyaXZlZCBmcm9tIHRoYXQgb2YgdGhlIGxlZnQtaGFuZAotICAgICAgICBvcGVyYW5kLiAgSXQgbWF5IGJlIHJvdW5kZWQgdXNpbmcgdGhlIGN1cnJlbnQgcm91bmRpbmcgc2V0dGluZyAoaWYgdGhlCi0gICAgICAgIGV4cG9uZW50IGlzIGJlaW5nIGluY3JlYXNlZCksIG11bHRpcGxpZWQgYnkgYSBwb3NpdGl2ZSBwb3dlciBvZiB0ZW4gKGlmCi0gICAgICAgIHRoZSBleHBvbmVudCBpcyBiZWluZyBkZWNyZWFzZWQpLCBvciBpcyB1bmNoYW5nZWQgKGlmIHRoZSBleHBvbmVudCBpcwotICAgICAgICBhbHJlYWR5IGVxdWFsIHRvIHRoYXQgb2YgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCkuCi0KLSAgICAgICAgVW5saWtlIG90aGVyIG9wZXJhdGlvbnMsIGlmIHRoZSBsZW5ndGggb2YgdGhlIGNvZWZmaWNpZW50IGFmdGVyIHRoZQotICAgICAgICBxdWFudGl6ZSBvcGVyYXRpb24gd291bGQgYmUgZ3JlYXRlciB0aGFuIHByZWNpc2lvbiB0aGVuIGFuIEludmFsaWQKLSAgICAgICAgb3BlcmF0aW9uIGNvbmRpdGlvbiBpcyByYWlzZWQuICBUaGlzIGd1YXJhbnRlZXMgdGhhdCwgdW5sZXNzIHRoZXJlIGlzCi0gICAgICAgIGFuIGVycm9yIGNvbmRpdGlvbiwgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQgb2YgYSBxdWFudGl6ZSBpcyBhbHdheXMKLSAgICAgICAgZXF1YWwgdG8gdGhhdCBvZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kLgotCi0gICAgICAgIEFsc28gdW5saWtlIG90aGVyIG9wZXJhdGlvbnMsIHF1YW50aXplIHdpbGwgbmV2ZXIgcmFpc2UgVW5kZXJmbG93LCBldmVuCi0gICAgICAgIGlmIHRoZSByZXN1bHQgaXMgc3Vibm9ybWFsIGFuZCBpbmV4YWN0LgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcwLjAwMScpKQotICAgICAgICBEZWNpbWFsKCcyLjE3MCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcwLjAxJykpCi0gICAgICAgIERlY2ltYWwoJzIuMTcnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJzIuMTcnKSwgRGVjaW1hbCgnMC4xJykpCi0gICAgICAgIERlY2ltYWwoJzIuMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcxZSswJykpCi0gICAgICAgIERlY2ltYWwoJzInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJzIuMTcnKSwgRGVjaW1hbCgnMWUrMScpKQotICAgICAgICBEZWNpbWFsKCcwRSsxJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZShEZWNpbWFsKCctSW5mJyksIERlY2ltYWwoJ0luZmluaXR5JykpCi0gICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCdJbmZpbml0eScpKQotICAgICAgICBEZWNpbWFsKCdOYU4nKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJy0wLjEnKSwgRGVjaW1hbCgnMScpKQotICAgICAgICBEZWNpbWFsKCctMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnLTAnKSwgRGVjaW1hbCgnMWUrNScpKQotICAgICAgICBEZWNpbWFsKCctMEUrNScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnKzM1MjM2NDUwLjYnKSwgRGVjaW1hbCgnMWUtMicpKQotICAgICAgICBEZWNpbWFsKCdOYU4nKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJy0zNTIzNjQ1MC42JyksIERlY2ltYWwoJzFlLTInKSkKLSAgICAgICAgRGVjaW1hbCgnTmFOJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZShEZWNpbWFsKCcyMTcnKSwgRGVjaW1hbCgnMWUtMScpKQotICAgICAgICBEZWNpbWFsKCcyMTcuMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMjE3JyksIERlY2ltYWwoJzFlLTAnKSkKLSAgICAgICAgRGVjaW1hbCgnMjE3JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5xdWFudGl6ZShEZWNpbWFsKCcyMTcnKSwgRGVjaW1hbCgnMWUrMScpKQotICAgICAgICBEZWNpbWFsKCcyLjJFKzInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoJzIxNycpLCBEZWNpbWFsKCcxZSsyJykpCi0gICAgICAgIERlY2ltYWwoJzJFKzInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKDEsIDIpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKERlY2ltYWwoMSksIDIpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnF1YW50aXplKDEsIERlY2ltYWwoMikpCi0gICAgICAgIERlY2ltYWwoJzEnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEucXVhbnRpemUoYiwgY29udGV4dD1zZWxmKQotCi0gICAgZGVmIHJhZGl4KHNlbGYpOgotICAgICAgICAiIiJKdXN0IHJldHVybnMgMTAsIGFzIHRoaXMgaXMgRGVjaW1hbCwgOikKLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJhZGl4KCkKLSAgICAgICAgRGVjaW1hbCgnMTAnKQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIERlY2ltYWwoMTApCi0KLSAgICBkZWYgcmVtYWluZGVyKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJSZXR1cm5zIHRoZSByZW1haW5kZXIgZnJvbSBpbnRlZ2VyIGRpdmlzaW9uLgotCi0gICAgICAgIFRoZSByZXN1bHQgaXMgdGhlIHJlc2lkdWUgb2YgdGhlIGRpdmlkZW5kIGFmdGVyIHRoZSBvcGVyYXRpb24gb2YKLSAgICAgICAgY2FsY3VsYXRpbmcgaW50ZWdlciBkaXZpc2lvbiBhcyBkZXNjcmliZWQgZm9yIGRpdmlkZS1pbnRlZ2VyLCByb3VuZGVkCi0gICAgICAgIHRvIHByZWNpc2lvbiBkaWdpdHMgaWYgbmVjZXNzYXJ5LiAgVGhlIHNpZ24gb2YgdGhlIHJlc3VsdCwgaWYKLSAgICAgICAgbm9uLXplcm8sIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIG9yaWdpbmFsIGRpdmlkZW5kLgotCi0gICAgICAgIFRoaXMgb3BlcmF0aW9uIHdpbGwgZmFpbCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIGFzIGludGVnZXIgZGl2aXNpb24KLSAgICAgICAgKHRoYXQgaXMsIGlmIGludGVnZXIgZGl2aXNpb24gb24gdGhlIHNhbWUgdHdvIG9wZXJhbmRzIHdvdWxkIGZhaWwsIHRoZQotICAgICAgICByZW1haW5kZXIgY2Fubm90IGJlIGNhbGN1bGF0ZWQpLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoJzIuMScpLCBEZWNpbWFsKCczJykpCi0gICAgICAgIERlY2ltYWwoJzIuMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoJzEwJyksIERlY2ltYWwoJzMnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoJy0xMCcpLCBEZWNpbWFsKCczJykpCi0gICAgICAgIERlY2ltYWwoJy0xJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoRGVjaW1hbCgnMTAuMicpLCBEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJzAuMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoJzEwJyksIERlY2ltYWwoJzAuMycpKQotICAgICAgICBEZWNpbWFsKCcwLjEnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcihEZWNpbWFsKCczLjYnKSwgRGVjaW1hbCgnMS4zJykpCi0gICAgICAgIERlY2ltYWwoJzEuMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKDIyLCA2KQotICAgICAgICBEZWNpbWFsKCc0JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoRGVjaW1hbCgyMiksIDYpCi0gICAgICAgIERlY2ltYWwoJzQnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcigyMiwgRGVjaW1hbCg2KSkKLSAgICAgICAgRGVjaW1hbCgnNCcpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByID0gYS5fX21vZF9fKGIsIGNvbnRleHQ9c2VsZikKLSAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHIKLQotICAgIGRlZiByZW1haW5kZXJfbmVhcihzZWxmLCBhLCBiKToKLSAgICAgICAgIiIiUmV0dXJucyB0byBiZSAiYSAtIGIgKiBuIiwgd2hlcmUgbiBpcyB0aGUgaW50ZWdlciBuZWFyZXN0IHRoZSBleGFjdAotICAgICAgICB2YWx1ZSBvZiAieCAvIGIiIChpZiB0d28gaW50ZWdlcnMgYXJlIGVxdWFsbHkgbmVhciB0aGVuIHRoZSBldmVuIG9uZQotICAgICAgICBpcyBjaG9zZW4pLiAgSWYgdGhlIHJlc3VsdCBpcyBlcXVhbCB0byAwIHRoZW4gaXRzIHNpZ24gd2lsbCBiZSB0aGUKLSAgICAgICAgc2lnbiBvZiBhLgotCi0gICAgICAgIFRoaXMgb3BlcmF0aW9uIHdpbGwgZmFpbCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIGFzIGludGVnZXIgZGl2aXNpb24KLSAgICAgICAgKHRoYXQgaXMsIGlmIGludGVnZXIgZGl2aXNpb24gb24gdGhlIHNhbWUgdHdvIG9wZXJhbmRzIHdvdWxkIGZhaWwsIHRoZQotICAgICAgICByZW1haW5kZXIgY2Fubm90IGJlIGNhbGN1bGF0ZWQpLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMi4xJyksIERlY2ltYWwoJzMnKSkKLSAgICAgICAgRGVjaW1hbCgnLTAuOScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMTAnKSwgRGVjaW1hbCgnNicpKQotICAgICAgICBEZWNpbWFsKCctMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMTAnKSwgRGVjaW1hbCgnMycpKQotICAgICAgICBEZWNpbWFsKCcxJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcihEZWNpbWFsKCctMTAnKSwgRGVjaW1hbCgnMycpKQotICAgICAgICBEZWNpbWFsKCctMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMTAuMicpLCBEZWNpbWFsKCcxJykpCi0gICAgICAgIERlY2ltYWwoJzAuMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMTAnKSwgRGVjaW1hbCgnMC4zJykpCi0gICAgICAgIERlY2ltYWwoJzAuMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgnMy42JyksIERlY2ltYWwoJzEuMycpKQotICAgICAgICBEZWNpbWFsKCctMC4zJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcigzLCAxMSkKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoRGVjaW1hbCgzKSwgMTEpCi0gICAgICAgIERlY2ltYWwoJzMnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcl9uZWFyKDMsIERlY2ltYWwoMTEpKQotICAgICAgICBEZWNpbWFsKCczJykKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLnJlbWFpbmRlcl9uZWFyKGIsIGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiByb3RhdGUoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIlJldHVybnMgYSByb3RhdGVkIGNvcHkgb2YgYSwgYiB0aW1lcy4KLQotICAgICAgICBUaGUgY29lZmZpY2llbnQgb2YgdGhlIHJlc3VsdCBpcyBhIHJvdGF0ZWQgY29weSBvZiB0aGUgZGlnaXRzIGluCi0gICAgICAgIHRoZSBjb2VmZmljaWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZC4gIFRoZSBudW1iZXIgb2YgcGxhY2VzIG9mCi0gICAgICAgIHJvdGF0aW9uIGlzIHRha2VuIGZyb20gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCwKLSAgICAgICAgd2l0aCB0aGUgcm90YXRpb24gYmVpbmcgdG8gdGhlIGxlZnQgaWYgdGhlIHNlY29uZCBvcGVyYW5kIGlzCi0gICAgICAgIHBvc2l0aXZlIG9yIHRvIHRoZSByaWdodCBvdGhlcndpc2UuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoRGVjaW1hbCgnMzQnKSwgRGVjaW1hbCgnOCcpKQotICAgICAgICBEZWNpbWFsKCc0MDAwMDAwMDMnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZShEZWNpbWFsKCcxMicpLCBEZWNpbWFsKCc5JykpCi0gICAgICAgIERlY2ltYWwoJzEyJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoRGVjaW1hbCgnMTIzNDU2Nzg5JyksIERlY2ltYWwoJy0yJykpCi0gICAgICAgIERlY2ltYWwoJzg5MTIzNDU2NycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCcwJykpCi0gICAgICAgIERlY2ltYWwoJzEyMzQ1Njc4OScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCcrMicpKQotICAgICAgICBEZWNpbWFsKCczNDU2Nzg5MTInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZSgxMzMzMzMzLCAxKQotICAgICAgICBEZWNpbWFsKCcxMzMzMzMzMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKERlY2ltYWwoMTMzMzMzMyksIDEpCi0gICAgICAgIERlY2ltYWwoJzEzMzMzMzMwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoMTMzMzMzMywgRGVjaW1hbCgxKSkKLSAgICAgICAgRGVjaW1hbCgnMTMzMzMzMzAnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEucm90YXRlKGIsIGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBzYW1lX3F1YW50dW0oc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0aGUgdHdvIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQuCi0KLSAgICAgICAgVGhlIHJlc3VsdCBpcyBuZXZlciBhZmZlY3RlZCBieSBlaXRoZXIgdGhlIHNpZ24gb3IgdGhlIGNvZWZmaWNpZW50IG9mCi0gICAgICAgIGVpdGhlciBvcGVyYW5kLgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoJzIuMTcnKSwgRGVjaW1hbCgnMC4wMDEnKSkKLSAgICAgICAgRmFsc2UKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcwLjAxJykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oRGVjaW1hbCgnMi4xNycpLCBEZWNpbWFsKCcxJykpCi0gICAgICAgIEZhbHNlCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoJ0luZicpLCBEZWNpbWFsKCctSW5mJykpCi0gICAgICAgIFRydWUKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oMTAwMDAsIC0xKQotICAgICAgICBUcnVlCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoMTAwMDApLCAtMSkKLSAgICAgICAgVHJ1ZQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNhbWVfcXVhbnR1bSgxMDAwMCwgRGVjaW1hbCgtMSkpCi0gICAgICAgIFRydWUKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLnNhbWVfcXVhbnR1bShiKQotCi0gICAgZGVmIHNjYWxlYiAoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIlJldHVybnMgdGhlIGZpcnN0IG9wZXJhbmQgYWZ0ZXIgYWRkaW5nIHRoZSBzZWNvbmQgdmFsdWUgaXRzIGV4cC4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNjYWxlYihEZWNpbWFsKCc3LjUwJyksIERlY2ltYWwoJy0yJykpCi0gICAgICAgIERlY2ltYWwoJzAuMDc1MCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKERlY2ltYWwoJzcuNTAnKSwgRGVjaW1hbCgnMCcpKQotICAgICAgICBEZWNpbWFsKCc3LjUwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zY2FsZWIoRGVjaW1hbCgnNy41MCcpLCBEZWNpbWFsKCczJykpCi0gICAgICAgIERlY2ltYWwoJzcuNTBFKzMnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNjYWxlYigxLCA0KQotICAgICAgICBEZWNpbWFsKCcxRSs0JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zY2FsZWIoRGVjaW1hbCgxKSwgNCkKLSAgICAgICAgRGVjaW1hbCgnMUUrNCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKDEsIERlY2ltYWwoNCkpCi0gICAgICAgIERlY2ltYWwoJzFFKzQnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuc2NhbGViKGIsIGNvbnRleHQ9c2VsZikKLQotICAgIGRlZiBzaGlmdChzZWxmLCBhLCBiKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHNoaWZ0ZWQgY29weSBvZiBhLCBiIHRpbWVzLgotCi0gICAgICAgIFRoZSBjb2VmZmljaWVudCBvZiB0aGUgcmVzdWx0IGlzIGEgc2hpZnRlZCBjb3B5IG9mIHRoZSBkaWdpdHMKLSAgICAgICAgaW4gdGhlIGNvZWZmaWNpZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kLiAgVGhlIG51bWJlciBvZiBwbGFjZXMKLSAgICAgICAgdG8gc2hpZnQgaXMgdGFrZW4gZnJvbSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kLAotICAgICAgICB3aXRoIHRoZSBzaGlmdCBiZWluZyB0byB0aGUgbGVmdCBpZiB0aGUgc2Vjb25kIG9wZXJhbmQgaXMKLSAgICAgICAgcG9zaXRpdmUgb3IgdG8gdGhlIHJpZ2h0IG90aGVyd2lzZS4gIERpZ2l0cyBzaGlmdGVkIGludG8gdGhlCi0gICAgICAgIGNvZWZmaWNpZW50IGFyZSB6ZXJvcy4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoJzM0JyksIERlY2ltYWwoJzgnKSkKLSAgICAgICAgRGVjaW1hbCgnNDAwMDAwMDAwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdChEZWNpbWFsKCcxMicpLCBEZWNpbWFsKCc5JykpCi0gICAgICAgIERlY2ltYWwoJzAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCctMicpKQotICAgICAgICBEZWNpbWFsKCcxMjM0NTY3JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdChEZWNpbWFsKCcxMjM0NTY3ODknKSwgRGVjaW1hbCgnMCcpKQotICAgICAgICBEZWNpbWFsKCcxMjM0NTY3ODknKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoJzEyMzQ1Njc4OScpLCBEZWNpbWFsKCcrMicpKQotICAgICAgICBEZWNpbWFsKCczNDU2Nzg5MDAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KDg4ODg4ODg4LCAyKQotICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KERlY2ltYWwoODg4ODg4ODgpLCAyKQotICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNoaWZ0KDg4ODg4ODg4LCBEZWNpbWFsKDIpKQotICAgICAgICBEZWNpbWFsKCc4ODg4ODg4MDAnKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuc2hpZnQoYiwgY29udGV4dD1zZWxmKQotCi0gICAgZGVmIHNxcnQoc2VsZiwgYSk6Ci0gICAgICAgICIiIlNxdWFyZSByb290IG9mIGEgbm9uLW5lZ2F0aXZlIG51bWJlciB0byBjb250ZXh0IHByZWNpc2lvbi4KLQotICAgICAgICBJZiB0aGUgcmVzdWx0IG11c3QgYmUgaW5leGFjdCwgaXQgaXMgcm91bmRlZCB1c2luZyB0aGUgcm91bmQtaGFsZi1ldmVuCi0gICAgICAgIGFsZ29yaXRobS4KLQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNxcnQoRGVjaW1hbCgnMCcpKQotICAgICAgICBEZWNpbWFsKCcwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJy0wJykpCi0gICAgICAgIERlY2ltYWwoJy0wJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJzAuMzknKSkKLSAgICAgICAgRGVjaW1hbCgnMC42MjQ0OTk4MDAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNxcnQoRGVjaW1hbCgnMTAwJykpCi0gICAgICAgIERlY2ltYWwoJzEwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJzEnKSkKLSAgICAgICAgRGVjaW1hbCgnMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3FydChEZWNpbWFsKCcxLjAnKSkKLSAgICAgICAgRGVjaW1hbCgnMS4wJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJzEuMDAnKSkKLSAgICAgICAgRGVjaW1hbCgnMS4wJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KERlY2ltYWwoJzcnKSkKLSAgICAgICAgRGVjaW1hbCgnMi42NDU3NTEzMScpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3FydChEZWNpbWFsKCcxMCcpKQotICAgICAgICBEZWNpbWFsKCczLjE2MjI3NzY2JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zcXJ0KDIpCi0gICAgICAgIERlY2ltYWwoJzEuNDE0MjEzNTYnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnByZWMKLSAgICAgICAgOQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuc3FydChjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgc3VidHJhY3Qoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gb3BlcmFuZHMuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKCcxLjMnKSwgRGVjaW1hbCgnMS4wNycpKQotICAgICAgICBEZWNpbWFsKCcwLjIzJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKCcxLjMnKSwgRGVjaW1hbCgnMS4zMCcpKQotICAgICAgICBEZWNpbWFsKCcwLjAwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKCcxLjMnKSwgRGVjaW1hbCgnMi4wNycpKQotICAgICAgICBEZWNpbWFsKCctMC43NycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoOCwgNSkKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoRGVjaW1hbCg4KSwgNSkKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoOCwgRGVjaW1hbCg1KSkKLSAgICAgICAgRGVjaW1hbCgnMycpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByID0gYS5fX3N1Yl9fKGIsIGNvbnRleHQ9c2VsZikKLSAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHIKLQotICAgIGRlZiB0b19lbmdfc3RyaW5nKHNlbGYsIGEpOgotICAgICAgICAiIiJDb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgdXNpbmcgc2NpZW50aWZpYyBub3RhdGlvbi4KLQotICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgY29udGV4dC4KLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCi0gICAgICAgIHJldHVybiBhLnRvX2VuZ19zdHJpbmcoY29udGV4dD1zZWxmKQotCi0gICAgZGVmIHRvX3NjaV9zdHJpbmcoc2VsZiwgYSk6Ci0gICAgICAgICIiIkNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nLCB1c2luZyBzY2llbnRpZmljIG5vdGF0aW9uLgotCi0gICAgICAgIFRoZSBvcGVyYXRpb24gaXMgbm90IGFmZmVjdGVkIGJ5IHRoZSBjb250ZXh0LgotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEuX19zdHJfXyhjb250ZXh0PXNlbGYpCi0KLSAgICBkZWYgdG9faW50ZWdyYWxfZXhhY3Qoc2VsZiwgYSk6Ci0gICAgICAgICIiIlJvdW5kcyB0byBhbiBpbnRlZ2VyLgotCi0gICAgICAgIFdoZW4gdGhlIG9wZXJhbmQgaGFzIGEgbmVnYXRpdmUgZXhwb25lbnQsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUKLSAgICAgICAgYXMgdXNpbmcgdGhlIHF1YW50aXplKCkgb3BlcmF0aW9uIHVzaW5nIHRoZSBnaXZlbiBvcGVyYW5kIGFzIHRoZQotICAgICAgICBsZWZ0LWhhbmQtb3BlcmFuZCwgMUUrMCBhcyB0aGUgcmlnaHQtaGFuZC1vcGVyYW5kLCBhbmQgdGhlIHByZWNpc2lvbgotICAgICAgICBvZiB0aGUgb3BlcmFuZCBhcyB0aGUgcHJlY2lzaW9uIHNldHRpbmc7IEluZXhhY3QgYW5kIFJvdW5kZWQgZmxhZ3MKLSAgICAgICAgYXJlIGFsbG93ZWQgaW4gdGhpcyBvcGVyYXRpb24uICBUaGUgcm91bmRpbmcgbW9kZSBpcyB0YWtlbiBmcm9tIHRoZQotICAgICAgICBjb250ZXh0LgotCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgnMi4xJykpCi0gICAgICAgIERlY2ltYWwoJzInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX2V4YWN0KERlY2ltYWwoJzEwMCcpKQotICAgICAgICBEZWNpbWFsKCcxMDAnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX2V4YWN0KERlY2ltYWwoJzEwMC4wJykpCi0gICAgICAgIERlY2ltYWwoJzEwMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgnMTAxLjUnKSkKLSAgICAgICAgRGVjaW1hbCgnMTAyJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF9leGFjdChEZWNpbWFsKCctMTAxLjUnKSkKLSAgICAgICAgRGVjaW1hbCgnLTEwMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgnMTBFKzUnKSkKLSAgICAgICAgRGVjaW1hbCgnMS4wRSs2JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF9leGFjdChEZWNpbWFsKCc3Ljg5RSs3NycpKQotICAgICAgICBEZWNpbWFsKCc3Ljg5RSs3NycpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgnLUluZicpKQotICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQotICAgICAgICAiIiIKLSAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKLSAgICAgICAgcmV0dXJuIGEudG9faW50ZWdyYWxfZXhhY3QoY29udGV4dD1zZWxmKQotCi0gICAgZGVmIHRvX2ludGVncmFsX3ZhbHVlKHNlbGYsIGEpOgotICAgICAgICAiIiJSb3VuZHMgdG8gYW4gaW50ZWdlci4KLQotICAgICAgICBXaGVuIHRoZSBvcGVyYW5kIGhhcyBhIG5lZ2F0aXZlIGV4cG9uZW50LCB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lCi0gICAgICAgIGFzIHVzaW5nIHRoZSBxdWFudGl6ZSgpIG9wZXJhdGlvbiB1c2luZyB0aGUgZ2l2ZW4gb3BlcmFuZCBhcyB0aGUKLSAgICAgICAgbGVmdC1oYW5kLW9wZXJhbmQsIDFFKzAgYXMgdGhlIHJpZ2h0LWhhbmQtb3BlcmFuZCwgYW5kIHRoZSBwcmVjaXNpb24KLSAgICAgICAgb2YgdGhlIG9wZXJhbmQgYXMgdGhlIHByZWNpc2lvbiBzZXR0aW5nLCBleGNlcHQgdGhhdCBubyBmbGFncyB3aWxsCi0gICAgICAgIGJlIHNldC4gIFRoZSByb3VuZGluZyBtb2RlIGlzIHRha2VuIGZyb20gdGhlIGNvbnRleHQuCi0KLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKCcyLjEnKSkKLSAgICAgICAgRGVjaW1hbCgnMicpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfdmFsdWUoRGVjaW1hbCgnMTAwJykpCi0gICAgICAgIERlY2ltYWwoJzEwMCcpCi0gICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQudG9faW50ZWdyYWxfdmFsdWUoRGVjaW1hbCgnMTAwLjAnKSkKLSAgICAgICAgRGVjaW1hbCgnMTAwJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKCcxMDEuNScpKQotICAgICAgICBEZWNpbWFsKCcxMDInKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX3ZhbHVlKERlY2ltYWwoJy0xMDEuNScpKQotICAgICAgICBEZWNpbWFsKCctMTAyJykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKCcxMEUrNScpKQotICAgICAgICBEZWNpbWFsKCcxLjBFKzYnKQotICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX3ZhbHVlKERlY2ltYWwoJzcuODlFKzc3JykpCi0gICAgICAgIERlY2ltYWwoJzcuODlFKzc3JykKLSAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF92YWx1ZShEZWNpbWFsKCctSW5mJykpCi0gICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCi0gICAgICAgICIiIgotICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQotICAgICAgICByZXR1cm4gYS50b19pbnRlZ3JhbF92YWx1ZShjb250ZXh0PXNlbGYpCi0KLSAgICAjIHRoZSBtZXRob2QgbmFtZSBjaGFuZ2VkLCBidXQgd2UgcHJvdmlkZSBhbHNvIHRoZSBvbGQgb25lLCBmb3IgY29tcGF0aWJpbGl0eQotICAgIHRvX2ludGVncmFsID0gdG9faW50ZWdyYWxfdmFsdWUKLQotY2xhc3MgX1dvcmtSZXAob2JqZWN0KToKLSAgICBfX3Nsb3RzX18gPSAoJ3NpZ24nLCdpbnQnLCdleHAnKQotICAgICMgc2lnbjogMCBvciAxCi0gICAgIyBpbnQ6ICBpbnQKLSAgICAjIGV4cDogIE5vbmUsIGludCwgb3Igc3RyaW5nCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9Tm9uZSk6Ci0gICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLnNpZ24gPSBOb25lCi0gICAgICAgICAgICBzZWxmLmludCA9IDAKLSAgICAgICAgICAgIHNlbGYuZXhwID0gTm9uZQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERlY2ltYWwpOgotICAgICAgICAgICAgc2VsZi5zaWduID0gdmFsdWUuX3NpZ24KLSAgICAgICAgICAgIHNlbGYuaW50ID0gaW50KHZhbHVlLl9pbnQpCi0gICAgICAgICAgICBzZWxmLmV4cCA9IHZhbHVlLl9leHAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKQotICAgICAgICAgICAgc2VsZi5zaWduID0gdmFsdWVbMF0KLSAgICAgICAgICAgIHNlbGYuaW50ID0gdmFsdWVbMV0KLSAgICAgICAgICAgIHNlbGYuZXhwID0gdmFsdWVbMl0KLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIoJXIsICVyLCAlcikiICUgKHNlbGYuc2lnbiwgc2VsZi5pbnQsIHNlbGYuZXhwKQotCi0gICAgX19zdHJfXyA9IF9fcmVwcl9fCi0KLQotCi1kZWYgX25vcm1hbGl6ZShvcDEsIG9wMiwgcHJlYyA9IDApOgotICAgICIiIk5vcm1hbGl6ZXMgb3AxLCBvcDIgdG8gaGF2ZSB0aGUgc2FtZSBleHAgYW5kIGxlbmd0aCBvZiBjb2VmZmljaWVudC4KLQotICAgIERvbmUgZHVyaW5nIGFkZGl0aW9uLgotICAgICIiIgotICAgIGlmIG9wMS5leHAgPCBvcDIuZXhwOgotICAgICAgICB0bXAgPSBvcDIKLSAgICAgICAgb3RoZXIgPSBvcDEKLSAgICBlbHNlOgotICAgICAgICB0bXAgPSBvcDEKLSAgICAgICAgb3RoZXIgPSBvcDIKLQotICAgICMgTGV0IGV4cCA9IG1pbih0bXAuZXhwIC0gMSwgdG1wLmFkanVzdGVkKCkgLSBwcmVjaXNpb24gLSAxKS4KLSAgICAjIFRoZW4gYWRkaW5nIDEwKipleHAgdG8gdG1wIGhhcyB0aGUgc2FtZSBlZmZlY3QgKGFmdGVyIHJvdW5kaW5nKQotICAgICMgYXMgYWRkaW5nIGFueSBwb3NpdGl2ZSBxdWFudGl0eSBzbWFsbGVyIHRoYW4gMTAqKmV4cDsgc2ltaWxhcmx5Ci0gICAgIyBmb3Igc3VidHJhY3Rpb24uICBTbyBpZiBvdGhlciBpcyBzbWFsbGVyIHRoYW4gMTAqKmV4cCB3ZSByZXBsYWNlCi0gICAgIyBpdCB3aXRoIDEwKipleHAuICBUaGlzIGF2b2lkcyB0bXAuZXhwIC0gb3RoZXIuZXhwIGdldHRpbmcgdG9vIGxhcmdlLgotICAgIHRtcF9sZW4gPSBsZW4oc3RyKHRtcC5pbnQpKQotICAgIG90aGVyX2xlbiA9IGxlbihzdHIob3RoZXIuaW50KSkKLSAgICBleHAgPSB0bXAuZXhwICsgbWluKC0xLCB0bXBfbGVuIC0gcHJlYyAtIDIpCi0gICAgaWYgb3RoZXJfbGVuICsgb3RoZXIuZXhwIC0gMSA8IGV4cDoKLSAgICAgICAgb3RoZXIuaW50ID0gMQotICAgICAgICBvdGhlci5leHAgPSBleHAKLQotICAgIHRtcC5pbnQgKj0gMTAgKiogKHRtcC5leHAgLSBvdGhlci5leHApCi0gICAgdG1wLmV4cCA9IG90aGVyLmV4cAotICAgIHJldHVybiBvcDEsIG9wMgotCi0jIyMjIyBJbnRlZ2VyIGFyaXRobWV0aWMgZnVuY3Rpb25zIHVzZWQgYnkgbG4sIGxvZzEwLCBleHAgYW5kIF9fcG93X18gIyMjIyMKLQotX25iaXRzID0gaW50LmJpdF9sZW5ndGgKLQotZGVmIF9kZWNpbWFsX2xzaGlmdF9leGFjdChuLCBlKToKLSAgICAiIiIgR2l2ZW4gaW50ZWdlcnMgbiBhbmQgZSwgcmV0dXJuIG4gKiAxMCoqZSBpZiBpdCdzIGFuIGludGVnZXIsIGVsc2UgTm9uZS4KLQotICAgIFRoZSBjb21wdXRhdGlvbiBpcyBkZXNpZ25lZCB0byBhdm9pZCBjb21wdXRpbmcgbGFyZ2UgcG93ZXJzIG9mIDEwCi0gICAgdW5uZWNlc3NhcmlseS4KLQotICAgID4+PiBfZGVjaW1hbF9sc2hpZnRfZXhhY3QoMywgNCkKLSAgICAzMDAwMAotICAgID4+PiBfZGVjaW1hbF9sc2hpZnRfZXhhY3QoMzAwLCAtOTk5OTk5OTk5KSAgIyByZXR1cm5zIE5vbmUKLQotICAgICIiIgotICAgIGlmIG4gPT0gMDoKLSAgICAgICAgcmV0dXJuIDAKLSAgICBlbGlmIGUgPj0gMDoKLSAgICAgICAgcmV0dXJuIG4gKiAxMCoqZQotICAgIGVsc2U6Ci0gICAgICAgICMgdmFsX24gPSBsYXJnZXN0IHBvd2VyIG9mIDEwIGRpdmlkaW5nIG4uCi0gICAgICAgIHN0cl9uID0gc3RyKGFicyhuKSkKLSAgICAgICAgdmFsX24gPSBsZW4oc3RyX24pIC0gbGVuKHN0cl9uLnJzdHJpcCgnMCcpKQotICAgICAgICByZXR1cm4gTm9uZSBpZiB2YWxfbiA8IC1lIGVsc2UgbiAvLyAxMCoqLWUKLQotZGVmIF9zcXJ0X25lYXJlc3QobiwgYSk6Ci0gICAgIiIiQ2xvc2VzdCBpbnRlZ2VyIHRvIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgcG9zaXRpdmUgaW50ZWdlciBuLiAgYSBpcwotICAgIGFuIGluaXRpYWwgYXBwcm94aW1hdGlvbiB0byB0aGUgc3F1YXJlIHJvb3QuICBBbnkgcG9zaXRpdmUgaW50ZWdlcgotICAgIHdpbGwgZG8gZm9yIGEsIGJ1dCB0aGUgY2xvc2VyIGEgaXMgdG8gdGhlIHNxdWFyZSByb290IG9mIG4gdGhlCi0gICAgZmFzdGVyIGNvbnZlcmdlbmNlIHdpbGwgYmUuCi0KLSAgICAiIiIKLSAgICBpZiBuIDw9IDAgb3IgYSA8PSAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJCb3RoIGFyZ3VtZW50cyB0byBfc3FydF9uZWFyZXN0IHNob3VsZCBiZSBwb3NpdGl2ZS4iKQotCi0gICAgYj0wCi0gICAgd2hpbGUgYSAhPSBiOgotICAgICAgICBiLCBhID0gYSwgYS0tbi8vYT4+MQotICAgIHJldHVybiBhCi0KLWRlZiBfcnNoaWZ0X25lYXJlc3QoeCwgc2hpZnQpOgotICAgICIiIkdpdmVuIGFuIGludGVnZXIgeCBhbmQgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIHNoaWZ0LCByZXR1cm4gY2xvc2VzdAotICAgIGludGVnZXIgdG8geCAvIDIqKnNoaWZ0OyB1c2Ugcm91bmQtdG8tZXZlbiBpbiBjYXNlIG9mIGEgdGllLgotCi0gICAgIiIiCi0gICAgYiwgcSA9IDEgPDwgc2hpZnQsIHggPj4gc2hpZnQKLSAgICByZXR1cm4gcSArICgyKih4ICYgKGItMSkpICsgKHEmMSkgPiBiKQotCi1kZWYgX2Rpdl9uZWFyZXN0KGEsIGIpOgotICAgICIiIkNsb3Nlc3QgaW50ZWdlciB0byBhL2IsIGEgYW5kIGIgcG9zaXRpdmUgaW50ZWdlcnM7IHJvdW5kcyB0byBldmVuCi0gICAgaW4gdGhlIGNhc2Ugb2YgYSB0aWUuCi0KLSAgICAiIiIKLSAgICBxLCByID0gZGl2bW9kKGEsIGIpCi0gICAgcmV0dXJuIHEgKyAoMipyICsgKHEmMSkgPiBiKQotCi1kZWYgX2lsb2coeCwgTSwgTCA9IDgpOgotICAgICIiIkludGVnZXIgYXBwcm94aW1hdGlvbiB0byBNKmxvZyh4L00pLCB3aXRoIGFic29sdXRlIGVycm9yIGJvdW5kYWJsZQotICAgIGluIHRlcm1zIG9ubHkgb2YgeC9NLgotCi0gICAgR2l2ZW4gcG9zaXRpdmUgaW50ZWdlcnMgeCBhbmQgTSwgcmV0dXJuIGFuIGludGVnZXIgYXBwcm94aW1hdGlvbiB0bwotICAgIE0gKiBsb2coeC9NKS4gIEZvciBMID0gOCBhbmQgMC4xIDw9IHgvTSA8PSAxMCB0aGUgZGlmZmVyZW5jZQotICAgIGJldHdlZW4gdGhlIGFwcHJveGltYXRpb24gYW5kIHRoZSBleGFjdCByZXN1bHQgaXMgYXQgbW9zdCAyMi4gIEZvcgotICAgIEwgPSA4IGFuZCAxLjAgPD0geC9NIDw9IDEwLjAgdGhlIGRpZmZlcmVuY2UgaXMgYXQgbW9zdCAxNS4gIEluCi0gICAgYm90aCBjYXNlcyB0aGVzZSBhcmUgdXBwZXIgYm91bmRzIG9uIHRoZSBlcnJvcjsgaXQgd2lsbCB1c3VhbGx5IGJlCi0gICAgbXVjaCBzbWFsbGVyLiIiIgotCi0gICAgIyBUaGUgYmFzaWMgYWxnb3JpdGhtIGlzIHRoZSBmb2xsb3dpbmc6IGxldCBsb2cxcCBiZSB0aGUgZnVuY3Rpb24KLSAgICAjIGxvZzFwKHgpID0gbG9nKDEreCkuICBUaGVuIGxvZyh4L00pID0gbG9nMXAoKHgtTSkvTSkuICBXZSB1c2UKLSAgICAjIHRoZSByZWR1Y3Rpb24KLSAgICAjCi0gICAgIyAgICBsb2cxcCh5KSA9IDIqbG9nMXAoeS8oMStzcXJ0KDEreSkpKQotICAgICMKLSAgICAjIHJlcGVhdGVkbHkgdW50aWwgdGhlIGFyZ3VtZW50IHRvIGxvZzFwIGlzIHNtYWxsICg8IDIqKi1MIGluCi0gICAgIyBhYnNvbHV0ZSB2YWx1ZSkuICBGb3Igc21hbGwgeSB3ZSBjYW4gdXNlIHRoZSBUYXlsb3Igc2VyaWVzCi0gICAgIyBleHBhbnNpb24KLSAgICAjCi0gICAgIyAgICBsb2cxcCh5KSB+IHkgLSB5KioyLzIgKyB5KiozLzMgLSAuLi4gLSAoLXkpKipUL1QKLSAgICAjCi0gICAgIyB0cnVuY2F0aW5nIGF0IFQgc3VjaCB0aGF0IHkqKlQgaXMgc21hbGwgZW5vdWdoLiAgVGhlIHdob2xlCi0gICAgIyBjb21wdXRhdGlvbiBpcyBjYXJyaWVkIG91dCBpbiBhIGZvcm0gb2YgZml4ZWQtcG9pbnQgYXJpdGhtZXRpYywKLSAgICAjIHdpdGggYSByZWFsIG51bWJlciB6IGJlaW5nIHJlcHJlc2VudGVkIGJ5IGFuIGludGVnZXIKLSAgICAjIGFwcHJveGltYXRpb24gdG8geipNLiAgVG8gYXZvaWQgbG9zcyBvZiBwcmVjaXNpb24sIHRoZSB5IGJlbG93Ci0gICAgIyBpcyBhY3R1YWxseSBhbiBpbnRlZ2VyIGFwcHJveGltYXRpb24gdG8gMioqUip5Kk0sIHdoZXJlIFIgaXMgdGhlCi0gICAgIyBudW1iZXIgb2YgcmVkdWN0aW9ucyBwZXJmb3JtZWQgc28gZmFyLgotCi0gICAgeSA9IHgtTQotICAgICMgYXJndW1lbnQgcmVkdWN0aW9uOyBSID0gbnVtYmVyIG9mIHJlZHVjdGlvbnMgcGVyZm9ybWVkCi0gICAgUiA9IDAKLSAgICB3aGlsZSAoUiA8PSBMIGFuZCBhYnMoeSkgPDwgTC1SID49IE0gb3IKLSAgICAgICAgICAgUiA+IEwgYW5kIGFicyh5KSA+PiBSLUwgPj0gTSk6Ci0gICAgICAgIHkgPSBfZGl2X25lYXJlc3QoKE0qeSkgPDwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBNICsgX3NxcnRfbmVhcmVzdChNKihNK19yc2hpZnRfbmVhcmVzdCh5LCBSKSksIE0pKQotICAgICAgICBSICs9IDEKLQotICAgICMgVGF5bG9yIHNlcmllcyB3aXRoIFQgdGVybXMKLSAgICBUID0gLWludCgtMTAqbGVuKHN0cihNKSkvLygzKkwpKQotICAgIHlzaGlmdCA9IF9yc2hpZnRfbmVhcmVzdCh5LCBSKQotICAgIHcgPSBfZGl2X25lYXJlc3QoTSwgVCkKLSAgICBmb3IgayBpbiByYW5nZShULTEsIDAsIC0xKToKLSAgICAgICAgdyA9IF9kaXZfbmVhcmVzdChNLCBrKSAtIF9kaXZfbmVhcmVzdCh5c2hpZnQqdywgTSkKLQotICAgIHJldHVybiBfZGl2X25lYXJlc3Qodyp5LCBNKQotCi1kZWYgX2Rsb2cxMChjLCBlLCBwKToKLSAgICAiIiJHaXZlbiBpbnRlZ2VycyBjLCBlIGFuZCBwIHdpdGggYyA+IDAsIHAgPj0gMCwgY29tcHV0ZSBhbiBpbnRlZ2VyCi0gICAgYXBwcm94aW1hdGlvbiB0byAxMCoqcCAqIGxvZzEwKGMqMTAqKmUpLCB3aXRoIGFuIGFic29sdXRlIGVycm9yIG9mCi0gICAgYXQgbW9zdCAxLiAgQXNzdW1lcyB0aGF0IGMqMTAqKmUgaXMgbm90IGV4YWN0bHkgMS4iIiIKLQotICAgICMgaW5jcmVhc2UgcHJlY2lzaW9uIGJ5IDI7IGNvbXBlbnNhdGUgZm9yIHRoaXMgYnkgZGl2aWRpbmcKLSAgICAjIGZpbmFsIHJlc3VsdCBieSAxMDAKLSAgICBwICs9IDIKLQotICAgICMgd3JpdGUgYyoxMCoqZSBhcyBkKjEwKipmIHdpdGggZWl0aGVyOgotICAgICMgICBmID49IDAgYW5kIDEgPD0gZCA8PSAxMCwgb3IKLSAgICAjICAgZiA8PSAwIGFuZCAwLjEgPD0gZCA8PSAxLgotICAgICMgVGh1cyBmb3IgYyoxMCoqZSBjbG9zZSB0byAxLCBmID0gMAotICAgIGwgPSBsZW4oc3RyKGMpKQotICAgIGYgPSBlK2wgLSAoZStsID49IDEpCi0KLSAgICBpZiBwID4gMDoKLSAgICAgICAgTSA9IDEwKipwCi0gICAgICAgIGsgPSBlK3AtZgotICAgICAgICBpZiBrID49IDA6Ci0gICAgICAgICAgICBjICo9IDEwKiprCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjID0gX2Rpdl9uZWFyZXN0KGMsIDEwKiotaykKLQotICAgICAgICBsb2dfZCA9IF9pbG9nKGMsIE0pICMgZXJyb3IgPCA1ICsgMjIgPSAyNwotICAgICAgICBsb2dfMTAgPSBfbG9nMTBfZGlnaXRzKHApICMgZXJyb3IgPCAxCi0gICAgICAgIGxvZ19kID0gX2Rpdl9uZWFyZXN0KGxvZ19kKk0sIGxvZ18xMCkKLSAgICAgICAgbG9nX3RlbnBvd2VyID0gZipNICMgZXhhY3QKLSAgICBlbHNlOgotICAgICAgICBsb2dfZCA9IDAgICMgZXJyb3IgPCAyLjMxCi0gICAgICAgIGxvZ190ZW5wb3dlciA9IF9kaXZfbmVhcmVzdChmLCAxMCoqLXApICMgZXJyb3IgPCAwLjUKLQotICAgIHJldHVybiBfZGl2X25lYXJlc3QobG9nX3RlbnBvd2VyK2xvZ19kLCAxMDApCi0KLWRlZiBfZGxvZyhjLCBlLCBwKToKLSAgICAiIiJHaXZlbiBpbnRlZ2VycyBjLCBlIGFuZCBwIHdpdGggYyA+IDAsIGNvbXB1dGUgYW4gaW50ZWdlcgotICAgIGFwcHJveGltYXRpb24gdG8gMTAqKnAgKiBsb2coYyoxMCoqZSksIHdpdGggYW4gYWJzb2x1dGUgZXJyb3Igb2YKLSAgICBhdCBtb3N0IDEuICBBc3N1bWVzIHRoYXQgYyoxMCoqZSBpcyBub3QgZXhhY3RseSAxLiIiIgotCi0gICAgIyBJbmNyZWFzZSBwcmVjaXNpb24gYnkgMi4gVGhlIHByZWNpc2lvbiBpbmNyZWFzZSBpcyBjb21wZW5zYXRlZAotICAgICMgZm9yIGF0IHRoZSBlbmQgd2l0aCBhIGRpdmlzaW9uIGJ5IDEwMC4KLSAgICBwICs9IDIKLQotICAgICMgcmV3cml0ZSBjKjEwKiplIGFzIGQqMTAqKmYgd2l0aCBlaXRoZXIgZiA+PSAwIGFuZCAxIDw9IGQgPD0gMTAsCi0gICAgIyBvciBmIDw9IDAgYW5kIDAuMSA8PSBkIDw9IDEuICBUaGVuIHdlIGNhbiBjb21wdXRlIDEwKipwICogbG9nKGMqMTAqKmUpCi0gICAgIyBhcyAxMCoqcCAqIGxvZyhkKSArIDEwKipwKmYgKiBsb2coMTApLgotICAgIGwgPSBsZW4oc3RyKGMpKQotICAgIGYgPSBlK2wgLSAoZStsID49IDEpCi0KLSAgICAjIGNvbXB1dGUgYXBwcm94aW1hdGlvbiB0byAxMCoqcCpsb2coZCksIHdpdGggZXJyb3IgPCAyNwotICAgIGlmIHAgPiAwOgotICAgICAgICBrID0gZStwLWYKLSAgICAgICAgaWYgayA+PSAwOgotICAgICAgICAgICAgYyAqPSAxMCoqawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYyA9IF9kaXZfbmVhcmVzdChjLCAxMCoqLWspICAjIGVycm9yIG9mIDw9IDAuNSBpbiBjCi0KLSAgICAgICAgIyBfaWxvZyBtYWduaWZpZXMgZXhpc3RpbmcgZXJyb3IgaW4gYyBieSBhIGZhY3RvciBvZiBhdCBtb3N0IDEwCi0gICAgICAgIGxvZ19kID0gX2lsb2coYywgMTAqKnApICMgZXJyb3IgPCA1ICsgMjIgPSAyNwotICAgIGVsc2U6Ci0gICAgICAgICMgcCA8PSAwOiBqdXN0IGFwcHJveGltYXRlIHRoZSB3aG9sZSB0aGluZyBieSAwOyBlcnJvciA8IDIuMzEKLSAgICAgICAgbG9nX2QgPSAwCi0KLSAgICAjIGNvbXB1dGUgYXBwcm94aW1hdGlvbiB0byBmKjEwKipwKmxvZygxMCksIHdpdGggZXJyb3IgPCAxMS4KLSAgICBpZiBmOgotICAgICAgICBleHRyYSA9IGxlbihzdHIoYWJzKGYpKSktMQotICAgICAgICBpZiBwICsgZXh0cmEgPj0gMDoKLSAgICAgICAgICAgICMgZXJyb3IgaW4gZiAqIF9sb2cxMF9kaWdpdHMocCtleHRyYSkgPCB8ZnwgKiAxID0gfGZ8Ci0gICAgICAgICAgICAjIGFmdGVyIGRpdmlzaW9uLCBlcnJvciA8IHxmfC8xMCoqZXh0cmEgKyAwLjUgPCAxMCArIDAuNSA8IDExCi0gICAgICAgICAgICBmX2xvZ190ZW4gPSBfZGl2X25lYXJlc3QoZipfbG9nMTBfZGlnaXRzKHArZXh0cmEpLCAxMCoqZXh0cmEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmX2xvZ190ZW4gPSAwCi0gICAgZWxzZToKLSAgICAgICAgZl9sb2dfdGVuID0gMAotCi0gICAgIyBlcnJvciBpbiBzdW0gPCAxMSsyNyA9IDM4OyBlcnJvciBhZnRlciBkaXZpc2lvbiA8IDAuMzggKyAwLjUgPCAxCi0gICAgcmV0dXJuIF9kaXZfbmVhcmVzdChmX2xvZ190ZW4gKyBsb2dfZCwgMTAwKQotCi1jbGFzcyBfTG9nMTBNZW1vaXplKG9iamVjdCk6Ci0gICAgIiIiQ2xhc3MgdG8gY29tcHV0ZSwgc3RvcmUsIGFuZCBhbGxvdyByZXRyaWV2YWwgb2YsIGRpZ2l0cyBvZiB0aGUKLSAgICBjb25zdGFudCBsb2coMTApID0gMi4zMDI1ODUuLi4uICBUaGlzIGNvbnN0YW50IGlzIG5lZWRlZCBieQotICAgIERlY2ltYWwubG4sIERlY2ltYWwubG9nMTAsIERlY2ltYWwuZXhwIGFuZCBEZWNpbWFsLl9fcG93X18uIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmRpZ2l0cyA9ICIyMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDg4NiIKLQotICAgIGRlZiBnZXRkaWdpdHMoc2VsZiwgcCk6Ci0gICAgICAgICIiIkdpdmVuIGFuIGludGVnZXIgcCA+PSAwLCByZXR1cm4gZmxvb3IoMTAqKnApKmxvZygxMCkuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIHNlbGYuZ2V0ZGlnaXRzKDMpIHJldHVybnMgMjMwMi4KLSAgICAgICAgIiIiCi0gICAgICAgICMgZGlnaXRzIGFyZSBzdG9yZWQgYXMgYSBzdHJpbmcsIGZvciBxdWljayBjb252ZXJzaW9uIHRvCi0gICAgICAgICMgaW50ZWdlciBpbiB0aGUgY2FzZSB0aGF0IHdlJ3ZlIGFscmVhZHkgY29tcHV0ZWQgZW5vdWdoCi0gICAgICAgICMgZGlnaXRzOyB0aGUgc3RvcmVkIGRpZ2l0cyBzaG91bGQgYWx3YXlzIGJlIGNvcnJlY3QKLSAgICAgICAgIyAodHJ1bmNhdGVkLCBub3Qgcm91bmRlZCB0byBuZWFyZXN0KS4KLSAgICAgICAgaWYgcCA8IDA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwIHNob3VsZCBiZSBub25uZWdhdGl2ZSIpCi0KLSAgICAgICAgaWYgcCA+PSBsZW4oc2VsZi5kaWdpdHMpOgotICAgICAgICAgICAgIyBjb21wdXRlIHArMywgcCs2LCBwKzksIC4uLiBkaWdpdHM7IGNvbnRpbnVlIHVudGlsIGF0Ci0gICAgICAgICAgICAjIGxlYXN0IG9uZSBvZiB0aGUgZXh0cmEgZGlnaXRzIGlzIG5vbnplcm8KLSAgICAgICAgICAgIGV4dHJhID0gMwotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAjIGNvbXB1dGUgcCtleHRyYSBkaWdpdHMsIGNvcnJlY3QgdG8gd2l0aGluIDF1bHAKLSAgICAgICAgICAgICAgICBNID0gMTAqKihwK2V4dHJhKzIpCi0gICAgICAgICAgICAgICAgZGlnaXRzID0gc3RyKF9kaXZfbmVhcmVzdChfaWxvZygxMCpNLCBNKSwgMTAwKSkKLSAgICAgICAgICAgICAgICBpZiBkaWdpdHNbLWV4dHJhOl0gIT0gJzAnKmV4dHJhOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGV4dHJhICs9IDMKLSAgICAgICAgICAgICMga2VlcCBhbGwgcmVsaWFibGUgZGlnaXRzIHNvIGZhcjsgcmVtb3ZlIHRyYWlsaW5nIHplcm9zCi0gICAgICAgICAgICAjIGFuZCBuZXh0IG5vbnplcm8gZGlnaXQKLSAgICAgICAgICAgIHNlbGYuZGlnaXRzID0gZGlnaXRzLnJzdHJpcCgnMCcpWzotMV0KLSAgICAgICAgcmV0dXJuIGludChzZWxmLmRpZ2l0c1s6cCsxXSkKLQotX2xvZzEwX2RpZ2l0cyA9IF9Mb2cxME1lbW9pemUoKS5nZXRkaWdpdHMKLQotZGVmIF9pZXhwKHgsIE0sIEw9OCk6Ci0gICAgIiIiR2l2ZW4gaW50ZWdlcnMgeCBhbmQgTSwgTSA+IDAsIHN1Y2ggdGhhdCB4L00gaXMgc21hbGwgaW4gYWJzb2x1dGUKLSAgICB2YWx1ZSwgY29tcHV0ZSBhbiBpbnRlZ2VyIGFwcHJveGltYXRpb24gdG8gTSpleHAoeC9NKS4gIEZvciAwIDw9Ci0gICAgeC9NIDw9IDIuNCwgdGhlIGFic29sdXRlIGVycm9yIGluIHRoZSByZXN1bHQgaXMgYm91bmRlZCBieSA2MCAoYW5kCi0gICAgaXMgdXN1YWxseSBtdWNoIHNtYWxsZXIpLiIiIgotCi0gICAgIyBBbGdvcml0aG06IHRvIGNvbXB1dGUgZXhwKHopIGZvciBhIHJlYWwgbnVtYmVyIHosIGZpcnN0IGRpdmlkZSB6Ci0gICAgIyBieSBhIHN1aXRhYmxlIHBvd2VyIFIgb2YgMiBzbyB0aGF0IHx6LzIqKlJ8IDwgMioqLUwuICBUaGVuCi0gICAgIyBjb21wdXRlIGV4cG0xKHovMioqUikgPSBleHAoei8yKipSKSAtIDEgdXNpbmcgdGhlIHVzdWFsIFRheWxvcgotICAgICMgc2VyaWVzCi0gICAgIwotICAgICMgICAgIGV4cG0xKHgpID0geCArIHgqKjIvMiEgKyB4KiozLzMhICsgLi4uCi0gICAgIwotICAgICMgTm93IHVzZSB0aGUgaWRlbnRpdHkKLSAgICAjCi0gICAgIyAgICAgZXhwbTEoMngpID0gZXhwbTEoeCkqKGV4cG0xKHgpKzIpCi0gICAgIwotICAgICMgUiB0aW1lcyB0byBjb21wdXRlIHRoZSBzZXF1ZW5jZSBleHBtMSh6LzIqKlIpLAotICAgICMgZXhwbTEoei8yKiooUi0xKSksIC4uLiAsIGV4cCh6LzIpLCBleHAoeikuCi0KLSAgICAjIEZpbmQgUiBzdWNoIHRoYXQgeC8yKipSL00gPD0gMioqLUwKLSAgICBSID0gX25iaXRzKCh4PDxMKS8vTSkKLQotICAgICMgVGF5bG9yIHNlcmllcy4gICgyKipMKSoqVCA+IE0KLSAgICBUID0gLWludCgtMTAqbGVuKHN0cihNKSkvLygzKkwpKQotICAgIHkgPSBfZGl2X25lYXJlc3QoeCwgVCkKLSAgICBNc2hpZnQgPSBNPDxSCi0gICAgZm9yIGkgaW4gcmFuZ2UoVC0xLCAwLCAtMSk6Ci0gICAgICAgIHkgPSBfZGl2X25lYXJlc3QoeCooTXNoaWZ0ICsgeSksIE1zaGlmdCAqIGkpCi0KLSAgICAjIEV4cGFuc2lvbgotICAgIGZvciBrIGluIHJhbmdlKFItMSwgLTEsIC0xKToKLSAgICAgICAgTXNoaWZ0ID0gTTw8KGsrMikKLSAgICAgICAgeSA9IF9kaXZfbmVhcmVzdCh5Kih5K01zaGlmdCksIE1zaGlmdCkKLQotICAgIHJldHVybiBNK3kKLQotZGVmIF9kZXhwKGMsIGUsIHApOgotICAgICIiIkNvbXB1dGUgYW4gYXBwcm94aW1hdGlvbiB0byBleHAoYyoxMCoqZSksIHdpdGggcCBkZWNpbWFsIHBsYWNlcyBvZgotICAgIHByZWNpc2lvbi4KLQotICAgIFJldHVybnMgaW50ZWdlcnMgZCwgZiBzdWNoIHRoYXQ6Ci0KLSAgICAgIDEwKioocC0xKSA8PSBkIDw9IDEwKipwLCBhbmQKLSAgICAgIChkLTEpKjEwKipmIDwgZXhwKGMqMTAqKmUpIDwgKGQrMSkqMTAqKmYKLQotICAgIEluIG90aGVyIHdvcmRzLCBkKjEwKipmIGlzIGFuIGFwcHJveGltYXRpb24gdG8gZXhwKGMqMTAqKmUpIHdpdGggcAotICAgIGRpZ2l0cyBvZiBwcmVjaXNpb24sIGFuZCB3aXRoIGFuIGVycm9yIGluIGQgb2YgYXQgbW9zdCAxLiAgVGhpcyBpcwotICAgIGFsbW9zdCwgYnV0IG5vdCBxdWl0ZSwgdGhlIHNhbWUgYXMgdGhlIGVycm9yIGJlaW5nIDwgMXVscDogd2hlbiBkCi0gICAgPSAxMCoqKHAtMSkgdGhlIGVycm9yIGNvdWxkIGJlIHVwIHRvIDEwIHVscC4iIiIKLQotICAgICMgd2UnbGwgY2FsbCBpZXhwIHdpdGggTSA9IDEwKioocCsyKSwgZ2l2aW5nIHArMyBkaWdpdHMgb2YgcHJlY2lzaW9uCi0gICAgcCArPSAyCi0KLSAgICAjIGNvbXB1dGUgbG9nKDEwKSB3aXRoIGV4dHJhIHByZWNpc2lvbiA9IGFkanVzdGVkIGV4cG9uZW50IG9mIGMqMTAqKmUKLSAgICBleHRyYSA9IG1heCgwLCBlICsgbGVuKHN0cihjKSkgLSAxKQotICAgIHEgPSBwICsgZXh0cmEKLQotICAgICMgY29tcHV0ZSBxdW90aWVudCBjKjEwKiplLyhsb2coMTApKSA9IGMqMTAqKihlK3EpLyhsb2coMTApKjEwKipxKSwKLSAgICAjIHJvdW5kaW5nIGRvd24KLSAgICBzaGlmdCA9IGUrcQotICAgIGlmIHNoaWZ0ID49IDA6Ci0gICAgICAgIGNzaGlmdCA9IGMqMTAqKnNoaWZ0Ci0gICAgZWxzZToKLSAgICAgICAgY3NoaWZ0ID0gYy8vMTAqKi1zaGlmdAotICAgIHF1b3QsIHJlbSA9IGRpdm1vZChjc2hpZnQsIF9sb2cxMF9kaWdpdHMocSkpCi0KLSAgICAjIHJlZHVjZSByZW1haW5kZXIgYmFjayB0byBvcmlnaW5hbCBwcmVjaXNpb24KLSAgICByZW0gPSBfZGl2X25lYXJlc3QocmVtLCAxMCoqZXh0cmEpCi0KLSAgICAjIGVycm9yIGluIHJlc3VsdCBvZiBfaWV4cCA8IDEyMDsgIGVycm9yIGFmdGVyIGRpdmlzaW9uIDwgMC42MgotICAgIHJldHVybiBfZGl2X25lYXJlc3QoX2lleHAocmVtLCAxMCoqcCksIDEwMDApLCBxdW90IC0gcCArIDMKLQotZGVmIF9kcG93ZXIoeGMsIHhlLCB5YywgeWUsIHApOgotICAgICIiIkdpdmVuIGludGVnZXJzIHhjLCB4ZSwgeWMgYW5kIHllIHJlcHJlc2VudGluZyBEZWNpbWFscyB4ID0geGMqMTAqKnhlIGFuZAotICAgIHkgPSB5YyoxMCoqeWUsIGNvbXB1dGUgeCoqeS4gIFJldHVybnMgYSBwYWlyIG9mIGludGVnZXJzIChjLCBlKSBzdWNoIHRoYXQ6Ci0KLSAgICAgIDEwKioocC0xKSA8PSBjIDw9IDEwKipwLCBhbmQKLSAgICAgIChjLTEpKjEwKiplIDwgeCoqeSA8IChjKzEpKjEwKiplCi0KLSAgICBpbiBvdGhlciB3b3JkcywgYyoxMCoqZSBpcyBhbiBhcHByb3hpbWF0aW9uIHRvIHgqKnkgd2l0aCBwIGRpZ2l0cwotICAgIG9mIHByZWNpc2lvbiwgYW5kIHdpdGggYW4gZXJyb3IgaW4gYyBvZiBhdCBtb3N0IDEuICAoVGhpcyBpcwotICAgIGFsbW9zdCwgYnV0IG5vdCBxdWl0ZSwgdGhlIHNhbWUgYXMgdGhlIGVycm9yIGJlaW5nIDwgMXVscDogd2hlbiBjCi0gICAgPT0gMTAqKihwLTEpIHdlIGNhbiBvbmx5IGd1YXJhbnRlZSBlcnJvciA8IDEwdWxwLikKLQotICAgIFdlIGFzc3VtZSB0aGF0OiB4IGlzIHBvc2l0aXZlIGFuZCBub3QgZXF1YWwgdG8gMSwgYW5kIHkgaXMgbm9uemVyby4KLSAgICAiIiIKLQotICAgICMgRmluZCBiIHN1Y2ggdGhhdCAxMCoqKGItMSkgPD0gfHl8IDw9IDEwKipiCi0gICAgYiA9IGxlbihzdHIoYWJzKHljKSkpICsgeWUKLQotICAgICMgbG9nKHgpID0gbHhjKjEwKiooLXAtYi0xKSwgdG8gcCtiKzEgcGxhY2VzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50Ci0gICAgbHhjID0gX2Rsb2coeGMsIHhlLCBwK2IrMSkKLQotICAgICMgY29tcHV0ZSBwcm9kdWN0IHkqbG9nKHgpID0geWMqbHhjKjEwKiooLXAtYi0xK3llKSA9IHBjKjEwKiooLXAtMSkKLSAgICBzaGlmdCA9IHllLWIKLSAgICBpZiBzaGlmdCA+PSAwOgotICAgICAgICBwYyA9IGx4Yyp5YyoxMCoqc2hpZnQKLSAgICBlbHNlOgotICAgICAgICBwYyA9IF9kaXZfbmVhcmVzdChseGMqeWMsIDEwKiotc2hpZnQpCi0KLSAgICBpZiBwYyA9PSAwOgotICAgICAgICAjIHdlIHByZWZlciBhIHJlc3VsdCB0aGF0IGlzbid0IGV4YWN0bHkgMTsgdGhpcyBtYWtlcyBpdAotICAgICAgICAjIGVhc2llciB0byBjb21wdXRlIGEgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IGluIF9fcG93X18KLSAgICAgICAgaWYgKChsZW4oc3RyKHhjKSkgKyB4ZSA+PSAxKSA9PSAoeWMgPiAwKSk6ICMgaWYgeCoqeSA+IDE6Ci0gICAgICAgICAgICBjb2VmZiwgZXhwID0gMTAqKihwLTEpKzEsIDEtcAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29lZmYsIGV4cCA9IDEwKipwLTEsIC1wCi0gICAgZWxzZToKLSAgICAgICAgY29lZmYsIGV4cCA9IF9kZXhwKHBjLCAtKHArMSksIHArMSkKLSAgICAgICAgY29lZmYgPSBfZGl2X25lYXJlc3QoY29lZmYsIDEwKQotICAgICAgICBleHAgKz0gMQotCi0gICAgcmV0dXJuIGNvZWZmLCBleHAKLQotZGVmIF9sb2cxMF9sYihjLCBjb3JyZWN0aW9uID0gewotICAgICAgICAnMSc6IDEwMCwgJzInOiA3MCwgJzMnOiA1MywgJzQnOiA0MCwgJzUnOiAzMSwKLSAgICAgICAgJzYnOiAyMywgJzcnOiAxNiwgJzgnOiAxMCwgJzknOiA1fSk6Ci0gICAgIiIiQ29tcHV0ZSBhIGxvd2VyIGJvdW5kIGZvciAxMDAqbG9nMTAoYykgZm9yIGEgcG9zaXRpdmUgaW50ZWdlciBjLiIiIgotICAgIGlmIGMgPD0gMDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIGFyZ3VtZW50IHRvIF9sb2cxMF9sYiBzaG91bGQgYmUgbm9ubmVnYXRpdmUuIikKLSAgICBzdHJfYyA9IHN0cihjKQotICAgIHJldHVybiAxMDAqbGVuKHN0cl9jKSAtIGNvcnJlY3Rpb25bc3RyX2NbMF1dCi0KLSMjIyMjIEhlbHBlciBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1kZWYgX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9RmFsc2UsIGFsbG93X2Zsb2F0PUZhbHNlKToKLSAgICAiIiJDb252ZXJ0IG90aGVyIHRvIERlY2ltYWwuCi0KLSAgICBWZXJpZmllcyB0aGF0IGl0J3Mgb2sgdG8gdXNlIGluIGFuIGltcGxpY2l0IGNvbnN0cnVjdGlvbi4KLSAgICBJZiBhbGxvd19mbG9hdCBpcyB0cnVlLCBhbGxvdyBjb252ZXJzaW9uIGZyb20gZmxvYXQ7ICB0aGlzCi0gICAgaXMgdXNlZCBpbiB0aGUgY29tcGFyaXNvbiBtZXRob2RzIChfX2VxX18gYW5kIGZyaWVuZHMpLgotCi0gICAgIiIiCi0gICAgaWYgaXNpbnN0YW5jZShvdGhlciwgRGVjaW1hbCk6Ci0gICAgICAgIHJldHVybiBvdGhlcgotICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCk6Ci0gICAgICAgIHJldHVybiBEZWNpbWFsKG90aGVyKQotICAgIGlmIGFsbG93X2Zsb2F0IGFuZCBpc2luc3RhbmNlKG90aGVyLCBmbG9hdCk6Ci0gICAgICAgIHJldHVybiBEZWNpbWFsLmZyb21fZmxvYXQob3RoZXIpCi0KLSAgICBpZiByYWlzZWl0OgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgb3RoZXIpCi0gICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLWRlZiBfY29udmVydF9mb3JfY29tcGFyaXNvbihzZWxmLCBvdGhlciwgZXF1YWxpdHlfb3A9RmFsc2UpOgotICAgICIiIkdpdmVuIGEgRGVjaW1hbCBpbnN0YW5jZSBzZWxmIGFuZCBhIFB5dGhvbiBvYmplY3Qgb3RoZXIsIHJldHVybgotICAgIGEgcGFpciAocywgbykgb2YgRGVjaW1hbCBpbnN0YW5jZXMgc3VjaCB0aGF0ICJzIG9wIG8iIGlzCi0gICAgZXF1aXZhbGVudCB0byAic2VsZiBvcCBvdGhlciIgZm9yIGFueSBvZiB0aGUgNiBjb21wYXJpc29uCi0gICAgb3BlcmF0b3JzICJvcCIuCi0KLSAgICAiIiIKLSAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBEZWNpbWFsKToKLSAgICAgICAgcmV0dXJuIHNlbGYsIG90aGVyCi0KLSAgICAjIENvbXBhcmlzb24gd2l0aCBhIFJhdGlvbmFsIGluc3RhbmNlIChhbHNvIGluY2x1ZGVzIGludGVnZXJzKToKLSAgICAjIHNlbGYgb3Agbi9kIDw9PiBzZWxmKmQgb3AgbiAoZm9yIG4gYW5kIGQgaW50ZWdlcnMsIGQgcG9zaXRpdmUpLgotICAgICMgQSBOYU4gb3IgaW5maW5pdHkgY2FuIGJlIGxlZnQgdW5jaGFuZ2VkIHdpdGhvdXQgYWZmZWN0aW5nIHRoZQotICAgICMgY29tcGFyaXNvbiByZXN1bHQuCi0gICAgaWYgaXNpbnN0YW5jZShvdGhlciwgX251bWJlcnMuUmF0aW9uYWwpOgotICAgICAgICBpZiBub3Qgc2VsZi5faXNfc3BlY2lhbDoKLSAgICAgICAgICAgIHNlbGYgPSBfZGVjX2Zyb21fdHJpcGxlKHNlbGYuX3NpZ24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoaW50KHNlbGYuX2ludCkgKiBvdGhlci5kZW5vbWluYXRvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHApCi0gICAgICAgIHJldHVybiBzZWxmLCBEZWNpbWFsKG90aGVyLm51bWVyYXRvcikKLQotICAgICMgQ29tcGFyaXNvbnMgd2l0aCBmbG9hdCBhbmQgY29tcGxleCB0eXBlcy4gID09IGFuZCAhPSBjb21wYXJpc29ucwotICAgICMgd2l0aCBjb21wbGV4IG51bWJlcnMgc2hvdWxkIHN1Y2NlZWQsIHJldHVybmluZyBlaXRoZXIgVHJ1ZSBvciBGYWxzZQotICAgICMgYXMgYXBwcm9wcmlhdGUuICBPdGhlciBjb21wYXJpc29ucyByZXR1cm4gTm90SW1wbGVtZW50ZWQuCi0gICAgaWYgZXF1YWxpdHlfb3AgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIF9udW1iZXJzLkNvbXBsZXgpIGFuZCBvdGhlci5pbWFnID09IDA6Ci0gICAgICAgIG90aGVyID0gb3RoZXIucmVhbAotICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGZsb2F0KToKLSAgICAgICAgY29udGV4dCA9IGdldGNvbnRleHQoKQotICAgICAgICBpZiBlcXVhbGl0eV9vcDoKLSAgICAgICAgICAgIGNvbnRleHQuZmxhZ3NbRmxvYXRPcGVyYXRpb25dID0gMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoRmxvYXRPcGVyYXRpb24sCi0gICAgICAgICAgICAgICAgInN0cmljdCBzZW1hbnRpY3MgZm9yIG1peGluZyBmbG9hdHMgYW5kIERlY2ltYWxzIGFyZSBlbmFibGVkIikKLSAgICAgICAgcmV0dXJuIHNlbGYsIERlY2ltYWwuZnJvbV9mbG9hdChvdGhlcikKLSAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQsIE5vdEltcGxlbWVudGVkCi0KLQotIyMjIyMgU2V0dXAgU3BlY2lmaWMgQ29udGV4dHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBUaGUgZGVmYXVsdCBjb250ZXh0IHByb3RvdHlwZSB1c2VkIGJ5IENvbnRleHQoKQotIyBJcyBtdXRhYmxlLCBzbyB0aGF0IG5ldyBjb250ZXh0cyBjYW4gaGF2ZSBkaWZmZXJlbnQgZGVmYXVsdCB2YWx1ZXMKLQotRGVmYXVsdENvbnRleHQgPSBDb250ZXh0KAotICAgICAgICBwcmVjPTI4LCByb3VuZGluZz1ST1VORF9IQUxGX0VWRU4sCi0gICAgICAgIHRyYXBzPVtEaXZpc2lvbkJ5WmVybywgT3ZlcmZsb3csIEludmFsaWRPcGVyYXRpb25dLAotICAgICAgICBmbGFncz1bXSwKLSAgICAgICAgRW1heD05OTk5OTksCi0gICAgICAgIEVtaW49LTk5OTk5OSwKLSAgICAgICAgY2FwaXRhbHM9MSwKLSAgICAgICAgY2xhbXA9MAotKQotCi0jIFByZS1tYWRlIGFsdGVybmF0ZSBjb250ZXh0cyBvZmZlcmVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uCi0jIERvbid0IGNoYW5nZSB0aGVzZTsgdGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gc2VsZWN0IHRoZXNlCi0jIGNvbnRleHRzIGFuZCBiZSBhYmxlIHRvIHJlcHJvZHVjZSByZXN1bHRzIGZyb20gb3RoZXIgaW1wbGVtZW50YXRpb25zCi0jIG9mIHRoZSBzcGVjLgotCi1CYXNpY0NvbnRleHQgPSBDb250ZXh0KAotICAgICAgICBwcmVjPTksIHJvdW5kaW5nPVJPVU5EX0hBTEZfVVAsCi0gICAgICAgIHRyYXBzPVtEaXZpc2lvbkJ5WmVybywgT3ZlcmZsb3csIEludmFsaWRPcGVyYXRpb24sIENsYW1wZWQsIFVuZGVyZmxvd10sCi0gICAgICAgIGZsYWdzPVtdLAotKQotCi1FeHRlbmRlZENvbnRleHQgPSBDb250ZXh0KAotICAgICAgICBwcmVjPTksIHJvdW5kaW5nPVJPVU5EX0hBTEZfRVZFTiwKLSAgICAgICAgdHJhcHM9W10sCi0gICAgICAgIGZsYWdzPVtdLAotKQotCi0KLSMjIyMjIGNydWQgZm9yIHBhcnNpbmcgc3RyaW5ncyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgUmVndWxhciBleHByZXNzaW9uIHVzZWQgZm9yIHBhcnNpbmcgbnVtZXJpYyBzdHJpbmdzLiAgQWRkaXRpb25hbAotIyBjb21tZW50czoKLSMKLSMgMS4gVW5jb21tZW50IHRoZSB0d28gJ1xzKicgbGluZXMgdG8gYWxsb3cgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcKLSMgd2hpdGVzcGFjZS4gIEJ1dCBub3RlIHRoYXQgdGhlIHNwZWNpZmljYXRpb24gZGlzYWxsb3dzIHdoaXRlc3BhY2UgaW4KLSMgYSBudW1lcmljIHN0cmluZy4KLSMKLSMgMi4gRm9yIGZpbml0ZSBudW1iZXJzIChub3QgaW5maW5pdGllcyBhbmQgTmFOcykgdGhlIGJvZHkgb2YgdGhlCi0jIG51bWJlciBiZXR3ZWVuIHRoZSBvcHRpb25hbCBzaWduIGFuZCB0aGUgb3B0aW9uYWwgZXhwb25lbnQgbXVzdCBoYXZlCi0jIGF0IGxlYXN0IG9uZSBkZWNpbWFsIGRpZ2l0LCBwb3NzaWJseSBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gIFRoZQotIyBsb29rYWhlYWQgZXhwcmVzc2lvbiAnKD89XGR8XC5cZCknIGNoZWNrcyB0aGlzLgotCi1pbXBvcnQgcmUKLV9wYXJzZXIgPSByZS5jb21waWxlKHIiIiIgICAgICAgICMgQSBudW1lcmljIHN0cmluZyBjb25zaXN0cyBvZjoKLSMgICAgXHMqCi0gICAgKD9QPHNpZ24+Wy0rXSk/ICAgICAgICAgICAgICAjIGFuIG9wdGlvbmFsIHNpZ24sIGZvbGxvd2VkIGJ5IGVpdGhlci4uLgotICAgICgKLSAgICAgICAgKD89XGR8XC5cZCkgICAgICAgICAgICAgICMgLi4uYSBudW1iZXIgKHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0KQotICAgICAgICAoP1A8aW50PlxkKikgICAgICAgICAgICAgIyBoYXZpbmcgYSAocG9zc2libHkgZW1wdHkpIGludGVnZXIgcGFydAotICAgICAgICAoXC4oP1A8ZnJhYz5cZCopKT8gICAgICAgIyBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBmcmFjdGlvbmFsIHBhcnQKLSAgICAgICAgKEUoP1A8ZXhwPlstK10/XGQrKSk/ICAgICMgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgZXhwb25lbnQsIG9yLi4uCi0gICAgfAotICAgICAgICBJbmYoaW5pdHkpPyAgICAgICAgICAgICAgIyAuLi5hbiBpbmZpbml0eSwgb3IuLi4KLSAgICB8Ci0gICAgICAgICg/UDxzaWduYWw+cyk/ICAgICAgICAgICAjIC4uLmFuIChvcHRpb25hbGx5IHNpZ25hbGluZykKLSAgICAgICAgTmFOICAgICAgICAgICAgICAgICAgICAgICMgTmFOCi0gICAgICAgICg/UDxkaWFnPlxkKikgICAgICAgICAgICAjIHdpdGggKHBvc3NpYmx5IGVtcHR5KSBkaWFnbm9zdGljIGluZm8uCi0gICAgKQotIyAgICBccyoKLSAgICBcWgotIiIiLCByZS5WRVJCT1NFIHwgcmUuSUdOT1JFQ0FTRSkubWF0Y2gKLQotX2FsbF96ZXJvcyA9IHJlLmNvbXBpbGUoJzAqJCcpLm1hdGNoCi1fZXhhY3RfaGFsZiA9IHJlLmNvbXBpbGUoJzUwKiQnKS5tYXRjaAotCi0jIyMjIyBQRVAzMTAxIHN1cHBvcnQgZnVuY3Rpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIHNlY3Rpb24gaGF2ZSBsaXR0bGUgdG8gZG8gd2l0aCB0aGUgRGVjaW1hbAotIyBjbGFzcywgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJldXNlZCBvciBhZGFwdGVkIGZvciBvdGhlciBwdXJlCi0jIFB5dGhvbiBudW1lcmljIGNsYXNzZXMgdGhhdCB3YW50IHRvIGltcGxlbWVudCBfX2Zvcm1hdF9fCi0jCi0jIEEgZm9ybWF0IHNwZWNpZmllciBmb3IgRGVjaW1hbCBsb29rcyBsaWtlOgotIwotIyAgIFtbZmlsbF1hbGlnbl1bc2lnbl1bI11bMF1bbWluaW11bXdpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXQotCi1fcGFyc2VfZm9ybWF0X3NwZWNpZmllcl9yZWdleCA9IHJlLmNvbXBpbGUociIiIlxBCi0oPzoKLSAgICg/UDxmaWxsPi4pPwotICAgKD9QPGFsaWduPls8Pj1eXSkKLSk/Ci0oP1A8c2lnbj5bLSsgXSk/Ci0oP1A8YWx0PlwjKT8KLSg/UDx6ZXJvcGFkPjApPwotKD9QPG1pbmltdW13aWR0aD4oPyEwKVxkKyk/Ci0oP1A8dGhvdXNhbmRzX3NlcD4sKT8KLSg/OlwuKD9QPHByZWNpc2lvbj4wfCg/ITApXGQrKSk/Ci0oP1A8dHlwZT5bZUVmRmdHbiVdKT8KLVxaCi0iIiIsIHJlLlZFUkJPU0V8cmUuRE9UQUxMKQotCi1kZWwgcmUKLQotIyBUaGUgbG9jYWxlIG1vZHVsZSBpcyBvbmx5IG5lZWRlZCBmb3IgdGhlICduJyBmb3JtYXQgc3BlY2lmaWVyLiAgVGhlCi0jIHJlc3Qgb2YgdGhlIFBFUCAzMTAxIGNvZGUgZnVuY3Rpb25zIHF1aXRlIGhhcHBpbHkgd2l0aG91dCBpdCwgc28gd2UKLSMgZG9uJ3QgY2FyZSB0b28gbXVjaCBpZiBsb2NhbGUgaXNuJ3QgcHJlc2VudC4KLXRyeToKLSAgICBpbXBvcnQgbG9jYWxlIGFzIF9sb2NhbGUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi0KLWRlZiBfcGFyc2VfZm9ybWF0X3NwZWNpZmllcihmb3JtYXRfc3BlYywgX2xvY2FsZWNvbnY9Tm9uZSk6Ci0gICAgIiIiUGFyc2UgYW5kIHZhbGlkYXRlIGEgZm9ybWF0IHNwZWNpZmllci4KLQotICAgIFR1cm5zIGEgc3RhbmRhcmQgbnVtZXJpYyBmb3JtYXQgc3BlY2lmaWVyIGludG8gYSBkaWN0LCB3aXRoIHRoZQotICAgIGZvbGxvd2luZyBlbnRyaWVzOgotCi0gICAgICBmaWxsOiBmaWxsIGNoYXJhY3RlciB0byBwYWQgZmllbGQgdG8gbWluaW11bSB3aWR0aAotICAgICAgYWxpZ246IGFsaWdubWVudCB0eXBlLCBlaXRoZXIgJzwnLCAnPicsICc9JyBvciAnXicKLSAgICAgIHNpZ246IGVpdGhlciAnKycsICctJyBvciAnICcKLSAgICAgIG1pbmltdW13aWR0aDogbm9ubmVnYXRpdmUgaW50ZWdlciBnaXZpbmcgbWluaW11bSB3aWR0aAotICAgICAgemVyb3BhZDogYm9vbGVhbiwgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHBhZCB3aXRoIHplcm9zCi0gICAgICB0aG91c2FuZHNfc2VwOiBzdHJpbmcgdG8gdXNlIGFzIHRob3VzYW5kcyBzZXBhcmF0b3IsIG9yICcnCi0gICAgICBncm91cGluZzogZ3JvdXBpbmcgZm9yIHRob3VzYW5kcyBzZXBhcmF0b3JzLCBpbiBmb3JtYXQKLSAgICAgICAgdXNlZCBieSBsb2NhbGVjb252Ci0gICAgICBkZWNpbWFsX3BvaW50OiBzdHJpbmcgdG8gdXNlIGZvciBkZWNpbWFsIHBvaW50Ci0gICAgICBwcmVjaXNpb246IG5vbm5lZ2F0aXZlIGludGVnZXIgZ2l2aW5nIHByZWNpc2lvbiwgb3IgTm9uZQotICAgICAgdHlwZTogb25lIG9mIHRoZSBjaGFyYWN0ZXJzICdlRWZGZ0clJywgb3IgTm9uZQotCi0gICAgIiIiCi0gICAgbSA9IF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyX3JlZ2V4Lm1hdGNoKGZvcm1hdF9zcGVjKQotICAgIGlmIG0gaXMgTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBmb3JtYXQgc3BlY2lmaWVyOiAiICsgZm9ybWF0X3NwZWMpCi0KLSAgICAjIGdldCB0aGUgZGljdGlvbmFyeQotICAgIGZvcm1hdF9kaWN0ID0gbS5ncm91cGRpY3QoKQotCi0gICAgIyB6ZXJvcGFkOyBkZWZhdWx0cyBmb3IgZmlsbCBhbmQgYWxpZ25tZW50LiAgSWYgemVybyBwYWRkaW5nCi0gICAgIyBpcyByZXF1ZXN0ZWQsIHRoZSBmaWxsIGFuZCBhbGlnbiBmaWVsZHMgc2hvdWxkIGJlIGFic2VudC4KLSAgICBmaWxsID0gZm9ybWF0X2RpY3RbJ2ZpbGwnXQotICAgIGFsaWduID0gZm9ybWF0X2RpY3RbJ2FsaWduJ10KLSAgICBmb3JtYXRfZGljdFsnemVyb3BhZCddID0gKGZvcm1hdF9kaWN0Wyd6ZXJvcGFkJ10gaXMgbm90IE5vbmUpCi0gICAgaWYgZm9ybWF0X2RpY3RbJ3plcm9wYWQnXToKLSAgICAgICAgaWYgZmlsbCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZpbGwgY2hhcmFjdGVyIGNvbmZsaWN0cyB3aXRoICcwJyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbiBmb3JtYXQgc3BlY2lmaWVyOiAiICsgZm9ybWF0X3NwZWMpCi0gICAgICAgIGlmIGFsaWduIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQWxpZ25tZW50IGNvbmZsaWN0cyB3aXRoICcwJyBpbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgc3BlY2lmaWVyOiAiICsgZm9ybWF0X3NwZWMpCi0gICAgZm9ybWF0X2RpY3RbJ2ZpbGwnXSA9IGZpbGwgb3IgJyAnCi0gICAgIyBQRVAgMzEwMSBvcmlnaW5hbGx5IHNwZWNpZmllZCB0aGF0IHRoZSBkZWZhdWx0IGFsaWdubWVudCBzaG91bGQKLSAgICAjIGJlIGxlZnQ7ICBpdCB3YXMgbGF0ZXIgYWdyZWVkIHRoYXQgcmlnaHQtYWxpZ25lZCBtYWtlcyBtb3JlIHNlbnNlCi0gICAgIyBmb3IgbnVtZXJpYyB0eXBlcy4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjg1Ny4KLSAgICBmb3JtYXRfZGljdFsnYWxpZ24nXSA9IGFsaWduIG9yICc+JwotCi0gICAgIyBkZWZhdWx0IHNpZ24gaGFuZGxpbmc6ICctJyBmb3IgbmVnYXRpdmUsICcnIGZvciBwb3NpdGl2ZQotICAgIGlmIGZvcm1hdF9kaWN0WydzaWduJ10gaXMgTm9uZToKLSAgICAgICAgZm9ybWF0X2RpY3RbJ3NpZ24nXSA9ICctJwotCi0gICAgIyBtaW5pbXVtd2lkdGggZGVmYXVsdHMgdG8gMDsgcHJlY2lzaW9uIHJlbWFpbnMgTm9uZSBpZiBub3QgZ2l2ZW4KLSAgICBmb3JtYXRfZGljdFsnbWluaW11bXdpZHRoJ10gPSBpbnQoZm9ybWF0X2RpY3RbJ21pbmltdW13aWR0aCddIG9yICcwJykKLSAgICBpZiBmb3JtYXRfZGljdFsncHJlY2lzaW9uJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgIGZvcm1hdF9kaWN0WydwcmVjaXNpb24nXSA9IGludChmb3JtYXRfZGljdFsncHJlY2lzaW9uJ10pCi0KLSAgICAjIGlmIGZvcm1hdCB0eXBlIGlzICdnJyBvciAnRycgdGhlbiBhIHByZWNpc2lvbiBvZiAwIG1ha2VzIGxpdHRsZQotICAgICMgc2Vuc2U7IGNvbnZlcnQgaXQgdG8gMS4gIFNhbWUgaWYgZm9ybWF0IHR5cGUgaXMgdW5zcGVjaWZpZWQuCi0gICAgaWYgZm9ybWF0X2RpY3RbJ3ByZWNpc2lvbiddID09IDA6Ci0gICAgICAgIGlmIGZvcm1hdF9kaWN0Wyd0eXBlJ10gaXMgTm9uZSBvciBmb3JtYXRfZGljdFsndHlwZSddIGluICdnR24nOgotICAgICAgICAgICAgZm9ybWF0X2RpY3RbJ3ByZWNpc2lvbiddID0gMQotCi0gICAgIyBkZXRlcm1pbmUgdGhvdXNhbmRzIHNlcGFyYXRvciwgZ3JvdXBpbmcsIGFuZCBkZWNpbWFsIHNlcGFyYXRvciwgYW5kCi0gICAgIyBhZGQgYXBwcm9wcmlhdGUgZW50cmllcyB0byBmb3JtYXRfZGljdAotICAgIGlmIGZvcm1hdF9kaWN0Wyd0eXBlJ10gPT0gJ24nOgotICAgICAgICAjIGFwYXJ0IGZyb20gc2VwYXJhdG9ycywgJ24nIGJlaGF2ZXMganVzdCBsaWtlICdnJwotICAgICAgICBmb3JtYXRfZGljdFsndHlwZSddID0gJ2cnCi0gICAgICAgIGlmIF9sb2NhbGVjb252IGlzIE5vbmU6Ci0gICAgICAgICAgICBfbG9jYWxlY29udiA9IF9sb2NhbGUubG9jYWxlY29udigpCi0gICAgICAgIGlmIGZvcm1hdF9kaWN0Wyd0aG91c2FuZHNfc2VwJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBsaWNpdCB0aG91c2FuZHMgc2VwYXJhdG9yIGNvbmZsaWN0cyB3aXRoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiduJyB0eXBlIGluIGZvcm1hdCBzcGVjaWZpZXI6ICIgKyBmb3JtYXRfc3BlYykKLSAgICAgICAgZm9ybWF0X2RpY3RbJ3Rob3VzYW5kc19zZXAnXSA9IF9sb2NhbGVjb252Wyd0aG91c2FuZHNfc2VwJ10KLSAgICAgICAgZm9ybWF0X2RpY3RbJ2dyb3VwaW5nJ10gPSBfbG9jYWxlY29udlsnZ3JvdXBpbmcnXQotICAgICAgICBmb3JtYXRfZGljdFsnZGVjaW1hbF9wb2ludCddID0gX2xvY2FsZWNvbnZbJ2RlY2ltYWxfcG9pbnQnXQotICAgIGVsc2U6Ci0gICAgICAgIGlmIGZvcm1hdF9kaWN0Wyd0aG91c2FuZHNfc2VwJ10gaXMgTm9uZToKLSAgICAgICAgICAgIGZvcm1hdF9kaWN0Wyd0aG91c2FuZHNfc2VwJ10gPSAnJwotICAgICAgICBmb3JtYXRfZGljdFsnZ3JvdXBpbmcnXSA9IFszLCAwXQotICAgICAgICBmb3JtYXRfZGljdFsnZGVjaW1hbF9wb2ludCddID0gJy4nCi0KLSAgICByZXR1cm4gZm9ybWF0X2RpY3QKLQotZGVmIF9mb3JtYXRfYWxpZ24oc2lnbiwgYm9keSwgc3BlYyk6Ci0gICAgIiIiR2l2ZW4gYW4gdW5wYWRkZWQsIG5vbi1hbGlnbmVkIG51bWVyaWMgc3RyaW5nICdib2R5JyBhbmQgc2lnbgotICAgIHN0cmluZyAnc2lnbicsIGFkZCBwYWRkaW5nIGFuZCBhbGlnbm1lbnQgY29uZm9ybWluZyB0byB0aGUgZ2l2ZW4KLSAgICBmb3JtYXQgc3BlY2lmaWVyIGRpY3Rpb25hcnkgJ3NwZWMnIChhcyBwcm9kdWNlZCBieQotICAgIHBhcnNlX2Zvcm1hdF9zcGVjaWZpZXIpLgotCi0gICAgIiIiCi0gICAgIyBob3cgbXVjaCBleHRyYSBzcGFjZSBkbyB3ZSBoYXZlIHRvIHBsYXkgd2l0aD8KLSAgICBtaW5pbXVtd2lkdGggPSBzcGVjWydtaW5pbXVtd2lkdGgnXQotICAgIGZpbGwgPSBzcGVjWydmaWxsJ10KLSAgICBwYWRkaW5nID0gZmlsbCoobWluaW11bXdpZHRoIC0gbGVuKHNpZ24pIC0gbGVuKGJvZHkpKQotCi0gICAgYWxpZ24gPSBzcGVjWydhbGlnbiddCi0gICAgaWYgYWxpZ24gPT0gJzwnOgotICAgICAgICByZXN1bHQgPSBzaWduICsgYm9keSArIHBhZGRpbmcKLSAgICBlbGlmIGFsaWduID09ICc+JzoKLSAgICAgICAgcmVzdWx0ID0gcGFkZGluZyArIHNpZ24gKyBib2R5Ci0gICAgZWxpZiBhbGlnbiA9PSAnPSc6Ci0gICAgICAgIHJlc3VsdCA9IHNpZ24gKyBwYWRkaW5nICsgYm9keQotICAgIGVsaWYgYWxpZ24gPT0gJ14nOgotICAgICAgICBoYWxmID0gbGVuKHBhZGRpbmcpLy8yCi0gICAgICAgIHJlc3VsdCA9IHBhZGRpbmdbOmhhbGZdICsgc2lnbiArIGJvZHkgKyBwYWRkaW5nW2hhbGY6XQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VucmVjb2duaXNlZCBhbGlnbm1lbnQgZmllbGQnKQotCi0gICAgcmV0dXJuIHJlc3VsdAotCi1kZWYgX2dyb3VwX2xlbmd0aHMoZ3JvdXBpbmcpOgotICAgICIiIkNvbnZlcnQgYSBsb2NhbGVjb252LXN0eWxlIGdyb3VwaW5nIGludG8gYSAocG9zc2libHkgaW5maW5pdGUpCi0gICAgaXRlcmFibGUgb2YgaW50ZWdlcnMgcmVwcmVzZW50aW5nIGdyb3VwIGxlbmd0aHMuCi0KLSAgICAiIiIKLSAgICAjIFRoZSByZXN1bHQgZnJvbSBsb2NhbGVjb252KClbJ2dyb3VwaW5nJ10sIGFuZCB0aGUgaW5wdXQgdG8gdGhpcwotICAgICMgZnVuY3Rpb24sIHNob3VsZCBiZSBhIGxpc3Qgb2YgaW50ZWdlcnMgaW4gb25lIG9mIHRoZQotICAgICMgZm9sbG93aW5nIHRocmVlIGZvcm1zOgotICAgICMKLSAgICAjICAgKDEpIGFuIGVtcHR5IGxpc3QsIG9yCi0gICAgIyAgICgyKSBub25lbXB0eSBsaXN0IG9mIHBvc2l0aXZlIGludGVnZXJzICsgWzBdCi0gICAgIyAgICgzKSBsaXN0IG9mIHBvc2l0aXZlIGludGVnZXJzICsgW2xvY2FsZS5DSEFSX01BWF0sIG9yCi0KLSAgICBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIHJlcGVhdAotICAgIGlmIG5vdCBncm91cGluZzoKLSAgICAgICAgcmV0dXJuIFtdCi0gICAgZWxpZiBncm91cGluZ1stMV0gPT0gMCBhbmQgbGVuKGdyb3VwaW5nKSA+PSAyOgotICAgICAgICByZXR1cm4gY2hhaW4oZ3JvdXBpbmdbOi0xXSwgcmVwZWF0KGdyb3VwaW5nWy0yXSkpCi0gICAgZWxpZiBncm91cGluZ1stMV0gPT0gX2xvY2FsZS5DSEFSX01BWDoKLSAgICAgICAgcmV0dXJuIGdyb3VwaW5nWzotMV0KLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnJlY29nbmlzZWQgZm9ybWF0IGZvciBncm91cGluZycpCi0KLWRlZiBfaW5zZXJ0X3Rob3VzYW5kc19zZXAoZGlnaXRzLCBzcGVjLCBtaW5fd2lkdGg9MSk6Ci0gICAgIiIiSW5zZXJ0IHRob3VzYW5kcyBzZXBhcmF0b3JzIGludG8gYSBkaWdpdCBzdHJpbmcuCi0KLSAgICBzcGVjIGlzIGEgZGljdGlvbmFyeSB3aG9zZSBrZXlzIHNob3VsZCBpbmNsdWRlICd0aG91c2FuZHNfc2VwJyBhbmQKLSAgICAnZ3JvdXBpbmcnOyB0eXBpY2FsbHkgaXQncyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGZvcm1hdAotICAgIHNwZWNpZmllciB1c2luZyBfcGFyc2VfZm9ybWF0X3NwZWNpZmllci4KLQotICAgIFRoZSBtaW5fd2lkdGgga2V5d29yZCBhcmd1bWVudCBnaXZlcyB0aGUgbWluaW11bSBsZW5ndGggb2YgdGhlCi0gICAgcmVzdWx0LCB3aGljaCB3aWxsIGJlIHBhZGRlZCBvbiB0aGUgbGVmdCB3aXRoIHplcm9zIGlmIG5lY2Vzc2FyeS4KLQotICAgIElmIG5lY2Vzc2FyeSwgdGhlIHplcm8gcGFkZGluZyBhZGRzIGFuIGV4dHJhICcwJyBvbiB0aGUgbGVmdCB0bwotICAgIGF2b2lkIGEgbGVhZGluZyB0aG91c2FuZHMgc2VwYXJhdG9yLiAgRm9yIGV4YW1wbGUsIGluc2VydGluZwotICAgIGNvbW1hcyBldmVyeSB0aHJlZSBkaWdpdHMgaW4gJzEyMzQ1NicsIHdpdGggbWluX3dpZHRoPTgsIGdpdmVzCi0gICAgJzAsMTIzLDQ1NicsIGV2ZW4gdGhvdWdoIHRoYXQgaGFzIGxlbmd0aCA5LgotCi0gICAgIiIiCi0KLSAgICBzZXAgPSBzcGVjWyd0aG91c2FuZHNfc2VwJ10KLSAgICBncm91cGluZyA9IHNwZWNbJ2dyb3VwaW5nJ10KLQotICAgIGdyb3VwcyA9IFtdCi0gICAgZm9yIGwgaW4gX2dyb3VwX2xlbmd0aHMoZ3JvdXBpbmcpOgotICAgICAgICBpZiBsIDw9IDA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJncm91cCBsZW5ndGggc2hvdWxkIGJlIHBvc2l0aXZlIikKLSAgICAgICAgIyBtYXgoLi4uLCAxKSBmb3JjZXMgYXQgbGVhc3QgMSBkaWdpdCB0byB0aGUgbGVmdCBvZiBhIHNlcGFyYXRvcgotICAgICAgICBsID0gbWluKG1heChsZW4oZGlnaXRzKSwgbWluX3dpZHRoLCAxKSwgbCkKLSAgICAgICAgZ3JvdXBzLmFwcGVuZCgnMCcqKGwgLSBsZW4oZGlnaXRzKSkgKyBkaWdpdHNbLWw6XSkKLSAgICAgICAgZGlnaXRzID0gZGlnaXRzWzotbF0KLSAgICAgICAgbWluX3dpZHRoIC09IGwKLSAgICAgICAgaWYgbm90IGRpZ2l0cyBhbmQgbWluX3dpZHRoIDw9IDA6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBtaW5fd2lkdGggLT0gbGVuKHNlcCkKLSAgICBlbHNlOgotICAgICAgICBsID0gbWF4KGxlbihkaWdpdHMpLCBtaW5fd2lkdGgsIDEpCi0gICAgICAgIGdyb3Vwcy5hcHBlbmQoJzAnKihsIC0gbGVuKGRpZ2l0cykpICsgZGlnaXRzWy1sOl0pCi0gICAgcmV0dXJuIHNlcC5qb2luKHJldmVyc2VkKGdyb3VwcykpCi0KLWRlZiBfZm9ybWF0X3NpZ24oaXNfbmVnYXRpdmUsIHNwZWMpOgotICAgICIiIkRldGVybWluZSBzaWduIGNoYXJhY3Rlci4iIiIKLQotICAgIGlmIGlzX25lZ2F0aXZlOgotICAgICAgICByZXR1cm4gJy0nCi0gICAgZWxpZiBzcGVjWydzaWduJ10gaW4gJyArJzoKLSAgICAgICAgcmV0dXJuIHNwZWNbJ3NpZ24nXQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnJwotCi1kZWYgX2Zvcm1hdF9udW1iZXIoaXNfbmVnYXRpdmUsIGludHBhcnQsIGZyYWNwYXJ0LCBleHAsIHNwZWMpOgotICAgICIiIkZvcm1hdCBhIG51bWJlciwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBkYXRhOgotCi0gICAgaXNfbmVnYXRpdmU6IHRydWUgaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSwgZWxzZSBmYWxzZQotICAgIGludHBhcnQ6IHN0cmluZyBvZiBkaWdpdHMgdGhhdCBtdXN0IGFwcGVhciBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQKLSAgICBmcmFjcGFydDogc3RyaW5nIG9mIGRpZ2l0cyB0aGF0IG11c3QgY29tZSBhZnRlciB0aGUgcG9pbnQKLSAgICBleHA6IGV4cG9uZW50LCBhcyBhbiBpbnRlZ2VyCi0gICAgc3BlYzogZGljdGlvbmFyeSByZXN1bHRpbmcgZnJvbSBwYXJzaW5nIHRoZSBmb3JtYXQgc3BlY2lmaWVyCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGluZm9ybWF0aW9uIGluIHNwZWMgdG86Ci0gICAgICBpbnNlcnQgc2VwYXJhdG9ycyAoZGVjaW1hbCBzZXBhcmF0b3IgYW5kIHRob3VzYW5kcyBzZXBhcmF0b3JzKQotICAgICAgZm9ybWF0IHRoZSBzaWduCi0gICAgICBmb3JtYXQgdGhlIGV4cG9uZW50Ci0gICAgICBhZGQgdHJhaWxpbmcgJyUnIGZvciB0aGUgJyUnIHR5cGUKLSAgICAgIHplcm8tcGFkIGlmIG5lY2Vzc2FyeQotICAgICAgZmlsbCBhbmQgYWxpZ24gaWYgbmVjZXNzYXJ5Ci0gICAgIiIiCi0KLSAgICBzaWduID0gX2Zvcm1hdF9zaWduKGlzX25lZ2F0aXZlLCBzcGVjKQotCi0gICAgaWYgZnJhY3BhcnQgb3Igc3BlY1snYWx0J106Ci0gICAgICAgIGZyYWNwYXJ0ID0gc3BlY1snZGVjaW1hbF9wb2ludCddICsgZnJhY3BhcnQKLQotICAgIGlmIGV4cCAhPSAwIG9yIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgotICAgICAgICBlY2hhciA9IHsnRSc6ICdFJywgJ2UnOiAnZScsICdHJzogJ0UnLCAnZyc6ICdlJ31bc3BlY1sndHlwZSddXQotICAgICAgICBmcmFjcGFydCArPSAiezB9ezE6K30iLmZvcm1hdChlY2hhciwgZXhwKQotICAgIGlmIHNwZWNbJ3R5cGUnXSA9PSAnJSc6Ci0gICAgICAgIGZyYWNwYXJ0ICs9ICclJwotCi0gICAgaWYgc3BlY1snemVyb3BhZCddOgotICAgICAgICBtaW5fd2lkdGggPSBzcGVjWydtaW5pbXVtd2lkdGgnXSAtIGxlbihmcmFjcGFydCkgLSBsZW4oc2lnbikKLSAgICBlbHNlOgotICAgICAgICBtaW5fd2lkdGggPSAwCi0gICAgaW50cGFydCA9IF9pbnNlcnRfdGhvdXNhbmRzX3NlcChpbnRwYXJ0LCBzcGVjLCBtaW5fd2lkdGgpCi0KLSAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzaWduLCBpbnRwYXJ0K2ZyYWNwYXJ0LCBzcGVjKQotCi0KLSMjIyMjIFVzZWZ1bCBDb25zdGFudHMgKGludGVybmFsIHVzZSBvbmx5KSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFJldXNhYmxlIGRlZmF1bHRzCi1fSW5maW5pdHkgPSBEZWNpbWFsKCdJbmYnKQotX05lZ2F0aXZlSW5maW5pdHkgPSBEZWNpbWFsKCctSW5mJykKLV9OYU4gPSBEZWNpbWFsKCdOYU4nKQotX1plcm8gPSBEZWNpbWFsKDApCi1fT25lID0gRGVjaW1hbCgxKQotX05lZ2F0aXZlT25lID0gRGVjaW1hbCgtMSkKLQotIyBfU2lnbmVkSW5maW5pdHlbc2lnbl0gaXMgaW5maW5pdHkgdy8gdGhhdCBzaWduCi1fU2lnbmVkSW5maW5pdHkgPSAoX0luZmluaXR5LCBfTmVnYXRpdmVJbmZpbml0eSkKLQotIyBDb25zdGFudHMgcmVsYXRlZCB0byB0aGUgaGFzaCBpbXBsZW1lbnRhdGlvbjsgIGhhc2goeCkgaXMgYmFzZWQKLSMgb24gdGhlIHJlZHVjdGlvbiBvZiB4IG1vZHVsbyBfUHlIQVNIX01PRFVMVVMKLV9QeUhBU0hfTU9EVUxVUyA9IHN5cy5oYXNoX2luZm8ubW9kdWx1cwotIyBoYXNoIHZhbHVlcyB0byB1c2UgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBpbmZpbml0aWVzLCBhbmQgbmFucwotX1B5SEFTSF9JTkYgPSBzeXMuaGFzaF9pbmZvLmluZgotX1B5SEFTSF9OQU4gPSBzeXMuaGFzaF9pbmZvLm5hbgotCi0jIF9QeUhBU0hfMTBJTlYgaXMgdGhlIGludmVyc2Ugb2YgMTAgbW9kdWxvIHRoZSBwcmltZSBfUHlIQVNIX01PRFVMVVMKLV9QeUhBU0hfMTBJTlYgPSBwb3coMTAsIF9QeUhBU0hfTU9EVUxVUyAtIDIsIF9QeUhBU0hfTU9EVUxVUykKLWRlbCBzeXMKLQotdHJ5OgotICAgIGltcG9ydCBfZGVjaW1hbAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgczEgPSBzZXQoZGlyKCkpCi0gICAgczIgPSBzZXQoZGlyKF9kZWNpbWFsKSkKLSAgICBmb3IgbmFtZSBpbiBzMSAtIHMyOgotICAgICAgICBkZWwgZ2xvYmFscygpW25hbWVdCi0gICAgZGVsIHMxLCBzMiwgbmFtZQogICAgIGZyb20gX2RlY2ltYWwgaW1wb3J0ICoKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgZG9jdGVzdCwgZGVjaW1hbAotICAgIGRvY3Rlc3QudGVzdG1vZChkZWNpbWFsKQorICAgIGZyb20gX2RlY2ltYWwgaW1wb3J0IF9fZG9jX18KKyAgICBmcm9tIF9kZWNpbWFsIGltcG9ydCBfX3ZlcnNpb25fXworICAgIGZyb20gX2RlY2ltYWwgaW1wb3J0IF9fbGlibXBkZWNfdmVyc2lvbl9fCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBfcHlkZWNpbWFsIGltcG9ydCAqCisgICAgZnJvbSBfcHlkZWNpbWFsIGltcG9ydCBfX2RvY19fCisgICAgZnJvbSBfcHlkZWNpbWFsIGltcG9ydCBfX3ZlcnNpb25fXworICAgIGZyb20gX3B5ZGVjaW1hbCBpbXBvcnQgX19saWJtcGRlY192ZXJzaW9uX18KZGlmZiAtLWdpdCBhL0xpYi9kaWZmbGliLnB5IGIvTGliL2RpZmZsaWIucHkKaW5kZXggNTZkNDg1Mi4uMDc2YmJhYyAxMDA2NDQKLS0tIGEvTGliL2RpZmZsaWIucHkKKysrIGIvTGliL2RpZmZsaWIucHkKQEAgLTI4LDkgKzI4LDkgQEAKIAogX19hbGxfXyA9IFsnZ2V0X2Nsb3NlX21hdGNoZXMnLCAnbmRpZmYnLCAncmVzdG9yZScsICdTZXF1ZW5jZU1hdGNoZXInLAogICAgICAgICAgICAnRGlmZmVyJywnSVNfQ0hBUkFDVEVSX0pVTksnLCAnSVNfTElORV9KVU5LJywgJ2NvbnRleHRfZGlmZicsCi0gICAgICAgICAgICd1bmlmaWVkX2RpZmYnLCAnSHRtbERpZmYnLCAnTWF0Y2gnXQorICAgICAgICAgICAndW5pZmllZF9kaWZmJywgJ2RpZmZfYnl0ZXMnLCAnSHRtbERpZmYnLCAnTWF0Y2gnXQogCi1pbXBvcnQgaGVhcHEKK2Zyb20gaGVhcHEgaW1wb3J0IG5sYXJnZXN0IGFzIF9ubGFyZ2VzdAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSBhcyBfbmFtZWR0dXBsZQogCiBNYXRjaCA9IF9uYW1lZHR1cGxlKCdNYXRjaCcsICdhIGIgc2l6ZScpCkBAIC03MjksNyArNzI5LDcgQEAKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKHMucmF0aW8oKSwgeCkpCiAKICAgICAjIE1vdmUgdGhlIGJlc3Qgc2NvcmVycyB0byBoZWFkIG9mIGxpc3QKLSAgICByZXN1bHQgPSBoZWFwcS5ubGFyZ2VzdChuLCByZXN1bHQpCisgICAgcmVzdWx0ID0gX25sYXJnZXN0KG4sIHJlc3VsdCkKICAgICAjIFN0cmlwIHNjb3JlcyBmb3IgdGhlIGJlc3QgbiBtYXRjaGVzCiAgICAgcmV0dXJuIFt4IGZvciBzY29yZSwgeCBpbiByZXN1bHRdCiAKQEAgLTg1MiwxMCArODUyLDkgQEAKICAgICAgICAgICBhbmQgcmV0dXJuIHRydWUgaWZmIHRoZSBzdHJpbmcgaXMganVuay4gVGhlIG1vZHVsZS1sZXZlbCBmdW5jdGlvbgogICAgICAgICAgIGBJU19MSU5FX0pVTktgIG1heSBiZSB1c2VkIHRvIGZpbHRlciBvdXQgbGluZXMgd2l0aG91dCB2aXNpYmxlCiAgICAgICAgICAgY2hhcmFjdGVycywgZXhjZXB0IGZvciBhdCBtb3N0IG9uZSBzcGxhdCAoJyMnKS4gIEl0IGlzIHJlY29tbWVuZGVkCi0gICAgICAgICAgdG8gbGVhdmUgbGluZWp1bmsgTm9uZTsgYXMgb2YgUHl0aG9uIDIuMywgdGhlIHVuZGVybHlpbmcKLSAgICAgICAgICBTZXF1ZW5jZU1hdGNoZXIgY2xhc3MgaGFzIGdyb3duIGFuIGFkYXB0aXZlIG5vdGlvbiBvZiAibm9pc2UiIGxpbmVzCi0gICAgICAgICAgdGhhdCdzIGJldHRlciB0aGFuIGFueSBzdGF0aWMgZGVmaW5pdGlvbiB0aGUgYXV0aG9yIGhhcyBldmVyIGJlZW4KLSAgICAgICAgICBhYmxlIHRvIGNyYWZ0LgorICAgICAgICAgIHRvIGxlYXZlIGxpbmVqdW5rIE5vbmU7IHRoZSB1bmRlcmx5aW5nIFNlcXVlbmNlTWF0Y2hlciBjbGFzcyBoYXMKKyAgICAgICAgICBhbiBhZGFwdGl2ZSBub3Rpb24gb2YgIm5vaXNlIiBsaW5lcyB0aGF0J3MgYmV0dGVyIHRoYW4gYW55IHN0YXRpYworICAgICAgICAgIGRlZmluaXRpb24gdGhlIGF1dGhvciBoYXMgZXZlciBiZWVuIGFibGUgdG8gY3JhZnQuCiAKICAgICAgICAgLSBgY2hhcmp1bmtgOiBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGFjY2VwdCBhIHN0cmluZyBvZiBsZW5ndGggMS4gVGhlCiAgICAgICAgICAgbW9kdWxlLWxldmVsIGZ1bmN0aW9uIGBJU19DSEFSQUNURVJfSlVOS2AgbWF5IGJlIHVzZWQgdG8gZmlsdGVyIG91dApAQCAtMTE3NSw2ICsxMTc0LDcgQEAKICAgICAgZm91cgogICAgICIiIgogCisgICAgX2NoZWNrX3R5cGVzKGEsIGIsIGZyb21maWxlLCB0b2ZpbGUsIGZyb21maWxlZGF0ZSwgdG9maWxlZGF0ZSwgbGluZXRlcm0pCiAgICAgc3RhcnRlZCA9IEZhbHNlCiAgICAgZm9yIGdyb3VwIGluIFNlcXVlbmNlTWF0Y2hlcihOb25lLGEsYikuZ2V0X2dyb3VwZWRfb3Bjb2RlcyhuKToKICAgICAgICAgaWYgbm90IHN0YXJ0ZWQ6CkBAIC0xMjYyLDYgKzEyNjIsNyBAQAogICAgICAgZm91cgogICAgICIiIgogCisgICAgX2NoZWNrX3R5cGVzKGEsIGIsIGZyb21maWxlLCB0b2ZpbGUsIGZyb21maWxlZGF0ZSwgdG9maWxlZGF0ZSwgbGluZXRlcm0pCiAgICAgcHJlZml4ID0gZGljdChpbnNlcnQ9JysgJywgZGVsZXRlPSctICcsIHJlcGxhY2U9JyEgJywgZXF1YWw9JyAgJykKICAgICBzdGFydGVkID0gRmFsc2UKICAgICBmb3IgZ3JvdXAgaW4gU2VxdWVuY2VNYXRjaGVyKE5vbmUsYSxiKS5nZXRfZ3JvdXBlZF9vcGNvZGVzKG4pOgpAQCAtMTI5MywyMiArMTI5NCw3MCBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBiW2oxOmoyXToKICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHByZWZpeFt0YWddICsgbGluZQogCitkZWYgX2NoZWNrX3R5cGVzKGEsIGIsICphcmdzKToKKyAgICAjIENoZWNraW5nIHR5cGVzIGlzIHdlaXJkLCBidXQgdGhlIGFsdGVybmF0aXZlIGlzIGdhcmJsZWQgb3V0cHV0IHdoZW4KKyAgICAjIHNvbWVvbmUgcGFzc2VzIG1peGVkIGJ5dGVzIGFuZCBzdHIgdG8ge3VuaWZpZWQsY29udGV4dH1fZGlmZigpLiBFLmcuCisgICAgIyB3aXRob3V0IHRoaXMgY2hlY2ssIHBhc3NpbmcgZmlsZW5hbWVzIGFzIGJ5dGVzIHJlc3VsdHMgaW4gb3V0cHV0IGxpa2UKKyAgICAjICAgLS0tIGInb2xkZmlsZS50eHQnCisgICAgIyAgICsrKyBiJ25ld2ZpbGUudHh0JworICAgICMgYmVjYXVzZSBvZiBob3cgc3RyLmZvcm1hdCgpIGluY29ycG9yYXRlcyBieXRlcyBvYmplY3RzLgorICAgIGlmIGEgYW5kIG5vdCBpc2luc3RhbmNlKGFbMF0sIHN0cik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbGluZXMgdG8gY29tcGFyZSBtdXN0IGJlIHN0ciwgbm90ICVzICglciknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKGFbMF0pLl9fbmFtZV9fLCBhWzBdKSkKKyAgICBpZiBiIGFuZCBub3QgaXNpbnN0YW5jZShiWzBdLCBzdHIpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2xpbmVzIHRvIGNvbXBhcmUgbXVzdCBiZSBzdHIsIG5vdCAlcyAoJXIpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShiWzBdKS5fX25hbWVfXywgYlswXSkpCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmcsIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2FsbCBhcmd1bWVudHMgbXVzdCBiZSBzdHIsIG5vdDogJXInICUgKGFyZywpKQorCitkZWYgZGlmZl9ieXRlcyhkZnVuYywgYSwgYiwgZnJvbWZpbGU9YicnLCB0b2ZpbGU9YicnLAorICAgICAgICAgICAgICAgZnJvbWZpbGVkYXRlPWInJywgdG9maWxlZGF0ZT1iJycsIG49MywgbGluZXRlcm09YidcbicpOgorICAgIHIiIiIKKyAgICBDb21wYXJlIGBhYCBhbmQgYGJgLCB0d28gc2VxdWVuY2VzIG9mIGxpbmVzIHJlcHJlc2VudGVkIGFzIGJ5dGVzIHJhdGhlcgorICAgIHRoYW4gc3RyLiBUaGlzIGlzIGEgd3JhcHBlciBmb3IgYGRmdW5jYCwgd2hpY2ggaXMgdHlwaWNhbGx5IGVpdGhlcgorICAgIHVuaWZpZWRfZGlmZigpIG9yIGNvbnRleHRfZGlmZigpLiBJbnB1dHMgYXJlIGxvc3NsZXNzbHkgY29udmVydGVkIHRvCisgICAgc3RyaW5ncyBzbyB0aGF0IGBkZnVuY2Agb25seSBoYXMgdG8gd29ycnkgYWJvdXQgc3RyaW5ncywgYW5kIGVuY29kZWQKKyAgICBiYWNrIHRvIGJ5dGVzIG9uIHJldHVybi4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gY29tcGFyZSBmaWxlcyB3aXRoCisgICAgdW5rbm93biBvciBpbmNvbnNpc3RlbnQgZW5jb2RpbmcuIEFsbCBvdGhlciBpbnB1dHMgKGV4Y2VwdCBgbmApIG11c3QgYmUKKyAgICBieXRlcyByYXRoZXIgdGhhbiBzdHIuCisgICAgIiIiCisgICAgZGVmIGRlY29kZShzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgbXNnID0gKCdhbGwgYXJndW1lbnRzIG11c3QgYmUgYnl0ZXMsIG5vdCAlcyAoJXIpJyAlCisgICAgICAgICAgICAgICAgICAgKHR5cGUocykuX19uYW1lX18sIHMpKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykgZnJvbSBlcnIKKyAgICBhID0gbGlzdChtYXAoZGVjb2RlLCBhKSkKKyAgICBiID0gbGlzdChtYXAoZGVjb2RlLCBiKSkKKyAgICBmcm9tZmlsZSA9IGRlY29kZShmcm9tZmlsZSkKKyAgICB0b2ZpbGUgPSBkZWNvZGUodG9maWxlKQorICAgIGZyb21maWxlZGF0ZSA9IGRlY29kZShmcm9tZmlsZWRhdGUpCisgICAgdG9maWxlZGF0ZSA9IGRlY29kZSh0b2ZpbGVkYXRlKQorICAgIGxpbmV0ZXJtID0gZGVjb2RlKGxpbmV0ZXJtKQorCisgICAgbGluZXMgPSBkZnVuYyhhLCBiLCBmcm9tZmlsZSwgdG9maWxlLCBmcm9tZmlsZWRhdGUsIHRvZmlsZWRhdGUsIG4sIGxpbmV0ZXJtKQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICB5aWVsZCBsaW5lLmVuY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKwogZGVmIG5kaWZmKGEsIGIsIGxpbmVqdW5rPU5vbmUsIGNoYXJqdW5rPUlTX0NIQVJBQ1RFUl9KVU5LKToKICAgICByIiIiCiAgICAgQ29tcGFyZSBgYWAgYW5kIGBiYCAobGlzdHMgb2Ygc3RyaW5ncyk7IHJldHVybiBhIGBEaWZmZXJgLXN0eWxlIGRlbHRhLgogCiAgICAgT3B0aW9uYWwga2V5d29yZCBwYXJhbWV0ZXJzIGBsaW5lanVua2AgYW5kIGBjaGFyanVua2AgYXJlIGZvciBmaWx0ZXIKLSAgICBmdW5jdGlvbnMgKG9yIE5vbmUpOgorICAgIGZ1bmN0aW9ucywgb3IgY2FuIGJlIE5vbmU6CiAKLSAgICAtIGxpbmVqdW5rOiBBIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGFjY2VwdCBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQsIGFuZAorICAgIC0gbGluZWp1bms6IEEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYWNjZXB0IGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCBhbmQKICAgICAgIHJldHVybiB0cnVlIGlmZiB0aGUgc3RyaW5nIGlzIGp1bmsuICBUaGUgZGVmYXVsdCBpcyBOb25lLCBhbmQgaXMKLSAgICAgIHJlY29tbWVuZGVkOyBhcyBvZiBQeXRob24gMi4zLCBhbiBhZGFwdGl2ZSBub3Rpb24gb2YgIm5vaXNlIiBsaW5lcyBpcwotICAgICAgdXNlZCB0aGF0IGRvZXMgYSBnb29kIGpvYiBvbiBpdHMgb3duLgorICAgICAgcmVjb21tZW5kZWQ7IHRoZSB1bmRlcmx5aW5nIFNlcXVlbmNlTWF0Y2hlciBjbGFzcyBoYXMgYW4gYWRhcHRpdmUKKyAgICAgIG5vdGlvbiBvZiAibm9pc2UiIGxpbmVzLgogCi0gICAgLSBjaGFyanVuazogQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBhY2NlcHQgYSBzdHJpbmcgb2YgbGVuZ3RoIDEuIFRoZQotICAgICAgZGVmYXVsdCBpcyBtb2R1bGUtbGV2ZWwgZnVuY3Rpb24gSVNfQ0hBUkFDVEVSX0pVTkssIHdoaWNoIGZpbHRlcnMgb3V0Ci0gICAgICB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKGEgYmxhbmsgb3IgdGFiOyBub3RlOiBiYWQgaWRlYSB0byBpbmNsdWRlIG5ld2xpbmUKLSAgICAgIGluIHRoaXMhKS4KKyAgICAtIGNoYXJqdW5rOiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIGNoYXJhY3RlciAoc3RyaW5nIG9mIGxlbmd0aAorICAgICAgMSksIGFuZCByZXR1cm5zIHRydWUgaWZmIHRoZSBjaGFyYWN0ZXIgaXMganVuay4gVGhlIGRlZmF1bHQgaXMKKyAgICAgIHRoZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb24gSVNfQ0hBUkFDVEVSX0pVTkssIHdoaWNoIGZpbHRlcnMgb3V0CisgICAgICB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKGEgYmxhbmsgb3IgdGFiOyBub3RlOiBpdCdzIGEgYmFkIGlkZWEgdG8KKyAgICAgIGluY2x1ZGUgbmV3bGluZSBpbiB0aGlzISkuCiAKICAgICBUb29scy9zY3JpcHRzL25kaWZmLnB5IGlzIGEgY29tbWFuZC1saW5lIGZyb250LWVuZCB0byB0aGlzIGZ1bmN0aW9uLgogCkBAIC0xNDEwLDcgKzE0NTksNyBAQAogICAgICAgICAgICAgY2hhbmdlX3JlLnN1YihyZWNvcmRfc3ViX2luZm8sbWFya2VycykKICAgICAgICAgICAgICMgcHJvY2VzcyBlYWNoIHR1cGxlIGluc2VydGluZyBvdXIgc3BlY2lhbCBtYXJrcyB0aGF0IHdvbid0IGJlCiAgICAgICAgICAgICAjIG5vdGljZWQgYnkgYW4geG1sL2h0bWwgZXNjYXBlci4KLSAgICAgICAgICAgIGZvciBrZXksKGJlZ2luLGVuZCkgaW4gc3ViX2luZm9bOjotMV06CisgICAgICAgICAgICBmb3Iga2V5LChiZWdpbixlbmQpIGluIHJldmVyc2VkKHN1Yl9pbmZvKToKICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dFswOmJlZ2luXSsnXDAnK2tleSt0ZXh0W2JlZ2luOmVuZF0rJ1wxJyt0ZXh0W2VuZDpdCiAgICAgICAgICAgICB0ZXh0ID0gdGV4dFsyOl0KICAgICAgICAgIyBIYW5kbGUgY2FzZSBvZiBhZGQvZGVsZXRlIGVudGlyZSBsaW5lCkBAIC0xNDQ4LDEwICsxNDk3LDcgQEAKICAgICAgICAgICAgICMgYXJlIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGVhY2ggb2YgdGhlIDQgbGluZXMKICAgICAgICAgICAgICMgc28gd2UgY2FuIGRvIHNvbWUgdmVyeSByZWFkYWJsZSBjb21wYXJpc29ucy4KICAgICAgICAgICAgIHdoaWxlIGxlbihsaW5lcykgPCA0OgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKG5leHQoZGlmZl9saW5lc19pdGVyYXRvcikpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnWCcpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKG5leHQoZGlmZl9saW5lc19pdGVyYXRvciwgJ1gnKSkKICAgICAgICAgICAgIHMgPSAnJy5qb2luKFtsaW5lWzBdIGZvciBsaW5lIGluIGxpbmVzXSkKICAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgnWCcpOgogICAgICAgICAgICAgICAgICMgV2hlbiBubyBtb3JlIGxpbmVzLCBwdW1wIG91dCBhbnkgcmVtYWluaW5nIGJsYW5rIGxpbmVzIHNvIHRoZQpAQCAtMTUxNCw3ICsxNTYwLDcgQEAKICAgICAgICAgICAgICAgICBudW1fYmxhbmtzX3RvX3lpZWxkIC09IDEKICAgICAgICAgICAgICAgICB5aWVsZCAoJycsJ1xuJyksTm9uZSxUcnVlCiAgICAgICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoJ1gnKToKLSAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkIGZyb21fbGluZSx0b19saW5lLFRydWUKIApAQCAtMTUzNiw3ICsxNTgyLDEwIEBACiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAjIENvbGxlY3RpbmcgbGluZXMgb2YgdGV4dCB1bnRpbCB3ZSBoYXZlIGEgZnJvbS90byBwYWlyCiAgICAgICAgICAgICB3aGlsZSAobGVuKGZyb21saW5lcyk9PTAgb3IgbGVuKHRvbGluZXMpPT0wKToKLSAgICAgICAgICAgICAgICBmcm9tX2xpbmUsIHRvX2xpbmUsIGZvdW5kX2RpZmYgPSBuZXh0KGxpbmVfaXRlcmF0b3IpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmcm9tX2xpbmUsIHRvX2xpbmUsIGZvdW5kX2RpZmYgPSBuZXh0KGxpbmVfaXRlcmF0b3IpCisgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIGZyb21fbGluZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgZnJvbWxpbmVzLmFwcGVuZCgoZnJvbV9saW5lLGZvdW5kX2RpZmYpKQogICAgICAgICAgICAgICAgIGlmIHRvX2xpbmUgaXMgbm90IE5vbmU6CkBAIC0xNTUwLDggKzE1OTksNyBAQAogICAgICMgdGhlbSB1cCB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2Ugd2l0aCB0aGVtLgogICAgIGxpbmVfcGFpcl9pdGVyYXRvciA9IF9saW5lX3BhaXJfaXRlcmF0b3IoKQogICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHlpZWxkIG5leHQobGluZV9wYWlyX2l0ZXJhdG9yKQorICAgICAgICB5aWVsZCBmcm9tIGxpbmVfcGFpcl9pdGVyYXRvcgogICAgICMgSGFuZGxlIGNhc2Ugd2hlcmUgdXNlciB3YW50cyBjb250ZXh0IGRpZmZlcmVuY2luZy4gIFdlIG11c3QgZG8gc29tZQogICAgICMgc3RvcmFnZSBvZiBsaW5lcyB1bnRpbCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgdGhleSBhcmUgdG8gYmUgeWllbGRlZC4KICAgICBlbHNlOgpAQCAtMTU2NCw3ICsxNjEyLDEwIEBACiAgICAgICAgICAgICBpbmRleCwgY29udGV4dExpbmVzID0gMCwgW05vbmVdKihjb250ZXh0KQogICAgICAgICAgICAgZm91bmRfZGlmZiA9IEZhbHNlCiAgICAgICAgICAgICB3aGlsZShmb3VuZF9kaWZmIGlzIEZhbHNlKToKLSAgICAgICAgICAgICAgICBmcm9tX2xpbmUsIHRvX2xpbmUsIGZvdW5kX2RpZmYgPSBuZXh0KGxpbmVfcGFpcl9pdGVyYXRvcikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZyb21fbGluZSwgdG9fbGluZSwgZm91bmRfZGlmZiA9IG5leHQobGluZV9wYWlyX2l0ZXJhdG9yKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBpID0gaW5kZXggJSBjb250ZXh0CiAgICAgICAgICAgICAgICAgY29udGV4dExpbmVzW2ldID0gKGZyb21fbGluZSwgdG9fbGluZSwgZm91bmRfZGlmZikKICAgICAgICAgICAgICAgICBpbmRleCArPSAxCkBAIC0xNjAxLDcgKzE2NTIsNyBAQAogCiA8aGVhZD4KICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiCi0gICAgICAgICAgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+CisgICAgICAgICAgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSUoY2hhcnNldClzIiAvPgogICAgIDx0aXRsZT48L3RpdGxlPgogICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JShzdHlsZXMpcwogICAgIDwvc3R5bGU+CkBAIC0xNjc5LDcgKzE3MzAsNyBAQAogICAgICAgICB0YWJzaXplIC0tIHRhYiBzdG9wIHNwYWNpbmcsIGRlZmF1bHRzIHRvIDguCiAgICAgICAgIHdyYXBjb2x1bW4gLS0gY29sdW1uIG51bWJlciB3aGVyZSBsaW5lcyBhcmUgYnJva2VuIGFuZCB3cmFwcGVkLAogICAgICAgICAgICAgZGVmYXVsdHMgdG8gTm9uZSB3aGVyZSBsaW5lcyBhcmUgbm90IHdyYXBwZWQuCi0gICAgICAgIGxpbmVqdW5rLGNoYXJqdW5rIC0tIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCBpbnRvIG5kaWZmKCkgKHVzZWQgdG8gYnkKKyAgICAgICAgbGluZWp1bmssY2hhcmp1bmsgLS0ga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIGludG8gbmRpZmYoKSAodXNlZCBieQogICAgICAgICAgICAgSHRtbERpZmYoKSB0byBnZW5lcmF0ZSB0aGUgc2lkZSBieSBzaWRlIEhUTUwgZGlmZmVyZW5jZXMpLiAgU2VlCiAgICAgICAgICAgICBuZGlmZigpIGRvY3VtZW50YXRpb24gZm9yIGFyZ3VtZW50IGRlZmF1bHQgdmFsdWVzIGFuZCBkZXNjcmlwdGlvbnMuCiAgICAgICAgICIiIgpAQCAtMTY4OCw4ICsxNzM5LDggQEAKICAgICAgICAgc2VsZi5fbGluZWp1bmsgPSBsaW5lanVuawogICAgICAgICBzZWxmLl9jaGFyanVuayA9IGNoYXJqdW5rCiAKLSAgICBkZWYgbWFrZV9maWxlKHNlbGYsZnJvbWxpbmVzLHRvbGluZXMsZnJvbWRlc2M9JycsdG9kZXNjPScnLGNvbnRleHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICBudW1saW5lcz01KToKKyAgICBkZWYgbWFrZV9maWxlKHNlbGYsIGZyb21saW5lcywgdG9saW5lcywgZnJvbWRlc2M9JycsIHRvZGVzYz0nJywKKyAgICAgICAgICAgICAgICAgIGNvbnRleHQ9RmFsc2UsIG51bWxpbmVzPTUsICosIGNoYXJzZXQ9J3V0Zi04Jyk6CiAgICAgICAgICIiIlJldHVybnMgSFRNTCBmaWxlIG9mIHNpZGUgYnkgc2lkZSBjb21wYXJpc29uIHdpdGggY2hhbmdlIGhpZ2hsaWdodHMKIAogICAgICAgICBBcmd1bWVudHM6CkBAIC0xNzA0LDEzICsxNzU1LDE2IEBACiAgICAgICAgICAgICBXaGVuIGNvbnRleHQgaXMgRmFsc2UsIGNvbnRyb2xzIHRoZSBudW1iZXIgb2YgbGluZXMgdG8gcGxhY2UKICAgICAgICAgICAgIHRoZSAibmV4dCIgbGluayBhbmNob3JzIGJlZm9yZSB0aGUgbmV4dCBjaGFuZ2UgKHNvIGNsaWNrIG9mCiAgICAgICAgICAgICAibmV4dCIgbGluayBqdW1wcyB0byBqdXN0IGJlZm9yZSB0aGUgY2hhbmdlKS4KKyAgICAgICAgY2hhcnNldCAtLSBjaGFyc2V0IG9mIHRoZSBIVE1MIGRvY3VtZW50CiAgICAgICAgICIiIgogCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlX3RlbXBsYXRlICUgZGljdCgKLSAgICAgICAgICAgIHN0eWxlcyA9IHNlbGYuX3N0eWxlcywKLSAgICAgICAgICAgIGxlZ2VuZCA9IHNlbGYuX2xlZ2VuZCwKLSAgICAgICAgICAgIHRhYmxlID0gc2VsZi5tYWtlX3RhYmxlKGZyb21saW5lcyx0b2xpbmVzLGZyb21kZXNjLHRvZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9Y29udGV4dCxudW1saW5lcz1udW1saW5lcykpCisgICAgICAgIHJldHVybiAoc2VsZi5fZmlsZV90ZW1wbGF0ZSAlIGRpY3QoCisgICAgICAgICAgICBzdHlsZXM9c2VsZi5fc3R5bGVzLAorICAgICAgICAgICAgbGVnZW5kPXNlbGYuX2xlZ2VuZCwKKyAgICAgICAgICAgIHRhYmxlPXNlbGYubWFrZV90YWJsZShmcm9tbGluZXMsIHRvbGluZXMsIGZyb21kZXNjLCB0b2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jb250ZXh0LCBudW1saW5lcz1udW1saW5lcyksCisgICAgICAgICAgICBjaGFyc2V0PWNoYXJzZXQKKyAgICAgICAgKSkuZW5jb2RlKGNoYXJzZXQsICd4bWxjaGFycmVmcmVwbGFjZScpLmRlY29kZShjaGFyc2V0KQogCiAgICAgZGVmIF90YWJfbmV3bGluZV9yZXBsYWNlKHNlbGYsZnJvbWxpbmVzLHRvbGluZXMpOgogICAgICAgICAiIiJSZXR1cm5zIGZyb20vdG8gbGluZSBsaXN0cyB3aXRoIHRhYnMgZXhwYW5kZWQgYW5kIG5ld2xpbmVzIHJlbW92ZWQuCmRpZmYgLS1naXQgYS9MaWIvZGlzLnB5IGIvTGliL2Rpcy5weQppbmRleCA4MWNiZTdmLi5mN2UzYzdmIDEwMDY0NAotLS0gYS9MaWIvZGlzLnB5CisrKyBiL0xpYi9kaXMucHkKQEAgLTEzLDcgKzEzLDggQEAKICAgICAgICAgICAgImdldF9pbnN0cnVjdGlvbnMiLCAiSW5zdHJ1Y3Rpb24iLCAiQnl0ZWNvZGUiXSArIF9vcGNvZGVzX2FsbAogZGVsIF9vcGNvZGVzX2FsbAogCi1faGF2ZV9jb2RlID0gKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuQ29kZVR5cGUsIHR5cGUpCitfaGF2ZV9jb2RlID0gKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuQ29kZVR5cGUsCisgICAgICAgICAgICAgIGNsYXNzbWV0aG9kLCBzdGF0aWNtZXRob2QsIHR5cGUpCiAKIGRlZiBfdHJ5X2NvbXBpbGUoc291cmNlLCBuYW1lKToKICAgICAiIiJBdHRlbXB0cyB0byBjb21waWxlIHRoZSBnaXZlbiBzb3VyY2UsIGZpcnN0IGFzIGFuIGV4cHJlc3Npb24gYW5kCkBAIC0yOSw3ICszMCw3IEBACiAgICAgcmV0dXJuIGMKIAogZGVmIGRpcyh4PU5vbmUsICosIGZpbGU9Tm9uZSk6Ci0gICAgIiIiRGlzYXNzZW1ibGUgY2xhc3NlcywgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLgorICAgICIiIkRpc2Fzc2VtYmxlIGNsYXNzZXMsIG1ldGhvZHMsIGZ1bmN0aW9ucywgZ2VuZXJhdG9ycywgb3IgY29kZS4KIAogICAgIFdpdGggbm8gYXJndW1lbnQsIGRpc2Fzc2VtYmxlIHRoZSBsYXN0IHRyYWNlYmFjay4KIApAQCAtNDEsNiArNDIsOCBAQAogICAgICAgICB4ID0geC5fX2Z1bmNfXwogICAgIGlmIGhhc2F0dHIoeCwgJ19fY29kZV9fJyk6ICAjIEZ1bmN0aW9uCiAgICAgICAgIHggPSB4Ll9fY29kZV9fCisgICAgaWYgaGFzYXR0cih4LCAnZ2lfY29kZScpOiAgIyBHZW5lcmF0b3IKKyAgICAgICAgeCA9IHguZ2lfY29kZQogICAgIGlmIGhhc2F0dHIoeCwgJ19fZGljdF9fJyk6ICAjIENsYXNzIG9yIG1vZHVsZQogICAgICAgICBpdGVtcyA9IHNvcnRlZCh4Ll9fZGljdF9fLml0ZW1zKCkpCiAgICAgICAgIGZvciBuYW1lLCB4MSBpbiBpdGVtczoKQEAgLTgyLDYgKzg1LDggQEAKICAgICAxNjogIk5FU1RFRCIsCiAgICAgMzI6ICJHRU5FUkFUT1IiLAogICAgIDY0OiAiTk9GUkVFIiwKKyAgIDEyODogIkNPUk9VVElORSIsCisgICAyNTY6ICJJVEVSQUJMRV9DT1JPVVRJTkUiLAogfQogCiBkZWYgcHJldHR5X2ZsYWdzKGZsYWdzKToKQEAgLTk5LDExICsxMDQsMTMgQEAKICAgICByZXR1cm4gIiwgIi5qb2luKG5hbWVzKQogCiBkZWYgX2dldF9jb2RlX29iamVjdCh4KToKLSAgICAiIiJIZWxwZXIgdG8gaGFuZGxlIG1ldGhvZHMsIGZ1bmN0aW9ucywgc3RyaW5ncyBhbmQgcmF3IGNvZGUgb2JqZWN0cyIiIgorICAgICIiIkhlbHBlciB0byBoYW5kbGUgbWV0aG9kcywgZnVuY3Rpb25zLCBnZW5lcmF0b3JzLCBzdHJpbmdzIGFuZCByYXcgY29kZSBvYmplY3RzIiIiCiAgICAgaWYgaGFzYXR0cih4LCAnX19mdW5jX18nKTogIyBNZXRob2QKICAgICAgICAgeCA9IHguX19mdW5jX18KICAgICBpZiBoYXNhdHRyKHgsICdfX2NvZGVfXycpOiAjIEZ1bmN0aW9uCiAgICAgICAgIHggPSB4Ll9fY29kZV9fCisgICAgaWYgaGFzYXR0cih4LCAnZ2lfY29kZScpOiAgIyBHZW5lcmF0b3IKKyAgICAgICAgeCA9IHguZ2lfY29kZQogICAgIGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgICMgU291cmNlIGNvZGUKICAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGRpc2Fzc2VtYmx5PiIpCiAgICAgaWYgaGFzYXR0cih4LCAnY29fY29kZScpOiAgIyBDb2RlIG9iamVjdApAQCAtMjY4LDMzICsyNzUsMTkgQEAKIAogICAgICIiIgogICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKLSAgICBleHRlbmRlZF9hcmcgPSAwCiAgICAgc3RhcnRzX2xpbmUgPSBOb25lCiAgICAgZnJlZSA9IE5vbmUKLSAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCi0gICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKLSAgICBuID0gbGVuKGNvZGUpCi0gICAgaSA9IDAKLSAgICB3aGlsZSBpIDwgbjoKLSAgICAgICAgb3AgPSBjb2RlW2ldCi0gICAgICAgIG9mZnNldCA9IGkKKyAgICBmb3Igb2Zmc2V0LCBvcCwgYXJnIGluIF91bnBhY2tfb3BhcmdzKGNvZGUpOgogICAgICAgICBpZiBsaW5lc3RhcnRzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc3RhcnRzX2xpbmUgPSBsaW5lc3RhcnRzLmdldChpLCBOb25lKQorICAgICAgICAgICAgc3RhcnRzX2xpbmUgPSBsaW5lc3RhcnRzLmdldChvZmZzZXQsIE5vbmUpCiAgICAgICAgICAgICBpZiBzdGFydHNfbGluZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBzdGFydHNfbGluZSArPSBsaW5lX29mZnNldAotICAgICAgICBpc19qdW1wX3RhcmdldCA9IGkgaW4gbGFiZWxzCi0gICAgICAgIGkgPSBpKzEKLSAgICAgICAgYXJnID0gTm9uZQorICAgICAgICBpc19qdW1wX3RhcmdldCA9IG9mZnNldCBpbiBsYWJlbHMKICAgICAgICAgYXJndmFsID0gTm9uZQogICAgICAgICBhcmdyZXByID0gJycKLSAgICAgICAgaWYgb3AgPj0gSEFWRV9BUkdVTUVOVDoKLSAgICAgICAgICAgIGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2ICsgZXh0ZW5kZWRfYXJnCi0gICAgICAgICAgICBleHRlbmRlZF9hcmcgPSAwCi0gICAgICAgICAgICBpID0gaSsyCi0gICAgICAgICAgICBpZiBvcCA9PSBFWFRFTkRFRF9BUkc6Ci0gICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gYXJnKjY1NTM2CisgICAgICAgIGlmIGFyZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICMgIFNldCBhcmd2YWwgdG8gdGhlIGRlcmVmZXJlbmNlZCB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgd2hlbgotICAgICAgICAgICAgIyAgYXZhaWxhYmUsIGFuZCBhcmdyZXByIHRvIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYXJndmFsLgorICAgICAgICAgICAgIyAgYXZhaWxhYmxlLCBhbmQgYXJncmVwciB0byB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFyZ3ZhbC4KICAgICAgICAgICAgICMgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzIG5lZWRzIHRoZSBzdHJpbmcgcmVwciBvZiB0aGUKICAgICAgICAgICAgICMgICAgcmF3IG5hbWUgaW5kZXggZm9yIExPQURfR0xPQkFMLCBMT0FEX0NPTlNULCBldGMuCiAgICAgICAgICAgICBhcmd2YWwgPSBhcmcKQEAgLTMwMyw3ICsyOTYsNyBAQAogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgogICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgbmFtZXMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgYXJndmFsID0gaSArIGFyZworICAgICAgICAgICAgICAgIGFyZ3ZhbCA9IG9mZnNldCArIDMgKyBhcmcKICAgICAgICAgICAgICAgICBhcmdyZXByID0gInRvICIgKyByZXByKGFyZ3ZhbCkKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbG9jYWw6CiAgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9uYW1lX2luZm8oYXJnLCB2YXJuYW1lcykKQEAgLTMxMyw3ICszMDYsNyBAQAogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNmcmVlOgogICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgY2VsbHMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hcmdzOgotICAgICAgICAgICAgICAgIGFyZ3JlcHIgPSAiJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyIiAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSkKKyAgICAgICAgICAgICAgICBhcmdyZXByID0gIiVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciIgJSAoYXJnJTI1NiwgYXJnLy8yNTYpCiAgICAgICAgIHlpZWxkIEluc3RydWN0aW9uKG9wbmFtZVtvcF0sIG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIGFyZ3ZhbCwgYXJncmVwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBzdGFydHNfbGluZSwgaXNfanVtcF90YXJnZXQpCkBAIC0zNDksNiArMzQyLDI1IEBACiAKIGRpc2NvID0gZGlzYXNzZW1ibGUgICAgICAgICAgICAgICAgICAgICAjIFhYWCBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKIAorZGVmIF91bnBhY2tfb3BhcmdzKGNvZGUpOgorICAgICMgZW51bWVyYXRlKCkgaXMgbm90IGFuIG9wdGlvbiwgc2luY2Ugd2Ugc29tZXRpbWVzIHByb2Nlc3MKKyAgICAjIG11bHRpcGxlIGVsZW1lbnRzIG9uIGEgc2luZ2xlIHBhc3MgdGhyb3VnaCB0aGUgbG9vcAorICAgIGV4dGVuZGVkX2FyZyA9IDAKKyAgICBuID0gbGVuKGNvZGUpCisgICAgaSA9IDAKKyAgICB3aGlsZSBpIDwgbjoKKyAgICAgICAgb3AgPSBjb2RlW2ldCisgICAgICAgIG9mZnNldCA9IGkKKyAgICAgICAgaSA9IGkrMQorICAgICAgICBhcmcgPSBOb25lCisgICAgICAgIGlmIG9wID49IEhBVkVfQVJHVU1FTlQ6CisgICAgICAgICAgICBhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NiArIGV4dGVuZGVkX2FyZworICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gMAorICAgICAgICAgICAgaSA9IGkrMgorICAgICAgICAgICAgaWYgb3AgPT0gRVhURU5ERURfQVJHOgorICAgICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IGFyZyo2NTUzNgorICAgICAgICB5aWVsZCAob2Zmc2V0LCBvcCwgYXJnKQorCiBkZWYgZmluZGxhYmVscyhjb2RlKToKICAgICAiIiJEZXRlY3QgYWxsIG9mZnNldHMgaW4gYSBieXRlIGNvZGUgd2hpY2ggYXJlIGp1bXAgdGFyZ2V0cy4KIApAQCAtMzU2LDE5ICszNjgsMTEgQEAKIAogICAgICIiIgogICAgIGxhYmVscyA9IFtdCi0gICAgIyBlbnVtZXJhdGUoKSBpcyBub3QgYW4gb3B0aW9uLCBzaW5jZSB3ZSBzb21ldGltZXMgcHJvY2VzcwotICAgICMgbXVsdGlwbGUgZWxlbWVudHMgb24gYSBzaW5nbGUgcGFzcyB0aHJvdWdoIHRoZSBsb29wCi0gICAgbiA9IGxlbihjb2RlKQotICAgIGkgPSAwCi0gICAgd2hpbGUgaSA8IG46Ci0gICAgICAgIG9wID0gY29kZVtpXQotICAgICAgICBpID0gaSsxCi0gICAgICAgIGlmIG9wID49IEhBVkVfQVJHVU1FTlQ6Ci0gICAgICAgICAgICBhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NgotICAgICAgICAgICAgaSA9IGkrMgorICAgIGZvciBvZmZzZXQsIG9wLCBhcmcgaW4gX3VucGFja19vcGFyZ3MoY29kZSk6CisgICAgICAgIGlmIGFyZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGxhYmVsID0gLTEKICAgICAgICAgICAgIGlmIG9wIGluIGhhc2pyZWw6Ci0gICAgICAgICAgICAgICAgbGFiZWwgPSBpK2FyZworICAgICAgICAgICAgICAgIGxhYmVsID0gb2Zmc2V0ICsgMyArIGFyZwogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqYWJzOgogICAgICAgICAgICAgICAgIGxhYmVsID0gYXJnCiAgICAgICAgICAgICBpZiBsYWJlbCA+PSAwOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9fbXN2Y2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9fbXN2Y2NvbXBpbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjAyNzMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL19tc3ZjY29tcGlsZXIucHkKQEAgLTAsMCArMSw1MzMgQEAKKyIiImRpc3R1dGlscy5fbXN2Y2NvbXBpbGVyCisKK0NvbnRhaW5zIE1TVkNDb21waWxlciwgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGFic3RyYWN0IENDb21waWxlciBjbGFzcworZm9yIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTUuCisKK1RoZSBtb2R1bGUgaXMgY29tcGF0aWJsZSB3aXRoIFZTIDIwMTUgYW5kIGxhdGVyLiBZb3UgY2FuIGZpbmQgbGVnYWN5IHN1cHBvcnQKK2ZvciBvbGRlciB2ZXJzaW9ucyBpbiBkaXN0dXRpbHMubXN2Yzljb21waWxlciBhbmQgZGlzdHV0aWxzLm1zdmNjb21waWxlci4KKyIiIgorCisjIFdyaXR0ZW4gYnkgUGVycnkgU3RvbGwKKyMgaGFja2VkIGJ5IFJvYmluIEJlY2tlciBhbmQgVGhvbWFzIEhlbGxlciB0byBkbyBhIGJldHRlciBqb2Igb2YKKyMgICBmaW5kaW5nIERldlN0dWRpbyAodGhyb3VnaCB0aGUgcmVnaXN0cnkpCisjIHBvcnRlZCB0byBWUyAyMDA1IGFuZCBWUyAyMDA4IGJ5IENocmlzdGlhbiBIZWltZXMKKyMgcG9ydGVkIHRvIFZTIDIwMTUgYnkgU3RldmUgRG93ZXIKKworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGlsZUVycm9yLCBMaWJFcnJvciwgTGlua0Vycm9yCitmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IENDb21waWxlciwgZ2VuX2xpYl9vcHRpb25zCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCitmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KKworaW1wb3J0IHdpbnJlZworZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNvdW50CisKK2RlZiBfZmluZF92Y3ZhcnNhbGwocGxhdF9zcGVjKToKKyAgICB0cnk6CisgICAgICAgIGtleSA9IHdpbnJlZy5PcGVuS2V5RXgoCisgICAgICAgICAgICB3aW5yZWcuSEtFWV9MT0NBTF9NQUNISU5FLAorICAgICAgICAgICAgciJTb2Z0d2FyZVxNaWNyb3NvZnRcVmlzdWFsU3R1ZGlvXFN4U1xWQzciLAorICAgICAgICAgICAgYWNjZXNzPXdpbnJlZy5LRVlfUkVBRCB8IHdpbnJlZy5LRVlfV09XNjRfMzJLRVkKKyAgICAgICAgKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBsb2cuZGVidWcoIlZpc3VhbCBDKysgaXMgbm90IHJlZ2lzdGVyZWQiKQorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisgICAgd2l0aCBrZXk6CisgICAgICAgIGJlc3RfdmVyc2lvbiA9IDAKKyAgICAgICAgYmVzdF9kaXIgPSBOb25lCisgICAgICAgIGZvciBpIGluIGNvdW50KCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdiwgdmNfZGlyLCB2dCA9IHdpbnJlZy5FbnVtVmFsdWUoa2V5LCBpKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHYgYW5kIHZ0ID09IHdpbnJlZy5SRUdfU1ogYW5kIG9zLnBhdGguaXNkaXIodmNfZGlyKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBpbnQoZmxvYXQodikpCisgICAgICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHZlcnNpb24gPj0gMTQgYW5kIHZlcnNpb24gPiBiZXN0X3ZlcnNpb246CisgICAgICAgICAgICAgICAgICAgIGJlc3RfdmVyc2lvbiwgYmVzdF9kaXIgPSB2ZXJzaW9uLCB2Y19kaXIKKyAgICAgICAgaWYgbm90IGJlc3RfdmVyc2lvbjoKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiTm8gc3VpdGFibGUgVmlzdWFsIEMrKyB2ZXJzaW9uIGZvdW5kIikKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCisKKyAgICAgICAgdmN2YXJzYWxsID0gb3MucGF0aC5qb2luKGJlc3RfZGlyLCAidmN2YXJzYWxsLmJhdCIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh2Y3ZhcnNhbGwpOgorICAgICAgICAgICAgbG9nLmRlYnVnKCIlcyBjYW5ub3QgYmUgZm91bmQiLCB2Y3ZhcnNhbGwpCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisgICAgICAgIHZjcnVudGltZSA9IE5vbmUKKyAgICAgICAgdmNydW50aW1lX3NwZWMgPSBfVkNWQVJTX1BMQVRfVE9fVkNSVU5USU1FX1JFRElTVC5nZXQocGxhdF9zcGVjKQorICAgICAgICBpZiB2Y3J1bnRpbWVfc3BlYzoKKyAgICAgICAgICAgIHZjcnVudGltZSA9IG9zLnBhdGguam9pbihiZXN0X2RpciwKKyAgICAgICAgICAgICAgICB2Y3J1bnRpbWVfc3BlYy5mb3JtYXQoYmVzdF92ZXJzaW9uKSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh2Y3J1bnRpbWUpOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiJXMgY2Fubm90IGJlIGZvdW5kIiwgdmNydW50aW1lKQorICAgICAgICAgICAgICAgIHZjcnVudGltZSA9IE5vbmUKKworICAgICAgICByZXR1cm4gdmN2YXJzYWxsLCB2Y3J1bnRpbWUKKworZGVmIF9nZXRfdmNfZW52KHBsYXRfc3BlYyk6CisgICAgaWYgb3MuZ2V0ZW52KCJESVNUVVRJTFNfVVNFX1NESyIpOgorICAgICAgICByZXR1cm4geworICAgICAgICAgICAga2V5Lmxvd2VyKCk6IHZhbHVlCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvcy5lbnZpcm9uLml0ZW1zKCkKKyAgICAgICAgfQorCisgICAgdmN2YXJzYWxsLCB2Y3J1bnRpbWUgPSBfZmluZF92Y3ZhcnNhbGwocGxhdF9zcGVjKQorICAgIGlmIG5vdCB2Y3ZhcnNhbGw6CisgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZjdmFyc2FsbC5iYXQiKQorCisgICAgdHJ5OgorICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICdjbWQgL3UgL2MgInt9IiB7fSAmJiBzZXQnLmZvcm1hdCh2Y3ZhcnNhbGwsIHBsYXRfc3BlYyksCisgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICkuZGVjb2RlKCd1dGYtMTZsZScsIGVycm9ycz0ncmVwbGFjZScpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKKyAgICAgICAgbG9nLmVycm9yKGV4Yy5vdXRwdXQpCisgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoIkVycm9yIGV4ZWN1dGluZyB7fSIKKyAgICAgICAgICAgICAgICAuZm9ybWF0KGV4Yy5jbWQpKQorCisgICAgZW52ID0geworICAgICAgICBrZXkubG93ZXIoKTogdmFsdWUKKyAgICAgICAgZm9yIGtleSwgXywgdmFsdWUgaW4KKyAgICAgICAgKGxpbmUucGFydGl0aW9uKCc9JykgZm9yIGxpbmUgaW4gb3V0LnNwbGl0bGluZXMoKSkKKyAgICAgICAgaWYga2V5IGFuZCB2YWx1ZQorICAgIH0KKworICAgIGlmIHZjcnVudGltZToKKyAgICAgICAgZW52WydweV92Y3J1bnRpbWVfcmVkaXN0J10gPSB2Y3J1bnRpbWUKKyAgICByZXR1cm4gZW52CisKK2RlZiBfZmluZF9leGUoZXhlLCBwYXRocz1Ob25lKToKKyAgICAiIiJSZXR1cm4gcGF0aCB0byBhbiBNU1ZDIGV4ZWN1dGFibGUgcHJvZ3JhbS4KKworICAgIFRyaWVzIHRvIGZpbmQgdGhlIHByb2dyYW0gaW4gc2V2ZXJhbCBwbGFjZXM6IGZpcnN0LCBvbmUgb2YgdGhlCisgICAgTVNWQyBwcm9ncmFtIHNlYXJjaCBwYXRocyBmcm9tIHRoZSByZWdpc3RyeTsgbmV4dCwgdGhlIGRpcmVjdG9yaWVzCisgICAgaW4gdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuICBJZiBhbnkgb2YgdGhvc2Ugd29yaywgcmV0dXJuIGFuCisgICAgYWJzb2x1dGUgcGF0aCB0aGF0IGlzIGtub3duIHRvIGV4aXN0LiAgSWYgbm9uZSBvZiB0aGVtIHdvcmssIGp1c3QKKyAgICByZXR1cm4gdGhlIG9yaWdpbmFsIHByb2dyYW0gbmFtZSwgJ2V4ZScuCisgICAgIiIiCisgICAgaWYgbm90IHBhdGhzOgorICAgICAgICBwYXRocyA9IG9zLmdldGVudigncGF0aCcpLnNwbGl0KG9zLnBhdGhzZXApCisgICAgZm9yIHAgaW4gcGF0aHM6CisgICAgICAgIGZuID0gb3MucGF0aC5qb2luKG9zLnBhdGguYWJzcGF0aChwKSwgZXhlKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICByZXR1cm4gZm4KKyAgICByZXR1cm4gZXhlCisKKyMgQSBtYXAga2V5ZWQgYnkgZ2V0X3BsYXRmb3JtKCkgcmV0dXJuIHZhbHVlcyB0byB2YWx1ZXMgYWNjZXB0ZWQgYnkKKyMgJ3ZjdmFyc2FsbC5iYXQnLiBBbHdheXMgY3Jvc3MtY29tcGlsZSBmcm9tIHg4NiB0byB3b3JrIHdpdGggdGhlCisjIGxpZ2h0ZXItd2VpZ2h0IE1TVkMgaW5zdGFsbHMgdGhhdCBkbyBub3QgaW5jbHVkZSBuYXRpdmUgNjQtYml0IHRvb2xzLgorUExBVF9UT19WQ1ZBUlMgPSB7CisgICAgJ3dpbjMyJyA6ICd4ODYnLAorICAgICd3aW4tYW1kNjQnIDogJ3g4Nl9hbWQ2NCcsCit9CisKKyMgQSBtYXAga2V5ZWQgYnkgZ2V0X3BsYXRmb3JtKCkgcmV0dXJuIHZhbHVlcyB0byB0aGUgZmlsZSB1bmRlcgorIyB0aGUgVkMgaW5zdGFsbCBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgdmNydW50aW1lIHJlZGlzdHJpYnV0YWJsZS4KK19WQ1ZBUlNfUExBVF9UT19WQ1JVTlRJTUVfUkVESVNUID0geworICAgICd4ODYnIDogJ3JlZGlzdFxceDg2XFxNaWNyb3NvZnQuVkN7MH0wLkNSVFxcdmNydW50aW1lezB9MC5kbGwnLAorICAgICdhbWQ2NCcgOiAncmVkaXN0XFx4NjRcXE1pY3Jvc29mdC5WQ3swfTAuQ1JUXFx2Y3J1bnRpbWV7MH0wLmRsbCcsCisgICAgJ3g4Nl9hbWQ2NCcgOiAncmVkaXN0XFx4NjRcXE1pY3Jvc29mdC5WQ3swfTAuQ1JUXFx2Y3J1bnRpbWV7MH0wLmRsbCcsCit9CisKKyMgQSBzZXQgY29udGFpbmluZyB0aGUgRExMcyB0aGF0IGFyZSBndWFyYW50ZWVkIHRvIGJlIGF2YWlsYWJsZSBmb3IKKyMgYWxsIG1pY3JvIHZlcnNpb25zIG9mIHRoaXMgUHl0aG9uIHZlcnNpb24uIEtub3duIGV4dGVuc2lvbgorIyBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGluIHRoaXMgc2V0IHdpbGwgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQKKyMgcGF0aC4KK19CVU5ETEVEX0RMTFMgPSBmcm96ZW5zZXQoWyd2Y3J1bnRpbWUxNDAuZGxsJ10pCisKK2NsYXNzIE1TVkNDb21waWxlcihDQ29tcGlsZXIpIDoKKyAgICAiIiJDb25jcmV0ZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgYW4gaW50ZXJmYWNlIHRvIE1pY3Jvc29mdCBWaXN1YWwgQysrLAorICAgICAgIGFzIGRlZmluZWQgYnkgdGhlIENDb21waWxlciBhYnN0cmFjdCBjbGFzcy4iIiIKKworICAgIGNvbXBpbGVyX3R5cGUgPSAnbXN2YycKKworICAgICMgSnVzdCBzZXQgdGhpcyBzbyBDQ29tcGlsZXIncyBjb25zdHJ1Y3RvciBkb2Vzbid0IGJhcmYuICBXZSBjdXJyZW50bHkKKyAgICAjIGRvbid0IHVzZSB0aGUgJ3NldF9leGVjdXRhYmxlcygpJyBidXJlYXVjcmFjeSBwcm92aWRlZCBieSBDQ29tcGlsZXIsCisgICAgIyBhcyBpdCByZWFsbHkgaXNuJ3QgbmVjZXNzYXJ5IGZvciB0aGlzIHNvcnQgb2Ygc2luZ2xlLWNvbXBpbGVyIGNsYXNzLgorICAgICMgV291bGQgYmUgbmljZSB0byBoYXZlIGEgY29uc2lzdGVudCBpbnRlcmZhY2Ugd2l0aCBVbml4Q0NvbXBpbGVyLAorICAgICMgdGhvdWdoLCBzbyBpdCdzIHdvcnRoIHRoaW5raW5nIGFib3V0LgorICAgIGV4ZWN1dGFibGVzID0ge30KKworICAgICMgUHJpdmF0ZSBjbGFzcyBkYXRhIChuZWVkIHRvIGRpc3Rpbmd1aXNoIEMgZnJvbSBDKysgc291cmNlIGZvciBjb21waWxlcikKKyAgICBfY19leHRlbnNpb25zID0gWycuYyddCisgICAgX2NwcF9leHRlbnNpb25zID0gWycuY2MnLCAnLmNwcCcsICcuY3h4J10KKyAgICBfcmNfZXh0ZW5zaW9ucyA9IFsnLnJjJ10KKyAgICBfbWNfZXh0ZW5zaW9ucyA9IFsnLm1jJ10KKworICAgICMgTmVlZGVkIGZvciB0aGUgZmlsZW5hbWUgZ2VuZXJhdGlvbiBtZXRob2RzIHByb3ZpZGVkIGJ5IHRoZQorICAgICMgYmFzZSBjbGFzcywgQ0NvbXBpbGVyLgorICAgIHNyY19leHRlbnNpb25zID0gKF9jX2V4dGVuc2lvbnMgKyBfY3BwX2V4dGVuc2lvbnMgKworICAgICAgICAgICAgICAgICAgICAgIF9yY19leHRlbnNpb25zICsgX21jX2V4dGVuc2lvbnMpCisgICAgcmVzX2V4dGVuc2lvbiA9ICcucmVzJworICAgIG9ial9leHRlbnNpb24gPSAnLm9iaicKKyAgICBzdGF0aWNfbGliX2V4dGVuc2lvbiA9ICcubGliJworICAgIHNoYXJlZF9saWJfZXh0ZW5zaW9uID0gJy5kbGwnCisgICAgc3RhdGljX2xpYl9mb3JtYXQgPSBzaGFyZWRfbGliX2Zvcm1hdCA9ICclcyVzJworICAgIGV4ZV9leHRlbnNpb24gPSAnLmV4ZScKKworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wLCBmb3JjZT0wKToKKyAgICAgICAgQ0NvbXBpbGVyLl9faW5pdF9fIChzZWxmLCB2ZXJib3NlLCBkcnlfcnVuLCBmb3JjZSkKKyAgICAgICAgIyB0YXJnZXQgcGxhdGZvcm0gKC5wbGF0X25hbWUgaXMgY29uc2lzdGVudCB3aXRoICdiZGlzdCcpCisgICAgICAgIHNlbGYucGxhdF9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gRmFsc2UKKworICAgIGRlZiBpbml0aWFsaXplKHNlbGYsIHBsYXRfbmFtZT1Ob25lKToKKyAgICAgICAgIyBtdWx0aS1pbml0IG1lYW5zIHdlIHdvdWxkIG5lZWQgdG8gY2hlY2sgcGxhdGZvcm0gc2FtZSBlYWNoIHRpbWUuLi4KKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmluaXRpYWxpemVkLCAiZG9uJ3QgaW5pdCBtdWx0aXBsZSB0aW1lcyIKKyAgICAgICAgaWYgcGxhdF9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBwbGF0X25hbWUgPSBnZXRfcGxhdGZvcm0oKQorICAgICAgICAjIHNhbml0eSBjaGVjayBmb3IgcGxhdGZvcm1zIHRvIHByZXZlbnQgb2JzY3VyZSBlcnJvcnMgbGF0ZXIuCisgICAgICAgIGlmIHBsYXRfbmFtZSBub3QgaW4gUExBVF9UT19WQ1ZBUlM6CisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKCItLXBsYXQtbmFtZSBtdXN0IGJlIG9uZSBvZiB7fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0dXBsZShQTEFUX1RPX1ZDVkFSUykpKQorCisgICAgICAgICMgR2V0IHRoZSB2Y3ZhcnNhbGwuYmF0IHNwZWMgZm9yIHRoZSByZXF1ZXN0ZWQgcGxhdGZvcm0uCisgICAgICAgIHBsYXRfc3BlYyA9IFBMQVRfVE9fVkNWQVJTW3BsYXRfbmFtZV0KKworICAgICAgICB2Y19lbnYgPSBfZ2V0X3ZjX2VudihwbGF0X3NwZWMpCisgICAgICAgIGlmIG5vdCB2Y19lbnY6CisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKCJVbmFibGUgdG8gZmluZCBhIGNvbXBhdGlibGUgIgorICAgICAgICAgICAgICAgICJWaXN1YWwgU3R1ZGlvIGluc3RhbGxhdGlvbi4iKQorCisgICAgICAgIHNlbGYuX3BhdGhzID0gdmNfZW52LmdldCgncGF0aCcsICcnKQorICAgICAgICBwYXRocyA9IHNlbGYuX3BhdGhzLnNwbGl0KG9zLnBhdGhzZXApCisgICAgICAgIHNlbGYuY2MgPSBfZmluZF9leGUoImNsLmV4ZSIsIHBhdGhzKQorICAgICAgICBzZWxmLmxpbmtlciA9IF9maW5kX2V4ZSgibGluay5leGUiLCBwYXRocykKKyAgICAgICAgc2VsZi5saWIgPSBfZmluZF9leGUoImxpYi5leGUiLCBwYXRocykKKyAgICAgICAgc2VsZi5yYyA9IF9maW5kX2V4ZSgicmMuZXhlIiwgcGF0aHMpICAgIyByZXNvdXJjZSBjb21waWxlcgorICAgICAgICBzZWxmLm1jID0gX2ZpbmRfZXhlKCJtYy5leGUiLCBwYXRocykgICAjIG1lc3NhZ2UgY29tcGlsZXIKKyAgICAgICAgc2VsZi5tdCA9IF9maW5kX2V4ZSgibXQuZXhlIiwgcGF0aHMpICAgIyBtZXNzYWdlIGNvbXBpbGVyCisgICAgICAgIHNlbGYuX3ZjcnVudGltZV9yZWRpc3QgPSB2Y19lbnYuZ2V0KCdweV92Y3J1bnRpbWVfcmVkaXN0JywgJycpCisKKyAgICAgICAgZm9yIGRpciBpbiB2Y19lbnYuZ2V0KCdpbmNsdWRlJywgJycpLnNwbGl0KG9zLnBhdGhzZXApOgorICAgICAgICAgICAgaWYgZGlyOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2luY2x1ZGVfZGlyKGRpcikKKworICAgICAgICBmb3IgZGlyIGluIHZjX2Vudi5nZXQoJ2xpYicsICcnKS5zcGxpdChvcy5wYXRoc2VwKToKKyAgICAgICAgICAgIGlmIGRpcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF9saWJyYXJ5X2RpcihkaXIpCisKKyAgICAgICAgc2VsZi5wcmVwcm9jZXNzX29wdGlvbnMgPSBOb25lCisgICAgICAgICMgSWYgdmNydW50aW1lX3JlZGlzdCBpcyBhdmFpbGFibGUsIGxpbmsgYWdhaW5zdCBpdCBkeW5hbWljYWxseS4gT3RoZXJ3aXNlLAorICAgICAgICAjIHVzZSAvTVRbZF0gdG8gYnVpbGQgc3RhdGljYWxseSwgdGhlbiBzd2l0Y2ggZnJvbSBsaWJ1Y3J0W2RdLmxpYiB0byB1Y3J0W2RdLmxpYgorICAgICAgICAjIGxhdGVyIHRvIGR5bmFtaWNhbGx5IGxpbmsgdG8gdWNydGJhc2UgYnV0IG5vdCB2Y3J1bnRpbWUuCisgICAgICAgIHNlbGYuY29tcGlsZV9vcHRpb25zID0gWworICAgICAgICAgICAgJy9ub2xvZ28nLCAnL094JywgJy9XMycsICcvR0wnLCAnL0ROREVCVUcnCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5jb21waWxlX29wdGlvbnMuYXBwZW5kKCcvTUQnIGlmIHNlbGYuX3ZjcnVudGltZV9yZWRpc3QgZWxzZSAnL01UJykKKworICAgICAgICBzZWxmLmNvbXBpbGVfb3B0aW9uc19kZWJ1ZyA9IFsKKyAgICAgICAgICAgICcvbm9sb2dvJywgJy9PZCcsICcvTURkJywgJy9aaScsICcvVzMnLCAnL0RfREVCVUcnCisgICAgICAgIF0KKworICAgICAgICBsZGZsYWdzID0gWworICAgICAgICAgICAgJy9ub2xvZ28nLCAnL0lOQ1JFTUVOVEFMOk5PJywgJy9MVENHJworICAgICAgICBdCisgICAgICAgIGlmIG5vdCBzZWxmLl92Y3J1bnRpbWVfcmVkaXN0OgorICAgICAgICAgICAgbGRmbGFncy5leHRlbmQoKCcvbm9kZWZhdWx0bGliOmxpYnVjcnQubGliJywgJ3VjcnQubGliJykpCisKKyAgICAgICAgbGRmbGFnc19kZWJ1ZyA9IFsKKyAgICAgICAgICAgICcvbm9sb2dvJywgJy9JTkNSRU1FTlRBTDpOTycsICcvTFRDRycsICcvREVCVUc6RlVMTCcKKyAgICAgICAgXQorCisgICAgICAgIHNlbGYubGRmbGFnc19leGUgPSBbKmxkZmxhZ3MsICcvTUFOSUZFU1Q6RU1CRUQsSUQ9MSddCisgICAgICAgIHNlbGYubGRmbGFnc19leGVfZGVidWcgPSBbKmxkZmxhZ3NfZGVidWcsICcvTUFOSUZFU1Q6RU1CRUQsSUQ9MSddCisgICAgICAgIHNlbGYubGRmbGFnc19zaGFyZWQgPSBbKmxkZmxhZ3MsICcvRExMJywgJy9NQU5JRkVTVDpFTUJFRCxJRD0yJywgJy9NQU5JRkVTVFVBQzpOTyddCisgICAgICAgIHNlbGYubGRmbGFnc19zaGFyZWRfZGVidWcgPSBbKmxkZmxhZ3NfZGVidWcsICcvRExMJywgJy9NQU5JRkVTVDpFTUJFRCxJRD0yJywgJy9NQU5JRkVTVFVBQzpOTyddCisgICAgICAgIHNlbGYubGRmbGFnc19zdGF0aWMgPSBbKmxkZmxhZ3NdCisgICAgICAgIHNlbGYubGRmbGFnc19zdGF0aWNfZGVidWcgPSBbKmxkZmxhZ3NfZGVidWddCisKKyAgICAgICAgc2VsZi5fbGRmbGFncyA9IHsKKyAgICAgICAgICAgIChDQ29tcGlsZXIuRVhFQ1VUQUJMRSwgTm9uZSk6IHNlbGYubGRmbGFnc19leGUsCisgICAgICAgICAgICAoQ0NvbXBpbGVyLkVYRUNVVEFCTEUsIEZhbHNlKTogc2VsZi5sZGZsYWdzX2V4ZSwKKyAgICAgICAgICAgIChDQ29tcGlsZXIuRVhFQ1VUQUJMRSwgVHJ1ZSk6IHNlbGYubGRmbGFnc19leGVfZGVidWcsCisgICAgICAgICAgICAoQ0NvbXBpbGVyLlNIQVJFRF9PQkpFQ1QsIE5vbmUpOiBzZWxmLmxkZmxhZ3Nfc2hhcmVkLAorICAgICAgICAgICAgKENDb21waWxlci5TSEFSRURfT0JKRUNULCBGYWxzZSk6IHNlbGYubGRmbGFnc19zaGFyZWQsCisgICAgICAgICAgICAoQ0NvbXBpbGVyLlNIQVJFRF9PQkpFQ1QsIFRydWUpOiBzZWxmLmxkZmxhZ3Nfc2hhcmVkX2RlYnVnLAorICAgICAgICAgICAgKENDb21waWxlci5TSEFSRURfTElCUkFSWSwgTm9uZSk6IHNlbGYubGRmbGFnc19zdGF0aWMsCisgICAgICAgICAgICAoQ0NvbXBpbGVyLlNIQVJFRF9MSUJSQVJZLCBGYWxzZSk6IHNlbGYubGRmbGFnc19zdGF0aWMsCisgICAgICAgICAgICAoQ0NvbXBpbGVyLlNIQVJFRF9MSUJSQVJZLCBUcnVlKTogc2VsZi5sZGZsYWdzX3N0YXRpY19kZWJ1ZywKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICAjIC0tIFdvcmtlciBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIG9iamVjdF9maWxlbmFtZXMoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfZmlsZW5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX2Rpcj0wLAorICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9JycpOgorICAgICAgICBleHRfbWFwID0geworICAgICAgICAgICAgKip7ZXh0OiBzZWxmLm9ial9leHRlbnNpb24gZm9yIGV4dCBpbiBzZWxmLnNyY19leHRlbnNpb25zfSwKKyAgICAgICAgICAgICoqe2V4dDogc2VsZi5yZXNfZXh0ZW5zaW9uIGZvciBleHQgaW4gc2VsZi5fcmNfZXh0ZW5zaW9ucyArIHNlbGYuX21jX2V4dGVuc2lvbnN9LAorICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0X2RpciA9IG91dHB1dF9kaXIgb3IgJycKKworICAgICAgICBkZWYgbWFrZV9vdXRfcGF0aChwKToKKyAgICAgICAgICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQocCkKKyAgICAgICAgICAgIGlmIHN0cmlwX2RpcjoKKyAgICAgICAgICAgICAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZShiYXNlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfLCBiYXNlID0gb3MucGF0aC5zcGxpdGRyaXZlKGJhc2UpCisgICAgICAgICAgICAgICAgaWYgYmFzZS5zdGFydHN3aXRoKChvcy5wYXRoLnNlcCwgb3MucGF0aC5hbHRzZXApKToKKyAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2VbMTpdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBYWFg6IFRoaXMgbWF5IHByb2R1Y2UgYWJzdXJkbHkgbG9uZyBwYXRocy4gV2Ugc2hvdWxkIGNoZWNrCisgICAgICAgICAgICAgICAgIyB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgYW5kIHRyaW0gYmFzZSB1bnRpbCB3ZSBmaXQgd2l0aGluCisgICAgICAgICAgICAgICAgIyAyNjAgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG91dHB1dF9kaXIsIGJhc2UgKyBleHRfbWFwW2V4dF0pCisgICAgICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgIyBCZXR0ZXIgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIGluc3RlYWQgb2Ygc2lsZW50bHkgY29udGludWluZworICAgICAgICAgICAgICAgICMgYW5kIGxhdGVyIGNvbXBsYWluIGFib3V0IHNvdXJjZXMgYW5kIHRhcmdldHMgaGF2aW5nCisgICAgICAgICAgICAgICAgIyBkaWZmZXJlbnQgbGVuZ3RocworICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcigiRG9uJ3Qga25vdyBob3cgdG8gY29tcGlsZSB7fSIuZm9ybWF0KHApKQorCisgICAgICAgIHJldHVybiBsaXN0KG1hcChtYWtlX291dF9wYXRoLCBzb3VyY2VfZmlsZW5hbWVzKSkKKworCisgICAgZGVmIGNvbXBpbGUoc2VsZiwgc291cmNlcywKKyAgICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsIG1hY3Jvcz1Ob25lLCBpbmNsdWRlX2RpcnM9Tm9uZSwgZGVidWc9MCwKKyAgICAgICAgICAgICAgICBleHRyYV9wcmVhcmdzPU5vbmUsIGV4dHJhX3Bvc3RhcmdzPU5vbmUsIGRlcGVuZHM9Tm9uZSk6CisKKyAgICAgICAgaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQ6CisgICAgICAgICAgICBzZWxmLmluaXRpYWxpemUoKQorICAgICAgICBjb21waWxlX2luZm8gPSBzZWxmLl9zZXR1cF9jb21waWxlKG91dHB1dF9kaXIsIG1hY3JvcywgaW5jbHVkZV9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMsIGRlcGVuZHMsIGV4dHJhX3Bvc3RhcmdzKQorICAgICAgICBtYWNyb3MsIG9iamVjdHMsIGV4dHJhX3Bvc3RhcmdzLCBwcF9vcHRzLCBidWlsZCA9IGNvbXBpbGVfaW5mbworCisgICAgICAgIGNvbXBpbGVfb3B0cyA9IGV4dHJhX3ByZWFyZ3Mgb3IgW10KKyAgICAgICAgY29tcGlsZV9vcHRzLmFwcGVuZCgnL2MnKQorICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgIGNvbXBpbGVfb3B0cy5leHRlbmQoc2VsZi5jb21waWxlX29wdGlvbnNfZGVidWcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21waWxlX29wdHMuZXh0ZW5kKHNlbGYuY29tcGlsZV9vcHRpb25zKQorCisKKyAgICAgICAgYWRkX2NwcF9vcHRzID0gRmFsc2UKKworICAgICAgICBmb3Igb2JqIGluIG9iamVjdHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3JjLCBleHQgPSBidWlsZFtvYmpdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgICAgICMgcGFzcyB0aGUgZnVsbCBwYXRobmFtZSB0byBNU1ZDIGluIGRlYnVnIG1vZGUsCisgICAgICAgICAgICAgICAgIyB0aGlzIGFsbG93cyB0aGUgZGVidWdnZXIgdG8gZmluZCB0aGUgc291cmNlIGZpbGUKKyAgICAgICAgICAgICAgICAjIHdpdGhvdXQgYXNraW5nIHRoZSB1c2VyIHRvIGJyb3dzZSBmb3IgaXQKKyAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmFic3BhdGgoc3JjKQorCisgICAgICAgICAgICBpZiBleHQgaW4gc2VsZi5fY19leHRlbnNpb25zOgorICAgICAgICAgICAgICAgIGlucHV0X29wdCA9ICIvVGMiICsgc3JjCisgICAgICAgICAgICBlbGlmIGV4dCBpbiBzZWxmLl9jcHBfZXh0ZW5zaW9uczoKKyAgICAgICAgICAgICAgICBpbnB1dF9vcHQgPSAiL1RwIiArIHNyYworICAgICAgICAgICAgICAgIGFkZF9jcHBfb3B0cyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgZXh0IGluIHNlbGYuX3JjX2V4dGVuc2lvbnM6CisgICAgICAgICAgICAgICAgIyBjb21waWxlIC5SQyB0byAuUkVTIGZpbGUKKyAgICAgICAgICAgICAgICBpbnB1dF9vcHQgPSBzcmMKKyAgICAgICAgICAgICAgICBvdXRwdXRfb3B0ID0gIi9mbyIgKyBvYmoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oW3NlbGYucmNdICsgcHBfb3B0cyArIFtvdXRwdXRfb3B0LCBpbnB1dF9vcHRdKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IobXNnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIGV4dCBpbiBzZWxmLl9tY19leHRlbnNpb25zOgorICAgICAgICAgICAgICAgICMgQ29tcGlsZSAuTUMgdG8gLlJDIGZpbGUgdG8gLlJFUyBmaWxlLgorICAgICAgICAgICAgICAgICMgICAqICctaCBkaXInIHNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IGZvciB0aGUKKyAgICAgICAgICAgICAgICAjICAgICBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlCisgICAgICAgICAgICAgICAgIyAgICogJy1yIGRpcicgc3BlY2lmaWVzIHRoZSB0YXJnZXQgZGlyZWN0b3J5IG9mIHRoZQorICAgICAgICAgICAgICAgICMgICAgIGdlbmVyYXRlZCBSQyBmaWxlIGFuZCB0aGUgYmluYXJ5IG1lc3NhZ2UgcmVzb3VyY2UKKyAgICAgICAgICAgICAgICAjICAgICBpdCBpbmNsdWRlcworICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEZvciBub3cgKHNpbmNlIHRoZXJlIGFyZSBubyBvcHRpb25zIHRvIGNoYW5nZSB0aGlzKSwKKyAgICAgICAgICAgICAgICAjIHdlIHVzZSB0aGUgc291cmNlLWRpcmVjdG9yeSBmb3IgdGhlIGluY2x1ZGUgZmlsZSBhbmQKKyAgICAgICAgICAgICAgICAjIHRoZSBidWlsZCBkaXJlY3RvcnkgZm9yIHRoZSBSQyBmaWxlIGFuZCBtZXNzYWdlCisgICAgICAgICAgICAgICAgIyByZXNvdXJjZXMuIFRoaXMgd29ya3MgYXQgbGVhc3QgZm9yIHdpbjMyYWxsLgorICAgICAgICAgICAgICAgIGhfZGlyID0gb3MucGF0aC5kaXJuYW1lKHNyYykKKyAgICAgICAgICAgICAgICByY19kaXIgPSBvcy5wYXRoLmRpcm5hbWUob2JqKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBjb21waWxlIC5NQyB0byAuUkMgYW5kIC5IIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbc2VsZi5tYywgJy1oJywgaF9kaXIsICctcicsIHJjX2Rpciwgc3JjXSkKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgXyA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZSAoc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgcmNfZmlsZSA9IG9zLnBhdGguam9pbihyY19kaXIsIGJhc2UgKyAnLnJjJykKKyAgICAgICAgICAgICAgICAgICAgIyB0aGVuIGNvbXBpbGUgLlJDIHRvIC5SRVMgZmlsZQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNwYXduKFtzZWxmLnJjLCAiL2ZvIiArIG9iaiwgcmNfZmlsZV0pCisKKyAgICAgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGhvdyB0byBoYW5kbGUgdGhpcyBmaWxlPworICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcigiRG9uJ3Qga25vdyBob3cgdG8gY29tcGlsZSB7fSB0byB7fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzcmMsIG9iaikpCisKKyAgICAgICAgICAgIGFyZ3MgPSBbc2VsZi5jY10gKyBjb21waWxlX29wdHMgKyBwcF9vcHRzCisgICAgICAgICAgICBpZiBhZGRfY3BwX29wdHM6CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoJy9FSHNjJykKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGlucHV0X29wdCkKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCIvRm8iICsgb2JqKQorICAgICAgICAgICAgYXJncy5leHRlbmQoZXh0cmFfcG9zdGFyZ3MpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNwYXduKGFyZ3MpCisgICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRXhlY0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICAgICByYWlzZSBDb21waWxlRXJyb3IobXNnKQorCisgICAgICAgIHJldHVybiBvYmplY3RzCisKKworICAgIGRlZiBjcmVhdGVfc3RhdGljX2xpYihzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfbGlibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKKworICAgICAgICBpZiBub3Qgc2VsZi5pbml0aWFsaXplZDoKKyAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZSgpCisgICAgICAgIG9iamVjdHMsIG91dHB1dF9kaXIgPSBzZWxmLl9maXhfb2JqZWN0X2FyZ3Mob2JqZWN0cywgb3V0cHV0X2RpcikKKyAgICAgICAgb3V0cHV0X2ZpbGVuYW1lID0gc2VsZi5saWJyYXJ5X2ZpbGVuYW1lKG91dHB1dF9saWJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Rpcj1vdXRwdXRfZGlyKQorCisgICAgICAgIGlmIHNlbGYuX25lZWRfbGluayhvYmplY3RzLCBvdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAgICAgbGliX2FyZ3MgPSBvYmplY3RzICsgWycvT1VUOicgKyBvdXRwdXRfZmlsZW5hbWVdCisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBwYXNzICMgWFhYIHdoYXQgZ29lcyBoZXJlPworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygnRXhlY3V0aW5nICIlcyIgJXMnLCBzZWxmLmxpYiwgJyAnLmpvaW4obGliX2FyZ3MpKQorICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oW3NlbGYubGliXSArIGxpYl9hcmdzKQorICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6CisgICAgICAgICAgICAgICAgcmFpc2UgTGliRXJyb3IobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmRlYnVnKCJza2lwcGluZyAlcyAodXAtdG8tZGF0ZSkiLCBvdXRwdXRfZmlsZW5hbWUpCisKKworICAgIGRlZiBsaW5rKHNlbGYsCisgICAgICAgICAgICAgdGFyZ2V0X2Rlc2MsCisgICAgICAgICAgICAgb2JqZWN0cywKKyAgICAgICAgICAgICBvdXRwdXRfZmlsZW5hbWUsCisgICAgICAgICAgICAgb3V0cHV0X2Rpcj1Ob25lLAorICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAorICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1Ob25lLAorICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsCisgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKKyAgICAgICAgICAgICBkZWJ1Zz0wLAorICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAorICAgICAgICAgICAgIGJ1aWxkX3RlbXA9Tm9uZSwKKyAgICAgICAgICAgICB0YXJnZXRfbGFuZz1Ob25lKToKKworICAgICAgICBpZiBub3Qgc2VsZi5pbml0aWFsaXplZDoKKyAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZSgpCisgICAgICAgIG9iamVjdHMsIG91dHB1dF9kaXIgPSBzZWxmLl9maXhfb2JqZWN0X2FyZ3Mob2JqZWN0cywgb3V0cHV0X2RpcikKKyAgICAgICAgZml4ZWRfYXJncyA9IHNlbGYuX2ZpeF9saWJfYXJncyhsaWJyYXJpZXMsIGxpYnJhcnlfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycykKKyAgICAgICAgbGlicmFyaWVzLCBsaWJyYXJ5X2RpcnMsIHJ1bnRpbWVfbGlicmFyeV9kaXJzID0gZml4ZWRfYXJncworCisgICAgICAgIGlmIHJ1bnRpbWVfbGlicmFyeV9kaXJzOgorICAgICAgICAgICAgc2VsZi53YXJuKCJJIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoICdydW50aW1lX2xpYnJhcnlfZGlycyc6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgKyBzdHIocnVudGltZV9saWJyYXJ5X2RpcnMpKQorCisgICAgICAgIGxpYl9vcHRzID0gZ2VuX2xpYl9vcHRpb25zKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycywgcnVudGltZV9saWJyYXJ5X2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcykKKyAgICAgICAgaWYgb3V0cHV0X2RpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCBvdXRwdXRfZmlsZW5hbWUpCisKKyAgICAgICAgaWYgc2VsZi5fbmVlZF9saW5rKG9iamVjdHMsIG91dHB1dF9maWxlbmFtZSk6CisgICAgICAgICAgICBsZGZsYWdzID0gc2VsZi5fbGRmbGFnc1t0YXJnZXRfZGVzYywgZGVidWddCisKKyAgICAgICAgICAgIGV4cG9ydF9vcHRzID0gWyIvRVhQT1JUOiIgKyBzeW0gZm9yIHN5bSBpbiAoZXhwb3J0X3N5bWJvbHMgb3IgW10pXQorCisgICAgICAgICAgICBsZF9hcmdzID0gKGxkZmxhZ3MgKyBsaWJfb3B0cyArIGV4cG9ydF9vcHRzICsKKyAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyArIFsnL09VVDonICsgb3V0cHV0X2ZpbGVuYW1lXSkKKworICAgICAgICAgICAgIyBUaGUgTVNWQyBsaW5rZXIgZ2VuZXJhdGVzIC5saWIgYW5kIC5leHAgZmlsZXMsIHdoaWNoIGNhbm5vdCBiZQorICAgICAgICAgICAgIyBzdXBwcmVzc2VkIGJ5IGFueSBsaW5rZXIgc3dpdGNoZXMuIFRoZSAubGliIGZpbGVzIG1heSBldmVuIGJlCisgICAgICAgICAgICAjIG5lZWRlZCEgTWFrZSBzdXJlIHRoZXkgYXJlIGdlbmVyYXRlZCBpbiB0aGUgdGVtcG9yYXJ5IGJ1aWxkCisgICAgICAgICAgICAjIGRpcmVjdG9yeS4gU2luY2UgdGhleSBoYXZlIGRpZmZlcmVudCBuYW1lcyBmb3IgZGVidWcgYW5kIHJlbGVhc2UKKyAgICAgICAgICAgICMgYnVpbGRzLCB0aGV5IGNhbiBnbyBpbnRvIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIGJ1aWxkX3RlbXAgPSBvcy5wYXRoLmRpcm5hbWUob2JqZWN0c1swXSkKKyAgICAgICAgICAgIGlmIGV4cG9ydF9zeW1ib2xzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIChkbGxfbmFtZSwgZGxsX2V4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0KAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKG91dHB1dF9maWxlbmFtZSkpCisgICAgICAgICAgICAgICAgaW1wbGliX2ZpbGUgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXAsCisgICAgICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9maWxlbmFtZShkbGxfbmFtZSkpCisgICAgICAgICAgICAgICAgbGRfYXJncy5hcHBlbmQgKCcvSU1QTElCOicgKyBpbXBsaWJfZmlsZSkKKworICAgICAgICAgICAgaWYgZXh0cmFfcHJlYXJnczoKKyAgICAgICAgICAgICAgICBsZF9hcmdzWzowXSA9IGV4dHJhX3ByZWFyZ3MKKyAgICAgICAgICAgIGlmIGV4dHJhX3Bvc3RhcmdzOgorICAgICAgICAgICAgICAgIGxkX2FyZ3MuZXh0ZW5kKGV4dHJhX3Bvc3RhcmdzKQorCisgICAgICAgICAgICBvdXRwdXRfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChvdXRwdXRfZmlsZW5hbWUpKQorICAgICAgICAgICAgc2VsZi5ta3BhdGgob3V0cHV0X2RpcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoJ0V4ZWN1dGluZyAiJXMiICVzJywgc2VsZi5saW5rZXIsICcgJy5qb2luKGxkX2FyZ3MpKQorICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oW3NlbGYubGlua2VyXSArIGxkX2FyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5fY29weV92Y3J1bnRpbWUob3V0cHV0X2RpcikKKyAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgICAgIHJhaXNlIExpbmtFcnJvcihtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2cuZGVidWcoInNraXBwaW5nICVzICh1cC10by1kYXRlKSIsIG91dHB1dF9maWxlbmFtZSkKKworICAgIGRlZiBfY29weV92Y3J1bnRpbWUoc2VsZiwgb3V0cHV0X2Rpcik6CisgICAgICAgIHZjcnVudGltZSA9IHNlbGYuX3ZjcnVudGltZV9yZWRpc3QKKyAgICAgICAgaWYgbm90IHZjcnVudGltZSBvciBub3Qgb3MucGF0aC5pc2ZpbGUodmNydW50aW1lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUodmNydW50aW1lKS5sb3dlcigpIGluIF9CVU5ETEVEX0RMTFM6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsb2cuZGVidWcoJ0NvcHlpbmcgIiVzIicsIHZjcnVudGltZSkKKyAgICAgICAgdmNydW50aW1lID0gc2h1dGlsLmNvcHkodmNydW50aW1lLCBvdXRwdXRfZGlyKQorICAgICAgICBvcy5jaG1vZCh2Y3J1bnRpbWUsIHN0YXQuU19JV1JJVEUpCisKKyAgICBkZWYgc3Bhd24oc2VsZiwgY21kKToKKyAgICAgICAgb2xkX3BhdGggPSBvcy5nZXRlbnYoJ3BhdGgnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5lbnZpcm9uWydwYXRoJ10gPSBzZWxmLl9wYXRocworICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuc3Bhd24oY21kKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuZW52aXJvblsncGF0aCddID0gb2xkX3BhdGgKKworICAgICMgLS0gTWlzY2VsbGFuZW91cyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBUaGVzZSBhcmUgYWxsIHVzZWQgYnkgdGhlICdnZW5fbGliX29wdGlvbnMoKSBmdW5jdGlvbiwgaW4KKyAgICAjIGNjb21waWxlci5weS4KKworICAgIGRlZiBsaWJyYXJ5X2Rpcl9vcHRpb24oc2VsZiwgZGlyKToKKyAgICAgICAgcmV0dXJuICIvTElCUEFUSDoiICsgZGlyCisKKyAgICBkZWYgcnVudGltZV9saWJyYXJ5X2Rpcl9vcHRpb24oc2VsZiwgZGlyKToKKyAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKKyAgICAgICAgICAgICAgImRvbid0IGtub3cgaG93IHRvIHNldCBydW50aW1lIGxpYnJhcnkgc2VhcmNoIHBhdGggZm9yIE1TVkMiKQorCisgICAgZGVmIGxpYnJhcnlfb3B0aW9uKHNlbGYsIGxpYik6CisgICAgICAgIHJldHVybiBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliKQorCisgICAgZGVmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsIGRpcnMsIGxpYiwgZGVidWc9MCk6CisgICAgICAgICMgUHJlZmVyIGEgZGVidWdnaW5nIGxpYnJhcnkgaWYgZm91bmQgKGFuZCByZXF1ZXN0ZWQpLCBidXQgZGVhbAorICAgICAgICAjIHdpdGggaXQgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUuCisgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgdHJ5X25hbWVzID0gW2xpYiArICJfZCIsIGxpYl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeV9uYW1lcyA9IFtsaWJdCisgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgIGZvciBuYW1lIGluIHRyeV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaWJmaWxlID0gb3MucGF0aC5qb2luKGRpciwgc2VsZi5saWJyYXJ5X2ZpbGVuYW1lKG5hbWUpKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGxpYmZpbGUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGliZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPb3BzLCBkaWRuJ3QgZmluZCBpdCBpbiAqYW55KiBvZiAnZGlycycKKyAgICAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CmluZGV4IDQ0NzBiYjAuLmJlZDEzODQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CkBAIC01NywyNiArNTcsMjggQEAKICAgICAiIiJDcmVhdGUgYSAocG9zc2libHkgY29tcHJlc3NlZCkgdGFyIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyCiAgICAgJ2Jhc2VfZGlyJy4KIAotICAgICdjb21wcmVzcycgbXVzdCBiZSAiZ3ppcCIgKHRoZSBkZWZhdWx0KSwgImNvbXByZXNzIiwgImJ6aXAyIiwgb3IgTm9uZS4KLSAgICAoY29tcHJlc3Mgd2lsbCBiZSBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIpCisgICAgJ2NvbXByZXNzJyBtdXN0IGJlICJnemlwIiAodGhlIGRlZmF1bHQpLCAiYnppcDIiLCAieHoiLCAiY29tcHJlc3MiLCBvcgorICAgIE5vbmUuICAoImNvbXByZXNzIiB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMikKIAogICAgICdvd25lcicgYW5kICdncm91cCcgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIG93bmVyIGFuZCBhIGdyb3VwIGZvciB0aGUKICAgICBhcmNoaXZlIHRoYXQgaXMgYmVpbmcgYnVpbHQuIElmIG5vdCBwcm92aWRlZCwgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwCiAgICAgd2lsbCBiZSB1c2VkLgogCiAgICAgVGhlIG91dHB1dCB0YXIgZmlsZSB3aWxsIGJlIG5hbWVkICdiYXNlX2RpcicgKyAgIi50YXIiLCBwb3NzaWJseSBwbHVzCi0gICAgdGhlIGFwcHJvcHJpYXRlIGNvbXByZXNzaW9uIGV4dGVuc2lvbiAoIi5neiIsICIuYnoyIiBvciAiLloiKS4KKyAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6IiwgIi5iejIiLCAiLnh6IiBvciAiLloiKS4KIAogICAgIFJldHVybnMgdGhlIG91dHB1dCBmaWxlbmFtZS4KICAgICAiIiIKLSAgICB0YXJfY29tcHJlc3Npb24gPSB7J2d6aXAnOiAnZ3onLCAnYnppcDInOiAnYnoyJywgTm9uZTogJycsICdjb21wcmVzcyc6ICcnfQotICAgIGNvbXByZXNzX2V4dCA9IHsnZ3ppcCc6ICcuZ3onLCAnYnppcDInOiAnLmJ6MicsICdjb21wcmVzcyc6ICcuWid9CisgICAgdGFyX2NvbXByZXNzaW9uID0geydnemlwJzogJ2d6JywgJ2J6aXAyJzogJ2J6MicsICd4eic6ICd4eicsIE5vbmU6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAnY29tcHJlc3MnOiAnJ30KKyAgICBjb21wcmVzc19leHQgPSB7J2d6aXAnOiAnLmd6JywgJ2J6aXAyJzogJy5iejInLCAneHonOiAnLnh6JywKKyAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzJzogJy5aJ30KIAogICAgICMgZmxhZ3MgZm9yIGNvbXByZXNzaW9uIHByb2dyYW0sIGVhY2ggZWxlbWVudCBvZiBsaXN0IHdpbGwgYmUgYW4gYXJndW1lbnQKICAgICBpZiBjb21wcmVzcyBpcyBub3QgTm9uZSBhbmQgY29tcHJlc3Mgbm90IGluIGNvbXByZXNzX2V4dC5rZXlzKCk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCi0gICAgICAgICAgICAgICJiYWQgdmFsdWUgZm9yICdjb21wcmVzcyc6IG11c3QgYmUgTm9uZSwgJ2d6aXAnLCAnYnppcDInICIKLSAgICAgICAgICAgICAgIm9yICdjb21wcmVzcyciKQorICAgICAgICAgICAgICAiYmFkIHZhbHVlIGZvciAnY29tcHJlc3MnOiBtdXN0IGJlIE5vbmUsICdnemlwJywgJ2J6aXAyJywgIgorICAgICAgICAgICAgICAiJ3h6JyBvciAnY29tcHJlc3MnIikKIAogICAgIGFyY2hpdmVfbmFtZSA9IGJhc2VfbmFtZSArICcudGFyJwogICAgIGlmIGNvbXByZXNzICE9ICdjb21wcmVzcyc6CkBAIC0xNzcsNiArMTc5LDcgQEAKIEFSQ0hJVkVfRk9STUFUUyA9IHsKICAgICAnZ3p0YXInOiAobWFrZV90YXJiYWxsLCBbKCdjb21wcmVzcycsICdnemlwJyldLCAiZ3ppcCdlZCB0YXItZmlsZSIpLAogICAgICdienRhcic6IChtYWtlX3RhcmJhbGwsIFsoJ2NvbXByZXNzJywgJ2J6aXAyJyldLCAiYnppcDInZWQgdGFyLWZpbGUiKSwKKyAgICAneHp0YXInOiAobWFrZV90YXJiYWxsLCBbKCdjb21wcmVzcycsICd4eicpXSwgInh6J2VkIHRhci1maWxlIiksCiAgICAgJ3p0YXInOiAgKG1ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCAnY29tcHJlc3MnKV0sICJjb21wcmVzc2VkIHRhciBmaWxlIiksCiAgICAgJ3Rhcic6ICAgKG1ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCBOb25lKV0sICJ1bmNvbXByZXNzZWQgdGFyIGZpbGUiKSwKICAgICAnemlwJzogICAobWFrZV96aXBmaWxlLCBbXSwiWklQIGZpbGUiKQpAQCAtMTk3LDggKzIwMCw4IEBACiAgICAgIiIiQ3JlYXRlIGFuIGFyY2hpdmUgZmlsZSAoZWcuIHppcCBvciB0YXIpLgogCiAgICAgJ2Jhc2VfbmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBtaW51cyBhbnkgZm9ybWF0LXNwZWNpZmljCi0gICAgZXh0ZW5zaW9uOyAnZm9ybWF0JyBpcyB0aGUgYXJjaGl2ZSBmb3JtYXQ6IG9uZSBvZiAiemlwIiwgInRhciIsICJ6dGFyIiwKLSAgICBvciAiZ3p0YXIiLgorICAgIGV4dGVuc2lvbjsgJ2Zvcm1hdCcgaXMgdGhlIGFyY2hpdmUgZm9ybWF0OiBvbmUgb2YgInppcCIsICJ0YXIiLCAiZ3p0YXIiLAorICAgICJienRhciIsICJ4enRhciIsIG9yICJ6dGFyIi4KIAogICAgICdyb290X2RpcicgaXMgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUKICAgICBhcmNoaXZlOyBpZS4gd2UgdHlwaWNhbGx5IGNoZGlyIGludG8gJ3Jvb3RfZGlyJyBiZWZvcmUgY3JlYXRpbmcgdGhlCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CmluZGV4IGU5M2EyNzMuLmI3MWQxZDMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CkBAIC04NzUsOSArODc1LDkgQEAKICAgICBkZWYgbGlicmFyeV9maWxlbmFtZShzZWxmLCBsaWJuYW1lLCBsaWJfdHlwZT0nc3RhdGljJywgICAgICMgb3IgJ3NoYXJlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcF9kaXI9MCwgb3V0cHV0X2Rpcj0nJyk6CiAgICAgICAgIGFzc2VydCBvdXRwdXRfZGlyIGlzIG5vdCBOb25lCi0gICAgICAgIGlmIGxpYl90eXBlIG5vdCBpbiAoInN0YXRpYyIsICJzaGFyZWQiLCAiZHlsaWIiKToKKyAgICAgICAgaWYgbGliX3R5cGUgbm90IGluICgic3RhdGljIiwgInNoYXJlZCIsICJkeWxpYiIsICJ4Y29kZV9zdHViIik6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAotICAgICAgICAgICAgICAgICAgIidsaWJfdHlwZScgbXVzdCBiZSBcInN0YXRpY1wiLCBcInNoYXJlZFwiIG9yIFwiZHlsaWJcIiIpCisgICAgICAgICAgICAgICAgICAiJ2xpYl90eXBlJyBtdXN0IGJlIFwic3RhdGljXCIsIFwic2hhcmVkXCIsIFwiZHlsaWJcIiwgb3IgXCJ4Y29kZV9zdHViXCIiKQogICAgICAgICBmbXQgPSBnZXRhdHRyKHNlbGYsIGxpYl90eXBlICsgIl9saWJfZm9ybWF0IikKICAgICAgICAgZXh0ID0gZ2V0YXR0cihzZWxmLCBsaWJfdHlwZSArICJfbGliX2V4dGVuc2lvbiIpCiAKQEAgLTk1OSw3ICs5NTksNyBAQAogIyBpcyBhc3N1bWVkIHRvIGJlIGluIHRoZSAnZGlzdHV0aWxzJyBwYWNrYWdlLikKIGNvbXBpbGVyX2NsYXNzID0geyAndW5peCc6ICAgICgndW5peGNjb21waWxlcicsICdVbml4Q0NvbXBpbGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhbmRhcmQgVU5JWC1zdHlsZSBjb21waWxlciIpLAotICAgICAgICAgICAgICAgICAgICdtc3ZjJzogICAgKCdtc3ZjY29tcGlsZXInLCAnTVNWQ0NvbXBpbGVyJywKKyAgICAgICAgICAgICAgICAgICAnbXN2Yyc6ICAgICgnX21zdmNjb21waWxlcicsICdNU1ZDQ29tcGlsZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaWNyb3NvZnQgVmlzdWFsIEMrKyIpLAogICAgICAgICAgICAgICAgICAgICdjeWd3aW4nOiAgKCdjeWd3aW5jY29tcGlsZXInLCAnQ3lnd2luQ0NvbXBpbGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3lnd2luIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIFdpbjMyIiksCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKaW5kZXggNjgxNGExYy4uMDE0ODcxZCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQpAQCAtNjEsMTMgKzYxLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCd9CiAKICAgICAjIEVzdGFibGlzaCB0aGUgcHJlZmVycmVkIG9yZGVyIChmb3IgdGhlIC0taGVscC1mb3JtYXRzIG9wdGlvbikuCi0gICAgZm9ybWF0X2NvbW1hbmRzID0gWydycG0nLCAnZ3p0YXInLCAnYnp0YXInLCAnenRhcicsICd0YXInLAorICAgIGZvcm1hdF9jb21tYW5kcyA9IFsncnBtJywgJ2d6dGFyJywgJ2J6dGFyJywgJ3h6dGFyJywgJ3p0YXInLCAndGFyJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbmluc3QnLCAnemlwJywgJ21zaSddCiAKICAgICAjIEFuZCB0aGUgcmVhbCBpbmZvcm1hdGlvbi4KICAgICBmb3JtYXRfY29tbWFuZCA9IHsncnBtJzogICAoJ2JkaXN0X3JwbScsICAiUlBNIGRpc3RyaWJ1dGlvbiIpLAogICAgICAgICAgICAgICAgICAgICAgICdnenRhcic6ICgnYmRpc3RfZHVtYicsICJnemlwJ2VkIHRhciBmaWxlIiksCiAgICAgICAgICAgICAgICAgICAgICAgJ2J6dGFyJzogKCdiZGlzdF9kdW1iJywgImJ6aXAyJ2VkIHRhciBmaWxlIiksCisgICAgICAgICAgICAgICAgICAgICAgJ3h6dGFyJzogKCdiZGlzdF9kdW1iJywgInh6J2VkIHRhciBmaWxlIiksCiAgICAgICAgICAgICAgICAgICAgICAgJ3p0YXInOiAgKCdiZGlzdF9kdW1iJywgImNvbXByZXNzZWQgdGFyIGZpbGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAndGFyJzogICAoJ2JkaXN0X2R1bWInLCAidGFyIGZpbGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAnd2luaW5zdCc6ICgnYmRpc3Rfd2luaW5zdCcsCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CmluZGV4IDQ0MDVkMTIuLmYxYmZiMjQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5CkBAIC0yMiw3ICsyMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAicGxhdGZvcm0gbmFtZSB0byBlbWJlZCBpbiBnZW5lcmF0ZWQgZmlsZW5hbWVzICIKICAgICAgICAgICAgICAgICAgICAgICIoZGVmYXVsdDogJXMpIiAlIGdldF9wbGF0Zm9ybSgpKSwKICAgICAgICAgICAgICAgICAgICAgKCdmb3JtYXQ9JywgJ2YnLAotICAgICAgICAgICAgICAgICAgICAgImFyY2hpdmUgZm9ybWF0IHRvIGNyZWF0ZSAodGFyLCB6dGFyLCBnenRhciwgemlwKSIpLAorICAgICAgICAgICAgICAgICAgICAgImFyY2hpdmUgZm9ybWF0IHRvIGNyZWF0ZSAodGFyLCBnenRhciwgYnp0YXIsIHh6dGFyLCAiCisgICAgICAgICAgICAgICAgICAgICAienRhciwgemlwKSIpLAogICAgICAgICAgICAgICAgICAgICAoJ2tlZXAtdGVtcCcsICdrJywKICAgICAgICAgICAgICAgICAgICAgICJrZWVwIHRoZSBwc2V1ZG8taW5zdGFsbGF0aW9uIHRyZWUgYXJvdW5kIGFmdGVyICIgKwogICAgICAgICAgICAgICAgICAgICAgImNyZWF0aW5nIHRoZSBkaXN0cmlidXRpb24gYXJjaGl2ZSIpLApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X3dpbmluc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3Rfd2luaW5zdC5weQppbmRleCA5NTlhOGJmLi4wYzBlMmMxIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3Rfd2luaW5zdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3Rfd2luaW5zdC5weQpAQCAtMzAzLDcgKzMwMyw2IEBACiAgICAgICAgIHJldHVybiBpbnN0YWxsZXJfbmFtZQogCiAgICAgZGVmIGdldF9leGVfYnl0ZXMoc2VsZik6Ci0gICAgICAgIGZyb20gZGlzdHV0aWxzLm1zdmNjb21waWxlciBpbXBvcnQgZ2V0X2J1aWxkX3ZlcnNpb24KICAgICAgICAgIyBJZiBhIHRhcmdldC12ZXJzaW9uIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBoYXMgYmVlbgogICAgICAgICAjIHNwZWNpZmllZCwgdGhlbiB1c2luZyB0aGUgTVNWQyB2ZXJzaW9uIGZyb20gKnRoaXMqIGJ1aWxkIGlzIG5vIGdvb2QuCiAgICAgICAgICMgV2l0aG91dCBhY3R1YWxseSBmaW5kaW5nIGFuZCBleGVjdXRpbmcgdGhlIHRhcmdldCB2ZXJzaW9uIGFuZCBwYXJzaW5nCkBAIC0zMTMsMjAgKzMxMiwzMyBAQAogICAgICAgICAjIFdlIGNhbiB0aGVuIGV4ZWN1dGUgdGhpcyBwcm9ncmFtIHRvIG9idGFpbiBhbnkgaW5mbyB3ZSBuZWVkLCBzdWNoCiAgICAgICAgICMgYXMgdGhlIHJlYWwgc3lzLnZlcnNpb24gc3RyaW5nIGZvciB0aGUgYnVpbGQuCiAgICAgICAgIGN1cl92ZXJzaW9uID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkKLSAgICAgICAgaWYgc2VsZi50YXJnZXRfdmVyc2lvbiBhbmQgc2VsZi50YXJnZXRfdmVyc2lvbiAhPSBjdXJfdmVyc2lvbjoKLSAgICAgICAgICAgICMgSWYgdGhlIHRhcmdldCB2ZXJzaW9uIGlzICpsYXRlciogdGhhbiB1cywgdGhlbiB3ZSBhc3N1bWUgdGhleQotICAgICAgICAgICAgIyB1c2Ugd2hhdCB3ZSB1c2UKLSAgICAgICAgICAgICMgc3RyaW5nIGNvbXBhcmVzIHNlZW0gd3JvbmcsIGJ1dCBhcmUgd2hhdCBzeXNjb25maWcucHkgaXRzZWxmIHVzZXMKLSAgICAgICAgICAgIGlmIHNlbGYudGFyZ2V0X3ZlcnNpb24gPiBjdXJfdmVyc2lvbjoKLSAgICAgICAgICAgICAgICBidiA9IGdldF9idWlsZF92ZXJzaW9uKCkKKworICAgICAgICAjIElmIHRoZSB0YXJnZXQgdmVyc2lvbiBpcyAqbGF0ZXIqIHRoYW4gdXMsIHRoZW4gd2UgYXNzdW1lIHRoZXkKKyAgICAgICAgIyB1c2Ugd2hhdCB3ZSB1c2UKKyAgICAgICAgIyBzdHJpbmcgY29tcGFyZXMgc2VlbSB3cm9uZywgYnV0IGFyZSB3aGF0IHN5c2NvbmZpZy5weSBpdHNlbGYgdXNlcworICAgICAgICBpZiBzZWxmLnRhcmdldF92ZXJzaW9uIGFuZCBzZWxmLnRhcmdldF92ZXJzaW9uIDwgY3VyX3ZlcnNpb246CisgICAgICAgICAgICBpZiBzZWxmLnRhcmdldF92ZXJzaW9uIDwgIjIuNCI6CisgICAgICAgICAgICAgICAgYnYgPSA2LjAKKyAgICAgICAgICAgIGVsaWYgc2VsZi50YXJnZXRfdmVyc2lvbiA9PSAiMi40IjoKKyAgICAgICAgICAgICAgICBidiA9IDcuMQorICAgICAgICAgICAgZWxpZiBzZWxmLnRhcmdldF92ZXJzaW9uID09ICIyLjUiOgorICAgICAgICAgICAgICAgIGJ2ID0gOC4wCisgICAgICAgICAgICBlbGlmIHNlbGYudGFyZ2V0X3ZlcnNpb24gPD0gIjMuMiI6CisgICAgICAgICAgICAgICAgYnYgPSA5LjAKKyAgICAgICAgICAgIGVsaWYgc2VsZi50YXJnZXRfdmVyc2lvbiA8PSAiMy40IjoKKyAgICAgICAgICAgICAgICBidiA9IDEwLjAKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi50YXJnZXRfdmVyc2lvbiA8ICIyLjQiOgotICAgICAgICAgICAgICAgICAgICBidiA9IDYuMAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGJ2ID0gNy4xCisgICAgICAgICAgICAgICAgYnYgPSAxNC4wCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGZvciBjdXJyZW50IHZlcnNpb24gLSB1c2UgYXV0aG9yaXRhdGl2ZSBjaGVjay4KLSAgICAgICAgICAgIGJ2ID0gZ2V0X2J1aWxkX3ZlcnNpb24oKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZyb20gbXN2Y3J0IGltcG9ydCBDUlRfQVNTRU1CTFlfVkVSU0lPTgorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgICMgY3Jvc3MtYnVpbGRpbmcsIHNvIGFzc3VtZSB0aGUgbGF0ZXN0IHZlcnNpb24KKyAgICAgICAgICAgICAgICBidiA9IDE0LjAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnYgPSBmbG9hdCgnLicuam9pbihDUlRfQVNTRU1CTFlfVkVSU0lPTi5zcGxpdCgnLicsIDIpWzoyXSkpCisKIAogICAgICAgICAjIHdpbmluc3QteC55LmV4ZSBpcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhpcyBmaWxlCiAgICAgICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZC5weQppbmRleCBjZmMxNWNmLi4zMzdkZDBiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkLnB5CkBAIC0zNiw2ICszNiw4IEBACiAgICAgICAgICAiKGRlZmF1bHQ6ICVzKSIgJSBnZXRfcGxhdGZvcm0oKSksCiAgICAgICAgICgnY29tcGlsZXI9JywgJ2MnLAogICAgICAgICAgInNwZWNpZnkgdGhlIGNvbXBpbGVyIHR5cGUiKSwKKyAgICAgICAgKCdwYXJhbGxlbD0nLCAnaicsCisgICAgICAgICAibnVtYmVyIG9mIHBhcmFsbGVsIGJ1aWxkIGpvYnMiKSwKICAgICAgICAgKCdkZWJ1ZycsICdnJywKICAgICAgICAgICJjb21waWxlIGV4dGVuc2lvbnMgYW5kIGxpYnJhcmllcyB3aXRoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiIpLAogICAgICAgICAoJ2ZvcmNlJywgJ2YnLApAQCAtNjUsNiArNjcsNyBAQAogICAgICAgICBzZWxmLmRlYnVnID0gTm9uZQogICAgICAgICBzZWxmLmZvcmNlID0gMAogICAgICAgICBzZWxmLmV4ZWN1dGFibGUgPSBOb25lCisgICAgICAgIHNlbGYucGFyYWxsZWwgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5wbGF0X25hbWUgaXMgTm9uZToKQEAgLTExNiw2ICsxMTksMTIgQEAKICAgICAgICAgaWYgc2VsZi5leGVjdXRhYmxlIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFibGUgPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjdXRhYmxlKQogCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5wYXJhbGxlbCwgc3RyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFsbGVsID0gaW50KHNlbGYucGFyYWxsZWwpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvcigicGFyYWxsZWwgc2hvdWxkIGJlIGFuIGludGVnZXIiKQorCiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgIyBSdW4gYWxsIHJlbGV2YW50IHN1Yi1jb21tYW5kcy4gIFRoaXMgd2lsbCBiZSBzb21lIHN1YnNldCBvZjoKICAgICAgICAgIyAgLSBidWlsZF9weSAgICAgIC0gcHVyZSBQeXRob24gbW9kdWxlcwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKaW5kZXggYWNiZTY0OC4uZjAzYTRlMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CkBAIC00LDcgKzQsMTAgQEAKIG1vZHVsZXMgKGN1cnJlbnRseSBsaW1pdGVkIHRvIEMgZXh0ZW5zaW9ucywgc2hvdWxkIGFjY29tbW9kYXRlIEMrKwogZXh0ZW5zaW9ucyBBU0FQKS4iIiIKIAotaW1wb3J0IHN5cywgb3MsIHJlCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IENvbW1hbmQKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgogZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBjdXN0b21pemVfY29tcGlsZXIsIGdldF9weXRob25fdmVyc2lvbgpAQCAtMTYsMTAgKzE5LDYgQEAKIAogZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKIAotaWYgb3MubmFtZSA9PSAnbnQnOgotICAgIGZyb20gZGlzdHV0aWxzLm1zdmNjb21waWxlciBpbXBvcnQgZ2V0X2J1aWxkX3ZlcnNpb24KLSAgICBNU1ZDX1ZFUlNJT04gPSBpbnQoZ2V0X2J1aWxkX3ZlcnNpb24oKSkKLQogIyBBbiBleHRlbnNpb24gbmFtZSBpcyBqdXN0IGEgZG90LXNlcGFyYXRlZCBsaXN0IG9mIFB5dGhvbiBOQU1FcyAoaWUuCiAjIHRoZSBzYW1lIGFzIGEgZnVsbHktcXVhbGlmaWVkIG1vZHVsZSBuYW1lKS4KIGV4dGVuc2lvbl9uYW1lX3JlID0gcmUuY29tcGlsZSBcCkBAIC04NSw2ICs4NCw4IEBACiAgICAgICAgICAiZm9yY2libHkgYnVpbGQgZXZlcnl0aGluZyAoaWdub3JlIGZpbGUgdGltZXN0YW1wcykiKSwKICAgICAgICAgKCdjb21waWxlcj0nLCAnYycsCiAgICAgICAgICAic3BlY2lmeSB0aGUgY29tcGlsZXIgdHlwZSIpLAorICAgICAgICAoJ3BhcmFsbGVsPScsICdqJywKKyAgICAgICAgICJudW1iZXIgb2YgcGFyYWxsZWwgYnVpbGQgam9icyIpLAogICAgICAgICAoJ3N3aWctY3BwJywgTm9uZSwKICAgICAgICAgICJtYWtlIFNXSUcgY3JlYXRlIEMrKyBmaWxlcyAoZGVmYXVsdCBpcyBDKSIpLAogICAgICAgICAoJ3N3aWctb3B0cz0nLCBOb25lLApAQCAtMTI0LDYgKzEyNSw3IEBACiAgICAgICAgIHNlbGYuc3dpZ19jcHAgPSBOb25lCiAgICAgICAgIHNlbGYuc3dpZ19vcHRzID0gTm9uZQogICAgICAgICBzZWxmLnVzZXIgPSBOb25lCisgICAgICAgIHNlbGYucGFyYWxsZWwgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwpAQCAtMTM0LDYgKzEzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnY29tcGlsZXInLCAnY29tcGlsZXInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkZWJ1ZycsICdkZWJ1ZycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2ZvcmNlJywgJ2ZvcmNlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncGFyYWxsZWwnLCAncGFyYWxsZWwnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdwbGF0X25hbWUnLCAncGxhdF9uYW1lJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIApAQCAtMTk5LDI3ICsyMDIsMTcgQEAKICAgICAgICAgICAgIF9zeXNfaG9tZSA9IGdldGF0dHIoc3lzLCAnX2hvbWUnLCBOb25lKQogICAgICAgICAgICAgaWYgX3N5c19ob21lOgogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChfc3lzX2hvbWUpCi0gICAgICAgICAgICBpZiBNU1ZDX1ZFUlNJT04gPj0gOToKLSAgICAgICAgICAgICAgICAjIFVzZSB0aGUgLmxpYiBmaWxlcyBmb3IgdGhlIGNvcnJlY3QgYXJjaGl0ZWN0dXJlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5wbGF0X25hbWUgPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgICAgICAgICAgc3VmZml4ID0gJycKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIHdpbi1hbWQ2NCBvciB3aW4taWE2NAotICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSBzZWxmLnBsYXRfbmFtZVs0Ol0KLSAgICAgICAgICAgICAgICBuZXdfbGliID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgJ1BDYnVpbGQnKQotICAgICAgICAgICAgICAgIGlmIHN1ZmZpeDoKLSAgICAgICAgICAgICAgICAgICAgbmV3X2xpYiA9IG9zLnBhdGguam9pbihuZXdfbGliLCBzdWZmaXgpCi0gICAgICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG5ld19saWIpCiAKLSAgICAgICAgICAgIGVsaWYgTVNWQ19WRVJTSU9OID09IDg6Ci0gICAgICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQycsICdWUzguMCcpKQotICAgICAgICAgICAgZWxpZiBNU1ZDX1ZFUlNJT04gPT0gNzoKLSAgICAgICAgICAgICAgICBzZWxmLmxpYnJhcnlfZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BDJywgJ1ZTNy4xJykpCisgICAgICAgICAgICAjIFVzZSB0aGUgLmxpYiBmaWxlcyBmb3IgdGhlIGNvcnJlY3QgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICBpZiBzZWxmLnBsYXRfbmFtZSA9PSAnd2luMzInOgorICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICd3aW4zMicKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQycsICdWQzYnKSkKKyAgICAgICAgICAgICAgICAjIHdpbi1hbWQ2NCBvciB3aW4taWE2NAorICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHNlbGYucGxhdF9uYW1lWzQ6XQorICAgICAgICAgICAgbmV3X2xpYiA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdQQ2J1aWxkJykKKyAgICAgICAgICAgIGlmIHN1ZmZpeDoKKyAgICAgICAgICAgICAgICBuZXdfbGliID0gb3MucGF0aC5qb2luKG5ld19saWIsIHN1ZmZpeCkKKyAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChuZXdfbGliKQogCiAgICAgICAgICMgZm9yIGV4dGVuc2lvbnMgdW5kZXIgQ3lnd2luIGFuZCBBdGhlT1MgUHl0aG9uJ3MgbGlicmFyeSBkaXJlY3RvcnkgbXVzdCBiZQogICAgICAgICAjIGFwcGVuZGVkIHRvIGxpYnJhcnlfZGlycwpAQCAtMjc0LDYgKzI2NywxMiBAQAogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZCh1c2VyX2xpYikKICAgICAgICAgICAgICAgICBzZWxmLnJwYXRoLmFwcGVuZCh1c2VyX2xpYikKIAorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYucGFyYWxsZWwsIHN0cik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbGxlbCA9IGludChzZWxmLnBhcmFsbGVsKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzT3B0aW9uRXJyb3IoInBhcmFsbGVsIHNob3VsZCBiZSBhbiBpbnRlZ2VyIikKKwogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIGZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgbmV3X2NvbXBpbGVyCiAKQEAgLTQ0MiwxNSArNDQxLDQ1IEBACiAgICAgZGVmIGJ1aWxkX2V4dGVuc2lvbnMoc2VsZik6CiAgICAgICAgICMgRmlyc3QsIHNhbml0eS1jaGVjayB0aGUgJ2V4dGVuc2lvbnMnIGxpc3QKICAgICAgICAgc2VsZi5jaGVja19leHRlbnNpb25zX2xpc3Qoc2VsZi5leHRlbnNpb25zKQorICAgICAgICBpZiBzZWxmLnBhcmFsbGVsOgorICAgICAgICAgICAgc2VsZi5fYnVpbGRfZXh0ZW5zaW9uc19wYXJhbGxlbCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9idWlsZF9leHRlbnNpb25zX3NlcmlhbCgpCiAKKyAgICBkZWYgX2J1aWxkX2V4dGVuc2lvbnNfcGFyYWxsZWwoc2VsZik6CisgICAgICAgIHdvcmtlcnMgPSBzZWxmLnBhcmFsbGVsCisgICAgICAgIGlmIHNlbGYucGFyYWxsZWwgaXMgVHJ1ZToKKyAgICAgICAgICAgIHdvcmtlcnMgPSBvcy5jcHVfY291bnQoKSAgIyBtYXkgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFRocmVhZFBvb2xFeGVjdXRvcgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICB3b3JrZXJzID0gTm9uZQorCisgICAgICAgIGlmIHdvcmtlcnMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2J1aWxkX2V4dGVuc2lvbnNfc2VyaWFsKCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdpdGggVGhyZWFkUG9vbEV4ZWN1dG9yKG1heF93b3JrZXJzPXdvcmtlcnMpIGFzIGV4ZWN1dG9yOgorICAgICAgICAgICAgZnV0dXJlcyA9IFtleGVjdXRvci5zdWJtaXQoc2VsZi5idWlsZF9leHRlbnNpb24sIGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnNdCisgICAgICAgICAgICBmb3IgZXh0LCBmdXQgaW4gemlwKHNlbGYuZXh0ZW5zaW9ucywgZnV0dXJlcyk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9maWx0ZXJfYnVpbGRfZXJyb3JzKGV4dCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5yZXN1bHQoKQorCisgICAgZGVmIF9idWlsZF9leHRlbnNpb25zX3NlcmlhbChzZWxmKToKICAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnM6Ci0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuX2ZpbHRlcl9idWlsZF9lcnJvcnMoZXh0KToKICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkX2V4dGVuc2lvbihleHQpCi0gICAgICAgICAgICBleGNlcHQgKENDb21waWxlckVycm9yLCBEaXN0dXRpbHNFcnJvciwgQ29tcGlsZUVycm9yKSBhcyBlOgotICAgICAgICAgICAgICAgIGlmIG5vdCBleHQub3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgc2VsZi53YXJuKCdidWlsZGluZyBleHRlbnNpb24gIiVzIiBmYWlsZWQ6ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChleHQubmFtZSwgZSkpCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBfZmlsdGVyX2J1aWxkX2Vycm9ycyhzZWxmLCBleHQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBleGNlcHQgKENDb21waWxlckVycm9yLCBEaXN0dXRpbHNFcnJvciwgQ29tcGlsZUVycm9yKSBhcyBlOgorICAgICAgICAgICAgaWYgbm90IGV4dC5vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgc2VsZi53YXJuKCdidWlsZGluZyBleHRlbnNpb24gIiVzIiBmYWlsZWQ6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgKGV4dC5uYW1lLCBlKSkKIAogICAgIGRlZiBidWlsZF9leHRlbnNpb24oc2VsZiwgZXh0KToKICAgICAgICAgc291cmNlcyA9IGV4dC5zb3VyY2VzCkBAIC01MDIsMTUgKzUzMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzPWV4dHJhX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9ZXh0LmRlcGVuZHMpCiAKLSAgICAgICAgIyBYWFggLS0gdGhpcyBpcyBhIFZpbGUgSEFDSyEKLSAgICAgICAgIwotICAgICAgICAjIFRoZSBzZXR1cC5weSBzY3JpcHQgZm9yIFB5dGhvbiBvbiBVbml4IG5lZWRzIHRvIGJlIGFibGUgdG8KLSAgICAgICAgIyBnZXQgdGhpcyBsaXN0IHNvIGl0IGNhbiBwZXJmb3JtIGFsbCB0aGUgY2xlYW4gdXAgbmVlZGVkIHRvCi0gICAgICAgICMgYXZvaWQga2VlcGluZyBvYmplY3QgZmlsZXMgYXJvdW5kIHdoZW4gY2xlYW5pbmcgb3V0IGEgZmFpbGVkCi0gICAgICAgICMgYnVpbGQgb2YgYW4gZXh0ZW5zaW9uIG1vZHVsZS4gIFNpbmNlIERpc3R1dGlscyBkb2VzIG5vdAotICAgICAgICAjIHRyYWNrIGRlcGVuZGVuY2llcywgd2UgaGF2ZSB0byBnZXQgcmlkIG9mIGludGVybWVkaWF0ZXMgdG8KLSAgICAgICAgIyBlbnN1cmUgYWxsIHRoZSBpbnRlcm1lZGlhdGVzIHdpbGwgYmUgcHJvcGVybHkgcmUtYnVpbHQuCi0gICAgICAgICMKKyAgICAgICAgIyBYWFggb3V0ZGF0ZWQgdmFyaWFibGUsIGtlcHQgaGVyZSBpbiBjYXNlIHRoaXJkLXBhcnQgY29kZQorICAgICAgICAjIG5lZWRzIGl0LgogICAgICAgICBzZWxmLl9idWlsdF9vYmplY3RzID0gb2JqZWN0c1s6XQogCiAgICAgICAgICMgTm93IGxpbmsgdGhlIG9iamVjdCBmaWxlcyB0b2dldGhlciBpbnRvIGEgInNoYXJlZCBvYmplY3QiIC0tCkBAIC02NTUsMTAgKzY3Nyw3IEBACiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCiAgICAgICAgIGV4dF9wYXRoID0gZXh0X25hbWUuc3BsaXQoJy4nKQotICAgICAgICAjIGV4dGVuc2lvbnMgaW4gZGVidWdfbW9kZSBhcmUgbmFtZWQgJ21vZHVsZV9kLnB5ZCcgdW5kZXIgd2luZG93cwogICAgICAgICBleHRfc3VmZml4ID0gZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKQotICAgICAgICBpZiBvcy5uYW1lID09ICdudCcgYW5kIHNlbGYuZGVidWc6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKCpleHRfcGF0aCkgKyAnX2QnICsgZXh0X3N1ZmZpeAogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKCpleHRfcGF0aCkgKyBleHRfc3VmZml4CiAKICAgICBkZWYgZ2V0X2V4cG9ydF9zeW1ib2xzKHNlbGYsIGV4dCk6CkBAIC02ODMsNyArNzAyLDcgQEAKICAgICAgICAgIyB0byBuZWVkIGl0IG1lbnRpb25lZCBleHBsaWNpdGx5LCB0aG91Z2gsIHNvIHRoYXQncyB3aGF0IHdlIGRvLgogICAgICAgICAjIEFwcGVuZCAnX2QnIHRvIHRoZSBweXRob24gaW1wb3J0IGxpYnJhcnkgb24gZGVidWcgYnVpbGRzLgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKLSAgICAgICAgICAgIGZyb20gZGlzdHV0aWxzLm1zdmNjb21waWxlciBpbXBvcnQgTVNWQ0NvbXBpbGVyCisgICAgICAgICAgICBmcm9tIGRpc3R1dGlscy5fbXN2Y2NvbXBpbGVyIGltcG9ydCBNU1ZDQ29tcGlsZXIKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuY29tcGlsZXIsIE1TVkNDb21waWxlcik6CiAgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSAicHl0aG9uJWQlZCIKICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgpAQCAtNzI5LDcgKzc0OCw3IEBACiAgICAgICAgICAgICBpZiBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1B5X0VOQUJMRV9TSEFSRUQnKToKICAgICAgICAgICAgICAgICBweXRob25saWIgPSAncHl0aG9ue30ue317fScuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICBzeXMuaGV4dmVyc2lvbiA+PiAyNCwgKHN5cy5oZXh2ZXJzaW9uID4+IDE2KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgIHN5cy5hYmlmbGFncykKKyAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdBQklGTEFHUycpKQogICAgICAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQppbmRleCA5MTAwYjk2Li5jZjBjYTU3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CkBAIC0zMTQsMTAgKzMxNCwxMCBAQAogICAgICAgICAgICAgaWYgaW5jbHVkZV9ieXRlY29kZToKICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGU6CiAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGRlYnVnX292ZXJyaWRlPVRydWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIG9wdGltaXphdGlvbj0nJykpCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSA+IDA6CiAgICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBvcHRpbWl6YXRpb249c2VsZi5vcHRpbWl6ZSkpCiAKICAgICAgICAgb3V0cHV0cyArPSBbCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKaW5kZXggZDc2OGRjNS4uNjdkYjAwNyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgJ3B1cmVsaWInOiAnJHVzZXJzaXRlJywKICAgICAgICAgJ3BsYXRsaWInOiAnJHVzZXJzaXRlJywKICAgICAgICAgJ2hlYWRlcnMnOiAnJHVzZXJiYXNlL1B5dGhvbiRweV92ZXJzaW9uX25vZG90L0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyR1c2VyYmFzZS9TY3JpcHRzJywKKyAgICAgICAgJ3NjcmlwdHMnOiAnJHVzZXJiYXNlL1B5dGhvbiRweV92ZXJzaW9uX25vZG90L1NjcmlwdHMnLAogICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQppbmRleCAyMTU4MTNiLi42MTU0Y2YwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CkBAIC0yMiwxNSArMjIsMTUgQEAKICAgICAjIHBvc3NpYmxlIHNjZW5hcmlvczoKICAgICAjICAgMSkgbm8gY29tcGlsYXRpb24gYXQgYWxsICgtLW5vLWNvbXBpbGUgLS1uby1vcHRpbWl6ZSkKICAgICAjICAgMikgY29tcGlsZSAucHljIG9ubHkgKC0tY29tcGlsZSAtLW5vLW9wdGltaXplOyBkZWZhdWx0KQotICAgICMgICAzKSBjb21waWxlIC5weWMgYW5kICJsZXZlbCAxIiAucHlvICgtLWNvbXBpbGUgLS1vcHRpbWl6ZSkKLSAgICAjICAgNCkgY29tcGlsZSAibGV2ZWwgMSIgLnB5byBvbmx5ICgtLW5vLWNvbXBpbGUgLS1vcHRpbWl6ZSkKLSAgICAjICAgNSkgY29tcGlsZSAucHljIGFuZCAibGV2ZWwgMiIgLnB5byAoLS1jb21waWxlIC0tb3B0aW1pemUtbW9yZSkKLSAgICAjICAgNikgY29tcGlsZSAibGV2ZWwgMiIgLnB5byBvbmx5ICgtLW5vLWNvbXBpbGUgLS1vcHRpbWl6ZS1tb3JlKQorICAgICMgICAzKSBjb21waWxlIC5weWMgYW5kICJvcHQtMSIgLnB5YyAoLS1jb21waWxlIC0tb3B0aW1pemUpCisgICAgIyAgIDQpIGNvbXBpbGUgIm9wdC0xIiAucHljIG9ubHkgKC0tbm8tY29tcGlsZSAtLW9wdGltaXplKQorICAgICMgICA1KSBjb21waWxlIC5weWMgYW5kICJvcHQtMiIgLnB5YyAoLS1jb21waWxlIC0tb3B0aW1pemUtbW9yZSkKKyAgICAjICAgNikgY29tcGlsZSAib3B0LTIiIC5weWMgb25seSAoLS1uby1jb21waWxlIC0tb3B0aW1pemUtbW9yZSkKICAgICAjCi0gICAgIyBUaGUgVUkgZm9yIHRoaXMgaXMgdHdvIG9wdGlvbiwgJ2NvbXBpbGUnIGFuZCAnb3B0aW1pemUnLgorICAgICMgVGhlIFVJIGZvciB0aGlzIGlzIHR3byBvcHRpb25zLCAnY29tcGlsZScgYW5kICdvcHRpbWl6ZScuCiAgICAgIyAnY29tcGlsZScgaXMgc3RyaWN0bHkgYm9vbGVhbiwgYW5kIG9ubHkgZGVjaWRlcyB3aGV0aGVyIHRvCiAgICAgIyBnZW5lcmF0ZSAucHljIGZpbGVzLiAgJ29wdGltaXplJyBpcyB0aHJlZS13YXkgKDAsIDEsIG9yIDIpLCBhbmQKLSAgICAjIGRlY2lkZXMgYm90aCB3aGV0aGVyIHRvIGdlbmVyYXRlIC5weW8gZmlsZXMgYW5kIHdoYXQgbGV2ZWwgb2YKKyAgICAjIGRlY2lkZXMgYm90aCB3aGV0aGVyIHRvIGdlbmVyYXRlIC5weWMgZmlsZXMgYW5kIHdoYXQgbGV2ZWwgb2YKICAgICAjIG9wdGltaXphdGlvbiB0byB1c2UuCiAKICAgICB1c2VyX29wdGlvbnMgPSBbCkBAIC0xNjYsMTAgKzE2NiwxMCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAotICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgcHlfZmlsZSwgb3B0aW1pemF0aW9uPScnKSkKICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemUgPiAwOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKLSAgICAgICAgICAgICAgICAgICAgcHlfZmlsZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQorICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBvcHRpbWl6YXRpb249c2VsZi5vcHRpbWl6ZSkpCiAKICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlX2ZpbGVzCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9yZWdpc3Rlci5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9yZWdpc3Rlci5weQppbmRleCBiNDlmODZmLi44NjM0M2M4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvcmVnaXN0ZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3JlZ2lzdGVyLnB5CkBAIC0yOTYsOSArMjk2LDkgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IDUwMCwgc3RyKGUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBzZWxmLnNob3dfcmVzcG9uc2U6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHJlc3VsdC5yZWFkKCkKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcmVhZF9weXBpX3Jlc3BvbnNlKHJlc3VsdCkKICAgICAgICAgICAgIHJlc3VsdCA9IDIwMCwgJ09LJwogICAgICAgICBpZiBzZWxmLnNob3dfcmVzcG9uc2U6Ci0gICAgICAgICAgICBkYXNoZXMgPSAnLScgKiA3NQotICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnJXMlciVzJyAlIChkYXNoZXMsIGRhdGEsIGRhc2hlcykpCisgICAgICAgICAgICBtc2cgPSAnXG4nLmpvaW4oKCctJyAqIDc1LCBkYXRhLCAnLScgKiA3NSkpCisgICAgICAgICAgICBzZWxmLmFubm91bmNlKG1zZywgbG9nLklORk8pCiAgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CmluZGV4IDFhOTZlMjIuLjFmZDU3NGEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQpAQCAtMSwxMSArMSwxNCBAQAotIiIiZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkCisiIiIKK2Rpc3R1dGlscy5jb21tYW5kLnVwbG9hZAogCi1JbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ3VwbG9hZCcgc3ViY29tbWFuZCAodXBsb2FkIHBhY2thZ2UgdG8gUHlQSSkuIiIiCitJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ3VwbG9hZCcgc3ViY29tbWFuZCAodXBsb2FkIHBhY2thZ2UgdG8gYSBwYWNrYWdlCitpbmRleCkuCisiIiIKIAotaW1wb3J0IHN5cwotaW1wb3J0IG9zLCBpbwotaW1wb3J0IHNvY2tldAoraW1wb3J0IG9zCitpbXBvcnQgaW8KIGltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IGhhc2hsaWIKIGZyb20gYmFzZTY0IGltcG9ydCBzdGFuZGFyZF9iNjRlbmNvZGUKIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4sIFJlcXVlc3QsIEhUVFBFcnJvcgogZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlCkBAIC0xNCwxMiArMTcsNiBAQAogZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLSMgdGhpcyBrZWVwcyBjb21wYXRpYmlsaXR5IGZvciAyLjMgYW5kIDIuNAotaWYgc3lzLnZlcnNpb24gPCAiMi41IjoKLSAgICBmcm9tIG1kNSBpbXBvcnQgbWQ1Ci1lbHNlOgotICAgIGZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1Ci0KIGNsYXNzIHVwbG9hZChQeVBJUkNDb21tYW5kKToKIAogICAgIGRlc2NyaXB0aW9uID0gInVwbG9hZCBiaW5hcnkgcGFja2FnZSB0byBQeVBJIgpAQCAtNjAsNyArNTcsOCBAQAogCiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXM6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvcigiTm8gZGlzdCBmaWxlIGNyZWF0ZWQgaW4gZWFybGllciBjb21tYW5kIikKKyAgICAgICAgICAgIG1zZyA9ICJObyBkaXN0IGZpbGUgY3JlYXRlZCBpbiBlYXJsaWVyIGNvbW1hbmQiCisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvcihtc2cpCiAgICAgICAgIGZvciBjb21tYW5kLCBweXZlcnNpb24sIGZpbGVuYW1lIGluIHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXM6CiAgICAgICAgICAgICBzZWxmLnVwbG9hZF9maWxlKGNvbW1hbmQsIHB5dmVyc2lvbiwgZmlsZW5hbWUpCiAKQEAgLTkzLDcgKzkxLDcgQEAKICAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgICMgYWN0aW9uCiAgICAgICAgICAgICAnOmFjdGlvbic6ICdmaWxlX3VwbG9hZCcsCi0gICAgICAgICAgICAncHJvdGNvbF92ZXJzaW9uJzogJzEnLAorICAgICAgICAgICAgJ3Byb3RvY29sX3ZlcnNpb24nOiAnMScsCiAKICAgICAgICAgICAgICMgaWRlbnRpZnkgcmVsZWFzZQogICAgICAgICAgICAgJ25hbWUnOiBtZXRhLmdldF9uYW1lKCksCkBAIC0xMDMsMTAgKzEwMSwxMCBAQAogICAgICAgICAgICAgJ2NvbnRlbnQnOiAob3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSksY29udGVudCksCiAgICAgICAgICAgICAnZmlsZXR5cGUnOiBjb21tYW5kLAogICAgICAgICAgICAgJ3B5dmVyc2lvbic6IHB5dmVyc2lvbiwKLSAgICAgICAgICAgICdtZDVfZGlnZXN0JzogbWQ1KGNvbnRlbnQpLmhleGRpZ2VzdCgpLAorICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiBoYXNobGliLm1kNShjb250ZW50KS5oZXhkaWdlc3QoKSwKIAogICAgICAgICAgICAgIyBhZGRpdGlvbmFsIG1ldGEtZGF0YQotICAgICAgICAgICAgJ21ldGFkYXRhX3ZlcnNpb24nIDogJzEuMCcsCisgICAgICAgICAgICAnbWV0YWRhdGFfdmVyc2lvbic6ICcxLjAnLAogICAgICAgICAgICAgJ3N1bW1hcnknOiBtZXRhLmdldF9kZXNjcmlwdGlvbigpLAogICAgICAgICAgICAgJ2hvbWVfcGFnZSc6IG1ldGEuZ2V0X3VybCgpLAogICAgICAgICAgICAgJ2F1dGhvcic6IG1ldGEuZ2V0X2NvbnRhY3QoKSwKQEAgLTE0OSw3ICsxNDcsNyBAQAogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkYXRhLml0ZW1zKCk6CiAgICAgICAgICAgICB0aXRsZSA9ICdcclxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSIlcyInICUga2V5CiAgICAgICAgICAgICAjIGhhbmRsZSBtdWx0aXBsZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBuYW1lCi0gICAgICAgICAgICBpZiB0eXBlKHZhbHVlKSAhPSB0eXBlKFtdKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZV0KICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZToKICAgICAgICAgICAgICAgICBpZiB0eXBlKHZhbHVlKSBpcyB0dXBsZToKQEAgLTE2NiwxMyArMTY0LDE1IEBACiAgICAgICAgIGJvZHkud3JpdGUoZW5kX2JvdW5kYXJ5KQogICAgICAgICBib2R5ID0gYm9keS5nZXR2YWx1ZSgpCiAKLSAgICAgICAgc2VsZi5hbm5vdW5jZSgiU3VibWl0dGluZyAlcyB0byAlcyIgJSAoZmlsZW5hbWUsIHNlbGYucmVwb3NpdG9yeSksIGxvZy5JTkZPKQorICAgICAgICBtc2cgPSAiU3VibWl0dGluZyAlcyB0byAlcyIgJSAoZmlsZW5hbWUsIHNlbGYucmVwb3NpdG9yeSkKKyAgICAgICAgc2VsZi5hbm5vdW5jZShtc2csIGxvZy5JTkZPKQogCiAgICAgICAgICMgYnVpbGQgdGhlIFJlcXVlc3QKLSAgICAgICAgaGVhZGVycyA9IHsnQ29udGVudC10eXBlJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0lcycgJSBib3VuZGFyeSwKLSAgICAgICAgICAgICAgICAgICAnQ29udGVudC1sZW5ndGgnOiBzdHIobGVuKGJvZHkpKSwKLSAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGF1dGh9CisgICAgICAgIGhlYWRlcnMgPSB7CisgICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSVzJyAlIGJvdW5kYXJ5LAorICAgICAgICAgICAgJ0NvbnRlbnQtbGVuZ3RoJzogc3RyKGxlbihib2R5KSksCisgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGF1dGgsCisgICAgICAgIH0KIAogICAgICAgICByZXF1ZXN0ID0gUmVxdWVzdChzZWxmLnJlcG9zaXRvcnksIGRhdGE9Ym9keSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz1oZWFkZXJzKQpAQCAtMTgxLDIxICsxODEsMjEgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHVybG9wZW4ocmVxdWVzdCkKICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3VsdC5nZXRjb2RlKCkKICAgICAgICAgICAgIHJlYXNvbiA9IHJlc3VsdC5tc2cKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYW5ub3VuY2Uoc3RyKGUpLCBsb2cuRVJST1IpCi0gICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgSFRUUEVycm9yIGFzIGU6CiAgICAgICAgICAgICBzdGF0dXMgPSBlLmNvZGUKICAgICAgICAgICAgIHJlYXNvbiA9IGUubXNnCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFubm91bmNlKHN0cihlKSwgbG9nLkVSUk9SKQorICAgICAgICAgICAgcmFpc2UKIAogICAgICAgICBpZiBzdGF0dXMgPT0gMjAwOgogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyAlIChzdGF0dXMsIHJlYXNvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5JTkZPKQorICAgICAgICAgICAgaWYgc2VsZi5zaG93X3Jlc3BvbnNlOgorICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLl9yZWFkX3B5cGlfcmVzcG9uc2UocmVzdWx0KQorICAgICAgICAgICAgICAgIG1zZyA9ICdcbicuam9pbigoJy0nICogNzUsIHRleHQsICctJyAqIDc1KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKG1zZywgbG9nLklORk8pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtc2cgPSAnVXBsb2FkIGZhaWxlZCAoJXMpOiAlcycgJSAoc3RhdHVzLCByZWFzb24pCiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKG1zZywgbG9nLkVSUk9SKQogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXJyb3IobXNnKQotICAgICAgICBpZiBzZWxmLnNob3dfcmVzcG9uc2U6Ci0gICAgICAgICAgICB0ZXh0ID0gc2VsZi5fcmVhZF9weXBpX3Jlc3BvbnNlKHJlc3VsdCkKLSAgICAgICAgICAgIG1zZyA9ICdcbicuam9pbigoJy0nICogNzUsIHRleHQsICctJyAqIDc1KSkKLSAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UobXNnLCBsb2cuSU5GTykKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC93aW5pbnN0LTE0LjAtYW1kNjQuZXhlIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3dpbmluc3QtMTQuMC1hbWQ2NC5leGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyOTk1NAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC93aW5pbnN0LTE0LjAtYW1kNjQuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC93aW5pbnN0LTE0LjAuZXhlIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3dpbmluc3QtMTQuMC5leGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhYzExMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC93aW5pbnN0LTE0LjAuZXhlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9jb25maWcucHkKaW5kZXggNjRjOWI2Ny4uYmY4ZDhkZCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb25maWcucHkKQEAgLTQsNyArNCw3IEBACiB0aGF0IHVzZXMgLnB5cGlyYyBpbiB0aGUgZGlzdHV0aWxzLmNvbW1hbmQgcGFja2FnZS4KICIiIgogaW1wb3J0IG9zCi1mcm9tIGNvbmZpZ3BhcnNlciBpbXBvcnQgQ29uZmlnUGFyc2VyCitmcm9tIGNvbmZpZ3BhcnNlciBpbXBvcnQgUmF3Q29uZmlnUGFyc2VyCiAKIGZyb20gZGlzdHV0aWxzLmNtZCBpbXBvcnQgQ29tbWFuZAogCkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICByZXBvc2l0b3J5ID0gc2VsZi5yZXBvc2l0b3J5IG9yIHNlbGYuREVGQVVMVF9SRVBPU0lUT1JZCiAgICAgICAgICAgICByZWFsbSA9IHNlbGYucmVhbG0gb3Igc2VsZi5ERUZBVUxUX1JFQUxNCiAKLSAgICAgICAgICAgIGNvbmZpZyA9IENvbmZpZ1BhcnNlcigpCisgICAgICAgICAgICBjb25maWcgPSBSYXdDb25maWdQYXJzZXIoKQogICAgICAgICAgICAgY29uZmlnLnJlYWQocmMpCiAgICAgICAgICAgICBzZWN0aW9ucyA9IGNvbmZpZy5zZWN0aW9ucygpCiAgICAgICAgICAgICBpZiAnZGlzdHV0aWxzJyBpbiBzZWN0aW9uczoKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29yZS5weSBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQppbmRleCAyYmZlNjZhLi5mMDViMzRiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CkBAIC0yMjEsOCArMjIxLDYgQEAKICAgICAgICAgIyBIbW0sIHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgaWYgZXhpdGluZyB3aXRoIGEgbm9uLXplcm8gY29kZQogICAgICAgICAjIChpZS4gZXJyb3IpPwogICAgICAgICBwYXNzCi0gICAgZXhjZXB0OgotICAgICAgICByYWlzZQogCiAgICAgaWYgX3NldHVwX2Rpc3RyaWJ1dGlvbiBpcyBOb25lOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKCInZGlzdHV0aWxzLmNvcmUuc2V0dXAoKScgd2FzIG5ldmVyIGNhbGxlZCAtLSAiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKaW5kZXggN2ViMDRiYy4uZmZiMzNmZjYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKQEAgLTQsNyArNCw5IEBACiBiZWluZyBidWlsdC9pbnN0YWxsZWQvZGlzdHJpYnV0ZWQuCiAiIiIKIAotaW1wb3J0IHN5cywgb3MsIHJlCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCByZQogZnJvbSBlbWFpbCBpbXBvcnQgbWVzc2FnZV9mcm9tX2ZpbGUKIAogdHJ5OgpAQCAtMjIsNyArMjQsNyBAQAogIyB0aGUgc2FtZSBhcyBhIFB5dGhvbiBOQU1FIC0tIEkgZG9uJ3QgYWxsb3cgbGVhZGluZyB1bmRlcnNjb3Jlcy4gIFRoZSBmYWN0CiAjIHRoYXQgdGhleSdyZSB2ZXJ5IHNpbWlsYXIgaXMgbm8gY29pbmNpZGVuY2U7IHRoZSBkZWZhdWx0IG5hbWluZyBzY2hlbWUgaXMKICMgdG8gbG9vayBmb3IgYSBQeXRob24gbW9kdWxlIG5hbWVkIGFmdGVyIHRoZSBjb21tYW5kLgotY29tbWFuZF9yZSA9IHJlLmNvbXBpbGUgKHInXlthLXpBLVpdKFthLXpBLVowLTlfXSopJCcpCitjb21tYW5kX3JlID0gcmUuY29tcGlsZShyJ15bYS16QS1aXShbYS16QS1aMC05X10qKSQnKQogCiAKIGNsYXNzIERpc3RyaWJ1dGlvbjoKQEAgLTM5LDcgKzQxLDYgQEAKICAgICBTZWUgdGhlIGNvZGUgZm9yICdzZXR1cCgpJywgaW4gY29yZS5weSwgZm9yIGRldGFpbHMuCiAgICAgIiIiCiAKLQogICAgICMgJ2dsb2JhbF9vcHRpb25zJyBkZXNjcmliZXMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIHRoYXQgbWF5IGJlCiAgICAgIyBzdXBwbGllZCB0byB0aGUgc2V0dXAgc2NyaXB0IHByaW9yIHRvIGFueSBhY3R1YWwgY29tbWFuZHMuCiAgICAgIyBFZy4gIi4vc2V0dXAucHkgLW4iIG9yICIuL3NldHVwLnB5IC0tcXVpZXQiIGJvdGggdGFrZSBhZHZhbnRhZ2Ugb2YKQEAgLTQ4LDEyICs0OSwxMyBAQAogICAgICMgZG9uJ3Qgd2FudCB0byBwb2xsdXRlIHRoZSBjb21tYW5kcyB3aXRoIHRvbyBtYW55IG9wdGlvbnMgdGhhdCB0aGV5CiAgICAgIyBoYXZlIG1pbmltYWwgY29udHJvbCBvdmVyLgogICAgICMgVGhlIGZvdXJ0aCBlbnRyeSBmb3IgdmVyYm9zZSBtZWFucyB0aGF0IGl0IGNhbiBiZSByZXBlYXRlZC4KLSAgICBnbG9iYWxfb3B0aW9ucyA9IFsoJ3ZlcmJvc2UnLCAndicsICJydW4gdmVyYm9zZWx5IChkZWZhdWx0KSIsIDEpLAotICAgICAgICAgICAgICAgICAgICAgICgncXVpZXQnLCAncScsICJydW4gcXVpZXRseSAodHVybnMgdmVyYm9zaXR5IG9mZikiKSwKLSAgICAgICAgICAgICAgICAgICAgICAoJ2RyeS1ydW4nLCAnbicsICJkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyIpLAotICAgICAgICAgICAgICAgICAgICAgICgnaGVscCcsICdoJywgInNob3cgZGV0YWlsZWQgaGVscCBtZXNzYWdlIiksCi0gICAgICAgICAgICAgICAgICAgICAgKCduby11c2VyLWNmZycsIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUgcHlkaXN0dXRpbHMuY2ZnIGluIHlvdXIgaG9tZSBkaXJlY3RvcnknKSwKKyAgICBnbG9iYWxfb3B0aW9ucyA9IFsKKyAgICAgICAgKCd2ZXJib3NlJywgJ3YnLCAicnVuIHZlcmJvc2VseSAoZGVmYXVsdCkiLCAxKSwKKyAgICAgICAgKCdxdWlldCcsICdxJywgInJ1biBxdWlldGx5ICh0dXJucyB2ZXJib3NpdHkgb2ZmKSIpLAorICAgICAgICAoJ2RyeS1ydW4nLCAnbicsICJkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyIpLAorICAgICAgICAoJ2hlbHAnLCAnaCcsICJzaG93IGRldGFpbGVkIGhlbHAgbWVzc2FnZSIpLAorICAgICAgICAoJ25vLXVzZXItY2ZnJywgTm9uZSwKKyAgICAgICAgICAgICdpZ25vcmUgcHlkaXN0dXRpbHMuY2ZnIGluIHlvdXIgaG9tZSBkaXJlY3RvcnknKSwKICAgICBdCiAKICAgICAjICdjb21tb25fdXNhZ2UnIGlzIGEgc2hvcnQgKDItMyBsaW5lKSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY29tbW9uCkBAIC0xMTUsMTAgKzExNyw5IEBACiAgICAgIyBuZWdhdGl2ZSBvcHRpb25zIGFyZSBvcHRpb25zIHRoYXQgZXhjbHVkZSBvdGhlciBvcHRpb25zCiAgICAgbmVnYXRpdmVfb3B0ID0geydxdWlldCc6ICd2ZXJib3NlJ30KIAotCiAgICAgIyAtLSBDcmVhdGlvbi9pbml0aWFsaXphdGlvbiBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgYXR0cnM9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHJzPU5vbmUpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBuZXcgRGlzdHJpYnV0aW9uIGluc3RhbmNlOiBpbml0aWFsaXplIGFsbCB0aGUKICAgICAgICAgYXR0cmlidXRlcyBvZiBhIERpc3RyaWJ1dGlvbiwgYW5kIHRoZW4gdXNlICdhdHRycycgKGEgZGljdGlvbmFyeQogICAgICAgICBtYXBwaW5nIGF0dHJpYnV0ZSBuYW1lcyB0byB2YWx1ZXMpIHRvIGFzc2lnbiBzb21lIG9mIHRob3NlCkBAIC01MzIsMTUgKzUzMywxNSBAQAogICAgICAgICAjIHRvIGJlIHN1cmUgdGhhdCB0aGUgYmFzaWMgImNvbW1hbmQiIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZC4KICAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoY21kX2NsYXNzLCBDb21tYW5kKToKICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0NsYXNzRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiY29tbWFuZCBjbGFzcyAlcyBtdXN0IHN1YmNsYXNzIENvbW1hbmQiICUgY21kX2NsYXNzKQorICAgICAgICAgICAgICAgICJjb21tYW5kIGNsYXNzICVzIG11c3Qgc3ViY2xhc3MgQ29tbWFuZCIgJSBjbWRfY2xhc3MpCiAKICAgICAgICAgIyBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb21tYW5kIG9iamVjdCBwcm92aWRlcyBhIGxpc3Qgb2YgaXRzCiAgICAgICAgICMga25vd24gb3B0aW9ucy4KICAgICAgICAgaWYgbm90IChoYXNhdHRyKGNtZF9jbGFzcywgJ3VzZXJfb3B0aW9ucycpIGFuZAogICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoY21kX2NsYXNzLnVzZXJfb3B0aW9ucywgbGlzdCkpOgotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzQ2xhc3NFcnJvcigoImNvbW1hbmQgY2xhc3MgJXMgbXVzdCBwcm92aWRlICIgKwotICAgICAgICAgICAgICAgICAgICIndXNlcl9vcHRpb25zJyBhdHRyaWJ1dGUgKGEgbGlzdCBvZiB0dXBsZXMpIikgJSBcCi0gICAgICAgICAgICAgICAgICBjbWRfY2xhc3MpCisgICAgICAgICAgICBtc2cgPSAoImNvbW1hbmQgY2xhc3MgJXMgbXVzdCBwcm92aWRlICIKKyAgICAgICAgICAgICAgICAiJ3VzZXJfb3B0aW9ucycgYXR0cmlidXRlIChhIGxpc3Qgb2YgdHVwbGVzKSIpCisgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNDbGFzc0Vycm9yKG1zZyAlIGNtZF9jbGFzcykKIAogICAgICAgICAjIElmIHRoZSBjb21tYW5kIGNsYXNzIGhhcyBhIGxpc3Qgb2YgbmVnYXRpdmUgYWxpYXMgb3B0aW9ucywKICAgICAgICAgIyBtZXJnZSBpdCBpbiB3aXRoIHRoZSBnbG9iYWwgbmVnYXRpdmUgYWxpYXNlcy4KQEAgLTU1MiwxMiArNTUzLDExIEBACiAgICAgICAgICMgQ2hlY2sgZm9yIGhlbHBfb3B0aW9ucyBpbiBjb21tYW5kIGNsYXNzLiAgVGhleSBoYXZlIGEgZGlmZmVyZW50CiAgICAgICAgICMgZm9ybWF0ICh0dXBsZSBvZiBmb3VyKSBzbyB3ZSBuZWVkIHRvIHByZXByb2Nlc3MgdGhlbSBoZXJlLgogICAgICAgICBpZiAoaGFzYXR0cihjbWRfY2xhc3MsICdoZWxwX29wdGlvbnMnKSBhbmQKLSAgICAgICAgICAgIGlzaW5zdGFuY2UoY21kX2NsYXNzLmhlbHBfb3B0aW9ucywgbGlzdCkpOgorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoY21kX2NsYXNzLmhlbHBfb3B0aW9ucywgbGlzdCkpOgogICAgICAgICAgICAgaGVscF9vcHRpb25zID0gZml4X2hlbHBfb3B0aW9ucyhjbWRfY2xhc3MuaGVscF9vcHRpb25zKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaGVscF9vcHRpb25zID0gW10KIAotCiAgICAgICAgICMgQWxsIGNvbW1hbmRzIHN1cHBvcnQgdGhlIGdsb2JhbCBvcHRpb25zIHRvbywganVzdCBieSBhZGRpbmcKICAgICAgICAgIyBpbiAnZ2xvYmFsX29wdGlvbnMnLgogICAgICAgICBwYXJzZXIuc2V0X29wdGlvbl90YWJsZShzZWxmLmdsb2JhbF9vcHRpb25zICsKQEAgLTU3MCw3ICs1NzAsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaWYgKGhhc2F0dHIoY21kX2NsYXNzLCAnaGVscF9vcHRpb25zJykgYW5kCi0gICAgICAgICAgICBpc2luc3RhbmNlKGNtZF9jbGFzcy5oZWxwX29wdGlvbnMsIGxpc3QpKToKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGNtZF9jbGFzcy5oZWxwX29wdGlvbnMsIGxpc3QpKToKICAgICAgICAgICAgIGhlbHBfb3B0aW9uX2ZvdW5kPTAKICAgICAgICAgICAgIGZvciAoaGVscF9vcHRpb24sIHNob3J0LCBkZXNjLCBmdW5jKSBpbiBjbWRfY2xhc3MuaGVscF9vcHRpb25zOgogICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob3B0cywgcGFyc2VyLmdldF9hdHRyX25hbWUoaGVscF9vcHRpb24pKToKQEAgLTY0Nyw3ICs2NDcsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBrbGFzcyA9IHNlbGYuZ2V0X2NvbW1hbmRfY2xhc3MoY29tbWFuZCkKICAgICAgICAgICAgIGlmIChoYXNhdHRyKGtsYXNzLCAnaGVscF9vcHRpb25zJykgYW5kCi0gICAgICAgICAgICAgICAgaXNpbnN0YW5jZShrbGFzcy5oZWxwX29wdGlvbnMsIGxpc3QpKToKKyAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShrbGFzcy5oZWxwX29wdGlvbnMsIGxpc3QpKToKICAgICAgICAgICAgICAgICBwYXJzZXIuc2V0X29wdGlvbl90YWJsZShrbGFzcy51c2VyX29wdGlvbnMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeF9oZWxwX29wdGlvbnMoa2xhc3MuaGVscF9vcHRpb25zKSkKICAgICAgICAgICAgIGVsc2U6CkBAIC04MTQsNyArODE0LDcgQEAKICAgICAgICAgICAgIGtsYXNzX25hbWUgPSBjb21tYW5kCiAKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBfX2ltcG9ydF9fIChtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lKQogICAgICAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC04MjMsOCArODIzLDggQEAKICAgICAgICAgICAgICAgICBrbGFzcyA9IGdldGF0dHIobW9kdWxlLCBrbGFzc19uYW1lKQogICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc01vZHVsZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbW1hbmQgJyVzJyAobm8gY2xhc3MgJyVzJyBpbiBtb2R1bGUgJyVzJykiCi0gICAgICAgICAgICAgICAgICAgICAgJSAoY29tbWFuZCwga2xhc3NfbmFtZSwgbW9kdWxlX25hbWUpKQorICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb21tYW5kICclcycgKG5vIGNsYXNzICclcycgaW4gbW9kdWxlICclcycpIgorICAgICAgICAgICAgICAgICAgICAlIChjb21tYW5kLCBrbGFzc19uYW1lLCBtb2R1bGVfbmFtZSkpCiAKICAgICAgICAgICAgIHNlbGYuY21kY2xhc3NbY29tbWFuZF0gPSBrbGFzcwogICAgICAgICAgICAgcmV0dXJuIGtsYXNzCkBAIC04NDAsNyArODQwLDcgQEAKICAgICAgICAgY21kX29iaiA9IHNlbGYuY29tbWFuZF9vYmouZ2V0KGNvbW1hbmQpCiAgICAgICAgIGlmIG5vdCBjbWRfb2JqIGFuZCBjcmVhdGU6CiAgICAgICAgICAgICBpZiBERUJVRzoKLSAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCJEaXN0cmlidXRpb24uZ2V0X2NvbW1hbmRfb2JqKCk6ICIgXAorICAgICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoIkRpc3RyaWJ1dGlvbi5nZXRfY29tbWFuZF9vYmooKTogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0aW5nICclcycgY29tbWFuZCBvYmplY3QiICUgY29tbWFuZCkKIAogICAgICAgICAgICAga2xhc3MgPSBzZWxmLmdldF9jb21tYW5kX2NsYXNzKGNvbW1hbmQpCkBAIC04OTcsOCArODk3LDggQEAKICAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihjb21tYW5kX29iaiwgb3B0aW9uLCB2YWx1ZSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGluICVzOiBjb21tYW5kICclcycgaGFzIG5vIHN1Y2ggb3B0aW9uICclcyciCi0gICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNvdXJjZSwgY29tbWFuZF9uYW1lLCBvcHRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGluICVzOiBjb21tYW5kICclcycgaGFzIG5vIHN1Y2ggb3B0aW9uICclcyciCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzb3VyY2UsIGNvbW1hbmRfbmFtZSwgb3B0aW9uKSkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNPcHRpb25FcnJvcihtc2cpCiAKQEAgLTk3NCw3ICs5NzQsNiBAQAogICAgICAgICBjbWRfb2JqLnJ1bigpCiAgICAgICAgIHNlbGYuaGF2ZV9ydW5bY29tbWFuZF0gPSAxCiAKLQogICAgICMgLS0gRGlzdHJpYnV0aW9uIHF1ZXJ5IG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICBkZWYgaGFzX3B1cmVfbW9kdWxlcyhzZWxmKToKQEAgLTExMTIsMTcgKzExMTEsMTcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHZlcnNpb24gPSAnMS4wJwogICAgICAgICBpZiAoc2VsZi5wcm92aWRlcyBvciBzZWxmLnJlcXVpcmVzIG9yIHNlbGYub2Jzb2xldGVzIG9yCi0gICAgICAgICAgICBzZWxmLmNsYXNzaWZpZXJzIG9yIHNlbGYuZG93bmxvYWRfdXJsKToKKyAgICAgICAgICAgICAgICBzZWxmLmNsYXNzaWZpZXJzIG9yIHNlbGYuZG93bmxvYWRfdXJsKToKICAgICAgICAgICAgIHZlcnNpb24gPSAnMS4xJwogCiAgICAgICAgIGZpbGUud3JpdGUoJ01ldGFkYXRhLVZlcnNpb246ICVzXG4nICUgdmVyc2lvbikKLSAgICAgICAgZmlsZS53cml0ZSgnTmFtZTogJXNcbicgJSBzZWxmLmdldF9uYW1lKCkgKQotICAgICAgICBmaWxlLndyaXRlKCdWZXJzaW9uOiAlc1xuJyAlIHNlbGYuZ2V0X3ZlcnNpb24oKSApCi0gICAgICAgIGZpbGUud3JpdGUoJ1N1bW1hcnk6ICVzXG4nICUgc2VsZi5nZXRfZGVzY3JpcHRpb24oKSApCi0gICAgICAgIGZpbGUud3JpdGUoJ0hvbWUtcGFnZTogJXNcbicgJSBzZWxmLmdldF91cmwoKSApCi0gICAgICAgIGZpbGUud3JpdGUoJ0F1dGhvcjogJXNcbicgJSBzZWxmLmdldF9jb250YWN0KCkgKQotICAgICAgICBmaWxlLndyaXRlKCdBdXRob3ItZW1haWw6ICVzXG4nICUgc2VsZi5nZXRfY29udGFjdF9lbWFpbCgpICkKLSAgICAgICAgZmlsZS53cml0ZSgnTGljZW5zZTogJXNcbicgJSBzZWxmLmdldF9saWNlbnNlKCkgKQorICAgICAgICBmaWxlLndyaXRlKCdOYW1lOiAlc1xuJyAlIHNlbGYuZ2V0X25hbWUoKSkKKyAgICAgICAgZmlsZS53cml0ZSgnVmVyc2lvbjogJXNcbicgJSBzZWxmLmdldF92ZXJzaW9uKCkpCisgICAgICAgIGZpbGUud3JpdGUoJ1N1bW1hcnk6ICVzXG4nICUgc2VsZi5nZXRfZGVzY3JpcHRpb24oKSkKKyAgICAgICAgZmlsZS53cml0ZSgnSG9tZS1wYWdlOiAlc1xuJyAlIHNlbGYuZ2V0X3VybCgpKQorICAgICAgICBmaWxlLndyaXRlKCdBdXRob3I6ICVzXG4nICUgc2VsZi5nZXRfY29udGFjdCgpKQorICAgICAgICBmaWxlLndyaXRlKCdBdXRob3ItZW1haWw6ICVzXG4nICUgc2VsZi5nZXRfY29udGFjdF9lbWFpbCgpKQorICAgICAgICBmaWxlLndyaXRlKCdMaWNlbnNlOiAlc1xuJyAlIHNlbGYuZ2V0X2xpY2Vuc2UoKSkKICAgICAgICAgaWYgc2VsZi5kb3dubG9hZF91cmw6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCdEb3dubG9hZC1VUkw6ICVzXG4nICUgc2VsZi5kb3dubG9hZF91cmwpCiAKQEAgLTExMzEsNyArMTEzMCw3IEBACiAKICAgICAgICAga2V5d29yZHMgPSAnLCcuam9pbihzZWxmLmdldF9rZXl3b3JkcygpKQogICAgICAgICBpZiBrZXl3b3JkczoKLSAgICAgICAgICAgIGZpbGUud3JpdGUoJ0tleXdvcmRzOiAlc1xuJyAlIGtleXdvcmRzICkKKyAgICAgICAgICAgIGZpbGUud3JpdGUoJ0tleXdvcmRzOiAlc1xuJyAlIGtleXdvcmRzKQogCiAgICAgICAgIHNlbGYuX3dyaXRlX2xpc3QoZmlsZSwgJ1BsYXRmb3JtJywgc2VsZi5nZXRfcGxhdGZvcm1zKCkpCiAgICAgICAgIHNlbGYuX3dyaXRlX2xpc3QoZmlsZSwgJ0NsYXNzaWZpZXInLCBzZWxmLmdldF9jbGFzc2lmaWVycygpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9leHRlbnNpb24ucHkgYi9MaWIvZGlzdHV0aWxzL2V4dGVuc2lvbi5weQppbmRleCBhOTM2NTVhLi43ZWZiYjc0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2V4dGVuc2lvbi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2V4dGVuc2lvbi5weQpAQCAtMTMxLDYgKzEzMSwxNCBAQAogICAgICAgICAgICAgbXNnID0gIlVua25vd24gRXh0ZW5zaW9uIG9wdGlvbnM6ICVzIiAlIG9wdGlvbnMKICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4obXNnKQogCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwlcy4lcyglcikgYXQgJSN4PicgJSAoCisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgc2VsZi5uYW1lLAorICAgICAgICAgICAgaWQoc2VsZikpCisKKwogZGVmIHJlYWRfc2V0dXBfZmlsZShmaWxlbmFtZSk6CiAgICAgIiIiUmVhZHMgYSBTZXR1cCBmaWxlIGFuZCByZXR1cm5zIEV4dGVuc2lvbiBpbnN0YW5jZXMuIiIiCiAgICAgZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCAocGFyc2VfbWFrZWZpbGUsIGV4cGFuZF9tYWtlZmlsZV92YXJzLApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CmluZGV4IGE1YTUwMTAuLjBiMWZkMTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKQEAgLTUxLDcgKzUxLDcgQEAKIAogIyBBIG1hcCBrZXllZCBieSBnZXRfcGxhdGZvcm0oKSByZXR1cm4gdmFsdWVzIHRvIHZhbHVlcyBhY2NlcHRlZCBieQogIyAndmN2YXJzYWxsLmJhdCcuICBOb3RlIGEgY3Jvc3MtY29tcGlsZSBtYXkgY29tYmluZSB0aGVzZSAoZWcsICd4ODZfYW1kNjQnIGlzCi0jIHRoZSBwYXJhbSB0byBjcm9zcy1jb21waWxlIG9uIHg4NiB0YXJnZXR0aW5nIGFtZDY0LikKKyMgdGhlIHBhcmFtIHRvIGNyb3NzLWNvbXBpbGUgb24geDg2IHRhcmdldGluZyBhbWQ2NC4pCiBQTEFUX1RPX1ZDVkFSUyA9IHsKICAgICAnd2luMzInIDogJ3g4NicsCiAgICAgJ3dpbi1hbWQ2NCcgOiAnYW1kNjQnLApAQCAtMTc5LDYgKzE3OSw5IEBACiAgICAgaSA9IGkgKyBsZW4ocHJlZml4KQogICAgIHMsIHJlc3QgPSBzeXMudmVyc2lvbltpOl0uc3BsaXQoIiAiLCAxKQogICAgIG1ham9yVmVyc2lvbiA9IGludChzWzotMl0pIC0gNgorICAgIGlmIG1ham9yVmVyc2lvbiA+PSAxMzoKKyAgICAgICAgIyB2MTMgd2FzIHNraXBwZWQgYW5kIHNob3VsZCBiZSB2MTQKKyAgICAgICAgbWFqb3JWZXJzaW9uICs9IDEKICAgICBtaW5vclZlcnNpb24gPSBpbnQoc1syOjNdKSAvIDEwLjAKICAgICAjIEkgZG9uJ3QgdGhpbmsgcGF0aHMgYXJlIGFmZmVjdGVkIGJ5IG1pbm9yIHZlcnNpb24gaW4gdmVyc2lvbiA2CiAgICAgaWYgbWFqb3JWZXJzaW9uID09IDY6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL21zdmNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvbXN2Y2NvbXBpbGVyLnB5CmluZGV4IDgxMTY2NTYuLjEwNDhjZDQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvbXN2Y2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvbXN2Y2NvbXBpbGVyLnB5CkBAIC0xNTcsNiArMTU3LDkgQEAKICAgICBpID0gaSArIGxlbihwcmVmaXgpCiAgICAgcywgcmVzdCA9IHN5cy52ZXJzaW9uW2k6XS5zcGxpdCgiICIsIDEpCiAgICAgbWFqb3JWZXJzaW9uID0gaW50KHNbOi0yXSkgLSA2CisgICAgaWYgbWFqb3JWZXJzaW9uID49IDEzOgorICAgICAgICAjIHYxMyB3YXMgc2tpcHBlZCBhbmQgc2hvdWxkIGJlIHYxNAorICAgICAgICBtYWpvclZlcnNpb24gKz0gMQogICAgIG1pbm9yVmVyc2lvbiA9IGludChzWzI6M10pIC8gMTAuMAogICAgICMgSSBkb24ndCB0aGluayBwYXRocyBhcmUgYWZmZWN0ZWQgYnkgbWlub3IgdmVyc2lvbiBpbiB2ZXJzaW9uIDYKICAgICBpZiBtYWpvclZlcnNpb24gPT0gNjoKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CmluZGV4IDIyZTg3ZTguLjVkZDQxNWEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9zcGF3bi5weQpAQCAtMTM3LDkgKzEzNyw2IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgbm90IERFQlVHOgogICAgICAgICAgICAgICAgICAgICBjbWQgPSBleGVjdXRhYmxlCiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQppbmRleCBhMTQ1MmZlLi41NzM3MjRkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQpAQCAtOSw2ICs5LDcgQEAKIEVtYWlsOiAgICAgICAgPGZkcmFrZUBhY20ub3JnPgogIiIiCiAKK2ltcG9ydCBfaW1wCiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cwpAQCAtMjIsMjMgKzIzLDE1IEBACiBCQVNFX0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9leGVjX3ByZWZpeCkKIAogIyBQYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4gT24gV2luZG93cyB0aGUgYmluYXJ5IG1heQotIyBsaXZlIGluIHByb2plY3QvUENCdWlsZDkuICBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4geDY0IFdpbmRvd3MgYnVpbGQsCi0jIGl0J2xsIGxpdmUgaW4gcHJvamVjdC9QQ2J1aWxkL2FtZDY0LgorIyBsaXZlIGluIHByb2plY3QvUENCdWlsZC93aW4zMiBvciBwcm9qZWN0L1BDQnVpbGQvYW1kNjQuCiAjIHNldCBmb3IgY3Jvc3MgYnVpbGRzCiBpZiAiX1BZVEhPTl9QUk9KRUNUX0JBU0UiIGluIG9zLmVudmlyb246CiAgICAgcHJvamVjdF9iYXNlID0gb3MucGF0aC5hYnNwYXRoKG9zLmVudmlyb25bIl9QWVRIT05fUFJPSkVDVF9CQVNFIl0pCiBlbHNlOgogICAgIHByb2plY3RfYmFzZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpKQotaWYgb3MubmFtZSA9PSAibnQiIGFuZCAicGNidWlsZCIgaW4gcHJvamVjdF9iYXNlWy04Ol0ubG93ZXIoKToKLSAgICBwcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHByb2plY3RfYmFzZSwgb3MucGF0aC5wYXJkaXIpKQotIyBQQy9WUzcuMQotaWYgb3MubmFtZSA9PSAibnQiIGFuZCAiXFxwY1xcdiIgaW4gcHJvamVjdF9iYXNlWy0xMDpdLmxvd2VyKCk6Ci0gICAgcHJvamVjdF9iYXNlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwcm9qZWN0X2Jhc2UsIG9zLnBhdGgucGFyZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5wYXJkaXIpKQotIyBQQy9BTUQ2NAotaWYgb3MubmFtZSA9PSAibnQiIGFuZCAiXFxwY2J1aWxkXFxhbWQ2NCIgaW4gcHJvamVjdF9iYXNlWy0xNDpdLmxvd2VyKCk6Ci0gICAgcHJvamVjdF9iYXNlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwcm9qZWN0X2Jhc2UsIG9zLnBhdGgucGFyZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5wYXJkaXIpKQoraWYgKG9zLm5hbWUgPT0gJ250JyBhbmQKKyAgICBwcm9qZWN0X2Jhc2UubG93ZXIoKS5lbmRzd2l0aCgoJ1xccGNidWlsZFxcd2luMzInLCAnXFxwY2J1aWxkXFxhbWQ2NCcpKSk6CisgICAgcHJvamVjdF9iYXNlID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShwcm9qZWN0X2Jhc2UpKQogCiAjIHB5dGhvbl9idWlsZDogKEJvb2xlYW4pIGlmIHRydWUsIHdlJ3JlIGVpdGhlciBidWlsZGluZyBQeXRob24gb3IKICMgYnVpbGRpbmcgYW4gZXh0ZW5zaW9uIHdpdGggYW4gdW4taW5zdGFsbGVkIFB5dGhvbiwgc28gd2UgdXNlCkBAIC01MSwxMSArNDQsOSBAQAogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICByZXR1cm4gRmFsc2UKIF9zeXNfaG9tZSA9IGdldGF0dHIoc3lzLCAnX2hvbWUnLCBOb25lKQotaWYgX3N5c19ob21lIGFuZCBvcy5uYW1lID09ICdudCcgYW5kIFwKLSAgICBfc3lzX2hvbWUubG93ZXIoKS5lbmRzd2l0aCgoJ3BjYnVpbGQnLCAncGNidWlsZFxcYW1kNjQnKSk6Ci0gICAgX3N5c19ob21lID0gb3MucGF0aC5kaXJuYW1lKF9zeXNfaG9tZSkKLSAgICBpZiBfc3lzX2hvbWUuZW5kc3dpdGgoJ3BjYnVpbGQnKTogICAjIG11c3QgYmUgYW1kNjQKLSAgICAgICAgX3N5c19ob21lID0gb3MucGF0aC5kaXJuYW1lKF9zeXNfaG9tZSkKK2lmIChfc3lzX2hvbWUgYW5kIG9zLm5hbWUgPT0gJ250JyBhbmQKKyAgICBfc3lzX2hvbWUubG93ZXIoKS5lbmRzd2l0aCgoJ1xccGNidWlsZFxcd2luMzInLCAnXFxwY2J1aWxkXFxhbWQ2NCcpKSk6CisgICAgX3N5c19ob21lID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfc3lzX2hvbWUpKQogZGVmIF9weXRob25fYnVpbGQoKToKICAgICBpZiBfc3lzX2hvbWU6CiAgICAgICAgIHJldHVybiBfaXNfcHl0aG9uX3NvdXJjZV9kaXIoX3N5c19ob21lKQpAQCAtNDY4LDcgKzQ1OSw3IEBACiAgICAgIyBYWFggaG1tbS4uIGEgbm9ybWFsIGluc3RhbGwgcHV0cyBpbmNsdWRlIGZpbGVzIGhlcmUKICAgICBnWydJTkNMVURFUFknXSA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MCkKIAotICAgIGdbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJworICAgIGdbJ0VYVF9TVUZGSVgnXSA9IF9pbXAuZXh0ZW5zaW9uX3N1ZmZpeGVzKClbMF0KICAgICBnWydFWEUnXSA9ICIuZXhlIgogICAgIGdbJ1ZFUlNJT04nXSA9IGdldF9weXRob25fdmVyc2lvbigpLnJlcGxhY2UoIi4iLCAiIikKICAgICBnWydCSU5ESVInXSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkKaW5kZXggMmQ3MmFmNC4uMDJmYTFlMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CkBAIC0xMyw3ICsxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUkNISVZFX0ZPUk1BVFMpCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlLCBzcGF3bgogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0LCBwYXRjaAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIHBhdGNoLCBjaGFuZ2VfY3dkCiAKIHRyeToKICAgICBpbXBvcnQgZ3JwCkBAIC0zNCw2ICszNCwxNiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIFpMSUJfU1VQUE9SVCA9IEZhbHNlCiAKK3RyeToKKyAgICBpbXBvcnQgYnoyCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgYnoyID0gTm9uZQorCit0cnk6CisgICAgaW1wb3J0IGx6bWEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBsem1hID0gTm9uZQorCiBkZWYgY2FuX2ZzX2VuY29kZShmaWxlbmFtZSk6CiAgICAgIiIiCiAgICAgUmV0dXJuIFRydWUgaWYgdGhlIGZpbGVuYW1lIGNhbiBiZSBzYXZlZCBpbiB0aGUgZmlsZSBzeXN0ZW0uCkBAIC01MiwxOSArNjIsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWkxJQl9TVVBQT1JULCAnTmVlZCB6bGliIHN1cHBvcnQgdG8gcnVuJykKLSAgICBkZWYgdGVzdF9tYWtlX3RhcmJhbGwoc2VsZik6Ci0gICAgICAgIHNlbGYuX21ha2VfdGFyYmFsbCgnYXJjaGl2ZScpCisgICAgZGVmIHRlc3RfbWFrZV90YXJiYWxsKHNlbGYsIG5hbWU9J2FyY2hpdmUnKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIHNlbGYuX21ha2VfdGFyYmFsbCh0bXBkaXIsIG5hbWUsICcudGFyLmd6JykKKyAgICAgICAgIyB0cnlpbmcgYW4gdW5jb21wcmVzc2VkIG9uZQorICAgICAgICBzZWxmLl9tYWtlX3RhcmJhbGwodG1wZGlyLCBuYW1lLCAnLnRhcicsIGNvbXByZXNzPU5vbmUpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaTElCX1NVUFBPUlQsICdOZWVkIHpsaWIgc3VwcG9ydCB0byBydW4nKQorICAgIGRlZiB0ZXN0X21ha2VfdGFyYmFsbF9nemlwKHNlbGYpOgorICAgICAgICB0bXBkaXIgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBzZWxmLl9tYWtlX3RhcmJhbGwodG1wZGlyLCAnYXJjaGl2ZScsICcudGFyLmd6JywgY29tcHJlc3M9J2d6aXAnKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoYnoyLCAnTmVlZCBiejIgc3VwcG9ydCB0byBydW4nKQorICAgIGRlZiB0ZXN0X21ha2VfdGFyYmFsbF9iemlwMihzZWxmKToKKyAgICAgICAgdG1wZGlyID0gc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgc2VsZi5fbWFrZV90YXJiYWxsKHRtcGRpciwgJ2FyY2hpdmUnLCAnLnRhci5iejInLCBjb21wcmVzcz0nYnppcDInKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MobHptYSwgJ05lZWQgbHptYSBzdXBwb3J0IHRvIHJ1bicpCisgICAgZGVmIHRlc3RfbWFrZV90YXJiYWxsX3h6KHNlbGYpOgorICAgICAgICB0bXBkaXIgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBzZWxmLl9tYWtlX3RhcmJhbGwodG1wZGlyLCAnYXJjaGl2ZScsICcudGFyLnh6JywgY29tcHJlc3M9J3h6JykKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGNhbl9mc19lbmNvZGUoJ8OlcmNoaXYnKSwKICAgICAgICAgJ0ZpbGUgc3lzdGVtIGNhbm5vdCBoYW5kbGUgdGhpcyBmaWxlbmFtZScpCiAgICAgZGVmIHRlc3RfbWFrZV90YXJiYWxsX2xhdGluMShzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIE1pcnJvciB0ZXN0X21ha2VfdGFyYmFsbCwgZXhjZXB0IGZpbGVuYW1lIGNvbnRhaW5zIGxhdGluIGNoYXJhY3RlcnMuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9tYWtlX3RhcmJhbGwoJ8OlcmNoaXYnKSAjIG5vdGUgdGhpcyBpc24ndCBhIHJlYWwgd29yZAorICAgICAgICBzZWxmLnRlc3RfbWFrZV90YXJiYWxsKCfDpXJjaGl2JykgIyBub3RlIHRoaXMgaXNuJ3QgYSByZWFsIHdvcmQKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpMSUJfU1VQUE9SVCwgJ05lZWQgemxpYiBzdXBwb3J0IHRvIHJ1bicpCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoY2FuX2ZzX2VuY29kZSgn44Gu44Ki44O844Kr44Kk44OWJyksCiAgICAgICAgICdGaWxlIHN5c3RlbSBjYW5ub3QgaGFuZGxlIHRoaXMgZmlsZW5hbWUnKQogICAgIGRlZiB0ZXN0X21ha2VfdGFyYmFsbF9leHRlbmRlZChzZWxmKToKQEAgLTcyLDE2ICs5OSw5IEBACiAgICAgICAgIE1pcnJvciB0ZXN0X21ha2VfdGFyYmFsbCwgZXhjZXB0IGZpbGVuYW1lIGNvbnRhaW5zIGV4dGVuZGVkCiAgICAgICAgIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgbGF0aW4gY2hhcnNldC4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX21ha2VfdGFyYmFsbCgn44Gu44Ki44O844Kr44Kk44OWJykgIyBqYXBhbmVzZSBmb3IgYXJjaGl2ZQorICAgICAgICBzZWxmLnRlc3RfbWFrZV90YXJiYWxsKCfjga7jgqLjg7zjgqvjgqTjg5YnKSAjIGphcGFuZXNlIGZvciBhcmNoaXZlCiAKLSAgICBkZWYgX21ha2VfdGFyYmFsbChzZWxmLCB0YXJnZXRfbmFtZSk6Ci0gICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgotICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUxJ10sICd4eHgnKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUyJ10sICd4eHgnKQotICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4odG1wZGlyLCAnc3ViJykpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnc3ViJywgJ2ZpbGUzJ10sICd4eHgnKQotCisgICAgZGVmIF9tYWtlX3RhcmJhbGwoc2VsZiwgdG1wZGlyLCB0YXJnZXRfbmFtZSwgc3VmZml4LCAqKmt3YXJncyk6CiAgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCkBAIC04OSwyNyArMTA5LDEzIEBACiAgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCB0YXJnZXRfbmFtZSkKIAogICAgICAgICAjIHdvcmtpbmcgd2l0aCByZWxhdGl2ZSBwYXRocyB0byBhdm9pZCB0YXIgd2FybmluZ3MKLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWFrZV90YXJiYWxsKHNwbGl0ZHJpdmUoYmFzZV9uYW1lKVsxXSwgJy4nKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgd2l0aCBjaGFuZ2VfY3dkKHRtcGRpcik6CisgICAgICAgICAgICBtYWtlX3RhcmJhbGwoc3BsaXRkcml2ZShiYXNlX25hbWUpWzFdLCAnZGlzdCcsICoqa3dhcmdzKQogCiAgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuZ3onCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyBzdWZmaXgKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQotCi0gICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsIHRhcmdldF9uYW1lKQotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtYWtlX3RhcmJhbGwoc3BsaXRkcml2ZShiYXNlX25hbWUpWzFdLCAnLicsIGNvbXByZXNzPU5vbmUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90YXJpbmZvKHRhcmJhbGwpLCBzZWxmLl9jcmVhdGVkX2ZpbGVzKQogCiAgICAgZGVmIF90YXJpbmZvKHNlbGYsIHBhdGgpOgogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4ocGF0aCkKQEAgLTEyMCw2ICsxMjYsOSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAorICAgIF9jcmVhdGVkX2ZpbGVzID0gKCdkaXN0JywgJ2Rpc3QvZmlsZTEnLCAnZGlzdC9maWxlMicsCisgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3Qvc3ViJywgJ2Rpc3Qvc3ViL2ZpbGUzJywgJ2Rpc3Qvc3ViMicpCisKICAgICBkZWYgX2NyZWF0ZV9maWxlcyhzZWxmKToKICAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCiAgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCkBAIC0xMzAsMTUgKzEzOSwxNSBAQAogICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZGlzdCwgJ3N1YicpKQogICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdzdWInLCAnZmlsZTMnXSwgJ3h4eCcpCiAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkaXN0LCAnc3ViMicpKQotICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKLSAgICAgICAgcmV0dXJuIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lCisgICAgICAgIHJldHVybiB0bXBkaXIKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgYW5kIGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIFpMSUJfU1VQUE9SVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAnTmVlZCB0aGUgdGFyLCBnemlwIGFuZCB6bGliIGNvbW1hbmQgdG8gcnVuJykKICAgICBkZWYgdGVzdF90YXJmaWxlX3ZzX3RhcihzZWxmKToKLSAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgdG1wZGlyID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQogICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgb3MuY2hkaXIodG1wZGlyKQogICAgICAgICB0cnk6CkBAIC0xNjQsNyArMTczLDggQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbDIpKQogICAgICAgICAjIGxldCdzIGNvbXBhcmUgYm90aCB0YXJiYWxscwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RhcmluZm8odGFyYmFsbCksIHNlbGYuX3RhcmluZm8odGFyYmFsbDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RhcmluZm8odGFyYmFsbCksIHNlbGYuX2NyZWF0ZWRfZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGFyaW5mbyh0YXJiYWxsMiksIHNlbGYuX2NyZWF0ZWRfZmlsZXMpCiAKICAgICAgICAgIyB0cnlpbmcgYW4gdW5jb21wcmVzc2VkIG9uZQogICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQpAQCAtMTkxLDcgKzIwMSw4IEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmluZF9leGVjdXRhYmxlKCdjb21wcmVzcycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgY29tcHJlc3MgcHJvZ3JhbSBpcyByZXF1aXJlZCcpCiAgICAgZGVmIHRlc3RfY29tcHJlc3NfZGVwcmVjYXRlZChzZWxmKToKLSAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgdG1wZGlyID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2FyY2hpdmUnKQogCiAgICAgICAgICMgdXNpbmcgY29tcHJlc3MgYW5kIHRlc3RpbmcgdGhlIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcKICAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCkBAIC0yMjQsMTcgKzIzNSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdOZWVkIHppcCBhbmQgemxpYiBzdXBwb3J0IHRvIHJ1bicpCiAgICAgZGVmIHRlc3RfbWFrZV96aXBmaWxlKHNlbGYpOgogICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKLSAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMSddLCAneHh4JykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMiddLCAneHh4JykKLQotICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKLSAgICAgICAgbWFrZV96aXBmaWxlKGJhc2VfbmFtZSwgdG1wZGlyKQorICAgICAgICB0bXBkaXIgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCksICdhcmNoaXZlJykKKyAgICAgICAgd2l0aCBjaGFuZ2VfY3dkKHRtcGRpcik6CisgICAgICAgICAgICBtYWtlX3ppcGZpbGUoYmFzZV9uYW1lLCAnZGlzdCcpCiAKICAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCiAgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnppcCcKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJiYWxsKSBhcyB6ZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHpmLm5hbWVsaXN0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2Rpc3QvZmlsZTEnLCAnZGlzdC9maWxlMicsICdkaXN0L3N1Yi9maWxlMyddKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWklQX1NVUFBPUlQsICdOZWVkIHppcCBzdXBwb3J0IHRvIHJ1bicpCiAgICAgZGVmIHRlc3RfbWFrZV96aXBmaWxlX25vX3psaWIoc2VsZik6CkBAIC0yNTAsMTggKzI2MSwyNCBAQAogICAgICAgICBwYXRjaChzZWxmLCBhcmNoaXZlX3V0aWwuemlwZmlsZSwgJ1ppcEZpbGUnLCBmYWtlX3ppcGZpbGUpCiAKICAgICAgICAgIyBjcmVhdGUgc29tZXRoaW5nIHRvIHRhciBhbmQgY29tcHJlc3MKLSAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQotICAgICAgICBtYWtlX3ppcGZpbGUoYmFzZV9uYW1lLCB0bXBkaXIpCisgICAgICAgIHRtcGRpciA9IHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2FyY2hpdmUnKQorICAgICAgICB3aXRoIGNoYW5nZV9jd2QodG1wZGlyKToKKyAgICAgICAgICAgIG1ha2VfemlwZmlsZShiYXNlX25hbWUsICdkaXN0JykKIAogICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy56aXAnCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsoKHRhcmJhbGwsICJ3IiksIHsnY29tcHJlc3Npb24nOiB6aXBmaWxlLlpJUF9TVE9SRUR9KV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUodGFyYmFsbCkgYXMgemY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh6Zi5uYW1lbGlzdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydkaXN0L2ZpbGUxJywgJ2Rpc3QvZmlsZTInLCAnZGlzdC9zdWIvZmlsZTMnXSkKIAogICAgIGRlZiB0ZXN0X2NoZWNrX2FyY2hpdmVfZm9ybWF0cyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja19hcmNoaXZlX2Zvcm1hdHMoWydnenRhcicsICd4eHgnLCAnemlwJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICd4eHgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrX2FyY2hpdmVfZm9ybWF0cyhbJ2d6dGFyJywgJ3ppcCddKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY2hlY2tfYXJjaGl2ZV9mb3JtYXRzKFsnZ3p0YXInLCAnYnp0YXInLCAneHp0YXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6dGFyJywgJ3RhcicsICd6aXAnXSkpCiAKICAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmUoc2VsZik6CiAgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCkBAIC0yODIsNiArMjk5LDQxIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkZWwgQVJDSElWRV9GT1JNQVRTWyd4eHgnXQogCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX3RhcihzZWxmKToKKyAgICAgICAgYmFzZV9kaXIgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpICwgJ2FyY2hpdmUnKQorICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgYmFzZV9kaXIsICdkaXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZShyZXMpLCAnYXJjaGl2ZS50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RhcmluZm8ocmVzKSwgc2VsZi5fY3JlYXRlZF9maWxlcykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpMSUJfU1VQUE9SVCwgJ05lZWQgemxpYiBzdXBwb3J0IHRvIHJ1bicpCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX2d6dGFyKHNlbGYpOgorICAgICAgICBiYXNlX2RpciA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCkgLCAnYXJjaGl2ZScpCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICdnenRhcicsIGJhc2VfZGlyLCAnZGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUocmVzKSwgJ2FyY2hpdmUudGFyLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90YXJpbmZvKHJlcyksIHNlbGYuX2NyZWF0ZWRfZmlsZXMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhiejIsICdOZWVkIGJ6MiBzdXBwb3J0IHRvIHJ1bicpCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX2J6dGFyKHNlbGYpOgorICAgICAgICBiYXNlX2RpciA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCkgLCAnYXJjaGl2ZScpCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICdienRhcicsIGJhc2VfZGlyLCAnZGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUocmVzKSwgJ2FyY2hpdmUudGFyLmJ6MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGFyaW5mbyhyZXMpLCBzZWxmLl9jcmVhdGVkX2ZpbGVzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MobHptYSwgJ05lZWQgeHogc3VwcG9ydCB0byBydW4nKQorICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV94enRhcihzZWxmKToKKyAgICAgICAgYmFzZV9kaXIgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpICwgJ2FyY2hpdmUnKQorICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAneHp0YXInLCBiYXNlX2RpciwgJ2Rpc3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHJlcyksICdhcmNoaXZlLnRhci54eicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGFyaW5mbyhyZXMpLCBzZWxmLl9jcmVhdGVkX2ZpbGVzKQorCiAgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX293bmVyX2dyb3VwKHNlbGYpOgogICAgICAgICAjIHRlc3RpbmcgbWFrZV9hcmNoaXZlIHdpdGggb3duZXIgYW5kIGdyb3VwLCB3aXRoIHZhcmlvdXMgY29tYmluYXRpb25zCiAgICAgICAgICMgdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlJ3Mgbm90IGdpZC91aWQgc3VwcG9ydApAQCAtMjkxLDcgKzM0Myw4IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBncm91cCA9IG93bmVyID0gJ3Jvb3QnCiAKLSAgICAgICAgYmFzZV9kaXIsIHJvb3RfZGlyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9kaXIgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgcm9vdF9kaXIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCkgLCAnYXJjaGl2ZScpCiAgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIsIG93bmVyPW93bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9Z3JvdXApCkBAIC0zMTEsNyArMzY0LDggQEAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaTElCX1NVUFBPUlQsICJSZXF1aXJlcyB6bGliIikKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKICAgICBkZWYgdGVzdF90YXJmaWxlX3Jvb3Rfb3duZXIoc2VsZik6Ci0gICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIHRtcGRpciA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCksICdhcmNoaXZlJykKICAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCiAgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKICAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdC5weQppbmRleCA1MDNhNmU4Li5mNzYyZjVkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0LnB5CkBAIC0yMSw3ICsyMSw3IEBACiAKICAgICAgICAgIyB3aGF0IGZvcm1hdHMgZG9lcyBiZGlzdCBvZmZlcj8KICAgICAgICAgZm9ybWF0cyA9IFsnYnp0YXInLCAnZ3p0YXInLCAnbXNpJywgJ3JwbScsICd0YXInLAotICAgICAgICAgICAgICAgICAgICd3aW5pbnN0JywgJ3ppcCcsICd6dGFyJ10KKyAgICAgICAgICAgICAgICAgICAnd2luaW5zdCcsICd4enRhcicsICd6aXAnLCAnenRhciddCiAgICAgICAgIGZvdW5kID0gc29ydGVkKGNtZC5mb3JtYXRfY29tbWFuZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgZm9ybWF0cykKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkKaW5kZXggYjlmNDA3Zi4uNGUzOTdlYSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5CkBAIC0zNyw2ICszNyw5IEBACiAgICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IGJ1aWxkX2V4dAogICAgICAgICBidWlsZF9leHQuVVNFUl9CQVNFID0gc2l0ZS5VU0VSX0JBU0UKIAorICAgIGRlZiBidWlsZF9leHQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIGJ1aWxkX2V4dCgqYXJncywgKiprd2FyZ3MpCisKICAgICBkZWYgdGVzdF9idWlsZF9leHQoc2VsZik6CiAgICAgICAgIGdsb2JhbCBBTFJFQURZX1RFU1RFRAogICAgICAgICBjb3B5X3h4bW9kdWxlX2Moc2VsZi50bXBfZGlyKQpAQCAtNDQsNyArNDcsNyBAQAogICAgICAgICB4eF9leHQgPSBFeHRlbnNpb24oJ3h4JywgW3h4X2NdKQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsICdleHRfbW9kdWxlcyc6IFt4eF9leHRdfSkKICAgICAgICAgZGlzdC5wYWNrYWdlX2RpciA9IHNlbGYudG1wX2RpcgotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKKyAgICAgICAgY21kID0gc2VsZi5idWlsZF9leHQoZGlzdCkKICAgICAgICAgZml4dXBfYnVpbGRfZXh0KGNtZCkKICAgICAgICAgY21kLmJ1aWxkX2xpYiA9IHNlbGYudG1wX2RpcgogICAgICAgICBjbWQuYnVpbGRfdGVtcCA9IHNlbGYudG1wX2RpcgpAQCAtOTEsNyArOTQsNyBAQAogCiAgICAgZGVmIHRlc3Rfc29sYXJpc19lbmFibGVfc2hhcmVkKHNlbGYpOgogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCd9KQotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKKyAgICAgICAgY21kID0gc2VsZi5idWlsZF9leHQoZGlzdCkKICAgICAgICAgb2xkID0gc3lzLnBsYXRmb3JtCiAKICAgICAgICAgc3lzLnBsYXRmb3JtID0gJ3N1bm9zJyAjIGZvb2xpbmcgZmluYWxpemVfb3B0aW9ucwpAQCAtMTEzLDcgKzExNiw3IEBACiAgICAgZGVmIHRlc3RfdXNlcl9zaXRlKHNlbGYpOgogICAgICAgICBpbXBvcnQgc2l0ZQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCd9KQotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKKyAgICAgICAgY21kID0gc2VsZi5idWlsZF9leHQoZGlzdCkKIAogICAgICAgICAjIG1ha2luZyBzdXJlIHRoZSB1c2VyIG9wdGlvbiBpcyB0aGVyZQogICAgICAgICBvcHRpb25zID0gW25hbWUgZm9yIG5hbWUsIHNob3J0LCBsYWJsZSBpbgpAQCAtMTQ0LDE0ICsxNDcsMTQgQEAKICAgICAgICAgIyB3aXRoIHRoZSBvcHRpb25hbCBhcmd1bWVudC4KICAgICAgICAgbW9kdWxlcyA9IFtFeHRlbnNpb24oJ2ZvbycsIFsneHh4J10sIG9wdGlvbmFsPUZhbHNlKV0KICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnLCAnZXh0X21vZHVsZXMnOiBtb2R1bGVzfSkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFVua25vd25GaWxlRXJyb3IsIENvbXBpbGVFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5ydW4pICAjIHNob3VsZCByYWlzZSBhbiBlcnJvcgogCiAgICAgICAgIG1vZHVsZXMgPSBbRXh0ZW5zaW9uKCdmb28nLCBbJ3h4eCddLCBvcHRpb25hbD1UcnVlKV0KICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnLCAnZXh0X21vZHVsZXMnOiBtb2R1bGVzfSkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKICAgICAgICAgY21kLnJ1bigpICAjIHNob3VsZCBwYXNzCiAKQEAgLTE2MCw3ICsxNjMsNyBAQAogICAgICAgICAjIGV0Yy4pIGFyZSBpbiB0aGUgaW5jbHVkZSBzZWFyY2ggcGF0aC4KICAgICAgICAgbW9kdWxlcyA9IFtFeHRlbnNpb24oJ2ZvbycsIFsneHh4J10sIG9wdGlvbmFsPUZhbHNlKV0KICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnLCAnZXh0X21vZHVsZXMnOiBtb2R1bGVzfSkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKIAogICAgICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCkBAIC0xNzIsMTQgKzE3NSwxNCBAQAogCiAgICAgICAgICMgbWFrZSBzdXJlIGNtZC5saWJyYXJpZXMgaXMgdHVybmVkIGludG8gYSBsaXN0CiAgICAgICAgICMgaWYgaXQncyBhIHN0cmluZwotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKKyAgICAgICAgY21kID0gc2VsZi5idWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLmxpYnJhcmllcyA9ICdteV9saWIsIG90aGVyX2xpYiBsYXN0bGliJwogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmxpYnJhcmllcywgWydteV9saWInLCAnb3RoZXJfbGliJywgJ2xhc3RsaWInXSkKIAogICAgICAgICAjIG1ha2Ugc3VyZSBjbWQubGlicmFyeV9kaXJzIGlzIHR1cm5lZCBpbnRvIGEgbGlzdAogICAgICAgICAjIGlmIGl0J3MgYSBzdHJpbmcKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5saWJyYXJ5X2RpcnMgPSAnbXlfbGliX2RpciVzb3RoZXJfbGliX2RpcicgJSBvcy5wYXRoc2VwCiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKICAgICAgICAgc2VsZi5hc3NlcnRJbignbXlfbGliX2RpcicsIGNtZC5saWJyYXJ5X2RpcnMpCkBAIC0xODcsNyArMTkwLDcgQEAKIAogICAgICAgICAjIG1ha2Ugc3VyZSBycGF0aCBpcyB0dXJuZWQgaW50byBhIGxpc3QKICAgICAgICAgIyBpZiBpdCdzIGEgc3RyaW5nCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQorICAgICAgICBjbWQgPSBzZWxmLmJ1aWxkX2V4dChkaXN0KQogICAgICAgICBjbWQucnBhdGggPSAnb25lJXN0d28nICUgb3MucGF0aHNlcAogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnJwYXRoLCBbJ29uZScsICd0d28nXSkKQEAgLTE5NiwzMiArMTk5LDMyIEBACiAKICAgICAgICAgIyBtYWtlIHN1cmUgZGVmaW5lIGlzIHR1cm5lZCBpbnRvIDItdHVwbGVzCiAgICAgICAgICMgc3RyaW5ncyBpZiB0aGV5IGFyZSAnLCctc2VwYXJhdGVkIHN0cmluZ3MKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5kZWZpbmUgPSAnb25lLHR3bycKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5kZWZpbmUsIFsoJ29uZScsICcxJyksICgndHdvJywgJzEnKV0pCiAKICAgICAgICAgIyBtYWtlIHN1cmUgdW5kZWYgaXMgdHVybmVkIGludG8gYSBsaXN0IG9mCiAgICAgICAgICMgc3RyaW5ncyBpZiB0aGV5IGFyZSAnLCctc2VwYXJhdGVkIHN0cmluZ3MKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC51bmRlZiA9ICdvbmUsdHdvJwogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnVuZGVmLCBbJ29uZScsICd0d28nXSkKIAogICAgICAgICAjIG1ha2Ugc3VyZSBzd2lnX29wdHMgaXMgdHVybmVkIGludG8gYSBsaXN0Ci0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQorICAgICAgICBjbWQgPSBzZWxmLmJ1aWxkX2V4dChkaXN0KQogICAgICAgICBjbWQuc3dpZ19vcHRzID0gTm9uZQogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnN3aWdfb3B0cywgW10pCiAKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5zd2lnX29wdHMgPSAnMSAyJwogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnN3aWdfb3B0cywgWycxJywgJzInXSkKIAogICAgIGRlZiB0ZXN0X2NoZWNrX2V4dGVuc2lvbnNfbGlzdChzZWxmKToKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQorICAgICAgICBjbWQgPSBzZWxmLmJ1aWxkX2V4dChkaXN0KQogICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCiAKICAgICAgICAgIydleHRlbnNpb25zJyBvcHRpb24gbXVzdCBiZSBhIGxpc3Qgb2YgRXh0ZW5zaW9uIGluc3RhbmNlcwpAQCAtMjQwLDcgKzI0Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5jaGVja19leHRlbnNpb25zX2xpc3QsIGV4dHMpCiAKICAgICAgICAgIyBzZWNvbmQgZWxlbWVudCBvZiBlYWNoIHR1cGxlIGluICdleHRfbW9kdWxlcycKLSAgICAgICAgIyBtdXN0IGJlIGEgYXJ5IChidWlsZCBpbmZvKQorICAgICAgICAjIG11c3QgYmUgYSBkaWN0aW9uYXJ5IChidWlsZCBpbmZvKQogICAgICAgICBleHRzID0gWygnZm9vLmJhcicsICcnKV0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmNoZWNrX2V4dGVuc2lvbnNfbGlzdCwgZXh0cykKIApAQCAtMjcwLDE2ICsyNzMsMTYgQEAKICAgICBkZWYgdGVzdF9nZXRfc291cmNlX2ZpbGVzKHNlbGYpOgogICAgICAgICBtb2R1bGVzID0gW0V4dGVuc2lvbignZm9vJywgWyd4eHgnXSwgb3B0aW9uYWw9RmFsc2UpXQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsICdleHRfbW9kdWxlcyc6IG1vZHVsZXN9KQotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKKyAgICAgICAgY21kID0gc2VsZi5idWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5nZXRfc291cmNlX2ZpbGVzKCksIFsneHh4J10pCiAKICAgICBkZWYgdGVzdF9jb21waWxlcl9vcHRpb24oc2VsZik6CiAgICAgICAgICMgY21kLmNvbXBpbGVyIGlzIGFuIG9wdGlvbiBhbmQKLSAgICAgICAgIyBzaG91bGQgbm90IGJlIG92ZXJyaWRlbiBieSBhIGNvbXBpbGVyIGluc3RhbmNlCisgICAgICAgICMgc2hvdWxkIG5vdCBiZSBvdmVycmlkZGVuIGJ5IGEgY29tcGlsZXIgaW5zdGFuY2UKICAgICAgICAgIyB3aGVuIHRoZSBjb21tYW5kIGlzIHJ1bgogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5jb21waWxlciA9ICd1bml4JwogICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCiAgICAgICAgIGNtZC5ydW4oKQpAQCAtMjkyLDcgKzI5NSw3IEBACiAgICAgICAgIGV4dCA9IEV4dGVuc2lvbignZm9vJywgW2NfZmlsZV0sIG9wdGlvbmFsPUZhbHNlKQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRfbW9kdWxlcyc6IFtleHRdfSkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGZpeHVwX2J1aWxkX2V4dChjbWQpCiAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9vdXRwdXRzKCkpLCAxKQpAQCAtMzU1LDcgKzM1OCw3IEBACiAgICAgICAgICNldHJlZV9leHQgPSBFeHRlbnNpb24oJ2x4bWwuZXRyZWUnLCBbZXRyZWVfY10pCiAgICAgICAgICNkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICdseG1sJywgJ2V4dF9tb2R1bGVzJzogW2V0cmVlX2V4dF19KQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCisgICAgICAgIGNtZCA9IHNlbGYuYnVpbGRfZXh0KGRpc3QpCiAgICAgICAgIGNtZC5pbnBsYWNlID0gMQogICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VfZGlyID0geycnOiAnc3JjJ30KICAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlcyA9IFsnbHhtbCcsICdseG1sLmh0bWwnXQpAQCAtNDYyLDcgKzQ2NSw3IEBACiAgICAgICAgICAgICAnZXh0X21vZHVsZXMnOiBbZGVwdGFyZ2V0X2V4dF0KICAgICAgICAgfSkKICAgICAgICAgZGlzdC5wYWNrYWdlX2RpciA9IHNlbGYudG1wX2RpcgotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKKyAgICAgICAgY21kID0gc2VsZi5idWlsZF9leHQoZGlzdCkKICAgICAgICAgY21kLmJ1aWxkX2xpYiA9IHNlbGYudG1wX2RpcgogICAgICAgICBjbWQuYnVpbGRfdGVtcCA9IHNlbGYudG1wX2RpcgogCkBAIC00ODEsOCArNDg0LDE5IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIldyb25nIGRlcGxveW1lbnQgdGFyZ2V0IGR1cmluZyBjb21waWxhdGlvbiIpCiAKIAorY2xhc3MgUGFyYWxsZWxCdWlsZEV4dFRlc3RDYXNlKEJ1aWxkRXh0VGVzdENhc2UpOgorCisgICAgZGVmIGJ1aWxkX2V4dChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBidWlsZF9leHQgPSBzdXBlcigpLmJ1aWxkX2V4dCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGJ1aWxkX2V4dC5wYXJhbGxlbCA9IFRydWUKKyAgICAgICAgcmV0dXJuIGJ1aWxkX2V4dAorCisKIGRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZEV4dFRlc3RDYXNlKQorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZEV4dFRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShQYXJhbGxlbEJ1aWxkRXh0VGVzdENhc2UpKQorICAgIHJldHVybiBzdWl0ZQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQppbmRleCBjOGY2Yjg5Li4xODI4M2RjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CkBAIC0xMjAsOCArMTIwLDggQEAKICAgICAgICAgZm91bmQgPSBvcy5saXN0ZGlyKGNtZC5idWlsZF9saWIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZvdW5kKSwgWydfX3B5Y2FjaGVfXycsICdib2lsZWRlZ2dzLnB5J10pCiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4oY21kLmJ1aWxkX2xpYiwgJ19fcHljYWNoZV9fJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZvdW5kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQorICAgICAgICBleHBlY3QgPSAnYm9pbGVkZWdncy57fS5vcHQtMS5weWMnLmZvcm1hdChzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFtleHBlY3RdKQogCiAgICAgZGVmIHRlc3RfZGlyX2luX3BhY2thZ2VfZGF0YShzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQppbmRleCA4Mjg2ZTFkLi5hMzg0NDk3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKQEAgLTE4LDYgKzE4LDcgQEAKIGluZGV4LXNlcnZlcnMgPQogICAgIHNlcnZlcjEKICAgICBzZXJ2ZXIyCisgICAgc2VydmVyMwogCiBbc2VydmVyMV0KIHVzZXJuYW1lOm1lCkBAIC0yOCw2ICsyOSwxMCBAQAogcGFzc3dvcmQ6IHNlY3JldAogcmVhbG06YWNtZQogcmVwb3NpdG9yeTpodHRwOi8vYW5vdGhlci5weXBpLworCitbc2VydmVyM10KK3VzZXJuYW1lOmNiaWdnbGVzCitwYXNzd29yZDp5aF4lI3Jlc3Qtb2YtbXktcGFzc3dvcmQKICIiIgogCiBQWVBJUkNfT0xEID0gIiIiXApAQCAtNDcsMTQgKzUyLDE0IEBACiAiIiIKIAogCi1jbGFzcyBQeVBJUkNDb21tYW5kVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKK2NsYXNzIEJhc2VQeVBJUkNDb21tYW5kVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlBhdGNoZXMgdGhlIGVudmlyb25tZW50LiIiIgotICAgICAgICBzdXBlcihQeVBJUkNDb21tYW5kVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc3VwZXIoQmFzZVB5UElSQ0NvbW1hbmRUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgICBzZWxmLnRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSBzZWxmLnRtcF9kaXIKICAgICAgICAgc2VsZi5yYyA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICcucHlwaXJjJykKQEAgLTczLDcgKzc4LDEwIEBACiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICAiIiJSZW1vdmVzIHRoZSBwYXRjaC4iIiIKICAgICAgICAgc2V0X3RocmVzaG9sZChzZWxmLm9sZF90aHJlc2hvbGQpCi0gICAgICAgIHN1cGVyKFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorICAgICAgICBzdXBlcihCYXNlUHlQSVJDQ29tbWFuZFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCisKKworY2xhc3MgUHlQSVJDQ29tbWFuZFRlc3RDYXNlKEJhc2VQeVBJUkNDb21tYW5kVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc2VydmVyX3JlZ2lzdHJhdGlvbihzZWxmKToKICAgICAgICAgIyBUaGlzIHRlc3QgbWFrZXMgc3VyZSBQeVBJUkNDb21tYW5kIGtub3dzIGhvdyB0bzoKQEAgLTExMyw2ICsxMjEsMjAgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY29uZmlnX2ludGVycG9sYXRpb24oc2VsZik6CisgICAgICAgICMgdXNpbmcgdGhlICUgY2hhcmFjdGVyIGluIC5weXBpcmMgc2hvdWxkIG5vdCByYWlzZSBhbiBlcnJvciAoIzIwMTIwKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDKQorICAgICAgICBjbWQgPSBzZWxmLl9jbWQoc2VsZi5kaXN0KQorICAgICAgICBjbWQucmVwb3NpdG9yeSA9ICdzZXJ2ZXIzJworICAgICAgICBjb25maWcgPSBjbWQuX3JlYWRfcHlwaXJjKCkKKworICAgICAgICBjb25maWcgPSBsaXN0KHNvcnRlZChjb25maWcuaXRlbXMoKSkpCisgICAgICAgIHdhaXRlZCA9IFsoJ3Bhc3N3b3JkJywgJ3loXiUjcmVzdC1vZi1teS1wYXNzd29yZCcpLCAoJ3JlYWxtJywgJ3B5cGknKSwKKyAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwczovL3VwbG9hZC5weXBpLm9yZy9sZWdhY3kvJyksCisgICAgICAgICAgICAgICAgICAoJ3NlcnZlcicsICdzZXJ2ZXIzJyksICgndXNlcm5hbWUnLCAnY2JpZ2dsZXMnKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25maWcsIHdhaXRlZCkKKworCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CmluZGV4IDE4ZTFlNTcuLjkzMTMzMzAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CkBAIC0yMCw4ICsyMCw2IEBACiAKIAogZGVmIF9tYWtlX2V4dF9uYW1lKG1vZG5hbWUpOgotICAgIGlmIG9zLm5hbWUgPT0gJ250JyBhbmQgc3lzLmV4ZWN1dGFibGUuZW5kc3dpdGgoJ19kLmV4ZScpOgotICAgICAgICBtb2RuYW1lICs9ICdfZCcKICAgICByZXR1cm4gbW9kbmFtZSArIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpCiAKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CmluZGV4IDQwZGQxYTkuLjUzNzhhYTggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKQEAgLTQ0LDEyICs0NCwxMSBAQAogICAgICAgICBmID0gb3MucGF0aC5qb2luKHByb2plY3RfZGlyLCAnZm9vLnB5JykKICAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKICAgICAgICAgY21kLmJ5dGVfY29tcGlsZShbZl0pCi0gICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkKLSAgICAgICAgcHlvX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1GYWxzZSkKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5Jywgb3B0aW1pemF0aW9uPScnKQorICAgICAgICBweWNfb3B0X2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb249Y21kLm9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHljX2ZpbGUpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHlvX2ZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHljX29wdF9maWxlKSkKIAogICAgIGRlZiB0ZXN0X2dldF9vdXRwdXRzKHNlbGYpOgogICAgICAgICBwcm9qZWN0X2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQpAQCAtNjYsOCArNjUsOCBAQAogICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VzID0gWydzcGFtJ10KICAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5zY3JpcHRfbmFtZSA9ICdzZXR1cC5weScKIAotICAgICAgICAjIGdldF9vdXRwdXRzIHNob3VsZCByZXR1cm4gNCBlbGVtZW50czogc3BhbS9fX2luaXRfXy5weSwgLnB5YyBhbmQKLSAgICAgICAgIyAucHlvLCBmb28uaW1wb3J0LXRhZy1hYmlmbGFncy5zbyAvIGZvby5weWQKKyAgICAgICAgIyBnZXRfb3V0cHV0cyBzaG91bGQgcmV0dXJuIDQgZWxlbWVudHM6IHNwYW0vX19pbml0X18ucHkgYW5kIC5weWMsCisgICAgICAgICMgZm9vLmltcG9ydC10YWctYWJpZmxhZ3Muc28gLyBmb28ucHlkCiAgICAgICAgIG91dHB1dHMgPSBjbWQuZ2V0X291dHB1dHMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXRwdXRzKSwgNCwgb3V0cHV0cykKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X21zdmNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9tc3ZjY29tcGlsZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjMjQ4OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9tc3ZjY29tcGlsZXIucHkKQEAgLTAsMCArMSwxMDggQEAKKyIiIlRlc3RzIGZvciBkaXN0dXRpbHMuX21zdmNjb21waWxlci4iIiIKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCisKK2Zyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworCitTS0lQX01FU1NBR0UgPSAoTm9uZSBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIiBlbHNlCisgICAgICAgICAgICAgICAgIlRoZXNlIHRlc3RzIGFyZSBvbmx5IGZvciB3aW4zMiIpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKFNLSVBfTUVTU0FHRSBpcyBOb25lLCBTS0lQX01FU1NBR0UpCitjbGFzcyBtc3ZjY29tcGlsZXJUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vX2NvbXBpbGVyKHNlbGYpOgorICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLl9tc3ZjY29tcGlsZXIgYXMgX21zdmNjb21waWxlcgorICAgICAgICAjIG1ha2VzIHN1cmUgcXVlcnlfdmN2YXJzYWxsIHJhaXNlcworICAgICAgICAjIGEgRGlzdHV0aWxzUGxhdGZvcm1FcnJvciBpZiB0aGUgY29tcGlsZXIKKyAgICAgICAgIyBpcyBub3QgZm91bmQKKyAgICAgICAgZGVmIF9maW5kX3ZjdmFyc2FsbChwbGF0X3NwZWMpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworICAgICAgICBvbGRfZmluZF92Y3ZhcnNhbGwgPSBfbXN2Y2NvbXBpbGVyLl9maW5kX3ZjdmFyc2FsbAorICAgICAgICBfbXN2Y2NvbXBpbGVyLl9maW5kX3ZjdmFyc2FsbCA9IF9maW5kX3ZjdmFyc2FsbAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21zdmNjb21waWxlci5fZ2V0X3ZjX2VudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dvbnQgZmluZCB0aGlzIHZlcnNpb24nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX21zdmNjb21waWxlci5fZmluZF92Y3ZhcnNhbGwgPSBvbGRfZmluZF92Y3ZhcnNhbGwKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVyX29wdGlvbnMoc2VsZik6CisgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuX21zdmNjb21waWxlciBhcyBfbXN2Y2NvbXBpbGVyCisgICAgICAgICMgc3VwcHJlc3MgcGF0aCB0byB2Y3J1bnRpbWUgZnJvbSBfZmluZF92Y3ZhcnNhbGwgdG8KKyAgICAgICAgIyBjaGVjayB0aGF0IC9NVCBpcyBhZGRlZCB0byBjb21waWxlIG9wdGlvbnMKKyAgICAgICAgb2xkX2ZpbmRfdmN2YXJzYWxsID0gX21zdmNjb21waWxlci5fZmluZF92Y3ZhcnNhbGwKKyAgICAgICAgZGVmIF9maW5kX3ZjdmFyc2FsbChwbGF0X3NwZWMpOgorICAgICAgICAgICAgcmV0dXJuIG9sZF9maW5kX3ZjdmFyc2FsbChwbGF0X3NwZWMpWzBdLCBOb25lCisgICAgICAgIF9tc3ZjY29tcGlsZXIuX2ZpbmRfdmN2YXJzYWxsID0gX2ZpbmRfdmN2YXJzYWxsCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbXBpbGVyID0gX21zdmNjb21waWxlci5NU1ZDQ29tcGlsZXIoKQorICAgICAgICAgICAgY29tcGlsZXIuaW5pdGlhbGl6ZSgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy9NVCcsIGNvbXBpbGVyLmNvbXBpbGVfb3B0aW9ucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJy9NRCcsIGNvbXBpbGVyLmNvbXBpbGVfb3B0aW9ucykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9tc3ZjY29tcGlsZXIuX2ZpbmRfdmN2YXJzYWxsID0gb2xkX2ZpbmRfdmN2YXJzYWxsCisKKyAgICBkZWYgdGVzdF92Y3J1bnRpbWVfY29weShzZWxmKToKKyAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5fbXN2Y2NvbXBpbGVyIGFzIF9tc3ZjY29tcGlsZXIKKyAgICAgICAgIyBmb3JjZSBwYXRoIHRvIGEga25vd24gZmlsZSAtIGl0IGRvZXNuJ3QgbWF0dGVyCisgICAgICAgICMgd2hhdCB3ZSBjb3B5IGFzIGxvbmcgYXMgaXRzIG5hbWUgaXMgbm90IGluCisgICAgICAgICMgX21zdmNjb21waWxlci5fQlVORExFRF9ETExTCisgICAgICAgIG9sZF9maW5kX3ZjdmFyc2FsbCA9IF9tc3ZjY29tcGlsZXIuX2ZpbmRfdmN2YXJzYWxsCisgICAgICAgIGRlZiBfZmluZF92Y3ZhcnNhbGwocGxhdF9zcGVjKToKKyAgICAgICAgICAgIHJldHVybiBvbGRfZmluZF92Y3ZhcnNhbGwocGxhdF9zcGVjKVswXSwgX19maWxlX18KKyAgICAgICAgX21zdmNjb21waWxlci5fZmluZF92Y3ZhcnNhbGwgPSBfZmluZF92Y3ZhcnNhbGwKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgICAgICBjb21waWxlciA9IF9tc3ZjY29tcGlsZXIuTVNWQ0NvbXBpbGVyKCkKKyAgICAgICAgICAgIGNvbXBpbGVyLmluaXRpYWxpemUoKQorICAgICAgICAgICAgY29tcGlsZXIuX2NvcHlfdmNydW50aW1lKHRlbXBkaXIpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgdGVtcGRpciwgb3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykpKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9tc3ZjY29tcGlsZXIuX2ZpbmRfdmN2YXJzYWxsID0gb2xkX2ZpbmRfdmN2YXJzYWxsCisKKyAgICBkZWYgdGVzdF92Y3J1bnRpbWVfc2tpcF9jb3B5KHNlbGYpOgorICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLl9tc3ZjY29tcGlsZXIgYXMgX21zdmNjb21waWxlcgorCisgICAgICAgIHRlbXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBjb21waWxlciA9IF9tc3ZjY29tcGlsZXIuTVNWQ0NvbXBpbGVyKCkKKyAgICAgICAgY29tcGlsZXIuaW5pdGlhbGl6ZSgpCisgICAgICAgIGRsbCA9IGNvbXBpbGVyLl92Y3J1bnRpbWVfcmVkaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShkbGwpKQorCisgICAgICAgIGNvbXBpbGVyLl9jb3B5X3ZjcnVudGltZSh0ZW1wZGlyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKAorICAgICAgICAgICAgdGVtcGRpciwgb3MucGF0aC5iYXNlbmFtZShkbGwpKSkpCisKKyAgICBkZWYgdGVzdF9nZXRfdmNfZW52X3VuaWNvZGUoc2VsZik6CisgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuX21zdmNjb21waWxlciBhcyBfbXN2Y2NvbXBpbGVyCisKKyAgICAgICAgdGVzdF92YXIgPSAn4bmw4biW4bmk4bmq4pSF4bm84bqo4bmcJworICAgICAgICB0ZXN0X3ZhbHVlID0gJ+KCg+KBtOKChScKKworICAgICAgICAjIEVuc3VyZSB3ZSBkb24ndCBlYXJseSBleGl0IGZyb20gX2dldF92Y19lbnYKKyAgICAgICAgb2xkX2Rpc3R1dGlsc191c2Vfc2RrID0gb3MuZW52aXJvbi5wb3AoJ0RJU1RVVElMU19VU0VfU0RLJywgTm9uZSkKKyAgICAgICAgb3MuZW52aXJvblt0ZXN0X3Zhcl0gPSB0ZXN0X3ZhbHVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVudiA9IF9tc3ZjY29tcGlsZXIuX2dldF92Y19lbnYoJ3g4NicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RfdmFyLmxvd2VyKCksIGVudikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF92YWx1ZSwgZW52W3Rlc3RfdmFyLmxvd2VyKCldKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuZW52aXJvbi5wb3AodGVzdF92YXIpCisgICAgICAgICAgICBpZiBvbGRfZGlzdHV0aWxzX3VzZV9zZGs6CisgICAgICAgICAgICAgICAgb3MuZW52aXJvblsnRElTVFVUSUxTX1VTRV9TREsnXSA9IG9sZF9kaXN0dXRpbHNfdXNlX3NkaworCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUobXN2Y2NvbXBpbGVyVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9yZWdpc3Rlci5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9yZWdpc3Rlci5weQppbmRleCA2MTgwMTMzLi5lNjhiMGFmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfcmVnaXN0ZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3JlZ2lzdGVyLnB5CkBAIC0xMiw3ICsxMiw3IEBACiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1NldHVwRXJyb3IKIGZyb20gZGlzdHV0aWxzLmxvZyBpbXBvcnQgSU5GTwogCi1mcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgUHlQSVJDQ29tbWFuZFRlc3RDYXNlCitmcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgQmFzZVB5UElSQ0NvbW1hbmRUZXN0Q2FzZQogCiB0cnk6CiAgICAgaW1wb3J0IGRvY3V0aWxzCkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICAgICB9LmdldChuYW1lLmxvd2VyKCksIGRlZmF1bHQpCiAKIAotY2xhc3MgUmVnaXN0ZXJUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgorY2xhc3MgUmVnaXN0ZXJUZXN0Q2FzZShCYXNlUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoUmVnaXN0ZXJUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQpAQCAtMzAxLDYgKzMwMSwyMCBAQAogICAgICAgICByZXN1bHRzID0gc2VsZi5nZXRfbG9ncyhJTkZPKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsncnVubmluZyBjaGVjaycsICd4eHgnXSkKIAorICAgIGRlZiB0ZXN0X3Nob3dfcmVzcG9uc2Uoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IHRoZSAtLXNob3ctcmVzcG9uc2Ugb3B0aW9uIHJldHVybiBhIHdlbGwgZm9ybWF0dGVkIHJlc3BvbnNlCisgICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQoKQorICAgICAgICBpbnB1dHMgPSBJbnB1dHMoJzEnLCAndGFyZWsnLCAneScpCisgICAgICAgIHJlZ2lzdGVyX21vZHVsZS5pbnB1dCA9IGlucHV0cy5fX2NhbGxfXworICAgICAgICBjbWQuc2hvd19yZXNwb25zZSA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kLnJ1bigpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgcmVnaXN0ZXJfbW9kdWxlLmlucHV0CisKKyAgICAgICAgcmVzdWx0cyA9IHNlbGYuZ2V0X2xvZ3MoSU5GTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzWzNdLCA3NSAqICctJyArICdcbnh4eFxuJyArIDc1ICogJy0nKQorCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShSZWdpc3RlclRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CmluZGV4IDVhMDRlMGQuLjU0NDRiODEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKQEAgLTIzLDcgKzIzLDcgQEAKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdCBpbXBvcnQgc2Rpc3QsIHNob3dfZm9ybWF0cwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCi1mcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgUHlQSVJDQ29tbWFuZFRlc3RDYXNlCitmcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgQmFzZVB5UElSQ0NvbW1hbmRUZXN0Q2FzZQogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNPcHRpb25FcnJvcgogZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQogZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBXQVJOCkBAIC01Miw3ICs1Miw3IEBACiBzb21lY29kZSUoc2VwKXNkb2MudHh0CiAiIiIKIAotY2xhc3MgU0Rpc3RUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgorY2xhc3MgU0Rpc3RUZXN0Q2FzZShCYXNlUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyBQeVBJUkNDb21tYW5kVGVzdENhc2UgY3JlYXRlcyBhIHRlbXAgZGlyIGFscmVhZHkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91bml4Y2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VuaXhjY29tcGlsZXIucHkKaW5kZXggM2QxNGUxMi4uZTE3MWVlOSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VuaXhjY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VuaXhjY29tcGlsZXIucHkKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2MubGlua2VyX3NvWzBdLCAnbXlfY2MnKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAndGVzdCBvbmx5IHJlbGV2YW50IGZvciBPUyBYJykKLSAgICBkZWYgdGVzdF9vc3hfZXhwbGljdF9sZHNoYXJlZChzZWxmKToKKyAgICBkZWYgdGVzdF9vc3hfZXhwbGljaXRfbGRzaGFyZWQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE4MDgwOgogICAgICAgICAjIGVuc3VyZSB0aGF0IHNldHRpbmcgQ0MgZW52IHZhcmlhYmxlIGRvZXMgbm90IGNoYW5nZQogICAgICAgICAjICAgZXhwbGljaXQgTERTSEFSRUQgc2V0dGluZyBmb3IgbGlua2VyCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQppbmRleCBjYmJiZTMzLi4yY2IyZjZjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKQEAgLTEsMTUgKzEsMTggQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC51cGxvYWQuIiIiCiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jaworZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgSFRUUEVycm9yCisKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgdXBsb2FkIGFzIHVwbG9hZF9tb2QKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkIGltcG9ydCB1cGxvYWQKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFcnJvcgotZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBJTkZPCitmcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IEVSUk9SLCBJTkZPCiAKLWZyb20gZGlzdHV0aWxzLnRlc3RzLnRlc3RfY29uZmlnIGltcG9ydCBQWVBJUkMsIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZQorZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IFBZUElSQywgQmFzZVB5UElSQ0NvbW1hbmRUZXN0Q2FzZQogCiBQWVBJUkNfTE9OR19QQVNTV09SRCA9ICIiIlwKIFtkaXN0dXRpbHNdCkBAIC02Myw3ICs2Niw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmNvZGUKIAogCi1jbGFzcyB1cGxvYWRUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgorY2xhc3MgdXBsb2FkVGVzdENhc2UoQmFzZVB5UElSQ0NvbW1hbmRUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKHVwbG9hZFRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCkBAIC0xMjcsMjMgKzEzMCw1MCBAQAogCiAgICAgICAgICMgd2hhdCBkaWQgd2Ugc2VuZCA/CiAgICAgICAgIGhlYWRlcnMgPSBkaWN0KHNlbGYubGFzdF9vcGVuLnJlcS5oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbJ0NvbnRlbnQtbGVuZ3RoJ10sICcyMTYxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjE2MicpCiAgICAgICAgIGNvbnRlbnRfdHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb250ZW50X3R5cGUuc3RhcnRzd2l0aCgnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubGFzdF9vcGVuLnJlcS5nZXRfbWV0aG9kKCksICdQT1NUJykKICAgICAgICAgZXhwZWN0ZWRfdXJsID0gJ2h0dHBzOi8vdXBsb2FkLnB5cGkub3JnL2xlZ2FjeS8nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLCBleHBlY3RlZF91cmwpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ3h4eCcgaW4gc2VsZi5sYXN0X29wZW4ucmVxLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidwcm90b2NvbF92ZXJzaW9uJywgc2VsZi5sYXN0X29wZW4ucmVxLmRhdGEpCiAKICAgICAgICAgIyBUaGUgUHlQSSByZXNwb25zZSBib2R5IHdhcyBlY2hvZWQKICAgICAgICAgcmVzdWx0cyA9IHNlbGYuZ2V0X2xvZ3MoSU5GTykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigneHl6enlcbicsIHJlc3VsdHNbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHNbLTFdLCA3NSAqICctJyArICdcbnh5enp5XG4nICsgNzUgKiAnLScpCiAKICAgICBkZWYgdGVzdF91cGxvYWRfZmFpbHMoc2VsZik6CiAgICAgICAgIHNlbGYubmV4dF9tc2cgPSAiTm90IEZvdW5kIgogICAgICAgICBzZWxmLm5leHRfY29kZSA9IDQwNAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNFcnJvciwgc2VsZi50ZXN0X3VwbG9hZCkKIAorICAgIGRlZiB0ZXN0X3dyb25nX2V4Y2VwdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgdG1wID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbih0bXAsICd4eHgnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUocGF0aCkKKyAgICAgICAgZGlzdF9maWxlcyA9IFsoJ3h4eCcsICcyLjYnLCBwYXRoKV0gICMgY29tbWFuZCwgcHl2ZXJzaW9uLCBmaWxlbmFtZQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDX0xPTkdfUEFTU1dPUkQpCisKKyAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoZGlzdF9maWxlcz1kaXN0X2ZpbGVzKQorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgIChPU0Vycm9yKCdvc2Vycm9yJyksICdvc2Vycm9yJywgT1NFcnJvciksCisgICAgICAgICAgICAoSFRUUEVycm9yKCd1cmwnLCA0MDAsICdodHRwZXJyb3InLCB7fSwgTm9uZSksCisgICAgICAgICAgICAgJ1VwbG9hZCBmYWlsZWQgKDQwMCk6IGh0dHBlcnJvcicsIERpc3R1dGlsc0Vycm9yKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZXhjZXB0aW9uLCBleHBlY3RlZCwgcmFpc2VkX2V4Y2VwdGlvbiBpbiB0ZXN0czoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGV4Y2VwdGlvbj10eXBlKGV4Y2VwdGlvbikuX19uYW1lX18pOgorICAgICAgICAgICAgICAgIHdpdGggbW9jay5wYXRjaCgnZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkLnVybG9wZW4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXc9bW9jay5Nb2NrKHNpZGVfZWZmZWN0PWV4Y2VwdGlvbikpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHJhaXNlZF9leGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gdXBsb2FkKGRpc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgICAgICAgICAgICAgICAgICBjbWQucnVuKCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHNlbGYuZ2V0X2xvZ3MoRVJST1IpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIHJlc3VsdHNbLTFdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyX2xvZ3MoKQorCisKIGRlZiB0ZXN0X3N1aXRlKCk6CiAgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZSh1cGxvYWRUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CmluZGV4IDA5NGEyZjAuLjNmMzIxYzIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKQEAgLTc2LDcgKzc2LDkgQEAKICAgICBzdGF0aWNfbGliX2V4dGVuc2lvbiA9ICIuYSIKICAgICBzaGFyZWRfbGliX2V4dGVuc2lvbiA9ICIuc28iCiAgICAgZHlsaWJfbGliX2V4dGVuc2lvbiA9ICIuZHlsaWIiCisgICAgeGNvZGVfc3R1Yl9saWJfZXh0ZW5zaW9uID0gIi50YmQiCiAgICAgc3RhdGljX2xpYl9mb3JtYXQgPSBzaGFyZWRfbGliX2Zvcm1hdCA9IGR5bGliX2xpYl9mb3JtYXQgPSAibGliJXMlcyIKKyAgICB4Y29kZV9zdHViX2xpYl9mb3JtYXQgPSBkeWxpYl9saWJfZm9ybWF0CiAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJjeWd3aW4iOgogICAgICAgICBleGVfZXh0ZW5zaW9uID0gIi5leGUiCiAKQEAgLTIyNSw2ICsyMjcsOCBAQAogICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjZdID09ICJkYXJ3aW4iOgogICAgICAgICAgICAgIyBNYWNPU1gncyBsaW5rZXIgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAtUiBmbGFnIGF0IGFsbAogICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm1bOjddID09ICJmcmVlYnNkIjoKKyAgICAgICAgICAgIHJldHVybiAiLVdsLC1ycGF0aD0iICsgZGlyCiAgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtWzo1XSA9PSAiaHAtdXgiOgogICAgICAgICAgICAgaWYgc2VsZi5faXNfZ2NjKGNvbXBpbGVyKToKICAgICAgICAgICAgICAgICByZXR1cm4gWyItV2wsK3MiLCAiLUwiICsgZGlyXQpAQCAtMjU1LDEyICsyNTksMjggQEAKICAgICBkZWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgZGlycywgbGliLCBkZWJ1Zz0wKToKICAgICAgICAgc2hhcmVkX2YgPSBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliLCBsaWJfdHlwZT0nc2hhcmVkJykKICAgICAgICAgZHlsaWJfZiA9IHNlbGYubGlicmFyeV9maWxlbmFtZShsaWIsIGxpYl90eXBlPSdkeWxpYicpCisgICAgICAgIHhjb2RlX3N0dWJfZiA9IHNlbGYubGlicmFyeV9maWxlbmFtZShsaWIsIGxpYl90eXBlPSd4Y29kZV9zdHViJykKICAgICAgICAgc3RhdGljX2YgPSBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliLCBsaWJfdHlwZT0nc3RhdGljJykKIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICAjIE9uIE9TWCB1c2VycyBjYW4gc3BlY2lmeSBhbiBhbHRlcm5hdGUgU0RLIHVzaW5nCiAgICAgICAgICAgICAjICctaXN5c3Jvb3QnLCBjYWxjdWxhdGUgdGhlIFNESyByb290IGlmIGl0IGlzIHNwZWNpZmllZAogICAgICAgICAgICAgIyAoYW5kIHVzZSBpdCBmdXJ0aGVyIG9uKQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBOb3RlIHRoYXQsIGFzIG9mIFhjb2RlIDcsIEFwcGxlIFNES3MgbWF5IGNvbnRhaW4gdGV4dHVhbCBzdHViCisgICAgICAgICAgICAjIGxpYnJhcmllcyB3aXRoIC50YmQgZXh0ZW5zaW9ucyByYXRoZXIgdGhhbiB0aGUgbm9ybWFsIC5keWxpYgorICAgICAgICAgICAgIyBzaGFyZWQgbGlicmFyaWVzIGluc3RhbGxlZCBpbiAvLiAgVGhlIEFwcGxlIGNvbXBpbGVyIHRvb2wKKyAgICAgICAgICAgICMgY2hhaW4gaGFuZGxlcyB0aGlzIHRyYW5zcGFyZW50bHkgYnV0IGl0IGNhbiBjYXVzZSBwcm9ibGVtcworICAgICAgICAgICAgIyBmb3IgcHJvZ3JhbXMgdGhhdCBhcmUgYmVpbmcgYnVpbHQgd2l0aCBhbiBTREsgYW5kIHNlYXJjaGluZworICAgICAgICAgICAgIyBmb3Igc3BlY2lmaWMgbGlicmFyaWVzLiAgQ2FsbGVycyBvZiBmaW5kX2xpYnJhcnlfZmlsZSBuZWVkIHRvCisgICAgICAgICAgICAjIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBiYXNlIGZpbGVuYW1lIG9mIHRoZSByZXR1cm5lZCBTREsgbGlicmFyeQorICAgICAgICAgICAgIyBmaWxlIG1pZ2h0IGhhdmUgYSBkaWZmZXJlbnQgZXh0ZW5zaW9uIGZyb20gdGhhdCBvZiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBmaWxlIGluc3RhbGxlZCBvbiB0aGUgcnVubmluZyBzeXN0ZW0sIGZvciBleGFtcGxlOgorICAgICAgICAgICAgIyAgIC9BcHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMvCisgICAgICAgICAgICAjICAgICAgIE1hY09TWC5wbGF0Zm9ybS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC4xMS5zZGsvCisgICAgICAgICAgICAjICAgICAgIHVzci9saWIvbGliZWRpdC50YmQKKyAgICAgICAgICAgICMgdnMKKyAgICAgICAgICAgICMgICAvdXNyL2xpYi9saWJlZGl0LmR5bGliCiAgICAgICAgICAgICBjZmxhZ3MgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpCiAgICAgICAgICAgICBtID0gcmUuc2VhcmNoKHInLWlzeXNyb290XHMrKFxTKyknLCBjZmxhZ3MpCiAgICAgICAgICAgICBpZiBtIGlzIE5vbmU6CkBAIC0yNzQsNiArMjk0LDcgQEAKICAgICAgICAgICAgIHNoYXJlZCA9IG9zLnBhdGguam9pbihkaXIsIHNoYXJlZF9mKQogICAgICAgICAgICAgZHlsaWIgPSBvcy5wYXRoLmpvaW4oZGlyLCBkeWxpYl9mKQogICAgICAgICAgICAgc3RhdGljID0gb3MucGF0aC5qb2luKGRpciwgc3RhdGljX2YpCisgICAgICAgICAgICB4Y29kZV9zdHViID0gb3MucGF0aC5qb2luKGRpciwgeGNvZGVfc3R1Yl9mKQogCiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicgYW5kICgKICAgICAgICAgICAgICAgICBkaXIuc3RhcnRzd2l0aCgnL1N5c3RlbS8nKSBvciAoCkBAIC0yODIsNiArMzAzLDcgQEAKICAgICAgICAgICAgICAgICBzaGFyZWQgPSBvcy5wYXRoLmpvaW4oc3lzcm9vdCwgZGlyWzE6XSwgc2hhcmVkX2YpCiAgICAgICAgICAgICAgICAgZHlsaWIgPSBvcy5wYXRoLmpvaW4oc3lzcm9vdCwgZGlyWzE6XSwgZHlsaWJfZikKICAgICAgICAgICAgICAgICBzdGF0aWMgPSBvcy5wYXRoLmpvaW4oc3lzcm9vdCwgZGlyWzE6XSwgc3RhdGljX2YpCisgICAgICAgICAgICAgICAgeGNvZGVfc3R1YiA9IG9zLnBhdGguam9pbihzeXNyb290LCBkaXJbMTpdLCB4Y29kZV9zdHViX2YpCiAKICAgICAgICAgICAgICMgV2UncmUgc2Vjb25kLWd1ZXNzaW5nIHRoZSBsaW5rZXIgaGVyZSwgd2l0aCBub3QgbXVjaCBoYXJkCiAgICAgICAgICAgICAjIGRhdGEgdG8gZ28gb246IEdDQyBzZWVtcyB0byBwcmVmZXIgdGhlIHNoYXJlZCBsaWJyYXJ5LCBzbyBJJ20KQEAgLTI4OSw2ICszMTEsOCBAQAogICAgICAgICAgICAgIyBpZ25vcmluZyBldmVuIEdDQydzICItc3RhdGljIiBvcHRpb24uICBTbyBzdWUgbWUuCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkeWxpYik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGR5bGliCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHhjb2RlX3N0dWIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29kZV9zdHViCiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNoYXJlZCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNoYXJlZAogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzdGF0aWMpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CmluZGV4IDVhZGNhYzUuLmU0MjMzMjUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKQEAgLTMyMiwxMSArMzIyLDExIEBACiAgICAgICAgICAgICAgICAgICBwcmVmaXg9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwKICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9MSwgZHJ5X3J1bj0wLAogICAgICAgICAgICAgICAgICAgZGlyZWN0PU5vbmUpOgotICAgICIiIkJ5dGUtY29tcGlsZSBhIGNvbGxlY3Rpb24gb2YgUHl0aG9uIHNvdXJjZSBmaWxlcyB0byBlaXRoZXIgLnB5YwotICAgIG9yIC5weW8gZmlsZXMgaW4gYSBfX3B5Y2FjaGVfXyBzdWJkaXJlY3RvcnkuICAncHlfZmlsZXMnIGlzIGEgbGlzdAorICAgICIiIkJ5dGUtY29tcGlsZSBhIGNvbGxlY3Rpb24gb2YgUHl0aG9uIHNvdXJjZSBmaWxlcyB0byAucHljCisgICAgZmlsZXMgaW4gYSBfX3B5Y2FjaGVfXyBzdWJkaXJlY3RvcnkuICAncHlfZmlsZXMnIGlzIGEgbGlzdAogICAgIG9mIGZpbGVzIHRvIGNvbXBpbGU7IGFueSBmaWxlcyB0aGF0IGRvbid0IGVuZCBpbiAiLnB5IiBhcmUgc2lsZW50bHkKICAgICBza2lwcGVkLiAgJ29wdGltaXplJyBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgICAgMCAtIGRvbid0IG9wdGltaXplIChnZW5lcmF0ZSAucHljKQorICAgICAgMCAtIGRvbid0IG9wdGltaXplCiAgICAgICAxIC0gbm9ybWFsIG9wdGltaXphdGlvbiAobGlrZSAicHl0aG9uIC1PIikKICAgICAgIDIgLSBleHRyYSBvcHRpbWl6YXRpb24gKGxpa2UgInB5dGhvbiAtT08iKQogICAgIElmICdmb3JjZScgaXMgdHJ1ZSwgYWxsIGZpbGVzIGFyZSByZWNvbXBpbGVkIHJlZ2FyZGxlc3Mgb2YKQEAgLTQzOCw4ICs0MzgsOSBAQAogICAgICAgICAgICAgIyAgIGNmaWxlIC0gYnl0ZS1jb21waWxlZCBmaWxlCiAgICAgICAgICAgICAjICAgZGZpbGUgLSBwdXJwb3J0ZWQgc291cmNlIGZpbGVuYW1lIChzYW1lIGFzICdmaWxlJyBieSBkZWZhdWx0KQogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKKyAgICAgICAgICAgICAgICBvcHQgPSAnJyBpZiBvcHRpbWl6ZSA9PSAwIGVsc2Ugb3B0aW1pemUKICAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAotICAgICAgICAgICAgICAgICAgICBmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgICAgIGZpbGUsIG9wdGltaXphdGlvbj1vcHQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKICAgICAgICAgICAgIGRmaWxlID0gZmlsZQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy92ZXJzaW9uLnB5IGIvTGliL2Rpc3R1dGlscy92ZXJzaW9uLnB5CmluZGV4IGViY2FiODQuLmFmMTRjYzEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdmVyc2lvbi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3ZlcnNpb24ucHkKQEAgLTQ4LDEyICs0OCw2IEBACiAgICAgICAgICAgICByZXR1cm4gYwogICAgICAgICByZXR1cm4gYyA9PSAwCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgYyA9IHNlbGYuX2NtcChvdGhlcikKLSAgICAgICAgaWYgYyBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBjCi0gICAgICAgIHJldHVybiBjICE9IDAKLQogICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgICAgICBjID0gc2VsZi5fY21wKG90aGVyKQogICAgICAgICBpZiBjIGlzIE5vdEltcGxlbWVudGVkOgpkaWZmIC0tZ2l0IGEvTGliL2RvY3Rlc3QucHkgYi9MaWIvZG9jdGVzdC5weQppbmRleCA0MzJlZjA1Li4zOGZkZDgwIDEwMDY0NAotLS0gYS9MaWIvZG9jdGVzdC5weQorKysgYi9MaWIvZG9jdGVzdC5weQpAQCAtMzk5LDggKzM5OSw5IEBACiAgICAgICAgICAgICBiYXNlZGlyID0gb3MuY3VyZGlyCiAgICAgZWxzZToKICAgICAgICAgIyBBIG1vZHVsZSB3L28gX19maWxlX18gKHRoaXMgaW5jbHVkZXMgYnVpbHRpbnMpCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbid0IHJlc29sdmUgcGF0aHMgcmVsYXRpdmUgdG8gdGhlIG1vZHVsZSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgKyAiIChpdCBoYXMgbm8gX19maWxlX18pIikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2FuJ3QgcmVzb2x2ZSBwYXRocyByZWxhdGl2ZSB0byB0aGUgbW9kdWxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXIgKGl0IGhhcyBubyBfX2ZpbGVfXykiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSBtb2R1bGUuX19uYW1lX18pCiAKICAgICAjIENvbWJpbmUgdGhlIGJhc2UgZGlyZWN0b3J5IGFuZCB0aGUgcGF0aC4KICAgICByZXR1cm4gb3MucGF0aC5qb2luKGJhc2VkaXIsICoocGF0aC5zcGxpdCgnLycpKSkKQEAgLTUzMCw4ICs1MzEsOSBAQAogICAgICAgICAgICAgZXhhbXBsZXMgPSAnMSBleGFtcGxlJwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXhhbXBsZXMgPSAnJWQgZXhhbXBsZXMnICUgbGVuKHNlbGYuZXhhbXBsZXMpCi0gICAgICAgIHJldHVybiAoJzxEb2NUZXN0ICVzIGZyb20gJXM6JXMgKCVzKT4nICUKLSAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubywgZXhhbXBsZXMpKQorICAgICAgICByZXR1cm4gKCc8JXMgJXMgZnJvbSAlczolcyAoJXMpPicgJQorICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubywgZXhhbXBsZXMpKQogCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgIGlmIHR5cGUoc2VsZikgaXMgbm90IHR5cGUob3RoZXIpOgpAQCAtOTc4LDcgKzk4MCw4IEBACiAgICAgICAgICAgICBmb3IgdmFsbmFtZSwgdmFsIGluIG9iai5fX2RpY3RfXy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHZhbG5hbWUgPSAnJXMuJXMnICUgKG5hbWUsIHZhbG5hbWUpCiAgICAgICAgICAgICAgICAgIyBSZWN1cnNlIHRvIGZ1bmN0aW9ucyAmIGNsYXNzZXMuCi0gICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0Lmlzcm91dGluZSh2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpKSBhbmQKKyAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNyb3V0aW5lKGluc3BlY3QudW53cmFwKHZhbCkpCisgICAgICAgICAgICAgICAgICAgICBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSkgYW5kCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zyb21fbW9kdWxlKG1vZHVsZSwgdmFsKSk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbmQodGVzdHMsIHZhbCwgdmFsbmFtZSwgbW9kdWxlLCBzb3VyY2VfbGluZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYnMsIHNlZW4pCkBAIC0xMDQ5LDcgKzEwNTIsNyBAQAogICAgICAgICAgICAgZmlsZW5hbWUgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmaWxlbmFtZSA9IGdldGF0dHIobW9kdWxlLCAnX19maWxlX18nLCBtb2R1bGUuX19uYW1lX18pCi0gICAgICAgICAgICBpZiBmaWxlbmFtZVstNDpdIGluICgiLnB5YyIsICIucHlvIik6CisgICAgICAgICAgICBpZiBmaWxlbmFtZVstNDpdID09ICIucHljIjoKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lWzotMV0KICAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlci5nZXRfZG9jdGVzdChkb2NzdHJpbmcsIGdsb2JzLCBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8pCkBAIC0yMzY3LDE1ICsyMzcwLDYgQEAKICAgICAgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKICAgICAgICAgc3VpdGUuYWRkVGVzdChTa2lwRG9jVGVzdENhc2UobW9kdWxlKSkKICAgICAgICAgcmV0dXJuIHN1aXRlCi0gICAgZWxpZiBub3QgdGVzdHM6Ci0gICAgICAgICMgV2h5IGRvIHdlIHdhbnQgdG8gZG8gdGhpcz8gQmVjYXVzZSBpdCByZXZlYWxzIGEgYnVnIHRoYXQgbWlnaHQKLSAgICAgICAgIyBvdGhlcndpc2UgYmUgaGlkZGVuLgotICAgICAgICAjIEl0IGlzIHByb2JhYmx5IGEgYnVnIHRoYXQgdGhpcyBleGNlcHRpb24gaXMgbm90IGFsc28gcmFpc2VkIGlmIHRoZQotICAgICAgICAjIG51bWJlciBvZiBkb2N0ZXN0IGV4YW1wbGVzIGluIHRlc3RzIGlzIHplcm8gKGkuZS4gaWYgbm8gZG9jdGVzdAotICAgICAgICAjIGV4YW1wbGVzIHdlcmUgZm91bmQpLiAgSG93ZXZlciwgd2Ugc2hvdWxkIHByb2JhYmx5IG5vdCBiZSByYWlzaW5nCi0gICAgICAgICMgYW4gZXhjZXB0aW9uIGF0IGFsbCBoZXJlLCB0aG91Z2ggaXQgaXMgdG9vIGxhdGUgdG8gbWFrZSB0aGlzIGNoYW5nZQotICAgICAgICAjIGZvciBhIG1haW50ZW5hbmNlIHJlbGVhc2UuICBTZWUgYWxzbyBpc3N1ZSAjMTQ2NDkuCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobW9kdWxlLCAiaGFzIG5vIGRvY3N0cmluZ3MiKQogCiAgICAgdGVzdHMuc29ydCgpCiAgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKQEAgLTIzODUsNyArMjM3OSw3IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBub3QgdGVzdC5maWxlbmFtZToKICAgICAgICAgICAgIGZpbGVuYW1lID0gbW9kdWxlLl9fZmlsZV9fCi0gICAgICAgICAgICBpZiBmaWxlbmFtZVstNDpdIGluICgiLnB5YyIsICIucHlvIik6CisgICAgICAgICAgICBpZiBmaWxlbmFtZVstNDpdID09ICIucHljIjoKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lWzotMV0KICAgICAgICAgICAgIHRlc3QuZmlsZW5hbWUgPSBmaWxlbmFtZQogICAgICAgICBzdWl0ZS5hZGRUZXN0KERvY1Rlc3RDYXNlKHRlc3QsICoqb3B0aW9ucykpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvX19pbml0X18ucHkgYi9MaWIvZW1haWwvX19pbml0X18ucHkKaW5kZXggZmYxNmY2YS4uZmFlODcyNCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL19faW5pdF9fLnB5CisrKyBiL0xpYi9lbWFpbC9fX2luaXRfXy5weQpAQCAtNCw4ICs0LDYgQEAKIAogIiIiQSBwYWNrYWdlIGZvciBwYXJzaW5nLCBoYW5kbGluZywgYW5kIGdlbmVyYXRpbmcgZW1haWwgbWVzc2FnZXMuIiIiCiAKLV9fdmVyc2lvbl9fID0gJzUuMS4wJwotCiBfX2FsbF9fID0gWwogICAgICdiYXNlNjRtaW1lJywKICAgICAnY2hhcnNldCcsCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkgYi9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKaW5kZXggYTliZGY0NC4uNWRmOTUxMSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQpAQCAtMzIwLDE3ICszMjAsMTggQEAKICAgICAgICAgcmV0dXJuICcnLmpvaW4ocmVzKQogCiAgICAgZGVmIF9mb2xkKHNlbGYsIGZvbGRlZCk6CisgICAgICAgIGVuY29kaW5nID0gJ3V0Zi04JyBpZiBmb2xkZWQucG9saWN5LnV0ZjggZWxzZSAnYXNjaWknCiAgICAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydHM6CiAgICAgICAgICAgICB0c3RyID0gc3RyKHBhcnQpCiAgICAgICAgICAgICB0bGVuID0gbGVuKHRzdHIpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3RyKHBhcnQpLmVuY29kZSgndXMtYXNjaWknKQorICAgICAgICAgICAgICAgIHN0cihwYXJ0KS5lbmNvZGUoZW5jb2RpbmcpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgICAgIGlmIGFueShpc2luc3RhbmNlKHgsIGVycm9ycy5VbmRlY29kYWJsZUJ5dGVzRGVmZWN0KQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcGFydC5hbGxfZGVmZWN0cyk6CiAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAndW5rbm93bi04Yml0JwogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgWFhYOiB0aGlzIHNob3VsZCBiZSBhIHBvbGljeSBzZXR0aW5nCisgICAgICAgICAgICAgICAgICAgICMgWFhYOiB0aGlzIHNob3VsZCBiZSBhIHBvbGljeSBzZXR0aW5nIHdoZW4gdXRmOCBpcyBGYWxzZS4KICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICd1dGYtOCcKICAgICAgICAgICAgICAgICB0c3RyID0gcGFydC5jdGVfZW5jb2RlKGNoYXJzZXQsIGZvbGRlZC5wb2xpY3kpCiAgICAgICAgICAgICAgICAgdGxlbiA9IGxlbih0c3RyKQpAQCAtMzk0LDExICszOTUsMTIgQEAKIAogICAgIGRlZiBfZm9sZChzZWxmLCBmb2xkZWQpOgogICAgICAgICBsYXN0X2V3ID0gTm9uZQorICAgICAgICBlbmNvZGluZyA9ICd1dGYtOCcgaWYgZm9sZGVkLnBvbGljeS51dGY4IGVsc2UgJ2FzY2lpJwogICAgICAgICBmb3IgcGFydCBpbiBzZWxmLnBhcnRzOgogICAgICAgICAgICAgdHN0ciA9IHN0cihwYXJ0KQogICAgICAgICAgICAgaXNfZXcgPSBGYWxzZQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN0cihwYXJ0KS5lbmNvZGUoJ3VzLWFzY2lpJykKKyAgICAgICAgICAgICAgICBzdHIocGFydCkuZW5jb2RlKGVuY29kaW5nKQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBhbnkoaXNpbnN0YW5jZSh4LCBlcnJvcnMuVW5kZWNvZGFibGVCeXRlc0RlZmVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcGFydC5hbGxfZGVmZWN0cyk6CkBAIC00MzcsNyArNDM5LDcgQEAKICAgICAgICAgICAgICAgICBpZiBmb2xkZWQuYXBwZW5kX2lmX2ZpdHMocGFydCk6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBwYXJ0Lmhhc19md3M6Ci0gICAgICAgICAgICAgICAgcGFydC5mb2xkKGZvbGRlZCkKKyAgICAgICAgICAgICAgICBwYXJ0Ll9mb2xkKGZvbGRlZCkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgIyBJdCBjYW4ndCBiZSBzcGxpdC4uLndlIGp1c3QgaGF2ZSB0byBwdXQgaXQgb24gaXRzIG93biBsaW5lLgogICAgICAgICAgICAgZm9sZGVkLmFwcGVuZCh0c3RyKQpAQCAtNDU4LDcgKzQ2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxhc3RfZXcgPSBsZW4ocmVzKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHRsID0gZ2V0X3Vuc3RydWN0dXJlZCgnJy5qb2luKHJlc1tsYXN0X2V3Ol0gKyBbc3BhcnRdKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZCh0bC5hc19lbmNvZGVkX3dvcmQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZCh0bC5hc19lbmNvZGVkX3dvcmQoY2hhcnNldCkpCiAgICAgICAgIHJldHVybiAnJy5qb2luKHJlcykKIAogCkBAIC00NzUsMTIgKzQ3NywxMyBAQAogICAgICAgICAjIGNvbW1lbnQgdGhhdCBiZWNvbWVzIGEgYmFycmllciBhY3Jvc3Mgd2hpY2ggd2UgY2FuJ3QgY29tcG9zZSBlbmNvZGVkCiAgICAgICAgICMgd29yZHMuCiAgICAgICAgIGxhc3RfZXcgPSBOb25lCisgICAgICAgIGVuY29kaW5nID0gJ3V0Zi04JyBpZiBmb2xkZWQucG9saWN5LnV0ZjggZWxzZSAnYXNjaWknCiAgICAgICAgIGZvciBwYXJ0IGluIHNlbGYucGFydHM6CiAgICAgICAgICAgICB0c3RyID0gc3RyKHBhcnQpCiAgICAgICAgICAgICB0bGVuID0gbGVuKHRzdHIpCiAgICAgICAgICAgICBoYXNfZXcgPSBGYWxzZQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN0cihwYXJ0KS5lbmNvZGUoJ3VzLWFzY2lpJykKKyAgICAgICAgICAgICAgICBzdHIocGFydCkuZW5jb2RlKGVuY29kaW5nKQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBhbnkoaXNpbnN0YW5jZSh4LCBlcnJvcnMuVW5kZWNvZGFibGVCeXRlc0RlZmVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHBhcnQuYWxsX2RlZmVjdHMpOgpAQCAtMTUxOSw3ICsxNTIyLDcgQEAKICAgICBUaGlzIGlzIG5vdCB0aGUgUkZDIGN0ZXh0LCBzaW5jZSB3ZSBhcmUgaGFuZGxpbmcgbmVzdGVkIGNvbW1lbnRzIGluIGNvbW1lbnQKICAgICBhbmQgdW5xdW90aW5nIHF1b3RlZC1wYWlycyBoZXJlLiAgV2UgYWxsb3cgYW55dGhpbmcgZXhjZXB0IHRoZSAnKCknCiAgICAgY2hhcmFjdGVycywgYnV0IGlmIHdlIGZpbmQgYW55IEFTQ0lJIG90aGVyIHRoYW4gdGhlIFJGQyBkZWZpbmVkIHByaW50YWJsZQotICAgIEFTQ0lJIGFuIE5vblByaW50YWJsZURlZmVjdCBpcyBhZGRlZCB0byB0aGUgdG9rZW4ncyBkZWZlY3RzIGxpc3QuICBTaW5jZQorICAgIEFTQ0lJLCBhIE5vblByaW50YWJsZURlZmVjdCBpcyBhZGRlZCB0byB0aGUgdG9rZW4ncyBkZWZlY3RzIGxpc3QuICBTaW5jZQogICAgIHF1b3RlZCBwYWlycyBhcmUgY29udmVydGVkIHRvIHRoZWlyIHVucXVvdGVkIHZhbHVlcywgd2hhdCBpcyByZXR1cm5lZCBpcwogICAgIGEgJ3B0ZXh0JyB0b2tlbi4gIEluIHRoaXMgY2FzZSBpdCBpcyBhIFdoaXRlU3BhY2VUZXJtaW5hbCwgc28gaXQncyB2YWx1ZQogICAgIGlzICcgJy4KQEAgLTE1MzQsNyArMTUzNyw3IEBACiAgICAgIiIicWNvbnRlbnQgPSBxdGV4dCAvIHF1b3RlZC1wYWlyCiAKICAgICBXZSBhbGxvdyBhbnl0aGluZyBleGNlcHQgdGhlIERRVU9URSBjaGFyYWN0ZXIsIGJ1dCBpZiB3ZSBmaW5kIGFueSBBU0NJSQotICAgIG90aGVyIHRoYW4gdGhlIFJGQyBkZWZpbmVkIHByaW50YWJsZSBBU0NJSSBhbiBOb25QcmludGFibGVEZWZlY3QgaXMKKyAgICBvdGhlciB0aGFuIHRoZSBSRkMgZGVmaW5lZCBwcmludGFibGUgQVNDSUksIGEgTm9uUHJpbnRhYmxlRGVmZWN0IGlzCiAgICAgYWRkZWQgdG8gdGhlIHRva2VuJ3MgZGVmZWN0cyBsaXN0LiAgQW55IHF1b3RlZCBwYWlycyBhcmUgY29udmVydGVkIHRvIHRoZWlyCiAgICAgdW5xdW90ZWQgdmFsdWVzLCBzbyB3aGF0IGlzIHJldHVybmVkIGlzIGEgJ3B0ZXh0JyB0b2tlbi4gIEluIHRoaXMgY2FzZSBpdAogICAgIGlzIGEgVmFsdWVUZXJtaW5hbC4KQEAgLTE4NzksNyArMTg4Miw3IEBACiAgICAgICAgIG9icy1kdGV4dCA9IG9icy1OTy1XUy1DVEwgLyBxdW90ZWQtcGFpcgogCiAgICAgV2UgYWxsb3cgYW55dGhpbmcgZXhjZXB0IHRoZSBleGNsdWRlZCBjaGFyYWN0ZXJzLCBidXQgaWYgd2UgZmluZCBhbnkKLSAgICBBU0NJSSBvdGhlciB0aGFuIHRoZSBSRkMgZGVmaW5lZCBwcmludGFibGUgQVNDSUkgYW4gTm9uUHJpbnRhYmxlRGVmZWN0IGlzCisgICAgQVNDSUkgb3RoZXIgdGhhbiB0aGUgUkZDIGRlZmluZWQgcHJpbnRhYmxlIEFTQ0lJLCBhIE5vblByaW50YWJsZURlZmVjdCBpcwogICAgIGFkZGVkIHRvIHRoZSB0b2tlbidzIGRlZmVjdHMgbGlzdC4gIFF1b3RlZCBwYWlycyBhcmUgY29udmVydGVkIHRvIHRoZWlyCiAgICAgdW5xdW90ZWQgdmFsdWVzLCBzbyB3aGF0IGlzIHJldHVybmVkIGlzIGEgcHRleHQgdG9rZW4sIGluIHRoaXMgY2FzZSBhCiAgICAgVmFsdWVUZXJtaW5hbC4gIElmIHRoZXJlIHdlcmUgcXVvdGVkLXByaW50YWJsZXMsIGFuIE9ic29sZXRlSGVhZGVyRGVmZWN0IGlzCkBAIC0yODY5LDcgKzI4NzIsNyBAQAogICAgICAgICBfZmluZF9taW1lX3BhcmFtZXRlcnMoY3R5cGUsIHZhbHVlKQogICAgICAgICByZXR1cm4gY3R5cGUKICAgICBjdHlwZS5hcHBlbmQodG9rZW4pCi0gICAgIyBYWFg6IElmIHdlIHJlYWxseSB3YW50IHRvIGZvbGxvdyB0aGUgZm9ybWFsIGdyYW1tZXIgd2Ugc2hvdWxkIG1ha2UKKyAgICAjIFhYWDogSWYgd2UgcmVhbGx5IHdhbnQgdG8gZm9sbG93IHRoZSBmb3JtYWwgZ3JhbW1hciB3ZSBzaG91bGQgbWFrZQogICAgICMgbWFudHlwZSBhbmQgc3VidHlwZSBzcGVjaWFsaXplZCBUb2tlbkxpc3RzIGhlcmUuICBQcm9iYWJseSBub3Qgd29ydGggaXQuCiAgICAgaWYgbm90IHZhbHVlIG9yIHZhbHVlWzBdICE9ICcvJzoKICAgICAgICAgY3R5cGUuZGVmZWN0cy5hcHBlbmQoZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3QoCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvX3BvbGljeWJhc2UucHkgYi9MaWIvZW1haWwvX3BvbGljeWJhc2UucHkKaW5kZXggODEwNjExNC4uYzBkOThhNCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL19wb2xpY3liYXNlLnB5CisrKyBiL0xpYi9lbWFpbC9fcG9saWN5YmFzZS5weQpAQCAtMTQ5LDEyICsxNDksMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBzZXJpYWxpemF0aW9uLiAgTm9uZSBvciAwIG1lYW5zIG5vIGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwaW5nIGlzIGRvbmUuICBEZWZhdWx0IGlzIDc4LgogCisgICAgbWFuZ2xlX2Zyb21fICAgICAgICAtLSBhIGZsYWcgdGhhdCwgd2hlbiBUcnVlIGVzY2FwZXMgRnJvbV8gbGluZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5IG9mIHRoZSBtZXNzYWdlIGJ5IHB1dHRpbmcgYSBgPicgaW4gZnJvbnQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW0uIFRoaXMgaXMgdXNlZCB3aGVuIHRoZSBtZXNzYWdlIGlzIGJlaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkIGJ5IGEgZ2VuZXJhdG9yLiBEZWZhdWx0OiBUcnVlLgorCiAgICAgIiIiCiAKICAgICByYWlzZV9vbl9kZWZlY3QgPSBGYWxzZQogICAgIGxpbmVzZXAgPSAnXG4nCiAgICAgY3RlX3R5cGUgPSAnOGJpdCcKICAgICBtYXhfbGluZV9sZW5ndGggPSA3OAorICAgIG1hbmdsZV9mcm9tXyA9IEZhbHNlCiAKICAgICBkZWYgaGFuZGxlX2RlZmVjdChzZWxmLCBvYmosIGRlZmVjdCk6CiAgICAgICAgICIiIkJhc2VkIG9uIHBvbGljeSwgZWl0aGVyIHJhaXNlIGRlZmVjdCBvciBjYWxsIHJlZ2lzdGVyX2RlZmVjdC4KQEAgLTI2Niw2ICsyNzIsOCBAQAogICAgIHJlcGxpY2F0ZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBlbWFpbCBwYWNrYWdlIHZlcnNpb24gNS4xLgogICAgICIiIgogCisgICAgbWFuZ2xlX2Zyb21fID0gVHJ1ZQorCiAgICAgZGVmIF9zYW5pdGl6ZV9oZWFkZXIoc2VsZiwgbmFtZSwgdmFsdWUpOgogICAgICAgICAjIElmIHRoZSBoZWFkZXIgdmFsdWUgY29udGFpbnMgc3Vycm9nYXRlcywgcmV0dXJuIGEgSGVhZGVyIHVzaW5nCiAgICAgICAgICMgdGhlIHVua25vd24tOGJpdCBjaGFyc2V0IHRvIGVuY29kZSB0aGUgYnl0ZXMgYXMgZW5jb2RlZCB3b3Jkcy4KZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9jaGFyc2V0LnB5IGIvTGliL2VtYWlsL2NoYXJzZXQucHkKaW5kZXggZTk5OTQ3Mi4uZWU1NjQwNCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2NoYXJzZXQucHkKKysrIGIvTGliL2VtYWlsL2NoYXJzZXQucHkKQEAgLTI0OSw5ICsyNDksNiBAQAogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICByZXR1cm4gc3RyKHNlbGYpID09IHN0cihvdGhlcikubG93ZXIoKQogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCi0KICAgICBkZWYgZ2V0X2JvZHlfZW5jb2Rpbmcoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgY29udGVudC10cmFuc2Zlci1lbmNvZGluZyB1c2VkIGZvciBib2R5IGVuY29kaW5nLgogCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZmVlZHBhcnNlci5weSBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CmluZGV4IGM5NWIyN2YuLmM1NDIwMTggMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CkBAIC0yNiw2ICsyNiw3IEBACiBmcm9tIGVtYWlsIGltcG9ydCBlcnJvcnMKIGZyb20gZW1haWwgaW1wb3J0IG1lc3NhZ2UKIGZyb20gZW1haWwuX3BvbGljeWJhc2UgaW1wb3J0IGNvbXBhdDMyCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQogCiBOTENSRSA9IHJlLmNvbXBpbGUoJ1xyXG58XHJ8XG4nKQogTkxDUkVfYm9sID0gcmUuY29tcGlsZSgnKFxyXG58XHJ8XG4pJykKQEAgLTUyLDggKzUzLDggQEAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICMgQ2h1bmtzIG9mIHRoZSBsYXN0IHBhcnRpYWwgbGluZSBwdXNoZWQgaW50byB0aGlzIG9iamVjdC4KICAgICAgICAgc2VsZi5fcGFydGlhbCA9IFtdCi0gICAgICAgICMgVGhlIGxpc3Qgb2YgZnVsbCwgcHVzaGVkIGxpbmVzLCBpbiByZXZlcnNlIG9yZGVyCi0gICAgICAgIHNlbGYuX2xpbmVzID0gW10KKyAgICAgICAgIyBBIGRlcXVlIG9mIGZ1bGwsIHB1c2hlZCBsaW5lcworICAgICAgICBzZWxmLl9saW5lcyA9IGRlcXVlKCkKICAgICAgICAgIyBUaGUgc3RhY2sgb2YgZmFsc2UtRU9GIGNoZWNraW5nIHByZWRpY2F0ZXMuCiAgICAgICAgIHNlbGYuX2VvZnN0YWNrID0gW10KICAgICAgICAgIyBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGhhcyBiZWVuIGNsb3NlZCBvciBub3QuCkBAIC03OCwyMSArNzksMjEgQEAKICAgICAgICAgICAgIHJldHVybiBOZWVkTW9yZURhdGEKICAgICAgICAgIyBQb3AgdGhlIGxpbmUgb2ZmIHRoZSBzdGFjayBhbmQgc2VlIGlmIGl0IG1hdGNoZXMgdGhlIGN1cnJlbnQKICAgICAgICAgIyBmYWxzZS1FT0YgcHJlZGljYXRlLgotICAgICAgICBsaW5lID0gc2VsZi5fbGluZXMucG9wKCkKKyAgICAgICAgbGluZSA9IHNlbGYuX2xpbmVzLnBvcGxlZnQoKQogICAgICAgICAjIFJGQyAyMDQ2LCBzZWN0aW9uIDUuMS4yIHJlcXVpcmVzIHVzIHRvIHJlY29nbml6ZSBvdXRlciBsZXZlbAogICAgICAgICAjIGJvdW5kYXJpZXMgYXQgYW55IGxldmVsIG9mIGlubmVyIG5lc3RpbmcuICBEbyB0aGlzLCBidXQgYmUgc3VyZSBpdCdzCiAgICAgICAgICMgaW4gdGhlIG9yZGVyIG9mIG1vc3QgdG8gbGVhc3QgbmVzdGVkLgotICAgICAgICBmb3IgYXRlb2YgaW4gc2VsZi5fZW9mc3RhY2tbOjotMV06CisgICAgICAgIGZvciBhdGVvZiBpbiByZXZlcnNlZChzZWxmLl9lb2ZzdGFjayk6CiAgICAgICAgICAgICBpZiBhdGVvZihsaW5lKToKICAgICAgICAgICAgICAgICAjIFdlJ3JlIGF0IHRoZSBmYWxzZSBFT0YuICBCdXQgcHVzaCB0aGUgbGFzdCBsaW5lIGJhY2sgZmlyc3QuCi0gICAgICAgICAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kbGVmdChsaW5lKQogICAgICAgICAgICAgICAgIHJldHVybiAnJwogICAgICAgICByZXR1cm4gbGluZQogCiAgICAgZGVmIHVucmVhZGxpbmUoc2VsZiwgbGluZSk6CiAgICAgICAgICMgTGV0IHRoZSBjb25zdW1lciBwdXNoIGEgbGluZSBiYWNrIGludG8gdGhlIGJ1ZmZlci4KICAgICAgICAgYXNzZXJ0IGxpbmUgaXMgbm90IE5lZWRNb3JlRGF0YQotICAgICAgICBzZWxmLl9saW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kbGVmdChsaW5lKQogCiAgICAgZGVmIHB1c2goc2VsZiwgZGF0YSk6CiAgICAgICAgICIiIlB1c2ggc29tZSBuZXcgZGF0YSBpbnRvIHRoaXMgb2JqZWN0LiIiIgpAQCAtMTE5LDggKzEyMCw3IEBACiAgICAgICAgIHNlbGYucHVzaGxpbmVzKHBhcnRzKQogCiAgICAgZGVmIHB1c2hsaW5lcyhzZWxmLCBsaW5lcyk6Ci0gICAgICAgICMgUmV2ZXJzZSBhbmQgaW5zZXJ0IGF0IHRoZSBmcm9udCBvZiB0aGUgbGluZXMuCi0gICAgICAgIHNlbGYuX2xpbmVzWzowXSA9IGxpbmVzWzo6LTFdCisgICAgICAgIHNlbGYuX2xpbmVzLmV4dGVuZChsaW5lcykKIAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnBvbGljeSA9IHBvbGljeQotICAgICAgICBzZWxmLl9mYWN0b3J5X2t3ZHMgPSBsYW1iZGE6IHsncG9saWN5Jzogc2VsZi5wb2xpY3l9CisgICAgICAgIHNlbGYuX29sZF9zdHlsZV9mYWN0b3J5ID0gRmFsc2UKICAgICAgICAgaWYgX2ZhY3RvcnkgaXMgTm9uZToKICAgICAgICAgICAgICMgV2hhdCB0aGlzIHNob3VsZCBiZToKICAgICAgICAgICAgICNzZWxmLl9mYWN0b3J5ID0gcG9saWN5LmRlZmF1bHRfbWVzc2FnZV9mYWN0b3J5CkBAIC0xNjAsNyArMTYwLDcgQEAKICAgICAgICAgICAgICAgICBfZmFjdG9yeShwb2xpY3k9c2VsZi5wb2xpY3kpCiAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgICAgICMgQXNzdW1lIHRoaXMgaXMgYW4gb2xkLXN0eWxlIGZhY3RvcnkKLSAgICAgICAgICAgICAgICBzZWxmLl9mYWN0b3J5X2t3ZHMgPSBsYW1iZGE6IHt9CisgICAgICAgICAgICAgICAgc2VsZi5fb2xkX3N0eWxlX2ZhY3RvcnkgPSBUcnVlCiAgICAgICAgIHNlbGYuX2lucHV0ID0gQnVmZmVyZWRTdWJGaWxlKCkKICAgICAgICAgc2VsZi5fbXNnc3RhY2sgPSBbXQogICAgICAgICBzZWxmLl9wYXJzZSA9IHNlbGYuX3BhcnNlZ2VuKCkuX19uZXh0X18KQEAgLTE5Nyw3ICsxOTcsMTAgQEAKICAgICAgICAgcmV0dXJuIHJvb3QKIAogICAgIGRlZiBfbmV3X21lc3NhZ2Uoc2VsZik6Ci0gICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoKipzZWxmLl9mYWN0b3J5X2t3ZHMoKSkKKyAgICAgICAgaWYgc2VsZi5fb2xkX3N0eWxlX2ZhY3Rvcnk6CisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkocG9saWN5PXNlbGYucG9saWN5KQogICAgICAgICBpZiBzZWxmLl9jdXIgYW5kIHNlbGYuX2N1ci5nZXRfY29udGVudF90eXBlKCkgPT0gJ211bHRpcGFydC9kaWdlc3QnOgogICAgICAgICAgICAgbXNnLnNldF9kZWZhdWx0X3R5cGUoJ21lc3NhZ2UvcmZjODIyJykKICAgICAgICAgaWYgc2VsZi5fbXNnc3RhY2s6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5IGIvTGliL2VtYWlsL2dlbmVyYXRvci5weQppbmRleCA0NzM1NzIxLi4xMWZmMTZkIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5CisrKyBiL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkKQEAgLTMyLDE2ICszMiwxNiBAQAogICAgICMgUHVibGljIGludGVyZmFjZQogICAgICMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRmcCwgbWFuZ2xlX2Zyb21fPVRydWUsIG1heGhlYWRlcmxlbj1Ob25lLCAqLAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRmcCwgbWFuZ2xlX2Zyb21fPU5vbmUsIG1heGhlYWRlcmxlbj1Ob25lLCAqLAogICAgICAgICAgICAgICAgICBwb2xpY3k9Tm9uZSk6CiAgICAgICAgICIiIkNyZWF0ZSB0aGUgZ2VuZXJhdG9yIGZvciBtZXNzYWdlIGZsYXR0ZW5pbmcuCiAKICAgICAgICAgb3V0ZnAgaXMgdGhlIG91dHB1dCBmaWxlLWxpa2Ugb2JqZWN0IGZvciB3cml0aW5nIHRoZSBtZXNzYWdlIHRvLiAgSXQKICAgICAgICAgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QuCiAKLSAgICAgICAgT3B0aW9uYWwgbWFuZ2xlX2Zyb21fIGlzIGEgZmxhZyB0aGF0LCB3aGVuIFRydWUgKHRoZSBkZWZhdWx0KSwgZXNjYXBlcwotICAgICAgICBGcm9tXyBsaW5lcyBpbiB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZSBieSBwdXR0aW5nIGEgYD4nIGluIGZyb250IG9mCi0gICAgICAgIHRoZW0uCisgICAgICAgIE9wdGlvbmFsIG1hbmdsZV9mcm9tXyBpcyBhIGZsYWcgdGhhdCwgd2hlbiBUcnVlICh0aGUgZGVmYXVsdCBpZiBwb2xpY3kKKyAgICAgICAgaXMgbm90IHNldCksIGVzY2FwZXMgRnJvbV8gbGluZXMgaW4gdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UgYnkgcHV0dGluZworICAgICAgICBhIGA+JyBpbiBmcm9udCBvZiB0aGVtLgogCiAgICAgICAgIE9wdGlvbmFsIG1heGhlYWRlcmxlbiBzcGVjaWZpZXMgdGhlIGxvbmdlc3QgbGVuZ3RoIGZvciBhIG5vbi1jb250aW51ZWQKICAgICAgICAgaGVhZGVyLiAgV2hlbiBhIGhlYWRlciBsaW5lIGlzIGxvbmdlciAoaW4gY2hhcmFjdGVycywgd2l0aCB0YWJzCkBAIC01Niw2ICs1Niw5IEBACiAgICAgICAgIGZsYXR0ZW4gbWV0aG9kIGlzIHVzZWQuCiAKICAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbWFuZ2xlX2Zyb21fIGlzIE5vbmU6CisgICAgICAgICAgICBtYW5nbGVfZnJvbV8gPSBUcnVlIGlmIHBvbGljeSBpcyBOb25lIGVsc2UgcG9saWN5Lm1hbmdsZV9mcm9tXwogICAgICAgICBzZWxmLl9mcCA9IG91dGZwCiAgICAgICAgIHNlbGYuX21hbmdsZV9mcm9tXyA9IG1hbmdsZV9mcm9tXwogICAgICAgICBzZWxmLm1heGhlYWRlcmxlbiA9IG1heGhlYWRlcmxlbgpAQCAtNDQ5LDcgKzQ1Miw3IEBACiAgICAgTGlrZSB0aGUgR2VuZXJhdG9yIGJhc2UgY2xhc3MsIGV4Y2VwdCB0aGF0IG5vbi10ZXh0IHBhcnRzIGFyZSBzdWJzdGl0dXRlZAogICAgIHdpdGggYSBmb3JtYXQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFydC4KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0ZnAsIG1hbmdsZV9mcm9tXz1UcnVlLCBtYXhoZWFkZXJsZW49NzgsIGZtdD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0ZnAsIG1hbmdsZV9mcm9tXz1Ob25lLCBtYXhoZWFkZXJsZW49NzgsIGZtdD1Ob25lKToKICAgICAgICAgIiIiTGlrZSBHZW5lcmF0b3IuX19pbml0X18oKSBleGNlcHQgdGhhdCBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsCiAgICAgICAgIGFyZ3VtZW50IGlzIGFsbG93ZWQuCiAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9oZWFkZXIucHkgYi9MaWIvZW1haWwvaGVhZGVyLnB5CmluZGV4IDljODk1ODkuLjY4MjBlYTEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9oZWFkZXIucHkKKysrIGIvTGliL2VtYWlsL2hlYWRlci5weQpAQCAtMjYyLDkgKzI2Miw2IEBACiAgICAgICAgICMgYXJncyBhbmQgZG8gYW5vdGhlciBjb21wYXJpc29uLgogICAgICAgICByZXR1cm4gb3RoZXIgPT0gc3RyKHNlbGYpCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KICAgICBkZWYgYXBwZW5kKHNlbGYsIHMsIGNoYXJzZXQ9Tm9uZSwgZXJyb3JzPSdzdHJpY3QnKToKICAgICAgICAgIiIiQXBwZW5kIGEgc3RyaW5nIHRvIHRoZSBNSU1FIGhlYWRlci4KIApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2hlYWRlcnJlZ2lzdHJ5LnB5IGIvTGliL2VtYWlsL2hlYWRlcnJlZ2lzdHJ5LnB5CmluZGV4IDkxMWEyYWYuLjBmYzIyMzEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9oZWFkZXJyZWdpc3RyeS5weQorKysgYi9MaWIvZW1haWwvaGVhZGVycmVnaXN0cnkucHkKQEAgLTE2LDcgKzE2LDcgQEAKIGNsYXNzIEFkZHJlc3M6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGlzcGxheV9uYW1lPScnLCB1c2VybmFtZT0nJywgZG9tYWluPScnLCBhZGRyX3NwZWM9Tm9uZSk6Ci0gICAgICAgICIiIkNyZWF0ZSBhbiBvYmplY3QgcmVwcmVzZXRpbmcgYSBmdWxsIGVtYWlsIGFkZHJlc3MuCisgICAgICAgICIiIkNyZWF0ZSBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZnVsbCBlbWFpbCBhZGRyZXNzLgogCiAgICAgICAgIEFuIGFkZHJlc3MgY2FuIGhhdmUgYSAnZGlzcGxheV9uYW1lJywgYSAndXNlcm5hbWUnLCBhbmQgYSAnZG9tYWluJy4gIEluCiAgICAgICAgIGFkZGl0aW9uIHRvIHNwZWNpZnlpbmcgdGhlIHVzZXJuYW1lIGFuZCBkb21haW4gc2VwYXJhdGVseSwgdGhleSBtYXkgYmUKQEAgLTgxLDcgKzgxLDggQEAKICAgICAgICAgcmV0dXJuIGxwCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiQWRkcmVzcyhkaXNwbGF5X25hbWU9eyFyfSwgdXNlcm5hbWU9eyFyfSwgZG9tYWluPXshcn0pIi5mb3JtYXQoCisgICAgICAgIHJldHVybiAie30oZGlzcGxheV9uYW1lPXshcn0sIHVzZXJuYW1lPXshcn0sIGRvbWFpbj17IXJ9KSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BsYXlfbmFtZSwgc2VsZi51c2VybmFtZSwgc2VsZi5kb21haW4pCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKQEAgLTEwOCw3ICsxMDksNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXNwbGF5X25hbWU9Tm9uZSwgYWRkcmVzc2VzPU5vbmUpOgogICAgICAgICAiIiJDcmVhdGUgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhZGRyZXNzIGdyb3VwLgogCi0gICAgICAgIEFuIGFkZHJlc3MgZ3JvdXAgY29uc2lzdHMgb2YgYSBkaXNwbGF5X25hbWUgZm9sbG93ZWQgYnkgY29sb24gYW5kIGFuCisgICAgICAgIEFuIGFkZHJlc3MgZ3JvdXAgY29uc2lzdHMgb2YgYSBkaXNwbGF5X25hbWUgZm9sbG93ZWQgYnkgY29sb24gYW5kIGEKICAgICAgICAgbGlzdCBvZiBhZGRyZXNzZXMgKHNlZSBBZGRyZXNzKSB0ZXJtaW5hdGVkIGJ5IGEgc2VtaS1jb2xvbi4gIFRoZSBHcm91cAogICAgICAgICBpcyBjcmVhdGVkIGJ5IHNwZWNpZnlpbmcgYSBkaXNwbGF5X25hbWUgYW5kIGEgcG9zc2libHkgZW1wdHkgbGlzdCBvZgogICAgICAgICBBZGRyZXNzIG9iamVjdHMuICBBIEdyb3VwIGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVwcmVzZW50IGEgc2luZ2xlCkBAIC0xMzIsNyArMTMzLDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX2FkZHJlc3NlcwogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIkdyb3VwKGRpc3BsYXlfbmFtZT17IXJ9LCBhZGRyZXNzZXM9eyFyfSIuZm9ybWF0KAorICAgICAgICByZXR1cm4gInt9KGRpc3BsYXlfbmFtZT17IXJ9LCBhZGRyZXNzZXM9eyFyfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKICAgICAgICAgICAgICAgICAgc2VsZi5kaXNwbGF5X25hbWUsIHNlbGYuYWRkcmVzc2VzKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvbWVzc2FnZS5weSBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CmluZGV4IDJmMzdkYmIuLmFlZmFmNTcgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9tZXNzYWdlLnB5CisrKyBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CkBAIC03MTAsNyArNzEwLDcgQEAKICAgICAgICAgbWVzc2FnZSwgaXQgd2lsbCBiZSBzZXQgdG8gInRleHQvcGxhaW4iIGFuZCB0aGUgbmV3IHBhcmFtZXRlciBhbmQKICAgICAgICAgdmFsdWUgd2lsbCBiZSBhcHBlbmRlZCBhcyBwZXIgUkZDIDIwNDUuCiAKLSAgICAgICAgQW4gYWx0ZXJuYXRlIGhlYWRlciBjYW4gc3BlY2lmaWVkIGluIHRoZSBoZWFkZXIgYXJndW1lbnQsIGFuZCBhbGwKKyAgICAgICAgQW4gYWx0ZXJuYXRlIGhlYWRlciBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBoZWFkZXIgYXJndW1lbnQsIGFuZCBhbGwKICAgICAgICAgcGFyYW1ldGVycyB3aWxsIGJlIHF1b3RlZCBhcyBuZWNlc3NhcnkgdW5sZXNzIHJlcXVvdGUgaXMgRmFsc2UuCiAKICAgICAgICAgSWYgY2hhcnNldCBpcyBzcGVjaWZpZWQsIHRoZSBwYXJhbWV0ZXIgd2lsbCBiZSBlbmNvZGVkIGFjY29yZGluZyB0byBSRkMKQEAgLTkyNywyMCArOTI3LDIxIEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gW3BhcnQuZ2V0X2NvbnRlbnRfY2hhcnNldChmYWlsb2JqKSBmb3IgcGFydCBpbiBzZWxmLndhbGsoKV0KIAorICAgIGRlZiBnZXRfY29udGVudF9kaXNwb3NpdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBtZXNzYWdlJ3MgY29udGVudC1kaXNwb3NpdGlvbiBpZiBpdCBleGlzdHMsIG9yIE5vbmUuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZXMgY2FuIGJlIGVpdGhlciAnaW5saW5lJywgJ2F0dGFjaG1lbnQnIG9yIE5vbmUKKyAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSByZmMyMTgzLgorICAgICAgICAiIiIKKyAgICAgICAgdmFsdWUgPSBzZWxmLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpCisgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBjX2QgPSBfc3BsaXRwYXJhbSh2YWx1ZSlbMF0ubG93ZXIoKQorICAgICAgICByZXR1cm4gY19kCisKICAgICAjIEkuZS4gZGVmIHdhbGsoc2VsZik6IC4uLgogICAgIGZyb20gZW1haWwuaXRlcmF0b3JzIGltcG9ydCB3YWxrCiAKLSMgWFhYIFN1cHBvcnQgZm9yIHRlbXBvcmFyeSBkZXByZWNhdGlvbiBoYWNrIGZvciBpc19hdHRhY2htZW50IHByb3BlcnR5LgotY2xhc3MgX0lzQXR0YWNobWVudDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgotICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKLSAgICBkZWYgX19jYWxsX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnZhbHVlCi0gICAgZGVmIF9fYm9vbF9fKHNlbGYpOgotICAgICAgICB3YXJuaW5ncy53YXJuKCJpc19hdHRhY2htZW50IHdpbGwgYmUgYSBtZXRob2QsIG5vdCBhIHByb3BlcnR5LCBpbiAzLjUiLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICBzdGFja2xldmVsPTMpCi0gICAgICAgIHJldHVybiBzZWxmLnZhbHVlCiAKIGNsYXNzIE1JTUVQYXJ0KE1lc3NhZ2UpOgogCkBAIC05NTAsMTIgKzk1MSw5IEBACiAgICAgICAgICAgICBwb2xpY3kgPSBkZWZhdWx0CiAgICAgICAgIE1lc3NhZ2UuX19pbml0X18oc2VsZiwgcG9saWN5KQogCi0gICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX2F0dGFjaG1lbnQoc2VsZik6CiAgICAgICAgIGNfZCA9IHNlbGYuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJykKLSAgICAgICAgcmVzdWx0ID0gRmFsc2UgaWYgY19kIGlzIE5vbmUgZWxzZSBjX2QuY29udGVudF9kaXNwb3NpdGlvbiA9PSAnYXR0YWNobWVudCcKLSAgICAgICAgIyBYWFggdHJhbnNpdGlvbmFsIGhhY2sgdG8gcmFpc2UgZGVwcmVjYXRpb24gaWYgbm90IGNhbGxlZC4KLSAgICAgICAgcmV0dXJuIF9Jc0F0dGFjaG1lbnQocmVzdWx0KQorICAgICAgICByZXR1cm4gRmFsc2UgaWYgY19kIGlzIE5vbmUgZWxzZSBjX2QuY29udGVudF9kaXNwb3NpdGlvbiA9PSAnYXR0YWNobWVudCcKIAogICAgIGRlZiBfZmluZF9ib2R5KHNlbGYsIHBhcnQsIHByZWZlcmVuY2VsaXN0KToKICAgICAgICAgaWYgcGFydC5pc19hdHRhY2htZW50KCk6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvbWltZS90ZXh0LnB5IGIvTGliL2VtYWlsL21pbWUvdGV4dC5weQppbmRleCBlYzE4Yjg1Li40Nzk5MjhlIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvbWltZS90ZXh0LnB5CisrKyBiL0xpYi9lbWFpbC9taW1lL3RleHQucHkKQEAgLTYsNiArNiw3IEBACiAKIF9fYWxsX18gPSBbJ01JTUVUZXh0J10KIAorZnJvbSBlbWFpbC5jaGFyc2V0IGltcG9ydCBDaGFyc2V0CiBmcm9tIGVtYWlsLm1pbWUubm9ubXVsdGlwYXJ0IGltcG9ydCBNSU1FTm9uTXVsdGlwYXJ0CiAKIApAQCAtMzQsNiArMzUsOCBAQAogICAgICAgICAgICAgICAgIF9jaGFyc2V0ID0gJ3VzLWFzY2lpJwogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICBfY2hhcnNldCA9ICd1dGYtOCcKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfY2hhcnNldCwgQ2hhcnNldCk6CisgICAgICAgICAgICBfY2hhcnNldCA9IHN0cihfY2hhcnNldCkKIAogICAgICAgICBNSU1FTm9uTXVsdGlwYXJ0Ll9faW5pdF9fKHNlbGYsICd0ZXh0JywgX3N1YnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip7J2NoYXJzZXQnOiBfY2hhcnNldH0pCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcGFyc2VyLnB5IGIvTGliL2VtYWlsL3BhcnNlci5weQppbmRleCA4YzliYzllLi41NTViMTcyIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9wYXJzZXIucHkKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZS4KIAogICAgICAgICBUaGUgc3RyaW5nIG11c3QgYmUgZm9ybWF0dGVkIGFzIGEgYmxvY2sgb2YgUkZDIDI4MjIgaGVhZGVycyBhbmQgaGVhZGVyCi0gICAgICAgIGNvbnRpbnVhdGlvbiBsaW5lcywgb3B0aW9uYWxseSBwcmVjZWVkZWQgYnkgYSBgVW5peC1mcm9tJyBoZWFkZXIuICBUaGUKKyAgICAgICAgY29udGludWF0aW9uIGxpbmVzLCBvcHRpb25hbGx5IHByZWNlZGVkIGJ5IGEgYFVuaXgtZnJvbScgaGVhZGVyLiAgVGhlCiAgICAgICAgIGhlYWRlciBibG9jayBpcyB0ZXJtaW5hdGVkIGVpdGhlciBieSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgb3IgYnkgYQogICAgICAgICBibGFuayBsaW5lLgogCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UuCiAKICAgICAgICAgVGhlIGlucHV0IG11c3QgYmUgZm9ybWF0dGVkIGFzIGEgYmxvY2sgb2YgUkZDIDI4MjIgaGVhZGVycyBhbmQgaGVhZGVyCi0gICAgICAgIGNvbnRpbnVhdGlvbiBsaW5lcywgb3B0aW9uYWxseSBwcmVjZWVkZWQgYnkgYSBgVW5peC1mcm9tJyBoZWFkZXIuICBUaGUKKyAgICAgICAgY29udGludWF0aW9uIGxpbmVzLCBvcHRpb25hbGx5IHByZWNlZGVkIGJ5IGEgYFVuaXgtZnJvbScgaGVhZGVyLiAgVGhlCiAgICAgICAgIGhlYWRlciBibG9jayBpcyB0ZXJtaW5hdGVkIGVpdGhlciBieSB0aGUgZW5kIG9mIHRoZSBpbnB1dCBvciBieSBhCiAgICAgICAgIGJsYW5rIGxpbmUuCiAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9wb2xpY3kucHkgYi9MaWIvZW1haWwvcG9saWN5LnB5CmluZGV4IGYwYjIwZjQuLjZhYzY0YTUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9wb2xpY3kucHkKKysrIGIvTGliL2VtYWlsL3BvbGljeS5weQpAQCAtMzUsNiArMzUsMTMgQEAKICAgICBJbiBhZGRpdGlvbiB0byB0aGUgc2V0dGFibGUgYXR0cmlidXRlcyBsaXN0ZWQgYWJvdmUgdGhhdCBhcHBseSB0bwogICAgIGFsbCBQb2xpY2llcywgdGhpcyBwb2xpY3kgYWRkcyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgYXR0cmlidXRlczoKIAorICAgIHV0ZjggICAgICAgICAgICAgICAgLS0gaWYgRmFsc2UgKHRoZSBkZWZhdWx0KSBtZXNzYWdlIGhlYWRlcnMgd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCBhcyBBU0NJSSwgdXNpbmcgZW5jb2RlZCB3b3JkcyB0byBlbmNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBub24tQVNDSUkgY2hhcmFjdGVycyBpbiB0aGUgc291cmNlIHN0cmluZ3MuICBJZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgdGhlIG1lc3NhZ2UgaGVhZGVycyB3aWxsIGJlIHNlcmlhbGl6ZWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0ZjggYW5kIHdpbGwgbm90IGNvbnRhaW4gZW5jb2RlZCB3b3JkcyAoc2VlIFJGQworICAgICAgICAgICAgICAgICAgICAgICAgICAgNjUzMiBmb3IgbW9yZSBvbiB0aGlzIHNlcmlhbGl6YXRpb24gZm9ybWF0KS4KKwogICAgIHJlZm9sZF9zb3VyY2UgICAgICAgLS0gaWYgdGhlIHZhbHVlIGZvciBhIGhlYWRlciBpbiB0aGUgTWVzc2FnZSBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWUgZnJvbSB0aGUgcGFyc2luZyBvZiBzb21lIHNvdXJjZSwgdGhpcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCBhIGdlbmVyYXRvciBzaG91bGQgcmVmb2xkCkBAIC03Miw2ICs3OSw3IEBACiAKICAgICAiIiIKIAorICAgIHV0ZjggPSBGYWxzZQogICAgIHJlZm9sZF9zb3VyY2UgPSAnbG9uZycKICAgICBoZWFkZXJfZmFjdG9yeSA9IEhlYWRlclJlZ2lzdHJ5KCkKICAgICBjb250ZW50X21hbmFnZXIgPSByYXdfZGF0YV9tYW5hZ2VyCkBAIC0xNzUsOSArMTgzLDEzIEBACiAgICAgICAgIHJlZm9sZF9oZWFkZXIgc2V0dGluZywgc2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIGtub3cgd2hldGhlciB0aGUgYmluYXJ5CiAgICAgICAgIGRhdGEgY29uc2lzdHMgb2Ygc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBvciBtdWx0aWJ5dGUgY2hhcmFjdGVycy4KIAorICAgICAgICBJZiB1dGY4IGlzIHRydWUsIGhlYWRlcnMgYXJlIGVuY29kZWQgdG8gdXRmOCwgb3RoZXJ3aXNlIHRvIGFzY2lpIHdpdGgKKyAgICAgICAgbm9uLUFTQ0lJIHVuaWNvZGUgcmVuZGVyZWQgYXMgZW5jb2RlZCB3b3Jkcy4KKwogICAgICAgICAiIiIKICAgICAgICAgZm9sZGVkID0gc2VsZi5fZm9sZChuYW1lLCB2YWx1ZSwgcmVmb2xkX2JpbmFyeT1zZWxmLmN0ZV90eXBlPT0nN2JpdCcpCi0gICAgICAgIHJldHVybiBmb2xkZWQuZW5jb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICBjaGFyc2V0ID0gJ3V0ZjgnIGlmIHNlbGYudXRmOCBlbHNlICdhc2NpaScKKyAgICAgICAgcmV0dXJuIGZvbGRlZC5lbmNvZGUoY2hhcnNldCwgJ3N1cnJvZ2F0ZWVzY2FwZScpCiAKICAgICBkZWYgX2ZvbGQoc2VsZiwgbmFtZSwgdmFsdWUsIHJlZm9sZF9iaW5hcnk9RmFsc2UpOgogICAgICAgICBpZiBoYXNhdHRyKHZhbHVlLCAnbmFtZScpOgpAQCAtMTk5LDMgKzIxMSw0IEBACiBzdHJpY3QgPSBkZWZhdWx0LmNsb25lKHJhaXNlX29uX2RlZmVjdD1UcnVlKQogU01UUCA9IGRlZmF1bHQuY2xvbmUobGluZXNlcD0nXHJcbicpCiBIVFRQID0gZGVmYXVsdC5jbG9uZShsaW5lc2VwPSdcclxuJywgbWF4X2xpbmVfbGVuZ3RoPU5vbmUpCitTTVRQVVRGOCA9IFNNVFAuY2xvbmUodXRmOD1UcnVlKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3V0aWxzLnB5IGIvTGliL2VtYWlsL3V0aWxzLnB5CmluZGV4IDUwODBkODEuLmE3NTlkMjMgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC91dGlscy5weQorKysgYi9MaWIvZW1haWwvdXRpbHMucHkKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAndXRmLTgnLgogICAgICIiIgogICAgIG5hbWUsIGFkZHJlc3MgPSBwYWlyCi0gICAgIyBUaGUgYWRkcmVzcyBNVVNUIChwZXIgUkZDKSBiZSBhc2NpaSwgc28gcmFpc2UgYW4gVW5pY29kZUVycm9yIGlmIGl0IGlzbid0LgorICAgICMgVGhlIGFkZHJlc3MgTVVTVCAocGVyIFJGQykgYmUgYXNjaWksIHNvIHJhaXNlIGEgVW5pY29kZUVycm9yIGlmIGl0IGlzbid0LgogICAgIGFkZHJlc3MuZW5jb2RlKCdhc2NpaScpCiAgICAgaWYgbmFtZToKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5IGIvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CmluZGV4IDRjYmFhZGUuLjY3YzgyOGQgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKQEAgLTQxMiw2ICs0MTIsMTEgQEAKICAgICAjIGtvaThfciBjb2RlYwogICAgICdjc2tvaThyJyAgICAgICAgICAgIDogJ2tvaThfcicsCiAKKyAgICAjIGt6MTA0OCBjb2RlYworICAgICdrel8xMDQ4JyAgICAgICAgICAgOiAna3oxMDQ4JywKKyAgICAncmsxMDQ4JyAgICAgICAgICAgIDogJ2t6MTA0OCcsCisgICAgJ3N0cmsxMDQ4XzIwMDInICAgICA6ICdrejEwNDgnLAorCiAgICAgIyBsYXRpbl8xIGNvZGVjCiAgICAgIwogICAgICMgTm90ZSB0aGF0IHRoZSBsYXRpbl8xIGNvZGVjIGlzIGltcGxlbWVudGVkIGludGVybmFsbHkgaW4gQyBhbmQgYQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDY1MDAxLnB5IGIvTGliL2VuY29kaW5ncy9jcDY1MDAxLnB5CmluZGV4IDI4N2ViODcuLjk1Y2IyYWUgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvY3A2NTAwMS5weQorKysgYi9MaWIvZW5jb2RpbmdzL2NwNjUwMDEucHkKQEAgLTExLDIwICsxMSwyMyBAQAogIyMjIENvZGVjIEFQSXMKIAogZW5jb2RlID0gZnVuY3Rvb2xzLnBhcnRpYWwoY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIDY1MDAxKQotZGVjb2RlID0gZnVuY3Rvb2xzLnBhcnRpYWwoY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIDY1MDAxKQorX2RlY29kZSA9IGZ1bmN0b29scy5wYXJ0aWFsKGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCA2NTAwMSkKKworZGVmIGRlY29kZShpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICByZXR1cm4gY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUoNjUwMDEsIGlucHV0LCBlcnJvcnMsIFRydWUpCiAKIGNsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKICAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CiAgICAgICAgIHJldHVybiBlbmNvZGUoaW5wdXQsIHNlbGYuZXJyb3JzKVswXQogCiBjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkJ1ZmZlcmVkSW5jcmVtZW50YWxEZWNvZGVyKToKLSAgICBfYnVmZmVyX2RlY29kZSA9IGRlY29kZQorICAgIF9idWZmZXJfZGVjb2RlID0gX2RlY29kZQogCiBjbGFzcyBTdHJlYW1Xcml0ZXIoY29kZWNzLlN0cmVhbVdyaXRlcik6CiAgICAgZW5jb2RlID0gZW5jb2RlCiAKIGNsYXNzIFN0cmVhbVJlYWRlcihjb2RlY3MuU3RyZWFtUmVhZGVyKToKLSAgICBkZWNvZGUgPSBkZWNvZGUKKyAgICBkZWNvZGUgPSBfZGVjb2RlCiAKICMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQogCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2hwX3JvbWFuOC5weSBiL0xpYi9lbmNvZGluZ3MvaHBfcm9tYW44LnB5CmluZGV4IDIzMzQyMDguLjU4ZGUxMDMgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvaHBfcm9tYW44LnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvaHBfcm9tYW44LnB5CkBAIC01LDYgKzUsOCBAQAogICAgIE9yaWdpbmFsIHNvdXJjZTogTGFzZXJKZXQgSUlQIFByaW50ZXIgVXNlcidzIE1hbnVhbCBIUCBwYXJ0IG5vCiAgICAgMzM0NzEtOTA5MDEsIEhld2xldC1QYWNrYXJkLCBKdW5lIDE5ODkuCiAKKyAgICAoVXNlZCB3aXRoIHBlcm1pc3Npb24pCisKICIiIiMiCiAKIGltcG9ydCBjb2RlY3MKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3Mva29pOF90LnB5IGIvTGliL2VuY29kaW5ncy9rb2k4X3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0MTViYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbmNvZGluZ3Mva29pOF90LnB5CkBAIC0wLDAgKzEsMzA4IEBACisiIiIgUHl0aG9uIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIGtvaThfdAorIiIiCisjIGh0dHA6Ly9ydS53aWtpcGVkaWEub3JnL3dpa2kv0JrQntCYLTgKKyMgaHR0cDovL3d3dy5vcGVuc291cmNlLmFwcGxlLmNvbS9zb3VyY2UvbGliaWNvbnYvbGliaWNvbnYtNC9saWJpY29udi90ZXN0cy9LT0k4LVQuVFhUCisKK2ltcG9ydCBjb2RlY3MKKworIyMjIENvZGVjIEFQSXMKKworY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKKworICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ190YWJsZSkKKworICAgIGRlZiBkZWNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ190YWJsZSkKKworY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgorICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxzZWxmLmVycm9ycyxkZWNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIHBhc3MKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSdrb2k4LXQnLAorICAgICAgICBlbmNvZGU9Q29kZWMoKS5lbmNvZGUsCisgICAgICAgIGRlY29kZT1Db2RlYygpLmRlY29kZSwKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPUluY3JlbWVudGFsRW5jb2RlciwKKyAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKKyAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICApCisKKworIyMjIERlY29kaW5nIFRhYmxlCisKK2RlY29kaW5nX3RhYmxlID0gKAorICAgICdceDAwJyAgICAgIyAgMHgwMCAtPiBOVUxMCisgICAgJ1x4MDEnICAgICAjICAweDAxIC0+IFNUQVJUIE9GIEhFQURJTkcKKyAgICAnXHgwMicgICAgICMgIDB4MDIgLT4gU1RBUlQgT0YgVEVYVAorICAgICdceDAzJyAgICAgIyAgMHgwMyAtPiBFTkQgT0YgVEVYVAorICAgICdceDA0JyAgICAgIyAgMHgwNCAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OCisgICAgJ1x4MDUnICAgICAjICAweDA1IC0+IEVOUVVJUlkKKyAgICAnXHgwNicgICAgICMgIDB4MDYgLT4gQUNLTk9XTEVER0UKKyAgICAnXHgwNycgICAgICMgIDB4MDcgLT4gQkVMTAorICAgICdceDA4JyAgICAgIyAgMHgwOCAtPiBCQUNLU1BBQ0UKKyAgICAnXHQnICAgICAgICMgIDB4MDkgLT4gSE9SSVpPTlRBTCBUQUJVTEFUSU9OCisgICAgJ1xuJyAgICAgICAjICAweDBBIC0+IExJTkUgRkVFRAorICAgICdceDBiJyAgICAgIyAgMHgwQiAtPiBWRVJUSUNBTCBUQUJVTEFUSU9OCisgICAgJ1x4MGMnICAgICAjICAweDBDIC0+IEZPUk0gRkVFRAorICAgICdccicgICAgICAgIyAgMHgwRCAtPiBDQVJSSUFHRSBSRVRVUk4KKyAgICAnXHgwZScgICAgICMgIDB4MEUgLT4gU0hJRlQgT1VUCisgICAgJ1x4MGYnICAgICAjICAweDBGIC0+IFNISUZUIElOCisgICAgJ1x4MTAnICAgICAjICAweDEwIC0+IERBVEEgTElOSyBFU0NBUEUKKyAgICAnXHgxMScgICAgICMgIDB4MTEgLT4gREVWSUNFIENPTlRST0wgT05FCisgICAgJ1x4MTInICAgICAjICAweDEyIC0+IERFVklDRSBDT05UUk9MIFRXTworICAgICdceDEzJyAgICAgIyAgMHgxMyAtPiBERVZJQ0UgQ09OVFJPTCBUSFJFRQorICAgICdceDE0JyAgICAgIyAgMHgxNCAtPiBERVZJQ0UgQ09OVFJPTCBGT1VSCisgICAgJ1x4MTUnICAgICAjICAweDE1IC0+IE5FR0FUSVZFIEFDS05PV0xFREdFCisgICAgJ1x4MTYnICAgICAjICAweDE2IC0+IFNZTkNIUk9OT1VTIElETEUKKyAgICAnXHgxNycgICAgICMgIDB4MTcgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSworICAgICdceDE4JyAgICAgIyAgMHgxOCAtPiBDQU5DRUwKKyAgICAnXHgxOScgICAgICMgIDB4MTkgLT4gRU5EIE9GIE1FRElVTQorICAgICdceDFhJyAgICAgIyAgMHgxQSAtPiBTVUJTVElUVVRFCisgICAgJ1x4MWInICAgICAjICAweDFCIC0+IEVTQ0FQRQorICAgICdceDFjJyAgICAgIyAgMHgxQyAtPiBGSUxFIFNFUEFSQVRPUgorICAgICdceDFkJyAgICAgIyAgMHgxRCAtPiBHUk9VUCBTRVBBUkFUT1IKKyAgICAnXHgxZScgICAgICMgIDB4MUUgLT4gUkVDT1JEIFNFUEFSQVRPUgorICAgICdceDFmJyAgICAgIyAgMHgxRiAtPiBVTklUIFNFUEFSQVRPUgorICAgICcgJyAgICAgICAgIyAgMHgyMCAtPiBTUEFDRQorICAgICchJyAgICAgICAgIyAgMHgyMSAtPiBFWENMQU1BVElPTiBNQVJLCisgICAgJyInICAgICAgICAjICAweDIyIC0+IFFVT1RBVElPTiBNQVJLCisgICAgJyMnICAgICAgICAjICAweDIzIC0+IE5VTUJFUiBTSUdOCisgICAgJyQnICAgICAgICAjICAweDI0IC0+IERPTExBUiBTSUdOCisgICAgJyUnICAgICAgICAjICAweDI1IC0+IFBFUkNFTlQgU0lHTgorICAgICcmJyAgICAgICAgIyAgMHgyNiAtPiBBTVBFUlNBTkQKKyAgICAiJyIgICAgICAgICMgIDB4MjcgLT4gQVBPU1RST1BIRQorICAgICcoJyAgICAgICAgIyAgMHgyOCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgJyknICAgICAgICAjICAweDI5IC0+IFJJR0hUIFBBUkVOVEhFU0lTCisgICAgJyonICAgICAgICAjICAweDJBIC0+IEFTVEVSSVNLCisgICAgJysnICAgICAgICAjICAweDJCIC0+IFBMVVMgU0lHTgorICAgICcsJyAgICAgICAgIyAgMHgyQyAtPiBDT01NQQorICAgICctJyAgICAgICAgIyAgMHgyRCAtPiBIWVBIRU4tTUlOVVMKKyAgICAnLicgICAgICAgICMgIDB4MkUgLT4gRlVMTCBTVE9QCisgICAgJy8nICAgICAgICAjICAweDJGIC0+IFNPTElEVVMKKyAgICAnMCcgICAgICAgICMgIDB4MzAgLT4gRElHSVQgWkVSTworICAgICcxJyAgICAgICAgIyAgMHgzMSAtPiBESUdJVCBPTkUKKyAgICAnMicgICAgICAgICMgIDB4MzIgLT4gRElHSVQgVFdPCisgICAgJzMnICAgICAgICAjICAweDMzIC0+IERJR0lUIFRIUkVFCisgICAgJzQnICAgICAgICAjICAweDM0IC0+IERJR0lUIEZPVVIKKyAgICAnNScgICAgICAgICMgIDB4MzUgLT4gRElHSVQgRklWRQorICAgICc2JyAgICAgICAgIyAgMHgzNiAtPiBESUdJVCBTSVgKKyAgICAnNycgICAgICAgICMgIDB4MzcgLT4gRElHSVQgU0VWRU4KKyAgICAnOCcgICAgICAgICMgIDB4MzggLT4gRElHSVQgRUlHSFQKKyAgICAnOScgICAgICAgICMgIDB4MzkgLT4gRElHSVQgTklORQorICAgICc6JyAgICAgICAgIyAgMHgzQSAtPiBDT0xPTgorICAgICc7JyAgICAgICAgIyAgMHgzQiAtPiBTRU1JQ09MT04KKyAgICAnPCcgICAgICAgICMgIDB4M0MgLT4gTEVTUy1USEFOIFNJR04KKyAgICAnPScgICAgICAgICMgIDB4M0QgLT4gRVFVQUxTIFNJR04KKyAgICAnPicgICAgICAgICMgIDB4M0UgLT4gR1JFQVRFUi1USEFOIFNJR04KKyAgICAnPycgICAgICAgICMgIDB4M0YgLT4gUVVFU1RJT04gTUFSSworICAgICdAJyAgICAgICAgIyAgMHg0MCAtPiBDT01NRVJDSUFMIEFUCisgICAgJ0EnICAgICAgICAjICAweDQxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICAnQicgICAgICAgICMgIDB4NDIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgICdDJyAgICAgICAgIyAgMHg0MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgJ0QnICAgICAgICAjICAweDQ0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICAnRScgICAgICAgICMgIDB4NDUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgICdGJyAgICAgICAgIyAgMHg0NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgJ0cnICAgICAgICAjICAweDQ3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICAnSCcgICAgICAgICMgIDB4NDggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgICdJJyAgICAgICAgIyAgMHg0OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgJ0onICAgICAgICAjICAweDRBIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAnSycgICAgICAgICMgIDB4NEIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgICdMJyAgICAgICAgIyAgMHg0QyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgJ00nICAgICAgICAjICAweDREIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICAnTicgICAgICAgICMgIDB4NEUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgICdPJyAgICAgICAgIyAgMHg0RiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1AnICAgICAgICAjICAweDUwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICAnUScgICAgICAgICMgIDB4NTEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgICdSJyAgICAgICAgIyAgMHg1MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgJ1MnICAgICAgICAjICAweDUzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICAnVCcgICAgICAgICMgIDB4NTQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgICdVJyAgICAgICAgIyAgMHg1NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1YnICAgICAgICAjICAweDU2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICAnVycgICAgICAgICMgIDB4NTcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgICdYJyAgICAgICAgIyAgMHg1OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgJ1knICAgICAgICAjICAweDU5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICAnWicgICAgICAgICMgIDB4NUEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgICdbJyAgICAgICAgIyAgMHg1QiAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1xcJyAgICAgICAjICAweDVDIC0+IFJFVkVSU0UgU09MSURVUworICAgICddJyAgICAgICAgIyAgMHg1RCAtPiBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgICdeJyAgICAgICAgIyAgMHg1RSAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgICdfJyAgICAgICAgIyAgMHg1RiAtPiBMT1cgTElORQorICAgICdgJyAgICAgICAgIyAgMHg2MCAtPiBHUkFWRSBBQ0NFTlQKKyAgICAnYScgICAgICAgICMgIDB4NjEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAnYicgICAgICAgICMgIDB4NjIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICAnYycgICAgICAgICMgIDB4NjMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAnZCcgICAgICAgICMgIDB4NjQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAnZScgICAgICAgICMgIDB4NjUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICAnZicgICAgICAgICMgIDB4NjYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAnZycgICAgICAgICMgIDB4NjcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAnaCcgICAgICAgICMgIDB4NjggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICAnaScgICAgICAgICMgIDB4NjkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAnaicgICAgICAgICMgIDB4NkEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAnaycgICAgICAgICMgIDB4NkIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICAnbCcgICAgICAgICMgIDB4NkMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAnbScgICAgICAgICMgIDB4NkQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAnbicgICAgICAgICMgIDB4NkUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICAnbycgICAgICAgICMgIDB4NkYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAncCcgICAgICAgICMgIDB4NzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAncScgICAgICAgICMgIDB4NzEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICAncicgICAgICAgICMgIDB4NzIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAncycgICAgICAgICMgIDB4NzMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAndCcgICAgICAgICMgIDB4NzQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICAndScgICAgICAgICMgIDB4NzUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAndicgICAgICAgICMgIDB4NzYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAndycgICAgICAgICMgIDB4NzcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICAneCcgICAgICAgICMgIDB4NzggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAneScgICAgICAgICMgIDB4NzkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAneicgICAgICAgICMgIDB4N0EgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICAneycgICAgICAgICMgIDB4N0IgLT4gTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgJ3wnICAgICAgICAjICAweDdDIC0+IFZFUlRJQ0FMIExJTkUKKyAgICAnfScgICAgICAgICMgIDB4N0QgLT4gUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgICd+JyAgICAgICAgIyAgMHg3RSAtPiBUSUxERQorICAgICdceDdmJyAgICAgIyAgMHg3RiAtPiBERUxFVEUKKyAgICAnXHUwNDliJyAgICMgIDB4ODAgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBIFdJVEggREVTQ0VOREVSCisgICAgJ1x1MDQ5MycgICAjICAweDgxIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBTVFJPS0UKKyAgICAnXHUyMDFhJyAgICMgIDB4ODIgLT4gU0lOR0xFIExPVy05IFFVT1RBVElPTiBNQVJLCisgICAgJ1x1MDQ5MicgICAjICAweDgzIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFNUUk9LRQorICAgICdcdTIwMWUnICAgIyAgMHg4NCAtPiBET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKKyAgICAnXHUyMDI2JyAgICMgIDB4ODUgLT4gSE9SSVpPTlRBTCBFTExJUFNJUworICAgICdcdTIwMjAnICAgIyAgMHg4NiAtPiBEQUdHRVIKKyAgICAnXHUyMDIxJyAgICMgIDB4ODcgLT4gRE9VQkxFIERBR0dFUgorICAgICdcdWZmZmUnICAgIyAgMHg4OCAtPiBVTkRFRklORUQKKyAgICAnXHUyMDMwJyAgICMgIDB4ODkgLT4gUEVSIE1JTExFIFNJR04KKyAgICAnXHUwNGIzJyAgICMgIDB4OEEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBIFdJVEggREVTQ0VOREVSCisgICAgJ1x1MjAzOScgICAjICAweDhCIC0+IFNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x1MDRiMicgICAjICAweDhDIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBIFdJVEggREVTQ0VOREVSCisgICAgJ1x1MDRiNycgICAjICAweDhEIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUgV0lUSCBERVNDRU5ERVIKKyAgICAnXHUwNGI2JyAgICMgIDB4OEUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFIFdJVEggREVTQ0VOREVSCisgICAgJ1x1ZmZmZScgICAjICAweDhGIC0+IFVOREVGSU5FRAorICAgICdcdTA0OWEnICAgIyAgMHg5MCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQSBXSVRIIERFU0NFTkRFUgorICAgICdcdTIwMTgnICAgIyAgMHg5MSAtPiBMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSworICAgICdcdTIwMTknICAgIyAgMHg5MiAtPiBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHUyMDFjJyAgICMgIDB4OTMgLT4gTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHUyMDFkJyAgICMgIDB4OTQgLT4gUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x1MjAyMicgICAjICAweDk1IC0+IEJVTExFVAorICAgICdcdTIwMTMnICAgIyAgMHg5NiAtPiBFTiBEQVNICisgICAgJ1x1MjAxNCcgICAjICAweDk3IC0+IEVNIERBU0gKKyAgICAnXHVmZmZlJyAgICMgIDB4OTggLT4gVU5ERUZJTkVECisgICAgJ1x1MjEyMicgICAjICAweDk5IC0+IFRSQURFIE1BUksgU0lHTgorICAgICdcdWZmZmUnICAgIyAgMHg5QSAtPiBVTkRFRklORUQKKyAgICAnXHUyMDNhJyAgICMgIDB4OUIgLT4gU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x1ZmZmZScgICAjICAweDlDIC0+IFVOREVGSU5FRAorICAgICdcdWZmZmUnICAgIyAgMHg5RCAtPiBVTkRFRklORUQKKyAgICAnXHVmZmZlJyAgICMgIDB4OUUgLT4gVU5ERUZJTkVECisgICAgJ1x1ZmZmZScgICAjICAweDlGIC0+IFVOREVGSU5FRAorICAgICdcdWZmZmUnICAgIyAgMHhBMCAtPiBVTkRFRklORUQKKyAgICAnXHUwNGVmJyAgICMgIDB4QTEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUgV0lUSCBNQUNST04KKyAgICAnXHUwNGVlJyAgICMgIDB4QTIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVSBXSVRIIE1BQ1JPTgorICAgICdcdTA0NTEnICAgIyAgMHhBMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKyAgICAnXHhhNCcgICAgICMgIDB4QTQgLT4gQ1VSUkVOQ1kgU0lHTgorICAgICdcdTA0ZTMnICAgIyAgMHhBNSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSSBXSVRIIE1BQ1JPTgorICAgICdceGE2JyAgICAgIyAgMHhBNiAtPiBCUk9LRU4gQkFSCisgICAgJ1x4YTcnICAgICAjICAweEE3IC0+IFNFQ1RJT04gU0lHTgorICAgICdcdWZmZmUnICAgIyAgMHhBOCAtPiBVTkRFRklORUQKKyAgICAnXHVmZmZlJyAgICMgIDB4QTkgLT4gVU5ERUZJTkVECisgICAgJ1x1ZmZmZScgICAjICAweEFBIC0+IFVOREVGSU5FRAorICAgICdceGFiJyAgICAgIyAgMHhBQiAtPiBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgICdceGFjJyAgICAgIyAgMHhBQyAtPiBOT1QgU0lHTgorICAgICdceGFkJyAgICAgIyAgMHhBRCAtPiBTT0ZUIEhZUEhFTgorICAgICdceGFlJyAgICAgIyAgMHhBRSAtPiBSRUdJU1RFUkVEIFNJR04KKyAgICAnXHVmZmZlJyAgICMgIDB4QUYgLT4gVU5ERUZJTkVECisgICAgJ1x4YjAnICAgICAjICAweEIwIC0+IERFR1JFRSBTSUdOCisgICAgJ1x4YjEnICAgICAjICAweEIxIC0+IFBMVVMtTUlOVVMgU0lHTgorICAgICdceGIyJyAgICAgIyAgMHhCMiAtPiBTVVBFUlNDUklQVCBUV08KKyAgICAnXHUwNDAxJyAgICMgIDB4QjMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KKyAgICAnXHVmZmZlJyAgICMgIDB4QjQgLT4gVU5ERUZJTkVECisgICAgJ1x1MDRlMicgICAjICAweEI1IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEkgV0lUSCBNQUNST04KKyAgICAnXHhiNicgICAgICMgIDB4QjYgLT4gUElMQ1JPVyBTSUdOCisgICAgJ1x4YjcnICAgICAjICAweEI3IC0+IE1JRERMRSBET1QKKyAgICAnXHVmZmZlJyAgICMgIDB4QjggLT4gVU5ERUZJTkVECisgICAgJ1x1MjExNicgICAjICAweEI5IC0+IE5VTUVSTyBTSUdOCisgICAgJ1x1ZmZmZScgICAjICAweEJBIC0+IFVOREVGSU5FRAorICAgICdceGJiJyAgICAgIyAgMHhCQiAtPiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHVmZmZlJyAgICMgIDB4QkMgLT4gVU5ERUZJTkVECisgICAgJ1x1ZmZmZScgICAjICAweEJEIC0+IFVOREVGSU5FRAorICAgICdcdWZmZmUnICAgIyAgMHhCRSAtPiBVTkRFRklORUQKKyAgICAnXHhhOScgICAgICMgIDB4QkYgLT4gQ09QWVJJR0hUIFNJR04KKyAgICAnXHUwNDRlJyAgICMgIDB4QzAgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCisgICAgJ1x1MDQzMCcgICAjICAweEMxIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBBCisgICAgJ1x1MDQzMScgICAjICAweEMyIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBCRQorICAgICdcdTA0NDYnICAgIyAgMHhDMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCisgICAgJ1x1MDQzNCcgICAjICAweEM0IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBERQorICAgICdcdTA0MzUnICAgIyAgMHhDNSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKyAgICAnXHUwNDQ0JyAgICMgIDB4QzYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCisgICAgJ1x1MDQzMycgICAjICAweEM3IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKKyAgICAnXHUwNDQ1JyAgICMgIDB4QzggLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCisgICAgJ1x1MDQzOCcgICAjICAweEM5IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBJCisgICAgJ1x1MDQzOScgICAjICAweENBIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCisgICAgJ1x1MDQzYScgICAjICAweENCIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorICAgICdcdTA0M2InICAgIyAgMHhDQyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUwKKyAgICAnXHUwNDNjJyAgICMgIDB4Q0QgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVNCisgICAgJ1x1MDQzZCcgICAjICAweENFIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTgorICAgICdcdTA0M2UnICAgIyAgMHhDRiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgTworICAgICdcdTA0M2YnICAgIyAgMHhEMCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKKyAgICAnXHUwNDRmJyAgICMgIDB4RDEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCisgICAgJ1x1MDQ0MCcgICAjICAweEQyIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFUgorICAgICdcdTA0NDEnICAgIyAgMHhEMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKKyAgICAnXHUwNDQyJyAgICMgIDB4RDQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFCisgICAgJ1x1MDQ0MycgICAjICAweEQ1IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBVCisgICAgJ1x1MDQzNicgICAjICAweEQ2IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKKyAgICAnXHUwNDMyJyAgICMgIDB4RDcgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCisgICAgJ1x1MDQ0YycgICAjICAweEQ4IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAnXHUwNDRiJyAgICMgIDB4RDkgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUKKyAgICAnXHUwNDM3JyAgICMgIDB4REEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisgICAgJ1x1MDQ0OCcgICAjICAweERCIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKKyAgICAnXHUwNDRkJyAgICMgIDB4REMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKyAgICAnXHUwNDQ5JyAgICMgIDB4REQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBCisgICAgJ1x1MDQ0NycgICAjICAweERFIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKKyAgICAnXHUwNDRhJyAgICMgIDB4REYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBUkQgU0lHTgorICAgICdcdTA0MmUnICAgIyAgMHhFMCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZVQorICAgICdcdTA0MTAnICAgIyAgMHhFMSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBBCisgICAgJ1x1MDQxMScgICAjICAweEUyIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCisgICAgJ1x1MDQyNicgICAjICAweEUzIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFRTRQorICAgICdcdTA0MTQnICAgIyAgMHhFNCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorICAgICdcdTA0MTUnICAgIyAgMHhFNSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorICAgICdcdTA0MjQnICAgIyAgMHhFNiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorICAgICdcdTA0MTMnICAgIyAgMHhFNyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKKyAgICAnXHUwNDI1JyAgICMgIDB4RTggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKKyAgICAnXHUwNDE4JyAgICMgIDB4RTkgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorICAgICdcdTA0MTknICAgIyAgMHhFQSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSE9SVCBJCisgICAgJ1x1MDQxYScgICAjICAweEVCIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCisgICAgJ1x1MDQxYicgICAjICAweEVDIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCisgICAgJ1x1MDQxYycgICAjICAweEVEIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVNCisgICAgJ1x1MDQxZCcgICAjICAweEVFIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCisgICAgJ1x1MDQxZScgICAjICAweEVGIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIE8KKyAgICAnXHUwNDFmJyAgICMgIDB4RjAgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgUEUKKyAgICAnXHUwNDJmJyAgICMgIDB4RjEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKKyAgICAnXHUwNDIwJyAgICMgIDB4RjIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyAgICAnXHUwNDIxJyAgICMgIDB4RjMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKKyAgICAnXHUwNDIyJyAgICMgIDB4RjQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVEUKKyAgICAnXHUwNDIzJyAgICMgIDB4RjUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorICAgICdcdTA0MTYnICAgIyAgMHhGNiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaSEUKKyAgICAnXHUwNDEyJyAgICMgIDB4RjcgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVkUKKyAgICAnXHUwNDJjJyAgICMgIDB4RjggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOCisgICAgJ1x1MDQyYicgICAjICAweEY5IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKKyAgICAnXHUwNDE3JyAgICMgIDB4RkEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKyAgICAnXHUwNDI4JyAgICMgIDB4RkIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCisgICAgJ1x1MDQyZCcgICAjICAweEZDIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKyAgICAnXHUwNDI5JyAgICMgIDB4RkQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKyAgICAnXHUwNDI3JyAgICMgIDB4RkUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisgICAgJ1x1MDQyYScgICAjICAweEZGIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBUkQgU0lHTgorKQorCisjIyMgRW5jb2RpbmcgdGFibGUKK2VuY29kaW5nX3RhYmxlPWNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9rejEwNDgucHkgYi9MaWIvZW5jb2RpbmdzL2t6MTA0OC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTJhZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9rejEwNDgucHkKQEAgLTAsMCArMSwzMDcgQEAKKyIiIiBQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMga3oxMDQ4IGdlbmVyYXRlZCBmcm9tICdNQVBQSU5HUy9WRU5ET1JTL01JU0MvS1oxMDQ4LlRYVCcgd2l0aCBnZW5jb2RlYy5weS4KKworIiIiIyIKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCwgZXJyb3JzLCBlbmNvZGluZ190YWJsZSkKKworICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIGVycm9ycywgZGVjb2RpbmdfdGFibGUpCisKK2NsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsIHNlbGYuZXJyb3JzLCBlbmNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCwgc2VsZi5lcnJvcnMsIGRlY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0na3oxMDQ4JywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQorCisKKyMjIyBEZWNvZGluZyBUYWJsZQorCitkZWNvZGluZ190YWJsZSA9ICgKKyAgICAnXHgwMCcgICAgICAjICAweDAwIC0+IE5VTEwKKyAgICAnXHgwMScgICAgICAjICAweDAxIC0+IFNUQVJUIE9GIEhFQURJTkcKKyAgICAnXHgwMicgICAgICAjICAweDAyIC0+IFNUQVJUIE9GIFRFWFQKKyAgICAnXHgwMycgICAgICAjICAweDAzIC0+IEVORCBPRiBURVhUCisgICAgJ1x4MDQnICAgICAgIyAgMHgwNCAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OCisgICAgJ1x4MDUnICAgICAgIyAgMHgwNSAtPiBFTlFVSVJZCisgICAgJ1x4MDYnICAgICAgIyAgMHgwNiAtPiBBQ0tOT1dMRURHRQorICAgICdceDA3JyAgICAgICMgIDB4MDcgLT4gQkVMTAorICAgICdceDA4JyAgICAgICMgIDB4MDggLT4gQkFDS1NQQUNFCisgICAgJ1x0JyAgICAgICAgIyAgMHgwOSAtPiBIT1JJWk9OVEFMIFRBQlVMQVRJT04KKyAgICAnXG4nICAgICAgICAjICAweDBBIC0+IExJTkUgRkVFRAorICAgICdceDBiJyAgICAgICMgIDB4MEIgLT4gVkVSVElDQUwgVEFCVUxBVElPTgorICAgICdceDBjJyAgICAgICMgIDB4MEMgLT4gRk9STSBGRUVECisgICAgJ1xyJyAgICAgICAgIyAgMHgwRCAtPiBDQVJSSUFHRSBSRVRVUk4KKyAgICAnXHgwZScgICAgICAjICAweDBFIC0+IFNISUZUIE9VVAorICAgICdceDBmJyAgICAgICMgIDB4MEYgLT4gU0hJRlQgSU4KKyAgICAnXHgxMCcgICAgICAjICAweDEwIC0+IERBVEEgTElOSyBFU0NBUEUKKyAgICAnXHgxMScgICAgICAjICAweDExIC0+IERFVklDRSBDT05UUk9MIE9ORQorICAgICdceDEyJyAgICAgICMgIDB4MTIgLT4gREVWSUNFIENPTlRST0wgVFdPCisgICAgJ1x4MTMnICAgICAgIyAgMHgxMyAtPiBERVZJQ0UgQ09OVFJPTCBUSFJFRQorICAgICdceDE0JyAgICAgICMgIDB4MTQgLT4gREVWSUNFIENPTlRST0wgRk9VUgorICAgICdceDE1JyAgICAgICMgIDB4MTUgLT4gTkVHQVRJVkUgQUNLTk9XTEVER0UKKyAgICAnXHgxNicgICAgICAjICAweDE2IC0+IFNZTkNIUk9OT1VTIElETEUKKyAgICAnXHgxNycgICAgICAjICAweDE3IC0+IEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sKKyAgICAnXHgxOCcgICAgICAjICAweDE4IC0+IENBTkNFTAorICAgICdceDE5JyAgICAgICMgIDB4MTkgLT4gRU5EIE9GIE1FRElVTQorICAgICdceDFhJyAgICAgICMgIDB4MUEgLT4gU1VCU1RJVFVURQorICAgICdceDFiJyAgICAgICMgIDB4MUIgLT4gRVNDQVBFCisgICAgJ1x4MWMnICAgICAgIyAgMHgxQyAtPiBGSUxFIFNFUEFSQVRPUgorICAgICdceDFkJyAgICAgICMgIDB4MUQgLT4gR1JPVVAgU0VQQVJBVE9SCisgICAgJ1x4MWUnICAgICAgIyAgMHgxRSAtPiBSRUNPUkQgU0VQQVJBVE9SCisgICAgJ1x4MWYnICAgICAgIyAgMHgxRiAtPiBVTklUIFNFUEFSQVRPUgorICAgICcgJyAgICAgICAgICMgIDB4MjAgLT4gU1BBQ0UKKyAgICAnIScgICAgICAgICAjICAweDIxIC0+IEVYQ0xBTUFUSU9OIE1BUksKKyAgICAnIicgICAgICAgICAjICAweDIyIC0+IFFVT1RBVElPTiBNQVJLCisgICAgJyMnICAgICAgICAgIyAgMHgyMyAtPiBOVU1CRVIgU0lHTgorICAgICckJyAgICAgICAgICMgIDB4MjQgLT4gRE9MTEFSIFNJR04KKyAgICAnJScgICAgICAgICAjICAweDI1IC0+IFBFUkNFTlQgU0lHTgorICAgICcmJyAgICAgICAgICMgIDB4MjYgLT4gQU1QRVJTQU5ECisgICAgIiciICAgICAgICAgIyAgMHgyNyAtPiBBUE9TVFJPUEhFCisgICAgJygnICAgICAgICAgIyAgMHgyOCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgJyknICAgICAgICAgIyAgMHgyOSAtPiBSSUdIVCBQQVJFTlRIRVNJUworICAgICcqJyAgICAgICAgICMgIDB4MkEgLT4gQVNURVJJU0sKKyAgICAnKycgICAgICAgICAjICAweDJCIC0+IFBMVVMgU0lHTgorICAgICcsJyAgICAgICAgICMgIDB4MkMgLT4gQ09NTUEKKyAgICAnLScgICAgICAgICAjICAweDJEIC0+IEhZUEhFTi1NSU5VUworICAgICcuJyAgICAgICAgICMgIDB4MkUgLT4gRlVMTCBTVE9QCisgICAgJy8nICAgICAgICAgIyAgMHgyRiAtPiBTT0xJRFVTCisgICAgJzAnICAgICAgICAgIyAgMHgzMCAtPiBESUdJVCBaRVJPCisgICAgJzEnICAgICAgICAgIyAgMHgzMSAtPiBESUdJVCBPTkUKKyAgICAnMicgICAgICAgICAjICAweDMyIC0+IERJR0lUIFRXTworICAgICczJyAgICAgICAgICMgIDB4MzMgLT4gRElHSVQgVEhSRUUKKyAgICAnNCcgICAgICAgICAjICAweDM0IC0+IERJR0lUIEZPVVIKKyAgICAnNScgICAgICAgICAjICAweDM1IC0+IERJR0lUIEZJVkUKKyAgICAnNicgICAgICAgICAjICAweDM2IC0+IERJR0lUIFNJWAorICAgICc3JyAgICAgICAgICMgIDB4MzcgLT4gRElHSVQgU0VWRU4KKyAgICAnOCcgICAgICAgICAjICAweDM4IC0+IERJR0lUIEVJR0hUCisgICAgJzknICAgICAgICAgIyAgMHgzOSAtPiBESUdJVCBOSU5FCisgICAgJzonICAgICAgICAgIyAgMHgzQSAtPiBDT0xPTgorICAgICc7JyAgICAgICAgICMgIDB4M0IgLT4gU0VNSUNPTE9OCisgICAgJzwnICAgICAgICAgIyAgMHgzQyAtPiBMRVNTLVRIQU4gU0lHTgorICAgICc9JyAgICAgICAgICMgIDB4M0QgLT4gRVFVQUxTIFNJR04KKyAgICAnPicgICAgICAgICAjICAweDNFIC0+IEdSRUFURVItVEhBTiBTSUdOCisgICAgJz8nICAgICAgICAgIyAgMHgzRiAtPiBRVUVTVElPTiBNQVJLCisgICAgJ0AnICAgICAgICAgIyAgMHg0MCAtPiBDT01NRVJDSUFMIEFUCisgICAgJ0EnICAgICAgICAgIyAgMHg0MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgJ0InICAgICAgICAgIyAgMHg0MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgJ0MnICAgICAgICAgIyAgMHg0MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgJ0QnICAgICAgICAgIyAgMHg0NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgJ0UnICAgICAgICAgIyAgMHg0NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgJ0YnICAgICAgICAgIyAgMHg0NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgJ0cnICAgICAgICAgIyAgMHg0NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgJ0gnICAgICAgICAgIyAgMHg0OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgJ0knICAgICAgICAgIyAgMHg0OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgJ0onICAgICAgICAgIyAgMHg0QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgJ0snICAgICAgICAgIyAgMHg0QiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgJ0wnICAgICAgICAgIyAgMHg0QyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgJ00nICAgICAgICAgIyAgMHg0RCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgJ04nICAgICAgICAgIyAgMHg0RSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgJ08nICAgICAgICAgIyAgMHg0RiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1AnICAgICAgICAgIyAgMHg1MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgJ1EnICAgICAgICAgIyAgMHg1MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgJ1InICAgICAgICAgIyAgMHg1MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgJ1MnICAgICAgICAgIyAgMHg1MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgJ1QnICAgICAgICAgIyAgMHg1NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgJ1UnICAgICAgICAgIyAgMHg1NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1YnICAgICAgICAgIyAgMHg1NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgJ1cnICAgICAgICAgIyAgMHg1NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgJ1gnICAgICAgICAgIyAgMHg1OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgJ1knICAgICAgICAgIyAgMHg1OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgJ1onICAgICAgICAgIyAgMHg1QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgJ1snICAgICAgICAgIyAgMHg1QiAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1xcJyAgICAgICAgIyAgMHg1QyAtPiBSRVZFUlNFIFNPTElEVVMKKyAgICAnXScgICAgICAgICAjICAweDVEIC0+IFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgJ14nICAgICAgICAgIyAgMHg1RSAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgICdfJyAgICAgICAgICMgIDB4NUYgLT4gTE9XIExJTkUKKyAgICAnYCcgICAgICAgICAjICAweDYwIC0+IEdSQVZFIEFDQ0VOVAorICAgICdhJyAgICAgICAgICMgIDB4NjEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAnYicgICAgICAgICAjICAweDYyIC0+IExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgJ2MnICAgICAgICAgIyAgMHg2MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgICdkJyAgICAgICAgICMgIDB4NjQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAnZScgICAgICAgICAjICAweDY1IC0+IExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgJ2YnICAgICAgICAgIyAgMHg2NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgICdnJyAgICAgICAgICMgIDB4NjcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAnaCcgICAgICAgICAjICAweDY4IC0+IExBVElOIFNNQUxMIExFVFRFUiBICisgICAgJ2knICAgICAgICAgIyAgMHg2OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgICdqJyAgICAgICAgICMgIDB4NkEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAnaycgICAgICAgICAjICAweDZCIC0+IExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgJ2wnICAgICAgICAgIyAgMHg2QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgICdtJyAgICAgICAgICMgIDB4NkQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAnbicgICAgICAgICAjICAweDZFIC0+IExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgJ28nICAgICAgICAgIyAgMHg2RiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgICdwJyAgICAgICAgICMgIDB4NzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAncScgICAgICAgICAjICAweDcxIC0+IExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgJ3InICAgICAgICAgIyAgMHg3MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgICdzJyAgICAgICAgICMgIDB4NzMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAndCcgICAgICAgICAjICAweDc0IC0+IExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgJ3UnICAgICAgICAgIyAgMHg3NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgICd2JyAgICAgICAgICMgIDB4NzYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAndycgICAgICAgICAjICAweDc3IC0+IExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgJ3gnICAgICAgICAgIyAgMHg3OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgICd5JyAgICAgICAgICMgIDB4NzkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAneicgICAgICAgICAjICAweDdBIC0+IExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgJ3snICAgICAgICAgIyAgMHg3QiAtPiBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAnfCcgICAgICAgICAjICAweDdDIC0+IFZFUlRJQ0FMIExJTkUKKyAgICAnfScgICAgICAgICAjICAweDdEIC0+IFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAnficgICAgICAgICAjICAweDdFIC0+IFRJTERFCisgICAgJ1x4N2YnICAgICAgIyAgMHg3RiAtPiBERUxFVEUKKyAgICAnXHUwNDAyJyAgICAjICAweDgwIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIERKRQorICAgICdcdTA0MDMnICAgICMgIDB4ODEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0pFCisgICAgJ1x1MjAxYScgICAgIyAgMHg4MiAtPiBTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKKyAgICAnXHUwNDUzJyAgICAjICAweDgzIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBHSkUKKyAgICAnXHUyMDFlJyAgICAjICAweDg0IC0+IERPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworICAgICdcdTIwMjYnICAgICMgIDB4ODUgLT4gSE9SSVpPTlRBTCBFTExJUFNJUworICAgICdcdTIwMjAnICAgICMgIDB4ODYgLT4gREFHR0VSCisgICAgJ1x1MjAyMScgICAgIyAgMHg4NyAtPiBET1VCTEUgREFHR0VSCisgICAgJ1x1MjBhYycgICAgIyAgMHg4OCAtPiBFVVJPIFNJR04KKyAgICAnXHUyMDMwJyAgICAjICAweDg5IC0+IFBFUiBNSUxMRSBTSUdOCisgICAgJ1x1MDQwOScgICAgIyAgMHg4QSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBMSkUKKyAgICAnXHUyMDM5JyAgICAjICAweDhCIC0+IFNJTkdMRSBMRUZULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x1MDQwYScgICAgIyAgMHg4QyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBOSkUKKyAgICAnXHUwNDlhJyAgICAjICAweDhEIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBIFdJVEggREVTQ0VOREVSCisgICAgJ1x1MDRiYScgICAgIyAgMHg4RSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEhBCisgICAgJ1x1MDQwZicgICAgIyAgMHg4RiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBEWkhFCisgICAgJ1x1MDQ1MicgICAgIyAgMHg5MCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgREpFCisgICAgJ1x1MjAxOCcgICAgIyAgMHg5MSAtPiBMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSworICAgICdcdTIwMTknICAgICMgIDB4OTIgLT4gUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x1MjAxYycgICAgIyAgMHg5MyAtPiBMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSworICAgICdcdTIwMWQnICAgICMgIDB4OTQgLT4gUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x1MjAyMicgICAgIyAgMHg5NSAtPiBCVUxMRVQKKyAgICAnXHUyMDEzJyAgICAjICAweDk2IC0+IEVOIERBU0gKKyAgICAnXHUyMDE0JyAgICAjICAweDk3IC0+IEVNIERBU0gKKyAgICAnXHVmZmZlJyAgICAjICAweDk4IC0+IFVOREVGSU5FRAorICAgICdcdTIxMjInICAgICMgIDB4OTkgLT4gVFJBREUgTUFSSyBTSUdOCisgICAgJ1x1MDQ1OScgICAgIyAgMHg5QSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgTEpFCisgICAgJ1x1MjAzYScgICAgIyAgMHg5QiAtPiBTSU5HTEUgUklHSFQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHUwNDVhJyAgICAjICAweDlDIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBOSkUKKyAgICAnXHUwNDliJyAgICAjICAweDlEIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBLQSBXSVRIIERFU0NFTkRFUgorICAgICdcdTA0YmInICAgICMgIDB4OUUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNISEEKKyAgICAnXHUwNDVmJyAgICAjICAweDlGIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBEWkhFCisgICAgJ1x4YTAnICAgICAgIyAgMHhBMCAtPiBOTy1CUkVBSyBTUEFDRQorICAgICdcdTA0YjAnICAgICMgIDB4QTEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU1RSQUlHSFQgVSBXSVRIIFNUUk9LRQorICAgICdcdTA0YjEnICAgICMgIDB4QTIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNUUkFJR0hUIFUgV0lUSCBTVFJPS0UKKyAgICAnXHUwNGQ4JyAgICAjICAweEEzIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNDSFdBCisgICAgJ1x4YTQnICAgICAgIyAgMHhBNCAtPiBDVVJSRU5DWSBTSUdOCisgICAgJ1x1MDRlOCcgICAgIyAgMHhBNSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCQVJSRUQgTworICAgICdceGE2JyAgICAgICMgIDB4QTYgLT4gQlJPS0VOIEJBUgorICAgICdceGE3JyAgICAgICMgIDB4QTcgLT4gU0VDVElPTiBTSUdOCisgICAgJ1x1MDQwMScgICAgIyAgMHhBOCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJTworICAgICdceGE5JyAgICAgICMgIDB4QTkgLT4gQ09QWVJJR0hUIFNJR04KKyAgICAnXHUwNDkyJyAgICAjICAweEFBIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFNUUk9LRQorICAgICdceGFiJyAgICAgICMgIDB4QUIgLT4gTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHhhYycgICAgICAjICAweEFDIC0+IE5PVCBTSUdOCisgICAgJ1x4YWQnICAgICAgIyAgMHhBRCAtPiBTT0ZUIEhZUEhFTgorICAgICdceGFlJyAgICAgICMgIDB4QUUgLT4gUkVHSVNURVJFRCBTSUdOCisgICAgJ1x1MDRhZScgICAgIyAgMHhBRiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTVFJBSUdIVCBVCisgICAgJ1x4YjAnICAgICAgIyAgMHhCMCAtPiBERUdSRUUgU0lHTgorICAgICdceGIxJyAgICAgICMgIDB4QjEgLT4gUExVUy1NSU5VUyBTSUdOCisgICAgJ1x1MDQwNicgICAgIyAgMHhCMiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAnXHUwNDU2JyAgICAjICAweEIzIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAnXHUwNGU5JyAgICAjICAweEI0IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBCQVJSRUQgTworICAgICdceGI1JyAgICAgICMgIDB4QjUgLT4gTUlDUk8gU0lHTgorICAgICdceGI2JyAgICAgICMgIDB4QjYgLT4gUElMQ1JPVyBTSUdOCisgICAgJ1x4YjcnICAgICAgIyAgMHhCNyAtPiBNSURETEUgRE9UCisgICAgJ1x1MDQ1MScgICAgIyAgMHhCOCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKyAgICAnXHUyMTE2JyAgICAjICAweEI5IC0+IE5VTUVSTyBTSUdOCisgICAgJ1x1MDQ5MycgICAgIyAgMHhCQSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFIFdJVEggU1RST0tFCisgICAgJ1x4YmInICAgICAgIyAgMHhCQiAtPiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHUwNGQ5JyAgICAjICAweEJDIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTQ0hXQQorICAgICdcdTA0YTInICAgICMgIDB4QkQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4gV0lUSCBERVNDRU5ERVIKKyAgICAnXHUwNGEzJyAgICAjICAweEJFIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTiBXSVRIIERFU0NFTkRFUgorICAgICdcdTA0YWYnICAgICMgIDB4QkYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNUUkFJR0hUIFUKKyAgICAnXHUwNDEwJyAgICAjICAweEMwIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKyAgICAnXHUwNDExJyAgICAjICAweEMxIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCisgICAgJ1x1MDQxMicgICAgIyAgMHhDMiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorICAgICdcdTA0MTMnICAgICMgIDB4QzMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFCisgICAgJ1x1MDQxNCcgICAgIyAgMHhDNCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorICAgICdcdTA0MTUnICAgICMgIDB4QzUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyAgICAnXHUwNDE2JyAgICAjICAweEM2IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorICAgICdcdTA0MTcnICAgICMgIDB4QzcgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKyAgICAnXHUwNDE4JyAgICAjICAweEM4IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEkKKyAgICAnXHUwNDE5JyAgICAjICAweEM5IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIEkKKyAgICAnXHUwNDFhJyAgICAjICAweENBIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCisgICAgJ1x1MDQxYicgICAgIyAgMHhDQiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorICAgICdcdTA0MWMnICAgICMgIDB4Q0MgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU0KKyAgICAnXHUwNDFkJyAgICAjICAweENEIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCisgICAgJ1x1MDQxZScgICAgIyAgMHhDRSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1x1MDQxZicgICAgIyAgMHhDRiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorICAgICdcdTA0MjAnICAgICMgIDB4RDAgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyAgICAnXHUwNDIxJyAgICAjICAweEQxIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCisgICAgJ1x1MDQyMicgICAgIyAgMHhEMiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURQorICAgICdcdTA0MjMnICAgICMgIDB4RDMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorICAgICdcdTA0MjQnICAgICMgIDB4RDQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUYKKyAgICAnXHUwNDI1JyAgICAjICAweEQ1IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBCisgICAgJ1x1MDQyNicgICAgIyAgMHhENiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKKyAgICAnXHUwNDI3JyAgICAjICAweEQ3IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorICAgICdcdTA0MjgnICAgICMgIDB4RDggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCisgICAgJ1x1MDQyOScgICAgIyAgMHhEOSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorICAgICdcdTA0MmEnICAgICMgIDB4REEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCisgICAgJ1x1MDQyYicgICAgIyAgMHhEQiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVCisgICAgJ1x1MDQyYycgICAgIyAgMHhEQyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAnXHUwNDJkJyAgICAjICAweEREIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKyAgICAnXHUwNDJlJyAgICAjICAweERFIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlVCisgICAgJ1x1MDQyZicgICAgIyAgMHhERiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorICAgICdcdTA0MzAnICAgICMgIDB4RTAgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKyAgICAnXHUwNDMxJyAgICAjICAweEUxIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBCRQorICAgICdcdTA0MzInICAgICMgIDB4RTIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCisgICAgJ1x1MDQzMycgICAgIyAgMHhFMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCisgICAgJ1x1MDQzNCcgICAgIyAgMHhFNCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgREUKKyAgICAnXHUwNDM1JyAgICAjICAweEU1IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBJRQorICAgICdcdTA0MzYnICAgICMgIDB4RTYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorICAgICdcdTA0MzcnICAgICMgIDB4RTcgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisgICAgJ1x1MDQzOCcgICAgIyAgMHhFOCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorICAgICdcdTA0MzknICAgICMgIDB4RTkgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKKyAgICAnXHUwNDNhJyAgICAjICAweEVBIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorICAgICdcdTA0M2InICAgICMgIDB4RUIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMCisgICAgJ1x1MDQzYycgICAgIyAgMHhFQyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KKyAgICAnXHUwNDNkJyAgICAjICAweEVEIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTgorICAgICdcdTA0M2UnICAgICMgIDB4RUUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8KKyAgICAnXHUwNDNmJyAgICAjICAweEVGIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBQRQorICAgICdcdTA0NDAnICAgICMgIDB4RjAgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVSCisgICAgJ1x1MDQ0MScgICAgIyAgMHhGMSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKKyAgICAnXHUwNDQyJyAgICAjICAweEYyIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBURQorICAgICdcdTA0NDMnICAgICMgIDB4RjMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKKyAgICAnXHUwNDQ0JyAgICAjICAweEY0IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFRgorICAgICdcdTA0NDUnICAgICMgIDB4RjUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCisgICAgJ1x1MDQ0NicgICAgIyAgMHhGNiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCisgICAgJ1x1MDQ0NycgICAgIyAgMHhGNyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCisgICAgJ1x1MDQ0OCcgICAgIyAgMHhGOCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCisgICAgJ1x1MDQ0OScgICAgIyAgMHhGOSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hDSEEKKyAgICAnXHUwNDRhJyAgICAjICAweEZBIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KKyAgICAnXHUwNDRiJyAgICAjICAweEZCIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCisgICAgJ1x1MDQ0YycgICAgIyAgMHhGQyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCisgICAgJ1x1MDQ0ZCcgICAgIyAgMHhGRCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorICAgICdcdTA0NGUnICAgICMgIDB4RkUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCisgICAgJ1x1MDQ0ZicgICAgIyAgMHhGRiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKKykKKworIyMjIEVuY29kaW5nIHRhYmxlCitlbmNvZGluZ190YWJsZSA9IGNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy91dGZfMTYucHkgYi9MaWIvZW5jb2RpbmdzL3V0Zl8xNi5weQppbmRleCA4MDliYzlhLi5jNjEyNDgyIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3V0Zl8xNi5weQorKysgYi9MaWIvZW5jb2RpbmdzL3V0Zl8xNi5weQpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICBzZWxmLmRlY29kZXIgPSBOb25lCiAKICAgICBkZWYgZ2V0c3RhdGUoc2VsZik6Ci0gICAgICAgICMgYWRkaXRvbmFsIHN0YXRlIGluZm8gZnJvbSB0aGUgYmFzZSBjbGFzcyBtdXN0IGJlIE5vbmUgaGVyZSwKKyAgICAgICAgIyBhZGRpdGlvbmFsIHN0YXRlIGluZm8gZnJvbSB0aGUgYmFzZSBjbGFzcyBtdXN0IGJlIE5vbmUgaGVyZSwKICAgICAgICAgIyBhcyBpdCBpc24ndCBwYXNzZWQgYWxvbmcgdG8gdGhlIGNhbGxlcgogICAgICAgICBzdGF0ZSA9IGNvZGVjcy5CdWZmZXJlZEluY3JlbWVudGFsRGVjb2Rlci5nZXRzdGF0ZShzZWxmKVswXQogICAgICAgICAjIGFkZGl0aW9uYWwgc3RhdGUgaW5mbyB3ZSBwYXNzIHRvIHRoZSBjYWxsZXI6CmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3V0Zl8zMi5weSBiL0xpYi9lbmNvZGluZ3MvdXRmXzMyLnB5CmluZGV4IGMwNTI5MjguLmNkZjg0ZDEgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvdXRmXzMyLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvdXRmXzMyLnB5CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHNlbGYuZGVjb2RlciA9IE5vbmUKIAogICAgIGRlZiBnZXRzdGF0ZShzZWxmKToKLSAgICAgICAgIyBhZGRpdG9uYWwgc3RhdGUgaW5mbyBmcm9tIHRoZSBiYXNlIGNsYXNzIG11c3QgYmUgTm9uZSBoZXJlLAorICAgICAgICAjIGFkZGl0aW9uYWwgc3RhdGUgaW5mbyBmcm9tIHRoZSBiYXNlIGNsYXNzIG11c3QgYmUgTm9uZSBoZXJlLAogICAgICAgICAjIGFzIGl0IGlzbid0IHBhc3NlZCBhbG9uZyB0byB0aGUgY2FsbGVyCiAgICAgICAgIHN0YXRlID0gY29kZWNzLkJ1ZmZlcmVkSW5jcmVtZW50YWxEZWNvZGVyLmdldHN0YXRlKHNlbGYpWzBdCiAgICAgICAgICMgYWRkaXRpb25hbCBzdGF0ZSBpbmZvIHdlIHBhc3MgdG8gdGhlIGNhbGxlcjoKZGlmZiAtLWdpdCBhL0xpYi9lbnVtLnB5IGIvTGliL2VudW0ucHkKaW5kZXggN2NiOWQ0NS4uYjg3ODdkMSAxMDA2NDQKLS0tIGEvTGliL2VudW0ucHkKKysrIGIvTGliL2VudW0ucHkKQEAgLTEwNiwxMiArMTA2LDIwIEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIGVudW0gbWVtYmVyIG5hbWU6IHswfScuZm9ybWF0KAogICAgICAgICAgICAgICAgICcsJy5qb2luKGludmFsaWRfbmFtZXMpKSkKIAorICAgICAgICAjIGNyZWF0ZSBhIGRlZmF1bHQgZG9jc3RyaW5nIGlmIG9uZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQKKyAgICAgICAgaWYgJ19fZG9jX18nIG5vdCBpbiBjbGFzc2RpY3Q6CisgICAgICAgICAgICBjbGFzc2RpY3RbJ19fZG9jX18nXSA9ICdBbiBlbnVtZXJhdGlvbi4nCisKICAgICAgICAgIyBjcmVhdGUgb3VyIG5ldyBFbnVtIHR5cGUKICAgICAgICAgZW51bV9jbGFzcyA9IHN1cGVyKCkuX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpCiAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18gPSBbXSAgICAgICAgICAgICAgICMgbmFtZXMgaW4gZGVmaW5pdGlvbiBvcmRlcgogICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXyA9IE9yZGVyZWREaWN0KCkgICAgICAjIG5hbWUtPnZhbHVlIG1hcAogICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfdHlwZV8gPSBtZW1iZXJfdHlwZQogCisgICAgICAgICMgc2F2ZSBhdHRyaWJ1dGVzIGZyb20gc3VwZXIgY2xhc3NlcyBzbyB3ZSBrbm93IGlmIHdlIGNhbiB0YWtlCisgICAgICAgICMgdGhlIHNob3J0Y3V0IG9mIHN0b3JpbmcgbWVtYmVycyBpbiB0aGUgY2xhc3MgZGljdAorICAgICAgICBiYXNlX2F0dHJpYnV0ZXMgPSB7YSBmb3IgYiBpbiBlbnVtX2NsYXNzLm1ybygpIGZvciBhIGluIGIuX19kaWN0X199CisKICAgICAgICAgIyBSZXZlcnNlIHZhbHVlLT5uYW1lIG1hcCBmb3IgaGFzaGFibGUgdmFsdWVzLgogICAgICAgICBlbnVtX2NsYXNzLl92YWx1ZTJtZW1iZXJfbWFwXyA9IHt9CiAKQEAgLTE2NSw2ICsxNzMsMTEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBBbGlhc2VzIGRvbid0IGFwcGVhciBpbiBtZW1iZXIgbmFtZXMgKG9ubHkgaW4gX19tZW1iZXJzX18pLgogICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18uYXBwZW5kKG1lbWJlcl9uYW1lKQorICAgICAgICAgICAgIyBwZXJmb3JtYW5jZSBib29zdCBmb3IgYW55IG1lbWJlciB0aGF0IHdvdWxkIG5vdCBzaGFkb3cKKyAgICAgICAgICAgICMgYSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGlmIG1lbWJlcl9uYW1lIG5vdCBpbiBiYXNlX2F0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2V0YXR0cihlbnVtX2NsYXNzLCBtZW1iZXJfbmFtZSwgZW51bV9tZW1iZXIpCisgICAgICAgICAgICAjIG5vdyBhZGQgdG8gX21lbWJlcl9tYXBfCiAgICAgICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwX1ttZW1iZXJfbmFtZV0gPSBlbnVtX21lbWJlcgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgVGhpcyBtYXkgZmFpbCBpZiB2YWx1ZSBpcyBub3QgaGFzaGFibGUuIFdlIGNhbid0IGFkZCB0aGUgdmFsdWUKQEAgLTE5OSw3ICsyMTIsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgIGRlZiBfX2NhbGxfXyhjbHMsIHZhbHVlLCBuYW1lcz1Ob25lLCAqLCBtb2R1bGU9Tm9uZSwgcXVhbG5hbWU9Tm9uZSwgdHlwZT1Ob25lKToKKyAgICBkZWYgX19jYWxsX18oY2xzLCB2YWx1ZSwgbmFtZXM9Tm9uZSwgKiwgbW9kdWxlPU5vbmUsIHF1YWxuYW1lPU5vbmUsIHR5cGU9Tm9uZSwgc3RhcnQ9MSk6CiAgICAgICAgICIiIkVpdGhlciByZXR1cm5zIGFuIGV4aXN0aW5nIG1lbWJlciwgb3IgY3JlYXRlcyBhIG5ldyBlbnVtIGNsYXNzLgogCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYm90aCB3aGVuIGFuIGVudW0gY2xhc3MgaXMgZ2l2ZW4gYSB2YWx1ZSB0byBtYXRjaApAQCAtMjExLDcgKzIyNCw3IEBACiAgICAgICAgIGB2YWx1ZWAgd2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgbmV3IGNsYXNzLgogCiAgICAgICAgIGBuYW1lc2Agc2hvdWxkIGJlIGVpdGhlciBhIHN0cmluZyBvZiB3aGl0ZS1zcGFjZS9jb21tYSBkZWxpbWl0ZWQgbmFtZXMKLSAgICAgICAgKHZhbHVlcyB3aWxsIHN0YXJ0IGF0IDEpLCBvciBhbiBpdGVyYXRvci9tYXBwaW5nIG9mIG5hbWUsIHZhbHVlIHBhaXJzLgorICAgICAgICAodmFsdWVzIHdpbGwgc3RhcnQgYXQgYHN0YXJ0YCksIG9yIGFuIGl0ZXJhdG9yL21hcHBpbmcgb2YgbmFtZSwgdmFsdWUgcGFpcnMuCiAKICAgICAgICAgYG1vZHVsZWAgc2hvdWxkIGJlIHNldCB0byB0aGUgbW9kdWxlIHRoaXMgY2xhc3MgaXMgYmVpbmcgY3JlYXRlZCBpbjsKICAgICAgICAgaWYgaXQgaXMgbm90IHNldCwgYW4gYXR0ZW1wdCB0byBmaW5kIHRoYXQgbW9kdWxlIHdpbGwgYmUgbWFkZSwgYnV0IGlmCkBAIC0yMjcsNyArMjQwLDcgQEAKICAgICAgICAgaWYgbmFtZXMgaXMgTm9uZTogICMgc2ltcGxlIHZhbHVlIGxvb2t1cAogICAgICAgICAgICAgcmV0dXJuIGNscy5fX25ld19fKGNscywgdmFsdWUpCiAgICAgICAgICMgb3RoZXJ3aXNlLCBmdW5jdGlvbmFsIEFQSTogd2UncmUgY3JlYXRpbmcgYSBuZXcgRW51bSB0eXBlCi0gICAgICAgIHJldHVybiBjbHMuX2NyZWF0ZV8odmFsdWUsIG5hbWVzLCBtb2R1bGU9bW9kdWxlLCBxdWFsbmFtZT1xdWFsbmFtZSwgdHlwZT10eXBlKQorICAgICAgICByZXR1cm4gY2xzLl9jcmVhdGVfKHZhbHVlLCBuYW1lcywgbW9kdWxlPW1vZHVsZSwgcXVhbG5hbWU9cXVhbG5hbWUsIHR5cGU9dHlwZSwgc3RhcnQ9c3RhcnQpCiAKICAgICBkZWYgX19jb250YWluc19fKGNscywgbWVtYmVyKToKICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UobWVtYmVyLCBjbHMpIGFuZCBtZW1iZXIuX25hbWVfIGluIGNscy5fbWVtYmVyX21hcF8KQEAgLTI5OCwxNiArMzExLDE2IEBACiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignQ2Fubm90IHJlYXNzaWduIG1lbWJlcnMuJykKICAgICAgICAgc3VwZXIoKS5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKIAotICAgIGRlZiBfY3JlYXRlXyhjbHMsIGNsYXNzX25hbWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCBxdWFsbmFtZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgIGRlZiBfY3JlYXRlXyhjbHMsIGNsYXNzX25hbWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCBxdWFsbmFtZT1Ob25lLCB0eXBlPU5vbmUsIHN0YXJ0PTEpOgogICAgICAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IEVudW0gY2xhc3MuCiAKICAgICAgICAgYG5hbWVzYCBjYW4gYmU6CiAKICAgICAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIG1lbWJlciBuYW1lcywgc2VwYXJhdGVkIGVpdGhlciB3aXRoIHNwYWNlcyBvcgotICAgICAgICAgIGNvbW1hcy4gIFZhbHVlcyBhcmUgYXV0by1udW1iZXJlZCBmcm9tIDEuCi0gICAgICAgICogQW4gaXRlcmFibGUgb2YgbWVtYmVyIG5hbWVzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgICBjb21tYXMuICBWYWx1ZXMgYXJlIGluY3JlbWVudGVkIGJ5IDEgZnJvbSBgc3RhcnRgLgorICAgICAgICAqIEFuIGl0ZXJhYmxlIG9mIG1lbWJlciBuYW1lcy4gIFZhbHVlcyBhcmUgaW5jcmVtZW50ZWQgYnkgMSBmcm9tIGBzdGFydGAuCiAgICAgICAgICogQW4gaXRlcmFibGUgb2YgKG1lbWJlciBuYW1lLCB2YWx1ZSkgcGFpcnMuCi0gICAgICAgICogQSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lIC0+IHZhbHVlLgorICAgICAgICAqIEEgbWFwcGluZyBvZiBtZW1iZXIgbmFtZSAtPiB2YWx1ZSBwYWlycy4KIAogICAgICAgICAiIiIKICAgICAgICAgbWV0YWNscyA9IGNscy5fX2NsYXNzX18KQEAgLTMxOCw3ICszMzEsNyBAQAogICAgICAgICBpZiBpc2luc3RhbmNlKG5hbWVzLCBzdHIpOgogICAgICAgICAgICAgbmFtZXMgPSBuYW1lcy5yZXBsYWNlKCcsJywgJyAnKS5zcGxpdCgpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZXMsICh0dXBsZSwgbGlzdCkpIGFuZCBpc2luc3RhbmNlKG5hbWVzWzBdLCBzdHIpOgotICAgICAgICAgICAgbmFtZXMgPSBbKGUsIGkpIGZvciAoaSwgZSkgaW4gZW51bWVyYXRlKG5hbWVzLCAxKV0KKyAgICAgICAgICAgIG5hbWVzID0gWyhlLCBpKSBmb3IgKGksIGUpIGluIGVudW1lcmF0ZShuYW1lcywgc3RhcnQpXQogCiAgICAgICAgICMgSGVyZSwgbmFtZXMgaXMgZWl0aGVyIGFuIGl0ZXJhYmxlIG9mIChuYW1lLCB2YWx1ZSkgb3IgYSBtYXBwaW5nLgogICAgICAgICBmb3IgaXRlbSBpbiBuYW1lczoKQEAgLTQ3NCwxMCArNDg3LDkgQEAKICAgICAgICAgICAgICAgICBtCiAgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9fY2xhc3NfXy5tcm8oKQogICAgICAgICAgICAgICAgIGZvciBtIGluIGNscy5fX2RpY3RfXwotICAgICAgICAgICAgICAgIGlmIG1bMF0gIT0gJ18nCisgICAgICAgICAgICAgICAgaWYgbVswXSAhPSAnXycgYW5kIG0gbm90IGluIHNlbGYuX21lbWJlcl9tYXBfCiAgICAgICAgICAgICAgICAgXQotICAgICAgICByZXR1cm4gKFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3ZhbHVlJ10gKwotICAgICAgICAgICAgICAgIGFkZGVkX2JlaGF2aW9yKQorICAgICAgICByZXR1cm4gKFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXyddICsgYWRkZWRfYmVoYXZpb3IpCiAKICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CiAgICAgICAgICMgbWl4ZWQtaW4gRW51bXMgc2hvdWxkIHVzZSB0aGUgbWl4ZWQtaW4gdHlwZSdzIF9fZm9ybWF0X18sIG90aGVyd2lzZQpkaWZmIC0tZ2l0IGEvTGliL2ZpbGVpbnB1dC5weSBiL0xpYi9maWxlaW5wdXQucHkKaW5kZXggODFhNzU0NS4uZDJiNTIwNiAxMDA2NDQKLS0tIGEvTGliL2ZpbGVpbnB1dC5weQorKysgYi9MaWIvZmlsZWlucHV0LnB5CkBAIC02NCwxMyArNjQsNiBAQAogZGlzYWJsZWQgd2hlbiBzdGFuZGFyZCBpbnB1dCBpcyByZWFkLiAgWFhYIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCiBkb2VzIG5vdCB3b3JrIGZvciBNUy1ET1MgOCszIGZpbGVzeXN0ZW1zLgogCi1QZXJmb3JtYW5jZTogdGhpcyBtb2R1bGUgaXMgdW5mb3J0dW5hdGVseSBvbmUgb2YgdGhlIHNsb3dlciB3YXlzIG9mCi1wcm9jZXNzaW5nIGxhcmdlIG51bWJlcnMgb2YgaW5wdXQgbGluZXMuICBOZXZlcnRoZWxlc3MsIGEgc2lnbmlmaWNhbnQKLXNwZWVkLXVwIGhhcyBiZWVuIG9idGFpbmVkIGJ5IHVzaW5nIHJlYWRsaW5lcyhidWZzaXplKSBpbnN0ZWFkIG9mCi1yZWFkbGluZSgpLiAgQSBuZXcga2V5d29yZCBhcmd1bWVudCwgYnVmc2l6ZT1OLCBpcyBwcmVzZW50IG9uIHRoZQotaW5wdXQoKSBmdW5jdGlvbiBhbmQgdGhlIEZpbGVJbnB1dCgpIGNsYXNzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0Ci1idWZmZXIgc2l6ZS4KLQogWFhYIFBvc3NpYmxlIGFkZGl0aW9uczoKIAogLSBvcHRpb25hbCBnZXRvcHQgYXJndW1lbnQgcHJvY2Vzc2luZwpAQCAtODYsNiArNzksNyBAQAogCiBfc3RhdGUgPSBOb25lCiAKKyMgTm8gbG9uZ2VyIHVzZWQKIERFRkFVTFRfQlVGU0laRSA9IDgqMTAyNAogCiBkZWYgaW5wdXQoZmlsZXM9Tm9uZSwgaW5wbGFjZT1GYWxzZSwgYmFja3VwPSIiLCBidWZzaXplPTAsCkBAIC0yMDcsMTcgKzIwMSwxNCBAQAogICAgICAgICBzZWxmLl9maWxlcyA9IGZpbGVzCiAgICAgICAgIHNlbGYuX2lucGxhY2UgPSBpbnBsYWNlCiAgICAgICAgIHNlbGYuX2JhY2t1cCA9IGJhY2t1cAotICAgICAgICBzZWxmLl9idWZzaXplID0gYnVmc2l6ZSBvciBERUZBVUxUX0JVRlNJWkUKICAgICAgICAgc2VsZi5fc2F2ZXN0ZG91dCA9IE5vbmUKICAgICAgICAgc2VsZi5fb3V0cHV0ID0gTm9uZQogICAgICAgICBzZWxmLl9maWxlbmFtZSA9IE5vbmUKLSAgICAgICAgc2VsZi5fbGluZW5vID0gMAorICAgICAgICBzZWxmLl9zdGFydGxpbmVubyA9IDAKICAgICAgICAgc2VsZi5fZmlsZWxpbmVubyA9IDAKICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKICAgICAgICAgc2VsZi5faXNzdGRpbiA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2JhY2t1cGZpbGVuYW1lID0gTm9uZQotICAgICAgICBzZWxmLl9idWZmZXIgPSBbXQotICAgICAgICBzZWxmLl9idWZpbmRleCA9IDAKICAgICAgICAgIyByZXN0cmljdCBtb2RlIGFyZ3VtZW50IHRvIHJlYWRpbmcgbW9kZXMKICAgICAgICAgaWYgbW9kZSBub3QgaW4gKCdyJywgJ3JVJywgJ1UnLCAncmInKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkZpbGVJbnB1dCBvcGVuaW5nIG1vZGUgbXVzdCBiZSBvbmUgb2YgIgpAQCAtMjUzLDIyICsyNDQsMTggQEAKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGluZSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZpbmRleF0KLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9idWZpbmRleCArPSAxCi0gICAgICAgICAgICBzZWxmLl9saW5lbm8gKz0gMQotICAgICAgICAgICAgc2VsZi5fZmlsZWxpbmVubyArPSAxCi0gICAgICAgICAgICByZXR1cm4gbGluZQotICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgICAgICByZXR1cm4gbGluZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZWxpbmVubyArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlOgorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIHNlbGYubmV4dGZpbGUoKQorICAgICAgICAgICAgIyByZXBlYXQgd2l0aCBuZXh0IGZpbGUKIAogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKLSAgICAgICAgaWYgaSAhPSBzZWxmLl9saW5lbm86CisgICAgICAgIGlmIGkgIT0gc2VsZi5saW5lbm8oKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiYWNjZXNzaW5nIGxpbmVzIG91dCBvZiBvcmRlciIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fbmV4dF9fKCkKQEAgLTI3NywxMDggKzI2NCwxMDggQEAKIAogICAgIGRlZiBuZXh0ZmlsZShzZWxmKToKICAgICAgICAgc2F2ZXN0ZG91dCA9IHNlbGYuX3NhdmVzdGRvdXQKLSAgICAgICAgc2VsZi5fc2F2ZXN0ZG91dCA9IDAKKyAgICAgICAgc2VsZi5fc2F2ZXN0ZG91dCA9IE5vbmUKICAgICAgICAgaWYgc2F2ZXN0ZG91dDoKICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CiAKICAgICAgICAgb3V0cHV0ID0gc2VsZi5fb3V0cHV0Ci0gICAgICAgIHNlbGYuX291dHB1dCA9IDAKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gTm9uZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgb3V0cHV0LmNsb3NlKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9maWxlCi0gICAgICAgICAgICBzZWxmLl9maWxlID0gMAorICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fcmVhZGxpbmUgICMgcmVzdG9yZSBGaWxlSW5wdXQuX3JlYWRsaW5lCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlmIGZpbGUgYW5kIG5vdCBzZWxmLl9pc3N0ZGluOgogICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgYmFja3VwZmlsZW5hbWUgPSBzZWxmLl9iYWNrdXBmaWxlbmFtZQotICAgICAgICAgICAgICAgIHNlbGYuX2JhY2t1cGZpbGVuYW1lID0gMAorICAgICAgICAgICAgICAgIHNlbGYuX2JhY2t1cGZpbGVuYW1lID0gTm9uZQogICAgICAgICAgICAgICAgIGlmIGJhY2t1cGZpbGVuYW1lIGFuZCBub3Qgc2VsZi5fYmFja3VwOgogICAgICAgICAgICAgICAgICAgICB0cnk6IG9zLnVubGluayhiYWNrdXBmaWxlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKIAogICAgICAgICAgICAgICAgIHNlbGYuX2lzc3RkaW4gPSBGYWxzZQotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmaW5kZXggPSAwCiAKICAgICBkZWYgcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmaW5kZXhdCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fYnVmaW5kZXggKz0gMQotICAgICAgICAgICAgc2VsZi5fbGluZW5vICs9IDEKLSAgICAgICAgICAgIHNlbGYuX2ZpbGVsaW5lbm8gKz0gMQotICAgICAgICAgICAgcmV0dXJuIGxpbmUKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGU6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXM6Ci0gICAgICAgICAgICAgICAgaWYgJ2InIGluIHNlbGYuX21vZGU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiJycKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJycKLSAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1lID0gc2VsZi5fZmlsZXNbMF0KLSAgICAgICAgICAgIHNlbGYuX2ZpbGVzID0gc2VsZi5fZmlsZXNbMTpdCi0gICAgICAgICAgICBzZWxmLl9maWxlbGluZW5vID0gMAotICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuX2lzc3RkaW4gPSBGYWxzZQotICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAwCi0gICAgICAgICAgICBpZiBzZWxmLl9maWxlbmFtZSA9PSAnLSc6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5hbWUgPSAnPHN0ZGluPicKLSAgICAgICAgICAgICAgICBpZiAnYicgaW4gc2VsZi5fbW9kZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHN5cy5zdGRpbi5idWZmZXIKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gc3lzLnN0ZGluCi0gICAgICAgICAgICAgICAgc2VsZi5faXNzdGRpbiA9IFRydWUKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVsaW5lbm8gKz0gMQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAgICAgc2VsZi5uZXh0ZmlsZSgpCisgICAgICAgICAgICAjIHJlcGVhdCB3aXRoIG5leHQgZmlsZQorCisgICAgZGVmIF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzOgorICAgICAgICAgICAgaWYgJ2InIGluIHNlbGYuX21vZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGInJwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnBsYWNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9iYWNrdXBmaWxlbmFtZSA9ICgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1lICsgKHNlbGYuX2JhY2t1cCBvciAiLmJhayIpKQorICAgICAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBzZWxmLl9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzWzBdCisgICAgICAgIHNlbGYuX2ZpbGVzID0gc2VsZi5fZmlsZXNbMTpdCisgICAgICAgIHNlbGYuX3N0YXJ0bGluZW5vID0gc2VsZi5saW5lbm8oKQorICAgICAgICBzZWxmLl9maWxlbGluZW5vID0gMAorICAgICAgICBzZWxmLl9maWxlID0gTm9uZQorICAgICAgICBzZWxmLl9pc3N0ZGluID0gRmFsc2UKKyAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAwCisgICAgICAgIGlmIHNlbGYuX2ZpbGVuYW1lID09ICctJzoKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1lID0gJzxzdGRpbj4nCisgICAgICAgICAgICBpZiAnYicgaW4gc2VsZi5fbW9kZToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gZ2V0YXR0cihzeXMuc3RkaW4sICdidWZmZXInLCBzeXMuc3RkaW4pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBzeXMuc3RkaW4KKyAgICAgICAgICAgIHNlbGYuX2lzc3RkaW4gPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLl9pbnBsYWNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2JhY2t1cGZpbGVuYW1lID0gKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSArIChzZWxmLl9iYWNrdXAgb3IgIi5iYWsiKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9iYWNrdXBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICMgVGhlIG5leHQgZmV3IGxpbmVzIG1heSByYWlzZSBPU0Vycm9yCisgICAgICAgICAgICAgICAgb3MucmVuYW1lKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9iYWNrdXBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9iYWNrdXBmaWxlbmFtZSwgc2VsZi5fbW9kZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBlcm0gPSBvcy5mc3RhdChzZWxmLl9maWxlLmZpbGVubygpKS5zdF9tb2RlCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCA9IG9wZW4oc2VsZi5fZmlsZW5hbWUsICJ3IikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtb2RlID0gb3MuT19DUkVBVCB8IG9zLk9fV1JPTkxZIHwgb3MuT19UUlVOQworICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAnT19CSU5BUlknKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgfD0gb3MuT19CSU5BUlkKKworICAgICAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4oc2VsZi5fZmlsZW5hbWUsIG1vZGUsIHBlcm0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCA9IG9zLmZkb3BlbihmZCwgInciKQogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAnY2htb2QnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jaG1vZChzZWxmLl9maWxlbmFtZSwgcGVybSkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgICMgVGhlIG5leHQgZmV3IGxpbmVzIG1heSByYWlzZSBPU0Vycm9yCi0gICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzZWxmLl9maWxlbmFtZSwgc2VsZi5fYmFja3VwZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBvcGVuKHNlbGYuX2JhY2t1cGZpbGVuYW1lLCBzZWxmLl9tb2RlKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZXJtID0gb3MuZnN0YXQoc2VsZi5fZmlsZS5maWxlbm8oKSkuc3RfbW9kZQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCA9IG9wZW4oc2VsZi5fZmlsZW5hbWUsICJ3IikKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBvcy5PX0NSRUFUIHwgb3MuT19XUk9OTFkgfCBvcy5PX1RSVU5DCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAnT19CSU5BUlknKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlIHw9IG9zLk9fQklOQVJZCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZkID0gb3Mub3BlbihzZWxmLl9maWxlbmFtZSwgbW9kZSwgcGVybSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCA9IG9zLmZkb3BlbihmZCwgInciKQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICdjaG1vZCcpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jaG1vZChzZWxmLl9maWxlbmFtZSwgcGVybSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2F2ZXN0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX291dHB1dAorICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX291dHB1dAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIE9TRXJyb3IKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVuaG9vazoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHNlbGYuX29wZW5ob29rKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhpcyBtYXkgcmFpc2UgT1NFcnJvcgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVuaG9vazoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBzZWxmLl9vcGVuaG9vayhzZWxmLl9maWxlbmFtZSwgc2VsZi5fbW9kZSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBvcGVuKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9tb2RlKQotICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9maWxlLnJlYWRsaW5lcyhzZWxmLl9idWZzaXplKQotICAgICAgICBzZWxmLl9idWZpbmRleCA9IDAKLSAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKLSAgICAgICAgICAgIHNlbGYubmV4dGZpbGUoKQotICAgICAgICAjIFJlY3Vyc2l2ZSBjYWxsCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IG9wZW4oc2VsZi5fZmlsZW5hbWUsIHNlbGYuX21vZGUpCisgICAgICAgIHNlbGYuX3JlYWRsaW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSAgIyBoaWRlIEZpbGVJbnB1dC5fcmVhZGxpbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRsaW5lKCkKIAogICAgIGRlZiBmaWxlbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVuYW1lCiAKICAgICBkZWYgbGluZW5vKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbGluZW5vCisgICAgICAgIHJldHVybiBzZWxmLl9zdGFydGxpbmVubyArIHNlbGYuX2ZpbGVsaW5lbm8KIAogICAgIGRlZiBmaWxlbGluZW5vKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZWxpbmVubwpkaWZmIC0tZ2l0IGEvTGliL2Zvcm1hdHRlci5weSBiL0xpYi9mb3JtYXR0ZXIucHkKaW5kZXggOTMzODI2MS4uZTIzOTRkZSAxMDA2NDQKLS0tIGEvTGliL2Zvcm1hdHRlci5weQorKysgYi9MaWIvZm9ybWF0dGVyLnB5CkBAIC0yMCw4ICsyMCw4IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCB3YXJuaW5ncwotd2FybmluZ3Mud2FybigndGhlIGZvcm1hdHRlciBtb2R1bGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcKLSAgICAgICAgICAgICAgJ1B5dGhvbiAzLjYnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQord2FybmluZ3Mud2FybigndGhlIGZvcm1hdHRlciBtb2R1bGUgaXMgZGVwcmVjYXRlZCcsIERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgc3RhY2tsZXZlbD0yKQogCiAKIEFTX0lTID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL2ZyYWN0aW9ucy5weSBiL0xpYi9mcmFjdGlvbnMucHkKaW5kZXggNzllODNmZi4uNjBiMDcyOCAxMDA2NDQKLS0tIGEvTGliL2ZyYWN0aW9ucy5weQorKysgYi9MaWIvZnJhY3Rpb25zLnB5CkBAIC0yMCw2ICsyMCwxNyBAQAogICAgIFVubGVzcyBiPT0wLCB0aGUgcmVzdWx0IHdpbGwgaGF2ZSB0aGUgc2FtZSBzaWduIGFzIGIgKHNvIHRoYXQgd2hlbgogICAgIGIgaXMgZGl2aWRlZCBieSBpdCwgdGhlIHJlc3VsdCBjb21lcyBvdXQgcG9zaXRpdmUpLgogICAgICIiIgorICAgIGltcG9ydCB3YXJuaW5ncworICAgIHdhcm5pbmdzLndhcm4oJ2ZyYWN0aW9ucy5nY2QoKSBpcyBkZXByZWNhdGVkLiBVc2UgbWF0aC5nY2QoKSBpbnN0ZWFkLicsCisgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgaWYgdHlwZShhKSBpcyBpbnQgaXMgdHlwZShiKToKKyAgICAgICAgaWYgKGIgb3IgYSkgPCAwOgorICAgICAgICAgICAgcmV0dXJuIC1tYXRoLmdjZChhLCBiKQorICAgICAgICByZXR1cm4gbWF0aC5nY2QoYSwgYikKKyAgICByZXR1cm4gX2djZChhLCBiKQorCitkZWYgX2djZChhLCBiKToKKyAgICAjIFN1cHBvcnRzIG5vbi1pbnRlZ2VycyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAgICB3aGlsZSBiOgogICAgICAgICBhLCBiID0gYiwgYSViCiAgICAgcmV0dXJuIGEKQEAgLTcwLDcgKzgxLDcgQEAKICAgICBfX3Nsb3RzX18gPSAoJ19udW1lcmF0b3InLCAnX2Rlbm9taW5hdG9yJykKIAogICAgICMgV2UncmUgaW1tdXRhYmxlLCBzbyB1c2UgX19uZXdfXyBub3QgX19pbml0X18KLSAgICBkZWYgX19uZXdfXyhjbHMsIG51bWVyYXRvcj0wLCBkZW5vbWluYXRvcj1Ob25lKToKKyAgICBkZWYgX19uZXdfXyhjbHMsIG51bWVyYXRvcj0wLCBkZW5vbWluYXRvcj1Ob25lLCBfbm9ybWFsaXplPVRydWUpOgogICAgICAgICAiIiJDb25zdHJ1Y3RzIGEgUmF0aW9uYWwuCiAKICAgICAgICAgVGFrZXMgYSBzdHJpbmcgbGlrZSAnMy8yJyBvciAnMS41JywgYW5vdGhlciBSYXRpb25hbCBpbnN0YW5jZSwgYQpAQCAtMTA0LDcgKzExNSwxMiBAQAogICAgICAgICBzZWxmID0gc3VwZXIoRnJhY3Rpb24sIGNscykuX19uZXdfXyhjbHMpCiAKICAgICAgICAgaWYgZGVub21pbmF0b3IgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobnVtZXJhdG9yLCBudW1iZXJzLlJhdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHR5cGUobnVtZXJhdG9yKSBpcyBpbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5fbnVtZXJhdG9yID0gbnVtZXJhdG9yCisgICAgICAgICAgICAgICAgc2VsZi5fZGVub21pbmF0b3IgPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG51bWVyYXRvciwgbnVtYmVycy5SYXRpb25hbCk6CiAgICAgICAgICAgICAgICAgc2VsZi5fbnVtZXJhdG9yID0gbnVtZXJhdG9yLm51bWVyYXRvcgogICAgICAgICAgICAgICAgIHNlbGYuX2Rlbm9taW5hdG9yID0gbnVtZXJhdG9yLmRlbm9taW5hdG9yCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKQEAgLTE1Myw2ICsxNjksOSBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIGEgUmF0aW9uYWwgaW5zdGFuY2UiKQogCisgICAgICAgIGVsaWYgdHlwZShudW1lcmF0b3IpIGlzIGludCBpcyB0eXBlKGRlbm9taW5hdG9yKToKKyAgICAgICAgICAgIHBhc3MgIyAqdmVyeSogbm9ybWFsIGNhc2UKKwogICAgICAgICBlbGlmIChpc2luc3RhbmNlKG51bWVyYXRvciwgbnVtYmVycy5SYXRpb25hbCkgYW5kCiAgICAgICAgICAgICBpc2luc3RhbmNlKGRlbm9taW5hdG9yLCBudW1iZXJzLlJhdGlvbmFsKSk6CiAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yID0gKApAQCAtMTY1LDkgKzE4NCwxOCBAQAogCiAgICAgICAgIGlmIGRlbm9taW5hdG9yID09IDA6CiAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcignRnJhY3Rpb24oJXMsIDApJyAlIG51bWVyYXRvcikKLSAgICAgICAgZyA9IGdjZChudW1lcmF0b3IsIGRlbm9taW5hdG9yKQotICAgICAgICBzZWxmLl9udW1lcmF0b3IgPSBudW1lcmF0b3IgLy8gZwotICAgICAgICBzZWxmLl9kZW5vbWluYXRvciA9IGRlbm9taW5hdG9yIC8vIGcKKyAgICAgICAgaWYgX25vcm1hbGl6ZToKKyAgICAgICAgICAgIGlmIHR5cGUobnVtZXJhdG9yKSBpcyBpbnQgaXMgdHlwZShkZW5vbWluYXRvcik6CisgICAgICAgICAgICAgICAgIyAqdmVyeSogbm9ybWFsIGNhc2UKKyAgICAgICAgICAgICAgICBnID0gbWF0aC5nY2QobnVtZXJhdG9yLCBkZW5vbWluYXRvcikKKyAgICAgICAgICAgICAgICBpZiBkZW5vbWluYXRvciA8IDA6CisgICAgICAgICAgICAgICAgICAgIGcgPSAtZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBnID0gX2djZChudW1lcmF0b3IsIGRlbm9taW5hdG9yKQorICAgICAgICAgICAgbnVtZXJhdG9yIC8vPSBnCisgICAgICAgICAgICBkZW5vbWluYXRvciAvLz0gZworICAgICAgICBzZWxmLl9udW1lcmF0b3IgPSBudW1lcmF0b3IKKyAgICAgICAgc2VsZi5fZGVub21pbmF0b3IgPSBkZW5vbWluYXRvcgogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0yNzcsNyArMzA1LDggQEAKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgIiIicmVwcihzZWxmKSIiIgotICAgICAgICByZXR1cm4gKCdGcmFjdGlvbiglcywgJXMpJyAlIChzZWxmLl9udW1lcmF0b3IsIHNlbGYuX2Rlbm9taW5hdG9yKSkKKyAgICAgICAgcmV0dXJuICclcyglcywgJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9udW1lcmF0b3IsIHNlbGYuX2Rlbm9taW5hdG9yKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgICIiInN0cihzZWxmKSIiIgpAQCAtMzk1LDE3ICs0MjQsMTcgQEAKIAogICAgIGRlZiBfYWRkKGEsIGIpOgogICAgICAgICAiIiJhICsgYiIiIgotICAgICAgICByZXR1cm4gRnJhY3Rpb24oYS5udW1lcmF0b3IgKiBiLmRlbm9taW5hdG9yICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIubnVtZXJhdG9yICogYS5kZW5vbWluYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGEuZGVub21pbmF0b3IgKiBiLmRlbm9taW5hdG9yKQorICAgICAgICBkYSwgZGIgPSBhLmRlbm9taW5hdG9yLCBiLmRlbm9taW5hdG9yCisgICAgICAgIHJldHVybiBGcmFjdGlvbihhLm51bWVyYXRvciAqIGRiICsgYi5udW1lcmF0b3IgKiBkYSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhICogZGIpCiAKICAgICBfX2FkZF9fLCBfX3JhZGRfXyA9IF9vcGVyYXRvcl9mYWxsYmFja3MoX2FkZCwgb3BlcmF0b3IuYWRkKQogCiAgICAgZGVmIF9zdWIoYSwgYik6CiAgICAgICAgICIiImEgLSBiIiIiCi0gICAgICAgIHJldHVybiBGcmFjdGlvbihhLm51bWVyYXRvciAqIGIuZGVub21pbmF0b3IgLQotICAgICAgICAgICAgICAgICAgICAgICAgYi5udW1lcmF0b3IgKiBhLmRlbm9taW5hdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgYS5kZW5vbWluYXRvciAqIGIuZGVub21pbmF0b3IpCisgICAgICAgIGRhLCBkYiA9IGEuZGVub21pbmF0b3IsIGIuZGVub21pbmF0b3IKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uKGEubnVtZXJhdG9yICogZGIgLSBiLm51bWVyYXRvciAqIGRhLAorICAgICAgICAgICAgICAgICAgICAgICAgZGEgKiBkYikKIAogICAgIF9fc3ViX18sIF9fcnN1Yl9fID0gX29wZXJhdG9yX2ZhbGxiYWNrcyhfc3ViLCBvcGVyYXRvci5zdWIpCiAKQEAgLTQ1MywxMCArNDgyLDEyIEBACiAgICAgICAgICAgICAgICAgcG93ZXIgPSBiLm51bWVyYXRvcgogICAgICAgICAgICAgICAgIGlmIHBvd2VyID49IDA6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGcmFjdGlvbihhLl9udW1lcmF0b3IgKiogcG93ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLl9kZW5vbWluYXRvciAqKiBwb3dlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuX2Rlbm9taW5hdG9yICoqIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25vcm1hbGl6ZT1GYWxzZSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRnJhY3Rpb24oYS5fZGVub21pbmF0b3IgKiogLXBvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5fbnVtZXJhdG9yICoqIC1wb3dlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuX251bWVyYXRvciAqKiAtcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbm9ybWFsaXplPUZhbHNlKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIEEgZnJhY3Rpb25hbCBwb3dlciB3aWxsIGdlbmVyYWxseSBwcm9kdWNlIGFuCiAgICAgICAgICAgICAgICAgIyBpcnJhdGlvbmFsIG51bWJlci4KQEAgLTQ4MCwxNSArNTExLDE1IEBACiAKICAgICBkZWYgX19wb3NfXyhhKToKICAgICAgICAgIiIiK2E6IENvZXJjZXMgYSBzdWJjbGFzcyBpbnN0YW5jZSB0byBGcmFjdGlvbiIiIgotICAgICAgICByZXR1cm4gRnJhY3Rpb24oYS5fbnVtZXJhdG9yLCBhLl9kZW5vbWluYXRvcikKKyAgICAgICAgcmV0dXJuIEZyYWN0aW9uKGEuX251bWVyYXRvciwgYS5fZGVub21pbmF0b3IsIF9ub3JtYWxpemU9RmFsc2UpCiAKICAgICBkZWYgX19uZWdfXyhhKToKICAgICAgICAgIiIiLWEiIiIKLSAgICAgICAgcmV0dXJuIEZyYWN0aW9uKC1hLl9udW1lcmF0b3IsIGEuX2Rlbm9taW5hdG9yKQorICAgICAgICByZXR1cm4gRnJhY3Rpb24oLWEuX251bWVyYXRvciwgYS5fZGVub21pbmF0b3IsIF9ub3JtYWxpemU9RmFsc2UpCiAKICAgICBkZWYgX19hYnNfXyhhKToKICAgICAgICAgIiIiYWJzKGEpIiIiCi0gICAgICAgIHJldHVybiBGcmFjdGlvbihhYnMoYS5fbnVtZXJhdG9yKSwgYS5fZGVub21pbmF0b3IpCisgICAgICAgIHJldHVybiBGcmFjdGlvbihhYnMoYS5fbnVtZXJhdG9yKSwgYS5fZGVub21pbmF0b3IsIF9ub3JtYWxpemU9RmFsc2UpCiAKICAgICBkZWYgX190cnVuY19fKGEpOgogICAgICAgICAiIiJ0cnVuYyhhKSIiIgpAQCAtNTU1LDYgKzU4Niw4IEBACiAKICAgICBkZWYgX19lcV9fKGEsIGIpOgogICAgICAgICAiIiJhID09IGIiIiIKKyAgICAgICAgaWYgdHlwZShiKSBpcyBpbnQ6CisgICAgICAgICAgICByZXR1cm4gYS5fbnVtZXJhdG9yID09IGIgYW5kIGEuX2Rlbm9taW5hdG9yID09IDEKICAgICAgICAgaWYgaXNpbnN0YW5jZShiLCBudW1iZXJzLlJhdGlvbmFsKToKICAgICAgICAgICAgIHJldHVybiAoYS5fbnVtZXJhdG9yID09IGIubnVtZXJhdG9yIGFuZAogICAgICAgICAgICAgICAgICAgICBhLl9kZW5vbWluYXRvciA9PSBiLmRlbm9taW5hdG9yKQpkaWZmIC0tZ2l0IGEvTGliL2Z0cGxpYi5weSBiL0xpYi9mdHBsaWIucHkKaW5kZXggMWQzYmQ5ZS4uYzQxNmQ4NSAxMDA2NDQKLS0tIGEvTGliL2Z0cGxpYi5weQorKysgYi9MaWIvZnRwbGliLnB5CkBAIC00Miw3ICs0Miw3IEBACiBpbXBvcnQgd2FybmluZ3MKIGZyb20gc29ja2V0IGltcG9ydCBfR0xPQkFMX0RFRkFVTFRfVElNRU9VVAogCi1fX2FsbF9fID0gWyJGVFAiLCAiTmV0cmMiXQorX19hbGxfXyA9IFsiRlRQIl0KIAogIyBNYWdpYyBudW1iZXIgZnJvbSA8c29ja2V0Lmg+CiBNU0dfT09CID0gMHgxICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm9jZXNzIGRhdGEgb3V0IG9mIGJhbmQKQEAgLTkyMywxMTUgKzkyMyw2IEBACiAgICAgdGFyZ2V0LnZvaWRyZXNwKCkKIAogCi1jbGFzcyBOZXRyYzoKLSAgICAiIiJDbGFzcyB0byBwYXJzZSAmIHByb3ZpZGUgYWNjZXNzIHRvICduZXRyYycgZm9ybWF0IGZpbGVzLgotCi0gICAgU2VlIHRoZSBuZXRyYyg0KSBtYW4gcGFnZSBmb3IgaW5mb3JtYXRpb24gb24gdGhlIGZpbGUgZm9ybWF0LgotCi0gICAgV0FSTklORzogVGhpcyBjbGFzcyBpcyBvYnNvbGV0ZSAtLSB1c2UgbW9kdWxlIG5ldHJjIGluc3RlYWQuCi0KLSAgICAiIiIKLSAgICBfX2RlZnVzZXIgPSBOb25lCi0gICAgX19kZWZwYXNzd2QgPSBOb25lCi0gICAgX19kZWZhY2N0ID0gTm9uZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgotICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbmV0cmMgbW9kdWxlIGluc3RlYWQiLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICAgICAgaWYgZmlsZW5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIGlmICJIT01FIiBpbiBvcy5lbnZpcm9uOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIkhPTUUiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLm5ldHJjIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic3BlY2lmeSBmaWxlIHRvIGxvYWQgb3Igc2V0ICRIT01FIikKLSAgICAgICAgc2VsZi5fX2hvc3RzID0ge30KLSAgICAgICAgc2VsZi5fX21hY3JvcyA9IHt9Ci0gICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInIiKQotICAgICAgICBpbl9tYWNybyA9IDAKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgaW5fbWFjcm8gYW5kIGxpbmUuc3RyaXAoKToKLSAgICAgICAgICAgICAgICBtYWNyb19saW5lcy5hcHBlbmQobGluZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxpZiBpbl9tYWNybzoKLSAgICAgICAgICAgICAgICBzZWxmLl9fbWFjcm9zW21hY3JvX25hbWVdID0gdHVwbGUobWFjcm9fbGluZXMpCi0gICAgICAgICAgICAgICAgaW5fbWFjcm8gPSAwCi0gICAgICAgICAgICB3b3JkcyA9IGxpbmUuc3BsaXQoKQotICAgICAgICAgICAgaG9zdCA9IHVzZXIgPSBwYXNzd2QgPSBhY2N0ID0gTm9uZQotICAgICAgICAgICAgZGVmYXVsdCA9IDAKLSAgICAgICAgICAgIGkgPSAwCi0gICAgICAgICAgICB3aGlsZSBpIDwgbGVuKHdvcmRzKToKLSAgICAgICAgICAgICAgICB3MSA9IHdvcmRzW2ldCi0gICAgICAgICAgICAgICAgaWYgaSsxIDwgbGVuKHdvcmRzKToKLSAgICAgICAgICAgICAgICAgICAgdzIgPSB3b3Jkc1tpICsgMV0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB3MiA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiB3MSA9PSAnZGVmYXVsdCc6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSAxCi0gICAgICAgICAgICAgICAgZWxpZiB3MSA9PSAnbWFjaGluZScgYW5kIHcyOgotICAgICAgICAgICAgICAgICAgICBob3N0ID0gdzIubG93ZXIoKQotICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKLSAgICAgICAgICAgICAgICBlbGlmIHcxID09ICdsb2dpbicgYW5kIHcyOgotICAgICAgICAgICAgICAgICAgICB1c2VyID0gdzIKLSAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgICAgICAgICAgICAgZWxpZiB3MSA9PSAncGFzc3dvcmQnIGFuZCB3MjoKLSAgICAgICAgICAgICAgICAgICAgcGFzc3dkID0gdzIKLSAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgICAgICAgICAgICAgZWxpZiB3MSA9PSAnYWNjb3VudCcgYW5kIHcyOgotICAgICAgICAgICAgICAgICAgICBhY2N0ID0gdzIKLSAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgICAgICAgICAgICAgZWxpZiB3MSA9PSAnbWFjZGVmJyBhbmQgdzI6Ci0gICAgICAgICAgICAgICAgICAgIG1hY3JvX25hbWUgPSB3MgotICAgICAgICAgICAgICAgICAgICBtYWNyb19saW5lcyA9IFtdCi0gICAgICAgICAgICAgICAgICAgIGluX21hY3JvID0gMQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGkgPSBpICsgMQotICAgICAgICAgICAgaWYgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBzZWxmLl9fZGVmdXNlciA9IHVzZXIgb3Igc2VsZi5fX2RlZnVzZXIKLSAgICAgICAgICAgICAgICBzZWxmLl9fZGVmcGFzc3dkID0gcGFzc3dkIG9yIHNlbGYuX19kZWZwYXNzd2QKLSAgICAgICAgICAgICAgICBzZWxmLl9fZGVmYWNjdCA9IGFjY3Qgb3Igc2VsZi5fX2RlZmFjY3QKLSAgICAgICAgICAgIGlmIGhvc3Q6Ci0gICAgICAgICAgICAgICAgaWYgaG9zdCBpbiBzZWxmLl9faG9zdHM6Ci0gICAgICAgICAgICAgICAgICAgIG91c2VyLCBvcGFzc3dkLCBvYWNjdCA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19ob3N0c1tob3N0XQotICAgICAgICAgICAgICAgICAgICB1c2VyID0gdXNlciBvciBvdXNlcgotICAgICAgICAgICAgICAgICAgICBwYXNzd2QgPSBwYXNzd2Qgb3Igb3Bhc3N3ZAotICAgICAgICAgICAgICAgICAgICBhY2N0ID0gYWNjdCBvciBvYWNjdAotICAgICAgICAgICAgICAgIHNlbGYuX19ob3N0c1tob3N0XSA9IHVzZXIsIHBhc3N3ZCwgYWNjdAotICAgICAgICBmcC5jbG9zZSgpCi0KLSAgICBkZWYgZ2V0X2hvc3RzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGhvc3RzIG1lbnRpb25lZCBpbiB0aGUgLm5ldHJjIGZpbGUuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9faG9zdHMua2V5cygpCi0KLSAgICBkZWYgZ2V0X2FjY291bnQoc2VsZiwgaG9zdCk6Ci0gICAgICAgICIiIlJldHVybnMgbG9naW4gaW5mb3JtYXRpb24gZm9yIHRoZSBuYW1lZCBob3N0LgotCi0gICAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSB0cmlwbGUgY29udGFpbmluZyB1c2VyaWQsCi0gICAgICAgIHBhc3N3b3JkLCBhbmQgdGhlIGFjY291bnRpbmcgZmllbGQuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGhvc3QgPSBob3N0Lmxvd2VyKCkKLSAgICAgICAgdXNlciA9IHBhc3N3ZCA9IGFjY3QgPSBOb25lCi0gICAgICAgIGlmIGhvc3QgaW4gc2VsZi5fX2hvc3RzOgotICAgICAgICAgICAgdXNlciwgcGFzc3dkLCBhY2N0ID0gc2VsZi5fX2hvc3RzW2hvc3RdCi0gICAgICAgIHVzZXIgPSB1c2VyIG9yIHNlbGYuX19kZWZ1c2VyCi0gICAgICAgIHBhc3N3ZCA9IHBhc3N3ZCBvciBzZWxmLl9fZGVmcGFzc3dkCi0gICAgICAgIGFjY3QgPSBhY2N0IG9yIHNlbGYuX19kZWZhY2N0Ci0gICAgICAgIHJldHVybiB1c2VyLCBwYXNzd2QsIGFjY3QKLQotICAgIGRlZiBnZXRfbWFjcm9zKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGFsbCBkZWZpbmVkIG1hY3JvIG5hbWVzLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fX21hY3Jvcy5rZXlzKCkKLQotICAgIGRlZiBnZXRfbWFjcm8oc2VsZiwgbWFjcm8pOgotICAgICAgICAiIiJSZXR1cm4gYSBzZXF1ZW5jZSBvZiBsaW5lcyB3aGljaCBkZWZpbmUgYSBuYW1lZCBtYWNyby4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX19tYWNyb3NbbWFjcm9dCi0KLQotCiBkZWYgdGVzdCgpOgogICAgICcnJ1Rlc3QgcHJvZ3JhbS4KICAgICBVc2FnZTogZnRwIFstZF0gWy1yW2ZpbGVdXSBob3N0IFstbFtkaXJdXSBbLWRbZGlyXV0gWy1wXSBbZmlsZV0gLi4uCkBAIC0xMDQ1LDYgKzkzNiw4IEBACiAgICAgICAgIHByaW50KHRlc3QuX19kb2NfXykKICAgICAgICAgc3lzLmV4aXQoMCkKIAorICAgIGltcG9ydCBuZXRyYworCiAgICAgZGVidWdnaW5nID0gMAogICAgIHJjZmlsZSA9IE5vbmUKICAgICB3aGlsZSBzeXMuYXJndlsxXSA9PSAnLWQnOgpAQCAtMTA1OSwxNCArOTUyLDE0IEBACiAgICAgZnRwLnNldF9kZWJ1Z2xldmVsKGRlYnVnZ2luZykKICAgICB1c2VyaWQgPSBwYXNzd2QgPSBhY2N0ID0gJycKICAgICB0cnk6Ci0gICAgICAgIG5ldHJjID0gTmV0cmMocmNmaWxlKQorICAgICAgICBuZXRyY29iaiA9IG5ldHJjLm5ldHJjKHJjZmlsZSkKICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgcmNmaWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ291bGQgbm90IG9wZW4gYWNjb3VudCBmaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0tIHVzaW5nIGFub255bW91cyBsb2dpbi4iKQogICAgIGVsc2U6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHVzZXJpZCwgcGFzc3dkLCBhY2N0ID0gbmV0cmMuZ2V0X2FjY291bnQoaG9zdCkKKyAgICAgICAgICAgIHVzZXJpZCwgYWNjdCwgcGFzc3dkID0gbmV0cmNvYmouYXV0aGVudGljYXRvcnMoaG9zdCkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgIyBubyBhY2NvdW50IGZvciBob3N0CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKApkaWZmIC0tZ2l0IGEvTGliL2Z1bmN0b29scy5weSBiL0xpYi9mdW5jdG9vbHMucHkKaW5kZXggMmMyOTlkNy4uMjE0NTIzYyAxMDA2NDQKLS0tIGEvTGliL2Z1bmN0b29scy5weQorKysgYi9MaWIvZnVuY3Rvb2xzLnB5CkBAIC0yMyw3ICsyMyw3IEBACiBmcm9tIHdlYWtyZWYgaW1wb3J0IFdlYWtLZXlEaWN0aW9uYXJ5CiB0cnk6CiAgICAgZnJvbSBfdGhyZWFkIGltcG9ydCBSTG9jawotZXhjZXB0OgorZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGNsYXNzIFJMb2NrOgogICAgICAgICAnRHVtbXkgcmVlbnRyYW50IGxvY2sgZm9yIGJ1aWxkcyB3aXRob3V0IHRocmVhZHMnCiAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6IHBhc3MKQEAgLTk0LDEwOCArOTQsMTA5IEBACiAjIGluZmluaXRlIHJlY3Vyc2lvbiB0aGF0IGNvdWxkIG9jY3VyIHdoZW4gdGhlIG9wZXJhdG9yIGRpc3BhdGNoIGxvZ2ljCiAjIGRldGVjdHMgYSBOb3RJbXBsZW1lbnRlZCByZXN1bHQgYW5kIHRoZW4gY2FsbHMgYSByZWZsZWN0ZWQgbWV0aG9kLgogCi1kZWYgX2d0X2Zyb21fbHQoc2VsZiwgb3RoZXIpOgorZGVmIF9ndF9mcm9tX2x0KHNlbGYsIG90aGVyLCBOb3RJbXBsZW1lbnRlZD1Ob3RJbXBsZW1lbnRlZCk6CiAgICAgJ1JldHVybiBhID4gYi4gIENvbXB1dGVkIGJ5IEB0b3RhbF9vcmRlcmluZyBmcm9tIChub3QgYSA8IGIpIGFuZCAoYSAhPSBiKS4nCiAgICAgb3BfcmVzdWx0ID0gc2VsZi5fX2x0X18ob3RoZXIpCiAgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG9wX3Jlc3VsdAogICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCiAKLWRlZiBfbGVfZnJvbV9sdChzZWxmLCBvdGhlcik6CitkZWYgX2xlX2Zyb21fbHQoc2VsZiwgb3RoZXIsIE5vdEltcGxlbWVudGVkPU5vdEltcGxlbWVudGVkKToKICAgICAnUmV0dXJuIGEgPD0gYi4gIENvbXB1dGVkIGJ5IEB0b3RhbF9vcmRlcmluZyBmcm9tIChhIDwgYikgb3IgKGEgPT0gYikuJwogICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19sdF9fKG90aGVyKQogICAgIHJldHVybiBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgogCi1kZWYgX2dlX2Zyb21fbHQoc2VsZiwgb3RoZXIpOgorZGVmIF9nZV9mcm9tX2x0KHNlbGYsIG90aGVyLCBOb3RJbXBsZW1lbnRlZD1Ob3RJbXBsZW1lbnRlZCk6CiAgICAgJ1JldHVybiBhID49IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPCBiKS4nCiAgICAgb3BfcmVzdWx0ID0gc2VsZi5fX2x0X18ob3RoZXIpCiAgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG9wX3Jlc3VsdAogICAgIHJldHVybiBub3Qgb3BfcmVzdWx0CiAKLWRlZiBfZ2VfZnJvbV9sZShzZWxmLCBvdGhlcik6CitkZWYgX2dlX2Zyb21fbGUoc2VsZiwgb3RoZXIsIE5vdEltcGxlbWVudGVkPU5vdEltcGxlbWVudGVkKToKICAgICAnUmV0dXJuIGEgPj0gYi4gIENvbXB1dGVkIGJ5IEB0b3RhbF9vcmRlcmluZyBmcm9tIChub3QgYSA8PSBiKSBvciAoYSA9PSBiKS4nCiAgICAgb3BfcmVzdWx0ID0gc2VsZi5fX2xlX18ob3RoZXIpCiAgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG9wX3Jlc3VsdAogICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IG9yIHNlbGYgPT0gb3RoZXIKIAotZGVmIF9sdF9mcm9tX2xlKHNlbGYsIG90aGVyKToKK2RlZiBfbHRfZnJvbV9sZShzZWxmLCBvdGhlciwgTm90SW1wbGVtZW50ZWQ9Tm90SW1wbGVtZW50ZWQpOgogICAgICdSZXR1cm4gYSA8IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA8PSBiKSBhbmQgKGEgIT0gYikuJwogICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19sZV9fKG90aGVyKQogICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBvcF9yZXN1bHQKICAgICByZXR1cm4gb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCiAKLWRlZiBfZ3RfZnJvbV9sZShzZWxmLCBvdGhlcik6CitkZWYgX2d0X2Zyb21fbGUoc2VsZiwgb3RoZXIsIE5vdEltcGxlbWVudGVkPU5vdEltcGxlbWVudGVkKToKICAgICAnUmV0dXJuIGEgPiBiLiAgQ29tcHV0ZWQgYnkgQHRvdGFsX29yZGVyaW5nIGZyb20gKG5vdCBhIDw9IGIpLicKICAgICBvcF9yZXN1bHQgPSBzZWxmLl9fbGVfXyhvdGhlcikKICAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gb3BfcmVzdWx0CiAgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQKIAotZGVmIF9sdF9mcm9tX2d0KHNlbGYsIG90aGVyKToKK2RlZiBfbHRfZnJvbV9ndChzZWxmLCBvdGhlciwgTm90SW1wbGVtZW50ZWQ9Tm90SW1wbGVtZW50ZWQpOgogICAgICdSZXR1cm4gYSA8IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPiBiKSBhbmQgKGEgIT0gYikuJwogICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19ndF9fKG90aGVyKQogICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBvcF9yZXN1bHQKICAgICByZXR1cm4gbm90IG9wX3Jlc3VsdCBhbmQgc2VsZiAhPSBvdGhlcgogCi1kZWYgX2dlX2Zyb21fZ3Qoc2VsZiwgb3RoZXIpOgorZGVmIF9nZV9mcm9tX2d0KHNlbGYsIG90aGVyLCBOb3RJbXBsZW1lbnRlZD1Ob3RJbXBsZW1lbnRlZCk6CiAgICAgJ1JldHVybiBhID49IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA+IGIpIG9yIChhID09IGIpLicKICAgICBvcF9yZXN1bHQgPSBzZWxmLl9fZ3RfXyhvdGhlcikKICAgICByZXR1cm4gb3BfcmVzdWx0IG9yIHNlbGYgPT0gb3RoZXIKIAotZGVmIF9sZV9mcm9tX2d0KHNlbGYsIG90aGVyKToKK2RlZiBfbGVfZnJvbV9ndChzZWxmLCBvdGhlciwgTm90SW1wbGVtZW50ZWQ9Tm90SW1wbGVtZW50ZWQpOgogICAgICdSZXR1cm4gYSA8PSBiLiAgQ29tcHV0ZWQgYnkgQHRvdGFsX29yZGVyaW5nIGZyb20gKG5vdCBhID4gYikuJwogICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19ndF9fKG90aGVyKQogICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBvcF9yZXN1bHQKICAgICByZXR1cm4gbm90IG9wX3Jlc3VsdAogCi1kZWYgX2xlX2Zyb21fZ2Uoc2VsZiwgb3RoZXIpOgorZGVmIF9sZV9mcm9tX2dlKHNlbGYsIG90aGVyLCBOb3RJbXBsZW1lbnRlZD1Ob3RJbXBsZW1lbnRlZCk6CiAgICAgJ1JldHVybiBhIDw9IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPj0gYikgb3IgKGEgPT0gYikuJwogICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19nZV9fKG90aGVyKQogICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBvcF9yZXN1bHQKICAgICByZXR1cm4gbm90IG9wX3Jlc3VsdCBvciBzZWxmID09IG90aGVyCiAKLWRlZiBfZ3RfZnJvbV9nZShzZWxmLCBvdGhlcik6CitkZWYgX2d0X2Zyb21fZ2Uoc2VsZiwgb3RoZXIsIE5vdEltcGxlbWVudGVkPU5vdEltcGxlbWVudGVkKToKICAgICAnUmV0dXJuIGEgPiBiLiAgQ29tcHV0ZWQgYnkgQHRvdGFsX29yZGVyaW5nIGZyb20gKGEgPj0gYikgYW5kIChhICE9IGIpLicKICAgICBvcF9yZXN1bHQgPSBzZWxmLl9fZ2VfXyhvdGhlcikKICAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gb3BfcmVzdWx0CiAgICAgcmV0dXJuIG9wX3Jlc3VsdCBhbmQgc2VsZiAhPSBvdGhlcgogCi1kZWYgX2x0X2Zyb21fZ2Uoc2VsZiwgb3RoZXIpOgorZGVmIF9sdF9mcm9tX2dlKHNlbGYsIG90aGVyLCBOb3RJbXBsZW1lbnRlZD1Ob3RJbXBsZW1lbnRlZCk6CiAgICAgJ1JldHVybiBhIDwgYi4gIENvbXB1dGVkIGJ5IEB0b3RhbF9vcmRlcmluZyBmcm9tIChub3QgYSA+PSBiKS4nCiAgICAgb3BfcmVzdWx0ID0gc2VsZi5fX2dlX18ob3RoZXIpCiAgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG9wX3Jlc3VsdAogICAgIHJldHVybiBub3Qgb3BfcmVzdWx0CiAKK19jb252ZXJ0ID0geworICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBfZ3RfZnJvbV9sdCksCisgICAgICAgICAgICAgICAoJ19fbGVfXycsIF9sZV9mcm9tX2x0KSwKKyAgICAgICAgICAgICAgICgnX19nZV9fJywgX2dlX2Zyb21fbHQpXSwKKyAgICAnX19sZV9fJzogWygnX19nZV9fJywgX2dlX2Zyb21fbGUpLAorICAgICAgICAgICAgICAgKCdfX2x0X18nLCBfbHRfZnJvbV9sZSksCisgICAgICAgICAgICAgICAoJ19fZ3RfXycsIF9ndF9mcm9tX2xlKV0sCisgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIF9sdF9mcm9tX2d0KSwKKyAgICAgICAgICAgICAgICgnX19nZV9fJywgX2dlX2Zyb21fZ3QpLAorICAgICAgICAgICAgICAgKCdfX2xlX18nLCBfbGVfZnJvbV9ndCldLAorICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBfbGVfZnJvbV9nZSksCisgICAgICAgICAgICAgICAoJ19fZ3RfXycsIF9ndF9mcm9tX2dlKSwKKyAgICAgICAgICAgICAgICgnX19sdF9fJywgX2x0X2Zyb21fZ2UpXQorfQorCiBkZWYgdG90YWxfb3JkZXJpbmcoY2xzKToKICAgICAiIiJDbGFzcyBkZWNvcmF0b3IgdGhhdCBmaWxscyBpbiBtaXNzaW5nIG9yZGVyaW5nIG1ldGhvZHMiIiIKLSAgICBjb252ZXJ0ID0gewotICAgICAgICAnX19sdF9fJzogWygnX19ndF9fJywgX2d0X2Zyb21fbHQpLAotICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgX2xlX2Zyb21fbHQpLAotICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgX2dlX2Zyb21fbHQpXSwKLSAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIF9nZV9mcm9tX2xlKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIF9sdF9mcm9tX2xlKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIF9ndF9mcm9tX2xlKV0sCi0gICAgICAgICdfX2d0X18nOiBbKCdfX2x0X18nLCBfbHRfZnJvbV9ndCksCi0gICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBfZ2VfZnJvbV9ndCksCi0gICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBfbGVfZnJvbV9ndCldLAotICAgICAgICAnX19nZV9fJzogWygnX19sZV9fJywgX2xlX2Zyb21fZ2UpLAotICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgX2d0X2Zyb21fZ2UpLAotICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgX2x0X2Zyb21fZ2UpXQotICAgIH0KICAgICAjIEZpbmQgdXNlci1kZWZpbmVkIGNvbXBhcmlzb25zIChub3QgdGhvc2UgaW5oZXJpdGVkIGZyb20gb2JqZWN0KS4KLSAgICByb290cyA9IFtvcCBmb3Igb3AgaW4gY29udmVydCBpZiBnZXRhdHRyKGNscywgb3AsIE5vbmUpIGlzIG5vdCBnZXRhdHRyKG9iamVjdCwgb3AsIE5vbmUpXQorICAgIHJvb3RzID0gW29wIGZvciBvcCBpbiBfY29udmVydCBpZiBnZXRhdHRyKGNscywgb3AsIE5vbmUpIGlzIG5vdCBnZXRhdHRyKG9iamVjdCwgb3AsIE5vbmUpXQogICAgIGlmIG5vdCByb290czoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIG9yZGVyaW5nIG9wZXJhdGlvbjogPCA+IDw9ID49JykKICAgICByb290ID0gbWF4KHJvb3RzKSAgICAgICAjIHByZWZlciBfX2x0X18gdG8gX19sZV9fIHRvIF9fZ3RfXyB0byBfX2dlX18KLSAgICBmb3Igb3BuYW1lLCBvcGZ1bmMgaW4gY29udmVydFtyb290XToKKyAgICBmb3Igb3BuYW1lLCBvcGZ1bmMgaW4gX2NvbnZlcnRbcm9vdF06CiAgICAgICAgIGlmIG9wbmFtZSBub3QgaW4gcm9vdHM6CiAgICAgICAgICAgICBvcGZ1bmMuX19uYW1lX18gPSBvcG5hbWUKICAgICAgICAgICAgIHNldGF0dHIoY2xzLCBvcG5hbWUsIG9wZnVuYykKQEAgLTIyMiw4ICsyMjMsNiBAQAogICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2JqLCBvdGhlci5vYmopIDw9IDAKICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPj0gMAotICAgICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgIHJldHVybiBteWNtcChzZWxmLm9iaiwgb3RoZXIub2JqKSAhPSAwCiAgICAgICAgIF9faGFzaF9fID0gTm9uZQogICAgIHJldHVybiBLCiAKQEAgLTI0Miw2ICsyNDEsMTQgQEAKICAgICAiIiJOZXcgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIHRoZSBnaXZlbiBhcmd1bWVudHMKICAgICBhbmQga2V5d29yZHMuCiAgICAgIiIiCisgICAgaWYgaGFzYXR0cihmdW5jLCAnZnVuYycpOgorICAgICAgICBhcmdzID0gZnVuYy5hcmdzICsgYXJncworICAgICAgICB0bXBrdyA9IGZ1bmMua2V5d29yZHMuY29weSgpCisgICAgICAgIHRtcGt3LnVwZGF0ZShrZXl3b3JkcykKKyAgICAgICAga2V5d29yZHMgPSB0bXBrdworICAgICAgICBkZWwgdG1wa3cKKyAgICAgICAgZnVuYyA9IGZ1bmMuZnVuYworCiAgICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6CiAgICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCiAgICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCkBAIC0yOTEsNyArMjk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYua2V5d29yZHMuaXRlbXMoKSkKICAgICAgICAgZm9ybWF0X3N0cmluZyA9ICJ7bW9kdWxlfS57Y2xzfSh7ZnVuY30sIHthcmdzfSwge2tleXdvcmRzfSkiCiAgICAgICAgIHJldHVybiBmb3JtYXRfc3RyaW5nLmZvcm1hdChtb2R1bGU9c2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1zZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscz1zZWxmLl9fY2xhc3NfXy5fX3F1YWxuYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jPXNlbGYuZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzPWtleXdvcmRzKQpAQCAtNDEyLDEyMCArNDE5LDEyOSBAQAogICAgIGlmIG1heHNpemUgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKG1heHNpemUsIGludCk6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgbWF4c2l6ZSB0byBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUnKQogCisgICAgZGVmIGRlY29yYXRpbmdfZnVuY3Rpb24odXNlcl9mdW5jdGlvbik6CisgICAgICAgIHdyYXBwZXIgPSBfbHJ1X2NhY2hlX3dyYXBwZXIodXNlcl9mdW5jdGlvbiwgbWF4c2l6ZSwgdHlwZWQsIF9DYWNoZUluZm8pCisgICAgICAgIHJldHVybiB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCB1c2VyX2Z1bmN0aW9uKQorCisgICAgcmV0dXJuIGRlY29yYXRpbmdfZnVuY3Rpb24KKworZGVmIF9scnVfY2FjaGVfd3JhcHBlcih1c2VyX2Z1bmN0aW9uLCBtYXhzaXplLCB0eXBlZCwgX0NhY2hlSW5mbyk6CiAgICAgIyBDb25zdGFudHMgc2hhcmVkIGJ5IGFsbCBscnUgY2FjaGUgaW5zdGFuY2VzOgogICAgIHNlbnRpbmVsID0gb2JqZWN0KCkgICAgICAgICAgIyB1bmlxdWUgb2JqZWN0IHVzZWQgdG8gc2lnbmFsIGNhY2hlIG1pc3NlcwogICAgIG1ha2Vfa2V5ID0gX21ha2Vfa2V5ICAgICAgICAgIyBidWlsZCBhIGtleSBmcm9tIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMKICAgICBQUkVWLCBORVhULCBLRVksIFJFU1VMVCA9IDAsIDEsIDIsIDMgICAjIG5hbWVzIGZvciB0aGUgbGluayBmaWVsZHMKIAotICAgIGRlZiBkZWNvcmF0aW5nX2Z1bmN0aW9uKHVzZXJfZnVuY3Rpb24pOgotICAgICAgICBjYWNoZSA9IHt9Ci0gICAgICAgIGhpdHMgPSBtaXNzZXMgPSAwCi0gICAgICAgIGZ1bGwgPSBGYWxzZQotICAgICAgICBjYWNoZV9nZXQgPSBjYWNoZS5nZXQgICAgIyBib3VuZCBtZXRob2QgdG8gbG9va3VwIGEga2V5IG9yIHJldHVybiBOb25lCi0gICAgICAgIGxvY2sgPSBSTG9jaygpICAgICAgICAgICAjIGJlY2F1c2UgbGlua2VkbGlzdCB1cGRhdGVzIGFyZW4ndCB0aHJlYWRzYWZlCi0gICAgICAgIHJvb3QgPSBbXSAgICAgICAgICAgICAgICAjIHJvb3Qgb2YgdGhlIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdAotICAgICAgICByb290WzpdID0gW3Jvb3QsIHJvb3QsIE5vbmUsIE5vbmVdICAgICAjIGluaXRpYWxpemUgYnkgcG9pbnRpbmcgdG8gc2VsZgorICAgIGNhY2hlID0ge30KKyAgICBoaXRzID0gbWlzc2VzID0gMAorICAgIGZ1bGwgPSBGYWxzZQorICAgIGNhY2hlX2dldCA9IGNhY2hlLmdldCAgICAjIGJvdW5kIG1ldGhvZCB0byBsb29rdXAgYSBrZXkgb3IgcmV0dXJuIE5vbmUKKyAgICBsb2NrID0gUkxvY2soKSAgICAgICAgICAgIyBiZWNhdXNlIGxpbmtlZGxpc3QgdXBkYXRlcyBhcmVuJ3QgdGhyZWFkc2FmZQorICAgIHJvb3QgPSBbXSAgICAgICAgICAgICAgICAjIHJvb3Qgb2YgdGhlIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdAorICAgIHJvb3RbOl0gPSBbcm9vdCwgcm9vdCwgTm9uZSwgTm9uZV0gICAgICMgaW5pdGlhbGl6ZSBieSBwb2ludGluZyB0byBzZWxmCiAKLSAgICAgICAgaWYgbWF4c2l6ZSA9PSAwOgorICAgIGlmIG1heHNpemUgPT0gMDoKIAotICAgICAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgICAgICAgICAgIyBObyBjYWNoaW5nIC0tIGp1c3QgYSBzdGF0aXN0aWNzIHVwZGF0ZSBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbAotICAgICAgICAgICAgICAgIG5vbmxvY2FsIG1pc3NlcwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVzZXJfZnVuY3Rpb24oKmFyZ3MsICoqa3dkcykKLSAgICAgICAgICAgICAgICBtaXNzZXMgKz0gMQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICMgTm8gY2FjaGluZyAtLSBqdXN0IGEgc3RhdGlzdGljcyB1cGRhdGUgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwKKyAgICAgICAgICAgIG5vbmxvY2FsIG1pc3NlcworICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9mdW5jdGlvbigqYXJncywgKiprd2RzKQorICAgICAgICAgICAgbWlzc2VzICs9IDEKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGVsaWYgbWF4c2l6ZSBpcyBOb25lOgorCisgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgIyBTaW1wbGUgY2FjaGluZyB3aXRob3V0IG9yZGVyaW5nIG9yIHNpemUgbGltaXQKKyAgICAgICAgICAgIG5vbmxvY2FsIGhpdHMsIG1pc3NlcworICAgICAgICAgICAga2V5ID0gbWFrZV9rZXkoYXJncywga3dkcywgdHlwZWQpCisgICAgICAgICAgICByZXN1bHQgPSBjYWNoZV9nZXQoa2V5LCBzZW50aW5lbCkKKyAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3Qgc2VudGluZWw6CisgICAgICAgICAgICAgICAgaGl0cyArPSAxCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9mdW5jdGlvbigqYXJncywgKiprd2RzKQorICAgICAgICAgICAgY2FjaGVba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgbWlzc2VzICs9IDEKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAotICAgICAgICBlbGlmIG1heHNpemUgaXMgTm9uZToKKyAgICBlbHNlOgogCi0gICAgICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2RzKToKLSAgICAgICAgICAgICAgICAjIFNpbXBsZSBjYWNoaW5nIHdpdGhvdXQgb3JkZXJpbmcgb3Igc2l6ZSBsaW1pdAotICAgICAgICAgICAgICAgIG5vbmxvY2FsIGhpdHMsIG1pc3NlcwotICAgICAgICAgICAgICAgIGtleSA9IG1ha2Vfa2V5KGFyZ3MsIGt3ZHMsIHR5cGVkKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhY2hlX2dldChrZXksIHNlbnRpbmVsKQotICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3Qgc2VudGluZWw6CisgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgIyBTaXplIGxpbWl0ZWQgY2FjaGluZyB0aGF0IHRyYWNrcyBhY2Nlc3NlcyBieSByZWNlbmN5CisgICAgICAgICAgICBub25sb2NhbCByb290LCBoaXRzLCBtaXNzZXMsIGZ1bGwKKyAgICAgICAgICAgIGtleSA9IG1ha2Vfa2V5KGFyZ3MsIGt3ZHMsIHR5cGVkKQorICAgICAgICAgICAgd2l0aCBsb2NrOgorICAgICAgICAgICAgICAgIGxpbmsgPSBjYWNoZV9nZXQoa2V5KQorICAgICAgICAgICAgICAgIGlmIGxpbmsgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgTW92ZSB0aGUgbGluayB0byB0aGUgZnJvbnQgb2YgdGhlIGNpcmN1bGFyIHF1ZXVlCisgICAgICAgICAgICAgICAgICAgIGxpbmtfcHJldiwgbGlua19uZXh0LCBfa2V5LCByZXN1bHQgPSBsaW5rCisgICAgICAgICAgICAgICAgICAgIGxpbmtfcHJldltORVhUXSA9IGxpbmtfbmV4dAorICAgICAgICAgICAgICAgICAgICBsaW5rX25leHRbUFJFVl0gPSBsaW5rX3ByZXYKKyAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHJvb3RbUFJFVl0KKyAgICAgICAgICAgICAgICAgICAgbGFzdFtORVhUXSA9IHJvb3RbUFJFVl0gPSBsaW5rCisgICAgICAgICAgICAgICAgICAgIGxpbmtbUFJFVl0gPSBsYXN0CisgICAgICAgICAgICAgICAgICAgIGxpbmtbTkVYVF0gPSByb290CiAgICAgICAgICAgICAgICAgICAgIGhpdHMgKz0gMQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9mdW5jdGlvbigqYXJncywgKiprd2RzKQotICAgICAgICAgICAgICAgIGNhY2hlW2tleV0gPSByZXN1bHQKKyAgICAgICAgICAgIHJlc3VsdCA9IHVzZXJfZnVuY3Rpb24oKmFyZ3MsICoqa3dkcykKKyAgICAgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gY2FjaGU6CisgICAgICAgICAgICAgICAgICAgICMgR2V0dGluZyBoZXJlIG1lYW5zIHRoYXQgdGhpcyBzYW1lIGtleSB3YXMgYWRkZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICMgY2FjaGUgd2hpbGUgdGhlIGxvY2sgd2FzIHJlbGVhc2VkLiAgU2luY2UgdGhlIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgaXMgYWxyZWFkeSBkb25lLCB3ZSBuZWVkIG9ubHkgcmV0dXJuIHRoZQorICAgICAgICAgICAgICAgICAgICAjIGNvbXB1dGVkIHJlc3VsdCBhbmQgdXBkYXRlIHRoZSBjb3VudCBvZiBtaXNzZXMuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbGlmIGZ1bGw6CisgICAgICAgICAgICAgICAgICAgICMgVXNlIHRoZSBvbGQgcm9vdCB0byBzdG9yZSB0aGUgbmV3IGtleSBhbmQgcmVzdWx0LgorICAgICAgICAgICAgICAgICAgICBvbGRyb290ID0gcm9vdAorICAgICAgICAgICAgICAgICAgICBvbGRyb290W0tFWV0gPSBrZXkKKyAgICAgICAgICAgICAgICAgICAgb2xkcm9vdFtSRVNVTFRdID0gcmVzdWx0CisgICAgICAgICAgICAgICAgICAgICMgRW1wdHkgdGhlIG9sZGVzdCBsaW5rIGFuZCBtYWtlIGl0IHRoZSBuZXcgcm9vdC4KKyAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQga2V5IGFuZCBvbGQgcmVzdWx0IHRvCisgICAgICAgICAgICAgICAgICAgICMgcHJldmVudCB0aGVpciByZWYgY291bnRzIGZyb20gZ29pbmcgdG8gemVybyBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICMgdXBkYXRlLiBUaGF0IHdpbGwgcHJldmVudCBwb3RlbnRpYWxseSBhcmJpdHJhcnkgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICMgY2xlYW4tdXAgY29kZSAoaS5lLiBfX2RlbF9fKSBmcm9tIHJ1bm5pbmcgd2hpbGUgd2UncmUKKyAgICAgICAgICAgICAgICAgICAgIyBzdGlsbCBhZGp1c3RpbmcgdGhlIGxpbmtzLgorICAgICAgICAgICAgICAgICAgICByb290ID0gb2xkcm9vdFtORVhUXQorICAgICAgICAgICAgICAgICAgICBvbGRrZXkgPSByb290W0tFWV0KKyAgICAgICAgICAgICAgICAgICAgb2xkcmVzdWx0ID0gcm9vdFtSRVNVTFRdCisgICAgICAgICAgICAgICAgICAgIHJvb3RbS0VZXSA9IHJvb3RbUkVTVUxUXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgdXBkYXRlIHRoZSBjYWNoZSBkaWN0aW9uYXJ5LgorICAgICAgICAgICAgICAgICAgICBkZWwgY2FjaGVbb2xka2V5XQorICAgICAgICAgICAgICAgICAgICAjIFNhdmUgdGhlIHBvdGVudGlhbGx5IHJlZW50cmFudCBjYWNoZVtrZXldIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgIyBmb3IgbGFzdCwgYWZ0ZXIgdGhlIHJvb3QgYW5kIGxpbmtzIGhhdmUgYmVlbiBwdXQgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBhIGNvbnNpc3RlbnQgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIGNhY2hlW2tleV0gPSBvbGRyb290CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBQdXQgcmVzdWx0IGluIGEgbmV3IGxpbmsgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZS4KKyAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHJvb3RbUFJFVl0KKyAgICAgICAgICAgICAgICAgICAgbGluayA9IFtsYXN0LCByb290LCBrZXksIHJlc3VsdF0KKyAgICAgICAgICAgICAgICAgICAgbGFzdFtORVhUXSA9IHJvb3RbUFJFVl0gPSBjYWNoZVtrZXldID0gbGluaworICAgICAgICAgICAgICAgICAgICBmdWxsID0gKGxlbihjYWNoZSkgPj0gbWF4c2l6ZSkKICAgICAgICAgICAgICAgICBtaXNzZXMgKz0gMQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAotICAgICAgICBlbHNlOgorICAgIGRlZiBjYWNoZV9pbmZvKCk6CisgICAgICAgICIiIlJlcG9ydCBjYWNoZSBzdGF0aXN0aWNzIiIiCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIHJldHVybiBfQ2FjaGVJbmZvKGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgbGVuKGNhY2hlKSkKIAotICAgICAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgICAgICAgICAgIyBTaXplIGxpbWl0ZWQgY2FjaGluZyB0aGF0IHRyYWNrcyBhY2Nlc3NlcyBieSByZWNlbmN5Ci0gICAgICAgICAgICAgICAgbm9ubG9jYWwgcm9vdCwgaGl0cywgbWlzc2VzLCBmdWxsCi0gICAgICAgICAgICAgICAga2V5ID0gbWFrZV9rZXkoYXJncywga3dkcywgdHlwZWQpCi0gICAgICAgICAgICAgICAgd2l0aCBsb2NrOgotICAgICAgICAgICAgICAgICAgICBsaW5rID0gY2FjaGVfZ2V0KGtleSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgTW92ZSB0aGUgbGluayB0byB0aGUgZnJvbnQgb2YgdGhlIGNpcmN1bGFyIHF1ZXVlCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rX3ByZXYsIGxpbmtfbmV4dCwgX2tleSwgcmVzdWx0ID0gbGluawotICAgICAgICAgICAgICAgICAgICAgICAgbGlua19wcmV2W05FWFRdID0gbGlua19uZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rX25leHRbUFJFVl0gPSBsaW5rX3ByZXYKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSByb290W1BSRVZdCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0W05FWFRdID0gcm9vdFtQUkVWXSA9IGxpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtbUFJFVl0gPSBsYXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rW05FWFRdID0gcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgaGl0cyArPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9mdW5jdGlvbigqYXJncywgKiprd2RzKQotICAgICAgICAgICAgICAgIHdpdGggbG9jazoKLSAgICAgICAgICAgICAgICAgICAgaWYga2V5IGluIGNhY2hlOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBHZXR0aW5nIGhlcmUgbWVhbnMgdGhhdCB0aGlzIHNhbWUga2V5IHdhcyBhZGRlZCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICMgY2FjaGUgd2hpbGUgdGhlIGxvY2sgd2FzIHJlbGVhc2VkLiAgU2luY2UgdGhlIGxpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIGlzIGFscmVhZHkgZG9uZSwgd2UgbmVlZCBvbmx5IHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICMgY29tcHV0ZWQgcmVzdWx0IGFuZCB1cGRhdGUgdGhlIGNvdW50IG9mIG1pc3Nlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBmdWxsOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2UgdGhlIG9sZCByb290IHRvIHN0b3JlIHRoZSBuZXcga2V5IGFuZCByZXN1bHQuCi0gICAgICAgICAgICAgICAgICAgICAgICBvbGRyb290ID0gcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgb2xkcm9vdFtLRVldID0ga2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGRyb290W1JFU1VMVF0gPSByZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgRW1wdHkgdGhlIG9sZGVzdCBsaW5rIGFuZCBtYWtlIGl0IHRoZSBuZXcgcm9vdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgb2xkIGtleSBhbmQgb2xkIHJlc3VsdCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmV2ZW50IHRoZWlyIHJlZiBjb3VudHMgZnJvbSBnb2luZyB0byB6ZXJvIGR1cmluZyB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdXBkYXRlLiBUaGF0IHdpbGwgcHJldmVudCBwb3RlbnRpYWxseSBhcmJpdHJhcnkgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGNsZWFuLXVwIGNvZGUgKGkuZS4gX19kZWxfXykgZnJvbSBydW5uaW5nIHdoaWxlIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHN0aWxsIGFkanVzdGluZyB0aGUgbGlua3MuCi0gICAgICAgICAgICAgICAgICAgICAgICByb290ID0gb2xkcm9vdFtORVhUXQotICAgICAgICAgICAgICAgICAgICAgICAgb2xka2V5ID0gcm9vdFtLRVldCi0gICAgICAgICAgICAgICAgICAgICAgICBvbGRyZXN1bHQgPSByb290W1JFU1VMVF0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RbS0VZXSA9IHJvb3RbUkVTVUxUXSA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICMgTm93IHVwZGF0ZSB0aGUgY2FjaGUgZGljdGlvbmFyeS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjYWNoZVtvbGRrZXldCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFNhdmUgdGhlIHBvdGVudGlhbGx5IHJlZW50cmFudCBjYWNoZVtrZXldIGFzc2lnbm1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgZm9yIGxhc3QsIGFmdGVyIHRoZSByb290IGFuZCBsaW5rcyBoYXZlIGJlZW4gcHV0IGluCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGEgY29uc2lzdGVudCBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlW2tleV0gPSBvbGRyb290Ci0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFB1dCByZXN1bHQgaW4gYSBuZXcgbGluayBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlLgotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHJvb3RbUFJFVl0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsgPSBbbGFzdCwgcm9vdCwga2V5LCByZXN1bHRdCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0W05FWFRdID0gcm9vdFtQUkVWXSA9IGNhY2hlW2tleV0gPSBsaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICBmdWxsID0gKGxlbihjYWNoZSkgPj0gbWF4c2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgbWlzc2VzICs9IDEKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgZGVmIGNhY2hlX2NsZWFyKCk6CisgICAgICAgICIiIkNsZWFyIHRoZSBjYWNoZSBhbmQgY2FjaGUgc3RhdGlzdGljcyIiIgorICAgICAgICBub25sb2NhbCBoaXRzLCBtaXNzZXMsIGZ1bGwKKyAgICAgICAgd2l0aCBsb2NrOgorICAgICAgICAgICAgY2FjaGUuY2xlYXIoKQorICAgICAgICAgICAgcm9vdFs6XSA9IFtyb290LCByb290LCBOb25lLCBOb25lXQorICAgICAgICAgICAgaGl0cyA9IG1pc3NlcyA9IDAKKyAgICAgICAgICAgIGZ1bGwgPSBGYWxzZQogCi0gICAgICAgIGRlZiBjYWNoZV9pbmZvKCk6Ci0gICAgICAgICAgICAiIiJSZXBvcnQgY2FjaGUgc3RhdGlzdGljcyIiIgotICAgICAgICAgICAgd2l0aCBsb2NrOgotICAgICAgICAgICAgICAgIHJldHVybiBfQ2FjaGVJbmZvKGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgbGVuKGNhY2hlKSkKKyAgICB3cmFwcGVyLmNhY2hlX2luZm8gPSBjYWNoZV9pbmZvCisgICAgd3JhcHBlci5jYWNoZV9jbGVhciA9IGNhY2hlX2NsZWFyCisgICAgcmV0dXJuIHdyYXBwZXIKIAotICAgICAgICBkZWYgY2FjaGVfY2xlYXIoKToKLSAgICAgICAgICAgICIiIkNsZWFyIHRoZSBjYWNoZSBhbmQgY2FjaGUgc3RhdGlzdGljcyIiIgotICAgICAgICAgICAgbm9ubG9jYWwgaGl0cywgbWlzc2VzLCBmdWxsCi0gICAgICAgICAgICB3aXRoIGxvY2s6Ci0gICAgICAgICAgICAgICAgY2FjaGUuY2xlYXIoKQotICAgICAgICAgICAgICAgIHJvb3RbOl0gPSBbcm9vdCwgcm9vdCwgTm9uZSwgTm9uZV0KLSAgICAgICAgICAgICAgICBoaXRzID0gbWlzc2VzID0gMAotICAgICAgICAgICAgICAgIGZ1bGwgPSBGYWxzZQotCi0gICAgICAgIHdyYXBwZXIuY2FjaGVfaW5mbyA9IGNhY2hlX2luZm8KLSAgICAgICAgd3JhcHBlci5jYWNoZV9jbGVhciA9IGNhY2hlX2NsZWFyCi0gICAgICAgIHJldHVybiB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCB1c2VyX2Z1bmN0aW9uKQotCi0gICAgcmV0dXJuIGRlY29yYXRpbmdfZnVuY3Rpb24KK3RyeToKKyAgICBmcm9tIF9mdW5jdG9vbHMgaW1wb3J0IF9scnVfY2FjaGVfd3JhcHBlcgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvTGliL2dlbmVyaWNwYXRoLnB5IGIvTGliL2dlbmVyaWNwYXRoLnB5CmluZGV4IGNhNGE1MTAuLjY3MTQwNjEgMTAwNjQ0Ci0tLSBhL0xpYi9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvZ2VuZXJpY3BhdGgucHkKQEAgLTEzMCwzICsxMzAsMTYgQEAKICAgICAgICAgICAgIGZpbGVuYW1lSW5kZXggKz0gMQogCiAgICAgcmV0dXJuIHAsIHBbOjBdCisKK2RlZiBfY2hlY2tfYXJnX3R5cGVzKGZ1bmNuYW1lLCAqYXJncyk6CisgICAgaGFzc3RyID0gaGFzYnl0ZXMgPSBGYWxzZQorICAgIGZvciBzIGluIGFyZ3M6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgICAgIGhhc3N0ciA9IFRydWUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHMsIGJ5dGVzKToKKyAgICAgICAgICAgIGhhc2J5dGVzID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcygpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCBub3QgJXInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY25hbWUsIHMuX19jbGFzc19fLl9fbmFtZV9fKSkgZnJvbSBOb25lCisgICAgaWYgaGFzc3RyIGFuZCBoYXNieXRlczoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4ndCBtaXggc3RyaW5ncyBhbmQgYnl0ZXMgaW4gcGF0aCBjb21wb25lbnRzIikgZnJvbSBOb25lCmRpZmYgLS1naXQgYS9MaWIvZ2V0cGFzcy5weSBiL0xpYi9nZXRwYXNzLnB5CmluZGV4IDdjNGU5NzYuLmJlNTExMjEgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRwYXNzLnB5CisrKyBiL0xpYi9nZXRwYXNzLnB5CkBAIC05OSw3ICs5OSw3IEBACiAgICAgIiIiUHJvbXB0IGZvciBwYXNzd29yZCB3aXRoIGVjaG8gb2ZmLCB1c2luZyBXaW5kb3dzIGdldGNoKCkuIiIiCiAgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBzeXMuX19zdGRpbl9fOgogICAgICAgICByZXR1cm4gZmFsbGJhY2tfZ2V0cGFzcyhwcm9tcHQsIHN0cmVhbSkKLSAgICBpbXBvcnQgbXN2Y3J0CisKICAgICBmb3IgYyBpbiBwcm9tcHQ6CiAgICAgICAgIG1zdmNydC5wdXR3Y2goYykKICAgICBwdyA9ICIiCmRpZmYgLS1naXQgYS9MaWIvZ2V0dGV4dC5weSBiL0xpYi9nZXR0ZXh0LnB5CmluZGV4IDhjYWYxZDEuLjEwMTM3OGYgMTAwNjQ0Ci0tLSBhL0xpYi9nZXR0ZXh0LnB5CisrKyBiL0xpYi9nZXR0ZXh0LnB5CkBAIC0yMjcsNiArMjI3LDEzIEBACiAgICAgTEVfTUFHSUMgPSAweDk1MDQxMmRlCiAgICAgQkVfTUFHSUMgPSAweGRlMTIwNDk1CiAKKyAgICAjIEFjY2VwdGFibGUgLm1vIHZlcnNpb25zCisgICAgVkVSU0lPTlMgPSAoMCwgMSkKKworICAgIGRlZiBfZ2V0X3ZlcnNpb25zKHNlbGYsIHZlcnNpb24pOgorICAgICAgICAiIiJSZXR1cm5zIGEgdHVwbGUgb2YgbWFqb3IgdmVyc2lvbiwgbWlub3IgdmVyc2lvbiIiIgorICAgICAgICByZXR1cm4gKHZlcnNpb24gPj4gMTYsIHZlcnNpb24gJiAweGZmZmYpCisKICAgICBkZWYgX3BhcnNlKHNlbGYsIGZwKToKICAgICAgICAgIiIiT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gc3VwcG9ydCBhbHRlcm5hdGl2ZSAubW8gZm9ybWF0cy4iIiIKICAgICAgICAgdW5wYWNrID0gc3RydWN0LnVucGFjawpAQCAtMjQ3LDYgKzI1NCwxMiBAQAogICAgICAgICAgICAgaWkgPSAnPklJJwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQorCisgICAgICAgIG1ham9yX3ZlcnNpb24sIG1pbm9yX3ZlcnNpb24gPSBzZWxmLl9nZXRfdmVyc2lvbnModmVyc2lvbikKKworICAgICAgICBpZiBtYWpvcl92ZXJzaW9uIG5vdCBpbiBzZWxmLlZFUlNJT05TOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnQmFkIHZlcnNpb24gbnVtYmVyICcgKyBzdHIobWFqb3JfdmVyc2lvbiksIGZpbGVuYW1lKQorCiAgICAgICAgICMgTm93IHB1dCBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgLm1vIGZpbGUgYnVmZmVyIGludG8gdGhlIGNhdGFsb2cKICAgICAgICAgIyBkaWN0aW9uYXJ5LgogICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBtc2djb3VudCk6CmRpZmYgLS1naXQgYS9MaWIvZ2xvYi5weSBiL0xpYi9nbG9iLnB5CmluZGV4IGQ2ZWNhMjQuLjE2MzMwZDggMTAwNjQ0Ci0tLSBhL0xpYi9nbG9iLnB5CisrKyBiL0xpYi9nbG9iLnB5CkBAIC00LDkgKzQsOSBAQAogaW1wb3J0IHJlCiBpbXBvcnQgZm5tYXRjaAogCi1fX2FsbF9fID0gWyJnbG9iIiwgImlnbG9iIl0KK19fYWxsX18gPSBbImdsb2IiLCAiaWdsb2IiLCAiZXNjYXBlIl0KIAotZGVmIGdsb2IocGF0aG5hbWUpOgorZGVmIGdsb2IocGF0aG5hbWUsICosIHJlY3Vyc2l2ZT1GYWxzZSk6CiAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBwYXRocyBtYXRjaGluZyBhIHBhdGhuYW1lIHBhdHRlcm4uCiAKICAgICBUaGUgcGF0dGVybiBtYXkgY29udGFpbiBzaW1wbGUgc2hlbGwtc3R5bGUgd2lsZGNhcmRzIGEgbGEKQEAgLTE0LDEwICsxNCwxMiBAQAogICAgIGRvdCBhcmUgc3BlY2lhbCBjYXNlcyB0aGF0IGFyZSBub3QgbWF0Y2hlZCBieSAnKicgYW5kICc/JwogICAgIHBhdHRlcm5zLgogCisgICAgSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZSBwYXR0ZXJuICcqKicgd2lsbCBtYXRjaCBhbnkgZmlsZXMgYW5kCisgICAgemVybyBvciBtb3JlIGRpcmVjdG9yaWVzIGFuZCBzdWJkaXJlY3Rvcmllcy4KICAgICAiIiIKLSAgICByZXR1cm4gbGlzdChpZ2xvYihwYXRobmFtZSkpCisgICAgcmV0dXJuIGxpc3QoaWdsb2IocGF0aG5hbWUsIHJlY3Vyc2l2ZT1yZWN1cnNpdmUpKQogCi1kZWYgaWdsb2IocGF0aG5hbWUpOgorZGVmIGlnbG9iKHBhdGhuYW1lLCAqLCByZWN1cnNpdmU9RmFsc2UpOgogICAgICIiIlJldHVybiBhbiBpdGVyYXRvciB3aGljaCB5aWVsZHMgdGhlIHBhdGhzIG1hdGNoaW5nIGEgcGF0aG5hbWUgcGF0dGVybi4KIAogICAgIFRoZSBwYXR0ZXJuIG1heSBjb250YWluIHNpbXBsZSBzaGVsbC1zdHlsZSB3aWxkY2FyZHMgYSBsYQpAQCAtMjUsNyArMjcsMTYgQEAKICAgICBkb3QgYXJlIHNwZWNpYWwgY2FzZXMgdGhhdCBhcmUgbm90IG1hdGNoZWQgYnkgJyonIGFuZCAnPycKICAgICBwYXR0ZXJucy4KIAorICAgIElmIHJlY3Vyc2l2ZSBpcyB0cnVlLCB0aGUgcGF0dGVybiAnKionIHdpbGwgbWF0Y2ggYW55IGZpbGVzIGFuZAorICAgIHplcm8gb3IgbW9yZSBkaXJlY3RvcmllcyBhbmQgc3ViZGlyZWN0b3JpZXMuCiAgICAgIiIiCisgICAgaXQgPSBfaWdsb2IocGF0aG5hbWUsIHJlY3Vyc2l2ZSkKKyAgICBpZiByZWN1cnNpdmUgYW5kIF9pc3JlY3Vyc2l2ZShwYXRobmFtZSk6CisgICAgICAgIHMgPSBuZXh0KGl0KSAgIyBza2lwIGVtcHR5IHN0cmluZworICAgICAgICBhc3NlcnQgbm90IHMKKyAgICByZXR1cm4gaXQKKworZGVmIF9pZ2xvYihwYXRobmFtZSwgcmVjdXJzaXZlKToKICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aG5hbWUpCiAgICAgaWYgbm90IGhhc19tYWdpYyhwYXRobmFtZSk6CiAgICAgICAgIGlmIGJhc2VuYW1lOgpAQCAtMzcsMTcgKzQ4LDIzIEBACiAgICAgICAgICAgICAgICAgeWllbGQgcGF0aG5hbWUKICAgICAgICAgcmV0dXJuCiAgICAgaWYgbm90IGRpcm5hbWU6Ci0gICAgICAgIHlpZWxkIGZyb20gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpCisgICAgICAgIGlmIHJlY3Vyc2l2ZSBhbmQgX2lzcmVjdXJzaXZlKGJhc2VuYW1lKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZ2xvYjIoZGlybmFtZSwgYmFzZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGdsb2IxKGRpcm5hbWUsIGJhc2VuYW1lKQogICAgICAgICByZXR1cm4KICAgICAjIGBvcy5wYXRoLnNwbGl0KClgIHJldHVybnMgdGhlIGFyZ3VtZW50IGl0c2VsZiBhcyBhIGRpcm5hbWUgaWYgaXQgaXMgYQogICAgICMgZHJpdmUgb3IgVU5DIHBhdGguICBQcmV2ZW50IGFuIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBhIGRyaXZlIG9yIFVOQyBwYXRoCiAgICAgIyBjb250YWlucyBtYWdpYyBjaGFyYWN0ZXJzIChpLmUuIHInXFw/XEM6JykuCiAgICAgaWYgZGlybmFtZSAhPSBwYXRobmFtZSBhbmQgaGFzX21hZ2ljKGRpcm5hbWUpOgotICAgICAgICBkaXJzID0gaWdsb2IoZGlybmFtZSkKKyAgICAgICAgZGlycyA9IF9pZ2xvYihkaXJuYW1lLCByZWN1cnNpdmUpCiAgICAgZWxzZToKICAgICAgICAgZGlycyA9IFtkaXJuYW1lXQogICAgIGlmIGhhc19tYWdpYyhiYXNlbmFtZSk6Ci0gICAgICAgIGdsb2JfaW5fZGlyID0gZ2xvYjEKKyAgICAgICAgaWYgcmVjdXJzaXZlIGFuZCBfaXNyZWN1cnNpdmUoYmFzZW5hbWUpOgorICAgICAgICAgICAgZ2xvYl9pbl9kaXIgPSBnbG9iMgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ2xvYl9pbl9kaXIgPSBnbG9iMQogICAgIGVsc2U6CiAgICAgICAgIGdsb2JfaW5fZGlyID0gZ2xvYjAKICAgICBmb3IgZGlybmFtZSBpbiBkaXJzOgpAQCAtODMsNiArMTAwLDMyIEBACiAgICAgICAgICAgICByZXR1cm4gW2Jhc2VuYW1lXQogICAgIHJldHVybiBbXQogCisjIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IHlpZWxkcyByZWxhdGl2ZSBwYXRobmFtZXMgaW5zaWRlIGEgbGl0ZXJhbAorIyBkaXJlY3RvcnkuCisKK2RlZiBnbG9iMihkaXJuYW1lLCBwYXR0ZXJuKToKKyAgICBhc3NlcnQgX2lzcmVjdXJzaXZlKHBhdHRlcm4pCisgICAgeWllbGQgcGF0dGVybls6MF0KKyAgICB5aWVsZCBmcm9tIF9ybGlzdGRpcihkaXJuYW1lKQorCisjIFJlY3Vyc2l2ZWx5IHlpZWxkcyByZWxhdGl2ZSBwYXRobmFtZXMgaW5zaWRlIGEgbGl0ZXJhbCBkaXJlY3RvcnkuCitkZWYgX3JsaXN0ZGlyKGRpcm5hbWUpOgorICAgIGlmIG5vdCBkaXJuYW1lOgorICAgICAgICBpZiBpc2luc3RhbmNlKGRpcm5hbWUsIGJ5dGVzKToKKyAgICAgICAgICAgIGRpcm5hbWUgPSBieXRlcyhvcy5jdXJkaXIsICdBU0NJSScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXJuYW1lID0gb3MuY3VyZGlyCisgICAgdHJ5OgorICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKKyAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIHJldHVybgorICAgIGZvciB4IGluIG5hbWVzOgorICAgICAgICBpZiBub3QgX2lzaGlkZGVuKHgpOgorICAgICAgICAgICAgeWllbGQgeAorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXJuYW1lLCB4KSBpZiBkaXJuYW1lIGVsc2UgeAorICAgICAgICAgICAgZm9yIHkgaW4gX3JsaXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIHlpZWxkIG9zLnBhdGguam9pbih4LCB5KQorCiAKIG1hZ2ljX2NoZWNrID0gcmUuY29tcGlsZSgnKFsqP1tdKScpCiBtYWdpY19jaGVja19ieXRlcyA9IHJlLmNvbXBpbGUoYicoWyo/W10pJykKQEAgLTk3LDYgKzE0MCwxMiBAQAogZGVmIF9pc2hpZGRlbihwYXRoKToKICAgICByZXR1cm4gcGF0aFswXSBpbiAoJy4nLCBiJy4nWzBdKQogCitkZWYgX2lzcmVjdXJzaXZlKHBhdHRlcm4pOgorICAgIGlmIGlzaW5zdGFuY2UocGF0dGVybiwgYnl0ZXMpOgorICAgICAgICByZXR1cm4gcGF0dGVybiA9PSBiJyoqJworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBwYXR0ZXJuID09ICcqKicKKwogZGVmIGVzY2FwZShwYXRobmFtZSk6CiAgICAgIiIiRXNjYXBlIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMuCiAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvZ3ppcC5weSBiL0xpYi9nemlwLnB5CmluZGV4IDdhZDAwZTEuLmRhNDQ3OWUgMTAwNjQ0Ci0tLSBhL0xpYi9nemlwLnB5CisrKyBiL0xpYi9nemlwLnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IHpsaWIKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IGlvCitpbXBvcnQgX2NvbXByZXNzaW9uCiAKIF9fYWxsX18gPSBbIkd6aXBGaWxlIiwgIm9wZW4iLCAiY29tcHJlc3MiLCAiZGVjb21wcmVzcyJdCiAKQEAgLTg5LDQ5ICs5MCwzNSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcltyZWFkOl0gKyBcCiAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlLnJlYWQoc2l6ZS1zZWxmLl9sZW5ndGgrcmVhZCkKIAotICAgIGRlZiBwcmVwZW5kKHNlbGYsIHByZXBlbmQ9YicnLCByZWFkcHJldmlvdXM9RmFsc2UpOgorICAgIGRlZiBwcmVwZW5kKHNlbGYsIHByZXBlbmQ9YicnKToKICAgICAgICAgaWYgc2VsZi5fcmVhZCBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gcHJlcGVuZAotICAgICAgICBlbGlmIHJlYWRwcmV2aW91cyBhbmQgbGVuKHByZXBlbmQpIDw9IHNlbGYuX3JlYWQ6CisgICAgICAgIGVsc2U6ICAjIEFzc3VtZSBkYXRhIHdhcyByZWFkIHNpbmNlIHRoZSBsYXN0IHByZXBlbmQoKSBjYWxsCiAgICAgICAgICAgICBzZWxmLl9yZWFkIC09IGxlbihwcmVwZW5kKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2VsZi5fcmVhZDpdICsgcHJlcGVuZAogICAgICAgICBzZWxmLl9sZW5ndGggPSBsZW4oc2VsZi5fYnVmZmVyKQogICAgICAgICBzZWxmLl9yZWFkID0gMAogCi0gICAgZGVmIHVudXNlZChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcmVhZCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyW3NlbGYuX3JlYWQ6XQotCi0gICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9MCk6Ci0gICAgICAgICMgVGhpcyBpcyBvbmx5IGV2ZXIgY2FsbGVkIHdpdGggb2Zmc2V0PXdoZW5jZT0wCi0gICAgICAgIGlmIHdoZW5jZSA9PSAxIGFuZCBzZWxmLl9yZWFkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgMCA8PSBvZmZzZXQgKyBzZWxmLl9yZWFkIDw9IHNlbGYuX2xlbmd0aDoKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWFkICs9IG9mZnNldAotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc2VsZi5fbGVuZ3RoIC0gc2VsZi5fcmVhZAorICAgIGRlZiBzZWVrKHNlbGYsIG9mZik6CiAgICAgICAgIHNlbGYuX3JlYWQgPSBOb25lCiAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKLSAgICAgICAgcmV0dXJuIHNlbGYuZmlsZS5zZWVrKG9mZnNldCwgd2hlbmNlKQorICAgICAgICByZXR1cm4gc2VsZi5maWxlLnNlZWsob2ZmKQogCi0gICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLmZpbGUsIG5hbWUpCisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZSAgIyBBbGxvd3MgZmFzdC1mb3J3YXJkaW5nIGV2ZW4gaW4gdW5zZWVrYWJsZSBzdHJlYW1zCiAKLQotY2xhc3MgR3ppcEZpbGUoaW8uQnVmZmVyZWRJT0Jhc2UpOgorY2xhc3MgR3ppcEZpbGUoX2NvbXByZXNzaW9uLkJhc2VTdHJlYW0pOgogICAgICIiIlRoZSBHemlwRmlsZSBjbGFzcyBzaW11bGF0ZXMgbW9zdCBvZiB0aGUgbWV0aG9kcyBvZiBhIGZpbGUgb2JqZWN0IHdpdGgKLSAgICB0aGUgZXhjZXB0aW9uIG9mIHRoZSByZWFkaW50bygpIGFuZCB0cnVuY2F0ZSgpIG1ldGhvZHMuCisgICAgdGhlIGV4Y2VwdGlvbiBvZiB0aGUgdHJ1bmNhdGUoKSBtZXRob2QuCiAKICAgICBUaGlzIGNsYXNzIG9ubHkgc3VwcG9ydHMgb3BlbmluZyBmaWxlcyBpbiBiaW5hcnkgbW9kZS4gSWYgeW91IG5lZWQgdG8gb3BlbiBhCiAgICAgY29tcHJlc3NlZCBmaWxlIGluIHRleHQgbW9kZSwgdXNlIHRoZSBnemlwLm9wZW4oKSBmdW5jdGlvbi4KIAogICAgICIiIgogCisgICAgIyBPdmVycmlkZGVuIHdpdGggaW50ZXJuYWwgZmlsZSBvYmplY3QgdG8gYmUgY2xvc2VkLCBpZiBvbmx5IGEgZmlsZW5hbWUKKyAgICAjIGlzIHBhc3NlZCBpbgogICAgIG15ZmlsZW9iaiA9IE5vbmUKLSAgICBtYXhfcmVhZF9jaHVuayA9IDEwICogMTAyNCAqIDEwMjQgICAjIDEwTWIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT1Ob25lLCBtb2RlPU5vbmUsCiAgICAgICAgICAgICAgICAgIGNvbXByZXNzbGV2ZWw9OSwgZmlsZW9iaj1Ob25lLCBtdGltZT1Ob25lKToKQEAgLTE0Niw3ICsxMzMsNyBAQAogICAgICAgICBhIGZpbGUgb2JqZWN0LgogCiAgICAgICAgIFdoZW4gZmlsZW9iaiBpcyBub3QgTm9uZSwgdGhlIGZpbGVuYW1lIGFyZ3VtZW50IGlzIG9ubHkgdXNlZCB0byBiZQotICAgICAgICBpbmNsdWRlZCBpbiB0aGUgZ3ppcCBmaWxlIGhlYWRlciwgd2hpY2ggbWF5IGluY2x1ZGVzIHRoZSBvcmlnaW5hbAorICAgICAgICBpbmNsdWRlZCBpbiB0aGUgZ3ppcCBmaWxlIGhlYWRlciwgd2hpY2ggbWF5IGluY2x1ZGUgdGhlIG9yaWdpbmFsCiAgICAgICAgIGZpbGVuYW1lIG9mIHRoZSB1bmNvbXByZXNzZWQgZmlsZS4gIEl0IGRlZmF1bHRzIHRvIHRoZSBmaWxlbmFtZSBvZgogICAgICAgICBmaWxlb2JqLCBpZiBkaXNjZXJuaWJsZTsgb3RoZXJ3aXNlLCBpdCBkZWZhdWx0cyB0byB0aGUgZW1wdHkgc3RyaW5nLAogICAgICAgICBhbmQgaW4gdGhpcyBjYXNlIHRoZSBvcmlnaW5hbCBmaWxlbmFtZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGhlYWRlci4KQEAgLTE2MywxMyArMTUwLDggQEAKICAgICAgICAgYXQgYWxsLiBUaGUgZGVmYXVsdCBpcyA5LgogCiAgICAgICAgIFRoZSBtdGltZSBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBudW1lcmljIHRpbWVzdGFtcCB0byBiZSB3cml0dGVuCi0gICAgICAgIHRvIHRoZSBzdHJlYW0gd2hlbiBjb21wcmVzc2luZy4gIEFsbCBnemlwIGNvbXByZXNzZWQgc3RyZWFtcwotICAgICAgICBhcmUgcmVxdWlyZWQgdG8gY29udGFpbiBhIHRpbWVzdGFtcC4gIElmIG9taXR0ZWQgb3IgTm9uZSwgdGhlCi0gICAgICAgIGN1cnJlbnQgdGltZSBpcyB1c2VkLiAgVGhpcyBtb2R1bGUgaWdub3JlcyB0aGUgdGltZXN0YW1wIHdoZW4KLSAgICAgICAgZGVjb21wcmVzc2luZzsgaG93ZXZlciwgc29tZSBwcm9ncmFtcywgc3VjaCBhcyBndW56aXAsIG1ha2UgdXNlCi0gICAgICAgIG9mIGl0LiAgVGhlIGZvcm1hdCBvZiB0aGUgdGltZXN0YW1wIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlCi0gICAgICAgIHJldHVybiB2YWx1ZSBvZiB0aW1lLnRpbWUoKSBhbmQgb2YgdGhlIHN0X210aW1lIG1lbWJlciBvZiB0aGUKLSAgICAgICAgb2JqZWN0IHJldHVybmVkIGJ5IG9zLnN0YXQoKS4KKyAgICAgICAgdG8gdGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgZmllbGQgaW4gdGhlIHN0cmVhbSB3aGVuIGNvbXByZXNzaW5nLgorICAgICAgICBJZiBvbWl0dGVkIG9yIE5vbmUsIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4KIAogICAgICAgICAiIiIKIApAQCAtMTg4LDE4ICsxNzAsOSBAQAogCiAgICAgICAgIGlmIG1vZGUuc3RhcnRzd2l0aCgncicpOgogICAgICAgICAgICAgc2VsZi5tb2RlID0gUkVBRAotICAgICAgICAgICAgIyBTZXQgZmxhZyBpbmRpY2F0aW5nIHN0YXJ0IG9mIGEgbmV3IG1lbWJlcgotICAgICAgICAgICAgc2VsZi5fbmV3X21lbWJlciA9IFRydWUKLSAgICAgICAgICAgICMgQnVmZmVyIGRhdGEgcmVhZCBmcm9tIGd6aXAgZmlsZS4gZXh0cmFzdGFydCBpcyBvZmZzZXQgaW4KLSAgICAgICAgICAgICMgc3RyZWFtIHdoZXJlIGJ1ZmZlciBzdGFydHMuIGV4dHJhc2l6ZSBpcyBudW1iZXIgb2YKLSAgICAgICAgICAgICMgYnl0ZXMgcmVtYWluaW5nIGluIGJ1ZmZlciBmcm9tIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLgotICAgICAgICAgICAgc2VsZi5leHRyYWJ1ZiA9IGIiIgotICAgICAgICAgICAgc2VsZi5leHRyYXNpemUgPSAwCi0gICAgICAgICAgICBzZWxmLmV4dHJhc3RhcnQgPSAwCisgICAgICAgICAgICByYXcgPSBfR3ppcFJlYWRlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3KQogICAgICAgICAgICAgc2VsZi5uYW1lID0gZmlsZW5hbWUKLSAgICAgICAgICAgICMgU3RhcnRzIHNtYWxsLCBzY2FsZXMgZXhwb25lbnRpYWxseQotICAgICAgICAgICAgc2VsZi5taW5fcmVhZHNpemUgPSAxMDAKLSAgICAgICAgICAgIGZpbGVvYmogPSBfUGFkZGVkRmlsZShmaWxlb2JqKQogCiAgICAgICAgIGVsaWYgbW9kZS5zdGFydHN3aXRoKCgndycsICdhJywgJ3gnKSk6CiAgICAgICAgICAgICBzZWxmLm1vZGUgPSBXUklURQpAQCAtMjA5LDEyICsxODIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC16bGliLk1BWF9XQklUUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWIuREVGX01FTV9MRVZFTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApCisgICAgICAgICAgICBzZWxmLl93cml0ZV9tdGltZSA9IG10aW1lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1vZGU6IHshcn0iLmZvcm1hdChtb2RlKSkKIAogICAgICAgICBzZWxmLmZpbGVvYmogPSBmaWxlb2JqCi0gICAgICAgIHNlbGYub2Zmc2V0ID0gMAotICAgICAgICBzZWxmLm10aW1lID0gbXRpbWUKIAogICAgICAgICBpZiBzZWxmLm1vZGUgPT0gV1JJVEU6CiAgICAgICAgICAgICBzZWxmLl93cml0ZV9nemlwX2hlYWRlcigpCkBAIC0yMjcsMjYgKzE5OSwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZSArICIuZ3oiCiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtdGltZShzZWxmKToKKyAgICAgICAgIiIiTGFzdCBtb2RpZmljYXRpb24gdGltZSByZWFkIGZyb20gc3RyZWFtLCBvciBOb25lIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIucmF3Ll9sYXN0X210aW1lCisKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIGZpbGVvYmogPSBzZWxmLmZpbGVvYmoKLSAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlb2JqLCBfUGFkZGVkRmlsZSk6Ci0gICAgICAgICAgICBmaWxlb2JqID0gZmlsZW9iai5maWxlCi0gICAgICAgIHMgPSByZXByKGZpbGVvYmopCisgICAgICAgIHMgPSByZXByKHNlbGYuZmlsZW9iaikKICAgICAgICAgcmV0dXJuICc8Z3ppcCAnICsgc1sxOi0xXSArICcgJyArIGhleChpZChzZWxmKSkgKyAnPicKIAotICAgIGRlZiBfY2hlY2tfY2xvc2VkKHNlbGYpOgotICAgICAgICAiIiJSYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSB1bmRlcmx5aW5nIGZpbGUgb2JqZWN0IGhhcyBiZWVuIGNsb3NlZC4KLQotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlLicpCi0KICAgICBkZWYgX2luaXRfd3JpdGUoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBzZWxmLm5hbWUgPSBmaWxlbmFtZQotICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoYiIiKSAmIDB4ZmZmZmZmZmYKKyAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGIiIikKICAgICAgICAgc2VsZi5zaXplID0gMAogICAgICAgICBzZWxmLndyaXRlYnVmID0gW10KICAgICAgICAgc2VsZi5idWZzaXplID0gMAorICAgICAgICBzZWxmLm9mZnNldCA9IDAgICMgQ3VycmVudCBmaWxlIG9mZnNldCBmb3Igc2VlaygpLCB0ZWxsKCksIGV0YwogCiAgICAgZGVmIF93cml0ZV9nemlwX2hlYWRlcihzZWxmKToKICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKGInXDAzN1wyMTMnKSAgICAgICAgICAgICAjIG1hZ2ljIGhlYWRlcgpAQCAtMjY1LDcgKzIzMyw3IEBACiAgICAgICAgIGlmIGZuYW1lOgogICAgICAgICAgICAgZmxhZ3MgPSBGTkFNRQogICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoY2hyKGZsYWdzKS5lbmNvZGUoJ2xhdGluLTEnKSkKLSAgICAgICAgbXRpbWUgPSBzZWxmLm10aW1lCisgICAgICAgIG10aW1lID0gc2VsZi5fd3JpdGVfbXRpbWUKICAgICAgICAgaWYgbXRpbWUgaXMgTm9uZToKICAgICAgICAgICAgIG10aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgd3JpdGUzMnUoc2VsZi5maWxlb2JqLCBpbnQobXRpbWUpKQpAQCAtMjc0LDU5ICsyNDIsOCBAQAogICAgICAgICBpZiBmbmFtZToKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShmbmFtZSArIGInXDAwMCcpCiAKLSAgICBkZWYgX2luaXRfcmVhZChzZWxmKToKLSAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGIiIikgJiAweGZmZmZmZmZmCi0gICAgICAgIHNlbGYuc2l6ZSA9IDAKLQotICAgIGRlZiBfcmVhZF9leGFjdChzZWxmLCBuKToKLSAgICAgICAgZGF0YSA9IHNlbGYuZmlsZW9iai5yZWFkKG4pCi0gICAgICAgIHdoaWxlIGxlbihkYXRhKSA8IG46Ci0gICAgICAgICAgICBiID0gc2VsZi5maWxlb2JqLnJlYWQobiAtIGxlbihkYXRhKSkKLSAgICAgICAgICAgIGlmIG5vdCBiOgotICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIHRoZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZC1vZi1zdHJlYW0gbWFya2VyIHdhcyByZWFjaGVkIikKLSAgICAgICAgICAgIGRhdGEgKz0gYgotICAgICAgICByZXR1cm4gZGF0YQotCi0gICAgZGVmIF9yZWFkX2d6aXBfaGVhZGVyKHNlbGYpOgotICAgICAgICBtYWdpYyA9IHNlbGYuZmlsZW9iai5yZWFkKDIpCi0gICAgICAgIGlmIG1hZ2ljID09IGInJzoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIGlmIG1hZ2ljICE9IGInXDAzN1wyMTMnOgotICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKLQotICAgICAgICBtZXRob2QsIGZsYWcsIHNlbGYubXRpbWUgPSBzdHJ1Y3QudW5wYWNrKCI8QkJJeHgiLCBzZWxmLl9yZWFkX2V4YWN0KDgpKQotICAgICAgICBpZiBtZXRob2QgIT0gODoKLSAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ1Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kJykKLQotICAgICAgICBpZiBmbGFnICYgRkVYVFJBOgotICAgICAgICAgICAgIyBSZWFkICYgZGlzY2FyZCB0aGUgZXh0cmEgZmllbGQsIGlmIHByZXNlbnQKLSAgICAgICAgICAgIGV4dHJhX2xlbiwgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIHNlbGYuX3JlYWRfZXhhY3QoMikpCi0gICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KGV4dHJhX2xlbikKLSAgICAgICAgaWYgZmxhZyAmIEZOQU1FOgotICAgICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKLSAgICAgICAgICAgICAgICBpZiBub3QgcyBvciBzPT1iJ1wwMDAnOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBmbGFnICYgRkNPTU1FTlQ6Ci0gICAgICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgYSBjb21tZW50Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHMgPSBzZWxmLmZpbGVvYmoucmVhZCgxKQotICAgICAgICAgICAgICAgIGlmIG5vdCBzIG9yIHM9PWInXDAwMCc6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGZsYWcgJiBGSENSQzoKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfZXhhY3QoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCi0KLSAgICAgICAgdW51c2VkID0gc2VsZi5maWxlb2JqLnVudXNlZCgpCi0gICAgICAgIGlmIHVudXNlZDoKLSAgICAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZGVjb21wcmVzcyh1bnVzZWQpCi0gICAgICAgICAgICBzZWxmLl9hZGRfcmVhZF9kYXRhKHVuY29tcHJlc3MpCi0gICAgICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgd3JpdGUoc2VsZixkYXRhKToKLSAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBXUklURToKICAgICAgICAgICAgIGltcG9ydCBlcnJubwogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCkBAIC0zMzQsMTY2ICsyNTEsNDcgQEAKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cml0ZSgpIG9uIGNsb3NlZCBHemlwRmlsZSBvYmplY3QiKQogCi0gICAgICAgICMgQ29udmVydCBkYXRhIHR5cGUgaWYgY2FsbGVkIGJ5IGlvLkJ1ZmZlcmVkV3JpdGVyLgotICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIG1lbW9yeXZpZXcpOgotICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9ieXRlcygpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpOgorICAgICAgICAgICAgbGVuZ3RoID0gbGVuKGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGFjY2VwdCBhbnkgZGF0YSB0aGF0IHN1cHBvcnRzIHRoZSBidWZmZXIgcHJvdG9jb2wKKyAgICAgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGRhdGEpCisgICAgICAgICAgICBsZW5ndGggPSBkYXRhLm5ieXRlcwogCi0gICAgICAgIGlmIGxlbihkYXRhKSA+IDA6CisgICAgICAgIGlmIGxlbmd0aCA+IDA6CiAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoc2VsZi5jb21wcmVzcy5jb21wcmVzcyhkYXRhKSkKLSAgICAgICAgICAgIHNlbGYuc2l6ZSArPSBsZW4oZGF0YSkKLSAgICAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihkYXRhLCBzZWxmLmNyYykgJiAweGZmZmZmZmZmCi0gICAgICAgICAgICBzZWxmLm9mZnNldCArPSBsZW4oZGF0YSkKKyAgICAgICAgICAgIHNlbGYuc2l6ZSArPSBsZW5ndGgKKyAgICAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihkYXRhLCBzZWxmLmNyYykKKyAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IGxlbmd0aAogCi0gICAgICAgIHJldHVybiBsZW4oZGF0YSkKKyAgICAgICAgcmV0dXJuIGxlbmd0aAogCiAgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6Ci0gICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCi0KLSAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gYicnCi0KLSAgICAgICAgcmVhZHNpemUgPSAxMDI0Ci0gICAgICAgIGlmIHNpemUgPCAwOiAgICAgICAgIyBnZXQgdGhlIHdob2xlIHRoaW5nCi0gICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkKHJlYWRzaXplKToKLSAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCi0gICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKLSAgICAgICAgZWxzZTogICAgICAgICAgICAgICAjIGp1c3QgZ2V0IHNvbWUgbW9yZSBvZiBpdAotICAgICAgICAgICAgd2hpbGUgc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFkKHJlYWRzaXplKToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotCi0gICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0Ci0gICAgICAgIGNodW5rID0gc2VsZi5leHRyYWJ1ZltvZmZzZXQ6IG9mZnNldCArIHNpemVdCi0gICAgICAgIHNlbGYuZXh0cmFzaXplID0gc2VsZi5leHRyYXNpemUgLSBzaXplCi0KLSAgICAgICAgc2VsZi5vZmZzZXQgKz0gc2l6ZQotICAgICAgICByZXR1cm4gY2h1bmsKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlci5yZWFkKHNpemUpCiAKICAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZT0tMSk6Ci0gICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCisgICAgICAgICIiIkltcGxlbWVudHMgQnVmZmVyZWRJT0Jhc2UucmVhZDEoKQorCisgICAgICAgIFJlYWRzIHVwIHRvIGEgYnVmZmVyJ3Mgd29ydGggb2YgZGF0YSBpcyBzaXplIGlzIG5lZ2F0aXZlLiIiIgorICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUJBREYsICJyZWFkMSgpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAotICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLmZpbGVvYmogaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBiJycKLQotICAgICAgICAjIEZvciBjZXJ0YWluIGlucHV0IGRhdGEsIGEgc2luZ2xlIGNhbGwgdG8gX3JlYWQoKSBtYXkgbm90IHJldHVybgotICAgICAgICAjIGFueSBkYXRhLiBJbiB0aGlzIGNhc2UsIHJldHJ5IHVudGlsIHdlIGdldCBzb21lIGRhdGEgb3IgcmVhY2ggRU9GLgotICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLl9yZWFkKCk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGlmIHNpemUgPCAwIG9yIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgIHNpemUgPSBzZWxmLmV4dHJhc2l6ZQotCi0gICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0Ci0gICAgICAgIGNodW5rID0gc2VsZi5leHRyYWJ1ZltvZmZzZXQ6IG9mZnNldCArIHNpemVdCi0gICAgICAgIHNlbGYuZXh0cmFzaXplIC09IHNpemUKLSAgICAgICAgc2VsZi5vZmZzZXQgKz0gc2l6ZQotICAgICAgICByZXR1cm4gY2h1bmsKKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBzaXplID0gaW8uREVGQVVMVF9CVUZGRVJfU0laRQorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLnJlYWQxKHNpemUpCiAKICAgICBkZWYgcGVlayhzZWxmLCBuKToKKyAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCiAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicGVlaygpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKLQotICAgICAgICAjIERvIG5vdCByZXR1cm4gcmlkaWN1bG91c2x5IHNtYWxsIGJ1ZmZlcnMsIGZvciBvbmUgY29tbW9uIGlkaW9tCi0gICAgICAgICMgaXMgdG8gY2FsbCBwZWVrKDEpIGFuZCBleHBlY3QgbW9yZSBieXRlcyBpbiByZXR1cm4uCi0gICAgICAgIGlmIG4gPCAxMDA6Ci0gICAgICAgICAgICBuID0gMTAwCi0gICAgICAgIGlmIHNlbGYuZXh0cmFzaXplID09IDA6Ci0gICAgICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYicnCi0gICAgICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGRvbid0IHJldHVybiBiIiIgaWYgd2UgaGF2ZW4ndCByZWFjaGVkIEVPRi4KLSAgICAgICAgICAgICMgMTAyNCBpcyB0aGUgc2FtZSBidWZmZXJpbmcgaGV1cmlzdGljIHVzZWQgaW4gcmVhZCgpCi0gICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA9PSAwIGFuZCBzZWxmLl9yZWFkKG1heChuLCAxMDI0KSk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBvZmZzZXQgPSBzZWxmLm9mZnNldCAtIHNlbGYuZXh0cmFzdGFydAotICAgICAgICByZW1haW5pbmcgPSBzZWxmLmV4dHJhc2l6ZQotICAgICAgICBhc3NlcnQgcmVtYWluaW5nID09IGxlbihzZWxmLmV4dHJhYnVmKSAtIG9mZnNldAotICAgICAgICByZXR1cm4gc2VsZi5leHRyYWJ1ZltvZmZzZXQ6b2Zmc2V0ICsgbl0KLQotICAgIGRlZiBfdW5yZWFkKHNlbGYsIGJ1Zik6Ci0gICAgICAgIHNlbGYuZXh0cmFzaXplID0gbGVuKGJ1ZikgKyBzZWxmLmV4dHJhc2l6ZQotICAgICAgICBzZWxmLm9mZnNldCAtPSBsZW4oYnVmKQotCi0gICAgZGVmIF9yZWFkKHNlbGYsIHNpemU9MTAyNCk6Ci0gICAgICAgIGlmIHNlbGYuZmlsZW9iaiBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgaWYgc2VsZi5fbmV3X21lbWJlcjoKLSAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCi0gICAgICAgICAgICAjIGp1bXAgdG8gdGhlIG5leHQgbWVtYmVyLCBpZiB0aGVyZSBpcyBvbmUuCi0gICAgICAgICAgICBzZWxmLl9pbml0X3JlYWQoKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWRfZ3ppcF9oZWFkZXIoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIHNlbGYuZGVjb21wcmVzcyA9IHpsaWIuZGVjb21wcmVzc29iaigtemxpYi5NQVhfV0JJVFMpCi0gICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gRmFsc2UKLQotICAgICAgICAjIFJlYWQgYSBjaHVuayBvZiBkYXRhIGZyb20gdGhlIGZpbGUKLSAgICAgICAgYnVmID0gc2VsZi5maWxlb2JqLnJlYWQoc2l6ZSkKLQotICAgICAgICAjIElmIHRoZSBFT0YgaGFzIGJlZW4gcmVhY2hlZCwgZmx1c2ggdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0Ci0gICAgICAgICMgYW5kIG1hcmsgdGhpcyBvYmplY3QgYXMgZmluaXNoZWQuCi0KLSAgICAgICAgaWYgYnVmID09IGIiIjoKLSAgICAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZmx1c2goKQotICAgICAgICAgICAgIyBQcmVwZW5kIHRoZSBhbHJlYWR5IHJlYWQgYnl0ZXMgdG8gdGhlIGZpbGVvYmogdG8gdGhleSBjYW4gYmUKLSAgICAgICAgICAgICMgc2VlbiBieSBfcmVhZF9lb2YoKQotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnByZXBlbmQoc2VsZi5kZWNvbXByZXNzLnVudXNlZF9kYXRhLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5fcmVhZF9lb2YoKQotICAgICAgICAgICAgc2VsZi5fYWRkX3JlYWRfZGF0YSggdW5jb21wcmVzcyApCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3MoYnVmKQotICAgICAgICBzZWxmLl9hZGRfcmVhZF9kYXRhKCB1bmNvbXByZXNzICkKLQotICAgICAgICBpZiBzZWxmLmRlY29tcHJlc3MudW51c2VkX2RhdGEgIT0gYiIiOgotICAgICAgICAgICAgIyBFbmRpbmcgY2FzZTogd2UndmUgY29tZSB0byB0aGUgZW5kIG9mIGEgbWVtYmVyIGluIHRoZSBmaWxlLAotICAgICAgICAgICAgIyBzbyBzZWVrIGJhY2sgdG8gdGhlIHN0YXJ0IG9mIHRoZSB1bnVzZWQgZGF0YSwgZmluaXNoIHVwCi0gICAgICAgICAgICAjIHRoaXMgbWVtYmVyLCBhbmQgcmVhZCBhIG5ldyBnemlwIGhlYWRlci4KLSAgICAgICAgICAgICMgUHJlcGVuZCB0aGUgYWxyZWFkeSByZWFkIGJ5dGVzIHRvIHRoZSBmaWxlb2JqIHRvIHRoZXkgY2FuIGJlCi0gICAgICAgICAgICAjIHNlZW4gYnkgX3JlYWRfZW9mKCkgYW5kIF9yZWFkX2d6aXBfaGVhZGVyKCkKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai5wcmVwZW5kKHNlbGYuZGVjb21wcmVzcy51bnVzZWRfZGF0YSwgVHJ1ZSkKLSAgICAgICAgICAgICMgQ2hlY2sgdGhlIENSQyBhbmQgZmlsZSBzaXplLCBhbmQgc2V0IHRoZSBmbGFnIHNvIHdlIHJlYWQKLSAgICAgICAgICAgICMgYSBuZXcgbWVtYmVyIG9uIHRoZSBuZXh0IGNhbGwKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfZW9mKCkKLSAgICAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBUcnVlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2FkZF9yZWFkX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihkYXRhLCBzZWxmLmNyYykgJiAweGZmZmZmZmZmCi0gICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0Ci0gICAgICAgIHNlbGYuZXh0cmFidWYgPSBzZWxmLmV4dHJhYnVmW29mZnNldDpdICsgZGF0YQotICAgICAgICBzZWxmLmV4dHJhc2l6ZSA9IHNlbGYuZXh0cmFzaXplICsgbGVuKGRhdGEpCi0gICAgICAgIHNlbGYuZXh0cmFzdGFydCA9IHNlbGYub2Zmc2V0Ci0gICAgICAgIHNlbGYuc2l6ZSA9IHNlbGYuc2l6ZSArIGxlbihkYXRhKQotCi0gICAgZGVmIF9yZWFkX2VvZihzZWxmKToKLSAgICAgICAgIyBXZSd2ZSByZWFkIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUKLSAgICAgICAgIyBXZSBjaGVjayB0aGUgdGhhdCB0aGUgY29tcHV0ZWQgQ1JDIGFuZCBzaXplIG9mIHRoZQotICAgICAgICAjIHVuY29tcHJlc3NlZCBkYXRhIG1hdGNoZXMgdGhlIHN0b3JlZCB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIHNpemUKLSAgICAgICAgIyBzdG9yZWQgaXMgdGhlIHRydWUgZmlsZSBzaXplIG1vZCAyKiozMi4KLSAgICAgICAgY3JjMzIsIGlzaXplID0gc3RydWN0LnVucGFjaygiPElJIiwgc2VsZi5fcmVhZF9leGFjdCg4KSkKLSAgICAgICAgaWYgY3JjMzIgIT0gc2VsZi5jcmM6Ci0gICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDUkMgY2hlY2sgZmFpbGVkICVzICE9ICVzIiAlIChoZXgoY3JjMzIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4KHNlbGYuY3JjKSkpCi0gICAgICAgIGVsaWYgaXNpemUgIT0gKHNlbGYuc2l6ZSAmIDB4ZmZmZmZmZmYpOgotICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKLQotICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KLSAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0Ci0gICAgICAgICMgbm9uLXplcm8gYnl0ZS4gU2VlIGh0dHA6Ly93d3cuZ3ppcC5vcmcvI2ZhcTgKLSAgICAgICAgYyA9IGIiXHgwMCIKLSAgICAgICAgd2hpbGUgYyA9PSBiIlx4MDAiOgotICAgICAgICAgICAgYyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgIGlmIGM6Ci0gICAgICAgICAgICBzZWxmLmZpbGVvYmoucHJlcGVuZChjLCBUcnVlKQorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLnBlZWsobikKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBjbG9zZWQoc2VsZik6CkBAIC01MTAsNiArMzA4LDggQEAKICAgICAgICAgICAgICAgICB3cml0ZTMydShmaWxlb2JqLCBzZWxmLmNyYykKICAgICAgICAgICAgICAgICAjIHNlbGYuc2l6ZSBtYXkgZXhjZWVkIDJHQiwgb3IgZXZlbiA0R0IKICAgICAgICAgICAgICAgICB3cml0ZTMydShmaWxlb2JqLCBzZWxmLnNpemUgJiAweGZmZmZmZmZmKQorICAgICAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gUkVBRDoKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgbXlmaWxlb2JqID0gc2VsZi5teWZpbGVvYmoKICAgICAgICAgICAgIGlmIG15ZmlsZW9iajoKQEAgLTUxNyw3ICszMTcsNyBAQAogICAgICAgICAgICAgICAgIG15ZmlsZW9iai5jbG9zZSgpCiAKICAgICBkZWYgZmx1c2goc2VsZix6bGliX21vZGU9emxpYi5aX1NZTkNfRkxVU0gpOgotICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgaWYgc2VsZi5tb2RlID09IFdSSVRFOgogICAgICAgICAgICAgIyBFbnN1cmUgdGhlIGNvbXByZXNzb3IncyBidWZmZXIgaXMgZmx1c2hlZAogICAgICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKHNlbGYuY29tcHJlc3MuZmx1c2goemxpYl9tb2RlKSkKQEAgLTUzNiwxMiArMzM2LDcgQEAKICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlJycnCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQotICAgICAgICBzZWxmLmZpbGVvYmouc2VlaygwKQotICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQotICAgICAgICBzZWxmLmV4dHJhYnVmID0gYiIiCi0gICAgICAgIHNlbGYuZXh0cmFzaXplID0gMAotICAgICAgICBzZWxmLmV4dHJhc3RhcnQgPSAwCi0gICAgICAgIHNlbGYub2Zmc2V0ID0gMAorICAgICAgICBzZWxmLl9idWZmZXIuc2VlaygwKQogCiAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2RlID09IFJFQUQKQEAgLTU1MiwxMyArMzQ3LDEzIEBACiAgICAgZGVmIHNlZWthYmxlKHNlbGYpOgogICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9MCk6Ci0gICAgICAgIGlmIHdoZW5jZToKLSAgICAgICAgICAgIGlmIHdoZW5jZSA9PSAxOgotICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0ICsgb2Zmc2V0Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlZWsgZnJvbSBlbmQgbm90IHN1cHBvcnRlZCcpCisgICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9aW8uU0VFS19TRVQpOgogICAgICAgICBpZiBzZWxmLm1vZGUgPT0gV1JJVEU6CisgICAgICAgICAgICBpZiB3aGVuY2UgIT0gaW8uU0VFS19TRVQ6CisgICAgICAgICAgICAgICAgaWYgd2hlbmNlID09IGlvLlNFRUtfQ1VSOgorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzZWxmLm9mZnNldCArIG9mZnNldAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlZWsgZnJvbSBlbmQgbm90IHN1cHBvcnRlZCcpCiAgICAgICAgICAgICBpZiBvZmZzZXQgPCBzZWxmLm9mZnNldDoKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdOZWdhdGl2ZSBzZWVrIGluIHdyaXRlIG1vZGUnKQogICAgICAgICAgICAgY291bnQgPSBvZmZzZXQgLSBzZWxmLm9mZnNldApAQCAtNTY3LDU1ICszNjIsMTU2IEBACiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShjaHVuaykKICAgICAgICAgICAgIHNlbGYud3JpdGUoYnl0ZXMoY291bnQgJSAxMDI0KSkKICAgICAgICAgZWxpZiBzZWxmLm1vZGUgPT0gUkVBRDoKLSAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYub2Zmc2V0OgotICAgICAgICAgICAgICAgICMgZm9yIG5lZ2F0aXZlIHNlZWssIHJld2luZCBhbmQgZG8gcG9zaXRpdmUgc2VlawotICAgICAgICAgICAgICAgIHNlbGYucmV3aW5kKCkKLSAgICAgICAgICAgIGNvdW50ID0gb2Zmc2V0IC0gc2VsZi5vZmZzZXQKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGNvdW50IC8vIDEwMjQpOgotICAgICAgICAgICAgICAgIHNlbGYucmVhZCgxMDI0KQotICAgICAgICAgICAgc2VsZi5yZWFkKGNvdW50ICUgMTAyNCkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlci5zZWVrKG9mZnNldCwgd2hlbmNlKQogCiAgICAgICAgIHJldHVybiBzZWxmLm9mZnNldAogCiAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlci5yZWFkbGluZShzaXplKQorCisKK2NsYXNzIF9HemlwUmVhZGVyKF9jb21wcmVzc2lvbi5EZWNvbXByZXNzUmVhZGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnApOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKF9QYWRkZWRGaWxlKGZwKSwgemxpYi5kZWNvbXByZXNzb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgIHdiaXRzPS16bGliLk1BWF9XQklUUykKKyAgICAgICAgIyBTZXQgZmxhZyBpbmRpY2F0aW5nIHN0YXJ0IG9mIGEgbmV3IG1lbWJlcgorICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQorICAgICAgICBzZWxmLl9sYXN0X210aW1lID0gTm9uZQorCisgICAgZGVmIF9pbml0X3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYuX2NyYyA9IHpsaWIuY3JjMzIoYiIiKQorICAgICAgICBzZWxmLl9zdHJlYW1fc2l6ZSA9IDAgICMgRGVjb21wcmVzc2VkIHNpemUgb2YgdW5jb25jYXRlbmF0ZWQgc3RyZWFtCisKKyAgICBkZWYgX3JlYWRfZXhhY3Qoc2VsZiwgbik6CisgICAgICAgICcnJ1JlYWQgZXhhY3RseSAqbiogYnl0ZXMgZnJvbSBgc2VsZi5fZnBgCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgYmVjYXVzZSBzZWxmLl9mcCBtYXkgYmUgdW5idWZmZXJlZCwKKyAgICAgICAgaS5lLiByZXR1cm4gc2hvcnQgcmVhZHMuCisgICAgICAgICcnJworCisgICAgICAgIGRhdGEgPSBzZWxmLl9mcC5yZWFkKG4pCisgICAgICAgIHdoaWxlIGxlbihkYXRhKSA8IG46CisgICAgICAgICAgICBiID0gc2VsZi5fZnAucmVhZChuIC0gbGVuKGRhdGEpKQorICAgICAgICAgICAgaWYgbm90IGI6CisgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIkNvbXByZXNzZWQgZmlsZSBlbmRlZCBiZWZvcmUgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kLW9mLXN0cmVhbSBtYXJrZXIgd2FzIHJlYWNoZWQiKQorICAgICAgICAgICAgZGF0YSArPSBiCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgX3JlYWRfZ3ppcF9oZWFkZXIoc2VsZik6CisgICAgICAgIG1hZ2ljID0gc2VsZi5fZnAucmVhZCgyKQorICAgICAgICBpZiBtYWdpYyA9PSBiJyc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBtYWdpYyAhPSBiJ1wwMzdcMjEzJzoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ05vdCBhIGd6aXBwZWQgZmlsZSAoJXIpJyAlIG1hZ2ljKQorCisgICAgICAgIChtZXRob2QsIGZsYWcsCisgICAgICAgICBzZWxmLl9sYXN0X210aW1lKSA9IHN0cnVjdC51bnBhY2soIjxCQkl4eCIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCisgICAgICAgIGlmIG1ldGhvZCAhPSA4OgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnKQorCisgICAgICAgIGlmIGZsYWcgJiBGRVhUUkE6CisgICAgICAgICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSBleHRyYSBmaWVsZCwgaWYgcHJlc2VudAorICAgICAgICAgICAgZXh0cmFfbGVuLCA9IHN0cnVjdC51bnBhY2soIjxIIiwgc2VsZi5fcmVhZF9leGFjdCgyKSkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZXhhY3QoZXh0cmFfbGVuKQorICAgICAgICBpZiBmbGFnICYgRk5BTUU6CisgICAgICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZpbGVuYW1lCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHMgPSBzZWxmLl9mcC5yZWFkKDEpCisgICAgICAgICAgICAgICAgaWYgbm90IHMgb3Igcz09YidcMDAwJzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgZmxhZyAmIEZDT01NRU5UOgorICAgICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIGEgY29tbWVudAorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBzID0gc2VsZi5fZnAucmVhZCgxKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzIG9yIHM9PWInXDAwMCc6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGZsYWcgJiBGSENSQzoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZXhhY3QoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKICAgICAgICAgaWYgc2l6ZSA8IDA6Ci0gICAgICAgICAgICAjIFNob3J0Y3V0IGNvbW1vbiBjYXNlIC0gbmV3bGluZSBmb3VuZCBpbiBidWZmZXIuCi0gICAgICAgICAgICBvZmZzZXQgPSBzZWxmLm9mZnNldCAtIHNlbGYuZXh0cmFzdGFydAotICAgICAgICAgICAgaSA9IHNlbGYuZXh0cmFidWYuZmluZChiJ1xuJywgb2Zmc2V0KSArIDEKLSAgICAgICAgICAgIGlmIGkgPiAwOgotICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFzaXplIC09IGkgLSBvZmZzZXQKLSAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSBpIC0gb2Zmc2V0Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0cmFidWZbb2Zmc2V0OiBpXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGFsbCgpCisgICAgICAgICMgc2l6ZT0wIGlzIHNwZWNpYWwgYmVjYXVzZSBkZWNvbXByZXNzKG1heF9sZW5ndGg9MCkgaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBpZiBub3Qgc2l6ZToKKyAgICAgICAgICAgIHJldHVybiBiIiIKIAotICAgICAgICAgICAgc2l6ZSA9IHN5cy5tYXhzaXplCi0gICAgICAgICAgICByZWFkc2l6ZSA9IHNlbGYubWluX3JlYWRzaXplCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWFkc2l6ZSA9IHNpemUKLSAgICAgICAgYnVmcyA9IFtdCi0gICAgICAgIHdoaWxlIHNpemUgIT0gMDoKLSAgICAgICAgICAgIGMgPSBzZWxmLnJlYWQocmVhZHNpemUpCi0gICAgICAgICAgICBpID0gYy5maW5kKGInXG4nKQorICAgICAgICAjIEZvciBjZXJ0YWluIGlucHV0IGRhdGEsIGEgc2luZ2xlCisgICAgICAgICMgY2FsbCB0byBkZWNvbXByZXNzKCkgbWF5IG5vdCByZXR1cm4KKyAgICAgICAgIyBhbnkgZGF0YS4gSW4gdGhpcyBjYXNlLCByZXRyeSB1bnRpbCB3ZSBnZXQgc29tZSBkYXRhIG9yIHJlYWNoIEVPRi4KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2RlY29tcHJlc3Nvci5lb2Y6CisgICAgICAgICAgICAgICAgIyBFbmRpbmcgY2FzZTogd2UndmUgY29tZSB0byB0aGUgZW5kIG9mIGEgbWVtYmVyIGluIHRoZSBmaWxlLAorICAgICAgICAgICAgICAgICMgc28gZmluaXNoIHVwIHRoaXMgbWVtYmVyLCBhbmQgcmVhZCBhIG5ldyBnemlwIGhlYWRlci4KKyAgICAgICAgICAgICAgICAjIENoZWNrIHRoZSBDUkMgYW5kIGZpbGUgc2l6ZSwgYW5kIHNldCB0aGUgZmxhZyBzbyB3ZSByZWFkCisgICAgICAgICAgICAgICAgIyBhIG5ldyBtZW1iZXIKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCisgICAgICAgICAgICAgICAgc2VsZi5fbmV3X21lbWJlciA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBzZWxmLl9kZWNvbXBfZmFjdG9yeSgKKyAgICAgICAgICAgICAgICAgICAgKipzZWxmLl9kZWNvbXBfYXJncykKIAotICAgICAgICAgICAgIyBXZSBzZXQgaT1zaXplIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCB1bmRlciB0d28KLSAgICAgICAgICAgICMgY29uZGl0aW9uczogMSkgdGhlcmUncyBubyBuZXdsaW5lLCBhbmQgdGhlIGNodW5rIGlzCi0gICAgICAgICAgICAjIGxhcmdlciB0aGFuIHNpemUsIG9yIDIpIHRoZXJlIGlzIGEgbmV3bGluZSwgYnV0IHRoZQotICAgICAgICAgICAgIyByZXN1bHRpbmcgbGluZSB3b3VsZCBiZSBsb25nZXIgdGhhbiAnc2l6ZScuCi0gICAgICAgICAgICBpZiAoc2l6ZSA8PSBpKSBvciAoaSA9PSAtMSBhbmQgbGVuKGMpID4gc2l6ZSk6Ci0gICAgICAgICAgICAgICAgaSA9IHNpemUgLSAxCisgICAgICAgICAgICBpZiBzZWxmLl9uZXdfbWVtYmVyOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAgICAgIyBqdW1wIHRvIHRoZSBuZXh0IG1lbWJlciwgaWYgdGhlcmUgaXMgb25lLgorICAgICAgICAgICAgICAgIHNlbGYuX2luaXRfcmVhZCgpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWRfZ3ppcF9oZWFkZXIoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2l6ZSA9IHNlbGYuX3BvcworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYiIiCisgICAgICAgICAgICAgICAgc2VsZi5fbmV3X21lbWJlciA9IEZhbHNlCiAKLSAgICAgICAgICAgIGlmIGkgPj0gMCBvciBjID09IGInJzoKLSAgICAgICAgICAgICAgICBidWZzLmFwcGVuZChjWzppICsgMV0pICAgICMgQWRkIHBvcnRpb24gb2YgbGFzdCBjaHVuawotICAgICAgICAgICAgICAgIHNlbGYuX3VucmVhZChjW2kgKyAxOl0pICAgIyBQdXNoIGJhY2sgcmVzdCBvZiBjaHVuaworICAgICAgICAgICAgIyBSZWFkIGEgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSBmaWxlCisgICAgICAgICAgICBidWYgPSBzZWxmLl9mcC5yZWFkKGlvLkRFRkFVTFRfQlVGRkVSX1NJWkUpCisKKyAgICAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhidWYsIHNpemUpCisgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IudW5jb25zdW1lZF90YWlsICE9IGIiIjoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC5wcmVwZW5kKHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwpCisgICAgICAgICAgICBlbGlmIHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSAhPSBiIiI6CisgICAgICAgICAgICAgICAgIyBQcmVwZW5kIHRoZSBhbHJlYWR5IHJlYWQgYnl0ZXMgdG8gdGhlIGZpbGVvYmogc28gdGhleSBjYW4KKyAgICAgICAgICAgICAgICAjIGJlIHNlZW4gYnkgX3JlYWRfZW9mKCkgYW5kIF9yZWFkX2d6aXBfaGVhZGVyKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC5wcmVwZW5kKHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSkKKworICAgICAgICAgICAgaWYgdW5jb21wcmVzcyAhPSBiIiI6CiAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGJ1ZiA9PSBiIiI6CisgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIkNvbXByZXNzZWQgZmlsZSBlbmRlZCBiZWZvcmUgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kLW9mLXN0cmVhbSBtYXJrZXIgd2FzIHJlYWNoZWQiKQogCi0gICAgICAgICAgICAjIEFwcGVuZCBjaHVuayB0byBsaXN0LCBkZWNyZWFzZSAnc2l6ZScsCi0gICAgICAgICAgICBidWZzLmFwcGVuZChjKQotICAgICAgICAgICAgc2l6ZSA9IHNpemUgLSBsZW4oYykKLSAgICAgICAgICAgIHJlYWRzaXplID0gbWluKHNpemUsIHJlYWRzaXplICogMikKLSAgICAgICAgaWYgcmVhZHNpemUgPiBzZWxmLm1pbl9yZWFkc2l6ZToKLSAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gbWluKHJlYWRzaXplLCBzZWxmLm1pbl9yZWFkc2l6ZSAqIDIsIDUxMikKLSAgICAgICAgcmV0dXJuIGInJy5qb2luKGJ1ZnMpICMgUmV0dXJuIHJlc3VsdGluZyBsaW5lCisgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQorICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKHVuY29tcHJlc3MpCisgICAgICAgIHJldHVybiB1bmNvbXByZXNzCiAKKyAgICBkZWYgX2FkZF9yZWFkX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX2NyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5fY3JjKQorICAgICAgICBzZWxmLl9zdHJlYW1fc2l6ZSA9IHNlbGYuX3N0cmVhbV9zaXplICsgbGVuKGRhdGEpCisKKyAgICBkZWYgX3JlYWRfZW9mKHNlbGYpOgorICAgICAgICAjIFdlJ3ZlIHJlYWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgICAgICAjIFdlIGNoZWNrIHRoZSB0aGF0IHRoZSBjb21wdXRlZCBDUkMgYW5kIHNpemUgb2YgdGhlCisgICAgICAgICMgdW5jb21wcmVzc2VkIGRhdGEgbWF0Y2hlcyB0aGUgc3RvcmVkIHZhbHVlcy4gIE5vdGUgdGhhdCB0aGUgc2l6ZQorICAgICAgICAjIHN0b3JlZCBpcyB0aGUgdHJ1ZSBmaWxlIHNpemUgbW9kIDIqKjMyLgorICAgICAgICBjcmMzMiwgaXNpemUgPSBzdHJ1Y3QudW5wYWNrKCI8SUkiLCBzZWxmLl9yZWFkX2V4YWN0KDgpKQorICAgICAgICBpZiBjcmMzMiAhPSBzZWxmLl9jcmM6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDUkMgY2hlY2sgZmFpbGVkICVzICE9ICVzIiAlIChoZXgoY3JjMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4KHNlbGYuX2NyYykpKQorICAgICAgICBlbGlmIGlzaXplICE9IChzZWxmLl9zdHJlYW1fc2l6ZSAmIDB4ZmZmZmZmZmYpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKKworICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KKyAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CisgICAgICAgICMgbm9uLXplcm8gYnl0ZS4gU2VlIGh0dHA6Ly93d3cuZ3ppcC5vcmcvI2ZhcTgKKyAgICAgICAgYyA9IGIiXHgwMCIKKyAgICAgICAgd2hpbGUgYyA9PSBiIlx4MDAiOgorICAgICAgICAgICAgYyA9IHNlbGYuX2ZwLnJlYWQoMSkKKyAgICAgICAgaWYgYzoKKyAgICAgICAgICAgIHNlbGYuX2ZwLnByZXBlbmQoYykKKworICAgIGRlZiBfcmV3aW5kKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9yZXdpbmQoKQorICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQogCiBkZWYgY29tcHJlc3MoZGF0YSwgY29tcHJlc3NsZXZlbD05KToKICAgICAiIiJDb21wcmVzcyBkYXRhIGluIG9uZSBzaG90IGFuZCByZXR1cm4gdGhlIGNvbXByZXNzZWQgc3RyaW5nLgpkaWZmIC0tZ2l0IGEvTGliL2hlYXBxLnB5IGIvTGliL2hlYXBxLnB5CmluZGV4IGQ2MTUyMzkuLjBiM2U4OWEgMTAwNjQ0Ci0tLSBhL0xpYi9oZWFwcS5weQorKysgYi9MaWIvaGVhcHEucHkKQEAgLTU0LDcgKzU0LDcgQEAKIAogCiBJbiB0aGUgdHJlZSBhYm92ZSwgZWFjaCBjZWxsIGBrJyBpcyB0b3BwaW5nIGAyKmsrMScgYW5kIGAyKmsrMicuICBJbgotYW4gdXN1YWwgYmluYXJ5IHRvdXJuYW1lbnQgd2Ugc2VlIGluIHNwb3J0cywgZWFjaCBjZWxsIGlzIHRoZSB3aW5uZXIKK2EgdXN1YWwgYmluYXJ5IHRvdXJuYW1lbnQgd2Ugc2VlIGluIHNwb3J0cywgZWFjaCBjZWxsIGlzIHRoZSB3aW5uZXIKIG92ZXIgdGhlIHR3byBjZWxscyBpdCB0b3BzLCBhbmQgd2UgY2FuIHRyYWNlIHRoZSB3aW5uZXIgZG93biB0aGUgdHJlZQogdG8gc2VlIGFsbCBvcHBvbmVudHMgcy9oZSBoYWQuICBIb3dldmVyLCBpbiBtYW55IGNvbXB1dGVyIGFwcGxpY2F0aW9ucwogb2Ygc3VjaCB0b3VybmFtZW50cywgd2UgZG8gbm90IG5lZWQgdG8gdHJhY2UgdGhlIGhpc3Rvcnkgb2YgYSB3aW5uZXIuCkBAIC0xMjcsOCArMTI3LDYgQEAKIF9fYWxsX18gPSBbJ2hlYXBwdXNoJywgJ2hlYXBwb3AnLCAnaGVhcGlmeScsICdoZWFwcmVwbGFjZScsICdtZXJnZScsCiAgICAgICAgICAgICdubGFyZ2VzdCcsICduc21hbGxlc3QnLCAnaGVhcHB1c2hwb3AnXQogCi1mcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlLCBjb3VudCwgdGVlLCBjaGFpbgotCiBkZWYgaGVhcHB1c2goaGVhcCwgaXRlbSk6CiAgICAgIiIiUHVzaCBpdGVtIG9udG8gaGVhcCwgbWFpbnRhaW5pbmcgdGhlIGhlYXAgaW52YXJpYW50LiIiIgogICAgIGhlYXAuYXBwZW5kKGl0ZW0pCkBAIC0xNDEsOSArMTM5LDggQEAKICAgICAgICAgcmV0dXJuaXRlbSA9IGhlYXBbMF0KICAgICAgICAgaGVhcFswXSA9IGxhc3RlbHQKICAgICAgICAgX3NpZnR1cChoZWFwLCAwKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybml0ZW0gPSBsYXN0ZWx0Ci0gICAgcmV0dXJuIHJldHVybml0ZW0KKyAgICAgICAgcmV0dXJuIHJldHVybml0ZW0KKyAgICByZXR1cm4gbGFzdGVsdAogCiBkZWYgaGVhcHJlcGxhY2UoaGVhcCwgaXRlbSk6CiAgICAgIiIiUG9wIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgc21hbGxlc3QgdmFsdWUsIGFuZCBhZGQgdGhlIG5ldyBpdGVtLgpAQCAtMTc5LDEyICsxNzYsMjIgQEAKICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShuLy8yKSk6CiAgICAgICAgIF9zaWZ0dXAoeCwgaSkKIAotZGVmIF9oZWFwcHVzaHBvcF9tYXgoaGVhcCwgaXRlbSk6Ci0gICAgIiIiTWF4aGVhcCB2ZXJzaW9uIG9mIGEgaGVhcHB1c2ggZm9sbG93ZWQgYnkgYSBoZWFwcG9wLiIiIgotICAgIGlmIGhlYXAgYW5kIGl0ZW0gPCBoZWFwWzBdOgotICAgICAgICBpdGVtLCBoZWFwWzBdID0gaGVhcFswXSwgaXRlbQorZGVmIF9oZWFwcG9wX21heChoZWFwKToKKyAgICAiIiJNYXhoZWFwIHZlcnNpb24gb2YgYSBoZWFwcG9wLiIiIgorICAgIGxhc3RlbHQgPSBoZWFwLnBvcCgpICAgICMgcmFpc2VzIGFwcHJvcHJpYXRlIEluZGV4RXJyb3IgaWYgaGVhcCBpcyBlbXB0eQorICAgIGlmIGhlYXA6CisgICAgICAgIHJldHVybml0ZW0gPSBoZWFwWzBdCisgICAgICAgIGhlYXBbMF0gPSBsYXN0ZWx0CiAgICAgICAgIF9zaWZ0dXBfbWF4KGhlYXAsIDApCi0gICAgcmV0dXJuIGl0ZW0KKyAgICAgICAgcmV0dXJuIHJldHVybml0ZW0KKyAgICByZXR1cm4gbGFzdGVsdAorCitkZWYgX2hlYXByZXBsYWNlX21heChoZWFwLCBpdGVtKToKKyAgICAiIiJNYXhoZWFwIHZlcnNpb24gb2YgYSBoZWFwcG9wIGZvbGxvd2VkIGJ5IGEgaGVhcHB1c2guIiIiCisgICAgcmV0dXJuaXRlbSA9IGhlYXBbMF0gICAgIyByYWlzZXMgYXBwcm9wcmlhdGUgSW5kZXhFcnJvciBpZiBoZWFwIGlzIGVtcHR5CisgICAgaGVhcFswXSA9IGl0ZW0KKyAgICBfc2lmdHVwX21heChoZWFwLCAwKQorICAgIHJldHVybiByZXR1cm5pdGVtCiAKIGRlZiBfaGVhcGlmeV9tYXgoeCk6CiAgICAgIiIiVHJhbnNmb3JtIGxpc3QgaW50byBhIG1heGhlYXAsIGluLXBsYWNlLCBpbiBPKGxlbih4KSkgdGltZS4iIiIKQEAgLTE5Miw0MiArMTk5LDYgQEAKICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShuLy8yKSk6CiAgICAgICAgIF9zaWZ0dXBfbWF4KHgsIGkpCiAKLWRlZiBubGFyZ2VzdChuLCBpdGVyYWJsZSk6Ci0gICAgIiIiRmluZCB0aGUgbiBsYXJnZXN0IGVsZW1lbnRzIGluIGEgZGF0YXNldC4KLQotICAgIEVxdWl2YWxlbnQgdG86ICBzb3J0ZWQoaXRlcmFibGUsIHJldmVyc2U9VHJ1ZSlbOm5dCi0gICAgIiIiCi0gICAgaWYgbiA8IDA6Ci0gICAgICAgIHJldHVybiBbXQotICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKLSAgICByZXN1bHQgPSBsaXN0KGlzbGljZShpdCwgbikpCi0gICAgaWYgbm90IHJlc3VsdDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgIGhlYXBpZnkocmVzdWx0KQotICAgIF9oZWFwcHVzaHBvcCA9IGhlYXBwdXNocG9wCi0gICAgZm9yIGVsZW0gaW4gaXQ6Ci0gICAgICAgIF9oZWFwcHVzaHBvcChyZXN1bHQsIGVsZW0pCi0gICAgcmVzdWx0LnNvcnQocmV2ZXJzZT1UcnVlKQotICAgIHJldHVybiByZXN1bHQKLQotZGVmIG5zbWFsbGVzdChuLCBpdGVyYWJsZSk6Ci0gICAgIiIiRmluZCB0aGUgbiBzbWFsbGVzdCBlbGVtZW50cyBpbiBhIGRhdGFzZXQuCi0KLSAgICBFcXVpdmFsZW50IHRvOiAgc29ydGVkKGl0ZXJhYmxlKVs6bl0KLSAgICAiIiIKLSAgICBpZiBuIDwgMDoKLSAgICAgICAgcmV0dXJuIFtdCi0gICAgaXQgPSBpdGVyKGl0ZXJhYmxlKQotICAgIHJlc3VsdCA9IGxpc3QoaXNsaWNlKGl0LCBuKSkKLSAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgX2hlYXBpZnlfbWF4KHJlc3VsdCkKLSAgICBfaGVhcHB1c2hwb3AgPSBfaGVhcHB1c2hwb3BfbWF4Ci0gICAgZm9yIGVsZW0gaW4gaXQ6Ci0gICAgICAgIF9oZWFwcHVzaHBvcChyZXN1bHQsIGVsZW0pCi0gICAgcmVzdWx0LnNvcnQoKQotICAgIHJldHVybiByZXN1bHQKLQogIyAnaGVhcCcgaXMgYSBoZWFwIGF0IGFsbCBpbmRpY2VzID49IHN0YXJ0cG9zLCBleGNlcHQgcG9zc2libHkgZm9yIHBvcy4gIHBvcwogIyBpcyB0aGUgaW5kZXggb2YgYSBsZWFmIHdpdGggYSBwb3NzaWJseSBvdXQtb2Ytb3JkZXIgdmFsdWUuICBSZXN0b3JlIHRoZQogIyBoZWFwIGludmFyaWFudC4KQEAgLTM0MCwxMyArMzExLDcgQEAKICAgICBoZWFwW3Bvc10gPSBuZXdpdGVtCiAgICAgX3NpZnRkb3duX21heChoZWFwLCBzdGFydHBvcywgcG9zKQogCi0jIElmIGF2YWlsYWJsZSwgdXNlIEMgaW1wbGVtZW50YXRpb24KLXRyeToKLSAgICBmcm9tIF9oZWFwcSBpbXBvcnQgKgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLQotZGVmIG1lcmdlKCppdGVyYWJsZXMpOgorZGVmIG1lcmdlKCppdGVyYWJsZXMsIGtleT1Ob25lLCByZXZlcnNlPUZhbHNlKToKICAgICAnJydNZXJnZSBtdWx0aXBsZSBzb3J0ZWQgaW5wdXRzIGludG8gYSBzaW5nbGUgc29ydGVkIG91dHB1dC4KIAogICAgIFNpbWlsYXIgdG8gc29ydGVkKGl0ZXJ0b29scy5jaGFpbigqaXRlcmFibGVzKSkgYnV0IHJldHVybnMgYSBnZW5lcmF0b3IsCkBAIC0zNTYsNTEgKzMyMSwxNTggQEAKICAgICA+Pj4gbGlzdChtZXJnZShbMSwzLDUsN10sIFswLDIsNCw4XSwgWzUsMTAsMTUsMjBdLCBbXSwgWzI1XSkpCiAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDUsIDcsIDgsIDEwLCAxNSwgMjAsIDI1XQogCisgICAgSWYgKmtleSogaXMgbm90IE5vbmUsIGFwcGxpZXMgYSBrZXkgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50IHRvIGRldGVybWluZQorICAgIGl0cyBzb3J0IG9yZGVyLgorCisgICAgPj4+IGxpc3QobWVyZ2UoWydkb2cnLCAnaG9yc2UnXSwgWydjYXQnLCAnZmlzaCcsICdrYW5nYXJvbyddLCBrZXk9bGVuKSkKKyAgICBbJ2RvZycsICdjYXQnLCAnZmlzaCcsICdob3JzZScsICdrYW5nYXJvbyddCisKICAgICAnJycKLSAgICBfaGVhcHBvcCwgX2hlYXByZXBsYWNlLCBfU3RvcEl0ZXJhdGlvbiA9IGhlYXBwb3AsIGhlYXByZXBsYWNlLCBTdG9wSXRlcmF0aW9uCi0gICAgX2xlbiA9IGxlbgogCiAgICAgaCA9IFtdCiAgICAgaF9hcHBlbmQgPSBoLmFwcGVuZAotICAgIGZvciBpdG51bSwgaXQgaW4gZW51bWVyYXRlKG1hcChpdGVyLCBpdGVyYWJsZXMpKToKKworICAgIGlmIHJldmVyc2U6CisgICAgICAgIF9oZWFwaWZ5ID0gX2hlYXBpZnlfbWF4CisgICAgICAgIF9oZWFwcG9wID0gX2hlYXBwb3BfbWF4CisgICAgICAgIF9oZWFwcmVwbGFjZSA9IF9oZWFwcmVwbGFjZV9tYXgKKyAgICAgICAgZGlyZWN0aW9uID0gLTEKKyAgICBlbHNlOgorICAgICAgICBfaGVhcGlmeSA9IGhlYXBpZnkKKyAgICAgICAgX2hlYXBwb3AgPSBoZWFwcG9wCisgICAgICAgIF9oZWFwcmVwbGFjZSA9IGhlYXByZXBsYWNlCisgICAgICAgIGRpcmVjdGlvbiA9IDEKKworICAgIGlmIGtleSBpcyBOb25lOgorICAgICAgICBmb3Igb3JkZXIsIGl0IGluIGVudW1lcmF0ZShtYXAoaXRlciwgaXRlcmFibGVzKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmV4dCA9IGl0Ll9fbmV4dF9fCisgICAgICAgICAgICAgICAgaF9hcHBlbmQoW25leHQoKSwgb3JkZXIgKiBkaXJlY3Rpb24sIG5leHRdKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBfaGVhcGlmeShoKQorICAgICAgICB3aGlsZSBsZW4oaCkgPiAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBvcmRlciwgbmV4dCA9IHMgPSBoWzBdCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHNbMF0gPSBuZXh0KCkgICAgICAgICAgICMgcmFpc2VzIFN0b3BJdGVyYXRpb24gd2hlbiBleGhhdXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgX2hlYXByZXBsYWNlKGgsIHMpICAgICAgIyByZXN0b3JlIGhlYXAgY29uZGl0aW9uCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBfaGVhcHBvcChoKSAgICAgICAgICAgICAgICAgIyByZW1vdmUgZW1wdHkgaXRlcmF0b3IKKyAgICAgICAgaWYgaDoKKyAgICAgICAgICAgICMgZmFzdCBjYXNlIHdoZW4gb25seSBhIHNpbmdsZSBpdGVyYXRvciByZW1haW5zCisgICAgICAgICAgICB2YWx1ZSwgb3JkZXIsIG5leHQgPSBoWzBdCisgICAgICAgICAgICB5aWVsZCB2YWx1ZQorICAgICAgICAgICAgeWllbGQgZnJvbSBuZXh0Ll9fc2VsZl9fCisgICAgICAgIHJldHVybgorCisgICAgZm9yIG9yZGVyLCBpdCBpbiBlbnVtZXJhdGUobWFwKGl0ZXIsIGl0ZXJhYmxlcykpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0ID0gaXQuX19uZXh0X18KLSAgICAgICAgICAgIGhfYXBwZW5kKFtuZXh0KCksIGl0bnVtLCBuZXh0XSkKLSAgICAgICAgZXhjZXB0IF9TdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgdmFsdWUgPSBuZXh0KCkKKyAgICAgICAgICAgIGhfYXBwZW5kKFtrZXkodmFsdWUpLCBvcmRlciAqIGRpcmVjdGlvbiwgdmFsdWUsIG5leHRdKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgIHBhc3MKLSAgICBoZWFwaWZ5KGgpCi0KLSAgICB3aGlsZSBfbGVuKGgpID4gMToKKyAgICBfaGVhcGlmeShoKQorICAgIHdoaWxlIGxlbihoKSA+IDE6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdiwgaXRudW0sIG5leHQgPSBzID0gaFswXQotICAgICAgICAgICAgICAgIHlpZWxkIHYKLSAgICAgICAgICAgICAgICBzWzBdID0gbmV4dCgpICAgICAgICAgICAgICAgIyByYWlzZXMgU3RvcEl0ZXJhdGlvbiB3aGVuIGV4aGF1c3RlZAotICAgICAgICAgICAgICAgIF9oZWFwcmVwbGFjZShoLCBzKSAgICAgICAgICAjIHJlc3RvcmUgaGVhcCBjb25kaXRpb24KLSAgICAgICAgZXhjZXB0IF9TdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgX2hlYXBwb3AoaCkgICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBlbXB0eSBpdGVyYXRvcgorICAgICAgICAgICAgICAgIGtleV92YWx1ZSwgb3JkZXIsIHZhbHVlLCBuZXh0ID0gcyA9IGhbMF0KKyAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZQorICAgICAgICAgICAgICAgIHZhbHVlID0gbmV4dCgpCisgICAgICAgICAgICAgICAgc1swXSA9IGtleSh2YWx1ZSkKKyAgICAgICAgICAgICAgICBzWzJdID0gdmFsdWUKKyAgICAgICAgICAgICAgICBfaGVhcHJlcGxhY2UoaCwgcykKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBfaGVhcHBvcChoKQogICAgIGlmIGg6Ci0gICAgICAgICMgZmFzdCBjYXNlIHdoZW4gb25seSBhIHNpbmdsZSBpdGVyYXRvciByZW1haW5zCi0gICAgICAgIHYsIGl0bnVtLCBuZXh0ID0gaFswXQotICAgICAgICB5aWVsZCB2CisgICAgICAgIGtleV92YWx1ZSwgb3JkZXIsIHZhbHVlLCBuZXh0ID0gaFswXQorICAgICAgICB5aWVsZCB2YWx1ZQogICAgICAgICB5aWVsZCBmcm9tIG5leHQuX19zZWxmX18KIAotIyBFeHRlbmQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBuc21hbGxlc3QgYW5kIG5sYXJnZXN0IHRvIHVzZSBhIGtleT0gYXJndW1lbnQKLV9uc21hbGxlc3QgPSBuc21hbGxlc3QKKworIyBBbGdvcml0aG0gbm90ZXMgZm9yIG5sYXJnZXN0KCkgYW5kIG5zbWFsbGVzdCgpCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgTWFrZSBhIHNpbmdsZSBwYXNzIG92ZXIgdGhlIGRhdGEgd2hpbGUga2VlcGluZyB0aGUgayBtb3N0IGV4dHJlbWUgdmFsdWVzCisjIGluIGEgaGVhcC4gIE1lbW9yeSBjb25zdW1wdGlvbiBpcyBsaW1pdGVkIHRvIGtlZXBpbmcgayB2YWx1ZXMgaW4gYSBsaXN0LgorIworIyBNZWFzdXJlZCBwZXJmb3JtYW5jZSBmb3IgcmFuZG9tIGlucHV0czoKKyMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBjb21wYXJpc29ucworIyAgICBuIGlucHV0cyAgICAgay1leHRyZW1lIHZhbHVlcyAgKGF2ZXJhZ2Ugb2YgNSB0cmlhbHMpICAgJSBtb3JlIHRoYW4gbWluKCkKKyMgLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgMSwwMDAgICAgICAgICAgIDEwMCAgICAgICAgICAgICAgICAgIDMsMzE3ICAgICAgICAgICAgICAgMjMxLjclCisjICAgICAxMCwwMDAgICAgICAgICAgIDEwMCAgICAgICAgICAgICAgICAgMTQsMDQ2ICAgICAgICAgICAgICAgIDQwLjUlCisjICAgIDEwMCwwMDAgICAgICAgICAgIDEwMCAgICAgICAgICAgICAgICAxMDUsNzQ5ICAgICAgICAgICAgICAgICA1LjclCisjICAxLDAwMCwwMDAgICAgICAgICAgIDEwMCAgICAgICAgICAgICAgMSwwMDcsNzUxICAgICAgICAgICAgICAgICAwLjglCisjIDEwLDAwMCwwMDAgICAgICAgICAgIDEwMCAgICAgICAgICAgICAxMCwwMDksNDAxICAgICAgICAgICAgICAgICAwLjElCisjCisjIFRoZW9yZXRpY2FsIG51bWJlciBvZiBjb21wYXJpc29ucyBmb3IgayBzbWFsbGVzdCBvZiBuIHJhbmRvbSBpbnB1dHM6CisjCisjIFN0ZXAgICBDb21wYXJpc29ucyAgICAgICAgICAgICAgICAgIEFjdGlvbgorIyAtLS0tICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgIDEgICAgIDEuNjYgKiBrICAgICAgICAgICAgICAgICAgICAgaGVhcGlmeSB0aGUgZmlyc3Qgay1pbnB1dHMKKyMgIDIgICAgIG4gLSBrICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZSByZW1haW5pbmcgZWxlbWVudHMgdG8gdG9wIG9mIGhlYXAKKyMgIDMgICAgIGsgKiAoMSArIGxnMihrKSkgKiBsbihuL2spICAgcmVwbGFjZSB0aGUgdG9wbW9zdCB2YWx1ZSBvbiB0aGUgaGVhcAorIyAgNCAgICAgayAqIGxnMihrKSAtIChrLzIpICAgICAgICAgICBmaW5hbCBzb3J0IG9mIHRoZSBrIG1vc3QgZXh0cmVtZSB2YWx1ZXMKKyMKKyMgQ29tYmluaW5nIGFuZCBzaW1wbGlmeWluZyBmb3IgYSByb3VnaCBlc3RpbWF0ZSBnaXZlczoKKyMKKyMgICAgICAgIGNvbXBhcmlzb25zID0gbiArIGsgKiAobG9nKGssIDIpICogbG9nKG4vaykgKyBsb2coaywgMikgKyBsb2cobi9rKSkKKyMKKyMgQ29tcHV0aW5nIHRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgZm9yIHN0ZXAgMzoKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgKiBGb3IgdGhlIGktdGggbmV3IHZhbHVlIGZyb20gdGhlIGl0ZXJhYmxlLCB0aGUgcHJvYmFiaWxpdHkgb2YgYmVpbmcgaW4gdGhlCisjICAgayBtb3N0IGV4dHJlbWUgdmFsdWVzIGlzIGsvaS4gIEZvciBleGFtcGxlLCB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIDEwMXN0CisjICAgdmFsdWUgc2VlbiBiZWluZyBpbiB0aGUgMTAwIG1vc3QgZXh0cmVtZSB2YWx1ZXMgaXMgMTAwLzEwMS4KKyMgKiBJZiB0aGUgdmFsdWUgaXMgYSBuZXcgZXh0cmVtZSB2YWx1ZSwgdGhlIGNvc3Qgb2YgaW5zZXJ0aW5nIGl0IGludG8gdGhlCisjICAgaGVhcCBpcyAxICsgbG9nKGssIDIpLgorIyAqIFRoZSBwcm9iYWJpbGl0eSB0aW1lcyB0aGUgY29zdCBnaXZlczoKKyMgICAgICAgICAgICAoay9pKSAqICgxICsgbG9nKGssIDIpKQorIyAqIFN1bW1pbmcgYWNyb3NzIHRoZSByZW1haW5pbmcgbi1rIGVsZW1lbnRzIGdpdmVzOgorIyAgICAgICAgICAgIHN1bSgoay9pKSAqICgxICsgbG9nKGssIDIpKSBmb3IgaSBpbiByYW5nZShrKzEsIG4rMSkpCisjICogVGhpcyByZWR1Y2VzIHRvOgorIyAgICAgICAgICAgIChIKG4pIC0gSChrKSkgKiBrICogKDEgKyBsb2coaywgMikpCisjICogV2hlcmUgSChuKSBpcyB0aGUgbi10aCBoYXJtb25pYyBudW1iZXIgZXN0aW1hdGVkIGJ5OgorIyAgICAgICAgICAgIGdhbW1hID0gMC41NzcyMTU2NjQ5CisjICAgICAgICAgICAgSChuKSA9IGxvZyhuLCBlKSArIGdhbW1hICsgMSAvICgyICogbikKKyMgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhcm1vbmljX3Nlcmllc18obWF0aGVtYXRpY3MpI1JhdGVfb2ZfZGl2ZXJnZW5jZQorIyAqIFN1YnN0aXR1dGluZyB0aGUgSChuKSBmb3JtdWxhOgorIyAgICAgICAgICAgIGNvbXBhcmlzb25zID0gayAqICgxICsgbG9nKGssIDIpKSAqIChsb2cobi9rLCBlKSArICgxL24gLSAxL2spIC8gMikKKyMKKyMgV29yc3QtY2FzZSBmb3Igc3RlcCAzOgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEluIHRoZSB3b3JzdCBjYXNlLCB0aGUgaW5wdXQgZGF0YSBpcyByZXZlcnNlZCBzb3J0ZWQgc28gdGhhdCBldmVyeSBuZXcgZWxlbWVudAorIyBtdXN0IGJlIGluc2VydGVkIGluIHRoZSBoZWFwOgorIworIyAgICAgICAgICAgICBjb21wYXJpc29ucyA9IDEuNjYgKiBrICsgbG9nKGssIDIpICogKG4gLSBrKQorIworIyBBbHRlcm5hdGl2ZSBBbGdvcml0aG1zCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3RoZXIgYWxnb3JpdGhtcyB3ZXJlIG5vdCB1c2VkIGJlY2F1c2UgdGhleToKKyMgMSkgVG9vayBtdWNoIG1vcmUgYXV4aWxpYXJ5IG1lbW9yeSwKKyMgMikgTWFkZSBtdWx0aXBsZSBwYXNzZXMgb3ZlciB0aGUgZGF0YS4KKyMgMykgTWFkZSBtb3JlIGNvbXBhcmlzb25zIGluIGNvbW1vbiBjYXNlcyAoc21hbGwgaywgbGFyZ2Ugbiwgc2VtaS1yYW5kb20gaW5wdXQpLgorIyBTZWUgdGhlIG1vcmUgZGV0YWlsZWQgY29tcGFyaXNvbiBvZiBhcHByb2FjaCBhdDoKKyMgaHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc3NTczLWNvbXBhcmUtYWxnb3JpdGhtcy1mb3ItaGVhcHFzbWFsbGVzdAorCiBkZWYgbnNtYWxsZXN0KG4sIGl0ZXJhYmxlLCBrZXk9Tm9uZSk6CiAgICAgIiIiRmluZCB0aGUgbiBzbWFsbGVzdCBlbGVtZW50cyBpbiBhIGRhdGFzZXQuCiAKICAgICBFcXVpdmFsZW50IHRvOiAgc29ydGVkKGl0ZXJhYmxlLCBrZXk9a2V5KVs6bl0KICAgICAiIiIKLSAgICAjIFNob3J0LWN1dCBmb3Igbj09MSBpcyB0byB1c2UgbWluKCkgd2hlbiBsZW4oaXRlcmFibGUpPjAKKworICAgICMgU2hvcnQtY3V0IGZvciBuPT0xIGlzIHRvIHVzZSBtaW4oKQogICAgIGlmIG4gPT0gMToKICAgICAgICAgaXQgPSBpdGVyKGl0ZXJhYmxlKQotICAgICAgICBoZWFkID0gbGlzdChpc2xpY2UoaXQsIDEpKQotICAgICAgICBpZiBub3QgaGVhZDoKLSAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBzZW50aW5lbCA9IG9iamVjdCgpCiAgICAgICAgIGlmIGtleSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIFttaW4oY2hhaW4oaGVhZCwgaXQpKV0KLSAgICAgICAgcmV0dXJuIFttaW4oY2hhaW4oaGVhZCwgaXQpLCBrZXk9a2V5KV0KKyAgICAgICAgICAgIHJlc3VsdCA9IG1pbihpdCwgZGVmYXVsdD1zZW50aW5lbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IG1pbihpdCwgZGVmYXVsdD1zZW50aW5lbCwga2V5PWtleSkKKyAgICAgICAgcmV0dXJuIFtdIGlmIHJlc3VsdCBpcyBzZW50aW5lbCBlbHNlIFtyZXN1bHRdCiAKICAgICAjIFdoZW4gbj49c2l6ZSwgaXQncyBmYXN0ZXIgdG8gdXNlIHNvcnRlZCgpCiAgICAgdHJ5OgpAQCAtNDEzLDMyICs0ODUsNTcgQEAKIAogICAgICMgV2hlbiBrZXkgaXMgbm9uZSwgdXNlIHNpbXBsZXIgZGVjb3JhdGlvbgogICAgIGlmIGtleSBpcyBOb25lOgotICAgICAgICBpdCA9IHppcChpdGVyYWJsZSwgY291bnQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWNvcmF0ZQotICAgICAgICByZXN1bHQgPSBfbnNtYWxsZXN0KG4sIGl0KQotICAgICAgICByZXR1cm4gW3JbMF0gZm9yIHIgaW4gcmVzdWx0XSAgICAgICAgICAgICAgICAgICAgICAgIyB1bmRlY29yYXRlCisgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKKyAgICAgICAgIyBwdXQgdGhlIHJhbmdlKG4pIGZpcnN0IHNvIHRoYXQgemlwKCkgZG9lc24ndAorICAgICAgICAjIGNvbnN1bWUgb25lIHRvbyBtYW55IGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhdG9yCisgICAgICAgIHJlc3VsdCA9IFsoZWxlbSwgaSkgZm9yIGksIGVsZW0gaW4gemlwKHJhbmdlKG4pLCBpdCldCisgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIF9oZWFwaWZ5X21heChyZXN1bHQpCisgICAgICAgIHRvcCA9IHJlc3VsdFswXVswXQorICAgICAgICBvcmRlciA9IG4KKyAgICAgICAgX2hlYXByZXBsYWNlID0gX2hlYXByZXBsYWNlX21heAorICAgICAgICBmb3IgZWxlbSBpbiBpdDoKKyAgICAgICAgICAgIGlmIGVsZW0gPCB0b3A6CisgICAgICAgICAgICAgICAgX2hlYXByZXBsYWNlKHJlc3VsdCwgKGVsZW0sIG9yZGVyKSkKKyAgICAgICAgICAgICAgICB0b3AgPSByZXN1bHRbMF1bMF0KKyAgICAgICAgICAgICAgICBvcmRlciArPSAxCisgICAgICAgIHJlc3VsdC5zb3J0KCkKKyAgICAgICAgcmV0dXJuIFtyWzBdIGZvciByIGluIHJlc3VsdF0KIAogICAgICMgR2VuZXJhbCBjYXNlLCBzbG93ZXN0IG1ldGhvZAotICAgIGluMSwgaW4yID0gdGVlKGl0ZXJhYmxlKQotICAgIGl0ID0gemlwKG1hcChrZXksIGluMSksIGNvdW50KCksIGluMikgICAgICAgICAgICAgICAgICAgIyBkZWNvcmF0ZQotICAgIHJlc3VsdCA9IF9uc21hbGxlc3QobiwgaXQpCi0gICAgcmV0dXJuIFtyWzJdIGZvciByIGluIHJlc3VsdF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuZGVjb3JhdGUKKyAgICBpdCA9IGl0ZXIoaXRlcmFibGUpCisgICAgcmVzdWx0ID0gWyhrZXkoZWxlbSksIGksIGVsZW0pIGZvciBpLCBlbGVtIGluIHppcChyYW5nZShuKSwgaXQpXQorICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBfaGVhcGlmeV9tYXgocmVzdWx0KQorICAgIHRvcCA9IHJlc3VsdFswXVswXQorICAgIG9yZGVyID0gbgorICAgIF9oZWFwcmVwbGFjZSA9IF9oZWFwcmVwbGFjZV9tYXgKKyAgICBmb3IgZWxlbSBpbiBpdDoKKyAgICAgICAgayA9IGtleShlbGVtKQorICAgICAgICBpZiBrIDwgdG9wOgorICAgICAgICAgICAgX2hlYXByZXBsYWNlKHJlc3VsdCwgKGssIG9yZGVyLCBlbGVtKSkKKyAgICAgICAgICAgIHRvcCA9IHJlc3VsdFswXVswXQorICAgICAgICAgICAgb3JkZXIgKz0gMQorICAgIHJlc3VsdC5zb3J0KCkKKyAgICByZXR1cm4gW3JbMl0gZm9yIHIgaW4gcmVzdWx0XQogCi1fbmxhcmdlc3QgPSBubGFyZ2VzdAogZGVmIG5sYXJnZXN0KG4sIGl0ZXJhYmxlLCBrZXk9Tm9uZSk6CiAgICAgIiIiRmluZCB0aGUgbiBsYXJnZXN0IGVsZW1lbnRzIGluIGEgZGF0YXNldC4KIAogICAgIEVxdWl2YWxlbnQgdG86ICBzb3J0ZWQoaXRlcmFibGUsIGtleT1rZXksIHJldmVyc2U9VHJ1ZSlbOm5dCiAgICAgIiIiCiAKLSAgICAjIFNob3J0LWN1dCBmb3Igbj09MSBpcyB0byB1c2UgbWF4KCkgd2hlbiBsZW4oaXRlcmFibGUpPjAKKyAgICAjIFNob3J0LWN1dCBmb3Igbj09MSBpcyB0byB1c2UgbWF4KCkKICAgICBpZiBuID09IDE6CiAgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKLSAgICAgICAgaGVhZCA9IGxpc3QoaXNsaWNlKGl0LCAxKSkKLSAgICAgICAgaWYgbm90IGhlYWQ6Ci0gICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgc2VudGluZWwgPSBvYmplY3QoKQogICAgICAgICBpZiBrZXkgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBbbWF4KGNoYWluKGhlYWQsIGl0KSldCi0gICAgICAgIHJldHVybiBbbWF4KGNoYWluKGhlYWQsIGl0KSwga2V5PWtleSldCisgICAgICAgICAgICByZXN1bHQgPSBtYXgoaXQsIGRlZmF1bHQ9c2VudGluZWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgPSBtYXgoaXQsIGRlZmF1bHQ9c2VudGluZWwsIGtleT1rZXkpCisgICAgICAgIHJldHVybiBbXSBpZiByZXN1bHQgaXMgc2VudGluZWwgZWxzZSBbcmVzdWx0XQogCiAgICAgIyBXaGVuIG4+PXNpemUsIGl0J3MgZmFzdGVyIHRvIHVzZSBzb3J0ZWQoKQogICAgIHRyeToKQEAgLTQ1MSwyNiArNTQ4LDYwIEBACiAKICAgICAjIFdoZW4ga2V5IGlzIG5vbmUsIHVzZSBzaW1wbGVyIGRlY29yYXRpb24KICAgICBpZiBrZXkgaXMgTm9uZToKLSAgICAgICAgaXQgPSB6aXAoaXRlcmFibGUsIGNvdW50KDAsLTEpKSAgICAgICAgICAgICAgICAgICAgICMgZGVjb3JhdGUKLSAgICAgICAgcmVzdWx0ID0gX25sYXJnZXN0KG4sIGl0KQotICAgICAgICByZXR1cm4gW3JbMF0gZm9yIHIgaW4gcmVzdWx0XSAgICAgICAgICAgICAgICAgICAgICAgIyB1bmRlY29yYXRlCisgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKKyAgICAgICAgcmVzdWx0ID0gWyhlbGVtLCBpKSBmb3IgaSwgZWxlbSBpbiB6aXAocmFuZ2UoMCwgLW4sIC0xKSwgaXQpXQorICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBoZWFwaWZ5KHJlc3VsdCkKKyAgICAgICAgdG9wID0gcmVzdWx0WzBdWzBdCisgICAgICAgIG9yZGVyID0gLW4KKyAgICAgICAgX2hlYXByZXBsYWNlID0gaGVhcHJlcGxhY2UKKyAgICAgICAgZm9yIGVsZW0gaW4gaXQ6CisgICAgICAgICAgICBpZiB0b3AgPCBlbGVtOgorICAgICAgICAgICAgICAgIF9oZWFwcmVwbGFjZShyZXN1bHQsIChlbGVtLCBvcmRlcikpCisgICAgICAgICAgICAgICAgdG9wID0gcmVzdWx0WzBdWzBdCisgICAgICAgICAgICAgICAgb3JkZXIgLT0gMQorICAgICAgICByZXN1bHQuc29ydChyZXZlcnNlPVRydWUpCisgICAgICAgIHJldHVybiBbclswXSBmb3IgciBpbiByZXN1bHRdCiAKICAgICAjIEdlbmVyYWwgY2FzZSwgc2xvd2VzdCBtZXRob2QKLSAgICBpbjEsIGluMiA9IHRlZShpdGVyYWJsZSkKLSAgICBpdCA9IHppcChtYXAoa2V5LCBpbjEpLCBjb3VudCgwLC0xKSwgaW4yKSAgICAgICAgICAgICAgICMgZGVjb3JhdGUKLSAgICByZXN1bHQgPSBfbmxhcmdlc3QobiwgaXQpCi0gICAgcmV0dXJuIFtyWzJdIGZvciByIGluIHJlc3VsdF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuZGVjb3JhdGUKKyAgICBpdCA9IGl0ZXIoaXRlcmFibGUpCisgICAgcmVzdWx0ID0gWyhrZXkoZWxlbSksIGksIGVsZW0pIGZvciBpLCBlbGVtIGluIHppcChyYW5nZSgwLCAtbiwgLTEpLCBpdCldCisgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGhlYXBpZnkocmVzdWx0KQorICAgIHRvcCA9IHJlc3VsdFswXVswXQorICAgIG9yZGVyID0gLW4KKyAgICBfaGVhcHJlcGxhY2UgPSBoZWFwcmVwbGFjZQorICAgIGZvciBlbGVtIGluIGl0OgorICAgICAgICBrID0ga2V5KGVsZW0pCisgICAgICAgIGlmIHRvcCA8IGs6CisgICAgICAgICAgICBfaGVhcHJlcGxhY2UocmVzdWx0LCAoaywgb3JkZXIsIGVsZW0pKQorICAgICAgICAgICAgdG9wID0gcmVzdWx0WzBdWzBdCisgICAgICAgICAgICBvcmRlciAtPSAxCisgICAgcmVzdWx0LnNvcnQocmV2ZXJzZT1UcnVlKQorICAgIHJldHVybiBbclsyXSBmb3IgciBpbiByZXN1bHRdCisKKyMgSWYgYXZhaWxhYmxlLCB1c2UgQyBpbXBsZW1lbnRhdGlvbgordHJ5OgorICAgIGZyb20gX2hlYXBxIGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwordHJ5OgorICAgIGZyb20gX2hlYXBxIGltcG9ydCBfaGVhcHJlcGxhY2VfbWF4CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwordHJ5OgorICAgIGZyb20gX2hlYXBxIGltcG9ydCBfaGVhcGlmeV9tYXgKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCit0cnk6CisgICAgZnJvbSBfaGVhcHEgaW1wb3J0IF9oZWFwcG9wX21heAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgICMgU2ltcGxlIHNhbml0eSB0ZXN0Ci0gICAgaGVhcCA9IFtdCi0gICAgZGF0YSA9IFsxLCAzLCA1LCA3LCA5LCAyLCA0LCA2LCA4LCAwXQotICAgIGZvciBpdGVtIGluIGRhdGE6Ci0gICAgICAgIGhlYXBwdXNoKGhlYXAsIGl0ZW0pCi0gICAgc29ydCA9IFtdCi0gICAgd2hpbGUgaGVhcDoKLSAgICAgICAgc29ydC5hcHBlbmQoaGVhcHBvcChoZWFwKSkKLSAgICBwcmludChzb3J0KQogCiAgICAgaW1wb3J0IGRvY3Rlc3QKLSAgICBkb2N0ZXN0LnRlc3Rtb2QoKQorICAgIHByaW50KGRvY3Rlc3QudGVzdG1vZCgpKQpkaWZmIC0tZ2l0IGEvTGliL2h0bWwvZW50aXRpZXMucHkgYi9MaWIvaHRtbC9lbnRpdGllcy5weQppbmRleCBiZTNmNjI3Li45MWVhNWRhIDEwMDY0NAotLS0gYS9MaWIvaHRtbC9lbnRpdGllcy5weQorKysgYi9MaWIvaHRtbC9lbnRpdGllcy5weQpAQCAtMSw1ICsxLDggQEAKICIiIkhUTUwgY2hhcmFjdGVyIGVudGl0eSByZWZlcmVuY2VzLiIiIgogCitfX2FsbF9fID0gWydodG1sNScsICduYW1lMmNvZGVwb2ludCcsICdjb2RlcG9pbnQybmFtZScsICdlbnRpdHlkZWZzJ10KKworCiAjIG1hcHMgdGhlIEhUTUwgZW50aXR5IG5hbWUgdG8gdGhlIFVuaWNvZGUgY29kZSBwb2ludAogbmFtZTJjb2RlcG9pbnQgPSB7CiAgICAgJ0FFbGlnJzogICAgMHgwMGM2LCAjIGxhdGluIGNhcGl0YWwgbGV0dGVyIEFFID0gbGF0aW4gY2FwaXRhbCBsaWdhdHVyZSBBRSwgVSswMEM2IElTT2xhdDEKZGlmZiAtLWdpdCBhL0xpYi9odG1sL3BhcnNlci5weSBiL0xpYi9odG1sL3BhcnNlci5weQppbmRleCA5YWUzMWI5Li5iNzgxYzYzIDEwMDY0NAotLS0gYS9MaWIvaHRtbC9wYXJzZXIucHkKKysrIGIvTGliL2h0bWwvcGFyc2VyLnB5CkBAIC0yOSwzNSArMjksMTUgQEAKIHBpY2xvc2UgPSByZS5jb21waWxlKCc+JykKIGNvbW1lbnRjbG9zZSA9IHJlLmNvbXBpbGUocictLVxzKj4nKQogIyBOb3RlOgotIyAgMSkgdGhlIHN0cmljdCBhdHRyZmluZCBpc24ndCByZWFsbHkgc3RyaWN0LCBidXQgd2UgY2FuJ3QgbWFrZSBpdAotIyAgICAgY29ycmVjdGx5IHN0cmljdCB3aXRob3V0IGJyZWFraW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk7Ci0jICAyKSBpZiB5b3UgY2hhbmdlIHRhZ2ZpbmQvYXR0cmZpbmQgcmVtZW1iZXIgdG8gdXBkYXRlIGxvY2F0ZXN0YXJ0dGFnZW5kIHRvbzsKLSMgIDMpIGlmIHlvdSBjaGFuZ2UgdGFnZmluZC9hdHRyZmluZCBhbmQvb3IgbG9jYXRlc3RhcnR0YWdlbmQgdGhlIHBhcnNlciB3aWxsCisjICAxKSBpZiB5b3UgY2hhbmdlIHRhZ2ZpbmQvYXR0cmZpbmQgcmVtZW1iZXIgdG8gdXBkYXRlIGxvY2F0ZXN0YXJ0dGFnZW5kIHRvbzsKKyMgIDIpIGlmIHlvdSBjaGFuZ2UgdGFnZmluZC9hdHRyZmluZCBhbmQvb3IgbG9jYXRlc3RhcnR0YWdlbmQgdGhlIHBhcnNlciB3aWxsCiAjICAgICBleHBsb2RlLCBzbyBkb24ndCBkbyBpdC4KLXRhZ2ZpbmQgPSByZS5jb21waWxlKCcoW2EtekEtWl1bLS5hLXpBLVowLTk6X10qKSg/OlxzfC8oPyE+KSkqJykKICMgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3Rva2VuaXphdGlvbi5odG1sI3RhZy1vcGVuLXN0YXRlCiAjIGFuZCBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS90b2tlbml6YXRpb24uaHRtbCN0YWctbmFtZS1zdGF0ZQogdGFnZmluZF90b2xlcmFudCA9IHJlLmNvbXBpbGUoJyhbYS16QS1aXVteXHRcblxyXGYgLz5ceDAwXSopKD86XHN8Lyg/IT4pKSonKQotYXR0cmZpbmQgPSByZS5jb21waWxlKAotICAgIHInXHMqKFthLXpBLVpfXVstLjphLXpBLVpfMC05XSopKFxzKj1ccyonCi0gICAgcicoXCdbXlwnXSpcJ3wiW14iXSoifFteXHMiXCc9PD5gXSopKT8nKQogYXR0cmZpbmRfdG9sZXJhbnQgPSByZS5jb21waWxlKAogICAgIHInKCg/PD1bXCciXHMvXSlbXlxzLz5dW15ccy89Pl0qKShccyo9K1xzKicKICAgICByJyhcJ1teXCddKlwnfCJbXiJdKiJ8KD8hW1wnIl0pW14+XHNdKikpPyg/OlxzfC8oPyE+KSkqJykKLWxvY2F0ZXN0YXJ0dGFnZW5kID0gcmUuY29tcGlsZShyIiIiCi0gIDxbYS16QS1aXVstLmEtekEtWjAtOTpfXSogICAgICAgICAgIyB0YWcgbmFtZQotICAoPzpccysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hpdGVzcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWUKLSAgICAoPzpbYS16QS1aX11bLS46YS16QS1aMC05X10qICAgICAjIGF0dHJpYnV0ZSBuYW1lCi0gICAgICAoPzpccyo9XHMqICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZSBpbmRpY2F0b3IKLSAgICAgICAgKD86J1teJ10qJyAgICAgICAgICAgICAgICAgICAjIExJVEEtZW5jbG9zZWQgdmFsdWUKLSAgICAgICAgICB8XCJbXlwiXSpcIiAgICAgICAgICAgICAgICAjIExJVC1lbmNsb3NlZCB2YWx1ZQotICAgICAgICAgIHxbXidcIj5cc10rICAgICAgICAgICAgICAgICMgYmFyZSB2YWx1ZQotICAgICAgICAgKQotICAgICAgICk/Ci0gICAgICkKLSAgICkqCi0gIFxzKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyB3aGl0ZXNwYWNlCi0iIiIsIHJlLlZFUkJPU0UpCiBsb2NhdGVzdGFydHRhZ2VuZF90b2xlcmFudCA9IHJlLmNvbXBpbGUociIiIgogICA8W2EtekEtWl1bXlx0XG5cclxmIC8+XHgwMF0qICAgICAgICMgdGFnIG5hbWUKICAgKD86W1xzL10qICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIHdoaXRlc3BhY2UgYmVmb3JlIGF0dHJpYnV0ZSBuYW1lCkBAIC03OSwyNSArNTksNiBAQAogZW5kdGFnZmluZCA9IHJlLmNvbXBpbGUoJzwvXHMqKFthLXpBLVpdWy0uYS16QS1aMC05Ol9dKilccyo+JykKIAogCi1jbGFzcyBIVE1MUGFyc2VFcnJvcihFeGNlcHRpb24pOgotICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgZm9yIGFsbCBwYXJzZSBlcnJvcnMuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBwb3NpdGlvbj0oTm9uZSwgTm9uZSkpOgotICAgICAgICBhc3NlcnQgbXNnCi0gICAgICAgIHNlbGYubXNnID0gbXNnCi0gICAgICAgIHNlbGYubGluZW5vID0gcG9zaXRpb25bMF0KLSAgICAgICAgc2VsZi5vZmZzZXQgPSBwb3NpdGlvblsxXQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IHNlbGYubXNnCi0gICAgICAgIGlmIHNlbGYubGluZW5vIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgIiwgYXQgbGluZSAlZCIgJSBzZWxmLmxpbmVubwotICAgICAgICBpZiBzZWxmLm9mZnNldCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICIsIGNvbHVtbiAlZCIgJSAoc2VsZi5vZmZzZXQgKyAxKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLQotX2RlZmF1bHRfc2VudGluZWwgPSBvYmplY3QoKQogCiBjbGFzcyBIVE1MUGFyc2VyKF9tYXJrdXBiYXNlLlBhcnNlckJhc2UpOgogICAgICIiIkZpbmQgdGFncyBhbmQgb3RoZXIgbWFya3VwIGFuZCBjYWxsIGhhbmRsZXIgZnVuY3Rpb25zLgpAQCAtMTIzLDI3ICs4NCwxMiBAQAogCiAgICAgQ0RBVEFfQ09OVEVOVF9FTEVNRU5UUyA9ICgic2NyaXB0IiwgInN0eWxlIikKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJpY3Q9X2RlZmF1bHRfc2VudGluZWwsICosCi0gICAgICAgICAgICAgICAgIGNvbnZlcnRfY2hhcnJlZnM9X2RlZmF1bHRfc2VudGluZWwpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjb252ZXJ0X2NoYXJyZWZzPVRydWUpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFuZCByZXNldCB0aGlzIGluc3RhbmNlLgogCi0gICAgICAgIElmIGNvbnZlcnRfY2hhcnJlZnMgaXMgVHJ1ZSAoZGVmYXVsdDogRmFsc2UpLCBhbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMKKyAgICAgICAgSWYgY29udmVydF9jaGFycmVmcyBpcyBUcnVlICh0aGUgZGVmYXVsdCksIGFsbCBjaGFyYWN0ZXIgcmVmZXJlbmNlcwogICAgICAgICBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLgotICAgICAgICBJZiBzdHJpY3QgaXMgc2V0IHRvIEZhbHNlICh0aGUgZGVmYXVsdCkgdGhlIHBhcnNlciB3aWxsIHBhcnNlIGludmFsaWQKLSAgICAgICAgbWFya3VwLCBvdGhlcndpc2UgaXQgd2lsbCByYWlzZSBhbiBlcnJvci4gIE5vdGUgdGhhdCB0aGUgc3RyaWN0IG1vZGUKLSAgICAgICAgYW5kIGFyZ3VtZW50IGFyZSBkZXByZWNhdGVkLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfZGVmYXVsdF9zZW50aW5lbDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSBzdHJpY3QgYXJndW1lbnQgYW5kIG1vZGUgYXJlIGRlcHJlY2F0ZWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzdHJpY3QgPSBGYWxzZSAgIyBkZWZhdWx0Ci0gICAgICAgIHNlbGYuc3RyaWN0ID0gc3RyaWN0Ci0gICAgICAgIGlmIGNvbnZlcnRfY2hhcnJlZnMgaXMgX2RlZmF1bHRfc2VudGluZWw6Ci0gICAgICAgICAgICBjb252ZXJ0X2NoYXJyZWZzID0gRmFsc2UgICMgZGVmYXVsdAotICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIHZhbHVlIG9mIGNvbnZlcnRfY2hhcnJlZnMgd2lsbCBiZWNvbWUgVHJ1ZSBpbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIzLjUuIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBzZXQgdGhlIHZhbHVlIGV4cGxpY2l0bHkuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAgICAgICAgIHNlbGYuY29udmVydF9jaGFycmVmcyA9IGNvbnZlcnRfY2hhcnJlZnMKICAgICAgICAgc2VsZi5yZXNldCgpCiAKQEAgLTE2OCwxMSArMTE0LDYgQEAKICAgICAgICAgIiIiSGFuZGxlIGFueSBidWZmZXJlZCBkYXRhLiIiIgogICAgICAgICBzZWxmLmdvYWhlYWQoMSkKIAotICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgd2FybmluZ3Mud2FybigiVGhlICdlcnJvcicgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICAgICAgcmFpc2UgSFRNTFBhcnNlRXJyb3IobWVzc2FnZSwgc2VsZi5nZXRwb3MoKSkKLQogICAgIF9fc3RhcnR0YWdfdGV4dCA9IE5vbmUKIAogICAgIGRlZiBnZXRfc3RhcnR0YWdfdGV4dChzZWxmKToKQEAgLTIwMiw3ICsxNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAjIG9yIHRoZXJlJ3MgbW9yZSB0ZXh0IGluY29taW5nLiAgSWYgdGhlIGxhdHRlciBpcyBUcnVlLAogICAgICAgICAgICAgICAgICAgICAjIHdlIGNhbid0IHBhc3MgdGhlIHRleHQgdG8gaGFuZGxlX2RhdGEgaW4gY2FzZSB3ZSBoYXZlCiAgICAgICAgICAgICAgICAgICAgICMgYSBjaGFycmVmIGN1dCBpbiBoYWxmIGF0IGVuZC4gIFRyeSB0byBkZXRlcm1pbmUgaWYKLSAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIHRoZSBjYXNlIGJlZm9yZSBwcm9jZWRpbmcgYnkgbG9va2luZyBmb3IgYW4KKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIHRoZSBjYXNlIGJlZm9yZSBwcm9jZWVkaW5nIGJ5IGxvb2tpbmcgZm9yIGFuCiAgICAgICAgICAgICAgICAgICAgICMgJiBuZWFyIHRoZSBlbmQgYW5kIHNlZSBpZiBpdCdzIGZvbGxvd2VkIGJ5IGEgc3BhY2Ugb3IgOy4KICAgICAgICAgICAgICAgICAgICAgYW1wcG9zID0gcmF3ZGF0YS5yZmluZCgnJicsIG1heChpLCBuLTM0KSkKICAgICAgICAgICAgICAgICAgICAgaWYgKGFtcHBvcyA+PSAwIGFuZApAQCAtMjM1LDEwICsxNzYsNyBAQAogICAgICAgICAgICAgICAgIGVsaWYgc3RhcnRzd2l0aCgiPD8iLCBpKToKICAgICAgICAgICAgICAgICAgICAgayA9IHNlbGYucGFyc2VfcGkoaSkKICAgICAgICAgICAgICAgICBlbGlmIHN0YXJ0c3dpdGgoIjwhIiwgaSk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgotICAgICAgICAgICAgICAgICAgICAgICAgayA9IHNlbGYucGFyc2VfZGVjbGFyYXRpb24oaSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBzZWxmLnBhcnNlX2h0bWxfZGVjbGFyYXRpb24oaSkKKyAgICAgICAgICAgICAgICAgICAgayA9IHNlbGYucGFyc2VfaHRtbF9kZWNsYXJhdGlvbihpKQogICAgICAgICAgICAgICAgIGVsaWYgKGkgKyAxKSA8IG46CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEoIjwiKQogICAgICAgICAgICAgICAgICAgICBrID0gaSArIDEKQEAgLTI0Nyw4ICsxODUsNiBAQAogICAgICAgICAgICAgICAgIGlmIGsgPCAwOgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgZW5kOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zdHJpY3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJFT0YgaW4gbWlkZGxlIG9mIGNvbnN0cnVjdCIpCiAgICAgICAgICAgICAgICAgICAgIGsgPSByYXdkYXRhLmZpbmQoJz4nLCBpICsgMSkKICAgICAgICAgICAgICAgICAgICAgaWYgayA8IDA6CiAgICAgICAgICAgICAgICAgICAgICAgICBrID0gcmF3ZGF0YS5maW5kKCc8JywgaSArIDEpCkBAIC0yOTAsMTMgKzIyNiwxMCBAQAogICAgICAgICAgICAgICAgIGlmIG1hdGNoOgogICAgICAgICAgICAgICAgICAgICAjIG1hdGNoLmdyb3VwKCkgd2lsbCBjb250YWluIGF0IGxlYXN0IDIgY2hhcnMKICAgICAgICAgICAgICAgICAgICAgaWYgZW5kIGFuZCBtYXRjaC5ncm91cCgpID09IHJhd2RhdGFbaTpdOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zdHJpY3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigiRU9GIGluIG1pZGRsZSBvZiBlbnRpdHkgb3IgY2hhciByZWYiKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbWF0Y2guZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBrIDw9IGk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNlbGYudXBkYXRlcG9zKGksIGkgKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgayA9IG1hdGNoLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrIDw9IGk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IG4KKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBpICsgMSkKICAgICAgICAgICAgICAgICAgICAgIyBpbmNvbXBsZXRlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZWxpZiAoaSArIDEpIDwgbjoKQEAgLTM3NSwxOCArMzA4LDEyIEBACiAKICAgICAgICAgIyBOb3cgcGFyc2UgdGhlIGRhdGEgYmV0d2VlbiBpKzEgYW5kIGogaW50byBhIHRhZyBhbmQgYXR0cnMKICAgICAgICAgYXR0cnMgPSBbXQotICAgICAgICBpZiBzZWxmLnN0cmljdDoKLSAgICAgICAgICAgIG1hdGNoID0gdGFnZmluZC5tYXRjaChyYXdkYXRhLCBpKzEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYXRjaCA9IHRhZ2ZpbmRfdG9sZXJhbnQubWF0Y2gocmF3ZGF0YSwgaSsxKQorICAgICAgICBtYXRjaCA9IHRhZ2ZpbmRfdG9sZXJhbnQubWF0Y2gocmF3ZGF0YSwgaSsxKQogICAgICAgICBhc3NlcnQgbWF0Y2gsICd1bmV4cGVjdGVkIGNhbGwgdG8gcGFyc2Vfc3RhcnR0YWcoKScKICAgICAgICAgayA9IG1hdGNoLmVuZCgpCiAgICAgICAgIHNlbGYubGFzdHRhZyA9IHRhZyA9IG1hdGNoLmdyb3VwKDEpLmxvd2VyKCkKICAgICAgICAgd2hpbGUgayA8IGVuZHBvczoKLSAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgotICAgICAgICAgICAgICAgIG0gPSBhdHRyZmluZC5tYXRjaChyYXdkYXRhLCBrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtID0gYXR0cmZpbmRfdG9sZXJhbnQubWF0Y2gocmF3ZGF0YSwgaykKKyAgICAgICAgICAgIG0gPSBhdHRyZmluZF90b2xlcmFudC5tYXRjaChyYXdkYXRhLCBrKQogICAgICAgICAgICAgaWYgbm90IG06CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGF0dHJuYW1lLCByZXN0LCBhdHRydmFsdWUgPSBtLmdyb3VwKDEsIDIsIDMpCkBAIC00MDksOSArMzM2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNlbGYuX19zdGFydHRhZ190ZXh0LnJmaW5kKCJcbiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCArIGxlbihzZWxmLl9fc3RhcnR0YWdfdGV4dCkKLSAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoImp1bmsgY2hhcmFjdGVycyBpbiBzdGFydCB0YWc6ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocmF3ZGF0YVtrOmVuZHBvc11bOjIwXSwpKQogICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6ZW5kcG9zXSkKICAgICAgICAgICAgIHJldHVybiBlbmRwb3MKICAgICAgICAgaWYgZW5kLmVuZHN3aXRoKCcvPicpOgpAQCAtNDI3LDEwICszNTEsNyBAQAogICAgICMgb3IgLTEgaWYgaW5jb21wbGV0ZS4KICAgICBkZWYgY2hlY2tfZm9yX3dob2xlX3N0YXJ0X3RhZyhzZWxmLCBpKToKICAgICAgICAgcmF3ZGF0YSA9IHNlbGYucmF3ZGF0YQotICAgICAgICBpZiBzZWxmLnN0cmljdDoKLSAgICAgICAgICAgIG0gPSBsb2NhdGVzdGFydHRhZ2VuZC5tYXRjaChyYXdkYXRhLCBpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbSA9IGxvY2F0ZXN0YXJ0dGFnZW5kX3RvbGVyYW50Lm1hdGNoKHJhd2RhdGEsIGkpCisgICAgICAgIG0gPSBsb2NhdGVzdGFydHRhZ2VuZF90b2xlcmFudC5tYXRjaChyYXdkYXRhLCBpKQogICAgICAgICBpZiBtOgogICAgICAgICAgICAgaiA9IG0uZW5kKCkKICAgICAgICAgICAgIG5leHQgPSByYXdkYXRhW2o6aisxXQpAQCAtNDQzLDkgKzM2NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICMgYnVmZmVyIGJvdW5kYXJ5CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMQogICAgICAgICAgICAgICAgICMgZWxzZSBib2d1cyBpbnB1dAotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZXBvcyhpLCBqICsgMSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigibWFsZm9ybWVkIGVtcHR5IHN0YXJ0IHRhZyIpCiAgICAgICAgICAgICAgICAgaWYgaiA+IGk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTQ1OCw5ICszNzYsNiBAQAogICAgICAgICAgICAgICAgICMgZW5kIG9mIGlucHV0IGluIG9yIGJlZm9yZSBhdHRyaWJ1dGUgdmFsdWUsIG9yIHdlIGhhdmUgdGhlCiAgICAgICAgICAgICAgICAgIyAnLycgZnJvbSBhICcvPicgZW5kaW5nCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgICAgICBpZiBzZWxmLnN0cmljdDoKLSAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZXBvcyhpLCBqKQotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIm1hbGZvcm1lZCBzdGFydCB0YWciKQogICAgICAgICAgICAgaWYgaiA+IGk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGoKICAgICAgICAgICAgIGVsc2U6CkBAIC00ODAsOCArMzk1LDYgQEAKICAgICAgICAgICAgIGlmIHNlbGYuY2RhdGFfZWxlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTpndHBvc10pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGd0cG9zCi0gICAgICAgICAgICBpZiBzZWxmLnN0cmljdDoKLSAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJiYWQgZW5kIHRhZzogJXIiICUgKHJhd2RhdGFbaTpndHBvc10sKSkKICAgICAgICAgICAgICMgZmluZCB0aGUgbmFtZTogdzMub3JnL1RSL2h0bWw1L3Rva2VuaXphdGlvbi5odG1sI3RhZy1uYW1lLXN0YXRlCiAgICAgICAgICAgICBuYW1lbWF0Y2ggPSB0YWdmaW5kX3RvbGVyYW50Lm1hdGNoKHJhd2RhdGEsIGkrMikKICAgICAgICAgICAgIGlmIG5vdCBuYW1lbWF0Y2g6CkBAIC01NDcsOCArNDYwLDcgQEAKICAgICAgICAgcGFzcwogCiAgICAgZGVmIHVua25vd25fZGVjbChzZWxmLCBkYXRhKToKLSAgICAgICAgaWYgc2VsZi5zdHJpY3Q6Ci0gICAgICAgICAgICBzZWxmLmVycm9yKCJ1bmtub3duIGRlY2xhcmF0aW9uOiAlciIgJSAoZGF0YSwpKQorICAgICAgICBwYXNzCiAKICAgICAjIEludGVybmFsIC0tIGhlbHBlciB0byByZW1vdmUgc3BlY2lhbCBjaGFyYWN0ZXIgcXVvdGluZwogICAgIGRlZiB1bmVzY2FwZShzZWxmLCBzKToKZGlmZiAtLWdpdCBhL0xpYi9odHRwL19faW5pdF9fLnB5IGIvTGliL2h0dHAvX19pbml0X18ucHkKaW5kZXggMTk2ZDM3OC4uZDQzMzRjYyAxMDA2NDQKLS0tIGEvTGliL2h0dHAvX19pbml0X18ucHkKKysrIGIvTGliL2h0dHAvX19pbml0X18ucHkKQEAgLTEgKzEsMTM0IEBACi0jIFRoaXMgZGlyZWN0b3J5IGlzIGEgUHl0aG9uIHBhY2thZ2UuCitmcm9tIGVudW0gaW1wb3J0IEludEVudW0KKworX19hbGxfXyA9IFsnSFRUUFN0YXR1cyddCisKK2NsYXNzIEhUVFBTdGF0dXMoSW50RW51bSk6CisgICAgIiIiSFRUUCBzdGF0dXMgY29kZXMgYW5kIHJlYXNvbiBwaHJhc2VzCisKKyAgICBTdGF0dXMgY29kZXMgZnJvbSB0aGUgZm9sbG93aW5nIFJGQ3MgYXJlIGFsbCBvYnNlcnZlZDoKKworICAgICAgICAqIFJGQyA3MjMxOiBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgKEhUVFAvMS4xKSwgb2Jzb2xldGVzIDI2MTYKKyAgICAgICAgKiBSRkMgNjU4NTogQWRkaXRpb25hbCBIVFRQIFN0YXR1cyBDb2RlcworICAgICAgICAqIFJGQyAzMjI5OiBEZWx0YSBlbmNvZGluZyBpbiBIVFRQCisgICAgICAgICogUkZDIDQ5MTg6IEhUVFAgRXh0ZW5zaW9ucyBmb3IgV2ViREFWLCBvYnNvbGV0ZXMgMjUxOAorICAgICAgICAqIFJGQyA1ODQyOiBCaW5kaW5nIEV4dGVuc2lvbnMgdG8gV2ViREFWCisgICAgICAgICogUkZDIDcyMzg6IFBlcm1hbmVudCBSZWRpcmVjdAorICAgICAgICAqIFJGQyAyMjk1OiBUcmFuc3BhcmVudCBDb250ZW50IE5lZ290aWF0aW9uIGluIEhUVFAKKyAgICAgICAgKiBSRkMgMjc3NDogQW4gSFRUUCBFeHRlbnNpb24gRnJhbWV3b3JrCisgICAgIiIiCisgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZSwgcGhyYXNlLCBkZXNjcmlwdGlvbj0nJyk6CisgICAgICAgIG9iaiA9IGludC5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKworICAgICAgICBvYmoucGhyYXNlID0gcGhyYXNlCisgICAgICAgIG9iai5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHJldHVybiBvYmoKKworICAgICMgaW5mb3JtYXRpb25hbAorICAgIENPTlRJTlVFID0gMTAwLCAnQ29udGludWUnLCAnUmVxdWVzdCByZWNlaXZlZCwgcGxlYXNlIGNvbnRpbnVlJworICAgIFNXSVRDSElOR19QUk9UT0NPTFMgPSAoMTAxLCAnU3dpdGNoaW5nIFByb3RvY29scycsCisgICAgICAgICAgICAnU3dpdGNoaW5nIHRvIG5ldyBwcm90b2NvbDsgb2JleSBVcGdyYWRlIGhlYWRlcicpCisgICAgUFJPQ0VTU0lORyA9IDEwMiwgJ1Byb2Nlc3NpbmcnCisKKyAgICAjIHN1Y2Nlc3MKKyAgICBPSyA9IDIwMCwgJ09LJywgJ1JlcXVlc3QgZnVsZmlsbGVkLCBkb2N1bWVudCBmb2xsb3dzJworICAgIENSRUFURUQgPSAyMDEsICdDcmVhdGVkJywgJ0RvY3VtZW50IGNyZWF0ZWQsIFVSTCBmb2xsb3dzJworICAgIEFDQ0VQVEVEID0gKDIwMiwgJ0FjY2VwdGVkJywKKyAgICAgICAgJ1JlcXVlc3QgYWNjZXB0ZWQsIHByb2Nlc3NpbmcgY29udGludWVzIG9mZi1saW5lJykKKyAgICBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTiA9ICgyMDMsCisgICAgICAgICdOb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvbicsICdSZXF1ZXN0IGZ1bGZpbGxlZCBmcm9tIGNhY2hlJykKKyAgICBOT19DT05URU5UID0gMjA0LCAnTm8gQ29udGVudCcsICdSZXF1ZXN0IGZ1bGZpbGxlZCwgbm90aGluZyBmb2xsb3dzJworICAgIFJFU0VUX0NPTlRFTlQgPSAyMDUsICdSZXNldCBDb250ZW50JywgJ0NsZWFyIGlucHV0IGZvcm0gZm9yIGZ1cnRoZXIgaW5wdXQnCisgICAgUEFSVElBTF9DT05URU5UID0gMjA2LCAnUGFydGlhbCBDb250ZW50JywgJ1BhcnRpYWwgY29udGVudCBmb2xsb3dzJworICAgIE1VTFRJX1NUQVRVUyA9IDIwNywgJ011bHRpLVN0YXR1cycKKyAgICBBTFJFQURZX1JFUE9SVEVEID0gMjA4LCAnQWxyZWFkeSBSZXBvcnRlZCcKKyAgICBJTV9VU0VEID0gMjI2LCAnSU0gVXNlZCcKKworICAgICMgcmVkaXJlY3Rpb24KKyAgICBNVUxUSVBMRV9DSE9JQ0VTID0gKDMwMCwgJ011bHRpcGxlIENob2ljZXMnLAorICAgICAgICAnT2JqZWN0IGhhcyBzZXZlcmFsIHJlc291cmNlcyAtLSBzZWUgVVJJIGxpc3QnKQorICAgIE1PVkVEX1BFUk1BTkVOVExZID0gKDMwMSwgJ01vdmVkIFBlcm1hbmVudGx5JywKKyAgICAgICAgJ09iamVjdCBtb3ZlZCBwZXJtYW5lbnRseSAtLSBzZWUgVVJJIGxpc3QnKQorICAgIEZPVU5EID0gMzAyLCAnRm91bmQnLCAnT2JqZWN0IG1vdmVkIHRlbXBvcmFyaWx5IC0tIHNlZSBVUkkgbGlzdCcKKyAgICBTRUVfT1RIRVIgPSAzMDMsICdTZWUgT3RoZXInLCAnT2JqZWN0IG1vdmVkIC0tIHNlZSBNZXRob2QgYW5kIFVSTCBsaXN0JworICAgIE5PVF9NT0RJRklFRCA9ICgzMDQsICdOb3QgTW9kaWZpZWQnLAorICAgICAgICAnRG9jdW1lbnQgaGFzIG5vdCBjaGFuZ2VkIHNpbmNlIGdpdmVuIHRpbWUnKQorICAgIFVTRV9QUk9YWSA9ICgzMDUsICdVc2UgUHJveHknLAorICAgICAgICAnWW91IG11c3QgdXNlIHByb3h5IHNwZWNpZmllZCBpbiBMb2NhdGlvbiB0byBhY2Nlc3MgdGhpcyByZXNvdXJjZScpCisgICAgVEVNUE9SQVJZX1JFRElSRUNUID0gKDMwNywgJ1RlbXBvcmFyeSBSZWRpcmVjdCcsCisgICAgICAgICdPYmplY3QgbW92ZWQgdGVtcG9yYXJpbHkgLS0gc2VlIFVSSSBsaXN0JykKKyAgICBQRVJNQU5FTlRfUkVESVJFQ1QgPSAoMzA4LCAnUGVybWFuZW50IFJlZGlyZWN0JywKKyAgICAgICAgJ09iamVjdCBtb3ZlZCB0ZW1wb3JhcmlseSAtLSBzZWUgVVJJIGxpc3QnKQorCisgICAgIyBjbGllbnQgZXJyb3IKKyAgICBCQURfUkVRVUVTVCA9ICg0MDAsICdCYWQgUmVxdWVzdCcsCisgICAgICAgICdCYWQgcmVxdWVzdCBzeW50YXggb3IgdW5zdXBwb3J0ZWQgbWV0aG9kJykKKyAgICBVTkFVVEhPUklaRUQgPSAoNDAxLCAnVW5hdXRob3JpemVkJywKKyAgICAgICAgJ05vIHBlcm1pc3Npb24gLS0gc2VlIGF1dGhvcml6YXRpb24gc2NoZW1lcycpCisgICAgUEFZTUVOVF9SRVFVSVJFRCA9ICg0MDIsICdQYXltZW50IFJlcXVpcmVkJywKKyAgICAgICAgJ05vIHBheW1lbnQgLS0gc2VlIGNoYXJnaW5nIHNjaGVtZXMnKQorICAgIEZPUkJJRERFTiA9ICg0MDMsICdGb3JiaWRkZW4nLAorICAgICAgICAnUmVxdWVzdCBmb3JiaWRkZW4gLS0gYXV0aG9yaXphdGlvbiB3aWxsIG5vdCBoZWxwJykKKyAgICBOT1RfRk9VTkQgPSAoNDA0LCAnTm90IEZvdW5kJywKKyAgICAgICAgJ05vdGhpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4gVVJJJykKKyAgICBNRVRIT0RfTk9UX0FMTE9XRUQgPSAoNDA1LCAnTWV0aG9kIE5vdCBBbGxvd2VkJywKKyAgICAgICAgJ1NwZWNpZmllZCBtZXRob2QgaXMgaW52YWxpZCBmb3IgdGhpcyByZXNvdXJjZScpCisgICAgTk9UX0FDQ0VQVEFCTEUgPSAoNDA2LCAnTm90IEFjY2VwdGFibGUnLAorICAgICAgICAnVVJJIG5vdCBhdmFpbGFibGUgaW4gcHJlZmVycmVkIGZvcm1hdCcpCisgICAgUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgPSAoNDA3LAorICAgICAgICAnUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAorICAgICAgICAnWW91IG11c3QgYXV0aGVudGljYXRlIHdpdGggdGhpcyBwcm94eSBiZWZvcmUgcHJvY2VlZGluZycpCisgICAgUkVRVUVTVF9USU1FT1VUID0gKDQwOCwgJ1JlcXVlc3QgVGltZW91dCcsCisgICAgICAgICdSZXF1ZXN0IHRpbWVkIG91dDsgdHJ5IGFnYWluIGxhdGVyJykKKyAgICBDT05GTElDVCA9IDQwOSwgJ0NvbmZsaWN0JywgJ1JlcXVlc3QgY29uZmxpY3QnCisgICAgR09ORSA9ICg0MTAsICdHb25lJywKKyAgICAgICAgJ1VSSSBubyBsb25nZXIgZXhpc3RzIGFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSByZW1vdmVkJykKKyAgICBMRU5HVEhfUkVRVUlSRUQgPSAoNDExLCAnTGVuZ3RoIFJlcXVpcmVkJywKKyAgICAgICAgJ0NsaWVudCBtdXN0IHNwZWNpZnkgQ29udGVudC1MZW5ndGgnKQorICAgIFBSRUNPTkRJVElPTl9GQUlMRUQgPSAoNDEyLCAnUHJlY29uZGl0aW9uIEZhaWxlZCcsCisgICAgICAgICdQcmVjb25kaXRpb24gaW4gaGVhZGVycyBpcyBmYWxzZScpCisgICAgUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFID0gKDQxMywgJ1JlcXVlc3QgRW50aXR5IFRvbyBMYXJnZScsCisgICAgICAgICdFbnRpdHkgaXMgdG9vIGxhcmdlJykKKyAgICBSRVFVRVNUX1VSSV9UT09fTE9ORyA9ICg0MTQsICdSZXF1ZXN0LVVSSSBUb28gTG9uZycsCisgICAgICAgICdVUkkgaXMgdG9vIGxvbmcnKQorICAgIFVOU1VQUE9SVEVEX01FRElBX1RZUEUgPSAoNDE1LCAnVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZScsCisgICAgICAgICdFbnRpdHkgYm9keSBpbiB1bnN1cHBvcnRlZCBmb3JtYXQnKQorICAgIFJFUVVFU1RFRF9SQU5HRV9OT1RfU0FUSVNGSUFCTEUgPSAoNDE2LAorICAgICAgICAnUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZScsCisgICAgICAgICdDYW5ub3Qgc2F0aXNmeSByZXF1ZXN0IHJhbmdlJykKKyAgICBFWFBFQ1RBVElPTl9GQUlMRUQgPSAoNDE3LCAnRXhwZWN0YXRpb24gRmFpbGVkJywKKyAgICAgICAgJ0V4cGVjdCBjb25kaXRpb24gY291bGQgbm90IGJlIHNhdGlzZmllZCcpCisgICAgVU5QUk9DRVNTQUJMRV9FTlRJVFkgPSA0MjIsICdVbnByb2Nlc3NhYmxlIEVudGl0eScKKyAgICBMT0NLRUQgPSA0MjMsICdMb2NrZWQnCisgICAgRkFJTEVEX0RFUEVOREVOQ1kgPSA0MjQsICdGYWlsZWQgRGVwZW5kZW5jeScKKyAgICBVUEdSQURFX1JFUVVJUkVEID0gNDI2LCAnVXBncmFkZSBSZXF1aXJlZCcKKyAgICBQUkVDT05ESVRJT05fUkVRVUlSRUQgPSAoNDI4LCAnUHJlY29uZGl0aW9uIFJlcXVpcmVkJywKKyAgICAgICAgJ1RoZSBvcmlnaW4gc2VydmVyIHJlcXVpcmVzIHRoZSByZXF1ZXN0IHRvIGJlIGNvbmRpdGlvbmFsJykKKyAgICBUT09fTUFOWV9SRVFVRVNUUyA9ICg0MjksICdUb28gTWFueSBSZXF1ZXN0cycsCisgICAgICAgICdUaGUgdXNlciBoYXMgc2VudCB0b28gbWFueSByZXF1ZXN0cyBpbiAnCisgICAgICAgICdhIGdpdmVuIGFtb3VudCBvZiB0aW1lICgicmF0ZSBsaW1pdGluZyIpJykKKyAgICBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFID0gKDQzMSwKKyAgICAgICAgJ1JlcXVlc3QgSGVhZGVyIEZpZWxkcyBUb28gTGFyZ2UnLAorICAgICAgICAnVGhlIHNlcnZlciBpcyB1bndpbGxpbmcgdG8gcHJvY2VzcyB0aGUgcmVxdWVzdCBiZWNhdXNlIGl0cyBoZWFkZXIgJworICAgICAgICAnZmllbGRzIGFyZSB0b28gbGFyZ2UnKQorCisgICAgIyBzZXJ2ZXIgZXJyb3JzCisgICAgSU5URVJOQUxfU0VSVkVSX0VSUk9SID0gKDUwMCwgJ0ludGVybmFsIFNlcnZlciBFcnJvcicsCisgICAgICAgICdTZXJ2ZXIgZ290IGl0c2VsZiBpbiB0cm91YmxlJykKKyAgICBOT1RfSU1QTEVNRU5URUQgPSAoNTAxLCAnTm90IEltcGxlbWVudGVkJywKKyAgICAgICAgJ1NlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uJykKKyAgICBCQURfR0FURVdBWSA9ICg1MDIsICdCYWQgR2F0ZXdheScsCisgICAgICAgICdJbnZhbGlkIHJlc3BvbnNlcyBmcm9tIGFub3RoZXIgc2VydmVyL3Byb3h5JykKKyAgICBTRVJWSUNFX1VOQVZBSUxBQkxFID0gKDUwMywgJ1NlcnZpY2UgVW5hdmFpbGFibGUnLAorICAgICAgICAnVGhlIHNlcnZlciBjYW5ub3QgcHJvY2VzcyB0aGUgcmVxdWVzdCBkdWUgdG8gYSBoaWdoIGxvYWQnKQorICAgIEdBVEVXQVlfVElNRU9VVCA9ICg1MDQsICdHYXRld2F5IFRpbWVvdXQnLAorICAgICAgICAnVGhlIGdhdGV3YXkgc2VydmVyIGRpZCBub3QgcmVjZWl2ZSBhIHRpbWVseSByZXNwb25zZScpCisgICAgSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQgPSAoNTA1LCAnSFRUUCBWZXJzaW9uIE5vdCBTdXBwb3J0ZWQnLAorICAgICAgICAnQ2Fubm90IGZ1bGZpbGwgcmVxdWVzdCcpCisgICAgVkFSSUFOVF9BTFNPX05FR09USUFURVMgPSA1MDYsICdWYXJpYW50IEFsc28gTmVnb3RpYXRlcycKKyAgICBJTlNVRkZJQ0lFTlRfU1RPUkFHRSA9IDUwNywgJ0luc3VmZmljaWVudCBTdG9yYWdlJworICAgIExPT1BfREVURUNURUQgPSA1MDgsICdMb29wIERldGVjdGVkJworICAgIE5PVF9FWFRFTkRFRCA9IDUxMCwgJ05vdCBFeHRlbmRlZCcKKyAgICBORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEID0gKDUxMSwKKyAgICAgICAgJ05ldHdvcmsgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAorICAgICAgICAnVGhlIGNsaWVudCBuZWVkcyB0byBhdXRoZW50aWNhdGUgdG8gZ2FpbiBuZXR3b3JrIGFjY2VzcycpCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9jbGllbnQucHkgYi9MaWIvaHR0cC9jbGllbnQucHkKaW5kZXggMWM2OWRjYi4uMzUwMzEzZSAxMDA2NDQKLS0tIGEvTGliL2h0dHAvY2xpZW50LnB5CisrKyBiL0xpYi9odHRwL2NsaWVudC5weQpAQCAtMjAsMTAgKzIwLDEyIEBACiAgICAgICB8ICggcHV0aGVhZGVyKCkgKSogIGVuZGhlYWRlcnMoKQogICAgICAgdgogICAgIFJlcXVlc3Qtc2VudAotICAgICAgfAotICAgICAgfCByZXNwb25zZSA9IGdldHJlc3BvbnNlKCkKLSAgICAgIHYKLSAgICBVbnJlYWQtcmVzcG9uc2UgICBbUmVzcG9uc2UtaGVhZGVycy1yZWFkXQorICAgICAgfFxfX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ2V0cmVzcG9uc2UoKSByYWlzZXMKKyAgICAgIHwgcmVzcG9uc2UgPSBnZXRyZXNwb25zZSgpICAgICB8IENvbm5lY3Rpb25FcnJvcgorICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICBVbnJlYWQtcmVzcG9uc2UgICAgICAgICAgICAgICAgSWRsZQorICAgIFtSZXNwb25zZS1oZWFkZXJzLXJlYWRdCiAgICAgICB8XF9fX19fX19fX19fX19fX19fX19fCiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgfCByZXNwb25zZS5yZWFkKCkgICAgIHwgcHV0cmVxdWVzdCgpCkBAIC02OCw2ICs3MCw3IEBACiAKIGltcG9ydCBlbWFpbC5wYXJzZXIKIGltcG9ydCBlbWFpbC5tZXNzYWdlCitpbXBvcnQgaHR0cAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCByZQpAQCAtODIsNyArODUsOCBAQAogICAgICAgICAgICAiVW5rbm93blRyYW5zZmVyRW5jb2RpbmciLCAiVW5pbXBsZW1lbnRlZEZpbGVNb2RlIiwKICAgICAgICAgICAgIkluY29tcGxldGVSZWFkIiwgIkludmFsaWRVUkwiLCAiSW1wcm9wZXJDb25uZWN0aW9uU3RhdGUiLAogICAgICAgICAgICAiQ2Fubm90U2VuZFJlcXVlc3QiLCAiQ2Fubm90U2VuZEhlYWRlciIsICJSZXNwb25zZU5vdFJlYWR5IiwKLSAgICAgICAgICAgIkJhZFN0YXR1c0xpbmUiLCAiTGluZVRvb0xvbmciLCAiZXJyb3IiLCAicmVzcG9uc2VzIl0KKyAgICAgICAgICAgIkJhZFN0YXR1c0xpbmUiLCAiTGluZVRvb0xvbmciLCAiUmVtb3RlRGlzY29ubmVjdGVkIiwgImVycm9yIiwKKyAgICAgICAgICAgInJlc3BvbnNlcyJdCiAKIEhUVFBfUE9SVCA9IDgwCiBIVFRQU19QT1JUID0gNDQzCkBAIC05NCwxMjIgKzk4LDEzIEBACiBfQ1NfUkVRX1NUQVJURUQgPSAnUmVxdWVzdC1zdGFydGVkJwogX0NTX1JFUV9TRU5UID0gJ1JlcXVlc3Qtc2VudCcKIAotIyBzdGF0dXMgY29kZXMKLSMgaW5mb3JtYXRpb25hbAotQ09OVElOVUUgPSAxMDAKLVNXSVRDSElOR19QUk9UT0NPTFMgPSAxMDEKLVBST0NFU1NJTkcgPSAxMDIKIAotIyBzdWNjZXNzZnVsCi1PSyA9IDIwMAotQ1JFQVRFRCA9IDIwMQotQUNDRVBURUQgPSAyMDIKLU5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OID0gMjAzCi1OT19DT05URU5UID0gMjA0Ci1SRVNFVF9DT05URU5UID0gMjA1Ci1QQVJUSUFMX0NPTlRFTlQgPSAyMDYKLU1VTFRJX1NUQVRVUyA9IDIwNwotSU1fVVNFRCA9IDIyNgorIyBoYWNrIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CitnbG9iYWxzKCkudXBkYXRlKGh0dHAuSFRUUFN0YXR1cy5fX21lbWJlcnNfXykKIAotIyByZWRpcmVjdGlvbgotTVVMVElQTEVfQ0hPSUNFUyA9IDMwMAotTU9WRURfUEVSTUFORU5UTFkgPSAzMDEKLUZPVU5EID0gMzAyCi1TRUVfT1RIRVIgPSAzMDMKLU5PVF9NT0RJRklFRCA9IDMwNAotVVNFX1BST1hZID0gMzA1Ci1URU1QT1JBUllfUkVESVJFQ1QgPSAzMDcKLQotIyBjbGllbnQgZXJyb3IKLUJBRF9SRVFVRVNUID0gNDAwCi1VTkFVVEhPUklaRUQgPSA0MDEKLVBBWU1FTlRfUkVRVUlSRUQgPSA0MDIKLUZPUkJJRERFTiA9IDQwMwotTk9UX0ZPVU5EID0gNDA0Ci1NRVRIT0RfTk9UX0FMTE9XRUQgPSA0MDUKLU5PVF9BQ0NFUFRBQkxFID0gNDA2Ci1QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCA9IDQwNwotUkVRVUVTVF9USU1FT1VUID0gNDA4Ci1DT05GTElDVCA9IDQwOQotR09ORSA9IDQxMAotTEVOR1RIX1JFUVVJUkVEID0gNDExCi1QUkVDT05ESVRJT05fRkFJTEVEID0gNDEyCi1SRVFVRVNUX0VOVElUWV9UT09fTEFSR0UgPSA0MTMKLVJFUVVFU1RfVVJJX1RPT19MT05HID0gNDE0Ci1VTlNVUFBPUlRFRF9NRURJQV9UWVBFID0gNDE1Ci1SRVFVRVNURURfUkFOR0VfTk9UX1NBVElTRklBQkxFID0gNDE2Ci1FWFBFQ1RBVElPTl9GQUlMRUQgPSA0MTcKLVVOUFJPQ0VTU0FCTEVfRU5USVRZID0gNDIyCi1MT0NLRUQgPSA0MjMKLUZBSUxFRF9ERVBFTkRFTkNZID0gNDI0Ci1VUEdSQURFX1JFUVVJUkVEID0gNDI2Ci1QUkVDT05ESVRJT05fUkVRVUlSRUQgPSA0MjgKLVRPT19NQU5ZX1JFUVVFU1RTID0gNDI5Ci1SRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFID0gNDMxCi0KLSMgc2VydmVyIGVycm9yCi1JTlRFUk5BTF9TRVJWRVJfRVJST1IgPSA1MDAKLU5PVF9JTVBMRU1FTlRFRCA9IDUwMQotQkFEX0dBVEVXQVkgPSA1MDIKLVNFUlZJQ0VfVU5BVkFJTEFCTEUgPSA1MDMKLUdBVEVXQVlfVElNRU9VVCA9IDUwNAotSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQgPSA1MDUKLUlOU1VGRklDSUVOVF9TVE9SQUdFID0gNTA3Ci1OT1RfRVhURU5ERUQgPSA1MTAKLU5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgPSA1MTEKLQorIyBhbm90aGVyIGhhY2sgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKICMgTWFwcGluZyBzdGF0dXMgY29kZXMgdG8gb2ZmaWNpYWwgVzNDIG5hbWVzCi1yZXNwb25zZXMgPSB7Ci0gICAgMTAwOiAnQ29udGludWUnLAotICAgIDEwMTogJ1N3aXRjaGluZyBQcm90b2NvbHMnLAotCi0gICAgMjAwOiAnT0snLAotICAgIDIwMTogJ0NyZWF0ZWQnLAotICAgIDIwMjogJ0FjY2VwdGVkJywKLSAgICAyMDM6ICdOb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvbicsCi0gICAgMjA0OiAnTm8gQ29udGVudCcsCi0gICAgMjA1OiAnUmVzZXQgQ29udGVudCcsCi0gICAgMjA2OiAnUGFydGlhbCBDb250ZW50JywKLQotICAgIDMwMDogJ011bHRpcGxlIENob2ljZXMnLAotICAgIDMwMTogJ01vdmVkIFBlcm1hbmVudGx5JywKLSAgICAzMDI6ICdGb3VuZCcsCi0gICAgMzAzOiAnU2VlIE90aGVyJywKLSAgICAzMDQ6ICdOb3QgTW9kaWZpZWQnLAotICAgIDMwNTogJ1VzZSBQcm94eScsCi0gICAgMzA2OiAnKFVudXNlZCknLAotICAgIDMwNzogJ1RlbXBvcmFyeSBSZWRpcmVjdCcsCi0KLSAgICA0MDA6ICdCYWQgUmVxdWVzdCcsCi0gICAgNDAxOiAnVW5hdXRob3JpemVkJywKLSAgICA0MDI6ICdQYXltZW50IFJlcXVpcmVkJywKLSAgICA0MDM6ICdGb3JiaWRkZW4nLAotICAgIDQwNDogJ05vdCBGb3VuZCcsCi0gICAgNDA1OiAnTWV0aG9kIE5vdCBBbGxvd2VkJywKLSAgICA0MDY6ICdOb3QgQWNjZXB0YWJsZScsCi0gICAgNDA3OiAnUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAotICAgIDQwODogJ1JlcXVlc3QgVGltZW91dCcsCi0gICAgNDA5OiAnQ29uZmxpY3QnLAotICAgIDQxMDogJ0dvbmUnLAotICAgIDQxMTogJ0xlbmd0aCBSZXF1aXJlZCcsCi0gICAgNDEyOiAnUHJlY29uZGl0aW9uIEZhaWxlZCcsCi0gICAgNDEzOiAnUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlJywKLSAgICA0MTQ6ICdSZXF1ZXN0LVVSSSBUb28gTG9uZycsCi0gICAgNDE1OiAnVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZScsCi0gICAgNDE2OiAnUmVxdWVzdGVkIFJhbmdlIE5vdCBTYXRpc2ZpYWJsZScsCi0gICAgNDE3OiAnRXhwZWN0YXRpb24gRmFpbGVkJywKLSAgICA0Mjg6ICdQcmVjb25kaXRpb24gUmVxdWlyZWQnLAotICAgIDQyOTogJ1RvbyBNYW55IFJlcXVlc3RzJywKLSAgICA0MzE6ICdSZXF1ZXN0IEhlYWRlciBGaWVsZHMgVG9vIExhcmdlJywKLQotICAgIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsCi0gICAgNTAxOiAnTm90IEltcGxlbWVudGVkJywKLSAgICA1MDI6ICdCYWQgR2F0ZXdheScsCi0gICAgNTAzOiAnU2VydmljZSBVbmF2YWlsYWJsZScsCi0gICAgNTA0OiAnR2F0ZXdheSBUaW1lb3V0JywKLSAgICA1MDU6ICdIVFRQIFZlcnNpb24gTm90IFN1cHBvcnRlZCcsCi0gICAgNTExOiAnTmV0d29yayBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCcsCi19CityZXNwb25zZXMgPSB7djogdi5waHJhc2UgZm9yIHYgaW4gaHR0cC5IVFRQU3RhdHVzLl9fbWVtYmVyc19fLnZhbHVlcygpfQogCiAjIG1heGltYWwgYW1vdW50IG9mIGRhdGEgdG8gcmVhZCBhdCBvbmUgdGltZSBpbiBfc2FmZV9yZWFkCiBNQVhBTU9VTlQgPSAxMDQ4NTc2CkBAIC0yNTEsNiArMTQ2LDIxIEBACiBfTUVUSE9EU19FWFBFQ1RJTkdfQk9EWSA9IHsnUEFUQ0gnLCAnUE9TVCcsICdQVVQnfQogCiAKK2RlZiBfZW5jb2RlKGRhdGEsIG5hbWU9J2RhdGEnKToKKyAgICAiIiJDYWxsIGRhdGEuZW5jb2RlKCJsYXRpbi0xIikgYnV0IHNob3cgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4iIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBkYXRhLmVuY29kZSgibGF0aW4tMSIpCisgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvciBhcyBlcnI6CisgICAgICAgIHJhaXNlIFVuaWNvZGVFbmNvZGVFcnJvcigKKyAgICAgICAgICAgIGVyci5lbmNvZGluZywKKyAgICAgICAgICAgIGVyci5vYmplY3QsCisgICAgICAgICAgICBlcnIuc3RhcnQsCisgICAgICAgICAgICBlcnIuZW5kLAorICAgICAgICAgICAgIiVzICglLjIwcikgaXMgbm90IHZhbGlkIExhdGluLTEuIFVzZSAlcy5lbmNvZGUoJ3V0Zi04JykgIgorICAgICAgICAgICAgImlmIHlvdSB3YW50IHRvIHNlbmQgaXQgZW5jb2RlZCBpbiBVVEYtOC4iICUKKyAgICAgICAgICAgIChuYW1lLnRpdGxlKCksIGRhdGFbZXJyLnN0YXJ0OmVyci5lbmRdLCBuYW1lKSkgZnJvbSBOb25lCisKKwogY2xhc3MgSFRUUE1lc3NhZ2UoZW1haWwubWVzc2FnZS5NZXNzYWdlKToKICAgICAjIFhYWCBUaGUgb25seSB1c2FnZSBvZiB0aGlzIG1ldGhvZCBpcyBpbgogICAgICMgaHR0cC5zZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyLiAgTWF5YmUgbW92ZSB0aGUgY29kZSB0aGVyZSBzbwpAQCAtMzA1LDcgKzIxNSw3IEBACiAgICAgcmV0dXJuIGVtYWlsLnBhcnNlci5QYXJzZXIoX2NsYXNzPV9jbGFzcykucGFyc2VzdHIoaHN0cmluZykKIAogCi1jbGFzcyBIVFRQUmVzcG9uc2UoaW8uUmF3SU9CYXNlKToKK2NsYXNzIEhUVFBSZXNwb25zZShpby5CdWZmZXJlZElPQmFzZSk6CiAKICAgICAjIFNlZSBSRkMgMjYxNiBzZWMgMTkuNiBhbmQgUkZDIDE5NDUgc2VjIDYgZm9yIGRldGFpbHMuCiAKQEAgLTM1Myw3ICsyNjMsOCBAQAogICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICMgUHJlc3VtYWJseSwgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gYmVmb3JlCiAgICAgICAgICAgICAjIHNlbmRpbmcgYSB2YWxpZCByZXNwb25zZS4KLSAgICAgICAgICAgIHJhaXNlIEJhZFN0YXR1c0xpbmUobGluZSkKKyAgICAgICAgICAgIHJhaXNlIFJlbW90ZURpc2Nvbm5lY3RlZCgiUmVtb3RlIGVuZCBjbG9zZWQgY29ubmVjdGlvbiB3aXRob3V0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmVzcG9uc2UiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2ZXJzaW9uLCBzdGF0dXMsIHJlYXNvbiA9IGxpbmUuc3BsaXQoTm9uZSwgMikKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CkBAIC01MzIsOSArNDQzLDEwIEBACiAgICAgICAgICAgICByZXR1cm4gYiIiCiAKICAgICAgICAgaWYgYW10IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBBbW91bnQgaXMgZ2l2ZW4sIHNvIGNhbGwgYmFzZSBjbGFzcyB2ZXJzaW9uCi0gICAgICAgICAgICAjICh3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBzZWxmLnJlYWRpbnRvKQotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEhUVFBSZXNwb25zZSwgc2VsZikucmVhZChhbXQpCisgICAgICAgICAgICAjIEFtb3VudCBpcyBnaXZlbiwgaW1wbGVtZW50IHVzaW5nIHJlYWRpbnRvCisgICAgICAgICAgICBiID0gYnl0ZWFycmF5KGFtdCkKKyAgICAgICAgICAgIG4gPSBzZWxmLnJlYWRpbnRvKGIpCisgICAgICAgICAgICByZXR1cm4gbWVtb3J5dmlldyhiKVs6bl0udG9ieXRlcygpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIEFtb3VudCBpcyBub3QgZ2l2ZW4gKHVuYm91bmRlZCByZWFkKSBzbyB3ZSBtdXN0IGNoZWNrIHNlbGYubGVuZ3RoCiAgICAgICAgICAgICAjIGFuZCBzZWxmLmNodW5rZWQKQEAgLTYxNCw3MSArNTI2LDY3IEBACiAgICAgICAgICAgICBpZiBsaW5lIGluIChiJ1xyXG4nLCBiJ1xuJywgYicnKToKICAgICAgICAgICAgICAgICBicmVhawogCisgICAgZGVmIF9nZXRfY2h1bmtfbGVmdChzZWxmKToKKyAgICAgICAgIyByZXR1cm4gc2VsZi5jaHVua19sZWZ0LCByZWFkaW5nIGEgbmV3IGNodW5rIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgIyBjaHVua19sZWZ0ID09IDA6IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY2h1bmssIG5lZWQgdG8gY2xvc2UgaXQKKyAgICAgICAgIyBjaHVua19sZWZ0ID09IE5vbmU6IE5vIGN1cnJlbnQgY2h1bmssIHNob3VsZCByZWFkIG5leHQuCisgICAgICAgICMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIG9yIE5vbmUgaWYgdGhlIGxhc3QgY2h1bmsgaGFzCisgICAgICAgICMgYmVlbiByZWFkLgorICAgICAgICBjaHVua19sZWZ0ID0gc2VsZi5jaHVua19sZWZ0CisgICAgICAgIGlmIG5vdCBjaHVua19sZWZ0OiAjIENhbiBiZSAwIG9yIE5vbmUKKyAgICAgICAgICAgIGlmIGNodW5rX2xlZnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBXZSBhcmUgYXQgdGhlIGVuZCBvZiBjaHVuay4gZGljYXJkIGNodW5rIGVuZAorICAgICAgICAgICAgICAgIHNlbGYuX3NhZmVfcmVhZCgyKSAgIyB0b3NzIHRoZSBDUkxGIGF0IHRoZSBlbmQgb2YgdGhlIGNodW5rCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2h1bmtfbGVmdCA9IHNlbGYuX3JlYWRfbmV4dF9jaHVua19zaXplKCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEluY29tcGxldGVSZWFkKGInJykKKyAgICAgICAgICAgIGlmIGNodW5rX2xlZnQgPT0gMDoKKyAgICAgICAgICAgICAgICAjIGxhc3QgY2h1bms6IDEqKCIwIikgWyBjaHVuay1leHRlbnNpb24gXSBDUkxGCisgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9hbmRfZGlzY2FyZF90cmFpbGVyKCkKKyAgICAgICAgICAgICAgICAjIHdlIHJlYWQgZXZlcnl0aGluZzsgY2xvc2UgdGhlICJmaWxlIgorICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2Nvbm4oKQorICAgICAgICAgICAgICAgIGNodW5rX2xlZnQgPSBOb25lCisgICAgICAgICAgICBzZWxmLmNodW5rX2xlZnQgPSBjaHVua19sZWZ0CisgICAgICAgIHJldHVybiBjaHVua19sZWZ0CisKICAgICBkZWYgX3JlYWRhbGxfY2h1bmtlZChzZWxmKToKICAgICAgICAgYXNzZXJ0IHNlbGYuY2h1bmtlZCAhPSBfVU5LTk9XTgotICAgICAgICBjaHVua19sZWZ0ID0gc2VsZi5jaHVua19sZWZ0CiAgICAgICAgIHZhbHVlID0gW10KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIGNodW5rX2xlZnQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rX2xlZnQgPSBzZWxmLl9yZWFkX25leHRfY2h1bmtfc2l6ZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNodW5rX2xlZnQgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEluY29tcGxldGVSZWFkKGInJy5qb2luKHZhbHVlKSkKLSAgICAgICAgICAgIHZhbHVlLmFwcGVuZChzZWxmLl9zYWZlX3JlYWQoY2h1bmtfbGVmdCkpCi0KLSAgICAgICAgICAgICMgd2UgcmVhZCB0aGUgd2hvbGUgY2h1bmssIGdldCBhbm90aGVyCi0gICAgICAgICAgICBzZWxmLl9zYWZlX3JlYWQoMikgICAgICAjIHRvc3MgdGhlIENSTEYgYXQgdGhlIGVuZCBvZiB0aGUgY2h1bmsKLSAgICAgICAgICAgIGNodW5rX2xlZnQgPSBOb25lCi0KLSAgICAgICAgc2VsZi5fcmVhZF9hbmRfZGlzY2FyZF90cmFpbGVyKCkKLQotICAgICAgICAjIHdlIHJlYWQgZXZlcnl0aGluZzsgY2xvc2UgdGhlICJmaWxlIgotICAgICAgICBzZWxmLl9jbG9zZV9jb25uKCkKLQotICAgICAgICByZXR1cm4gYicnLmpvaW4odmFsdWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgY2h1bmtfbGVmdCA9IHNlbGYuX2dldF9jaHVua19sZWZ0KCkKKyAgICAgICAgICAgICAgICBpZiBjaHVua19sZWZ0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5kKHNlbGYuX3NhZmVfcmVhZChjaHVua19sZWZ0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmNodW5rX2xlZnQgPSAwCisgICAgICAgICAgICByZXR1cm4gYicnLmpvaW4odmFsdWUpCisgICAgICAgIGV4Y2VwdCBJbmNvbXBsZXRlUmVhZDoKKyAgICAgICAgICAgIHJhaXNlIEluY29tcGxldGVSZWFkKGInJy5qb2luKHZhbHVlKSkKIAogICAgIGRlZiBfcmVhZGludG9fY2h1bmtlZChzZWxmLCBiKToKICAgICAgICAgYXNzZXJ0IHNlbGYuY2h1bmtlZCAhPSBfVU5LTk9XTgotICAgICAgICBjaHVua19sZWZ0ID0gc2VsZi5jaHVua19sZWZ0Ci0KICAgICAgICAgdG90YWxfYnl0ZXMgPSAwCiAgICAgICAgIG12YiA9IG1lbW9yeXZpZXcoYikKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIGNodW5rX2xlZnQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGNodW5rX2xlZnQgPSBzZWxmLl9yZWFkX25leHRfY2h1bmtfc2l6ZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNodW5rX2xlZnQgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEluY29tcGxldGVSZWFkKGJ5dGVzKGJbMDp0b3RhbF9ieXRlc10pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGNodW5rX2xlZnQgPSBzZWxmLl9nZXRfY2h1bmtfbGVmdCgpCisgICAgICAgICAgICAgICAgaWYgY2h1bmtfbGVmdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxfYnl0ZXMKIAotICAgICAgICAgICAgaWYgbGVuKG12YikgPCBjaHVua19sZWZ0OgotICAgICAgICAgICAgICAgIG4gPSBzZWxmLl9zYWZlX3JlYWRpbnRvKG12YikKLSAgICAgICAgICAgICAgICBzZWxmLmNodW5rX2xlZnQgPSBjaHVua19sZWZ0IC0gbgotICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbF9ieXRlcyArIG4KLSAgICAgICAgICAgIGVsaWYgbGVuKG12YikgPT0gY2h1bmtfbGVmdDoKLSAgICAgICAgICAgICAgICBuID0gc2VsZi5fc2FmZV9yZWFkaW50byhtdmIpCi0gICAgICAgICAgICAgICAgc2VsZi5fc2FmZV9yZWFkKDIpICAjIHRvc3MgdGhlIENSTEYgYXQgdGhlIGVuZCBvZiB0aGUgY2h1bmsKLSAgICAgICAgICAgICAgICBzZWxmLmNodW5rX2xlZnQgPSBOb25lCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsX2J5dGVzICsgbgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0ZW1wX212YiA9IG12YlswOmNodW5rX2xlZnRdCisgICAgICAgICAgICAgICAgaWYgbGVuKG12YikgPD0gY2h1bmtfbGVmdDoKKyAgICAgICAgICAgICAgICAgICAgbiA9IHNlbGYuX3NhZmVfcmVhZGludG8obXZiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNodW5rX2xlZnQgPSBjaHVua19sZWZ0IC0gbgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxfYnl0ZXMgKyBuCisKKyAgICAgICAgICAgICAgICB0ZW1wX212YiA9IG12Yls6Y2h1bmtfbGVmdF0KICAgICAgICAgICAgICAgICBuID0gc2VsZi5fc2FmZV9yZWFkaW50byh0ZW1wX212YikKICAgICAgICAgICAgICAgICBtdmIgPSBtdmJbbjpdCiAgICAgICAgICAgICAgICAgdG90YWxfYnl0ZXMgKz0gbgorICAgICAgICAgICAgICAgIHNlbGYuY2h1bmtfbGVmdCA9IDAKIAotICAgICAgICAgICAgIyB3ZSByZWFkIHRoZSB3aG9sZSBjaHVuaywgZ2V0IGFub3RoZXIKLSAgICAgICAgICAgIHNlbGYuX3NhZmVfcmVhZCgyKSAgICAgICMgdG9zcyB0aGUgQ1JMRiBhdCB0aGUgZW5kIG9mIHRoZSBjaHVuawotICAgICAgICAgICAgY2h1bmtfbGVmdCA9IE5vbmUKLQotICAgICAgICBzZWxmLl9yZWFkX2FuZF9kaXNjYXJkX3RyYWlsZXIoKQotCi0gICAgICAgICMgd2UgcmVhZCBldmVyeXRoaW5nOyBjbG9zZSB0aGUgImZpbGUiCi0gICAgICAgIHNlbGYuX2Nsb3NlX2Nvbm4oKQotCi0gICAgICAgIHJldHVybiB0b3RhbF9ieXRlcworICAgICAgICBleGNlcHQgSW5jb21wbGV0ZVJlYWQ6CisgICAgICAgICAgICByYWlzZSBJbmNvbXBsZXRlUmVhZChieXRlcyhiWzA6dG90YWxfYnl0ZXNdKSkKIAogICAgIGRlZiBfc2FmZV9yZWFkKHNlbGYsIGFtdCk6CiAgICAgICAgICIiIlJlYWQgdGhlIG51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQsIGNvbXBlbnNhdGluZyBmb3IgcGFydGlhbCByZWFkcy4KQEAgLTcxOSw2ICs2MjcsODEgQEAKICAgICAgICAgICAgIHRvdGFsX2J5dGVzICs9IG4KICAgICAgICAgcmV0dXJuIHRvdGFsX2J5dGVzCiAKKyAgICBkZWYgcmVhZDEoc2VsZiwgbj0tMSk6CisgICAgICAgICIiIlJlYWQgd2l0aCBhdCBtb3N0IG9uZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxsLiAgSWYgYXQgbGVhc3Qgb25lCisgICAgICAgIGJ5dGUgaXMgYnVmZmVyZWQsIHJldHVybiB0aGF0IGluc3RlYWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmZwIGlzIE5vbmUgb3Igc2VsZi5fbWV0aG9kID09ICJIRUFEIjoKKyAgICAgICAgICAgIHJldHVybiBiIiIKKyAgICAgICAgaWYgc2VsZi5jaHVua2VkOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQxX2NodW5rZWQobikKKyAgICAgICAgaWYgc2VsZi5sZW5ndGggaXMgbm90IE5vbmUgYW5kIChuIDwgMCBvciBuID4gc2VsZi5sZW5ndGgpOgorICAgICAgICAgICAgbiA9IHNlbGYubGVuZ3RoCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnAucmVhZDEobikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBpZiBuID49IDA6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgc29tZSBpbXBsZW1lbnRhdGlvbnMsIGxpa2UgQnVmZmVyZWRSZWFkZXIsIGRvbid0IHN1cHBvcnQgLTEKKyAgICAgICAgICAgICMgUmVhZCBhbiBhcmJpdHJhcmlseSBzZWxlY3RlZCBsYXJnZWlzaCBjaHVuay4KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnAucmVhZDEoMTYqMTAyNCkKKyAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgbjoKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2Nvbm4oKQorICAgICAgICBlbGlmIHNlbGYubGVuZ3RoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5sZW5ndGggLT0gbGVuKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHBlZWsoc2VsZiwgbj0tMSk6CisgICAgICAgICMgSGF2aW5nIHRoaXMgZW5hYmxlcyBJT0Jhc2UucmVhZGxpbmUoKSB0byByZWFkIG1vcmUgdGhhbiBvbmUKKyAgICAgICAgIyBieXRlIGF0IGEgdGltZQorICAgICAgICBpZiBzZWxmLmZwIGlzIE5vbmUgb3Igc2VsZi5fbWV0aG9kID09ICJIRUFEIjoKKyAgICAgICAgICAgIHJldHVybiBiIiIKKyAgICAgICAgaWYgc2VsZi5jaHVua2VkOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfY2h1bmtlZChuKQorICAgICAgICByZXR1cm4gc2VsZi5mcC5wZWVrKG4pCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ9LTEpOgorICAgICAgICBpZiBzZWxmLmZwIGlzIE5vbmUgb3Igc2VsZi5fbWV0aG9kID09ICJIRUFEIjoKKyAgICAgICAgICAgIHJldHVybiBiIiIKKyAgICAgICAgaWYgc2VsZi5jaHVua2VkOgorICAgICAgICAgICAgIyBGYWxsYmFjayB0byBJT0Jhc2UgcmVhZGxpbmUgd2hpY2ggdXNlcyBwZWVrKCkgYW5kIHJlYWQoKQorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkucmVhZGxpbmUobGltaXQpCisgICAgICAgIGlmIHNlbGYubGVuZ3RoIGlzIG5vdCBOb25lIGFuZCAobGltaXQgPCAwIG9yIGxpbWl0ID4gc2VsZi5sZW5ndGgpOgorICAgICAgICAgICAgbGltaXQgPSBzZWxmLmxlbmd0aAorICAgICAgICByZXN1bHQgPSBzZWxmLmZwLnJlYWRsaW5lKGxpbWl0KQorICAgICAgICBpZiBub3QgcmVzdWx0IGFuZCBsaW1pdDoKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2Nvbm4oKQorICAgICAgICBlbGlmIHNlbGYubGVuZ3RoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5sZW5ndGggLT0gbGVuKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9yZWFkMV9jaHVua2VkKHNlbGYsIG4pOgorICAgICAgICAjIFN0cmljdGx5IHNwZWFraW5nLCBfZ2V0X2NodW5rX2xlZnQoKSBtYXkgY2F1c2UgbW9yZSB0aGFuIG9uZSByZWFkLAorICAgICAgICAjIGJ1dCB0aGF0IGlzIG9rLCBzaW5jZSB0aGF0IGlzIHRvIHNhdGlzZnkgdGhlIGNodW5rZWQgcHJvdG9jb2wuCisgICAgICAgIGNodW5rX2xlZnQgPSBzZWxmLl9nZXRfY2h1bmtfbGVmdCgpCisgICAgICAgIGlmIGNodW5rX2xlZnQgaXMgTm9uZSBvciBuID09IDA6CisgICAgICAgICAgICByZXR1cm4gYicnCisgICAgICAgIGlmIG5vdCAoMCA8PSBuIDw9IGNodW5rX2xlZnQpOgorICAgICAgICAgICAgbiA9IGNodW5rX2xlZnQgIyBpZiBuIGlzIG5lZ2F0aXZlIG9yIGxhcmdlciB0aGFuIGNodW5rX2xlZnQKKyAgICAgICAgcmVhZCA9IHNlbGYuZnAucmVhZDEobikKKyAgICAgICAgc2VsZi5jaHVua19sZWZ0IC09IGxlbihyZWFkKQorICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgIHJhaXNlIEluY29tcGxldGVSZWFkKGIiIikKKyAgICAgICAgcmV0dXJuIHJlYWQKKworICAgIGRlZiBfcGVla19jaHVua2VkKHNlbGYsIG4pOgorICAgICAgICAjIFN0cmljdGx5IHNwZWFraW5nLCBfZ2V0X2NodW5rX2xlZnQoKSBtYXkgY2F1c2UgbW9yZSB0aGFuIG9uZSByZWFkLAorICAgICAgICAjIGJ1dCB0aGF0IGlzIG9rLCBzaW5jZSB0aGF0IGlzIHRvIHNhdGlzZnkgdGhlIGNodW5rZWQgcHJvdG9jb2wuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNodW5rX2xlZnQgPSBzZWxmLl9nZXRfY2h1bmtfbGVmdCgpCisgICAgICAgIGV4Y2VwdCBJbmNvbXBsZXRlUmVhZDoKKyAgICAgICAgICAgIHJldHVybiBiJycgIyBwZWVrIGRvZXNuJ3Qgd29ycnkgYWJvdXQgcHJvdG9jb2wKKyAgICAgICAgaWYgY2h1bmtfbGVmdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGInJyAjIGVvZgorICAgICAgICAjIHBlZWsgaXMgYWxsb3dlZCB0byByZXR1cm4gbW9yZSB0aGFuIHJlcXVlc3RlZC4gIEp1c3QgcmVxdWVzdCB0aGUKKyAgICAgICAgIyBlbnRpcmUgY2h1bmssIGFuZCB0cnVuY2F0ZSB3aGF0IHdlIGdldC4KKyAgICAgICAgcmV0dXJuIHNlbGYuZnAucGVlayhjaHVua19sZWZ0KVs6Y2h1bmtfbGVmdF0KKwogICAgIGRlZiBmaWxlbm8oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmZwLmZpbGVubygpCiAKQEAgLTc2MiwxNCArNzQ1LDYgQEAKICAgICBkZWZhdWx0X3BvcnQgPSBIVFRQX1BPUlQKICAgICBhdXRvX29wZW4gPSAxCiAgICAgZGVidWdsZXZlbCA9IDAKLSAgICAjIFRDUCBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBUQ1Agc3RhY2sgb24KLSAgICAjIGEgcGVyLWNvbm5lY3Rpb24gYmFzaXMuICBUaGVyZSBpcyBubyBzaW1wbGUgYW5kIGVmZmljaWVudAotICAgICMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWVjaGFuaXNtIGZvciBkZXRlcm1pbmluZyB0aGUgTVNTLCBzbwotICAgICMgaW5zdGVhZCBhIHJlYXNvbmFibGUgZXN0aW1hdGUgaXMgY2hvc2VuLiAgVGhlIGdldHNvY2tvcHQoKQotICAgICMgaW50ZXJmYWNlIHVzaW5nIHRoZSBUQ1BfTUFYU0VHIHBhcmFtZXRlciBtYXkgYmUgYSBzdWl0YWJsZQotICAgICMgYXBwcm9hY2ggb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4gQSB2YWx1ZSBvZiAxNktpQiBpcyBjaG9zZW4KLSAgICAjIGFzIGEgcmVhc29uYWJsZSBlc3RpbWF0ZSBvZiB0aGUgbWF4aW11bSBNU1MuCi0gICAgbXNzID0gMTYzODQKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAogICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKToKQEAgLTg1MSw3ICs4MjYsNyBAQAogICAgICAgICByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VfY2xhc3Moc2VsZi5zb2NrLCBtZXRob2Q9c2VsZi5fbWV0aG9kKQogICAgICAgICAodmVyc2lvbiwgY29kZSwgbWVzc2FnZSkgPSByZXNwb25zZS5fcmVhZF9zdGF0dXMoKQogCi0gICAgICAgIGlmIGNvZGUgIT0gMjAwOgorICAgICAgICBpZiBjb2RlICE9IGh0dHAuSFRUUFN0YXR1cy5PSzoKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiVHVubmVsIGNvbm5lY3Rpb24gZmFpbGVkOiAlZCAlcyIgJSAoY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaXAoKSkpCkBAIC04NjUsMTAgKzg0MCwxNCBAQAogICAgICAgICAgICAgaWYgbGluZSBpbiAoYidcclxuJywgYidcbicsIGInJyk6CiAgICAgICAgICAgICAgICAgYnJlYWsKIAorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgICAgICBwcmludCgnaGVhZGVyOicsIGxpbmUuZGVjb2RlKCkpCisKICAgICBkZWYgY29ubmVjdChzZWxmKToKICAgICAgICAgIiIiQ29ubmVjdCB0byB0aGUgaG9zdCBhbmQgcG9ydCBzcGVjaWZpZWQgaW4gX19pbml0X18uIiIiCi0gICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uKChzZWxmLmhvc3Qsc2VsZi5wb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQorICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgIChzZWxmLmhvc3Qsc2VsZi5wb3J0KSwgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQorICAgICAgICBzZWxmLnNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19UQ1AsIHNvY2tldC5UQ1BfTk9ERUxBWSwgMSkKIAogICAgICAgICBpZiBzZWxmLl90dW5uZWxfaG9zdDoKICAgICAgICAgICAgIHNlbGYuX3R1bm5lbCgpCkBAIC05NTEsMTkgKzkzMCw5IEBACiAgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoKGIiIiwgYiIiKSkKICAgICAgICAgbXNnID0gYiJcclxuIi5qb2luKHNlbGYuX2J1ZmZlcikKICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6XQotICAgICAgICAjIElmIG1zZyBhbmQgbWVzc2FnZV9ib2R5IGFyZSBzZW50IGluIGEgc2luZ2xlIHNlbmQoKSBjYWxsLAotICAgICAgICAjIGl0IHdpbGwgYXZvaWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBpbnRlcmFjdGlvbgotICAgICAgICAjIGJldHdlZW4gZGVsYXllZCBhY2sgYW5kIHRoZSBOYWdsZSBhbGdvcml0aG0uIEhvd2V2ZXIsCi0gICAgICAgICMgdGhlcmUgaXMgbm8gcGVyZm9ybWFuY2UgZ2FpbiBpZiB0aGUgbWVzc2FnZSBpcyBsYXJnZXIKLSAgICAgICAgIyB0aGFuIE1TUyAoYW5kIHRoZXJlIGlzIGEgbWVtb3J5IHBlbmFsdHkgZm9yIHRoZSBtZXNzYWdlCi0gICAgICAgICMgY29weSkuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZV9ib2R5LCBieXRlcykgYW5kIGxlbihtZXNzYWdlX2JvZHkpIDwgc2VsZi5tc3M6Ci0gICAgICAgICAgICBtc2cgKz0gbWVzc2FnZV9ib2R5Ci0gICAgICAgICAgICBtZXNzYWdlX2JvZHkgPSBOb25lCisKICAgICAgICAgc2VsZi5zZW5kKG1zZykKICAgICAgICAgaWYgbWVzc2FnZV9ib2R5IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBtZXNzYWdlX2JvZHkgd2FzIG5vdCBhIHN0cmluZyAoaS5lLiBpdCBpcyBhIGZpbGUpLCBhbmQKLSAgICAgICAgICAgICMgd2UgbXVzdCBydW4gdGhlIHJpc2sgb2YgTmFnbGUuCiAgICAgICAgICAgICBzZWxmLnNlbmQobWVzc2FnZV9ib2R5KQogCiAgICAgZGVmIHB1dHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsIHNraXBfaG9zdD0wLCBza2lwX2FjY2VwdF9lbmNvZGluZz0wKToKQEAgLTExNzgsNyArMTE0Nyw3IEBACiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYm9keSwgc3RyKToKICAgICAgICAgICAgICMgUkZDIDI2MTYgU2VjdGlvbiAzLjcuMSBzYXlzIHRoYXQgdGV4dCBkZWZhdWx0IGhhcyBhCiAgICAgICAgICAgICAjIGRlZmF1bHQgY2hhcnNldCBvZiBpc28tODg1OS0xLgotICAgICAgICAgICAgYm9keSA9IGJvZHkuZW5jb2RlKCdpc28tODg1OS0xJykKKyAgICAgICAgICAgIGJvZHkgPSBfZW5jb2RlKGJvZHksICdib2R5JykKICAgICAgICAgc2VsZi5lbmRoZWFkZXJzKGJvZHkpCiAKICAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6CkBAIC0xMTg2LDcgKzExNTUsNyBAQAogCiAgICAgICAgIElmIHRoZSBIVFRQQ29ubmVjdGlvbiBpcyBpbiB0aGUgY29ycmVjdCBzdGF0ZSwgcmV0dXJucyBhbgogICAgICAgICBpbnN0YW5jZSBvZiBIVFRQUmVzcG9uc2Ugb3Igb2Ygd2hhdGV2ZXIgb2JqZWN0IGlzIHJldHVybmVkIGJ5Ci0gICAgICAgIGNsYXNzIHRoZSByZXNwb25zZV9jbGFzcyB2YXJpYWJsZS4KKyAgICAgICAgdGhlIHJlc3BvbnNlX2NsYXNzIHZhcmlhYmxlLgogCiAgICAgICAgIElmIGEgcmVxdWVzdCBoYXMgbm90IGJlZW4gc2VudCBvciBpZiBhIHByZXZpb3VzIHJlc3BvbnNlIGhhcwogICAgICAgICBub3QgYmUgaGFuZGxlZCwgUmVzcG9uc2VOb3RSZWFkeSBpcyByYWlzZWQuICBJZiB0aGUgSFRUUApAQCAtMTIyNCw3ICsxMTkzLDExIEBACiAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VfY2xhc3Moc2VsZi5zb2NrLCBtZXRob2Q9c2VsZi5fbWV0aG9kKQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc3BvbnNlLmJlZ2luKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXNwb25zZS5iZWdpbigpCisgICAgICAgICAgICBleGNlcHQgQ29ubmVjdGlvbkVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBhc3NlcnQgcmVzcG9uc2Uud2lsbF9jbG9zZSAhPSBfVU5LTk9XTgogICAgICAgICAgICAgc2VsZi5fX3N0YXRlID0gX0NTX0lETEUKIApAQCAtMTMyNyw3ICsxMzAwLDggQEAKICAgICAgICAgICAgIGUgPSAnLCAlaSBtb3JlIGV4cGVjdGVkJyAlIHNlbGYuZXhwZWN0ZWQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGUgPSAnJwotICAgICAgICByZXR1cm4gJ0luY29tcGxldGVSZWFkKCVpIGJ5dGVzIHJlYWQlcyknICUgKGxlbihzZWxmLnBhcnRpYWwpLCBlKQorICAgICAgICByZXR1cm4gJyVzKCVpIGJ5dGVzIHJlYWQlcyknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLnBhcnRpYWwpLCBlKQogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gcmVwcihzZWxmKQogCkBAIC0xMzU1LDUgKzEzMjksMTAgQEAKICAgICAgICAgSFRUUEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCAiZ290IG1vcmUgdGhhbiAlZCBieXRlcyB3aGVuIHJlYWRpbmcgJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoX01BWExJTkUsIGxpbmVfdHlwZSkpCiAKK2NsYXNzIFJlbW90ZURpc2Nvbm5lY3RlZChDb25uZWN0aW9uUmVzZXRFcnJvciwgQmFkU3RhdHVzTGluZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpwb3MsICoqa3cpOgorICAgICAgICBCYWRTdGF0dXNMaW5lLl9faW5pdF9fKHNlbGYsICIiKQorICAgICAgICBDb25uZWN0aW9uUmVzZXRFcnJvci5fX2luaXRfXyhzZWxmLCAqcG9zLCAqKmt3KQorCiAjIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogZXJyb3IgPSBIVFRQRXhjZXB0aW9uCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9jb29raWVqYXIucHkgYi9MaWIvaHR0cC9jb29raWVqYXIucHkKaW5kZXggY2FkNmIzYS4uNDQ2NmQyZSAxMDA2NDQKLS0tIGEvTGliL2h0dHAvY29va2llamFyLnB5CisrKyBiL0xpYi9odHRwL2Nvb2tpZWphci5weQpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjbm93KCkKICAgICBlbHNlOgogICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAodCkKLSAgICByZXR1cm4gIiVzICUwMmQtJXMtJTA0ZCAlMDJkOiUwMmQ6JTAyZCBHTVQiICUgKAorICAgIHJldHVybiAiJXMsICUwMmQtJXMtJTA0ZCAlMDJkOiUwMmQ6JTAyZCBHTVQiICUgKAogICAgICAgICBEQVlTW2R0LndlZWtkYXkoKV0sIGR0LmRheSwgTU9OVEhTW2R0Lm1vbnRoLTFdLAogICAgICAgICBkdC55ZWFyLCBkdC5ob3VyLCBkdC5taW51dGUsIGR0LnNlY29uZCkKIApAQCAtMTQzLDYgKzE0MywxMCBAQAogICAgIHJldHVybiBvZmZzZXQKIAogZGVmIF9zdHIydGltZShkYXksIG1vbiwgeXIsIGhyLCBtaW4sIHNlYywgdHopOgorICAgIHlyID0gaW50KHlyKQorICAgIGlmIHlyID4gZGF0ZXRpbWUuTUFYWUVBUjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgICMgdHJhbnNsYXRlIG1vbnRoIG5hbWUgdG8gbnVtYmVyCiAgICAgIyBtb250aCBudW1iZXJzIHN0YXJ0IHdpdGggMSAoSmFudWFyeSkKICAgICB0cnk6CkBAIC0xNjMsNyArMTY3LDYgQEAKICAgICBpZiBtaW4gaXMgTm9uZTogbWluID0gMAogICAgIGlmIHNlYyBpcyBOb25lOiBzZWMgPSAwCiAKLSAgICB5ciA9IGludCh5cikKICAgICBkYXkgPSBpbnQoZGF5KQogICAgIGhyID0gaW50KGhyKQogICAgIG1pbiA9IGludChtaW4pCkBAIC04MjEsNyArODI0LDcgQEAKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCIlcz0lcyIgJSAobmFtZSwgcmVwcihhdHRyKSkpCiAgICAgICAgIGFyZ3MuYXBwZW5kKCJyZXN0PSVzIiAlIHJlcHIoc2VsZi5fcmVzdCkpCiAgICAgICAgIGFyZ3MuYXBwZW5kKCJyZmMyMTA5PSVzIiAlIHJlcHIoc2VsZi5yZmMyMTA5KSkKLSAgICAgICAgcmV0dXJuICJDb29raWUoJXMpIiAlICIsICIuam9pbihhcmdzKQorICAgICAgICByZXR1cm4gIiVzKCVzKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICIsICIuam9pbihhcmdzKSkKIAogCiBjbGFzcyBDb29raWVQb2xpY3k6CkBAIC0xODM4LDcgKzE4NDEsNyBAQAogY2xhc3MgTFdQQ29va2llSmFyKEZpbGVDb29raWVKYXIpOgogICAgICIiIgogICAgIFRoZSBMV1BDb29raWVKYXIgc2F2ZXMgYSBzZXF1ZW5jZSBvZiAiU2V0LUNvb2tpZTMiIGxpbmVzLgotICAgICJTZXQtQ29va2llMyIgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IHRoZSBsaWJ3d3ctcGVybCBsaWJhcnksIG5vdCBrbm93bgorICAgICJTZXQtQ29va2llMyIgaXMgdGhlIGZvcm1hdCB1c2VkIGJ5IHRoZSBsaWJ3d3ctcGVybCBsaWJyYXJ5LCBub3Qga25vd24KICAgICB0byBiZSBjb21wYXRpYmxlIHdpdGggYW55IGJyb3dzZXIsIGJ1dCB3aGljaCBpcyBlYXN5IHRvIHJlYWQgYW5kCiAgICAgZG9lc24ndCBsb3NlIGluZm9ybWF0aW9uIGFib3V0IFJGQyAyOTY1IGNvb2tpZXMuCiAKQEAgLTE5OTksNyArMjAwMiw2IEBACiAKICAgICAgICAgbWFnaWMgPSBmLnJlYWRsaW5lKCkKICAgICAgICAgaWYgbm90IHNlbGYubWFnaWNfcmUuc2VhcmNoKG1hZ2ljKToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgcmFpc2UgTG9hZEVycm9yKAogICAgICAgICAgICAgICAgICIlciBkb2VzIG5vdCBsb29rIGxpa2UgYSBOZXRzY2FwZSBmb3JtYXQgY29va2llcyBmaWxlIiAlCiAgICAgICAgICAgICAgICAgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9jb29raWVzLnB5IGIvTGliL2h0dHAvY29va2llcy5weQppbmRleCA0ODJlNjAxLi5hNzNmZTM4IDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jb29raWVzLnB5CisrKyBiL0xpYi9odHRwL2Nvb2tpZXMucHkKQEAgLTEzOCw2ICsxMzgsMTIgQEAKIF9zZW1pc3BhY2Vqb2luID0gJzsgJy5qb2luCiBfc3BhY2Vqb2luID0gJyAnLmpvaW4KIAorZGVmIF93YXJuX2RlcHJlY2F0ZWRfc2V0dGVyKHNldHRlcik6CisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgbXNnID0gKCdUaGUgLiVzIHNldHRlciBpcyBkZXByZWNhdGVkLiBUaGUgYXR0cmlidXRlIHdpbGwgYmUgcmVhZC1vbmx5IGluICcKKyAgICAgICAgICAgJ2Z1dHVyZSByZWxlYXNlcy4gUGxlYXNlIHVzZSB0aGUgc2V0KCkgbWV0aG9kIGluc3RlYWQuJyAlIHNldHRlcikKKyAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTMpCisKICMKICMgRGVmaW5lIGFuIGV4Y2VwdGlvbiB2aXNpYmxlIHRvIEV4dGVybmFsIG1vZHVsZXMKICMKQEAgLTE1MCw4OSArMTU2LDM3IEBACiAjIGEgdHdvLXdheSBxdW90aW5nIGFsZ29yaXRobS4gIEFueSBub24tdGV4dCBjaGFyYWN0ZXIgaXMgdHJhbnNsYXRlZAogIyBpbnRvIGEgNCBjaGFyYWN0ZXIgc2VxdWVuY2U6IGEgZm9yd2FyZC1zbGFzaCBmb2xsb3dlZCBieSB0aGUKICMgdGhyZWUtZGlnaXQgb2N0YWwgZXF1aXZhbGVudCBvZiB0aGUgY2hhcmFjdGVyLiAgQW55ICdcJyBvciAnIicgaXMKLSMgcXVvdGVkIHdpdGggYSBwcmVjZWVkaW5nICdcJyBzbGFzaC4KKyMgcXVvdGVkIHdpdGggYSBwcmVjZWRpbmcgJ1wnIHNsYXNoLgorIyBCZWNhdXNlIG9mIHRoZSB3YXkgYnJvd3NlcnMgcmVhbGx5IGhhbmRsZSBjb29raWVzIChhcyBvcHBvc2VkIHRvIHdoYXQKKyMgdGhlIFJGQyBzYXlzKSB3ZSBhbHNvIGVuY29kZSAiLCIgYW5kICI7Ii4KICMKICMgVGhlc2UgYXJlIHRha2VuIGZyb20gUkZDMjA2OCBhbmQgUkZDMjEwOS4KICMgICAgICAgX0xlZ2FsQ2hhcnMgICAgICAgaXMgdGhlIGxpc3Qgb2YgY2hhcnMgd2hpY2ggZG9uJ3QgcmVxdWlyZSAiJ3MKICMgICAgICAgX1RyYW5zbGF0b3IgICAgICAgaGFzaC10YWJsZSBmb3IgZmFzdCBxdW90aW5nCiAjCi1fTGVnYWxDaGFycyAgICAgICA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICIhIyQlJicqKy0uXl9gfH46IgotX1RyYW5zbGF0b3IgICAgICAgPSB7Ci0gICAgJ1wwMDAnIDogJ1xcMDAwJywgICdcMDAxJyA6ICdcXDAwMScsICAnXDAwMicgOiAnXFwwMDInLAotICAgICdcMDAzJyA6ICdcXDAwMycsICAnXDAwNCcgOiAnXFwwMDQnLCAgJ1wwMDUnIDogJ1xcMDA1JywKLSAgICAnXDAwNicgOiAnXFwwMDYnLCAgJ1wwMDcnIDogJ1xcMDA3JywgICdcMDEwJyA6ICdcXDAxMCcsCi0gICAgJ1wwMTEnIDogJ1xcMDExJywgICdcMDEyJyA6ICdcXDAxMicsICAnXDAxMycgOiAnXFwwMTMnLAotICAgICdcMDE0JyA6ICdcXDAxNCcsICAnXDAxNScgOiAnXFwwMTUnLCAgJ1wwMTYnIDogJ1xcMDE2JywKLSAgICAnXDAxNycgOiAnXFwwMTcnLCAgJ1wwMjAnIDogJ1xcMDIwJywgICdcMDIxJyA6ICdcXDAyMScsCi0gICAgJ1wwMjInIDogJ1xcMDIyJywgICdcMDIzJyA6ICdcXDAyMycsICAnXDAyNCcgOiAnXFwwMjQnLAotICAgICdcMDI1JyA6ICdcXDAyNScsICAnXDAyNicgOiAnXFwwMjYnLCAgJ1wwMjcnIDogJ1xcMDI3JywKLSAgICAnXDAzMCcgOiAnXFwwMzAnLCAgJ1wwMzEnIDogJ1xcMDMxJywgICdcMDMyJyA6ICdcXDAzMicsCi0gICAgJ1wwMzMnIDogJ1xcMDMzJywgICdcMDM0JyA6ICdcXDAzNCcsICAnXDAzNScgOiAnXFwwMzUnLAotICAgICdcMDM2JyA6ICdcXDAzNicsICAnXDAzNycgOiAnXFwwMzcnLAorX0xlZ2FsQ2hhcnMgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAiISMkJSYnKistLl5fYHx+OiIKK19VbmVzY2FwZWRDaGFycyA9IF9MZWdhbENoYXJzICsgJyAoKS88PT4/QFtde30nCiAKLSAgICAjIEJlY2F1c2Ugb2YgdGhlIHdheSBicm93c2VycyByZWFsbHkgaGFuZGxlIGNvb2tpZXMgKGFzIG9wcG9zZWQKLSAgICAjIHRvIHdoYXQgdGhlIFJGQyBzYXlzKSB3ZSBhbHNvIGVuY29kZSAsIGFuZCA7CitfVHJhbnNsYXRvciA9IHtuOiAnXFwlMDNvJyAlIG4KKyAgICAgICAgICAgICAgIGZvciBuIGluIHNldChyYW5nZSgyNTYpKSAtIHNldChtYXAob3JkLCBfVW5lc2NhcGVkQ2hhcnMpKX0KK19UcmFuc2xhdG9yLnVwZGF0ZSh7CisgICAgb3JkKCciJyk6ICdcXCInLAorICAgIG9yZCgnXFwnKTogJ1xcXFwnLAorfSkKIAotICAgICcsJyA6ICdcXDA1NCcsICc7JyA6ICdcXDA3MycsCitfaXNfbGVnYWxfa2V5ID0gcmUuY29tcGlsZSgnWyVzXSsnICUgcmUuZXNjYXBlKF9MZWdhbENoYXJzKSkuZnVsbG1hdGNoCiAKLSAgICAnIicgOiAnXFwiJywgICAgICAgJ1xcJyA6ICdcXFxcJywKLQotICAgICdcMTc3JyA6ICdcXDE3NycsICAnXDIwMCcgOiAnXFwyMDAnLCAgJ1wyMDEnIDogJ1xcMjAxJywKLSAgICAnXDIwMicgOiAnXFwyMDInLCAgJ1wyMDMnIDogJ1xcMjAzJywgICdcMjA0JyA6ICdcXDIwNCcsCi0gICAgJ1wyMDUnIDogJ1xcMjA1JywgICdcMjA2JyA6ICdcXDIwNicsICAnXDIwNycgOiAnXFwyMDcnLAotICAgICdcMjEwJyA6ICdcXDIxMCcsICAnXDIxMScgOiAnXFwyMTEnLCAgJ1wyMTInIDogJ1xcMjEyJywKLSAgICAnXDIxMycgOiAnXFwyMTMnLCAgJ1wyMTQnIDogJ1xcMjE0JywgICdcMjE1JyA6ICdcXDIxNScsCi0gICAgJ1wyMTYnIDogJ1xcMjE2JywgICdcMjE3JyA6ICdcXDIxNycsICAnXDIyMCcgOiAnXFwyMjAnLAotICAgICdcMjIxJyA6ICdcXDIyMScsICAnXDIyMicgOiAnXFwyMjInLCAgJ1wyMjMnIDogJ1xcMjIzJywKLSAgICAnXDIyNCcgOiAnXFwyMjQnLCAgJ1wyMjUnIDogJ1xcMjI1JywgICdcMjI2JyA6ICdcXDIyNicsCi0gICAgJ1wyMjcnIDogJ1xcMjI3JywgICdcMjMwJyA6ICdcXDIzMCcsICAnXDIzMScgOiAnXFwyMzEnLAotICAgICdcMjMyJyA6ICdcXDIzMicsICAnXDIzMycgOiAnXFwyMzMnLCAgJ1wyMzQnIDogJ1xcMjM0JywKLSAgICAnXDIzNScgOiAnXFwyMzUnLCAgJ1wyMzYnIDogJ1xcMjM2JywgICdcMjM3JyA6ICdcXDIzNycsCi0gICAgJ1wyNDAnIDogJ1xcMjQwJywgICdcMjQxJyA6ICdcXDI0MScsICAnXDI0MicgOiAnXFwyNDInLAotICAgICdcMjQzJyA6ICdcXDI0MycsICAnXDI0NCcgOiAnXFwyNDQnLCAgJ1wyNDUnIDogJ1xcMjQ1JywKLSAgICAnXDI0NicgOiAnXFwyNDYnLCAgJ1wyNDcnIDogJ1xcMjQ3JywgICdcMjUwJyA6ICdcXDI1MCcsCi0gICAgJ1wyNTEnIDogJ1xcMjUxJywgICdcMjUyJyA6ICdcXDI1MicsICAnXDI1MycgOiAnXFwyNTMnLAotICAgICdcMjU0JyA6ICdcXDI1NCcsICAnXDI1NScgOiAnXFwyNTUnLCAgJ1wyNTYnIDogJ1xcMjU2JywKLSAgICAnXDI1NycgOiAnXFwyNTcnLCAgJ1wyNjAnIDogJ1xcMjYwJywgICdcMjYxJyA6ICdcXDI2MScsCi0gICAgJ1wyNjInIDogJ1xcMjYyJywgICdcMjYzJyA6ICdcXDI2MycsICAnXDI2NCcgOiAnXFwyNjQnLAotICAgICdcMjY1JyA6ICdcXDI2NScsICAnXDI2NicgOiAnXFwyNjYnLCAgJ1wyNjcnIDogJ1xcMjY3JywKLSAgICAnXDI3MCcgOiAnXFwyNzAnLCAgJ1wyNzEnIDogJ1xcMjcxJywgICdcMjcyJyA6ICdcXDI3MicsCi0gICAgJ1wyNzMnIDogJ1xcMjczJywgICdcMjc0JyA6ICdcXDI3NCcsICAnXDI3NScgOiAnXFwyNzUnLAotICAgICdcMjc2JyA6ICdcXDI3NicsICAnXDI3NycgOiAnXFwyNzcnLCAgJ1wzMDAnIDogJ1xcMzAwJywKLSAgICAnXDMwMScgOiAnXFwzMDEnLCAgJ1wzMDInIDogJ1xcMzAyJywgICdcMzAzJyA6ICdcXDMwMycsCi0gICAgJ1wzMDQnIDogJ1xcMzA0JywgICdcMzA1JyA6ICdcXDMwNScsICAnXDMwNicgOiAnXFwzMDYnLAotICAgICdcMzA3JyA6ICdcXDMwNycsICAnXDMxMCcgOiAnXFwzMTAnLCAgJ1wzMTEnIDogJ1xcMzExJywKLSAgICAnXDMxMicgOiAnXFwzMTInLCAgJ1wzMTMnIDogJ1xcMzEzJywgICdcMzE0JyA6ICdcXDMxNCcsCi0gICAgJ1wzMTUnIDogJ1xcMzE1JywgICdcMzE2JyA6ICdcXDMxNicsICAnXDMxNycgOiAnXFwzMTcnLAotICAgICdcMzIwJyA6ICdcXDMyMCcsICAnXDMyMScgOiAnXFwzMjEnLCAgJ1wzMjInIDogJ1xcMzIyJywKLSAgICAnXDMyMycgOiAnXFwzMjMnLCAgJ1wzMjQnIDogJ1xcMzI0JywgICdcMzI1JyA6ICdcXDMyNScsCi0gICAgJ1wzMjYnIDogJ1xcMzI2JywgICdcMzI3JyA6ICdcXDMyNycsICAnXDMzMCcgOiAnXFwzMzAnLAotICAgICdcMzMxJyA6ICdcXDMzMScsICAnXDMzMicgOiAnXFwzMzInLCAgJ1wzMzMnIDogJ1xcMzMzJywKLSAgICAnXDMzNCcgOiAnXFwzMzQnLCAgJ1wzMzUnIDogJ1xcMzM1JywgICdcMzM2JyA6ICdcXDMzNicsCi0gICAgJ1wzMzcnIDogJ1xcMzM3JywgICdcMzQwJyA6ICdcXDM0MCcsICAnXDM0MScgOiAnXFwzNDEnLAotICAgICdcMzQyJyA6ICdcXDM0MicsICAnXDM0MycgOiAnXFwzNDMnLCAgJ1wzNDQnIDogJ1xcMzQ0JywKLSAgICAnXDM0NScgOiAnXFwzNDUnLCAgJ1wzNDYnIDogJ1xcMzQ2JywgICdcMzQ3JyA6ICdcXDM0NycsCi0gICAgJ1wzNTAnIDogJ1xcMzUwJywgICdcMzUxJyA6ICdcXDM1MScsICAnXDM1MicgOiAnXFwzNTInLAotICAgICdcMzUzJyA6ICdcXDM1MycsICAnXDM1NCcgOiAnXFwzNTQnLCAgJ1wzNTUnIDogJ1xcMzU1JywKLSAgICAnXDM1NicgOiAnXFwzNTYnLCAgJ1wzNTcnIDogJ1xcMzU3JywgICdcMzYwJyA6ICdcXDM2MCcsCi0gICAgJ1wzNjEnIDogJ1xcMzYxJywgICdcMzYyJyA6ICdcXDM2MicsICAnXDM2MycgOiAnXFwzNjMnLAotICAgICdcMzY0JyA6ICdcXDM2NCcsICAnXDM2NScgOiAnXFwzNjUnLCAgJ1wzNjYnIDogJ1xcMzY2JywKLSAgICAnXDM2NycgOiAnXFwzNjcnLCAgJ1wzNzAnIDogJ1xcMzcwJywgICdcMzcxJyA6ICdcXDM3MScsCi0gICAgJ1wzNzInIDogJ1xcMzcyJywgICdcMzczJyA6ICdcXDM3MycsICAnXDM3NCcgOiAnXFwzNzQnLAotICAgICdcMzc1JyA6ICdcXDM3NScsICAnXDM3NicgOiAnXFwzNzYnLCAgJ1wzNzcnIDogJ1xcMzc3JwotICAgIH0KLQotZGVmIF9xdW90ZShzdHIsIExlZ2FsQ2hhcnM9X0xlZ2FsQ2hhcnMpOgorZGVmIF9xdW90ZShzdHIpOgogICAgIHIiIiJRdW90ZSBhIHN0cmluZyBmb3IgdXNlIGluIGEgY29va2llIGhlYWRlci4KIAogICAgIElmIHRoZSBzdHJpbmcgZG9lcyBub3QgbmVlZCB0byBiZSBkb3VibGUtcXVvdGVkLCB0aGVuIGp1c3QgcmV0dXJuIHRoZQogICAgIHN0cmluZy4gIE90aGVyd2lzZSwgc3Vycm91bmQgdGhlIHN0cmluZyBpbiBkb3VibGVxdW90ZXMgYW5kIHF1b3RlCiAgICAgKHdpdGggYSBcKSBzcGVjaWFsIGNoYXJhY3RlcnMuCiAgICAgIiIiCi0gICAgaWYgYWxsKGMgaW4gTGVnYWxDaGFycyBmb3IgYyBpbiBzdHIpOgorICAgIGlmIHN0ciBpcyBOb25lIG9yIF9pc19sZWdhbF9rZXkoc3RyKToKICAgICAgICAgcmV0dXJuIHN0cgogICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnIicgKyBfbnVsbGpvaW4oX1RyYW5zbGF0b3IuZ2V0KHMsIHMpIGZvciBzIGluIHN0cikgKyAnIicKKyAgICAgICAgcmV0dXJuICciJyArIHN0ci50cmFuc2xhdGUoX1RyYW5zbGF0b3IpICsgJyInCiAKIAogX09jdGFsUGF0dCA9IHJlLmNvbXBpbGUociJcXFswLTNdWzAtN11bMC03XSIpCkBAIC0yNDEsNyArMTk1LDcgQEAKIGRlZiBfdW5xdW90ZShzdHIpOgogICAgICMgSWYgdGhlcmUgYXJlbid0IGFueSBkb3VibGVxdW90ZXMsCiAgICAgIyB0aGVuIHRoZXJlIGNhbid0IGJlIGFueSBzcGVjaWFsIGNoYXJhY3RlcnMuICBTZWUgUkZDIDIxMDkuCi0gICAgaWYgbGVuKHN0cikgPCAyOgorICAgIGlmIHN0ciBpcyBOb25lIG9yIGxlbihzdHIpIDwgMjoKICAgICAgICAgcmV0dXJuIHN0cgogICAgIGlmIHN0clswXSAhPSAnIicgb3Igc3RyWy0xXSAhPSAnIic6CiAgICAgICAgIHJldHVybiBzdHIKQEAgLTMzOSwzMyArMjkzLDEwOCBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAjIFNldCBkZWZhdWx0cwotICAgICAgICBzZWxmLmtleSA9IHNlbGYudmFsdWUgPSBzZWxmLmNvZGVkX3ZhbHVlID0gTm9uZQorICAgICAgICBzZWxmLl9rZXkgPSBzZWxmLl92YWx1ZSA9IHNlbGYuX2NvZGVkX3ZhbHVlID0gTm9uZQogCiAgICAgICAgICMgU2V0IGRlZmF1bHQgYXR0cmlidXRlcwogICAgICAgICBmb3Iga2V5IGluIHNlbGYuX3Jlc2VydmVkOgogICAgICAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksICIiKQogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGtleShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2tleQorCisgICAgQGtleS5zZXR0ZXIKKyAgICBkZWYga2V5KHNlbGYsIGtleSk6CisgICAgICAgIF93YXJuX2RlcHJlY2F0ZWRfc2V0dGVyKCdrZXknKQorICAgICAgICBzZWxmLl9rZXkgPSBrZXkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB2YWx1ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlCisKKyAgICBAdmFsdWUuc2V0dGVyCisgICAgZGVmIHZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgX3dhcm5fZGVwcmVjYXRlZF9zZXR0ZXIoJ3ZhbHVlJykKKyAgICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvZGVkX3ZhbHVlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29kZWRfdmFsdWUKKworICAgIEBjb2RlZF92YWx1ZS5zZXR0ZXIKKyAgICBkZWYgY29kZWRfdmFsdWUoc2VsZiwgY29kZWRfdmFsdWUpOgorICAgICAgICBfd2Fybl9kZXByZWNhdGVkX3NldHRlcignY29kZWRfdmFsdWUnKQorICAgICAgICBzZWxmLl9jb2RlZF92YWx1ZSA9IGNvZGVkX3ZhbHVlCisKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgSywgVik6CiAgICAgICAgIEsgPSBLLmxvd2VyKCkKICAgICAgICAgaWYgbm90IEsgaW4gc2VsZi5fcmVzZXJ2ZWQ6Ci0gICAgICAgICAgICByYWlzZSBDb29raWVFcnJvcigiSW52YWxpZCBBdHRyaWJ1dGUgJXMiICUgSykKKyAgICAgICAgICAgIHJhaXNlIENvb2tpZUVycm9yKCJJbnZhbGlkIGF0dHJpYnV0ZSAlciIgJSAoSywpKQogICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIEssIFYpCiAKKyAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLCBrZXksIHZhbD1Ob25lKToKKyAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLl9yZXNlcnZlZDoKKyAgICAgICAgICAgIHJhaXNlIENvb2tpZUVycm9yKCJJbnZhbGlkIGF0dHJpYnV0ZSAlciIgJSAoa2V5LCkpCisgICAgICAgIHJldHVybiBkaWN0LnNldGRlZmF1bHQoc2VsZiwga2V5LCB2YWwpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG1vcnNlbCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1vcnNlbCwgTW9yc2VsKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gKGRpY3QuX19lcV9fKHNlbGYsIG1vcnNlbCkgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgPT0gbW9yc2VsLl92YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9rZXkgPT0gbW9yc2VsLl9rZXkgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fY29kZWRfdmFsdWUgPT0gbW9yc2VsLl9jb2RlZF92YWx1ZSkKKworICAgIF9fbmVfXyA9IG9iamVjdC5fX25lX18KKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICBtb3JzZWwgPSBNb3JzZWwoKQorICAgICAgICBkaWN0LnVwZGF0ZShtb3JzZWwsIHNlbGYpCisgICAgICAgIG1vcnNlbC5fX2RpY3RfXy51cGRhdGUoc2VsZi5fX2RpY3RfXykKKyAgICAgICAgcmV0dXJuIG1vcnNlbAorCisgICAgZGVmIHVwZGF0ZShzZWxmLCB2YWx1ZXMpOgorICAgICAgICBkYXRhID0ge30KKyAgICAgICAgZm9yIGtleSwgdmFsIGluIGRpY3QodmFsdWVzKS5pdGVtcygpOgorICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5fcmVzZXJ2ZWQ6CisgICAgICAgICAgICAgICAgcmFpc2UgQ29va2llRXJyb3IoIkludmFsaWQgYXR0cmlidXRlICVyIiAlIChrZXksKSkKKyAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbAorICAgICAgICBkaWN0LnVwZGF0ZShzZWxmLCBkYXRhKQorCiAgICAgZGVmIGlzUmVzZXJ2ZWRLZXkoc2VsZiwgSyk6CiAgICAgICAgIHJldHVybiBLLmxvd2VyKCkgaW4gc2VsZi5fcmVzZXJ2ZWQKIAogICAgIGRlZiBzZXQoc2VsZiwga2V5LCB2YWwsIGNvZGVkX3ZhbCwgTGVnYWxDaGFycz1fTGVnYWxDaGFycyk6Ci0gICAgICAgICMgRmlyc3Qgd2UgdmVyaWZ5IHRoYXQgdGhlIGtleSBpc24ndCBhIHJlc2VydmVkIHdvcmQKLSAgICAgICAgIyBTZWNvbmQgd2UgbWFrZSBzdXJlIGl0IG9ubHkgY29udGFpbnMgbGVnYWwgY2hhcmFjdGVycworICAgICAgICBpZiBMZWdhbENoYXJzICE9IF9MZWdhbENoYXJzOgorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICdMZWdhbENoYXJzIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLCBpZ25vcmVkIGFuZCB3aWxsICcKKyAgICAgICAgICAgICAgICAnYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuJywgRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgIHN0YWNrbGV2ZWw9MikKKwogICAgICAgICBpZiBrZXkubG93ZXIoKSBpbiBzZWxmLl9yZXNlcnZlZDoKLSAgICAgICAgICAgIHJhaXNlIENvb2tpZUVycm9yKCJBdHRlbXB0IHRvIHNldCBhIHJlc2VydmVkIGtleTogJXMiICUga2V5KQotICAgICAgICBpZiBhbnkoYyBub3QgaW4gTGVnYWxDaGFycyBmb3IgYyBpbiBrZXkpOgotICAgICAgICAgICAgcmFpc2UgQ29va2llRXJyb3IoIklsbGVnYWwga2V5IHZhbHVlOiAlcyIgJSBrZXkpCisgICAgICAgICAgICByYWlzZSBDb29raWVFcnJvcignQXR0ZW1wdCB0byBzZXQgYSByZXNlcnZlZCBrZXkgJXInICUgKGtleSwpKQorICAgICAgICBpZiBub3QgX2lzX2xlZ2FsX2tleShrZXkpOgorICAgICAgICAgICAgcmFpc2UgQ29va2llRXJyb3IoJ0lsbGVnYWwga2V5ICVyJyAlIChrZXksKSkKIAogICAgICAgICAjIEl0J3MgYSBnb29kIGtleSwgc28gc2F2ZSBpdC4KLSAgICAgICAgc2VsZi5rZXkgPSBrZXkKLSAgICAgICAgc2VsZi52YWx1ZSA9IHZhbAotICAgICAgICBzZWxmLmNvZGVkX3ZhbHVlID0gY29kZWRfdmFsCisgICAgICAgIHNlbGYuX2tleSA9IGtleQorICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbAorICAgICAgICBzZWxmLl9jb2RlZF92YWx1ZSA9IGNvZGVkX3ZhbAorCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICdrZXknOiBzZWxmLl9rZXksCisgICAgICAgICAgICAndmFsdWUnOiBzZWxmLl92YWx1ZSwKKyAgICAgICAgICAgICdjb2RlZF92YWx1ZSc6IHNlbGYuX2NvZGVkX3ZhbHVlLAorICAgICAgICB9CisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgc2VsZi5fa2V5ID0gc3RhdGVbJ2tleSddCisgICAgICAgIHNlbGYuX3ZhbHVlID0gc3RhdGVbJ3ZhbHVlJ10KKyAgICAgICAgc2VsZi5fY29kZWRfdmFsdWUgPSBzdGF0ZVsnY29kZWRfdmFsdWUnXQogCiAgICAgZGVmIG91dHB1dChzZWxmLCBhdHRycz1Ob25lLCBoZWFkZXI9IlNldC1Db29raWU6Iik6CiAgICAgICAgIHJldHVybiAiJXMgJXMiICUgKGhlYWRlciwgc2VsZi5PdXRwdXRTdHJpbmcoYXR0cnMpKQpAQCAtMzczLDggKzQwMiw3IEBACiAgICAgX19zdHJfXyA9IG91dHB1dAogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzwlczogJXM9JXM+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5rZXksIHJlcHIoc2VsZi52YWx1ZSkpCisgICAgICAgIHJldHVybiAnPCVzOiAlcz4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLk91dHB1dFN0cmluZygpKQogCiAgICAgZGVmIGpzX291dHB1dChzZWxmLCBhdHRycz1Ob25lKToKICAgICAgICAgIyBQcmludCBqYXZhc2NyaXB0CkBAIC00MDgsMTAgKzQzNiw5IEBACiAgICAgICAgICAgICAgICAgYXBwZW5kKCIlcz0lcyIgJSAoc2VsZi5fcmVzZXJ2ZWRba2V5XSwgX2dldGRhdGUodmFsdWUpKSkKICAgICAgICAgICAgIGVsaWYga2V5ID09ICJtYXgtYWdlIiBhbmQgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKICAgICAgICAgICAgICAgICBhcHBlbmQoIiVzPSVkIiAlIChzZWxmLl9yZXNlcnZlZFtrZXldLCB2YWx1ZSkpCi0gICAgICAgICAgICBlbGlmIGtleSA9PSAic2VjdXJlIjoKLSAgICAgICAgICAgICAgICBhcHBlbmQoc3RyKHNlbGYuX3Jlc2VydmVkW2tleV0pKQotICAgICAgICAgICAgZWxpZiBrZXkgPT0gImh0dHBvbmx5IjoKLSAgICAgICAgICAgICAgICBhcHBlbmQoc3RyKHNlbGYuX3Jlc2VydmVkW2tleV0pKQorICAgICAgICAgICAgZWxpZiBrZXkgaW4gc2VsZi5fZmxhZ3M6CisgICAgICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChzdHIoc2VsZi5fcmVzZXJ2ZWRba2V5XSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGFwcGVuZCgiJXM9JXMiICUgKHNlbGYuX3Jlc2VydmVkW2tleV0sIHZhbHVlKSkKIApAQCAtNTM0LDEwICs1NjEsMTcgQEAKICAgICAgICAgcmV0dXJuCiAKICAgICBkZWYgX19wYXJzZV9zdHJpbmcoc2VsZiwgc3RyLCBwYXR0PV9Db29raWVQYXR0ZXJuKToKLSAgICAgICAgaSA9IDAgICAgICAgICAgICAjIE91ciBzdGFydGluZyBwb2ludAotICAgICAgICBuID0gbGVuKHN0cikgICAgICMgTGVuZ3RoIG9mIHN0cmluZwotICAgICAgICBNID0gTm9uZSAgICAgICAgICMgY3VycmVudCBtb3JzZWwKKyAgICAgICAgaSA9IDAgICAgICAgICAgICAgICAgICMgT3VyIHN0YXJ0aW5nIHBvaW50CisgICAgICAgIG4gPSBsZW4oc3RyKSAgICAgICAgICAjIExlbmd0aCBvZiBzdHJpbmcKKyAgICAgICAgcGFyc2VkX2l0ZW1zID0gW10gICAgICMgUGFyc2VkICh0eXBlLCBrZXksIHZhbHVlKSB0cmlwbGVzCisgICAgICAgIG1vcnNlbF9zZWVuID0gRmFsc2UgICAjIEEga2V5PXZhbHVlIHBhaXIgd2FzIHByZXZpb3VzbHkgZW5jb3VudGVyZWQKIAorICAgICAgICBUWVBFX0FUVFJJQlVURSA9IDEKKyAgICAgICAgVFlQRV9LRVlWQUxVRSA9IDIKKworICAgICAgICAjIFdlIGZpcnN0IHBhcnNlIHRoZSB3aG9sZSBjb29raWUgc3RyaW5nIGFuZCByZWplY3QgaXQgaWYgaXQncworICAgICAgICAjIHN5bnRhY3RpY2FsbHkgaW52YWxpZCAodGhpcyBoZWxwcyBhdm9pZCBzb21lIGNsYXNzZXMgb2YgaW5qZWN0aW9uCisgICAgICAgICMgYXR0YWNrcykuCiAgICAgICAgIHdoaWxlIDAgPD0gaSA8IG46CiAgICAgICAgICAgICAjIFN0YXJ0IGxvb2tpbmcgZm9yIGEgY29va2llCiAgICAgICAgICAgICBtYXRjaCA9IHBhdHQubWF0Y2goc3RyLCBpKQpAQCAtNTQ4LDIyICs1ODIsNDEgQEAKICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBtYXRjaC5ncm91cCgia2V5IiksIG1hdGNoLmdyb3VwKCJ2YWwiKQogICAgICAgICAgICAgaSA9IG1hdGNoLmVuZCgwKQogCi0gICAgICAgICAgICAjIFBhcnNlIHRoZSBrZXksIHZhbHVlIGluIGNhc2UgaXQncyBtZXRhaW5mbwogICAgICAgICAgICAgaWYga2V5WzBdID09ICIkIjoKLSAgICAgICAgICAgICAgICAjIFdlIGlnbm9yZSBhdHRyaWJ1dGVzIHdoaWNoIHBlcnRhaW4gdG8gdGhlIGNvb2tpZQotICAgICAgICAgICAgICAgICMgbWVjaGFuaXNtIGFzIGEgd2hvbGUuICBTZWUgUkZDIDIxMDkuCi0gICAgICAgICAgICAgICAgIyAoRG9lcyBhbnlvbmUgY2FyZT8pCi0gICAgICAgICAgICAgICAgaWYgTToKLSAgICAgICAgICAgICAgICAgICAgTVtrZXlbMTpdXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgaWYgbm90IG1vcnNlbF9zZWVuOgorICAgICAgICAgICAgICAgICAgICAjIFdlIGlnbm9yZSBhdHRyaWJ1dGVzIHdoaWNoIHBlcnRhaW4gdG8gdGhlIGNvb2tpZQorICAgICAgICAgICAgICAgICAgICAjIG1lY2hhbmlzbSBhcyBhIHdob2xlLCBzdWNoIGFzICIkVmVyc2lvbiIuCisgICAgICAgICAgICAgICAgICAgICMgU2VlIFJGQyAyOTY1LiAoRG9lcyBhbnlvbmUgY2FyZT8pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcGFyc2VkX2l0ZW1zLmFwcGVuZCgoVFlQRV9BVFRSSUJVVEUsIGtleVsxOl0sIHZhbHVlKSkKICAgICAgICAgICAgIGVsaWYga2V5Lmxvd2VyKCkgaW4gTW9yc2VsLl9yZXNlcnZlZDoKLSAgICAgICAgICAgICAgICBpZiBNOgotICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5Lmxvd2VyKCkgaW4gTW9yc2VsLl9mbGFnczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNW2tleV0gPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgbm90IG1vcnNlbF9zZWVuOgorICAgICAgICAgICAgICAgICAgICAjIEludmFsaWQgY29va2llIHN0cmluZworICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkubG93ZXIoKSBpbiBNb3JzZWwuX2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkX2l0ZW1zLmFwcGVuZCgoVFlQRV9BVFRSSUJVVEUsIGtleSwgVHJ1ZSkpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBNW2tleV0gPSBfdW5xdW90ZSh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSW52YWxpZCBjb29raWUgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwYXJzZWRfaXRlbXMuYXBwZW5kKChUWVBFX0FUVFJJQlVURSwga2V5LCBfdW5xdW90ZSh2YWx1ZSkpKQogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBydmFsLCBjdmFsID0gc2VsZi52YWx1ZV9kZWNvZGUodmFsdWUpCisgICAgICAgICAgICAgICAgcGFyc2VkX2l0ZW1zLmFwcGVuZCgoVFlQRV9LRVlWQUxVRSwga2V5LCBzZWxmLnZhbHVlX2RlY29kZSh2YWx1ZSkpKQorICAgICAgICAgICAgICAgIG1vcnNlbF9zZWVuID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEludmFsaWQgY29va2llIHN0cmluZworICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgVGhlIGNvb2tpZSBzdHJpbmcgaXMgdmFsaWQsIGFwcGx5IGl0LgorICAgICAgICBNID0gTm9uZSAgICAgICAgICMgY3VycmVudCBtb3JzZWwKKyAgICAgICAgZm9yIHRwLCBrZXksIHZhbHVlIGluIHBhcnNlZF9pdGVtczoKKyAgICAgICAgICAgIGlmIHRwID09IFRZUEVfQVRUUklCVVRFOgorICAgICAgICAgICAgICAgIGFzc2VydCBNIGlzIG5vdCBOb25lCisgICAgICAgICAgICAgICAgTVtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHRwID09IFRZUEVfS0VZVkFMVUUKKyAgICAgICAgICAgICAgICBydmFsLCBjdmFsID0gdmFsdWUKICAgICAgICAgICAgICAgICBzZWxmLl9fc2V0KGtleSwgcnZhbCwgY3ZhbCkKICAgICAgICAgICAgICAgICBNID0gc2VsZltrZXldCiAKZGlmZiAtLWdpdCBhL0xpYi9odHRwL3NlcnZlci5weSBiL0xpYi9odHRwL3NlcnZlci5weQppbmRleCA0Njg4MDk2Li4wMDYyMGQxIDEwMDY0NAotLS0gYS9MaWIvaHR0cC9zZXJ2ZXIucHkKKysrIGIvTGliL2h0dHAvc2VydmVyLnB5CkBAIC0xMDMsNiArMTAzLDggQEAKIGltcG9ydCBjb3B5CiBpbXBvcnQgYXJncGFyc2UKIAorZnJvbSBodHRwIGltcG9ydCBIVFRQU3RhdHVzCisKIAogIyBEZWZhdWx0IGVycm9yIG1lc3NhZ2UgdGVtcGxhdGUKIERFRkFVTFRfRVJST1JfTUVTU0FHRSA9ICIiIlwKQEAgLTI4MSw3ICsyODMsOSBAQAogICAgICAgICBpZiBsZW4od29yZHMpID09IDM6CiAgICAgICAgICAgICBjb21tYW5kLCBwYXRoLCB2ZXJzaW9uID0gd29yZHMKICAgICAgICAgICAgIGlmIHZlcnNpb25bOjVdICE9ICdIVFRQLyc6Ci0gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwMCwgIkJhZCByZXF1ZXN0IHZlcnNpb24gKCVyKSIgJSB2ZXJzaW9uKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgSFRUUFN0YXR1cy5CQURfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgIkJhZCByZXF1ZXN0IHZlcnNpb24gKCVyKSIgJSB2ZXJzaW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJhc2VfdmVyc2lvbl9udW1iZXIgPSB2ZXJzaW9uLnNwbGl0KCcvJywgMSlbMV0KQEAgLTI5NiwyNSArMzAwLDMxIEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKICAgICAgICAgICAgICAgICB2ZXJzaW9uX251bWJlciA9IGludCh2ZXJzaW9uX251bWJlclswXSksIGludCh2ZXJzaW9uX251bWJlclsxXSkKICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6Ci0gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwMCwgIkJhZCByZXF1ZXN0IHZlcnNpb24gKCVyKSIgJSB2ZXJzaW9uKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgSFRUUFN0YXR1cy5CQURfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgIkJhZCByZXF1ZXN0IHZlcnNpb24gKCVyKSIgJSB2ZXJzaW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgaWYgdmVyc2lvbl9udW1iZXIgPj0gKDEsIDEpIGFuZCBzZWxmLnByb3RvY29sX3ZlcnNpb24gPj0gIkhUVFAvMS4xIjoKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBGYWxzZQogICAgICAgICAgICAgaWYgdmVyc2lvbl9udW1iZXIgPj0gKDIsIDApOgotICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig1MDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIEhUVFAgVmVyc2lvbiAoJXMpIiAlIGJhc2VfdmVyc2lvbl9udW1iZXIpCisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKAorICAgICAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLkhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVELAorICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBIVFRQIFZlcnNpb24gKCVzKSIgJSBiYXNlX3ZlcnNpb25fbnVtYmVyKQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBlbGlmIGxlbih3b3JkcykgPT0gMjoKICAgICAgICAgICAgIGNvbW1hbmQsIHBhdGggPSB3b3JkcwogICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQogICAgICAgICAgICAgaWYgY29tbWFuZCAhPSAnR0VUJzoKLSAgICAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFkIEhUVFAvMC45IHJlcXVlc3QgdHlwZSAoJXIpIiAlIGNvbW1hbmQpCisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKAorICAgICAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLkJBRF9SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICAiQmFkIEhUVFAvMC45IHJlcXVlc3QgdHlwZSAoJXIpIiAlIGNvbW1hbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsaWYgbm90IHdvcmRzOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDAwLCAiQmFkIHJlcXVlc3Qgc3ludGF4ICglcikiICUgcmVxdWVzdGxpbmUpCisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoCisgICAgICAgICAgICAgICAgSFRUUFN0YXR1cy5CQURfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAiQmFkIHJlcXVlc3Qgc3ludGF4ICglcikiICUgcmVxdWVzdGxpbmUpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgc2VsZi5jb21tYW5kLCBzZWxmLnBhdGgsIHNlbGYucmVxdWVzdF92ZXJzaW9uID0gY29tbWFuZCwgcGF0aCwgdmVyc2lvbgogCkBAIC0zMjMsNyArMzMzLDE2IEBACiAgICAgICAgICAgICBzZWxmLmhlYWRlcnMgPSBodHRwLmNsaWVudC5wYXJzZV9oZWFkZXJzKHNlbGYucmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzcz1zZWxmLk1lc3NhZ2VDbGFzcykKICAgICAgICAgZXhjZXB0IGh0dHAuY2xpZW50LkxpbmVUb29Mb25nOgotICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwMCwgIkxpbmUgdG9vIGxvbmciKQorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKAorICAgICAgICAgICAgICAgIEhUVFBTdGF0dXMuQkFEX1JFUVVFU1QsCisgICAgICAgICAgICAgICAgIkxpbmUgdG9vIGxvbmciKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGV4Y2VwdCBodHRwLmNsaWVudC5IVFRQRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcigKKyAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLlJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UsCisgICAgICAgICAgICAgICAgIlRvbyBtYW55IGhlYWRlcnMiLAorICAgICAgICAgICAgICAgIHN0cihlcnIpCisgICAgICAgICAgICApCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICBjb25udHlwZSA9IHNlbGYuaGVhZGVycy5nZXQoJ0Nvbm5lY3Rpb24nLCAiIikKQEAgLTM1NSw3ICszNzQsNyBAQAogICAgICAgICBGYWxzZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlX29ubHkoMTAwKQorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2Vfb25seShIVFRQU3RhdHVzLkNPTlRJTlVFKQogICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICAgcmV0dXJuIFRydWUKIApAQCAtMzczLDcgKzM5Miw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0bGluZSA9ICcnCiAgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0X3ZlcnNpb24gPSAnJwogICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICcnCi0gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQxNCkKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoSFRUUFN0YXR1cy5SRVFVRVNUX1VSSV9UT09fTE9ORykKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJhd19yZXF1ZXN0bGluZToKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBUcnVlCkBAIC0zODMsNyArNDAyLDkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIG1uYW1lID0gJ2RvXycgKyBzZWxmLmNvbW1hbmQKICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsIG1uYW1lKToKLSAgICAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNTAxLCAiVW5zdXBwb3J0ZWQgbWV0aG9kICglcikiICUgc2VsZi5jb21tYW5kKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgSFRUUFN0YXR1cy5OT1RfSU1QTEVNRU5URUQsCisgICAgICAgICAgICAgICAgICAgICJVbnN1cHBvcnRlZCBtZXRob2QgKCVyKSIgJSBzZWxmLmNvbW1hbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1uYW1lKQogICAgICAgICAgICAgbWV0aG9kKCkKQEAgLTQyOSwxNiArNDUwLDMwIEBACiAgICAgICAgIGlmIGV4cGxhaW4gaXMgTm9uZToKICAgICAgICAgICAgIGV4cGxhaW4gPSBsb25nbXNnCiAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJjb2RlICVkLCBtZXNzYWdlICVzIiwgY29kZSwgbWVzc2FnZSkKLSAgICAgICAgIyB1c2luZyBfcXVvdGVfaHRtbCB0byBwcmV2ZW50IENyb3NzIFNpdGUgU2NyaXB0aW5nIGF0dGFja3MgKHNlZSBidWcgIzExMDAyMDEpCi0gICAgICAgIGNvbnRlbnQgPSAoc2VsZi5lcnJvcl9tZXNzYWdlX2Zvcm1hdCAlCi0gICAgICAgICAgICAgICAgICAgeydjb2RlJzogY29kZSwgJ21lc3NhZ2UnOiBfcXVvdGVfaHRtbChtZXNzYWdlKSwgJ2V4cGxhaW4nOiBfcXVvdGVfaHRtbChleHBsYWluKX0pCi0gICAgICAgIGJvZHkgPSBjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpCiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShjb2RlLCBtZXNzYWdlKQotICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCBzZWxmLmVycm9yX2NvbnRlbnRfdHlwZSkKICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCi0gICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgaW50KGxlbihib2R5KSkpCisKKyAgICAgICAgIyBNZXNzYWdlIGJvZHkgaXMgb21pdHRlZCBmb3IgY2FzZXMgZGVzY3JpYmVkIGluOgorICAgICAgICAjICAtIFJGQzcyMzA6IDMuMy4gMXh4LCAyMDQoTm8gQ29udGVudCksIDMwNChOb3QgTW9kaWZpZWQpCisgICAgICAgICMgIC0gUkZDNzIzMTogNi4zLjYuIDIwNShSZXNldCBDb250ZW50KQorICAgICAgICBib2R5ID0gTm9uZQorICAgICAgICBpZiAoY29kZSA+PSAyMDAgYW5kCisgICAgICAgICAgICBjb2RlIG5vdCBpbiAoSFRUUFN0YXR1cy5OT19DT05URU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBTdGF0dXMuUkVTRVRfQ09OVEVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLk5PVF9NT0RJRklFRCkpOgorICAgICAgICAgICAgIyBIVE1MIGVuY29kZSB0byBwcmV2ZW50IENyb3NzIFNpdGUgU2NyaXB0aW5nIGF0dGFja3MKKyAgICAgICAgICAgICMgKHNlZSBidWcgIzExMDAyMDEpCisgICAgICAgICAgICBjb250ZW50ID0gKHNlbGYuZXJyb3JfbWVzc2FnZV9mb3JtYXQgJSB7CisgICAgICAgICAgICAgICAgJ2NvZGUnOiBjb2RlLAorICAgICAgICAgICAgICAgICdtZXNzYWdlJzogX3F1b3RlX2h0bWwobWVzc2FnZSksCisgICAgICAgICAgICAgICAgJ2V4cGxhaW4nOiBfcXVvdGVfaHRtbChleHBsYWluKQorICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIGJvZHkgPSBjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCBzZWxmLmVycm9yX2NvbnRlbnRfdHlwZSkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgaW50KGxlbihib2R5KSkpCiAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQotICAgICAgICBpZiBzZWxmLmNvbW1hbmQgIT0gJ0hFQUQnIGFuZCBjb2RlID49IDIwMCBhbmQgY29kZSBub3QgaW4gKDIwNCwgMzA0KToKKworICAgICAgICBpZiBzZWxmLmNvbW1hbmQgIT0gJ0hFQUQnIGFuZCBib2R5OgogICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KQogCiAgICAgZGVmIHNlbmRfcmVzcG9uc2Uoc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lKToKQEAgLTQ5OSw3ICs1MzQsOCBAQAogICAgICAgICBUaGlzIGlzIGNhbGxlZCBieSBzZW5kX3Jlc3BvbnNlKCkuCiAKICAgICAgICAgIiIiCi0KKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBIVFRQU3RhdHVzKToKKyAgICAgICAgICAgIGNvZGUgPSBjb2RlLnZhbHVlCiAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoJyIlcyIgJXMgJXMnLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdGxpbmUsIHN0cihjb2RlKSwgc3RyKHNpemUpKQogCkBAIC01ODIsODIgKzYxOCwxMSBAQAogICAgICMgTWVzc2FnZUNsYXNzIHVzZWQgdG8gcGFyc2UgaGVhZGVycwogICAgIE1lc3NhZ2VDbGFzcyA9IGh0dHAuY2xpZW50LkhUVFBNZXNzYWdlCiAKLSAgICAjIFRhYmxlIG1hcHBpbmcgcmVzcG9uc2UgY29kZXMgdG8gbWVzc2FnZXM7IGVudHJpZXMgaGF2ZSB0aGUKLSAgICAjIGZvcm0ge2NvZGU6IChzaG9ydG1lc3NhZ2UsIGxvbmdtZXNzYWdlKX0uCi0gICAgIyBTZWUgUkZDIDI2MTYgYW5kIDY1ODUuCisgICAgIyBoYWNrIHRvIG1haW50YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgcmVzcG9uc2VzID0gewotICAgICAgICAxMDA6ICgnQ29udGludWUnLCAnUmVxdWVzdCByZWNlaXZlZCwgcGxlYXNlIGNvbnRpbnVlJyksCi0gICAgICAgIDEwMTogKCdTd2l0Y2hpbmcgUHJvdG9jb2xzJywKLSAgICAgICAgICAgICAgJ1N3aXRjaGluZyB0byBuZXcgcHJvdG9jb2w7IG9iZXkgVXBncmFkZSBoZWFkZXInKSwKLQotICAgICAgICAyMDA6ICgnT0snLCAnUmVxdWVzdCBmdWxmaWxsZWQsIGRvY3VtZW50IGZvbGxvd3MnKSwKLSAgICAgICAgMjAxOiAoJ0NyZWF0ZWQnLCAnRG9jdW1lbnQgY3JlYXRlZCwgVVJMIGZvbGxvd3MnKSwKLSAgICAgICAgMjAyOiAoJ0FjY2VwdGVkJywKLSAgICAgICAgICAgICAgJ1JlcXVlc3QgYWNjZXB0ZWQsIHByb2Nlc3NpbmcgY29udGludWVzIG9mZi1saW5lJyksCi0gICAgICAgIDIwMzogKCdOb24tQXV0aG9yaXRhdGl2ZSBJbmZvcm1hdGlvbicsICdSZXF1ZXN0IGZ1bGZpbGxlZCBmcm9tIGNhY2hlJyksCi0gICAgICAgIDIwNDogKCdObyBDb250ZW50JywgJ1JlcXVlc3QgZnVsZmlsbGVkLCBub3RoaW5nIGZvbGxvd3MnKSwKLSAgICAgICAgMjA1OiAoJ1Jlc2V0IENvbnRlbnQnLCAnQ2xlYXIgaW5wdXQgZm9ybSBmb3IgZnVydGhlciBpbnB1dC4nKSwKLSAgICAgICAgMjA2OiAoJ1BhcnRpYWwgQ29udGVudCcsICdQYXJ0aWFsIGNvbnRlbnQgZm9sbG93cy4nKSwKLQotICAgICAgICAzMDA6ICgnTXVsdGlwbGUgQ2hvaWNlcycsCi0gICAgICAgICAgICAgICdPYmplY3QgaGFzIHNldmVyYWwgcmVzb3VyY2VzIC0tIHNlZSBVUkkgbGlzdCcpLAotICAgICAgICAzMDE6ICgnTW92ZWQgUGVybWFuZW50bHknLCAnT2JqZWN0IG1vdmVkIHBlcm1hbmVudGx5IC0tIHNlZSBVUkkgbGlzdCcpLAotICAgICAgICAzMDI6ICgnRm91bmQnLCAnT2JqZWN0IG1vdmVkIHRlbXBvcmFyaWx5IC0tIHNlZSBVUkkgbGlzdCcpLAotICAgICAgICAzMDM6ICgnU2VlIE90aGVyJywgJ09iamVjdCBtb3ZlZCAtLSBzZWUgTWV0aG9kIGFuZCBVUkwgbGlzdCcpLAotICAgICAgICAzMDQ6ICgnTm90IE1vZGlmaWVkJywKLSAgICAgICAgICAgICAgJ0RvY3VtZW50IGhhcyBub3QgY2hhbmdlZCBzaW5jZSBnaXZlbiB0aW1lJyksCi0gICAgICAgIDMwNTogKCdVc2UgUHJveHknLAotICAgICAgICAgICAgICAnWW91IG11c3QgdXNlIHByb3h5IHNwZWNpZmllZCBpbiBMb2NhdGlvbiB0byBhY2Nlc3MgdGhpcyAnCi0gICAgICAgICAgICAgICdyZXNvdXJjZS4nKSwKLSAgICAgICAgMzA3OiAoJ1RlbXBvcmFyeSBSZWRpcmVjdCcsCi0gICAgICAgICAgICAgICdPYmplY3QgbW92ZWQgdGVtcG9yYXJpbHkgLS0gc2VlIFVSSSBsaXN0JyksCi0KLSAgICAgICAgNDAwOiAoJ0JhZCBSZXF1ZXN0JywKLSAgICAgICAgICAgICAgJ0JhZCByZXF1ZXN0IHN5bnRheCBvciB1bnN1cHBvcnRlZCBtZXRob2QnKSwKLSAgICAgICAgNDAxOiAoJ1VuYXV0aG9yaXplZCcsCi0gICAgICAgICAgICAgICdObyBwZXJtaXNzaW9uIC0tIHNlZSBhdXRob3JpemF0aW9uIHNjaGVtZXMnKSwKLSAgICAgICAgNDAyOiAoJ1BheW1lbnQgUmVxdWlyZWQnLAotICAgICAgICAgICAgICAnTm8gcGF5bWVudCAtLSBzZWUgY2hhcmdpbmcgc2NoZW1lcycpLAotICAgICAgICA0MDM6ICgnRm9yYmlkZGVuJywKLSAgICAgICAgICAgICAgJ1JlcXVlc3QgZm9yYmlkZGVuIC0tIGF1dGhvcml6YXRpb24gd2lsbCBub3QgaGVscCcpLAotICAgICAgICA0MDQ6ICgnTm90IEZvdW5kJywgJ05vdGhpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4gVVJJJyksCi0gICAgICAgIDQwNTogKCdNZXRob2QgTm90IEFsbG93ZWQnLAotICAgICAgICAgICAgICAnU3BlY2lmaWVkIG1ldGhvZCBpcyBpbnZhbGlkIGZvciB0aGlzIHJlc291cmNlLicpLAotICAgICAgICA0MDY6ICgnTm90IEFjY2VwdGFibGUnLCAnVVJJIG5vdCBhdmFpbGFibGUgaW4gcHJlZmVycmVkIGZvcm1hdC4nKSwKLSAgICAgICAgNDA3OiAoJ1Byb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkJywgJ1lvdSBtdXN0IGF1dGhlbnRpY2F0ZSB3aXRoICcKLSAgICAgICAgICAgICAgJ3RoaXMgcHJveHkgYmVmb3JlIHByb2NlZWRpbmcuJyksCi0gICAgICAgIDQwODogKCdSZXF1ZXN0IFRpbWVvdXQnLCAnUmVxdWVzdCB0aW1lZCBvdXQ7IHRyeSBhZ2FpbiBsYXRlci4nKSwKLSAgICAgICAgNDA5OiAoJ0NvbmZsaWN0JywgJ1JlcXVlc3QgY29uZmxpY3QuJyksCi0gICAgICAgIDQxMDogKCdHb25lJywKLSAgICAgICAgICAgICAgJ1VSSSBubyBsb25nZXIgZXhpc3RzIGFuZCBoYXMgYmVlbiBwZXJtYW5lbnRseSByZW1vdmVkLicpLAotICAgICAgICA0MTE6ICgnTGVuZ3RoIFJlcXVpcmVkJywgJ0NsaWVudCBtdXN0IHNwZWNpZnkgQ29udGVudC1MZW5ndGguJyksCi0gICAgICAgIDQxMjogKCdQcmVjb25kaXRpb24gRmFpbGVkJywgJ1ByZWNvbmRpdGlvbiBpbiBoZWFkZXJzIGlzIGZhbHNlLicpLAotICAgICAgICA0MTM6ICgnUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlJywgJ0VudGl0eSBpcyB0b28gbGFyZ2UuJyksCi0gICAgICAgIDQxNDogKCdSZXF1ZXN0LVVSSSBUb28gTG9uZycsICdVUkkgaXMgdG9vIGxvbmcuJyksCi0gICAgICAgIDQxNTogKCdVbnN1cHBvcnRlZCBNZWRpYSBUeXBlJywgJ0VudGl0eSBib2R5IGluIHVuc3VwcG9ydGVkIGZvcm1hdC4nKSwKLSAgICAgICAgNDE2OiAoJ1JlcXVlc3RlZCBSYW5nZSBOb3QgU2F0aXNmaWFibGUnLAotICAgICAgICAgICAgICAnQ2Fubm90IHNhdGlzZnkgcmVxdWVzdCByYW5nZS4nKSwKLSAgICAgICAgNDE3OiAoJ0V4cGVjdGF0aW9uIEZhaWxlZCcsCi0gICAgICAgICAgICAgICdFeHBlY3QgY29uZGl0aW9uIGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQuJyksCi0gICAgICAgIDQyODogKCdQcmVjb25kaXRpb24gUmVxdWlyZWQnLAotICAgICAgICAgICAgICAnVGhlIG9yaWdpbiBzZXJ2ZXIgcmVxdWlyZXMgdGhlIHJlcXVlc3QgdG8gYmUgY29uZGl0aW9uYWwuJyksCi0gICAgICAgIDQyOTogKCdUb28gTWFueSBSZXF1ZXN0cycsICdUaGUgdXNlciBoYXMgc2VudCB0b28gbWFueSByZXF1ZXN0cyAnCi0gICAgICAgICAgICAgICdpbiBhIGdpdmVuIGFtb3VudCBvZiB0aW1lICgicmF0ZSBsaW1pdGluZyIpLicpLAotICAgICAgICA0MzE6ICgnUmVxdWVzdCBIZWFkZXIgRmllbGRzIFRvbyBMYXJnZScsICdUaGUgc2VydmVyIGlzIHVud2lsbGluZyB0byAnCi0gICAgICAgICAgICAgICdwcm9jZXNzIHRoZSByZXF1ZXN0IGJlY2F1c2UgaXRzIGhlYWRlciBmaWVsZHMgYXJlIHRvbyBsYXJnZS4nKSwKLQotICAgICAgICA1MDA6ICgnSW50ZXJuYWwgU2VydmVyIEVycm9yJywgJ1NlcnZlciBnb3QgaXRzZWxmIGluIHRyb3VibGUnKSwKLSAgICAgICAgNTAxOiAoJ05vdCBJbXBsZW1lbnRlZCcsCi0gICAgICAgICAgICAgICdTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbicpLAotICAgICAgICA1MDI6ICgnQmFkIEdhdGV3YXknLCAnSW52YWxpZCByZXNwb25zZXMgZnJvbSBhbm90aGVyIHNlcnZlci9wcm94eS4nKSwKLSAgICAgICAgNTAzOiAoJ1NlcnZpY2UgVW5hdmFpbGFibGUnLAotICAgICAgICAgICAgICAnVGhlIHNlcnZlciBjYW5ub3QgcHJvY2VzcyB0aGUgcmVxdWVzdCBkdWUgdG8gYSBoaWdoIGxvYWQnKSwKLSAgICAgICAgNTA0OiAoJ0dhdGV3YXkgVGltZW91dCcsCi0gICAgICAgICAgICAgICdUaGUgZ2F0ZXdheSBzZXJ2ZXIgZGlkIG5vdCByZWNlaXZlIGEgdGltZWx5IHJlc3BvbnNlJyksCi0gICAgICAgIDUwNTogKCdIVFRQIFZlcnNpb24gTm90IFN1cHBvcnRlZCcsICdDYW5ub3QgZnVsZmlsbCByZXF1ZXN0LicpLAotICAgICAgICA1MTE6ICgnTmV0d29yayBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCcsCi0gICAgICAgICAgICAgICdUaGUgY2xpZW50IG5lZWRzIHRvIGF1dGhlbnRpY2F0ZSB0byBnYWluIG5ldHdvcmsgYWNjZXNzLicpLAotICAgICAgICB9CisgICAgICAgIHY6ICh2LnBocmFzZSwgdi5kZXNjcmlwdGlvbikKKyAgICAgICAgZm9yIHYgaW4gSFRUUFN0YXR1cy5fX21lbWJlcnNfXy52YWx1ZXMoKQorICAgIH0KIAogCiBjbGFzcyBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CkBAIC03MDcsNyArNjcyLDcgQEAKICAgICAgICAgICAgIHBhcnRzID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHNlbGYucGF0aCkKICAgICAgICAgICAgIGlmIG5vdCBwYXJ0cy5wYXRoLmVuZHN3aXRoKCcvJyk6CiAgICAgICAgICAgICAgICAgIyByZWRpcmVjdCBicm93c2VyIC0gZG9pbmcgYmFzaWNhbGx5IHdoYXQgYXBhY2hlIGRvZXMKLSAgICAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMzAxKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShIVFRQU3RhdHVzLk1PVkVEX1BFUk1BTkVOVExZKQogICAgICAgICAgICAgICAgIG5ld19wYXJ0cyA9IChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdICsgJy8nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1szXSwgcGFydHNbNF0pCiAgICAgICAgICAgICAgICAgbmV3X3VybCA9IHVybGxpYi5wYXJzZS51cmx1bnNwbGl0KG5ld19wYXJ0cykKQEAgLTcyNSwxMCArNjkwLDEwIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYicpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIkZpbGUgbm90IGZvdW5kIikKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcihIVFRQU3RhdHVzLk5PVF9GT1VORCwgIkZpbGUgbm90IGZvdW5kIikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoSFRUUFN0YXR1cy5PSykKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsIGN0eXBlKQogICAgICAgICAgICAgZnMgPSBvcy5mc3RhdChmLmZpbGVubygpKQogICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1MZW5ndGgiLCBzdHIoZnNbNl0pKQpAQCAtNzUwLDcgKzcxNSw5IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpc3QgPSBvcy5saXN0ZGlyKHBhdGgpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIk5vIHBlcm1pc3Npb24gdG8gbGlzdCBkaXJlY3RvcnkiKQorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKAorICAgICAgICAgICAgICAgIEhUVFBTdGF0dXMuTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICJObyBwZXJtaXNzaW9uIHRvIGxpc3QgZGlyZWN0b3J5IikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGxpc3Quc29ydChrZXk9bGFtYmRhIGE6IGEubG93ZXIoKSkKICAgICAgICAgciA9IFtdCkBAIC03ODksNyArNzU2LDcgQEAKICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQogICAgICAgICBmLndyaXRlKGVuY29kZWQpCiAgICAgICAgIGYuc2VlaygwKQotICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoSFRUUFN0YXR1cy5PSykKICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRleHQvaHRtbDsgY2hhcnNldD0lcyIgJSBlbmMpCiAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgc3RyKGxlbihlbmNvZGVkKSkpCiAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQpAQCAtODE3LDkgKzc4NCw5IEBACiAgICAgICAgIHdvcmRzID0gZmlsdGVyKE5vbmUsIHdvcmRzKQogICAgICAgICBwYXRoID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgZm9yIHdvcmQgaW4gd29yZHM6Ci0gICAgICAgICAgICBkcml2ZSwgd29yZCA9IG9zLnBhdGguc3BsaXRkcml2ZSh3b3JkKQotICAgICAgICAgICAgaGVhZCwgd29yZCA9IG9zLnBhdGguc3BsaXQod29yZCkKLSAgICAgICAgICAgIGlmIHdvcmQgaW4gKG9zLmN1cmRpciwgb3MucGFyZGlyKTogY29udGludWUKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZGlybmFtZSh3b3JkKSBvciB3b3JkIGluIChvcy5jdXJkaXIsIG9zLnBhcmRpcik6CisgICAgICAgICAgICAgICAgIyBJZ25vcmUgY29tcG9uZW50cyB0aGF0IGFyZSBub3QgYSBzaW1wbGUgZmlsZS9kaXJlY3RvcnkgbmFtZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIHdvcmQpCiAgICAgICAgIGlmIHRyYWlsaW5nX3NsYXNoOgogICAgICAgICAgICAgcGF0aCArPSAnLycKQEAgLTk3Niw3ICs5NDMsOSBAQAogICAgICAgICBpZiBzZWxmLmlzX2NnaSgpOgogICAgICAgICAgICAgc2VsZi5ydW5fY2dpKCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig1MDEsICJDYW4gb25seSBQT1NUIHRvIENHSSBzY3JpcHRzIikKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcigKKyAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLk5PVF9JTVBMRU1FTlRFRCwKKyAgICAgICAgICAgICAgICAiQ2FuIG9ubHkgUE9TVCB0byBDR0kgc2NyaXB0cyIpCiAKICAgICBkZWYgc2VuZF9oZWFkKHNlbGYpOgogICAgICAgICAiIiJWZXJzaW9uIG9mIHNlbmRfaGVhZCB0aGF0IHN1cHBvcnQgQ0dJIHNjcmlwdHMiIiIKQEAgLTEwNTAsMTcgKzEwMTksMjEgQEAKICAgICAgICAgc2NyaXB0bmFtZSA9IGRpciArICcvJyArIHNjcmlwdAogICAgICAgICBzY3JpcHRmaWxlID0gc2VsZi50cmFuc2xhdGVfcGF0aChzY3JpcHRuYW1lKQogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2NyaXB0ZmlsZSk6Ci0gICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiTm8gc3VjaCBDR0kgc2NyaXB0ICglcikiICUgc2NyaXB0bmFtZSkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcigKKyAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLk5PVF9GT1VORCwKKyAgICAgICAgICAgICAgICAiTm8gc3VjaCBDR0kgc2NyaXB0ICglcikiICUgc2NyaXB0bmFtZSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoc2NyaXB0ZmlsZSk6Ci0gICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDAzLCAiQ0dJIHNjcmlwdCBpcyBub3QgYSBwbGFpbiBmaWxlICglcikiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRuYW1lKQorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKAorICAgICAgICAgICAgICAgIEhUVFBTdGF0dXMuRk9SQklEREVOLAorICAgICAgICAgICAgICAgICJDR0kgc2NyaXB0IGlzIG5vdCBhIHBsYWluIGZpbGUgKCVyKSIgJSBzY3JpcHRuYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlzcHkgPSBzZWxmLmlzX3B5dGhvbihzY3JpcHRuYW1lKQogICAgICAgICBpZiBzZWxmLmhhdmVfZm9yayBvciBub3QgaXNweToKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX2V4ZWN1dGFibGUoc2NyaXB0ZmlsZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwMywgIkNHSSBzY3JpcHQgaXMgbm90IGV4ZWN1dGFibGUgKCVyKSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgSFRUUFN0YXR1cy5GT1JCSURERU4sCisgICAgICAgICAgICAgICAgICAgICJDR0kgc2NyaXB0IGlzIG5vdCBleGVjdXRhYmxlICglcikiICUgc2NyaXB0bmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIFJlZmVyZW5jZTogaHR0cDovL2hvb2hvby5uY3NhLnVpdWMuZWR1L2NnaS9lbnYuaHRtbApAQCAtMTEyOCw3ICsxMTAxLDcgQEAKICAgICAgICAgICAgICAgICAgICdIVFRQX1VTRVJfQUdFTlQnLCAnSFRUUF9DT09LSUUnLCAnSFRUUF9SRUZFUkVSJyk6CiAgICAgICAgICAgICBlbnYuc2V0ZGVmYXVsdChrLCAiIikKIAotICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwLCAiU2NyaXB0IG91dHB1dCBmb2xsb3dzIikKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKEhUVFBTdGF0dXMuT0ssICJTY3JpcHQgb3V0cHV0IGZvbGxvd3MiKQogICAgICAgICBzZWxmLmZsdXNoX2hlYWRlcnMoKQogCiAgICAgICAgIGRlY29kZWRfcXVlcnkgPSBxdWVyeS5yZXBsYWNlKCcrJywgJyAnKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlLnB5IGIvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlLnB5CmluZGV4IGIyMDUxMmQuLmZmMDg1ZDUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0F1dG9Db21wbGV0ZS5weQorKysgYi9MaWIvaWRsZWxpYi9BdXRvQ29tcGxldGUucHkKQEAgLTEsNiArMSw2IEBACiAiIiJBdXRvQ29tcGxldGUucHkgLSBBbiBJRExFIGV4dGVuc2lvbiBmb3IgYXV0b21hdGljYWxseSBjb21wbGV0aW5nIG5hbWVzLgogCi1UaGlzIGV4dGVuc2lvbiBjYW4gY29tcGxldGUgZWl0aGVyIGF0dHJpYnV0ZSBuYW1lcyBvZiBmaWxlIG5hbWVzLiBJdCBjYW4gcG9wCitUaGlzIGV4dGVuc2lvbiBjYW4gY29tcGxldGUgZWl0aGVyIGF0dHJpYnV0ZSBuYW1lcyBvciBmaWxlIG5hbWVzLiBJdCBjYW4gcG9wCiBhIHdpbmRvdyB3aXRoIGFsbCBhdmFpbGFibGUgbmFtZXMsIGZvciB0aGUgdXNlciB0byBzZWxlY3QgZnJvbS4KICIiIgogaW1wb3J0IG9zCkBAIC02NCw3ICs2NCw3IEBACiAKICAgICBkZWYgdHJ5X29wZW5fY29tcGxldGlvbnNfZXZlbnQoc2VsZiwgZXZlbnQpOgogICAgICAgICAiIiJIYXBwZW5zIHdoZW4gaXQgd291bGQgYmUgbmljZSB0byBvcGVuIGEgY29tcGxldGlvbiBsaXN0LCBidXQgbm90Ci0gICAgICAgIHJlYWxseSBuZWNlc3NhcnksIGZvciBleGFtcGxlIGFmdGVyIGFuIGRvdCwgc28gZnVuY3Rpb24KKyAgICAgICAgcmVhbGx5IG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUgYWZ0ZXIgYSBkb3QsIHNvIGZ1bmN0aW9uCiAgICAgICAgIGNhbGxzIHdvbid0IGJlIG1hZGUuCiAgICAgICAgICIiIgogICAgICAgICBsYXN0Y2hhciA9IHNlbGYudGV4dC5nZXQoImluc2VydC0xYyIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9DUkVESVRTLnR4dCBiL0xpYi9pZGxlbGliL0NSRURJVFMudHh0CmluZGV4IDVmZjU5OWQuLjNhNTBlYjggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NSRURJVFMudHh0CisrKyBiL0xpYi9pZGxlbGliL0NSRURJVFMudHh0CkBAIC0yNCw3ICsyNCw3IEBACiBpbnRlZ3JhdGlvbiwgZGVidWdnZXIgaW50ZWdyYXRpb24gYW5kIHBlcnNpc3RlbnQgYnJlYWtwb2ludHMpLgogCiBTY290dCBEYXZpZCBEYW5pZWxzLCBUYWwgRWluYXQsIEhlcm5hbiBGb2ZmYW5pLCBDaHJpc3RvcyBHZW9yZ2lvdSwKLUppbSBKZXdldHQsIE1hcnRpbiB2LiBM9ndpcywgSmFzb24gT3JlbmRvcmZmLCBHdWlsaGVybWUgUG9sbywgSm9zaCBSb2JiLAorSmltIEpld2V0dCwgTWFydGluIHYuIEzDtndpcywgSmFzb24gT3JlbmRvcmZmLCBHdWlsaGVybWUgUG9sbywgSm9zaCBSb2JiLAogTmlnZWwgUm93ZSwgQnJ1Y2UgU2hlcndvb2QsIEplZmYgU2h1dGUsIGFuZCBXZWVibGUgaGF2ZSBzdWJtaXR0ZWQgdXNlZnVsCiBwYXRjaGVzLiAgVGhhbmtzLCBndXlzIQogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9DYWxsVGlwV2luZG93LnB5IGIvTGliL2lkbGVsaWIvQ2FsbFRpcFdpbmRvdy5weQppbmRleCA4ZTY4YTc2Li45ZWVjMTc1IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9DYWxsVGlwV2luZG93LnB5CisrKyBiL0xpYi9pZGxlbGliL0NhbGxUaXBXaW5kb3cucHkKQEAgLTksNyArOSw3IEBACiBISURFX1NFUVVFTkNFUyA9ICgiPEtleS1Fc2NhcGU+IiwgIjxGb2N1c091dD4iKQogQ0hFQ0tISURFX1ZJUlRVQUxfRVZFTlRfTkFNRSA9ICI8PGNhbGx0aXB3aW5kb3ctY2hlY2toaWRlPj4iCiBDSEVDS0hJREVfU0VRVUVOQ0VTID0gKCI8S2V5UmVsZWFzZT4iLCAiPEJ1dHRvblJlbGVhc2U+IikKLUNIRUNLSElERV9USU1FID0gMTAwICMgbWlsaXNlY29uZHMKK0NIRUNLSElERV9USU1FID0gMTAwICMgbWlsbGlzZWNvbmRzCiAKIE1BUktfUklHSFQgPSAiY2FsbHRpcHdpbmRvd3JlZ2lvbl9yaWdodCIKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQ2hhbmdlTG9nIGIvTGliL2lkbGVsaWIvQ2hhbmdlTG9nCmluZGV4IDk4NTg3MWIuLjBjMzY2NjQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NoYW5nZUxvZworKysgYi9MaWIvaWRsZWxpYi9DaGFuZ2VMb2cKQEAgLTIwLDcgKzIwLDcgQEAKIDIwMDEtMDctMTkgMTQ6NDkgIGVsZ3VhdmFzCiAKIAkqIENoYW5nZUxvZywgRWRpdG9yV2luZG93LnB5LCBJTlNUQUxMQVRJT04sIE5FV1MudHh0LCBSRUFETUUudHh0LAotCVRPRE8udHh0LCBpZGxldmVyLnB5OiAKKwlUT0RPLnR4dCwgaWRsZXZlci5weToKIAltaW5vciB0aWR5LXVwcyByZWFkeSBmb3IgMC44LjEgYWxwaGEgdGFyYmFsbCByZWxlYXNlCiAKIDIwMDEtMDctMTcgMTU6MTIgIGtiawpAQCAtMTcyLDcgKzE3Miw3IEBACiAJYWxsIHRoaXMgd29yayB3LyBhIGZ1dHVyZS1zdG10IGp1c3QgbG9va3MgaGFyZGVyIGFuZCBoYXJkZXIuIgogCS0tdGltX29uZQogCQotCShGcm9tIFJlbCAxLjg6ICJIYWNrIHRvIG1ha2UgdGhpcyBzdGlsbCB3b3JrIHdpdGggUHl0aG9uIDEuNS4yLiAKKwkoRnJvbSBSZWwgMS44OiAiSGFjayB0byBtYWtlIHRoaXMgc3RpbGwgd29yayB3aXRoIFB5dGhvbiAxLjUuMi4KIAk7LSggIiAtLWZkcmFrZSkKIAogMjAwMS0wNy0xNCAxNDo1MSAga2JrCkBAIC0xOTMsNyArMTkzLDcgQEAKIAl0ZXN0KCkgdG8gX3Rlc3QoKS4iICAtLUd2UgogCQogCVRoaXMgd2FzIGFuIGludGVyZXN0aW5nIG1lcmdlLiBUaGUgam9pbiBjb21wbGV0ZWx5IG1pc3NlZCByZW1vdmluZwotCWdvb2RuYW1lKCksIHdoaWNoIHdhcyBhZGphY2VudCwgYnV0IG91dHNpZGUgb2YsIGEgc21hbGwgY29uZmxpY3QuIAorCWdvb2RuYW1lKCksIHdoaWNoIHdhcyBhZGphY2VudCwgYnV0IG91dHNpZGUgb2YsIGEgc21hbGwgY29uZmxpY3QuCiAJSSBvbmx5IGNhdWdodCBpdCBieSBjb21wYXJpbmcgdGhlIDEuMS4zLjIvMS4xLjMuMyBkaWZmLiAgQ1ZTIGFpbid0CiAJaW5mYWxsaWJsZS4KIApAQCAtNTE2LDEyICs1MTYsMTIgQEAKIAogMjAwMC0wOC0xNSAyMjo1MSAgbm93b25kZXIKIAotCSogSURMRUZPUksuaHRtbDogCisJKiBJRExFRk9SSy5odG1sOgogCWNvcnJlY3RlZCBlbWFpbCBhZGRyZXNzCiAKIDIwMDAtMDgtMTUgMjI6NDcgIG5vd29uZGVyCiAKLQkqIElETEVGT1JLLmh0bWw6IAorCSogSURMRUZPUksuaHRtbDoKIAlhZGRlZCAuaHRtbCBmaWxlIGZvciBodHRwOi8vaWRsZWZvcmsuc291cmNlZm9yZ2UubmV0CiAKIDIwMDAtMDgtMTUgMTE6MTMgIGRzY2hlcmVyCkBAIC0xNTc0LDcgKzE1NzQsNyBAQAogCSogQXR0aWMvUG9wdXBNZW51LnB5OiBQYXNzIGEgcm9vdCB0byB0aGUgaGVscCB3aW5kb3cuCiAKIAkqIFNlYXJjaEJpbmRpbmcucHk6Ci0JQWRkIHBhcmVudCBhcmd1bWVudCB0byAndG8gdG8gbGluZSBudW1iZXInIGRpYWxvZyBib3guCisJQWRkIHBhcmVudCBhcmd1bWVudCB0byAnZ28gdG8gbGluZSBudW1iZXInIGRpYWxvZyBib3guCiAKIFNhdCBPY3QgMTAgMTk6MTU6MzIgMTk5OCAgR3VpZG8gdmFuIFJvc3N1bSAgPGd1aWRvQGNucmkucmVzdG9uLnZhLnVzPgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9Db2RlQ29udGV4dC5weSBiL0xpYi9pZGxlbGliL0NvZGVDb250ZXh0LnB5CmluZGV4IDQ0NzgzYjYuLjdkMjVhZGEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NvZGVDb250ZXh0LnB5CisrKyBiL0xpYi9pZGxlbGliL0NvZGVDb250ZXh0LnB5CkBAIC01NywxOCArNTcsMTggQEAKICAgICAgICAgICAgICMgQ2FsY3VsYXRlIHRoZSBib3JkZXIgd2lkdGggYW5kIGhvcml6b250YWwgcGFkZGluZyByZXF1aXJlZCB0bwogICAgICAgICAgICAgIyBhbGlnbiB0aGUgY29udGV4dCB3aXRoIHRoZSB0ZXh0IGluIHRoZSBtYWluIFRleHQgd2lkZ2V0LgogICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBBbGwgdmFsdWVzIGFyZSBwYXNzZWQgdGhyb3VnaCBpbnQoc3RyKDx2YWx1ZT4pKSwgc2luY2Ugc29tZQorICAgICAgICAgICAgIyBBbGwgdmFsdWVzIGFyZSBwYXNzZWQgdGhyb3VnaCBnZXRpbnQoKSwgc2luY2Ugc29tZQogICAgICAgICAgICAgIyB2YWx1ZXMgbWF5IGJlIHBpeGVsIG9iamVjdHMsIHdoaWNoIGNhbid0IHNpbXBseSBiZSBhZGRlZCB0byBpbnRzLgogICAgICAgICAgICAgd2lkZ2V0cyA9IHNlbGYuZWRpdHdpbi50ZXh0LCBzZWxmLmVkaXR3aW4udGV4dF9mcmFtZQogICAgICAgICAgICAgIyBDYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHZlcnRpY2FsIHBhZGRpbmcKICAgICAgICAgICAgIHBhZHggPSAwCiAgICAgICAgICAgICBmb3Igd2lkZ2V0IGluIHdpZGdldHM6Ci0gICAgICAgICAgICAgICAgcGFkeCArPSBpbnQoc3RyKCB3aWRnZXQucGFja19pbmZvKClbJ3BhZHgnXSApKQotICAgICAgICAgICAgICAgIHBhZHggKz0gaW50KHN0ciggd2lkZ2V0LmNnZXQoJ3BhZHgnKSApKQorICAgICAgICAgICAgICAgIHBhZHggKz0gd2lkZ2V0LnRrLmdldGludCh3aWRnZXQucGFja19pbmZvKClbJ3BhZHgnXSkKKyAgICAgICAgICAgICAgICBwYWR4ICs9IHdpZGdldC50ay5nZXRpbnQod2lkZ2V0LmNnZXQoJ3BhZHgnKSkKICAgICAgICAgICAgICMgQ2FsY3VsYXRlIHRoZSByZXF1aXJlZCBib3JkZXIgd2lkdGgKICAgICAgICAgICAgIGJvcmRlciA9IDAKICAgICAgICAgICAgIGZvciB3aWRnZXQgaW4gd2lkZ2V0czoKLSAgICAgICAgICAgICAgICBib3JkZXIgKz0gaW50KHN0ciggd2lkZ2V0LmNnZXQoJ2JvcmRlcicpICkpCisgICAgICAgICAgICAgICAgYm9yZGVyICs9IHdpZGdldC50ay5nZXRpbnQod2lkZ2V0LmNnZXQoJ2JvcmRlcicpKQogICAgICAgICAgICAgc2VsZi5sYWJlbCA9IHRraW50ZXIuTGFiZWwoc2VsZi5lZGl0d2luLnRvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9IlxuIiAqIChzZWxmLmNvbnRleHRfZGVwdGggLSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcj1XLCBqdXN0aWZ5PUxFRlQsCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weSBiL0xpYi9pZGxlbGliL0NvbG9yRGVsZWdhdG9yLnB5CmluZGV4IDlmMzEzNDkuLjAyZWFjNDcgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NvbG9yRGVsZWdhdG9yLnB5CisrKyBiL0xpYi9pZGxlbGliL0NvbG9yRGVsZWdhdG9yLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHJlCiBpbXBvcnQga2V5d29yZAogaW1wb3J0IGJ1aWx0aW5zCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrVmVyc2lvbgogZnJvbSBpZGxlbGliLkRlbGVnYXRvciBpbXBvcnQgRGVsZWdhdG9yCiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIApAQCAtMzIsNiArMzMsMjggQEAKIHByb2cgPSByZS5jb21waWxlKG1ha2VfcGF0KCksIHJlLlMpCiBpZHByb2cgPSByZS5jb21waWxlKHIiXHMrKFx3KykiLCByZS5TKQogCitkZWYgY29sb3JfY29uZmlnKHRleHQpOiAgIyBDYWxsZWQgZnJvbSBodGVzdCwgRWRpdG9yLCBhbmQgVHVydGxlIERlbW8uCisgICAgJycnU2V0IGNvbG9yIG9waXRvbnMgb2YgVGV4dCB3aWRnZXQuCisKKyAgICBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIENvbG9yRGVsZWdhdG9yIGlzIGNhbGxlZC4KKyAgICAnJycKKyAgICAjIE5vdCBhdXRvbWF0aWMgYmVjYXVzZSBDb2xvckRlbGVnYXRvciBkb2VzIG5vdCBrbm93ICd0ZXh0Jy4KKyAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCisgICAgbm9ybWFsX2NvbG9ycyA9IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgJ25vcm1hbCcpCisgICAgY3Vyc29yX2NvbG9yID0gaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAnY3Vyc29yJywgZmdCZz0nZmcnKQorICAgIHNlbGVjdF9jb2xvcnMgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdoaWxpdGUnKQorICAgIHRleHQuY29uZmlnKAorICAgICAgICBmb3JlZ3JvdW5kPW5vcm1hbF9jb2xvcnNbJ2ZvcmVncm91bmQnXSwKKyAgICAgICAgYmFja2dyb3VuZD1ub3JtYWxfY29sb3JzWydiYWNrZ3JvdW5kJ10sCisgICAgICAgIGluc2VydGJhY2tncm91bmQ9Y3Vyc29yX2NvbG9yLAorICAgICAgICBzZWxlY3Rmb3JlZ3JvdW5kPXNlbGVjdF9jb2xvcnNbJ2ZvcmVncm91bmQnXSwKKyAgICAgICAgc2VsZWN0YmFja2dyb3VuZD1zZWxlY3RfY29sb3JzWydiYWNrZ3JvdW5kJ10sCisgICAgICAgICkKKyAgICBpZiBUa1ZlcnNpb24gPj0gOC41OgorICAgICAgICB0ZXh0LmNvbmZpZygKKyAgICAgICAgICAgIGluYWN0aXZlc2VsZWN0YmFja2dyb3VuZD1zZWxlY3RfY29sb3JzWydiYWNrZ3JvdW5kJ10pCisKKwogY2xhc3MgQ29sb3JEZWxlZ2F0b3IoRGVsZWdhdG9yKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTIzMyw2ICsyNTYsNyBAQAogICAgICAgICBmb3IgdGFnIGluIHNlbGYudGFnZGVmczoKICAgICAgICAgICAgIHNlbGYudGFnX3JlbW92ZSh0YWcsICIxLjAiLCAiZW5kIikKIAorCiBkZWYgX2NvbG9yX2RlbGVnYXRvcihwYXJlbnQpOiAgIyBodGVzdCAjCiAgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbCwgVGV4dAogICAgIGZyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCkBAIC0yNDcsNiArMjcxLDcgQEAKICAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0Iiwgc291cmNlKQogICAgIHRleHQuZm9jdXNfc2V0KCkKIAorICAgIGNvbG9yX2NvbmZpZyh0ZXh0KQogICAgIHAgPSBQZXJjb2xhdG9yKHRleHQpCiAgICAgZCA9IENvbG9yRGVsZWdhdG9yKCkKICAgICBwLmluc2VydGZpbHRlcihkKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRGVidWdnZXIucHkgYi9MaWIvaWRsZWxpYi9EZWJ1Z2dlci5weQppbmRleCAyNTA0MjJlLi5kNWUyMTdkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9EZWJ1Z2dlci5weQorKysgYi9MaWIvaWRsZWxpYi9EZWJ1Z2dlci5weQpAQCAtMzcyLDcgKzM3Miw3IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3RlciwgZmxpc3QsIGd1aSk6CiAgICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKICAgICAgICAgICAgICMgQXQgbGVhc3Qgb24gd2l0aCB0aGUgc3RvY2sgQXF1YVRrIHZlcnNpb24gb24gT1NYIDEwLjQgeW91J2xsCi0gICAgICAgICAgICAjIGdldCBhbiBzaGFraW5nIEdVSSB0aGF0IGV2ZW50dWFsbHkga2lsbHMgSURMRSBpZiB0aGUgd2lkdGgKKyAgICAgICAgICAgICMgZ2V0IGEgc2hha2luZyBHVUkgdGhhdCBldmVudHVhbGx5IGtpbGxzIElETEUgaWYgdGhlIHdpZHRoCiAgICAgICAgICAgICAjIGFyZ3VtZW50IGlzIHNwZWNpZmllZC4KICAgICAgICAgICAgIFNjcm9sbGVkTGlzdC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9EZWxlZ2F0b3IucHkgYi9MaWIvaWRsZWxpYi9EZWxlZ2F0b3IucHkKaW5kZXggYzQ3NjUxNi4uZGMyYTFhYSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRGVsZWdhdG9yLnB5CisrKyBiL0xpYi9pZGxlbGliL0RlbGVnYXRvci5weQpAQCAtMSwxMCArMSwxMCBAQAogY2xhc3MgRGVsZWdhdG9yOgogCi0gICAgIyBUaGUgY2FjaGUgaXMgb25seSB1c2VkIHRvIGJlIGFibGUgdG8gY2hhbmdlIGRlbGVnYXRlcyEKLQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWxlZ2F0ZT1Ob25lKToKICAgICAgICAgc2VsZi5kZWxlZ2F0ZSA9IGRlbGVnYXRlCiAgICAgICAgIHNlbGYuX19jYWNoZSA9IHNldCgpCisgICAgICAgICMgQ2FjaGUgaXMgdXNlZCB0byBvbmx5IHJlbW92ZSBhZGRlZCBhdHRyaWJ1dGVzCisgICAgICAgICMgd2hlbiBjaGFuZ2luZyB0aGUgZGVsZWdhdGUuCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CiAgICAgICAgIGF0dHIgPSBnZXRhdHRyKHNlbGYuZGVsZWdhdGUsIG5hbWUpICMgTWF5IHJhaXNlIEF0dHJpYnV0ZUVycm9yCkBAIC0xMyw2ICsxMyw5IEBACiAgICAgICAgIHJldHVybiBhdHRyCiAKICAgICBkZWYgcmVzZXRjYWNoZShzZWxmKToKKyAgICAgICAgIlJlbW92ZXMgYWRkZWQgYXR0cmlidXRlcyB3aGlsZSBsZWF2aW5nIG9yaWdpbmFsIGF0dHJpYnV0ZXMuIgorICAgICAgICAjIEZ1bmN0aW9uIGlzIHJlYWxseSBhYm91dCByZXNldHRpbmcgZGVsYWdhdG9yIGRpY3QKKyAgICAgICAgIyB0byBvcmlnaW5hbCBzdGF0ZS4gIENhY2hlIGlzIGp1c3QgYSBtZWFucwogICAgICAgICBmb3Iga2V5IGluIHNlbGYuX19jYWNoZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkZWxhdHRyKHNlbGYsIGtleSkKQEAgLTIxLDUgKzI0LDEwIEBACiAgICAgICAgIHNlbGYuX19jYWNoZS5jbGVhcigpCiAKICAgICBkZWYgc2V0ZGVsZWdhdGUoc2VsZiwgZGVsZWdhdGUpOgorICAgICAgICAiUmVzZXQgYXR0cmlidXRlcyBhbmQgY2hhbmdlIGRlbGVnYXRlLiIKICAgICAgICAgc2VsZi5yZXNldGNhY2hlKCkKICAgICAgICAgc2VsZi5kZWxlZ2F0ZSA9IGRlbGVnYXRlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgbWFpbgorICAgIG1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfZGVsZWdhdG9yJywgdmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKaW5kZXggYjU4NjhiZS4uOTk0NGRhMyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CisrKyBiL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQpAQCAtOTAsNyArOTAsNyBAQAogCiBjbGFzcyBFZGl0b3JXaW5kb3cob2JqZWN0KToKICAgICBmcm9tIGlkbGVsaWIuUGVyY29sYXRvciBpbXBvcnQgUGVyY29sYXRvcgotICAgIGZyb20gaWRsZWxpYi5Db2xvckRlbGVnYXRvciBpbXBvcnQgQ29sb3JEZWxlZ2F0b3IKKyAgICBmcm9tIGlkbGVsaWIuQ29sb3JEZWxlZ2F0b3IgaW1wb3J0IENvbG9yRGVsZWdhdG9yLCBjb2xvcl9jb25maWcKICAgICBmcm9tIGlkbGVsaWIuVW5kb0RlbGVnYXRvciBpbXBvcnQgVW5kb0RlbGVnYXRvcgogICAgIGZyb20gaWRsZWxpYi5JT0JpbmRpbmcgaW1wb3J0IElPQmluZGluZywgZmlsZXN5c3RlbWVuY29kaW5nLCBlbmNvZGluZwogICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgQmluZGluZ3MKQEAgLTc0MiwyMCArNzQyLDcgQEAKICAgICAgICAgIyBDYWxsZWQgZnJvbSBzZWxmLmZpbGVuYW1lX2NoYW5nZV9ob29rIGFuZCBmcm9tIGNvbmZpZ0RpYWxvZy5weQogICAgICAgICBzZWxmLl9ybWNvbG9yaXplcigpCiAgICAgICAgIHNlbGYuX2FkZGNvbG9yaXplcigpCi0gICAgICAgIHRoZW1lID0gaWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKLSAgICAgICAgbm9ybWFsX2NvbG9ycyA9IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgJ25vcm1hbCcpCi0gICAgICAgIGN1cnNvcl9jb2xvciA9IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgJ2N1cnNvcicsIGZnQmc9J2ZnJykKLSAgICAgICAgc2VsZWN0X2NvbG9ycyA9IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgJ2hpbGl0ZScpCi0gICAgICAgIHNlbGYudGV4dC5jb25maWcoCi0gICAgICAgICAgICBmb3JlZ3JvdW5kPW5vcm1hbF9jb2xvcnNbJ2ZvcmVncm91bmQnXSwKLSAgICAgICAgICAgIGJhY2tncm91bmQ9bm9ybWFsX2NvbG9yc1snYmFja2dyb3VuZCddLAotICAgICAgICAgICAgaW5zZXJ0YmFja2dyb3VuZD1jdXJzb3JfY29sb3IsCi0gICAgICAgICAgICBzZWxlY3Rmb3JlZ3JvdW5kPXNlbGVjdF9jb2xvcnNbJ2ZvcmVncm91bmQnXSwKLSAgICAgICAgICAgIHNlbGVjdGJhY2tncm91bmQ9c2VsZWN0X2NvbG9yc1snYmFja2dyb3VuZCddLAotICAgICAgICAgICAgKQotICAgICAgICBpZiBUa1ZlcnNpb24gPj0gOC41OgotICAgICAgICAgICAgc2VsZi50ZXh0LmNvbmZpZygKLSAgICAgICAgICAgICAgICBpbmFjdGl2ZXNlbGVjdGJhY2tncm91bmQ9c2VsZWN0X2NvbG9yc1snYmFja2dyb3VuZCddKQorICAgICAgICBFZGl0b3JXaW5kb3cuY29sb3JfY29uZmlnKHNlbGYudGV4dCkKIAogICAgIElERU5UQ0hBUlMgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAiXyIKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvSElTVE9SWS50eHQgYi9MaWIvaWRsZWxpYi9ISVNUT1JZLnR4dAppbmRleCAwMWQ3M2VkLi43MzFmYWJkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ISVNUT1JZLnR4dAorKysgYi9MaWIvaWRsZWxpYi9ISVNUT1JZLnR4dApAQCAtMTEsNyArMTEsNyBAQAogKlJlbGVhc2UgZGF0ZTogMjItSnVsLTIwMDEqCiAKIC0gTmV3IHRhcmJhbGwgcmVsZWFzZWQgYXMgYSByZXN1bHQgb2YgdGhlICdyZXZpdGFsaXNhdGlvbicgb2YgdGhlIElETEVmb3JrCi0gIHByb2plY3QuIAorICBwcm9qZWN0LgogCiAtIFRoaXMgcmVsZWFzZSByZXF1aXJlcyBweXRob24gMi4xIG9yIGJldHRlci4gQ29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIKICAgdmVyc2lvbnMgb2YgcHl0aG9uIChlc3BlY2lhbGx5IGFuY2llbnQgb25lcyBsaWtlIDEuNXgpIGlzIG5vIGxvbmdlciBhCkBAIC0yNiw4ICsyNiw4IEBACiAgIG5vdCB3b3JraW5nLCBidXQgSSBiZWxpZXZlIHRoaXMgd2FzIHRoZSBjYXNlIHdpdGggdGhlIHByZXZpb3VzIElETEUgZm9yawogICByZWxlYXNlICgwLjcuMSkgYXMgd2VsbC4KIAotLSBUaGlzIHJlbGVhc2UgaXMgYmVpbmcgbWFkZSBub3cgdG8gbWFyayB0aGUgcG9pbnQgYXQgd2hpY2ggSURMRWZvcmsgaXMgCi0gIGxhdW5jaGluZyBpbnRvIGEgbmV3IHN0YWdlIG9mIGRldmVsb3BtZW50LiAKKy0gVGhpcyByZWxlYXNlIGlzIGJlaW5nIG1hZGUgbm93IHRvIG1hcmsgdGhlIHBvaW50IGF0IHdoaWNoIElETEVmb3JrIGlzCisgIGxhdW5jaGluZyBpbnRvIGEgbmV3IHN0YWdlIG9mIGRldmVsb3BtZW50LgogCiAtIElETEVmb3JrIENWUyB3aWxsIG5vdyBiZSBicmFuY2hlZCB0byBlbmFibGUgZnVydGhlciBkZXZlbG9wbWVudCBhbmQKICAgZXhwbG9yYXRpb24gb2YgdGhlIHR3byAiZXhlY3V0aW9uIGluIGEgcmVtb3RlIHByb2Nlc3MiIHBhdGNoZXMgc3VibWl0dGVkIGJ5CkBAIC05Niw3ICs5Niw3IEBACiAgICAgaW5zdGVhZCBvZiB0aGUgSURMRSBoZWxwOyBzaGlmdC1UQUIgaXMgbm93IGEgc3lub255bSBmb3IgdW5pbmRlbnQuCiAKIC0gTmV3IG1vZHVsZXM6Ci0gIAorCiAgIEV4ZWNCaW5kaW5nLnB5ICAgICAgICAgRXhlY3V0ZXMgcHJvZ3JhbSB0aHJvdWdoIGxvYWRlcgogICBsb2FkZXIucHkgICAgICAgICAgICAgIEJvb3RzdHJhcHMgdXNlciBwcm9ncmFtCiAgIHByb3RvY29sLnB5ICAgICAgICAgICAgUlBDIHByb3RvY29sCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkgYi9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKaW5kZXggNWVjOWQ1NC4uODRmMzlhMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CisrKyBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQpAQCAtMTAsNiArMTAsNyBAQAogaW1wb3J0IHRraW50ZXIubWVzc2FnZWJveCBhcyB0a01lc3NhZ2VCb3gKIGZyb20gdGtpbnRlci5zaW1wbGVkaWFsb2cgaW1wb3J0IGFza3N0cmluZwogCitmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIAogCiAjIFRyeSBzZXR0aW5nIHRoZSBsb2NhbGUsIHNvIHRoYXQgd2UgY2FuIGZpbmQgb3V0CkBAIC02MSw3ICs2Miw3IEBACiBlbmNvZGluZyA9IGxvY2FsZV9lbmNvZGluZyAgIyMjIEtCSyAwN1NlcDA3ICBUaGlzIGlzIHVzZWQgYWxsIG92ZXIgSURMRSwgY2hlY2shCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjICdlbmNvZGluZycgaXMgdXNlZCBiZWxvdyBpbiBlbmNvZGUoKSwgY2hlY2shCiAKLWNvZGluZ19yZSA9IHJlLmNvbXBpbGUocideWyBcdFxmXSojLipjb2RpbmdbOj1dWyBcdF0qKFstXHcuXSspJywgcmUuQVNDSUkpCitjb2RpbmdfcmUgPSByZS5jb21waWxlKHInXlsgXHRcZl0qIy4qP2NvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknLCByZS5BU0NJSSkKIGJsYW5rX3JlID0gcmUuY29tcGlsZShyJ15bIFx0XGZdKig/OlsjXHJcbl18JCknLCByZS5BU0NJSSkKIAogZGVmIGNvZGluZ19zcGVjKGRhdGEpOgpAQCAtNTI1LDcgKzUyNiw2IEBACiAKIGRlZiBfaW9fYmluZGluZyhwYXJlbnQpOiAgIyBodGVzdCAjCiAgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbCwgVGV4dAotICAgIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgogCiAgICAgcm9vdCA9IFRvcGxldmVsKHBhcmVudCkKICAgICByb290LnRpdGxlKCJUZXN0IElPQmluZGluZyIpCkBAIC01MzYsMTQgKzUzNiwyMyBAQAogICAgICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAogICAgICAgICAgICAgc2VsZi5mbGlzdCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCI8Q29udHJvbC1vPiIsIHNlbGYub3BlbikKKyAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCc8Q29udHJvbC1wPicsIHNlbGYucHJpbnQpCiAgICAgICAgICAgICBzZWxmLnRleHQuYmluZCgiPENvbnRyb2wtcz4iLCBzZWxmLnNhdmUpCisgICAgICAgICAgICBzZWxmLnRleHQuYmluZCgiPEFsdC1zPiIsIHNlbGYuc2F2ZWFzKQorICAgICAgICAgICAgc2VsZi50ZXh0LmJpbmQoJzxDb250cm9sLWM+Jywgc2VsZi5zYXZlY29weSkKICAgICAgICAgZGVmIGdldF9zYXZlZChzZWxmKTogcmV0dXJuIDAKICAgICAgICAgZGVmIHNldF9zYXZlZChzZWxmLCBmbGFnKTogcGFzcwogICAgICAgICBkZWYgcmVzZXRfdW5kbyhzZWxmKTogcGFzcwogICAgICAgICBkZWYgb3BlbihzZWxmLCBldmVudCk6CiAgICAgICAgICAgICBzZWxmLnRleHQuZXZlbnRfZ2VuZXJhdGUoIjw8b3Blbi13aW5kb3ctZnJvbS1maWxlPj4iKQorICAgICAgICBkZWYgcHJpbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PHByaW50LXdpbmRvdz4+IikKICAgICAgICAgZGVmIHNhdmUoc2VsZiwgZXZlbnQpOgogICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PHNhdmUtd2luZG93Pj4iKQorICAgICAgICBkZWYgc2F2ZWFzKHNlbGYsIGV2ZW50KToKKyAgICAgICAgICAgIHNlbGYudGV4dC5ldmVudF9nZW5lcmF0ZSgiPDxzYXZlLXdpbmRvdy1hcy1maWxlPj4iKQorICAgICAgICBkZWYgc2F2ZWNvcHkoc2VsZiwgZXZlbnQpOgorICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PHNhdmUtY29weS1vZi13aW5kb3ctYXMtZmlsZT4+IikKIAogICAgIHRleHQgPSBUZXh0KHJvb3QpCiAgICAgdGV4dC5wYWNrKCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weSBiL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weQppbmRleCAyNTFhODRkLi44NDYyODU0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkKKysrIGIvTGliL2lkbGVsaWIvTXVsdGlDYWxsLnB5CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogIyBBbiBpbnQgaW4gcmFuZ2UoMSA8PCBsZW4oX21vZGlmaWVycykpIHJlcHJlc2VudHMgYSBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnMKLSMgKGlmIHRoZSBsZWFzdCBzaWduaWZpY2VudCBiaXQgaXMgb24sIF9tb2RpZmllcnNbMF0gaXMgb24sIGFuZCBzbyBvbikuCisjIChpZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGlzIG9uLCBfbW9kaWZpZXJzWzBdIGlzIG9uLCBhbmQgc28gb24pLgogIyBfc3RhdGVfc3Vic2V0cyBnaXZlcyBmb3IgZWFjaCBjb21iaW5hdGlvbiBvZiBtb2RpZmllcnMsIG9yICpzdGF0ZSosCiAjIGEgbGlzdCBvZiB0aGUgc3RhdGVzIHdoaWNoIGFyZSBhIHN1YnNldCBvZiBpdC4gVGhpcyBsaXN0IGlzIG9yZGVyZWQgYnkgdGhlCiAjIG51bWJlciBvZiBtb2RpZmllcnMgaXMgdGhlIHN0YXRlIC0gdGhlIG1vc3Qgc3BlY2lmaWMgc3RhdGUgY29tZXMgZmlyc3QuCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ORVdTLnR4dCBiL0xpYi9pZGxlbGliL05FV1MudHh0CmluZGV4IDhiOGUxMGIuLmY0NWRkMmIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL05FV1MudHh0CisrKyBiL0xpYi9pZGxlbGliL05FV1MudHh0CkBAIC0xLDYgKzEsNzIgQEAKLVdoYXQncyBOZXcgaW4gSWRsZSAzLjQuND8KK1doYXQncyBOZXcgaW4gSURMRSAzLjUuMz8KID09PT09PT09PT09PT09PT09PT09PT09PT0KLSpSZWxlYXNlIGRhdGU6IDIwMTUtMTItMjAqCisqUmVsZWFzZSBkYXRlOiAyMDE3LTAxLTAxPyoKKworLSBJc3N1ZSAjMjczNjU6IEFsbG93IG5vbi1hc2NpaSBjaGFycyBpbiBJRExFIE5FV1MudHh0LCBmb3IgY29udHJpYnV0b3IgbmFtZXMuCisKKy0gSXNzdWUgIzI3MjQ1OiBJRExFOiBDbGVhbmx5IGRlbGV0ZSBjdXN0b20gdGhlbWVzIGFuZCBrZXkgYmluZGluZ3MuCisgIFByZXZpb3VzbHksIHdoZW4gSURMRSB3YXMgc3RhcnRlZCBmcm9tIGEgY29uc29sZSBvciBieSBpbXBvcnQsIGEgY2FzY2FkZQorICBvZiB3YXJuaW5ncyB3YXMgZW1pdHRlZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKworV2hhdCdzIE5ldyBpbiBJRExFIDMuNS4yPworPT09PT09PT09PT09PT09PT09PT09PT09PQorKlJlbGVhc2UgZGF0ZTogMjAxNi0wNi0yNioKKworLSBJc3N1ZSAjNTEyNDogUGFzdGUgd2l0aCB0ZXh0IHNlbGVjdGVkIG5vdyByZXBsYWNlcyB0aGUgc2VsZWN0aW9uIG9uIFgxMS4KKyAgVGhpcyBtYXRjaGVzIGhvdyBwYXN0ZSB3b3JrcyBvbiBXaW5kb3dzLCBNYWMsIG1vc3QgbW9kZXJuIExpbnV4IGFwcHMsCisgIGFuZCB0dGsgd2lkZ2V0cy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzI0NzU5OiBNYWtlIGNsZWFyIGluIGlkbGVsaWIuaWRsZV90ZXN0Ll9faW5pdF9fIHRoYXQgdGhlIGRpcmVjdG9yeQorICBpcyBhIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2YgdGVzdC50ZXN0X2lkbGUgYW5kIHRvb2wgZm9yIG1haW50YWluZXJzLgorCistIElzc3VlICMyNzE5NjogU3RvcCAnVGhlbWVDaGFuZ2VmJyB3YXJuaW5ncyB3aGVuIHJ1bm5pbmcgSURMRSB0ZXN0cy4KKyAgVGhlc2UgcGVyc2lzdGVkIGFmdGVyIG90aGVyIHdhcm5pbmdzIHdlcmUgc3VwcHJlc3NlZCBpbiAjMjA1NjcuCisgIEFwcGx5IFNlcmhpeSBTdG9yY2hha2EncyB1cGRhdGVfaWRsZXRhc2tzIHNvbHV0aW9uIHRvIGZvdXIgdGVzdCBmaWxlcy4KKyAgUmVjb3JkIHRoaXMgYWRkaXRpb25hbCBhZHZpY2UgaW4gaWRsZV90ZXN0L1JFQURNRS50eHQKKworLSBJc3N1ZSAjMjA1Njc6IFJldmlzZSBpZGxlX3Rlc3QvUkVBRE1FLnR4dCB3aXRoIGFkdmljZSBhYm91dCBhdm9pZGluZworICB0ayB3YXJuaW5nIG1lc3NhZ2VzIGZyb20gdGVzdHMuICBBcHBseSBhZHZpY2UgdG8gc2V2ZXJhbCBJRExFIHRlc3RzLgorCistIElzc3VlICMyNzExNzogTWFrZSBjb2xvcml6ZXIgaHRlc3QgYW5kIHR1cnRsZWRlbW8gd29yayB3aXRoIGRhcmsgdGhlbWVzLgorICBNb3ZlIGNvZGUgZm9yIGNvbmZpZ3VyaW5nIHRleHQgd2lkZ2V0IGNvbG9ycyB0byBhIG5ldyBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMjY2NzM6IFdoZW4gdGsgcmVwb3J0cyBmb250IHNpemUgYXMgMCwgY2hhbmdlIHRvIHNpemUgMTAuCisgIFN1Y2ggZm9udHMgb24gTGludXggcHJldmVudGVkIHRoZSBjb25maWd1cmF0aW9uIGRpYWxvZyBmcm9tIG9wZW5pbmcuCisKKy0gSXNzdWUgIzIxOTM5OiBBZGQgdGVzdCBmb3IgSURMRSdzIHBlcmNvbGF0b3IuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFNhaW1hZGhhdiBIZWJsaWthci4KKworLSBJc3N1ZSAjMjE2NzY6IEFkZCB0ZXN0IGZvciBJRExFJ3MgcmVwbGFjZSBkaWFsb2cuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFNhaW1hZGhhdiBIZWJsaWthci4KKworLSBJc3N1ZSAjMTg0MTA6IEFkZCB0ZXN0IGZvciBJRExFJ3Mgc2VhcmNoIGRpYWxvZy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgV2VzdGxleSBNYXJ0w61uZXouCisKKy0gSXNzdWUgIzIxNzAzOiBBZGQgdGVzdCBmb3IgdW5kbyBkZWxlZ2F0b3IuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFNhaW1hZGhhdiBIZWJsaWthciAuCisKKy0gSXNzdWUgIzI3MDQ0OiBBZGQgQ29uZmlnRGlhbG9nLnJlbW92ZV92YXJfY2FsbGJhY2tzIHRvIHN0b3AgbWVtb3J5IGxlYWtzLgorCistIElzc3VlICMyMzk3NzogQWRkIG1vcmUgYXNzZXJ0cyB0byB0ZXN0X2RlbGVnYXRvci4KKworLSBJc3N1ZSAjMjA2NDA6IEFkZCB0ZXN0cyBmb3IgaWRsZWxpYi5jb25maWdIZWxwU291cmNlRWRpdC4KKyAgUGF0Y2ggYnkgU2FpbWFkaGF2IEhlYmxpa2FyLgorCistIEluIHRoZSAnSURMRS1jb25zb2xlIGRpZmZlcmVuY2VzJyBzZWN0aW9uIG9mIHRoZSBJRExFIGRvYywgY2xhcmlmeQorICBob3cgcnVubmluZyB3aXRoIElETEUgYWZmZWN0cyBzeXMubW9kdWxlcyBhbmQgdGhlIHN0YW5kYXJkIHN0cmVhbXMuCisKKy0gSXNzdWUgIzI1NTA3OiBmaXggaW5jb3JyZWN0IGNoYW5nZSBpbiBJT0JpbmRpbmcgdGhhdCBwcmV2ZW50ZWQgcHJpbnRpbmcuCisgIEF1Z21lbnQgSU9CaW5kaW5nIGh0ZXN0IHRvIGluY2x1ZGUgYWxsIG1ham9yIElPQmluZGluZyBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzI1OTA1OiBSZXZlcnQgdW53YW50ZWQgY29udmVyc2lvbiBvZiAnIHRvIOKAmSBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OCisgIE1BUksgaW4gUkVBRE1FLnR4dCBhbmQgb3BlbiB0aGlzIGFuZCBORVdTLnR4dCB3aXRoICdhc2NpaScuCisgIFJlLWVuY29kZSBDUkVESVRTLnR4dCB0byB1dGYtOCBhbmQgb3BlbiBpdCB3aXRoICd1dGYtOCcuCisKKworV2hhdCdzIE5ldyBpbiBJRExFIDMuNS4xPworPT09PT09PT09PT09PT09PT09PT09PT09PQorKlJlbGVhc2UgZGF0ZTogMjAxNS0xMi0wNioKIAogLSBJc3N1ZSAxNTM0ODogU3RvcCB0aGUgZGVidWdnZXIgZW5naW5lIChub3JtYWxseSBpbiBhIHVzZXIgcHJvY2VzcykKICAgYmVmb3JlIGNsb3NpbmcgdGhlIGRlYnVnZ2VyIHdpbmRvdyAocnVubmluZyBpbiB0aGUgSURMRSBwcm9jZXNzKS4KQEAgLTk2LDYgKzE2MiwxMSBAQAogCiAtIElzc3VlICMyNDc5MDogUmVtb3ZlIGV4dHJhbmVvdXMgY29kZSAod2hpY2ggYWxzbyBjcmVhdGUgMiAmIDMgY29uZmxpY3RzKS4KIAorCitXaGF0J3MgTmV3IGluIElETEUgMy41LjA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE1LTA5LTEzKgorCiAtIElzc3VlICMyMzY3MjogQWxsb3cgSWRsZSB0byBlZGl0IGFuZCBydW4gZmlsZXMgd2l0aCBhc3RyYWwgY2hhcnMgaW4gbmFtZS4KICAgUGF0Y2ggYnkgTW9oZCBTYW5hZCBaYWtpIFJpenZpLgogCkBAIC0xMTIsMTEgKzE4Myw2IEBACiAtIElzc3VlICMyMzE4NDogcmVtb3ZlIHVudXNlZCBuYW1lcyBhbmQgaW1wb3J0cyBpbiBpZGxlbGliLgogICBJbml0aWFsIHBhdGNoIGJ5IEFsIFN3ZWlnYXJ0LgogCi0KLVdoYXQncyBOZXcgaW4gSWRsZSAzLjQuMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLSpSZWxlYXNlIGRhdGU6IDIwMTUtMDItMjUqCi0KIC0gSXNzdWUgIzIwNTc3OiBDb25maWd1cmF0aW9uIG9mIHRoZSBtYXggbGluZSBsZW5ndGggZm9yIHRoZSBGb3JtYXRQYXJhZ3JhcGgKICAgZXh0ZW5zaW9uIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlIEdlbmVyYWwgdGFiIG9mIHRoZSBJZGxlIHByZWZlcmVuY2VzIGRpYWxvZwogICB0byB0aGUgRm9ybWF0UGFyYWdyYXBoIHRhYiBvZiB0aGUgQ29uZmlnIEV4dGVuc2lvbnMgZGlhbG9nLgpAQCAtMTI5LDcgKzE5NSw3IEBACiAgIENoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gSE9NRS8uaWRsZXJjL2NvbmZpZy1leHRlbnNpb25zLmNmZy4KICAgT3JpZ2luYWwgcGF0Y2ggYnkgVGFsIEVpbmF0LgogCi0tIElzc3VlICMxNjIzMzogQSBtb2R1bGUgYnJvd3NlciAoRmlsZSA6IENsYXNzIEJyb3dzZXIsIEFsdCtDKSByZXF1aXJlcyBhCistIElzc3VlICMxNjIzMzogQSBtb2R1bGUgYnJvd3NlciAoRmlsZSA6IENsYXNzIEJyb3dzZXIsIEFsdCtDKSByZXF1aXJlcyBhbgogICBlZGl0b3Igd2luZG93IHdpdGggYSBmaWxlbmFtZS4gIFdoZW4gQ2xhc3MgQnJvd3NlciBpcyByZXF1ZXN0ZWQgb3RoZXJ3aXNlLAogICBmcm9tIGEgc2hlbGwsIG91dHB1dCB3aW5kb3csIG9yICdVbnRpdGxlZCcgZWRpdG9yLCBJZGxlIG5vIGxvbmdlciBkaXNwbGF5cwogICBhbiBlcnJvciBib3guICBJdCBub3cgcG9wcyB1cCBhbiAgT3BlbiBNb2R1bGUgYm94IChBbHQrTSkuIElmIGEgdmFsaWQgbmFtZQpAQCAtMTQ1LDE2ICsyMTEsMTEgQEAKIC0gSXNzdWUgIzIzMTgwOiBSZW5hbWUgSURMRSAiV2luZG93cyIgbWVudSBpdGVtIHRvICJXaW5kb3ciLgogICBQYXRjaCBieSBBbCBTd2VpZ2FydC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMy40LjI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qUmVsZWFzZSBkYXRlOiAyMDE0LTEwLTA2KgotCiAtIElzc3VlICMxNzM5MDogQWRqdXN0IEVkaXRvciB3aW5kb3cgdGl0bGU7IHJlbW92ZSAnUHl0aG9uJywKICAgbW92ZSB2ZXJzaW9uIHRvIGVuZC4KIAogLSBJc3N1ZSAjMTQxMDU6IElkbGUgZGVidWdnZXIgYnJlYWtwb2ludHMgbm8gbG9uZ2VyIGRpc2FwcGVhcgotICB3aGVuIGluc2V0aW5nIG9yIGRlbGV0aW5nIGxpbmVzLgorICB3aGVuIGluc2VydGluZyBvciBkZWxldGluZyBsaW5lcy4KIAogLSBJc3N1ZSAjMTcxNzI6IFR1cnRsZWRlbW8gY2FuIG5vdyBiZSBydW4gZnJvbSBJZGxlLgogICBDdXJyZW50bHksIHRoZSBlbnRyeSBpcyBvbiB0aGUgSGVscCBtZW51LCBidXQgaXQgbWF5IG1vdmUgdG8gUnVuLgpAQCAtMTg0LDE0ICsyNDUsOCBAQAogCiAtIElzc3VlICMxODQwOTogQWRkIHVuaXR0ZXN0IGZvciBBdXRvQ29tcGxldGUuIFBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KIAotLSBJc3N1ZSAjMTgxMDQ6IEFkZCBpZGxlbGliL2lkbGVfdGVzdC9odGVzdC5weSB3aXRoIGEgZmV3IHNhbXBsZSB0ZXN0cyB0byBiZWdpbgotICBjb25zb2xpZGF0aW5nIGFuZCBpbXByb3ZpbmcgaHVtYW4tdmFsaWRhdGVkIHRlc3RzIG9mIElkbGUuIENoYW5nZSBvdGhlciBmaWxlcwotICBhcyBuZWVkZWQgdG8gd29yayB3aXRoIGh0ZXN0LiAgUnVubmluZyB0aGUgbW9kdWxlIGFzIF9fbWFpbl9fIHJ1bnMgYWxsIHRlc3RzLgotCi0KLVdoYXQncyBOZXcgaW4gSURMRSAzLjQuMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLSpSZWxlYXNlIGRhdGU6IDIwMTQtMDUtMTgqCistIElzc3VlICMyMTQ3NzogaHRlc3QucHkgLSBJbXByb3ZlIGZyYW1ld29yaywgY29tcGxldGUgc2V0IG9mIHRlc3RzLgorICBQYXRjaGVzIGJ5IFNhaW1hZGhhdiBIZWJsaWthcgogCiAtIElzc3VlICMxODEwNDogQWRkIGlkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5IHdpdGggYSBmZXcgc2FtcGxlIHRlc3RzIHRvIGJlZ2luCiAgIGNvbnNvbGlkYXRpbmcgYW5kIGltcHJvdmluZyBodW1hbi12YWxpZGF0ZWQgdGVzdHMgb2YgSWRsZS4gQ2hhbmdlIG90aGVyIGZpbGVzCkBAIC0yOTAsMTEgKzM0NSw2IEBACiAtIFVzZSBvZiAnZmlsdGVyJyBpbiBrZXliaW5kaW5nRGlhbG9nLnB5IHdhcyBjYXVzaW5nIGN1c3RvbSBrZXkgYXNzaWdubWVudCB0bwogICBmYWlsLiAgUGF0Y2ggNTcwNyBhbWF1cnkuZm9yZ2VvdGRhcmMuCiAKLQotV2hhdCdzIE5ldyBpbiBJRExFIDMuMWExPwotPT09PT09PT09PT09PT09PT09PT09PT09PQotKlJlbGVhc2UgZGF0ZTogMDctTWFyLTA5KgotCiAtIElzc3VlICM0ODE1OiBPZmZlciBjb252ZXJzaW9uIHRvIFVURi04IGlmIHNvdXJjZSBmaWxlcyBoYXZlCiAgIG5vIGVuY29kaW5nIGRlY2xhcmF0aW9uIGFuZCBhcmUgbm90IGVuY29kZWQgaW4gVVRGLTguCiAKQEAgLTMzNCwxMSArMzg0LDYgQEAKIAogLSBJc3N1ZSAjMzU0OTogT24gTWFjT1MgdGhlIHByZWZlcmVuY2VzIG1lbnUgd2FzIG5vdCBwcmVzZW50CiAKLQotV2hhdCdzIE5ldyBpbiBJRExFIDMuMCBmaW5hbD8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qUmVsZWFzZSBkYXRlOiAwMy1EZWMtMjAwOCoKLQogLSBJRExFIHdvdWxkIHByaW50IGEgIlVuaGFuZGxlZCBzZXJ2ZXIgZXhjZXB0aW9uISIgbWVzc2FnZSB3aGVuIGludGVybmFsCiAgIGRlYnVnZ2luZyBpcyBlbmFibGVkLgogCkBAIC0zNDgsMTEgKzM5Myw2IEBACiAtIElzc3VlICM0MzgzOiBXaGVuIElETEUgY2Fubm90IG1ha2UgdGhlIGNvbm5lY3Rpb24gdG8gaXRzIHN1YnByb2Nlc3MsIGl0IHdvdWxkCiAgIGZhaWwgdG8gcHJvcGVybHkgZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZS4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMy4wYTM/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qUmVsZWFzZSBkYXRlOiAyOS1GZWItMjAwOCoKLQogLSBoZWxwKCkgd2FzIG5vdCBwYWdpbmcgdG8gdGhlIHNoZWxsLiAgSXNzdWUxNjUwLgogCiAtIENvZGVDb250ZXh0IHdhcyBub3QgaW1wb3J0aW5nLgpAQCAtMzY0LDE5ICs0MDQsOSBAQAogCiAtIElzc3VlICMxNTg1OiBJRExFIHVzZXMgbm9uLWV4aXN0ZW50IHhyYW5nZSgpIGZ1bmN0aW9uLgogCi0KLVdoYXQncyBOZXcgaW4gSURMRSAzLjBhMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLSpSZWxlYXNlIGRhdGU6IDA2LURlYy0yMDA3KgotCiAtIFdpbmRvd3MgRU9MIHNlcXVlbmNlIG5vdCBjb252ZXJ0ZWQgY29ycmVjdGx5LCBlbmNvZGluZyBlcnJvci4KICAgQ2F1c2VkIGZpbGUgc2F2ZSB0byBmYWlsLiBCdWcgMTEzMC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMy4wYTE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qUmVsZWFzZSBkYXRlOiAzMS1BdWctMjAwNyoKLQogLSBJRExFIGNvbnZlcnRlZCB0byBQeXRob24gMzAwMCBzeW50YXguCiAKIC0gU3RyaW5ncyBiZWNhbWUgVW5pY29kZS4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1BhcmVuTWF0Y2gucHkgYi9MaWIvaWRsZWxpYi9QYXJlbk1hdGNoLnB5CmluZGV4IDE5YmFkOGMuLjQ3ZTEwZjMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1BhcmVuTWF0Y2gucHkKKysrIGIvTGliL2lkbGVsaWIvUGFyZW5NYXRjaC5weQpAQCAtOSw3ICs5LDcgQEAKIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgogCiBfb3BlbmVycyA9IHsnKSc6JygnLCddJzonWycsJ30nOid7J30KLUNIRUNLX0RFTEFZID0gMTAwICMgbWlsaXNlY29uZHMKK0NIRUNLX0RFTEFZID0gMTAwICMgbWlsbGlzZWNvbmRzCiAKIGNsYXNzIFBhcmVuTWF0Y2g6CiAgICAgIiIiSGlnaGxpZ2h0IG1hdGNoaW5nIHBhcmVudGhlc2VzCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QZXJjb2xhdG9yLnB5IGIvTGliL2lkbGVsaWIvUGVyY29sYXRvci5weQppbmRleCA5ZTkzMzE5Li5iOGJlMmFhIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9QZXJjb2xhdG9yLnB5CisrKyBiL0xpYi9pZGxlbGliL1BlcmNvbGF0b3IucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIGlkbGVsaWIuV2lkZ2V0UmVkaXJlY3RvciBpbXBvcnQgV2lkZ2V0UmVkaXJlY3RvcgogZnJvbSBpZGxlbGliLkRlbGVnYXRvciBpbXBvcnQgRGVsZWdhdG9yCiAKKwogY2xhc3MgUGVyY29sYXRvcjoKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKQEAgLTE2LDggKzE3LDEwIEBACiAgICAgICAgIHdoaWxlIHNlbGYudG9wIGlzIG5vdCBzZWxmLmJvdHRvbToKICAgICAgICAgICAgIHNlbGYucmVtb3ZlZmlsdGVyKHNlbGYudG9wKQogICAgICAgICBzZWxmLnRvcCA9IE5vbmUKLSAgICAgICAgc2VsZi5ib3R0b20uc2V0ZGVsZWdhdGUoTm9uZSk7IHNlbGYuYm90dG9tID0gTm9uZQotICAgICAgICBzZWxmLnJlZGlyLmNsb3NlKCk7IHNlbGYucmVkaXIgPSBOb25lCisgICAgICAgIHNlbGYuYm90dG9tLnNldGRlbGVnYXRlKE5vbmUpCisgICAgICAgIHNlbGYuYm90dG9tID0gTm9uZQorICAgICAgICBzZWxmLnJlZGlyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5yZWRpciA9IE5vbmUKICAgICAgICAgc2VsZi50ZXh0ID0gTm9uZQogCiAgICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgY2hhcnMsIHRhZ3M9Tm9uZSk6CkBAIC01MSw1NCArNTQsNTIgQEAKICAgICAgICAgICAgIGYuc2V0ZGVsZWdhdGUoZmlsdGVyLmRlbGVnYXRlKQogICAgICAgICAgICAgZmlsdGVyLnNldGRlbGVnYXRlKE5vbmUpCiAKLWRlZiBfcGVyY29sYXRvcihwYXJlbnQpOgorCitkZWYgX3BlcmNvbGF0b3IocGFyZW50KTogICMgaHRlc3QgIwogICAgIGltcG9ydCB0a2ludGVyIGFzIHRrCiAgICAgaW1wb3J0IHJlCisKICAgICBjbGFzcyBUcmFjZXIoRGVsZWdhdG9yKToKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICAgICAgRGVsZWdhdG9yLl9faW5pdF9fKHNlbGYsIE5vbmUpCisKICAgICAgICAgZGVmIGluc2VydChzZWxmLCAqYXJncyk6CiAgICAgICAgICAgICBwcmludChzZWxmLm5hbWUsICI6IGluc2VydCIsIGFyZ3MpCiAgICAgICAgICAgICBzZWxmLmRlbGVnYXRlLmluc2VydCgqYXJncykKKwogICAgICAgICBkZWYgZGVsZXRlKHNlbGYsICphcmdzKToKICAgICAgICAgICAgIHByaW50KHNlbGYubmFtZSwgIjogZGVsZXRlIiwgYXJncykKICAgICAgICAgICAgIHNlbGYuZGVsZWdhdGUuZGVsZXRlKCphcmdzKQotICAgIHJvb3QgPSB0ay5UaygpCi0gICAgcm9vdC50aXRsZSgiVGVzdCBQZXJjb2xhdG9yIikKKworICAgIGJveCA9IHRrLlRvcGxldmVsKHBhcmVudCkKKyAgICBib3gudGl0bGUoIlRlc3QgUGVyY29sYXRvciIpCiAgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQotICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQotICAgIHRleHQgPSB0ay5UZXh0KHJvb3QpCisgICAgYm94Lmdlb21ldHJ5KCIrJWQrJWQiICUgKHgsIHkgKyAxNTApKQorICAgIHRleHQgPSB0ay5UZXh0KGJveCkKICAgICBwID0gUGVyY29sYXRvcih0ZXh0KQorICAgIHBpbiA9IHAuaW5zZXJ0ZmlsdGVyCisgICAgcG91dCA9IHAucmVtb3ZlZmlsdGVyCiAgICAgdDEgPSBUcmFjZXIoInQxIikKICAgICB0MiA9IFRyYWNlcigidDIiKQogCiAgICAgZGVmIHRvZ2dsZTEoKToKLSAgICAgICAgaWYgdmFyMS5nZXQoKSA9PSAwOgotICAgICAgICAgICAgdmFyMS5zZXQoMSkKLSAgICAgICAgICAgIHAuaW5zZXJ0ZmlsdGVyKHQxKQotICAgICAgICBlbGlmIHZhcjEuZ2V0KCkgPT0gMToKLSAgICAgICAgICAgIHZhcjEuc2V0KDApCi0gICAgICAgICAgICBwLnJlbW92ZWZpbHRlcih0MSkKLQorICAgICAgICAocGluIGlmIHZhcjEuZ2V0KCkgZWxzZSBwb3V0KSh0MSkKICAgICBkZWYgdG9nZ2xlMigpOgotICAgICAgICBpZiB2YXIyLmdldCgpID09IDA6Ci0gICAgICAgICAgICB2YXIyLnNldCgxKQotICAgICAgICAgICAgcC5pbnNlcnRmaWx0ZXIodDIpCi0gICAgICAgIGVsaWYgdmFyMi5nZXQoKSA9PSAxOgotICAgICAgICAgICAgdmFyMi5zZXQoMCkKLSAgICAgICAgICAgIHAucmVtb3ZlZmlsdGVyKHQyKQorICAgICAgICAocGluIGlmIHZhcjIuZ2V0KCkgZWxzZSBwb3V0KSh0MikKIAogICAgIHRleHQucGFjaygpCiAgICAgdmFyMSA9IHRrLkludFZhcigpCi0gICAgY2IxID0gdGsuQ2hlY2tidXR0b24ocm9vdCwgdGV4dD0iVHJhY2VyMSIsIGNvbW1hbmQ9dG9nZ2xlMSwgdmFyaWFibGU9dmFyMSkKKyAgICBjYjEgPSB0ay5DaGVja2J1dHRvbihib3gsIHRleHQ9IlRyYWNlcjEiLCBjb21tYW5kPXRvZ2dsZTEsIHZhcmlhYmxlPXZhcjEpCiAgICAgY2IxLnBhY2soKQogICAgIHZhcjIgPSB0ay5JbnRWYXIoKQotICAgIGNiMiA9IHRrLkNoZWNrYnV0dG9uKHJvb3QsIHRleHQ9IlRyYWNlcjIiLCBjb21tYW5kPXRvZ2dsZTIsIHZhcmlhYmxlPXZhcjIpCisgICAgY2IyID0gdGsuQ2hlY2tidXR0b24oYm94LCB0ZXh0PSJUcmFjZXIyIiwgY29tbWFuZD10b2dnbGUyLCB2YXJpYWJsZT12YXIyKQogICAgIGNiMi5wYWNrKCkKIAotICAgIHJvb3QubWFpbmxvb3AoKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfcGVyY29sYXRvcicsIHZlcmJvc2l0eT0yLAorICAgICAgICAgICAgICAgICAgZXhpdD1GYWxzZSkKKwogICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgogICAgIHJ1bihfcGVyY29sYXRvcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CmluZGV4IDFiY2M5YjYuLjVkZWM2OGUgMTAwNzU1Ci0tLSBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKKysrIGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQpAQCAtMTM5Niw2ICsxMzk2LDE3IEBACiAgICAgICAgIHNlbGYuc2hlbGwuY2xvc2UoKQogCiAKK2RlZiBmaXhfeDExX3Bhc3RlKHJvb3QpOgorICAgICJNYWtlIHBhc3RlIHJlcGxhY2Ugc2VsZWN0aW9uIG9uIHgxMS4gIFNlZSBpc3N1ZSAjNTEyNC4iCisgICAgaWYgcm9vdC5fd2luZG93aW5nc3lzdGVtID09ICd4MTEnOgorICAgICAgICBmb3IgY2xzIGluICdUZXh0JywgJ0VudHJ5JywgJ1NwaW5ib3gnOgorICAgICAgICAgICAgcm9vdC5iaW5kX2NsYXNzKAorICAgICAgICAgICAgICAgIGNscywKKyAgICAgICAgICAgICAgICAnPDxQYXN0ZT4+JywKKyAgICAgICAgICAgICAgICAnY2F0Y2ggeyVXIGRlbGV0ZSBzZWwuZmlyc3Qgc2VsLmxhc3R9XG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYmluZF9jbGFzcyhjbHMsICc8PFBhc3RlPj4nKSkKKworCiB1c2FnZV9tc2cgPSAiIiJcCiAKIFVTQUdFOiBpZGxlICBbLWRlaW5zXSBbLXQgdGl0bGVdIFtmaWxlXSoKQEAgLTE1MjgsOCArMTUzOSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRvci1vbi1zdGFydHVwJywgdHlwZT0nYm9vbCcpCiAgICAgZW5hYmxlX2VkaXQgPSBlbmFibGVfZWRpdCBvciBlZGl0X3N0YXJ0CiAgICAgZW5hYmxlX3NoZWxsID0gZW5hYmxlX3NoZWxsIG9yIG5vdCBlbmFibGVfZWRpdAorCiAgICAgIyBzdGFydCBlZGl0b3IgYW5kL29yIHNoZWxsIHdpbmRvd3M6CiAgICAgcm9vdCA9IFRrKGNsYXNzTmFtZT0iSWRsZSIpCisgICAgcm9vdC53aXRoZHJhdygpCiAKICAgICAjIHNldCBhcHBsaWNhdGlvbiBpY29uCiAgICAgaWNvbmRpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnSWNvbnMnKQpAQCAtMTU0NCw3ICsxNTU3LDcgQEAKICAgICAgICAgcm9vdC53bV9pY29ucGhvdG8oVHJ1ZSwgKmljb25zKQogCiAgICAgZml4d29yZGJyZWFrcyhyb290KQotICAgIHJvb3Qud2l0aGRyYXcoKQorICAgIGZpeF94MTFfcGFzdGUocm9vdCkKICAgICBmbGlzdCA9IFB5U2hlbGxGaWxlTGlzdChyb290KQogICAgIG1hY29zeFN1cHBvcnQuc2V0dXBBcHAocm9vdCwgZmxpc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1JlcGxhY2VEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9SZXBsYWNlRGlhbG9nLnB5CmluZGV4IDI2NjVhMWMuLmYyZWEyMmUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1JlcGxhY2VEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvUmVwbGFjZURpYWxvZy5weQpAQCAtMSwzICsxLDggQEAKKyIiIlJlcGxhY2UgZGlhbG9nIGZvciBJRExFLiBJbmhlcml0cyBTZWFyY2hEaWFsb2dCYXNlIGZvciBHVUkuCitVc2VzIGlkbGVsaWIuU2VhcmNoRW5naW5lIGZvciBzZWFyY2ggY2FwYWJpbGl0eS4KK0RlZmluZXMgdmFyaW91cyByZXBsYWNlIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgcmVwbGFjZSwgcmVwbGFjZSBhbGwsCityZXBsYWNlK2ZpbmQuCisiIiIKIGZyb20gdGtpbnRlciBpbXBvcnQgKgogCiBmcm9tIGlkbGVsaWIgaW1wb3J0IFNlYXJjaEVuZ2luZQpAQCAtNiw2ICsxMSw4IEBACiAKIAogZGVmIHJlcGxhY2UodGV4dCk6CisgICAgIiIiUmV0dXJucyBhIHNpbmdsZXRvbiBSZXBsYWNlRGlhbG9nIGluc3RhbmNlLlRoZSBzaW5nbGUgZGlhbG9nCisgICAgIHNhdmVzIHVzZXIgZW50cmllcyBhbmQgcHJlZmVyZW5jZXMgYWNyb3NzIGluc3RhbmNlcy4iIiIKICAgICByb290ID0gdGV4dC5fcm9vdCgpCiAgICAgZW5naW5lID0gU2VhcmNoRW5naW5lLmdldChyb290KQogICAgIGlmIG5vdCBoYXNhdHRyKGVuZ2luZSwgIl9yZXBsYWNlZGlhbG9nIik6CkBAIC0yNCw2ICszMSw3IEBACiAgICAgICAgIHNlbGYucmVwbHZhciA9IFN0cmluZ1Zhcihyb290KQogCiAgICAgZGVmIG9wZW4oc2VsZiwgdGV4dCk6CisgICAgICAgICIiIkRpc3BsYXkgdGhlIHJlcGxhY2UgZGlhbG9nIiIiCiAgICAgICAgIFNlYXJjaERpYWxvZ0Jhc2Uub3BlbihzZWxmLCB0ZXh0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmaXJzdCA9IHRleHQuaW5kZXgoInNlbC5maXJzdCIpCkBAIC0zOSw2ICs0Nyw3IEBACiAgICAgICAgIHNlbGYub2sgPSAxCiAKICAgICBkZWYgY3JlYXRlX2VudHJpZXMoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBsYWJlbCBhbmQgdGV4dCBlbnRyeSB3aWRnZXRzIiIiCiAgICAgICAgIFNlYXJjaERpYWxvZ0Jhc2UuY3JlYXRlX2VudHJpZXMoc2VsZikKICAgICAgICAgc2VsZi5yZXBsZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJSZXBsYWNlIHdpdGg6Iiwgc2VsZi5yZXBsdmFyKVswXQogCkBAIC01Nyw5ICs2NiwxMCBAQAogICAgICAgICAgICAgc2VsZi5kb19yZXBsYWNlKCkKIAogICAgIGRlZiBkZWZhdWx0X2NvbW1hbmQoc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgICJSZXBsYWNlIGFuZCBmaW5kIG5leHQuIgogICAgICAgICBpZiBzZWxmLmRvX2ZpbmQoc2VsZi5vayk6Ci0gICAgICAgICAgICBpZiBzZWxmLmRvX3JlcGxhY2UoKTogICAjIE9ubHkgZmluZCBuZXh0IG1hdGNoIGlmIHJlcGxhY2Ugc3VjY2VlZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGJhZCByZSBjYW4gY2F1c2UgaXQgdG8gZmFpbC4KKyAgICAgICAgICAgIGlmIHNlbGYuZG9fcmVwbGFjZSgpOiAgIyBPbmx5IGZpbmQgbmV4dCBtYXRjaCBpZiByZXBsYWNlIHN1Y2NlZWRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGJhZCByZSBjYW4gY2F1c2UgaXQgdG8gZmFpbC4KICAgICAgICAgICAgICAgICBzZWxmLmRvX2ZpbmQoMCkKIAogICAgIGRlZiBfcmVwbGFjZV9leHBhbmQoc2VsZiwgbSwgcmVwbCk6CkBAIC03Nyw2ICs4Nyw3IEBACiAgICAgICAgIHJldHVybiBuZXcKIAogICAgIGRlZiByZXBsYWNlX2FsbChzZWxmLCBldmVudD1Ob25lKToKKyAgICAgICAgIiIiUmVwbGFjZSBhbGwgaW5zdGFuY2VzIG9mIHBhdHZhciB3aXRoIHJlcGx2YXIgaW4gdGV4dCIiIgogICAgICAgICBwcm9nID0gc2VsZi5lbmdpbmUuZ2V0cHJvZygpCiAgICAgICAgIGlmIG5vdCBwcm9nOgogICAgICAgICAgICAgcmV0dXJuCkBAIC0xNzMsNiArMTg0LDggQEAKICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBzaG93X2hpdChzZWxmLCBmaXJzdCwgbGFzdCk6CisgICAgICAgICIiIkhpZ2hsaWdodCB0ZXh0IGZyb20gJ2ZpcnN0JyB0byAnbGFzdCcuCisgICAgICAgICdmaXJzdCcsICdsYXN0JyAtIFRleHQgaW5kaWNlcyIiIgogICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CiAgICAgICAgIHRleHQubWFya19zZXQoImluc2VydCIsIGZpcnN0KQogICAgICAgICB0ZXh0LnRhZ19yZW1vdmUoInNlbCIsICIxLjAiLCAiZW5kIikKQEAgLTE4OSwxMSArMjAyLDEzIEBACiAgICAgICAgIFNlYXJjaERpYWxvZ0Jhc2UuY2xvc2Uoc2VsZiwgZXZlbnQpCiAgICAgICAgIHNlbGYudGV4dC50YWdfcmVtb3ZlKCJoaXQiLCAiMS4wIiwgImVuZCIpCiAKLWRlZiBfcmVwbGFjZV9kaWFsb2cocGFyZW50KToKLSAgICByb290ID0gVGsoKQotICAgIHJvb3QudGl0bGUoIlRlc3QgUmVwbGFjZURpYWxvZyIpCisKK2RlZiBfcmVwbGFjZV9kaWFsb2cocGFyZW50KTogICMgaHRlc3QgIworICAgICIiImh0ZXN0IHdyYXBwZXIgZnVuY3Rpb24iIiIKKyAgICBib3ggPSBUb3BsZXZlbChwYXJlbnQpCisgICAgYm94LnRpdGxlKCJUZXN0IFJlcGxhY2VEaWFsb2ciKQogICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKLSAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKyAgICBib3guZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogCiAgICAgIyBtb2NrIHVuZG8gZGVsZWdhdG9yIG1ldGhvZHMKICAgICBkZWYgdW5kb19ibG9ja19zdGFydCgpOgpAQCAtMjAyLDIwICsyMTcsMjUgQEAKICAgICBkZWYgdW5kb19ibG9ja19zdG9wKCk6CiAgICAgICAgIHBhc3MKIAotICAgIHRleHQgPSBUZXh0KHJvb3QpCisgICAgdGV4dCA9IFRleHQoYm94LCBpbmFjdGl2ZXNlbGVjdGJhY2tncm91bmQ9J2dyYXknKQogICAgIHRleHQudW5kb19ibG9ja19zdGFydCA9IHVuZG9fYmxvY2tfc3RhcnQKICAgICB0ZXh0LnVuZG9fYmxvY2tfc3RvcCA9IHVuZG9fYmxvY2tfc3RvcAogICAgIHRleHQucGFjaygpCi0gICAgdGV4dC5pbnNlcnQoImluc2VydCIsIlRoaXMgaXMgYSBzYW1wbGUgc3RyaW5nLlxuIioxMCkKKyAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwiVGhpcyBpcyBhIHNhbXBsZSBzVHJpbmdcblBsdXMgTU9SRS4iKQorICAgIHRleHQuZm9jdXNfc2V0KCkKIAogICAgIGRlZiBzaG93X3JlcGxhY2UoKToKICAgICAgICAgdGV4dC50YWdfYWRkKFNFTCwgIjEuMCIsIEVORCkKICAgICAgICAgcmVwbGFjZSh0ZXh0KQogICAgICAgICB0ZXh0LnRhZ19yZW1vdmUoU0VMLCAiMS4wIiwgRU5EKQogCi0gICAgYnV0dG9uID0gQnV0dG9uKHJvb3QsIHRleHQ9IlJlcGxhY2UiLCBjb21tYW5kPXNob3dfcmVwbGFjZSkKKyAgICBidXR0b24gPSBCdXR0b24oYm94LCB0ZXh0PSJSZXBsYWNlIiwgY29tbWFuZD1zaG93X3JlcGxhY2UpCiAgICAgYnV0dG9uLnBhY2soKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfcmVwbGFjZWRpYWxvZycsCisgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCisKICAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KICAgICBydW4oX3JlcGxhY2VfZGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nLnB5CmluZGV4IDc3ZWY3YjkuLjc2NWQ1M2YgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1NlYXJjaERpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2cucHkKQEAgLTQsNiArNCw3IEBACiBmcm9tIGlkbGVsaWIuU2VhcmNoRGlhbG9nQmFzZSBpbXBvcnQgU2VhcmNoRGlhbG9nQmFzZQogCiBkZWYgX3NldHVwKHRleHQpOgorICAgICJDcmVhdGUgb3IgZmluZCB0aGUgc2luZ2xldG9uIFNlYXJjaERpYWxvZyBpbnN0YW5jZS4iCiAgICAgcm9vdCA9IHRleHQuX3Jvb3QoKQogICAgIGVuZ2luZSA9IFNlYXJjaEVuZ2luZS5nZXQocm9vdCkKICAgICBpZiBub3QgaGFzYXR0cihlbmdpbmUsICJfc2VhcmNoZGlhbG9nIik6CkBAIC0xMSwxMyArMTIsMTYgQEAKICAgICByZXR1cm4gZW5naW5lLl9zZWFyY2hkaWFsb2cKIAogZGVmIGZpbmQodGV4dCk6CisgICAgIkhhbmRsZSB0aGUgZWRpdG9yIGVkaXQgbWVudSBpdGVtIGFuZCBjb3JyZXNwb25kaW5nIGV2ZW50LiIKICAgICBwYXQgPSB0ZXh0LmdldCgic2VsLmZpcnN0IiwgInNlbC5sYXN0IikKLSAgICByZXR1cm4gX3NldHVwKHRleHQpLm9wZW4odGV4dCxwYXQpCisgICAgcmV0dXJuIF9zZXR1cCh0ZXh0KS5vcGVuKHRleHQsIHBhdCkgICMgT3BlbiBpcyBpbmhlcml0ZWQgZnJvbSBTREJhc2UuCiAKIGRlZiBmaW5kX2FnYWluKHRleHQpOgorICAgICJIYW5kbGUgdGhlIGVkaXRvciBlZGl0IG1lbnUgaXRlbSBhbmQgY29ycmVzcG9uZGluZyBldmVudC4iCiAgICAgcmV0dXJuIF9zZXR1cCh0ZXh0KS5maW5kX2FnYWluKHRleHQpCiAKIGRlZiBmaW5kX3NlbGVjdGlvbih0ZXh0KToKKyAgICAiSGFuZGxlIHRoZSBlZGl0b3IgZWRpdCBtZW51IGl0ZW0gYW5kIGNvcnJlc3BvbmRpbmcgZXZlbnQuIgogICAgIHJldHVybiBfc2V0dXAodGV4dCkuZmluZF9zZWxlY3Rpb24odGV4dCkKIAogY2xhc3MgU2VhcmNoRGlhbG9nKFNlYXJjaERpYWxvZ0Jhc2UpOgpAQCAtNjYsMjQgKzcwLDI4IEBACiAgICAgICAgICAgICBzZWxmLmVuZ2luZS5zZXRjb29rZWRwYXQocGF0KQogICAgICAgICByZXR1cm4gc2VsZi5maW5kX2FnYWluKHRleHQpCiAKLWRlZiBfc2VhcmNoX2RpYWxvZyhwYXJlbnQpOgotICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC50aXRsZSgiVGVzdCBTZWFyY2hEaWFsb2ciKQorCitkZWYgX3NlYXJjaF9kaWFsb2cocGFyZW50KTogICMgaHRlc3QgIworICAgICcnJ0Rpc3BsYXkgc2VhcmNoIHRlc3QgYm94LicnJworICAgIGJveCA9IFRvcGxldmVsKHBhcmVudCkKKyAgICBib3gudGl0bGUoIlRlc3QgU2VhcmNoRGlhbG9nIikKICAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCi0gICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCi0gICAgdGV4dCA9IFRleHQocm9vdCkKKyAgICBib3guZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorICAgIHRleHQgPSBUZXh0KGJveCwgaW5hY3RpdmVzZWxlY3RiYWNrZ3JvdW5kPSdncmF5JykKICAgICB0ZXh0LnBhY2soKQotICAgIHRleHQuaW5zZXJ0KCJpbnNlcnQiLCJUaGlzIGlzIGEgc2FtcGxlIHN0cmluZy5cbiIqMTApCisgICAgdGV4dC5pbnNlcnQoImluc2VydCIsIlRoaXMgaXMgYSBzYW1wbGUgc3RyaW5nLlxuIio1KQogCiAgICAgZGVmIHNob3dfZmluZCgpOgogICAgICAgICB0ZXh0LnRhZ19hZGQoU0VMLCAiMS4wIiwgRU5EKQotICAgICAgICBzID0gX3NldHVwKHRleHQpCi0gICAgICAgIHMub3Blbih0ZXh0KQorICAgICAgICBfc2V0dXAodGV4dCkub3Blbih0ZXh0KQogICAgICAgICB0ZXh0LnRhZ19yZW1vdmUoU0VMLCAiMS4wIiwgRU5EKQogCi0gICAgYnV0dG9uID0gQnV0dG9uKHJvb3QsIHRleHQ9IlNlYXJjaCIsIGNvbW1hbmQ9c2hvd19maW5kKQorICAgIGJ1dHRvbiA9IEJ1dHRvbihib3gsIHRleHQ9IlNlYXJjaCAoc2VsZWN0aW9uIGlnbm9yZWQpIiwgY29tbWFuZD1zaG93X2ZpbmQpCiAgICAgYnV0dG9uLnBhY2soKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3Rfc2VhcmNoZGlhbG9nJywKKyAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQogICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgogICAgIHJ1bihfc2VhcmNoX2RpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1VuZG9EZWxlZ2F0b3IucHkgYi9MaWIvaWRsZWxpYi9VbmRvRGVsZWdhdG9yLnB5CmluZGV4IDA0YzFjZjUuLjFjMjUwMmQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1VuZG9EZWxlZ2F0b3IucHkKKysrIGIvTGliL2lkbGVsaWIvVW5kb0RlbGVnYXRvci5weQpAQCAtMzM2LDMwICszMzYsMzMgQEAKICAgICAgICAgc2VsZi5kZXB0aCA9IHNlbGYuZGVwdGggKyBpbmNyCiAgICAgICAgIHJldHVybiBzZWxmLmRlcHRoCiAKLWRlZiBfdW5kb19kZWxlZ2F0b3IocGFyZW50KToKLSAgICBmcm9tIGlkbGVsaWIuUGVyY29sYXRvciBpbXBvcnQgUGVyY29sYXRvcgotICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC50aXRsZSgiVGVzdCBVbmRvRGVsZWdhdG9yIikKLSAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCi0gICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCiAKLSAgICB0ZXh0ID0gVGV4dChyb290KQotICAgIHRleHQuY29uZmlnKGhlaWdodD0xMCkKK2RlZiBfdW5kb19kZWxlZ2F0b3IocGFyZW50KTogICMgaHRlc3QgIworICAgIGltcG9ydCByZQorICAgIGltcG9ydCB0a2ludGVyIGFzIHRrCisgICAgZnJvbSBpZGxlbGliLlBlcmNvbGF0b3IgaW1wb3J0IFBlcmNvbGF0b3IKKyAgICB1bmRvd2luID0gdGsuVG9wbGV2ZWwoKQorICAgIHVuZG93aW4udGl0bGUoIlRlc3QgVW5kb0RlbGVnYXRvciIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHVuZG93aW4uZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorCisgICAgdGV4dCA9IFRleHQodW5kb3dpbiwgaGVpZ2h0PTEwKQogICAgIHRleHQucGFjaygpCiAgICAgdGV4dC5mb2N1c19zZXQoKQogICAgIHAgPSBQZXJjb2xhdG9yKHRleHQpCiAgICAgZCA9IFVuZG9EZWxlZ2F0b3IoKQogICAgIHAuaW5zZXJ0ZmlsdGVyKGQpCiAKLSAgICB1bmRvID0gQnV0dG9uKHJvb3QsIHRleHQ9IlVuZG8iLCBjb21tYW5kPWxhbWJkYTpkLnVuZG9fZXZlbnQoTm9uZSkpCisgICAgdW5kbyA9IEJ1dHRvbih1bmRvd2luLCB0ZXh0PSJVbmRvIiwgY29tbWFuZD1sYW1iZGE6ZC51bmRvX2V2ZW50KE5vbmUpKQogICAgIHVuZG8ucGFjayhzaWRlPSdsZWZ0JykKLSAgICByZWRvID0gQnV0dG9uKHJvb3QsIHRleHQ9IlJlZG8iLCBjb21tYW5kPWxhbWJkYTpkLnJlZG9fZXZlbnQoTm9uZSkpCisgICAgcmVkbyA9IEJ1dHRvbih1bmRvd2luLCB0ZXh0PSJSZWRvIiwgY29tbWFuZD1sYW1iZGE6ZC5yZWRvX2V2ZW50KE5vbmUpKQogICAgIHJlZG8ucGFjayhzaWRlPSdsZWZ0JykKLSAgICBkdW1wID0gQnV0dG9uKHJvb3QsIHRleHQ9IkR1bXAiLCBjb21tYW5kPWxhbWJkYTpkLmR1bXBfZXZlbnQoTm9uZSkpCisgICAgZHVtcCA9IEJ1dHRvbih1bmRvd2luLCB0ZXh0PSJEdW1wIiwgY29tbWFuZD1sYW1iZGE6ZC5kdW1wX2V2ZW50KE5vbmUpKQogICAgIGR1bXAucGFjayhzaWRlPSdsZWZ0JykKIAotICAgIHJvb3QubWFpbmxvb3AoKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfdW5kb2RlbGVnYXRvcicsIHZlcmJvc2l0eT0yLAorICAgICAgICAgICAgICAgICAgZXhpdD1GYWxzZSkKICAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KICAgICBydW4oX3VuZG9fZGVsZWdhdG9yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvV2lkZ2V0UmVkaXJlY3Rvci5weSBiL0xpYi9pZGxlbGliL1dpZGdldFJlZGlyZWN0b3IucHkKaW5kZXggYjNkN2JmYS4uYjY2YmU5ZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvV2lkZ2V0UmVkaXJlY3Rvci5weQorKysgYi9MaWIvaWRsZWxpYi9XaWRnZXRSZWRpcmVjdG9yLnB5CkBAIC00Nyw4ICs0Nyw5IEBACiAgICAgICAgIHRrLmNyZWF0ZWNvbW1hbmQodywgc2VsZi5kaXNwYXRjaCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJXaWRnZXRSZWRpcmVjdG9yKCVzPCVzPikiICUgKHNlbGYud2lkZ2V0Ll9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0Ll93KQorICAgICAgICByZXR1cm4gIiVzKCVzPCVzPikiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0Ll9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndpZGdldC5fdykKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIlVucmVnaXN0ZXIgb3BlcmF0aW9ucyBhbmQgcmV2ZXJ0IHJlZGlyZWN0aW9uIGNyZWF0ZWQgYnkgLl9faW5pdF9fLiIKQEAgLTY3LDcgKzY4LDcgQEAKICAgICAgICAgJycnUmV0dXJuIE9yaWdpbmFsQ29tbWFuZChvcGVyYXRpb24pIGFmdGVyIHJlZ2lzdGVyaW5nIGZ1bmN0aW9uLgogCiAgICAgICAgIFJlZ2lzdHJhdGlvbiBhZGRzIGFuIG9wZXJhdGlvbjogZnVuY3Rpb24gcGFpciB0byAuX29wZXJhdGlvbnMuCi0gICAgICAgIEl0IGFsc28gYWRkcyBhbiB3aWRnZXQgZnVuY3Rpb24gYXR0cmlidXRlIHRoYXQgbWFza3MgdGhlIHRraW50ZXIKKyAgICAgICAgSXQgYWxzbyBhZGRzIGEgd2lkZ2V0IGZ1bmN0aW9uIGF0dHJpYnV0ZSB0aGF0IG1hc2tzIHRoZSB0a2ludGVyCiAgICAgICAgIGNsYXNzIGluc3RhbmNlIG1ldGhvZC4gIE1ldGhvZCBtYXNraW5nIG9wZXJhdGVzIGluZGVwZW5kZW50bHkKICAgICAgICAgZnJvbSBjb21tYW5kIGRpc3BhdGNoLgogCkBAIC0xNDIsNyArMTQzLDggQEAKICAgICAgICAgc2VsZi5vcmlnX2FuZF9vcGVyYXRpb24gPSAocmVkaXIub3JpZywgb3BlcmF0aW9uKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIk9yaWdpbmFsQ29tbWFuZCglciwgJXIpIiAlIChzZWxmLnJlZGlyLCBzZWxmLm9wZXJhdGlvbikKKyAgICAgICAgcmV0dXJuICIlcyglciwgJXIpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZGlyLCBzZWxmLm9wZXJhdGlvbikKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6CiAgICAgICAgIHJldHVybiBzZWxmLnRrX2NhbGwoc2VsZi5vcmlnX2FuZF9vcGVyYXRpb24gKyBhcmdzKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9hYm91dERpYWxvZy5weQppbmRleCBkODc2YTk3Li5hOGY3NWQyIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9hYm91dERpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9hYm91dERpYWxvZy5weQpAQCAtMTExLDYgKzExMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TaG93SURMRUNyZWRpdHMpCiAgICAgICAgIGlkbGVfY3JlZGl0c19iLnBhY2soc2lkZT1MRUZULCBwYWR4PTEwLCBwYWR5PTEwKQogCisgICAgIyBMaWNlbnNlLCBldCBhbGwsIGFyZSBvZiB0eXBlIF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIKICAgICBkZWYgU2hvd0xpY2Vuc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuZGlzcGxheV9wcmludGVyX3RleHQoJ0Fib3V0IC0gTGljZW5zZScsIGxpY2Vuc2UpCiAKQEAgLTEyMCwxNCArMTIxLDE2IEBACiAgICAgZGVmIFNob3dQeXRob25DcmVkaXRzKHNlbGYpOgogICAgICAgICBzZWxmLmRpc3BsYXlfcHJpbnRlcl90ZXh0KCdBYm91dCAtIFB5dGhvbiBDcmVkaXRzJywgY3JlZGl0cykKIAorICAgICMgRW5jb2RlIENSRURJVFMudHh0IHRvIHV0Zi04IGZvciBwcm9wZXIgdmVyc2lvbiBvZiBMb2V3aXMuCisgICAgIyBTcGVjaWZ5IG90aGVycyBhcyBhc2NpaSB1bnRpbCBuZWVkIHV0Zi04LCBzbyBjYXRjaCBlcnJvcnMuCiAgICAgZGVmIFNob3dJRExFQ3JlZGl0cyhzZWxmKToKLSAgICAgICAgc2VsZi5kaXNwbGF5X2ZpbGVfdGV4dCgnQWJvdXQgLSBDcmVkaXRzJywgJ0NSRURJVFMudHh0JywgJ2lzby04ODU5LTEnKQorICAgICAgICBzZWxmLmRpc3BsYXlfZmlsZV90ZXh0KCdBYm91dCAtIENyZWRpdHMnLCAnQ1JFRElUUy50eHQnLCAndXRmLTgnKQogCiAgICAgZGVmIFNob3dJRExFQWJvdXQoc2VsZik6Ci0gICAgICAgIHNlbGYuZGlzcGxheV9maWxlX3RleHQoJ0Fib3V0IC0gUmVhZG1lJywgJ1JFQURNRS50eHQnKQorICAgICAgICBzZWxmLmRpc3BsYXlfZmlsZV90ZXh0KCdBYm91dCAtIFJlYWRtZScsICdSRUFETUUudHh0JywgJ2FzY2lpJykKIAogICAgIGRlZiBTaG93SURMRU5FV1Moc2VsZik6Ci0gICAgICAgIHNlbGYuZGlzcGxheV9maWxlX3RleHQoJ0Fib3V0IC0gTkVXUycsICdORVdTLnR4dCcpCisgICAgICAgIHNlbGYuZGlzcGxheV9maWxlX3RleHQoJ0Fib3V0IC0gTkVXUycsICdORVdTLnR4dCcsICd1dGYtOCcpCiAKICAgICBkZWYgZGlzcGxheV9wcmludGVyX3RleHQoc2VsZiwgdGl0bGUsIHByaW50ZXIpOgogICAgICAgICBwcmludGVyLl9QcmludGVyX19zZXR1cCgpCkBAIC0xNDIsNSArMTQ1LDcgQEAKICAgICAgICAgc2VsZi5kZXN0cm95KCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2hlbHBhYm91dCcsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQogICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgogICAgIHJ1bihBYm91dERpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weSBiL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weQppbmRleCA5YjE2NDU5Li41ZjViZDM2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnRGlhbG9nLnB5CkBAIC00ODMsNiArNDgzLDE3IEBACiAgICAgICAgIHNlbGYuYXV0b1NhdmUudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfYXV0b1NhdmUpCiAgICAgICAgIHNlbGYuZW5jb2RpbmcudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfZW5jb2RpbmcpCiAKKyAgICBkZWYgcmVtb3ZlX3Zhcl9jYWxsYmFja3Moc2VsZik6CisgICAgICAgICJSZW1vdmUgY2FsbGJhY2tzIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLiIKKyAgICAgICAgZm9yIHZhciBpbiAoCisgICAgICAgICAgICAgICAgc2VsZi5mb250U2l6ZSwgc2VsZi5mb250TmFtZSwgc2VsZi5mb250Qm9sZCwKKyAgICAgICAgICAgICAgICBzZWxmLnNwYWNlTnVtLCBzZWxmLmNvbG91ciwgc2VsZi5idWlsdGluVGhlbWUsCisgICAgICAgICAgICAgICAgc2VsZi5jdXN0b21UaGVtZSwgc2VsZi50aGVtZUlzQnVpbHRpbiwgc2VsZi5oaWdobGlnaHRUYXJnZXQsCisgICAgICAgICAgICAgICAgc2VsZi5rZXlCaW5kaW5nLCBzZWxmLmJ1aWx0aW5LZXlzLCBzZWxmLmN1c3RvbUtleXMsCisgICAgICAgICAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbiwgc2VsZi53aW5XaWR0aCwgc2VsZi53aW5IZWlnaHQsCisgICAgICAgICAgICAgICAgc2VsZi5zdGFydHVwRWRpdCwgc2VsZi5hdXRvU2F2ZSwgc2VsZi5lbmNvZGluZywpOgorICAgICAgICAgICAgdmFyLnRyYWNlX3ZkZWxldGUoJ3cnLCB2YXIudHJhY2VfdmluZm8oKVswXVsxXSkKKwogICAgIGRlZiBWYXJDaGFuZ2VkX2ZvbnQoc2VsZiwgKnBhcmFtcyk6CiAgICAgICAgICcnJ1doZW4gb25lIGZvbnQgYXR0cmlidXRlIGNoYW5nZXMsIHNhdmUgdGhlbSBhbGwsIGFzIHRoZXkgYXJlCiAgICAgICAgIG5vdCBpbmRlcGVuZGVudCBmcm9tIGVhY2ggb3RoZXIuIEluIHBhcnRpY3VsYXIsIHdoZW4gd2UgYXJlCkBAIC03NDAsNiArNzUxLDcgQEAKICAgICAgICAgaWYgbm90IHRrTWVzc2FnZUJveC5hc2t5ZXNubygKICAgICAgICAgICAgICAgICAnRGVsZXRlIEtleSBTZXQnLCAgZGVsbXNnICUga2V5U2V0TmFtZSwgcGFyZW50PXNlbGYpOgogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuRGVhY3RpdmF0ZUN1cnJlbnRDb25maWcoKQogICAgICAgICAjcmVtb3ZlIGtleSBzZXQgZnJvbSBjb25maWcKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1sna2V5cyddLnJlbW92ZV9zZWN0aW9uKGtleVNldE5hbWUpCiAgICAgICAgIGlmIGtleVNldE5hbWUgaW4gc2VsZi5jaGFuZ2VkSXRlbXNbJ2tleXMnXToKQEAgLTc1OCw3ICs3NzAsOCBAQAogICAgICAgICBzZWxmLmtleXNBcmVCdWlsdGluLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdLZXlzJywgJ2RlZmF1bHQnKSkKICAgICAgICAgc2VsZi5idWlsdGluS2V5cy5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsICduYW1lJykpCiAgICAgICAgICN1c2VyIGNhbid0IGJhY2sgb3V0IG9mIHRoZXNlIGNoYW5nZXMsIHRoZXkgbXVzdCBiZSBhcHBsaWVkIG5vdwotICAgICAgICBzZWxmLkFwcGx5KCkKKyAgICAgICAgc2VsZi5TYXZlQWxsQ2hhbmdlZENvbmZpZ3MoKQorICAgICAgICBzZWxmLkFjdGl2YXRlQ29uZmlnQ2hhbmdlcygpCiAgICAgICAgIHNlbGYuU2V0S2V5c1R5cGUoKQogCiAgICAgZGVmIERlbGV0ZUN1c3RvbVRoZW1lKHNlbGYpOgpAQCAtNzY3LDYgKzc4MCw3IEBACiAgICAgICAgIGlmIG5vdCB0a01lc3NhZ2VCb3guYXNreWVzbm8oCiAgICAgICAgICAgICAgICAgJ0RlbGV0ZSBUaGVtZScsICBkZWxtc2cgJSB0aGVtZU5hbWUsIHBhcmVudD1zZWxmKToKICAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLkRlYWN0aXZhdGVDdXJyZW50Q29uZmlnKCkKICAgICAgICAgI3JlbW92ZSB0aGVtZSBmcm9tIGNvbmZpZwogICAgICAgICBpZGxlQ29uZi51c2VyQ2ZnWydoaWdobGlnaHQnXS5yZW1vdmVfc2VjdGlvbih0aGVtZU5hbWUpCiAgICAgICAgIGlmIHRoZW1lTmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1snaGlnaGxpZ2h0J106CkBAIC03ODUsNyArNzk5LDggQEAKICAgICAgICAgc2VsZi50aGVtZUlzQnVpbHRpbi5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnVGhlbWUnLCAnZGVmYXVsdCcpKQogICAgICAgICBzZWxmLmJ1aWx0aW5UaGVtZS5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnVGhlbWUnLCAnbmFtZScpKQogICAgICAgICAjdXNlciBjYW4ndCBiYWNrIG91dCBvZiB0aGVzZSBjaGFuZ2VzLCB0aGV5IG11c3QgYmUgYXBwbGllZCBub3cKLSAgICAgICAgc2VsZi5BcHBseSgpCisgICAgICAgIHNlbGYuU2F2ZUFsbENoYW5nZWRDb25maWdzKCkKKyAgICAgICAgc2VsZi5BY3RpdmF0ZUNvbmZpZ0NoYW5nZXMoKQogICAgICAgICBzZWxmLlNldFRoZW1lVHlwZSgpCiAKICAgICBkZWYgR2V0Q29sb3VyKHNlbGYpOgpAQCAtMTE5Niw3ICsxMjExLDcgQEAKIAogICAgICAgICBBbGwgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIHRleHQsIGFuZCBpdCBpcyB1cCB0byB0aGUgdXNlciB0byBzdXBwbHkKICAgICAgICAgcmVhc29uYWJsZSB2YWx1ZXMuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGFyZSB0aGUgJ2VuYWJsZSonIG9wdGlvbnMsCi0gICAgICAgIHdoaWNoIGFyZSBib29sZWFuLCBhbmQgY2FuIGJlIHRvZ2dsZWQgd2l0aCBhbiBUcnVlL0ZhbHNlIGJ1dHRvbi4KKyAgICAgICAgd2hpY2ggYXJlIGJvb2xlYW4sIGFuZCBjYW4gYmUgdG9nZ2xlZCB3aXRoIGEgVHJ1ZS9GYWxzZSBidXR0b24uCiAgICAgICAgICIiIgogICAgICAgICBwYXJlbnQgPSBzZWxmLnBhcmVudAogICAgICAgICBmcmFtZSA9IHNlbGYudGFiUGFnZXMucGFnZXNbJ0V4dGVuc2lvbnMnXS5mcmFtZQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weSBiL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKaW5kZXggNTMxZWZiNC4uODk1NDQ4OCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQorKysgYi9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CkBAIC03MjAsNyArNzIwLDcgQEAKICAgICAgICAgICAgICAgICBhY3R1YWxGb250ID0gRm9udC5hY3R1YWwoZikKICAgICAgICAgICAgICAgICBmYW1pbHkgPSBhY3R1YWxGb250WydmYW1pbHknXQogICAgICAgICAgICAgICAgIHNpemUgPSBhY3R1YWxGb250WydzaXplJ10KLSAgICAgICAgICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgICAgICBpZiBzaXplIDw9IDA6CiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAxMCAgIyBpZiBmb250IGluIHBpeGVscywgaWdub3JlIGFjdHVhbCBzaXplCiAgICAgICAgICAgICAgICAgYm9sZCA9IGFjdHVhbEZvbnRbJ3dlaWdodCddPT0nYm9sZCcKICAgICAgICAgcmV0dXJuIChmYW1pbHksIHNpemUsICdib2xkJyBpZiBib2xkIGVsc2UgJ25vcm1hbCcpCkBAIC03NDAsMjEgKzc0MCwzMiBAQAogaWRsZUNvbmYgPSBJZGxlQ29uZigpCiAKICMgVE9ETyBSZXZpc2UgdGVzdCBvdXRwdXQsIHdyaXRlIGV4cGFuZGVkIHVuaXR0ZXN0Ci0jIyMgbW9kdWxlIHRlc3QKKyMKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZnJvbSB6bGliIGltcG9ydCBjcmMzMgorICAgIGxpbmUsIGNyYyA9IDAsIDAKKworICAgIGRlZiBzcHJpbnQob2JqKToKKyAgICAgICAgZ2xvYmFsIGxpbmUsIGNyYworICAgICAgICB0eHQgPSBzdHIob2JqKQorICAgICAgICBsaW5lICs9IDEKKyAgICAgICAgY3JjID0gY3JjMzIodHh0LmVuY29kZShlbmNvZGluZz0ndXRmLTgnKSwgY3JjKQorICAgICAgICBwcmludCh0eHQpCisgICAgICAgICNwcmludCgnKioqJywgbGluZSwgY3JjLCAnKioqJykgICMgdW5jb21tZW50IGZvciBkaWFnbm9zaXMKKwogICAgIGRlZiBkdW1wQ2ZnKGNmZyk6Ci0gICAgICAgIHByaW50KCdcbicsIGNmZywgJ1xuJykKLSAgICAgICAgZm9yIGtleSBpbiBjZmc6CisgICAgICAgIHByaW50KCdcbicsIGNmZywgJ1xuJykgICMgaGFzIHZhcmlhYmxlICcweG5ubm5ubm5uJyBhZGRyZXNzZXMKKyAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoY2ZnLmtleXMoKSk6CiAgICAgICAgICAgICBzZWN0aW9ucyA9IGNmZ1trZXldLnNlY3Rpb25zKCkKLSAgICAgICAgICAgIHByaW50KGtleSkKLSAgICAgICAgICAgIHByaW50KHNlY3Rpb25zKQorICAgICAgICAgICAgc3ByaW50KGtleSkKKyAgICAgICAgICAgIHNwcmludChzZWN0aW9ucykKICAgICAgICAgICAgIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zOgogICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBjZmdba2V5XS5vcHRpb25zKHNlY3Rpb24pCi0gICAgICAgICAgICAgICAgcHJpbnQoc2VjdGlvbikKLSAgICAgICAgICAgICAgICBwcmludChvcHRpb25zKQorICAgICAgICAgICAgICAgIHNwcmludChzZWN0aW9uKQorICAgICAgICAgICAgICAgIHNwcmludChvcHRpb25zKQogICAgICAgICAgICAgICAgIGZvciBvcHRpb24gaW4gb3B0aW9uczoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQob3B0aW9uLCAnPScsIGNmZ1trZXldLkdldChzZWN0aW9uLCBvcHRpb24pKQorICAgICAgICAgICAgICAgICAgICBzcHJpbnQob3B0aW9uICsgJyA9ICcgKyBjZmdba2V5XS5HZXQoc2VjdGlvbiwgb3B0aW9uKSkKKwogICAgIGR1bXBDZmcoaWRsZUNvbmYuZGVmYXVsdENmZykKICAgICBkdW1wQ2ZnKGlkbGVDb25mLnVzZXJDZmcpCi0gICAgcHJpbnQoaWRsZUNvbmYudXNlckNmZ1snbWFpbiddLkdldCgnVGhlbWUnLCAnbmFtZScpKQotICAgICNwcmludCBpZGxlQ29uZi51c2VyQ2ZnWydoaWdobGlnaHQnXS5HZXREZWZIaWdobGlnaHQoJ0ZvbycsJ25vcm1hbCcpCisgICAgcHJpbnQoJ1xubGluZXMgPSAnLCBsaW5lLCAnLCBjcmMgPSAnLCBjcmMsIHNlcD0nJykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0hlbHBTb3VyY2VFZGl0LnB5IGIvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKaW5kZXggMjQyYjA4ZC4uY2RlODExOCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKQEAgLTIzLDEwICsyMywxMCBAQAogICAgICAgICBzZWxmLnRpdGxlKHRpdGxlKQogICAgICAgICBzZWxmLnRyYW5zaWVudChwYXJlbnQpCiAgICAgICAgIHNlbGYuZ3JhYl9zZXQoKQotICAgICAgICBzZWxmLnByb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgc2VsZi5DYW5jZWwpCisgICAgICAgIHNlbGYucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLmNhbmNlbCkKICAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKICAgICAgICAgc2VsZi5yZXN1bHQgPSBOb25lCi0gICAgICAgIHNlbGYuQ3JlYXRlV2lkZ2V0cygpCisgICAgICAgIHNlbGYuY3JlYXRlX3dpZGdldHMoKQogICAgICAgICBzZWxmLm1lbnUuc2V0KG1lbnVJdGVtKQogICAgICAgICBzZWxmLnBhdGguc2V0KGZpbGVQYXRoKQogICAgICAgICBzZWxmLndpdGhkcmF3KCkgI2hpZGUgd2hpbGUgc2V0dGluZyBnZW9tZXRyeQpAQCAtNDEsMTAgKzQxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICgocGFyZW50LndpbmZvX2hlaWdodCgpLzIgLSBzZWxmLndpbmZvX3JlcWhlaWdodCgpLzIpCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfaHRlc3QgZWxzZSAxNTApKSkKICAgICAgICAgc2VsZi5kZWljb25pZnkoKSAjZ2VvbWV0cnkgc2V0LCB1bmhpZGUKLSAgICAgICAgc2VsZi5iaW5kKCc8UmV0dXJuPicsIHNlbGYuT2spCisgICAgICAgIHNlbGYuYmluZCgnPFJldHVybj4nLCBzZWxmLm9rKQogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIAotICAgIGRlZiBDcmVhdGVXaWRnZXRzKHNlbGYpOgorICAgIGRlZiBjcmVhdGVfd2lkZ2V0cyhzZWxmKToKICAgICAgICAgc2VsZi5tZW51ID0gU3RyaW5nVmFyKHNlbGYpCiAgICAgICAgIHNlbGYucGF0aCA9IFN0cmluZ1ZhcihzZWxmKQogICAgICAgICBzZWxmLmZvbnRTaXplID0gU3RyaW5nVmFyKHNlbGYpCkBAIC02NSwxOCArNjUsMTggQEAKICAgICAgICAgbGFiZWxQYXRoLnBhY2soYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT0zKQogICAgICAgICBzZWxmLmVudHJ5UGF0aC5wYWNrKGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9MykKICAgICAgICAgYnJvd3NlQnV0dG9uID0gQnV0dG9uKHNlbGYuZnJhbWVNYWluLCB0ZXh0PSdCcm93c2UnLCB3aWR0aD04LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLmJyb3dzZUZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuYnJvd3NlX2ZpbGUpCiAgICAgICAgIGJyb3dzZUJ1dHRvbi5wYWNrKHBhZHk9MykKICAgICAgICAgZnJhbWVCdXR0b25zID0gRnJhbWUoc2VsZikKICAgICAgICAgZnJhbWVCdXR0b25zLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKICAgICAgICAgc2VsZi5idXR0b25PayA9IEJ1dHRvbihmcmFtZUJ1dHRvbnMsIHRleHQ9J09LJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD04LCBkZWZhdWx0PUFDVElWRSwgIGNvbW1hbmQ9c2VsZi5PaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD04LCBkZWZhdWx0PUFDVElWRSwgIGNvbW1hbmQ9c2VsZi5vaykKICAgICAgICAgc2VsZi5idXR0b25Pay5ncmlkKHJvdz0wLCBjb2x1bW49MCwgcGFkeD01LHBhZHk9NSkKICAgICAgICAgc2VsZi5idXR0b25DYW5jZWwgPSBCdXR0b24oZnJhbWVCdXR0b25zLCB0ZXh0PSdDYW5jZWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD04LCBjb21tYW5kPXNlbGYuQ2FuY2VsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD04LCBjb21tYW5kPXNlbGYuY2FuY2VsKQogICAgICAgICBzZWxmLmJ1dHRvbkNhbmNlbC5ncmlkKHJvdz0wLCBjb2x1bW49MSwgcGFkeD01LCBwYWR5PTUpCiAKLSAgICBkZWYgYnJvd3NlRmlsZShzZWxmKToKKyAgICBkZWYgYnJvd3NlX2ZpbGUoc2VsZik6CiAgICAgICAgIGZpbGV0eXBlcyA9IFsKICAgICAgICAgICAgICgiSFRNTCBGaWxlcyIsICIqLmh0bSAqLmh0bWwiLCAiVEVYVCIpLAogICAgICAgICAgICAgKCJQREYgRmlsZXMiLCAiKi5wZGYiLCAiVEVYVCIpLApAQCAtOTksOSArOTksOSBAQAogICAgICAgICBpZiBmaWxlOgogICAgICAgICAgICAgc2VsZi5wYXRoLnNldChmaWxlKQogCi0gICAgZGVmIE1lbnVPayhzZWxmKToKKyAgICBkZWYgbWVudV9vayhzZWxmKToKICAgICAgICAgIlNpbXBsZSB2YWxpZGl0eSBjaGVjayBmb3IgYSBzZW5zaWJsZSBtZW51IGl0ZW0gbmFtZSIKLSAgICAgICAgbWVudU9rID0gVHJ1ZQorICAgICAgICBtZW51X29rID0gVHJ1ZQogICAgICAgICBtZW51ID0gc2VsZi5tZW51LmdldCgpCiAgICAgICAgIG1lbnUuc3RyaXAoKQogICAgICAgICBpZiBub3QgbWVudToKQEAgLTEwOSwxOSArMTA5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05vIG1lbnUgaXRlbSBzcGVjaWZpZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZikKICAgICAgICAgICAgIHNlbGYuZW50cnlNZW51LmZvY3VzX3NldCgpCi0gICAgICAgICAgICBtZW51T2sgPSBGYWxzZQorICAgICAgICAgICAgbWVudV9vayA9IEZhbHNlCiAgICAgICAgIGVsaWYgbGVuKG1lbnUpID4gMzA6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdNZW51IEl0ZW0gRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdNZW51IGl0ZW0gdG9vIGxvbmc6JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbkxpbWl0IDMwIGNoYXJhY3RlcnMuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYpCiAgICAgICAgICAgICBzZWxmLmVudHJ5TWVudS5mb2N1c19zZXQoKQotICAgICAgICAgICAgbWVudU9rID0gRmFsc2UKLSAgICAgICAgcmV0dXJuIG1lbnVPaworICAgICAgICAgICAgbWVudV9vayA9IEZhbHNlCisgICAgICAgIHJldHVybiBtZW51X29rCiAKLSAgICBkZWYgUGF0aE9rKHNlbGYpOgorICAgIGRlZiBwYXRoX29rKHNlbGYpOgogICAgICAgICAiU2ltcGxlIHZhbGlkaXR5IGNoZWNrIGZvciBtZW51IGZpbGUgcGF0aCIKLSAgICAgICAgcGF0aE9rID0gVHJ1ZQorICAgICAgICBwYXRoX29rID0gVHJ1ZQogICAgICAgICBwYXRoID0gc2VsZi5wYXRoLmdldCgpCiAgICAgICAgIHBhdGguc3RyaXAoKQogICAgICAgICBpZiBub3QgcGF0aDogI25vIHBhdGggc3BlY2lmaWVkCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nTm8gaGVscCBmaWxlIHBhdGggc3BlY2lmaWVkLicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmKQogICAgICAgICAgICAgc2VsZi5lbnRyeVBhdGguZm9jdXNfc2V0KCkKLSAgICAgICAgICAgIHBhdGhPayA9IEZhbHNlCisgICAgICAgICAgICBwYXRoX29rID0gRmFsc2UKICAgICAgICAgZWxpZiBwYXRoLnN0YXJ0c3dpdGgoKCd3d3cuJywgJ2h0dHAnKSk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CkBAIC0xNDAsMTYgKzE0MCwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nSGVscCBmaWxlIHBhdGggZG9lcyBub3QgZXhpc3QuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmKQogICAgICAgICAgICAgICAgIHNlbGYuZW50cnlQYXRoLmZvY3VzX3NldCgpCi0gICAgICAgICAgICAgICAgcGF0aE9rID0gRmFsc2UKLSAgICAgICAgcmV0dXJuIHBhdGhPaworICAgICAgICAgICAgICAgIHBhdGhfb2sgPSBGYWxzZQorICAgICAgICByZXR1cm4gcGF0aF9vawogCi0gICAgZGVmIE9rKHNlbGYsIGV2ZW50PU5vbmUpOgotICAgICAgICBpZiBzZWxmLk1lbnVPaygpIGFuZCBzZWxmLlBhdGhPaygpOgorICAgIGRlZiBvayhzZWxmLCBldmVudD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5tZW51X29rKCkgYW5kIHNlbGYucGF0aF9vaygpOgogICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSAoc2VsZi5tZW51LmdldCgpLnN0cmlwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGguZ2V0KCkuc3RyaXAoKSkKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5yZXN1bHRbMV0KLSAgICAgICAgICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoKCd3d3cnLCAnZmlsZTonLCAnaHR0cDonKSk6CisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCgnd3d3JywgJ2ZpbGU6JywgJ2h0dHA6JywgJ2h0dHBzOicpKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICMgTWFjIFNhZmFyaSBpbnNpc3RzIG9uIHVzaW5nIHRoZSBVUkkgZm9ybSBmb3IgbG9jYWwgZmlsZXMKQEAgLTE1NywxMCArMTU3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0WzFdID0gImZpbGU6Ly8iICsgcGF0aAogICAgICAgICAgICAgc2VsZi5kZXN0cm95KCkKIAotICAgIGRlZiBDYW5jZWwoc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgZGVmIGNhbmNlbChzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAgc2VsZi5yZXN1bHQgPSBOb25lCiAgICAgICAgIHNlbGYuZGVzdHJveSgpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9jb25maWdfaGVscCcsCisgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCisKICAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KICAgICBydW4oR2V0SGVscFNvdXJjZURpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2hlbHAuaHRtbCBiL0xpYi9pZGxlbGliL2hlbHAuaHRtbAppbmRleCAyMTg5ZmQ0Li42ZjczOWM0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9oZWxwLmh0bWwKKysrIGIvTGliL2lkbGVsaWIvaGVscC5odG1sCkBAIC02LDcgKzYsNyBAQAogICA8aGVhZD4KICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KIAotICAgIDx0aXRsZT4yNS41LiBJRExFICZtZGFzaDsgUHl0aG9uIDMuNC4zIGRvY3VtZW50YXRpb248L3RpdGxlPgorICAgIDx0aXRsZT4yNS41LiBJRExFICZtZGFzaDsgUHl0aG9uIDMuNS4xIGRvY3VtZW50YXRpb248L3RpdGxlPgogCiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9fc3RhdGljL3B5ZG9jdGhlbWUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL19zdGF0aWMvcHlnbWVudHMuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgLz4KQEAgLTE0LDcgKzE0LDcgQEAKICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICB2YXIgRE9DVU1FTlRBVElPTl9PUFRJT05TID0gewogICAgICAgICBVUkxfUk9PVDogICAgJy4uLycsCi0gICAgICAgIFZFUlNJT046ICAgICAnMy40LjMnLAorICAgICAgICBWRVJTSU9OOiAgICAgJzMuNS4xJywKICAgICAgICAgQ09MTEFQU0VfSU5ERVg6IGZhbHNlLAogICAgICAgICBGSUxFX1NVRkZJWDogJy5odG1sJywKICAgICAgICAgSEFTX1NPVVJDRTogIHRydWUKQEAgLTI1LDExICsyNSwxMSBAQAogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL19zdGF0aWMvZG9jdG9vbHMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL19zdGF0aWMvc2lkZWJhci5qcyI+PC9zY3JpcHQ+CiAgICAgPGxpbmsgcmVsPSJzZWFyY2giIHR5cGU9ImFwcGxpY2F0aW9uL29wZW5zZWFyY2hkZXNjcmlwdGlvbit4bWwiCi0gICAgICAgICAgdGl0bGU9IlNlYXJjaCB3aXRoaW4gUHl0aG9uIDMuNC4zIGRvY3VtZW50YXRpb24iCisgICAgICAgICAgdGl0bGU9IlNlYXJjaCB3aXRoaW4gUHl0aG9uIDMuNS4xIGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgaHJlZj0iLi4vX3N0YXRpYy9vcGVuc2VhcmNoLnhtbCIvPgogICAgIDxsaW5rIHJlbD0iYXV0aG9yIiB0aXRsZT0iQWJvdXQgdGhlc2UgZG9jdW1lbnRzIiBocmVmPSIuLi9hYm91dC5odG1sIiAvPgogICAgIDxsaW5rIHJlbD0iY29weXJpZ2h0IiB0aXRsZT0iQ29weXJpZ2h0IiBocmVmPSIuLi9jb3B5cmlnaHQuaHRtbCIgLz4KLSAgICA8bGluayByZWw9InRvcCIgdGl0bGU9IlB5dGhvbiAzLjQuMyBkb2N1bWVudGF0aW9uIiBocmVmPSIuLi9pbmRleC5odG1sIiAvPgorICAgIDxsaW5rIHJlbD0idG9wIiB0aXRsZT0iUHl0aG9uIDMuNS4xIGRvY3VtZW50YXRpb24iIGhyZWY9Ii4uL2NvbnRlbnRzLmh0bWwiIC8+CiAgICAgPGxpbmsgcmVsPSJ1cCIgdGl0bGU9IjI1LiBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2VzIHdpdGggVGsiIGhyZWY9InRrLmh0bWwiIC8+CiAgICAgPGxpbmsgcmVsPSJuZXh0IiB0aXRsZT0iMjUuNi4gT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzIiBocmVmPSJvdGhlcmd1aS5odG1sIiAvPgogICAgIDxsaW5rIHJlbD0icHJldiIgdGl0bGU9IjI1LjQuIHRraW50ZXIuc2Nyb2xsZWR0ZXh0IOKAlCBTY3JvbGxlZCBUZXh0IFdpZGdldCIgaHJlZj0idGtpbnRlci5zY3JvbGxlZHRleHQuaHRtbCIgLz4KQEAgLTQwLDggKzQwLDggQEAKIAogCiAgIDwvaGVhZD4KLSAgPGJvZHk+Ci0gICAgPGRpdiBjbGFzcz0icmVsYXRlZCI+CisgIDxib2R5IHJvbGU9ImRvY3VtZW50Ij4KKyAgICA8ZGl2IGNsYXNzPSJyZWxhdGVkIiByb2xlPSJuYXZpZ2F0aW9uIiBhcmlhLWxhYmVsPSJyZWxhdGVkIG5hdmlnYXRpb24iPgogICAgICAgPGgzPk5hdmlnYXRpb248L2gzPgogICAgICAgPHVsPgogICAgICAgICA8bGkgY2xhc3M9InJpZ2h0IiBzdHlsZT0ibWFyZ2luLXJpZ2h0OiAxMHB4Ij4KQEAgLTYwLDI1ICs2MCwyNyBAQAogICAgICAgICAgICAgICAgICBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLXRvcDogLTFweCIvPjwvbGk+CiAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnLyI+UHl0aG9uPC9hPiAmcmFxdW87PC9saT4KICAgICAgICAgPGxpPgotICAgICAgICAgIDxhIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjMuNC4zIERvY3VtZW50YXRpb248L2E+ICZyYXF1bzsKKyAgICAgICAgICA8YSBocmVmPSIuLi9pbmRleC5odG1sIj4zLjUuMSBEb2N1bWVudGF0aW9uPC9hPiAmcmFxdW87CiAgICAgICAgIDwvbGk+CiAKLSAgICAgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCIgPlRoZSBQeXRob24gU3RhbmRhcmQgTGlicmFyeTwvYT4gJnJhcXVvOzwvbGk+Ci0gICAgICAgICAgPGxpPjxhIGhyZWY9InRrLmh0bWwiIGFjY2Vzc2tleT0iVSI+MjUuIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUazwvYT4gJnJhcXVvOzwvbGk+CisgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaXRlbSBuYXYtaXRlbS0xIj48YSBocmVmPSJpbmRleC5odG1sIiA+VGhlIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5PC9hPiAmcmFxdW87PC9saT4KKyAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1pdGVtIG5hdi1pdGVtLTIiPjxhIGhyZWY9InRrLmh0bWwiIGFjY2Vzc2tleT0iVSI+MjUuIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUazwvYT4gJnJhcXVvOzwvbGk+CiAgICAgICA8L3VsPgogICAgIDwvZGl2PgogCiAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQiPgogICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnR3cmFwcGVyIj4KICAgICAgICAgPGRpdiBjbGFzcz0iYm9keXdyYXBwZXIiPgotICAgICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiIHJvbGU9Im1haW4iPgogCiAgIDxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJpZGxlIj4KIDxzcGFuIGlkPSJpZDEiPjwvc3Bhbj48aDE+MjUuNS4gSURMRTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjaWRsZSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gxPgotPHAgaWQ9ImluZGV4LTAiPklETEUgaXMgUHl0aG9uJiM4MjE3O3MgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcgRW52aXJvbm1lbnQuPC9wPgorPHA+PHN0cm9uZz5Tb3VyY2UgY29kZTo8L3N0cm9uZz4gPGEgY2xhc3M9InJlZmVyZW5jZSBleHRlcm5hbCIgaHJlZj0iaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24vZmlsZS8zLjUvTGliL2lkbGVsaWIvIj5MaWIvaWRsZWxpYi88L2E+PC9wPgorPGhyIGNsYXNzPSJkb2N1dGlscyIgaWQ9ImluZGV4LTAiIC8+Cis8cD5JRExFIGlzIFB5dGhvbiYjODIxNztzIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgYW5kIExlYXJuaW5nIEVudmlyb25tZW50LjwvcD4KIDxwPklETEUgaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6PC9wPgogPHVsIGNsYXNzPSJzaW1wbGUiPgotPGxpPmNvZGVkIGluIDEwMCUgcHVyZSBQeXRob24sIHVzaW5nIHRoZSA8YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSJ0a2ludGVyLmh0bWwjbW9kdWxlLXRraW50ZXIiIHRpdGxlPSJ0a2ludGVyOiBJbnRlcmZhY2UgdG8gVGNsL1RrIGZvciBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzIj48dHQgY2xhc3M9InhyZWYgcHkgcHktbW9kIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnRraW50ZXI8L3NwYW4+PC90dD48L2E+IEdVSSB0b29sa2l0PC9saT4KKzxsaT5jb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgPGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0idGtpbnRlci5odG1sI21vZHVsZS10a2ludGVyIiB0aXRsZT0idGtpbnRlcjogSW50ZXJmYWNlIHRvIFRjbC9UayBmb3IgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcyI+PGNvZGUgY2xhc3M9InhyZWYgcHkgcHktbW9kIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnRraW50ZXI8L3NwYW4+PC9jb2RlPjwvYT4gR1VJIHRvb2xraXQ8L2xpPgogPGxpPmNyb3NzLXBsYXRmb3JtOiB3b3JrcyBtb3N0bHkgdGhlIHNhbWUgb24gV2luZG93cywgVW5peCwgYW5kIE1hYyBPUyBYPC9saT4KIDxsaT5QeXRob24gc2hlbGwgd2luZG93IChpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikgd2l0aCBjb2xvcml6aW5nCiBvZiBjb2RlIGlucHV0LCBvdXRwdXQsIGFuZCBlcnJvciBtZXNzYWdlczwvbGk+CkBAIC0xNjMsNyArMTY1LDcgQEAKIDxkdD5GaW5kIFNlbGVjdGlvbjwvZHQ+CiA8ZGQ+U2VhcmNoIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHN0cmluZywgaWYgdGhlcmUgaXMgb25lLjwvZGQ+CiA8ZHQ+RmluZCBpbiBGaWxlcy4uLjwvZHQ+Ci08ZGQ+T3BlbiBhIGZpbGUgc2VhcmNoIGRpYWxvZy4gIFB1dCByZXN1bHRzIGluIGFuIG5ldyBvdXRwdXQgd2luZG93LjwvZGQ+Cis8ZGQ+T3BlbiBhIGZpbGUgc2VhcmNoIGRpYWxvZy4gIFB1dCByZXN1bHRzIGluIGEgbmV3IG91dHB1dCB3aW5kb3cuPC9kZD4KIDxkdD5SZXBsYWNlLi4uPC9kdD4KIDxkZD5PcGVuIGEgc2VhcmNoLWFuZC1yZXBsYWNlIGRpYWxvZy48L2RkPgogPGR0PkdvIHRvIExpbmU8L2R0PgpAQCAtMjI0LDEwICsyMjYsMTAgQEAKIDxkdD5SdW4gTW9kdWxlPC9kdD4KIDxkZD5EbyBDaGVjayBNb2R1bGUgKGFib3ZlKS4gIElmIG5vIGVycm9yLCByZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUKIGVudmlyb25tZW50LCB0aGVuIGV4ZWN1dGUgdGhlIG1vZHVsZS4gIE91dHB1dCBpcyBkaXNwbGF5ZWQgaW4gdGhlIFNoZWxsCi13aW5kb3cuICBOb3RlIHRoYXQgb3V0cHV0IHJlcXVpcmVzIHVzZSBvZiA8dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnByaW50PC9zcGFuPjwvdHQ+IG9yIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+d3JpdGU8L3NwYW4+PC90dD4uCit3aW5kb3cuICBOb3RlIHRoYXQgb3V0cHV0IHJlcXVpcmVzIHVzZSBvZiA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+cHJpbnQ8L3NwYW4+PC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+d3JpdGU8L3NwYW4+PC9jb2RlPi4KIFdoZW4gZXhlY3V0aW9uIGlzIGNvbXBsZXRlLCB0aGUgU2hlbGwgcmV0YWlucyBmb2N1cyBhbmQgZGlzcGxheXMgYSBwcm9tcHQuCiBBdCB0aGlzIHBvaW50LCBvbmUgbWF5IGludGVyYWN0aXZlbHkgZXhwbG9yZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGlvbi4KLVRoaXMgaXMgc2ltaWxhciB0byBleGVjdXRpbmcgYSBmaWxlIHdpdGggPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5weXRob248L3NwYW4+IDxzcGFuIGNsYXNzPSJwcmUiPi1pPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj5maWxlPC9zcGFuPjwvdHQ+IGF0IGEgY29tbWFuZAorVGhpcyBpcyBzaW1pbGFyIHRvIGV4ZWN1dGluZyBhIGZpbGUgd2l0aCA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+cHl0aG9uPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj4taTwvc3Bhbj4gPHNwYW4gY2xhc3M9InByZSI+ZmlsZTwvc3Bhbj48L2NvZGU+IGF0IGEgY29tbWFuZAogbGluZS48L2RkPgogPC9kbD4KIDwvZGl2PgpAQCAtMzM5LDQ3ICszNDEsNDcgQEAKIDwvZGl2PgogPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImVkaXRpbmctYW5kLW5hdmlnYXRpb24iPgogPGgyPjI1LjUuMi4gRWRpdGluZyBhbmQgbmF2aWdhdGlvbjxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZWRpdGluZy1hbmQtbmF2aWdhdGlvbiIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gyPgotPHA+SW4gdGhpcyBzZWN0aW9uLCAmIzgyMTY7QyYjODIxNzsgcmVmZXJzIHRvIHRoZSA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5Db250cm9sPC9zcGFuPjwvdHQ+IGtleSBvbiBXaW5kb3dzIGFuZCBVbml4IGFuZAotdGhlIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkNvbW1hbmQ8L3NwYW4+PC90dD4ga2V5IG9uIE1hYyBPU1guPC9wPgorPHA+SW4gdGhpcyBzZWN0aW9uLCAmIzgyMTY7QyYjODIxNzsgcmVmZXJzIHRvIHRoZSA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkNvbnRyb2w8L3NwYW4+PC9jb2RlPiBrZXkgb24gV2luZG93cyBhbmQgVW5peCBhbmQKK3RoZSA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkNvbW1hbmQ8L3NwYW4+PC9jb2RlPiBrZXkgb24gTWFjIE9TWC48L3A+CiA8dWw+Ci08bGk+PHAgY2xhc3M9ImZpcnN0Ij48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5CYWNrc3BhY2U8L3NwYW4+PC90dD4gZGVsZXRlcyB0byB0aGUgbGVmdDsgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+RGVsPC9zcGFuPjwvdHQ+IGRlbGV0ZXMgdG8gdGhlIHJpZ2h0PC9wPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5CYWNrc3BhY2U8L3NwYW4+PC9jb2RlPiBkZWxldGVzIHRvIHRoZSBsZWZ0OyA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkRlbDwvc3Bhbj48L2NvZGU+IGRlbGV0ZXMgdG8gdGhlIHJpZ2h0PC9wPgogPC9saT4KLTxsaT48cCBjbGFzcz0iZmlyc3QiPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtQmFja3NwYWNlPC9zcGFuPjwvdHQ+IGRlbGV0ZSB3b3JkIGxlZnQ7IDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtRGVsPC9zcGFuPjwvdHQ+IGRlbGV0ZSB3b3JkIHRvIHRoZSByaWdodDwvcD4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1CYWNrc3BhY2U8L3NwYW4+PC9jb2RlPiBkZWxldGUgd29yZCBsZWZ0OyA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtRGVsPC9zcGFuPjwvY29kZT4gZGVsZXRlIHdvcmQgdG8gdGhlIHJpZ2h0PC9wPgogPC9saT4KLTxsaT48cCBjbGFzcz0iZmlyc3QiPkFycm93IGtleXMgYW5kIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPlBhZ2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJwcmUiPlVwPC9zcGFuPjwvdHQ+Lzx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPlBhZ2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJwcmUiPkRvd248L3NwYW4+PC90dD4gdG8gbW92ZSBhcm91bmQ8L3A+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij5BcnJvdyBrZXlzIGFuZCA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPlBhZ2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJwcmUiPlVwPC9zcGFuPjwvY29kZT4vPGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5QYWdlPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj5Eb3duPC9zcGFuPjwvY29kZT4gdG8gbW92ZSBhcm91bmQ8L3A+CiA8L2xpPgotPGxpPjxwIGNsYXNzPSJmaXJzdCI+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1MZWZ0QXJyb3c8L3NwYW4+PC90dD4gYW5kIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtUmlnaHRBcnJvdzwvc3Bhbj48L3R0PiBtb3ZlcyBieSB3b3JkczwvcD4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1MZWZ0QXJyb3c8L3NwYW4+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLVJpZ2h0QXJyb3c8L3NwYW4+PC9jb2RlPiBtb3ZlcyBieSB3b3JkczwvcD4KIDwvbGk+Ci08bGk+PHAgY2xhc3M9ImZpcnN0Ij48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5Ib21lPC9zcGFuPjwvdHQ+Lzx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkVuZDwvc3Bhbj48L3R0PiBnbyB0byBiZWdpbi9lbmQgb2YgbGluZTwvcD4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SG9tZTwvc3Bhbj48L2NvZGU+Lzxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+RW5kPC9zcGFuPjwvY29kZT4gZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmU8L3A+CiA8L2xpPgotPGxpPjxwIGNsYXNzPSJmaXJzdCI+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1Ib21lPC9zcGFuPjwvdHQ+Lzx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtRW5kPC9zcGFuPjwvdHQ+IGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlPC9wPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLUhvbWU8L3NwYW4+PC9jb2RlPi88Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtRW5kPC9zcGFuPjwvY29kZT4gZ28gdG8gYmVnaW4vZW5kIG9mIGZpbGU8L3A+CiA8L2xpPgogPGxpPjxwIGNsYXNzPSJmaXJzdCI+U29tZSB1c2VmdWwgRW1hY3MgYmluZGluZ3MgYXJlIGluaGVyaXRlZCBmcm9tIFRjbC9Uazo8L3A+CiA8YmxvY2txdW90ZT4KIDxkaXY+PHVsIGNsYXNzPSJzaW1wbGUiPgotPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtYTwvc3Bhbj48L3R0PiBiZWdpbm5pbmcgb2YgbGluZTwvbGk+Ci08bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1lPC9zcGFuPjwvdHQ+IGVuZCBvZiBsaW5lPC9saT4KLTxsaT48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWs8L3NwYW4+PC90dD4ga2lsbCBsaW5lIChidXQgZG9lc24mIzgyMTc7dCBwdXQgaXQgaW4gY2xpcGJvYXJkKTwvbGk+Ci08bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1sPC9zcGFuPjwvdHQ+IGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQ8L2xpPgotPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtYjwvc3Bhbj48L3R0PiBnbyBiYWNrd2FyZHMgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KKzxsaT48Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtYTwvc3Bhbj48L2NvZGU+IGJlZ2lubmluZyBvZiBsaW5lPC9saT4KKzxsaT48Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZTwvc3Bhbj48L2NvZGU+IGVuZCBvZiBsaW5lPC9saT4KKzxsaT48Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtazwvc3Bhbj48L2NvZGU+IGtpbGwgbGluZSAoYnV0IGRvZXNuJiM4MjE3O3QgcHV0IGl0IGluIGNsaXBib2FyZCk8L2xpPgorPGxpPjxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1sPC9zcGFuPjwvY29kZT4gY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludDwvbGk+Cis8bGk+PGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWI8L3NwYW4+PC9jb2RlPiBnbyBiYWNrd2FyZHMgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvciB0aGlzKTwvbGk+Ci08bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1mPC9zcGFuPjwvdHQ+IGdvIGZvcndhcmQgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KKzxsaT48Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZjwvc3Bhbj48L2NvZGU+IGdvIGZvcndhcmQgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvciB0aGlzKTwvbGk+Ci08bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1wPC9zcGFuPjwvdHQ+IGdvIHVwIG9uZSBsaW5lICh1c3VhbGx5IHlvdSBjYW4gYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yCis8bGk+PGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLXA8L3NwYW4+PC9jb2RlPiBnbyB1cCBvbmUgbGluZSAodXN1YWxseSB5b3UgY2FuIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvcgogdGhpcyk8L2xpPgotPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZDwvc3Bhbj48L3R0PiBkZWxldGUgbmV4dCBjaGFyYWN0ZXI8L2xpPgorPGxpPjxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1kPC9zcGFuPjwvY29kZT4gZGVsZXRlIG5leHQgY2hhcmFjdGVyPC9saT4KIDwvdWw+CiA8L2Rpdj48L2Jsb2NrcXVvdGU+CiA8L2xpPgogPC91bD4KLTxwPlN0YW5kYXJkIGtleWJpbmRpbmdzIChsaWtlIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtYzwvc3Bhbj48L3R0PiB0byBjb3B5IGFuZCA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLXY8L3NwYW4+PC90dD4gdG8gcGFzdGUpCis8cD5TdGFuZGFyZCBrZXliaW5kaW5ncyAobGlrZSA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtYzwvc3Bhbj48L2NvZGU+IHRvIGNvcHkgYW5kIDxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy12PC9zcGFuPjwvY29kZT4gdG8gcGFzdGUpCiBtYXkgd29yay4gIEtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nLjwvcD4KIDxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJhdXRvbWF0aWMtaW5kZW50YXRpb24iPgogPGgzPjI1LjUuMi4xLiBBdXRvbWF0aWMgaW5kZW50YXRpb248YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI2F1dG9tYXRpYy1pbmRlbnRhdGlvbiIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgogPHA+QWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcyAoaW4gdGhlCiBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcyAoYnJlYWssIHJldHVybiBldGMuKQotdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcgaW5kZW50YXRpb24sIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkJhY2tzcGFjZTwvc3Bhbj48L3R0PiBkZWxldGVzIHVwCi10byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+VGFiPC9zcGFuPjwvdHQ+IGluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uCit0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZyBpbmRlbnRhdGlvbiwgPGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5CYWNrc3BhY2U8L3NwYW4+PC9jb2RlPiBkZWxldGVzIHVwCit0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gPGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5UYWI8L3NwYW4+PC9jb2RlPiBpbnNlcnRzIHNwYWNlcyAoaW4gdGhlIFB5dGhvbgogU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbiBJbmRlbnQgd2lkdGguIEN1cnJlbnRseSB0YWJzCiBhcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUgdG8gVGNsL1RrIGxpbWl0YXRpb25zLjwvcD4KIDxwPlNlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdCBtZW51LjwvcD4KQEAgLTM5NCwyNSArMzk2LDI1IEBACiBvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlciBjaGFyYWN0ZXJzKSBhIHRhYiBpcyB0eXBlZAogdGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZSBjb250aW51YXRpb24gaXMgZm91bmQuPC9wPgogPHA+SWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQotPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+VGFiPC9zcGFuPjwvdHQ+IHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy48L3A+Cis8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPlRhYjwvc3Bhbj48L2NvZGU+IHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy48L3A+CiA8cD4mIzgyMTY7U2hvdyBDb21wbGV0aW9ucyYjODIxNzsgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LCBieSBkZWZhdWx0IHRoZQotPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1zcGFjZTwvc3Bhbj48L3R0PiB3aWxsIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3cuIEluIGFuIGVtcHR5Cis8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtc3BhY2U8L3NwYW4+PC9jb2RlPiB3aWxsIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3cuIEluIGFuIGVtcHR5CiBzdHJpbmcsIHRoaXMgd2lsbCBjb250YWluIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIE9uIGEKIGJsYW5rIGxpbmUsIGl0IHdpbGwgY29udGFpbiB0aGUgYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kCiBjbGFzc2VzIGluIHRoZSBjdXJyZW50IG5hbWUgc3BhY2VzLCBwbHVzIGFueSBtb2R1bGVzIGltcG9ydGVkLiBJZiBzb21lCiBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLjwvcD4KIDxwPklmIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKLWVudHJ5IG1vc3QgY2xvc2VseSBtYXRjaGluZyB0aG9zZSBjaGFyYWN0ZXJzLiAgRW50ZXJpbmcgYSA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj50YWI8L3NwYW4+PC90dD4gd2lsbAorZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuICBFbnRlcmluZyBhIDxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dGFiPC9zcGFuPjwvY29kZT4gd2lsbAogY2F1c2UgdGhlIGxvbmdlc3Qgbm9uLWFtYmlndW91cyBtYXRjaCB0byBiZSBlbnRlcmVkIGluIHRoZSBFZGl0b3Igd2luZG93IG9yCi1TaGVsbC4gIFR3byA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj50YWI8L3NwYW4+PC90dD4gaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKK1NoZWxsLiAgVHdvIDxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dGFiPC9zcGFuPjwvY29kZT4gaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKIHdpbGwgcmV0dXJuIG9yIGEgZG91YmxlIGNsaWNrLiAgQ3Vyc29yIGtleXMsIFBhZ2UgVXAvRG93biwgbW91c2Ugc2VsZWN0aW9uLAogYW5kIHRoZSBzY3JvbGwgd2hlZWwgYWxsIG9wZXJhdGUgb24gdGhlIEFDVy48L3A+CiA8cD4mIzgyMjA7SGlkZGVuJiM4MjIxOyBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KIG5hbWUgYWZ0ZXIgYSAmIzgyMTY7LiYjODIxNzssIGUuZy4gJiM4MjE2O18mIzgyMTc7LiBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCi08dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPl9fYWxsX188L3NwYW4+PC90dD4gc2V0LCBvciB0byBjbGFzcy1wcml2YXRlIGF0dHJpYnV0ZXMuPC9wPgorPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPl9fYWxsX188L3NwYW4+PC9jb2RlPiBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy48L3A+CiA8cD5Db21wbGV0aW9ucyBhbmQgdGhlICYjODIxNjtFeHBhbmQgV29yZCYjODIxNzsgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nITwvcD4KIDxwPkNvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gTmFtZXMgaW4KLWFuIEVkaXRvciB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5fX21haW5fXzwvc3Bhbj48L3R0PiBhbmQgPGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0ic3lzLmh0bWwjc3lzLm1vZHVsZXMiIHRpdGxlPSJzeXMubW9kdWxlcyI+PHR0IGNsYXNzPSJ4cmVmIHB5IHB5LWRhdGEgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+c3lzLm1vZHVsZXM8L3NwYW4+PC90dD48L2E+IHdpbGwKK2FuIEVkaXRvciB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPl9fbWFpbl9fPC9zcGFuPjwvY29kZT4gYW5kIDxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9InN5cy5odG1sI3N5cy5tb2R1bGVzIiB0aXRsZT0ic3lzLm1vZHVsZXMiPjxjb2RlIGNsYXNzPSJ4cmVmIHB5IHB5LWRhdGEgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+c3lzLm1vZHVsZXM8L3NwYW4+PC9jb2RlPjwvYT4gd2lsbAogbm90IGJlIGZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMgc2l0dWF0aW9uLgogTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluIHN5cy5tb2R1bGVzLCBzbwogbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLjwvcD4KQEAgLTQyMSwxMCArNDIzLDEwIEBACiA8L2Rpdj4KIDxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJjYWxsdGlwcyI+CiA8aDM+MjUuNS4yLjMuIENhbGx0aXBzPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNjYWxsdGlwcyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgotPHA+QSBjYWxsdGlwIGlzIHNob3duIHdoZW4gb25lIHR5cGVzIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPig8L3NwYW4+PC90dD4gYWZ0ZXIgdGhlIG5hbWUgb2YgYW4gPGVtPmFjY2Nlc3NpYmxlPC9lbT4KKzxwPkEgY2FsbHRpcCBpcyBzaG93biB3aGVuIG9uZSB0eXBlcyA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPig8L3NwYW4+PC9jb2RlPiBhZnRlciB0aGUgbmFtZSBvZiBhbiA8ZW0+YWNjY2Vzc2libGU8L2VtPgogZnVuY3Rpb24uICBBIG5hbWUgZXhwcmVzc2lvbiBtYXkgaW5jbHVkZSBkb3RzIGFuZCBzdWJzY3JpcHRzLiAgQSBjYWxsdGlwCiByZW1haW5zIHVudGlsIGl0IGlzIGNsaWNrZWQsIHRoZSBjdXJzb3IgaXMgbW92ZWQgb3V0IG9mIHRoZSBhcmd1bWVudCBhcmVhLAotb3IgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+KTwvc3Bhbj48L3R0PiBpcyB0eXBlZC4gIFdoZW4gdGhlIGN1cnNvciBpcyBpbiB0aGUgYXJndW1lbnQgcGFydCBvZiBhIGRlZmluaXRpb24sCitvciA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPik8L3NwYW4+PC9jb2RlPiBpcyB0eXBlZC4gIFdoZW4gdGhlIGN1cnNvciBpcyBpbiB0aGUgYXJndW1lbnQgcGFydCBvZiBhIGRlZmluaXRpb24sCiB0aGUgbWVudSBvciBzaG9ydGN1dCBkaXNwbGF5IGEgY2FsbHRpcC48L3A+CiA8cD5BIGNhbGx0aXAgY29uc2lzdHMgb2YgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBhbmQgdGhlIGZpcnN0IGxpbmUgb2YgdGhlCiBkb2NzdHJpbmcuICBGb3IgYnVpbHRpbnMgd2l0aG91dCBhbiBhY2Nlc3NpYmxlIHNpZ25hdHVyZSwgdGhlIGNhbGx0aXAKQEAgLTQzMywxMSArNDM1LDExIEBACiA8cD5UaGUgc2V0IG9mIDxlbT5hY2Nlc3NpYmxlPC9lbT4gZnVuY3Rpb25zIGRlcGVuZHMgb24gd2hhdCBtb2R1bGVzIGhhdmUgYmVlbiBpbXBvcnRlZAogaW50byB0aGUgdXNlciBwcm9jZXNzLCBpbmNsdWRpbmcgdGhvc2UgaW1wb3J0ZWQgYnkgSWRsZSBpdHNlbGYsCiBhbmQgd2hhdCBkZWZpbml0aW9ucyBoYXZlIGJlZW4gcnVuLCBhbGwgc2luY2UgdGhlIGxhc3QgcmVzdGFydC48L3A+Ci08cD5Gb3IgZXhhbXBsZSwgcmVzdGFydCB0aGUgU2hlbGwgYW5kIGVudGVyIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+aXRlcnRvb2xzLmNvdW50KDwvc3Bhbj48L3R0Pi4gIEEgY2FsbHRpcAorPHA+Rm9yIGV4YW1wbGUsIHJlc3RhcnQgdGhlIFNoZWxsIGFuZCBlbnRlciA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+aXRlcnRvb2xzLmNvdW50KDwvc3Bhbj48L2NvZGU+LiAgQSBjYWxsdGlwCiBhcHBlYXJzIGJlY2F1c2UgSWRsZSBpbXBvcnRzIGl0ZXJ0b29scyBpbnRvIHRoZSB1c2VyIHByb2Nlc3MgZm9yIGl0cyBvd24gdXNlLgotKFRoaXMgY291bGQgY2hhbmdlLikgIEVudGVyIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dHVydGxlLndyaXRlKDwvc3Bhbj48L3R0PiBhbmQgbm90aGluZyBhcHBlYXJzLiAgSWRsZSBkb2VzCisoVGhpcyBjb3VsZCBjaGFuZ2UuKSAgRW50ZXIgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnR1cnRsZS53cml0ZSg8L3NwYW4+PC9jb2RlPiBhbmQgbm90aGluZyBhcHBlYXJzLiAgSWRsZSBkb2VzCiBub3QgaW1wb3J0IHR1cnRsZS4gIFRoZSBtZW51IG9yIHNob3J0Y3V0IGRvIG5vdGhpbmcgZWl0aGVyLiAgRW50ZXIKLTx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+aW1wb3J0PC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj50dXJ0bGU8L3NwYW4+PC90dD4gYW5kIHRoZW4gPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj50dXJ0bGUud3JpdGUoPC9zcGFuPjwvdHQ+IHdpbGwgd29yay48L3A+Cis8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+aW1wb3J0PC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj50dXJ0bGU8L3NwYW4+PC9jb2RlPiBhbmQgdGhlbiA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dHVydGxlLndyaXRlKDwvc3Bhbj48L2NvZGU+IHdpbGwgd29yay48L3A+CiA8cD5JbiBhbiBlZGl0b3IsIGltcG9ydCBzdGF0ZW1lbnRzIGhhdmUgbm8gZWZmZWN0IHVudGlsIG9uZSBydW5zIHRoZSBmaWxlLiAgT25lCiBtaWdodCB3YW50IHRvIHJ1biBhIGZpbGUgYWZ0ZXIgd3JpdGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudHMgYXQgdGhlIHRvcCwKIG9yIGltbWVkaWF0ZWx5IHJ1biBhbiBleGlzdGluZyBmaWxlIGJlZm9yZSBlZGl0aW5nLjwvcD4KQEAgLTQ0NSwxNyArNDQ3LDE3IEBACiA8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0icHl0aG9uLXNoZWxsLXdpbmRvdyI+CiA8aDM+MjUuNS4yLjQuIFB5dGhvbiBTaGVsbCB3aW5kb3c8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI3B5dGhvbi1zaGVsbC13aW5kb3ciIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KIDx1bD4KLTxsaT48cCBjbGFzcz0iZmlyc3QiPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtYzwvc3Bhbj48L3R0PiBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kPC9wPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWM8L3NwYW4+PC9jb2RlPiBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kPC9wPgogPC9saT4KLTxsaT48cCBjbGFzcz0iZmlyc3QiPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZDwvc3Bhbj48L3R0PiBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCBhIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jmd0OyZndDsmZ3Q7PC9zcGFuPjwvdHQ+IHByb21wdDwvcD4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1kPC9zcGFuPjwvY29kZT4gc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jmd0OyZndDsmZ3Q7PC9zcGFuPjwvY29kZT4gcHJvbXB0PC9wPgogPC9saT4KLTxsaT48cCBjbGFzcz0iZmlyc3QiPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkFsdC0vPC9zcGFuPjwvdHQ+IChFeHBhbmQgd29yZCkgaXMgYWxzbyB1c2VmdWwgdG8gcmVkdWNlIHR5cGluZzwvcD4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjxjb2RlIGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+QWx0LS88L3NwYW4+PC9jb2RlPiAoRXhwYW5kIHdvcmQpIGlzIGFsc28gdXNlZnVsIHRvIHJlZHVjZSB0eXBpbmc8L3A+CiA8cD5Db21tYW5kIGhpc3Rvcnk8L3A+CiA8dWwgY2xhc3M9InNpbXBsZSI+Ci08bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+QWx0LXA8L3NwYW4+PC90dD4gcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4gT24KLU9TIFggdXNlIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtcDwvc3Bhbj48L3R0Pi48L2xpPgotPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkFsdC1uPC9zcGFuPjwvdHQ+IHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLW48L3NwYW4+PC90dD4uPC9saT4KLTxsaT48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5SZXR1cm48L3NwYW4+PC90dD4gd2hpbGUgb24gYW55IHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZDwvbGk+Cis8bGk+PGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5BbHQtcDwvc3Bhbj48L2NvZGU+IHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuIE9uCitPUyBYIHVzZSA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtcDwvc3Bhbj48L2NvZGU+LjwvbGk+Cis8bGk+PGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5BbHQtbjwvc3Bhbj48L2NvZGU+IHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSA8Y29kZSBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtbjwvc3Bhbj48L2NvZGU+LjwvbGk+Cis8bGk+PGNvZGUgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5SZXR1cm48L3NwYW4+PC9jb2RlPiB3aGlsZSBvbiBhbnkgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kPC9saT4KIDwvdWw+CiA8L2xpPgogPC91bD4KQEAgLTQ2NSw4ICs0NjcsOCBAQAogPHA+SWRsZSBkZWZhdWx0cyB0byBibGFjayBvbiB3aGl0ZSB0ZXh0LCBidXQgY29sb3JzIHRleHQgd2l0aCBzcGVjaWFsIG1lYW5pbmdzLgogRm9yIHRoZSBzaGVsbCwgdGhlc2UgYXJlIHNoZWxsIG91dHB1dCwgc2hlbGwgZXJyb3IsIHVzZXIgb3V0cHV0LCBhbmQKIHVzZXIgZXJyb3IuICBGb3IgUHl0aG9uIGNvZGUsIGF0IHRoZSBzaGVsbCBwcm9tcHQgb3IgaW4gYW4gZWRpdG9yLCB0aGVzZSBhcmUKLWtleXdvcmRzLCBidWlsdGluIGNsYXNzIGFuZCBmdW5jdGlvbiBuYW1lcywgbmFtZXMgZm9sbG93aW5nIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Y2xhc3M8L3NwYW4+PC90dD4gYW5kCi08dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPmRlZjwvc3Bhbj48L3R0Piwgc3RyaW5ncywgYW5kIGNvbW1lbnRzLiBGb3IgYW55IHRleHQgd2luZG93LCB0aGVzZSBhcmUgdGhlIGN1cnNvciAod2hlbgora2V5d29yZHMsIGJ1aWx0aW4gY2xhc3MgYW5kIGZ1bmN0aW9uIG5hbWVzLCBuYW1lcyBmb2xsb3dpbmcgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPmNsYXNzPC9zcGFuPjwvY29kZT4gYW5kCis8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+ZGVmPC9zcGFuPjwvY29kZT4sIHN0cmluZ3MsIGFuZCBjb21tZW50cy4gRm9yIGFueSB0ZXh0IHdpbmRvdywgdGhlc2UgYXJlIHRoZSBjdXJzb3IgKHdoZW4KIHByZXNlbnQpLCBmb3VuZCB0ZXh0ICh3aGVuIHBvc3NpYmxlKSwgYW5kIHNlbGVjdGVkIHRleHQuPC9wPgogPHA+VGV4dCBjb2xvcmluZyBpcyBkb25lIGluIHRoZSBiYWNrZ3JvdW5kLCBzbyB1bmNvbG9yaXplZCB0ZXh0IGlzIG9jY2FzaW9uYWxseQogdmlzaWJsZS4gIFRvIGNoYW5nZSB0aGUgY29sb3Igc2NoZW1lLCB1c2UgdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZwpAQCAtNDc2LDE1ICs0NzgsMTUgQEAKIDwvZGl2PgogPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InN0YXJ0dXAtYW5kLWNvZGUtZXhlY3V0aW9uIj4KIDxoMj4yNS41LjMuIFN0YXJ0dXAgYW5kIGNvZGUgZXhlY3V0aW9uPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNzdGFydHVwLWFuZC1jb2RlLWV4ZWN1dGlvbiIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gyPgotPHA+VXBvbiBzdGFydHVwIHdpdGggdGhlIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LXM8L3NwYW4+PC90dD4gb3B0aW9uLCBJRExFIHdpbGwgZXhlY3V0ZSB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5Ci10aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIDxzcGFuIGNsYXNzPSJ0YXJnZXQiIGlkPSJpbmRleC01Ij48L3NwYW4+PHR0IGNsYXNzPSJ4cmVmIHN0ZCBzdGQtZW52dmFyIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPklETEVTVEFSVFVQPC9zcGFuPjwvdHQ+IG9yIDxzcGFuIGNsYXNzPSJ0YXJnZXQiIGlkPSJpbmRleC02Ij48L3NwYW4+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iLi4vdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05TVEFSVFVQIj48dHQgY2xhc3M9InhyZWYgc3RkIHN0ZC1lbnZ2YXIgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+UFlUSE9OU1RBUlRVUDwvc3Bhbj48L3R0PjwvYT4uCi1JRExFIGZpcnN0IGNoZWNrcyBmb3IgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5JRExFU1RBUlRVUDwvc3Bhbj48L3R0PjsgaWYgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5JRExFU1RBUlRVUDwvc3Bhbj48L3R0PiBpcyBwcmVzZW50IHRoZSBmaWxlCi1yZWZlcmVuY2VkIGlzIHJ1bi4gIElmIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SURMRVNUQVJUVVA8L3NwYW4+PC90dD4gaXMgbm90IHByZXNlbnQsIElETEUgY2hlY2tzIGZvcgotPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5QWVRIT05TVEFSVFVQPC9zcGFuPjwvdHQ+LiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCis8cD5VcG9uIHN0YXJ0dXAgd2l0aCB0aGUgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPi1zPC9zcGFuPjwvY29kZT4gb3B0aW9uLCBJRExFIHdpbGwgZXhlY3V0ZSB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5Cit0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIDxzcGFuIGNsYXNzPSJ0YXJnZXQiIGlkPSJpbmRleC01Ij48L3NwYW4+PGNvZGUgY2xhc3M9InhyZWYgc3RkIHN0ZC1lbnZ2YXIgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SURMRVNUQVJUVVA8L3NwYW4+PC9jb2RlPiBvciA8c3BhbiBjbGFzcz0idGFyZ2V0IiBpZD0iaW5kZXgtNiI+PC9zcGFuPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9Ii4uL3VzaW5nL2NtZGxpbmUuaHRtbCNlbnZ2YXItUFlUSE9OU1RBUlRVUCI+PGNvZGUgY2xhc3M9InhyZWYgc3RkIHN0ZC1lbnZ2YXIgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+UFlUSE9OU1RBUlRVUDwvc3Bhbj48L2NvZGU+PC9hPi4KK0lETEUgZmlyc3QgY2hlY2tzIGZvciA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SURMRVNUQVJUVVA8L3NwYW4+PC9jb2RlPjsgaWYgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPklETEVTVEFSVFVQPC9zcGFuPjwvY29kZT4gaXMgcHJlc2VudCB0aGUgZmlsZQorcmVmZXJlbmNlZCBpcyBydW4uICBJZiA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SURMRVNUQVJUVVA8L3NwYW4+PC9jb2RlPiBpcyBub3QgcHJlc2VudCwgSURMRSBjaGVja3MgZm9yCis8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+UFlUSE9OU1RBUlRVUDwvc3Bhbj48L2NvZGU+LiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCiBjb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElETEUKIHNoZWxsLCBvciBmb3IgZXhlY3V0aW5nIGltcG9ydCBzdGF0ZW1lbnRzIHRvIGltcG9ydCBjb21tb24gbW9kdWxlcy48L3A+Ci08cD5JbiBhZGRpdGlvbiwgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5Uazwvc3Bhbj48L3R0PiBhbHNvIGxvYWRzIGEgc3RhcnR1cCBmaWxlIGlmIGl0IGlzIHByZXNlbnQuICBOb3RlIHRoYXQgdGhlCi1UayBmaWxlIGlzIGxvYWRlZCB1bmNvbmRpdGlvbmFsbHkuICBUaGlzIGFkZGl0aW9uYWwgZmlsZSBpcyA8dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPi5JZGxlLnB5PC9zcGFuPjwvdHQ+IGFuZCBpcworPHA+SW4gYWRkaXRpb24sIDxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5Uazwvc3Bhbj48L2NvZGU+IGFsc28gbG9hZHMgYSBzdGFydHVwIGZpbGUgaWYgaXQgaXMgcHJlc2VudC4gIE5vdGUgdGhhdCB0aGUKK1RrIGZpbGUgaXMgbG9hZGVkIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgYWRkaXRpb25hbCBmaWxlIGlzIDxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj4uSWRsZS5weTwvc3Bhbj48L2NvZGU+IGFuZCBpcwogbG9va2VkIGZvciBpbiB0aGUgdXNlciYjODIxNztzIGhvbWUgZGlyZWN0b3J5LiAgU3RhdGVtZW50cyBpbiB0aGlzIGZpbGUgd2lsbCBiZQogZXhlY3V0ZWQgaW4gdGhlIFRrIG5hbWVzcGFjZSwgc28gdGhpcyBmaWxlIGlzIG5vdCB1c2VmdWwgZm9yIGltcG9ydGluZwogZnVuY3Rpb25zIHRvIGJlIHVzZWQgZnJvbSBJRExFJiM4MjE3O3MgUHl0aG9uIHNoZWxsLjwvcD4KQEAgLTUwNSwyNSArNTA3LDI3IEBACiA8L2Rpdj4KIDxwPklmIHRoZXJlIGFyZSBhcmd1bWVudHM6PC9wPgogPHVsIGNsYXNzPSJzaW1wbGUiPgotPGxpPklmIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LTwvc3Bhbj48L3R0PiwgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj4tYzwvc3Bhbj48L3R0Piwgb3IgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5yPC9zcGFuPjwvdHQ+IGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgotPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXMuYXJndlsxOi4uLl08L3NwYW4+PC90dD4gYW5kIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+c3lzLmFyZ3ZbMF08L3NwYW4+PC90dD4gaXMgc2V0IHRvIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jyc8L3NwYW4+PC90dD4sIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jy1jJzwvc3Bhbj48L3R0PiwKLW9yIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jy1yJzwvc3Bhbj48L3R0Pi4gIE5vIGVkaXRvciB3aW5kb3cgaXMgb3BlbmVkLCBldmVuIGlmIHRoYXQgaXMgdGhlIGRlZmF1bHQKKzxsaT5JZiA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LTwvc3Bhbj48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LWM8L3NwYW4+PC9jb2RlPiwgb3IgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnI8L3NwYW4+PC9jb2RlPiBpcyB1c2VkLCBhbGwgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4KKzxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXMuYXJndlsxOi4uLl08L3NwYW4+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnN5cy5hcmd2WzBdPC9zcGFuPjwvY29kZT4gaXMgc2V0IHRvIDxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj4nJzwvc3Bhbj48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jy1jJzwvc3Bhbj48L2NvZGU+LAorb3IgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPictcic8L3NwYW4+PC9jb2RlPi4gIE5vIGVkaXRvciB3aW5kb3cgaXMgb3BlbmVkLCBldmVuIGlmIHRoYXQgaXMgdGhlIGRlZmF1bHQKIHNldCBpbiB0aGUgT3B0aW9ucyBkaWFsb2cuPC9saT4KIDxsaT5PdGhlcndpc2UsIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3BlbmVkIGZvciBlZGl0aW5nIGFuZAotPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXMuYXJndjwvc3Bhbj48L3R0PiByZWZsZWN0cyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBJRExFIGl0c2VsZi48L2xpPgorPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnN5cy5hcmd2PC9zcGFuPjwvY29kZT4gcmVmbGVjdHMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gSURMRSBpdHNlbGYuPC9saT4KIDwvdWw+CiA8L2Rpdj4KIDxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJpZGxlLWNvbnNvbGUtZGlmZmVyZW5jZXMiPgogPGgzPjI1LjUuMy4yLiBJRExFLWNvbnNvbGUgZGlmZmVyZW5jZXM8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI2lkbGUtY29uc29sZS1kaWZmZXJlbmNlcyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgogPHA+QXMgbXVjaCBhcyBwb3NzaWJsZSwgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgUHl0aG9uIGNvZGUgd2l0aCBJRExFIGlzIHRoZQogc2FtZSBhcyBleGVjdXRpbmcgdGhlIHNhbWUgY29kZSBpbiBhIGNvbnNvbGUgd2luZG93LiAgSG93ZXZlciwgdGhlIGRpZmZlcmVudAotaW50ZXJmYWNlIGFuZCBvcGVyYXRpb24gb2NjYXNpb25hbGx5IGFmZmVjdHMgcmVzdWx0cy48L3A+Ci08cD5Gb3IgaW5zdGFuY2UsIElETEUgbm9ybWFsbHkgZXhlY3V0ZXMgdXNlciBjb2RlIGluIGEgc2VwYXJhdGUgcHJvY2VzcyBmcm9tCi10aGUgSURMRSBHVUkgaXRzZWxmLiAgVGhlIElETEUgdmVyc2lvbnMgb2Ygc3lzLnN0ZGluLCAuc3Rkb3V0LCBhbmQgLnN0ZGVyciBpbiB0aGUKLWV4ZWN1dGlvbiBwcm9jZXNzIGdldCBpbnB1dCBmcm9tIGFuZCBzZW5kIG91dHB1dCB0byB0aGUgR1VJIHByb2Nlc3MsCi13aGljaCBrZWVwcyBjb250cm9sIG9mIHRoZSBrZXlib2FyZCBhbmQgc2NyZWVuLiAgVGhpcyBpcyBub3JtYWxseSB0cmFuc3BhcmVudCwKLWJ1dCBjb2RlIHRoYXQgYWNjZXNzIHRoZXNlIG9iamVjdCB3aWxsIHNlZSBkaWZmZXJlbnQgYXR0cmlidXRlIHZhbHVlcy4KLUFsc28sIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGFjY2VzcyB0aGUga2V5Ym9hcmQgYW5kIHNjcmVlbiB3aWxsIG5vdCB3b3JrLjwvcD4KK2ludGVyZmFjZSBhbmQgb3BlcmF0aW9uIG9jY2FzaW9uYWxseSBhZmZlY3RzIHZpc2libGUgcmVzdWx0cy4gIEZvciBpbnN0YW5jZSwKKzxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXMubW9kdWxlczwvc3Bhbj48L2NvZGU+IHN0YXJ0cyB3aXRoIG1vcmUgZW50cmllcy48L3A+Cis8cD5JRExFIGFsc28gcmVwbGFjZXMgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnN5cy5zdGRpbjwvc3Bhbj48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+c3lzLnN0ZG91dDwvc3Bhbj48L2NvZGU+LCBhbmQgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnN5cy5zdGRlcnI8L3NwYW4+PC9jb2RlPiB3aXRoCitvYmplY3RzIHRoYXQgZ2V0IGlucHV0IGZyb20gYW5kIHNlbmQgb3V0cHV0IHRvIHRoZSBTaGVsbCB3aW5kb3cuCitXaGVuIHRoaXMgd2luZG93IGhhcyB0aGUgZm9jdXMsIGl0IGNvbnRyb2xzIHRoZSBrZXlib2FyZCBhbmQgc2NyZWVuLgorVGhpcyBpcyBub3JtYWxseSB0cmFuc3BhcmVudCwgYnV0IGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGFjY2VzcyB0aGUga2V5Ym9hcmQKK2FuZCBzY3JlZW4gd2lsbCBub3Qgd29yay4gIElmIDxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXM8L3NwYW4+PC9jb2RlPiBpcyByZXNldCB3aXRoIDxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5pbXBvcnRsaWIucmVsb2FkKHN5cyk8L3NwYW4+PC9jb2RlPiwKK0lETEUmIzgyMTc7cyBjaGFuZ2VzIGFyZSBsb3N0IGFuZCB0aGluZ3MgbGkga2UgPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPmlucHV0PC9zcGFuPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5yYXdfaW5wdXQ8L3NwYW4+PC9jb2RlPiwgYW5kCis8Y29kZSBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+cHJpbnQ8L3NwYW4+PC9jb2RlPiB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS48L3A+CiA8cD5XaXRoIElETEUmIzgyMTc7cyBTaGVsbCwgb25lIGVudGVycywgZWRpdHMsIGFuZCByZWNhbGxzIGNvbXBsZXRlIHN0YXRlbWVudHMuCiBTb21lIGNvbnNvbGVzIG9ubHkgd29yayB3aXRoIGEgc2luZ2xlIHBoeXNpY2FsIGxpbmUgYXQgYSB0aW1lLjwvcD4KIDwvZGl2PgpAQCAtNTk1LDcgKzU5OSw3IEBACiAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZGl2PgogICAgICAgPC9kaXY+Ci0gICAgICA8ZGl2IGNsYXNzPSJzcGhpbnhzaWRlYmFyIj4KKyAgICAgIDxkaXYgY2xhc3M9InNwaGlueHNpZGViYXIiIHJvbGU9Im5hdmlnYXRpb24iIGFyaWEtbGFiZWw9Im1haW4gbmF2aWdhdGlvbiI+CiAgICAgICAgIDxkaXYgY2xhc3M9InNwaGlueHNpZGViYXJ3cmFwcGVyIj4KICAgPGgzPjxhIGhyZWY9Ii4uL2NvbnRlbnRzLmh0bWwiPlRhYmxlIE9mIENvbnRlbnRzPC9hPjwvaDM+CiAgIDx1bD4KQEAgLTYzOSw3ICs2NDMsNyBAQAogCiAgIDxoND5QcmV2aW91cyB0b3BpYzwvaDQ+CiAgIDxwIGNsYXNzPSJ0b3BsZXNzIj48YSBocmVmPSJ0a2ludGVyLnNjcm9sbGVkdGV4dC5odG1sIgotICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9InByZXZpb3VzIGNoYXB0ZXIiPjI1LjQuIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dGtpbnRlci5zY3JvbGxlZHRleHQ8L3NwYW4+PC90dD4gJiM4MjEyOyBTY3JvbGxlZCBUZXh0IFdpZGdldDwvYT48L3A+CisgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0icHJldmlvdXMgY2hhcHRlciI+MjUuNC4gPGNvZGUgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnRraW50ZXIuc2Nyb2xsZWR0ZXh0PC9zcGFuPjwvY29kZT4gJiM4MjEyOyBTY3JvbGxlZCBUZXh0IFdpZGdldDwvYT48L3A+CiAgIDxoND5OZXh0IHRvcGljPC9oND4KICAgPHAgY2xhc3M9InRvcGxlc3MiPjxhIGhyZWY9Im90aGVyZ3VpLmh0bWwiCiAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0ibmV4dCBjaGFwdGVyIj4yNS42LiBPdGhlciBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2UgUGFja2FnZXM8L2E+PC9wPgpAQCAtNjUwLDcgKzY1NCw3IEBACiAgICAgICAgICByZWw9Im5vZm9sbG93Ij5TaG93IFNvdXJjZTwvYT48L2xpPgogPC91bD4KIAotPGRpdiBpZD0ic2VhcmNoYm94IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+Cis8ZGl2IGlkPSJzZWFyY2hib3giIHN0eWxlPSJkaXNwbGF5OiBub25lIiByb2xlPSJzZWFyY2giPgogICA8aDM+UXVpY2sgc2VhcmNoPC9oMz4KICAgICA8Zm9ybSBjbGFzcz0ic2VhcmNoIiBhY3Rpb249Ii4uL3NlYXJjaC5odG1sIiBtZXRob2Q9ImdldCI+CiAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icSIgLz4KQEAgLTY2Nyw3ICs2NzEsNyBAQAogICAgICAgPC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjbGVhcmVyIj48L2Rpdj4KICAgICA8L2Rpdj4KLSAgICA8ZGl2IGNsYXNzPSJyZWxhdGVkIj4KKyAgICA8ZGl2IGNsYXNzPSJyZWxhdGVkIiByb2xlPSJuYXZpZ2F0aW9uIiBhcmlhLWxhYmVsPSJyZWxhdGVkIG5hdmlnYXRpb24iPgogICAgICAgPGgzPk5hdmlnYXRpb248L2gzPgogICAgICAgPHVsPgogICAgICAgICA8bGkgY2xhc3M9InJpZ2h0IiBzdHlsZT0ibWFyZ2luLXJpZ2h0OiAxMHB4Ij4KQEAgLTY4NiwyMyArNjkwLDIzIEBACiAgICAgICAgICAgICAgICAgIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4tdG9wOiAtMXB4Ii8+PC9saT4KICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvIj5QeXRob248L2E+ICZyYXF1bzs8L2xpPgogICAgICAgICA8bGk+Ci0gICAgICAgICAgPGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+My40LjMgRG9jdW1lbnRhdGlvbjwvYT4gJnJhcXVvOworICAgICAgICAgIDxhIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjMuNS4xIERvY3VtZW50YXRpb248L2E+ICZyYXF1bzsKICAgICAgICAgPC9saT4KIAotICAgICAgICAgIDxsaT48YSBocmVmPSJpbmRleC5odG1sIiA+VGhlIFB5dGhvbiBTdGFuZGFyZCBMaWJyYXJ5PC9hPiAmcmFxdW87PC9saT4KLSAgICAgICAgICA8bGk+PGEgaHJlZj0idGsuaHRtbCIgPjI1LiBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2VzIHdpdGggVGs8L2E+ICZyYXF1bzs8L2xpPgorICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWl0ZW0gbmF2LWl0ZW0tMSI+PGEgaHJlZj0iaW5kZXguaHRtbCIgPlRoZSBQeXRob24gU3RhbmRhcmQgTGlicmFyeTwvYT4gJnJhcXVvOzwvbGk+CisgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaXRlbSBuYXYtaXRlbS0yIj48YSBocmVmPSJ0ay5odG1sIiA+MjUuIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUazwvYT4gJnJhcXVvOzwvbGk+CiAgICAgICA8L3VsPgogICAgIDwvZGl2PgogICAgIDxkaXYgY2xhc3M9ImZvb3RlciI+Ci0gICAgJmNvcHk7IDxhIGhyZWY9Ii4uL2NvcHlyaWdodC5odG1sIj5Db3B5cmlnaHQ8L2E+IDE5OTAtMjAxNSwgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgICAgJmNvcHk7IDxhIGhyZWY9Ii4uL2NvcHlyaWdodC5odG1sIj5Db3B5cmlnaHQ8L2E+IDIwMDEtMjAxNiwgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgICAgPGJyIC8+CiAgICAgVGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIGlzIGEgbm9uLXByb2ZpdCBjb3Jwb3JhdGlvbi4KICAgICA8YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj5QbGVhc2UgZG9uYXRlLjwvYT4KICAgICA8YnIgLz4KLSAgICBMYXN0IHVwZGF0ZWQgb24gT2N0IDEzLCAyMDE1LgorICAgIExhc3QgdXBkYXRlZCBvbiBKdW4gMTEsIDIwMTYuCiAgICAgPGEgaHJlZj0iLi4vYnVncy5odG1sIj5Gb3VuZCBhIGJ1ZzwvYT4/CiAgICAgPGJyIC8+Ci0gICAgQ3JlYXRlZCB1c2luZyA8YSBocmVmPSJodHRwOi8vc3BoaW54LnBvY29vLm9yZy8iPlNwaGlueDwvYT4gMS4yLjMuCisgICAgQ3JlYXRlZCB1c2luZyA8YSBocmVmPSJodHRwOi8vc3BoaW54LnBvY29vLm9yZy8iPlNwaGlueDwvYT4gMS4zLjMuCiAgICAgPC9kaXY+CiAKICAgPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaGVscC5weSBiL0xpYi9pZGxlbGliL2hlbHAucHkKaW5kZXggYjMxNTk2Yy4uZDBjNTljNSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaGVscC5weQorKysgYi9MaWIvaWRsZWxpYi9oZWxwLnB5CkBAIC0xMSw3ICsxMSw3IEBACiBEb2MvbGlicmFyeS9pZGxlLnJzdCAoU3BoaW54KT0+IERvYy9idWlsZC9odG1sL2xpYnJhcnkvaWRsZS5odG1sCiAoaGVscC5jb3B5X3N0cmlwKT0+IExpYi9pZGxlbGliL2hlbHAuaHRtbAogCi1IZWxwUGFyc2VyIC0gUGFyc2UgaGVscC5odG1sIGFuZCBhbmQgcmVuZGVyIHRvIHRrIFRleHQuCitIZWxwUGFyc2VyIC0gUGFyc2UgaGVscC5odG1sIGFuZCByZW5kZXIgdG8gdGsgVGV4dC4KIAogSGVscFRleHQgLSBEaXNwbGF5IGZvcm1hdHRlZCBoZWxwLmh0bWwuCiAKQEAgLTQ1LDYgKzQ1LDggQEAKICAgICBUaGUgb3ZlcnJpZGRlbiBoYW5kbGVfeHl6IG1ldGhvZHMgaGFuZGxlIGEgc3Vic2V0IG9mIGh0bWwgdGFncy4KICAgICBUaGUgc3VwcGxpZWQgdGV4dCBzaG91bGQgaGF2ZSB0aGUgbmVlZGVkIHRhZyBjb25maWd1cmF0aW9ucy4KICAgICBUaGUgYmVoYXZpb3IgZm9yIHVuc3VwcG9ydGVkIHRhZ3MsIHN1Y2ggYXMgdGFibGUsIGlzIHVuZGVmaW5lZC4KKyAgICBJZiB0aGUgdGFncyBnZW5lcmF0ZWQgYnkgU3BoaW54IGNoYW5nZSwgdGhpcyBjbGFzcywgZXNwZWNpYWxseQorICAgIHRoZSBoYW5kbGVfc3RhcnR0YWcgYW5kIGhhbmRsZV9lbmR0YWdzIG1ldGhvZHMsIG1pZ2h0IGhhdmUgdG8gYWxzby4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCk6CiAgICAgICAgIEhUTUxQYXJzZXIuX19pbml0X18oc2VsZiwgY29udmVydF9jaGFycmVmcz1UcnVlKQpAQCAtMjI2LDcgKzIyOCwyOCBAQAogCiAKIGRlZiBjb3B5X3N0cmlwKCk6Ci0gICAgIkNvcHkgaWRsZS5odG1sIHRvIGlkbGVsaWIvaGVscC5odG1sLCBzdHJpcHBpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4iCisgICAgIiIiQ29weSBpZGxlLmh0bWwgdG8gaWRsZWxpYi9oZWxwLmh0bWwsIHN0cmlwcGluZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorCisgICAgRmlsZXMgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIGNhbm5vdCBiZSBwdXNoZWQgdG8gdGhlIGhnIGNweXRob24KKyAgICByZXBvc2l0b3J5LiAgRm9yIDMueCAob24gV2luZG93cyksIGhlbHAuaHRtbCBpcyBnZW5lcmF0ZWQsIGFmdGVyCisgICAgZWRpdGluZyBpZGxlLnJzdCBpbiB0aGUgZWFybGllc3QgbWFpbnRlbmFuY2UgdmVyc2lvbiwgd2l0aAorICAgICAgc3BoaW54LWJ1aWxkIC1iaHRtbCAuIGJ1aWxkL2h0bWwKKyAgICAgIHB5dGhvbl9kLmV4ZSAtYyAiZnJvbSBpZGxlbGliLmhlbHAgaW1wb3J0IGNvcHlfc3RyaXA7IGNvcHlfc3RyaXAoKSIKKyAgICBBZnRlciByZWZyZXNoaW5nIFRvcnRvaXNlSEcgd29ya3Nob3AgdG8gZ2VuZXJhdGUgYSBkaWZmLAorICAgIGNoZWNrICBib3RoIHRoZSBkaWZmIGFuZCBkaXNwbGF5ZWQgdGV4dC4gIFB1c2ggdGhlIGRpZmYgYWxvbmcgd2l0aAorICAgIHRoZSBpZGxlLnJzdCBjaGFuZ2UgYW5kIG1lcmdlIGJvdGggaW50byBkZWZhdWx0IChvciBhbiBpbnRlcm1lZGlhdGUKKyAgICBtYWludGVuYW5jZSB2ZXJzaW9uKS4KKworICAgIFdoZW4gdGhlICdlYXJsaXN0JyB2ZXJzaW9uIGdldHMgaXRzIGZpbmFsIG1haW50ZW5hbmNlIHJlbGVhc2UsCisgICAgZG8gYW4gdXBkYXRlIGFzIGRlc2NyaWJlZCBhYm92ZSwgd2l0aG91dCBlZGl0aW5nIGlkbGUucnN0LCB0bworICAgIHJlYmFzZSBoZWxwLmh0bWwgb24gdGhlIG5leHQgdmVyc2lvbiBvZiBpZGxlLnJzdC4gIERvIG5vdCB3b3JyeQorICAgIGFib3V0IHZlcnNpb24gY2hhbmdlcyBhcyB2ZXJzaW9uIGlzIG5vdCBkaXNwbGF5ZWQuICBFeGFtaW5lIG90aGVyCisgICAgY2hhbmdlcyBhbmQgdGhlIHJlc3VsdCBvZiBIZWxwIC0+IElETEUgSGVscC4KKworICAgIElmIG1haW50ZW5hbmNlIGFuZCBkZWZhdWx0IHZlcnNpb25zIG9mIGlkbGUucnN0IGRpdmVyZ2UsIGFuZAorICAgIG1lcmdpbmcgZG9lcyBub3QgZ28gc21vb3RobHksIHRoZW4gY29uc2lkZXIgZ2VuZXJhdGluZworICAgIHNlcGFyYXRlIGhlbHAuaHRtbCBmaWxlcyBmcm9tIHNlcGFyYXRlIGlkbGUuaHRtbHMuCisgICAgIiIiCiAgICAgc3JjID0gam9pbihhYnNwYXRoKGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkpKSwKICAgICAgICAgICAgICAgICdEb2MnLCAnYnVpbGQnLCAnaHRtbCcsICdsaWJyYXJ5JywgJ2lkbGUuaHRtbCcpCiAgICAgZHN0ID0gam9pbihhYnNwYXRoKGRpcm5hbWUoX19maWxlX18pKSwgJ2hlbHAuaHRtbCcpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvUkVBRE1FLnR4dCBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CmluZGV4IDIzMzk5MjYuLmRjN2EyODYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CkBAIC0yLDEyICsyLDEyIEBACiAKIDAuIFF1aWNrIFN0YXJ0CiAKLUF1dG9tYXRlZCB1bml0IHRlc3RzIHdlcmUgYWRkZWQgaW4gMi43IGZvciBQeXRob24gMi54IGFuZCAzLjMgZm9yIFB5dGhvbiAzLnguCitBdXRvbWF0ZWQgdW5pdCB0ZXN0cyB3ZXJlIGFkZGVkIGluIDMuMyBmb3IgUHl0aG9uIDMueC4KIFRvIHJ1biB0aGUgdGVzdHMgZnJvbSBhIGNvbW1hbmQgbGluZToKIAogcHl0aG9uIC1tIHRlc3QudGVzdF9pZGxlCiAKLUh1bWFuLW1lZGlhdGVkIHRlc3RzIHdlcmUgYWRkZWQgbGF0ZXIgaW4gMi43IGFuZCBpbiAzLjQuCitIdW1hbi1tZWRpYXRlZCB0ZXN0cyB3ZXJlIGFkZGVkIGxhdGVyIGluIDMuNC4KIAogcHl0aG9uIC1tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0CiAKQEAgLTE1LDkgKzE1LDkgQEAKIDEuIFRlc3QgRmlsZXMKIAogVGhlIGlkbGUgZGlyZWN0b3J5LCBpZGxlbGliLCBoYXMgb3ZlciA2MCB4eXoucHkgZmlsZXMuIFRoZSBpZGxlX3Rlc3QKLXN1YmRpcmVjdG9yeSBzaG91bGQgY29udGFpbiBhIHRlc3RfeHl6LnB5IGZvciBlYWNoLCB3aGVyZSAneHl6JyBpcyBsb3dlcmNhc2VkCi1ldmVuIGlmIHh5ei5weSBpcyBub3QuIEhlcmUgaXMgYSBwb3NzaWJsZSB0ZW1wbGF0ZSwgd2l0aCB0aGUgYmxhbmtzIGFmdGVyIGFmdGVyCi0nLicgYW5kICdhcycsIGFuZCBiZWZvcmUgYW5kIGFmdGVyICdfJyB0byBiZSBmaWxsZWQgaW4uCitzdWJkaXJlY3Rvcnkgc2hvdWxkIGNvbnRhaW4gYSB0ZXN0X3h5ei5weSBmb3IgZWFjaCwgd2hlcmUgJ3h5eicgaXMKK2xvd2VyY2FzZWQgZXZlbiBpZiB4eXoucHkgaXMgbm90LiBIZXJlIGlzIGEgcG9zc2libGUgdGVtcGxhdGUsIHdpdGggdGhlCitibGFua3MgYWZ0ZXIgJy4nIGFuZCAnYXMnLCBhbmQgYmVmb3JlIGFuZCBhZnRlciAnXycgdG8gYmUgZmlsbGVkIGluLgogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcwpAQCAtMzAsOSArMzAsOSBAQAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQogCi1BZGQgdGhlIGZvbGxvd2luZyBhdCB0aGUgZW5kIG9mIHh5eS5weSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbmFtZSBhZGRlZCBhZnRlcgotJ3Rlc3RfJy4gU29tZSBmaWxlcyBhbHJlYWR5IGhhdmUgc29tZXRoaW5nIGxpa2UgdGhpcyBmb3IgaHRlc3QuICBJZiBzbywgaW5zZXJ0Ci10aGUgaW1wb3J0IGFuZCB1bml0dGVzdC5tYWluIGxpbmVzIGJlZm9yZSB0aGUgaHRlc3QgbGluZXMuCitBZGQgdGhlIGZvbGxvd2luZyBhdCB0aGUgZW5kIG9mIHh5eS5weSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbmFtZSBhZGRlZAorYWZ0ZXIgJ3Rlc3RfJy4gU29tZSBmaWxlcyBhbHJlYWR5IGhhdmUgc29tZXRoaW5nIGxpa2UgdGhpcyBmb3IgaHRlc3QuCitJZiBzbywgaW5zZXJ0IHRoZSBpbXBvcnQgYW5kIHVuaXR0ZXN0Lm1haW4gbGluZXMgYmVmb3JlIHRoZSBodGVzdCBsaW5lcy4KIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBpbXBvcnQgdW5pdHRlc3QKQEAgLTQyLDY0ICs0Miw4MiBAQAogCiAyLiBHVUkgVGVzdHMKIAotV2hlbiBydW4gYXMgcGFydCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUsIElkbGUgZ3VpIHRlc3RzIG5lZWQgdG8gcnVuCi10ZXN0LnN1cHBvcnQucmVxdWlyZXMoJ2d1aScpICh0ZXN0LnRlc3Rfc3VwcG9ydCBpbiAyLjcpLiAgQSB0ZXN0IGlzIGEgZ3VpIHRlc3QKLWlmIGl0IGNyZWF0ZXMgYSBUayByb290IG9yIG1hc3RlciBvYmplY3QgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkKLWluc3RhbnRpYXRpbmcgYSB0a2ludGVyIG9yIGlkbGUgY2xhc3MuICBGb3IgdGhlIGJlbmVmaXQgb2YgdGVzdCBwcm9jZXNzZXMgdGhhdAotZWl0aGVyIGhhdmUgbm8gZ3JhcGhpY2FsIGVudmlyb25tZW50IGF2YWlsYWJsZSBvciBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIGl0LCBndWkKLXRlc3RzIG11c3QgYmUgJ2d1YXJkZWQnIGJ5ICJyZXF1aXJlcygnZ3VpJykiIGluIGEgc2V0VXAgZnVuY3Rpb24gb3IgbWV0aG9kLgotVGhpcyB3aWxsIHR5cGljYWxseSBiZSBzZXRVcENsYXNzLgorV2hlbiBydW4gYXMgcGFydCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUsIElkbGUgR1VJIHRlc3RzIG5lZWQgdG8gcnVuCit0ZXN0LnN1cHBvcnQucmVxdWlyZXMoJ2d1aScpLiAgQSB0ZXN0IGlzIGEgR1VJIHRlc3QgaWYgaXQgY3JlYXRlcyBhCit0a2ludGVyLlRrIHJvb3Qgb3IgbWFzdGVyIG9iamVjdCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieQoraW5zdGFudGlhdGluZyBhIHRraW50ZXIgb3IgaWRsZSBjbGFzcy4gIEdVSSB0ZXN0cyBjYW5ub3QgcnVuIGluIHRlc3QKK3Byb2Nlc3NlcyB0aGF0IGVpdGhlciBoYXZlIG5vIGdyYXBoaWNhbCBlbnZpcm9ubWVudCBhdmFpbGFibGUgb3IgYXJlIG5vdAorYWxsb3dlZCB0byB1c2UgaXQuCiAKLVRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggb3RoZXIgZ3VpIHRlc3RzLCBhbGwgZ3VpIG9iamVjdHMgbXVzdCBiZSBkZXN0cm95ZWQgYW5kCi1kZWxldGVkIGJ5IHRoZSBlbmQgb2YgdGhlIHRlc3QuICBXaWRnZXRzLCBzdWNoIGFzIGEgVGsgcm9vdCwgY3JlYXRlZCBpbiBhIHNldFVwWAotZnVuY3Rpb24sIHNob3VsZCBiZSBkZXN0cm95ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgdGVhckRvd25YLiAgTW9kdWxlIGFuZCBjbGFzcwotd2lkZ2V0IGF0dHJpYnV0ZXMgc2hvdWxkIGFsc28gYmUgZGVsZXRlZC4uCitUbyBndWFyZCBhIG1vZHVsZSBjb25zaXN0aW5nIGVudGlyZWx5IG9mIEdVSSB0ZXN0cywgc3RhcnQgd2l0aAorCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK3JlcXVpcmVzKCdndWknKQorCitUbyBndWFyZCBhIHRlc3QgY2xhc3MsIHB1dCAicmVxdWlyZXMoJ2d1aScpIiBpbiBpdHMgc2V0VXBDbGFzcyBmdW5jdGlvbi4KKworVG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBHVUkgdGVzdHMsIGFsbCBHVUkgb2JqZWN0cyBtdXN0IGJlIGRlc3Ryb3llZCBhbmQKK2RlbGV0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgdGVzdC4gIFRoZSBUayByb290IGNyZWF0ZWQgaW4gYSBzZXRVcFggZnVuY3Rpb24gc2hvdWxkCitiZSBkZXN0cm95ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgdGVhckRvd25YIGFuZCB0aGUgbW9kdWxlIG9yIGNsYXNzIGF0dHJpYnV0ZQorZGVsZXRlZC4gIE90aGVycyB3aWRnZXRzIHNob3VsZCBkZXNjZW5kIGZyb20gdGhlIHNpbmdsZSByb290IGFuZCB0aGUgYXR0cmlidXRlcworZGVsZXRlZCBCRUZPUkUgcm9vdCBpcyBkZXN0cm95ZWQuICBTZWUgaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDU2Ny4KIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiAgICAgICAgIHJlcXVpcmVzKCdndWknKQogICAgICAgICBjbHMucm9vdCA9IHRrLlRrKCkKKyAgICAgICAgY2xzLnRleHQgPSB0ay5UZXh0KHJvb3QpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBkZWwgY2xzLnRleHQKKyAgICAgICAgY2xzLnJvb3QudXBkYXRlX2lkbGV0YXNrcygpCiAgICAgICAgIGNscy5yb290LmRlc3Ryb3koKQogICAgICAgICBkZWwgY2xzLnJvb3QKIAorVGhlIHVwZGF0ZV9pZGxldGFza3MgY2FsbCBpcyBzb21ldGltZXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGZvbGxvd2luZyB3YXJuaW5nCitlaXRoZXIgd2hlbiBydW5uaW5nIGEgdGVzdCBhbG9uZSBvciBhcyBwYXJ0IG9mIHRoZSB0ZXN0IHN1aXRlICgjMjcxOTYpLgorICBjYW4ndCBpbnZva2UgImV2ZW50IiBjb21tYW5kOiBhcHBsaWNhdGlvbiBoYXMgYmVlbiBkZXN0cm95ZWQKKyAgLi4uCisgICJ0dGs6OlRoZW1lQ2hhbmdlZCIKIAogUmVxdWlyZXMoJ2d1aScpIGNhdXNlcyB0aGUgdGVzdChzKSBpdCBndWFyZHMgdG8gYmUgc2tpcHBlZCBpZiBhbnkgb2YKLWEgZmV3IGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAgICAKLSAtIFRoZSB0ZXN0cyBhcmUgYmVpbmcgcnVuIGJ5IHJlZ3J0ZXN0LnB5LCBhbmQgaXQgd2FzIHN0YXJ0ZWQgd2l0aG91dCBlbmFibGluZwotICAgdGhlICJndWkiIHJlc291cmNlIHdpdGggdGhlICItdSIgY29tbWFuZCBsaW5lIG9wdGlvbi4KLSAgIAotIC0gVGhlIHRlc3RzIGFyZSBiZWluZyBydW4gb24gV2luZG93cyBieSBhIHNlcnZpY2UgdGhhdCBpcyBub3QgYWxsb3dlZCB0bwotICAgaW50ZXJhY3Qgd2l0aCB0aGUgZ3JhcGhpY2FsIGVudmlyb25tZW50LgotICAgCi0gLSBUaGUgdGVzdHMgYXJlIGJlaW5nIHJ1biBvbiBNYWMgT1NYIGluIGEgcHJvY2VzcyB0aGF0IGNhbm5vdCBtYWtlIGEgd2luZG93Ci0gICBtYW5hZ2VyIGNvbm5lY3Rpb24uCi0gICAKK3RoZXNlIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworIC0gVGhlIHRlc3RzIGFyZSBiZWluZyBydW4gYnkgcmVncnRlc3QucHksIGFuZCBpdCB3YXMgc3RhcnRlZCB3aXRob3V0CisgICBlbmFibGluZyB0aGUgImd1aSIgcmVzb3VyY2Ugd2l0aCB0aGUgIi11IiBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgLSBUaGUgdGVzdHMgYXJlIGJlaW5nIHJ1biBvbiBXaW5kb3dzIGJ5IGEgc2VydmljZSB0aGF0IGlzIG5vdCBhbGxvd2VkCisgICB0byBpbnRlcmFjdCB3aXRoIHRoZSBncmFwaGljYWwgZW52aXJvbm1lbnQuCisKKyAtIFRoZSB0ZXN0cyBhcmUgYmVpbmcgcnVuIG9uIExpbnV4IGFuZCBYIFdpbmRvd3MgaXMgbm90IGF2YWlsYWJsZS4KKworIC0gVGhlIHRlc3RzIGFyZSBiZWluZyBydW4gb24gTWFjIE9TWCBpbiBhIHByb2Nlc3MgdGhhdCBjYW5ub3QgbWFrZSBhCisgICB3aW5kb3cgbWFuYWdlciBjb25uZWN0aW9uLgorCiAgLSB0a2ludGVyLlRrIGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgaW5zdGFudGlhdGVkIGZvciBzb21lIHJlYXNvbi4KLSAKKwogIC0gdGVzdC5zdXBwb3J0LnVzZV9yZXNvdXJjZXMgaGFzIGJlZW4gc2V0IGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuCiAgICByZWdydGVzdC5weSBhbmQgZG9lcyBub3QgY29udGFpbiAiZ3VpIi4KLSAgIAotVGVzdHMgb2Ygbm9uLWd1aSBvcGVyYXRpb25zIHNob3VsZCBhdm9pZCBjcmVhdGluZyB0ayB3aWRnZXRzLiBJbmNpZGVudGFsIHVzZXMgb2YKLXRrIHZhcmlhYmxlcyBhbmQgbWVzc2FnZWJveGVzIGNhbiBiZSByZXBsYWNlZCBieSB0aGUgbW9jayBjbGFzc2VzIGluCi1pZGxlX3Rlc3QvbW9ja190ay5weS4gVGhlIG1vY2sgdGV4dCBoYW5kbGVzIHNvbWUgdXNlcyBvZiB0aGUgdGsgVGV4dCB3aWRnZXQuCisKK1Rlc3RzIG9mIG5vbi1HVUkgb3BlcmF0aW9ucyBzaG91bGQgYXZvaWQgY3JlYXRpbmcgdGsgd2lkZ2V0cy4gSW5jaWRlbnRhbAordXNlcyBvZiB0ayB2YXJpYWJsZXMgYW5kIG1lc3NhZ2Vib3hlcyBjYW4gYmUgcmVwbGFjZWQgYnkgdGhlIG1vY2sKK2NsYXNzZXMgaW4gaWRsZV90ZXN0L21vY2tfdGsucHkuIFRoZSBtb2NrIHRleHQgaGFuZGxlcyBzb21lIHVzZXMgb2YgdGhlCit0ayBUZXh0IHdpZGdldC4KIAogCiAzLiBSdW5uaW5nIFVuaXQgVGVzdHMKIAogQXNzdW1lIHRoYXQgeHl6LnB5IGFuZCB0ZXN0X3h5ei5weSBib3RoIGVuZCB3aXRoIGEgdW5pdHRlc3QubWFpbigpIGNhbGwuCi1SdW5uaW5nIGVpdGhlciBmcm9tIGFuIElkbGUgZWRpdG9yIHJ1bnMgYWxsIHRlc3RzIGluIHRoZSB0ZXN0X3h5eiBmaWxlIHdpdGggdGhlCi12ZXJzaW9uIG9mIFB5dGhvbiBydW5uaW5nIElkbGUuICBUZXN0IG91dHB1dCBhcHBlYXJzIGluIHRoZSBTaGVsbCB3aW5kb3cuICBUaGUKLSd2ZXJib3NpdHk9Micgb3B0aW9uIGxpc3RzIGFsbCB0ZXN0IG1ldGhvZHMgaW4gdGhlIGZpbGUsIHdoaWNoIGlzIGFwcHJvcHJpYXRlCi13aGVuIGRldmVsb3BpbmcgdGVzdHMuIFRoZSAnZXhpdD1GYWxzZScgb3B0aW9uIGlzIG5lZWRlZCBpbiB4eXgucHkgZmlsZXMgd2hlbiBhbgotaHRlc3QgZm9sbG93cy4KK1J1bm5pbmcgZWl0aGVyIGZyb20gYW4gSWRsZSBlZGl0b3IgcnVucyBhbGwgdGVzdHMgaW4gdGhlIHRlc3RfeHl6IGZpbGUKK3dpdGggdGhlIHZlcnNpb24gb2YgUHl0aG9uIHJ1bm5pbmcgSWRsZS4gIFRlc3Qgb3V0cHV0IGFwcGVhcnMgaW4gdGhlCitTaGVsbCB3aW5kb3cuICBUaGUgJ3ZlcmJvc2l0eT0yJyBvcHRpb24gbGlzdHMgYWxsIHRlc3QgbWV0aG9kcyBpbiB0aGUKK2ZpbGUsIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHdoZW4gZGV2ZWxvcGluZyB0ZXN0cy4gVGhlICdleGl0PUZhbHNlJworb3B0aW9uIGlzIG5lZWRlZCBpbiB4eXgucHkgZmlsZXMgd2hlbiBhbiBodGVzdCBmb2xsb3dzLgogCiBUaGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZXMgYWxzbyBydW4gYWxsIHRlc3QgbWV0aG9kcywgaW5jbHVkaW5nCi1ndWkgdGVzdHMsIGluIHRlc3RfeHl6LnB5LiAoQm90aCAnLW0gaWRsZWxpYicgYW5kICctbSBpZGxlbGliLmlkbGUnIHN0YXJ0Ci1JZGxlIGFuZCBzbyBjYW5ub3QgcnVuIHRlc3RzLikKK0dVSSB0ZXN0cywgaW4gdGVzdF94eXoucHkuIChCb3RoICctbSBpZGxlbGliJyBhbmQgJy1tIGlkbGVsaWIuaWRsZScKK3N0YXJ0IElkbGUgYW5kIHNvIGNhbm5vdCBydW4gdGVzdHMuKQogCiBweXRob24gLW0gaWRsZWxpYi54eXoKIHB5dGhvbiAtbSBpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3h5egpAQCAtMTA5LDM1ICsxMjcsMzUgQEAKID4+PiBpbXBvcnQgdW5pdHRlc3QKID4+PiB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdCcsIHZlcmJvc2l0eT0yKQogCi1UaGUgZm9sbG93aW5nIHJ1biBhbGwgSWRsZSB0ZXN0cyBhdCBhIGNvbW1hbmQgbGluZS4gIE9wdGlvbiAnLXYnIGlzIHRoZSBzYW1lIGFzCi0ndmVyYm9zaXR5PTInLiAgKEZvciAyLjcsIHJlcGxhY2UgJ3Rlc3QnIGluIHRoZSBzZWNvbmQgbGluZSB3aXRoCi0ndGVzdC5yZWdydGVzdCcuKQorVGhlIGZvbGxvd2luZyBydW4gYWxsIElkbGUgdGVzdHMgYXQgYSBjb21tYW5kIGxpbmUuICBPcHRpb24gJy12JyBpcyB0aGUKK3NhbWUgYXMgJ3ZlcmJvc2l0eT0yJy4KIAogcHl0aG9uIC1tIHVuaXR0ZXN0IC12IGlkbGVsaWIuaWRsZV90ZXN0CiBweXRob24gLW0gdGVzdCAtdiAtdWd1aSB0ZXN0X2lkbGUKIHB5dGhvbiAtbSB0ZXN0LnRlc3RfaWRsZQogCi1UaGUgaWRsZSB0ZXN0cyBhcmUgJ2Rpc2NvdmVyZWQnIGJ5IGlkbGVsaWIuaWRsZV90ZXN0Ll9faW5pdF9fLmxvYWRfdGVzdHMsCi13aGljaCBpcyBhbHNvIGltcG9ydGVkIGludG8gdGVzdC50ZXN0X2lkbGUuIE5vcm1hbGx5LCBuZWl0aGVyIGZpbGUgc2hvdWxkIGJlCi1jaGFuZ2VkIHdoZW4gd29ya2luZyBvbiBpbmRpdmlkdWFsIHRlc3QgbW9kdWxlcy4gVGhlIHRoaXJkIGNvbW1hbmQgcnVucwotdW5pdHRlc3QgaW5kaXJlY3RseSB0aHJvdWdoIHJlZ3J0ZXN0LiBUaGUgc2FtZSBoYXBwZW5zIHdoZW4gdGhlIGVudGlyZSB0ZXN0Ci1zdWl0ZSBpcyBydW4gd2l0aCAncHl0aG9uIC1tIHRlc3QnLiBTbyB0aGF0IGNvbW1hbmQgbXVzdCB3b3JrIGZvciBidWlsZGJvdHMKLXRvIHN0YXkgZ3JlZW4uIElkbGUgdGVzdHMgbXVzdCBub3QgZGlzdHVyYiB0aGUgZW52aXJvbm1lbnQgaW4gYSB3YXkgdGhhdAotbWFrZXMgb3RoZXIgdGVzdHMgZmFpbCAoaXNzdWUgMTgwODEpLgorVGhlIGlkbGUgdGVzdHMgYXJlICdkaXNjb3ZlcmVkJyBieQoraWRsZWxpYi5pZGxlX3Rlc3QuX19pbml0X18ubG9hZF90ZXN0cywgd2hpY2ggaXMgYWxzbyBpbXBvcnRlZCBpbnRvCit0ZXN0LnRlc3RfaWRsZS4gTm9ybWFsbHksIG5laXRoZXIgZmlsZSBzaG91bGQgYmUgY2hhbmdlZCB3aGVuIHdvcmtpbmcgb24KK2luZGl2aWR1YWwgdGVzdCBtb2R1bGVzLiBUaGUgdGhpcmQgY29tbWFuZCBydW5zIHVuaXR0ZXN0IGluZGlyZWN0bHkKK3Rocm91Z2ggcmVncnRlc3QuIFRoZSBzYW1lIGhhcHBlbnMgd2hlbiB0aGUgZW50aXJlIHRlc3Qgc3VpdGUgaXMgcnVuCit3aXRoICdweXRob24gLW0gdGVzdCcuIFNvIHRoYXQgY29tbWFuZCBtdXN0IHdvcmsgZm9yIGJ1aWxkYm90cyB0byBzdGF5CitncmVlbi4gSWRsZSB0ZXN0cyBtdXN0IG5vdCBkaXN0dXJiIHRoZSBlbnZpcm9ubWVudCBpbiBhIHdheSB0aGF0IG1ha2VzCitvdGhlciB0ZXN0cyBmYWlsIChpc3N1ZSAxODA4MSkuCiAKLVRvIHJ1biBhbiBpbmRpdmlkdWFsIFRlc3RjYXNlIG9yIHRlc3QgbWV0aG9kLCBleHRlbmQgdGhlIGRvdHRlZCBuYW1lIGdpdmVuIHRvCi11bml0dGVzdCBvbiB0aGUgY29tbWFuZCBsaW5lLgorVG8gcnVuIGFuIGluZGl2aWR1YWwgVGVzdGNhc2Ugb3IgdGVzdCBtZXRob2QsIGV4dGVuZCB0aGUgZG90dGVkIG5hbWUKK2dpdmVuIHRvIHVuaXR0ZXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuCiAKIHB5dGhvbiAtbSB1bml0dGVzdCAtdiBpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3h5ei5UZXN0X2Nhc2UudGVzdF9tZXRoCiAKIAogNC4gSHVtYW4tbWVkaWF0ZWQgVGVzdHMKIAotSHVtYW4tbWVkaWF0ZWQgdGVzdHMgYXJlIHdpZGdldCB0ZXN0cyB0aGF0IGNhbm5vdCBiZSBhdXRvbWF0ZWQgYnV0IG5lZWQgaHVtYW4KLXZlcmlmaWNhdGlvbi4gVGhleSBhcmUgY29udGFpbmVkIGluIGlkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5LCB3aGljaCBoYXMKLWluc3RydWN0aW9ucy4gIChTb21lIG1vZHVsZXMgbmVlZCBhbiBhdXhpbGlhcnkgZnVuY3Rpb24sIGlkZW50aWZpZWQgd2l0aCAjIGh0ZXN0Ci0jIG9uIHRoZSBoZWFkZXIgbGluZS4pICBUaGUgc2V0IGlzIGFib3V0IGNvbXBsZXRlLCB0aG91Z2ggc29tZSB0ZXN0cyBuZWVkCi1pbXByb3ZlbWVudC4gVG8gcnVuIGFsbCBodGVzdHMsIHJ1biB0aGUgaHRlc3QgZmlsZSBmcm9tIGFuIGVkaXRvciBvciBmcm9tIHRoZQotY29tbWFuZCBsaW5lIHdpdGg6CitIdW1hbi1tZWRpYXRlZCB0ZXN0cyBhcmUgd2lkZ2V0IHRlc3RzIHRoYXQgY2Fubm90IGJlIGF1dG9tYXRlZCBidXQgbmVlZAoraHVtYW4gdmVyaWZpY2F0aW9uLiBUaGV5IGFyZSBjb250YWluZWQgaW4gaWRsZWxpYi9pZGxlX3Rlc3QvaHRlc3QucHksCit3aGljaCBoYXMgaW5zdHJ1Y3Rpb25zLiAgKFNvbWUgbW9kdWxlcyBuZWVkIGFuIGF1eGlsaWFyeSBmdW5jdGlvbiwKK2lkZW50aWZpZWQgd2l0aCAiIyBodGVzdCAjIG9uIHRoZSBoZWFkZXIgbGluZS4pICBUaGUgc2V0IGlzIGFib3V0Citjb21wbGV0ZSwgdGhvdWdoIHNvbWUgdGVzdHMgbmVlZCBpbXByb3ZlbWVudC4gVG8gcnVuIGFsbCBodGVzdHMsIHJ1biB0aGUKK2h0ZXN0IGZpbGUgZnJvbSBhbiBlZGl0b3Igb3IgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdpdGg6CiAKIHB5dGhvbiAtbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L19faW5pdF9fLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L19faW5pdF9fLnB5CmluZGV4IDFiYzk1MzYuLjg0NWM5MmQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9fX2luaXRfXy5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvX19pbml0X18ucHkKQEAgLTEsMyArMSw5IEBACisnJydpZGxlbGliLmlkbGVfdGVzdCBpcyBhIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2YgdGVzdC50ZXN0X2lkbGUsCit3aGljaCB0ZXN0cyB0aGUgSURMRSBhcHBsaWNhdGlvbiBhcyBwYXJ0IG9mIHRoZSBzdGRsaWIgdGVzdCBzdWl0ZS4KK1J1biBJRExFIHRlc3RzIGFsb25lIHdpdGggInB5dGhvbiAtbSB0ZXN0LnRlc3RfaWRsZSIuCitUaGlzIHBhY2thZ2UgYW5kIGl0cyBjb250YWluZWQgbW9kdWxlcyBhcmUgc3ViamVjdCB0byBjaGFuZ2UgYW5kCithbnkgZGlyZWN0IHVzZSBpcyBhdCB5b3VyIG93biByaXNrLgorJycnCiBmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUKIAogZGVmIGxvYWRfdGVzdHMobG9hZGVyLCBzdGFuZGFyZF90ZXN0cywgcGF0dGVybik6CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvaHRlc3QucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvaHRlc3QucHkKaW5kZXggM2UyNDUxOC4uNThlNjJjYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9odGVzdC5weQpAQCAtMTkyLDcgKzE5MiwxMCBAQAogICAgICdtc2cnOiAiVGVzdCB0aGUgZm9sbG93aW5nIGJpbmRpbmdzLlxuIgogICAgICAgICAgICAiPENvbnRyb2wtbz4gdG8gb3BlbiBmaWxlIGZyb20gZGlhbG9nLlxuIgogICAgICAgICAgICAiRWRpdCB0aGUgZmlsZS5cbiIKKyAgICAgICAgICAgIjxDb250cm9sLXA+IHRvIHByaW50IHRoZSBmaWxlLlxuIgogICAgICAgICAgICAiPENvbnRyb2wtcz4gdG8gc2F2ZSB0aGUgZmlsZS5cbiIKKyAgICAgICAgICAgIjxBbHQtcz4gdG8gc2F2ZS1hcyBhbm90aGVyIGZpbGUuXG4iCisgICAgICAgICAgICI8Q29udHJvbC1jPiB0byBzYXZlLWNvcHktYXMgYW5vdGhlciBmaWxlLlxuIgogICAgICAgICAgICAiQ2hlY2sgdGhhdCBjaGFuZ2VzIHdlcmUgc2F2ZWQgYnkgb3BlbmluZyB0aGUgZmlsZSBlbHNld2hlcmUuIgogICAgIH0KIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfdGsucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQppbmRleCA4NmZlODQ4Li42ZTM1MTI5IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQpAQCAtMjk2LDMgKzI5Niw4IEBACiAgICAgZGVmIGJpbmQoc2VxdWVuY2U9Tm9uZSwgZnVuYz1Ob25lLCBhZGQ9Tm9uZSk6CiAgICAgICAgICJCaW5kIHRvIHRoaXMgd2lkZ2V0IGF0IGV2ZW50IHNlcXVlbmNlIGEgY2FsbCB0byBmdW5jdGlvbiBmdW5jLiIKICAgICAgICAgcGFzcworCitjbGFzcyBFbnRyeToKKyAgICAiTW9jayBmb3IgdGtpbnRlci5FbnRyeS4iCisgICAgZGVmIGZvY3VzX3NldChzZWxmKToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2NvbXBsZXRlLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2NvbXBsZXRlLnB5CmluZGV4IDNhMjE5MmUuLmU0NDkzZDEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2F1dG9jb21wbGV0ZS5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9hdXRvY29tcGxldGUucHkKQEAgLTMzLDkgKzMzLDggQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGRlbCBjbHMuZWRpdG9yLCBjbHMudGV4dAogICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKLSAgICAgICAgZGVsIGNscy50ZXh0Ci0gICAgICAgIGRlbCBjbHMuZWRpdG9yCiAgICAgICAgIGRlbCBjbHMucm9vdAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2V4cGFuZC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2F1dG9leHBhbmQucHkKaW5kZXggN2NhOTQxZS4uZDJhMzE1NiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2V4cGFuZC5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9hdXRvZXhwYW5kLnB5CkBAIC0yNSwxMCArMjUsMTAgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGRlbCBjbHMudGV4dCwgY2xzLmF1dG9fZXhwYW5kCiAgICAgICAgIGlmIGhhc2F0dHIoY2xzLCAndGsnKToKICAgICAgICAgICAgIGNscy50ay5kZXN0cm95KCkKICAgICAgICAgICAgIGRlbCBjbHMudGsKLSAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuYXV0b19leHBhbmQKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgJ2VuZCcpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jb25maWdfaGVscC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2NvbmZpZ19oZWxwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NGY4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jb25maWdfaGVscC5weQpAQCAtMCwwICsxLDEwNiBAQAorIiIiVW5pdHRlc3RzIGZvciBpZGxlbGliLmNvbmZpZ0hlbHBTb3VyY2VFZGl0IiIiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ayBpbXBvcnQgVmFyLCBNYm94LCBFbnRyeQorZnJvbSBpZGxlbGliIGltcG9ydCBjb25maWdIZWxwU291cmNlRWRpdCBhcyBoZWxwX2RpYWxvZ19tb2R1bGUKKworaGVscF9kaWFsb2cgPSBoZWxwX2RpYWxvZ19tb2R1bGUuR2V0SGVscFNvdXJjZURpYWxvZworCisKK2NsYXNzIER1bW15X2hlbHBfZGlhbG9nOgorICAgICMgTW9jayBmb3IgdGVzdGluZyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgaGVscF9kaWFsb2cKKyAgICBtZW51X29rID0gaGVscF9kaWFsb2cubWVudV9vaworICAgIHBhdGhfb2sgPSBoZWxwX2RpYWxvZy5wYXRoX29rCisgICAgb2sgPSBoZWxwX2RpYWxvZy5vaworICAgIGNhbmNlbCA9IGhlbHBfZGlhbG9nLmNhbmNlbAorICAgICMgQXR0cmlidXRlcywgY29uc3RhbnQgb3IgdmFyaWFibGUsIG5lZWRlZCBmb3IgdGVzdHMKKyAgICBtZW51ID0gVmFyKCkKKyAgICBlbnRyeU1lbnUgPSBFbnRyeSgpCisgICAgcGF0aCA9IFZhcigpCisgICAgZW50cnlQYXRoID0gRW50cnkoKQorICAgIHJlc3VsdCA9IE5vbmUKKyAgICBkZXN0cm95ZWQgPSBGYWxzZQorCisgICAgZGVmIGRlc3Ryb3koc2VsZik6CisgICAgICAgIHNlbGYuZGVzdHJveWVkID0gVHJ1ZQorCisKKyMgbWVudV9vayBhbmQgcGF0aF9vayBjYWxsIE1ib3guc2hvd2Vycm9yIGlmIG1lbnUgYW5kIHBhdGggYXJlIG5vdCBvay4KK29yaWdfbWJveCA9IGhlbHBfZGlhbG9nX21vZHVsZS50a01lc3NhZ2VCb3gKK3Nob3dlcnJvciA9IE1ib3guc2hvd2Vycm9yCisKKworY2xhc3MgQ29uZmlnSGVscFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRpYWxvZyA9IER1bW15X2hlbHBfZGlhbG9nKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGhlbHBfZGlhbG9nX21vZHVsZS50a01lc3NhZ2VCb3ggPSBNYm94CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBoZWxwX2RpYWxvZ19tb2R1bGUudGtNZXNzYWdlQm94ID0gb3JpZ19tYm94CisKKyAgICBkZWYgdGVzdF9ibGFua19tZW51KHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5tZW51LnNldCgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmRpYWxvZy5tZW51X29rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hvd2Vycm9yLnRpdGxlLCAnTWVudSBJdGVtIEVycm9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignTm8nLCBzaG93ZXJyb3IubWVzc2FnZSkKKworICAgIGRlZiB0ZXN0X2xvbmdfbWVudShzZWxmKToKKyAgICAgICAgc2VsZi5kaWFsb2cubWVudS5zZXQoJ2hlbGxvJyAqIDEwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGlhbG9nLm1lbnVfb2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG93ZXJyb3IudGl0bGUsICdNZW51IEl0ZW0gRXJyb3InKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsb25nJywgc2hvd2Vycm9yLm1lc3NhZ2UpCisKKyAgICBkZWYgdGVzdF9nb29kX21lbnUoc2VsZik6CisgICAgICAgIHNlbGYuZGlhbG9nLm1lbnUuc2V0KCdoZWxwJykKKyAgICAgICAgc2hvd2Vycm9yLnRpdGxlID0gJ05vIEVycm9yJyAgIyBzaG91bGQgbm90IGJlIGNhbGxlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cubWVudV9vaygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNob3dlcnJvci50aXRsZSwgJ05vIEVycm9yJykKKworICAgIGRlZiB0ZXN0X2JsYW5rX3BhdGgoc2VsZik6CisgICAgICAgIHNlbGYuZGlhbG9nLnBhdGguc2V0KCcnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGlhbG9nLnBhdGhfb2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG93ZXJyb3IudGl0bGUsICdGaWxlIFBhdGggRXJyb3InKQorICAgICAgICBzZWxmLmFzc2VydEluKCdObycsIHNob3dlcnJvci5tZXNzYWdlKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9maWxlX3BhdGgoc2VsZik6CisgICAgICAgIHNlbGYuZGlhbG9nLnBhdGguc2V0KCdmb29iYXInICogMTAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGlhbG9nLnBhdGhfb2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG93ZXJyb3IudGl0bGUsICdGaWxlIFBhdGggRXJyb3InKQorICAgICAgICBzZWxmLmFzc2VydEluKCdub3QgZXhpc3QnLCBzaG93ZXJyb3IubWVzc2FnZSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfdXJsX3BhdGgoc2VsZik6CisgICAgICAgIHNlbGYuZGlhbG9nLnBhdGguc2V0KCd3dy5mb29iYXIuY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmRpYWxvZy5wYXRoX29rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hvd2Vycm9yLnRpdGxlLCAnRmlsZSBQYXRoIEVycm9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm90IGV4aXN0Jywgc2hvd2Vycm9yLm1lc3NhZ2UpCisKKyAgICAgICAgc2VsZi5kaWFsb2cucGF0aC5zZXQoJ2h0dC5mb29iYXIuY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmRpYWxvZy5wYXRoX29rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hvd2Vycm9yLnRpdGxlLCAnRmlsZSBQYXRoIEVycm9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm90IGV4aXN0Jywgc2hvd2Vycm9yLm1lc3NhZ2UpCisKKyAgICBkZWYgdGVzdF9nb29kX3BhdGgoc2VsZik6CisgICAgICAgIHNlbGYuZGlhbG9nLnBhdGguc2V0KCdodHRwczovL2RvY3MucHl0aG9uLm9yZycpCisgICAgICAgIHNob3dlcnJvci50aXRsZSA9ICdObyBFcnJvcicgICMgc2hvdWxkIG5vdCBiZSBjYWxsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGlhbG9nLnBhdGhfb2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG93ZXJyb3IudGl0bGUsICdObyBFcnJvcicpCisKKyAgICBkZWYgdGVzdF9vayhzZWxmKToKKyAgICAgICAgc2VsZi5kaWFsb2cuZGVzdHJveWVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5kaWFsb2cubWVudS5zZXQoJ2hlbHAnKQorICAgICAgICBzZWxmLmRpYWxvZy5wYXRoLnNldCgnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmRpYWxvZy5vaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kaWFsb2cucmVzdWx0LCAoJ2hlbHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwczovL2RvY3MucHl0aG9uLm9yZycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuZGVzdHJveWVkKQorCisgICAgZGVmIHRlc3RfY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5kZXN0cm95ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmRpYWxvZy5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGlhbG9nLnJlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGlhbG9nLmRlc3Ryb3llZCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY29uZmlnZGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY29uZmlnZGlhbG9nLnB5CmluZGV4IDY4ODMxMjMuLmIwNjM2MDEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2NvbmZpZ2RpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jb25maWdkaWFsb2cucHkKQEAgLTEsMzEgKzEsMzEgQEAKLScnJ1VuaXR0ZXN0cyBmb3IgaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CisnJydUZXN0IGlkbGVsaWIuY29uZmlnRGlhbG9nLgogCi1Db3ZlcmFnZTogNDYlIGp1c3QgYnkgY3JlYXRpbmcgZGlhbG9nLiBUaGUgb3RoZXIgaGFsZiBpcyBjaGFuZ2UgY29kZS4KLQorQ292ZXJhZ2U6IDQ2JSBqdXN0IGJ5IGNyZWF0aW5nIGRpYWxvZy4KK1RoZSBvdGhlciBoYWxmIGlzIGNvZGUgZm9yIHdvcmtpbmcgd2l0aCB1c2VyIGN1c3RvbWl6YXRpb25zLgogJycnCi1pbXBvcnQgdW5pdHRlc3QKK2Zyb20gaWRsZWxpYi5jb25maWdEaWFsb2cgaW1wb3J0IENvbmZpZ0RpYWxvZyAgIyBhbHdheXMgdGVzdCBpbXBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworcmVxdWlyZXMoJ2d1aScpCiBmcm9tIHRraW50ZXIgaW1wb3J0IFRrCi1mcm9tIGlkbGVsaWIuY29uZmlnRGlhbG9nIGltcG9ydCBDb25maWdEaWFsb2cKLWZyb20gaWRsZWxpYi5tYWNvc3hTdXBwb3J0IGltcG9ydCBfaW5pdGlhbGl6ZVRrVmFyaWFudFRlc3RzCi0KK2ltcG9ydCB1bml0dGVzdAorZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0IGFzIG1hY29zeAogCiBjbGFzcyBDb25maWdEaWFsb2dUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIHJlcXVpcmVzKCdndWknKQogICAgICAgICBjbHMucm9vdCA9IFRrKCkKLSAgICAgICAgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhjbHMucm9vdCkKKyAgICAgICAgbWFjb3N4Ll9pbml0aWFsaXplVGtWYXJpYW50VGVzdHMoY2xzLnJvb3QpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMucm9vdC51cGRhdGVfaWRsZXRhc2tzKCkKICAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCiAgICAgICAgIGRlbCBjbHMucm9vdAogCiAgICAgZGVmIHRlc3RfZGlhbG9nKHNlbGYpOgotICAgICAgICBkPUNvbmZpZ0RpYWxvZyhzZWxmLnJvb3QsICdUZXN0JywgX3V0ZXN0PVRydWUpCi0gICAgICAgIGQuZGVzdHJveSgpCisgICAgICAgIGQgPSBDb25maWdEaWFsb2coc2VsZi5yb290LCAnVGVzdCcsIF91dGVzdD1UcnVlKQorICAgICAgICBkLnJlbW92ZV92YXJfY2FsbGJhY2tzKCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfZGVsZWdhdG9yLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfZGVsZWdhdG9yLnB5CmluZGV4IGI4YWU1ZWUuLjFmMGJhYTkgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2RlbGVnYXRvci5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9kZWxlZ2F0b3IucHkKQEAgLTQsMzQgKzQsMzcgQEAKIGNsYXNzIERlbGVnYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbXlkZWwoc2VsZik6Ci0gICAgICAgICMgdGVzdCBhIHNpbXBsZSB1c2Ugc2NlbmFyaW8KKyAgICAgICAgIyBUZXN0IGEgc2ltcGxlIHVzZSBzY2VuYXJpby4KIAotICAgICAgICAjIGluaXRpYWxpemUKKyAgICAgICAgIyBJbml0aWFsaXplIGFuIGludCBkZWxlZ2F0b3IuCiAgICAgICAgIG15ZGVsID0gRGVsZWdhdG9yKGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhteWRlbC5kZWxlZ2F0ZSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15ZGVsLl9EZWxlZ2F0b3JfX2NhY2hlLCBzZXQoKSkKLQotICAgICAgICAjIGFkZCBhbiBhdHRyaWJ1dGU6CisgICAgICAgICMgVHJ5aW5nIHRvIGFjY2VzcyBhIG5vbi1hdHRyaWJ1dGUgb2YgaW50IGZhaWxzLgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgbXlkZWwuX19nZXRhdHRyX18sICd4eXonKQorCisgICAgICAgICMgQWRkIHJlYWwgaW50IGF0dHJpYnV0ZSAnYml0X2xlbmd0aCcgYnkgYWNjZXNzaW5nIGl0LgogICAgICAgICBibCA9IG15ZGVsLmJpdF9sZW5ndGgKICAgICAgICAgc2VsZi5hc3NlcnRJcyhibCwgaW50LmJpdF9sZW5ndGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMobXlkZWwuX19kaWN0X19bJ2JpdF9sZW5ndGgnXSwgaW50LmJpdF9sZW5ndGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlkZWwuX0RlbGVnYXRvcl9fY2FjaGUsIHsnYml0X2xlbmd0aCd9KQogCi0gICAgICAgICMgYWRkIGEgc2Vjb25kIGF0dHJpYnV0ZQorICAgICAgICAjIEFkZCBhdHRyaWJ1dGUgJ251bWVyYXRvcicuCiAgICAgICAgIG15ZGVsLm51bWVyYXRvcgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15ZGVsLl9EZWxlZ2F0b3JfX2NhY2hlLCB7J2JpdF9sZW5ndGgnLCAnbnVtZXJhdG9yJ30pCiAKLSAgICAgICAgIyBkZWxldGUgdGhlIHNlY29uZCAod2hpY2gsIGhvd2V2ZXIsIGxlYXZlcyBpdCBpbiB0aGUgbmFtZSBjYWNoZSkKKyAgICAgICAgIyBEZWxldGUgJ251bWVyYXRvcicuCiAgICAgICAgIGRlbCBteWRlbC5udW1lcmF0b3IKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbnVtZXJhdG9yJywgbXlkZWwuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ251bWVyYXRvcicsIG15ZGVsLl9EZWxlZ2F0b3JfX2NhY2hlKQorICAgICAgICAjIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGxlYXZlcyAgaXQgaW4gdGhlIG5hbWUgY2FjaGUuCisgICAgICAgICMgc2VsZi5hc3NlcnRJbignbnVtZXJhdG9yJywgbXlkZWwuX0RlbGVnYXRvcl9fY2FjaGUpCisgICAgICAgICMgSG93ZXZlciwgdGhpcyBpcyBub3QgcmVxdWlyZWQgYW5kIG5vdCBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uCiAKLSAgICAgICAgIyByZXNldCBieSBjYWxsaW5nIC5zZXRkZWxlZ2F0ZSwgd2hpY2ggY2FsbHMgLnJlc2V0Y2FjaGUKLSAgICAgICAgbXlkZWwuc2V0ZGVsZWdhdGUoZmxvYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMobXlkZWwuZGVsZWdhdGUsIGZsb2F0KQorICAgICAgICAjIENoYW5nZSBkZWxlZ2F0ZSB0byBmbG9hdCwgZmlyc3QgcmVzZXR0aW5nIHRoZSBhdHRyaWJ1dGVzLgorICAgICAgICBteWRlbC5zZXRkZWxlZ2F0ZShmbG9hdCkgICMgY2FsbHMgcmVzZXRjYWNoZQogICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdiaXRfbGVuZ3RoJywgbXlkZWwuX19kaWN0X18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlkZWwuX0RlbGVnYXRvcl9fY2FjaGUsIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKG15ZGVsLmRlbGVnYXRlLCBmbG9hdCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9lZGl0bWVudS5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2VkaXRtZW51LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMzE3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9lZGl0bWVudS5weQpAQCAtMCwwICsxLDcxIEBACisnJydUZXN0IChzZWxlY3RlZCkgSURMRSBFZGl0IG1lbnUgaXRlbXMuCisKK0VkaXQgbW9kdWxlcyBoYXZlIHRoZWlyIG93biB0ZXN0IGZpbGVzIGZpbGVzCisnJycKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworcmVxdWlyZXMoJ2d1aScpCitpbXBvcnQgdGtpbnRlciBhcyB0aworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGlkbGVsaWIgaW1wb3J0IFB5U2hlbGwKKworY2xhc3MgUGFzdGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAnJydUZXN0IHBhc3RpbmcgaW50byB3aWRnZXRzIHRoYXQgYWxsb3cgcGFzdGluZy4KKworICAgIE9uIFgxMSwgcmVwbGFjaW5nIHNlbGVjdGlvbnMgcmVxdWlyZXMgdGsgZml4LgorICAgICcnJworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5yb290ID0gcm9vdCA9IHRrLlRrKCkKKyAgICAgICAgUHlTaGVsbC5maXhfeDExX3Bhc3RlKHJvb3QpCisgICAgICAgIGNscy50ZXh0ID0gdGsuVGV4dChyb290KQorICAgICAgICBjbHMuZW50cnkgPSB0ay5FbnRyeShyb290KQorICAgICAgICBjbHMuc3BpbiA9IHRrLlNwaW5ib3gocm9vdCkKKyAgICAgICAgcm9vdC5jbGlwYm9hcmRfY2xlYXIoKQorICAgICAgICByb290LmNsaXBib2FyZF9hcHBlbmQoJ3R3bycpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBkZWwgY2xzLnRleHQsIGNscy5lbnRyeSwgY2xzLnNwaW4KKyAgICAgICAgY2xzLnJvb3QuY2xpcGJvYXJkX2NsZWFyKCkKKyAgICAgICAgY2xzLnJvb3QudXBkYXRlX2lkbGV0YXNrcygpCisgICAgICAgIGNscy5yb290LmRlc3Ryb3koKQorICAgICAgICBkZWwgY2xzLnJvb3QKKworICAgIGRlZiB0ZXN0X3Bhc3RlX3RleHQoc2VsZik6CisgICAgICAgICJUZXN0IHBhc3RpbmcgaW50byB0ZXh0IHdpdGggYW5kIHdpdGhvdXQgYSBzZWxlY3Rpb24uIgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIGZvciB0YWcsIGFucyBpbiAoJycsICdvbmV0d29cbicpLCAoJ3NlbCcsICd0d29cbicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodGFnPXRhZywgYW5zPWFucyk6CisgICAgICAgICAgICAgICAgdGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICAgICAgICAgIHRleHQuaW5zZXJ0KCcxLjAnLCAnb25lJywgdGFnKQorICAgICAgICAgICAgICAgIHRleHQuZXZlbnRfZ2VuZXJhdGUoJzw8UGFzdGU+PicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCBhbnMpCisKKyAgICBkZWYgdGVzdF9wYXN0ZV9lbnRyeShzZWxmKToKKyAgICAgICAgIlRlc3QgcGFzdGluZyBpbnRvIGFuIGVudHJ5IHdpdGggYW5kIHdpdGhvdXQgYSBzZWxlY3Rpb24uIgorICAgICAgICAjIE9uIDMuNiwgZ2VuZXJhdGVkIDw8UGFzdGU+PiBmYWlscyB3aXRob3V0IGVtcHR5IHNlbGVjdCByYW5nZQorICAgICAgICAjIGZvciAnbm8gc2VsZWN0aW9uJy4gIExpdmUgd2lkZ2V0IHdvcmtzIGZpbmUuCisgICAgICAgIGVudHJ5ID0gc2VsZi5lbnRyeQorICAgICAgICBmb3IgZW5kLCBhbnMgaW4gKDAsICdvbmV0d28nKSwgKCdlbmQnLCAndHdvJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbnRyeT1lbnRyeSwgZW5kPWVuZCwgYW5zPWFucyk6CisgICAgICAgICAgICAgICAgZW50cnkuZGVsZXRlKDAsICdlbmQnKQorICAgICAgICAgICAgICAgIGVudHJ5Lmluc2VydCgwLCAnb25lJykKKyAgICAgICAgICAgICAgICBlbnRyeS5zZWxlY3RfcmFuZ2UoMCwgZW5kKSAgIyBzZWUgbm90ZQorICAgICAgICAgICAgICAgIGVudHJ5LmV2ZW50X2dlbmVyYXRlKCc8PFBhc3RlPj4nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuZ2V0KCksIGFucykKKworICAgIGRlZiB0ZXN0X3Bhc3RlX3NwaW4oc2VsZik6CisgICAgICAgICJUZXN0IHBhc3RpbmcgaW50byBhIHNwaW5ib3ggd2l0aCBhbmQgd2l0aG91dCBhIHNlbGVjdGlvbi4iCisgICAgICAgICMgU2VlIG5vdGUgYWJvdmUgZm9yIGVudHJ5LgorICAgICAgICBzcGluID0gc2VsZi5zcGluCisgICAgICAgIGZvciBlbmQsIGFucyBpbiAoMCwgJ29uZXR3bycpLCAoJ2VuZCcsICd0d28nKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuZD1lbmQsIGFucz1hbnMpOgorICAgICAgICAgICAgICAgIHNwaW4uZGVsZXRlKDAsICdlbmQnKQorICAgICAgICAgICAgICAgIHNwaW4uaW5zZXJ0KDAsICdvbmUnKQorICAgICAgICAgICAgICAgIHNwaW4uc2VsZWN0aW9uKCdyYW5nZScsIDAsIGVuZCkgICMgc2VlIG5vdGUKKyAgICAgICAgICAgICAgICBzcGluLmV2ZW50X2dlbmVyYXRlKCc8PFBhc3RlPj4nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Bpbi5nZXQoKSwgYW5zKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2Zvcm1hdHBhcmFncmFwaC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2Zvcm1hdHBhcmFncmFwaC5weQppbmRleCBmNjAzOWU2Li5lNTU2MWQ4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9mb3JtYXRwYXJhZ3JhcGgucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfZm9ybWF0cGFyYWdyYXBoLnB5CkBAIC0yNzYsMTAgKzI3Niw5IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBkZWwgY2xzLnRleHQsIGNscy5mb3JtYXR0ZXIKICAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCiAgICAgICAgIGRlbCBjbHMucm9vdAotICAgICAgICBkZWwgY2xzLnRleHQKLSAgICAgICAgZGVsIGNscy5mb3JtYXR0ZXIKIAogICAgIGRlZiB0ZXN0X3Nob3J0X2xpbmUoc2VsZik6CiAgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJzEuMCcsICJTaG9ydCBsaW5lXG4iKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaGVscF9hYm91dC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2hlbHBfYWJvdXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhMDEyNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2hlbHBfYWJvdXQucHkKQEAgLTAsMCArMSw1MiBAQAorJycnVGVzdCBpZGxlbGliLmhlbHBfYWJvdXQuCisKK0NvdmVyYWdlOgorJycnCitmcm9tIGlkbGVsaWIgaW1wb3J0IGFib3V0RGlhbG9nIGFzIGhlbHBfYWJvdXQKK2Zyb20gaWRsZWxpYiBpbXBvcnQgdGV4dFZpZXcgYXMgdGV4dHZpZXcKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja19pZGxlIGltcG9ydCBGdW5jCitmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfdGsgaW1wb3J0IE1ib3gKK2ltcG9ydCB1bml0dGVzdAorCitBYm91dCA9IGhlbHBfYWJvdXQuQWJvdXREaWFsb2cKK2NsYXNzIER1bW15X2Fib3V0X2RpYWxvZygpOgorICAgICMgRHVtbXkgY2xhc3MgZm9yIHRlc3RpbmcgZmlsZSBkaXNwbGF5IGZ1bmN0aW9ucy4KKyAgICBpZGxlX2NyZWRpdHMgPSBBYm91dC5TaG93SURMRUNyZWRpdHMKKyAgICBpZGxlX3JlYWRtZSA9IEFib3V0LlNob3dJRExFQWJvdXQKKyAgICBpZGxlX25ld3MgPSBBYm91dC5TaG93SURMRU5FV1MKKyAgICAjIENhbGxlZCBieSB0aGUgYWJvdmUKKyAgICBkaXNwbGF5X2ZpbGVfdGV4dCA9IEFib3V0LmRpc3BsYXlfZmlsZV90ZXh0CisKKworY2xhc3MgRGlzcGxheUZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiVGVzdCB0aGF0IC50eHQgZmlsZXMgYXJlIGZvdW5kIGFuZCBwcm9wZXJseSBkZWNvZGVkLiIKKyAgICBkaWFsb2cgPSBEdW1teV9hYm91dF9kaWFsb2coKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLm9yaWdfbWJveCA9IHRleHR2aWV3LnRrTWVzc2FnZUJveAorICAgICAgICBjbHMub3JpZ192aWV3ID0gdGV4dHZpZXcudmlld190ZXh0CisgICAgICAgIGNscy5tYm94ID0gTWJveCgpCisgICAgICAgIGNscy52aWV3ID0gRnVuYygpCisgICAgICAgIHRleHR2aWV3LnRrTWVzc2FnZUJveCA9IGNscy5tYm94CisgICAgICAgIHRleHR2aWV3LnZpZXdfdGV4dCA9IGNscy52aWV3CisgICAgICAgIGNscy5BYm91dCA9IER1bW15X2Fib3V0X2RpYWxvZygpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICB0ZXh0dmlldy50a01lc3NhZ2VCb3ggPSBjbHMub3JpZ19tYm94CisgICAgICAgIHRleHR2aWV3LnZpZXdfdGV4dCA9IGNscy5vcmlnX3ZpZXcKKworICAgIGRlZiB0ZXN0X2ZpbGVfaXNwbGF5KHNlbGYpOgorICAgICAgICBmb3IgaGFuZGxlciBpbiAoc2VsZi5kaWFsb2cuaWRsZV9jcmVkaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWFsb2cuaWRsZV9yZWFkbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy5pZGxlX25ld3MpOgorICAgICAgICAgICAgc2VsZi5tYm94LnNob3dlcnJvci5tZXNzYWdlID0gJycKKyAgICAgICAgICAgIHNlbGYudmlldy5jYWxsZWQgPSBGYWxzZQorICAgICAgICAgICAgaGFuZGxlcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWJveC5zaG93ZXJyb3IubWVzc2FnZSwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudmlldy5jYWxsZWQsIFRydWUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGFyZW5tYXRjaC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3BhcmVubWF0Y2gucHkKaW5kZXggOWFiYTRiZS4uOTVjYzIyYyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGFyZW5tYXRjaC5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9wYXJlbm1hdGNoLnB5CkBAIC0xLDEwICsxLDEzIEBACi0iIiJUZXN0IGlkbGVsaWIuUGFyZW5NYXRjaC4iIiIKLSMgVGhpcyBtdXN0IGN1cnJlbnRseSBiZSBhIGd1aSB0ZXN0IGJlY2F1c2UgUGFyZW5NYXRjaCBtZXRob2RzIHVzZQotIyBzZXZlcmFsIHRleHQgbWV0aG9kcyBub3QgZGVmaW5lZCBvbiBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX3RrLlRleHQuCisnJydUZXN0IGlkbGVsaWIuUGFyZW5NYXRjaC4KKworVGhpcyBtdXN0IGN1cnJlbnRseSBiZSBhIGd1aSB0ZXN0IGJlY2F1c2UgUGFyZW5NYXRjaCBtZXRob2RzIHVzZQorc2V2ZXJhbCB0ZXh0IG1ldGhvZHMgbm90IGRlZmluZWQgb24gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ay5UZXh0LgorJycnCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK3JlcXVpcmVzKCdndWknKQogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jawotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCiBmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0CiBmcm9tIGlkbGVsaWIuUGFyZW5NYXRjaCBpbXBvcnQgUGFyZW5NYXRjaAogCkBAIC0yMCw3ICsyMyw2IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgotICAgICAgICByZXF1aXJlcygnZ3VpJykKICAgICAgICAgY2xzLnJvb3QgPSBUaygpCiAgICAgICAgIGNscy50ZXh0ID0gVGV4dChjbHMucm9vdCkKICAgICAgICAgY2xzLmVkaXR3aW4gPSBEdW1teUVkaXR3aW4oY2xzLnRleHQpCkBAIC0yOSw2ICszMSw3IEBACiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKICAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuZWRpdHdpbgorICAgICAgICBjbHMucm9vdC51cGRhdGVfaWRsZXRhc2tzKCkKICAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCiAgICAgICAgIGRlbCBjbHMucm9vdAogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9wZXJjb2xhdG9yLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGVyY29sYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzBhN2FkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGVyY29sYXRvci5weQpAQCAtMCwwICsxLDExOCBAQAorJycnVGVzdCBQZXJjb2xhdG9yJycnCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK3JlcXVpcmVzKCdndWknKQorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGV4dCwgVGssIEVORAorZnJvbSBpZGxlbGliLlBlcmNvbGF0b3IgaW1wb3J0IFBlcmNvbGF0b3IsIERlbGVnYXRvcgorCisKK2NsYXNzIE15RmlsdGVyKERlbGVnYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBEZWxlZ2F0b3IuX19pbml0X18oc2VsZiwgTm9uZSkKKworICAgIGRlZiBpbnNlcnQoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmluc2VydF9jYWxsZWRfd2l0aCA9IGFyZ3MKKyAgICAgICAgc2VsZi5kZWxlZ2F0ZS5pbnNlcnQoKmFyZ3MpCisKKyAgICBkZWYgZGVsZXRlKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5kZWxldGVfY2FsbGVkX3dpdGggPSBhcmdzCisgICAgICAgIHNlbGYuZGVsZWdhdGUuZGVsZXRlKCphcmdzKQorCisgICAgZGVmIHVwcGVyY2FzZV9pbnNlcnQoc2VsZiwgaW5kZXgsIGNoYXJzLCB0YWdzPU5vbmUpOgorICAgICAgICBjaGFycyA9IGNoYXJzLnVwcGVyKCkKKyAgICAgICAgc2VsZi5kZWxlZ2F0ZS5pbnNlcnQoaW5kZXgsIGNoYXJzKQorCisgICAgZGVmIGxvd2VyY2FzZV9pbnNlcnQoc2VsZiwgaW5kZXgsIGNoYXJzLCB0YWdzPU5vbmUpOgorICAgICAgICBjaGFycyA9IGNoYXJzLmxvd2VyKCkKKyAgICAgICAgc2VsZi5kZWxlZ2F0ZS5pbnNlcnQoaW5kZXgsIGNoYXJzKQorCisgICAgZGVmIGRvbnRfaW5zZXJ0KHNlbGYsIGluZGV4LCBjaGFycywgdGFncz1Ob25lKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFBlcmNvbGF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5yb290ID0gVGsoKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnJvb3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBkZWwgY2xzLnRleHQKKyAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCisgICAgICAgIGRlbCBjbHMucm9vdAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBlcmNvbGF0b3IgPSBQZXJjb2xhdG9yKHNlbGYudGV4dCkKKyAgICAgICAgc2VsZi5maWx0ZXJfb25lID0gTXlGaWx0ZXIoKQorICAgICAgICBzZWxmLmZpbHRlcl90d28gPSBNeUZpbHRlcigpCisgICAgICAgIHNlbGYucGVyY29sYXRvci5pbnNlcnRmaWx0ZXIoc2VsZi5maWx0ZXJfb25lKQorICAgICAgICBzZWxmLnBlcmNvbGF0b3IuaW5zZXJ0ZmlsdGVyKHNlbGYuZmlsdGVyX3R3bykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5wZXJjb2xhdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgRU5EKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0ZmlsdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZWxmLmZpbHRlcl9vbmUuZGVsZWdhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wZXJjb2xhdG9yLnRvcCwgc2VsZi5maWx0ZXJfdHdvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmlsdGVyX3R3by5kZWxlZ2F0ZSwgc2VsZi5maWx0ZXJfb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmlsdGVyX29uZS5kZWxlZ2F0ZSwgc2VsZi5wZXJjb2xhdG9yLmJvdHRvbSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZWZpbHRlcihzZWxmKToKKyAgICAgICAgZmlsdGVyX3RocmVlID0gTXlGaWx0ZXIoKQorICAgICAgICBzZWxmLnBlcmNvbGF0b3IucmVtb3ZlZmlsdGVyKHNlbGYuZmlsdGVyX3R3bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBlcmNvbGF0b3IudG9wLCBzZWxmLmZpbHRlcl9vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuZmlsdGVyX3R3by5kZWxlZ2F0ZSkKKworICAgICAgICBmaWx0ZXJfdGhyZWUgPSBNeUZpbHRlcigpCisgICAgICAgIHNlbGYucGVyY29sYXRvci5pbnNlcnRmaWx0ZXIoc2VsZi5maWx0ZXJfdHdvKQorICAgICAgICBzZWxmLnBlcmNvbGF0b3IuaW5zZXJ0ZmlsdGVyKGZpbHRlcl90aHJlZSkKKyAgICAgICAgc2VsZi5wZXJjb2xhdG9yLnJlbW92ZWZpbHRlcihzZWxmLmZpbHRlcl9vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wZXJjb2xhdG9yLnRvcCwgZmlsdGVyX3RocmVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcl90aHJlZS5kZWxlZ2F0ZSwgc2VsZi5maWx0ZXJfdHdvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmlsdGVyX3R3by5kZWxlZ2F0ZSwgc2VsZi5wZXJjb2xhdG9yLmJvdHRvbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5maWx0ZXJfb25lLmRlbGVnYXRlKQorCisgICAgZGVmIHRlc3RfaW5zZXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHQuZ2V0KCcxLjAnLCBFTkQpLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoc2VsZi5maWx0ZXJfb25lLmluc2VydF9jYWxsZWRfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnaW5zZXJ0JywgJ2ZvbycsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfbW9kaWZ5X2luc2VydChzZWxmKToKKyAgICAgICAgc2VsZi5maWx0ZXJfb25lLmluc2VydCA9IHNlbGYuZmlsdGVyX29uZS51cHBlcmNhc2VfaW5zZXJ0CisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2luc2VydCcsICdiQXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dC5nZXQoJzEuMCcsIEVORCksICdCQVJcbicpCisKKyAgICBkZWYgdGVzdF9tb2RpZnlfY2hhaW5faW5zZXJ0KHNlbGYpOgorICAgICAgICBmaWx0ZXJfdGhyZWUgPSBNeUZpbHRlcigpCisgICAgICAgIHNlbGYucGVyY29sYXRvci5pbnNlcnRmaWx0ZXIoZmlsdGVyX3RocmVlKQorICAgICAgICBzZWxmLmZpbHRlcl90d28uaW5zZXJ0ID0gc2VsZi5maWx0ZXJfdHdvLnVwcGVyY2FzZV9pbnNlcnQKKyAgICAgICAgc2VsZi5maWx0ZXJfb25lLmluc2VydCA9IHNlbGYuZmlsdGVyX29uZS5sb3dlcmNhc2VfaW5zZXJ0CisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2luc2VydCcsICdCYVInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dC5nZXQoJzEuMCcsIEVORCksICdiYXJcbicpCisKKyAgICBkZWYgdGVzdF9kb250X2luc2VydChzZWxmKToKKyAgICAgICAgc2VsZi5maWx0ZXJfb25lLmluc2VydCA9IHNlbGYuZmlsdGVyX29uZS5kb250X2luc2VydAorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZm9vIGJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgRU5EKSwgJ1xuJykKKyAgICAgICAgc2VsZi5maWx0ZXJfb25lLmluc2VydCA9IHNlbGYuZmlsdGVyX29uZS5kb250X2luc2VydAorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZm9vIGJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgRU5EKSwgJ1xuJykKKworICAgIGRlZiB0ZXN0X3dpdGhvdXRfZmlsdGVyKHNlbGYpOgorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dC5nZXQoJzEuMCcsICdlbmQnKSwgJ2hlbGxvXG4nKQorCisgICAgZGVmIHRlc3RfZGVsZXRlKHNlbGYpOgorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZm9vJykKKyAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgJzEuMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgRU5EKSwgJ29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbChzZWxmLmZpbHRlcl9vbmUuZGVsZXRlX2NhbGxlZF93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcxLjAnLCAnMS4yJykpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3JlcGxhY2VkaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9yZXBsYWNlZGlhbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDQ4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9yZXBsYWNlZGlhbG9nLnB5CkBAIC0wLDAgKzEsMjkzIEBACisiIiJVbml0dGVzdCBmb3IgaWRsZWxpYi5SZXBsYWNlRGlhbG9nIiIiCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK3JlcXVpcmVzKCdndWknKQorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jaworZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVGV4dAorZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX3RrIGltcG9ydCBNYm94CitpbXBvcnQgaWRsZWxpYi5TZWFyY2hFbmdpbmUgYXMgc2UKK2ltcG9ydCBpZGxlbGliLlJlcGxhY2VEaWFsb2cgYXMgcmQKKworb3JpZ19tYm94ID0gc2UudGtNZXNzYWdlQm94CitzaG93ZXJyb3IgPSBNYm94LnNob3dlcnJvcgorCisKK2NsYXNzIFJlcGxhY2VEaWFsb2dUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5yb290ID0gVGsoKQorICAgICAgICBjbHMucm9vdC53aXRoZHJhdygpCisgICAgICAgIHNlLnRrTWVzc2FnZUJveCA9IE1ib3gKKyAgICAgICAgY2xzLmVuZ2luZSA9IHNlLlNlYXJjaEVuZ2luZShjbHMucm9vdCkKKyAgICAgICAgY2xzLmRpYWxvZyA9IHJkLlJlcGxhY2VEaWFsb2coY2xzLnJvb3QsIGNscy5lbmdpbmUpCisgICAgICAgIGNscy5kaWFsb2cub2sgPSBNb2NrKCkKKyAgICAgICAgY2xzLnRleHQgPSBUZXh0KGNscy5yb290KQorICAgICAgICBjbHMudGV4dC51bmRvX2Jsb2NrX3N0YXJ0ID0gTW9jaygpCisgICAgICAgIGNscy50ZXh0LnVuZG9fYmxvY2tfc3RvcCA9IE1vY2soKQorICAgICAgICBjbHMuZGlhbG9nLnRleHQgPSBjbHMudGV4dAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgc2UudGtNZXNzYWdlQm94ID0gb3JpZ19tYm94CisgICAgICAgIGRlbCBjbHMudGV4dCwgY2xzLmRpYWxvZywgY2xzLmVuZ2luZQorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2luc2VydCcsICdUaGlzIGlzIGEgc2FtcGxlIHNUcmluZycpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZW5naW5lLnBhdHZhci5zZXQoJycpCisgICAgICAgIHNlbGYuZGlhbG9nLnJlcGx2YXIuc2V0KCcnKQorICAgICAgICBzZWxmLmVuZ2luZS53b3JkdmFyLnNldChGYWxzZSkKKyAgICAgICAgc2VsZi5lbmdpbmUuY2FzZXZhci5zZXQoRmFsc2UpCisgICAgICAgIHNlbGYuZW5naW5lLnJldmFyLnNldChGYWxzZSkKKyAgICAgICAgc2VsZi5lbmdpbmUud3JhcHZhci5zZXQoVHJ1ZSkKKyAgICAgICAgc2VsZi5lbmdpbmUuYmFja3Zhci5zZXQoRmFsc2UpCisgICAgICAgIHNob3dlcnJvci50aXRsZSA9ICcnCisgICAgICAgIHNob3dlcnJvci5tZXNzYWdlID0gJycKKyAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgJ2VuZCcpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3NpbXBsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlcGxhY2UgZnVuY3Rpb24gd2l0aCBhbGwgb3B0aW9ucyBhdCBkZWZhdWx0IHNldHRpbmcuCisgICAgICAgICMgV3JhcCBhcm91bmQgLSBUcnVlCisgICAgICAgICMgUmVndWxhciBFeHByZXNzaW9uIC0gRmFsc2UKKyAgICAgICAgIyBNYXRjaCBjYXNlIC0gRmFsc2UKKyAgICAgICAgIyBNYXRjaCB3b3JkIC0gRmFsc2UKKyAgICAgICAgIyBEaXJlY3Rpb24gLSBGb3J3YXJkcworICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBwdiA9IHNlbGYuZW5naW5lLnBhdHZhcgorICAgICAgICBydiA9IHNlbGYuZGlhbG9nLnJlcGx2YXIKKyAgICAgICAgcmVwbGFjZSA9IHNlbGYuZGlhbG9nLnJlcGxhY2VfaXQKKworICAgICAgICAjIHRlc3QgYWNjZXNzb3IgbWV0aG9kCisgICAgICAgIHNlbGYuZW5naW5lLnNldHBhdCgnYXNkZicpCisgICAgICAgIGVxdWFsKHNlbGYuZW5naW5lLmdldHBhdCgpLCBwdi5nZXQoKSkKKworICAgICAgICAjIHRleHQgZm91bmQgYW5kIHJlcGxhY2VkCisgICAgICAgIHB2LnNldCgnYScpCisgICAgICAgIHJ2LnNldCgnYXNkZicpCisgICAgICAgIHNlbGYuZGlhbG9nLm9wZW4oc2VsZi50ZXh0KQorICAgICAgICByZXBsYWNlKCkKKyAgICAgICAgZXF1YWwodGV4dC5nZXQoJzEuOCcsICcxLjEyJyksICdhc2RmJykKKworICAgICAgICAjIGRvbnQgIm1hdGNoIHdvcmQiIGNhc2UKKyAgICAgICAgdGV4dC5tYXJrX3NldCgnaW5zZXJ0JywgJzEuMCcpCisgICAgICAgIHB2LnNldCgnaXMnKQorICAgICAgICBydi5zZXQoJ2hlbGxvJykKKyAgICAgICAgcmVwbGFjZSgpCisgICAgICAgIGVxdWFsKHRleHQuZ2V0KCcxLjInLCAnMS43JyksICdoZWxsbycpCisKKyAgICAgICAgIyBkb250ICJtYXRjaCBjYXNlIiBjYXNlCisgICAgICAgIHB2LnNldCgnc3RyaW5nJykKKyAgICAgICAgcnYuc2V0KCd3b3JsZCcpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBlcXVhbCh0ZXh0LmdldCgnMS4yMycsICcxLjI4JyksICd3b3JsZCcpCisKKyAgICAgICAgIyB3aXRob3V0ICJyZWd1bGFyIGV4cHJlc3Npb24iIGNhc2UKKyAgICAgICAgdGV4dC5tYXJrX3NldCgnaW5zZXJ0JywgJ2VuZCcpCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnXG5saW5lNDI6JykKKyAgICAgICAgYmVmb3JlX3RleHQgPSB0ZXh0LmdldCgnMS4wJywgJ2VuZCcpCisgICAgICAgIHB2LnNldCgnW2Etel1bXGRdKycpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBhZnRlcl90ZXh0ID0gdGV4dC5nZXQoJzEuMCcsICdlbmQnKQorICAgICAgICBlcXVhbChiZWZvcmVfdGV4dCwgYWZ0ZXJfdGV4dCkKKworICAgICAgICAjIHRlc3Qgd2l0aCB3cmFwIGFyb3VuZCBzZWxlY3RlZCBhbmQgY29tcGxldGUgYSBjeWNsZQorICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMS45JykKKyAgICAgICAgcHYuc2V0KCdpJykKKyAgICAgICAgcnYuc2V0KCdqJykKKyAgICAgICAgcmVwbGFjZSgpCisgICAgICAgIGVxdWFsKHRleHQuZ2V0KCcxLjgnKSwgJ2knKQorICAgICAgICBlcXVhbCh0ZXh0LmdldCgnMi4xJyksICdqJykKKyAgICAgICAgcmVwbGFjZSgpCisgICAgICAgIGVxdWFsKHRleHQuZ2V0KCcyLjEnKSwgJ2onKQorICAgICAgICBlcXVhbCh0ZXh0LmdldCgnMS44JyksICdqJykKKyAgICAgICAgYmVmb3JlX3RleHQgPSB0ZXh0LmdldCgnMS4wJywgJ2VuZCcpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBhZnRlcl90ZXh0ID0gdGV4dC5nZXQoJzEuMCcsICdlbmQnKQorICAgICAgICBlcXVhbChiZWZvcmVfdGV4dCwgYWZ0ZXJfdGV4dCkKKworICAgICAgICAjIHRleHQgbm90IGZvdW5kCisgICAgICAgIGJlZm9yZV90ZXh0ID0gdGV4dC5nZXQoJzEuMCcsICdlbmQnKQorICAgICAgICBwdi5zZXQoJ2Zvb2JhcicpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBhZnRlcl90ZXh0ID0gdGV4dC5nZXQoJzEuMCcsICdlbmQnKQorICAgICAgICBlcXVhbChiZWZvcmVfdGV4dCwgYWZ0ZXJfdGV4dCkKKworICAgICAgICAjIHRlc3QgYWNjZXNzIG1ldGhvZAorICAgICAgICBzZWxmLmRpYWxvZy5maW5kX2l0KDApCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3dyYXBfYXJvdW5kKHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBwdiA9IHNlbGYuZW5naW5lLnBhdHZhcgorICAgICAgICBydiA9IHNlbGYuZGlhbG9nLnJlcGx2YXIKKyAgICAgICAgcmVwbGFjZSA9IHNlbGYuZGlhbG9nLnJlcGxhY2VfaXQKKyAgICAgICAgc2VsZi5lbmdpbmUud3JhcHZhci5zZXQoRmFsc2UpCisKKyAgICAgICAgIyByZXBsYWNlIGNhbmRpZGF0ZSBmb3VuZCBib3RoIGFmdGVyIGFuZCBiZWZvcmUgJ2luc2VydCcKKyAgICAgICAgdGV4dC5tYXJrX3NldCgnaW5zZXJ0JywgJzEuNCcpCisgICAgICAgIHB2LnNldCgnaScpCisgICAgICAgIHJ2LnNldCgnaicpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBlcXVhbCh0ZXh0LmdldCgnMS4yJyksICdpJykKKyAgICAgICAgZXF1YWwodGV4dC5nZXQoJzEuNScpLCAnaicpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBlcXVhbCh0ZXh0LmdldCgnMS4yJyksICdpJykKKyAgICAgICAgZXF1YWwodGV4dC5nZXQoJzEuMjAnKSwgJ2onKQorICAgICAgICByZXBsYWNlKCkKKyAgICAgICAgZXF1YWwodGV4dC5nZXQoJzEuMicpLCAnaScpCisKKyAgICAgICAgIyByZXBsYWNlIGNhbmRpZGF0ZSBmb3VuZCBvbmx5IGJlZm9yZSAnaW5zZXJ0JworICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMS44JykKKyAgICAgICAgcHYuc2V0KCdpcycpCisgICAgICAgIGJlZm9yZV90ZXh0ID0gdGV4dC5nZXQoJzEuMCcsICdlbmQnKQorICAgICAgICByZXBsYWNlKCkKKyAgICAgICAgYWZ0ZXJfdGV4dCA9IHRleHQuZ2V0KCcxLjAnLCAnZW5kJykKKyAgICAgICAgZXF1YWwoYmVmb3JlX3RleHQsIGFmdGVyX3RleHQpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3dob2xlX3dvcmQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHB2ID0gc2VsZi5lbmdpbmUucGF0dmFyCisgICAgICAgIHJ2ID0gc2VsZi5kaWFsb2cucmVwbHZhcgorICAgICAgICByZXBsYWNlID0gc2VsZi5kaWFsb2cucmVwbGFjZV9pdAorICAgICAgICBzZWxmLmVuZ2luZS53b3JkdmFyLnNldChUcnVlKQorCisgICAgICAgIHB2LnNldCgnaXMnKQorICAgICAgICBydi5zZXQoJ2hlbGxvJykKKyAgICAgICAgcmVwbGFjZSgpCisgICAgICAgIGVxdWFsKHRleHQuZ2V0KCcxLjAnLCAnMS40JyksICdUaGlzJykKKyAgICAgICAgZXF1YWwodGV4dC5nZXQoJzEuNScsICcxLjEwJyksICdoZWxsbycpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX21hdGNoX2Nhc2Uoc2VsZik6CisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIHB2ID0gc2VsZi5lbmdpbmUucGF0dmFyCisgICAgICAgIHJ2ID0gc2VsZi5kaWFsb2cucmVwbHZhcgorICAgICAgICByZXBsYWNlID0gc2VsZi5kaWFsb2cucmVwbGFjZV9pdAorICAgICAgICBzZWxmLmVuZ2luZS5jYXNldmFyLnNldChUcnVlKQorCisgICAgICAgIGJlZm9yZV90ZXh0ID0gc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpCisgICAgICAgIHB2LnNldCgndGhpcycpCisgICAgICAgIHJ2LnNldCgndGhhdCcpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBhZnRlcl90ZXh0ID0gc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpCisgICAgICAgIGVxdWFsKGJlZm9yZV90ZXh0LCBhZnRlcl90ZXh0KQorCisgICAgICAgIHB2LnNldCgnVGhpcycpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBlcXVhbCh0ZXh0LmdldCgnMS4wJywgJzEuNCcpLCAndGhhdCcpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX3JlZ2V4KHNlbGYpOgorICAgICAgICBlcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICBwdiA9IHNlbGYuZW5naW5lLnBhdHZhcgorICAgICAgICBydiA9IHNlbGYuZGlhbG9nLnJlcGx2YXIKKyAgICAgICAgcmVwbGFjZSA9IHNlbGYuZGlhbG9nLnJlcGxhY2VfaXQKKyAgICAgICAgc2VsZi5lbmdpbmUucmV2YXIuc2V0KFRydWUpCisKKyAgICAgICAgYmVmb3JlX3RleHQgPSB0ZXh0LmdldCgnMS4wJywgJ2VuZCcpCisgICAgICAgIHB2LnNldCgnW2Etel1bXGRdKycpCisgICAgICAgIHJ2LnNldCgnaGVsbG8nKQorICAgICAgICByZXBsYWNlKCkKKyAgICAgICAgYWZ0ZXJfdGV4dCA9IHRleHQuZ2V0KCcxLjAnLCAnZW5kJykKKyAgICAgICAgZXF1YWwoYmVmb3JlX3RleHQsIGFmdGVyX3RleHQpCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdcbmxpbmU0MicpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBlcXVhbCh0ZXh0LmdldCgnMi4wJywgJzIuOCcpLCAnbGluaGVsbG8nKQorCisgICAgICAgIHB2LnNldCgnJykKKyAgICAgICAgcmVwbGFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Vycm9yJywgc2hvd2Vycm9yLnRpdGxlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdFbXB0eScsIHNob3dlcnJvci5tZXNzYWdlKQorCisgICAgICAgIHB2LnNldCgnW1xkJykKKyAgICAgICAgcmVwbGFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Vycm9yJywgc2hvd2Vycm9yLnRpdGxlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdQYXR0ZXJuJywgc2hvd2Vycm9yLm1lc3NhZ2UpCisKKyAgICAgICAgc2hvd2Vycm9yLnRpdGxlID0gJycKKyAgICAgICAgc2hvd2Vycm9yLm1lc3NhZ2UgPSAnJworICAgICAgICBwdi5zZXQoJ1thXScpCisgICAgICAgIHJ2LnNldCgndGVzdFxcJykKKyAgICAgICAgcmVwbGFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Vycm9yJywgc2hvd2Vycm9yLnRpdGxlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdJbnZhbGlkIFJlcGxhY2UgRXhwcmVzc2lvbicsIHNob3dlcnJvci5tZXNzYWdlKQorCisgICAgICAgICMgdGVzdCBhY2Nlc3MgbWV0aG9kCisgICAgICAgIHNlbGYuZW5naW5lLnNldGNvb2tlZHBhdCgiXCciKQorICAgICAgICBlcXVhbChwdi5nZXQoKSwgIlxcJyIpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX2JhY2t3YXJkcyhzZWxmKToKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHYgPSBzZWxmLmVuZ2luZS5wYXR2YXIKKyAgICAgICAgcnYgPSBzZWxmLmRpYWxvZy5yZXBsdmFyCisgICAgICAgIHJlcGxhY2UgPSBzZWxmLmRpYWxvZy5yZXBsYWNlX2l0CisgICAgICAgIHNlbGYuZW5naW5lLmJhY2t2YXIuc2V0KFRydWUpCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdcbmlzIGFzICcpCisKKyAgICAgICAgcHYuc2V0KCdpcycpCisgICAgICAgIHJ2LnNldCgnd2FzJykKKyAgICAgICAgcmVwbGFjZSgpCisgICAgICAgIGVxdWFsKHRleHQuZ2V0KCcxLjInLCAnMS40JyksICdpcycpCisgICAgICAgIGVxdWFsKHRleHQuZ2V0KCcyLjAnLCAnMi4zJyksICd3YXMnKQorICAgICAgICByZXBsYWNlKCkKKyAgICAgICAgZXF1YWwodGV4dC5nZXQoJzEuNScsICcxLjgnKSwgJ3dhcycpCisgICAgICAgIHJlcGxhY2UoKQorICAgICAgICBlcXVhbCh0ZXh0LmdldCgnMS4yJywgJzEuNScpLCAnd2FzJykKKworICAgIGRlZiB0ZXN0X3JlcGxhY2VfYWxsKHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIHB2ID0gc2VsZi5lbmdpbmUucGF0dmFyCisgICAgICAgIHJ2ID0gc2VsZi5kaWFsb2cucmVwbHZhcgorICAgICAgICByZXBsYWNlX2FsbCA9IHNlbGYuZGlhbG9nLnJlcGxhY2VfYWxsCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdcbicpCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCB0ZXh0LmdldCgnMS4wJywgJ2VuZCcpKjEwMCkKKyAgICAgICAgcHYuc2V0KCdpcycpCisgICAgICAgIHJ2LnNldCgnd2FzJykKKyAgICAgICAgcmVwbGFjZV9hbGwoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdpcycsIHRleHQuZ2V0KCcxLjAnLCAnZW5kJykpCisKKyAgICAgICAgc2VsZi5lbmdpbmUucmV2YXIuc2V0KFRydWUpCisgICAgICAgIHB2LnNldCgnJykKKyAgICAgICAgcmVwbGFjZV9hbGwoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdlcnJvcicsIHNob3dlcnJvci50aXRsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignRW1wdHknLCBzaG93ZXJyb3IubWVzc2FnZSkKKworICAgICAgICBwdi5zZXQoJ1tzXVtUXScpCisgICAgICAgIHJ2LnNldCgnXFwnKQorICAgICAgICByZXBsYWNlX2FsbCgpCisKKyAgICAgICAgc2VsZi5lbmdpbmUucmV2YXIuc2V0KEZhbHNlKQorICAgICAgICBwdi5zZXQoJ3RleHQgd2hpY2ggaXMgbm90IHByZXNlbnQnKQorICAgICAgICBydi5zZXQoJ2Zvb2JhcicpCisgICAgICAgIHJlcGxhY2VfYWxsKCkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29tbWFuZChzZWxmKToKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICBwdiA9IHNlbGYuZW5naW5lLnBhdHZhcgorICAgICAgICBydiA9IHNlbGYuZGlhbG9nLnJlcGx2YXIKKyAgICAgICAgcmVwbGFjZV9maW5kID0gc2VsZi5kaWFsb2cuZGVmYXVsdF9jb21tYW5kCisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHB2LnNldCgnVGhpcycpCisgICAgICAgIHJ2LnNldCgnd2FzJykKKyAgICAgICAgcmVwbGFjZV9maW5kKCkKKyAgICAgICAgZXF1YWwodGV4dC5nZXQoJ3NlbC5maXJzdCcsICdzZWwubGFzdCcpLCAnd2FzJykKKworICAgICAgICBzZWxmLmVuZ2luZS5yZXZhci5zZXQoVHJ1ZSkKKyAgICAgICAgcHYuc2V0KCcnKQorICAgICAgICByZXBsYWNlX2ZpbmQoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGRpYWxvZy5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGRpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTBjODY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfc2VhcmNoZGlhbG9nLnB5CkBAIC0wLDAgKzEsODAgQEAKKyIiIlRlc3QgU2VhcmNoRGlhbG9nIGNsYXNzIGluIFNlYXJjaERpYWxvZ3VlLnB5IiIiCisKKyMgRG9lcyBub3QgY3VycmVudGx5IHRlc3QgdGhlIGV2ZW50IGhhbmRsZXIgd3JhcHBlcnMuCisjIEEgdXNhZ2UgdGVzdCBzaG91bGQgc2ltdWxhdGUgY2xpY2tzIGFuZCBjaGVjayBoaWxpZ2h0aW5nLgorIyBUZXN0cyBuZWVkIHRvIGJlIGNvb3JkaW5hdGVkIHdpdGggU2VhcmNoRGlhbG9nQmFzZSB0ZXN0cworIyB0byBhdm9pZCBkdXBsaWNhdGlvbi4KKworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCityZXF1aXJlcygnZ3VpJykKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGtpbnRlciBhcyB0aworZnJvbSB0a2ludGVyIGltcG9ydCBCb29sZWFuVmFyCitpbXBvcnQgaWRsZWxpYi5TZWFyY2hFbmdpbmUgYXMgc2UKK2ltcG9ydCBpZGxlbGliLlNlYXJjaERpYWxvZyBhcyBzZAorCisKK2NsYXNzIFNlYXJjaERpYWxvZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnJvb3QgPSB0ay5UaygpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZW5naW5lID0gc2UuU2VhcmNoRW5naW5lKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5kaWFsb2cgPSBzZC5TZWFyY2hEaWFsb2coc2VsZi5yb290LCBzZWxmLmVuZ2luZSkKKyAgICAgICAgc2VsZi50ZXh0ID0gdGsuVGV4dChzZWxmLnJvb3QpCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJzEuMCcsICdIZWxsbyBXb3JsZCEnKQorCisgICAgZGVmIHRlc3RfZmluZF9hZ2FpbihzZWxmKToKKyAgICAgICAgIyBTZWFyY2ggZm9yIHZhcmlvdXMgZXhwcmVzc2lvbnMKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorCisgICAgICAgIHNlbGYuZW5naW5lLnNldHBhdCgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmRpYWxvZy5maW5kX2FnYWluKHRleHQpKQorCisgICAgICAgIHNlbGYuZW5naW5lLnNldHBhdCgnSGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuZmluZF9hZ2Fpbih0ZXh0KSkKKworICAgICAgICBzZWxmLmVuZ2luZS5zZXRwYXQoJ0dvb2RieWUnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZGlhbG9nLmZpbmRfYWdhaW4odGV4dCkpCisKKyAgICAgICAgc2VsZi5lbmdpbmUuc2V0cGF0KCdXb3JsZCEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuZmluZF9hZ2Fpbih0ZXh0KSkKKworICAgICAgICBzZWxmLmVuZ2luZS5zZXRwYXQoJ0hlbGxvIFdvcmxkIScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRpYWxvZy5maW5kX2FnYWluKHRleHQpKQorCisgICAgICAgICMgUmVndWxhciBleHByZXNzaW9uCisgICAgICAgIHNlbGYuZW5naW5lLnJldmFyID0gQm9vbGVhblZhcihzZWxmLnJvb3QsIFRydWUpCisgICAgICAgIHNlbGYuZW5naW5lLnNldHBhdCgnV1thZWlvdXldcicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRpYWxvZy5maW5kX2FnYWluKHRleHQpKQorCisgICAgZGVmIHRlc3RfZmluZF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgICMgU2VsZWN0IHNvbWUgdGV4dCBhbmQgbWFrZSBzdXJlIGl0J3MgZm91bmQKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICAjIEFkZCBhZGRpdGlvbmFsIGxpbmUgdG8gZmluZAorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCcyLjAnLCAnSGVsbG8gV29ybGQhJykKKworICAgICAgICB0ZXh0LnRhZ19hZGQoJ3NlbCcsICcxLjAnLCAnMS40JykgICAgICAgIyBTZWxlY3QgJ0hlbGxvJworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuZmluZF9zZWxlY3Rpb24odGV4dCkpCisKKyAgICAgICAgdGV4dC50YWdfcmVtb3ZlKCdzZWwnLCAnMS4wJywgJ2VuZCcpCisgICAgICAgIHRleHQudGFnX2FkZCgnc2VsJywgJzEuNicsICcxLjExJykgICAgICAjIFNlbGVjdCAnV29ybGQhJworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuZmluZF9zZWxlY3Rpb24odGV4dCkpCisKKyAgICAgICAgdGV4dC50YWdfcmVtb3ZlKCdzZWwnLCAnMS4wJywgJ2VuZCcpCisgICAgICAgIHRleHQudGFnX2FkZCgnc2VsJywgJzEuMCcsICcxLjExJykgICAgICAjIFNlbGVjdCAnSGVsbG8gV29ybGQhJworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuZmluZF9zZWxlY3Rpb24odGV4dCkpCisKKyAgICAgICAgIyBSZW1vdmUgYWRkaXRpb25hbCBsaW5lCisgICAgICAgIHRleHQuZGVsZXRlKCcyLjAnLCAnZW5kJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9zZWFyY2hlbmdpbmUucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9zZWFyY2hlbmdpbmUucHkKaW5kZXggYzc3OTJmYi4uZWRiZDU1OCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfc2VhcmNoZW5naW5lLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGVuZ2luZS5weQpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgIGVuZ2luZS5yZXZhci5zZXQoMSkKICAgICAgICAgRXF1YWwoZW5naW5lLmdldHByb2coKSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNYm94LnNob3dlcnJvci5tZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnRXJyb3I6IG5vdGhpbmcgdG8gcmVwZWF0XG5QYXR0ZXJuOiArJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnRXJyb3I6IG5vdGhpbmcgdG8gcmVwZWF0IGF0IHBvc2l0aW9uIDBcblBhdHRlcm46ICsnKQogCiAgICAgZGVmIHRlc3RfcmVwb3J0X2Vycm9yKHNlbGYpOgogICAgICAgICBzaG93ZXJyb3IgPSBNYm94LnNob3dlcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdGV4dHZpZXcucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF90ZXh0dmlldy5weQppbmRleCA2OGU1YjgyLi4wMmQxNDcyIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF90ZXh0dmlldy5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF90ZXh0dmlldy5weQpAQCAtMSw0ICsxLDQgQEAKLScnJ1Rlc3QgdGhlIGZ1bmN0aW9ucyBhbmQgbWFpbiBjbGFzcyBtZXRob2Qgb2YgdGV4dFZpZXcucHkuCisnJydUZXN0IGlkbGVsaWIudGV4dFZpZXcuCiAKIFNpbmNlIGFsbCBtZXRob2RzIGFuZCBmdW5jdGlvbnMgY3JlYXRlIChvciBkZXN0cm95KSBhIFRleHRWaWV3ZXIsIHdoaWNoCiBpcyBhIHdpZGdldCBjb250YWluaW5nIG11bHRpcGxlIHdpZGdldHMsIGFsbCB0ZXN0cyBtdXN0IGJlIGd1aSB0ZXN0cy4KQEAgLTIyLDcgKzIyLDkgQEAKICAgICByb290ID0gVGsoKQogCiBkZWYgdGVhckRvd25Nb2R1bGUoKToKLSAgICBnbG9iYWwgcm9vdAorICAgIGdsb2JhbCByb290LCBUVgorICAgIGRlbCBUVgorICAgIHJvb3QudXBkYXRlX2lkbGV0YXNrcygpCiAgICAgcm9vdC5kZXN0cm95KCkgICMgcHlmbGFrZXMgZmFsc2VseSBzZWVzIHJvb3QgYXMgdW5kZWZpbmVkCiAgICAgZGVsIHJvb3QKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdW5kb2RlbGVnYXRvci5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3VuZG9kZWxlZ2F0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI4M2M5OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3VuZG9kZWxlZ2F0b3IucHkKQEAgLTAsMCArMSwxMzUgQEAKKyIiIlVuaXR0ZXN0IGZvciBVbmRvRGVsZWdhdG9yIGluIGlkbGVsaWIuVW5kb0RlbGVnYXRvci4KKworQ292ZXJhZ2UgYWJvdXQgODAlIChyZXRlc3QpLgorIiIiCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK3JlcXVpcmVzKCdndWknKQorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jaworZnJvbSB0a2ludGVyIGltcG9ydCBUZXh0LCBUaworZnJvbSBpZGxlbGliLlVuZG9EZWxlZ2F0b3IgaW1wb3J0IFVuZG9EZWxlZ2F0b3IKK2Zyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCisKKworY2xhc3MgVW5kb0RlbGVnYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnJvb3QgPSBUaygpCisgICAgICAgIGNscy50ZXh0ID0gVGV4dChjbHMucm9vdCkKKyAgICAgICAgY2xzLnBlcmNvbGF0b3IgPSBQZXJjb2xhdG9yKGNscy50ZXh0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnBlcmNvbGF0b3IucmVkaXIuY2xvc2UoKQorICAgICAgICBkZWwgY2xzLnBlcmNvbGF0b3IsIGNscy50ZXh0CisgICAgICAgIGNscy5yb290LmRlc3Ryb3koKQorICAgICAgICBkZWwgY2xzLnJvb3QKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kZWxlZ2F0b3IgPSBVbmRvRGVsZWdhdG9yKCkKKyAgICAgICAgc2VsZi5wZXJjb2xhdG9yLmluc2VydGZpbHRlcihzZWxmLmRlbGVnYXRvcikKKyAgICAgICAgc2VsZi5kZWxlZ2F0b3IuYmVsbCA9IE1vY2sod3JhcHM9c2VsZi5kZWxlZ2F0b3IuYmVsbCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5wZXJjb2xhdG9yLnJlbW92ZWZpbHRlcihzZWxmLmRlbGVnYXRvcikKKyAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgJ2VuZCcpCisgICAgICAgIHNlbGYuZGVsZWdhdG9yLnJlc2V0Y2FjaGUoKQorCisgICAgZGVmIHRlc3RfdW5kb19ldmVudChzZWxmKToKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZm9vYmFyJykKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdoJykKKyAgICAgICAgdGV4dC5ldmVudF9nZW5lcmF0ZSgnPDx1bmRvPj4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuZ2V0KCcxLjAnLCAnZW5kJyksICdcbicpCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdmb28nKQorICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2JhcicpCisgICAgICAgIHRleHQuZGVsZXRlKCcxLjInLCAnMS40JykKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdoZWxsbycpCisgICAgICAgIHRleHQuZXZlbnRfZ2VuZXJhdGUoJzw8dW5kbz4+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LmdldCgnMS4wJywgJzEuNCcpLCAnZm9hcicpCisgICAgICAgIHRleHQuZXZlbnRfZ2VuZXJhdGUoJzw8dW5kbz4+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LmdldCgnMS4wJywgJzEuNicpLCAnZm9vYmFyJykKKyAgICAgICAgdGV4dC5ldmVudF9nZW5lcmF0ZSgnPDx1bmRvPj4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuZ2V0KCcxLjAnLCAnMS4zJyksICdmb28nKQorICAgICAgICB0ZXh0LmV2ZW50X2dlbmVyYXRlKCc8PHVuZG8+PicpCisgICAgICAgIHNlbGYuZGVsZWdhdG9yLnVuZG9fZXZlbnQoJ2V2ZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGVsZWdhdG9yLmJlbGwuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVkb19ldmVudChzZWxmKToKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZm9vJykKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdiYXInKQorICAgICAgICB0ZXh0LmRlbGV0ZSgnMS4wJywgJzEuMycpCisgICAgICAgIHRleHQuZXZlbnRfZ2VuZXJhdGUoJzw8dW5kbz4+JykKKyAgICAgICAgdGV4dC5ldmVudF9nZW5lcmF0ZSgnPDxyZWRvPj4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuZ2V0KCcxLjAnLCAnMS4zJyksICdiYXInKQorICAgICAgICB0ZXh0LmV2ZW50X2dlbmVyYXRlKCc8PHJlZG8+PicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmRlbGVnYXRvci5iZWxsLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2R1bXBfZXZlbnQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBEdW1wX2V2ZW50IGNhbm5vdCBiZSB0ZXN0ZWQgZGlyZWN0bHkgd2l0aG91dCBjaGFuZ2luZworICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFNvLCB0ZXN0IHN0YXRlbWVudHMgaW4gZHVtcF9ldmVudAorICAgICAgICBpbmRpcmVjdGx5CisgICAgICAgICIiIgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIGQgPSBzZWxmLmRlbGVnYXRvcgorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZm9vJykKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdiYXInKQorICAgICAgICB0ZXh0LmRlbGV0ZSgnMS4yJywgJzEuNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCgoZC5wb2ludGVyLCBkLmNhbl9tZXJnZSksICgzLCBUcnVlKSkKKyAgICAgICAgdGV4dC5ldmVudF9nZW5lcmF0ZSgnPDx1bmRvPj4nKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoKGQucG9pbnRlciwgZC5jYW5fbWVyZ2UpLCAoMiwgRmFsc2UpKQorCisgICAgZGVmIHRlc3RfZ2V0X3NldF9zYXZlZChzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoZSBnZXR0ZXIgbWV0aG9kIGdldF9zYXZlZAorICAgICAgICAjIHRlc3QgdGhlIHNldHRlciBtZXRob2Qgc2V0X3NhdmVkCisgICAgICAgICMgaW5kaXJlY3RseSB0ZXN0IGNoZWNrX3NhdmVkCisgICAgICAgIGQgPSBzZWxmLmRlbGVnYXRvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldF9zYXZlZCgpKQorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZC5nZXRfc2F2ZWQoKSkKKyAgICAgICAgZC5zYXZlZF9jaGFuZ2VfaG9vayA9IE1vY2soKQorCisgICAgICAgIGQuc2V0X3NhdmVkKFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb2ludGVyLCBkLnNhdmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5zYXZlZF9jaGFuZ2VfaG9vay5jYWxsZWQpCisKKyAgICAgICAgZC5zZXRfc2F2ZWQoRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5zYXZlZCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnNhdmVkX2NoYW5nZV9ob29rLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3VuZG9fc3RhcnRfc3RvcChzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoZSB1bmRvX2Jsb2NrX3N0YXJ0IGFuZCB1bmRvX2Jsb2NrX3N0b3AgbWV0aG9kcworICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdmb28nKQorICAgICAgICBzZWxmLmRlbGVnYXRvci51bmRvX2Jsb2NrX3N0YXJ0KCkKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdiYXInKQorICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2JhcicpCisgICAgICAgIHNlbGYuZGVsZWdhdG9yLnVuZG9fYmxvY2tfc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5nZXQoJzEuMCcsICcxLjMnKSwgJ2ZvbycpCisKKyAgICAgICAgIyB0ZXN0IGFub3RoZXIgY29kZSBwYXRoCisgICAgICAgIHNlbGYuZGVsZWdhdG9yLnVuZG9fYmxvY2tfc3RhcnQoKQorICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2JhcicpCisgICAgICAgIHNlbGYuZGVsZWdhdG9yLnVuZG9fYmxvY2tfc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5nZXQoJzEuMCcsICcxLjMnKSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9hZGRjbWQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgIyB3aGVuIG51bWJlciBvZiB1bmRvIG9wZXJhdGlvbnMgZXhjZWVkcyBtYXhfdW5kbworICAgICAgICBzZWxmLmRlbGVnYXRvci5tYXhfdW5kbyA9IG1heF91bmRvID0gMTAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWF4X3VuZG8gKyAxMCk6CisgICAgICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4oc2VsZi5kZWxlZ2F0b3IudW5kb2xpc3QpLCBtYXhfdW5kbykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfd2FybmluZy5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dhcm5pbmcucHkKaW5kZXggNTRhYzk5My4uMTg2MjdkZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfd2FybmluZy5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF93YXJuaW5nLnB5CkBAIC02OCwxNSArNjgsNiBAQAogICAgICAgICAgICAgICAgICAgICAnVGVzdCcsIFVzZXJXYXJuaW5nLCAndGVzdF93YXJuaW5nLnB5JywgOTksIGYsICdMaW5lIG9mIGNvZGUnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaGVsbG1zZy5zcGxpdGxpbmVzKCksIGYuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkpCiAKLWNsYXNzIEltcG9ydFdhcm5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9pZGxldmVyKHNlbGYpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgaW1wb3J0IGlkbGVsaWIuaWRsZXZlcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3Wy0xXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInZlcnNpb24iLCBzdHIod1stMV0ubWVzc2FnZSkpCi0KIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfd2lkZ2V0cmVkaXIucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF93aWRnZXRyZWRpci5weQppbmRleCA2NDQwNTYxLi5jNjhkZmNjIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF93aWRnZXRyZWRpci5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF93aWRnZXRyZWRpci5weQpAQCAtMSw3ICsxLDcgQEAKLSIiIlVuaXR0ZXN0IGZvciBpZGxlbGliLldpZGdldFJlZGlyZWN0b3IKKycnJ1Rlc3QgaWRsZWxpYi5XaWRnZXRSZWRpcmVjdG9yLgogCiAxMDAlIGNvdmVyYWdlCi0iIiIKKycnJwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja19pZGxlIGltcG9ydCBGdW5jCkBAIC0xNCwxNCArMTQsMTQgQEAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgogICAgICAgICByZXF1aXJlcygnZ3VpJykKLSAgICAgICAgY2xzLnRrID0gVGsoKQotICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnRrKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgY2xzLnRleHQgPSBUZXh0KGNscy5yb290KQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgY2xzLnRleHQuZGVzdHJveSgpCi0gICAgICAgIGNscy50ay5kZXN0cm95KCkKLSAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMudGsKKyAgICAgICAgZGVsIGNscy50ZXh0CisgICAgICAgIGNscy5yb290LmRlc3Ryb3koKQorICAgICAgICBkZWwgY2xzLnJvb3QKIAogICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CiAgICAgICAgIHJlZGlyID0gV2lkZ2V0UmVkaXJlY3RvcihzZWxmLnRleHQpCkBAIC00MywxNCArNDMsMTUgQEAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgogICAgICAgICByZXF1aXJlcygnZ3VpJykKLSAgICAgICAgY2xzLnRrID0gVGsoKQotICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnRrKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgY2xzLnRleHQgPSBUZXh0KGNscy5yb290KQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgY2xzLnRleHQuZGVzdHJveSgpCi0gICAgICAgIGNscy50ay5kZXN0cm95KCkKLSAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMudGsKKyAgICAgICAgZGVsIGNscy50ZXh0CisgICAgICAgIGNscy5yb290LnVwZGF0ZV9pZGxldGFza3MoKQorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYucmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHNlbGYudGV4dCkKQEAgLTEwOCwxMyArMTA5LDEzIEBACiAgICAgZGVmIHRlc3RfY29tbWFuZF9kaXNwYXRjaChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgLl9faW5pdF9fIGNhdXNlcyByZWRpcmVjdGlvbiBvZiB0ayBjYWxscwogICAgICAgICAjIHRocm91Z2ggcmVkaXIuZGlzcGF0Y2gKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYudGV4dC5fdywgJ2luc2VydCcsICdoZWxsbycpCisgICAgICAgIHNlbGYucm9vdC5jYWxsKHNlbGYudGV4dC5fdywgJ2luc2VydCcsICdoZWxsbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jLmFyZ3MsICgnaGVsbG8nLCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCAnXG4nKQogICAgICAgICAjIEVuc3VyZSB0aGF0IGNhbGxlZCB0aHJvdWdoIHJlZGlyIC5kaXNwYXRjaCBhbmQgbm90IHRocm91Z2gKICAgICAgICAgIyBzZWxmLnRleHQuaW5zZXJ0IGJ5IGhhdmluZyBtb2NrIHJhaXNlIFRjbEVycm9yLgogICAgICAgICBzZWxmLmZ1bmMuX19pbml0X18oVGNsRXJyb3IoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRrLmNhbGwoc2VsZi50ZXh0Ll93LCAnaW5zZXJ0JywgJ2JvbycpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuY2FsbChzZWxmLnRleHQuX3csICdpbnNlcnQnLCAnYm9vJyksICcnKQogCiAKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnBjLnB5IGIvTGliL2lkbGVsaWIvcnBjLnB5CmluZGV4IGFhMzMwNDEuLjQ4MTA1ZjIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3JwYy5weQorKysgYi9MaWIvaWRsZWxpYi9ycGMucHkKQEAgLTEsNCArMSw0IEBACi0iIiJSUEMgSW1wbGVtZW50aW9uLCBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBQeXRob24gSWRsZSBJREUKKyIiIlJQQyBJbXBsZW1lbnRhdGlvbiwgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgUHl0aG9uIElkbGUgSURFCiAKIEZvciBzZWN1cml0eSByZWFzb25zLCBHdlIgcmVxdWVzdGVkIHRoYXQgSWRsZSdzIFB5dGhvbiBleGVjdXRpb24gc2VydmVyIHByb2Nlc3MKIGNvbm5lY3QgdG8gdGhlIElkbGUgcHJvY2Vzcywgd2hpY2ggbGlzdGVucyBmb3IgdGhlIGNvbm5lY3Rpb24uICBTaW5jZSBJZGxlIGhhcwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnVuLnB5IGIvTGliL2lkbGVsaWIvcnVuLnB5CmluZGV4IDU5NWU3YmMuLjI4Y2U0MjAgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3J1bi5weQorKysgYi9MaWIvaWRsZWxpYi9ydW4ucHkKQEAgLTE5LDYgKzE5LDEyIEBACiAKIGltcG9ydCBfX21haW5fXwogCitmb3IgbW9kIGluICgnc2ltcGxlZGlhbG9nJywgJ21lc3NhZ2Vib3gnLCAnZm9udCcsCisgICAgICAgICAgICAnZGlhbG9nJywgJ2ZpbGVkaWFsb2cnLCAnY29tbW9uZGlhbG9nJywKKyAgICAgICAgICAgICdjb2xvcmNob29zZXInKToKKyAgICBkZWxhdHRyKHRraW50ZXIsIG1vZCkKKyAgICBkZWwgc3lzLm1vZHVsZXNbJ3RraW50ZXIuJyArIG1vZF0KKwogTE9DQUxIT1NUID0gJzEyNy4wLjAuMScKIAogaW1wb3J0IHdhcm5pbmdzCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi90ZXh0Vmlldy5weSBiL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CmluZGV4IDAxYjJkOGYuLjEyYWMzMTkgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CisrKyBiL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CkBAIC03Niw2ICs3NiwxMCBAQAogICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdGaWxlIExvYWQgRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9J1VuYWJsZSB0byBsb2FkIGZpbGUgJXIgLicgJSBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9cGFyZW50KQorICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZXJyOgorICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdVbmljb2RlIERlY29kZSBFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9cGFyZW50KQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiB2aWV3X3RleHQocGFyZW50LCB0aXRsZSwgY29udGVudHMsIG1vZGFsKQogCmRpZmYgLS1naXQgYS9MaWIvaW1hcGxpYi5weSBiL0xpYi9pbWFwbGliLnB5CmluZGV4IGViMDVkY2IuLjRlOGE0YmIgMTAwNjQ0Ci0tLSBhL0xpYi9pbWFwbGliLnB5CisrKyBiL0xpYi9pbWFwbGliLnB5CkBAIC02Niw2ICs2Niw3IEBACiAgICAgICAgICdDUkVBVEUnOiAgICAgICAoJ0FVVEgnLCAnU0VMRUNURUQnKSwKICAgICAgICAgJ0RFTEVURSc6ICAgICAgICgnQVVUSCcsICdTRUxFQ1RFRCcpLAogICAgICAgICAnREVMRVRFQUNMJzogICAgKCdBVVRIJywgJ1NFTEVDVEVEJyksCisgICAgICAgICdFTkFCTEUnOiAgICAgICAoJ0FVVEgnLCApLAogICAgICAgICAnRVhBTUlORSc6ICAgICAgKCdBVVRIJywgJ1NFTEVDVEVEJyksCiAgICAgICAgICdFWFBVTkdFJzogICAgICAoJ1NFTEVDVEVEJywpLAogICAgICAgICAnRkVUQ0gnOiAgICAgICAgKCdTRUxFQ1RFRCcsKSwKQEAgLTEwNywxMiArMTA4LDE3IEBACiAgICAgICAgIGJyJyAoP1A8aG91cj5bMC05XVswLTldKTooP1A8bWluPlswLTldWzAtOV0pOig/UDxzZWM+WzAtOV1bMC05XSknCiAgICAgICAgIGJyJyAoP1A8em9uZW4+Wy0rXSkoP1A8em9uZWg+WzAtOV1bMC05XSkoP1A8em9uZW0+WzAtOV1bMC05XSknCiAgICAgICAgIGJyJyInKQorIyBMaXRlcmFsIGlzIG5vIGxvbmdlciB1c2VkOyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogTGl0ZXJhbCA9IHJlLmNvbXBpbGUoYnInLip7KD9QPHNpemU+XGQrKX0kJywgcmUuQVNDSUkpCiBNYXBDUkxGID0gcmUuY29tcGlsZShicidcclxufFxyfFxuJykKIFJlc3BvbnNlX2NvZGUgPSByZS5jb21waWxlKGJyJ1xbKD9QPHR5cGU+W0EtWi1dKykoICg/UDxkYXRhPlteXF1dKikpP1xdJykKIFVudGFnZ2VkX3Jlc3BvbnNlID0gcmUuY29tcGlsZShicidcKiAoP1A8dHlwZT5bQS1aLV0rKSggKD9QPGRhdGE+LiopKT8nKQorIyBVbnRhZ2dlZF9zdGF0dXMgaXMgbm8gbG9uZ2VyIHVzZWQ7IGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKIFVudGFnZ2VkX3N0YXR1cyA9IHJlLmNvbXBpbGUoCiAgICAgYnInXCogKD9QPGRhdGE+XGQrKSAoP1A8dHlwZT5bQS1aLV0rKSggKD9QPGRhdGEyPi4qKSk/JywgcmUuQVNDSUkpCisjIFdlIGNvbXBpbGUgdGhlc2UgaW4gX21vZGVfeHh4LgorX0xpdGVyYWwgPSBicicuKnsoP1A8c2l6ZT5cZCspfSQnCitfVW50YWdnZWRfc3RhdHVzID0gYnInXCogKD9QPGRhdGE+XGQrKSAoP1A8dHlwZT5bQS1aLV0rKSggKD9QPGRhdGEyPi4qKSk/JwogCiAKIApAQCAtMTY2LDcgKzE3Miw3IEBACiAgICAgY2xhc3MgYWJvcnQoZXJyb3IpOiBwYXNzICAgICAgICAjIFNlcnZpY2UgZXJyb3JzIC0gY2xvc2UgYW5kIHJldHJ5CiAgICAgY2xhc3MgcmVhZG9ubHkoYWJvcnQpOiBwYXNzICAgICAjIE1haWxib3ggc3RhdHVzIGNoYW5nZWQgdG8gUkVBRC1PTkxZCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCA9ICcnLCBwb3J0ID0gSU1BUDRfUE9SVCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9JycsIHBvcnQ9SU1BUDRfUE9SVCk6CiAgICAgICAgIHNlbGYuZGVidWcgPSBEZWJ1ZwogICAgICAgICBzZWxmLnN0YXRlID0gJ0xPR09VVCcKICAgICAgICAgc2VsZi5saXRlcmFsID0gTm9uZSAgICAgICAgICAgICAjIEEgbGl0ZXJhbCBhcmd1bWVudCB0byBhIGNvbW1hbmQKQEAgLTE3Niw2ICsxODIsNyBAQAogICAgICAgICBzZWxmLmlzX3JlYWRvbmx5ID0gRmFsc2UgICAgICAgICMgUkVBRC1PTkxZIGRlc2lyZWQgc3RhdGUKICAgICAgICAgc2VsZi50YWdudW0gPSAwCiAgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX21vZGVfYXNjaWkoKQogCiAgICAgICAgICMgT3BlbiBzb2NrZXQgdG8gc2VydmVyLgogCkBAIC0xOTAsNiArMTk3LDE5IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmFpc2UKIAorICAgIGRlZiBfbW9kZV9hc2NpaShzZWxmKToKKyAgICAgICAgc2VsZi51dGY4X2VuYWJsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9lbmNvZGluZyA9ICdhc2NpaScKKyAgICAgICAgc2VsZi5MaXRlcmFsID0gcmUuY29tcGlsZShfTGl0ZXJhbCwgcmUuQVNDSUkpCisgICAgICAgIHNlbGYuVW50YWdnZWRfc3RhdHVzID0gcmUuY29tcGlsZShfVW50YWdnZWRfc3RhdHVzLCByZS5BU0NJSSkKKworCisgICAgZGVmIF9tb2RlX3V0Zjgoc2VsZik6CisgICAgICAgIHNlbGYudXRmOF9lbmFibGVkID0gVHJ1ZQorICAgICAgICBzZWxmLl9lbmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgc2VsZi5MaXRlcmFsID0gcmUuY29tcGlsZShfTGl0ZXJhbCkKKyAgICAgICAgc2VsZi5VbnRhZ2dlZF9zdGF0dXMgPSByZS5jb21waWxlKF9VbnRhZ2dlZF9zdGF0dXMpCisKIAogICAgIGRlZiBfY29ubmVjdChzZWxmKToKICAgICAgICAgIyBDcmVhdGUgdW5pcXVlIHRhZyBmb3IgdGhpcyBzZXNzaW9uLApAQCAtMjM5LDYgKzI1OSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgYXR0ci5sb3dlcigpKQogICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiVW5rbm93biBJTUFQNCBjb21tYW5kOiAnJXMnIiAlIGF0dHIpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5sb2dvdXQoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKIAogCiAgICAgIyAgICAgICBPdmVycmlkYWJsZSBtZXRob2RzCkBAIC0zNTIsNyArMzgwLDEwIEBACiAgICAgICAgICAgICBkYXRlX3RpbWUgPSBUaW1lMkludGVybmFsZGF0ZShkYXRlX3RpbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBkYXRlX3RpbWUgPSBOb25lCi0gICAgICAgIHNlbGYubGl0ZXJhbCA9IE1hcENSTEYuc3ViKENSTEYsIG1lc3NhZ2UpCisgICAgICAgIGxpdGVyYWwgPSBNYXBDUkxGLnN1YihDUkxGLCBtZXNzYWdlKQorICAgICAgICBpZiBzZWxmLnV0ZjhfZW5hYmxlZDoKKyAgICAgICAgICAgIGxpdGVyYWwgPSBiJ1VURjggKCcgKyBsaXRlcmFsICsgYicpJworICAgICAgICBzZWxmLmxpdGVyYWwgPSBsaXRlcmFsCiAgICAgICAgIHJldHVybiBzZWxmLl9zaW1wbGVfY29tbWFuZChuYW1lLCBtYWlsYm94LCBmbGFncywgZGF0ZV90aW1lKQogCiAKQEAgLTQ0Nyw2ICs0NzgsMTggQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9zaW1wbGVfY29tbWFuZCgnREVMRVRFQUNMJywgbWFpbGJveCwgd2hvKQogCisgICAgZGVmIGVuYWJsZShzZWxmLCBjYXBhYmlsaXR5KToKKyAgICAgICAgIiIiU2VuZCBhbiBSRkM1MTYxIGVuYWJsZSBzdHJpbmcgdG8gdGhlIHNlcnZlci4KKworICAgICAgICAodHlwLCBbZGF0YV0pID0gPGludGFuY2U+LmVuYWJsZShjYXBhYmlsaXR5KQorICAgICAgICAiIiIKKyAgICAgICAgaWYgJ0VOQUJMRScgbm90IGluIHNlbGYuY2FwYWJpbGl0aWVzOgorICAgICAgICAgICAgcmFpc2UgSU1BUDQuZXJyb3IoIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IEVOQUJMRSIpCisgICAgICAgIHR5cCwgZGF0YSA9IHNlbGYuX3NpbXBsZV9jb21tYW5kKCdFTkFCTEUnLCBjYXBhYmlsaXR5KQorICAgICAgICBpZiB0eXAgPT0gJ09LJyBhbmQgJ1VURjg9QUNDRVBUJyBpbiBjYXBhYmlsaXR5LnVwcGVyKCk6CisgICAgICAgICAgICBzZWxmLl9tb2RlX3V0ZjgoKQorICAgICAgICByZXR1cm4gdHlwLCBkYXRhCisKICAgICBkZWYgZXhwdW5nZShzZWxmKToKICAgICAgICAgIiIiUGVybWFuZW50bHkgcmVtb3ZlIGRlbGV0ZWQgaXRlbXMgZnJvbSBzZWxlY3RlZCBtYWlsYm94LgogCkBAIC01NTMsNyArNTk2LDcgQEAKICAgICBkZWYgX0NSQU1fTUQ1X0FVVEgoc2VsZiwgY2hhbGxlbmdlKToKICAgICAgICAgIiIiIEF1dGhvYmplY3QgdG8gdXNlIHdpdGggQ1JBTS1NRDUgYXV0aGVudGljYXRpb24uICIiIgogICAgICAgICBpbXBvcnQgaG1hYwotICAgICAgICBwd2QgPSAoc2VsZi5wYXNzd29yZC5lbmNvZGUoJ0FTQ0lJJykgaWYgaXNpbnN0YW5jZShzZWxmLnBhc3N3b3JkLCBzdHIpCisgICAgICAgIHB3ZCA9IChzZWxmLnBhc3N3b3JkLmVuY29kZSgndXRmLTgnKSBpZiBpc2luc3RhbmNlKHNlbGYucGFzc3dvcmQsIHN0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5wYXNzd29yZCkKICAgICAgICAgcmV0dXJuIHNlbGYudXNlciArICIgIiArIGhtYWMuSE1BQyhwd2QsIGNoYWxsZW5nZSwgJ21kNScpLmhleGRpZ2VzdCgpCiAKQEAgLTY1Myw5ICs2OTYsMTIgQEAKICAgICAgICAgKHR5cCwgW2RhdGFdKSA9IDxpbnN0YW5jZT4uc2VhcmNoKGNoYXJzZXQsIGNyaXRlcmlvbiwgLi4uKQogCiAgICAgICAgICdkYXRhJyBpcyBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBtYXRjaGluZyBtZXNzYWdlIG51bWJlcnMuCisgICAgICAgIElmIFVURjggaXMgZW5hYmxlZCwgY2hhcnNldCBNVVNUIGJlIE5vbmUuCiAgICAgICAgICIiIgogICAgICAgICBuYW1lID0gJ1NFQVJDSCcKICAgICAgICAgaWYgY2hhcnNldDoKKyAgICAgICAgICAgIGlmIHNlbGYudXRmOF9lbmFibGVkOgorICAgICAgICAgICAgICAgIHJhaXNlIElNQVA0LmVycm9yKCJOb24tTm9uZSBjaGFyc2V0IG5vdCB2YWxpZCBpbiBVVEY4IG1vZGUiKQogICAgICAgICAgICAgdHlwLCBkYXQgPSBzZWxmLl9zaW1wbGVfY29tbWFuZChuYW1lLCAnQ0hBUlNFVCcsIGNoYXJzZXQsICpjcml0ZXJpYSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHR5cCwgZGF0ID0gc2VsZi5fc2ltcGxlX2NvbW1hbmQobmFtZSwgKmNyaXRlcmlhKQpAQCAtODY5LDcgKzkxNSw3IEBACiAgICAgZGVmIF9jaGVja19ieWUoc2VsZik6CiAgICAgICAgIGJ5ZSA9IHNlbGYudW50YWdnZWRfcmVzcG9uc2VzLmdldCgnQllFJykKICAgICAgICAgaWYgYnllOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydChieWVbLTFdLmRlY29kZSgnYXNjaWknLCAncmVwbGFjZScpKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydChieWVbLTFdLmRlY29kZShzZWxmLl9lbmNvZGluZywgJ3JlcGxhY2UnKSkKIAogCiAgICAgZGVmIF9jb21tYW5kKHNlbGYsIG5hbWUsICphcmdzKToKQEAgLTg5MCwxMiArOTM2LDEyIEBACiAgICAgICAgICAgICByYWlzZSBzZWxmLnJlYWRvbmx5KCdtYWlsYm94IHN0YXR1cyBjaGFuZ2VkIHRvIFJFQUQtT05MWScpCiAKICAgICAgICAgdGFnID0gc2VsZi5fbmV3X3RhZygpCi0gICAgICAgIG5hbWUgPSBieXRlcyhuYW1lLCAnQVNDSUknKQorICAgICAgICBuYW1lID0gYnl0ZXMobmFtZSwgc2VsZi5fZW5jb2RpbmcpCiAgICAgICAgIGRhdGEgPSB0YWcgKyBiJyAnICsgbmFtZQogICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgICAgICBpZiBhcmcgaXMgTm9uZTogY29udGludWUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBzdHIpOgotICAgICAgICAgICAgICAgIGFyZyA9IGJ5dGVzKGFyZywgIkFTQ0lJIikKKyAgICAgICAgICAgICAgICBhcmcgPSBieXRlcyhhcmcsIHNlbGYuX2VuY29kaW5nKQogICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBiJyAnICsgYXJnCiAKICAgICAgICAgbGl0ZXJhbCA9IHNlbGYubGl0ZXJhbApAQCAtOTA1LDcgKzk1MSw3IEBACiAgICAgICAgICAgICAgICAgbGl0ZXJhdG9yID0gbGl0ZXJhbAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBsaXRlcmF0b3IgPSBOb25lCi0gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBieXRlcygnIHslc30nICUgbGVuKGxpdGVyYWwpLCAnQVNDSUknKQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgYnl0ZXMoJyB7JXN9JyAlIGxlbihsaXRlcmFsKSwgc2VsZi5fZW5jb2RpbmcpCiAKICAgICAgICAgaWYgX19kZWJ1Z19fOgogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZyA+PSA0OgpAQCAtOTcwLDcgKzEwMTYsNyBAQAogICAgICAgICB0eXAsIGRhdCA9IHNlbGYuY2FwYWJpbGl0eSgpCiAgICAgICAgIGlmIGRhdCA9PSBbTm9uZV06CiAgICAgICAgICAgICByYWlzZSBzZWxmLmVycm9yKCdubyBDQVBBQklMSVRZIHJlc3BvbnNlIGZyb20gc2VydmVyJykKLSAgICAgICAgZGF0ID0gc3RyKGRhdFstMV0sICJBU0NJSSIpCisgICAgICAgIGRhdCA9IHN0cihkYXRbLTFdLCBzZWxmLl9lbmNvZGluZykKICAgICAgICAgZGF0ID0gZGF0LnVwcGVyKCkKICAgICAgICAgc2VsZi5jYXBhYmlsaXRpZXMgPSB0dXBsZShkYXQuc3BsaXQoKSkKIApAQCAtOTg5LDEwICsxMDM1LDEwIEBACiAgICAgICAgIGlmIHNlbGYuX21hdGNoKHNlbGYudGFncmUsIHJlc3ApOgogICAgICAgICAgICAgdGFnID0gc2VsZi5tby5ncm91cCgndGFnJykKICAgICAgICAgICAgIGlmIG5vdCB0YWcgaW4gc2VsZi50YWdnZWRfY29tbWFuZHM6Ci0gICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgndW5leHBlY3RlZCB0YWdnZWQgcmVzcG9uc2U6ICVzJyAlIHJlc3ApCisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgndW5leHBlY3RlZCB0YWdnZWQgcmVzcG9uc2U6ICVyJyAlIHJlc3ApCiAKICAgICAgICAgICAgIHR5cCA9IHNlbGYubW8uZ3JvdXAoJ3R5cGUnKQotICAgICAgICAgICAgdHlwID0gc3RyKHR5cCwgJ0FTQ0lJJykKKyAgICAgICAgICAgIHR5cCA9IHN0cih0eXAsIHNlbGYuX2VuY29kaW5nKQogICAgICAgICAgICAgZGF0ID0gc2VsZi5tby5ncm91cCgnZGF0YScpCiAgICAgICAgICAgICBzZWxmLnRhZ2dlZF9jb21tYW5kc1t0YWddID0gKHR5cCwgW2RhdF0pCiAgICAgICAgIGVsc2U6CkBAIC0xMDAxLDcgKzEwNDcsNyBAQAogICAgICAgICAgICAgIyAnKicgKHVudGFnZ2VkKSByZXNwb25zZXM/CiAKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9tYXRjaChVbnRhZ2dlZF9yZXNwb25zZSwgcmVzcCk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fbWF0Y2goVW50YWdnZWRfc3RhdHVzLCByZXNwKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9tYXRjaChzZWxmLlVudGFnZ2VkX3N0YXR1cywgcmVzcCk6CiAgICAgICAgICAgICAgICAgICAgIGRhdDIgPSBzZWxmLm1vLmdyb3VwKCdkYXRhMicpCiAKICAgICAgICAgICAgIGlmIHNlbGYubW8gaXMgTm9uZToKQEAgLTEwMTEsMTcgKzEwNTcsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250aW51YXRpb25fcmVzcG9uc2UgPSBzZWxmLm1vLmdyb3VwKCdkYXRhJykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUgICAgICMgTkI6IGluZGljYXRlcyBjb250aW51YXRpb24KIAotICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoInVuZXhwZWN0ZWQgcmVzcG9uc2U6ICclcyciICUgcmVzcCkKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCJ1bmV4cGVjdGVkIHJlc3BvbnNlOiAlciIgJSByZXNwKQogCiAgICAgICAgICAgICB0eXAgPSBzZWxmLm1vLmdyb3VwKCd0eXBlJykKLSAgICAgICAgICAgIHR5cCA9IHN0cih0eXAsICdhc2NpaScpCisgICAgICAgICAgICB0eXAgPSBzdHIodHlwLCBzZWxmLl9lbmNvZGluZykKICAgICAgICAgICAgIGRhdCA9IHNlbGYubW8uZ3JvdXAoJ2RhdGEnKQogICAgICAgICAgICAgaWYgZGF0IGlzIE5vbmU6IGRhdCA9IGInJyAgICAgICAgIyBOdWxsIHVudGFnZ2VkIHJlc3BvbnNlCiAgICAgICAgICAgICBpZiBkYXQyOiBkYXQgPSBkYXQgKyBiJyAnICsgZGF0MgogCiAgICAgICAgICAgICAjIElzIHRoZXJlIGEgbGl0ZXJhbCB0byBjb21lPwogCi0gICAgICAgICAgICB3aGlsZSBzZWxmLl9tYXRjaChMaXRlcmFsLCBkYXQpOgorICAgICAgICAgICAgd2hpbGUgc2VsZi5fbWF0Y2goc2VsZi5MaXRlcmFsLCBkYXQpOgogCiAgICAgICAgICAgICAgICAgIyBSZWFkIGxpdGVyYWwgZGlyZWN0IGZyb20gY29ubmVjdGlvbi4KIApAQCAtMTA0NSw3ICsxMDkxLDcgQEAKIAogICAgICAgICBpZiB0eXAgaW4gKCdPSycsICdOTycsICdCQUQnKSBhbmQgc2VsZi5fbWF0Y2goUmVzcG9uc2VfY29kZSwgZGF0KToKICAgICAgICAgICAgIHR5cCA9IHNlbGYubW8uZ3JvdXAoJ3R5cGUnKQotICAgICAgICAgICAgdHlwID0gc3RyKHR5cCwgIkFTQ0lJIikKKyAgICAgICAgICAgIHR5cCA9IHN0cih0eXAsIHNlbGYuX2VuY29kaW5nKQogICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3VudGFnZ2VkKHR5cCwgc2VsZi5tby5ncm91cCgnZGF0YScpKQogCiAgICAgICAgIGlmIF9fZGVidWdfXzoKQEAgLTExMTUsNyArMTE2MSw3IEBACiAKICAgICBkZWYgX25ld190YWcoc2VsZik6CiAKLSAgICAgICAgdGFnID0gc2VsZi50YWdwcmUgKyBieXRlcyhzdHIoc2VsZi50YWdudW0pLCAnQVNDSUknKQorICAgICAgICB0YWcgPSBzZWxmLnRhZ3ByZSArIGJ5dGVzKHN0cihzZWxmLnRhZ251bSksIHNlbGYuX2VuY29kaW5nKQogICAgICAgICBzZWxmLnRhZ251bSA9IHNlbGYudGFnbnVtICsgMQogICAgICAgICBzZWxmLnRhZ2dlZF9jb21tYW5kc1t0YWddID0gTm9uZQogICAgICAgICByZXR1cm4gdGFnCkBAIC0xMjA1LDcgKzEyNTEsOCBAQAogICAgICAgICAiIiIKIAogCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PScnLCBwb3J0PUlNQVA0X1NTTF9QT1JULCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUsIHNzbF9jb250ZXh0PU5vbmUpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD0nJywgcG9ydD1JTUFQNF9TU0xfUE9SVCwga2V5ZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSwgc3NsX2NvbnRleHQ9Tm9uZSk6CiAgICAgICAgICAgICBpZiBzc2xfY29udGV4dCBpcyBub3QgTm9uZSBhbmQga2V5ZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzc2xfY29udGV4dCBhbmQga2V5ZmlsZSBhcmd1bWVudHMgYXJlIG11dHVhbGx5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQpAQCAtMTI0Myw3ICsxMjkwLDcgQEAKIAogICAgIEluc3RhbnRpYXRlIHdpdGg6IElNQVA0X3N0cmVhbShjb21tYW5kKQogCi0gICAgICAgICAgICB3aGVyZSAiY29tbWFuZCIgaXMgYSBzdHJpbmcgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHN1YnByb2Nlc3MuUG9wZW4oKQorICAgICAgICAgICAgImNvbW1hbmQiIC0gYSBzdHJpbmcgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHN1YnByb2Nlc3MuUG9wZW4oKQogCiAgICAgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbiBzZWUgdGhlIGRvY3N0cmluZyBvZiB0aGUgcGFyZW50IGNsYXNzIElNQVA0LgogICAgICIiIgpAQCAtMTMyMCw3ICsxMzY3LDcgQEAKICAgICAgICAgIwogICAgICAgICBvdXAgPSBiJycKICAgICAgICAgaWYgaXNpbnN0YW5jZShpbnAsIHN0cik6Ci0gICAgICAgICAgICBpbnAgPSBpbnAuZW5jb2RlKCdBU0NJSScpCisgICAgICAgICAgICBpbnAgPSBpbnAuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgIHdoaWxlIGlucDoKICAgICAgICAgICAgIGlmIGxlbihpbnApID4gNDg6CiAgICAgICAgICAgICAgICAgdCA9IGlucFs6NDhdCmRpZmYgLS1naXQgYS9MaWIvaW1naGRyLnB5IGIvTGliL2ltZ2hkci5weQppbmRleCBhZGQyZWE4Li5iMjY3OTI1IDEwMDY0NAotLS0gYS9MaWIvaW1naGRyLnB5CisrKyBiL0xpYi9pbWdoZHIucHkKQEAgLTExMCw2ICsxMTAsMTggQEAKIAogdGVzdHMuYXBwZW5kKHRlc3RfYm1wKQogCitkZWYgdGVzdF93ZWJwKGgsIGYpOgorICAgIGlmIGguc3RhcnRzd2l0aChiJ1JJRkYnKSBhbmQgaFs4OjEyXSA9PSBiJ1dFQlAnOgorICAgICAgICByZXR1cm4gJ3dlYnAnCisKK3Rlc3RzLmFwcGVuZCh0ZXN0X3dlYnApCisKK2RlZiB0ZXN0X2V4cihoLCBmKToKKyAgICBpZiBoLnN0YXJ0c3dpdGgoYidceDc2XHgyZlx4MzFceDAxJyk6CisgICAgICAgIHJldHVybiAnZXhyJworCit0ZXN0cy5hcHBlbmQodGVzdF9leHIpCisKICMtLS0tLS0tLS0tLS0tLS0tLS0tLSMKICMgU21hbGwgdGVzdCBwcm9ncmFtICMKICMtLS0tLS0tLS0tLS0tLS0tLS0tLSMKZGlmZiAtLWdpdCBhL0xpYi9pbXAucHkgYi9MaWIvaW1wLnB5CmluZGV4IGM5MjJlOTIuLmUyNjQzOTEgMTAwNjQ0Ci0tLSBhL0xpYi9pbXAucHkKKysrIGIvTGliL2ltcC5weQpAQCAtOCwxNSArOCwxNiBAQAogIyAoUHJvYmFibHkpIG5lZWQgdG8gc3RheSBpbiBfaW1wCiBmcm9tIF9pbXAgaW1wb3J0IChsb2NrX2hlbGQsIGFjcXVpcmVfbG9jaywgcmVsZWFzZV9sb2NrLAogICAgICAgICAgICAgICAgICAgZ2V0X2Zyb3plbl9vYmplY3QsIGlzX2Zyb3plbl9wYWNrYWdlLAotICAgICAgICAgICAgICAgICAgaW5pdF9idWlsdGluLCBpbml0X2Zyb3plbiwgaXNfYnVpbHRpbiwgaXNfZnJvemVuLAorICAgICAgICAgICAgICAgICAgaW5pdF9mcm96ZW4sIGlzX2J1aWx0aW4sIGlzX2Zyb3plbiwKICAgICAgICAgICAgICAgICAgIF9maXhfY29fZmlsZW5hbWUpCiB0cnk6Ci0gICAgZnJvbSBfaW1wIGltcG9ydCBsb2FkX2R5bmFtaWMKKyAgICBmcm9tIF9pbXAgaW1wb3J0IGNyZWF0ZV9keW5hbWljCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgIyBQbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgZHluYW1pYyBsb2FkaW5nLgotICAgIGxvYWRfZHluYW1pYyA9IE5vbmUKKyAgICBjcmVhdGVfZHluYW1pYyA9IE5vbmUKIAotZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgU291cmNlbGVzc0ZpbGVMb2FkZXIsIF9FUlJfTVNHLCBfU3BlY01ldGhvZHMKK2Zyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IF9FUlJfTVNHLCBfZXhlYywgX2xvYWQsIF9idWlsdGluX2Zyb21fbmFtZQorZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbCBpbXBvcnQgU291cmNlbGVzc0ZpbGVMb2FkZXIKIAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKQEAgLTI5LDcgKzMwLDcgQEAKIAogd2FybmluZ3Mud2FybigidGhlIGltcCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgaW1wb3J0bGliOyAiCiAgICAgICAgICAgICAgICJzZWUgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24gZm9yIGFsdGVybmF0aXZlIHVzZXMiLAotICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAKICMgREVQUkVDQVRFRAogU0VBUkNIX0VSUk9SID0gMApAQCAtNTgsMjQgKzU5LDIzIEBACiBkZWYgZ2V0X21hZ2ljKCk6CiAgICAgIiIiKipERVBSRUNBVEVEKioKIAotICAgIFJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuCisgICAgUmV0dXJuIHRoZSBtYWdpYyBudW1iZXIgZm9yIC5weWMgZmlsZXMuCiAgICAgIiIiCiAgICAgcmV0dXJuIHV0aWwuTUFHSUNfTlVNQkVSCiAKIAogZGVmIGdldF90YWcoKToKLSAgICAiIiJSZXR1cm4gdGhlIG1hZ2ljIHRhZyBmb3IgLnB5YyBvciAucHlvIGZpbGVzLiIiIgorICAgICIiIlJldHVybiB0aGUgbWFnaWMgdGFnIGZvciAucHljIGZpbGVzLiIiIgogICAgIHJldHVybiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCiAKIAogZGVmIGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpOgogICAgICIiIioqREVQUkVDQVRFRCoqCiAKLSAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weWMvLnB5byBmaWxlLgorICAgIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5YyBmaWxlLgogCiAgICAgVGhlIC5weSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8gdGhlCi0gICAgLnB5Yy8ucHlvIGZpbGUgY2FsY3VsYXRlZCBhcyBpZiB0aGUgLnB5IGZpbGUgd2VyZSBpbXBvcnRlZC4gIFRoZSBleHRlbnNpb24KLSAgICB3aWxsIGJlIC5weWMgdW5sZXNzIHN5cy5mbGFncy5vcHRpbWl6ZSBpcyBub24temVybywgdGhlbiBpdCB3aWxsIGJlIC5weW8uCisgICAgLnB5YyBmaWxlIGNhbGN1bGF0ZWQgYXMgaWYgdGhlIC5weSBmaWxlIHdlcmUgaW1wb3J0ZWQuCiAKICAgICBJZiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgdGhlbiBpdCBtdXN0IGJlIGEgYm9vbGVhbiBhbmQgaXMgdXNlZCBpbgogICAgIHBsYWNlIG9mIHN5cy5mbGFncy5vcHRpbWl6ZS4KQEAgLTgzLDE2ICs4MywxOCBAQAogICAgIElmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSB0aGVuIE5vdEltcGxlbWVudGVkRXJyb3IgaXMgcmFpc2VkLgogCiAgICAgIiIiCi0gICAgcmV0dXJuIHV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGUpCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScpCisgICAgICAgIHJldHVybiB1dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlKQogCiAKIGRlZiBzb3VyY2VfZnJvbV9jYWNoZShwYXRoKToKICAgICAiIiIqKkRFUFJFQ0FURUQqKgogCi0gICAgR2l2ZW4gdGhlIHBhdGggdG8gYSAucHljLi8ucHlvIGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5IGZpbGUuCisgICAgR2l2ZW4gdGhlIHBhdGggdG8gYSAucHljLiBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weSBmaWxlLgogCi0gICAgVGhlIC5weWMvLnB5byBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8KLSAgICB0aGUgLnB5IGZpbGUgY2FsY3VsYXRlZCB0byBjb3JyZXNwb25kIHRvIHRoZSAucHljLy5weW8gZmlsZS4gIElmIHBhdGggZG9lcworICAgIFRoZSAucHljIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdDsgdGhpcyBzaW1wbHkgcmV0dXJucyB0aGUgcGF0aCB0bworICAgIHRoZSAucHkgZmlsZSBjYWxjdWxhdGVkIHRvIGNvcnJlc3BvbmQgdG8gdGhlIC5weWMgZmlsZS4gIElmIHBhdGggZG9lcwogICAgIG5vdCBjb25mb3JtIHRvIFBFUCAzMTQ3IGZvcm1hdCwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4gSWYKICAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUgdGhlbiBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZC4KIApAQCAtMTY0LDExICsxNjYsMTAgQEAKIGRlZiBsb2FkX3NvdXJjZShuYW1lLCBwYXRobmFtZSwgZmlsZT1Ob25lKToKICAgICBsb2FkZXIgPSBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCiAgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCi0gICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQogICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICAgICAgbW9kdWxlID0gX2V4ZWMoc3BlYywgc3lzLm1vZHVsZXNbbmFtZV0pCiAgICAgZWxzZToKLSAgICAgICAgbW9kdWxlID0gbWV0aG9kcy5sb2FkKCkKKyAgICAgICAgbW9kdWxlID0gX2xvYWQoc3BlYykKICAgICAjIFRvIGFsbG93IHJlbG9hZGluZyB0byBwb3RlbnRpYWxseSB3b3JrLCB1c2UgYSBub24taGFja2VkIGxvYWRlciB3aGljaAogICAgICMgd29uJ3QgcmVseSBvbiBhIG5vdy1jbG9zZWQgZmlsZSBvYmplY3QuCiAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKQEAgLTE4NSwxMSArMTg2LDEwIEBACiAgICAgIiIiKipERVBSRUNBVEVEKioiIiIKICAgICBsb2FkZXIgPSBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkKICAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRobmFtZSwgbG9hZGVyPWxvYWRlcikKLSAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCiAgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgbW9kdWxlID0gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgICAgICBtb2R1bGUgPSBfZXhlYyhzcGVjLCBzeXMubW9kdWxlc1tuYW1lXSkKICAgICBlbHNlOgotICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQorICAgICAgICBtb2R1bGUgPSBfbG9hZChzcGVjKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IFNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQpAQCAtMjEwLDExICsyMTAsMTAgQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3shcn0gaXMgbm90IGEgcGFja2FnZScuZm9ybWF0KHBhdGgpKQogICAgIHNwZWMgPSB1dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCi0gICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQogICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgIHJldHVybiBtZXRob2RzLmV4ZWMoc3lzLm1vZHVsZXNbbmFtZV0pCisgICAgICAgIHJldHVybiBfZXhlYyhzcGVjLCBzeXMubW9kdWxlc1tuYW1lXSkKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gbWV0aG9kcy5sb2FkKCkKKyAgICAgICAgcmV0dXJuIF9sb2FkKHNwZWMpCiAKIAogZGVmIGxvYWRfbW9kdWxlKG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBkZXRhaWxzKToKQEAgLTI2Nyw4ICsyNjYsOCBAQAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiduYW1lJyBtdXN0IGJlIGEgc3RyLCBub3Qge30iLmZvcm1hdCh0eXBlKG5hbWUpKSkKICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsICh0eXBlKE5vbmUpLCBsaXN0KSk6CiAgICAgICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHkKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCInbGlzdCcgbXVzdCBiZSBOb25lIG9yIGEgbGlzdCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCB7fSIuZm9ybWF0KHR5cGUobmFtZSkpKQorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIidwYXRoJyBtdXN0IGJlIE5vbmUgb3IgYSBsaXN0LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IHt9Ii5mb3JtYXQodHlwZShwYXRoKSkpCiAKICAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgIGlmIGlzX2J1aWx0aW4obmFtZSk6CkBAIC0zMTMsMyArMzEyLDM0IEBACiAKICAgICAiIiIKICAgICByZXR1cm4gaW1wb3J0bGliLnJlbG9hZChtb2R1bGUpCisKKworZGVmIGluaXRfYnVpbHRpbihuYW1lKToKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgTG9hZCBhbmQgcmV0dXJuIGEgYnVpbHQtaW4gbW9kdWxlIGJ5IG5hbWUsIG9yIE5vbmUgaXMgc3VjaCBtb2R1bGUgZG9lc24ndAorICAgIGV4aXN0CisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gX2J1aWx0aW5fZnJvbV9uYW1lKG5hbWUpCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2lmIGNyZWF0ZV9keW5hbWljOgorICAgIGRlZiBsb2FkX2R5bmFtaWMobmFtZSwgcGF0aCwgZmlsZT1Ob25lKToKKyAgICAgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgICAgICBMb2FkIGFuIGV4dGVuc2lvbiBtb2R1bGUuCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQorICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIobmFtZSwgcGF0aCkKKworICAgICAgICAjIElzc3VlICMyNDc0ODogU2tpcCB0aGUgc3lzLm1vZHVsZXMgY2hlY2sgaW4gX2xvYWRfbW9kdWxlX3NoaW07CisgICAgICAgICMgYWx3YXlzIGxvYWQgbmV3IGV4dGVuc2lvbgorICAgICAgICBzcGVjID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKAorICAgICAgICAgICAgbmFtZT1uYW1lLCBsb2FkZXI9bG9hZGVyLCBvcmlnaW49cGF0aCkKKyAgICAgICAgcmV0dXJuIF9sb2FkKHNwZWMpCisKK2Vsc2U6CisgICAgbG9hZF9keW5hbWljID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weSBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKaW5kZXggMWJjOTk0Ny4uYjZhOWY4MiAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQorKysgYi9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CkBAIC0zMCw5ICszMCwyNiBAQAogICAgICAgICBwYXNzCiAgICAgc3lzLm1vZHVsZXNbJ2ltcG9ydGxpYi5fYm9vdHN0cmFwJ10gPSBfYm9vdHN0cmFwCiAKK3RyeToKKyAgICBpbXBvcnQgX2Zyb3plbl9pbXBvcnRsaWJfZXh0ZXJuYWwgYXMgX2Jvb3RzdHJhcF9leHRlcm5hbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gLiBpbXBvcnQgX2Jvb3RzdHJhcF9leHRlcm5hbAorICAgIF9ib290c3RyYXBfZXh0ZXJuYWwuX3NldHVwKF9ib290c3RyYXApCisgICAgX2Jvb3RzdHJhcC5fYm9vdHN0cmFwX2V4dGVybmFsID0gX2Jvb3RzdHJhcF9leHRlcm5hbAorZWxzZToKKyAgICBfYm9vdHN0cmFwX2V4dGVybmFsLl9fbmFtZV9fID0gJ2ltcG9ydGxpYi5fYm9vdHN0cmFwX2V4dGVybmFsJworICAgIF9ib290c3RyYXBfZXh0ZXJuYWwuX19wYWNrYWdlX18gPSAnaW1wb3J0bGliJworICAgIHRyeToKKyAgICAgICAgX2Jvb3RzdHJhcF9leHRlcm5hbC5fX2ZpbGVfXyA9IF9fZmlsZV9fLnJlcGxhY2UoJ19faW5pdF9fLnB5JywgJ19ib290c3RyYXBfZXh0ZXJuYWwucHknKQorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICMgX19maWxlX18gaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZCwgZS5nLiBpZiB0aGlzIGNvZGUgZ2V0cworICAgICAgICAjIGZyb3plbiBieSBhIHRvb2wgbGlrZSBjeF9GcmVlemUuCisgICAgICAgIHBhc3MKKyAgICBzeXMubW9kdWxlc1snaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwnXSA9IF9ib290c3RyYXBfZXh0ZXJuYWwKKwogIyBUbyBzaW1wbGlmeSBpbXBvcnRzIGluIHRlc3QgY29kZQotX3dfbG9uZyA9IF9ib290c3RyYXAuX3dfbG9uZwotX3JfbG9uZyA9IF9ib290c3RyYXAuX3JfbG9uZworX3dfbG9uZyA9IF9ib290c3RyYXBfZXh0ZXJuYWwuX3dfbG9uZworX3JfbG9uZyA9IF9ib290c3RyYXBfZXh0ZXJuYWwuX3JfbG9uZwogCiAjIEZ1bGx5IGJvb3RzdHJhcHBlZCBhdCB0aGlzIHBvaW50LCBpbXBvcnQgd2hhdGV2ZXIgeW91IGxpa2UsIGNpcmN1bGFyCiAjIGRlcGVuZGVuY2llcyBhbmQgc3RhcnR1cCBvdmVyaGVhZCBtaW5pbWlzYXRpb24gcGVybWl0dGluZyA6KQpAQCAtNzMsNyArOTAsNyBAQAogICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgcGFzcwogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19sb2FkZXJfXyBpcyBub3Qgc2V0Jy5mb3JtYXQobmFtZSkpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fbG9hZGVyX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKSBmcm9tIE5vbmUKIAogICAgIHNwZWMgPSBfYm9vdHN0cmFwLl9maW5kX3NwZWMobmFtZSwgcGF0aCkKICAgICAjIFdlIHdvbid0IHdvcnJ5IGFib3V0IG1hbGZvcm1lZCBzcGVjcyAobWlzc2luZyBhdHRyaWJ1dGVzKS4KQEAgLTEzOCwxNSArMTU1LDE1IEBACiAgICAgICAgICAgICAgICAgcGFyZW50ID0gc3lzLm1vZHVsZXNbcGFyZW50X25hbWVdCiAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KHBhcmVudF9uYW1lKSwgbmFtZT1wYXJlbnRfbmFtZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KHBhcmVudF9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXBhcmVudF9uYW1lKSBmcm9tIE5vbmUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGtncGF0aCA9IHBhcmVudC5fX3BhdGhfXwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGtncGF0aCA9IE5vbmUKICAgICAgICAgdGFyZ2V0ID0gbW9kdWxlCiAgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18gPSBfYm9vdHN0cmFwLl9maW5kX3NwZWMobmFtZSwgcGtncGF0aCwgdGFyZ2V0KQotICAgICAgICBtZXRob2RzID0gX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykKLSAgICAgICAgbWV0aG9kcy5leGVjKG1vZHVsZSkKKyAgICAgICAgX2Jvb3RzdHJhcC5fZXhlYyhzcGVjLCBtb2R1bGUpCiAgICAgICAgICMgVGhlIG1vZHVsZSBtYXkgaGF2ZSByZXBsYWNlZCBpdHNlbGYgaW4gc3lzLm1vZHVsZXMhCiAgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQogICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKaW5kZXggNjRiYmI0Ni4uOWVlY2JmZSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQpAQCAtOSw3ICs5LDcgQEAKICMKICMgSU1QT1JUQU5UOiBXaGVuZXZlciBtYWtpbmcgY2hhbmdlcyB0byB0aGlzIG1vZHVsZSwgYmUgc3VyZSB0byBydW4KICMgYSB0b3AtbGV2ZWwgbWFrZSBpbiBvcmRlciB0byBnZXQgdGhlIGZyb3plbiB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUKLSMgdXBkYXRlLiBOb3QgZG9pbmcgc28gd2lsbCByZXN1bHQgaW4gdGhlIE1ha2VmaWxlIHRvIGZhaWwgZm9yCisjIHVwZGF0ZWQuIE5vdCBkb2luZyBzbyB3aWxsIHJlc3VsdCBpbiB0aGUgTWFrZWZpbGUgdG8gZmFpbCBmb3IKICMgYWxsIG90aGVycyB3aG8gZG9uJ3QgaGF2ZSBhIC4vcHl0aG9uIGFyb3VuZCB0byBmcmVlemUgdGhlIG1vZHVsZQogIyBpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIGNvbXBpbGF0aW9uLgogIwpAQCAtMjIsMTAxICsyMiw3IEBACiAKICMgQm9vdHN0cmFwLXJlbGF0ZWQgY29kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TID0gJ3dpbicsICdjeWd3aW4nLCAnZGFyd2luJwotCi0KLWRlZiBfbWFrZV9yZWxheF9jYXNlKCk6Ci0gICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TKToKLSAgICAgICAgZGVmIF9yZWxheF9jYXNlKCk6Ci0gICAgICAgICAgICAiIiJUcnVlIGlmIGZpbGVuYW1lcyBtdXN0IGJlIGNoZWNrZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LiIiIgotICAgICAgICAgICAgcmV0dXJuIGInUFlUSE9OQ0FTRU9LJyBpbiBfb3MuZW52aXJvbgotICAgIGVsc2U6Ci0gICAgICAgIGRlZiBfcmVsYXhfY2FzZSgpOgotICAgICAgICAgICAgIiIiVHJ1ZSBpZiBmaWxlbmFtZXMgbXVzdCBiZSBjaGVja2VkIGNhc2UtaW5zZW5zaXRpdmVseS4iIiIKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgIHJldHVybiBfcmVsYXhfY2FzZQotCi0KLWRlZiBfd19sb25nKHgpOgotICAgICIiIkNvbnZlcnQgYSAzMi1iaXQgaW50ZWdlciB0byBsaXR0bGUtZW5kaWFuLiIiIgotICAgIHJldHVybiAoaW50KHgpICYgMHhGRkZGRkZGRikudG9fYnl0ZXMoNCwgJ2xpdHRsZScpCi0KLQotZGVmIF9yX2xvbmcoaW50X2J5dGVzKToKLSAgICAiIiJDb252ZXJ0IDQgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiB0byBhbiBpbnRlZ2VyLiIiIgotICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhpbnRfYnl0ZXMsICdsaXR0bGUnKQotCi0KLWRlZiBfcGF0aF9qb2luKCpwYXRoX3BhcnRzKToKLSAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5qb2luKCkuIiIiCi0gICAgcmV0dXJuIHBhdGhfc2VwLmpvaW4oW3BhcnQucnN0cmlwKHBhdGhfc2VwYXJhdG9ycykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0cyBpZiBwYXJ0XSkKLQotCi1kZWYgX3BhdGhfc3BsaXQocGF0aCk6Ci0gICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguc3BsaXQoKS4iIiIKLSAgICBpZiBsZW4ocGF0aF9zZXBhcmF0b3JzKSA9PSAxOgotICAgICAgICBmcm9udCwgXywgdGFpbCA9IHBhdGgucnBhcnRpdGlvbihwYXRoX3NlcCkKLSAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCi0gICAgZm9yIHggaW4gcmV2ZXJzZWQocGF0aCk6Ci0gICAgICAgIGlmIHggaW4gcGF0aF9zZXBhcmF0b3JzOgotICAgICAgICAgICAgZnJvbnQsIHRhaWwgPSBwYXRoLnJzcGxpdCh4LCBtYXhzcGxpdD0xKQotICAgICAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCi0gICAgcmV0dXJuICcnLCBwYXRoCi0KLQotZGVmIF9wYXRoX3N0YXQocGF0aCk6Ci0gICAgIiIiU3RhdCB0aGUgcGF0aC4KLQotICAgIE1hZGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBtYWtlIGl0IGVhc2llciB0byBvdmVycmlkZSBpbiBleHBlcmltZW50cwotICAgIChlLmcuIGNhY2hlIHN0YXQgcmVzdWx0cykuCi0KLSAgICAiIiIKLSAgICByZXR1cm4gX29zLnN0YXQocGF0aCkKLQotCi1kZWYgX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIG1vZGUpOgotICAgICIiIlRlc3Qgd2hldGhlciB0aGUgcGF0aCBpcyB0aGUgc3BlY2lmaWVkIG1vZGUgdHlwZS4iIiIKLSAgICB0cnk6Ci0gICAgICAgIHN0YXRfaW5mbyA9IF9wYXRoX3N0YXQocGF0aCkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgcmV0dXJuIChzdGF0X2luZm8uc3RfbW9kZSAmIDBvMTcwMDAwKSA9PSBtb2RlCi0KLQotZGVmIF9wYXRoX2lzZmlsZShwYXRoKToKLSAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5pc2ZpbGUuIiIiCi0gICAgcmV0dXJuIF9wYXRoX2lzX21vZGVfdHlwZShwYXRoLCAwbzEwMDAwMCkKLQotCi1kZWYgX3BhdGhfaXNkaXIocGF0aCk6Ci0gICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguaXNkaXIuIiIiCi0gICAgaWYgbm90IHBhdGg6Ci0gICAgICAgIHBhdGggPSBfb3MuZ2V0Y3dkKCkKLSAgICByZXR1cm4gX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIDBvMDQwMDAwKQotCi0KLWRlZiBfd3JpdGVfYXRvbWljKHBhdGgsIGRhdGEsIG1vZGU9MG82NjYpOgotICAgICIiIkJlc3QtZWZmb3J0IGZ1bmN0aW9uIHRvIHdyaXRlIGRhdGEgdG8gYSBwYXRoIGF0b21pY2FsbHkuCi0gICAgQmUgcHJlcGFyZWQgdG8gaGFuZGxlIGEgRmlsZUV4aXN0c0Vycm9yIGlmIGNvbmN1cnJlbnQgd3JpdGluZyBvZiB0aGUKLSAgICB0ZW1wb3JhcnkgZmlsZSBpcyBhdHRlbXB0ZWQuIiIiCi0gICAgIyBpZCgpIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBwc2V1ZG8tcmFuZG9tIGZpbGVuYW1lLgotICAgIHBhdGhfdG1wID0gJ3t9Lnt9Jy5mb3JtYXQocGF0aCwgaWQocGF0aCkpCi0gICAgZmQgPSBfb3Mub3BlbihwYXRoX3RtcCwKLSAgICAgICAgICAgICAgICAgIF9vcy5PX0VYQ0wgfCBfb3MuT19DUkVBVCB8IF9vcy5PX1dST05MWSwgbW9kZSAmIDBvNjY2KQotICAgIHRyeToKLSAgICAgICAgIyBXZSBmaXJzdCB3cml0ZSBkYXRhIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIGFuZCB0aGVuIHVzZSBvcy5yZXBsYWNlKCkgdG8KLSAgICAgICAgIyBwZXJmb3JtIGFuIGF0b21pYyByZW5hbWUuCi0gICAgICAgIHdpdGggX2lvLkZpbGVJTyhmZCwgJ3diJykgYXMgZmlsZToKLSAgICAgICAgICAgIGZpbGUud3JpdGUoZGF0YSkKLSAgICAgICAgX29zLnJlcGxhY2UocGF0aF90bXAsIHBhdGgpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9vcy51bmxpbmsocGF0aF90bXApCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICByYWlzZQotCitfYm9vdHN0cmFwX2V4dGVybmFsID0gTm9uZQogCiBkZWYgX3dyYXAobmV3LCBvbGQpOgogICAgICIiIlNpbXBsZSBzdWJzdGl0dXRlIGZvciBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIuIiIiCkBAIC0xMzAsMTAgKzM2LDYgQEAKICAgICByZXR1cm4gdHlwZShzeXMpKG5hbWUpCiAKIAotX2NvZGVfdHlwZSA9IHR5cGUoX3dyYXAuX19jb2RlX18pCi0KLQotCiBjbGFzcyBfTWFuYWdlUmVsb2FkOgogCiAgICAgIiIiTWFuYWdlcyB0aGUgcG9zc2libGUgY2xlYW4tdXAgb2Ygc3lzLm1vZHVsZXMgZm9yIGxvYWRfbW9kdWxlKCkuIiIiCkBAIC0zMDksNyArMjExLDYgQEAKICAgICAgICAgbG9jay5yZWxlYXNlKCkKIAogIyBGcmFtZSBzdHJpcHBpbmcgbWFnaWMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQogZGVmIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgIiIicmVtb3ZlX2ltcG9ydGxpYl9mcmFtZXMgaW4gaW1wb3J0LmMgd2lsbCBhbHdheXMgcmVtb3ZlIHNlcXVlbmNlcwogICAgIG9mIGltcG9ydGxpYiBmcmFtZXMgdGhhdCBlbmQgd2l0aCBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbgpAQCAtMzIxLDIwMCArMjIyLDYgQEAKICAgICByZXR1cm4gZigqYXJncywgKiprd2RzKQogCiAKLSMgRmluZGVyL2xvYWRlciB1dGlsaXR5IGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBNYWdpYyB3b3JkIHRvIHJlamVjdCAucHljIGZpbGVzIGdlbmVyYXRlZCBieSBvdGhlciBQeXRob24gdmVyc2lvbnMuCi0jIEl0IHNob3VsZCBjaGFuZ2UgZm9yIGVhY2ggaW5jb21wYXRpYmxlIGNoYW5nZSB0byB0aGUgYnl0ZWNvZGUuCi0jCi0jIFRoZSB2YWx1ZSBvZiBDUiBhbmQgTEYgaXMgaW5jb3Jwb3JhdGVkIHNvIGlmIHlvdSBldmVyIHJlYWQgb3Igd3JpdGUKLSMgYSAucHljIGZpbGUgaW4gdGV4dCBtb2RlIHRoZSBtYWdpYyBudW1iZXIgd2lsbCBiZSB3cm9uZzsgYWxzbywgdGhlCi0jIEFwcGxlIE1QVyBjb21waWxlciBzd2FwcyB0aGVpciB2YWx1ZXMsIGJvdGNoaW5nIHN0cmluZyBjb25zdGFudHMuCi0jCi0jIFRoZSBtYWdpYyBudW1iZXJzIG11c3QgYmUgc3BhY2VkIGFwYXJ0IGF0IGxlYXN0IDIgdmFsdWVzLCBhcyB0aGUKLSMgLVUgaW50ZXJwZXRlciBmbGFnIHdpbGwgY2F1c2UgTUFHSUMrMSBiZWluZyB1c2VkLiBUaGV5IGhhdmUgYmVlbgotIyBvZGQgbnVtYmVycyBmb3Igc29tZSB0aW1lIG5vdy4KLSMKLSMgVGhlcmUgd2VyZSBhIHZhcmlldHkgb2Ygb2xkIHNjaGVtZXMgZm9yIHNldHRpbmcgdGhlIG1hZ2ljIG51bWJlci4KLSMgVGhlIGN1cnJlbnQgd29ya2luZyBzY2hlbWUgaXMgdG8gaW5jcmVtZW50IHRoZSBwcmV2aW91cyB2YWx1ZSBieQotIyAxMC4KLSMKLSMgU3RhcnRpbmcgd2l0aCB0aGUgYWRvcHRpb24gb2YgUEVQIDMxNDcgaW4gUHl0aG9uIDMuMiwgZXZlcnkgYnVtcCBpbiBtYWdpYwotIyBudW1iZXIgYWxzbyBpbmNsdWRlcyBhIG5ldyAibWFnaWMgdGFnIiwgaS5lLiBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB1c2VkCi0jIHRvIHJlcHJlc2VudCB0aGUgbWFnaWMgbnVtYmVyIGluIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLiAgV2hlbiB5b3UgY2hhbmdlCi0jIHRoZSBtYWdpYyBudW1iZXIsIHlvdSBtdXN0IGFsc28gc2V0IGEgbmV3IHVuaXF1ZSBtYWdpYyB0YWcuICBHZW5lcmFsbHkgdGhpcwotIyBjYW4gYmUgbmFtZWQgYWZ0ZXIgdGhlIFB5dGhvbiBtYWpvciB2ZXJzaW9uIG9mIHRoZSBtYWdpYyBudW1iZXIgYnVtcCwgYnV0Ci0jIGl0IGNhbiByZWFsbHkgYmUgYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBkaWZmZXJlbnQgdGhhbiBhbnl0aGluZyBlbHNlCi0jIHRoYXQncyBjb21lIGJlZm9yZS4gIFRoZSB0YWdzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLCBzdGFydGluZwotIyB3aXRoIFB5dGhvbiAzLjJhMC4KLSMKLSMgS25vd24gdmFsdWVzOgotIyAgUHl0aG9uIDEuNTogICAyMDEyMQotIyAgUHl0aG9uIDEuNS4xOiAyMDEyMQotIyAgICAgUHl0aG9uIDEuNS4yOiAyMDEyMQotIyAgICAgUHl0aG9uIDEuNjogICA1MDQyOAotIyAgICAgUHl0aG9uIDIuMDogICA1MDgyMwotIyAgICAgUHl0aG9uIDIuMC4xOiA1MDgyMwotIyAgICAgUHl0aG9uIDIuMTogICA2MDIwMgotIyAgICAgUHl0aG9uIDIuMS4xOiA2MDIwMgotIyAgICAgUHl0aG9uIDIuMS4yOiA2MDIwMgotIyAgICAgUHl0aG9uIDIuMjogICA2MDcxNwotIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAxMQotIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAyMQotIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAxMSAoISkKLSMgICAgIFB5dGhvbiAyLjRhMDogNjIwNDEKLSMgICAgIFB5dGhvbiAyLjRhMzogNjIwNTEKLSMgICAgIFB5dGhvbiAyLjRiMTogNjIwNjEKLSMgICAgIFB5dGhvbiAyLjVhMDogNjIwNzEKLSMgICAgIFB5dGhvbiAyLjVhMDogNjIwODEgKGFzdC1icmFuY2gpCi0jICAgICBQeXRob24gMi41YTA6IDYyMDkxICh3aXRoKQotIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA5MiAoY2hhbmdlZCBXSVRIX0NMRUFOVVAgb3Bjb2RlKQotIyAgICAgUHl0aG9uIDIuNWIzOiA2MjEwMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4pCi0jICAgICBQeXRob24gMi41YjM6IDYyMTExIChmaXggd3JvbmcgY29kZTogeCArPSB5aWVsZCkKLSMgICAgIFB5dGhvbiAyLjVjMTogNjIxMjEgKGZpeCB3cm9uZyBsbm90YWIgd2l0aCBmb3IgbG9vcHMgYW5kCi0jICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yaW5nIGNvbnN0YW50cyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCkKLSMgICAgIFB5dGhvbiAyLjVjMjogNjIxMzEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uIGluIGxpc3Rjb21wL2dlbmV4cCkKLSMgICAgIFB5dGhvbiAyLjZhMDogNjIxNTEgKHBlZXBob2xlIG9wdGltaXphdGlvbnMgYW5kIFNUT1JFX01BUCBvcGNvZGUpCi0jICAgICBQeXRob24gMi42YTE6IDYyMTYxIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKQotIyAgICAgUHl0aG9uIDIuN2EwOiA2MjE3MSAob3B0aW1pemUgbGlzdCBjb21wcmVoZW5zaW9ucy9jaGFuZ2UgTElTVF9BUFBFTkQpCi0jICAgICBQeXRob24gMi43YTA6IDYyMTgxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKLSMgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKLSMgICAgIFB5dGhvbiAyLjdhMCAgNjIxOTEgKGludHJvZHVjZSBTRVRVUF9XSVRIKQotIyAgICAgUHl0aG9uIDIuN2EwICA2MjIwMSAoaW50cm9kdWNlIEJVSUxEX1NFVCkKLSMgICAgIFB5dGhvbiAyLjdhMCAgNjIyMTEgKGludHJvZHVjZSBNQVBfQUREIGFuZCBTRVRfQUREKQotIyAgICAgUHl0aG9uIDMwMDA6ICAgMzAwMAotIyAgICAgICAgICAgICAgICAgICAgMzAxMCAocmVtb3ZlZCBVTkFSWV9DT05WRVJUKQotIyAgICAgICAgICAgICAgICAgICAgMzAyMCAoYWRkZWQgQlVJTERfU0VUKQotIyAgICAgICAgICAgICAgICAgICAgMzAzMCAoYWRkZWQga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMpCi0jICAgICAgICAgICAgICAgICAgICAzMDQwIChhZGRlZCBzaWduYXR1cmUgYW5ub3RhdGlvbnMpCi0jICAgICAgICAgICAgICAgICAgICAzMDUwIChwcmludCBiZWNvbWVzIGEgZnVuY3Rpb24pCi0jICAgICAgICAgICAgICAgICAgICAzMDYwIChQRVAgMzExNSBtZXRhY2xhc3Mgc3ludGF4KQotIyAgICAgICAgICAgICAgICAgICAgMzA2MSAoc3RyaW5nIGxpdGVyYWxzIGJlY29tZSB1bmljb2RlKQotIyAgICAgICAgICAgICAgICAgICAgMzA3MSAoUEVQIDMxMDkgcmFpc2UgY2hhbmdlcykKLSMgICAgICAgICAgICAgICAgICAgIDMwODEgKFBFUCAzMTM3IG1ha2UgX19maWxlX18gYW5kIF9fbmFtZV9fIHVuaWNvZGUpCi0jICAgICAgICAgICAgICAgICAgICAzMDkxIChraWxsIHN0cjggaW50ZXJuaW5nKQotIyAgICAgICAgICAgICAgICAgICAgMzEwMSAobWVyZ2UgZnJvbSAyLjZhMCwgc2VlIDYyMTUxKQotIyAgICAgICAgICAgICAgICAgICAgMzEwMyAoX19maWxlX18gcG9pbnRzIHRvIHNvdXJjZSBmaWxlKQotIyAgICAgUHl0aG9uIDMuMGE0OiAzMTExIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKS4KLSMgICAgIFB5dGhvbiAzLjBhNTogMzEzMSAobGV4aWNhbCBleGNlcHRpb24gc3RhY2tpbmcsIGluY2x1ZGluZyBQT1BfRVhDRVBUKQotIyAgICAgUHl0aG9uIDMuMWEwOiAzMTQxIChvcHRpbWl6ZSBsaXN0LCBzZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnM6Ci0jICAgICAgICAgICAgIGNoYW5nZSBMSVNUX0FQUEVORCBhbmQgU0VUX0FERCwgYWRkIE1BUF9BREQpCi0jICAgICBQeXRob24gMy4xYTA6IDMxNTEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgotIyAgICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCi0jICAgICBQeXRob24gMy4yYTA6IDMxNjAgKGFkZCBTRVRVUF9XSVRIKQotIyAgICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKLSMgICAgIFB5dGhvbiAzLjJhMTogMzE3MCAoYWRkIERVUF9UT1BfVFdPLCByZW1vdmUgRFVQX1RPUFggYW5kIFJPVF9GT1VSKQotIyAgICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKLSMgICAgIFB5dGhvbiAzLjJhMiAgMzE4MCAoYWRkIERFTEVURV9ERVJFRikKLSMgICAgIFB5dGhvbiAzLjNhMCAgMzE5MCBfX2NsYXNzX18gc3VwZXIgY2xvc3VyZSBjaGFuZ2VkCi0jICAgICBQeXRob24gMy4zYTAgIDMyMDAgKF9fcXVhbG5hbWVfXyBhZGRlZCkKLSMgICAgICAgICAgICAgICAgICAgICAgMzIxMCAoYWRkZWQgc2l6ZSBtb2R1bG8gMioqMzIgdG8gdGhlIHB5YyBoZWFkZXIpCi0jICAgICBQeXRob24gMy4zYTEgIDMyMjAgKGNoYW5nZWQgUEVQIDM4MCBpbXBsZW1lbnRhdGlvbikKLSMgICAgIFB5dGhvbiAzLjNhNCAgMzIzMCAocmV2ZXJ0IGNoYW5nZXMgdG8gaW1wbGljaXQgX19jbGFzc19fIGNsb3N1cmUpCi0jICAgICBQeXRob24gMy40YTEgIDMyNTAgKGV2YWx1YXRlIHBvc2l0aW9uYWwgZGVmYXVsdCBhcmd1bWVudHMgYmVmb3JlCi0jICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZC1vbmx5IGRlZmF1bHRzKQotIyAgICAgUHl0aG9uIDMuNGExICAzMjYwIChhZGQgTE9BRF9DTEFTU0RFUkVGOyBhbGxvdyBsb2NhbHMgb2YgY2xhc3MgdG8gb3ZlcnJpZGUKLSMgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIHZhcnMpCi0jICAgICBQeXRob24gMy40YTEgIDMyNzAgKHZhcmlvdXMgdHdlYWtzIHRvIHRoZSBfX2NsYXNzX18gY2xvc3VyZSkKLSMgICAgIFB5dGhvbiAzLjRhMSAgMzI4MCAocmVtb3ZlIGltcGxpY2l0IGNsYXNzIGFyZ3VtZW50KQotIyAgICAgUHl0aG9uIDMuNGE0ICAzMjkwIChjaGFuZ2VzIHRvIF9fcXVhbG5hbWVfXyBjb21wdXRhdGlvbikKLSMgICAgIFB5dGhvbiAzLjRhNCAgMzMwMCAobW9yZSBjaGFuZ2VzIHRvIF9fcXVhbG5hbWVfXyBjb21wdXRhdGlvbikKLSMgICAgIFB5dGhvbiAzLjRyYzIgMzMxMCAoYWx0ZXIgX19xdWFsbmFtZV9fIGNvbXB1dGF0aW9uKQotIwotIyBNQUdJQyBtdXN0IGNoYW5nZSB3aGVuZXZlciB0aGUgYnl0ZWNvZGUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgbWF5IG5vCi0jIGxvbmdlciBiZSB1bmRlcnN0b29kIGJ5IG9sZGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXZhbCBsb29wICh1c3VhbGx5Ci0jIGR1ZSB0byB0aGUgYWRkaXRpb24gb2YgbmV3IG9wY29kZXMpLgotCi1NQUdJQ19OVU1CRVIgPSAoMzMxMCkudG9fYnl0ZXMoMiwgJ2xpdHRsZScpICsgYidcclxuJwotX1JBV19NQUdJQ19OVU1CRVIgPSBpbnQuZnJvbV9ieXRlcyhNQUdJQ19OVU1CRVIsICdsaXR0bGUnKSAgIyBGb3IgaW1wb3J0LmMKLQotX1BZQ0FDSEUgPSAnX19weWNhY2hlX18nCi0KLVNPVVJDRV9TVUZGSVhFUyA9IFsnLnB5J10gICMgX3NldHVwKCkgYWRkcyAucHl3IGFzIG5lZWRlZC4KLQotREVCVUdfQllURUNPREVfU1VGRklYRVMgPSBbJy5weWMnXQotT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTID0gWycucHlvJ10KLQotZGVmIGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpOgotICAgICIiIkdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5Yy8ucHlvIGZpbGUuCi0KLSAgICBUaGUgLnB5IGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdDsgdGhpcyBzaW1wbHkgcmV0dXJucyB0aGUgcGF0aCB0byB0aGUKLSAgICAucHljLy5weW8gZmlsZSBjYWxjdWxhdGVkIGFzIGlmIHRoZSAucHkgZmlsZSB3ZXJlIGltcG9ydGVkLiAgVGhlIGV4dGVuc2lvbgotICAgIHdpbGwgYmUgLnB5YyB1bmxlc3Mgc3lzLmZsYWdzLm9wdGltaXplIGlzIG5vbi16ZXJvLCB0aGVuIGl0IHdpbGwgYmUgLnB5by4KLQotICAgIElmIGRlYnVnX292ZXJyaWRlIGlzIG5vdCBOb25lLCB0aGVuIGl0IG11c3QgYmUgYSBib29sZWFuIGFuZCBpcyB1c2VkIGluCi0gICAgcGxhY2Ugb2Ygc3lzLmZsYWdzLm9wdGltaXplLgotCi0gICAgSWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCi0KLSAgICAiIiIKLSAgICBkZWJ1ZyA9IG5vdCBzeXMuZmxhZ3Mub3B0aW1pemUgaWYgZGVidWdfb3ZlcnJpZGUgaXMgTm9uZSBlbHNlIGRlYnVnX292ZXJyaWRlCi0gICAgaWYgZGVidWc6Ci0gICAgICAgIHN1ZmZpeGVzID0gREVCVUdfQllURUNPREVfU1VGRklYRVMKLSAgICBlbHNlOgotICAgICAgICBzdWZmaXhlcyA9IE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUwotICAgIGhlYWQsIHRhaWwgPSBfcGF0aF9zcGxpdChwYXRoKQotICAgIGJhc2UsIHNlcCwgcmVzdCA9IHRhaWwucnBhcnRpdGlvbignLicpCi0gICAgdGFnID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZwotICAgIGlmIHRhZyBpcyBOb25lOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUnKQotICAgIGZpbGVuYW1lID0gJycuam9pbihbKGJhc2UgaWYgYmFzZSBlbHNlIHJlc3QpLCBzZXAsIHRhZywgc3VmZml4ZXNbMF1dKQotICAgIHJldHVybiBfcGF0aF9qb2luKGhlYWQsIF9QWUNBQ0hFLCBmaWxlbmFtZSkKLQotCi1kZWYgc291cmNlX2Zyb21fY2FjaGUocGF0aCk6Ci0gICAgIiIiR2l2ZW4gdGhlIHBhdGggdG8gYSAucHljLi8ucHlvIGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5IGZpbGUuCi0KLSAgICBUaGUgLnB5Yy8ucHlvIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdDsgdGhpcyBzaW1wbHkgcmV0dXJucyB0aGUgcGF0aCB0bwotICAgIHRoZSAucHkgZmlsZSBjYWxjdWxhdGVkIHRvIGNvcnJlc3BvbmQgdG8gdGhlIC5weWMvLnB5byBmaWxlLiAgSWYgcGF0aCBkb2VzCi0gICAgbm90IGNvbmZvcm0gdG8gUEVQIDMxNDcgZm9ybWF0LCBWYWx1ZUVycm9yIHdpbGwgYmUgcmFpc2VkLiBJZgotICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSB0aGVuIE5vdEltcGxlbWVudGVkRXJyb3IgaXMgcmFpc2VkLgotCi0gICAgIiIiCi0gICAgaWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUnKQotICAgIGhlYWQsIHB5Y2FjaGVfZmlsZW5hbWUgPSBfcGF0aF9zcGxpdChwYXRoKQotICAgIGhlYWQsIHB5Y2FjaGUgPSBfcGF0aF9zcGxpdChoZWFkKQotICAgIGlmIHB5Y2FjaGUgIT0gX1BZQ0FDSEU6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IG5vdCBib3R0b20tbGV2ZWwgZGlyZWN0b3J5IGluICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfScuZm9ybWF0KF9QWUNBQ0hFLCBwYXRoKSkKLSAgICBpZiBweWNhY2hlX2ZpbGVuYW1lLmNvdW50KCcuJykgIT0gMjoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXhwZWN0ZWQgb25seSAyIGRvdHMgaW4gJwotICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9Jy5mb3JtYXQocHljYWNoZV9maWxlbmFtZSkpCi0gICAgYmFzZV9maWxlbmFtZSA9IHB5Y2FjaGVfZmlsZW5hbWUucGFydGl0aW9uKCcuJylbMF0KLSAgICByZXR1cm4gX3BhdGhfam9pbihoZWFkLCBiYXNlX2ZpbGVuYW1lICsgU09VUkNFX1NVRkZJWEVTWzBdKQotCi0KLWRlZiBfZ2V0X3NvdXJjZWZpbGUoYnl0ZWNvZGVfcGF0aCk6Ci0gICAgIiIiQ29udmVydCBhIGJ5dGVjb2RlIGZpbGUgcGF0aCB0byBhIHNvdXJjZSBwYXRoIChpZiBwb3NzaWJsZSkuCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBwdXJlbHkgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvcgotICAgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aEZpbGVuYW1lcygpIGluIHRoZSBDIEFQSS4KLQotICAgICIiIgotICAgIGlmIGxlbihieXRlY29kZV9wYXRoKSA9PSAwOgotICAgICAgICByZXR1cm4gTm9uZQotICAgIHJlc3QsIF8sIGV4dGVuc2lvbiA9IGJ5dGVjb2RlX3BhdGgucnBhcnRpdGlvbignLicpCi0gICAgaWYgbm90IHJlc3Qgb3IgZXh0ZW5zaW9uLmxvd2VyKClbLTM6LTFdICE9ICdweSc6Ci0gICAgICAgIHJldHVybiBieXRlY29kZV9wYXRoCi0gICAgdHJ5OgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNvdXJjZV9mcm9tX2NhY2hlKGJ5dGVjb2RlX3BhdGgpCi0gICAgZXhjZXB0IChOb3RJbXBsZW1lbnRlZEVycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgc291cmNlX3BhdGggPSBieXRlY29kZV9wYXRoWzotMV0KLSAgICByZXR1cm4gc291cmNlX3BhdGggaWYgX3BhdGhfaXNmaWxlKHNvdXJjZV9wYXRoKSBlbHNlIGJ5dGVjb2RlX3BhdGgKLQotCi1kZWYgX2NhbGNfbW9kZShwYXRoKToKLSAgICAiIiJDYWxjdWxhdGUgdGhlIG1vZGUgcGVybWlzc2lvbnMgZm9yIGEgYnl0ZWNvZGUgZmlsZS4iIiIKLSAgICB0cnk6Ci0gICAgICAgIG1vZGUgPSBfcGF0aF9zdGF0KHBhdGgpLnN0X21vZGUKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgbW9kZSA9IDBvNjY2Ci0gICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcwotICAgICMgbGF0ZXIgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZXMgYXJlIHJlYWQtb25seSBvbiBXaW5kb3dzICgjNjA3NCkKLSAgICBtb2RlIHw9IDBvMjAwCi0gICAgcmV0dXJuIG1vZGUKLQotCiBkZWYgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlLCAqYXJncywgdmVyYm9zaXR5PTEpOgogICAgICIiIlByaW50IHRoZSBtZXNzYWdlIHRvIHN0ZGVyciBpZiAtdi9QWVRIT05WRVJCT1NFIGlzIHR1cm5lZCBvbi4iIiIKICAgICBpZiBzeXMuZmxhZ3MudmVyYm9zZSA+PSB2ZXJib3NpdHk6CkBAIC01MjMsMjQgKzIzMCw2IEBACiAgICAgICAgIHByaW50KG1lc3NhZ2UuZm9ybWF0KCphcmdzKSwgZmlsZT1zeXMuc3RkZXJyKQogCiAKLWRlZiBfY2hlY2tfbmFtZShtZXRob2QpOgotICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhhdCB0aGUgbW9kdWxlIGJlaW5nIHJlcXVlc3RlZCBtYXRjaGVzIHRoZSBvbmUgdGhlCi0gICAgbG9hZGVyIGNhbiBoYW5kbGUuCi0KLSAgICBUaGUgZmlyc3QgYXJndW1lbnQgKHNlbGYpIG11c3QgZGVmaW5lIF9uYW1lIHdoaWNoIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKLSAgICBjb21wYXJlZCBhZ2FpbnN0LiBJZiB0aGUgY29tcGFyaXNvbiBmYWlscyB0aGVuIEltcG9ydEVycm9yIGlzIHJhaXNlZC4KLQotICAgICIiIgotICAgIGRlZiBfY2hlY2tfbmFtZV93cmFwcGVyKHNlbGYsIG5hbWU9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgaWYgbmFtZSBpcyBOb25lOgotICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQotICAgICAgICBlbGlmIHNlbGYubmFtZSAhPSBuYW1lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2xvYWRlciBjYW5ub3QgaGFuZGxlICVzJyAlIG5hbWUsIG5hbWU9bmFtZSkKLSAgICAgICAgcmV0dXJuIG1ldGhvZChzZWxmLCBuYW1lLCAqYXJncywgKiprd2FyZ3MpCi0gICAgX3dyYXAoX2NoZWNrX25hbWVfd3JhcHBlciwgbWV0aG9kKQotICAgIHJldHVybiBfY2hlY2tfbmFtZV93cmFwcGVyCi0KLQogZGVmIF9yZXF1aXJlc19idWlsdGluKGZ4bik6CiAgICAgIiIiRGVjb3JhdG9yIHRvIHZlcmlmeSB0aGUgbmFtZWQgbW9kdWxlIGlzIGJ1aWx0LWluLiIiIgogICAgIGRlZiBfcmVxdWlyZXNfYnVpbHRpbl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lKToKQEAgLTU2MywyMyArMjUyLDcgQEAKICAgICByZXR1cm4gX3JlcXVpcmVzX2Zyb3plbl93cmFwcGVyCiAKIAotZGVmIF9maW5kX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAiIiJUcnkgdG8gZmluZCBhIGxvYWRlciBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUgYnkgZGVsZWdhdGluZyB0bwotICAgIHNlbGYuZmluZF9sb2FkZXIoKS4KLQotICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgZmluZGVyLmZpbmRfc3BlYygpLgotCi0gICAgIiIiCi0gICAgIyBDYWxsIGZpbmRfbG9hZGVyKCkuIElmIGl0IHJldHVybnMgYSBzdHJpbmcgKGluZGljYXRpbmcgdGhpcwotICAgICMgaXMgYSBuYW1lc3BhY2UgcGFja2FnZSBwb3J0aW9uKSwgZ2VuZXJhdGUgYSB3YXJuaW5nIGFuZAotICAgICMgcmV0dXJuIE5vbmUuCi0gICAgbG9hZGVyLCBwb3J0aW9ucyA9IHNlbGYuZmluZF9sb2FkZXIoZnVsbG5hbWUpCi0gICAgaWYgbG9hZGVyIGlzIE5vbmUgYW5kIGxlbihwb3J0aW9ucyk6Ci0gICAgICAgIG1zZyA9ICdOb3QgaW1wb3J0aW5nIGRpcmVjdG9yeSB7fTogbWlzc2luZyBfX2luaXRfXycKLSAgICAgICAgX3dhcm5pbmdzLndhcm4obXNnLmZvcm1hdChwb3J0aW9uc1swXSksIEltcG9ydFdhcm5pbmcpCi0gICAgcmV0dXJuIGxvYWRlcgotCi0KKyMgVHlwaWNhbGx5IHVzZWQgYnkgbG9hZGVyIGNsYXNzZXMgYXMgYSBtZXRob2QgcmVwbGFjZW1lbnQuCiBkZWYgX2xvYWRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpOgogICAgICIiIkxvYWQgdGhlIHNwZWNpZmllZCBtb2R1bGUgaW50byBzeXMubW9kdWxlcyBhbmQgcmV0dXJuIGl0LgogCkBAIC01ODcsMTAzICsyNjAsMTIgQEAKIAogICAgICIiIgogICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBzZWxmKQotICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKICAgICBpZiBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgIG1ldGhvZHMuZXhlYyhtb2R1bGUpCisgICAgICAgIF9leGVjKHNwZWMsIG1vZHVsZSkKICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQogICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBtZXRob2RzLmxvYWQoKQotCi0KLWRlZiBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsIHNvdXJjZV9zdGF0cz1Ob25lLCBuYW1lPU5vbmUsIHBhdGg9Tm9uZSk6Ci0gICAgIiIiVmFsaWRhdGUgdGhlIGhlYWRlciBvZiB0aGUgcGFzc2VkLWluIGJ5dGVjb2RlIGFnYWluc3Qgc291cmNlX3N0YXRzIChpZgotICAgIGdpdmVuKSBhbmQgcmV0dXJuaW5nIHRoZSBieXRlY29kZSB0aGF0IGNhbiBiZSBjb21waWxlZCBieSBjb21waWxlKCkuCi0KLSAgICBBbGwgb3RoZXIgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGVuaGFuY2UgZXJyb3IgcmVwb3J0aW5nLgotCi0gICAgSW1wb3J0RXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlIG1hZ2ljIG51bWJlciBpcyBpbmNvcnJlY3Qgb3IgdGhlIGJ5dGVjb2RlIGlzCi0gICAgZm91bmQgdG8gYmUgc3RhbGUuIEVPRkVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZSBkYXRhIGlzIGZvdW5kIHRvIGJlCi0gICAgdHJ1bmNhdGVkLgotCi0gICAgIiIiCi0gICAgZXhjX2RldGFpbHMgPSB7fQotICAgIGlmIG5hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIGV4Y19kZXRhaWxzWyduYW1lJ10gPSBuYW1lCi0gICAgZWxzZToKLSAgICAgICAgIyBUbyBwcmV2ZW50IGhhdmluZyB0byBtYWtlIGFsbCBtZXNzYWdlcyBoYXZlIGEgY29uZGl0aW9uYWwgbmFtZS4KLSAgICAgICAgbmFtZSA9ICc8Ynl0ZWNvZGU+JwotICAgIGlmIHBhdGggaXMgbm90IE5vbmU6Ci0gICAgICAgIGV4Y19kZXRhaWxzWydwYXRoJ10gPSBwYXRoCi0gICAgbWFnaWMgPSBkYXRhWzo0XQotICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICByYXdfc2l6ZSA9IGRhdGFbODoxMl0KLSAgICBpZiBtYWdpYyAhPSBNQUdJQ19OVU1CRVI6Ci0gICAgICAgIG1lc3NhZ2UgPSAnYmFkIG1hZ2ljIG51bWJlciBpbiB7IXJ9OiB7IXJ9Jy5mb3JtYXQobmFtZSwgbWFnaWMpCi0gICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9JywgbWVzc2FnZSkKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgKipleGNfZGV0YWlscykKLSAgICBlbGlmIGxlbihyYXdfdGltZXN0YW1wKSAhPSA0OgotICAgICAgICBtZXNzYWdlID0gJ3JlYWNoZWQgRU9GIHdoaWxlIHJlYWRpbmcgdGltZXN0YW1wIGluIHshcn0nLmZvcm1hdChuYW1lKQotICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd7fScsIG1lc3NhZ2UpCi0gICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCi0gICAgZWxpZiBsZW4ocmF3X3NpemUpICE9IDQ6Ci0gICAgICAgIG1lc3NhZ2UgPSAncmVhY2hlZCBFT0Ygd2hpbGUgcmVhZGluZyBzaXplIG9mIHNvdXJjZSBpbiB7IXJ9Jy5mb3JtYXQobmFtZSkKLSAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30nLCBtZXNzYWdlKQotICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQotICAgIGlmIHNvdXJjZV9zdGF0cyBpcyBub3QgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc291cmNlX210aW1lID0gaW50KHNvdXJjZV9zdGF0c1snbXRpbWUnXSkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfdGltZXN0YW1wKSAhPSBzb3VyY2VfbXRpbWU6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSA9ICdieXRlY29kZSBpcyBzdGFsZSBmb3IgeyFyfScuZm9ybWF0KG5hbWUpCi0gICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30nLCBtZXNzYWdlKQotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsICoqZXhjX2RldGFpbHMpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNvdXJjZV9zaXplID0gc291cmNlX3N0YXRzWydzaXplJ10gJiAweEZGRkZGRkZGCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3NpemUpICE9IHNvdXJjZV9zaXplOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdieXRlY29kZSBpcyBzdGFsZSBmb3IgeyFyfScuZm9ybWF0KG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqZXhjX2RldGFpbHMpCi0gICAgcmV0dXJuIGRhdGFbMTI6XQotCi0KLWRlZiBfY29tcGlsZV9ieXRlY29kZShkYXRhLCBuYW1lPU5vbmUsIGJ5dGVjb2RlX3BhdGg9Tm9uZSwgc291cmNlX3BhdGg9Tm9uZSk6Ci0gICAgIiIiQ29tcGlsZSBieXRlY29kZSBhcyByZXR1cm5lZCBieSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKCkuIiIiCi0gICAgY29kZSA9IG1hcnNoYWwubG9hZHMoZGF0YSkKLSAgICBpZiBpc2luc3RhbmNlKGNvZGUsIF9jb2RlX3R5cGUpOgotICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjb2RlIG9iamVjdCBmcm9tIHshcn0nLCBieXRlY29kZV9wYXRoKQotICAgICAgICBpZiBzb3VyY2VfcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9pbXAuX2ZpeF9jb19maWxlbmFtZShjb2RlLCBzb3VyY2VfcGF0aCkKLSAgICAgICAgcmV0dXJuIGNvZGUKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignTm9uLWNvZGUgb2JqZWN0IGluIHshcn0nLmZvcm1hdChieXRlY29kZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0KLWRlZiBfY29kZV90b19ieXRlY29kZShjb2RlLCBtdGltZT0wLCBzb3VyY2Vfc2l6ZT0wKToKLSAgICAiIiJDb21waWxlIGEgY29kZSBvYmplY3QgaW50byBieXRlY29kZSBmb3Igd3JpdGluZyBvdXQgdG8gYSBieXRlLWNvbXBpbGVkCi0gICAgZmlsZS4iIiIKLSAgICBkYXRhID0gYnl0ZWFycmF5KE1BR0lDX05VTUJFUikKLSAgICBkYXRhLmV4dGVuZChfd19sb25nKG10aW1lKSkKLSAgICBkYXRhLmV4dGVuZChfd19sb25nKHNvdXJjZV9zaXplKSkKLSAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGUpKQotICAgIHJldHVybiBkYXRhCi0KLQotZGVmIGRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKToKLSAgICAiIiJEZWNvZGUgYnl0ZXMgcmVwcmVzZW50aW5nIHNvdXJjZSBjb2RlIGFuZCByZXR1cm4gdGhlIHN0cmluZy4KLQotICAgIFVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQgaXMgdXNlZCBpbiB0aGUgZGVjb2RpbmcuCi0gICAgIiIiCi0gICAgaW1wb3J0IHRva2VuaXplICAjIFRvIGF2b2lkIGJvb3RzdHJhcCBpc3N1ZXMuCi0gICAgc291cmNlX2J5dGVzX3JlYWRsaW5lID0gX2lvLkJ5dGVzSU8oc291cmNlX2J5dGVzKS5yZWFkbGluZQotICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHNvdXJjZV9ieXRlc19yZWFkbGluZSkKLSAgICBuZXdsaW5lX2RlY29kZXIgPSBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihOb25lLCBUcnVlKQotICAgIHJldHVybiBuZXdsaW5lX2RlY29kZXIuZGVjb2RlKHNvdXJjZV9ieXRlcy5kZWNvZGUoZW5jb2RpbmdbMF0pKQotCisgICAgICAgIHJldHVybiBfbG9hZChzcGVjKQogCiAjIE1vZHVsZSBzcGVjaWZpY2F0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTcwNCw3ICsyODYsNyBAQAogICAgICAgICBwYXNzCiAgICAgZWxzZToKICAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBfU3BlY01ldGhvZHMoc3BlYykubW9kdWxlX3JlcHIoKQorICAgICAgICAgICAgcmV0dXJuIF9tb2R1bGVfcmVwcl9mcm9tX3NwZWMoc3BlYykKIAogICAgICMgV2UgY291bGQgdXNlIG1vZHVsZS5fX2NsYXNzX18uX19uYW1lX18gaW5zdGVhZCBvZiAnbW9kdWxlJyBpbiB0aGUKICAgICAjIHZhcmlvdXMgcmVwciBwZXJtdXRhdGlvbnMuCkBAIC04MjUsMTQgKzQwNyw5IEBACiAgICAgZGVmIGNhY2hlZChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fY2FjaGVkIGlzIE5vbmU6CiAgICAgICAgICAgICBpZiBzZWxmLm9yaWdpbiBpcyBub3QgTm9uZSBhbmQgc2VsZi5fc2V0X2ZpbGVhdHRyOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vcmlnaW4KLSAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCh0dXBsZShTT1VSQ0VfU1VGRklYRVMpKToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkID0gY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoQllURUNPREVfU1VGRklYRVMpKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkID0gZmlsZW5hbWUKKyAgICAgICAgICAgICAgICBpZiBfYm9vdHN0cmFwX2V4dGVybmFsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZWQgPSBfYm9vdHN0cmFwX2V4dGVybmFsLl9nZXRfY2FjaGVkKHNlbGYub3JpZ2luKQogICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkCiAKICAgICBAY2FjaGVkLnNldHRlcgpAQCAtODU5LDYgKzQzNiwxMCBAQAogZGVmIHNwZWNfZnJvbV9sb2FkZXIobmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgaXNfcGFja2FnZT1Ob25lKToKICAgICAiIiJSZXR1cm4gYSBtb2R1bGUgc3BlYyBiYXNlZCBvbiB2YXJpb3VzIGxvYWRlciBtZXRob2RzLiIiIgogICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnZ2V0X2ZpbGVuYW1lJyk6CisgICAgICAgIGlmIF9ib290c3RyYXBfZXh0ZXJuYWwgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24gPSBfYm9vdHN0cmFwX2V4dGVybmFsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uCisKICAgICAgICAgaWYgaXNfcGFja2FnZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvYWRlcj1sb2FkZXIpCiAgICAgICAgIHNlYXJjaCA9IFtdIGlmIGlzX3BhY2thZ2UgZWxzZSBOb25lCkBAIC04ODEsNzAgKzQ2Miw2IEBACiBfUE9QVUxBVEUgPSBvYmplY3QoKQogCiAKLWRlZiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBsb2NhdGlvbj1Ob25lLCAqLCBsb2FkZXI9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1fUE9QVUxBVEUpOgotICAgICIiIlJldHVybiBhIG1vZHVsZSBzcGVjIGJhc2VkIG9uIGEgZmlsZSBsb2NhdGlvbi4KLQotICAgIFRvIGluZGljYXRlIHRoYXQgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIHNldAotICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIHRvIGEgbGlzdCBvZiBkaXJlY3RvcnkgcGF0aHMuICBBbgotICAgIGVtcHR5IGxpc3QgaXMgc3VmZmljaWVudCwgdGhvdWdoIGl0cyBub3Qgb3RoZXJ3aXNlIHVzZWZ1bCB0byB0aGUKLSAgICBpbXBvcnQgc3lzdGVtLgotCi0gICAgVGhlIGxvYWRlciBtdXN0IHRha2UgYSBzcGVjIGFzIGl0cyBvbmx5IF9faW5pdF9fKCkgYXJnLgotCi0gICAgIiIiCi0gICAgaWYgbG9jYXRpb24gaXMgTm9uZToKLSAgICAgICAgIyBUaGUgY2FsbGVyIG1heSBzaW1wbHkgd2FudCBhIHBhcnRpYWxseSBwb3B1bGF0ZWQgbG9jYXRpb24tCi0gICAgICAgICMgb3JpZW50ZWQgc3BlYy4gIFNvIHdlIHNldCB0aGUgbG9jYXRpb24gdG8gYSBib2d1cyB2YWx1ZSBhbmQKLSAgICAgICAgIyBmaWxsIGluIGFzIG11Y2ggYXMgd2UgY2FuLgotICAgICAgICBsb2NhdGlvbiA9ICc8dW5rbm93bj4nCi0gICAgICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnZ2V0X2ZpbGVuYW1lJyk6Ci0gICAgICAgICAgICAjIEV4ZWN1dGlvbkxvYWRlcgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gbG9hZGVyLmdldF9maWxlbmFtZShuYW1lKQotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICMgSWYgdGhlIGxvY2F0aW9uIGlzIG9uIHRoZSBmaWxlc3lzdGVtLCBidXQgZG9lc24ndCBhY3R1YWxseSBleGlzdCwKLSAgICAjIHdlIGNvdWxkIHJldHVybiBOb25lIGhlcmUsIGluZGljYXRpbmcgdGhhdCB0aGUgbG9jYXRpb24gaXMgbm90Ci0gICAgIyB2YWxpZC4gIEhvd2V2ZXIsIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSBvZiB0ZXN0aW5nIHNpbmNlIGFuCi0gICAgIyBpbmRpcmVjdCBsb2NhdGlvbiAoZS5nLiBhIHppcCBmaWxlIG9yIFVSTCkgd2lsbCBsb29rIGxpa2UgYQotICAgICMgbm9uLWV4aXN0ZW50IGZpbGUgcmVsYXRpdmUgdG8gdGhlIGZpbGVzeXN0ZW0uCi0KLSAgICBzcGVjID0gTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIsIG9yaWdpbj1sb2NhdGlvbikKLSAgICBzcGVjLl9zZXRfZmlsZWF0dHIgPSBUcnVlCi0KLSAgICAjIFBpY2sgYSBsb2FkZXIgaWYgb25lIHdhc24ndCBwcm92aWRlZC4KLSAgICBpZiBsb2FkZXIgaXMgTm9uZToKLSAgICAgICAgZm9yIGxvYWRlcl9jbGFzcywgc3VmZml4ZXMgaW4gX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCk6Ci0gICAgICAgICAgICBpZiBsb2NhdGlvbi5lbmRzd2l0aCh0dXBsZShzdWZmaXhlcykpOgotICAgICAgICAgICAgICAgIGxvYWRlciA9IGxvYWRlcl9jbGFzcyhuYW1lLCBsb2NhdGlvbikKLSAgICAgICAgICAgICAgICBzcGVjLmxvYWRlciA9IGxvYWRlcgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBTZXQgc3VibW9kdWxlX3NlYXJjaF9wYXRocyBhcHByb3ByaWF0ZWx5LgotICAgIGlmIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIF9QT1BVTEFURToKLSAgICAgICAgIyBDaGVjayB0aGUgbG9hZGVyLgotICAgICAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gbG9hZGVyLmlzX3BhY2thZ2UobmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbXQotICAgIGVsc2U6Ci0gICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucwotICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPT0gW106Ci0gICAgICAgIGlmIGxvY2F0aW9uOgotICAgICAgICAgICAgZGlybmFtZSA9IF9wYXRoX3NwbGl0KGxvY2F0aW9uKVswXQotICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucy5hcHBlbmQoZGlybmFtZSkKLQotICAgIHJldHVybiBzcGVjCi0KLQogZGVmIF9zcGVjX2Zyb21fbW9kdWxlKG1vZHVsZSwgbG9hZGVyPU5vbmUsIG9yaWdpbj1Ob25lKToKICAgICAjIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIHVzZSBpbiBfc2V0dXAoKS4KICAgICB0cnk6CkBAIC05OTAsMjU3ICs1MDcsMTkwIEBACiAgICAgcmV0dXJuIHNwZWMKIAogCi1jbGFzcyBfU3BlY01ldGhvZHM6CitkZWYgX2luaXRfbW9kdWxlX2F0dHJzKHNwZWMsIG1vZHVsZSwgKiwgb3ZlcnJpZGU9RmFsc2UpOgorICAgICMgVGhlIHBhc3NlZC1pbiBtb2R1bGUgbWF5IGJlIG5vdCBzdXBwb3J0IGF0dHJpYnV0ZSBhc3NpZ25tZW50LAorICAgICMgaW4gd2hpY2ggY2FzZSB3ZSBzaW1wbHkgZG9uJ3Qgc2V0IHRoZSBhdHRyaWJ1dGVzLgorICAgICMgX19uYW1lX18KKyAgICBpZiAob3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX25hbWVfXycsIE5vbmUpIGlzIE5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUuX19uYW1lX18gPSBzcGVjLm5hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICMgX19sb2FkZXJfXworICAgIGlmIG92ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCisgICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgIyBBIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaGFjay4KKyAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgX2Jvb3RzdHJhcF9leHRlcm5hbCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICAgICAgICAgX05hbWVzcGFjZUxvYWRlciA9IF9ib290c3RyYXBfZXh0ZXJuYWwuX05hbWVzcGFjZUxvYWRlcgogCi0gICAgIiIiQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgc3BlYyBvYmplY3RzIHRvIHByb3ZpZGUgc3BlYy1zcGVjaWZpYwotICAgIG1ldGhvZHMuIiIiCisgICAgICAgICAgICAgICAgbG9hZGVyID0gX05hbWVzcGFjZUxvYWRlci5fX25ld19fKF9OYW1lc3BhY2VMb2FkZXIpCisgICAgICAgICAgICAgICAgbG9hZGVyLl9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgIyBfX3BhY2thZ2VfXworICAgIGlmIG92ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzcGVjLnBhcmVudAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgIyBfX3NwZWNfXworICAgIHRyeToKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgICMgX19wYXRoX18KKyAgICBpZiBvdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICMgX19maWxlX18vX19jYWNoZWRfXworICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgorICAgICAgICBpZiBvdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzcGVjLm9yaWdpbgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICMgVGhlIHZhcmlvdXMgc3BlY19mcm9tXyogZnVuY3Rpb25zIGNvdWxkIGJlIG1hZGUgZmFjdG9yeSBtZXRob2RzIGhlcmUuCisgICAgICAgIGlmIG92ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19jYWNoZWRfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzcGVjLmNhY2hlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc3BlYy5jYWNoZWQKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gbW9kdWxlCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3BlYyk6Ci0gICAgICAgIHNlbGYuc3BlYyA9IHNwZWMKIAotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSByZXByIHRvIHVzZSBmb3IgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgIyBXZSBtb3N0bHkgcmVwbGljYXRlIF9tb2R1bGVfcmVwcigpIHVzaW5nIHRoZSBzcGVjIGF0dHJpYnV0ZXMuCi0gICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKLSAgICAgICAgbmFtZSA9ICc/JyBpZiBzcGVjLm5hbWUgaXMgTm9uZSBlbHNlIHNwZWMubmFtZQotICAgICAgICBpZiBzcGVjLm9yaWdpbiBpcyBOb25lOgotICAgICAgICAgICAgaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfT4nLmZvcm1hdChuYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoeyFyfSk+Jy5mb3JtYXQobmFtZSwgc3BlYy5sb2FkZXIpCitkZWYgbW9kdWxlX2Zyb21fc3BlYyhzcGVjKToKKyAgICAiIiJDcmVhdGUgYSBtb2R1bGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNwZWMuIiIiCisgICAgIyBUeXBpY2FsbHkgbG9hZGVycyB3aWxsIG5vdCBpbXBsZW1lbnQgY3JlYXRlX21vZHVsZSgpLgorICAgIG1vZHVsZSA9IE5vbmUKKyAgICBpZiBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgorICAgICAgICAjIElmIGNyZWF0ZV9tb2R1bGUoKSByZXR1cm5zIGBOb25lYCB0aGVuIGl0IG1lYW5zIGRlZmF1bHQKKyAgICAgICAgIyBtb2R1bGUgY3JlYXRpb24gc2hvdWxkIGJlIHVzZWQuCisgICAgICAgIG1vZHVsZSA9IHNwZWMubG9hZGVyLmNyZWF0ZV9tb2R1bGUoc3BlYykKKyAgICBlbGlmIGhhc2F0dHIoc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgorICAgICAgICBfd2FybmluZ3Mud2Fybignc3RhcnRpbmcgaW4gUHl0aG9uIDMuNiwgbG9hZGVycyBkZWZpbmluZyBleGVjX21vZHVsZSgpICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYWxzbyBkZWZpbmUgY3JlYXRlX21vZHVsZSgpJywKKyAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgIG1vZHVsZSA9IF9uZXdfbW9kdWxlKHNwZWMubmFtZSkKKyAgICBfaW5pdF9tb2R1bGVfYXR0cnMoc3BlYywgbW9kdWxlKQorICAgIHJldHVybiBtb2R1bGUKKworCitkZWYgX21vZHVsZV9yZXByX2Zyb21fc3BlYyhzcGVjKToKKyAgICAiIiJSZXR1cm4gdGhlIHJlcHIgdG8gdXNlIGZvciB0aGUgbW9kdWxlLiIiIgorICAgICMgV2UgbW9zdGx5IHJlcGxpY2F0ZSBfbW9kdWxlX3JlcHIoKSB1c2luZyB0aGUgc3BlYyBhdHRyaWJ1dGVzLgorICAgIG5hbWUgPSAnPycgaWYgc3BlYy5uYW1lIGlzIE5vbmUgZWxzZSBzcGVjLm5hbWUKKyAgICBpZiBzcGVjLm9yaWdpbiBpcyBOb25lOgorICAgICAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQobmFtZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgotICAgICAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdChuYW1lLCBzcGVjLm9yaWdpbikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHt9KT4nLmZvcm1hdChzcGVjLm5hbWUsIHNwZWMub3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHshcn0pPicuZm9ybWF0KG5hbWUsIHNwZWMubG9hZGVyKQorICAgIGVsc2U6CisgICAgICAgIGlmIHNwZWMuaGFzX2xvY2F0aW9uOgorICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KG5hbWUsIHNwZWMub3JpZ2luKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHt9KT4nLmZvcm1hdChzcGVjLm5hbWUsIHNwZWMub3JpZ2luKQogCi0gICAgZGVmIGluaXRfbW9kdWxlX2F0dHJzKHNlbGYsIG1vZHVsZSwgKiwgX292ZXJyaWRlPUZhbHNlLCBfZm9yY2VfbmFtZT1UcnVlKToKLSAgICAgICAgIiIiU2V0IHRoZSBtb2R1bGUncyBhdHRyaWJ1dGVzLgogCi0gICAgICAgIEFsbCBtaXNzaW5nIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIHdpbGwgYmUgc2V0LiAgSGVyZQotICAgICAgICBpcyBob3cgdGhlIHNwZWMgYXR0cmlidXRlcyBtYXAgb250byB0aGUgbW9kdWxlOgorIyBVc2VkIGJ5IGltcG9ydGxpYi5yZWxvYWQoKSBhbmQgX2xvYWRfbW9kdWxlX3NoaW0oKS4KK2RlZiBfZXhlYyhzcGVjLCBtb2R1bGUpOgorICAgICIiIkV4ZWN1dGUgdGhlIHNwZWMgaW4gYW4gZXhpc3RpbmcgbW9kdWxlJ3MgbmFtZXNwYWNlLiIiIgorICAgIG5hbWUgPSBzcGVjLm5hbWUKKyAgICBfaW1wLmFjcXVpcmVfbG9jaygpCisgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIobmFtZSk6CisgICAgICAgIGlmIHN5cy5tb2R1bGVzLmdldChuYW1lKSBpcyBub3QgbW9kdWxlOgorICAgICAgICAgICAgbXNnID0gJ21vZHVsZSB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcycuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbWlzc2luZyBsb2FkZXInLCBuYW1lPXNwZWMubmFtZSkKKyAgICAgICAgICAgICMgbmFtZXNwYWNlIHBhY2thZ2UKKyAgICAgICAgICAgIF9pbml0X21vZHVsZV9hdHRycyhzcGVjLCBtb2R1bGUsIG92ZXJyaWRlPVRydWUpCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIF9pbml0X21vZHVsZV9hdHRycyhzcGVjLCBtb2R1bGUsIG92ZXJyaWRlPVRydWUpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgICMgKGlzc3VlMTk3MTMpIE9uY2UgQnVpbHRpbkltcG9ydGVyIGFuZCBFeHRlbnNpb25GaWxlTG9hZGVyCisgICAgICAgICAgICAjIGhhdmUgZXhlY19tb2R1bGUoKSBpbXBsZW1lbnRlZCwgd2UgY2FuIGFkZCBhIGRlcHJlY2F0aW9uCisgICAgICAgICAgICAjIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgICAgIHNwZWMubG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGVjLmxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCiAKLSAgICAgICAgc3BlYy5uYW1lIC0+IG1vZHVsZS5fX25hbWVfXwotICAgICAgICBzcGVjLmxvYWRlciAtPiBtb2R1bGUuX19sb2FkZXJfXwotICAgICAgICBzcGVjLnBhcmVudCAtPiBtb2R1bGUuX19wYWNrYWdlX18KLSAgICAgICAgc3BlYyAtPiBtb2R1bGUuX19zcGVjX18KIAotICAgICAgICBPcHRpb25hbDoKLSAgICAgICAgc3BlYy5vcmlnaW4gLT4gbW9kdWxlLl9fZmlsZV9fIChpZiBzcGVjLnNldF9maWxlYXR0ciBpcyB0cnVlKQotICAgICAgICBzcGVjLmNhY2hlZCAtPiBtb2R1bGUuX19jYWNoZWRfXyAoaWYgX19maWxlX18gYWxzbyBzZXQpCi0gICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgLT4gbW9kdWxlLl9fcGF0aF9fIChpZiBzZXQpCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKLQotICAgICAgICAjIFRoZSBwYXNzZWQgaW4gbW9kdWxlIG1heSBiZSBub3Qgc3VwcG9ydCBhdHRyaWJ1dGUgYXNzaWdubWVudCwKLSAgICAgICAgIyBpbiB3aGljaCBjYXNlIHdlIHNpbXBseSBkb24ndCBzZXQgdGhlIGF0dHJpYnV0ZXMuCi0KLSAgICAgICAgIyBfX25hbWVfXwotICAgICAgICBpZiAoX292ZXJyaWRlIG9yIF9mb3JjZV9uYW1lIG9yCi0gICAgICAgICAgICBnZXRhdHRyKG1vZHVsZSwgJ19fbmFtZV9fJywgTm9uZSkgaXMgTm9uZSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fbmFtZV9fID0gc3BlYy5uYW1lCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICMgX19sb2FkZXJfXwotICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgTm9uZToKLSAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCi0gICAgICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAjIEEgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrLgotICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IF9OYW1lc3BhY2VMb2FkZXIuX19uZXdfXyhfTmFtZXNwYWNlTG9hZGVyKQotICAgICAgICAgICAgICAgICAgICBsb2FkZXIuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgIyBfX3BhY2thZ2VfXwotICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc3BlYy5wYXJlbnQKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgIyBfX3NwZWNfXworZGVmIF9sb2FkX2JhY2t3YXJkX2NvbXBhdGlibGUoc3BlYyk6CisgICAgIyAoaXNzdWUxOTcxMykgT25jZSBCdWlsdGluSW1wb3J0ZXIgYW5kIEV4dGVuc2lvbkZpbGVMb2FkZXIKKyAgICAjIGhhdmUgZXhlY19tb2R1bGUoKSBpbXBsZW1lbnRlZCwgd2UgY2FuIGFkZCBhIGRlcHJlY2F0aW9uCisgICAgIyB3YXJuaW5nIGhlcmUuCisgICAgc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUoc3BlYy5uYW1lKQorICAgICMgVGhlIG1vZHVsZSBtdXN0IGJlIGluIHN5cy5tb2R1bGVzIGF0IHRoaXMgcG9pbnQhCisgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc3BlYy5sb2FkZXIKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFNpbmNlIG1vZHVsZS5fX3BhdGhfXyBtYXkgbm90IGxpbmUgdXAgd2l0aAorICAgICAgICAgICAgIyBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfcGF0aHMsIHdlIGNhbid0IG5lY2Vzc2FyaWx5IHJlbHkKKyAgICAgICAgICAgICMgb24gc3BlYy5wYXJlbnQgaGVyZS4KKyAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXworICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzcGVjLm5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fc3BlY19fJywgTm9uZSkgaXMgTm9uZToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuIG1vZHVsZQogCi0gICAgICAgICMgX19wYXRoX18KLSAgICAgICAgaWYgX292ZXJyaWRlIG9yIGdldGF0dHIobW9kdWxlLCAnX19wYXRoX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKLSAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKK2RlZiBfbG9hZF91bmxvY2tlZChzcGVjKToKKyAgICAjIEEgaGVscGVyIGZvciBkaXJlY3QgdXNlIGJ5IHRoZSBpbXBvcnQgc3lzdGVtLgorICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAjIG5vdCBhIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgIHJldHVybiBfbG9hZF9iYWNrd2FyZF9jb21wYXRpYmxlKHNwZWMpCiAKLSAgICAgICAgaWYgc3BlYy5oYXNfbG9jYXRpb246Ci0gICAgICAgICAgICAjIF9fZmlsZV9fCi0gICAgICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2ZpbGVfXycsIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzcGVjLm9yaWdpbgotICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAjIF9fY2FjaGVkX18KLSAgICAgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHNwZWMuY2FjaGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNwZWMuY2FjaGVkCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgIGRlZiBjcmVhdGUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIG5ldyBtb2R1bGUgdG8gYmUgbG9hZGVkLgotCi0gICAgICAgIFRoZSBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyBhcmUgYWxzbyBzZXQgd2l0aCB0aGUKLSAgICAgICAgYXBwcm9wcmlhdGUgdmFsdWVzIGZyb20gdGhlIHNwZWMuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKLSAgICAgICAgIyBUeXBpY2FsbHkgbG9hZGVycyB3aWxsIG5vdCBpbXBsZW1lbnQgY3JlYXRlX21vZHVsZSgpLgotICAgICAgICBpZiBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgotICAgICAgICAgICAgIyBJZiBjcmVhdGVfbW9kdWxlKCkgcmV0dXJucyBgTm9uZWAgaXQgbWVhbnMgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgICMgbW9kdWxlIGNyZWF0aW9uIHNob3VsZCBiZSB1c2VkLgotICAgICAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIuY3JlYXRlX21vZHVsZShzcGVjKQorICAgIG1vZHVsZSA9IG1vZHVsZV9mcm9tX3NwZWMoc3BlYykKKyAgICB3aXRoIF9pbnN0YWxsZWRfc2FmZWx5KG1vZHVsZSk6CisgICAgICAgIGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ21pc3NpbmcgbG9hZGVyJywgbmFtZT1zcGVjLm5hbWUpCisgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2Ugc28gZG8gbm90aGluZy4KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZSA9IE5vbmUKLSAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBvcGVuKCkgaXMgZXZlciBjYWxsZWQgYXMgdGhlICdpbycKLSAgICAgICAgICAgICMgbW9kdWxlIGltcGxpY2l0bHkgaW1wb3J0cyAnbG9jYWxlJyBhbmQgd291bGQgb3RoZXJ3aXNlCi0gICAgICAgICAgICAjIHRyaWdnZXIgYW4gaW5maW5pdGUgbG9vcC4KLSAgICAgICAgICAgIG1vZHVsZSA9IF9uZXdfbW9kdWxlKHNwZWMubmFtZSkKLSAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCi0gICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgICAgIHNwZWMubG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKIAotICAgIGRlZiBfZXhlYyhzZWxmLCBtb2R1bGUpOgotICAgICAgICAiIiJEbyBldmVyeXRoaW5nIG5lY2Vzc2FyeSB0byBleGVjdXRlIHRoZSBtb2R1bGUuCisgICAgIyBXZSBkb24ndCBlbnN1cmUgdGhhdCB0aGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgZ2V0CisgICAgIyBzZXQgaW4gdGhlIHN5cy5tb2R1bGVzIHJlcGxhY2VtZW50IGNhc2UuICBTdWNoIG1vZHVsZXMgYXJlIG9uCisgICAgIyB0aGVpciBvd24uCisgICAgcmV0dXJuIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KIAotICAgICAgICBUaGUgbmFtZXNwYWNlIG9mIGBtb2R1bGVgIGlzIHVzZWQgYXMgdGhlIHRhcmdldCBvZiBleGVjdXRpb24uCi0gICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGxvYWRlcidzIGBleGVjX21vZHVsZSgpYCBtZXRob2QuCisjIEEgbWV0aG9kIHVzZWQgZHVyaW5nIHRlc3Rpbmcgb2YgX2xvYWRfdW5sb2NrZWQoKSBhbmQgYnkKKyMgX2xvYWRfbW9kdWxlX3NoaW0oKS4KK2RlZiBfbG9hZChzcGVjKToKKyAgICAiIiJSZXR1cm4gYSBuZXcgbW9kdWxlIG9iamVjdCwgbG9hZGVkIGJ5IHRoZSBzcGVjJ3MgbG9hZGVyLgogCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnNwZWMubG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICBUaGUgbW9kdWxlIGlzIG5vdCBhZGRlZCB0byBpdHMgcGFyZW50LgogCi0gICAgIyBVc2VkIGJ5IGltcG9ydGxpYi5yZWxvYWQoKSBhbmQgX2xvYWRfbW9kdWxlX3NoaW0oKS4KLSAgICBkZWYgZXhlYyhzZWxmLCBtb2R1bGUpOgotICAgICAgICAiIiJFeGVjdXRlIHRoZSBzcGVjIGluIGFuIGV4aXN0aW5nIG1vZHVsZSdzIG5hbWVzcGFjZS4iIiIKLSAgICAgICAgbmFtZSA9IHNlbGYuc3BlYy5uYW1lCi0gICAgICAgIF9pbXAuYWNxdWlyZV9sb2NrKCkKLSAgICAgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIobmFtZSk6Ci0gICAgICAgICAgICBpZiBzeXMubW9kdWxlcy5nZXQobmFtZSkgaXMgbm90IG1vZHVsZToKLSAgICAgICAgICAgICAgICBtc2cgPSAnbW9kdWxlIHshcn0gbm90IGluIHN5cy5tb2R1bGVzJy5mb3JtYXQobmFtZSkKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKLSAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ21pc3NpbmcgbG9hZGVyJywgbmFtZT1zZWxmLnNwZWMubmFtZSkKLSAgICAgICAgICAgICAgICAjIG5hbWVzcGFjZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUsIF9vdmVycmlkZT1UcnVlKQotICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKLSAgICAgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlLCBfb3ZlcnJpZGU9VHJ1ZSkKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgotICAgICAgICAgICAgICAgICMgKGlzc3VlMTk3MTMpIE9uY2UgQnVpbHRpbkltcG9ydGVyIGFuZCBFeHRlbnNpb25GaWxlTG9hZGVyCi0gICAgICAgICAgICAgICAgIyBoYXZlIGV4ZWNfbW9kdWxlKCkgaW1wbGVtZW50ZWQsIHdlIGNhbiBhZGQgYSBkZXByZWNhdGlvbgotICAgICAgICAgICAgICAgICMgd2FybmluZyBoZXJlLgotICAgICAgICAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZXhlYyhtb2R1bGUpCi0gICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorICAgIElmIGEgbW9kdWxlIGlzIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMsIHRoYXQgZXhpc3RpbmcgbW9kdWxlIGdldHMKKyAgICBjbG9iYmVyZWQuCiAKLSAgICBkZWYgX2xvYWRfYmFja3dhcmRfY29tcGF0aWJsZShzZWxmKToKLSAgICAgICAgIyAoaXNzdWUxOTcxMykgT25jZSBCdWlsdGluSW1wb3J0ZXIgYW5kIEV4dGVuc2lvbkZpbGVMb2FkZXIKLSAgICAgICAgIyBoYXZlIGV4ZWNfbW9kdWxlKCkgaW1wbGVtZW50ZWQsIHdlIGNhbiBhZGQgYSBkZXByZWNhdGlvbgotICAgICAgICAjIHdhcm5pbmcgaGVyZS4KLSAgICAgICAgc3BlYyA9IHNlbGYuc3BlYwotICAgICAgICBzcGVjLmxvYWRlci5sb2FkX21vZHVsZShzcGVjLm5hbWUpCi0gICAgICAgICMgVGhlIG1vZHVsZSBtdXN0IGJlIGluIHN5cy5tb2R1bGVzIGF0IHRoaXMgcG9pbnQhCi0gICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KLSAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNwZWMubG9hZGVyCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJywgTm9uZSkgaXMgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFNpbmNlIG1vZHVsZS5fX3BhdGhfXyBtYXkgbm90IGxpbmUgdXAgd2l0aAotICAgICAgICAgICAgICAgICMgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX3BhdGhzLCB3ZSBjYW4ndCBuZWNlc3NhcmlseSByZWx5Ci0gICAgICAgICAgICAgICAgIyBvbiBzcGVjLnBhcmVudCBoZXJlLgotICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNwZWMubmFtZS5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19zcGVjX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHJldHVybiBtb2R1bGUKLQotICAgIGRlZiBfbG9hZF91bmxvY2tlZChzZWxmKToKLSAgICAgICAgIyBBIGhlbHBlciBmb3IgZGlyZWN0IHVzZSBieSB0aGUgaW1wb3J0IHN5c3RlbS4KLSAgICAgICAgaWYgc2VsZi5zcGVjLmxvYWRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICMgbm90IGEgbmFtZXNwYWNlIHBhY2thZ2UKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9sb2FkX2JhY2t3YXJkX2NvbXBhdGlibGUoKQotCi0gICAgICAgIG1vZHVsZSA9IHNlbGYuY3JlYXRlKCkKLSAgICAgICAgd2l0aCBfaW5zdGFsbGVkX3NhZmVseShtb2R1bGUpOgotICAgICAgICAgICAgaWYgc2VsZi5zcGVjLmxvYWRlciBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbWlzc2luZyBsb2FkZXInLCBuYW1lPXNlbGYuc3BlYy5uYW1lKQotICAgICAgICAgICAgICAgICMgQSBuYW1lc3BhY2UgcGFja2FnZSBzbyBkbyBub3RoaW5nLgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjKG1vZHVsZSkKLQotICAgICAgICAjIFdlIGRvbid0IGVuc3VyZSB0aGF0IHRoZSBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyBnZXQKLSAgICAgICAgIyBzZXQgaW4gdGhlIHN5cy5tb2R1bGVzIHJlcGxhY2VtZW50IGNhc2UuICBTdWNoIG1vZHVsZXMgYXJlIG9uCi0gICAgICAgICMgdGhlaXIgb3duLgotICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCi0KLSAgICAjIEEgbWV0aG9kIHVzZWQgZHVyaW5nIHRlc3Rpbmcgb2YgX2xvYWRfdW5sb2NrZWQoKSBhbmQgYnkKLSAgICAjIF9sb2FkX21vZHVsZV9zaGltKCkuCi0gICAgZGVmIGxvYWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0LCBsb2FkZWQgYnkgdGhlIHNwZWMncyBsb2FkZXIuCi0KLSAgICAgICAgVGhlIG1vZHVsZSBpcyBub3QgYWRkZWQgdG8gaXRzIHBhcmVudC4KLQotICAgICAgICBJZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLCB0aGF0IGV4aXN0aW5nIG1vZHVsZSBnZXRzCi0gICAgICAgIGNsb2JiZXJlZC4KLQotICAgICAgICAiIiIKLSAgICAgICAgX2ltcC5hY3F1aXJlX2xvY2soKQotICAgICAgICB3aXRoIF9Nb2R1bGVMb2NrTWFuYWdlcihzZWxmLnNwZWMubmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF91bmxvY2tlZCgpCi0KLQotZGVmIF9maXhfdXBfbW9kdWxlKG5zLCBuYW1lLCBwYXRobmFtZSwgY3BhdGhuYW1lPU5vbmUpOgotICAgICMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KCkuCi0gICAgbG9hZGVyID0gbnMuZ2V0KCdfX2xvYWRlcl9fJykKLSAgICBzcGVjID0gbnMuZ2V0KCdfX3NwZWNfXycpCi0gICAgaWYgbm90IGxvYWRlcjoKLSAgICAgICAgaWYgc3BlYzoKLSAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCi0gICAgICAgIGVsaWYgcGF0aG5hbWUgPT0gY3BhdGhuYW1lOgotICAgICAgICAgICAgbG9hZGVyID0gU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2FkZXIgPSBTb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQotICAgIGlmIG5vdCBzcGVjOgotICAgICAgICBzcGVjID0gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCi0gICAgdHJ5OgotICAgICAgICBuc1snX19zcGVjX18nXSA9IHNwZWMKLSAgICAgICAgbnNbJ19fbG9hZGVyX18nXSA9IGxvYWRlcgotICAgICAgICBuc1snX19maWxlX18nXSA9IHBhdGhuYW1lCi0gICAgICAgIG5zWydfX2NhY2hlZF9fJ10gPSBjcGF0aG5hbWUKLSAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAjIE5vdCBpbXBvcnRhbnQgZW5vdWdoIHRvIHJlcG9ydC4KLSAgICAgICAgcGFzcworICAgICIiIgorICAgIF9pbXAuYWNxdWlyZV9sb2NrKCkKKyAgICB3aXRoIF9Nb2R1bGVMb2NrTWFuYWdlcihzcGVjLm5hbWUpOgorICAgICAgICByZXR1cm4gX2xvYWRfdW5sb2NrZWQoc3BlYykKIAogCiAjIExvYWRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMjg1LDE2ICs3MzUsMTcgQEAKICAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyIGlmIHNwZWMgaXMgbm90IE5vbmUgZWxzZSBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBAX3JlcXVpcmVzX2J1aWx0aW4KLSAgICBkZWYgbG9hZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkxvYWQgYSBidWlsdC1pbiBtb2R1bGUuIiIiCi0gICAgICAgICMgT25jZSBhbiBleGVjX21vZHVsZSgpIGltcGxlbWVudGF0aW9uIGlzIGFkZGVkIHdlIGNhbiBhbHNvCi0gICAgICAgICMgYWRkIGEgZGVwcmVjYXRpb24gd2FybmluZyBoZXJlLgotICAgICAgICB3aXRoIF9NYW5hZ2VSZWxvYWQoZnVsbG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmluaXRfYnVpbHRpbiwgZnVsbG5hbWUpCi0gICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gY2xzCi0gICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICcnCi0gICAgICAgIHJldHVybiBtb2R1bGUKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgYnVpbHQtaW4gbW9kdWxlIiIiCisgICAgICAgIGlmIHNwZWMubmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3shcn0gaXMgbm90IGEgYnVpbHQtaW4gbW9kdWxlJy5mb3JtYXQoc3BlYy5uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9c3BlYy5uYW1lKQorICAgICAgICByZXR1cm4gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmNyZWF0ZV9idWlsdGluLCBzcGVjKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIkV4ZWMgYSBidWlsdC1pbiBtb2R1bGUiIiIKKyAgICAgICAgX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmV4ZWNfYnVpbHRpbiwgbW9kdWxlKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgQF9yZXF1aXJlc19idWlsdGluCkBAIC0xMzE0LDYgKzc2NSw4IEBACiAgICAgICAgICIiIlJldHVybiBGYWxzZSBhcyBidWlsdC1pbiBtb2R1bGVzIGFyZSBuZXZlciBwYWNrYWdlcy4iIiIKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICBsb2FkX21vZHVsZSA9IGNsYXNzbWV0aG9kKF9sb2FkX21vZHVsZV9zaGltKQorCiAKIGNsYXNzIEZyb3plbkltcG9ydGVyOgogCkBAIC0xMzQ5LDYgKzgwMiwxMCBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIGNscyBpZiBfaW1wLmlzX2Zyb3plbihmdWxsbmFtZSkgZWxzZSBOb25lCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY3JlYXRlX21vZHVsZShjbHMsIHNwZWMpOgorICAgICAgICAiIiJVc2UgZGVmYXVsdCBzZW1hbnRpY3MgZm9yIG1vZHVsZSBjcmVhdGlvbi4iIiIKKwogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZXhlY19tb2R1bGUobW9kdWxlKToKICAgICAgICAgbmFtZSA9IG1vZHVsZS5fX3NwZWNfXy5uYW1lCkBAIC0xMzg2LDczMSArODQzLDYgQEAKICAgICAgICAgcmV0dXJuIF9pbXAuaXNfZnJvemVuX3BhY2thZ2UoZnVsbG5hbWUpCiAKIAotY2xhc3MgV2luZG93c1JlZ2lzdHJ5RmluZGVyOgotCi0gICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4iIiIKLQotICAgIFJFR0lTVFJZX0tFWSA9ICgKLSAgICAgICAgJ1NvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXHtzeXNfdmVyc2lvbn0nCi0gICAgICAgICdcXE1vZHVsZXNcXHtmdWxsbmFtZX0nKQotICAgIFJFR0lTVFJZX0tFWV9ERUJVRyA9ICgKLSAgICAgICAgJ1NvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXHtzeXNfdmVyc2lvbn0nCi0gICAgICAgICdcXE1vZHVsZXNcXHtmdWxsbmFtZX1cXERlYnVnJykKLSAgICBERUJVR19CVUlMRCA9IEZhbHNlICAjIENoYW5nZWQgaW4gX3NldHVwKCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfb3Blbl9yZWdpc3RyeShjbHMsIGtleSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBfd2lucmVnLk9wZW5LZXkoX3dpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUiwga2V5KQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBfd2lucmVnLk9wZW5LZXkoX3dpbnJlZy5IS0VZX0xPQ0FMX01BQ0hJTkUsIGtleSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfc2VhcmNoX3JlZ2lzdHJ5KGNscywgZnVsbG5hbWUpOgotICAgICAgICBpZiBjbHMuREVCVUdfQlVJTEQ6Ci0gICAgICAgICAgICByZWdpc3RyeV9rZXkgPSBjbHMuUkVHSVNUUllfS0VZX0RFQlVHCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWdpc3RyeV9rZXkgPSBjbHMuUkVHSVNUUllfS0VZCi0gICAgICAgIGtleSA9IHJlZ2lzdHJ5X2tleS5mb3JtYXQoZnVsbG5hbWU9ZnVsbG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3ZlcnNpb249c3lzLnZlcnNpb25bOjNdKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGNscy5fb3Blbl9yZWdpc3RyeShrZXkpIGFzIGhrZXk6Ci0gICAgICAgICAgICAgICAgZmlsZXBhdGggPSBfd2lucmVnLlF1ZXJ5VmFsdWUoaGtleSwgJycpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIGZpbGVwYXRoCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgotICAgICAgICBmaWxlcGF0aCA9IGNscy5fc2VhcmNoX3JlZ2lzdHJ5KGZ1bGxuYW1lKQotICAgICAgICBpZiBmaWxlcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX3BhdGhfc3RhdChmaWxlcGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBmb3IgbG9hZGVyLCBzdWZmaXhlcyBpbiBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKToKLSAgICAgICAgICAgIGlmIGZpbGVwYXRoLmVuZHN3aXRoKHR1cGxlKHN1ZmZpeGVzKSk6Ci0gICAgICAgICAgICAgICAgc3BlYyA9IHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGxvYWRlcihmdWxsbmFtZSwgZmlsZXBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1maWxlcGF0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3BlYwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIkZpbmQgbW9kdWxlIG5hbWVkIGluIHRoZSByZWdpc3RyeS4KLQotICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGV4ZWNfbW9kdWxlKCkgaW5zdGVhZC4KLQotICAgICAgICAiIiIKLSAgICAgICAgc3BlYyA9IGNscy5maW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgpCi0gICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLQotY2xhc3MgX0xvYWRlckJhc2ljczoKLQotICAgICIiIkJhc2UgY2xhc3Mgb2YgY29tbW9uIGNvZGUgbmVlZGVkIGJ5IGJvdGggU291cmNlTG9hZGVyIGFuZAotICAgIFNvdXJjZWxlc3NGaWxlTG9hZGVyLiIiIgotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2UgYnkgY2hlY2tpbmcgaWYKLSAgICAgICAgdGhlIHBhdGggcmV0dXJuZWQgYnkgZ2V0X2ZpbGVuYW1lIGhhcyBhIGZpbGVuYW1lIG9mICdfX2luaXRfXy5weScuIiIiCi0gICAgICAgIGZpbGVuYW1lID0gX3BhdGhfc3BsaXQoc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpKVsxXQotICAgICAgICBmaWxlbmFtZV9iYXNlID0gZmlsZW5hbWUucnNwbGl0KCcuJywgMSlbMF0KLSAgICAgICAgdGFpbF9uYW1lID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzJdCi0gICAgICAgIHJldHVybiBmaWxlbmFtZV9iYXNlID09ICdfX2luaXRfXycgYW5kIHRhaWxfbmFtZSAhPSAnX19pbml0X18nCi0KLSAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiRXhlY3V0ZSB0aGUgbW9kdWxlLiIiIgotICAgICAgICBjb2RlID0gc2VsZi5nZXRfY29kZShtb2R1bGUuX19uYW1lX18pCi0gICAgICAgIGlmIGNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdjYW5ub3QgbG9hZCBtb2R1bGUgeyFyfSB3aGVuIGdldF9jb2RlKCkgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybnMgTm9uZScuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykpCi0gICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZSwgbW9kdWxlLl9fZGljdF9fKQotCi0gICAgbG9hZF9tb2R1bGUgPSBfbG9hZF9tb2R1bGVfc2hpbQotCi0KLWNsYXNzIFNvdXJjZUxvYWRlcihfTG9hZGVyQmFzaWNzKToKLQotICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgotICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSAoYW4gaW50KSBmb3IgdGhlCi0gICAgICAgIHNwZWNpZmllZCBwYXRoLCB3aGVyZSBwYXRoIGlzIGEgc3RyLgotCi0gICAgICAgIFJhaXNlcyBJT0Vycm9yIHdoZW4gdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCi0gICAgICAgICIiIgotICAgICAgICByYWlzZSBJT0Vycm9yCi0KLSAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKLSAgICAgICAgIiIiT3B0aW9uYWwgbWV0aG9kIHJldHVybmluZyBhIG1ldGFkYXRhIGRpY3QgZm9yIHRoZSBzcGVjaWZpZWQgcGF0aAotICAgICAgICB0byBieSB0aGUgcGF0aCAoc3RyKS4KLSAgICAgICAgUG9zc2libGUga2V5czoKLSAgICAgICAgLSAnbXRpbWUnIChtYW5kYXRvcnkpIGlzIHRoZSBudW1lcmljIHRpbWVzdGFtcCBvZiBsYXN0IHNvdXJjZQotICAgICAgICAgIGNvZGUgbW9kaWZpY2F0aW9uOwotICAgICAgICAtICdzaXplJyAob3B0aW9uYWwpIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KLQotICAgICAgICBJbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QgYWxsb3dzIHRoZSBsb2FkZXIgdG8gcmVhZCBieXRlY29kZSBmaWxlcy4KLSAgICAgICAgUmFpc2VzIElPRXJyb3Igd2hlbiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5wYXRoX210aW1lKHBhdGgpfQotCi0gICAgZGVmIF9jYWNoZV9ieXRlY29kZShzZWxmLCBzb3VyY2VfcGF0aCwgY2FjaGVfcGF0aCwgZGF0YSk6Ci0gICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB3aGljaCB3cml0ZXMgZGF0YSAoYnl0ZXMpIHRvIGEgZmlsZSBwYXRoIChhIHN0cikuCi0KLSAgICAgICAgSW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kIGFsbG93cyBmb3IgdGhlIHdyaXRpbmcgb2YgYnl0ZWNvZGUgZmlsZXMuCi0KLSAgICAgICAgVGhlIHNvdXJjZSBwYXRoIGlzIG5lZWRlZCBpbiBvcmRlciB0byBjb3JyZWN0bHkgdHJhbnNmZXIgcGVybWlzc2lvbnMKLSAgICAgICAgIiIiCi0gICAgICAgICMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3ZSBkZWxlZ2F0ZSB0byBzZXRfZGF0YSgpCi0gICAgICAgIHJldHVybiBzZWxmLnNldF9kYXRhKGNhY2hlX3BhdGgsIGRhdGEpCi0KLSAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6Ci0gICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB3aGljaCB3cml0ZXMgZGF0YSAoYnl0ZXMpIHRvIGEgZmlsZSBwYXRoIChhIHN0cikuCi0KLSAgICAgICAgSW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kIGFsbG93cyBmb3IgdGhlIHdyaXRpbmcgb2YgYnl0ZWNvZGUgZmlsZXMuCi0gICAgICAgICIiIgotCi0KLSAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZS4iIiIKLSAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkgZnJvbSBleGMKLSAgICAgICAgcmV0dXJuIGRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKQotCi0gICAgZGVmIHNvdXJjZV90b19jb2RlKHNlbGYsIGRhdGEsIHBhdGgsICosIF9vcHRpbWl6ZT0tMSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgY29kZSBvYmplY3QgY29tcGlsZWQgZnJvbSBzb3VyY2UuCi0KLSAgICAgICAgVGhlICdkYXRhJyBhcmd1bWVudCBjYW4gYmUgYW55IG9iamVjdCB0eXBlIHRoYXQgY29tcGlsZSgpIHN1cHBvcnRzLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoY29tcGlsZSwgZGF0YSwgcGF0aCwgJ2V4ZWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlLCBvcHRpbWl6ZT1fb3B0aW1pemUpCi0KLSAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBJbnNwZWN0TG9hZGVyLmdldF9jb2RlLgotCi0gICAgICAgIFJlYWRpbmcgb2YgYnl0ZWNvZGUgcmVxdWlyZXMgcGF0aF9zdGF0cyB0byBiZSBpbXBsZW1lbnRlZC4gVG8gd3JpdGUKLSAgICAgICAgYnl0ZWNvZGUsIHNldF9kYXRhIG11c3QgYWxzbyBiZSBpbXBsZW1lbnRlZC4KLQotICAgICAgICAiIiIKLSAgICAgICAgc291cmNlX3BhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgc291cmNlX210aW1lID0gTm9uZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlX3BhdGgpCi0gICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzdCA9IHNlbGYucGF0aF9zdGF0cyhzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc291cmNlX210aW1lID0gaW50KHN0WydtdGltZSddKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2RhdGEgPSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9zdGF0cz1zdCwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd7fSBtYXRjaGVzIHt9JywgYnl0ZWNvZGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29tcGlsZV9ieXRlY29kZShieXRlc19kYXRhLCBuYW1lPWZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGg9Ynl0ZWNvZGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfcGF0aD1zb3VyY2VfcGF0aCkKLSAgICAgICAgc291cmNlX2J5dGVzID0gc2VsZi5nZXRfZGF0YShzb3VyY2VfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLnNvdXJjZV90b19jb2RlKHNvdXJjZV9ieXRlcywgc291cmNlX3BhdGgpCi0gICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20ge30nLCBzb3VyY2VfcGF0aCkKLSAgICAgICAgaWYgKG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBhbmQgYnl0ZWNvZGVfcGF0aCBpcyBub3QgTm9uZSBhbmQKLSAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgaXMgbm90IE5vbmUpOgotICAgICAgICAgICAgZGF0YSA9IF9jb2RlX3RvX2J5dGVjb2RlKGNvZGVfb2JqZWN0LCBzb3VyY2VfbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgIGxlbihzb3VyY2VfYnl0ZXMpKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2J5dGVjb2RlKHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKQotICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3dyb3RlIHshcn0nLCBieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKLQotCi1jbGFzcyBGaWxlTG9hZGVyOgotCi0gICAgIiIiQmFzZSBmaWxlIGxvYWRlciBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoZSBsb2FkZXIgcHJvdG9jb2wgbWV0aG9kcyB0aGF0Ci0gICAgcmVxdWlyZSBmaWxlIHN5c3RlbSB1c2FnZS4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdWxsbmFtZSwgcGF0aCk6Ci0gICAgICAgICIiIkNhY2hlIHRoZSBtb2R1bGUgbmFtZSBhbmQgdGhlIHBhdGggdG8gdGhlIGZpbGUgZm91bmQgYnkgdGhlCi0gICAgICAgIGZpbmRlci4iIiIKLSAgICAgICAgc2VsZi5uYW1lID0gZnVsbG5hbWUKLSAgICAgICAgc2VsZi5wYXRoID0gcGF0aAotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFzc19fIGFuZAotICAgICAgICAgICAgICAgIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18pCi0KLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBoYXNoKHNlbGYubmFtZSkgXiBoYXNoKHNlbGYucGF0aCkKLQotICAgIEBfY2hlY2tfbmFtZQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkxvYWQgYSBtb2R1bGUgZnJvbSBhIGZpbGUuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBleGVjX21vZHVsZSgpIGluc3RlYWQuCi0KLSAgICAgICAgIiIiCi0gICAgICAgICMgVGhlIG9ubHkgcmVhc29uIGZvciB0aGlzIG1ldGhvZCBpcyBmb3IgdGhlIG5hbWUgY2hlY2suCi0gICAgICAgICMgSXNzdWUgIzE0ODU3OiBBdm9pZCB0aGUgemVyby1hcmd1bWVudCBmb3JtIG9mIHN1cGVyIHNvIHRoZSBpbXBsZW1lbnRhdGlvbgotICAgICAgICAjIG9mIHRoYXQgZm9ybSBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IGJyZWFraW5nIHRoZSBmcm96ZW4gbW9kdWxlCi0gICAgICAgIHJldHVybiBzdXBlcihGaWxlTG9hZGVyLCBzZWxmKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKLQotICAgIEBfY2hlY2tfbmFtZQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlIGFzIGZvdW5kIGJ5IHRoZSBmaW5kZXIuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnBhdGgKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBkYXRhIGZyb20gcGF0aCBhcyByYXcgYnl0ZXMuIiIiCi0gICAgICAgIHdpdGggX2lvLkZpbGVJTyhwYXRoLCAncicpIGFzIGZpbGU6Ci0gICAgICAgICAgICByZXR1cm4gZmlsZS5yZWFkKCkKLQotCi1jbGFzcyBTb3VyY2VGaWxlTG9hZGVyKEZpbGVMb2FkZXIsIFNvdXJjZUxvYWRlcik6Ci0KLSAgICAiIiJDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBTb3VyY2VMb2FkZXIgdXNpbmcgdGhlIGZpbGUgc3lzdGVtLiIiIgotCi0gICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbWV0YWRhdGEgZm9yIHRoZSBwYXRoLiIiIgotICAgICAgICBzdCA9IF9wYXRoX3N0YXQocGF0aCkKLSAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzdC5zdF9tdGltZSwgJ3NpemUnOiBzdC5zdF9zaXplfQotCi0gICAgZGVmIF9jYWNoZV9ieXRlY29kZShzZWxmLCBzb3VyY2VfcGF0aCwgYnl0ZWNvZGVfcGF0aCwgZGF0YSk6Ci0gICAgICAgICMgQWRhcHQgYmV0d2VlbiB0aGUgdHdvIEFQSXMKLSAgICAgICAgbW9kZSA9IF9jYWxjX21vZGUoc291cmNlX3BhdGgpCi0gICAgICAgIHJldHVybiBzZWxmLnNldF9kYXRhKGJ5dGVjb2RlX3BhdGgsIGRhdGEsIF9tb2RlPW1vZGUpCi0KLSAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSwgKiwgX21vZGU9MG82NjYpOgotICAgICAgICAiIiJXcml0ZSBieXRlcyBkYXRhIHRvIGEgZmlsZS4iIiIKLSAgICAgICAgcGFyZW50LCBmaWxlbmFtZSA9IF9wYXRoX3NwbGl0KHBhdGgpCi0gICAgICAgIHBhdGhfcGFydHMgPSBbXQotICAgICAgICAjIEZpZ3VyZSBvdXQgd2hhdCBkaXJlY3RvcmllcyBhcmUgbWlzc2luZy4KLSAgICAgICAgd2hpbGUgcGFyZW50IGFuZCBub3QgX3BhdGhfaXNkaXIocGFyZW50KToKLSAgICAgICAgICAgIHBhcmVudCwgcGFydCA9IF9wYXRoX3NwbGl0KHBhcmVudCkKLSAgICAgICAgICAgIHBhdGhfcGFydHMuYXBwZW5kKHBhcnQpCi0gICAgICAgICMgQ3JlYXRlIG5lZWRlZCBkaXJlY3Rvcmllcy4KLSAgICAgICAgZm9yIHBhcnQgaW4gcmV2ZXJzZWQocGF0aF9wYXJ0cyk6Ci0gICAgICAgICAgICBwYXJlbnQgPSBfcGF0aF9qb2luKHBhcmVudCwgcGFydCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBfb3MubWtkaXIocGFyZW50KQotICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKLSAgICAgICAgICAgICAgICAjIFByb2JhYmx5IGFub3RoZXIgUHl0aG9uIHByb2Nlc3MgYWxyZWFkeSBjcmVhdGVkIHRoZSBkaXIuCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAjIENvdWxkIGJlIGEgcGVybWlzc2lvbiBlcnJvciwgcmVhZC1vbmx5IGZpbGVzeXN0ZW06IGp1c3QgZm9yZ2V0Ci0gICAgICAgICAgICAgICAgIyBhYm91dCB3cml0aW5nIHRoZSBkYXRhLgotICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvdWxkIG5vdCBjcmVhdGUgeyFyfTogeyFyfScsIHBhcmVudCwgZXhjKQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfd3JpdGVfYXRvbWljKHBhdGgsIGRhdGEsIF9tb2RlKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY3JlYXRlZCB7IXJ9JywgcGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgIyBTYW1lIGFzIGFib3ZlOiBqdXN0IGRvbid0IHdyaXRlIHRoZSBieXRlY29kZS4KLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvdWxkIG5vdCBjcmVhdGUgeyFyfTogeyFyfScsIHBhdGgsIGV4YykKLQotCi1jbGFzcyBTb3VyY2VsZXNzRmlsZUxvYWRlcihGaWxlTG9hZGVyLCBfTG9hZGVyQmFzaWNzKToKLQotICAgICIiIkxvYWRlciB3aGljaCBoYW5kbGVzIHNvdXJjZWxlc3MgZmlsZSBpbXBvcnRzLiIiIgotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShwYXRoKQotICAgICAgICBieXRlc19kYXRhID0gX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLCBuYW1lPWZ1bGxuYW1lLCBwYXRoPXBhdGgpCi0gICAgICAgIHJldHVybiBfY29tcGlsZV9ieXRlY29kZShieXRlc19kYXRhLCBuYW1lPWZ1bGxuYW1lLCBieXRlY29kZV9wYXRoPXBhdGgpCi0KLSAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiBOb25lIGFzIHRoZXJlIGlzIG5vIHNvdXJjZSBjb2RlLiIiIgotICAgICAgICByZXR1cm4gTm9uZQotCi0KLSMgRmlsbGVkIGluIGJ5IF9zZXR1cCgpLgotRVhURU5TSU9OX1NVRkZJWEVTID0gW10KLQotCi1jbGFzcyBFeHRlbnNpb25GaWxlTG9hZGVyOgotCi0gICAgIiIiTG9hZGVyIGZvciBleHRlbnNpb24gbW9kdWxlcy4KLQotICAgIFRoZSBjb25zdHJ1Y3RvciBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggRmlsZUZpbmRlci4KLQotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhdGgpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fID09IG90aGVyLl9fY2xhc3NfXyBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fZGljdF9fKQotCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gaGFzaChzZWxmLm5hbWUpIF4gaGFzaChzZWxmLnBhdGgpCi0KLSAgICBAX2NoZWNrX25hbWUKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJMb2FkIGFuIGV4dGVuc2lvbiBtb2R1bGUuIiIiCi0gICAgICAgICMgT25jZSBhbiBleGVjX21vZHVsZSgpIGltcGxlbWVudGF0aW9uIGlzIGFkZGVkIHdlIGNhbiBhbHNvCi0gICAgICAgICMgYWRkIGEgZGVwcmVjYXRpb24gd2FybmluZyBoZXJlLgotICAgICAgICB3aXRoIF9NYW5hZ2VSZWxvYWQoZnVsbG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmxvYWRfZHluYW1pYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUsIHNlbGYucGF0aCkKLSAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQotICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQotICAgICAgICBpZiBpc19wYWNrYWdlIGFuZCBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgotICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KHNlbGYucGF0aClbMF1dCi0gICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgaWYgbm90IGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIHJldHVybiBtb2R1bGUKLQotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaXMgYSBwYWNrYWdlLiIiIgotICAgICAgICBmaWxlX25hbWUgPSBfcGF0aF9zcGxpdChzZWxmLnBhdGgpWzFdCi0gICAgICAgIHJldHVybiBhbnkoZmlsZV9uYW1lID09ICdfX2luaXRfXycgKyBzdWZmaXgKLSAgICAgICAgICAgICAgICAgICBmb3Igc3VmZml4IGluIEVYVEVOU0lPTl9TVUZGSVhFUykKLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiBOb25lIGFzIGFuIGV4dGVuc2lvbiBtb2R1bGUgY2Fubm90IGNyZWF0ZSBhIGNvZGUgb2JqZWN0LiIiIgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gTm9uZSBhcyBleHRlbnNpb24gbW9kdWxlcyBoYXZlIG5vIHNvdXJjZSBjb2RlLiIiIgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQF9jaGVja19uYW1lCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUgYXMgZm91bmQgYnkgdGhlIGZpbmRlci4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYucGF0aAotCi0KLWNsYXNzIF9OYW1lc3BhY2VQYXRoOgotICAgICIiIlJlcHJlc2VudHMgYSBuYW1lc3BhY2UgcGFja2FnZSdzIHBhdGguICBJdCB1c2VzIHRoZSBtb2R1bGUgbmFtZQotICAgIHRvIGZpbmQgaXRzIHBhcmVudCBtb2R1bGUsIGFuZCBmcm9tIHRoZXJlIGl0IGxvb2tzIHVwIHRoZSBwYXJlbnQncwotICAgIF9fcGF0aF9fLiAgV2hlbiB0aGlzIGNoYW5nZXMsIHRoZSBtb2R1bGUncyBvd24gcGF0aCBpcyByZWNvbXB1dGVkLAotICAgIHVzaW5nIHBhdGhfZmluZGVyLiAgRm9yIHRvcC1sZXZlbCBtb2R1bGVzLCB0aGUgcGFyZW50IG1vZHVsZSdzIHBhdGgKLSAgICBpcyBzeXMucGF0aC4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcik6Ci0gICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCi0gICAgICAgIHNlbGYuX2xhc3RfcGFyZW50X3BhdGggPSB0dXBsZShzZWxmLl9nZXRfcGFyZW50X3BhdGgoKSkKLSAgICAgICAgc2VsZi5fcGF0aF9maW5kZXIgPSBwYXRoX2ZpbmRlcgotCi0gICAgZGVmIF9maW5kX3BhcmVudF9wYXRoX25hbWVzKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGEgdHVwbGUgb2YgKHBhcmVudC1tb2R1bGUtbmFtZSwgcGFyZW50LXBhdGgtYXR0ci1uYW1lKSIiIgotICAgICAgICBwYXJlbnQsIGRvdCwgbWUgPSBzZWxmLl9uYW1lLnJwYXJ0aXRpb24oJy4nKQotICAgICAgICBpZiBkb3QgPT0gJyc6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYSB0b3AtbGV2ZWwgbW9kdWxlLiBzeXMucGF0aCBjb250YWlucyB0aGUgcGFyZW50IHBhdGguCi0gICAgICAgICAgICByZXR1cm4gJ3N5cycsICdwYXRoJwotICAgICAgICAjIE5vdCBhIHRvcC1sZXZlbCBtb2R1bGUuIHBhcmVudC1tb2R1bGUuX19wYXRoX18gY29udGFpbnMgdGhlCi0gICAgICAgICMgIHBhcmVudCBwYXRoLgotICAgICAgICByZXR1cm4gcGFyZW50LCAnX19wYXRoX18nCi0KLSAgICBkZWYgX2dldF9wYXJlbnRfcGF0aChzZWxmKToKLSAgICAgICAgcGFyZW50X21vZHVsZV9uYW1lLCBwYXRoX2F0dHJfbmFtZSA9IHNlbGYuX2ZpbmRfcGFyZW50X3BhdGhfbmFtZXMoKQotICAgICAgICByZXR1cm4gZ2V0YXR0cihzeXMubW9kdWxlc1twYXJlbnRfbW9kdWxlX25hbWVdLCBwYXRoX2F0dHJfbmFtZSkKLQotICAgIGRlZiBfcmVjYWxjdWxhdGUoc2VsZik6Ci0gICAgICAgICMgSWYgdGhlIHBhcmVudCdzIHBhdGggaGFzIGNoYW5nZWQsIHJlY2FsY3VsYXRlIF9wYXRoCi0gICAgICAgIHBhcmVudF9wYXRoID0gdHVwbGUoc2VsZi5fZ2V0X3BhcmVudF9wYXRoKCkpICMgTWFrZSBhIGNvcHkKLSAgICAgICAgaWYgcGFyZW50X3BhdGggIT0gc2VsZi5fbGFzdF9wYXJlbnRfcGF0aDoKLSAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKLSAgICAgICAgICAgICMgTm90ZSB0aGF0IG5vIGNoYW5nZXMgYXJlIG1hZGUgaWYgYSBsb2FkZXIgaXMgcmV0dXJuZWQsIGJ1dCB3ZQotICAgICAgICAgICAgIyAgZG8gcmVtZW1iZXIgdGhlIG5ldyBwYXJlbnQgcGF0aAotICAgICAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZSBhbmQgc3BlYy5sb2FkZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucwotICAgICAgICAgICAgc2VsZi5fbGFzdF9wYXJlbnRfcGF0aCA9IHBhcmVudF9wYXRoICAgICAjIFNhdmUgdGhlIGNvcHkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fcmVjYWxjdWxhdGUoKSkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3JlY2FsY3VsYXRlKCkpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnX05hbWVzcGFjZVBhdGgoeyFyfSknLmZvcm1hdChzZWxmLl9wYXRoKQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKLSAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5fcmVjYWxjdWxhdGUoKQotCi0gICAgZGVmIGFwcGVuZChzZWxmLCBpdGVtKToKLSAgICAgICAgc2VsZi5fcGF0aC5hcHBlbmQoaXRlbSkKLQotCi0jIFdlIHVzZSB0aGlzIGV4Y2x1c2l2ZWx5IGluIGluaXRfbW9kdWxlX2F0dHJzKCkgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuCi1jbGFzcyBfTmFtZXNwYWNlTG9hZGVyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcik6Ci0gICAgICAgIHNlbGYuX3BhdGggPSBfTmFtZXNwYWNlUGF0aChuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgICIiIlJldHVybiByZXByIGZvciB0aGUgbW9kdWxlLgotCi0gICAgICAgIFRoZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvZXMgdGhlIGpvYiBpdHNlbGYuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IChuYW1lc3BhY2UpPicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKLQotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmV0dXJuICcnCi0KLSAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gY29tcGlsZSgnJywgJzxzdHJpbmc+JywgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKLQotICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJMb2FkIGEgbmFtZXNwYWNlIG1vZHVsZS4KLQotICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGV4ZWNfbW9kdWxlKCkgaW5zdGVhZC4KLQotICAgICAgICAiIiIKLSAgICAgICAgIyBUaGUgaW1wb3J0IHN5c3RlbSBuZXZlciBjYWxscyB0aGlzIG1ldGhvZC4KLSAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnbmFtZXNwYWNlIG1vZHVsZSBsb2FkZWQgd2l0aCBwYXRoIHshcn0nLCBzZWxmLl9wYXRoKQotICAgICAgICByZXR1cm4gX2xvYWRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpCi0KLQotIyBGaW5kZXJzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBQYXRoRmluZGVyOgotCi0gICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3Igc3lzLnBhdGggYW5kIHBhY2thZ2UgX19wYXRoX18gYXR0cmlidXRlcy4iIiIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBpbnZhbGlkYXRlX2NhY2hlcyhjbHMpOgotICAgICAgICAiIiJDYWxsIHRoZSBpbnZhbGlkYXRlX2NhY2hlcygpIG1ldGhvZCBvbiBhbGwgcGF0aCBlbnRyeSBmaW5kZXJzCi0gICAgICAgIHN0b3JlZCBpbiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZXMgKHdoZXJlIGltcGxlbWVudGVkKS4iIiIKLSAgICAgICAgZm9yIGZpbmRlciBpbiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS52YWx1ZXMoKToKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnaW52YWxpZGF0ZV9jYWNoZXMnKToKLSAgICAgICAgICAgICAgICBmaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXMoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9wYXRoX2hvb2tzKGNscywgcGF0aCk6Ci0gICAgICAgICIiIlNlYXJjaCBzZXF1ZW5jZSBvZiBob29rcyBmb3IgYSBmaW5kZXIgZm9yICdwYXRoJy4KLQotICAgICAgICBJZiAnaG9va3MnIGlzIGZhbHNlIHRoZW4gdXNlIHN5cy5wYXRoX2hvb2tzLgotCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc3lzLnBhdGhfaG9va3M6Ci0gICAgICAgICAgICBfd2FybmluZ3Mud2Fybignc3lzLnBhdGhfaG9va3MgaXMgZW1wdHknLCBJbXBvcnRXYXJuaW5nKQotICAgICAgICBmb3IgaG9vayBpbiBzeXMucGF0aF9ob29rczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gaG9vayhwYXRoKQotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9wYXRoX2ltcG9ydGVyX2NhY2hlKGNscywgcGF0aCk6Ci0gICAgICAgICIiIkdldCB0aGUgZmluZGVyIGZvciB0aGUgcGF0aCBlbnRyeSBmcm9tIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLgotCi0gICAgICAgIElmIHRoZSBwYXRoIGVudHJ5IGlzIG5vdCBpbiB0aGUgY2FjaGUsIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGZpbmRlcgotICAgICAgICBhbmQgY2FjaGUgaXQuIElmIG5vIGZpbmRlciBpcyBhdmFpbGFibGUsIHN0b3JlIE5vbmUuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHBhdGggPT0gJyc6Ci0gICAgICAgICAgICBwYXRoID0gX29zLmdldGN3ZCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZpbmRlciA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGZpbmRlciA9IGNscy5fcGF0aF9ob29rcyhwYXRoKQotICAgICAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVbcGF0aF0gPSBmaW5kZXIKLSAgICAgICAgcmV0dXJuIGZpbmRlcgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9sZWdhY3lfZ2V0X3NwZWMoY2xzLCBmdWxsbmFtZSwgZmluZGVyKToKLSAgICAgICAgIyBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaWYKLSAgICAgICAgIyB3ZSBlbmRlZCB1cCBnb2luZyB0aGF0IHJvdXRlLgotICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6Ci0gICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQotICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgbG9hZGVyKQotICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKLSAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IHBvcnRpb25zCi0gICAgICAgIHJldHVybiBzcGVjCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2dldF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKLSAgICAgICAgIiIiRmluZCB0aGUgbG9hZGVyIG9yIG5hbWVzcGFjZV9wYXRoIGZvciB0aGlzIG1vZHVsZS9wYWNrYWdlIG5hbWUuIiIiCi0gICAgICAgICMgSWYgdGhpcyBlbmRzIHVwIGJlaW5nIGEgbmFtZXNwYWNlIHBhY2thZ2UsIG5hbWVzcGFjZV9wYXRoIGlzCi0gICAgICAgICMgIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2lsbCBiZWNvbWUgaXRzIF9fcGF0aF9fCi0gICAgICAgIG5hbWVzcGFjZV9wYXRoID0gW10KLSAgICAgICAgZm9yIGVudHJ5IGluIHBhdGg6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlbnRyeSwgKHN0ciwgYnl0ZXMpKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZmluZGVyID0gY2xzLl9wYXRoX2ltcG9ydGVyX2NhY2hlKGVudHJ5KQotICAgICAgICAgICAgaWYgZmluZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9zcGVjJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNwZWMgPSBmaW5kZXIuZmluZF9zcGVjKGZ1bGxuYW1lLCB0YXJnZXQpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc3BlYyA9IGNscy5fbGVnYWN5X2dldF9zcGVjKGZ1bGxuYW1lLCBmaW5kZXIpCi0gICAgICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BlYwotICAgICAgICAgICAgICAgIHBvcnRpb25zID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucwotICAgICAgICAgICAgICAgIGlmIHBvcnRpb25zIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzcGVjIG1pc3NpbmcgbG9hZGVyJykKLSAgICAgICAgICAgICAgICAjIFRoaXMgaXMgcG9zc2libHkgcGFydCBvZiBhIG5hbWVzcGFjZSBwYWNrYWdlLgotICAgICAgICAgICAgICAgICMgIFJlbWVtYmVyIHRoZXNlIHBhdGggZW50cmllcyAoaWYgYW55KSBmb3Igd2hlbiB3ZQotICAgICAgICAgICAgICAgICMgIGNyZWF0ZSBhIG5hbWVzcGFjZSBwYWNrYWdlLCBhbmQgY29udGludWUgaXRlcmF0aW5nCi0gICAgICAgICAgICAgICAgIyAgb24gcGF0aC4KLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VfcGF0aC5leHRlbmQocG9ydGlvbnMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKLSAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBuYW1lc3BhY2VfcGF0aAotICAgICAgICAgICAgcmV0dXJuIHNwZWMKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6Ci0gICAgICAgICIiImZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCi0gICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLiIiIgotICAgICAgICBpZiBwYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXRoID0gc3lzLnBhdGgKLSAgICAgICAgc3BlYyA9IGNscy5fZ2V0X3NwZWMoZnVsbG5hbWUsIHBhdGgsIHRhcmdldCkKLSAgICAgICAgaWYgc3BlYyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZWxpZiBzcGVjLmxvYWRlciBpcyBOb25lOgotICAgICAgICAgICAgbmFtZXNwYWNlX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCi0gICAgICAgICAgICBpZiBuYW1lc3BhY2VfcGF0aDoKLSAgICAgICAgICAgICAgICAjIFdlIGZvdW5kIGF0IGxlYXN0IG9uZSBuYW1lc3BhY2UgcGF0aC4gIFJldHVybiBhCi0gICAgICAgICAgICAgICAgIyAgc3BlYyB3aGljaCBjYW4gY3JlYXRlIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KLSAgICAgICAgICAgICAgICBzcGVjLm9yaWdpbiA9ICduYW1lc3BhY2UnCi0gICAgICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IF9OYW1lc3BhY2VQYXRoKGZ1bGxuYW1lLCBuYW1lc3BhY2VfcGF0aCwgY2xzLl9nZXRfc3BlYykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3BlYwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNwZWMKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJmaW5kIHRoZSBtb2R1bGUgb24gc3lzLnBhdGggb3IgJ3BhdGgnIGJhc2VkIG9uIHN5cy5wYXRoX2hvb2tzIGFuZAotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KLQotICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGZpbmRfc3BlYygpIGluc3RlYWQuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHNwZWMgPSBjbHMuZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoKQotICAgICAgICBpZiBzcGVjIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKLQotCi1jbGFzcyBGaWxlRmluZGVyOgotCi0gICAgIiIiRmlsZS1iYXNlZCBmaW5kZXIuCi0KLSAgICBJbnRlcmFjdGlvbnMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gYXJlIGNhY2hlZCBmb3IgcGVyZm9ybWFuY2UsIGJlaW5nCi0gICAgcmVmcmVzaGVkIHdoZW4gdGhlIGRpcmVjdG9yeSB0aGUgZmluZGVyIGlzIGhhbmRsaW5nIGhhcyBiZWVuIG1vZGlmaWVkLgotCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgKmxvYWRlcl9kZXRhaWxzKToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZSB3aXRoIHRoZSBwYXRoIHRvIHNlYXJjaCBvbiBhbmQgYSB2YXJpYWJsZSBudW1iZXIgb2YKLSAgICAgICAgMi10dXBsZXMgY29udGFpbmluZyB0aGUgbG9hZGVyIGFuZCB0aGUgZmlsZSBzdWZmaXhlcyB0aGUgbG9hZGVyCi0gICAgICAgIHJlY29nbml6ZXMuIiIiCi0gICAgICAgIGxvYWRlcnMgPSBbXQotICAgICAgICBmb3IgbG9hZGVyLCBzdWZmaXhlcyBpbiBsb2FkZXJfZGV0YWlsczoKLSAgICAgICAgICAgIGxvYWRlcnMuZXh0ZW5kKChzdWZmaXgsIGxvYWRlcikgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlcykKLSAgICAgICAgc2VsZi5fbG9hZGVycyA9IGxvYWRlcnMKLSAgICAgICAgIyBCYXNlIChkaXJlY3RvcnkpIHBhdGgKLSAgICAgICAgc2VsZi5wYXRoID0gcGF0aCBvciAnLicKLSAgICAgICAgc2VsZi5fcGF0aF9tdGltZSA9IC0xCi0gICAgICAgIHNlbGYuX3BhdGhfY2FjaGUgPSBzZXQoKQotICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSBzZXQoKQotCi0gICAgZGVmIGludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgotICAgICAgICAiIiJJbnZhbGlkYXRlIHRoZSBkaXJlY3RvcnkgbXRpbWUuIiIiCi0gICAgICAgIHNlbGYuX3BhdGhfbXRpbWUgPSAtMQotCi0gICAgZmluZF9tb2R1bGUgPSBfZmluZF9tb2R1bGVfc2hpbQotCi0gICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCBvciB0aGUgbmFtZXNwYWNlCi0gICAgICAgIHBhY2thZ2UgcG9ydGlvbnMuIFJldHVybnMgKGxvYWRlciwgbGlzdC1vZi1wb3J0aW9ucykuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgotCi0gICAgICAgICIiIgotICAgICAgICBzcGVjID0gc2VsZi5maW5kX3NwZWMoZnVsbG5hbWUpCi0gICAgICAgIGlmIHNwZWMgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lLCBbXQotICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIsIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgb3IgW10KLQotICAgIGRlZiBfZ2V0X3NwZWMoc2VsZiwgbG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgcGF0aCwgc21zbCwgdGFyZ2V0KToKLSAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NsYXNzKGZ1bGxuYW1lLCBwYXRoKQotICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oZnVsbG5hbWUsIHBhdGgsIGxvYWRlcj1sb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1zbXNsKQotCi0gICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgdGFyZ2V0PU5vbmUpOgotICAgICAgICAiIiJUcnkgdG8gZmluZCBhIGxvYWRlciBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUsIG9yIHRoZSBuYW1lc3BhY2UKLSAgICAgICAgcGFja2FnZSBwb3J0aW9ucy4gUmV0dXJucyAobG9hZGVyLCBsaXN0LW9mLXBvcnRpb25zKS4iIiIKLSAgICAgICAgaXNfbmFtZXNwYWNlID0gRmFsc2UKLSAgICAgICAgdGFpbF9tb2R1bGUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMl0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbXRpbWUgPSBfcGF0aF9zdGF0KHNlbGYucGF0aCBvciBfb3MuZ2V0Y3dkKCkpLnN0X210aW1lCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgbXRpbWUgPSAtMQotICAgICAgICBpZiBtdGltZSAhPSBzZWxmLl9wYXRoX210aW1lOgotICAgICAgICAgICAgc2VsZi5fZmlsbF9jYWNoZSgpCi0gICAgICAgICAgICBzZWxmLl9wYXRoX210aW1lID0gbXRpbWUKLSAgICAgICAgIyB0YWlsX21vZHVsZSBrZWVwcyB0aGUgb3JpZ2luYWwgY2FzaW5nLCBmb3IgX19maWxlX18gYW5kIGZyaWVuZHMKLSAgICAgICAgaWYgX3JlbGF4X2Nhc2UoKToKLSAgICAgICAgICAgIGNhY2hlID0gc2VsZi5fcmVsYXhlZF9wYXRoX2NhY2hlCi0gICAgICAgICAgICBjYWNoZV9tb2R1bGUgPSB0YWlsX21vZHVsZS5sb3dlcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjYWNoZSA9IHNlbGYuX3BhdGhfY2FjaGUKLSAgICAgICAgICAgIGNhY2hlX21vZHVsZSA9IHRhaWxfbW9kdWxlCi0gICAgICAgICMgQ2hlY2sgaWYgdGhlIG1vZHVsZSBpcyB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSAoYW5kIHRodXMgYSBwYWNrYWdlKS4KLSAgICAgICAgaWYgY2FjaGVfbW9kdWxlIGluIGNhY2hlOgotICAgICAgICAgICAgYmFzZV9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlKQotICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyX2NsYXNzIGluIHNlbGYuX2xvYWRlcnM6Ci0gICAgICAgICAgICAgICAgaW5pdF9maWxlbmFtZSA9ICdfX2luaXRfXycgKyBzdWZmaXgKLSAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKGJhc2VfcGF0aCwgaW5pdF9maWxlbmFtZSkKLSAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgW2Jhc2VfcGF0aF0sIHRhcmdldCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBJZiBhIG5hbWVzcGFjZSBwYWNrYWdlLCByZXR1cm4gdGhlIHBhdGggaWYgd2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAjICBmaW5kIGEgbW9kdWxlIGluIHRoZSBuZXh0IHNlY3Rpb24uCi0gICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gX3BhdGhfaXNkaXIoYmFzZV9wYXRoKQotICAgICAgICAjIENoZWNrIGZvciBhIGZpbGUgdy8gYSBwcm9wZXIgc3VmZml4IGV4aXN0cy4KLSAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyX2NsYXNzIGluIHNlbGYuX2xvYWRlcnM6Ci0gICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKHNlbGYucGF0aCwgdGFpbF9tb2R1bGUgKyBzdWZmaXgpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd0cnlpbmcge30nLmZvcm1hdChmdWxsX3BhdGgpLCB2ZXJib3NpdHk9MikKLSAgICAgICAgICAgIGlmIGNhY2hlX21vZHVsZSArIHN1ZmZpeCBpbiBjYWNoZToKLSAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgTm9uZSwgdGFyZ2V0KQotICAgICAgICBpZiBpc19uYW1lc3BhY2U6Ci0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdwb3NzaWJsZSBuYW1lc3BhY2UgZm9yIHt9Jy5mb3JtYXQoYmFzZV9wYXRoKSkKLSAgICAgICAgICAgIHNwZWMgPSBNb2R1bGVTcGVjKGZ1bGxuYW1lLCBOb25lKQotICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtiYXNlX3BhdGhdCi0gICAgICAgICAgICByZXR1cm4gc3BlYwotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9maWxsX2NhY2hlKHNlbGYpOgotICAgICAgICAiIiJGaWxsIHRoZSBjYWNoZSBvZiBwb3RlbnRpYWwgbW9kdWxlcyBhbmQgcGFja2FnZXMgZm9yIHRoaXMgZGlyZWN0b3J5LiIiIgotICAgICAgICBwYXRoID0gc2VsZi5wYXRoCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbnRlbnRzID0gX29zLmxpc3RkaXIocGF0aCBvciBfb3MuZ2V0Y3dkKCkpCi0gICAgICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIFBlcm1pc3Npb25FcnJvciwgTm90QURpcmVjdG9yeUVycm9yKToKLSAgICAgICAgICAgICMgRGlyZWN0b3J5IGhhcyBlaXRoZXIgYmVlbiByZW1vdmVkLCB0dXJuZWQgaW50byBhIGZpbGUsIG9yIG1hZGUKLSAgICAgICAgICAgICMgdW5yZWFkYWJsZS4KLSAgICAgICAgICAgIGNvbnRlbnRzID0gW10KLSAgICAgICAgIyBXZSBzdG9yZSB0d28gY2FjaGVkIHZlcnNpb25zLCB0byBoYW5kbGUgcnVudGltZSBjaGFuZ2VzIG9mIHRoZQotICAgICAgICAjIFBZVEhPTkNBU0VPSyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICAgICAgICAgIHNlbGYuX3BhdGhfY2FjaGUgPSBzZXQoY29udGVudHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFdpbmRvd3MgdXNlcnMgY2FuIGltcG9ydCBtb2R1bGVzIHdpdGggY2FzZS1pbnNlbnNpdGl2ZSBmaWxlCi0gICAgICAgICAgICAjIHN1ZmZpeGVzIChmb3IgbGVnYWN5IHJlYXNvbnMpLiBNYWtlIHRoZSBzdWZmaXggbG93ZXJjYXNlIGhlcmUKLSAgICAgICAgICAgICMgc28gaXQncyBkb25lIG9uY2UgaW5zdGVhZCBvZiBmb3IgZXZlcnkgaW1wb3J0LiBUaGlzIGlzIHNhZmUgYXMKLSAgICAgICAgICAgICMgdGhlIHNwZWNpZmllZCBzdWZmaXhlcyB0byBjaGVjayBhZ2FpbnN0IGFyZSBhbHdheXMgc3BlY2lmaWVkIGluIGEKLSAgICAgICAgICAgICMgY2FzZS1zZW5zaXRpdmUgbWFubmVyLgotICAgICAgICAgICAgbG93ZXJfc3VmZml4X2NvbnRlbnRzID0gc2V0KCkKLSAgICAgICAgICAgIGZvciBpdGVtIGluIGNvbnRlbnRzOgotICAgICAgICAgICAgICAgIG5hbWUsIGRvdCwgc3VmZml4ID0gaXRlbS5wYXJ0aXRpb24oJy4nKQotICAgICAgICAgICAgICAgIGlmIGRvdDoKLSAgICAgICAgICAgICAgICAgICAgbmV3X25hbWUgPSAne30ue30nLmZvcm1hdChuYW1lLCBzdWZmaXgubG93ZXIoKSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBuZXdfbmFtZSA9IG5hbWUKLSAgICAgICAgICAgICAgICBsb3dlcl9zdWZmaXhfY29udGVudHMuYWRkKG5ld19uYW1lKQotICAgICAgICAgICAgc2VsZi5fcGF0aF9jYWNoZSA9IGxvd2VyX3N1ZmZpeF9jb250ZW50cwotICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVMpOgotICAgICAgICAgICAgc2VsZi5fcmVsYXhlZF9wYXRoX2NhY2hlID0ge2ZuLmxvd2VyKCkgZm9yIGZuIGluIGNvbnRlbnRzfQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHBhdGhfaG9vayhjbHMsICpsb2FkZXJfZGV0YWlscyk6Ci0gICAgICAgICIiIkEgY2xhc3MgbWV0aG9kIHdoaWNoIHJldHVybnMgYSBjbG9zdXJlIHRvIHVzZSBvbiBzeXMucGF0aF9ob29rCi0gICAgICAgIHdoaWNoIHdpbGwgcmV0dXJuIGFuIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgbG9hZGVycyBhbmQgdGhlIHBhdGgKLSAgICAgICAgY2FsbGVkIG9uIHRoZSBjbG9zdXJlLgotCi0gICAgICAgIElmIHRoZSBwYXRoIGNhbGxlZCBvbiB0aGUgY2xvc3VyZSBpcyBub3QgYSBkaXJlY3RvcnksIEltcG9ydEVycm9yIGlzCi0gICAgICAgIHJhaXNlZC4KLQotICAgICAgICAiIiIKLSAgICAgICAgZGVmIHBhdGhfaG9va19mb3JfRmlsZUZpbmRlcihwYXRoKToKLSAgICAgICAgICAgICIiIlBhdGggaG9vayBmb3IgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLiIiIgotICAgICAgICAgICAgaWYgbm90IF9wYXRoX2lzZGlyKHBhdGgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdvbmx5IGRpcmVjdG9yaWVzIGFyZSBzdXBwb3J0ZWQnLCBwYXRoPXBhdGgpCi0gICAgICAgICAgICByZXR1cm4gY2xzKHBhdGgsICpsb2FkZXJfZGV0YWlscykKLQotICAgICAgICByZXR1cm4gcGF0aF9ob29rX2Zvcl9GaWxlRmluZGVyCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnRmlsZUZpbmRlcih7IXJ9KScuZm9ybWF0KHNlbGYucGF0aCkKLQotCiAjIEltcG9ydCBpdHNlbGYgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGNsYXNzIF9JbXBvcnRMb2NrQ29udGV4dDoKQEAgLTIxNDYsNyArODc4LDcgQEAKIAogZGVmIF9maW5kX3NwZWMobmFtZSwgcGF0aCwgdGFyZ2V0PU5vbmUpOgogICAgICIiIkZpbmQgYSBtb2R1bGUncyBsb2FkZXIuIiIiCi0gICAgaWYgbm90IHN5cy5tZXRhX3BhdGg6CisgICAgaWYgc3lzLm1ldGFfcGF0aCBpcyBub3QgTm9uZSBhbmQgbm90IHN5cy5tZXRhX3BhdGg6CiAgICAgICAgIF93YXJuaW5ncy53YXJuKCdzeXMubWV0YV9wYXRoIGlzIGVtcHR5JywgSW1wb3J0V2FybmluZykKICAgICAjIFdlIGNoZWNrIHN5cy5tb2R1bGVzIGhlcmUgZm9yIHRoZSByZWxvYWQgY2FzZS4gIFdoaWxlIGEgcGFzc2VkLWluCiAgICAgIyB0YXJnZXQgd2lsbCB1c3VhbGx5IGluZGljYXRlIGEgcmVsb2FkIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSwgd2hlcmVhcwpAQCAtMjE5MCw3ICs5MjIsNyBAQAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21vZHVsZSBuYW1lIG11c3QgYmUgc3RyLCBub3Qge30nLmZvcm1hdCh0eXBlKG5hbWUpKSkKICAgICBpZiBsZXZlbCA8IDA6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2xldmVsIG11c3QgYmUgPj0gMCcpCi0gICAgaWYgcGFja2FnZToKKyAgICBpZiBsZXZlbCA+IDA6CiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhY2thZ2UsIHN0cik6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ19fcGFja2FnZV9fIG5vdCBzZXQgdG8gYSBzdHJpbmcnKQogICAgICAgICBlbGlmIHBhY2thZ2Ugbm90IGluIHN5cy5tb2R1bGVzOgpAQCAtMjIxOCwxMiArOTUwLDEyIEBACiAgICAgICAgICAgICBwYXRoID0gcGFyZW50X21vZHVsZS5fX3BhdGhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBtc2cgPSAoX0VSUl9NU0cgKyAnOyB7IXJ9IGlzIG5vdCBhIHBhY2thZ2UnKS5mb3JtYXQobmFtZSwgcGFyZW50KQotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLCBuYW1lPW5hbWUpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkgZnJvbSBOb25lCiAgICAgc3BlYyA9IF9maW5kX3NwZWMobmFtZSwgcGF0aCkKICAgICBpZiBzcGVjIGlzIE5vbmU6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQogICAgIGVsc2U6Ci0gICAgICAgIG1vZHVsZSA9IF9TcGVjTWV0aG9kcyhzcGVjKS5fbG9hZF91bmxvY2tlZCgpCisgICAgICAgIG1vZHVsZSA9IF9sb2FkX3VubG9ja2VkKHNwZWMpCiAgICAgaWYgcGFyZW50OgogICAgICAgICAjIFNldCB0aGUgbW9kdWxlIGFzIGFuIGF0dHJpYnV0ZSBvbiBpdHMgcGFyZW50LgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQpAQCAtMjMwOCwyMSArMTA0MCwxMCBAQAogICAgIHJldHVybiBwYWNrYWdlCiAKIAotZGVmIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpOgotICAgICIiIlJldHVybnMgYSBsaXN0IG9mIGZpbGUtYmFzZWQgbW9kdWxlIGxvYWRlcnMuCi0KLSAgICBFYWNoIGl0ZW0gaXMgYSB0dXBsZSAobG9hZGVyLCBzdWZmaXhlcykuCi0gICAgIiIiCi0gICAgZXh0ZW5zaW9ucyA9IEV4dGVuc2lvbkZpbGVMb2FkZXIsIF9pbXAuZXh0ZW5zaW9uX3N1ZmZpeGVzKCkKLSAgICBzb3VyY2UgPSBTb3VyY2VGaWxlTG9hZGVyLCBTT1VSQ0VfU1VGRklYRVMKLSAgICBieXRlY29kZSA9IFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBCWVRFQ09ERV9TVUZGSVhFUwotICAgIHJldHVybiBbZXh0ZW5zaW9ucywgc291cmNlLCBieXRlY29kZV0KLQotCiBkZWYgX19pbXBvcnRfXyhuYW1lLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lLCBmcm9tbGlzdD0oKSwgbGV2ZWw9MCk6CiAgICAgIiIiSW1wb3J0IGEgbW9kdWxlLgogCi0gICAgVGhlICdnbG9iYWxzJyBhcmd1bWVudCBpcyB1c2VkIHRvIGluZmVyIHdoZXJlIHRoZSBpbXBvcnQgaXMgb2NjdXJpbmcgZnJvbQorICAgIFRoZSAnZ2xvYmFscycgYXJndW1lbnQgaXMgdXNlZCB0byBpbmZlciB3aGVyZSB0aGUgaW1wb3J0IGlzIG9jY3VycmluZyBmcm9tCiAgICAgdG8gaGFuZGxlIHJlbGF0aXZlIGltcG9ydHMuIFRoZSAnbG9jYWxzJyBhcmd1bWVudCBpcyBpZ25vcmVkLiBUaGUKICAgICAnZnJvbWxpc3QnIGFyZ3VtZW50IHNwZWNpZmllcyB3aGF0IHNob3VsZCBleGlzdCBhcyBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUKICAgICBiZWluZyBpbXBvcnRlZCAoZS5nLiBgYGZyb20gbW9kdWxlIGltcG9ydCA8ZnJvbWxpc3Q+YGApLiAgVGhlICdsZXZlbCcKQEAgLTIzNTgsOCArMTA3OSw3IEBACiAgICAgc3BlYyA9IEJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMobmFtZSkKICAgICBpZiBzcGVjIGlzIE5vbmU6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdubyBidWlsdC1pbiBtb2R1bGUgbmFtZWQgJyArIG5hbWUpCi0gICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQotICAgIHJldHVybiBtZXRob2RzLl9sb2FkX3VubG9ja2VkKCkKKyAgICByZXR1cm4gX2xvYWRfdW5sb2NrZWQoc3BlYykKIAogCiBkZWYgX3NldHVwKHN5c19tb2R1bGUsIF9pbXBfbW9kdWxlKToKQEAgLTIzNzAsMTUgKzEwOTAsMTAgQEAKICAgICBtb2R1bGVzLCB0aG9zZSB0d28gbW9kdWxlcyBtdXN0IGJlIGV4cGxpY2l0bHkgcGFzc2VkIGluLgogCiAgICAgIiIiCi0gICAgZ2xvYmFsIF9pbXAsIHN5cywgQllURUNPREVfU1VGRklYRVMKKyAgICBnbG9iYWwgX2ltcCwgc3lzCiAgICAgX2ltcCA9IF9pbXBfbW9kdWxlCiAgICAgc3lzID0gc3lzX21vZHVsZQogCi0gICAgaWYgc3lzLmZsYWdzLm9wdGltaXplOgotICAgICAgICBCWVRFQ09ERV9TVUZGSVhFUyA9IE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUwotICAgIGVsc2U6Ci0gICAgICAgIEJZVEVDT0RFX1NVRkZJWEVTID0gREVCVUdfQllURUNPREVfU1VGRklYRVMKLQogICAgICMgU2V0IHVwIHRoZSBzcGVjIGZvciBleGlzdGluZyBidWlsdGluL2Zyb3plbiBtb2R1bGVzLgogICAgIG1vZHVsZV90eXBlID0gdHlwZShzeXMpCiAgICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgpAQCAtMjM5MCwzOSArMTEwNSwxNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgc3BlYyA9IF9zcGVjX2Zyb21fbW9kdWxlKG1vZHVsZSwgbG9hZGVyKQotICAgICAgICAgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQotICAgICAgICAgICAgbWV0aG9kcy5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisgICAgICAgICAgICBfaW5pdF9tb2R1bGVfYXR0cnMoc3BlYywgbW9kdWxlKQogCiAgICAgIyBEaXJlY3RseSBsb2FkIGJ1aWx0LWluIG1vZHVsZXMgbmVlZGVkIGR1cmluZyBib290c3RyYXAuCiAgICAgc2VsZl9tb2R1bGUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KLSAgICBmb3IgYnVpbHRpbl9uYW1lIGluICgnX2lvJywgJ193YXJuaW5ncycsICdidWlsdGlucycsICdtYXJzaGFsJyk6CisgICAgZm9yIGJ1aWx0aW5fbmFtZSBpbiAoJ193YXJuaW5ncycsKToKICAgICAgICAgaWYgYnVpbHRpbl9uYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKICAgICAgICAgICAgIGJ1aWx0aW5fbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKGJ1aWx0aW5fbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJ1aWx0aW5fbW9kdWxlID0gc3lzLm1vZHVsZXNbYnVpbHRpbl9uYW1lXQogICAgICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCBidWlsdGluX25hbWUsIGJ1aWx0aW5fbW9kdWxlKQogCi0gICAgIyBEaXJlY3RseSBsb2FkIHRoZSBvcyBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KLSAgICBvc19kZXRhaWxzID0gKCdwb3NpeCcsIFsnLyddKSwgKCdudCcsIFsnXFwnLCAnLyddKQotICAgIGZvciBidWlsdGluX29zLCBwYXRoX3NlcGFyYXRvcnMgaW4gb3NfZGV0YWlsczoKLSAgICAgICAgIyBBc3N1bXB0aW9uIG1hZGUgaW4gX3BhdGhfam9pbigpCi0gICAgICAgIGFzc2VydCBhbGwobGVuKHNlcCkgPT0gMSBmb3Igc2VwIGluIHBhdGhfc2VwYXJhdG9ycykKLSAgICAgICAgcGF0aF9zZXAgPSBwYXRoX3NlcGFyYXRvcnNbMF0KLSAgICAgICAgaWYgYnVpbHRpbl9vcyBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIG9zX21vZHVsZSA9IHN5cy5tb2R1bGVzW2J1aWx0aW5fb3NdCi0gICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZShidWlsdGluX29zKQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignaW1wb3J0bGliIHJlcXVpcmVzIHBvc2l4IG9yIG50JykKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX29zJywgb3NfbW9kdWxlKQotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdwYXRoX3NlcCcsIHBhdGhfc2VwKQotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdwYXRoX3NlcGFyYXRvcnMnLCAnJy5qb2luKHBhdGhfc2VwYXJhdG9ycykpCi0KICAgICAjIERpcmVjdGx5IGxvYWQgdGhlIF90aHJlYWQgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCiAgICAgdHJ5OgogICAgICAgICB0aHJlYWRfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCdfdGhyZWFkJykKQEAgLTI0MzUsMjcgKzExMjgsMTUgQEAKICAgICB3ZWFrcmVmX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZSgnX3dlYWtyZWYnKQogICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfd2Vha3JlZicsIHdlYWtyZWZfbW9kdWxlKQogCi0gICAgIyBEaXJlY3RseSBsb2FkIHRoZSB3aW5yZWcgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCi0gICAgaWYgYnVpbHRpbl9vcyA9PSAnbnQnOgotICAgICAgICB3aW5yZWdfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCd3aW5yZWcnKQotICAgICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dpbnJlZycsIHdpbnJlZ19tb2R1bGUpCi0KLSAgICAjIENvbnN0YW50cwotICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfcmVsYXhfY2FzZScsIF9tYWtlX3JlbGF4X2Nhc2UoKSkKLSAgICBFWFRFTlNJT05fU1VGRklYRVMuZXh0ZW5kKF9pbXAuZXh0ZW5zaW9uX3N1ZmZpeGVzKCkpCi0gICAgaWYgYnVpbHRpbl9vcyA9PSAnbnQnOgotICAgICAgICBTT1VSQ0VfU1VGRklYRVMuYXBwZW5kKCcucHl3JykKLSAgICAgICAgaWYgJ19kLnB5ZCcgaW4gRVhURU5TSU9OX1NVRkZJWEVTOgotICAgICAgICAgICAgV2luZG93c1JlZ2lzdHJ5RmluZGVyLkRFQlVHX0JVSUxEID0gVHJ1ZQotCiAKIGRlZiBfaW5zdGFsbChzeXNfbW9kdWxlLCBfaW1wX21vZHVsZSk6CiAgICAgIiIiSW5zdGFsbCBpbXBvcnRsaWIgYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGltcG9ydC4iIiIKICAgICBfc2V0dXAoc3lzX21vZHVsZSwgX2ltcF9tb2R1bGUpCi0gICAgc3VwcG9ydGVkX2xvYWRlcnMgPSBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKQotICAgIHN5cy5wYXRoX2hvb2tzLmV4dGVuZChbRmlsZUZpbmRlci5wYXRoX2hvb2soKnN1cHBvcnRlZF9sb2FkZXJzKV0pCisKICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChCdWlsdGluSW1wb3J0ZXIpCiAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoRnJvemVuSW1wb3J0ZXIpCi0gICAgaWYgX29zLl9fbmFtZV9fID09ICdudCc6Ci0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKFdpbmRvd3NSZWdpc3RyeUZpbmRlcikKLSAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChQYXRoRmluZGVyKQorCisgICAgZ2xvYmFsIF9ib290c3RyYXBfZXh0ZXJuYWwKKyAgICBpbXBvcnQgX2Zyb3plbl9pbXBvcnRsaWJfZXh0ZXJuYWwKKyAgICBfYm9vdHN0cmFwX2V4dGVybmFsID0gX2Zyb3plbl9pbXBvcnRsaWJfZXh0ZXJuYWwKKyAgICBfZnJvemVuX2ltcG9ydGxpYl9leHRlcm5hbC5faW5zdGFsbChzeXMubW9kdWxlc1tfX25hbWVfX10pCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXBfZXh0ZXJuYWwucHkgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXBfZXh0ZXJuYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0ZDY5MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcF9leHRlcm5hbC5weQpAQCAtMCwwICsxLDE0MzcgQEAKKyIiIkNvcmUgaW1wbGVtZW50YXRpb24gb2YgcGF0aC1iYXNlZCBpbXBvcnQuCisKK1RoaXMgbW9kdWxlIGlzIE5PVCBtZWFudCB0byBiZSBkaXJlY3RseSBpbXBvcnRlZCEgSXQgaGFzIGJlZW4gZGVzaWduZWQgc3VjaAordGhhdCBpdCBjYW4gYmUgYm9vdHN0cmFwcGVkIGludG8gUHl0aG9uIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBpbXBvcnQuIEFzCitzdWNoIGl0IHJlcXVpcmVzIHRoZSBpbmplY3Rpb24gb2Ygc3BlY2lmaWMgbW9kdWxlcyBhbmQgYXR0cmlidXRlcyBpbiBvcmRlciB0bword29yay4gT25lIHNob3VsZCB1c2UgaW1wb3J0bGliIGFzIHRoZSBwdWJsaWMtZmFjaW5nIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUuCisKKyIiIgorIworIyBJTVBPUlRBTlQ6IFdoZW5ldmVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoaXMgbW9kdWxlLCBiZSBzdXJlIHRvIHJ1bgorIyBhIHRvcC1sZXZlbCBtYWtlIGluIG9yZGVyIHRvIGdldCB0aGUgZnJvemVuIHZlcnNpb24gb2YgdGhlIG1vZHVsZQorIyB1cGRhdGVkLiBOb3QgZG9pbmcgc28gd2lsbCByZXN1bHQgaW4gdGhlIE1ha2VmaWxlIHRvIGZhaWwgZm9yCisjIGFsbCBvdGhlcnMgd2hvIGRvbid0IGhhdmUgYSAuL3B5dGhvbiBhcm91bmQgdG8gZnJlZXplIHRoZSBtb2R1bGUKKyMgaW4gdGhlIGVhcmx5IHN0YWdlcyBvZiBjb21waWxhdGlvbi4KKyMKKworIyBTZWUgaW1wb3J0bGliLl9zZXR1cCgpIGZvciB3aGF0IGlzIGluamVjdGVkIGludG8gdGhlIGdsb2JhbCBuYW1lc3BhY2UuCisKKyMgV2hlbiBlZGl0aW5nIHRoaXMgY29kZSBiZSBhd2FyZSB0aGF0IGNvZGUgZXhlY3V0ZWQgYXQgaW1wb3J0IHRpbWUgQ0FOTk9UCisjIHJlZmVyZW5jZSBhbnkgaW5qZWN0ZWQgb2JqZWN0cyEgVGhpcyBpbmNsdWRlcyBub3Qgb25seSBnbG9iYWwgY29kZSBidXQgYWxzbworIyBhbnl0aGluZyBzcGVjaWZpZWQgYXQgdGhlIGNsYXNzIGxldmVsLgorCisjIEJvb3RzdHJhcC1yZWxhdGVkIGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVNfU1RSX0tFWSA9ICd3aW4nLAorX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TX0JZVEVTX0tFWSA9ICdjeWd3aW4nLCAnZGFyd2luJworX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TID0gIChfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVNfQllURVNfS0VZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TX1NUUl9LRVkpCisKKworZGVmIF9tYWtlX3JlbGF4X2Nhc2UoKToKKyAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVMpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVNfU1RSX0tFWSk6CisgICAgICAgICAgICBrZXkgPSAnUFlUSE9OQ0FTRU9LJworICAgICAgICBlbHNlOgorICAgICAgICAgICAga2V5ID0gYidQWVRIT05DQVNFT0snCisKKyAgICAgICAgZGVmIF9yZWxheF9jYXNlKCk6CisgICAgICAgICAgICAiIiJUcnVlIGlmIGZpbGVuYW1lcyBtdXN0IGJlIGNoZWNrZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LiIiIgorICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBfb3MuZW52aXJvbgorICAgIGVsc2U6CisgICAgICAgIGRlZiBfcmVsYXhfY2FzZSgpOgorICAgICAgICAgICAgIiIiVHJ1ZSBpZiBmaWxlbmFtZXMgbXVzdCBiZSBjaGVja2VkIGNhc2UtaW5zZW5zaXRpdmVseS4iIiIKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBfcmVsYXhfY2FzZQorCisKK2RlZiBfd19sb25nKHgpOgorICAgICIiIkNvbnZlcnQgYSAzMi1iaXQgaW50ZWdlciB0byBsaXR0bGUtZW5kaWFuLiIiIgorICAgIHJldHVybiAoaW50KHgpICYgMHhGRkZGRkZGRikudG9fYnl0ZXMoNCwgJ2xpdHRsZScpCisKKworZGVmIF9yX2xvbmcoaW50X2J5dGVzKToKKyAgICAiIiJDb252ZXJ0IDQgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiB0byBhbiBpbnRlZ2VyLiIiIgorICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhpbnRfYnl0ZXMsICdsaXR0bGUnKQorCisKK2RlZiBfcGF0aF9qb2luKCpwYXRoX3BhcnRzKToKKyAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5qb2luKCkuIiIiCisgICAgcmV0dXJuIHBhdGhfc2VwLmpvaW4oW3BhcnQucnN0cmlwKHBhdGhfc2VwYXJhdG9ycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0cyBpZiBwYXJ0XSkKKworCitkZWYgX3BhdGhfc3BsaXQocGF0aCk6CisgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguc3BsaXQoKS4iIiIKKyAgICBpZiBsZW4ocGF0aF9zZXBhcmF0b3JzKSA9PSAxOgorICAgICAgICBmcm9udCwgXywgdGFpbCA9IHBhdGgucnBhcnRpdGlvbihwYXRoX3NlcCkKKyAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCisgICAgZm9yIHggaW4gcmV2ZXJzZWQocGF0aCk6CisgICAgICAgIGlmIHggaW4gcGF0aF9zZXBhcmF0b3JzOgorICAgICAgICAgICAgZnJvbnQsIHRhaWwgPSBwYXRoLnJzcGxpdCh4LCBtYXhzcGxpdD0xKQorICAgICAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCisgICAgcmV0dXJuICcnLCBwYXRoCisKKworZGVmIF9wYXRoX3N0YXQocGF0aCk6CisgICAgIiIiU3RhdCB0aGUgcGF0aC4KKworICAgIE1hZGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBtYWtlIGl0IGVhc2llciB0byBvdmVycmlkZSBpbiBleHBlcmltZW50cworICAgIChlLmcuIGNhY2hlIHN0YXQgcmVzdWx0cykuCisKKyAgICAiIiIKKyAgICByZXR1cm4gX29zLnN0YXQocGF0aCkKKworCitkZWYgX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIG1vZGUpOgorICAgICIiIlRlc3Qgd2hldGhlciB0aGUgcGF0aCBpcyB0aGUgc3BlY2lmaWVkIG1vZGUgdHlwZS4iIiIKKyAgICB0cnk6CisgICAgICAgIHN0YXRfaW5mbyA9IF9wYXRoX3N0YXQocGF0aCkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIChzdGF0X2luZm8uc3RfbW9kZSAmIDBvMTcwMDAwKSA9PSBtb2RlCisKKworZGVmIF9wYXRoX2lzZmlsZShwYXRoKToKKyAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5pc2ZpbGUuIiIiCisgICAgcmV0dXJuIF9wYXRoX2lzX21vZGVfdHlwZShwYXRoLCAwbzEwMDAwMCkKKworCitkZWYgX3BhdGhfaXNkaXIocGF0aCk6CisgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguaXNkaXIuIiIiCisgICAgaWYgbm90IHBhdGg6CisgICAgICAgIHBhdGggPSBfb3MuZ2V0Y3dkKCkKKyAgICByZXR1cm4gX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIDBvMDQwMDAwKQorCisKK2RlZiBfd3JpdGVfYXRvbWljKHBhdGgsIGRhdGEsIG1vZGU9MG82NjYpOgorICAgICIiIkJlc3QtZWZmb3J0IGZ1bmN0aW9uIHRvIHdyaXRlIGRhdGEgdG8gYSBwYXRoIGF0b21pY2FsbHkuCisgICAgQmUgcHJlcGFyZWQgdG8gaGFuZGxlIGEgRmlsZUV4aXN0c0Vycm9yIGlmIGNvbmN1cnJlbnQgd3JpdGluZyBvZiB0aGUKKyAgICB0ZW1wb3JhcnkgZmlsZSBpcyBhdHRlbXB0ZWQuIiIiCisgICAgIyBpZCgpIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBwc2V1ZG8tcmFuZG9tIGZpbGVuYW1lLgorICAgIHBhdGhfdG1wID0gJ3t9Lnt9Jy5mb3JtYXQocGF0aCwgaWQocGF0aCkpCisgICAgZmQgPSBfb3Mub3BlbihwYXRoX3RtcCwKKyAgICAgICAgICAgICAgICAgIF9vcy5PX0VYQ0wgfCBfb3MuT19DUkVBVCB8IF9vcy5PX1dST05MWSwgbW9kZSAmIDBvNjY2KQorICAgIHRyeToKKyAgICAgICAgIyBXZSBmaXJzdCB3cml0ZSBkYXRhIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIGFuZCB0aGVuIHVzZSBvcy5yZXBsYWNlKCkgdG8KKyAgICAgICAgIyBwZXJmb3JtIGFuIGF0b21pYyByZW5hbWUuCisgICAgICAgIHdpdGggX2lvLkZpbGVJTyhmZCwgJ3diJykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoZGF0YSkKKyAgICAgICAgX29zLnJlcGxhY2UocGF0aF90bXAsIHBhdGgpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9vcy51bmxpbmsocGF0aF90bXApCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICByYWlzZQorCisKK19jb2RlX3R5cGUgPSB0eXBlKF93cml0ZV9hdG9taWMuX19jb2RlX18pCisKKworIyBGaW5kZXIvbG9hZGVyIHV0aWxpdHkgY29kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIE1hZ2ljIHdvcmQgdG8gcmVqZWN0IC5weWMgZmlsZXMgZ2VuZXJhdGVkIGJ5IG90aGVyIFB5dGhvbiB2ZXJzaW9ucy4KKyMgSXQgc2hvdWxkIGNoYW5nZSBmb3IgZWFjaCBpbmNvbXBhdGlibGUgY2hhbmdlIHRvIHRoZSBieXRlY29kZS4KKyMKKyMgVGhlIHZhbHVlIG9mIENSIGFuZCBMRiBpcyBpbmNvcnBvcmF0ZWQgc28gaWYgeW91IGV2ZXIgcmVhZCBvciB3cml0ZQorIyBhIC5weWMgZmlsZSBpbiB0ZXh0IG1vZGUgdGhlIG1hZ2ljIG51bWJlciB3aWxsIGJlIHdyb25nOyBhbHNvLCB0aGUKKyMgQXBwbGUgTVBXIGNvbXBpbGVyIHN3YXBzIHRoZWlyIHZhbHVlcywgYm90Y2hpbmcgc3RyaW5nIGNvbnN0YW50cy4KKyMKKyMgVGhlIG1hZ2ljIG51bWJlcnMgbXVzdCBiZSBzcGFjZWQgYXBhcnQgYXQgbGVhc3QgMiB2YWx1ZXMsIGFzIHRoZQorIyAtVSBpbnRlcnBldGVyIGZsYWcgd2lsbCBjYXVzZSBNQUdJQysxIGJlaW5nIHVzZWQuIFRoZXkgaGF2ZSBiZWVuCisjIG9kZCBudW1iZXJzIGZvciBzb21lIHRpbWUgbm93LgorIworIyBUaGVyZSB3ZXJlIGEgdmFyaWV0eSBvZiBvbGQgc2NoZW1lcyBmb3Igc2V0dGluZyB0aGUgbWFnaWMgbnVtYmVyLgorIyBUaGUgY3VycmVudCB3b3JraW5nIHNjaGVtZSBpcyB0byBpbmNyZW1lbnQgdGhlIHByZXZpb3VzIHZhbHVlIGJ5CisjIDEwLgorIworIyBTdGFydGluZyB3aXRoIHRoZSBhZG9wdGlvbiBvZiBQRVAgMzE0NyBpbiBQeXRob24gMy4yLCBldmVyeSBidW1wIGluIG1hZ2ljCisjIG51bWJlciBhbHNvIGluY2x1ZGVzIGEgbmV3ICJtYWdpYyB0YWciLCBpLmUuIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHVzZWQKKyMgdG8gcmVwcmVzZW50IHRoZSBtYWdpYyBudW1iZXIgaW4gX19weWNhY2hlX18gZGlyZWN0b3JpZXMuICBXaGVuIHlvdSBjaGFuZ2UKKyMgdGhlIG1hZ2ljIG51bWJlciwgeW91IG11c3QgYWxzbyBzZXQgYSBuZXcgdW5pcXVlIG1hZ2ljIHRhZy4gIEdlbmVyYWxseSB0aGlzCisjIGNhbiBiZSBuYW1lZCBhZnRlciB0aGUgUHl0aG9uIG1ham9yIHZlcnNpb24gb2YgdGhlIG1hZ2ljIG51bWJlciBidW1wLCBidXQKKyMgaXQgY2FuIHJlYWxseSBiZSBhbnl0aGluZywgYXMgbG9uZyBhcyBpdCdzIGRpZmZlcmVudCB0aGFuIGFueXRoaW5nIGVsc2UKKyMgdGhhdCdzIGNvbWUgYmVmb3JlLiAgVGhlIHRhZ3MgYXJlIGluY2x1ZGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGUsIHN0YXJ0aW5nCisjIHdpdGggUHl0aG9uIDMuMmEwLgorIworIyBLbm93biB2YWx1ZXM6CisjICBQeXRob24gMS41OiAgIDIwMTIxCisjICBQeXRob24gMS41LjE6IDIwMTIxCisjICAgICBQeXRob24gMS41LjI6IDIwMTIxCisjICAgICBQeXRob24gMS42OiAgIDUwNDI4CisjICAgICBQeXRob24gMi4wOiAgIDUwODIzCisjICAgICBQeXRob24gMi4wLjE6IDUwODIzCisjICAgICBQeXRob24gMi4xOiAgIDYwMjAyCisjICAgICBQeXRob24gMi4xLjE6IDYwMjAyCisjICAgICBQeXRob24gMi4xLjI6IDYwMjAyCisjICAgICBQeXRob24gMi4yOiAgIDYwNzE3CisjICAgICBQeXRob24gMi4zYTA6IDYyMDExCisjICAgICBQeXRob24gMi4zYTA6IDYyMDIxCisjICAgICBQeXRob24gMi4zYTA6IDYyMDExICghKQorIyAgICAgUHl0aG9uIDIuNGEwOiA2MjA0MQorIyAgICAgUHl0aG9uIDIuNGEzOiA2MjA1MQorIyAgICAgUHl0aG9uIDIuNGIxOiA2MjA2MQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA3MQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA4MSAoYXN0LWJyYW5jaCkKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwOTEgKHdpdGgpCisjICAgICBQeXRob24gMi41YTA6IDYyMDkyIChjaGFuZ2VkIFdJVEhfQ0xFQU5VUCBvcGNvZGUpCisjICAgICBQeXRob24gMi41YjM6IDYyMTAxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLikKKyMgICAgIFB5dGhvbiAyLjViMzogNjIxMTEgKGZpeCB3cm9uZyBjb2RlOiB4ICs9IHlpZWxkKQorIyAgICAgUHl0aG9uIDIuNWMxOiA2MjEyMSAoZml4IHdyb25nIGxub3RhYiB3aXRoIGZvciBsb29wcyBhbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JpbmcgY29uc3RhbnRzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkKQorIyAgICAgUHl0aG9uIDIuNWMyOiA2MjEzMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4gaW4gbGlzdGNvbXAvZ2VuZXhwKQorIyAgICAgUHl0aG9uIDIuNmEwOiA2MjE1MSAocGVlcGhvbGUgb3B0aW1pemF0aW9ucyBhbmQgU1RPUkVfTUFQIG9wY29kZSkKKyMgICAgIFB5dGhvbiAyLjZhMTogNjIxNjEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pCisjICAgICBQeXRob24gMi43YTA6IDYyMTcxIChvcHRpbWl6ZSBsaXN0IGNvbXByZWhlbnNpb25zL2NoYW5nZSBMSVNUX0FQUEVORCkKKyMgICAgIFB5dGhvbiAyLjdhMDogNjIxODEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorIyAgICAgUHl0aG9uIDIuN2EwICA2MjE5MSAoaW50cm9kdWNlIFNFVFVQX1dJVEgpCisjICAgICBQeXRob24gMi43YTAgIDYyMjAxIChpbnRyb2R1Y2UgQlVJTERfU0VUKQorIyAgICAgUHl0aG9uIDIuN2EwICA2MjIxMSAoaW50cm9kdWNlIE1BUF9BREQgYW5kIFNFVF9BREQpCisjICAgICBQeXRob24gMzAwMDogICAzMDAwCisjICAgICAgICAgICAgICAgICAgICAzMDEwIChyZW1vdmVkIFVOQVJZX0NPTlZFUlQpCisjICAgICAgICAgICAgICAgICAgICAzMDIwIChhZGRlZCBCVUlMRF9TRVQpCisjICAgICAgICAgICAgICAgICAgICAzMDMwIChhZGRlZCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycykKKyMgICAgICAgICAgICAgICAgICAgIDMwNDAgKGFkZGVkIHNpZ25hdHVyZSBhbm5vdGF0aW9ucykKKyMgICAgICAgICAgICAgICAgICAgIDMwNTAgKHByaW50IGJlY29tZXMgYSBmdW5jdGlvbikKKyMgICAgICAgICAgICAgICAgICAgIDMwNjAgKFBFUCAzMTE1IG1ldGFjbGFzcyBzeW50YXgpCisjICAgICAgICAgICAgICAgICAgICAzMDYxIChzdHJpbmcgbGl0ZXJhbHMgYmVjb21lIHVuaWNvZGUpCisjICAgICAgICAgICAgICAgICAgICAzMDcxIChQRVAgMzEwOSByYWlzZSBjaGFuZ2VzKQorIyAgICAgICAgICAgICAgICAgICAgMzA4MSAoUEVQIDMxMzcgbWFrZSBfX2ZpbGVfXyBhbmQgX19uYW1lX18gdW5pY29kZSkKKyMgICAgICAgICAgICAgICAgICAgIDMwOTEgKGtpbGwgc3RyOCBpbnRlcm5pbmcpCisjICAgICAgICAgICAgICAgICAgICAzMTAxIChtZXJnZSBmcm9tIDIuNmEwLCBzZWUgNjIxNTEpCisjICAgICAgICAgICAgICAgICAgICAzMTAzIChfX2ZpbGVfXyBwb2ludHMgdG8gc291cmNlIGZpbGUpCisjICAgICBQeXRob24gMy4wYTQ6IDMxMTEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pLgorIyAgICAgUHl0aG9uIDMuMGE1OiAzMTMxIChsZXhpY2FsIGV4Y2VwdGlvbiBzdGFja2luZywgaW5jbHVkaW5nIFBPUF9FWENFUFQpCisjICAgICBQeXRob24gMy4xYTA6IDMxNDEgKG9wdGltaXplIGxpc3QsIHNldCBhbmQgZGljdCBjb21wcmVoZW5zaW9uczoKKyMgICAgICAgICAgICAgY2hhbmdlIExJU1RfQVBQRU5EIGFuZCBTRVRfQURELCBhZGQgTUFQX0FERCkKKyMgICAgIFB5dGhvbiAzLjFhMDogMzE1MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6CisjICAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKKyMgICAgIFB5dGhvbiAzLjJhMDogMzE2MCAoYWRkIFNFVFVQX1dJVEgpCisjICAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgorIyAgICAgUHl0aG9uIDMuMmExOiAzMTcwIChhZGQgRFVQX1RPUF9UV08sIHJlbW92ZSBEVVBfVE9QWCBhbmQgUk9UX0ZPVVIpCisjICAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgorIyAgICAgUHl0aG9uIDMuMmEyICAzMTgwIChhZGQgREVMRVRFX0RFUkVGKQorIyAgICAgUHl0aG9uIDMuM2EwICAzMTkwIF9fY2xhc3NfXyBzdXBlciBjbG9zdXJlIGNoYW5nZWQKKyMgICAgIFB5dGhvbiAzLjNhMCAgMzIwMCAoX19xdWFsbmFtZV9fIGFkZGVkKQorIyAgICAgICAgICAgICAgICAgICAgICAzMjEwIChhZGRlZCBzaXplIG1vZHVsbyAyKiozMiB0byB0aGUgcHljIGhlYWRlcikKKyMgICAgIFB5dGhvbiAzLjNhMSAgMzIyMCAoY2hhbmdlZCBQRVAgMzgwIGltcGxlbWVudGF0aW9uKQorIyAgICAgUHl0aG9uIDMuM2E0ICAzMjMwIChyZXZlcnQgY2hhbmdlcyB0byBpbXBsaWNpdCBfX2NsYXNzX18gY2xvc3VyZSkKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI1MCAoZXZhbHVhdGUgcG9zaXRpb25hbCBkZWZhdWx0IGFyZ3VtZW50cyBiZWZvcmUKKyMgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLW9ubHkgZGVmYXVsdHMpCisjICAgICBQeXRob24gMy40YTEgIDMyNjAgKGFkZCBMT0FEX0NMQVNTREVSRUY7IGFsbG93IGxvY2FscyBvZiBjbGFzcyB0byBvdmVycmlkZQorIyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUgdmFycykKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI3MCAodmFyaW91cyB0d2Vha3MgdG8gdGhlIF9fY2xhc3NfXyBjbG9zdXJlKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjgwIChyZW1vdmUgaW1wbGljaXQgY2xhc3MgYXJndW1lbnQpCisjICAgICBQeXRob24gMy40YTQgIDMyOTAgKGNoYW5nZXMgdG8gX19xdWFsbmFtZV9fIGNvbXB1dGF0aW9uKQorIyAgICAgUHl0aG9uIDMuNGE0ICAzMzAwIChtb3JlIGNoYW5nZXMgdG8gX19xdWFsbmFtZV9fIGNvbXB1dGF0aW9uKQorIyAgICAgUHl0aG9uIDMuNHJjMiAzMzEwIChhbHRlciBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjICAgICBQeXRob24gMy41YTAgIDMzMjAgKG1hdHJpeCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvcikKKyMgICAgIFB5dGhvbiAzLjViMSAgMzMzMCAoUEVQIDQ0ODogQWRkaXRpb25hbCBVbnBhY2tpbmcgR2VuZXJhbGl6YXRpb25zKQorIyAgICAgUHl0aG9uIDMuNWIyICAzMzQwIChmaXggZGljdGlvbmFyeSBkaXNwbGF5IGV2YWx1YXRpb24gb3JkZXIgIzExMjA1KQorIyAgICAgUHl0aG9uIDMuNWIyICAzMzUwIChhZGQgR0VUX1lJRUxEX0ZST01fSVRFUiBvcGNvZGUgIzI0NDAwKQorIyAgICAgUHl0aG9uIDMuNS4yICAzMzUxIChmaXggQlVJTERfTUFQX1VOUEFDS19XSVRIX0NBTEwgb3Bjb2RlICMyNzI4NikKKyMKKyMgTUFHSUMgbXVzdCBjaGFuZ2Ugd2hlbmV2ZXIgdGhlIGJ5dGVjb2RlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIG1heSBubworIyBsb25nZXIgYmUgdW5kZXJzdG9vZCBieSBvbGRlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGV2YWwgbG9vcCAodXN1YWxseQorIyBkdWUgdG8gdGhlIGFkZGl0aW9uIG9mIG5ldyBvcGNvZGVzKS4KKyMKKyMgV2hlbmV2ZXIgTUFHSUNfTlVNQkVSIGlzIGNoYW5nZWQsIHRoZSByYW5nZXMgaW4gdGhlIG1hZ2ljX3ZhbHVlcyBhcnJheQorIyBpbiBQQy9sYXVuY2hlci5jIG11c3QgYWxzbyBiZSB1cGRhdGVkLgorCitNQUdJQ19OVU1CRVIgPSAoMzM1MSkudG9fYnl0ZXMoMiwgJ2xpdHRsZScpICsgYidcclxuJworX1JBV19NQUdJQ19OVU1CRVIgPSBpbnQuZnJvbV9ieXRlcyhNQUdJQ19OVU1CRVIsICdsaXR0bGUnKSAgIyBGb3IgaW1wb3J0LmMKKworX1BZQ0FDSEUgPSAnX19weWNhY2hlX18nCitfT1BUID0gJ29wdC0nCisKK1NPVVJDRV9TVUZGSVhFUyA9IFsnLnB5J10gICMgX3NldHVwKCkgYWRkcyAucHl3IGFzIG5lZWRlZC4KKworQllURUNPREVfU1VGRklYRVMgPSBbJy5weWMnXQorIyBEZXByZWNhdGVkLgorREVCVUdfQllURUNPREVfU1VGRklYRVMgPSBPUFRJTUlaRURfQllURUNPREVfU1VGRklYRVMgPSBCWVRFQ09ERV9TVUZGSVhFUworCitkZWYgY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGU9Tm9uZSwgKiwgb3B0aW1pemF0aW9uPU5vbmUpOgorICAgICIiIkdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5YyBmaWxlLgorCisgICAgVGhlIC5weSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8gdGhlCisgICAgLnB5YyBmaWxlIGNhbGN1bGF0ZWQgYXMgaWYgdGhlIC5weSBmaWxlIHdlcmUgaW1wb3J0ZWQuCisKKyAgICBUaGUgJ29wdGltaXphdGlvbicgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBwcmVzdW1lZCBvcHRpbWl6YXRpb24gbGV2ZWwgb2YKKyAgICB0aGUgYnl0ZWNvZGUgZmlsZS4gSWYgJ29wdGltaXphdGlvbicgaXMgbm90IE5vbmUsIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24KKyAgICBvZiB0aGUgYXJndW1lbnQgaXMgdGFrZW4gYW5kIHZlcmlmaWVkIHRvIGJlIGFscGhhbnVtZXJpYyAoZWxzZSBWYWx1ZUVycm9yCisgICAgaXMgcmFpc2VkKS4KKworICAgIFRoZSBkZWJ1Z19vdmVycmlkZSBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gSWYgZGVidWdfb3ZlcnJpZGUgaXMgbm90IE5vbmUsCisgICAgYSBUcnVlIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgJ29wdGltaXphdGlvbicgdG8gdGhlIGVtcHR5IHN0cmluZworICAgIHdoaWxlIGEgRmFsc2UgdmFsdWUgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nICdvcHRpbWl6YXRpb24nIHRvICcxJy4KKworICAgIElmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSB0aGVuIE5vdEltcGxlbWVudGVkRXJyb3IgaXMgcmFpc2VkLgorCisgICAgIiIiCisgICAgaWYgZGVidWdfb3ZlcnJpZGUgaXMgbm90IE5vbmU6CisgICAgICAgIF93YXJuaW5ncy53YXJuKCd0aGUgZGVidWdfb3ZlcnJpZGUgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCisgICAgICAgICAgICAgICAgICAgICAgICInb3B0aW1pemF0aW9uJyBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBpZiBvcHRpbWl6YXRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBtZXNzYWdlID0gJ2RlYnVnX292ZXJyaWRlIG9yIG9wdGltaXphdGlvbiBtdXN0IGJlIHNldCB0byBOb25lJworICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1lc3NhZ2UpCisgICAgICAgIG9wdGltaXphdGlvbiA9ICcnIGlmIGRlYnVnX292ZXJyaWRlIGVsc2UgMQorICAgIGhlYWQsIHRhaWwgPSBfcGF0aF9zcGxpdChwYXRoKQorICAgIGJhc2UsIHNlcCwgcmVzdCA9IHRhaWwucnBhcnRpdGlvbignLicpCisgICAgdGFnID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZworICAgIGlmIHRhZyBpcyBOb25lOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUnKQorICAgIGFsbW9zdF9maWxlbmFtZSA9ICcnLmpvaW4oWyhiYXNlIGlmIGJhc2UgZWxzZSByZXN0KSwgc2VwLCB0YWddKQorICAgIGlmIG9wdGltaXphdGlvbiBpcyBOb25lOgorICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPT0gMDoKKyAgICAgICAgICAgIG9wdGltaXphdGlvbiA9ICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcHRpbWl6YXRpb24gPSBzeXMuZmxhZ3Mub3B0aW1pemUKKyAgICBvcHRpbWl6YXRpb24gPSBzdHIob3B0aW1pemF0aW9uKQorICAgIGlmIG9wdGltaXphdGlvbiAhPSAnJzoKKyAgICAgICAgaWYgbm90IG9wdGltaXphdGlvbi5pc2FsbnVtKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7IXJ9IGlzIG5vdCBhbHBoYW51bWVyaWMnLmZvcm1hdChvcHRpbWl6YXRpb24pKQorICAgICAgICBhbG1vc3RfZmlsZW5hbWUgPSAne30ue317fScuZm9ybWF0KGFsbW9zdF9maWxlbmFtZSwgX09QVCwgb3B0aW1pemF0aW9uKQorICAgIHJldHVybiBfcGF0aF9qb2luKGhlYWQsIF9QWUNBQ0hFLCBhbG1vc3RfZmlsZW5hbWUgKyBCWVRFQ09ERV9TVUZGSVhFU1swXSkKKworCitkZWYgc291cmNlX2Zyb21fY2FjaGUocGF0aCk6CisgICAgIiIiR2l2ZW4gdGhlIHBhdGggdG8gYSAucHljLiBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weSBmaWxlLgorCisgICAgVGhlIC5weWMgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0OyB0aGlzIHNpbXBseSByZXR1cm5zIHRoZSBwYXRoIHRvCisgICAgdGhlIC5weSBmaWxlIGNhbGN1bGF0ZWQgdG8gY29ycmVzcG9uZCB0byB0aGUgLnB5YyBmaWxlLiAgSWYgcGF0aCBkb2VzCisgICAgbm90IGNvbmZvcm0gdG8gUEVQIDMxNDcvNDg4IGZvcm1hdCwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4gSWYKKyAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUgdGhlbiBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZC4KKworICAgICIiIgorICAgIGlmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lJykKKyAgICBoZWFkLCBweWNhY2hlX2ZpbGVuYW1lID0gX3BhdGhfc3BsaXQocGF0aCkKKyAgICBoZWFkLCBweWNhY2hlID0gX3BhdGhfc3BsaXQoaGVhZCkKKyAgICBpZiBweWNhY2hlICE9IF9QWUNBQ0hFOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBub3QgYm90dG9tLWxldmVsIGRpcmVjdG9yeSBpbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0nLmZvcm1hdChfUFlDQUNIRSwgcGF0aCkpCisgICAgZG90X2NvdW50ID0gcHljYWNoZV9maWxlbmFtZS5jb3VudCgnLicpCisgICAgaWYgZG90X2NvdW50IG5vdCBpbiB7MiwgM306CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2V4cGVjdGVkIG9ubHkgMiBvciAzIGRvdHMgaW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9Jy5mb3JtYXQocHljYWNoZV9maWxlbmFtZSkpCisgICAgZWxpZiBkb3RfY291bnQgPT0gMzoKKyAgICAgICAgb3B0aW1pemF0aW9uID0gcHljYWNoZV9maWxlbmFtZS5yc3BsaXQoJy4nLCAyKVstMl0KKyAgICAgICAgaWYgbm90IG9wdGltaXphdGlvbi5zdGFydHN3aXRoKF9PUFQpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigib3B0aW1pemF0aW9uIHBvcnRpb24gb2YgZmlsZW5hbWUgZG9lcyBub3Qgc3RhcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCB7IXJ9Ii5mb3JtYXQoX09QVCkpCisgICAgICAgIG9wdF9sZXZlbCA9IG9wdGltaXphdGlvbltsZW4oX09QVCk6XQorICAgICAgICBpZiBub3Qgb3B0X2xldmVsLmlzYWxudW0oKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm9wdGltaXphdGlvbiBsZXZlbCB7IXJ9IGlzIG5vdCBhbiBhbHBoYW51bWVyaWMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiLmZvcm1hdChvcHRpbWl6YXRpb24pKQorICAgIGJhc2VfZmlsZW5hbWUgPSBweWNhY2hlX2ZpbGVuYW1lLnBhcnRpdGlvbignLicpWzBdCisgICAgcmV0dXJuIF9wYXRoX2pvaW4oaGVhZCwgYmFzZV9maWxlbmFtZSArIFNPVVJDRV9TVUZGSVhFU1swXSkKKworCitkZWYgX2dldF9zb3VyY2VmaWxlKGJ5dGVjb2RlX3BhdGgpOgorICAgICIiIkNvbnZlcnQgYSBieXRlY29kZSBmaWxlIHBhdGggdG8gYSBzb3VyY2UgcGF0aCAoaWYgcG9zc2libGUpLgorCisgICAgVGhpcyBmdW5jdGlvbiBleGlzdHMgcHVyZWx5IGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBmb3IKKyAgICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhGaWxlbmFtZXMoKSBpbiB0aGUgQyBBUEkuCisKKyAgICAiIiIKKyAgICBpZiBsZW4oYnl0ZWNvZGVfcGF0aCkgPT0gMDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXN0LCBfLCBleHRlbnNpb24gPSBieXRlY29kZV9wYXRoLnJwYXJ0aXRpb24oJy4nKQorICAgIGlmIG5vdCByZXN0IG9yIGV4dGVuc2lvbi5sb3dlcigpWy0zOi0xXSAhPSAncHknOgorICAgICAgICByZXR1cm4gYnl0ZWNvZGVfcGF0aAorICAgIHRyeToKKyAgICAgICAgc291cmNlX3BhdGggPSBzb3VyY2VfZnJvbV9jYWNoZShieXRlY29kZV9wYXRoKQorICAgIGV4Y2VwdCAoTm90SW1wbGVtZW50ZWRFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgIHNvdXJjZV9wYXRoID0gYnl0ZWNvZGVfcGF0aFs6LTFdCisgICAgcmV0dXJuIHNvdXJjZV9wYXRoIGlmIF9wYXRoX2lzZmlsZShzb3VyY2VfcGF0aCkgZWxzZSBieXRlY29kZV9wYXRoCisKKworZGVmIF9nZXRfY2FjaGVkKGZpbGVuYW1lKToKKyAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCh0dXBsZShTT1VSQ0VfU1VGRklYRVMpKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGNhY2hlX2Zyb21fc291cmNlKGZpbGVuYW1lKQorICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICBlbGlmIGZpbGVuYW1lLmVuZHN3aXRoKHR1cGxlKEJZVEVDT0RFX1NVRkZJWEVTKSk6CisgICAgICAgIHJldHVybiBmaWxlbmFtZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworZGVmIF9jYWxjX21vZGUocGF0aCk6CisgICAgIiIiQ2FsY3VsYXRlIHRoZSBtb2RlIHBlcm1pc3Npb25zIGZvciBhIGJ5dGVjb2RlIGZpbGUuIiIiCisgICAgdHJ5OgorICAgICAgICBtb2RlID0gX3BhdGhfc3RhdChwYXRoKS5zdF9tb2RlCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIG1vZGUgPSAwbzY2NgorICAgICMgV2UgYWx3YXlzIGVuc3VyZSB3cml0ZSBhY2Nlc3Mgc28gd2UgY2FuIHVwZGF0ZSBjYWNoZWQgZmlsZXMKKyAgICAjIGxhdGVyIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSByZWFkLW9ubHkgb24gV2luZG93cyAoIzYwNzQpCisgICAgbW9kZSB8PSAwbzIwMAorICAgIHJldHVybiBtb2RlCisKKworZGVmIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSwgKmFyZ3MsIHZlcmJvc2l0eT0xKToKKyAgICAiIiJQcmludCB0aGUgbWVzc2FnZSB0byBzdGRlcnIgaWYgLXYvUFlUSE9OVkVSQk9TRSBpcyB0dXJuZWQgb24uIiIiCisgICAgaWYgc3lzLmZsYWdzLnZlcmJvc2UgPj0gdmVyYm9zaXR5OgorICAgICAgICBpZiBub3QgbWVzc2FnZS5zdGFydHN3aXRoKCgnIycsICdpbXBvcnQgJykpOgorICAgICAgICAgICAgbWVzc2FnZSA9ICcjICcgKyBtZXNzYWdlCisgICAgICAgIHByaW50KG1lc3NhZ2UuZm9ybWF0KCphcmdzKSwgZmlsZT1zeXMuc3RkZXJyKQorCisKK2RlZiBfY2hlY2tfbmFtZShtZXRob2QpOgorICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhhdCB0aGUgbW9kdWxlIGJlaW5nIHJlcXVlc3RlZCBtYXRjaGVzIHRoZSBvbmUgdGhlCisgICAgbG9hZGVyIGNhbiBoYW5kbGUuCisKKyAgICBUaGUgZmlyc3QgYXJndW1lbnQgKHNlbGYpIG11c3QgZGVmaW5lIF9uYW1lIHdoaWNoIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKKyAgICBjb21wYXJlZCBhZ2FpbnN0LiBJZiB0aGUgY29tcGFyaXNvbiBmYWlscyB0aGVuIEltcG9ydEVycm9yIGlzIHJhaXNlZC4KKworICAgICIiIgorICAgIGRlZiBfY2hlY2tfbmFtZV93cmFwcGVyKHNlbGYsIG5hbWU9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBlbGlmIHNlbGYubmFtZSAhPSBuYW1lOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2xvYWRlciBmb3IgJXMgY2Fubm90IGhhbmRsZSAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBuYW1lKSwgbmFtZT1uYW1lKQorICAgICAgICByZXR1cm4gbWV0aG9kKHNlbGYsIG5hbWUsICphcmdzLCAqKmt3YXJncykKKyAgICB0cnk6CisgICAgICAgIF93cmFwID0gX2Jvb3RzdHJhcC5fd3JhcAorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICMgWFhYIHl1Y2sKKyAgICAgICAgZGVmIF93cmFwKG5ldywgb2xkKToKKyAgICAgICAgICAgIGZvciByZXBsYWNlIGluIFsnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdfX3F1YWxuYW1lX18nLCAnX19kb2NfXyddOgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob2xkLCByZXBsYWNlKToKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihuZXcsIHJlcGxhY2UsIGdldGF0dHIob2xkLCByZXBsYWNlKSkKKyAgICAgICAgICAgIG5ldy5fX2RpY3RfXy51cGRhdGUob2xkLl9fZGljdF9fKQorICAgIF93cmFwKF9jaGVja19uYW1lX3dyYXBwZXIsIG1ldGhvZCkKKyAgICByZXR1cm4gX2NoZWNrX25hbWVfd3JhcHBlcgorCisKK2RlZiBfZmluZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSk6CisgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGJ5IGRlbGVnYXRpbmcgdG8KKyAgICBzZWxmLmZpbmRfbG9hZGVyKCkuCisKKyAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGZpbmRlci5maW5kX3NwZWMoKS4KKworICAgICIiIgorICAgICMgQ2FsbCBmaW5kX2xvYWRlcigpLiBJZiBpdCByZXR1cm5zIGEgc3RyaW5nIChpbmRpY2F0aW5nIHRoaXMKKyAgICAjIGlzIGEgbmFtZXNwYWNlIHBhY2thZ2UgcG9ydGlvbiksIGdlbmVyYXRlIGEgd2FybmluZyBhbmQKKyAgICAjIHJldHVybiBOb25lLgorICAgIGxvYWRlciwgcG9ydGlvbnMgPSBzZWxmLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorICAgIGlmIGxvYWRlciBpcyBOb25lIGFuZCBsZW4ocG9ydGlvbnMpOgorICAgICAgICBtc2cgPSAnTm90IGltcG9ydGluZyBkaXJlY3Rvcnkge306IG1pc3NpbmcgX19pbml0X18nCisgICAgICAgIF93YXJuaW5ncy53YXJuKG1zZy5mb3JtYXQocG9ydGlvbnNbMF0pLCBJbXBvcnRXYXJuaW5nKQorICAgIHJldHVybiBsb2FkZXIKKworCitkZWYgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLCBzb3VyY2Vfc3RhdHM9Tm9uZSwgbmFtZT1Ob25lLCBwYXRoPU5vbmUpOgorICAgICIiIlZhbGlkYXRlIHRoZSBoZWFkZXIgb2YgdGhlIHBhc3NlZC1pbiBieXRlY29kZSBhZ2FpbnN0IHNvdXJjZV9zdGF0cyAoaWYKKyAgICBnaXZlbikgYW5kIHJldHVybmluZyB0aGUgYnl0ZWNvZGUgdGhhdCBjYW4gYmUgY29tcGlsZWQgYnkgY29tcGlsZSgpLgorCisgICAgQWxsIG90aGVyIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBlbmhhbmNlIGVycm9yIHJlcG9ydGluZy4KKworICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZSBtYWdpYyBudW1iZXIgaXMgaW5jb3JyZWN0IG9yIHRoZSBieXRlY29kZSBpcworICAgIGZvdW5kIHRvIGJlIHN0YWxlLiBFT0ZFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgZGF0YSBpcyBmb3VuZCB0byBiZQorICAgIHRydW5jYXRlZC4KKworICAgICIiIgorICAgIGV4Y19kZXRhaWxzID0ge30KKyAgICBpZiBuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1snbmFtZSddID0gbmFtZQorICAgIGVsc2U6CisgICAgICAgICMgVG8gcHJldmVudCBoYXZpbmcgdG8gbWFrZSBhbGwgbWVzc2FnZXMgaGF2ZSBhIGNvbmRpdGlvbmFsIG5hbWUuCisgICAgICAgIG5hbWUgPSAnPGJ5dGVjb2RlPicKKyAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1sncGF0aCddID0gcGF0aAorICAgIG1hZ2ljID0gZGF0YVs6NF0KKyAgICByYXdfdGltZXN0YW1wID0gZGF0YVs0OjhdCisgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCisgICAgaWYgbWFnaWMgIT0gTUFHSUNfTlVNQkVSOgorICAgICAgICBtZXNzYWdlID0gJ2JhZCBtYWdpYyBudW1iZXIgaW4geyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG1hZ2ljKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd7fScsIG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsICoqZXhjX2RldGFpbHMpCisgICAgZWxpZiBsZW4ocmF3X3RpbWVzdGFtcCkgIT0gNDoKKyAgICAgICAgbWVzc2FnZSA9ICdyZWFjaGVkIEVPRiB3aGlsZSByZWFkaW5nIHRpbWVzdGFtcCBpbiB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30nLCBtZXNzYWdlKQorICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQorICAgIGVsaWYgbGVuKHJhd19zaXplKSAhPSA0OgorICAgICAgICBtZXNzYWdlID0gJ3JlYWNoZWQgRU9GIHdoaWxlIHJlYWRpbmcgc2l6ZSBvZiBzb3VyY2UgaW4geyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9JywgbWVzc2FnZSkKKyAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKKyAgICBpZiBzb3VyY2Vfc3RhdHMgaXMgbm90IE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IGludChzb3VyY2Vfc3RhdHNbJ210aW1lJ10pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3RpbWVzdGFtcCkgIT0gc291cmNlX210aW1lOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9JywgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCAqKmV4Y19kZXRhaWxzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2Vfc2l6ZSA9IHNvdXJjZV9zdGF0c1snc2l6ZSddICYgMHhGRkZGRkZGRgorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmV4Y19kZXRhaWxzKQorICAgIHJldHVybiBkYXRhWzEyOl0KKworCitkZWYgX2NvbXBpbGVfYnl0ZWNvZGUoZGF0YSwgbmFtZT1Ob25lLCBieXRlY29kZV9wYXRoPU5vbmUsIHNvdXJjZV9wYXRoPU5vbmUpOgorICAgICIiIkNvbXBpbGUgYnl0ZWNvZGUgYXMgcmV0dXJuZWQgYnkgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcigpLiIiIgorICAgIGNvZGUgPSBtYXJzaGFsLmxvYWRzKGRhdGEpCisgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBfY29kZV90eXBlKToKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7IXJ9JywgYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgaWYgc291cmNlX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfaW1wLl9maXhfY29fZmlsZW5hbWUoY29kZSwgc291cmNlX3BhdGgpCisgICAgICAgIHJldHVybiBjb2RlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ05vbi1jb2RlIG9iamVjdCBpbiB7IXJ9Jy5mb3JtYXQoYnl0ZWNvZGVfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQorCitkZWYgX2NvZGVfdG9fYnl0ZWNvZGUoY29kZSwgbXRpbWU9MCwgc291cmNlX3NpemU9MCk6CisgICAgIiIiQ29tcGlsZSBhIGNvZGUgb2JqZWN0IGludG8gYnl0ZWNvZGUgZm9yIHdyaXRpbmcgb3V0IHRvIGEgYnl0ZS1jb21waWxlZAorICAgIGZpbGUuIiIiCisgICAgZGF0YSA9IGJ5dGVhcnJheShNQUdJQ19OVU1CRVIpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhtdGltZSkpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2Vfc2l6ZSkpCisgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlKSkKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyk6CisgICAgIiIiRGVjb2RlIGJ5dGVzIHJlcHJlc2VudGluZyBzb3VyY2UgY29kZSBhbmQgcmV0dXJuIHRoZSBzdHJpbmcuCisKKyAgICBVbml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGlzIHVzZWQgaW4gdGhlIGRlY29kaW5nLgorICAgICIiIgorICAgIGltcG9ydCB0b2tlbml6ZSAgIyBUbyBhdm9pZCBib290c3RyYXAgaXNzdWVzLgorICAgIHNvdXJjZV9ieXRlc19yZWFkbGluZSA9IF9pby5CeXRlc0lPKHNvdXJjZV9ieXRlcykucmVhZGxpbmUKKyAgICBlbmNvZGluZyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhzb3VyY2VfYnl0ZXNfcmVhZGxpbmUpCisgICAgbmV3bGluZV9kZWNvZGVyID0gX2lvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkKKyAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKKworCisjIE1vZHVsZSBzcGVjaWZpY2F0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK19QT1BVTEFURSA9IG9iamVjdCgpCisKKworZGVmIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvY2F0aW9uPU5vbmUsICosIGxvYWRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPV9QT1BVTEFURSk6CisgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHNwZWMgYmFzZWQgb24gYSBmaWxlIGxvY2F0aW9uLgorCisgICAgVG8gaW5kaWNhdGUgdGhhdCB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgc2V0CisgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgdG8gYSBsaXN0IG9mIGRpcmVjdG9yeSBwYXRocy4gIEFuCisgICAgZW1wdHkgbGlzdCBpcyBzdWZmaWNpZW50LCB0aG91Z2ggaXRzIG5vdCBvdGhlcndpc2UgdXNlZnVsIHRvIHRoZQorICAgIGltcG9ydCBzeXN0ZW0uCisKKyAgICBUaGUgbG9hZGVyIG11c3QgdGFrZSBhIHNwZWMgYXMgaXRzIG9ubHkgX19pbml0X18oKSBhcmcuCisKKyAgICAiIiIKKyAgICBpZiBsb2NhdGlvbiBpcyBOb25lOgorICAgICAgICAjIFRoZSBjYWxsZXIgbWF5IHNpbXBseSB3YW50IGEgcGFydGlhbGx5IHBvcHVsYXRlZCBsb2NhdGlvbi0KKyAgICAgICAgIyBvcmllbnRlZCBzcGVjLiAgU28gd2Ugc2V0IHRoZSBsb2NhdGlvbiB0byBhIGJvZ3VzIHZhbHVlIGFuZAorICAgICAgICAjIGZpbGwgaW4gYXMgbXVjaCBhcyB3ZSBjYW4uCisgICAgICAgIGxvY2F0aW9uID0gJzx1bmtub3duPicKKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdnZXRfZmlsZW5hbWUnKToKKyAgICAgICAgICAgICMgRXhlY3V0aW9uTG9hZGVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBsb2FkZXIuZ2V0X2ZpbGVuYW1lKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBJZiB0aGUgbG9jYXRpb24gaXMgb24gdGhlIGZpbGVzeXN0ZW0sIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGV4aXN0LAorICAgICMgd2UgY291bGQgcmV0dXJuIE5vbmUgaGVyZSwgaW5kaWNhdGluZyB0aGF0IHRoZSBsb2NhdGlvbiBpcyBub3QKKyAgICAjIHZhbGlkLiAgSG93ZXZlciwgd2UgZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IG9mIHRlc3Rpbmcgc2luY2UgYW4KKyAgICAjIGluZGlyZWN0IGxvY2F0aW9uIChlLmcuIGEgemlwIGZpbGUgb3IgVVJMKSB3aWxsIGxvb2sgbGlrZSBhCisgICAgIyBub24tZXhpc3RlbnQgZmlsZSByZWxhdGl2ZSB0byB0aGUgZmlsZXN5c3RlbS4KKworICAgIHNwZWMgPSBfYm9vdHN0cmFwLk1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49bG9jYXRpb24pCisgICAgc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgIyBQaWNrIGEgbG9hZGVyIGlmIG9uZSB3YXNuJ3QgcHJvdmlkZWQuCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGZvciBsb2FkZXJfY2xhc3MsIHN1ZmZpeGVzIGluIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpOgorICAgICAgICAgICAgaWYgbG9jYXRpb24uZW5kc3dpdGgodHVwbGUoc3VmZml4ZXMpKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBsb2FkZXJfY2xhc3MobmFtZSwgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgc3BlYy5sb2FkZXIgPSBsb2FkZXIKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgU2V0IHN1Ym1vZHVsZV9zZWFyY2hfcGF0aHMgYXBwcm9wcmlhdGVseS4KKyAgICBpZiBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBfUE9QVUxBVEU6CisgICAgICAgICMgQ2hlY2sgdGhlIGxvYWRlci4KKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdpc19wYWNrYWdlJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IGxvYWRlci5pc19wYWNrYWdlKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW10KKyAgICBlbHNlOgorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID09IFtdOgorICAgICAgICBpZiBsb2NhdGlvbjoKKyAgICAgICAgICAgIGRpcm5hbWUgPSBfcGF0aF9zcGxpdChsb2NhdGlvbilbMF0KKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMuYXBwZW5kKGRpcm5hbWUpCisKKyAgICByZXR1cm4gc3BlYworCisKKyMgTG9hZGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgV2luZG93c1JlZ2lzdHJ5RmluZGVyOgorCisgICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4iIiIKKworICAgIFJFR0lTVFJZX0tFWSA9ICgKKyAgICAgICAgJ1NvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXHtzeXNfdmVyc2lvbn0nCisgICAgICAgICdcXE1vZHVsZXNcXHtmdWxsbmFtZX0nKQorICAgIFJFR0lTVFJZX0tFWV9ERUJVRyA9ICgKKyAgICAgICAgJ1NvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXHtzeXNfdmVyc2lvbn0nCisgICAgICAgICdcXE1vZHVsZXNcXHtmdWxsbmFtZX1cXERlYnVnJykKKyAgICBERUJVR19CVUlMRCA9IEZhbHNlICAjIENoYW5nZWQgaW4gX3NldHVwKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfb3Blbl9yZWdpc3RyeShjbHMsIGtleSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfd2lucmVnLk9wZW5LZXkoX3dpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUiwga2V5KQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBfd2lucmVnLk9wZW5LZXkoX3dpbnJlZy5IS0VZX0xPQ0FMX01BQ0hJTkUsIGtleSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc2VhcmNoX3JlZ2lzdHJ5KGNscywgZnVsbG5hbWUpOgorICAgICAgICBpZiBjbHMuREVCVUdfQlVJTEQ6CisgICAgICAgICAgICByZWdpc3RyeV9rZXkgPSBjbHMuUkVHSVNUUllfS0VZX0RFQlVHCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWdpc3RyeV9rZXkgPSBjbHMuUkVHSVNUUllfS0VZCisgICAgICAgIGtleSA9IHJlZ2lzdHJ5X2tleS5mb3JtYXQoZnVsbG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzX3ZlcnNpb249c3lzLnZlcnNpb25bOjNdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNscy5fb3Blbl9yZWdpc3RyeShrZXkpIGFzIGhrZXk6CisgICAgICAgICAgICAgICAgZmlsZXBhdGggPSBfd2lucmVnLlF1ZXJ5VmFsdWUoaGtleSwgJycpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGZpbGVwYXRoCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICBmaWxlcGF0aCA9IGNscy5fc2VhcmNoX3JlZ2lzdHJ5KGZ1bGxuYW1lKQorICAgICAgICBpZiBmaWxlcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX3BhdGhfc3RhdChmaWxlcGF0aCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBmb3IgbG9hZGVyLCBzdWZmaXhlcyBpbiBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKToKKyAgICAgICAgICAgIGlmIGZpbGVwYXRoLmVuZHN3aXRoKHR1cGxlKHN1ZmZpeGVzKSk6CisgICAgICAgICAgICAgICAgc3BlYyA9IF9ib290c3RyYXAuc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcihmdWxsbmFtZSwgZmlsZXBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPWZpbGVwYXRoKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiRmluZCBtb2R1bGUgbmFtZWQgaW4gdGhlIHJlZ2lzdHJ5LgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBfTG9hZGVyQmFzaWNzOgorCisgICAgIiIiQmFzZSBjbGFzcyBvZiBjb21tb24gY29kZSBuZWVkZWQgYnkgYm90aCBTb3VyY2VMb2FkZXIgYW5kCisgICAgU291cmNlbGVzc0ZpbGVMb2FkZXIuIiIiCisKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuaXNfcGFja2FnZSBieSBjaGVja2luZyBpZgorICAgICAgICB0aGUgcGF0aCByZXR1cm5lZCBieSBnZXRfZmlsZW5hbWUgaGFzIGEgZmlsZW5hbWUgb2YgJ19faW5pdF9fLnB5Jy4iIiIKKyAgICAgICAgZmlsZW5hbWUgPSBfcGF0aF9zcGxpdChzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkpWzFdCisgICAgICAgIGZpbGVuYW1lX2Jhc2UgPSBmaWxlbmFtZS5yc3BsaXQoJy4nLCAxKVswXQorICAgICAgICB0YWlsX25hbWUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMl0KKyAgICAgICAgcmV0dXJuIGZpbGVuYW1lX2Jhc2UgPT0gJ19faW5pdF9fJyBhbmQgdGFpbF9uYW1lICE9ICdfX2luaXRfXycKKworICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAiIiJVc2UgZGVmYXVsdCBzZW1hbnRpY3MgZm9yIG1vZHVsZSBjcmVhdGlvbi4iIiIKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJFeGVjdXRlIHRoZSBtb2R1bGUuIiIiCisgICAgICAgIGNvZGUgPSBzZWxmLmdldF9jb2RlKG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgaWYgY29kZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2Nhbm5vdCBsb2FkIG1vZHVsZSB7IXJ9IHdoZW4gZ2V0X2NvZGUoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV0dXJucyBOb25lJy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKSkKKyAgICAgICAgX2Jvb3RzdHJhcC5fY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKGV4ZWMsIGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBfYm9vdHN0cmFwLl9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKQorCisKK2NsYXNzIFNvdXJjZUxvYWRlcihfTG9hZGVyQmFzaWNzKToKKworICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSAoYW4gaW50KSBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCBwYXRoLCB3aGVyZSBwYXRoIGlzIGEgc3RyLgorCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIHdoZW4gdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBJT0Vycm9yCisKKyAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiT3B0aW9uYWwgbWV0aG9kIHJldHVybmluZyBhIG1ldGFkYXRhIGRpY3QgZm9yIHRoZSBzcGVjaWZpZWQgcGF0aAorICAgICAgICB0byBieSB0aGUgcGF0aCAoc3RyKS4KKyAgICAgICAgUG9zc2libGUga2V5czoKKyAgICAgICAgLSAnbXRpbWUnIChtYW5kYXRvcnkpIGlzIHRoZSBudW1lcmljIHRpbWVzdGFtcCBvZiBsYXN0IHNvdXJjZQorICAgICAgICAgIGNvZGUgbW9kaWZpY2F0aW9uOworICAgICAgICAtICdzaXplJyAob3B0aW9uYWwpIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KKworICAgICAgICBJbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QgYWxsb3dzIHRoZSBsb2FkZXIgdG8gcmVhZCBieXRlY29kZSBmaWxlcy4KKyAgICAgICAgUmFpc2VzIElPRXJyb3Igd2hlbiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5wYXRoX210aW1lKHBhdGgpfQorCisgICAgZGVmIF9jYWNoZV9ieXRlY29kZShzZWxmLCBzb3VyY2VfcGF0aCwgY2FjaGVfcGF0aCwgZGF0YSk6CisgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB3aGljaCB3cml0ZXMgZGF0YSAoYnl0ZXMpIHRvIGEgZmlsZSBwYXRoIChhIHN0cikuCisKKyAgICAgICAgSW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kIGFsbG93cyBmb3IgdGhlIHdyaXRpbmcgb2YgYnl0ZWNvZGUgZmlsZXMuCisKKyAgICAgICAgVGhlIHNvdXJjZSBwYXRoIGlzIG5lZWRlZCBpbiBvcmRlciB0byBjb3JyZWN0bHkgdHJhbnNmZXIgcGVybWlzc2lvbnMKKyAgICAgICAgIiIiCisgICAgICAgICMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3ZSBkZWxlZ2F0ZSB0byBzZXRfZGF0YSgpCisgICAgICAgIHJldHVybiBzZWxmLnNldF9kYXRhKGNhY2hlX3BhdGgsIGRhdGEpCisKKyAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CisgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB3aGljaCB3cml0ZXMgZGF0YSAoYnl0ZXMpIHRvIGEgZmlsZSBwYXRoIChhIHN0cikuCisKKyAgICAgICAgSW1wbGVtZW50aW5nIHRoaXMgbWV0aG9kIGFsbG93cyBmb3IgdGhlIHdyaXRpbmcgb2YgYnl0ZWNvZGUgZmlsZXMuCisgICAgICAgICIiIgorCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZS4iIiIKKyAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHBhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSkgZnJvbSBleGMKKyAgICAgICAgcmV0dXJuIGRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKQorCisgICAgZGVmIHNvdXJjZV90b19jb2RlKHNlbGYsIGRhdGEsIHBhdGgsICosIF9vcHRpbWl6ZT0tMSk6CisgICAgICAgICIiIlJldHVybiB0aGUgY29kZSBvYmplY3QgY29tcGlsZWQgZnJvbSBzb3VyY2UuCisKKyAgICAgICAgVGhlICdkYXRhJyBhcmd1bWVudCBjYW4gYmUgYW55IG9iamVjdCB0eXBlIHRoYXQgY29tcGlsZSgpIHN1cHBvcnRzLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9ib290c3RyYXAuX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLCBkYXRhLCBwYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUsIG9wdGltaXplPV9vcHRpbWl6ZSkKKworICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X2NvZGUuCisKKyAgICAgICAgUmVhZGluZyBvZiBieXRlY29kZSByZXF1aXJlcyBwYXRoX3N0YXRzIHRvIGJlIGltcGxlbWVudGVkLiBUbyB3cml0ZQorICAgICAgICBieXRlY29kZSwgc2V0X2RhdGEgbXVzdCBhbHNvIGJlIGltcGxlbWVudGVkLgorCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorICAgICAgICBzb3VyY2VfbXRpbWUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBjYWNoZV9mcm9tX3NvdXJjZShzb3VyY2VfcGF0aCkKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0ID0gc2VsZi5wYXRoX3N0YXRzKHNvdXJjZV9wYXRoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc3RbJ210aW1lJ10pCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3N0YXRzPXN0LCBuYW1lPWZ1bGxuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPWJ5dGVjb2RlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9IG1hdGNoZXMge30nLCBieXRlY29kZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9wYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb21waWxlX2J5dGVjb2RlKGJ5dGVzX2RhdGEsIG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aD1ieXRlY29kZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9wYXRoPXNvdXJjZV9wYXRoKQorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHNvdXJjZV9wYXRoKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlX2J5dGVzLCBzb3VyY2VfcGF0aCkKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsIHNvdXJjZV9wYXRoKQorICAgICAgICBpZiAobm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGFuZCBieXRlY29kZV9wYXRoIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgIHNvdXJjZV9tdGltZSBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICBkYXRhID0gX2NvZGVfdG9fYnl0ZWNvZGUoY29kZV9vYmplY3QsIHNvdXJjZV9tdGltZSwKKyAgICAgICAgICAgICAgICAgICAgbGVuKHNvdXJjZV9ieXRlcykpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVfYnl0ZWNvZGUoc291cmNlX3BhdGgsIGJ5dGVjb2RlX3BhdGgsIGRhdGEpCisgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnd3JvdGUgeyFyfScsIGJ5dGVjb2RlX3BhdGgpCisgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBjb2RlX29iamVjdAorCisKK2NsYXNzIEZpbGVMb2FkZXI6CisKKyAgICAiIiJCYXNlIGZpbGUgbG9hZGVyIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgdGhlIGxvYWRlciBwcm90b2NvbCBtZXRob2RzIHRoYXQKKyAgICByZXF1aXJlIGZpbGUgc3lzdGVtIHVzYWdlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKKyAgICAgICAgIiIiQ2FjaGUgdGhlIG1vZHVsZSBuYW1lIGFuZCB0aGUgcGF0aCB0byB0aGUgZmlsZSBmb3VuZCBieSB0aGUKKyAgICAgICAgZmluZGVyLiIiIgorICAgICAgICBzZWxmLm5hbWUgPSBmdWxsbmFtZQorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5uYW1lKSBeIGhhc2goc2VsZi5wYXRoKQorCisgICAgQF9jaGVja19uYW1lCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiTG9hZCBhIG1vZHVsZSBmcm9tIGEgZmlsZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGV4ZWNfbW9kdWxlKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgb25seSByZWFzb24gZm9yIHRoaXMgbWV0aG9kIGlzIGZvciB0aGUgbmFtZSBjaGVjay4KKyAgICAgICAgIyBJc3N1ZSAjMTQ4NTc6IEF2b2lkIHRoZSB6ZXJvLWFyZ3VtZW50IGZvcm0gb2Ygc3VwZXIgc28gdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgICMgb2YgdGhhdCBmb3JtIGNhbiBiZSB1cGRhdGVkIHdpdGhvdXQgYnJlYWtpbmcgdGhlIGZyb3plbiBtb2R1bGUKKyAgICAgICAgcmV0dXJuIHN1cGVyKEZpbGVMb2FkZXIsIHNlbGYpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorCisgICAgQF9jaGVja19uYW1lCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUgYXMgZm91bmQgYnkgdGhlIGZpbmRlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aAorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGRhdGEgZnJvbSBwYXRoIGFzIHJhdyBieXRlcy4iIiIKKyAgICAgICAgd2l0aCBfaW8uRmlsZUlPKHBhdGgsICdyJykgYXMgZmlsZToKKyAgICAgICAgICAgIHJldHVybiBmaWxlLnJlYWQoKQorCisKK2NsYXNzIFNvdXJjZUZpbGVMb2FkZXIoRmlsZUxvYWRlciwgU291cmNlTG9hZGVyKToKKworICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFNvdXJjZUxvYWRlciB1c2luZyB0aGUgZmlsZSBzeXN0ZW0uIiIiCisKKyAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBtZXRhZGF0YSBmb3IgdGhlIHBhdGguIiIiCisgICAgICAgIHN0ID0gX3BhdGhfc3RhdChwYXRoKQorICAgICAgICByZXR1cm4geydtdGltZSc6IHN0LnN0X210aW1lLCAnc2l6ZSc6IHN0LnN0X3NpemV9CisKKyAgICBkZWYgX2NhY2hlX2J5dGVjb2RlKHNlbGYsIHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKToKKyAgICAgICAgIyBBZGFwdCBiZXR3ZWVuIHRoZSB0d28gQVBJcworICAgICAgICBtb2RlID0gX2NhbGNfbW9kZShzb3VyY2VfcGF0aCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCwgZGF0YSwgX21vZGU9bW9kZSkKKworICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhLCAqLCBfbW9kZT0wbzY2Nik6CisgICAgICAgICIiIldyaXRlIGJ5dGVzIGRhdGEgdG8gYSBmaWxlLiIiIgorICAgICAgICBwYXJlbnQsIGZpbGVuYW1lID0gX3BhdGhfc3BsaXQocGF0aCkKKyAgICAgICAgcGF0aF9wYXJ0cyA9IFtdCisgICAgICAgICMgRmlndXJlIG91dCB3aGF0IGRpcmVjdG9yaWVzIGFyZSBtaXNzaW5nLgorICAgICAgICB3aGlsZSBwYXJlbnQgYW5kIG5vdCBfcGF0aF9pc2RpcihwYXJlbnQpOgorICAgICAgICAgICAgcGFyZW50LCBwYXJ0ID0gX3BhdGhfc3BsaXQocGFyZW50KQorICAgICAgICAgICAgcGF0aF9wYXJ0cy5hcHBlbmQocGFydCkKKyAgICAgICAgIyBDcmVhdGUgbmVlZGVkIGRpcmVjdG9yaWVzLgorICAgICAgICBmb3IgcGFydCBpbiByZXZlcnNlZChwYXRoX3BhcnRzKToKKyAgICAgICAgICAgIHBhcmVudCA9IF9wYXRoX2pvaW4ocGFyZW50LCBwYXJ0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9vcy5ta2RpcihwYXJlbnQpCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgICMgUHJvYmFibHkgYW5vdGhlciBQeXRob24gcHJvY2VzcyBhbHJlYWR5IGNyZWF0ZWQgdGhlIGRpci4KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICMgQ291bGQgYmUgYSBwZXJtaXNzaW9uIGVycm9yLCByZWFkLW9ubHkgZmlsZXN5c3RlbToganVzdCBmb3JnZXQKKyAgICAgICAgICAgICAgICAjIGFib3V0IHdyaXRpbmcgdGhlIGRhdGEuCisgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY291bGQgbm90IGNyZWF0ZSB7IXJ9OiB7IXJ9JywgcGFyZW50LCBleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF93cml0ZV9hdG9taWMocGF0aCwgZGF0YSwgX21vZGUpCisgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjcmVhdGVkIHshcn0nLCBwYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAjIFNhbWUgYXMgYWJvdmU6IGp1c3QgZG9uJ3Qgd3JpdGUgdGhlIGJ5dGVjb2RlLgorICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY291bGQgbm90IGNyZWF0ZSB7IXJ9OiB7IXJ9JywgcGF0aCwgZXhjKQorCisKK2NsYXNzIFNvdXJjZWxlc3NGaWxlTG9hZGVyKEZpbGVMb2FkZXIsIF9Mb2FkZXJCYXNpY3MpOgorCisgICAgIiIiTG9hZGVyIHdoaWNoIGhhbmRsZXMgc291cmNlbGVzcyBmaWxlIGltcG9ydHMuIiIiCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICBwYXRoID0gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKHBhdGgpCisgICAgICAgIGJ5dGVzX2RhdGEgPSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgcmV0dXJuIF9jb21waWxlX2J5dGVjb2RlKGJ5dGVzX2RhdGEsIG5hbWU9ZnVsbG5hbWUsIGJ5dGVjb2RlX3BhdGg9cGF0aCkKKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuIiIiCisgICAgICAgIHJldHVybiBOb25lCisKKworIyBGaWxsZWQgaW4gYnkgX3NldHVwKCkuCitFWFRFTlNJT05fU1VGRklYRVMgPSBbXQorCisKK2NsYXNzIEV4dGVuc2lvbkZpbGVMb2FkZXIoRmlsZUxvYWRlciwgX0xvYWRlckJhc2ljcyk6CisKKyAgICAiIiJMb2FkZXIgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLgorCisgICAgVGhlIGNvbnN0cnVjdG9yIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBGaWxlRmluZGVyLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGF0aCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18gPT0gb3RoZXIuX19jbGFzc19fIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18pCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYubmFtZSkgXiBoYXNoKHNlbGYucGF0aCkKKworICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAiIiJDcmVhdGUgYW4gdW5pdGlhbGl6ZWQgZXh0ZW5zaW9uIG1vZHVsZSIiIgorICAgICAgICBtb2R1bGUgPSBfYm9vdHN0cmFwLl9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoCisgICAgICAgICAgICBfaW1wLmNyZWF0ZV9keW5hbWljLCBzcGVjKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdleHRlbnNpb24gbW9kdWxlIHshcn0gbG9hZGVkIGZyb20geyFyfScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3BlYy5uYW1lLCBzZWxmLnBhdGgpCisgICAgICAgIHJldHVybiBtb2R1bGUKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJJbml0aWFsaXplIGFuIGV4dGVuc2lvbiBtb2R1bGUiIiIKKyAgICAgICAgX2Jvb3RzdHJhcC5fY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAuZXhlY19keW5hbWljLCBtb2R1bGUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2V4dGVuc2lvbiBtb2R1bGUgeyFyfSBleGVjdXRlZCBmcm9tIHshcn0nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5wYXRoKQorCisgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpcyBhIHBhY2thZ2UuIiIiCisgICAgICAgIGZpbGVfbmFtZSA9IF9wYXRoX3NwbGl0KHNlbGYucGF0aClbMV0KKyAgICAgICAgcmV0dXJuIGFueShmaWxlX25hbWUgPT0gJ19faW5pdF9fJyArIHN1ZmZpeAorICAgICAgICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gRVhURU5TSU9OX1NVRkZJWEVTKQorCisgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgYW4gZXh0ZW5zaW9uIG1vZHVsZSBjYW5ub3QgY3JlYXRlIGEgY29kZSBvYmplY3QuIiIiCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIlJldHVybiBOb25lIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGhhdmUgbm8gc291cmNlIGNvZGUuIiIiCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAX2NoZWNrX25hbWUKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZSBhcyBmb3VuZCBieSB0aGUgZmluZGVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKworY2xhc3MgX05hbWVzcGFjZVBhdGg6CisgICAgIiIiUmVwcmVzZW50cyBhIG5hbWVzcGFjZSBwYWNrYWdlJ3MgcGF0aC4gIEl0IHVzZXMgdGhlIG1vZHVsZSBuYW1lCisgICAgdG8gZmluZCBpdHMgcGFyZW50IG1vZHVsZSwgYW5kIGZyb20gdGhlcmUgaXQgbG9va3MgdXAgdGhlIHBhcmVudCdzCisgICAgX19wYXRoX18uICBXaGVuIHRoaXMgY2hhbmdlcywgdGhlIG1vZHVsZSdzIG93biBwYXRoIGlzIHJlY29tcHV0ZWQsCisgICAgdXNpbmcgcGF0aF9maW5kZXIuICBGb3IgdG9wLWxldmVsIG1vZHVsZXMsIHRoZSBwYXJlbnQgbW9kdWxlJ3MgcGF0aAorICAgIGlzIHN5cy5wYXRoLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhdGgsIHBhdGhfZmluZGVyKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5fbGFzdF9wYXJlbnRfcGF0aCA9IHR1cGxlKHNlbGYuX2dldF9wYXJlbnRfcGF0aCgpKQorICAgICAgICBzZWxmLl9wYXRoX2ZpbmRlciA9IHBhdGhfZmluZGVyCisKKyAgICBkZWYgX2ZpbmRfcGFyZW50X3BhdGhfbmFtZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgYSB0dXBsZSBvZiAocGFyZW50LW1vZHVsZS1uYW1lLCBwYXJlbnQtcGF0aC1hdHRyLW5hbWUpIiIiCisgICAgICAgIHBhcmVudCwgZG90LCBtZSA9IHNlbGYuX25hbWUucnBhcnRpdGlvbignLicpCisgICAgICAgIGlmIGRvdCA9PSAnJzoKKyAgICAgICAgICAgICMgVGhpcyBpcyBhIHRvcC1sZXZlbCBtb2R1bGUuIHN5cy5wYXRoIGNvbnRhaW5zIHRoZSBwYXJlbnQgcGF0aC4KKyAgICAgICAgICAgIHJldHVybiAnc3lzJywgJ3BhdGgnCisgICAgICAgICMgTm90IGEgdG9wLWxldmVsIG1vZHVsZS4gcGFyZW50LW1vZHVsZS5fX3BhdGhfXyBjb250YWlucyB0aGUKKyAgICAgICAgIyAgcGFyZW50IHBhdGguCisgICAgICAgIHJldHVybiBwYXJlbnQsICdfX3BhdGhfXycKKworICAgIGRlZiBfZ2V0X3BhcmVudF9wYXRoKHNlbGYpOgorICAgICAgICBwYXJlbnRfbW9kdWxlX25hbWUsIHBhdGhfYXR0cl9uYW1lID0gc2VsZi5fZmluZF9wYXJlbnRfcGF0aF9uYW1lcygpCisgICAgICAgIHJldHVybiBnZXRhdHRyKHN5cy5tb2R1bGVzW3BhcmVudF9tb2R1bGVfbmFtZV0sIHBhdGhfYXR0cl9uYW1lKQorCisgICAgZGVmIF9yZWNhbGN1bGF0ZShzZWxmKToKKyAgICAgICAgIyBJZiB0aGUgcGFyZW50J3MgcGF0aCBoYXMgY2hhbmdlZCwgcmVjYWxjdWxhdGUgX3BhdGgKKyAgICAgICAgcGFyZW50X3BhdGggPSB0dXBsZShzZWxmLl9nZXRfcGFyZW50X3BhdGgoKSkgIyBNYWtlIGEgY29weQorICAgICAgICBpZiBwYXJlbnRfcGF0aCAhPSBzZWxmLl9sYXN0X3BhcmVudF9wYXRoOgorICAgICAgICAgICAgc3BlYyA9IHNlbGYuX3BhdGhfZmluZGVyKHNlbGYuX25hbWUsIHBhcmVudF9wYXRoKQorICAgICAgICAgICAgIyBOb3RlIHRoYXQgbm8gY2hhbmdlcyBhcmUgbWFkZSBpZiBhIGxvYWRlciBpcyByZXR1cm5lZCwgYnV0IHdlCisgICAgICAgICAgICAjICBkbyByZW1lbWJlciB0aGUgbmV3IHBhcmVudCBwYXRoCisgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICBzZWxmLl9sYXN0X3BhcmVudF9wYXRoID0gcGFyZW50X3BhdGggICAgICMgU2F2ZSB0aGUgY29weQorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9yZWNhbGN1bGF0ZSgpKQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcmVjYWxjdWxhdGUoKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdfTmFtZXNwYWNlUGF0aCh7IXJ9KScuZm9ybWF0KHNlbGYuX3BhdGgpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGl0ZW0pOgorICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLl9yZWNhbGN1bGF0ZSgpCisKKyAgICBkZWYgYXBwZW5kKHNlbGYsIGl0ZW0pOgorICAgICAgICBzZWxmLl9wYXRoLmFwcGVuZChpdGVtKQorCisKKyMgV2UgdXNlIHRoaXMgZXhjbHVzaXZlbHkgaW4gbW9kdWxlX2Zyb21fc3BlYygpIGZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LgorY2xhc3MgX05hbWVzcGFjZUxvYWRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGF0aCwgcGF0aF9maW5kZXIpOgorICAgICAgICBzZWxmLl9wYXRoID0gX05hbWVzcGFjZVBhdGgobmFtZSwgcGF0aCwgcGF0aF9maW5kZXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbW9kdWxlX3JlcHIoY2xzLCBtb2R1bGUpOgorICAgICAgICAiIiJSZXR1cm4gcmVwciBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBUaGUgaW1wb3J0IG1hY2hpbmVyeSBkb2VzIHRoZSBqb2IgaXRzZWxmLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAobmFtZXNwYWNlKT4nLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUoJycsICc8c3RyaW5nPicsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCisKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgIiIiVXNlIGRlZmF1bHQgc2VtYW50aWNzIGZvciBtb2R1bGUgY3JlYXRpb24uIiIiCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiTG9hZCBhIG5hbWVzcGFjZSBtb2R1bGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBleGVjX21vZHVsZSgpIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIGltcG9ydCBzeXN0ZW0gbmV2ZXIgY2FsbHMgdGhpcyBtZXRob2QuCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ25hbWVzcGFjZSBtb2R1bGUgbG9hZGVkIHdpdGggcGF0aCB7IXJ9Jywgc2VsZi5fcGF0aCkKKyAgICAgICAgcmV0dXJuIF9ib290c3RyYXAuX2xvYWRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpCisKKworIyBGaW5kZXJzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBQYXRoRmluZGVyOgorCisgICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3Igc3lzLnBhdGggYW5kIHBhY2thZ2UgX19wYXRoX18gYXR0cmlidXRlcy4iIiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBpbnZhbGlkYXRlX2NhY2hlcyhjbHMpOgorICAgICAgICAiIiJDYWxsIHRoZSBpbnZhbGlkYXRlX2NhY2hlcygpIG1ldGhvZCBvbiBhbGwgcGF0aCBlbnRyeSBmaW5kZXJzCisgICAgICAgIHN0b3JlZCBpbiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZXMgKHdoZXJlIGltcGxlbWVudGVkKS4iIiIKKyAgICAgICAgZm9yIGZpbmRlciBpbiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnaW52YWxpZGF0ZV9jYWNoZXMnKToKKyAgICAgICAgICAgICAgICBmaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXMoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wYXRoX2hvb2tzKGNscywgcGF0aCk6CisgICAgICAgICIiIlNlYXJjaCBzZXF1ZW5jZSBvZiBob29rcyBmb3IgYSBmaW5kZXIgZm9yICdwYXRoJy4KKworICAgICAgICBJZiAnaG9va3MnIGlzIGZhbHNlIHRoZW4gdXNlIHN5cy5wYXRoX2hvb2tzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBzeXMucGF0aF9ob29rcyBpcyBub3QgTm9uZSBhbmQgbm90IHN5cy5wYXRoX2hvb2tzOgorICAgICAgICAgICAgX3dhcm5pbmdzLndhcm4oJ3N5cy5wYXRoX2hvb2tzIGlzIGVtcHR5JywgSW1wb3J0V2FybmluZykKKyAgICAgICAgZm9yIGhvb2sgaW4gc3lzLnBhdGhfaG9va3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhvb2socGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGF0aF9pbXBvcnRlcl9jYWNoZShjbHMsIHBhdGgpOgorICAgICAgICAiIiJHZXQgdGhlIGZpbmRlciBmb3IgdGhlIHBhdGggZW50cnkgZnJvbSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKworICAgICAgICBJZiB0aGUgcGF0aCBlbnRyeSBpcyBub3QgaW4gdGhlIGNhY2hlLCBmaW5kIHRoZSBhcHByb3ByaWF0ZSBmaW5kZXIKKyAgICAgICAgYW5kIGNhY2hlIGl0LiBJZiBubyBmaW5kZXIgaXMgYXZhaWxhYmxlLCBzdG9yZSBOb25lLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBwYXRoID09ICcnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhdGggPSBfb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgICAgICAjIERvbid0IGNhY2hlIHRoZSBmYWlsdXJlIGFzIHRoZSBjd2QgY2FuIGVhc2lseSBjaGFuZ2UgdG8KKyAgICAgICAgICAgICAgICAjIGEgdmFsaWQgZGlyZWN0b3J5IGxhdGVyIG9uLgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbmRlciA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGZpbmRlciA9IGNscy5fcGF0aF9ob29rcyhwYXRoKQorICAgICAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVbcGF0aF0gPSBmaW5kZXIKKyAgICAgICAgcmV0dXJuIGZpbmRlcgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9sZWdhY3lfZ2V0X3NwZWMoY2xzLCBmdWxsbmFtZSwgZmluZGVyKToKKyAgICAgICAgIyBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaWYKKyAgICAgICAgIyB3ZSBlbmRlZCB1cCBnb2luZyB0aGF0IHJvdXRlLgorICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6CisgICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQorICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gX2Jvb3RzdHJhcC5zcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBsb2FkZXIpCisgICAgICAgIHNwZWMgPSBfYm9vdHN0cmFwLk1vZHVsZVNwZWMoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBwb3J0aW9ucworICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9nZXRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgdGhlIGxvYWRlciBvciBuYW1lc3BhY2VfcGF0aCBmb3IgdGhpcyBtb2R1bGUvcGFja2FnZSBuYW1lLiIiIgorICAgICAgICAjIElmIHRoaXMgZW5kcyB1cCBiZWluZyBhIG5hbWVzcGFjZSBwYWNrYWdlLCBuYW1lc3BhY2VfcGF0aCBpcworICAgICAgICAjICB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdpbGwgYmVjb21lIGl0cyBfX3BhdGhfXworICAgICAgICBuYW1lc3BhY2VfcGF0aCA9IFtdCisgICAgICAgIGZvciBlbnRyeSBpbiBwYXRoOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZW50cnksIChzdHIsIGJ5dGVzKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZpbmRlciA9IGNscy5fcGF0aF9pbXBvcnRlcl9jYWNoZShlbnRyeSkKKyAgICAgICAgICAgIGlmIGZpbmRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfc3BlYycpOgorICAgICAgICAgICAgICAgICAgICBzcGVjID0gZmluZGVyLmZpbmRfc3BlYyhmdWxsbmFtZSwgdGFyZ2V0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBjbHMuX2xlZ2FjeV9nZXRfc3BlYyhmdWxsbmFtZSwgZmluZGVyKQorICAgICAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBzcGVjLmxvYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgICAgICAgICBpZiBwb3J0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc3BlYyBtaXNzaW5nIGxvYWRlcicpCisgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHBvc3NpYmx5IHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAjICBSZW1lbWJlciB0aGVzZSBwYXRoIGVudHJpZXMgKGlmIGFueSkgZm9yIHdoZW4gd2UKKyAgICAgICAgICAgICAgICAjICBjcmVhdGUgYSBuYW1lc3BhY2UgcGFja2FnZSwgYW5kIGNvbnRpbnVlIGl0ZXJhdGluZworICAgICAgICAgICAgICAgICMgIG9uIHBhdGguCisgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3BhdGguZXh0ZW5kKHBvcnRpb25zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BlYyA9IF9ib290c3RyYXAuTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBuYW1lc3BhY2VfcGF0aAorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICIiImZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLiIiIgorICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBwYXRoID0gc3lzLnBhdGgKKyAgICAgICAgc3BlYyA9IGNscy5fZ2V0X3NwZWMoZnVsbG5hbWUsIHBhdGgsIHRhcmdldCkKKyAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgbmFtZXNwYWNlX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICBpZiBuYW1lc3BhY2VfcGF0aDoKKyAgICAgICAgICAgICAgICAjIFdlIGZvdW5kIGF0IGxlYXN0IG9uZSBuYW1lc3BhY2UgcGF0aC4gIFJldHVybiBhCisgICAgICAgICAgICAgICAgIyAgc3BlYyB3aGljaCBjYW4gY3JlYXRlIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KKyAgICAgICAgICAgICAgICBzcGVjLm9yaWdpbiA9ICduYW1lc3BhY2UnCisgICAgICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IF9OYW1lc3BhY2VQYXRoKGZ1bGxuYW1lLCBuYW1lc3BhY2VfcGF0aCwgY2xzLl9nZXRfc3BlYykKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJmaW5kIHRoZSBtb2R1bGUgb24gc3lzLnBhdGggb3IgJ3BhdGgnIGJhc2VkIG9uIHN5cy5wYXRoX2hvb2tzIGFuZAorICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGZpbmRfc3BlYygpIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBjbHMuZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKKworCitjbGFzcyBGaWxlRmluZGVyOgorCisgICAgIiIiRmlsZS1iYXNlZCBmaW5kZXIuCisKKyAgICBJbnRlcmFjdGlvbnMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gYXJlIGNhY2hlZCBmb3IgcGVyZm9ybWFuY2UsIGJlaW5nCisgICAgcmVmcmVzaGVkIHdoZW4gdGhlIGRpcmVjdG9yeSB0aGUgZmluZGVyIGlzIGhhbmRsaW5nIGhhcyBiZWVuIG1vZGlmaWVkLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgKmxvYWRlcl9kZXRhaWxzKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB3aXRoIHRoZSBwYXRoIHRvIHNlYXJjaCBvbiBhbmQgYSB2YXJpYWJsZSBudW1iZXIgb2YKKyAgICAgICAgMi10dXBsZXMgY29udGFpbmluZyB0aGUgbG9hZGVyIGFuZCB0aGUgZmlsZSBzdWZmaXhlcyB0aGUgbG9hZGVyCisgICAgICAgIHJlY29nbml6ZXMuIiIiCisgICAgICAgIGxvYWRlcnMgPSBbXQorICAgICAgICBmb3IgbG9hZGVyLCBzdWZmaXhlcyBpbiBsb2FkZXJfZGV0YWlsczoKKyAgICAgICAgICAgIGxvYWRlcnMuZXh0ZW5kKChzdWZmaXgsIGxvYWRlcikgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlcykKKyAgICAgICAgc2VsZi5fbG9hZGVycyA9IGxvYWRlcnMKKyAgICAgICAgIyBCYXNlIChkaXJlY3RvcnkpIHBhdGgKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aCBvciAnLicKKyAgICAgICAgc2VsZi5fcGF0aF9tdGltZSA9IC0xCisgICAgICAgIHNlbGYuX3BhdGhfY2FjaGUgPSBzZXQoKQorICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSBzZXQoKQorCisgICAgZGVmIGludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgorICAgICAgICAiIiJJbnZhbGlkYXRlIHRoZSBkaXJlY3RvcnkgbXRpbWUuIiIiCisgICAgICAgIHNlbGYuX3BhdGhfbXRpbWUgPSAtMQorCisgICAgZmluZF9tb2R1bGUgPSBfZmluZF9tb2R1bGVfc2hpbQorCisgICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCBvciB0aGUgbmFtZXNwYWNlCisgICAgICAgIHBhY2thZ2UgcG9ydGlvbnMuIFJldHVybnMgKGxvYWRlciwgbGlzdC1vZi1wb3J0aW9ucykuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gc2VsZi5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBbXQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIsIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgb3IgW10KKworICAgIGRlZiBfZ2V0X3NwZWMoc2VsZiwgbG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgcGF0aCwgc21zbCwgdGFyZ2V0KToKKyAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NsYXNzKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oZnVsbG5hbWUsIHBhdGgsIGxvYWRlcj1sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1zbXNsKQorCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAiIiJUcnkgdG8gZmluZCBhIHNwZWMgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiAgUmV0dXJucyB0aGUKKyAgICAgICAgbWF0Y2hpbmcgc3BlYywgb3IgTm9uZSBpZiBub3QgZm91bmQuIiIiCisgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCisgICAgICAgIHRhaWxfbW9kdWxlID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzJdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG10aW1lID0gX3BhdGhfc3RhdChzZWxmLnBhdGggb3IgX29zLmdldGN3ZCgpKS5zdF9tdGltZQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIG10aW1lID0gLTEKKyAgICAgICAgaWYgbXRpbWUgIT0gc2VsZi5fcGF0aF9tdGltZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGxfY2FjaGUoKQorICAgICAgICAgICAgc2VsZi5fcGF0aF9tdGltZSA9IG10aW1lCisgICAgICAgICMgdGFpbF9tb2R1bGUga2VlcHMgdGhlIG9yaWdpbmFsIGNhc2luZywgZm9yIF9fZmlsZV9fIGFuZCBmcmllbmRzCisgICAgICAgIGlmIF9yZWxheF9jYXNlKCk6CisgICAgICAgICAgICBjYWNoZSA9IHNlbGYuX3JlbGF4ZWRfcGF0aF9jYWNoZQorICAgICAgICAgICAgY2FjaGVfbW9kdWxlID0gdGFpbF9tb2R1bGUubG93ZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FjaGUgPSBzZWxmLl9wYXRoX2NhY2hlCisgICAgICAgICAgICBjYWNoZV9tb2R1bGUgPSB0YWlsX21vZHVsZQorICAgICAgICAjIENoZWNrIGlmIHRoZSBtb2R1bGUgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgKGFuZCB0aHVzIGEgcGFja2FnZSkuCisgICAgICAgIGlmIGNhY2hlX21vZHVsZSBpbiBjYWNoZToKKyAgICAgICAgICAgIGJhc2VfcGF0aCA9IF9wYXRoX2pvaW4oc2VsZi5wYXRoLCB0YWlsX21vZHVsZSkKKyAgICAgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlcl9jbGFzcyBpbiBzZWxmLl9sb2FkZXJzOgorICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgc3VmZml4CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihiYXNlX3BhdGgsIGluaXRfZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfc3BlYyhsb2FkZXJfY2xhc3MsIGZ1bGxuYW1lLCBmdWxsX3BhdGgsIFtiYXNlX3BhdGhdLCB0YXJnZXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSWYgYSBuYW1lc3BhY2UgcGFja2FnZSwgcmV0dXJuIHRoZSBwYXRoIGlmIHdlIGRvbid0CisgICAgICAgICAgICAgICAgIyAgZmluZCBhIG1vZHVsZSBpbiB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgICAgICAgICAgIGlzX25hbWVzcGFjZSA9IF9wYXRoX2lzZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgIyBDaGVjayBmb3IgYSBmaWxlIHcvIGEgcHJvcGVyIHN1ZmZpeCBleGlzdHMuCisgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlcl9jbGFzcyBpbiBzZWxmLl9sb2FkZXJzOgorICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlICsgc3VmZml4KQorICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgndHJ5aW5nIHt9Jy5mb3JtYXQoZnVsbF9wYXRoKSwgdmVyYm9zaXR5PTIpCisgICAgICAgICAgICBpZiBjYWNoZV9tb2R1bGUgKyBzdWZmaXggaW4gY2FjaGU6CisgICAgICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfc3BlYyhsb2FkZXJfY2xhc3MsIGZ1bGxuYW1lLCBmdWxsX3BhdGgsIE5vbmUsIHRhcmdldCkKKyAgICAgICAgaWYgaXNfbmFtZXNwYWNlOgorICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgncG9zc2libGUgbmFtZXNwYWNlIGZvciB7fScuZm9ybWF0KGJhc2VfcGF0aCkpCisgICAgICAgICAgICBzcGVjID0gX2Jvb3RzdHJhcC5Nb2R1bGVTcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFtiYXNlX3BhdGhdCisgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9maWxsX2NhY2hlKHNlbGYpOgorICAgICAgICAiIiJGaWxsIHRoZSBjYWNoZSBvZiBwb3RlbnRpYWwgbW9kdWxlcyBhbmQgcGFja2FnZXMgZm9yIHRoaXMgZGlyZWN0b3J5LiIiIgorICAgICAgICBwYXRoID0gc2VsZi5wYXRoCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRlbnRzID0gX29zLmxpc3RkaXIocGF0aCBvciBfb3MuZ2V0Y3dkKCkpCisgICAgICAgIGV4Y2VwdCAoRmlsZU5vdEZvdW5kRXJyb3IsIFBlcm1pc3Npb25FcnJvciwgTm90QURpcmVjdG9yeUVycm9yKToKKyAgICAgICAgICAgICMgRGlyZWN0b3J5IGhhcyBlaXRoZXIgYmVlbiByZW1vdmVkLCB0dXJuZWQgaW50byBhIGZpbGUsIG9yIG1hZGUKKyAgICAgICAgICAgICMgdW5yZWFkYWJsZS4KKyAgICAgICAgICAgIGNvbnRlbnRzID0gW10KKyAgICAgICAgIyBXZSBzdG9yZSB0d28gY2FjaGVkIHZlcnNpb25zLCB0byBoYW5kbGUgcnVudGltZSBjaGFuZ2VzIG9mIHRoZQorICAgICAgICAjIFBZVEhPTkNBU0VPSyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHNlbGYuX3BhdGhfY2FjaGUgPSBzZXQoY29udGVudHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdpbmRvd3MgdXNlcnMgY2FuIGltcG9ydCBtb2R1bGVzIHdpdGggY2FzZS1pbnNlbnNpdGl2ZSBmaWxlCisgICAgICAgICAgICAjIHN1ZmZpeGVzIChmb3IgbGVnYWN5IHJlYXNvbnMpLiBNYWtlIHRoZSBzdWZmaXggbG93ZXJjYXNlIGhlcmUKKyAgICAgICAgICAgICMgc28gaXQncyBkb25lIG9uY2UgaW5zdGVhZCBvZiBmb3IgZXZlcnkgaW1wb3J0LiBUaGlzIGlzIHNhZmUgYXMKKyAgICAgICAgICAgICMgdGhlIHNwZWNpZmllZCBzdWZmaXhlcyB0byBjaGVjayBhZ2FpbnN0IGFyZSBhbHdheXMgc3BlY2lmaWVkIGluIGEKKyAgICAgICAgICAgICMgY2FzZS1zZW5zaXRpdmUgbWFubmVyLgorICAgICAgICAgICAgbG93ZXJfc3VmZml4X2NvbnRlbnRzID0gc2V0KCkKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGNvbnRlbnRzOgorICAgICAgICAgICAgICAgIG5hbWUsIGRvdCwgc3VmZml4ID0gaXRlbS5wYXJ0aXRpb24oJy4nKQorICAgICAgICAgICAgICAgIGlmIGRvdDoKKyAgICAgICAgICAgICAgICAgICAgbmV3X25hbWUgPSAne30ue30nLmZvcm1hdChuYW1lLCBzdWZmaXgubG93ZXIoKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfbmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBsb3dlcl9zdWZmaXhfY29udGVudHMuYWRkKG5ld19uYW1lKQorICAgICAgICAgICAgc2VsZi5fcGF0aF9jYWNoZSA9IGxvd2VyX3N1ZmZpeF9jb250ZW50cworICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVMpOgorICAgICAgICAgICAgc2VsZi5fcmVsYXhlZF9wYXRoX2NhY2hlID0ge2ZuLmxvd2VyKCkgZm9yIGZuIGluIGNvbnRlbnRzfQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhdGhfaG9vayhjbHMsICpsb2FkZXJfZGV0YWlscyk6CisgICAgICAgICIiIkEgY2xhc3MgbWV0aG9kIHdoaWNoIHJldHVybnMgYSBjbG9zdXJlIHRvIHVzZSBvbiBzeXMucGF0aF9ob29rCisgICAgICAgIHdoaWNoIHdpbGwgcmV0dXJuIGFuIGluc3RhbmNlIHVzaW5nIHRoZSBzcGVjaWZpZWQgbG9hZGVycyBhbmQgdGhlIHBhdGgKKyAgICAgICAgY2FsbGVkIG9uIHRoZSBjbG9zdXJlLgorCisgICAgICAgIElmIHRoZSBwYXRoIGNhbGxlZCBvbiB0aGUgY2xvc3VyZSBpcyBub3QgYSBkaXJlY3RvcnksIEltcG9ydEVycm9yIGlzCisgICAgICAgIHJhaXNlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgZGVmIHBhdGhfaG9va19mb3JfRmlsZUZpbmRlcihwYXRoKToKKyAgICAgICAgICAgICIiIlBhdGggaG9vayBmb3IgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLiIiIgorICAgICAgICAgICAgaWYgbm90IF9wYXRoX2lzZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdvbmx5IGRpcmVjdG9yaWVzIGFyZSBzdXBwb3J0ZWQnLCBwYXRoPXBhdGgpCisgICAgICAgICAgICByZXR1cm4gY2xzKHBhdGgsICpsb2FkZXJfZGV0YWlscykKKworICAgICAgICByZXR1cm4gcGF0aF9ob29rX2Zvcl9GaWxlRmluZGVyCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnRmlsZUZpbmRlcih7IXJ9KScuZm9ybWF0KHNlbGYucGF0aCkKKworCisjIEltcG9ydCBzZXR1cCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIF9maXhfdXBfbW9kdWxlKG5zLCBuYW1lLCBwYXRobmFtZSwgY3BhdGhuYW1lPU5vbmUpOgorICAgICMgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KCkuCisgICAgbG9hZGVyID0gbnMuZ2V0KCdfX2xvYWRlcl9fJykKKyAgICBzcGVjID0gbnMuZ2V0KCdfX3NwZWNfXycpCisgICAgaWYgbm90IGxvYWRlcjoKKyAgICAgICAgaWYgc3BlYzoKKyAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCisgICAgICAgIGVsaWYgcGF0aG5hbWUgPT0gY3BhdGhuYW1lOgorICAgICAgICAgICAgbG9hZGVyID0gU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2FkZXIgPSBTb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIGlmIG5vdCBzcGVjOgorICAgICAgICBzcGVjID0gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgdHJ5OgorICAgICAgICBuc1snX19zcGVjX18nXSA9IHNwZWMKKyAgICAgICAgbnNbJ19fbG9hZGVyX18nXSA9IGxvYWRlcgorICAgICAgICBuc1snX19maWxlX18nXSA9IHBhdGhuYW1lCisgICAgICAgIG5zWydfX2NhY2hlZF9fJ10gPSBjcGF0aG5hbWUKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAjIE5vdCBpbXBvcnRhbnQgZW5vdWdoIHRvIHJlcG9ydC4KKyAgICAgICAgcGFzcworCisKK2RlZiBfZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKToKKyAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBmaWxlLWJhc2VkIG1vZHVsZSBsb2FkZXJzLgorCisgICAgRWFjaCBpdGVtIGlzIGEgdHVwbGUgKGxvYWRlciwgc3VmZml4ZXMpLgorICAgICIiIgorICAgIGV4dGVuc2lvbnMgPSBFeHRlbnNpb25GaWxlTG9hZGVyLCBfaW1wLmV4dGVuc2lvbl9zdWZmaXhlcygpCisgICAgc291cmNlID0gU291cmNlRmlsZUxvYWRlciwgU09VUkNFX1NVRkZJWEVTCisgICAgYnl0ZWNvZGUgPSBTb3VyY2VsZXNzRmlsZUxvYWRlciwgQllURUNPREVfU1VGRklYRVMKKyAgICByZXR1cm4gW2V4dGVuc2lvbnMsIHNvdXJjZSwgYnl0ZWNvZGVdCisKKworZGVmIF9zZXR1cChfYm9vdHN0cmFwX21vZHVsZSk6CisgICAgIiIiU2V0dXAgdGhlIHBhdGgtYmFzZWQgaW1wb3J0ZXJzIGZvciBpbXBvcnRsaWIgYnkgaW1wb3J0aW5nIG5lZWRlZAorICAgIGJ1aWx0LWluIG1vZHVsZXMgYW5kIGluamVjdGluZyB0aGVtIGludG8gdGhlIGdsb2JhbCBuYW1lc3BhY2UuCisKKyAgICBPdGhlciBjb21wb25lbnRzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUgY29yZSBib290c3RyYXAgbW9kdWxlLgorCisgICAgIiIiCisgICAgZ2xvYmFsIHN5cywgX2ltcCwgX2Jvb3RzdHJhcAorICAgIF9ib290c3RyYXAgPSBfYm9vdHN0cmFwX21vZHVsZQorICAgIHN5cyA9IF9ib290c3RyYXAuc3lzCisgICAgX2ltcCA9IF9ib290c3RyYXAuX2ltcAorCisgICAgIyBEaXJlY3RseSBsb2FkIGJ1aWx0LWluIG1vZHVsZXMgbmVlZGVkIGR1cmluZyBib290c3RyYXAuCisgICAgc2VsZl9tb2R1bGUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KKyAgICBmb3IgYnVpbHRpbl9uYW1lIGluICgnX2lvJywgJ193YXJuaW5ncycsICdidWlsdGlucycsICdtYXJzaGFsJyk6CisgICAgICAgIGlmIGJ1aWx0aW5fbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICBidWlsdGluX21vZHVsZSA9IF9ib290c3RyYXAuX2J1aWx0aW5fZnJvbV9uYW1lKGJ1aWx0aW5fbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJ1aWx0aW5fbW9kdWxlID0gc3lzLm1vZHVsZXNbYnVpbHRpbl9uYW1lXQorICAgICAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCBidWlsdGluX25hbWUsIGJ1aWx0aW5fbW9kdWxlKQorCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSBvcyBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KKyAgICBvc19kZXRhaWxzID0gKCdwb3NpeCcsIFsnLyddKSwgKCdudCcsIFsnXFwnLCAnLyddKQorICAgIGZvciBidWlsdGluX29zLCBwYXRoX3NlcGFyYXRvcnMgaW4gb3NfZGV0YWlsczoKKyAgICAgICAgIyBBc3N1bXB0aW9uIG1hZGUgaW4gX3BhdGhfam9pbigpCisgICAgICAgIGFzc2VydCBhbGwobGVuKHNlcCkgPT0gMSBmb3Igc2VwIGluIHBhdGhfc2VwYXJhdG9ycykKKyAgICAgICAgcGF0aF9zZXAgPSBwYXRoX3NlcGFyYXRvcnNbMF0KKyAgICAgICAgaWYgYnVpbHRpbl9vcyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIG9zX21vZHVsZSA9IHN5cy5tb2R1bGVzW2J1aWx0aW5fb3NdCisgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zX21vZHVsZSA9IF9ib290c3RyYXAuX2J1aWx0aW5fZnJvbV9uYW1lKGJ1aWx0aW5fb3MpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdpbXBvcnRsaWIgcmVxdWlyZXMgcG9zaXggb3IgbnQnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfb3MnLCBvc19tb2R1bGUpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsICcnLmpvaW4ocGF0aF9zZXBhcmF0b3JzKSkKKworICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3RocmVhZCBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KKyAgICB0cnk6CisgICAgICAgIHRocmVhZF9tb2R1bGUgPSBfYm9vdHN0cmFwLl9idWlsdGluX2Zyb21fbmFtZSgnX3RocmVhZCcpCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAjIFB5dGhvbiB3YXMgYnVpbHQgd2l0aG91dCB0aHJlYWRzCisgICAgICAgIHRocmVhZF9tb2R1bGUgPSBOb25lCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ190aHJlYWQnLCB0aHJlYWRfbW9kdWxlKQorCisgICAgIyBEaXJlY3RseSBsb2FkIHRoZSBfd2Vha3JlZiBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KKyAgICB3ZWFrcmVmX21vZHVsZSA9IF9ib290c3RyYXAuX2J1aWx0aW5fZnJvbV9uYW1lKCdfd2Vha3JlZicpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193ZWFrcmVmJywgd2Vha3JlZl9tb2R1bGUpCisKKyAgICAjIERpcmVjdGx5IGxvYWQgdGhlIHdpbnJlZyBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KKyAgICBpZiBidWlsdGluX29zID09ICdudCc6CisgICAgICAgIHdpbnJlZ19tb2R1bGUgPSBfYm9vdHN0cmFwLl9idWlsdGluX2Zyb21fbmFtZSgnd2lucmVnJykKKyAgICAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193aW5yZWcnLCB3aW5yZWdfbW9kdWxlKQorCisgICAgIyBDb25zdGFudHMKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3JlbGF4X2Nhc2UnLCBfbWFrZV9yZWxheF9jYXNlKCkpCisgICAgRVhURU5TSU9OX1NVRkZJWEVTLmV4dGVuZChfaW1wLmV4dGVuc2lvbl9zdWZmaXhlcygpKQorICAgIGlmIGJ1aWx0aW5fb3MgPT0gJ250JzoKKyAgICAgICAgU09VUkNFX1NVRkZJWEVTLmFwcGVuZCgnLnB5dycpCisgICAgICAgIGlmICdfZC5weWQnIGluIEVYVEVOU0lPTl9TVUZGSVhFUzoKKyAgICAgICAgICAgIFdpbmRvd3NSZWdpc3RyeUZpbmRlci5ERUJVR19CVUlMRCA9IFRydWUKKworCitkZWYgX2luc3RhbGwoX2Jvb3RzdHJhcF9tb2R1bGUpOgorICAgICIiIkluc3RhbGwgdGhlIHBhdGgtYmFzZWQgaW1wb3J0IGNvbXBvbmVudHMuIiIiCisgICAgX3NldHVwKF9ib290c3RyYXBfbW9kdWxlKQorICAgIHN1cHBvcnRlZF9sb2FkZXJzID0gX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkKKyAgICBzeXMucGF0aF9ob29rcy5leHRlbmQoW0ZpbGVGaW5kZXIucGF0aF9ob29rKCpzdXBwb3J0ZWRfbG9hZGVycyldKQorICAgIGlmIF9vcy5fX25hbWVfXyA9PSAnbnQnOgorICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChXaW5kb3dzUmVnaXN0cnlGaW5kZXIpCisgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoUGF0aEZpbmRlcikKKworICAgICMgWFhYIFdlIGV4cG9zZSBhIGNvdXBsZSBvZiBjbGFzc2VzIGluIF9ib290c3RyYXAgZm9yIHRoZSBzYWtlIG9mCisgICAgIyBhIHNldHVwdG9vbHMgYnVnIChodHRwczovL2JpdGJ1Y2tldC5vcmcvcHlwYS9zZXR1cHRvb2xzL2lzc3VlLzM3OCkuCisgICAgX2Jvb3RzdHJhcF9tb2R1bGUuRmlsZUZpbmRlciA9IEZpbGVGaW5kZXIKKyAgICBfYm9vdHN0cmFwX21vZHVsZS5Tb3VyY2VGaWxlTG9hZGVyID0gU291cmNlRmlsZUxvYWRlcgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9hYmMucHkgYi9MaWIvaW1wb3J0bGliL2FiYy5weQppbmRleCA1NThhYmQzLi5kYWZmNjgxIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL2FiYy5weQorKysgYi9MaWIvaW1wb3J0bGliL2FiYy5weQpAQCAtMSw1ICsxLDYgQEAKICIiIkFic3RyYWN0IGJhc2UgY2xhc3NlcyByZWxhdGVkIHRvIGltcG9ydC4iIiIKIGZyb20gLiBpbXBvcnQgX2Jvb3RzdHJhcAorZnJvbSAuIGltcG9ydCBfYm9vdHN0cmFwX2V4dGVybmFsCiBmcm9tIC4gaW1wb3J0IG1hY2hpbmVyeQogdHJ5OgogICAgIGltcG9ydCBfZnJvemVuX2ltcG9ydGxpYgpAQCAtNyw2ICs4LDEwIEBACiAgICAgaWYgZXhjLm5hbWUgIT0gJ19mcm96ZW5faW1wb3J0bGliJzoKICAgICAgICAgcmFpc2UKICAgICBfZnJvemVuX2ltcG9ydGxpYiA9IE5vbmUKK3RyeToKKyAgICBpbXBvcnQgX2Zyb3plbl9pbXBvcnRsaWJfZXh0ZXJuYWwKK2V4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CisgICAgX2Zyb3plbl9pbXBvcnRsaWJfZXh0ZXJuYWwgPSBfYm9vdHN0cmFwX2V4dGVybmFsCiBpbXBvcnQgYWJjCiAKIApAQCAtMTQsNyArMTksMTAgQEAKICAgICBmb3IgY2xzIGluIGNsYXNzZXM6CiAgICAgICAgIGFic3RyYWN0X2Nscy5yZWdpc3RlcihjbHMpCiAgICAgICAgIGlmIF9mcm96ZW5faW1wb3J0bGliIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZnJvemVuX2NscyA9IGdldGF0dHIoX2Zyb3plbl9pbXBvcnRsaWIsIGNscy5fX25hbWVfXykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmcm96ZW5fY2xzID0gZ2V0YXR0cihfZnJvemVuX2ltcG9ydGxpYiwgY2xzLl9fbmFtZV9fKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIGZyb3plbl9jbHMgPSBnZXRhdHRyKF9mcm96ZW5faW1wb3J0bGliX2V4dGVybmFsLCBjbHMuX19uYW1lX18pCiAgICAgICAgICAgICBhYnN0cmFjdF9jbHMucmVnaXN0ZXIoZnJvemVuX2NscykKIAogCkBAIC0xMDIsNyArMTEwLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBOb25lLCBbXQogCi0gICAgZmluZF9tb2R1bGUgPSBfYm9vdHN0cmFwLl9maW5kX21vZHVsZV9zaGltCisgICAgZmluZF9tb2R1bGUgPSBfYm9vdHN0cmFwX2V4dGVybmFsLl9maW5kX21vZHVsZV9zaGltCiAKICAgICBkZWYgaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CiAgICAgICAgICIiIkFuIG9wdGlvbmFsIG1ldGhvZCBmb3IgY2xlYXJpbmcgdGhlIGZpbmRlcidzIGNhY2hlLCBpZiBhbnkuCkBAIC0xMjIsMTEgKzEzMCw4IEBACiAgICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCByYWlzZSBJbXBvcnRFcnJvciBpZiBhbnl0aGluZyBwcmV2ZW50cyBpdAogICAgICAgICBmcm9tIGNyZWF0aW5nIGEgbmV3IG1vZHVsZS4gIEl0IG1heSByZXR1cm4gTm9uZSB0byBpbmRpY2F0ZQogICAgICAgICB0aGF0IHRoZSBzcGVjIHNob3VsZCBjcmVhdGUgdGhlIG5ldyBtb2R1bGUuCi0KLSAgICAgICAgY3JlYXRlX21vZHVsZSgpIGlzIG9wdGlvbmFsLgotCiAgICAgICAgICIiIgotICAgICAgICAjIEJ5IGRlZmF1bHQsIGRlZmVyIHRvIF9TcGVjTWV0aG9kcy5jcmVhdGUoKSBmb3IgdGhlIG5ldyBtb2R1bGUuCisgICAgICAgICMgQnkgZGVmYXVsdCwgZGVmZXIgdG8gZGVmYXVsdCBzZW1hbnRpY3MgZm9yIHRoZSBuZXcgbW9kdWxlLgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgIyBXZSBkb24ndCBkZWZpbmUgZXhlY19tb2R1bGUoKSBoZXJlIHNpbmNlIHRoYXQgd291bGQgYnJlYWsKQEAgLTIxNywxNSArMjIyLDE2IEBACiAgICAgICAgICIiIgogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgogCi0gICAgZGVmIHNvdXJjZV90b19jb2RlKHNlbGYsIGRhdGEsIHBhdGg9JzxzdHJpbmc+Jyk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzb3VyY2VfdG9fY29kZShkYXRhLCBwYXRoPSc8c3RyaW5nPicpOgogICAgICAgICAiIiJDb21waWxlICdkYXRhJyBpbnRvIGEgY29kZSBvYmplY3QuCiAKICAgICAgICAgVGhlICdkYXRhJyBhcmd1bWVudCBjYW4gYmUgYW55dGhpbmcgdGhhdCBjb21waWxlKCkgY2FuIGhhbmRsZS4gVGhlJ3BhdGgnCiAgICAgICAgIGFyZ3VtZW50IHNob3VsZCBiZSB3aGVyZSB0aGUgZGF0YSB3YXMgcmV0cmlldmVkICh3aGVuIGFwcGxpY2FibGUpLiIiIgogICAgICAgICByZXR1cm4gY29tcGlsZShkYXRhLCBwYXRoLCAnZXhlYycsIGRvbnRfaW5oZXJpdD1UcnVlKQogCi0gICAgZXhlY19tb2R1bGUgPSBfYm9vdHN0cmFwLl9Mb2FkZXJCYXNpY3MuZXhlY19tb2R1bGUKLSAgICBsb2FkX21vZHVsZSA9IF9ib290c3RyYXAuX0xvYWRlckJhc2ljcy5sb2FkX21vZHVsZQorICAgIGV4ZWNfbW9kdWxlID0gX2Jvb3RzdHJhcF9leHRlcm5hbC5fTG9hZGVyQmFzaWNzLmV4ZWNfbW9kdWxlCisgICAgbG9hZF9tb2R1bGUgPSBfYm9vdHN0cmFwX2V4dGVybmFsLl9Mb2FkZXJCYXNpY3MubG9hZF9tb2R1bGUKIAogX3JlZ2lzdGVyKEluc3BlY3RMb2FkZXIsIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcikKIApAQCAtMjY3LDcgKzI3Myw3IEBACiBfcmVnaXN0ZXIoRXhlY3V0aW9uTG9hZGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogCi1jbGFzcyBGaWxlTG9hZGVyKF9ib290c3RyYXAuRmlsZUxvYWRlciwgUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlcik6CitjbGFzcyBGaWxlTG9hZGVyKF9ib290c3RyYXBfZXh0ZXJuYWwuRmlsZUxvYWRlciwgUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlcik6CiAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIHBhcnRpYWxseSBpbXBsZW1lbnRpbmcgdGhlIFJlc291cmNlTG9hZGVyIGFuZAogICAgIEV4ZWN1dGlvbkxvYWRlciBBQkNzLiIiIgpAQCAtMjc2LDcgKzI4Miw3IEBACiAgICAgICAgICAgICBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIpCiAKIAotY2xhc3MgU291cmNlTG9hZGVyKF9ib290c3RyYXAuU291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyKToKK2NsYXNzIFNvdXJjZUxvYWRlcihfYm9vdHN0cmFwX2V4dGVybmFsLlNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlcik6CiAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBsb2FkaW5nIHNvdXJjZSBjb2RlIChhbmQgb3B0aW9uYWxseSBhbnkKICAgICBjb3JyZXNwb25kaW5nIGJ5dGVjb2RlKS4KZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5IGIvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkKaW5kZXggMmUxYjJkNy4uMWIyYjVjOSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkKKysrIGIvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkKQEAgLTIsMTggKzIsMTggQEAKIAogaW1wb3J0IF9pbXAKIAotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgKFNPVVJDRV9TVUZGSVhFUywgREVCVUdfQllURUNPREVfU1VGRklYRVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywKLSAgICAgICAgICAgICAgICAgICAgICAgICBFWFRFTlNJT05fU1VGRklYRVMpCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBNb2R1bGVTcGVjCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBCdWlsdGluSW1wb3J0ZXIKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IEZyb3plbkltcG9ydGVyCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBXaW5kb3dzUmVnaXN0cnlGaW5kZXIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IFBhdGhGaW5kZXIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IEZpbGVGaW5kZXIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IFNvdXJjZUZpbGVMb2FkZXIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IFNvdXJjZWxlc3NGaWxlTG9hZGVyCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBFeHRlbnNpb25GaWxlTG9hZGVyCitmcm9tIC5fYm9vdHN0cmFwX2V4dGVybmFsIGltcG9ydCAoU09VUkNFX1NVRkZJWEVTLCBERUJVR19CWVRFQ09ERV9TVUZGSVhFUywKKyAgICAgICAgICAgICAgICAgICAgIE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUywgQllURUNPREVfU1VGRklYRVMsCisgICAgICAgICAgICAgICAgICAgICBFWFRFTlNJT05fU1VGRklYRVMpCitmcm9tIC5fYm9vdHN0cmFwX2V4dGVybmFsIGltcG9ydCBXaW5kb3dzUmVnaXN0cnlGaW5kZXIKK2Zyb20gLl9ib290c3RyYXBfZXh0ZXJuYWwgaW1wb3J0IFBhdGhGaW5kZXIKK2Zyb20gLl9ib290c3RyYXBfZXh0ZXJuYWwgaW1wb3J0IEZpbGVGaW5kZXIKK2Zyb20gLl9ib290c3RyYXBfZXh0ZXJuYWwgaW1wb3J0IFNvdXJjZUZpbGVMb2FkZXIKK2Zyb20gLl9ib290c3RyYXBfZXh0ZXJuYWwgaW1wb3J0IFNvdXJjZWxlc3NGaWxlTG9hZGVyCitmcm9tIC5fYm9vdHN0cmFwX2V4dGVybmFsIGltcG9ydCBFeHRlbnNpb25GaWxlTG9hZGVyCiAKIAogZGVmIGFsbF9zdWZmaXhlcygpOgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi91dGlsLnB5IGIvTGliL2ltcG9ydGxpYi91dGlsLnB5CmluZGV4IDZkNzNiMWQuLmUxZmEwN2EgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdXRpbC5weQorKysgYi9MaWIvaW1wb3J0bGliL3V0aWwucHkKQEAgLTEsMTcgKzEsMTkgQEAKICIiIlV0aWxpdHkgY29kZSBmb3IgY29uc3RydWN0aW5nIGltcG9ydGVycywgZXRjLiIiIgotCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBNQUdJQ19OVU1CRVIKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBkZWNvZGVfc291cmNlCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc3BlY19mcm9tX2xvYWRlcgotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24KK2Zyb20gLiBpbXBvcnQgYWJjCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBtb2R1bGVfZnJvbV9zcGVjCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBfcmVzb2x2ZV9uYW1lCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzcGVjX2Zyb21fbG9hZGVyCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBfZmluZF9zcGVjCitmcm9tIC5fYm9vdHN0cmFwX2V4dGVybmFsIGltcG9ydCBNQUdJQ19OVU1CRVIKK2Zyb20gLl9ib290c3RyYXBfZXh0ZXJuYWwgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCitmcm9tIC5fYm9vdHN0cmFwX2V4dGVybmFsIGltcG9ydCBkZWNvZGVfc291cmNlCitmcm9tIC5fYm9vdHN0cmFwX2V4dGVybmFsIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQorZnJvbSAuX2Jvb3RzdHJhcF9leHRlcm5hbCBpbXBvcnQgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24KIAogZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgd2FybmluZ3MKIAogCkBAIC01NCw3ICs1Niw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKSBmcm9tIE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBOb25lJy5mb3JtYXQobmFtZSkpCkBAIC05NCw3ICs5Niw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKSBmcm9tIE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBOb25lJy5mb3JtYXQobmFtZSkpCkBAIC0yMDAsMyArMjAyLDg5IEBACiAgICAgICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG1vZHVsZSwgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgcmV0dXJuIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIKKworCitjbGFzcyBfTW9kdWxlKHR5cGVzLk1vZHVsZVR5cGUpOgorCisgICAgIiIiQSBzdWJjbGFzcyBvZiB0aGUgbW9kdWxlIHR5cGUgdG8gYWxsb3cgX19jbGFzc19fIG1hbmlwdWxhdGlvbi4iIiIKKworCitjbGFzcyBfTGF6eU1vZHVsZSh0eXBlcy5Nb2R1bGVUeXBlKToKKworICAgICIiIkEgc3ViY2xhc3Mgb2YgdGhlIG1vZHVsZSB0eXBlIHdoaWNoIHRyaWdnZXJzIGxvYWRpbmcgdXBvbiBhdHRyaWJ1dGUgYWNjZXNzLiIiIgorCisgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgYXR0cik6CisgICAgICAgICIiIlRyaWdnZXIgdGhlIGxvYWQgb2YgdGhlIG1vZHVsZSBhbmQgcmV0dXJuIHRoZSBhdHRyaWJ1dGUuIiIiCisgICAgICAgICMgQWxsIG1vZHVsZSBtZXRhZGF0YSBtdXN0IGJlIGdhcm5lcmVkIGZyb20gX19zcGVjX18gaW4gb3JkZXIgdG8gYXZvaWQKKyAgICAgICAgIyB1c2luZyBtdXRhdGVkIHZhbHVlcy4KKyAgICAgICAgIyBTdG9wIHRyaWdnZXJpbmcgdGhpcyBtZXRob2QuCisgICAgICAgIHNlbGYuX19jbGFzc19fID0gX01vZHVsZQorICAgICAgICAjIEdldCB0aGUgb3JpZ2luYWwgbmFtZSB0byBtYWtlIHN1cmUgbm8gb2JqZWN0IHN1YnN0aXR1dGlvbiBvY2N1cnJlZAorICAgICAgICAjIGluIHN5cy5tb2R1bGVzLgorICAgICAgICBvcmlnaW5hbF9uYW1lID0gc2VsZi5fX3NwZWNfXy5uYW1lCisgICAgICAgICMgRmlndXJlIG91dCBleGFjdGx5IHdoYXQgYXR0cmlidXRlcyB3ZXJlIG11dGF0ZWQgYmV0d2VlbiB0aGUgY3JlYXRpb24KKyAgICAgICAgIyBvZiB0aGUgbW9kdWxlIGFuZCBub3cuCisgICAgICAgIGF0dHJzX3RoZW4gPSBzZWxmLl9fc3BlY19fLmxvYWRlcl9zdGF0ZQorICAgICAgICBhdHRyc19ub3cgPSBzZWxmLl9fZGljdF9fCisgICAgICAgIGF0dHJzX3VwZGF0ZWQgPSB7fQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBhdHRyc19ub3cuaXRlbXMoKToKKyAgICAgICAgICAgICMgQ29kZSB0aGF0IHNldCB0aGUgYXR0cmlidXRlIG1heSBoYXZlIGtlcHQgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICAgICAjIGFzc2lnbmVkIG9iamVjdCwgbWFraW5nIGlkZW50aXR5IG1vcmUgaW1wb3J0YW50IHRoYW4gZXF1YWxpdHkuCisgICAgICAgICAgICBpZiBrZXkgbm90IGluIGF0dHJzX3RoZW46CisgICAgICAgICAgICAgICAgYXR0cnNfdXBkYXRlZFtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGVsaWYgaWQoYXR0cnNfbm93W2tleV0pICE9IGlkKGF0dHJzX3RoZW5ba2V5XSk6CisgICAgICAgICAgICAgICAgYXR0cnNfdXBkYXRlZFtrZXldID0gdmFsdWUKKyAgICAgICAgc2VsZi5fX3NwZWNfXy5sb2FkZXIuZXhlY19tb2R1bGUoc2VsZikKKyAgICAgICAgIyBJZiBleGVjX21vZHVsZSgpIHdhcyB1c2VkIGRpcmVjdGx5IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGUgbW9kdWxlCisgICAgICAgICMgb2JqZWN0IHdhcyBwdXQgaW50byBzeXMubW9kdWxlcy4KKyAgICAgICAgaWYgb3JpZ2luYWxfbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIGlmIGlkKHNlbGYpICE9IGlkKHN5cy5tb2R1bGVzW29yaWdpbmFsX25hbWVdKToKKyAgICAgICAgICAgICAgICBtc2cgPSAoJ21vZHVsZSBvYmplY3QgZm9yIHshcn0gc3Vic3RpdHV0ZWQgaW4gc3lzLm1vZHVsZXMgJworICAgICAgICAgICAgICAgICAgICAgICAnZHVyaW5nIGEgbGF6eSBsb2FkJykKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZy5mb3JtYXQob3JpZ2luYWxfbmFtZSkpCisgICAgICAgICMgVXBkYXRlIGFmdGVyIGxvYWRpbmcgc2luY2UgdGhhdCdzIHdoYXQgd291bGQgaGFwcGVuIGluIGFuIGVhZ2VyCisgICAgICAgICMgbG9hZGluZyBzaXR1YXRpb24uCisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGF0dHJzX3VwZGF0ZWQpCisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIGF0dHIpCisKKyAgICBkZWYgX19kZWxhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICIiIlRyaWdnZXIgdGhlIGxvYWQgYW5kIHRoZW4gcGVyZm9ybSB0aGUgZGVsZXRpb24uIiIiCisgICAgICAgICMgVG8gdHJpZ2dlciB0aGUgbG9hZCBhbmQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBhdHRyaWJ1dGUKKyAgICAgICAgIyBkb2Vzbid0IGV4aXN0LgorICAgICAgICBzZWxmLl9fZ2V0YXR0cmlidXRlX18oYXR0cikKKyAgICAgICAgZGVsYXR0cihzZWxmLCBhdHRyKQorCisKK2NsYXNzIExhenlMb2FkZXIoYWJjLkxvYWRlcik6CisKKyAgICAiIiJBIGxvYWRlciB0aGF0IGNyZWF0ZXMgYSBtb2R1bGUgd2hpY2ggZGVmZXJzIGxvYWRpbmcgdW50aWwgYXR0cmlidXRlIGFjY2Vzcy4iIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX19jaGVja19lYWdlcl9sb2FkZXIobG9hZGVyKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIobG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbG9hZGVyIG11c3QgZGVmaW5lIGV4ZWNfbW9kdWxlKCknKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZhY3RvcnkoY2xzLCBsb2FkZXIpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBjYWxsYWJsZSB3aGljaCByZXR1cm5zIHRoZSBlYWdlciBsb2FkZXIgbWFkZSBsYXp5LiIiIgorICAgICAgICBjbHMuX19jaGVja19lYWdlcl9sb2FkZXIobG9hZGVyKQorICAgICAgICByZXR1cm4gbGFtYmRhICphcmdzLCAqKmt3YXJnczogY2xzKGxvYWRlcigqYXJncywgKiprd2FyZ3MpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvYWRlcik6CisgICAgICAgIHNlbGYuX19jaGVja19lYWdlcl9sb2FkZXIobG9hZGVyKQorICAgICAgICBzZWxmLmxvYWRlciA9IGxvYWRlcgorCisgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgICIiIkNyZWF0ZSBhIG1vZHVsZSB3aGljaCBjYW4gaGF2ZSBpdHMgX19jbGFzc19fIG1hbmlwdWxhdGVkLiIiIgorICAgICAgICByZXR1cm4gX01vZHVsZShzcGVjLm5hbWUpCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiTWFrZSB0aGUgbW9kdWxlIGxvYWQgbGF6aWx5LiIiIgorICAgICAgICBtb2R1bGUuX19zcGVjX18ubG9hZGVyID0gc2VsZi5sb2FkZXIKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmLmxvYWRlcgorICAgICAgICAjIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgZGVlcC1jb3B5aW5nIGFzIHRyeWluZyB0byBzZXQgYW4gYXR0cmlidXRlCisgICAgICAgICMgb24gYW4gb2JqZWN0IHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBsb2FkLAorICAgICAgICAjIGUuZy4gYGBtb2R1bGUuX19zcGVjX18ubG9hZGVyID0gTm9uZWBgIHdvdWxkIHRyaWdnZXIgYSBsb2FkIGZyb20KKyAgICAgICAgIyB0cnlpbmcgdG8gYWNjZXNzIG1vZHVsZS5fX3NwZWNfXy4KKyAgICAgICAgbW9kdWxlLl9fc3BlY19fLmxvYWRlcl9zdGF0ZSA9IG1vZHVsZS5fX2RpY3RfXy5jb3B5KCkKKyAgICAgICAgbW9kdWxlLl9fY2xhc3NfXyA9IF9MYXp5TW9kdWxlCmRpZmYgLS1naXQgYS9MaWIvaW5zcGVjdC5weSBiL0xpYi9pbnNwZWN0LnB5CmluZGV4IDQyOThkZTYuLmU4MzBlYjYgMTAwNjQ0Ci0tLSBhL0xpYi9pbnNwZWN0LnB5CisrKyBiL0xpYi9pbnNwZWN0LnB5CkBAIC0xNyw3ICsxNyw3IEBACiAgICAgZ2V0Y2xhc3N0cmVlKCkgLSBhcnJhbmdlIGNsYXNzZXMgc28gYXMgdG8gcmVwcmVzZW50IHRoZWlyIGhpZXJhcmNoeQogCiAgICAgZ2V0YXJnc3BlYygpLCBnZXRhcmd2YWx1ZXMoKSwgZ2V0Y2FsbGFyZ3MoKSAtIGdldCBpbmZvIGFib3V0IGZ1bmN0aW9uIGFyZ3VtZW50cwotICAgIGdldGZ1bGxhcmdzcGVjKCkgLSBzYW1lLCB3aXRoIHN1cHBvcnQgZm9yIFB5dGhvbi0zMDAwIGZlYXR1cmVzCisgICAgZ2V0ZnVsbGFyZ3NwZWMoKSAtIHNhbWUsIHdpdGggc3VwcG9ydCBmb3IgUHl0aG9uIDMgZmVhdHVyZXMKICAgICBmb3JtYXRhcmdzcGVjKCksIGZvcm1hdGFyZ3ZhbHVlcygpIC0gZm9ybWF0IGFuIGFyZ3VtZW50IHNwZWMKICAgICBnZXRvdXRlcmZyYW1lcygpLCBnZXRpbm5lcmZyYW1lcygpIC0gZ2V0IGluZm8gYWJvdXQgZnJhbWVzCiAgICAgY3VycmVudGZyYW1lKCkgLSBnZXQgdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUKQEAgLTMyLDYgKzMyLDkgQEAKICAgICAgICAgICAgICAgJ1l1cnkgU2VsaXZhbm92IDx5c2VsaXZhbm92QHNwcnltaXguY29tPicpCiAKIGltcG9ydCBhc3QKK2ltcG9ydCBkaXMKK2ltcG9ydCBjb2xsZWN0aW9ucy5hYmMKK2ltcG9ydCBlbnVtCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IGxpbmVjYWNoZQpAQCAtNDgsMTggKzUxLDEwIEBACiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBPcmRlcmVkRGljdAogCiAjIENyZWF0ZSBjb25zdGFudHMgZm9yIHRoZSBjb21waWxlciBmbGFncyBpbiBJbmNsdWRlL2NvZGUuaAotIyBXZSB0cnkgdG8gZ2V0IHRoZW0gZnJvbSBkaXMgdG8gYXZvaWQgZHVwbGljYXRpb24sIGJ1dCBmYWxsCi0jIGJhY2sgdG8gaGFyZC1jb2Rpbmcgc28gdGhlIGRlcGVuZGVuY3kgaXMgb3B0aW9uYWwKLXRyeToKLSAgICBmcm9tIGRpcyBpbXBvcnQgQ09NUElMRVJfRkxBR19OQU1FUyBhcyBfZmxhZ19uYW1lcwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIENPX09QVElNSVpFRCwgQ09fTkVXTE9DQUxTID0gMHgxLCAweDIKLSAgICBDT19WQVJBUkdTLCBDT19WQVJLRVlXT1JEUyA9IDB4NCwgMHg4Ci0gICAgQ09fTkVTVEVELCBDT19HRU5FUkFUT1IsIENPX05PRlJFRSA9IDB4MTAsIDB4MjAsIDB4NDAKLWVsc2U6Ci0gICAgbW9kX2RpY3QgPSBnbG9iYWxzKCkKLSAgICBmb3IgaywgdiBpbiBfZmxhZ19uYW1lcy5pdGVtcygpOgotICAgICAgICBtb2RfZGljdFsiQ09fIiArIHZdID0gaworIyBXZSB0cnkgdG8gZ2V0IHRoZW0gZnJvbSBkaXMgdG8gYXZvaWQgZHVwbGljYXRpb24KK21vZF9kaWN0ID0gZ2xvYmFscygpCitmb3IgaywgdiBpbiBkaXMuQ09NUElMRVJfRkxBR19OQU1FUy5pdGVtcygpOgorICAgIG1vZF9kaWN0WyJDT18iICsgdl0gPSBrCiAKICMgU2VlIEluY2x1ZGUvb2JqZWN0LmgKIFRQRkxBR1NfSVNfQUJTVFJBQ1QgPSAxIDw8IDIwCkBAIC0xODIsNiArMTc3LDE1IEBACiAgICAgcmV0dXJuIGJvb2woKGlzZnVuY3Rpb24ob2JqZWN0KSBvciBpc21ldGhvZChvYmplY3QpKSBhbmQKICAgICAgICAgICAgICAgICBvYmplY3QuX19jb2RlX18uY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IpCiAKK2RlZiBpc2Nvcm91dGluZWZ1bmN0aW9uKG9iamVjdCk6CisgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIGNvcm91dGluZSBmdW5jdGlvbi4KKworICAgIENvcm91dGluZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgd2l0aCAiYXN5bmMgZGVmIiBzeW50YXgsCisgICAgb3IgZ2VuZXJhdG9ycyBkZWNvcmF0ZWQgd2l0aCAidHlwZXMuY29yb3V0aW5lIi4KKyAgICAiIiIKKyAgICByZXR1cm4gYm9vbCgoaXNmdW5jdGlvbihvYmplY3QpIG9yIGlzbWV0aG9kKG9iamVjdCkpIGFuZAorICAgICAgICAgICAgICAgIG9iamVjdC5fX2NvZGVfXy5jb19mbGFncyAmIENPX0NPUk9VVElORSkKKwogZGVmIGlzZ2VuZXJhdG9yKG9iamVjdCk6CiAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIGdlbmVyYXRvci4KIApAQCAtMTk5LDYgKzIwMywxNyBAQAogICAgICAgICB0aHJvdyAgICAgICAgICAgdXNlZCB0byByYWlzZSBhbiBleGNlcHRpb24gaW5zaWRlIHRoZSBnZW5lcmF0b3IiIiIKICAgICByZXR1cm4gaXNpbnN0YW5jZShvYmplY3QsIHR5cGVzLkdlbmVyYXRvclR5cGUpCiAKK2RlZiBpc2Nvcm91dGluZShvYmplY3QpOgorICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSBjb3JvdXRpbmUuIiIiCisgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlcy5Db3JvdXRpbmVUeXBlKQorCitkZWYgaXNhd2FpdGFibGUob2JqZWN0KToKKyAgICAiIiJSZXR1cm4gdHJ1ZSBpcyBvYmplY3QgY2FuIGJlIHBhc3NlZCB0byBhbiBgYGF3YWl0YGAgZXhwcmVzc2lvbi4iIiIKKyAgICByZXR1cm4gKGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlcy5Db3JvdXRpbmVUeXBlKSBvcgorICAgICAgICAgICAgaXNpbnN0YW5jZShvYmplY3QsIHR5cGVzLkdlbmVyYXRvclR5cGUpIGFuZAorICAgICAgICAgICAgICAgIG9iamVjdC5naV9jb2RlLmNvX2ZsYWdzICYgQ09fSVRFUkFCTEVfQ09ST1VUSU5FIG9yCisgICAgICAgICAgICBpc2luc3RhbmNlKG9iamVjdCwgY29sbGVjdGlvbnMuYWJjLkF3YWl0YWJsZSkpCisKIGRlZiBpc3RyYWNlYmFjayhvYmplY3QpOgogICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSB0cmFjZWJhY2suCiAKQEAgLTQ2Nyw2ICs0ODIsNzUgQEAKICAgICBleHBsaW5lID0gbGluZS5leHBhbmR0YWJzKCkKICAgICByZXR1cm4gbGVuKGV4cGxpbmUpIC0gbGVuKGV4cGxpbmUubHN0cmlwKCkpCiAKK2RlZiBfZmluZGNsYXNzKGZ1bmMpOgorICAgIGNscyA9IHN5cy5tb2R1bGVzLmdldChmdW5jLl9fbW9kdWxlX18pCisgICAgaWYgY2xzIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZm9yIG5hbWUgaW4gZnVuYy5fX3F1YWxuYW1lX18uc3BsaXQoJy4nKVs6LTFdOgorICAgICAgICBjbHMgPSBnZXRhdHRyKGNscywgbmFtZSkKKyAgICBpZiBub3QgaXNjbGFzcyhjbHMpOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBjbHMKKworZGVmIF9maW5kZG9jKG9iaik6CisgICAgaWYgaXNjbGFzcyhvYmopOgorICAgICAgICBmb3IgYmFzZSBpbiBvYmouX19tcm9fXzoKKyAgICAgICAgICAgIGlmIGJhc2UgaXMgbm90IG9iamVjdDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRvYyA9IGJhc2UuX19kb2NfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBkb2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2MKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGlmIGlzbWV0aG9kKG9iaik6CisgICAgICAgIG5hbWUgPSBvYmouX19mdW5jX18uX19uYW1lX18KKyAgICAgICAgc2VsZiA9IG9iai5fX3NlbGZfXworICAgICAgICBpZiAoaXNjbGFzcyhzZWxmKSBhbmQKKyAgICAgICAgICAgIGdldGF0dHIoZ2V0YXR0cihzZWxmLCBuYW1lLCBOb25lKSwgJ19fZnVuY19fJykgaXMgb2JqLl9fZnVuY19fKToKKyAgICAgICAgICAgICMgY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGNscyA9IHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNscyA9IHNlbGYuX19jbGFzc19fCisgICAgZWxpZiBpc2Z1bmN0aW9uKG9iaik6CisgICAgICAgIG5hbWUgPSBvYmouX19uYW1lX18KKyAgICAgICAgY2xzID0gX2ZpbmRjbGFzcyhvYmopCisgICAgICAgIGlmIGNscyBpcyBOb25lIG9yIGdldGF0dHIoY2xzLCBuYW1lKSBpcyBub3Qgb2JqOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBlbGlmIGlzYnVpbHRpbihvYmopOgorICAgICAgICBuYW1lID0gb2JqLl9fbmFtZV9fCisgICAgICAgIHNlbGYgPSBvYmouX19zZWxmX18KKyAgICAgICAgaWYgKGlzY2xhc3Moc2VsZikgYW5kCisgICAgICAgICAgICBzZWxmLl9fcXVhbG5hbWVfXyArICcuJyArIG5hbWUgPT0gb2JqLl9fcXVhbG5hbWVfXyk6CisgICAgICAgICAgICAjIGNsYXNzbWV0aG9kCisgICAgICAgICAgICBjbHMgPSBzZWxmCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbHMgPSBzZWxmLl9fY2xhc3NfXworICAgICMgU2hvdWxkIGJlIHRlc3RlZCBiZWZvcmUgaXNkYXRhZGVzY3JpcHRvcigpLgorICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHByb3BlcnR5KToKKyAgICAgICAgZnVuYyA9IG9iai5mZ2V0CisgICAgICAgIG5hbWUgPSBmdW5jLl9fbmFtZV9fCisgICAgICAgIGNscyA9IF9maW5kY2xhc3MoZnVuYykKKyAgICAgICAgaWYgY2xzIGlzIE5vbmUgb3IgZ2V0YXR0cihjbHMsIG5hbWUpIGlzIG5vdCBvYmo6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsaWYgaXNtZXRob2RkZXNjcmlwdG9yKG9iaikgb3IgaXNkYXRhZGVzY3JpcHRvcihvYmopOgorICAgICAgICBuYW1lID0gb2JqLl9fbmFtZV9fCisgICAgICAgIGNscyA9IG9iai5fX29iamNsYXNzX18KKyAgICAgICAgaWYgZ2V0YXR0cihjbHMsIG5hbWUpIGlzIG5vdCBvYmo6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBmb3IgYmFzZSBpbiBjbHMuX19tcm9fXzoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZG9jID0gZ2V0YXR0cihiYXNlLCBuYW1lKS5fX2RvY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGRvYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBkb2MKKyAgICByZXR1cm4gTm9uZQorCiBkZWYgZ2V0ZG9jKG9iamVjdCk6CiAgICAgIiIiR2V0IHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBmb3IgYW4gb2JqZWN0LgogCkBAIC00NzcsNiArNTYxLDExIEBACiAgICAgICAgIGRvYyA9IG9iamVjdC5fX2RvY19fCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICByZXR1cm4gTm9uZQorICAgIGlmIGRvYyBpcyBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkb2MgPSBfZmluZGRvYyhvYmplY3QpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgIGlmIG5vdCBpc2luc3RhbmNlKGRvYywgc3RyKToKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICByZXR1cm4gY2xlYW5kb2MoZG9jKQpAQCAtNzEwLDcgKzc5OSw3IEBACiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9iamVjdCwgJ2NvX2ZpcnN0bGluZW5vJyk6CiAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZmluZCBmdW5jdGlvbiBkZWZpbml0aW9uJykKICAgICAgICAgbG51bSA9IG9iamVjdC5jb19maXJzdGxpbmVubyAtIDEKLSAgICAgICAgcGF0ID0gcmUuY29tcGlsZShyJ14oXHMqZGVmXHMpfCguKig/PCFcdylsYW1iZGEoOnxccykpfF4oXHMqQCknKQorICAgICAgICBwYXQgPSByZS5jb21waWxlKHInXihccypkZWZccyl8KFxzKmFzeW5jXHMrZGVmXHMpfCguKig/PCFcdylsYW1iZGEoOnxccykpfF4oXHMqQCknKQogICAgICAgICB3aGlsZSBsbnVtID4gMDoKICAgICAgICAgICAgIGlmIHBhdC5tYXRjaChsaW5lc1tsbnVtXSk6IGJyZWFrCiAgICAgICAgICAgICBsbnVtID0gbG51bSAtIDEKQEAgLTc3MSwyMSArODYwLDM3IEBACiAgICAgICAgIHNlbGYuaXNsYW1iZGEgPSBGYWxzZQogICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBGYWxzZQogICAgICAgICBzZWxmLnBhc3NsaW5lID0gRmFsc2UKKyAgICAgICAgc2VsZi5pbmRlY29yYXRvciA9IEZhbHNlCisgICAgICAgIHNlbGYuZGVjb3JhdG9yaGFzYXJncyA9IEZhbHNlCiAgICAgICAgIHNlbGYubGFzdCA9IDEKIAogICAgIGRlZiB0b2tlbmVhdGVyKHNlbGYsIHR5cGUsIHRva2VuLCBzcm93Y29sLCBlcm93Y29sLCBsaW5lKToKLSAgICAgICAgaWYgbm90IHNlbGYuc3RhcnRlZDoKKyAgICAgICAgaWYgbm90IHNlbGYuc3RhcnRlZCBhbmQgbm90IHNlbGYuaW5kZWNvcmF0b3I6CisgICAgICAgICAgICAjIHNraXAgYW55IGRlY29yYXRvcnMKKyAgICAgICAgICAgIGlmIHRva2VuID09ICJAIjoKKyAgICAgICAgICAgICAgICBzZWxmLmluZGVjb3JhdG9yID0gVHJ1ZQogICAgICAgICAgICAgIyBsb29rIGZvciB0aGUgZmlyc3QgImRlZiIsICJjbGFzcyIgb3IgImxhbWJkYSIKLSAgICAgICAgICAgIGlmIHRva2VuIGluICgiZGVmIiwgImNsYXNzIiwgImxhbWJkYSIpOgorICAgICAgICAgICAgZWxpZiB0b2tlbiBpbiAoImRlZiIsICJjbGFzcyIsICJsYW1iZGEiKToKICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAibGFtYmRhIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5pc2xhbWJkYSA9IFRydWUKICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLnBhc3NsaW5lID0gVHJ1ZSAgICAjIHNraXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZQorICAgICAgICBlbGlmIHRva2VuID09ICIoIjoKKyAgICAgICAgICAgIGlmIHNlbGYuaW5kZWNvcmF0b3I6CisgICAgICAgICAgICAgICAgc2VsZi5kZWNvcmF0b3JoYXNhcmdzID0gVHJ1ZQorICAgICAgICBlbGlmIHRva2VuID09ICIpIjoKKyAgICAgICAgICAgIGlmIHNlbGYuaW5kZWNvcmF0b3I6CisgICAgICAgICAgICAgICAgc2VsZi5pbmRlY29yYXRvciA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5kZWNvcmF0b3JoYXNhcmdzID0gRmFsc2UKICAgICAgICAgZWxpZiB0eXBlID09IHRva2VuaXplLk5FV0xJTkU6CiAgICAgICAgICAgICBzZWxmLnBhc3NsaW5lID0gRmFsc2UgICAjIHN0b3Agc2tpcHBpbmcgd2hlbiBhIE5FV0xJTkUgaXMgc2VlbgogICAgICAgICAgICAgc2VsZi5sYXN0ID0gc3Jvd2NvbFswXQogICAgICAgICAgICAgaWYgc2VsZi5pc2xhbWJkYTogICAgICAgIyBsYW1iZGFzIGFsd2F5cyBlbmQgYXQgdGhlIGZpcnN0IE5FV0xJTkUKICAgICAgICAgICAgICAgICByYWlzZSBFbmRPZkJsb2NrCisgICAgICAgICAgICAjIGhpdHRpbmcgYSBORVdMSU5FIHdoZW4gaW4gYSBkZWNvcmF0b3Igd2l0aG91dCBhcmdzCisgICAgICAgICAgICAjIGVuZHMgdGhlIGRlY29yYXRvcgorICAgICAgICAgICAgaWYgc2VsZi5pbmRlY29yYXRvciBhbmQgbm90IHNlbGYuZGVjb3JhdG9yaGFzYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLmluZGVjb3JhdG9yID0gRmFsc2UKICAgICAgICAgZWxpZiBzZWxmLnBhc3NsaW5lOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbGlmIHR5cGUgPT0gdG9rZW5pemUuSU5ERU5UOgpAQCAtODIyLDEwICs5MjcsMTMgQEAKICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRpY2F0ZXMgd2hlcmUgaW4gdGhlCiAgICAgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhlIGZpcnN0IGxpbmUgb2YgY29kZSB3YXMgZm91bmQuICBBbiBPU0Vycm9yIGlzCiAgICAgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgorICAgIG9iamVjdCA9IHVud3JhcChvYmplY3QpCiAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKG9iamVjdCkKIAotICAgIGlmIGlzbW9kdWxlKG9iamVjdCk6IHJldHVybiBsaW5lcywgMAotICAgIGVsc2U6IHJldHVybiBnZXRibG9jayhsaW5lc1tsbnVtOl0pLCBsbnVtICsgMQorICAgIGlmIGlzbW9kdWxlKG9iamVjdCk6CisgICAgICAgIHJldHVybiBsaW5lcywgMAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBnZXRibG9jayhsaW5lc1tsbnVtOl0pLCBsbnVtICsgMQogCiBkZWYgZ2V0c291cmNlKG9iamVjdCk6CiAgICAgIiIiUmV0dXJuIHRoZSB0ZXh0IG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgYW4gb2JqZWN0LgpAQCAtOTE5LDE3ICsxMDI3LDE4IEBACiBkZWYgZ2V0YXJnc3BlYyhmdW5jKToKICAgICAiIiJHZXQgdGhlIG5hbWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBvZiBhIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLgogCi0gICAgQSB0dXBsZSBvZiBmb3VyIHRoaW5ncyBpcyByZXR1cm5lZDogKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cykuCi0gICAgJ2FyZ3MnIGlzIGEgbGlzdCBvZiB0aGUgYXJndW1lbnQgbmFtZXMuCi0gICAgJ2FyZ3MnIHdpbGwgaW5jbHVkZSBrZXl3b3JkLW9ubHkgYXJndW1lbnQgbmFtZXMuCi0gICAgJ3ZhcmFyZ3MnIGFuZCAndmFya3cnIGFyZSB0aGUgbmFtZXMgb2YgdGhlICogYW5kICoqIGFyZ3VtZW50cyBvciBOb25lLgorICAgIEEgdHVwbGUgb2YgZm91ciB0aGluZ3MgaXMgcmV0dXJuZWQ6IChhcmdzLCB2YXJhcmdzLCBrZXl3b3JkcywgZGVmYXVsdHMpLgorICAgICdhcmdzJyBpcyBhIGxpc3Qgb2YgdGhlIGFyZ3VtZW50IG5hbWVzLCBpbmNsdWRpbmcga2V5d29yZC1vbmx5IGFyZ3VtZW50IG5hbWVzLgorICAgICd2YXJhcmdzJyBhbmQgJ2tleXdvcmRzJyBhcmUgdGhlIG5hbWVzIG9mIHRoZSAqIGFuZCAqKiBhcmd1bWVudHMgb3IgTm9uZS4KICAgICAnZGVmYXVsdHMnIGlzIGFuIG4tdHVwbGUgb2YgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBsYXN0IG4gYXJndW1lbnRzLgogCi0gICAgVXNlIHRoZSBnZXRmdWxsYXJnc3BlYygpIEFQSSBmb3IgUHl0aG9uLTMwMDAgY29kZSwgYXMgYW5ub3RhdGlvbnMKKyAgICBVc2UgdGhlIGdldGZ1bGxhcmdzcGVjKCkgQVBJIGZvciBQeXRob24gMyBjb2RlLCBhcyBhbm5vdGF0aW9ucwogICAgIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3VwcG9ydGVkLiBnZXRhcmdzcGVjKCkgd2lsbCByYWlzZSBWYWx1ZUVycm9yCiAgICAgaWYgdGhlIGZ1bmMgaGFzIGVpdGhlciBhbm5vdGF0aW9ucyBvciBrZXl3b3JkIGFyZ3VtZW50cy4KICAgICAiIiIKLQorICAgIHdhcm5pbmdzLndhcm4oImluc3BlY3QuZ2V0YXJnc3BlYygpIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICAgICAgICJ1c2UgaW5zcGVjdC5zaWduYXR1cmUoKSBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgc3RhY2tsZXZlbD0yKQogICAgIGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywga3dvbmx5YXJncywga3dvbmx5ZGVmYXVsdHMsIGFubiA9IFwKICAgICAgICAgZ2V0ZnVsbGFyZ3NwZWMoZnVuYykKICAgICBpZiBrd29ubHlhcmdzIG9yIGFubjoKQEAgLTk1Myw2ICsxMDYyLDggQEAKICAgICAnYW5ub3RhdGlvbnMnIGlzIGEgZGljdGlvbmFyeSBtYXBwaW5nIGFyZ3VtZW50IG5hbWVzIHRvIGFubm90YXRpb25zLgogCiAgICAgVGhlIGZpcnN0IGZvdXIgaXRlbXMgaW4gdGhlIHR1cGxlIGNvcnJlc3BvbmQgdG8gZ2V0YXJnc3BlYygpLgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgaW5zcGVjdC5zaWduYXR1cmUoKSBpbnN0ZWFkLgogICAgICIiIgogCiAgICAgdHJ5OgpAQCAtOTcyLDkgKzEwODMsMTAgQEAKICAgICAgICAgIyBnZXRmdWxsYXJnc3BlYygpIGhpc3RvcmljYWxseSBpZ25vcmVkIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZXMsCiAgICAgICAgICMgc28gd2UgZW5zdXJlIHRoYXQgcmVtYWlucyB0aGUgY2FzZSBpbiAzLjMrCiAKLSAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucz1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1GYWxzZSkKKyAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9mcm9tX2NhbGxhYmxlKGZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2Nscz1TaWduYXR1cmUpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgIyBNb3N0IG9mIHRoZSB0aW1lcyAnc2lnbmF0dXJlJyB3aWxsIHJhaXNlIFZhbHVlRXJyb3IuCiAgICAgICAgICMgQnV0LCBpdCBjYW4gYWxzbyByYWlzZSBBdHRyaWJ1dGVFcnJvciwgYW5kLCBtYXliZSBzb21ldGhpbmcKQEAgLTEwNDMsOCArMTE1NSw4IEBACiBkZWYgZm9ybWF0YW5ub3RhdGlvbihhbm5vdGF0aW9uLCBiYXNlX21vZHVsZT1Ob25lKToKICAgICBpZiBpc2luc3RhbmNlKGFubm90YXRpb24sIHR5cGUpOgogICAgICAgICBpZiBhbm5vdGF0aW9uLl9fbW9kdWxlX18gaW4gKCdidWlsdGlucycsIGJhc2VfbW9kdWxlKToKLSAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLl9fbmFtZV9fCi0gICAgICAgIHJldHVybiBhbm5vdGF0aW9uLl9fbW9kdWxlX18rJy4nK2Fubm90YXRpb24uX19uYW1lX18KKyAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLl9fcXVhbG5hbWVfXworICAgICAgICByZXR1cm4gYW5ub3RhdGlvbi5fX21vZHVsZV9fKycuJythbm5vdGF0aW9uLl9fcXVhbG5hbWVfXwogICAgIHJldHVybiByZXByKGFubm90YXRpb24pCiAKIGRlZiBmb3JtYXRhbm5vdGF0aW9ucmVsYXRpdmV0byhvYmplY3QpOgpAQCAtMTMxNyw2ICsxNDI5LDggQEAKICAgICAjIEZyYW1lVHlwZS5mX2xpbmVubyBpcyBub3cgYSBkZXNjcmlwdG9yIHRoYXQgZ3JvdmVscyBjb19sbm90YWIKICAgICByZXR1cm4gZnJhbWUuZl9saW5lbm8KIAorRnJhbWVJbmZvID0gbmFtZWR0dXBsZSgnRnJhbWVJbmZvJywgKCdmcmFtZScsKSArIFRyYWNlYmFjay5fZmllbGRzKQorCiBkZWYgZ2V0b3V0ZXJmcmFtZXMoZnJhbWUsIGNvbnRleHQ9MSk6CiAgICAgIiIiR2V0IGEgbGlzdCBvZiByZWNvcmRzIGZvciBhIGZyYW1lIGFuZCBhbGwgaGlnaGVyIChjYWxsaW5nKSBmcmFtZXMuCiAKQEAgLTEzMjQsNyArMTQzOCw4IEBACiAgICAgbmFtZSwgYSBsaXN0IG9mIGxpbmVzIG9mIGNvbnRleHQsIGFuZCBpbmRleCB3aXRoaW4gdGhlIGNvbnRleHQuIiIiCiAgICAgZnJhbWVsaXN0ID0gW10KICAgICB3aGlsZSBmcmFtZToKLSAgICAgICAgZnJhbWVsaXN0LmFwcGVuZCgoZnJhbWUsKSArIGdldGZyYW1laW5mbyhmcmFtZSwgY29udGV4dCkpCisgICAgICAgIGZyYW1laW5mbyA9IChmcmFtZSwpICsgZ2V0ZnJhbWVpbmZvKGZyYW1lLCBjb250ZXh0KQorICAgICAgICBmcmFtZWxpc3QuYXBwZW5kKEZyYW1lSW5mbygqZnJhbWVpbmZvKSkKICAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKICAgICByZXR1cm4gZnJhbWVsaXN0CiAKQEAgLTEzMzUsNyArMTQ1MCw4IEBACiAgICAgbmFtZSwgYSBsaXN0IG9mIGxpbmVzIG9mIGNvbnRleHQsIGFuZCBpbmRleCB3aXRoaW4gdGhlIGNvbnRleHQuIiIiCiAgICAgZnJhbWVsaXN0ID0gW10KICAgICB3aGlsZSB0YjoKLSAgICAgICAgZnJhbWVsaXN0LmFwcGVuZCgodGIudGJfZnJhbWUsKSArIGdldGZyYW1laW5mbyh0YiwgY29udGV4dCkpCisgICAgICAgIGZyYW1laW5mbyA9ICh0Yi50Yl9mcmFtZSwpICsgZ2V0ZnJhbWVpbmZvKHRiLCBjb250ZXh0KQorICAgICAgICBmcmFtZWxpc3QuYXBwZW5kKEZyYW1lSW5mbygqZnJhbWVpbmZvKSkKICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CiAgICAgcmV0dXJuIGZyYW1lbGlzdAogCkBAIC0xNDg1LDYgKzE2MDEsNDUgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4ge30KIAorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb3JvdXRpbmUgaW50cm9zcGVjdGlvbgorCitDT1JPX0NSRUFURUQgPSAnQ09ST19DUkVBVEVEJworQ09ST19SVU5OSU5HID0gJ0NPUk9fUlVOTklORycKK0NPUk9fU1VTUEVOREVEID0gJ0NPUk9fU1VTUEVOREVEJworQ09ST19DTE9TRUQgPSAnQ09ST19DTE9TRUQnCisKK2RlZiBnZXRjb3JvdXRpbmVzdGF0ZShjb3JvdXRpbmUpOgorICAgICIiIkdldCBjdXJyZW50IHN0YXRlIG9mIGEgY29yb3V0aW5lIG9iamVjdC4KKworICAgIFBvc3NpYmxlIHN0YXRlcyBhcmU6CisgICAgICBDT1JPX0NSRUFURUQ6IFdhaXRpbmcgdG8gc3RhcnQgZXhlY3V0aW9uLgorICAgICAgQ09ST19SVU5OSU5HOiBDdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQgYnkgdGhlIGludGVycHJldGVyLgorICAgICAgQ09ST19TVVNQRU5ERUQ6IEN1cnJlbnRseSBzdXNwZW5kZWQgYXQgYW4gYXdhaXQgZXhwcmVzc2lvbi4KKyAgICAgIENPUk9fQ0xPU0VEOiBFeGVjdXRpb24gaGFzIGNvbXBsZXRlZC4KKyAgICAiIiIKKyAgICBpZiBjb3JvdXRpbmUuY3JfcnVubmluZzoKKyAgICAgICAgcmV0dXJuIENPUk9fUlVOTklORworICAgIGlmIGNvcm91dGluZS5jcl9mcmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gQ09ST19DTE9TRUQKKyAgICBpZiBjb3JvdXRpbmUuY3JfZnJhbWUuZl9sYXN0aSA9PSAtMToKKyAgICAgICAgcmV0dXJuIENPUk9fQ1JFQVRFRAorICAgIHJldHVybiBDT1JPX1NVU1BFTkRFRAorCisKK2RlZiBnZXRjb3JvdXRpbmVsb2NhbHMoY29yb3V0aW5lKToKKyAgICAiIiIKKyAgICBHZXQgdGhlIG1hcHBpbmcgb2YgY29yb3V0aW5lIGxvY2FsIHZhcmlhYmxlcyB0byB0aGVpciBjdXJyZW50IHZhbHVlcy4KKworICAgIEEgZGljdCBpcyByZXR1cm5lZCwgd2l0aCB0aGUga2V5cyB0aGUgbG9jYWwgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyB0aGUKKyAgICBib3VuZCB2YWx1ZXMuIiIiCisgICAgZnJhbWUgPSBnZXRhdHRyKGNvcm91dGluZSwgImNyX2ZyYW1lIiwgTm9uZSkKKyAgICBpZiBmcmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIGZyYW1lLmZfbG9jYWxzCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHt9CisKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIEZ1bmN0aW9uIFNpZ25hdHVyZSBPYmplY3QgKFBFUCAzNjIpCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xNTAxLDYgKzE2NTYsMTAgQEAKIAogCiBkZWYgX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZChjbHMsIG1ldGhvZF9uYW1lKToKKyAgICAiIiJQcml2YXRlIGhlbHBlci4gQ2hlY2tzIGlmIGBgY2xzYGAgaGFzIGFuIGF0dHJpYnV0ZQorICAgIG5hbWVkIGBgbWV0aG9kX25hbWVgYCBhbmQgcmV0dXJucyBpdCBvbmx5IGlmIGl0IGlzIGEKKyAgICBwdXJlIHB5dGhvbiBmdW5jdGlvbi4KKyAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIG1ldGggPSBnZXRhdHRyKGNscywgbWV0aG9kX25hbWUpCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgpAQCAtMTUxMyw5ICsxNjcyLDEwIEBACiAKIAogZGVmIF9zaWduYXR1cmVfZ2V0X3BhcnRpYWwod3JhcHBlZF9zaWcsIHBhcnRpYWwsIGV4dHJhX2FyZ3M9KCkpOgotICAgICMgSW50ZXJuYWwgaGVscGVyIHRvIGNhbGN1bGF0ZSBob3cgJ3dyYXBwZWRfc2lnJyBzaWduYXR1cmUgd2lsbAotICAgICMgbG9vayBsaWtlIGFmdGVyIGFwcGx5aW5nIGEgJ2Z1bmN0b29scy5wYXJ0aWFsJyBvYmplY3QgKG9yIGFsaWtlKQotICAgICMgb24gaXQuCisgICAgIiIiUHJpdmF0ZSBoZWxwZXIgdG8gY2FsY3VsYXRlIGhvdyAnd3JhcHBlZF9zaWcnIHNpZ25hdHVyZSB3aWxsCisgICAgbG9vayBsaWtlIGFmdGVyIGFwcGx5aW5nIGEgJ2Z1bmN0b29scy5wYXJ0aWFsJyBvYmplY3QgKG9yIGFsaWtlKQorICAgIG9uIGl0LgorICAgICIiIgogCiAgICAgb2xkX3BhcmFtcyA9IHdyYXBwZWRfc2lnLnBhcmFtZXRlcnMKICAgICBuZXdfcGFyYW1zID0gT3JkZXJlZERpY3Qob2xkX3BhcmFtcy5pdGVtcygpKQpAQCAtMTU4OCw4ICsxNzQ4LDkgQEAKIAogCiBkZWYgX3NpZ25hdHVyZV9ib3VuZF9tZXRob2Qoc2lnKToKLSAgICAjIEludGVybmFsIGhlbHBlciB0byB0cmFuc2Zvcm0gc2lnbmF0dXJlcyBmb3IgdW5ib3VuZAotICAgICMgZnVuY3Rpb25zIHRvIGJvdW5kIG1ldGhvZHMKKyAgICAiIiJQcml2YXRlIGhlbHBlciB0byB0cmFuc2Zvcm0gc2lnbmF0dXJlcyBmb3IgdW5ib3VuZAorICAgIGZ1bmN0aW9ucyB0byBib3VuZCBtZXRob2RzLgorICAgICIiIgogCiAgICAgcGFyYW1zID0gdHVwbGUoc2lnLnBhcmFtZXRlcnMudmFsdWVzKCkpCiAKQEAgLTE2MTMsOCArMTc3NCw5IEBACiAKIAogZGVmIF9zaWduYXR1cmVfaXNfYnVpbHRpbihvYmopOgotICAgICMgSW50ZXJuYWwgaGVscGVyIHRvIHRlc3QgaWYgYG9iamAgaXMgYSBjYWxsYWJsZSB0aGF0IG1pZ2h0Ci0gICAgIyBzdXBwb3J0IEFyZ3VtZW50IENsaW5pYydzIF9fdGV4dF9zaWduYXR1cmVfXyBwcm90b2NvbC4KKyAgICAiIiJQcml2YXRlIGhlbHBlciB0byB0ZXN0IGlmIGBvYmpgIGlzIGEgY2FsbGFibGUgdGhhdCBtaWdodAorICAgIHN1cHBvcnQgQXJndW1lbnQgQ2xpbmljJ3MgX190ZXh0X3NpZ25hdHVyZV9fIHByb3RvY29sLgorICAgICIiIgogICAgIHJldHVybiAoaXNidWlsdGluKG9iaikgb3IKICAgICAgICAgICAgIGlzbWV0aG9kZGVzY3JpcHRvcihvYmopIG9yCiAgICAgICAgICAgICBpc2luc3RhbmNlKG9iaiwgX05vblVzZXJEZWZpbmVkQ2FsbGFibGVzKSBvcgpAQCAtMTYyNCwxMCArMTc4NiwxMSBAQAogCiAKIGRlZiBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShvYmopOgotICAgICMgSW50ZXJuYWwgaGVscGVyIHRvIHRlc3QgaWYgYG9iamAgaXMgYSBkdWNrIHR5cGUgb2YgRnVuY3Rpb25UeXBlLgotICAgICMgQSBnb29kIGV4YW1wbGUgb2Ygc3VjaCBvYmplY3RzIGFyZSBmdW5jdGlvbnMgY29tcGlsZWQgd2l0aAotICAgICMgQ3l0aG9uLCB3aGljaCBoYXZlIGFsbCBhdHRyaWJ1dGVzIHRoYXQgYSBwdXJlIFB5dGhvbiBmdW5jdGlvbgotICAgICMgd291bGQgaGF2ZSwgYnV0IGhhdmUgdGhlaXIgY29kZSBzdGF0aWNhbGx5IGNvbXBpbGVkLgorICAgICIiIlByaXZhdGUgaGVscGVyIHRvIHRlc3QgaWYgYG9iamAgaXMgYSBkdWNrIHR5cGUgb2YgRnVuY3Rpb25UeXBlLgorICAgIEEgZ29vZCBleGFtcGxlIG9mIHN1Y2ggb2JqZWN0cyBhcmUgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGgKKyAgICBDeXRob24sIHdoaWNoIGhhdmUgYWxsIGF0dHJpYnV0ZXMgdGhhdCBhIHB1cmUgUHl0aG9uIGZ1bmN0aW9uCisgICAgd291bGQgaGF2ZSwgYnV0IGhhdmUgdGhlaXIgY29kZSBzdGF0aWNhbGx5IGNvbXBpbGVkLgorICAgICIiIgogCiAgICAgaWYgbm90IGNhbGxhYmxlKG9iaikgb3IgaXNjbGFzcyhvYmopOgogICAgICAgICAjIEFsbCBmdW5jdGlvbi1saWtlIG9iamVjdHMgYXJlIG9idmlvdXNseSBjYWxsYWJsZXMsCkBAIC0xNjQ4LDExICsxODExLDEyIEBACiAKIAogZGVmIF9zaWduYXR1cmVfZ2V0X2JvdW5kX3BhcmFtKHNwZWMpOgotICAgICMgSW50ZXJuYWwgaGVscGVyIHRvIGdldCBmaXJzdCBwYXJhbWV0ZXIgbmFtZSBmcm9tIGEKLSAgICAjIF9fdGV4dF9zaWduYXR1cmVfXyBvZiBhIGJ1aWx0aW4gbWV0aG9kLCB3aGljaCBzaG91bGQKLSAgICAjIGJlIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiAnKCRwYXJhbTEsIC4uLiknLgotICAgICMgQXNzdW1wdGlvbnMgYXJlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IHdvbid0IGhhdmUKLSAgICAjIGEgZGVmYXVsdCB2YWx1ZSBvciBhbiBhbm5vdGF0aW9uLgorICAgICIiIiBQcml2YXRlIGhlbHBlciB0byBnZXQgZmlyc3QgcGFyYW1ldGVyIG5hbWUgZnJvbSBhCisgICAgX190ZXh0X3NpZ25hdHVyZV9fIG9mIGEgYnVpbHRpbiBtZXRob2QsIHdoaWNoIHNob3VsZAorICAgIGJlIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OiAnKCRwYXJhbTEsIC4uLiknLgorICAgIEFzc3VtcHRpb25zIGFyZSB0aGF0IHRoZSBmaXJzdCBhcmd1bWVudCB3b24ndCBoYXZlCisgICAgYSBkZWZhdWx0IHZhbHVlIG9yIGFuIGFubm90YXRpb24uCisgICAgIiIiCiAKICAgICBhc3NlcnQgc3BlYy5zdGFydHN3aXRoKCcoJCcpCiAKQEAgLTE2NzEsNyArMTgzNSw5IEBACiAKIGRlZiBfc2lnbmF0dXJlX3N0cmlwX25vbl9weXRob25fc3ludGF4KHNpZ25hdHVyZSk6CiAgICAgIiIiCi0gICAgVGFrZXMgYSBzaWduYXR1cmUgaW4gQXJndW1lbnQgQ2xpbmljJ3MgZXh0ZW5kZWQgc2lnbmF0dXJlIGZvcm1hdC4KKyAgICBQcml2YXRlIGhlbHBlciBmdW5jdGlvbi4gVGFrZXMgYSBzaWduYXR1cmUgaW4gQXJndW1lbnQgQ2xpbmljJ3MKKyAgICBleHRlbmRlZCBzaWduYXR1cmUgZm9ybWF0LgorCiAgICAgUmV0dXJucyBhIHR1cGxlIG9mIHRocmVlIHRoaW5nczoKICAgICAgICogdGhhdCBzaWduYXR1cmUgcmUtcmVuZGVyZWQgaW4gc3RhbmRhcmQgUHl0aG9uIHN5bnRheCwKICAgICAgICogdGhlIGluZGV4IG9mIHRoZSAic2VsZiIgcGFyYW1ldGVyIChnZW5lcmFsbHkgMCksIG9yIE5vbmUgaWYKQEAgLTE3NDAsOCArMTkwNiwxMCBAQAogCiAKIGRlZiBfc2lnbmF0dXJlX2Zyb21zdHIoY2xzLCBvYmosIHMsIHNraXBfYm91bmRfYXJnPVRydWUpOgotICAgICMgSW50ZXJuYWwgaGVscGVyIHRvIHBhcnNlIGNvbnRlbnQgb2YgJ19fdGV4dF9zaWduYXR1cmVfXycKLSAgICAjIGFuZCByZXR1cm4gYSBTaWduYXR1cmUgYmFzZWQgb24gaXQKKyAgICAiIiJQcml2YXRlIGhlbHBlciB0byBwYXJzZSBjb250ZW50IG9mICdfX3RleHRfc2lnbmF0dXJlX18nCisgICAgYW5kIHJldHVybiBhIFNpZ25hdHVyZSBiYXNlZCBvbiBpdC4KKyAgICAiIiIKKwogICAgIFBhcmFtZXRlciA9IGNscy5fcGFyYW1ldGVyX2NscwogCiAgICAgY2xlYW5fc2lnbmF0dXJlLCBzZWxmX3BhcmFtZXRlciwgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBcCkBAIC0xODc5LDggKzIwNDcsMTAgQEAKIAogCiBkZWYgX3NpZ25hdHVyZV9mcm9tX2J1aWx0aW4oY2xzLCBmdW5jLCBza2lwX2JvdW5kX2FyZz1UcnVlKToKLSAgICAjIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgc2lnbmF0dXJlIGZvcgotICAgICMgYnVpbHRpbiBjYWxsYWJsZXMKKyAgICAiIiJQcml2YXRlIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgc2lnbmF0dXJlIGZvcgorICAgIGJ1aWx0aW4gY2FsbGFibGVzLgorICAgICIiIgorCiAgICAgaWYgbm90IF9zaWduYXR1cmVfaXNfYnVpbHRpbihmdW5jKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ7IXJ9IGlzIG5vdCBhIFB5dGhvbiBidWlsdGluICIKICAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiIuZm9ybWF0KGZ1bmMpKQpAQCAtMTg5Miw3ICsyMDYyLDk1IEBACiAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbXN0cihjbHMsIGZ1bmMsIHMsIHNraXBfYm91bmRfYXJnKQogCiAKLWRlZiBfc2lnbmF0dXJlX2ludGVybmFsKG9iaiwgZm9sbG93X3dyYXBwZXJfY2hhaW5zPVRydWUsIHNraXBfYm91bmRfYXJnPVRydWUpOgorZGVmIF9zaWduYXR1cmVfZnJvbV9mdW5jdGlvbihjbHMsIGZ1bmMpOgorICAgICIiIlByaXZhdGUgaGVscGVyOiBjb25zdHJ1Y3RzIFNpZ25hdHVyZSBmb3IgdGhlIGdpdmVuIHB5dGhvbiBmdW5jdGlvbi4iIiIKKworICAgIGlzX2R1Y2tfZnVuY3Rpb24gPSBGYWxzZQorICAgIGlmIG5vdCBpc2Z1bmN0aW9uKGZ1bmMpOgorICAgICAgICBpZiBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShmdW5jKToKKyAgICAgICAgICAgIGlzX2R1Y2tfZnVuY3Rpb24gPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIGl0J3Mgbm90IGEgcHVyZSBQeXRob24gZnVuY3Rpb24sIGFuZCBub3QgYSBkdWNrIHR5cGUKKyAgICAgICAgICAgICMgb2YgcHVyZSBmdW5jdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nLmZvcm1hdChmdW5jKSkKKworICAgIFBhcmFtZXRlciA9IGNscy5fcGFyYW1ldGVyX2NscworCisgICAgIyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24uCisgICAgZnVuY19jb2RlID0gZnVuYy5fX2NvZGVfXworICAgIHBvc19jb3VudCA9IGZ1bmNfY29kZS5jb19hcmdjb3VudAorICAgIGFyZ19uYW1lcyA9IGZ1bmNfY29kZS5jb192YXJuYW1lcworICAgIHBvc2l0aW9uYWwgPSB0dXBsZShhcmdfbmFtZXNbOnBvc19jb3VudF0pCisgICAga2V5d29yZF9vbmx5X2NvdW50ID0gZnVuY19jb2RlLmNvX2t3b25seWFyZ2NvdW50CisgICAga2V5d29yZF9vbmx5ID0gYXJnX25hbWVzW3Bvc19jb3VudDoocG9zX2NvdW50ICsga2V5d29yZF9vbmx5X2NvdW50KV0KKyAgICBhbm5vdGF0aW9ucyA9IGZ1bmMuX19hbm5vdGF0aW9uc19fCisgICAgZGVmYXVsdHMgPSBmdW5jLl9fZGVmYXVsdHNfXworICAgIGt3ZGVmYXVsdHMgPSBmdW5jLl9fa3dkZWZhdWx0c19fCisKKyAgICBpZiBkZWZhdWx0czoKKyAgICAgICAgcG9zX2RlZmF1bHRfY291bnQgPSBsZW4oZGVmYXVsdHMpCisgICAgZWxzZToKKyAgICAgICAgcG9zX2RlZmF1bHRfY291bnQgPSAwCisKKyAgICBwYXJhbWV0ZXJzID0gW10KKworICAgICMgTm9uLWtleXdvcmQtb25seSBwYXJhbWV0ZXJzIHcvbyBkZWZhdWx0cy4KKyAgICBub25fZGVmYXVsdF9jb3VudCA9IHBvc19jb3VudCAtIHBvc19kZWZhdWx0X2NvdW50CisgICAgZm9yIG5hbWUgaW4gcG9zaXRpb25hbFs6bm9uX2RlZmF1bHRfY291bnRdOgorICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZ2V0KG5hbWUsIF9lbXB0eSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoUGFyYW1ldGVyKG5hbWUsIGFubm90YXRpb249YW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9X1BPU0lUSU9OQUxfT1JfS0VZV09SRCkpCisKKyAgICAjIC4uLiB3LyBkZWZhdWx0cy4KKyAgICBmb3Igb2Zmc2V0LCBuYW1lIGluIGVudW1lcmF0ZShwb3NpdGlvbmFsW25vbl9kZWZhdWx0X2NvdW50Ol0pOgorICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZ2V0KG5hbWUsIF9lbXB0eSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoUGFyYW1ldGVyKG5hbWUsIGFubm90YXRpb249YW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9X1BPU0lUSU9OQUxfT1JfS0VZV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdHNbb2Zmc2V0XSkpCisKKyAgICAjICphcmdzCisgICAgaWYgZnVuY19jb2RlLmNvX2ZsYWdzICYgQ09fVkFSQVJHUzoKKyAgICAgICAgbmFtZSA9IGFyZ19uYW1lc1twb3NfY291bnQgKyBrZXl3b3JkX29ubHlfY291bnRdCisgICAgICAgIGFubm90YXRpb24gPSBhbm5vdGF0aW9ucy5nZXQobmFtZSwgX2VtcHR5KQorICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChQYXJhbWV0ZXIobmFtZSwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1fVkFSX1BPU0lUSU9OQUwpKQorCisgICAgIyBLZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyAgICBmb3IgbmFtZSBpbiBrZXl3b3JkX29ubHk6CisgICAgICAgIGRlZmF1bHQgPSBfZW1wdHkKKyAgICAgICAgaWYga3dkZWZhdWx0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRlZmF1bHQgPSBrd2RlZmF1bHRzLmdldChuYW1lLCBfZW1wdHkpCisKKyAgICAgICAgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zLmdldChuYW1lLCBfZW1wdHkpCisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBhbm5vdGF0aW9uPWFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kPV9LRVlXT1JEX09OTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQpKQorICAgICMgKiprd2FyZ3MKKyAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJLRVlXT1JEUzoKKyAgICAgICAgaW5kZXggPSBwb3NfY291bnQgKyBrZXl3b3JkX29ubHlfY291bnQKKyAgICAgICAgaWYgZnVuY19jb2RlLmNvX2ZsYWdzICYgQ09fVkFSQVJHUzoKKyAgICAgICAgICAgIGluZGV4ICs9IDEKKworICAgICAgICBuYW1lID0gYXJnX25hbWVzW2luZGV4XQorICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZ2V0KG5hbWUsIF9lbXB0eSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoUGFyYW1ldGVyKG5hbWUsIGFubm90YXRpb249YW5ub3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9X1ZBUl9LRVlXT1JEKSkKKworICAgICMgSXMgJ2Z1bmMnIGlzIGEgcHVyZSBQeXRob24gZnVuY3Rpb24gLSBkb24ndCB2YWxpZGF0ZSB0aGUKKyAgICAjIHBhcmFtZXRlcnMgbGlzdCAoZm9yIGNvcnJlY3Qgb3JkZXIgYW5kIGRlZmF1bHRzKSwgaXQgc2hvdWxkIGJlIE9LLgorICAgIHJldHVybiBjbHMocGFyYW1ldGVycywKKyAgICAgICAgICAgICAgIHJldHVybl9hbm5vdGF0aW9uPWFubm90YXRpb25zLmdldCgncmV0dXJuJywgX2VtcHR5KSwKKyAgICAgICAgICAgICAgIF9fdmFsaWRhdGVfcGFyYW1ldGVyc19fPWlzX2R1Y2tfZnVuY3Rpb24pCisKKworZGVmIF9zaWduYXR1cmVfZnJvbV9jYWxsYWJsZShvYmosICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdjbHMpOgorCisgICAgIiIiUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHNpZ25hdHVyZSBmb3IgYXJiaXRyYXJ5CisgICAgY2FsbGFibGUgb2JqZWN0cy4KKyAgICAiIiIKIAogICAgIGlmIG5vdCBjYWxsYWJsZShvYmopOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3shcn0gaXMgbm90IGEgY2FsbGFibGUgb2JqZWN0Jy5mb3JtYXQob2JqKSkKQEAgLTE5MDAsOSArMjE1OCwxMiBAQAogICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5NZXRob2RUeXBlKToKICAgICAgICAgIyBJbiB0aGlzIGNhc2Ugd2Ugc2tpcCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSB1bmRlcmx5aW5nCiAgICAgICAgICMgZnVuY3Rpb24gKHVzdWFsbHkgYHNlbGZgIG9yIGBjbHNgKS4KLSAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChvYmouX19mdW5jX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYm91bmRfYXJnKQorICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2Zyb21fY2FsbGFibGUoCisgICAgICAgICAgICBvYmouX19mdW5jX18sCisgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnM9Zm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmc9c2tpcF9ib3VuZF9hcmcsCisgICAgICAgICAgICBzaWdjbHM9c2lnY2xzKQorCiAgICAgICAgIGlmIHNraXBfYm91bmRfYXJnOgogICAgICAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfYm91bmRfbWV0aG9kKHNpZykKICAgICAgICAgZWxzZToKQEAgLTE5MTUsMTAgKzIxNzYsMTEgQEAKICAgICAgICAgICAgICMgSWYgdGhlIHVud3JhcHBlZCBvYmplY3QgaXMgYSAqbWV0aG9kKiwgd2UgbWlnaHQgd2FudCB0bwogICAgICAgICAgICAgIyBza2lwIGl0cyBmaXJzdCBwYXJhbWV0ZXIgKHNlbGYpLgogICAgICAgICAgICAgIyBTZWUgdGVzdF9zaWduYXR1cmVfd3JhcHBlZF9ib3VuZF9tZXRob2QgZm9yIGRldGFpbHMuCi0gICAgICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9pbnRlcm5hbCgKKyAgICAgICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2Zyb21fY2FsbGFibGUoCiAgICAgICAgICAgICAgICAgb2JqLAogICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucz1mb2xsb3dfd3JhcHBlcl9jaGFpbnMsCi0gICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmc9c2tpcF9ib3VuZF9hcmcpCisgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmc9c2tpcF9ib3VuZF9hcmcsCisgICAgICAgICAgICAgICAgc2lnY2xzPXNpZ2NscykKIAogICAgIHRyeToKICAgICAgICAgc2lnID0gb2JqLl9fc2lnbmF0dXJlX18KQEAgLTE5NDUsOSArMjIwNywxMiBAQAogICAgICAgICAgICAgIyAodXN1YWxseSBgc2VsZmAsIG9yIGBjbHNgKSB3aWxsIG5vdCBiZSBwYXNzZWQKICAgICAgICAgICAgICMgYXV0b21hdGljYWxseSAoYXMgZm9yIGJvdW5kbWV0aG9kcykKIAotICAgICAgICAgICAgd3JhcHBlZF9zaWcgPSBfc2lnbmF0dXJlX2ludGVybmFsKHBhcnRpYWxtZXRob2QuZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmcpCisgICAgICAgICAgICB3cmFwcGVkX3NpZyA9IF9zaWduYXR1cmVfZnJvbV9jYWxsYWJsZSgKKyAgICAgICAgICAgICAgICBwYXJ0aWFsbWV0aG9kLmZ1bmMsCisgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zPWZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1za2lwX2JvdW5kX2FyZywKKyAgICAgICAgICAgICAgICBzaWdjbHM9c2lnY2xzKQorCiAgICAgICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2dldF9wYXJ0aWFsKHdyYXBwZWRfc2lnLCBwYXJ0aWFsbWV0aG9kLCAoTm9uZSwpKQogCiAgICAgICAgICAgICBmaXJzdF93cmFwcGVkX3BhcmFtID0gdHVwbGUod3JhcHBlZF9zaWcucGFyYW1ldGVycy52YWx1ZXMoKSlbMF0KQEAgLTE5NTgsMTYgKzIyMjMsMTggQEAKICAgICBpZiBpc2Z1bmN0aW9uKG9iaikgb3IgX3NpZ25hdHVyZV9pc19mdW5jdGlvbmxpa2Uob2JqKToKICAgICAgICAgIyBJZiBpdCdzIGEgcHVyZSBQeXRob24gZnVuY3Rpb24sIG9yIGFuIG9iamVjdCB0aGF0IGlzIGR1Y2sgdHlwZQogICAgICAgICAjIG9mIGEgUHl0aG9uIGZ1bmN0aW9uIChDeXRob24gZnVuY3Rpb25zLCBmb3IgaW5zdGFuY2UpLCB0aGVuOgotICAgICAgICByZXR1cm4gU2lnbmF0dXJlLmZyb21fZnVuY3Rpb24ob2JqKQorICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9mcm9tX2Z1bmN0aW9uKHNpZ2Nscywgb2JqKQogCiAgICAgaWYgX3NpZ25hdHVyZV9pc19idWlsdGluKG9iaik6Ci0gICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2Zyb21fYnVpbHRpbihTaWduYXR1cmUsIG9iaiwKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbV9idWlsdGluKHNpZ2Nscywgb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmc9c2tpcF9ib3VuZF9hcmcpCiAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZnVuY3Rvb2xzLnBhcnRpYWwpOgotICAgICAgICB3cmFwcGVkX3NpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwob2JqLmZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgd3JhcHBlZF9zaWcgPSBfc2lnbmF0dXJlX2Zyb21fY2FsbGFibGUoCisgICAgICAgICAgICBvYmouZnVuYywKKyAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucz1mb2xsb3dfd3JhcHBlcl9jaGFpbnMsCisgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1za2lwX2JvdW5kX2FyZywKKyAgICAgICAgICAgIHNpZ2Nscz1zaWdjbHMpCiAgICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2dldF9wYXJ0aWFsKHdyYXBwZWRfc2lnLCBvYmopCiAKICAgICBzaWcgPSBOb25lCkBAIC0xOTc4LDIzICsyMjQ1LDI5IEBACiAgICAgICAgICMgaW4gaXRzIG1ldGFjbGFzcwogICAgICAgICBjYWxsID0gX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZCh0eXBlKG9iaiksICdfX2NhbGxfXycpCiAgICAgICAgIGlmIGNhbGwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2ludGVybmFsKGNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmcpCisgICAgICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2Zyb21fY2FsbGFibGUoCisgICAgICAgICAgICAgICAgY2FsbCwKKyAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnM9Zm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgIHNraXBfYm91bmRfYXJnPXNraXBfYm91bmRfYXJnLAorICAgICAgICAgICAgICAgIHNpZ2Nscz1zaWdjbHMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIE5vdyB3ZSBjaGVjayBpZiB0aGUgJ29iaicgY2xhc3MgaGFzIGEgJ19fbmV3X18nIG1ldGhvZAogICAgICAgICAgICAgbmV3ID0gX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZChvYmosICdfX25ld19fJykKICAgICAgICAgICAgIGlmIG5ldyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2ludGVybmFsKG5ldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYm91bmRfYXJnKQorICAgICAgICAgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfZnJvbV9jYWxsYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgbmV3LAorICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnM9Zm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1za2lwX2JvdW5kX2FyZywKKyAgICAgICAgICAgICAgICAgICAgc2lnY2xzPXNpZ2NscykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBGaW5hbGx5LCB3ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBfX2luaXRfXyBpbXBsZW1lbnRlZAogICAgICAgICAgICAgICAgIGluaXQgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19faW5pdF9fJykKICAgICAgICAgICAgICAgICBpZiBpbml0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2ludGVybmFsKGluaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYm91bmRfYXJnKQorICAgICAgICAgICAgICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2Zyb21fY2FsbGFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zPWZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXBfYm91bmRfYXJnPXNraXBfYm91bmRfYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgc2lnY2xzPXNpZ2NscykKIAogICAgICAgICBpZiBzaWcgaXMgTm9uZToKICAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCB3ZSBrbm93LCB0aGF0IGBvYmpgIGlzIGEgY2xhc3MsIHdpdGggbm8gdXNlci0KQEAgLTIwMTYsNyArMjI4OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIHRleHRfc2lnOgogICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiAnb2JqJyBjbGFzcyBoYXMgYSBfX3RleHRfc2lnbmF0dXJlX18gYXR0cmlidXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm4gYSBzaWduYXR1cmUgYmFzZWQgb24gaXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfc2lnbmF0dXJlX2Zyb21zdHIoU2lnbmF0dXJlLCBvYmosIHRleHRfc2lnKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbXN0cihzaWdjbHMsIG9iaiwgdGV4dF9zaWcpCiAKICAgICAgICAgICAgICMgTm8gJ19fdGV4dF9zaWduYXR1cmVfXycgd2FzIGZvdW5kIGZvciB0aGUgJ29iaicgY2xhc3MuCiAgICAgICAgICAgICAjIExhc3Qgb3B0aW9uIGlzIHRvIGNoZWNrIGlmIGl0cyAnX19pbml0X18nIGlzCkBAIC0yMDI0LDkgKzIyOTcsMTMgQEAKICAgICAgICAgICAgIGlmIHR5cGUgbm90IGluIG9iai5fX21yb19fOgogICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIGNsYXNzIChub3QgbWV0YWNsYXNzKSwgYnV0IG5vIHVzZXItZGVmaW5lZAogICAgICAgICAgICAgICAgICMgX19pbml0X18gb3IgX19uZXdfXyBmb3IgaXQKLSAgICAgICAgICAgICAgICBpZiBvYmouX19pbml0X18gaXMgb2JqZWN0Ll9faW5pdF9fOgorICAgICAgICAgICAgICAgIGlmIChvYmouX19pbml0X18gaXMgb2JqZWN0Ll9faW5pdF9fIGFuZAorICAgICAgICAgICAgICAgICAgICBvYmouX19uZXdfXyBpcyBvYmplY3QuX19uZXdfXyk6CiAgICAgICAgICAgICAgICAgICAgICMgUmV0dXJuIGEgc2lnbmF0dXJlIG9mICdvYmplY3QnIGJ1aWx0aW4uCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWduYXR1cmUob2JqZWN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciBidWlsdGluIHR5cGUgeyFyfScuZm9ybWF0KG9iaikpCiAKICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgX05vblVzZXJEZWZpbmVkQ2FsbGFibGVzKToKICAgICAgICAgIyBBbiBvYmplY3Qgd2l0aCBfX2NhbGxfXwpAQCAtMjAzNiw5ICsyMzEzLDExIEBACiAgICAgICAgIGNhbGwgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKHR5cGUob2JqKSwgJ19fY2FsbF9fJykKICAgICAgICAgaWYgY2FsbCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2ludGVybmFsKGNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgICAgICAgICBzaWcgPSBfc2lnbmF0dXJlX2Zyb21fY2FsbGFibGUoCisgICAgICAgICAgICAgICAgICAgIGNhbGwsCisgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucz1mb2xsb3dfd3JhcHBlcl9jaGFpbnMsCisgICAgICAgICAgICAgICAgICAgIHNraXBfYm91bmRfYXJnPXNraXBfYm91bmRfYXJnLAorICAgICAgICAgICAgICAgICAgICBzaWdjbHM9c2lnY2xzKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXg6CiAgICAgICAgICAgICAgICAgbXNnID0gJ25vIHNpZ25hdHVyZSBmb3VuZCBmb3IgeyFyfScuZm9ybWF0KG9iaikKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykgZnJvbSBleApAQCAtMjA1OCw0MSArMjMzNywzNSBAQAogCiAgICAgcmFpc2UgVmFsdWVFcnJvcignY2FsbGFibGUgeyFyfSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScuZm9ybWF0KG9iaikpCiAKLWRlZiBzaWduYXR1cmUob2JqKToKLSAgICAnJydHZXQgYSBzaWduYXR1cmUgb2JqZWN0IGZvciB0aGUgcGFzc2VkIGNhbGxhYmxlLicnJwotICAgIHJldHVybiBfc2lnbmF0dXJlX2ludGVybmFsKG9iaikKLQogCiBjbGFzcyBfdm9pZDoKLSAgICAnJydBIHByaXZhdGUgbWFya2VyIC0gdXNlZCBpbiBQYXJhbWV0ZXIgJiBTaWduYXR1cmUnJycKKyAgICAiIiJBIHByaXZhdGUgbWFya2VyIC0gdXNlZCBpbiBQYXJhbWV0ZXIgJiBTaWduYXR1cmUuIiIiCiAKIAogY2xhc3MgX2VtcHR5OgotICAgIHBhc3MKKyAgICAiIiJNYXJrZXIgb2JqZWN0IGZvciBTaWduYXR1cmUuZW1wdHkgYW5kIFBhcmFtZXRlci5lbXB0eS4iIiIKIAogCi1jbGFzcyBfUGFyYW1ldGVyS2luZChpbnQpOgotICAgIGRlZiBfX25ld19fKHNlbGYsICphcmdzLCBuYW1lKToKLSAgICAgICAgb2JqID0gaW50Ll9fbmV3X18oc2VsZiwgKmFyZ3MpCi0gICAgICAgIG9iai5fbmFtZSA9IG5hbWUKLSAgICAgICAgcmV0dXJuIG9iagorY2xhc3MgX1BhcmFtZXRlcktpbmQoZW51bS5JbnRFbnVtKToKKyAgICBQT1NJVElPTkFMX09OTFkgPSAwCisgICAgUE9TSVRJT05BTF9PUl9LRVlXT1JEID0gMQorICAgIFZBUl9QT1NJVElPTkFMID0gMgorICAgIEtFWVdPUkRfT05MWSA9IDMKKyAgICBWQVJfS0VZV09SRCA9IDQKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzxfUGFyYW1ldGVyS2luZDogeyFyfT4nLmZvcm1hdChzZWxmLl9uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZV8KIAogCi1fUE9TSVRJT05BTF9PTkxZICAgICAgICA9IF9QYXJhbWV0ZXJLaW5kKDAsIG5hbWU9J1BPU0lUSU9OQUxfT05MWScpCi1fUE9TSVRJT05BTF9PUl9LRVlXT1JEICA9IF9QYXJhbWV0ZXJLaW5kKDEsIG5hbWU9J1BPU0lUSU9OQUxfT1JfS0VZV09SRCcpCi1fVkFSX1BPU0lUSU9OQUwgICAgICAgICA9IF9QYXJhbWV0ZXJLaW5kKDIsIG5hbWU9J1ZBUl9QT1NJVElPTkFMJykKLV9LRVlXT1JEX09OTFkgICAgICAgICAgID0gX1BhcmFtZXRlcktpbmQoMywgbmFtZT0nS0VZV09SRF9PTkxZJykKLV9WQVJfS0VZV09SRCAgICAgICAgICAgID0gX1BhcmFtZXRlcktpbmQoNCwgbmFtZT0nVkFSX0tFWVdPUkQnKQorX1BPU0lUSU9OQUxfT05MWSAgICAgICAgID0gX1BhcmFtZXRlcktpbmQuUE9TSVRJT05BTF9PTkxZCitfUE9TSVRJT05BTF9PUl9LRVlXT1JEICAgPSBfUGFyYW1ldGVyS2luZC5QT1NJVElPTkFMX09SX0tFWVdPUkQKK19WQVJfUE9TSVRJT05BTCAgICAgICAgICA9IF9QYXJhbWV0ZXJLaW5kLlZBUl9QT1NJVElPTkFMCitfS0VZV09SRF9PTkxZICAgICAgICAgICAgPSBfUGFyYW1ldGVyS2luZC5LRVlXT1JEX09OTFkKK19WQVJfS0VZV09SRCAgICAgICAgICAgICA9IF9QYXJhbWV0ZXJLaW5kLlZBUl9LRVlXT1JECiAKIAogY2xhc3MgUGFyYW1ldGVyOgotICAgICcnJ1JlcHJlc2VudHMgYSBwYXJhbWV0ZXIgaW4gYSBmdW5jdGlvbiBzaWduYXR1cmUuCisgICAgIiIiUmVwcmVzZW50cyBhIHBhcmFtZXRlciBpbiBhIGZ1bmN0aW9uIHNpZ25hdHVyZS4KIAogICAgIEhhcyB0aGUgZm9sbG93aW5nIHB1YmxpYyBhdHRyaWJ1dGVzOgogCkBAIC0yMTExLDcgKzIzODQsNyBAQAogICAgICAgICBQb3NzaWJsZSB2YWx1ZXM6IGBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZYCwKICAgICAgICAgYFBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkRgLCBgUGFyYW1ldGVyLlZBUl9QT1NJVElPTkFMYCwKICAgICAgICAgYFBhcmFtZXRlci5LRVlXT1JEX09OTFlgLCBgUGFyYW1ldGVyLlZBUl9LRVlXT1JEYC4KLSAgICAnJycKKyAgICAiIiIKIAogICAgIF9fc2xvdHNfXyA9ICgnX25hbWUnLCAnX2tpbmQnLCAnX2RlZmF1bHQnLCAnX2Fubm90YXRpb24nKQogCkBAIC0yMTQ4LDYgKzI0MjEsMTYgQEAKIAogICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQogCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiAodHlwZShzZWxmKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5fbmFtZSwgc2VsZi5fa2luZCksCisgICAgICAgICAgICAgICAgeydfZGVmYXVsdCc6IHNlbGYuX2RlZmF1bHQsCisgICAgICAgICAgICAgICAgICdfYW5ub3RhdGlvbic6IHNlbGYuX2Fubm90YXRpb259KQorCisgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgIHNlbGYuX2RlZmF1bHQgPSBzdGF0ZVsnX2RlZmF1bHQnXQorICAgICAgICBzZWxmLl9hbm5vdGF0aW9uID0gc3RhdGVbJ19hbm5vdGF0aW9uJ10KKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQpAQCAtMjE2Niw3ICsyNDQ5LDcgQEAKIAogICAgIGRlZiByZXBsYWNlKHNlbGYsICosIG5hbWU9X3ZvaWQsIGtpbmQ9X3ZvaWQsCiAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbj1fdm9pZCwgZGVmYXVsdD1fdm9pZCk6Ci0gICAgICAgICcnJ0NyZWF0ZXMgYSBjdXN0b21pemVkIGNvcHkgb2YgdGhlIFBhcmFtZXRlci4nJycKKyAgICAgICAgIiIiQ3JlYXRlcyBhIGN1c3RvbWl6ZWQgY29weSBvZiB0aGUgUGFyYW1ldGVyLiIiIgogCiAgICAgICAgIGlmIG5hbWUgaXMgX3ZvaWQ6CiAgICAgICAgICAgICBuYW1lID0gc2VsZi5fbmFtZQpAQCAtMjIwMiwxMCArMjQ4NSwxNCBAQAogICAgICAgICByZXR1cm4gZm9ybWF0dGVkCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnPHt9IGF0IHs6I3h9IHshcn0+Jy5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc2VsZiksIHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuICc8e30gInt9Ij4nLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZikKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHNlbGYubmFtZSwgc2VsZi5raW5kLCBzZWxmLmFubm90YXRpb24sIHNlbGYuZGVmYXVsdCkpCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZiBpcyBvdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQYXJhbWV0ZXIpOgogICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIHJldHVybiAoc2VsZi5fbmFtZSA9PSBvdGhlci5fbmFtZSBhbmQKQEAgLTIyMTUsNyArMjUwMiw3IEBACiAKIAogY2xhc3MgQm91bmRBcmd1bWVudHM6Ci0gICAgJycnUmVzdWx0IG9mIGBTaWduYXR1cmUuYmluZGAgY2FsbC4gIEhvbGRzIHRoZSBtYXBwaW5nIG9mIGFyZ3VtZW50cworICAgICIiIlJlc3VsdCBvZiBgU2lnbmF0dXJlLmJpbmRgIGNhbGwuICBIb2xkcyB0aGUgbWFwcGluZyBvZiBhcmd1bWVudHMKICAgICB0byB0aGUgZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLgogCiAgICAgSGFzIHRoZSBmb2xsb3dpbmcgcHVibGljIGF0dHJpYnV0ZXM6CkBAIC0yMjI5LDcgKzI1MTYsOSBAQAogICAgICAgICBUdXBsZSBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cyB2YWx1ZXMuCiAgICAgKiBrd2FyZ3MgOiBkaWN0CiAgICAgICAgIERpY3Qgb2Yga2V5d29yZCBhcmd1bWVudHMgdmFsdWVzLgotICAgICcnJworICAgICIiIgorCisgICAgX19zbG90c19fID0gKCdhcmd1bWVudHMnLCAnX3NpZ25hdHVyZScsICdfX3dlYWtyZWZfXycpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc2lnbmF0dXJlLCBhcmd1bWVudHMpOgogICAgICAgICBzZWxmLmFyZ3VtZW50cyA9IGFyZ3VtZW50cwpAQCAtMjI5MiwxNSArMjU4MSw1OCBAQAogCiAgICAgICAgIHJldHVybiBrd2FyZ3MKIAorICAgIGRlZiBhcHBseV9kZWZhdWx0cyhzZWxmKToKKyAgICAgICAgIiIiU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBtaXNzaW5nIGFyZ3VtZW50cy4KKworICAgICAgICBGb3IgdmFyaWFibGUtcG9zaXRpb25hbCBhcmd1bWVudHMgKCphcmdzKSB0aGUgZGVmYXVsdCBpcyBhbgorICAgICAgICBlbXB0eSB0dXBsZS4KKworICAgICAgICBGb3IgdmFyaWFibGUta2V5d29yZCBhcmd1bWVudHMgKCoqa3dhcmdzKSB0aGUgZGVmYXVsdCBpcyBhbgorICAgICAgICBlbXB0eSBkaWN0LgorICAgICAgICAiIiIKKyAgICAgICAgYXJndW1lbnRzID0gc2VsZi5hcmd1bWVudHMKKyAgICAgICAgbmV3X2FyZ3VtZW50cyA9IFtdCisgICAgICAgIGZvciBuYW1lLCBwYXJhbSBpbiBzZWxmLl9zaWduYXR1cmUucGFyYW1ldGVycy5pdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5ld19hcmd1bWVudHMuYXBwZW5kKChuYW1lLCBhcmd1bWVudHNbbmFtZV0pKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtLmRlZmF1bHQgaXMgbm90IF9lbXB0eToKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gcGFyYW0uZGVmYXVsdAorICAgICAgICAgICAgICAgIGVsaWYgcGFyYW0ua2luZCBpcyBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICAgICAgICAgIHZhbCA9ICgpCisgICAgICAgICAgICAgICAgZWxpZiBwYXJhbS5raW5kIGlzIF9WQVJfS0VZV09SRDoKKyAgICAgICAgICAgICAgICAgICAgdmFsID0ge30KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgQm91bmRBcmd1bWVudHMgd2FzIGxpa2VseSBwcm9kdWNlZCBieQorICAgICAgICAgICAgICAgICAgICAjIFNpZ25hdHVyZS5iaW5kX3BhcnRpYWwoKS4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXdfYXJndW1lbnRzLmFwcGVuZCgobmFtZSwgdmFsKSkKKyAgICAgICAgc2VsZi5hcmd1bWVudHMgPSBPcmRlcmVkRGljdChuZXdfYXJndW1lbnRzKQorCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYgaXMgb3RoZXI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgQm91bmRBcmd1bWVudHMpOgogICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIHJldHVybiAoc2VsZi5zaWduYXR1cmUgPT0gb3RoZXIuc2lnbmF0dXJlIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuYXJndW1lbnRzID09IG90aGVyLmFyZ3VtZW50cykKIAorICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICBzZWxmLl9zaWduYXR1cmUgPSBzdGF0ZVsnX3NpZ25hdHVyZSddCisgICAgICAgIHNlbGYuYXJndW1lbnRzID0gc3RhdGVbJ2FyZ3VtZW50cyddCisKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4geydfc2lnbmF0dXJlJzogc2VsZi5fc2lnbmF0dXJlLCAnYXJndW1lbnRzJzogc2VsZi5hcmd1bWVudHN9CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBmb3IgYXJnLCB2YWx1ZSBpbiBzZWxmLmFyZ3VtZW50cy5pdGVtcygpOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJ3t9PXshcn0nLmZvcm1hdChhcmcsIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICc8e30gKHt9KT4nLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJywgJy5qb2luKGFyZ3MpKQorCiAKIGNsYXNzIFNpZ25hdHVyZToKLSAgICAnJydBIFNpZ25hdHVyZSBvYmplY3QgcmVwcmVzZW50cyB0aGUgb3ZlcmFsbCBzaWduYXR1cmUgb2YgYSBmdW5jdGlvbi4KKyAgICAiIiJBIFNpZ25hdHVyZSBvYmplY3QgcmVwcmVzZW50cyB0aGUgb3ZlcmFsbCBzaWduYXR1cmUgb2YgYSBmdW5jdGlvbi4KICAgICBJdCBzdG9yZXMgYSBQYXJhbWV0ZXIgb2JqZWN0IGZvciBlYWNoIHBhcmFtZXRlciBhY2NlcHRlZCBieSB0aGUKICAgICBmdW5jdGlvbiwgYXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGUgZnVuY3Rpb24gaXRzZWxmLgogCkBAIC0yMzIwLDcgKzI2NTIsNyBAQAogICAgICogYmluZF9wYXJ0aWFsKCphcmdzLCAqKmt3YXJncykgLT4gQm91bmRBcmd1bWVudHMKICAgICAgICAgQ3JlYXRlcyBhIHBhcnRpYWwgbWFwcGluZyBmcm9tIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzCiAgICAgICAgIHRvIHBhcmFtZXRlcnMgKHNpbXVsYXRpbmcgJ2Z1bmN0b29scy5wYXJ0aWFsJyBiZWhhdmlvci4pCi0gICAgJycnCisgICAgIiIiCiAKICAgICBfX3Nsb3RzX18gPSAoJ19yZXR1cm5fYW5ub3RhdGlvbicsICdfcGFyYW1ldGVycycpCiAKQEAgLTIzMzEsOSArMjY2Myw5IEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyYW1ldGVycz1Ob25lLCAqLCByZXR1cm5fYW5ub3RhdGlvbj1fZW1wdHksCiAgICAgICAgICAgICAgICAgIF9fdmFsaWRhdGVfcGFyYW1ldGVyc19fPVRydWUpOgotICAgICAgICAnJydDb25zdHJ1Y3RzIFNpZ25hdHVyZSBmcm9tIHRoZSBnaXZlbiBsaXN0IG9mIFBhcmFtZXRlcgorICAgICAgICAiIiJDb25zdHJ1Y3RzIFNpZ25hdHVyZSBmcm9tIHRoZSBnaXZlbiBsaXN0IG9mIFBhcmFtZXRlcgogICAgICAgICBvYmplY3RzIGFuZCAncmV0dXJuX2Fubm90YXRpb24nLiAgQWxsIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwuCi0gICAgICAgICcnJworICAgICAgICAiIiIKIAogICAgICAgICBpZiBwYXJhbWV0ZXJzIGlzIE5vbmU6CiAgICAgICAgICAgICBwYXJhbXMgPSBPcmRlcmVkRGljdCgpCkBAIC0yMzgyLDg5ICsyNzE0LDI4IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZnJvbV9mdW5jdGlvbihjbHMsIGZ1bmMpOgotICAgICAgICAnJydDb25zdHJ1Y3RzIFNpZ25hdHVyZSBmb3IgdGhlIGdpdmVuIHB5dGhvbiBmdW5jdGlvbicnJworICAgICAgICAiIiJDb25zdHJ1Y3RzIFNpZ25hdHVyZSBmb3IgdGhlIGdpdmVuIHB5dGhvbiBmdW5jdGlvbi4iIiIKIAotICAgICAgICBpc19kdWNrX2Z1bmN0aW9uID0gRmFsc2UKLSAgICAgICAgaWYgbm90IGlzZnVuY3Rpb24oZnVuYyk6Ci0gICAgICAgICAgICBpZiBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShmdW5jKToKLSAgICAgICAgICAgICAgICBpc19kdWNrX2Z1bmN0aW9uID0gVHJ1ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIElmIGl0J3Mgbm90IGEgcHVyZSBQeXRob24gZnVuY3Rpb24sIGFuZCBub3QgYSBkdWNrIHR5cGUKLSAgICAgICAgICAgICAgICAjIG9mIHB1cmUgZnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicuZm9ybWF0KGZ1bmMpKQotCi0gICAgICAgIFBhcmFtZXRlciA9IGNscy5fcGFyYW1ldGVyX2NscwotCi0gICAgICAgICMgUGFyYW1ldGVyIGluZm9ybWF0aW9uLgotICAgICAgICBmdW5jX2NvZGUgPSBmdW5jLl9fY29kZV9fCi0gICAgICAgIHBvc19jb3VudCA9IGZ1bmNfY29kZS5jb19hcmdjb3VudAotICAgICAgICBhcmdfbmFtZXMgPSBmdW5jX2NvZGUuY29fdmFybmFtZXMKLSAgICAgICAgcG9zaXRpb25hbCA9IHR1cGxlKGFyZ19uYW1lc1s6cG9zX2NvdW50XSkKLSAgICAgICAga2V5d29yZF9vbmx5X2NvdW50ID0gZnVuY19jb2RlLmNvX2t3b25seWFyZ2NvdW50Ci0gICAgICAgIGtleXdvcmRfb25seSA9IGFyZ19uYW1lc1twb3NfY291bnQ6KHBvc19jb3VudCArIGtleXdvcmRfb25seV9jb3VudCldCi0gICAgICAgIGFubm90YXRpb25zID0gZnVuYy5fX2Fubm90YXRpb25zX18KLSAgICAgICAgZGVmYXVsdHMgPSBmdW5jLl9fZGVmYXVsdHNfXwotICAgICAgICBrd2RlZmF1bHRzID0gZnVuYy5fX2t3ZGVmYXVsdHNfXwotCi0gICAgICAgIGlmIGRlZmF1bHRzOgotICAgICAgICAgICAgcG9zX2RlZmF1bHRfY291bnQgPSBsZW4oZGVmYXVsdHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwb3NfZGVmYXVsdF9jb3VudCA9IDAKLQotICAgICAgICBwYXJhbWV0ZXJzID0gW10KLQotICAgICAgICAjIE5vbi1rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyB3L28gZGVmYXVsdHMuCi0gICAgICAgIG5vbl9kZWZhdWx0X2NvdW50ID0gcG9zX2NvdW50IC0gcG9zX2RlZmF1bHRfY291bnQKLSAgICAgICAgZm9yIG5hbWUgaW4gcG9zaXRpb25hbFs6bm9uX2RlZmF1bHRfY291bnRdOgotICAgICAgICAgICAgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zLmdldChuYW1lLCBfZW1wdHkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChQYXJhbWV0ZXIobmFtZSwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9X1BPU0lUSU9OQUxfT1JfS0VZV09SRCkpCi0KLSAgICAgICAgIyAuLi4gdy8gZGVmYXVsdHMuCi0gICAgICAgIGZvciBvZmZzZXQsIG5hbWUgaW4gZW51bWVyYXRlKHBvc2l0aW9uYWxbbm9uX2RlZmF1bHRfY291bnQ6XSk6Ci0gICAgICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZ2V0KG5hbWUsIF9lbXB0eSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBhbm5vdGF0aW9uPWFubm90YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1fUE9TSVRJT05BTF9PUl9LRVlXT1JELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdHNbb2Zmc2V0XSkpCi0KLSAgICAgICAgIyAqYXJncwotICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJBUkdTOgotICAgICAgICAgICAgbmFtZSA9IGFyZ19uYW1lc1twb3NfY291bnQgKyBrZXl3b3JkX29ubHlfY291bnRdCi0gICAgICAgICAgICBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZ2V0KG5hbWUsIF9lbXB0eSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBhbm5vdGF0aW9uPWFubm90YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1fVkFSX1BPU0lUSU9OQUwpKQotCi0gICAgICAgICMgS2V5d29yZC1vbmx5IHBhcmFtZXRlcnMuCi0gICAgICAgIGZvciBuYW1lIGluIGtleXdvcmRfb25seToKLSAgICAgICAgICAgIGRlZmF1bHQgPSBfZW1wdHkKLSAgICAgICAgICAgIGlmIGt3ZGVmYXVsdHMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVmYXVsdCA9IGt3ZGVmYXVsdHMuZ2V0KG5hbWUsIF9lbXB0eSkKLQotICAgICAgICAgICAgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zLmdldChuYW1lLCBfZW1wdHkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChQYXJhbWV0ZXIobmFtZSwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9X0tFWVdPUkRfT05MWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQpKQotICAgICAgICAjICoqa3dhcmdzCi0gICAgICAgIGlmIGZ1bmNfY29kZS5jb19mbGFncyAmIENPX1ZBUktFWVdPUkRTOgotICAgICAgICAgICAgaW5kZXggPSBwb3NfY291bnQgKyBrZXl3b3JkX29ubHlfY291bnQKLSAgICAgICAgICAgIGlmIGZ1bmNfY29kZS5jb19mbGFncyAmIENPX1ZBUkFSR1M6Ci0gICAgICAgICAgICAgICAgaW5kZXggKz0gMQotCi0gICAgICAgICAgICBuYW1lID0gYXJnX25hbWVzW2luZGV4XQotICAgICAgICAgICAgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zLmdldChuYW1lLCBfZW1wdHkpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChQYXJhbWV0ZXIobmFtZSwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9X1ZBUl9LRVlXT1JEKSkKLQotICAgICAgICAjIElzICdmdW5jJyBpcyBhIHB1cmUgUHl0aG9uIGZ1bmN0aW9uIC0gZG9uJ3QgdmFsaWRhdGUgdGhlCi0gICAgICAgICMgcGFyYW1ldGVycyBsaXN0IChmb3IgY29ycmVjdCBvcmRlciBhbmQgZGVmYXVsdHMpLCBpdCBzaG91bGQgYmUgT0suCi0gICAgICAgIHJldHVybiBjbHMocGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICByZXR1cm5fYW5ub3RhdGlvbj1hbm5vdGF0aW9ucy5nZXQoJ3JldHVybicsIF9lbXB0eSksCi0gICAgICAgICAgICAgICAgICAgX192YWxpZGF0ZV9wYXJhbWV0ZXJzX189aXNfZHVja19mdW5jdGlvbikKKyAgICAgICAgd2FybmluZ3Mud2FybigiaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9mdW5jdGlvbigpIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIFNpZ25hdHVyZS5mcm9tX2NhbGxhYmxlKCkiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9mcm9tX2Z1bmN0aW9uKGNscywgZnVuYykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tX2J1aWx0aW4oY2xzLCBmdW5jKToKKyAgICAgICAgIiIiQ29uc3RydWN0cyBTaWduYXR1cmUgZm9yIHRoZSBnaXZlbiBidWlsdGluIGZ1bmN0aW9uLiIiIgorCisgICAgICAgIHdhcm5pbmdzLndhcm4oImluc3BlY3QuU2lnbmF0dXJlLmZyb21fYnVpbHRpbigpIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAidXNlIFNpZ25hdHVyZS5mcm9tX2NhbGxhYmxlKCkiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9mcm9tX2J1aWx0aW4oY2xzLCBmdW5jKQogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fY2FsbGFibGUoY2xzLCBvYmosICosIGZvbGxvd193cmFwcGVkPVRydWUpOgorICAgICAgICAiIiJDb25zdHJ1Y3RzIFNpZ25hdHVyZSBmb3IgdGhlIGdpdmVuIGNhbGxhYmxlIG9iamVjdC4iIiIKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbV9jYWxsYWJsZShvYmosIHNpZ2Nscz1jbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zPWZvbGxvd193cmFwcGVkKQorCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIHBhcmFtZXRlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9wYXJhbWV0ZXJzCkBAIC0yNDc0LDEwICsyNzQ1LDEwIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9yZXR1cm5fYW5ub3RhdGlvbgogCiAgICAgZGVmIHJlcGxhY2Uoc2VsZiwgKiwgcGFyYW1ldGVycz1fdm9pZCwgcmV0dXJuX2Fubm90YXRpb249X3ZvaWQpOgotICAgICAgICAnJydDcmVhdGVzIGEgY3VzdG9taXplZCBjb3B5IG9mIHRoZSBTaWduYXR1cmUuCisgICAgICAgICIiIkNyZWF0ZXMgYSBjdXN0b21pemVkIGNvcHkgb2YgdGhlIFNpZ25hdHVyZS4KICAgICAgICAgUGFzcyAncGFyYW1ldGVycycgYW5kL29yICdyZXR1cm5fYW5ub3RhdGlvbicgYXJndW1lbnRzCiAgICAgICAgIHRvIG92ZXJyaWRlIHRoZW0gaW4gdGhlIG5ldyBjb3B5LgotICAgICAgICAnJycKKyAgICAgICAgIiIiCiAKICAgICAgICAgaWYgcGFyYW1ldGVycyBpcyBfdm9pZDoKICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBzZWxmLnBhcmFtZXRlcnMudmFsdWVzKCkKQEAgLTI0ODgsMzkgKzI3NTksMjkgQEAKICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikocGFyYW1ldGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2Fubm90YXRpb249cmV0dXJuX2Fubm90YXRpb24pCiAKKyAgICBkZWYgX2hhc2hfYmFzaXMoc2VsZik6CisgICAgICAgIHBhcmFtcyA9IHR1cGxlKHBhcmFtIGZvciBwYXJhbSBpbiBzZWxmLnBhcmFtZXRlcnMudmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW0ua2luZCAhPSBfS0VZV09SRF9PTkxZKQorCisgICAgICAgIGt3b19wYXJhbXMgPSB7cGFyYW0ubmFtZTogcGFyYW0gZm9yIHBhcmFtIGluIHNlbGYucGFyYW1ldGVycy52YWx1ZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgPT0gX0tFWVdPUkRfT05MWX0KKworICAgICAgICByZXR1cm4gcGFyYW1zLCBrd29fcGFyYW1zLCBzZWxmLnJldHVybl9hbm5vdGF0aW9uCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHBhcmFtcywga3dvX3BhcmFtcywgcmV0dXJuX2Fubm90YXRpb24gPSBzZWxmLl9oYXNoX2Jhc2lzKCkKKyAgICAgICAga3dvX3BhcmFtcyA9IGZyb3plbnNldChrd29fcGFyYW1zLnZhbHVlcygpKQorICAgICAgICByZXR1cm4gaGFzaCgocGFyYW1zLCBrd29fcGFyYW1zLCByZXR1cm5fYW5ub3RhdGlvbikpCisKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZiBpcyBvdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTaWduYXR1cmUpOgogICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGlmIChzZWxmLnJldHVybl9hbm5vdGF0aW9uICE9IG90aGVyLnJldHVybl9hbm5vdGF0aW9uIG9yCi0gICAgICAgICAgICBsZW4oc2VsZi5wYXJhbWV0ZXJzKSAhPSBsZW4ob3RoZXIucGFyYW1ldGVycykpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgb3RoZXJfcG9zaXRpb25zID0ge3BhcmFtOiBpZHgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpZHgsIHBhcmFtIGluIGVudW1lcmF0ZShvdGhlci5wYXJhbWV0ZXJzLmtleXMoKSl9Ci0KLSAgICAgICAgZm9yIGlkeCwgKHBhcmFtX25hbWUsIHBhcmFtKSBpbiBlbnVtZXJhdGUoc2VsZi5wYXJhbWV0ZXJzLml0ZW1zKCkpOgotICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfS0VZV09SRF9PTkxZOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3RoZXJfcGFyYW0gPSBvdGhlci5wYXJhbWV0ZXJzW3BhcmFtX25hbWVdCi0gICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbSAhPSBvdGhlcl9wYXJhbToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG90aGVyX2lkeCA9IG90aGVyX3Bvc2l0aW9uc1twYXJhbV9uYW1lXQotICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCAhPSBvdGhlcl9pZHggb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtICE9IG90aGVyLnBhcmFtZXRlcnNbcGFyYW1fbmFtZV0pOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2hfYmFzaXMoKSA9PSBvdGhlci5faGFzaF9iYXNpcygpCiAKICAgICBkZWYgX2JpbmQoc2VsZiwgYXJncywga3dhcmdzLCAqLCBwYXJ0aWFsPUZhbHNlKToKLSAgICAgICAgJycnUHJpdmF0ZSBtZXRob2QuICBEb24ndCB1c2UgZGlyZWN0bHkuJycnCisgICAgICAgICIiIlByaXZhdGUgbWV0aG9kLiBEb24ndCB1c2UgZGlyZWN0bHkuIiIiCiAKICAgICAgICAgYXJndW1lbnRzID0gT3JkZXJlZERpY3QoKQogCkBAIC0yNTY4LDcgKzI4MjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNfZXggPSAocGFyYW0sKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICd7YXJnIXJ9IHBhcmFtZXRlciBsYWNraW5nIGRlZmF1bHQgdmFsdWUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gJ21pc3NpbmcgYSByZXF1aXJlZCBhcmd1bWVudDoge2FyZyFyfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cuZm9ybWF0KGFyZz1wYXJhbS5uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpIGZyb20gTm9uZQogICAgICAgICAgICAgZWxzZToKQEAgLTI1ODEsNyArMjg0Miw4IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIExvb2tzIGxpa2Ugd2UgaGF2ZSBubyBwYXJhbWV0ZXIgZm9yIHRoaXMgcG9zaXRpb25hbAogICAgICAgICAgICAgICAgICAgICAgICAgIyBhcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd0b28gbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cycpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzJykgZnJvbSBOb25lCiAKICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfVkFSX1BPU0lUSU9OQUw6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGhhdmUgYW4gJyphcmdzJy1saWtlIGFyZ3VtZW50LCBsZXQncyBmaWxsIGl0IHdpdGgKQEAgLTI1OTMsOCArMjg1NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtLm5hbWUgaW4ga3dhcmdzOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdtdWx0aXBsZSB2YWx1ZXMgZm9yIGFyZ3VtZW50ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2FyZyFyfScuZm9ybWF0KGFyZz1wYXJhbS5uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwbGUgdmFsdWVzIGZvciBhcmd1bWVudCB7YXJnIXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZz1wYXJhbS5uYW1lKSkgZnJvbSBOb25lCiAKICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW3BhcmFtLm5hbWVdID0gYXJnX3ZhbAogCkBAIC0yNjIzLDcgKzI4ODYsNyBAQAogICAgICAgICAgICAgICAgICMgYXJndW1lbnRzLgogICAgICAgICAgICAgICAgIGlmIChub3QgcGFydGlhbCBhbmQgcGFyYW0ua2luZCAhPSBfVkFSX1BPU0lUSU9OQUwgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmYXVsdCBpcyBfZW1wdHkpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3thcmchcn0gcGFyYW1ldGVyIGxhY2tpbmcgZGVmYXVsdCB2YWx1ZScuIFwKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdtaXNzaW5nIGEgcmVxdWlyZWQgYXJndW1lbnQ6IHthcmchcn0nLiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoYXJnPXBhcmFtX25hbWUpKSBmcm9tIE5vbmUKIAogICAgICAgICAgICAgZWxzZToKQEAgLTI2NDIsMjQgKzI5MDUsMzcgQEAKICAgICAgICAgICAgICAgICAjIFByb2Nlc3Mgb3VyICcqKmt3YXJncyctbGlrZSBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgICBhcmd1bWVudHNba3dhcmdzX3BhcmFtLm5hbWVdID0ga3dhcmdzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigndG9vIG1hbnkga2V5d29yZCBhcmd1bWVudHMnKQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ2dvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQge2FyZyFyfScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnPW5leHQoaXRlcihrd2FyZ3MpKSkpCiAKICAgICAgICAgcmV0dXJuIHNlbGYuX2JvdW5kX2FyZ3VtZW50c19jbHMoc2VsZiwgYXJndW1lbnRzKQogCiAgICAgZGVmIGJpbmQoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgJycnR2V0IGEgQm91bmRBcmd1bWVudHMgb2JqZWN0LCB0aGF0IG1hcHMgdGhlIHBhc3NlZCBgYXJnc2AKKyAgICAgICAgIiIiR2V0IGEgQm91bmRBcmd1bWVudHMgb2JqZWN0LCB0aGF0IG1hcHMgdGhlIHBhc3NlZCBgYXJnc2AKICAgICAgICAgYW5kIGBrd2FyZ3NgIHRvIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZS4gIFJhaXNlcyBgVHlwZUVycm9yYAogICAgICAgICBpZiB0aGUgcGFzc2VkIGFyZ3VtZW50cyBjYW4gbm90IGJlIGJvdW5kLgotICAgICAgICAnJycKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBhcmdzWzBdLl9iaW5kKGFyZ3NbMTpdLCBrd2FyZ3MpCiAKICAgICBkZWYgYmluZF9wYXJ0aWFsKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICcnJ0dldCBhIEJvdW5kQXJndW1lbnRzIG9iamVjdCwgdGhhdCBwYXJ0aWFsbHkgbWFwcyB0aGUKKyAgICAgICAgIiIiR2V0IGEgQm91bmRBcmd1bWVudHMgb2JqZWN0LCB0aGF0IHBhcnRpYWxseSBtYXBzIHRoZQogICAgICAgICBwYXNzZWQgYGFyZ3NgIGFuZCBga3dhcmdzYCB0byB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUuCiAgICAgICAgIFJhaXNlcyBgVHlwZUVycm9yYCBpZiB0aGUgcGFzc2VkIGFyZ3VtZW50cyBjYW4gbm90IGJlIGJvdW5kLgotICAgICAgICAnJycKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBhcmdzWzBdLl9iaW5kKGFyZ3NbMTpdLCBrd2FyZ3MsIHBhcnRpYWw9VHJ1ZSkKIAorICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHR5cGUoc2VsZiksCisgICAgICAgICAgICAgICAgKHR1cGxlKHNlbGYuX3BhcmFtZXRlcnMudmFsdWVzKCkpLCksCisgICAgICAgICAgICAgICAgeydfcmV0dXJuX2Fubm90YXRpb24nOiBzZWxmLl9yZXR1cm5fYW5ub3RhdGlvbn0pCisKKyAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgc2VsZi5fcmV0dXJuX2Fubm90YXRpb24gPSBzdGF0ZVsnX3JldHVybl9hbm5vdGF0aW9uJ10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8e30ge30+Jy5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYpCisKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICAgcmVuZGVyX3Bvc19vbmx5X3NlcGFyYXRvciA9IEZhbHNlCkBAIC0yNzA1LDYgKzI5ODEsMTIgQEAKIAogICAgICAgICByZXR1cm4gcmVuZGVyZWQKIAorCitkZWYgc2lnbmF0dXJlKG9iaiwgKiwgZm9sbG93X3dyYXBwZWQ9VHJ1ZSk6CisgICAgIiIiR2V0IGEgc2lnbmF0dXJlIG9iamVjdCBmb3IgdGhlIHBhc3NlZCBjYWxsYWJsZS4iIiIKKyAgICByZXR1cm4gU2lnbmF0dXJlLmZyb21fY2FsbGFibGUob2JqLCBmb2xsb3dfd3JhcHBlZD1mb2xsb3dfd3JhcHBlZCkKKworCiBkZWYgX21haW4oKToKICAgICAiIiIgTG9naWMgZm9yIGluc3BlY3RpbmcgYW4gb2JqZWN0IGdpdmVuIGF0IGNvbW1hbmQgbGluZSAiIiIKICAgICBpbXBvcnQgYXJncGFyc2UKZGlmZiAtLWdpdCBhL0xpYi9pcGFkZHJlc3MucHkgYi9MaWIvaXBhZGRyZXNzLnB5CmluZGV4IGFjMDNjMzYuLjFmOTAwNTggMTAwNjQ0Ci0tLSBhL0xpYi9pcGFkZHJlc3MucHkKKysrIGIvTGliL2lwYWRkcmVzcy5weQpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gYWRkcmVzcy50b19ieXRlcyg0LCAnYmlnJykKLSAgICBleGNlcHQ6CisgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFkZHJlc3MgbmVnYXRpdmUgb3IgdG9vIGxhcmdlIGZvciBJUHY0IikKIAogCkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBhZGRyZXNzLnRvX2J5dGVzKDE2LCAnYmlnJykKLSAgICBleGNlcHQ6CisgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFkZHJlc3MgbmVnYXRpdmUgb3IgdG9vIGxhcmdlIGZvciBJUHY2IikKIAogCkBAIC0xNjQsMjIgKzE2NCwyMyBAQAogCiAKIGRlZiBfZmluZF9hZGRyZXNzX3JhbmdlKGFkZHJlc3Nlcyk6Ci0gICAgIiIiRmluZCBhIHNlcXVlbmNlIG9mIElQdiNBZGRyZXNzLgorICAgICIiIkZpbmQgYSBzZXF1ZW5jZSBvZiBzb3J0ZWQgZGVkdXBsaWNhdGVkIElQdiNBZGRyZXNzLgogCiAgICAgQXJnczoKICAgICAgICAgYWRkcmVzc2VzOiBhIGxpc3Qgb2YgSVB2I0FkZHJlc3Mgb2JqZWN0cy4KIAotICAgIFJldHVybnM6CisgICAgWWllbGRzOgogICAgICAgICBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGZpcnN0IGFuZCBsYXN0IElQIGFkZHJlc3NlcyBpbiB0aGUgc2VxdWVuY2UuCiAKICAgICAiIiIKLSAgICBmaXJzdCA9IGxhc3QgPSBhZGRyZXNzZXNbMF0KLSAgICBmb3IgaXAgaW4gYWRkcmVzc2VzWzE6XToKLSAgICAgICAgaWYgaXAuX2lwID09IGxhc3QuX2lwICsgMToKLSAgICAgICAgICAgIGxhc3QgPSBpcAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICByZXR1cm4gKGZpcnN0LCBsYXN0KQorICAgIGl0ID0gaXRlcihhZGRyZXNzZXMpCisgICAgZmlyc3QgPSBsYXN0ID0gbmV4dChpdCkKKyAgICBmb3IgaXAgaW4gaXQ6CisgICAgICAgIGlmIGlwLl9pcCAhPSBsYXN0Ll9pcCArIDE6CisgICAgICAgICAgICB5aWVsZCBmaXJzdCwgbGFzdAorICAgICAgICAgICAgZmlyc3QgPSBpcAorICAgICAgICBsYXN0ID0gaXAKKyAgICB5aWVsZCBmaXJzdCwgbGFzdAogCiAKIGRlZiBfY291bnRfcmlnaHRoYW5kX3plcm9fYml0cyhudW1iZXIsIGJpdHMpOgpAQCAtMTk1LDExICsxOTYsNyBAQAogICAgICIiIgogICAgIGlmIG51bWJlciA9PSAwOgogICAgICAgICByZXR1cm4gYml0cwotICAgIGZvciBpIGluIHJhbmdlKGJpdHMpOgotICAgICAgICBpZiAobnVtYmVyID4+IGkpICYgMToKLSAgICAgICAgICAgIHJldHVybiBpCi0gICAgIyBBbGwgYml0cyBvZiBpbnRlcmVzdCB3ZXJlIHplcm8sIGV2ZW4gaWYgdGhlcmUgYXJlIG1vcmUgaW4gdGhlIG51bWJlcgotICAgIHJldHVybiBiaXRzCisgICAgcmV0dXJuIG1pbihiaXRzLCAofm51bWJlciAmIChudW1iZXItMSkpLmJpdF9sZW5ndGgoKSkKIAogCiBkZWYgc3VtbWFyaXplX2FkZHJlc3NfcmFuZ2UoZmlyc3QsIGxhc3QpOgpAQCAtMjUwLDE1ICsyNDcsMTQgQEAKICAgICB3aGlsZSBmaXJzdF9pbnQgPD0gbGFzdF9pbnQ6CiAgICAgICAgIG5iaXRzID0gbWluKF9jb3VudF9yaWdodGhhbmRfemVyb19iaXRzKGZpcnN0X2ludCwgaXBfYml0cyksCiAgICAgICAgICAgICAgICAgICAgIChsYXN0X2ludCAtIGZpcnN0X2ludCArIDEpLmJpdF9sZW5ndGgoKSAtIDEpCi0gICAgICAgIG5ldCA9IGlwKCclcy8lZCcgJSAoZmlyc3QsIGlwX2JpdHMgLSBuYml0cykpCisgICAgICAgIG5ldCA9IGlwKChmaXJzdF9pbnQsIGlwX2JpdHMgLSBuYml0cykpCiAgICAgICAgIHlpZWxkIG5ldAogICAgICAgICBmaXJzdF9pbnQgKz0gMSA8PCBuYml0cwogICAgICAgICBpZiBmaXJzdF9pbnQgLSAxID09IGlwLl9BTExfT05FUzoKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpcnN0ID0gZmlyc3QuX19jbGFzc19fKGZpcnN0X2ludCkKIAogCi1kZWYgX2NvbGxhcHNlX2FkZHJlc3Nlc19yZWN1cnNpdmUoYWRkcmVzc2VzKToKK2RlZiBfY29sbGFwc2VfYWRkcmVzc2VzX2ludGVybmFsKGFkZHJlc3Nlcyk6CiAgICAgIiIiTG9vcHMgdGhyb3VnaCB0aGUgYWRkcmVzc2VzLCBjb2xsYXBzaW5nIGNvbmN1cnJlbnQgbmV0YmxvY2tzLgogCiAgICAgRXhhbXBsZToKQEAgLTI2OCw3ICsyNjQsNyBAQAogICAgICAgICBpcDMgPSBJUHY0TmV0d29yaygnMTkyLjAuMi4xMjgvMjYnKQogICAgICAgICBpcDQgPSBJUHY0TmV0d29yaygnMTkyLjAuMi4xOTIvMjYnKQogCi0gICAgICAgIF9jb2xsYXBzZV9hZGRyZXNzZXNfcmVjdXJzaXZlKFtpcDEsIGlwMiwgaXAzLCBpcDRdKSAtPgorICAgICAgICBfY29sbGFwc2VfYWRkcmVzc2VzX2ludGVybmFsKFtpcDEsIGlwMiwgaXAzLCBpcDRdKSAtPgogICAgICAgICAgIFtJUHY0TmV0d29yaygnMTkyLjAuMi4wLzI0JyldCiAKICAgICAgICAgVGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGRpcmVjdGx5OyBpdCBpcyBjYWxsZWQgdmlhCkBAIC0yODIsMjggKzI3OCwyOSBAQAogICAgICAgICBwYXNzZWQuCiAKICAgICAiIiIKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBsYXN0X2FkZHIgPSBOb25lCi0gICAgICAgIHJldF9hcnJheSA9IFtdCi0gICAgICAgIG9wdGltaXplZCA9IEZhbHNlCi0KLSAgICAgICAgZm9yIGN1cl9hZGRyIGluIGFkZHJlc3NlczoKLSAgICAgICAgICAgIGlmIG5vdCByZXRfYXJyYXk6Ci0gICAgICAgICAgICAgICAgbGFzdF9hZGRyID0gY3VyX2FkZHIKLSAgICAgICAgICAgICAgICByZXRfYXJyYXkuYXBwZW5kKGN1cl9hZGRyKQotICAgICAgICAgICAgZWxpZiAoY3VyX2FkZHIubmV0d29ya19hZGRyZXNzID49IGxhc3RfYWRkci5uZXR3b3JrX2FkZHJlc3MgYW5kCi0gICAgICAgICAgICAgICAgY3VyX2FkZHIuYnJvYWRjYXN0X2FkZHJlc3MgPD0gbGFzdF9hZGRyLmJyb2FkY2FzdF9hZGRyZXNzKToKLSAgICAgICAgICAgICAgICBvcHRpbWl6ZWQgPSBUcnVlCi0gICAgICAgICAgICBlbGlmIGN1cl9hZGRyID09IGxpc3QobGFzdF9hZGRyLnN1cGVybmV0KCkuc3VibmV0cygpKVsxXToKLSAgICAgICAgICAgICAgICByZXRfYXJyYXlbLTFdID0gbGFzdF9hZGRyID0gbGFzdF9hZGRyLnN1cGVybmV0KCkKLSAgICAgICAgICAgICAgICBvcHRpbWl6ZWQgPSBUcnVlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxhc3RfYWRkciA9IGN1cl9hZGRyCi0gICAgICAgICAgICAgICAgcmV0X2FycmF5LmFwcGVuZChjdXJfYWRkcikKLQotICAgICAgICBhZGRyZXNzZXMgPSByZXRfYXJyYXkKLSAgICAgICAgaWYgbm90IG9wdGltaXplZDoKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzZXMKKyAgICAjIEZpcnN0IG1lcmdlCisgICAgdG9fbWVyZ2UgPSBsaXN0KGFkZHJlc3NlcykKKyAgICBzdWJuZXRzID0ge30KKyAgICB3aGlsZSB0b19tZXJnZToKKyAgICAgICAgbmV0ID0gdG9fbWVyZ2UucG9wKCkKKyAgICAgICAgc3VwZXJuZXQgPSBuZXQuc3VwZXJuZXQoKQorICAgICAgICBleGlzdGluZyA9IHN1Ym5ldHMuZ2V0KHN1cGVybmV0KQorICAgICAgICBpZiBleGlzdGluZyBpcyBOb25lOgorICAgICAgICAgICAgc3VibmV0c1tzdXBlcm5ldF0gPSBuZXQKKyAgICAgICAgZWxpZiBleGlzdGluZyAhPSBuZXQ6CisgICAgICAgICAgICAjIE1lcmdlIGNvbnNlY3V0aXZlIHN1Ym5ldHMKKyAgICAgICAgICAgIGRlbCBzdWJuZXRzW3N1cGVybmV0XQorICAgICAgICAgICAgdG9fbWVyZ2UuYXBwZW5kKHN1cGVybmV0KQorICAgICMgVGhlbiBpdGVyYXRlIG92ZXIgcmVzdWx0aW5nIG5ldHdvcmtzLCBza2lwcGluZyBzdWJzdW1lZCBzdWJuZXRzCisgICAgbGFzdCA9IE5vbmUKKyAgICBmb3IgbmV0IGluIHNvcnRlZChzdWJuZXRzLnZhbHVlcygpKToKKyAgICAgICAgaWYgbGFzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgU2luY2UgdGhleSBhcmUgc29ydGVkLCBsYXN0Lm5ldHdvcmtfYWRkcmVzcyA8PSBuZXQubmV0d29ya19hZGRyZXNzCisgICAgICAgICAgICAjIGlzIGEgZ2l2ZW4uCisgICAgICAgICAgICBpZiBsYXN0LmJyb2FkY2FzdF9hZGRyZXNzID49IG5ldC5icm9hZGNhc3RfYWRkcmVzczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB5aWVsZCBuZXQKKyAgICAgICAgbGFzdCA9IG5ldAogCiAKIGRlZiBjb2xsYXBzZV9hZGRyZXNzZXMoYWRkcmVzc2VzKToKQEAgLTMyNCw3ICszMjEsNiBAQAogICAgICAgICBUeXBlRXJyb3I6IElmIHBhc3NlZCBhIGxpc3Qgb2YgbWl4ZWQgdmVyc2lvbiBvYmplY3RzLgogCiAgICAgIiIiCi0gICAgaSA9IDAKICAgICBhZGRycyA9IFtdCiAgICAgaXBzID0gW10KICAgICBuZXRzID0gW10KQEAgLTM1MiwxNSArMzQ4LDEzIEBACiAKICAgICAjIHNvcnQgYW5kIGRlZHVwCiAgICAgaXBzID0gc29ydGVkKHNldChpcHMpKQotICAgIG5ldHMgPSBzb3J0ZWQoc2V0KG5ldHMpKQogCi0gICAgd2hpbGUgaSA8IGxlbihpcHMpOgotICAgICAgICAoZmlyc3QsIGxhc3QpID0gX2ZpbmRfYWRkcmVzc19yYW5nZShpcHNbaTpdKQotICAgICAgICBpID0gaXBzLmluZGV4KGxhc3QpICsgMQotICAgICAgICBhZGRycy5leHRlbmQoc3VtbWFyaXplX2FkZHJlc3NfcmFuZ2UoZmlyc3QsIGxhc3QpKQorICAgICMgZmluZCBjb25zZWN1dGl2ZSBhZGRyZXNzIHJhbmdlcyBpbiB0aGUgc29ydGVkIHNlcXVlbmNlIGFuZCBzdW1tYXJpemUgdGhlbQorICAgIGlmIGlwczoKKyAgICAgICAgZm9yIGZpcnN0LCBsYXN0IGluIF9maW5kX2FkZHJlc3NfcmFuZ2UoaXBzKToKKyAgICAgICAgICAgIGFkZHJzLmV4dGVuZChzdW1tYXJpemVfYWRkcmVzc19yYW5nZShmaXJzdCwgbGFzdCkpCiAKLSAgICByZXR1cm4gaXRlcihfY29sbGFwc2VfYWRkcmVzc2VzX3JlY3Vyc2l2ZShzb3J0ZWQoCi0gICAgICAgIGFkZHJzICsgbmV0cywga2V5PV9CYXNlTmV0d29yay5fZ2V0X25ldHdvcmtzX2tleSkpKQorICAgIHJldHVybiBfY29sbGFwc2VfYWRkcmVzc2VzX2ludGVybmFsKGFkZHJzICsgbmV0cykKIAogCiBkZWYgZ2V0X21peGVkX3R5cGVfa2V5KG9iaik6CkBAIC0zOTIsNiArMzg2LDggQEAKIAogICAgICIiIlRoZSBtb3RoZXIgY2xhc3MuIiIiCiAKKyAgICBfX3Nsb3RzX18gPSAoKQorCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4cGxvZGVkKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGxvbmdoYW5kIHZlcnNpb24gb2YgdGhlIElQIGFkZHJlc3MgYXMgYSBzdHJpbmcuIiIiCkBAIC00MDMsNiArMzk5LDE3IEBACiAgICAgICAgIHJldHVybiBzdHIoc2VsZikKIAogICAgIEBwcm9wZXJ0eQorICAgIGRlZiByZXZlcnNlX3BvaW50ZXIoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSByZXZlcnNlIEROUyBwb2ludGVyIGZvciB0aGUgSVAgYWRkcmVzcywgZS5nLjoKKyAgICAgICAgICAgID4+PiBpcGFkZHJlc3MuaXBfYWRkcmVzcygiMTI3LjAuMC4xIikucmV2ZXJzZV9wb2ludGVyCisgICAgICAgICAgICAnMS4wLjAuMTI3LmluLWFkZHIuYXJwYScKKyAgICAgICAgICAgID4+PiBpcGFkZHJlc3MuaXBfYWRkcmVzcygiMjAwMTpkYjg6OjEiKS5yZXZlcnNlX3BvaW50ZXIKKyAgICAgICAgICAgICcxLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC44LmIuZC4wLjEuMC4wLjIuaXA2LmFycGEnCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9yZXZlcnNlX3BvaW50ZXIoKQorCisgICAgQHByb3BlcnR5CiAgICAgZGVmIHZlcnNpb24oc2VsZik6CiAgICAgICAgIG1zZyA9ICclMjAwcyBoYXMgbm8gdmVyc2lvbiBzcGVjaWZpZWQnICUgKHR5cGUoc2VsZiksKQogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKG1zZykKQEAgLTQyMyw3ICs0MzAsOCBAQAogICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IobXNnICUgKGFkZHJlc3MsIGFkZHJlc3NfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2xlbiwgc2VsZi5fdmVyc2lvbikpCiAKLSAgICBkZWYgX2lwX2ludF9mcm9tX3ByZWZpeChzZWxmLCBwcmVmaXhsZW4pOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfaXBfaW50X2Zyb21fcHJlZml4KGNscywgcHJlZml4bGVuKToKICAgICAgICAgIiIiVHVybiB0aGUgcHJlZml4IGxlbmd0aCBpbnRvIGEgYml0d2lzZSBuZXRtYXNrCiAKICAgICAgICAgQXJnczoKQEAgLTQzMyw5ICs0NDEsMTAgQEAKICAgICAgICAgICAgIEFuIGludGVnZXIuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9BTExfT05FUyBeIChzZWxmLl9BTExfT05FUyA+PiBwcmVmaXhsZW4pCisgICAgICAgIHJldHVybiBjbHMuX0FMTF9PTkVTIF4gKGNscy5fQUxMX09ORVMgPj4gcHJlZml4bGVuKQogCi0gICAgZGVmIF9wcmVmaXhfZnJvbV9pcF9pbnQoc2VsZiwgaXBfaW50KToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3ByZWZpeF9mcm9tX2lwX2ludChjbHMsIGlwX2ludCk6CiAgICAgICAgICIiIlJldHVybiBwcmVmaXggbGVuZ3RoIGZyb20gdGhlIGJpdHdpc2UgbmV0bWFzay4KIAogICAgICAgICBBcmdzOgpAQCAtNDQ4LDIyICs0NTcsMjQgQEAKICAgICAgICAgICAgIFZhbHVlRXJyb3I6IElmIHRoZSBpbnB1dCBpbnRlcm1pbmdsZXMgemVyb2VzICYgb25lcwogICAgICAgICAiIiIKICAgICAgICAgdHJhaWxpbmdfemVyb2VzID0gX2NvdW50X3JpZ2h0aGFuZF96ZXJvX2JpdHMoaXBfaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXhfcHJlZml4bGVuKQotICAgICAgICBwcmVmaXhsZW4gPSBzZWxmLl9tYXhfcHJlZml4bGVuIC0gdHJhaWxpbmdfemVyb2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscy5fbWF4X3ByZWZpeGxlbikKKyAgICAgICAgcHJlZml4bGVuID0gY2xzLl9tYXhfcHJlZml4bGVuIC0gdHJhaWxpbmdfemVyb2VzCiAgICAgICAgIGxlYWRpbmdfb25lcyA9IGlwX2ludCA+PiB0cmFpbGluZ196ZXJvZXMKICAgICAgICAgYWxsX29uZXMgPSAoMSA8PCBwcmVmaXhsZW4pIC0gMQogICAgICAgICBpZiBsZWFkaW5nX29uZXMgIT0gYWxsX29uZXM6Ci0gICAgICAgICAgICBieXRlc2xlbiA9IHNlbGYuX21heF9wcmVmaXhsZW4gLy8gOAorICAgICAgICAgICAgYnl0ZXNsZW4gPSBjbHMuX21heF9wcmVmaXhsZW4gLy8gOAogICAgICAgICAgICAgZGV0YWlscyA9IGlwX2ludC50b19ieXRlcyhieXRlc2xlbiwgJ2JpZycpCiAgICAgICAgICAgICBtc2cgPSAnTmV0bWFzayBwYXR0ZXJuICVyIG1peGVzIHplcm9lcyAmIG9uZXMnCiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZyAlIGRldGFpbHMpCiAgICAgICAgIHJldHVybiBwcmVmaXhsZW4KIAotICAgIGRlZiBfcmVwb3J0X2ludmFsaWRfbmV0bWFzayhzZWxmLCBuZXRtYXNrX3N0cik6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9yZXBvcnRfaW52YWxpZF9uZXRtYXNrKGNscywgbmV0bWFza19zdHIpOgogICAgICAgICBtc2cgPSAnJXIgaXMgbm90IGEgdmFsaWQgbmV0bWFzaycgJSBuZXRtYXNrX3N0cgogICAgICAgICByYWlzZSBOZXRtYXNrVmFsdWVFcnJvcihtc2cpIGZyb20gTm9uZQogCi0gICAgZGVmIF9wcmVmaXhfZnJvbV9wcmVmaXhfc3RyaW5nKHNlbGYsIHByZWZpeGxlbl9zdHIpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcHJlZml4X2Zyb21fcHJlZml4X3N0cmluZyhjbHMsIHByZWZpeGxlbl9zdHIpOgogICAgICAgICAiIiJSZXR1cm4gcHJlZml4IGxlbmd0aCBmcm9tIGEgbnVtZXJpYyBzdHJpbmcKIAogICAgICAgICBBcmdzOgpAQCAtNDc4LDE2ICs0ODksMTcgQEAKICAgICAgICAgIyBpbnQgYWxsb3dzIGEgbGVhZGluZyArLy0gYXMgd2VsbCBhcyBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlLAogICAgICAgICAjIHNvIHdlIGVuc3VyZSB0aGF0IGlzbid0IHRoZSBjYXNlCiAgICAgICAgIGlmIG5vdCBfQmFzZVY0Ll9ERUNJTUFMX0RJR0lUUy5pc3N1cGVyc2V0KHByZWZpeGxlbl9zdHIpOgotICAgICAgICAgICAgc2VsZi5fcmVwb3J0X2ludmFsaWRfbmV0bWFzayhwcmVmaXhsZW5fc3RyKQorICAgICAgICAgICAgY2xzLl9yZXBvcnRfaW52YWxpZF9uZXRtYXNrKHByZWZpeGxlbl9zdHIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHByZWZpeGxlbiA9IGludChwcmVmaXhsZW5fc3RyKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuX3JlcG9ydF9pbnZhbGlkX25ldG1hc2socHJlZml4bGVuX3N0cikKLSAgICAgICAgaWYgbm90ICgwIDw9IHByZWZpeGxlbiA8PSBzZWxmLl9tYXhfcHJlZml4bGVuKToKLSAgICAgICAgICAgIHNlbGYuX3JlcG9ydF9pbnZhbGlkX25ldG1hc2socHJlZml4bGVuX3N0cikKKyAgICAgICAgICAgIGNscy5fcmVwb3J0X2ludmFsaWRfbmV0bWFzayhwcmVmaXhsZW5fc3RyKQorICAgICAgICBpZiBub3QgKDAgPD0gcHJlZml4bGVuIDw9IGNscy5fbWF4X3ByZWZpeGxlbik6CisgICAgICAgICAgICBjbHMuX3JlcG9ydF9pbnZhbGlkX25ldG1hc2socHJlZml4bGVuX3N0cikKICAgICAgICAgcmV0dXJuIHByZWZpeGxlbgogCi0gICAgZGVmIF9wcmVmaXhfZnJvbV9pcF9zdHJpbmcoc2VsZiwgaXBfc3RyKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3ByZWZpeF9mcm9tX2lwX3N0cmluZyhjbHMsIGlwX3N0cik6CiAgICAgICAgICIiIlR1cm4gYSBuZXRtYXNrL2hvc3RtYXNrIHN0cmluZyBpbnRvIGEgcHJlZml4IGxlbmd0aAogCiAgICAgICAgIEFyZ3M6CkBAIC01MDEsMjQgKzUxMywyNyBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBQYXJzZSB0aGUgbmV0bWFzay9ob3N0bWFzayBsaWtlIGFuIElQIGFkZHJlc3MuCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGlwX2ludCA9IHNlbGYuX2lwX2ludF9mcm9tX3N0cmluZyhpcF9zdHIpCisgICAgICAgICAgICBpcF9pbnQgPSBjbHMuX2lwX2ludF9mcm9tX3N0cmluZyhpcF9zdHIpCiAgICAgICAgIGV4Y2VwdCBBZGRyZXNzVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuX3JlcG9ydF9pbnZhbGlkX25ldG1hc2soaXBfc3RyKQorICAgICAgICAgICAgY2xzLl9yZXBvcnRfaW52YWxpZF9uZXRtYXNrKGlwX3N0cikKIAogICAgICAgICAjIFRyeSBtYXRjaGluZyBhIG5ldG1hc2sgKHRoaXMgd291bGQgYmUgLzEqMCovIGFzIGEgYml0d2lzZSByZWdleHApLgogICAgICAgICAjIE5vdGUgdGhhdCB0aGUgdHdvIGFtYmlndW91cyBjYXNlcyAoYWxsLW9uZXMgYW5kIGFsbC16ZXJvZXMpIGFyZQogICAgICAgICAjIHRyZWF0ZWQgYXMgbmV0bWFza3MuCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcmVmaXhfZnJvbV9pcF9pbnQoaXBfaW50KQorICAgICAgICAgICAgcmV0dXJuIGNscy5fcHJlZml4X2Zyb21faXBfaW50KGlwX2ludCkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgIyBJbnZlcnQgdGhlIGJpdHMsIGFuZCB0cnkgbWF0Y2hpbmcgYSAvMCsxKy8gaG9zdG1hc2sgaW5zdGVhZC4KLSAgICAgICAgaXBfaW50IF49IHNlbGYuX0FMTF9PTkVTCisgICAgICAgIGlwX2ludCBePSBjbHMuX0FMTF9PTkVTCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcmVmaXhfZnJvbV9pcF9pbnQoaXBfaW50KQorICAgICAgICAgICAgcmV0dXJuIGNscy5fcHJlZml4X2Zyb21faXBfaW50KGlwX2ludCkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLl9yZXBvcnRfaW52YWxpZF9uZXRtYXNrKGlwX3N0cikKKyAgICAgICAgICAgIGNscy5fcmVwb3J0X2ludmFsaWRfbmV0bWFzayhpcF9zdHIpCisKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCAoc3RyKHNlbGYpLCkKIAogCiBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC01MzAsMTAgKzU0NSw3IEBACiAgICAgdXNlZCBieSBzaW5nbGUgSVAgYWRkcmVzc2VzLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgotICAgICAgICBpZiAobm90IGlzaW5zdGFuY2UoYWRkcmVzcywgYnl0ZXMpCi0gICAgICAgICAgICBhbmQgJy8nIGluIHN0cihhZGRyZXNzKSk6Ci0gICAgICAgICAgICByYWlzZSBBZGRyZXNzVmFsdWVFcnJvcigiVW5leHBlY3RlZCAnLycgaW4gJXIiICUgYWRkcmVzcykKKyAgICBfX3Nsb3RzX18gPSAoKQogCiAgICAgZGVmIF9faW50X18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9pcApAQCAtNTc5LDYgKzU5MSw5IEBACiAgICAgZGVmIF9nZXRfYWRkcmVzc19rZXkoc2VsZik6CiAgICAgICAgIHJldHVybiAoc2VsZi5fdmVyc2lvbiwgc2VsZikKIAorICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChzZWxmLl9pcCwpCisKIAogQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwogY2xhc3MgX0Jhc2VOZXR3b3JrKF9JUEFkZHJlc3NCYXNlKToKQEAgLTcyNSwyMSArNzQwLDIxIEBACiAKICAgICAgICAgICAgIGFkZHIxID0gaXBfbmV0d29yaygnMTkyLjAuMi4wLzI4JykKICAgICAgICAgICAgIGFkZHIyID0gaXBfbmV0d29yaygnMTkyLjAuMi4xLzMyJykKLSAgICAgICAgICAgIGFkZHIxLmFkZHJlc3NfZXhjbHVkZShhZGRyMikgPQorICAgICAgICAgICAgbGlzdChhZGRyMS5hZGRyZXNzX2V4Y2x1ZGUoYWRkcjIpKSA9CiAgICAgICAgICAgICAgICAgW0lQdjROZXR3b3JrKCcxOTIuMC4yLjAvMzInKSwgSVB2NE5ldHdvcmsoJzE5Mi4wLjIuMi8zMScpLAotICAgICAgICAgICAgICAgIElQdjROZXR3b3JrKCcxOTIuMC4yLjQvMzAnKSwgSVB2NE5ldHdvcmsoJzE5Mi4wLjIuOC8yOScpXQorICAgICAgICAgICAgICAgICBJUHY0TmV0d29yaygnMTkyLjAuMi40LzMwJyksIElQdjROZXR3b3JrKCcxOTIuMC4yLjgvMjknKV0KIAogICAgICAgICBvciBJUHY2OgogCiAgICAgICAgICAgICBhZGRyMSA9IGlwX25ldHdvcmsoJzIwMDE6ZGI4OjoxLzMyJykKICAgICAgICAgICAgIGFkZHIyID0gaXBfbmV0d29yaygnMjAwMTpkYjg6OjEvMTI4JykKLSAgICAgICAgICAgIGFkZHIxLmFkZHJlc3NfZXhjbHVkZShhZGRyMikgPQorICAgICAgICAgICAgbGlzdChhZGRyMS5hZGRyZXNzX2V4Y2x1ZGUoYWRkcjIpKSA9CiAgICAgICAgICAgICAgICAgW2lwX25ldHdvcmsoJzIwMDE6ZGI4OjoxLzEyOCcpLAotICAgICAgICAgICAgICAgIGlwX25ldHdvcmsoJzIwMDE6ZGI4OjoyLzEyNycpLAotICAgICAgICAgICAgICAgIGlwX25ldHdvcmsoJzIwMDE6ZGI4Ojo0LzEyNicpLAotICAgICAgICAgICAgICAgIGlwX25ldHdvcmsoJzIwMDE6ZGI4Ojo4LzEyNScpLAotICAgICAgICAgICAgICAgIC4uLgotICAgICAgICAgICAgICAgIGlwX25ldHdvcmsoJzIwMDE6ZGI4OjgwMDA6Oi8zMycpXQorICAgICAgICAgICAgICAgICBpcF9uZXR3b3JrKCcyMDAxOmRiODo6Mi8xMjcnKSwKKyAgICAgICAgICAgICAgICAgaXBfbmV0d29yaygnMjAwMTpkYjg6OjQvMTI2JyksCisgICAgICAgICAgICAgICAgIGlwX25ldHdvcmsoJzIwMDE6ZGI4Ojo4LzEyNScpLAorICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgaXBfbmV0d29yaygnMjAwMTpkYjg6ODAwMDo6LzMzJyldCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIG90aGVyOiBBbiBJUHY0TmV0d29yayBvciBJUHY2TmV0d29yayBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZS4KQEAgLTc2NSw3ICs3ODAsNyBAQAogICAgICAgICAgICAgICAgIG90aGVyLmJyb2FkY2FzdF9hZGRyZXNzIDw9IHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMgbm90IGNvbnRhaW5lZCBpbiAlcycgJSAob3RoZXIsIHNlbGYpKQogICAgICAgICBpZiBvdGhlciA9PSBzZWxmOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBNYWtlIHN1cmUgd2UncmUgY29tcGFyaW5nIHRoZSBuZXR3b3JrIG9mIG90aGVyLgogICAgICAgICBvdGhlciA9IG90aGVyLl9fY2xhc3NfXygnJXMvJXMnICUgKG90aGVyLm5ldHdvcmtfYWRkcmVzcywKQEAgLTkwMCwyMCArOTE1LDExIEBACiAgICAgICAgICAgICAgICAgJ3ByZWZpeCBsZW5ndGggZGlmZiAlZCBpcyBpbnZhbGlkIGZvciBuZXRibG9jayAlcycgJSAoCiAgICAgICAgICAgICAgICAgICAgIG5ld19wcmVmaXhsZW4sIHNlbGYpKQogCi0gICAgICAgIGZpcnN0ID0gc2VsZi5fX2NsYXNzX18oJyVzLyVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5uZXR3b3JrX2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJlZml4bGVuICsgcHJlZml4bGVuX2RpZmYpKQotCi0gICAgICAgIHlpZWxkIGZpcnN0Ci0gICAgICAgIGN1cnJlbnQgPSBmaXJzdAotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgYnJvYWRjYXN0ID0gY3VycmVudC5icm9hZGNhc3RfYWRkcmVzcwotICAgICAgICAgICAgaWYgYnJvYWRjYXN0ID09IHNlbGYuYnJvYWRjYXN0X2FkZHJlc3M6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBuZXdfYWRkciA9IHNlbGYuX2FkZHJlc3NfY2xhc3MoaW50KGJyb2FkY2FzdCkgKyAxKQotICAgICAgICAgICAgY3VycmVudCA9IHNlbGYuX19jbGFzc19fKCclcy8lcycgJSAobmV3X2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcHJlZml4bGVuKSkKLQorICAgICAgICBzdGFydCA9IGludChzZWxmLm5ldHdvcmtfYWRkcmVzcykKKyAgICAgICAgZW5kID0gaW50KHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MpICsgMQorICAgICAgICBzdGVwID0gKGludChzZWxmLmhvc3RtYXNrKSArIDEpID4+IHByZWZpeGxlbl9kaWZmCisgICAgICAgIGZvciBuZXdfYWRkciBpbiByYW5nZShzdGFydCwgZW5kLCBzdGVwKToKKyAgICAgICAgICAgIGN1cnJlbnQgPSBzZWxmLl9fY2xhc3NfXygobmV3X2FkZHIsIG5ld19wcmVmaXhsZW4pKQogICAgICAgICAgICAgeWllbGQgY3VycmVudAogCiAgICAgZGVmIHN1cGVybmV0KHNlbGYsIHByZWZpeGxlbl9kaWZmPTEsIG5ld19wcmVmaXg9Tm9uZSk6CkBAIC05NDcsMTUgKzk1MywxNSBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBzZXQgcHJlZml4bGVuX2RpZmYgYW5kIG5ld19wcmVmaXgnKQogICAgICAgICAgICAgcHJlZml4bGVuX2RpZmYgPSBzZWxmLl9wcmVmaXhsZW4gLSBuZXdfcHJlZml4CiAKLSAgICAgICAgaWYgc2VsZi5wcmVmaXhsZW4gLSBwcmVmaXhsZW5fZGlmZiA8IDA6CisgICAgICAgIG5ld19wcmVmaXhsZW4gPSBzZWxmLnByZWZpeGxlbiAtIHByZWZpeGxlbl9kaWZmCisgICAgICAgIGlmIG5ld19wcmVmaXhsZW4gPCAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAnY3VycmVudCBwcmVmaXhsZW4gaXMgJWQsIGNhbm5vdCBoYXZlIGEgcHJlZml4bGVuX2RpZmYgb2YgJWQnICUKICAgICAgICAgICAgICAgICAoc2VsZi5wcmVmaXhsZW4sIHByZWZpeGxlbl9kaWZmKSkKLSAgICAgICAgIyBUT0RPIChwbW9vZHkpOiBvcHRpbWl6ZSB0aGlzLgotICAgICAgICB0ID0gc2VsZi5fX2NsYXNzX18oJyVzLyVkJyAlIChzZWxmLm5ldHdvcmtfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmVmaXhsZW4gLSBwcmVmaXhsZW5fZGlmZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PUZhbHNlKQotICAgICAgICByZXR1cm4gdC5fX2NsYXNzX18oJyVzLyVkJyAlICh0Lm5ldHdvcmtfYWRkcmVzcywgdC5wcmVmaXhsZW4pKQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oKAorICAgICAgICAgICAgaW50KHNlbGYubmV0d29ya19hZGRyZXNzKSAmIChpbnQoc2VsZi5uZXRtYXNrKSA8PCBwcmVmaXhsZW5fZGlmZiksCisgICAgICAgICAgICBuZXdfcHJlZml4bGVuCisgICAgICAgICAgICApKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX211bHRpY2FzdChzZWxmKToKQEAgLTEwNDksMjEgKzEwNTUsNDkgQEAKIAogICAgICIiIgogCisgICAgX19zbG90c19fID0gKCkKKyAgICBfdmVyc2lvbiA9IDQKICAgICAjIEVxdWl2YWxlbnQgdG8gMjU1LjI1NS4yNTUuMjU1IG9yIDMyIGJpdHMgb2YgMSdzLgogICAgIF9BTExfT05FUyA9ICgyKipJUFY0TEVOR1RIKSAtIDEKICAgICBfREVDSU1BTF9ESUdJVFMgPSBmcm96ZW5zZXQoJzAxMjM0NTY3ODknKQogCiAgICAgIyB0aGUgdmFsaWQgb2N0ZXRzIGZvciBob3N0IGFuZCBuZXRtYXNrcy4gb25seSB1c2VmdWwgZm9yIElQdjQuCi0gICAgX3ZhbGlkX21hc2tfb2N0ZXRzID0gZnJvemVuc2V0KCgyNTUsIDI1NCwgMjUyLCAyNDgsIDI0MCwgMjI0LCAxOTIsIDEyOCwgMCkpCisgICAgX3ZhbGlkX21hc2tfb2N0ZXRzID0gZnJvemVuc2V0KHsyNTUsIDI1NCwgMjUyLCAyNDgsIDI0MCwgMjI0LCAxOTIsIDEyOCwgMH0pCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcyk6Ci0gICAgICAgIHNlbGYuX3ZlcnNpb24gPSA0Ci0gICAgICAgIHNlbGYuX21heF9wcmVmaXhsZW4gPSBJUFY0TEVOR1RICisgICAgX21heF9wcmVmaXhsZW4gPSBJUFY0TEVOR1RICisgICAgIyBUaGVyZSBhcmUgb25seSBhIGhhbmRmdWwgb2YgdmFsaWQgdjQgbmV0bWFza3MsIHNvIHdlIGNhY2hlIHRoZW0gYWxsCisgICAgIyB3aGVuIGNvbnN0cnVjdGVkIChzZWUgX21ha2VfbmV0bWFzaygpKS4KKyAgICBfbmV0bWFza19jYWNoZSA9IHt9CiAKICAgICBkZWYgX2V4cGxvZGVfc2hvcnRoYW5kX2lwX3N0cmluZyhzZWxmKToKICAgICAgICAgcmV0dXJuIHN0cihzZWxmKQogCi0gICAgZGVmIF9pcF9pbnRfZnJvbV9zdHJpbmcoc2VsZiwgaXBfc3RyKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX21ha2VfbmV0bWFzayhjbHMsIGFyZyk6CisgICAgICAgICIiIk1ha2UgYSAobmV0bWFzaywgcHJlZml4X2xlbikgdHVwbGUgZnJvbSB0aGUgZ2l2ZW4gYXJndW1lbnQuCisKKyAgICAgICAgQXJndW1lbnQgY2FuIGJlOgorICAgICAgICAtIGFuIGludGVnZXIgKHRoZSBwcmVmaXggbGVuZ3RoKQorICAgICAgICAtIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcHJlZml4IGxlbmd0aCAoZS5nLiAiMjQiKQorICAgICAgICAtIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcHJlZml4IG5ldG1hc2sgKGUuZy4gIjI1NS4yNTUuMjU1LjAiKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgYXJnIG5vdCBpbiBjbHMuX25ldG1hc2tfY2FjaGU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgaW50KToKKyAgICAgICAgICAgICAgICBwcmVmaXhsZW4gPSBhcmcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBhIG5ldG1hc2sgaW4gcHJlZml4IGxlbmd0aCBmb3JtCisgICAgICAgICAgICAgICAgICAgIHByZWZpeGxlbiA9IGNscy5fcHJlZml4X2Zyb21fcHJlZml4X3N0cmluZyhhcmcpCisgICAgICAgICAgICAgICAgZXhjZXB0IE5ldG1hc2tWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBhIG5ldG1hc2sgb3IgaG9zdG1hc2sgaW4gZG90dGVkLXF1YWQgZm9ybS4KKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1heSByYWlzZSBOZXRtYXNrVmFsdWVFcnJvci4KKyAgICAgICAgICAgICAgICAgICAgcHJlZml4bGVuID0gY2xzLl9wcmVmaXhfZnJvbV9pcF9zdHJpbmcoYXJnKQorICAgICAgICAgICAgbmV0bWFzayA9IElQdjRBZGRyZXNzKGNscy5faXBfaW50X2Zyb21fcHJlZml4KHByZWZpeGxlbikpCisgICAgICAgICAgICBjbHMuX25ldG1hc2tfY2FjaGVbYXJnXSA9IG5ldG1hc2ssIHByZWZpeGxlbgorICAgICAgICByZXR1cm4gY2xzLl9uZXRtYXNrX2NhY2hlW2FyZ10KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfaXBfaW50X2Zyb21fc3RyaW5nKGNscywgaXBfc3RyKToKICAgICAgICAgIiIiVHVybiB0aGUgZ2l2ZW4gSVAgc3RyaW5nIGludG8gYW4gaW50ZWdlciBmb3IgY29tcGFyaXNvbi4KIAogICAgICAgICBBcmdzOgpAQCAtMTA4NCwxMSArMTExOCwxMiBAQAogICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IoIkV4cGVjdGVkIDQgb2N0ZXRzIGluICVyIiAlIGlwX3N0cikKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMobWFwKHNlbGYuX3BhcnNlX29jdGV0LCBvY3RldHMpLCAnYmlnJykKKyAgICAgICAgICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhtYXAoY2xzLl9wYXJzZV9vY3RldCwgb2N0ZXRzKSwgJ2JpZycpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGV4YzoKICAgICAgICAgICAgIHJhaXNlIEFkZHJlc3NWYWx1ZUVycm9yKCIlcyBpbiAlciIgJSAoZXhjLCBpcF9zdHIpKSBmcm9tIE5vbmUKIAotICAgIGRlZiBfcGFyc2Vfb2N0ZXQoc2VsZiwgb2N0ZXRfc3RyKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3BhcnNlX29jdGV0KGNscywgb2N0ZXRfc3RyKToKICAgICAgICAgIiIiQ29udmVydCBhIGRlY2ltYWwgb2N0ZXQgaW50byBhbiBpbnRlZ2VyLgogCiAgICAgICAgIEFyZ3M6CkBAIC0xMTA0LDcgKzExMzksNyBAQAogICAgICAgICBpZiBub3Qgb2N0ZXRfc3RyOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRW1wdHkgb2N0ZXQgbm90IHBlcm1pdHRlZCIpCiAgICAgICAgICMgV2hpdGVsaXN0IHRoZSBjaGFyYWN0ZXJzLCBzaW5jZSBpbnQoKSBhbGxvd3MgYSBsb3Qgb2YgYml6YXJyZSBzdHVmZi4KLSAgICAgICAgaWYgbm90IHNlbGYuX0RFQ0lNQUxfRElHSVRTLmlzc3VwZXJzZXQob2N0ZXRfc3RyKToKKyAgICAgICAgaWYgbm90IGNscy5fREVDSU1BTF9ESUdJVFMuaXNzdXBlcnNldChvY3RldF9zdHIpOgogICAgICAgICAgICAgbXNnID0gIk9ubHkgZGVjaW1hbCBkaWdpdHMgcGVybWl0dGVkIGluICVyIgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cgJSBvY3RldF9zdHIpCiAgICAgICAgICMgV2UgZG8gdGhlIGxlbmd0aCBjaGVjayBzZWNvbmQsIHNpbmNlIHRoZSBpbnZhbGlkIGNoYXJhY3RlciBlcnJvcgpAQCAtMTEyNCw3ICsxMTU5LDggQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9jdGV0ICVkICg+IDI1NSkgbm90IHBlcm1pdHRlZCIgJSBvY3RldF9pbnQpCiAgICAgICAgIHJldHVybiBvY3RldF9pbnQKIAotICAgIGRlZiBfc3RyaW5nX2Zyb21faXBfaW50KHNlbGYsIGlwX2ludCk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zdHJpbmdfZnJvbV9pcF9pbnQoY2xzLCBpcF9pbnQpOgogICAgICAgICAiIiJUdXJucyBhIDMyLWJpdCBpbnRlZ2VyIGludG8gZG90dGVkIGRlY2ltYWwgbm90YXRpb24uCiAKICAgICAgICAgQXJnczoKQEAgLTExODgsNiArMTIyNCwxNSBAQAogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICBkZWYgX3JldmVyc2VfcG9pbnRlcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZXZlcnNlIEROUyBwb2ludGVyIG5hbWUgZm9yIHRoZSBJUHY0IGFkZHJlc3MuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBtZXRob2QgZGVzY3JpYmVkIGluIFJGQzEwMzUgMy41LgorCisgICAgICAgICIiIgorICAgICAgICByZXZlcnNlX29jdGV0cyA9IHN0cihzZWxmKS5zcGxpdCgnLicpWzo6LTFdCisgICAgICAgIHJldHVybiAnLicuam9pbihyZXZlcnNlX29jdGV0cykgKyAnLmluLWFkZHIuYXJwYScKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBtYXhfcHJlZml4bGVuKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbWF4X3ByZWZpeGxlbgpAQCAtMTIwMSw2ICsxMjQ2LDggQEAKIAogICAgICIiIlJlcHJlc2VudCBhbmQgbWFuaXB1bGF0ZSBzaW5nbGUgSVB2NCBBZGRyZXNzZXMuIiIiCiAKKyAgICBfX3Nsb3RzX18gPSAoJ19pcCcsICdfX3dlYWtyZWZfXycpCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcyk6CiAKICAgICAgICAgIiIiCkBAIC0xMjE3LDkgKzEyNjQsNiBAQAogICAgICAgICAgICAgQWRkcmVzc1ZhbHVlRXJyb3I6IElmIGlwYWRkcmVzcyBpc24ndCBhIHZhbGlkIElQdjQgYWRkcmVzcy4KIAogICAgICAgICAiIiIKLSAgICAgICAgX0Jhc2VBZGRyZXNzLl9faW5pdF9fKHNlbGYsIGFkZHJlc3MpCi0gICAgICAgIF9CYXNlVjQuX19pbml0X18oc2VsZiwgYWRkcmVzcykKLQogICAgICAgICAjIEVmZmljaWVudCBjb25zdHJ1Y3RvciBmcm9tIGludGVnZXIuCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYWRkcmVzcywgaW50KToKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ludF9hZGRyZXNzKGFkZHJlc3MpCkBAIC0xMjM1LDYgKzEyNzksOCBAQAogICAgICAgICAjIEFzc3VtZSBpbnB1dCBhcmd1bWVudCB0byBiZSBzdHJpbmcgb3IgYW55IG9iamVjdCByZXByZXNlbnRhdGlvbgogICAgICAgICAjIHdoaWNoIGNvbnZlcnRzIGludG8gYSBmb3JtYXR0ZWQgSVAgc3RyaW5nLgogICAgICAgICBhZGRyX3N0ciA9IHN0cihhZGRyZXNzKQorICAgICAgICBpZiAnLycgaW4gYWRkcl9zdHI6CisgICAgICAgICAgICByYWlzZSBBZGRyZXNzVmFsdWVFcnJvcigiVW5leHBlY3RlZCAnLycgaW4gJXIiICUgYWRkcmVzcykKICAgICAgICAgc2VsZi5faXAgPSBzZWxmLl9pcF9pbnRfZnJvbV9zdHJpbmcoYWRkcl9zdHIpCiAKICAgICBAcHJvcGVydHkKQEAgLTEyNTEsOCArMTI5Nyw3IEBACiAgICAgICAgICAgICAgcmVzZXJ2ZWQgSVB2NCBOZXR3b3JrIHJhbmdlLgogCiAgICAgICAgICIiIgotICAgICAgICByZXNlcnZlZF9uZXR3b3JrID0gSVB2NE5ldHdvcmsoJzI0MC4wLjAuMC80JykKLSAgICAgICAgcmV0dXJuIHNlbGYgaW4gcmVzZXJ2ZWRfbmV0d29yaworICAgICAgICByZXR1cm4gc2VsZiBpbiBzZWxmLl9jb25zdGFudHMuX3Jlc2VydmVkX25ldHdvcmsKIAogICAgIEBwcm9wZXJ0eQogICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKQEAgLTEyNjQsMjEgKzEzMDksMTIgQEAKICAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LgogCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gKHNlbGYgaW4gSVB2NE5ldHdvcmsoJzAuMC4wLjAvOCcpIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTAuMC4wLjAvOCcpIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTI3LjAuMC4wLzgnKSBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE2OS4yNTQuMC4wLzE2Jykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxNzIuMTYuMC4wLzEyJykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4wLjAvMjknKSBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4wLjAuMTcwLzMxJykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4yLjAvMjQnKSBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4xNjguMC4wLzE2Jykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTguMTguMC4wLzE1Jykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTguNTEuMTAwLjAvMjQnKSBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzIwMy4wLjExMy4wLzI0Jykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyNDAuMC4wLjAvNCcpIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjU1LjI1NS4yNTUuMjU1LzMyJykpCisgICAgICAgIHJldHVybiBhbnkoc2VsZiBpbiBuZXQgZm9yIG5ldCBpbiBzZWxmLl9jb25zdGFudHMuX3ByaXZhdGVfbmV0d29ya3MpCiAKKyAgICBAcHJvcGVydHkKKyAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCisgICAgZGVmIGlzX2dsb2JhbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYgbm90IGluIHNlbGYuX2NvbnN0YW50cy5fcHVibGljX25ldHdvcmsgYW5kIG5vdCBzZWxmLmlzX3ByaXZhdGUKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19tdWx0aWNhc3Qoc2VsZik6CkBAIC0xMjg5LDggKzEzMjUsNyBAQAogICAgICAgICAgICAgU2VlIFJGQyAzMTcxIGZvciBkZXRhaWxzLgogCiAgICAgICAgICIiIgotICAgICAgICBtdWx0aWNhc3RfbmV0d29yayA9IElQdjROZXR3b3JrKCcyMjQuMC4wLjAvNCcpCi0gICAgICAgIHJldHVybiBzZWxmIGluIG11bHRpY2FzdF9uZXR3b3JrCisgICAgICAgIHJldHVybiBzZWxmIGluIHNlbGYuX2NvbnN0YW50cy5fbXVsdGljYXN0X25ldHdvcmsKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc191bnNwZWNpZmllZChzZWxmKToKQEAgLTEzMDEsOCArMTMzNiw3IEBACiAgICAgICAgICAgICBSRkMgNTczNSAzLgogCiAgICAgICAgICIiIgotICAgICAgICB1bnNwZWNpZmllZF9hZGRyZXNzID0gSVB2NEFkZHJlc3MoJzAuMC4wLjAnKQotICAgICAgICByZXR1cm4gc2VsZiA9PSB1bnNwZWNpZmllZF9hZGRyZXNzCisgICAgICAgIHJldHVybiBzZWxmID09IHNlbGYuX2NvbnN0YW50cy5fdW5zcGVjaWZpZWRfYWRkcmVzcwogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX2xvb3BiYWNrKHNlbGYpOgpAQCAtMTMxMiw4ICsxMzQ2LDcgQEAKICAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBhIGxvb3BiYWNrIHBlciBSRkMgMzMzMC4KIAogICAgICAgICAiIiIKLSAgICAgICAgbG9vcGJhY2tfbmV0d29yayA9IElQdjROZXR3b3JrKCcxMjcuMC4wLjAvOCcpCi0gICAgICAgIHJldHVybiBzZWxmIGluIGxvb3BiYWNrX25ldHdvcmsKKyAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2VsZi5fY29uc3RhbnRzLl9sb29wYmFja19uZXR3b3JrCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfbGlua19sb2NhbChzZWxmKToKQEAgLTEzMjMsOCArMTM1Niw3IEBACiAgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbGluay1sb2NhbCBwZXIgUkZDIDM5MjcuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGxpbmtsb2NhbF9uZXR3b3JrID0gSVB2NE5ldHdvcmsoJzE2OS4yNTQuMC4wLzE2JykKLSAgICAgICAgcmV0dXJuIHNlbGYgaW4gbGlua2xvY2FsX25ldHdvcmsKKyAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2VsZi5fY29uc3RhbnRzLl9saW5rbG9jYWxfbmV0d29yawogCiAKIGNsYXNzIElQdjRJbnRlcmZhY2UoSVB2NEFkZHJlc3MpOgpAQCAtMTMzNiw2ICsxMzY4LDE4IEBACiAgICAgICAgICAgICBzZWxmLl9wcmVmaXhsZW4gPSBzZWxmLl9tYXhfcHJlZml4bGVuCiAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIElQdjRBZGRyZXNzLl9faW5pdF9fKHNlbGYsIGFkZHJlc3NbMF0pCisgICAgICAgICAgICBpZiBsZW4oYWRkcmVzcykgPiAxOgorICAgICAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IGludChhZGRyZXNzWzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmVmaXhsZW4gPSBzZWxmLl9tYXhfcHJlZml4bGVuCisKKyAgICAgICAgICAgIHNlbGYubmV0d29yayA9IElQdjROZXR3b3JrKGFkZHJlc3MsIHN0cmljdD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYubmV0bWFzayA9IHNlbGYubmV0d29yay5uZXRtYXNrCisgICAgICAgICAgICBzZWxmLmhvc3RtYXNrID0gc2VsZi5uZXR3b3JrLmhvc3RtYXNrCisgICAgICAgICAgICByZXR1cm4KKwogICAgICAgICBhZGRyID0gX3NwbGl0X29wdGlvbmFsX25ldG1hc2soYWRkcmVzcykKICAgICAgICAgSVB2NEFkZHJlc3MuX19pbml0X18oc2VsZiwgYWRkclswXSkKIApAQCAtMTM3NSw2ICsxNDE5LDggQEAKICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9pcCBeIHNlbGYuX3ByZWZpeGxlbiBeIGludChzZWxmLm5ldHdvcmsubmV0d29ya19hZGRyZXNzKQogCisgICAgX19yZWR1Y2VfXyA9IF9JUEFkZHJlc3NCYXNlLl9fcmVkdWNlX18KKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpcChzZWxmKToKICAgICAgICAgcmV0dXJuIElQdjRBZGRyZXNzKHNlbGYuX2lwKQpAQCAtMTQ0NywyNCArMTQ5MywzMCBAQAogICAgICAgICAgICAgICBzdXBwbGllZC4KIAogICAgICAgICAiIiIKLQotICAgICAgICBfQmFzZVY0Ll9faW5pdF9fKHNlbGYsIGFkZHJlc3MpCiAgICAgICAgIF9CYXNlTmV0d29yay5fX2luaXRfXyhzZWxmLCBhZGRyZXNzKQogCi0gICAgICAgICMgQ29uc3RydWN0aW5nIGZyb20gYSBwYWNrZWQgYWRkcmVzcwotICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIGJ5dGVzKToKKyAgICAgICAgIyBDb25zdHJ1Y3RpbmcgZnJvbSBhIHBhY2tlZCBhZGRyZXNzIG9yIGludGVnZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhZGRyZXNzLCAoaW50LCBieXRlcykpOgogICAgICAgICAgICAgc2VsZi5uZXR3b3JrX2FkZHJlc3MgPSBJUHY0QWRkcmVzcyhhZGRyZXNzKQotICAgICAgICAgICAgc2VsZi5fcHJlZml4bGVuID0gc2VsZi5fbWF4X3ByZWZpeGxlbgotICAgICAgICAgICAgc2VsZi5uZXRtYXNrID0gSVB2NEFkZHJlc3Moc2VsZi5fQUxMX09ORVMpCi0gICAgICAgICAgICAjZml4bWU6IGFkZHJlc3MvbmV0d29yayB0ZXN0IGhlcmUKKyAgICAgICAgICAgIHNlbGYubmV0bWFzaywgc2VsZi5fcHJlZml4bGVuID0gc2VsZi5fbWFrZV9uZXRtYXNrKHNlbGYuX21heF9wcmVmaXhsZW4pCisgICAgICAgICAgICAjZml4bWU6IGFkZHJlc3MvbmV0d29yayB0ZXN0IGhlcmUuCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAjIEVmZmljaWVudCBjb25zdHJ1Y3RvciBmcm9tIGludGVnZXIuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoYWRkcmVzcywgaW50KToKLSAgICAgICAgICAgIHNlbGYubmV0d29ya19hZGRyZXNzID0gSVB2NEFkZHJlc3MoYWRkcmVzcykKLSAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IHNlbGYuX21heF9wcmVmaXhsZW4KLSAgICAgICAgICAgIHNlbGYubmV0bWFzayA9IElQdjRBZGRyZXNzKHNlbGYuX0FMTF9PTkVTKQotICAgICAgICAgICAgI2ZpeG1lOiBhZGRyZXNzL25ldHdvcmsgdGVzdCBoZXJlLgorICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIGlmIGxlbihhZGRyZXNzKSA+IDE6CisgICAgICAgICAgICAgICAgYXJnID0gYWRkcmVzc1sxXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFdlIHdlcmVuJ3QgZ2l2ZW4gYW4gYWRkcmVzc1sxXQorICAgICAgICAgICAgICAgIGFyZyA9IHNlbGYuX21heF9wcmVmaXhsZW4KKyAgICAgICAgICAgIHNlbGYubmV0d29ya19hZGRyZXNzID0gSVB2NEFkZHJlc3MoYWRkcmVzc1swXSkKKyAgICAgICAgICAgIHNlbGYubmV0bWFzaywgc2VsZi5fcHJlZml4bGVuID0gc2VsZi5fbWFrZV9uZXRtYXNrKGFyZykKKyAgICAgICAgICAgIHBhY2tlZCA9IGludChzZWxmLm5ldHdvcmtfYWRkcmVzcykKKyAgICAgICAgICAgIGlmIHBhY2tlZCAmIGludChzZWxmLm5ldG1hc2spICE9IHBhY2tlZDoKKyAgICAgICAgICAgICAgICBpZiBzdHJpY3Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzIGhhcyBob3N0IGJpdHMgc2V0JyAlIHNlbGYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXR3b3JrX2FkZHJlc3MgPSBJUHY0QWRkcmVzcyhwYWNrZWQgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludChzZWxmLm5ldG1hc2spKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBBc3N1bWUgaW5wdXQgYXJndW1lbnQgdG8gYmUgc3RyaW5nIG9yIGFueSBvYmplY3QgcmVwcmVzZW50YXRpb24KQEAgLTE0NzMsMTYgKzE1MjUsMTAgQEAKICAgICAgICAgc2VsZi5uZXR3b3JrX2FkZHJlc3MgPSBJUHY0QWRkcmVzcyhzZWxmLl9pcF9pbnRfZnJvbV9zdHJpbmcoYWRkclswXSkpCiAKICAgICAgICAgaWYgbGVuKGFkZHIpID09IDI6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgYSBuZXRtYXNrIGluIHByZWZpeCBsZW5ndGggZm9ybQotICAgICAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IHNlbGYuX3ByZWZpeF9mcm9tX3ByZWZpeF9zdHJpbmcoYWRkclsxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBOZXRtYXNrVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBhIG5ldG1hc2sgb3IgaG9zdG1hc2sgaW4gZG90dGVkLXF1YWQgZm9ybS4KLSAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIE5ldG1hc2tWYWx1ZUVycm9yLgotICAgICAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IHNlbGYuX3ByZWZpeF9mcm9tX2lwX3N0cmluZyhhZGRyWzFdKQorICAgICAgICAgICAgYXJnID0gYWRkclsxXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fcHJlZml4bGVuID0gc2VsZi5fbWF4X3ByZWZpeGxlbgotICAgICAgICBzZWxmLm5ldG1hc2sgPSBJUHY0QWRkcmVzcyhzZWxmLl9pcF9pbnRfZnJvbV9wcmVmaXgoc2VsZi5fcHJlZml4bGVuKSkKKyAgICAgICAgICAgIGFyZyA9IHNlbGYuX21heF9wcmVmaXhsZW4KKyAgICAgICAgc2VsZi5uZXRtYXNrLCBzZWxmLl9wcmVmaXhsZW4gPSBzZWxmLl9tYWtlX25ldG1hc2soYXJnKQogCiAgICAgICAgIGlmIHN0cmljdDoKICAgICAgICAgICAgIGlmIChJUHY0QWRkcmVzcyhpbnQoc2VsZi5uZXR3b3JrX2FkZHJlc3MpICYgaW50KHNlbGYubmV0bWFzaykpICE9CkBAIC0xNTA5LDYgKzE1NTUsMzkgQEAKICAgICAgICAgICAgICAgICBub3Qgc2VsZi5pc19wcml2YXRlKQogCiAKK2NsYXNzIF9JUHY0Q29uc3RhbnRzOgorICAgIF9saW5rbG9jYWxfbmV0d29yayA9IElQdjROZXR3b3JrKCcxNjkuMjU0LjAuMC8xNicpCisKKyAgICBfbG9vcGJhY2tfbmV0d29yayA9IElQdjROZXR3b3JrKCcxMjcuMC4wLjAvOCcpCisKKyAgICBfbXVsdGljYXN0X25ldHdvcmsgPSBJUHY0TmV0d29yaygnMjI0LjAuMC4wLzQnKQorCisgICAgX3B1YmxpY19uZXR3b3JrID0gSVB2NE5ldHdvcmsoJzEwMC42NC4wLjAvMTAnKQorCisgICAgX3ByaXZhdGVfbmV0d29ya3MgPSBbCisgICAgICAgIElQdjROZXR3b3JrKCcwLjAuMC4wLzgnKSwKKyAgICAgICAgSVB2NE5ldHdvcmsoJzEwLjAuMC4wLzgnKSwKKyAgICAgICAgSVB2NE5ldHdvcmsoJzEyNy4wLjAuMC84JyksCisgICAgICAgIElQdjROZXR3b3JrKCcxNjkuMjU0LjAuMC8xNicpLAorICAgICAgICBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpLAorICAgICAgICBJUHY0TmV0d29yaygnMTkyLjAuMC4wLzI5JyksCisgICAgICAgIElQdjROZXR3b3JrKCcxOTIuMC4wLjE3MC8zMScpLAorICAgICAgICBJUHY0TmV0d29yaygnMTkyLjAuMi4wLzI0JyksCisgICAgICAgIElQdjROZXR3b3JrKCcxOTIuMTY4LjAuMC8xNicpLAorICAgICAgICBJUHY0TmV0d29yaygnMTk4LjE4LjAuMC8xNScpLAorICAgICAgICBJUHY0TmV0d29yaygnMTk4LjUxLjEwMC4wLzI0JyksCisgICAgICAgIElQdjROZXR3b3JrKCcyMDMuMC4xMTMuMC8yNCcpLAorICAgICAgICBJUHY0TmV0d29yaygnMjQwLjAuMC4wLzQnKSwKKyAgICAgICAgSVB2NE5ldHdvcmsoJzI1NS4yNTUuMjU1LjI1NS8zMicpLAorICAgICAgICBdCisKKyAgICBfcmVzZXJ2ZWRfbmV0d29yayA9IElQdjROZXR3b3JrKCcyNDAuMC4wLjAvNCcpCisKKyAgICBfdW5zcGVjaWZpZWRfYWRkcmVzcyA9IElQdjRBZGRyZXNzKCcwLjAuMC4wJykKKworCitJUHY0QWRkcmVzcy5fY29uc3RhbnRzID0gX0lQdjRDb25zdGFudHMKKwogCiBjbGFzcyBfQmFzZVY2OgogCkBAIC0xNTE5LDE1ICsxNTk4LDM3IEBACiAKICAgICAiIiIKIAorICAgIF9fc2xvdHNfXyA9ICgpCisgICAgX3ZlcnNpb24gPSA2CiAgICAgX0FMTF9PTkVTID0gKDIqKklQVjZMRU5HVEgpIC0gMQogICAgIF9IRVhURVRfQ09VTlQgPSA4CiAgICAgX0hFWF9ESUdJVFMgPSBmcm96ZW5zZXQoJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnKQorICAgIF9tYXhfcHJlZml4bGVuID0gSVBWNkxFTkdUSAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgotICAgICAgICBzZWxmLl92ZXJzaW9uID0gNgotICAgICAgICBzZWxmLl9tYXhfcHJlZml4bGVuID0gSVBWNkxFTkdUSAorICAgICMgVGhlcmUgYXJlIG9ubHkgYSBidW5jaCBvZiB2YWxpZCB2NiBuZXRtYXNrcywgc28gd2UgY2FjaGUgdGhlbSBhbGwKKyAgICAjIHdoZW4gY29uc3RydWN0ZWQgKHNlZSBfbWFrZV9uZXRtYXNrKCkpLgorICAgIF9uZXRtYXNrX2NhY2hlID0ge30KIAotICAgIGRlZiBfaXBfaW50X2Zyb21fc3RyaW5nKHNlbGYsIGlwX3N0cik6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9tYWtlX25ldG1hc2soY2xzLCBhcmcpOgorICAgICAgICAiIiJNYWtlIGEgKG5ldG1hc2ssIHByZWZpeF9sZW4pIHR1cGxlIGZyb20gdGhlIGdpdmVuIGFyZ3VtZW50LgorCisgICAgICAgIEFyZ3VtZW50IGNhbiBiZToKKyAgICAgICAgLSBhbiBpbnRlZ2VyICh0aGUgcHJlZml4IGxlbmd0aCkKKyAgICAgICAgLSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHByZWZpeCBsZW5ndGggKGUuZy4gIjI0IikKKyAgICAgICAgLSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHByZWZpeCBuZXRtYXNrIChlLmcuICIyNTUuMjU1LjI1NS4wIikKKyAgICAgICAgIiIiCisgICAgICAgIGlmIGFyZyBub3QgaW4gY2xzLl9uZXRtYXNrX2NhY2hlOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIGludCk6CisgICAgICAgICAgICAgICAgcHJlZml4bGVuID0gYXJnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByZWZpeGxlbiA9IGNscy5fcHJlZml4X2Zyb21fcHJlZml4X3N0cmluZyhhcmcpCisgICAgICAgICAgICBuZXRtYXNrID0gSVB2NkFkZHJlc3MoY2xzLl9pcF9pbnRfZnJvbV9wcmVmaXgocHJlZml4bGVuKSkKKyAgICAgICAgICAgIGNscy5fbmV0bWFza19jYWNoZVthcmddID0gbmV0bWFzaywgcHJlZml4bGVuCisgICAgICAgIHJldHVybiBjbHMuX25ldG1hc2tfY2FjaGVbYXJnXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9pcF9pbnRfZnJvbV9zdHJpbmcoY2xzLCBpcF9zdHIpOgogICAgICAgICAiIiJUdXJuIGFuIElQdjYgaXBfc3RyIGludG8gYW4gaW50ZWdlci4KIAogICAgICAgICBBcmdzOgpAQCAtMTU2Myw3ICsxNjY0LDcgQEAKICAgICAgICAgIyBBbiBJUHY2IGFkZHJlc3MgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gOCBjb2xvbnMgKDkgcGFydHMpLgogICAgICAgICAjIFRoZSBleHRyYSBjb2xvbiBjb21lcyBmcm9tIHVzaW5nIHRoZSAiOjoiIG5vdGF0aW9uIGZvciBhIHNpbmdsZQogICAgICAgICAjIGxlYWRpbmcgb3IgdHJhaWxpbmcgemVybyBwYXJ0LgotICAgICAgICBfbWF4X3BhcnRzID0gc2VsZi5fSEVYVEVUX0NPVU5UICsgMQorICAgICAgICBfbWF4X3BhcnRzID0gY2xzLl9IRVhURVRfQ09VTlQgKyAxCiAgICAgICAgIGlmIGxlbihwYXJ0cykgPiBfbWF4X3BhcnRzOgogICAgICAgICAgICAgbXNnID0gIkF0IG1vc3QgJWQgY29sb25zIHBlcm1pdHRlZCBpbiAlciIgJSAoX21heF9wYXJ0cy0xLCBpcF9zdHIpCiAgICAgICAgICAgICByYWlzZSBBZGRyZXNzVmFsdWVFcnJvcihtc2cpCkBAIC0xNTk1LDE3ICsxNjk2LDE3IEBACiAgICAgICAgICAgICAgICAgaWYgcGFydHNfbG86CiAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJUcmFpbGluZyAnOicgb25seSBwZXJtaXR0ZWQgYXMgcGFydCBvZiAnOjonIGluICVyIgogICAgICAgICAgICAgICAgICAgICByYWlzZSBBZGRyZXNzVmFsdWVFcnJvcihtc2cgJSBpcF9zdHIpICAjIDokIHJlcXVpcmVzIDo6JAotICAgICAgICAgICAgcGFydHNfc2tpcHBlZCA9IHNlbGYuX0hFWFRFVF9DT1VOVCAtIChwYXJ0c19oaSArIHBhcnRzX2xvKQorICAgICAgICAgICAgcGFydHNfc2tpcHBlZCA9IGNscy5fSEVYVEVUX0NPVU5UIC0gKHBhcnRzX2hpICsgcGFydHNfbG8pCiAgICAgICAgICAgICBpZiBwYXJ0c19za2lwcGVkIDwgMToKICAgICAgICAgICAgICAgICBtc2cgPSAiRXhwZWN0ZWQgYXQgbW9zdCAlZCBvdGhlciBwYXJ0cyB3aXRoICc6OicgaW4gJXIiCi0gICAgICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IobXNnICUgKHNlbGYuX0hFWFRFVF9DT1VOVC0xLCBpcF9zdHIpKQorICAgICAgICAgICAgICAgIHJhaXNlIEFkZHJlc3NWYWx1ZUVycm9yKG1zZyAlIChjbHMuX0hFWFRFVF9DT1VOVC0xLCBpcF9zdHIpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBPdGhlcndpc2UsIGFsbG9jYXRlIHRoZSBlbnRpcmUgYWRkcmVzcyB0byBwYXJ0c19oaS4gIFRoZQogICAgICAgICAgICAgIyBlbmRwb2ludHMgY291bGQgc3RpbGwgYmUgZW1wdHksIGJ1dCBfcGFyc2VfaGV4dGV0KCkgd2lsbCBjaGVjawogICAgICAgICAgICAgIyBmb3IgdGhhdC4KLSAgICAgICAgICAgIGlmIGxlbihwYXJ0cykgIT0gc2VsZi5fSEVYVEVUX0NPVU5UOgorICAgICAgICAgICAgaWYgbGVuKHBhcnRzKSAhPSBjbHMuX0hFWFRFVF9DT1VOVDoKICAgICAgICAgICAgICAgICBtc2cgPSAiRXhhY3RseSAlZCBwYXJ0cyBleHBlY3RlZCB3aXRob3V0ICc6OicgaW4gJXIiCi0gICAgICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IobXNnICUgKHNlbGYuX0hFWFRFVF9DT1VOVCwgaXBfc3RyKSkKKyAgICAgICAgICAgICAgICByYWlzZSBBZGRyZXNzVmFsdWVFcnJvcihtc2cgJSAoY2xzLl9IRVhURVRfQ09VTlQsIGlwX3N0cikpCiAgICAgICAgICAgICBpZiBub3QgcGFydHNbMF06CiAgICAgICAgICAgICAgICAgbXNnID0gIkxlYWRpbmcgJzonIG9ubHkgcGVybWl0dGVkIGFzIHBhcnQgb2YgJzo6JyBpbiAlciIKICAgICAgICAgICAgICAgICByYWlzZSBBZGRyZXNzVmFsdWVFcnJvcihtc2cgJSBpcF9zdHIpICAjIF46IHJlcXVpcmVzIF46OgpAQCAtMTYyMSwxNiArMTcyMiwxNyBAQAogICAgICAgICAgICAgaXBfaW50ID0gMAogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UocGFydHNfaGkpOgogICAgICAgICAgICAgICAgIGlwX2ludCA8PD0gMTYKLSAgICAgICAgICAgICAgICBpcF9pbnQgfD0gc2VsZi5fcGFyc2VfaGV4dGV0KHBhcnRzW2ldKQorICAgICAgICAgICAgICAgIGlwX2ludCB8PSBjbHMuX3BhcnNlX2hleHRldChwYXJ0c1tpXSkKICAgICAgICAgICAgIGlwX2ludCA8PD0gMTYgKiBwYXJ0c19za2lwcGVkCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgtcGFydHNfbG8sIDApOgogICAgICAgICAgICAgICAgIGlwX2ludCA8PD0gMTYKLSAgICAgICAgICAgICAgICBpcF9pbnQgfD0gc2VsZi5fcGFyc2VfaGV4dGV0KHBhcnRzW2ldKQorICAgICAgICAgICAgICAgIGlwX2ludCB8PSBjbHMuX3BhcnNlX2hleHRldChwYXJ0c1tpXSkKICAgICAgICAgICAgIHJldHVybiBpcF9pbnQKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IoIiVzIGluICVyIiAlIChleGMsIGlwX3N0cikpIGZyb20gTm9uZQogCi0gICAgZGVmIF9wYXJzZV9oZXh0ZXQoc2VsZiwgaGV4dGV0X3N0cik6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wYXJzZV9oZXh0ZXQoY2xzLCBoZXh0ZXRfc3RyKToKICAgICAgICAgIiIiQ29udmVydCBhbiBJUHY2IGhleHRldCBzdHJpbmcgaW50byBhbiBpbnRlZ2VyLgogCiAgICAgICAgIEFyZ3M6CkBAIC0xNjQ1LDcgKzE3NDcsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICAjIFdoaXRlbGlzdCB0aGUgY2hhcmFjdGVycywgc2luY2UgaW50KCkgYWxsb3dzIGEgbG90IG9mIGJpemFycmUgc3R1ZmYuCi0gICAgICAgIGlmIG5vdCBzZWxmLl9IRVhfRElHSVRTLmlzc3VwZXJzZXQoaGV4dGV0X3N0cik6CisgICAgICAgIGlmIG5vdCBjbHMuX0hFWF9ESUdJVFMuaXNzdXBlcnNldChoZXh0ZXRfc3RyKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9ubHkgaGV4IGRpZ2l0cyBwZXJtaXR0ZWQgaW4gJXIiICUgaGV4dGV0X3N0cikKICAgICAgICAgIyBXZSBkbyB0aGUgbGVuZ3RoIGNoZWNrIHNlY29uZCwgc2luY2UgdGhlIGludmFsaWQgY2hhcmFjdGVyIGVycm9yCiAgICAgICAgICMgaXMgbGlrZWx5IHRvIGJlIG1vcmUgaW5mb3JtYXRpdmUgZm9yIHRoZSB1c2VyCkBAIC0xNjU1LDcgKzE3NTcsOCBAQAogICAgICAgICAjIExlbmd0aCBjaGVjayBtZWFucyB3ZSBjYW4gc2tpcCBjaGVja2luZyB0aGUgaW50ZWdlciB2YWx1ZQogICAgICAgICByZXR1cm4gaW50KGhleHRldF9zdHIsIDE2KQogCi0gICAgZGVmIF9jb21wcmVzc19oZXh0ZXRzKHNlbGYsIGhleHRldHMpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY29tcHJlc3NfaGV4dGV0cyhjbHMsIGhleHRldHMpOgogICAgICAgICAiIiJDb21wcmVzc2VzIGEgbGlzdCBvZiBoZXh0ZXRzLgogCiAgICAgICAgIENvbXByZXNzZXMgYSBsaXN0IG9mIHN0cmluZ3MsIHJlcGxhY2luZyB0aGUgbG9uZ2VzdCBjb250aW51b3VzCkBAIC0xNzAyLDcgKzE4MDUsOCBAQAogCiAgICAgICAgIHJldHVybiBoZXh0ZXRzCiAKLSAgICBkZWYgX3N0cmluZ19mcm9tX2lwX2ludChzZWxmLCBpcF9pbnQ9Tm9uZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zdHJpbmdfZnJvbV9pcF9pbnQoY2xzLCBpcF9pbnQ9Tm9uZSk6CiAgICAgICAgICIiIlR1cm5zIGEgMTI4LWJpdCBpbnRlZ2VyIGludG8gaGV4YWRlY2ltYWwgbm90YXRpb24uCiAKICAgICAgICAgQXJnczoKQEAgLTE3MTYsMTUgKzE4MjAsMTUgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgaWYgaXBfaW50IGlzIE5vbmU6Ci0gICAgICAgICAgICBpcF9pbnQgPSBpbnQoc2VsZi5faXApCisgICAgICAgICAgICBpcF9pbnQgPSBpbnQoY2xzLl9pcCkKIAotICAgICAgICBpZiBpcF9pbnQgPiBzZWxmLl9BTExfT05FUzoKKyAgICAgICAgaWYgaXBfaW50ID4gY2xzLl9BTExfT05FUzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lQdjYgYWRkcmVzcyBpcyB0b28gbGFyZ2UnKQogCiAgICAgICAgIGhleF9zdHIgPSAnJTAzMngnICUgaXBfaW50CiAgICAgICAgIGhleHRldHMgPSBbJyV4JyAlIGludChoZXhfc3RyW3g6eCs0XSwgMTYpIGZvciB4IGluIHJhbmdlKDAsIDMyLCA0KV0KIAotICAgICAgICBoZXh0ZXRzID0gc2VsZi5fY29tcHJlc3NfaGV4dGV0cyhoZXh0ZXRzKQorICAgICAgICBoZXh0ZXRzID0gY2xzLl9jb21wcmVzc19oZXh0ZXRzKGhleHRldHMpCiAgICAgICAgIHJldHVybiAnOicuam9pbihoZXh0ZXRzKQogCiAgICAgZGVmIF9leHBsb2RlX3Nob3J0aGFuZF9pcF9zdHJpbmcoc2VsZik6CkBAIC0xNzUxLDYgKzE4NTUsMTUgQEAKICAgICAgICAgICAgIHJldHVybiAnJXMvJWQnICUgKCc6Jy5qb2luKHBhcnRzKSwgc2VsZi5fcHJlZml4bGVuKQogICAgICAgICByZXR1cm4gJzonLmpvaW4ocGFydHMpCiAKKyAgICBkZWYgX3JldmVyc2VfcG9pbnRlcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZXZlcnNlIEROUyBwb2ludGVyIG5hbWUgZm9yIHRoZSBJUHY2IGFkZHJlc3MuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBtZXRob2QgZGVzY3JpYmVkIGluIFJGQzM1OTYgMi41LgorCisgICAgICAgICIiIgorICAgICAgICByZXZlcnNlX2NoYXJzID0gc2VsZi5leHBsb2RlZFs6Oi0xXS5yZXBsYWNlKCc6JywgJycpCisgICAgICAgIHJldHVybiAnLicuam9pbihyZXZlcnNlX2NoYXJzKSArICcuaXA2LmFycGEnCisKICAgICBAcHJvcGVydHkKICAgICBkZWYgbWF4X3ByZWZpeGxlbihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX21heF9wcmVmaXhsZW4KQEAgLTE3NjQsNiArMTg3Nyw4IEBACiAKICAgICAiIiJSZXByZXNlbnQgYW5kIG1hbmlwdWxhdGUgc2luZ2xlIElQdjYgQWRkcmVzc2VzLiIiIgogCisgICAgX19zbG90c19fID0gKCdfaXAnLCAnX193ZWFrcmVmX18nKQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgogICAgICAgICAiIiJJbnN0YW50aWF0ZSBhIG5ldyBJUHY2IGFkZHJlc3Mgb2JqZWN0LgogCkBAIC0xNzgxLDkgKzE4OTYsNiBAQAogICAgICAgICAgICAgQWRkcmVzc1ZhbHVlRXJyb3I6IElmIGFkZHJlc3MgaXNuJ3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MuCiAKICAgICAgICAgIiIiCi0gICAgICAgIF9CYXNlQWRkcmVzcy5fX2luaXRfXyhzZWxmLCBhZGRyZXNzKQotICAgICAgICBfQmFzZVY2Ll9faW5pdF9fKHNlbGYsIGFkZHJlc3MpCi0KICAgICAgICAgIyBFZmZpY2llbnQgY29uc3RydWN0b3IgZnJvbSBpbnRlZ2VyLgogICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIGludCk6CiAgICAgICAgICAgICBzZWxmLl9jaGVja19pbnRfYWRkcmVzcyhhZGRyZXNzKQpAQCAtMTc5OSw2ICsxOTExLDggQEAKICAgICAgICAgIyBBc3N1bWUgaW5wdXQgYXJndW1lbnQgdG8gYmUgc3RyaW5nIG9yIGFueSBvYmplY3QgcmVwcmVzZW50YXRpb24KICAgICAgICAgIyB3aGljaCBjb252ZXJ0cyBpbnRvIGEgZm9ybWF0dGVkIElQIHN0cmluZy4KICAgICAgICAgYWRkcl9zdHIgPSBzdHIoYWRkcmVzcykKKyAgICAgICAgaWYgJy8nIGluIGFkZHJfc3RyOgorICAgICAgICAgICAgcmFpc2UgQWRkcmVzc1ZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgJy8nIGluICVyIiAlIGFkZHJlc3MpCiAgICAgICAgIHNlbGYuX2lwID0gc2VsZi5faXBfaW50X2Zyb21fc3RyaW5nKGFkZHJfc3RyKQogCiAgICAgQHByb3BlcnR5CkBAIC0xODE1LDggKzE5MjksNyBAQAogICAgICAgICAgICAgU2VlIFJGQyAyMzczIDIuNyBmb3IgZGV0YWlscy4KIAogICAgICAgICAiIiIKLSAgICAgICAgbXVsdGljYXN0X25ldHdvcmsgPSBJUHY2TmV0d29yaygnZmYwMDo6LzgnKQotICAgICAgICByZXR1cm4gc2VsZiBpbiBtdWx0aWNhc3RfbmV0d29yaworICAgICAgICByZXR1cm4gc2VsZiBpbiBzZWxmLl9jb25zdGFudHMuX211bHRpY2FzdF9uZXR3b3JrCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfcmVzZXJ2ZWQoc2VsZik6CkBAIC0xODI3LDE2ICsxOTQwLDcgQEAKICAgICAgICAgICAgIHJlc2VydmVkIElQdjYgTmV0d29yayByYW5nZXMuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHJlc2VydmVkX25ldHdvcmtzID0gW0lQdjZOZXR3b3JrKCc6Oi84JyksIElQdjZOZXR3b3JrKCcxMDA6Oi84JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQdjZOZXR3b3JrKCcyMDA6Oi83JyksIElQdjZOZXR3b3JrKCc0MDA6Oi82JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQdjZOZXR3b3JrKCc4MDA6Oi81JyksIElQdjZOZXR3b3JrKCcxMDAwOjovNCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHY2TmV0d29yaygnNDAwMDo6LzMnKSwgSVB2Nk5ldHdvcmsoJzYwMDA6Oi8zJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQdjZOZXR3b3JrKCc4MDAwOjovMycpLCBJUHY2TmV0d29yaygnQTAwMDo6LzMnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVB2Nk5ldHdvcmsoJ0MwMDA6Oi8zJyksIElQdjZOZXR3b3JrKCdFMDAwOjovNCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHY2TmV0d29yaygnRjAwMDo6LzUnKSwgSVB2Nk5ldHdvcmsoJ0Y4MDA6Oi82JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQdjZOZXR3b3JrKCdGRTAwOjovOScpXQotCi0gICAgICAgIHJldHVybiBhbnkoc2VsZiBpbiB4IGZvciB4IGluIHJlc2VydmVkX25ldHdvcmtzKQorICAgICAgICByZXR1cm4gYW55KHNlbGYgaW4geCBmb3IgeCBpbiBzZWxmLl9jb25zdGFudHMuX3Jlc2VydmVkX25ldHdvcmtzKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX2xpbmtfbG9jYWwoc2VsZik6CkBAIC0xODQ2LDggKzE5NTAsNyBAQAogICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBSRkMgNDI5MS4KIAogICAgICAgICAiIiIKLSAgICAgICAgbGlua2xvY2FsX25ldHdvcmsgPSBJUHY2TmV0d29yaygnZmU4MDo6LzEwJykKLSAgICAgICAgcmV0dXJuIHNlbGYgaW4gbGlua2xvY2FsX25ldHdvcmsKKyAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2VsZi5fY29uc3RhbnRzLl9saW5rbG9jYWxfbmV0d29yawogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX3NpdGVfbG9jYWwoc2VsZik6CkBAIC0xODYxLDggKzE5NjQsNyBAQAogICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBSRkMgMzUxMyAyLjUuNi4KIAogICAgICAgICAiIiIKLSAgICAgICAgc2l0ZWxvY2FsX25ldHdvcmsgPSBJUHY2TmV0d29yaygnZmVjMDo6LzEwJykKLSAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2l0ZWxvY2FsX25ldHdvcmsKKyAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2VsZi5fY29uc3RhbnRzLl9zaXRlbG9jYWxfbmV0d29yawogCiAgICAgQHByb3BlcnR5CiAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQpAQCAtMTg3NCwxNiArMTk3Niw3IEBACiAgICAgICAgICAgICBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIChzZWxmIGluIElQdjZOZXR3b3JrKCc6OjEvMTI4Jykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCc6Oi8xMjgnKSBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzo6ZmZmZjowOjAvOTYnKSBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzEwMDo6LzY0Jykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjovMjMnKSBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6Mjo6LzQ4Jykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOmRiODo6LzMyJykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjEwOjovMjgnKSBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJ2ZjMDA6Oi83Jykgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCdmZTgwOjovMTAnKSkKKyAgICAgICAgcmV0dXJuIGFueShzZWxmIGluIG5ldCBmb3IgbmV0IGluIHNlbGYuX2NvbnN0YW50cy5fcHJpdmF0ZV9uZXR3b3JrcykKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CkBAIC0xOTY4LDYgKzIwNjEsMTYgQEAKICAgICAgICAgICAgIHNlbGYubmV0d29yayA9IElQdjZOZXR3b3JrKHNlbGYuX2lwKQogICAgICAgICAgICAgc2VsZi5fcHJlZml4bGVuID0gc2VsZi5fbWF4X3ByZWZpeGxlbgogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgSVB2NkFkZHJlc3MuX19pbml0X18oc2VsZiwgYWRkcmVzc1swXSkKKyAgICAgICAgICAgIGlmIGxlbihhZGRyZXNzKSA+IDE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJlZml4bGVuID0gaW50KGFkZHJlc3NbMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IHNlbGYuX21heF9wcmVmaXhsZW4KKyAgICAgICAgICAgIHNlbGYubmV0d29yayA9IElQdjZOZXR3b3JrKGFkZHJlc3MsIHN0cmljdD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYubmV0bWFzayA9IHNlbGYubmV0d29yay5uZXRtYXNrCisgICAgICAgICAgICBzZWxmLmhvc3RtYXNrID0gc2VsZi5uZXR3b3JrLmhvc3RtYXNrCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBhZGRyID0gX3NwbGl0X29wdGlvbmFsX25ldG1hc2soYWRkcmVzcykKICAgICAgICAgSVB2NkFkZHJlc3MuX19pbml0X18oc2VsZiwgYWRkclswXSkKQEAgLTIwMDYsNiArMjEwOSw4IEBACiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5faXAgXiBzZWxmLl9wcmVmaXhsZW4gXiBpbnQoc2VsZi5uZXR3b3JrLm5ldHdvcmtfYWRkcmVzcykKIAorICAgIF9fcmVkdWNlX18gPSBfSVBBZGRyZXNzQmFzZS5fX3JlZHVjZV9fCisKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXAoc2VsZik6CiAgICAgICAgIHJldHVybiBJUHY2QWRkcmVzcyhzZWxmLl9pcCkKQEAgLTIwODIsMjEgKzIxODcsMjggQEAKICAgICAgICAgICAgICAgc3VwcGxpZWQuCiAKICAgICAgICAgIiIiCi0gICAgICAgIF9CYXNlVjYuX19pbml0X18oc2VsZiwgYWRkcmVzcykKICAgICAgICAgX0Jhc2VOZXR3b3JrLl9faW5pdF9fKHNlbGYsIGFkZHJlc3MpCiAKLSAgICAgICAgIyBFZmZpY2llbnQgY29uc3RydWN0b3IgZnJvbSBpbnRlZ2VyLgotICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIGludCk6CisgICAgICAgICMgRWZmaWNpZW50IGNvbnN0cnVjdG9yIGZyb20gaW50ZWdlciBvciBwYWNrZWQgYWRkcmVzcworICAgICAgICBpZiBpc2luc3RhbmNlKGFkZHJlc3MsIChieXRlcywgaW50KSk6CiAgICAgICAgICAgICBzZWxmLm5ldHdvcmtfYWRkcmVzcyA9IElQdjZBZGRyZXNzKGFkZHJlc3MpCi0gICAgICAgICAgICBzZWxmLl9wcmVmaXhsZW4gPSBzZWxmLl9tYXhfcHJlZml4bGVuCi0gICAgICAgICAgICBzZWxmLm5ldG1hc2sgPSBJUHY2QWRkcmVzcyhzZWxmLl9BTExfT05FUykKKyAgICAgICAgICAgIHNlbGYubmV0bWFzaywgc2VsZi5fcHJlZml4bGVuID0gc2VsZi5fbWFrZV9uZXRtYXNrKHNlbGYuX21heF9wcmVmaXhsZW4pCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAjIENvbnN0cnVjdGluZyBmcm9tIGEgcGFja2VkIGFkZHJlc3MKLSAgICAgICAgaWYgaXNpbnN0YW5jZShhZGRyZXNzLCBieXRlcyk6Ci0gICAgICAgICAgICBzZWxmLm5ldHdvcmtfYWRkcmVzcyA9IElQdjZBZGRyZXNzKGFkZHJlc3MpCi0gICAgICAgICAgICBzZWxmLl9wcmVmaXhsZW4gPSBzZWxmLl9tYXhfcHJlZml4bGVuCi0gICAgICAgICAgICBzZWxmLm5ldG1hc2sgPSBJUHY2QWRkcmVzcyhzZWxmLl9BTExfT05FUykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhZGRyZXNzLCB0dXBsZSk6CisgICAgICAgICAgICBpZiBsZW4oYWRkcmVzcykgPiAxOgorICAgICAgICAgICAgICAgIGFyZyA9IGFkZHJlc3NbMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXJnID0gc2VsZi5fbWF4X3ByZWZpeGxlbgorICAgICAgICAgICAgc2VsZi5uZXRtYXNrLCBzZWxmLl9wcmVmaXhsZW4gPSBzZWxmLl9tYWtlX25ldG1hc2soYXJnKQorICAgICAgICAgICAgc2VsZi5uZXR3b3JrX2FkZHJlc3MgPSBJUHY2QWRkcmVzcyhhZGRyZXNzWzBdKQorICAgICAgICAgICAgcGFja2VkID0gaW50KHNlbGYubmV0d29ya19hZGRyZXNzKQorICAgICAgICAgICAgaWYgcGFja2VkICYgaW50KHNlbGYubmV0bWFzaykgIT0gcGFja2VkOgorICAgICAgICAgICAgICAgIGlmIHN0cmljdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMgaGFzIGhvc3QgYml0cyBzZXQnICUgc2VsZikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5ldHdvcmtfYWRkcmVzcyA9IElQdjZBZGRyZXNzKHBhY2tlZCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KHNlbGYubmV0bWFzaykpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIEFzc3VtZSBpbnB1dCBhcmd1bWVudCB0byBiZSBzdHJpbmcgb3IgYW55IG9iamVjdCByZXByZXNlbnRhdGlvbgpAQCAtMjEwNiwxMiArMjIxOCwxMSBAQAogICAgICAgICBzZWxmLm5ldHdvcmtfYWRkcmVzcyA9IElQdjZBZGRyZXNzKHNlbGYuX2lwX2ludF9mcm9tX3N0cmluZyhhZGRyWzBdKSkKIAogICAgICAgICBpZiBsZW4oYWRkcikgPT0gMjoKLSAgICAgICAgICAgICMgVGhpcyBtYXkgcmFpc2UgTmV0bWFza1ZhbHVlRXJyb3IKLSAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IHNlbGYuX3ByZWZpeF9mcm9tX3ByZWZpeF9zdHJpbmcoYWRkclsxXSkKKyAgICAgICAgICAgIGFyZyA9IGFkZHJbMV0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3ByZWZpeGxlbiA9IHNlbGYuX21heF9wcmVmaXhsZW4KKyAgICAgICAgICAgIGFyZyA9IHNlbGYuX21heF9wcmVmaXhsZW4KKyAgICAgICAgc2VsZi5uZXRtYXNrLCBzZWxmLl9wcmVmaXhsZW4gPSBzZWxmLl9tYWtlX25ldG1hc2soYXJnKQogCi0gICAgICAgIHNlbGYubmV0bWFzayA9IElQdjZBZGRyZXNzKHNlbGYuX2lwX2ludF9mcm9tX3ByZWZpeChzZWxmLl9wcmVmaXhsZW4pKQogICAgICAgICBpZiBzdHJpY3Q6CiAgICAgICAgICAgICBpZiAoSVB2NkFkZHJlc3MoaW50KHNlbGYubmV0d29ya19hZGRyZXNzKSAmIGludChzZWxmLm5ldG1hc2spKSAhPQogICAgICAgICAgICAgICAgIHNlbGYubmV0d29ya19hZGRyZXNzKToKQEAgLTIxNDgsMyArMjI1OSwzOSBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIChzZWxmLm5ldHdvcmtfYWRkcmVzcy5pc19zaXRlX2xvY2FsIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MuaXNfc2l0ZV9sb2NhbCkKKworCitjbGFzcyBfSVB2NkNvbnN0YW50czoKKworICAgIF9saW5rbG9jYWxfbmV0d29yayA9IElQdjZOZXR3b3JrKCdmZTgwOjovMTAnKQorCisgICAgX211bHRpY2FzdF9uZXR3b3JrID0gSVB2Nk5ldHdvcmsoJ2ZmMDA6Oi84JykKKworICAgIF9wcml2YXRlX25ldHdvcmtzID0gWworICAgICAgICBJUHY2TmV0d29yaygnOjoxLzEyOCcpLAorICAgICAgICBJUHY2TmV0d29yaygnOjovMTI4JyksCisgICAgICAgIElQdjZOZXR3b3JrKCc6OmZmZmY6MDowLzk2JyksCisgICAgICAgIElQdjZOZXR3b3JrKCcxMDA6Oi82NCcpLAorICAgICAgICBJUHY2TmV0d29yaygnMjAwMTo6LzIzJyksCisgICAgICAgIElQdjZOZXR3b3JrKCcyMDAxOjI6Oi80OCcpLAorICAgICAgICBJUHY2TmV0d29yaygnMjAwMTpkYjg6Oi8zMicpLAorICAgICAgICBJUHY2TmV0d29yaygnMjAwMToxMDo6LzI4JyksCisgICAgICAgIElQdjZOZXR3b3JrKCdmYzAwOjovNycpLAorICAgICAgICBJUHY2TmV0d29yaygnZmU4MDo6LzEwJyksCisgICAgICAgIF0KKworICAgIF9yZXNlcnZlZF9uZXR3b3JrcyA9IFsKKyAgICAgICAgSVB2Nk5ldHdvcmsoJzo6LzgnKSwgSVB2Nk5ldHdvcmsoJzEwMDo6LzgnKSwKKyAgICAgICAgSVB2Nk5ldHdvcmsoJzIwMDo6LzcnKSwgSVB2Nk5ldHdvcmsoJzQwMDo6LzYnKSwKKyAgICAgICAgSVB2Nk5ldHdvcmsoJzgwMDo6LzUnKSwgSVB2Nk5ldHdvcmsoJzEwMDA6Oi80JyksCisgICAgICAgIElQdjZOZXR3b3JrKCc0MDAwOjovMycpLCBJUHY2TmV0d29yaygnNjAwMDo6LzMnKSwKKyAgICAgICAgSVB2Nk5ldHdvcmsoJzgwMDA6Oi8zJyksIElQdjZOZXR3b3JrKCdBMDAwOjovMycpLAorICAgICAgICBJUHY2TmV0d29yaygnQzAwMDo6LzMnKSwgSVB2Nk5ldHdvcmsoJ0UwMDA6Oi80JyksCisgICAgICAgIElQdjZOZXR3b3JrKCdGMDAwOjovNScpLCBJUHY2TmV0d29yaygnRjgwMDo6LzYnKSwKKyAgICAgICAgSVB2Nk5ldHdvcmsoJ0ZFMDA6Oi85JyksCisgICAgXQorCisgICAgX3NpdGVsb2NhbF9uZXR3b3JrID0gSVB2Nk5ldHdvcmsoJ2ZlYzA6Oi8xMCcpCisKKworSVB2NkFkZHJlc3MuX2NvbnN0YW50cyA9IF9JUHY2Q29uc3RhbnRzCmRpZmYgLS1naXQgYS9MaWIvanNvbi9fX2luaXRfXy5weSBiL0xpYi9qc29uL19faW5pdF9fLnB5CmluZGV4IDkzOTg2NjcuLmY3MmIwNTggMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL19faW5pdF9fLnB5CisrKyBiL0xpYi9qc29uL19faW5pdF9fLnB5CkBAIC05OCwxMiArOTgsMTIgQEAKIF9fdmVyc2lvbl9fID0gJzIuMC45JwogX19hbGxfXyA9IFsKICAgICAnZHVtcCcsICdkdW1wcycsICdsb2FkJywgJ2xvYWRzJywKLSAgICAnSlNPTkRlY29kZXInLCAnSlNPTkVuY29kZXInLAorICAgICdKU09ORGVjb2RlcicsICdKU09ORGVjb2RlRXJyb3InLCAnSlNPTkVuY29kZXInLAogXQogCiBfX2F1dGhvcl9fID0gJ0JvYiBJcHBvbGl0byA8Ym9iQHJlZGl2aS5jb20+JwogCi1mcm9tIC5kZWNvZGVyIGltcG9ydCBKU09ORGVjb2RlcgorZnJvbSAuZGVjb2RlciBpbXBvcnQgSlNPTkRlY29kZXIsIEpTT05EZWNvZGVFcnJvcgogZnJvbSAuZW5jb2RlciBpbXBvcnQgSlNPTkVuY29kZXIKIAogX2RlZmF1bHRfZW5jb2RlciA9IEpTT05FbmNvZGVyKApAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCiAgICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVFcnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCiAKLSAgICBJZiAqc29ydF9rZXlzKiBpcyBgYFRydWVgYCAoZGVmYXVsdDogYGBGYWxzZWBgKSwgdGhlbiB0aGUgb3V0cHV0IG9mCisgICAgSWYgKnNvcnRfa2V5cyogaXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSwgdGhlbiB0aGUgb3V0cHV0IG9mCiAgICAgZGljdGlvbmFyaWVzIHdpbGwgYmUgc29ydGVkIGJ5IGtleS4KIAogICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05FbmNvZGVyYGAgc3ViY2xhc3MgKGUuZy4gb25lIHRoYXQgb3ZlcnJpZGVzIHRoZQpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCiAgICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVFcnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCiAKLSAgICBJZiAqc29ydF9rZXlzKiBpcyBgYFRydWVgYCAoZGVmYXVsdDogYGBGYWxzZWBgKSwgdGhlbiB0aGUgb3V0cHV0IG9mCisgICAgSWYgKnNvcnRfa2V5cyogaXMgdHJ1ZSAoZGVmYXVsdDogYGBGYWxzZWBgKSwgdGhlbiB0aGUgb3V0cHV0IG9mCiAgICAgZGljdGlvbmFyaWVzIHdpbGwgYmUgc29ydGVkIGJ5IGtleS4KIAogICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05FbmNvZGVyYGAgc3ViY2xhc3MgKGUuZy4gb25lIHRoYXQgb3ZlcnJpZGVzIHRoZQpAQCAtMzExLDcgKzMxMSw4IEBACiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyLCBub3QgeyFyfScuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKICAgICBpZiBzLnN0YXJ0c3dpdGgodSdcdWZlZmYnKToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5leHBlY3RlZCBVVEYtOCBCT00gKGRlY29kZSB1c2luZyB1dGYtOC1zaWcpIikKKyAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJVbmV4cGVjdGVkIFVURi04IEJPTSAoZGVjb2RlIHVzaW5nIHV0Zi04LXNpZykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywgMCkKICAgICBpZiAoY2xzIGlzIE5vbmUgYW5kIG9iamVjdF9ob29rIGlzIE5vbmUgYW5kCiAgICAgICAgICAgICBwYXJzZV9pbnQgaXMgTm9uZSBhbmQgcGFyc2VfZmxvYXQgaXMgTm9uZSBhbmQKICAgICAgICAgICAgIHBhcnNlX2NvbnN0YW50IGlzIE5vbmUgYW5kIG9iamVjdF9wYWlyc19ob29rIGlzIE5vbmUgYW5kIG5vdCBrdyk6CmRpZmYgLS1naXQgYS9MaWIvanNvbi9kZWNvZGVyLnB5IGIvTGliL2pzb24vZGVjb2Rlci5weQppbmRleCA1OWU1ZjQxLi4wZjAzZjIwIDEwMDY0NAotLS0gYS9MaWIvanNvbi9kZWNvZGVyLnB5CisrKyBiL0xpYi9qc29uL2RlY29kZXIucHkKQEAgLTgsNyArOCw3IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgY19zY2Fuc3RyaW5nID0gTm9uZQogCi1fX2FsbF9fID0gWydKU09ORGVjb2RlciddCitfX2FsbF9fID0gWydKU09ORGVjb2RlcicsICdKU09ORGVjb2RlRXJyb3InXQogCiBGTEFHUyA9IHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwKIApAQCAtMTcsMzIgKzE3LDMwIEBACiBOZWdJbmYgPSBmbG9hdCgnLWluZicpCiAKIAotZGVmIGxpbmVjb2woZG9jLCBwb3MpOgotICAgIGlmIGlzaW5zdGFuY2UoZG9jLCBieXRlcyk6Ci0gICAgICAgIG5ld2xpbmUgPSBiJ1xuJwotICAgIGVsc2U6Ci0gICAgICAgIG5ld2xpbmUgPSAnXG4nCi0gICAgbGluZW5vID0gZG9jLmNvdW50KG5ld2xpbmUsIDAsIHBvcykgKyAxCi0gICAgaWYgbGluZW5vID09IDE6Ci0gICAgICAgIGNvbG5vID0gcG9zICsgMQotICAgIGVsc2U6Ci0gICAgICAgIGNvbG5vID0gcG9zIC0gZG9jLnJpbmRleChuZXdsaW5lLCAwLCBwb3MpCi0gICAgcmV0dXJuIGxpbmVubywgY29sbm8KK2NsYXNzIEpTT05EZWNvZGVFcnJvcihWYWx1ZUVycm9yKToKKyAgICAiIiJTdWJjbGFzcyBvZiBWYWx1ZUVycm9yIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHByb3BlcnRpZXM6CiAKKyAgICBtc2c6IFRoZSB1bmZvcm1hdHRlZCBlcnJvciBtZXNzYWdlCisgICAgZG9jOiBUaGUgSlNPTiBkb2N1bWVudCBiZWluZyBwYXJzZWQKKyAgICBwb3M6IFRoZSBzdGFydCBpbmRleCBvZiBkb2Mgd2hlcmUgcGFyc2luZyBmYWlsZWQKKyAgICBsaW5lbm86IFRoZSBsaW5lIGNvcnJlc3BvbmRpbmcgdG8gcG9zCisgICAgY29sbm86IFRoZSBjb2x1bW4gY29ycmVzcG9uZGluZyB0byBwb3MKIAotZGVmIGVycm1zZyhtc2csIGRvYywgcG9zLCBlbmQ9Tm9uZSk6Ci0gICAgIyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBfanNvbgotICAgIGxpbmVubywgY29sbm8gPSBsaW5lY29sKGRvYywgcG9zKQotICAgIGlmIGVuZCBpcyBOb25lOgotICAgICAgICBmbXQgPSAnezB9OiBsaW5lIHsxfSBjb2x1bW4gezJ9IChjaGFyIHszfSknCi0gICAgICAgIHJldHVybiBmbXQuZm9ybWF0KG1zZywgbGluZW5vLCBjb2xubywgcG9zKQotICAgICAgICAjZm10ID0gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCknCi0gICAgICAgICNyZXR1cm4gZm10ICUgKG1zZywgbGluZW5vLCBjb2xubywgcG9zKQotICAgIGVuZGxpbmVubywgZW5kY29sbm8gPSBsaW5lY29sKGRvYywgZW5kKQotICAgIGZtdCA9ICd7MH06IGxpbmUgezF9IGNvbHVtbiB7Mn0gLSBsaW5lIHszfSBjb2x1bW4gezR9IChjaGFyIHs1fSAtIHs2fSknCi0gICAgcmV0dXJuIGZtdC5mb3JtYXQobXNnLCBsaW5lbm8sIGNvbG5vLCBlbmRsaW5lbm8sIGVuZGNvbG5vLCBwb3MsIGVuZCkKLSAgICAjZm10ID0gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAtIGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkIC0gJWQpJwotICAgICNyZXR1cm4gZm10ICUgKG1zZywgbGluZW5vLCBjb2xubywgZW5kbGluZW5vLCBlbmRjb2xubywgcG9zLCBlbmQpCisgICAgIiIiCisgICAgIyBOb3RlIHRoYXQgdGhpcyBleGNlcHRpb24gaXMgdXNlZCBmcm9tIF9qc29uCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZywgZG9jLCBwb3MpOgorICAgICAgICBsaW5lbm8gPSBkb2MuY291bnQoJ1xuJywgMCwgcG9zKSArIDEKKyAgICAgICAgY29sbm8gPSBwb3MgLSBkb2MucmZpbmQoJ1xuJywgMCwgcG9zKQorICAgICAgICBlcnJtc2cgPSAnJXM6IGxpbmUgJWQgY29sdW1uICVkIChjaGFyICVkKScgJSAobXNnLCBsaW5lbm8sIGNvbG5vLCBwb3MpCisgICAgICAgIFZhbHVlRXJyb3IuX19pbml0X18oc2VsZiwgZXJybXNnKQorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLmRvYyA9IGRvYworICAgICAgICBzZWxmLnBvcyA9IHBvcworICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworICAgICAgICBzZWxmLmNvbG5vID0gY29sbm8KKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChzZWxmLm1zZywgc2VsZi5kb2MsIHNlbGYucG9zKQogCiAKIF9DT05TVEFOVFMgPSB7CkBAIC02Niw3ICs2NCw3IEBACiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgIG1zZyA9ICJJbnZhbGlkIFxcdVhYWFggZXNjYXBlIgotICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKG1zZywgcywgcG9zKSkKKyAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IobXNnLCBzLCBwb3MpCiAKIGRlZiBweV9zY2Fuc3RyaW5nKHMsIGVuZCwgc3RyaWN0PVRydWUsCiAgICAgICAgIF9iPUJBQ0tTTEFTSCwgX209U1RSSU5HQ0hVTksubWF0Y2gpOgpAQCAtODQsOCArODIsNyBAQAogICAgIHdoaWxlIDE6CiAgICAgICAgIGNodW5rID0gX20ocywgZW5kKQogICAgICAgICBpZiBjaHVuayBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAgICAgICBlcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikpCisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikKICAgICAgICAgZW5kID0gY2h1bmsuZW5kKCkKICAgICAgICAgY29udGVudCwgdGVybWluYXRvciA9IGNodW5rLmdyb3VwcygpCiAgICAgICAgICMgQ29udGVudCBpcyBjb250YWlucyB6ZXJvIG9yIG1vcmUgdW5lc2NhcGVkIHN0cmluZyBjaGFyYWN0ZXJzCkBAIC05OSwyMiArOTYsMjEgQEAKICAgICAgICAgICAgIGlmIHN0cmljdDoKICAgICAgICAgICAgICAgICAjbXNnID0gIkludmFsaWQgY29udHJvbCBjaGFyYWN0ZXIgJXIgYXQiICUgKHRlcm1pbmF0b3IsKQogICAgICAgICAgICAgICAgIG1zZyA9ICJJbnZhbGlkIGNvbnRyb2wgY2hhcmFjdGVyIHswIXJ9IGF0Ii5mb3JtYXQodGVybWluYXRvcikKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZyhtc2csIHMsIGVuZCkpCisgICAgICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKG1zZywgcywgZW5kKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBfYXBwZW5kKHRlcm1pbmF0b3IpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXNjID0gc1tlbmRdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAgICAgICBlcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikpCisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikKICAgICAgICAgIyBJZiBub3QgYSB1bmljb2RlIGVzY2FwZSBzZXF1ZW5jZSwgbXVzdCBiZSBpbiB0aGUgbG9va3VwIHRhYmxlCiAgICAgICAgIGlmIGVzYyAhPSAndSc6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY2hhciA9IF9iW2VzY10KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICBtc2cgPSAiSW52YWxpZCBcXGVzY2FwZTogezAhcn0iLmZvcm1hdChlc2MpCi0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2cobXNnLCBzLCBlbmQpKQorICAgICAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcihtc2csIHMsIGVuZCkKICAgICAgICAgICAgIGVuZCArPSAxCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB1bmkgPSBfZGVjb2RlX3VYWFhYKHMsIGVuZCkKQEAgLTE2Myw4ICsxNTksOCBAQAogICAgICAgICAgICAgICAgIHBhaXJzID0gb2JqZWN0X2hvb2socGFpcnMpCiAgICAgICAgICAgICByZXR1cm4gcGFpcnMsIGVuZCArIDEKICAgICAgICAgZWxpZiBuZXh0Y2hhciAhPSAnIic6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygKLSAgICAgICAgICAgICAgICAiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcyIsIHMsIGVuZCkpCisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoCisgICAgICAgICAgICAgICAgIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMiLCBzLCBlbmQpCiAgICAgZW5kICs9IDEKICAgICB3aGlsZSBUcnVlOgogICAgICAgICBrZXksIGVuZCA9IHNjYW5zdHJpbmcocywgZW5kLCBzdHJpY3QpCkBAIC0xNzQsNyArMTcwLDcgQEAKICAgICAgICAgaWYgc1tlbmQ6ZW5kICsgMV0gIT0gJzonOgogICAgICAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQogICAgICAgICAgICAgaWYgc1tlbmQ6ZW5kICsgMV0gIT0gJzonOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIHMsIGVuZCkpCisgICAgICAgICAgICAgICAgcmFpc2UgSlNPTkRlY29kZUVycm9yKCJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIHMsIGVuZCkKICAgICAgICAgZW5kICs9IDEKIAogICAgICAgICB0cnk6CkBAIC0xODgsNyArMTg0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSBmcm9tIE5vbmUKICAgICAgICAgcGFpcnNfYXBwZW5kKChrZXksIHZhbHVlKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KQEAgLTIwMiwxMyArMTk4LDEzIEBACiAgICAgICAgIGlmIG5leHRjaGFyID09ICd9JzoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsaWYgbmV4dGNoYXIgIT0gJywnOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcywgZW5kIC0gMSkpCisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcywgZW5kIC0gMSkKICAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQogICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCiAgICAgICAgIGVuZCArPSAxCiAgICAgICAgIGlmIG5leHRjaGFyICE9ICciJzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKAotICAgICAgICAgICAgICAgICJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIiwgcywgZW5kIC0gMSkpCisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoCisgICAgICAgICAgICAgICAgIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMiLCBzLCBlbmQgLSAxKQogICAgIGlmIG9iamVjdF9wYWlyc19ob29rIGlzIG5vdCBOb25lOgogICAgICAgICByZXN1bHQgPSBvYmplY3RfcGFpcnNfaG9vayhwYWlycykKICAgICAgICAgcmV0dXJuIHJlc3VsdCwgZW5kCkBAIC0yMzIsNyArMjI4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSBmcm9tIE5vbmUKICAgICAgICAgX2FwcGVuZCh2YWx1ZSkKICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQogICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CkBAIC0yNDIsNyArMjM4LDcgQEAKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxpZiBuZXh0Y2hhciAhPSAnLCc6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKSkKKyAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzW2VuZF0gaW4gX3dzOgogICAgICAgICAgICAgICAgIGVuZCArPSAxCkBAIC0zNDMsNyArMzM5LDcgQEAKICAgICAgICAgb2JqLCBlbmQgPSBzZWxmLnJhd19kZWNvZGUocywgaWR4PV93KHMsIDApLmVuZCgpKQogICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCiAgICAgICAgIGlmIGVuZCAhPSBsZW4ocyk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXh0cmEgZGF0YSIsIHMsIGVuZCwgbGVuKHMpKSkKKyAgICAgICAgICAgIHJhaXNlIEpTT05EZWNvZGVFcnJvcigiRXh0cmEgZGF0YSIsIHMsIGVuZCkKICAgICAgICAgcmV0dXJuIG9iagogCiAgICAgZGVmIHJhd19kZWNvZGUoc2VsZiwgcywgaWR4PTApOgpAQCAtMzU4LDUgKzM1NCw1IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9iaiwgZW5kID0gc2VsZi5zY2FuX29uY2UocywgaWR4KQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBlcnI6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSkgZnJvbSBOb25lCisgICAgICAgICAgICByYWlzZSBKU09ORGVjb2RlRXJyb3IoIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkgZnJvbSBOb25lCiAgICAgICAgIHJldHVybiBvYmosIGVuZApkaWZmIC0tZ2l0IGEvTGliL2pzb24vZW5jb2Rlci5weSBiL0xpYi9qc29uL2VuY29kZXIucHkKaW5kZXggMDUxMzgzOC4uZDU5NjQ4OSAxMDA2NDQKLS0tIGEvTGliL2pzb24vZW5jb2Rlci5weQorKysgYi9MaWIvanNvbi9lbmNvZGVyLnB5CkBAIC03LDYgKzcsMTAgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBjX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpID0gTm9uZQogdHJ5OgorICAgIGZyb20gX2pzb24gaW1wb3J0IGVuY29kZV9iYXNlc3RyaW5nIGFzIGNfZW5jb2RlX2Jhc2VzdHJpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBjX2VuY29kZV9iYXNlc3RyaW5nID0gTm9uZQordHJ5OgogICAgIGZyb20gX2pzb24gaW1wb3J0IG1ha2VfZW5jb2RlciBhcyBjX21ha2VfZW5jb2RlcgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGNfbWFrZV9lbmNvZGVyID0gTm9uZQpAQCAtMjgsOSArMzIsOCBAQAogICAgICNFU0NBUEVfRENULnNldGRlZmF1bHQoY2hyKGkpLCAnXFx1JTA0eCcgJSAoaSwpKQogCiBJTkZJTklUWSA9IGZsb2F0KCdpbmYnKQotRkxPQVRfUkVQUiA9IHJlcHIKIAotZGVmIGVuY29kZV9iYXNlc3RyaW5nKHMpOgorZGVmIHB5X2VuY29kZV9iYXNlc3RyaW5nKHMpOgogICAgICIiIlJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nCiAKICAgICAiIiIKQEAgLTM5LDYgKzQyLDkgQEAKICAgICByZXR1cm4gJyInICsgRVNDQVBFLnN1YihyZXBsYWNlLCBzKSArICciJwogCiAKK2VuY29kZV9iYXNlc3RyaW5nID0gKGNfZW5jb2RlX2Jhc2VzdHJpbmcgb3IgcHlfZW5jb2RlX2Jhc2VzdHJpbmcpCisKKwogZGVmIHB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKHMpOgogICAgICIiIlJldHVybiBhbiBBU0NJSS1vbmx5IEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nCiAKQEAgLTIxNCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgX2VuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZwogCiAgICAgICAgIGRlZiBmbG9hdHN0cihvLCBhbGxvd19uYW49c2VsZi5hbGxvd19uYW4sCi0gICAgICAgICAgICAgICAgX3JlcHI9RkxPQVRfUkVQUiwgX2luZj1JTkZJTklUWSwgX25lZ2luZj0tSU5GSU5JVFkpOgorICAgICAgICAgICAgICAgIF9yZXByPWZsb2F0Ll9fcmVwcl9fLCBfaW5mPUlORklOSVRZLCBfbmVnaW5mPS1JTkZJTklUWSk6CiAgICAgICAgICAgICAjIENoZWNrIGZvciBzcGVjaWFscy4gIE5vdGUgdGhhdCB0aGlzIHR5cGUgb2YgdGVzdCBpcyBwcm9jZXNzb3IKICAgICAgICAgICAgICMgYW5kL29yIHBsYXRmb3JtLXNwZWNpZmljLCBzbyBkbyB0ZXN0cyB3aGljaCBkb24ndCBkZXBlbmQgb24gdGhlCiAgICAgICAgICAgICAjIGludGVybmFscy4KQEAgLTI2MSw2ICsyNjcsNyBAQAogICAgICAgICBsaXN0PWxpc3QsCiAgICAgICAgIHN0cj1zdHIsCiAgICAgICAgIHR1cGxlPXR1cGxlLAorICAgICAgICBfaW50c3RyPWludC5fX3N0cl9fLAogICAgICk6CiAKICAgICBpZiBfaW5kZW50IGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShfaW5kZW50LCBzdHIpOgpAQCAtMzAyLDEwICszMDksMTAgQEAKICAgICAgICAgICAgICAgICAjIFN1YmNsYXNzZXMgb2YgaW50L2Zsb2F0IG1heSBvdmVycmlkZSBfX3N0cl9fLCBidXQgd2Ugc3RpbGwKICAgICAgICAgICAgICAgICAjIHdhbnQgdG8gZW5jb2RlIHRoZW0gYXMgaW50ZWdlcnMvZmxvYXRzIGluIEpTT04uIE9uZSBleGFtcGxlCiAgICAgICAgICAgICAgICAgIyB3aXRoaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgaXMgSW50RW51bS4KLSAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBzdHIoaW50KHZhbHVlKSkKKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBfaW50c3RyKHZhbHVlKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CiAgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm92ZSBmb3IgaW50Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2Zsb2F0c3RyKGZsb2F0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBfZmxvYXRzdHIodmFsdWUpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgpAQCAtMzUyLDcgKzM1OSw3IEBACiAgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgogICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCi0gICAgICAgICAgICAgICAga2V5ID0gX2Zsb2F0c3RyKGZsb2F0KGtleSkpCisgICAgICAgICAgICAgICAga2V5ID0gX2Zsb2F0c3RyKGtleSkKICAgICAgICAgICAgIGVsaWYga2V5IGlzIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gJ3RydWUnCiAgICAgICAgICAgICBlbGlmIGtleSBpcyBGYWxzZToKQEAgLTM2MSw3ICszNjgsNyBAQAogICAgICAgICAgICAgICAgIGtleSA9ICdudWxsJwogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgaW50KToKICAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQotICAgICAgICAgICAgICAgIGtleSA9IHN0cihpbnQoa2V5KSkKKyAgICAgICAgICAgICAgICBrZXkgPSBfaW50c3RyKGtleSkKICAgICAgICAgICAgIGVsaWYgX3NraXBrZXlzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzgyLDEwICszODksMTAgQEAKICAgICAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CiAgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKLSAgICAgICAgICAgICAgICB5aWVsZCBzdHIoaW50KHZhbHVlKSkKKyAgICAgICAgICAgICAgICB5aWVsZCBfaW50c3RyKHZhbHVlKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CiAgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKLSAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIoZmxvYXQodmFsdWUpKQorICAgICAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cih2YWx1ZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2xpc3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKQEAgLTQxMiwxMCArNDE5LDEwIEBACiAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBpbnQpOgogICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKLSAgICAgICAgICAgIHlpZWxkIHN0cihpbnQobykpCisgICAgICAgICAgICB5aWVsZCBfaW50c3RyKG8pCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBmbG9hdCk6CiAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQotICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKGZsb2F0KG8pKQorICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKG8pCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBkaWN0KToKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rvb2wucHkgYi9MaWIvanNvbi90b29sLnB5CmluZGV4IDdkYjQ1MjguLjRmMzE4MmMgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rvb2wucHkKKysrIGIvTGliL2pzb24vdG9vbC5weQpAQCAtMTAsMjggKzEwLDM5IEBACiAgICAgRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlczogbGluZSAxIGNvbHVtbiAzIChjaGFyIDIpCiAKICIiIgotaW1wb3J0IHN5cworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBqc29uCitpbXBvcnQgc3lzCisKIAogZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6Ci0gICAgICAgIGluZmlsZSA9IHN5cy5zdGRpbgotICAgICAgICBvdXRmaWxlID0gc3lzLnN0ZG91dAotICAgIGVsaWYgbGVuKHN5cy5hcmd2KSA9PSAyOgotICAgICAgICBpbmZpbGUgPSBvcGVuKHN5cy5hcmd2WzFdLCAncicpCi0gICAgICAgIG91dGZpbGUgPSBzeXMuc3Rkb3V0Ci0gICAgZWxpZiBsZW4oc3lzLmFyZ3YpID09IDM6Ci0gICAgICAgIGluZmlsZSA9IG9wZW4oc3lzLmFyZ3ZbMV0sICdyJykKLSAgICAgICAgb3V0ZmlsZSA9IG9wZW4oc3lzLmFyZ3ZbMl0sICd3JykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KHN5cy5hcmd2WzBdICsgIiBbaW5maWxlIFtvdXRmaWxlXV0iKQorICAgIHByb2cgPSAncHl0aG9uIC1tIGpzb24udG9vbCcKKyAgICBkZXNjcmlwdGlvbiA9ICgnQSBzaW1wbGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBmb3IganNvbiBtb2R1bGUgJworICAgICAgICAgICAgICAgICAgICd0byB2YWxpZGF0ZSBhbmQgcHJldHR5LXByaW50IEpTT04gb2JqZWN0cy4nKQorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9cHJvZywgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5maWxlJywgbmFyZ3M9Jz8nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhIEpTT04gZmlsZSB0byBiZSB2YWxpZGF0ZWQgb3IgcHJldHR5LXByaW50ZWQnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ291dGZpbGUnLCBuYXJncz0nPycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3cnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3dyaXRlIHRoZSBvdXRwdXQgb2YgaW5maWxlIHRvIG91dGZpbGUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc29ydC1rZXlzJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NvcnQgdGhlIG91dHB1dCBvZiBkaWN0aW9uYXJpZXMgYWxwaGFiZXRpY2FsbHkgYnkga2V5JykKKyAgICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaW5maWxlID0gb3B0aW9ucy5pbmZpbGUgb3Igc3lzLnN0ZGluCisgICAgb3V0ZmlsZSA9IG9wdGlvbnMub3V0ZmlsZSBvciBzeXMuc3Rkb3V0CisgICAgc29ydF9rZXlzID0gb3B0aW9ucy5zb3J0X2tleXMKICAgICB3aXRoIGluZmlsZToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2JqID0ganNvbi5sb2FkKGluZmlsZSkKKyAgICAgICAgICAgIGlmIHNvcnRfa2V5czoKKyAgICAgICAgICAgICAgICBvYmogPSBqc29uLmxvYWQoaW5maWxlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvYmogPSBqc29uLmxvYWQoaW5maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vaz1jb2xsZWN0aW9ucy5PcmRlcmVkRGljdCkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoZSkKICAgICB3aXRoIG91dGZpbGU6Ci0gICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkKKyAgICAgICAganNvbi5kdW1wKG9iaiwgb3V0ZmlsZSwgc29ydF9rZXlzPXNvcnRfa2V5cywgaW5kZW50PTQpCiAgICAgICAgIG91dGZpbGUud3JpdGUoJ1xuJykKIAogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9HcmFtbWFyLnR4dCBiL0xpYi9saWIydG8zL0dyYW1tYXIudHh0CmluZGV4IGU2NjdiY2QuLmM5NTQ2NjkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL0dyYW1tYXIudHh0CisrKyBiL0xpYi9saWIydG8zL0dyYW1tYXIudHh0CkBAIC0zMyw3ICszMyw4IEBACiAKIGRlY29yYXRvcjogJ0AnIGRvdHRlZF9uYW1lIFsgJygnIFthcmdsaXN0XSAnKScgXSBORVdMSU5FCiBkZWNvcmF0b3JzOiBkZWNvcmF0b3IrCi1kZWNvcmF0ZWQ6IGRlY29yYXRvcnMgKGNsYXNzZGVmIHwgZnVuY2RlZikKK2RlY29yYXRlZDogZGVjb3JhdG9ycyAoY2xhc3NkZWYgfCBmdW5jZGVmIHwgYXN5bmNfZnVuY2RlZikKK2FzeW5jX2Z1bmNkZWY6IEFTWU5DIGZ1bmNkZWYKIGZ1bmNkZWY6ICdkZWYnIE5BTUUgcGFyYW1ldGVycyBbJy0+JyB0ZXN0XSAnOicgc3VpdGUKIHBhcmFtZXRlcnM6ICcoJyBbdHlwZWRhcmdzbGlzdF0gJyknCiB0eXBlZGFyZ3NsaXN0OiAoKHRmcGRlZiBbJz0nIHRlc3RdICcsJykqCkBAIC04Miw3ICs4Myw4IEBACiBleGVjX3N0bXQ6ICdleGVjJyBleHByIFsnaW4nIHRlc3QgWycsJyB0ZXN0XV0KIGFzc2VydF9zdG10OiAnYXNzZXJ0JyB0ZXN0IFsnLCcgdGVzdF0KIAotY29tcG91bmRfc3RtdDogaWZfc3RtdCB8IHdoaWxlX3N0bXQgfCBmb3Jfc3RtdCB8IHRyeV9zdG10IHwgd2l0aF9zdG10IHwgZnVuY2RlZiB8IGNsYXNzZGVmIHwgZGVjb3JhdGVkCitjb21wb3VuZF9zdG10OiBpZl9zdG10IHwgd2hpbGVfc3RtdCB8IGZvcl9zdG10IHwgdHJ5X3N0bXQgfCB3aXRoX3N0bXQgfCBmdW5jZGVmIHwgY2xhc3NkZWYgfCBkZWNvcmF0ZWQgfCBhc3luY19zdG10Cithc3luY19zdG10OiBBU1lOQyAoZnVuY2RlZiB8IHdpdGhfc3RtdCB8IGZvcl9zdG10KQogaWZfc3RtdDogJ2lmJyB0ZXN0ICc6JyBzdWl0ZSAoJ2VsaWYnIHRlc3QgJzonIHN1aXRlKSogWydlbHNlJyAnOicgc3VpdGVdCiB3aGlsZV9zdG10OiAnd2hpbGUnIHRlc3QgJzonIHN1aXRlIFsnZWxzZScgJzonIHN1aXRlXQogZm9yX3N0bXQ6ICdmb3InIGV4cHJsaXN0ICdpbicgdGVzdGxpc3QgJzonIHN1aXRlIFsnZWxzZScgJzonIHN1aXRlXQpAQCAtMTIxLDcgKzEyMyw3IEBACiBhcml0aF9leHByOiB0ZXJtICgoJysnfCctJykgdGVybSkqCiB0ZXJtOiBmYWN0b3IgKCgnKid8J0AnfCcvJ3wnJSd8Jy8vJykgZmFjdG9yKSoKIGZhY3RvcjogKCcrJ3wnLSd8J34nKSBmYWN0b3IgfCBwb3dlcgotcG93ZXI6IGF0b20gdHJhaWxlciogWycqKicgZmFjdG9yXQorcG93ZXI6IFtBV0FJVF0gYXRvbSB0cmFpbGVyKiBbJyoqJyBmYWN0b3JdCiBhdG9tOiAoJygnIFt5aWVsZF9leHByfHRlc3RsaXN0X2dleHBdICcpJyB8CiAgICAgICAgJ1snIFtsaXN0bWFrZXJdICddJyB8CiAgICAgICAgJ3snIFtkaWN0c2V0bWFrZXJdICd9JyB8CkBAIC0xNDIsNyArMTQ0LDcgQEAKIGNsYXNzZGVmOiAnY2xhc3MnIE5BTUUgWycoJyBbYXJnbGlzdF0gJyknXSAnOicgc3VpdGUKIAogYXJnbGlzdDogKGFyZ3VtZW50ICcsJykqIChhcmd1bWVudCBbJywnXQotICAgICAgICAgICAgICAgICAgICAgICAgIHwnKicgdGVzdCAoJywnIGFyZ3VtZW50KSogWycsJyAnKionIHRlc3RdIAorICAgICAgICAgICAgICAgICAgICAgICAgIHwnKicgdGVzdCAoJywnIGFyZ3VtZW50KSogWycsJyAnKionIHRlc3RdCiAgICAgICAgICAgICAgICAgICAgICAgICAgfCcqKicgdGVzdCkKIGFyZ3VtZW50OiB0ZXN0IFtjb21wX2Zvcl0gfCB0ZXN0ICc9JyB0ZXN0ICAjIFJlYWxseSBba2V5d29yZCAnPSddIHRlc3QKIApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5IGIvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CmluZGV4IDMzOTc1MGUuLmZmNzZiYTMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2J0bV91dGlscy5weQorKysgYi9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKQEAgLTIxNSw3ICsyMTUsNyBAQAogICAgICAgICAgICAgICAgICNyZWR1Y2UgdG8gTm9uZQogICAgICAgICAgICAgICAgIG5ld19ub2RlID0gTm9uZQogICAgICAgICAgICAgZWxpZiByZXBlYXRlcl9ub2RlLmNoaWxkcmVuWzBdLnZhbHVlID09ICcrJzoKLSAgICAgICAgICAgICAgICAjcmVkdWNlIHRvIGEgc2luZ2xlIG9jY3VyZW5jZSBpLmUuIGRvIG5vdGhpbmcKKyAgICAgICAgICAgICAgICAjcmVkdWNlIHRvIGEgc2luZ2xlIG9jY3VycmVuY2UgaS5lLiBkbyBub3RoaW5nCiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjVE9ETzogaGFuZGxlIHttaW4sIG1heH0gcmVwZWF0ZXJzCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcl9iYXNlLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXJfYmFzZS5weQppbmRleCBiMTc2MDU2Li4xY2U2MmZlIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcl9iYXNlLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVyX2Jhc2UucHkKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICAgICAgIiIiSW5pdGlhbGl6ZXIuICBTdWJjbGFzcyBtYXkgb3ZlcnJpZGUuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICAgIG9wdGlvbnM6IGFuIGRpY3QgY29udGFpbmluZyB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gUmVmYWN0b3JpbmdUb29sCisgICAgICAgICAgICBvcHRpb25zOiBhIGRpY3QgY29udGFpbmluZyB0aGUgb3B0aW9ucyBwYXNzZWQgdG8gUmVmYWN0b3JpbmdUb29sCiAgICAgICAgICAgICB0aGF0IGNvdWxkIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSBmaXhlciB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgICAgICAgICBsb2c6IGEgbGlzdCB0byBhcHBlbmQgd2FybmluZ3MgYW5kIG90aGVyIG1lc3NhZ2VzIHRvLgogICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRhY2xhc3MucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0YWNsYXNzLnB5CmluZGV4IGYzZjg3MDguLjQ2YzdhYWYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRhY2xhc3MucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weQpAQCAtMjUsNyArMjUsNyBAQAogCiBkZWYgaGFzX21ldGFjbGFzcyhwYXJlbnQpOgogICAgICIiIiB3ZSBoYXZlIHRvIGNoZWNrIHRoZSBjbHNfbm9kZSB3aXRob3V0IGNoYW5naW5nIGl0LgotICAgICAgICBUaGVyZSBhcmUgdHdvIHBvc3NpYmxpdGllczoKKyAgICAgICAgVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOgogICAgICAgICAgIDEpICBjbHNkZWYgPT4gc3VpdGUgPT4gc2ltcGxlX3N0bXQgPT4gZXhwcl9zdG10ID0+IExlYWYoJ19fbWV0YScpCiAgICAgICAgICAgMikgIGNsc2RlZiA9PiBzaW1wbGVfc3RtdCA9PiBleHByX3N0bXQgPT4gTGVhZignX19tZXRhJykKICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkgYi9MaWIvbGliMnRvMy9wYXRjb21wLnB5CmluZGV4IDIwMTJlYzQuLjA2YTRiOWQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkKKysrIGIvTGliL2xpYjJ0bzMvcGF0Y29tcC5weQpAQCAtMyw3ICszLDcgQEAKIAogIiIiUGF0dGVybiBjb21waWxlci4KIAotVGhlIGdyYW1tZXIgaXMgdGFrZW4gZnJvbSBQYXR0ZXJuR3JhbW1hci50eHQuCitUaGUgZ3JhbW1hciBpcyB0YWtlbiBmcm9tIFBhdHRlcm5HcmFtbWFyLnR4dC4KIAogVGhlIGNvbXBpbGVyIGNvbXBpbGVzIGEgcGF0dGVybiB0byBhIHB5dHJlZS4qUGF0dGVybiBpbnN0YW5jZS4KICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkgYi9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbi5weQppbmRleCA3NTk5Mzk2Li4xYTY3OTU1IDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbi5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbi5weQpAQCAtNjIsOCArNjIsMTAgQEAKIENPTU1FTlQgPSA1MwogTkwgPSA1NAogUkFSUk9XID0gNTUKLUVSUk9SVE9LRU4gPSA1NgotTl9UT0tFTlMgPSA1NworQVdBSVQgPSA1NgorQVNZTkMgPSA1NworRVJST1JUT0tFTiA9IDU4CitOX1RPS0VOUyA9IDU5CiBOVF9PRkZTRVQgPSAyNTYKICMtLWVuZCBjb25zdGFudHMtLQogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbml6ZS5weSBiL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CmluZGV4IDNkZDFlZTkuLmQxNGRiNjAgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICAgICAgZm9yIHRvayBpbiBpdGVyYWJsZToKICAgICAgICAgICAgIHRva251bSwgdG9rdmFsID0gdG9rWzoyXQogCi0gICAgICAgICAgICBpZiB0b2tudW0gaW4gKE5BTUUsIE5VTUJFUik6CisgICAgICAgICAgICBpZiB0b2tudW0gaW4gKE5BTUUsIE5VTUJFUiwgQVNZTkMsIEFXQUlUKToKICAgICAgICAgICAgICAgICB0b2t2YWwgKz0gJyAnCiAKICAgICAgICAgICAgIGlmIHRva251bSA9PSBJTkRFTlQ6CkBAIC0yMzYsNyArMjM2LDcgQEAKICAgICAgICAgICAgICAgICBzdGFydGxpbmUgPSBGYWxzZQogICAgICAgICAgICAgdG9rc19hcHBlbmQodG9rdmFsKQogCi1jb29raWVfcmUgPSByZS5jb21waWxlKHInXlsgXHRcZl0qIy4qY29kaW5nWzo9XVsgXHRdKihbLVx3Ll0rKScsIHJlLkFTQ0lJKQorY29va2llX3JlID0gcmUuY29tcGlsZShyJ15bIFx0XGZdKiMuKj9jb2RpbmdbOj1dWyBcdF0qKFstXHcuXSspJywgcmUuQVNDSUkpCiBibGFua19yZSA9IHJlLmNvbXBpbGUoYnInXlsgXHRcZl0qKD86WyNcclxuXXwkKScsIHJlLkFTQ0lJKQogCiBkZWYgX2dldF9ub3JtYWxfbmFtZShvcmlnX2VuYyk6CkBAIC0zNjYsNiArMzY2LDEyIEBACiAgICAgY29udGxpbmUgPSBOb25lCiAgICAgaW5kZW50cyA9IFswXQogCisgICAgIyAnc3Rhc2hlZCcgYW5kICdhc3luY18qJyBhcmUgdXNlZCBmb3IgYXN5bmMvYXdhaXQgcGFyc2luZworICAgIHN0YXNoZWQgPSBOb25lCisgICAgYXN5bmNfZGVmID0gRmFsc2UKKyAgICBhc3luY19kZWZfaW5kZW50ID0gMAorICAgIGFzeW5jX2RlZl9ubCA9IEZhbHNlCisKICAgICB3aGlsZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsb29wIG92ZXIgbGluZXMgaW4gc3RyZWFtCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpbmUgPSByZWFkbGluZSgpCkBAIC00MDYsNiArNDEyLDEwIEBACiAgICAgICAgICAgICAgICAgcG9zID0gcG9zICsgMQogICAgICAgICAgICAgaWYgcG9zID09IG1heDogYnJlYWsKIAorICAgICAgICAgICAgaWYgc3Rhc2hlZDoKKyAgICAgICAgICAgICAgICB5aWVsZCBzdGFzaGVkCisgICAgICAgICAgICAgICAgc3Rhc2hlZCA9IE5vbmUKKwogICAgICAgICAgICAgaWYgbGluZVtwb3NdIGluICcjXHJcbic6ICAgICAgICAgICAjIHNraXAgY29tbWVudHMgb3IgYmxhbmsgbGluZXMKICAgICAgICAgICAgICAgICBpZiBsaW5lW3Bvc10gPT0gJyMnOgogICAgICAgICAgICAgICAgICAgICBjb21tZW50X3Rva2VuID0gbGluZVtwb3M6XS5yc3RyaXAoJ1xyXG4nKQpAQCAtNDI4LDggKzQzOCwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgInVuaW5kZW50IGRvZXMgbm90IG1hdGNoIGFueSBvdXRlciBpbmRlbnRhdGlvbiBsZXZlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAoIjx0b2tlbml6ZT4iLCBsbnVtLCBwb3MsIGxpbmUpKQogICAgICAgICAgICAgICAgIGluZGVudHMgPSBpbmRlbnRzWzotMV0KKworICAgICAgICAgICAgICAgIGlmIGFzeW5jX2RlZiBhbmQgYXN5bmNfZGVmX2luZGVudCA+PSBpbmRlbnRzWy0xXToKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNfZGVmID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNfZGVmX25sID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNfZGVmX2luZGVudCA9IDAKKwogICAgICAgICAgICAgICAgIHlpZWxkIChERURFTlQsICcnLCAobG51bSwgcG9zKSwgKGxudW0sIHBvcyksIGxpbmUpCiAKKyAgICAgICAgICAgIGlmIGFzeW5jX2RlZiBhbmQgYXN5bmNfZGVmX25sIGFuZCBhc3luY19kZWZfaW5kZW50ID49IGluZGVudHNbLTFdOgorICAgICAgICAgICAgICAgIGFzeW5jX2RlZiA9IEZhbHNlCisgICAgICAgICAgICAgICAgYXN5bmNfZGVmX25sID0gRmFsc2UKKyAgICAgICAgICAgICAgICBhc3luY19kZWZfaW5kZW50ID0gMAorCiAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29udGludWVkIHN0YXRlbWVudAogICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVG9rZW5FcnJvcigiRU9GIGluIG11bHRpLWxpbmUgc3RhdGVtZW50IiwgKGxudW0sIDApKQpAQCAtNDQ5LDkgKzQ3MCwxOCBAQAogICAgICAgICAgICAgICAgICAgICBuZXdsaW5lID0gTkVXTElORQogICAgICAgICAgICAgICAgICAgICBpZiBwYXJlbmxldiA+IDA6CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lID0gTkwKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhc3luY19kZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBhc3luY19kZWZfbmwgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHN0YXNoZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdGFzaGVkCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkID0gTm9uZQogICAgICAgICAgICAgICAgICAgICB5aWVsZCAobmV3bGluZSwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCisKICAgICAgICAgICAgICAgICBlbGlmIGluaXRpYWwgPT0gJyMnOgogICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHRva2VuLmVuZHN3aXRoKCJcbiIpCisgICAgICAgICAgICAgICAgICAgIGlmIHN0YXNoZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdGFzaGVkCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkID0gTm9uZQogICAgICAgICAgICAgICAgICAgICB5aWVsZCAoQ09NTUVOVCwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCiAgICAgICAgICAgICAgICAgZWxpZiB0b2tlbiBpbiB0cmlwbGVfcXVvdGVkOgogICAgICAgICAgICAgICAgICAgICBlbmRwcm9nID0gZW5kcHJvZ3NbdG9rZW5dCkBAIC00NTksNiArNDg5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZW5kbWF0Y2g6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGwgb24gb25lIGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGVuZG1hdGNoLmVuZCgwKQogICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsaW5lW3N0YXJ0OnBvc10KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0YXNoZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgc3Rhc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXNoZWQgPSBOb25lCiAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCAoU1RSSU5HLCB0b2tlbiwgc3BvcywgKGxudW0sIHBvcyksIGxpbmUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJzdGFydCA9IChsbnVtLCBzdGFydCkgICAgICAgICAgICMgbXVsdGlwbGUgbGluZXMKQEAgLTQ3NiwyMiArNTA5LDYzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb250bGluZSA9IGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3JkaW5hcnkgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdGFzaGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN0YXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkID0gTm9uZQogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgKFNUUklORywgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCiAgICAgICAgICAgICAgICAgZWxpZiBpbml0aWFsIGluIG5hbWVjaGFyczogICAgICAgICAgICAgICAgICMgb3JkaW5hcnkgbmFtZQotICAgICAgICAgICAgICAgICAgICB5aWVsZCAoTkFNRSwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuIGluICgnYXN5bmMnLCAnYXdhaXQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFzeW5jX2RlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCAoQVNZTkMgaWYgdG9rZW4gPT0gJ2FzeW5jJyBlbHNlIEFXQUlULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgc3BvcywgZXBvcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIHRvayA9IChOQU1FLCB0b2tlbiwgc3BvcywgZXBvcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gJ2FzeW5jJyBhbmQgbm90IHN0YXNoZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkID0gdG9rCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICdkZWYnOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN0YXNoZWRbMF0gPT0gTkFNRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc3Rhc2hlZFsxXSA9PSAnYXN5bmMnKToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jX2RlZiA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY19kZWZfaW5kZW50ID0gaW5kZW50c1stMV0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIChBU1lOQywgc3Rhc2hlZFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rhc2hlZFsyXSwgc3Rhc2hlZFszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rhc2hlZFs0XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHN0YXNoZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdGFzaGVkCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRvawogICAgICAgICAgICAgICAgIGVsaWYgaW5pdGlhbCA9PSAnXFwnOiAgICAgICAgICAgICAgICAgICAgICAjIGNvbnRpbnVlZCBzdG10CiAgICAgICAgICAgICAgICAgICAgICMgVGhpcyB5aWVsZCBpcyBuZXc7IG5lZWRlZCBmb3IgYmV0dGVyIGlkZW1wb3RlbmN5OgorICAgICAgICAgICAgICAgICAgICBpZiBzdGFzaGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgc3Rhc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rhc2hlZCA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgeWllbGQgKE5MLCB0b2tlbiwgc3BvcywgKGxudW0sIHBvcyksIGxpbmUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlZCA9IDEKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpZiBpbml0aWFsIGluICcoW3snOiBwYXJlbmxldiA9IHBhcmVubGV2ICsgMQogICAgICAgICAgICAgICAgICAgICBlbGlmIGluaXRpYWwgaW4gJyldfSc6IHBhcmVubGV2ID0gcGFyZW5sZXYgLSAxCisgICAgICAgICAgICAgICAgICAgIGlmIHN0YXNoZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdGFzaGVkCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkID0gTm9uZQogICAgICAgICAgICAgICAgICAgICB5aWVsZCAoT1AsIHRva2VuLCBzcG9zLCBlcG9zLCBsaW5lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCAoRVJST1JUT0tFTiwgbGluZVtwb3NdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxudW0sIHBvcyksIChsbnVtLCBwb3MrMSksIGxpbmUpCiAgICAgICAgICAgICAgICAgcG9zID0gcG9zICsgMQogCisgICAgaWYgc3Rhc2hlZDoKKyAgICAgICAgeWllbGQgc3Rhc2hlZAorICAgICAgICBzdGFzaGVkID0gTm9uZQorCiAgICAgZm9yIGluZGVudCBpbiBpbmRlbnRzWzE6XTogICAgICAgICAgICAgICAgICMgcG9wIHJlbWFpbmluZyBpbmRlbnQgbGV2ZWxzCiAgICAgICAgIHlpZWxkIChERURFTlQsICcnLCAobG51bSwgMCksIChsbnVtLCAwKSwgJycpCiAgICAgeWllbGQgKEVORE1BUktFUiwgJycsIChsbnVtLCAwKSwgKGxudW0sIDApLCAnJykKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5IGIvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkKaW5kZXggYWRmOTk5Ni4uMDcyODA4MyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkKKysrIGIvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkKQEAgLTE4NCw3ICsxODQsNyBAQAogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgICBmaXhlcl9uYW1lczogYSBsaXN0IG9mIGZpeGVycyB0byBpbXBvcnQKLSAgICAgICAgICAgIG9wdGlvbnM6IGFuIGRpY3Qgd2l0aCBjb25maWd1cmF0aW9uLgorICAgICAgICAgICAgb3B0aW9uczogYSBkaWN0IHdpdGggY29uZmlndXJhdGlvbi4KICAgICAgICAgICAgIGV4cGxpY2l0OiBhIGxpc3Qgb2YgZml4ZXJzIHRvIHJ1biBldmVuIGlmIHRoZXkgYXJlIGV4cGxpY2l0LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5maXhlcnMgPSBmaXhlcl9uYW1lcwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CmluZGV4IGM2MzU5YmYuLjJlN2U5NzggMTAwNzU1Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKQEAgLTE4LDggKzE4LDggQEAKIAogIyBMb2NhbCBpbXBvcnRzCiBmcm9tIC4uIGltcG9ydCBweXRyZWUKLWltcG9ydCBwZ2VuMgotZnJvbSBwZ2VuMiBpbXBvcnQgZHJpdmVyCitmcm9tIC4uIGltcG9ydCBwZ2VuMgorZnJvbSAuLnBnZW4yIGltcG9ydCBkcml2ZXIKIAogbG9nZ2luZy5iYXNpY0NvbmZpZygpCiAKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcGFyc2VyLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkKaW5kZXggNWJiOWQyYi4uYjUzM2MwMSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkKQEAgLTU1LDEyICs1NSw2NCBAQAogCiAKIGNsYXNzIFRlc3RZaWVsZEZyb20oR3JhbW1hclRlc3QpOgotICAgIGRlZiB0ZXN0X21hdHJpeF9tdWx0aXBsaWNhdGlvbl9vcGVyYXRvcihzZWxmKToKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tKHNlbGYpOgogICAgICAgICBzZWxmLnZhbGlkYXRlKCJ5aWVsZCBmcm9tIHgiKQogICAgICAgICBzZWxmLnZhbGlkYXRlKCIoeWllbGQgZnJvbSB4KSArIHkiKQogICAgICAgICBzZWxmLmludmFsaWRfc3ludGF4KCJ5aWVsZCBmcm9tIikKIAogCitjbGFzcyBUZXN0QXN5bmNBd2FpdChHcmFtbWFyVGVzdCk6CisgICAgZGVmIHRlc3RfYXdhaXRfZXhwcihzZWxmKToKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHgKKyAgICAgICAgICAgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJhc3luYyBkZWYgZm9vKCk6CisKKyAgICAgICAgICAgIGRlZiBmb28oKTogcGFzcworCisgICAgICAgICAgICBkZWYgZm9vKCk6IHBhc3MKKworICAgICAgICAgICAgYXdhaXQgeAorICAgICAgICAiIiIpCisKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJhc3luYyBkZWYgZm9vKCk6IHJldHVybiBhd2FpdCBhIiIiKQorCisgICAgICAgIHNlbGYudmFsaWRhdGUoIiIiZGVmIGZvbygpOgorICAgICAgICAgICAgZGVmIGZvbygpOiBwYXNzCisgICAgICAgICAgICBhc3luYyBkZWYgZm9vKCk6IGF3YWl0IHgKKyAgICAgICAgIiIiKQorCisgICAgICAgIHNlbGYuaW52YWxpZF9zeW50YXgoImF3YWl0IHgiKQorICAgICAgICBzZWxmLmludmFsaWRfc3ludGF4KCIiImRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgeCIiIikKKworICAgICAgICBzZWxmLmludmFsaWRfc3ludGF4KCIiImRlZiBmb28oKToKKyAgICAgICAgICAgIGRlZiBmb28oKTogcGFzcworICAgICAgICAgICAgYXN5bmMgZGVmIGZvbygpOiBwYXNzCisgICAgICAgICAgICBhd2FpdCB4CisgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2FzeW5jX3ZhcihzZWxmKToKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJhc3luYyA9IDEiIiIpCisgICAgICAgIHNlbGYudmFsaWRhdGUoIiIiYXdhaXQgPSAxIiIiKQorICAgICAgICBzZWxmLnZhbGlkYXRlKCIiImRlZiBhc3luYygpOiBwYXNzIiIiKQorCisgICAgZGVmIHRlc3RfYXN5bmNfd2l0aChzZWxmKToKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIGZvciBhIGluIGI6IHBhc3MiIiIpCisKKyAgICAgICAgc2VsZi5pbnZhbGlkX3N5bnRheCgiIiJkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIGZvciBhIGluIGI6IHBhc3MiIiIpCisKKyAgICBkZWYgdGVzdF9hc3luY19mb3Ioc2VsZik6CisgICAgICAgIHNlbGYudmFsaWRhdGUoIiIiYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYyB3aXRoIGE6IHBhc3MiIiIpCisKKyAgICAgICAgc2VsZi5pbnZhbGlkX3N5bnRheCgiIiJkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIHdpdGggYTogcGFzcyIiIikKKworCiBjbGFzcyBUZXN0UmFpc2VDaGFuZ2VzKEdyYW1tYXJUZXN0KToKICAgICBkZWYgdGVzdF8yeF9zdHlsZV8xKHNlbGYpOgogICAgICAgICBzZWxmLnZhbGlkYXRlKCJyYWlzZSIpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3JlZmFjdG9yLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9yZWZhY3Rvci5weQppbmRleCBmMzBjMWU4Li44NTYzMDAxIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3JlZmFjdG9yLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcmVmYWN0b3IucHkKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBpbworaW1wb3J0IHJlCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB1bml0dGVzdApAQCAtMjI2LDggKzIyNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxseV93cml0ZT1GYWxzZSkKICAgICAgICAgIyBUZXN0aW5nIHRoYXQgaXQgbG9nZ2VkIHRoaXMgbWVzc2FnZSB3aGVuIHdyaXRlPUZhbHNlIHdhcyBwYXNzZWQgaXMKICAgICAgICAgIyBzdWZmaWNpZW50IHRvIHNlZSB0aGF0IGl0IGRpZCBub3QgYmFpbCBlYXJseSBhZnRlciAiTm8gY2hhbmdlcyIuCi0gICAgICAgIG1lc3NhZ2VfcmVnZXggPSByIk5vdCB3cml0aW5nIGNoYW5nZXMgdG8gLiolcyVzIiAlICgKLSAgICAgICAgICAgICAgICBvcy5zZXAsIG9zLnBhdGguYmFzZW5hbWUodGVzdF9maWxlKSkKKyAgICAgICAgbWVzc2FnZV9yZWdleCA9IHIiTm90IHdyaXRpbmcgY2hhbmdlcyB0byAuKiVzIiAlIFwKKyAgICAgICAgICAgICAgICByZS5lc2NhcGUob3Muc2VwICsgb3MucGF0aC5iYXNlbmFtZSh0ZXN0X2ZpbGUpKQogICAgICAgICBmb3IgbWVzc2FnZSBpbiBkZWJ1Z19tZXNzYWdlczoKICAgICAgICAgICAgIGlmICJOb3Qgd3JpdGluZyBjaGFuZ2VzIiBpbiBtZXNzYWdlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgobWVzc2FnZSwgbWVzc2FnZV9yZWdleCkKZGlmZiAtLWdpdCBhL0xpYi9saW5lY2FjaGUucHkgYi9MaWIvbGluZWNhY2hlLnB5CmluZGV4IDg4NGNiZjQuLjNhZmNjZTEgMTAwNjQ0Ci0tLSBhL0xpYi9saW5lY2FjaGUucHkKKysrIGIvTGliL2xpbmVjYWNoZS5weQpAQCAtNSw2ICs1LDcgQEAKIHRoYXQgbmFtZS4KICIiIgogCitpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCB0b2tlbml6ZQpAQCAtMjEsNyArMjIsOSBAQAogCiAjIFRoZSBjYWNoZQogCi1jYWNoZSA9IHt9ICMgVGhlIGNhY2hlCisjIFRoZSBjYWNoZS4gTWFwcyBmaWxlbmFtZXMgdG8gZWl0aGVyIGEgdGh1bmsgd2hpY2ggd2lsbCBwcm92aWRlIHNvdXJjZSBjb2RlLAorIyBvciBhIHR1cGxlIChzaXplLCBtdGltZSwgbGluZXMsIGZ1bGxuYW1lKSBvbmNlIGxvYWRlZC4KK2NhY2hlID0ge30KIAogCiBkZWYgY2xlYXJjYWNoZSgpOgpAQCAtMzYsNyArMzksOSBAQAogICAgIFVwZGF0ZSB0aGUgY2FjaGUgaWYgaXQgZG9lc24ndCBjb250YWluIGFuIGVudHJ5IGZvciB0aGlzIGZpbGUgYWxyZWFkeS4iIiIKIAogICAgIGlmIGZpbGVuYW1lIGluIGNhY2hlOgotICAgICAgICByZXR1cm4gY2FjaGVbZmlsZW5hbWVdWzJdCisgICAgICAgIGVudHJ5ID0gY2FjaGVbZmlsZW5hbWVdCisgICAgICAgIGlmIGxlbihlbnRyeSkgIT0gMToKKyAgICAgICAgICAgIHJldHVybiBjYWNoZVtmaWxlbmFtZV1bMl0KIAogICAgIHRyeToKICAgICAgICAgcmV0dXJuIHVwZGF0ZWNhY2hlKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscykKQEAgLTU4LDcgKzYzLDExIEBACiAgICAgICAgICAgICByZXR1cm4KIAogICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6Ci0gICAgICAgIHNpemUsIG10aW1lLCBsaW5lcywgZnVsbG5hbWUgPSBjYWNoZVtmaWxlbmFtZV0KKyAgICAgICAgZW50cnkgPSBjYWNoZVtmaWxlbmFtZV0KKyAgICAgICAgaWYgbGVuKGVudHJ5KSA9PSAxOgorICAgICAgICAgICAgIyBsYXp5IGNhY2hlIGVudHJ5LCBsZWF2ZSBpdCBsYXp5LgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgc2l6ZSwgbXRpbWUsIGxpbmVzLCBmdWxsbmFtZSA9IGVudHJ5CiAgICAgICAgIGlmIG10aW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBjb250aW51ZSAgICMgbm8tb3AgZm9yIGZpbGVzIGxvYWRlZCB2aWEgYSBfX2xvYWRlcl9fCiAgICAgICAgIHRyeToKQEAgLTc2LDcgKzg1LDggQEAKICAgICBhbmQgcmV0dXJuIGFuIGVtcHR5IGxpc3QuIiIiCiAKICAgICBpZiBmaWxlbmFtZSBpbiBjYWNoZToKLSAgICAgICAgZGVsIGNhY2hlW2ZpbGVuYW1lXQorICAgICAgICBpZiBsZW4oY2FjaGVbZmlsZW5hbWVdKSAhPSAxOgorICAgICAgICAgICAgZGVsIGNhY2hlW2ZpbGVuYW1lXQogICAgIGlmIG5vdCBmaWxlbmFtZSBvciAoZmlsZW5hbWUuc3RhcnRzd2l0aCgnPCcpIGFuZCBmaWxlbmFtZS5lbmRzd2l0aCgnPicpKToKICAgICAgICAgcmV0dXJuIFtdCiAKQEAgLTg2LDI3ICs5NiwyMyBAQAogICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBiYXNlbmFtZSA9IGZpbGVuYW1lCiAKLSAgICAgICAgIyBUcnkgZm9yIGEgX19sb2FkZXJfXywgaWYgYXZhaWxhYmxlCi0gICAgICAgIGlmIG1vZHVsZV9nbG9iYWxzIGFuZCAnX19sb2FkZXJfXycgaW4gbW9kdWxlX2dsb2JhbHM6Ci0gICAgICAgICAgICBuYW1lID0gbW9kdWxlX2dsb2JhbHMuZ2V0KCdfX25hbWVfXycpCi0gICAgICAgICAgICBsb2FkZXIgPSBtb2R1bGVfZ2xvYmFsc1snX19sb2FkZXJfXyddCi0gICAgICAgICAgICBnZXRfc291cmNlID0gZ2V0YXR0cihsb2FkZXIsICdnZXRfc291cmNlJywgTm9uZSkKLQotICAgICAgICAgICAgaWYgbmFtZSBhbmQgZ2V0X3NvdXJjZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRfc291cmNlKG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgT1NFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIE5vIGx1Y2ssIHRoZSBQRVAzMDIgbG9hZGVyIGNhbm5vdCBmaW5kIHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICMgZm9yIHRoaXMgbW9kdWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlW2ZpbGVuYW1lXSA9ICgKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbihkYXRhKSwgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5lKydcbicgZm9yIGxpbmUgaW4gZGF0YS5zcGxpdGxpbmVzKCldLCBmdWxsbmFtZQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZVtmaWxlbmFtZV1bMl0KKyAgICAgICAgIyBSZWFsaXNlIGEgbGF6eSBsb2FkZXIgYmFzZWQgbG9va3VwIGlmIHRoZXJlIGlzIG9uZQorICAgICAgICAjIG90aGVyd2lzZSB0cnkgdG8gbG9va3VwIHJpZ2h0IG5vdy4KKyAgICAgICAgaWYgbGF6eWNhY2hlKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IGNhY2hlW2ZpbGVuYW1lXVswXSgpCisgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBObyBsdWNrLCB0aGUgUEVQMzAyIGxvYWRlciBjYW5ub3QgZmluZCB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgICAgICMgZm9yIHRoaXMgbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgICAgICAgICBjYWNoZVtmaWxlbmFtZV0gPSAoCisgICAgICAgICAgICAgICAgICAgIGxlbihkYXRhKSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgW2xpbmUrJ1xuJyBmb3IgbGluZSBpbiBkYXRhLnNwbGl0bGluZXMoKV0sIGZ1bGxuYW1lCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZVtmaWxlbmFtZV1bMl0KIAogICAgICAgICAjIFRyeSBsb29raW5nIHRocm91Z2ggdGhlIG1vZHVsZSBzZWFyY2ggcGF0aCwgd2hpY2ggaXMgb25seSB1c2VmdWwKICAgICAgICAgIyB3aGVuIGhhbmRsaW5nIGEgcmVsYXRpdmUgZmlsZW5hbWUuCkBAIC0xMzYsMyArMTQyLDM2IEBACiAgICAgc2l6ZSwgbXRpbWUgPSBzdGF0LnN0X3NpemUsIHN0YXQuc3RfbXRpbWUKICAgICBjYWNoZVtmaWxlbmFtZV0gPSBzaXplLCBtdGltZSwgbGluZXMsIGZ1bGxuYW1lCiAgICAgcmV0dXJuIGxpbmVzCisKKworZGVmIGxhenljYWNoZShmaWxlbmFtZSwgbW9kdWxlX2dsb2JhbHMpOgorICAgICIiIlNlZWQgdGhlIGNhY2hlIGZvciBmaWxlbmFtZSB3aXRoIG1vZHVsZV9nbG9iYWxzLgorCisgICAgVGhlIG1vZHVsZSBsb2FkZXIgd2lsbCBiZSBhc2tlZCBmb3IgdGhlIHNvdXJjZSBvbmx5IHdoZW4gZ2V0bGluZXMgaXMKKyAgICBjYWxsZWQsIG5vdCBpbW1lZGlhdGVseS4KKworICAgIElmIHRoZXJlIGlzIGFuIGVudHJ5IGluIHRoZSBjYWNoZSBhbHJlYWR5LCBpdCBpcyBub3QgYWx0ZXJlZC4KKworICAgIDpyZXR1cm46IFRydWUgaWYgYSBsYXp5IGxvYWQgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgY2FjaGUsCisgICAgICAgIG90aGVyd2lzZSBGYWxzZS4gVG8gcmVnaXN0ZXIgc3VjaCBhIGxvYWQgYSBtb2R1bGUgbG9hZGVyIHdpdGggYQorICAgICAgICBnZXRfc291cmNlIG1ldGhvZCBtdXN0IGJlIGZvdW5kLCB0aGUgZmlsZW5hbWUgbXVzdCBiZSBhIGNhY2hhYmxlCisgICAgICAgIGZpbGVuYW1lLCBhbmQgdGhlIGZpbGVuYW1lIG11c3Qgbm90IGJlIGFscmVhZHkgY2FjaGVkLgorICAgICIiIgorICAgIGlmIGZpbGVuYW1lIGluIGNhY2hlOgorICAgICAgICBpZiBsZW4oY2FjaGVbZmlsZW5hbWVdKSA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIG5vdCBmaWxlbmFtZSBvciAoZmlsZW5hbWUuc3RhcnRzd2l0aCgnPCcpIGFuZCBmaWxlbmFtZS5lbmRzd2l0aCgnPicpKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgIyBUcnkgZm9yIGEgX19sb2FkZXJfXywgaWYgYXZhaWxhYmxlCisgICAgaWYgbW9kdWxlX2dsb2JhbHMgYW5kICdfX2xvYWRlcl9fJyBpbiBtb2R1bGVfZ2xvYmFsczoKKyAgICAgICAgbmFtZSA9IG1vZHVsZV9nbG9iYWxzLmdldCgnX19uYW1lX18nKQorICAgICAgICBsb2FkZXIgPSBtb2R1bGVfZ2xvYmFsc1snX19sb2FkZXJfXyddCisgICAgICAgIGdldF9zb3VyY2UgPSBnZXRhdHRyKGxvYWRlciwgJ2dldF9zb3VyY2UnLCBOb25lKQorCisgICAgICAgIGlmIG5hbWUgYW5kIGdldF9zb3VyY2U6CisgICAgICAgICAgICBnZXRfbGluZXMgPSBmdW5jdG9vbHMucGFydGlhbChnZXRfc291cmNlLCBuYW1lKQorICAgICAgICAgICAgY2FjaGVbZmlsZW5hbWVdID0gKGdldF9saW5lcywpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvTGliL2xvY2FsZS5weSBiL0xpYi9sb2NhbGUucHkKaW5kZXggN2ZmNDM1Ni4uNmQ1OWNkOCAxMDA2NDQKLS0tIGEvTGliL2xvY2FsZS5weQorKysgYi9MaWIvbG9jYWxlLnB5CkBAIC0xLDEzICsxLDEyIEBACi0iIiIgTG9jYWxlIHN1cHBvcnQuCisiIiJMb2NhbGUgc3VwcG9ydCBtb2R1bGUuCiAKLSAgICBUaGUgbW9kdWxlIHByb3ZpZGVzIGxvdy1sZXZlbCBhY2Nlc3MgdG8gdGhlIEMgbGliJ3MgbG9jYWxlIEFQSXMKLSAgICBhbmQgYWRkcyBoaWdoIGxldmVsIG51bWJlciBmb3JtYXR0aW5nIEFQSXMgYXMgd2VsbCBhcyBhIGxvY2FsZQotICAgIGFsaWFzaW5nIGVuZ2luZSB0byBjb21wbGVtZW50IHRoZXNlLgorVGhlIG1vZHVsZSBwcm92aWRlcyBsb3ctbGV2ZWwgYWNjZXNzIHRvIHRoZSBDIGxpYidzIGxvY2FsZSBBUElzIGFuZCBhZGRzIGhpZ2gKK2xldmVsIG51bWJlciBmb3JtYXR0aW5nIEFQSXMgYXMgd2VsbCBhcyBhIGxvY2FsZSBhbGlhc2luZyBlbmdpbmUgdG8gY29tcGxlbWVudAordGhlc2UuCiAKLSAgICBUaGUgYWxpYXNpbmcgZW5naW5lIGluY2x1ZGVzIHN1cHBvcnQgZm9yIG1hbnkgY29tbW9ubHkgdXNlZCBsb2NhbGUKLSAgICBuYW1lcyBhbmQgbWFwcyB0aGVtIHRvIHZhbHVlcyBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byB0aGUgQyBsaWIncwotICAgIHNldGxvY2FsZSgpIGZ1bmN0aW9uLiBJdCBhbHNvIGluY2x1ZGVzIGRlZmF1bHQgZW5jb2RpbmdzIGZvciBhbGwKLSAgICBzdXBwb3J0ZWQgbG9jYWxlIG5hbWVzLgorVGhlIGFsaWFzaW5nIGVuZ2luZSBpbmNsdWRlcyBzdXBwb3J0IGZvciBtYW55IGNvbW1vbmx5IHVzZWQgbG9jYWxlIG5hbWVzIGFuZAorbWFwcyB0aGVtIHRvIHZhbHVlcyBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byB0aGUgQyBsaWIncyBzZXRsb2NhbGUoKSBmdW5jdGlvbi4gSXQKK2Fsc28gaW5jbHVkZXMgZGVmYXVsdCBlbmNvZGluZ3MgZm9yIGFsbCBzdXBwb3J0ZWQgbG9jYWxlIG5hbWVzLgogCiAiIiIKIApAQCAtMjk4LDExICsyOTcsMTEgQEAKICAgICByZXR1cm4gcy5yZXBsYWNlKCc8JywgJycpLnJlcGxhY2UoJz4nLCAnJykKIAogZGVmIHN0cih2YWwpOgotICAgICIiIkNvbnZlcnQgZmxvYXQgdG8gaW50ZWdlciwgdGFraW5nIHRoZSBsb2NhbGUgaW50byBhY2NvdW50LiIiIgorICAgICIiIkNvbnZlcnQgZmxvYXQgdG8gc3RyaW5nLCB0YWtpbmcgdGhlIGxvY2FsZSBpbnRvIGFjY291bnQuIiIiCiAgICAgcmV0dXJuIGZvcm1hdCgiJS4xMmciLCB2YWwpCiAKLWRlZiBhdG9mKHN0cmluZywgZnVuYz1mbG9hdCk6Ci0gICAgIlBhcnNlcyBhIHN0cmluZyBhcyBhIGZsb2F0IGFjY29yZGluZyB0byB0aGUgbG9jYWxlIHNldHRpbmdzLiIKK2RlZiBkZWxvY2FsaXplKHN0cmluZyk6CisgICAgIlBhcnNlcyBhIHN0cmluZyBhcyBhIG5vcm1hbGl6ZWQgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgbG9jYWxlIHNldHRpbmdzLiIKICAgICAjRmlyc3QsIGdldCByaWQgb2YgdGhlIGdyb3VwaW5nCiAgICAgdHMgPSBsb2NhbGVjb252KClbJ3Rob3VzYW5kc19zZXAnXQogICAgIGlmIHRzOgpAQCAtMzExLDEyICszMTAsMTUgQEAKICAgICBkZCA9IGxvY2FsZWNvbnYoKVsnZGVjaW1hbF9wb2ludCddCiAgICAgaWYgZGQ6CiAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGRkLCAnLicpCi0gICAgI2ZpbmFsbHksIHBhcnNlIHRoZSBzdHJpbmcKLSAgICByZXR1cm4gZnVuYyhzdHJpbmcpCisgICAgcmV0dXJuIHN0cmluZwogCi1kZWYgYXRvaShzdHIpOgorZGVmIGF0b2Yoc3RyaW5nLCBmdW5jPWZsb2F0KToKKyAgICAiUGFyc2VzIGEgc3RyaW5nIGFzIGEgZmxvYXQgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGUgc2V0dGluZ3MuIgorICAgIHJldHVybiBmdW5jKGRlbG9jYWxpemUoc3RyaW5nKSkKKworZGVmIGF0b2koc3RyaW5nKToKICAgICAiQ29udmVydHMgYSBzdHJpbmcgdG8gYW4gaW50ZWdlciBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsZSBzZXR0aW5ncy4iCi0gICAgcmV0dXJuIGF0b2Yoc3RyLCBpbnQpCisgICAgcmV0dXJuIGludChkZWxvY2FsaXplKHN0cmluZykpCiAKIGRlZiBfdGVzdCgpOgogICAgIHNldGxvY2FsZShMQ19BTEwsICIiKQpAQCAtNjk2LDcgKzY5OCw5IEBACiAgICAgJ2V1Y19rcic6ICAgICAgICAgICAgICAgICAgICAgICAnZXVjS1InLAogICAgICd1dGZfOCc6ICAgICAgICAgICAgICAgICAgICAgICAgJ1VURi04JywKICAgICAna29pOF9yJzogICAgICAgICAgICAgICAgICAgICAgICdLT0k4LVInLAorICAgICdrb2k4X3QnOiAgICAgICAgICAgICAgICAgICAgICAgJ0tPSTgtVCcsCiAgICAgJ2tvaThfdSc6ICAgICAgICAgICAgICAgICAgICAgICAnS09JOC1VJywKKyAgICAna3oxMDQ4JzogICAgICAgICAgICAgICAgICAgICAgICdSSzEwNDgnLAogICAgICdjcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ0NQMTI1MScsCiAgICAgJ2NwMTI1NSc6ICAgICAgICAgICAgICAgICAgICAgICAnQ1AxMjU1JywKICAgICAnY3AxMjU2JzogICAgICAgICAgICAgICAgICAgICAgICdDUDEyNTYnLApAQCAtMTQ0Nyw3ICsxNDUxLDcgQEAKICAgICAweDE4MDk6ICJlbl9JRSIsICMgRW5nbGlzaCAtIElyZWxhbmQKICAgICAweDFjMDk6ICJlbl9aQSIsICMgRW5nbGlzaCAtIFNvdXRoIEFmcmljYQogICAgIDB4MjAwOTogImVuX0pBIiwgIyBFbmdsaXNoIC0gSmFtYWljYQotICAgIDB4MjQwOTogImVuX0NCIiwgIyBFbmdsaXNoIC0gQ2FycmliYmVhbgorICAgIDB4MjQwOTogImVuX0NCIiwgIyBFbmdsaXNoIC0gQ2FyaWJiZWFuCiAgICAgMHgyODA5OiAiZW5fQloiLCAjIEVuZ2xpc2ggLSBCZWxpemUKICAgICAweDJjMDk6ICJlbl9UVCIsICMgRW5nbGlzaCAtIFRyaW5pZGFkCiAgICAgMHgzMDA5OiAiZW5fWlciLCAjIEVuZ2xpc2ggLSBaaW1iYWJ3ZQpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvX19pbml0X18ucHkgYi9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQppbmRleCA2N2Q5ZDJlLi5hN2JkODkwIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQorKysgYi9MaWIvbG9nZ2luZy9fX2luaXRfXy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAxNCBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTE4LDcgKzE4LDcgQEAKIExvZ2dpbmcgcGFja2FnZSBmb3IgUHl0aG9uLiBCYXNlZCBvbiBQRVAgMjgyIGFuZCBjb21tZW50cyB0aGVyZXRvIGluCiBjb21wLmxhbmcucHl0aG9uLgogCi1Db3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoQykgMjAwMS0yMDE1IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogCiBUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEKICIiIgpAQCAtMzE2LDYgKzMxNiw4IEBACiAgICAgICAgIHJldHVybiAnPExvZ1JlY29yZDogJXMsICVzLCAlcywgJXMsICIlcyI+JyUoc2VsZi5uYW1lLCBzZWxmLmxldmVsbm8sCiAgICAgICAgICAgICBzZWxmLnBhdGhuYW1lLCBzZWxmLmxpbmVubywgc2VsZi5tc2cpCiAKKyAgICBfX3JlcHJfXyA9IF9fc3RyX18KKwogICAgIGRlZiBnZXRNZXNzYWdlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJuIHRoZSBtZXNzYWdlIGZvciB0aGlzIExvZ1JlY29yZC4KQEAgLTQ2OSw3ICs0NzEsNyBAQAogICAgICAgICB1c2Ugb25lIG9mICUtZm9ybWF0dGluZywgOm1ldGg6YHN0ci5mb3JtYXRgIChgYHt9YGApIGZvcm1hdHRpbmcgb3IKICAgICAgICAgOmNsYXNzOmBzdHJpbmcuVGVtcGxhdGVgIGZvcm1hdHRpbmcgaW4geW91ciBmb3JtYXQgc3RyaW5nLgogCi0gICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOiAzLjIKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICAgICAgQWRkZWQgdGhlIGBgc3R5bGVgYCBwYXJhbWV0ZXIuCiAgICAgICAgICIiIgogICAgICAgICBpZiBzdHlsZSBub3QgaW4gX1NUWUxFUzoKQEAgLTY5OCw3ICs3MDAsNyBAQAogICAgICAgICB0aGlzIGFuZCB0aGUgcmVjb3JkIGlzIHRoZW4gZHJvcHBlZC4gUmV0dXJucyBhIHplcm8gdmFsdWUgaWYgYSByZWNvcmQKICAgICAgICAgaXMgdG8gYmUgZHJvcHBlZCwgZWxzZSBub24temVyby4KIAotICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDogMy4yCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAKICAgICAgICAgICAgQWxsb3cgZmlsdGVycyB0byBiZSBqdXN0IGNhbGxhYmxlcy4KICAgICAgICAgIiIiCkBAIC0xMDkxLDcgKzEwOTMsNiBAQAogIwogIyAgIERldGVybWluZSB3aGljaCBjbGFzcyB0byB1c2Ugd2hlbiBpbnN0YW50aWF0aW5nIGxvZ2dlcnMuCiAjCi1fbG9nZ2VyQ2xhc3MgPSBOb25lCiAKIGRlZiBzZXRMb2dnZXJDbGFzcyhrbGFzcyk6CiAgICAgIiIiCkBAIC0xMTEwLDcgKzExMTEsNiBAQAogICAgICIiIgogICAgIFJldHVybiB0aGUgY2xhc3MgdG8gYmUgdXNlZCB3aGVuIGluc3RhbnRpYXRpbmcgYSBsb2dnZXIuCiAgICAgIiIiCi0KICAgICByZXR1cm4gX2xvZ2dlckNsYXNzCiAKIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKQEAgLTEzMDcsMTIgKzEzMDcsMTEgQEAKICAgICAgICAgaWYgc2VsZi5pc0VuYWJsZWRGb3IoRVJST1IpOgogICAgICAgICAgICAgc2VsZi5fbG9nKEVSUk9SLCBtc2csIGFyZ3MsICoqa3dhcmdzKQogCi0gICAgZGVmIGV4Y2VwdGlvbihzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgZGVmIGV4Y2VwdGlvbihzZWxmLCBtc2csICphcmdzLCBleGNfaW5mbz1UcnVlLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgogICAgICAgICBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGxvZ2dpbmcgYW4gRVJST1Igd2l0aCBleGNlcHRpb24gaW5mb3JtYXRpb24uCiAgICAgICAgICIiIgotICAgICAgICBrd2FyZ3NbJ2V4Y19pbmZvJ10gPSBUcnVlCi0gICAgICAgIHNlbGYuZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuZXJyb3IobXNnLCAqYXJncywgZXhjX2luZm89ZXhjX2luZm8sICoqa3dhcmdzKQogCiAgICAgZGVmIGNyaXRpY2FsKHNlbGYsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIiIiCkBAIC0xNDA3LDcgKzE0MDYsOSBAQAogICAgICAgICBlbHNlOiAjIHByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgIGZuLCBsbm8sIGZ1bmMgPSAiKHVua25vd24gZmlsZSkiLCAwLCAiKHVua25vd24gZnVuY3Rpb24pIgogICAgICAgICBpZiBleGNfaW5mbzoKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4Y19pbmZvLCB0dXBsZSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4Y19pbmZvLCBCYXNlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBleGNfaW5mbyA9ICh0eXBlKGV4Y19pbmZvKSwgZXhjX2luZm8sIGV4Y19pbmZvLl9fdHJhY2ViYWNrX18pCisgICAgICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGV4Y19pbmZvLCB0dXBsZSk6CiAgICAgICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQogICAgICAgICByZWNvcmQgPSBzZWxmLm1ha2VSZWNvcmQoc2VsZi5uYW1lLCBsZXZlbCwgZm4sIGxubywgbXNnLCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm8sIGZ1bmMsIGV4dHJhLCBzaW5mbykKQEAgLTE2MTcsMTIgKzE2MTgsMTEgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYubG9nKEVSUk9SLCBtc2csICphcmdzLCAqKmt3YXJncykKIAotICAgIGRlZiBleGNlcHRpb24oc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgorICAgIGRlZiBleGNlcHRpb24oc2VsZiwgbXNnLCAqYXJncywgZXhjX2luZm89VHJ1ZSwgKiprd2FyZ3MpOgogICAgICAgICAiIiIKICAgICAgICAgRGVsZWdhdGUgYW4gZXhjZXB0aW9uIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLgogICAgICAgICAiIiIKLSAgICAgICAga3dhcmdzWyJleGNfaW5mbyJdID0gVHJ1ZQotICAgICAgICBzZWxmLmxvZyhFUlJPUiwgbXNnLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYubG9nKEVSUk9SLCBtc2csICphcmdzLCBleGNfaW5mbz1leGNfaW5mbywgKiprd2FyZ3MpCiAKICAgICBkZWYgY3JpdGljYWwoc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiIKQEAgLTE4MDQsMTQgKzE4MDQsMTMgQEAKICAgICAgICAgYmFzaWNDb25maWcoKQogICAgIHJvb3QuZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpCiAKLWRlZiBleGNlcHRpb24obXNnLCAqYXJncywgKiprd2FyZ3MpOgorZGVmIGV4Y2VwdGlvbihtc2csICphcmdzLCBleGNfaW5mbz1UcnVlLCAqKmt3YXJncyk6CiAgICAgIiIiCiAgICAgTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5ICdFUlJPUicgb24gdGhlIHJvb3QgbG9nZ2VyLCB3aXRoIGV4Y2VwdGlvbgogICAgIGluZm9ybWF0aW9uLiBJZiB0aGUgbG9nZ2VyIGhhcyBubyBoYW5kbGVycywgYmFzaWNDb25maWcoKSBpcyBjYWxsZWQgdG8gYWRkCiAgICAgYSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIHByZS1kZWZpbmVkIGZvcm1hdC4KICAgICAiIiIKLSAgICBrd2FyZ3NbJ2V4Y19pbmZvJ10gPSBUcnVlCi0gICAgZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpCisgICAgZXJyb3IobXNnLCAqYXJncywgZXhjX2luZm89ZXhjX2luZm8sICoqa3dhcmdzKQogCiBkZWYgd2FybmluZyhtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggODk1ZmIyNi4uOGE5OTkyMyAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtMTE2LDExICsxMTYsMTIgQEAKICAgICAgICAgc2VjdG5hbWUgPSAiZm9ybWF0dGVyXyVzIiAlIGZvcm0KICAgICAgICAgZnMgPSBjcC5nZXQoc2VjdG5hbWUsICJmb3JtYXQiLCByYXc9VHJ1ZSwgZmFsbGJhY2s9Tm9uZSkKICAgICAgICAgZGZzID0gY3AuZ2V0KHNlY3RuYW1lLCAiZGF0ZWZtdCIsIHJhdz1UcnVlLCBmYWxsYmFjaz1Ob25lKQorICAgICAgICBzdGwgPSBjcC5nZXQoc2VjdG5hbWUsICJzdHlsZSIsIHJhdz1UcnVlLCBmYWxsYmFjaz0nJScpCiAgICAgICAgIGMgPSBsb2dnaW5nLkZvcm1hdHRlcgogICAgICAgICBjbGFzc19uYW1lID0gY3Bbc2VjdG5hbWVdLmdldCgiY2xhc3MiKQogICAgICAgICBpZiBjbGFzc19uYW1lOgogICAgICAgICAgICAgYyA9IF9yZXNvbHZlKGNsYXNzX25hbWUpCi0gICAgICAgIGYgPSBjKGZzLCBkZnMpCisgICAgICAgIGYgPSBjKGZzLCBkZnMsIHN0bCkKICAgICAgICAgZm9ybWF0dGVyc1tmb3JtXSA9IGYKICAgICByZXR1cm4gZm9ybWF0dGVycwogCkBAIC02NjAsNyArNjYxLDEyIEBACiAgICAgICAgICAgICBmbXQgPSBjb25maWcuZ2V0KCdmb3JtYXQnLCBOb25lKQogICAgICAgICAgICAgZGZtdCA9IGNvbmZpZy5nZXQoJ2RhdGVmbXQnLCBOb25lKQogICAgICAgICAgICAgc3R5bGUgPSBjb25maWcuZ2V0KCdzdHlsZScsICclJykKLSAgICAgICAgICAgIHJlc3VsdCA9IGxvZ2dpbmcuRm9ybWF0dGVyKGZtdCwgZGZtdCwgc3R5bGUpCisgICAgICAgICAgICBjbmFtZSA9IGNvbmZpZy5nZXQoJ2NsYXNzJywgTm9uZSkKKyAgICAgICAgICAgIGlmIG5vdCBjbmFtZToKKyAgICAgICAgICAgICAgICBjID0gbG9nZ2luZy5Gb3JtYXR0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYyA9IF9yZXNvbHZlKGNuYW1lKQorICAgICAgICAgICAgcmVzdWx0ID0gYyhmbXQsIGRmbXQsIHN0eWxlKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgY29uZmlndXJlX2ZpbHRlcihzZWxmLCBjb25maWcpOgpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQppbmRleCAxM2E4ZmIyLi5jOWY4MjE3IDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQorKysgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQpAQCAtNTg4LDYgKzU4OCw4IEBACiAgICAgICAgIGRbJ21zZyddID0gcmVjb3JkLmdldE1lc3NhZ2UoKQogICAgICAgICBkWydhcmdzJ10gPSBOb25lCiAgICAgICAgIGRbJ2V4Y19pbmZvJ10gPSBOb25lCisgICAgICAgICMgSXNzdWUgIzI1Njg1OiBkZWxldGUgJ21lc3NhZ2UnIGlmIHByZXNlbnQ6IHJlZHVuZGFudCB3aXRoICdtc2cnCisgICAgICAgIGQucG9wKCdtZXNzYWdlJywgTm9uZSkKICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkLCAxKQogICAgICAgICBzbGVuID0gc3RydWN0LnBhY2soIj5MIiwgbGVuKHMpKQogICAgICAgICByZXR1cm4gc2xlbiArIHMKQEAgLTExNTQsOCArMTE1Niw4IEBACiAgICAgICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihkYXRhKSkpCiAgICAgICAgICAgICBpZiBzZWxmLmNyZWRlbnRpYWxzOgogICAgICAgICAgICAgICAgIGltcG9ydCBiYXNlNjQKLSAgICAgICAgICAgICAgICBzID0gKCd1JXM6JXMnICUgc2VsZi5jcmVkZW50aWFscykuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICAgICAgcyA9ICdCYXNpYyAnICsgYmFzZTY0LmI2NGVuY29kZShzKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcyA9ICgnJXM6JXMnICUgc2VsZi5jcmVkZW50aWFscykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAgICAgcyA9ICdCYXNpYyAnICsgYmFzZTY0LmI2NGVuY29kZShzKS5zdHJpcCgpLmRlY29kZSgnYXNjaWknKQogICAgICAgICAgICAgICAgIGgucHV0aGVhZGVyKCdBdXRob3JpemF0aW9uJywgcykKICAgICAgICAgICAgIGguZW5kaGVhZGVycygpCiAgICAgICAgICAgICBpZiBzZWxmLm1ldGhvZCA9PSAiUE9TVCI6CkBAIC0xMzU3LDcgKzEzNTksNyBAQAogICAgICAgICAiIiIKICAgICAgICAgX3NlbnRpbmVsID0gTm9uZQogCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSwgKmhhbmRsZXJzKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlLCAqaGFuZGxlcnMsIHJlc3BlY3RfaGFuZGxlcl9sZXZlbD1GYWxzZSk6CiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIEluaXRpYWxpc2UgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHF1ZXVlIGFuZAogICAgICAgICAgICAgaGFuZGxlcnMuCkBAIC0xMzY2LDYgKzEzNjgsNyBAQAogICAgICAgICAgICAgc2VsZi5oYW5kbGVycyA9IGhhbmRsZXJzCiAgICAgICAgICAgICBzZWxmLl9zdG9wID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucmVzcGVjdF9oYW5kbGVyX2xldmVsID0gcmVzcGVjdF9oYW5kbGVyX2xldmVsCiAKICAgICAgICAgZGVmIGRlcXVldWUoc2VsZiwgYmxvY2spOgogICAgICAgICAgICAgIiIiCkBAIC0xNDA2LDcgKzE0MDksMTIgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgcmVjb3JkID0gc2VsZi5wcmVwYXJlKHJlY29yZCkKICAgICAgICAgICAgIGZvciBoYW5kbGVyIGluIHNlbGYuaGFuZGxlcnM6Ci0gICAgICAgICAgICAgICAgaGFuZGxlci5oYW5kbGUocmVjb3JkKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJlc3BlY3RfaGFuZGxlcl9sZXZlbDoKKyAgICAgICAgICAgICAgICAgICAgcHJvY2VzcyA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzID0gcmVjb3JkLmxldmVsbm8gPj0gaGFuZGxlci5sZXZlbAorICAgICAgICAgICAgICAgIGlmIHByb2Nlc3M6CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuaGFuZGxlKHJlY29yZCkKIAogICAgICAgICBkZWYgX21vbml0b3Ioc2VsZik6CiAgICAgICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9sem1hLnB5IGIvTGliL2x6bWEucHkKaW5kZXggZjFkMzk1OC4uN2RmZjFjMyAxMDA2NDQKLS0tIGEvTGliL2x6bWEucHkKKysrIGIvTGliL2x6bWEucHkKQEAgLTI1LDE3ICsyNSwxNiBAQAogaW1wb3J0IGlvCiBmcm9tIF9sem1hIGltcG9ydCAqCiBmcm9tIF9sem1hIGltcG9ydCBfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLCBfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzCitpbXBvcnQgX2NvbXByZXNzaW9uCiAKIAogX01PREVfQ0xPU0VEICAgPSAwCiBfTU9ERV9SRUFEICAgICA9IDEKLV9NT0RFX1JFQURfRU9GID0gMgorIyBWYWx1ZSAyIG5vIGxvbmdlciB1c2VkCiBfTU9ERV9XUklURSAgICA9IDMKIAotX0JVRkZFUl9TSVpFID0gODE5MgogCi0KLWNsYXNzIExaTUFGaWxlKGlvLkJ1ZmZlcmVkSU9CYXNlKToKK2NsYXNzIExaTUFGaWxlKF9jb21wcmVzc2lvbi5CYXNlU3RyZWFtKToKIAogICAgICIiIkEgZmlsZSBvYmplY3QgcHJvdmlkaW5nIHRyYW5zcGFyZW50IExaTUEgKGRlKWNvbXByZXNzaW9uLgogCkBAIC05Miw4ICs5MSw2IEBACiAgICAgICAgIHNlbGYuX2ZwID0gTm9uZQogICAgICAgICBzZWxmLl9jbG9zZWZwID0gRmFsc2UKICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX0NMT1NFRAotICAgICAgICBzZWxmLl9wb3MgPSAwCi0gICAgICAgIHNlbGYuX3NpemUgPSAtMQogCiAgICAgICAgIGlmIG1vZGUgaW4gKCJyIiwgInJiIik6CiAgICAgICAgICAgICBpZiBjaGVjayAhPSAtMToKQEAgLTEwNSwxOSArMTAyLDEzIEBACiAgICAgICAgICAgICBpZiBmb3JtYXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBmb3JtYXQgPSBGT1JNQVRfQVVUTwogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfUkVBRAotICAgICAgICAgICAgIyBTYXZlIHRoZSBhcmdzIHRvIHBhc3MgdG8gdGhlIExaTUFEZWNvbXByZXNzb3IgaW5pdGlhbGl6ZXIuCi0gICAgICAgICAgICAjIElmIHRoZSBmaWxlIGNvbnRhaW5zIG11bHRpcGxlIGNvbXByZXNzZWQgc3RyZWFtcywgZWFjaAotICAgICAgICAgICAgIyBzdHJlYW0gd2lsbCBuZWVkIGEgc2VwYXJhdGUgZGVjb21wcmVzc29yIG9iamVjdC4KLSAgICAgICAgICAgIHNlbGYuX2luaXRfYXJncyA9IHsiZm9ybWF0Ijpmb3JtYXQsICJmaWx0ZXJzIjpmaWx0ZXJzfQotICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgotICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKICAgICAgICAgZWxpZiBtb2RlIGluICgidyIsICJ3YiIsICJhIiwgImFiIiwgIngiLCAieGIiKToKICAgICAgICAgICAgIGlmIGZvcm1hdCBpcyBOb25lOgogICAgICAgICAgICAgICAgIGZvcm1hdCA9IEZPUk1BVF9YWgogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBMWk1BQ29tcHJlc3Nvcihmb3JtYXQ9Zm9ybWF0LCBjaGVjaz1jaGVjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQ9cHJlc2V0LCBmaWx0ZXJzPWZpbHRlcnMpCisgICAgICAgICAgICBzZWxmLl9wb3MgPSAwCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1vZGU6IHshcn0iLmZvcm1hdChtb2RlKSkKIApAQCAtMTMzLDYgKzEyNCwxMSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmaWxlbmFtZSBtdXN0IGJlIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCwgb3IgYSBmaWxlIikKIAorICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQUQ6CisgICAgICAgICAgICByYXcgPSBfY29tcHJlc3Npb24uRGVjb21wcmVzc1JlYWRlcihzZWxmLl9mcCwgTFpNQURlY29tcHJlc3NvciwKKyAgICAgICAgICAgICAgICB0cmFpbGluZ19lcnJvcj1MWk1BRXJyb3IsIGZvcm1hdD1mb3JtYXQsIGZpbHRlcnM9ZmlsdGVycykKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGlvLkJ1ZmZlcmVkUmVhZGVyKHJhdykKKwogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIiIiRmx1c2ggYW5kIGNsb3NlIHRoZSBmaWxlLgogCkBAIC0xNDIsOSArMTM4LDkgQEAKICAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9DTE9TRUQ6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgc2VsZi5fbW9kZSBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgotICAgICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRDoKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKICAgICAgICAgICAgIGVsaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9XUklURToKICAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzZWxmLl9jb21wcmVzc29yLmZsdXNoKCkpCiAgICAgICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IE5vbmUKQEAgLTE2OSwxMjMgKzE2NSwxOCBAQAogCiAgICAgZGVmIHNlZWthYmxlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgZmlsZSBzdXBwb3J0cyBzZWVraW5nLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkYWJsZSgpIGFuZCBzZWxmLl9mcC5zZWVrYWJsZSgpCisgICAgICAgIHJldHVybiBzZWxmLnJlYWRhYmxlKCkgYW5kIHNlbGYuX2J1ZmZlci5zZWVrYWJsZSgpCiAKICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBmaWxlIHdhcyBvcGVuZWQgZm9yIHJlYWRpbmcuIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQotICAgICAgICByZXR1cm4gc2VsZi5fbW9kZSBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpCisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQUQKIAogICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhlIGZpbGUgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy4iIiIKICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCiAgICAgICAgIHJldHVybiBzZWxmLl9tb2RlID09IF9NT0RFX1dSSVRFCiAKLSAgICAjIE1vZGUtY2hlY2tpbmcgaGVscGVyIGZ1bmN0aW9ucy4KLQotICAgIGRlZiBfY2hlY2tfbm90X2Nsb3NlZChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlIikKLQotICAgIGRlZiBfY2hlY2tfY2FuX3JlYWQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX21vZGUgbm90IGluIChfTU9ERV9SRUFELCBfTU9ERV9SRUFEX0VPRik6Ci0gICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKLSAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG5vdCBvcGVuIGZvciByZWFkaW5nIikKLQotICAgIGRlZiBfY2hlY2tfY2FuX3dyaXRlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9tb2RlICE9IF9NT0RFX1dSSVRFOgotICAgICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCi0gICAgICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbigiRmlsZSBub3Qgb3BlbiBmb3Igd3JpdGluZyIpCi0KLSAgICBkZWYgX2NoZWNrX2Nhbl9zZWVrKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9tb2RlIG5vdCBpbiAoX01PREVfUkVBRCwgX01PREVfUkVBRF9FT0YpOgotICAgICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCi0gICAgICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbigiU2Vla2luZyBpcyBvbmx5IHN1cHBvcnRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gZmlsZXMgb3BlbiBmb3IgcmVhZGluZyIpCi0gICAgICAgIGlmIG5vdCBzZWxmLl9mcC5zZWVrYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIlRoZSB1bmRlcmx5aW5nIGZpbGUgb2JqZWN0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb2VzIG5vdCBzdXBwb3J0IHNlZWtpbmciKQotCi0gICAgIyBGaWxsIHRoZSByZWFkYWhlYWQgYnVmZmVyIGlmIGl0IGlzIGVtcHR5LiBSZXR1cm5zIEZhbHNlIG9uIEVPRi4KLSAgICBkZWYgX2ZpbGxfYnVmZmVyKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICMgRGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBkYXRhLCBvdXIgY2FsbCB0byB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKLSAgICAgICAgIyByZXR1cm4gYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgdHJ5IGFnYWluIGFmdGVyIHJlYWRpbmcgYW5vdGhlciBibG9jay4KLSAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgIHJhd2Jsb2NrID0gKHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAucmVhZChfQlVGRkVSX1NJWkUpKQotCi0gICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQURfRU9GCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpemUgPSBzZWxmLl9wb3MKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoIkNvbXByZXNzZWQgZmlsZSBlbmRlZCBiZWZvcmUgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZC1vZi1zdHJlYW0gbWFya2VyIHdhcyByZWFjaGVkIikKLQotICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKLSAgICAgICAgICAgICAgICAjIENvbnRpbnVlIHRvIG5leHQgc3RyZWFtLgotICAgICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IExaTUFEZWNvbXByZXNzb3IoKipzZWxmLl9pbml0X2FyZ3MpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhyYXdibG9jaykKLSAgICAgICAgICAgICAgICBleGNlcHQgTFpNQUVycm9yOgotICAgICAgICAgICAgICAgICAgICAjIFRyYWlsaW5nIGRhdGEgaXNuJ3QgYSB2YWxpZCBjb21wcmVzc2VkIHN0cmVhbTsgaWdub3JlIGl0LgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9tb2RlID0gX01PREVfUkVBRF9FT0YKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2l6ZSA9IHNlbGYuX3BvcwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MocmF3YmxvY2spCi0gICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgIyBSZWFkIGRhdGEgdW50aWwgRU9GLgotICAgICMgSWYgcmV0dXJuX2RhdGEgaXMgZmFsc2UsIGNvbnN1bWUgdGhlIGRhdGEgd2l0aG91dCByZXR1cm5pbmcgaXQuCi0gICAgZGVmIF9yZWFkX2FsbChzZWxmLCByZXR1cm5fZGF0YT1UcnVlKToKLSAgICAgICAgIyBUaGUgbG9vcCBhc3N1bWVzIHRoYXQgX2J1ZmZlcl9vZmZzZXQgaXMgMC4gRW5zdXJlIHRoYXQgdGhpcyBpcyB0cnVlLgotICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCi0gICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCi0KLSAgICAgICAgYmxvY2tzID0gW10KLSAgICAgICAgd2hpbGUgc2VsZi5fZmlsbF9idWZmZXIoKToKLSAgICAgICAgICAgIGlmIHJldHVybl9kYXRhOgotICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoc2VsZi5fYnVmZmVyKQotICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihzZWxmLl9idWZmZXIpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKLSAgICAgICAgaWYgcmV0dXJuX2RhdGE6Ci0gICAgICAgICAgICByZXR1cm4gYiIiLmpvaW4oYmxvY2tzKQotCi0gICAgIyBSZWFkIGEgYmxvY2sgb2YgdXAgdG8gbiBieXRlcy4KLSAgICAjIElmIHJldHVybl9kYXRhIGlzIGZhbHNlLCBjb25zdW1lIHRoZSBkYXRhIHdpdGhvdXQgcmV0dXJuaW5nIGl0LgotICAgIGRlZiBfcmVhZF9ibG9jayhzZWxmLCBuLCByZXR1cm5fZGF0YT1UcnVlKToKLSAgICAgICAgIyBJZiB3ZSBoYXZlIGVub3VnaCBkYXRhIGJ1ZmZlcmVkLCByZXR1cm4gaW1tZWRpYXRlbHkuCi0gICAgICAgIGVuZCA9IHNlbGYuX2J1ZmZlcl9vZmZzZXQgKyBuCi0gICAgICAgIGlmIGVuZCA8PSBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6IGVuZF0KLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSBlbmQKLSAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKLSAgICAgICAgICAgIHJldHVybiBkYXRhIGlmIHJldHVybl9kYXRhIGVsc2UgTm9uZQotCi0gICAgICAgICMgVGhlIGxvb3AgYXNzdW1lcyB0aGF0IF9idWZmZXJfb2Zmc2V0IGlzIDAuIEVuc3VyZSB0aGF0IHRoaXMgaXMgdHJ1ZS4KLSAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQotICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAotCi0gICAgICAgIGJsb2NrcyA9IFtdCi0gICAgICAgIHdoaWxlIG4gPiAwIGFuZCBzZWxmLl9maWxsX2J1ZmZlcigpOgotICAgICAgICAgICAgaWYgbiA8IGxlbihzZWxmLl9idWZmZXIpOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbOm5dCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IG4KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgotICAgICAgICAgICAgaWYgcmV0dXJuX2RhdGE6Ci0gICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChkYXRhKQotICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQotICAgICAgICAgICAgbiAtPSBsZW4oZGF0YSkKLSAgICAgICAgaWYgcmV0dXJuX2RhdGE6Ci0gICAgICAgICAgICByZXR1cm4gYiIiLmpvaW4oYmxvY2tzKQotCiAgICAgZGVmIHBlZWsoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICIiIlJldHVybiBidWZmZXJlZCBkYXRhIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBmaWxlIHBvc2l0aW9uLgogCkBAIC0yOTMsOSArMTg0LDkgQEAKICAgICAgICAgVGhlIGV4YWN0IG51bWJlciBvZiBieXRlcyByZXR1cm5lZCBpcyB1bnNwZWNpZmllZC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgICMgUmVsaWVzIG9uIHRoZSB1bmRvY3VtZW50ZWQgZmFjdCB0aGF0IEJ1ZmZlcmVkUmVhZGVyLnBlZWsoKSBhbHdheXMKKyAgICAgICAgIyByZXR1cm5zIGF0IGxlYXN0IG9uZSBieXRlIChleGNlcHQgYXQgRU9GKQorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLnBlZWsoc2l6ZSkKIAogICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgogICAgICAgICAiIiJSZWFkIHVwIHRvIHNpemUgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGZpbGUuCkBAIC0zMDQsMzggKzE5NSwxOSBAQAogICAgICAgICBSZXR1cm5zIGIiIiBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGF0IEVPRi4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgc2l6ZSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICBlbGlmIHNpemUgPCAwOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfYWxsKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2Jsb2NrKHNpemUpCisgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIucmVhZChzaXplKQogCiAgICAgZGVmIHJlYWQxKHNlbGYsIHNpemU9LTEpOgogICAgICAgICAiIiJSZWFkIHVwIHRvIHNpemUgdW5jb21wcmVzc2VkIGJ5dGVzLCB3aGlsZSB0cnlpbmcgdG8gYXZvaWQKLSAgICAgICAgbWFraW5nIG11bHRpcGxlIHJlYWRzIGZyb20gdGhlIHVuZGVybHlpbmcgc3RyZWFtLgorICAgICAgICBtYWtpbmcgbXVsdGlwbGUgcmVhZHMgZnJvbSB0aGUgdW5kZXJseWluZyBzdHJlYW0uIFJlYWRzIHVwIHRvIGEKKyAgICAgICAgYnVmZmVyJ3Mgd29ydGggb2YgZGF0YSBpZiBzaXplIGlzIG5lZ2F0aXZlLgogCiAgICAgICAgIFJldHVybnMgYiIiIGlmIHRoZSBmaWxlIGlzIGF0IEVPRi4KICAgICAgICAgIiIiCi0gICAgICAgICMgVXN1YWxseSwgcmVhZDEoKSBjYWxscyBfZnAucmVhZCgpIGF0IG1vc3Qgb25jZS4gSG93ZXZlciwgc29tZXRpbWVzCi0gICAgICAgICMgdGhpcyBkb2VzIG5vdCBnaXZlIGVub3VnaCBkYXRhIGZvciB0aGUgZGVjb21wcmVzc29yIHRvIG1ha2UgcHJvZ3Jlc3MuCi0gICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIG1ha2UgbXVsdGlwbGUgcmVhZHMsIHRvIGF2b2lkIHJldHVybmluZyBiIiIuCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgKHNpemUgPT0gMCBvcgotICAgICAgICAgICAgIyBPbmx5IGNhbGwgX2ZpbGxfYnVmZmVyKCkgaWYgdGhlIGJ1ZmZlciBpcyBhY3R1YWxseSBlbXB0eS4KLSAgICAgICAgICAgICMgVGhpcyBnaXZlcyBhIHNpZ25pZmljYW50IHNwZWVkdXAgaWYgKnNpemUqIGlzIHNtYWxsLgotICAgICAgICAgICAgKHNlbGYuX2J1ZmZlcl9vZmZzZXQgPT0gbGVuKHNlbGYuX2J1ZmZlcikgYW5kIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpKSk6Ci0gICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIGlmIHNpemUgPiAwOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCArIHNpemVdCi0gICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ICs9IGxlbihkYXRhKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgotICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKLSAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQotICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgIHNpemUgPSBpby5ERUZBVUxUX0JVRkZFUl9TSVpFCisgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIucmVhZDEoc2l6ZSkKIAogICAgIGRlZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKICAgICAgICAgIiIiUmVhZCBhIGxpbmUgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGZpbGUuCkBAIC0zNDUsMTUgKzIxNyw3IEBACiAgICAgICAgIGNhc2UgdGhlIGxpbmUgbWF5IGJlIGluY29tcGxldGUpLiBSZXR1cm5zIGInJyBpZiBhbHJlYWR5IGF0IEVPRi4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgIyBTaG9ydGN1dCBmb3IgdGhlIGNvbW1vbiBjYXNlIC0gdGhlIHdob2xlIGxpbmUgaXMgaW4gdGhlIGJ1ZmZlci4KLSAgICAgICAgaWYgc2l6ZSA8IDA6Ci0gICAgICAgICAgICBlbmQgPSBzZWxmLl9idWZmZXIuZmluZChiIlxuIiwgc2VsZi5fYnVmZmVyX29mZnNldCkgKyAxCi0gICAgICAgICAgICBpZiBlbmQgPiAwOgotICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6IGVuZF0KLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gZW5kCi0gICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihsaW5lKQotICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCi0gICAgICAgIHJldHVybiBpby5CdWZmZXJlZElPQmFzZS5yZWFkbGluZShzZWxmLCBzaXplKQorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyLnJlYWRsaW5lKHNpemUpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CiAgICAgICAgICIiIldyaXRlIGEgYnl0ZXMgb2JqZWN0IHRvIHRoZSBmaWxlLgpAQCAtMzY4LDE2ICsyMzIsNyBAQAogICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKGRhdGEpCiAgICAgICAgIHJldHVybiBsZW4oZGF0YSkKIAotICAgICMgUmV3aW5kIHRoZSBmaWxlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgc3RyZWFtLgotICAgIGRlZiBfcmV3aW5kKHNlbGYpOgotICAgICAgICBzZWxmLl9mcC5zZWVrKDAsIDApCi0gICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFECi0gICAgICAgIHNlbGYuX3BvcyA9IDAKLSAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCi0gICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCi0KLSAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT0wKToKKyAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT1pby5TRUVLX1NFVCk6CiAgICAgICAgICIiIkNoYW5nZSB0aGUgZmlsZSBwb3NpdGlvbi4KIAogICAgICAgICBUaGUgbmV3IHBvc2l0aW9uIGlzIHNwZWNpZmllZCBieSBvZmZzZXQsIHJlbGF0aXZlIHRvIHRoZQpAQCAtMzg5LDM4ICsyNDQsMTcgQEAKIAogICAgICAgICBSZXR1cm5zIHRoZSBuZXcgZmlsZSBwb3NpdGlvbi4KIAotICAgICAgICBOb3RlIHRoYXQgc2Vla2luZyBpcyBlbXVsYXRlZCwgc3AgZGVwZW5kaW5nIG9uIHRoZSBwYXJhbWV0ZXJzLAorICAgICAgICBOb3RlIHRoYXQgc2Vla2luZyBpcyBlbXVsYXRlZCwgc28gZGVwZW5kaW5nIG9uIHRoZSBwYXJhbWV0ZXJzLAogICAgICAgICB0aGlzIG9wZXJhdGlvbiBtYXkgYmUgZXh0cmVtZWx5IHNsb3cuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVja19jYW5fc2VlaygpCi0KLSAgICAgICAgIyBSZWNhbGN1bGF0ZSBvZmZzZXQgYXMgYW4gYWJzb2x1dGUgZmlsZSBwb3NpdGlvbi4KLSAgICAgICAgaWYgd2hlbmNlID09IDA6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsaWYgd2hlbmNlID09IDE6Ci0gICAgICAgICAgICBvZmZzZXQgPSBzZWxmLl9wb3MgKyBvZmZzZXQKLSAgICAgICAgZWxpZiB3aGVuY2UgPT0gMjoKLSAgICAgICAgICAgICMgU2Vla2luZyByZWxhdGl2ZSB0byBFT0YgLSB3ZSBuZWVkIHRvIGtub3cgdGhlIGZpbGUncyBzaXplLgotICAgICAgICAgICAgaWYgc2VsZi5fc2l6ZSA8IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9hbGwocmV0dXJuX2RhdGE9RmFsc2UpCi0gICAgICAgICAgICBvZmZzZXQgPSBzZWxmLl9zaXplICsgb2Zmc2V0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciB3aGVuY2U6IHt9Ii5mb3JtYXQod2hlbmNlKSkKLQotICAgICAgICAjIE1ha2UgaXQgc28gdGhhdCBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwIGZvcndhcmQuCi0gICAgICAgIGlmIG9mZnNldCA8IHNlbGYuX3BvczoKLSAgICAgICAgICAgIHNlbGYuX3Jld2luZCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvZmZzZXQgLT0gc2VsZi5fcG9zCi0KLSAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGRhdGEgdW50aWwgd2UgcmVhY2ggdGhlIGRlc2lyZWQgcG9zaXRpb24uCi0gICAgICAgIHNlbGYuX3JlYWRfYmxvY2sob2Zmc2V0LCByZXR1cm5fZGF0YT1GYWxzZSkKLQotICAgICAgICByZXR1cm4gc2VsZi5fcG9zCisgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIuc2VlayhvZmZzZXQsIHdoZW5jZSkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbi4iIiIKICAgICAgICAgc2VsZi5fY2hlY2tfbm90X2Nsb3NlZCgpCisgICAgICAgIGlmIHNlbGYuX21vZGUgPT0gX01PREVfUkVBRDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXIudGVsbCgpCiAgICAgICAgIHJldHVybiBzZWxmLl9wb3MKIAogCkBAIC00NDUsNyArMjc5LDcgQEAKICAgICBjb25zdHJ1Y3RvcjogTFpNQUZpbGUoZmlsZW5hbWUsIG1vZGUsIC4uLikuIEluIHRoaXMgY2FzZSwgdGhlCiAgICAgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKLSAgICBGb3IgdGV4dCBtb2RlLCBhIExaTUFGaWxlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgd3JhcHBlZCBpbiBhbgorICAgIEZvciB0ZXh0IG1vZGUsIGFuIExaTUFGaWxlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgd3JhcHBlZCBpbiBhbgogICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvcgogICAgIGhhbmRsaW5nIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCiAKZGlmZiAtLWdpdCBhL0xpYi9tYWNwYXRoLnB5IGIvTGliL21hY3BhdGgucHkKaW5kZXggNWNhMDA5Ny4uYTkwZDEwNSAxMDA2NDQKLS0tIGEvTGliL21hY3BhdGgucHkKKysrIGIvTGliL21hY3BhdGgucHkKQEAgLTUwLDIwICs1MCwyNiBAQAogCiAKIGRlZiBqb2luKHMsICpwKToKLSAgICBjb2xvbiA9IF9nZXRfY29sb24ocykKLSAgICBwYXRoID0gcwotICAgIGZvciB0IGluIHA6Ci0gICAgICAgIGlmIChub3QgcGF0aCkgb3IgaXNhYnModCk6Ci0gICAgICAgICAgICBwYXRoID0gdAotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgdFs6MV0gPT0gY29sb246Ci0gICAgICAgICAgICB0ID0gdFsxOl0KLSAgICAgICAgaWYgY29sb24gbm90IGluIHBhdGg6Ci0gICAgICAgICAgICBwYXRoID0gY29sb24gKyBwYXRoCi0gICAgICAgIGlmIHBhdGhbLTE6XSAhPSBjb2xvbjoKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgY29sb24KLSAgICAgICAgcGF0aCA9IHBhdGggKyB0Ci0gICAgcmV0dXJuIHBhdGgKKyAgICB0cnk6CisgICAgICAgIGNvbG9uID0gX2dldF9jb2xvbihzKQorICAgICAgICBwYXRoID0gcworICAgICAgICBpZiBub3QgcDoKKyAgICAgICAgICAgIHBhdGhbOjBdICsgY29sb24gICMyMzc4MDogRW5zdXJlIGNvbXBhdGlibGUgZGF0YSB0eXBlIGV2ZW4gaWYgcCBpcyBudWxsLgorICAgICAgICBmb3IgdCBpbiBwOgorICAgICAgICAgICAgaWYgKG5vdCBwYXRoKSBvciBpc2Ficyh0KToKKyAgICAgICAgICAgICAgICBwYXRoID0gdAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB0WzoxXSA9PSBjb2xvbjoKKyAgICAgICAgICAgICAgICB0ID0gdFsxOl0KKyAgICAgICAgICAgIGlmIGNvbG9uIG5vdCBpbiBwYXRoOgorICAgICAgICAgICAgICAgIHBhdGggPSBjb2xvbiArIHBhdGgKKyAgICAgICAgICAgIGlmIHBhdGhbLTE6XSAhPSBjb2xvbjoKKyAgICAgICAgICAgICAgICBwYXRoID0gcGF0aCArIGNvbG9uCisgICAgICAgICAgICBwYXRoID0gcGF0aCArIHQKKyAgICAgICAgcmV0dXJuIHBhdGgKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IsIEJ5dGVzV2FybmluZyk6CisgICAgICAgIGdlbmVyaWNwYXRoLl9jaGVja19hcmdfdHlwZXMoJ2pvaW4nLCBzLCAqcCkKKyAgICAgICAgcmFpc2UKIAogCiBkZWYgc3BsaXQocyk6CmRpZmYgLS1naXQgYS9MaWIvbWFpbGJveC5weSBiL0xpYi9tYWlsYm94LnB5CmluZGV4IDRlNDJhZDIuLjAyNzBlMjUgMTAwNjQ0Ci0tLSBhL0xpYi9tYWlsYm94LnB5CisrKyBiL0xpYi9tYWlsYm94LnB5CkBAIC0xMjM0LDggKzEyMzQsOCBAQAogY2xhc3MgQmFieWwoX3NpbmdsZWZpbGVNYWlsYm94KToKICAgICAiIiJBbiBSbWFpbC1zdHlsZSBCYWJ5bCBtYWlsYm94LiIiIgogCi0gICAgX3NwZWNpYWxfbGFiZWxzID0gZnJvemVuc2V0KCgndW5zZWVuJywgJ2RlbGV0ZWQnLCAnZmlsZWQnLCAnYW5zd2VyZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvcndhcmRlZCcsICdlZGl0ZWQnLCAncmVzZW50JykpCisgICAgX3NwZWNpYWxfbGFiZWxzID0gZnJvemVuc2V0KHsndW5zZWVuJywgJ2RlbGV0ZWQnLCAnZmlsZWQnLCAnYW5zd2VyZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvcndhcmRlZCcsICdlZGl0ZWQnLCAncmVzZW50J30pCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZmFjdG9yeT1Ob25lLCBjcmVhdGU9VHJ1ZSk6CiAgICAgICAgICIiIkluaXRpYWxpemUgYSBCYWJ5bCBtYWlsYm94LiIiIgpAQCAtMTgyMSw3ICsxODIxLDcgQEAKICAgICBfdHlwZV9zcGVjaWZpY19hdHRyaWJ1dGVzID0gWydfbGFiZWxzJywgJ192aXNpYmxlJ10KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlPU5vbmUpOgotICAgICAgICAiIiJJbml0aWFsaXplIGFuIEJhYnlsTWVzc2FnZSBpbnN0YW5jZS4iIiIKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIEJhYnlsTWVzc2FnZSBpbnN0YW5jZS4iIiIKICAgICAgICAgc2VsZi5fbGFiZWxzID0gW10KICAgICAgICAgc2VsZi5fdmlzaWJsZSA9IE1lc3NhZ2UoKQogICAgICAgICBNZXNzYWdlLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpCkBAIC0xOTUzLDcgKzE5NTMsNyBAQAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgbGluZSA9IHNlbGYucmVhZGxpbmUoKQogICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgeWllbGQgbGluZQogCiAgICAgZGVmIHRlbGwoc2VsZik6CkBAIC0xOTcwLDkgKzE5NzAsMTEgQEAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNsb3NlIHRoZSBmaWxlLiIiIgogICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfZmlsZScpOgotICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9maWxlLCAnY2xvc2UnKToKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIGRlbCBzZWxmLl9maWxlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9maWxlLCAnY2xvc2UnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9maWxlCiAKICAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZSwgcmVhZF9tZXRob2QpOgogICAgICAgICAiIiJSZWFkIHNpemUgYnl0ZXMgdXNpbmcgcmVhZF9tZXRob2QuIiIiCmRpZmYgLS1naXQgYS9MaWIvbWltZXR5cGVzLnB5IGIvTGliL21pbWV0eXBlcy5weQppbmRleCBkNjQ3MjZiLi4wYmU3NmFkIDEwMDY0NAotLS0gYS9MaWIvbWltZXR5cGVzLnB5CisrKyBiL0xpYi9taW1ldHlwZXMucHkKQEAgLTQxNiw2ICs0MTYsNyBAQAogICAgICAgICAnLmNwaW8nICAgOiAnYXBwbGljYXRpb24veC1jcGlvJywKICAgICAgICAgJy5jc2gnICAgIDogJ2FwcGxpY2F0aW9uL3gtY3NoJywKICAgICAgICAgJy5jc3MnICAgIDogJ3RleHQvY3NzJywKKyAgICAgICAgJy5jc3YnICAgIDogJ3RleHQvY3N2JywKICAgICAgICAgJy5kbGwnICAgIDogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsCiAgICAgICAgICcuZG9jJyAgICA6ICdhcHBsaWNhdGlvbi9tc3dvcmQnLAogICAgICAgICAnLmRvdCcgICAgOiAnYXBwbGljYXRpb24vbXN3b3JkJywKQEAgLTUxMyw2ICs1MTQsNyBAQAogICAgICAgICAnLnVzdGFyJyAgOiAnYXBwbGljYXRpb24veC11c3RhcicsCiAgICAgICAgICcudmNmJyAgICA6ICd0ZXh0L3gtdmNhcmQnLAogICAgICAgICAnLndhdicgICAgOiAnYXVkaW8veC13YXYnLAorICAgICAgICAnLndlYm0nICAgOiAndmlkZW8vd2VibScsCiAgICAgICAgICcud2l6JyAgICA6ICdhcHBsaWNhdGlvbi9tc3dvcmQnLAogICAgICAgICAnLndzZGwnICAgOiAnYXBwbGljYXRpb24veG1sJywKICAgICAgICAgJy54Ym0nICAgIDogJ2ltYWdlL3gteGJpdG1hcCcsCmRpZmYgLS1naXQgYS9MaWIvbW9kdWxlZmluZGVyLnB5IGIvTGliL21vZHVsZWZpbmRlci5weQppbmRleCBiNzc4ZTYwLi44MTAzNTAyIDEwMDY0NAotLS0gYS9MaWIvbW9kdWxlZmluZGVyLnB5CisrKyBiL0xpYi9tb2R1bGVmaW5kZXIucHkKQEAgLTEsNyArMSw3IEBACiAiIiJGaW5kIG1vZHVsZXMgdXNlZCBieSBhIHNjcmlwdCwgdXNpbmcgaW50cm9zcGVjdGlvbi4iIiIKIAogaW1wb3J0IGRpcwotaW1wb3J0IGltcG9ydGxpYi5fYm9vdHN0cmFwCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IG9zCkBAIC0xMywxMyArMTMsMTIgQEAKICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgaW1wb3J0IGltcAogCi0jIFhYWCBDbGVhbiB1cCBvbmNlIHN0cjgncyBjc3RvciBtYXRjaGVzIGJ5dGVzLgotTE9BRF9DT05TVCA9IGJ5dGVzKFtkaXMub3BuYW1lLmluZGV4KCdMT0FEX0NPTlNUJyldKQotSU1QT1JUX05BTUUgPSBieXRlcyhbZGlzLm9wbmFtZS5pbmRleCgnSU1QT1JUX05BTUUnKV0pCi1TVE9SRV9OQU1FID0gYnl0ZXMoW2Rpcy5vcG5hbWUuaW5kZXgoJ1NUT1JFX05BTUUnKV0pCi1TVE9SRV9HTE9CQUwgPSBieXRlcyhbZGlzLm9wbmFtZS5pbmRleCgnU1RPUkVfR0xPQkFMJyldKQotU1RPUkVfT1BTID0gW1NUT1JFX05BTUUsIFNUT1JFX0dMT0JBTF0KLUhBVkVfQVJHVU1FTlQgPSBieXRlcyhbZGlzLkhBVkVfQVJHVU1FTlRdKQorTE9BRF9DT05TVCA9IGRpcy5vcG1hcFsnTE9BRF9DT05TVCddCitJTVBPUlRfTkFNRSA9IGRpcy5vcG1hcFsnSU1QT1JUX05BTUUnXQorU1RPUkVfTkFNRSA9IGRpcy5vcG1hcFsnU1RPUkVfTkFNRSddCitTVE9SRV9HTE9CQUwgPSBkaXMub3BtYXBbJ1NUT1JFX0dMT0JBTCddCitTVE9SRV9PUFMgPSBTVE9SRV9OQU1FLCBTVE9SRV9HTE9CQUwKK0VYVEVOREVEX0FSRyA9IGRpcy5FWFRFTkRFRF9BUkcKIAogIyBNb2R1bGVmaW5kZXIgZG9lcyBhIGdvb2Qgam9iIGF0IHNpbXVsYXRpbmcgUHl0aG9uJ3MsIGJ1dCBpdCBjYW4gbm90CiAjIGhhbmRsZSBfX3BhdGhfXyBtb2RpZmljYXRpb25zIHBhY2thZ2VzIG1ha2UgYXQgcnVudGltZS4gIFRoZXJlZm9yZSB0aGVyZQpAQCAtMjIzLDcgKzIyMiw3IEBACiAgICAgICAgIGlmIG5vdCBtLl9fcGF0aF9fOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIG1vZHVsZXMgPSB7fQotICAgICAgICAjICdzdWZmaXhlcycgdXNlZCB0byBiZSBhIGxpc3QgaGFyZGNvZGVkIHRvIFsiLnB5IiwgIi5weWMiLCAiLnB5byJdLgorICAgICAgICAjICdzdWZmaXhlcycgdXNlZCB0byBiZSBhIGxpc3QgaGFyZGNvZGVkIHRvIFsiLnB5IiwgIi5weWMiXS4KICAgICAgICAgIyBCdXQgd2UgbXVzdCBhbHNvIGNvbGxlY3QgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzIC0gYWx0aG91Z2gKICAgICAgICAgIyB3ZSBjYW5ub3Qgc2VwYXJhdGUgbm9ybWFsIGRsbHMgZnJvbSBQeXRob24gZXh0ZW5zaW9ucy4KICAgICAgICAgc3VmZml4ZXMgPSBbXQpAQCAtMjg5LDcgKzI4OCw3IEBACiAgICAgICAgICAgICBjbyA9IGNvbXBpbGUoZnAucmVhZCgpKydcbicsIHBhdGhuYW1lLCAnZXhlYycpCiAgICAgICAgIGVsaWYgdHlwZSA9PSBpbXAuUFlfQ09NUElMRUQ6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWFyc2hhbF9kYXRhID0gaW1wb3J0bGliLl9ib290c3RyYXAuX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihmcC5yZWFkKCkpCisgICAgICAgICAgICAgICAgbWFyc2hhbF9kYXRhID0gaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwuX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihmcC5yZWFkKCkpCiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgICAgIHNlbGYubXNnb3V0KDIsICJyYWlzZSBJbXBvcnRFcnJvcjogIiArIHN0cihleGMpLCBwYXRobmFtZSkKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMzQwLDMxICszMzksMjQgQEAKICAgICBkZWYgc2Nhbl9vcGNvZGVzXzI1KHNlbGYsIGNvLAogICAgICAgICAgICAgICAgICAgICAgdW5wYWNrID0gc3RydWN0LnVucGFjayk6CiAgICAgICAgICMgU2NhbiB0aGUgY29kZSwgYW5kIHlpZWxkICdpbnRlcmVzdGluZycgb3Bjb2RlIGNvbWJpbmF0aW9ucwotICAgICAgICAjIFB5dGhvbiAyLjUgdmVyc2lvbiAoaGFzIGFic29sdXRlIGFuZCByZWxhdGl2ZSBpbXBvcnRzKQogICAgICAgICBjb2RlID0gY28uY29fY29kZQogICAgICAgICBuYW1lcyA9IGNvLmNvX25hbWVzCiAgICAgICAgIGNvbnN0cyA9IGNvLmNvX2NvbnN0cwotICAgICAgICBMT0FEX0xPQURfQU5EX0lNUE9SVCA9IExPQURfQ09OU1QgKyBMT0FEX0NPTlNUICsgSU1QT1JUX05BTUUKLSAgICAgICAgd2hpbGUgY29kZToKLSAgICAgICAgICAgIGMgPSBieXRlcyhbY29kZVswXV0pCi0gICAgICAgICAgICBpZiBjIGluIFNUT1JFX09QUzoKLSAgICAgICAgICAgICAgICBvcGFyZywgPSB1bnBhY2soJzxIJywgY29kZVsxOjNdKQorICAgICAgICBvcGFyZ3MgPSBbKG9wLCBhcmcpIGZvciBfLCBvcCwgYXJnIGluIGRpcy5fdW5wYWNrX29wYXJncyhjb2RlKQorICAgICAgICAgICAgICAgICAgaWYgb3AgIT0gRVhURU5ERURfQVJHXQorICAgICAgICBmb3IgaSwgKG9wLCBvcGFyZykgaW4gZW51bWVyYXRlKG9wYXJncyk6CisgICAgICAgICAgICBpZiBvcCBpbiBTVE9SRV9PUFM6CiAgICAgICAgICAgICAgICAgeWllbGQgInN0b3JlIiwgKG5hbWVzW29wYXJnXSwpCi0gICAgICAgICAgICAgICAgY29kZSA9IGNvZGVbMzpdCiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGNvZGVbOjk6M10gPT0gTE9BRF9MT0FEX0FORF9JTVBPUlQ6Ci0gICAgICAgICAgICAgICAgb3BhcmdfMSwgb3BhcmdfMiwgb3BhcmdfMyA9IHVucGFjaygnPHhIeEh4SCcsIGNvZGVbOjldKQotICAgICAgICAgICAgICAgIGxldmVsID0gY29uc3RzW29wYXJnXzFdCisgICAgICAgICAgICBpZiAob3AgPT0gSU1QT1JUX05BTUUgYW5kIGkgPj0gMgorICAgICAgICAgICAgICAgICAgICBhbmQgb3BhcmdzW2ktMV1bMF0gPT0gb3BhcmdzW2ktMl1bMF0gPT0gTE9BRF9DT05TVCk6CisgICAgICAgICAgICAgICAgbGV2ZWwgPSBjb25zdHNbb3BhcmdzW2ktMl1bMV1dCisgICAgICAgICAgICAgICAgZnJvbWxpc3QgPSBjb25zdHNbb3BhcmdzW2ktMV1bMV1dCiAgICAgICAgICAgICAgICAgaWYgbGV2ZWwgPT0gMDogIyBhYnNvbHV0ZSBpbXBvcnQKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgImFic29sdXRlX2ltcG9ydCIsIChjb25zdHNbb3BhcmdfMl0sIG5hbWVzW29wYXJnXzNdKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCAiYWJzb2x1dGVfaW1wb3J0IiwgKGZyb21saXN0LCBuYW1lc1tvcGFyZ10pCiAgICAgICAgICAgICAgICAgZWxzZTogIyByZWxhdGl2ZSBpbXBvcnQKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgInJlbGF0aXZlX2ltcG9ydCIsIChsZXZlbCwgY29uc3RzW29wYXJnXzJdLCBuYW1lc1tvcGFyZ18zXSkKLSAgICAgICAgICAgICAgICBjb2RlID0gY29kZVs5Ol0KKyAgICAgICAgICAgICAgICAgICAgeWllbGQgInJlbGF0aXZlX2ltcG9ydCIsIChsZXZlbCwgZnJvbWxpc3QsIG5hbWVzW29wYXJnXSkKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgYyA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlWzM6XQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb2RlID0gY29kZVsxOl0KIAogICAgIGRlZiBzY2FuX2NvZGUoc2VsZiwgY28sIG0pOgogICAgICAgICBjb2RlID0gY28uY29fY29kZQpkaWZmIC0tZ2l0IGEvTGliL21zaWxpYi9fX2luaXRfXy5weSBiL0xpYi9tc2lsaWIvX19pbml0X18ucHkKaW5kZXggZDI5YTU5My4uNmQwYTI4ZiAxMDA2NDQKLS0tIGEvTGliL21zaWxpYi9fX2luaXRfXy5weQorKysgYi9MaWIvbXNpbGliL19faW5pdF9fLnB5CkBAIC0xLDcgKzEsMTEgQEAKICMgQ29weXJpZ2h0IChDKSAyMDA1IE1hcnRpbiB2LiBMw7Z3aXMKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogZnJvbSBfbXNpIGltcG9ydCAqCi1pbXBvcnQgb3MsIHN0cmluZywgcmUsIHN5cworaW1wb3J0IGdsb2IKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3lzCiAKIEFNRDY0ID0gIkFNRDY0IiBpbiBzeXMudmVyc2lvbgogSXRhbml1bSA9ICJJdGFuaXVtIiBpbiBzeXMudmVyc2lvbgpAQCAtMzYxLDcgKzM2NSw3IEBACiAgICAgICAgICMgICAgICAgICAgICAgWyhsb2dpY2FsLCAwLCBmaWxlaGFzaC5JbnRlZ2VyRGF0YSgxKSwKICAgICAgICAgIyAgICAgICAgICAgICAgIGZpbGVoYXNoLkludGVnZXJEYXRhKDIpLCBmaWxlaGFzaC5JbnRlZ2VyRGF0YSgzKSwKICAgICAgICAgIyAgICAgICAgICAgICAgIGZpbGVoYXNoLkludGVnZXJEYXRhKDQpKV0pCi0gICAgICAgICMgQXV0b21hdGljYWxseSByZW1vdmUgLnB5Yy8ucHlvIGZpbGVzIG9uIHVuaW5zdGFsbCAoMikKKyAgICAgICAgIyBBdXRvbWF0aWNhbGx5IHJlbW92ZSAucHljIGZpbGVzIG9uIHVuaW5zdGFsbCAoMikKICAgICAgICAgIyBYWFg6IGFkZGluZyBzbyBtYW55IFJlbW92ZUZpbGUgZW50cmllcyBtYWtlcyBpbnN0YWxsZXIgdW5iZWxpZXZhYmx5CiAgICAgICAgICMgc2xvdy4gU28gaW5zdGVhZCwgd2UgaGF2ZSB0byB1c2Ugd2lsZGNhcmQgcmVtb3ZlIGVudHJpZXMKICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgiLnB5Iik6CkBAIC0zODIsMTAgKzM4Niw5IEBACiAgICAgICAgIHJldHVybiBmaWxlcwogCiAgICAgZGVmIHJlbW92ZV9weWMoc2VsZik6Ci0gICAgICAgICJSZW1vdmUgLnB5Yy8ucHlvIGZpbGVzIG9uIHVuaW5zdGFsbCIKKyAgICAgICAgIlJlbW92ZSAucHljIGZpbGVzIG9uIHVuaW5zdGFsbCIKICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIlJlbW92ZUZpbGUiLAotICAgICAgICAgICAgICAgICBbKHNlbGYuY29tcG9uZW50KyJjIiwgc2VsZi5jb21wb25lbnQsICIqLnB5YyIsIHNlbGYubG9naWNhbCwgMiksCi0gICAgICAgICAgICAgICAgICAoc2VsZi5jb21wb25lbnQrIm8iLCBzZWxmLmNvbXBvbmVudCwgIioucHlvIiwgc2VsZi5sb2dpY2FsLCAyKV0pCisgICAgICAgICAgICAgICAgIFsoc2VsZi5jb21wb25lbnQrImMiLCBzZWxmLmNvbXBvbmVudCwgIioucHljIiwgc2VsZi5sb2dpY2FsLCAyKV0pCiAKIGNsYXNzIEJpbmFyeToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZm5hbWUpOgpkaWZmIC0tZ2l0IGEvTGliL21zaWxpYi9zY2hlbWEucHkgYi9MaWIvbXNpbGliL3NjaGVtYS5weQppbmRleCA3MGZlMTM4Li5lZWIzZWNkIDEwMDY0NAotLS0gYS9MaWIvbXNpbGliL3NjaGVtYS5weQorKysgYi9MaWIvbXNpbGliL3NjaGVtYS5weQpAQCAtNzMxLDcgKzczMSw3IEBACiAoJ0N1c3RvbUFjdGlvbicsJ1R5cGUnLCdOJywxLDE2MzgzLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsICdUaGUgbnVtZXJpYyBjdXN0b20gYWN0aW9uIHR5cGUsIGNvbnNpc3Rpbmcgb2Ygc291cmNlIGxvY2F0aW9uLCBjb2RlIHR5cGUsIGVudHJ5LCBvcHRpb24gZmxhZ3MuJywpLAogKCdDdXN0b21BY3Rpb24nLCdBY3Rpb24nLCdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnSWRlbnRpZmllcicsTm9uZSwgJ1ByaW1hcnkga2V5LCBuYW1lIG9mIGFjdGlvbiwgbm9ybWFsbHkgYXBwZWFycyBpbiBzZXF1ZW5jZSB0YWJsZSB1bmxlc3MgcHJpdmF0ZSB1c2UuJywpLAogKCdDdXN0b21BY3Rpb24nLCdTb3VyY2UnLCdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnQ3VzdG9tU291cmNlJyxOb25lLCAnVGhlIHRhYmxlIHJlZmVyZW5jZSBvZiB0aGUgc291cmNlIG9mIHRoZSBjb2RlLicsKSwKLSgnQ3VzdG9tQWN0aW9uJywnVGFyZ2V0JywnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgJ0Zvcm1hdHRlZCcsTm9uZSwgJ0V4Y2VjdXRpb24gcGFyYW1ldGVyLCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIGN1c3RvbSBhY3Rpb24nLCksCisoJ0N1c3RvbUFjdGlvbicsJ1RhcmdldCcsJ1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsICdGb3JtYXR0ZWQnLE5vbmUsICdFeGVjdXRpb24gcGFyYW1ldGVyLCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIGN1c3RvbSBhY3Rpb24nLCksCiAoJ0RyTG9jYXRvcicsJ1NpZ25hdHVyZV8nLCdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnSWRlbnRpZmllcicsTm9uZSwgJ1RoZSBTaWduYXR1cmVfIHJlcHJlc2VudHMgYSB1bmlxdWUgZmlsZSBzaWduYXR1cmUgYW5kIGlzIGFsc28gdGhlIGZvcmVpZ24ga2V5IGluIHRoZSBTaWduYXR1cmUgdGFibGUuJywpLAogKCdEckxvY2F0b3InLCdQYXRoJywnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgJ0FueVBhdGgnLE5vbmUsICdUaGUgcGF0aCBvbiB0aGUgdXNlciBzeXN0ZW0uIFRoaXMgaXMgZWl0aGVyIGEgc3VicGF0aCBiZWxvdyB0aGUgdmFsdWUgb2YgdGhlIFBhcmVudCBvciBhIGZ1bGwgcGF0aC4gVGhlIHBhdGggbWF5IGNvbnRhaW4gcHJvcGVydGllcyBlbmNsb3NlZCB3aXRoaW4gWyBdIHRoYXQgd2lsbCBiZSBleHBhbmRlZC4nLCksCiAoJ0RyTG9jYXRvcicsJ0RlcHRoJywnWScsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnVGhlIGRlcHRoIGJlbG93IHRoZSBwYXRoIHRvIHdoaWNoIHRoZSBTaWduYXR1cmVfIGlzIHJlY3Vyc2l2ZWx5IHNlYXJjaGVkLiBJZiBhYnNlbnQsIHRoZSBkZXB0aCBpcyBhc3N1bWVkIHRvIGJlIDAuJywpLApkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CmluZGV4IDFlYjFhOGQuLmQwYTFiODYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKQEAgLTM2NSwxMCArMzY1LDcgQEAKICAgICBkZWYgX3NlbmQoc2VsZiwgYnVmLCB3cml0ZT1fd3JpdGUpOgogICAgICAgICByZW1haW5pbmcgPSBsZW4oYnVmKQogICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG4gPSB3cml0ZShzZWxmLl9oYW5kbGUsIGJ1ZikKLSAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBuID0gd3JpdGUoc2VsZi5faGFuZGxlLCBidWYpCiAgICAgICAgICAgICByZW1haW5pbmcgLT0gbgogICAgICAgICAgICAgaWYgcmVtYWluaW5nID09IDA6CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTM3OSwxMCArMzc2LDcgQEAKICAgICAgICAgaGFuZGxlID0gc2VsZi5faGFuZGxlCiAgICAgICAgIHJlbWFpbmluZyA9IHNpemUKICAgICAgICAgd2hpbGUgcmVtYWluaW5nID4gMDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjaHVuayA9IHJlYWQoaGFuZGxlLCByZW1haW5pbmcpCi0gICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgY2h1bmsgPSByZWFkKGhhbmRsZSwgcmVtYWluaW5nKQogICAgICAgICAgICAgbiA9IGxlbihjaHVuaykKICAgICAgICAgICAgIGlmIG4gPT0gMDoKICAgICAgICAgICAgICAgICBpZiByZW1haW5pbmcgPT0gc2l6ZToKQEAgLTQwMCwxNyArMzk0LDE0IEBACiAgICAgICAgIGlmIG4gPiAxNjM4NDoKICAgICAgICAgICAgICMgVGhlIHBheWxvYWQgaXMgbGFyZ2Ugc28gTmFnbGUncyBhbGdvcml0aG0gd29uJ3QgYmUgdHJpZ2dlcmVkCiAgICAgICAgICAgICAjIGFuZCB3ZSdkIGJldHRlciBhdm9pZCB0aGUgY29zdCBvZiBjb25jYXRlbmF0aW9uLgotICAgICAgICAgICAgY2h1bmtzID0gW2hlYWRlciwgYnVmXQotICAgICAgICBlbGlmIG4gPiAwOgotICAgICAgICAgICAgIyBJc3N1ZSAj4oCvMjA1NDA6IGNvbmNhdGVuYXRlIGJlZm9yZSBzZW5kaW5nLCB0byBhdm9pZCBkZWxheXMgZHVlCi0gICAgICAgICAgICAjIHRvIE5hZ2xlJ3MgYWxnb3JpdGhtIG9uIGEgVENQIHNvY2tldC4KLSAgICAgICAgICAgIGNodW5rcyA9IFtoZWFkZXIgKyBidWZdCisgICAgICAgICAgICBzZWxmLl9zZW5kKGhlYWRlcikKKyAgICAgICAgICAgIHNlbGYuX3NlbmQoYnVmKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBUaGlzIGNvZGUgcGF0aCBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgImJyb2tlbiBwaXBlIiBlcnJvcnMKLSAgICAgICAgICAgICMgd2hlbiBzZW5kaW5nIGEgMC1sZW5ndGggYnVmZmVyIGlmIHRoZSBvdGhlciBlbmQgY2xvc2VkIHRoZSBwaXBlLgotICAgICAgICAgICAgY2h1bmtzID0gW2hlYWRlcl0KLSAgICAgICAgZm9yIGNodW5rIGluIGNodW5rczoKLSAgICAgICAgICAgIHNlbGYuX3NlbmQoY2h1bmspCisgICAgICAgICAgICAjIElzc3VlICMyMDU0MDogY29uY2F0ZW5hdGUgYmVmb3JlIHNlbmRpbmcsIHRvIGF2b2lkIGRlbGF5cyBkdWUKKyAgICAgICAgICAgICMgdG8gTmFnbGUncyBhbGdvcml0aG0gb24gYSBUQ1Agc29ja2V0LgorICAgICAgICAgICAgIyBBbHNvIG5vdGUgd2Ugd2FudCB0byBhdm9pZCBzZW5kaW5nIGEgMC1sZW5ndGggYnVmZmVyIHNlcGFyYXRlbHksCisgICAgICAgICAgICAjIHRvIGF2b2lkICJicm9rZW4gcGlwZSIgZXJyb3JzIGlmIHRoZSBvdGhlciBlbmQgY2xvc2VkIHRoZSBwaXBlLgorICAgICAgICAgICAgc2VsZi5fc2VuZChoZWFkZXIgKyBidWYpCiAKICAgICBkZWYgX3JlY3ZfYnl0ZXMoc2VsZiwgbWF4c2l6ZT1Ob25lKToKICAgICAgICAgYnVmID0gc2VsZi5fcmVjdig0KQpAQCAtNTk5LDEzICs1OTAsNyBAQAogICAgICAgICAgICAgc2VsZi5fdW5saW5rID0gTm9uZQogCiAgICAgZGVmIGFjY2VwdChzZWxmKToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzLCBzZWxmLl9sYXN0X2FjY2VwdGVkID0gc2VsZi5fc29ja2V0LmFjY2VwdCgpCi0gICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHMsIHNlbGYuX2xhc3RfYWNjZXB0ZWQgPSBzZWxmLl9zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgcy5zZXRibG9ja2luZyhUcnVlKQogICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihzLmRldGFjaCgpKQogCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQppbmRleCAxMzVkYjdmLi4xYWJlYTY0IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ18nKToKICAgICAgICAgICAgICAgICB0ZW1wLmFwcGVuZCgnJXM9JXInICUgKG5hbWUsIHZhbHVlKSkKICAgICAgICAgdGVtcC5zb3J0KCkKLSAgICAgICAgcmV0dXJuICdOYW1lc3BhY2UoJXMpJyAlIHN0ci5qb2luKCcsICcsIHRlbXApCisgICAgICAgIHJldHVybiAnJXMoJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJywgJy5qb2luKHRlbXApKQogCiBkaWN0ID0gZGljdAogbGlzdCA9IGxpc3QKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQppbmRleCA2OTRlZjk2Li4xOTg0Mzc1IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CkBAIC01OSw5ICs1OSw4IEBACiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBpZiB0aW1lb3V0IDw9IDAuMDoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBzZWxmLl9pbi5ub3RfZW1wdHkuYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuX2luLm5vdF9lbXB0eS53YWl0KHRpbWVvdXQpCi0gICAgICAgIHNlbGYuX2luLm5vdF9lbXB0eS5yZWxlYXNlKCkKKyAgICAgICAgd2l0aCBzZWxmLl9pbi5ub3RfZW1wdHk6CisgICAgICAgICAgICBzZWxmLl9pbi5ub3RfZW1wdHkud2FpdCh0aW1lb3V0KQogICAgICAgICByZXR1cm4gc2VsZi5faW4ucXNpemUoKSA+IDAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weQppbmRleCAzODc1MTdlLi5hZDAxZWRlIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtzZXJ2ZXIucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICBhZGRyZXNzID0gY29ubmVjdGlvbi5hcmJpdHJhcnlfYWRkcmVzcygnQUZfVU5JWCcpCiAgICAgICAgICAgICAgICAgbGlzdGVuZXIuYmluZChhZGRyZXNzKQogICAgICAgICAgICAgICAgIG9zLmNobW9kKGFkZHJlc3MsIDBvNjAwKQotICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbigxMDApCisgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuKCkKIAogICAgICAgICAgICAgICAgICMgYWxsIGNsaWVudCBwcm9jZXNzZXMgb3duIHRoZSB3cml0ZSBlbmQgb2YgdGhlICJhbGl2ZSIgcGlwZTsKICAgICAgICAgICAgICAgICAjIHdoZW4gdGhleSBhbGwgdGVybWluYXRlIHRoZSByZWFkIGVuZCBiZWNvbWVzIHJlYWR5LgpAQCAtMTQ3LDEzICsxNDcsNyBAQAogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICMgY2xvc2Ugc3lzLnN0ZGluCi0gICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgc3lzLnN0ZGluID0gb3Blbihvcy5kZXZudWxsKQotICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgcGFzcworICAgIHV0aWwuX2Nsb3NlX3N0ZGluKCkKIAogICAgICMgaWdub3JpbmcgU0lHQ0hMRCBtZWFucyBubyBuZWVkIHRvIHJlYXAgem9tYmllIHByb2Nlc3NlcwogICAgIGhhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzaWduYWwuU0lHX0lHTikKQEAgLTE4OCw4ICsxODIsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQogCi0gICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUNPTk5BQk9SVEVEOgogICAgICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMjMwLDEzICsyMjIsNyBAQAogICAgIGRhdGEgPSBiJycKICAgICBsZW5ndGggPSBVTlNJR05FRF9TVFJVQ1Quc2l6ZQogICAgIHdoaWxlIGxlbihkYXRhKSA8IGxlbmd0aDoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzID0gb3MucmVhZChmZCwgbGVuZ3RoIC0gbGVuKGRhdGEpKQotICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzID0gb3MucmVhZChmZCwgbGVuZ3RoIC0gbGVuKGRhdGEpKQogICAgICAgICBpZiBub3QgczoKICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCd1bmV4cGVjdGVkIEVPRicpCiAgICAgICAgIGRhdGEgKz0gcwpAQCAtMjQ1LDEzICsyMzEsNyBAQAogZGVmIHdyaXRlX3Vuc2lnbmVkKGZkLCBuKToKICAgICBtc2cgPSBVTlNJR05FRF9TVFJVQ1QucGFjayhuKQogICAgIHdoaWxlIG1zZzoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBuYnl0ZXMgPSBvcy53cml0ZShmZCwgbXNnKQotICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBuYnl0ZXMgPSBvcy53cml0ZShmZCwgbXNnKQogICAgICAgICBpZiBuYnl0ZXMgPT0gMDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBnZXQgaGVyZScpCiAgICAgICAgIG1zZyA9IG1zZ1tuYnl0ZXM6XQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CmluZGV4IDM0NGE0NWYuLjQ0ZDk2MzggMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKQEAgLTU0LDcgKzU0LDkgQEAKICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CiAgICAgICAgICAgICBzZWxmLnNpemUsIHNlbGYubmFtZSA9IHNlbGYuX3N0YXRlID0gc3RhdGUKICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbW1hcC5tbWFwKC0xLCBzZWxmLnNpemUsIHRhZ25hbWU9c2VsZi5uYW1lKQotICAgICAgICAgICAgYXNzZXJ0IF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gX3dpbmFwaS5FUlJPUl9BTFJFQURZX0VYSVNUUworICAgICAgICAgICAgIyBYWFggVGVtcG9yYXJpbHkgcHJldmVudGluZyBidWlsZGJvdCBmYWlsdXJlcyB3aGlsZSBkZXRlcm1pbmluZworICAgICAgICAgICAgIyBYWFggdGhlIGNvcnJlY3QgbG9uZy10ZXJtIGZpeC4gU2VlIGlzc3VlIDIzMDYwCisgICAgICAgICAgICAjYXNzZXJ0IF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gX3dpbmFwaS5FUlJPUl9BTFJFQURZX0VYSVNUUwogCiBlbHNlOgogCkBAIC02OSw3ICs3MSwxNCBAQAogICAgICAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQogICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChzZWxmLmZkLCkpCiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmQsICd3YicsIGNsb3NlZmQ9RmFsc2UpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYidcMCcqc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgYnMgPSAxMDI0ICogMTAyNAorICAgICAgICAgICAgICAgICAgICBpZiBzaXplID49IGJzOgorICAgICAgICAgICAgICAgICAgICAgICAgemVyb3MgPSBiJ1wwJyAqIGJzCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShzaXplIC8vIGJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHplcm9zKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHplcm9zCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoYidcMCcgKiAoc2l6ZSAlIGJzKSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGYudGVsbCgpID09IHNpemUKICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbW1hcC5tbWFwKHNlbGYuZmQsIHNlbGYuc2l6ZSkKIAogICAgIGRlZiByZWR1Y2VfYXJlbmEoYSk6CkBAIC0yMTYsOSArMjI1LDggQEAKICAgICAgICAgYXNzZXJ0IDAgPD0gc2l6ZSA8IHN5cy5tYXhzaXplCiAgICAgICAgIGlmIG9zLmdldHBpZCgpICE9IHNlbGYuX2xhc3RwaWQ6CiAgICAgICAgICAgICBzZWxmLl9faW5pdF9fKCkgICAgICAgICAgICAgICAgICAgICAjIHJlaW5pdGlhbGl6ZSBhZnRlciBmb3JrCi0gICAgICAgIHNlbGYuX2xvY2suYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuX2ZyZWVfcGVuZGluZ19ibG9ja3MoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbGYuX2ZyZWVfcGVuZGluZ19ibG9ja3MoKQogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuX3JvdW5kdXAobWF4KHNpemUsMSksIHNlbGYuX2FsaWdubWVudCkKICAgICAgICAgICAgIChhcmVuYSwgc3RhcnQsIHN0b3ApID0gc2VsZi5fbWFsbG9jKHNpemUpCiAgICAgICAgICAgICBuZXdfc3RvcCA9IHN0YXJ0ICsgc2l6ZQpAQCAtMjI3LDggKzIzNSw2IEBACiAgICAgICAgICAgICBibG9jayA9IChhcmVuYSwgc3RhcnQsIG5ld19zdG9wKQogICAgICAgICAgICAgc2VsZi5fYWxsb2NhdGVkX2Jsb2Nrcy5hZGQoYmxvY2spCiAgICAgICAgICAgICByZXR1cm4gYmxvY2sKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2xvY2sucmVsZWFzZSgpCiAKICMKICMgQ2xhc3MgcmVwcmVzZW50aW5nIGEgY2h1bmsgb2YgYW4gbW1hcCAtLSBjYW4gYmUgaW5oZXJpdGVkIGJ5IGNoaWxkIHByb2Nlc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CmluZGV4IDY2ZDQ2ZmMuLmM1NTliNTUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQpAQCAtNjUsOCArNjUsOCBAQAogICAgICAgICAoc2VsZi50eXBlaWQsIHNlbGYuYWRkcmVzcywgc2VsZi5pZCkgPSBzdGF0ZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJ1Rva2VuKHR5cGVpZD0lciwgYWRkcmVzcz0lciwgaWQ9JXIpJyAlIFwKLSAgICAgICAgICAgICAgIChzZWxmLnR5cGVpZCwgc2VsZi5hZGRyZXNzLCBzZWxmLmlkKQorICAgICAgICByZXR1cm4gJyVzKHR5cGVpZD0lciwgYWRkcmVzcz0lciwgaWQ9JXIpJyAlIFwKKyAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi50eXBlaWQsIHNlbGYuYWRkcmVzcywgc2VsZi5pZCkKIAogIwogIyBGdW5jdGlvbiBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGEgbWFuYWdlcidzIHNlcnZlciBwcm9jZXNzCkBAIC0zMDYsOCArMzA2LDcgQEAKICAgICAgICAgJycnCiAgICAgICAgIFJldHVybiBzb21lIGluZm8gLS0tIHVzZWZ1bCB0byBzcG90IHByb2JsZW1zIHdpdGggcmVmY291bnRpbmcKICAgICAgICAgJycnCi0gICAgICAgIHNlbGYubXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLm11dGV4OgogICAgICAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICAgICAgIGtleXMgPSBsaXN0KHNlbGYuaWRfdG9fb2JqLmtleXMoKSkKICAgICAgICAgICAgIGtleXMuc29ydCgpCkBAIC0zMTcsOCArMzE2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWRlbnQsIHNlbGYuaWRfdG9fcmVmY291bnRbaWRlbnRdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoc2VsZi5pZF90b19vYmpbaWRlbnRdWzBdKVs6NzVdKSkKICAgICAgICAgICAgIHJldHVybiAnXG4nLmpvaW4ocmVzdWx0KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5tdXRleC5yZWxlYXNlKCkKIAogICAgIGRlZiBudW1iZXJfb2Zfb2JqZWN0cyhzZWxmLCBjKToKICAgICAgICAgJycnCkBAIC0zNDMsOCArMzQwLDcgQEAKICAgICAgICAgJycnCiAgICAgICAgIENyZWF0ZSBhIG5ldyBzaGFyZWQgb2JqZWN0IGFuZCByZXR1cm4gaXRzIGlkCiAgICAgICAgICcnJwotICAgICAgICBzZWxmLm11dGV4LmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5tdXRleDoKICAgICAgICAgICAgIGNhbGxhYmxlLCBleHBvc2VkLCBtZXRob2RfdG9fdHlwZWlkLCBwcm94eXR5cGUgPSBcCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWdpc3RyeVt0eXBlaWRdCiAKQEAgLTM3NCw4ICszNzAsNiBAQAogICAgICAgICAgICAgIyBoYXMgYmVlbiBjcmVhdGVkLgogICAgICAgICAgICAgc2VsZi5pbmNyZWYoYywgaWRlbnQpCiAgICAgICAgICAgICByZXR1cm4gaWRlbnQsIHR1cGxlKGV4cG9zZWQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLm11dGV4LnJlbGVhc2UoKQogCiAgICAgZGVmIGdldF9tZXRob2RzKHNlbGYsIGMsIHRva2VuKToKICAgICAgICAgJycnCkBAIC0zOTIsMjIgKzM4NiwxNiBAQAogICAgICAgICBzZWxmLnNlcnZlX2NsaWVudChjKQogCiAgICAgZGVmIGluY3JlZihzZWxmLCBjLCBpZGVudCk6Ci0gICAgICAgIHNlbGYubXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLm11dGV4OgogICAgICAgICAgICAgc2VsZi5pZF90b19yZWZjb3VudFtpZGVudF0gKz0gMQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5tdXRleC5yZWxlYXNlKCkKIAogICAgIGRlZiBkZWNyZWYoc2VsZiwgYywgaWRlbnQpOgotICAgICAgICBzZWxmLm11dGV4LmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5tdXRleDoKICAgICAgICAgICAgIGFzc2VydCBzZWxmLmlkX3RvX3JlZmNvdW50W2lkZW50XSA+PSAxCiAgICAgICAgICAgICBzZWxmLmlkX3RvX3JlZmNvdW50W2lkZW50XSAtPSAxCiAgICAgICAgICAgICBpZiBzZWxmLmlkX3RvX3JlZmNvdW50W2lkZW50XSA9PSAwOgogICAgICAgICAgICAgICAgIGRlbCBzZWxmLmlkX3RvX29ialtpZGVudF0sIHNlbGYuaWRfdG9fcmVmY291bnRbaWRlbnRdCiAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZGlzcG9zaW5nIG9mIG9iaiB3aXRoIGlkICVyJywgaWRlbnQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLm11dGV4LnJlbGVhc2UoKQogCiAjCiAjIENsYXNzIHRvIHJlcHJlc2VudCBzdGF0ZSBvZiBhIG1hbmFnZXIKQEAgLTY3MSwxNCArNjU5LDExIEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdG9rZW4sIHNlcmlhbGl6ZXIsIG1hbmFnZXI9Tm9uZSwKICAgICAgICAgICAgICAgICAgYXV0aGtleT1Ob25lLCBleHBvc2VkPU5vbmUsIGluY3JlZj1UcnVlKToKLSAgICAgICAgQmFzZVByb3h5Ll9tdXRleC5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIEJhc2VQcm94eS5fbXV0ZXg6CiAgICAgICAgICAgICB0bHNfaWRzZXQgPSBCYXNlUHJveHkuX2FkZHJlc3NfdG9fbG9jYWwuZ2V0KHRva2VuLmFkZHJlc3MsIE5vbmUpCiAgICAgICAgICAgICBpZiB0bHNfaWRzZXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICB0bHNfaWRzZXQgPSB1dGlsLkZvcmtBd2FyZUxvY2FsKCksIFByb2Nlc3NMb2NhbFNldCgpCiAgICAgICAgICAgICAgICAgQmFzZVByb3h5Ll9hZGRyZXNzX3RvX2xvY2FsW3Rva2VuLmFkZHJlc3NdID0gdGxzX2lkc2V0Ci0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBCYXNlUHJveHkuX211dGV4LnJlbGVhc2UoKQogCiAgICAgICAgICMgc2VsZi5fdGxzIGlzIHVzZWQgdG8gcmVjb3JkIHRoZSBjb25uZWN0aW9uIHVzZWQgYnkgdGhpcwogICAgICAgICAjIHRocmVhZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBtYW5hZ2VyIGF0IHRva2VuLmFkZHJlc3MKQEAgLTgxOCw4ICs4MDMsOCBAQAogICAgICAgICByZXR1cm4gc2VsZi5fZ2V0dmFsdWUoKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzwlcyBvYmplY3QsIHR5cGVpZCAlciBhdCAlcz4nICUgXAotICAgICAgICAgICAgICAgKHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX3Rva2VuLnR5cGVpZCwgJzB4JXgnICUgaWQoc2VsZikpCisgICAgICAgIHJldHVybiAnPCVzIG9iamVjdCwgdHlwZWlkICVyIGF0ICUjeD4nICUgXAorICAgICAgICAgICAgICAgKHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX3Rva2VuLnR5cGVpZCwgaWQoc2VsZikpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgJycnCkBAIC04NTcsNyArODQyLDcgQEAKIAogZGVmIE1ha2VQcm94eVR5cGUobmFtZSwgZXhwb3NlZCwgX2NhY2hlPXt9KToKICAgICAnJycKLSAgICBSZXR1cm4gYW4gcHJveHkgdHlwZSB3aG9zZSBtZXRob2RzIGFyZSBnaXZlbiBieSBgZXhwb3NlZGAKKyAgICBSZXR1cm4gYSBwcm94eSB0eXBlIHdob3NlIG1ldGhvZHMgYXJlIGdpdmVuIGJ5IGBleHBvc2VkYAogICAgICcnJwogICAgIGV4cG9zZWQgPSB0dXBsZShleHBvc2VkKQogICAgIHRyeToKQEAgLTkxNiw3ICs5MDEsNyBAQAogICAgICAgICAgICAgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpOgogICAgICAgICAgICAgICAgIHRlbXAuYXBwZW5kKCclcz0lcicgJSAobmFtZSwgdmFsdWUpKQogICAgICAgICB0ZW1wLnNvcnQoKQotICAgICAgICByZXR1cm4gJ05hbWVzcGFjZSglcyknICUgc3RyLmpvaW4oJywgJywgdGVtcCkKKyAgICAgICAgcmV0dXJuICclcyglcyknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAnLCAnLmpvaW4odGVtcCkpCiAKIGNsYXNzIFZhbHVlKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVjb2RlLCB2YWx1ZSwgbG9jaz1UcnVlKToKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQppbmRleCBkYjZlM2UxLi42ZDI1NDY5IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGMpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPE1heWJlRW5jb2RpbmdFcnJvcjogJXM+IiAlIHN0cihzZWxmKQorICAgICAgICByZXR1cm4gIjwlczogJXM+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZikKIAogCiBkZWYgd29ya2VyKGlucXVldWUsIG91dHF1ZXVlLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwgbWF4dGFza3M9Tm9uZSwKQEAgLTY3NSw4ICs2NzUsNyBAQAogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIG5leHQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuX2NvbmQ6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaXRlbSA9IHNlbGYuX2l0ZW1zLnBvcGxlZnQoKQogICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CkBAIC02ODksOCArNjg4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5kZXggPT0gc2VsZi5fbGVuZ3RoOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2NvbmQucmVsZWFzZSgpCiAKICAgICAgICAgc3VjY2VzcywgdmFsdWUgPSBpdGVtCiAgICAgICAgIGlmIHN1Y2Nlc3M6CkBAIC03MDAsOCArNjk3LDcgQEAKICAgICBfX25leHRfXyA9IG5leHQgICAgICAgICAgICAgICAgICAgICMgWFhYCiAKICAgICBkZWYgX3NldChzZWxmLCBpLCBvYmopOgotICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5fY29uZDoKICAgICAgICAgICAgIGlmIHNlbGYuX2luZGV4ID09IGk6CiAgICAgICAgICAgICAgICAgc2VsZi5faXRlbXMuYXBwZW5kKG9iaikKICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCArPSAxCkBAIC03MTUsMTggKzcxMSwxMyBAQAogCiAgICAgICAgICAgICBpZiBzZWxmLl9pbmRleCA9PSBzZWxmLl9sZW5ndGg6CiAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2NhY2hlW3NlbGYuX2pvYl0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2NvbmQucmVsZWFzZSgpCiAKICAgICBkZWYgX3NldF9sZW5ndGgoc2VsZiwgbGVuZ3RoKToKLSAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuX2NvbmQ6CiAgICAgICAgICAgICBzZWxmLl9sZW5ndGggPSBsZW5ndGgKICAgICAgICAgICAgIGlmIHNlbGYuX2luZGV4ID09IHNlbGYuX2xlbmd0aDoKICAgICAgICAgICAgICAgICBzZWxmLl9jb25kLm5vdGlmeSgpCiAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2NhY2hlW3NlbGYuX2pvYl0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2NvbmQucmVsZWFzZSgpCiAKICMKICMgQ2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCBieSBgUG9vbC5pbWFwX3Vub3JkZXJlZCgpYApAQCAtNzM1LDE1ICs3MjYsMTIgQEAKIGNsYXNzIElNYXBVbm9yZGVyZWRJdGVyYXRvcihJTWFwSXRlcmF0b3IpOgogCiAgICAgZGVmIF9zZXQoc2VsZiwgaSwgb2JqKToKLSAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuX2NvbmQ6CiAgICAgICAgICAgICBzZWxmLl9pdGVtcy5hcHBlbmQob2JqKQogICAgICAgICAgICAgc2VsZi5faW5kZXggKz0gMQogICAgICAgICAgICAgc2VsZi5fY29uZC5ub3RpZnkoKQogICAgICAgICAgICAgaWYgc2VsZi5faW5kZXggPT0gc2VsZi5fbGVuZ3RoOgogICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9jYWNoZVtzZWxmLl9qb2JdCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl9jb25kLnJlbGVhc2UoKQogCiAjCiAjCkBAIC03NjksMTAgKzc1Nyw3IEBACiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfaGVscF9zdHVmZl9maW5pc2goaW5xdWV1ZSwgdGFza19oYW5kbGVyLCBzaXplKToKICAgICAgICAgIyBwdXQgc2VudGluZWxzIGF0IGhlYWQgb2YgaW5xdWV1ZSB0byBtYWtlIHdvcmtlcnMgZmluaXNoCi0gICAgICAgIGlucXVldWUubm90X2VtcHR5LmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggaW5xdWV1ZS5ub3RfZW1wdHk6CiAgICAgICAgICAgICBpbnF1ZXVlLnF1ZXVlLmNsZWFyKCkKICAgICAgICAgICAgIGlucXVldWUucXVldWUuZXh0ZW5kKFtOb25lXSAqIHNpemUpCiAgICAgICAgICAgICBpbnF1ZXVlLm5vdF9lbXB0eS5ub3RpZnlfYWxsKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlucXVldWUubm90X2VtcHR5LnJlbGVhc2UoKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5CmluZGV4IDM2N2U3MmUuLmQyZWJkN2MgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkKQEAgLTEsNyArMSw2IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBzaWduYWwKLWltcG9ydCBlcnJubwogCiBmcm9tIC4gaW1wb3J0IHV0aWwKIApAQCAtMjksOCArMjgsNiBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBvcy53YWl0cGlkKHNlbGYucGlkLCBmbGFnKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgbm90IHlldCBjcmVhdGVkLiBTZWUgIzE3MzE3MTcKICAgICAgICAgICAgICAgICAgICAgIyBlLmVycm5vID09IGVycm5vLkVDSElMRCA9PSAxMAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CmluZGV4IDY4OTU5YmYuLmJjYThiN2EgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKQEAgLTIzNCwxMiArMjM0LDcgQEAKICAgICAgICAgICAgICAgICBjb250ZXh0Ll9mb3JjZV9zdGFydF9tZXRob2Qoc2VsZi5fc3RhcnRfbWV0aG9kKQogICAgICAgICAgICAgX3Byb2Nlc3NfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQogICAgICAgICAgICAgX2NoaWxkcmVuID0gc2V0KCkKLSAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRpbiA9IG9wZW4ob3MuZGV2bnVsbCkKLSAgICAgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB1dGlsLl9jbG9zZV9zdGRpbigpCiAgICAgICAgICAgICBvbGRfcHJvY2VzcyA9IF9jdXJyZW50X3Byb2Nlc3MKICAgICAgICAgICAgIF9jdXJyZW50X3Byb2Nlc3MgPSBzZWxmCiAgICAgICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CmluZGV4IDI5M2FkNzYuLjc4NmEzMDMgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CkBAIC04MiwxNCArODIsMTEgQEAKICAgICAgICAgaWYgbm90IHNlbGYuX3NlbS5hY3F1aXJlKGJsb2NrLCB0aW1lb3V0KToKICAgICAgICAgICAgIHJhaXNlIEZ1bGwKIAotICAgICAgICBzZWxmLl9ub3RlbXB0eS5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuX25vdGVtcHR5OgogICAgICAgICAgICAgaWYgc2VsZi5fdGhyZWFkIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfdGhyZWFkKCkKICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQob2JqKQogICAgICAgICAgICAgc2VsZi5fbm90ZW1wdHkubm90aWZ5KCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX25vdGVtcHR5LnJlbGVhc2UoKQogCiAgICAgZGVmIGdldChzZWxmLCBibG9jaz1UcnVlLCB0aW1lb3V0PU5vbmUpOgogICAgICAgICBpZiBibG9jayBhbmQgdGltZW91dCBpcyBOb25lOgpAQCAtMjA2LDEyICsyMDMsOSBAQAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2ZpbmFsaXplX2Nsb3NlKGJ1ZmZlciwgbm90ZW1wdHkpOgogICAgICAgICBkZWJ1ZygndGVsbGluZyBxdWV1ZSB0aHJlYWQgdG8gcXVpdCcpCi0gICAgICAgIG5vdGVtcHR5LmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggbm90ZW1wdHk6CiAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKF9zZW50aW5lbCkKICAgICAgICAgICAgIG5vdGVtcHR5Lm5vdGlmeSgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBub3RlbXB0eS5yZWxlYXNlKCkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2ZlZWQoYnVmZmVyLCBub3RlbXB0eSwgc2VuZF9ieXRlcywgd3JpdGVsb2NrLCBjbG9zZSwgaWdub3JlX2VwaXBlKToKQEAgLTMwMCwzNSArMjk0LDI0IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZW0uYWNxdWlyZShibG9jaywgdGltZW91dCk6CiAgICAgICAgICAgICByYWlzZSBGdWxsCiAKLSAgICAgICAgc2VsZi5fbm90ZW1wdHkuYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuX2NvbmQuYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLl9ub3RlbXB0eSwgc2VsZi5fY29uZDoKICAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZCBpcyBOb25lOgogICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3RocmVhZCgpCiAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKG9iaikKICAgICAgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MucmVsZWFzZSgpCiAgICAgICAgICAgICBzZWxmLl9ub3RlbXB0eS5ub3RpZnkoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKLSAgICAgICAgICAgIHNlbGYuX25vdGVtcHR5LnJlbGVhc2UoKQogCiAgICAgZGVmIHRhc2tfZG9uZShzZWxmKToKLSAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuX2NvbmQ6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fdW5maW5pc2hlZF90YXNrcy5hY3F1aXJlKEZhbHNlKToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0YXNrX2RvbmUoKSBjYWxsZWQgdG9vIG1hbnkgdGltZXMnKQogICAgICAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcy5fc2VtbG9jay5faXNfemVybygpOgogICAgICAgICAgICAgICAgIHNlbGYuX2NvbmQubm90aWZ5X2FsbCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl9jb25kLnJlbGVhc2UoKQogCiAgICAgZGVmIGpvaW4oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbmQuYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX3VuZmluaXNoZWRfdGFza3MuX3NlbWxvY2suX2lzX3plcm8oKToKICAgICAgICAgICAgICAgICBzZWxmLl9jb25kLndhaXQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKIAogIwogIyBTaW1wbGlmaWVkIFF1ZXVlIHR5cGUgLS0gcmVhbGx5IGp1c3QgYSBsb2NrZWQgcGlwZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weQppbmRleCAwYzE3ODI1Li40MjU4ZjU5IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NoYXJlZGN0eXBlcy5weQpAQCAtMTg4LDYgKzE4OCwxMiBAQAogICAgICAgICBzZWxmLmFjcXVpcmUgPSBzZWxmLl9sb2NrLmFjcXVpcmUKICAgICAgICAgc2VsZi5yZWxlYXNlID0gc2VsZi5fbG9jay5yZWxlYXNlCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbG9jay5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19leGl0X18oKmFyZ3MpCisKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgIHJldHVybiBzeW5jaHJvbml6ZWQsIChzZWxmLl9vYmosIHNlbGYuX2xvY2spCkBAIC0yMTIsMzIgKzIxOCwyMCBAQAogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX29iaikKIAogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKLSAgICAgICAgc2VsZi5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGY6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqW2ldCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLnJlbGVhc2UoKQogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGksIHZhbHVlKToKLSAgICAgICAgc2VsZi5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGY6CiAgICAgICAgICAgICBzZWxmLl9vYmpbaV0gPSB2YWx1ZQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5yZWxlYXNlKCkKIAogICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgc3RhcnQsIHN0b3ApOgotICAgICAgICBzZWxmLmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZjoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmpbc3RhcnQ6c3RvcF0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYucmVsZWFzZSgpCiAKICAgICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9wLCB2YWx1ZXMpOgotICAgICAgICBzZWxmLmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZjoKICAgICAgICAgICAgIHNlbGYuX29ialtzdGFydDpzdG9wXSA9IHZhbHVlcwotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5yZWxlYXNlKCkKIAogCiBjbGFzcyBTeW5jaHJvbml6ZWRTdHJpbmcoU3luY2hyb25pemVkQXJyYXkpOgpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3Bhd24ucHkKaW5kZXggMzM2ZTQ3OS4uNGQ3Njk1MSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5CkBAIC05MSw3ICs5MSw3IEBACiAKIGRlZiBzcGF3bl9tYWluKHBpcGVfaGFuZGxlLCBwYXJlbnRfcGlkPU5vbmUsIHRyYWNrZXJfZmQ9Tm9uZSk6CiAgICAgJycnCi0gICAgUnVuIGNvZGUgc3BlY2lmZWQgYnkgZGF0YSByZWNlaXZlZCBvdmVyIHBpcGUKKyAgICBSdW4gY29kZSBzcGVjaWZpZWQgYnkgZGF0YSByZWNlaXZlZCBvdmVyIHBpcGUKICAgICAnJycKICAgICBhc3NlcnQgaXNfZm9ya2luZyhzeXMuYXJndikKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CmluZGV4IGRlYTFjYmQuLmQ0YmRmMGUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICB2YWx1ZSA9ICd1bmtub3duJwotICAgICAgICByZXR1cm4gJzxTZW1hcGhvcmUodmFsdWU9JXMpPicgJSB2YWx1ZQorICAgICAgICByZXR1cm4gJzwlcyh2YWx1ZT0lcyk+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgdmFsdWUpCiAKICMKICMgQm91bmRlZCBzZW1hcGhvcmUKQEAgLTE1MCw4ICsxNTAsOCBAQAogICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9zZW1sb2NrLl9nZXRfdmFsdWUoKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgdmFsdWUgPSAndW5rbm93bicKLSAgICAgICAgcmV0dXJuICc8Qm91bmRlZFNlbWFwaG9yZSh2YWx1ZT0lcywgbWF4dmFsdWU9JXMpPicgJSBcCi0gICAgICAgICAgICAgICAodmFsdWUsIHNlbGYuX3NlbWxvY2subWF4dmFsdWUpCisgICAgICAgIHJldHVybiAnPCVzKHZhbHVlPSVzLCBtYXh2YWx1ZT0lcyk+JyAlIFwKKyAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgdmFsdWUsIHNlbGYuX3NlbWxvY2subWF4dmFsdWUpCiAKICMKICMgTm9uLXJlY3Vyc2l2ZSBsb2NrCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAgICAgICAgICAgICBuYW1lID0gJ1NvbWVPdGhlclByb2Nlc3MnCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBuYW1lID0gJ3Vua25vd24nCi0gICAgICAgIHJldHVybiAnPExvY2sob3duZXI9JXMpPicgJSBuYW1lCisgICAgICAgIHJldHVybiAnPCVzKG93bmVyPSVzKT4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBuYW1lKQogCiAjCiAjIFJlY3Vyc2l2ZSBsb2NrCkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICAgICAgICAgICAgICBuYW1lLCBjb3VudCA9ICdTb21lT3RoZXJQcm9jZXNzJywgJ25vbnplcm8nCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBuYW1lLCBjb3VudCA9ICd1bmtub3duJywgJ3Vua25vd24nCi0gICAgICAgIHJldHVybiAnPFJMb2NrKCVzLCAlcyk+JyAlIChuYW1lLCBjb3VudCkKKyAgICAgICAgcmV0dXJuICc8JXMoJXMsICVzKT4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBuYW1lLCBjb3VudCkKIAogIwogIyBDb25kaXRpb24gdmFyaWFibGUKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd29rZW5fY291bnQuX3NlbWxvY2suX2dldF92YWx1ZSgpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgbnVtX3dhaXRlcnMgPSAndW5rbm93bicKLSAgICAgICAgcmV0dXJuICc8Q29uZGl0aW9uKCVzLCAlcyk+JyAlIChzZWxmLl9sb2NrLCBudW1fd2FpdGVycykKKyAgICAgICAgcmV0dXJuICc8JXMoJXMsICVzKT4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLl9sb2NrLCBudW1fd2FpdGVycykKIAogICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGFzc2VydCBzZWxmLl9sb2NrLl9zZW1sb2NrLl9pc19taW5lKCksIFwKQEAgLTMzNywzNCArMzM3LDI0IEBACiAgICAgICAgIHNlbGYuX2ZsYWcgPSBjdHguU2VtYXBob3JlKDApCiAKICAgICBkZWYgaXNfc2V0KHNlbGYpOgotICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5fY29uZDoKICAgICAgICAgICAgIGlmIHNlbGYuX2ZsYWcuYWNxdWlyZShGYWxzZSk6CiAgICAgICAgICAgICAgICAgc2VsZi5fZmxhZy5yZWxlYXNlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl9jb25kLnJlbGVhc2UoKQogCiAgICAgZGVmIHNldChzZWxmKToKLSAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuX2NvbmQ6CiAgICAgICAgICAgICBzZWxmLl9mbGFnLmFjcXVpcmUoRmFsc2UpCiAgICAgICAgICAgICBzZWxmLl9mbGFnLnJlbGVhc2UoKQogICAgICAgICAgICAgc2VsZi5fY29uZC5ub3RpZnlfYWxsKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2NvbmQucmVsZWFzZSgpCiAKICAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbmQuYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgogICAgICAgICAgICAgc2VsZi5fZmxhZy5hY3F1aXJlKEZhbHNlKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKIAogICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2NvbmQuYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgogICAgICAgICAgICAgaWYgc2VsZi5fZmxhZy5hY3F1aXJlKEZhbHNlKToKICAgICAgICAgICAgICAgICBzZWxmLl9mbGFnLnJlbGVhc2UoKQogICAgICAgICAgICAgZWxzZToKQEAgLTM3NCw4ICszNjQsNiBAQAogICAgICAgICAgICAgICAgIHNlbGYuX2ZsYWcucmVsZWFzZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKIAogIwogIyBCYXJyaWVyCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKaW5kZXggMGI2OTVlNC4uMWEyYzBkYiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQpAQCAtOSw2ICs5LDcgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgc3lzCiBpbXBvcnQgd2Vha3JlZgogaW1wb3J0IGF0ZXhpdAogaW1wb3J0IHRocmVhZGluZyAgICAgICAgIyB3ZSB3YW50IHRocmVhZGluZyB0byBpbnN0YWxsIGl0J3MKQEAgLTIxMiwxMCArMjEzLDExIEBACiAgICAgICAgICAgICBvYmogPSBOb25lCiAKICAgICAgICAgaWYgb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gJzxGaW5hbGl6ZSBvYmplY3QsIGRlYWQ+JworICAgICAgICAgICAgcmV0dXJuICc8JXMgb2JqZWN0LCBkZWFkPicgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogCi0gICAgICAgIHggPSAnPEZpbmFsaXplIG9iamVjdCwgY2FsbGJhY2s9JXMnICUgXAotICAgICAgICAgICAgZ2V0YXR0cihzZWxmLl9jYWxsYmFjaywgJ19fbmFtZV9fJywgc2VsZi5fY2FsbGJhY2spCisgICAgICAgIHggPSAnPCVzIG9iamVjdCwgY2FsbGJhY2s9JXMnICUgKAorICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZi5fY2FsbGJhY2ssICdfX25hbWVfXycsIHNlbGYuX2NhbGxiYWNrKSkKICAgICAgICAgaWYgc2VsZi5fYXJnczoKICAgICAgICAgICAgIHggKz0gJywgYXJncz0nICsgc3RyKHNlbGYuX2FyZ3MpCiAgICAgICAgIGlmIHNlbGYuX2t3YXJnczoKQEAgLTMyNyw2ICszMjksMTMgQEAKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fbG9jay5hY3F1aXJlCiAgICAgICAgIHNlbGYucmVsZWFzZSA9IHNlbGYuX2xvY2sucmVsZWFzZQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19lbnRlcl9fKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9sb2NrLl9fZXhpdF9fKCphcmdzKQorCisKIGNsYXNzIEZvcmtBd2FyZUxvY2FsKHRocmVhZGluZy5sb2NhbCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICByZWdpc3Rlcl9hZnRlcl9mb3JrKHNlbGYsIGxhbWJkYSBvYmogOiBvYmouX19kaWN0X18uY2xlYXIoKSkKQEAgLTM0OCw2ICszNTcsMjggQEAKICAgICBhc3NlcnQgZmRzWy0xXSA9PSBNQVhGRCwgJ2ZkIHRvbyBsYXJnZScKICAgICBmb3IgaSBpbiByYW5nZShsZW4oZmRzKSAtIDEpOgogICAgICAgICBvcy5jbG9zZXJhbmdlKGZkc1tpXSsxLCBmZHNbaSsxXSkKKyMKKyMgQ2xvc2Ugc3lzLnN0ZGluIGFuZCByZXBsYWNlIHN0ZGluIHdpdGggb3MuZGV2bnVsbAorIworCitkZWYgX2Nsb3NlX3N0ZGluKCk6CisgICAgaWYgc3lzLnN0ZGluIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQorICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgIHBhc3MKKworICAgIHRyeToKKyAgICAgICAgZmQgPSBvcy5vcGVuKG9zLmRldm51bGwsIG9zLk9fUkRPTkxZKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4gPSBvcGVuKGZkLCBjbG9zZWZkPUZhbHNlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgcGFzcwogCiAjCiAjIFN0YXJ0IGEgcHJvZ3JhbSB3aXRoIG9ubHkgc3BlY2lmaWVkIGZkcyBrZXB0IG9wZW4KZGlmZiAtLWdpdCBhL0xpYi9ubnRwbGliLnB5IGIvTGliL25udHBsaWIucHkKaW5kZXggYTc1ZmFhZC4uMjhjZDA5OSAxMDA2NDQKLS0tIGEvTGliL25udHBsaWIucHkKKysrIGIvTGliL25udHBsaWIucHkKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAjIEhlbHBlciBmdW5jdGlvbihzKQogZGVmIGRlY29kZV9oZWFkZXIoaGVhZGVyX3N0cik6Ci0gICAgIiIiVGFrZXMgYW4gdW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbXVuZ2VkIGhlYWRlciB2YWx1ZQorICAgICIiIlRha2VzIGEgdW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbXVuZ2VkIGhlYWRlciB2YWx1ZQogICAgIGFuZCBkZWNvZGVzIGl0IGFzIGEgKHBvc3NpYmx5IG5vbi1BU0NJSSkgcmVhZGFibGUgdmFsdWUuIiIiCiAgICAgcGFydHMgPSBbXQogICAgIGZvciB2LCBlbmMgaW4gX2VtYWlsX2RlY29kZV9oZWFkZXIoaGVhZGVyX3N0cik6CkBAIC00MjAsNyArNDIwLDcgQEAKIAogICAgIGRlZiBfcHV0Y21kKHNlbGYsIGxpbmUpOgogICAgICAgICAiIiJJbnRlcm5hbDogc2VuZCBvbmUgY29tbWFuZCB0byB0aGUgc2VydmVyICh0aHJvdWdoIF9wdXRsaW5lKCkpLgotICAgICAgICBUaGUgYGxpbmVgIG11c3QgYmUgYW4gdW5pY29kZSBzdHJpbmcuIiIiCisgICAgICAgIFRoZSBgbGluZWAgbXVzdCBiZSBhIHVuaWNvZGUgc3RyaW5nLiIiIgogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzogcHJpbnQoJypjbWQqJywgcmVwcihsaW5lKSkKICAgICAgICAgbGluZSA9IGxpbmUuZW5jb2RlKHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKQogICAgICAgICBzZWxmLl9wdXRsaW5lKGxpbmUpCkBAIC00NDUsNyArNDQ1LDcgQEAKICAgICBkZWYgX2dldHJlc3Aoc2VsZik6CiAgICAgICAgICIiIkludGVybmFsOiBnZXQgYSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgICAgIFJhaXNlIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCi0gICAgICAgIFJldHVybnMgYW4gdW5pY29kZSBzdHJpbmcuIiIiCisgICAgICAgIFJldHVybnMgYSB1bmljb2RlIHN0cmluZy4iIiIKICAgICAgICAgcmVzcCA9IHNlbGYuX2dldGxpbmUoKQogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzogcHJpbnQoJypyZXNwKicsIHJlcHIocmVzcCkpCiAgICAgICAgIHJlc3AgPSByZXNwLmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKQEAgLTQ2Miw3ICs0NjIsNyBAQAogICAgICAgICAiIiJJbnRlcm5hbDogZ2V0IGEgcmVzcG9uc2UgcGx1cyBmb2xsb3dpbmcgdGV4dCBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgICAgIFJhaXNlIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgYW4gZXJyb3IuCiAKLSAgICAgICAgUmV0dXJucyBhIChyZXNwb25zZSwgbGluZXMpIHR1cGxlIHdoZXJlIGByZXNwb25zZWAgaXMgYW4gdW5pY29kZQorICAgICAgICBSZXR1cm5zIGEgKHJlc3BvbnNlLCBsaW5lcykgdHVwbGUgd2hlcmUgYHJlc3BvbnNlYCBpcyBhIHVuaWNvZGUKICAgICAgICAgc3RyaW5nIGFuZCBgbGluZXNgIGlzIGEgbGlzdCBvZiBieXRlcyBvYmplY3RzLgogICAgICAgICBJZiBgZmlsZWAgaXMgYSBmaWxlLWxpa2Ugb2JqZWN0LCBpdCBtdXN0IGJlIG9wZW4gaW4gYmluYXJ5IG1vZGUuCiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL250cGF0aC5weSBiL0xpYi9udHBhdGgucHkKaW5kZXggOTkyOTcwYS4uYWY2YTcwOSAxMDA2NDQKLS0tIGEvTGliL250cGF0aC5weQorKysgYi9MaWIvbnRwYXRoLnB5CkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICAgICAgICJpc21vdW50IiwgImV4cGFuZHVzZXIiLCJleHBhbmR2YXJzIiwibm9ybXBhdGgiLCJhYnNwYXRoIiwKICAgICAgICAgICAgInNwbGl0dW5jIiwiY3VyZGlyIiwicGFyZGlyIiwic2VwIiwicGF0aHNlcCIsImRlZnBhdGgiLCJhbHRzZXAiLAogICAgICAgICAgICAiZXh0c2VwIiwiZGV2bnVsbCIsInJlYWxwYXRoIiwic3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMiLCJyZWxwYXRoIiwKLSAgICAgICAgICAgInNhbWVmaWxlIiwgInNhbWVvcGVuZmlsZSIsICJzYW1lc3RhdCIsXQorICAgICAgICAgICAic2FtZWZpbGUiLCAic2FtZW9wZW5maWxlIiwgInNhbWVzdGF0IiwgImNvbW1vbnBhdGgiXQogCiAjIHN0cmluZ3MgcmVwcmVzZW50aW5nIHZhcmlvdXMgcGF0aC1yZWxhdGVkIGJpdHMgYW5kIHBpZWNlcwogIyBUaGVzZSBhcmUgcHJpbWFyaWx5IGZvciBleHBvcnQ7IGludGVybmFsbHksIHRoZXkgYXJlIGhhcmRjb2RlZC4KQEAgLTMyLDQ4ICszMiwxMiBAQAogICAgIGRlZnBhdGggPSAnXFxXaW5kb3dzJwogZGV2bnVsbCA9ICdudWwnCiAKLWRlZiBfZ2V0X2VtcHR5KHBhdGgpOgotICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICByZXR1cm4gYicnCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICcnCi0KLWRlZiBfZ2V0X3NlcChwYXRoKToKLSAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKLSAgICAgICAgcmV0dXJuIGInXFwnCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICdcXCcKLQotZGVmIF9nZXRfYWx0c2VwKHBhdGgpOgotICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICByZXR1cm4gYicvJwotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnLycKLQogZGVmIF9nZXRfYm90aHNlcHMocGF0aCk6CiAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6CiAgICAgICAgIHJldHVybiBiJ1xcLycKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gJ1xcLycKIAotZGVmIF9nZXRfZG90KHBhdGgpOgotICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICByZXR1cm4gYicuJwotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnLicKLQotZGVmIF9nZXRfY29sb24ocGF0aCk6Ci0gICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6Ci0gICAgICAgIHJldHVybiBiJzonCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICc6JwotCi1kZWYgX2dldF9zcGVjaWFsKHBhdGgpOgotICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICByZXR1cm4gKGInXFxcXC5cXCcsIGInXFxcXD9cXCcpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICgnXFxcXC5cXCcsICdcXFxcP1xcJykKLQogIyBOb3JtYWxpemUgdGhlIGNhc2Ugb2YgYSBwYXRobmFtZSBhbmQgbWFwIHNsYXNoZXMgdG8gYmFja3NsYXNoZXMuCiAjIE90aGVyIG5vcm1hbGl6YXRpb25zIChzdWNoIGFzIG9wdGltaXppbmcgJy4uLycgYXdheSkgYXJlIG5vdCBkb25lCiAjICh0aGlzIGlzIGRvbmUgYnkgbm9ybXBhdGgpLgpAQCAtODIsMTAgKzQ2LDE2IEBACiAgICAgIiIiTm9ybWFsaXplIGNhc2Ugb2YgcGF0aG5hbWUuCiAKICAgICBNYWtlcyBhbGwgY2hhcmFjdGVycyBsb3dlcmNhc2UgYW5kIGFsbCBzbGFzaGVzIGludG8gYmFja3NsYXNoZXMuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgKGJ5dGVzLCBzdHIpKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3JtY2FzZSgpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibm90ICd7fSciLmZvcm1hdChzLl9fY2xhc3NfXy5fX25hbWVfXykpCi0gICAgcmV0dXJuIHMucmVwbGFjZShfZ2V0X2FsdHNlcChzKSwgX2dldF9zZXAocykpLmxvd2VyKCkKKyAgICB0cnk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgorICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZShiJy8nLCBiJ1xcJykubG93ZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgnLycsICdcXCcpLmxvd2VyKCkKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCAoYnl0ZXMsIHN0cikpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3JtY2FzZSgpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlciIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykgZnJvbSBOb25lCisgICAgICAgIHJhaXNlCiAKIAogIyBSZXR1cm4gd2hldGhlciBhIHBhdGggaXMgYWJzb2x1dGUuCkBAIC05Nyw0MCArNjcsNTEgQEAKIGRlZiBpc2FicyhzKToKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGFic29sdXRlIiIiCiAgICAgcyA9IHNwbGl0ZHJpdmUocylbMV0KLSAgICByZXR1cm4gbGVuKHMpID4gMCBhbmQgc1s6MV0gaW4gX2dldF9ib3Roc2VwcyhzKQorICAgIHJldHVybiBsZW4ocykgPiAwIGFuZCBzWzBdIGluIF9nZXRfYm90aHNlcHMocykKIAogCiAjIEpvaW4gdHdvIChvciBtb3JlKSBwYXRocy4KIGRlZiBqb2luKHBhdGgsICpwYXRocyk6Ci0gICAgc2VwID0gX2dldF9zZXAocGF0aCkKLSAgICBzZXBzID0gX2dldF9ib3Roc2VwcyhwYXRoKQotICAgIGNvbG9uID0gX2dldF9jb2xvbihwYXRoKQotICAgIHJlc3VsdF9kcml2ZSwgcmVzdWx0X3BhdGggPSBzcGxpdGRyaXZlKHBhdGgpCi0gICAgZm9yIHAgaW4gcGF0aHM6Ci0gICAgICAgIHBfZHJpdmUsIHBfcGF0aCA9IHNwbGl0ZHJpdmUocCkKLSAgICAgICAgaWYgcF9wYXRoIGFuZCBwX3BhdGhbMF0gaW4gc2VwczoKLSAgICAgICAgICAgICMgU2Vjb25kIHBhdGggaXMgYWJzb2x1dGUKLSAgICAgICAgICAgIGlmIHBfZHJpdmUgb3Igbm90IHJlc3VsdF9kcml2ZToKLSAgICAgICAgICAgICAgICByZXN1bHRfZHJpdmUgPSBwX2RyaXZlCi0gICAgICAgICAgICByZXN1bHRfcGF0aCA9IHBfcGF0aAotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZWxpZiBwX2RyaXZlIGFuZCBwX2RyaXZlICE9IHJlc3VsdF9kcml2ZToKLSAgICAgICAgICAgIGlmIHBfZHJpdmUubG93ZXIoKSAhPSByZXN1bHRfZHJpdmUubG93ZXIoKToKLSAgICAgICAgICAgICAgICAjIERpZmZlcmVudCBkcml2ZXMgPT4gaWdub3JlIHRoZSBmaXJzdCBwYXRoIGVudGlyZWx5Ci0gICAgICAgICAgICAgICAgcmVzdWx0X2RyaXZlID0gcF9kcml2ZQorICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgorICAgICAgICBzZXAgPSBiJ1xcJworICAgICAgICBzZXBzID0gYidcXC8nCisgICAgICAgIGNvbG9uID0gYic6JworICAgIGVsc2U6CisgICAgICAgIHNlcCA9ICdcXCcKKyAgICAgICAgc2VwcyA9ICdcXC8nCisgICAgICAgIGNvbG9uID0gJzonCisgICAgdHJ5OgorICAgICAgICBpZiBub3QgcGF0aHM6CisgICAgICAgICAgICBwYXRoWzowXSArIHNlcCAgIzIzNzgwOiBFbnN1cmUgY29tcGF0aWJsZSBkYXRhIHR5cGUgZXZlbiBpZiBwIGlzIG51bGwuCisgICAgICAgIHJlc3VsdF9kcml2ZSwgcmVzdWx0X3BhdGggPSBzcGxpdGRyaXZlKHBhdGgpCisgICAgICAgIGZvciBwIGluIHBhdGhzOgorICAgICAgICAgICAgcF9kcml2ZSwgcF9wYXRoID0gc3BsaXRkcml2ZShwKQorICAgICAgICAgICAgaWYgcF9wYXRoIGFuZCBwX3BhdGhbMF0gaW4gc2VwczoKKyAgICAgICAgICAgICAgICAjIFNlY29uZCBwYXRoIGlzIGFic29sdXRlCisgICAgICAgICAgICAgICAgaWYgcF9kcml2ZSBvciBub3QgcmVzdWx0X2RyaXZlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfZHJpdmUgPSBwX2RyaXZlCiAgICAgICAgICAgICAgICAgcmVzdWx0X3BhdGggPSBwX3BhdGgKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgIyBTYW1lIGRyaXZlIGluIGRpZmZlcmVudCBjYXNlCi0gICAgICAgICAgICByZXN1bHRfZHJpdmUgPSBwX2RyaXZlCi0gICAgICAgICMgU2Vjb25kIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIGZpcnN0Ci0gICAgICAgIGlmIHJlc3VsdF9wYXRoIGFuZCByZXN1bHRfcGF0aFstMV0gbm90IGluIHNlcHM6Ci0gICAgICAgICAgICByZXN1bHRfcGF0aCA9IHJlc3VsdF9wYXRoICsgc2VwCi0gICAgICAgIHJlc3VsdF9wYXRoID0gcmVzdWx0X3BhdGggKyBwX3BhdGgKLSAgICAjIyBhZGQgc2VwYXJhdG9yIGJldHdlZW4gVU5DIGFuZCBub24tYWJzb2x1dGUgcGF0aAotICAgIGlmIChyZXN1bHRfcGF0aCBhbmQgcmVzdWx0X3BhdGhbMF0gbm90IGluIHNlcHMgYW5kCi0gICAgICAgIHJlc3VsdF9kcml2ZSBhbmQgcmVzdWx0X2RyaXZlWy0xOl0gIT0gY29sb24pOgotICAgICAgICByZXR1cm4gcmVzdWx0X2RyaXZlICsgc2VwICsgcmVzdWx0X3BhdGgKLSAgICByZXR1cm4gcmVzdWx0X2RyaXZlICsgcmVzdWx0X3BhdGgKKyAgICAgICAgICAgIGVsaWYgcF9kcml2ZSBhbmQgcF9kcml2ZSAhPSByZXN1bHRfZHJpdmU6CisgICAgICAgICAgICAgICAgaWYgcF9kcml2ZS5sb3dlcigpICE9IHJlc3VsdF9kcml2ZS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICAjIERpZmZlcmVudCBkcml2ZXMgPT4gaWdub3JlIHRoZSBmaXJzdCBwYXRoIGVudGlyZWx5CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9kcml2ZSA9IHBfZHJpdmUKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3BhdGggPSBwX3BhdGgKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIFNhbWUgZHJpdmUgaW4gZGlmZmVyZW50IGNhc2UKKyAgICAgICAgICAgICAgICByZXN1bHRfZHJpdmUgPSBwX2RyaXZlCisgICAgICAgICAgICAjIFNlY29uZCBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdAorICAgICAgICAgICAgaWYgcmVzdWx0X3BhdGggYW5kIHJlc3VsdF9wYXRoWy0xXSBub3QgaW4gc2VwczoKKyAgICAgICAgICAgICAgICByZXN1bHRfcGF0aCA9IHJlc3VsdF9wYXRoICsgc2VwCisgICAgICAgICAgICByZXN1bHRfcGF0aCA9IHJlc3VsdF9wYXRoICsgcF9wYXRoCisgICAgICAgICMjIGFkZCBzZXBhcmF0b3IgYmV0d2VlbiBVTkMgYW5kIG5vbi1hYnNvbHV0ZSBwYXRoCisgICAgICAgIGlmIChyZXN1bHRfcGF0aCBhbmQgcmVzdWx0X3BhdGhbMF0gbm90IGluIHNlcHMgYW5kCisgICAgICAgICAgICByZXN1bHRfZHJpdmUgYW5kIHJlc3VsdF9kcml2ZVstMTpdICE9IGNvbG9uKToKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRfZHJpdmUgKyBzZXAgKyByZXN1bHRfcGF0aAorICAgICAgICByZXR1cm4gcmVzdWx0X2RyaXZlICsgcmVzdWx0X3BhdGgKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IsIEJ5dGVzV2FybmluZyk6CisgICAgICAgIGdlbmVyaWNwYXRoLl9jaGVja19hcmdfdHlwZXMoJ2pvaW4nLCBwYXRoLCAqcGF0aHMpCisgICAgICAgIHJhaXNlCiAKIAogIyBTcGxpdCBhIHBhdGggaW4gYSBkcml2ZSBzcGVjaWZpY2F0aW9uIChhIGRyaXZlIGxldHRlciBmb2xsb3dlZCBieSBhCkBAIC0xNTUsMTAgKzEzNiwxNiBAQAogICAgIFBhdGhzIGNhbm5vdCBjb250YWluIGJvdGggYSBkcml2ZSBsZXR0ZXIgYW5kIGEgVU5DIHBhdGguCiAKICAgICAiIiIKLSAgICBlbXB0eSA9IF9nZXRfZW1wdHkocCkKLSAgICBpZiBsZW4ocCkgPiAxOgotICAgICAgICBzZXAgPSBfZ2V0X3NlcChwKQotICAgICAgICBub3JtcCA9IHAucmVwbGFjZShfZ2V0X2FsdHNlcChwKSwgc2VwKQorICAgIGlmIGxlbihwKSA+PSAyOgorICAgICAgICBpZiBpc2luc3RhbmNlKHAsIGJ5dGVzKToKKyAgICAgICAgICAgIHNlcCA9IGInXFwnCisgICAgICAgICAgICBhbHRzZXAgPSBiJy8nCisgICAgICAgICAgICBjb2xvbiA9IGInOicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlcCA9ICdcXCcKKyAgICAgICAgICAgIGFsdHNlcCA9ICcvJworICAgICAgICAgICAgY29sb24gPSAnOicKKyAgICAgICAgbm9ybXAgPSBwLnJlcGxhY2UoYWx0c2VwLCBzZXApCiAgICAgICAgIGlmIChub3JtcFswOjJdID09IHNlcCoyKSBhbmQgKG5vcm1wWzI6M10gIT0gc2VwKToKICAgICAgICAgICAgICMgaXMgYSBVTkMgcGF0aDoKICAgICAgICAgICAgICMgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYgZHJpdmUgbGV0dGVyIG9yIFVOQyBwYXRoCkBAIC0xNjYsMTggKzE1MywxOCBAQAogICAgICAgICAgICAgIyAgICAgICAgICAgZGlyZWN0b3J5IF5eXl5eXl5eXl5eXl5eXgogICAgICAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKHNlcCwgMikKICAgICAgICAgICAgIGlmIGluZGV4ID09IC0xOgotICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eSwgcAorICAgICAgICAgICAgICAgIHJldHVybiBwWzowXSwgcAogICAgICAgICAgICAgaW5kZXgyID0gbm9ybXAuZmluZChzZXAsIGluZGV4ICsgMSkKICAgICAgICAgICAgICMgYSBVTkMgcGF0aCBjYW4ndCBoYXZlIHR3byBzbGFzaGVzIGluIGEgcm93CiAgICAgICAgICAgICAjIChhZnRlciB0aGUgaW5pdGlhbCB0d28pCiAgICAgICAgICAgICBpZiBpbmRleDIgPT0gaW5kZXggKyAxOgotICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eSwgcAorICAgICAgICAgICAgICAgIHJldHVybiBwWzowXSwgcAogICAgICAgICAgICAgaWYgaW5kZXgyID09IC0xOgogICAgICAgICAgICAgICAgIGluZGV4MiA9IGxlbihwKQogICAgICAgICAgICAgcmV0dXJuIHBbOmluZGV4Ml0sIHBbaW5kZXgyOl0KLSAgICAgICAgaWYgbm9ybXBbMToyXSA9PSBfZ2V0X2NvbG9uKHApOgorICAgICAgICBpZiBub3JtcFsxOjJdID09IGNvbG9uOgogICAgICAgICAgICAgcmV0dXJuIHBbOjJdLCBwWzI6XQotICAgIHJldHVybiBlbXB0eSwgcAorICAgIHJldHVybiBwWzowXSwgcAogCiAKICMgUGFyc2UgVU5DIHBhdGhzCkBAIC0xOTAsNyArMTc3LDcgQEAKICAgICBSZXR1cm4gYSAyLXR1cGxlICh1bmMsIHJlc3QpOyBlaXRoZXIgcGFydCBtYXkgYmUgZW1wdHkuCiAgICAgSWYgdW5jIGlzIG5vdCBlbXB0eSwgaXQgaGFzIHRoZSBmb3JtICcvL2hvc3QvbW91bnQnIChvciBzaW1pbGFyCiAgICAgdXNpbmcgYmFja3NsYXNoZXMpLiAgdW5jK3Jlc3QgaXMgYWx3YXlzIHRoZSBpbnB1dCBwYXRoLgotICAgIFBhdGhzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyBuZXZlciBoYXZlIGFuIFVOQyBwYXJ0LgorICAgIFBhdGhzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyBuZXZlciBoYXZlIGEgVU5DIHBhcnQuCiAgICAgIiIiCiAgICAgaW1wb3J0IHdhcm5pbmdzCiAgICAgd2FybmluZ3Mud2FybigibnRwYXRoLnNwbGl0dW5jIGlzIGRlcHJlY2F0ZWQsIHVzZSBudHBhdGguc3BsaXRkcml2ZSBpbnN0ZWFkIiwKQEAgLTIyMSwxMCArMjA4LDcgQEAKICAgICAgICAgaSAtPSAxCiAgICAgaGVhZCwgdGFpbCA9IHBbOmldLCBwW2k6XSAgIyBub3cgdGFpbCBoYXMgbm8gc2xhc2hlcwogICAgICMgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBoZWFkLCB1bmxlc3MgaXQncyBhbGwgc2xhc2hlcwotICAgIGhlYWQyID0gaGVhZAotICAgIHdoaWxlIGhlYWQyIGFuZCBoZWFkMlstMTpdIGluIHNlcHM6Ci0gICAgICAgIGhlYWQyID0gaGVhZDJbOi0xXQotICAgIGhlYWQgPSBoZWFkMiBvciBoZWFkCisgICAgaGVhZCA9IGhlYWQucnN0cmlwKHNlcHMpIG9yIGhlYWQKICAgICByZXR1cm4gZCArIGhlYWQsIHRhaWwKIAogCkBAIC0yMzQsOCArMjE4LDEwIEBACiAjIEl0IGlzIGFsd2F5cyB0cnVlIHRoYXQgcm9vdCArIGV4dCA9PSBwLgogCiBkZWYgc3BsaXRleHQocCk6Ci0gICAgcmV0dXJuIGdlbmVyaWNwYXRoLl9zcGxpdGV4dChwLCBfZ2V0X3NlcChwKSwgX2dldF9hbHRzZXAocCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZ2V0X2RvdChwKSkKKyAgICBpZiBpc2luc3RhbmNlKHAsIGJ5dGVzKToKKyAgICAgICAgcmV0dXJuIGdlbmVyaWNwYXRoLl9zcGxpdGV4dChwLCBiJ1xcJywgYicvJywgYicuJykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZ2VuZXJpY3BhdGguX3NwbGl0ZXh0KHAsICdcXCcsICcvJywgJy4nKQogc3BsaXRleHQuX19kb2NfXyA9IGdlbmVyaWNwYXRoLl9zcGxpdGV4dC5fX2RvY19fCiAKIApAQCAtMzQzLDcgKzMyOSw3IEBACiAgICAgICAgIHVzZXJob21lID0gam9pbihkcml2ZSwgb3MuZW52aXJvblsnSE9NRVBBVEgnXSkKIAogICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICB1c2VyaG9tZSA9IHVzZXJob21lLmVuY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCisgICAgICAgIHVzZXJob21lID0gb3MuZnNlbmNvZGUodXNlcmhvbWUpCiAKICAgICBpZiBpICE9IDE6ICN+dXNlcgogICAgICAgICB1c2VyaG9tZSA9IGpvaW4oZGlybmFtZSh1c2VyaG9tZSksIHBhdGhbMTppXSkKQEAgLTM2OSwxMyArMzU1LDE0IEBACiAKICAgICBVbmtub3duIHZhcmlhYmxlcyBhcmUgbGVmdCB1bmNoYW5nZWQuIiIiCiAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6Ci0gICAgICAgIGlmIG9yZCgnJCcpIG5vdCBpbiBwYXRoIGFuZCBvcmQoJyUnKSBub3QgaW4gcGF0aDoKKyAgICAgICAgaWYgYickJyBub3QgaW4gcGF0aCBhbmQgYiclJyBub3QgaW4gcGF0aDoKICAgICAgICAgICAgIHJldHVybiBwYXRoCiAgICAgICAgIGltcG9ydCBzdHJpbmcKICAgICAgICAgdmFyY2hhcnMgPSBieXRlcyhzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAnXy0nLCAnYXNjaWknKQogICAgICAgICBxdW90ZSA9IGInXCcnCiAgICAgICAgIHBlcmNlbnQgPSBiJyUnCiAgICAgICAgIGJyYWNlID0gYid7JworICAgICAgICByYnJhY2UgPSBiJ30nCiAgICAgICAgIGRvbGxhciA9IGInJCcKICAgICAgICAgZW52aXJvbiA9IGdldGF0dHIob3MsICdlbnZpcm9uYicsIE5vbmUpCiAgICAgZWxzZToKQEAgLTM4Niw2ICszNzMsNyBAQAogICAgICAgICBxdW90ZSA9ICdcJycKICAgICAgICAgcGVyY2VudCA9ICclJwogICAgICAgICBicmFjZSA9ICd7JworICAgICAgICByYnJhY2UgPSAnfScKICAgICAgICAgZG9sbGFyID0gJyQnCiAgICAgICAgIGVudmlyb24gPSBvcy5lbnZpcm9uCiAgICAgcmVzID0gcGF0aFs6MF0KQEAgLTQzMiwxNSArNDIwLDkgQEAKICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aFtpbmRleCsyOl0KICAgICAgICAgICAgICAgICBwYXRobGVuID0gbGVuKHBhdGgpCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGF0aC5pbmRleChiJ30nKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXRoLmluZGV4KCd9JykKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXRoLmluZGV4KHJicmFjZSkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gYickeycgKyBwYXRoCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gJyR7JyArIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgcmVzICs9IGRvbGxhciArIGJyYWNlICsgcGF0aAogICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHBhdGhsZW4gLSAxCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdmFyID0gcGF0aFs6aW5kZXhdCkBAIC00NTAsMTAgKzQzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZW52aXJvblt2YXJdCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYickeycgKyB2YXIgKyBiJ30nCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJyR7JyArIHZhciArICd9JworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkb2xsYXIgKyBicmFjZSArIHZhciArIHJicmFjZQogICAgICAgICAgICAgICAgICAgICByZXMgKz0gdmFsdWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdmFyID0gcGF0aFs6MF0KQEAgLTQ4NSwxNiArNDY0LDI1IEBACiAKIGRlZiBub3JtcGF0aChwYXRoKToKICAgICAiIiJOb3JtYWxpemUgcGF0aCwgZWxpbWluYXRpbmcgZG91YmxlIHNsYXNoZXMsIGV0Yy4iIiIKLSAgICBzZXAgPSBfZ2V0X3NlcChwYXRoKQotICAgIGRvdGRvdCA9IF9nZXRfZG90KHBhdGgpICogMgotICAgIHNwZWNpYWxfcHJlZml4ZXMgPSBfZ2V0X3NwZWNpYWwocGF0aCkKKyAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKKyAgICAgICAgc2VwID0gYidcXCcKKyAgICAgICAgYWx0c2VwID0gYicvJworICAgICAgICBjdXJkaXIgPSBiJy4nCisgICAgICAgIHBhcmRpciA9IGInLi4nCisgICAgICAgIHNwZWNpYWxfcHJlZml4ZXMgPSAoYidcXFxcLlxcJywgYidcXFxcP1xcJykKKyAgICBlbHNlOgorICAgICAgICBzZXAgPSAnXFwnCisgICAgICAgIGFsdHNlcCA9ICcvJworICAgICAgICBjdXJkaXIgPSAnLicKKyAgICAgICAgcGFyZGlyID0gJy4uJworICAgICAgICBzcGVjaWFsX3ByZWZpeGVzID0gKCdcXFxcLlxcJywgJ1xcXFw/XFwnKQogICAgIGlmIHBhdGguc3RhcnRzd2l0aChzcGVjaWFsX3ByZWZpeGVzKToKICAgICAgICAgIyBpbiB0aGUgY2FzZSBvZiBwYXRocyB3aXRoIHRoZXNlIHByZWZpeGVzOgogICAgICAgICAjIFxcLlwgLT4gZGV2aWNlIG5hbWVzCiAgICAgICAgICMgXFw/XCAtPiBsaXRlcmFsIHBhdGhzCiAgICAgICAgICMgZG8gbm90IGRvIGFueSBub3JtYWxpemF0aW9uLCBidXQgcmV0dXJuIHRoZSBwYXRoIHVuY2hhbmdlZAogICAgICAgICByZXR1cm4gcGF0aAotICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoX2dldF9hbHRzZXAocGF0aCksIHNlcCkKKyAgICBwYXRoID0gcGF0aC5yZXBsYWNlKGFsdHNlcCwgc2VwKQogICAgIHByZWZpeCwgcGF0aCA9IHNwbGl0ZHJpdmUocGF0aCkKIAogICAgICMgY29sbGFwc2UgaW5pdGlhbCBiYWNrc2xhc2hlcwpAQCAtNTA1LDEzICs0OTMsMTMgQEAKICAgICBjb21wcyA9IHBhdGguc3BsaXQoc2VwKQogICAgIGkgPSAwCiAgICAgd2hpbGUgaSA8IGxlbihjb21wcyk6Ci0gICAgICAgIGlmIG5vdCBjb21wc1tpXSBvciBjb21wc1tpXSA9PSBfZ2V0X2RvdChwYXRoKToKKyAgICAgICAgaWYgbm90IGNvbXBzW2ldIG9yIGNvbXBzW2ldID09IGN1cmRpcjoKICAgICAgICAgICAgIGRlbCBjb21wc1tpXQotICAgICAgICBlbGlmIGNvbXBzW2ldID09IGRvdGRvdDoKLSAgICAgICAgICAgIGlmIGkgPiAwIGFuZCBjb21wc1tpLTFdICE9IGRvdGRvdDoKKyAgICAgICAgZWxpZiBjb21wc1tpXSA9PSBwYXJkaXI6CisgICAgICAgICAgICBpZiBpID4gMCBhbmQgY29tcHNbaS0xXSAhPSBwYXJkaXI6CiAgICAgICAgICAgICAgICAgZGVsIGNvbXBzW2ktMTppKzFdCiAgICAgICAgICAgICAgICAgaSAtPSAxCi0gICAgICAgICAgICBlbGlmIGkgPT0gMCBhbmQgcHJlZml4LmVuZHN3aXRoKF9nZXRfc2VwKHBhdGgpKToKKyAgICAgICAgICAgIGVsaWYgaSA9PSAwIGFuZCBwcmVmaXguZW5kc3dpdGgoc2VwKToKICAgICAgICAgICAgICAgICBkZWwgY29tcHNbaV0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaSArPSAxCkBAIC01MTksNyArNTA3LDcgQEAKICAgICAgICAgICAgIGkgKz0gMQogICAgICMgSWYgdGhlIHBhdGggaXMgbm93IGVtcHR5LCBzdWJzdGl0dXRlICcuJwogICAgIGlmIG5vdCBwcmVmaXggYW5kIG5vdCBjb21wczoKLSAgICAgICAgY29tcHMuYXBwZW5kKF9nZXRfZG90KHBhdGgpKQorICAgICAgICBjb21wcy5hcHBlbmQoY3VyZGlyKQogICAgIHJldHVybiBwcmVmaXggKyBzZXAuam9pbihjb21wcykKIAogCkBAIC01NTksNDIgKzU0NywxMDkgQEAKIHN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gKGhhc2F0dHIoc3lzLCAiZ2V0d2luZG93c3ZlcnNpb24iKSBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzNdID49IDIpCiAKLWRlZiByZWxwYXRoKHBhdGgsIHN0YXJ0PWN1cmRpcik6CitkZWYgcmVscGF0aChwYXRoLCBzdGFydD1Ob25lKToKICAgICAiIiJSZXR1cm4gYSByZWxhdGl2ZSB2ZXJzaW9uIG9mIGEgcGF0aCIiIgotICAgIHNlcCA9IF9nZXRfc2VwKHBhdGgpCisgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6CisgICAgICAgIHNlcCA9IGInXFwnCisgICAgICAgIGN1cmRpciA9IGInLicKKyAgICAgICAgcGFyZGlyID0gYicuLicKKyAgICBlbHNlOgorICAgICAgICBzZXAgPSAnXFwnCisgICAgICAgIGN1cmRpciA9ICcuJworICAgICAgICBwYXJkaXIgPSAnLi4nCiAKLSAgICBpZiBzdGFydCBpcyBjdXJkaXI6Ci0gICAgICAgIHN0YXJ0ID0gX2dldF9kb3QocGF0aCkKKyAgICBpZiBzdGFydCBpcyBOb25lOgorICAgICAgICBzdGFydCA9IGN1cmRpcgogCiAgICAgaWYgbm90IHBhdGg6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vIHBhdGggc3BlY2lmaWVkIikKIAotICAgIHN0YXJ0X2FicyA9IGFic3BhdGgobm9ybXBhdGgoc3RhcnQpKQotICAgIHBhdGhfYWJzID0gYWJzcGF0aChub3JtcGF0aChwYXRoKSkKLSAgICBzdGFydF9kcml2ZSwgc3RhcnRfcmVzdCA9IHNwbGl0ZHJpdmUoc3RhcnRfYWJzKQotICAgIHBhdGhfZHJpdmUsIHBhdGhfcmVzdCA9IHNwbGl0ZHJpdmUocGF0aF9hYnMpCi0gICAgaWYgbm9ybWNhc2Uoc3RhcnRfZHJpdmUpICE9IG5vcm1jYXNlKHBhdGhfZHJpdmUpOgotICAgICAgICBlcnJvciA9ICJwYXRoIGlzIG9uIG1vdW50ICd7MH0nLCBzdGFydCBvbiBtb3VudCAnezF9JyIuZm9ybWF0KAotICAgICAgICAgICAgcGF0aF9kcml2ZSwgc3RhcnRfZHJpdmUpCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJyb3IpCisgICAgdHJ5OgorICAgICAgICBzdGFydF9hYnMgPSBhYnNwYXRoKG5vcm1wYXRoKHN0YXJ0KSkKKyAgICAgICAgcGF0aF9hYnMgPSBhYnNwYXRoKG5vcm1wYXRoKHBhdGgpKQorICAgICAgICBzdGFydF9kcml2ZSwgc3RhcnRfcmVzdCA9IHNwbGl0ZHJpdmUoc3RhcnRfYWJzKQorICAgICAgICBwYXRoX2RyaXZlLCBwYXRoX3Jlc3QgPSBzcGxpdGRyaXZlKHBhdGhfYWJzKQorICAgICAgICBpZiBub3JtY2FzZShzdGFydF9kcml2ZSkgIT0gbm9ybWNhc2UocGF0aF9kcml2ZSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwYXRoIGlzIG9uIG1vdW50ICVyLCBzdGFydCBvbiBtb3VudCAlciIgJSAoCisgICAgICAgICAgICAgICAgcGF0aF9kcml2ZSwgc3RhcnRfZHJpdmUpKQogCi0gICAgc3RhcnRfbGlzdCA9IFt4IGZvciB4IGluIHN0YXJ0X3Jlc3Quc3BsaXQoc2VwKSBpZiB4XQotICAgIHBhdGhfbGlzdCA9IFt4IGZvciB4IGluIHBhdGhfcmVzdC5zcGxpdChzZXApIGlmIHhdCi0gICAgIyBXb3JrIG91dCBob3cgbXVjaCBvZiB0aGUgZmlsZXBhdGggaXMgc2hhcmVkIGJ5IHN0YXJ0IGFuZCBwYXRoLgotICAgIGkgPSAwCi0gICAgZm9yIGUxLCBlMiBpbiB6aXAoc3RhcnRfbGlzdCwgcGF0aF9saXN0KToKLSAgICAgICAgaWYgbm9ybWNhc2UoZTEpICE9IG5vcm1jYXNlKGUyKToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGkgKz0gMQorICAgICAgICBzdGFydF9saXN0ID0gW3ggZm9yIHggaW4gc3RhcnRfcmVzdC5zcGxpdChzZXApIGlmIHhdCisgICAgICAgIHBhdGhfbGlzdCA9IFt4IGZvciB4IGluIHBhdGhfcmVzdC5zcGxpdChzZXApIGlmIHhdCisgICAgICAgICMgV29yayBvdXQgaG93IG11Y2ggb2YgdGhlIGZpbGVwYXRoIGlzIHNoYXJlZCBieSBzdGFydCBhbmQgcGF0aC4KKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIGUxLCBlMiBpbiB6aXAoc3RhcnRfbGlzdCwgcGF0aF9saXN0KToKKyAgICAgICAgICAgIGlmIG5vcm1jYXNlKGUxKSAhPSBub3JtY2FzZShlMik6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGkgKz0gMQogCi0gICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6Ci0gICAgICAgIHBhcmRpciA9IGInLi4nCisgICAgICAgIHJlbF9saXN0ID0gW3BhcmRpcl0gKiAobGVuKHN0YXJ0X2xpc3QpLWkpICsgcGF0aF9saXN0W2k6XQorICAgICAgICBpZiBub3QgcmVsX2xpc3Q6CisgICAgICAgICAgICByZXR1cm4gY3VyZGlyCisgICAgICAgIHJldHVybiBqb2luKCpyZWxfbGlzdCkKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvciwgQXR0cmlidXRlRXJyb3IsIEJ5dGVzV2FybmluZywgRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgZ2VuZXJpY3BhdGguX2NoZWNrX2FyZ190eXBlcygncmVscGF0aCcsIHBhdGgsIHN0YXJ0KQorICAgICAgICByYWlzZQorCisKKyMgUmV0dXJuIHRoZSBsb25nZXN0IGNvbW1vbiBzdWItcGF0aCBvZiB0aGUgc2VxdWVuY2Ugb2YgcGF0aHMgZ2l2ZW4gYXMgaW5wdXQuCisjIFRoZSBmdW5jdGlvbiBpcyBjYXNlLWluc2Vuc2l0aXZlIGFuZCAnc2VwYXJhdG9yLWluc2Vuc2l0aXZlJywgaS5lLiBpZiB0aGUKKyMgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHBhdGhzIGlzIHRoZSB1c2Ugb2YgJ1wnIHZlcnN1cyAnLycgYXMgc2VwYXJhdG9yLAorIyB0aGV5IGFyZSBkZWVtZWQgdG8gYmUgZXF1YWwuCisjCisjIEhvd2V2ZXIsIHRoZSByZXR1cm5lZCBwYXRoIHdpbGwgaGF2ZSB0aGUgc3RhbmRhcmQgJ1wnIHNlcGFyYXRvciAoZXZlbiBpZiB0aGUKKyMgZ2l2ZW4gcGF0aHMgaGFkIHRoZSBhbHRlcm5hdGl2ZSAnLycgc2VwYXJhdG9yKSBhbmQgd2lsbCBoYXZlIHRoZSBjYXNlIG9mIHRoZQorIyBmaXJzdCBwYXRoIGdpdmVuIGluIHRoZSBzZXF1ZW5jZS4gQWRkaXRpb25hbGx5LCBhbnkgdHJhaWxpbmcgc2VwYXJhdG9yIGlzCisjIHN0cmlwcGVkIGZyb20gdGhlIHJldHVybmVkIHBhdGguCisKK2RlZiBjb21tb25wYXRoKHBhdGhzKToKKyAgICAiIiJHaXZlbiBhIHNlcXVlbmNlIG9mIHBhdGggbmFtZXMsIHJldHVybnMgdGhlIGxvbmdlc3QgY29tbW9uIHN1Yi1wYXRoLiIiIgorCisgICAgaWYgbm90IHBhdGhzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjb21tb25wYXRoKCkgYXJnIGlzIGFuIGVtcHR5IHNlcXVlbmNlJykKKworICAgIGlmIGlzaW5zdGFuY2UocGF0aHNbMF0sIGJ5dGVzKToKKyAgICAgICAgc2VwID0gYidcXCcKKyAgICAgICAgYWx0c2VwID0gYicvJworICAgICAgICBjdXJkaXIgPSBiJy4nCiAgICAgZWxzZToKLSAgICAgICAgcGFyZGlyID0gJy4uJwotICAgIHJlbF9saXN0ID0gW3BhcmRpcl0gKiAobGVuKHN0YXJ0X2xpc3QpLWkpICsgcGF0aF9saXN0W2k6XQotICAgIGlmIG5vdCByZWxfbGlzdDoKLSAgICAgICAgcmV0dXJuIF9nZXRfZG90KHBhdGgpCi0gICAgcmV0dXJuIGpvaW4oKnJlbF9saXN0KQorICAgICAgICBzZXAgPSAnXFwnCisgICAgICAgIGFsdHNlcCA9ICcvJworICAgICAgICBjdXJkaXIgPSAnLicKKworICAgIHRyeToKKyAgICAgICAgZHJpdmVzcGxpdHMgPSBbc3BsaXRkcml2ZShwLnJlcGxhY2UoYWx0c2VwLCBzZXApLmxvd2VyKCkpIGZvciBwIGluIHBhdGhzXQorICAgICAgICBzcGxpdF9wYXRocyA9IFtwLnNwbGl0KHNlcCkgZm9yIGQsIHAgaW4gZHJpdmVzcGxpdHNdCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaXNhYnMsID0gc2V0KHBbOjFdID09IHNlcCBmb3IgZCwgcCBpbiBkcml2ZXNwbGl0cykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW4ndCBtaXggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIHBhdGhzIikgZnJvbSBOb25lCisKKyAgICAgICAgIyBDaGVjayB0aGF0IGFsbCBkcml2ZSBsZXR0ZXJzIG9yIFVOQyBwYXRocyBtYXRjaC4gVGhlIGNoZWNrIGlzIG1hZGUgb25seQorICAgICAgICAjIG5vdyBvdGhlcndpc2UgdHlwZSBlcnJvcnMgZm9yIG1peGluZyBzdHJpbmdzIGFuZCBieXRlcyB3b3VsZCBub3QgYmUKKyAgICAgICAgIyBjYXVnaHQuCisgICAgICAgIGlmIGxlbihzZXQoZCBmb3IgZCwgcCBpbiBkcml2ZXNwbGl0cykpICE9IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQYXRocyBkb24ndCBoYXZlIHRoZSBzYW1lIGRyaXZlIikKKworICAgICAgICBkcml2ZSwgcGF0aCA9IHNwbGl0ZHJpdmUocGF0aHNbMF0ucmVwbGFjZShhbHRzZXAsIHNlcCkpCisgICAgICAgIGNvbW1vbiA9IHBhdGguc3BsaXQoc2VwKQorICAgICAgICBjb21tb24gPSBbYyBmb3IgYyBpbiBjb21tb24gaWYgYyBhbmQgYyAhPSBjdXJkaXJdCisKKyAgICAgICAgc3BsaXRfcGF0aHMgPSBbW2MgZm9yIGMgaW4gcyBpZiBjIGFuZCBjICE9IGN1cmRpcl0gZm9yIHMgaW4gc3BsaXRfcGF0aHNdCisgICAgICAgIHMxID0gbWluKHNwbGl0X3BhdGhzKQorICAgICAgICBzMiA9IG1heChzcGxpdF9wYXRocykKKyAgICAgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKHMxKToKKyAgICAgICAgICAgIGlmIGMgIT0gczJbaV06CisgICAgICAgICAgICAgICAgY29tbW9uID0gY29tbW9uWzppXQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb21tb24gPSBjb21tb25bOmxlbihzMSldCisKKyAgICAgICAgcHJlZml4ID0gZHJpdmUgKyBzZXAgaWYgaXNhYnMgZWxzZSBkcml2ZQorICAgICAgICByZXR1cm4gcHJlZml4ICsgc2VwLmpvaW4oY29tbW9uKQorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIGdlbmVyaWNwYXRoLl9jaGVja19hcmdfdHlwZXMoJ2NvbW1vbnBhdGgnLCAqcGF0aHMpCisgICAgICAgIHJhaXNlCiAKIAogIyBkZXRlcm1pbmUgaWYgdHdvIGZpbGVzIGFyZSBpbiBmYWN0IHRoZSBzYW1lIGZpbGUKZGlmZiAtLWdpdCBhL0xpYi9vcGNvZGUucHkgYi9MaWIvb3Bjb2RlLnB5CmluZGV4IDBiZDFlZTYuLjRjODI2YTcgMTAwNjQ0Ci0tLSBhL0xpYi9vcGNvZGUucHkKKysrIGIvTGliL29wY29kZS5weQpAQCAtNzAsNiArNzAsOSBAQAogCiBkZWZfb3AoJ1VOQVJZX0lOVkVSVCcsIDE1KQogCitkZWZfb3AoJ0JJTkFSWV9NQVRSSVhfTVVMVElQTFknLCAxNikKK2RlZl9vcCgnSU5QTEFDRV9NQVRSSVhfTVVMVElQTFknLCAxNykKKwogZGVmX29wKCdCSU5BUllfUE9XRVInLCAxOSkKIGRlZl9vcCgnQklOQVJZX01VTFRJUExZJywgMjApCiAKQEAgLTgyLDcgKzg1LDEwIEBACiBkZWZfb3AoJ0lOUExBQ0VfRkxPT1JfRElWSURFJywgMjgpCiBkZWZfb3AoJ0lOUExBQ0VfVFJVRV9ESVZJREUnLCAyOSkKIAotZGVmX29wKCdTVE9SRV9NQVAnLCA1NCkKK2RlZl9vcCgnR0VUX0FJVEVSJywgNTApCitkZWZfb3AoJ0dFVF9BTkVYVCcsIDUxKQorZGVmX29wKCdCRUZPUkVfQVNZTkNfV0lUSCcsIDUyKQorCiBkZWZfb3AoJ0lOUExBQ0VfQUREJywgNTUpCiBkZWZfb3AoJ0lOUExBQ0VfU1VCVFJBQ1QnLCA1NikKIGRlZl9vcCgnSU5QTEFDRV9NVUxUSVBMWScsIDU3KQpAQCAtOTcsMTAgKzEwMywxMiBAQAogZGVmX29wKCdCSU5BUllfT1InLCA2NikKIGRlZl9vcCgnSU5QTEFDRV9QT1dFUicsIDY3KQogZGVmX29wKCdHRVRfSVRFUicsIDY4KQorZGVmX29wKCdHRVRfWUlFTERfRlJPTV9JVEVSJywgNjkpCiAKIGRlZl9vcCgnUFJJTlRfRVhQUicsIDcwKQogZGVmX29wKCdMT0FEX0JVSUxEX0NMQVNTJywgNzEpCiBkZWZfb3AoJ1lJRUxEX0ZST00nLCA3MikKK2RlZl9vcCgnR0VUX0FXQUlUQUJMRScsIDczKQogCiBkZWZfb3AoJ0lOUExBQ0VfTFNISUZUJywgNzUpCiBkZWZfb3AoJ0lOUExBQ0VfUlNISUZUJywgNzYpCkBAIC0xMDgsNyArMTE2LDggQEAKIGRlZl9vcCgnSU5QTEFDRV9YT1InLCA3OCkKIGRlZl9vcCgnSU5QTEFDRV9PUicsIDc5KQogZGVmX29wKCdCUkVBS19MT09QJywgODApCi1kZWZfb3AoJ1dJVEhfQ0xFQU5VUCcsIDgxKQorZGVmX29wKCdXSVRIX0NMRUFOVVBfU1RBUlQnLCA4MSkKK2RlZl9vcCgnV0lUSF9DTEVBTlVQX0ZJTklTSCcsIDgyKQogCiBkZWZfb3AoJ1JFVFVSTl9WQUxVRScsIDgzKQogZGVmX29wKCdJTVBPUlRfU1RBUicsIDg0KQpAQCAtMTk0LDcgKzIwMywxNSBAQAogZGVmX29wKCdMT0FEX0NMQVNTREVSRUYnLCAxNDgpCiBoYXNmcmVlLmFwcGVuZCgxNDgpCiAKK2pyZWxfb3AoJ1NFVFVQX0FTWU5DX1dJVEgnLCAxNTQpCisKIGRlZl9vcCgnRVhURU5ERURfQVJHJywgMTQ0KQogRVhURU5ERURfQVJHID0gMTQ0CiAKK2RlZl9vcCgnQlVJTERfTElTVF9VTlBBQ0snLCAxNDkpCitkZWZfb3AoJ0JVSUxEX01BUF9VTlBBQ0snLCAxNTApCitkZWZfb3AoJ0JVSUxEX01BUF9VTlBBQ0tfV0lUSF9DQUxMJywgMTUxKQorZGVmX29wKCdCVUlMRF9UVVBMRV9VTlBBQ0snLCAxNTIpCitkZWZfb3AoJ0JVSUxEX1NFVF9VTlBBQ0snLCAxNTMpCisKIGRlbCBkZWZfb3AsIG5hbWVfb3AsIGpyZWxfb3AsIGphYnNfb3AKZGlmZiAtLWdpdCBhL0xpYi9vcGVyYXRvci5weSBiL0xpYi9vcGVyYXRvci5weQppbmRleCBiNjAzNDlmLi4wZTJlNTNlIDEwMDY0NAotLS0gYS9MaWIvb3BlcmF0b3IucHkKKysrIGIvTGliL29wZXJhdG9yLnB5CkBAIC0xMiwxMiArMTIsMTIgQEAKIAogX19hbGxfXyA9IFsnYWJzJywgJ2FkZCcsICdhbmRfJywgJ2F0dHJnZXR0ZXInLCAnY29uY2F0JywgJ2NvbnRhaW5zJywgJ2NvdW50T2YnLAogICAgICAgICAgICAnZGVsaXRlbScsICdlcScsICdmbG9vcmRpdicsICdnZScsICdnZXRpdGVtJywgJ2d0JywgJ2lhZGQnLCAnaWFuZCcsCi0gICAgICAgICAgICdpY29uY2F0JywgJ2lmbG9vcmRpdicsICdpbHNoaWZ0JywgJ2ltb2QnLCAnaW11bCcsICdpbmRleCcsCi0gICAgICAgICAgICdpbmRleE9mJywgJ2ludicsICdpbnZlcnQnLCAnaW9yJywgJ2lwb3cnLCAnaXJzaGlmdCcsICdpc18nLAotICAgICAgICAgICAnaXNfbm90JywgJ2lzdWInLCAnaXRlbWdldHRlcicsICdpdHJ1ZWRpdicsICdpeG9yJywgJ2xlJywKLSAgICAgICAgICAgJ2xlbmd0aF9oaW50JywgJ2xzaGlmdCcsICdsdCcsICdtZXRob2RjYWxsZXInLCAnbW9kJywgJ211bCcsICduZScsCi0gICAgICAgICAgICduZWcnLCAnbm90XycsICdvcl8nLCAncG9zJywgJ3BvdycsICdyc2hpZnQnLCAnc2V0aXRlbScsICdzdWInLAotICAgICAgICAgICAndHJ1ZWRpdicsICd0cnV0aCcsICd4b3InXQorICAgICAgICAgICAnaWNvbmNhdCcsICdpZmxvb3JkaXYnLCAnaWxzaGlmdCcsICdpbWF0bXVsJywgJ2ltb2QnLCAnaW11bCcsCisgICAgICAgICAgICdpbmRleCcsICdpbmRleE9mJywgJ2ludicsICdpbnZlcnQnLCAnaW9yJywgJ2lwb3cnLCAnaXJzaGlmdCcsCisgICAgICAgICAgICdpc18nLCAnaXNfbm90JywgJ2lzdWInLCAnaXRlbWdldHRlcicsICdpdHJ1ZWRpdicsICdpeG9yJywgJ2xlJywKKyAgICAgICAgICAgJ2xlbmd0aF9oaW50JywgJ2xzaGlmdCcsICdsdCcsICdtYXRtdWwnLCAnbWV0aG9kY2FsbGVyJywgJ21vZCcsCisgICAgICAgICAgICdtdWwnLCAnbmUnLCAnbmVnJywgJ25vdF8nLCAnb3JfJywgJ3BvcycsICdwb3cnLCAncnNoaWZ0JywKKyAgICAgICAgICAgJ3NldGl0ZW0nLCAnc3ViJywgJ3RydWVkaXYnLCAndHJ1dGgnLCAneG9yJ10KIAogZnJvbSBidWlsdGlucyBpbXBvcnQgYWJzIGFzIF9hYnMKIApAQCAtMTA1LDYgKzEwNSwxMCBAQAogICAgICJTYW1lIGFzIGEgKiBiLiIKICAgICByZXR1cm4gYSAqIGIKIAorZGVmIG1hdG11bChhLCBiKToKKyAgICAiU2FtZSBhcyBhIEAgYi4iCisgICAgcmV0dXJuIGEgQCBiCisKIGRlZiBuZWcoYSk6CiAgICAgIlNhbWUgYXMgLWEuIgogICAgIHJldHVybiAtYQpAQCAtMjI3LDEwICsyMzEsMTMgQEAKICAgICBBZnRlciBoID0gYXR0cmdldHRlcignbmFtZS5maXJzdCcsICduYW1lLmxhc3QnKSwgdGhlIGNhbGwgaChyKSByZXR1cm5zCiAgICAgKHIubmFtZS5maXJzdCwgci5uYW1lLmxhc3QpLgogICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgnX2F0dHJzJywgJ19jYWxsJykKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdHRyLCAqYXR0cnMpOgogICAgICAgICBpZiBub3QgYXR0cnM6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyLCBzdHIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycpCisgICAgICAgICAgICBzZWxmLl9hdHRycyA9IChhdHRyLCkKICAgICAgICAgICAgIG5hbWVzID0gYXR0ci5zcGxpdCgnLicpCiAgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgogICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpAQCAtMjM4LDcgKzI0NSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG9iagogICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGdldHRlcnMgPSB0dXBsZShtYXAoYXR0cmdldHRlciwgKGF0dHIsKSArIGF0dHJzKSkKKyAgICAgICAgICAgIHNlbGYuX2F0dHJzID0gKGF0dHIsKSArIGF0dHJzCisgICAgICAgICAgICBnZXR0ZXJzID0gdHVwbGUobWFwKGF0dHJnZXR0ZXIsIHNlbGYuX2F0dHJzKSkKICAgICAgICAgICAgIGRlZiBmdW5jKG9iaik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKGdldHRlcihvYmopIGZvciBnZXR0ZXIgaW4gZ2V0dGVycykKICAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCkBAIC0yNDYsMTkgKzI1NCwzMCBAQAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgogICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCiAKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnJXMuJXMoJXMpJyAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKG1hcChyZXByLCBzZWxmLl9hdHRycykpKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgc2VsZi5fYXR0cnMKKwogY2xhc3MgaXRlbWdldHRlcjoKICAgICAiIiIKICAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBmZXRjaGVzIHRoZSBnaXZlbiBpdGVtKHMpIGZyb20gaXRzIG9wZXJhbmQuCiAgICAgQWZ0ZXIgZiA9IGl0ZW1nZXR0ZXIoMiksIHRoZSBjYWxsIGYocikgcmV0dXJucyByWzJdLgogICAgIEFmdGVyIGcgPSBpdGVtZ2V0dGVyKDIsIDUsIDMpLCB0aGUgY2FsbCBnKHIpIHJldHVybnMgKHJbMl0sIHJbNV0sIHJbM10pCiAgICAgIiIiCisgICAgX19zbG90c19fID0gKCdfaXRlbXMnLCAnX2NhbGwnKQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW0sICppdGVtcyk6CiAgICAgICAgIGlmIG5vdCBpdGVtczoKKyAgICAgICAgICAgIHNlbGYuX2l0ZW1zID0gKGl0ZW0sKQogICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKICAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2l0ZW1dCiAgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaXRlbXMgPSAoaXRlbSwpICsgaXRlbXMKKyAgICAgICAgICAgIHNlbGYuX2l0ZW1zID0gaXRlbXMgPSAoaXRlbSwpICsgaXRlbXMKICAgICAgICAgICAgIGRlZiBmdW5jKG9iaik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKG9ialtpXSBmb3IgaSBpbiBpdGVtcykKICAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCkBAIC0yNjYsNiArMjg1LDE0IEBACiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaik6CiAgICAgICAgIHJldHVybiBzZWxmLl9jYWxsKG9iaikKIAorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICclcy4lcyglcyknICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsICcuam9pbihtYXAocmVwciwgc2VsZi5faXRlbXMpKSkKKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIHNlbGYuX2l0ZW1zCisKIGNsYXNzIG1ldGhvZGNhbGxlcjoKICAgICAiIiIKICAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBjYWxscyB0aGUgZ2l2ZW4gbWV0aG9kIG9uIGl0cyBvcGVyYW5kLgpAQCAtMjczLDYgKzMwMCw3IEBACiAgICAgQWZ0ZXIgZyA9IG1ldGhvZGNhbGxlcignbmFtZScsICdkYXRlJywgZm9vPTEpLCB0aGUgY2FsbCBnKHIpIHJldHVybnMKICAgICByLm5hbWUoJ2RhdGUnLCBmb289MSkuCiAgICAgIiIiCisgICAgX19zbG90c19fID0gKCdfbmFtZScsICdfYXJncycsICdfa3dhcmdzJykKIAogICAgIGRlZiBfX2luaXRfXygqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBpZiBsZW4oYXJncykgPCAyOgpAQCAtMjgwLDEyICszMDgsMzAgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCiAgICAgICAgIHNlbGYgPSBhcmdzWzBdCiAgICAgICAgIHNlbGYuX25hbWUgPSBhcmdzWzFdCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuX25hbWUsIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21ldGhvZCBuYW1lIG11c3QgYmUgYSBzdHJpbmcnKQogICAgICAgICBzZWxmLl9hcmdzID0gYXJnc1syOl0KICAgICAgICAgc2VsZi5fa3dhcmdzID0ga3dhcmdzCiAKICAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqKToKICAgICAgICAgcmV0dXJuIGdldGF0dHIob2JqLCBzZWxmLl9uYW1lKSgqc2VsZi5fYXJncywgKipzZWxmLl9rd2FyZ3MpCiAKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSBbcmVwcihzZWxmLl9uYW1lKV0KKyAgICAgICAgYXJncy5leHRlbmQobWFwKHJlcHIsIHNlbGYuX2FyZ3MpKQorICAgICAgICBhcmdzLmV4dGVuZCgnJXM9JXInICUgKGssIHYpIGZvciBrLCB2IGluIHNlbGYuX2t3YXJncy5pdGVtcygpKQorICAgICAgICByZXR1cm4gJyVzLiVzKCVzKScgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJywgJy5qb2luKGFyZ3MpKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9rd2FyZ3M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChzZWxmLl9uYW1lLCkgKyBzZWxmLl9hcmdzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAorICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWwoc2VsZi5fX2NsYXNzX18sIHNlbGYuX25hbWUsICoqc2VsZi5fa3dhcmdzKSwgc2VsZi5fYXJncworCisKICMgSW4tcGxhY2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCiAKIGRlZiBpYWRkKGEsIGIpOgpAQCAtMzI2LDYgKzM3MiwxMSBAQAogICAgIGEgKj0gYgogICAgIHJldHVybiBhCiAKK2RlZiBpbWF0bXVsKGEsIGIpOgorICAgICJTYW1lIGFzIGEgQD0gYi4iCisgICAgYSBAPSBiCisgICAgcmV0dXJuIGEKKwogZGVmIGlvcihhLCBiKToKICAgICAiU2FtZSBhcyBhIHw9IGIuIgogICAgIGEgfD0gYgpAQCAtMzgzLDYgKzQzNCw3IEBACiBfX2xzaGlmdF9fID0gbHNoaWZ0CiBfX21vZF9fID0gbW9kCiBfX211bF9fID0gbXVsCitfX21hdG11bF9fID0gbWF0bXVsCiBfX25lZ19fID0gbmVnCiBfX29yX18gPSBvcl8KIF9fcG9zX18gPSBwb3MKQEAgLTQwMyw2ICs0NTUsNyBAQAogX19pbHNoaWZ0X18gPSBpbHNoaWZ0CiBfX2ltb2RfXyA9IGltb2QKIF9faW11bF9fID0gaW11bAorX19pbWF0bXVsX18gPSBpbWF0bXVsCiBfX2lvcl9fID0gaW9yCiBfX2lwb3dfXyA9IGlwb3cKIF9faXJzaGlmdF9fID0gaXJzaGlmdApkaWZmIC0tZ2l0IGEvTGliL29wdHBhcnNlLnB5IGIvTGliL29wdHBhcnNlLnB5CmluZGV4IDQzMmEyZWIuLjc0YjNiMzYgMTAwNjQ0Ci0tLSBhL0xpYi9vcHRwYXJzZS5weQorKysgYi9MaWIvb3B0cGFyc2UucHkKQEAgLTkwMCw3ICs5MDAsNyBAQAogICAgICAgX3Nob3J0X29wdCA6IHsgc3RyaW5nIDogT3B0aW9uIH0KICAgICAgICAgZGljdGlvbmFyeSBtYXBwaW5nIHNob3J0IG9wdGlvbiBzdHJpbmdzLCBlZy4gIi1mIiBvciAiLVgiLAogICAgICAgICB0byB0aGUgT3B0aW9uIGluc3RhbmNlcyB0aGF0IGltcGxlbWVudCB0aGVtLiAgSWYgYW4gT3B0aW9uCi0gICAgICAgIGhhcyBtdWx0aXBsZSBzaG9ydCBvcHRpb24gc3RyaW5ncywgaXQgd2lsbCBhcHBlYXJzIGluIHRoaXMKKyAgICAgICAgaGFzIG11bHRpcGxlIHNob3J0IG9wdGlvbiBzdHJpbmdzLCBpdCB3aWxsIGFwcGVhciBpbiB0aGlzCiAgICAgICAgIGRpY3Rpb25hcnkgbXVsdGlwbGUgdGltZXMuIFsxXQogICAgICAgX2xvbmdfb3B0IDogeyBzdHJpbmcgOiBPcHRpb24gfQogICAgICAgICBkaWN0aW9uYXJ5IG1hcHBpbmcgbG9uZyBvcHRpb24gc3RyaW5ncywgZWcuICItLWZpbGUiIG9yCkBAIC0xMzYxLDcgKzEzNjEsNyBAQAogICAgICAgICBzeXMuYXJndlsxOl0pLiAgQW55IGVycm9ycyByZXN1bHQgaW4gYSBjYWxsIHRvICdlcnJvcigpJywgd2hpY2gKICAgICAgICAgYnkgZGVmYXVsdCBwcmludHMgdGhlIHVzYWdlIG1lc3NhZ2UgdG8gc3RkZXJyIGFuZCBjYWxscwogICAgICAgICBzeXMuZXhpdCgpIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4gIE9uIHN1Y2Nlc3MgcmV0dXJucyBhIHBhaXIKLSAgICAgICAgKHZhbHVlcywgYXJncykgd2hlcmUgJ3ZhbHVlcycgaXMgYW4gVmFsdWVzIGluc3RhbmNlICh3aXRoIGFsbAorICAgICAgICAodmFsdWVzLCBhcmdzKSB3aGVyZSAndmFsdWVzJyBpcyBhIFZhbHVlcyBpbnN0YW5jZSAod2l0aCBhbGwKICAgICAgICAgeW91ciBvcHRpb24gdmFsdWVzKSBhbmQgJ2FyZ3MnIGlzIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyBsZWZ0CiAgICAgICAgIG92ZXIgYWZ0ZXIgcGFyc2luZyBvcHRpb25zLgogICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9vcy5weSBiL0xpYi9vcy5weQppbmRleCAyN2IyNDFhLi5iNGM2NTFkIDEwMDY0NAotLS0gYS9MaWIvb3MucHkKKysrIGIvTGliL29zLnB5CkBAIC02MSw2ICs2MSwxMCBAQAogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgcGFzcwogCisgICAgaW1wb3J0IHBvc2l4CisgICAgX19hbGxfXy5leHRlbmQoX2dldF9leHBvcnRzX2xpc3QocG9zaXgpKQorICAgIGRlbCBwb3NpeAorCiBlbGlmICdudCcgaW4gX25hbWVzOgogICAgIG5hbWUgPSAnbnQnCiAgICAgbGluZXNlcCA9ICdcclxuJwpAQCAtMzIxLDcgKzMyNSw3IEBACiAgICAgdGhlIHZhbHVlIG9mIHRvcGRvd24sIHRoZSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGlzIHJldHJpZXZlZCBiZWZvcmUgdGhlCiAgICAgdHVwbGVzIGZvciB0aGUgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZC4KIAotICAgIEJ5IGRlZmF1bHQgZXJyb3JzIGZyb20gdGhlIG9zLmxpc3RkaXIoKSBjYWxsIGFyZSBpZ25vcmVkLiAgSWYKKyAgICBCeSBkZWZhdWx0IGVycm9ycyBmcm9tIHRoZSBvcy5zY2FuZGlyKCkgY2FsbCBhcmUgaWdub3JlZC4gIElmCiAgICAgb3B0aW9uYWwgYXJnICdvbmVycm9yJyBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uOyBpdAogICAgIHdpbGwgYmUgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50LCBhbiBPU0Vycm9yIGluc3RhbmNlLiAgSXQgY2FuCiAgICAgcmVwb3J0IHRoZSBlcnJvciB0byBjb250aW51ZSB3aXRoIHRoZSB3YWxrLCBvciByYWlzZSB0aGUgZXhjZXB0aW9uCkBAIC0zNTAsNyArMzU0LDggQEAKIAogICAgICIiIgogCi0gICAgaXNsaW5rLCBqb2luLCBpc2RpciA9IHBhdGguaXNsaW5rLCBwYXRoLmpvaW4sIHBhdGguaXNkaXIKKyAgICBkaXJzID0gW10KKyAgICBub25kaXJzID0gW10KIAogICAgICMgV2UgbWF5IG5vdCBoYXZlIHJlYWQgcGVybWlzc2lvbiBmb3IgdG9wLCBpbiB3aGljaCBjYXNlIHdlIGNhbid0CiAgICAgIyBnZXQgYSBsaXN0IG9mIHRoZSBmaWxlcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zLiAgb3Mud2FsawpAQCAtMzU4LDMwICszNjMsMTE1IEBACiAgICAgIyBtaW5vciByZWFzb24gd2hlbiAoc2F5KSBhIHRob3VzYW5kIHJlYWRhYmxlIGRpcmVjdG9yaWVzIGFyZSBzdGlsbAogICAgICMgbGVmdCB0byB2aXNpdC4gIFRoYXQgbG9naWMgaXMgY29waWVkIGhlcmUuCiAgICAgdHJ5OgotICAgICAgICAjIE5vdGUgdGhhdCBsaXN0ZGlyIGlzIGdsb2JhbCBpbiB0aGlzIG1vZHVsZSBkdWUKLSAgICAgICAgIyB0byBlYXJsaWVyIGltcG9ydC0qLgotICAgICAgICBuYW1lcyA9IGxpc3RkaXIodG9wKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgaWYgbmFtZSA9PSAnbnQnIGFuZCBpc2luc3RhbmNlKHRvcCwgYnl0ZXMpOgorICAgICAgICAgICAgc2NhbmRpcl9pdCA9IF9kdW1teV9zY2FuZGlyKHRvcCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IHNjYW5kaXIgaXMgZ2xvYmFsIGluIHRoaXMgbW9kdWxlIGR1ZQorICAgICAgICAgICAgIyB0byBlYXJsaWVyIGltcG9ydC0qLgorICAgICAgICAgICAgc2NhbmRpcl9pdCA9IHNjYW5kaXIodG9wKQorICAgICAgICBlbnRyaWVzID0gbGlzdChzY2FuZGlyX2l0KQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgogICAgICAgICBpZiBvbmVycm9yIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgb25lcnJvcihlcnIpCisgICAgICAgICAgICBvbmVycm9yKGVycm9yKQogICAgICAgICByZXR1cm4KIAotICAgIGRpcnMsIG5vbmRpcnMgPSBbXSwgW10KLSAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgaWYgaXNkaXIoam9pbih0b3AsIG5hbWUpKToKLSAgICAgICAgICAgIGRpcnMuYXBwZW5kKG5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBub25kaXJzLmFwcGVuZChuYW1lKQorICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpc19kaXIgPSBlbnRyeS5pc19kaXIoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICMgSWYgaXNfZGlyKCkgcmFpc2VzIGFuIE9TRXJyb3IsIGNvbnNpZGVyIHRoYXQgdGhlIGVudHJ5IGlzIG5vdAorICAgICAgICAgICAgIyBhIGRpcmVjdG9yeSwgc2FtZSBiZWhhdmlvdXIgdGhhbiBvcy5wYXRoLmlzZGlyKCkuCisgICAgICAgICAgICBpc19kaXIgPSBGYWxzZQogCisgICAgICAgIGlmIGlzX2RpcjoKKyAgICAgICAgICAgIGRpcnMuYXBwZW5kKGVudHJ5Lm5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBub25kaXJzLmFwcGVuZChlbnRyeS5uYW1lKQorCisgICAgICAgIGlmIG5vdCB0b3Bkb3duIGFuZCBpc19kaXI6CisgICAgICAgICAgICAjIEJvdHRvbS11cDogcmVjdXJzZSBpbnRvIHN1Yi1kaXJlY3RvcnksIGJ1dCBleGNsdWRlIHN5bWxpbmtzIHRvCisgICAgICAgICAgICAjIGRpcmVjdG9yaWVzIGlmIGZvbGxvd2xpbmtzIGlzIEZhbHNlCisgICAgICAgICAgICBpZiBmb2xsb3dsaW5rczoKKyAgICAgICAgICAgICAgICB3YWxrX2ludG8gPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaXNfc3ltbGluayA9IGVudHJ5LmlzX3N5bWxpbmsoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAjIElmIGlzX3N5bWxpbmsoKSByYWlzZXMgYW4gT1NFcnJvciwgY29uc2lkZXIgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBlbnRyeSBpcyBub3QgYSBzeW1ib2xpYyBsaW5rLCBzYW1lIGJlaGF2aW91ciB0aGFuCisgICAgICAgICAgICAgICAgICAgICMgb3MucGF0aC5pc2xpbmsoKS4KKyAgICAgICAgICAgICAgICAgICAgaXNfc3ltbGluayA9IEZhbHNlCisgICAgICAgICAgICAgICAgd2Fsa19pbnRvID0gbm90IGlzX3N5bWxpbmsKKworICAgICAgICAgICAgaWYgd2Fsa19pbnRvOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FsayhlbnRyeS5wYXRoLCB0b3Bkb3duLCBvbmVycm9yLCBmb2xsb3dsaW5rcykKKworICAgICMgWWllbGQgYmVmb3JlIHJlY3Vyc2lvbiBpZiBnb2luZyB0b3AgZG93bgogICAgIGlmIHRvcGRvd246CiAgICAgICAgIHlpZWxkIHRvcCwgZGlycywgbm9uZGlycwotICAgIGZvciBuYW1lIGluIGRpcnM6Ci0gICAgICAgIG5ld19wYXRoID0gam9pbih0b3AsIG5hbWUpCi0gICAgICAgIGlmIGZvbGxvd2xpbmtzIG9yIG5vdCBpc2xpbmsobmV3X3BhdGgpOgotICAgICAgICAgICAgeWllbGQgZnJvbSB3YWxrKG5ld19wYXRoLCB0b3Bkb3duLCBvbmVycm9yLCBmb2xsb3dsaW5rcykKLSAgICBpZiBub3QgdG9wZG93bjoKKworICAgICAgICAjIFJlY3Vyc2UgaW50byBzdWItZGlyZWN0b3JpZXMKKyAgICAgICAgaXNsaW5rLCBqb2luID0gcGF0aC5pc2xpbmssIHBhdGguam9pbgorICAgICAgICBmb3IgZGlybmFtZSBpbiBkaXJzOgorICAgICAgICAgICAgbmV3X3BhdGggPSBqb2luKHRvcCwgZGlybmFtZSkKKyAgICAgICAgICAgICMgSXNzdWUgIzIzNjA1OiBvcy5wYXRoLmlzbGluaygpIGlzIHVzZWQgaW5zdGVhZCBvZiBjYWNoaW5nCisgICAgICAgICAgICAjIGVudHJ5LmlzX3N5bWxpbmsoKSByZXN1bHQgZHVyaW5nIHRoZSBsb29wIG9uIG9zLnNjYW5kaXIoKSBiZWNhdXNlCisgICAgICAgICAgICAjIHRoZSBjYWxsZXIgY2FuIHJlcGxhY2UgdGhlIGRpcmVjdG9yeSBlbnRyeSBkdXJpbmcgdGhlICJ5aWVsZCIKKyAgICAgICAgICAgICMgYWJvdmUuCisgICAgICAgICAgICBpZiBmb2xsb3dsaW5rcyBvciBub3QgaXNsaW5rKG5ld19wYXRoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdhbGsobmV3X3BhdGgsIHRvcGRvd24sIG9uZXJyb3IsIGZvbGxvd2xpbmtzKQorICAgIGVsc2U6CisgICAgICAgICMgWWllbGQgYWZ0ZXIgcmVjdXJzaW9uIGlmIGdvaW5nIGJvdHRvbSB1cAogICAgICAgICB5aWVsZCB0b3AsIGRpcnMsIG5vbmRpcnMKIAorY2xhc3MgX0R1bW15RGlyRW50cnk6CisgICAgIiIiRHVtbXkgaW1wbGVtZW50YXRpb24gb2YgRGlyRW50cnkKKworICAgIE9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IG9zLndhbGsoYnl0ZXMpLiBTaW5jZSBvcy53YWxrKCkgZG9lc24ndCBuZWVkIHRoZQorICAgIGZvbGxvd19zeW1saW5rcyBwYXJhbWV0ZXI6IGRvbid0IGltcGxlbWVudCBpdCwgYWx3YXlzIGZvbGxvdyBzeW1ib2xpYworICAgIGxpbmtzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSkKKyAgICAgICAgIyBNaW1pY2sgRmluZEZpcnN0RmlsZS9GaW5kTmV4dEZpbGU6IHdlIHNob3VsZCBnZXQgZmlsZSBhdHRyaWJ1dGVzCisgICAgICAgICMgd2hpbGUgaXRlcmF0aW5nIG9uIGEgZGlyZWN0b3J5CisgICAgICAgIHNlbGYuX3N0YXQgPSBOb25lCisgICAgICAgIHNlbGYuX2xzdGF0ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnN0YXQoZm9sbG93X3N5bWxpbmtzPUZhbHNlKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBzdGF0KHNlbGYsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKToKKyAgICAgICAgaWYgZm9sbG93X3N5bWxpbmtzOgorICAgICAgICAgICAgaWYgc2VsZi5fc3RhdCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXQgPSBzdGF0KHNlbGYucGF0aCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdGF0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLl9sc3RhdCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2xzdGF0ID0gc3RhdChzZWxmLnBhdGgsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9sc3RhdAorCisgICAgZGVmIGlzX2RpcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fbHN0YXQgaXMgbm90IE5vbmUgYW5kIG5vdCBzZWxmLmlzX3N5bWxpbmsoKToKKyAgICAgICAgICAgICMgdXNlIHRoZSBjYWNoZSBsc3RhdAorICAgICAgICAgICAgc3RhdCA9IHNlbGYuc3RhdChmb2xsb3dfc3ltbGlua3M9RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gc3QuU19JU0RJUihzdGF0LnN0X21vZGUpCisKKyAgICAgICAgc3RhdCA9IHNlbGYuc3RhdCgpCisgICAgICAgIHJldHVybiBzdC5TX0lTRElSKHN0YXQuc3RfbW9kZSkKKworICAgIGRlZiBpc19zeW1saW5rKHNlbGYpOgorICAgICAgICBzdGF0ID0gc2VsZi5zdGF0KGZvbGxvd19zeW1saW5rcz1GYWxzZSkKKyAgICAgICAgcmV0dXJuIHN0LlNfSVNMTksoc3RhdC5zdF9tb2RlKQorCitkZWYgX2R1bW15X3NjYW5kaXIoZGlyKToKKyAgICAjIGxpc3RkaXItYmFzZWQgaW1wbGVtZW50YXRpb24gZm9yIGJ5dGVzIHBhdGNoZXMgb24gV2luZG93cworICAgIGZvciBuYW1lIGluIGxpc3RkaXIoZGlyKToKKyAgICAgICAgeWllbGQgX0R1bW15RGlyRW50cnkoZGlyLCBuYW1lKQorCiBfX2FsbF9fLmFwcGVuZCgid2FsayIpCiAKIGlmIHtvcGVuLCBzdGF0fSA8PSBzdXBwb3J0c19kaXJfZmQgYW5kIHtsaXN0ZGlyLCBzdGF0fSA8PSBzdXBwb3J0c19mZDoKQEAgLTQ2Niw3ICs1NTYsNyBAQAogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3IoZXJyKQotICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaWYgZm9sbG93X3N5bWxpbmtzIG9yIHBhdGguc2FtZXN0YXQob3JpZ19zdCwgc3RhdChkaXJmZCkpOgogICAgICAgICAgICAgICAgICAgICBkaXJwYXRoID0gcGF0aC5qb2luKHRvcHBhdGgsIG5hbWUpCmRpZmYgLS1naXQgYS9MaWIvcGF0aGxpYi5weSBiL0xpYi9wYXRobGliLnB5CmluZGV4IDRmYTg3MmQuLjE0ODBlMmYgMTAwNjQ0Ci0tLSBhL0xpYi9wYXRobGliLnB5CisrKyBiL0xpYi9wYXRobGliLnB5CkBAIC0yMjUsNiArMjI1LDM2IEBACiAgICAgICAgICAgICAjIEl0J3MgYSBwYXRoIG9uIGEgbmV0d29yayBkcml2ZSA9PiAnZmlsZTovL2hvc3Qvc2hhcmUvYS9iJwogICAgICAgICAgICAgcmV0dXJuICdmaWxlOicgKyB1cmxxdW90ZV9mcm9tX2J5dGVzKHBhdGguYXNfcG9zaXgoKS5lbmNvZGUoJ3V0Zi04JykpCiAKKyAgICBkZWYgZ2V0aG9tZWRpcihzZWxmLCB1c2VybmFtZSk6CisgICAgICAgIGlmICdIT01FJyBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgdXNlcmhvbWUgPSBvcy5lbnZpcm9uWydIT01FJ10KKyAgICAgICAgZWxpZiAnVVNFUlBST0ZJTEUnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICB1c2VyaG9tZSA9IG9zLmVudmlyb25bJ1VTRVJQUk9GSUxFJ10KKyAgICAgICAgZWxpZiAnSE9NRVBBVEgnIGluIG9zLmVudmlyb246CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZHJ2ID0gb3MuZW52aXJvblsnSE9NRURSSVZFJ10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBkcnYgPSAnJworICAgICAgICAgICAgdXNlcmhvbWUgPSBkcnYgKyBvcy5lbnZpcm9uWydIT01FUEFUSCddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IGRldGVybWluZSBob21lIGRpcmVjdG9yeSIpCisKKyAgICAgICAgaWYgdXNlcm5hbWU6CisgICAgICAgICAgICAjIFRyeSB0byBndWVzcyB1c2VyIGhvbWUgZGlyZWN0b3J5LiAgQnkgZGVmYXVsdCBhbGwgdXNlcnMKKyAgICAgICAgICAgICMgZGlyZWN0b3JpZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIGFyZSBuYW1lZCBieQorICAgICAgICAgICAgIyBjb3JyZXNwb25kaW5nIHVzZXJuYW1lcy4gIElmIGN1cnJlbnQgdXNlciBob21lIGRpcmVjdG9yeSBwb2ludHMKKyAgICAgICAgICAgICMgdG8gbm9uc3RhbmRhcmQgcGxhY2UsIHRoaXMgZ3Vlc3MgaXMgbGlrZWx5IHdyb25nLgorICAgICAgICAgICAgaWYgb3MuZW52aXJvblsnVVNFUk5BTUUnXSAhPSB1c2VybmFtZToKKyAgICAgICAgICAgICAgICBkcnYsIHJvb3QsIHBhcnRzID0gc2VsZi5wYXJzZV9wYXJ0cygodXNlcmhvbWUsKSkKKyAgICAgICAgICAgICAgICBpZiBwYXJ0c1stMV0gIT0gb3MuZW52aXJvblsnVVNFUk5BTUUnXToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBkZXRlcm1pbmUgaG9tZSBkaXJlY3RvcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlciIgJSB1c2VybmFtZSkKKyAgICAgICAgICAgICAgICBwYXJ0c1stMV0gPSB1c2VybmFtZQorICAgICAgICAgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgICAgICAgICB1c2VyaG9tZSA9IGRydiArIHJvb3QgKyBzZWxmLmpvaW4ocGFydHNbMTpdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHVzZXJob21lID0gc2VsZi5qb2luKHBhcnRzKQorICAgICAgICByZXR1cm4gdXNlcmhvbWUKIAogY2xhc3MgX1Bvc2l4Rmxhdm91cihfRmxhdm91cik6CiAgICAgc2VwID0gJy8nCkBAIC0zMDgsNiArMzM4LDIxIEBACiAgICAgICAgIGJwYXRoID0gYnl0ZXMocGF0aCkKICAgICAgICAgcmV0dXJuICdmaWxlOi8vJyArIHVybHF1b3RlX2Zyb21fYnl0ZXMoYnBhdGgpCiAKKyAgICBkZWYgZ2V0aG9tZWRpcihzZWxmLCB1c2VybmFtZSk6CisgICAgICAgIGlmIG5vdCB1c2VybmFtZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3MuZW52aXJvblsnSE9NRSddCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaW1wb3J0IHB3ZAorICAgICAgICAgICAgICAgIHJldHVybiBwd2QuZ2V0cHd1aWQob3MuZ2V0dWlkKCkpLnB3X2RpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW1wb3J0IHB3ZAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBwd2QuZ2V0cHduYW0odXNlcm5hbWUpLnB3X2RpcgorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2FuJ3QgZGV0ZXJtaW5lIGhvbWUgZGlyZWN0b3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlciIgJSB1c2VybmFtZSkKKwogCiBfd2luZG93c19mbGF2b3VyID0gX1dpbmRvd3NGbGF2b3VyKCkKIF9wb3NpeF9mbGF2b3VyID0gX1Bvc2l4Rmxhdm91cigpCkBAIC02MjksNyArNjc0LDcgQEAKICAgICAgICAgICAgIHJldHVybiBjbHMuX2ZsYXZvdXIuam9pbihwYXJ0cykKIAogICAgIGRlZiBfaW5pdChzZWxmKToKLSAgICAgICAgIyBPdmVycmlkZW4gaW4gY29uY3JldGUgUGF0aAorICAgICAgICAjIE92ZXJyaWRkZW4gaW4gY29uY3JldGUgUGF0aAogICAgICAgICBwYXNzCiAKICAgICBkZWYgX21ha2VfY2hpbGQoc2VsZiwgYXJncyk6CkBAIC05NzcsNiArMTAyMiwyNCBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIGNscyhvcy5nZXRjd2QoKSkKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBob21lKGNscyk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHBvaW50aW5nIHRvIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgKGFzCisgICAgICAgIHJldHVybmVkIGJ5IG9zLnBhdGguZXhwYW5kdXNlcignficpKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBjbHMoY2xzKCkuX2ZsYXZvdXIuZ2V0aG9tZWRpcihOb25lKSkKKworICAgIGRlZiBzYW1lZmlsZShzZWxmLCBvdGhlcl9wYXRoKToKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgb3RoZXJfcGF0aCBpcyB0aGUgc2FtZSBvciBub3QgYXMgdGhpcyBmaWxlCisgICAgICAgIChhcyByZXR1cm5lZCBieSBvcy5wYXRoLnNhbWVmaWxlKCkpLgorICAgICAgICAiIiIKKyAgICAgICAgc3QgPSBzZWxmLnN0YXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdGhlcl9zdCA9IG90aGVyX3BhdGguc3RhdCgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIG90aGVyX3N0ID0gb3Muc3RhdChvdGhlcl9wYXRoKQorICAgICAgICByZXR1cm4gb3MucGF0aC5zYW1lc3RhdChzdCwgb3RoZXJfc3QpCisKICAgICBkZWYgaXRlcmRpcihzZWxmKToKICAgICAgICAgIiIiSXRlcmF0ZSBvdmVyIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4gIERvZXMgbm90IHlpZWxkIGFueQogICAgICAgICByZXN1bHQgZm9yIHRoZSBzcGVjaWFsIHBhdGhzICcuJyBhbmQgJy4uJy4KQEAgLTk5NSw2ICsxMDU4LDggQEAKICAgICAgICAgIiIiSXRlcmF0ZSBvdmVyIHRoaXMgc3VidHJlZSBhbmQgeWllbGQgYWxsIGV4aXN0aW5nIGZpbGVzIChvZiBhbnkKICAgICAgICAga2luZCwgaW5jbHVkaW5nIGRpcmVjdG9yaWVzKSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybi4KICAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBwYXR0ZXJuOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5hY2NlcHRhYmxlIHBhdHRlcm46IHshcn0iLmZvcm1hdChwYXR0ZXJuKSkKICAgICAgICAgcGF0dGVybiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGQocGF0dGVybikKICAgICAgICAgZHJ2LCByb290LCBwYXR0ZXJuX3BhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygocGF0dGVybiwpKQogICAgICAgICBpZiBkcnYgb3Igcm9vdDoKQEAgLTEwODUsNiArMTE1MCwzOSBAQAogICAgICAgICByZXR1cm4gaW8ub3BlbihzdHIoc2VsZiksIG1vZGUsIGJ1ZmZlcmluZywgZW5jb2RpbmcsIGVycm9ycywgbmV3bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVyPXNlbGYuX29wZW5lcikKIAorICAgIGRlZiByZWFkX2J5dGVzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBpbiBieXRlcyBtb2RlLCByZWFkIGl0LCBhbmQgY2xvc2UgdGhlIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHNlbGYub3Blbihtb2RlPSdyYicpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKKworICAgIGRlZiByZWFkX3RleHQoc2VsZiwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBpbiB0ZXh0IG1vZGUsIHJlYWQgaXQsIGFuZCBjbG9zZSB0aGUgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc2VsZi5vcGVuKG1vZGU9J3InLCBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykgYXMgZjoKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorCisgICAgZGVmIHdyaXRlX2J5dGVzKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBpbiBieXRlcyBtb2RlLCB3cml0ZSB0byBpdCwgYW5kIGNsb3NlIHRoZSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgIyB0eXBlLWNoZWNrIGZvciB0aGUgYnVmZmVyIGludGVyZmFjZSBiZWZvcmUgdHJ1bmNhdGluZyB0aGUgZmlsZQorICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICB3aXRoIHNlbGYub3Blbihtb2RlPSd3YicpIGFzIGY6CisgICAgICAgICAgICByZXR1cm4gZi53cml0ZSh2aWV3KQorCisgICAgZGVmIHdyaXRlX3RleHQoc2VsZiwgZGF0YSwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBpbiB0ZXh0IG1vZGUsIHdyaXRlIHRvIGl0LCBhbmQgY2xvc2UgdGhlIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCBzdHIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgc3RyLCBub3QgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4obW9kZT0ndycsIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKSBhcyBmOgorICAgICAgICAgICAgcmV0dXJuIGYud3JpdGUoZGF0YSkKKwogICAgIGRlZiB0b3VjaChzZWxmLCBtb2RlPTBvNjY2LCBleGlzdF9vaz1UcnVlKToKICAgICAgICAgIiIiCiAgICAgICAgIENyZWF0ZSB0aGlzIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gYWNjZXNzIG1vZGUsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCkBAIC0xMTA4LDE0ICsxMjA2LDIxIEBACiAgICAgICAgIGZkID0gc2VsZi5fcmF3X29wZW4oZmxhZ3MsIG1vZGUpCiAgICAgICAgIG9zLmNsb3NlKGZkKQogCi0gICAgZGVmIG1rZGlyKHNlbGYsIG1vZGU9MG83NzcsIHBhcmVudHM9RmFsc2UpOgorICAgIGRlZiBta2RpcihzZWxmLCBtb2RlPTBvNzc3LCBwYXJlbnRzPUZhbHNlLCBleGlzdF9vaz1GYWxzZSk6CiAgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKICAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCiAgICAgICAgIGlmIG5vdCBwYXJlbnRzOgotICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IubWtkaXIoc2VsZiwgbW9kZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBub3QgZXhpc3Rfb2sgb3Igbm90IHNlbGYuaXNfZGlyKCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IubWtkaXIoc2VsZiwgbW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgbm90IGV4aXN0X29rIG9yIG5vdCBzZWxmLmlzX2RpcigpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTEyOTYsOSArMTQwMSwyNiBAQAogICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAorICAgIGRlZiBleHBhbmR1c2VyKHNlbGYpOgorICAgICAgICAiIiIgUmV0dXJuIGEgbmV3IHBhdGggd2l0aCBleHBhbmRlZCB+IGFuZCB+dXNlciBjb25zdHJ1Y3RzCisgICAgICAgIChhcyByZXR1cm5lZCBieSBvcy5wYXRoLmV4cGFuZHVzZXIpCisgICAgICAgICIiIgorICAgICAgICBpZiAobm90IChzZWxmLl9kcnYgb3Igc2VsZi5fcm9vdCkgYW5kCisgICAgICAgICAgICBzZWxmLl9wYXJ0cyBhbmQgc2VsZi5fcGFydHNbMF1bOjFdID09ICd+Jyk6CisgICAgICAgICAgICBob21lZGlyID0gc2VsZi5fZmxhdm91ci5nZXRob21lZGlyKHNlbGYuX3BhcnRzWzBdWzE6XSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnRzKFtob21lZGlyXSArIHNlbGYuX3BhcnRzWzE6XSkKKworICAgICAgICByZXR1cm4gc2VsZgorCiAKIGNsYXNzIFBvc2l4UGF0aChQYXRoLCBQdXJlUG9zaXhQYXRoKToKICAgICBfX3Nsb3RzX18gPSAoKQogCiBjbGFzcyBXaW5kb3dzUGF0aChQYXRoLCBQdXJlV2luZG93c1BhdGgpOgogICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgb3duZXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlBhdGgub3duZXIoKSBpcyB1bnN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSIpCisKKyAgICBkZWYgZ3JvdXAoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIlBhdGguZ3JvdXAoKSBpcyB1bnN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSIpCmRpZmYgLS1naXQgYS9MaWIvcGRiLnB5IGIvTGliL3BkYi5weQppbmRleCA3ZDU4YzJhLi5iMTFhYzBhIDEwMDc1NQotLS0gYS9MaWIvcGRiLnB5CisrKyBiL0xpYi9wZGIucHkKQEAgLTUyLDcgKzUyLDcgQEAKIGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWQgYXQgdGhlCiBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZiBib3RoCiBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmQgYWxpYXNlcwotZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGVuIGJ5IHRoZSBsb2NhbCBmaWxlLgorZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS4KIAogQXNpZGUgZnJvbSBhbGlhc2VzLCB0aGUgZGVidWdnZXIgaXMgbm90IGRpcmVjdGx5IHByb2dyYW1tYWJsZTsgYnV0IGl0CiBpcyBpbXBsZW1lbnRlZCBhcyBhIGNsYXNzIGZyb20gd2hpY2ggeW91IGNhbiBkZXJpdmUgeW91ciBvd24gZGVidWdnZXIKQEAgLTMwMCw3ICszMDAsNyBAQAogCiAgICAgICAgICMgQW4gJ0ludGVybmFsIFN0b3BJdGVyYXRpb24nIGV4Y2VwdGlvbiBpcyBhbiBleGNlcHRpb24gZGVidWcgZXZlbnQKICAgICAgICAgIyBpc3N1ZWQgYnkgdGhlIGludGVycHJldGVyIHdoZW4gaGFuZGxpbmcgYSBzdWJnZW5lcmF0b3IgcnVuIHdpdGgKLSAgICAgICAgIyAneWllbGQgZnJvbScgb3IgYSBnZW5lcmF0b3IgY29udHJvbGVkIGJ5IGEgZm9yIGxvb3AuIE5vIGV4Y2VwdGlvbiBoYXMKKyAgICAgICAgIyAneWllbGQgZnJvbScgb3IgYSBnZW5lcmF0b3IgY29udHJvbGxlZCBieSBhIGZvciBsb29wLiBObyBleGNlcHRpb24gaGFzCiAgICAgICAgICMgYWN0dWFsbHkgb2NjdXJyZWQgaW4gdGhpcyBjYXNlLiBUaGUgZGVidWdnZXIgdXNlcyB0aGlzIGRlYnVnIGV2ZW50IHRvCiAgICAgICAgICMgc3RvcCB3aGVuIHRoZSBkZWJ1Z2dlZSBpcyByZXR1cm5pbmcgZnJvbSBzdWNoIGdlbmVyYXRvcnMuCiAgICAgICAgIHByZWZpeCA9ICdJbnRlcm5hbCAnIGlmIChub3QgZXhjX3RyYWNlYmFjawpAQCAtMTMxNiw3ICsxMzE2LDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIElzIGl0IGEgY2xhc3M/CiAgICAgICAgIGlmIHZhbHVlLl9fY2xhc3NfXyBpcyB0eXBlOgotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCdDbGFzcyAlcy4lcycgJSAodmFsdWUuX19tb2R1bGVfXywgdmFsdWUuX19uYW1lX18pKQorICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCdDbGFzcyAlcy4lcycgJSAodmFsdWUuX19tb2R1bGVfXywgdmFsdWUuX19xdWFsbmFtZV9fKSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIE5vbmUgb2YgdGhlIGFib3ZlLi4uCiAgICAgICAgIHNlbGYubWVzc2FnZSh0eXBlKHZhbHVlKSkKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGUucHkgYi9MaWIvcGlja2xlLnB5CmluZGV4IDNiMTM5ODQuLjA0MGVjYjIgMTAwNjQ0Ci0tLSBhL0xpYi9waWNrbGUucHkKKysrIGIvTGliL3BpY2tsZS5weQpAQCAtMjU4LDI0ICsyNTgsMjAgQEAKIAogIyBUb29scyB1c2VkIGZvciBwaWNrbGluZy4KIAotZGVmIF9nZXRhdHRyaWJ1dGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1GYWxzZSk6Ci0gICAgZG90dGVkX3BhdGggPSBuYW1lLnNwbGl0KCIuIikKLSAgICBpZiBub3QgYWxsb3dfcXVhbG5hbWUgYW5kIGxlbihkb3R0ZWRfcGF0aCkgPiAxOgotICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQ2FuJ3QgZ2V0IHF1YWxpZmllZCBhdHRyaWJ1dGUgeyFyfSBvbiB7IXJ9OyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBwcm90b2NvbHMgPj0gNCB0byBlbmFibGUgc3VwcG9ydCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCBvYmopKQotICAgIGZvciBzdWJwYXRoIGluIGRvdHRlZF9wYXRoOgorZGVmIF9nZXRhdHRyaWJ1dGUob2JqLCBuYW1lKToKKyAgICBmb3Igc3VicGF0aCBpbiBuYW1lLnNwbGl0KCcuJyk6CiAgICAgICAgIGlmIHN1YnBhdGggPT0gJzxsb2NhbHM+JzoKICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgbG9jYWwgYXR0cmlidXRlIHshcn0gb24geyFyfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyZW50ID0gb2JqCiAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgc3VicGF0aCkKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkNhbid0IGdldCBhdHRyaWJ1dGUgeyFyfSBvbiB7IXJ9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCBvYmopKQotICAgIHJldHVybiBvYmoKKyAgICByZXR1cm4gb2JqLCBwYXJlbnQKIAotZGVmIHdoaWNobW9kdWxlKG9iaiwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9RmFsc2UpOgorZGVmIHdoaWNobW9kdWxlKG9iaiwgbmFtZSk6CiAgICAgIiIiRmluZCB0aGUgbW9kdWxlIGFuIG9iamVjdCBiZWxvbmcgdG8uIiIiCiAgICAgbW9kdWxlX25hbWUgPSBnZXRhdHRyKG9iaiwgJ19fbW9kdWxlX18nLCBOb25lKQogICAgIGlmIG1vZHVsZV9uYW1lIGlzIG5vdCBOb25lOgpAQCAtMjg2LDcgKzI4Miw3IEBACiAgICAgICAgIGlmIG1vZHVsZV9uYW1lID09ICdfX21haW5fXycgb3IgbW9kdWxlIGlzIE5vbmU6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBfZ2V0YXR0cmlidXRlKG1vZHVsZSwgbmFtZSwgYWxsb3dfcXVhbG5hbWUpIGlzIG9iajoKKyAgICAgICAgICAgIGlmIF9nZXRhdHRyaWJ1dGUobW9kdWxlLCBuYW1lKVswXSBpcyBvYmo6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKQEAgLTUzMyw3ICs1MjksMTEgQEAKICAgICAgICAgICAgIHNlbGYuc2F2ZShwaWQsIHNhdmVfcGVyc2lzdGVudF9pZD1GYWxzZSkKICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOUEVSU0lEKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZShQRVJTSUQgKyBzdHIocGlkKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKFBFUlNJRCArIHN0cihwaWQpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAicGVyc2lzdGVudCBJRHMgaW4gcHJvdG9jb2wgMCBtdXN0IGJlIEFTQ0lJIHN0cmluZ3MiKQogCiAgICAgZGVmIHNhdmVfcmVkdWNlKHNlbGYsIGZ1bmMsIGFyZ3MsIHN0YXRlPU5vbmUsIGxpc3RpdGVtcz1Ob25lLAogICAgICAgICAgICAgICAgICAgICBkaWN0aXRlbXM9Tm9uZSwgb2JqPU5vbmUpOgpAQCAtODk5LDE2ICs4OTksMTYgQEAKICAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCiAgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KIAotICAgICAgICBpZiBuYW1lIGlzIE5vbmUgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgbmFtZSA9IGdldGF0dHIob2JqLCAnX19xdWFsbmFtZV9fJywgTm9uZSkKICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgbmFtZSA9IG9iai5fX25hbWVfXwogCi0gICAgICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCisgICAgICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lLCBsZXZlbD0wKQogICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCi0gICAgICAgICAgICBvYmoyID0gX2dldGF0dHJpYnV0ZShtb2R1bGUsIG5hbWUsIGFsbG93X3F1YWxuYW1lPXNlbGYucHJvdG8gPj0gNCkKKyAgICAgICAgICAgIG9iajIsIHBhcmVudCA9IF9nZXRhdHRyaWJ1dGUobW9kdWxlLCBuYW1lKQogICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBLZXlFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigKICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVyOiBpdCdzIG5vdCBmb3VuZCBhcyAlcy4lcyIgJQpAQCAtOTMwLDExICs5MzAsMTYgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQ0ICsgcGFjaygiPGkiLCBjb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGFzdG5hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQorICAgICAgICBpZiBwYXJlbnQgaXMgbW9kdWxlOgorICAgICAgICAgICAgbmFtZSA9IGxhc3RuYW1lCiAgICAgICAgICMgTm9uLUFTQ0lJIGlkZW50aWZpZXJzIGFyZSBzdXBwb3J0ZWQgb25seSB3aXRoIHByb3RvY29scyA+PSAzLgogICAgICAgICBpZiBzZWxmLnByb3RvID49IDQ6CiAgICAgICAgICAgICBzZWxmLnNhdmUobW9kdWxlX25hbWUpCiAgICAgICAgICAgICBzZWxmLnNhdmUobmFtZSkKICAgICAgICAgICAgIHdyaXRlKFNUQUNLX0dMT0JBTCkKKyAgICAgICAgZWxpZiBwYXJlbnQgaXMgbm90IG1vZHVsZToKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2UoZ2V0YXR0ciwgKHBhcmVudCwgbGFzdG5hbWUpKQogICAgICAgICBlbGlmIHNlbGYucHJvdG8gPj0gMzoKICAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZV9uYW1lLCAidXRmLTgiKSArIGInXG4nICsKICAgICAgICAgICAgICAgICAgIGJ5dGVzKG5hbWUsICJ1dGYtOCIpICsgYidcbicpCkBAIC05OTQsNyArOTk5LDcgQEAKICAgICAgICAgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKICAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kCi0gICAgICAgICplcnJvcnMqLCB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvcgorICAgICAgICAqZXJyb3JzKiwgd2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yCiAgICAgICAgIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLAogICAgICAgICBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcwogICAgICAgICB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdwpAQCAtMTA3NCw3ICsxMDc5LDExIEBACiAgICAgZGlzcGF0Y2hbRlJBTUVbMF1dID0gbG9hZF9mcmFtZQogCiAgICAgZGVmIGxvYWRfcGVyc2lkKHNlbGYpOgotICAgICAgICBwaWQgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoImFzY2lpIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJhc2NpaSIpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoCisgICAgICAgICAgICAgICAgInBlcnNpc3RlbnQgSURzIGluIHByb3RvY29sIDAgbXVzdCBiZSBBU0NJSSBzdHJpbmdzIikKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5wZXJzaXN0ZW50X2xvYWQocGlkKSkKICAgICBkaXNwYXRjaFtQRVJTSURbMF1dID0gbG9hZF9wZXJzaWQKIApAQCAtMTM4MSw4ICsxMzkwLDEwIEBACiAgICAgICAgICAgICBlbGlmIG1vZHVsZSBpbiBfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORzoKICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElOR1ttb2R1bGVdCiAgICAgICAgIF9faW1wb3J0X18obW9kdWxlLCBsZXZlbD0wKQotICAgICAgICByZXR1cm4gX2dldGF0dHJpYnV0ZShzeXMubW9kdWxlc1ttb2R1bGVdLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHJldHVybiBfZ2V0YXR0cmlidXRlKHN5cy5tb2R1bGVzW21vZHVsZV0sIG5hbWUpWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzeXMubW9kdWxlc1ttb2R1bGVdLCBuYW1lKQogCiAgICAgZGVmIGxvYWRfcmVkdWNlKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGV0b29scy5weSBiL0xpYi9waWNrbGV0b29scy5weQppbmRleCBjZjVkZjQxLi4xNmFlN2Q1IDEwMDY0NAotLS0gYS9MaWIvcGlja2xldG9vbHMucHkKKysrIGIvTGliL3BpY2tsZXRvb2xzLnB5CkBAIC01OTAsNyArNTkwLDcgQEAKICAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfYnl0ZXM4LAogICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIGJ5dGVzIHN0cmluZy4KIAotICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSA4LWJ5dGUgbGl0dGxlLWVuZGlhbiB1bnNpZ25lZCBpbnQgZ2l2aW5nCisgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiA4LWJ5dGUgbGl0dGxlLWVuZGlhbiB1bnNpZ25lZCBpbnQgZ2l2aW5nCiAgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMsIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoYXQgbWFueSBieXRlcy4KICAgICAgICAgICAgICAgIiIiKQogCkBAIC03MzQsNyArNzM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfdW5pY29kZXN0cmluZzgsCiAgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgVW5pY29kZSBzdHJpbmcuCiAKLSAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgOC1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gOC1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAogICAgICAgICAgICAgICAgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZAogICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC0tIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcgLS0KICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhhdCBtYW55IGJ5dGVzLgpAQCAtMTMzMCw3ICsxMzMwLDcgQEAKICAgICAgIHByb3RvPTQsCiAgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBieXRlcyBvYmplY3QuCiAKLSAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgOC1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGFuIDgtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nCiAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHRoYXQgbWFueSBieXRlcywKICAgICAgIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LgogICAgICAgIiIiKSwKQEAgLTE0MTcsNyArMTQxNyw3IEBACiAgICAgICBwcm90bz00LAogICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gVW5pY29kZSBzdHJpbmcgb2JqZWN0LgogCi0gICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDgtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGFuIDgtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKICAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcuICBUaGUgc2Vjb25kIGlzIHRoYXQgbWFueQogICAgICAgYnl0ZXMsIGFuZCBpcyB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nLgogICAgICAgIiIiKSwKQEAgLTI3OTMsNyArMjc5Myw3IEBACiAgICAgcmV0dXJuIGRvY3Rlc3QudGVzdG1vZCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgaW1wb3J0IHN5cywgYXJncGFyc2UKKyAgICBpbXBvcnQgYXJncGFyc2UKICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKICAgICAgICAgZGVzY3JpcHRpb249J2Rpc2Fzc2VtYmxlIG9uZSBvciBtb3JlIHBpY2tsZSBmaWxlcycpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKZGlmZiAtLWdpdCBhL0xpYi9wa2d1dGlsLnB5IGIvTGliL3BrZ3V0aWwucHkKaW5kZXggYTU0ZTk0Ny4uOTc3MjZhOSAxMDA2NDQKLS0tIGEvTGliL3BrZ3V0aWwucHkKKysrIGIvTGliL3BrZ3V0aWwucHkKQEAgLTM3NSw3ICszNzUsNyBAQAogICAgICAgICAgICAgaWYgbGVuKGZuKT09MiBhbmQgZm5bMV0uc3RhcnRzd2l0aCgnX19pbml0X18ucHknKToKICAgICAgICAgICAgICAgICBpZiBmblswXSBub3QgaW4geWllbGRlZDoKICAgICAgICAgICAgICAgICAgICAgeWllbGRlZFtmblswXV0gPSAxCi0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGZuWzBdLCBUcnVlCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHByZWZpeCArIGZuWzBdLCBUcnVlCiAKICAgICAgICAgICAgIGlmIGxlbihmbikhPTE6CiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTYxNiw3ICs2MTYsNyBAQAogICAgICAgICByZXR1cm4gTm9uZQogICAgICMgWFhYIG5lZWRzIHRlc3QKICAgICBtb2QgPSAoc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yCi0gICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5sb2FkKCkpCisgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9sb2FkKHNwZWMpKQogICAgIGlmIG1vZCBpcyBOb25lIG9yIG5vdCBoYXNhdHRyKG1vZCwgJ19fZmlsZV9fJyk6CiAgICAgICAgIHJldHVybiBOb25lCiAKZGlmZiAtLWdpdCBhL0xpYi9wbGF0Zm9ybS5weSBiL0xpYi9wbGF0Zm9ybS5weQppbmRleCBhZDQyNWExLi5iOGYzZWJjIDEwMDc1NQotLS0gYS9MaWIvcGxhdGZvcm0ucHkKKysrIGIvTGliL3BsYXRmb3JtLnB5CkBAIC02MSw3ICs2MSw3IEBACiAjICAgICAgICAgICAgdGhvdWdoCiAjICAgIDAuNS4yIC0gZml4ZWQgdW5hbWUoKSB0byByZXR1cm4gJycgaW5zdGVhZCBvZiAndW5rbm93bicgaW4gYWxsCiAjICAgICAgICAgICAgcmV0dXJuIHZhbHVlcyAodGhlIHN5c3RlbSB1bmFtZSBjb21tYW5kIHRlbmRzIHRvIHJldHVybgotIyAgICAgICAgICAgICd1bmtub3duJyBpbnN0ZWFkIG9mIGp1c3QgbGVhdmluZyB0aGUgZmllbGQgZW10cHkpCisjICAgICAgICAgICAgJ3Vua25vd24nIGluc3RlYWQgb2YganVzdCBsZWF2aW5nIHRoZSBmaWVsZCBlbXB0eSkKICMgICAgMC41LjEgLSBpbmNsdWRlZCBjb2RlIGZvciBzbGFja3dhcmUgZGlzdDsgYWRkZWQgZXhjZXB0aW9uIGhhbmRsZXJzCiAjICAgICAgICAgICAgdG8gY292ZXIgdXAgc2l0dWF0aW9ucyB3aGVyZSBwbGF0Zm9ybXMgZG9uJ3QgaGF2ZSBvcy5wb3BlbgogIyAgICAgICAgICAgIChlLmcuIE1hYykgb3IgZmFpbCBvbiBzb2NrZXQuZ2V0aG9zdG5hbWUoKTsgZml4ZWQgbGliYwpAQCAtMTE2LDYgKzExNiw4IEBACiBpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBzeXMsIG9zLCByZSwgc3VicHJvY2VzcwogCitpbXBvcnQgd2FybmluZ3MKKwogIyMjIEdsb2JhbHMgJiBDb25zdGFudHMKIAogIyBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtJ3MgL2Rldi9udWxsIGRldmljZQpAQCAtMTY1LDQwICsxNjcsMzkgQEAKICAgICAgICAgIyBoZXJlIHRvIHdvcmsgYXJvdW5kIHByb2JsZW1zIHdpdGggQ3lnd2luIG5vdCBiZWluZwogICAgICAgICAjIGFibGUgdG8gb3BlbiBzeW1saW5rcyBmb3IgcmVhZGluZwogICAgICAgICBleGVjdXRhYmxlID0gb3MucGF0aC5yZWFscGF0aChleGVjdXRhYmxlKQotICAgIGYgPSBvcGVuKGV4ZWN1dGFibGUsICdyYicpCi0gICAgYmluYXJ5ID0gZi5yZWFkKGNodW5rc2l6ZSkKLSAgICBwb3MgPSAwCi0gICAgd2hpbGUgMToKLSAgICAgICAgaWYgYidsaWJjJyBpbiBiaW5hcnkgb3IgYidHTElCQycgaW4gYmluYXJ5OgotICAgICAgICAgICAgbSA9IF9saWJjX3NlYXJjaC5zZWFyY2goYmluYXJ5LCBwb3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtID0gTm9uZQotICAgICAgICBpZiBub3QgbToKLSAgICAgICAgICAgIGJpbmFyeSA9IGYucmVhZChjaHVua3NpemUpCi0gICAgICAgICAgICBpZiBub3QgYmluYXJ5OgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBwb3MgPSAwCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBsaWJjaW5pdCwgZ2xpYmMsIGdsaWJjdmVyc2lvbiwgc28sIHRocmVhZHMsIHNvdmVyc2lvbiA9IFsKLSAgICAgICAgICAgIHMuZGVjb2RlKCdsYXRpbjEnKSBpZiBzIGlzIG5vdCBOb25lIGVsc2UgcwotICAgICAgICAgICAgZm9yIHMgaW4gbS5ncm91cHMoKV0KLSAgICAgICAgaWYgbGliY2luaXQgYW5kIG5vdCBsaWI6Ci0gICAgICAgICAgICBsaWIgPSAnbGliYycKLSAgICAgICAgZWxpZiBnbGliYzoKLSAgICAgICAgICAgIGlmIGxpYiAhPSAnZ2xpYmMnOgotICAgICAgICAgICAgICAgIGxpYiA9ICdnbGliYycKLSAgICAgICAgICAgICAgICB2ZXJzaW9uID0gZ2xpYmN2ZXJzaW9uCi0gICAgICAgICAgICBlbGlmIGdsaWJjdmVyc2lvbiA+IHZlcnNpb246Ci0gICAgICAgICAgICAgICAgdmVyc2lvbiA9IGdsaWJjdmVyc2lvbgotICAgICAgICBlbGlmIHNvOgotICAgICAgICAgICAgaWYgbGliICE9ICdnbGliYyc6CisgICAgd2l0aCBvcGVuKGV4ZWN1dGFibGUsICdyYicpIGFzIGY6CisgICAgICAgIGJpbmFyeSA9IGYucmVhZChjaHVua3NpemUpCisgICAgICAgIHBvcyA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGlmIGInbGliYycgaW4gYmluYXJ5IG9yIGInR0xJQkMnIGluIGJpbmFyeToKKyAgICAgICAgICAgICAgICBtID0gX2xpYmNfc2VhcmNoLnNlYXJjaChiaW5hcnksIHBvcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbSA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGJpbmFyeSA9IGYucmVhZChjaHVua3NpemUpCisgICAgICAgICAgICAgICAgaWYgbm90IGJpbmFyeToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBwb3MgPSAwCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxpYmNpbml0LCBnbGliYywgZ2xpYmN2ZXJzaW9uLCBzbywgdGhyZWFkcywgc292ZXJzaW9uID0gWworICAgICAgICAgICAgICAgIHMuZGVjb2RlKCdsYXRpbjEnKSBpZiBzIGlzIG5vdCBOb25lIGVsc2UgcworICAgICAgICAgICAgICAgIGZvciBzIGluIG0uZ3JvdXBzKCldCisgICAgICAgICAgICBpZiBsaWJjaW5pdCBhbmQgbm90IGxpYjoKICAgICAgICAgICAgICAgICBsaWIgPSAnbGliYycKLSAgICAgICAgICAgICAgICBpZiBzb3ZlcnNpb24gYW5kIHNvdmVyc2lvbiA+IHZlcnNpb246Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBzb3ZlcnNpb24KLSAgICAgICAgICAgICAgICBpZiB0aHJlYWRzIGFuZCB2ZXJzaW9uWy1sZW4odGhyZWFkcyk6XSAhPSB0aHJlYWRzOgotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbiArIHRocmVhZHMKLSAgICAgICAgcG9zID0gbS5lbmQoKQotICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZWxpZiBnbGliYzoKKyAgICAgICAgICAgICAgICBpZiBsaWIgIT0gJ2dsaWJjJzoKKyAgICAgICAgICAgICAgICAgICAgbGliID0gJ2dsaWJjJworICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gZ2xpYmN2ZXJzaW9uCisgICAgICAgICAgICAgICAgZWxpZiBnbGliY3ZlcnNpb24gPiB2ZXJzaW9uOgorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gZ2xpYmN2ZXJzaW9uCisgICAgICAgICAgICBlbGlmIHNvOgorICAgICAgICAgICAgICAgIGlmIGxpYiAhPSAnZ2xpYmMnOgorICAgICAgICAgICAgICAgICAgICBsaWIgPSAnbGliYycKKyAgICAgICAgICAgICAgICAgICAgaWYgc292ZXJzaW9uIGFuZCBzb3ZlcnNpb24gPiB2ZXJzaW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHNvdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBpZiB0aHJlYWRzIGFuZCB2ZXJzaW9uWy1sZW4odGhyZWFkcyk6XSAhPSB0aHJlYWRzOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24gKyB0aHJlYWRzCisgICAgICAgICAgICBwb3MgPSBtLmVuZCgpCiAgICAgcmV0dXJuIGxpYiwgdmVyc2lvbgogCiBkZWYgX2Rpc3RfdHJ5X2hhcmRlcihkaXN0bmFtZSwgdmVyc2lvbiwgaWQpOgpAQCAtMzAwLDYgKzMwMSwxNCBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZF9kaXN0cz1fc3VwcG9ydGVkX2Rpc3RzLAogICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2Rpc3RyaWJ1dGlvbl9uYW1lPTEpOgorICAgIGltcG9ydCB3YXJuaW5ncworICAgIHdhcm5pbmdzLndhcm4oImRpc3QoKSBhbmQgbGludXhfZGlzdHJpYnV0aW9uKCkgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkICIKKyAgICAgICAgICAgICAgICAgICJpbiBQeXRob24gMy41IiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgIHJldHVybiBfbGludXhfZGlzdHJpYnV0aW9uKGRpc3RuYW1lLCB2ZXJzaW9uLCBpZCwgc3VwcG9ydGVkX2Rpc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxfZGlzdHJpYnV0aW9uX25hbWUpCisKK2RlZiBfbGludXhfZGlzdHJpYnV0aW9uKGRpc3RuYW1lLCB2ZXJzaW9uLCBpZCwgc3VwcG9ydGVkX2Rpc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbF9kaXN0cmlidXRpb25fbmFtZSk6CiAKICAgICAiIiIgVHJpZXMgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBMaW51eCBPUyBkaXN0cmlidXRpb24gbmFtZS4KIApAQCAtMzY2LDkgKzM3NSwxMiBAQAogICAgICAgICBhcmdzIGdpdmVuIGFzIHBhcmFtZXRlcnMuCiAKICAgICAiIiIKLSAgICByZXR1cm4gbGludXhfZGlzdHJpYnV0aW9uKGRpc3RuYW1lLCB2ZXJzaW9uLCBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZF9kaXN0cz1zdXBwb3J0ZWRfZGlzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX2Rpc3RyaWJ1dGlvbl9uYW1lPTApCisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2FybmluZ3Mud2FybigiZGlzdCgpIGFuZCBsaW51eF9kaXN0cmlidXRpb24oKSBmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQgIgorICAgICAgICAgICAgICAgICAgImluIFB5dGhvbiAzLjUiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgcmV0dXJuIF9saW51eF9kaXN0cmlidXRpb24oZGlzdG5hbWUsIHZlcnNpb24sIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZF9kaXN0cz1zdXBwb3J0ZWRfZGlzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbF9kaXN0cmlidXRpb25fbmFtZT0wKQogCiBkZWYgcG9wZW4oY21kLCBtb2RlPSdyJywgYnVmc2l6ZT0tMSk6CiAKQEAgLTQyOCw3ICs0NDAsNyBAQAogICAgICMgVHJ5IHNvbWUgY29tbW9uIGNtZCBzdHJpbmdzCiAgICAgZm9yIGNtZCBpbiAoJ3ZlcicsICdjb21tYW5kIC9jIHZlcicsICdjbWQgL2MgdmVyJyk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHBpcGUgPSBwb3BlbihjbWQpCisgICAgICAgICAgICBwaXBlID0gb3MucG9wZW4oY21kKQogICAgICAgICAgICAgaW5mbyA9IHBpcGUucmVhZCgpCiAgICAgICAgICAgICBpZiBwaXBlLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY29tbWFuZCBmYWlsZWQnKQpAQCAtNTc0LDcgKzU4Niw3IEBACiAgICAgICAgICAgICAgICAgY3NkID0gJ1NQJyArIGNzZFsxMzpdCiAKICAgICAjIFZFUl9OVF9TRVJWRVIgPSAzCi0gICAgaWYgZ2V0YXR0cih3aW52ZXIsICdwcm9kdWN0X3R5cGUnLCBOb25lKSA9PSAzOgorICAgIGlmIGdldGF0dHIod2ludmVyLCAncHJvZHVjdCcsIE5vbmUpID09IDM6CiAgICAgICAgIHJlbGVhc2UgPSAoX1dJTjMyX1NFUlZFUl9SRUxFQVNFUy5nZXQoKG1haiwgbWluKSkgb3IKICAgICAgICAgICAgICAgICAgICBfV0lOMzJfU0VSVkVSX1JFTEVBU0VTLmdldCgobWFqLCBOb25lKSkgb3IKICAgICAgICAgICAgICAgICAgICByZWxlYXNlKQpAQCAtMTEzNCw5ICsxMTQ2LDExIEBACiAjIyMgVmFyaW91cyBBUElzIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gc3lzLnZlcnNpb24KIAogX3N5c192ZXJzaW9uX3BhcnNlciA9IHJlLmNvbXBpbGUoCi0gICAgcicoW1x3LitdKylccyonCi0gICAgJ1woIz8oW14sXSspLFxzKihbXHcgXSspLFxzKihbXHcgOl0rKVwpXHMqJwotICAgICdcWyhbXlxdXSspXF0/JywgcmUuQVNDSUkpCisgICAgcicoW1x3LitdKylccyonICAjICJ2ZXJzaW9uPHNwYWNlPiIKKyAgICByJ1woIz8oW14sXSspJyAgIyAiKCNidWlsZG5vIgorICAgIHInKD86LFxzKihbXHcgXSopJyAgIyAiLCBidWlsZGRhdGUiCisgICAgcicoPzosXHMqKFtcdyA6XSopKT8pP1wpXHMqJyAgIyAiLCBidWlsZHRpbWUpPHNwYWNlPiIKKyAgICByJ1xbKFteXF1dKylcXT8nLCByZS5BU0NJSSkgICMgIltjb21waWxlcl0iCiAKIF9pcm9ucHl0aG9uX3N5c192ZXJzaW9uX3BhcnNlciA9IHJlLmNvbXBpbGUoCiAgICAgcidJcm9uUHl0aG9uXHMqJwpAQCAtMTIxNSw2ICsxMjI5LDggQEAKICAgICAgICAgICAgICAgICAnZmFpbGVkIHRvIHBhcnNlIEp5dGhvbiBzeXMudmVyc2lvbjogJXMnICUKICAgICAgICAgICAgICAgICByZXByKHN5c192ZXJzaW9uKSkKICAgICAgICAgdmVyc2lvbiwgYnVpbGRubywgYnVpbGRkYXRlLCBidWlsZHRpbWUsIF8gPSBtYXRjaC5ncm91cHMoKQorICAgICAgICBpZiBidWlsZGRhdGUgaXMgTm9uZToKKyAgICAgICAgICAgIGJ1aWxkZGF0ZSA9ICcnCiAgICAgICAgIGNvbXBpbGVyID0gc3lzLnBsYXRmb3JtCiAKICAgICBlbGlmICJQeVB5IiBpbiBzeXNfdmVyc2lvbjoKQEAgLTEyMzcsNyArMTI1MywxMCBAQAogICAgICAgICB2ZXJzaW9uLCBidWlsZG5vLCBidWlsZGRhdGUsIGJ1aWxkdGltZSwgY29tcGlsZXIgPSBcCiAgICAgICAgICAgICAgIG1hdGNoLmdyb3VwcygpCiAgICAgICAgIG5hbWUgPSAnQ1B5dGhvbicKLSAgICAgICAgYnVpbGRkYXRlID0gYnVpbGRkYXRlICsgJyAnICsgYnVpbGR0aW1lCisgICAgICAgIGlmIGJ1aWxkZGF0ZSBpcyBOb25lOgorICAgICAgICAgICAgYnVpbGRkYXRlID0gJycKKyAgICAgICAgZWxpZiBidWlsZHRpbWU6CisgICAgICAgICAgICBidWlsZGRhdGUgPSBidWlsZGRhdGUgKyAnICcgKyBidWlsZHRpbWUKIAogICAgIGlmIGhhc2F0dHIoc3lzLCAnX21lcmN1cmlhbCcpOgogICAgICAgICBfLCBicmFuY2gsIHJldmlzaW9uID0gc3lzLl9tZXJjdXJpYWwKQEAgLTEzODEsNyArMTQwMCwxNSBAQAogCiAgICAgZWxpZiBzeXN0ZW0gaW4gKCdMaW51eCcsKToKICAgICAgICAgIyBMaW51eCBiYXNlZCBzeXN0ZW1zCi0gICAgICAgIGRpc3RuYW1lLCBkaXN0dmVyc2lvbiwgZGlzdGlkID0gZGlzdCgnJykKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgIyBzZWUgaXNzdWUgIzEzMjIgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKAorICAgICAgICAgICAgICAgICdpZ25vcmUnLAorICAgICAgICAgICAgICAgICdkaXN0XChcKSBhbmQgbGludXhfZGlzdHJpYnV0aW9uXChcKSAnCisgICAgICAgICAgICAgICAgJ2Z1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZCAuKicsCisgICAgICAgICAgICAgICAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIGRpc3RuYW1lLCBkaXN0dmVyc2lvbiwgZGlzdGlkID0gZGlzdCgnJykKICAgICAgICAgaWYgZGlzdG5hbWUgYW5kIG5vdCB0ZXJzZToKICAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgbWFjaGluZSwgcHJvY2Vzc29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGgnLApkaWZmIC0tZ2l0IGEvTGliL3BsaXN0bGliLnB5IGIvTGliL3BsaXN0bGliLnB5CmluZGV4IGI5OTQ2ZmQuLmI2NjYzOWMgMTAwNjQ0Ci0tLSBhL0xpYi9wbGlzdGxpYi5weQorKysgYi9MaWIvcGxpc3RsaWIucHkKQEAgLTIyNSwxMCArMjI1LDEwIEBACiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLmRhdGEgPT0gb3RoZXIuZGF0YQotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob3RoZXIsIHN0cik6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdGhlciwgYnl0ZXMpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSA9PSBvdGhlcgogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGlkKHNlbGYpID09IGlkKG90aGVyKQorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAiJXMoJXMpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgcmVwcihzZWxmLmRhdGEpKQpAQCAtNjg1LDcgKzY4NSw3IEBACiAgICAgICAgICAgICBmID0gc3RydWN0LnVucGFjaygnPmQnLCBzZWxmLl9mcC5yZWFkKDgpKVswXQogICAgICAgICAgICAgIyB0aW1lc3RhbXAgMCBvZiBiaW5hcnkgcGxpc3RzIGNvcnJlc3BvbmRzIHRvIDEvMS8yMDAxCiAgICAgICAgICAgICAjICh5ZWFyIG9mIE1hYyBPUyBYIDEwLjApLCBpbnN0ZWFkIG9mIDEvMS8xOTcwLgotICAgICAgICAgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoZiArICgzMSAqIDM2NSArIDgpICogODY0MDApCisgICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMSwgMSwgMSkgKyBkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz1mKQogCiAgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NDA6ICAjIGRhdGEKICAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCmRpZmYgLS1naXQgYS9MaWIvcG9wbGliLnB5IGIvTGliL3BvcGxpYi5weQppbmRleCA0OTE1NjI4Li5mNjcyMzkwIDEwMDY0NAotLS0gYS9MaWIvcG9wbGliLnB5CisrKyBiL0xpYi9wb3BsaWIucHkKQEAgLTcxLDYgKzcxLDcgQEAKICAgICAgICAgICAgIFVJREwgW21zZ10gICAgICAgICAgICAgIHVpZGwobXNnID0gTm9uZSkKICAgICAgICAgICAgIENBUEEgICAgICAgICAgICAgICAgICAgIGNhcGEoKQogICAgICAgICAgICAgU1RMUyAgICAgICAgICAgICAgICAgICAgc3RscygpCisgICAgICAgICAgICBVVEY4ICAgICAgICAgICAgICAgICAgICB1dGY4KCkKIAogICAgIFJhaXNlcyBvbmUgZXhjZXB0aW9uOiAnZXJyb3JfcHJvdG8nLgogCkBAIC0zNDgsNiArMzQ5LDEyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9sb25nY21kKCdVSURMJykKIAogCisgICAgZGVmIHV0Zjgoc2VsZik6CisgICAgICAgICIiIlRyeSB0byBlbnRlciBVVEYtOCBtb2RlIChzZWUgUkZDIDY4NTYpLiBSZXR1cm5zIHNlcnZlciByZXNwb25zZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zaG9ydGNtZCgnVVRGOCcpCisKKwogICAgIGRlZiBjYXBhKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gc2VydmVyIGNhcGFiaWxpdGllcyAoUkZDIDI0NDkpIGFzIGEgZGljdGlvbmFyeQogICAgICAgICA+Pj4gYz1wb3BsaWIuUE9QMygnbG9jYWxob3N0JykKZGlmZiAtLWdpdCBhL0xpYi9wb3NpeHBhdGgucHkgYi9MaWIvcG9zaXhwYXRoLnB5CmluZGV4IDBhYTUzZmUuLjdiYjRkNTkgMTAwNjQ0Ci0tLSBhL0xpYi9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Bvc2l4cGF0aC5weQpAQCAtMjIsNyArMjIsOCBAQAogICAgICAgICAgICAiaXNtb3VudCIsICJleHBhbmR1c2VyIiwiZXhwYW5kdmFycyIsIm5vcm1wYXRoIiwiYWJzcGF0aCIsCiAgICAgICAgICAgICJzYW1lZmlsZSIsInNhbWVvcGVuZmlsZSIsInNhbWVzdGF0IiwKICAgICAgICAgICAgImN1cmRpciIsInBhcmRpciIsInNlcCIsInBhdGhzZXAiLCJkZWZwYXRoIiwiYWx0c2VwIiwiZXh0c2VwIiwKLSAgICAgICAgICAgImRldm51bGwiLCJyZWFscGF0aCIsInN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzIiwicmVscGF0aCJdCisgICAgICAgICAgICJkZXZudWxsIiwicmVhbHBhdGgiLCJzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyIsInJlbHBhdGgiLAorICAgICAgICAgICAiY29tbW9ucGF0aCJdCiAKICMgU3RyaW5ncyByZXByZXNlbnRpbmcgdmFyaW91cyBwYXRoLXJlbGF0ZWQgYml0cyBhbmQgcGllY2VzLgogIyBUaGVzZSBhcmUgcHJpbWFyaWx5IGZvciBleHBvcnQ7IGludGVybmFsbHksIHRoZXkgYXJlIGhhcmRjb2RlZC4KQEAgLTc1LDYgKzc2LDggQEAKICAgICBzZXAgPSBfZ2V0X3NlcChhKQogICAgIHBhdGggPSBhCiAgICAgdHJ5OgorICAgICAgICBpZiBub3QgcDoKKyAgICAgICAgICAgIHBhdGhbOjBdICsgc2VwICAjMjM3ODA6IEVuc3VyZSBjb21wYXRpYmxlIGRhdGEgdHlwZSBldmVuIGlmIHAgaXMgbnVsbC4KICAgICAgICAgZm9yIGIgaW4gcDoKICAgICAgICAgICAgIGlmIGIuc3RhcnRzd2l0aChzZXApOgogICAgICAgICAgICAgICAgIHBhdGggPSBiCkBAIC04MiwxMSArODUsOCBAQAogICAgICAgICAgICAgICAgIHBhdGggKz0gYgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYXRoICs9IHNlcCArIGIKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBpZiBhbGwoaXNpbnN0YW5jZShzLCAoc3RyLCBieXRlcykpIGZvciBzIGluIChhLCkgKyBwKToKLSAgICAgICAgICAgICMgTXVzdCBoYXZlIGEgbWl4dHVyZSBvZiB0ZXh0IGFuZCBiaW5hcnkgZGF0YQotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4ndCBtaXggc3RyaW5ncyBhbmQgYnl0ZXMgaW4gcGF0aCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBvbmVudHMiKSBmcm9tIE5vbmUKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IsIEJ5dGVzV2FybmluZyk6CisgICAgICAgIGdlbmVyaWNwYXRoLl9jaGVja19hcmdfdHlwZXMoJ2pvaW4nLCBhLCAqcCkKICAgICAgICAgcmFpc2UKICAgICByZXR1cm4gcGF0aAogCkBAIC0zNzIsNyArMzcyLDcgQEAKICAgICBwYXRoLCBvayA9IF9qb2lucmVhbHBhdGgoZmlsZW5hbWVbOjBdLCBmaWxlbmFtZSwge30pCiAgICAgcmV0dXJuIGFic3BhdGgocGF0aCkKIAotIyBKb2luIHR3byBwYXRocywgbm9ybWFsaXppbmcgYW5nIGVsaW1pbmF0aW5nIGFueSBzeW1ib2xpYyBsaW5rcworIyBKb2luIHR3byBwYXRocywgbm9ybWFsaXppbmcgYW5kIGVsaW1pbmF0aW5nIGFueSBzeW1ib2xpYyBsaW5rcwogIyBlbmNvdW50ZXJlZCBpbiB0aGUgc2Vjb25kIHBhdGguCiBkZWYgX2pvaW5yZWFscGF0aChwYXRoLCByZXN0LCBzZWVuKToKICAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKQEAgLTQ0NSwxMyArNDQ1LDU4IEBACiAgICAgaWYgc3RhcnQgaXMgTm9uZToKICAgICAgICAgc3RhcnQgPSBjdXJkaXIKIAotICAgIHN0YXJ0X2xpc3QgPSBbeCBmb3IgeCBpbiBhYnNwYXRoKHN0YXJ0KS5zcGxpdChzZXApIGlmIHhdCi0gICAgcGF0aF9saXN0ID0gW3ggZm9yIHggaW4gYWJzcGF0aChwYXRoKS5zcGxpdChzZXApIGlmIHhdCisgICAgdHJ5OgorICAgICAgICBzdGFydF9saXN0ID0gW3ggZm9yIHggaW4gYWJzcGF0aChzdGFydCkuc3BsaXQoc2VwKSBpZiB4XQorICAgICAgICBwYXRoX2xpc3QgPSBbeCBmb3IgeCBpbiBhYnNwYXRoKHBhdGgpLnNwbGl0KHNlcCkgaWYgeF0KKyAgICAgICAgIyBXb3JrIG91dCBob3cgbXVjaCBvZiB0aGUgZmlsZXBhdGggaXMgc2hhcmVkIGJ5IHN0YXJ0IGFuZCBwYXRoLgorICAgICAgICBpID0gbGVuKGNvbW1vbnByZWZpeChbc3RhcnRfbGlzdCwgcGF0aF9saXN0XSkpCiAKLSAgICAjIFdvcmsgb3V0IGhvdyBtdWNoIG9mIHRoZSBmaWxlcGF0aCBpcyBzaGFyZWQgYnkgc3RhcnQgYW5kIHBhdGguCi0gICAgaSA9IGxlbihjb21tb25wcmVmaXgoW3N0YXJ0X2xpc3QsIHBhdGhfbGlzdF0pKQorICAgICAgICByZWxfbGlzdCA9IFtwYXJkaXJdICogKGxlbihzdGFydF9saXN0KS1pKSArIHBhdGhfbGlzdFtpOl0KKyAgICAgICAgaWYgbm90IHJlbF9saXN0OgorICAgICAgICAgICAgcmV0dXJuIGN1cmRpcgorICAgICAgICByZXR1cm4gam9pbigqcmVsX2xpc3QpCisgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yLCBCeXRlc1dhcm5pbmcsIERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgIGdlbmVyaWNwYXRoLl9jaGVja19hcmdfdHlwZXMoJ3JlbHBhdGgnLCBwYXRoLCBzdGFydCkKKyAgICAgICAgcmFpc2UKIAotICAgIHJlbF9saXN0ID0gW3BhcmRpcl0gKiAobGVuKHN0YXJ0X2xpc3QpLWkpICsgcGF0aF9saXN0W2k6XQotICAgIGlmIG5vdCByZWxfbGlzdDoKLSAgICAgICAgcmV0dXJuIGN1cmRpcgotICAgIHJldHVybiBqb2luKCpyZWxfbGlzdCkKKworIyBSZXR1cm4gdGhlIGxvbmdlc3QgY29tbW9uIHN1Yi1wYXRoIG9mIHRoZSBzZXF1ZW5jZSBvZiBwYXRocyBnaXZlbiBhcyBpbnB1dC4KKyMgVGhlIHBhdGhzIGFyZSBub3Qgbm9ybWFsaXplZCBiZWZvcmUgY29tcGFyaW5nIHRoZW0gKHRoaXMgaXMgdGhlCisjIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIpLiBBbnkgdHJhaWxpbmcgc2VwYXJhdG9yIGlzIHN0cmlwcGVkIGZyb20gdGhlCisjIHJldHVybmVkIHBhdGguCisKK2RlZiBjb21tb25wYXRoKHBhdGhzKToKKyAgICAiIiJHaXZlbiBhIHNlcXVlbmNlIG9mIHBhdGggbmFtZXMsIHJldHVybnMgdGhlIGxvbmdlc3QgY29tbW9uIHN1Yi1wYXRoLiIiIgorCisgICAgaWYgbm90IHBhdGhzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjb21tb25wYXRoKCkgYXJnIGlzIGFuIGVtcHR5IHNlcXVlbmNlJykKKworICAgIGlmIGlzaW5zdGFuY2UocGF0aHNbMF0sIGJ5dGVzKToKKyAgICAgICAgc2VwID0gYicvJworICAgICAgICBjdXJkaXIgPSBiJy4nCisgICAgZWxzZToKKyAgICAgICAgc2VwID0gJy8nCisgICAgICAgIGN1cmRpciA9ICcuJworCisgICAgdHJ5OgorICAgICAgICBzcGxpdF9wYXRocyA9IFtwYXRoLnNwbGl0KHNlcCkgZm9yIHBhdGggaW4gcGF0aHNdCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaXNhYnMsID0gc2V0KHBbOjFdID09IHNlcCBmb3IgcCBpbiBwYXRocykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW4ndCBtaXggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIHBhdGhzIikgZnJvbSBOb25lCisKKyAgICAgICAgc3BsaXRfcGF0aHMgPSBbW2MgZm9yIGMgaW4gcyBpZiBjIGFuZCBjICE9IGN1cmRpcl0gZm9yIHMgaW4gc3BsaXRfcGF0aHNdCisgICAgICAgIHMxID0gbWluKHNwbGl0X3BhdGhzKQorICAgICAgICBzMiA9IG1heChzcGxpdF9wYXRocykKKyAgICAgICAgY29tbW9uID0gczEKKyAgICAgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKHMxKToKKyAgICAgICAgICAgIGlmIGMgIT0gczJbaV06CisgICAgICAgICAgICAgICAgY29tbW9uID0gczFbOmldCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBwcmVmaXggPSBzZXAgaWYgaXNhYnMgZWxzZSBzZXBbOjBdCisgICAgICAgIHJldHVybiBwcmVmaXggKyBzZXAuam9pbihjb21tb24pCisgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgZ2VuZXJpY3BhdGguX2NoZWNrX2FyZ190eXBlcygnY29tbW9ucGF0aCcsICpwYXRocykKKyAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9wcHJpbnQucHkgYi9MaWIvcHByaW50LnB5CmluZGV4IDJjYmZmZWQuLmJjZjJlZWQgMTAwNjQ0Ci0tLSBhL0xpYi9wcHJpbnQucHkKKysrIGIvTGliL3BwcmludC5weQpAQCAtMzQsOSArMzQsMTAgQEAKIAogIiIiCiAKK2ltcG9ydCBjb2xsZWN0aW9ucyBhcyBfY29sbGVjdGlvbnMKIGltcG9ydCByZQogaW1wb3J0IHN5cyBhcyBfc3lzCi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCBhcyBfT3JkZXJlZERpY3QKK2ltcG9ydCB0eXBlcyBhcyBfdHlwZXMKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPIGFzIF9TdHJpbmdJTwogCiBfX2FsbF9fID0gWyJwcHJpbnQiLCJwZm9ybWF0IiwiaXNyZWFkYWJsZSIsImlzcmVjdXJzaXZlIiwic2FmZXJlcHIiLApAQCAtNzEsNyArNzIsNyBAQAogY2xhc3MgX3NhZmVfa2V5OgogICAgICIiIkhlbHBlciBmdW5jdGlvbiBmb3Iga2V5IGZ1bmN0aW9ucyB3aGVuIHNvcnRpbmcgdW5vcmRlcmFibGUgb2JqZWN0cy4KIAotICAgIFRoZSB3cmFwcGVkLW9iamVjdCB3aWxsIGZhbGxiYWNrIHRvIGFuIFB5Mi54IHN0eWxlIGNvbXBhcmlzb24gZm9yCisgICAgVGhlIHdyYXBwZWQtb2JqZWN0IHdpbGwgZmFsbGJhY2sgdG8gYSBQeTIueCBzdHlsZSBjb21wYXJpc29uIGZvcgogICAgIHVub3JkZXJhYmxlIHR5cGVzIChzb3J0aW5nIGZpcnN0IGNvbXBhcmluZyB0aGUgdHlwZSBuYW1lIGFuZCB0aGVuIGJ5CiAgICAgdGhlIG9iaiBpZHMpLiAgRG9lcyBub3Qgd29yayByZWN1cnNpdmVseSwgc28gZGljdC5pdGVtcygpIG11c3QgaGF2ZQogICAgIF9zYWZlX2tleSBhcHBsaWVkIHRvIGJvdGggdGhlIGtleSBhbmQgdGhlIHZhbHVlLgpAQCAtODUsMTQgKzg2LDEwIEBACiAKICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcnYgPSBzZWxmLm9iai5fX2x0X18ob3RoZXIub2JqKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYub2JqIDwgb3RoZXIub2JqCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBydiA9IE5vdEltcGxlbWVudGVkCi0KLSAgICAgICAgaWYgcnYgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICBydiA9IChzdHIodHlwZShzZWxmLm9iaikpLCBpZChzZWxmLm9iaikpIDwgXAotICAgICAgICAgICAgICAgICAoc3RyKHR5cGUob3RoZXIub2JqKSksIGlkKG90aGVyLm9iaikpCi0gICAgICAgIHJldHVybiBydgorICAgICAgICAgICAgcmV0dXJuICgoc3RyKHR5cGUoc2VsZi5vYmopKSwgaWQoc2VsZi5vYmopKSA8IFwKKyAgICAgICAgICAgICAgICAgICAgKHN0cih0eXBlKG90aGVyLm9iaikpLCBpZChvdGhlci5vYmopKSkKIAogZGVmIF9zYWZlX3R1cGxlKHQpOgogICAgICJIZWxwZXIgZnVuY3Rpb24gZm9yIGNvbXBhcmluZyAyLXR1cGxlcyIKQEAgLTEyMyw5ICsxMjAsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGluZGVudCA9IGludChpbmRlbnQpCiAgICAgICAgIHdpZHRoID0gaW50KHdpZHRoKQotICAgICAgICBhc3NlcnQgaW5kZW50ID49IDAsICJpbmRlbnQgbXVzdCBiZSA+PSAwIgotICAgICAgICBhc3NlcnQgZGVwdGggaXMgTm9uZSBvciBkZXB0aCA+IDAsICJkZXB0aCBtdXN0IGJlID4gMCIKLSAgICAgICAgYXNzZXJ0IHdpZHRoLCAid2lkdGggbXVzdCBiZSAhPSAwIgorICAgICAgICBpZiBpbmRlbnQgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW5kZW50IG11c3QgYmUgPj0gMCcpCisgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lIGFuZCBkZXB0aCA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZGVwdGggbXVzdCBiZSA+IDAnKQorICAgICAgICBpZiBub3Qgd2lkdGg6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd3aWR0aCBtdXN0IGJlICE9IDAnKQogICAgICAgICBzZWxmLl9kZXB0aCA9IGRlcHRoCiAgICAgICAgIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgPSBpbmRlbnQKICAgICAgICAgc2VsZi5fd2lkdGggPSB3aWR0aApAQCAtMTUyLDEzMyArMTUyLDIyMyBAQAogICAgICAgICByZXR1cm4gcmVhZGFibGUgYW5kIG5vdCByZWN1cnNpdmUKIAogICAgIGRlZiBfZm9ybWF0KHNlbGYsIG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgotICAgICAgICBsZXZlbCA9IGxldmVsICsgMQogICAgICAgICBvYmppZCA9IGlkKG9iamVjdCkKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShfcmVjdXJzaW9uKG9iamVjdCkpCiAgICAgICAgICAgICBzZWxmLl9yZWN1cnNpdmUgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9yZWFkYWJsZSA9IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcmVwID0gc2VsZi5fcmVwcihvYmplY3QsIGNvbnRleHQsIGxldmVsIC0gMSkKLSAgICAgICAgdHlwID0gdHlwZShvYmplY3QpCi0gICAgICAgIG1heF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gMSAtIGluZGVudCAtIGFsbG93YW5jZQotICAgICAgICBzZXBMaW5lcyA9IGxlbihyZXApID4gbWF4X3dpZHRoCisgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIob2JqZWN0LCBjb250ZXh0LCBsZXZlbCkKKyAgICAgICAgbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSBpbmRlbnQgLSBhbGxvd2FuY2UKKyAgICAgICAgaWYgbGVuKHJlcCkgPiBtYXhfd2lkdGg6CisgICAgICAgICAgICBwID0gc2VsZi5fZGlzcGF0Y2guZ2V0KHR5cGUob2JqZWN0KS5fX3JlcHJfXywgTm9uZSkKKyAgICAgICAgICAgIGlmIHAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCisgICAgICAgICAgICAgICAgcChzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsICsgMSkKKyAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmplY3QsIGRpY3QpOgorICAgICAgICAgICAgICAgIGNvbnRleHRbb2JqaWRdID0gMQorICAgICAgICAgICAgICAgIHNlbGYuX3BwcmludF9kaWN0KG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBsZXZlbCArIDEpCisgICAgICAgICAgICAgICAgZGVsIGNvbnRleHRbb2JqaWRdCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHN0cmVhbS53cml0ZShyZXApCisKKyAgICBfZGlzcGF0Y2ggPSB7fQorCisgICAgZGVmIF9wcHJpbnRfZGljdChzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKICAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKKyAgICAgICAgd3JpdGUoJ3snKQorICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKKyAgICAgICAgICAgIHdyaXRlKChzZWxmLl9pbmRlbnRfcGVyX2xldmVsIC0gMSkgKiAnICcpCisgICAgICAgIGxlbmd0aCA9IGxlbihvYmplY3QpCisgICAgICAgIGlmIGxlbmd0aDoKKyAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKG9iamVjdC5pdGVtcygpLCBrZXk9X3NhZmVfdHVwbGUpCisgICAgICAgICAgICBzZWxmLl9mb3JtYXRfZGljdF9pdGVtcyhpdGVtcywgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBsZXZlbCkKKyAgICAgICAgd3JpdGUoJ30nKQogCi0gICAgICAgIGlmIHNlcExpbmVzOgotICAgICAgICAgICAgciA9IGdldGF0dHIodHlwLCAiX19yZXByX18iLCBOb25lKQotICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpOgotICAgICAgICAgICAgICAgIHdyaXRlKCd7JykKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQotICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIF9PcmRlcmVkRGljdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGxpc3Qob2JqZWN0Lml0ZW1zKCkpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChvYmplY3QuaXRlbXMoKSwga2V5PV9zYWZlX3R1cGxlKQotICAgICAgICAgICAgICAgICAgICBrZXksIGVudCA9IGl0ZW1zWzBdCi0gICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQotICAgICAgICAgICAgICAgICAgICB3cml0ZSgnOiAnKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIGxlbihyZXApICsgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXksIGVudCBpbiBpdGVtc1sxOl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihrZXksIGNvbnRleHQsIGxldmVsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCcsXG4lcyVzOiAnICUgKCcgJyppbmRlbnQsIHJlcCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAotICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KLSAgICAgICAgICAgICAgICB3cml0ZSgnfScpCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgX2Rpc3BhdGNoW2RpY3QuX19yZXByX19dID0gX3BwcmludF9kaWN0CiAKLSAgICAgICAgICAgIGlmICgoaXNzdWJjbGFzcyh0eXAsIGxpc3QpIGFuZCByIGlzIGxpc3QuX19yZXByX18pIG9yCi0gICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIHIgaXMgdHVwbGUuX19yZXByX18pIG9yCi0gICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBzZXQpIGFuZCByIGlzIHNldC5fX3JlcHJfXykgb3IKLSAgICAgICAgICAgICAgICAoaXNzdWJjbGFzcyh0eXAsIGZyb3plbnNldCkgYW5kIHIgaXMgZnJvemVuc2V0Ll9fcmVwcl9fKQotICAgICAgICAgICAgICAgKToKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQotICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBsaXN0KToKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ1snKQotICAgICAgICAgICAgICAgICAgICBlbmRjaGFyID0gJ10nCi0gICAgICAgICAgICAgICAgZWxpZiBpc3N1YmNsYXNzKHR5cCwgdHVwbGUpOgotICAgICAgICAgICAgICAgICAgICB3cml0ZSgnKCcpCi0gICAgICAgICAgICAgICAgICAgIGVuZGNoYXIgPSAnKScKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGVuZ3RoOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgIGlmIHR5cCBpcyBzZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgneycpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmRjaGFyID0gJ30nCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSh0eXAuX19uYW1lX18pCi0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnKHsnKQotICAgICAgICAgICAgICAgICAgICAgICAgZW5kY2hhciA9ICd9KScKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudCArPSBsZW4odHlwLl9fbmFtZV9fKSArIDEKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gc29ydGVkKG9iamVjdCwga2V5PV9zYWZlX2tleSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKLSAgICAgICAgICAgICAgICBpZiBsZW5ndGg6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRbb2JqaWRdID0gMQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXRfaXRlbXMob2JqZWN0LCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQotICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIGxlbmd0aCA9PSAxOgotICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLCcpCi0gICAgICAgICAgICAgICAgd3JpdGUoZW5kY2hhcikKLSAgICAgICAgICAgICAgICByZXR1cm4KKyAgICBkZWYgX3BwcmludF9vcmRlcmVkX2RpY3Qoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CisgICAgICAgIGlmIG5vdCBsZW4ob2JqZWN0KToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShyZXByKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgY2xzID0gb2JqZWN0Ll9fY2xhc3NfXworICAgICAgICBzdHJlYW0ud3JpdGUoY2xzLl9fbmFtZV9fICsgJygnKQorICAgICAgICBzZWxmLl9mb3JtYXQobGlzdChvYmplY3QuaXRlbXMoKSksIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgIGluZGVudCArIGxlbihjbHMuX19uYW1lX18pICsgMSwgYWxsb3dhbmNlICsgMSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIGxldmVsKQorICAgICAgICBzdHJlYW0ud3JpdGUoJyknKQogCi0gICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgc3RyKSBhbmQgbGVuKG9iamVjdCkgPiAwIGFuZCByIGlzIHN0ci5fX3JlcHJfXzoKLSAgICAgICAgICAgICAgICBjaHVua3MgPSBbXQotICAgICAgICAgICAgICAgIGxpbmVzID0gb2JqZWN0LnNwbGl0bGluZXMoVHJ1ZSkKLSAgICAgICAgICAgICAgICBpZiBsZXZlbCA9PSAxOgotICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gMQotICAgICAgICAgICAgICAgICAgICBtYXhfd2lkdGggLT0gMgotICAgICAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcyk6Ci0gICAgICAgICAgICAgICAgICAgIHJlcCA9IHJlcHIobGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHJlcCkgPD0gbWF4X3dpZHRoOgotICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChyZXApCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIEEgbGlzdCBvZiBhbHRlcm5hdGluZyAobm9uLXNwYWNlLCBzcGFjZSkgc3RyaW5ncwotICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgPSByZS5zcGxpdChyJyhccyspJywgbGluZSkgKyBbJyddCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gJycKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihwYXJ0cyksIDIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0c1tpXSArIHBhcnRzW2krMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjdXJyZW50ICsgcGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXByKGNhbmRpZGF0ZSkpID4gbWF4X3dpZHRoOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChyZXByKGN1cnJlbnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGUKKyAgICBfZGlzcGF0Y2hbX2NvbGxlY3Rpb25zLk9yZGVyZWREaWN0Ll9fcmVwcl9fXSA9IF9wcHJpbnRfb3JkZXJlZF9kaWN0CisKKyAgICBkZWYgX3BwcmludF9saXN0KHNlbGYsIG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICBzdHJlYW0ud3JpdGUoJ1snKQorICAgICAgICBzZWxmLl9mb3JtYXRfaXRlbXMob2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIGxldmVsKQorICAgICAgICBzdHJlYW0ud3JpdGUoJ10nKQorCisgICAgX2Rpc3BhdGNoW2xpc3QuX19yZXByX19dID0gX3BwcmludF9saXN0CisKKyAgICBkZWYgX3BwcmludF90dXBsZShzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKKyAgICAgICAgc3RyZWFtLndyaXRlKCcoJykKKyAgICAgICAgZW5kY2hhciA9ICcsKScgaWYgbGVuKG9iamVjdCkgPT0gMSBlbHNlICcpJworICAgICAgICBzZWxmLl9mb3JtYXRfaXRlbXMob2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlICsgbGVuKGVuZGNoYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCisgICAgICAgIHN0cmVhbS53cml0ZShlbmRjaGFyKQorCisgICAgX2Rpc3BhdGNoW3R1cGxlLl9fcmVwcl9fXSA9IF9wcHJpbnRfdHVwbGUKKworICAgIGRlZiBfcHByaW50X3NldChzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKKyAgICAgICAgaWYgbm90IGxlbihvYmplY3QpOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKHJlcHIob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0eXAgPSBvYmplY3QuX19jbGFzc19fCisgICAgICAgIGlmIHR5cCBpcyBzZXQ6CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUoJ3snKQorICAgICAgICAgICAgZW5kY2hhciA9ICd9JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKHR5cC5fX25hbWVfXyArICcoeycpCisgICAgICAgICAgICBlbmRjaGFyID0gJ30pJworICAgICAgICAgICAgaW5kZW50ICs9IGxlbih0eXAuX19uYW1lX18pICsgMQorICAgICAgICBvYmplY3QgPSBzb3J0ZWQob2JqZWN0LCBrZXk9X3NhZmVfa2V5KQorICAgICAgICBzZWxmLl9mb3JtYXRfaXRlbXMob2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlICsgbGVuKGVuZGNoYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCisgICAgICAgIHN0cmVhbS53cml0ZShlbmRjaGFyKQorCisgICAgX2Rpc3BhdGNoW3NldC5fX3JlcHJfX10gPSBfcHByaW50X3NldAorICAgIF9kaXNwYXRjaFtmcm96ZW5zZXQuX19yZXByX19dID0gX3BwcmludF9zZXQKKworICAgIGRlZiBfcHByaW50X3N0cihzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKKyAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKKyAgICAgICAgaWYgbm90IGxlbihvYmplY3QpOgorICAgICAgICAgICAgd3JpdGUocmVwcihvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgIGxpbmVzID0gb2JqZWN0LnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgaWYgbGV2ZWwgPT0gMToKKyAgICAgICAgICAgIGluZGVudCArPSAxCisgICAgICAgICAgICBhbGxvd2FuY2UgKz0gMQorICAgICAgICBtYXhfd2lkdGgxID0gbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSBpbmRlbnQKKyAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgIHJlcCA9IHJlcHIobGluZSkKKyAgICAgICAgICAgIGlmIGkgPT0gbGVuKGxpbmVzKSAtIDE6CisgICAgICAgICAgICAgICAgbWF4X3dpZHRoMSAtPSBhbGxvd2FuY2UKKyAgICAgICAgICAgIGlmIGxlbihyZXApIDw9IG1heF93aWR0aDE6CisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChyZXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQSBsaXN0IG9mIGFsdGVybmF0aW5nIChub24tc3BhY2UsIHNwYWNlKSBzdHJpbmdzCisgICAgICAgICAgICAgICAgcGFydHMgPSByZS5maW5kYWxsKHInXFMqXHMqJywgbGluZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgcGFydHMKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHBhcnRzWy0xXQorICAgICAgICAgICAgICAgIHBhcnRzLnBvcCgpICAjIGRyb3AgZW1wdHkgbGFzdCBwYXJ0CisgICAgICAgICAgICAgICAgbWF4X3dpZHRoMiA9IG1heF93aWR0aAorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAnJworICAgICAgICAgICAgICAgIGZvciBqLCBwYXJ0IGluIGVudW1lcmF0ZShwYXJ0cyk6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGN1cnJlbnQgKyBwYXJ0CisgICAgICAgICAgICAgICAgICAgIGlmIGogPT0gbGVuKHBhcnRzKSAtIDEgYW5kIGkgPT0gbGVuKGxpbmVzKSAtIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfd2lkdGgyIC09IGFsbG93YW5jZQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVwcihjYW5kaWRhdGUpKSA+IG1heF93aWR0aDI6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQocmVwcihjdXJyZW50KSkKLSAgICAgICAgICAgICAgICBpZiBsZW4oY2h1bmtzKSA9PSAxOgotICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGlmIGxldmVsID09IDE6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKCcoJykKLSAgICAgICAgICAgICAgICBmb3IgaSwgcmVwIGluIGVudW1lcmF0ZShjaHVua3MpOgotICAgICAgICAgICAgICAgICAgICBpZiBpID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdcbicgKyAnICcqaW5kZW50KQotICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCi0gICAgICAgICAgICAgICAgaWYgbGV2ZWwgPT0gMToKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyknKQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICB3cml0ZShyZXApCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcGFydAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZQorICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQocmVwcihjdXJyZW50KSkKKyAgICAgICAgaWYgbGVuKGNodW5rcykgPT0gMToKKyAgICAgICAgICAgIHdyaXRlKHJlcCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBsZXZlbCA9PSAxOgorICAgICAgICAgICAgd3JpdGUoJygnKQorICAgICAgICBmb3IgaSwgcmVwIGluIGVudW1lcmF0ZShjaHVua3MpOgorICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgd3JpdGUoJ1xuJyArICcgJyppbmRlbnQpCisgICAgICAgICAgICB3cml0ZShyZXApCisgICAgICAgIGlmIGxldmVsID09IDE6CisgICAgICAgICAgICB3cml0ZSgnKScpCisKKyAgICBfZGlzcGF0Y2hbc3RyLl9fcmVwcl9fXSA9IF9wcHJpbnRfc3RyCisKKyAgICBkZWYgX3BwcmludF9ieXRlcyhzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKKyAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKKyAgICAgICAgaWYgbGVuKG9iamVjdCkgPD0gNDoKKyAgICAgICAgICAgIHdyaXRlKHJlcHIob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXJlbnMgPSBsZXZlbCA9PSAxCisgICAgICAgIGlmIHBhcmVuczoKKyAgICAgICAgICAgIGluZGVudCArPSAxCisgICAgICAgICAgICBhbGxvd2FuY2UgKz0gMQorICAgICAgICAgICAgd3JpdGUoJygnKQorICAgICAgICBkZWxpbSA9ICcnCisgICAgICAgIGZvciByZXAgaW4gX3dyYXBfYnl0ZXNfcmVwcihvYmplY3QsIHNlbGYuX3dpZHRoIC0gaW5kZW50LCBhbGxvd2FuY2UpOgorICAgICAgICAgICAgd3JpdGUoZGVsaW0pCisgICAgICAgICAgICB3cml0ZShyZXApCisgICAgICAgICAgICBpZiBub3QgZGVsaW06CisgICAgICAgICAgICAgICAgZGVsaW0gPSAnXG4nICsgJyAnKmluZGVudAorICAgICAgICBpZiBwYXJlbnM6CisgICAgICAgICAgICB3cml0ZSgnKScpCisKKyAgICBfZGlzcGF0Y2hbYnl0ZXMuX19yZXByX19dID0gX3BwcmludF9ieXRlcworCisgICAgZGVmIF9wcHJpbnRfYnl0ZWFycmF5KHNlbGYsIG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQorICAgICAgICB3cml0ZSgnYnl0ZWFycmF5KCcpCisgICAgICAgIHNlbGYuX3BwcmludF9ieXRlcyhieXRlcyhvYmplY3QpLCBzdHJlYW0sIGluZGVudCArIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwgKyAxKQorICAgICAgICB3cml0ZSgnKScpCisKKyAgICBfZGlzcGF0Y2hbYnl0ZWFycmF5Ll9fcmVwcl9fXSA9IF9wcHJpbnRfYnl0ZWFycmF5CisKKyAgICBkZWYgX3BwcmludF9tYXBwaW5ncHJveHkoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CisgICAgICAgIHN0cmVhbS53cml0ZSgnbWFwcGluZ3Byb3h5KCcpCisgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3QuY29weSgpLCBzdHJlYW0sIGluZGVudCArIDEzLCBhbGxvd2FuY2UgKyAxLAorICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCisgICAgICAgIHN0cmVhbS53cml0ZSgnKScpCisKKyAgICBfZGlzcGF0Y2hbX3R5cGVzLk1hcHBpbmdQcm94eVR5cGUuX19yZXByX19dID0gX3BwcmludF9tYXBwaW5ncHJveHkKKworICAgIGRlZiBfZm9ybWF0X2RpY3RfaXRlbXMoc2VsZiwgaXRlbXMsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCk6CisgICAgICAgIHdyaXRlID0gc3RyZWFtLndyaXRlCisgICAgICAgIGluZGVudCArPSBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCisgICAgICAgIGRlbGltbmwgPSAnLFxuJyArICcgJyAqIGluZGVudAorICAgICAgICBsYXN0X2luZGV4ID0gbGVuKGl0ZW1zKSAtIDEKKyAgICAgICAgZm9yIGksIChrZXksIGVudCkgaW4gZW51bWVyYXRlKGl0ZW1zKToKKyAgICAgICAgICAgIGxhc3QgPSBpID09IGxhc3RfaW5kZXgKKyAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKKyAgICAgICAgICAgIHdyaXRlKHJlcCkKKyAgICAgICAgICAgIHdyaXRlKCc6ICcpCisgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIGxlbihyZXApICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgaWYgbGFzdCBlbHNlIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCisgICAgICAgICAgICBpZiBub3QgbGFzdDoKKyAgICAgICAgICAgICAgICB3cml0ZShkZWxpbW5sKQogCiAgICAgZGVmIF9mb3JtYXRfaXRlbXMoc2VsZiwgaXRlbXMsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKICAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKKyAgICAgICAgaW5kZW50ICs9IHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKKyAgICAgICAgaWYgc2VsZi5faW5kZW50X3Blcl9sZXZlbCA+IDE6CisgICAgICAgICAgICB3cml0ZSgoc2VsZi5faW5kZW50X3Blcl9sZXZlbCAtIDEpICogJyAnKQogICAgICAgICBkZWxpbW5sID0gJyxcbicgKyAnICcgKiBpbmRlbnQKICAgICAgICAgZGVsaW0gPSAnJwotICAgICAgICB3aWR0aCA9IG1heF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaW5kZW50IC0gYWxsb3dhbmNlICsgMgotICAgICAgICBmb3IgZW50IGluIGl0ZW1zOgorICAgICAgICB3aWR0aCA9IG1heF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaW5kZW50ICsgMQorICAgICAgICBpdCA9IGl0ZXIoaXRlbXMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHRfZW50ID0gbmV4dChpdCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGFzdCA9IEZhbHNlCisgICAgICAgIHdoaWxlIG5vdCBsYXN0OgorICAgICAgICAgICAgZW50ID0gbmV4dF9lbnQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuZXh0X2VudCA9IG5leHQoaXQpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBsYXN0ID0gVHJ1ZQorICAgICAgICAgICAgICAgIG1heF93aWR0aCAtPSBhbGxvd2FuY2UKKyAgICAgICAgICAgICAgICB3aWR0aCAtPSBhbGxvd2FuY2UKICAgICAgICAgICAgIGlmIHNlbGYuX2NvbXBhY3Q6CiAgICAgICAgICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihlbnQsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgIHcgPSBsZW4ocmVwKSArIDIKQEAgLTI5NCw3ICszODQsOSBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgd3JpdGUoZGVsaW0pCiAgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKLSAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKQorICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlIGlmIGxhc3QgZWxzZSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIGxldmVsKQogCiAgICAgZGVmIF9yZXByKHNlbGYsIG9iamVjdCwgY29udGV4dCwgbGV2ZWwpOgogICAgICAgICByZXByLCByZWFkYWJsZSwgcmVjdXJzaXZlID0gc2VsZi5mb3JtYXQob2JqZWN0LCBjb250ZXh0LmNvcHkoKSwKQEAgLTMxMiwyOSArNDA0LDkzIEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gX3NhZmVfcmVwcihvYmplY3QsIGNvbnRleHQsIG1heGxldmVscywgbGV2ZWwpCiAKKyAgICBkZWYgX3BwcmludF9kZWZhdWx0X2RpY3Qoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CisgICAgICAgIGlmIG5vdCBsZW4ob2JqZWN0KToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShyZXByKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmRmID0gc2VsZi5fcmVwcihvYmplY3QuZGVmYXVsdF9mYWN0b3J5LCBjb250ZXh0LCBsZXZlbCkKKyAgICAgICAgY2xzID0gb2JqZWN0Ll9fY2xhc3NfXworICAgICAgICBpbmRlbnQgKz0gbGVuKGNscy5fX25hbWVfXykgKyAxCisgICAgICAgIHN0cmVhbS53cml0ZSgnJXMoJXMsXG4lcycgJSAoY2xzLl9fbmFtZV9fLCByZGYsICcgJyAqIGluZGVudCkpCisgICAgICAgIHNlbGYuX3BwcmludF9kaWN0KG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQorICAgICAgICBzdHJlYW0ud3JpdGUoJyknKQorCisgICAgX2Rpc3BhdGNoW19jb2xsZWN0aW9ucy5kZWZhdWx0ZGljdC5fX3JlcHJfX10gPSBfcHByaW50X2RlZmF1bHRfZGljdAorCisgICAgZGVmIF9wcHJpbnRfY291bnRlcihzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKKyAgICAgICAgaWYgbm90IGxlbihvYmplY3QpOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKHJlcHIob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjbHMgPSBvYmplY3QuX19jbGFzc19fCisgICAgICAgIHN0cmVhbS53cml0ZShjbHMuX19uYW1lX18gKyAnKHsnKQorICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSgoc2VsZi5faW5kZW50X3Blcl9sZXZlbCAtIDEpICogJyAnKQorICAgICAgICBpdGVtcyA9IG9iamVjdC5tb3N0X2NvbW1vbigpCisgICAgICAgIHNlbGYuX2Zvcm1hdF9kaWN0X2l0ZW1zKGl0ZW1zLCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudCArIGxlbihjbHMuX19uYW1lX18pICsgMSwgYWxsb3dhbmNlICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCisgICAgICAgIHN0cmVhbS53cml0ZSgnfSknKQorCisgICAgX2Rpc3BhdGNoW19jb2xsZWN0aW9ucy5Db3VudGVyLl9fcmVwcl9fXSA9IF9wcHJpbnRfY291bnRlcgorCisgICAgZGVmIF9wcHJpbnRfY2hhaW5fbWFwKHNlbGYsIG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICBpZiBub3QgbGVuKG9iamVjdC5tYXBzKToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShyZXByKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgY2xzID0gb2JqZWN0Ll9fY2xhc3NfXworICAgICAgICBzdHJlYW0ud3JpdGUoY2xzLl9fbmFtZV9fICsgJygnKQorICAgICAgICBpbmRlbnQgKz0gbGVuKGNscy5fX25hbWVfXykgKyAxCisgICAgICAgIGZvciBpLCBtIGluIGVudW1lcmF0ZShvYmplY3QubWFwcyk6CisgICAgICAgICAgICBpZiBpID09IGxlbihvYmplY3QubWFwcykgLSAxOgorICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChtLCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCisgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKCcpJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KG0sIHN0cmVhbSwgaW5kZW50LCAxLCBjb250ZXh0LCBsZXZlbCkKKyAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoJyxcbicgKyAnICcgKiBpbmRlbnQpCisKKyAgICBfZGlzcGF0Y2hbX2NvbGxlY3Rpb25zLkNoYWluTWFwLl9fcmVwcl9fXSA9IF9wcHJpbnRfY2hhaW5fbWFwCisKKyAgICBkZWYgX3BwcmludF9kZXF1ZShzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKKyAgICAgICAgaWYgbm90IGxlbihvYmplY3QpOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKHJlcHIob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjbHMgPSBvYmplY3QuX19jbGFzc19fCisgICAgICAgIHN0cmVhbS53cml0ZShjbHMuX19uYW1lX18gKyAnKCcpCisgICAgICAgIGluZGVudCArPSBsZW4oY2xzLl9fbmFtZV9fKSArIDEKKyAgICAgICAgc3RyZWFtLndyaXRlKCdbJykKKyAgICAgICAgaWYgb2JqZWN0Lm1heGxlbiBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZm9ybWF0X2l0ZW1zKG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCisgICAgICAgICAgICBzdHJlYW0ud3JpdGUoJ10pJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1hdF9pdGVtcyhvYmplY3QsIHN0cmVhbSwgaW5kZW50LCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIGxldmVsKQorICAgICAgICAgICAgcm1sID0gc2VsZi5fcmVwcihvYmplY3QubWF4bGVuLCBjb250ZXh0LCBsZXZlbCkKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSgnXSxcbiVzbWF4bGVuPSVzKScgJSAoJyAnICogaW5kZW50LCBybWwpKQorCisgICAgX2Rpc3BhdGNoW19jb2xsZWN0aW9ucy5kZXF1ZS5fX3JlcHJfX10gPSBfcHByaW50X2RlcXVlCisKKyAgICBkZWYgX3BwcmludF91c2VyX2RpY3Qoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CisgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3QuZGF0YSwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwgLSAxKQorCisgICAgX2Rpc3BhdGNoW19jb2xsZWN0aW9ucy5Vc2VyRGljdC5fX3JlcHJfX10gPSBfcHByaW50X3VzZXJfZGljdAorCisgICAgZGVmIF9wcHJpbnRfdXNlcl9saXN0KHNlbGYsIG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICBzZWxmLl9mb3JtYXQob2JqZWN0LmRhdGEsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsIC0gMSkKKworICAgIF9kaXNwYXRjaFtfY29sbGVjdGlvbnMuVXNlckxpc3QuX19yZXByX19dID0gX3BwcmludF91c2VyX2xpc3QKKworICAgIGRlZiBfcHByaW50X3VzZXJfc3RyaW5nKHNlbGYsIG9iamVjdCwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICBzZWxmLl9mb3JtYXQob2JqZWN0LmRhdGEsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsIC0gMSkKKworICAgIF9kaXNwYXRjaFtfY29sbGVjdGlvbnMuVXNlclN0cmluZy5fX3JlcHJfX10gPSBfcHByaW50X3VzZXJfc3RyaW5nCiAKICMgUmV0dXJuIHRyaXBsZSAocmVwcl9zdHJpbmcsIGlzcmVhZGFibGUsIGlzcmVjdXJzaXZlKS4KIAogZGVmIF9zYWZlX3JlcHIob2JqZWN0LCBjb250ZXh0LCBtYXhsZXZlbHMsIGxldmVsKToKICAgICB0eXAgPSB0eXBlKG9iamVjdCkKLSAgICBpZiB0eXAgaXMgc3RyOgotICAgICAgICBpZiAnbG9jYWxlJyBub3QgaW4gX3N5cy5tb2R1bGVzOgotICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqZWN0KSwgVHJ1ZSwgRmFsc2UKLSAgICAgICAgaWYgIiciIGluIG9iamVjdCBhbmQgJyInIG5vdCBpbiBvYmplY3Q6Ci0gICAgICAgICAgICBjbG9zdXJlID0gJyInCi0gICAgICAgICAgICBxdW90ZXMgPSB7JyInOiAnXFwiJ30KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNsb3N1cmUgPSAiJyIKLSAgICAgICAgICAgIHF1b3RlcyA9IHsiJyI6ICJcXCcifQotICAgICAgICBxZ2V0ID0gcXVvdGVzLmdldAotICAgICAgICBzaW8gPSBfU3RyaW5nSU8oKQotICAgICAgICB3cml0ZSA9IHNpby53cml0ZQotICAgICAgICBmb3IgY2hhciBpbiBvYmplY3Q6Ci0gICAgICAgICAgICBpZiBjaGFyLmlzYWxwaGEoKToKLSAgICAgICAgICAgICAgICB3cml0ZShjaGFyKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB3cml0ZShxZ2V0KGNoYXIsIHJlcHIoY2hhcilbMTotMV0pKQotICAgICAgICByZXR1cm4gKCIlcyVzJXMiICUgKGNsb3N1cmUsIHNpby5nZXR2YWx1ZSgpLCBjbG9zdXJlKSksIFRydWUsIEZhbHNlCisgICAgaWYgdHlwIGluIF9idWlsdGluX3NjYWxhcnM6CisgICAgICAgIHJldHVybiByZXByKG9iamVjdCksIFRydWUsIEZhbHNlCiAKICAgICByID0gZ2V0YXR0cih0eXAsICJfX3JlcHJfXyIsIE5vbmUpCiAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpIGFuZCByIGlzIGRpY3QuX19yZXByX186CkBAIC0zOTksNiArNTU1LDggQEAKICAgICByZXAgPSByZXByKG9iamVjdCkKICAgICByZXR1cm4gcmVwLCAocmVwIGFuZCBub3QgcmVwLnN0YXJ0c3dpdGgoJzwnKSksIEZhbHNlCiAKK19idWlsdGluX3NjYWxhcnMgPSBmcm96ZW5zZXQoe3N0ciwgYnl0ZXMsIGJ5dGVhcnJheSwgaW50LCBmbG9hdCwgY29tcGxleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wsIHR5cGUoTm9uZSl9KQogCiBkZWYgX3JlY3Vyc2lvbihvYmplY3QpOgogICAgIHJldHVybiAoIjxSZWN1cnNpb24gb24gJXMgd2l0aCBpZD0lcz4iCkBAIC00MTgsNSArNTc2LDIyIEBACiAgICAgcHJpbnQoIl9zYWZlX3JlcHI6IiwgdDIgLSB0MSkKICAgICBwcmludCgicGZvcm1hdDoiLCB0MyAtIHQyKQogCitkZWYgX3dyYXBfYnl0ZXNfcmVwcihvYmplY3QsIHdpZHRoLCBhbGxvd2FuY2UpOgorICAgIGN1cnJlbnQgPSBiJycKKyAgICBsYXN0ID0gbGVuKG9iamVjdCkgLy8gNCAqIDQKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ob2JqZWN0KSwgNCk6CisgICAgICAgIHBhcnQgPSBvYmplY3RbaTogaSs0XQorICAgICAgICBjYW5kaWRhdGUgPSBjdXJyZW50ICsgcGFydAorICAgICAgICBpZiBpID09IGxhc3Q6CisgICAgICAgICAgICB3aWR0aCAtPSBhbGxvd2FuY2UKKyAgICAgICAgaWYgbGVuKHJlcHIoY2FuZGlkYXRlKSkgPiB3aWR0aDoKKyAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgeWllbGQgcmVwcihjdXJyZW50KQorICAgICAgICAgICAgY3VycmVudCA9IHBhcnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGUKKyAgICBpZiBjdXJyZW50OgorICAgICAgICB5aWVsZCByZXByKGN1cnJlbnQpCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgX3BlcmZjaGVjaygpCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCBlMWVjMzU1Li5kODYxNDEzIDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTU3NCw3ICs1NzQsMTAgQEAKIAogICAgICAgICBkZWYgZG9fYWRkKHNlbGYsIGxpbmUpOgogICAgICAgICAgICAgaWYgc2VsZi5zdGF0czoKLSAgICAgICAgICAgICAgICBzZWxmLnN0YXRzLmFkZChsaW5lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0cy5hZGQobGluZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiRmFpbGVkIHRvIGxvYWQgc3RhdGlzdGljcyBmb3IgJXM6ICVzIiAlIChsaW5lLCBlKSwgZmlsZT1zZWxmLnN0cmVhbSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoIk5vIHN0YXRpc3RpY3Mgb2JqZWN0IGlzIGxvYWRlZC4iLCBmaWxlPXNlbGYuc3RyZWFtKQogICAgICAgICAgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL0xpYi9weV9jb21waWxlLnB5IGIvTGliL3B5X2NvbXBpbGUucHkKaW5kZXggZjY1ZWVhZi4uMTFjNWI1MCAxMDA2NDQKLS0tIGEvTGliL3B5X2NvbXBpbGUucHkKKysrIGIvTGliL3B5X2NvbXBpbGUucHkKQEAgLTEsOSArMSw5IEBACi0iIiJSb3V0aW5lIHRvICJjb21waWxlIiBhIC5weSBmaWxlIHRvIGEgLnB5YyAob3IgLnB5bykgZmlsZS4KKyIiIlJvdXRpbmUgdG8gImNvbXBpbGUiIGEgLnB5IGZpbGUgdG8gYSAucHljIGZpbGUuCiAKIFRoaXMgbW9kdWxlIGhhcyBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgdGhlIGZvcm1hdCBvZiAucHljIGZpbGVzLgogIiIiCiAKLWltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAoraW1wb3J0IGltcG9ydGxpYi5fYm9vdHN0cmFwX2V4dGVybmFsCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKQEAgLTY3LDcgKzY3LDcgQEAKIAogICAgIDpwYXJhbSBmaWxlOiBUaGUgc291cmNlIGZpbGUgbmFtZS4KICAgICA6cGFyYW0gY2ZpbGU6IFRoZSB0YXJnZXQgYnl0ZSBjb21waWxlZCBmaWxlIG5hbWUuICBXaGVuIG5vdCBnaXZlbiwgdGhpcwotICAgICAgICBkZWZhdWx0cyB0byB0aGUgUEVQIDMxNDcgbG9jYXRpb24uCisgICAgICAgIGRlZmF1bHRzIHRvIHRoZSBQRVAgMzE0Ny9QRVAgNDg4IGxvY2F0aW9uLgogICAgIDpwYXJhbSBkZmlsZTogUHVycG9ydGVkIGZpbGUgbmFtZSwgaS5lLiB0aGUgZmlsZSBuYW1lIHRoYXQgc2hvd3MgdXAgaW4KICAgICAgICAgZXJyb3IgbWVzc2FnZXMuICBEZWZhdWx0cyB0byB0aGUgc291cmNlIGZpbGUgbmFtZS4KICAgICA6cGFyYW0gZG9yYWlzZTogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IGFuIGV4Y2VwdGlvbiBzaG91bGQgYmUKQEAgLTg1LDEyICs4NSwxMiBAQAogICAgIE5vdGUgdGhhdCBpdCBpc24ndCBuZWNlc3NhcnkgdG8gYnl0ZS1jb21waWxlIFB5dGhvbiBtb2R1bGVzIGZvcgogICAgIGV4ZWN1dGlvbiBlZmZpY2llbmN5IC0tIFB5dGhvbiBpdHNlbGYgYnl0ZS1jb21waWxlcyBhIG1vZHVsZSB3aGVuCiAgICAgaXQgaXMgbG9hZGVkLCBhbmQgaWYgaXQgY2FuLCB3cml0ZXMgb3V0IHRoZSBieXRlY29kZSB0byB0aGUKLSAgICBjb3JyZXNwb25kaW5nIC5weWMgKG9yIC5weW8pIGZpbGUuCisgICAgY29ycmVzcG9uZGluZyAucHljIGZpbGUuCiAKICAgICBIb3dldmVyLCBpZiBhIFB5dGhvbiBpbnN0YWxsYXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdXNlcnMsIGl0IGlzIGEKICAgICBnb29kIGlkZWEgdG8gYnl0ZS1jb21waWxlIGFsbCBtb2R1bGVzIHVwb24gaW5zdGFsbGF0aW9uLCBzaW5jZQogICAgIG90aGVyIHVzZXJzIG1heSBub3QgYmUgYWJsZSB0byB3cml0ZSBpbiB0aGUgc291cmNlIGRpcmVjdG9yaWVzLAotICAgIGFuZCB0aHVzIHRoZXkgd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0aGUgLnB5Yy8ucHlvIGZpbGUsIGFuZCB0aGVuCisgICAgYW5kIHRodXMgdGhleSB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRoZSAucHljIGZpbGUsIGFuZCB0aGVuCiAgICAgdGhleSB3b3VsZCBiZSBieXRlLWNvbXBpbGluZyBldmVyeSBtb2R1bGUgZWFjaCB0aW1lIGl0IGlzIGxvYWRlZC4KICAgICBUaGlzIGNhbiBzbG93IGRvd24gcHJvZ3JhbSBzdGFydC11cCBjb25zaWRlcmFibHkuCiAKQEAgLTEwNSw4ICsxMDUsOSBAQAogICAgICIiIgogICAgIGlmIGNmaWxlIGlzIE5vbmU6CiAgICAgICAgIGlmIG9wdGltaXplID49IDA6CisgICAgICAgICAgICBvcHRpbWl6YXRpb24gPSBvcHRpbWl6ZSBpZiBvcHRpbWl6ZSA+PSAxIGVsc2UgJycKICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb249b3B0aW1pemF0aW9uKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQogICAgIGlmIG9zLnBhdGguaXNsaW5rKGNmaWxlKToKQEAgLTEzNiwxMCArMTM3LDEwIEBACiAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHNvdXJjZV9zdGF0cyA9IGxvYWRlci5wYXRoX3N0YXRzKGZpbGUpCi0gICAgYnl0ZWNvZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fY29kZV90b19ieXRlY29kZSgKKyAgICBieXRlY29kZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwX2V4dGVybmFsLl9jb2RlX3RvX2J5dGVjb2RlKAogICAgICAgICAgICAgY29kZSwgc291cmNlX3N0YXRzWydtdGltZSddLCBzb3VyY2Vfc3RhdHNbJ3NpemUnXSkKLSAgICBtb2RlID0gaW1wb3J0bGliLl9ib290c3RyYXAuX2NhbGNfbW9kZShmaWxlKQotICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl93cml0ZV9hdG9taWMoY2ZpbGUsIGJ5dGVjb2RlLCBtb2RlKQorICAgIG1vZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbC5fY2FsY19tb2RlKGZpbGUpCisgICAgaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwuX3dyaXRlX2F0b21pYyhjZmlsZSwgYnl0ZWNvZGUsIG1vZGUpCiAgICAgcmV0dXJuIGNmaWxlCiAKIApkaWZmIC0tZ2l0IGEvTGliL3B5Y2xici5weSBiL0xpYi9weWNsYnIucHkKaW5kZXggZGQ1OGFkYS4uNGQ0MGI4NyAxMDA2NDQKLS0tIGEvTGliL3B5Y2xici5weQorKysgYi9MaWIvcHljbGJyLnB5CkBAIC0xNDIsMTAgKzE0MiwxMCBAQAogICAgICAgICBzZWFyY2hfcGF0aCA9IHBhdGggKyBzeXMucGF0aAogICAgICMgWFhYIFRoaXMgd2lsbCBjaGFuZ2Ugb25jZSBpc3N1ZTE5OTQ0IGxhbmRzLgogICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5fZmluZF9zcGVjX2Zyb21fcGF0aChmdWxsbW9kdWxlLCBzZWFyY2hfcGF0aCkKLSAgICBmbmFtZSA9IHNwZWMubG9hZGVyLmdldF9maWxlbmFtZShmdWxsbW9kdWxlKQogICAgIF9tb2R1bGVzW2Z1bGxtb2R1bGVdID0gZGljdAotICAgIGlmIHNwZWMubG9hZGVyLmlzX3BhY2thZ2UoZnVsbG1vZHVsZSk6Ci0gICAgICAgIGRpY3RbJ19fcGF0aF9fJ10gPSBbb3MucGF0aC5kaXJuYW1lKGZuYW1lKV0KKyAgICAjIGlzIG1vZHVsZSBhIHBhY2thZ2U/CisgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgZGljdFsnX19wYXRoX18nXSA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKICAgICB0cnk6CiAgICAgICAgIHNvdXJjZSA9IHNwZWMubG9hZGVyLmdldF9zb3VyY2UoZnVsbG1vZHVsZSkKICAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CkBAIC0xNTQsNiArMTU0LDggQEAKICAgICAgICAgIyBub3QgUHl0aG9uIHNvdXJjZSwgY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzIG1vZHVsZQogICAgICAgICByZXR1cm4gZGljdAogCisgICAgZm5hbWUgPSBzcGVjLmxvYWRlci5nZXRfZmlsZW5hbWUoZnVsbG1vZHVsZSkKKwogICAgIGYgPSBpby5TdHJpbmdJTyhzb3VyY2UpCiAKICAgICBzdGFjayA9IFtdICMgc3RhY2sgb2YgKGNsYXNzLCBpbmRlbnQpIHBhaXJzCmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggZjQyMjk5Zi4uMGQwZDBhYiAxMDA3NTUKLS0tIGEvTGliL3B5ZG9jLnB5CisrKyBiL0xpYi9weWRvYy5weQpAQCAtMjgsNyArMjgsNyBAQAogCiBNb2R1bGUgZG9jcyBmb3IgY29yZSBtb2R1bGVzIGFyZSBhc3N1bWVkIHRvIGJlIGluCiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnL1guWS9saWJyYXJ5LworICAgIGh0dHBzOi8vZG9jcy5weXRob24ub3JnL1guWS9saWJyYXJ5LwogCiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIFBZVEhPTkRPQ1MgZW52aXJvbm1lbnQgdmFyaWFibGUKIHRvIGEgZGlmZmVyZW50IFVSTCBvciB0byBhIGxvY2FsIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBMaWJyYXJ5CkBAIC01Myw2ICs1Myw3IEBACiAKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IGltcG9ydGxpYi5fYm9vdHN0cmFwCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBpbnNwZWN0CkBAIC0yMTMsNyArMjE0LDcgQEAKIGRlZiBpc3BhY2thZ2UocGF0aCk6CiAgICAgIiIiR3Vlc3Mgd2hldGhlciBhIHBhdGggcmVmZXJzIHRvIGEgcGFja2FnZSBkaXJlY3RvcnkuIiIiCiAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgZm9yIGV4dCBpbiAoJy5weScsICcucHljJywgJy5weW8nKToKKyAgICAgICAgZm9yIGV4dCBpbiAoJy5weScsICcucHljJyk6CiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fJyArIGV4dCkpOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgcmV0dXJuIEZhbHNlCkBAIC0yNjQsOSArMjY1LDggQEAKICAgICAgICAgICAgICMgWFhYIFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gcGFzcyBpbiB0aGUgbG9hZGVyIGhlcmUuCiAgICAgICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oJ19fdGVtcF9fJywgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKLSAgICAgICAgICAgIF9zcGVjID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gX3NwZWMubG9hZCgpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLl9ib290c3RyYXAuX2xvYWQoc3BlYykKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX3RlbXBfXyddCkBAIC0yOTMsMTQgKzI5MywxMyBAQAogICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQogICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCiAgICAgaWYgaXNfYnl0ZWNvZGU6Ci0gICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCisgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5fYm9vdHN0cmFwX2V4dGVybmFsLlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCiAgICAgZWxzZToKLSAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLl9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKQorICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbC5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCiAgICAgIyBYWFggV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBwYXNzIGluIHRoZSBsb2FkZXIgaGVyZS4KICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aCwgbG9hZGVyPWxvYWRlcikKLSAgICBfc3BlYyA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIF9zcGVjLmxvYWQoKQorICAgICAgICByZXR1cm4gaW1wb3J0bGliLl9ib290c3RyYXAuX2xvYWQoc3BlYykKICAgICBleGNlcHQ6CiAgICAgICAgIHJhaXNlIEVycm9yRHVyaW5nSW1wb3J0KHBhdGgsIHN5cy5leGNfaW5mbygpKQogCkBAIC0zNTUsNyArMzU0LDcgQEAKIGNsYXNzIERvYzoKIAogICAgIFBZVEhPTkRPQ1MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnLyVkLiVkL2xpYnJhcnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwczovL2RvY3MucHl0aG9uLm9yZy8lZC4lZC9saWJyYXJ5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHN5cy52ZXJzaW9uX2luZm9bOjJdKQogCiAgICAgZGVmIGRvY3VtZW50KHNlbGYsIG9iamVjdCwgbmFtZT1Ob25lLCAqYXJncyk6CkBAIC0zODQsNyArMzgzLDkgQEAKIAogICAgIGRvY21vZHVsZSA9IGRvY2NsYXNzID0gZG9jcm91dGluZSA9IGRvY290aGVyID0gZG9jcHJvcGVydHkgPSBkb2NkYXRhID0gZmFpbAogCi0gICAgZGVmIGdldGRvY2xvYyhzZWxmLCBvYmplY3QpOgorICAgIGRlZiBnZXRkb2Nsb2Moc2VsZiwgb2JqZWN0LAorICAgICAgICAgICAgICAgICAgYmFzZWRpcj1vcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsICJsaWIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiVkLiVkIiAlICBzeXMudmVyc2lvbl9pbmZvWzoyXSkpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGxvY2F0aW9uIG9mIG1vZHVsZSBkb2NzIG9yIE5vbmUiIiIKIAogICAgICAgICB0cnk6CkBAIC0zOTQsOCArMzk1LDcgQEAKIAogICAgICAgICBkb2Nsb2MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsIHNlbGYuUFlUSE9ORE9DUykKIAotICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5qb2luKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCAibGliIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uJWQuJWQiICUgIHN5cy52ZXJzaW9uX2luZm9bOjJdKQorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5ub3JtY2FzZShiYXNlZGlyKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyc2hhbCcsICdwb3NpeCcsICdzaWduYWwnLCAnc3lzJywKQEAgLTQwMywxMCArNDAzLDEwIEBACiAgICAgICAgICAgICAgKGZpbGUuc3RhcnRzd2l0aChiYXNlZGlyKSBhbmQKICAgICAgICAgICAgICAgbm90IGZpbGUuc3RhcnRzd2l0aChvcy5wYXRoLmpvaW4oYmFzZWRpciwgJ3NpdGUtcGFja2FnZXMnKSkpKSBhbmQKICAgICAgICAgICAgIG9iamVjdC5fX25hbWVfXyBub3QgaW4gKCd4bWwuZXRyZWUnLCAndGVzdC5weWRvY19tb2QnKSk6Ci0gICAgICAgICAgICBpZiBkb2Nsb2Muc3RhcnRzd2l0aCgiaHR0cDovLyIpOgotICAgICAgICAgICAgICAgIGRvY2xvYyA9ICIlcy8lcyIgJSAoZG9jbG9jLnJzdHJpcCgiLyIpLCBvYmplY3QuX19uYW1lX18pCisgICAgICAgICAgICBpZiBkb2Nsb2Muc3RhcnRzd2l0aCgoImh0dHA6Ly8iLCAiaHR0cHM6Ly8iKSk6CisgICAgICAgICAgICAgICAgZG9jbG9jID0gIiVzLyVzIiAlIChkb2Nsb2MucnN0cmlwKCIvIiksIG9iamVjdC5fX25hbWVfXy5sb3dlcigpKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkb2Nsb2MgPSBvcy5wYXRoLmpvaW4oZG9jbG9jLCBvYmplY3QuX19uYW1lX18gKyAiLmh0bWwiKQorICAgICAgICAgICAgICAgIGRvY2xvYyA9IG9zLnBhdGguam9pbihkb2Nsb2MsIG9iamVjdC5fX25hbWVfXy5sb3dlcigpICsgIi5odG1sIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRvY2xvYyA9IE5vbmUKICAgICAgICAgcmV0dXJuIGRvY2xvYwpAQCAtMTU5MSw3ICsxNTkxLDEwIEBACiAgICAgaWYgaXNpbnN0YW5jZSh0aGluZywgc3RyKToKICAgICAgICAgb2JqZWN0ID0gbG9jYXRlKHRoaW5nLCBmb3JjZWxvYWQpCiAgICAgICAgIGlmIG9iamVjdCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ25vIFB5dGhvbiBkb2N1bWVudGF0aW9uIGZvdW5kIGZvciAlcicgJSB0aGluZykKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCcnJ1wKK05vIFB5dGhvbiBkb2N1bWVudGF0aW9uIGZvdW5kIGZvciAlci4KK1VzZSBoZWxwKCkgdG8gZ2V0IHRoZSBpbnRlcmFjdGl2ZSBoZWxwIHV0aWxpdHkuCitVc2UgaGVscChzdHIpIGZvciBoZWxwIG9uIHRoZSBzdHIgY2xhc3MuJycnICUgdGhpbmcpCiAgICAgICAgIHJldHVybiBvYmplY3QsIHRoaW5nCiAgICAgZWxzZToKICAgICAgICAgbmFtZSA9IGdldGF0dHIodGhpbmcsICdfX25hbWVfXycsIE5vbmUpCkBAIC0xNjM4LDkgKzE2NDEsOCBAQAogICAgIHRyeToKICAgICAgICAgb2JqZWN0LCBuYW1lID0gcmVzb2x2ZSh0aGluZywgZm9yY2Vsb2FkKQogICAgICAgICBwYWdlID0gaHRtbC5wYWdlKGRlc2NyaWJlKG9iamVjdCksIGh0bWwuZG9jdW1lbnQob2JqZWN0LCBuYW1lKSkKLSAgICAgICAgZmlsZSA9IG9wZW4obmFtZSArICcuaHRtbCcsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykKLSAgICAgICAgZmlsZS53cml0ZShwYWdlKQotICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG5hbWUgKyAnLmh0bWwnLCAndycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGZpbGU6CisgICAgICAgICAgICBmaWxlLndyaXRlKHBhZ2UpCiAgICAgICAgIHByaW50KCd3cm90ZScsIG5hbWUgKyAnLmh0bWwnKQogICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVycm9yRHVyaW5nSW1wb3J0KSBhcyB2YWx1ZToKICAgICAgICAgcHJpbnQodmFsdWUpCkBAIC0xODM1LDcgKzE4MzcsOCBAQAogICAgICAgICBpZiBpbnNwZWN0LnN0YWNrKClbMV1bM10gPT0gJz8nOgogICAgICAgICAgICAgc2VsZigpCiAgICAgICAgICAgICByZXR1cm4gJycKLSAgICAgICAgcmV0dXJuICc8cHlkb2MuSGVscGVyIGluc3RhbmNlPicKKyAgICAgICAgcmV0dXJuICc8JXMuJXMgaW5zdGFuY2U+JyAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXykKIAogICAgIF9Hb0ludGVyYWN0aXZlID0gb2JqZWN0KCkKICAgICBkZWYgX19jYWxsX18oc2VsZiwgcmVxdWVzdD1fR29JbnRlcmFjdGl2ZSk6CkBAIC0xODYxLDcgKzE4NjQsMTAgQEAKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgcmVxdWVzdCA9IHJlcGxhY2UocmVxdWVzdCwgJyInLCAnJywgIiciLCAnJykuc3RyaXAoKQogICAgICAgICAgICAgaWYgcmVxdWVzdC5sb3dlcigpIGluICgncScsICdxdWl0Jyk6IGJyZWFrCi0gICAgICAgICAgICBzZWxmLmhlbHAocmVxdWVzdCkKKyAgICAgICAgICAgIGlmIHJlcXVlc3QgPT0gJ2hlbHAnOgorICAgICAgICAgICAgICAgIHNlbGYuaW50cm8oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmhlbHAocmVxdWVzdCkKIAogICAgIGRlZiBnZXRsaW5lKHNlbGYsIHByb21wdCk6CiAgICAgICAgICIiIlJlYWQgb25lIGxpbmUsIHVzaW5nIGlucHV0KCkgd2hlbiBhcHByb3ByaWF0ZS4iIiIKQEAgLTE4NzUsOCArMTg4MSw3IEBACiAgICAgZGVmIGhlbHAoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgIGlmIHR5cGUocmVxdWVzdCkgaXMgdHlwZSgnJyk6CiAgICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC5zdHJpcCgpCi0gICAgICAgICAgICBpZiByZXF1ZXN0ID09ICdoZWxwJzogc2VsZi5pbnRybygpCi0gICAgICAgICAgICBlbGlmIHJlcXVlc3QgPT0gJ2tleXdvcmRzJzogc2VsZi5saXN0a2V5d29yZHMoKQorICAgICAgICAgICAgaWYgcmVxdWVzdCA9PSAna2V5d29yZHMnOiBzZWxmLmxpc3RrZXl3b3JkcygpCiAgICAgICAgICAgICBlbGlmIHJlcXVlc3QgPT0gJ3N5bWJvbHMnOiBzZWxmLmxpc3RzeW1ib2xzKCkKICAgICAgICAgICAgIGVsaWYgcmVxdWVzdCA9PSAndG9waWNzJzogc2VsZi5saXN0dG9waWNzKCkKICAgICAgICAgICAgIGVsaWYgcmVxdWVzdCA9PSAnbW9kdWxlcyc6IHNlbGYubGlzdG1vZHVsZXMoKQpAQCAtMTg4OSw2ICsxODk0LDcgQEAKICAgICAgICAgICAgIGVsaWYgcmVxdWVzdCBpbiBzZWxmLmtleXdvcmRzOiBzZWxmLnNob3d0b3BpYyhyZXF1ZXN0KQogICAgICAgICAgICAgZWxpZiByZXF1ZXN0IGluIHNlbGYudG9waWNzOiBzZWxmLnNob3d0b3BpYyhyZXF1ZXN0KQogICAgICAgICAgICAgZWxpZiByZXF1ZXN0OiBkb2MocmVxdWVzdCwgJ0hlbHAgb24gJXM6Jywgb3V0cHV0PXNlbGYuX291dHB1dCkKKyAgICAgICAgICAgIGVsc2U6IGRvYyhzdHIsICdIZWxwIG9uICVzOicsIG91dHB1dD1zZWxmLl9vdXRwdXQpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShyZXF1ZXN0LCBIZWxwZXIpOiBzZWxmKCkKICAgICAgICAgZWxzZTogZG9jKHJlcXVlc3QsICdIZWxwIG9uICVzOicsIG91dHB1dD1zZWxmLl9vdXRwdXQpCiAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCdcbicpCkBAIC0yMDg0LDkgKzIwOTAsOCBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IE5vbmUKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBfc3BlYyA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfc3BlYy5sb2FkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9sb2FkKHNwZWMpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9uZXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihtb2RuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5IGIvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CmluZGV4IDBjNDNjMjUuLmQ2ZjEzNjYgMTAwNjQ0Ci0tLSBhL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQorKysgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKQEAgLTEsMTMgKzEsMTMgQEAKICMgLSotIGNvZGluZzogdXRmLTggLSotCi0jIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIFNhdCBKdW4gMjUgMTQ6NDA6NTcgMjAxNgotdG9waWNzID0geydhc3NlcnQnOiB1J1xuVGhlICJhc3NlcnQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NlcnQgc3RhdGVtZW50cyBhcmUgYSBjb252ZW5pZW50IHdheSB0byBpbnNlcnQgZGVidWdnaW5nIGFzc2VydGlvbnNcbmludG8gYSBwcm9ncmFtOlxuXG4gICBhc3NlcnRfc3RtdCA6Oj0gImFzc2VydCIgZXhwcmVzc2lvbiBbIiwiIGV4cHJlc3Npb25dXG5cblRoZSBzaW1wbGUgZm9ybSwgImFzc2VydCBleHByZXNzaW9uIiwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjogcmFpc2UgQXNzZXJ0aW9uRXJyb3JcblxuVGhlIGV4dGVuZGVkIGZvcm0sICJhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yIiwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjE6IHJhaXNlIEFzc2VydGlvbkVycm9yKGV4cHJlc3Npb24yKVxuXG5UaGVzZSBlcXVpdmFsZW5jZXMgYXNzdW1lIHRoYXQgIl9fZGVidWdfXyIgYW5kICJBc3NlcnRpb25FcnJvciIgcmVmZXJcbnRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlICJfX2RlYnVnX18iIGlzICJUcnVlIiB1bmRlclxubm9ybWFsIGNpcmN1bXN0YW5jZXMsICJGYWxzZSIgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIChjb21tYW5kXG5saW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlIGZvciBhblxuYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZSB0aW1lLiAgTm90ZVxudGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGV4cHJlc3Npb25cbnRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZVxuc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvICJfX2RlYnVnX18iIGFyZSBpbGxlZ2FsLiAgVGhlIHZhbHVlIGZvciB0aGUgYnVpbHQtaW5cbnZhcmlhYmxlIGlzIGRldGVybWluZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc3RhcnRzLlxuJywKLSAnYXNzaWdubWVudCc6IHUnXG5Bc3NpZ25tZW50IHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NpZ25tZW50IHN0YXRlbWVudHMgYXJlIHVzZWQgdG8gKHJlKWJpbmQgbmFtZXMgdG8gdmFsdWVzIGFuZCB0b1xubW9kaWZ5IGF0dHJpYnV0ZXMgb3IgaXRlbXMgb2YgbXV0YWJsZSBvYmplY3RzOlxuXG4gICBhc3NpZ25tZW50X3N0bXQgOjo9ICh0YXJnZXRfbGlzdCAiPSIpKyAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIHRhcmdldF9saXN0ICAgICA6Oj0gdGFyZ2V0ICgiLCIgdGFyZ2V0KSogWyIsIl1cbiAgIHRhcmdldCAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgICAgICAgICB8ICIoIiB0YXJnZXRfbGlzdCAiKSJcbiAgICAgICAgICAgICAgfCAiWyIgdGFyZ2V0X2xpc3QgIl0iXG4gICAgICAgICAgICAgIHwgYXR0cmlidXRlcmVmXG4gICAgICAgICAgICAgIHwgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgIHwgc2xpY2luZ1xuICAgICAgICAgICAgICB8ICIqIiB0YXJnZXRcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvclxuKmF0dHJpYnV0ZXJlZiosICpzdWJzY3JpcHRpb24qLCBhbmQgKnNsaWNpbmcqLilcblxuQW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGxpc3QgKHJlbWVtYmVyIHRoYXRcbnRoaXMgY2FuIGJlIGEgc2luZ2xlIGV4cHJlc3Npb24gb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgdGhlIGxhdHRlclxueWllbGRpbmcgYSB0dXBsZSkgYW5kIGFzc2lnbnMgdGhlIHNpbmdsZSByZXN1bHRpbmcgb2JqZWN0IHRvIGVhY2ggb2ZcbnRoZSB0YXJnZXQgbGlzdHMsIGZyb20gbGVmdCB0byByaWdodC5cblxuQXNzaWdubWVudCBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGRlcGVuZGluZyBvbiB0aGUgZm9ybSBvZiB0aGUgdGFyZ2V0XG4obGlzdCkuIFdoZW4gYSB0YXJnZXQgaXMgcGFydCBvZiBhIG11dGFibGUgb2JqZWN0IChhbiBhdHRyaWJ1dGVcbnJlZmVyZW5jZSwgc3Vic2NyaXB0aW9uIG9yIHNsaWNpbmcpLCB0aGUgbXV0YWJsZSBvYmplY3QgbXVzdFxudWx0aW1hdGVseSBwZXJmb3JtIHRoZSBhc3NpZ25tZW50IGFuZCBkZWNpZGUgYWJvdXQgaXRzIHZhbGlkaXR5LCBhbmRcbm1heSByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGFzc2lnbm1lbnQgaXMgdW5hY2NlcHRhYmxlLiAgVGhlIHJ1bGVzXG5vYnNlcnZlZCBieSB2YXJpb3VzIHR5cGVzIGFuZCB0aGUgZXhjZXB0aW9ucyByYWlzZWQgYXJlIGdpdmVuIHdpdGggdGhlXG5kZWZpbml0aW9uIG9mIHRoZSBvYmplY3QgdHlwZXMgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZVxuaGllcmFyY2h5KikuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgdGFyZ2V0IGxpc3QsIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW5cbnBhcmVudGhlc2VzIG9yIHNxdWFyZSBicmFja2V0cywgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhcyBmb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIHNpbmdsZSB0YXJnZXQ6IFRoZSBvYmplY3QgaXMgYXNzaWduZWQgdG9cbiAgdGhhdCB0YXJnZXQuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGFyZ2V0czogVGhlXG4gIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIGFzIHRoZXJlXG4gIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmUgYXNzaWduZWQsIGZyb21cbiAgbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuICAqIElmIHRoZSB0YXJnZXQgbGlzdCBjb250YWlucyBvbmUgdGFyZ2V0IHByZWZpeGVkIHdpdGggYW5cbiAgICBhc3RlcmlzaywgY2FsbGVkIGEgInN0YXJyZWQiIHRhcmdldDogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2VcbiAgICB3aXRoIGF0IGxlYXN0IGFzIG1hbnkgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldFxuICAgIGxpc3QsIG1pbnVzIG9uZS4gIFRoZSBmaXJzdCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkLFxuICAgIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIHRhcmdldHMgYmVmb3JlIHRoZSBzdGFycmVkIHRhcmdldC4gIFRoZVxuICAgIGZpbmFsIGl0ZW1zIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQgdG8gdGhlIHRhcmdldHMgYWZ0ZXIgdGhlXG4gICAgc3RhcnJlZCB0YXJnZXQuICBBIGxpc3Qgb2YgdGhlIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgaXNcbiAgICB0aGVuIGFzc2lnbmVkIHRvIHRoZSBzdGFycmVkIHRhcmdldCAodGhlIGxpc3QgY2FuIGJlIGVtcHR5KS5cblxuICAqIEVsc2U6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mXG4gICAgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZVxuICAgIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgc2luZ2xlIHRhcmdldCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzXG5mb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gaWRlbnRpZmllciAobmFtZSk6XG5cbiAgKiBJZiB0aGUgbmFtZSBkb2VzIG5vdCBvY2N1ciBpbiBhICJnbG9iYWwiIG9yICJub25sb2NhbCIgc3RhdGVtZW50XG4gICAgaW4gdGhlIGN1cnJlbnQgY29kZSBibG9jazogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGVcbiAgICBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZS5cblxuICAqIE90aGVyd2lzZTogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGUgZ2xvYmFsXG4gICAgbmFtZXNwYWNlIG9yIHRoZSBvdXRlciBuYW1lc3BhY2UgZGV0ZXJtaW5lZCBieSAibm9ubG9jYWwiLFxuICAgIHJlc3BlY3RpdmVseS5cblxuICBUaGUgbmFtZSBpcyByZWJvdW5kIGlmIGl0IHdhcyBhbHJlYWR5IGJvdW5kLiAgVGhpcyBtYXkgY2F1c2UgdGhlXG4gIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoXG4gIHplcm8sIGNhdXNpbmcgdGhlIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0XG4gIGhhcyBvbmUpIHRvIGJlIGNhbGxlZC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW5cbiAgc3F1YXJlIGJyYWNrZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXJcbiAgb2YgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZVxuICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCAiVHlwZUVycm9yIiBpc1xuICByYWlzZWQuICBUaGF0IG9iamVjdCBpcyB0aGVuIGFza2VkIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvXG4gIHRoZSBnaXZlbiBhdHRyaWJ1dGU7IGlmIGl0IGNhbm5vdCBwZXJmb3JtIHRoZSBhc3NpZ25tZW50LCBpdCByYWlzZXNcbiAgYW4gZXhjZXB0aW9uICh1c3VhbGx5IGJ1dCBub3QgbmVjZXNzYXJpbHkgIkF0dHJpYnV0ZUVycm9yIikuXG5cbiAgTm90ZTogSWYgdGhlIG9iamVjdCBpcyBhIGNsYXNzIGluc3RhbmNlIGFuZCB0aGUgYXR0cmlidXRlIHJlZmVyZW5jZVxuICBvY2N1cnMgb24gYm90aCBzaWRlcyBvZiB0aGUgYXNzaWdubWVudCBvcGVyYXRvciwgdGhlIFJIUyBleHByZXNzaW9uLFxuICAiYS54IiBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgImEueCIgaXMgYWx3YXlzXG4gIHNldCBhcyBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS4gIFRodXMsIHRoZVxuICB0d28gb2NjdXJyZW5jZXMgb2YgImEueCIgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZSBzYW1lXG4gIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSwgdGhlXG4gIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCAicHJvcGVydHkoKSIuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHN1YnNjcmlwdGlvbjogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBlaXRoZXIgYSBtdXRhYmxlIHNlcXVlbmNlXG4gIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpIG9yIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KS5cbiAgTmV4dCwgdGhlIHN1YnNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGEgbGlzdCksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCB5aWVsZCBhbiBpbnRlZ2VyLiAgSWYgaXQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZVxuICBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLCBhbmQgdGhlIHNlcXVlbmNlIGlzIGFza2VkXG4gIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGl0cyBpdGVtIHdpdGggdGhhdCBpbmRleC4gIElmIHRoZVxuICBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsICJJbmRleEVycm9yIiBpcyByYWlzZWQgKGFzc2lnbm1lbnQgdG8gYVxuICBzdWJzY3JpcHRlZCBzZXF1ZW5jZSBjYW5ub3QgYWRkIG5ldyBpdGVtcyB0byBhIGxpc3QpLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IGhhdmUgYSB0eXBlIGNvbXBhdGlibGUgd2l0aCB0aGUgbWFwcGluZ1wncyBrZXkgdHlwZSxcbiAgYW5kIHRoZSBtYXBwaW5nIGlzIHRoZW4gYXNrZWQgdG8gY3JlYXRlIGEga2V5L2RhdHVtIHBhaXIgd2hpY2ggbWFwc1xuICB0aGUgc3Vic2NyaXB0IHRvIHRoZSBhc3NpZ25lZCBvYmplY3QuICBUaGlzIGNhbiBlaXRoZXIgcmVwbGFjZSBhblxuICBleGlzdGluZyBrZXkvdmFsdWUgcGFpciB3aXRoIHRoZSBzYW1lIGtleSB2YWx1ZSwgb3IgaW5zZXJ0IGEgbmV3XG4gIGtleS92YWx1ZSBwYWlyIChpZiBubyBrZXkgd2l0aCB0aGUgc2FtZSB2YWx1ZSBleGlzdGVkKS5cblxuICBGb3IgdXNlci1kZWZpbmVkIG9iamVjdHMsIHRoZSAiX19zZXRpdGVtX18oKSIgbWV0aG9kIGlzIGNhbGxlZCB3aXRoXG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2xpY2luZzogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0XG4gIChzdWNoIGFzIGEgbGlzdCkuICBUaGUgYXNzaWduZWQgb2JqZWN0IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9iamVjdFxuICBvZiB0aGUgc2FtZSB0eXBlLiAgTmV4dCwgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZCBleHByZXNzaW9ucyBhcmVcbiAgZXZhbHVhdGVkLCBpbnNvZmFyIHRoZXkgYXJlIHByZXNlbnQ7IGRlZmF1bHRzIGFyZSB6ZXJvIGFuZCB0aGVcbiAgc2VxdWVuY2VcJ3MgbGVuZ3RoLiAgVGhlIGJvdW5kcyBzaG91bGQgZXZhbHVhdGUgdG8gaW50ZWdlcnMuIElmXG4gIGVpdGhlciBib3VuZCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZVxuICByZXN1bHRpbmcgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGgsIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZVxuICB0aGUgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZlxuICB0aGUgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIHRhcmdldFxuICBzZXF1ZW5jZSBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHMgYmV0d2VlblxudGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NpbXVsdGFuZW5vdXNcJyAoZm9yXG5leGFtcGxlICJhLCBiID0gYiwgYSIgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZVxuY29sbGVjdGlvbiBvZiBhc3NpZ25lZC10byB2YXJpYWJsZXMgb2NjdXIgbGVmdC10by1yaWdodCwgc29tZXRpbWVzXG5yZXN1bHRpbmcgaW4gY29uZnVzaW9uLiAgRm9yIGluc3RhbmNlLCB0aGUgZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzXG4iWzAsIDJdIjpcblxuICAgeCA9IFswLCAxXVxuICAgaSA9IDBcbiAgIGksIHhbaV0gPSAxLCAyICAgICAgICAgIyBpIGlzIHVwZGF0ZWQsIHRoZW4geFtpXSBpcyB1cGRhdGVkXG4gICBwcmludCh4KVxuXG5TZWUgYWxzbzogKipQRVAgMzEzMioqIC0gRXh0ZW5kZWQgSXRlcmFibGUgVW5wYWNraW5nXG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSAiKnRhcmdldCIgZmVhdHVyZS5cblxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgb2YgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSAieCArPSAxIiBjYW4gYmUgcmV3cml0dGVuIGFzXG4ieCA9IHggKyAxIiB0byBhY2hpZXZlIGEgc2ltaWxhciwgYnV0IG5vdCBleGFjdGx5IGVxdWFsIGVmZmVjdC4gSW4gdGhlXG5hdWdtZW50ZWQgdmVyc2lvbiwgIngiIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW4gcG9zc2libGUsXG50aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0IHJhdGhlciB0aGFuXG5jcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsIHRoZSBvbGQgb2JqZWN0XG5pcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5Vbmxpa2Ugbm9ybWFsIGFzc2lnbm1lbnRzLCBhdWdtZW50ZWQgYXNzaWdubWVudHMgZXZhbHVhdGUgdGhlIGxlZnQtXG5oYW5kIHNpZGUgKmJlZm9yZSogZXZhbHVhdGluZyB0aGUgcmlnaHQtaGFuZCBzaWRlLiAgRm9yIGV4YW1wbGUsICJhW2ldXG4rPSBmKHgpIiBmaXJzdCBsb29rcy11cCAiYVtpXSIsIHRoZW4gaXQgZXZhbHVhdGVzICJmKHgpIiBhbmQgcGVyZm9ybXNcbnRoZSBhZGRpdGlvbiwgYW5kIGxhc3RseSwgaXQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byAiYVtpXSIuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAorIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBTYXQgSnVuIDI1IDE0OjA4OjQ0IDIwMTYKK3RvcGljcyA9IHsnYXNzZXJ0JzogdSdcblRoZSAiYXNzZXJ0IiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuQXNzZXJ0IHN0YXRlbWVudHMgYXJlIGEgY29udmVuaWVudCB3YXkgdG8gaW5zZXJ0IGRlYnVnZ2luZyBhc3NlcnRpb25zXG5pbnRvIGEgcHJvZ3JhbTpcblxuICAgYXNzZXJ0X3N0bXQgOjo9ICJhc3NlcnQiIGV4cHJlc3Npb24gWyIsIiBleHByZXNzaW9uXVxuXG5UaGUgc2ltcGxlIGZvcm0sICJhc3NlcnQgZXhwcmVzc2lvbiIsIGlzIGVxdWl2YWxlbnQgdG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgIGlmIG5vdCBleHByZXNzaW9uOiByYWlzZSBBc3NlcnRpb25FcnJvclxuXG5UaGUgZXh0ZW5kZWQgZm9ybSwgImFzc2VydCBleHByZXNzaW9uMSwgZXhwcmVzc2lvbjIiLCBpcyBlcXVpdmFsZW50IHRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgICBpZiBub3QgZXhwcmVzc2lvbjE6IHJhaXNlIEFzc2VydGlvbkVycm9yKGV4cHJlc3Npb24yKVxuXG5UaGVzZSBlcXVpdmFsZW5jZXMgYXNzdW1lIHRoYXQgIl9fZGVidWdfXyIgYW5kICJBc3NlcnRpb25FcnJvciIgcmVmZXJcbnRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlICJfX2RlYnVnX18iIGlzICJUcnVlIiB1bmRlclxubm9ybWFsIGNpcmN1bXN0YW5jZXMsICJGYWxzZSIgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIChjb21tYW5kXG5saW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlIGZvciBhblxuYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZSB0aW1lLiAgTm90ZVxudGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGV4cHJlc3Npb25cbnRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZVxuc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvICJfX2RlYnVnX18iIGFyZSBpbGxlZ2FsLiAgVGhlIHZhbHVlIGZvciB0aGUgYnVpbHQtaW5cbnZhcmlhYmxlIGlzIGRldGVybWluZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc3RhcnRzLlxuJywKKyAnYXNzaWdubWVudCc6IHUnXG5Bc3NpZ25tZW50IHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NpZ25tZW50IHN0YXRlbWVudHMgYXJlIHVzZWQgdG8gKHJlKWJpbmQgbmFtZXMgdG8gdmFsdWVzIGFuZCB0b1xubW9kaWZ5IGF0dHJpYnV0ZXMgb3IgaXRlbXMgb2YgbXV0YWJsZSBvYmplY3RzOlxuXG4gICBhc3NpZ25tZW50X3N0bXQgOjo9ICh0YXJnZXRfbGlzdCAiPSIpKyAoc3RhcnJlZF9leHByZXNzaW9uIHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIHRhcmdldF9saXN0ICAgICA6Oj0gdGFyZ2V0ICgiLCIgdGFyZ2V0KSogWyIsIl1cbiAgIHRhcmdldCAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgICAgICAgICB8ICIoIiB0YXJnZXRfbGlzdCAiKSJcbiAgICAgICAgICAgICAgfCAiWyIgW3RhcmdldF9saXN0XSAiXSJcbiAgICAgICAgICAgICAgfCBhdHRyaWJ1dGVyZWZcbiAgICAgICAgICAgICAgfCBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgfCBzbGljaW5nXG4gICAgICAgICAgICAgIHwgIioiIHRhcmdldFxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yXG4qYXR0cmlidXRlcmVmKiwgKnN1YnNjcmlwdGlvbiosIGFuZCAqc2xpY2luZyouKVxuXG5BbiBhc3NpZ25tZW50IHN0YXRlbWVudCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gbGlzdCAocmVtZW1iZXIgdGhhdFxudGhpcyBjYW4gYmUgYSBzaW5nbGUgZXhwcmVzc2lvbiBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCB0aGUgbGF0dGVyXG55aWVsZGluZyBhIHR1cGxlKSBhbmQgYXNzaWducyB0aGUgc2luZ2xlIHJlc3VsdGluZyBvYmplY3QgdG8gZWFjaCBvZlxudGhlIHRhcmdldCBsaXN0cywgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuXG5Bc3NpZ25tZW50IGlzIGRlZmluZWQgcmVjdXJzaXZlbHkgZGVwZW5kaW5nIG9uIHRoZSBmb3JtIG9mIHRoZSB0YXJnZXRcbihsaXN0KS4gV2hlbiBhIHRhcmdldCBpcyBwYXJ0IG9mIGEgbXV0YWJsZSBvYmplY3QgKGFuIGF0dHJpYnV0ZVxucmVmZXJlbmNlLCBzdWJzY3JpcHRpb24gb3Igc2xpY2luZyksIHRoZSBtdXRhYmxlIG9iamVjdCBtdXN0XG51bHRpbWF0ZWx5IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQgYW5kIGRlY2lkZSBhYm91dCBpdHMgdmFsaWRpdHksIGFuZFxubWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgYXNzaWdubWVudCBpcyB1bmFjY2VwdGFibGUuICBUaGUgcnVsZXNcbm9ic2VydmVkIGJ5IHZhcmlvdXMgdHlwZXMgYW5kIHRoZSBleGNlcHRpb25zIHJhaXNlZCBhcmUgZ2l2ZW4gd2l0aCB0aGVcbmRlZmluaXRpb24gb2YgdGhlIG9iamVjdCB0eXBlcyAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlXG5oaWVyYXJjaHkqKS5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSB0YXJnZXQgbGlzdCwgb3B0aW9uYWxseSBlbmNsb3NlZCBpblxucGFyZW50aGVzZXMgb3Igc3F1YXJlIGJyYWNrZXRzLCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzIGZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGVtcHR5OiBUaGUgb2JqZWN0IG11c3QgYWxzbyBiZSBhbiBlbXB0eVxuICBpdGVyYWJsZS5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBzaW5nbGUgdGFyZ2V0IGluIHBhcmVudGhlc2VzOiBUaGUgb2JqZWN0XG4gIGlzIGFzc2lnbmVkIHRvIHRoYXQgdGFyZ2V0LlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRhcmdldHMsIG9yIGFcbiAgc2luZ2xlIHRhcmdldCBpbiBzcXVhcmUgYnJhY2tldHM6IFRoZSBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYWJsZVxuICB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0XG4gIGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZVxuICBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbiAgKiBJZiB0aGUgdGFyZ2V0IGxpc3QgY29udGFpbnMgb25lIHRhcmdldCBwcmVmaXhlZCB3aXRoIGFuXG4gICAgYXN0ZXJpc2ssIGNhbGxlZCBhICJzdGFycmVkIiB0YXJnZXQ6IFRoZSBvYmplY3QgbXVzdCBiZSBhblxuICAgIGl0ZXJhYmxlIHdpdGggYXQgbGVhc3QgYXMgbWFueSBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGVcbiAgICB0YXJnZXQgbGlzdCwgbWludXMgb25lLiAgVGhlIGZpcnN0IGl0ZW1zIG9mIHRoZSBpdGVyYWJsZSBhcmVcbiAgICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgdGFyZ2V0cyBiZWZvcmUgdGhlIHN0YXJyZWRcbiAgICB0YXJnZXQuICBUaGUgZmluYWwgaXRlbXMgb2YgdGhlIGl0ZXJhYmxlIGFyZSBhc3NpZ25lZCB0byB0aGVcbiAgICB0YXJnZXRzIGFmdGVyIHRoZSBzdGFycmVkIHRhcmdldC4gIEEgbGlzdCBvZiB0aGUgcmVtYWluaW5nIGl0ZW1zXG4gICAgaW4gdGhlIGl0ZXJhYmxlIGlzIHRoZW4gYXNzaWduZWQgdG8gdGhlIHN0YXJyZWQgdGFyZ2V0ICh0aGUgbGlzdFxuICAgIGNhbiBiZSBlbXB0eSkuXG5cbiAgKiBFbHNlOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2ZcbiAgICBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlXG4gICAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSBzaW5nbGUgdGFyZ2V0IGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXNcbmZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhbiBpZGVudGlmaWVyIChuYW1lKTpcblxuICAqIElmIHRoZSBuYW1lIGRvZXMgbm90IG9jY3VyIGluIGEgImdsb2JhbCIgb3IgIm5vbmxvY2FsIiBzdGF0ZW1lbnRcbiAgICBpbiB0aGUgY3VycmVudCBjb2RlIGJsb2NrOiB0aGUgbmFtZSBpcyBib3VuZCB0byB0aGUgb2JqZWN0IGluIHRoZVxuICAgIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlLlxuXG4gICogT3RoZXJ3aXNlOiB0aGUgbmFtZSBpcyBib3VuZCB0byB0aGUgb2JqZWN0IGluIHRoZSBnbG9iYWxcbiAgICBuYW1lc3BhY2Ugb3IgdGhlIG91dGVyIG5hbWVzcGFjZSBkZXRlcm1pbmVkIGJ5ICJub25sb2NhbCIsXG4gICAgcmVzcGVjdGl2ZWx5LlxuXG4gIFRoZSBuYW1lIGlzIHJlYm91bmQgaWYgaXQgd2FzIGFscmVhZHkgYm91bmQuICBUaGlzIG1heSBjYXVzZSB0aGVcbiAgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUgb2JqZWN0IHByZXZpb3VzbHkgYm91bmQgdG8gdGhlIG5hbWUgdG8gcmVhY2hcbiAgemVybywgY2F1c2luZyB0aGUgb2JqZWN0IHRvIGJlIGRlYWxsb2NhdGVkIGFuZCBpdHMgZGVzdHJ1Y3RvciAoaWYgaXRcbiAgaGFzIG9uZSkgdG8gYmUgY2FsbGVkLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCAiVHlwZUVycm9yIiBpc1xuICByYWlzZWQuICBUaGF0IG9iamVjdCBpcyB0aGVuIGFza2VkIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvXG4gIHRoZSBnaXZlbiBhdHRyaWJ1dGU7IGlmIGl0IGNhbm5vdCBwZXJmb3JtIHRoZSBhc3NpZ25tZW50LCBpdCByYWlzZXNcbiAgYW4gZXhjZXB0aW9uICh1c3VhbGx5IGJ1dCBub3QgbmVjZXNzYXJpbHkgIkF0dHJpYnV0ZUVycm9yIikuXG5cbiAgTm90ZTogSWYgdGhlIG9iamVjdCBpcyBhIGNsYXNzIGluc3RhbmNlIGFuZCB0aGUgYXR0cmlidXRlIHJlZmVyZW5jZVxuICBvY2N1cnMgb24gYm90aCBzaWRlcyBvZiB0aGUgYXNzaWdubWVudCBvcGVyYXRvciwgdGhlIFJIUyBleHByZXNzaW9uLFxuICAiYS54IiBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgImEueCIgaXMgYWx3YXlzXG4gIHNldCBhcyBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS4gIFRodXMsIHRoZVxuICB0d28gb2NjdXJyZW5jZXMgb2YgImEueCIgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZSBzYW1lXG4gIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSwgdGhlXG4gIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCAicHJvcGVydHkoKSIuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHN1YnNjcmlwdGlvbjogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBlaXRoZXIgYSBtdXRhYmxlIHNlcXVlbmNlXG4gIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpIG9yIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KS5cbiAgTmV4dCwgdGhlIHN1YnNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGEgbGlzdCksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCB5aWVsZCBhbiBpbnRlZ2VyLiAgSWYgaXQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZVxuICBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLCBhbmQgdGhlIHNlcXVlbmNlIGlzIGFza2VkXG4gIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGl0cyBpdGVtIHdpdGggdGhhdCBpbmRleC4gIElmIHRoZVxuICBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsICJJbmRleEVycm9yIiBpcyByYWlzZWQgKGFzc2lnbm1lbnQgdG8gYVxuICBzdWJzY3JpcHRlZCBzZXF1ZW5jZSBjYW5ub3QgYWRkIG5ldyBpdGVtcyB0byBhIGxpc3QpLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IGhhdmUgYSB0eXBlIGNvbXBhdGlibGUgd2l0aCB0aGUgbWFwcGluZ1wncyBrZXkgdHlwZSxcbiAgYW5kIHRoZSBtYXBwaW5nIGlzIHRoZW4gYXNrZWQgdG8gY3JlYXRlIGEga2V5L2RhdHVtIHBhaXIgd2hpY2ggbWFwc1xuICB0aGUgc3Vic2NyaXB0IHRvIHRoZSBhc3NpZ25lZCBvYmplY3QuICBUaGlzIGNhbiBlaXRoZXIgcmVwbGFjZSBhblxuICBleGlzdGluZyBrZXkvdmFsdWUgcGFpciB3aXRoIHRoZSBzYW1lIGtleSB2YWx1ZSwgb3IgaW5zZXJ0IGEgbmV3XG4gIGtleS92YWx1ZSBwYWlyIChpZiBubyBrZXkgd2l0aCB0aGUgc2FtZSB2YWx1ZSBleGlzdGVkKS5cblxuICBGb3IgdXNlci1kZWZpbmVkIG9iamVjdHMsIHRoZSAiX19zZXRpdGVtX18oKSIgbWV0aG9kIGlzIGNhbGxlZCB3aXRoXG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2xpY2luZzogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0XG4gIChzdWNoIGFzIGEgbGlzdCkuICBUaGUgYXNzaWduZWQgb2JqZWN0IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9iamVjdFxuICBvZiB0aGUgc2FtZSB0eXBlLiAgTmV4dCwgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZCBleHByZXNzaW9ucyBhcmVcbiAgZXZhbHVhdGVkLCBpbnNvZmFyIHRoZXkgYXJlIHByZXNlbnQ7IGRlZmF1bHRzIGFyZSB6ZXJvIGFuZCB0aGVcbiAgc2VxdWVuY2VcJ3MgbGVuZ3RoLiAgVGhlIGJvdW5kcyBzaG91bGQgZXZhbHVhdGUgdG8gaW50ZWdlcnMuIElmXG4gIGVpdGhlciBib3VuZCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZVxuICByZXN1bHRpbmcgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGgsIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZVxuICB0aGUgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZlxuICB0aGUgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIHRhcmdldFxuICBzZXF1ZW5jZSBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHMgYmV0d2VlblxudGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NpbXVsdGFuZW91c1wnIChmb3JcbmV4YW1wbGUgImEsIGIgPSBiLCBhIiBzd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlXG5jb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvIHZhcmlhYmxlcyBvY2N1ciBsZWZ0LXRvLXJpZ2h0LCBzb21ldGltZXNcbnJlc3VsdGluZyBpbiBjb25mdXNpb24uICBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBwcmludHNcbiJbMCwgMl0iOlxuXG4gICB4ID0gWzAsIDFdXG4gICBpID0gMFxuICAgaSwgeFtpXSA9IDEsIDIgICAgICAgICAjIGkgaXMgdXBkYXRlZCwgdGhlbiB4W2ldIGlzIHVwZGF0ZWRcbiAgIHByaW50KHgpXG5cblNlZSBhbHNvOiAqKlBFUCAzMTMyKiogLSBFeHRlbmRlZCBJdGVyYWJsZSBVbnBhY2tpbmdcblxuICAgICBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlICIqdGFyZ2V0IiBmZWF0dXJlLlxuXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIGNvbWJpbmF0aW9uLCBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQsIG9mIGFcbmJpbmFyeSBvcGVyYXRpb24gYW5kIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50OlxuXG4gICBhdWdtZW50ZWRfYXNzaWdubWVudF9zdG10IDo6PSBhdWd0YXJnZXQgYXVnb3AgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICBhdWd0YXJnZXQgICAgICAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyIHwgYXR0cmlidXRlcmVmIHwgc3Vic2NyaXB0aW9uIHwgc2xpY2luZ1xuICAgYXVnb3AgICAgICAgICAgICAgICAgICAgICA6Oj0gIis9IiB8ICItPSIgfCAiKj0iIHwgIkA9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgb2YgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSAieCArPSAxIiBjYW4gYmUgcmV3cml0dGVuIGFzXG4ieCA9IHggKyAxIiB0byBhY2hpZXZlIGEgc2ltaWxhciwgYnV0IG5vdCBleGFjdGx5IGVxdWFsIGVmZmVjdC4gSW4gdGhlXG5hdWdtZW50ZWQgdmVyc2lvbiwgIngiIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW4gcG9zc2libGUsXG50aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0IHJhdGhlciB0aGFuXG5jcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsIHRoZSBvbGQgb2JqZWN0XG5pcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5Vbmxpa2Ugbm9ybWFsIGFzc2lnbm1lbnRzLCBhdWdtZW50ZWQgYXNzaWdubWVudHMgZXZhbHVhdGUgdGhlIGxlZnQtXG5oYW5kIHNpZGUgKmJlZm9yZSogZXZhbHVhdGluZyB0aGUgcmlnaHQtaGFuZCBzaWRlLiAgRm9yIGV4YW1wbGUsICJhW2ldXG4rPSBmKHgpIiBmaXJzdCBsb29rcy11cCAiYVtpXSIsIHRoZW4gaXQgZXZhbHVhdGVzICJmKHgpIiBhbmQgcGVyZm9ybXNcbnRoZSBhZGRpdGlvbiwgYW5kIGxhc3RseSwgaXQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byAiYVtpXSIuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAogICdhdG9tLWlkZW50aWZpZXJzJzogdSdcbklkZW50aWZpZXJzIChOYW1lcylcbioqKioqKioqKioqKioqKioqKipcblxuQW4gaWRlbnRpZmllciBvY2N1cnJpbmcgYXMgYW4gYXRvbSBpcyBhIG5hbWUuICBTZWUgc2VjdGlvblxuKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyogZm9yIGxleGljYWwgZGVmaW5pdGlvbiBhbmQgc2VjdGlvbiAqTmFtaW5nXG5hbmQgYmluZGluZyogZm9yIGRvY3VtZW50YXRpb24gb2YgbmFtaW5nIGFuZCBiaW5kaW5nLlxuXG5XaGVuIHRoZSBuYW1lIGlzIGJvdW5kIHRvIGFuIG9iamVjdCwgZXZhbHVhdGlvbiBvZiB0aGUgYXRvbSB5aWVsZHNcbnRoYXQgb2JqZWN0LiBXaGVuIGEgbmFtZSBpcyBub3QgYm91bmQsIGFuIGF0dGVtcHQgdG8gZXZhbHVhdGUgaXRcbnJhaXNlcyBhICJOYW1lRXJyb3IiIGV4Y2VwdGlvbi5cblxuKipQcml2YXRlIG5hbWUgbWFuZ2xpbmc6KiogV2hlbiBhbiBpZGVudGlmaWVyIHRoYXQgdGV4dHVhbGx5IG9jY3VycyBpblxuYSBjbGFzcyBkZWZpbml0aW9uIGJlZ2lucyB3aXRoIHR3byBvciBtb3JlIHVuZGVyc2NvcmUgY2hhcmFjdGVycyBhbmRcbmRvZXMgbm90IGVuZCBpbiB0d28gb3IgbW9yZSB1bmRlcnNjb3JlcywgaXQgaXMgY29uc2lkZXJlZCBhICpwcml2YXRlXG5uYW1lKiBvZiB0aGF0IGNsYXNzLiBQcml2YXRlIG5hbWVzIGFyZSB0cmFuc2Zvcm1lZCB0byBhIGxvbmdlciBmb3JtXG5iZWZvcmUgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIHRoZW0uICBUaGUgdHJhbnNmb3JtYXRpb24gaW5zZXJ0cyB0aGVcbmNsYXNzIG5hbWUsIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlcyByZW1vdmVkIGFuZCBhIHNpbmdsZSB1bmRlcnNjb3JlXG5pbnNlcnRlZCwgaW4gZnJvbnQgb2YgdGhlIG5hbWUuICBGb3IgZXhhbXBsZSwgdGhlIGlkZW50aWZpZXIgIl9fc3BhbSJcbm9jY3VycmluZyBpbiBhIGNsYXNzIG5hbWVkICJIYW0iIHdpbGwgYmUgdHJhbnNmb3JtZWQgdG8gIl9IYW1fX3NwYW0iLlxuVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3ludGFjdGljYWwgY29udGV4dCBpbiB3aGljaFxudGhlIGlkZW50aWZpZXIgaXMgdXNlZC4gIElmIHRoZSB0cmFuc2Zvcm1lZCBuYW1lIGlzIGV4dHJlbWVseSBsb25nXG4obG9uZ2VyIHRoYW4gMjU1IGNoYXJhY3RlcnMpLCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHRydW5jYXRpb24gbWF5XG5oYXBwZW4uIElmIHRoZSBjbGFzcyBuYW1lIGNvbnNpc3RzIG9ubHkgb2YgdW5kZXJzY29yZXMsIG5vXG50cmFuc2Zvcm1hdGlvbiBpcyBkb25lLlxuJywKICAnYXRvbS1saXRlcmFscyc6IHUiXG5MaXRlcmFsc1xuKioqKioqKipcblxuUHl0aG9uIHN1cHBvcnRzIHN0cmluZyBhbmQgYnl0ZXMgbGl0ZXJhbHMgYW5kIHZhcmlvdXMgbnVtZXJpY1xubGl0ZXJhbHM6XG5cbiAgIGxpdGVyYWwgOjo9IHN0cmluZ2xpdGVyYWwgfCBieXRlc2xpdGVyYWxcbiAgICAgICAgICAgICAgIHwgaW50ZWdlciB8IGZsb2F0bnVtYmVyIHwgaW1hZ251bWJlclxuXG5FdmFsdWF0aW9uIG9mIGEgbGl0ZXJhbCB5aWVsZHMgYW4gb2JqZWN0IG9mIHRoZSBnaXZlbiB0eXBlIChzdHJpbmcsXG5ieXRlcywgaW50ZWdlciwgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBjb21wbGV4IG51bWJlcikgd2l0aCB0aGUgZ2l2ZW5cbnZhbHVlLiAgVGhlIHZhbHVlIG1heSBiZSBhcHByb3hpbWF0ZWQgaW4gdGhlIGNhc2Ugb2YgZmxvYXRpbmcgcG9pbnRcbmFuZCBpbWFnaW5hcnkgKGNvbXBsZXgpIGxpdGVyYWxzLiAgU2VlIHNlY3Rpb24gKkxpdGVyYWxzKiBmb3IgZGV0YWlscy5cblxuQWxsIGxpdGVyYWxzIGNvcnJlc3BvbmQgdG8gaW1tdXRhYmxlIGRhdGEgdHlwZXMsIGFuZCBoZW5jZSB0aGVcbm9iamVjdCdzIGlkZW50aXR5IGlzIGxlc3MgaW1wb3J0YW50IHRoYW4gaXRzIHZhbHVlLiAgTXVsdGlwbGVcbmV2YWx1YXRpb25zIG9mIGxpdGVyYWxzIHdpdGggdGhlIHNhbWUgdmFsdWUgKGVpdGhlciB0aGUgc2FtZVxub2NjdXJyZW5jZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IG9yIGEgZGlmZmVyZW50IG9jY3VycmVuY2UpIG1heSBvYnRhaW5cbnRoZSBzYW1lIG9iamVjdCBvciBhIGRpZmZlcmVudCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZS5cbiIsCiAgJ2F0dHJpYnV0ZS1hY2Nlc3MnOiB1J1xuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mICJ4Lm5hbWUiKSBmb3JcbmNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgInNlbGYiKS4gICJuYW1lIiBpcyB0aGUgYXR0cmlidXRlIG5hbWUuIFRoaXNcbiAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICAiX19nZXRhdHRyX18oKSIgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiAiX19nZXRhdHRyX18oKSIgYW5kICJfX3NldGF0dHJfXygpIi4pIFRoaXMgaXMgZG9uZSBib3RoIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSAiX19nZXRhdHRyX18oKSIgd291bGQgaGF2ZVxuICAgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGUgdGhhdCBhdFxuICAgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnkgbm90XG4gICBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXMgIl9fZ2V0YXR0cl9fKCkiLFxuICAgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzICJfX2dldGF0dHJpYnV0ZV9fKCkiIGVpdGhlclxuICAgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW4gIkF0dHJpYnV0ZUVycm9yIi4gVGhpcyBtZXRob2RcbiAgIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi4gSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluXG4gICB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzc1xuICAgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0byBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvclxuICAgZXhhbXBsZSwgIm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpIi5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsXG4gICAgIG1ldGhvZHMgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXhcbiAgICAgb3IgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgIl9fc2V0YXR0cl9fKCkiIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgICJvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpIi5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgIl9fc2V0YXR0cl9fKCkiIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmICJkZWwgb2JqLm5hbWUiIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiAiZGlyKCkiIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiAiZGlyKCkiIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyAiX19kaWN0X18iLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgIk5vbmUiIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiAiQXR0cmlidXRlRXJyb3IiXG4gICBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblRoZSBhdHRyaWJ1dGUgIl9fb2JqY2xhc3NfXyIgaXMgaW50ZXJwcmV0ZWQgYnkgdGhlICJpbnNwZWN0IiBtb2R1bGUgYXNcbnNwZWNpZnlpbmcgdGhlIGNsYXNzIHdoZXJlIHRoaXMgb2JqZWN0IHdhcyBkZWZpbmVkIChzZXR0aW5nIHRoaXNcbmFwcHJvcHJpYXRlbHkgY2FuIGFzc2lzdCBpbiBydW50aW1lIGludHJvc3BlY3Rpb24gb2YgZHluYW1pYyBjbGFzc1xuYXR0cmlidXRlcykuIEZvciBjYWxsYWJsZXMsIGl0IG1heSBpbmRpY2F0ZSB0aGF0IGFuIGluc3RhbmNlIG9mIHRoZVxuZ2l2ZW4gdHlwZSAob3IgYSBzdWJjbGFzcykgaXMgZXhwZWN0ZWQgb3IgcmVxdWlyZWQgYXMgdGhlIGZpcnN0XG5wb3NpdGlvbmFsIGFyZ3VtZW50IChmb3IgZXhhbXBsZSwgQ1B5dGhvbiBzZXRzIHRoaXMgYXR0cmlidXRlIGZvclxudW5ib3VuZCBtZXRob2RzIHRoYXQgYXJlIGltcGxlbWVudGVkIGluIEMpLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG49PT09PT09PT09PT09PT09PT09PVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIsIGFuZFxuIl9fZGVsZXRlX18oKSIuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsIGl0XG5pcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsICJhLngiIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCAiYS5fX2RpY3RfX1tcJ3hcJ10iLCB0aGVuXG4idHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10iLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbiJ0eXBlKGEpIiBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsICJhLngiLiBIb3dcbnRoZSBhcmd1bWVudHMgYXJlIGFzc2VtYmxlZCBkZXBlbmRzIG9uICJhIjpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgInguX19nZXRfXyhhKSIuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYW4gb2JqZWN0IGluc3RhbmNlLCAiYS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZVxuICAgY2FsbDogInR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSkiLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsICJBLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGNhbGw6XG4gICAiQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKSIuXG5cblN1cGVyIEJpbmRpbmdcbiAgIElmICJhIiBpcyBhbiBpbnN0YW5jZSBvZiAic3VwZXIiLCB0aGVuIHRoZSBiaW5kaW5nICJzdXBlcihCLFxuICAgb2JqKS5tKCkiIHNlYXJjaGVzICJvYmouX19jbGFzc19fLl9fbXJvX18iIGZvciB0aGUgYmFzZSBjbGFzcyAiQSJcbiAgIGltbWVkaWF0ZWx5IHByZWNlZGluZyAiQiIgYW5kIHRoZW4gaW52b2tlcyB0aGUgZGVzY3JpcHRvciB3aXRoIHRoZVxuICAgY2FsbDogIkEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBvYmouX19jbGFzc19fKSIuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiBhbmQgIl9fZGVsZXRlX18oKSIuICBJZiBpdFxuZG9lcyBub3QgZGVmaW5lICJfX2dldF9fKCkiLCB0aGVuIGFjY2Vzc2luZyB0aGUgYXR0cmlidXRlIHdpbGwgcmV0dXJuXG50aGUgZGVzY3JpcHRvciBvYmplY3QgaXRzZWxmIHVubGVzcyB0aGVyZSBpcyBhIHZhbHVlIGluIHRoZSBvYmplY3RcJ3Ncbmluc3RhbmNlIGRpY3Rpb25hcnkuICBJZiB0aGUgZGVzY3JpcHRvciBkZWZpbmVzICJfX3NldF9fKCkiIGFuZC9vclxuIl9fZGVsZXRlX18oKSIsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzIG5laXRoZXIsIGl0IGlzXG5hIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9ycyBkZWZpbmUgYm90aFxuIl9fZ2V0X18oKSIgYW5kICJfX3NldF9fKCkiLCB3aGlsZSBub24tZGF0YSBkZXNjcmlwdG9ycyBoYXZlIGp1c3QgdGhlXG4iX19nZXRfXygpIiBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGggIl9fc2V0X18oKSIgYW5kICJfX2dldF9fKCkiXG5kZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvbiBpbiBhbiBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSW5cbmNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBpbnN0YW5jZXMuXG5cblB5dGhvbiBtZXRob2RzIChpbmNsdWRpbmcgInN0YXRpY21ldGhvZCgpIiBhbmQgImNsYXNzbWV0aG9kKCkiKSBhcmVcbmltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgInByb3BlcnR5KCkiIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgZGF0YSBkZXNjcmlwdG9yLlxuQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGJlaGF2aW9yIG9mIGEgcHJvcGVydHkuXG5cblxuX19zbG90c19fXG49PT09PT09PT1cblxuQnkgZGVmYXVsdCwgaW5zdGFuY2VzIG9mIGNsYXNzZXMgaGF2ZSBhIGRpY3Rpb25hcnkgZm9yIGF0dHJpYnV0ZVxuc3RvcmFnZS4gIFRoaXMgd2FzdGVzIHNwYWNlIGZvciBvYmplY3RzIGhhdmluZyB2ZXJ5IGZldyBpbnN0YW5jZVxudmFyaWFibGVzLiAgVGhlIHNwYWNlIGNvbnN1bXB0aW9uIGNhbiBiZWNvbWUgYWN1dGUgd2hlbiBjcmVhdGluZyBsYXJnZVxubnVtYmVycyBvZiBpbnN0YW5jZXMuXG5cblRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nICpfX3Nsb3RzX18qIGluIGEgY2xhc3NcbmRlZmluaXRpb24uIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mIGluc3RhbmNlXG52YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG8gaG9sZCBhXG52YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpcyBub3RcbmNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbm9iamVjdC5fX3Nsb3RzX19cblxuICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZVxuICAgb2Ygc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgKl9fc2xvdHNfXypcbiAgIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZCBwcmV2ZW50cyB0aGVcbiAgIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvciBlYWNoXG4gICBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzICJBdHRyaWJ1dGVFcnJvciIuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gICJcJ19fZGljdF9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3Nlc1xuICBkZWZpbmluZyAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzXG4gIGluc3RhbmNlcy4gSWYgd2VhayByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkXG4gICJcJ19fd2Vha3JlZl9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlXG4gIGluc3RhbmNlIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGVcbiAgKGV4Y2VwdCBieSByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLlxuICBUaGlzIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgImludCIsICJieXRlcyIgYW5kICJ0dXBsZSIuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5nc1xuICBtYXkgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG4nLAogICdhdHRyaWJ1dGUtcmVmZXJlbmNlcyc6IHUnXG5BdHRyaWJ1dGUgcmVmZXJlbmNlc1xuKioqKioqKioqKioqKioqKioqKipcblxuQW4gYXR0cmlidXRlIHJlZmVyZW5jZSBpcyBhIHByaW1hcnkgZm9sbG93ZWQgYnkgYSBwZXJpb2QgYW5kIGEgbmFtZTpcblxuICAgYXR0cmlidXRlcmVmIDo6PSBwcmltYXJ5ICIuIiBpZGVudGlmaWVyXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IG9mIGEgdHlwZSB0aGF0IHN1cHBvcnRzXG5hdHRyaWJ1dGUgcmVmZXJlbmNlcywgd2hpY2ggbW9zdCBvYmplY3RzIGRvLiAgVGhpcyBvYmplY3QgaXMgdGhlblxuYXNrZWQgdG8gcHJvZHVjZSB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXMgdGhlIGlkZW50aWZpZXIuICBUaGlzXG5wcm9kdWN0aW9uIGNhbiBiZSBjdXN0b21pemVkIGJ5IG92ZXJyaWRpbmcgdGhlICJfX2dldGF0dHJfXygpIiBtZXRob2QuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgZXhjZXB0aW9uICJBdHRyaWJ1dGVFcnJvciIgaXNcbnJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIHR5cGUgYW5kIHZhbHVlIG9mIHRoZSBvYmplY3QgcHJvZHVjZWQgaXNcbmRldGVybWluZWQgYnkgdGhlIG9iamVjdC4gIE11bHRpcGxlIGV2YWx1YXRpb25zIG9mIHRoZSBzYW1lIGF0dHJpYnV0ZVxucmVmZXJlbmNlIG1heSB5aWVsZCBkaWZmZXJlbnQgb2JqZWN0cy5cbicsCi0gJ2F1Z2Fzc2lnbic6IHUnXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgb2YgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSAieCArPSAxIiBjYW4gYmUgcmV3cml0dGVuIGFzXG4ieCA9IHggKyAxIiB0byBhY2hpZXZlIGEgc2ltaWxhciwgYnV0IG5vdCBleGFjdGx5IGVxdWFsIGVmZmVjdC4gSW4gdGhlXG5hdWdtZW50ZWQgdmVyc2lvbiwgIngiIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW4gcG9zc2libGUsXG50aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0IHJhdGhlciB0aGFuXG5jcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsIHRoZSBvbGQgb2JqZWN0XG5pcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5Vbmxpa2Ugbm9ybWFsIGFzc2lnbm1lbnRzLCBhdWdtZW50ZWQgYXNzaWdubWVudHMgZXZhbHVhdGUgdGhlIGxlZnQtXG5oYW5kIHNpZGUgKmJlZm9yZSogZXZhbHVhdGluZyB0aGUgcmlnaHQtaGFuZCBzaWRlLiAgRm9yIGV4YW1wbGUsICJhW2ldXG4rPSBmKHgpIiBmaXJzdCBsb29rcy11cCAiYVtpXSIsIHRoZW4gaXQgZXZhbHVhdGVzICJmKHgpIiBhbmQgcGVyZm9ybXNcbnRoZSBhZGRpdGlvbiwgYW5kIGxhc3RseSwgaXQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byAiYVtpXSIuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAotICdiaW5hcnknOiB1J1xuQmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBoYXZlIHRoZSBjb252ZW50aW9uYWwgcHJpb3JpdHlcbmxldmVscy4gIE5vdGUgdGhhdCBzb21lIG9mIHRoZXNlIG9wZXJhdGlvbnMgYWxzbyBhcHBseSB0byBjZXJ0YWluIG5vbi1cbm51bWVyaWMgdHlwZXMuICBBcGFydCBmcm9tIHRoZSBwb3dlciBvcGVyYXRvciwgdGhlcmUgYXJlIG9ubHkgdHdvXG5sZXZlbHMsIG9uZSBmb3IgbXVsdGlwbGljYXRpdmUgb3BlcmF0b3JzIGFuZCBvbmUgZm9yIGFkZGl0aXZlXG5vcGVyYXRvcnM6XG5cbiAgIG1fZXhwciA6Oj0gdV9leHByIHwgbV9leHByICIqIiB1X2V4cHIgfCBtX2V4cHIgIi8vIiB1X2V4cHIgfCBtX2V4cHIgIi8iIHVfZXhwclxuICAgICAgICAgICAgICB8IG1fZXhwciAiJSIgdV9leHByXG4gICBhX2V4cHIgOjo9IG1fZXhwciB8IGFfZXhwciAiKyIgbV9leHByIHwgYV9leHByICItIiBtX2V4cHJcblxuVGhlICIqIiAobXVsdGlwbGljYXRpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgcHJvZHVjdCBvZiBpdHMgYXJndW1lbnRzLlxuVGhlIGFyZ3VtZW50cyBtdXN0IGVpdGhlciBib3RoIGJlIG51bWJlcnMsIG9yIG9uZSBhcmd1bWVudCBtdXN0IGJlIGFuXG5pbnRlZ2VyIGFuZCB0aGUgb3RoZXIgbXVzdCBiZSBhIHNlcXVlbmNlLiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZVxubnVtYmVycyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUgYW5kIHRoZW4gbXVsdGlwbGllZCB0b2dldGhlci5cbkluIHRoZSBsYXR0ZXIgY2FzZSwgc2VxdWVuY2UgcmVwZXRpdGlvbiBpcyBwZXJmb3JtZWQ7IGEgbmVnYXRpdmVcbnJlcGV0aXRpb24gZmFjdG9yIHlpZWxkcyBhbiBlbXB0eSBzZXF1ZW5jZS5cblxuVGhlICIvIiAoZGl2aXNpb24pIGFuZCAiLy8iIChmbG9vciBkaXZpc2lvbikgb3BlcmF0b3JzIHlpZWxkIHRoZVxucXVvdGllbnQgb2YgdGhlaXIgYXJndW1lbnRzLiAgVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBmaXJzdFxuY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuIERpdmlzaW9uIG9mIGludGVnZXJzIHlpZWxkcyBhIGZsb2F0LCB3aGlsZVxuZmxvb3IgZGl2aXNpb24gb2YgaW50ZWdlcnMgcmVzdWx0cyBpbiBhbiBpbnRlZ2VyOyB0aGUgcmVzdWx0IGlzIHRoYXRcbm9mIG1hdGhlbWF0aWNhbCBkaXZpc2lvbiB3aXRoIHRoZSBcJ2Zsb29yXCcgZnVuY3Rpb24gYXBwbGllZCB0byB0aGVcbnJlc3VsdC4gIERpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHRoZSAiWmVyb0RpdmlzaW9uRXJyb3IiIGV4Y2VwdGlvbi5cblxuVGhlICIlIiAobW9kdWxvKSBvcGVyYXRvciB5aWVsZHMgdGhlIHJlbWFpbmRlciBmcm9tIHRoZSBkaXZpc2lvbiBvZlxudGhlIGZpcnN0IGFyZ3VtZW50IGJ5IHRoZSBzZWNvbmQuICBUaGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGZpcnN0XG5jb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIEEgemVybyByaWdodCBhcmd1bWVudCByYWlzZXMgdGhlXG4iWmVyb0RpdmlzaW9uRXJyb3IiIGV4Y2VwdGlvbi4gIFRoZSBhcmd1bWVudHMgbWF5IGJlIGZsb2F0aW5nIHBvaW50XG5udW1iZXJzLCBlLmcuLCAiMy4xNCUwLjciIGVxdWFscyAiMC4zNCIgKHNpbmNlICIzLjE0IiBlcXVhbHMgIjQqMC43ICtcbjAuMzQiLikgIFRoZSBtb2R1bG8gb3BlcmF0b3IgYWx3YXlzIHlpZWxkcyBhIHJlc3VsdCB3aXRoIHRoZSBzYW1lIHNpZ25cbmFzIGl0cyBzZWNvbmQgb3BlcmFuZCAob3IgemVybyk7IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgcmVzdWx0IGlzXG5zdHJpY3RseSBzbWFsbGVyIHRoYW4gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBbMV0uXG5cblRoZSBmbG9vciBkaXZpc2lvbiBhbmQgbW9kdWxvIG9wZXJhdG9ycyBhcmUgY29ubmVjdGVkIGJ5IHRoZSBmb2xsb3dpbmdcbmlkZW50aXR5OiAieCA9PSAoeC8veSkqeSArICh4JXkpIi4gIEZsb29yIGRpdmlzaW9uIGFuZCBtb2R1bG8gYXJlIGFsc29cbmNvbm5lY3RlZCB3aXRoIHRoZSBidWlsdC1pbiBmdW5jdGlvbiAiZGl2bW9kKCkiOiAiZGl2bW9kKHgsIHkpID09XG4oeC8veSwgeCV5KSIuIFsyXS5cblxuSW4gYWRkaXRpb24gdG8gcGVyZm9ybWluZyB0aGUgbW9kdWxvIG9wZXJhdGlvbiBvbiBudW1iZXJzLCB0aGUgIiUiXG5vcGVyYXRvciBpcyBhbHNvIG92ZXJsb2FkZWQgYnkgc3RyaW5nIG9iamVjdHMgdG8gcGVyZm9ybSBvbGQtc3R5bGVcbnN0cmluZyBmb3JtYXR0aW5nIChhbHNvIGtub3duIGFzIGludGVycG9sYXRpb24pLiAgVGhlIHN5bnRheCBmb3JcbnN0cmluZyBmb3JtYXR0aW5nIGlzIGRlc2NyaWJlZCBpbiB0aGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlLFxuc2VjdGlvbiAqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKi5cblxuVGhlIGZsb29yIGRpdmlzaW9uIG9wZXJhdG9yLCB0aGUgbW9kdWxvIG9wZXJhdG9yLCBhbmQgdGhlICJkaXZtb2QoKSJcbmZ1bmN0aW9uIGFyZSBub3QgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzLiAgSW5zdGVhZCwgY29udmVydCB0byBhXG5mbG9hdGluZyBwb2ludCBudW1iZXIgdXNpbmcgdGhlICJhYnMoKSIgZnVuY3Rpb24gaWYgYXBwcm9wcmlhdGUuXG5cblRoZSAiKyIgKGFkZGl0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIHN1bSBvZiBpdHMgYXJndW1lbnRzLiAgVGhlXG5hcmd1bWVudHMgbXVzdCBlaXRoZXIgYm90aCBiZSBudW1iZXJzIG9yIGJvdGggYmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lXG50eXBlLiAgSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgbnVtYmVycyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGVcbmFuZCB0aGVuIGFkZGVkIHRvZ2V0aGVyLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBzZXF1ZW5jZXMgYXJlXG5jb25jYXRlbmF0ZWQuXG5cblRoZSAiLSIgKHN1YnRyYWN0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIGRpZmZlcmVuY2Ugb2YgaXRzIGFyZ3VtZW50cy5cblRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgZmlyc3QgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuXG4nLAorICdhdWdhc3NpZ24nOiB1J1xuQXVnbWVudGVkIGFzc2lnbm1lbnQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgY29tYmluYXRpb24sIGluIGEgc2luZ2xlIHN0YXRlbWVudCwgb2YgYVxuYmluYXJ5IG9wZXJhdGlvbiBhbmQgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQ6XG5cbiAgIGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXQgOjo9IGF1Z3RhcmdldCBhdWdvcCAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIGF1Z3RhcmdldCAgICAgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXIgfCBhdHRyaWJ1dGVyZWYgfCBzdWJzY3JpcHRpb24gfCBzbGljaW5nXG4gICBhdWdvcCAgICAgICAgICAgICAgICAgICAgIDo6PSAiKz0iIHwgIi09IiB8ICIqPSIgfCAiQD0iIHwgIi89IiB8ICIvLz0iIHwgIiU9IiB8ICIqKj0iXG4gICAgICAgICAgICAgfCAiPj49IiB8ICI8PD0iIHwgIiY9IiB8ICJePSIgfCAifD0iXG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBvZiB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV2YWx1YXRlcyB0aGUgdGFyZ2V0ICh3aGljaCwgdW5saWtlIG5vcm1hbFxuYXNzaWdubWVudCBzdGF0ZW1lbnRzLCBjYW5ub3QgYmUgYW4gdW5wYWNraW5nKSBhbmQgdGhlIGV4cHJlc3Npb25cbmxpc3QsIHBlcmZvcm1zIHRoZSBiaW5hcnkgb3BlcmF0aW9uIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIGFzc2lnbm1lbnRcbm9uIHRoZSB0d28gb3BlcmFuZHMsIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgdG8gdGhlIG9yaWdpbmFsIHRhcmdldC5cblRoZSB0YXJnZXQgaXMgb25seSBldmFsdWF0ZWQgb25jZS5cblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBsaWtlICJ4ICs9IDEiIGNhbiBiZSByZXdyaXR0ZW4gYXNcbiJ4ID0geCArIDEiIHRvIGFjaGlldmUgYSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgZWZmZWN0LiBJbiB0aGVcbmF1Z21lbnRlZCB2ZXJzaW9uLCAieCIgaXMgb25seSBldmFsdWF0ZWQgb25jZS4gQWxzbywgd2hlbiBwb3NzaWJsZSxcbnRoZSBhY3R1YWwgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCAqaW4tcGxhY2UqLCBtZWFuaW5nIHRoYXQgcmF0aGVyIHRoYW5cbmNyZWF0aW5nIGEgbmV3IG9iamVjdCBhbmQgYXNzaWduaW5nIHRoYXQgdG8gdGhlIHRhcmdldCwgdGhlIG9sZCBvYmplY3RcbmlzIG1vZGlmaWVkIGluc3RlYWQuXG5cblVubGlrZSBub3JtYWwgYXNzaWdubWVudHMsIGF1Z21lbnRlZCBhc3NpZ25tZW50cyBldmFsdWF0ZSB0aGUgbGVmdC1cbmhhbmQgc2lkZSAqYmVmb3JlKiBldmFsdWF0aW5nIHRoZSByaWdodC1oYW5kIHNpZGUuICBGb3IgZXhhbXBsZSwgImFbaV1cbis9IGYoeCkiIGZpcnN0IGxvb2tzLXVwICJhW2ldIiwgdGhlbiBpdCBldmFsdWF0ZXMgImYoeCkiIGFuZCBwZXJmb3Jtc1xudGhlIGFkZGl0aW9uLCBhbmQgbGFzdGx5LCBpdCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvICJhW2ldIi5cblxuV2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFzc2lnbmluZyB0byB0dXBsZXMgYW5kIG11bHRpcGxlIHRhcmdldHMgaW4gYVxuc2luZ2xlIHN0YXRlbWVudCwgdGhlIGFzc2lnbm1lbnQgZG9uZSBieSBhdWdtZW50ZWQgYXNzaWdubWVudFxuc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgYXNzaWdubWVudHMuIFNpbWlsYXJseSxcbndpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUgKmluLXBsYWNlKiBiZWhhdmlvciwgdGhlIGJpbmFyeVxub3BlcmF0aW9uIHBlcmZvcm1lZCBieSBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsXG5iaW5hcnkgb3BlcmF0aW9ucy5cblxuRm9yIHRhcmdldHMgd2hpY2ggYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGUgc2FtZSAqY2F2ZWF0IGFib3V0XG5jbGFzcyBhbmQgaW5zdGFuY2UgYXR0cmlidXRlcyogYXBwbGllcyBhcyBmb3IgcmVndWxhciBhc3NpZ25tZW50cy5cbicsCisgJ2JpbmFyeSc6IHUnXG5CaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBiaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGhhdmUgdGhlIGNvbnZlbnRpb25hbCBwcmlvcml0eVxubGV2ZWxzLiAgTm90ZSB0aGF0IHNvbWUgb2YgdGhlc2Ugb3BlcmF0aW9ucyBhbHNvIGFwcGx5IHRvIGNlcnRhaW4gbm9uLVxubnVtZXJpYyB0eXBlcy4gIEFwYXJ0IGZyb20gdGhlIHBvd2VyIG9wZXJhdG9yLCB0aGVyZSBhcmUgb25seSB0d29cbmxldmVscywgb25lIGZvciBtdWx0aXBsaWNhdGl2ZSBvcGVyYXRvcnMgYW5kIG9uZSBmb3IgYWRkaXRpdmVcbm9wZXJhdG9yczpcblxuICAgbV9leHByIDo6PSB1X2V4cHIgfCBtX2V4cHIgIioiIHVfZXhwciB8IG1fZXhwciAiQCIgbV9leHByIHxcbiAgICAgICAgICAgICAgbV9leHByICIvLyIgdV9leHByfCBtX2V4cHIgIi8iIHVfZXhwciB8XG4gICAgICAgICAgICAgIG1fZXhwciAiJSIgdV9leHByXG4gICBhX2V4cHIgOjo9IG1fZXhwciB8IGFfZXhwciAiKyIgbV9leHByIHwgYV9leHByICItIiBtX2V4cHJcblxuVGhlICIqIiAobXVsdGlwbGljYXRpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgcHJvZHVjdCBvZiBpdHMgYXJndW1lbnRzLlxuVGhlIGFyZ3VtZW50cyBtdXN0IGVpdGhlciBib3RoIGJlIG51bWJlcnMsIG9yIG9uZSBhcmd1bWVudCBtdXN0IGJlIGFuXG5pbnRlZ2VyIGFuZCB0aGUgb3RoZXIgbXVzdCBiZSBhIHNlcXVlbmNlLiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZVxubnVtYmVycyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUgYW5kIHRoZW4gbXVsdGlwbGllZCB0b2dldGhlci5cbkluIHRoZSBsYXR0ZXIgY2FzZSwgc2VxdWVuY2UgcmVwZXRpdGlvbiBpcyBwZXJmb3JtZWQ7IGEgbmVnYXRpdmVcbnJlcGV0aXRpb24gZmFjdG9yIHlpZWxkcyBhbiBlbXB0eSBzZXF1ZW5jZS5cblxuVGhlICJAIiAoYXQpIG9wZXJhdG9yIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIG1hdHJpeFxubXVsdGlwbGljYXRpb24uICBObyBidWlsdGluIFB5dGhvbiB0eXBlcyBpbXBsZW1lbnQgdGhpcyBvcGVyYXRvci5cblxuTmV3IGluIHZlcnNpb24gMy41LlxuXG5UaGUgIi8iIChkaXZpc2lvbikgYW5kICIvLyIgKGZsb29yIGRpdmlzaW9uKSBvcGVyYXRvcnMgeWllbGQgdGhlXG5xdW90aWVudCBvZiB0aGVpciBhcmd1bWVudHMuICBUaGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGZpcnN0XG5jb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gRGl2aXNpb24gb2YgaW50ZWdlcnMgeWllbGRzIGEgZmxvYXQsIHdoaWxlXG5mbG9vciBkaXZpc2lvbiBvZiBpbnRlZ2VycyByZXN1bHRzIGluIGFuIGludGVnZXI7IHRoZSByZXN1bHQgaXMgdGhhdFxub2YgbWF0aGVtYXRpY2FsIGRpdmlzaW9uIHdpdGggdGhlIFwnZmxvb3JcJyBmdW5jdGlvbiBhcHBsaWVkIHRvIHRoZVxucmVzdWx0LiAgRGl2aXNpb24gYnkgemVybyByYWlzZXMgdGhlICJaZXJvRGl2aXNpb25FcnJvciIgZXhjZXB0aW9uLlxuXG5UaGUgIiUiIChtb2R1bG8pIG9wZXJhdG9yIHlpZWxkcyB0aGUgcmVtYWluZGVyIGZyb20gdGhlIGRpdmlzaW9uIG9mXG50aGUgZmlyc3QgYXJndW1lbnQgYnkgdGhlIHNlY29uZC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgZmlyc3RcbmNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgQSB6ZXJvIHJpZ2h0IGFyZ3VtZW50IHJhaXNlcyB0aGVcbiJaZXJvRGl2aXNpb25FcnJvciIgZXhjZXB0aW9uLiAgVGhlIGFyZ3VtZW50cyBtYXkgYmUgZmxvYXRpbmcgcG9pbnRcbm51bWJlcnMsIGUuZy4sICIzLjE0JTAuNyIgZXF1YWxzICIwLjM0IiAoc2luY2UgIjMuMTQiIGVxdWFscyAiNCowLjcgK1xuMC4zNCIuKSAgVGhlIG1vZHVsbyBvcGVyYXRvciBhbHdheXMgeWllbGRzIGEgcmVzdWx0IHdpdGggdGhlIHNhbWUgc2lnblxuYXMgaXRzIHNlY29uZCBvcGVyYW5kIChvciB6ZXJvKTsgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSByZXN1bHQgaXNcbnN0cmljdGx5IHNtYWxsZXIgdGhhbiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kIFsxXS5cblxuVGhlIGZsb29yIGRpdmlzaW9uIGFuZCBtb2R1bG8gb3BlcmF0b3JzIGFyZSBjb25uZWN0ZWQgYnkgdGhlIGZvbGxvd2luZ1xuaWRlbnRpdHk6ICJ4ID09ICh4Ly95KSp5ICsgKHgleSkiLiAgRmxvb3IgZGl2aXNpb24gYW5kIG1vZHVsbyBhcmUgYWxzb1xuY29ubmVjdGVkIHdpdGggdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJkaXZtb2QoKSI6ICJkaXZtb2QoeCwgeSkgPT1cbih4Ly95LCB4JXkpIi4gWzJdLlxuXG5JbiBhZGRpdGlvbiB0byBwZXJmb3JtaW5nIHRoZSBtb2R1bG8gb3BlcmF0aW9uIG9uIG51bWJlcnMsIHRoZSAiJSJcbm9wZXJhdG9yIGlzIGFsc28gb3ZlcmxvYWRlZCBieSBzdHJpbmcgb2JqZWN0cyB0byBwZXJmb3JtIG9sZC1zdHlsZVxuc3RyaW5nIGZvcm1hdHRpbmcgKGFsc28ga25vd24gYXMgaW50ZXJwb2xhdGlvbikuICBUaGUgc3ludGF4IGZvclxuc3RyaW5nIGZvcm1hdHRpbmcgaXMgZGVzY3JpYmVkIGluIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UsXG5zZWN0aW9uICpwcmludGYtc3R5bGUgU3RyaW5nIEZvcm1hdHRpbmcqLlxuXG5UaGUgZmxvb3IgZGl2aXNpb24gb3BlcmF0b3IsIHRoZSBtb2R1bG8gb3BlcmF0b3IsIGFuZCB0aGUgImRpdm1vZCgpIlxuZnVuY3Rpb24gYXJlIG5vdCBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMuICBJbnN0ZWFkLCBjb252ZXJ0IHRvIGFcbmZsb2F0aW5nIHBvaW50IG51bWJlciB1c2luZyB0aGUgImFicygpIiBmdW5jdGlvbiBpZiBhcHByb3ByaWF0ZS5cblxuVGhlICIrIiAoYWRkaXRpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgc3VtIG9mIGl0cyBhcmd1bWVudHMuICBUaGVcbmFyZ3VtZW50cyBtdXN0IGVpdGhlciBib3RoIGJlIG51bWJlcnMgb3IgYm90aCBiZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWVcbnR5cGUuICBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZVxuYW5kIHRoZW4gYWRkZWQgdG9nZXRoZXIuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHNlcXVlbmNlcyBhcmVcbmNvbmNhdGVuYXRlZC5cblxuVGhlICItIiAoc3VidHJhY3Rpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgZGlmZmVyZW5jZSBvZiBpdHMgYXJndW1lbnRzLlxuVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBmaXJzdCBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS5cbicsCiAgJ2JpdHdpc2UnOiB1J1xuQmluYXJ5IGJpdHdpc2Ugb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5FYWNoIG9mIHRoZSB0aHJlZSBiaXR3aXNlIG9wZXJhdGlvbnMgaGFzIGEgZGlmZmVyZW50IHByaW9yaXR5IGxldmVsOlxuXG4gICBhbmRfZXhwciA6Oj0gc2hpZnRfZXhwciB8IGFuZF9leHByICImIiBzaGlmdF9leHByXG4gICB4b3JfZXhwciA6Oj0gYW5kX2V4cHIgfCB4b3JfZXhwciAiXiIgYW5kX2V4cHJcbiAgIG9yX2V4cHIgIDo6PSB4b3JfZXhwciB8IG9yX2V4cHIgInwiIHhvcl9leHByXG5cblRoZSAiJiIgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIEFORCBvZiBpdHMgYXJndW1lbnRzLCB3aGljaCBtdXN0XG5iZSBpbnRlZ2Vycy5cblxuVGhlICJeIiBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgWE9SIChleGNsdXNpdmUgT1IpIG9mIGl0c1xuYXJndW1lbnRzLCB3aGljaCBtdXN0IGJlIGludGVnZXJzLlxuXG5UaGUgInwiIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSAoaW5jbHVzaXZlKSBPUiBvZiBpdHMgYXJndW1lbnRzLFxud2hpY2ggbXVzdCBiZSBpbnRlZ2Vycy5cbicsCiAgJ2JsdGluLWNvZGUtb2JqZWN0cyc6IHUnXG5Db2RlIE9iamVjdHNcbioqKioqKioqKioqKlxuXG5Db2RlIG9iamVjdHMgYXJlIHVzZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIHRvIHJlcHJlc2VudCAicHNldWRvLVxuY29tcGlsZWQiIGV4ZWN1dGFibGUgUHl0aG9uIGNvZGUgc3VjaCBhcyBhIGZ1bmN0aW9uIGJvZHkuIFRoZXkgZGlmZmVyXG5mcm9tIGZ1bmN0aW9uIG9iamVjdHMgYmVjYXVzZSB0aGV5IGRvblwndCBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZWlyXG5nbG9iYWwgZXhlY3V0aW9uIGVudmlyb25tZW50LiAgQ29kZSBvYmplY3RzIGFyZSByZXR1cm5lZCBieSB0aGUgYnVpbHQtXG5pbiAiY29tcGlsZSgpIiBmdW5jdGlvbiBhbmQgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIGZ1bmN0aW9uIG9iamVjdHNcbnRocm91Z2ggdGhlaXIgIl9fY29kZV9fIiBhdHRyaWJ1dGUuIFNlZSBhbHNvIHRoZSAiY29kZSIgbW9kdWxlLlxuXG5BIGNvZGUgb2JqZWN0IGNhbiBiZSBleGVjdXRlZCBvciBldmFsdWF0ZWQgYnkgcGFzc2luZyBpdCAoaW5zdGVhZCBvZiBhXG5zb3VyY2Ugc3RyaW5nKSB0byB0aGUgImV4ZWMoKSIgb3IgImV2YWwoKSIgIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuU2VlICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKICAnYmx0aW4tZWxsaXBzaXMtb2JqZWN0JzogdSdcblRoZSBFbGxpcHNpcyBPYmplY3RcbioqKioqKioqKioqKioqKioqKipcblxuVGhpcyBvYmplY3QgaXMgY29tbW9ubHkgdXNlZCBieSBzbGljaW5nIChzZWUgKlNsaWNpbmdzKikuICBJdCBzdXBwb3J0c1xubm8gc3BlY2lhbCBvcGVyYXRpb25zLiAgVGhlcmUgaXMgZXhhY3RseSBvbmUgZWxsaXBzaXMgb2JqZWN0LCBuYW1lZFxuIkVsbGlwc2lzIiAoYSBidWlsdC1pbiBuYW1lKS4gICJ0eXBlKEVsbGlwc2lzKSgpIiBwcm9kdWNlcyB0aGVcbiJFbGxpcHNpcyIgc2luZ2xldG9uLlxuXG5JdCBpcyB3cml0dGVuIGFzICJFbGxpcHNpcyIgb3IgIi4uLiIuXG4nLApAQCAtMTYsNjQgKzE2LDY0IEBACiAgJ2Jvb2xlYW5zJzogdSdcbkJvb2xlYW4gb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqXG5cbiAgIG9yX3Rlc3QgIDo6PSBhbmRfdGVzdCB8IG9yX3Rlc3QgIm9yIiBhbmRfdGVzdFxuICAgYW5kX3Rlc3QgOjo9IG5vdF90ZXN0IHwgYW5kX3Rlc3QgImFuZCIgbm90X3Rlc3RcbiAgIG5vdF90ZXN0IDo6PSBjb21wYXJpc29uIHwgIm5vdCIgbm90X3Rlc3RcblxuSW4gdGhlIGNvbnRleHQgb2YgQm9vbGVhbiBvcGVyYXRpb25zLCBhbmQgYWxzbyB3aGVuIGV4cHJlc3Npb25zIGFyZVxudXNlZCBieSBjb250cm9sIGZsb3cgc3RhdGVtZW50cywgdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIGludGVycHJldGVkXG5hcyBmYWxzZTogIkZhbHNlIiwgIk5vbmUiLCBudW1lcmljIHplcm8gb2YgYWxsIHR5cGVzLCBhbmQgZW1wdHlcbnN0cmluZ3MgYW5kIGNvbnRhaW5lcnMgKGluY2x1ZGluZyBzdHJpbmdzLCB0dXBsZXMsIGxpc3RzLFxuZGljdGlvbmFyaWVzLCBzZXRzIGFuZCBmcm96ZW5zZXRzKS4gIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGludGVycHJldGVkXG5hcyB0cnVlLiAgVXNlci1kZWZpbmVkIG9iamVjdHMgY2FuIGN1c3RvbWl6ZSB0aGVpciB0cnV0aCB2YWx1ZSBieVxucHJvdmlkaW5nIGEgIl9fYm9vbF9fKCkiIG1ldGhvZC5cblxuVGhlIG9wZXJhdG9yICJub3QiIHlpZWxkcyAiVHJ1ZSIgaWYgaXRzIGFyZ3VtZW50IGlzIGZhbHNlLCAiRmFsc2UiXG5vdGhlcndpc2UuXG5cblRoZSBleHByZXNzaW9uICJ4IGFuZCB5IiBmaXJzdCBldmFsdWF0ZXMgKngqOyBpZiAqeCogaXMgZmFsc2UsIGl0c1xudmFsdWUgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgKnkqIGlzIGV2YWx1YXRlZCBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZVxuaXMgcmV0dXJuZWQuXG5cblRoZSBleHByZXNzaW9uICJ4IG9yIHkiIGZpcnN0IGV2YWx1YXRlcyAqeCo7IGlmICp4KiBpcyB0cnVlLCBpdHMgdmFsdWVcbmlzIHJldHVybmVkOyBvdGhlcndpc2UsICp5KiBpcyBldmFsdWF0ZWQgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgaXNcbnJldHVybmVkLlxuXG4oTm90ZSB0aGF0IG5laXRoZXIgImFuZCIgbm9yICJvciIgcmVzdHJpY3QgdGhlIHZhbHVlIGFuZCB0eXBlIHRoZXlcbnJldHVybiB0byAiRmFsc2UiIGFuZCAiVHJ1ZSIsIGJ1dCByYXRoZXIgcmV0dXJuIHRoZSBsYXN0IGV2YWx1YXRlZFxuYXJndW1lbnQuICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwsIGUuZy4sIGlmICJzIiBpcyBhIHN0cmluZyB0aGF0XG5zaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBkZWZhdWx0IHZhbHVlIGlmIGl0IGlzIGVtcHR5LCB0aGUgZXhwcmVzc2lvblxuInMgb3IgXCdmb29cJyIgeWllbGRzIHRoZSBkZXNpcmVkIHZhbHVlLiAgQmVjYXVzZSAibm90IiBoYXMgdG8gY3JlYXRlIGFcbm5ldyB2YWx1ZSwgaXQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBpdHNcbmFyZ3VtZW50IChmb3IgZXhhbXBsZSwgIm5vdCBcJ2Zvb1wnIiBwcm9kdWNlcyAiRmFsc2UiIHJhdGhlciB0aGFuICJcJ1wnIi4pXG4nLAogICdicmVhayc6IHUnXG5UaGUgImJyZWFrIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBicmVha19zdG10IDo6PSAiYnJlYWsiXG5cbiJicmVhayIgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSAiZm9yIiBvciAid2hpbGUiXG5sb29wLCBidXQgbm90IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIG9yIGNsYXNzIGRlZmluaXRpb24gd2l0aGluIHRoYXRcbmxvb3AuXG5cbkl0IHRlcm1pbmF0ZXMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxvb3AsIHNraXBwaW5nIHRoZSBvcHRpb25hbCAiZWxzZSJcbmNsYXVzZSBpZiB0aGUgbG9vcCBoYXMgb25lLlxuXG5JZiBhICJmb3IiIGxvb3AgaXMgdGVybWluYXRlZCBieSAiYnJlYWsiLCB0aGUgbG9vcCBjb250cm9sIHRhcmdldFxua2VlcHMgaXRzIGN1cnJlbnQgdmFsdWUuXG5cbldoZW4gImJyZWFrIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhICJmaW5hbGx5IlxuY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseSBsZWF2aW5nIHRoZVxubG9vcC5cbicsCiAgJ2NhbGxhYmxlLXR5cGVzJzogdSdcbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsICJ4KGFyZzEsIGFyZzIsIC4uLikiIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgInguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKSIuXG4nLAotICdjYWxscyc6IHUnXG5DYWxsc1xuKioqKipcblxuQSBjYWxsIGNhbGxzIGEgY2FsbGFibGUgb2JqZWN0IChlLmcuLCBhICpmdW5jdGlvbiopIHdpdGggYSBwb3NzaWJseVxuZW1wdHkgc2VyaWVzIG9mICphcmd1bWVudHMqOlxuXG4gICBjYWxsICAgICAgICAgICAgICAgICA6Oj0gcHJpbWFyeSAiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl0gfCBjb21wcmVoZW5zaW9uXSAiKSJcbiAgIGFyZ3VtZW50X2xpc3QgICAgICAgIDo6PSBwb3NpdGlvbmFsX2FyZ3VtZW50cyBbIiwiIGtleXdvcmRfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqIiBleHByZXNzaW9uXSBbIiwiIGtleXdvcmRfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZF9hcmd1bWVudHMgWyIsIiAiKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqIiBleHByZXNzaW9uIFsiLCIga2V5d29yZF9hcmd1bWVudHNdIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCAiKioiIGV4cHJlc3Npb25cbiAgIHBvc2l0aW9uYWxfYXJndW1lbnRzIDo6PSBleHByZXNzaW9uICgiLCIgZXhwcmVzc2lvbikqXG4gICBrZXl3b3JkX2FyZ3VtZW50cyAgICA6Oj0ga2V5d29yZF9pdGVtICgiLCIga2V5d29yZF9pdGVtKSpcbiAgIGtleXdvcmRfaXRlbSAgICAgICAgIDo6PSBpZGVudGlmaWVyICI9IiBleHByZXNzaW9uXG5cbkFuIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZFxua2V5d29yZCBhcmd1bWVudHMgYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgc2VtYW50aWNzLlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGEgY2FsbGFibGUgb2JqZWN0ICh1c2VyLWRlZmluZWRcbmZ1bmN0aW9ucywgYnVpbHQtaW4gZnVuY3Rpb25zLCBtZXRob2RzIG9mIGJ1aWx0LWluIG9iamVjdHMsIGNsYXNzXG5vYmplY3RzLCBtZXRob2RzIG9mIGNsYXNzIGluc3RhbmNlcywgYW5kIGFsbCBvYmplY3RzIGhhdmluZyBhXG4iX19jYWxsX18oKSIgbWV0aG9kIGFyZSBjYWxsYWJsZSkuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlXG5ldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsIGlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uXG4qRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIGZvcm1hbCAqcGFyYW1ldGVyKiBsaXN0cy5cblxuSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHByZXNlbnQsIHRoZXkgYXJlIGZpcnN0IGNvbnZlcnRlZCB0b1xucG9zaXRpb25hbCBhcmd1bWVudHMsIGFzIGZvbGxvd3MuICBGaXJzdCwgYSBsaXN0IG9mIHVuZmlsbGVkIHNsb3RzIGlzXG5jcmVhdGVkIGZvciB0aGUgZm9ybWFsIHBhcmFtZXRlcnMuICBJZiB0aGVyZSBhcmUgTiBwb3NpdGlvbmFsXG5hcmd1bWVudHMsIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgTiBzbG90cy4gIE5leHQsIGZvciBlYWNoXG5rZXl3b3JkIGFyZ3VtZW50LCB0aGUgaWRlbnRpZmllciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdCAoaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGZvcm1hbFxucGFyYW1ldGVyIG5hbWUsIHRoZSBmaXJzdCBzbG90IGlzIHVzZWQsIGFuZCBzbyBvbikuICBJZiB0aGUgc2xvdCBpc1xuYWxyZWFkeSBmaWxsZWQsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzICJOb25lIiwgaXQgZmlsbHMgdGhlIHNsb3QpLiAgV2hlbiBhbGwgYXJndW1lbnRzIGhhdmVcbmJlZW4gcHJvY2Vzc2VkLCB0aGUgc2xvdHMgdGhhdCBhcmUgc3RpbGwgdW5maWxsZWQgYXJlIGZpbGxlZCB3aXRoIHRoZVxuY29ycmVzcG9uZGluZyBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICAoRGVmYXVsdFxudmFsdWVzIGFyZSBjYWxjdWxhdGVkLCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkOyB0aHVzLCBhXG5tdXRhYmxlIG9iamVjdCBzdWNoIGFzIGEgbGlzdCBvciBkaWN0aW9uYXJ5IHVzZWQgYXMgZGVmYXVsdCB2YWx1ZSB3aWxsXG5iZSBzaGFyZWQgYnkgYWxsIGNhbGxzIHRoYXQgZG9uXCd0IHNwZWNpZnkgYW4gYXJndW1lbnQgdmFsdWUgZm9yIHRoZVxuY29ycmVzcG9uZGluZyBzbG90OyB0aGlzIHNob3VsZCB1c3VhbGx5IGJlIGF2b2lkZWQuKSAgSWYgdGhlcmUgYXJlIGFueVxudW5maWxsZWQgc2xvdHMgZm9yIHdoaWNoIG5vIGRlZmF1bHQgdmFsdWUgaXMgc3BlY2lmaWVkLCBhICJUeXBlRXJyb3IiXG5leGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBvZiBmaWxsZWQgc2xvdHMgaXMgdXNlZCBhc1xudGhlIGFyZ3VtZW50IGxpc3QgZm9yIHRoZSBjYWxsLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEFuIGltcGxlbWVudGF0aW9uIG1heSBwcm92aWRlXG5idWlsdC1pbiBmdW5jdGlvbnMgd2hvc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGRvIG5vdCBoYXZlIG5hbWVzLCBldmVuXG5pZiB0aGV5IGFyZSBcJ25hbWVkXCcgZm9yIHRoZSBwdXJwb3NlIG9mIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaFxudGhlcmVmb3JlIGNhbm5vdCBiZSBzdXBwbGllZCBieSBrZXl3b3JkLiAgSW4gQ1B5dGhvbiwgdGhpcyBpcyB0aGUgY2FzZVxuZm9yIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDIHRoYXQgdXNlICJQeUFyZ19QYXJzZVR1cGxlKCkiIHRvIHBhcnNlXG50aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIippZGVudGlmaWVyIiBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHNcbihvciBhbiBlbXB0eSB0dXBsZSBpZiB0aGVyZSB3ZXJlIG5vIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cykuXG5cbklmIGFueSBrZXl3b3JkIGFyZ3VtZW50IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmb3JtYWwgcGFyYW1ldGVyXG5uYW1lLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIioqaWRlbnRpZmllciIgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBleGNlc3Mga2V5d29yZFxuYXJndW1lbnRzICh1c2luZyB0aGUga2V5d29yZHMgYXMga2V5cyBhbmQgdGhlIGFyZ3VtZW50IHZhbHVlcyBhc1xuY29ycmVzcG9uZGluZyB2YWx1ZXMpLCBvciBhIChuZXcpIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlcmUgd2VyZSBub1xuZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLlxuXG5JZiB0aGUgc3ludGF4ICIqZXhwcmVzc2lvbiIgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCwgImV4cHJlc3Npb24iXG5tdXN0IGV2YWx1YXRlIHRvIGFuIGl0ZXJhYmxlLiAgRWxlbWVudHMgZnJvbSB0aGlzIGl0ZXJhYmxlIGFyZSB0cmVhdGVkXG5hcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50czsgaWYgdGhlcmUgYXJlXG5wb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosIGFuZCAiZXhwcmVzc2lvbiIgZXZhbHVhdGVzIHRvIGFcbnNlcXVlbmNlICp5MSosIC4uLiwgKnlNKiwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgY2FsbCB3aXRoIE0rTlxucG9zaXRpb25hbCBhcmd1bWVudHMgKngxKiwgLi4uLCAqeE4qLCAqeTEqLCAuLi4sICp5TSouXG5cbkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSAiKmV4cHJlc3Npb24iIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIHNvbWUga2V5d29yZCBhcmd1bWVudHMsIGl0IGlzIHByb2Nlc3NlZCAqYmVmb3JlKiB0aGVcbmtleXdvcmQgYXJndW1lbnRzIChhbmQgdGhlICIqKmV4cHJlc3Npb24iIGFyZ3VtZW50LCBpZiBhbnkgLS0gc2VlXG5iZWxvdykuICBTbzpcblxuICAgPj4+IGRlZiBmKGEsIGIpOlxuICAgLi4uICBwcmludChhLCBiKVxuICAgLi4uXG4gICA+Pj4gZihiPTEsICooMiwpKVxuICAgMiAxXG4gICA+Pj4gZihhPTEsICooMiwpKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50IFwnYVwnXG4gICA+Pj4gZigxLCAqKDIsKSlcbiAgIDEgMlxuXG5JdCBpcyB1bnVzdWFsIGZvciBib3RoIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGUgIipleHByZXNzaW9uIiBzeW50YXhcbnRvIGJlIHVzZWQgaW4gdGhlIHNhbWUgY2FsbCwgc28gaW4gcHJhY3RpY2UgdGhpcyBjb25mdXNpb24gZG9lcyBub3RcbmFyaXNlLlxuXG5JZiB0aGUgc3ludGF4ICIqKmV4cHJlc3Npb24iIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG4iZXhwcmVzc2lvbiIgbXVzdCBldmFsdWF0ZSB0byBhIG1hcHBpbmcsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmVcbnRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cy4gIEluIHRoZSBjYXNlIG9mIGEga2V5d29yZFxuYXBwZWFyaW5nIGluIGJvdGggImV4cHJlc3Npb24iIGFuZCBhcyBhbiBleHBsaWNpdCBrZXl3b3JkIGFyZ3VtZW50LCBhXG4iVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuXG5Gb3JtYWwgcGFyYW1ldGVycyB1c2luZyB0aGUgc3ludGF4ICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciJcbmNhbm5vdCBiZSB1c2VkIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc2xvdHMgb3IgYXMga2V5d29yZCBhcmd1bWVudFxubmFtZXMuXG5cbkEgY2FsbCBhbHdheXMgcmV0dXJucyBzb21lIHZhbHVlLCBwb3NzaWJseSAiTm9uZSIsIHVubGVzcyBpdCByYWlzZXMgYW5cbmV4Y2VwdGlvbi4gIEhvdyB0aGlzIHZhbHVlIGlzIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlXG5jYWxsYWJsZSBvYmplY3QuXG5cbklmIGl0IGlzLS0tXG5cbmEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uOlxuICAgVGhlIGNvZGUgYmxvY2sgZm9yIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCwgcGFzc2luZyBpdCB0aGVcbiAgIGFyZ3VtZW50IGxpc3QuICBUaGUgZmlyc3QgdGhpbmcgdGhlIGNvZGUgYmxvY2sgd2lsbCBkbyBpcyBiaW5kIHRoZVxuICAgZm9ybWFsIHBhcmFtZXRlcnMgdG8gdGhlIGFyZ3VtZW50czsgdGhpcyBpcyBkZXNjcmliZWQgaW4gc2VjdGlvblxuICAgKkZ1bmN0aW9uIGRlZmluaXRpb25zKi4gIFdoZW4gdGhlIGNvZGUgYmxvY2sgZXhlY3V0ZXMgYSAicmV0dXJuIlxuICAgc3RhdGVtZW50LCB0aGlzIHNwZWNpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5hIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZDpcbiAgIFRoZSByZXN1bHQgaXMgdXAgdG8gdGhlIGludGVycHJldGVyOyBzZWUgKkJ1aWx0LWluIEZ1bmN0aW9ucyogZm9yXG4gICB0aGUgZGVzY3JpcHRpb25zIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy5cblxuYSBjbGFzcyBvYmplY3Q6XG4gICBBIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLlxuXG5hIGNsYXNzIGluc3RhbmNlIG1ldGhvZDpcbiAgIFRoZSBjb3JyZXNwb25kaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdpdGggYW4gYXJndW1lbnRcbiAgIGxpc3QgdGhhdCBpcyBvbmUgbG9uZ2VyIHRoYW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGNhbGw6IHRoZVxuICAgaW5zdGFuY2UgYmVjb21lcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cbmEgY2xhc3MgaW5zdGFuY2U6XG4gICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgYSAiX19jYWxsX18oKSIgbWV0aG9kOyB0aGUgZWZmZWN0IGlzIHRoZW4gdGhlXG4gICBzYW1lIGFzIGlmIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQuXG4nLAotICdjbGFzcyc6IHUnXG5DbGFzcyBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgIm9iamVjdCI7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCAic2VsZi5uYW1lID0gdmFsdWUiLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb24gIiJzZWxmLm5hbWUiIixcbmFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lXG53aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmUgdXNlZCBhcyBkZWZhdWx0c1xuZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW4gbGVhZCB0b1xudW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC1cbiAgQ2xhc3MgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3NcbiAgICB0aGVyZSBpcyBhICJmaW5hbGx5IiBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyXG4gICAgZXhjZXB0aW9uLiBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2ZcbiAgICBhbiBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhICJyZXR1cm4iLCAiY29udGludWUiLCBvclxuICAgICJicmVhayIgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGVcbiAgICBmdW5jdGlvbiBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzICJfX2RvY19fIlxuICAgIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgIl9fZG9jX18iIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCisgJ2NhbGxzJzogdSdcbkNhbGxzXG4qKioqKlxuXG5BIGNhbGwgY2FsbHMgYSBjYWxsYWJsZSBvYmplY3QgKGUuZy4sIGEgKmZ1bmN0aW9uKikgd2l0aCBhIHBvc3NpYmx5XG5lbXB0eSBzZXJpZXMgb2YgKmFyZ3VtZW50cyo6XG5cbiAgIGNhbGwgICAgICAgICAgICAgICAgIDo6PSBwcmltYXJ5ICIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXSB8IGNvbXByZWhlbnNpb25dICIpIlxuICAgYXJndW1lbnRfbGlzdCAgICAgICAgOjo9IHBvc2l0aW9uYWxfYXJndW1lbnRzIFsiLCIgc3RhcnJlZF9hbmRfa2V5d29yZHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIga2V5d29yZHNfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgfCBzdGFycmVkX2FuZF9rZXl3b3JkcyBbIiwiIGtleXdvcmRzX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZHNfYXJndW1lbnRzXG4gICBwb3NpdGlvbmFsX2FyZ3VtZW50cyA6Oj0gWyIqIl0gZXhwcmVzc2lvbiAoIiwiIFsiKiJdIGV4cHJlc3Npb24pKlxuICAgc3RhcnJlZF9hbmRfa2V5d29yZHMgOjo9ICgiKiIgZXhwcmVzc2lvbiB8IGtleXdvcmRfaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIiwiICIqIiBleHByZXNzaW9uIHwgIiwiIGtleXdvcmRfaXRlbSkqXG4gICBrZXl3b3Jkc19hcmd1bWVudHMgICA6Oj0gKGtleXdvcmRfaXRlbSB8ICIqKiIgZXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCIsIiBrZXl3b3JkX2l0ZW0gfCAiKioiIGV4cHJlc3Npb24pKlxuICAga2V5d29yZF9pdGVtICAgICAgICAgOjo9IGlkZW50aWZpZXIgIj0iIGV4cHJlc3Npb25cblxuQW4gb3B0aW9uYWwgdHJhaWxpbmcgY29tbWEgbWF5IGJlIHByZXNlbnQgYWZ0ZXIgdGhlIHBvc2l0aW9uYWwgYW5kXG5rZXl3b3JkIGFyZ3VtZW50cyBidXQgZG9lcyBub3QgYWZmZWN0IHRoZSBzZW1hbnRpY3MuXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYSBjYWxsYWJsZSBvYmplY3QgKHVzZXItZGVmaW5lZFxuZnVuY3Rpb25zLCBidWlsdC1pbiBmdW5jdGlvbnMsIG1ldGhvZHMgb2YgYnVpbHQtaW4gb2JqZWN0cywgY2xhc3Ncbm9iamVjdHMsIG1ldGhvZHMgb2YgY2xhc3MgaW5zdGFuY2VzLCBhbmQgYWxsIG9iamVjdHMgaGF2aW5nIGFcbiJfX2NhbGxfXygpIiBtZXRob2QgYXJlIGNhbGxhYmxlKS4gIEFsbCBhcmd1bWVudCBleHByZXNzaW9ucyBhcmVcbmV2YWx1YXRlZCBiZWZvcmUgdGhlIGNhbGwgaXMgYXR0ZW1wdGVkLiAgUGxlYXNlIHJlZmVyIHRvIHNlY3Rpb25cbipGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIHRoZSBzeW50YXggb2YgZm9ybWFsICpwYXJhbWV0ZXIqIGxpc3RzLlxuXG5JZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcHJlc2VudCwgdGhleSBhcmUgZmlyc3QgY29udmVydGVkIHRvXG5wb3NpdGlvbmFsIGFyZ3VtZW50cywgYXMgZm9sbG93cy4gIEZpcnN0LCBhIGxpc3Qgb2YgdW5maWxsZWQgc2xvdHMgaXNcbmNyZWF0ZWQgZm9yIHRoZSBmb3JtYWwgcGFyYW1ldGVycy4gIElmIHRoZXJlIGFyZSBOIHBvc2l0aW9uYWxcbmFyZ3VtZW50cywgdGhleSBhcmUgcGxhY2VkIGluIHRoZSBmaXJzdCBOIHNsb3RzLiAgTmV4dCwgZm9yIGVhY2hcbmtleXdvcmQgYXJndW1lbnQsIHRoZSBpZGVudGlmaWVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZVxuY29ycmVzcG9uZGluZyBzbG90IChpZiB0aGUgaWRlbnRpZmllciBpcyB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgZm9ybWFsXG5wYXJhbWV0ZXIgbmFtZSwgdGhlIGZpcnN0IHNsb3QgaXMgdXNlZCwgYW5kIHNvIG9uKS4gIElmIHRoZSBzbG90IGlzXG5hbHJlYWR5IGZpbGxlZCwgYSAiVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLiBPdGhlcndpc2UsIHRoZVxudmFsdWUgb2YgdGhlIGFyZ3VtZW50IGlzIHBsYWNlZCBpbiB0aGUgc2xvdCwgZmlsbGluZyBpdCAoZXZlbiBpZiB0aGVcbmV4cHJlc3Npb24gaXMgIk5vbmUiLCBpdCBmaWxscyB0aGUgc2xvdCkuICBXaGVuIGFsbCBhcmd1bWVudHMgaGF2ZVxuYmVlbiBwcm9jZXNzZWQsIHRoZSBzbG90cyB0aGF0IGFyZSBzdGlsbCB1bmZpbGxlZCBhcmUgZmlsbGVkIHdpdGggdGhlXG5jb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIChEZWZhdWx0XG52YWx1ZXMgYXJlIGNhbGN1bGF0ZWQsIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQ7IHRodXMsIGFcbm11dGFibGUgb2JqZWN0IHN1Y2ggYXMgYSBsaXN0IG9yIGRpY3Rpb25hcnkgdXNlZCBhcyBkZWZhdWx0IHZhbHVlIHdpbGxcbmJlIHNoYXJlZCBieSBhbGwgY2FsbHMgdGhhdCBkb25cJ3Qgc3BlY2lmeSBhbiBhcmd1bWVudCB2YWx1ZSBmb3IgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3Q7IHRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYXZvaWRlZC4pICBJZiB0aGVyZSBhcmUgYW55XG51bmZpbGxlZCBzbG90cyBmb3Igd2hpY2ggbm8gZGVmYXVsdCB2YWx1ZSBpcyBzcGVjaWZpZWQsIGEgIlR5cGVFcnJvciJcbmV4Y2VwdGlvbiBpcyByYWlzZWQuICBPdGhlcndpc2UsIHRoZSBsaXN0IG9mIGZpbGxlZCBzbG90cyBpcyB1c2VkIGFzXG50aGUgYXJndW1lbnQgbGlzdCBmb3IgdGhlIGNhbGwuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQW4gaW1wbGVtZW50YXRpb24gbWF5IHByb3ZpZGVcbmJ1aWx0LWluIGZ1bmN0aW9ucyB3aG9zZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZG8gbm90IGhhdmUgbmFtZXMsIGV2ZW5cbmlmIHRoZXkgYXJlIFwnbmFtZWRcJyBmb3IgdGhlIHB1cnBvc2Ugb2YgZG9jdW1lbnRhdGlvbiwgYW5kIHdoaWNoXG50aGVyZWZvcmUgY2Fubm90IGJlIHN1cHBsaWVkIGJ5IGtleXdvcmQuICBJbiBDUHl0aG9uLCB0aGlzIGlzIHRoZSBjYXNlXG5mb3IgZnVuY3Rpb25zIGltcGxlbWVudGVkIGluIEMgdGhhdCB1c2UgIlB5QXJnX1BhcnNlVHVwbGUoKSIgdG8gcGFyc2VcbnRoZWlyIGFyZ3VtZW50cy5cblxuSWYgdGhlcmUgYXJlIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhbiB0aGVyZSBhcmUgZm9ybWFsIHBhcmFtZXRlclxuc2xvdHMsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCAiKmlkZW50aWZpZXIiIGlzIHByZXNlbnQ7IGluIHRoaXMgY2FzZSwgdGhhdCBmb3JtYWxcbnBhcmFtZXRlciByZWNlaXZlcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50c1xuKG9yIGFuIGVtcHR5IHR1cGxlIGlmIHRoZXJlIHdlcmUgbm8gZXhjZXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzKS5cblxuSWYgYW55IGtleXdvcmQgYXJndW1lbnQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGZvcm1hbCBwYXJhbWV0ZXJcbm5hbWUsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCAiKippZGVudGlmaWVyIiBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBrZXl3b3JkXG5hcmd1bWVudHMgKHVzaW5nIHRoZSBrZXl3b3JkcyBhcyBrZXlzIGFuZCB0aGUgYXJndW1lbnQgdmFsdWVzIGFzXG5jb3JyZXNwb25kaW5nIHZhbHVlcyksIG9yIGEgKG5ldykgZW1wdHkgZGljdGlvbmFyeSBpZiB0aGVyZSB3ZXJlIG5vXG5leGNlc3Mga2V5d29yZCBhcmd1bWVudHMuXG5cbklmIHRoZSBzeW50YXggIipleHByZXNzaW9uIiBhcHBlYXJzIGluIHRoZSBmdW5jdGlvbiBjYWxsLCAiZXhwcmVzc2lvbiJcbm11c3QgZXZhbHVhdGUgdG8gYW4gKml0ZXJhYmxlKi4gIEVsZW1lbnRzIGZyb20gdGhlc2UgaXRlcmFibGVzIGFyZVxudHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50cy4gIEZvciB0aGUgY2FsbFxuImYoeDEsIHgyLCAqeSwgeDMsIHg0KSIsIGlmICp5KiBldmFsdWF0ZXMgdG8gYSBzZXF1ZW5jZSAqeTEqLCAuLi4sXG4qeU0qLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBjYWxsIHdpdGggTSs0IHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosXG4qeDIqLCAqeTEqLCAuLi4sICp5TSosICp4MyosICp4NCouXG5cbkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSAiKmV4cHJlc3Npb24iIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIGV4cGxpY2l0IGtleXdvcmQgYXJndW1lbnRzLCBpdCBpcyBwcm9jZXNzZWQgKmJlZm9yZSpcbnRoZSBrZXl3b3JkIGFyZ3VtZW50cyAoYW5kIGFueSAiKipleHByZXNzaW9uIiBhcmd1bWVudHMgLS0gc2VlIGJlbG93KS5cblNvOlxuXG4gICA+Pj4gZGVmIGYoYSwgYik6XG4gICAuLi4gICAgIHByaW50KGEsIGIpXG4gICAuLi5cbiAgID4+PiBmKGI9MSwgKigyLCkpXG4gICAyIDFcbiAgID4+PiBmKGE9MSwgKigyLCkpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgXCdhXCdcbiAgID4+PiBmKDEsICooMiwpKVxuICAgMSAyXG5cbkl0IGlzIHVudXN1YWwgZm9yIGJvdGgga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZSAiKmV4cHJlc3Npb24iIHN5bnRheFxudG8gYmUgdXNlZCBpbiB0aGUgc2FtZSBjYWxsLCBzbyBpbiBwcmFjdGljZSB0aGlzIGNvbmZ1c2lvbiBkb2VzIG5vdFxuYXJpc2UuXG5cbklmIHRoZSBzeW50YXggIioqZXhwcmVzc2lvbiIgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCxcbiJleHByZXNzaW9uIiBtdXN0IGV2YWx1YXRlIHRvIGEgKm1hcHBpbmcqLCB0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlXG50cmVhdGVkIGFzIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMuICBJZiBhIGtleXdvcmQgaXMgYWxyZWFkeVxucHJlc2VudCAoYXMgYW4gZXhwbGljaXQga2V5d29yZCBhcmd1bWVudCwgb3IgZnJvbSBhbm90aGVyIHVucGFja2luZyksXG5hICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG5cbkZvcm1hbCBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBzeW50YXggIippZGVudGlmaWVyIiBvciAiKippZGVudGlmaWVyIlxuY2Fubm90IGJlIHVzZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBzbG90cyBvciBhcyBrZXl3b3JkIGFyZ3VtZW50XG5uYW1lcy5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuNTogRnVuY3Rpb24gY2FsbHMgYWNjZXB0IGFueSBudW1iZXIgb2YgIioiIGFuZFxuIioqIiB1bnBhY2tpbmdzLCBwb3NpdGlvbmFsIGFyZ3VtZW50cyBtYXkgZm9sbG93IGl0ZXJhYmxlIHVucGFja2luZ3NcbigiKiIpLCBhbmQga2V5d29yZCBhcmd1bWVudHMgbWF5IGZvbGxvdyBkaWN0aW9uYXJ5IHVucGFja2luZ3MgKCIqKiIpLlxuT3JpZ2luYWxseSBwcm9wb3NlZCBieSAqKlBFUCA0NDgqKi5cblxuQSBjYWxsIGFsd2F5cyByZXR1cm5zIHNvbWUgdmFsdWUsIHBvc3NpYmx5ICJOb25lIiwgdW5sZXNzIGl0IHJhaXNlcyBhblxuZXhjZXB0aW9uLiAgSG93IHRoaXMgdmFsdWUgaXMgY29tcHV0ZWQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiB0aGVcbmNhbGxhYmxlIG9iamVjdC5cblxuSWYgaXQgaXMtLS1cblxuYSB1c2VyLWRlZmluZWQgZnVuY3Rpb246XG4gICBUaGUgY29kZSBibG9jayBmb3IgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLCBwYXNzaW5nIGl0IHRoZVxuICAgYXJndW1lbnQgbGlzdC4gIFRoZSBmaXJzdCB0aGluZyB0aGUgY29kZSBibG9jayB3aWxsIGRvIGlzIGJpbmQgdGhlXG4gICBmb3JtYWwgcGFyYW1ldGVycyB0byB0aGUgYXJndW1lbnRzOyB0aGlzIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4gICAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqLiAgV2hlbiB0aGUgY29kZSBibG9jayBleGVjdXRlcyBhICJyZXR1cm4iXG4gICBzdGF0ZW1lbnQsIHRoaXMgc3BlY2lmaWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuXG5cbmEgYnVpbHQtaW4gZnVuY3Rpb24gb3IgbWV0aG9kOlxuICAgVGhlIHJlc3VsdCBpcyB1cCB0byB0aGUgaW50ZXJwcmV0ZXI7IHNlZSAqQnVpbHQtaW4gRnVuY3Rpb25zKiBmb3JcbiAgIHRoZSBkZXNjcmlwdGlvbnMgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBtZXRob2RzLlxuXG5hIGNsYXNzIG9iamVjdDpcbiAgIEEgbmV3IGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgaXMgcmV0dXJuZWQuXG5cbmEgY2xhc3MgaW5zdGFuY2UgbWV0aG9kOlxuICAgVGhlIGNvcnJlc3BvbmRpbmcgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2l0aCBhbiBhcmd1bWVudFxuICAgbGlzdCB0aGF0IGlzIG9uZSBsb25nZXIgdGhhbiB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY2FsbDogdGhlXG4gICBpbnN0YW5jZSBiZWNvbWVzIHRoZSBmaXJzdCBhcmd1bWVudC5cblxuYSBjbGFzcyBpbnN0YW5jZTpcbiAgIFRoZSBjbGFzcyBtdXN0IGRlZmluZSBhICJfX2NhbGxfXygpIiBtZXRob2Q7IHRoZSBlZmZlY3QgaXMgdGhlbiB0aGVcbiAgIHNhbWUgYXMgaWYgdGhhdCBtZXRob2Qgd2FzIGNhbGxlZC5cbicsCisgJ2NsYXNzJzogdSdcbkNsYXNzIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbYXJndW1lbnRfbGlzdF0gIikiXG4gICBjbGFzc25hbWUgICA6Oj0gaWRlbnRpZmllclxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBUaGUgaW5oZXJpdGFuY2UgbGlzdFxudXN1YWxseSBnaXZlcyBhIGxpc3Qgb2YgYmFzZSBjbGFzc2VzIChzZWUgKkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uKlxuZm9yIG1vcmUgYWR2YW5jZWQgdXNlcyksIHNvIGVhY2ggaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgZXZhbHVhdGUgdG8gYVxuY2xhc3Mgb2JqZWN0IHdoaWNoIGFsbG93cyBzdWJjbGFzc2luZy4gIENsYXNzZXMgd2l0aG91dCBhbiBpbmhlcml0YW5jZVxubGlzdCBpbmhlcml0LCBieSBkZWZhdWx0LCBmcm9tIHRoZSBiYXNlIGNsYXNzICJvYmplY3QiOyBoZW5jZSxcblxuICAgY2xhc3MgRm9vOlxuICAgICAgIHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb28ob2JqZWN0KTpcbiAgICAgICBwYXNzXG5cblRoZSBjbGFzc1wncyBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIGluIGEgbmV3IGV4ZWN1dGlvbiBmcmFtZSAoc2VlXG4qTmFtaW5nIGFuZCBiaW5kaW5nKiksIHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsb2NhbCBuYW1lc3BhY2UgYW5kIHRoZVxub3JpZ2luYWwgZ2xvYmFsIG5hbWVzcGFjZS4gKFVzdWFsbHksIHRoZSBzdWl0ZSBjb250YWlucyBtb3N0bHlcbmZ1bmN0aW9uIGRlZmluaXRpb25zLikgIFdoZW4gdGhlIGNsYXNzXCdzIHN1aXRlIGZpbmlzaGVzIGV4ZWN1dGlvbiwgaXRzXG5leGVjdXRpb24gZnJhbWUgaXMgZGlzY2FyZGVkIGJ1dCBpdHMgbG9jYWwgbmFtZXNwYWNlIGlzIHNhdmVkLiBbNF0gQVxuY2xhc3Mgb2JqZWN0IGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGUgaW5oZXJpdGFuY2UgbGlzdCBmb3IgdGhlIGJhc2VcbmNsYXNzZXMgYW5kIHRoZSBzYXZlZCBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeS5cblRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoaXMgY2xhc3Mgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBsb2NhbFxubmFtZXNwYWNlLlxuXG5DbGFzcyBjcmVhdGlvbiBjYW4gYmUgY3VzdG9taXplZCBoZWF2aWx5IHVzaW5nICptZXRhY2xhc3NlcyouXG5cbkNsYXNzZXMgY2FuIGFsc28gYmUgZGVjb3JhdGVkOiBqdXN0IGxpa2Ugd2hlbiBkZWNvcmF0aW5nIGZ1bmN0aW9ucyxcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgY2xhc3MgRm9vOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vOiBwYXNzXG4gICBGb28gPSBmMShhcmcpKGYyKEZvbykpXG5cblRoZSBldmFsdWF0aW9uIHJ1bGVzIGZvciB0aGUgZGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSB0aGUgc2FtZSBhcyBmb3JcbmZ1bmN0aW9uIGRlY29yYXRvcnMuICBUaGUgcmVzdWx0IG11c3QgYmUgYSBjbGFzcyBvYmplY3QsIHdoaWNoIGlzIHRoZW5cbmJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhcmVcbmNsYXNzIGF0dHJpYnV0ZXM7IHRoZXkgYXJlIHNoYXJlZCBieSBpbnN0YW5jZXMuICBJbnN0YW5jZSBhdHRyaWJ1dGVzXG5jYW4gYmUgc2V0IGluIGEgbWV0aG9kIHdpdGggInNlbGYubmFtZSA9IHZhbHVlIi4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uICIic2VsZi5uYW1lIiIsXG5hbmQgYW4gaW5zdGFuY2UgYXR0cmlidXRlIGhpZGVzIGEgY2xhc3MgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZVxud2hlbiBhY2Nlc3NlZCBpbiB0aGlzIHdheS4gIENsYXNzIGF0dHJpYnV0ZXMgY2FuIGJlIHVzZWQgYXMgZGVmYXVsdHNcbmZvciBpbnN0YW5jZSBhdHRyaWJ1dGVzLCBidXQgdXNpbmcgbXV0YWJsZSB2YWx1ZXMgdGhlcmUgY2FuIGxlYWQgdG9cbnVuZXhwZWN0ZWQgcmVzdWx0cy4gICpEZXNjcmlwdG9ycyogY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlXG52YXJpYWJsZXMgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzICoqUEVQIDMxMjkqKiAtXG4gIENsYXNzIERlY29yYXRvcnNcbicsCiAgJ2NvbXBhcmlzb25zJzogdSdcbkNvbXBhcmlzb25zXG4qKioqKioqKioqKlxuXG5Vbmxpa2UgQywgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpbiBQeXRob24gaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSxcbndoaWNoIGlzIGxvd2VyIHRoYW4gdGhhdCBvZiBhbnkgYXJpdGhtZXRpYywgc2hpZnRpbmcgb3IgYml0d2lzZVxub3BlcmF0aW9uLiAgQWxzbyB1bmxpa2UgQywgZXhwcmVzc2lvbnMgbGlrZSAiYSA8IGIgPCBjIiBoYXZlIHRoZVxuaW50ZXJwcmV0YXRpb24gdGhhdCBpcyBjb252ZW50aW9uYWwgaW4gbWF0aGVtYXRpY3M6XG5cbiAgIGNvbXBhcmlzb24gICAgOjo9IG9yX2V4cHIgKCBjb21wX29wZXJhdG9yIG9yX2V4cHIgKSpcbiAgIGNvbXBfb3BlcmF0b3IgOjo9ICI8IiB8ICI+IiB8ICI9PSIgfCAiPj0iIHwgIjw9IiB8ICIhPSJcbiAgICAgICAgICAgICAgICAgICAgIHwgImlzIiBbIm5vdCJdIHwgWyJub3QiXSAiaW4iXG5cbkNvbXBhcmlzb25zIHlpZWxkIGJvb2xlYW4gdmFsdWVzOiAiVHJ1ZSIgb3IgIkZhbHNlIi5cblxuQ29tcGFyaXNvbnMgY2FuIGJlIGNoYWluZWQgYXJiaXRyYXJpbHksIGUuZy4sICJ4IDwgeSA8PSB6IiBpc1xuZXF1aXZhbGVudCB0byAieCA8IHkgYW5kIHkgPD0geiIsIGV4Y2VwdCB0aGF0ICJ5IiBpcyBldmFsdWF0ZWQgb25seVxub25jZSAoYnV0IGluIGJvdGggY2FzZXMgInoiIGlzIG5vdCBldmFsdWF0ZWQgYXQgYWxsIHdoZW4gInggPCB5IiBpc1xuZm91bmQgdG8gYmUgZmFsc2UpLlxuXG5Gb3JtYWxseSwgaWYgKmEqLCAqYiosICpjKiwgLi4uLCAqeSosICp6KiBhcmUgZXhwcmVzc2lvbnMgYW5kICpvcDEqLFxuKm9wMiosIC4uLiwgKm9wTiogYXJlIGNvbXBhcmlzb24gb3BlcmF0b3JzLCB0aGVuICJhIG9wMSBiIG9wMiBjIC4uLiB5XG5vcE4geiIgaXMgZXF1aXZhbGVudCB0byAiYSBvcDEgYiBhbmQgYiBvcDIgYyBhbmQgLi4uIHkgb3BOIHoiLCBleGNlcHRcbnRoYXQgZWFjaCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhdCBtb3N0IG9uY2UuXG5cbk5vdGUgdGhhdCAiYSBvcDEgYiBvcDIgYyIgZG9lc25cJ3QgaW1wbHkgYW55IGtpbmQgb2YgY29tcGFyaXNvbiBiZXR3ZWVuXG4qYSogYW5kICpjKiwgc28gdGhhdCwgZS5nLiwgInggPCB5ID4geiIgaXMgcGVyZmVjdGx5IGxlZ2FsICh0aG91Z2hcbnBlcmhhcHMgbm90IHByZXR0eSkuXG5cblxuVmFsdWUgY29tcGFyaXNvbnNcbj09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRvcnMgIjwiLCAiPiIsICI9PSIsICI+PSIsICI8PSIsIGFuZCAiIT0iIGNvbXBhcmUgdGhlIHZhbHVlc1xub2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBkbyBub3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHR5cGUuXG5cbkNoYXB0ZXIgKk9iamVjdHMsIHZhbHVlcyBhbmQgdHlwZXMqIHN0YXRlcyB0aGF0IG9iamVjdHMgaGF2ZSBhIHZhbHVlXG4oaW4gYWRkaXRpb24gdG8gdHlwZSBhbmQgaWRlbnRpdHkpLiAgVGhlIHZhbHVlIG9mIGFuIG9iamVjdCBpcyBhXG5yYXRoZXIgYWJzdHJhY3Qgbm90aW9uIGluIFB5dGhvbjogRm9yIGV4YW1wbGUsIHRoZXJlIGlzIG5vIGNhbm9uaWNhbFxuYWNjZXNzIG1ldGhvZCBmb3IgYW4gb2JqZWN0XCdzIHZhbHVlLiAgQWxzbywgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnRcbnRoYXQgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBzaG91bGQgYmUgY29uc3RydWN0ZWQgaW4gYSBwYXJ0aWN1bGFyIHdheSxcbmUuZy4gY29tcHJpc2VkIG9mIGFsbCBpdHMgZGF0YSBhdHRyaWJ1dGVzLiBDb21wYXJpc29uIG9wZXJhdG9yc1xuaW1wbGVtZW50IGEgcGFydGljdWxhciBub3Rpb24gb2Ygd2hhdCB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzLiAgT25lXG5jYW4gdGhpbmsgb2YgdGhlbSBhcyBkZWZpbmluZyB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGluZGlyZWN0bHksIGJ5XG5tZWFucyBvZiB0aGVpciBjb21wYXJpc29uIGltcGxlbWVudGF0aW9uLlxuXG5CZWNhdXNlIGFsbCB0eXBlcyBhcmUgKGRpcmVjdCBvciBpbmRpcmVjdCkgc3VidHlwZXMgb2YgIm9iamVjdCIsIHRoZXlcbmluaGVyaXQgdGhlIGRlZmF1bHQgY29tcGFyaXNvbiBiZWhhdmlvciBmcm9tICJvYmplY3QiLiAgVHlwZXMgY2FuXG5jdXN0b21pemUgdGhlaXIgY29tcGFyaXNvbiBiZWhhdmlvciBieSBpbXBsZW1lbnRpbmcgKnJpY2ggY29tcGFyaXNvblxubWV0aG9kcyogbGlrZSAiX19sdF9fKCkiLCBkZXNjcmliZWQgaW4gKkJhc2ljIGN1c3RvbWl6YXRpb24qLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbiAoIj09IiBhbmQgIiE9IikgaXMgYmFzZWRcbm9uIHRoZSBpZGVudGl0eSBvZiB0aGUgb2JqZWN0cy4gIEhlbmNlLCBlcXVhbGl0eSBjb21wYXJpc29uIG9mXG5pbnN0YW5jZXMgd2l0aCB0aGUgc2FtZSBpZGVudGl0eSByZXN1bHRzIGluIGVxdWFsaXR5LCBhbmQgZXF1YWxpdHlcbmNvbXBhcmlzb24gb2YgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGlkZW50aXRpZXMgcmVzdWx0cyBpblxuaW5lcXVhbGl0eS4gIEEgbW90aXZhdGlvbiBmb3IgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHRoZSBkZXNpcmUgdGhhdFxuYWxsIG9iamVjdHMgc2hvdWxkIGJlIHJlZmxleGl2ZSAoaS5lLiAieCBpcyB5IiBpbXBsaWVzICJ4ID09IHkiKS5cblxuQSBkZWZhdWx0IG9yZGVyIGNvbXBhcmlzb24gKCI8IiwgIj4iLCAiPD0iLCBhbmQgIj49IikgaXMgbm90IHByb3ZpZGVkO1xuYW4gYXR0ZW1wdCByYWlzZXMgIlR5cGVFcnJvciIuICBBIG1vdGl2YXRpb24gZm9yIHRoaXMgZGVmYXVsdCBiZWhhdmlvclxuaXMgdGhlIGxhY2sgb2YgYSBzaW1pbGFyIGludmFyaWFudCBhcyBmb3IgZXF1YWxpdHkuXG5cblRoZSBiZWhhdmlvciBvZiB0aGUgZGVmYXVsdCBlcXVhbGl0eSBjb21wYXJpc29uLCB0aGF0IGluc3RhbmNlcyB3aXRoXG5kaWZmZXJlbnQgaWRlbnRpdGllcyBhcmUgYWx3YXlzIHVuZXF1YWwsIG1heSBiZSBpbiBjb250cmFzdCB0byB3aGF0XG50eXBlcyB3aWxsIG5lZWQgdGhhdCBoYXZlIGEgc2Vuc2libGUgZGVmaW5pdGlvbiBvZiBvYmplY3QgdmFsdWUgYW5kXG52YWx1ZS1iYXNlZCBlcXVhbGl0eS4gIFN1Y2ggdHlwZXMgd2lsbCBuZWVkIHRvIGN1c3RvbWl6ZSB0aGVpclxuY29tcGFyaXNvbiBiZWhhdmlvciwgYW5kIGluIGZhY3QsIGEgbnVtYmVyIG9mIGJ1aWx0LWluIHR5cGVzIGhhdmUgZG9uZVxudGhhdC5cblxuVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGUgY29tcGFyaXNvbiBiZWhhdmlvciBvZiB0aGUgbW9zdFxuaW1wb3J0YW50IGJ1aWx0LWluIHR5cGVzLlxuXG4qIE51bWJlcnMgb2YgYnVpbHQtaW4gbnVtZXJpYyB0eXBlcyAoKk51bWVyaWMgVHlwZXMgLS0tIGludCwgZmxvYXQsXG4gIGNvbXBsZXgqKSBhbmQgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdHlwZXMgImZyYWN0aW9ucy5GcmFjdGlvbiIgYW5kXG4gICJkZWNpbWFsLkRlY2ltYWwiIGNhbiBiZSBjb21wYXJlZCB3aXRoaW4gYW5kIGFjcm9zcyB0aGVpciB0eXBlcyxcbiAgd2l0aCB0aGUgcmVzdHJpY3Rpb24gdGhhdCBjb21wbGV4IG51bWJlcnMgZG8gbm90IHN1cHBvcnQgb3JkZXJcbiAgY29tcGFyaXNvbi4gIFdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSB0eXBlcyBpbnZvbHZlZCwgdGhleSBjb21wYXJlXG4gIG1hdGhlbWF0aWNhbGx5IChhbGdvcml0aG1pY2FsbHkpIGNvcnJlY3Qgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi5cblxuICBUaGUgbm90LWEtbnVtYmVyIHZhbHVlcyAiZmxvYXQoXCdOYU5cJykiIGFuZCAiRGVjaW1hbChcJ05hTlwnKSIgYXJlXG4gIHNwZWNpYWwuICBUaGV5IGFyZSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcyAoInggaXMgeCIgaXMgdHJ1ZSkgYnV0XG4gIGFyZSBub3QgZXF1YWwgdG8gdGhlbXNlbHZlcyAoInggPT0geCIgaXMgZmFsc2UpLiAgQWRkaXRpb25hbGx5LFxuICBjb21wYXJpbmcgYW55IG51bWJlciB0byBhIG5vdC1hLW51bWJlciB2YWx1ZSB3aWxsIHJldHVybiAiRmFsc2UiLlxuICBGb3IgZXhhbXBsZSwgYm90aCAiMyA8IGZsb2F0KFwnTmFOXCcpIiBhbmQgImZsb2F0KFwnTmFOXCcpIDwgMyIgd2lsbFxuICByZXR1cm4gIkZhbHNlIi5cblxuKiBCaW5hcnkgc2VxdWVuY2VzIChpbnN0YW5jZXMgb2YgImJ5dGVzIiBvciAiYnl0ZWFycmF5IikgY2FuIGJlXG4gIGNvbXBhcmVkIHdpdGhpbiBhbmQgYWNyb3NzIHRoZWlyIHR5cGVzLiAgVGhleSBjb21wYXJlXG4gIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVpciBlbGVtZW50cy5cblxuKiBTdHJpbmdzIChpbnN0YW5jZXMgb2YgInN0ciIpIGNvbXBhcmUgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlXG4gIG51bWVyaWNhbCBVbmljb2RlIGNvZGUgcG9pbnRzICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAib3JkKCkiKSBvZiB0aGVpciBjaGFyYWN0ZXJzLiBbM11cblxuICBTdHJpbmdzIGFuZCBiaW5hcnkgc2VxdWVuY2VzIGNhbm5vdCBiZSBkaXJlY3RseSBjb21wYXJlZC5cblxuKiBTZXF1ZW5jZXMgKGluc3RhbmNlcyBvZiAidHVwbGUiLCAibGlzdCIsIG9yICJyYW5nZSIpIGNhbiBiZVxuICBjb21wYXJlZCBvbmx5IHdpdGhpbiBlYWNoIG9mIHRoZWlyIHR5cGVzLCB3aXRoIHRoZSByZXN0cmljdGlvbiB0aGF0XG4gIHJhbmdlcyBkbyBub3Qgc3VwcG9ydCBvcmRlciBjb21wYXJpc29uLiAgRXF1YWxpdHkgY29tcGFyaXNvbiBhY3Jvc3NcbiAgdGhlc2UgdHlwZXMgcmVzdWx0cyBpbiB1bmVxdWFsaXR5LCBhbmQgb3JkZXJpbmcgY29tcGFyaXNvbiBhY3Jvc3NcbiAgdGhlc2UgdHlwZXMgcmFpc2VzICJUeXBlRXJyb3IiLlxuXG4gIFNlcXVlbmNlcyBjb21wYXJlIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb24gb2ZcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cywgd2hlcmVieSByZWZsZXhpdml0eSBvZiB0aGUgZWxlbWVudHMgaXNcbiAgZW5mb3JjZWQuXG5cbiAgSW4gZW5mb3JjaW5nIHJlZmxleGl2aXR5IG9mIGVsZW1lbnRzLCB0aGUgY29tcGFyaXNvbiBvZiBjb2xsZWN0aW9uc1xuICBhc3N1bWVzIHRoYXQgZm9yIGEgY29sbGVjdGlvbiBlbGVtZW50ICJ4IiwgInggPT0geCIgaXMgYWx3YXlzIHRydWUuXG4gIEJhc2VkIG9uIHRoYXQgYXNzdW1wdGlvbiwgZWxlbWVudCBpZGVudGl0eSBpcyBjb21wYXJlZCBmaXJzdCwgYW5kXG4gIGVsZW1lbnQgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgb25seSBmb3IgZGlzdGluY3QgZWxlbWVudHMuICBUaGlzXG4gIGFwcHJvYWNoIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQgYXMgYSBzdHJpY3QgZWxlbWVudCBjb21wYXJpc29uXG4gIHdvdWxkLCBpZiB0aGUgY29tcGFyZWQgZWxlbWVudHMgYXJlIHJlZmxleGl2ZS4gIEZvciBub24tcmVmbGV4aXZlXG4gIGVsZW1lbnRzLCB0aGUgcmVzdWx0IGlzIGRpZmZlcmVudCB0aGFuIGZvciBzdHJpY3QgZWxlbWVudFxuICBjb21wYXJpc29uLCBhbmQgbWF5IGJlIHN1cnByaXNpbmc6ICBUaGUgbm9uLXJlZmxleGl2ZSBub3QtYS1udW1iZXJcbiAgdmFsdWVzIGZvciBleGFtcGxlIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIGNvbXBhcmlzb24gYmVoYXZpb3Igd2hlblxuICB1c2VkIGluIGEgbGlzdDpcblxuICAgICA+Pj4gbmFuID0gZmxvYXQoXCdOYU5cJylcbiAgICAgPj4+IG5hbiBpcyBuYW5cbiAgICAgVHJ1ZVxuICAgICA+Pj4gbmFuID09IG5hblxuICAgICBGYWxzZSAgICAgICAgICAgICAgICAgPC0tIHRoZSBkZWZpbmVkIG5vbi1yZWZsZXhpdmUgYmVoYXZpb3Igb2YgTmFOXG4gICAgID4+PiBbbmFuXSA9PSBbbmFuXVxuICAgICBUcnVlICAgICAgICAgICAgICAgICAgPC0tIGxpc3QgZW5mb3JjZXMgcmVmbGV4aXZpdHkgYW5kIHRlc3RzIGlkZW50aXR5IGZpcnN0XG5cbiAgTGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gYmV0d2VlbiBidWlsdC1pbiBjb2xsZWN0aW9ucyB3b3JrcyBhc1xuICBmb2xsb3dzOlxuXG4gICogRm9yIHR3byBjb2xsZWN0aW9ucyB0byBjb21wYXJlIGVxdWFsLCB0aGV5IG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgICB0eXBlLCBoYXZlIHRoZSBzYW1lIGxlbmd0aCwgYW5kIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nXG4gICAgZWxlbWVudHMgbXVzdCBjb21wYXJlIGVxdWFsIChmb3IgZXhhbXBsZSwgIlsxLDJdID09ICgxLDIpIiBpc1xuICAgIGZhbHNlIGJlY2F1c2UgdGhlIHR5cGUgaXMgbm90IHRoZSBzYW1lKS5cblxuICAqIENvbGxlY3Rpb25zIHRoYXQgc3VwcG9ydCBvcmRlciBjb21wYXJpc29uIGFyZSBvcmRlcmVkIHRoZSBzYW1lXG4gICAgYXMgdGhlaXIgZmlyc3QgdW5lcXVhbCBlbGVtZW50cyAoZm9yIGV4YW1wbGUsICJbMSwyLHhdIDw9IFsxLDIseV0iXG4gICAgaGFzIHRoZSBzYW1lIHZhbHVlIGFzICJ4IDw9IHkiKS4gIElmIGEgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXNcbiAgICBub3QgZXhpc3QsIHRoZSBzaG9ydGVyIGNvbGxlY3Rpb24gaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsXG4gICAgIlsxLDJdIDwgWzEsMiwzXSIgaXMgdHJ1ZSkuXG5cbiogTWFwcGluZ3MgKGluc3RhbmNlcyBvZiAiZGljdCIpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleVxuICBoYXZlIGVxdWFsICooa2V5LCB2YWx1ZSkqIHBhaXJzLiBFcXVhbGl0eSBjb21wYXJpc29uIG9mIHRoZSBrZXlzIGFuZFxuICBlbGVtZW50cyBlbmZvcmNlcyByZWZsZXhpdml0eS5cblxuICBPcmRlciBjb21wYXJpc29ucyAoIjwiLCAiPiIsICI8PSIsIGFuZCAiPj0iKSByYWlzZSAiVHlwZUVycm9yIi5cblxuKiBTZXRzIChpbnN0YW5jZXMgb2YgInNldCIgb3IgImZyb3plbnNldCIpIGNhbiBiZSBjb21wYXJlZCB3aXRoaW5cbiAgYW5kIGFjcm9zcyB0aGVpciB0eXBlcy5cblxuICBUaGV5IGRlZmluZSBvcmRlciBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmQgc3VwZXJzZXRcbiAgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKGZvciBleGFtcGxlLFxuICB0aGUgdHdvIHNldHMgInsxLDJ9IiBhbmQgInsyLDN9IiBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZ1xuICAoZm9yIGV4YW1wbGUsICJtaW4oKSIsICJtYXgoKSIsIGFuZCAic29ydGVkKCkiIHByb2R1Y2UgdW5kZWZpbmVkXG4gIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzKS5cblxuICBDb21wYXJpc29uIG9mIHNldHMgZW5mb3JjZXMgcmVmbGV4aXZpdHkgb2YgaXRzIGVsZW1lbnRzLlxuXG4qIE1vc3Qgb3RoZXIgYnVpbHQtaW4gdHlwZXMgaGF2ZSBubyBjb21wYXJpc29uIG1ldGhvZHMgaW1wbGVtZW50ZWQsXG4gIHNvIHRoZXkgaW5oZXJpdCB0aGUgZGVmYXVsdCBjb21wYXJpc29uIGJlaGF2aW9yLlxuXG5Vc2VyLWRlZmluZWQgY2xhc3NlcyB0aGF0IGN1c3RvbWl6ZSB0aGVpciBjb21wYXJpc29uIGJlaGF2aW9yIHNob3VsZFxuZm9sbG93IHNvbWUgY29uc2lzdGVuY3kgcnVsZXMsIGlmIHBvc3NpYmxlOlxuXG4qIEVxdWFsaXR5IGNvbXBhcmlzb24gc2hvdWxkIGJlIHJlZmxleGl2ZS4gSW4gb3RoZXIgd29yZHMsIGlkZW50aWNhbFxuICBvYmplY3RzIHNob3VsZCBjb21wYXJlIGVxdWFsOlxuXG4gICAgICJ4IGlzIHkiIGltcGxpZXMgInggPT0geSJcblxuKiBDb21wYXJpc29uIHNob3VsZCBiZSBzeW1tZXRyaWMuIEluIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nXG4gIGV4cHJlc3Npb25zIHNob3VsZCBoYXZlIHRoZSBzYW1lIHJlc3VsdDpcblxuICAgICAieCA9PSB5IiBhbmQgInkgPT0geCJcblxuICAgICAieCAhPSB5IiBhbmQgInkgIT0geCJcblxuICAgICAieCA8IHkiIGFuZCAieSA+IHgiXG5cbiAgICAgInggPD0geSIgYW5kICJ5ID49IHgiXG5cbiogQ29tcGFyaXNvbiBzaG91bGQgYmUgdHJhbnNpdGl2ZS4gVGhlIGZvbGxvd2luZyAobm9uLWV4aGF1c3RpdmUpXG4gIGV4YW1wbGVzIGlsbHVzdHJhdGUgdGhhdDpcblxuICAgICAieCA+IHkgYW5kIHkgPiB6IiBpbXBsaWVzICJ4ID4geiJcblxuICAgICAieCA8IHkgYW5kIHkgPD0geiIgaW1wbGllcyAieCA8IHoiXG5cbiogSW52ZXJzZSBjb21wYXJpc29uIHNob3VsZCByZXN1bHQgaW4gdGhlIGJvb2xlYW4gbmVnYXRpb24uIEluIG90aGVyXG4gIHdvcmRzLCB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zIHNob3VsZCBoYXZlIHRoZSBzYW1lIHJlc3VsdDpcblxuICAgICAieCA9PSB5IiBhbmQgIm5vdCB4ICE9IHkiXG5cbiAgICAgInggPCB5IiBhbmQgIm5vdCB4ID49IHkiIChmb3IgdG90YWwgb3JkZXJpbmcpXG5cbiAgICAgInggPiB5IiBhbmQgIm5vdCB4IDw9IHkiIChmb3IgdG90YWwgb3JkZXJpbmcpXG5cbiAgVGhlIGxhc3QgdHdvIGV4cHJlc3Npb25zIGFwcGx5IHRvIHRvdGFsbHkgb3JkZXJlZCBjb2xsZWN0aW9ucyAoZS5nLlxuICB0byBzZXF1ZW5jZXMsIGJ1dCBub3QgdG8gc2V0cyBvciBtYXBwaW5ncykuIFNlZSBhbHNvIHRoZVxuICAidG90YWxfb3JkZXJpbmcoKSIgZGVjb3JhdG9yLlxuXG5QeXRob24gZG9lcyBub3QgZW5mb3JjZSB0aGVzZSBjb25zaXN0ZW5jeSBydWxlcy4gSW4gZmFjdCwgdGhlXG5ub3QtYS1udW1iZXIgdmFsdWVzIGFyZSBhbiBleGFtcGxlIGZvciBub3QgZm9sbG93aW5nIHRoZXNlIHJ1bGVzLlxuXG5cbk1lbWJlcnNoaXAgdGVzdCBvcGVyYXRpb25zXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0b3JzICJpbiIgYW5kICJub3QgaW4iIHRlc3QgZm9yIG1lbWJlcnNoaXAuICAieCBpbiBzIlxuZXZhbHVhdGVzIHRvIHRydWUgaWYgKngqIGlzIGEgbWVtYmVyIG9mICpzKiwgYW5kIGZhbHNlIG90aGVyd2lzZS4gICJ4XG5ub3QgaW4gcyIgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgInggaW4gcyIuICBBbGwgYnVpbHQtaW4gc2VxdWVuY2VzXG5hbmQgc2V0IHR5cGVzIHN1cHBvcnQgdGhpcyBhcyB3ZWxsIGFzIGRpY3Rpb25hcnksIGZvciB3aGljaCAiaW4iIHRlc3RzXG53aGV0aGVyIHRoZSBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzXG5saXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGVcbmV4cHJlc3Npb24gInggaW4geSIgaXMgZXF1aXZhbGVudCB0byAiYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW5cbnkpIi5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBpc1xuYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzICJ5LmZpbmQoeCkgIT0gLTEiLiAgRW1wdHlcbnN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsXG5zbyAiIiIgaW4gImFiYyIiIHdpbGwgcmV0dXJuICJUcnVlIi5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgIl9fY29udGFpbnNfXygpIiBtZXRob2QsICJ4XG5pbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICJ5Ll9fY29udGFpbnNfXyh4KSIgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiBidXQgZG9cbmRlZmluZSAiX19pdGVyX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgc29tZSB2YWx1ZSAieiIgd2l0aCAieCA9PSB6IlxuaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgInkiLiAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZFxuZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbiJfX2dldGl0ZW1fXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCAieCA9PSB5W2ldIiwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSAiSW5kZXhFcnJvciIgZXhjZXB0aW9uLiAgKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCBpbiIgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbiJpbiIuXG5cblxuSWRlbnRpdHkgY29tcGFyaXNvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRvcnMgImlzIiBhbmQgImlzIG5vdCIgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiAieCBpcyB5IiBpc1xudHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgInggaXMgbm90IHkiXG55aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKLSAnY29tcG91bmQnOiB1J1xuQ29tcG91bmQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnRhaW4gKGdyb3VwcyBvZikgb3RoZXIgc3RhdGVtZW50czsgdGhleSBhZmZlY3Rcbm9yIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aG9zZSBvdGhlciBzdGF0ZW1lbnRzIGluIHNvbWUgd2F5LiAgSW5cbmdlbmVyYWwsIGNvbXBvdW5kIHN0YXRlbWVudHMgc3BhbiBtdWx0aXBsZSBsaW5lcywgYWx0aG91Z2ggaW4gc2ltcGxlXG5pbmNhcm5hdGlvbnMgYSB3aG9sZSBjb21wb3VuZCBzdGF0ZW1lbnQgbWF5IGJlIGNvbnRhaW5lZCBpbiBvbmUgbGluZS5cblxuVGhlICJpZiIsICJ3aGlsZSIgYW5kICJmb3IiIHN0YXRlbWVudHMgaW1wbGVtZW50IHRyYWRpdGlvbmFsIGNvbnRyb2xcbmZsb3cgY29uc3RydWN0cy4gICJ0cnkiIHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXBcbmNvZGUgZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cywgd2hpbGUgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgYWxsb3dzIHRoZVxuZXhlY3V0aW9uIG9mIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gY29kZSBhcm91bmQgYSBibG9jayBvZlxuY29kZS4gIEZ1bmN0aW9uIGFuZCBjbGFzcyBkZWZpbml0aW9ucyBhcmUgYWxzbyBzeW50YWN0aWNhbGx5IGNvbXBvdW5kXG5zdGF0ZW1lbnRzLlxuXG5BIGNvbXBvdW5kIHN0YXRlbWVudCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2YgYSBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCAiaWYiIGNsYXVzZSBhIGZvbGxvd2luZyAiZWxzZSIgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCh4KVxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbiJwcmludCgpIiBjYWxscyBhcmUgZXhlY3V0ZWQ6XG5cbiAgIGlmIHggPCB5IDwgejogcHJpbnQoeCk7IHByaW50KHkpOyBwcmludCh6KVxuXG5TdW1tYXJpemluZzpcblxuICAgY29tcG91bmRfc3RtdCA6Oj0gaWZfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZvcl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHRyeV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdpdGhfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmdW5jZGVmXG4gICAgICAgICAgICAgICAgICAgICB8IGNsYXNzZGVmXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgIk5FV0xJTkUiIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGFcbiJERURFTlQiLiAgQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzIGJlZ2luXG53aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyAiZWxzZSJcJyBwcm9ibGVtIGlzIHNvbHZlZCBpbiBQeXRob24gYnlcbnJlcXVpcmluZyBuZXN0ZWQgImlmIiBzdGF0ZW1lbnRzIHRvIGJlIGluZGVudGVkKS5cblxuVGhlIGZvcm1hdHRpbmcgb2YgdGhlIGdyYW1tYXIgcnVsZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwbGFjZXNcbmVhY2ggY2xhdXNlIG9uIGEgc2VwYXJhdGUgbGluZSBmb3IgY2xhcml0eS5cblxuXG5UaGUgImlmIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PVxuXG5UaGUgImlmIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSAiaWYiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG5cblxuVGhlICJ3aGlsZSIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlICJ3aGlsZSIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWRcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGdvZXMgYmFja1xudG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cblxuXG5UaGUgImZvciIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09XG5cblRoZSAiZm9yIiBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2VcbihzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuImV4cHJlc3Npb25fbGlzdCIuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvci4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgaXMgbm8gbmV4dFxuaXRlbS5cblxuVGhlIGZvci1sb29wIG1ha2VzIGFzc2lnbm1lbnRzIHRvIHRoZSB2YXJpYWJsZXMocykgaW4gdGhlIHRhcmdldCBsaXN0LlxuVGhpcyBvdmVyd3JpdGVzIGFsbCBwcmV2aW91cyBhc3NpZ25tZW50cyB0byB0aG9zZSB2YXJpYWJsZXMgaW5jbHVkaW5nXG50aG9zZSBtYWRlIGluIHRoZSBzdWl0ZSBvZiB0aGUgZm9yLWxvb3A6XG5cbiAgIGZvciBpIGluIHJhbmdlKDEwKTpcbiAgICAgICBwcmludChpKVxuICAgICAgIGkgPSA1ICAgICAgICAgICAgICMgdGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIGZvci1sb29wXG4gICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGkgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRleCBpbiB0aGUgcmFuZ2VcblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgdGhleSB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXRcbmFsbCBieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGVcbiAgbG9vcCAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlICJ0cnkiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiBpZGVudGlmaWVyXV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgImV4Y2VwdCIgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuIG5vXG5leGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBzdWl0ZSwgYSBzZWFyY2ggZm9yIGFuXG5leGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdCBjbGF1c2VzXG5pbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuIGV4cHJlc3Npb24tXG5sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlcyBhbnlcbmV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdCBleHByZXNzaW9uXG5pcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpcyBjb21wYXRpYmxlXG53aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZSBleGNlcHRpb25cbm9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlIGV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSAidHJ5IiBzdGF0ZW1lbnQgcmFpc2VkXG50aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSAiYXMiIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLCBpZlxucHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyAiYXMgdGFyZ2V0IiwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgInN5cyIgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzZWQgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgPj4+IGRlZiBmKCk6XG4gICAuLi4gICAgIHRyeTpcbiAgIC4uLiAgICAgICAgIDEvMFxuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIDQyXG4gICAuLi5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgImZpbmFsbHkiIGNsYXVzZS5cblxuV2hlbiBhICJyZXR1cm4iLCAiYnJlYWsiIG9yICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluIHRoZVxuInRyeSIgc3VpdGUgb2YgYSAidHJ5Ii4uLiJmaW5hbGx5IiBzdGF0ZW1lbnQsIHRoZSAiZmluYWxseSIgY2xhdXNlIGlzXG5hbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSAiY29udGludWUiIHN0YXRlbWVudCBpcyBpbGxlZ2FsIGluXG50aGUgImZpbmFsbHkiIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnRcbmltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cblRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsYXN0ICJyZXR1cm4iXG5zdGF0ZW1lbnQgZXhlY3V0ZWQuICBTaW5jZSB0aGUgImZpbmFsbHkiIGNsYXVzZSBhbHdheXMgZXhlY3V0ZXMsIGFcbiJyZXR1cm4iIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgImZpbmFsbHkiIGNsYXVzZSB3aWxsIGFsd2F5cyBiZSB0aGVcbmxhc3Qgb25lIGV4ZWN1dGVkOlxuXG4gICA+Pj4gZGVmIGZvbygpOlxuICAgLi4uICAgICB0cnk6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCd0cnlcJ1xuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnZmluYWxseVwnXG4gICAuLi5cbiAgID4+PiBmb28oKVxuICAgXCdmaW5hbGx5XCdcblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgInJhaXNlIiBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSAid2l0aCIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgIndpdGgiIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vbiAidHJ5Ii4uLiJleGNlcHQiLi4uImZpbmFsbHkiXG51c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWQgZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgIndpdGgiIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSAid2l0aF9pdGVtIilcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2VudGVyX18oKSIgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgIndpdGgiIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSAiX19lbnRlcl9fKCkiIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgIndpdGgiIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlICJfX2VudGVyX18oKSJcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiAiX19leGl0X18oKSIgd2lsbCBhbHdheXMgYmVcbiAgICAgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byAiX19leGl0X18oKSIuIE90aGVyd2lzZSwgdGhyZWVcbiAgICJOb25lIiBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgIl9fZXhpdF9fKCkiIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXMgcmVyYWlzZWQuXG4gICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGFuZFxuICAgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSAid2l0aCJcbiAgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gIl9fZXhpdF9fKCkiIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSAid2l0aCIgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cblxuXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgIHwgIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogIj0iXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiIioiIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tIHRoaXNcbmlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG4iTm9uZSIgYXMgdGhlIGRlZmF1bHQsIGFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZVxuZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuIiIqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nIGFueVxuZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZiB0aGVcbmZvcm0gIiIqKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiIioiIiBvciAiIippZGVudGlmaWVyIiIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gIiI6IGV4cHJlc3Npb24iIiBmb2xsb3dpbmdcbnRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvbiBldmVuIHRob3NlXG5vZiB0aGUgZm9ybSAiKmlkZW50aWZpZXIiIG9yICIqKmlkZW50aWZpZXIiLiAgRnVuY3Rpb25zIG1heSBoYXZlXG4icmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICIiLT4gZXhwcmVzc2lvbiIiIGFmdGVyIHRoZSBwYXJhbWV0ZXJcbmxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIGFuZCBhcmVcbmV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLiAgQW5ub3RhdGlvbnMgbWF5XG5iZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG5UaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgYVxuZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhcyB2YWx1ZXMgb2YgYVxuZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZSAiX19hbm5vdGF0aW9uc19fIlxuYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiImRlZiIiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgIiJkZWYiIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICIiZGVmIiJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuXG4gICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgIm9iamVjdCI7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCAic2VsZi5uYW1lID0gdmFsdWUiLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb24gIiJzZWxmLm5hbWUiIixcbmFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lXG53aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmUgdXNlZCBhcyBkZWZhdWx0c1xuZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW4gbGVhZCB0b1xudW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC1cbiAgQ2xhc3MgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3NcbiAgICB0aGVyZSBpcyBhICJmaW5hbGx5IiBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyXG4gICAgZXhjZXB0aW9uLiBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2ZcbiAgICBhbiBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhICJyZXR1cm4iLCAiY29udGludWUiLCBvclxuICAgICJicmVhayIgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGVcbiAgICBmdW5jdGlvbiBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzICJfX2RvY19fIlxuICAgIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgIl9fZG9jX18iIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCi0gJ2NvbnRleHQtbWFuYWdlcnMnOiB1J1xuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSAid2l0aCIgc3RhdGVtZW50LiBUaGUgY29udGV4dCBtYW5hZ2VyXG5oYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZSBjb250ZXh0XG5mb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlIG5vcm1hbGx5XG5pbnZva2VkIHVzaW5nIHRoZSAid2l0aCIgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvbiAqVGhlIHdpdGhcbnN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpciBtZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSAid2l0aCJcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgImFzIiBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSAiTm9uZSIuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0ICJfX2V4aXRfXygpIiBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuJywKKyAnY29tcG91bmQnOiB1J1xuQ29tcG91bmQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnRhaW4gKGdyb3VwcyBvZikgb3RoZXIgc3RhdGVtZW50czsgdGhleSBhZmZlY3Rcbm9yIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aG9zZSBvdGhlciBzdGF0ZW1lbnRzIGluIHNvbWUgd2F5LiAgSW5cbmdlbmVyYWwsIGNvbXBvdW5kIHN0YXRlbWVudHMgc3BhbiBtdWx0aXBsZSBsaW5lcywgYWx0aG91Z2ggaW4gc2ltcGxlXG5pbmNhcm5hdGlvbnMgYSB3aG9sZSBjb21wb3VuZCBzdGF0ZW1lbnQgbWF5IGJlIGNvbnRhaW5lZCBpbiBvbmUgbGluZS5cblxuVGhlICJpZiIsICJ3aGlsZSIgYW5kICJmb3IiIHN0YXRlbWVudHMgaW1wbGVtZW50IHRyYWRpdGlvbmFsIGNvbnRyb2xcbmZsb3cgY29uc3RydWN0cy4gICJ0cnkiIHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXBcbmNvZGUgZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cywgd2hpbGUgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgYWxsb3dzIHRoZVxuZXhlY3V0aW9uIG9mIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gY29kZSBhcm91bmQgYSBibG9jayBvZlxuY29kZS4gIEZ1bmN0aW9uIGFuZCBjbGFzcyBkZWZpbml0aW9ucyBhcmUgYWxzbyBzeW50YWN0aWNhbGx5IGNvbXBvdW5kXG5zdGF0ZW1lbnRzLlxuXG5BIGNvbXBvdW5kIHN0YXRlbWVudCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2YgYSBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCAiaWYiIGNsYXVzZSBhIGZvbGxvd2luZyAiZWxzZSIgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCh4KVxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbiJwcmludCgpIiBjYWxscyBhcmUgZXhlY3V0ZWQ6XG5cbiAgIGlmIHggPCB5IDwgejogcHJpbnQoeCk7IHByaW50KHkpOyBwcmludCh6KVxuXG5TdW1tYXJpemluZzpcblxuICAgY29tcG91bmRfc3RtdCA6Oj0gaWZfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZvcl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHRyeV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdpdGhfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmdW5jZGVmXG4gICAgICAgICAgICAgICAgICAgICB8IGNsYXNzZGVmXG4gICAgICAgICAgICAgICAgICAgICB8IGFzeW5jX3dpdGhfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBhc3luY19mb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBhc3luY19mdW5jZGVmXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgIk5FV0xJTkUiIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGFcbiJERURFTlQiLiAgQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzIGJlZ2luXG53aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyAiZWxzZSJcJyBwcm9ibGVtIGlzIHNvbHZlZCBpbiBQeXRob24gYnlcbnJlcXVpcmluZyBuZXN0ZWQgImlmIiBzdGF0ZW1lbnRzIHRvIGJlIGluZGVudGVkKS5cblxuVGhlIGZvcm1hdHRpbmcgb2YgdGhlIGdyYW1tYXIgcnVsZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwbGFjZXNcbmVhY2ggY2xhdXNlIG9uIGEgc2VwYXJhdGUgbGluZSBmb3IgY2xhcml0eS5cblxuXG5UaGUgImlmIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PVxuXG5UaGUgImlmIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSAiaWYiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG5cblxuVGhlICJ3aGlsZSIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlICJ3aGlsZSIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWRcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGdvZXMgYmFja1xudG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cblxuXG5UaGUgImZvciIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09XG5cblRoZSAiZm9yIiBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2VcbihzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuImV4cHJlc3Npb25fbGlzdCIuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvci4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgaXMgbm8gbmV4dFxuaXRlbS5cblxuVGhlIGZvci1sb29wIG1ha2VzIGFzc2lnbm1lbnRzIHRvIHRoZSB2YXJpYWJsZXMocykgaW4gdGhlIHRhcmdldCBsaXN0LlxuVGhpcyBvdmVyd3JpdGVzIGFsbCBwcmV2aW91cyBhc3NpZ25tZW50cyB0byB0aG9zZSB2YXJpYWJsZXMgaW5jbHVkaW5nXG50aG9zZSBtYWRlIGluIHRoZSBzdWl0ZSBvZiB0aGUgZm9yLWxvb3A6XG5cbiAgIGZvciBpIGluIHJhbmdlKDEwKTpcbiAgICAgICBwcmludChpKVxuICAgICAgIGkgPSA1ICAgICAgICAgICAgICMgdGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIGZvci1sb29wXG4gICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGkgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRleCBpbiB0aGUgcmFuZ2VcblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgdGhleSB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXRcbmFsbCBieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGVcbiAgbG9vcCAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlICJ0cnkiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiBpZGVudGlmaWVyXV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgImV4Y2VwdCIgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuIG5vXG5leGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBzdWl0ZSwgYSBzZWFyY2ggZm9yIGFuXG5leGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdCBjbGF1c2VzXG5pbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuIGV4cHJlc3Npb24tXG5sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlcyBhbnlcbmV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdCBleHByZXNzaW9uXG5pcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpcyBjb21wYXRpYmxlXG53aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZSBleGNlcHRpb25cbm9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlIGV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSAidHJ5IiBzdGF0ZW1lbnQgcmFpc2VkXG50aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSAiYXMiIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLCBpZlxucHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyAiYXMgdGFyZ2V0IiwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgInN5cyIgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzZWQgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgPj4+IGRlZiBmKCk6XG4gICAuLi4gICAgIHRyeTpcbiAgIC4uLiAgICAgICAgIDEvMFxuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIDQyXG4gICAuLi5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgImZpbmFsbHkiIGNsYXVzZS5cblxuV2hlbiBhICJyZXR1cm4iLCAiYnJlYWsiIG9yICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluIHRoZVxuInRyeSIgc3VpdGUgb2YgYSAidHJ5Ii4uLiJmaW5hbGx5IiBzdGF0ZW1lbnQsIHRoZSAiZmluYWxseSIgY2xhdXNlIGlzXG5hbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSAiY29udGludWUiIHN0YXRlbWVudCBpcyBpbGxlZ2FsIGluXG50aGUgImZpbmFsbHkiIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnRcbmltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cblRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsYXN0ICJyZXR1cm4iXG5zdGF0ZW1lbnQgZXhlY3V0ZWQuICBTaW5jZSB0aGUgImZpbmFsbHkiIGNsYXVzZSBhbHdheXMgZXhlY3V0ZXMsIGFcbiJyZXR1cm4iIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgImZpbmFsbHkiIGNsYXVzZSB3aWxsIGFsd2F5cyBiZSB0aGVcbmxhc3Qgb25lIGV4ZWN1dGVkOlxuXG4gICA+Pj4gZGVmIGZvbygpOlxuICAgLi4uICAgICB0cnk6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCd0cnlcJ1xuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnZmluYWxseVwnXG4gICAuLi5cbiAgID4+PiBmb28oKVxuICAgXCdmaW5hbGx5XCdcblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgInJhaXNlIiBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSAid2l0aCIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgIndpdGgiIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vbiAidHJ5Ii4uLiJleGNlcHQiLi4uImZpbmFsbHkiXG51c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWQgZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgIndpdGgiIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSAid2l0aF9pdGVtIilcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2VudGVyX18oKSIgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgIndpdGgiIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSAiX19lbnRlcl9fKCkiIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgIndpdGgiIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlICJfX2VudGVyX18oKSJcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiAiX19leGl0X18oKSIgd2lsbCBhbHdheXMgYmVcbiAgICAgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byAiX19leGl0X18oKSIuIE90aGVyd2lzZSwgdGhyZWVcbiAgICJOb25lIiBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgIl9fZXhpdF9fKCkiIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXMgcmVyYWlzZWQuXG4gICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGFuZFxuICAgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSAid2l0aCJcbiAgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gIl9fZXhpdF9fKCkiIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSAid2l0aCIgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOiAqKlBFUCAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICB8ICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqICI9IlxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgIiIqIiIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzXG5pcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdoZW4gdGhlXG5mdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpc1xuZXZhbHVhdGVkIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtXG5jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudFxudG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhXG5saXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnlcbmFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC5cblRoaXMgaXMgZ2VuZXJhbGx5IG5vdCB3aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIHVzZVxuIk5vbmUiIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGVcbmZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiIiKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZyBhbnlcbmV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWYgdGhlXG5mb3JtICIiKippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgIiIqIiIgb3IgIiIqaWRlbnRpZmllciIiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICIiOiBleHByZXNzaW9uIiIgZm9sbG93aW5nXG50aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb24gZXZlbiB0aG9zZVxub2YgdGhlIGZvcm0gIippZGVudGlmaWVyIiBvciAiKippZGVudGlmaWVyIi4gIEZ1bmN0aW9ucyBtYXkgaGF2ZVxuInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiIi0+IGV4cHJlc3Npb24iIiBhZnRlciB0aGUgcGFyYW1ldGVyXG5saXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiBhbmQgYXJlXG5ldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4gIEFubm90YXRpb25zIG1heVxuYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLlxuVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFcbmZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXMgdmFsdWVzIG9mIGFcbmRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGUgIl9fYW5ub3RhdGlvbnNfXyJcbmF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgIiJkZWYiIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICIiZGVmIiIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiImRlZiIiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcblxuICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG5cblxuQ2xhc3MgZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09XG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBkZWZpbmVzIGEgY2xhc3Mgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkXG50eXBlIGhpZXJhcmNoeSopOlxuXG4gICBjbGFzc2RlZiAgICA6Oj0gW2RlY29yYXRvcnNdICJjbGFzcyIgY2xhc3NuYW1lIFtpbmhlcml0YW5jZV0gIjoiIHN1aXRlXG4gICBpbmhlcml0YW5jZSA6Oj0gIigiIFthcmd1bWVudF9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgIm9iamVjdCI7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCAic2VsZi5uYW1lID0gdmFsdWUiLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb24gIiJzZWxmLm5hbWUiIixcbmFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lXG53aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmUgdXNlZCBhcyBkZWZhdWx0c1xuZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW4gbGVhZCB0b1xudW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC1cbiAgQ2xhc3MgRGVjb3JhdG9yc1xuXG5cbkNvcm91dGluZXNcbj09PT09PT09PT1cblxuTmV3IGluIHZlcnNpb24gMy41LlxuXG5cbkNvcm91dGluZSBmdW5jdGlvbiBkZWZpbml0aW9uXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICBhc3luY19mdW5jZGVmIDo6PSBbZGVjb3JhdG9yc10gImFzeW5jIiAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG5cbkV4ZWN1dGlvbiBvZiBQeXRob24gY29yb3V0aW5lcyBjYW4gYmUgc3VzcGVuZGVkIGFuZCByZXN1bWVkIGF0IG1hbnlcbnBvaW50cyAoc2VlICpjb3JvdXRpbmUqKS4gIEluIHRoZSBib2R5IG9mIGEgY29yb3V0aW5lLCBhbnkgImF3YWl0IiBhbmRcbiJhc3luYyIgaWRlbnRpZmllcnMgYmVjb21lIHJlc2VydmVkIGtleXdvcmRzOyAiYXdhaXQiIGV4cHJlc3Npb25zLFxuImFzeW5jIGZvciIgYW5kICJhc3luYyB3aXRoIiBjYW4gb25seSBiZSB1c2VkIGluIGNvcm91dGluZSBib2RpZXMuXG5cbkZ1bmN0aW9ucyBkZWZpbmVkIHdpdGggImFzeW5jIGRlZiIgc3ludGF4IGFyZSBhbHdheXMgY29yb3V0aW5lXG5mdW5jdGlvbnMsIGV2ZW4gaWYgdGhleSBkbyBub3QgY29udGFpbiAiYXdhaXQiIG9yICJhc3luYyIga2V5d29yZHMuXG5cbkl0IGlzIGEgIlN5bnRheEVycm9yIiB0byB1c2UgInlpZWxkIiBleHByZXNzaW9ucyBpbiAiYXN5bmMgZGVmIlxuY29yb3V0aW5lcy5cblxuQW4gZXhhbXBsZSBvZiBhIGNvcm91dGluZSBmdW5jdGlvbjpcblxuICAgYXN5bmMgZGVmIGZ1bmMocGFyYW0xLCBwYXJhbTIpOlxuICAgICAgIGRvX3N0dWZmKClcbiAgICAgICBhd2FpdCBzb21lX2Nvcm91dGluZSgpXG5cblxuVGhlICJhc3luYyBmb3IiIHN0YXRlbWVudFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICBhc3luY19mb3Jfc3RtdCA6Oj0gImFzeW5jIiBmb3Jfc3RtdFxuXG5BbiAqYXN5bmNocm9ub3VzIGl0ZXJhYmxlKiBpcyBhYmxlIHRvIGNhbGwgYXN5bmNocm9ub3VzIGNvZGUgaW4gaXRzXG4qaXRlciogaW1wbGVtZW50YXRpb24sIGFuZCAqYXN5bmNocm9ub3VzIGl0ZXJhdG9yKiBjYW4gY2FsbFxuYXN5bmNocm9ub3VzIGNvZGUgaW4gaXRzICpuZXh0KiBtZXRob2QuXG5cblRoZSAiYXN5bmMgZm9yIiBzdGF0ZW1lbnQgYWxsb3dzIGNvbnZlbmllbnQgaXRlcmF0aW9uIG92ZXJcbmFzeW5jaHJvbm91cyBpdGVyYXRvcnMuXG5cblRoZSBmb2xsb3dpbmcgY29kZTpcblxuICAgYXN5bmMgZm9yIFRBUkdFVCBpbiBJVEVSOlxuICAgICAgIEJMT0NLXG4gICBlbHNlOlxuICAgICAgIEJMT0NLMlxuXG5JcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0bzpcblxuICAgaXRlciA9IChJVEVSKVxuICAgaXRlciA9IHR5cGUoaXRlcikuX19haXRlcl9fKGl0ZXIpXG4gICBydW5uaW5nID0gVHJ1ZVxuICAgd2hpbGUgcnVubmluZzpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIFRBUkdFVCA9IGF3YWl0IHR5cGUoaXRlcikuX19hbmV4dF9fKGl0ZXIpXG4gICAgICAgZXhjZXB0IFN0b3BBc3luY0l0ZXJhdGlvbjpcbiAgICAgICAgICAgcnVubmluZyA9IEZhbHNlXG4gICAgICAgZWxzZTpcbiAgICAgICAgICAgQkxPQ0tcbiAgIGVsc2U6XG4gICAgICAgQkxPQ0syXG5cblNlZSBhbHNvICJfX2FpdGVyX18oKSIgYW5kICJfX2FuZXh0X18oKSIgZm9yIGRldGFpbHMuXG5cbkl0IGlzIGEgIlN5bnRheEVycm9yIiB0byB1c2UgImFzeW5jIGZvciIgc3RhdGVtZW50IG91dHNpZGUgb2YgYW5cbiJhc3luYyBkZWYiIGZ1bmN0aW9uLlxuXG5cblRoZSAiYXN5bmMgd2l0aCIgc3RhdGVtZW50XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICBhc3luY193aXRoX3N0bXQgOjo9ICJhc3luYyIgd2l0aF9zdG10XG5cbkFuICphc3luY2hyb25vdXMgY29udGV4dCBtYW5hZ2VyKiBpcyBhICpjb250ZXh0IG1hbmFnZXIqIHRoYXQgaXMgYWJsZVxudG8gc3VzcGVuZCBleGVjdXRpb24gaW4gaXRzICplbnRlciogYW5kICpleGl0KiBtZXRob2RzLlxuXG5UaGUgZm9sbG93aW5nIGNvZGU6XG5cbiAgIGFzeW5jIHdpdGggRVhQUiBhcyBWQVI6XG4gICAgICAgQkxPQ0tcblxuSXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG86XG5cbiAgIG1nciA9IChFWFBSKVxuICAgYWV4aXQgPSB0eXBlKG1ncikuX19hZXhpdF9fXG4gICBhZW50ZXIgPSB0eXBlKG1ncikuX19hZW50ZXJfXyhtZ3IpXG4gICBleGMgPSBUcnVlXG5cbiAgIFZBUiA9IGF3YWl0IGFlbnRlclxuICAgdHJ5OlxuICAgICAgIEJMT0NLXG4gICBleGNlcHQ6XG4gICAgICAgaWYgbm90IGF3YWl0IGFleGl0KG1nciwgKnN5cy5leGNfaW5mbygpKTpcbiAgICAgICAgICAgcmFpc2VcbiAgIGVsc2U6XG4gICAgICAgYXdhaXQgYWV4aXQobWdyLCBOb25lLCBOb25lLCBOb25lKVxuXG5TZWUgYWxzbyAiX19hZW50ZXJfXygpIiBhbmQgIl9fYWV4aXRfXygpIiBmb3IgZGV0YWlscy5cblxuSXQgaXMgYSAiU3ludGF4RXJyb3IiIHRvIHVzZSAiYXN5bmMgd2l0aCIgc3RhdGVtZW50IG91dHNpZGUgb2YgYW5cbiJhc3luYyBkZWYiIGZ1bmN0aW9uLlxuXG5TZWUgYWxzbzogKipQRVAgNDkyKiogLSBDb3JvdXRpbmVzIHdpdGggYXN5bmMgYW5kIGF3YWl0IHN5bnRheFxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3NcbiAgICB0aGVyZSBpcyBhICJmaW5hbGx5IiBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyXG4gICAgZXhjZXB0aW9uLiBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2ZcbiAgICBhbiBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhICJyZXR1cm4iLCAiY29udGludWUiLCBvclxuICAgICJicmVhayIgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGVcbiAgICBmdW5jdGlvbiBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzICJfX2RvY19fIlxuICAgIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgIl9fZG9jX18iIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCisgJ2NvbnRleHQtbWFuYWdlcnMnOiB1J1xuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSAid2l0aCIgc3RhdGVtZW50LiBUaGUgY29udGV4dCBtYW5hZ2VyXG5oYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZSBjb250ZXh0XG5mb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlIG5vcm1hbGx5XG5pbnZva2VkIHVzaW5nIHRoZSAid2l0aCIgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvbiAqVGhlIHdpdGhcbnN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpciBtZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSAid2l0aCJcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgImFzIiBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSAiTm9uZSIuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0ICJfX2V4aXRfXygpIiBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286ICoqUEVQIDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcblxuICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uICJ3aXRoIlxuICAgICBzdGF0ZW1lbnQuXG4nLAogICdjb250aW51ZSc6IHUnXG5UaGUgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBjb250aW51ZV9zdG10IDo6PSAiY29udGludWUiXG5cbiJjb250aW51ZSIgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSAiZm9yIiBvciAid2hpbGUiXG5sb29wLCBidXQgbm90IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIG9yIGNsYXNzIGRlZmluaXRpb24gb3IgImZpbmFsbHkiXG5jbGF1c2Ugd2l0aGluIHRoYXQgbG9vcC4gIEl0IGNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGN5Y2xlIG9mIHRoZVxubmVhcmVzdCBlbmNsb3NpbmcgbG9vcC5cblxuV2hlbiAiY29udGludWUiIHBhc3NlcyBjb250cm9sIG91dCBvZiBhICJ0cnkiIHN0YXRlbWVudCB3aXRoIGFcbiJmaW5hbGx5IiBjbGF1c2UsIHRoYXQgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5zdGFydGluZyB0aGUgbmV4dCBsb29wIGN5Y2xlLlxuJywKICAnY29udmVyc2lvbnMnOiB1J1xuQXJpdGhtZXRpYyBjb252ZXJzaW9uc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5XaGVuIGEgZGVzY3JpcHRpb24gb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRvciBiZWxvdyB1c2VzIHRoZSBwaHJhc2VcbiJ0aGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCIgdGhpcyBtZWFuc1xudGhhdCB0aGUgb3BlcmF0b3IgaW1wbGVtZW50YXRpb24gZm9yIGJ1aWx0LWluIHR5cGVzIHdvcmtzIGFzIGZvbGxvd3M6XG5cbiogSWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgY29tcGxleCBudW1iZXIsIHRoZSBvdGhlciBpcyBjb252ZXJ0ZWQgdG9cbiAgY29tcGxleDtcblxuKiBvdGhlcndpc2UsIGlmIGVpdGhlciBhcmd1bWVudCBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgdGhlXG4gIG90aGVyIGlzIGNvbnZlcnRlZCB0byBmbG9hdGluZyBwb2ludDtcblxuKiBvdGhlcndpc2UsIGJvdGggbXVzdCBiZSBpbnRlZ2VycyBhbmQgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuXG5cblNvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGFzIGFcbmxlZnQgYXJndW1lbnQgdG8gdGhlIFwnJVwnIG9wZXJhdG9yKS4gIEV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgdGhlaXIgb3duXG5jb252ZXJzaW9uIGJlaGF2aW9yLlxuJywKICAnY3VzdG9taXphdGlvbic6IHUnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICAiX19uZXdfXygpIiBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiAiX19uZXdfXygpIiBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHkgYW5cbiAgIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIHVzaW5nXG4gICAic3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSkiIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiAiX19uZXdfXygpIiByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgICJfX2luaXRfXyhzZWxmWywgLi4uXSkiLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byAiX19uZXdfXygpIi5cblxuICAgSWYgIl9fbmV3X18oKSIgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgIl9fbmV3X18oKSIgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIGFmdGVyIHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBjcmVhdGVkIChieSAiX19uZXdfXygpIiksIGJ1dFxuICAgYmVmb3JlIGl0IGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgIl9faW5pdF9fKCkiIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCwgaWZcbiAgIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZiB0aGVcbiAgIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgIkJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pIi5cblxuICAgQmVjYXVzZSAiX19uZXdfXygpIiBhbmQgIl9faW5pdF9fKCkiIHdvcmsgdG9nZXRoZXIgaW4gY29uc3RydWN0aW5nXG4gICBvYmplY3RzICgiX19uZXdfXygpIiB0byBjcmVhdGUgaXQsIGFuZCAiX19pbml0X18oKSIgdG8gY3VzdG9taXNlXG4gICBpdCksIG5vIG5vbi0iTm9uZSIgdmFsdWUgbWF5IGJlIHJldHVybmVkIGJ5ICJfX2luaXRfXygpIjsgZG9pbmcgc29cbiAgIHdpbGwgY2F1c2UgYSAiVHlwZUVycm9yIiB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSAiX19kZWxfXygpIiBtZXRob2QsIHRoZVxuICAgZGVyaXZlZCBjbGFzc1wncyAiX19kZWxfXygpIiBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXRcbiAgIHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2UuXG4gICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3IgdGhlXG4gICAiX19kZWxfXygpIiBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiAiZGVsIHgiIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgInguX19kZWxfXygpIiAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yICJ4IiBieSBvbmUsIGFuZCB0aGUgbGF0dGVyIGlzXG4gICAgIG9ubHkgY2FsbGVkIHdoZW4gIngiXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lIGNvbW1vblxuICAgICBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhbiBvYmplY3QgZnJvbVxuICAgICBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlbiBvYmplY3RzIChlLmcuLFxuICAgICBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBwYXJlbnQgYW5kXG4gICAgIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgb2ZcbiAgICAgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMuZXhjX2luZm8oKVsyXSIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3IgYSByZWZlcmVuY2VcbiAgICAgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW4gdW5oYW5kbGVkXG4gICAgIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBzZWNvbmQgY2FuIGJlIHJlc29sdmVkIGJ5IGZyZWVpbmcgdGhlIHJlZmVyZW5jZSB0byB0aGVcbiAgICAgdHJhY2ViYWNrIG9iamVjdCB3aGVuIGl0IGlzIG5vIGxvbmdlciB1c2VmdWwsIGFuZCB0aGUgdGhpcmQgY2FuXG4gICAgIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgIk5vbmUiIGluICJzeXMubGFzdF90cmFjZWJhY2siLiBDaXJjdWxhclxuICAgICByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuIHRoZVxuICAgICBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyXG4gICAgIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgImdjIiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiAgICAgYWJvdXQgdGhpcyB0b3BpYy5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2hcbiAgICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZ1xuICAgICB0aGVpciBleGVjdXRpb24gYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0b1xuICAgICAic3lzLnN0ZGVyciIgaW5zdGVhZC4gQWxzbywgd2hlbiAiX19kZWxfXygpIiBpcyBpbnZva2VkIGluXG4gICAgIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZVxuICAgICBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlciBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZ1xuICAgICB0b3JuIGRvd24gKGUuZy4gdGhlIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpc1xuICAgICByZWFzb24sICJfX2RlbF9fKCkiIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZFxuICAgICB0byBtYWludGFpbiBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSxcbiAgICAgUHl0aG9uIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgInJlcHIoKSIgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpc1xuICAgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0b1xuICAgcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgICI8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+IiBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgIl9fcmVwcl9fKCkiIGJ1dFxuICAgbm90ICJfX3N0cl9fKCkiLCB0aGVuICJfX3JlcHJfXygpIiBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJzdHIob2JqZWN0KSIgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImZvcm1hdCgpIiBhbmRcbiAgICJwcmludCgpIiB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGUgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSAqc3RyaW5nKlxuICAgb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gIm9iamVjdC5fX3JlcHJfXygpIiBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0ICJfX3N0cl9fKCkiIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSAib2JqZWN0IlxuICAgY2FsbHMgIm9iamVjdC5fX3JlcHJfXygpIi5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgImJ5dGVzKCkiIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSAiYnl0ZXMiIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgImZvcm1hdCgpIiBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICAic3RyLmZvcm1hdCgpIiBtZXRob2Qgb2YgY2xhc3MgInN0ciIpIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgYVxuICAgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgdXAgdG9cbiAgIHRoZSB0eXBlIGltcGxlbWVudGluZyAiX19mb3JtYXRfXygpIiwgaG93ZXZlciBtb3N0IGNsYXNzZXMgd2lsbFxuICAgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3IgdXNlIGFcbiAgIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjQ6IFRoZSBfX2Zvcm1hdF9fIG1ldGhvZCBvZiAib2JqZWN0IiBpdHNlbGZcbiAgIHJhaXNlcyBhICJUeXBlRXJyb3IiIGlmIHBhc3NlZCBhbnkgbm9uLWVtcHR5IHN0cmluZy5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiAieDx5IiBjYWxscyAieC5fX2x0X18oeSkiLCAieDw9eSIgY2FsbHMgInguX19sZV9fKHkpIixcbiAgICJ4PT15IiBjYWxscyAieC5fX2VxX18oeSkiLCAieCE9eSIgY2FsbHMgInguX19uZV9fKHkpIiwgIng+eSIgY2FsbHNcbiAgICJ4Ll9fZ3RfXyh5KSIsIGFuZCAieD49eSIgY2FsbHMgInguX19nZV9fKHkpIi5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvbiAiTm90SW1wbGVtZW50ZWQiXG4gICBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYSBnaXZlbiBwYWlyIG9mXG4gICBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgcmV0dXJuZWQgZm9yIGFcbiAgIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW4gcmV0dXJuIGFueSB2YWx1ZSxcbiAgIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYSBCb29sZWFuIGNvbnRleHQgKGUuZy4sXG4gICBpbiB0aGUgY29uZGl0aW9uIG9mIGFuICJpZiIgc3RhdGVtZW50KSwgUHl0aG9uIHdpbGwgY2FsbCAiYm9vbCgpIlxuICAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0IGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIEJ5IGRlZmF1bHQsICJfX25lX18oKSIgZGVsZWdhdGVzIHRvICJfX2VxX18oKSIgYW5kIGludmVydHMgdGhlXG4gICByZXN1bHQgdW5sZXNzIGl0IGlzICJOb3RJbXBsZW1lbnRlZCIuICBUaGVyZSBhcmUgbm8gb3RoZXIgaW1wbGllZFxuICAgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGZvciBleGFtcGxlLCB0aGVcbiAgIHRydXRoIG9mICIoeDx5IG9yIHg9PXkpIiBkb2VzIG5vdCBpbXBseSAieDw9eSIuIFRvIGF1dG9tYXRpY2FsbHlcbiAgIGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290IG9wZXJhdGlvbiwgc2VlXG4gICAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG4gICBTZWUgdGhlIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi4gSWYgdGhlXG4gICBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLCBhbmQgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGFcbiAgIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJjbGFzcyBvZiB0aGUgbGVmdCBvcGVyYW5kXCdzIHR5cGUsIHRoZVxuICAgcmVmbGVjdGVkIG1ldGhvZCBvZiB0aGUgcmlnaHQgb3BlcmFuZCBoYXMgcHJpb3JpdHksIG90aGVyd2lzZSB0aGVcbiAgIGxlZnQgb3BlcmFuZFwncyBtZXRob2QgaGFzIHByaW9yaXR5LiAgVmlydHVhbCBzdWJjbGFzc2luZyBpcyBub3RcbiAgIGNvbnNpZGVyZWQuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gImhhc2goKSIgYW5kIGZvciBvcGVyYXRpb25zIG9uIG1lbWJlcnNcbiAgIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgInNldCIsICJmcm96ZW5zZXQiLCBhbmQgImRpY3QiLlxuICAgIl9faGFzaF9fKCkiIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5IHJlcXVpcmVkIHByb3BlcnR5XG4gICBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWU7IGl0IGlzXG4gICBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2hcbiAgIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0IGFsc28gcGxheSBhIHBhcnQgaW5cbiAgIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogImhhc2goKSIgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwnc1xuICAgICBjdXN0b20gIl9faGFzaF9fKCkiIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhICJQeV9zc2l6ZV90Ii4gIFRoaXNcbiAgICAgaXMgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXRcbiAgICAgYnVpbGRzLiBJZiBhbiBvYmplY3RcJ3MgICAiX19oYXNoX18oKSIgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzXG4gICAgIG9mIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbFxuICAgICBzdXBwb3J0ZWQgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJweXRob24gLWNcbiAgICAgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpIiIuXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIi5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZFxuICAgICBkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG4nLAogICdkZWJ1Z2dlcic6IHUnXG4icGRiIiAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuKipTb3VyY2UgY29kZToqKiBMaWIvcGRiLnB5XG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG1vZHVsZSAicGRiIiBkZWZpbmVzIGFuIGludGVyYWN0aXZlIHNvdXJjZSBjb2RlIGRlYnVnZ2VyIGZvclxuUHl0aG9uIHByb2dyYW1zLiAgSXQgc3VwcG9ydHMgc2V0dGluZyAoY29uZGl0aW9uYWwpIGJyZWFrcG9pbnRzIGFuZFxuc2luZ2xlIHN0ZXBwaW5nIGF0IHRoZSBzb3VyY2UgbGluZSBsZXZlbCwgaW5zcGVjdGlvbiBvZiBzdGFjayBmcmFtZXMsXG5zb3VyY2UgY29kZSBsaXN0aW5nLCBhbmQgZXZhbHVhdGlvbiBvZiBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgaW4gdGhlXG5jb250ZXh0IG9mIGFueSBzdGFjayBmcmFtZS4gIEl0IGFsc28gc3VwcG9ydHMgcG9zdC1tb3J0ZW0gZGVidWdnaW5nXG5hbmQgY2FuIGJlIGNhbGxlZCB1bmRlciBwcm9ncmFtIGNvbnRyb2wuXG5cblRoZSBkZWJ1Z2dlciBpcyBleHRlbnNpYmxlIC0tIGl0IGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgdGhlIGNsYXNzXG4iUGRiIi4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieSByZWFkaW5nXG50aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyAiYmRiIiBhbmQgImNtZCIuXG5cblRoZSBkZWJ1Z2dlclwncyBwcm9tcHQgaXMgIihQZGIpIi4gVHlwaWNhbCB1c2FnZSB0byBydW4gYSBwcm9ncmFtIHVuZGVyXG5jb250cm9sIG9mIHRoZSBkZWJ1Z2dlciBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBwZGIucnVuKFwnbXltb2R1bGUudGVzdCgpXCcpXG4gICA+IDxzdHJpbmc+KDApPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgIE5hbWVFcnJvcjogXCdzcGFtXCdcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFRhYi1jb21wbGV0aW9uIHZpYSB0aGUgInJlYWRsaW5lIiBtb2R1bGUgaXNcbmF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kIGNvbW1hbmQgYXJndW1lbnRzLCBlLmcuIHRoZSBjdXJyZW50IGdsb2JhbFxuYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzIGFyZ3VtZW50cyBvZiB0aGUgInAiIGNvbW1hbmQuXG5cbiJwZGIucHkiIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy4gIEZvclxuZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiAgQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMy4yOiAicGRiLnB5IiBub3cgYWNjZXB0cyBhICItYyIgb3B0aW9uIHRoYXQgZXhlY3V0ZXNcbmNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgIi5wZGJyYyIgZmlsZSwgc2VlICpEZWJ1Z2dlciBDb21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlICJjb250aW51ZSIgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50KHNwYW0pXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQoc3BhbSlcbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXJcbiAgIGRlYnVnZ2VyIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzXG4gICBleGVjdXRlZDsgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgImNvbnRpbnVlIiwgb3IgeW91IGNhblxuICAgc3RlcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgdXNpbmcgInN0ZXAiIG9yICJuZXh0IiAoYWxsIHRoZXNlXG4gICBjb21tYW5kcyBhcmUgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqXG4gICBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5XG4gICBkZWZhdWx0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgIl9fbWFpbl9fIiBpcyB1c2VkLiAgKFNlZSB0aGVcbiAgIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiAiZXhlYygpIiBvciAiZXZhbCgpIiBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gInJ1bmV2YWwoKSIgcmV0dXJucywgaXQgcmV0dXJucyB0aGVcbiAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0b1xuICAgInJ1bigpIi5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG5cbiAgIENhbGwgdGhlICpmdW5jdGlvbiogKGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdCwgbm90IGEgc3RyaW5nKVxuICAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiAgV2hlbiAicnVuY2FsbCgpIiByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG5UaGUgInJ1bioiIGZ1bmN0aW9ucyBhbmQgInNldF90cmFjZSgpIiBhcmUgYWxpYXNlcyBmb3IgaW5zdGFudGlhdGluZ1xudGhlICJQZGIiIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZS4gIElmIHlvdSB3YW50XG50byBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpcyB5b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgIlBkYiIgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nICJjbWQuQ21kIiBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnRcbiAgIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyAiQ3RybC1DIiBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhXG4gICAiY29udGludWUiIGNvbW1hbmQuIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlclxuICAgYWdhaW4gYnkgcHJlc3NpbmcgIkN0cmwtQyIuICBJZiB5b3Ugd2FudCBQZGIgbm90IHRvIHRvdWNoIHRoZVxuICAgU0lHSU5UIGhhbmRsZXIsIHNldCAqbm9zaWdpbnQqIHRvdCB0cnVlLlxuXG4gICBFeGFtcGxlIGNhbGwgdG8gZW5hYmxlIHRyYWNpbmcgd2l0aCAqc2tpcCo6XG5cbiAgICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bXCdkamFuZ28uKlwnXSkuc2V0X3RyYWNlKClcblxuICAgTmV3IGluIHZlcnNpb24gMy4xOiBUaGUgKnNraXAqIGFyZ3VtZW50LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSAqbm9zaWdpbnQqIGFyZ3VtZW50LiAgUHJldmlvdXNseSwgYSBTSUdJTlRcbiAgIGhhbmRsZXIgd2FzIG5ldmVyIHNldCBieSBQZGIuXG5cbiAgIHJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuICAgc2V0X3RyYWNlKClcblxuICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIGV4cGxhaW5lZCBhYm92ZS5cblxuXG5EZWJ1Z2dlciBDb21tYW5kc1xuPT09PT09PT09PT09PT09PT1cblxuVGhlIGNvbW1hbmRzIHJlY29nbml6ZWQgYnkgdGhlIGRlYnVnZ2VyIGFyZSBsaXN0ZWQgYmVsb3cuICBNb3N0XG5jb21tYW5kcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gb25lIG9yIHR3byBsZXR0ZXJzIGFzIGluZGljYXRlZDsgZS5nLlxuImgoZWxwKSIgbWVhbnMgdGhhdCBlaXRoZXIgImgiIG9yICJoZWxwIiBjYW4gYmUgdXNlZCB0byBlbnRlciB0aGUgaGVscFxuY29tbWFuZCAoYnV0IG5vdCAiaGUiIG9yICJoZWwiLCBub3IgIkgiIG9yICJIZWxwIiBvciAiSEVMUCIpLlxuQXJndW1lbnRzIHRvIGNvbW1hbmRzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UgKHNwYWNlcyBvclxudGFicykuICBPcHRpb25hbCBhcmd1bWVudHMgYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyAoIltdIikgaW5cbnRoZSBjb21tYW5kIHN5bnRheDsgdGhlIHNxdWFyZSBicmFja2V0cyBtdXN0IG5vdCBiZSB0eXBlZC5cbkFsdGVybmF0aXZlcyBpbiB0aGUgY29tbWFuZCBzeW50YXggYXJlIHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIGJhclxuKCJ8IikuXG5cbkVudGVyaW5nIGEgYmxhbmsgbGluZSByZXBlYXRzIHRoZSBsYXN0IGNvbW1hbmQgZW50ZXJlZC4gIEV4Y2VwdGlvbjogaWZcbnRoZSBsYXN0IGNvbW1hbmQgd2FzIGEgImxpc3QiIGNvbW1hbmQsIHRoZSBuZXh0IDExIGxpbmVzIGFyZSBsaXN0ZWQuXG5cbkNvbW1hbmRzIHRoYXQgdGhlIGRlYnVnZ2VyIGRvZXNuXCd0IHJlY29nbml6ZSBhcmUgYXNzdW1lZCB0byBiZSBQeXRob25cbnN0YXRlbWVudHMgYW5kIGFyZSBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQuICBQeXRob24gc3RhdGVtZW50cyBjYW4gYWxzbyBiZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uXG5wb2ludCAoIiEiKS4gIFRoaXMgaXMgYSBwb3dlcmZ1bCB3YXkgdG8gaW5zcGVjdCB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQ7IGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gY2hhbmdlIGEgdmFyaWFibGUgb3IgY2FsbCBhIGZ1bmN0aW9uLlxuV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHN1Y2ggYSBzdGF0ZW1lbnQsIHRoZSBleGNlcHRpb24gbmFtZSBpc1xucHJpbnRlZCBidXQgdGhlIGRlYnVnZ2VyXCdzIHN0YXRlIGlzIG5vdCBjaGFuZ2VkLlxuXG5UaGUgZGVidWdnZXIgc3VwcG9ydHMgKmFsaWFzZXMqLiAgQWxpYXNlcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHdoaWNoXG5hbGxvd3Mgb25lIGEgY2VydGFpbiBsZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXJcbmV4YW1pbmF0aW9uLlxuXG5NdWx0aXBsZSBjb21tYW5kcyBtYXkgYmUgZW50ZXJlZCBvbiBhIHNpbmdsZSBsaW5lLCBzZXBhcmF0ZWQgYnkgIjs7Ii5cbihBIHNpbmdsZSAiOyIgaXMgbm90IHVzZWQgYXMgaXQgaXMgdGhlIHNlcGFyYXRvciBmb3IgbXVsdGlwbGUgY29tbWFuZHNcbmluIGEgbGluZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgUHl0aG9uIHBhcnNlci4pICBObyBpbnRlbGxpZ2VuY2UgaXNcbmFwcGxpZWQgdG8gc2VwYXJhdGluZyB0aGUgY29tbWFuZHM7IHRoZSBpbnB1dCBpcyBzcGxpdCBhdCB0aGUgZmlyc3RcbiI7OyIgcGFpciwgZXZlbiBpZiBpdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgcXVvdGVkIHN0cmluZy5cblxuSWYgYSBmaWxlICIucGRicmMiIGV4aXN0cyBpbiB0aGUgdXNlclwncyBob21lIGRpcmVjdG9yeSBvciBpbiB0aGVcbmN1cnJlbnQgZGlyZWN0b3J5LCBpdCBpcyByZWFkIGluIGFuZCBleGVjdXRlZCBhcyBpZiBpdCBoYWQgYmVlbiB0eXBlZFxuYXQgdGhlIGRlYnVnZ2VyIHByb21wdC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgYWxpYXNlcy4gIElmXG5ib3RoIGZpbGVzIGV4aXN0LCB0aGUgb25lIGluIHRoZSBob21lIGRpcmVjdG9yeSBpcyByZWFkIGZpcnN0IGFuZFxuYWxpYXNlcyBkZWZpbmVkIHRoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBsb2NhbCBmaWxlLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiAiLnBkYnJjIiBjYW4gbm93IGNvbnRhaW4gY29tbWFuZHMgdGhhdFxuY29udGludWUgZGVidWdnaW5nLCBzdWNoIGFzICJjb250aW51ZSIgb3IgIm5leHQiLiAgUHJldmlvdXNseSwgdGhlc2VcbmNvbW1hbmRzIGhhZCBubyBlZmZlY3QuXG5cbmgoZWxwKSBbY29tbWFuZF1cblxuICAgV2l0aG91dCBhcmd1bWVudCwgcHJpbnQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLiAgV2l0aCBhXG4gICAqY29tbWFuZCogYXMgYXJndW1lbnQsIHByaW50IGhlbHAgYWJvdXQgdGhhdCBjb21tYW5kLiAgImhlbHAgcGRiIlxuICAgZGlzcGxheXMgdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiAodGhlIGRvY3N0cmluZyBvZiB0aGUgInBkYiJcbiAgIG1vZHVsZSkuICBTaW5jZSB0aGUgKmNvbW1hbmQqIGFyZ3VtZW50IG11c3QgYmUgYW4gaWRlbnRpZmllciwgImhlbHBcbiAgIGV4ZWMiIG11c3QgYmUgZW50ZXJlZCB0byBnZXQgaGVscCBvbiB0aGUgIiEiIGNvbW1hbmQuXG5cbncoaGVyZSlcblxuICAgUHJpbnQgYSBzdGFjayB0cmFjZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgZnJhbWUgYXQgdGhlIGJvdHRvbS4gIEFuXG4gICBhcnJvdyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWNoIGRldGVybWluZXMgdGhlIGNvbnRleHQgb2ZcbiAgIG1vc3QgY29tbWFuZHMuXG5cbmQob3duKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyBkb3duIGluIHRoZVxuICAgc3RhY2sgdHJhY2UgKHRvIGEgbmV3ZXIgZnJhbWUpLlxuXG51KHApIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIHVwIGluIHRoZSBzdGFja1xuICAgdHJhY2UgKHRvIGFuIG9sZGVyIGZyYW1lKS5cblxuYihyZWFrKSBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFdpdGggYSAqbGluZW5vKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgdGhlcmUgaW4gdGhlIGN1cnJlbnQgZmlsZS5cbiAgIFdpdGggYSAqZnVuY3Rpb24qIGFyZ3VtZW50LCBzZXQgYSBicmVhayBhdCB0aGUgZmlyc3QgZXhlY3V0YWJsZVxuICAgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIG1heSBiZSBwcmVmaXhlZFxuICAgd2l0aCBhIGZpbGVuYW1lIGFuZCBhIGNvbG9uLCB0byBzcGVjaWZ5IGEgYnJlYWtwb2ludCBpbiBhbm90aGVyXG4gICBmaWxlIChwcm9iYWJseSBvbmUgdGhhdCBoYXNuXCd0IGJlZW4gbG9hZGVkIHlldCkuICBUaGUgZmlsZSBpc1xuICAgc2VhcmNoZWQgb24gInN5cy5wYXRoIi4gIE5vdGUgdGhhdCBlYWNoIGJyZWFrcG9pbnQgaXMgYXNzaWduZWQgYVxuICAgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludCBjb21tYW5kcyByZWZlci5cblxuICAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLlxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBsaXN0IGFsbCBicmVha3MsIGluY2x1ZGluZyBmb3IgZWFjaCBicmVha3BvaW50LFxuICAgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGJyZWFrcG9pbnQgaGFzIGJlZW4gaGl0LCB0aGUgY3VycmVudFxuICAgaWdub3JlIGNvdW50LCBhbmQgdGhlIGFzc29jaWF0ZWQgY29uZGl0aW9uIGlmIGFueS5cblxudGJyZWFrIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzXG4gICBmaXJzdCBoaXQuIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciAiYnJlYWsiLlxuXG5jbChlYXIpIFtmaWxlbmFtZTpsaW5lbm8gfCBicG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgV2l0aCBhICpmaWxlbmFtZTpsaW5lbm8qIGFyZ3VtZW50LCBjbGVhciBhbGwgdGhlIGJyZWFrcG9pbnRzIGF0XG4gICB0aGlzIGxpbmUuIFdpdGggYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBicmVha3BvaW50IG51bWJlcnMsIGNsZWFyXG4gICB0aG9zZSBicmVha3BvaW50cy4gV2l0aG91dCBhcmd1bWVudCwgY2xlYXIgYWxsIGJyZWFrcyAoYnV0IGZpcnN0XG4gICBhc2sgY29uZmlybWF0aW9uKS5cblxuZGlzYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIERpc2FibGUgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2ZcbiAgIGJyZWFrcG9pbnQgbnVtYmVycy4gIERpc2FibGluZyBhIGJyZWFrcG9pbnQgbWVhbnMgaXQgY2Fubm90IGNhdXNlXG4gICB0aGUgcHJvZ3JhbSB0byBzdG9wIGV4ZWN1dGlvbiwgYnV0IHVubGlrZSBjbGVhcmluZyBhIGJyZWFrcG9pbnQsIGl0XG4gICByZW1haW5zIGluIHRoZSBsaXN0IG9mIGJyZWFrcG9pbnRzIGFuZCBjYW4gYmUgKHJlLSllbmFibGVkLlxuXG5lbmFibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBFbmFibGUgdGhlIGJyZWFrcG9pbnRzIHNwZWNpZmllZC5cblxuaWdub3JlIGJwbnVtYmVyIFtjb3VudF1cblxuICAgU2V0IHRoZSBpZ25vcmUgY291bnQgZm9yIHRoZSBnaXZlbiBicmVha3BvaW50IG51bWJlci4gIElmIGNvdW50IGlzXG4gICBvbWl0dGVkLCB0aGUgaWdub3JlIGNvdW50IGlzIHNldCB0byAwLiAgQSBicmVha3BvaW50IGJlY29tZXMgYWN0aXZlXG4gICB3aGVuIHRoZSBpZ25vcmUgY291bnQgaXMgemVyby4gIFdoZW4gbm9uLXplcm8sIHRoZSBjb3VudCBpc1xuICAgZGVjcmVtZW50ZWQgZWFjaCB0aW1lIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQgYW5kIHRoZSBicmVha3BvaW50XG4gICBpcyBub3QgZGlzYWJsZWQgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZS5cblxuY29uZGl0aW9uIGJwbnVtYmVyIFtjb25kaXRpb25dXG5cbiAgIFNldCBhIG5ldyAqY29uZGl0aW9uKiBmb3IgdGhlIGJyZWFrcG9pbnQsIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC4gIElmICpjb25kaXRpb24qXG4gICBpcyBhYnNlbnQsIGFueSBleGlzdGluZyBjb25kaXRpb24gaXMgcmVtb3ZlZDsgaS5lLiwgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG1hZGUgdW5jb25kaXRpb25hbC5cblxuY29tbWFuZHMgW2JwbnVtYmVyXVxuXG4gICBTcGVjaWZ5IGEgbGlzdCBvZiBjb21tYW5kcyBmb3IgYnJlYWtwb2ludCBudW1iZXIgKmJwbnVtYmVyKi4gIFRoZVxuICAgY29tbWFuZHMgdGhlbXNlbHZlcyBhcHBlYXIgb24gdGhlIGZvbGxvd2luZyBsaW5lcy4gIFR5cGUgYSBsaW5lXG4gICBjb250YWluaW5nIGp1c3QgImVuZCIgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTpcblxuICAgICAgKFBkYikgY29tbWFuZHMgMVxuICAgICAgKGNvbSkgcCBzb21lX3ZhcmlhYmxlXG4gICAgICAoY29tKSBlbmRcbiAgICAgIChQZGIpXG5cbiAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kIGZvbGxvd1xuICAgaXQgaW1tZWRpYXRlbHkgd2l0aCAiZW5kIjsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcblxuICAgRXhlY3V0ZSB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBvY2Nhc2lvblxuICAgKGVpdGhlciBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9yIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlXG4gICBjdXJyZW50IGZ1bmN0aW9uKS5cblxubihleHQpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzXG4gICByZWFjaGVkIG9yIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAibmV4dCIgYW5kICJzdGVwIlxuICAgaXMgdGhhdCAic3RlcCIgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZSAibmV4dCJcbiAgIGV4ZWN1dGVzIGNhbGxlZCBmdW5jdGlvbnMgYXQgKG5lYXJseSkgZnVsbCBzcGVlZCwgb25seSBzdG9wcGluZyBhdFxuICAgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4pXG5cbnVudChpbCkgW2xpbmVub11cblxuICAgV2l0aG91dCBhcmd1bWVudCwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBvbmUgaXMgcmVhY2hlZC5cblxuICAgV2l0aCBhIGxpbmUgbnVtYmVyLCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgYSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhhdCBpcyByZWFjaGVkLiAgSW4gYm90aCBjYXNlcywgYWxzbyBzdG9wIHdoZW5cbiAgIHRoZSBjdXJyZW50IGZyYW1lIHJldHVybnMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IEFsbG93IGdpdmluZyBhbiBleHBsaWNpdCBsaW5lIG51bWJlci5cblxucihldHVybilcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHJldHVybnMuXG5cbmMob250KGludWUpKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24sIG9ubHkgc3RvcCB3aGVuIGEgYnJlYWtwb2ludCBpcyBlbmNvdW50ZXJlZC5cblxuaih1bXApIGxpbmVub1xuXG4gICBTZXQgdGhlIG5leHQgbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuICBPbmx5IGF2YWlsYWJsZSBpbiB0aGVcbiAgIGJvdHRvbS1tb3N0IGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUgY29kZSBhZ2FpbixcbiAgIG9yIGp1bXAgZm9yd2FyZCB0byBza2lwIGNvZGUgdGhhdCB5b3UgZG9uXCd0IHdhbnQgdG8gcnVuLlxuXG4gICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIGp1bXBzIGFyZSBhbGxvd2VkIC0tIGZvciBpbnN0YW5jZVxuICAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIGEgImZvciIgbG9vcCBvciBvdXRcbiAgIG9mIGEgImZpbmFsbHkiIGNsYXVzZS5cblxubChpc3QpIFtmaXJzdFssIGxhc3RdXVxuXG4gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTFcbiAgIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLlxuICAgV2l0aCAiLiIgYXMgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUuICBXaXRoXG4gICBvbmUgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvXG4gICBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3NcbiAgIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LlxuXG4gICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSAiLT4iLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhlIGxpbmUgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNcbiAgIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5ICI+PiIsIGlmIGl0IGRpZmZlcnNcbiAgIGZyb20gdGhlIGN1cnJlbnQgbGluZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgIj4+IiBtYXJrZXIuXG5cbmxsIHwgbG9uZ2xpc3RcblxuICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLlxuICAgSW50ZXJlc3RpbmcgbGluZXMgYXJlIG1hcmtlZCBhcyBmb3IgImxpc3QiLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmEocmdzKVxuXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucCBleHByZXNzaW9uXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxuICAgTm90ZTogInByaW50KCkiIGNhbiBhbHNvIGJlIHVzZWQsIGJ1dCBpcyBub3QgYSBkZWJ1Z2dlciBjb21tYW5kXG4gICAgIC0tLSB0aGlzIGV4ZWN1dGVzIHRoZSBQeXRob24gInByaW50KCkiIGZ1bmN0aW9uLlxuXG5wcCBleHByZXNzaW9uXG5cbiAgIExpa2UgdGhlICJwIiBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzIHByZXR0eS1cbiAgIHByaW50ZWQgdXNpbmcgdGhlICJwcHJpbnQiIG1vZHVsZS5cblxud2hhdGlzIGV4cHJlc3Npb25cblxuICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlICpleHByZXNzaW9uKi5cblxuc291cmNlIGV4cHJlc3Npb25cblxuICAgVHJ5IHRvIGdldCBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgZGlzcGxheSBpdC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEaXNwbGF5IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpZiBpdCBjaGFuZ2VkLCBlYWNoIHRpbWVcbiAgIGV4ZWN1dGlvbiBzdG9wcyBpbiB0aGUgY3VycmVudCBmcmFtZS5cblxuICAgV2l0aG91dCBleHByZXNzaW9uLCBsaXN0IGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxudW5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEbyBub3QgZGlzcGxheSB0aGUgZXhwcmVzc2lvbiBhbnkgbW9yZSBpbiB0aGUgY3VycmVudCBmcmFtZS5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgY2xlYXIgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5pbnRlcmFjdFxuXG4gICBTdGFydCBhbiBpbnRlcmF0aXZlIGludGVycHJldGVyICh1c2luZyB0aGUgImNvZGUiIG1vZHVsZSkgd2hvc2VcbiAgIGdsb2JhbCBuYW1lc3BhY2UgY29udGFpbnMgYWxsIHRoZSAoZ2xvYmFsIGFuZCBsb2NhbCkgbmFtZXMgZm91bmQgaW5cbiAgIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmFsaWFzIFtuYW1lIFtjb21tYW5kXV1cblxuICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZFxuICAgbXVzdCAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZVxuICAgaW5kaWNhdGVkIGJ5ICIlMSIsICIlMiIsIGFuZCBzbyBvbiwgd2hpbGUgIiUqIiBpcyByZXBsYWNlZCBieSBhbGxcbiAgIHRoZSBwYXJhbWV0ZXJzLiBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3JcbiAgICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZVxuICAgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdFxuICAgYWxvbmUuXG5cbiAgIEFzIGFuIGV4YW1wbGUsIGhlcmUgYXJlIHR3byB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZFxuICAgaW4gdGhlICIucGRicmMiIGZpbGUpOlxuXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpXG4gICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKVxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZlxuICAgICAgYWxpYXMgcHMgcGkgc2VsZlxuXG51bmFsaWFzIG5hbWVcblxuICAgRGVsZXRlIHRoZSBzcGVjaWZpZWQgYWxpYXMuXG5cbiEgc3RhdGVtZW50XG5cbiAgIEV4ZWN1dGUgdGhlIChvbmUtbGluZSkgKnN0YXRlbWVudCogaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnRcbiAgIHN0YWNrIGZyYW1lLiBUaGUgZXhjbGFtYXRpb24gcG9pbnQgY2FuIGJlIG9taXR0ZWQgdW5sZXNzIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgc3RhdGVtZW50IHJlc2VtYmxlcyBhIGRlYnVnZ2VyIGNvbW1hbmQuICBUbyBzZXQgYVxuICAgZ2xvYmFsIHZhcmlhYmxlLCB5b3UgY2FuIHByZWZpeCB0aGUgYXNzaWdubWVudCBjb21tYW5kIHdpdGggYVxuICAgImdsb2JhbCIgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmUsIGUuZy46XG5cbiAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFtcJy1sXCddXG4gICAgICAoUGRiKVxuXG5ydW4gW2FyZ3MgLi4uXVxucmVzdGFydCBbYXJncyAuLi5dXG5cbiAgIFJlc3RhcnQgdGhlIGRlYnVnZ2VkIFB5dGhvbiBwcm9ncmFtLiAgSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsXG4gICBpdCBpcyBzcGxpdCB3aXRoICJzaGxleCIgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3XG4gICAic3lzLmFyZ3YiLiBIaXN0b3J5LCBicmVha3BvaW50cywgYWN0aW9ucyBhbmQgZGVidWdnZXIgb3B0aW9ucyBhcmVcbiAgIHByZXNlcnZlZC4gInJlc3RhcnQiIGlzIGFuIGFsaWFzIGZvciAicnVuIi5cblxucSh1aXQpXG5cbiAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuICBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoZXRoZXIgYSBmcmFtZSBpcyBjb25zaWRlcmVkIHRvIG9yaWdpbmF0ZSBpbiBhIGNlcnRhaW4gbW9kdWxlXG4gICAgaXMgZGV0ZXJtaW5lZCBieSB0aGUgIl9fbmFtZV9fIiBpbiB0aGUgZnJhbWUgZ2xvYmFscy5cbicsCiAgJ2RlbCc6IHUnXG5UaGUgImRlbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cbiAgIGRlbF9zdG10IDo6PSAiZGVsIiB0YXJnZXRfbGlzdFxuXG5EZWxldGlvbiBpcyByZWN1cnNpdmVseSBkZWZpbmVkIHZlcnkgc2ltaWxhciB0byB0aGUgd2F5IGFzc2lnbm1lbnQgaXNcbmRlZmluZWQuIFJhdGhlciB0aGFuIHNwZWxsaW5nIGl0IG91dCBpbiBmdWxsIGRldGFpbHMsIGhlcmUgYXJlIHNvbWVcbmhpbnRzLlxuXG5EZWxldGlvbiBvZiBhIHRhcmdldCBsaXN0IHJlY3Vyc2l2ZWx5IGRlbGV0ZXMgZWFjaCB0YXJnZXQsIGZyb20gbGVmdFxudG8gcmlnaHQuXG5cbkRlbGV0aW9uIG9mIGEgbmFtZSByZW1vdmVzIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBmcm9tIHRoZSBsb2NhbCBvclxuZ2xvYmFsIG5hbWVzcGFjZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5hbWUgb2NjdXJzIGluIGEgImdsb2JhbCJcbnN0YXRlbWVudCBpbiB0aGUgc2FtZSBjb2RlIGJsb2NrLiAgSWYgdGhlIG5hbWUgaXMgdW5ib3VuZCwgYVxuIk5hbWVFcnJvciIgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLlxuXG5EZWxldGlvbiBvZiBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgc3Vic2NyaXB0aW9ucyBhbmQgc2xpY2luZ3MgaXMgcGFzc2VkXG50byB0aGUgcHJpbWFyeSBvYmplY3QgaW52b2x2ZWQ7IGRlbGV0aW9uIG9mIGEgc2xpY2luZyBpcyBpbiBnZW5lcmFsXG5lcXVpdmFsZW50IHRvIGFzc2lnbm1lbnQgb2YgYW4gZW1wdHkgc2xpY2Ugb2YgdGhlIHJpZ2h0IHR5cGUgKGJ1dCBldmVuXG50aGlzIGlzIGRldGVybWluZWQgYnkgdGhlIHNsaWNlZCBvYmplY3QpLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBQcmV2aW91c2x5IGl0IHdhcyBpbGxlZ2FsIHRvIGRlbGV0ZSBhIG5hbWVcbmZyb20gdGhlIGxvY2FsIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnMgYXMgYSBmcmVlIHZhcmlhYmxlIGluIGEgbmVzdGVkXG5ibG9jay5cbicsCi0gJ2RpY3QnOiB1J1xuRGljdGlvbmFyeSBkaXNwbGF5c1xuKioqKioqKioqKioqKioqKioqKlxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBrZXkvZGF0dW0gcGFpcnNcbmVuY2xvc2VkIGluIGN1cmx5IGJyYWNlczpcblxuICAgZGljdF9kaXNwbGF5ICAgICAgIDo6PSAieyIgW2tleV9kYXR1bV9saXN0IHwgZGljdF9jb21wcmVoZW5zaW9uXSAifSJcbiAgIGtleV9kYXR1bV9saXN0ICAgICA6Oj0ga2V5X2RhdHVtICgiLCIga2V5X2RhdHVtKSogWyIsIl1cbiAgIGtleV9kYXR1bSAgICAgICAgICA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvblxuICAgZGljdF9jb21wcmVoZW5zaW9uIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uIGNvbXBfZm9yXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IHlpZWxkcyBhIG5ldyBkaWN0aW9uYXJ5IG9iamVjdC5cblxuSWYgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Yga2V5L2RhdHVtIHBhaXJzIGlzIGdpdmVuLCB0aGV5IGFyZVxuZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB0byBkZWZpbmUgdGhlIGVudHJpZXMgb2YgdGhlIGRpY3Rpb25hcnk6XG5lYWNoIGtleSBvYmplY3QgaXMgdXNlZCBhcyBhIGtleSBpbnRvIHRoZSBkaWN0aW9uYXJ5IHRvIHN0b3JlIHRoZVxuY29ycmVzcG9uZGluZyBkYXR1bS4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNhbWUga2V5XG5tdWx0aXBsZSB0aW1lcyBpbiB0aGUga2V5L2RhdHVtIGxpc3QsIGFuZCB0aGUgZmluYWwgZGljdGlvbmFyeVwncyB2YWx1ZVxuZm9yIHRoYXQga2V5IHdpbGwgYmUgdGhlIGxhc3Qgb25lIGdpdmVuLlxuXG5BIGRpY3QgY29tcHJlaGVuc2lvbiwgaW4gY29udHJhc3QgdG8gbGlzdCBhbmQgc2V0IGNvbXByZWhlbnNpb25zLFxubmVlZHMgdHdvIGV4cHJlc3Npb25zIHNlcGFyYXRlZCB3aXRoIGEgY29sb24gZm9sbG93ZWQgYnkgdGhlIHVzdWFsXG4iZm9yIiBhbmQgImlmIiBjbGF1c2VzLiBXaGVuIHRoZSBjb21wcmVoZW5zaW9uIGlzIHJ1biwgdGhlIHJlc3VsdGluZ1xua2V5IGFuZCB2YWx1ZSBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5IGluIHRoZSBvcmRlclxudGhleSBhcmUgcHJvZHVjZWQuXG5cblJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZXMgb2YgdGhlIGtleSB2YWx1ZXMgYXJlIGxpc3RlZCBlYXJsaWVyIGluXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqLiAgKFRvIHN1bW1hcml6ZSwgdGhlIGtleSB0eXBlXG5zaG91bGQgYmUgKmhhc2hhYmxlKiwgd2hpY2ggZXhjbHVkZXMgYWxsIG11dGFibGUgb2JqZWN0cy4pICBDbGFzaGVzXG5iZXR3ZWVuIGR1cGxpY2F0ZSBrZXlzIGFyZSBub3QgZGV0ZWN0ZWQ7IHRoZSBsYXN0IGRhdHVtICh0ZXh0dWFsbHlcbnJpZ2h0bW9zdCBpbiB0aGUgZGlzcGxheSkgc3RvcmVkIGZvciBhIGdpdmVuIGtleSB2YWx1ZSBwcmV2YWlscy5cbicsCisgJ2RpY3QnOiB1J1xuRGljdGlvbmFyeSBkaXNwbGF5c1xuKioqKioqKioqKioqKioqKioqKlxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBrZXkvZGF0dW0gcGFpcnNcbmVuY2xvc2VkIGluIGN1cmx5IGJyYWNlczpcblxuICAgZGljdF9kaXNwbGF5ICAgICAgIDo6PSAieyIgW2tleV9kYXR1bV9saXN0IHwgZGljdF9jb21wcmVoZW5zaW9uXSAifSJcbiAgIGtleV9kYXR1bV9saXN0ICAgICA6Oj0ga2V5X2RhdHVtICgiLCIga2V5X2RhdHVtKSogWyIsIl1cbiAgIGtleV9kYXR1bSAgICAgICAgICA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvbiB8ICIqKiIgb3JfZXhwclxuICAgZGljdF9jb21wcmVoZW5zaW9uIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uIGNvbXBfZm9yXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IHlpZWxkcyBhIG5ldyBkaWN0aW9uYXJ5IG9iamVjdC5cblxuSWYgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Yga2V5L2RhdHVtIHBhaXJzIGlzIGdpdmVuLCB0aGV5IGFyZVxuZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB0byBkZWZpbmUgdGhlIGVudHJpZXMgb2YgdGhlIGRpY3Rpb25hcnk6XG5lYWNoIGtleSBvYmplY3QgaXMgdXNlZCBhcyBhIGtleSBpbnRvIHRoZSBkaWN0aW9uYXJ5IHRvIHN0b3JlIHRoZVxuY29ycmVzcG9uZGluZyBkYXR1bS4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNhbWUga2V5XG5tdWx0aXBsZSB0aW1lcyBpbiB0aGUga2V5L2RhdHVtIGxpc3QsIGFuZCB0aGUgZmluYWwgZGljdGlvbmFyeVwncyB2YWx1ZVxuZm9yIHRoYXQga2V5IHdpbGwgYmUgdGhlIGxhc3Qgb25lIGdpdmVuLlxuXG5BIGRvdWJsZSBhc3RlcmlzayAiKioiIGRlbm90ZXMgKmRpY3Rpb25hcnkgdW5wYWNraW5nKi4gSXRzIG9wZXJhbmRcbm11c3QgYmUgYSAqbWFwcGluZyouICBFYWNoIG1hcHBpbmcgaXRlbSBpcyBhZGRlZCB0byB0aGUgbmV3XG5kaWN0aW9uYXJ5LiAgTGF0ZXIgdmFsdWVzIHJlcGxhY2UgdmFsdWVzIGFscmVhZHkgc2V0IGJ5IGVhcmxpZXJcbmtleS9kYXR1bSBwYWlycyBhbmQgZWFybGllciBkaWN0aW9uYXJ5IHVucGFja2luZ3MuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuNTogVW5wYWNraW5nIGludG8gZGljdGlvbmFyeSBkaXNwbGF5cywgb3JpZ2luYWxseVxucHJvcG9zZWQgYnkgKipQRVAgNDQ4KiouXG5cbkEgZGljdCBjb21wcmVoZW5zaW9uLCBpbiBjb250cmFzdCB0byBsaXN0IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMsXG5uZWVkcyB0d28gZXhwcmVzc2lvbnMgc2VwYXJhdGVkIHdpdGggYSBjb2xvbiBmb2xsb3dlZCBieSB0aGUgdXN1YWxcbiJmb3IiIGFuZCAiaWYiIGNsYXVzZXMuIFdoZW4gdGhlIGNvbXByZWhlbnNpb24gaXMgcnVuLCB0aGUgcmVzdWx0aW5nXG5rZXkgYW5kIHZhbHVlIGVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbiB0aGUgbmV3IGRpY3Rpb25hcnkgaW4gdGhlIG9yZGVyXG50aGV5IGFyZSBwcm9kdWNlZC5cblxuUmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0aGUga2V5IHZhbHVlcyBhcmUgbGlzdGVkIGVhcmxpZXIgaW5cbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSouICAoVG8gc3VtbWFyaXplLCB0aGUga2V5IHR5cGVcbnNob3VsZCBiZSAqaGFzaGFibGUqLCB3aGljaCBleGNsdWRlcyBhbGwgbXV0YWJsZSBvYmplY3RzLikgIENsYXNoZXNcbmJldHdlZW4gZHVwbGljYXRlIGtleXMgYXJlIG5vdCBkZXRlY3RlZDsgdGhlIGxhc3QgZGF0dW0gKHRleHR1YWxseVxucmlnaHRtb3N0IGluIHRoZSBkaXNwbGF5KSBzdG9yZWQgZm9yIGEgZ2l2ZW4ga2V5IHZhbHVlIHByZXZhaWxzLlxuJywKICAnZHluYW1pYy1mZWF0dXJlcyc6IHUnXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5OYW1lIHJlc29sdXRpb24gb2YgZnJlZSB2YXJpYWJsZXMgb2NjdXJzIGF0IHJ1bnRpbWUsIG5vdCBhdCBjb21waWxlXG50aW1lLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgcHJpbnQgNDI6XG5cbiAgIGkgPSAxMFxuICAgZGVmIGYoKTpcbiAgICAgICBwcmludChpKVxuICAgaSA9IDQyXG4gICBmKClcblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuVGhlICJldmFsKCkiIGFuZCAiZXhlYygpIiBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSAiZXhlYygpIiBhbmQgImV2YWwoKSIgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cbicsCiAgJ2Vsc2UnOiB1J1xuVGhlICJpZiIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKipcblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuJywKICAnZXhjZXB0aW9ucyc6IHUnXG5FeGNlcHRpb25zXG4qKioqKioqKioqXG5cbkV4Y2VwdGlvbnMgYXJlIGEgbWVhbnMgb2YgYnJlYWtpbmcgb3V0IG9mIHRoZSBub3JtYWwgZmxvdyBvZiBjb250cm9sXG5vZiBhIGNvZGUgYmxvY2sgaW4gb3JkZXIgdG8gaGFuZGxlIGVycm9ycyBvciBvdGhlciBleGNlcHRpb25hbFxuY29uZGl0aW9ucy4gIEFuIGV4Y2VwdGlvbiBpcyAqcmFpc2VkKiBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGVycm9yIGlzXG5kZXRlY3RlZDsgaXQgbWF5IGJlICpoYW5kbGVkKiBieSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9jayBvciBieSBhbnlcbmNvZGUgYmxvY2sgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGludm9rZWQgdGhlIGNvZGUgYmxvY2sgd2hlcmVcbnRoZSBlcnJvciBvY2N1cnJlZC5cblxuVGhlIFB5dGhvbiBpbnRlcnByZXRlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gaXQgZGV0ZWN0cyBhIHJ1bi10aW1lXG5lcnJvciAoc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvKS4gIEEgUHl0aG9uIHByb2dyYW0gY2FuIGFsc29cbmV4cGxpY2l0bHkgcmFpc2UgYW4gZXhjZXB0aW9uIHdpdGggdGhlICJyYWlzZSIgc3RhdGVtZW50LiBFeGNlcHRpb25cbmhhbmRsZXJzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgInRyeSIgLi4uICJleGNlcHQiIHN0YXRlbWVudC4gIFRoZVxuImZpbmFsbHkiIGNsYXVzZSBvZiBzdWNoIGEgc3RhdGVtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgY2xlYW51cFxuY29kZSB3aGljaCBkb2VzIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbiwgYnV0IGlzIGV4ZWN1dGVkIHdoZXRoZXIgYW5cbmV4Y2VwdGlvbiBvY2N1cnJlZCBvciBub3QgaW4gdGhlIHByZWNlZGluZyBjb2RlLlxuXG5QeXRob24gdXNlcyB0aGUgInRlcm1pbmF0aW9uIiBtb2RlbCBvZiBlcnJvciBoYW5kbGluZzogYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNhbiBmaW5kIG91dCB3aGF0IGhhcHBlbmVkIGFuZCBjb250aW51ZSBleGVjdXRpb24gYXQgYW4gb3V0ZXJcbmxldmVsLCBidXQgaXQgY2Fubm90IHJlcGFpciB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yIGFuZCByZXRyeSB0aGVcbmZhaWxpbmcgb3BlcmF0aW9uIChleGNlcHQgYnkgcmUtZW50ZXJpbmcgdGhlIG9mZmVuZGluZyBwaWVjZSBvZiBjb2RlXG5mcm9tIHRoZSB0b3ApLlxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCBhdCBhbGwsIHRoZSBpbnRlcnByZXRlciB0ZXJtaW5hdGVzXG5leGVjdXRpb24gb2YgdGhlIHByb2dyYW0sIG9yIHJldHVybnMgdG8gaXRzIGludGVyYWN0aXZlIG1haW4gbG9vcC4gIEluXG5laXRoZXIgY2FzZSwgaXQgcHJpbnRzIGEgc3RhY2sgYmFja3RyYWNlLCBleGNlcHQgd2hlbiB0aGUgZXhjZXB0aW9uIGlzXG4iU3lzdGVtRXhpdCIuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlICJleGNlcHQiIGNsYXVzZSBpc1xuc2VsZWN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2U6IGl0IG11c3QgcmVmZXJlbmNlIHRoZVxuY2xhc3Mgb2YgdGhlIGluc3RhbmNlIG9yIGEgYmFzZSBjbGFzcyB0aGVyZW9mLiAgVGhlIGluc3RhbmNlIGNhbiBiZVxucmVjZWl2ZWQgYnkgdGhlIGhhbmRsZXIgYW5kIGNhbiBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZVxuZXhjZXB0aW9uYWwgY29uZGl0aW9uLlxuXG5Ob3RlOiBFeGNlcHRpb24gbWVzc2FnZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQeXRob24gQVBJLiAgVGhlaXJcbiAgY29udGVudHMgbWF5IGNoYW5nZSBmcm9tIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byB0aGUgbmV4dCB3aXRob3V0XG4gIHdhcm5pbmcgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVkIG9uIGJ5IGNvZGUgd2hpY2ggd2lsbCBydW4gdW5kZXJcbiAgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLlxuXG5TZWUgYWxzbyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJ0cnkiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgdHJ5XG5zdGF0ZW1lbnQqIGFuZCAicmFpc2UiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieVxuICAgIHRoZXNlIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzXG4gICAgY29tcGlsZWQuXG4nLAogICdleGVjbW9kZWwnOiB1J1xuRXhlY3V0aW9uIG1vZGVsXG4qKioqKioqKioqKioqKipcblxuXG5TdHJ1Y3R1cmUgb2YgYSBwcm9ncmFtXG49PT09PT09PT09PT09PT09PT09PT09XG5cbkEgUHl0aG9uIHByb2dyYW0gaXMgY29uc3RydWN0ZWQgZnJvbSBjb2RlIGJsb2Nrcy4gQSAqYmxvY2sqIGlzIGEgcGllY2Vcbm9mIFB5dGhvbiBwcm9ncmFtIHRleHQgdGhhdCBpcyBleGVjdXRlZCBhcyBhIHVuaXQuIFRoZSBmb2xsb3dpbmcgYXJlXG5ibG9ja3M6IGEgbW9kdWxlLCBhIGZ1bmN0aW9uIGJvZHksIGFuZCBhIGNsYXNzIGRlZmluaXRpb24uIEVhY2hcbmNvbW1hbmQgdHlwZWQgaW50ZXJhY3RpdmVseSBpcyBhIGJsb2NrLiAgQSBzY3JpcHQgZmlsZSAoYSBmaWxlIGdpdmVuXG5hcyBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIgb3Igc3BlY2lmaWVkIGFzIGEgY29tbWFuZCBsaW5lXG5hcmd1bWVudCB0byB0aGUgaW50ZXJwcmV0ZXIpIGlzIGEgY29kZSBibG9jay4gIEEgc2NyaXB0IGNvbW1hbmQgKGFcbmNvbW1hbmQgc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgd2l0aCB0aGUgXCcqKi1jKipcJ1xub3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYnVpbHQtaW5cbmZ1bmN0aW9ucyAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgaXMgYSBjb2RlIGJsb2NrLlxuXG5BIGNvZGUgYmxvY2sgaXMgZXhlY3V0ZWQgaW4gYW4gKmV4ZWN1dGlvbiBmcmFtZSouICBBIGZyYW1lIGNvbnRhaW5zXG5zb21lIGFkbWluaXN0cmF0aXZlIGluZm9ybWF0aW9uICh1c2VkIGZvciBkZWJ1Z2dpbmcpIGFuZCBkZXRlcm1pbmVzXG53aGVyZSBhbmQgaG93IGV4ZWN1dGlvbiBjb250aW51ZXMgYWZ0ZXIgdGhlIGNvZGUgYmxvY2tcJ3MgZXhlY3V0aW9uIGhhc1xuY29tcGxldGVkLlxuXG5cbk5hbWluZyBhbmQgYmluZGluZ1xuPT09PT09PT09PT09PT09PT09XG5cblxuQmluZGluZyBvZiBuYW1lc1xuLS0tLS0tLS0tLS0tLS0tLVxuXG4qTmFtZXMqIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuXG5cblRoZSBmb2xsb3dpbmcgY29uc3RydWN0cyBiaW5kIG5hbWVzOiBmb3JtYWwgcGFyYW1ldGVycyB0byBmdW5jdGlvbnMsXG4iaW1wb3J0IiBzdGF0ZW1lbnRzLCBjbGFzcyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKHRoZXNlIGJpbmQgdGhlXG5jbGFzcyBvciBmdW5jdGlvbiBuYW1lIGluIHRoZSBkZWZpbmluZyBibG9jayksIGFuZCB0YXJnZXRzIHRoYXQgYXJlXG5pZGVudGlmaWVycyBpZiBvY2N1cnJpbmcgaW4gYW4gYXNzaWdubWVudCwgImZvciIgbG9vcCBoZWFkZXIsIG9yIGFmdGVyXG4iYXMiIGluIGEgIndpdGgiIHN0YXRlbWVudCBvciAiZXhjZXB0IiBjbGF1c2UuIFRoZSAiaW1wb3J0IiBzdGF0ZW1lbnRcbm9mIHRoZSBmb3JtICJmcm9tIC4uLiBpbXBvcnQgKiIgYmluZHMgYWxsIG5hbWVzIGRlZmluZWQgaW4gdGhlXG5pbXBvcnRlZCBtb2R1bGUsIGV4Y2VwdCB0aG9zZSBiZWdpbm5pbmcgd2l0aCBhbiB1bmRlcnNjb3JlLiAgVGhpcyBmb3JtXG5tYXkgb25seSBiZSB1c2VkIGF0IHRoZSBtb2R1bGUgbGV2ZWwuXG5cbkEgdGFyZ2V0IG9jY3VycmluZyBpbiBhICJkZWwiIHN0YXRlbWVudCBpcyBhbHNvIGNvbnNpZGVyZWQgYm91bmQgZm9yXG50aGlzIHB1cnBvc2UgKHRob3VnaCB0aGUgYWN0dWFsIHNlbWFudGljcyBhcmUgdG8gdW5iaW5kIHRoZSBuYW1lKS5cblxuRWFjaCBhc3NpZ25tZW50IG9yIGltcG9ydCBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrIGRlZmluZWQgYnkgYVxuY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhdCB0aGUgbW9kdWxlIGxldmVsICh0aGUgdG9wLWxldmVsXG5jb2RlIGJsb2NrKS5cblxuSWYgYSBuYW1lIGlzIGJvdW5kIGluIGEgYmxvY2ssIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgb2YgdGhhdCBibG9jayxcbnVubGVzcyBkZWNsYXJlZCBhcyAibm9ubG9jYWwiIG9yICJnbG9iYWwiLiAgSWYgYSBuYW1lIGlzIGJvdW5kIGF0IHRoZVxubW9kdWxlIGxldmVsLCBpdCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gIChUaGUgdmFyaWFibGVzIG9mIHRoZSBtb2R1bGVcbmNvZGUgYmxvY2sgYXJlIGxvY2FsIGFuZCBnbG9iYWwuKSAgSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgY29kZVxuYmxvY2sgYnV0IG5vdCBkZWZpbmVkIHRoZXJlLCBpdCBpcyBhICpmcmVlIHZhcmlhYmxlKi5cblxuRWFjaCBvY2N1cnJlbmNlIG9mIGEgbmFtZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IHJlZmVycyB0byB0aGUgKmJpbmRpbmcqXG5vZiB0aGF0IG5hbWUgZXN0YWJsaXNoZWQgYnkgdGhlIGZvbGxvd2luZyBuYW1lIHJlc29sdXRpb24gcnVsZXMuXG5cblxuUmVzb2x1dGlvbiBvZiBuYW1lc1xuLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5BICpzY29wZSogZGVmaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiBhIG5hbWUgd2l0aGluIGEgYmxvY2suICBJZiBhIGxvY2FsXG52YXJpYWJsZSBpcyBkZWZpbmVkIGluIGEgYmxvY2ssIGl0cyBzY29wZSBpbmNsdWRlcyB0aGF0IGJsb2NrLiAgSWYgdGhlXG5kZWZpbml0aW9uIG9jY3VycyBpbiBhIGZ1bmN0aW9uIGJsb2NrLCB0aGUgc2NvcGUgZXh0ZW5kcyB0byBhbnkgYmxvY2tzXG5jb250YWluZWQgd2l0aGluIHRoZSBkZWZpbmluZyBvbmUsIHVubGVzcyBhIGNvbnRhaW5lZCBibG9jayBpbnRyb2R1Y2VzXG5hIGRpZmZlcmVudCBiaW5kaW5nIGZvciB0aGUgbmFtZS5cblxuV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0XG5lbmNsb3Npbmcgc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9ja1xuaXMgY2FsbGVkIHRoZSBibG9ja1wncyAqZW52aXJvbm1lbnQqLlxuXG5XaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhICJOYW1lRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuIElmXG50aGUgY3VycmVudCBzY29wZSBpcyBhIGZ1bmN0aW9uIHNjb3BlLCBhbmQgdGhlIG5hbWUgcmVmZXJzIHRvIGEgbG9jYWxcbnZhcmlhYmxlIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBib3VuZCB0byBhIHZhbHVlIGF0IHRoZSBwb2ludCB3aGVyZSB0aGVcbm5hbWUgaXMgdXNlZCwgYW4gIlVuYm91bmRMb2NhbEVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuIlVuYm91bmRMb2NhbEVycm9yIiBpcyBhIHN1YmNsYXNzIG9mICJOYW1lRXJyb3IiLlxuXG5JZiBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24gb2NjdXJzIGFueXdoZXJlIHdpdGhpbiBhIGNvZGUgYmxvY2ssIGFsbFxudXNlcyBvZiB0aGUgbmFtZSB3aXRoaW4gdGhlIGJsb2NrIGFyZSB0cmVhdGVkIGFzIHJlZmVyZW5jZXMgdG8gdGhlXG5jdXJyZW50IGJsb2NrLiAgVGhpcyBjYW4gbGVhZCB0byBlcnJvcnMgd2hlbiBhIG5hbWUgaXMgdXNlZCB3aXRoaW4gYVxuYmxvY2sgYmVmb3JlIGl0IGlzIGJvdW5kLiAgVGhpcyBydWxlIGlzIHN1YnRsZS4gIFB5dGhvbiBsYWNrc1xuZGVjbGFyYXRpb25zIGFuZCBhbGxvd3MgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbnMgdG8gb2NjdXIgYW55d2hlcmVcbndpdGhpbiBhIGNvZGUgYmxvY2suICBUaGUgbG9jYWwgdmFyaWFibGVzIG9mIGEgY29kZSBibG9jayBjYW4gYmVcbmRldGVybWluZWQgYnkgc2Nhbm5pbmcgdGhlIGVudGlyZSB0ZXh0IG9mIHRoZSBibG9jayBmb3IgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5JZiB0aGUgImdsb2JhbCIgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jaywgYWxsIHVzZXMgb2YgdGhlIG5hbWVcbnNwZWNpZmllZCBpbiB0aGUgc3RhdGVtZW50IHJlZmVyIHRvIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBpbiB0aGVcbnRvcC1sZXZlbCBuYW1lc3BhY2UuICBOYW1lcyBhcmUgcmVzb2x2ZWQgaW4gdGhlIHRvcC1sZXZlbCBuYW1lc3BhY2UgYnlcbnNlYXJjaGluZyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgaS5lLiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGVcbmNvbnRhaW5pbmcgdGhlIGNvZGUgYmxvY2ssIGFuZCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlLCB0aGUgbmFtZXNwYWNlXG5vZiB0aGUgbW9kdWxlICJidWlsdGlucyIuICBUaGUgZ2xvYmFsIG5hbWVzcGFjZSBpcyBzZWFyY2hlZCBmaXJzdC4gIElmXG50aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBidWlsdGlucyBuYW1lc3BhY2UgaXMgc2VhcmNoZWQuICBUaGVcbiJnbG9iYWwiIHN0YXRlbWVudCBtdXN0IHByZWNlZGUgYWxsIHVzZXMgb2YgdGhlIG5hbWUuXG5cblRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvblxuaW4gdGhlIHNhbWUgYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGEgZnJlZSB2YXJpYWJsZVxuY29udGFpbnMgYSBnbG9iYWwgc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpcyB0cmVhdGVkIGFzIGEgZ2xvYmFsLlxuXG5UaGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnQgY2F1c2VzIGNvcnJlc3BvbmRpbmcgbmFtZXMgdG8gcmVmZXIgdG9cbnByZXZpb3VzbHkgYm91bmQgdmFyaWFibGVzIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBmdW5jdGlvbiBzY29wZS5cbiJTeW50YXhFcnJvciIgaXMgcmFpc2VkIGF0IGNvbXBpbGUgdGltZSBpZiB0aGUgZ2l2ZW4gbmFtZSBkb2VzIG5vdFxuZXhpc3QgaW4gYW55IGVuY2xvc2luZyBmdW5jdGlvbiBzY29wZS5cblxuVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGFcbm1vZHVsZSBpcyBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZFxuIl9fbWFpbl9fIi5cblxuQ2xhc3MgZGVmaW5pdGlvbiBibG9ja3MgYW5kIGFyZ3VtZW50cyB0byAiZXhlYygpIiBhbmQgImV2YWwoKSIgYXJlXG5zcGVjaWFsIGluIHRoZSBjb250ZXh0IG9mIG5hbWUgcmVzb2x1dGlvbi4gQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuXG5leGVjdXRhYmxlIHN0YXRlbWVudCB0aGF0IG1heSB1c2UgYW5kIGRlZmluZSBuYW1lcy4gVGhlc2UgcmVmZXJlbmNlc1xuZm9sbG93IHRoZSBub3JtYWwgcnVsZXMgZm9yIG5hbWUgcmVzb2x1dGlvbiB3aXRoIGFuIGV4Y2VwdGlvbiB0aGF0XG51bmJvdW5kIGxvY2FsIHZhcmlhYmxlcyBhcmUgbG9va2VkIHVwIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBUaGVcbm5hbWVzcGFjZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBiZWNvbWVzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSBvZlxudGhlIGNsYXNzLiBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhIGNsYXNzIGJsb2NrIGlzIGxpbWl0ZWQgdG9cbnRoZSBjbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZSBjb2RlIGJsb2NrcyBvZiBtZXRob2RzIC0tXG50aGlzIGluY2x1ZGVzIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgc2luY2UgdGhleSBhcmVcbmltcGxlbWVudGVkIHVzaW5nIGEgZnVuY3Rpb24gc2NvcGUuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZ1xud2lsbCBmYWlsOlxuXG4gICBjbGFzcyBBOlxuICAgICAgIGEgPSA0MlxuICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSlcblxuXG5CdWlsdGlucyBhbmQgcmVzdHJpY3RlZCBleGVjdXRpb25cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgYnVpbHRpbnMgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIGEgY29kZSBibG9ja1xuaXMgYWN0dWFsbHkgZm91bmQgYnkgbG9va2luZyB1cCB0aGUgbmFtZSAiX19idWlsdGluc19fIiBpbiBpdHMgZ2xvYmFsXG5uYW1lc3BhY2U7IHRoaXMgc2hvdWxkIGJlIGEgZGljdGlvbmFyeSBvciBhIG1vZHVsZSAoaW4gdGhlIGxhdHRlciBjYXNlXG50aGUgbW9kdWxlXCdzIGRpY3Rpb25hcnkgaXMgdXNlZCkuICBCeSBkZWZhdWx0LCB3aGVuIGluIHRoZSAiX19tYWluX18iXG5tb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIHRoZSBidWlsdC1pbiBtb2R1bGUgImJ1aWx0aW5zIjsgd2hlbiBpbiBhbnlcbm90aGVyIG1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgYW4gYWxpYXMgZm9yIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZVxuImJ1aWx0aW5zIiBtb2R1bGUgaXRzZWxmLiAgIl9fYnVpbHRpbnNfXyIgY2FuIGJlIHNldCB0byBhIHVzZXItY3JlYXRlZFxuZGljdGlvbmFyeSB0byBjcmVhdGUgYSB3ZWFrIGZvcm0gb2YgcmVzdHJpY3RlZCBleGVjdXRpb24uXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVXNlcnMgc2hvdWxkIG5vdCB0b3VjaFxuIl9fYnVpbHRpbnNfXyI7IGl0IGlzIHN0cmljdGx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIFVzZXJzXG53YW50aW5nIHRvIG92ZXJyaWRlIHZhbHVlcyBpbiB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIHNob3VsZCAiaW1wb3J0IlxudGhlICJidWlsdGlucyIgbW9kdWxlIGFuZCBtb2RpZnkgaXRzIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS5cblxuXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5OYW1lIHJlc29sdXRpb24gb2YgZnJlZSB2YXJpYWJsZXMgb2NjdXJzIGF0IHJ1bnRpbWUsIG5vdCBhdCBjb21waWxlXG50aW1lLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgcHJpbnQgNDI6XG5cbiAgIGkgPSAxMFxuICAgZGVmIGYoKTpcbiAgICAgICBwcmludChpKVxuICAgaSA9IDQyXG4gICBmKClcblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuVGhlICJldmFsKCkiIGFuZCAiZXhlYygpIiBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSAiZXhlYygpIiBhbmQgImV2YWwoKSIgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cblxuXG5FeGNlcHRpb25zXG49PT09PT09PT09XG5cbkV4Y2VwdGlvbnMgYXJlIGEgbWVhbnMgb2YgYnJlYWtpbmcgb3V0IG9mIHRoZSBub3JtYWwgZmxvdyBvZiBjb250cm9sXG5vZiBhIGNvZGUgYmxvY2sgaW4gb3JkZXIgdG8gaGFuZGxlIGVycm9ycyBvciBvdGhlciBleGNlcHRpb25hbFxuY29uZGl0aW9ucy4gIEFuIGV4Y2VwdGlvbiBpcyAqcmFpc2VkKiBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGVycm9yIGlzXG5kZXRlY3RlZDsgaXQgbWF5IGJlICpoYW5kbGVkKiBieSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9jayBvciBieSBhbnlcbmNvZGUgYmxvY2sgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGludm9rZWQgdGhlIGNvZGUgYmxvY2sgd2hlcmVcbnRoZSBlcnJvciBvY2N1cnJlZC5cblxuVGhlIFB5dGhvbiBpbnRlcnByZXRlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gaXQgZGV0ZWN0cyBhIHJ1bi10aW1lXG5lcnJvciAoc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvKS4gIEEgUHl0aG9uIHByb2dyYW0gY2FuIGFsc29cbmV4cGxpY2l0bHkgcmFpc2UgYW4gZXhjZXB0aW9uIHdpdGggdGhlICJyYWlzZSIgc3RhdGVtZW50LiBFeGNlcHRpb25cbmhhbmRsZXJzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgInRyeSIgLi4uICJleGNlcHQiIHN0YXRlbWVudC4gIFRoZVxuImZpbmFsbHkiIGNsYXVzZSBvZiBzdWNoIGEgc3RhdGVtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgY2xlYW51cFxuY29kZSB3aGljaCBkb2VzIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbiwgYnV0IGlzIGV4ZWN1dGVkIHdoZXRoZXIgYW5cbmV4Y2VwdGlvbiBvY2N1cnJlZCBvciBub3QgaW4gdGhlIHByZWNlZGluZyBjb2RlLlxuXG5QeXRob24gdXNlcyB0aGUgInRlcm1pbmF0aW9uIiBtb2RlbCBvZiBlcnJvciBoYW5kbGluZzogYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNhbiBmaW5kIG91dCB3aGF0IGhhcHBlbmVkIGFuZCBjb250aW51ZSBleGVjdXRpb24gYXQgYW4gb3V0ZXJcbmxldmVsLCBidXQgaXQgY2Fubm90IHJlcGFpciB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yIGFuZCByZXRyeSB0aGVcbmZhaWxpbmcgb3BlcmF0aW9uIChleGNlcHQgYnkgcmUtZW50ZXJpbmcgdGhlIG9mZmVuZGluZyBwaWVjZSBvZiBjb2RlXG5mcm9tIHRoZSB0b3ApLlxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCBhdCBhbGwsIHRoZSBpbnRlcnByZXRlciB0ZXJtaW5hdGVzXG5leGVjdXRpb24gb2YgdGhlIHByb2dyYW0sIG9yIHJldHVybnMgdG8gaXRzIGludGVyYWN0aXZlIG1haW4gbG9vcC4gIEluXG5laXRoZXIgY2FzZSwgaXQgcHJpbnRzIGEgc3RhY2sgYmFja3RyYWNlLCBleGNlcHQgd2hlbiB0aGUgZXhjZXB0aW9uIGlzXG4iU3lzdGVtRXhpdCIuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlICJleGNlcHQiIGNsYXVzZSBpc1xuc2VsZWN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2U6IGl0IG11c3QgcmVmZXJlbmNlIHRoZVxuY2xhc3Mgb2YgdGhlIGluc3RhbmNlIG9yIGEgYmFzZSBjbGFzcyB0aGVyZW9mLiAgVGhlIGluc3RhbmNlIGNhbiBiZVxucmVjZWl2ZWQgYnkgdGhlIGhhbmRsZXIgYW5kIGNhbiBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZVxuZXhjZXB0aW9uYWwgY29uZGl0aW9uLlxuXG5Ob3RlOiBFeGNlcHRpb24gbWVzc2FnZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQeXRob24gQVBJLiAgVGhlaXJcbiAgY29udGVudHMgbWF5IGNoYW5nZSBmcm9tIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byB0aGUgbmV4dCB3aXRob3V0XG4gIHdhcm5pbmcgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVkIG9uIGJ5IGNvZGUgd2hpY2ggd2lsbCBydW4gdW5kZXJcbiAgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLlxuXG5TZWUgYWxzbyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJ0cnkiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgdHJ5XG5zdGF0ZW1lbnQqIGFuZCAicmFpc2UiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieVxuICAgIHRoZXNlIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzXG4gICAgY29tcGlsZWQuXG4nLAotICdleHBybGlzdHMnOiB1J1xuRXhwcmVzc2lvbiBsaXN0c1xuKioqKioqKioqKioqKioqKlxuXG4gICBleHByZXNzaW9uX2xpc3QgOjo9IGV4cHJlc3Npb24gKCAiLCIgZXhwcmVzc2lvbiApKiBbIiwiXVxuXG5BbiBleHByZXNzaW9uIGxpc3QgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY29tbWEgeWllbGRzIGEgdHVwbGUuICBUaGVcbmxlbmd0aCBvZiB0aGUgdHVwbGUgaXMgdGhlIG51bWJlciBvZiBleHByZXNzaW9ucyBpbiB0aGUgbGlzdC4gIFRoZVxuZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cblRoZSB0cmFpbGluZyBjb21tYSBpcyByZXF1aXJlZCBvbmx5IHRvIGNyZWF0ZSBhIHNpbmdsZSB0dXBsZSAoYS5rLmEuIGFcbipzaW5nbGV0b24qKTsgaXQgaXMgb3B0aW9uYWwgaW4gYWxsIG90aGVyIGNhc2VzLiAgQSBzaW5nbGUgZXhwcmVzc2lvblxud2l0aG91dCBhIHRyYWlsaW5nIGNvbW1hIGRvZXNuXCd0IGNyZWF0ZSBhIHR1cGxlLCBidXQgcmF0aGVyIHlpZWxkcyB0aGVcbnZhbHVlIG9mIHRoYXQgZXhwcmVzc2lvbi4gKFRvIGNyZWF0ZSBhbiBlbXB0eSB0dXBsZSwgdXNlIGFuIGVtcHR5IHBhaXJcbm9mIHBhcmVudGhlc2VzOiAiKCkiLilcbicsCisgJ2V4cHJsaXN0cyc6IHUnXG5FeHByZXNzaW9uIGxpc3RzXG4qKioqKioqKioqKioqKioqXG5cbiAgIGV4cHJlc3Npb25fbGlzdCAgICA6Oj0gZXhwcmVzc2lvbiAoICIsIiBleHByZXNzaW9uICkqIFsiLCJdXG4gICBzdGFycmVkX2xpc3QgICAgICAgOjo9IHN0YXJyZWRfaXRlbSAoICIsIiBzdGFycmVkX2l0ZW0gKSogWyIsIl1cbiAgIHN0YXJyZWRfZXhwcmVzc2lvbiA6Oj0gZXhwcmVzc2lvbiB8ICggc3RhcnJlZF9pdGVtICIsIiApKiBbc3RhcnJlZF9pdGVtXVxuICAgc3RhcnJlZF9pdGVtICAgICAgIDo6PSBleHByZXNzaW9uIHwgIioiIG9yX2V4cHJcblxuRXhjZXB0IHdoZW4gcGFydCBvZiBhIGxpc3Qgb3Igc2V0IGRpc3BsYXksIGFuIGV4cHJlc3Npb24gbGlzdFxuY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY29tbWEgeWllbGRzIGEgdHVwbGUuICBUaGUgbGVuZ3RoIG9mIHRoZSB0dXBsZVxuaXMgdGhlIG51bWJlciBvZiBleHByZXNzaW9ucyBpbiB0aGUgbGlzdC4gIFRoZSBleHByZXNzaW9ucyBhcmVcbmV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cbkFuIGFzdGVyaXNrICIqIiBkZW5vdGVzICppdGVyYWJsZSB1bnBhY2tpbmcqLiAgSXRzIG9wZXJhbmQgbXVzdCBiZSBhblxuKml0ZXJhYmxlKi4gIFRoZSBpdGVyYWJsZSBpcyBleHBhbmRlZCBpbnRvIGEgc2VxdWVuY2Ugb2YgaXRlbXMsIHdoaWNoXG5hcmUgaW5jbHVkZWQgaW4gdGhlIG5ldyB0dXBsZSwgbGlzdCwgb3Igc2V0LCBhdCB0aGUgc2l0ZSBvZiB0aGVcbnVucGFja2luZy5cblxuTmV3IGluIHZlcnNpb24gMy41OiBJdGVyYWJsZSB1bnBhY2tpbmcgaW4gZXhwcmVzc2lvbiBsaXN0cywgb3JpZ2luYWxseVxucHJvcG9zZWQgYnkgKipQRVAgNDQ4KiouXG5cblRoZSB0cmFpbGluZyBjb21tYSBpcyByZXF1aXJlZCBvbmx5IHRvIGNyZWF0ZSBhIHNpbmdsZSB0dXBsZSAoYS5rLmEuIGFcbipzaW5nbGV0b24qKTsgaXQgaXMgb3B0aW9uYWwgaW4gYWxsIG90aGVyIGNhc2VzLiAgQSBzaW5nbGUgZXhwcmVzc2lvblxud2l0aG91dCBhIHRyYWlsaW5nIGNvbW1hIGRvZXNuXCd0IGNyZWF0ZSBhIHR1cGxlLCBidXQgcmF0aGVyIHlpZWxkcyB0aGVcbnZhbHVlIG9mIHRoYXQgZXhwcmVzc2lvbi4gKFRvIGNyZWF0ZSBhbiBlbXB0eSB0dXBsZSwgdXNlIGFuIGVtcHR5IHBhaXJcbm9mIHBhcmVudGhlc2VzOiAiKCkiLilcbicsCiAgJ2Zsb2F0aW5nJzogdSdcbkZsb2F0aW5nIHBvaW50IGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG5GbG9hdGluZyBwb2ludCBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbFxuZGVmaW5pdGlvbnM6XG5cbiAgIGZsb2F0bnVtYmVyICAgOjo9IHBvaW50ZmxvYXQgfCBleHBvbmVudGZsb2F0XG4gICBwb2ludGZsb2F0ICAgIDo6PSBbaW50cGFydF0gZnJhY3Rpb24gfCBpbnRwYXJ0ICIuIlxuICAgZXhwb25lbnRmbG9hdCA6Oj0gKGludHBhcnQgfCBwb2ludGZsb2F0KSBleHBvbmVudFxuICAgaW50cGFydCAgICAgICA6Oj0gZGlnaXQrXG4gICBmcmFjdGlvbiAgICAgIDo6PSAiLiIgZGlnaXQrXG4gICBleHBvbmVudCAgICAgIDo6PSAoImUiIHwgIkUiKSBbIisiIHwgIi0iXSBkaWdpdCtcblxuTm90ZSB0aGF0IHRoZSBpbnRlZ2VyIGFuZCBleHBvbmVudCBwYXJ0cyBhcmUgYWx3YXlzIGludGVycHJldGVkIHVzaW5nXG5yYWRpeCAxMC4gRm9yIGV4YW1wbGUsICIwNzdlMDEwIiBpcyBsZWdhbCwgYW5kIGRlbm90ZXMgdGhlIHNhbWUgbnVtYmVyXG5hcyAiNzdlMTAiLiBUaGUgYWxsb3dlZCByYW5nZSBvZiBmbG9hdGluZyBwb2ludCBsaXRlcmFscyBpc1xuaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LiBTb21lIGV4YW1wbGVzIG9mIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzOlxuXG4gICAzLjE0ICAgIDEwLiAgICAuMDAxICAgIDFlMTAwICAgIDMuMTRlLTEwICAgIDBlMFxuXG5Ob3RlIHRoYXQgbnVtZXJpYyBsaXRlcmFscyBkbyBub3QgaW5jbHVkZSBhIHNpZ247IGEgcGhyYXNlIGxpa2UgIi0xIlxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgIi0iIGFuZCB0aGVcbmxpdGVyYWwgIjEiLlxuJywKICAnZm9yJzogdSdcblRoZSAiZm9yIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKipcblxuVGhlICJmb3IiIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZVxuKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG4iZXhwcmVzc2lvbl9saXN0Ii4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgcmV0dXJuZWQgYnkgdGhlIGl0ZXJhdG9yLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cyAoc2VlICpBc3NpZ25tZW50IHN0YXRlbWVudHMqKSwgYW5kIHRoZW4gdGhlIHN1aXRlIGlzXG5leGVjdXRlZC4gIFdoZW4gdGhlIGl0ZW1zIGFyZSBleGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSBvciBhbiBpdGVyYXRvciByYWlzZXMgYSAiU3RvcEl0ZXJhdGlvbiIgZXhjZXB0aW9uKSxcbnRoZSBzdWl0ZSBpbiB0aGUgImVsc2UiIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWQsIGFuZCB0aGUgbG9vcFxudGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBjb250aW51ZXNcbndpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgImVsc2UiIGNsYXVzZSBpZiB0aGVyZSBpcyBubyBuZXh0XG5pdGVtLlxuXG5UaGUgZm9yLWxvb3AgbWFrZXMgYXNzaWdubWVudHMgdG8gdGhlIHZhcmlhYmxlcyhzKSBpbiB0aGUgdGFyZ2V0IGxpc3QuXG5UaGlzIG92ZXJ3cml0ZXMgYWxsIHByZXZpb3VzIGFzc2lnbm1lbnRzIHRvIHRob3NlIHZhcmlhYmxlcyBpbmNsdWRpbmdcbnRob3NlIG1hZGUgaW4gdGhlIHN1aXRlIG9mIHRoZSBmb3ItbG9vcDpcblxuICAgZm9yIGkgaW4gcmFuZ2UoMTApOlxuICAgICAgIHByaW50KGkpXG4gICAgICAgaSA9IDUgICAgICAgICAgICAgIyB0aGlzIHdpbGwgbm90IGFmZmVjdCB0aGUgZm9yLWxvb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaSB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5leHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAjIGluZGV4IGluIHRoZSByYW5nZVxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCB0aGV5IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdFxuYWxsIGJ5IHRoZSBsb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJyYW5nZSgpIiByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzICJmb3IgaVxuOj0gYSB0byBiIGRvIjsgZS5nLiwgImxpc3QocmFuZ2UoMykpIiByZXR1cm5zIHRoZSBsaXN0ICJbMCwgMSwgMl0iLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZVxuICBsb29wICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuICBBblxuICBpbnRlcm5hbCBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCxcbiAgYW5kIHRoaXMgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXNcbiAgcmVhY2hlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFuc1xuICB0aGF0IGlmIHRoZSBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlXG4gIHNlcXVlbmNlLCB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2ZcbiAgdGhlIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcbicsCi0gJ2Zvcm1hdHN0cmluZ3MnOiB1J1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAic3RyLmZvcm1hdCgpIiBtZXRob2QgYW5kIHRoZSAiRm9ybWF0dGVyIiBjbGFzcyBzaGFyZSB0aGUgc2FtZVxuc3ludGF4IGZvciBmb3JtYXQgc3RyaW5ncyAoYWx0aG91Z2ggaW4gdGhlIGNhc2Ugb2YgIkZvcm1hdHRlciIsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuInt9Ii4gQW55dGhpbmcgdGhhdCBpcyBub3QgY29udGFpbmVkIGluIGJyYWNlcyBpcyBjb25zaWRlcmVkIGxpdGVyYWxcbnRleHQsIHdoaWNoIGlzIGNvcGllZCB1bmNoYW5nZWQgdG8gdGhlIG91dHB1dC4gIElmIHlvdSBuZWVkIHRvIGluY2x1ZGVcbmEgYnJhY2UgY2hhcmFjdGVyIGluIHRoZSBsaXRlcmFsIHRleHQsIGl0IGNhbiBiZSBlc2NhcGVkIGJ5IGRvdWJsaW5nOlxuInt7IiBhbmQgIn19Ii5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBbZmllbGRfbmFtZV0gWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSBhcmdfbmFtZSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGFyZ19uYW1lICAgICAgICAgIDo6PSBbaWRlbnRpZmllciB8IGludGVnZXJdXG4gICAgICBhdHRyaWJ1dGVfbmFtZSAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgZWxlbWVudF9pbmRleCAgICAgOjo9IGludGVnZXIgfCBpbmRleF9zdHJpbmdcbiAgICAgIGluZGV4X3N0cmluZyAgICAgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gK1xuICAgICAgY29udmVyc2lvbiAgICAgICAgOjo9ICJyIiB8ICJzIiB8ICJhIlxuICAgICAgZm9ybWF0X3NwZWMgICAgICAgOjo9IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj5cblxuSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhXG4qZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMgdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWRcbmFuZCBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuIFRoZVxuKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgIlwnIVwnIiwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGEgY29sb24gIlwnOlwnIi4gIFRoZXNlIHNwZWNpZnkgYSBub24tZGVmYXVsdCBmb3JtYXQgZm9yIHRoZVxucmVwbGFjZW1lbnQgdmFsdWUuXG5cblNlZSBhbHNvIHRoZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogc2VjdGlvbi5cblxuVGhlICpmaWVsZF9uYW1lKiBpdHNlbGYgYmVnaW5zIHdpdGggYW4gKmFyZ19uYW1lKiB0aGF0IGlzIGVpdGhlciBhXG5udW1iZXIgb3IgYSBrZXl3b3JkLiAgSWYgaXRcJ3MgYSBudW1iZXIsIGl0IHJlZmVycyB0byBhIHBvc2l0aW9uYWxcbmFyZ3VtZW50LCBhbmQgaWYgaXRcJ3MgYSBrZXl3b3JkLCBpdCByZWZlcnMgdG8gYSBuYW1lZCBrZXl3b3JkXG5hcmd1bWVudC4gIElmIHRoZSBudW1lcmljYWwgYXJnX25hbWVzIGluIGEgZm9ybWF0IHN0cmluZyBhcmUgMCwgMSwgMixcbi4uLiBpbiBzZXF1ZW5jZSwgdGhleSBjYW4gYWxsIGJlIG9taXR0ZWQgKG5vdCBqdXN0IHNvbWUpIGFuZCB0aGVcbm51bWJlcnMgMCwgMSwgMiwgLi4uIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGF0IG9yZGVyLlxuQmVjYXVzZSAqYXJnX25hbWUqIGlzIG5vdCBxdW90ZS1kZWxpbWl0ZWQsIGl0IGlzIG5vdCBwb3NzaWJsZSB0b1xuc3BlY2lmeSBhcmJpdHJhcnkgZGljdGlvbmFyeSBrZXlzIChlLmcuLCB0aGUgc3RyaW5ncyAiXCcxMFwnIiBvclxuIlwnOi1dXCciKSB3aXRoaW4gYSBmb3JtYXQgc3RyaW5nLiBUaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnkgYW55XG5udW1iZXIgb2YgaW5kZXggb3IgYXR0cmlidXRlIGV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtXG4iXCcubmFtZVwnIiBzZWxlY3RzIHRoZSBuYW1lZCBhdHRyaWJ1dGUgdXNpbmcgImdldGF0dHIoKSIsIHdoaWxlIGFuXG5leHByZXNzaW9uIG9mIHRoZSBmb3JtICJcJ1tpbmRleF1cJyIgZG9lcyBhbiBpbmRleCBsb29rdXAgdXNpbmdcbiJfX2dldGl0ZW1fXygpIi5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogVGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVycyBjYW4gYmVcbm9taXR0ZWQsIHNvICJcJ3t9IHt9XCciIGlzIGVxdWl2YWxlbnQgdG8gIlwnezB9IHsxfVwnIi5cblxuU29tZSBzaW1wbGUgZm9ybWF0IHN0cmluZyBleGFtcGxlczpcblxuICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSJcbiAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjIFwnd2VpZ2h0XCcgYXR0cmlidXRlIG9mIGZpcnN0IHBvc2l0aW9uYWwgYXJnXG4gICAiVW5pdHMgZGVzdHJveWVkOiB7cGxheWVyc1swXX0iICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCBcJ3BsYXllcnNcJy5cblxuVGhlICpjb252ZXJzaW9uKiBmaWVsZCBjYXVzZXMgYSB0eXBlIGNvZXJjaW9uIGJlZm9yZSBmb3JtYXR0aW5nLlxuTm9ybWFsbHksIHRoZSBqb2Igb2YgZm9ybWF0dGluZyBhIHZhbHVlIGlzIGRvbmUgYnkgdGhlICJfX2Zvcm1hdF9fKCkiXG5tZXRob2Qgb2YgdGhlIHZhbHVlIGl0c2VsZi4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMgaXQgaXMgZGVzaXJhYmxlIHRvXG5mb3JjZSBhIHR5cGUgdG8gYmUgZm9ybWF0dGVkIGFzIGEgc3RyaW5nLCBvdmVycmlkaW5nIGl0cyBvd25cbmRlZmluaXRpb24gb2YgZm9ybWF0dGluZy4gIEJ5IGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuY2FsbGluZyAiX19mb3JtYXRfXygpIiwgdGhlIG5vcm1hbCBmb3JtYXR0aW5nIGxvZ2ljIGlzIGJ5cGFzc2VkLlxuXG5UaHJlZSBjb252ZXJzaW9uIGZsYWdzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOiAiXCchc1wnIiB3aGljaCBjYWxsc1xuInN0cigpIiBvbiB0aGUgdmFsdWUsICJcJyFyXCciIHdoaWNoIGNhbGxzICJyZXByKCkiIGFuZCAiXCchYVwnIiB3aGljaFxuY2FsbHMgImFzY2lpKCkiLlxuXG5Tb21lIGV4YW1wbGVzOlxuXG4gICAiSGFyb2xkXCdzIGEgY2xldmVyIHswIXN9IiAgICAgICAgIyBDYWxscyBzdHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJCcmluZyBvdXQgdGhlIGhvbHkge25hbWUhcn0iICAgICMgQ2FsbHMgcmVwcigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIk1vcmUgeyFhfSIgICAgICAgICAgICAgICAgICAgICAgIyBDYWxscyBhc2NpaSgpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuXG5UaGUgKmZvcm1hdF9zcGVjKiBmaWVsZCBjb250YWlucyBhIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZSB2YWx1ZVxuc2hvdWxkIGJlIHByZXNlbnRlZCwgaW5jbHVkaW5nIHN1Y2ggZGV0YWlscyBhcyBmaWVsZCB3aWR0aCwgYWxpZ25tZW50LFxucGFkZGluZywgZGVjaW1hbCBwcmVjaXNpb24gYW5kIHNvIG9uLiAgRWFjaCB2YWx1ZSB0eXBlIGNhbiBkZWZpbmUgaXRzXG5vd24gImZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSIgb3IgaW50ZXJwcmV0YXRpb24gb2YgdGhlICpmb3JtYXRfc3BlYyouXG5cbk1vc3QgYnVpbHQtaW4gdHlwZXMgc3VwcG9ydCBhIGNvbW1vbiBmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UsIHdoaWNoXG5pcyBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbi5cblxuQSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNhbiBhbHNvIGluY2x1ZGUgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkc1xud2l0aGluIGl0LiBUaGVzZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzIGNhbiBjb250YWluIG9ubHkgYSBmaWVsZFxubmFtZTsgY29udmVyc2lvbiBmbGFncyBhbmQgZm9ybWF0IHNwZWNpZmljYXRpb25zIGFyZSBub3QgYWxsb3dlZC4gIFRoZVxucmVwbGFjZW1lbnQgZmllbGRzIHdpdGhpbiB0aGUgZm9ybWF0X3NwZWMgYXJlIHN1YnN0aXR1dGVkIGJlZm9yZSB0aGVcbipmb3JtYXRfc3BlYyogc3RyaW5nIGlzIGludGVycHJldGVkLiBUaGlzIGFsbG93cyB0aGUgZm9ybWF0dGluZyBvZiBhXG52YWx1ZSB0byBiZSBkeW5hbWljYWxseSBzcGVjaWZpZWQuXG5cblNlZSB0aGUgKkZvcm1hdCBleGFtcGxlcyogc2VjdGlvbiBmb3Igc29tZSBleGFtcGxlcy5cblxuXG5Gb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiJGb3JtYXQgc3BlY2lmaWNhdGlvbnMiIGFyZSB1c2VkIHdpdGhpbiByZXBsYWNlbWVudCBmaWVsZHMgY29udGFpbmVkXG53aXRoaW4gYSBmb3JtYXQgc3RyaW5nIHRvIGRlZmluZSBob3cgaW5kaXZpZHVhbCB2YWx1ZXMgYXJlIHByZXNlbnRlZFxuKHNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqKS4gIFRoZXkgY2FuIGFsc28gYmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZVxuYnVpbHQtaW4gImZvcm1hdCgpIiBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKCIiIiIpIHByb2R1Y2VzXG50aGUgc2FtZSByZXN1bHQgYXMgaWYgeW91IGhhZCBjYWxsZWQgInN0cigpIiBvbiB0aGUgdmFsdWUuIEEgbm9uLWVtcHR5XG5mb3JtYXQgc3RyaW5nIHR5cGljYWxseSBtb2RpZmllcyB0aGUgcmVzdWx0LlxuXG5UaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOlxuXG4gICBmb3JtYXRfc3BlYyA6Oj0gW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV1cbiAgIGZpbGwgICAgICAgIDo6PSA8YW55IGNoYXJhY3Rlcj5cbiAgIGFsaWduICAgICAgIDo6PSAiPCIgfCAiPiIgfCAiPSIgfCAiXiJcbiAgIHNpZ24gICAgICAgIDo6PSAiKyIgfCAiLSIgfCAiICJcbiAgIHdpZHRoICAgICAgIDo6PSBpbnRlZ2VyXG4gICBwcmVjaXNpb24gICA6Oj0gaW50ZWdlclxuICAgdHlwZSAgICAgICAgOjo9ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIlxuXG5JZiBhIHZhbGlkICphbGlnbiogdmFsdWUgaXMgc3BlY2lmaWVkLCBpdCBjYW4gYmUgcHJlY2VkZWQgYnkgYSAqZmlsbCpcbmNoYXJhY3RlciB0aGF0IGNhbiBiZSBhbnkgY2hhcmFjdGVyIGFuZCBkZWZhdWx0cyB0byBhIHNwYWNlIGlmXG5vbWl0dGVkLiBOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSAieyIgYW5kICJ9IiBhcyAqZmlsbCpcbmNoYXIgd2hpbGUgdXNpbmcgdGhlICJzdHIuZm9ybWF0KCkiIG1ldGhvZDsgdGhpcyBsaW1pdGF0aW9uIGhvd2V2ZXJcbmRvZXNuXCd0IGFmZmVjdCB0aGUgImZvcm1hdCgpIiBmdW5jdGlvbi5cblxuVGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYWxpZ25tZW50IG9wdGlvbnMgaXMgYXMgZm9sbG93czpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCc8XCciICAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgbGVmdC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbW9zdCBvYmplY3RzKS4gICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJz5cJyIgICAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSByaWdodC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBudW1iZXJzKS4gICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnPVwnIiAgICAgfCBGb3JjZXMgdGhlIHBhZGRpbmcgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBzaWduIChpZiBhbnkpICAgIHxcbiAgIHwgICAgICAgICAgIHwgYnV0IGJlZm9yZSB0aGUgZGlnaXRzLiAgVGhpcyBpcyB1c2VkIGZvciBwcmludGluZyBmaWVsZHMgICB8XG4gICB8ICAgICAgICAgICB8IGluIHRoZSBmb3JtIFwnKzAwMDAwMDEyMFwnLiBUaGlzIGFsaWdubWVudCBvcHRpb24gaXMgb25seSAgICB8XG4gICB8ICAgICAgICAgICB8IHZhbGlkIGZvciBudW1lcmljIHR5cGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnXlwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlIHRoYXQgdW5sZXNzIGEgbWluaW11bSBmaWVsZCB3aWR0aCBpcyBkZWZpbmVkLCB0aGUgZmllbGQgd2lkdGhcbndpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGRhdGEgdG8gZmlsbCBpdCwgc28gdGhhdCB0aGVcbmFsaWdubWVudCBvcHRpb24gaGFzIG5vIG1lYW5pbmcgaW4gdGhpcyBjYXNlLlxuXG5UaGUgKnNpZ24qIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBudW1iZXIgdHlwZXMsIGFuZCBjYW4gYmUgb25lIG9mXG50aGUgZm9sbG93aW5nOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJytcJyIgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIGZvciBib3RoIHBvc2l0aXZlIGFzICB8XG4gICB8ICAgICAgICAgICB8IHdlbGwgYXMgbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnLVwnIiAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgbmVnYXRpdmUgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycyAodGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvcikuICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBzcGFjZSAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIGxlYWRpbmcgc3BhY2Ugc2hvdWxkIGJlIHVzZWQgb24gcG9zaXRpdmUgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycywgYW5kIGEgbWludXMgc2lnbiBvbiBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgIlwnI1wnIiBvcHRpb24gY2F1c2VzIHRoZSAiYWx0ZXJuYXRlIGZvcm0iIHRvIGJlIHVzZWQgZm9yIHRoZVxuY29udmVyc2lvbi4gIFRoZSBhbHRlcm5hdGUgZm9ybSBpcyBkZWZpbmVkIGRpZmZlcmVudGx5IGZvciBkaWZmZXJlbnRcbnR5cGVzLiAgVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgaW50ZWdlciwgZmxvYXQsIGNvbXBsZXggYW5kXG5EZWNpbWFsIHR5cGVzLiBGb3IgaW50ZWdlcnMsIHdoZW4gYmluYXJ5LCBvY3RhbCwgb3IgaGV4YWRlY2ltYWwgb3V0cHV0XG5pcyB1c2VkLCB0aGlzIG9wdGlvbiBhZGRzIHRoZSBwcmVmaXggcmVzcGVjdGl2ZSAiXCcwYlwnIiwgIlwnMG9cJyIsIG9yXG4iXCcweFwnIiB0byB0aGUgb3V0cHV0IHZhbHVlLiBGb3IgZmxvYXRzLCBjb21wbGV4IGFuZCBEZWNpbWFsIHRoZVxuYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24gdG8gYWx3YXlzIGNvbnRhaW4gYVxuZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIsIGV2ZW4gaWYgbm8gZGlnaXRzIGZvbGxvdyBpdC4gTm9ybWFsbHksIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyIGFwcGVhcnMgaW4gdGhlIHJlc3VsdCBvZiB0aGVzZSBjb252ZXJzaW9uc1xub25seSBpZiBhIGRpZ2l0IGZvbGxvd3MgaXQuIEluIGFkZGl0aW9uLCBmb3IgIlwnZ1wnIiBhbmQgIlwnR1wnIlxuY29udmVyc2lvbnMsIHRyYWlsaW5nIHplcm9zIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHQuXG5cblRoZSAiXCcsXCciIG9wdGlvbiBzaWduYWxzIHRoZSB1c2Ugb2YgYSBjb21tYSBmb3IgYSB0aG91c2FuZHMgc2VwYXJhdG9yLlxuRm9yIGEgbG9jYWxlIGF3YXJlIHNlcGFyYXRvciwgdXNlIHRoZSAiXCduXCciIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVcbmluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IEFkZGVkIHRoZSAiXCcsXCciIG9wdGlvbiAoc2VlIGFsc28gKipQRVAgMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuUHJlY2VkaW5nIHRoZSAqd2lkdGgqIGZpZWxkIGJ5IGEgemVybyAoIlwnMFwnIikgY2hhcmFjdGVyIGVuYWJsZXMgc2lnbi1cbmF3YXJlIHplcm8tcGFkZGluZyBmb3IgbnVtZXJpYyB0eXBlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhICpmaWxsKlxuY2hhcmFjdGVyIG9mICJcJzBcJyIgd2l0aCBhbiAqYWxpZ25tZW50KiB0eXBlIG9mICJcJz1cJyIuXG5cblRoZSAqcHJlY2lzaW9uKiBpcyBhIGRlY2ltYWwgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgZGlnaXRzIHNob3VsZFxuYmUgZGlzcGxheWVkIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlXG5mb3JtYXR0ZWQgd2l0aCAiXCdmXCciIGFuZCAiXCdGXCciLCBvciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50XG5mb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3JtYXR0ZWQgd2l0aCAiXCdnXCciIG9yICJcJ0dcJyIuICBGb3Igbm9uLVxubnVtYmVyIHR5cGVzIHRoZSBmaWVsZCBpbmRpY2F0ZXMgdGhlIG1heGltdW0gZmllbGQgc2l6ZSAtIGluIG90aGVyXG53b3JkcywgaG93IG1hbnkgY2hhcmFjdGVycyB3aWxsIGJlIHVzZWQgZnJvbSB0aGUgZmllbGQgY29udGVudC4gVGhlXG4qcHJlY2lzaW9uKiBpcyBub3QgYWxsb3dlZCBmb3IgaW50ZWdlciB2YWx1ZXMuXG5cbkZpbmFsbHksIHRoZSAqdHlwZSogZGV0ZXJtaW5lcyBob3cgdGhlIGRhdGEgc2hvdWxkIGJlIHByZXNlbnRlZC5cblxuVGhlIGF2YWlsYWJsZSBzdHJpbmcgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCdzXCciICAgICB8IFN0cmluZyBmb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdHlwZSBmb3Igc3RyaW5ncyBhbmQgICAgfFxuICAgfCAgICAgICAgICAgfCBtYXkgYmUgb21pdHRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzICJcJ3NcJyIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYXZhaWxhYmxlIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCdiXCciICAgICB8IEJpbmFyeSBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDIuICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnY1wnIiAgICAgfCBDaGFyYWN0ZXIuIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIHRoZSBjb3JyZXNwb25kaW5nICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgdW5pY29kZSBjaGFyYWN0ZXIgYmVmb3JlIHByaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdkXCciICAgICB8IERlY2ltYWwgSW50ZWdlci4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTAuICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnb1wnIiAgICAgfCBPY3RhbCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDguICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ3hcJyIgICAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIGxvd2VyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnWFwnIiAgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgdXBwZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCduXCciICAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyAiXCdkXCciLCBleGNlcHQgdGhhdCBpdCB1c2VzIHRoZSB8XG4gICB8ICAgICAgICAgICB8IGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgICAgfFxuICAgfCAgICAgICAgICAgfCBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzICJcJ2RcJyIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5JbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgcHJlc2VudGF0aW9uIHR5cGVzLCBpbnRlZ2VycyBjYW4gYmUgZm9ybWF0dGVkXG53aXRoIHRoZSBmbG9hdGluZyBwb2ludCBwcmVzZW50YXRpb24gdHlwZXMgbGlzdGVkIGJlbG93IChleGNlcHQgIlwnblwnIlxuYW5kIE5vbmUpLiBXaGVuIGRvaW5nIHNvLCAiZmxvYXQoKSIgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBpbnRlZ2VyIHRvXG5hIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZWZvcmUgZm9ybWF0dGluZy5cblxuVGhlIGF2YWlsYWJsZSBwcmVzZW50YXRpb24gdHlwZXMgZm9yIGZsb2F0aW5nIHBvaW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ2VcJyIgICAgIHwgRXhwb25lbnQgbm90YXRpb24uIFByaW50cyB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG5vdGF0aW9uIHVzaW5nIHRoZSBsZXR0ZXIgXCdlXCcgdG8gaW5kaWNhdGUgdGhlIGV4cG9uZW50LiAgICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyAiNiIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnRVwnIiAgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyAiXCdlXCciIGV4Y2VwdCBpdCB1c2VzIGFuIHVwcGVyICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIFwnRVwnIGFzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnZlwnIiAgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzICI2Ii4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdGXCciICAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzICJcJ2ZcJyIsIGJ1dCBjb252ZXJ0cyAibmFuIiB0byAiTkFOIiAgICB8XG4gICB8ICAgICAgICAgICB8IGFuZCAiaW5mIiB0byAiSU5GIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnZ1wnIiAgICAgfCBHZW5lcmFsIGZvcm1hdC4gIEZvciBhIGdpdmVuIHByZWNpc2lvbiAicCA+PSAxIiwgdGhpcyAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcm91bmRzIHRoZSBudW1iZXIgdG8gInAiIHNpZ25pZmljYW50IGRpZ2l0cyBhbmQgdGhlbiAgICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHMgdGhlIHJlc3VsdCBpbiBlaXRoZXIgZml4ZWQtcG9pbnQgZm9ybWF0IG9yIGluICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzY2llbnRpZmljIG5vdGF0aW9uLCBkZXBlbmRpbmcgb24gaXRzIG1hZ25pdHVkZS4gIFRoZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzZSBydWxlcyBhcmUgYXMgZm9sbG93czogc3VwcG9zZSB0aGF0IHRoZSByZXN1bHQgICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlICJcJ2VcJyIgYW5kIHByZWNpc2lvbiAicC0xIiB8XG4gICB8ICAgICAgICAgICB8IHdvdWxkIGhhdmUgZXhwb25lbnQgImV4cCIuICBUaGVuIGlmICItNCA8PSBleHAgPCBwIiwgdGhlICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgIlwnZlwnIiBhbmQgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNpb24gInAtMS1leHAiLiAgT3RoZXJ3aXNlLCB0aGUgbnVtYmVyIGlzIGZvcm1hdHRlZCAgIHxcbiAgIHwgICAgICAgICAgIHwgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAiXCdlXCciIGFuZCBwcmVjaXNpb24gInAtMSIuIEluIGJvdGggIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZXMgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSAgICB8XG4gICB8ICAgICAgICAgICB8IHNpZ25pZmljYW5kLCBhbmQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgYWxzbyByZW1vdmVkIGlmICAgICAgfFxuICAgfCAgICAgICAgICAgfCB0aGVyZSBhcmUgbm8gcmVtYWluaW5nIGRpZ2l0cyBmb2xsb3dpbmcgaXQuICBQb3NpdGl2ZSBhbmQgIHxcbiAgIHwgICAgICAgICAgIHwgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB6ZXJvLCBhbmQgbmFucywgICB8XG4gICB8ICAgICAgICAgICB8IGFyZSBmb3JtYXR0ZWQgYXMgImluZiIsICItaW5mIiwgIjAiLCAiLTAiIGFuZCAibmFuIiAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCByZXNwZWN0aXZlbHksIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZWNpc2lvbi4gIEEgcHJlY2lzaW9uIG9mIHxcbiAgIHwgICAgICAgICAgIHwgIjAiIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCB0byBhIHByZWNpc2lvbiBvZiAiMSIuIFRoZSAgICB8XG4gICB8ICAgICAgICAgICB8IGRlZmF1bHQgcHJlY2lzaW9uIGlzICI2Ii4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnR1wnIiAgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyAiXCdnXCciIGV4Y2VwdCBzd2l0Y2hlcyB0byAiXCdFXCciIGlmICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBudW1iZXIgZ2V0cyB0b28gbGFyZ2UuIFRoZSByZXByZXNlbnRhdGlvbnMgb2YgaW5maW5pdHkgfFxuICAgfCAgICAgICAgICAgfCBhbmQgTmFOIGFyZSB1cHBlcmNhc2VkLCB0b28uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ25cJyIgICAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzICJcJ2dcJyIsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgdGhlIHxcbiAgIHwgICAgICAgICAgIHwgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlIG51bWJlciAgICB8XG4gICB8ICAgICAgICAgICB8IHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnJVwnIiAgICAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyBpbiAgIHxcbiAgIHwgICAgICAgICAgIHwgZml4ZWQgKCJcJ2ZcJyIpIGZvcm1hdCwgZm9sbG93ZWQgYnkgYSBwZXJjZW50IHNpZ24uICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFNpbWlsYXIgdG8gIlwnZ1wnIiwgZXhjZXB0IHRoYXQgZml4ZWQtcG9pbnQgbm90YXRpb24sIHdoZW4gICB8XG4gICB8ICAgICAgICAgICB8IHVzZWQsIGhhcyBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCB0aGUgZGVjaW1hbCBwb2ludC4gVGhlICAgfFxuICAgfCAgICAgICAgICAgfCBkZWZhdWx0IHByZWNpc2lvbiBpcyBhcyBoaWdoIGFzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlICAgIHxcbiAgIHwgICAgICAgICAgIHwgcGFydGljdWxhciB2YWx1ZS4gVGhlIG92ZXJhbGwgZWZmZWN0IGlzIHRvIG1hdGNoIHRoZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG91dHB1dCBvZiAic3RyKCkiIGFzIGFsdGVyZWQgYnkgdGhlIG90aGVyIGZvcm1hdCAgICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBtb2RpZmllcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblxuRm9ybWF0IGV4YW1wbGVzXG49PT09PT09PT09PT09PT1cblxuVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGV4YW1wbGVzIG9mIHRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbmQgY29tcGFyaXNvblxud2l0aCB0aGUgb2xkICIlIi1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZCAiJSItZm9ybWF0dGluZyxcbndpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSAie30iIGFuZCB3aXRoICI6IiB1c2VkIGluc3RlYWQgb2YgIiUiLiBGb3JcbmV4YW1wbGUsICJcJyUwMy4yZlwnIiBjYW4gYmUgdHJhbnNsYXRlZCB0byAiXCd7OjAzLjJmfVwnIi5cblxuVGhlIG5ldyBmb3JtYXQgc3ludGF4IGFsc28gc3VwcG9ydHMgbmV3IGFuZCBkaWZmZXJlbnQgb3B0aW9ucywgc2hvd25cbmluIHRoZSBmb2xsb3cgZXhhbXBsZXMuXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgcG9zaXRpb246XG5cbiAgID4+PiBcJ3swfSwgezF9LCB7Mn1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7fSwge30sIHt9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpICAjIDMuMSsgb25seVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KCpcJ2FiY1wnKSAgICAgICMgdW5wYWNraW5nIGFyZ3VtZW50IHNlcXVlbmNlXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezB9ezF9ezB9XCcuZm9ybWF0KFwnYWJyYVwnLCBcJ2NhZFwnKSAgICMgYXJndW1lbnRzXCcgaW5kaWNlcyBjYW4gYmUgcmVwZWF0ZWRcbiAgIFwnYWJyYWNhZGFicmFcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IG5hbWU6XG5cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdChsYXRpdHVkZT1cJzM3LjI0TlwnLCBsb25naXR1ZGU9XCctMTE1LjgxV1wnKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG4gICA+Pj4gY29vcmQgPSB7XCdsYXRpdHVkZVwnOiBcJzM3LjI0TlwnLCBcJ2xvbmdpdHVkZVwnOiBcJy0xMTUuODFXXCd9XG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQoKipjb29yZClcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgYXR0cmlidXRlczpcblxuICAgPj4+IGMgPSAzLTVqXG4gICA+Pj4gKFwnVGhlIGNvbXBsZXggbnVtYmVyIHswfSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IHswLnJlYWx9IFwnXG4gICAuLi4gIFwnYW5kIHRoZSBpbWFnaW5hcnkgcGFydCB7MC5pbWFnfS5cJykuZm9ybWF0KGMpXG4gICBcJ1RoZSBjb21wbGV4IG51bWJlciAoMy01aikgaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCAzLjAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCAtNS4wLlwnXG4gICA+Pj4gY2xhc3MgUG9pbnQ6XG4gICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KTpcbiAgIC4uLiAgICAgICAgIHNlbGYueCwgc2VsZi55ID0geCwgeVxuICAgLi4uICAgICBkZWYgX19zdHJfXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ1BvaW50KHtzZWxmLnh9LCB7c2VsZi55fSlcJy5mb3JtYXQoc2VsZj1zZWxmKVxuICAgLi4uXG4gICA+Pj4gc3RyKFBvaW50KDQsIDIpKVxuICAgXCdQb2ludCg0LCAyKVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBpdGVtczpcblxuICAgPj4+IGNvb3JkID0gKDMsIDUpXG4gICA+Pj4gXCdYOiB7MFswXX07ICBZOiB7MFsxXX1cJy5mb3JtYXQoY29vcmQpXG4gICBcJ1g6IDM7ICBZOiA1XCdcblxuUmVwbGFjaW5nICIlcyIgYW5kICIlciI6XG5cbiAgID4+PiAicmVwcigpIHNob3dzIHF1b3RlczogeyFyfTsgc3RyKCkgZG9lc25cJ3Q6IHshc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezo8MzB9XCcuZm9ybWF0KFwnbGVmdCBhbGlnbmVkXCcpXG4gICBcJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7Oj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7Ol4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezoqXjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpICAjIHVzZSBcJypcJyBhcyBhIGZpbGwgY2hhclxuICAgXCcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKipcJ1xuXG5SZXBsYWNpbmcgIiUrZiIsICIlLWYiLCBhbmQgIiUgZiIgYW5kIHNwZWNpZnlpbmcgYSBzaWduOlxuXG4gICA+Pj4gXCd7OitmfTsgezorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6IGZ9OyB7OiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6LWZ9OyB7Oi1mfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzIFwnezpmfTsgezpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgIiV4IiBhbmQgIiVvIiBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50IGJhc2VzOlxuXG4gICA+Pj4gIyBmb3JtYXQgYWxzbyBzdXBwb3J0cyBiaW5hcnkgbnVtYmVyc1xuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDp4fTsgIG9jdDogezA6b307ICBiaW46IHswOmJ9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDJhOyAgb2N0OiA1MjsgIGJpbjogMTAxMDEwXCdcbiAgID4+PiAjIHdpdGggMHgsIDBvLCBvciAwYiBhcyBwcmVmaXg6XG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOiN4fTsgIG9jdDogezA6I299OyAgYmluOiB7MDojYn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMHgyYTsgIG9jdDogMG81MjsgIGJpbjogMGIxMDEwMTBcJ1xuXG5Vc2luZyB0aGUgY29tbWEgYXMgYSB0aG91c2FuZHMgc2VwYXJhdG9yOlxuXG4gICA+Pj4gXCd7Oix9XCcuZm9ybWF0KDEyMzQ1Njc4OTApXG4gICBcJzEsMjM0LDU2Nyw4OTBcJ1xuXG5FeHByZXNzaW5nIGEgcGVyY2VudGFnZTpcblxuICAgPj4+IHBvaW50cyA9IDE5XG4gICA+Pj4gdG90YWwgPSAyMlxuICAgPj4+IFwnQ29ycmVjdCBhbnN3ZXJzOiB7Oi4yJX1cJy5mb3JtYXQocG9pbnRzL3RvdGFsKVxuICAgXCdDb3JyZWN0IGFuc3dlcnM6IDg2LjM2JVwnXG5cblVzaW5nIHR5cGUtc3BlY2lmaWMgZm9ybWF0dGluZzpcblxuICAgPj4+IGltcG9ydCBkYXRldGltZVxuICAgPj4+IGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEwLCA3LCA0LCAxMiwgMTUsIDU4KVxuICAgPj4+IFwnezolWS0lbS0lZCAlSDolTTolU31cJy5mb3JtYXQoZClcbiAgIFwnMjAxMC0wNy0wNCAxMjoxNTo1OFwnXG5cbk5lc3RpbmcgYXJndW1lbnRzIGFuZCBtb3JlIGNvbXBsZXggZXhhbXBsZXM6XG5cbiAgID4+PiBmb3IgYWxpZ24sIHRleHQgaW4gemlwKFwnPF4+XCcsIFtcJ2xlZnRcJywgXCdjZW50ZXJcJywgXCdyaWdodFwnXSk6XG4gICAuLi4gICAgIFwnezA6e2ZpbGx9e2FsaWdufTE2fVwnLmZvcm1hdCh0ZXh0LCBmaWxsPWFsaWduLCBhbGlnbj1hbGlnbilcbiAgIC4uLlxuICAgXCdsZWZ0PDw8PDw8PDw8PDw8XCdcbiAgIFwnXl5eXl5jZW50ZXJeXl5eXlwnXG4gICBcJz4+Pj4+Pj4+Pj4+cmlnaHRcJ1xuICAgPj4+XG4gICA+Pj4gb2N0ZXRzID0gWzE5MiwgMTY4LCAwLCAxXVxuICAgPj4+IFwnezowMlh9ezowMlh9ezowMlh9ezowMlh9XCcuZm9ybWF0KCpvY3RldHMpXG4gICBcJ0MwQTgwMDAxXCdcbiAgID4+PiBpbnQoXywgMTYpXG4gICAzMjMyMjM1NTIxXG4gICA+Pj5cbiAgID4+PiB3aWR0aCA9IDVcbiAgID4+PiBmb3IgbnVtIGluIHJhbmdlKDUsMTIpOiAjZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFXG4gICAuLi4gICAgIGZvciBiYXNlIGluIFwnZFhvYlwnOlxuICAgLi4uICAgICAgICAgcHJpbnQoXCd7MDp7d2lkdGh9e2Jhc2V9fVwnLmZvcm1hdChudW0sIGJhc2U9YmFzZSwgd2lkdGg9d2lkdGgpLCBlbmQ9XCcgXCcpXG4gICAuLi4gICAgIHByaW50KClcbiAgIC4uLlxuICAgICAgIDUgICAgIDUgICAgIDUgICAxMDFcbiAgICAgICA2ICAgICA2ICAgICA2ICAgMTEwXG4gICAgICAgNyAgICAgNyAgICAgNyAgIDExMVxuICAgICAgIDggICAgIDggICAgMTAgIDEwMDBcbiAgICAgICA5ICAgICA5ICAgIDExICAxMDAxXG4gICAgICAxMCAgICAgQSAgICAxMiAgMTAxMFxuICAgICAgMTEgICAgIEIgICAgMTMgIDEwMTFcbicsCi0gJ2Z1bmN0aW9uJzogdSdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiAiPSJcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICIiKiIiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpc1xuaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB3aGVuIHRoZVxuZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXNcbmV2YWx1YXRlZCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLVxuY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnRcbnRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYVxubGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5XG5hcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuXG5UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2VcbiJOb25lIiBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iIippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmcgYW55XG5leGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmIHRoZVxuZm9ybSAiIioqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICIiKiIiIG9yICIiKmlkZW50aWZpZXIiIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiIjogZXhwcmVzc2lvbiIiIGZvbGxvd2luZ1xudGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uIGV2ZW4gdGhvc2Vcbm9mIHRoZSBmb3JtICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciIuICBGdW5jdGlvbnMgbWF5IGhhdmVcbiJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gIiItPiBleHByZXNzaW9uIiIgYWZ0ZXIgdGhlIHBhcmFtZXRlclxubGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gYW5kIGFyZVxuZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuICBBbm5vdGF0aW9ucyBtYXlcbmJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cblRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBhXG5mdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzIHZhbHVlcyBvZiBhXG5kaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlICJfX2Fubm90YXRpb25zX18iXG5hdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICIiZGVmIiIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiImRlZiIiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgIiJkZWYiIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG5cbiAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuJywKKyAnZm9ybWF0c3RyaW5ncyc6IHUnXG5Gb3JtYXQgU3RyaW5nIFN5bnRheFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBhbmQgdGhlICJGb3JtYXR0ZXIiIGNsYXNzIHNoYXJlIHRoZSBzYW1lXG5zeW50YXggZm9yIGZvcm1hdCBzdHJpbmdzIChhbHRob3VnaCBpbiB0aGUgY2FzZSBvZiAiRm9ybWF0dGVyIixcbnN1YmNsYXNzZXMgY2FuIGRlZmluZSB0aGVpciBvd24gZm9ybWF0IHN0cmluZyBzeW50YXgpLlxuXG5Gb3JtYXQgc3RyaW5ncyBjb250YWluICJyZXBsYWNlbWVudCBmaWVsZHMiIHN1cnJvdW5kZWQgYnkgY3VybHkgYnJhY2VzXG4ie30iLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG4ie3siIGFuZCAifX0iLlxuXG5UaGUgZ3JhbW1hciBmb3IgYSByZXBsYWNlbWVudCBmaWVsZCBpcyBhcyBmb2xsb3dzOlxuXG4gICAgICByZXBsYWNlbWVudF9maWVsZCA6Oj0gInsiIFtmaWVsZF9uYW1lXSBbIiEiIGNvbnZlcnNpb25dIFsiOiIgZm9ybWF0X3NwZWNdICJ9IlxuICAgICAgZmllbGRfbmFtZSAgICAgICAgOjo9IGFyZ19uYW1lICgiLiIgYXR0cmlidXRlX25hbWUgfCAiWyIgZWxlbWVudF9pbmRleCAiXSIpKlxuICAgICAgYXJnX25hbWUgICAgICAgICAgOjo9IFtpZGVudGlmaWVyIHwgaW50ZWdlcl1cbiAgICAgIGF0dHJpYnV0ZV9uYW1lICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICBlbGVtZW50X2luZGV4ICAgICA6Oj0gaW50ZWdlciB8IGluZGV4X3N0cmluZ1xuICAgICAgaW5kZXhfc3RyaW5nICAgICAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIl0iPiArXG4gICAgICBjb252ZXJzaW9uICAgICAgICA6Oj0gInIiIHwgInMiIHwgImEiXG4gICAgICBmb3JtYXRfc3BlYyAgICAgICA6Oj0gPGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uPlxuXG5JbiBsZXNzIGZvcm1hbCB0ZXJtcywgdGhlIHJlcGxhY2VtZW50IGZpZWxkIGNhbiBzdGFydCB3aXRoIGFcbipmaWVsZF9uYW1lKiB0aGF0IHNwZWNpZmllcyB0aGUgb2JqZWN0IHdob3NlIHZhbHVlIGlzIHRvIGJlIGZvcm1hdHRlZFxuYW5kIGluc2VydGVkIGludG8gdGhlIG91dHB1dCBpbnN0ZWFkIG9mIHRoZSByZXBsYWNlbWVudCBmaWVsZC4gVGhlXG4qZmllbGRfbmFtZSogaXMgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhICAqY29udmVyc2lvbiogZmllbGQsIHdoaWNoIGlzXG5wcmVjZWRlZCBieSBhbiBleGNsYW1hdGlvbiBwb2ludCAiXCchXCciLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYSBjb2xvbiAiXCc6XCciLiAgVGhlc2Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IGZvcm1hdCBmb3IgdGhlXG5yZXBsYWNlbWVudCB2YWx1ZS5cblxuU2VlIGFsc28gdGhlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBzZWN0aW9uLlxuXG5UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBhbiAqYXJnX25hbWUqIHRoYXQgaXMgZWl0aGVyIGFcbm51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbFxuYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmRcbmFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZSAwLCAxLCAyLFxuLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kIHRoZVxubnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5CZWNhdXNlICphcmdfbmFtZSogaXMgbm90IHF1b3RlLWRlbGltaXRlZCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvXG5zcGVjaWZ5IGFyYml0cmFyeSBkaWN0aW9uYXJ5IGtleXMgKGUuZy4sIHRoZSBzdHJpbmdzICJcJzEwXCciIG9yXG4iXCc6LV1cJyIpIHdpdGhpbiBhIGZvcm1hdCBzdHJpbmcuIFRoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieSBhbnlcbm51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm1cbiJcJy5uYW1lXCciIHNlbGVjdHMgdGhlIG5hbWVkIGF0dHJpYnV0ZSB1c2luZyAiZ2V0YXR0cigpIiwgd2hpbGUgYW5cbmV4cHJlc3Npb24gb2YgdGhlIGZvcm0gIlwnW2luZGV4XVwnIiBkb2VzIGFuIGluZGV4IGxvb2t1cCB1c2luZ1xuIl9fZ2V0aXRlbV9fKCkiLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZVxub21pdHRlZCwgc28gIlwne30ge31cJyIgaXMgZXF1aXZhbGVudCB0byAiXCd7MH0gezF9XCciLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0bHkgcmVmZXJlbmNlcyB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkZyb20ge30gdG8ge30iICAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAgIyBcJ3dlaWdodFwnIGF0dHJpYnV0ZSBvZiBmaXJzdCBwb3NpdGlvbmFsIGFyZ1xuICAgIlVuaXRzIGRlc3Ryb3llZDoge3BsYXllcnNbMF19IiAgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGUgIl9fZm9ybWF0X18oKSJcbm1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlcyBpdCBpcyBkZXNpcmFibGUgdG9cbmZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsIG92ZXJyaWRpbmcgaXRzIG93blxuZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG5jYWxsaW5nICJfX2Zvcm1hdF9fKCkiLCB0aGUgbm9ybWFsIGZvcm1hdHRpbmcgbG9naWMgaXMgYnlwYXNzZWQuXG5cblRocmVlIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6ICJcJyFzXCciIHdoaWNoIGNhbGxzXG4ic3RyKCkiIG9uIHRoZSB2YWx1ZSwgIlwnIXJcJyIgd2hpY2ggY2FsbHMgInJlcHIoKSIgYW5kICJcJyFhXCciIHdoaWNoXG5jYWxscyAiYXNjaWkoKSIuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiTW9yZSB7IWF9IiAgICAgICAgICAgICAgICAgICAgICAjIENhbGxzIGFzY2lpKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgbWF5IGNvbnRhaW4gYSBmaWVsZCBuYW1lLFxuY29udmVyc2lvbiBmbGFnIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbiwgYnV0IGRlZXBlciBuZXN0aW5nIGlzIG5vdFxuYWxsb3dlZC4gIFRoZSByZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmVcbnN1YnN0aXR1dGVkIGJlZm9yZSB0aGUgKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXNcbmFsbG93cyB0aGUgZm9ybWF0dGluZyBvZiBhIHZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiAiZm9ybWF0KCkiIGZ1bmN0aW9uLiAgRWFjaCBmb3JtYXR0YWJsZSB0eXBlIG1heSBkZWZpbmUgaG93XG50aGUgZm9ybWF0IHNwZWNpZmljYXRpb24gaXMgdG8gYmUgaW50ZXJwcmV0ZWQuXG5cbk1vc3QgYnVpbHQtaW4gdHlwZXMgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBmb3IgZm9ybWF0XG5zcGVjaWZpY2F0aW9ucywgYWx0aG91Z2ggc29tZSBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zIGFyZSBvbmx5XG5zdXBwb3J0ZWQgYnkgdGhlIG51bWVyaWMgdHlwZXMuXG5cbkEgZ2VuZXJhbCBjb252ZW50aW9uIGlzIHRoYXQgYW4gZW1wdHkgZm9ybWF0IHN0cmluZyAoIiIiIikgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCAic3RyKCkiIG9uIHRoZSB2YWx1ZS4gQSBub24tZW1wdHlcbmZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhbnkgY2hhcmFjdGVyPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cbklmIGEgdmFsaWQgKmFsaWduKiB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IGNhbiBiZSBwcmVjZWRlZCBieSBhICpmaWxsKlxuY2hhcmFjdGVyIHRoYXQgY2FuIGJlIGFueSBjaGFyYWN0ZXIgYW5kIGRlZmF1bHRzIHRvIGEgc3BhY2UgaWZcbm9taXR0ZWQuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgYSBsaXRlcmFsIGN1cmx5IGJyYWNlICgiInsiIiBvclxuIiJ9IiIpIGFzIHRoZSAqZmlsbCogY2hhcmFjdGVyIHdoZW4gdXNpbmcgdGhlICJzdHIuZm9ybWF0KCkiIG1ldGhvZC5cbkhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGluc2VydCBhIGN1cmx5IGJyYWNlIHdpdGggYSBuZXN0ZWRcbnJlcGxhY2VtZW50IGZpZWxkLiAgVGhpcyBsaW1pdGF0aW9uIGRvZXNuXCd0IGFmZmVjdCB0aGUgImZvcm1hdCgpIlxuZnVuY3Rpb24uXG5cblRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGFsaWdubWVudCBvcHRpb25zIGlzIGFzIGZvbGxvd3M6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnPFwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGxlZnQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG1vc3Qgb2JqZWN0cykuICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCc+XCciICAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgcmlnaHQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbnVtYmVycykuICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJz1cJyIgICAgIHwgRm9yY2VzIHRoZSBwYWRkaW5nIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgc2lnbiAoaWYgYW55KSAgICB8XG4gICB8ICAgICAgICAgICB8IGJ1dCBiZWZvcmUgdGhlIGRpZ2l0cy4gIFRoaXMgaXMgdXNlZCBmb3IgcHJpbnRpbmcgZmllbGRzICAgfFxuICAgfCAgICAgICAgICAgfCBpbiB0aGUgZm9ybSBcJyswMDAwMDAxMjBcJy4gVGhpcyBhbGlnbm1lbnQgb3B0aW9uIGlzIG9ubHkgICAgfFxuICAgfCAgICAgICAgICAgfCB2YWxpZCBmb3IgbnVtZXJpYyB0eXBlcy4gIEl0IGJlY29tZXMgdGhlIGRlZmF1bHQgd2hlbiBcJzBcJyAgfFxuICAgfCAgICAgICAgICAgfCBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgZmllbGQgd2lkdGguICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ15cJyIgICAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBjZW50ZXJlZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZSB0aGF0IHVubGVzcyBhIG1pbmltdW0gZmllbGQgd2lkdGggaXMgZGVmaW5lZCwgdGhlIGZpZWxkIHdpZHRoXG53aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBkYXRhIHRvIGZpbGwgaXQsIHNvIHRoYXQgdGhlXG5hbGlnbm1lbnQgb3B0aW9uIGhhcyBubyBtZWFuaW5nIGluIHRoaXMgY2FzZS5cblxuVGhlICpzaWduKiBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgbnVtYmVyIHR5cGVzLCBhbmQgY2FuIGJlIG9uZSBvZlxudGhlIGZvbGxvd2luZzpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCcrXCciICAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBmb3IgYm90aCBwb3NpdGl2ZSBhcyAgfFxuICAgfCAgICAgICAgICAgfCB3ZWxsIGFzIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJy1cJyIgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIG5lZ2F0aXZlICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMgKHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLiAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgc3BhY2UgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBsZWFkaW5nIHNwYWNlIHNob3VsZCBiZSB1c2VkIG9uIHBvc2l0aXZlICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMsIGFuZCBhIG1pbnVzIHNpZ24gb24gbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlICJcJyNcJyIgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgIlwnMGJcJyIsICJcJzBvXCciLCBvclxuIlwnMHhcJyIgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yICJcJ2dcJyIgYW5kICJcJ0dcJyJcbmNvbnZlcnNpb25zLCB0cmFpbGluZyB6ZXJvcyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUgcmVzdWx0LlxuXG5UaGUgIlwnLFwnIiBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzIHNlcGFyYXRvci5cbkZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgIlwnblwnIiBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlXG5pbnN0ZWFkLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBBZGRlZCB0aGUgIlwnLFwnIiBvcHRpb24gKHNlZSBhbHNvICoqUEVQIDM3OCoqKS5cblxuKndpZHRoKiBpcyBhIGRlY2ltYWwgaW50ZWdlciBkZWZpbmluZyB0aGUgbWluaW11bSBmaWVsZCB3aWR0aC4gIElmIG5vdFxuc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWVsZCB3aWR0aCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnQuXG5cbldoZW4gbm8gZXhwbGljaXQgYWxpZ25tZW50IGlzIGdpdmVuLCBwcmVjZWRpbmcgdGhlICp3aWR0aCogZmllbGQgYnkgYVxuemVybyAoIlwnMFwnIikgY2hhcmFjdGVyIGVuYWJsZXMgc2lnbi1hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWNcbnR5cGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgKmZpbGwqIGNoYXJhY3RlciBvZiAiXCcwXCciIHdpdGggYW5cbiphbGlnbm1lbnQqIHR5cGUgb2YgIlwnPVwnIi5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoICJcJ2ZcJyIgYW5kICJcJ0ZcJyIsIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcbmZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGZvcm1hdHRlZCB3aXRoICJcJ2dcJyIgb3IgIlwnR1wnIi4gIEZvciBub24tXG5udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW4gb3RoZXJcbndvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LiBUaGVcbipwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ3NcJyIgICAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICB8ICAgICAgICAgICB8IG1heSBiZSBvbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgIlwnc1wnIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ2JcJyIgICAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdjXCciICAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgfCAgICAgICAgICAgfCB1bmljb2RlIGNoYXJhY3RlciBiZWZvcmUgcHJpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2RcJyIgICAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdvXCciICAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwneFwnIiAgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdYXCciICAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ25cJyIgICAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzICJcJ2RcJyIsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgdGhlIHxcbiAgIHwgICAgICAgICAgIHwgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlIG51bWJlciAgICB8XG4gICB8ICAgICAgICAgICB8IHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgIlwnZFwnIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdCAiXCduXCciXG5hbmQgTm9uZSkuIFdoZW4gZG9pbmcgc28sICJmbG9hdCgpIiBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVnZXIgdG9cbmEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJlZm9yZSBmb3JtYXR0aW5nLlxuXG5UaGUgYXZhaWxhYmxlIHByZXNlbnRhdGlvbiB0eXBlcyBmb3IgZmxvYXRpbmcgcG9pbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG5hcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnZVwnIiAgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gUHJpbnRzIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbm90YXRpb24gdXNpbmcgdGhlIGxldHRlciBcJ2VcJyB0byBpbmRpY2F0ZSB0aGUgZXhwb25lbnQuICAgIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzICI2Ii4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdFXCciICAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBTYW1lIGFzICJcJ2VcJyIgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgXCdFXCcgYXMgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdmXCciICAgICB8IEZpeGVkIHBvaW50LiBEaXNwbGF5cyB0aGUgbnVtYmVyIGFzIGEgZml4ZWQtcG9pbnQgbnVtYmVyLiAgfFxuICAgfCAgICAgICAgICAgfCBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgIjYiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ0ZcJyIgICAgIHwgRml4ZWQgcG9pbnQuIFNhbWUgYXMgIlwnZlwnIiwgYnV0IGNvbnZlcnRzICJuYW4iIHRvICJOQU4iICAgIHxcbiAgIHwgICAgICAgICAgIHwgYW5kICJpbmYiIHRvICJJTkYiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdnXCciICAgICB8IEdlbmVyYWwgZm9ybWF0LiAgRm9yIGEgZ2l2ZW4gcHJlY2lzaW9uICJwID49IDEiLCB0aGlzICAgICAgfFxuICAgfCAgICAgICAgICAgfCByb3VuZHMgdGhlIG51bWJlciB0byAicCIgc2lnbmlmaWNhbnQgZGlnaXRzIGFuZCB0aGVuICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0cyB0aGUgcmVzdWx0IGluIGVpdGhlciBmaXhlZC1wb2ludCBmb3JtYXQgb3IgaW4gICAgICB8XG4gICB8ICAgICAgICAgICB8IHNjaWVudGlmaWMgbm90YXRpb24sIGRlcGVuZGluZyBvbiBpdHMgbWFnbml0dWRlLiAgVGhlICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNlIHJ1bGVzIGFyZSBhcyBmb2xsb3dzOiBzdXBwb3NlIHRoYXQgdGhlIHJlc3VsdCAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgIlwnZVwnIiBhbmQgcHJlY2lzaW9uICJwLTEiIHxcbiAgIHwgICAgICAgICAgIHwgd291bGQgaGF2ZSBleHBvbmVudCAiZXhwIi4gIFRoZW4gaWYgIi00IDw9IGV4cCA8IHAiLCB0aGUgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAiXCdmXCciIGFuZCAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2lvbiAicC0xLWV4cCIuICBPdGhlcndpc2UsIHRoZSBudW1iZXIgaXMgZm9ybWF0dGVkICAgfFxuICAgfCAgICAgICAgICAgfCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlICJcJ2VcJyIgYW5kIHByZWNpc2lvbiAicC0xIi4gSW4gYm90aCAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIGFyZSByZW1vdmVkIGZyb20gdGhlICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyBhbHNvIHJlbW92ZWQgaWYgICAgICB8XG4gICB8ICAgICAgICAgICB8IHRoZXJlIGFyZSBubyByZW1haW5pbmcgZGlnaXRzIGZvbGxvd2luZyBpdC4gIFBvc2l0aXZlIGFuZCAgfFxuICAgfCAgICAgICAgICAgfCBuZWdhdGl2ZSBpbmZpbml0eSwgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHplcm8sIGFuZCBuYW5zLCAgIHxcbiAgIHwgICAgICAgICAgIHwgYXJlIGZvcm1hdHRlZCBhcyAiaW5mIiwgIi1pbmYiLCAiMCIsICItMCIgYW5kICJuYW4iICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHJlc3BlY3RpdmVseSwgcmVnYXJkbGVzcyBvZiB0aGUgcHJlY2lzaW9uLiAgQSBwcmVjaXNpb24gb2YgfFxuICAgfCAgICAgICAgICAgfCAiMCIgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50IHRvIGEgcHJlY2lzaW9uIG9mICIxIi4gVGhlICAgIHxcbiAgIHwgICAgICAgICAgIHwgZGVmYXVsdCBwcmVjaXNpb24gaXMgIjYiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdHXCciICAgICB8IEdlbmVyYWwgZm9ybWF0LiBTYW1lIGFzICJcJ2dcJyIgZXhjZXB0IHN3aXRjaGVzIHRvICJcJ0VcJyIgaWYgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIG51bWJlciBnZXRzIHRvbyBsYXJnZS4gVGhlIHJlcHJlc2VudGF0aW9ucyBvZiBpbmZpbml0eSB8XG4gICB8ICAgICAgICAgICB8IGFuZCBOYU4gYXJlIHVwcGVyY2FzZWQsIHRvby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnblwnIiAgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgIlwnZ1wnIiwgZXhjZXB0IHRoYXQgaXQgdXNlcyB0aGUgfFxuICAgfCAgICAgICAgICAgfCBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCclXCciICAgICB8IFBlcmNlbnRhZ2UuIE11bHRpcGxpZXMgdGhlIG51bWJlciBieSAxMDAgYW5kIGRpc3BsYXlzIGluICAgfFxuICAgfCAgICAgICAgICAgfCBmaXhlZCAoIlwnZlwnIikgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgU2ltaWxhciB0byAiXCdnXCciLCBleGNlcHQgdGhhdCBmaXhlZC1wb2ludCBub3RhdGlvbiwgd2hlbiAgIHxcbiAgIHwgICAgICAgICAgIHwgdXNlZCwgaGFzIGF0IGxlYXN0IG9uZSBkaWdpdCBwYXN0IHRoZSBkZWNpbWFsIHBvaW50LiBUaGUgICB8XG4gICB8ICAgICAgICAgICB8IGRlZmF1bHQgcHJlY2lzaW9uIGlzIGFzIGhpZ2ggYXMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgICAgfFxuICAgfCAgICAgICAgICAgfCBwYXJ0aWN1bGFyIHZhbHVlLiBUaGUgb3ZlcmFsbCBlZmZlY3QgaXMgdG8gbWF0Y2ggdGhlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgb3V0cHV0IG9mICJzdHIoKSIgYXMgYWx0ZXJlZCBieSB0aGUgb3RoZXIgZm9ybWF0ICAgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuXG5Gb3JtYXQgZXhhbXBsZXNcbj09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZXMgb2YgdGhlICJzdHIuZm9ybWF0KCkiIHN5bnRheCBhbmRcbmNvbXBhcmlzb24gd2l0aCB0aGUgb2xkICIlIi1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZCAiJSItZm9ybWF0dGluZyxcbndpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSAie30iIGFuZCB3aXRoICI6IiB1c2VkIGluc3RlYWQgb2YgIiUiLiBGb3JcbmV4YW1wbGUsICJcJyUwMy4yZlwnIiBjYW4gYmUgdHJhbnNsYXRlZCB0byAiXCd7OjAzLjJmfVwnIi5cblxuVGhlIG5ldyBmb3JtYXQgc3ludGF4IGFsc28gc3VwcG9ydHMgbmV3IGFuZCBkaWZmZXJlbnQgb3B0aW9ucywgc2hvd25cbmluIHRoZSBmb2xsb3cgZXhhbXBsZXMuXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgcG9zaXRpb246XG5cbiAgID4+PiBcJ3swfSwgezF9LCB7Mn1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7fSwge30sIHt9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpICAjIDMuMSsgb25seVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KCpcJ2FiY1wnKSAgICAgICMgdW5wYWNraW5nIGFyZ3VtZW50IHNlcXVlbmNlXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezB9ezF9ezB9XCcuZm9ybWF0KFwnYWJyYVwnLCBcJ2NhZFwnKSAgICMgYXJndW1lbnRzXCcgaW5kaWNlcyBjYW4gYmUgcmVwZWF0ZWRcbiAgIFwnYWJyYWNhZGFicmFcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IG5hbWU6XG5cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdChsYXRpdHVkZT1cJzM3LjI0TlwnLCBsb25naXR1ZGU9XCctMTE1LjgxV1wnKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG4gICA+Pj4gY29vcmQgPSB7XCdsYXRpdHVkZVwnOiBcJzM3LjI0TlwnLCBcJ2xvbmdpdHVkZVwnOiBcJy0xMTUuODFXXCd9XG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQoKipjb29yZClcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgYXR0cmlidXRlczpcblxuICAgPj4+IGMgPSAzLTVqXG4gICA+Pj4gKFwnVGhlIGNvbXBsZXggbnVtYmVyIHswfSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IHswLnJlYWx9IFwnXG4gICAuLi4gIFwnYW5kIHRoZSBpbWFnaW5hcnkgcGFydCB7MC5pbWFnfS5cJykuZm9ybWF0KGMpXG4gICBcJ1RoZSBjb21wbGV4IG51bWJlciAoMy01aikgaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCAzLjAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCAtNS4wLlwnXG4gICA+Pj4gY2xhc3MgUG9pbnQ6XG4gICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KTpcbiAgIC4uLiAgICAgICAgIHNlbGYueCwgc2VsZi55ID0geCwgeVxuICAgLi4uICAgICBkZWYgX19zdHJfXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ1BvaW50KHtzZWxmLnh9LCB7c2VsZi55fSlcJy5mb3JtYXQoc2VsZj1zZWxmKVxuICAgLi4uXG4gICA+Pj4gc3RyKFBvaW50KDQsIDIpKVxuICAgXCdQb2ludCg0LCAyKVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBpdGVtczpcblxuICAgPj4+IGNvb3JkID0gKDMsIDUpXG4gICA+Pj4gXCdYOiB7MFswXX07ICBZOiB7MFsxXX1cJy5mb3JtYXQoY29vcmQpXG4gICBcJ1g6IDM7ICBZOiA1XCdcblxuUmVwbGFjaW5nICIlcyIgYW5kICIlciI6XG5cbiAgID4+PiAicmVwcigpIHNob3dzIHF1b3RlczogeyFyfTsgc3RyKCkgZG9lc25cJ3Q6IHshc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezo8MzB9XCcuZm9ybWF0KFwnbGVmdCBhbGlnbmVkXCcpXG4gICBcJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7Oj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7Ol4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezoqXjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpICAjIHVzZSBcJypcJyBhcyBhIGZpbGwgY2hhclxuICAgXCcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKipcJ1xuXG5SZXBsYWNpbmcgIiUrZiIsICIlLWYiLCBhbmQgIiUgZiIgYW5kIHNwZWNpZnlpbmcgYSBzaWduOlxuXG4gICA+Pj4gXCd7OitmfTsgezorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6IGZ9OyB7OiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6LWZ9OyB7Oi1mfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzIFwnezpmfTsgezpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgIiV4IiBhbmQgIiVvIiBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50IGJhc2VzOlxuXG4gICA+Pj4gIyBmb3JtYXQgYWxzbyBzdXBwb3J0cyBiaW5hcnkgbnVtYmVyc1xuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDp4fTsgIG9jdDogezA6b307ICBiaW46IHswOmJ9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDJhOyAgb2N0OiA1MjsgIGJpbjogMTAxMDEwXCdcbiAgID4+PiAjIHdpdGggMHgsIDBvLCBvciAwYiBhcyBwcmVmaXg6XG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOiN4fTsgIG9jdDogezA6I299OyAgYmluOiB7MDojYn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMHgyYTsgIG9jdDogMG81MjsgIGJpbjogMGIxMDEwMTBcJ1xuXG5Vc2luZyB0aGUgY29tbWEgYXMgYSB0aG91c2FuZHMgc2VwYXJhdG9yOlxuXG4gICA+Pj4gXCd7Oix9XCcuZm9ybWF0KDEyMzQ1Njc4OTApXG4gICBcJzEsMjM0LDU2Nyw4OTBcJ1xuXG5FeHByZXNzaW5nIGEgcGVyY2VudGFnZTpcblxuICAgPj4+IHBvaW50cyA9IDE5XG4gICA+Pj4gdG90YWwgPSAyMlxuICAgPj4+IFwnQ29ycmVjdCBhbnN3ZXJzOiB7Oi4yJX1cJy5mb3JtYXQocG9pbnRzL3RvdGFsKVxuICAgXCdDb3JyZWN0IGFuc3dlcnM6IDg2LjM2JVwnXG5cblVzaW5nIHR5cGUtc3BlY2lmaWMgZm9ybWF0dGluZzpcblxuICAgPj4+IGltcG9ydCBkYXRldGltZVxuICAgPj4+IGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEwLCA3LCA0LCAxMiwgMTUsIDU4KVxuICAgPj4+IFwnezolWS0lbS0lZCAlSDolTTolU31cJy5mb3JtYXQoZClcbiAgIFwnMjAxMC0wNy0wNCAxMjoxNTo1OFwnXG5cbk5lc3RpbmcgYXJndW1lbnRzIGFuZCBtb3JlIGNvbXBsZXggZXhhbXBsZXM6XG5cbiAgID4+PiBmb3IgYWxpZ24sIHRleHQgaW4gemlwKFwnPF4+XCcsIFtcJ2xlZnRcJywgXCdjZW50ZXJcJywgXCdyaWdodFwnXSk6XG4gICAuLi4gICAgIFwnezA6e2ZpbGx9e2FsaWdufTE2fVwnLmZvcm1hdCh0ZXh0LCBmaWxsPWFsaWduLCBhbGlnbj1hbGlnbilcbiAgIC4uLlxuICAgXCdsZWZ0PDw8PDw8PDw8PDw8XCdcbiAgIFwnXl5eXl5jZW50ZXJeXl5eXlwnXG4gICBcJz4+Pj4+Pj4+Pj4+cmlnaHRcJ1xuICAgPj4+XG4gICA+Pj4gb2N0ZXRzID0gWzE5MiwgMTY4LCAwLCAxXVxuICAgPj4+IFwnezowMlh9ezowMlh9ezowMlh9ezowMlh9XCcuZm9ybWF0KCpvY3RldHMpXG4gICBcJ0MwQTgwMDAxXCdcbiAgID4+PiBpbnQoXywgMTYpXG4gICAzMjMyMjM1NTIxXG4gICA+Pj5cbiAgID4+PiB3aWR0aCA9IDVcbiAgID4+PiBmb3IgbnVtIGluIHJhbmdlKDUsMTIpOiAjZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFXG4gICAuLi4gICAgIGZvciBiYXNlIGluIFwnZFhvYlwnOlxuICAgLi4uICAgICAgICAgcHJpbnQoXCd7MDp7d2lkdGh9e2Jhc2V9fVwnLmZvcm1hdChudW0sIGJhc2U9YmFzZSwgd2lkdGg9d2lkdGgpLCBlbmQ9XCcgXCcpXG4gICAuLi4gICAgIHByaW50KClcbiAgIC4uLlxuICAgICAgIDUgICAgIDUgICAgIDUgICAxMDFcbiAgICAgICA2ICAgICA2ICAgICA2ICAgMTEwXG4gICAgICAgNyAgICAgNyAgICAgNyAgIDExMVxuICAgICAgIDggICAgIDggICAgMTAgIDEwMDBcbiAgICAgICA5ICAgICA5ICAgIDExICAxMDAxXG4gICAgICAxMCAgICAgQSAgICAxMiAgMTAxMFxuICAgICAgMTEgICAgIEIgICAgMTMgIDEwMTFcbicsCisgJ2Z1bmN0aW9uJzogdSdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICB8ICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqICI9IlxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgIiIqIiIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzXG5pcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdoZW4gdGhlXG5mdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpc1xuZXZhbHVhdGVkIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtXG5jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudFxudG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhXG5saXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnlcbmFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC5cblRoaXMgaXMgZ2VuZXJhbGx5IG5vdCB3aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIHVzZVxuIk5vbmUiIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGVcbmZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiIiKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZyBhbnlcbmV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWYgdGhlXG5mb3JtICIiKippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgIiIqIiIgb3IgIiIqaWRlbnRpZmllciIiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICIiOiBleHByZXNzaW9uIiIgZm9sbG93aW5nXG50aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb24gZXZlbiB0aG9zZVxub2YgdGhlIGZvcm0gIippZGVudGlmaWVyIiBvciAiKippZGVudGlmaWVyIi4gIEZ1bmN0aW9ucyBtYXkgaGF2ZVxuInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiIi0+IGV4cHJlc3Npb24iIiBhZnRlciB0aGUgcGFyYW1ldGVyXG5saXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiBhbmQgYXJlXG5ldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4gIEFubm90YXRpb25zIG1heVxuYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLlxuVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFcbmZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXMgdmFsdWVzIG9mIGFcbmRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGUgIl9fYW5ub3RhdGlvbnNfXyJcbmF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgIiJkZWYiIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICIiZGVmIiIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiImRlZiIiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcblxuICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAogICdnbG9iYWwnOiB1J1xuVGhlICJnbG9iYWwiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGlzIGEgZGVjbGFyYXRpb24gd2hpY2ggaG9sZHMgZm9yIHRoZSBlbnRpcmVcbmN1cnJlbnQgY29kZSBibG9jay4gIEl0IG1lYW5zIHRoYXQgdGhlIGxpc3RlZCBpZGVudGlmaWVycyBhcmUgdG8gYmVcbmludGVycHJldGVkIGFzIGdsb2JhbHMuICBJdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFzc2lnbiB0byBhIGdsb2JhbFxudmFyaWFibGUgd2l0aG91dCAiZ2xvYmFsIiwgYWx0aG91Z2ggZnJlZSB2YXJpYWJsZXMgbWF5IHJlZmVyIHRvXG5nbG9iYWxzIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgZ2xvYmFsLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBjb2RlXG5ibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgImdsb2JhbCIgc3RhdGVtZW50LlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgZGVmaW5lZCBhcyBmb3JtYWxcbnBhcmFtZXRlcnMgb3IgaW4gYSAiZm9yIiBsb29wIGNvbnRyb2wgdGFyZ2V0LCAiY2xhc3MiIGRlZmluaXRpb24sXG5mdW5jdGlvbiBkZWZpbml0aW9uLCBvciAiaW1wb3J0IiBzdGF0ZW1lbnQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RcbmVuZm9yY2UgdGhlIHR3byByZXN0cmljdGlvbnMsIGJ1dCBwcm9ncmFtcyBzaG91bGQgbm90IGFidXNlIHRoaXNcbmZyZWVkb20sIGFzIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGVuZm9yY2UgdGhlbSBvciBzaWxlbnRseSBjaGFuZ2VcbnRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiB0aGUgImdsb2JhbCIgaXMgYSBkaXJlY3RpdmUgdG8gdGhlIHBhcnNlci4gIEl0XG5hcHBsaWVzIG9ubHkgdG8gY29kZSBwYXJzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgImdsb2JhbCJcbnN0YXRlbWVudC4gSW4gcGFydGljdWxhciwgYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgY29udGFpbmVkIGluIGEgc3RyaW5nXG5vciBjb2RlIG9iamVjdCBzdXBwbGllZCB0byB0aGUgYnVpbHQtaW4gImV4ZWMoKSIgZnVuY3Rpb24gZG9lcyBub3RcbmFmZmVjdCB0aGUgY29kZSBibG9jayAqY29udGFpbmluZyogdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBjb2RlXG5jb250YWluZWQgaW4gc3VjaCBhIHN0cmluZyBpcyB1bmFmZmVjdGVkIGJ5ICJnbG9iYWwiIHN0YXRlbWVudHMgaW4gdGhlXG5jb2RlIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uIGNhbGwuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSAiZXZhbCgpIlxuYW5kICJjb21waWxlKCkiIGZ1bmN0aW9ucy5cbicsCiAgJ2lkLWNsYXNzZXMnOiB1J1xuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG4iXyoiXG4gICBOb3QgaW1wb3J0ZWQgYnkgImZyb20gbW9kdWxlIGltcG9ydCAqIi4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXIgIl8iXG4gICBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZVxuICAgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlICJidWlsdGlucyIgbW9kdWxlLiAgV2hlbiBub3RcbiAgIGluIGludGVyYWN0aXZlIG1vZGUsICJfIiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3QgZGVmaW5lZC5cbiAgIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lICJfIiBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdldHRleHQiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbiJfXypfXyJcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mICJfXypfXyIgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXMgbm90XG4gICBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZSB3aXRob3V0XG4gICB3YXJuaW5nLlxuXG4iX18qIlxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCi0gJ2lkZW50aWZpZXJzJzogdSdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9ucy5cblxuVGhlIHN5bnRheCBvZiBpZGVudGlmaWVycyBpbiBQeXRob24gaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgc3RhbmRhcmRcbmFubmV4IFVBWC0zMSwgd2l0aCBlbGFib3JhdGlvbiBhbmQgY2hhbmdlcyBhcyBkZWZpbmVkIGJlbG93OyBzZWUgYWxzb1xuKipQRVAgMzEzMSoqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5cbldpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKFUrMDAwMS4uVSswMDdGKSwgdGhlIHZhbGlkIGNoYXJhY3RlcnMgZm9yXG5pZGVudGlmaWVycyBhcmUgdGhlIHNhbWUgYXMgaW4gUHl0aG9uIDIueDogdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlXG5sZXR0ZXJzICJBIiB0aHJvdWdoICJaIiwgdGhlIHVuZGVyc2NvcmUgIl8iIGFuZCwgZXhjZXB0IGZvciB0aGUgZmlyc3RcbmNoYXJhY3RlciwgdGhlIGRpZ2l0cyAiMCIgdGhyb3VnaCAiOSIuXG5cblB5dGhvbiAzLjAgaW50cm9kdWNlcyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZnJvbSBvdXRzaWRlIHRoZSBBU0NJSVxucmFuZ2UgKHNlZSAqKlBFUCAzMTMxKiopLiAgRm9yIHRoZXNlIGNoYXJhY3RlcnMsIHRoZSBjbGFzc2lmaWNhdGlvblxudXNlcyB0aGUgdmVyc2lvbiBvZiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgYXMgaW5jbHVkZWQgaW4gdGhlXG4idW5pY29kZWRhdGEiIG1vZHVsZS5cblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG4gICBpZGVudGlmaWVyICAgOjo9IHhpZF9zdGFydCB4aWRfY29udGludWUqXG4gICBpZF9zdGFydCAgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBnZW5lcmFsIGNhdGVnb3JpZXMgTHUsIExsLCBMdCwgTG0sIExvLCBObCwgdGhlIHVuZGVyc2NvcmUsIGFuZCBjaGFyYWN0ZXJzIHdpdGggdGhlIE90aGVyX0lEX1N0YXJ0IHByb3BlcnR5PlxuICAgaWRfY29udGludWUgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQsIHBsdXMgY2hhcmFjdGVycyBpbiB0aGUgY2F0ZWdvcmllcyBNbiwgTWMsIE5kLCBQYyBhbmQgb3RoZXJzIHdpdGggdGhlIE90aGVyX0lEX0NvbnRpbnVlIHByb3BlcnR5PlxuICAgeGlkX3N0YXJ0ICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9zdGFydCB4aWRfY29udGludWUqIj5cbiAgIHhpZF9jb250aW51ZSA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX2NvbnRpbnVlIHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfY29udGludWUqIj5cblxuVGhlIFVuaWNvZGUgY2F0ZWdvcnkgY29kZXMgbWVudGlvbmVkIGFib3ZlIHN0YW5kIGZvcjpcblxuKiAqTHUqIC0gdXBwZXJjYXNlIGxldHRlcnNcblxuKiAqTGwqIC0gbG93ZXJjYXNlIGxldHRlcnNcblxuKiAqTHQqIC0gdGl0bGVjYXNlIGxldHRlcnNcblxuKiAqTG0qIC0gbW9kaWZpZXIgbGV0dGVyc1xuXG4qICpMbyogLSBvdGhlciBsZXR0ZXJzXG5cbiogKk5sKiAtIGxldHRlciBudW1iZXJzXG5cbiogKk1uKiAtIG5vbnNwYWNpbmcgbWFya3NcblxuKiAqTWMqIC0gc3BhY2luZyBjb21iaW5pbmcgbWFya3NcblxuKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzXG5cbiogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnNcblxuKiAqT3RoZXJfSURfU3RhcnQqIC0gZXhwbGljaXQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIFByb3BMaXN0LnR4dCB0b1xuICBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlXG5cbkFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZztcbmNvbXBhcmlzb24gb2YgaWRlbnRpZmllcnMgaXMgYmFzZWQgb24gTkZLQy5cblxuQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yXG5Vbmljb2RlIDQuMSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5kY2wuaHBpLnVuaS1cbnBvdHNkYW0uZGUvaG9tZS9sb2V3aXMvdGFibGUtMzEzMS5odG1sLlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgRmFsc2UgICAgICBjbGFzcyAgICAgIGZpbmFsbHkgICAgaXMgICAgICAgICByZXR1cm5cbiAgIE5vbmUgICAgICAgY29udGludWUgICBmb3IgICAgICAgIGxhbWJkYSAgICAgdHJ5XG4gICBUcnVlICAgICAgIGRlZiAgICAgICAgZnJvbSAgICAgICBub25sb2NhbCAgIHdoaWxlXG4gICBhbmQgICAgICAgIGRlbCAgICAgICAgZ2xvYmFsICAgICBub3QgICAgICAgIHdpdGhcbiAgIGFzICAgICAgICAgZWxpZiAgICAgICBpZiAgICAgICAgIG9yICAgICAgICAgeWllbGRcbiAgIGFzc2VydCAgICAgZWxzZSAgICAgICBpbXBvcnQgICAgIHBhc3NcbiAgIGJyZWFrICAgICAgZXhjZXB0ICAgICBpbiAgICAgICAgIHJhaXNlXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG4iXyoiXG4gICBOb3QgaW1wb3J0ZWQgYnkgImZyb20gbW9kdWxlIGltcG9ydCAqIi4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXIgIl8iXG4gICBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZVxuICAgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlICJidWlsdGlucyIgbW9kdWxlLiAgV2hlbiBub3RcbiAgIGluIGludGVyYWN0aXZlIG1vZGUsICJfIiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3QgZGVmaW5lZC5cbiAgIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lICJfIiBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdldHRleHQiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbiJfXypfXyJcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mICJfXypfXyIgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXMgbm90XG4gICBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZSB3aXRob3V0XG4gICB3YXJuaW5nLlxuXG4iX18qIlxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCisgJ2lkZW50aWZpZXJzJzogdSdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9ucy5cblxuVGhlIHN5bnRheCBvZiBpZGVudGlmaWVycyBpbiBQeXRob24gaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgc3RhbmRhcmRcbmFubmV4IFVBWC0zMSwgd2l0aCBlbGFib3JhdGlvbiBhbmQgY2hhbmdlcyBhcyBkZWZpbmVkIGJlbG93OyBzZWUgYWxzb1xuKipQRVAgMzEzMSoqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5cbldpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKFUrMDAwMS4uVSswMDdGKSwgdGhlIHZhbGlkIGNoYXJhY3RlcnMgZm9yXG5pZGVudGlmaWVycyBhcmUgdGhlIHNhbWUgYXMgaW4gUHl0aG9uIDIueDogdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlXG5sZXR0ZXJzICJBIiB0aHJvdWdoICJaIiwgdGhlIHVuZGVyc2NvcmUgIl8iIGFuZCwgZXhjZXB0IGZvciB0aGUgZmlyc3RcbmNoYXJhY3RlciwgdGhlIGRpZ2l0cyAiMCIgdGhyb3VnaCAiOSIuXG5cblB5dGhvbiAzLjAgaW50cm9kdWNlcyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZnJvbSBvdXRzaWRlIHRoZSBBU0NJSVxucmFuZ2UgKHNlZSAqKlBFUCAzMTMxKiopLiAgRm9yIHRoZXNlIGNoYXJhY3RlcnMsIHRoZSBjbGFzc2lmaWNhdGlvblxudXNlcyB0aGUgdmVyc2lvbiBvZiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgYXMgaW5jbHVkZWQgaW4gdGhlXG4idW5pY29kZWRhdGEiIG1vZHVsZS5cblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG4gICBpZGVudGlmaWVyICAgOjo9IHhpZF9zdGFydCB4aWRfY29udGludWUqXG4gICBpZF9zdGFydCAgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBnZW5lcmFsIGNhdGVnb3JpZXMgTHUsIExsLCBMdCwgTG0sIExvLCBObCwgdGhlIHVuZGVyc2NvcmUsIGFuZCBjaGFyYWN0ZXJzIHdpdGggdGhlIE90aGVyX0lEX1N0YXJ0IHByb3BlcnR5PlxuICAgaWRfY29udGludWUgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQsIHBsdXMgY2hhcmFjdGVycyBpbiB0aGUgY2F0ZWdvcmllcyBNbiwgTWMsIE5kLCBQYyBhbmQgb3RoZXJzIHdpdGggdGhlIE90aGVyX0lEX0NvbnRpbnVlIHByb3BlcnR5PlxuICAgeGlkX3N0YXJ0ICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9zdGFydCB4aWRfY29udGludWUqIj5cbiAgIHhpZF9jb250aW51ZSA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX2NvbnRpbnVlIHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfY29udGludWUqIj5cblxuVGhlIFVuaWNvZGUgY2F0ZWdvcnkgY29kZXMgbWVudGlvbmVkIGFib3ZlIHN0YW5kIGZvcjpcblxuKiAqTHUqIC0gdXBwZXJjYXNlIGxldHRlcnNcblxuKiAqTGwqIC0gbG93ZXJjYXNlIGxldHRlcnNcblxuKiAqTHQqIC0gdGl0bGVjYXNlIGxldHRlcnNcblxuKiAqTG0qIC0gbW9kaWZpZXIgbGV0dGVyc1xuXG4qICpMbyogLSBvdGhlciBsZXR0ZXJzXG5cbiogKk5sKiAtIGxldHRlciBudW1iZXJzXG5cbiogKk1uKiAtIG5vbnNwYWNpbmcgbWFya3NcblxuKiAqTWMqIC0gc3BhY2luZyBjb21iaW5pbmcgbWFya3NcblxuKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzXG5cbiogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnNcblxuKiAqT3RoZXJfSURfU3RhcnQqIC0gZXhwbGljaXQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIFByb3BMaXN0LnR4dCB0b1xuICBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlXG5cbkFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZztcbmNvbXBhcmlzb24gb2YgaWRlbnRpZmllcnMgaXMgYmFzZWQgb24gTkZLQy5cblxuQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yXG5Vbmljb2RlIDQuMSBjYW4gYmUgZm91bmQgYXQgaHR0cHM6Ly93d3cuZGNsLmhwaS51bmktXG5wb3RzZGFtLmRlL2hvbWUvbG9ld2lzL3RhYmxlLTMxMzEuaHRtbC5cblxuXG5LZXl3b3Jkc1xuPT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBpZGVudGlmaWVycyBhcmUgdXNlZCBhcyByZXNlcnZlZCB3b3Jkcywgb3IgKmtleXdvcmRzKiBvZlxudGhlIGxhbmd1YWdlLCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgb3JkaW5hcnkgaWRlbnRpZmllcnMuICBUaGV5IG11c3RcbmJlIHNwZWxsZWQgZXhhY3RseSBhcyB3cml0dGVuIGhlcmU6XG5cbiAgIEZhbHNlICAgICAgY2xhc3MgICAgICBmaW5hbGx5ICAgIGlzICAgICAgICAgcmV0dXJuXG4gICBOb25lICAgICAgIGNvbnRpbnVlICAgZm9yICAgICAgICBsYW1iZGEgICAgIHRyeVxuICAgVHJ1ZSAgICAgICBkZWYgICAgICAgIGZyb20gICAgICAgbm9ubG9jYWwgICB3aGlsZVxuICAgYW5kICAgICAgICBkZWwgICAgICAgIGdsb2JhbCAgICAgbm90ICAgICAgICB3aXRoXG4gICBhcyAgICAgICAgIGVsaWYgICAgICAgaWYgICAgICAgICBvciAgICAgICAgIHlpZWxkXG4gICBhc3NlcnQgICAgIGVsc2UgICAgICAgaW1wb3J0ICAgICBwYXNzXG4gICBicmVhayAgICAgIGV4Y2VwdCAgICAgaW4gICAgICAgICByYWlzZVxuXG5cblJlc2VydmVkIGNsYXNzZXMgb2YgaWRlbnRpZmllcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQ2VydGFpbiBjbGFzc2VzIG9mIGlkZW50aWZpZXJzIChiZXNpZGVzIGtleXdvcmRzKSBoYXZlIHNwZWNpYWxcbm1lYW5pbmdzLiAgVGhlc2UgY2xhc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgcGF0dGVybnMgb2YgbGVhZGluZyBhbmRcbnRyYWlsaW5nIHVuZGVyc2NvcmUgY2hhcmFjdGVyczpcblxuIl8qIlxuICAgTm90IGltcG9ydGVkIGJ5ICJmcm9tIG1vZHVsZSBpbXBvcnQgKiIuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyICJfIlxuICAgaXMgdXNlZCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGVcbiAgIGxhc3QgZXZhbHVhdGlvbjsgaXQgaXMgc3RvcmVkIGluIHRoZSAiYnVpbHRpbnMiIG1vZHVsZS4gIFdoZW4gbm90XG4gICBpbiBpbnRlcmFjdGl2ZSBtb2RlLCAiXyIgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXMgbm90IGRlZmluZWQuXG4gICBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSAiXyIgaXMgb2Z0ZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gICAgIGludGVybmF0aW9uYWxpemF0aW9uOyByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgICJnZXR0ZXh0IiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG4iX18qX18iXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpLiAgQ3VycmVudFxuICAgc3lzdGVtIG5hbWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlICpTcGVjaWFsIG1ldGhvZCBuYW1lcyogc2VjdGlvblxuICAgYW5kIGVsc2V3aGVyZS4gIE1vcmUgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2ZcbiAgIFB5dGhvbi4gICpBbnkqIHVzZSBvZiAiX18qX18iIG5hbWVzLCBpbiBhbnkgY29udGV4dCwgdGhhdCBkb2VzIG5vdFxuICAgZm9sbG93IGV4cGxpY2l0bHkgZG9jdW1lbnRlZCB1c2UsIGlzIHN1YmplY3QgdG8gYnJlYWthZ2Ugd2l0aG91dFxuICAgd2FybmluZy5cblxuIl9fKiJcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAogICdpZic6IHUnXG5UaGUgImlmIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgImlmIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSAiaWYiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG4nLAogICdpbWFnaW5hcnknOiB1J1xuSW1hZ2luYXJ5IGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKipcblxuSW1hZ2luYXJ5IGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBpbWFnbnVtYmVyIDo6PSAoZmxvYXRudW1iZXIgfCBpbnRwYXJ0KSAoImoiIHwgIkoiKVxuXG5BbiBpbWFnaW5hcnkgbGl0ZXJhbCB5aWVsZHMgYSBjb21wbGV4IG51bWJlciB3aXRoIGEgcmVhbCBwYXJ0IG9mIDAuMC5cbkNvbXBsZXggbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgYXMgYSBwYWlyIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnNcbmFuZCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBvbiB0aGVpciByYW5nZS4gIFRvIGNyZWF0ZSBhIGNvbXBsZXhcbm51bWJlciB3aXRoIGEgbm9uemVybyByZWFsIHBhcnQsIGFkZCBhIGZsb2F0aW5nIHBvaW50IG51bWJlciB0byBpdCxcbmUuZy4sICIoMys0aikiLiAgU29tZSBleGFtcGxlcyBvZiBpbWFnaW5hcnkgbGl0ZXJhbHM6XG5cbiAgIDMuMTRqICAgMTAuaiAgICAxMGogICAgIC4wMDFqICAgMWUxMDBqICAzLjE0ZS0xMGpcbicsCi0gJ2ltcG9ydCc6IHUnXG5UaGUgImltcG9ydCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGltcG9ydF9zdG10ICAgICA6Oj0gImltcG9ydCIgbW9kdWxlIFsiYXMiIG5hbWVdICggIiwiIG1vZHVsZSBbImFzIiBuYW1lXSApKlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIHJlbGF0aXZlX21vZHVsZSAiaW1wb3J0IiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIHJlbGF0aXZlX21vZHVsZSAiaW1wb3J0IiAiKCIgaWRlbnRpZmllciBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICggIiwiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV0gKSogWyIsIl0gIikiXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgbW9kdWxlICJpbXBvcnQiICIqIlxuICAgbW9kdWxlICAgICAgICAgIDo6PSAoaWRlbnRpZmllciAiLiIpKiBpZGVudGlmaWVyXG4gICByZWxhdGl2ZV9tb2R1bGUgOjo9ICIuIiogbW9kdWxlIHwgIi4iK1xuICAgbmFtZSAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG5cblRoZSBiYXNpYyBpbXBvcnQgc3RhdGVtZW50IChubyAiZnJvbSIgY2xhdXNlKSBpcyBleGVjdXRlZCBpbiB0d29cbnN0ZXBzOlxuXG4xLiBmaW5kIGEgbW9kdWxlLCBsb2FkaW5nIGFuZCBpbml0aWFsaXppbmcgaXQgaWYgbmVjZXNzYXJ5XG5cbjIuIGRlZmluZSBhIG5hbWUgb3IgbmFtZXMgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIHNjb3BlXG4gICB3aGVyZSB0aGUgImltcG9ydCIgc3RhdGVtZW50IG9jY3Vycy5cblxuV2hlbiB0aGUgc3RhdGVtZW50IGNvbnRhaW5zIG11bHRpcGxlIGNsYXVzZXMgKHNlcGFyYXRlZCBieSBjb21tYXMpIHRoZVxudHdvIHN0ZXBzIGFyZSBjYXJyaWVkIG91dCBzZXBhcmF0ZWx5IGZvciBlYWNoIGNsYXVzZSwganVzdCBhcyB0aG91Z2hcbnRoZSBjbGF1c2VzIGhhZCBiZWVuIHNlcGFyYXRlZCBvdXQgaW50byBpbmRpdmlkaXVhbCBpbXBvcnQgc3RhdGVtZW50cy5cblxuVGhlIGRldGFpbHMgb2YgdGhlIGZpcnN0IHN0ZXAsIGZpbmRpbmcgYW5kIGxvYWRpbmcgbW9kdWxlcyBhcmVcbmRlc2NyaWJlZCBpbiBncmVhdGVyIGRldGFpbCBpbiB0aGUgc2VjdGlvbiBvbiB0aGUgKmltcG9ydCBzeXN0ZW0qLFxud2hpY2ggYWxzbyBkZXNjcmliZXMgdGhlIHZhcmlvdXMgdHlwZXMgb2YgcGFja2FnZXMgYW5kIG1vZHVsZXMgdGhhdFxuY2FuIGJlIGltcG9ydGVkLCBhcyB3ZWxsIGFzIGFsbCB0aGUgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0b1xuY3VzdG9taXplIHRoZSBpbXBvcnQgc3lzdGVtLiBOb3RlIHRoYXQgZmFpbHVyZXMgaW4gdGhpcyBzdGVwIG1heVxuaW5kaWNhdGUgZWl0aGVyIHRoYXQgdGhlIG1vZHVsZSBjb3VsZCBub3QgYmUgbG9jYXRlZCwgKm9yKiB0aGF0IGFuXG5lcnJvciBvY2N1cnJlZCB3aGlsZSBpbml0aWFsaXppbmcgdGhlIG1vZHVsZSwgd2hpY2ggaW5jbHVkZXMgZXhlY3V0aW9uXG5vZiB0aGUgbW9kdWxlXCdzIGNvZGUuXG5cbklmIHRoZSByZXF1ZXN0ZWQgbW9kdWxlIGlzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHksIGl0IHdpbGwgYmUgbWFkZVxuYXZhaWxhYmxlIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgaW4gb25lIG9mIHRocmVlIHdheXM6XG5cbiogSWYgdGhlIG1vZHVsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5ICJhcyIsIHRoZW4gdGhlIG5hbWUgZm9sbG93aW5nXG4gICJhcyIgaXMgYm91bmQgZGlyZWN0bHkgdG8gdGhlIGltcG9ydGVkIG1vZHVsZS5cblxuKiBJZiBubyBvdGhlciBuYW1lIGlzIHNwZWNpZmllZCwgYW5kIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQgaXMgYVxuICB0b3AgbGV2ZWwgbW9kdWxlLCB0aGUgbW9kdWxlXCdzIG5hbWUgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZVxuICBhcyBhIHJlZmVyZW5jZSB0byB0aGUgaW1wb3J0ZWQgbW9kdWxlXG5cbiogSWYgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCBpcyAqbm90KiBhIHRvcCBsZXZlbCBtb2R1bGUsIHRoZW4gdGhlXG4gIG5hbWUgb2YgdGhlIHRvcCBsZXZlbCBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIG1vZHVsZSBpcyBib3VuZCBpblxuICB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AgbGV2ZWwgcGFja2FnZS4gVGhlXG4gIGltcG9ydGVkIG1vZHVsZSBtdXN0IGJlIGFjY2Vzc2VkIHVzaW5nIGl0cyBmdWxsIHF1YWxpZmllZCBuYW1lXG4gIHJhdGhlciB0aGFuIGRpcmVjdGx5XG5cblRoZSAiZnJvbSIgZm9ybSB1c2VzIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHByb2Nlc3M6XG5cbjEuIGZpbmQgdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gdGhlICJmcm9tIiBjbGF1c2UsIGxvYWRpbmcgYW5kXG4gICBpbml0aWFsaXppbmcgaXQgaWYgbmVjZXNzYXJ5O1xuXG4yLiBmb3IgZWFjaCBvZiB0aGUgaWRlbnRpZmllcnMgc3BlY2lmaWVkIGluIHRoZSAiaW1wb3J0IiBjbGF1c2VzOlxuXG4gICAxLiBjaGVjayBpZiB0aGUgaW1wb3J0ZWQgbW9kdWxlIGhhcyBhbiBhdHRyaWJ1dGUgYnkgdGhhdCBuYW1lXG5cbiAgIDIuIGlmIG5vdCwgYXR0ZW1wdCB0byBpbXBvcnQgYSBzdWJtb2R1bGUgd2l0aCB0aGF0IG5hbWUgYW5kIHRoZW5cbiAgICAgIGNoZWNrIHRoZSBpbXBvcnRlZCBtb2R1bGUgYWdhaW4gZm9yIHRoYXQgYXR0cmlidXRlXG5cbiAgIDMuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kLCAiSW1wb3J0RXJyb3IiIGlzIHJhaXNlZC5cblxuICAgNC4gb3RoZXJ3aXNlLCBhIHJlZmVyZW5jZSB0byB0aGF0IHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgbG9jYWxcbiAgICAgIG5hbWVzcGFjZSwgdXNpbmcgdGhlIG5hbWUgaW4gdGhlICJhcyIgY2xhdXNlIGlmIGl0IGlzIHByZXNlbnQsXG4gICAgICBvdGhlcndpc2UgdXNpbmcgdGhlIGF0dHJpYnV0ZSBuYW1lXG5cbkV4YW1wbGVzOlxuXG4gICBpbXBvcnQgZm9vICAgICAgICAgICAgICAgICAjIGZvbyBpbXBvcnRlZCBhbmQgYm91bmQgbG9jYWxseVxuICAgaW1wb3J0IGZvby5iYXIuYmF6ICAgICAgICAgIyBmb28uYmFyLmJheiBpbXBvcnRlZCwgZm9vIGJvdW5kIGxvY2FsbHlcbiAgIGltcG9ydCBmb28uYmFyLmJheiBhcyBmYmIgICMgZm9vLmJhci5iYXogaW1wb3J0ZWQgYW5kIGJvdW5kIGFzIGZiYlxuICAgZnJvbSBmb28uYmFyIGltcG9ydCBiYXogICAgIyBmb28uYmFyLmJheiBpbXBvcnRlZCBhbmQgYm91bmQgYXMgYmF6XG4gICBmcm9tIGZvbyBpbXBvcnQgYXR0ciAgICAgICAjIGZvbyBpbXBvcnRlZCBhbmQgZm9vLmF0dHIgYm91bmQgYXMgYXR0clxuXG5JZiB0aGUgbGlzdCBvZiBpZGVudGlmaWVycyBpcyByZXBsYWNlZCBieSBhIHN0YXIgKCJcJypcJyIpLCBhbGwgcHVibGljXG5uYW1lcyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgYXJlIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZVxuc2NvcGUgd2hlcmUgdGhlICJpbXBvcnQiIHN0YXRlbWVudCBvY2N1cnMuXG5cblRoZSAqcHVibGljIG5hbWVzKiBkZWZpbmVkIGJ5IGEgbW9kdWxlIGFyZSBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nIHRoZVxubW9kdWxlXCdzIG5hbWVzcGFjZSBmb3IgYSB2YXJpYWJsZSBuYW1lZCAiX19hbGxfXyI7IGlmIGRlZmluZWQsIGl0IG11c3RcbmJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyB3aGljaCBhcmUgbmFtZXMgZGVmaW5lZCBvciBpbXBvcnRlZCBieSB0aGF0XG5tb2R1bGUuICBUaGUgbmFtZXMgZ2l2ZW4gaW4gIl9fYWxsX18iIGFyZSBhbGwgY29uc2lkZXJlZCBwdWJsaWMgYW5kXG5hcmUgcmVxdWlyZWQgdG8gZXhpc3QuICBJZiAiX19hbGxfXyIgaXMgbm90IGRlZmluZWQsIHRoZSBzZXQgb2YgcHVibGljXG5uYW1lcyBpbmNsdWRlcyBhbGwgbmFtZXMgZm91bmQgaW4gdGhlIG1vZHVsZVwncyBuYW1lc3BhY2Ugd2hpY2ggZG8gbm90XG5iZWdpbiB3aXRoIGFuIHVuZGVyc2NvcmUgY2hhcmFjdGVyICgiXCdfXCciKS4gICJfX2FsbF9fIiBzaG91bGQgY29udGFpblxudGhlIGVudGlyZSBwdWJsaWMgQVBJLiBJdCBpcyBpbnRlbmRlZCB0byBhdm9pZCBhY2NpZGVudGFsbHkgZXhwb3J0aW5nXG5pdGVtcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgQVBJIChzdWNoIGFzIGxpYnJhcnkgbW9kdWxlcyB3aGljaCB3ZXJlXG5pbXBvcnRlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSkuXG5cblRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tICJmcm9tIG1vZHVsZSBpbXBvcnQgKiIgLS0tIGlzIG9ubHlcbmFsbG93ZWQgYXQgdGhlIG1vZHVsZSBsZXZlbC4gIEF0dGVtcHRpbmcgdG8gdXNlIGl0IGluIGNsYXNzIG9yXG5mdW5jdGlvbiBkZWZpbml0aW9ucyB3aWxsIHJhaXNlIGEgIlN5bnRheEVycm9yIi5cblxuV2hlbiBzcGVjaWZ5aW5nIHdoYXQgbW9kdWxlIHRvIGltcG9ydCB5b3UgZG8gbm90IGhhdmUgdG8gc3BlY2lmeSB0aGVcbmFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZS4gV2hlbiBhIG1vZHVsZSBvciBwYWNrYWdlIGlzIGNvbnRhaW5lZFxud2l0aGluIGFub3RoZXIgcGFja2FnZSBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGEgcmVsYXRpdmUgaW1wb3J0IHdpdGhpblxudGhlIHNhbWUgdG9wIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gbWVudGlvbiB0aGUgcGFja2FnZSBuYW1lLiBCeVxudXNpbmcgbGVhZGluZyBkb3RzIGluIHRoZSBzcGVjaWZpZWQgbW9kdWxlIG9yIHBhY2thZ2UgYWZ0ZXIgImZyb20iIHlvdVxuY2FuIHNwZWNpZnkgaG93IGhpZ2ggdG8gdHJhdmVyc2UgdXAgdGhlIGN1cnJlbnQgcGFja2FnZSBoaWVyYXJjaHlcbndpdGhvdXQgc3BlY2lmeWluZyBleGFjdCBuYW1lcy4gT25lIGxlYWRpbmcgZG90IG1lYW5zIHRoZSBjdXJyZW50XG5wYWNrYWdlIHdoZXJlIHRoZSBtb2R1bGUgbWFraW5nIHRoZSBpbXBvcnQgZXhpc3RzLiBUd28gZG90cyBtZWFucyB1cFxub25lIHBhY2thZ2UgbGV2ZWwuIFRocmVlIGRvdHMgaXMgdXAgdHdvIGxldmVscywgZXRjLiBTbyBpZiB5b3UgZXhlY3V0ZVxuImZyb20gLiBpbXBvcnQgbW9kIiBmcm9tIGEgbW9kdWxlIGluIHRoZSAicGtnIiBwYWNrYWdlIHRoZW4geW91IHdpbGxcbmVuZCB1cCBpbXBvcnRpbmcgInBrZy5tb2QiLiBJZiB5b3UgZXhlY3V0ZSAiZnJvbSAuLnN1YnBrZzIgaW1wb3J0IG1vZCJcbmZyb20gd2l0aGluICJwa2cuc3VicGtnMSIgeW91IHdpbGwgaW1wb3J0ICJwa2cuc3VicGtnMi5tb2QiLiBUaGVcbnNwZWNpZmljYXRpb24gZm9yIHJlbGF0aXZlIGltcG9ydHMgaXMgY29udGFpbmVkIHdpdGhpbiAqKlBFUCAzMjgqKi5cblxuImltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkiIGlzIHByb3ZpZGVkIHRvIHN1cHBvcnQgYXBwbGljYXRpb25zIHRoYXRcbmRldGVybWluZSBkeW5hbWljYWxseSB0aGUgbW9kdWxlcyB0byBiZSBsb2FkZWQuXG5cblxuRnV0dXJlIHN0YXRlbWVudHNcbj09PT09PT09PT09PT09PT09XG5cbkEgKmZ1dHVyZSBzdGF0ZW1lbnQqIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBjb21waWxlciB0aGF0IGEgcGFydGljdWxhclxubW9kdWxlIHNob3VsZCBiZSBjb21waWxlZCB1c2luZyBzeW50YXggb3Igc2VtYW50aWNzIHRoYXQgd2lsbCBiZVxuYXZhaWxhYmxlIGluIGEgc3BlY2lmaWVkIGZ1dHVyZSByZWxlYXNlIG9mIFB5dGhvbiB3aGVyZSB0aGUgZmVhdHVyZVxuYmVjb21lcyBzdGFuZGFyZC5cblxuVGhlIGZ1dHVyZSBzdGF0ZW1lbnQgaXMgaW50ZW5kZWQgdG8gZWFzZSBtaWdyYXRpb24gdG8gZnV0dXJlIHZlcnNpb25zXG5vZiBQeXRob24gdGhhdCBpbnRyb2R1Y2UgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIGxhbmd1YWdlLiAgSXRcbmFsbG93cyB1c2Ugb2YgdGhlIG5ldyBmZWF0dXJlcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMgYmVmb3JlIHRoZVxucmVsZWFzZSBpbiB3aGljaCB0aGUgZmVhdHVyZSBiZWNvbWVzIHN0YW5kYXJkLlxuXG4gICBmdXR1cmVfc3RhdGVtZW50IDo6PSAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgIigiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqIFsiLCJdICIpIlxuICAgZmVhdHVyZSAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgbmFtZSAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgbXVzdCBhcHBlYXIgbmVhciB0aGUgdG9wIG9mIHRoZSBtb2R1bGUuICBUaGUgb25seVxubGluZXMgdGhhdCBjYW4gYXBwZWFyIGJlZm9yZSBhIGZ1dHVyZSBzdGF0ZW1lbnQgYXJlOlxuXG4qIHRoZSBtb2R1bGUgZG9jc3RyaW5nIChpZiBhbnkpLFxuXG4qIGNvbW1lbnRzLFxuXG4qIGJsYW5rIGxpbmVzLCBhbmRcblxuKiBvdGhlciBmdXR1cmUgc3RhdGVtZW50cy5cblxuVGhlIGZlYXR1cmVzIHJlY29nbml6ZWQgYnkgUHl0aG9uIDMuMCBhcmUgImFic29sdXRlX2ltcG9ydCIsXG4iZGl2aXNpb24iLCAiZ2VuZXJhdG9ycyIsICJ1bmljb2RlX2xpdGVyYWxzIiwgInByaW50X2Z1bmN0aW9uIixcbiJuZXN0ZWRfc2NvcGVzIiBhbmQgIndpdGhfc3RhdGVtZW50Ii4gIFRoZXkgYXJlIGFsbCByZWR1bmRhbnQgYmVjYXVzZVxudGhleSBhcmUgYWx3YXlzIGVuYWJsZWQsIGFuZCBvbmx5IGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgaXMgcmVjb2duaXplZCBhbmQgdHJlYXRlZCBzcGVjaWFsbHkgYXQgY29tcGlsZVxudGltZTogQ2hhbmdlcyB0byB0aGUgc2VtYW50aWNzIG9mIGNvcmUgY29uc3RydWN0cyBhcmUgb2Z0ZW5cbmltcGxlbWVudGVkIGJ5IGdlbmVyYXRpbmcgZGlmZmVyZW50IGNvZGUuICBJdCBtYXkgZXZlbiBiZSB0aGUgY2FzZVxudGhhdCBhIG5ldyBmZWF0dXJlIGludHJvZHVjZXMgbmV3IGluY29tcGF0aWJsZSBzeW50YXggKHN1Y2ggYXMgYSBuZXdcbnJlc2VydmVkIHdvcmQpLCBpbiB3aGljaCBjYXNlIHRoZSBjb21waWxlciBtYXkgbmVlZCB0byBwYXJzZSB0aGVcbm1vZHVsZSBkaWZmZXJlbnRseS4gIFN1Y2ggZGVjaXNpb25zIGNhbm5vdCBiZSBwdXNoZWQgb2ZmIHVudGlsXG5ydW50aW1lLlxuXG5Gb3IgYW55IGdpdmVuIHJlbGVhc2UsIHRoZSBjb21waWxlciBrbm93cyB3aGljaCBmZWF0dXJlIG5hbWVzIGhhdmVcbmJlZW4gZGVmaW5lZCwgYW5kIHJhaXNlcyBhIGNvbXBpbGUtdGltZSBlcnJvciBpZiBhIGZ1dHVyZSBzdGF0ZW1lbnRcbmNvbnRhaW5zIGEgZmVhdHVyZSBub3Qga25vd24gdG8gaXQuXG5cblRoZSBkaXJlY3QgcnVudGltZSBzZW1hbnRpY3MgYXJlIHRoZSBzYW1lIGFzIGZvciBhbnkgaW1wb3J0IHN0YXRlbWVudDpcbnRoZXJlIGlzIGEgc3RhbmRhcmQgbW9kdWxlICJfX2Z1dHVyZV9fIiwgZGVzY3JpYmVkIGxhdGVyLCBhbmQgaXQgd2lsbFxuYmUgaW1wb3J0ZWQgaW4gdGhlIHVzdWFsIHdheSBhdCB0aGUgdGltZSB0aGUgZnV0dXJlIHN0YXRlbWVudCBpc1xuZXhlY3V0ZWQuXG5cblRoZSBpbnRlcmVzdGluZyBydW50aW1lIHNlbWFudGljcyBkZXBlbmQgb24gdGhlIHNwZWNpZmljIGZlYXR1cmVcbmVuYWJsZWQgYnkgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQuXG5cbk5vdGUgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHNwZWNpYWwgYWJvdXQgdGhlIHN0YXRlbWVudDpcblxuICAgaW1wb3J0IF9fZnV0dXJlX18gW2FzIG5hbWVdXG5cblRoYXQgaXMgbm90IGEgZnV0dXJlIHN0YXRlbWVudDsgaXRcJ3MgYW4gb3JkaW5hcnkgaW1wb3J0IHN0YXRlbWVudCB3aXRoXG5ubyBzcGVjaWFsIHNlbWFudGljcyBvciBzeW50YXggcmVzdHJpY3Rpb25zLlxuXG5Db2RlIGNvbXBpbGVkIGJ5IGNhbGxzIHRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImV4ZWMoKSIgYW5kXG4iY29tcGlsZSgpIiB0aGF0IG9jY3VyIGluIGEgbW9kdWxlICJNIiBjb250YWluaW5nIGEgZnV0dXJlIHN0YXRlbWVudFxud2lsbCwgYnkgZGVmYXVsdCwgdXNlIHRoZSBuZXcgc3ludGF4IG9yIHNlbWFudGljcyBhc3NvY2lhdGVkIHdpdGggdGhlXG5mdXR1cmUgc3RhdGVtZW50LiAgVGhpcyBjYW4gYmUgY29udHJvbGxlZCBieSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbiJjb21waWxlKCkiIC0tLSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiBmb3IgZGV0YWlscy5cblxuQSBmdXR1cmUgc3RhdGVtZW50IHR5cGVkIGF0IGFuIGludGVyYWN0aXZlIGludGVycHJldGVyIHByb21wdCB3aWxsXG50YWtlIGVmZmVjdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGludGVycHJldGVyIHNlc3Npb24uICBJZiBhblxuaW50ZXJwcmV0ZXIgaXMgc3RhcnRlZCB3aXRoIHRoZSAqLWkqIG9wdGlvbiwgaXMgcGFzc2VkIGEgc2NyaXB0IG5hbWVcbnRvIGV4ZWN1dGUsIGFuZCB0aGUgc2NyaXB0IGluY2x1ZGVzIGEgZnV0dXJlIHN0YXRlbWVudCwgaXQgd2lsbCBiZSBpblxuZWZmZWN0IGluIHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9uIHN0YXJ0ZWQgYWZ0ZXIgdGhlIHNjcmlwdCBpc1xuZXhlY3V0ZWQuXG5cblNlZSBhbHNvOiAqKlBFUCAyMzYqKiAtIEJhY2sgdG8gdGhlIF9fZnV0dXJlX19cblxuICAgICBUaGUgb3JpZ2luYWwgcHJvcG9zYWwgZm9yIHRoZSBfX2Z1dHVyZV9fIG1lY2hhbmlzbS5cbicsCisgJ2ltcG9ydCc6IHUnXG5UaGUgImltcG9ydCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGltcG9ydF9zdG10ICAgICA6Oj0gImltcG9ydCIgbW9kdWxlIFsiYXMiIG5hbWVdICggIiwiIG1vZHVsZSBbImFzIiBuYW1lXSApKlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIHJlbGF0aXZlX21vZHVsZSAiaW1wb3J0IiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIHJlbGF0aXZlX21vZHVsZSAiaW1wb3J0IiAiKCIgaWRlbnRpZmllciBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICggIiwiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV0gKSogWyIsIl0gIikiXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgbW9kdWxlICJpbXBvcnQiICIqIlxuICAgbW9kdWxlICAgICAgICAgIDo6PSAoaWRlbnRpZmllciAiLiIpKiBpZGVudGlmaWVyXG4gICByZWxhdGl2ZV9tb2R1bGUgOjo9ICIuIiogbW9kdWxlIHwgIi4iK1xuICAgbmFtZSAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG5cblRoZSBiYXNpYyBpbXBvcnQgc3RhdGVtZW50IChubyAiZnJvbSIgY2xhdXNlKSBpcyBleGVjdXRlZCBpbiB0d29cbnN0ZXBzOlxuXG4xLiBmaW5kIGEgbW9kdWxlLCBsb2FkaW5nIGFuZCBpbml0aWFsaXppbmcgaXQgaWYgbmVjZXNzYXJ5XG5cbjIuIGRlZmluZSBhIG5hbWUgb3IgbmFtZXMgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIHNjb3BlXG4gICB3aGVyZSB0aGUgImltcG9ydCIgc3RhdGVtZW50IG9jY3Vycy5cblxuV2hlbiB0aGUgc3RhdGVtZW50IGNvbnRhaW5zIG11bHRpcGxlIGNsYXVzZXMgKHNlcGFyYXRlZCBieSBjb21tYXMpIHRoZVxudHdvIHN0ZXBzIGFyZSBjYXJyaWVkIG91dCBzZXBhcmF0ZWx5IGZvciBlYWNoIGNsYXVzZSwganVzdCBhcyB0aG91Z2hcbnRoZSBjbGF1c2VzIGhhZCBiZWVuIHNlcGFyYXRlZCBvdXQgaW50byBpbmRpdmlkdWFsIGltcG9ydCBzdGF0ZW1lbnRzLlxuXG5UaGUgZGV0YWlscyBvZiB0aGUgZmlyc3Qgc3RlcCwgZmluZGluZyBhbmQgbG9hZGluZyBtb2R1bGVzIGFyZVxuZGVzY3JpYmVkIGluIGdyZWF0ZXIgZGV0YWlsIGluIHRoZSBzZWN0aW9uIG9uIHRoZSAqaW1wb3J0IHN5c3RlbSosXG53aGljaCBhbHNvIGRlc2NyaWJlcyB0aGUgdmFyaW91cyB0eXBlcyBvZiBwYWNrYWdlcyBhbmQgbW9kdWxlcyB0aGF0XG5jYW4gYmUgaW1wb3J0ZWQsIGFzIHdlbGwgYXMgYWxsIHRoZSBob29rcyB0aGF0IGNhbiBiZSB1c2VkIHRvXG5jdXN0b21pemUgdGhlIGltcG9ydCBzeXN0ZW0uIE5vdGUgdGhhdCBmYWlsdXJlcyBpbiB0aGlzIHN0ZXAgbWF5XG5pbmRpY2F0ZSBlaXRoZXIgdGhhdCB0aGUgbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2NhdGVkLCAqb3IqIHRoYXQgYW5cbmVycm9yIG9jY3VycmVkIHdoaWxlIGluaXRpYWxpemluZyB0aGUgbW9kdWxlLCB3aGljaCBpbmNsdWRlcyBleGVjdXRpb25cbm9mIHRoZSBtb2R1bGVcJ3MgY29kZS5cblxuSWYgdGhlIHJlcXVlc3RlZCBtb2R1bGUgaXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseSwgaXQgd2lsbCBiZSBtYWRlXG5hdmFpbGFibGUgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBpbiBvbmUgb2YgdGhyZWUgd2F5czpcblxuKiBJZiB0aGUgbW9kdWxlIG5hbWUgaXMgZm9sbG93ZWQgYnkgImFzIiwgdGhlbiB0aGUgbmFtZSBmb2xsb3dpbmdcbiAgImFzIiBpcyBib3VuZCBkaXJlY3RseSB0byB0aGUgaW1wb3J0ZWQgbW9kdWxlLlxuXG4qIElmIG5vIG90aGVyIG5hbWUgaXMgc3BlY2lmaWVkLCBhbmQgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCBpcyBhXG4gIHRvcCBsZXZlbCBtb2R1bGUsIHRoZSBtb2R1bGVcJ3MgbmFtZSBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlXG4gIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbXBvcnRlZCBtb2R1bGVcblxuKiBJZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzICpub3QqIGEgdG9wIGxldmVsIG1vZHVsZSwgdGhlbiB0aGVcbiAgbmFtZSBvZiB0aGUgdG9wIGxldmVsIHBhY2thZ2UgdGhhdCBjb250YWlucyB0aGUgbW9kdWxlIGlzIGJvdW5kIGluXG4gIHRoZSBsb2NhbCBuYW1lc3BhY2UgYXMgYSByZWZlcmVuY2UgdG8gdGhlIHRvcCBsZXZlbCBwYWNrYWdlLiBUaGVcbiAgaW1wb3J0ZWQgbW9kdWxlIG11c3QgYmUgYWNjZXNzZWQgdXNpbmcgaXRzIGZ1bGwgcXVhbGlmaWVkIG5hbWVcbiAgcmF0aGVyIHRoYW4gZGlyZWN0bHlcblxuVGhlICJmcm9tIiBmb3JtIHVzZXMgYSBzbGlnaHRseSBtb3JlIGNvbXBsZXggcHJvY2VzczpcblxuMS4gZmluZCB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiB0aGUgImZyb20iIGNsYXVzZSwgbG9hZGluZyBhbmRcbiAgIGluaXRpYWxpemluZyBpdCBpZiBuZWNlc3Nhcnk7XG5cbjIuIGZvciBlYWNoIG9mIHRoZSBpZGVudGlmaWVycyBzcGVjaWZpZWQgaW4gdGhlICJpbXBvcnQiIGNsYXVzZXM6XG5cbiAgIDEuIGNoZWNrIGlmIHRoZSBpbXBvcnRlZCBtb2R1bGUgaGFzIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWVcblxuICAgMi4gaWYgbm90LCBhdHRlbXB0IHRvIGltcG9ydCBhIHN1Ym1vZHVsZSB3aXRoIHRoYXQgbmFtZSBhbmQgdGhlblxuICAgICAgY2hlY2sgdGhlIGltcG9ydGVkIG1vZHVsZSBhZ2FpbiBmb3IgdGhhdCBhdHRyaWJ1dGVcblxuICAgMy4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQsICJJbXBvcnRFcnJvciIgaXMgcmFpc2VkLlxuXG4gICA0LiBvdGhlcndpc2UsIGEgcmVmZXJlbmNlIHRvIHRoYXQgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBsb2NhbFxuICAgICAgbmFtZXNwYWNlLCB1c2luZyB0aGUgbmFtZSBpbiB0aGUgImFzIiBjbGF1c2UgaWYgaXQgaXMgcHJlc2VudCxcbiAgICAgIG90aGVyd2lzZSB1c2luZyB0aGUgYXR0cmlidXRlIG5hbWVcblxuRXhhbXBsZXM6XG5cbiAgIGltcG9ydCBmb28gICAgICAgICAgICAgICAgICMgZm9vIGltcG9ydGVkIGFuZCBib3VuZCBsb2NhbGx5XG4gICBpbXBvcnQgZm9vLmJhci5iYXogICAgICAgICAjIGZvby5iYXIuYmF6IGltcG9ydGVkLCBmb28gYm91bmQgbG9jYWxseVxuICAgaW1wb3J0IGZvby5iYXIuYmF6IGFzIGZiYiAgIyBmb28uYmFyLmJheiBpbXBvcnRlZCBhbmQgYm91bmQgYXMgZmJiXG4gICBmcm9tIGZvby5iYXIgaW1wb3J0IGJheiAgICAjIGZvby5iYXIuYmF6IGltcG9ydGVkIGFuZCBib3VuZCBhcyBiYXpcbiAgIGZyb20gZm9vIGltcG9ydCBhdHRyICAgICAgICMgZm9vIGltcG9ydGVkIGFuZCBmb28uYXR0ciBib3VuZCBhcyBhdHRyXG5cbklmIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIGlzIHJlcGxhY2VkIGJ5IGEgc3RhciAoIlwnKlwnIiksIGFsbCBwdWJsaWNcbm5hbWVzIGRlZmluZWQgaW4gdGhlIG1vZHVsZSBhcmUgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlXG5zY29wZSB3aGVyZSB0aGUgImltcG9ydCIgc3RhdGVtZW50IG9jY3Vycy5cblxuVGhlICpwdWJsaWMgbmFtZXMqIGRlZmluZWQgYnkgYSBtb2R1bGUgYXJlIGRldGVybWluZWQgYnkgY2hlY2tpbmcgdGhlXG5tb2R1bGVcJ3MgbmFtZXNwYWNlIGZvciBhIHZhcmlhYmxlIG5hbWVkICJfX2FsbF9fIjsgaWYgZGVmaW5lZCwgaXQgbXVzdFxuYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBuYW1lcyBkZWZpbmVkIG9yIGltcG9ydGVkIGJ5IHRoYXRcbm1vZHVsZS4gIFRoZSBuYW1lcyBnaXZlbiBpbiAiX19hbGxfXyIgYXJlIGFsbCBjb25zaWRlcmVkIHB1YmxpYyBhbmRcbmFyZSByZXF1aXJlZCB0byBleGlzdC4gIElmICJfX2FsbF9fIiBpcyBub3QgZGVmaW5lZCwgdGhlIHNldCBvZiBwdWJsaWNcbm5hbWVzIGluY2x1ZGVzIGFsbCBuYW1lcyBmb3VuZCBpbiB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSB3aGljaCBkbyBub3RcbmJlZ2luIHdpdGggYW4gdW5kZXJzY29yZSBjaGFyYWN0ZXIgKCJcJ19cJyIpLiAgIl9fYWxsX18iIHNob3VsZCBjb250YWluXG50aGUgZW50aXJlIHB1YmxpYyBBUEkuIEl0IGlzIGludGVuZGVkIHRvIGF2b2lkIGFjY2lkZW50YWxseSBleHBvcnRpbmdcbml0ZW1zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBBUEkgKHN1Y2ggYXMgbGlicmFyeSBtb2R1bGVzIHdoaWNoIHdlcmVcbmltcG9ydGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgbW9kdWxlKS5cblxuVGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gImZyb20gbW9kdWxlIGltcG9ydCAqIiAtLS0gaXMgb25seVxuYWxsb3dlZCBhdCB0aGUgbW9kdWxlIGxldmVsLiAgQXR0ZW1wdGluZyB0byB1c2UgaXQgaW4gY2xhc3Mgb3JcbmZ1bmN0aW9uIGRlZmluaXRpb25zIHdpbGwgcmFpc2UgYSAiU3ludGF4RXJyb3IiLlxuXG5XaGVuIHNwZWNpZnlpbmcgd2hhdCBtb2R1bGUgdG8gaW1wb3J0IHlvdSBkbyBub3QgaGF2ZSB0byBzcGVjaWZ5IHRoZVxuYWJzb2x1dGUgbmFtZSBvZiB0aGUgbW9kdWxlLiBXaGVuIGEgbW9kdWxlIG9yIHBhY2thZ2UgaXMgY29udGFpbmVkXG53aXRoaW4gYW5vdGhlciBwYWNrYWdlIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgYSByZWxhdGl2ZSBpbXBvcnQgd2l0aGluXG50aGUgc2FtZSB0b3AgcGFja2FnZSB3aXRob3V0IGhhdmluZyB0byBtZW50aW9uIHRoZSBwYWNrYWdlIG5hbWUuIEJ5XG51c2luZyBsZWFkaW5nIGRvdHMgaW4gdGhlIHNwZWNpZmllZCBtb2R1bGUgb3IgcGFja2FnZSBhZnRlciAiZnJvbSIgeW91XG5jYW4gc3BlY2lmeSBob3cgaGlnaCB0byB0cmF2ZXJzZSB1cCB0aGUgY3VycmVudCBwYWNrYWdlIGhpZXJhcmNoeVxud2l0aG91dCBzcGVjaWZ5aW5nIGV4YWN0IG5hbWVzLiBPbmUgbGVhZGluZyBkb3QgbWVhbnMgdGhlIGN1cnJlbnRcbnBhY2thZ2Ugd2hlcmUgdGhlIG1vZHVsZSBtYWtpbmcgdGhlIGltcG9ydCBleGlzdHMuIFR3byBkb3RzIG1lYW5zIHVwXG5vbmUgcGFja2FnZSBsZXZlbC4gVGhyZWUgZG90cyBpcyB1cCB0d28gbGV2ZWxzLCBldGMuIFNvIGlmIHlvdSBleGVjdXRlXG4iZnJvbSAuIGltcG9ydCBtb2QiIGZyb20gYSBtb2R1bGUgaW4gdGhlICJwa2ciIHBhY2thZ2UgdGhlbiB5b3Ugd2lsbFxuZW5kIHVwIGltcG9ydGluZyAicGtnLm1vZCIuIElmIHlvdSBleGVjdXRlICJmcm9tIC4uc3VicGtnMiBpbXBvcnQgbW9kIlxuZnJvbSB3aXRoaW4gInBrZy5zdWJwa2cxIiB5b3Ugd2lsbCBpbXBvcnQgInBrZy5zdWJwa2cyLm1vZCIuIFRoZVxuc3BlY2lmaWNhdGlvbiBmb3IgcmVsYXRpdmUgaW1wb3J0cyBpcyBjb250YWluZWQgd2l0aGluICoqUEVQIDMyOCoqLlxuXG4iaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSIgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdFxuZGV0ZXJtaW5lIGR5bmFtaWNhbGx5IHRoZSBtb2R1bGVzIHRvIGJlIGxvYWRlZC5cblxuXG5GdXR1cmUgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT1cblxuQSAqZnV0dXJlIHN0YXRlbWVudCogaXMgYSBkaXJlY3RpdmUgdG8gdGhlIGNvbXBpbGVyIHRoYXQgYSBwYXJ0aWN1bGFyXG5tb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIHN5bnRheCBvciBzZW1hbnRpY3MgdGhhdCB3aWxsIGJlXG5hdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uIHdoZXJlIHRoZSBmZWF0dXJlXG5iZWNvbWVzIHN0YW5kYXJkLlxuXG5UaGUgZnV0dXJlIHN0YXRlbWVudCBpcyBpbnRlbmRlZCB0byBlYXNlIG1pZ3JhdGlvbiB0byBmdXR1cmUgdmVyc2lvbnNcbm9mIFB5dGhvbiB0aGF0IGludHJvZHVjZSBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgbGFuZ3VhZ2UuICBJdFxuYWxsb3dzIHVzZSBvZiB0aGUgbmV3IGZlYXR1cmVzIG9uIGEgcGVyLW1vZHVsZSBiYXNpcyBiZWZvcmUgdGhlXG5yZWxlYXNlIGluIHdoaWNoIHRoZSBmZWF0dXJlIGJlY29tZXMgc3RhbmRhcmQuXG5cbiAgIGZ1dHVyZV9zdGF0ZW1lbnQgOjo9ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgZmVhdHVyZSBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICAgICAgKCIsIiBmZWF0dXJlIFsiYXMiIG5hbWVdKSpcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiAiKCIgZmVhdHVyZSBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICAgICAgKCIsIiBmZWF0dXJlIFsiYXMiIG5hbWVdKSogWyIsIl0gIikiXG4gICBmZWF0dXJlICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG4gICBuYW1lICAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnV0dXJlIHN0YXRlbWVudCBtdXN0IGFwcGVhciBuZWFyIHRoZSB0b3Agb2YgdGhlIG1vZHVsZS4gIFRoZSBvbmx5XG5saW5lcyB0aGF0IGNhbiBhcHBlYXIgYmVmb3JlIGEgZnV0dXJlIHN0YXRlbWVudCBhcmU6XG5cbiogdGhlIG1vZHVsZSBkb2NzdHJpbmcgKGlmIGFueSksXG5cbiogY29tbWVudHMsXG5cbiogYmxhbmsgbGluZXMsIGFuZFxuXG4qIG90aGVyIGZ1dHVyZSBzdGF0ZW1lbnRzLlxuXG5UaGUgZmVhdHVyZXMgcmVjb2duaXplZCBieSBQeXRob24gMy4wIGFyZSAiYWJzb2x1dGVfaW1wb3J0IixcbiJkaXZpc2lvbiIsICJnZW5lcmF0b3JzIiwgInVuaWNvZGVfbGl0ZXJhbHMiLCAicHJpbnRfZnVuY3Rpb24iLFxuIm5lc3RlZF9zY29wZXMiIGFuZCAid2l0aF9zdGF0ZW1lbnQiLiAgVGhleSBhcmUgYWxsIHJlZHVuZGFudCBiZWNhdXNlXG50aGV5IGFyZSBhbHdheXMgZW5hYmxlZCwgYW5kIG9ubHkga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCBpcyByZWNvZ25pemVkIGFuZCB0cmVhdGVkIHNwZWNpYWxseSBhdCBjb21waWxlXG50aW1lOiBDaGFuZ2VzIHRvIHRoZSBzZW1hbnRpY3Mgb2YgY29yZSBjb25zdHJ1Y3RzIGFyZSBvZnRlblxuaW1wbGVtZW50ZWQgYnkgZ2VuZXJhdGluZyBkaWZmZXJlbnQgY29kZS4gIEl0IG1heSBldmVuIGJlIHRoZSBjYXNlXG50aGF0IGEgbmV3IGZlYXR1cmUgaW50cm9kdWNlcyBuZXcgaW5jb21wYXRpYmxlIHN5bnRheCAoc3VjaCBhcyBhIG5ld1xucmVzZXJ2ZWQgd29yZCksIGluIHdoaWNoIGNhc2UgdGhlIGNvbXBpbGVyIG1heSBuZWVkIHRvIHBhcnNlIHRoZVxubW9kdWxlIGRpZmZlcmVudGx5LiAgU3VjaCBkZWNpc2lvbnMgY2Fubm90IGJlIHB1c2hlZCBvZmYgdW50aWxcbnJ1bnRpbWUuXG5cbkZvciBhbnkgZ2l2ZW4gcmVsZWFzZSwgdGhlIGNvbXBpbGVyIGtub3dzIHdoaWNoIGZlYXR1cmUgbmFtZXMgaGF2ZVxuYmVlbiBkZWZpbmVkLCBhbmQgcmFpc2VzIGEgY29tcGlsZS10aW1lIGVycm9yIGlmIGEgZnV0dXJlIHN0YXRlbWVudFxuY29udGFpbnMgYSBmZWF0dXJlIG5vdCBrbm93biB0byBpdC5cblxuVGhlIGRpcmVjdCBydW50aW1lIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgZm9yIGFueSBpbXBvcnQgc3RhdGVtZW50OlxudGhlcmUgaXMgYSBzdGFuZGFyZCBtb2R1bGUgIl9fZnV0dXJlX18iLCBkZXNjcmliZWQgbGF0ZXIsIGFuZCBpdCB3aWxsXG5iZSBpbXBvcnRlZCBpbiB0aGUgdXN1YWwgd2F5IGF0IHRoZSB0aW1lIHRoZSBmdXR1cmUgc3RhdGVtZW50IGlzXG5leGVjdXRlZC5cblxuVGhlIGludGVyZXN0aW5nIHJ1bnRpbWUgc2VtYW50aWNzIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgZmVhdHVyZVxuZW5hYmxlZCBieSB0aGUgZnV0dXJlIHN0YXRlbWVudC5cblxuTm90ZSB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGUgc3RhdGVtZW50OlxuXG4gICBpbXBvcnQgX19mdXR1cmVfXyBbYXMgbmFtZV1cblxuVGhhdCBpcyBub3QgYSBmdXR1cmUgc3RhdGVtZW50OyBpdFwncyBhbiBvcmRpbmFyeSBpbXBvcnQgc3RhdGVtZW50IHdpdGhcbm5vIHNwZWNpYWwgc2VtYW50aWNzIG9yIHN5bnRheCByZXN0cmljdGlvbnMuXG5cbkNvZGUgY29tcGlsZWQgYnkgY2FsbHMgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZXhlYygpIiBhbmRcbiJjb21waWxlKCkiIHRoYXQgb2NjdXIgaW4gYSBtb2R1bGUgIk0iIGNvbnRhaW5pbmcgYSBmdXR1cmUgc3RhdGVtZW50XG53aWxsLCBieSBkZWZhdWx0LCB1c2UgdGhlIG5ldyBzeW50YXggb3Igc2VtYW50aWNzIGFzc29jaWF0ZWQgd2l0aCB0aGVcbmZ1dHVyZSBzdGF0ZW1lbnQuICBUaGlzIGNhbiBiZSBjb250cm9sbGVkIGJ5IG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xuImNvbXBpbGUoKSIgLS0tIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIGZvciBkZXRhaWxzLlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgdHlwZWQgYXQgYW4gaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgcHJvbXB0IHdpbGxcbnRha2UgZWZmZWN0IGZvciB0aGUgcmVzdCBvZiB0aGUgaW50ZXJwcmV0ZXIgc2Vzc2lvbi4gIElmIGFuXG5pbnRlcnByZXRlciBpcyBzdGFydGVkIHdpdGggdGhlICotaSogb3B0aW9uLCBpcyBwYXNzZWQgYSBzY3JpcHQgbmFtZVxudG8gZXhlY3V0ZSwgYW5kIHRoZSBzY3JpcHQgaW5jbHVkZXMgYSBmdXR1cmUgc3RhdGVtZW50LCBpdCB3aWxsIGJlIGluXG5lZmZlY3QgaW4gdGhlIGludGVyYWN0aXZlIHNlc3Npb24gc3RhcnRlZCBhZnRlciB0aGUgc2NyaXB0IGlzXG5leGVjdXRlZC5cblxuU2VlIGFsc286ICoqUEVQIDIzNioqIC0gQmFjayB0byB0aGUgX19mdXR1cmVfX1xuXG4gICAgIFRoZSBvcmlnaW5hbCBwcm9wb3NhbCBmb3IgdGhlIF9fZnV0dXJlX18gbWVjaGFuaXNtLlxuJywKICAnaW4nOiB1J1xuTWVtYmVyc2hpcCB0ZXN0IG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBvcGVyYXRvcnMgImluIiBhbmQgIm5vdCBpbiIgdGVzdCBmb3IgbWVtYmVyc2hpcC4gICJ4IGluIHMiXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgInhcbm5vdCBpbiBzIiByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiAieCBpbiBzIi4gIEFsbCBidWlsdC1pbiBzZXF1ZW5jZXNcbmFuZCBzZXQgdHlwZXMgc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoICJpbiIgdGVzdHNcbndoZXRoZXIgdGhlIGRpY3Rpb25hcnkgaGFzIGEgZ2l2ZW4ga2V5LiBGb3IgY29udGFpbmVyIHR5cGVzIHN1Y2ggYXNcbmxpc3QsIHR1cGxlLCBzZXQsIGZyb3plbnNldCwgZGljdCwgb3IgY29sbGVjdGlvbnMuZGVxdWUsIHRoZVxuZXhwcmVzc2lvbiAieCBpbiB5IiBpcyBlcXVpdmFsZW50IHRvICJhbnkoeCBpcyBlIG9yIHggPT0gZSBmb3IgZSBpblxueSkiLlxuXG5Gb3IgdGhlIHN0cmluZyBhbmQgYnl0ZXMgdHlwZXMsICJ4IGluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGlzXG5hIHN1YnN0cmluZyBvZiAqeSouICBBbiBlcXVpdmFsZW50IHRlc3QgaXMgInkuZmluZCh4KSAhPSAtMSIuICBFbXB0eVxuc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzdWJzdHJpbmcgb2YgYW55IG90aGVyIHN0cmluZyxcbnNvICIiIiBpbiAiYWJjIiIgd2lsbCByZXR1cm4gIlRydWUiLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZSAiX19jb250YWluc19fKCkiIG1ldGhvZCwgInhcbmluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgInkuX19jb250YWluc19fKHgpIiBpcyB0cnVlLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZG8gbm90IGRlZmluZSAiX19jb250YWluc19fKCkiIGJ1dCBkb1xuZGVmaW5lICJfX2l0ZXJfXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBzb21lIHZhbHVlICJ6IiB3aXRoICJ4ID09IHoiXG5pcyBwcm9kdWNlZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciAieSIuICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkXG5kdXJpbmcgdGhlIGl0ZXJhdGlvbiwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuIl9fZ2V0aXRlbV9fKCkiLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGlzIGEgbm9uLVxubmVnYXRpdmUgaW50ZWdlciBpbmRleCAqaSogc3VjaCB0aGF0ICJ4ID09IHlbaV0iLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlICJJbmRleEVycm9yIiBleGNlcHRpb24uICAoSWYgYW55IG90aGVyXG5leGNlcHRpb24gaXMgcmFpc2VkLCBpdCBpcyBhcyBpZiAiaW4iIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbikuXG5cblRoZSBvcGVyYXRvciAibm90IGluIiBpcyBkZWZpbmVkIHRvIGhhdmUgdGhlIGludmVyc2UgdHJ1ZSB2YWx1ZSBvZlxuImluIi5cbicsCiAgJ2ludGVnZXJzJzogdSdcbkludGVnZXIgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKipcblxuSW50ZWdlciBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgaW50ZWdlciAgICAgICAgOjo9IGRlY2ltYWxpbnRlZ2VyIHwgb2N0aW50ZWdlciB8IGhleGludGVnZXIgfCBiaW5pbnRlZ2VyXG4gICBkZWNpbWFsaW50ZWdlciA6Oj0gbm9uemVyb2RpZ2l0IGRpZ2l0KiB8ICIwIitcbiAgIG5vbnplcm9kaWdpdCAgIDo6PSAiMSIuLi4iOSJcbiAgIGRpZ2l0ICAgICAgICAgIDo6PSAiMCIuLi4iOSJcbiAgIG9jdGludGVnZXIgICAgIDo6PSAiMCIgKCJvIiB8ICJPIikgb2N0ZGlnaXQrXG4gICBoZXhpbnRlZ2VyICAgICA6Oj0gIjAiICgieCIgfCAiWCIpIGhleGRpZ2l0K1xuICAgYmluaW50ZWdlciAgICAgOjo9ICIwIiAoImIiIHwgIkIiKSBiaW5kaWdpdCtcbiAgIG9jdGRpZ2l0ICAgICAgIDo6PSAiMCIuLi4iNyJcbiAgIGhleGRpZ2l0ICAgICAgIDo6PSBkaWdpdCB8ICJhIi4uLiJmIiB8ICJBIi4uLiJGIlxuICAgYmluZGlnaXQgICAgICAgOjo9ICIwIiB8ICIxIlxuXG5UaGVyZSBpcyBubyBsaW1pdCBmb3IgdGhlIGxlbmd0aCBvZiBpbnRlZ2VyIGxpdGVyYWxzIGFwYXJ0IGZyb20gd2hhdFxuY2FuIGJlIHN0b3JlZCBpbiBhdmFpbGFibGUgbWVtb3J5LlxuXG5Ob3RlIHRoYXQgbGVhZGluZyB6ZXJvcyBpbiBhIG5vbi16ZXJvIGRlY2ltYWwgbnVtYmVyIGFyZSBub3QgYWxsb3dlZC5cblRoaXMgaXMgZm9yIGRpc2FtYmlndWF0aW9uIHdpdGggQy1zdHlsZSBvY3RhbCBsaXRlcmFscywgd2hpY2ggUHl0aG9uXG51c2VkIGJlZm9yZSB2ZXJzaW9uIDMuMC5cblxuU29tZSBleGFtcGxlcyBvZiBpbnRlZ2VyIGxpdGVyYWxzOlxuXG4gICA3ICAgICAyMTQ3NDgzNjQ3ICAgICAgICAgICAgICAgICAgICAgICAgMG8xNzcgICAgMGIxMDAxMTAxMTFcbiAgIDMgICAgIDc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2ICAgICAwbzM3NyAgICAweGRlYWRiZWVmXG4nLAogICdsYW1iZGEnOiB1J1xuTGFtYmRhc1xuKioqKioqKlxuXG4gICBsYW1iZGFfZXhwciAgICAgICAgOjo9ICJsYW1iZGEiIFtwYXJhbWV0ZXJfbGlzdF06IGV4cHJlc3Npb25cbiAgIGxhbWJkYV9leHByX25vY29uZCA6Oj0gImxhbWJkYSIgW3BhcmFtZXRlcl9saXN0XTogZXhwcmVzc2lvbl9ub2NvbmRcblxuTGFtYmRhIGV4cHJlc3Npb25zIChzb21ldGltZXMgY2FsbGVkIGxhbWJkYSBmb3JtcykgYXJlIHVzZWQgdG8gY3JlYXRlXG5hbm9ueW1vdXMgZnVuY3Rpb25zLiBUaGUgZXhwcmVzc2lvbiAibGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbiJcbnlpZWxkcyBhIGZ1bmN0aW9uIG9iamVjdC4gIFRoZSB1bm5hbWVkIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBmdW5jdGlvblxub2JqZWN0IGRlZmluZWQgd2l0aFxuXG4gICBkZWYgPGxhbWJkYT4oYXJndW1lbnRzKTpcbiAgICAgICByZXR1cm4gZXhwcmVzc2lvblxuXG5TZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIHBhcmFtZXRlciBsaXN0cy5cbk5vdGUgdGhhdCBmdW5jdGlvbnMgY3JlYXRlZCB3aXRoIGxhbWJkYSBleHByZXNzaW9ucyBjYW5ub3QgY29udGFpblxuc3RhdGVtZW50cyBvciBhbm5vdGF0aW9ucy5cbicsCi0gJ2xpc3RzJzogdSdcbkxpc3QgZGlzcGxheXNcbioqKioqKioqKioqKipcblxuQSBsaXN0IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2YgZXhwcmVzc2lvbnMgZW5jbG9zZWQgaW5cbnNxdWFyZSBicmFja2V0czpcblxuICAgbGlzdF9kaXNwbGF5IDo6PSAiWyIgW2V4cHJlc3Npb25fbGlzdCB8IGNvbXByZWhlbnNpb25dICJdIlxuXG5BIGxpc3QgZGlzcGxheSB5aWVsZHMgYSBuZXcgbGlzdCBvYmplY3QsIHRoZSBjb250ZW50cyBiZWluZyBzcGVjaWZpZWRcbmJ5IGVpdGhlciBhIGxpc3Qgb2YgZXhwcmVzc2lvbnMgb3IgYSBjb21wcmVoZW5zaW9uLiAgV2hlbiBhIGNvbW1hLVxuc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaXMgc3VwcGxpZWQsIGl0cyBlbGVtZW50cyBhcmUgZXZhbHVhdGVkXG5mcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHBsYWNlZCBpbnRvIHRoZSBsaXN0IG9iamVjdCBpbiB0aGF0IG9yZGVyLlxuV2hlbiBhIGNvbXByZWhlbnNpb24gaXMgc3VwcGxpZWQsIHRoZSBsaXN0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlXG5lbGVtZW50cyByZXN1bHRpbmcgZnJvbSB0aGUgY29tcHJlaGVuc2lvbi5cbicsCisgJ2xpc3RzJzogdSdcbkxpc3QgZGlzcGxheXNcbioqKioqKioqKioqKipcblxuQSBsaXN0IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2YgZXhwcmVzc2lvbnMgZW5jbG9zZWQgaW5cbnNxdWFyZSBicmFja2V0czpcblxuICAgbGlzdF9kaXNwbGF5IDo6PSAiWyIgW3N0YXJyZWRfbGlzdCB8IGNvbXByZWhlbnNpb25dICJdIlxuXG5BIGxpc3QgZGlzcGxheSB5aWVsZHMgYSBuZXcgbGlzdCBvYmplY3QsIHRoZSBjb250ZW50cyBiZWluZyBzcGVjaWZpZWRcbmJ5IGVpdGhlciBhIGxpc3Qgb2YgZXhwcmVzc2lvbnMgb3IgYSBjb21wcmVoZW5zaW9uLiAgV2hlbiBhIGNvbW1hLVxuc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaXMgc3VwcGxpZWQsIGl0cyBlbGVtZW50cyBhcmUgZXZhbHVhdGVkXG5mcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHBsYWNlZCBpbnRvIHRoZSBsaXN0IG9iamVjdCBpbiB0aGF0IG9yZGVyLlxuV2hlbiBhIGNvbXByZWhlbnNpb24gaXMgc3VwcGxpZWQsIHRoZSBsaXN0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlXG5lbGVtZW50cyByZXN1bHRpbmcgZnJvbSB0aGUgY29tcHJlaGVuc2lvbi5cbicsCiAgJ25hbWluZyc6IHUnXG5OYW1pbmcgYW5kIGJpbmRpbmdcbioqKioqKioqKioqKioqKioqKlxuXG5cbkJpbmRpbmcgb2YgbmFtZXNcbj09PT09PT09PT09PT09PT1cblxuKk5hbWVzKiByZWZlciB0byBvYmplY3RzLiAgTmFtZXMgYXJlIGludHJvZHVjZWQgYnkgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5UaGUgZm9sbG93aW5nIGNvbnN0cnVjdHMgYmluZCBuYW1lczogZm9ybWFsIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLFxuImltcG9ydCIgc3RhdGVtZW50cywgY2xhc3MgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zICh0aGVzZSBiaW5kIHRoZVxuY2xhc3Mgb3IgZnVuY3Rpb24gbmFtZSBpbiB0aGUgZGVmaW5pbmcgYmxvY2spLCBhbmQgdGFyZ2V0cyB0aGF0IGFyZVxuaWRlbnRpZmllcnMgaWYgb2NjdXJyaW5nIGluIGFuIGFzc2lnbm1lbnQsICJmb3IiIGxvb3AgaGVhZGVyLCBvciBhZnRlclxuImFzIiBpbiBhICJ3aXRoIiBzdGF0ZW1lbnQgb3IgImV4Y2VwdCIgY2xhdXNlLiBUaGUgImltcG9ydCIgc3RhdGVtZW50XG5vZiB0aGUgZm9ybSAiZnJvbSAuLi4gaW1wb3J0ICoiIGJpbmRzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZVxuaW1wb3J0ZWQgbW9kdWxlLCBleGNlcHQgdGhvc2UgYmVnaW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZS4gIFRoaXMgZm9ybVxubWF5IG9ubHkgYmUgdXNlZCBhdCB0aGUgbW9kdWxlIGxldmVsLlxuXG5BIHRhcmdldCBvY2N1cnJpbmcgaW4gYSAiZGVsIiBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvclxudGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuXG5cbkVhY2ggYXNzaWdubWVudCBvciBpbXBvcnQgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jayBkZWZpbmVkIGJ5IGFcbmNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgYXQgdGhlIG1vZHVsZSBsZXZlbCAodGhlIHRvcC1sZXZlbFxuY29kZSBibG9jaykuXG5cbklmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssXG51bmxlc3MgZGVjbGFyZWQgYXMgIm5vbmxvY2FsIiBvciAiZ2xvYmFsIi4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGVcbm1vZHVsZSBsZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlXG5jb2RlIGJsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGVcbmJsb2NrIGJ1dCBub3QgZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSAqZnJlZSB2YXJpYWJsZSouXG5cbkVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG8gdGhlICpiaW5kaW5nKlxub2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGJ5IHRoZSBmb2xsb3dpbmcgbmFtZSByZXNvbHV0aW9uIHJ1bGVzLlxuXG5cblJlc29sdXRpb24gb2YgbmFtZXNcbj09PT09PT09PT09PT09PT09PT1cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuXG5cbldoZW4gYSBuYW1lIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrLCBpdCBpcyByZXNvbHZlZCB1c2luZyB0aGUgbmVhcmVzdFxuZW5jbG9zaW5nIHNjb3BlLiAgVGhlIHNldCBvZiBhbGwgc3VjaCBzY29wZXMgdmlzaWJsZSB0byBhIGNvZGUgYmxvY2tcbmlzIGNhbGxlZCB0aGUgYmxvY2tcJ3MgKmVudmlyb25tZW50Ki5cblxuV2hlbiBhIG5hbWUgaXMgbm90IGZvdW5kIGF0IGFsbCwgYSAiTmFtZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLiBJZlxudGhlIGN1cnJlbnQgc2NvcGUgaXMgYSBmdW5jdGlvbiBzY29wZSwgYW5kIHRoZSBuYW1lIHJlZmVycyB0byBhIGxvY2FsXG52YXJpYWJsZSB0aGF0IGhhcyBub3QgeWV0IGJlZW4gYm91bmQgdG8gYSB2YWx1ZSBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlXG5uYW1lIGlzIHVzZWQsIGFuICJVbmJvdW5kTG9jYWxFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbiJVbmJvdW5kTG9jYWxFcnJvciIgaXMgYSBzdWJjbGFzcyBvZiAiTmFtZUVycm9yIi5cblxuSWYgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uIG9jY3VycyBhbnl3aGVyZSB3aXRoaW4gYSBjb2RlIGJsb2NrLCBhbGxcbnVzZXMgb2YgdGhlIG5hbWUgd2l0aGluIHRoZSBibG9jayBhcmUgdHJlYXRlZCBhcyByZWZlcmVuY2VzIHRvIHRoZVxuY3VycmVudCBibG9jay4gIFRoaXMgY2FuIGxlYWQgdG8gZXJyb3JzIHdoZW4gYSBuYW1lIGlzIHVzZWQgd2l0aGluIGFcbmJsb2NrIGJlZm9yZSBpdCBpcyBib3VuZC4gIFRoaXMgcnVsZSBpcyBzdWJ0bGUuICBQeXRob24gbGFja3NcbmRlY2xhcmF0aW9ucyBhbmQgYWxsb3dzIG5hbWUgYmluZGluZyBvcGVyYXRpb25zIHRvIG9jY3VyIGFueXdoZXJlXG53aXRoaW4gYSBjb2RlIGJsb2NrLiAgVGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhIGNvZGUgYmxvY2sgY2FuIGJlXG5kZXRlcm1pbmVkIGJ5IHNjYW5uaW5nIHRoZSBlbnRpcmUgdGV4dCBvZiB0aGUgYmxvY2sgZm9yIG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy5cblxuSWYgdGhlICJnbG9iYWwiIHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2ssIGFsbCB1c2VzIG9mIHRoZSBuYW1lXG5zcGVjaWZpZWQgaW4gdGhlIHN0YXRlbWVudCByZWZlciB0byB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgaW4gdGhlXG50b3AtbGV2ZWwgbmFtZXNwYWNlLiAgTmFtZXMgYXJlIHJlc29sdmVkIGluIHRoZSB0b3AtbGV2ZWwgbmFtZXNwYWNlIGJ5XG5zZWFyY2hpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGkuZS4gdGhlIG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlXG5jb250YWluaW5nIHRoZSBjb2RlIGJsb2NrLCBhbmQgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSwgdGhlIG5hbWVzcGFjZVxub2YgdGhlIG1vZHVsZSAiYnVpbHRpbnMiLiAgVGhlIGdsb2JhbCBuYW1lc3BhY2UgaXMgc2VhcmNoZWQgZmlyc3QuICBJZlxudGhlIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlXG4iZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mIHRoZSBuYW1lLlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb25cbmluIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGVcbmNvbnRhaW5zIGEgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuVGhlICJub25sb2NhbCIgc3RhdGVtZW50IGNhdXNlcyBjb3JyZXNwb25kaW5nIG5hbWVzIHRvIHJlZmVyIHRvXG5wcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgZnVuY3Rpb24gc2NvcGUuXG4iU3ludGF4RXJyb3IiIGlzIHJhaXNlZCBhdCBjb21waWxlIHRpbWUgaWYgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3RcbmV4aXN0IGluIGFueSBlbmNsb3NpbmcgZnVuY3Rpb24gc2NvcGUuXG5cblRoZSBuYW1lc3BhY2UgZm9yIGEgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBhXG5tb2R1bGUgaXMgaW1wb3J0ZWQuICBUaGUgbWFpbiBtb2R1bGUgZm9yIGEgc2NyaXB0IGlzIGFsd2F5cyBjYWxsZWRcbiJfX21haW5fXyIuXG5cbkNsYXNzIGRlZmluaXRpb24gYmxvY2tzIGFuZCBhcmd1bWVudHMgdG8gImV4ZWMoKSIgYW5kICJldmFsKCkiIGFyZVxuc3BlY2lhbCBpbiB0aGUgY29udGV4dCBvZiBuYW1lIHJlc29sdXRpb24uIEEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhblxuZXhlY3V0YWJsZSBzdGF0ZW1lbnQgdGhhdCBtYXkgdXNlIGFuZCBkZWZpbmUgbmFtZXMuIFRoZXNlIHJlZmVyZW5jZXNcbmZvbGxvdyB0aGUgbm9ybWFsIHJ1bGVzIGZvciBuYW1lIHJlc29sdXRpb24gd2l0aCBhbiBleGNlcHRpb24gdGhhdFxudW5ib3VuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gVGhlXG5uYW1lc3BhY2Ugb2YgdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkgb2ZcbnRoZSBjbGFzcy4gVGhlIHNjb3BlIG9mIG5hbWVzIGRlZmluZWQgaW4gYSBjbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvXG50aGUgY2xhc3MgYmxvY2s7IGl0IGRvZXMgbm90IGV4dGVuZCB0byB0aGUgY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLVxudGhpcyBpbmNsdWRlcyBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlXG5pbXBsZW1lbnRlZCB1c2luZyBhIGZ1bmN0aW9uIHNjb3BlLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmdcbndpbGwgZmFpbDpcblxuICAgY2xhc3MgQTpcbiAgICAgICBhID0gNDJcbiAgICAgICBiID0gbGlzdChhICsgaSBmb3IgaSBpbiByYW5nZSgxMCkpXG5cblxuQnVpbHRpbnMgYW5kIHJlc3RyaWN0ZWQgZXhlY3V0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZWN1dGlvbiBvZiBhIGNvZGUgYmxvY2tcbmlzIGFjdHVhbGx5IGZvdW5kIGJ5IGxvb2tpbmcgdXAgdGhlIG5hbWUgIl9fYnVpbHRpbnNfXyIgaW4gaXRzIGdsb2JhbFxubmFtZXNwYWNlOyB0aGlzIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgb3IgYSBtb2R1bGUgKGluIHRoZSBsYXR0ZXIgY2FzZVxudGhlIG1vZHVsZVwncyBkaWN0aW9uYXJ5IGlzIHVzZWQpLiAgQnkgZGVmYXVsdCwgd2hlbiBpbiB0aGUgIl9fbWFpbl9fIlxubW9kdWxlLCAiX19idWlsdGluc19fIiBpcyB0aGUgYnVpbHQtaW4gbW9kdWxlICJidWlsdGlucyI7IHdoZW4gaW4gYW55XG5vdGhlciBtb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIGFuIGFsaWFzIGZvciB0aGUgZGljdGlvbmFyeSBvZiB0aGVcbiJidWlsdGlucyIgbW9kdWxlIGl0c2VsZi4gICJfX2J1aWx0aW5zX18iIGNhbiBiZSBzZXQgdG8gYSB1c2VyLWNyZWF0ZWRcbmRpY3Rpb25hcnkgdG8gY3JlYXRlIGEgd2VhayBmb3JtIG9mIHJlc3RyaWN0ZWQgZXhlY3V0aW9uLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFVzZXJzIHNob3VsZCBub3QgdG91Y2hcbiJfX2J1aWx0aW5zX18iOyBpdCBpcyBzdHJpY3RseSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBVc2Vyc1xud2FudGluZyB0byBvdmVycmlkZSB2YWx1ZXMgaW4gdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBzaG91bGQgImltcG9ydCJcbnRoZSAiYnVpbHRpbnMiIG1vZHVsZSBhbmQgbW9kaWZ5IGl0cyBhdHRyaWJ1dGVzIGFwcHJvcHJpYXRlbHkuXG5cblxuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuTmFtZSByZXNvbHV0aW9uIG9mIGZyZWUgdmFyaWFibGVzIG9jY3VycyBhdCBydW50aW1lLCBub3QgYXQgY29tcGlsZVxudGltZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSB3aWxsIHByaW50IDQyOlxuXG4gICBpID0gMTBcbiAgIGRlZiBmKCk6XG4gICAgICAgcHJpbnQoaSlcbiAgIGkgPSA0MlxuICAgZigpXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cblRoZSAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgImV4ZWMoKSIgYW5kICJldmFsKCkiIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG4nLAogICdub25sb2NhbCc6IHUnXG5UaGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBub25sb2NhbF9zdG10IDo6PSAibm9ubG9jYWwiIGlkZW50aWZpZXIgKCIsIiBpZGVudGlmaWVyKSpcblxuVGhlICJub25sb2NhbCIgc3RhdGVtZW50IGNhdXNlcyB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIHRvIHJlZmVyIHRvXG5wcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZXhjbHVkaW5nXG5nbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBiaW5kaW5nIGlzXG50byBzZWFyY2ggdGhlIGxvY2FsIG5hbWVzcGFjZSBmaXJzdC4gIFRoZSBzdGF0ZW1lbnQgYWxsb3dzXG5lbmNhcHN1bGF0ZWQgY29kZSB0byByZWJpbmQgdmFyaWFibGVzIG91dHNpZGUgb2YgdGhlIGxvY2FsIHNjb3BlXG5iZXNpZGVzIHRoZSBnbG9iYWwgKG1vZHVsZSkgc2NvcGUuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJub25sb2NhbCIgc3RhdGVtZW50LCB1bmxpa2UgdGhvc2UgbGlzdGVkIGluIGFcbiJnbG9iYWwiIHN0YXRlbWVudCwgbXVzdCByZWZlciB0byBwcmUtZXhpc3RpbmcgYmluZGluZ3MgaW4gYW5cbmVuY2xvc2luZyBzY29wZSAodGhlIHNjb3BlIGluIHdoaWNoIGEgbmV3IGJpbmRpbmcgc2hvdWxkIGJlIGNyZWF0ZWRcbmNhbm5vdCBiZSBkZXRlcm1pbmVkIHVuYW1iaWd1b3VzbHkpLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAibm9ubG9jYWwiIHN0YXRlbWVudCBtdXN0IG5vdCBjb2xsaWRlIHdpdGggcHJlLVxuZXhpc3RpbmcgYmluZGluZ3MgaW4gdGhlIGxvY2FsIHNjb3BlLlxuXG5TZWUgYWxzbzogKipQRVAgMzEwNCoqIC0gQWNjZXNzIHRvIE5hbWVzIGluIE91dGVyIFNjb3Blc1xuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnQuXG4nLAogICdudW1iZXJzJzogdSdcbk51bWVyaWMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG51bWVyaWMgbGl0ZXJhbHM6IGludGVnZXJzLCBmbG9hdGluZyBwb2ludFxubnVtYmVycywgYW5kIGltYWdpbmFyeSBudW1iZXJzLiAgVGhlcmUgYXJlIG5vIGNvbXBsZXggbGl0ZXJhbHNcbihjb21wbGV4IG51bWJlcnMgY2FuIGJlIGZvcm1lZCBieSBhZGRpbmcgYSByZWFsIG51bWJlciBhbmQgYW5cbmltYWdpbmFyeSBudW1iZXIpLlxuXG5Ob3RlIHRoYXQgbnVtZXJpYyBsaXRlcmFscyBkbyBub3QgaW5jbHVkZSBhIHNpZ247IGEgcGhyYXNlIGxpa2UgIi0xIlxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgXCciLSJcJyBhbmQgdGhlXG5saXRlcmFsICIxIi5cbicsCi0gJ251bWVyaWMtdHlwZXMnOiB1J1xuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8IikuICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZVxuICAgZXhwcmVzc2lvbiAieCArIHkiLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhblxuICAgIl9fYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBpcyBjYWxsZWQuICBUaGUgIl9fZGl2bW9kX18oKSJcbiAgIG1ldGhvZCBzaG91bGQgYmUgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgIl9fZmxvb3JkaXZfXygpIiBhbmRcbiAgICJfX21vZF9fKCkiOyBpdCBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG8gIl9fdHJ1ZWRpdl9fKCkiLiAgTm90ZVxuICAgdGhhdCAiX19wb3dfXygpIiBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluICJwb3coKSIgZnVuY3Rpb24gaXNcbiAgIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gIk5vdEltcGxlbWVudGVkIi5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdFxuICAgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2ZcbiAgIGRpZmZlcmVudCB0eXBlcy4gWzJdICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uICJ4IC1cbiAgIHkiLCB3aGVyZSAqeSogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiAiX19yc3ViX18oKSJcbiAgIG1ldGhvZCwgInkuX19yc3ViX18oeCkiIGlzIGNhbGxlZCBpZiAieC5fX3N1Yl9fKHkpIiByZXR1cm5zXG4gICAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSAicG93KCkiIHdpbGwgbm90IHRyeSBjYWxsaW5nICJfX3Jwb3dfXygpIiAodGhlXG4gICBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3MgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZFxuICAgICBmb3IgdGhlIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3Mgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzXG4gICAgIHRvIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzICgiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiLy89IiwgIiU9IiwgIioqPSIsICI8PD0iLFxuICAgIj4+PSIsICImPSIsICJePSIsICJ8PSIpLiAgVGhlc2UgbWV0aG9kcyBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGVcbiAgIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaFxuICAgY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLCAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsXG4gICBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCBpZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB3aXRoIGFuXG4gICAiX19pYWRkX18oKSIgbWV0aG9kLCAieCArPSB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID0geC5fX2lhZGRfXyh5KSJcbiAgIC4gT3RoZXJ3aXNlLCAieC5fX2FkZF9fKHkpIiBhbmQgInkuX19yYWRkX18oeCkiIGFyZSBjb25zaWRlcmVkLCBhc1xuICAgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiAieCArIHkiLiBJbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGF1Z21lbnRlZFxuICAgYXNzaWdubWVudCBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgZXJyb3JzIChzZWUgKldoeSBkb2VzXG4gICBhX3R1cGxlW2ldICs9IFtcJ2l0ZW1cJ10gcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGFkZGl0aW9uXG4gICB3b3Jrcz8qKSwgYnV0IHRoaXMgYmVoYXZpb3IgaXMgaW4gZmFjdCBwYXJ0IG9mIHRoZSBkYXRhIG1vZGVsLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKCItIiwgIisiLFxuICAgImFicygpIiBhbmQgIn4iKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiY29tcGxleCgpIiwgImludCgpIixcbiAgICJmbG9hdCgpIiBhbmQgInJvdW5kKCkiLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZVxuICAgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5pbmRleCgpIiwgYW5kIHdoZW5ldmVyIFB5dGhvbiBuZWVkc1xuICAgdG8gbG9zc2xlc3NseSBjb252ZXJ0IHRoZSBudW1lcmljIG9iamVjdCB0byBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaFxuICAgYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlIGJ1aWx0LWluICJiaW4oKSIsICJoZXgoKSIgYW5kICJvY3QoKSJcbiAgIGZ1bmN0aW9ucykuIFByZXNlbmNlIG9mIHRoaXMgbWV0aG9kIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljXG4gICBvYmplY3QgaXMgYW4gaW50ZWdlciB0eXBlLiAgTXVzdCByZXR1cm4gYW4gaW50ZWdlci5cblxuICAgTm90ZTogSW4gb3JkZXIgdG8gaGF2ZSBhIGNvaGVyZW50IGludGVnZXIgdHlwZSBjbGFzcywgd2hlblxuICAgICAiX19pbmRleF9fKCkiIGlzIGRlZmluZWQgIl9faW50X18oKSIgc2hvdWxkIGFsc28gYmUgZGVmaW5lZCwgYW5kXG4gICAgIGJvdGggc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbicsCisgJ251bWVyaWMtdHlwZXMnOiB1J1xuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tYXRtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIkAiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIixcbiAgICJwb3coKSIsICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpLiAgRm9yIGluc3RhbmNlLCB0b1xuICAgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggKyB5Iiwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGFcbiAgIGNsYXNzIHRoYXQgaGFzIGFuICJfX2FkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgaXMgY2FsbGVkLlxuICAgVGhlICJfX2Rpdm1vZF9fKCkiIG1ldGhvZCBzaG91bGQgYmUgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmdcbiAgICJfX2Zsb29yZGl2X18oKSIgYW5kICJfX21vZF9fKCkiOyBpdCBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG9cbiAgICJfX3RydWVkaXZfXygpIi4gIE5vdGUgdGhhdCAiX19wb3dfXygpIiBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHRcbiAgIGFuIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluXG4gICAicG93KCkiIGZ1bmN0aW9uIGlzIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gIk5vdEltcGxlbWVudGVkIi5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1hdG11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiQCIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLFxuICAgInBvdygpIiwgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpXG4gICBvcGVyYW5kcy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzXG4gICBub3Qgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2ZcbiAgIGRpZmZlcmVudCB0eXBlcy4gWzJdIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kXG4gICAgIGZvciB0aGUgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXNcbiAgICAgdG8gb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1hdG11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICJAPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IixcbiAgICI8PD0iLCAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvXG4gICBkbyB0aGUgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHRcbiAgICh3aGljaCBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljXG4gICBtZXRob2QgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZVxuICAgbm9ybWFsIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIGlmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzXG4gICB3aXRoIGFuICJfX2lhZGRfXygpIiBtZXRob2QsICJ4ICs9IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPVxuICAgeC5fX2lhZGRfXyh5KSIgLiBPdGhlcndpc2UsICJ4Ll9fYWRkX18oeSkiIGFuZCAieS5fX3JhZGRfXyh4KSIgYXJlXG4gICBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mICJ4ICsgeSIuIEluIGNlcnRhaW5cbiAgIHNpdHVhdGlvbnMsIGF1Z21lbnRlZCBhc3NpZ25tZW50IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBlcnJvcnNcbiAgIChzZWUgKldoeSBkb2VzIGFfdHVwbGVbaV0gKz0gW1wnaXRlbVwnXSByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGVcbiAgIGFkZGl0aW9uIHdvcmtzPyopLCBidXQgdGhpcyBiZWhhdmlvciBpcyBpbiBmYWN0IHBhcnQgb2YgdGhlIGRhdGFcbiAgIG1vZGVsLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKCItIiwgIisiLFxuICAgImFicygpIiBhbmQgIn4iKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiY29tcGxleCgpIiwgImludCgpIixcbiAgICJmbG9hdCgpIiBhbmQgInJvdW5kKCkiLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZVxuICAgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5pbmRleCgpIiwgYW5kIHdoZW5ldmVyIFB5dGhvbiBuZWVkc1xuICAgdG8gbG9zc2xlc3NseSBjb252ZXJ0IHRoZSBudW1lcmljIG9iamVjdCB0byBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaFxuICAgYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlIGJ1aWx0LWluICJiaW4oKSIsICJoZXgoKSIgYW5kICJvY3QoKSJcbiAgIGZ1bmN0aW9ucykuIFByZXNlbmNlIG9mIHRoaXMgbWV0aG9kIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljXG4gICBvYmplY3QgaXMgYW4gaW50ZWdlciB0eXBlLiAgTXVzdCByZXR1cm4gYW4gaW50ZWdlci5cblxuICAgTm90ZTogSW4gb3JkZXIgdG8gaGF2ZSBhIGNvaGVyZW50IGludGVnZXIgdHlwZSBjbGFzcywgd2hlblxuICAgICAiX19pbmRleF9fKCkiIGlzIGRlZmluZWQgIl9faW50X18oKSIgc2hvdWxkIGFsc28gYmUgZGVmaW5lZCwgYW5kXG4gICAgIGJvdGggc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbicsCiAgJ29iamVjdHMnOiB1J1xuT2JqZWN0cywgdmFsdWVzIGFuZCB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4qT2JqZWN0cyogYXJlIFB5dGhvblwncyBhYnN0cmFjdGlvbiBmb3IgZGF0YS4gIEFsbCBkYXRhIGluIGEgUHl0aG9uXG5wcm9ncmFtIGlzIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMgb3IgYnkgcmVsYXRpb25zIGJldHdlZW4gb2JqZWN0cy4gKEluXG5hIHNlbnNlLCBhbmQgaW4gY29uZm9ybWFuY2UgdG8gVm9uIE5ldW1hbm5cJ3MgbW9kZWwgb2YgYSAic3RvcmVkXG5wcm9ncmFtIGNvbXB1dGVyLCIgY29kZSBpcyBhbHNvIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMuKVxuXG5FdmVyeSBvYmplY3QgaGFzIGFuIGlkZW50aXR5LCBhIHR5cGUgYW5kIGEgdmFsdWUuICBBbiBvYmplY3RcJ3NcbippZGVudGl0eSogbmV2ZXIgY2hhbmdlcyBvbmNlIGl0IGhhcyBiZWVuIGNyZWF0ZWQ7IHlvdSBtYXkgdGhpbmsgb2YgaXRcbmFzIHRoZSBvYmplY3RcJ3MgYWRkcmVzcyBpbiBtZW1vcnkuICBUaGUgXCciaXMiXCcgb3BlcmF0b3IgY29tcGFyZXMgdGhlXG5pZGVudGl0eSBvZiB0d28gb2JqZWN0czsgdGhlICJpZCgpIiBmdW5jdGlvbiByZXR1cm5zIGFuIGludGVnZXJcbnJlcHJlc2VudGluZyBpdHMgaWRlbnRpdHkuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogRm9yIENQeXRob24sICJpZCh4KSIgaXMgdGhlIG1lbW9yeVxuYWRkcmVzcyB3aGVyZSAieCIgaXMgc3RvcmVkLlxuXG5BbiBvYmplY3RcJ3MgdHlwZSBkZXRlcm1pbmVzIHRoZSBvcGVyYXRpb25zIHRoYXQgdGhlIG9iamVjdCBzdXBwb3J0c1xuKGUuZy4sICJkb2VzIGl0IGhhdmUgYSBsZW5ndGg/IikgYW5kIGFsc28gZGVmaW5lcyB0aGUgcG9zc2libGUgdmFsdWVzXG5mb3Igb2JqZWN0cyBvZiB0aGF0IHR5cGUuICBUaGUgInR5cGUoKSIgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3RcJ3NcbnR5cGUgKHdoaWNoIGlzIGFuIG9iamVjdCBpdHNlbGYpLiAgTGlrZSBpdHMgaWRlbnRpdHksIGFuIG9iamVjdFwnc1xuKnR5cGUqIGlzIGFsc28gdW5jaGFuZ2VhYmxlLiBbMV1cblxuVGhlICp2YWx1ZSogb2Ygc29tZSBvYmplY3RzIGNhbiBjaGFuZ2UuICBPYmplY3RzIHdob3NlIHZhbHVlIGNhblxuY2hhbmdlIGFyZSBzYWlkIHRvIGJlICptdXRhYmxlKjsgb2JqZWN0cyB3aG9zZSB2YWx1ZSBpcyB1bmNoYW5nZWFibGVcbm9uY2UgdGhleSBhcmUgY3JlYXRlZCBhcmUgY2FsbGVkICppbW11dGFibGUqLiAoVGhlIHZhbHVlIG9mIGFuXG5pbW11dGFibGUgY29udGFpbmVyIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgbXV0YWJsZVxub2JqZWN0IGNhbiBjaGFuZ2Ugd2hlbiB0aGUgbGF0dGVyXCdzIHZhbHVlIGlzIGNoYW5nZWQ7IGhvd2V2ZXIgdGhlXG5jb250YWluZXIgaXMgc3RpbGwgY29uc2lkZXJlZCBpbW11dGFibGUsIGJlY2F1c2UgdGhlIGNvbGxlY3Rpb24gb2Zcbm9iamVjdHMgaXQgY29udGFpbnMgY2Fubm90IGJlIGNoYW5nZWQuICBTbywgaW1tdXRhYmlsaXR5IGlzIG5vdFxuc3RyaWN0bHkgdGhlIHNhbWUgYXMgaGF2aW5nIGFuIHVuY2hhbmdlYWJsZSB2YWx1ZSwgaXQgaXMgbW9yZSBzdWJ0bGUuKVxuQW4gb2JqZWN0XCdzIG11dGFiaWxpdHkgaXMgZGV0ZXJtaW5lZCBieSBpdHMgdHlwZTsgZm9yIGluc3RhbmNlLFxubnVtYmVycywgc3RyaW5ncyBhbmQgdHVwbGVzIGFyZSBpbW11dGFibGUsIHdoaWxlIGRpY3Rpb25hcmllcyBhbmRcbmxpc3RzIGFyZSBtdXRhYmxlLlxuXG5PYmplY3RzIGFyZSBuZXZlciBleHBsaWNpdGx5IGRlc3Ryb3llZDsgaG93ZXZlciwgd2hlbiB0aGV5IGJlY29tZVxudW5yZWFjaGFibGUgdGhleSBtYXkgYmUgZ2FyYmFnZS1jb2xsZWN0ZWQuICBBbiBpbXBsZW1lbnRhdGlvbiBpc1xuYWxsb3dlZCB0byBwb3N0cG9uZSBnYXJiYWdlIGNvbGxlY3Rpb24gb3Igb21pdCBpdCBhbHRvZ2V0aGVyIC0tLSBpdCBpc1xuYSBtYXR0ZXIgb2YgaW1wbGVtZW50YXRpb24gcXVhbGl0eSBob3cgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzXG5pbXBsZW1lbnRlZCwgYXMgbG9uZyBhcyBubyBvYmplY3RzIGFyZSBjb2xsZWN0ZWQgdGhhdCBhcmUgc3RpbGxcbnJlYWNoYWJsZS5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBDUHl0aG9uIGN1cnJlbnRseSB1c2VzIGEgcmVmZXJlbmNlLVxuY291bnRpbmcgc2NoZW1lIHdpdGggKG9wdGlvbmFsKSBkZWxheWVkIGRldGVjdGlvbiBvZiBjeWNsaWNhbGx5IGxpbmtlZFxuZ2FyYmFnZSwgd2hpY2ggY29sbGVjdHMgbW9zdCBvYmplY3RzIGFzIHNvb24gYXMgdGhleSBiZWNvbWVcbnVucmVhY2hhYmxlLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gY29sbGVjdCBnYXJiYWdlIGNvbnRhaW5pbmdcbmNpcmN1bGFyIHJlZmVyZW5jZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlICJnYyIgbW9kdWxlIGZvclxuaW5mb3JtYXRpb24gb24gY29udHJvbGxpbmcgdGhlIGNvbGxlY3Rpb24gb2YgY3ljbGljIGdhcmJhZ2UuIE90aGVyXG5pbXBsZW1lbnRhdGlvbnMgYWN0IGRpZmZlcmVudGx5IGFuZCBDUHl0aG9uIG1heSBjaGFuZ2UuIERvIG5vdCBkZXBlbmRcbm9uIGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gb2Ygb2JqZWN0cyB3aGVuIHRoZXkgYmVjb21lIHVucmVhY2hhYmxlIChzb1xueW91IHNob3VsZCBhbHdheXMgY2xvc2UgZmlsZXMgZXhwbGljaXRseSkuXG5cbk5vdGUgdGhhdCB0aGUgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvblwncyB0cmFjaW5nIG9yIGRlYnVnZ2luZ1xuZmFjaWxpdGllcyBtYXkga2VlcCBvYmplY3RzIGFsaXZlIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgY29sbGVjdGFibGUuXG5BbHNvIG5vdGUgdGhhdCBjYXRjaGluZyBhbiBleGNlcHRpb24gd2l0aCBhIFwnInRyeSIuLi4iZXhjZXB0IlwnXG5zdGF0ZW1lbnQgbWF5IGtlZXAgb2JqZWN0cyBhbGl2ZS5cblxuU29tZSBvYmplY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byAiZXh0ZXJuYWwiIHJlc291cmNlcyBzdWNoIGFzIG9wZW5cbmZpbGVzIG9yIHdpbmRvd3MuICBJdCBpcyB1bmRlcnN0b29kIHRoYXQgdGhlc2UgcmVzb3VyY2VzIGFyZSBmcmVlZFxud2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UtY29sbGVjdGVkLCBidXQgc2luY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzXG5ub3QgZ3VhcmFudGVlZCB0byBoYXBwZW4sIHN1Y2ggb2JqZWN0cyBhbHNvIHByb3ZpZGUgYW4gZXhwbGljaXQgd2F5IHRvXG5yZWxlYXNlIHRoZSBleHRlcm5hbCByZXNvdXJjZSwgdXN1YWxseSBhICJjbG9zZSgpIiBtZXRob2QuIFByb2dyYW1zXG5hcmUgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZXhwbGljaXRseSBjbG9zZSBzdWNoIG9iamVjdHMuICBUaGVcblwnInRyeSIuLi4iZmluYWxseSJcJyBzdGF0ZW1lbnQgYW5kIHRoZSBcJyJ3aXRoIlwnIHN0YXRlbWVudCBwcm92aWRlXG5jb252ZW5pZW50IHdheXMgdG8gZG8gdGhpcy5cblxuU29tZSBvYmplY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzOyB0aGVzZSBhcmUgY2FsbGVkXG4qY29udGFpbmVycyouIEV4YW1wbGVzIG9mIGNvbnRhaW5lcnMgYXJlIHR1cGxlcywgbGlzdHMgYW5kXG5kaWN0aW9uYXJpZXMuICBUaGUgcmVmZXJlbmNlcyBhcmUgcGFydCBvZiBhIGNvbnRhaW5lclwncyB2YWx1ZS4gIEluXG5tb3N0IGNhc2VzLCB3aGVuIHdlIHRhbGsgYWJvdXQgdGhlIHZhbHVlIG9mIGEgY29udGFpbmVyLCB3ZSBpbXBseSB0aGVcbnZhbHVlcywgbm90IHRoZSBpZGVudGl0aWVzIG9mIHRoZSBjb250YWluZWQgb2JqZWN0czsgaG93ZXZlciwgd2hlbiB3ZVxudGFsayBhYm91dCB0aGUgbXV0YWJpbGl0eSBvZiBhIGNvbnRhaW5lciwgb25seSB0aGUgaWRlbnRpdGllcyBvZiB0aGVcbmltbWVkaWF0ZWx5IGNvbnRhaW5lZCBvYmplY3RzIGFyZSBpbXBsaWVkLiAgU28sIGlmIGFuIGltbXV0YWJsZVxuY29udGFpbmVyIChsaWtlIGEgdHVwbGUpIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgbXV0YWJsZSBvYmplY3QsIGl0c1xudmFsdWUgY2hhbmdlcyBpZiB0aGF0IG11dGFibGUgb2JqZWN0IGlzIGNoYW5nZWQuXG5cblR5cGVzIGFmZmVjdCBhbG1vc3QgYWxsIGFzcGVjdHMgb2Ygb2JqZWN0IGJlaGF2aW9yLiAgRXZlbiB0aGVcbmltcG9ydGFuY2Ugb2Ygb2JqZWN0IGlkZW50aXR5IGlzIGFmZmVjdGVkIGluIHNvbWUgc2Vuc2U6IGZvciBpbW11dGFibGVcbnR5cGVzLCBvcGVyYXRpb25zIHRoYXQgY29tcHV0ZSBuZXcgdmFsdWVzIG1heSBhY3R1YWxseSByZXR1cm4gYVxucmVmZXJlbmNlIHRvIGFueSBleGlzdGluZyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSwgd2hpbGVcbmZvciBtdXRhYmxlIG9iamVjdHMgdGhpcyBpcyBub3QgYWxsb3dlZC4gIEUuZy4sIGFmdGVyICJhID0gMTsgYiA9IDEiLFxuImEiIGFuZCAiYiIgbWF5IG9yIG1heSBub3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0IHdpdGggdGhlIHZhbHVlXG5vbmUsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIGJ1dCBhZnRlciAiYyA9IFtdOyBkID0gW10iLCAiYyJcbmFuZCAiZCIgYXJlIGd1YXJhbnRlZWQgdG8gcmVmZXIgdG8gdHdvIGRpZmZlcmVudCwgdW5pcXVlLCBuZXdseVxuY3JlYXRlZCBlbXB0eSBsaXN0cy4gKE5vdGUgdGhhdCAiYyA9IGQgPSBbXSIgYXNzaWducyB0aGUgc2FtZSBvYmplY3RcbnRvIGJvdGggImMiIGFuZCAiZCIuKVxuJywKLSAnb3BlcmF0b3Itc3VtbWFyeSc6IHUnXG5PcGVyYXRvciBwcmVjZWRlbmNlXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZSBpbiBQeXRob24sIGZyb21cbmxvd2VzdCBwcmVjZWRlbmNlIChsZWFzdCBiaW5kaW5nKSB0byBoaWdoZXN0IHByZWNlZGVuY2UgKG1vc3RcbmJpbmRpbmcpLiAgT3BlcmF0b3JzIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UuICBVbmxlc3NcbnRoZSBzeW50YXggaXMgZXhwbGljaXRseSBnaXZlbiwgb3BlcmF0b3JzIGFyZSBiaW5hcnkuICBPcGVyYXRvcnMgaW5cbnRoZSBzYW1lIGJveCBncm91cCBsZWZ0IHRvIHJpZ2h0IChleGNlcHQgZm9yIGV4cG9uZW50aWF0aW9uLCB3aGljaFxuZ3JvdXBzIGZyb20gcmlnaHQgdG8gbGVmdCkuXG5cbk5vdGUgdGhhdCBjb21wYXJpc29ucywgbWVtYmVyc2hpcCB0ZXN0cywgYW5kIGlkZW50aXR5IHRlc3RzLCBhbGwgaGF2ZVxudGhlIHNhbWUgcHJlY2VkZW5jZSBhbmQgaGF2ZSBhIGxlZnQtdG8tcmlnaHQgY2hhaW5pbmcgZmVhdHVyZSBhc1xuZGVzY3JpYmVkIGluIHRoZSAqQ29tcGFyaXNvbnMqIHNlY3Rpb24uXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgImxhbWJkYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMYW1iZGEgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImlmIiAtLSAiZWxzZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb25kaXRpb25hbCBleHByZXNzaW9uICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIm9yIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIm5vdCIgIngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE5PVCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImluIiwgIm5vdCBpbiIsICJpcyIsICJpcyBub3QiLCAiPCIsICI8PSIsICI+IiwgfCBDb21wYXJpc29ucywgaW5jbHVkaW5nIG1lbWJlcnNoaXAgICAgIHxcbnwgIj49IiwgIiE9IiwgIj09IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0cyBhbmQgaWRlbnRpdHkgdGVzdHMgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIl4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIFhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIiYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIjw8IiwgIj4+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTaGlmdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIisiLCAiLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIioiLCAiLyIsICIvLyIsICIlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIHJlbWFpbmRlciAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbNV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIit4IiwgIi14IiwgIn54IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQb3NpdGl2ZSwgbmVnYXRpdmUsIGJpdHdpc2UgTk9UICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIioqIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeHBvbmVudGlhdGlvbiBbNl0gICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInhbaW5kZXhdIiwgInhbaW5kZXg6aW5kZXhdIiwgICAgICAgICAgICAgICAgICAgfCBTdWJzY3JpcHRpb24sIHNsaWNpbmcsIGNhbGwsICAgICAgICAgIHxcbnwgIngoYXJndW1lbnRzLi4uKSIsICJ4LmF0dHJpYnV0ZSIgICAgICAgICAgICAgICAgfCBhdHRyaWJ1dGUgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIihleHByZXNzaW9ucy4uLikiLCAiW2V4cHJlc3Npb25zLi4uXSIsICJ7a2V5OiAgfCBCaW5kaW5nIG9yIHR1cGxlIGRpc3BsYXksIGxpc3QgICAgICAgIHxcbnwgdmFsdWUuLi59IiwgIntleHByZXNzaW9ucy4uLn0iICAgICAgICAgICAgICAgICAgfCBkaXNwbGF5LCBkaWN0aW9uYXJ5IGRpc3BsYXksIHNldCAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGlsZSAiYWJzKHgleSkgPCBhYnMoeSkiIGlzIHRydWUgbWF0aGVtYXRpY2FsbHksIGZvciBmbG9hdHNcbiAgICBpdCBtYXkgbm90IGJlIHRydWUgbnVtZXJpY2FsbHkgZHVlIHRvIHJvdW5kb2ZmLiAgRm9yIGV4YW1wbGUsIGFuZFxuICAgIGFzc3VtaW5nIGEgcGxhdGZvcm0gb24gd2hpY2ggYSBQeXRob24gZmxvYXQgaXMgYW4gSUVFRSA3NTQgZG91YmxlLVxuICAgIHByZWNpc2lvbiBudW1iZXIsIGluIG9yZGVyIHRoYXQgIi0xZS0xMDAgJSAxZTEwMCIgaGF2ZSB0aGUgc2FtZVxuICAgIHNpZ24gYXMgIjFlMTAwIiwgdGhlIGNvbXB1dGVkIHJlc3VsdCBpcyAiLTFlLTEwMCArIDFlMTAwIiwgd2hpY2hcbiAgICBpcyBudW1lcmljYWxseSBleGFjdGx5IGVxdWFsIHRvICIxZTEwMCIuICBUaGUgZnVuY3Rpb25cbiAgICAibWF0aC5mbW9kKCkiIHJldHVybnMgYSByZXN1bHQgd2hvc2Ugc2lnbiBtYXRjaGVzIHRoZSBzaWduIG9mIHRoZVxuICAgIGZpcnN0IGFyZ3VtZW50IGluc3RlYWQsIGFuZCBzbyByZXR1cm5zICItMWUtMTAwIiBpbiB0aGlzIGNhc2UuXG4gICAgV2hpY2ggYXBwcm9hY2ggaXMgbW9yZSBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBhcHBsaWNhdGlvbi5cblxuWzJdIElmIHggaXMgdmVyeSBjbG9zZSB0byBhbiBleGFjdCBpbnRlZ2VyIG11bHRpcGxlIG9mIHksIGl0XCdzXG4gICAgcG9zc2libGUgZm9yICJ4Ly95IiB0byBiZSBvbmUgbGFyZ2VyIHRoYW4gIih4LXgleSkvL3kiIGR1ZSB0b1xuICAgIHJvdW5kaW5nLiAgSW4gc3VjaCBjYXNlcywgUHl0aG9uIHJldHVybnMgdGhlIGxhdHRlciByZXN1bHQsIGluXG4gICAgb3JkZXIgdG8gcHJlc2VydmUgdGhhdCAiZGl2bW9kKHgseSlbMF0gKiB5ICsgeCAlIHkiIGJlIHZlcnkgY2xvc2VcbiAgICB0byAieCIuXG5cblszXSBUaGUgVW5pY29kZSBzdGFuZGFyZCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gKmNvZGUgcG9pbnRzKiAoZS5nLlxuICAgIFUrMDA0MSkgYW5kICphYnN0cmFjdCBjaGFyYWN0ZXJzKiAoZS5nLiAiTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSIpLlxuICAgIFdoaWxlIG1vc3QgYWJzdHJhY3QgY2hhcmFjdGVycyBpbiBVbmljb2RlIGFyZSBvbmx5IHJlcHJlc2VudGVkXG4gICAgdXNpbmcgb25lIGNvZGUgcG9pbnQsIHRoZXJlIGlzIGEgbnVtYmVyIG9mIGFic3RyYWN0IGNoYXJhY3RlcnNcbiAgICB0aGF0IGNhbiBpbiBhZGRpdGlvbiBiZSByZXByZXNlbnRlZCB1c2luZyBhIHNlcXVlbmNlIG9mIG1vcmUgdGhhblxuICAgIG9uZSBjb2RlIHBvaW50LiAgRm9yIGV4YW1wbGUsIHRoZSBhYnN0cmFjdCBjaGFyYWN0ZXIgIkxBVElOXG4gICAgQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEiIGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIHNpbmdsZVxuICAgICpwcmVjb21wb3NlZCBjaGFyYWN0ZXIqIGF0IGNvZGUgcG9zaXRpb24gVSswMEM3LCBvciBhcyBhIHNlcXVlbmNlXG4gICAgb2YgYSAqYmFzZSBjaGFyYWN0ZXIqIGF0IGNvZGUgcG9zaXRpb24gVSswMDQzIChMQVRJTiBDQVBJVEFMXG4gICAgTEVUVEVSIEMpLCBmb2xsb3dlZCBieSBhICpjb21iaW5pbmcgY2hhcmFjdGVyKiBhdCBjb2RlIHBvc2l0aW9uXG4gICAgVSswMzI3IChDT01CSU5JTkcgQ0VESUxMQSkuXG5cbiAgICBUaGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgb24gc3RyaW5ncyBjb21wYXJlIGF0IHRoZSBsZXZlbCBvZlxuICAgIFVuaWNvZGUgY29kZSBwb2ludHMuIFRoaXMgbWF5IGJlIGNvdW50ZXItaW50dWl0aXZlIHRvIGh1bWFucy4gIEZvclxuICAgIGV4YW1wbGUsICIiXFx1MDBDNyIgPT0gIlxcdTAwNDNcXHUwMzI3IiIgaXMgIkZhbHNlIiwgZXZlbiB0aG91Z2ggYm90aFxuICAgIHN0cmluZ3MgcmVwcmVzZW50IHRoZSBzYW1lIGFic3RyYWN0IGNoYXJhY3RlciAiTEFUSU4gQ0FQSVRBTFxuICAgIExFVFRFUiBDIFdJVEggQ0VESUxMQSIuXG5cbiAgICBUbyBjb21wYXJlIHN0cmluZ3MgYXQgdGhlIGxldmVsIG9mIGFic3RyYWN0IGNoYXJhY3RlcnMgKHRoYXQgaXMsXG4gICAgaW4gYSB3YXkgaW50dWl0aXZlIHRvIGh1bWFucyksIHVzZSAidW5pY29kZWRhdGEubm9ybWFsaXplKCkiLlxuXG5bNF0gRHVlIHRvIGF1dG9tYXRpYyBnYXJiYWdlLWNvbGxlY3Rpb24sIGZyZWUgbGlzdHMsIGFuZCB0aGVcbiAgICBkeW5hbWljIG5hdHVyZSBvZiBkZXNjcmlwdG9ycywgeW91IG1heSBub3RpY2Ugc2VlbWluZ2x5IHVudXN1YWxcbiAgICBiZWhhdmlvdXIgaW4gY2VydGFpbiB1c2VzIG9mIHRoZSAiaXMiIG9wZXJhdG9yLCBsaWtlIHRob3NlXG4gICAgaW52b2x2aW5nIGNvbXBhcmlzb25zIGJldHdlZW4gaW5zdGFuY2UgbWV0aG9kcywgb3IgY29uc3RhbnRzLlxuICAgIENoZWNrIHRoZWlyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby5cblxuWzVdIFRoZSAiJSIgb3BlcmF0b3IgaXMgYWxzbyB1c2VkIGZvciBzdHJpbmcgZm9ybWF0dGluZzsgdGhlIHNhbWVcbiAgICBwcmVjZWRlbmNlIGFwcGxpZXMuXG5cbls2XSBUaGUgcG93ZXIgb3BlcmF0b3IgIioqIiBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiBhbiBhcml0aG1ldGljXG4gICAgb3IgYml0d2lzZSB1bmFyeSBvcGVyYXRvciBvbiBpdHMgcmlnaHQsIHRoYXQgaXMsICIyKiotMSIgaXMgIjAuNSIuXG4nLAorICdvcGVyYXRvci1zdW1tYXJ5JzogdSdcbk9wZXJhdG9yIHByZWNlZGVuY2VcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlIGluIFB5dGhvbiwgZnJvbVxubG93ZXN0IHByZWNlZGVuY2UgKGxlYXN0IGJpbmRpbmcpIHRvIGhpZ2hlc3QgcHJlY2VkZW5jZSAobW9zdFxuYmluZGluZykuICBPcGVyYXRvcnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZS4gIFVubGVzc1xudGhlIHN5bnRheCBpcyBleHBsaWNpdGx5IGdpdmVuLCBvcGVyYXRvcnMgYXJlIGJpbmFyeS4gIE9wZXJhdG9ycyBpblxudGhlIHNhbWUgYm94IGdyb3VwIGxlZnQgdG8gcmlnaHQgKGV4Y2VwdCBmb3IgZXhwb25lbnRpYXRpb24sIHdoaWNoXG5ncm91cHMgZnJvbSByaWdodCB0byBsZWZ0KS5cblxuTm90ZSB0aGF0IGNvbXBhcmlzb25zLCBtZW1iZXJzaGlwIHRlc3RzLCBhbmQgaWRlbnRpdHkgdGVzdHMsIGFsbCBoYXZlXG50aGUgc2FtZSBwcmVjZWRlbmNlIGFuZCBoYXZlIGEgbGVmdC10by1yaWdodCBjaGFpbmluZyBmZWF0dXJlIGFzXG5kZXNjcmliZWQgaW4gdGhlICpDb21wYXJpc29ucyogc2VjdGlvbi5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xufCAibGFtYmRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhbWJkYSBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiaWYiIC0tICJlbHNlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbmRpdGlvbmFsIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAib3IiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAibm90IiAieCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gTk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiaW4iLCAibm90IGluIiwgImlzIiwgImlzIG5vdCIsICI8IiwgIjw9IiwgIj4iLCB8IENvbXBhcmlzb25zLCBpbmNsdWRpbmcgbWVtYmVyc2hpcCAgICAgfFxufCAiPj0iLCAiIT0iLCAiPT0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RzIGFuZCBpZGVudGl0eSB0ZXN0cyAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAifCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiXiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiJiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiPDwiLCAiPj4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNoaWZ0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKyIsICItIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKiIsICJAIiwgIi8iLCAiLy8iLCAiJSIgICAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aW9uLCBtYXRyaXggbXVsdGlwbGljYXRpb24gfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpdmlzaW9uLCByZW1haW5kZXIgWzVdICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiK3giLCAiLXgiLCAifngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBvc2l0aXZlLCBuZWdhdGl2ZSwgYml0d2lzZSBOT1QgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKioiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEV4cG9uZW50aWF0aW9uIFs2XSAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiYXdhaXQiICJ4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEF3YWl0IGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAieFtpbmRleF0iLCAieFtpbmRleDppbmRleF0iLCAgICAgICAgICAgICAgICAgICB8IFN1YnNjcmlwdGlvbiwgc2xpY2luZywgY2FsbCwgICAgICAgICAgfFxufCAieChhcmd1bWVudHMuLi4pIiwgInguYXR0cmlidXRlIiAgICAgICAgICAgICAgICB8IGF0dHJpYnV0ZSByZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKGV4cHJlc3Npb25zLi4uKSIsICJbZXhwcmVzc2lvbnMuLi5dIiwgIntrZXk6ICB8IEJpbmRpbmcgb3IgdHVwbGUgZGlzcGxheSwgbGlzdCAgICAgICAgfFxufCB2YWx1ZS4uLn0iLCAie2V4cHJlc3Npb25zLi4ufSIgICAgICAgICAgICAgICAgICB8IGRpc3BsYXksIGRpY3Rpb25hcnkgZGlzcGxheSwgc2V0ICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoaWxlICJhYnMoeCV5KSA8IGFicyh5KSIgaXMgdHJ1ZSBtYXRoZW1hdGljYWxseSwgZm9yIGZsb2F0c1xuICAgIGl0IG1heSBub3QgYmUgdHJ1ZSBudW1lcmljYWxseSBkdWUgdG8gcm91bmRvZmYuICBGb3IgZXhhbXBsZSwgYW5kXG4gICAgYXNzdW1pbmcgYSBwbGF0Zm9ybSBvbiB3aGljaCBhIFB5dGhvbiBmbG9hdCBpcyBhbiBJRUVFIDc1NCBkb3VibGUtXG4gICAgcHJlY2lzaW9uIG51bWJlciwgaW4gb3JkZXIgdGhhdCAiLTFlLTEwMCAlIDFlMTAwIiBoYXZlIHRoZSBzYW1lXG4gICAgc2lnbiBhcyAiMWUxMDAiLCB0aGUgY29tcHV0ZWQgcmVzdWx0IGlzICItMWUtMTAwICsgMWUxMDAiLCB3aGljaFxuICAgIGlzIG51bWVyaWNhbGx5IGV4YWN0bHkgZXF1YWwgdG8gIjFlMTAwIi4gIFRoZSBmdW5jdGlvblxuICAgICJtYXRoLmZtb2QoKSIgcmV0dXJucyBhIHJlc3VsdCB3aG9zZSBzaWduIG1hdGNoZXMgdGhlIHNpZ24gb2YgdGhlXG4gICAgZmlyc3QgYXJndW1lbnQgaW5zdGVhZCwgYW5kIHNvIHJldHVybnMgIi0xZS0xMDAiIGluIHRoaXMgY2FzZS5cbiAgICBXaGljaCBhcHByb2FjaCBpcyBtb3JlIGFwcHJvcHJpYXRlIGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLlxuXG5bMl0gSWYgeCBpcyB2ZXJ5IGNsb3NlIHRvIGFuIGV4YWN0IGludGVnZXIgbXVsdGlwbGUgb2YgeSwgaXRcJ3NcbiAgICBwb3NzaWJsZSBmb3IgIngvL3kiIHRvIGJlIG9uZSBsYXJnZXIgdGhhbiAiKHgteCV5KS8veSIgZHVlIHRvXG4gICAgcm91bmRpbmcuICBJbiBzdWNoIGNhc2VzLCBQeXRob24gcmV0dXJucyB0aGUgbGF0dGVyIHJlc3VsdCwgaW5cbiAgICBvcmRlciB0byBwcmVzZXJ2ZSB0aGF0ICJkaXZtb2QoeCx5KVswXSAqIHkgKyB4ICUgeSIgYmUgdmVyeSBjbG9zZVxuICAgIHRvICJ4Ii5cblxuWzNdIFRoZSBVbmljb2RlIHN0YW5kYXJkIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiAqY29kZSBwb2ludHMqIChlLmcuXG4gICAgVSswMDQxKSBhbmQgKmFic3RyYWN0IGNoYXJhY3RlcnMqIChlLmcuICJMQVRJTiBDQVBJVEFMIExFVFRFUiBBIikuXG4gICAgV2hpbGUgbW9zdCBhYnN0cmFjdCBjaGFyYWN0ZXJzIGluIFVuaWNvZGUgYXJlIG9ubHkgcmVwcmVzZW50ZWRcbiAgICB1c2luZyBvbmUgY29kZSBwb2ludCwgdGhlcmUgaXMgYSBudW1iZXIgb2YgYWJzdHJhY3QgY2hhcmFjdGVyc1xuICAgIHRoYXQgY2FuIGluIGFkZGl0aW9uIGJlIHJlcHJlc2VudGVkIHVzaW5nIGEgc2VxdWVuY2Ugb2YgbW9yZSB0aGFuXG4gICAgb25lIGNvZGUgcG9pbnQuICBGb3IgZXhhbXBsZSwgdGhlIGFic3RyYWN0IGNoYXJhY3RlciAiTEFUSU5cbiAgICBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQSIgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgc2luZ2xlXG4gICAgKnByZWNvbXBvc2VkIGNoYXJhY3RlciogYXQgY29kZSBwb3NpdGlvbiBVKzAwQzcsIG9yIGFzIGEgc2VxdWVuY2VcbiAgICBvZiBhICpiYXNlIGNoYXJhY3RlciogYXQgY29kZSBwb3NpdGlvbiBVKzAwNDMgKExBVElOIENBUElUQUxcbiAgICBMRVRURVIgQyksIGZvbGxvd2VkIGJ5IGEgKmNvbWJpbmluZyBjaGFyYWN0ZXIqIGF0IGNvZGUgcG9zaXRpb25cbiAgICBVKzAzMjcgKENPTUJJTklORyBDRURJTExBKS5cblxuICAgIFRoZSBjb21wYXJpc29uIG9wZXJhdG9ycyBvbiBzdHJpbmdzIGNvbXBhcmUgYXQgdGhlIGxldmVsIG9mXG4gICAgVW5pY29kZSBjb2RlIHBvaW50cy4gVGhpcyBtYXkgYmUgY291bnRlci1pbnR1aXRpdmUgdG8gaHVtYW5zLiAgRm9yXG4gICAgZXhhbXBsZSwgIiJcXHUwMEM3IiA9PSAiXFx1MDA0M1xcdTAzMjciIiBpcyAiRmFsc2UiLCBldmVuIHRob3VnaCBib3RoXG4gICAgc3RyaW5ncyByZXByZXNlbnQgdGhlIHNhbWUgYWJzdHJhY3QgY2hhcmFjdGVyICJMQVRJTiBDQVBJVEFMXG4gICAgTEVUVEVSIEMgV0lUSCBDRURJTExBIi5cblxuICAgIFRvIGNvbXBhcmUgc3RyaW5ncyBhdCB0aGUgbGV2ZWwgb2YgYWJzdHJhY3QgY2hhcmFjdGVycyAodGhhdCBpcyxcbiAgICBpbiBhIHdheSBpbnR1aXRpdmUgdG8gaHVtYW5zKSwgdXNlICJ1bmljb2RlZGF0YS5ub3JtYWxpemUoKSIuXG5cbls0XSBEdWUgdG8gYXV0b21hdGljIGdhcmJhZ2UtY29sbGVjdGlvbiwgZnJlZSBsaXN0cywgYW5kIHRoZVxuICAgIGR5bmFtaWMgbmF0dXJlIG9mIGRlc2NyaXB0b3JzLCB5b3UgbWF5IG5vdGljZSBzZWVtaW5nbHkgdW51c3VhbFxuICAgIGJlaGF2aW91ciBpbiBjZXJ0YWluIHVzZXMgb2YgdGhlICJpcyIgb3BlcmF0b3IsIGxpa2UgdGhvc2VcbiAgICBpbnZvbHZpbmcgY29tcGFyaXNvbnMgYmV0d2VlbiBpbnN0YW5jZSBtZXRob2RzLCBvciBjb25zdGFudHMuXG4gICAgQ2hlY2sgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvLlxuXG5bNV0gVGhlICIlIiBvcGVyYXRvciBpcyBhbHNvIHVzZWQgZm9yIHN0cmluZyBmb3JtYXR0aW5nOyB0aGUgc2FtZVxuICAgIHByZWNlZGVuY2UgYXBwbGllcy5cblxuWzZdIFRoZSBwb3dlciBvcGVyYXRvciAiKioiIGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIGFuIGFyaXRobWV0aWNcbiAgICBvciBiaXR3aXNlIHVuYXJ5IG9wZXJhdG9yIG9uIGl0cyByaWdodCwgdGhhdCBpcywgIjIqKi0xIiBpcyAiMC41Ii5cbicsCiAgJ3Bhc3MnOiB1J1xuVGhlICJwYXNzIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHBhc3Nfc3RtdCA6Oj0gInBhc3MiXG5cbiJwYXNzIiBpcyBhIG51bGwgb3BlcmF0aW9uIC0tLSB3aGVuIGl0IGlzIGV4ZWN1dGVkLCBub3RoaW5nIGhhcHBlbnMuXG5JdCBpcyB1c2VmdWwgYXMgYSBwbGFjZWhvbGRlciB3aGVuIGEgc3RhdGVtZW50IGlzIHJlcXVpcmVkXG5zeW50YWN0aWNhbGx5LCBidXQgbm8gY29kZSBuZWVkcyB0byBiZSBleGVjdXRlZCwgZm9yIGV4YW1wbGU6XG5cbiAgIGRlZiBmKGFyZyk6IHBhc3MgICAgIyBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nICh5ZXQpXG5cbiAgIGNsYXNzIEM6IHBhc3MgICAgICAgIyBhIGNsYXNzIHdpdGggbm8gbWV0aG9kcyAoeWV0KVxuJywKLSAncG93ZXInOiB1J1xuVGhlIHBvd2VyIG9wZXJhdG9yXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIHBvd2VyIG9wZXJhdG9yIGJpbmRzIG1vcmUgdGlnaHRseSB0aGFuIHVuYXJ5IG9wZXJhdG9ycyBvbiBpdHNcbmxlZnQ7IGl0IGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIHVuYXJ5IG9wZXJhdG9ycyBvbiBpdHMgcmlnaHQuICBUaGVcbnN5bnRheCBpczpcblxuICAgcG93ZXIgOjo9IHByaW1hcnkgWyIqKiIgdV9leHByXVxuXG5UaHVzLCBpbiBhbiB1bnBhcmVudGhlc2l6ZWQgc2VxdWVuY2Ugb2YgcG93ZXIgYW5kIHVuYXJ5IG9wZXJhdG9ycywgdGhlXG5vcGVyYXRvcnMgYXJlIGV2YWx1YXRlZCBmcm9tIHJpZ2h0IHRvIGxlZnQgKHRoaXMgZG9lcyBub3QgY29uc3RyYWluXG50aGUgZXZhbHVhdGlvbiBvcmRlciBmb3IgdGhlIG9wZXJhbmRzKTogIi0xKioyIiByZXN1bHRzIGluICItMSIuXG5cblRoZSBwb3dlciBvcGVyYXRvciBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHRoZSBidWlsdC1pbiAicG93KCkiXG5mdW5jdGlvbiwgd2hlbiBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOiBpdCB5aWVsZHMgaXRzIGxlZnQgYXJndW1lbnRcbnJhaXNlZCB0byB0aGUgcG93ZXIgb2YgaXRzIHJpZ2h0IGFyZ3VtZW50LiAgVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZVxuZmlyc3QgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUsIGFuZCB0aGUgcmVzdWx0IGlzIG9mIHRoYXQgdHlwZS5cblxuRm9yIGludCBvcGVyYW5kcywgdGhlIHJlc3VsdCBoYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3BlcmFuZHMgdW5sZXNzXG50aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5lZ2F0aXZlOyBpbiB0aGF0IGNhc2UsIGFsbCBhcmd1bWVudHMgYXJlXG5jb252ZXJ0ZWQgdG8gZmxvYXQgYW5kIGEgZmxvYXQgcmVzdWx0IGlzIGRlbGl2ZXJlZC4gRm9yIGV4YW1wbGUsXG4iMTAqKjIiIHJldHVybnMgIjEwMCIsIGJ1dCAiMTAqKi0yIiByZXR1cm5zICIwLjAxIi5cblxuUmFpc2luZyAiMC4wIiB0byBhIG5lZ2F0aXZlIHBvd2VyIHJlc3VsdHMgaW4gYSAiWmVyb0RpdmlzaW9uRXJyb3IiLlxuUmFpc2luZyBhIG5lZ2F0aXZlIG51bWJlciB0byBhIGZyYWN0aW9uYWwgcG93ZXIgcmVzdWx0cyBpbiBhICJjb21wbGV4IlxubnVtYmVyLiAoSW4gZWFybGllciB2ZXJzaW9ucyBpdCByYWlzZWQgYSAiVmFsdWVFcnJvciIuKVxuJywKKyAncG93ZXInOiB1J1xuVGhlIHBvd2VyIG9wZXJhdG9yXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIHBvd2VyIG9wZXJhdG9yIGJpbmRzIG1vcmUgdGlnaHRseSB0aGFuIHVuYXJ5IG9wZXJhdG9ycyBvbiBpdHNcbmxlZnQ7IGl0IGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIHVuYXJ5IG9wZXJhdG9ycyBvbiBpdHMgcmlnaHQuICBUaGVcbnN5bnRheCBpczpcblxuICAgcG93ZXIgOjo9ICggYXdhaXRfZXhwciB8IHByaW1hcnkgKSBbIioqIiB1X2V4cHJdXG5cblRodXMsIGluIGFuIHVucGFyZW50aGVzaXplZCBzZXF1ZW5jZSBvZiBwb3dlciBhbmQgdW5hcnkgb3BlcmF0b3JzLCB0aGVcbm9wZXJhdG9ycyBhcmUgZXZhbHVhdGVkIGZyb20gcmlnaHQgdG8gbGVmdCAodGhpcyBkb2VzIG5vdCBjb25zdHJhaW5cbnRoZSBldmFsdWF0aW9uIG9yZGVyIGZvciB0aGUgb3BlcmFuZHMpOiAiLTEqKjIiIHJlc3VsdHMgaW4gIi0xIi5cblxuVGhlIHBvd2VyIG9wZXJhdG9yIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIGJ1aWx0LWluICJwb3coKSJcbmZ1bmN0aW9uLCB3aGVuIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IGl0IHlpZWxkcyBpdHMgbGVmdCBhcmd1bWVudFxucmFpc2VkIHRvIHRoZSBwb3dlciBvZiBpdHMgcmlnaHQgYXJndW1lbnQuICBUaGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlXG5maXJzdCBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwgYW5kIHRoZSByZXN1bHQgaXMgb2YgdGhhdCB0eXBlLlxuXG5Gb3IgaW50IG9wZXJhbmRzLCB0aGUgcmVzdWx0IGhhcyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBvcGVyYW5kcyB1bmxlc3NcbnRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbmVnYXRpdmU7IGluIHRoYXQgY2FzZSwgYWxsIGFyZ3VtZW50cyBhcmVcbmNvbnZlcnRlZCB0byBmbG9hdCBhbmQgYSBmbG9hdCByZXN1bHQgaXMgZGVsaXZlcmVkLiBGb3IgZXhhbXBsZSxcbiIxMCoqMiIgcmV0dXJucyAiMTAwIiwgYnV0ICIxMCoqLTIiIHJldHVybnMgIjAuMDEiLlxuXG5SYWlzaW5nICIwLjAiIHRvIGEgbmVnYXRpdmUgcG93ZXIgcmVzdWx0cyBpbiBhICJaZXJvRGl2aXNpb25FcnJvciIuXG5SYWlzaW5nIGEgbmVnYXRpdmUgbnVtYmVyIHRvIGEgZnJhY3Rpb25hbCBwb3dlciByZXN1bHRzIGluIGEgImNvbXBsZXgiXG5udW1iZXIuIChJbiBlYXJsaWVyIHZlcnNpb25zIGl0IHJhaXNlZCBhICJWYWx1ZUVycm9yIi4pXG4nLAogICdyYWlzZSc6IHUnXG5UaGUgInJhaXNlIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICByYWlzZV9zdG10IDo6PSAicmFpc2UiIFtleHByZXNzaW9uIFsiZnJvbSIgZXhwcmVzc2lvbl1dXG5cbklmIG5vIGV4cHJlc3Npb25zIGFyZSBwcmVzZW50LCAicmFpc2UiIHJlLXJhaXNlcyB0aGUgbGFzdCBleGNlcHRpb25cbnRoYXQgd2FzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCBzY29wZS4gIElmIG5vIGV4Y2VwdGlvbiBpcyBhY3RpdmUgaW5cbnRoZSBjdXJyZW50IHNjb3BlLCBhICJSdW50aW1lRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW5kaWNhdGluZ1xudGhhdCB0aGlzIGlzIGFuIGVycm9yLlxuXG5PdGhlcndpc2UsICJyYWlzZSIgZXZhbHVhdGVzIHRoZSBmaXJzdCBleHByZXNzaW9uIGFzIHRoZSBleGNlcHRpb25cbm9iamVjdC4gIEl0IG11c3QgYmUgZWl0aGVyIGEgc3ViY2xhc3Mgb3IgYW4gaW5zdGFuY2Ugb2ZcbiJCYXNlRXhjZXB0aW9uIi4gSWYgaXQgaXMgYSBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aWxsIGJlXG5vYnRhaW5lZCB3aGVuIG5lZWRlZCBieSBpbnN0YW50aWF0aW5nIHRoZSBjbGFzcyB3aXRoIG5vIGFyZ3VtZW50cy5cblxuVGhlICp0eXBlKiBvZiB0aGUgZXhjZXB0aW9uIGlzIHRoZSBleGNlcHRpb24gaW5zdGFuY2VcJ3MgY2xhc3MsIHRoZVxuKnZhbHVlKiBpcyB0aGUgaW5zdGFuY2UgaXRzZWxmLlxuXG5BIHRyYWNlYmFjayBvYmplY3QgaXMgbm9ybWFsbHkgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYW4gZXhjZXB0aW9uXG5pcyByYWlzZWQgYW5kIGF0dGFjaGVkIHRvIGl0IGFzIHRoZSAiX190cmFjZWJhY2tfXyIgYXR0cmlidXRlLCB3aGljaFxuaXMgd3JpdGFibGUuIFlvdSBjYW4gY3JlYXRlIGFuIGV4Y2VwdGlvbiBhbmQgc2V0IHlvdXIgb3duIHRyYWNlYmFjayBpblxub25lIHN0ZXAgdXNpbmcgdGhlICJ3aXRoX3RyYWNlYmFjaygpIiBleGNlcHRpb24gbWV0aG9kICh3aGljaCByZXR1cm5zXG50aGUgc2FtZSBleGNlcHRpb24gaW5zdGFuY2UsIHdpdGggaXRzIHRyYWNlYmFjayBzZXQgdG8gaXRzIGFyZ3VtZW50KSxcbmxpa2Ugc286XG5cbiAgIHJhaXNlIEV4Y2VwdGlvbigiZm9vIG9jY3VycmVkIikud2l0aF90cmFjZWJhY2sodHJhY2ViYWNrb2JqKVxuXG5UaGUgImZyb20iIGNsYXVzZSBpcyB1c2VkIGZvciBleGNlcHRpb24gY2hhaW5pbmc6IGlmIGdpdmVuLCB0aGUgc2Vjb25kXG4qZXhwcmVzc2lvbiogbXVzdCBiZSBhbm90aGVyIGV4Y2VwdGlvbiBjbGFzcyBvciBpbnN0YW5jZSwgd2hpY2ggd2lsbFxudGhlbiBiZSBhdHRhY2hlZCB0byB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBhcyB0aGUgIl9fY2F1c2VfXyIgYXR0cmlidXRlXG4od2hpY2ggaXMgd3JpdGFibGUpLiAgSWYgdGhlIHJhaXNlZCBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQsIGJvdGhcbmV4Y2VwdGlvbnMgd2lsbCBiZSBwcmludGVkOlxuXG4gICA+Pj4gdHJ5OlxuICAgLi4uICAgICBwcmludCgxIC8gMClcbiAgIC4uLiBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIikgZnJvbSBleGNcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOlxuXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDQsIGluIDxtb2R1bGU+XG4gICBSdW50aW1lRXJyb3I6IFNvbWV0aGluZyBiYWQgaGFwcGVuZWRcblxuQSBzaW1pbGFyIG1lY2hhbmlzbSB3b3JrcyBpbXBsaWNpdGx5IGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW5zaWRlXG5hbiBleGNlcHRpb24gaGFuZGxlciBvciBhICJmaW5hbGx5IiBjbGF1c2U6IHRoZSBwcmV2aW91cyBleGNlcHRpb24gaXNcbnRoZW4gYXR0YWNoZWQgYXMgdGhlIG5ldyBleGNlcHRpb25cJ3MgIl9fY29udGV4dF9fIiBhdHRyaWJ1dGU6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdDpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIilcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhhbmRsaW5nIGV4Y2VwdGlvbnMgaXMgaW4gc2VjdGlvblxuKlRoZSB0cnkgc3RhdGVtZW50Ki5cbicsCiAgJ3JldHVybic6IHUnXG5UaGUgInJldHVybiIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJldHVybl9zdG10IDo6PSAicmV0dXJuIiBbZXhwcmVzc2lvbl9saXN0XVxuXG4icmV0dXJuIiBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sXG5ub3Qgd2l0aGluIGEgbmVzdGVkIGNsYXNzIGRlZmluaXRpb24uXG5cbklmIGFuIGV4cHJlc3Npb24gbGlzdCBpcyBwcmVzZW50LCBpdCBpcyBldmFsdWF0ZWQsIGVsc2UgIk5vbmUiIGlzXG5zdWJzdGl0dXRlZC5cblxuInJldHVybiIgbGVhdmVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgd2l0aCB0aGUgZXhwcmVzc2lvbiBsaXN0IChvclxuIk5vbmUiKSBhcyByZXR1cm4gdmFsdWUuXG5cbldoZW4gInJldHVybiIgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgInRyeSIgc3RhdGVtZW50IHdpdGggYSAiZmluYWxseSJcbmNsYXVzZSwgdGhhdCAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHkgbGVhdmluZyB0aGVcbmZ1bmN0aW9uLlxuXG5JbiBhIGdlbmVyYXRvciBmdW5jdGlvbiwgdGhlICJyZXR1cm4iIHN0YXRlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGVcbmdlbmVyYXRvciBpcyBkb25lIGFuZCB3aWxsIGNhdXNlICJTdG9wSXRlcmF0aW9uIiB0byBiZSByYWlzZWQuIFRoZVxucmV0dXJuZWQgdmFsdWUgKGlmIGFueSkgaXMgdXNlZCBhcyBhbiBhcmd1bWVudCB0byBjb25zdHJ1Y3RcbiJTdG9wSXRlcmF0aW9uIiBhbmQgYmVjb21lcyB0aGUgIlN0b3BJdGVyYXRpb24udmFsdWUiIGF0dHJpYnV0ZS5cbicsCiAgJ3NlcXVlbmNlLXR5cGVzJzogdSdcbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggIjAgPD0gayA8IE4iIHdoZXJlXG4qTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoIGRlZmluZSBhXG5yYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlIHRoZVxubWV0aG9kcyAia2V5cygpIiwgInZhbHVlcygpIiwgIml0ZW1zKCkiLCAiZ2V0KCkiLCAiY2xlYXIoKSIsXG4ic2V0ZGVmYXVsdCgpIiwgInBvcCgpIiwgInBvcGl0ZW0oKSIsICJjb3B5KCkiLCBhbmQgInVwZGF0ZSgpIlxuYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkIGRpY3Rpb25hcnkgb2JqZWN0cy5cblRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZSBwcm92aWRlcyBhICJNdXRhYmxlTWFwcGluZyIgYWJzdHJhY3QgYmFzZVxuY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kcyBmcm9tIGEgYmFzZSBzZXQgb2YgIl9fZ2V0aXRlbV9fKCkiLFxuIl9fc2V0aXRlbV9fKCkiLCAiX19kZWxpdGVtX18oKSIsIGFuZCAia2V5cygpIi4gTXV0YWJsZSBzZXF1ZW5jZXNcbnNob3VsZCBwcm92aWRlIG1ldGhvZHMgImFwcGVuZCgpIiwgImNvdW50KCkiLCAiaW5kZXgoKSIsICJleHRlbmQoKSIsXG4iaW5zZXJ0KCkiLCAicG9wKCkiLCAicmVtb3ZlKCkiLCAicmV2ZXJzZSgpIiBhbmQgInNvcnQoKSIsIGxpa2UgUHl0aG9uXG5zdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGQgaW1wbGVtZW50XG5hZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzICJfX2FkZF9fKCkiLCAiX19yYWRkX18oKSIsXG4iX19pYWRkX18oKSIsICJfX211bF9fKCkiLCAiX19ybXVsX18oKSIgYW5kICJfX2ltdWxfXygpIiBkZXNjcmliZWRcbmJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdCBpc1xucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuIl9fY29udGFpbnNfXygpIiBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgImluIiBvcGVyYXRvcjtcbmZvciBtYXBwaW5ncywgImluIiBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvciBzZXF1ZW5jZXMsIGl0XG5zaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXIgcmVjb21tZW5kZWQgdGhhdCBib3RoXG5tYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGUgIl9faXRlcl9fKCkiIG1ldGhvZCB0byBhbGxvd1xuZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBjb250YWluZXI7IGZvciBtYXBwaW5ncywgIl9faXRlcl9fKCkiXG5zaG91bGQgYmUgdGhlIHNhbWUgYXMgImtleXMoKSI7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlXG50aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSIuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgIj49IiAwLiAgQWxzbywgYW4gb2JqZWN0IHRoYXRcbiAgIGRvZXNuXCd0IGRlZmluZSBhICJfX2Jvb2xfXygpIiBtZXRob2QgYW5kIHdob3NlICJfX2xlbl9fKCkiIG1ldGhvZFxuICAgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IubGVuZ3RoX2hpbnQoKSIuIFNob3VsZCByZXR1cm4gYW5cbiAgIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKHdoaWNoIG1heSBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuICAgdGhlIGFjdHVhbCBsZW5ndGgpLiBUaGUgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlciAiPj0iIDAuIFRoaXNcbiAgIG1ldGhvZCBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3JcbiAgIGNvcnJlY3RuZXNzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbk5vdGU6IFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy5cbiAgQSBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aCAiTm9uZSIuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiAic2VsZltrZXldIi4gRm9yIHNlcXVlbmNlIHR5cGVzLFxuICAgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLiAgTm90ZSB0aGF0XG4gICB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGUgY2xhc3Mgd2lzaGVzXG4gICB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuIElmXG4gICAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsICJUeXBlRXJyb3IiIG1heSBiZSByYWlzZWQ7IGlmIG9mXG4gICBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZiBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueVxuICAgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSB2YWx1ZXMpLCAiSW5kZXhFcnJvciIgc2hvdWxkIGJlXG4gICByYWlzZWQuIEZvciBtYXBwaW5nIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlXG4gICBjb250YWluZXIpLCAiS2V5RXJyb3IiIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6ICJmb3IiIGxvb3BzIGV4cGVjdCB0aGF0IGFuICJJbmRleEVycm9yIiB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX21pc3NpbmdfXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCBieSAiZGljdCIuIl9fZ2V0aXRlbV9fKCkiIHRvIGltcGxlbWVudCAic2VsZltrZXldIiBmb3IgZGljdFxuICAgc3ViY2xhc3NlcyB3aGVuIGtleSBpcyBub3QgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlICJyZXZlcnNlZCgpIiBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgIl9fcmV2ZXJzZWRfXygpIiBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGUgInJldmVyc2VkKCkiXG4gICBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgKCJfX2xlbl9fKCkiXG4gICBhbmQgIl9fZ2V0aXRlbV9fKCkiKS4gIE9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbFxuICAgc2hvdWxkIG9ubHkgcHJvdmlkZSAiX19yZXZlcnNlZF9fKCkiIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW5cbiAgIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5XG4gICAicmV2ZXJzZWQoKSIuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzICgiaW4iIGFuZCAibm90IGluIikgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIsIHRoZSBtZW1iZXJzaGlwIHRlc3RcbiAgIGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgIl9faXRlcl9fKCkiLCB0aGVuIHRoZSBvbGQgc2VxdWVuY2VcbiAgIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgIl9fZ2V0aXRlbV9fKCkiLCBzZWUgKnRoaXMgc2VjdGlvbiBpbiB0aGVcbiAgIGxhbmd1YWdlIHJlZmVyZW5jZSouXG4nLAogICdzaGlmdGluZyc6IHUnXG5TaGlmdGluZyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBzaGlmdGluZyBvcGVyYXRpb25zIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgYXJpdGhtZXRpY1xub3BlcmF0aW9uczpcblxuICAgc2hpZnRfZXhwciA6Oj0gYV9leHByIHwgc2hpZnRfZXhwciAoICI8PCIgfCAiPj4iICkgYV9leHByXG5cblRoZXNlIG9wZXJhdG9ycyBhY2NlcHQgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGZsb29yIGRpdmlzaW9uIGJ5ICJwb3coMixuKSIuXG5BIGxlZnQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBtdWx0aXBsaWNhdGlvbiB3aXRoICJwb3coMixuKSIuXG5cbk5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzXG4gIHJlcXVpcmVkIHRvIGJlIGF0IG1vc3QgInN5cy5tYXhzaXplIi4gIElmIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXNcbiAgbGFyZ2VyIHRoYW4gInN5cy5tYXhzaXplIiBhbiAiT3ZlcmZsb3dFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbicsCiAgJ3NsaWNpbmdzJzogdSdcblNsaWNpbmdzXG4qKioqKioqKlxuXG5BIHNsaWNpbmcgc2VsZWN0cyBhIHJhbmdlIG9mIGl0ZW1zIGluIGEgc2VxdWVuY2Ugb2JqZWN0IChlLmcuLCBhXG5zdHJpbmcsIHR1cGxlIG9yIGxpc3QpLiAgU2xpY2luZ3MgbWF5IGJlIHVzZWQgYXMgZXhwcmVzc2lvbnMgb3IgYXNcbnRhcmdldHMgaW4gYXNzaWdubWVudCBvciAiZGVsIiBzdGF0ZW1lbnRzLiAgVGhlIHN5bnRheCBmb3IgYSBzbGljaW5nOlxuXG4gICBzbGljaW5nICAgICAgOjo9IHByaW1hcnkgIlsiIHNsaWNlX2xpc3QgIl0iXG4gICBzbGljZV9saXN0ICAgOjo9IHNsaWNlX2l0ZW0gKCIsIiBzbGljZV9pdGVtKSogWyIsIl1cbiAgIHNsaWNlX2l0ZW0gICA6Oj0gZXhwcmVzc2lvbiB8IHByb3Blcl9zbGljZVxuICAgcHJvcGVyX3NsaWNlIDo6PSBbbG93ZXJfYm91bmRdICI6IiBbdXBwZXJfYm91bmRdIFsgIjoiIFtzdHJpZGVdIF1cbiAgIGxvd2VyX2JvdW5kICA6Oj0gZXhwcmVzc2lvblxuICAgdXBwZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICBzdHJpZGUgICAgICAgOjo9IGV4cHJlc3Npb25cblxuVGhlcmUgaXMgYW1iaWd1aXR5IGluIHRoZSBmb3JtYWwgc3ludGF4IGhlcmU6IGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZVxuYW4gZXhwcmVzc2lvbiBsaXN0IGFsc28gbG9va3MgbGlrZSBhIHNsaWNlIGxpc3QsIHNvIGFueSBzdWJzY3JpcHRpb25cbmNhbiBiZSBpbnRlcnByZXRlZCBhcyBhIHNsaWNpbmcuICBSYXRoZXIgdGhhbiBmdXJ0aGVyIGNvbXBsaWNhdGluZyB0aGVcbnN5bnRheCwgdGhpcyBpcyBkaXNhbWJpZ3VhdGVkIGJ5IGRlZmluaW5nIHRoYXQgaW4gdGhpcyBjYXNlIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzdWJzY3JpcHRpb24gdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGVcbmludGVycHJldGF0aW9uIGFzIGEgc2xpY2luZyAodGhpcyBpcyB0aGUgY2FzZSBpZiB0aGUgc2xpY2UgbGlzdFxuY29udGFpbnMgbm8gcHJvcGVyIHNsaWNlKS5cblxuVGhlIHNlbWFudGljcyBmb3IgYSBzbGljaW5nIGFyZSBhcyBmb2xsb3dzLiAgVGhlIHByaW1hcnkgaXMgaW5kZXhlZFxuKHVzaW5nIHRoZSBzYW1lICJfX2dldGl0ZW1fXygpIiBtZXRob2QgYXMgbm9ybWFsIHN1YnNjcmlwdGlvbikgd2l0aCBhXG5rZXkgdGhhdCBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBzbGljZSBsaXN0LCBhcyBmb2xsb3dzLiAgSWYgdGhlIHNsaWNlXG5saXN0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBjb21tYSwgdGhlIGtleSBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlXG5jb252ZXJzaW9uIG9mIHRoZSBzbGljZSBpdGVtczsgb3RoZXJ3aXNlLCB0aGUgY29udmVyc2lvbiBvZiB0aGUgbG9uZVxuc2xpY2UgaXRlbSBpcyB0aGUga2V5LiAgVGhlIGNvbnZlcnNpb24gb2YgYSBzbGljZSBpdGVtIHRoYXQgaXMgYW5cbmV4cHJlc3Npb24gaXMgdGhhdCBleHByZXNzaW9uLiAgVGhlIGNvbnZlcnNpb24gb2YgYSBwcm9wZXIgc2xpY2UgaXMgYVxuc2xpY2Ugb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kikgd2hvc2VcbiJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiIGF0dHJpYnV0ZXMgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlXG5leHByZXNzaW9ucyBnaXZlbiBhcyBsb3dlciBib3VuZCwgdXBwZXIgYm91bmQgYW5kIHN0cmlkZSxcbnJlc3BlY3RpdmVseSwgc3Vic3RpdHV0aW5nICJOb25lIiBmb3IgbWlzc2luZyBleHByZXNzaW9ucy5cbicsCiAgJ3NwZWNpYWxhdHRycyc6IHUnXG5TcGVjaWFsIEF0dHJpYnV0ZXNcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgaW1wbGVtZW50YXRpb24gYWRkcyBhIGZldyBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRvIHNldmVyYWxcbm9iamVjdCB0eXBlcywgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuICBTb21lIG9mIHRoZXNlIGFyZSBub3QgcmVwb3J0ZWRcbmJ5IHRoZSAiZGlyKCkiIGJ1aWx0LWluIGZ1bmN0aW9uLlxuXG5vYmplY3QuX19kaWN0X19cblxuICAgQSBkaWN0aW9uYXJ5IG9yIG90aGVyIG1hcHBpbmcgb2JqZWN0IHVzZWQgdG8gc3RvcmUgYW4gb2JqZWN0XCdzXG4gICAod3JpdGFibGUpIGF0dHJpYnV0ZXMuXG5cbmluc3RhbmNlLl9fY2xhc3NfX1xuXG4gICBUaGUgY2xhc3MgdG8gd2hpY2ggYSBjbGFzcyBpbnN0YW5jZSBiZWxvbmdzLlxuXG5jbGFzcy5fX2Jhc2VzX19cblxuICAgVGhlIHR1cGxlIG9mIGJhc2UgY2xhc3NlcyBvZiBhIGNsYXNzIG9iamVjdC5cblxuY2xhc3MuX19uYW1lX19cblxuICAgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9yIHR5cGUuXG5cbmNsYXNzLl9fcXVhbG5hbWVfX1xuXG4gICBUaGUgKnF1YWxpZmllZCBuYW1lKiBvZiB0aGUgY2xhc3Mgb3IgdHlwZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5jbGFzcy5fX21yb19fXG5cbiAgIFRoaXMgYXR0cmlidXRlIGlzIGEgdHVwbGUgb2YgY2xhc3NlcyB0aGF0IGFyZSBjb25zaWRlcmVkIHdoZW5cbiAgIGxvb2tpbmcgZm9yIGJhc2UgY2xhc3NlcyBkdXJpbmcgbWV0aG9kIHJlc29sdXRpb24uXG5cbmNsYXNzLm1ybygpXG5cbiAgIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgbWV0YWNsYXNzIHRvIGN1c3RvbWl6ZSB0aGVcbiAgIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyIGZvciBpdHMgaW5zdGFuY2VzLiAgSXQgaXMgY2FsbGVkIGF0IGNsYXNzXG4gICBpbnN0YW50aWF0aW9uLCBhbmQgaXRzIHJlc3VsdCBpcyBzdG9yZWQgaW4gIl9fbXJvX18iLlxuXG5jbGFzcy5fX3N1YmNsYXNzZXNfXygpXG5cbiAgIEVhY2ggY2xhc3Mga2VlcHMgYSBsaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgaW1tZWRpYXRlXG4gICBzdWJjbGFzc2VzLiAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRob3NlIHJlZmVyZW5jZXNcbiAgIHN0aWxsIGFsaXZlLiBFeGFtcGxlOlxuXG4gICAgICA+Pj4gaW50Ll9fc3ViY2xhc3Nlc19fKClcbiAgICAgIFs8Y2xhc3MgXCdib29sXCc+XVxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlc2Ugc3BlY2lhbCBtZXRob2RzIG1heSBiZSBmb3VuZFxuICAgIGluIHRoZSBQeXRob24gUmVmZXJlbmNlIE1hbnVhbCAoKkJhc2ljIGN1c3RvbWl6YXRpb24qKS5cblxuWzJdIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBsaXN0ICJbMSwgMl0iIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG9cbiAgICAiWzEuMCwgMi4wXSIsIGFuZCBzaW1pbGFybHkgZm9yIHR1cGxlcy5cblxuWzNdIFRoZXkgbXVzdCBoYXZlIHNpbmNlIHRoZSBwYXJzZXIgY2FuXCd0IHRlbGwgdGhlIHR5cGUgb2YgdGhlXG4gICAgb3BlcmFuZHMuXG5cbls0XSBDYXNlZCBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHlcbiAgICBiZWluZyBvbmUgb2YgIkx1IiAoTGV0dGVyLCB1cHBlcmNhc2UpLCAiTGwiIChMZXR0ZXIsIGxvd2VyY2FzZSksXG4gICAgb3IgIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG5bNV0gVG8gZm9ybWF0IG9ubHkgYSB0dXBsZSB5b3Ugc2hvdWxkIHRoZXJlZm9yZSBwcm92aWRlIGFcbiAgICBzaW5nbGV0b24gdHVwbGUgd2hvc2Ugb25seSBlbGVtZW50IGlzIHRoZSB0dXBsZSB0byBiZSBmb3JtYXR0ZWQuXG4nLAotICdzcGVjaWFsbmFtZXMnOiB1J1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkICJfX2dldGl0ZW1fXygpIiwgYW5kICJ4IiBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLFxudGhlbiAieFtpXSIgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvICJ0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsIGkpIi5cbkV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlIGFuXG5leGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG4iQXR0cmlidXRlRXJyb3IiIG9yICJUeXBlRXJyb3IiKS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgYSBjbGFzcyB0aGF0IGVtdWxhdGVzIGFueSBidWlsdC1pbiB0eXBlLCBpdCBpc1xuaW1wb3J0YW50IHRoYXQgdGhlIGVtdWxhdGlvbiBvbmx5IGJlIGltcGxlbWVudGVkIHRvIHRoZSBkZWdyZWUgdGhhdCBpdFxubWFrZXMgc2Vuc2UgZm9yIHRoZSBvYmplY3QgYmVpbmcgbW9kZWxsZWQuICBGb3IgZXhhbXBsZSwgc29tZVxuc2VxdWVuY2VzIG1heSB3b3JrIHdlbGwgd2l0aCByZXRyaWV2YWwgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgYnV0XG5leHRyYWN0aW5nIGEgc2xpY2UgbWF5IG5vdCBtYWtlIHNlbnNlLiAgKE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgdGhlXG4iTm9kZUxpc3QiIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgIl9fbmV3X18oKSIgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgIl9fbmV3X18oKSIgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5IGFuXG4gICBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCB1c2luZ1xuICAgInN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pIiB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgIl9fbmV3X18oKSIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICAiX19pbml0X18oc2VsZlssIC4uLl0pIiwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIuXG5cbiAgIElmICJfX25ld19fKCkiIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgICJfX25ld19fKCkiIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCBhZnRlciB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gY3JlYXRlZCAoYnkgIl9fbmV3X18oKSIpLCBidXRcbiAgIGJlZm9yZSBpdCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgICJfX2luaXRfXygpIiBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzICJfX2luaXRfXygpIiBtZXRob2QsIGlmXG4gICBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlXG4gICBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgICJCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKSIuXG5cbiAgIEJlY2F1c2UgIl9fbmV3X18oKSIgYW5kICJfX2luaXRfXygpIiB3b3JrIHRvZ2V0aGVyIGluIGNvbnN0cnVjdGluZ1xuICAgb2JqZWN0cyAoIl9fbmV3X18oKSIgdG8gY3JlYXRlIGl0LCBhbmQgIl9faW5pdF9fKCkiIHRvIGN1c3RvbWlzZVxuICAgaXQpLCBubyBub24tIk5vbmUiIHZhbHVlIG1heSBiZSByZXR1cm5lZCBieSAiX19pbml0X18oKSI7IGRvaW5nIHNvXG4gICB3aWxsIGNhdXNlIGEgIlR5cGVFcnJvciIgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgIl9fZGVsX18oKSIgbWV0aG9kLCB0aGVcbiAgIGRlcml2ZWQgY2xhc3NcJ3MgIl9fZGVsX18oKSIgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0XG4gICB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlLlxuICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yIHRoZVxuICAgIl9fZGVsX18oKSIgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogImRlbCB4IiBkb2VzblwndCBkaXJlY3RseSBjYWxsICJ4Ll9fZGVsX18oKSIgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciAieCIgYnkgb25lLCBhbmQgdGhlIGxhdHRlciBpc1xuICAgICBvbmx5IGNhbGxlZCB3aGVuICJ4IlwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZSBjb21tb25cbiAgICAgc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW4gb2JqZWN0IGZyb21cbiAgICAgZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gb2JqZWN0cyAoZS5nLixcbiAgICAgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggcGFyZW50IGFuZFxuICAgICBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIG9mXG4gICAgIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmV4Y19pbmZvKClbMl0iIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yIGEgcmVmZXJlbmNlXG4gICAgIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZFxuICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgc2Vjb25kIGNhbiBiZSByZXNvbHZlZCBieSBmcmVlaW5nIHRoZSByZWZlcmVuY2UgdG8gdGhlXG4gICAgIHRyYWNlYmFjayBvYmplY3Qgd2hlbiBpdCBpcyBubyBsb25nZXIgdXNlZnVsLCBhbmQgdGhlIHRoaXJkIGNhblxuICAgICBiZSByZXNvbHZlZCBieSBzdG9yaW5nICJOb25lIiBpbiAic3lzLmxhc3RfdHJhY2ViYWNrIi4gQ2lyY3VsYXJcbiAgICAgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbiB0aGVcbiAgICAgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlclxuICAgICB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlICJnYyIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAgIGFib3V0IHRoaXMgdG9waWMuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoXG4gICAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmdcbiAgICAgdGhlaXIgZXhlY3V0aW9uIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG9cbiAgICAgInN5cy5zdGRlcnIiIGluc3RlYWQuIEFsc28sIHdoZW4gIl9fZGVsX18oKSIgaXMgaW52b2tlZCBpblxuICAgICByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZyBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGVcbiAgICAgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXIgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSAiX19kZWxfXygpIlxuICAgICBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmdcbiAgICAgdG9ybiBkb3duIChlLmcuIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXNcbiAgICAgcmVhc29uLCAiX19kZWxfXygpIiBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWRcbiAgICAgdG8gbWFpbnRhaW4gZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsXG4gICAgIFB5dGhvbiBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlICJfX2RlbF9fKCkiIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlICJyZXByKCkiIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlICJvZmZpY2lhbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsIHRoaXNcbiAgIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG9cbiAgIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICAiPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPiIgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzICJfX3JlcHJfXygpIiBidXRcbiAgIG5vdCAiX19zdHJfXygpIiwgdGhlbiAiX19yZXByX18oKSIgaXMgYWxzbyB1c2VkIHdoZW4gYW4gImluZm9ybWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAic3RyKG9iamVjdCkiIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJmb3JtYXQoKSIgYW5kXG4gICAicHJpbnQoKSIgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlIHN0cmluZ1xuICAgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgKnN0cmluZypcbiAgIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tICJvYmplY3QuX19yZXByX18oKSIgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCAiX19zdHJfXygpIiByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgIm9iamVjdCJcbiAgIGNhbGxzICJvYmplY3QuX19yZXByX18oKSIuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJieXRlcygpIiB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgImJ5dGVzIiBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlICJmb3JtYXQoKSIgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgInN0ci5mb3JtYXQoKSIgbWV0aG9kIG9mIGNsYXNzICJzdHIiKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIGFcbiAgIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIHVwIHRvXG4gICB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgIl9fZm9ybWF0X18oKSIsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzIHdpbGxcbiAgIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yIHVzZSBhXG4gICBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy40OiBUaGUgX19mb3JtYXRfXyBtZXRob2Qgb2YgIm9iamVjdCIgaXRzZWxmXG4gICByYWlzZXMgYSAiVHlwZUVycm9yIiBpZiBwYXNzZWQgYW55IG5vbi1lbXB0eSBzdHJpbmcuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBCeSBkZWZhdWx0LCAiX19uZV9fKCkiIGRlbGVnYXRlcyB0byAiX19lcV9fKCkiIGFuZCBpbnZlcnRzIHRoZVxuICAgcmVzdWx0IHVubGVzcyBpdCBpcyAiTm90SW1wbGVtZW50ZWQiLiAgVGhlcmUgYXJlIG5vIG90aGVyIGltcGxpZWRcbiAgIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBmb3IgZXhhbXBsZSwgdGhlXG4gICB0cnV0aCBvZiAiKHg8eSBvciB4PT15KSIgZG9lcyBub3QgaW1wbHkgIng8PXkiLiBUbyBhdXRvbWF0aWNhbGx5XG4gICBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdCBvcGVyYXRpb24sIHNlZVxuICAgImZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpIi5cblxuICAgU2VlIHRoZSBwYXJhZ3JhcGggb24gIl9faGFzaF9fKCkiIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCAiX19sdF9fKCkiIGFuZCAiX19ndF9fKCkiIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCAiX19sZV9fKCkiIGFuZCAiX19nZV9fKCkiIGFyZSBlYWNoIG90aGVyXCdzIHJlZmxlY3Rpb24sXG4gICBhbmQgIl9fZXFfXygpIiBhbmQgIl9fbmVfXygpIiBhcmUgdGhlaXIgb3duIHJlZmxlY3Rpb24uIElmIHRoZVxuICAgb3BlcmFuZHMgYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYW5kIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhXG4gICBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwncyB0eXBlLCB0aGVcbiAgIHJlZmxlY3RlZCBtZXRob2Qgb2YgdGhlIHJpZ2h0IG9wZXJhbmQgaGFzIHByaW9yaXR5LCBvdGhlcndpc2UgdGhlXG4gICBsZWZ0IG9wZXJhbmRcJ3MgbWV0aG9kIGhhcyBwcmlvcml0eS4gIFZpcnR1YWwgc3ViY2xhc3NpbmcgaXMgbm90XG4gICBjb25zaWRlcmVkLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3NcbiAgICAgY3VzdG9tICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzXG4gICAgIGlzIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0XG4gICAgIGJ1aWxkcy4gSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkc1xuICAgICBvZiBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGxcbiAgICAgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jXG4gICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiLlxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiAiX19lcV9fKCkiIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSAiX19oYXNoX18oKSIgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lcyAiX19lcV9fKCkiXG4gICBidXQgbm90ICJfX2hhc2hfXygpIiwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZSB1c2FibGUgYXMgaXRlbXMgaW5cbiAgIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzIG11dGFibGUgb2JqZWN0cyBhbmRcbiAgIGltcGxlbWVudHMgYW4gIl9fZXFfXygpIiBtZXRob2QsIGl0IHNob3VsZCBub3QgaW1wbGVtZW50XG4gICAiX19oYXNoX18oKSIsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZSBjb2xsZWN0aW9uc1xuICAgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlIG9iamVjdFwncyBoYXNoXG4gICB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgIl9fZXFfXygpIiBhbmQgIl9faGFzaF9fKCkiIG1ldGhvZHMgYnlcbiAgIGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kICJ4Ll9faGFzaF9fKCkiIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCAieCA9PSB5IiBpbXBsaWVzIGJvdGggdGhhdCAieCBpcyB5IiBhbmQgImhhc2goeCkgPT0gaGFzaCh5KSIuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBhbmQgZG9lcyBub3QgZGVmaW5lICJfX2hhc2hfXygpIlxuICAgd2lsbCBoYXZlIGl0cyAiX19oYXNoX18oKSIgaW1wbGljaXRseSBzZXQgdG8gIk5vbmUiLiAgV2hlbiB0aGVcbiAgICJfX2hhc2hfXygpIiBtZXRob2Qgb2YgYSBjbGFzcyBpcyAiTm9uZSIsIGluc3RhbmNlcyBvZiB0aGUgY2xhc3NcbiAgIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgIlR5cGVFcnJvciIgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG9cbiAgIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiAiX19oYXNoX18oKSIgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlIGludGVycHJldGVyXG4gICBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgIl9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX18iLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgIl9fZXFfXygpIiB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgIl9faGFzaF9fID0gTm9uZSIgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biAiX19oYXNoX18oKSIgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSAiVHlwZUVycm9yIiB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICBoYXNoYWJsZSBieSBhbiAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSIgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlICJfX2hhc2hfXygpIiB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmRcbiAgICAgZGF0ZXRpbWUgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyAiUFlUSE9OSEFTSFNFRUQiLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICAiYm9vbCgpIjsgc2hvdWxkIHJldHVybiAiRmFsc2UiIG9yICJUcnVlIi4gIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90XG4gICBkZWZpbmVkLCAiX19sZW5fXygpIiBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGUgb2JqZWN0IGlzXG4gICBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBuZWl0aGVyICJfX2xlbl9fKCkiIG5vciAiX19ib29sX18oKSIsIGFsbCBpdHMgaW5zdGFuY2VzIGFyZVxuICAgY29uc2lkZXJlZCB0cnVlLlxuXG5cbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiAieC5uYW1lIikgZm9yXG5jbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yICJzZWxmIikuICAibmFtZSIgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLiBUaGlzXG4gICBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgIl9fZ2V0YXR0cl9fKCkiIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gIl9fZ2V0YXR0cl9fKCkiIGFuZCAiX19zZXRhdHRyX18oKSIuKSBUaGlzIGlzIGRvbmUgYm90aCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgIl9fZ2V0YXR0cl9fKCkiIHdvdWxkIGhhdmVcbiAgIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlIHRoYXQgYXRcbiAgIGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5IG5vdFxuICAgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgb3ZlciBhdHRyaWJ1dGUgYWNjZXNzLlxuXG5vYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgdW5jb25kaXRpb25hbGx5IHRvIGltcGxlbWVudCBhdHRyaWJ1dGUgYWNjZXNzZXMgZm9yXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLiBJZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzICJfX2dldGF0dHJfXygpIixcbiAgIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzcyAiX19nZXRhdHRyaWJ1dGVfXygpIiBlaXRoZXJcbiAgIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuICJBdHRyaWJ1dGVFcnJvciIuIFRoaXMgbWV0aG9kXG4gICBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uIEluIG9yZGVyIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpblxuICAgdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGJhc2UgY2xhc3NcbiAgIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gYWNjZXNzIGFueSBhdHRyaWJ1dGVzIGl0IG5lZWRzLCBmb3JcbiAgIGV4YW1wbGUsICJvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKSIuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbFxuICAgICBtZXRob2RzIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4XG4gICAgIG9yIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmICJfX3NldGF0dHJfXygpIiB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICAib2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKSIuXG5cbm9iamVjdC5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBMaWtlICJfX3NldGF0dHJfXygpIiBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiAiZGVsIG9iai5uYW1lIiBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxub2JqZWN0Ll9fZGlyX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gImRpcigpIiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdC4gQSBzZXF1ZW5jZSBtdXN0IGJlXG4gICByZXR1cm5lZC4gImRpcigpIiBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgIl9fZGljdF9fIi5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yICJOb25lIiB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW4gIkF0dHJpYnV0ZUVycm9yIlxuICAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5UaGUgYXR0cmlidXRlICJfX29iamNsYXNzX18iIGlzIGludGVycHJldGVkIGJ5IHRoZSAiaW5zcGVjdCIgbW9kdWxlIGFzXG5zcGVjaWZ5aW5nIHRoZSBjbGFzcyB3aGVyZSB0aGlzIG9iamVjdCB3YXMgZGVmaW5lZCAoc2V0dGluZyB0aGlzXG5hcHByb3ByaWF0ZWx5IGNhbiBhc3Npc3QgaW4gcnVudGltZSBpbnRyb3NwZWN0aW9uIG9mIGR5bmFtaWMgY2xhc3NcbmF0dHJpYnV0ZXMpLiBGb3IgY2FsbGFibGVzLCBpdCBtYXkgaW5kaWNhdGUgdGhhdCBhbiBpbnN0YW5jZSBvZiB0aGVcbmdpdmVuIHR5cGUgKG9yIGEgc3ViY2xhc3MpIGlzIGV4cGVjdGVkIG9yIHJlcXVpcmVkIGFzIHRoZSBmaXJzdFxucG9zaXRpb25hbCBhcmd1bWVudCAoZm9yIGV4YW1wbGUsIENQeXRob24gc2V0cyB0aGlzIGF0dHJpYnV0ZSBmb3JcbnVuYm91bmQgbWV0aG9kcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBpbiBDKS5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiLCBhbmRcbiJfX2RlbGV0ZV9fKCkiLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LCBpdFxuaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCAiYS54IiBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggImEuX19kaWN0X19bXCd4XCddIiwgdGhlblxuInR5cGUoYSkuX19kaWN0X19bXCd4XCddIiwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG4idHlwZShhKSIgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCAiYS54Ii4gSG93XG50aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiAiYSI6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgICJ4Ll9fZ2V0X18oYSkiLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgImEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6ICJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpIi5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCAiQS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgIkEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSkiLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiAiYSIgaXMgYW4gaW5zdGFuY2Ugb2YgInN1cGVyIiwgdGhlbiB0aGUgYmluZGluZyAic3VwZXIoQixcbiAgIG9iaikubSgpIiBzZWFyY2hlcyAib2JqLl9fY2xhc3NfXy5fX21yb19fIiBmb3IgdGhlIGJhc2UgY2xhc3MgIkEiXG4gICBpbW1lZGlhdGVseSBwcmVjZWRpbmcgIkIiIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3Igd2l0aCB0aGVcbiAgIGNhbGw6ICJBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXykiLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIgYW5kICJfX2RlbGV0ZV9fKCkiLiAgSWYgaXRcbmRvZXMgbm90IGRlZmluZSAiX19nZXRfXygpIiwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIHJldHVyblxudGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGUgb2JqZWN0XCdzXG5pbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyAiX19zZXRfXygpIiBhbmQvb3JcbiJfX2RlbGV0ZV9fKCkiLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lcyBuZWl0aGVyLCBpdCBpc1xuYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnMgZGVmaW5lIGJvdGhcbiJfX2dldF9fKCkiIGFuZCAiX19zZXRfXygpIiwgd2hpbGUgbm9uLWRhdGEgZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZVxuIl9fZ2V0X18oKSIgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoICJfX3NldF9fKCkiIGFuZCAiX19nZXRfXygpIlxuZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb24gaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluXG5jb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nICJzdGF0aWNtZXRob2QoKSIgYW5kICJjbGFzc21ldGhvZCgpIikgYXJlXG5pbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlICJwcm9wZXJ0eSgpIiBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gICpfX3Nsb3RzX18qXG4gICByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmQgcHJldmVudHMgdGhlXG4gICBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3IgZWFjaFxuICAgaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyAiQXR0cmlidXRlRXJyb3IiLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICAiXCdfX2RpY3RfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXNcbiAgZGVmaW5pbmcgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICBpbnN0YW5jZXMuIElmIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZFxuICAiXCdfX3dlYWtyZWZfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZVxuICBpbnN0YW5jZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlXG4gIChleGNlcHQgYnkgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS5cbiAgVGhpcyByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzICJpbnQiLCAiYnl0ZXMiIGFuZCAidHVwbGUiLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3NcbiAgbWF5IGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyAidHlwZSgpIi4gVGhlIGNsYXNzIGJvZHkgaXNcbmV4ZWN1dGVkIGluIGEgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgbG9jYWxseSB0byB0aGVcbnJlc3VsdCBvZiAidHlwZShuYW1lLCBiYXNlcywgbmFtZXNwYWNlKSIuXG5cblRoZSBjbGFzcyBjcmVhdGlvbiBwcm9jZXNzIGNhbiBiZSBjdXN0b21pc2VkIGJ5IHBhc3NpbmcgdGhlXG4ibWV0YWNsYXNzIiBrZXl3b3JkIGFyZ3VtZW50IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGxpbmUsIG9yIGJ5XG5pbmhlcml0aW5nIGZyb20gYW4gZXhpc3RpbmcgY2xhc3MgdGhhdCBpbmNsdWRlZCBzdWNoIGFuIGFyZ3VtZW50LiBJblxudGhlIGZvbGxvd2luZyBleGFtcGxlLCBib3RoICJNeUNsYXNzIiBhbmQgIk15U3ViY2xhc3MiIGFyZSBpbnN0YW5jZXNcbm9mICJNZXRhIjpcblxuICAgY2xhc3MgTWV0YSh0eXBlKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15Q2xhc3MobWV0YWNsYXNzPU1ldGEpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlTdWJjbGFzcyhNeUNsYXNzKTpcbiAgICAgICBwYXNzXG5cbkFueSBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbmFyZSBwYXNzZWQgdGhyb3VnaCB0byBhbGwgbWV0YWNsYXNzIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJlbG93LlxuXG5XaGVuIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBleGVjdXRlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBvY2N1cjpcblxuKiB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWRcblxuKiB0aGUgY2xhc3MgbmFtZXNwYWNlIGlzIHByZXBhcmVkXG5cbiogdGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWRcblxuKiB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWRcblxuXG5EZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgZm9yIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBkZXRlcm1pbmVkIGFzXG5mb2xsb3dzOlxuXG4qIGlmIG5vIGJhc2VzIGFuZCBubyBleHBsaWNpdCBtZXRhY2xhc3MgYXJlIGdpdmVuLCB0aGVuICJ0eXBlKCkiIGlzXG4gIHVzZWRcblxuKiBpZiBhbiBleHBsaWNpdCBtZXRhY2xhc3MgaXMgZ2l2ZW4gYW5kIGl0IGlzICpub3QqIGFuIGluc3RhbmNlIG9mXG4gICJ0eXBlKCkiLCB0aGVuIGl0IGlzIHVzZWQgZGlyZWN0bHkgYXMgdGhlIG1ldGFjbGFzc1xuXG4qIGlmIGFuIGluc3RhbmNlIG9mICJ0eXBlKCkiIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBtZXRhY2xhc3MsIG9yXG4gIGJhc2VzIGFyZSBkZWZpbmVkLCB0aGVuIHRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHVzZWRcblxuVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWRcbm1ldGFjbGFzcyAoaWYgYW55KSBhbmQgdGhlIG1ldGFjbGFzc2VzIChpLmUuICJ0eXBlKGNscykiKSBvZiBhbGxcbnNwZWNpZmllZCBiYXNlIGNsYXNzZXMuIFRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIG9uZSB3aGljaCBpcyBhXG5zdWJ0eXBlIG9mICphbGwqIG9mIHRoZXNlIGNhbmRpZGF0ZSBtZXRhY2xhc3Nlcy4gSWYgbm9uZSBvZiB0aGVcbmNhbmRpZGF0ZSBtZXRhY2xhc3NlcyBtZWV0cyB0aGF0IGNyaXRlcmlvbiwgdGhlbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxud2lsbCBmYWlsIHdpdGggIlR5cGVFcnJvciIuXG5cblxuUHJlcGFyaW5nIHRoZSBjbGFzcyBuYW1lc3BhY2Vcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBoYXMgYmVlbiBpZGVudGlmaWVkLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIHByZXBhcmVkLiBJZiB0aGUgbWV0YWNsYXNzIGhhcyBhICJfX3ByZXBhcmVfXyIgYXR0cmlidXRlLFxuaXQgaXMgY2FsbGVkIGFzICJuYW1lc3BhY2UgPSBtZXRhY2xhc3MuX19wcmVwYXJlX18obmFtZSwgYmFzZXMsXG4qKmt3ZHMpIiAod2hlcmUgdGhlIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGlmIGFueSwgY29tZSBmcm9tXG50aGUgY2xhc3MgZGVmaW5pdGlvbikuXG5cbklmIHRoZSBtZXRhY2xhc3MgaGFzIG5vICJfX3ByZXBhcmVfXyIgYXR0cmlidXRlLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIGluaXRpYWxpc2VkIGFzIGFuIGVtcHR5ICJkaWN0KCkiIGluc3RhbmNlLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMwMDBcblxuICAgICBJbnRyb2R1Y2VkIHRoZSAiX19wcmVwYXJlX18iIG5hbWVzcGFjZSBob29rXG5cblxuRXhlY3V0aW5nIHRoZSBjbGFzcyBib2R5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWQgKGFwcHJveGltYXRlbHkpIGFzICJleGVjKGJvZHksIGdsb2JhbHMoKSxcbm5hbWVzcGFjZSkiLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvICJleGVjKCkiIGlzIHRoYXRcbmxleGljYWwgc2NvcGluZyBhbGxvd3MgdGhlIGNsYXNzIGJvZHkgKGluY2x1ZGluZyBhbnkgbWV0aG9kcykgdG9cbnJlZmVyZW5jZSBuYW1lcyBmcm9tIHRoZSBjdXJyZW50IGFuZCBvdXRlciBzY29wZXMgd2hlbiB0aGUgY2xhc3NcbmRlZmluaXRpb24gb2NjdXJzIGluc2lkZSBhIGZ1bmN0aW9uLlxuXG5Ib3dldmVyLCBldmVuIHdoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gb2NjdXJzIGluc2lkZSB0aGUgZnVuY3Rpb24sXG5tZXRob2RzIGRlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzdGlsbCBjYW5ub3Qgc2VlIG5hbWVzIGRlZmluZWQgYXQgdGhlXG5jbGFzcyBzY29wZS4gQ2xhc3MgdmFyaWFibGVzIG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZmlyc3RcbnBhcmFtZXRlciBvZiBpbnN0YW5jZSBvciBjbGFzcyBtZXRob2RzLCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGF0IGFsbFxuZnJvbSBzdGF0aWMgbWV0aG9kcy5cblxuXG5DcmVhdGluZyB0aGUgY2xhc3Mgb2JqZWN0XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGNsYXNzIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYnkgZXhlY3V0aW5nIHRoZSBjbGFzc1xuYm9keSwgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgIm1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKSIgKHRoZSBhZGRpdGlvbmFsIGtleXdvcmRzIHBhc3NlZCBoZXJlIGFyZSB0aGUgc2FtZVxuYXMgdGhvc2UgcGFzc2VkIHRvICJfX3ByZXBhcmVfXyIpLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiAic3VwZXIoKSIuICJfX2NsYXNzX18iIGlzIGFuIGltcGxpY2l0IGNsb3N1cmVcbnJlZmVyZW5jZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBpZiBhbnkgbWV0aG9kcyBpbiBhIGNsYXNzIGJvZHkgcmVmZXJcbnRvIGVpdGhlciAiX19jbGFzc19fIiBvciAic3VwZXIiLiBUaGlzIGFsbG93cyB0aGUgemVybyBhcmd1bWVudCBmb3JtXG5vZiAic3VwZXIoKSIgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSBjbGFzcyBiZWluZyBkZWZpbmVkIGJhc2VkIG9uXG5sZXhpY2FsIHNjb3BpbmcsIHdoaWxlIHRoZSBjbGFzcyBvciBpbnN0YW5jZSB0aGF0IHdhcyB1c2VkIHRvIG1ha2UgdGhlXG5jdXJyZW50IGNhbGwgaXMgaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZVxubWV0aG9kLlxuXG5BZnRlciB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3NcbmRlY29yYXRvcnMgaW5jbHVkZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gKGlmIGFueSkgYW5kIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIHRoZSBkZWZpbmVkIGNsYXNzLlxuXG5TZWUgYWxzbzogKipQRVAgMzEzNSoqIC0gTmV3IHN1cGVyXG5cbiAgICAgRGVzY3JpYmVzIHRoZSBpbXBsaWNpdCAiX19jbGFzc19fIiBjbG9zdXJlIHJlZmVyZW5jZVxuXG5cbk1ldGFjbGFzcyBleGFtcGxlXG4tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgcG90ZW50aWFsIHVzZXMgZm9yIG1ldGFjbGFzc2VzIGFyZSBib3VuZGxlc3MuIFNvbWUgaWRlYXMgdGhhdCBoYXZlXG5iZWVuIGV4cGxvcmVkIGluY2x1ZGUgbG9nZ2luZywgaW50ZXJmYWNlIGNoZWNraW5nLCBhdXRvbWF0aWNcbmRlbGVnYXRpb24sIGF1dG9tYXRpYyBwcm9wZXJ0eSBjcmVhdGlvbiwgcHJveGllcywgZnJhbWV3b3JrcywgYW5kXG5hdXRvbWF0aWMgcmVzb3VyY2UgbG9ja2luZy9zeW5jaHJvbml6YXRpb24uXG5cbkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1ldGFjbGFzcyB0aGF0IHVzZXMgYW5cbiJjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCIgdG8gcmVtZW1iZXIgdGhlIG9yZGVyIHRoYXQgY2xhc3MgdmFyaWFibGVzXG5hcmUgZGVmaW5lZDpcblxuICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOlxuXG4gICAgICAgIEBjbGFzc21ldGhvZFxuICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6XG4gICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpXG5cbiAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXN1bHQgPSB0eXBlLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdChuYW1lc3BhY2UpKVxuICAgICAgICAgICByZXN1bHQubWVtYmVycyA9IHR1cGxlKG5hbWVzcGFjZSlcbiAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuXG4gICBjbGFzcyBBKG1ldGFjbGFzcz1PcmRlcmVkQ2xhc3MpOlxuICAgICAgIGRlZiBvbmUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdHdvKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHRocmVlKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIGZvdXIoc2VsZik6IHBhc3NcblxuICAgPj4+IEEubWVtYmVyc1xuICAgKFwnX19tb2R1bGVfX1wnLCBcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCcsIFwnZm91clwnKVxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciAqQSogZ2V0cyBleGVjdXRlZCwgdGhlIHByb2Nlc3MgYmVnaW5zXG53aXRoIGNhbGxpbmcgdGhlIG1ldGFjbGFzc1wncyAiX19wcmVwYXJlX18oKSIgbWV0aG9kIHdoaWNoIHJldHVybnMgYW5cbmVtcHR5ICJjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCIuICBUaGF0IG1hcHBpbmcgcmVjb3JkcyB0aGUgbWV0aG9kcyBhbmRcbmF0dHJpYnV0ZXMgb2YgKkEqIGFzIHRoZXkgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjbGFzc1xuc3RhdGVtZW50LiBPbmNlIHRob3NlIGRlZmluaXRpb25zIGFyZSBleGVjdXRlZCwgdGhlIG9yZGVyZWQgZGljdGlvbmFyeVxuaXMgZnVsbHkgcG9wdWxhdGVkIGFuZCB0aGUgbWV0YWNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCBnZXRzXG5pbnZva2VkLiAgVGhhdCBtZXRob2QgYnVpbGRzIHRoZSBuZXcgdHlwZSBhbmQgaXQgc2F2ZXMgdGhlIG9yZGVyZWRcbmRpY3Rpb25hcnkga2V5cyBpbiBhbiBhdHRyaWJ1dGUgY2FsbGVkICJtZW1iZXJzIi5cblxuXG5DdXN0b21pemluZyBpbnN0YW5jZSBhbmQgc3ViY2xhc3MgY2hlY2tzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGVcbiJpc2luc3RhbmNlKCkiIGFuZCAiaXNzdWJjbGFzcygpIiBidWlsdC1pbiBmdW5jdGlvbnMuXG5cbkluIHBhcnRpY3VsYXIsIHRoZSBtZXRhY2xhc3MgImFiYy5BQkNNZXRhIiBpbXBsZW1lbnRzIHRoZXNlIG1ldGhvZHMgaW5cbm9yZGVyIHRvIGFsbG93IHRoZSBhZGRpdGlvbiBvZiBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGFzXG4idmlydHVhbCBiYXNlIGNsYXNzZXMiIHRvIGFueSBjbGFzcyBvciB0eXBlIChpbmNsdWRpbmcgYnVpbHQtaW5cbnR5cGVzKSwgaW5jbHVkaW5nIG90aGVyIEFCQ3MuXG5cbmNsYXNzLl9faW5zdGFuY2VjaGVja19fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqaW5zdGFuY2UqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIGluc3RhbmNlIG9mICpjbGFzcyouIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgICJpc2luc3RhbmNlKGluc3RhbmNlLCBjbGFzcykiLlxuXG5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBzdWJjbGFzcylcblxuICAgUmV0dXJuIHRydWUgaWYgKnN1YmNsYXNzKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBzdWJjbGFzcyBvZiAqY2xhc3MqLiAgSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgImlzc3ViY2xhc3Moc3ViY2xhc3MsIGNsYXNzKSIuXG5cbk5vdGUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBsb29rZWQgdXAgb24gdGhlIHR5cGUgKG1ldGFjbGFzcykgb2YgYVxuY2xhc3MuICBUaGV5IGNhbm5vdCBiZSBkZWZpbmVkIGFzIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGFjdHVhbCBjbGFzcy5cblRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZFxub24gaW5zdGFuY2VzLCBvbmx5IGluIHRoaXMgY2FzZSB0aGUgaW5zdGFuY2UgaXMgaXRzZWxmIGEgY2xhc3MuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE5KiogLSBJbnRyb2R1Y2luZyBBYnN0cmFjdCBCYXNlIENsYXNzZXNcblxuICAgICBJbmNsdWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgY3VzdG9taXppbmcgImlzaW5zdGFuY2UoKSIgYW5kXG4gICAgICJpc3N1YmNsYXNzKCkiIGJlaGF2aW9yIHRocm91Z2ggIl9faW5zdGFuY2VjaGVja19fKCkiIGFuZFxuICAgICAiX19zdWJjbGFzc2NoZWNrX18oKSIsIHdpdGggbW90aXZhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGluXG4gICAgIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgImFiYyJcbiAgICAgbW9kdWxlKSB0byB0aGUgbGFuZ3VhZ2UuXG5cblxuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgIngoYXJnMSwgYXJnMiwgLi4uKSIgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICAieC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pIi5cblxuXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoICIwIDw9IGsgPCBOIiB3aGVyZVxuKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaCBkZWZpbmUgYVxucmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZSB0aGVcbm1ldGhvZHMgImtleXMoKSIsICJ2YWx1ZXMoKSIsICJpdGVtcygpIiwgImdldCgpIiwgImNsZWFyKCkiLFxuInNldGRlZmF1bHQoKSIsICJwb3AoKSIsICJwb3BpdGVtKCkiLCAiY29weSgpIiwgYW5kICJ1cGRhdGUoKSJcbmJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuXG5UaGUgImNvbGxlY3Rpb25zIiBtb2R1bGUgcHJvdmlkZXMgYSAiTXV0YWJsZU1hcHBpbmciIGFic3RyYWN0IGJhc2VcbmNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mICJfX2dldGl0ZW1fXygpIixcbiJfX3NldGl0ZW1fXygpIiwgIl9fZGVsaXRlbV9fKCkiLCBhbmQgImtleXMoKSIuIE11dGFibGUgc2VxdWVuY2VzXG5zaG91bGQgcHJvdmlkZSBtZXRob2RzICJhcHBlbmQoKSIsICJjb3VudCgpIiwgImluZGV4KCkiLCAiZXh0ZW5kKCkiLFxuImluc2VydCgpIiwgInBvcCgpIiwgInJlbW92ZSgpIiwgInJldmVyc2UoKSIgYW5kICJzb3J0KCkiLCBsaWtlIFB5dGhvblxuc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudFxuYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyAiX19hZGRfXygpIiwgIl9fcmFkZF9fKCkiLFxuIl9faWFkZF9fKCkiLCAiX19tdWxfXygpIiwgIl9fcm11bF9fKCkiIGFuZCAiX19pbXVsX18oKSIgZGVzY3JpYmVkXG5iZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXQgaXNcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbiJfX2NvbnRhaW5zX18oKSIgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlICJpbiIgb3BlcmF0b3I7XG5mb3IgbWFwcGluZ3MsICJpbiIgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3Igc2VxdWVuY2VzLCBpdFxuc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyIHJlY29tbWVuZGVkIHRoYXQgYm90aFxubWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlICJfX2l0ZXJfXygpIiBtZXRob2QgdG8gYWxsb3dcbmVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsICJfX2l0ZXJfXygpIlxuc2hvdWxkIGJlIHRoZSBzYW1lIGFzICJrZXlzKCkiOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZVxudGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyICI+PSIgMC4gIEFsc28sIGFuIG9iamVjdCB0aGF0XG4gICBkb2VzblwndCBkZWZpbmUgYSAiX19ib29sX18oKSIgbWV0aG9kIGFuZCB3aG9zZSAiX19sZW5fXygpIiBtZXRob2RcbiAgIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5vYmplY3QuX19sZW5ndGhfaGludF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmxlbmd0aF9oaW50KCkiLiBTaG91bGQgcmV0dXJuIGFuXG4gICBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICh3aGljaCBtYXkgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW5cbiAgIHRoZSBhY3R1YWwgbGVuZ3RoKS4gVGhlIGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIgIj49IiAwLiBUaGlzXG4gICBtZXRob2QgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yXG4gICBjb3JyZWN0bmVzcy5cblxuICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuXG4gIEEgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGggIk5vbmUiLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgInNlbGZba2V5XSIuIEZvciBzZXF1ZW5jZSB0eXBlcyxcbiAgIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy4gIE5vdGUgdGhhdFxuICAgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlIGNsYXNzIHdpc2hlc1xuICAgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLiBJZlxuICAgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLCAiVHlwZUVycm9yIiBtYXkgYmUgcmFpc2VkOyBpZiBvZlxuICAgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2YgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnlcbiAgIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgdmFsdWVzKSwgIkluZGV4RXJyb3IiIHNob3VsZCBiZVxuICAgcmFpc2VkLiBGb3IgbWFwcGluZyB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZVxuICAgY29udGFpbmVyKSwgIktleUVycm9yIiBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiAiZm9yIiBsb29wcyBleHBlY3QgdGhhdCBhbiAiSW5kZXhFcnJvciIgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19taXNzaW5nX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgYnkgImRpY3QiLiJfX2dldGl0ZW1fXygpIiB0byBpbXBsZW1lbnQgInNlbGZba2V5XSIgZm9yIGRpY3RcbiAgIHN1YmNsYXNzZXMgd2hlbiBrZXkgaXMgbm90IGluIHRoZSBkaWN0aW9uYXJ5LlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSAicmV2ZXJzZWQoKSIgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlICJfX3JldmVyc2VkX18oKSIgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlICJyZXZlcnNlZCgpIlxuICAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlIHByb3RvY29sICgiX19sZW5fXygpIlxuICAgYW5kICJfX2dldGl0ZW1fXygpIikuICBPYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2xcbiAgIHNob3VsZCBvbmx5IHByb3ZpZGUgIl9fcmV2ZXJzZWRfXygpIiBpZiB0aGV5IGNhbiBwcm92aWRlIGFuXG4gICBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieVxuICAgInJldmVyc2VkKCkiLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoImluIiBhbmQgIm5vdCBpbiIpIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uXCd0IGRlZmluZSAiX19jb250YWluc19fKCkiLCB0aGUgbWVtYmVyc2hpcCB0ZXN0XG4gICBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhICJfX2l0ZXJfXygpIiwgdGhlbiB0aGUgb2xkIHNlcXVlbmNlXG4gICBpdGVyYXRpb24gcHJvdG9jb2wgdmlhICJfX2dldGl0ZW1fXygpIiwgc2VlICp0aGlzIHNlY3Rpb24gaW4gdGhlXG4gICBsYW5ndWFnZSByZWZlcmVuY2UqLlxuXG5cbkVtdWxhdGluZyBudW1lcmljIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZW11bGF0ZSBudW1lcmljIG9iamVjdHMuXG5NZXRob2RzIGNvcnJlc3BvbmRpbmcgdG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZVxucGFydGljdWxhciBraW5kIG9mIG51bWJlciBpbXBsZW1lbnRlZCAoZS5nLiwgYml0d2lzZSBvcGVyYXRpb25zIGZvclxubm9uLWludGVncmFsIG51bWJlcnMpIHNob3VsZCBiZSBsZWZ0IHVuZGVmaW5lZC5cblxub2JqZWN0Ll9fYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19zdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX211bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19wb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19sc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX194b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX29yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGVcbiAgIGV4cHJlc3Npb24gInggKyB5Iiwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW5cbiAgICJfX2FkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgaXMgY2FsbGVkLiAgVGhlICJfX2Rpdm1vZF9fKCkiXG4gICBtZXRob2Qgc2hvdWxkIGJlIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nICJfX2Zsb29yZGl2X18oKSIgYW5kXG4gICAiX19tb2RfXygpIjsgaXQgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvICJfX3RydWVkaXZfXygpIi4gIE5vdGVcbiAgIHRoYXQgIl9fcG93X18oKSIgc2hvdWxkIGJlIGRlZmluZWQgdG8gYWNjZXB0IGFuIG9wdGlvbmFsIHRoaXJkXG4gICBhcmd1bWVudCBpZiB0aGUgdGVybmFyeSB2ZXJzaW9uIG9mIHRoZSBidWlsdC1pbiAicG93KCkiIGZ1bmN0aW9uIGlzXG4gICB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuICJOb3RJbXBsZW1lbnRlZCIuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKSB3aXRoIHJlZmxlY3RlZCAoc3dhcHBlZCkgb3BlcmFuZHMuXG4gICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZG9lcyBub3RcbiAgIHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGFuZCB0aGUgb3BlcmFuZHMgYXJlIG9mXG4gICBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiAieCAtXG4gICB5Iiwgd2hlcmUgKnkqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gIl9fcnN1Yl9fKCkiXG4gICBtZXRob2QsICJ5Ll9fcnN1Yl9fKHgpIiBpcyBjYWxsZWQgaWYgInguX19zdWJfXyh5KSIgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgInBvdygpIiB3aWxsIG5vdCB0cnkgY2FsbGluZyAiX19ycG93X18oKSIgKHRoZVxuICAgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYSBzdWJjbGFzcyBvZiB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIHR5cGUgYW5kIHRoYXQgc3ViY2xhc3MgcHJvdmlkZXMgdGhlIHJlZmxlY3RlZCBtZXRob2RcbiAgICAgZm9yIHRoZSBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3Nlc1xuICAgICB0byBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnNcJyBvcGVyYXRpb25zLlxuXG5vYmplY3QuX19pYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9faWxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGF1Z21lbnRlZCBhcml0aG1ldGljXG4gICBhc3NpZ25tZW50cyAoIis9IiwgIi09IiwgIio9IiwgIi89IiwgIi8vPSIsICIlPSIsICIqKj0iLCAiPDw9IixcbiAgICI+Pj0iLCAiJj0iLCAiXj0iLCAifD0iKS4gIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlXG4gICBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZCByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2hcbiAgIGNvdWxkIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSwgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZCBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbFxuICAgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgaWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3Mgd2l0aCBhblxuICAgIl9faWFkZF9fKCkiIG1ldGhvZCwgInggKz0geSIgaXMgZXF1aXZhbGVudCB0byAieCA9IHguX19pYWRkX18oeSkiXG4gICAuIE90aGVyd2lzZSwgInguX19hZGRfXyh5KSIgYW5kICJ5Ll9fcmFkZF9fKHgpIiBhcmUgY29uc2lkZXJlZCwgYXNcbiAgIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgInggKyB5Ii4gSW4gY2VydGFpbiBzaXR1YXRpb25zLCBhdWdtZW50ZWRcbiAgIGFzc2lnbm1lbnQgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGVycm9ycyAoc2VlICpXaHkgZG9lc1xuICAgYV90dXBsZVtpXSArPSBbXCdpdGVtXCddIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBhZGRpdGlvblxuICAgd29ya3M/KiksIGJ1dCB0aGlzIGJlaGF2aW9yIGlzIGluIGZhY3QgcGFydCBvZiB0aGUgZGF0YSBtb2RlbC5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zICgiLSIsICIrIixcbiAgICJhYnMoKSIgYW5kICJ+IikuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImNvbXBsZXgoKSIsICJpbnQoKSIsXG4gICAiZmxvYXQoKSIgYW5kICJyb3VuZCgpIi4gIFNob3VsZCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgYXBwcm9wcmlhdGVcbiAgIHR5cGUuXG5cbm9iamVjdC5fX2luZGV4X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IuaW5kZXgoKSIsIGFuZCB3aGVuZXZlciBQeXRob24gbmVlZHNcbiAgIHRvIGxvc3NsZXNzbHkgY29udmVydCB0aGUgbnVtZXJpYyBvYmplY3QgdG8gYW4gaW50ZWdlciBvYmplY3QgKHN1Y2hcbiAgIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZSBidWlsdC1pbiAiYmluKCkiLCAiaGV4KCkiIGFuZCAib2N0KCkiXG4gICBmdW5jdGlvbnMpLiBQcmVzZW5jZSBvZiB0aGlzIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdCB0aGUgbnVtZXJpY1xuICAgb2JqZWN0IGlzIGFuIGludGVnZXIgdHlwZS4gIE11c3QgcmV0dXJuIGFuIGludGVnZXIuXG5cbiAgIE5vdGU6IEluIG9yZGVyIHRvIGhhdmUgYSBjb2hlcmVudCBpbnRlZ2VyIHR5cGUgY2xhc3MsIHdoZW5cbiAgICAgIl9faW5kZXhfXygpIiBpcyBkZWZpbmVkICJfX2ludF9fKCkiIHNob3VsZCBhbHNvIGJlIGRlZmluZWQsIGFuZFxuICAgICBib3RoIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSAid2l0aCIgc3RhdGVtZW50LiBUaGUgY29udGV4dCBtYW5hZ2VyXG5oYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZSBjb250ZXh0XG5mb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlIG5vcm1hbGx5XG5pbnZva2VkIHVzaW5nIHRoZSAid2l0aCIgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvbiAqVGhlIHdpdGhcbnN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpciBtZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSAid2l0aCJcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgImFzIiBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSAiTm9uZSIuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0ICJfX2V4aXRfXygpIiBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cFxuPT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBjdXN0b20gY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZSBvbmx5XG5ndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdCBpblxudGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uOlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyAiX19oYXNoX18oKSIgYW5kICJfX3JlcHJfXygpIiB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieVxuYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2YgdGhlc2Vcbm1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWwgd2hlblxuaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOlxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSAiX19nZXRhdHRyaWJ1dGVfXygpIiBtYWNoaW5lcnkgaW4gdGhpcyBmYXNoaW9uIHByb3ZpZGVzXG5zaWduaWZpY2FudCBzY29wZSBmb3Igc3BlZWQgb3B0aW1pc2F0aW9ucyB3aXRoaW4gdGhlIGludGVycHJldGVyLCBhdFxudGhlIGNvc3Qgb2Ygc29tZSBmbGV4aWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2Ygc3BlY2lhbCBtZXRob2RzICh0aGVcbnNwZWNpYWwgbWV0aG9kICptdXN0KiBiZSBzZXQgb24gdGhlIGNsYXNzIG9iamVjdCBpdHNlbGYgaW4gb3JkZXIgdG8gYmVcbmNvbnNpc3RlbnRseSBpbnZva2VkIGJ5IHRoZSBpbnRlcnByZXRlcikuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gSXQgKmlzKiBwb3NzaWJsZSBpbiBzb21lIGNhc2VzIHRvIGNoYW5nZSBhbiBvYmplY3RcJ3MgdHlwZSxcbiAgICB1bmRlciBjZXJ0YWluIGNvbnRyb2xsZWQgY29uZGl0aW9ucy4gSXQgZ2VuZXJhbGx5IGlzblwndCBhIGdvb2RcbiAgICBpZGVhIHRob3VnaCwgc2luY2UgaXQgY2FuIGxlYWQgdG8gc29tZSB2ZXJ5IHN0cmFuZ2UgYmVoYXZpb3VyIGlmXG4gICAgaXQgaXMgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuWzJdIEZvciBvcGVyYW5kcyBvZiB0aGUgc2FtZSB0eXBlLCBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgdGhlIG5vbi1cbiAgICByZWZsZWN0ZWQgbWV0aG9kIChzdWNoIGFzICJfX2FkZF9fKCkiKSBmYWlscyB0aGUgb3BlcmF0aW9uIGlzIG5vdFxuICAgIHN1cHBvcnRlZCwgd2hpY2ggaXMgd2h5IHRoZSByZWZsZWN0ZWQgbWV0aG9kIGlzIG5vdCBjYWxsZWQuXG4nLAotICdzdHJpbmctbWV0aG9kcyc6IHUnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5ncyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLCBhbG9uZyB3aXRoXG50aGUgYWRkaXRpb25hbCBtZXRob2RzIGRlc2NyaWJlZCBiZWxvdy5cblxuU3RyaW5ncyBhbHNvIHN1cHBvcnQgdHdvIHN0eWxlcyBvZiBzdHJpbmcgZm9ybWF0dGluZywgb25lIHByb3ZpZGluZyBhXG5sYXJnZSBkZWdyZWUgb2YgZmxleGliaWxpdHkgYW5kIGN1c3RvbWl6YXRpb24gKHNlZSAic3RyLmZvcm1hdCgpIixcbipGb3JtYXQgU3RyaW5nIFN5bnRheCogYW5kICpTdHJpbmcgRm9ybWF0dGluZyopIGFuZCB0aGUgb3RoZXIgYmFzZWQgb25cbkMgInByaW50ZiIgc3R5bGUgZm9ybWF0dGluZyB0aGF0IGhhbmRsZXMgYSBuYXJyb3dlciByYW5nZSBvZiB0eXBlcyBhbmRcbmlzIHNsaWdodGx5IGhhcmRlciB0byB1c2UgY29ycmVjdGx5LCBidXQgaXMgb2Z0ZW4gZmFzdGVyIGZvciB0aGUgY2FzZXNcbml0IGNhbiBoYW5kbGUgKCpwcmludGYtc3R5bGUgU3RyaW5nIEZvcm1hdHRpbmcqKS5cblxuVGhlICpUZXh0IFByb2Nlc3NpbmcgU2VydmljZXMqIHNlY3Rpb24gb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgY292ZXJzXG5hIG51bWJlciBvZiBvdGhlciBtb2R1bGVzIHRoYXQgcHJvdmlkZSB2YXJpb3VzIHRleHQgcmVsYXRlZCB1dGlsaXRpZXNcbihpbmNsdWRpbmcgcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQgaW4gdGhlICJyZSIgbW9kdWxlKS5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuc3RyLmNhc2Vmb2xkKClcblxuICAgUmV0dXJuIGEgY2FzZWZvbGRlZCBjb3B5IG9mIHRoZSBzdHJpbmcuIENhc2Vmb2xkZWQgc3RyaW5ncyBtYXkgYmVcbiAgIHVzZWQgZm9yIGNhc2VsZXNzIG1hdGNoaW5nLlxuXG4gICBDYXNlZm9sZGluZyBpcyBzaW1pbGFyIHRvIGxvd2VyY2FzaW5nIGJ1dCBtb3JlIGFnZ3Jlc3NpdmUgYmVjYXVzZVxuICAgaXQgaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIGFsbCBjYXNlIGRpc3RpbmN0aW9ucyBpbiBhIHN0cmluZy4gRm9yXG4gICBleGFtcGxlLCB0aGUgR2VybWFuIGxvd2VyY2FzZSBsZXR0ZXIgIlwnXHhkZlwnIiBpcyBlcXVpdmFsZW50IHRvICIic3MiIi5cbiAgIFNpbmNlIGl0IGlzIGFscmVhZHkgbG93ZXJjYXNlLCAibG93ZXIoKSIgd291bGQgZG8gbm90aGluZyB0byAiXCdceGRmXCciO1xuICAgImNhc2Vmb2xkKCkiIGNvbnZlcnRzIGl0IHRvICIic3MiIi5cblxuICAgVGhlIGNhc2Vmb2xkaW5nIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFuIEFTQ0lJIHNwYWNlKS4gVGhlXG4gICBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG9cbiAgICJsZW4ocykiLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBhcyBhIGJ5dGVzIG9iamVjdC4gRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgIlwndXRmLThcJyIuICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnRcbiAgIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzICJcJ3N0cmljdFwnIixcbiAgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSAiVW5pY29kZUVycm9yIi4gT3RoZXIgcG9zc2libGVcbiAgIHZhbHVlcyBhcmUgIlwnaWdub3JlXCciLCAiXCdyZXBsYWNlXCciLCAiXCd4bWxjaGFycmVmcmVwbGFjZVwnIixcbiAgICJcJ2JhY2tzbGFzaHJlcGxhY2VcJyIgYW5kIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgdmlhXG4gICAiY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCkiLCBzZWUgc2VjdGlvbiAqRXJyb3IgSGFuZGxlcnMqLiBGb3IgYSBsaXN0XG4gICBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZSBzZWN0aW9uICpTdGFuZGFyZCBFbmNvZGluZ3MqLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiAiVHJ1ZSIgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gIkZhbHNlIi4gICpzdWZmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2Ygc3VmZml4ZXNcbiAgIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXQgcG9zaXRpb24uXG5cbnN0ci5leHBhbmR0YWJzKHRhYnNpemU9OClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRhYiBwb3NpdGlvbnMgb2NjdXIgZXZlcnkgKnRhYnNpemUqIGNoYXJhY3RlcnNcbiAgIChkZWZhdWx0IGlzIDgsIGdpdmluZyB0YWIgcG9zaXRpb25zIGF0IGNvbHVtbnMgMCwgOCwgMTYgYW5kIHNvIG9uKS5cbiAgIFRvIGV4cGFuZCB0aGUgc3RyaW5nLCB0aGUgY3VycmVudCBjb2x1bW4gaXMgc2V0IHRvIHplcm8gYW5kIHRoZVxuICAgc3RyaW5nIGlzIGV4YW1pbmVkIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuICBJZiB0aGUgY2hhcmFjdGVyIGlzIGFcbiAgIHRhYiAoIlxcdCIpLCBvbmUgb3IgbW9yZSBzcGFjZSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiB0aGUgcmVzdWx0XG4gICB1bnRpbCB0aGUgY3VycmVudCBjb2x1bW4gaXMgZXF1YWwgdG8gdGhlIG5leHQgdGFiIHBvc2l0aW9uLiAoVGhlXG4gICB0YWIgY2hhcmFjdGVyIGl0c2VsZiBpcyBub3QgY29waWVkLikgIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lXG4gICAoIlxcbiIpIG9yIHJldHVybiAoIlxcciIpLCBpdCBpcyBjb3BpZWQgYW5kIHRoZSBjdXJyZW50IGNvbHVtbiBpc1xuICAgcmVzZXQgdG8gemVyby4gIEFueSBvdGhlciBjaGFyYWN0ZXIgaXMgY29waWVkIHVuY2hhbmdlZCBhbmQgdGhlXG4gICBjdXJyZW50IGNvbHVtbiBpcyBpbmNyZW1lbnRlZCBieSBvbmUgcmVnYXJkbGVzcyBvZiBob3cgdGhlXG4gICBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgd2hlbiBwcmludGVkLlxuXG4gICA+Pj4gXCcwMVxcdDAxMlxcdDAxMjNcXHQwMTIzNFwnLmV4cGFuZHRhYnMoKVxuICAgXCcwMSAgICAgIDAxMiAgICAgMDEyMyAgICAwMTIzNFwnXG4gICA+Pj4gXCcwMVxcdDAxMlxcdDAxMjNcXHQwMTIzNFwnLmV4cGFuZHRhYnMoNClcbiAgIFwnMDEgIDAxMiAwMTIzICAgIDAxMjM0XCdcblxuc3RyLmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBsb3dlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kIHdpdGhpbiB0aGUgc2xpY2UgInNbc3RhcnQ6ZW5kXSIuICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KlxuICAgYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi4gIFJldHVybiAiLTEiIGlmXG4gICAqc3ViKiBpcyBub3QgZm91bmQuXG5cbiAgIE5vdGU6IFRoZSAiZmluZCgpIiBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgb25seSBpZiB5b3UgbmVlZCB0byBrbm93XG4gICAgIHRoZSBwb3NpdGlvbiBvZiAqc3ViKi4gIFRvIGNoZWNrIGlmICpzdWIqIGlzIGEgc3Vic3RyaW5nIG9yIG5vdCxcbiAgICAgdXNlIHRoZSAiaW4iIG9wZXJhdG9yOlxuXG4gICAgICAgID4+PiBcJ1B5XCcgaW4gXCdQeXRob25cJ1xuICAgICAgICBUcnVlXG5cbnN0ci5mb3JtYXQoKmFyZ3MsICoqa3dhcmdzKVxuXG4gICBQZXJmb3JtIGEgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uLiAgVGhlIHN0cmluZyBvbiB3aGljaCB0aGlzXG4gICBtZXRob2QgaXMgY2FsbGVkIGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHNcbiAgIGRlbGltaXRlZCBieSBicmFjZXMgInt9Ii4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG5zdHIuZm9ybWF0X21hcChtYXBwaW5nKVxuXG4gICBTaW1pbGFyIHRvICJzdHIuZm9ybWF0KCoqbWFwcGluZykiLCBleGNlcHQgdGhhdCAibWFwcGluZyIgaXMgdXNlZFxuICAgZGlyZWN0bHkgYW5kIG5vdCBjb3BpZWQgdG8gYSAiZGljdCIuICBUaGlzIGlzIHVzZWZ1bCBpZiBmb3IgZXhhbXBsZVxuICAgIm1hcHBpbmciIGlzIGEgZGljdCBzdWJjbGFzczpcblxuICAgPj4+IGNsYXNzIERlZmF1bHQoZGljdCk6XG4gICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIGtleVxuICAgLi4uXG4gICA+Pj4gXCd7bmFtZX0gd2FzIGJvcm4gaW4ge2NvdW50cnl9XCcuZm9ybWF0X21hcChEZWZhdWx0KG5hbWU9XCdHdWlkb1wnKSlcbiAgIFwnR3VpZG8gd2FzIGJvcm4gaW4gY291bnRyeVwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgImZpbmQoKSIsIGJ1dCByYWlzZSAiVmFsdWVFcnJvciIgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdFxuICAgZm91bmQuXG5cbnN0ci5pc2FsbnVtKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFudW1lcmljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQSBjaGFyYWN0ZXIgImMiXG4gICBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyAiVHJ1ZSI6XG4gICAiYy5pc2FscGhhKCkiLCAiYy5pc2RlY2ltYWwoKSIsICJjLmlzZGlnaXQoKSIsIG9yICJjLmlzbnVtZXJpYygpIi5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQWxwaGFiZXRpY1xuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIkxldHRlciIsIGkuZS4sIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgYmVpbmcgb25lIG9mICJMbSIsICJMdCIsICJMdSIsICJMbCIsIG9yICJMbyIuICBOb3RlIHRoYXQgdGhpcyBpc1xuICAgZGlmZmVyZW50IGZyb20gdGhlICJBbHBoYWJldGljIiBwcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBVbmljb2RlXG4gICBTdGFuZGFyZC5cblxuc3RyLmlzZGVjaW1hbCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRlY2ltYWwgY2hhcmFjdGVyc1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gRGVjaW1hbFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgZnJvbSBnZW5lcmFsIGNhdGVnb3J5ICJOZCIuIFRoaXMgY2F0ZWdvcnlcbiAgIGluY2x1ZGVzIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvXG4gICBmb3JtIGRlY2ltYWwtcmFkaXggbnVtYmVycywgZS5nLiBVKzA2NjAsIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPLlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIERpZ2l0cyBpbmNsdWRlIGRlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYW5kIGRpZ2l0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyB0aGVcbiAgIGNvbXBhdGliaWxpdHkgc3VwZXJzY3JpcHQgZGlnaXRzLiAgRm9ybWFsbHksIGEgZGlnaXQgaXMgYSBjaGFyYWN0ZXJcbiAgIHRoYXQgaGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQgb3JcbiAgIE51bWVyaWNfVHlwZT1EZWNpbWFsLlxuXG5zdHIuaXNpZGVudGlmaWVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgbGFuZ3VhZ2UgZGVmaW5pdGlvbiwgc2VjdGlvbiAqSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKi5cblxuICAgVXNlICJrZXl3b3JkLmlza2V5d29yZCgpIiB0byB0ZXN0IGZvciByZXNlcnZlZCBpZGVudGlmaWVycyBzdWNoIGFzXG4gICAiZGVmIiBhbmQgImNsYXNzIi5cblxuc3RyLmlzbG93ZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gInJlcHIoKSIgaXNcbiAgIGludm9rZWQgb24gYSBzdHJpbmcuICBJdCBoYXMgbm8gYmVhcmluZyBvbiB0aGUgaGFuZGxpbmcgb2Ygc3RyaW5nc1xuICAgd3JpdHRlbiB0byAic3lzLnN0ZG91dCIgb3IgInN5cy5zdGRlcnIiLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgdXBwZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSAiVHlwZUVycm9yIiB3aWxsIGJlIHJhaXNlZCBpZiB0aGVyZSBhcmVcbiAgIGFueSBub24tc3RyaW5nIHZhbHVlcyBpbiAqaXRlcmFibGUqLCBpbmNsdWRpbmcgImJ5dGVzIiBvYmplY3RzLlxuICAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhbiBBU0NJSVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byAibGVuKHMpIi5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuICAgVGhlIGxvd2VyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICAgICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICAgICBcJ3NwYWNpb3VzICAgXCdcbiAgICAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgICAgXCdleGFtcGxlLmNvbVwnXG5cbnN0YXRpYyBzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKVxuXG4gICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3JcbiAgICJzdHIudHJhbnNsYXRlKCkiLlxuXG4gICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZ1xuICAgVW5pY29kZSBvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgKHN0cmluZ3Mgb2YgbGVuZ3RoIDEpIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIChvZiBhcmJpdHJhcnkgbGVuZ3Rocykgb3IgTm9uZS5cbiAgIENoYXJhY3RlciBrZXlzIHdpbGwgdGhlbiBiZSBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cbiAgIElmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsXG4gICBhbmQgaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkXG4gICB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuICBJZiB0aGVyZSBpcyBhIHRoaXJkXG4gICBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0b1xuICAgTm9uZSBpbiB0aGUgcmVzdWx0LlxuXG5zdHIucGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnlcbiAgIHR3byBlbXB0eSBzdHJpbmdzLlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gInNbc3RhcnQ6ZW5kXSIuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiAiLTEiIG9uIGZhaWx1cmUuXG5cbnN0ci5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSAicmZpbmQoKSIgYnV0IHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhbiBBU0NJSVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byAibGVuKHMpIi5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuc3RyLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgIk5vbmUiLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yIHNwbGl0dGluZ1xuICAgZnJvbSB0aGUgcmlnaHQsICJyc3BsaXQoKSIgYmVoYXZlcyBsaWtlICJzcGxpdCgpIiB3aGljaCBpc1xuICAgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuc3RyLnJzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgICAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgICAgIFwnICAgc3BhY2lvdXNcJ1xuICAgICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgICAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCAibWF4c3BsaXQrMSJcbiAgIGVsZW1lbnRzKS4gIElmICptYXhzcGxpdCogaXMgbm90IHNwZWNpZmllZCBvciAiLTEiLCB0aGVuIHRoZXJlIGlzXG4gICBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgICJcJzEsLDJcJy5zcGxpdChcJyxcJykiIHJldHVybnMgIltcJzFcJywgXCdcJywgXCcyXCddIikuICBUaGUgKnNlcCogYXJndW1lbnRcbiAgIG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgIlwnMTw+Mjw+M1wnLnNwbGl0KFwnPD5cJykiIHJldHVybnMgIltcJzFcJywgXCcyXCcsIFwnM1wnXSIpLiBTcGxpdHRpbmcgYW5cbiAgIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zICJbXCdcJ10iLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IFwnMSwyLDNcJy5zcGxpdChcJyxcJylcbiAgICAgIFtcJzFcJywgXCcyXCcsIFwnM1wnXVxuICAgICAgPj4+IFwnMSwyLDNcJy5zcGxpdChcJyxcJywgbWF4c3BsaXQ9MSlcbiAgICAgIFtcJzFcJywgXCcyLDNcJ11cbiAgICAgID4+PiBcJzEsMiwsMyxcJy5zcGxpdChcJyxcJylcbiAgICAgIFtcJzFcJywgXCcyXCcsIFwnXCcsIFwnM1wnLCBcJ1wnXVxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzICJOb25lIiwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgIk5vbmUiIHNlcGFyYXRvciByZXR1cm5zICJbXSIuXG5cbiAgIEZvciBleGFtcGxlOlxuXG4gICAgICA+Pj4gXCcxIDIgM1wnLnNwbGl0KClcbiAgICAgIFtcJzFcJywgXCcyXCcsIFwnM1wnXVxuICAgICAgPj4+IFwnMSAyIDNcJy5zcGxpdChtYXhzcGxpdD0xKVxuICAgICAgW1wnMVwnLCBcJzIgM1wnXVxuICAgICAgPj4+IFwnICAgMSAgIDIgICAzICAgXCcuc3BsaXQoKVxuICAgICAgW1wnMVwnLCBcJzJcJywgXCczXCddXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuICBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbiAgIFRoaXMgbWV0aG9kIHNwbGl0cyBvbiB0aGUgZm9sbG93aW5nIGxpbmUgYm91bmRhcmllcy4gIEluXG4gICBwYXJ0aWN1bGFyLCB0aGUgYm91bmRhcmllcyBhcmUgYSBzdXBlcnNldCBvZiAqdW5pdmVyc2FsIG5ld2xpbmVzKi5cblxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgUmVwcmVzZW50YXRpb24gICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXFxuIiAgICAgICAgICAgICAgICAgICAgfCBMaW5lIEZlZWQgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFxyIiAgICAgICAgICAgICAgICAgICAgfCBDYXJyaWFnZSBSZXR1cm4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFxyXFxuIiAgICAgICAgICAgICAgICAgIHwgQ2FycmlhZ2UgUmV0dXJuICsgTGluZSBGZWVkICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcdiIgb3IgIlxceDBiIiAgICAgICAgICB8IExpbmUgVGFidWxhdGlvbiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcXGYiIG9yICJcXHgwYyIgICAgICAgICAgfCBGb3JtIEZlZWQgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx4MWMiICAgICAgICAgICAgICAgICAgfCBGaWxlIFNlcGFyYXRvciAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx4MWQiICAgICAgICAgICAgICAgICAgfCBHcm91cCBTZXBhcmF0b3IgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx4MWUiICAgICAgICAgICAgICAgICAgfCBSZWNvcmQgU2VwYXJhdG9yICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx4ODUiICAgICAgICAgICAgICAgICAgfCBOZXh0IExpbmUgKEMxIENvbnRyb2wgQ29kZSkgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx1MjAyOCIgICAgICAgICAgICAgICAgfCBMaW5lIFNlcGFyYXRvciAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx1MjAyOSIgICAgICAgICAgICAgICAgfCBQYXJhZ3JhcGggU2VwYXJhdG9yICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4yOiAiXFx2IiBhbmQgIlxcZiIgYWRkZWQgdG8gbGlzdCBvZiBsaW5lXG4gICBib3VuZGFyaWVzLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IFwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKClcbiAgICAgIFtcJ2FiIGNcJywgXCdcJywgXCdkZSBmZ1wnLCBcJ2tsXCddXG4gICAgICA+Pj4gXCdhYiBjXFxuXFxuZGUgZmdcXHJrbFxcclxcblwnLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSlcbiAgICAgIFtcJ2FiIGNcXG5cJywgXCdcXG5cJywgXCdkZSBmZ1xcclwnLCBcJ2tsXFxyXFxuXCddXG5cbiAgIFVubGlrZSAic3BsaXQoKSIgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXNcbiAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsXG4gICBsaW5lIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lOlxuXG4gICAgICA+Pj4gIiIuc3BsaXRsaW5lcygpXG4gICAgICBbXVxuICAgICAgPj4+ICJPbmUgbGluZVxcbiIuc3BsaXRsaW5lcygpXG4gICAgICBbXCdPbmUgbGluZVwnXVxuXG4gICBGb3IgY29tcGFyaXNvbiwgInNwbGl0KFwnXFxuXCcpIiBnaXZlczpcblxuICAgICAgPj4+IFwnXCcuc3BsaXQoXCdcXG5cJylcbiAgICAgIFtcJ1wnXVxuICAgICAgPj4+IFwnVHdvIGxpbmVzXFxuXCcuc3BsaXQoXCdcXG5cJylcbiAgICAgIFtcJ1R3byBsaW5lc1wnLCBcJ1wnXVxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZSByZXR1cm5cbiAgICJGYWxzZSIuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9vayBmb3IuXG4gICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuICAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXQgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKlxuICAgYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycyogYXJndW1lbnQgaXNcbiAgIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZVxuICAgc3RyaXBwZWQ6XG5cbiAgICAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgICAgXCdzcGFjaW91c1wnXG4gICAgICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgICAgXCdleGFtcGxlXCdcblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB0aGF0XG4gICAicy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkgPT0gcyIuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IFwnSGVsbG8gd29ybGRcJy50aXRsZSgpXG4gICAgICBcJ0hlbGxvIFdvcmxkXCdcblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAuLi4gICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIHMpXG4gICAgICAuLi5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUodGFibGUpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBoYXMgYmVlbiBtYXBwZWRcbiAgIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLiAgVGhlIHRhYmxlIG11c3QgYmUgYW4gb2JqZWN0XG4gICB0aGF0IGltcGxlbWVudHMgaW5kZXhpbmcgdmlhICJfX2dldGl0ZW1fXygpIiwgdHlwaWNhbGx5IGEgKm1hcHBpbmcqXG4gICBvciAqc2VxdWVuY2UqLiAgV2hlbiBpbmRleGVkIGJ5IGEgVW5pY29kZSBvcmRpbmFsIChhbiBpbnRlZ2VyKSwgdGhlXG4gICB0YWJsZSBvYmplY3QgY2FuIGRvIGFueSBvZiB0aGUgZm9sbG93aW5nOiByZXR1cm4gYSBVbmljb2RlIG9yZGluYWxcbiAgIG9yIGEgc3RyaW5nLCB0byBtYXAgdGhlIGNoYXJhY3RlciB0byBvbmUgb3IgbW9yZSBvdGhlciBjaGFyYWN0ZXJzO1xuICAgcmV0dXJuICJOb25lIiwgdG8gZGVsZXRlIHRoZSBjaGFyYWN0ZXIgZnJvbSB0aGUgcmV0dXJuIHN0cmluZzsgb3JcbiAgIHJhaXNlIGEgIkxvb2t1cEVycm9yIiBleGNlcHRpb24sIHRvIG1hcCB0aGUgY2hhcmFjdGVyIHRvIGl0c2VsZi5cblxuICAgWW91IGNhbiB1c2UgInN0ci5tYWtldHJhbnMoKSIgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIFNlZSBhbHNvIHRoZSAiY29kZWNzIiBtb2R1bGUgZm9yIGEgbW9yZSBmbGV4aWJsZSBhcHByb2FjaCB0byBjdXN0b21cbiAgIGNoYXJhY3RlciBtYXBwaW5ncy5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIHVwcGVyY2FzZS4gIE5vdGUgdGhhdCAic3RyLnVwcGVyKCkuaXN1cHBlcigpIiBtaWdodCBiZVxuICAgIkZhbHNlIiBpZiAicyIgY29udGFpbnMgdW5jYXNlZCBjaGFyYWN0ZXJzIG9yIGlmIHRoZSBVbmljb2RlXG4gICBjYXRlZ29yeSBvZiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcihzKSBpcyBub3QgIkx1IiAoTGV0dGVyLFxuICAgdXBwZXJjYXNlKSwgYnV0IGUuZy4gIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG4gICBUaGUgdXBwZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggQVNDSUkgIlwnMFwnIiBkaWdpdHMgdG9cbiAgIG1ha2UgYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIEEgbGVhZGluZyBzaWduIHByZWZpeFxuICAgKCJcJytcJyIvIlwnLVwnIikgaXMgaGFuZGxlZCBieSBpbnNlcnRpbmcgdGhlIHBhZGRpbmcgKmFmdGVyKiB0aGUgc2lnblxuICAgY2hhcmFjdGVyIHJhdGhlciB0aGFuIGJlZm9yZS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZlxuICAgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gImxlbihzKSIuXG5cbiAgIEZvciBleGFtcGxlOlxuXG4gICAgICA+Pj4gIjQyIi56ZmlsbCg1KVxuICAgICAgXCcwMDA0MlwnXG4gICAgICA+Pj4gIi00MiIuemZpbGwoNSlcbiAgICAgIFwnLTAwNDJcJ1xuJywKLSAnc3RyaW5ncyc6IHUnXG5TdHJpbmcgYW5kIEJ5dGVzIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblN0cmluZyBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgc3RyaW5nbGl0ZXJhbCAgIDo6PSBbc3RyaW5ncHJlZml4XShzaG9ydHN0cmluZyB8IGxvbmdzdHJpbmcpXG4gICBzdHJpbmdwcmVmaXggICAgOjo9ICJyIiB8ICJ1IiB8ICJSIiB8ICJVIlxuICAgc2hvcnRzdHJpbmcgICAgIDo6PSAiXCciIHNob3J0c3RyaW5naXRlbSogIlwnIiB8IFwnIlwnIHNob3J0c3RyaW5naXRlbSogXCciXCdcbiAgIGxvbmdzdHJpbmcgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ3N0cmluZ2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nc3RyaW5naXRlbSogXCciIiJcJ1xuICAgc2hvcnRzdHJpbmdpdGVtIDo6PSBzaG9ydHN0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIGxvbmdzdHJpbmdpdGVtICA6Oj0gbG9uZ3N0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIHNob3J0c3RyaW5nY2hhciA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ3N0cmluZ2NoYXIgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBzdHJpbmdlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBzb3VyY2UgY2hhcmFjdGVyPlxuXG4gICBieXRlc2xpdGVyYWwgICA6Oj0gYnl0ZXNwcmVmaXgoc2hvcnRieXRlcyB8IGxvbmdieXRlcylcbiAgIGJ5dGVzcHJlZml4ICAgIDo6PSAiYiIgfCAiQiIgfCAiYnIiIHwgIkJyIiB8ICJiUiIgfCAiQlIiIHwgInJiIiB8ICJyQiIgfCAiUmIiIHwgIlJCIlxuICAgc2hvcnRieXRlcyAgICAgOjo9ICJcJyIgc2hvcnRieXRlc2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydGJ5dGVzaXRlbSogXCciXCdcbiAgIGxvbmdieXRlcyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nYnl0ZXNpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ2J5dGVzaXRlbSogXCciIiJcJ1xuICAgc2hvcnRieXRlc2l0ZW0gOjo9IHNob3J0Ynl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIGxvbmdieXRlc2l0ZW0gIDo6PSBsb25nYnl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIHNob3J0Ynl0ZXNjaGFyIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdieXRlc2NoYXIgIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIGJ5dGVzZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgQVNDSUkgY2hhcmFjdGVyPlxuXG5PbmUgc3ludGFjdGljIHJlc3RyaWN0aW9uIG5vdCBpbmRpY2F0ZWQgYnkgdGhlc2UgcHJvZHVjdGlvbnMgaXMgdGhhdFxud2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCBiZXR3ZWVuIHRoZSAic3RyaW5ncHJlZml4IiBvciAiYnl0ZXNwcmVmaXgiXG5hbmQgdGhlIHJlc3Qgb2YgdGhlIGxpdGVyYWwuIFRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldCBpcyBkZWZpbmVkIGJ5XG50aGUgZW5jb2RpbmcgZGVjbGFyYXRpb247IGl0IGlzIFVURi04IGlmIG5vIGVuY29kaW5nIGRlY2xhcmF0aW9uIGlzXG5naXZlbiBpbiB0aGUgc291cmNlIGZpbGU7IHNlZSBzZWN0aW9uICpFbmNvZGluZyBkZWNsYXJhdGlvbnMqLlxuXG5JbiBwbGFpbiBFbmdsaXNoOiBCb3RoIHR5cGVzIG9mIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZ1xuc2luZ2xlIHF1b3RlcyAoIlwnIikgb3IgZG91YmxlIHF1b3RlcyAoIiIiKS4gIFRoZXkgY2FuIGFsc28gYmUgZW5jbG9zZWRcbmluIG1hdGNoaW5nIGdyb3VwcyBvZiB0aHJlZSBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodGhlc2UgYXJlXG5nZW5lcmFsbHkgcmVmZXJyZWQgdG8gYXMgKnRyaXBsZS1xdW90ZWQgc3RyaW5ncyopLiAgVGhlIGJhY2tzbGFzaFxuKCJcXCIpIGNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYVxuc3BlY2lhbCBtZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZVxuY2hhcmFjdGVyLlxuXG5CeXRlcyBsaXRlcmFscyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggIlwnYlwnIiBvciAiXCdCXCciOyB0aGV5IHByb2R1Y2VcbmFuIGluc3RhbmNlIG9mIHRoZSAiYnl0ZXMiIHR5cGUgaW5zdGVhZCBvZiB0aGUgInN0ciIgdHlwZS4gIFRoZXkgbWF5XG5vbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVyczsgYnl0ZXMgd2l0aCBhIG51bWVyaWMgdmFsdWUgb2YgMTI4IG9yXG5ncmVhdGVyIG11c3QgYmUgZXhwcmVzc2VkIHdpdGggZXNjYXBlcy5cblxuQXMgb2YgUHl0aG9uIDMuMyBpdCBpcyBwb3NzaWJsZSBhZ2FpbiB0byBwcmVmaXggc3RyaW5nIGxpdGVyYWxzIHdpdGggYVxuInUiIHByZWZpeCB0byBzaW1wbGlmeSBtYWludGVuYW5jZSBvZiBkdWFsIDIueCBhbmQgMy54IGNvZGViYXNlcy5cblxuQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYVxubGV0dGVyICJcJ3JcJyIgb3IgIlwnUlwnIjsgc3VjaCBzdHJpbmdzIGFyZSBjYWxsZWQgKnJhdyBzdHJpbmdzKiBhbmQgdHJlYXRcbmJhY2tzbGFzaGVzIGFzIGxpdGVyYWwgY2hhcmFjdGVycy4gIEFzIGEgcmVzdWx0LCBpbiBzdHJpbmcgbGl0ZXJhbHMsXG4iXCdcXFVcJyIgYW5kICJcJ1xcdVwnIiBlc2NhcGVzIGluIHJhdyBzdHJpbmdzIGFyZSBub3QgdHJlYXRlZCBzcGVjaWFsbHkuXG5HaXZlbiB0aGF0IFB5dGhvbiAyLnhcJ3MgcmF3IHVuaWNvZGUgbGl0ZXJhbHMgYmVoYXZlIGRpZmZlcmVudGx5IHRoYW5cblB5dGhvbiAzLnhcJ3MgdGhlICJcJ3VyXCciIHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkLlxuXG5OZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSAiXCdyYlwnIiBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhcyBiZWVuXG5hZGRlZCBhcyBhIHN5bm9ueW0gb2YgIlwnYnJcJyIuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMzogU3VwcG9ydCBmb3IgdGhlIHVuaWNvZGUgbGVnYWN5IGxpdGVyYWxcbigidVwndmFsdWVcJyIpIHdhcyByZWludHJvZHVjZWQgdG8gc2ltcGxpZnkgdGhlIG1haW50ZW5hbmNlIG9mIGR1YWxcblB5dGhvbiAyLnggYW5kIDMueCBjb2RlYmFzZXMuIFNlZSAqKlBFUCA0MTQqKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSW4gdHJpcGxlLXF1b3RlZCBsaXRlcmFscywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWRcbihhbmQgYXJlIHJldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvd1xudGVybWluYXRlIHRoZSBsaXRlcmFsLiAgKEEgInF1b3RlIiBpcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gb3BlbiB0aGVcbmxpdGVyYWwsIGkuZS4gZWl0aGVyICJcJyIgb3IgIiIiLilcblxuVW5sZXNzIGFuICJcJ3JcJyIgb3IgIlwnUlwnIiBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpbiBzdHJpbmdcbmFuZCBieXRlcyBsaXRlcmFscyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2VcbnVzZWQgYnkgU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58ICJcXG5ld2xpbmUiICAgICAgICB8IEJhY2tzbGFzaCBhbmQgbmV3bGluZSBpZ25vcmVkICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxcXCIgICAgICAgICAgICAgIHwgQmFja3NsYXNoICgiXFwiKSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxcJyIgICAgICAgICAgICAgIHwgU2luZ2xlIHF1b3RlICgiXCciKSAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFwiIiAgICAgICAgICAgICAgfCBEb3VibGUgcXVvdGUgKCIiIikgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcYSIgICAgICAgICAgICAgIHwgQVNDSUkgQmVsbCAoQkVMKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXGIiICAgICAgICAgICAgICB8IEFTQ0lJIEJhY2tzcGFjZSAoQlMpICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxmIiAgICAgICAgICAgICAgfCBBU0NJSSBGb3JtZmVlZCAoRkYpICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcbiIgICAgICAgICAgICAgIHwgQVNDSUkgTGluZWZlZWQgKExGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXHIiICAgICAgICAgICAgICB8IEFTQ0lJIENhcnJpYWdlIFJldHVybiAoQ1IpICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx0IiAgICAgICAgICAgICAgfCBBU0NJSSBIb3Jpem9udGFsIFRhYiAoVEFCKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcdiIgICAgICAgICAgICAgIHwgQVNDSUkgVmVydGljYWwgVGFiIChWVCkgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXG9vbyIgICAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgxLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx4aGgiICAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoMiwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuRXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCAiXFxOe25hbWV9IiAgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAoNCkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCBVbmljb2RlIGRhdGFiYXNlICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcdXh4eHgiICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMTYtYml0IGhleCB2YWx1ZSAgIHwgKDUpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgKnh4eHgqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXFV4eHh4eHh4eCIgICAgICB8IENoYXJhY3RlciB3aXRoIDMyLWJpdCBoZXggdmFsdWUgICB8ICg2KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4eHh4eCogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuMi4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG4zLiBJbiBhIGJ5dGVzIGxpdGVyYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzIGRlbm90ZSB0aGVcbiAgIGJ5dGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIEluIGEgc3RyaW5nIGxpdGVyYWwsIHRoZXNlIGVzY2FwZXNcbiAgIGRlbm90ZSBhIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG40LiBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciBuYW1lIGFsaWFzZXMgWzFdIGhhcyBiZWVuXG4gICBhZGRlZC5cblxuNS4gSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGUgcGFpciBjYW5cbiAgIGJlIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuICBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmVcbiAgIHJlcXVpcmVkLlxuXG42LiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXkuICBFeGFjdGx5IGVpZ2h0XG4gICBoZXggZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuVW5saWtlIFN0YW5kYXJkIEMsIGFsbCB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbGVmdCBpbiB0aGVcbnN0cmluZyB1bmNoYW5nZWQsIGkuZS4sICp0aGUgYmFja3NsYXNoIGlzIGxlZnQgaW4gdGhlIHJlc3VsdCouICAoVGhpc1xuYmVoYXZpb3IgaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nOiBpZiBhbiBlc2NhcGUgc2VxdWVuY2UgaXMgbWlzdHlwZWQsXG50aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBtb3JlIGVhc2lseSByZWNvZ25pemVkIGFzIGJyb2tlbi4pICBJdCBpcyBhbHNvXG5pbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmdcbmxpdGVyYWxzIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgdW5yZWNvZ25pemVkIGVzY2FwZXMgZm9yIGJ5dGVzXG5saXRlcmFscy5cblxuRXZlbiBpbiBhIHJhdyBsaXRlcmFsLCBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCwgYnV0IHRoZVxuYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHJlc3VsdDsgZm9yIGV4YW1wbGUsICJyIlxcIiIiIGlzIGEgdmFsaWRcbnN0cmluZyBsaXRlcmFsIGNvbnNpc3Rpbmcgb2YgdHdvIGNoYXJhY3RlcnM6IGEgYmFja3NsYXNoIGFuZCBhIGRvdWJsZVxucXVvdGU7ICJyIlxcIiIgaXMgbm90IGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgKGV2ZW4gYSByYXcgc3RyaW5nIGNhbm5vdFxuZW5kIGluIGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYSByYXcgbGl0ZXJhbFxuY2Fubm90IGVuZCBpbiBhIHNpbmdsZSBiYWNrc2xhc2gqIChzaW5jZSB0aGUgYmFja3NsYXNoIHdvdWxkIGVzY2FwZVxudGhlIGZvbGxvd2luZyBxdW90ZSBjaGFyYWN0ZXIpLiAgTm90ZSBhbHNvIHRoYXQgYSBzaW5nbGUgYmFja3NsYXNoXG5mb2xsb3dlZCBieSBhIG5ld2xpbmUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhvc2UgdHdvIGNoYXJhY3RlcnMgYXMgcGFydFxub2YgdGhlIGxpdGVyYWwsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uXG4nLAorICdzcGVjaWFsbmFtZXMnOiB1J1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkICJfX2dldGl0ZW1fXygpIiwgYW5kICJ4IiBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLFxudGhlbiAieFtpXSIgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvICJ0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsIGkpIi5cbkV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlIGFuXG5leGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG4iQXR0cmlidXRlRXJyb3IiIG9yICJUeXBlRXJyb3IiKS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgYSBjbGFzcyB0aGF0IGVtdWxhdGVzIGFueSBidWlsdC1pbiB0eXBlLCBpdCBpc1xuaW1wb3J0YW50IHRoYXQgdGhlIGVtdWxhdGlvbiBvbmx5IGJlIGltcGxlbWVudGVkIHRvIHRoZSBkZWdyZWUgdGhhdCBpdFxubWFrZXMgc2Vuc2UgZm9yIHRoZSBvYmplY3QgYmVpbmcgbW9kZWxsZWQuICBGb3IgZXhhbXBsZSwgc29tZVxuc2VxdWVuY2VzIG1heSB3b3JrIHdlbGwgd2l0aCByZXRyaWV2YWwgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgYnV0XG5leHRyYWN0aW5nIGEgc2xpY2UgbWF5IG5vdCBtYWtlIHNlbnNlLiAgKE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgdGhlXG4iTm9kZUxpc3QiIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgIl9fbmV3X18oKSIgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgIl9fbmV3X18oKSIgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5IGFuXG4gICBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCB1c2luZ1xuICAgInN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pIiB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgIl9fbmV3X18oKSIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICAiX19pbml0X18oc2VsZlssIC4uLl0pIiwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIuXG5cbiAgIElmICJfX25ld19fKCkiIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgICJfX25ld19fKCkiIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCBhZnRlciB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gY3JlYXRlZCAoYnkgIl9fbmV3X18oKSIpLCBidXRcbiAgIGJlZm9yZSBpdCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgICJfX2luaXRfXygpIiBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzICJfX2luaXRfXygpIiBtZXRob2QsIGlmXG4gICBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlXG4gICBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgICJCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKSIuXG5cbiAgIEJlY2F1c2UgIl9fbmV3X18oKSIgYW5kICJfX2luaXRfXygpIiB3b3JrIHRvZ2V0aGVyIGluIGNvbnN0cnVjdGluZ1xuICAgb2JqZWN0cyAoIl9fbmV3X18oKSIgdG8gY3JlYXRlIGl0LCBhbmQgIl9faW5pdF9fKCkiIHRvIGN1c3RvbWlzZVxuICAgaXQpLCBubyBub24tIk5vbmUiIHZhbHVlIG1heSBiZSByZXR1cm5lZCBieSAiX19pbml0X18oKSI7IGRvaW5nIHNvXG4gICB3aWxsIGNhdXNlIGEgIlR5cGVFcnJvciIgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgIl9fZGVsX18oKSIgbWV0aG9kLCB0aGVcbiAgIGRlcml2ZWQgY2xhc3NcJ3MgIl9fZGVsX18oKSIgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0XG4gICB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlLlxuICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yIHRoZVxuICAgIl9fZGVsX18oKSIgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogImRlbCB4IiBkb2VzblwndCBkaXJlY3RseSBjYWxsICJ4Ll9fZGVsX18oKSIgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciAieCIgYnkgb25lLCBhbmQgdGhlIGxhdHRlciBpc1xuICAgICBvbmx5IGNhbGxlZCB3aGVuICJ4IlwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZSBjb21tb25cbiAgICAgc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW4gb2JqZWN0IGZyb21cbiAgICAgZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gb2JqZWN0cyAoZS5nLixcbiAgICAgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggcGFyZW50IGFuZFxuICAgICBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIG9mXG4gICAgIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmV4Y19pbmZvKClbMl0iIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yIGEgcmVmZXJlbmNlXG4gICAgIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZFxuICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgc2Vjb25kIGNhbiBiZSByZXNvbHZlZCBieSBmcmVlaW5nIHRoZSByZWZlcmVuY2UgdG8gdGhlXG4gICAgIHRyYWNlYmFjayBvYmplY3Qgd2hlbiBpdCBpcyBubyBsb25nZXIgdXNlZnVsLCBhbmQgdGhlIHRoaXJkIGNhblxuICAgICBiZSByZXNvbHZlZCBieSBzdG9yaW5nICJOb25lIiBpbiAic3lzLmxhc3RfdHJhY2ViYWNrIi4gQ2lyY3VsYXJcbiAgICAgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbiB0aGVcbiAgICAgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlclxuICAgICB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlICJnYyIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAgIGFib3V0IHRoaXMgdG9waWMuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoXG4gICAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmdcbiAgICAgdGhlaXIgZXhlY3V0aW9uIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG9cbiAgICAgInN5cy5zdGRlcnIiIGluc3RlYWQuIEFsc28sIHdoZW4gIl9fZGVsX18oKSIgaXMgaW52b2tlZCBpblxuICAgICByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZyBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGVcbiAgICAgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXIgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSAiX19kZWxfXygpIlxuICAgICBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmdcbiAgICAgdG9ybiBkb3duIChlLmcuIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXNcbiAgICAgcmVhc29uLCAiX19kZWxfXygpIiBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWRcbiAgICAgdG8gbWFpbnRhaW4gZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsXG4gICAgIFB5dGhvbiBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlICJfX2RlbF9fKCkiIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlICJyZXByKCkiIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlICJvZmZpY2lhbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsIHRoaXNcbiAgIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG9cbiAgIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICAiPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPiIgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzICJfX3JlcHJfXygpIiBidXRcbiAgIG5vdCAiX19zdHJfXygpIiwgdGhlbiAiX19yZXByX18oKSIgaXMgYWxzbyB1c2VkIHdoZW4gYW4gImluZm9ybWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAic3RyKG9iamVjdCkiIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJmb3JtYXQoKSIgYW5kXG4gICAicHJpbnQoKSIgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlIHN0cmluZ1xuICAgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgKnN0cmluZypcbiAgIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tICJvYmplY3QuX19yZXByX18oKSIgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCAiX19zdHJfXygpIiByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgIm9iamVjdCJcbiAgIGNhbGxzICJvYmplY3QuX19yZXByX18oKSIuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJieXRlcygpIiB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgImJ5dGVzIiBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlICJmb3JtYXQoKSIgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgInN0ci5mb3JtYXQoKSIgbWV0aG9kIG9mIGNsYXNzICJzdHIiKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIGFcbiAgIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIHVwIHRvXG4gICB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgIl9fZm9ybWF0X18oKSIsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzIHdpbGxcbiAgIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yIHVzZSBhXG4gICBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy40OiBUaGUgX19mb3JtYXRfXyBtZXRob2Qgb2YgIm9iamVjdCIgaXRzZWxmXG4gICByYWlzZXMgYSAiVHlwZUVycm9yIiBpZiBwYXNzZWQgYW55IG5vbi1lbXB0eSBzdHJpbmcuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBCeSBkZWZhdWx0LCAiX19uZV9fKCkiIGRlbGVnYXRlcyB0byAiX19lcV9fKCkiIGFuZCBpbnZlcnRzIHRoZVxuICAgcmVzdWx0IHVubGVzcyBpdCBpcyAiTm90SW1wbGVtZW50ZWQiLiAgVGhlcmUgYXJlIG5vIG90aGVyIGltcGxpZWRcbiAgIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBmb3IgZXhhbXBsZSwgdGhlXG4gICB0cnV0aCBvZiAiKHg8eSBvciB4PT15KSIgZG9lcyBub3QgaW1wbHkgIng8PXkiLiBUbyBhdXRvbWF0aWNhbGx5XG4gICBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdCBvcGVyYXRpb24sIHNlZVxuICAgImZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpIi5cblxuICAgU2VlIHRoZSBwYXJhZ3JhcGggb24gIl9faGFzaF9fKCkiIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCAiX19sdF9fKCkiIGFuZCAiX19ndF9fKCkiIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCAiX19sZV9fKCkiIGFuZCAiX19nZV9fKCkiIGFyZSBlYWNoIG90aGVyXCdzIHJlZmxlY3Rpb24sXG4gICBhbmQgIl9fZXFfXygpIiBhbmQgIl9fbmVfXygpIiBhcmUgdGhlaXIgb3duIHJlZmxlY3Rpb24uIElmIHRoZVxuICAgb3BlcmFuZHMgYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYW5kIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhXG4gICBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwncyB0eXBlLCB0aGVcbiAgIHJlZmxlY3RlZCBtZXRob2Qgb2YgdGhlIHJpZ2h0IG9wZXJhbmQgaGFzIHByaW9yaXR5LCBvdGhlcndpc2UgdGhlXG4gICBsZWZ0IG9wZXJhbmRcJ3MgbWV0aG9kIGhhcyBwcmlvcml0eS4gIFZpcnR1YWwgc3ViY2xhc3NpbmcgaXMgbm90XG4gICBjb25zaWRlcmVkLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3NcbiAgICAgY3VzdG9tICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzXG4gICAgIGlzIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0XG4gICAgIGJ1aWxkcy4gSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkc1xuICAgICBvZiBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGxcbiAgICAgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jXG4gICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiLlxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiAiX19lcV9fKCkiIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSAiX19oYXNoX18oKSIgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lcyAiX19lcV9fKCkiXG4gICBidXQgbm90ICJfX2hhc2hfXygpIiwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZSB1c2FibGUgYXMgaXRlbXMgaW5cbiAgIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzIG11dGFibGUgb2JqZWN0cyBhbmRcbiAgIGltcGxlbWVudHMgYW4gIl9fZXFfXygpIiBtZXRob2QsIGl0IHNob3VsZCBub3QgaW1wbGVtZW50XG4gICAiX19oYXNoX18oKSIsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZSBjb2xsZWN0aW9uc1xuICAgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlIG9iamVjdFwncyBoYXNoXG4gICB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgIl9fZXFfXygpIiBhbmQgIl9faGFzaF9fKCkiIG1ldGhvZHMgYnlcbiAgIGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kICJ4Ll9faGFzaF9fKCkiIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCAieCA9PSB5IiBpbXBsaWVzIGJvdGggdGhhdCAieCBpcyB5IiBhbmQgImhhc2goeCkgPT0gaGFzaCh5KSIuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBhbmQgZG9lcyBub3QgZGVmaW5lICJfX2hhc2hfXygpIlxuICAgd2lsbCBoYXZlIGl0cyAiX19oYXNoX18oKSIgaW1wbGljaXRseSBzZXQgdG8gIk5vbmUiLiAgV2hlbiB0aGVcbiAgICJfX2hhc2hfXygpIiBtZXRob2Qgb2YgYSBjbGFzcyBpcyAiTm9uZSIsIGluc3RhbmNlcyBvZiB0aGUgY2xhc3NcbiAgIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgIlR5cGVFcnJvciIgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG9cbiAgIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiAiX19oYXNoX18oKSIgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlIGludGVycHJldGVyXG4gICBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgIl9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX18iLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgIl9fZXFfXygpIiB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgIl9faGFzaF9fID0gTm9uZSIgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biAiX19oYXNoX18oKSIgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSAiVHlwZUVycm9yIiB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICBoYXNoYWJsZSBieSBhbiAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSIgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlICJfX2hhc2hfXygpIiB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmRcbiAgICAgZGF0ZXRpbWUgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyAiUFlUSE9OSEFTSFNFRUQiLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICAiYm9vbCgpIjsgc2hvdWxkIHJldHVybiAiRmFsc2UiIG9yICJUcnVlIi4gIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90XG4gICBkZWZpbmVkLCAiX19sZW5fXygpIiBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGUgb2JqZWN0IGlzXG4gICBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBuZWl0aGVyICJfX2xlbl9fKCkiIG5vciAiX19ib29sX18oKSIsIGFsbCBpdHMgaW5zdGFuY2VzIGFyZVxuICAgY29uc2lkZXJlZCB0cnVlLlxuXG5cbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiAieC5uYW1lIikgZm9yXG5jbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yICJzZWxmIikuICAibmFtZSIgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLiBUaGlzXG4gICBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgIl9fZ2V0YXR0cl9fKCkiIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gIl9fZ2V0YXR0cl9fKCkiIGFuZCAiX19zZXRhdHRyX18oKSIuKSBUaGlzIGlzIGRvbmUgYm90aCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgIl9fZ2V0YXR0cl9fKCkiIHdvdWxkIGhhdmVcbiAgIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlIHRoYXQgYXRcbiAgIGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5IG5vdFxuICAgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgb3ZlciBhdHRyaWJ1dGUgYWNjZXNzLlxuXG5vYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgdW5jb25kaXRpb25hbGx5IHRvIGltcGxlbWVudCBhdHRyaWJ1dGUgYWNjZXNzZXMgZm9yXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLiBJZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzICJfX2dldGF0dHJfXygpIixcbiAgIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzcyAiX19nZXRhdHRyaWJ1dGVfXygpIiBlaXRoZXJcbiAgIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuICJBdHRyaWJ1dGVFcnJvciIuIFRoaXMgbWV0aG9kXG4gICBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uIEluIG9yZGVyIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpblxuICAgdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGJhc2UgY2xhc3NcbiAgIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gYWNjZXNzIGFueSBhdHRyaWJ1dGVzIGl0IG5lZWRzLCBmb3JcbiAgIGV4YW1wbGUsICJvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKSIuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbFxuICAgICBtZXRob2RzIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4XG4gICAgIG9yIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmICJfX3NldGF0dHJfXygpIiB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICAib2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKSIuXG5cbm9iamVjdC5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBMaWtlICJfX3NldGF0dHJfXygpIiBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiAiZGVsIG9iai5uYW1lIiBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxub2JqZWN0Ll9fZGlyX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gImRpcigpIiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdC4gQSBzZXF1ZW5jZSBtdXN0IGJlXG4gICByZXR1cm5lZC4gImRpcigpIiBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgIl9fZGljdF9fIi5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yICJOb25lIiB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW4gIkF0dHJpYnV0ZUVycm9yIlxuICAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5UaGUgYXR0cmlidXRlICJfX29iamNsYXNzX18iIGlzIGludGVycHJldGVkIGJ5IHRoZSAiaW5zcGVjdCIgbW9kdWxlIGFzXG5zcGVjaWZ5aW5nIHRoZSBjbGFzcyB3aGVyZSB0aGlzIG9iamVjdCB3YXMgZGVmaW5lZCAoc2V0dGluZyB0aGlzXG5hcHByb3ByaWF0ZWx5IGNhbiBhc3Npc3QgaW4gcnVudGltZSBpbnRyb3NwZWN0aW9uIG9mIGR5bmFtaWMgY2xhc3NcbmF0dHJpYnV0ZXMpLiBGb3IgY2FsbGFibGVzLCBpdCBtYXkgaW5kaWNhdGUgdGhhdCBhbiBpbnN0YW5jZSBvZiB0aGVcbmdpdmVuIHR5cGUgKG9yIGEgc3ViY2xhc3MpIGlzIGV4cGVjdGVkIG9yIHJlcXVpcmVkIGFzIHRoZSBmaXJzdFxucG9zaXRpb25hbCBhcmd1bWVudCAoZm9yIGV4YW1wbGUsIENQeXRob24gc2V0cyB0aGlzIGF0dHJpYnV0ZSBmb3JcbnVuYm91bmQgbWV0aG9kcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBpbiBDKS5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiLCBhbmRcbiJfX2RlbGV0ZV9fKCkiLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LCBpdFxuaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCAiYS54IiBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggImEuX19kaWN0X19bXCd4XCddIiwgdGhlblxuInR5cGUoYSkuX19kaWN0X19bXCd4XCddIiwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG4idHlwZShhKSIgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCAiYS54Ii4gSG93XG50aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiAiYSI6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgICJ4Ll9fZ2V0X18oYSkiLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgImEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6ICJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpIi5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCAiQS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgIkEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSkiLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiAiYSIgaXMgYW4gaW5zdGFuY2Ugb2YgInN1cGVyIiwgdGhlbiB0aGUgYmluZGluZyAic3VwZXIoQixcbiAgIG9iaikubSgpIiBzZWFyY2hlcyAib2JqLl9fY2xhc3NfXy5fX21yb19fIiBmb3IgdGhlIGJhc2UgY2xhc3MgIkEiXG4gICBpbW1lZGlhdGVseSBwcmVjZWRpbmcgIkIiIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3Igd2l0aCB0aGVcbiAgIGNhbGw6ICJBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXykiLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIgYW5kICJfX2RlbGV0ZV9fKCkiLiAgSWYgaXRcbmRvZXMgbm90IGRlZmluZSAiX19nZXRfXygpIiwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIHJldHVyblxudGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGUgb2JqZWN0XCdzXG5pbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyAiX19zZXRfXygpIiBhbmQvb3JcbiJfX2RlbGV0ZV9fKCkiLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lcyBuZWl0aGVyLCBpdCBpc1xuYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnMgZGVmaW5lIGJvdGhcbiJfX2dldF9fKCkiIGFuZCAiX19zZXRfXygpIiwgd2hpbGUgbm9uLWRhdGEgZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZVxuIl9fZ2V0X18oKSIgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoICJfX3NldF9fKCkiIGFuZCAiX19nZXRfXygpIlxuZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb24gaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluXG5jb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nICJzdGF0aWNtZXRob2QoKSIgYW5kICJjbGFzc21ldGhvZCgpIikgYXJlXG5pbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlICJwcm9wZXJ0eSgpIiBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gICpfX3Nsb3RzX18qXG4gICByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmQgcHJldmVudHMgdGhlXG4gICBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3IgZWFjaFxuICAgaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyAiQXR0cmlidXRlRXJyb3IiLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICAiXCdfX2RpY3RfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXNcbiAgZGVmaW5pbmcgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICBpbnN0YW5jZXMuIElmIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZFxuICAiXCdfX3dlYWtyZWZfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZVxuICBpbnN0YW5jZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlXG4gIChleGNlcHQgYnkgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS5cbiAgVGhpcyByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzICJpbnQiLCAiYnl0ZXMiIGFuZCAidHVwbGUiLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3NcbiAgbWF5IGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyAidHlwZSgpIi4gVGhlIGNsYXNzIGJvZHkgaXNcbmV4ZWN1dGVkIGluIGEgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgbG9jYWxseSB0byB0aGVcbnJlc3VsdCBvZiAidHlwZShuYW1lLCBiYXNlcywgbmFtZXNwYWNlKSIuXG5cblRoZSBjbGFzcyBjcmVhdGlvbiBwcm9jZXNzIGNhbiBiZSBjdXN0b21pc2VkIGJ5IHBhc3NpbmcgdGhlXG4ibWV0YWNsYXNzIiBrZXl3b3JkIGFyZ3VtZW50IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGxpbmUsIG9yIGJ5XG5pbmhlcml0aW5nIGZyb20gYW4gZXhpc3RpbmcgY2xhc3MgdGhhdCBpbmNsdWRlZCBzdWNoIGFuIGFyZ3VtZW50LiBJblxudGhlIGZvbGxvd2luZyBleGFtcGxlLCBib3RoICJNeUNsYXNzIiBhbmQgIk15U3ViY2xhc3MiIGFyZSBpbnN0YW5jZXNcbm9mICJNZXRhIjpcblxuICAgY2xhc3MgTWV0YSh0eXBlKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15Q2xhc3MobWV0YWNsYXNzPU1ldGEpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlTdWJjbGFzcyhNeUNsYXNzKTpcbiAgICAgICBwYXNzXG5cbkFueSBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbmFyZSBwYXNzZWQgdGhyb3VnaCB0byBhbGwgbWV0YWNsYXNzIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJlbG93LlxuXG5XaGVuIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBleGVjdXRlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBvY2N1cjpcblxuKiB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWRcblxuKiB0aGUgY2xhc3MgbmFtZXNwYWNlIGlzIHByZXBhcmVkXG5cbiogdGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWRcblxuKiB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWRcblxuXG5EZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgZm9yIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBkZXRlcm1pbmVkIGFzXG5mb2xsb3dzOlxuXG4qIGlmIG5vIGJhc2VzIGFuZCBubyBleHBsaWNpdCBtZXRhY2xhc3MgYXJlIGdpdmVuLCB0aGVuICJ0eXBlKCkiIGlzXG4gIHVzZWRcblxuKiBpZiBhbiBleHBsaWNpdCBtZXRhY2xhc3MgaXMgZ2l2ZW4gYW5kIGl0IGlzICpub3QqIGFuIGluc3RhbmNlIG9mXG4gICJ0eXBlKCkiLCB0aGVuIGl0IGlzIHVzZWQgZGlyZWN0bHkgYXMgdGhlIG1ldGFjbGFzc1xuXG4qIGlmIGFuIGluc3RhbmNlIG9mICJ0eXBlKCkiIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBtZXRhY2xhc3MsIG9yXG4gIGJhc2VzIGFyZSBkZWZpbmVkLCB0aGVuIHRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHVzZWRcblxuVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWRcbm1ldGFjbGFzcyAoaWYgYW55KSBhbmQgdGhlIG1ldGFjbGFzc2VzIChpLmUuICJ0eXBlKGNscykiKSBvZiBhbGxcbnNwZWNpZmllZCBiYXNlIGNsYXNzZXMuIFRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIG9uZSB3aGljaCBpcyBhXG5zdWJ0eXBlIG9mICphbGwqIG9mIHRoZXNlIGNhbmRpZGF0ZSBtZXRhY2xhc3Nlcy4gSWYgbm9uZSBvZiB0aGVcbmNhbmRpZGF0ZSBtZXRhY2xhc3NlcyBtZWV0cyB0aGF0IGNyaXRlcmlvbiwgdGhlbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxud2lsbCBmYWlsIHdpdGggIlR5cGVFcnJvciIuXG5cblxuUHJlcGFyaW5nIHRoZSBjbGFzcyBuYW1lc3BhY2Vcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBoYXMgYmVlbiBpZGVudGlmaWVkLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIHByZXBhcmVkLiBJZiB0aGUgbWV0YWNsYXNzIGhhcyBhICJfX3ByZXBhcmVfXyIgYXR0cmlidXRlLFxuaXQgaXMgY2FsbGVkIGFzICJuYW1lc3BhY2UgPSBtZXRhY2xhc3MuX19wcmVwYXJlX18obmFtZSwgYmFzZXMsXG4qKmt3ZHMpIiAod2hlcmUgdGhlIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGlmIGFueSwgY29tZSBmcm9tXG50aGUgY2xhc3MgZGVmaW5pdGlvbikuXG5cbklmIHRoZSBtZXRhY2xhc3MgaGFzIG5vICJfX3ByZXBhcmVfXyIgYXR0cmlidXRlLCB0aGVuIHRoZSBjbGFzc1xubmFtZXNwYWNlIGlzIGluaXRpYWxpc2VkIGFzIGFuIGVtcHR5ICJkaWN0KCkiIGluc3RhbmNlLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMwMDBcblxuICAgICBJbnRyb2R1Y2VkIHRoZSAiX19wcmVwYXJlX18iIG5hbWVzcGFjZSBob29rXG5cblxuRXhlY3V0aW5nIHRoZSBjbGFzcyBib2R5XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWQgKGFwcHJveGltYXRlbHkpIGFzICJleGVjKGJvZHksIGdsb2JhbHMoKSxcbm5hbWVzcGFjZSkiLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvICJleGVjKCkiIGlzIHRoYXRcbmxleGljYWwgc2NvcGluZyBhbGxvd3MgdGhlIGNsYXNzIGJvZHkgKGluY2x1ZGluZyBhbnkgbWV0aG9kcykgdG9cbnJlZmVyZW5jZSBuYW1lcyBmcm9tIHRoZSBjdXJyZW50IGFuZCBvdXRlciBzY29wZXMgd2hlbiB0aGUgY2xhc3NcbmRlZmluaXRpb24gb2NjdXJzIGluc2lkZSBhIGZ1bmN0aW9uLlxuXG5Ib3dldmVyLCBldmVuIHdoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gb2NjdXJzIGluc2lkZSB0aGUgZnVuY3Rpb24sXG5tZXRob2RzIGRlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzdGlsbCBjYW5ub3Qgc2VlIG5hbWVzIGRlZmluZWQgYXQgdGhlXG5jbGFzcyBzY29wZS4gQ2xhc3MgdmFyaWFibGVzIG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZmlyc3RcbnBhcmFtZXRlciBvZiBpbnN0YW5jZSBvciBjbGFzcyBtZXRob2RzLCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGF0IGFsbFxuZnJvbSBzdGF0aWMgbWV0aG9kcy5cblxuXG5DcmVhdGluZyB0aGUgY2xhc3Mgb2JqZWN0XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGNsYXNzIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYnkgZXhlY3V0aW5nIHRoZSBjbGFzc1xuYm9keSwgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgIm1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKSIgKHRoZSBhZGRpdGlvbmFsIGtleXdvcmRzIHBhc3NlZCBoZXJlIGFyZSB0aGUgc2FtZVxuYXMgdGhvc2UgcGFzc2VkIHRvICJfX3ByZXBhcmVfXyIpLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiAic3VwZXIoKSIuICJfX2NsYXNzX18iIGlzIGFuIGltcGxpY2l0IGNsb3N1cmVcbnJlZmVyZW5jZSBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBpZiBhbnkgbWV0aG9kcyBpbiBhIGNsYXNzIGJvZHkgcmVmZXJcbnRvIGVpdGhlciAiX19jbGFzc19fIiBvciAic3VwZXIiLiBUaGlzIGFsbG93cyB0aGUgemVybyBhcmd1bWVudCBmb3JtXG5vZiAic3VwZXIoKSIgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSBjbGFzcyBiZWluZyBkZWZpbmVkIGJhc2VkIG9uXG5sZXhpY2FsIHNjb3BpbmcsIHdoaWxlIHRoZSBjbGFzcyBvciBpbnN0YW5jZSB0aGF0IHdhcyB1c2VkIHRvIG1ha2UgdGhlXG5jdXJyZW50IGNhbGwgaXMgaWRlbnRpZmllZCBiYXNlZCBvbiB0aGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZVxubWV0aG9kLlxuXG5BZnRlciB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IGlzIHBhc3NlZCB0byB0aGUgY2xhc3NcbmRlY29yYXRvcnMgaW5jbHVkZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gKGlmIGFueSkgYW5kIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIHRoZSBkZWZpbmVkIGNsYXNzLlxuXG5XaGVuIGEgbmV3IGNsYXNzIGlzIGNyZWF0ZWQgYnkgInR5cGUuX19uZXdfXyIsIHRoZSBvYmplY3QgcHJvdmlkZWQgYXNcbnRoZSBuYW1lc3BhY2UgcGFyYW1ldGVyIGlzIGNvcGllZCB0byBhIHN0YW5kYXJkIFB5dGhvbiBkaWN0aW9uYXJ5IGFuZFxudGhlIG9yaWdpbmFsIG9iamVjdCBpcyBkaXNjYXJkZWQuIFRoZSBuZXcgY29weSBiZWNvbWVzIHRoZSAiX19kaWN0X18iXG5hdHRyaWJ1dGUgb2YgdGhlIGNsYXNzIG9iamVjdC5cblxuU2VlIGFsc286ICoqUEVQIDMxMzUqKiAtIE5ldyBzdXBlclxuXG4gICAgIERlc2NyaWJlcyB0aGUgaW1wbGljaXQgIl9fY2xhc3NfXyIgY2xvc3VyZSByZWZlcmVuY2VcblxuXG5NZXRhY2xhc3MgZXhhbXBsZVxuLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIHBvdGVudGlhbCB1c2VzIGZvciBtZXRhY2xhc3NlcyBhcmUgYm91bmRsZXNzLiBTb21lIGlkZWFzIHRoYXQgaGF2ZVxuYmVlbiBleHBsb3JlZCBpbmNsdWRlIGxvZ2dpbmcsIGludGVyZmFjZSBjaGVja2luZywgYXV0b21hdGljXG5kZWxlZ2F0aW9uLCBhdXRvbWF0aWMgcHJvcGVydHkgY3JlYXRpb24sIHByb3hpZXMsIGZyYW1ld29ya3MsIGFuZFxuYXV0b21hdGljIHJlc291cmNlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLlxuXG5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXRhY2xhc3MgdGhhdCB1c2VzIGFuXG4iY29sbGVjdGlvbnMuT3JkZXJlZERpY3QiIHRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIHZhcmlhYmxlc1xuYXJlIGRlZmluZWQ6XG5cbiAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKTpcblxuICAgICAgIEBjbGFzc21ldGhvZFxuICAgICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBuYW1lLCBiYXNlcywgKiprd2RzKTpcbiAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KClcblxuICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiprd2RzKTpcbiAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QobmFtZXNwYWNlKSlcbiAgICAgICAgICAgcmVzdWx0Lm1lbWJlcnMgPSB0dXBsZShuYW1lc3BhY2UpXG4gICAgICAgICAgIHJldHVybiByZXN1bHRcblxuICAgY2xhc3MgQShtZXRhY2xhc3M9T3JkZXJlZENsYXNzKTpcbiAgICAgICBkZWYgb25lKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHR3byhzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0aHJlZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiBmb3VyKHNlbGYpOiBwYXNzXG5cbiAgID4+PiBBLm1lbWJlcnNcbiAgIChcJ19fbW9kdWxlX19cJywgXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnLCBcJ2ZvdXJcJylcblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgKkEqIGdldHMgZXhlY3V0ZWQsIHRoZSBwcm9jZXNzIGJlZ2luc1xud2l0aCBjYWxsaW5nIHRoZSBtZXRhY2xhc3NcJ3MgIl9fcHJlcGFyZV9fKCkiIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuXG5lbXB0eSAiY29sbGVjdGlvbnMuT3JkZXJlZERpY3QiLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHMgYW5kXG5hdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgZ2V0c1xuaW52b2tlZC4gIFRoYXQgbWV0aG9kIGJ1aWxkcyB0aGUgbmV3IHR5cGUgYW5kIGl0IHNhdmVzIHRoZSBvcmRlcmVkXG5kaWN0aW9uYXJ5IGtleXMgaW4gYW4gYXR0cmlidXRlIGNhbGxlZCAibWVtYmVycyIuXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG4iaXNpbnN0YW5jZSgpIiBhbmQgImlzc3ViY2xhc3MoKSIgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5JbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzICJhYmMuQUJDTWV0YSIgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzIGluXG5vcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICAiaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xhc3MpIi5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgICJpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcykiLlxuXG5Ob3RlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgbG9va2VkIHVwIG9uIHRoZSB0eXBlIChtZXRhY2xhc3MpIG9mIGFcbmNsYXNzLiAgVGhleSBjYW5ub3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzIGluIHRoZSBhY3R1YWwgY2xhc3MuXG5UaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWRcbm9uIGluc3RhbmNlcywgb25seSBpbiB0aGlzIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExOSoqIC0gSW50cm9kdWNpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzXG5cbiAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nICJpc2luc3RhbmNlKCkiIGFuZFxuICAgICAiaXNzdWJjbGFzcygpIiBiZWhhdmlvciB0aHJvdWdoICJfX2luc3RhbmNlY2hlY2tfXygpIiBhbmRcbiAgICAgIl9fc3ViY2xhc3NjaGVja19fKCkiLCB3aXRoIG1vdGl2YXRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBpblxuICAgICB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlICJhYmMiXG4gICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsICJ4KGFyZzEsIGFyZzIsIC4uLikiIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgInguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKSIuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCAiMCA8PSBrIDwgTiIgd2hlcmVcbipOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2ggZGVmaW5lIGFcbnJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGUgdGhlXG5tZXRob2RzICJrZXlzKCkiLCAidmFsdWVzKCkiLCAiaXRlbXMoKSIsICJnZXQoKSIsICJjbGVhcigpIixcbiJzZXRkZWZhdWx0KCkiLCAicG9wKCkiLCAicG9waXRlbSgpIiwgImNvcHkoKSIsIGFuZCAidXBkYXRlKCkiXG5iZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmQgZGljdGlvbmFyeSBvYmplY3RzLlxuVGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlIHByb3ZpZGVzIGEgIk11dGFibGVNYXBwaW5nIiBhYnN0cmFjdCBiYXNlXG5jbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzIGZyb20gYSBiYXNlIHNldCBvZiAiX19nZXRpdGVtX18oKSIsXG4iX19zZXRpdGVtX18oKSIsICJfX2RlbGl0ZW1fXygpIiwgYW5kICJrZXlzKCkiLiBNdXRhYmxlIHNlcXVlbmNlc1xuc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyAiYXBwZW5kKCkiLCAiY291bnQoKSIsICJpbmRleCgpIiwgImV4dGVuZCgpIixcbiJpbnNlcnQoKSIsICJwb3AoKSIsICJyZW1vdmUoKSIsICJyZXZlcnNlKCkiIGFuZCAic29ydCgpIiwgbGlrZSBQeXRob25cbnN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZCBpbXBsZW1lbnRcbmFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgIl9fYWRkX18oKSIsICJfX3JhZGRfXygpIixcbiJfX2lhZGRfXygpIiwgIl9fbXVsX18oKSIsICJfX3JtdWxfXygpIiBhbmQgIl9faW11bF9fKCkiIGRlc2NyaWJlZFxuYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG4iX19jb250YWluc19fKCkiIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSAiaW4iIG9wZXJhdG9yO1xuZm9yIG1hcHBpbmdzLCAiaW4iIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yIHNlcXVlbmNlcywgaXRcbnNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlciByZWNvbW1lbmRlZCB0aGF0IGJvdGhcbm1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZSAiX19pdGVyX18oKSIgbWV0aG9kIHRvIGFsbG93XG5lZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCAiX19pdGVyX18oKSJcbnNob3VsZCBiZSB0aGUgc2FtZSBhcyAia2V5cygpIjsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGVcbnRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIi4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciAiPj0iIDAuICBBbHNvLCBhbiBvYmplY3QgdGhhdFxuICAgZG9lc25cJ3QgZGVmaW5lIGEgIl9fYm9vbF9fKCkiIG1ldGhvZCBhbmQgd2hvc2UgIl9fbGVuX18oKSIgbWV0aG9kXG4gICByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxub2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5sZW5ndGhfaGludCgpIi4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyICI+PSIgMC4gVGhpc1xuICAgbWV0aG9kIGlzIHB1cmVseSBhbiBvcHRpbWl6YXRpb24gYW5kIGlzIG5ldmVyIHJlcXVpcmVkIGZvclxuICAgY29ycmVjdG5lc3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLlxuICBBIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoICJOb25lIi5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mICJzZWxmW2tleV0iLiBGb3Igc2VxdWVuY2UgdHlwZXMsXG4gICB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuICBOb3RlIHRoYXRcbiAgIHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZSBjbGFzcyB3aXNoZXNcbiAgIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC4gSWZcbiAgICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSwgIlR5cGVFcnJvciIgbWF5IGJlIHJhaXNlZDsgaWYgb2ZcbiAgIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55XG4gICBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIHZhbHVlcyksICJJbmRleEVycm9yIiBzaG91bGQgYmVcbiAgIHJhaXNlZC4gRm9yIG1hcHBpbmcgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGVcbiAgIGNvbnRhaW5lciksICJLZXlFcnJvciIgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogImZvciIgbG9vcHMgZXhwZWN0IHRoYXQgYW4gIkluZGV4RXJyb3IiIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fbWlzc2luZ19fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIGJ5ICJkaWN0Ii4iX19nZXRpdGVtX18oKSIgdG8gaW1wbGVtZW50ICJzZWxmW2tleV0iIGZvciBkaWN0XG4gICBzdWJjbGFzc2VzIHdoZW4ga2V5IGlzIG5vdCBpbiB0aGUgZGljdGlvbmFyeS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lci5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgInJldmVyc2VkKCkiIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSAiX19yZXZlcnNlZF9fKCkiIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZSAicmV2ZXJzZWQoKSJcbiAgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZSBwcm90b2NvbCAoIl9fbGVuX18oKSJcbiAgIGFuZCAiX19nZXRpdGVtX18oKSIpLiAgT2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sXG4gICBzaG91bGQgb25seSBwcm92aWRlICJfX3JldmVyc2VkX18oKSIgaWYgdGhleSBjYW4gcHJvdmlkZSBhblxuICAgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnlcbiAgICJyZXZlcnNlZCgpIi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKCJpbiIgYW5kICJub3QgaW4iKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiwgdGhlIG1lbWJlcnNoaXAgdGVzdFxuICAgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSAiX19pdGVyX18oKSIsIHRoZW4gdGhlIG9sZCBzZXF1ZW5jZVxuICAgaXRlcmF0aW9uIHByb3RvY29sIHZpYSAiX19nZXRpdGVtX18oKSIsIHNlZSAqdGhpcyBzZWN0aW9uIGluIHRoZVxuICAgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21hdG11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19wb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19sc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX194b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX29yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiQCIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLFxuICAgInBvdygpIiwgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8IikuICBGb3IgaW5zdGFuY2UsIHRvXG4gICBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiAieCArIHkiLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYVxuICAgY2xhc3MgdGhhdCBoYXMgYW4gIl9fYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBpcyBjYWxsZWQuXG4gICBUaGUgIl9fZGl2bW9kX18oKSIgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZ1xuICAgIl9fZmxvb3JkaXZfXygpIiBhbmQgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0b1xuICAgIl9fdHJ1ZWRpdl9fKCkiLiAgTm90ZSB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdFxuICAgYW4gb3B0aW9uYWwgdGhpcmQgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW5cbiAgICJwb3coKSIgZnVuY3Rpb24gaXMgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybWF0bXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICJAIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsXG4gICAicG93KCkiLCAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKSB3aXRoIHJlZmxlY3RlZCAoc3dhcHBlZClcbiAgIG9wZXJhbmRzLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXNcbiAgIG5vdCBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiAieCAtXG4gICB5Iiwgd2hlcmUgKnkqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gIl9fcnN1Yl9fKCkiXG4gICBtZXRob2QsICJ5Ll9fcnN1Yl9fKHgpIiBpcyBjYWxsZWQgaWYgInguX19zdWJfXyh5KSIgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgInBvdygpIiB3aWxsIG5vdCB0cnkgY2FsbGluZyAiX19ycG93X18oKSIgKHRoZVxuICAgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYSBzdWJjbGFzcyBvZiB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIHR5cGUgYW5kIHRoYXQgc3ViY2xhc3MgcHJvdmlkZXMgdGhlIHJlZmxlY3RlZCBtZXRob2RcbiAgICAgZm9yIHRoZSBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3Nlc1xuICAgICB0byBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnNcJyBvcGVyYXRpb25zLlxuXG5vYmplY3QuX19pYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbWF0bXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9faWxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGF1Z21lbnRlZCBhcml0aG1ldGljXG4gICBhc3NpZ25tZW50cyAoIis9IiwgIi09IiwgIio9IiwgIkA9IiwgIi89IiwgIi8vPSIsICIlPSIsICIqKj0iLFxuICAgIjw8PSIsICI+Pj0iLCAiJj0iLCAiXj0iLCAifD0iKS4gIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGF0dGVtcHQgdG9cbiAgIGRvIHRoZSBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZCByZXR1cm4gdGhlIHJlc3VsdFxuICAgKHdoaWNoIGNvdWxkIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSwgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWNcbiAgIG1ldGhvZCBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZCBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlXG4gICBub3JtYWwgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgaWYgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3NcbiAgIHdpdGggYW4gIl9faWFkZF9fKCkiIG1ldGhvZCwgInggKz0geSIgaXMgZXF1aXZhbGVudCB0byAieCA9XG4gICB4Ll9faWFkZF9fKHkpIiAuIE90aGVyd2lzZSwgInguX19hZGRfXyh5KSIgYW5kICJ5Ll9fcmFkZF9fKHgpIiBhcmVcbiAgIGNvbnNpZGVyZWQsIGFzIHdpdGggdGhlIGV2YWx1YXRpb24gb2YgInggKyB5Ii4gSW4gY2VydGFpblxuICAgc2l0dWF0aW9ucywgYXVnbWVudGVkIGFzc2lnbm1lbnQgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGVycm9yc1xuICAgKHNlZSAqV2h5IGRvZXMgYV90dXBsZVtpXSArPSBbXCdpdGVtXCddIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZVxuICAgYWRkaXRpb24gd29ya3M/KiksIGJ1dCB0aGlzIGJlaGF2aW9yIGlzIGluIGZhY3QgcGFydCBvZiB0aGUgZGF0YVxuICAgbW9kZWwuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoIi0iLCAiKyIsXG4gICAiYWJzKCkiIGFuZCAifiIpLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5vYmplY3QuX19yb3VuZF9fKHNlbGZbLCBuXSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJjb21wbGV4KCkiLCAiaW50KCkiLFxuICAgImZsb2F0KCkiIGFuZCAicm91bmQoKSIuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlXG4gICB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmluZGV4KCkiLCBhbmQgd2hlbmV2ZXIgUHl0aG9uIG5lZWRzXG4gICB0byBsb3NzbGVzc2x5IGNvbnZlcnQgdGhlIG51bWVyaWMgb2JqZWN0IHRvIGFuIGludGVnZXIgb2JqZWN0IChzdWNoXG4gICBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGUgYnVpbHQtaW4gImJpbigpIiwgImhleCgpIiBhbmQgIm9jdCgpIlxuICAgZnVuY3Rpb25zKS4gUHJlc2VuY2Ugb2YgdGhpcyBtZXRob2QgaW5kaWNhdGVzIHRoYXQgdGhlIG51bWVyaWNcbiAgIG9iamVjdCBpcyBhbiBpbnRlZ2VyIHR5cGUuICBNdXN0IHJldHVybiBhbiBpbnRlZ2VyLlxuXG4gICBOb3RlOiBJbiBvcmRlciB0byBoYXZlIGEgY29oZXJlbnQgaW50ZWdlciB0eXBlIGNsYXNzLCB3aGVuXG4gICAgICJfX2luZGV4X18oKSIgaXMgZGVmaW5lZCAiX19pbnRfXygpIiBzaG91bGQgYWxzbyBiZSBkZWZpbmVkLCBhbmRcbiAgICAgYm90aCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlLlxuXG5cbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgIndpdGgiIHN0YXRlbWVudC4gVGhlIGNvbnRleHQgbWFuYWdlclxuaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWUgY29udGV4dFxuZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBub3JtYWxseVxuaW52b2tlZCB1c2luZyB0aGUgIndpdGgiIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb24gKlRoZSB3aXRoXG5zdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXIgbWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgIndpdGgiXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlICJhcyIgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgIk5vbmUiLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCAiX19leGl0X18oKSIgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOiAqKlBFUCAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cFxuPT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBjdXN0b20gY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZSBvbmx5XG5ndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdCBpblxudGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uOlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyAiX19oYXNoX18oKSIgYW5kICJfX3JlcHJfXygpIiB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieVxuYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2YgdGhlc2Vcbm1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWwgd2hlblxuaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOlxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSAiX19nZXRhdHRyaWJ1dGVfXygpIiBtYWNoaW5lcnkgaW4gdGhpcyBmYXNoaW9uIHByb3ZpZGVzXG5zaWduaWZpY2FudCBzY29wZSBmb3Igc3BlZWQgb3B0aW1pc2F0aW9ucyB3aXRoaW4gdGhlIGludGVycHJldGVyLCBhdFxudGhlIGNvc3Qgb2Ygc29tZSBmbGV4aWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2Ygc3BlY2lhbCBtZXRob2RzICh0aGVcbnNwZWNpYWwgbWV0aG9kICptdXN0KiBiZSBzZXQgb24gdGhlIGNsYXNzIG9iamVjdCBpdHNlbGYgaW4gb3JkZXIgdG8gYmVcbmNvbnNpc3RlbnRseSBpbnZva2VkIGJ5IHRoZSBpbnRlcnByZXRlcikuXG4nLAorICdzdHJpbmctbWV0aG9kcyc6IHUnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5ncyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLCBhbG9uZyB3aXRoXG50aGUgYWRkaXRpb25hbCBtZXRob2RzIGRlc2NyaWJlZCBiZWxvdy5cblxuU3RyaW5ncyBhbHNvIHN1cHBvcnQgdHdvIHN0eWxlcyBvZiBzdHJpbmcgZm9ybWF0dGluZywgb25lIHByb3ZpZGluZyBhXG5sYXJnZSBkZWdyZWUgb2YgZmxleGliaWxpdHkgYW5kIGN1c3RvbWl6YXRpb24gKHNlZSAic3RyLmZvcm1hdCgpIixcbipGb3JtYXQgU3RyaW5nIFN5bnRheCogYW5kICpDdXN0b20gU3RyaW5nIEZvcm1hdHRpbmcqKSBhbmQgdGhlIG90aGVyXG5iYXNlZCBvbiBDICJwcmludGYiIHN0eWxlIGZvcm1hdHRpbmcgdGhhdCBoYW5kbGVzIGEgbmFycm93ZXIgcmFuZ2Ugb2ZcbnR5cGVzIGFuZCBpcyBzbGlnaHRseSBoYXJkZXIgdG8gdXNlIGNvcnJlY3RseSwgYnV0IGlzIG9mdGVuIGZhc3RlciBmb3JcbnRoZSBjYXNlcyBpdCBjYW4gaGFuZGxlICgqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKikuXG5cblRoZSAqVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzKiBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNvdmVyc1xuYSBudW1iZXIgb2Ygb3RoZXIgbW9kdWxlcyB0aGF0IHByb3ZpZGUgdmFyaW91cyB0ZXh0IHJlbGF0ZWQgdXRpbGl0aWVzXG4oaW5jbHVkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IGluIHRoZSAicmUiIG1vZHVsZSkuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jYXNlZm9sZCgpXG5cbiAgIFJldHVybiBhIGNhc2Vmb2xkZWQgY29weSBvZiB0aGUgc3RyaW5nLiBDYXNlZm9sZGVkIHN0cmluZ3MgbWF5IGJlXG4gICB1c2VkIGZvciBjYXNlbGVzcyBtYXRjaGluZy5cblxuICAgQ2FzZWZvbGRpbmcgaXMgc2ltaWxhciB0byBsb3dlcmNhc2luZyBidXQgbW9yZSBhZ2dyZXNzaXZlIGJlY2F1c2VcbiAgIGl0IGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgY2FzZSBkaXN0aW5jdGlvbnMgaW4gYSBzdHJpbmcuIEZvclxuICAgZXhhbXBsZSwgdGhlIEdlcm1hbiBsb3dlcmNhc2UgbGV0dGVyICJcJ1x4ZGZcJyIgaXMgZXF1aXZhbGVudCB0byAiInNzIiIuXG4gICBTaW5jZSBpdCBpcyBhbHJlYWR5IGxvd2VyY2FzZSwgImxvd2VyKCkiIHdvdWxkIGRvIG5vdGhpbmcgdG8gIlwnXHhkZlwnIjtcbiAgICJjYXNlZm9sZCgpIiBjb252ZXJ0cyBpdCB0byAiInNzIiIuXG5cbiAgIFRoZSBjYXNlZm9sZGluZyBhbGdvcml0aG0gaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuc3RyLmNlbnRlcih3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIGNlbnRlcmVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmVcbiAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhbiBBU0NJSSBzcGFjZSkuIFRoZVxuICAgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gICAibGVuKHMpIi5cblxuc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKnN1YipcbiAgIGluIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kXG4gICAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uXG5cbnN0ci5lbmNvZGUoZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJzdHJpY3QiKVxuXG4gICBSZXR1cm4gYW4gZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgYXMgYSBieXRlcyBvYmplY3QuIERlZmF1bHRcbiAgIGVuY29kaW5nIGlzICJcJ3V0Zi04XCciLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50XG4gICBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpcyAiXCdzdHJpY3RcJyIsXG4gICBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgIlVuaWNvZGVFcnJvciIuIE90aGVyIHBvc3NpYmxlXG4gICB2YWx1ZXMgYXJlICJcJ2lnbm9yZVwnIiwgIlwncmVwbGFjZVwnIiwgIlwneG1sY2hhcnJlZnJlcGxhY2VcJyIsXG4gICAiXCdiYWNrc2xhc2hyZXBsYWNlXCciIGFuZCBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYVxuICAgImNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpIiwgc2VlIHNlY3Rpb24gKkVycm9yIEhhbmRsZXJzKi4gRm9yIGEgbGlzdFxuICAgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuICJGYWxzZSIuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHN1ZmZpeGVzXG4gICB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyh0YWJzaXplPTgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBjaGFyYWN0ZXJzXG4gICAoZGVmYXVsdCBpcyA4LCBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuXG4gICBUbyBleHBhbmQgdGhlIHN0cmluZywgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGVcbiAgIHN0cmluZyBpcyBleGFtaW5lZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICB0YWIgKCJcXHQiKSwgb25lIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIHJlc3VsdFxuICAgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi4gKFRoZVxuICAgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90IGNvcGllZC4pICBJZiB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZVxuICAgKCJcXG4iKSBvciByZXR1cm4gKCJcXHIiKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXNcbiAgIHJlc2V0IHRvIHplcm8uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGNvcGllZCB1bmNoYW5nZWQgYW5kIHRoZVxuICAgY3VycmVudCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZVxuICAgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHdoZW4gcHJpbnRlZC5cblxuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKClcbiAgIFwnMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzRcJ1xuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKDQpXG4gICBcJzAxICAwMTIgMDEyMyAgICAwMTIzNFwnXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCB3aXRoaW4gdGhlIHNsaWNlICJzW3N0YXJ0OmVuZF0iLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCpcbiAgIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uICBSZXR1cm4gIi0xIiBpZlxuICAgKnN1YiogaXMgbm90IGZvdW5kLlxuXG4gICBOb3RlOiBUaGUgImZpbmQoKSIgbWV0aG9kIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgeW91IG5lZWQgdG8ga25vd1xuICAgICB0aGUgcG9zaXRpb24gb2YgKnN1YiouICBUbyBjaGVjayBpZiAqc3ViKiBpcyBhIHN1YnN0cmluZyBvciBub3QsXG4gICAgIHVzZSB0aGUgImluIiBvcGVyYXRvcjpcblxuICAgICAgICA+Pj4gXCdQeVwnIGluIFwnUHl0aG9uXCdcbiAgICAgICAgVHJ1ZVxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzICJ7fSIuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmZvcm1hdF9tYXAobWFwcGluZylcblxuICAgU2ltaWxhciB0byAic3RyLmZvcm1hdCgqKm1hcHBpbmcpIiwgZXhjZXB0IHRoYXQgIm1hcHBpbmciIGlzIHVzZWRcbiAgIGRpcmVjdGx5IGFuZCBub3QgY29waWVkIHRvIGEgImRpY3QiLiAgVGhpcyBpcyB1c2VmdWwgaWYgZm9yIGV4YW1wbGVcbiAgICJtYXBwaW5nIiBpcyBhIGRpY3Qgc3ViY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOlxuICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBrZXlcbiAgIC4uLlxuICAgPj4+IFwne25hbWV9IHdhcyBib3JuIGluIHtjb3VudHJ5fVwnLmZvcm1hdF9tYXAoRGVmYXVsdChuYW1lPVwnR3VpZG9cJykpXG4gICBcJ0d1aWRvIHdhcyBib3JuIGluIGNvdW50cnlcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlICJmaW5kKCkiLCBidXQgcmFpc2UgIlZhbHVlRXJyb3IiIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyICJjIlxuICAgaXMgYWxwaGFudW1lcmljIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnMgIlRydWUiOlxuICAgImMuaXNhbHBoYSgpIiwgImMuaXNkZWNpbWFsKCkiLCAiYy5pc2RpZ2l0KCkiLCBvciAiYy5pc251bWVyaWMoKSIuXG5cbnN0ci5pc2FscGhhKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFiZXRpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEFscGhhYmV0aWNcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJMZXR0ZXIiLCBpLmUuLCB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHlcbiAgIGJlaW5nIG9uZSBvZiAiTG0iLCAiTHQiLCAiTHUiLCAiTGwiLCBvciAiTG8iLiAgTm90ZSB0aGF0IHRoaXMgaXNcbiAgIGRpZmZlcmVudCBmcm9tIHRoZSAiQWxwaGFiZXRpYyIgcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgVW5pY29kZVxuICAgU3RhbmRhcmQuXG5cbnN0ci5pc2RlY2ltYWwoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkZWNpbWFsIGNoYXJhY3RlcnNcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIERlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGZyb20gZ2VuZXJhbCBjYXRlZ29yeSAiTmQiLiBUaGlzIGNhdGVnb3J5XG4gICBpbmNsdWRlcyBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZCB0b1xuICAgZm9ybSBkZWNpbWFsLXJhZGl4IG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTy5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBEaWdpdHMgaW5jbHVkZSBkZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFuZCBkaWdpdHMgdGhhdCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcsIHN1Y2ggYXMgdGhlXG4gICBjb21wYXRpYmlsaXR5IHN1cGVyc2NyaXB0IGRpZ2l0cy4gIEZvcm1hbGx5LCBhIGRpZ2l0IGlzIGEgY2hhcmFjdGVyXG4gICB0aGF0IGhhcyB0aGUgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0IG9yXG4gICBOdW1lcmljX1R5cGU9RGVjaW1hbC5cblxuc3RyLmlzaWRlbnRpZmllcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFjY29yZGluZyB0byB0aGVcbiAgIGxhbmd1YWdlIGRlZmluaXRpb24sIHNlY3Rpb24gKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyouXG5cbiAgIFVzZSAia2V5d29yZC5pc2tleXdvcmQoKSIgdG8gdGVzdCBmb3IgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgc3VjaCBhc1xuICAgImRlZiIgYW5kICJjbGFzcyIuXG5cbnN0ci5pc2xvd2VyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIG51bWVyaWMgY2hhcmFjdGVycyxcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIE51bWVyaWNcbiAgIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlXG4gICB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LCBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OXG4gICBPTkUgRklGVEguICBGb3JtYWxseSwgbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIHRoZVxuICAgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0LCBOdW1lcmljX1R5cGU9RGVjaW1hbCBvclxuICAgTnVtZXJpY19UeXBlPU51bWVyaWMuXG5cbnN0ci5pc3ByaW50YWJsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHByaW50YWJsZSBvciB0aGVcbiAgIHN0cmluZyBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiAgTm9ucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlXG4gICB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlIGFzXG4gICAiT3RoZXIiIG9yICJTZXBhcmF0b3IiLCBleGNlcHRpbmcgdGhlIEFTQ0lJIHNwYWNlICgweDIwKSB3aGljaCBpc1xuICAgY29uc2lkZXJlZCBwcmludGFibGUuICAoTm90ZSB0aGF0IHByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHRoaXNcbiAgIGNvbnRleHQgYXJlIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgZXNjYXBlZCB3aGVuICJyZXByKCkiIGlzXG4gICBpbnZva2VkIG9uIGEgc3RyaW5nLiAgSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGhhbmRsaW5nIG9mIHN0cmluZ3NcbiAgIHdyaXR0ZW4gdG8gInN5cy5zdGRvdXQiIG9yICJzeXMuc3RkZXJyIi4pXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBXaGl0ZXNwYWNlXG4gICBjaGFyYWN0ZXJzICBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIk90aGVyIiBvciAiU2VwYXJhdG9yIiBhbmQgdGhvc2Ugd2l0aCBiaWRpcmVjdGlvbmFsXG4gICBwcm9wZXJ0eSBiZWluZyBvbmUgb2YgIldTIiwgIkIiLCBvciAiUyIuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc3VwcGVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIHVwcGVyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmpvaW4oaXRlcmFibGUpXG5cbiAgIFJldHVybiBhIHN0cmluZyB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5ncyBpbiB0aGVcbiAgICppdGVyYWJsZSogKml0ZXJhYmxlKi4gIEEgIlR5cGVFcnJvciIgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlXG4gICBhbnkgbm9uLXN0cmluZyB2YWx1ZXMgaW4gKml0ZXJhYmxlKiwgaW5jbHVkaW5nICJieXRlcyIgb2JqZWN0cy5cbiAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUlcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCB0aGUgY2FzZWQgY2hhcmFjdGVycyBbNF1cbiAgIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbiAgIFRoZSBsb3dlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgICAgXCdzcGFjaW91cyAgIFwnXG4gICAgICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgICAgIFwnZXhhbXBsZS5jb21cJ1xuXG5zdGF0aWMgc3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSlcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICAic3RyLnRyYW5zbGF0ZSgpIi5cblxuICAgSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmdcbiAgIFVuaWNvZGUgb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIChzdHJpbmdzIG9mIGxlbmd0aCAxKSB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyAob2YgYXJiaXRyYXJ5IGxlbmd0aHMpIG9yIE5vbmUuXG4gICBDaGFyYWN0ZXIga2V5cyB3aWxsIHRoZW4gYmUgY29udmVydGVkIHRvIG9yZGluYWxzLlxuXG4gICBJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLFxuICAgYW5kIGluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZFxuICAgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiAgSWYgdGhlcmUgaXMgYSB0aGlyZFxuICAgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG9cbiAgIE5vbmUgaW4gdGhlIHJlc3VsdC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluICJzW3N0YXJ0OmVuZF0iLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gIi0xIiBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgInJmaW5kKCkiIGJ1dCByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUlcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbnN0ci5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgICJOb25lIiwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvciBzcGxpdHRpbmdcbiAgIGZyb20gdGhlIHJpZ2h0LCAicnNwbGl0KCkiIGJlaGF2ZXMgbGlrZSAic3BsaXQoKSIgd2hpY2ggaXNcbiAgIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICAgICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICAgICBcJyAgIHNwYWNpb3VzXCdcbiAgICAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICAgICBcJ21pc3Npc3NcJ1xuXG5zdHIuc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuICBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCpcbiAgIHNwbGl0cyBhcmUgZG9uZSAodGh1cywgdGhlIGxpc3Qgd2lsbCBoYXZlIGF0IG1vc3QgIm1heHNwbGl0KzEiXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgIi0xIiwgdGhlbiB0aGVyZSBpc1xuICAgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICAiXCcxLCwyXCcuc3BsaXQoXCcsXCcpIiByZXR1cm5zICJbXCcxXCcsIFwnXCcsIFwnMlwnXSIpLiAgVGhlICpzZXAqIGFyZ3VtZW50XG4gICBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgICJcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpIiByZXR1cm5zICJbXCcxXCcsIFwnMlwnLCBcJzNcJ10iKS4gU3BsaXR0aW5nIGFuXG4gICBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyAiW1wnXCddIi5cblxuICAgRm9yIGV4YW1wbGU6XG5cbiAgICAgID4+PiBcJzEsMiwzXCcuc3BsaXQoXCcsXCcpXG4gICAgICBbXCcxXCcsIFwnMlwnLCBcJzNcJ11cbiAgICAgID4+PiBcJzEsMiwzXCcuc3BsaXQoXCcsXCcsIG1heHNwbGl0PTEpXG4gICAgICBbXCcxXCcsIFwnMiwzXCddXG4gICAgICA+Pj4gXCcxLDIsLDMsXCcuc3BsaXQoXCcsXCcpXG4gICAgICBbXCcxXCcsIFwnMlwnLCBcJ1wnLCBcJzNcJywgXCdcJ11cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyAiTm9uZSIsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhICJOb25lIiBzZXBhcmF0b3IgcmV0dXJucyAiW10iLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IFwnMSAyIDNcJy5zcGxpdCgpXG4gICAgICBbXCcxXCcsIFwnMlwnLCBcJzNcJ11cbiAgICAgID4+PiBcJzEgMiAzXCcuc3BsaXQobWF4c3BsaXQ9MSlcbiAgICAgIFtcJzFcJywgXCcyIDNcJ11cbiAgICAgID4+PiBcJyAgIDEgICAyICAgMyAgIFwnLnNwbGl0KClcbiAgICAgIFtcJzFcJywgXCcyXCcsIFwnM1wnXVxuXG5zdHIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiB0aGUgc3RyaW5nLCBicmVha2luZyBhdCBsaW5lXG4gICBib3VuZGFyaWVzLiAgTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3RcbiAgIHVubGVzcyAqa2VlcGVuZHMqIGlzIGdpdmVuIGFuZCB0cnVlLlxuXG4gICBUaGlzIG1ldGhvZCBzcGxpdHMgb24gdGhlIGZvbGxvd2luZyBsaW5lIGJvdW5kYXJpZXMuICBJblxuICAgcGFydGljdWxhciwgdGhlIGJvdW5kYXJpZXMgYXJlIGEgc3VwZXJzZXQgb2YgKnVuaXZlcnNhbCBuZXdsaW5lcyouXG5cbiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFJlcHJlc2VudGF0aW9uICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlxcbiIgICAgICAgICAgICAgICAgICAgIHwgTGluZSBGZWVkICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcciIgICAgICAgICAgICAgICAgICAgIHwgQ2FycmlhZ2UgUmV0dXJuICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcclxcbiIgICAgICAgICAgICAgICAgICB8IENhcnJpYWdlIFJldHVybiArIExpbmUgRmVlZCAgIHxcbiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcXHYiIG9yICJcXHgwYiIgICAgICAgICAgfCBMaW5lIFRhYnVsYXRpb24gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFxmIiBvciAiXFx4MGMiICAgICAgICAgIHwgRm9ybSBGZWVkICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxceDFjIiAgICAgICAgICAgICAgICAgIHwgRmlsZSBTZXBhcmF0b3IgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxceDFkIiAgICAgICAgICAgICAgICAgIHwgR3JvdXAgU2VwYXJhdG9yICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxceDFlIiAgICAgICAgICAgICAgICAgIHwgUmVjb3JkIFNlcGFyYXRvciAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxceDg1IiAgICAgICAgICAgICAgICAgIHwgTmV4dCBMaW5lIChDMSBDb250cm9sIENvZGUpICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcdTIwMjgiICAgICAgICAgICAgICAgIHwgTGluZSBTZXBhcmF0b3IgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcdTIwMjkiICAgICAgICAgICAgICAgIHwgUGFyYWdyYXBoIFNlcGFyYXRvciAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogIlxcdiIgYW5kICJcXGYiIGFkZGVkIHRvIGxpc3Qgb2YgbGluZVxuICAgYm91bmRhcmllcy5cblxuICAgRm9yIGV4YW1wbGU6XG5cbiAgICAgID4+PiBcJ2FiIGNcXG5cXG5kZSBmZ1xccmtsXFxyXFxuXCcuc3BsaXRsaW5lcygpXG4gICAgICBbXCdhYiBjXCcsIFwnXCcsIFwnZGUgZmdcJywgXCdrbFwnXVxuICAgICAgPj4+IFwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpXG4gICAgICBbXCdhYiBjXFxuXCcsIFwnXFxuXCcsIFwnZGUgZmdcXHJcJywgXCdrbFxcclxcblwnXVxuXG4gICBVbmxpa2UgInNwbGl0KCkiIHdoZW4gYSBkZWxpbWl0ZXIgc3RyaW5nICpzZXAqIGlzIGdpdmVuLCB0aGlzXG4gICBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBsaXN0IGZvciB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgYSB0ZXJtaW5hbFxuICAgbGluZSBicmVhayBkb2VzIG5vdCByZXN1bHQgaW4gYW4gZXh0cmEgbGluZTpcblxuICAgICAgPj4+ICIiLnNwbGl0bGluZXMoKVxuICAgICAgW11cbiAgICAgID4+PiAiT25lIGxpbmVcXG4iLnNwbGl0bGluZXMoKVxuICAgICAgW1wnT25lIGxpbmVcJ11cblxuICAgRm9yIGNvbXBhcmlzb24sICJzcGxpdChcJ1xcblwnKSIgZ2l2ZXM6XG5cbiAgICAgID4+PiBcJ1wnLnNwbGl0KFwnXFxuXCcpXG4gICAgICBbXCdcJ11cbiAgICAgID4+PiBcJ1R3byBsaW5lc1xcblwnLnNwbGl0KFwnXFxuXCcpXG4gICAgICBbXCdUd28gbGluZXNcJywgXCdcJ11cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuICJUcnVlIiBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2UgcmV0dXJuXG4gICAiRmFsc2UiLiAqcHJlZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHByZWZpeGVzIHRvIGxvb2sgZm9yLlxuICAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdCBwb3NpdGlvbi5cbiAgIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuXG5zdHIuc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG4gICBjaGFyYWN0ZXJzIHJlbW92ZWQuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlXG4gICBzZXQgb2YgY2hhcmFjdGVycyB0byBiZSByZW1vdmVkLiBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycypcbiAgIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzXG4gICBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmVcbiAgIHN0cmlwcGVkOlxuXG4gICAgICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgICAgIFwnc3BhY2lvdXNcJ1xuICAgICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgICAgIFwnZXhhbXBsZVwnXG5cbiAgIFRoZSBvdXRlcm1vc3QgbGVhZGluZyBhbmQgdHJhaWxpbmcgKmNoYXJzKiBhcmd1bWVudCB2YWx1ZXMgYXJlXG4gICBzdHJpcHBlZCBmcm9tIHRoZSBzdHJpbmcuIENoYXJhY3RlcnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbGVhZGluZ1xuICAgZW5kIHVudGlsIHJlYWNoaW5nIGEgc3RyaW5nIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gdGhlXG4gICBzZXQgb2YgY2hhcmFjdGVycyBpbiAqY2hhcnMqLiBBIHNpbWlsYXIgYWN0aW9uIHRha2VzIHBsYWNlIG9uIHRoZVxuICAgdHJhaWxpbmcgZW5kLiBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IGNvbW1lbnRfc3RyaW5nID0gXCcjLi4uLi4uLiBTZWN0aW9uIDMuMi4xIElzc3VlICMzMiAuLi4uLi4uXCdcbiAgICAgID4+PiBjb21tZW50X3N0cmluZy5zdHJpcChcJy4jISBcJylcbiAgICAgIFwnU2VjdGlvbiAzLjIuMSBJc3N1ZSAjMzJcJ1xuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS4gTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlIHRoYXRcbiAgICJzLnN3YXBjYXNlKCkuc3dhcGNhc2UoKSA9PSBzIi5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIEZvciBleGFtcGxlOlxuXG4gICAgICA+Pj4gXCdIZWxsbyB3b3JsZFwnLnRpdGxlKClcbiAgICAgIFwnSGVsbG8gV29ybGRcJ1xuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgIC4uLiAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgcylcbiAgICAgIC4uLlxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuc3RyLnRyYW5zbGF0ZSh0YWJsZSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGluIHdoaWNoIGVhY2ggY2hhcmFjdGVyIGhhcyBiZWVuIG1hcHBlZFxuICAgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUuICBUaGUgdGFibGUgbXVzdCBiZSBhbiBvYmplY3RcbiAgIHRoYXQgaW1wbGVtZW50cyBpbmRleGluZyB2aWEgIl9fZ2V0aXRlbV9fKCkiLCB0eXBpY2FsbHkgYSAqbWFwcGluZypcbiAgIG9yICpzZXF1ZW5jZSouICBXaGVuIGluZGV4ZWQgYnkgYSBVbmljb2RlIG9yZGluYWwgKGFuIGludGVnZXIpLCB0aGVcbiAgIHRhYmxlIG9iamVjdCBjYW4gZG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IHJldHVybiBhIFVuaWNvZGUgb3JkaW5hbFxuICAgb3IgYSBzdHJpbmcsIHRvIG1hcCB0aGUgY2hhcmFjdGVyIHRvIG9uZSBvciBtb3JlIG90aGVyIGNoYXJhY3RlcnM7XG4gICByZXR1cm4gIk5vbmUiLCB0byBkZWxldGUgdGhlIGNoYXJhY3RlciBmcm9tIHRoZSByZXR1cm4gc3RyaW5nOyBvclxuICAgcmFpc2UgYSAiTG9va3VwRXJyb3IiIGV4Y2VwdGlvbiwgdG8gbWFwIHRoZSBjaGFyYWN0ZXIgdG8gaXRzZWxmLlxuXG4gICBZb3UgY2FuIHVzZSAic3RyLm1ha2V0cmFucygpIiB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbiBtYXAgZnJvbVxuICAgY2hhcmFjdGVyLXRvLWNoYXJhY3RlciBtYXBwaW5ncyBpbiBkaWZmZXJlbnQgZm9ybWF0cy5cblxuICAgU2VlIGFsc28gdGhlICJjb2RlY3MiIG1vZHVsZSBmb3IgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIHRvIGN1c3RvbVxuICAgY2hhcmFjdGVyIG1hcHBpbmdzLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLiAgTm90ZSB0aGF0ICJzdHIudXBwZXIoKS5pc3VwcGVyKCkiIG1pZ2h0IGJlXG4gICAiRmFsc2UiIGlmICJzIiBjb250YWlucyB1bmNhc2VkIGNoYXJhY3RlcnMgb3IgaWYgdGhlIFVuaWNvZGVcbiAgIGNhdGVnb3J5IG9mIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyKHMpIGlzIG5vdCAiTHUiIChMZXR0ZXIsXG4gICB1cHBlcmNhc2UpLCBidXQgZS5nLiAiTHQiIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbiAgIFRoZSB1cHBlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCBBU0NJSSAiXCcwXCciIGRpZ2l0cyB0b1xuICAgbWFrZSBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gQSBsZWFkaW5nIHNpZ24gcHJlZml4XG4gICAoIlwnK1wnIi8iXCctXCciKSBpcyBoYW5kbGVkIGJ5IGluc2VydGluZyB0aGUgcGFkZGluZyAqYWZ0ZXIqIHRoZSBzaWduXG4gICBjaGFyYWN0ZXIgcmF0aGVyIHRoYW4gYmVmb3JlLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmXG4gICAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAibGVuKHMpIi5cblxuICAgRm9yIGV4YW1wbGU6XG5cbiAgICAgID4+PiAiNDIiLnpmaWxsKDUpXG4gICAgICBcJzAwMDQyXCdcbiAgICAgID4+PiAiLTQyIi56ZmlsbCg1KVxuICAgICAgXCctMDA0MlwnXG4nLAorICdzdHJpbmdzJzogdSdcblN0cmluZyBhbmQgQnl0ZXMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuU3RyaW5nIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBzdHJpbmdsaXRlcmFsICAgOjo9IFtzdHJpbmdwcmVmaXhdKHNob3J0c3RyaW5nIHwgbG9uZ3N0cmluZylcbiAgIHN0cmluZ3ByZWZpeCAgICA6Oj0gInIiIHwgInUiIHwgIlIiIHwgIlUiXG4gICBzaG9ydHN0cmluZyAgICAgOjo9ICJcJyIgc2hvcnRzdHJpbmdpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRzdHJpbmdpdGVtKiBcJyJcJ1xuICAgbG9uZ3N0cmluZyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nc3RyaW5naXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdzdHJpbmdpdGVtKiBcJyIiIlwnXG4gICBzaG9ydHN0cmluZ2l0ZW0gOjo9IHNob3J0c3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgbG9uZ3N0cmluZ2l0ZW0gIDo6PSBsb25nc3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgc2hvcnRzdHJpbmdjaGFyIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nc3RyaW5nY2hhciAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIHN0cmluZ2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IHNvdXJjZSBjaGFyYWN0ZXI+XG5cbiAgIGJ5dGVzbGl0ZXJhbCAgIDo6PSBieXRlc3ByZWZpeChzaG9ydGJ5dGVzIHwgbG9uZ2J5dGVzKVxuICAgYnl0ZXNwcmVmaXggICAgOjo9ICJiIiB8ICJCIiB8ICJiciIgfCAiQnIiIHwgImJSIiB8ICJCUiIgfCAicmIiIHwgInJCIiB8ICJSYiIgfCAiUkIiXG4gICBzaG9ydGJ5dGVzICAgICA6Oj0gIlwnIiBzaG9ydGJ5dGVzaXRlbSogIlwnIiB8IFwnIlwnIHNob3J0Ynl0ZXNpdGVtKiBcJyJcJ1xuICAgbG9uZ2J5dGVzICAgICAgOjo9ICJcJ1wnXCciIGxvbmdieXRlc2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nYnl0ZXNpdGVtKiBcJyIiIlwnXG4gICBzaG9ydGJ5dGVzaXRlbSA6Oj0gc2hvcnRieXRlc2NoYXIgfCBieXRlc2VzY2FwZXNlcVxuICAgbG9uZ2J5dGVzaXRlbSAgOjo9IGxvbmdieXRlc2NoYXIgfCBieXRlc2VzY2FwZXNlcVxuICAgc2hvcnRieXRlc2NoYXIgOjo9IDxhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ2J5dGVzY2hhciAgOjo9IDxhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgYnl0ZXNlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBBU0NJSSBjaGFyYWN0ZXI+XG5cbk9uZSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gbm90IGluZGljYXRlZCBieSB0aGVzZSBwcm9kdWN0aW9ucyBpcyB0aGF0XG53aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIGJldHdlZW4gdGhlICJzdHJpbmdwcmVmaXgiIG9yICJieXRlc3ByZWZpeCJcbmFuZCB0aGUgcmVzdCBvZiB0aGUgbGl0ZXJhbC4gVGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IGlzIGRlZmluZWQgYnlcbnRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbjsgaXQgaXMgVVRGLTggaWYgbm8gZW5jb2RpbmcgZGVjbGFyYXRpb24gaXNcbmdpdmVuIGluIHRoZSBzb3VyY2UgZmlsZTsgc2VlIHNlY3Rpb24gKkVuY29kaW5nIGRlY2xhcmF0aW9ucyouXG5cbkluIHBsYWluIEVuZ2xpc2g6IEJvdGggdHlwZXMgb2YgbGl0ZXJhbHMgY2FuIGJlIGVuY2xvc2VkIGluIG1hdGNoaW5nXG5zaW5nbGUgcXVvdGVzICgiXCciKSBvciBkb3VibGUgcXVvdGVzICgiIiIpLiAgVGhleSBjYW4gYWxzbyBiZSBlbmNsb3NlZFxuaW4gbWF0Y2hpbmcgZ3JvdXBzIG9mIHRocmVlIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzICh0aGVzZSBhcmVcbmdlbmVyYWxseSByZWZlcnJlZCB0byBhcyAqdHJpcGxlLXF1b3RlZCBzdHJpbmdzKikuICBUaGUgYmFja3NsYXNoXG4oIlxcIikgY2hhcmFjdGVyIGlzIHVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBvdGhlcndpc2UgaGF2ZSBhXG5zcGVjaWFsIG1lYW5pbmcsIHN1Y2ggYXMgbmV3bGluZSwgYmFja3NsYXNoIGl0c2VsZiwgb3IgdGhlIHF1b3RlXG5jaGFyYWN0ZXIuXG5cbkJ5dGVzIGxpdGVyYWxzIGFyZSBhbHdheXMgcHJlZml4ZWQgd2l0aCAiXCdiXCciIG9yICJcJ0JcJyI7IHRoZXkgcHJvZHVjZVxuYW4gaW5zdGFuY2Ugb2YgdGhlICJieXRlcyIgdHlwZSBpbnN0ZWFkIG9mIHRoZSAic3RyIiB0eXBlLiAgVGhleSBtYXlcbm9ubHkgY29udGFpbiBBU0NJSSBjaGFyYWN0ZXJzOyBieXRlcyB3aXRoIGEgbnVtZXJpYyB2YWx1ZSBvZiAxMjggb3JcbmdyZWF0ZXIgbXVzdCBiZSBleHByZXNzZWQgd2l0aCBlc2NhcGVzLlxuXG5BcyBvZiBQeXRob24gMy4zIGl0IGlzIHBvc3NpYmxlIGFnYWluIHRvIHByZWZpeCBzdHJpbmcgbGl0ZXJhbHMgd2l0aCBhXG4idSIgcHJlZml4IHRvIHNpbXBsaWZ5IG1haW50ZW5hbmNlIG9mIGR1YWwgMi54IGFuZCAzLnggY29kZWJhc2VzLlxuXG5Cb3RoIHN0cmluZyBhbmQgYnl0ZXMgbGl0ZXJhbHMgbWF5IG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgd2l0aCBhXG5sZXR0ZXIgIlwnclwnIiBvciAiXCdSXCciOyBzdWNoIHN0cmluZ3MgYXJlIGNhbGxlZCAqcmF3IHN0cmluZ3MqIGFuZCB0cmVhdFxuYmFja3NsYXNoZXMgYXMgbGl0ZXJhbCBjaGFyYWN0ZXJzLiAgQXMgYSByZXN1bHQsIGluIHN0cmluZyBsaXRlcmFscyxcbiJcJ1xcVVwnIiBhbmQgIlwnXFx1XCciIGVzY2FwZXMgaW4gcmF3IHN0cmluZ3MgYXJlIG5vdCB0cmVhdGVkIHNwZWNpYWxseS5cbkdpdmVuIHRoYXQgUHl0aG9uIDIueFwncyByYXcgdW5pY29kZSBsaXRlcmFscyBiZWhhdmUgZGlmZmVyZW50bHkgdGhhblxuUHl0aG9uIDMueFwncyB0aGUgIlwndXJcJyIgc3ludGF4IGlzIG5vdCBzdXBwb3J0ZWQuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlICJcJ3JiXCciIHByZWZpeCBvZiByYXcgYnl0ZXMgbGl0ZXJhbHMgaGFzIGJlZW5cbmFkZGVkIGFzIGEgc3lub255bSBvZiAiXCdiclwnIi5cblxuTmV3IGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciB0aGUgdW5pY29kZSBsZWdhY3kgbGl0ZXJhbFxuKCJ1XCd2YWx1ZVwnIikgd2FzIHJlaW50cm9kdWNlZCB0byBzaW1wbGlmeSB0aGUgbWFpbnRlbmFuY2Ugb2YgZHVhbFxuUHl0aG9uIDIueCBhbmQgMy54IGNvZGViYXNlcy4gU2VlICoqUEVQIDQxNCoqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5JbiB0cmlwbGUtcXVvdGVkIGxpdGVyYWxzLCB1bmVzY2FwZWQgbmV3bGluZXMgYW5kIHF1b3RlcyBhcmUgYWxsb3dlZFxuKGFuZCBhcmUgcmV0YWluZWQpLCBleGNlcHQgdGhhdCB0aHJlZSB1bmVzY2FwZWQgcXVvdGVzIGluIGEgcm93XG50ZXJtaW5hdGUgdGhlIGxpdGVyYWwuICAoQSAicXVvdGUiIGlzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBvcGVuIHRoZVxubGl0ZXJhbCwgaS5lLiBlaXRoZXIgIlwnIiBvciAiIiIuKVxuXG5Vbmxlc3MgYW4gIlwnclwnIiBvciAiXCdSXCciIHByZWZpeCBpcyBwcmVzZW50LCBlc2NhcGUgc2VxdWVuY2VzIGluIHN0cmluZ1xuYW5kIGJ5dGVzIGxpdGVyYWxzIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gcnVsZXMgc2ltaWxhciB0byB0aG9zZVxudXNlZCBieSBTdGFuZGFyZCBDLiAgVGhlIHJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgRXNjYXBlIFNlcXVlbmNlICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbnwgIlxcbmV3bGluZSIgICAgICAgIHwgQmFja3NsYXNoIGFuZCBuZXdsaW5lIGlnbm9yZWQgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXFxcIiAgICAgICAgICAgICAgfCBCYWNrc2xhc2ggKCJcXCIpICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXFwnIiAgICAgICAgICAgICAgfCBTaW5nbGUgcXVvdGUgKCJcJyIpICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXCIiICAgICAgICAgICAgICB8IERvdWJsZSBxdW90ZSAoIiIiKSAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxhIiAgICAgICAgICAgICAgfCBBU0NJSSBCZWxsIChCRUwpICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcYiIgICAgICAgICAgICAgIHwgQVNDSUkgQmFja3NwYWNlIChCUykgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXGYiICAgICAgICAgICAgICB8IEFTQ0lJIEZvcm1mZWVkIChGRikgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxuIiAgICAgICAgICAgICAgfCBBU0NJSSBMaW5lZmVlZCAoTEYpICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcciIgICAgICAgICAgICAgIHwgQVNDSUkgQ2FycmlhZ2UgUmV0dXJuIChDUikgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXHQiICAgICAgICAgICAgICB8IEFTQ0lJIEhvcml6b250YWwgVGFiIChUQUIpICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx2IiAgICAgICAgICAgICAgfCBBU0NJSSBWZXJ0aWNhbCBUYWIgKFZUKSAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcb29vIiAgICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggb2N0YWwgdmFsdWUgKm9vbyogIHwgKDEsMykgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXHhoaCIgICAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIGhleCB2YWx1ZSAqaGgqICAgICB8ICgyLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Fc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmcgbGl0ZXJhbHMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58ICJcXE57bmFtZX0iICAgICAgICB8IENoYXJhY3RlciBuYW1lZCAqbmFtZSogaW4gdGhlICAgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8IFVuaWNvZGUgZGF0YWJhc2UgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx1eHh4eCIgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCAxNi1iaXQgaGV4IHZhbHVlICAgfCAoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCAqeHh4eCogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcVXh4eHh4eHh4IiAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMzItYml0IGhleCB2YWx1ZSAgIHwgKDYpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgKnh4eHh4eHh4KiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiBBcyBpbiBTdGFuZGFyZCBDLCB1cCB0byB0aHJlZSBvY3RhbCBkaWdpdHMgYXJlIGFjY2VwdGVkLlxuXG4yLiBVbmxpa2UgaW4gU3RhbmRhcmQgQywgZXhhY3RseSB0d28gaGV4IGRpZ2l0cyBhcmUgcmVxdWlyZWQuXG5cbjMuIEluIGEgYnl0ZXMgbGl0ZXJhbCwgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIGVzY2FwZXMgZGVub3RlIHRoZVxuICAgYnl0ZSB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4gSW4gYSBzdHJpbmcgbGl0ZXJhbCwgdGhlc2UgZXNjYXBlc1xuICAgZGVub3RlIGEgVW5pY29kZSBjaGFyYWN0ZXIgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuXG5cbjQuIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFN1cHBvcnQgZm9yIG5hbWUgYWxpYXNlcyBbMV0gaGFzIGJlZW5cbiAgIGFkZGVkLlxuXG41LiBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmUgcmVxdWlyZWQuXG5cbjYuIEFueSBVbmljb2RlIGNoYXJhY3RlciBjYW4gYmUgZW5jb2RlZCB0aGlzIHdheS4gIEV4YWN0bHkgZWlnaHRcbiAgIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG5Vbmxpa2UgU3RhbmRhcmQgQywgYWxsIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBsZWZ0IGluIHRoZVxuc3RyaW5nIHVuY2hhbmdlZCwgaS5lLiwgKnRoZSBiYWNrc2xhc2ggaXMgbGVmdCBpbiB0aGUgcmVzdWx0Ki4gIChUaGlzXG5iZWhhdmlvciBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmc6IGlmIGFuIGVzY2FwZSBzZXF1ZW5jZSBpcyBtaXN0eXBlZCxcbnRoZSByZXN1bHRpbmcgb3V0cHV0IGlzIG1vcmUgZWFzaWx5IHJlY29nbml6ZWQgYXMgYnJva2VuLikgIEl0IGlzIGFsc29cbmltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZ1xubGl0ZXJhbHMgZmFsbCBpbnRvIHRoZSBjYXRlZ29yeSBvZiB1bnJlY29nbml6ZWQgZXNjYXBlcyBmb3IgYnl0ZXNcbmxpdGVyYWxzLlxuXG5FdmVuIGluIGEgcmF3IGxpdGVyYWwsIHF1b3RlcyBjYW4gYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLCBidXQgdGhlXG5iYWNrc2xhc2ggcmVtYWlucyBpbiB0aGUgcmVzdWx0OyBmb3IgZXhhbXBsZSwgInIiXFwiIiIgaXMgYSB2YWxpZFxuc3RyaW5nIGxpdGVyYWwgY29uc2lzdGluZyBvZiB0d28gY2hhcmFjdGVyczogYSBiYWNrc2xhc2ggYW5kIGEgZG91YmxlXG5xdW90ZTsgInIiXFwiIiBpcyBub3QgYSB2YWxpZCBzdHJpbmcgbGl0ZXJhbCAoZXZlbiBhIHJhdyBzdHJpbmcgY2Fubm90XG5lbmQgaW4gYW4gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcykuICBTcGVjaWZpY2FsbHksICphIHJhdyBsaXRlcmFsXG5jYW5ub3QgZW5kIGluIGEgc2luZ2xlIGJhY2tzbGFzaCogKHNpbmNlIHRoZSBiYWNrc2xhc2ggd291bGQgZXNjYXBlXG50aGUgZm9sbG93aW5nIHF1b3RlIGNoYXJhY3RlcikuICBOb3RlIGFsc28gdGhhdCBhIHNpbmdsZSBiYWNrc2xhc2hcbmZvbGxvd2VkIGJ5IGEgbmV3bGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aG9zZSB0d28gY2hhcmFjdGVycyBhcyBwYXJ0XG5vZiB0aGUgbGl0ZXJhbCwgKm5vdCogYXMgYSBsaW5lIGNvbnRpbnVhdGlvbi5cbicsCiAgJ3N1YnNjcmlwdGlvbnMnOiB1J1xuU3Vic2NyaXB0aW9uc1xuKioqKioqKioqKioqKlxuXG5BIHN1YnNjcmlwdGlvbiBzZWxlY3RzIGFuIGl0ZW0gb2YgYSBzZXF1ZW5jZSAoc3RyaW5nLCB0dXBsZSBvciBsaXN0KVxub3IgbWFwcGluZyAoZGljdGlvbmFyeSkgb2JqZWN0OlxuXG4gICBzdWJzY3JpcHRpb24gOjo9IHByaW1hcnkgIlsiIGV4cHJlc3Npb25fbGlzdCAiXSJcblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyBzdWJzY3JpcHRpb25cbihsaXN0cyBvciBkaWN0aW9uYXJpZXMgZm9yIGV4YW1wbGUpLiAgVXNlci1kZWZpbmVkIG9iamVjdHMgY2FuIHN1cHBvcnRcbnN1YnNjcmlwdGlvbiBieSBkZWZpbmluZyBhICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbkZvciBidWlsdC1pbiBvYmplY3RzLCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9iamVjdHMgdGhhdCBzdXBwb3J0XG5zdWJzY3JpcHRpb246XG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZywgdGhlIGV4cHJlc3Npb24gbGlzdCBtdXN0IGV2YWx1YXRlIHRvIGFuXG5vYmplY3Qgd2hvc2UgdmFsdWUgaXMgb25lIG9mIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nLCBhbmQgdGhlXG5zdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgdmFsdWUgaW4gdGhlIG1hcHBpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0XG5rZXkuICAoVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBhIHR1cGxlIGV4Y2VwdCBpZiBpdCBoYXMgZXhhY3RseSBvbmVcbml0ZW0uKVxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIHNlcXVlbmNlLCB0aGUgZXhwcmVzc2lvbiAobGlzdCkgbXVzdCBldmFsdWF0ZSB0b1xuYW4gaW50ZWdlciBvciBhIHNsaWNlIChhcyBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uKS5cblxuVGhlIGZvcm1hbCBzeW50YXggbWFrZXMgbm8gc3BlY2lhbCBwcm92aXNpb24gZm9yIG5lZ2F0aXZlIGluZGljZXMgaW5cbnNlcXVlbmNlczsgaG93ZXZlciwgYnVpbHQtaW4gc2VxdWVuY2VzIGFsbCBwcm92aWRlIGEgIl9fZ2V0aXRlbV9fKCkiXG5tZXRob2QgdGhhdCBpbnRlcnByZXRzIG5lZ2F0aXZlIGluZGljZXMgYnkgYWRkaW5nIHRoZSBsZW5ndGggb2YgdGhlXG5zZXF1ZW5jZSB0byB0aGUgaW5kZXggKHNvIHRoYXQgInhbLTFdIiBzZWxlY3RzIHRoZSBsYXN0IGl0ZW0gb2YgIngiKS5cblRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIgbGVzcyB0aGFuIHRoZSBudW1iZXJcbm9mIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSwgYW5kIHRoZSBzdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgaXRlbSB3aG9zZVxuaW5kZXggaXMgdGhhdCB2YWx1ZSAoY291bnRpbmcgZnJvbSB6ZXJvKS4gU2luY2UgdGhlIHN1cHBvcnQgZm9yXG5uZWdhdGl2ZSBpbmRpY2VzIGFuZCBzbGljaW5nIG9jY3VycyBpbiB0aGUgb2JqZWN0XCdzICJfX2dldGl0ZW1fXygpIlxubWV0aG9kLCBzdWJjbGFzc2VzIG92ZXJyaWRpbmcgdGhpcyBtZXRob2Qgd2lsbCBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkXG50aGF0IHN1cHBvcnQuXG5cbkEgc3RyaW5nXCdzIGl0ZW1zIGFyZSBjaGFyYWN0ZXJzLiAgQSBjaGFyYWN0ZXIgaXMgbm90IGEgc2VwYXJhdGUgZGF0YVxudHlwZSBidXQgYSBzdHJpbmcgb2YgZXhhY3RseSBvbmUgY2hhcmFjdGVyLlxuJywKICAndHJ1dGgnOiB1J1xuVHJ1dGggVmFsdWUgVGVzdGluZ1xuKioqKioqKioqKioqKioqKioqKlxuXG5Bbnkgb2JqZWN0IGNhbiBiZSB0ZXN0ZWQgZm9yIHRydXRoIHZhbHVlLCBmb3IgdXNlIGluIGFuICJpZiIgb3JcbiJ3aGlsZSIgY29uZGl0aW9uIG9yIGFzIG9wZXJhbmQgb2YgdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyBiZWxvdy4gVGhlXG5mb2xsb3dpbmcgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGZhbHNlOlxuXG4qICJOb25lIlxuXG4qICJGYWxzZSJcblxuKiB6ZXJvIG9mIGFueSBudW1lcmljIHR5cGUsIGZvciBleGFtcGxlLCAiMCIsICIwLjAiLCAiMGoiLlxuXG4qIGFueSBlbXB0eSBzZXF1ZW5jZSwgZm9yIGV4YW1wbGUsICJcJ1wnIiwgIigpIiwgIltdIi5cblxuKiBhbnkgZW1wdHkgbWFwcGluZywgZm9yIGV4YW1wbGUsICJ7fSIuXG5cbiogaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzLCBpZiB0aGUgY2xhc3MgZGVmaW5lcyBhXG4gICJfX2Jvb2xfXygpIiBvciAiX19sZW5fXygpIiBtZXRob2QsIHdoZW4gdGhhdCBtZXRob2QgcmV0dXJucyB0aGVcbiAgaW50ZWdlciB6ZXJvIG9yICJib29sIiB2YWx1ZSAiRmFsc2UiLiBbMV1cblxuQWxsIG90aGVyIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0cnVlIC0tLSBzbyBvYmplY3RzIG9mIG1hbnkgdHlwZXMgYXJlXG5hbHdheXMgdHJ1ZS5cblxuT3BlcmF0aW9ucyBhbmQgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIEJvb2xlYW4gcmVzdWx0IGFsd2F5c1xucmV0dXJuICIwIiBvciAiRmFsc2UiIGZvciBmYWxzZSBhbmQgIjEiIG9yICJUcnVlIiBmb3IgdHJ1ZSwgdW5sZXNzXG5vdGhlcndpc2Ugc3RhdGVkLiAoSW1wb3J0YW50IGV4Y2VwdGlvbjogdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyAib3IiXG5hbmQgImFuZCIgYWx3YXlzIHJldHVybiBvbmUgb2YgdGhlaXIgb3BlcmFuZHMuKVxuJywKICAndHJ5JzogdSdcblRoZSAidHJ5IiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKipcblxuVGhlICJ0cnkiIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWyJhcyIgaWRlbnRpZmllcl1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlICJleGNlcHQiIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlbiBub1xuZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgInRyeSIgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgInRyeSIgc3VpdGUsIGEgc2VhcmNoIGZvciBhblxuZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHQgY2xhdXNlc1xuaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBbiBleHByZXNzaW9uLVxubGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXMgYW55XG5leGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXQgZXhwcmVzc2lvblxuaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXMgY29tcGF0aWJsZVxud2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGUgZXhjZXB0aW9uXG5vYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZSBleGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgInRyeSIgc3RhdGVtZW50IHJhaXNlZFxudGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgImFzIiBrZXl3b3JkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSwgaWZcbnByZXNlbnQsIGFuZCB0aGUgZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHRcbmNsYXVzZXMgbXVzdCBoYXZlIGFuIGV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpc1xucmVhY2hlZCwgZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuXG4oVGhpcyBtZWFucyB0aGF0IGlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbixcbmFuZCB0aGUgZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlXG5vdXRlciBoYW5kbGVyIHdpbGwgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuV2hlbiBhbiBleGNlcHRpb24gaGFzIGJlZW4gYXNzaWduZWQgdXNpbmcgImFzIHRhcmdldCIsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlICJzeXMiIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2Vzc2VkIHZpYVxuInN5cy5leGNfaW5mbygpIi4gInN5cy5leGNfaW5mbygpIiByZXR1cm5zIGEgMy10dXBsZSBjb25zaXN0aW5nIG9mIHRoZVxuZXhjZXB0aW9uIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIGFuZCBhIHRyYWNlYmFjayBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KikgaWRlbnRpZnlpbmcgdGhlIHBvaW50IGluIHRoZVxucHJvZ3JhbSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgInN5cy5leGNfaW5mbygpIiB2YWx1ZXMgYXJlXG5yZXN0b3JlZCB0byB0aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmdcbmZyb20gYSBmdW5jdGlvbiB0aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgImVsc2UiIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgInRyeSIgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgImVsc2UiIGNsYXVzZSBhcmVcbm5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgImV4Y2VwdCIgY2xhdXNlcy5cblxuSWYgImZpbmFsbHkiIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGUgInRyeSJcbmNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSAiZXhjZXB0IiBhbmQgImVsc2UiIGNsYXVzZXMuICBJZiBhblxuZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdCBoYW5kbGVkLCB0aGVcbmV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQuICBJZlxudGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24gaXQgaXMgcmUtcmFpc2VkIGF0IHRoZSBlbmQgb2YgdGhlICJmaW5hbGx5IlxuY2xhdXNlLiAgSWYgdGhlICJmaW5hbGx5IiBjbGF1c2UgcmFpc2VzIGFub3RoZXIgZXhjZXB0aW9uLCB0aGUgc2F2ZWRcbmV4Y2VwdGlvbiBpcyBzZXQgYXMgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyBleGNlcHRpb24uIElmIHRoZSAiZmluYWxseSJcbmNsYXVzZSBleGVjdXRlcyBhICJyZXR1cm4iIG9yICJicmVhayIgc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uXG5pcyBkaXNjYXJkZWQ6XG5cbiAgID4+PiBkZWYgZigpOlxuICAgLi4uICAgICB0cnk6XG4gICAuLi4gICAgICAgICAxLzBcbiAgIC4uLiAgICAgZmluYWxseTpcbiAgIC4uLiAgICAgICAgIHJldHVybiA0MlxuICAgLi4uXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlICJmaW5hbGx5IiBjbGF1c2UuXG5cbldoZW4gYSAicmV0dXJuIiwgImJyZWFrIiBvciAiY29udGludWUiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpbiB0aGVcbiJ0cnkiIHN1aXRlIG9mIGEgInRyeSIuLi4iZmluYWxseSIgc3RhdGVtZW50LCB0aGUgImZpbmFsbHkiIGNsYXVzZSBpc1xuYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgaWxsZWdhbCBpblxudGhlICJmaW5hbGx5IiBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5UaGUgcmV0dXJuIHZhbHVlIG9mIGEgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFzdCAicmV0dXJuIlxuc3RhdGVtZW50IGV4ZWN1dGVkLiAgU2luY2UgdGhlICJmaW5hbGx5IiBjbGF1c2UgYWx3YXlzIGV4ZWN1dGVzLCBhXG4icmV0dXJuIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlICJmaW5hbGx5IiBjbGF1c2Ugd2lsbCBhbHdheXMgYmUgdGhlXG5sYXN0IG9uZSBleGVjdXRlZDpcblxuICAgPj4+IGRlZiBmb28oKTpcbiAgIC4uLiAgICAgdHJ5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwndHJ5XCdcbiAgIC4uLiAgICAgZmluYWxseTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ2ZpbmFsbHlcJ1xuICAgLi4uXG4gICA+Pj4gZm9vKClcbiAgIFwnZmluYWxseVwnXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlICJyYWlzZSIgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cbicsCi0gJ3R5cGVzJzogdSdcblRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeVxuKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkJlbG93IGlzIGEgbGlzdCBvZiB0aGUgdHlwZXMgdGhhdCBhcmUgYnVpbHQgaW50byBQeXRob24uICBFeHRlbnNpb25cbm1vZHVsZXMgKHdyaXR0ZW4gaW4gQywgSmF2YSwgb3Igb3RoZXIgbGFuZ3VhZ2VzLCBkZXBlbmRpbmcgb24gdGhlXG5pbXBsZW1lbnRhdGlvbikgY2FuIGRlZmluZSBhZGRpdGlvbmFsIHR5cGVzLiAgRnV0dXJlIHZlcnNpb25zIG9mXG5QeXRob24gbWF5IGFkZCB0eXBlcyB0byB0aGUgdHlwZSBoaWVyYXJjaHkgKGUuZy4sIHJhdGlvbmFsIG51bWJlcnMsXG5lZmZpY2llbnRseSBzdG9yZWQgYXJyYXlzIG9mIGludGVnZXJzLCBldGMuKSwgYWx0aG91Z2ggc3VjaCBhZGRpdGlvbnNcbndpbGwgb2Z0ZW4gYmUgcHJvdmlkZWQgdmlhIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluc3RlYWQuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSAiTm9uZSIuIEl0XG4gICBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBtYW55IHNpdHVhdGlvbnMsIGUuZy4sXG4gICBpdCBpcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVyblxuICAgYW55dGhpbmcuIEl0cyB0cnV0aCB2YWx1ZSBpcyBmYWxzZS5cblxuTm90SW1wbGVtZW50ZWRcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgIk5vdEltcGxlbWVudGVkIi4gTnVtZXJpYyBtZXRob2RzIGFuZCByaWNoIGNvbXBhcmlzb24gbWV0aG9kc1xuICAgc2hvdWxkIHJldHVybiB0aGlzIHZhbHVlIGlmIHRoZXkgZG8gbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvclxuICAgdGhlIG9wZXJhbmRzIHByb3ZpZGVkLiAgKFRoZSBpbnRlcnByZXRlciB3aWxsIHRoZW4gdHJ5IHRoZVxuICAgcmVmbGVjdGVkIG9wZXJhdGlvbiwgb3Igc29tZSBvdGhlciBmYWxsYmFjaywgZGVwZW5kaW5nIG9uIHRoZVxuICAgb3BlcmF0b3IuKSAgSXRzIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbiAgIFNlZSAqSW1wbGVtZW50aW5nIHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbnMqIGZvciBtb3JlIGRldGFpbHMuXG5cbkVsbGlwc2lzXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGxpdGVyYWwgIi4uLiIgb3IgdGhlXG4gICBidWlsdC1pbiBuYW1lICJFbGxpcHNpcyIuICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuIm51bWJlcnMuTnVtYmVyIlxuICAgVGhlc2UgYXJlIGNyZWF0ZWQgYnkgbnVtZXJpYyBsaXRlcmFscyBhbmQgcmV0dXJuZWQgYXMgcmVzdWx0cyBieVxuICAgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kIGFyaXRobWV0aWMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgTnVtZXJpY1xuICAgb2JqZWN0cyBhcmUgaW1tdXRhYmxlOyBvbmNlIGNyZWF0ZWQgdGhlaXIgdmFsdWUgbmV2ZXIgY2hhbmdlcy5cbiAgIFB5dGhvbiBudW1iZXJzIGFyZSBvZiBjb3Vyc2Ugc3Ryb25nbHkgcmVsYXRlZCB0byBtYXRoZW1hdGljYWxcbiAgIG51bWJlcnMsIGJ1dCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBudW1lcmljYWwgcmVwcmVzZW50YXRpb25cbiAgIGluIGNvbXB1dGVycy5cblxuICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYW5kXG4gICBjb21wbGV4IG51bWJlcnM6XG5cbiAgICJudW1iZXJzLkludGVncmFsIlxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBJbnRlZ2VycyAoImludCIpXG5cbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCBudW1iZXJzIGluIGFuIHVubGltaXRlZCByYW5nZSwgc3ViamVjdCB0b1xuICAgICAgICAgYXZhaWxhYmxlICh2aXJ0dWFsKSBtZW1vcnkgb25seS4gIEZvciB0aGUgcHVycG9zZSBvZiBzaGlmdFxuICAgICAgICAgYW5kIG1hc2sgb3BlcmF0aW9ucywgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgYXNzdW1lZCwgYW5kXG4gICAgICAgICBuZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBpbiBhIHZhcmlhbnQgb2YgMlwnc1xuICAgICAgICAgY29tcGxlbWVudCB3aGljaCBnaXZlcyB0aGUgaWxsdXNpb24gb2YgYW4gaW5maW5pdGUgc3RyaW5nIG9mXG4gICAgICAgICBzaWduIGJpdHMgZXh0ZW5kaW5nIHRvIHRoZSBsZWZ0LlxuXG4gICAgICBCb29sZWFucyAoImJvb2wiKVxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IHRoZSB0cnV0aCB2YWx1ZXMgRmFsc2UgYW5kIFRydWUuICBUaGUgdHdvXG4gICAgICAgICBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgdGhlXG4gICAgICAgICBvbmx5IEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlXG4gICAgICAgICBpbnRlZ2VyIHR5cGUsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kXG4gICAgICAgICAxLCByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzICIiRmFsc2UiIiBvclxuICAgICAgICAgIiJUcnVlIiIgYXJlIHJldHVybmVkLCByZXNwZWN0aXZlbHkuXG5cbiAgICAgIFRoZSBydWxlcyBmb3IgaW50ZWdlciByZXByZXNlbnRhdGlvbiBhcmUgaW50ZW5kZWQgdG8gZ2l2ZSB0aGVcbiAgICAgIG1vc3QgbWVhbmluZ2Z1bCBpbnRlcnByZXRhdGlvbiBvZiBzaGlmdCBhbmQgbWFzayBvcGVyYXRpb25zXG4gICAgICBpbnZvbHZpbmcgbmVnYXRpdmUgaW50ZWdlcnMuXG5cbiAgICJudW1iZXJzLlJlYWwiICgiZmxvYXQiKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IG1hY2hpbmUtbGV2ZWwgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludFxuICAgICAgbnVtYmVycy4gWW91IGFyZSBhdCB0aGUgbWVyY3kgb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZVxuICAgICAgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhIGltcGxlbWVudGF0aW9uKSBmb3IgdGhlIGFjY2VwdGVkXG4gICAgICByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1cbiAgICAgIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kXG4gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBhcmVcbiAgICAgIGR3YXJmZWQgYnkgdGhlIG92ZXJoZWFkIG9mIHVzaW5nIG9iamVjdHMgaW4gUHl0aG9uLCBzbyB0aGVyZSBpc1xuICAgICAgbm8gcmVhc29uIHRvIGNvbXBsaWNhdGUgdGhlIGxhbmd1YWdlIHdpdGggdHdvIGtpbmRzIG9mIGZsb2F0aW5nXG4gICAgICBwb2ludCBudW1iZXJzLlxuXG4gICAibnVtYmVycy5Db21wbGV4IiAoImNvbXBsZXgiKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IGNvbXBsZXggbnVtYmVycyBhcyBhIHBhaXIgb2YgbWFjaGluZS1sZXZlbFxuICAgICAgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAgVGhlIHNhbWUgY2F2ZWF0cyBhcHBseVxuICAgICAgYXMgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgYVxuICAgICAgY29tcGxleCBudW1iZXIgInoiIGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgcmVhZC1vbmx5XG4gICAgICBhdHRyaWJ1dGVzICJ6LnJlYWwiIGFuZCAiei5pbWFnIi5cblxuU2VxdWVuY2VzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIG9yZGVyZWQgc2V0cyBpbmRleGVkIGJ5IG5vbi1uZWdhdGl2ZVxuICAgbnVtYmVycy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSIgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zXG4gICBvZiBhIHNlcXVlbmNlLiBXaGVuIHRoZSBsZW5ndGggb2YgYSBzZXF1ZW5jZSBpcyAqbiosIHRoZSBpbmRleCBzZXRcbiAgIGNvbnRhaW5zIHRoZSBudW1iZXJzIDAsIDEsIC4uLiwgKm4qLTEuICBJdGVtICppKiBvZiBzZXF1ZW5jZSAqYSogaXNcbiAgIHNlbGVjdGVkIGJ5ICJhW2ldIi5cblxuICAgU2VxdWVuY2VzIGFsc28gc3VwcG9ydCBzbGljaW5nOiAiYVtpOmpdIiBzZWxlY3RzIGFsbCBpdGVtcyB3aXRoXG4gICBpbmRleCAqayogc3VjaCB0aGF0ICppKiAiPD0iICprKiAiPCIgKmoqLiAgV2hlbiB1c2VkIGFzIGFuXG4gICBleHByZXNzaW9uLCBhIHNsaWNlIGlzIGEgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZS4gIFRoaXMgaW1wbGllc1xuICAgdGhhdCB0aGUgaW5kZXggc2V0IGlzIHJlbnVtYmVyZWQgc28gdGhhdCBpdCBzdGFydHMgYXQgMC5cblxuICAgU29tZSBzZXF1ZW5jZXMgYWxzbyBzdXBwb3J0ICJleHRlbmRlZCBzbGljaW5nIiB3aXRoIGEgdGhpcmQgInN0ZXAiXG4gICBwYXJhbWV0ZXI6ICJhW2k6ajprXSIgc2VsZWN0cyBhbGwgaXRlbXMgb2YgKmEqIHdpdGggaW5kZXggKngqIHdoZXJlXG4gICAieCA9IGkgKyBuKmsiLCAqbiogIj49IiAiMCIgYW5kICppKiAiPD0iICp4KiAiPCIgKmoqLlxuXG4gICBTZXF1ZW5jZXMgYXJlIGRpc3Rpbmd1aXNoZWQgYWNjb3JkaW5nIHRvIHRoZWlyIG11dGFiaWxpdHk6XG5cbiAgIEltbXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIEFuIG9iamVjdCBvZiBhbiBpbW11dGFibGUgc2VxdWVuY2UgdHlwZSBjYW5ub3QgY2hhbmdlIG9uY2UgaXQgaXNcbiAgICAgIGNyZWF0ZWQuICAoSWYgdGhlIG9iamVjdCBjb250YWlucyByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMsXG4gICAgICB0aGVzZSBvdGhlciBvYmplY3RzIG1heSBiZSBtdXRhYmxlIGFuZCBtYXkgYmUgY2hhbmdlZDsgaG93ZXZlcixcbiAgICAgIHRoZSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbiBpbW11dGFibGVcbiAgICAgIG9iamVjdCBjYW5ub3QgY2hhbmdlLilcblxuICAgICAgVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlczpcblxuICAgICAgU3RyaW5nc1xuICAgICAgICAgQSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhhdCByZXByZXNlbnQgVW5pY29kZSBjb2RlXG4gICAgICAgICBwb2ludHMuIEFsbCB0aGUgY29kZSBwb2ludHMgaW4gdGhlIHJhbmdlICJVKzAwMDAgLSBVKzEwRkZGRiJcbiAgICAgICAgIGNhbiBiZSByZXByZXNlbnRlZCBpbiBhIHN0cmluZy4gIFB5dGhvbiBkb2VzblwndCBoYXZlIGEgImNoYXIiXG4gICAgICAgICB0eXBlOyBpbnN0ZWFkLCBldmVyeSBjb2RlIHBvaW50IGluIHRoZSBzdHJpbmcgaXMgcmVwcmVzZW50ZWRcbiAgICAgICAgIGFzIGEgc3RyaW5nIG9iamVjdCB3aXRoIGxlbmd0aCAiMSIuICBUaGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICAgICAgICJvcmQoKSIgY29udmVydHMgYSBjb2RlIHBvaW50IGZyb20gaXRzIHN0cmluZyBmb3JtIHRvIGFuXG4gICAgICAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAiMCAtIDEwRkZGRiI7ICJjaHIoKSIgY29udmVydHMgYW5cbiAgICAgICAgIGludGVnZXIgaW4gdGhlIHJhbmdlICIwIC0gMTBGRkZGIiB0byB0aGUgY29ycmVzcG9uZGluZyBsZW5ndGhcbiAgICAgICAgICIxIiBzdHJpbmcgb2JqZWN0LiAic3RyLmVuY29kZSgpIiBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFcbiAgICAgICAgICJzdHIiIHRvICJieXRlcyIgdXNpbmcgdGhlIGdpdmVuIHRleHQgZW5jb2RpbmcsIGFuZFxuICAgICAgICAgImJ5dGVzLmRlY29kZSgpIiBjYW4gYmUgdXNlZCB0byBhY2hpZXZlIHRoZSBvcHBvc2l0ZS5cblxuICAgICAgVHVwbGVzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSB0dXBsZSBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiBUdXBsZXMgb2ZcbiAgICAgICAgIHR3byBvciBtb3JlIGl0ZW1zIGFyZSBmb3JtZWQgYnkgY29tbWEtc2VwYXJhdGVkIGxpc3RzIG9mXG4gICAgICAgICBleHByZXNzaW9ucy4gIEEgdHVwbGUgb2Ygb25lIGl0ZW0gKGEgXCdzaW5nbGV0b25cJykgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYWZmaXhpbmcgYSBjb21tYSB0byBhbiBleHByZXNzaW9uIChhbiBleHByZXNzaW9uIGJ5XG4gICAgICAgICBpdHNlbGYgZG9lcyBub3QgY3JlYXRlIGEgdHVwbGUsIHNpbmNlIHBhcmVudGhlc2VzIG11c3QgYmVcbiAgICAgICAgIHVzYWJsZSBmb3IgZ3JvdXBpbmcgb2YgZXhwcmVzc2lvbnMpLiAgQW4gZW1wdHkgdHVwbGUgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYW4gZW1wdHkgcGFpciBvZiBwYXJlbnRoZXNlcy5cblxuICAgICAgQnl0ZXNcbiAgICAgICAgIEEgYnl0ZXMgb2JqZWN0IGlzIGFuIGltbXV0YWJsZSBhcnJheS4gIFRoZSBpdGVtcyBhcmUgOC1iaXRcbiAgICAgICAgIGJ5dGVzLCByZXByZXNlbnRlZCBieSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LlxuICAgICAgICAgQnl0ZXMgbGl0ZXJhbHMgKGxpa2UgImJcJ2FiY1wnIikgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgImJ5dGVzKCkiIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBieXRlcyBvYmplY3RzLiAgQWxzbyxcbiAgICAgICAgIGJ5dGVzIG9iamVjdHMgY2FuIGJlIGRlY29kZWQgdG8gc3RyaW5ncyB2aWEgdGhlICJkZWNvZGUoKSJcbiAgICAgICAgIG1ldGhvZC5cblxuICAgTXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIE11dGFibGUgc2VxdWVuY2VzIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICBUaGVcbiAgICAgIHN1YnNjcmlwdGlvbiBhbmQgc2xpY2luZyBub3RhdGlvbnMgY2FuIGJlIHVzZWQgYXMgdGhlIHRhcmdldCBvZlxuICAgICAgYXNzaWdubWVudCBhbmQgImRlbCIgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gImJ5dGVhcnJheSgpIiBjb25zdHJ1Y3Rvci4gIEFzaWRlIGZyb20gYmVpbmdcbiAgICAgICAgIG11dGFibGUgKGFuZCBoZW5jZSB1bmhhc2hhYmxlKSwgYnl0ZSBhcnJheXMgb3RoZXJ3aXNlIHByb3ZpZGVcbiAgICAgICAgIHRoZSBzYW1lIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbGl0eSBhcyBpbW11dGFibGUgYnl0ZXNcbiAgICAgICAgIG9iamVjdHMuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlICJhcnJheSIgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBleGFtcGxlIG9mIGFcbiAgICAgIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgYXMgZG9lcyB0aGUgImNvbGxlY3Rpb25zIiBtb2R1bGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIlxuICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUgZmFzdFxuICAgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kXG4gICBjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLFxuICAgZGlmZmVyZW5jZSwgYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLlxuXG4gICBGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yXG4gICBkaWN0aW9uYXJ5IGtleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3JcbiAgIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgIjEiIGFuZFxuICAgIjEuMCIpLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgInNldCgpIiBjb25zdHJ1Y3RvciBhbmQgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgYnkgc2V2ZXJhbFxuICAgICAgbWV0aG9kcywgc3VjaCBhcyAiYWRkKCkiLlxuXG4gICBGcm96ZW4gc2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGFuIGltbXV0YWJsZSBzZXQuICBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZVxuICAgICAgYnVpbHQtaW4gImZyb3plbnNldCgpIiBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzIGltbXV0YWJsZVxuICAgICAgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2YgYW5vdGhlclxuICAgICAgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gImFba10iIHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZCBieSAiayJcbiAgIGZyb20gdGhlIG1hcHBpbmcgImEiOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZCBhcyB0aGVcbiAgIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciAiZGVsIiBzdGF0ZW1lbnRzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICJsZW4oKSIgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgbWFwcGluZy5cblxuICAgVGhlcmUgaXMgY3VycmVudGx5IGEgc2luZ2xlIGludHJpbnNpYyBtYXBwaW5nIHR5cGU6XG5cbiAgIERpY3Rpb25hcmllc1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBuZWFybHlcbiAgICAgIGFyYml0cmFyeSB2YWx1ZXMuICBUaGUgb25seSB0eXBlcyBvZiB2YWx1ZXMgbm90IGFjY2VwdGFibGUgYXNcbiAgICAgIGtleXMgYXJlIHZhbHVlcyBjb250YWluaW5nIGxpc3RzIG9yIGRpY3Rpb25hcmllcyBvciBvdGhlclxuICAgICAgbXV0YWJsZSB0eXBlcyB0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbiAgICAgIGlkZW50aXR5LCB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZlxuICAgICAgZGljdGlvbmFyaWVzIHJlcXVpcmVzIGEga2V5XCdzIGhhc2ggdmFsdWUgdG8gcmVtYWluIGNvbnN0YW50LlxuICAgICAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpY1xuICAgICAgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgIjEiIGFuZCAiMS4wIilcbiAgICAgIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXggdGhlIHNhbWVcbiAgICAgIGRpY3Rpb25hcnkgZW50cnkuXG5cbiAgICAgIERpY3Rpb25hcmllcyBhcmUgbXV0YWJsZTsgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgInsuLi59IlxuICAgICAgbm90YXRpb24gKHNlZSBzZWN0aW9uICpEaWN0aW9uYXJ5IGRpc3BsYXlzKikuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlcyAiZGJtLm5kYm0iIGFuZCAiZGJtLmdudSIgcHJvdmlkZVxuICAgICAgYWRkaXRpb25hbCBleGFtcGxlcyBvZiBtYXBwaW5nIHR5cGVzLCBhcyBkb2VzIHRoZSAiY29sbGVjdGlvbnMiXG4gICAgICBtb2R1bGUuXG5cbkNhbGxhYmxlIHR5cGVzXG4gICBUaGVzZSBhcmUgdGhlIHR5cGVzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdGlvbiAoc2VlXG4gICBzZWN0aW9uICpDYWxscyopIGNhbiBiZSBhcHBsaWVkOlxuXG4gICBVc2VyLWRlZmluZWQgZnVuY3Rpb25zXG4gICAgICBBIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgaXMgY3JlYXRlZCBieSBhIGZ1bmN0aW9uXG4gICAgICBkZWZpbml0aW9uIChzZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqKS4gIEl0IHNob3VsZCBiZVxuICAgICAgY2FsbGVkIHdpdGggYW4gYXJndW1lbnQgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtc1xuICAgICAgYXMgdGhlIGZ1bmN0aW9uXCdzIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdC5cblxuICAgICAgU3BlY2lhbCBhdHRyaWJ1dGVzOlxuXG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBBdHRyaWJ1dGUgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT0rXG4gICAgICB8ICJfX2RvY19fIiAgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvbiAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0cmluZywgb3IgIk5vbmUiIGlmICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmF2YWlsYWJsZTsgbm90IGluaGVyaXRlZCBieSAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3ViY2xhc3NlcyAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX25hbWVfXyIgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX3F1YWxuYW1lX18iICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgKnF1YWxpZmllZCBuYW1lKiB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5ldyBpbiB2ZXJzaW9uIDMuMy4gICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19tb2R1bGVfXyIgICAgICAgICAgICAgIHwgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uIHdhcyBkZWZpbmVkIGluLCBvciAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAiTm9uZSIgaWYgdW5hdmFpbGFibGUuICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGVmYXVsdHNfXyIgICAgICAgICAgICB8IEEgdHVwbGUgY29udGFpbmluZyBkZWZhdWx0ICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudCB2YWx1ZXMgZm9yIHRob3NlICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnRzIHRoYXQgaGF2ZSBkZWZhdWx0cywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yICJOb25lIiBpZiBubyBhcmd1bWVudHMgaGF2ZSAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhIGRlZmF1bHQgdmFsdWUgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fY29kZV9fIiAgICAgICAgICAgICAgICB8IFRoZSBjb2RlIG9iamVjdCByZXByZXNlbnRpbmcgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGUgY29tcGlsZWQgZnVuY3Rpb24gYm9keS4gICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZ2xvYmFsc19fIiAgICAgICAgICAgICB8IEEgcmVmZXJlbmNlIHRvIHRoZSBkaWN0aW9uYXJ5ICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGhvbGRzIHRoZSBmdW5jdGlvblwncyAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGdsb2JhbCB2YXJpYWJsZXMgLS0tIHRoZSBnbG9iYWwgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZSBpbiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hpY2ggdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLiB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2RpY3RfXyIgICAgICAgICAgICAgICAgfCBUaGUgbmFtZXNwYWNlIHN1cHBvcnRpbmcgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJiaXRyYXJ5IGZ1bmN0aW9uIGF0dHJpYnV0ZXMuICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2Nsb3N1cmVfXyIgICAgICAgICAgICAgfCAiTm9uZSIgb3IgYSB0dXBsZSBvZiBjZWxscyB0aGF0IHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29udGFpbiBiaW5kaW5ncyBmb3IgdGhlICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uXCdzIGZyZWUgdmFyaWFibGVzLiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fYW5ub3RhdGlvbnNfXyIgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGFubm90YXRpb25zICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvZiBwYXJhbWV0ZXJzLiAgVGhlIGtleXMgb2YgdGhlIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGljdCBhcmUgdGhlIHBhcmFtZXRlciBuYW1lcywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFuZCAiXCdyZXR1cm5cJyIgZm9yIHRoZSByZXR1cm4gICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFubm90YXRpb24sIGlmIHByb3ZpZGVkLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19rd2RlZmF1bHRzX18iICAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuXG4gICAgICBNb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIGxhYmVsbGVkICJXcml0YWJsZSIgY2hlY2sgdGhlIHR5cGUgb2YgdGhlXG4gICAgICBhc3NpZ25lZCB2YWx1ZS5cblxuICAgICAgRnVuY3Rpb24gb2JqZWN0cyBhbHNvIHN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBhcmJpdHJhcnlcbiAgICAgIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXR0YWNoIG1ldGFkYXRhXG4gICAgICB0byBmdW5jdGlvbnMuICBSZWd1bGFyIGF0dHJpYnV0ZSBkb3Qtbm90YXRpb24gaXMgdXNlZCB0byBnZXQgYW5kXG4gICAgICBzZXQgc3VjaCBhdHRyaWJ1dGVzLiAqTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHlcbiAgICAgIHN1cHBvcnRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25cbiAgICAgIGF0dHJpYnV0ZXMgb24gYnVpbHQtaW4gZnVuY3Rpb25zIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAgICBmdXR1cmUuKlxuXG4gICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb25cJ3MgZGVmaW5pdGlvbiBjYW4gYmVcbiAgICAgIHJldHJpZXZlZCBmcm9tIGl0cyBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbFxuICAgICAgdHlwZXMgYmVsb3cuXG5cbiAgIEluc3RhbmNlIG1ldGhvZHNcbiAgICAgIEFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgY29tYmluZXMgYSBjbGFzcywgYSBjbGFzcyBpbnN0YW5jZSBhbmRcbiAgICAgIGFueSBjYWxsYWJsZSBvYmplY3QgKG5vcm1hbGx5IGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uKS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogIl9fc2VsZl9fIiBpcyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIG9iamVjdCwgIl9fZnVuY19fIiBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyAiX19kb2NfXyIgaXMgdGhlXG4gICAgICBtZXRob2RcJ3MgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyAiX19mdW5jX18uX19kb2NfXyIpOyAiX19uYW1lX18iXG4gICAgICBpcyB0aGUgbWV0aG9kIG5hbWUgKHNhbWUgYXMgIl9fZnVuY19fLl9fbmFtZV9fIik7ICJfX21vZHVsZV9fIlxuICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbWV0aG9kIHdhcyBkZWZpbmVkIGluLCBvciAiTm9uZSJcbiAgICAgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICAgICBNZXRob2RzIGFsc28gc3VwcG9ydCBhY2Nlc3NpbmcgKGJ1dCBub3Qgc2V0dGluZykgdGhlIGFyYml0cmFyeVxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZCB3aGVuIGdldHRpbmcgYW5cbiAgICAgIGF0dHJpYnV0ZSBvZiBhIGNsYXNzIChwZXJoYXBzIHZpYSBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzKSwgaWZcbiAgICAgIHRoYXQgYXR0cmlidXRlIGlzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBvciBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0LlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgdXNlci1cbiAgICAgIGRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcyB2aWEgb25lIG9mIGl0cyBpbnN0YW5jZXMsXG4gICAgICBpdHMgIl9fc2VsZl9fIiBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLCBhbmQgdGhlIG1ldGhvZCBvYmplY3RcbiAgICAgIGlzIHNhaWQgdG8gYmUgYm91bmQuICBUaGUgbmV3IG1ldGhvZFwncyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpc1xuICAgICAgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZ1xuICAgICAgYW5vdGhlciBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgdGhlIGJlaGF2aW91ciBpc1xuICAgICAgdGhlIHNhbWUgYXMgZm9yIGEgZnVuY3Rpb24gb2JqZWN0LCBleGNlcHQgdGhhdCB0aGUgIl9fZnVuY19fIlxuICAgICAgYXR0cmlidXRlIG9mIHRoZSBuZXcgaW5zdGFuY2UgaXMgbm90IHRoZSBvcmlnaW5hbCBtZXRob2Qgb2JqZWN0XG4gICAgICBidXQgaXRzICJfX2Z1bmNfXyIgYXR0cmlidXRlLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCBpdHMgIl9fc2VsZl9fIiBhdHRyaWJ1dGVcbiAgICAgIGlzIHRoZSBjbGFzcyBpdHNlbGYsIGFuZCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUgaXMgdGhlXG4gICAgICBmdW5jdGlvbiBvYmplY3QgdW5kZXJseWluZyB0aGUgY2xhc3MgbWV0aG9kLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24gKCJfX2Z1bmNfXyIpIGlzIGNhbGxlZCwgaW5zZXJ0aW5nIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgKCJfX3NlbGZfXyIpIGluIGZyb250IG9mIHRoZSBhcmd1bWVudCBsaXN0LiAgRm9yIGluc3RhbmNlLCB3aGVuXG4gICAgICAiQyIgaXMgYSBjbGFzcyB3aGljaCBjb250YWlucyBhIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gImYoKSIsXG4gICAgICBhbmQgIngiIGlzIGFuIGluc3RhbmNlIG9mICJDIiwgY2FsbGluZyAieC5mKDEpIiBpcyBlcXVpdmFsZW50IHRvXG4gICAgICBjYWxsaW5nICJDLmYoeCwgMSkiLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgZGVyaXZlZCBmcm9tIGEgY2xhc3MgbWV0aG9kXG4gICAgICBvYmplY3QsIHRoZSAiY2xhc3MgaW5zdGFuY2UiIHN0b3JlZCBpbiAiX19zZWxmX18iIHdpbGwgYWN0dWFsbHlcbiAgICAgIGJlIHRoZSBjbGFzcyBpdHNlbGYsIHNvIHRoYXQgY2FsbGluZyBlaXRoZXIgInguZigxKSIgb3IgIkMuZigxKSJcbiAgICAgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyAiZihDLDEpIiB3aGVyZSAiZiIgaXMgdGhlIHVuZGVybHlpbmdcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBOb3RlIHRoYXQgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gZnVuY3Rpb24gb2JqZWN0IHRvIGluc3RhbmNlXG4gICAgICBtZXRob2Qgb2JqZWN0IGhhcHBlbnMgZWFjaCB0aW1lIHRoZSBhdHRyaWJ1dGUgaXMgcmV0cmlldmVkIGZyb21cbiAgICAgIHRoZSBpbnN0YW5jZS4gIEluIHNvbWUgY2FzZXMsIGEgZnJ1aXRmdWwgb3B0aW1pemF0aW9uIGlzIHRvXG4gICAgICBhc3NpZ24gdGhlIGF0dHJpYnV0ZSB0byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBjYWxsIHRoYXQgbG9jYWxcbiAgICAgIHZhcmlhYmxlLiBBbHNvIG5vdGljZSB0aGF0IHRoaXMgdHJhbnNmb3JtYXRpb24gb25seSBoYXBwZW5zIGZvclxuICAgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uczsgb3RoZXIgY2FsbGFibGUgb2JqZWN0cyAoYW5kIGFsbCBub24tXG4gICAgICBjYWxsYWJsZSBvYmplY3RzKSBhcmUgcmV0cmlldmVkIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24uICBJdCBpc1xuICAgICAgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgd2hpY2ggYXJlXG4gICAgICBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgaW5zdGFuY2UgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gYm91bmRcbiAgICAgIG1ldGhvZHM7IHRoaXMgKm9ubHkqIGhhcHBlbnMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYW4gYXR0cmlidXRlXG4gICAgICBvZiB0aGUgY2xhc3MuXG5cbiAgIEdlbmVyYXRvciBmdW5jdGlvbnNcbiAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIHVzZXMgdGhlICJ5aWVsZCIgc3RhdGVtZW50IChzZWVcbiAgICAgIHNlY3Rpb24gKlRoZSB5aWVsZCBzdGF0ZW1lbnQqKSBpcyBjYWxsZWQgYSAqZ2VuZXJhdG9yIGZ1bmN0aW9uKi5cbiAgICAgIFN1Y2ggYSBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIGFsd2F5cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9iamVjdFxuICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb246ICBjYWxsaW5nXG4gICAgICB0aGUgaXRlcmF0b3JcJ3MgIml0ZXJhdG9yLl9fbmV4dF9fKCkiIG1ldGhvZCB3aWxsIGNhdXNlIHRoZVxuICAgICAgZnVuY3Rpb24gdG8gZXhlY3V0ZSB1bnRpbCBpdCBwcm92aWRlcyBhIHZhbHVlIHVzaW5nIHRoZSAieWllbGQiXG4gICAgICBzdGF0ZW1lbnQuICBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcyBhICJyZXR1cm4iIHN0YXRlbWVudCBvclxuICAgICAgZmFsbHMgb2ZmIHRoZSBlbmQsIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZVxuICAgICAgaXRlcmF0b3Igd2lsbCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2V0IG9mIHZhbHVlcyB0byBiZVxuICAgICAgcmV0dXJuZWQuXG5cbiAgIEJ1aWx0LWluIGZ1bmN0aW9uc1xuICAgICAgQSBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIEMgZnVuY3Rpb24uXG4gICAgICBFeGFtcGxlcyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYXJlICJsZW4oKSIgYW5kICJtYXRoLnNpbigpIlxuICAgICAgKCJtYXRoIiBpcyBhIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2ZcbiAgICAgIHRoZSBhcmd1bWVudHMgYXJlIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1cbiAgICAgIG9ubHkgYXR0cmlidXRlczogIl9fZG9jX18iIGlzIHRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uXG4gICAgICBzdHJpbmcsIG9yICJOb25lIiBpZiB1bmF2YWlsYWJsZTsgIl9fbmFtZV9fIiBpcyB0aGUgZnVuY3Rpb25cJ3NcbiAgICAgIG5hbWU7ICJfX3NlbGZfXyIgaXMgc2V0IHRvICJOb25lIiAoYnV0IHNlZSB0aGUgbmV4dCBpdGVtKTtcbiAgICAgICJfX21vZHVsZV9fIiBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZFxuICAgICAgaW4gb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlLlxuXG4gICBCdWlsdC1pbiBtZXRob2RzXG4gICAgICBUaGlzIGlzIHJlYWxseSBhIGRpZmZlcmVudCBkaXNndWlzZSBvZiBhIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzXG4gICAgICB0aW1lIGNvbnRhaW5pbmcgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhblxuICAgICAgaW1wbGljaXQgZXh0cmEgYXJndW1lbnQuICBBbiBleGFtcGxlIG9mIGEgYnVpbHQtaW4gbWV0aG9kIGlzXG4gICAgICAiYWxpc3QuYXBwZW5kKCkiLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgIl9fc2VsZl9fIiBpcyBzZXQgdG8gdGhlXG4gICAgICBvYmplY3QgZGVub3RlZCBieSAqYWxpc3QqLlxuXG4gICBDbGFzc2VzXG4gICAgICBDbGFzc2VzIGFyZSBjYWxsYWJsZS4gIFRoZXNlIG9iamVjdHMgbm9ybWFsbHkgYWN0IGFzIGZhY3Rvcmllc1xuICAgICAgZm9yIG5ldyBpbnN0YW5jZXMgb2YgdGhlbXNlbHZlcywgYnV0IHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlIGZvclxuICAgICAgY2xhc3MgdHlwZXMgdGhhdCBvdmVycmlkZSAiX19uZXdfXygpIi4gIFRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICAgICBjYWxsIGFyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgIl9faW5pdF9fKCkiIHRvIGluaXRpYWxpemUgdGhlIG5ldyBpbnN0YW5jZS5cblxuICAgQ2xhc3MgSW5zdGFuY2VzXG4gICAgICBJbnN0YW5jZXMgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgY2FuIGJlIG1hZGUgY2FsbGFibGUgYnkgZGVmaW5pbmdcbiAgICAgIGEgIl9fY2FsbF9fKCkiIG1ldGhvZCBpbiB0aGVpciBjbGFzcy5cblxuTW9kdWxlc1xuICAgTW9kdWxlcyBhcmUgYSBiYXNpYyBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLCBhbmQgYXJlXG4gICBjcmVhdGVkIGJ5IHRoZSAqaW1wb3J0IHN5c3RlbSogYXMgaW52b2tlZCBlaXRoZXIgYnkgdGhlICJpbXBvcnQiXG4gICBzdGF0ZW1lbnQgKHNlZSAiaW1wb3J0IiksIG9yIGJ5IGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXNcbiAgICJpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIiBhbmQgYnVpbHQtaW4gIl9faW1wb3J0X18oKSIuICBBIG1vZHVsZVxuICAgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieSBhIGRpY3Rpb25hcnkgb2JqZWN0ICh0aGlzIGlzXG4gICB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZSAiX19nbG9iYWxzX18iIGF0dHJpYnV0ZSBvZlxuICAgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSkuICBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmVcbiAgIHRyYW5zbGF0ZWQgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sICJtLngiIGlzIGVxdWl2YWxlbnRcbiAgIHRvICJtLl9fZGljdF9fWyJ4Il0iLiBBIG1vZHVsZSBvYmplY3QgZG9lcyBub3QgY29udGFpbiB0aGUgY29kZVxuICAgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIChzaW5jZSBpdCBpc25cJ3QgbmVlZGVkIG9uY2VcbiAgIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgIm0ueCA9IDEiIGlzIGVxdWl2YWxlbnQgdG8gIm0uX19kaWN0X19bIngiXSA9IDEiLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6ICJfX2RpY3RfXyIgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWU7XG4gICAiX19kb2NfXyIgaXMgdGhlIG1vZHVsZVwncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgIk5vbmUiIGlmXG4gICB1bmF2YWlsYWJsZTsgIl9fZmlsZV9fIiBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaCB0aGVcbiAgIG1vZHVsZSB3YXMgbG9hZGVkLCBpZiBpdCB3YXMgbG9hZGVkIGZyb20gYSBmaWxlLiBUaGUgIl9fZmlsZV9fIlxuICAgYXR0cmlidXRlIG1heSBiZSBtaXNzaW5nIGZvciBjZXJ0YWluIHR5cGVzIG9mIG1vZHVsZXMsIHN1Y2ggYXMgQ1xuICAgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjsgZm9yXG4gICBleHRlbnNpb24gbW9kdWxlcyBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdCBpc1xuICAgdGhlIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIkMueCIgaXMgdHJhbnNsYXRlZCB0b1xuICAgIkMuX19kaWN0X19bIngiXSIgKGFsdGhvdWdoIHRoZXJlIGFyZSBhIG51bWJlciBvZiBob29rcyB3aGljaCBhbGxvd1xuICAgZm9yIG90aGVyIG1lYW5zIG9mIGxvY2F0aW5nIGF0dHJpYnV0ZXMpLiBXaGVuIHRoZSBhdHRyaWJ1dGUgbmFtZSBpc1xuICAgbm90IGZvdW5kIHRoZXJlLCB0aGUgYXR0cmlidXRlIHNlYXJjaCBjb250aW51ZXMgaW4gdGhlIGJhc2VcbiAgIGNsYXNzZXMuIFRoaXMgc2VhcmNoIG9mIHRoZSBiYXNlIGNsYXNzZXMgdXNlcyB0aGUgQzMgbWV0aG9kXG4gICByZXNvbHV0aW9uIG9yZGVyIHdoaWNoIGJlaGF2ZXMgY29ycmVjdGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mXG4gICBcJ2RpYW1vbmRcJyBpbmhlcml0YW5jZSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uIGFuY2VzdG9yLiBBZGRpdGlvbmFsXG4gICBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBQeXRob24gY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIDIuMyByZWxlYXNlIGF0XG4gICBodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLlxuXG4gICBXaGVuIGEgY2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZSAoZm9yIGNsYXNzICJDIiwgc2F5KSB3b3VsZCB5aWVsZCBhXG4gICBjbGFzcyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZFxuICAgb2JqZWN0IHdob3NlICJfX3NlbGZfXyIgYXR0cmlidXRlcyBpcyAiQyIuICBXaGVuIGl0IHdvdWxkIHlpZWxkIGFcbiAgIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBvYmplY3Qgd3JhcHBlZCBieVxuICAgdGhlIHN0YXRpYyBtZXRob2Qgb2JqZWN0LiBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKlxuICAgZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRob3NlIGFjdHVhbGx5IGNvbnRhaW5lZCBpbiBpdHMgIl9fZGljdF9fIi5cblxuICAgQ2xhc3MgYXR0cmlidXRlIGFzc2lnbm1lbnRzIHVwZGF0ZSB0aGUgY2xhc3NcJ3MgZGljdGlvbmFyeSwgbmV2ZXJcbiAgIHRoZSBkaWN0aW9uYXJ5IG9mIGEgYmFzZSBjbGFzcy5cblxuICAgQSBjbGFzcyBvYmplY3QgY2FuIGJlIGNhbGxlZCAoc2VlIGFib3ZlKSB0byB5aWVsZCBhIGNsYXNzIGluc3RhbmNlXG4gICAoc2VlIGJlbG93KS5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiAiX19uYW1lX18iIGlzIHRoZSBjbGFzcyBuYW1lOyAiX19tb2R1bGVfXyIgaXNcbiAgIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7ICJfX2RpY3RfXyIgaXMgdGhlXG4gICBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGNsYXNzXCdzIG5hbWVzcGFjZTsgIl9fYmFzZXNfXyIgaXMgYSB0dXBsZVxuICAgKHBvc3NpYmx5IGVtcHR5IG9yIGEgc2luZ2xldG9uKSBjb250YWluaW5nIHRoZSBiYXNlIGNsYXNzZXMsIGluIHRoZVxuICAgb3JkZXIgb2YgdGhlaXIgb2NjdXJyZW5jZSBpbiB0aGUgYmFzZSBjbGFzcyBsaXN0OyAiX19kb2NfXyIgaXMgdGhlXG4gICBjbGFzc1wncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgTm9uZSBpZiB1bmRlZmluZWQuXG5cbkNsYXNzIGluc3RhbmNlc1xuICAgQSBjbGFzcyBpbnN0YW5jZSBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgYSBjbGFzcyBvYmplY3QgKHNlZSBhYm92ZSkuXG4gICBBIGNsYXNzIGluc3RhbmNlIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBhcyBhIGRpY3Rpb25hcnkgd2hpY2hcbiAgIGlzIHRoZSBmaXJzdCBwbGFjZSBpbiB3aGljaCBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgc2VhcmNoZWQuXG4gICBXaGVuIGFuIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQgdGhlcmUsIGFuZCB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MgaGFzXG4gICBhbiBhdHRyaWJ1dGUgYnkgdGhhdCBuYW1lLCB0aGUgc2VhcmNoIGNvbnRpbnVlcyB3aXRoIHRoZSBjbGFzc1xuICAgYXR0cmlidXRlcy4gIElmIGEgY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kIHRoYXQgaXMgYSB1c2VyLWRlZmluZWRcbiAgIGZ1bmN0aW9uIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0XG4gICB3aG9zZSAiX19zZWxmX18iIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UuICBTdGF0aWMgbWV0aG9kIGFuZFxuICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGFsc28gdHJhbnNmb3JtZWQ7IHNlZSBhYm92ZSB1bmRlclxuICAgIkNsYXNzZXMiLiAgU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyogZm9yIGFub3RoZXIgd2F5XG4gICBpbiB3aGljaCBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgcmV0cmlldmVkIHZpYSBpdHMgaW5zdGFuY2VzIG1heVxuICAgZGlmZmVyIGZyb20gdGhlIG9iamVjdHMgYWN0dWFsbHkgc3RvcmVkIGluIHRoZSBjbGFzc1wncyAiX19kaWN0X18iLlxuICAgSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kLCBhbmQgdGhlIG9iamVjdFwncyBjbGFzcyBoYXMgYVxuICAgIl9fZ2V0YXR0cl9fKCkiIG1ldGhvZCwgdGhhdCBpcyBjYWxsZWQgdG8gc2F0aXNmeSB0aGUgbG9va3VwLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudHMgYW5kIGRlbGV0aW9ucyB1cGRhdGUgdGhlIGluc3RhbmNlXCdzXG4gICBkaWN0aW9uYXJ5LCBuZXZlciBhIGNsYXNzXCdzIGRpY3Rpb25hcnkuICBJZiB0aGUgY2xhc3MgaGFzIGFcbiAgICJfX3NldGF0dHJfXygpIiBvciAiX19kZWxhdHRyX18oKSIgbWV0aG9kLCB0aGlzIGlzIGNhbGxlZCBpbnN0ZWFkXG4gICBvZiB1cGRhdGluZyB0aGUgaW5zdGFuY2UgZGljdGlvbmFyeSBkaXJlY3RseS5cblxuICAgQ2xhc3MgaW5zdGFuY2VzIGNhbiBwcmV0ZW5kIHRvIGJlIG51bWJlcnMsIHNlcXVlbmNlcywgb3IgbWFwcGluZ3NcbiAgIGlmIHRoZXkgaGF2ZSBtZXRob2RzIHdpdGggY2VydGFpbiBzcGVjaWFsIG5hbWVzLiAgU2VlIHNlY3Rpb25cbiAgICpTcGVjaWFsIG1ldGhvZCBuYW1lcyouXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogIl9fZGljdF9fIiBpcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnk7XG4gICAiX19jbGFzc19fIiBpcyB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MuXG5cbkkvTyBvYmplY3RzIChhbHNvIGtub3duIGFzIGZpbGUgb2JqZWN0cylcbiAgIEEgKmZpbGUgb2JqZWN0KiByZXByZXNlbnRzIGFuIG9wZW4gZmlsZS4gIFZhcmlvdXMgc2hvcnRjdXRzIGFyZVxuICAgYXZhaWxhYmxlIHRvIGNyZWF0ZSBmaWxlIG9iamVjdHM6IHRoZSAib3BlbigpIiBidWlsdC1pbiBmdW5jdGlvbixcbiAgIGFuZCBhbHNvICJvcy5wb3BlbigpIiwgIm9zLmZkb3BlbigpIiwgYW5kIHRoZSAibWFrZWZpbGUoKSIgbWV0aG9kXG4gICBvZiBzb2NrZXQgb2JqZWN0cyAoYW5kIHBlcmhhcHMgYnkgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHNcbiAgIHByb3ZpZGVkIGJ5IGV4dGVuc2lvbiBtb2R1bGVzKS5cblxuICAgVGhlIG9iamVjdHMgInN5cy5zdGRpbiIsICJzeXMuc3Rkb3V0IiBhbmQgInN5cy5zdGRlcnIiIGFyZVxuICAgaW5pdGlhbGl6ZWQgdG8gZmlsZSBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludGVycHJldGVyXCdzXG4gICBzdGFuZGFyZCBpbnB1dCwgb3V0cHV0IGFuZCBlcnJvciBzdHJlYW1zOyB0aGV5IGFyZSBhbGwgb3BlbiBpbiB0ZXh0XG4gICBtb2RlIGFuZCB0aGVyZWZvcmUgZm9sbG93IHRoZSBpbnRlcmZhY2UgZGVmaW5lZCBieSB0aGVcbiAgICJpby5UZXh0SU9CYXNlIiBhYnN0cmFjdCBjbGFzcy5cblxuSW50ZXJuYWwgdHlwZXNcbiAgIEEgZmV3IHR5cGVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgaW50ZXJwcmV0ZXIgYXJlIGV4cG9zZWQgdG8gdGhlXG4gICB1c2VyLiBUaGVpciBkZWZpbml0aW9ucyBtYXkgY2hhbmdlIHdpdGggZnV0dXJlIHZlcnNpb25zIG9mIHRoZVxuICAgaW50ZXJwcmV0ZXIsIGJ1dCB0aGV5IGFyZSBtZW50aW9uZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLlxuXG4gICBDb2RlIG9iamVjdHNcbiAgICAgIENvZGUgb2JqZWN0cyByZXByZXNlbnQgKmJ5dGUtY29tcGlsZWQqIGV4ZWN1dGFibGUgUHl0aG9uIGNvZGUsXG4gICAgICBvciAqYnl0ZWNvZGUqLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgY29kZSBvYmplY3QgYW5kIGFcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYW4gZXhwbGljaXRcbiAgICAgIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb25cJ3MgZ2xvYmFscyAodGhlIG1vZHVsZSBpbiB3aGljaCBpdCB3YXNcbiAgICAgIGRlZmluZWQpLCB3aGlsZSBhIGNvZGUgb2JqZWN0IGNvbnRhaW5zIG5vIGNvbnRleHQ7IGFsc28gdGhlXG4gICAgICBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBmdW5jdGlvbiBvYmplY3QsIG5vdFxuICAgICAgaW4gdGhlIGNvZGUgb2JqZWN0IChiZWNhdXNlIHRoZXkgcmVwcmVzZW50IHZhbHVlcyBjYWxjdWxhdGVkIGF0XG4gICAgICBydW4tdGltZSkuICBVbmxpa2UgZnVuY3Rpb24gb2JqZWN0cywgY29kZSBvYmplY3RzIGFyZSBpbW11dGFibGVcbiAgICAgIGFuZCBjb250YWluIG5vIHJlZmVyZW5jZXMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIHRvIG11dGFibGVcbiAgICAgIG9iamVjdHMuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJjb19uYW1lIiBnaXZlcyB0aGUgZnVuY3Rpb24gbmFtZTtcbiAgICAgICJjb19hcmdjb3VudCIgaXMgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cyAoaW5jbHVkaW5nXG4gICAgICBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcyk7ICJjb19ubG9jYWxzIiBpcyB0aGUgbnVtYmVyIG9mXG4gICAgICBsb2NhbCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gKGluY2x1ZGluZyBhcmd1bWVudHMpO1xuICAgICAgImNvX3Zhcm5hbWVzIiBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIHRoZSBsb2NhbFxuICAgICAgdmFyaWFibGVzIChzdGFydGluZyB3aXRoIHRoZSBhcmd1bWVudCBuYW1lcyk7ICJjb19jZWxsdmFycyIgaXMgYVxuICAgICAgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlXG4gICAgICByZWZlcmVuY2VkIGJ5IG5lc3RlZCBmdW5jdGlvbnM7ICJjb19mcmVldmFycyIgaXMgYSB0dXBsZVxuICAgICAgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgZnJlZSB2YXJpYWJsZXM7ICJjb19jb2RlIiBpcyBhIHN0cmluZ1xuICAgICAgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW5jZSBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnM7ICJjb19jb25zdHMiXG4gICAgICBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGxpdGVyYWxzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlO1xuICAgICAgImNvX25hbWVzIiBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlO1xuICAgICAgImNvX2ZpbGVuYW1lIiBpcyB0aGUgZmlsZW5hbWUgZnJvbSB3aGljaCB0aGUgY29kZSB3YXMgY29tcGlsZWQ7XG4gICAgICAiY29fZmlyc3RsaW5lbm8iIGlzIHRoZSBmaXJzdCBsaW5lIG51bWJlciBvZiB0aGUgZnVuY3Rpb247XG4gICAgICAiY29fbG5vdGFiIiBpcyBhIHN0cmluZyBlbmNvZGluZyB0aGUgbWFwcGluZyBmcm9tIGJ5dGVjb2RlXG4gICAgICBvZmZzZXRzIHRvIGxpbmUgbnVtYmVycyAoZm9yIGRldGFpbHMgc2VlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGVcbiAgICAgIGludGVycHJldGVyKTsgImNvX3N0YWNrc2l6ZSIgaXMgdGhlIHJlcXVpcmVkIHN0YWNrIHNpemVcbiAgICAgIChpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzKTsgImNvX2ZsYWdzIiBpcyBhbiBpbnRlZ2VyIGVuY29kaW5nIGFcbiAgICAgIG51bWJlciBvZiBmbGFncyBmb3IgdGhlIGludGVycHJldGVyLlxuXG4gICAgICBUaGUgZm9sbG93aW5nIGZsYWcgYml0cyBhcmUgZGVmaW5lZCBmb3IgImNvX2ZsYWdzIjogYml0ICIweDA0IlxuICAgICAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSAiKmFyZ3VtZW50cyIgc3ludGF4IHRvIGFjY2VwdCBhblxuICAgICAgYXJiaXRyYXJ5IG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50czsgYml0ICIweDA4IiBpcyBzZXQgaWZcbiAgICAgIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSAiKiprZXl3b3JkcyIgc3ludGF4IHRvIGFjY2VwdCBhcmJpdHJhcnlcbiAgICAgIGtleXdvcmQgYXJndW1lbnRzOyBiaXQgIjB4MjAiIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gaXMgYVxuICAgICAgZ2VuZXJhdG9yLlxuXG4gICAgICBGdXR1cmUgZmVhdHVyZSBkZWNsYXJhdGlvbnMgKCJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uIilcbiAgICAgIGFsc28gdXNlIGJpdHMgaW4gImNvX2ZsYWdzIiB0byBpbmRpY2F0ZSB3aGV0aGVyIGEgY29kZSBvYmplY3RcbiAgICAgIHdhcyBjb21waWxlZCB3aXRoIGEgcGFydGljdWxhciBmZWF0dXJlIGVuYWJsZWQ6IGJpdCAiMHgyMDAwIiBpc1xuICAgICAgc2V0IGlmIHRoZSBmdW5jdGlvbiB3YXMgY29tcGlsZWQgd2l0aCBmdXR1cmUgZGl2aXNpb24gZW5hYmxlZDtcbiAgICAgIGJpdHMgIjB4MTAiIGFuZCAiMHgxMDAwIiB3ZXJlIHVzZWQgaW4gZWFybGllciB2ZXJzaW9ucyBvZlxuICAgICAgUHl0aG9uLlxuXG4gICAgICBPdGhlciBiaXRzIGluICJjb19mbGFncyIgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UuXG5cbiAgICAgIElmIGEgY29kZSBvYmplY3QgcmVwcmVzZW50cyBhIGZ1bmN0aW9uLCB0aGUgZmlyc3QgaXRlbSBpblxuICAgICAgImNvX2NvbnN0cyIgaXMgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIG9mIHRoZSBmdW5jdGlvbiwgb3JcbiAgICAgICJOb25lIiBpZiB1bmRlZmluZWQuXG5cbiAgIEZyYW1lIG9iamVjdHNcbiAgICAgIEZyYW1lIG9iamVjdHMgcmVwcmVzZW50IGV4ZWN1dGlvbiBmcmFtZXMuICBUaGV5IG1heSBvY2N1ciBpblxuICAgICAgdHJhY2ViYWNrIG9iamVjdHMgKHNlZSBiZWxvdykuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJmX2JhY2siIGlzIHRvIHRoZSBwcmV2aW91cyBzdGFja1xuICAgICAgZnJhbWUgKHRvd2FyZHMgdGhlIGNhbGxlciksIG9yICJOb25lIiBpZiB0aGlzIGlzIHRoZSBib3R0b21cbiAgICAgIHN0YWNrIGZyYW1lOyAiZl9jb2RlIiBpcyB0aGUgY29kZSBvYmplY3QgYmVpbmcgZXhlY3V0ZWQgaW4gdGhpc1xuICAgICAgZnJhbWU7ICJmX2xvY2FscyIgaXMgdGhlIGRpY3Rpb25hcnkgdXNlZCB0byBsb29rIHVwIGxvY2FsXG4gICAgICB2YXJpYWJsZXM7ICJmX2dsb2JhbHMiIGlzIHVzZWQgZm9yIGdsb2JhbCB2YXJpYWJsZXM7XG4gICAgICAiZl9idWlsdGlucyIgaXMgdXNlZCBmb3IgYnVpbHQtaW4gKGludHJpbnNpYykgbmFtZXM7ICJmX2xhc3RpIlxuICAgICAgZ2l2ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24gKHRoaXMgaXMgYW4gaW5kZXggaW50byB0aGVcbiAgICAgIGJ5dGVjb2RlIHN0cmluZyBvZiB0aGUgY29kZSBvYmplY3QpLlxuXG4gICAgICBTcGVjaWFsIHdyaXRhYmxlIGF0dHJpYnV0ZXM6ICJmX3RyYWNlIiwgaWYgbm90ICJOb25lIiwgaXMgYVxuICAgICAgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBjb2RlIGxpbmUgKHRoaXMgaXNcbiAgICAgIHVzZWQgYnkgdGhlIGRlYnVnZ2VyKTsgImZfbGluZW5vIiBpcyB0aGUgY3VycmVudCBsaW5lIG51bWJlciBvZlxuICAgICAgdGhlIGZyYW1lIC0tLSB3cml0aW5nIHRvIHRoaXMgZnJvbSB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvbiBqdW1wc1xuICAgICAgdG8gdGhlIGdpdmVuIGxpbmUgKG9ubHkgZm9yIHRoZSBib3R0b20tbW9zdCBmcmFtZSkuICBBIGRlYnVnZ2VyXG4gICAgICBjYW4gaW1wbGVtZW50IGEgSnVtcCBjb21tYW5kIChha2EgU2V0IE5leHQgU3RhdGVtZW50KSBieSB3cml0aW5nXG4gICAgICB0byBmX2xpbmVuby5cblxuICAgICAgRnJhbWUgb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIGZyYW1lLmNsZWFyKClcblxuICAgICAgICAgVGhpcyBtZXRob2QgY2xlYXJzIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBoZWxkIGJ5XG4gICAgICAgICB0aGUgZnJhbWUuICBBbHNvLCBpZiB0aGUgZnJhbWUgYmVsb25nZWQgdG8gYSBnZW5lcmF0b3IsIHRoZVxuICAgICAgICAgZ2VuZXJhdG9yIGlzIGZpbmFsaXplZC4gIFRoaXMgaGVscHMgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlc1xuICAgICAgICAgaW52b2x2aW5nIGZyYW1lIG9iamVjdHMgKGZvciBleGFtcGxlIHdoZW4gY2F0Y2hpbmcgYW5cbiAgICAgICAgIGV4Y2VwdGlvbiBhbmQgc3RvcmluZyBpdHMgdHJhY2ViYWNrIGZvciBsYXRlciB1c2UpLlxuXG4gICAgICAgICAiUnVudGltZUVycm9yIiBpcyByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIGN1cnJlbnRseSBleGVjdXRpbmcuXG5cbiAgICAgICAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuICAgVHJhY2ViYWNrIG9iamVjdHNcbiAgICAgIFRyYWNlYmFjayBvYmplY3RzIHJlcHJlc2VudCBhIHN0YWNrIHRyYWNlIG9mIGFuIGV4Y2VwdGlvbi4gIEFcbiAgICAgIHRyYWNlYmFjayBvYmplY3QgaXMgY3JlYXRlZCB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuICBXaGVuIHRoZVxuICAgICAgc2VhcmNoIGZvciBhbiBleGNlcHRpb24gaGFuZGxlciB1bndpbmRzIHRoZSBleGVjdXRpb24gc3RhY2ssIGF0XG4gICAgICBlYWNoIHVud291bmQgbGV2ZWwgYSB0cmFjZWJhY2sgb2JqZWN0IGlzIGluc2VydGVkIGluIGZyb250IG9mXG4gICAgICB0aGUgY3VycmVudCB0cmFjZWJhY2suICBXaGVuIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGVudGVyZWQsXG4gICAgICB0aGUgc3RhY2sgdHJhY2UgaXMgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0uIChTZWUgc2VjdGlvblxuICAgICAgKlRoZSB0cnkgc3RhdGVtZW50Ki4pIEl0IGlzIGFjY2Vzc2libGUgYXMgdGhlIHRoaXJkIGl0ZW0gb2YgdGhlXG4gICAgICB0dXBsZSByZXR1cm5lZCBieSAic3lzLmV4Y19pbmZvKCkiLiBXaGVuIHRoZSBwcm9ncmFtIGNvbnRhaW5zIG5vXG4gICAgICBzdWl0YWJsZSBoYW5kbGVyLCB0aGUgc3RhY2sgdHJhY2UgaXMgd3JpdHRlbiAobmljZWx5IGZvcm1hdHRlZClcbiAgICAgIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW07IGlmIHRoZSBpbnRlcnByZXRlciBpcyBpbnRlcmFjdGl2ZSxcbiAgICAgIGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgdG8gdGhlIHVzZXIgYXMgInN5cy5sYXN0X3RyYWNlYmFjayIuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJ0Yl9uZXh0IiBpcyB0aGUgbmV4dCBsZXZlbCBpbiB0aGVcbiAgICAgIHN0YWNrIHRyYWNlICh0b3dhcmRzIHRoZSBmcmFtZSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkKSwgb3JcbiAgICAgICJOb25lIiBpZiB0aGVyZSBpcyBubyBuZXh0IGxldmVsOyAidGJfZnJhbWUiIHBvaW50cyB0byB0aGVcbiAgICAgIGV4ZWN1dGlvbiBmcmFtZSBvZiB0aGUgY3VycmVudCBsZXZlbDsgInRiX2xpbmVubyIgZ2l2ZXMgdGhlIGxpbmVcbiAgICAgIG51bWJlciB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkOyAidGJfbGFzdGkiIGluZGljYXRlcyB0aGVcbiAgICAgIHByZWNpc2UgaW5zdHJ1Y3Rpb24uICBUaGUgbGluZSBudW1iZXIgYW5kIGxhc3QgaW5zdHJ1Y3Rpb24gaW5cbiAgICAgIHRoZSB0cmFjZWJhY2sgbWF5IGRpZmZlciBmcm9tIHRoZSBsaW5lIG51bWJlciBvZiBpdHMgZnJhbWVcbiAgICAgIG9iamVjdCBpZiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIGEgInRyeSIgc3RhdGVtZW50IHdpdGggbm9cbiAgICAgIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2Ugb3Igd2l0aCBhIGZpbmFsbHkgY2xhdXNlLlxuXG4gICBTbGljZSBvYmplY3RzXG4gICAgICBTbGljZSBvYmplY3RzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBzbGljZXMgZm9yICJfX2dldGl0ZW1fXygpIlxuICAgICAgbWV0aG9kcy4gIFRoZXkgYXJlIGFsc28gY3JlYXRlZCBieSB0aGUgYnVpbHQtaW4gInNsaWNlKCkiXG4gICAgICBmdW5jdGlvbi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogInN0YXJ0IiBpcyB0aGUgbG93ZXIgYm91bmQ7ICJzdG9wIlxuICAgICAgaXMgdGhlIHVwcGVyIGJvdW5kOyAic3RlcCIgaXMgdGhlIHN0ZXAgdmFsdWU7IGVhY2ggaXMgIk5vbmUiIGlmXG4gICAgICBvbWl0dGVkLiAgVGhlc2UgYXR0cmlidXRlcyBjYW4gaGF2ZSBhbnkgdHlwZS5cblxuICAgICAgU2xpY2Ugb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIHNsaWNlLmluZGljZXMoc2VsZiwgbGVuZ3RoKVxuXG4gICAgICAgICBUaGlzIG1ldGhvZCB0YWtlcyBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50ICpsZW5ndGgqIGFuZFxuICAgICAgICAgY29tcHV0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsaWNlIHRoYXQgdGhlIHNsaWNlIG9iamVjdFxuICAgICAgICAgd291bGQgZGVzY3JpYmUgaWYgYXBwbGllZCB0byBhIHNlcXVlbmNlIG9mICpsZW5ndGgqIGl0ZW1zLlxuICAgICAgICAgSXQgcmV0dXJucyBhIHR1cGxlIG9mIHRocmVlIGludGVnZXJzOyByZXNwZWN0aXZlbHkgdGhlc2UgYXJlXG4gICAgICAgICB0aGUgKnN0YXJ0KiBhbmQgKnN0b3AqIGluZGljZXMgYW5kIHRoZSAqc3RlcCogb3Igc3RyaWRlXG4gICAgICAgICBsZW5ndGggb2YgdGhlIHNsaWNlLiBNaXNzaW5nIG9yIG91dC1vZi1ib3VuZHMgaW5kaWNlcyBhcmVcbiAgICAgICAgIGhhbmRsZWQgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHJlZ3VsYXIgc2xpY2VzLlxuXG4gICBTdGF0aWMgbWV0aG9kIG9iamVjdHNcbiAgICAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBwcm92aWRlIGEgd2F5IG9mIGRlZmVhdGluZyB0aGVcbiAgICAgIHRyYW5zZm9ybWF0aW9uIG9mIGZ1bmN0aW9uIG9iamVjdHMgdG8gbWV0aG9kIG9iamVjdHMgZGVzY3JpYmVkXG4gICAgICBhYm92ZS4gQSBzdGF0aWMgbWV0aG9kIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFueSBvdGhlclxuICAgICAgb2JqZWN0LCB1c3VhbGx5IGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QuIFdoZW4gYSBzdGF0aWNcbiAgICAgIG1ldGhvZCBvYmplY3QgaXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBvciBhIGNsYXNzIGluc3RhbmNlLCB0aGVcbiAgICAgIG9iamVjdCBhY3R1YWxseSByZXR1cm5lZCBpcyB0aGUgd3JhcHBlZCBvYmplY3QsIHdoaWNoIGlzIG5vdFxuICAgICAgc3ViamVjdCB0byBhbnkgZnVydGhlciB0cmFuc2Zvcm1hdGlvbi4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZVxuICAgICAgbm90IHRoZW1zZWx2ZXMgY2FsbGFibGUsIGFsdGhvdWdoIHRoZSBvYmplY3RzIHRoZXkgd3JhcCB1c3VhbGx5XG4gICAgICBhcmUuIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgICJzdGF0aWNtZXRob2QoKSIgY29uc3RydWN0b3IuXG5cbiAgIENsYXNzIG1ldGhvZCBvYmplY3RzXG4gICAgICBBIGNsYXNzIG1ldGhvZCBvYmplY3QsIGxpa2UgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXMgYSB3cmFwcGVyXG4gICAgICBhcm91bmQgYW5vdGhlciBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIHdheSBpbiB3aGljaCB0aGF0IG9iamVjdFxuICAgICAgaXMgcmV0cmlldmVkIGZyb20gY2xhc3NlcyBhbmQgY2xhc3MgaW5zdGFuY2VzLiBUaGUgYmVoYXZpb3VyIG9mXG4gICAgICBjbGFzcyBtZXRob2Qgb2JqZWN0cyB1cG9uIHN1Y2ggcmV0cmlldmFsIGlzIGRlc2NyaWJlZCBhYm92ZSxcbiAgICAgIHVuZGVyICJVc2VyLWRlZmluZWQgbWV0aG9kcyIuIENsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkXG4gICAgICBieSB0aGUgYnVpbHQtaW4gImNsYXNzbWV0aG9kKCkiIGNvbnN0cnVjdG9yLlxuJywKKyAndHlwZXMnOiB1J1xuVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5XG4qKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSB0eXBlcyB0aGF0IGFyZSBidWlsdCBpbnRvIFB5dGhvbi4gIEV4dGVuc2lvblxubW9kdWxlcyAod3JpdHRlbiBpbiBDLCBKYXZhLCBvciBvdGhlciBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGVcbmltcGxlbWVudGF0aW9uKSBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgdHlwZXMuICBGdXR1cmUgdmVyc2lvbnMgb2ZcblB5dGhvbiBtYXkgYWRkIHR5cGVzIHRvIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5nLiwgcmF0aW9uYWwgbnVtYmVycyxcbmVmZmljaWVudGx5IHN0b3JlZCBhcnJheXMgb2YgaW50ZWdlcnMsIGV0Yy4pLCBhbHRob3VnaCBzdWNoIGFkZGl0aW9uc1xud2lsbCBvZnRlbiBiZSBwcm92aWRlZCB2aWEgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5zdGVhZC5cblxuU29tZSBvZiB0aGUgdHlwZSBkZXNjcmlwdGlvbnMgYmVsb3cgY29udGFpbiBhIHBhcmFncmFwaCBsaXN0aW5nXG5cJ3NwZWNpYWwgYXR0cmlidXRlcy5cJyAgVGhlc2UgYXJlIGF0dHJpYnV0ZXMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGVcbmltcGxlbWVudGF0aW9uIGFuZCBhcmUgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZS4gIFRoZWlyIGRlZmluaXRpb25cbm1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuTm9uZVxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lICJOb25lIi4gSXRcbiAgIGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucywgZS5nLixcbiAgIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICAiTm90SW1wbGVtZW50ZWQiLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzXG4gICBzaG91bGQgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yXG4gICB0aGUgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlXG4gICByZWZsZWN0ZWQgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlXG4gICBvcGVyYXRvci4pICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuICAgU2VlICpJbXBsZW1lbnRpbmcgdGhlIGFyaXRobWV0aWMgb3BlcmF0aW9ucyogZm9yIG1vcmUgZGV0YWlscy5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbGl0ZXJhbCAiLi4uIiBvciB0aGVcbiAgIGJ1aWx0LWluIG5hbWUgIkVsbGlwc2lzIi4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG4ibnVtYmVycy5OdW1iZXIiXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgIm51bWJlcnMuSW50ZWdyYWwiXG4gICAgICBUaGVzZSByZXByZXNlbnQgZWxlbWVudHMgZnJvbSB0aGUgbWF0aGVtYXRpY2FsIHNldCBvZiBpbnRlZ2Vyc1xuICAgICAgKHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSkuXG5cbiAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW50ZWdlcnM6XG5cbiAgICAgIEludGVnZXJzICgiaW50IilcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zICgiYm9vbCIpXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgdGhlIHRydXRoIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZS4gIFRoZSB0d29cbiAgICAgICAgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgIkZhbHNlIiBhbmQgIlRydWUiIGFyZSB0aGVcbiAgICAgICAgIG9ubHkgQm9vbGVhbiBvYmplY3RzLiBUaGUgQm9vbGVhbiB0eXBlIGlzIGEgc3VidHlwZSBvZiB0aGVcbiAgICAgICAgIGludGVnZXIgdHlwZSwgYW5kIEJvb2xlYW4gdmFsdWVzIGJlaGF2ZSBsaWtlIHRoZSB2YWx1ZXMgMCBhbmRcbiAgICAgICAgIDEsIHJlc3BlY3RpdmVseSwgaW4gYWxtb3N0IGFsbCBjb250ZXh0cywgdGhlIGV4Y2VwdGlvbiBiZWluZ1xuICAgICAgICAgdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZywgdGhlIHN0cmluZ3MgIiJGYWxzZSIiIG9yXG4gICAgICAgICAiIlRydWUiIiBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2Vycy5cblxuICAgIm51bWJlcnMuUmVhbCIgKCJmbG9hdCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGFyZVxuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgICJudW1iZXJzLkNvbXBsZXgiICgiY29tcGxleCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciAieiIgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgInoucmVhbCIgYW5kICJ6LmltYWciLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlIGluZGV4IHNldFxuICAgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mIHNlcXVlbmNlICphKiBpc1xuICAgc2VsZWN0ZWQgYnkgImFbaV0iLlxuXG4gICBTZXF1ZW5jZXMgYWxzbyBzdXBwb3J0IHNsaWNpbmc6ICJhW2k6al0iIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqICI8PSIgKmsqICI8IiAqaiouICBXaGVuIHVzZWQgYXMgYW5cbiAgIGV4cHJlc3Npb24sIGEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlLiAgVGhpcyBpbXBsaWVzXG4gICB0aGF0IHRoZSBpbmRleCBzZXQgaXMgcmVudW1iZXJlZCBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAwLlxuXG4gICBTb21lIHNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgImV4dGVuZGVkIHNsaWNpbmciIHdpdGggYSB0aGlyZCAic3RlcCJcbiAgIHBhcmFtZXRlcjogImFbaTpqOmtdIiBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCogd2hlcmVcbiAgICJ4ID0gaSArIG4qayIsICpuKiAiPj0iICIwIiBhbmQgKmkqICI8PSIgKngqICI8IiAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlIGNvZGVcbiAgICAgICAgIHBvaW50cy4gQWxsIHRoZSBjb2RlIHBvaW50cyBpbiB0aGUgcmFuZ2UgIlUrMDAwMCAtIFUrMTBGRkZGIlxuICAgICAgICAgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuXCd0IGhhdmUgYSAiY2hhciJcbiAgICAgICAgIHR5cGU7IGluc3RlYWQsIGV2ZXJ5IGNvZGUgcG9pbnQgaW4gdGhlIHN0cmluZyBpcyByZXByZXNlbnRlZFxuICAgICAgICAgYXMgYSBzdHJpbmcgb2JqZWN0IHdpdGggbGVuZ3RoICIxIi4gIFRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgIm9yZCgpIiBjb252ZXJ0cyBhIGNvZGUgcG9pbnQgZnJvbSBpdHMgc3RyaW5nIGZvcm0gdG8gYW5cbiAgICAgICAgIGludGVnZXIgaW4gdGhlIHJhbmdlICIwIC0gMTBGRkZGIjsgImNocigpIiBjb252ZXJ0cyBhblxuICAgICAgICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgIjAgLSAxMEZGRkYiIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlbmd0aFxuICAgICAgICAgIjEiIHN0cmluZyBvYmplY3QuICJzdHIuZW5jb2RlKCkiIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYVxuICAgICAgICAgInN0ciIgdG8gImJ5dGVzIiB1c2luZyB0aGUgZ2l2ZW4gdGV4dCBlbmNvZGluZywgYW5kXG4gICAgICAgICAiYnl0ZXMuZGVjb2RlKCkiIGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgdGhlIG9wcG9zaXRlLlxuXG4gICAgICBUdXBsZXNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIHR1cGxlIGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuIFR1cGxlcyBvZlxuICAgICAgICAgdHdvIG9yIG1vcmUgaXRlbXMgYXJlIGZvcm1lZCBieSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMgb2ZcbiAgICAgICAgIGV4cHJlc3Npb25zLiAgQSB0dXBsZSBvZiBvbmUgaXRlbSAoYSBcJ3NpbmdsZXRvblwnKSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhZmZpeGluZyBhIGNvbW1hIHRvIGFuIGV4cHJlc3Npb24gKGFuIGV4cHJlc3Npb24gYnlcbiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBjcmVhdGUgYSB0dXBsZSwgc2luY2UgcGFyZW50aGVzZXMgbXVzdCBiZVxuICAgICAgICAgdXNhYmxlIGZvciBncm91cGluZyBvZiBleHByZXNzaW9ucykuICBBbiBlbXB0eSB0dXBsZSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhbiBlbXB0eSBwYWlyIG9mIHBhcmVudGhlc2VzLlxuXG4gICAgICBCeXRlc1xuICAgICAgICAgQSBieXRlcyBvYmplY3QgaXMgYW4gaW1tdXRhYmxlIGFycmF5LiAgVGhlIGl0ZW1zIGFyZSA4LWJpdFxuICAgICAgICAgYnl0ZXMsIHJlcHJlc2VudGVkIGJ5IGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuXG4gICAgICAgICBCeXRlcyBsaXRlcmFscyAobGlrZSAiYlwnYWJjXCciKSBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAgICAgICAiYnl0ZXMoKSIgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGJ5dGVzIG9iamVjdHMuICBBbHNvLFxuICAgICAgICAgYnl0ZXMgb2JqZWN0cyBjYW4gYmUgZGVjb2RlZCB0byBzdHJpbmdzIHZpYSB0aGUgImRlY29kZSgpIlxuICAgICAgICAgbWV0aG9kLlxuXG4gICBNdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgTXV0YWJsZSBzZXF1ZW5jZXMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4gIFRoZVxuICAgICAgc3Vic2NyaXB0aW9uIGFuZCBzbGljaW5nIG5vdGF0aW9ucyBjYW4gYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mXG4gICAgICBhc3NpZ25tZW50IGFuZCAiZGVsIiAoZGVsZXRlKSBzdGF0ZW1lbnRzLlxuXG4gICAgICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczpcblxuICAgICAgTGlzdHNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIGxpc3QgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gIExpc3RzIGFyZVxuICAgICAgICAgZm9ybWVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucyBpblxuICAgICAgICAgc3F1YXJlIGJyYWNrZXRzLiAoTm90ZSB0aGF0IHRoZXJlIGFyZSBubyBzcGVjaWFsIGNhc2VzIG5lZWRlZFxuICAgICAgICAgdG8gZm9ybSBsaXN0cyBvZiBsZW5ndGggMCBvciAxLilcblxuICAgICAgQnl0ZSBBcnJheXNcbiAgICAgICAgIEEgYnl0ZWFycmF5IG9iamVjdCBpcyBhIG11dGFibGUgYXJyYXkuIFRoZXkgYXJlIGNyZWF0ZWQgYnlcbiAgICAgICAgIHRoZSBidWlsdC1pbiAiYnl0ZWFycmF5KCkiIGNvbnN0cnVjdG9yLiAgQXNpZGUgZnJvbSBiZWluZ1xuICAgICAgICAgbXV0YWJsZSAoYW5kIGhlbmNlIHVuaGFzaGFibGUpLCBieXRlIGFycmF5cyBvdGhlcndpc2UgcHJvdmlkZVxuICAgICAgICAgdGhlIHNhbWUgaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsaXR5IGFzIGltbXV0YWJsZSBieXRlc1xuICAgICAgICAgb2JqZWN0cy5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGUgImFycmF5IiBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGV4YW1wbGUgb2YgYVxuICAgICAgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCBhcyBkb2VzIHRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZS5cblxuU2V0IHR5cGVzXG4gICBUaGVzZSByZXByZXNlbnQgdW5vcmRlcmVkLCBmaW5pdGUgc2V0cyBvZiB1bmlxdWUsIGltbXV0YWJsZVxuICAgb2JqZWN0cy4gQXMgc3VjaCwgdGhleSBjYW5ub3QgYmUgaW5kZXhlZCBieSBhbnkgc3Vic2NyaXB0LiBIb3dldmVyLFxuICAgdGhleSBjYW4gYmUgaXRlcmF0ZWQgb3ZlciwgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiXG4gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzZXQuIENvbW1vbiB1c2VzIGZvciBzZXRzIGFyZSBmYXN0XG4gICBtZW1iZXJzaGlwIHRlc3RpbmcsIHJlbW92aW5nIGR1cGxpY2F0ZXMgZnJvbSBhIHNlcXVlbmNlLCBhbmRcbiAgIGNvbXB1dGluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBzdWNoIGFzIGludGVyc2VjdGlvbiwgdW5pb24sXG4gICBkaWZmZXJlbmNlLCBhbmQgc3ltbWV0cmljIGRpZmZlcmVuY2UuXG5cbiAgIEZvciBzZXQgZWxlbWVudHMsIHRoZSBzYW1lIGltbXV0YWJpbGl0eSBydWxlcyBhcHBseSBhcyBmb3JcbiAgIGRpY3Rpb25hcnkga2V5cy4gTm90ZSB0aGF0IG51bWVyaWMgdHlwZXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvclxuICAgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCAiMSIgYW5kXG4gICAiMS4wIiksIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIGNvbnRhaW5lZCBpbiBhIHNldC5cblxuICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIHNldCB0eXBlczpcblxuICAgU2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGEgbXV0YWJsZSBzZXQuIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICAic2V0KCkiIGNvbnN0cnVjdG9yIGFuZCBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyBieSBzZXZlcmFsXG4gICAgICBtZXRob2RzLCBzdWNoIGFzICJhZGQoKSIuXG5cbiAgIEZyb3plbiBzZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYW4gaW1tdXRhYmxlIHNldC4gIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlXG4gICAgICBidWlsdC1pbiAiZnJvemVuc2V0KCkiIGNvbnN0cnVjdG9yLiAgQXMgYSBmcm96ZW5zZXQgaXMgaW1tdXRhYmxlXG4gICAgICBhbmQgKmhhc2hhYmxlKiwgaXQgY2FuIGJlIHVzZWQgYWdhaW4gYXMgYW4gZWxlbWVudCBvZiBhbm90aGVyXG4gICAgICBzZXQsIG9yIGFzIGEgZGljdGlvbmFyeSBrZXkuXG5cbk1hcHBpbmdzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IGFyYml0cmFyeSBpbmRleFxuICAgc2V0cy4gVGhlIHN1YnNjcmlwdCBub3RhdGlvbiAiYVtrXSIgc2VsZWN0cyB0aGUgaXRlbSBpbmRleGVkIGJ5ICJrIlxuICAgZnJvbSB0aGUgbWFwcGluZyAiYSI7IHRoaXMgY2FuIGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMgYW5kIGFzIHRoZVxuICAgdGFyZ2V0IG9mIGFzc2lnbm1lbnRzIG9yICJkZWwiIHN0YXRlbWVudHMuIFRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgImxlbigpIiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBtYXBwaW5nLlxuXG4gICBUaGVyZSBpcyBjdXJyZW50bHkgYSBzaW5nbGUgaW50cmluc2ljIG1hcHBpbmcgdHlwZTpcblxuICAgRGljdGlvbmFyaWVzXG4gICAgICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IG5lYXJseVxuICAgICAgYXJiaXRyYXJ5IHZhbHVlcy4gIFRoZSBvbmx5IHR5cGVzIG9mIHZhbHVlcyBub3QgYWNjZXB0YWJsZSBhc1xuICAgICAga2V5cyBhcmUgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMgb3IgZGljdGlvbmFyaWVzIG9yIG90aGVyXG4gICAgICBtdXRhYmxlIHR5cGVzIHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuICAgICAgaWRlbnRpdHksIHRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mXG4gICAgICBkaWN0aW9uYXJpZXMgcmVxdWlyZXMgYSBrZXlcJ3MgaGFzaCB2YWx1ZSB0byByZW1haW4gY29uc3RhbnQuXG4gICAgICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljXG4gICAgICBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCAiMSIgYW5kICIxLjAiKVxuICAgICAgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0byBpbmRleCB0aGUgc2FtZVxuICAgICAgZGljdGlvbmFyeSBlbnRyeS5cblxuICAgICAgRGljdGlvbmFyaWVzIGFyZSBtdXRhYmxlOyB0aGV5IGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSAiey4uLn0iXG4gICAgICBub3RhdGlvbiAoc2VlIHNlY3Rpb24gKkRpY3Rpb25hcnkgZGlzcGxheXMqKS5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGVzICJkYm0ubmRibSIgYW5kICJkYm0uZ251IiBwcm92aWRlXG4gICAgICBhZGRpdGlvbmFsIGV4YW1wbGVzIG9mIG1hcHBpbmcgdHlwZXMsIGFzIGRvZXMgdGhlICJjb2xsZWN0aW9ucyJcbiAgICAgIG1vZHVsZS5cblxuQ2FsbGFibGUgdHlwZXNcbiAgIFRoZXNlIGFyZSB0aGUgdHlwZXMgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0aW9uIChzZWVcbiAgIHNlY3Rpb24gKkNhbGxzKikgY2FuIGJlIGFwcGxpZWQ6XG5cbiAgIFVzZXItZGVmaW5lZCBmdW5jdGlvbnNcbiAgICAgIEEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGEgZnVuY3Rpb25cbiAgICAgIGRlZmluaXRpb24gKHNlZSBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyopLiAgSXQgc2hvdWxkIGJlXG4gICAgICBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICBhcyB0aGUgZnVuY3Rpb25cJ3MgZm9ybWFsIHBhcmFtZXRlciBsaXN0LlxuXG4gICAgICBTcGVjaWFsIGF0dHJpYnV0ZXM6XG5cbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IEF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgIl9fZG9jX18iICAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nLCBvciAiTm9uZSIgaWYgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlOyBub3QgaW5oZXJpdGVkIGJ5ICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdWJjbGFzc2VzICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbmFtZV9fIiAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBuYW1lICAgICAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fcXVhbG5hbWVfXyIgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyAqcXVhbGlmaWVkIG5hbWUqIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmV3IGluIHZlcnNpb24gMy4zLiAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX21vZHVsZV9fIiAgICAgICAgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4sIG9yICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJOb25lIiBpZiB1bmF2YWlsYWJsZS4gICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kZWZhdWx0c19fIiAgICAgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50IHZhbHVlcyBmb3IgdGhvc2UgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudHMgdGhhdCBoYXZlIGRlZmF1bHRzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgIk5vbmUiIGlmIG5vIGFyZ3VtZW50cyBoYXZlICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEgZGVmYXVsdCB2YWx1ZSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jb2RlX18iICAgICAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb21waWxlZCBmdW5jdGlvbiBib2R5LiAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19nbG9iYWxzX18iICAgICAgICAgICAgIHwgQSByZWZlcmVuY2UgdG8gdGhlIGRpY3Rpb25hcnkgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uXCdzICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ2xvYmFsIHZhcmlhYmxlcyAtLS0gdGhlIGdsb2JhbCB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlIGluICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQuIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGljdF9fIiAgICAgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmJpdHJhcnkgZnVuY3Rpb24gYXR0cmlidXRlcy4gIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fY2xvc3VyZV9fIiAgICAgICAgICAgICB8ICJOb25lIiBvciBhIHR1cGxlIG9mIGNlbGxzIHRoYXQgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb250YWluIGJpbmRpbmdzIGZvciB0aGUgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb25cJ3MgZnJlZSB2YXJpYWJsZXMuICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19hbm5vdGF0aW9uc19fIiAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgYW5ub3RhdGlvbnMgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9mIHBhcmFtZXRlcnMuICBUaGUga2V5cyBvZiB0aGUgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaWN0IGFyZSB0aGUgcGFyYW1ldGVyIG5hbWVzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5kICJcJ3JldHVyblwnIiBmb3IgdGhlIHJldHVybiAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5ub3RhdGlvbiwgaWYgcHJvdmlkZWQuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2t3ZGVmYXVsdHNfXyIgICAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBkZWZhdWx0cyBmb3IgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBGdW5jdGlvbiBvYmplY3RzIGFsc28gc3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFyYml0cmFyeVxuICAgICAgYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhdHRhY2ggbWV0YWRhdGFcbiAgICAgIHRvIGZ1bmN0aW9ucy4gIFJlZ3VsYXIgYXR0cmlidXRlIGRvdC1ub3RhdGlvbiBpcyB1c2VkIHRvIGdldCBhbmRcbiAgICAgIHNldCBzdWNoIGF0dHJpYnV0ZXMuICpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seVxuICAgICAgc3VwcG9ydHMgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiBGdW5jdGlvblxuICAgICAgYXR0cmlidXRlcyBvbiBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGVcbiAgICAgIGZ1dHVyZS4qXG5cbiAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvblwncyBkZWZpbml0aW9uIGNhbiBiZVxuICAgICAgcmV0cmlldmVkIGZyb20gaXRzIGNvZGUgb2JqZWN0OyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVybmFsXG4gICAgICB0eXBlcyBiZWxvdy5cblxuICAgSW5zdGFuY2UgbWV0aG9kc1xuICAgICAgQW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlIGFuZFxuICAgICAgYW55IGNhbGxhYmxlIG9iamVjdCAobm9ybWFsbHkgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiX19zZWxmX18iIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCAiX19mdW5jX18iIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgICAgIG1ldGhvZFwncyBkb2N1bWVudGF0aW9uIChzYW1lIGFzICJfX2Z1bmNfXy5fX2RvY19fIik7ICJfX25hbWVfXyJcbiAgICAgIGlzIHRoZSBtZXRob2QgbmFtZSAoc2FtZSBhcyAiX19mdW5jX18uX19uYW1lX18iKTsgIl9fbW9kdWxlX18iXG4gICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWQgaW4sIG9yICJOb25lIlxuICAgICAgaWYgdW5hdmFpbGFibGUuXG5cbiAgICAgIE1ldGhvZHMgYWxzbyBzdXBwb3J0IGFjY2Vzc2luZyAoYnV0IG5vdCBzZXR0aW5nKSB0aGUgYXJiaXRyYXJ5XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgVXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3RzIG1heSBiZSBjcmVhdGVkIHdoZW4gZ2V0dGluZyBhblxuICAgICAgYXR0cmlidXRlIG9mIGEgY2xhc3MgKHBlcmhhcHMgdmlhIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MpLCBpZlxuICAgICAgdGhhdCBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLVxuICAgICAgZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgZnJvbSBhIGNsYXNzIHZpYSBvbmUgb2YgaXRzIGluc3RhbmNlcyxcbiAgICAgIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kIG9iamVjdFxuICAgICAgaXMgc2FpZCB0byBiZSBib3VuZC4gIFRoZSBuZXcgbWV0aG9kXCdzICJfX2Z1bmNfXyIgYXR0cmlidXRlIGlzXG4gICAgICB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSAiX19mdW5jX18iXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZVxuICAgICAgaXMgdGhlIGNsYXNzIGl0c2VsZiwgYW5kIGl0cyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpcyB0aGVcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbiAoIl9fZnVuY19fIikgaXMgY2FsbGVkLCBpbnNlcnRpbmcgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICAoIl9fc2VsZl9fIikgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3IgaW5zdGFuY2UsIHdoZW5cbiAgICAgICJDIiBpcyBhIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiAiZigpIixcbiAgICAgIGFuZCAieCIgaXMgYW4gaW5zdGFuY2Ugb2YgIkMiLCBjYWxsaW5nICJ4LmYoMSkiIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgIGNhbGxpbmcgIkMuZih4LCAxKSIuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluICJfX3NlbGZfXyIgd2lsbCBhY3R1YWxseVxuICAgICAgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciAieC5mKDEpIiBvciAiQy5mKDEpIlxuICAgICAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nICJmKEMsMSkiIHdoZXJlICJmIiBpcyB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gaW5zdGFuY2VcbiAgICAgIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbVxuICAgICAgdGhlIGluc3RhbmNlLiAgSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bCBvcHRpbWl6YXRpb24gaXMgdG9cbiAgICAgIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIGNhbGwgdGhhdCBsb2NhbFxuICAgICAgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvbiBvbmx5IGhhcHBlbnMgZm9yXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzIChhbmQgYWxsIG5vbi1cbiAgICAgIGNhbGxhYmxlIG9iamVjdHMpIGFyZSByZXRyaWV2ZWQgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzXG4gICAgICBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB3aGljaCBhcmVcbiAgICAgIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyBpbnN0YW5jZSBhcmUgbm90IGNvbnZlcnRlZCB0byBib3VuZFxuICAgICAgbWV0aG9kczsgdGhpcyAqb25seSogaGFwcGVucyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgIG9mIHRoZSBjbGFzcy5cblxuICAgR2VuZXJhdG9yIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggdXNlcyB0aGUgInlpZWxkIiBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyAiaXRlcmF0b3IuX19uZXh0X18oKSIgbWV0aG9kIHdpbGwgY2F1c2UgdGhlXG4gICAgICBmdW5jdGlvbiB0byBleGVjdXRlIHVudGlsIGl0IHByb3ZpZGVzIGEgdmFsdWUgdXNpbmcgdGhlICJ5aWVsZCJcbiAgICAgIHN0YXRlbWVudC4gIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgInJldHVybiIgc3RhdGVtZW50IG9yXG4gICAgICBmYWxscyBvZmYgdGhlIGVuZCwgYSAiU3RvcEl0ZXJhdGlvbiIgZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlXG4gICAgICBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2YgdmFsdWVzIHRvIGJlXG4gICAgICByZXR1cm5lZC5cblxuICAgQ29yb3V0aW5lIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggaXMgZGVmaW5lZCB1c2luZyAiYXN5bmMgZGVmIiBpc1xuICAgICAgY2FsbGVkIGEgKmNvcm91dGluZSBmdW5jdGlvbiouICBTdWNoIGEgZnVuY3Rpb24sIHdoZW4gY2FsbGVkLFxuICAgICAgcmV0dXJucyBhICpjb3JvdXRpbmUqIG9iamVjdC4gIEl0IG1heSBjb250YWluICJhd2FpdCJcbiAgICAgIGV4cHJlc3Npb25zLCBhcyB3ZWxsIGFzICJhc3luYyB3aXRoIiBhbmQgImFzeW5jIGZvciIgc3RhdGVtZW50cy5cbiAgICAgIFNlZSBhbHNvIHRoZSAqQ29yb3V0aW5lIE9iamVjdHMqIHNlY3Rpb24uXG5cbiAgIEJ1aWx0LWluIGZ1bmN0aW9uc1xuICAgICAgQSBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIEMgZnVuY3Rpb24uXG4gICAgICBFeGFtcGxlcyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYXJlICJsZW4oKSIgYW5kICJtYXRoLnNpbigpIlxuICAgICAgKCJtYXRoIiBpcyBhIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2ZcbiAgICAgIHRoZSBhcmd1bWVudHMgYXJlIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1cbiAgICAgIG9ubHkgYXR0cmlidXRlczogIl9fZG9jX18iIGlzIHRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uXG4gICAgICBzdHJpbmcsIG9yICJOb25lIiBpZiB1bmF2YWlsYWJsZTsgIl9fbmFtZV9fIiBpcyB0aGUgZnVuY3Rpb25cJ3NcbiAgICAgIG5hbWU7ICJfX3NlbGZfXyIgaXMgc2V0IHRvICJOb25lIiAoYnV0IHNlZSB0aGUgbmV4dCBpdGVtKTtcbiAgICAgICJfX21vZHVsZV9fIiBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZFxuICAgICAgaW4gb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlLlxuXG4gICBCdWlsdC1pbiBtZXRob2RzXG4gICAgICBUaGlzIGlzIHJlYWxseSBhIGRpZmZlcmVudCBkaXNndWlzZSBvZiBhIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzXG4gICAgICB0aW1lIGNvbnRhaW5pbmcgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhblxuICAgICAgaW1wbGljaXQgZXh0cmEgYXJndW1lbnQuICBBbiBleGFtcGxlIG9mIGEgYnVpbHQtaW4gbWV0aG9kIGlzXG4gICAgICAiYWxpc3QuYXBwZW5kKCkiLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgIl9fc2VsZl9fIiBpcyBzZXQgdG8gdGhlXG4gICAgICBvYmplY3QgZGVub3RlZCBieSAqYWxpc3QqLlxuXG4gICBDbGFzc2VzXG4gICAgICBDbGFzc2VzIGFyZSBjYWxsYWJsZS4gIFRoZXNlIG9iamVjdHMgbm9ybWFsbHkgYWN0IGFzIGZhY3Rvcmllc1xuICAgICAgZm9yIG5ldyBpbnN0YW5jZXMgb2YgdGhlbXNlbHZlcywgYnV0IHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlIGZvclxuICAgICAgY2xhc3MgdHlwZXMgdGhhdCBvdmVycmlkZSAiX19uZXdfXygpIi4gIFRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICAgICBjYWxsIGFyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgIl9faW5pdF9fKCkiIHRvIGluaXRpYWxpemUgdGhlIG5ldyBpbnN0YW5jZS5cblxuICAgQ2xhc3MgSW5zdGFuY2VzXG4gICAgICBJbnN0YW5jZXMgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgY2FuIGJlIG1hZGUgY2FsbGFibGUgYnkgZGVmaW5pbmdcbiAgICAgIGEgIl9fY2FsbF9fKCkiIG1ldGhvZCBpbiB0aGVpciBjbGFzcy5cblxuTW9kdWxlc1xuICAgTW9kdWxlcyBhcmUgYSBiYXNpYyBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLCBhbmQgYXJlXG4gICBjcmVhdGVkIGJ5IHRoZSAqaW1wb3J0IHN5c3RlbSogYXMgaW52b2tlZCBlaXRoZXIgYnkgdGhlICJpbXBvcnQiXG4gICBzdGF0ZW1lbnQgKHNlZSAiaW1wb3J0IiksIG9yIGJ5IGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXNcbiAgICJpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIiBhbmQgYnVpbHQtaW4gIl9faW1wb3J0X18oKSIuICBBIG1vZHVsZVxuICAgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieSBhIGRpY3Rpb25hcnkgb2JqZWN0ICh0aGlzIGlzXG4gICB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZSAiX19nbG9iYWxzX18iIGF0dHJpYnV0ZSBvZlxuICAgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSkuICBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmVcbiAgIHRyYW5zbGF0ZWQgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sICJtLngiIGlzIGVxdWl2YWxlbnRcbiAgIHRvICJtLl9fZGljdF9fWyJ4Il0iLiBBIG1vZHVsZSBvYmplY3QgZG9lcyBub3QgY29udGFpbiB0aGUgY29kZVxuICAgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIChzaW5jZSBpdCBpc25cJ3QgbmVlZGVkIG9uY2VcbiAgIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgIm0ueCA9IDEiIGlzIGVxdWl2YWxlbnQgdG8gIm0uX19kaWN0X19bIngiXSA9IDEiLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6ICJfX2RpY3RfXyIgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWU7XG4gICAiX19kb2NfXyIgaXMgdGhlIG1vZHVsZVwncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgIk5vbmUiIGlmXG4gICB1bmF2YWlsYWJsZTsgIl9fZmlsZV9fIiBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaCB0aGVcbiAgIG1vZHVsZSB3YXMgbG9hZGVkLCBpZiBpdCB3YXMgbG9hZGVkIGZyb20gYSBmaWxlLiBUaGUgIl9fZmlsZV9fIlxuICAgYXR0cmlidXRlIG1heSBiZSBtaXNzaW5nIGZvciBjZXJ0YWluIHR5cGVzIG9mIG1vZHVsZXMsIHN1Y2ggYXMgQ1xuICAgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjsgZm9yXG4gICBleHRlbnNpb24gbW9kdWxlcyBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdCBpc1xuICAgdGhlIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIkMueCIgaXMgdHJhbnNsYXRlZCB0b1xuICAgIkMuX19kaWN0X19bIngiXSIgKGFsdGhvdWdoIHRoZXJlIGFyZSBhIG51bWJlciBvZiBob29rcyB3aGljaCBhbGxvd1xuICAgZm9yIG90aGVyIG1lYW5zIG9mIGxvY2F0aW5nIGF0dHJpYnV0ZXMpLiBXaGVuIHRoZSBhdHRyaWJ1dGUgbmFtZSBpc1xuICAgbm90IGZvdW5kIHRoZXJlLCB0aGUgYXR0cmlidXRlIHNlYXJjaCBjb250aW51ZXMgaW4gdGhlIGJhc2VcbiAgIGNsYXNzZXMuIFRoaXMgc2VhcmNoIG9mIHRoZSBiYXNlIGNsYXNzZXMgdXNlcyB0aGUgQzMgbWV0aG9kXG4gICByZXNvbHV0aW9uIG9yZGVyIHdoaWNoIGJlaGF2ZXMgY29ycmVjdGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mXG4gICBcJ2RpYW1vbmRcJyBpbmhlcml0YW5jZSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uIGFuY2VzdG9yLiBBZGRpdGlvbmFsXG4gICBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBQeXRob24gY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIDIuMyByZWxlYXNlIGF0XG4gICBodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLlxuXG4gICBXaGVuIGEgY2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZSAoZm9yIGNsYXNzICJDIiwgc2F5KSB3b3VsZCB5aWVsZCBhXG4gICBjbGFzcyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZFxuICAgb2JqZWN0IHdob3NlICJfX3NlbGZfXyIgYXR0cmlidXRlcyBpcyAiQyIuICBXaGVuIGl0IHdvdWxkIHlpZWxkIGFcbiAgIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBvYmplY3Qgd3JhcHBlZCBieVxuICAgdGhlIHN0YXRpYyBtZXRob2Qgb2JqZWN0LiBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKlxuICAgZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRob3NlIGFjdHVhbGx5IGNvbnRhaW5lZCBpbiBpdHMgIl9fZGljdF9fIi5cblxuICAgQ2xhc3MgYXR0cmlidXRlIGFzc2lnbm1lbnRzIHVwZGF0ZSB0aGUgY2xhc3NcJ3MgZGljdGlvbmFyeSwgbmV2ZXJcbiAgIHRoZSBkaWN0aW9uYXJ5IG9mIGEgYmFzZSBjbGFzcy5cblxuICAgQSBjbGFzcyBvYmplY3QgY2FuIGJlIGNhbGxlZCAoc2VlIGFib3ZlKSB0byB5aWVsZCBhIGNsYXNzIGluc3RhbmNlXG4gICAoc2VlIGJlbG93KS5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiAiX19uYW1lX18iIGlzIHRoZSBjbGFzcyBuYW1lOyAiX19tb2R1bGVfXyIgaXNcbiAgIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7ICJfX2RpY3RfXyIgaXMgdGhlXG4gICBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGNsYXNzXCdzIG5hbWVzcGFjZTsgIl9fYmFzZXNfXyIgaXMgYSB0dXBsZVxuICAgKHBvc3NpYmx5IGVtcHR5IG9yIGEgc2luZ2xldG9uKSBjb250YWluaW5nIHRoZSBiYXNlIGNsYXNzZXMsIGluIHRoZVxuICAgb3JkZXIgb2YgdGhlaXIgb2NjdXJyZW5jZSBpbiB0aGUgYmFzZSBjbGFzcyBsaXN0OyAiX19kb2NfXyIgaXMgdGhlXG4gICBjbGFzc1wncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgTm9uZSBpZiB1bmRlZmluZWQuXG5cbkNsYXNzIGluc3RhbmNlc1xuICAgQSBjbGFzcyBpbnN0YW5jZSBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgYSBjbGFzcyBvYmplY3QgKHNlZSBhYm92ZSkuXG4gICBBIGNsYXNzIGluc3RhbmNlIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBhcyBhIGRpY3Rpb25hcnkgd2hpY2hcbiAgIGlzIHRoZSBmaXJzdCBwbGFjZSBpbiB3aGljaCBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgc2VhcmNoZWQuXG4gICBXaGVuIGFuIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQgdGhlcmUsIGFuZCB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MgaGFzXG4gICBhbiBhdHRyaWJ1dGUgYnkgdGhhdCBuYW1lLCB0aGUgc2VhcmNoIGNvbnRpbnVlcyB3aXRoIHRoZSBjbGFzc1xuICAgYXR0cmlidXRlcy4gIElmIGEgY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kIHRoYXQgaXMgYSB1c2VyLWRlZmluZWRcbiAgIGZ1bmN0aW9uIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0XG4gICB3aG9zZSAiX19zZWxmX18iIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UuICBTdGF0aWMgbWV0aG9kIGFuZFxuICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGFsc28gdHJhbnNmb3JtZWQ7IHNlZSBhYm92ZSB1bmRlclxuICAgIkNsYXNzZXMiLiAgU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyogZm9yIGFub3RoZXIgd2F5XG4gICBpbiB3aGljaCBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgcmV0cmlldmVkIHZpYSBpdHMgaW5zdGFuY2VzIG1heVxuICAgZGlmZmVyIGZyb20gdGhlIG9iamVjdHMgYWN0dWFsbHkgc3RvcmVkIGluIHRoZSBjbGFzc1wncyAiX19kaWN0X18iLlxuICAgSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kLCBhbmQgdGhlIG9iamVjdFwncyBjbGFzcyBoYXMgYVxuICAgIl9fZ2V0YXR0cl9fKCkiIG1ldGhvZCwgdGhhdCBpcyBjYWxsZWQgdG8gc2F0aXNmeSB0aGUgbG9va3VwLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudHMgYW5kIGRlbGV0aW9ucyB1cGRhdGUgdGhlIGluc3RhbmNlXCdzXG4gICBkaWN0aW9uYXJ5LCBuZXZlciBhIGNsYXNzXCdzIGRpY3Rpb25hcnkuICBJZiB0aGUgY2xhc3MgaGFzIGFcbiAgICJfX3NldGF0dHJfXygpIiBvciAiX19kZWxhdHRyX18oKSIgbWV0aG9kLCB0aGlzIGlzIGNhbGxlZCBpbnN0ZWFkXG4gICBvZiB1cGRhdGluZyB0aGUgaW5zdGFuY2UgZGljdGlvbmFyeSBkaXJlY3RseS5cblxuICAgQ2xhc3MgaW5zdGFuY2VzIGNhbiBwcmV0ZW5kIHRvIGJlIG51bWJlcnMsIHNlcXVlbmNlcywgb3IgbWFwcGluZ3NcbiAgIGlmIHRoZXkgaGF2ZSBtZXRob2RzIHdpdGggY2VydGFpbiBzcGVjaWFsIG5hbWVzLiAgU2VlIHNlY3Rpb25cbiAgICpTcGVjaWFsIG1ldGhvZCBuYW1lcyouXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogIl9fZGljdF9fIiBpcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnk7XG4gICAiX19jbGFzc19fIiBpcyB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MuXG5cbkkvTyBvYmplY3RzIChhbHNvIGtub3duIGFzIGZpbGUgb2JqZWN0cylcbiAgIEEgKmZpbGUgb2JqZWN0KiByZXByZXNlbnRzIGFuIG9wZW4gZmlsZS4gIFZhcmlvdXMgc2hvcnRjdXRzIGFyZVxuICAgYXZhaWxhYmxlIHRvIGNyZWF0ZSBmaWxlIG9iamVjdHM6IHRoZSAib3BlbigpIiBidWlsdC1pbiBmdW5jdGlvbixcbiAgIGFuZCBhbHNvICJvcy5wb3BlbigpIiwgIm9zLmZkb3BlbigpIiwgYW5kIHRoZSAibWFrZWZpbGUoKSIgbWV0aG9kXG4gICBvZiBzb2NrZXQgb2JqZWN0cyAoYW5kIHBlcmhhcHMgYnkgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHNcbiAgIHByb3ZpZGVkIGJ5IGV4dGVuc2lvbiBtb2R1bGVzKS5cblxuICAgVGhlIG9iamVjdHMgInN5cy5zdGRpbiIsICJzeXMuc3Rkb3V0IiBhbmQgInN5cy5zdGRlcnIiIGFyZVxuICAgaW5pdGlhbGl6ZWQgdG8gZmlsZSBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludGVycHJldGVyXCdzXG4gICBzdGFuZGFyZCBpbnB1dCwgb3V0cHV0IGFuZCBlcnJvciBzdHJlYW1zOyB0aGV5IGFyZSBhbGwgb3BlbiBpbiB0ZXh0XG4gICBtb2RlIGFuZCB0aGVyZWZvcmUgZm9sbG93IHRoZSBpbnRlcmZhY2UgZGVmaW5lZCBieSB0aGVcbiAgICJpby5UZXh0SU9CYXNlIiBhYnN0cmFjdCBjbGFzcy5cblxuSW50ZXJuYWwgdHlwZXNcbiAgIEEgZmV3IHR5cGVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgaW50ZXJwcmV0ZXIgYXJlIGV4cG9zZWQgdG8gdGhlXG4gICB1c2VyLiBUaGVpciBkZWZpbml0aW9ucyBtYXkgY2hhbmdlIHdpdGggZnV0dXJlIHZlcnNpb25zIG9mIHRoZVxuICAgaW50ZXJwcmV0ZXIsIGJ1dCB0aGV5IGFyZSBtZW50aW9uZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLlxuXG4gICBDb2RlIG9iamVjdHNcbiAgICAgIENvZGUgb2JqZWN0cyByZXByZXNlbnQgKmJ5dGUtY29tcGlsZWQqIGV4ZWN1dGFibGUgUHl0aG9uIGNvZGUsXG4gICAgICBvciAqYnl0ZWNvZGUqLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgY29kZSBvYmplY3QgYW5kIGFcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYW4gZXhwbGljaXRcbiAgICAgIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb25cJ3MgZ2xvYmFscyAodGhlIG1vZHVsZSBpbiB3aGljaCBpdCB3YXNcbiAgICAgIGRlZmluZWQpLCB3aGlsZSBhIGNvZGUgb2JqZWN0IGNvbnRhaW5zIG5vIGNvbnRleHQ7IGFsc28gdGhlXG4gICAgICBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBmdW5jdGlvbiBvYmplY3QsIG5vdFxuICAgICAgaW4gdGhlIGNvZGUgb2JqZWN0IChiZWNhdXNlIHRoZXkgcmVwcmVzZW50IHZhbHVlcyBjYWxjdWxhdGVkIGF0XG4gICAgICBydW4tdGltZSkuICBVbmxpa2UgZnVuY3Rpb24gb2JqZWN0cywgY29kZSBvYmplY3RzIGFyZSBpbW11dGFibGVcbiAgICAgIGFuZCBjb250YWluIG5vIHJlZmVyZW5jZXMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIHRvIG11dGFibGVcbiAgICAgIG9iamVjdHMuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJjb19uYW1lIiBnaXZlcyB0aGUgZnVuY3Rpb24gbmFtZTtcbiAgICAgICJjb19hcmdjb3VudCIgaXMgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cyAoaW5jbHVkaW5nXG4gICAgICBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcyk7ICJjb19ubG9jYWxzIiBpcyB0aGUgbnVtYmVyIG9mXG4gICAgICBsb2NhbCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gKGluY2x1ZGluZyBhcmd1bWVudHMpO1xuICAgICAgImNvX3Zhcm5hbWVzIiBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIHRoZSBsb2NhbFxuICAgICAgdmFyaWFibGVzIChzdGFydGluZyB3aXRoIHRoZSBhcmd1bWVudCBuYW1lcyk7ICJjb19jZWxsdmFycyIgaXMgYVxuICAgICAgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgbG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlXG4gICAgICByZWZlcmVuY2VkIGJ5IG5lc3RlZCBmdW5jdGlvbnM7ICJjb19mcmVldmFycyIgaXMgYSB0dXBsZVxuICAgICAgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgZnJlZSB2YXJpYWJsZXM7ICJjb19jb2RlIiBpcyBhIHN0cmluZ1xuICAgICAgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW5jZSBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnM7ICJjb19jb25zdHMiXG4gICAgICBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGxpdGVyYWxzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlO1xuICAgICAgImNvX25hbWVzIiBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlO1xuICAgICAgImNvX2ZpbGVuYW1lIiBpcyB0aGUgZmlsZW5hbWUgZnJvbSB3aGljaCB0aGUgY29kZSB3YXMgY29tcGlsZWQ7XG4gICAgICAiY29fZmlyc3RsaW5lbm8iIGlzIHRoZSBmaXJzdCBsaW5lIG51bWJlciBvZiB0aGUgZnVuY3Rpb247XG4gICAgICAiY29fbG5vdGFiIiBpcyBhIHN0cmluZyBlbmNvZGluZyB0aGUgbWFwcGluZyBmcm9tIGJ5dGVjb2RlXG4gICAgICBvZmZzZXRzIHRvIGxpbmUgbnVtYmVycyAoZm9yIGRldGFpbHMgc2VlIHRoZSBzb3VyY2UgY29kZSBvZiB0aGVcbiAgICAgIGludGVycHJldGVyKTsgImNvX3N0YWNrc2l6ZSIgaXMgdGhlIHJlcXVpcmVkIHN0YWNrIHNpemVcbiAgICAgIChpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzKTsgImNvX2ZsYWdzIiBpcyBhbiBpbnRlZ2VyIGVuY29kaW5nIGFcbiAgICAgIG51bWJlciBvZiBmbGFncyBmb3IgdGhlIGludGVycHJldGVyLlxuXG4gICAgICBUaGUgZm9sbG93aW5nIGZsYWcgYml0cyBhcmUgZGVmaW5lZCBmb3IgImNvX2ZsYWdzIjogYml0ICIweDA0IlxuICAgICAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSAiKmFyZ3VtZW50cyIgc3ludGF4IHRvIGFjY2VwdCBhblxuICAgICAgYXJiaXRyYXJ5IG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50czsgYml0ICIweDA4IiBpcyBzZXQgaWZcbiAgICAgIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSAiKiprZXl3b3JkcyIgc3ludGF4IHRvIGFjY2VwdCBhcmJpdHJhcnlcbiAgICAgIGtleXdvcmQgYXJndW1lbnRzOyBiaXQgIjB4MjAiIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gaXMgYVxuICAgICAgZ2VuZXJhdG9yLlxuXG4gICAgICBGdXR1cmUgZmVhdHVyZSBkZWNsYXJhdGlvbnMgKCJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uIilcbiAgICAgIGFsc28gdXNlIGJpdHMgaW4gImNvX2ZsYWdzIiB0byBpbmRpY2F0ZSB3aGV0aGVyIGEgY29kZSBvYmplY3RcbiAgICAgIHdhcyBjb21waWxlZCB3aXRoIGEgcGFydGljdWxhciBmZWF0dXJlIGVuYWJsZWQ6IGJpdCAiMHgyMDAwIiBpc1xuICAgICAgc2V0IGlmIHRoZSBmdW5jdGlvbiB3YXMgY29tcGlsZWQgd2l0aCBmdXR1cmUgZGl2aXNpb24gZW5hYmxlZDtcbiAgICAgIGJpdHMgIjB4MTAiIGFuZCAiMHgxMDAwIiB3ZXJlIHVzZWQgaW4gZWFybGllciB2ZXJzaW9ucyBvZlxuICAgICAgUHl0aG9uLlxuXG4gICAgICBPdGhlciBiaXRzIGluICJjb19mbGFncyIgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UuXG5cbiAgICAgIElmIGEgY29kZSBvYmplY3QgcmVwcmVzZW50cyBhIGZ1bmN0aW9uLCB0aGUgZmlyc3QgaXRlbSBpblxuICAgICAgImNvX2NvbnN0cyIgaXMgdGhlIGRvY3VtZW50YXRpb24gc3RyaW5nIG9mIHRoZSBmdW5jdGlvbiwgb3JcbiAgICAgICJOb25lIiBpZiB1bmRlZmluZWQuXG5cbiAgIEZyYW1lIG9iamVjdHNcbiAgICAgIEZyYW1lIG9iamVjdHMgcmVwcmVzZW50IGV4ZWN1dGlvbiBmcmFtZXMuICBUaGV5IG1heSBvY2N1ciBpblxuICAgICAgdHJhY2ViYWNrIG9iamVjdHMgKHNlZSBiZWxvdykuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJmX2JhY2siIGlzIHRvIHRoZSBwcmV2aW91cyBzdGFja1xuICAgICAgZnJhbWUgKHRvd2FyZHMgdGhlIGNhbGxlciksIG9yICJOb25lIiBpZiB0aGlzIGlzIHRoZSBib3R0b21cbiAgICAgIHN0YWNrIGZyYW1lOyAiZl9jb2RlIiBpcyB0aGUgY29kZSBvYmplY3QgYmVpbmcgZXhlY3V0ZWQgaW4gdGhpc1xuICAgICAgZnJhbWU7ICJmX2xvY2FscyIgaXMgdGhlIGRpY3Rpb25hcnkgdXNlZCB0byBsb29rIHVwIGxvY2FsXG4gICAgICB2YXJpYWJsZXM7ICJmX2dsb2JhbHMiIGlzIHVzZWQgZm9yIGdsb2JhbCB2YXJpYWJsZXM7XG4gICAgICAiZl9idWlsdGlucyIgaXMgdXNlZCBmb3IgYnVpbHQtaW4gKGludHJpbnNpYykgbmFtZXM7ICJmX2xhc3RpIlxuICAgICAgZ2l2ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24gKHRoaXMgaXMgYW4gaW5kZXggaW50byB0aGVcbiAgICAgIGJ5dGVjb2RlIHN0cmluZyBvZiB0aGUgY29kZSBvYmplY3QpLlxuXG4gICAgICBTcGVjaWFsIHdyaXRhYmxlIGF0dHJpYnV0ZXM6ICJmX3RyYWNlIiwgaWYgbm90ICJOb25lIiwgaXMgYVxuICAgICAgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBjb2RlIGxpbmUgKHRoaXMgaXNcbiAgICAgIHVzZWQgYnkgdGhlIGRlYnVnZ2VyKTsgImZfbGluZW5vIiBpcyB0aGUgY3VycmVudCBsaW5lIG51bWJlciBvZlxuICAgICAgdGhlIGZyYW1lIC0tLSB3cml0aW5nIHRvIHRoaXMgZnJvbSB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvbiBqdW1wc1xuICAgICAgdG8gdGhlIGdpdmVuIGxpbmUgKG9ubHkgZm9yIHRoZSBib3R0b20tbW9zdCBmcmFtZSkuICBBIGRlYnVnZ2VyXG4gICAgICBjYW4gaW1wbGVtZW50IGEgSnVtcCBjb21tYW5kIChha2EgU2V0IE5leHQgU3RhdGVtZW50KSBieSB3cml0aW5nXG4gICAgICB0byBmX2xpbmVuby5cblxuICAgICAgRnJhbWUgb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIGZyYW1lLmNsZWFyKClcblxuICAgICAgICAgVGhpcyBtZXRob2QgY2xlYXJzIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBoZWxkIGJ5XG4gICAgICAgICB0aGUgZnJhbWUuICBBbHNvLCBpZiB0aGUgZnJhbWUgYmVsb25nZWQgdG8gYSBnZW5lcmF0b3IsIHRoZVxuICAgICAgICAgZ2VuZXJhdG9yIGlzIGZpbmFsaXplZC4gIFRoaXMgaGVscHMgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlc1xuICAgICAgICAgaW52b2x2aW5nIGZyYW1lIG9iamVjdHMgKGZvciBleGFtcGxlIHdoZW4gY2F0Y2hpbmcgYW5cbiAgICAgICAgIGV4Y2VwdGlvbiBhbmQgc3RvcmluZyBpdHMgdHJhY2ViYWNrIGZvciBsYXRlciB1c2UpLlxuXG4gICAgICAgICAiUnVudGltZUVycm9yIiBpcyByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIGN1cnJlbnRseSBleGVjdXRpbmcuXG5cbiAgICAgICAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuICAgVHJhY2ViYWNrIG9iamVjdHNcbiAgICAgIFRyYWNlYmFjayBvYmplY3RzIHJlcHJlc2VudCBhIHN0YWNrIHRyYWNlIG9mIGFuIGV4Y2VwdGlvbi4gIEFcbiAgICAgIHRyYWNlYmFjayBvYmplY3QgaXMgY3JlYXRlZCB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuICBXaGVuIHRoZVxuICAgICAgc2VhcmNoIGZvciBhbiBleGNlcHRpb24gaGFuZGxlciB1bndpbmRzIHRoZSBleGVjdXRpb24gc3RhY2ssIGF0XG4gICAgICBlYWNoIHVud291bmQgbGV2ZWwgYSB0cmFjZWJhY2sgb2JqZWN0IGlzIGluc2VydGVkIGluIGZyb250IG9mXG4gICAgICB0aGUgY3VycmVudCB0cmFjZWJhY2suICBXaGVuIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGVudGVyZWQsXG4gICAgICB0aGUgc3RhY2sgdHJhY2UgaXMgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0uIChTZWUgc2VjdGlvblxuICAgICAgKlRoZSB0cnkgc3RhdGVtZW50Ki4pIEl0IGlzIGFjY2Vzc2libGUgYXMgdGhlIHRoaXJkIGl0ZW0gb2YgdGhlXG4gICAgICB0dXBsZSByZXR1cm5lZCBieSAic3lzLmV4Y19pbmZvKCkiLiBXaGVuIHRoZSBwcm9ncmFtIGNvbnRhaW5zIG5vXG4gICAgICBzdWl0YWJsZSBoYW5kbGVyLCB0aGUgc3RhY2sgdHJhY2UgaXMgd3JpdHRlbiAobmljZWx5IGZvcm1hdHRlZClcbiAgICAgIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW07IGlmIHRoZSBpbnRlcnByZXRlciBpcyBpbnRlcmFjdGl2ZSxcbiAgICAgIGl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUgdG8gdGhlIHVzZXIgYXMgInN5cy5sYXN0X3RyYWNlYmFjayIuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJ0Yl9uZXh0IiBpcyB0aGUgbmV4dCBsZXZlbCBpbiB0aGVcbiAgICAgIHN0YWNrIHRyYWNlICh0b3dhcmRzIHRoZSBmcmFtZSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkKSwgb3JcbiAgICAgICJOb25lIiBpZiB0aGVyZSBpcyBubyBuZXh0IGxldmVsOyAidGJfZnJhbWUiIHBvaW50cyB0byB0aGVcbiAgICAgIGV4ZWN1dGlvbiBmcmFtZSBvZiB0aGUgY3VycmVudCBsZXZlbDsgInRiX2xpbmVubyIgZ2l2ZXMgdGhlIGxpbmVcbiAgICAgIG51bWJlciB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkOyAidGJfbGFzdGkiIGluZGljYXRlcyB0aGVcbiAgICAgIHByZWNpc2UgaW5zdHJ1Y3Rpb24uICBUaGUgbGluZSBudW1iZXIgYW5kIGxhc3QgaW5zdHJ1Y3Rpb24gaW5cbiAgICAgIHRoZSB0cmFjZWJhY2sgbWF5IGRpZmZlciBmcm9tIHRoZSBsaW5lIG51bWJlciBvZiBpdHMgZnJhbWVcbiAgICAgIG9iamVjdCBpZiB0aGUgZXhjZXB0aW9uIG9jY3VycmVkIGluIGEgInRyeSIgc3RhdGVtZW50IHdpdGggbm9cbiAgICAgIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2Ugb3Igd2l0aCBhIGZpbmFsbHkgY2xhdXNlLlxuXG4gICBTbGljZSBvYmplY3RzXG4gICAgICBTbGljZSBvYmplY3RzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBzbGljZXMgZm9yICJfX2dldGl0ZW1fXygpIlxuICAgICAgbWV0aG9kcy4gIFRoZXkgYXJlIGFsc28gY3JlYXRlZCBieSB0aGUgYnVpbHQtaW4gInNsaWNlKCkiXG4gICAgICBmdW5jdGlvbi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogInN0YXJ0IiBpcyB0aGUgbG93ZXIgYm91bmQ7ICJzdG9wIlxuICAgICAgaXMgdGhlIHVwcGVyIGJvdW5kOyAic3RlcCIgaXMgdGhlIHN0ZXAgdmFsdWU7IGVhY2ggaXMgIk5vbmUiIGlmXG4gICAgICBvbWl0dGVkLiAgVGhlc2UgYXR0cmlidXRlcyBjYW4gaGF2ZSBhbnkgdHlwZS5cblxuICAgICAgU2xpY2Ugb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIHNsaWNlLmluZGljZXMoc2VsZiwgbGVuZ3RoKVxuXG4gICAgICAgICBUaGlzIG1ldGhvZCB0YWtlcyBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50ICpsZW5ndGgqIGFuZFxuICAgICAgICAgY29tcHV0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsaWNlIHRoYXQgdGhlIHNsaWNlIG9iamVjdFxuICAgICAgICAgd291bGQgZGVzY3JpYmUgaWYgYXBwbGllZCB0byBhIHNlcXVlbmNlIG9mICpsZW5ndGgqIGl0ZW1zLlxuICAgICAgICAgSXQgcmV0dXJucyBhIHR1cGxlIG9mIHRocmVlIGludGVnZXJzOyByZXNwZWN0aXZlbHkgdGhlc2UgYXJlXG4gICAgICAgICB0aGUgKnN0YXJ0KiBhbmQgKnN0b3AqIGluZGljZXMgYW5kIHRoZSAqc3RlcCogb3Igc3RyaWRlXG4gICAgICAgICBsZW5ndGggb2YgdGhlIHNsaWNlLiBNaXNzaW5nIG9yIG91dC1vZi1ib3VuZHMgaW5kaWNlcyBhcmVcbiAgICAgICAgIGhhbmRsZWQgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHJlZ3VsYXIgc2xpY2VzLlxuXG4gICBTdGF0aWMgbWV0aG9kIG9iamVjdHNcbiAgICAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBwcm92aWRlIGEgd2F5IG9mIGRlZmVhdGluZyB0aGVcbiAgICAgIHRyYW5zZm9ybWF0aW9uIG9mIGZ1bmN0aW9uIG9iamVjdHMgdG8gbWV0aG9kIG9iamVjdHMgZGVzY3JpYmVkXG4gICAgICBhYm92ZS4gQSBzdGF0aWMgbWV0aG9kIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFueSBvdGhlclxuICAgICAgb2JqZWN0LCB1c3VhbGx5IGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QuIFdoZW4gYSBzdGF0aWNcbiAgICAgIG1ldGhvZCBvYmplY3QgaXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBvciBhIGNsYXNzIGluc3RhbmNlLCB0aGVcbiAgICAgIG9iamVjdCBhY3R1YWxseSByZXR1cm5lZCBpcyB0aGUgd3JhcHBlZCBvYmplY3QsIHdoaWNoIGlzIG5vdFxuICAgICAgc3ViamVjdCB0byBhbnkgZnVydGhlciB0cmFuc2Zvcm1hdGlvbi4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZVxuICAgICAgbm90IHRoZW1zZWx2ZXMgY2FsbGFibGUsIGFsdGhvdWdoIHRoZSBvYmplY3RzIHRoZXkgd3JhcCB1c3VhbGx5XG4gICAgICBhcmUuIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgICJzdGF0aWNtZXRob2QoKSIgY29uc3RydWN0b3IuXG5cbiAgIENsYXNzIG1ldGhvZCBvYmplY3RzXG4gICAgICBBIGNsYXNzIG1ldGhvZCBvYmplY3QsIGxpa2UgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXMgYSB3cmFwcGVyXG4gICAgICBhcm91bmQgYW5vdGhlciBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIHdheSBpbiB3aGljaCB0aGF0IG9iamVjdFxuICAgICAgaXMgcmV0cmlldmVkIGZyb20gY2xhc3NlcyBhbmQgY2xhc3MgaW5zdGFuY2VzLiBUaGUgYmVoYXZpb3VyIG9mXG4gICAgICBjbGFzcyBtZXRob2Qgb2JqZWN0cyB1cG9uIHN1Y2ggcmV0cmlldmFsIGlzIGRlc2NyaWJlZCBhYm92ZSxcbiAgICAgIHVuZGVyICJVc2VyLWRlZmluZWQgbWV0aG9kcyIuIENsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkXG4gICAgICBieSB0aGUgYnVpbHQtaW4gImNsYXNzbWV0aG9kKCkiIGNvbnN0cnVjdG9yLlxuJywKICAndHlwZXNmdW5jdGlvbnMnOiB1J1xuRnVuY3Rpb25zXG4qKioqKioqKipcblxuRnVuY3Rpb24gb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoZSBvbmx5XG5vcGVyYXRpb24gb24gYSBmdW5jdGlvbiBvYmplY3QgaXMgdG8gY2FsbCBpdDogImZ1bmMoYXJndW1lbnQtbGlzdCkiLlxuXG5UaGVyZSBhcmUgcmVhbGx5IHR3byBmbGF2b3JzIG9mIGZ1bmN0aW9uIG9iamVjdHM6IGJ1aWx0LWluIGZ1bmN0aW9uc1xuYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuICBCb3RoIHN1cHBvcnQgdGhlIHNhbWUgb3BlcmF0aW9uICh0byBjYWxsXG50aGUgZnVuY3Rpb24pLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGRpZmZlcmVudCwgaGVuY2UgdGhlXG5kaWZmZXJlbnQgb2JqZWN0IHR5cGVzLlxuXG5TZWUgKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCiAgJ3R5cGVzbWFwcGluZyc6IHUnXG5NYXBwaW5nIFR5cGVzIC0tLSAiZGljdCJcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0LVxuaW4gImxpc3QiLCAic2V0IiwgYW5kICJ0dXBsZSIgY2xhc3NlcywgYW5kIHRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZS4pXG5cbkEgZGljdGlvbmFyeVwncyBrZXlzIGFyZSAqYWxtb3N0KiBhcmJpdHJhcnkgdmFsdWVzLiAgVmFsdWVzIHRoYXQgYXJlXG5ub3QgKmhhc2hhYmxlKiwgdGhhdCBpcywgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMsIGRpY3Rpb25hcmllcyBvclxub3RoZXIgbXV0YWJsZSB0eXBlcyAodGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG5pZGVudGl0eSkgbWF5IG5vdCBiZSB1c2VkIGFzIGtleXMuICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleVxudGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsXG4oc3VjaCBhcyAiMSIgYW5kICIxLjAiKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4XG50aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnMgc3RvcmVcbmZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG8gdXNlXG50aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgImtleTpcbnZhbHVlIiBwYWlycyB3aXRoaW4gYnJhY2VzLCBmb3IgZXhhbXBsZTogIntcJ2phY2tcJzogNDA5OCwgXCdzam9lcmRcJzpcbjQxMjd9IiBvciAiezQwOTg6IFwnamFja1wnLCA0MTI3OiBcJ3Nqb2VyZFwnfSIsIG9yIGJ5IHRoZSAiZGljdCJcbmNvbnN0cnVjdG9yLlxuXG5jbGFzcyBjbGFzcyBkaWN0KCoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KG1hcHBpbmcsICoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KGl0ZXJhYmxlLCAqKmt3YXJnKVxuXG4gICBSZXR1cm4gYSBuZXcgZGljdGlvbmFyeSBpbml0aWFsaXplZCBmcm9tIGFuIG9wdGlvbmFsIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50IGFuZCBhIHBvc3NpYmx5IGVtcHR5IHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy5cblxuICAgSWYgbm8gcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiwgYW4gZW1wdHkgZGljdGlvbmFyeSBpcyBjcmVhdGVkLlxuICAgSWYgYSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuIGFuZCBpdCBpcyBhIG1hcHBpbmcgb2JqZWN0LCBhXG4gICBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBrZXktdmFsdWUgcGFpcnMgYXMgdGhlIG1hcHBpbmdcbiAgIG9iamVjdC4gIE90aGVyd2lzZSwgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgbXVzdCBiZSBhbiAqaXRlcmFibGUqXG4gICBvYmplY3QuICBFYWNoIGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIG11c3QgaXRzZWxmIGJlIGFuIGl0ZXJhYmxlIHdpdGhcbiAgIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUgZmlyc3Qgb2JqZWN0IG9mIGVhY2ggaXRlbSBiZWNvbWVzIGEga2V5XG4gICBpbiB0aGUgbmV3IGRpY3Rpb25hcnksIGFuZCB0aGUgc2Vjb25kIG9iamVjdCB0aGUgY29ycmVzcG9uZGluZ1xuICAgdmFsdWUuICBJZiBhIGtleSBvY2N1cnMgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIGZvciB0aGF0IGtleVxuICAgYmVjb21lcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbmV3IGRpY3Rpb25hcnkuXG5cbiAgIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGVpclxuICAgdmFsdWVzIGFyZSBhZGRlZCB0byB0aGUgZGljdGlvbmFyeSBjcmVhdGVkIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LiAgSWYgYSBrZXkgYmVpbmcgYWRkZWQgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbVxuICAgdGhlIGtleXdvcmQgYXJndW1lbnQgcmVwbGFjZXMgdGhlIHZhbHVlIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LlxuXG4gICBUbyBpbGx1c3RyYXRlLCB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFsbCByZXR1cm4gYSBkaWN0aW9uYXJ5IGVxdWFsXG4gICB0byAieyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30iOlxuXG4gICAgICA+Pj4gYSA9IGRpY3Qob25lPTEsIHR3bz0yLCB0aHJlZT0zKVxuICAgICAgPj4+IGIgPSB7XCdvbmVcJzogMSwgXCd0d29cJzogMiwgXCd0aHJlZVwnOiAzfVxuICAgICAgPj4+IGMgPSBkaWN0KHppcChbXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnXSwgWzEsIDIsIDNdKSlcbiAgICAgID4+PiBkID0gZGljdChbKFwndHdvXCcsIDIpLCAoXCdvbmVcJywgMSksIChcJ3RocmVlXCcsIDMpXSlcbiAgICAgID4+PiBlID0gZGljdCh7XCd0aHJlZVwnOiAzLCBcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyfSlcbiAgICAgID4+PiBhID09IGIgPT0gYyA9PSBkID09IGVcbiAgICAgIFRydWVcblxuICAgUHJvdmlkaW5nIGtleXdvcmQgYXJndW1lbnRzIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlIG9ubHkgd29ya3MgZm9yXG4gICBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycy4gIE90aGVyd2lzZSwgYW55IHZhbGlkIGtleXNcbiAgIGNhbiBiZSB1c2VkLlxuXG4gICBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaWN0aW9uYXJpZXMgc3VwcG9ydCAoYW5kIHRoZXJlZm9yZSxcbiAgIGN1c3RvbSBtYXBwaW5nIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRvbyk6XG5cbiAgIGxlbihkKVxuXG4gICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZGljdGlvbmFyeSAqZCouXG5cbiAgIGRba2V5XVxuXG4gICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgIktleUVycm9yIiBpZlxuICAgICAgKmtleSogaXMgbm90IGluIHRoZSBtYXAuXG5cbiAgICAgIElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kICJfX21pc3NpbmdfXygpIiBhbmQgKmtleSpcbiAgICAgIGlzIG5vdCBwcmVzZW50LCB0aGUgImRba2V5XSIgb3BlcmF0aW9uIGNhbGxzIHRoYXQgbWV0aG9kIHdpdGhcbiAgICAgIHRoZSBrZXkgKmtleSogYXMgYXJndW1lbnQuICBUaGUgImRba2V5XSIgb3BlcmF0aW9uIHRoZW4gcmV0dXJuc1xuICAgICAgb3IgcmFpc2VzIHdoYXRldmVyIGlzIHJldHVybmVkIG9yIHJhaXNlZCBieSB0aGVcbiAgICAgICJfX21pc3NpbmdfXyhrZXkpIiBjYWxsLiBObyBvdGhlciBvcGVyYXRpb25zIG9yIG1ldGhvZHMgaW52b2tlXG4gICAgICAiX19taXNzaW5nX18oKSIuIElmICJfX21pc3NpbmdfXygpIiBpcyBub3QgZGVmaW5lZCwgIktleUVycm9yIlxuICAgICAgaXMgcmFpc2VkLiAiX19taXNzaW5nX18oKSIgbXVzdCBiZSBhIG1ldGhvZDsgaXQgY2Fubm90IGJlIGFuXG4gICAgICBpbnN0YW5jZSB2YXJpYWJsZTpcblxuICAgICAgICAgPj4+IGNsYXNzIENvdW50ZXIoZGljdCk6XG4gICAgICAgICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgICAgICAgLi4uICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgID4+PiBjID0gQ291bnRlcigpXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXVxuICAgICAgICAgMFxuICAgICAgICAgPj4+IGNbXCdyZWRcJ10gKz0gMVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDFcblxuICAgICAgVGhlIGV4YW1wbGUgYWJvdmUgc2hvd3MgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgICJjb2xsZWN0aW9ucy5Db3VudGVyIi4gIEEgZGlmZmVyZW50ICJfX21pc3NpbmdfXyIgbWV0aG9kIGlzIHVzZWRcbiAgICAgIGJ5ICJjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdCIuXG5cbiAgIGRba2V5XSA9IHZhbHVlXG5cbiAgICAgIFNldCAiZFtrZXldIiB0byAqdmFsdWUqLlxuXG4gICBkZWwgZFtrZXldXG5cbiAgICAgIFJlbW92ZSAiZFtrZXldIiBmcm9tICpkKi4gIFJhaXNlcyBhICJLZXlFcnJvciIgaWYgKmtleSogaXMgbm90XG4gICAgICBpbiB0aGUgbWFwLlxuXG4gICBrZXkgaW4gZFxuXG4gICAgICBSZXR1cm4gIlRydWUiIGlmICpkKiBoYXMgYSBrZXkgKmtleSosIGVsc2UgIkZhbHNlIi5cblxuICAga2V5IG5vdCBpbiBkXG5cbiAgICAgIEVxdWl2YWxlbnQgdG8gIm5vdCBrZXkgaW4gZCIuXG5cbiAgIGl0ZXIoZClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMgb2YgdGhlIGRpY3Rpb25hcnkuICBUaGlzIGlzIGFcbiAgICAgIHNob3J0Y3V0IGZvciAiaXRlcihkLmtleXMoKSkiLlxuXG4gICBjbGVhcigpXG5cbiAgICAgIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS5cblxuICAgY29weSgpXG5cbiAgICAgIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGljdGlvbmFyeS5cblxuICAgY2xhc3NtZXRob2QgZnJvbWtleXMoc2VxWywgdmFsdWVdKVxuXG4gICAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSAqc2VxKiBhbmQgdmFsdWVzIHNldCB0b1xuICAgICAgKnZhbHVlKi5cblxuICAgICAgImZyb21rZXlzKCkiIGlzIGEgY2xhc3MgbWV0aG9kIHRoYXQgcmV0dXJucyBhIG5ldyBkaWN0aW9uYXJ5LlxuICAgICAgKnZhbHVlKiBkZWZhdWx0cyB0byAiTm9uZSIuXG5cbiAgIGdldChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3IgKmtleSogaWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIGVsc2VcbiAgICAgICpkZWZhdWx0Ki4gSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gIk5vbmUiLCBzb1xuICAgICAgdGhhdCB0aGlzIG1ldGhvZCBuZXZlciByYWlzZXMgYSAiS2V5RXJyb3IiLlxuXG4gICBpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGl0ZW1zICgiKGtleSwgdmFsdWUpIlxuICAgICAgcGFpcnMpLiBTZWUgdGhlICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIGtleXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBrZXlzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAgcG9wKGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLFxuICAgICAgZWxzZSByZXR1cm4gKmRlZmF1bHQqLiAgSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiBhbmQgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgZGljdGlvbmFyeSwgYSAiS2V5RXJyb3IiIGlzIHJhaXNlZC5cblxuICAgcG9waXRlbSgpXG5cbiAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSAiKGtleSwgdmFsdWUpIiBwYWlyIGZyb20gdGhlXG4gICAgICBkaWN0aW9uYXJ5LlxuXG4gICAgICAicG9waXRlbSgpIiBpcyB1c2VmdWwgdG8gZGVzdHJ1Y3RpdmVseSBpdGVyYXRlIG92ZXIgYVxuICAgICAgZGljdGlvbmFyeSwgYXMgb2Z0ZW4gdXNlZCBpbiBzZXQgYWxnb3JpdGhtcy4gIElmIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyBlbXB0eSwgY2FsbGluZyAicG9waXRlbSgpIiByYWlzZXMgYSAiS2V5RXJyb3IiLlxuXG4gICBzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmV0dXJuIGl0cyB2YWx1ZS4gIElmIG5vdCwgaW5zZXJ0XG4gICAgICAqa2V5KiB3aXRoIGEgdmFsdWUgb2YgKmRlZmF1bHQqIGFuZCByZXR1cm4gKmRlZmF1bHQqLiAgKmRlZmF1bHQqXG4gICAgICBkZWZhdWx0cyB0byAiTm9uZSIuXG5cbiAgIHVwZGF0ZShbb3RoZXJdKVxuXG4gICAgICBVcGRhdGUgdGhlIGRpY3Rpb25hcnkgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gKm90aGVyKixcbiAgICAgIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGtleXMuICBSZXR1cm4gIk5vbmUiLlxuXG4gICAgICAidXBkYXRlKCkiIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW5cbiAgICAgIGl0ZXJhYmxlIG9mIGtleS92YWx1ZSBwYWlycyAoYXMgdHVwbGVzIG9yIG90aGVyIGl0ZXJhYmxlcyBvZlxuICAgICAgbGVuZ3RoIHR3bykuICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgdGhlbiB1cGRhdGVkIHdpdGggdGhvc2Uga2V5L3ZhbHVlIHBhaXJzOiAiZC51cGRhdGUocmVkPTEsXG4gICAgICBibHVlPTIpIi5cblxuICAgdmFsdWVzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgdmFsdWVzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAgRGljdGlvbmFyaWVzIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZSBzYW1lICIoa2V5LFxuICAgdmFsdWUpIiBwYWlycy4gT3JkZXIgY29tcGFyaXNvbnMgKFwnPFwnLCBcJzw9XCcsIFwnPj1cJywgXCc+XCcpIHJhaXNlXG4gICAiVHlwZUVycm9yIi5cblxuU2VlIGFsc286ICJ0eXBlcy5NYXBwaW5nUHJveHlUeXBlIiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSByZWFkLW9ubHlcbiAgdmlldyBvZiBhICJkaWN0Ii5cblxuXG5EaWN0aW9uYXJ5IHZpZXcgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9iamVjdHMgcmV0dXJuZWQgYnkgImRpY3Qua2V5cygpIiwgImRpY3QudmFsdWVzKCkiIGFuZFxuImRpY3QuaXRlbXMoKSIgYXJlICp2aWV3IG9iamVjdHMqLiAgVGhleSBwcm92aWRlIGEgZHluYW1pYyB2aWV3IG9uIHRoZVxuZGljdGlvbmFyeVwncyBlbnRyaWVzLCB3aGljaCBtZWFucyB0aGF0IHdoZW4gdGhlIGRpY3Rpb25hcnkgY2hhbmdlcyxcbnRoZSB2aWV3IHJlZmxlY3RzIHRoZXNlIGNoYW5nZXMuXG5cbkRpY3Rpb25hcnkgdmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgdG8geWllbGQgdGhlaXIgcmVzcGVjdGl2ZSBkYXRhLFxuYW5kIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0czpcblxubGVuKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG5pdGVyKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cywgdmFsdWVzIG9yIGl0ZW1zIChyZXByZXNlbnRlZCBhc1xuICAgdHVwbGVzIG9mICIoa2V5LCB2YWx1ZSkiKSBpbiB0aGUgZGljdGlvbmFyeS5cblxuICAgS2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIGFuIGFyYml0cmFyeSBvcmRlciB3aGljaCBpc1xuICAgbm9uLXJhbmRvbSwgdmFyaWVzIGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLCBhbmQgZGVwZW5kcyBvblxuICAgdGhlIGRpY3Rpb25hcnlcJ3MgaGlzdG9yeSBvZiBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMuIElmIGtleXMsXG4gICB2YWx1ZXMgYW5kIGl0ZW1zIHZpZXdzIGFyZSBpdGVyYXRlZCBvdmVyIHdpdGggbm8gaW50ZXJ2ZW5pbmdcbiAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRpY3Rpb25hcnksIHRoZSBvcmRlciBvZiBpdGVtcyB3aWxsIGRpcmVjdGx5XG4gICBjb3JyZXNwb25kLiAgVGhpcyBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mICIodmFsdWUsIGtleSkiIHBhaXJzIHVzaW5nXG4gICAiemlwKCkiOiAicGFpcnMgPSB6aXAoZC52YWx1ZXMoKSwgZC5rZXlzKCkpIi4gIEFub3RoZXIgd2F5IHRvXG4gICBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyAicGFpcnMgPSBbKHYsIGspIGZvciAoaywgdikgaW4gZC5pdGVtcygpXSIuXG5cbiAgIEl0ZXJhdGluZyB2aWV3cyB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeVxuICAgbWF5IHJhaXNlIGEgIlJ1bnRpbWVFcnJvciIgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXIgYWxsIGVudHJpZXMuXG5cbnggaW4gZGljdHZpZXdcblxuICAgUmV0dXJuICJUcnVlIiBpZiAqeCogaXMgaW4gdGhlIHVuZGVybHlpbmcgZGljdGlvbmFyeVwncyBrZXlzLCB2YWx1ZXNcbiAgIG9yIGl0ZW1zIChpbiB0aGUgbGF0dGVyIGNhc2UsICp4KiBzaG91bGQgYmUgYSAiKGtleSwgdmFsdWUpIlxuICAgdHVwbGUpLlxuXG5LZXlzIHZpZXdzIGFyZSBzZXQtbGlrZSBzaW5jZSB0aGVpciBlbnRyaWVzIGFyZSB1bmlxdWUgYW5kIGhhc2hhYmxlLlxuSWYgYWxsIHZhbHVlcyBhcmUgaGFzaGFibGUsIHNvIHRoYXQgIihrZXksIHZhbHVlKSIgcGFpcnMgYXJlIHVuaXF1ZVxuYW5kIGhhc2hhYmxlLCB0aGVuIHRoZSBpdGVtcyB2aWV3IGlzIGFsc28gc2V0LWxpa2UuICAoVmFsdWVzIHZpZXdzIGFyZVxubm90IHRyZWF0ZWQgYXMgc2V0LWxpa2Ugc2luY2UgdGhlIGVudHJpZXMgYXJlIGdlbmVyYWxseSBub3QgdW5pcXVlLilcbkZvciBzZXQtbGlrZSB2aWV3cywgYWxsIG9mIHRoZSBvcGVyYXRpb25zIGRlZmluZWQgZm9yIHRoZSBhYnN0cmFjdFxuYmFzZSBjbGFzcyAiY29sbGVjdGlvbnMuYWJjLlNldCIgYXJlIGF2YWlsYWJsZSAoZm9yIGV4YW1wbGUsICI9PSIsXG4iPCIsIG9yICJeIikuXG5cbkFuIGV4YW1wbGUgb2YgZGljdGlvbmFyeSB2aWV3IHVzYWdlOlxuXG4gICA+Pj4gZGlzaGVzID0ge1wnZWdnc1wnOiAyLCBcJ3NhdXNhZ2VcJzogMSwgXCdiYWNvblwnOiAxLCBcJ3NwYW1cJzogNTAwfVxuICAgPj4+IGtleXMgPSBkaXNoZXMua2V5cygpXG4gICA+Pj4gdmFsdWVzID0gZGlzaGVzLnZhbHVlcygpXG5cbiAgID4+PiAjIGl0ZXJhdGlvblxuICAgPj4+IG4gPSAwXG4gICA+Pj4gZm9yIHZhbCBpbiB2YWx1ZXM6XG4gICAuLi4gICAgIG4gKz0gdmFsXG4gICA+Pj4gcHJpbnQobilcbiAgIDUwNFxuXG4gICA+Pj4gIyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gdGhlIHNhbWUgb3JkZXJcbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYXVzYWdlXCcsIFwnc3BhbVwnXVxuICAgPj4+IGxpc3QodmFsdWVzKVxuICAgWzIsIDEsIDEsIDUwMF1cblxuICAgPj4+ICMgdmlldyBvYmplY3RzIGFyZSBkeW5hbWljIGFuZCByZWZsZWN0IGRpY3QgY2hhbmdlc1xuICAgPj4+IGRlbCBkaXNoZXNbXCdlZ2dzXCddXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ3NhdXNhZ2VcJ11cbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdzcGFtXCcsIFwnYmFjb25cJ11cblxuICAgPj4+ICMgc2V0IG9wZXJhdGlvbnNcbiAgID4+PiBrZXlzICYge1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2FsYWRcJ31cbiAgIHtcJ2JhY29uXCd9XG4gICA+Pj4ga2V5cyBeIHtcJ3NhdXNhZ2VcJywgXCdqdWljZVwnfVxuICAge1wnanVpY2VcJywgXCdzYXVzYWdlXCcsIFwnYmFjb25cJywgXCdzcGFtXCd9XG4nLAogICd0eXBlc21ldGhvZHMnOiB1J1xuTWV0aG9kc1xuKioqKioqKlxuXG5NZXRob2RzIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIHVzaW5nIHRoZSBhdHRyaWJ1dGUgbm90YXRpb24uXG5UaGVyZSBhcmUgdHdvIGZsYXZvcnM6IGJ1aWx0LWluIG1ldGhvZHMgKHN1Y2ggYXMgImFwcGVuZCgpIiBvbiBsaXN0cylcbmFuZCBjbGFzcyBpbnN0YW5jZSBtZXRob2RzLiAgQnVpbHQtaW4gbWV0aG9kcyBhcmUgZGVzY3JpYmVkIHdpdGggdGhlXG50eXBlcyB0aGF0IHN1cHBvcnQgdGhlbS5cblxuSWYgeW91IGFjY2VzcyBhIG1ldGhvZCAoYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgY2xhc3MgbmFtZXNwYWNlKVxudGhyb3VnaCBhbiBpbnN0YW5jZSwgeW91IGdldCBhIHNwZWNpYWwgb2JqZWN0OiBhICpib3VuZCBtZXRob2QqIChhbHNvXG5jYWxsZWQgKmluc3RhbmNlIG1ldGhvZCopIG9iamVjdC4gV2hlbiBjYWxsZWQsIGl0IHdpbGwgYWRkIHRoZSAic2VsZiJcbmFyZ3VtZW50IHRvIHRoZSBhcmd1bWVudCBsaXN0LiAgQm91bmQgbWV0aG9kcyBoYXZlIHR3byBzcGVjaWFsIHJlYWQtXG5vbmx5IGF0dHJpYnV0ZXM6ICJtLl9fc2VsZl9fIiBpcyB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2Rcbm9wZXJhdGVzLCBhbmQgIm0uX19mdW5jX18iIGlzIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIG1ldGhvZC5cbkNhbGxpbmcgIm0oYXJnLTEsIGFyZy0yLCAuLi4sIGFyZy1uKSIgaXMgY29tcGxldGVseSBlcXVpdmFsZW50IHRvXG5jYWxsaW5nICJtLl9fZnVuY19fKG0uX19zZWxmX18sIGFyZy0xLCBhcmctMiwgLi4uLCBhcmctbikiLlxuXG5MaWtlIGZ1bmN0aW9uIG9iamVjdHMsIGJvdW5kIG1ldGhvZCBvYmplY3RzIHN1cHBvcnQgZ2V0dGluZyBhcmJpdHJhcnlcbmF0dHJpYnV0ZXMuICBIb3dldmVyLCBzaW5jZSBtZXRob2QgYXR0cmlidXRlcyBhcmUgYWN0dWFsbHkgc3RvcmVkIG9uXG50aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QgKCJtZXRoLl9fZnVuY19fIiksIHNldHRpbmcgbWV0aG9kXG5hdHRyaWJ1dGVzIG9uIGJvdW5kIG1ldGhvZHMgaXMgZGlzYWxsb3dlZC4gIEF0dGVtcHRpbmcgdG8gc2V0IGFuXG5hdHRyaWJ1dGUgb24gYSBtZXRob2QgcmVzdWx0cyBpbiBhbiAiQXR0cmlidXRlRXJyb3IiIGJlaW5nIHJhaXNlZC4gIEluXG5vcmRlciB0byBzZXQgYSBtZXRob2QgYXR0cmlidXRlLCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBpdCBvbiB0aGVcbnVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0OlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKTpcbiAgIC4uLiAgICAgICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLm1ldGhvZC53aG9hbWkgPSBcJ215IG5hbWUgaXMgbWV0aG9kXCcgICMgY2FuXCd0IHNldCBvbiB0aGUgbWV0aG9kXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBBdHRyaWJ1dGVFcnJvcjogXCdtZXRob2RcJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSBcJ3dob2FtaVwnXG4gICA+Pj4gYy5tZXRob2QuX19mdW5jX18ud2hvYW1pID0gXCdteSBuYW1lIGlzIG1ldGhvZFwnXG4gICA+Pj4gYy5tZXRob2Qud2hvYW1pXG4gICBcJ215IG5hbWUgaXMgbWV0aG9kXCdcblxuU2VlICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKICAndHlwZXNtb2R1bGVzJzogdSdcbk1vZHVsZXNcbioqKioqKipcblxuVGhlIG9ubHkgc3BlY2lhbCBvcGVyYXRpb24gb24gYSBtb2R1bGUgaXMgYXR0cmlidXRlIGFjY2VzczogIm0ubmFtZSIsXG53aGVyZSAqbSogaXMgYSBtb2R1bGUgYW5kICpuYW1lKiBhY2Nlc3NlcyBhIG5hbWUgZGVmaW5lZCBpbiAqbSpcJ3NcbnN5bWJvbCB0YWJsZS4gTW9kdWxlIGF0dHJpYnV0ZXMgY2FuIGJlIGFzc2lnbmVkIHRvLiAgKE5vdGUgdGhhdCB0aGVcbiJpbXBvcnQiIHN0YXRlbWVudCBpcyBub3QsIHN0cmljdGx5IHNwZWFraW5nLCBhbiBvcGVyYXRpb24gb24gYSBtb2R1bGVcbm9iamVjdDsgImltcG9ydCBmb28iIGRvZXMgbm90IHJlcXVpcmUgYSBtb2R1bGUgb2JqZWN0IG5hbWVkICpmb28qIHRvXG5leGlzdCwgcmF0aGVyIGl0IHJlcXVpcmVzIGFuIChleHRlcm5hbCkgKmRlZmluaXRpb24qIGZvciBhIG1vZHVsZVxubmFtZWQgKmZvbyogc29tZXdoZXJlLilcblxuQSBzcGVjaWFsIGF0dHJpYnV0ZSBvZiBldmVyeSBtb2R1bGUgaXMgIl9fZGljdF9fIi4gVGhpcyBpcyB0aGVcbmRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgbW9kdWxlXCdzIHN5bWJvbCB0YWJsZS4gTW9kaWZ5aW5nIHRoaXNcbmRpY3Rpb25hcnkgd2lsbCBhY3R1YWxseSBjaGFuZ2UgdGhlIG1vZHVsZVwncyBzeW1ib2wgdGFibGUsIGJ1dCBkaXJlY3RcbmFzc2lnbm1lbnQgdG8gdGhlICJfX2RpY3RfXyIgYXR0cmlidXRlIGlzIG5vdCBwb3NzaWJsZSAoeW91IGNhbiB3cml0ZVxuIm0uX19kaWN0X19bXCdhXCddID0gMSIsIHdoaWNoIGRlZmluZXMgIm0uYSIgdG8gYmUgIjEiLCBidXQgeW91IGNhblwndFxud3JpdGUgIm0uX19kaWN0X18gPSB7fSIpLiAgTW9kaWZ5aW5nICJfX2RpY3RfXyIgZGlyZWN0bHkgaXMgbm90XG5yZWNvbW1lbmRlZC5cblxuTW9kdWxlcyBidWlsdCBpbnRvIHRoZSBpbnRlcnByZXRlciBhcmUgd3JpdHRlbiBsaWtlIHRoaXM6ICI8bW9kdWxlXG5cJ3N5c1wnIChidWlsdC1pbik+Ii4gIElmIGxvYWRlZCBmcm9tIGEgZmlsZSwgdGhleSBhcmUgd3JpdHRlbiBhc1xuIjxtb2R1bGUgXCdvc1wnIGZyb20gXCcvdXNyL2xvY2FsL2xpYi9weXRob25YLlkvb3MucHljXCc+Ii5cbicsCi0gJ3R5cGVzc2VxJzogdSdcblNlcXVlbmNlIFR5cGVzIC0tLSAibGlzdCIsICJ0dXBsZSIsICJyYW5nZSJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHRocmVlIGJhc2ljIHNlcXVlbmNlIHR5cGVzOiBsaXN0cywgdHVwbGVzLCBhbmQgcmFuZ2Vcbm9iamVjdHMuIEFkZGl0aW9uYWwgc2VxdWVuY2UgdHlwZXMgdGFpbG9yZWQgZm9yIHByb2Nlc3Npbmcgb2YgKmJpbmFyeVxuZGF0YSogYW5kICp0ZXh0IHN0cmluZ3MqIGFyZSBkZXNjcmliZWQgaW4gZGVkaWNhdGVkIHNlY3Rpb25zLlxuXG5cbkNvbW1vbiBTZXF1ZW5jZSBPcGVyYXRpb25zXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBzdXBwb3J0ZWQgYnkgbW9zdCBzZXF1ZW5jZVxudHlwZXMsIGJvdGggbXV0YWJsZSBhbmQgaW1tdXRhYmxlLiBUaGUgImNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZSIgQUJDXG5pcyBwcm92aWRlZCB0byBtYWtlIGl0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlIG9wZXJhdGlvbnNcbm9uIGN1c3RvbSBzZXF1ZW5jZSB0eXBlcy5cblxuVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5LlxuSW4gdGhlIHRhYmxlLCAqcyogYW5kICp0KiBhcmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUsICpuKiwgKmkqLFxuKmoqIGFuZCAqayogYXJlIGludGVnZXJzIGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueVxudHlwZSBhbmQgdmFsdWUgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqLlxuXG5UaGUgImluIiBhbmQgIm5vdCBpbiIgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXRpZXMgYXMgdGhlXG5jb21wYXJpc29uIG9wZXJhdGlvbnMuIFRoZSAiKyIgKGNvbmNhdGVuYXRpb24pIGFuZCAiKiIgKHJlcGV0aXRpb24pXG5vcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhlIGNvcnJlc3BvbmRpbmcgbnVtZXJpY1xub3BlcmF0aW9ucy5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09K1xufCAieCBpbiBzIiAgICAgICAgICAgICAgICAgICB8ICJUcnVlIiBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICAgIHwgKDEpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXF1YWwgdG8gKngqLCBlbHNlICJGYWxzZSIgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAieCBub3QgaW4gcyIgICAgICAgICAgICAgICB8ICJGYWxzZSIgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgIHwgKDEpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXF1YWwgdG8gKngqLCBlbHNlICJUcnVlIiAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicyArIHQiICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb25jYXRlbmF0aW9uIG9mICpzKiBhbmQgKnQqIHwgKDYpKDcpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMgKiBuIiBvciAibiAqIHMiICAgICAgICAgfCBlcXVpdmFsZW50IHRvIGFkZGluZyAqcyogdG8gICAgICB8ICgyKSg3KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0c2VsZiAqbiogdGltZXMgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInNbaV0iICAgICAgICAgICAgICAgICAgICAgfCAqaSp0aCBpdGVtIG9mICpzKiwgb3JpZ2luIDAgICAgICB8ICgzKSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzW2k6al0iICAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNCkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAic1tpOmo6a10iICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDUpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2l0aCBzdGVwICprKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAibGVuKHMpIiAgICAgICAgICAgICAgICAgICB8IGxlbmd0aCBvZiAqcyogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgIm1pbihzKSIgICAgICAgICAgICAgICAgICAgfCBzbWFsbGVzdCBpdGVtIG9mICpzKiAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJtYXgocykiICAgICAgICAgICAgICAgICAgIHwgbGFyZ2VzdCBpdGVtIG9mICpzKiAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicy5pbmRleCh4WywgaVssIGpdXSkiICAgICB8IGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHwgKDgpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqIGluICpzKiAoYXQgb3IgYWZ0ZXIgaW5kZXggICAgfCAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqaSogYW5kIGJlZm9yZSBpbmRleCAqaiopICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzLmNvdW50KHgpIiAgICAgICAgICAgICAgIHwgdG90YWwgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mICAgfCAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogaW4gKnMqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG5cblNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlIGFsc28gc3VwcG9ydCBjb21wYXJpc29ucy4gIEluIHBhcnRpY3VsYXIsXG50dXBsZXMgYW5kIGxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSBieSBjb21wYXJpbmdcbmNvcnJlc3BvbmRpbmcgZWxlbWVudHMuIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBldmVyeVxuZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbnR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiAgKEZvciBmdWxsIGRldGFpbHMgc2VlICpDb21wYXJpc29ucyogaW5cbnRoZSBsYW5ndWFnZSByZWZlcmVuY2UuKVxuXG5Ob3RlczpcblxuMS4gV2hpbGUgdGhlICJpbiIgYW5kICJub3QgaW4iIG9wZXJhdGlvbnMgYXJlIHVzZWQgb25seSBmb3Igc2ltcGxlXG4gICBjb250YWlubWVudCB0ZXN0aW5nIGluIHRoZSBnZW5lcmFsIGNhc2UsIHNvbWUgc3BlY2lhbGlzZWQgc2VxdWVuY2VzXG4gICAoc3VjaCBhcyAic3RyIiwgImJ5dGVzIiBhbmQgImJ5dGVhcnJheSIpIGFsc28gdXNlIHRoZW0gZm9yXG4gICBzdWJzZXF1ZW5jZSB0ZXN0aW5nOlxuXG4gICAgICA+Pj4gImdnIiBpbiAiZWdncyJcbiAgICAgIFRydWVcblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gIjAiIGFyZSB0cmVhdGVkIGFzICIwIiAod2hpY2ggeWllbGRzIGFuXG4gICBlbXB0eSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzKikuICBOb3RlIHRoYXQgaXRlbXMgaW4gdGhlXG4gICBzZXF1ZW5jZSAqcyogYXJlIG5vdCBjb3BpZWQ7IHRoZXkgYXJlIHJlZmVyZW5jZWQgbXVsdGlwbGUgdGltZXMuXG4gICBUaGlzIG9mdGVuIGhhdW50cyBuZXcgUHl0aG9uIHByb2dyYW1tZXJzOyBjb25zaWRlcjpcblxuICAgICAgPj4+IGxpc3RzID0gW1tdXSAqIDNcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1tdLCBbXSwgW11dXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFszXSwgWzNdXVxuXG4gICBXaGF0IGhhcyBoYXBwZW5lZCBpcyB0aGF0ICJbW11dIiBpcyBhIG9uZS1lbGVtZW50IGxpc3QgY29udGFpbmluZ1xuICAgYW4gZW1wdHkgbGlzdCwgc28gYWxsIHRocmVlIGVsZW1lbnRzIG9mICJbW11dICogMyIgYXJlIHJlZmVyZW5jZXNcbiAgIHRvIHRoaXMgc2luZ2xlIGVtcHR5IGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZlxuICAgImxpc3RzIiBtb2RpZmllcyB0aGlzIHNpbmdsZSBsaXN0LiBZb3UgY2FuIGNyZWF0ZSBhIGxpc3Qgb2ZcbiAgIGRpZmZlcmVudCBsaXN0cyB0aGlzIHdheTpcblxuICAgICAgPj4+IGxpc3RzID0gW1tdIGZvciBpIGluIHJhbmdlKDMpXVxuICAgICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgICAgPj4+IGxpc3RzWzFdLmFwcGVuZCg1KVxuICAgICAgPj4+IGxpc3RzWzJdLmFwcGVuZCg3KVxuICAgICAgPj4+IGxpc3RzXG4gICAgICBbWzNdLCBbNV0sIFs3XV1cblxuICAgRnVydGhlciBleHBsYW5hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIEZBUSBlbnRyeSAqSG93IGRvIEkgY3JlYXRlXG4gICBhIG11bHRpZGltZW5zaW9uYWwgbGlzdD8qLlxuXG4zLiBJZiAqaSogb3IgKmoqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZlxuICAgdGhlIHN0cmluZzogImxlbihzKSArIGkiIG9yICJsZW4ocykgKyBqIiBpcyBzdWJzdGl0dXRlZC4gIEJ1dCBub3RlXG4gICB0aGF0ICItMCIgaXMgc3RpbGwgIjAiLlxuXG40LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyBkZWZpbmVkIGFzIHRoZSBzZXF1ZW5jZSBvZlxuICAgaXRlbXMgd2l0aCBpbmRleCAqayogc3VjaCB0aGF0ICJpIDw9IGsgPCBqIi4gIElmICppKiBvciAqaiogaXNcbiAgIGdyZWF0ZXIgdGhhbiAibGVuKHMpIiwgdXNlICJsZW4ocykiLiAgSWYgKmkqIGlzIG9taXR0ZWQgb3IgIk5vbmUiLFxuICAgdXNlICIwIi4gIElmICpqKiBpcyBvbWl0dGVkIG9yICJOb25lIiwgdXNlICJsZW4ocykiLiAgSWYgKmkqIGlzXG4gICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gKmoqLCB0aGUgc2xpY2UgaXMgZW1wdHkuXG5cbjUuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIHdpdGggc3RlcCAqayogaXMgZGVmaW5lZCBhcyB0aGVcbiAgIHNlcXVlbmNlIG9mIGl0ZW1zIHdpdGggaW5kZXggICJ4ID0gaSArIG4qayIgc3VjaCB0aGF0ICIwIDw9IG4gPFxuICAgKGotaSkvayIuICBJbiBvdGhlciB3b3JkcywgdGhlIGluZGljZXMgYXJlICJpIiwgImkrayIsICJpKzIqayIsXG4gICAiaSszKmsiIGFuZCBzbyBvbiwgc3RvcHBpbmcgd2hlbiAqaiogaXMgcmVhY2hlZCAoYnV0IG5ldmVyXG4gICBpbmNsdWRpbmcgKmoqKS4gIElmICppKiBvciAqaiogaXMgZ3JlYXRlciB0aGFuICJsZW4ocykiLCB1c2VcbiAgICJsZW4ocykiLiAgSWYgKmkqIG9yICpqKiBhcmUgb21pdHRlZCBvciAiTm9uZSIsIHRoZXkgYmVjb21lICJlbmQiXG4gICB2YWx1ZXMgKHdoaWNoIGVuZCBkZXBlbmRzIG9uIHRoZSBzaWduIG9mICprKikuICBOb3RlLCAqayogY2Fubm90IGJlXG4gICB6ZXJvLiBJZiAqayogaXMgIk5vbmUiLCBpdCBpcyB0cmVhdGVkIGxpa2UgIjEiLlxuXG42LiBDb25jYXRlbmF0aW5nIGltbXV0YWJsZSBzZXF1ZW5jZXMgYWx3YXlzIHJlc3VsdHMgaW4gYSBuZXdcbiAgIG9iamVjdC4gVGhpcyBtZWFucyB0aGF0IGJ1aWxkaW5nIHVwIGEgc2VxdWVuY2UgYnkgcmVwZWF0ZWRcbiAgIGNvbmNhdGVuYXRpb24gd2lsbCBoYXZlIGEgcXVhZHJhdGljIHJ1bnRpbWUgY29zdCBpbiB0aGUgdG90YWxcbiAgIHNlcXVlbmNlIGxlbmd0aC4gVG8gZ2V0IGEgbGluZWFyIHJ1bnRpbWUgY29zdCwgeW91IG11c3Qgc3dpdGNoIHRvXG4gICBvbmUgb2YgdGhlIGFsdGVybmF0aXZlcyBiZWxvdzpcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nICJzdHIiIG9iamVjdHMsIHlvdSBjYW4gYnVpbGQgYSBsaXN0IGFuZCB1c2VcbiAgICAgInN0ci5qb2luKCkiIGF0IHRoZSBlbmQgb3IgZWxzZSB3cml0ZSB0byBhbiAiaW8uU3RyaW5nSU8iXG4gICAgIGluc3RhbmNlIGFuZCByZXRyaWV2ZSBpdHMgdmFsdWUgd2hlbiBjb21wbGV0ZVxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgImJ5dGVzIiBvYmplY3RzLCB5b3UgY2FuIHNpbWlsYXJseSB1c2VcbiAgICAgImJ5dGVzLmpvaW4oKSIgb3IgImlvLkJ5dGVzSU8iLCBvciB5b3UgY2FuIGRvIGluLXBsYWNlXG4gICAgIGNvbmNhdGVuYXRpb24gd2l0aCBhICJieXRlYXJyYXkiIG9iamVjdC4gICJieXRlYXJyYXkiIG9iamVjdHMgYXJlXG4gICAgIG11dGFibGUgYW5kIGhhdmUgYW4gZWZmaWNpZW50IG92ZXJhbGxvY2F0aW9uIG1lY2hhbmlzbVxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgInR1cGxlIiBvYmplY3RzLCBleHRlbmQgYSAibGlzdCIgaW5zdGVhZFxuXG4gICAqIGZvciBvdGhlciB0eXBlcywgaW52ZXN0aWdhdGUgdGhlIHJlbGV2YW50IGNsYXNzIGRvY3VtZW50YXRpb25cblxuNy4gU29tZSBzZXF1ZW5jZSB0eXBlcyAoc3VjaCBhcyAicmFuZ2UiKSBvbmx5IHN1cHBvcnQgaXRlbVxuICAgc2VxdWVuY2VzIHRoYXQgZm9sbG93IHNwZWNpZmljIHBhdHRlcm5zLCBhbmQgaGVuY2UgZG9uXCd0IHN1cHBvcnRcbiAgIHNlcXVlbmNlIGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi5cblxuOC4gImluZGV4IiByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouIFdoZW5cbiAgIHN1cHBvcnRlZCwgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBpbmRleCBtZXRob2QgYWxsb3dcbiAgIGVmZmljaWVudCBzZWFyY2hpbmcgb2Ygc3Vic2VjdGlvbnMgb2YgdGhlIHNlcXVlbmNlLiBQYXNzaW5nIHRoZVxuICAgZXh0cmEgYXJndW1lbnRzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byB1c2luZyAic1tpOmpdLmluZGV4KHgpIixcbiAgIG9ubHkgd2l0aG91dCBjb3B5aW5nIGFueSBkYXRhIGFuZCB3aXRoIHRoZSByZXR1cm5lZCBpbmRleCBiZWluZ1xuICAgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSByYXRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlXG4gICBzbGljZS5cblxuXG5JbW11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb25seSBvcGVyYXRpb24gdGhhdCBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXMgZ2VuZXJhbGx5IGltcGxlbWVudFxudGhhdCBpcyBub3QgYWxzbyBpbXBsZW1lbnRlZCBieSBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGlzIHN1cHBvcnQgZm9yXG50aGUgImhhc2goKSIgYnVpbHQtaW4uXG5cblRoaXMgc3VwcG9ydCBhbGxvd3MgaW1tdXRhYmxlIHNlcXVlbmNlcywgc3VjaCBhcyAidHVwbGUiIGluc3RhbmNlcywgdG9cbmJlIHVzZWQgYXMgImRpY3QiIGtleXMgYW5kIHN0b3JlZCBpbiAic2V0IiBhbmQgImZyb3plbnNldCIgaW5zdGFuY2VzLlxuXG5BdHRlbXB0aW5nIHRvIGhhc2ggYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHRoYXQgY29udGFpbnMgdW5oYXNoYWJsZVxudmFsdWVzIHdpbGwgcmVzdWx0IGluICJUeXBlRXJyb3IiLlxuXG5cbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcy4gVGhlICJjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZVNlcXVlbmNlIiBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCAiYnl0ZWFycmF5IiBvbmx5XG5hY2NlcHRzIGludGVnZXJzIHRoYXQgbWVldCB0aGUgdmFsdWUgcmVzdHJpY3Rpb24gIjAgPD0geCA8PSAyNTUiKS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCAic1tpXSA9IHgiICAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAic1tpOmpdID0gdCIgICAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJkZWwgc1tpOmpdIiAgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgInNbaTpqXSA9IFtdIiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAic1tpOmo6a10gPSB0IiAgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgInNbaTpqOmtdIiBhcmUgICB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiZGVsIHNbaTpqOmtdIiAgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJzW2k6ajprXSIgZnJvbSB0aGUgbGlzdCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5hcHBlbmQoeCkiICAgICAgICAgICAgICAgICAgfCBhcHBlbmRzICp4KiB0byB0aGUgZW5kIG9mIHRoZSAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcXVlbmNlIChzYW1lIGFzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbbGVuKHMpOmxlbihzKV0gPSBbeF0iKSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNsZWFyKCkiICAgICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gInMiIChzYW1lIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXMgImRlbCBzWzpdIikgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNvcHkoKSIgICAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgInMiICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgInNbOl0iKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmV4dGVuZCh0KSIgb3IgInMgKz0gdCIgICAgICB8IGV4dGVuZHMgKnMqIHdpdGggdGhlIGNvbnRlbnRzIG9mIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKnQqIChmb3IgdGhlIG1vc3QgcGFydCB0aGUgc2FtZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcyAic1tsZW4ocyk6bGVuKHMpXSA9IHQiKSAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMgKj0gbiIgICAgICAgICAgICAgICAgICAgICAgIHwgdXBkYXRlcyAqcyogd2l0aCBpdHMgY29udGVudHMgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBlYXRlZCAqbiogdGltZXMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuaW5zZXJ0KGksIHgpIiAgICAgICAgICAgICAgIHwgaW5zZXJ0cyAqeCogaW50byAqcyogYXQgdGhlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleCBnaXZlbiBieSAqaSogKHNhbWUgYXMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJzW2k6aV0gPSBbeF0iKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5wb3AoW2ldKSIgICAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsc28gcmVtb3ZlcyBpdCBmcm9tICpzKiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZW1vdmUoeCkiICAgICAgICAgICAgICAgICAgfCByZW1vdmUgdGhlIGZpcnN0IGl0ZW0gZnJvbSAqcyogICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoZXJlICJzW2ldID09IHgiICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZXZlcnNlKCkiICAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byAiLTEiLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuICJyZW1vdmUiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlICJyZXZlcnNlKCkiIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yXG4gICBlY29ub215IG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnNcbiAgIHRoYXQgaXQgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWRcbiAgIHNlcXVlbmNlLlxuXG41LiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyAiZGljdCIgYW5kICJzZXQiKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6ICJjbGVhcigpIiBhbmQgImNvcHkoKSIgbWV0aG9kcy5cblxuNi4gVGhlIHZhbHVlICpuKiBpcyBhbiBpbnRlZ2VyLCBvciBhbiBvYmplY3QgaW1wbGVtZW50aW5nXG4gICAiX19pbmRleF9fKCkiLiAgWmVybyBhbmQgbmVnYXRpdmUgdmFsdWVzIG9mICpuKiBjbGVhciB0aGUgc2VxdWVuY2UuXG4gICBJdGVtcyBpbiB0aGUgc2VxdWVuY2UgYXJlIG5vdCBjb3BpZWQ7IHRoZXkgYXJlIHJlZmVyZW5jZWQgbXVsdGlwbGVcbiAgIHRpbWVzLCBhcyBleHBsYWluZWQgZm9yICJzICogbiIgdW5kZXIgKkNvbW1vbiBTZXF1ZW5jZSBPcGVyYXRpb25zKi5cblxuXG5MaXN0c1xuPT09PT1cblxuTGlzdHMgYXJlIG11dGFibGUgc2VxdWVuY2VzLCB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBjb2xsZWN0aW9ucyBvZlxuaG9tb2dlbmVvdXMgaXRlbXMgKHdoZXJlIHRoZSBwcmVjaXNlIGRlZ3JlZSBvZiBzaW1pbGFyaXR5IHdpbGwgdmFyeSBieVxuYXBwbGljYXRpb24pLlxuXG5jbGFzcyBjbGFzcyBsaXN0KFtpdGVyYWJsZV0pXG5cbiAgIExpc3RzIG1heSBiZSBjb25zdHJ1Y3RlZCBpbiBzZXZlcmFsIHdheXM6XG5cbiAgICogVXNpbmcgYSBwYWlyIG9mIHNxdWFyZSBicmFja2V0cyB0byBkZW5vdGUgdGhlIGVtcHR5IGxpc3Q6ICJbXSJcblxuICAgKiBVc2luZyBzcXVhcmUgYnJhY2tldHMsIHNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6ICJbYV0iLFxuICAgICAiW2EsIGIsIGNdIlxuXG4gICAqIFVzaW5nIGEgbGlzdCBjb21wcmVoZW5zaW9uOiAiW3ggZm9yIHggaW4gaXRlcmFibGVdIlxuXG4gICAqIFVzaW5nIHRoZSB0eXBlIGNvbnN0cnVjdG9yOiAibGlzdCgpIiBvciAibGlzdChpdGVyYWJsZSkiXG5cbiAgIFRoZSBjb25zdHJ1Y3RvciBidWlsZHMgYSBsaXN0IHdob3NlIGl0ZW1zIGFyZSB0aGUgc2FtZSBhbmQgaW4gdGhlXG4gICBzYW1lIG9yZGVyIGFzICppdGVyYWJsZSpcJ3MgaXRlbXMuICAqaXRlcmFibGUqIG1heSBiZSBlaXRoZXIgYVxuICAgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHMgaXRlcmF0aW9uLCBvciBhbiBpdGVyYXRvclxuICAgb2JqZWN0LiAgSWYgKml0ZXJhYmxlKiBpcyBhbHJlYWR5IGEgbGlzdCwgYSBjb3B5IGlzIG1hZGUgYW5kXG4gICByZXR1cm5lZCwgc2ltaWxhciB0byAiaXRlcmFibGVbOl0iLiBGb3IgZXhhbXBsZSwgImxpc3QoXCdhYmNcJykiXG4gICByZXR1cm5zICJbXCdhXCcsIFwnYlwnLCBcJ2NcJ10iIGFuZCAibGlzdCggKDEsIDIsIDMpICkiIHJldHVybnMgIlsxLCAyLFxuICAgM10iLiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXcgZW1wdHlcbiAgIGxpc3QsICJbXSIuXG5cbiAgIE1hbnkgb3RoZXIgb3BlcmF0aW9ucyBhbHNvIHByb2R1Y2UgbGlzdHMsIGluY2x1ZGluZyB0aGUgInNvcnRlZCgpIlxuICAgYnVpbHQtaW4uXG5cbiAgIExpc3RzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIGFuZCAqbXV0YWJsZSogc2VxdWVuY2VcbiAgIG9wZXJhdGlvbnMuIExpc3RzIGFsc28gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbWV0aG9kOlxuXG4gICBzb3J0KCosIGtleT1Ob25lLCByZXZlcnNlPU5vbmUpXG5cbiAgICAgIFRoaXMgbWV0aG9kIHNvcnRzIHRoZSBsaXN0IGluIHBsYWNlLCB1c2luZyBvbmx5ICI8IiBjb21wYXJpc29uc1xuICAgICAgYmV0d2VlbiBpdGVtcy4gRXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgLSBpZiBhbnkgY29tcGFyaXNvblxuICAgICAgb3BlcmF0aW9ucyBmYWlsLCB0aGUgZW50aXJlIHNvcnQgb3BlcmF0aW9uIHdpbGwgZmFpbCAoYW5kIHRoZVxuICAgICAgbGlzdCB3aWxsIGxpa2VseSBiZSBsZWZ0IGluIGEgcGFydGlhbGx5IG1vZGlmaWVkIHN0YXRlKS5cblxuICAgICAgInNvcnQoKSIgYWNjZXB0cyB0d28gYXJndW1lbnRzIHRoYXQgY2FuIG9ubHkgYmUgcGFzc2VkIGJ5XG4gICAgICBrZXl3b3JkICgqa2V5d29yZC1vbmx5IGFyZ3VtZW50cyopOlxuXG4gICAgICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvXG4gICAgICBleHRyYWN0IGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudCAoZm9yIGV4YW1wbGUsXG4gICAgICAia2V5PXN0ci5sb3dlciIpLiBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBpdGVtIGluIHRoZSBsaXN0XG4gICAgICBpcyBjYWxjdWxhdGVkIG9uY2UgYW5kIHRoZW4gdXNlZCBmb3IgdGhlIGVudGlyZSBzb3J0aW5nIHByb2Nlc3MuXG4gICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAiTm9uZSIgbWVhbnMgdGhhdCBsaXN0IGl0ZW1zIGFyZSBzb3J0ZWRcbiAgICAgIGRpcmVjdGx5IHdpdGhvdXQgY2FsY3VsYXRpbmcgYSBzZXBhcmF0ZSBrZXkgdmFsdWUuXG5cbiAgICAgIFRoZSAiZnVuY3Rvb2xzLmNtcF90b19rZXkoKSIgdXRpbGl0eSBpcyBhdmFpbGFibGUgdG8gY29udmVydCBhXG4gICAgICAyLnggc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KiBmdW5jdGlvbi5cblxuICAgICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byAiVHJ1ZSIsIHRoZW4gdGhlIGxpc3RcbiAgICAgIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuXG5cbiAgICAgIFRoaXMgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3IgZWNvbm9teSBvZiBzcGFjZVxuICAgICAgd2hlbiBzb3J0aW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdCBvcGVyYXRlc1xuICAgICAgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgc29ydGVkIHNlcXVlbmNlICh1c2VcbiAgICAgICJzb3J0ZWQoKSIgdG8gZXhwbGljaXRseSByZXF1ZXN0IGEgbmV3IHNvcnRlZCBsaXN0IGluc3RhbmNlKS5cblxuICAgICAgVGhlICJzb3J0KCkiIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZS4gIEEgc29ydCBpc1xuICAgICAgc3RhYmxlIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGUgcmVsYXRpdmUgb3JkZXIgb2ZcbiAgICAgIGVsZW1lbnRzIHRoYXQgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsIGZvciBzb3J0aW5nIGluXG4gICAgICBtdWx0aXBsZSBwYXNzZXMgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsIHRoZW4gYnkgc2FsYXJ5XG4gICAgICBncmFkZSkuXG5cbiAgICAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogV2hpbGUgYSBsaXN0IGlzIGJlaW5nIHNvcnRlZCxcbiAgICAgIHRoZSBlZmZlY3Qgb2YgYXR0ZW1wdGluZyB0byBtdXRhdGUsIG9yIGV2ZW4gaW5zcGVjdCwgdGhlIGxpc3QgaXNcbiAgICAgIHVuZGVmaW5lZC4gIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiBtYWtlcyB0aGUgbGlzdCBhcHBlYXJcbiAgICAgIGVtcHR5IGZvciB0aGUgZHVyYXRpb24sIGFuZCByYWlzZXMgIlZhbHVlRXJyb3IiIGlmIGl0IGNhbiBkZXRlY3RcbiAgICAgIHRoYXQgdGhlIGxpc3QgaGFzIGJlZW4gbXV0YXRlZCBkdXJpbmcgYSBzb3J0LlxuXG5cblR1cGxlc1xuPT09PT09XG5cblR1cGxlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlcywgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgY29sbGVjdGlvbnMgb2ZcbmhldGVyb2dlbmVvdXMgZGF0YSAoc3VjaCBhcyB0aGUgMi10dXBsZXMgcHJvZHVjZWQgYnkgdGhlICJlbnVtZXJhdGUoKSJcbmJ1aWx0LWluKS4gVHVwbGVzIGFyZSBhbHNvIHVzZWQgZm9yIGNhc2VzIHdoZXJlIGFuIGltbXV0YWJsZSBzZXF1ZW5jZVxub2YgaG9tb2dlbmVvdXMgZGF0YSBpcyBuZWVkZWQgKHN1Y2ggYXMgYWxsb3dpbmcgc3RvcmFnZSBpbiBhICJzZXQiIG9yXG4iZGljdCIgaW5zdGFuY2UpLlxuXG5jbGFzcyBjbGFzcyB0dXBsZShbaXRlcmFibGVdKVxuXG4gICBUdXBsZXMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIGEgbnVtYmVyIG9mIHdheXM6XG5cbiAgICogVXNpbmcgYSBwYWlyIG9mIHBhcmVudGhlc2VzIHRvIGRlbm90ZSB0aGUgZW1wdHkgdHVwbGU6ICIoKSJcblxuICAgKiBVc2luZyBhIHRyYWlsaW5nIGNvbW1hIGZvciBhIHNpbmdsZXRvbiB0dXBsZTogImEsIiBvciAiKGEsKSJcblxuICAgKiBTZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiAiYSwgYiwgYyIgb3IgIihhLCBiLCBjKSJcblxuICAgKiBVc2luZyB0aGUgInR1cGxlKCkiIGJ1aWx0LWluOiAidHVwbGUoKSIgb3IgInR1cGxlKGl0ZXJhYmxlKSJcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIHR1cGxlIHdob3NlIGl0ZW1zIGFyZSB0aGUgc2FtZSBhbmQgaW4gdGhlXG4gICBzYW1lIG9yZGVyIGFzICppdGVyYWJsZSpcJ3MgaXRlbXMuICAqaXRlcmFibGUqIG1heSBiZSBlaXRoZXIgYVxuICAgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHMgaXRlcmF0aW9uLCBvciBhbiBpdGVyYXRvclxuICAgb2JqZWN0LiAgSWYgKml0ZXJhYmxlKiBpcyBhbHJlYWR5IGEgdHVwbGUsIGl0IGlzIHJldHVybmVkXG4gICB1bmNoYW5nZWQuIEZvciBleGFtcGxlLCAidHVwbGUoXCdhYmNcJykiIHJldHVybnMgIihcJ2FcJywgXCdiXCcsIFwnY1wnKSJcbiAgIGFuZCAidHVwbGUoIFsxLCAyLCAzXSApIiByZXR1cm5zICIoMSwgMiwgMykiLiBJZiBubyBhcmd1bWVudCBpc1xuICAgZ2l2ZW4sIHRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgbmV3IGVtcHR5IHR1cGxlLCAiKCkiLlxuXG4gICBOb3RlIHRoYXQgaXQgaXMgYWN0dWFsbHkgdGhlIGNvbW1hIHdoaWNoIG1ha2VzIGEgdHVwbGUsIG5vdCB0aGVcbiAgIHBhcmVudGhlc2VzLiBUaGUgcGFyZW50aGVzZXMgYXJlIG9wdGlvbmFsLCBleGNlcHQgaW4gdGhlIGVtcHR5XG4gICB0dXBsZSBjYXNlLCBvciB3aGVuIHRoZXkgYXJlIG5lZWRlZCB0byBhdm9pZCBzeW50YWN0aWMgYW1iaWd1aXR5LlxuICAgRm9yIGV4YW1wbGUsICJmKGEsIGIsIGMpIiBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCB0aHJlZSBhcmd1bWVudHMsXG4gICB3aGlsZSAiZigoYSwgYiwgYykpIiBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCBhIDMtdHVwbGUgYXMgdGhlIHNvbGVcbiAgIGFyZ3VtZW50LlxuXG4gICBUdXBsZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucy5cblxuRm9yIGhldGVyb2dlbmVvdXMgY29sbGVjdGlvbnMgb2YgZGF0YSB3aGVyZSBhY2Nlc3MgYnkgbmFtZSBpcyBjbGVhcmVyXG50aGFuIGFjY2VzcyBieSBpbmRleCwgImNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoKSIgbWF5IGJlIGEgbW9yZVxuYXBwcm9wcmlhdGUgY2hvaWNlIHRoYW4gYSBzaW1wbGUgdHVwbGUgb2JqZWN0LlxuXG5cblJhbmdlc1xuPT09PT09XG5cblRoZSAicmFuZ2UiIHR5cGUgcmVwcmVzZW50cyBhbiBpbW11dGFibGUgc2VxdWVuY2Ugb2YgbnVtYmVycyBhbmQgaXNcbmNvbW1vbmx5IHVzZWQgZm9yIGxvb3BpbmcgYSBzcGVjaWZpYyBudW1iZXIgb2YgdGltZXMgaW4gImZvciIgbG9vcHMuXG5cbmNsYXNzIGNsYXNzIHJhbmdlKHN0b3ApXG5jbGFzcyBjbGFzcyByYW5nZShzdGFydCwgc3RvcFssIHN0ZXBdKVxuXG4gICBUaGUgYXJndW1lbnRzIHRvIHRoZSByYW5nZSBjb25zdHJ1Y3RvciBtdXN0IGJlIGludGVnZXJzIChlaXRoZXJcbiAgIGJ1aWx0LWluICJpbnQiIG9yIGFueSBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSAiX19pbmRleF9fIlxuICAgc3BlY2lhbCBtZXRob2QpLiAgSWYgdGhlICpzdGVwKiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0b1xuICAgIjEiLiBJZiB0aGUgKnN0YXJ0KiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAiMCIuIElmXG4gICAqc3RlcCogaXMgemVybywgIlZhbHVlRXJyb3IiIGlzIHJhaXNlZC5cblxuICAgRm9yIGEgcG9zaXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgYSByYW5nZSAiciIgYXJlIGRldGVybWluZWRcbiAgIGJ5IHRoZSBmb3JtdWxhICJyW2ldID0gc3RhcnQgKyBzdGVwKmkiIHdoZXJlICJpID49IDAiIGFuZCAicltpXSA8XG4gICBzdG9wIi5cblxuICAgRm9yIGEgbmVnYXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgdGhlIHJhbmdlIGFyZSBzdGlsbFxuICAgZGV0ZXJtaW5lZCBieSB0aGUgZm9ybXVsYSAicltpXSA9IHN0YXJ0ICsgc3RlcCppIiwgYnV0IHRoZVxuICAgY29uc3RyYWludHMgYXJlICJpID49IDAiIGFuZCAicltpXSA+IHN0b3AiLlxuXG4gICBBIHJhbmdlIG9iamVjdCB3aWxsIGJlIGVtcHR5IGlmICJyWzBdIiBkb2VzIG5vdCBtZWV0IHRoZSB2YWx1ZVxuICAgY29uc3RyYWludC4gUmFuZ2VzIGRvIHN1cHBvcnQgbmVnYXRpdmUgaW5kaWNlcywgYnV0IHRoZXNlIGFyZVxuICAgaW50ZXJwcmV0ZWQgYXMgaW5kZXhpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSBkZXRlcm1pbmVkIGJ5XG4gICB0aGUgcG9zaXRpdmUgaW5kaWNlcy5cblxuICAgUmFuZ2VzIGNvbnRhaW5pbmcgYWJzb2x1dGUgdmFsdWVzIGxhcmdlciB0aGFuICJzeXMubWF4c2l6ZSIgYXJlXG4gICBwZXJtaXR0ZWQgYnV0IHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgImxlbigpIikgbWF5IHJhaXNlXG4gICAiT3ZlcmZsb3dFcnJvciIuXG5cbiAgIFJhbmdlIGV4YW1wbGVzOlxuXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxMCkpXG4gICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEsIDExKSlcbiAgICAgIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIDMwLCA1KSlcbiAgICAgIFswLCA1LCAxMCwgMTUsIDIwLCAyNV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIDEwLCAzKSlcbiAgICAgIFswLCAzLCA2LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgLTEwLCAtMSkpXG4gICAgICBbMCwgLTEsIC0yLCAtMywgLTQsIC01LCAtNiwgLTcsIC04LCAtOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDApKVxuICAgICAgW11cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEsIDApKVxuICAgICAgW11cblxuICAgUmFuZ2VzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMgZXhjZXB0XG4gICBjb25jYXRlbmF0aW9uIGFuZCByZXBldGl0aW9uIChkdWUgdG8gdGhlIGZhY3QgdGhhdCByYW5nZSBvYmplY3RzXG4gICBjYW4gb25seSByZXByZXNlbnQgc2VxdWVuY2VzIHRoYXQgZm9sbG93IGEgc3RyaWN0IHBhdHRlcm4gYW5kXG4gICByZXBldGl0aW9uIGFuZCBjb25jYXRlbmF0aW9uIHdpbGwgdXN1YWxseSB2aW9sYXRlIHRoYXQgcGF0dGVybikuXG5cblRoZSBhZHZhbnRhZ2Ugb2YgdGhlICJyYW5nZSIgdHlwZSBvdmVyIGEgcmVndWxhciAibGlzdCIgb3IgInR1cGxlIiBpc1xudGhhdCBhICJyYW5nZSIgb2JqZWN0IHdpbGwgYWx3YXlzIHRha2UgdGhlIHNhbWUgKHNtYWxsKSBhbW91bnQgb2Zcbm1lbW9yeSwgbm8gbWF0dGVyIHRoZSBzaXplIG9mIHRoZSByYW5nZSBpdCByZXByZXNlbnRzIChhcyBpdCBvbmx5XG5zdG9yZXMgdGhlICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiIHZhbHVlcywgY2FsY3VsYXRpbmcgaW5kaXZpZHVhbFxuaXRlbXMgYW5kIHN1YnJhbmdlcyBhcyBuZWVkZWQpLlxuXG5SYW5nZSBvYmplY3RzIGltcGxlbWVudCB0aGUgImNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZSIgQUJDLCBhbmRcbnByb3ZpZGUgZmVhdHVyZXMgc3VjaCBhcyBjb250YWlubWVudCB0ZXN0cywgZWxlbWVudCBpbmRleCBsb29rdXAsXG5zbGljaW5nIGFuZCBzdXBwb3J0IGZvciBuZWdhdGl2ZSBpbmRpY2VzIChzZWUgKlNlcXVlbmNlIFR5cGVzIC0tLVxubGlzdCwgdHVwbGUsIHJhbmdlKik6XG5cbj4+PiByID0gcmFuZ2UoMCwgMjAsIDIpXG4+Pj4gclxucmFuZ2UoMCwgMjAsIDIpXG4+Pj4gMTEgaW4gclxuRmFsc2Vcbj4+PiAxMCBpbiByXG5UcnVlXG4+Pj4gci5pbmRleCgxMClcbjVcbj4+PiByWzVdXG4xMFxuPj4+IHJbOjVdXG5yYW5nZSgwLCAxMCwgMilcbj4+PiByWy0xXVxuMThcblxuVGVzdGluZyByYW5nZSBvYmplY3RzIGZvciBlcXVhbGl0eSB3aXRoICI9PSIgYW5kICIhPSIgY29tcGFyZXMgdGhlbSBhc1xuc2VxdWVuY2VzLiAgVGhhdCBpcywgdHdvIHJhbmdlIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1YWwgaWYgdGhleVxucmVwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcy4gIChOb3RlIHRoYXQgdHdvIHJhbmdlIG9iamVjdHNcbnRoYXQgY29tcGFyZSBlcXVhbCBtaWdodCBoYXZlIGRpZmZlcmVudCAic3RhcnQiLCAic3RvcCIgYW5kICJzdGVwIlxuYXR0cmlidXRlcywgZm9yIGV4YW1wbGUgInJhbmdlKDApID09IHJhbmdlKDIsIDEsIDMpIiBvciAicmFuZ2UoMCwgMyxcbjIpID09IHJhbmdlKDAsIDQsIDIpIi4pXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IEltcGxlbWVudCB0aGUgU2VxdWVuY2UgQUJDLiBTdXBwb3J0IHNsaWNpbmdcbmFuZCBuZWdhdGl2ZSBpbmRpY2VzLiBUZXN0ICJpbnQiIG9iamVjdHMgZm9yIG1lbWJlcnNoaXAgaW4gY29uc3RhbnRcbnRpbWUgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgaXRlbXMuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IERlZmluZSBcJz09XCcgYW5kIFwnIT1cJyB0byBjb21wYXJlIHJhbmdlIG9iamVjdHNcbmJhc2VkIG9uIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nXG5iYXNlZCBvbiBvYmplY3QgaWRlbnRpdHkpLlxuXG5OZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSAic3RhcnQiLCAic3RvcCIgYW5kICJzdGVwIiBhdHRyaWJ1dGVzLlxuJywKKyAndHlwZXNzZXEnOiB1J1xuU2VxdWVuY2UgVHlwZXMgLS0tICJsaXN0IiwgInR1cGxlIiwgInJhbmdlIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGVyZSBhcmUgdGhyZWUgYmFzaWMgc2VxdWVuY2UgdHlwZXM6IGxpc3RzLCB0dXBsZXMsIGFuZCByYW5nZVxub2JqZWN0cy4gQWRkaXRpb25hbCBzZXF1ZW5jZSB0eXBlcyB0YWlsb3JlZCBmb3IgcHJvY2Vzc2luZyBvZiAqYmluYXJ5XG5kYXRhKiBhbmQgKnRleHQgc3RyaW5ncyogYXJlIGRlc2NyaWJlZCBpbiBkZWRpY2F0ZWQgc2VjdGlvbnMuXG5cblxuQ29tbW9uIFNlcXVlbmNlIE9wZXJhdGlvbnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIHN1cHBvcnRlZCBieSBtb3N0IHNlcXVlbmNlXG50eXBlcywgYm90aCBtdXRhYmxlIGFuZCBpbW11dGFibGUuIFRoZSAiY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlIiBBQkNcbmlzIHByb3ZpZGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9uc1xub24gY3VzdG9tIHNlcXVlbmNlIHR5cGVzLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHkuXG5JbiB0aGUgdGFibGUsICpzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSwgKm4qLCAqaSosXG4qaiogYW5kICprKiBhcmUgaW50ZWdlcnMgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55XG50eXBlIGFuZCB2YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyouXG5cblRoZSAiaW4iIGFuZCAibm90IGluIiBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGVcbmNvbXBhcmlzb24gb3BlcmF0aW9ucy4gVGhlICIrIiAoY29uY2F0ZW5hdGlvbikgYW5kICIqIiAocmVwZXRpdGlvbilcbm9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgY29ycmVzcG9uZGluZyBudW1lcmljXG5vcGVyYXRpb25zLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58ICJ4IGluIHMiICAgICAgICAgICAgICAgICAgIHwgIlRydWUiIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgIkZhbHNlIiAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJ4IG5vdCBpbiBzIiAgICAgICAgICAgICAgIHwgIkZhbHNlIiBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgIlRydWUiICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzICsgdCIgICAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicyAqIG4iIG9yICJuICogcyIgICAgICAgICB8IGVxdWl2YWxlbnQgdG8gYWRkaW5nICpzKiB0byAgICAgIHwgKDIpKDcpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRzZWxmICpuKiB0aW1lcyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAic1tpXSIgICAgICAgICAgICAgICAgICAgICB8ICppKnRoIGl0ZW0gb2YgKnMqLCBvcmlnaW4gMCAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInNbaTpqXSIgICAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSIgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJsZW4ocykiICAgICAgICAgICAgICAgICAgIHwgbGVuZ3RoIG9mICpzKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAibWluKHMpIiAgICAgICAgICAgICAgICAgICB8IHNtYWxsZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgIm1heChzKSIgICAgICAgICAgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzLmluZGV4KHhbLCBpWywgal1dKSIgICAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgfCAoOCkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogaW4gKnMqIChhdCBvciBhZnRlciBpbmRleCAgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICppKiBhbmQgYmVmb3JlIGluZGV4ICpqKikgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMuY291bnQoeCkiICAgICAgICAgICAgICAgfCB0b3RhbCBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcblxuU2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiAgSW4gcGFydGljdWxhcixcbnR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IGNvbXBhcmluZ1xuY29ycmVzcG9uZGluZyBlbGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5XG5lbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxudHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpblxudGhlIGxhbmd1YWdlIHJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGlsZSB0aGUgImluIiBhbmQgIm5vdCBpbiIgb3BlcmF0aW9ucyBhcmUgdXNlZCBvbmx5IGZvciBzaW1wbGVcbiAgIGNvbnRhaW5tZW50IHRlc3RpbmcgaW4gdGhlIGdlbmVyYWwgY2FzZSwgc29tZSBzcGVjaWFsaXNlZCBzZXF1ZW5jZXNcbiAgIChzdWNoIGFzICJzdHIiLCAiYnl0ZXMiIGFuZCAiYnl0ZWFycmF5IikgYWxzbyB1c2UgdGhlbSBmb3JcbiAgIHN1YnNlcXVlbmNlIHRlc3Rpbmc6XG5cbiAgICAgID4+PiAiZ2ciIGluICJlZ2dzIlxuICAgICAgVHJ1ZVxuXG4yLiBWYWx1ZXMgb2YgKm4qIGxlc3MgdGhhbiAiMCIgYXJlIHRyZWF0ZWQgYXMgIjAiICh3aGljaCB5aWVsZHMgYW5cbiAgIGVtcHR5IHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnMqKS4gIE5vdGUgdGhhdCBpdGVtcyBpbiB0aGVcbiAgIHNlcXVlbmNlICpzKiBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZCBtdWx0aXBsZSB0aW1lcy5cbiAgIFRoaXMgb2Z0ZW4gaGF1bnRzIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgICAgPj4+IGxpc3RzXG4gICAgICBbW10sIFtdLCBbXV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgIltbXV0iIGlzIGEgb25lLWVsZW1lbnQgbGlzdCBjb250YWluaW5nXG4gICBhbiBlbXB0eSBsaXN0LCBzbyBhbGwgdGhyZWUgZWxlbWVudHMgb2YgIltbXV0gKiAzIiBhcmUgcmVmZXJlbmNlc1xuICAgdG8gdGhpcyBzaW5nbGUgZW1wdHkgbGlzdC4gIE1vZGlmeWluZyBhbnkgb2YgdGhlIGVsZW1lbnRzIG9mXG4gICAibGlzdHMiIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICAgICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFs1XSwgWzddXVxuXG4gICBGdXJ0aGVyIGV4cGxhbmF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgRkFRIGVudHJ5ICpIb3cgZG8gSSBjcmVhdGVcbiAgIGEgbXVsdGlkaW1lbnNpb25hbCBsaXN0PyouXG5cbjMuIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mXG4gICB0aGUgc3RyaW5nOiAibGVuKHMpICsgaSIgb3IgImxlbihzKSArIGoiIGlzIHN1YnN0aXR1dGVkLiAgQnV0IG5vdGVcbiAgIHRoYXQgIi0wIiBpcyBzdGlsbCAiMCIuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgImkgPD0gayA8IGoiLiAgSWYgKmkqIG9yICpqKiBpc1xuICAgZ3JlYXRlciB0aGFuICJsZW4ocykiLCB1c2UgImxlbihzKSIuICBJZiAqaSogaXMgb21pdHRlZCBvciAiTm9uZSIsXG4gICB1c2UgIjAiLiAgSWYgKmoqIGlzIG9taXR0ZWQgb3IgIk5vbmUiLCB1c2UgImxlbihzKSIuICBJZiAqaSogaXNcbiAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAqaiosIHRoZSBzbGljZSBpcyBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgInggPSBpICsgbiprIiBzdWNoIHRoYXQgIjAgPD0gbiA8XG4gICAoai1pKS9rIi4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW5kaWNlcyBhcmUgImkiLCAiaStrIiwgImkrMiprIixcbiAgICJpKzMqayIgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXQgbmV2ZXJcbiAgIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gImxlbihzKSIsIHVzZVxuICAgImxlbihzKSIuICBJZiAqaSogb3IgKmoqIGFyZSBvbWl0dGVkIG9yICJOb25lIiwgdGhleSBiZWNvbWUgImVuZCJcbiAgIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKiBjYW5ub3QgYmVcbiAgIHplcm8uIElmICprKiBpcyAiTm9uZSIsIGl0IGlzIHRyZWF0ZWQgbGlrZSAiMSIuXG5cbjYuIENvbmNhdGVuYXRpbmcgaW1tdXRhYmxlIHNlcXVlbmNlcyBhbHdheXMgcmVzdWx0cyBpbiBhIG5ld1xuICAgb2JqZWN0LiBUaGlzIG1lYW5zIHRoYXQgYnVpbGRpbmcgdXAgYSBzZXF1ZW5jZSBieSByZXBlYXRlZFxuICAgY29uY2F0ZW5hdGlvbiB3aWxsIGhhdmUgYSBxdWFkcmF0aWMgcnVudGltZSBjb3N0IGluIHRoZSB0b3RhbFxuICAgc2VxdWVuY2UgbGVuZ3RoLiBUbyBnZXQgYSBsaW5lYXIgcnVudGltZSBjb3N0LCB5b3UgbXVzdCBzd2l0Y2ggdG9cbiAgIG9uZSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGJlbG93OlxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgInN0ciIgb2JqZWN0cywgeW91IGNhbiBidWlsZCBhIGxpc3QgYW5kIHVzZVxuICAgICAic3RyLmpvaW4oKSIgYXQgdGhlIGVuZCBvciBlbHNlIHdyaXRlIHRvIGFuICJpby5TdHJpbmdJTyJcbiAgICAgaW5zdGFuY2UgYW5kIHJldHJpZXZlIGl0cyB2YWx1ZSB3aGVuIGNvbXBsZXRlXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyAiYnl0ZXMiIG9iamVjdHMsIHlvdSBjYW4gc2ltaWxhcmx5IHVzZVxuICAgICAiYnl0ZXMuam9pbigpIiBvciAiaW8uQnl0ZXNJTyIsIG9yIHlvdSBjYW4gZG8gaW4tcGxhY2VcbiAgICAgY29uY2F0ZW5hdGlvbiB3aXRoIGEgImJ5dGVhcnJheSIgb2JqZWN0LiAgImJ5dGVhcnJheSIgb2JqZWN0cyBhcmVcbiAgICAgbXV0YWJsZSBhbmQgaGF2ZSBhbiBlZmZpY2llbnQgb3ZlcmFsbG9jYXRpb24gbWVjaGFuaXNtXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyAidHVwbGUiIG9iamVjdHMsIGV4dGVuZCBhICJsaXN0IiBpbnN0ZWFkXG5cbiAgICogZm9yIG90aGVyIHR5cGVzLCBpbnZlc3RpZ2F0ZSB0aGUgcmVsZXZhbnQgY2xhc3MgZG9jdW1lbnRhdGlvblxuXG43LiBTb21lIHNlcXVlbmNlIHR5cGVzIChzdWNoIGFzICJyYW5nZSIpIG9ubHkgc3VwcG9ydCBpdGVtXG4gICBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgc3BlY2lmaWMgcGF0dGVybnMsIGFuZCBoZW5jZSBkb25cJ3Qgc3VwcG9ydFxuICAgc2VxdWVuY2UgY29uY2F0ZW5hdGlvbiBvciByZXBldGl0aW9uLlxuXG44LiAiaW5kZXgiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi4gV2hlblxuICAgc3VwcG9ydGVkLCB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGluZGV4IG1ldGhvZCBhbGxvd1xuICAgZWZmaWNpZW50IHNlYXJjaGluZyBvZiBzdWJzZWN0aW9ucyBvZiB0aGUgc2VxdWVuY2UuIFBhc3NpbmcgdGhlXG4gICBleHRyYSBhcmd1bWVudHMgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIHVzaW5nICJzW2k6al0uaW5kZXgoeCkiLFxuICAgb25seSB3aXRob3V0IGNvcHlpbmcgYW55IGRhdGEgYW5kIHdpdGggdGhlIHJldHVybmVkIGluZGV4IGJlaW5nXG4gICByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlcXVlbmNlIHJhdGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGVcbiAgIHNsaWNlLlxuXG5cbkltbXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvbmx5IG9wZXJhdGlvbiB0aGF0IGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyBnZW5lcmFsbHkgaW1wbGVtZW50XG50aGF0IGlzIG5vdCBhbHNvIGltcGxlbWVudGVkIGJ5IG11dGFibGUgc2VxdWVuY2UgdHlwZXMgaXMgc3VwcG9ydCBmb3JcbnRoZSAiaGFzaCgpIiBidWlsdC1pbi5cblxuVGhpcyBzdXBwb3J0IGFsbG93cyBpbW11dGFibGUgc2VxdWVuY2VzLCBzdWNoIGFzICJ0dXBsZSIgaW5zdGFuY2VzLCB0b1xuYmUgdXNlZCBhcyAiZGljdCIga2V5cyBhbmQgc3RvcmVkIGluICJzZXQiIGFuZCAiZnJvemVuc2V0IiBpbnN0YW5jZXMuXG5cbkF0dGVtcHRpbmcgdG8gaGFzaCBhbiBpbW11dGFibGUgc2VxdWVuY2UgdGhhdCBjb250YWlucyB1bmhhc2hhYmxlXG52YWx1ZXMgd2lsbCByZXN1bHQgaW4gIlR5cGVFcnJvciIuXG5cblxuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBkZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2VcbnR5cGVzLiBUaGUgImNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2UiIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsICJieXRlYXJyYXkiIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiAiMCA8PSB4IDw9IDI1NSIpLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG58ICJzW2ldID0geCIgICAgICAgICAgICAgICAgICAgICB8IGl0ZW0gKmkqIG9mICpzKiBpcyByZXBsYWNlZCBieSAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6al0gPSB0IiAgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpdGVyYWJsZSAqdCogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImRlbCBzW2k6al0iICAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyAic1tpOmpdID0gW10iICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSA9IHQiICAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiAic1tpOmo6a10iIGFyZSAgIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhvc2Ugb2YgKnQqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJkZWwgc1tpOmo6a10iICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgdGhlIGVsZW1lbnRzIG9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbaTpqOmtdIiBmcm9tIHRoZSBsaXN0ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmFwcGVuZCh4KSIgICAgICAgICAgICAgICAgICB8IGFwcGVuZHMgKngqIHRvIHRoZSBlbmQgb2YgdGhlICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VxdWVuY2UgKHNhbWUgYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAic1tsZW4ocyk6bGVuKHMpXSA9IFt4XSIpICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY2xlYXIoKSIgICAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSAicyIgKHNhbWUgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcyAiZGVsIHNbOl0iKSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY29weSgpIiAgICAgICAgICAgICAgICAgICAgIHwgY3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiAicyIgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoc2FtZSBhcyAic1s6XSIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuZXh0ZW5kKHQpIiBvciAicyArPSB0IiAgICAgIHwgZXh0ZW5kcyAqcyogd2l0aCB0aGUgY29udGVudHMgb2YgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqdCogKGZvciB0aGUgbW9zdCBwYXJ0IHRoZSBzYW1lICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFzICJzW2xlbihzKTpsZW4ocyldID0gdCIpICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicyAqPSBuIiAgICAgICAgICAgICAgICAgICAgICAgfCB1cGRhdGVzICpzKiB3aXRoIGl0cyBjb250ZW50cyAgICB8ICg2KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGVhdGVkICpuKiB0aW1lcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5pbnNlcnQoaSwgeCkiICAgICAgICAgICAgICAgfCBpbnNlcnRzICp4KiBpbnRvICpzKiBhdCB0aGUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4IGdpdmVuIGJ5ICppKiAoc2FtZSBhcyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbaTppXSA9IFt4XSIpICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnBvcChbaV0pIiAgICAgICAgICAgICAgICAgICB8IHJldHJpZXZlcyB0aGUgaXRlbSBhdCAqaSogYW5kICAgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWxzbyByZW1vdmVzIGl0IGZyb20gKnMqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJlbW92ZSh4KSIgICAgICAgICAgICAgICAgICB8IHJlbW92ZSB0aGUgZmlyc3QgaXRlbSBmcm9tICpzKiAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hlcmUgInNbaV0gPT0geCIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJldmVyc2UoKSIgICAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgcmVwbGFjaW5nLlxuXG4yLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvICItMSIsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuMy4gInJlbW92ZSIgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLlxuXG40LiBUaGUgInJldmVyc2UoKSIgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3JcbiAgIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiByZXZlcnNpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2Vyc1xuICAgdGhhdCBpdCBvcGVyYXRlcyBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSByZXZlcnNlZFxuICAgc2VxdWVuY2UuXG5cbjUuICJjbGVhcigpIiBhbmQgImNvcHkoKSIgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzICJkaWN0IiBhbmQgInNldCIpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogImNsZWFyKCkiIGFuZCAiY29weSgpIiBtZXRob2RzLlxuXG42LiBUaGUgdmFsdWUgKm4qIGlzIGFuIGludGVnZXIsIG9yIGFuIG9iamVjdCBpbXBsZW1lbnRpbmdcbiAgICJfX2luZGV4X18oKSIuICBaZXJvIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgb2YgKm4qIGNsZWFyIHRoZSBzZXF1ZW5jZS5cbiAgIEl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZCBtdWx0aXBsZVxuICAgdGltZXMsIGFzIGV4cGxhaW5lZCBmb3IgInMgKiBuIiB1bmRlciAqQ29tbW9uIFNlcXVlbmNlIE9wZXJhdGlvbnMqLlxuXG5cbkxpc3RzXG49PT09PVxuXG5MaXN0cyBhcmUgbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5ob21vZ2VuZW91cyBpdGVtcyAod2hlcmUgdGhlIHByZWNpc2UgZGVncmVlIG9mIHNpbWlsYXJpdHkgd2lsbCB2YXJ5IGJ5XG5hcHBsaWNhdGlvbikuXG5cbmNsYXNzIGNsYXNzIGxpc3QoW2l0ZXJhYmxlXSlcblxuICAgTGlzdHMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIHNldmVyYWwgd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2Ygc3F1YXJlIGJyYWNrZXRzIHRvIGRlbm90ZSB0aGUgZW1wdHkgbGlzdDogIltdIlxuXG4gICAqIFVzaW5nIHNxdWFyZSBicmFja2V0cywgc2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogIlthXSIsXG4gICAgICJbYSwgYiwgY10iXG5cbiAgICogVXNpbmcgYSBsaXN0IGNvbXByZWhlbnNpb246ICJbeCBmb3IgeCBpbiBpdGVyYWJsZV0iXG5cbiAgICogVXNpbmcgdGhlIHR5cGUgY29uc3RydWN0b3I6ICJsaXN0KCkiIG9yICJsaXN0KGl0ZXJhYmxlKSJcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIGxpc3Qgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSBsaXN0LCBhIGNvcHkgaXMgbWFkZSBhbmRcbiAgIHJldHVybmVkLCBzaW1pbGFyIHRvICJpdGVyYWJsZVs6XSIuIEZvciBleGFtcGxlLCAibGlzdChcJ2FiY1wnKSJcbiAgIHJldHVybnMgIltcJ2FcJywgXCdiXCcsIFwnY1wnXSIgYW5kICJsaXN0KCAoMSwgMiwgMykgKSIgcmV0dXJucyAiWzEsIDIsXG4gICAzXSIuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eVxuICAgbGlzdCwgIltdIi5cblxuICAgTWFueSBvdGhlciBvcGVyYXRpb25zIGFsc28gcHJvZHVjZSBsaXN0cywgaW5jbHVkaW5nIHRoZSAic29ydGVkKCkiXG4gICBidWlsdC1pbi5cblxuICAgTGlzdHMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogYW5kICptdXRhYmxlKiBzZXF1ZW5jZVxuICAgb3BlcmF0aW9ucy4gTGlzdHMgYWxzbyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBtZXRob2Q6XG5cbiAgIHNvcnQoKiwga2V5PU5vbmUsIHJldmVyc2U9Tm9uZSlcblxuICAgICAgVGhpcyBtZXRob2Qgc29ydHMgdGhlIGxpc3QgaW4gcGxhY2UsIHVzaW5nIG9ubHkgIjwiIGNvbXBhcmlzb25zXG4gICAgICBiZXR3ZWVuIGl0ZW1zLiBFeGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCAtIGlmIGFueSBjb21wYXJpc29uXG4gICAgICBvcGVyYXRpb25zIGZhaWwsIHRoZSBlbnRpcmUgc29ydCBvcGVyYXRpb24gd2lsbCBmYWlsIChhbmQgdGhlXG4gICAgICBsaXN0IHdpbGwgbGlrZWx5IGJlIGxlZnQgaW4gYSBwYXJ0aWFsbHkgbW9kaWZpZWQgc3RhdGUpLlxuXG4gICAgICAic29ydCgpIiBhY2NlcHRzIHR3byBhcmd1bWVudHMgdGhhdCBjYW4gb25seSBiZSBwYXNzZWQgYnlcbiAgICAgIGtleXdvcmQgKCprZXl3b3JkLW9ubHkgYXJndW1lbnRzKik6XG5cbiAgICAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG9cbiAgICAgIGV4dHJhY3QgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50IChmb3IgZXhhbXBsZSxcbiAgICAgICJrZXk9c3RyLmxvd2VyIikuIFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byBlYWNoIGl0ZW0gaW4gdGhlIGxpc3RcbiAgICAgIGlzIGNhbGN1bGF0ZWQgb25jZSBhbmQgdGhlbiB1c2VkIGZvciB0aGUgZW50aXJlIHNvcnRpbmcgcHJvY2Vzcy5cbiAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mICJOb25lIiBtZWFucyB0aGF0IGxpc3QgaXRlbXMgYXJlIHNvcnRlZFxuICAgICAgZGlyZWN0bHkgd2l0aG91dCBjYWxjdWxhdGluZyBhIHNlcGFyYXRlIGtleSB2YWx1ZS5cblxuICAgICAgVGhlICJmdW5jdG9vbHMuY21wX3RvX2tleSgpIiB1dGlsaXR5IGlzIGF2YWlsYWJsZSB0byBjb252ZXJ0IGFcbiAgICAgIDIueCBzdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLlxuXG4gICAgICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvICJUcnVlIiwgdGhlbiB0aGUgbGlzdFxuICAgICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgICAgVGhpcyBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvciBlY29ub215IG9mIHNwYWNlXG4gICAgICB3aGVuIHNvcnRpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0IG9wZXJhdGVzXG4gICAgICBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBzb3J0ZWQgc2VxdWVuY2UgKHVzZVxuICAgICAgInNvcnRlZCgpIiB0byBleHBsaWNpdGx5IHJlcXVlc3QgYSBuZXcgc29ydGVkIGxpc3QgaW5zdGFuY2UpLlxuXG4gICAgICBUaGUgInNvcnQoKSIgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzXG4gICAgICBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZlxuICAgICAgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW5cbiAgICAgIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnlcbiAgICAgIGdyYWRlKS5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyAiVmFsdWVFcnJvciIgaWYgaXQgY2FuIGRldGVjdFxuICAgICAgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG5cblxuVHVwbGVzXG49PT09PT1cblxuVHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzLCB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBjb2xsZWN0aW9ucyBvZlxuaGV0ZXJvZ2VuZW91cyBkYXRhIChzdWNoIGFzIHRoZSAyLXR1cGxlcyBwcm9kdWNlZCBieSB0aGUgImVudW1lcmF0ZSgpIlxuYnVpbHQtaW4pLiBUdXBsZXMgYXJlIGFsc28gdXNlZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW1tdXRhYmxlIHNlcXVlbmNlXG5vZiBob21vZ2VuZW91cyBkYXRhIGlzIG5lZWRlZCAoc3VjaCBhcyBhbGxvd2luZyBzdG9yYWdlIGluIGEgInNldCIgb3JcbiJkaWN0IiBpbnN0YW5jZSkuXG5cbmNsYXNzIGNsYXNzIHR1cGxlKFtpdGVyYWJsZV0pXG5cbiAgIFR1cGxlcyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gYSBudW1iZXIgb2Ygd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2YgcGFyZW50aGVzZXMgdG8gZGVub3RlIHRoZSBlbXB0eSB0dXBsZTogIigpIlxuXG4gICAqIFVzaW5nIGEgdHJhaWxpbmcgY29tbWEgZm9yIGEgc2luZ2xldG9uIHR1cGxlOiAiYSwiIG9yICIoYSwpIlxuXG4gICAqIFNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6ICJhLCBiLCBjIiBvciAiKGEsIGIsIGMpIlxuXG4gICAqIFVzaW5nIHRoZSAidHVwbGUoKSIgYnVpbHQtaW46ICJ0dXBsZSgpIiBvciAidHVwbGUoaXRlcmFibGUpIlxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgdHVwbGUgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSB0dXBsZSwgaXQgaXMgcmV0dXJuZWRcbiAgIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsICJ0dXBsZShcJ2FiY1wnKSIgcmV0dXJucyAiKFwnYVwnLCBcJ2JcJywgXCdjXCcpIlxuICAgYW5kICJ0dXBsZSggWzEsIDIsIDNdICkiIHJldHVybnMgIigxLCAyLCAzKSIuIElmIG5vIGFyZ3VtZW50IGlzXG4gICBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXcgZW1wdHkgdHVwbGUsICIoKSIuXG5cbiAgIE5vdGUgdGhhdCBpdCBpcyBhY3R1YWxseSB0aGUgY29tbWEgd2hpY2ggbWFrZXMgYSB0dXBsZSwgbm90IHRoZVxuICAgcGFyZW50aGVzZXMuIFRoZSBwYXJlbnRoZXNlcyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBpbiB0aGUgZW1wdHlcbiAgIHR1cGxlIGNhc2UsIG9yIHdoZW4gdGhleSBhcmUgbmVlZGVkIHRvIGF2b2lkIHN5bnRhY3RpYyBhbWJpZ3VpdHkuXG4gICBGb3IgZXhhbXBsZSwgImYoYSwgYiwgYykiIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIHRocmVlIGFyZ3VtZW50cyxcbiAgIHdoaWxlICJmKChhLCBiLCBjKSkiIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGEgMy10dXBsZSBhcyB0aGUgc29sZVxuICAgYXJndW1lbnQuXG5cbiAgIFR1cGxlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLlxuXG5Gb3IgaGV0ZXJvZ2VuZW91cyBjb2xsZWN0aW9ucyBvZiBkYXRhIHdoZXJlIGFjY2VzcyBieSBuYW1lIGlzIGNsZWFyZXJcbnRoYW4gYWNjZXNzIGJ5IGluZGV4LCAiY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIiBtYXkgYmUgYSBtb3JlXG5hcHByb3ByaWF0ZSBjaG9pY2UgdGhhbiBhIHNpbXBsZSB0dXBsZSBvYmplY3QuXG5cblxuUmFuZ2VzXG49PT09PT1cblxuVGhlICJyYW5nZSIgdHlwZSByZXByZXNlbnRzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSBvZiBudW1iZXJzIGFuZCBpc1xuY29tbW9ubHkgdXNlZCBmb3IgbG9vcGluZyBhIHNwZWNpZmljIG51bWJlciBvZiB0aW1lcyBpbiAiZm9yIiBsb29wcy5cblxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RvcClcbmNsYXNzIGNsYXNzIHJhbmdlKHN0YXJ0LCBzdG9wWywgc3RlcF0pXG5cbiAgIFRoZSBhcmd1bWVudHMgdG8gdGhlIHJhbmdlIGNvbnN0cnVjdG9yIG11c3QgYmUgaW50ZWdlcnMgKGVpdGhlclxuICAgYnVpbHQtaW4gImludCIgb3IgYW55IG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlICJfX2luZGV4X18iXG4gICBzcGVjaWFsIG1ldGhvZCkuICBJZiB0aGUgKnN0ZXAqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvXG4gICAiMSIuIElmIHRoZSAqc3RhcnQqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICIwIi4gSWZcbiAgICpzdGVwKiBpcyB6ZXJvLCAiVmFsdWVFcnJvciIgaXMgcmFpc2VkLlxuXG4gICBGb3IgYSBwb3NpdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiBhIHJhbmdlICJyIiBhcmUgZGV0ZXJtaW5lZFxuICAgYnkgdGhlIGZvcm11bGEgInJbaV0gPSBzdGFydCArIHN0ZXAqaSIgd2hlcmUgImkgPj0gMCIgYW5kICJyW2ldIDxcbiAgIHN0b3AiLlxuXG4gICBGb3IgYSBuZWdhdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UgYXJlIHN0aWxsXG4gICBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtdWxhICJyW2ldID0gc3RhcnQgKyBzdGVwKmkiLCBidXQgdGhlXG4gICBjb25zdHJhaW50cyBhcmUgImkgPj0gMCIgYW5kICJyW2ldID4gc3RvcCIuXG5cbiAgIEEgcmFuZ2Ugb2JqZWN0IHdpbGwgYmUgZW1wdHkgaWYgInJbMF0iIGRvZXMgbm90IG1lZXQgdGhlIHZhbHVlXG4gICBjb25zdHJhaW50LiBSYW5nZXMgZG8gc3VwcG9ydCBuZWdhdGl2ZSBpbmRpY2VzLCBidXQgdGhlc2UgYXJlXG4gICBpbnRlcnByZXRlZCBhcyBpbmRleGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGRldGVybWluZWQgYnlcbiAgIHRoZSBwb3NpdGl2ZSBpbmRpY2VzLlxuXG4gICBSYW5nZXMgY29udGFpbmluZyBhYnNvbHV0ZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gInN5cy5tYXhzaXplIiBhcmVcbiAgIHBlcm1pdHRlZCBidXQgc29tZSBmZWF0dXJlcyAoc3VjaCBhcyAibGVuKCkiKSBtYXkgcmFpc2VcbiAgICJPdmVyZmxvd0Vycm9yIi5cblxuICAgUmFuZ2UgZXhhbXBsZXM6XG5cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEwKSlcbiAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMTEpKVxuICAgICAgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMzAsIDUpKVxuICAgICAgWzAsIDUsIDEwLCAxNSwgMjAsIDI1XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMTAsIDMpKVxuICAgICAgWzAsIDMsIDYsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAtMTAsIC0xKSlcbiAgICAgIFswLCAtMSwgLTIsIC0zLCAtNCwgLTUsIC02LCAtNywgLTgsIC05XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCkpXG4gICAgICBbXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMCkpXG4gICAgICBbXVxuXG4gICBSYW5nZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucyBleGNlcHRcbiAgIGNvbmNhdGVuYXRpb24gYW5kIHJlcGV0aXRpb24gKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHJhbmdlIG9iamVjdHNcbiAgIGNhbiBvbmx5IHJlcHJlc2VudCBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgYSBzdHJpY3QgcGF0dGVybiBhbmRcbiAgIHJlcGV0aXRpb24gYW5kIGNvbmNhdGVuYXRpb24gd2lsbCB1c3VhbGx5IHZpb2xhdGUgdGhhdCBwYXR0ZXJuKS5cblxuICAgc3RhcnRcblxuICAgICAgVGhlIHZhbHVlIG9mIHRoZSAqc3RhcnQqIHBhcmFtZXRlciAob3IgIjAiIGlmIHRoZSBwYXJhbWV0ZXIgd2FzXG4gICAgICBub3Qgc3VwcGxpZWQpXG5cbiAgIHN0b3BcblxuICAgICAgVGhlIHZhbHVlIG9mIHRoZSAqc3RvcCogcGFyYW1ldGVyXG5cbiAgIHN0ZXBcblxuICAgICAgVGhlIHZhbHVlIG9mIHRoZSAqc3RlcCogcGFyYW1ldGVyIChvciAiMSIgaWYgdGhlIHBhcmFtZXRlciB3YXNcbiAgICAgIG5vdCBzdXBwbGllZClcblxuVGhlIGFkdmFudGFnZSBvZiB0aGUgInJhbmdlIiB0eXBlIG92ZXIgYSByZWd1bGFyICJsaXN0IiBvciAidHVwbGUiIGlzXG50aGF0IGEgInJhbmdlIiBvYmplY3Qgd2lsbCBhbHdheXMgdGFrZSB0aGUgc2FtZSAoc21hbGwpIGFtb3VudCBvZlxubWVtb3J5LCBubyBtYXR0ZXIgdGhlIHNpemUgb2YgdGhlIHJhbmdlIGl0IHJlcHJlc2VudHMgKGFzIGl0IG9ubHlcbnN0b3JlcyB0aGUgInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCIgdmFsdWVzLCBjYWxjdWxhdGluZyBpbmRpdmlkdWFsXG5pdGVtcyBhbmQgc3VicmFuZ2VzIGFzIG5lZWRlZCkuXG5cblJhbmdlIG9iamVjdHMgaW1wbGVtZW50IHRoZSAiY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlIiBBQkMsIGFuZFxucHJvdmlkZSBmZWF0dXJlcyBzdWNoIGFzIGNvbnRhaW5tZW50IHRlc3RzLCBlbGVtZW50IGluZGV4IGxvb2t1cCxcbnNsaWNpbmcgYW5kIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGluZGljZXMgKHNlZSAqU2VxdWVuY2UgVHlwZXMgLS0tXG5saXN0LCB0dXBsZSwgcmFuZ2UqKTpcblxuPj4+IHIgPSByYW5nZSgwLCAyMCwgMilcbj4+PiByXG5yYW5nZSgwLCAyMCwgMilcbj4+PiAxMSBpbiByXG5GYWxzZVxuPj4+IDEwIGluIHJcblRydWVcbj4+PiByLmluZGV4KDEwKVxuNVxuPj4+IHJbNV1cbjEwXG4+Pj4gcls6NV1cbnJhbmdlKDAsIDEwLCAyKVxuPj4+IHJbLTFdXG4xOFxuXG5UZXN0aW5nIHJhbmdlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggIj09IiBhbmQgIiE9IiBjb21wYXJlcyB0aGVtIGFzXG5zZXF1ZW5jZXMuICBUaGF0IGlzLCB0d28gcmFuZ2Ugb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiB0aGV5XG5yZXByZXNlbnQgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgdmFsdWVzLiAgKE5vdGUgdGhhdCB0d28gcmFuZ2Ugb2JqZWN0c1xudGhhdCBjb21wYXJlIGVxdWFsIG1pZ2h0IGhhdmUgZGlmZmVyZW50ICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiXG5hdHRyaWJ1dGVzLCBmb3IgZXhhbXBsZSAicmFuZ2UoMCkgPT0gcmFuZ2UoMiwgMSwgMykiIG9yICJyYW5nZSgwLCAzLFxuMikgPT0gcmFuZ2UoMCwgNCwgMikiLilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogSW1wbGVtZW50IHRoZSBTZXF1ZW5jZSBBQkMuIFN1cHBvcnQgc2xpY2luZ1xuYW5kIG5lZ2F0aXZlIGluZGljZXMuIFRlc3QgImludCIgb2JqZWN0cyBmb3IgbWVtYmVyc2hpcCBpbiBjb25zdGFudFxudGltZSBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBpdGVtcy5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogRGVmaW5lIFwnPT1cJyBhbmQgXCchPVwnIHRvIGNvbXBhcmUgcmFuZ2Ugb2JqZWN0c1xuYmFzZWQgb24gdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGV5IGRlZmluZSAoaW5zdGVhZCBvZiBjb21wYXJpbmdcbmJhc2VkIG9uIG9iamVjdCBpZGVudGl0eSkuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiIGF0dHJpYnV0ZXMuXG4nLAogICd0eXBlc3NlcS1tdXRhYmxlJzogdSdcbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcy4gVGhlICJjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZVNlcXVlbmNlIiBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCAiYnl0ZWFycmF5IiBvbmx5XG5hY2NlcHRzIGludGVnZXJzIHRoYXQgbWVldCB0aGUgdmFsdWUgcmVzdHJpY3Rpb24gIjAgPD0geCA8PSAyNTUiKS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCAic1tpXSA9IHgiICAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAic1tpOmpdID0gdCIgICAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJkZWwgc1tpOmpdIiAgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgInNbaTpqXSA9IFtdIiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAic1tpOmo6a10gPSB0IiAgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgInNbaTpqOmtdIiBhcmUgICB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiZGVsIHNbaTpqOmtdIiAgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJzW2k6ajprXSIgZnJvbSB0aGUgbGlzdCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5hcHBlbmQoeCkiICAgICAgICAgICAgICAgICAgfCBhcHBlbmRzICp4KiB0byB0aGUgZW5kIG9mIHRoZSAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcXVlbmNlIChzYW1lIGFzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbbGVuKHMpOmxlbihzKV0gPSBbeF0iKSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNsZWFyKCkiICAgICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gInMiIChzYW1lIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXMgImRlbCBzWzpdIikgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNvcHkoKSIgICAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgInMiICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgInNbOl0iKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmV4dGVuZCh0KSIgb3IgInMgKz0gdCIgICAgICB8IGV4dGVuZHMgKnMqIHdpdGggdGhlIGNvbnRlbnRzIG9mIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKnQqIChmb3IgdGhlIG1vc3QgcGFydCB0aGUgc2FtZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcyAic1tsZW4ocyk6bGVuKHMpXSA9IHQiKSAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMgKj0gbiIgICAgICAgICAgICAgICAgICAgICAgIHwgdXBkYXRlcyAqcyogd2l0aCBpdHMgY29udGVudHMgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBlYXRlZCAqbiogdGltZXMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuaW5zZXJ0KGksIHgpIiAgICAgICAgICAgICAgIHwgaW5zZXJ0cyAqeCogaW50byAqcyogYXQgdGhlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleCBnaXZlbiBieSAqaSogKHNhbWUgYXMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJzW2k6aV0gPSBbeF0iKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5wb3AoW2ldKSIgICAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsc28gcmVtb3ZlcyBpdCBmcm9tICpzKiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZW1vdmUoeCkiICAgICAgICAgICAgICAgICAgfCByZW1vdmUgdGhlIGZpcnN0IGl0ZW0gZnJvbSAqcyogICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoZXJlICJzW2ldID09IHgiICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZXZlcnNlKCkiICAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byAiLTEiLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuICJyZW1vdmUiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlICJyZXZlcnNlKCkiIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yXG4gICBlY29ub215IG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnNcbiAgIHRoYXQgaXQgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWRcbiAgIHNlcXVlbmNlLlxuXG41LiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyAiZGljdCIgYW5kICJzZXQiKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6ICJjbGVhcigpIiBhbmQgImNvcHkoKSIgbWV0aG9kcy5cblxuNi4gVGhlIHZhbHVlICpuKiBpcyBhbiBpbnRlZ2VyLCBvciBhbiBvYmplY3QgaW1wbGVtZW50aW5nXG4gICAiX19pbmRleF9fKCkiLiAgWmVybyBhbmQgbmVnYXRpdmUgdmFsdWVzIG9mICpuKiBjbGVhciB0aGUgc2VxdWVuY2UuXG4gICBJdGVtcyBpbiB0aGUgc2VxdWVuY2UgYXJlIG5vdCBjb3BpZWQ7IHRoZXkgYXJlIHJlZmVyZW5jZWQgbXVsdGlwbGVcbiAgIHRpbWVzLCBhcyBleHBsYWluZWQgZm9yICJzICogbiIgdW5kZXIgKkNvbW1vbiBTZXF1ZW5jZSBPcGVyYXRpb25zKi5cbicsCiAgJ3VuYXJ5JzogdSdcblVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkFsbCB1bmFyeSBhcml0aG1ldGljIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eTpcblxuICAgdV9leHByIDo6PSBwb3dlciB8ICItIiB1X2V4cHIgfCAiKyIgdV9leHByIHwgIn4iIHVfZXhwclxuXG5UaGUgdW5hcnkgIi0iIChtaW51cykgb3BlcmF0b3IgeWllbGRzIHRoZSBuZWdhdGlvbiBvZiBpdHMgbnVtZXJpY1xuYXJndW1lbnQuXG5cblRoZSB1bmFyeSAiKyIgKHBsdXMpIG9wZXJhdG9yIHlpZWxkcyBpdHMgbnVtZXJpYyBhcmd1bWVudCB1bmNoYW5nZWQuXG5cblRoZSB1bmFyeSAifiIgKGludmVydCkgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBpdHNcbmludGVnZXIgYXJndW1lbnQuICBUaGUgYml0d2lzZSBpbnZlcnNpb24gb2YgIngiIGlzIGRlZmluZWQgYXNcbiItKHgrMSkiLiAgSXQgb25seSBhcHBsaWVzIHRvIGludGVncmFsIG51bWJlcnMuXG5cbkluIGFsbCB0aHJlZSBjYXNlcywgaWYgdGhlIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgdGhlIHByb3BlciB0eXBlLCBhXG4iVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKICAnd2hpbGUnOiB1J1xuVGhlICJ3aGlsZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuVGhlICJ3aGlsZSIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWRcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGdvZXMgYmFja1xudG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cbicsCi0gJ3dpdGgnOiB1J1xuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuJywKKyAnd2l0aCc6IHUnXG5UaGUgIndpdGgiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlICJ3aXRoIiBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb24gInRyeSIuLi4iZXhjZXB0Ii4uLiJmaW5hbGx5IlxudXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkIGZvciBjb252ZW5pZW50IHJldXNlLlxuXG4gICB3aXRoX3N0bXQgOjo9ICJ3aXRoIiB3aXRoX2l0ZW0gKCIsIiB3aXRoX2l0ZW0pKiAiOiIgc3VpdGVcbiAgIHdpdGhfaXRlbSA6Oj0gZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXG5cblRoZSBleGVjdXRpb24gb2YgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgIndpdGhfaXRlbSIpXG4gICBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLlxuXG4yLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2V4aXRfXygpIiBpcyBsb2FkZWQgZm9yIGxhdGVyIHVzZS5cblxuMy4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19lbnRlcl9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLlxuXG40LiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlICJ3aXRoIiBzdGF0ZW1lbnQsIHRoZSByZXR1cm5cbiAgIHZhbHVlIGZyb20gIl9fZW50ZXJfXygpIiBpcyBhc3NpZ25lZCB0byBpdC5cblxuICAgTm90ZTogVGhlICJ3aXRoIiBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSAiX19lbnRlcl9fKCkiXG4gICAgIG1ldGhvZCByZXR1cm5zIHdpdGhvdXQgYW4gZXJyb3IsIHRoZW4gIl9fZXhpdF9fKCkiIHdpbGwgYWx3YXlzIGJlXG4gICAgIGNhbGxlZC4gVGh1cywgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXNzaWdubWVudCB0byB0aGVcbiAgICAgdGFyZ2V0IGxpc3QsIGl0IHdpbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhbiBlcnJvciBvY2N1cnJpbmdcbiAgICAgd2l0aGluIHRoZSBzdWl0ZSB3b3VsZCBiZS4gU2VlIHN0ZXAgNiBiZWxvdy5cblxuNS4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG42LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2V4aXRfXygpIiBtZXRob2QgaXMgaW52b2tlZC4gIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gIl9fZXhpdF9fKCkiLiBPdGhlcndpc2UsIHRocmVlXG4gICAiTm9uZSIgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlICJfX2V4aXRfXygpIiBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzIHJlcmFpc2VkLlxuICAgSWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgdHJ1ZSwgdGhlIGV4Y2VwdGlvbiBpcyBzdXBwcmVzc2VkLCBhbmRcbiAgIGV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aCB0aGUgc3RhdGVtZW50IGZvbGxvd2luZyB0aGUgIndpdGgiXG4gICBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tICJfX2V4aXRfXygpIiBpcyBpZ25vcmVkLCBhbmQgZXhlY3V0aW9uIHByb2NlZWRzXG4gICBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uIGZvciB0aGUga2luZCBvZiBleGl0IHRoYXQgd2FzIHRha2VuLlxuXG5XaXRoIG1vcmUgdGhhbiBvbmUgaXRlbSwgdGhlIGNvbnRleHQgbWFuYWdlcnMgYXJlIHByb2Nlc3NlZCBhcyBpZlxubXVsdGlwbGUgIndpdGgiIHN0YXRlbWVudHMgd2VyZSBuZXN0ZWQ6XG5cbiAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOlxuICAgICAgIHN1aXRlXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgd2l0aCBBKCkgYXMgYTpcbiAgICAgICB3aXRoIEIoKSBhcyBiOlxuICAgICAgICAgICBzdWl0ZVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IGV4cHJlc3Npb25zLlxuXG5TZWUgYWxzbzogKipQRVAgMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cbicsCiAgJ3lpZWxkJzogdSdcblRoZSAieWllbGQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHlpZWxkX3N0bXQgOjo9IHlpZWxkX2V4cHJlc3Npb25cblxuQSAieWllbGQiIHN0YXRlbWVudCBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byBhICp5aWVsZFxuZXhwcmVzc2lvbiouIFRoZSB5aWVsZCBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gb21pdCB0aGUgcGFyZW50aGVzZXNcbnRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIHJlcXVpcmVkIGluIHRoZSBlcXVpdmFsZW50IHlpZWxkIGV4cHJlc3Npb25cbnN0YXRlbWVudC4gRm9yIGV4YW1wbGUsIHRoZSB5aWVsZCBzdGF0ZW1lbnRzXG5cbiAgIHlpZWxkIDxleHByPlxuICAgeWllbGQgZnJvbSA8ZXhwcj5cblxuYXJlIGVxdWl2YWxlbnQgdG8gdGhlIHlpZWxkIGV4cHJlc3Npb24gc3RhdGVtZW50c1xuXG4gICAoeWllbGQgPGV4cHI+KVxuICAgKHlpZWxkIGZyb20gPGV4cHI+KVxuXG5ZaWVsZCBleHByZXNzaW9ucyBhbmQgc3RhdGVtZW50cyBhcmUgb25seSB1c2VkIHdoZW4gZGVmaW5pbmcgYVxuKmdlbmVyYXRvciogZnVuY3Rpb24sIGFuZCBhcmUgb25seSB1c2VkIGluIHRoZSBib2R5IG9mIHRoZSBnZW5lcmF0b3JcbmZ1bmN0aW9uLiAgVXNpbmcgeWllbGQgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIHN1ZmZpY2llbnQgdG8gY2F1c2VcbnRoYXQgZGVmaW5pdGlvbiB0byBjcmVhdGUgYSBnZW5lcmF0b3IgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIG5vcm1hbFxuZnVuY3Rpb24uXG5cbkZvciBmdWxsIGRldGFpbHMgb2YgInlpZWxkIiBzZW1hbnRpY3MsIHJlZmVyIHRvIHRoZSAqWWllbGRcbmV4cHJlc3Npb25zKiBzZWN0aW9uLlxuJ30KZGlmZiAtLWdpdCBhL0xpYi9xdWV1ZS5weSBiL0xpYi9xdWV1ZS5weQppbmRleCAzY2VlMzZiLi41NzI0MjVlIDEwMDY0NAotLS0gYS9MaWIvcXVldWUucHkKKysrIGIvTGliL3F1ZXVlLnB5CkBAIC02LDEwICs2LDcgQEAKICAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nIGFzIHRocmVhZGluZwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIGZyb20gaGVhcHEgaW1wb3J0IGhlYXBwdXNoLCBoZWFwcG9wCi10cnk6Ci0gICAgZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgdGltZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20gdGltZSBpbXBvcnQgdGltZQorZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgdGltZQogCiBfX2FsbF9fID0gWydFbXB0eScsICdGdWxsJywgJ1F1ZXVlJywgJ1ByaW9yaXR5UXVldWUnLCAnTGlmb1F1ZXVlJ10KIApkaWZmIC0tZ2l0IGEvTGliL3JhbmRvbS5weSBiL0xpYi9yYW5kb20ucHkKaW5kZXggNDY0MjkyOC4uNTk1MDczNSAxMDA2NDQKLS0tIGEvTGliL3JhbmRvbS5weQorKysgYi9MaWIvcmFuZG9tLnB5CkBAIC0yMzEsNyArMjMxLDcgQEAKICAgICAgICAgICAgIHdoaWxlIHIgPj0gbjoKICAgICAgICAgICAgICAgICByID0gZ2V0cmFuZGJpdHMoaykKICAgICAgICAgICAgIHJldHVybiByCi0gICAgICAgICMgVGhlcmUncyBhbiBvdmVycmlkZW4gcmFuZG9tKCkgbWV0aG9kIGJ1dCBubyBuZXcgZ2V0cmFuZGJpdHMoKSBtZXRob2QsCisgICAgICAgICMgVGhlcmUncyBhbiBvdmVycmlkZGVuIHJhbmRvbSgpIG1ldGhvZCBidXQgbm8gbmV3IGdldHJhbmRiaXRzKCkgbWV0aG9kLAogICAgICAgICAjIHNvIHdlIGNhbiBvbmx5IHVzZSByYW5kb20oKSBmcm9tIGhlcmUuCiAgICAgICAgIGlmIG4gPj0gbWF4c2l6ZToKICAgICAgICAgICAgIF93YXJuKCJVbmRlcmx5aW5nIHJhbmRvbSgpIGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwbHkgXG4iCkBAIC02ODcsNyArNjg3LDcgQEAKICAgICBwcmludChyb3VuZCh0MS10MCwgMyksICdzZWMsJywgZW5kPScgJykKICAgICBhdmcgPSB0b3RhbC9uCiAgICAgc3RkZGV2ID0gX3NxcnQoc3FzdW0vbiAtIGF2ZyphdmcpCi0gICAgcHJpbnQoJ2F2ZyAlZywgc3RkZGV2ICVnLCBtaW4gJWcsIG1heCAlZycgJSBcCisgICAgcHJpbnQoJ2F2ZyAlZywgc3RkZGV2ICVnLCBtaW4gJWcsIG1heCAlZ1xuJyAlIFwKICAgICAgICAgICAgICAgKGF2Zywgc3RkZGV2LCBzbWFsbGVzdCwgbGFyZ2VzdCkpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3JlLnB5IGIvTGliL3JlLnB5CmluZGV4IDE5OWFmZWUuLmRkZTg5MDEgMTAwNjQ0Ci0tLSBhL0xpYi9yZS5weQorKysgYi9MaWIvcmUucHkKQEAgLTEyOCwxMCArMTI4LDEzIEBACiAgICAgX2xvY2FsZSA9IE5vbmUKIAogIyBwdWJsaWMgc3ltYm9scwotX19hbGxfXyA9IFsgIm1hdGNoIiwgImZ1bGxtYXRjaCIsICJzZWFyY2giLCAic3ViIiwgInN1Ym4iLCAic3BsaXQiLCAiZmluZGFsbCIsCi0gICAgImNvbXBpbGUiLCAicHVyZ2UiLCAidGVtcGxhdGUiLCAiZXNjYXBlIiwgIkEiLCAiSSIsICJMIiwgIk0iLCAiUyIsICJYIiwKLSAgICAiVSIsICJBU0NJSSIsICJJR05PUkVDQVNFIiwgIkxPQ0FMRSIsICJNVUxUSUxJTkUiLCAiRE9UQUxMIiwgIlZFUkJPU0UiLAotICAgICJVTklDT0RFIiwgImVycm9yIiBdCitfX2FsbF9fID0gWworICAgICJtYXRjaCIsICJmdWxsbWF0Y2giLCAic2VhcmNoIiwgInN1YiIsICJzdWJuIiwgInNwbGl0IiwKKyAgICAiZmluZGFsbCIsICJmaW5kaXRlciIsICJjb21waWxlIiwgInB1cmdlIiwgInRlbXBsYXRlIiwgImVzY2FwZSIsCisgICAgImVycm9yIiwgIkEiLCAiSSIsICJMIiwgIk0iLCAiUyIsICJYIiwgIlUiLAorICAgICJBU0NJSSIsICJJR05PUkVDQVNFIiwgIkxPQ0FMRSIsICJNVUxUSUxJTkUiLCAiRE9UQUxMIiwgIlZFUkJPU0UiLAorICAgICJVTklDT0RFIiwKK10KIAogX192ZXJzaW9uX18gPSAiMi4yLjEiCiAKQEAgLTIwOSwxNCArMjEyLDEyIEBACiAgICAgRW1wdHkgbWF0Y2hlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdC4iIiIKICAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLmZpbmRhbGwoc3RyaW5nKQogCi1pZiBzeXMuaGV4dmVyc2lvbiA+PSAweDAyMDIwMDAwOgotICAgIF9fYWxsX18uYXBwZW5kKCJmaW5kaXRlciIpCi0gICAgZGVmIGZpbmRpdGVyKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCk6Ci0gICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBub24tb3ZlcmxhcHBpbmcgbWF0Y2hlcyBpbiB0aGUKLSAgICAgICAgc3RyaW5nLiAgRm9yIGVhY2ggbWF0Y2gsIHRoZSBpdGVyYXRvciByZXR1cm5zIGEgbWF0Y2ggb2JqZWN0LgorZGVmIGZpbmRpdGVyKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCk6CisgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIG5vbi1vdmVybGFwcGluZyBtYXRjaGVzIGluIHRoZQorICAgIHN0cmluZy4gIEZvciBlYWNoIG1hdGNoLCB0aGUgaXRlcmF0b3IgcmV0dXJucyBhIG1hdGNoIG9iamVjdC4KIAotICAgICAgICBFbXB0eSBtYXRjaGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LiIiIgotICAgICAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLmZpbmRpdGVyKHN0cmluZykKKyAgICBFbXB0eSBtYXRjaGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LiIiIgorICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykuZmluZGl0ZXIoc3RyaW5nKQogCiBkZWYgY29tcGlsZShwYXR0ZXJuLCBmbGFncz0wKToKICAgICAiQ29tcGlsZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLCByZXR1cm5pbmcgYSBwYXR0ZXJuIG9iamVjdC4iCkBAIC0yNzYsMjMgKzI3NywyMSBAQAogX01BWENBQ0hFID0gNTEyCiBkZWYgX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpOgogICAgICMgaW50ZXJuYWw6IGNvbXBpbGUgcGF0dGVybgotICAgIGJ5cGFzc19jYWNoZSA9IGZsYWdzICYgREVCVUcKLSAgICBpZiBub3QgYnlwYXNzX2NhY2hlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwLCBsb2MgPSBfY2FjaGVbdHlwZShwYXR0ZXJuKSwgcGF0dGVybiwgZmxhZ3NdCi0gICAgICAgICAgICBpZiBsb2MgaXMgTm9uZSBvciBsb2MgPT0gX2xvY2FsZS5zZXRsb2NhbGUoX2xvY2FsZS5MQ19DVFlQRSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHAKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgIHRyeToKKyAgICAgICAgcCwgbG9jID0gX2NhY2hlW3R5cGUocGF0dGVybiksIHBhdHRlcm4sIGZsYWdzXQorICAgICAgICBpZiBsb2MgaXMgTm9uZSBvciBsb2MgPT0gX2xvY2FsZS5zZXRsb2NhbGUoX2xvY2FsZS5MQ19DVFlQRSk6CisgICAgICAgICAgICByZXR1cm4gcAorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcGFzcwogICAgIGlmIGlzaW5zdGFuY2UocGF0dGVybiwgX3BhdHRlcm5fdHlwZSk6CiAgICAgICAgIGlmIGZsYWdzOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAgICAgICAiQ2Fubm90IHByb2Nlc3MgZmxhZ3MgYXJndW1lbnQgd2l0aCBhIGNvbXBpbGVkIHBhdHRlcm4iKQorICAgICAgICAgICAgICAgICJjYW5ub3QgcHJvY2VzcyBmbGFncyBhcmd1bWVudCB3aXRoIGEgY29tcGlsZWQgcGF0dGVybiIpCiAgICAgICAgIHJldHVybiBwYXR0ZXJuCiAgICAgaWYgbm90IHNyZV9jb21waWxlLmlzc3RyaW5nKHBhdHRlcm4pOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgc3RyaW5nIG9yIGNvbXBpbGVkIHBhdHRlcm4iKQogICAgIHAgPSBzcmVfY29tcGlsZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzKQotICAgIGlmIG5vdCBieXBhc3NfY2FjaGU6CisgICAgaWYgbm90IChmbGFncyAmIERFQlVHKToKICAgICAgICAgaWYgbGVuKF9jYWNoZSkgPj0gX01BWENBQ0hFOgogICAgICAgICAgICAgX2NhY2hlLmNsZWFyKCkKICAgICAgICAgaWYgcC5mbGFncyAmIExPQ0FMRToKQEAgLTM1MiwxMCArMzUxLDExIEBACiAgICAgICAgIHMgPSBzcmVfcGFyc2UuUGF0dGVybigpCiAgICAgICAgIHMuZmxhZ3MgPSBmbGFncwogICAgICAgICBmb3IgcGhyYXNlLCBhY3Rpb24gaW4gbGV4aWNvbjoKKyAgICAgICAgICAgIGdpZCA9IHMub3Blbmdyb3VwKCkKICAgICAgICAgICAgIHAuYXBwZW5kKHNyZV9wYXJzZS5TdWJQYXR0ZXJuKHMsIFsKLSAgICAgICAgICAgICAgICAoU1VCUEFUVEVSTiwgKGxlbihwKSsxLCBzcmVfcGFyc2UucGFyc2UocGhyYXNlLCBmbGFncykpKSwKKyAgICAgICAgICAgICAgICAoU1VCUEFUVEVSTiwgKGdpZCwgc3JlX3BhcnNlLnBhcnNlKHBocmFzZSwgZmxhZ3MpKSksCiAgICAgICAgICAgICAgICAgXSkpCi0gICAgICAgIHMuZ3JvdXBzID0gbGVuKHApKzEKKyAgICAgICAgICAgIHMuY2xvc2Vncm91cChnaWQsIHBbLTFdKQogICAgICAgICBwID0gc3JlX3BhcnNlLlN1YlBhdHRlcm4ocywgWyhCUkFOQ0gsIChOb25lLCBwKSldKQogICAgICAgICBzZWxmLnNjYW5uZXIgPSBzcmVfY29tcGlsZS5jb21waWxlKHApCiAgICAgZGVmIHNjYW4oc2VsZiwgc3RyaW5nKToKQEAgLTM2Myw3ICszNjMsNyBAQAogICAgICAgICBhcHBlbmQgPSByZXN1bHQuYXBwZW5kCiAgICAgICAgIG1hdGNoID0gc2VsZi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nKS5tYXRjaAogICAgICAgICBpID0gMAotICAgICAgICB3aGlsZSAxOgorICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgbSA9IG1hdGNoKCkKICAgICAgICAgICAgIGlmIG5vdCBtOgogICAgICAgICAgICAgICAgIGJyZWFrCmRpZmYgLS1naXQgYS9MaWIvcmVwcmxpYi5weSBiL0xpYi9yZXBybGliLnB5CmluZGV4IGY4MDMzNjAuLjQwZDk5MWYgMTAwNjQ0Ci0tLSBhL0xpYi9yZXBybGliLnB5CisrKyBiL0xpYi9yZXBybGliLnB5CkBAIC0zMCw2ICszMCw3IEBACiAgICAgICAgIHdyYXBwZXIuX19tb2R1bGVfXyA9IGdldGF0dHIodXNlcl9mdW5jdGlvbiwgJ19fbW9kdWxlX18nKQogICAgICAgICB3cmFwcGVyLl9fZG9jX18gPSBnZXRhdHRyKHVzZXJfZnVuY3Rpb24sICdfX2RvY19fJykKICAgICAgICAgd3JhcHBlci5fX25hbWVfXyA9IGdldGF0dHIodXNlcl9mdW5jdGlvbiwgJ19fbmFtZV9fJykKKyAgICAgICAgd3JhcHBlci5fX3F1YWxuYW1lX18gPSBnZXRhdHRyKHVzZXJfZnVuY3Rpb24sICdfX3F1YWxuYW1lX18nKQogICAgICAgICB3cmFwcGVyLl9fYW5ub3RhdGlvbnNfXyA9IGdldGF0dHIodXNlcl9mdW5jdGlvbiwgJ19fYW5ub3RhdGlvbnNfXycsIHt9KQogICAgICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC04MywxNiArODQsMjIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX3JlcHJfaXRlcmFibGUoeCwgbGV2ZWwsICdbJywgJ10nLCBzZWxmLm1heGxpc3QpCiAKICAgICBkZWYgcmVwcl9hcnJheShzZWxmLCB4LCBsZXZlbCk6CisgICAgICAgIGlmIG5vdCB4OgorICAgICAgICAgICAgcmV0dXJuICJhcnJheSgnJXMnKSIgJSB4LnR5cGVjb2RlCiAgICAgICAgIGhlYWRlciA9ICJhcnJheSgnJXMnLCBbIiAlIHgudHlwZWNvZGUKICAgICAgICAgcmV0dXJuIHNlbGYuX3JlcHJfaXRlcmFibGUoeCwgbGV2ZWwsIGhlYWRlciwgJ10pJywgc2VsZi5tYXhhcnJheSkKIAogICAgIGRlZiByZXByX3NldChzZWxmLCB4LCBsZXZlbCk6CisgICAgICAgIGlmIG5vdCB4OgorICAgICAgICAgICAgcmV0dXJuICdzZXQoKScKICAgICAgICAgeCA9IF9wb3NzaWJseV9zb3J0ZWQoeCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlcHJfaXRlcmFibGUoeCwgbGV2ZWwsICdzZXQoWycsICddKScsIHNlbGYubWF4c2V0KQorICAgICAgICByZXR1cm4gc2VsZi5fcmVwcl9pdGVyYWJsZSh4LCBsZXZlbCwgJ3snLCAnfScsIHNlbGYubWF4c2V0KQogCiAgICAgZGVmIHJlcHJfZnJvemVuc2V0KHNlbGYsIHgsIGxldmVsKToKKyAgICAgICAgaWYgbm90IHg6CisgICAgICAgICAgICByZXR1cm4gJ2Zyb3plbnNldCgpJwogICAgICAgICB4ID0gX3Bvc3NpYmx5X3NvcnRlZCh4KQotICAgICAgICByZXR1cm4gc2VsZi5fcmVwcl9pdGVyYWJsZSh4LCBsZXZlbCwgJ2Zyb3plbnNldChbJywgJ10pJywKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcHJfaXRlcmFibGUoeCwgbGV2ZWwsICdmcm96ZW5zZXQoeycsICd9KScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWF4ZnJvemVuc2V0KQogCiAgICAgZGVmIHJlcHJfZGVxdWUoc2VsZiwgeCwgbGV2ZWwpOgpAQCAtMTM2LDcgKzE0Myw3IEBACiAgICAgICAgICAgICAjIEJ1Z3MgaW4geC5fX3JlcHJfXygpIGNhbiBjYXVzZSBhcmJpdHJhcnkKICAgICAgICAgICAgICMgZXhjZXB0aW9ucyAtLSB0aGVuIG1ha2UgdXAgc29tZXRoaW5nCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICByZXR1cm4gJzwlcyBpbnN0YW5jZSBhdCAleD4nICUgKHguX19jbGFzc19fLl9fbmFtZV9fLCBpZCh4KSkKKyAgICAgICAgICAgIHJldHVybiAnPCVzIGluc3RhbmNlIGF0ICUjeD4nICUgKHguX19jbGFzc19fLl9fbmFtZV9fLCBpZCh4KSkKICAgICAgICAgaWYgbGVuKHMpID4gc2VsZi5tYXhvdGhlcjoKICAgICAgICAgICAgIGkgPSBtYXgoMCwgKHNlbGYubWF4b3RoZXItMykvLzIpCiAgICAgICAgICAgICBqID0gbWF4KDAsIHNlbGYubWF4b3RoZXItMy1pKQpkaWZmIC0tZ2l0IGEvTGliL3JsY29tcGxldGVyLnB5IGIvTGliL3JsY29tcGxldGVyLnB5CmluZGV4IDM3OGY1YWEuLjQwMWE2MjYgMTAwNjQ0Ci0tLSBhL0xpYi9ybGNvbXBsZXRlci5weQorKysgYi9MaWIvcmxjb21wbGV0ZXIucHkKQEAgLTc1LDcgKzc1LDEyIEBACiAKICAgICAgICAgaWYgbm90IHRleHQuc3RyaXAoKToKICAgICAgICAgICAgIGlmIHN0YXRlID09IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdcdCcKKyAgICAgICAgICAgICAgICBpZiBfcmVhZGxpbmVfYXZhaWxhYmxlOgorICAgICAgICAgICAgICAgICAgICByZWFkbGluZS5pbnNlcnRfdGV4dCgnXHQnKQorICAgICAgICAgICAgICAgICAgICByZWFkbGluZS5yZWRpc3BsYXkoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1x0JwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogCkBAIC0xNjgsMTAgKzE3MywxMSBAQAogdHJ5OgogICAgIGltcG9ydCByZWFkbGluZQogZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKKyAgICBfcmVhZGxpbmVfYXZhaWxhYmxlID0gRmFsc2UKIGVsc2U6CiAgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihDb21wbGV0ZXIoKS5jb21wbGV0ZSkKICAgICAjIFJlbGVhc2UgcmVmZXJlbmNlcyBlYXJseSBhdCBzaHV0ZG93biAodGhlIHJlYWRsaW5lIG1vZHVsZSdzCiAgICAgIyBjb250ZW50cyBhcmUgcXVhc2ktaW1tb3J0YWwsIGFuZCB0aGUgY29tcGxldGVyIGZ1bmN0aW9uIGhvbGRzIGEKICAgICAjIHJlZmVyZW5jZSB0byBnbG9iYWxzKS4KICAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhOiByZWFkbGluZS5zZXRfY29tcGxldGVyKE5vbmUpKQorICAgIF9yZWFkbGluZV9hdmFpbGFibGUgPSBUcnVlCmRpZmYgLS1naXQgYS9MaWIvcnVucHkucHkgYi9MaWIvcnVucHkucHkKaW5kZXggMGJiNTdkNy4uYWY2MjA1ZCAxMDA2NDQKLS0tIGEvTGliL3J1bnB5LnB5CisrKyBiL0xpYi9ydW5weS5weQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICBzZWxmLnZhbHVlID0gc2VsZi5fc2VudGluZWwKICAgICAgICAgc3lzLmFyZ3ZbMF0gPSBzZWxmLl9zYXZlZF92YWx1ZQogCi0jIFRPRE86IFJlcGxhY2UgdGhlc2UgaGVscGVycyB3aXRoIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcworIyBUT0RPOiBSZXBsYWNlIHRoZXNlIGhlbHBlcnMgd2l0aCBpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbCBmdW5jdGlvbnMuCiBkZWYgX3J1bl9jb2RlKGNvZGUsIHJ1bl9nbG9iYWxzLCBpbml0X2dsb2JhbHM9Tm9uZSwKICAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX3NwZWM9Tm9uZSwKICAgICAgICAgICAgICAgcGtnX25hbWU9Tm9uZSwgc2NyaXB0X25hbWU9Tm9uZSk6CkBAIC05OSw3ICs5OSwyMiBAQAogICAgIHJldHVybiBtb2RfZ2xvYmFscy5jb3B5KCkKIAogIyBIZWxwZXIgdG8gZ2V0IHRoZSBsb2FkZXIsIGNvZGUgYW5kIGZpbGVuYW1lIGZvciBhIG1vZHVsZQotZGVmIF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpOgorZGVmIF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUsIGVycm9yPUltcG9ydEVycm9yKToKKyAgICBpZiBtb2RfbmFtZS5zdGFydHN3aXRoKCIuIik6CisgICAgICAgIHJhaXNlIGVycm9yKCJSZWxhdGl2ZSBtb2R1bGUgbmFtZXMgbm90IHN1cHBvcnRlZCIpCisgICAgcGtnX25hbWUsIF8sIF8gPSBtb2RfbmFtZS5ycGFydGl0aW9uKCIuIikKKyAgICBpZiBwa2dfbmFtZToKKyAgICAgICAgIyBUcnkgaW1wb3J0aW5nIHRoZSBwYXJlbnQgdG8gYXZvaWQgY2F0Y2hpbmcgaW5pdGlhbGl6YXRpb24gZXJyb3JzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9faW1wb3J0X18ocGtnX25hbWUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICAgICAgICAgIyBJZiB0aGUgcGFyZW50IG9yIGhpZ2hlciBhbmNlc3RvciBwYWNrYWdlIGlzIG1pc3NpbmcsIGxldCB0aGUKKyAgICAgICAgICAgICMgZXJyb3IgYmUgcmFpc2VkIGJ5IGZpbmRfc3BlYygpIGJlbG93IGFuZCB0aGVuIGJlIGNhdWdodC4gQnV0IGRvCisgICAgICAgICAgICAjIG5vdCBhbGxvdyBvdGhlciBlcnJvcnMgdG8gYmUgY2F1Z2h0LgorICAgICAgICAgICAgaWYgZS5uYW1lIGlzIE5vbmUgb3IgKGUubmFtZSAhPSBwa2dfbmFtZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbm90IHBrZ19uYW1lLnN0YXJ0c3dpdGgoZS5uYW1lICsgIi4iKSk6CisgICAgICAgICAgICAgICAgcmFpc2UKKwogICAgIHRyeToKICAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYyhtb2RfbmFtZSkKICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yLCBWYWx1ZUVycm9yKSBhcyBleDoKQEAgLTEwNywyNyArMTIyLDM1IEBACiAgICAgICAgICMgaW1wb3J0bGliLCB3aGVyZSB0aGUgbGF0dGVyIHJhaXNlcyBvdGhlciBlcnJvcnMgZm9yIGNhc2VzIHdoZXJlCiAgICAgICAgICMgcGtndXRpbCBwcmV2aW91c2x5IHJhaXNlZCBJbXBvcnRFcnJvcgogICAgICAgICBtc2cgPSAiRXJyb3Igd2hpbGUgZmluZGluZyBzcGVjIGZvciB7IXJ9ICh7fToge30pIgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KG1vZF9uYW1lLCB0eXBlKGV4KSwgZXgpKSBmcm9tIGV4CisgICAgICAgIHJhaXNlIGVycm9yKG1zZy5mb3JtYXQobW9kX25hbWUsIHR5cGUoZXgpLl9fbmFtZV9fLCBleCkpIGZyb20gZXgKICAgICBpZiBzcGVjIGlzIE5vbmU6Ci0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJObyBtb2R1bGUgbmFtZWQgJXMiICUgbW9kX25hbWUpCisgICAgICAgIHJhaXNlIGVycm9yKCJObyBtb2R1bGUgbmFtZWQgJXMiICUgbW9kX25hbWUpCiAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKICAgICAgICAgaWYgbW9kX25hbWUgPT0gIl9fbWFpbl9fIiBvciBtb2RfbmFtZS5lbmRzd2l0aCgiLl9fbWFpbl9fIik6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiQ2Fubm90IHVzZSBwYWNrYWdlIGFzIF9fbWFpbl9fIG1vZHVsZSIpCisgICAgICAgICAgICByYWlzZSBlcnJvcigiQ2Fubm90IHVzZSBwYWNrYWdlIGFzIF9fbWFpbl9fIG1vZHVsZSIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBrZ19tYWluX25hbWUgPSBtb2RfbmFtZSArICIuX19tYWluX18iCi0gICAgICAgICAgICByZXR1cm4gX2dldF9tb2R1bGVfZGV0YWlscyhwa2dfbWFpbl9uYW1lKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCgiJXM7ICVyIGlzIGEgcGFja2FnZSBhbmQgY2Fubm90ICIgKworICAgICAgICAgICAgcmV0dXJuIF9nZXRfbW9kdWxlX2RldGFpbHMocGtnX21haW5fbmFtZSwgZXJyb3IpCisgICAgICAgIGV4Y2VwdCBlcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgbW9kX25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIHJhaXNlICAjIE5vIG1vZHVsZSBsb2FkZWQ7IGJlaW5nIGEgcGFja2FnZSBpcyBpcnJlbGV2YW50CisgICAgICAgICAgICByYWlzZSBlcnJvcigoIiVzOyAlciBpcyBhIHBhY2thZ2UgYW5kIGNhbm5vdCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgZGlyZWN0bHkgZXhlY3V0ZWQiKSAlKGUsIG1vZF9uYW1lKSkKICAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgogICAgIGlmIGxvYWRlciBpcyBOb25lOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiJXIgaXMgYSBuYW1lc3BhY2UgcGFja2FnZSBhbmQgY2Fubm90IGJlIGV4ZWN1dGVkIgorICAgICAgICByYWlzZSBlcnJvcigiJXIgaXMgYSBuYW1lc3BhY2UgcGFja2FnZSBhbmQgY2Fubm90IGJlIGV4ZWN1dGVkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG1vZF9uYW1lKQotICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUobW9kX25hbWUpCisgICAgdHJ5OgorICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKG1vZF9uYW1lKQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICAgICByYWlzZSBlcnJvcihmb3JtYXQoZSkpIGZyb20gZQogICAgIGlmIGNvZGUgaXMgTm9uZToKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIk5vIGNvZGUgb2JqZWN0IGF2YWlsYWJsZSBmb3IgJXMiICUgbW9kX25hbWUpCisgICAgICAgIHJhaXNlIGVycm9yKCJObyBjb2RlIG9iamVjdCBhdmFpbGFibGUgZm9yICVzIiAlIG1vZF9uYW1lKQogICAgIHJldHVybiBtb2RfbmFtZSwgc3BlYywgY29kZQogCitjbGFzcyBfRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJFcnJvciB0aGF0IF9ydW5fbW9kdWxlX2FzX21haW4oKSBzaG91bGQgcmVwb3J0IHdpdGhvdXQgYSB0cmFjZWJhY2siIiIKKwogIyBYWFggbmNvZ2hsYW46IFNob3VsZCB0aGlzIGJlIGRvY3VtZW50ZWQgYW5kIG1hZGUgcHVibGljPwogIyAoQ3VycmVudCB0aG91Z2h0czogZG9uJ3QgcmVwZWF0IHRoZSBtaXN0YWtlIHRoYXQgbGVhZCB0byBpdHMKICMgY3JlYXRpb24gd2hlbiBydW5fbW9kdWxlKCkgbm8gbG9uZ2VyIG1ldCB0aGUgbmVlZHMgb2YKQEAgLTE0OCwyMCArMTcxLDExIEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBpZiBhbHRlcl9hcmd2IG9yIG1vZF9uYW1lICE9ICJfX21haW5fXyI6ICMgaS5lLiAtbSBzd2l0Y2gKLSAgICAgICAgICAgIG1vZF9uYW1lLCBtb2Rfc3BlYywgY29kZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCisgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIGNvZGUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lLCBfRXJyb3IpCiAgICAgICAgIGVsc2U6ICAgICAgICAgICMgaS5lLiBkaXJlY3Rvcnkgb3IgemlwZmlsZSBleGVjdXRpb24KLSAgICAgICAgICAgIG1vZF9uYW1lLCBtb2Rfc3BlYywgY29kZSA9IF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpCi0gICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKLSAgICAgICAgIyBUcnkgdG8gcHJvdmlkZSBhIGdvb2QgZXJyb3IgbWVzc2FnZQotICAgICAgICAjIGZvciBkaXJlY3RvcmllcywgemlwIGZpbGVzIGFuZCB0aGUgLW0gc3dpdGNoCi0gICAgICAgIGlmIGFsdGVyX2FyZ3Y6Ci0gICAgICAgICAgICAjIEZvciAtbSBzd2l0Y2gsIGp1c3QgZGlzcGxheSB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICBpbmZvID0gc3RyKGV4YykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgRm9yIGRpcmVjdG9yaWVzL3ppcGZpbGVzLCBsZXQgdGhlIHVzZXIKLSAgICAgICAgICAgICMga25vdyB3aGF0IHRoZSBjb2RlIHdhcyBsb29raW5nIGZvcgotICAgICAgICAgICAgaW5mbyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHN5cy5hcmd2WzBdCi0gICAgICAgIG1zZyA9ICIlczogJXMiICUgKHN5cy5leGVjdXRhYmxlLCBpbmZvKQorICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9zcGVjLCBjb2RlID0gX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKF9FcnJvcikKKyAgICBleGNlcHQgX0Vycm9yIGFzIGV4YzoKKyAgICAgICAgbXNnID0gIiVzOiAlcyIgJSAoc3lzLmV4ZWN1dGFibGUsIGV4YykKICAgICAgICAgc3lzLmV4aXQobXNnKQogICAgIG1haW5fZ2xvYmFscyA9IHN5cy5tb2R1bGVzWyJfX21haW5fXyJdLl9fZGljdF9fCiAgICAgaWYgYWx0ZXJfYXJndjoKQEAgLTE4NCw3ICsxOTgsNyBAQAogICAgICAgICAjIExlYXZlIHRoZSBzeXMgbW9kdWxlIGFsb25lCiAgICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwge30sIGluaXRfZ2xvYmFscywgcnVuX25hbWUsIG1vZF9zcGVjKQogCi1kZWYgX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCk6CitkZWYgX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKGVycm9yPUltcG9ydEVycm9yKToKICAgICAjIEhlbHBlciB0aGF0IGdpdmVzIGEgbmljZXIgZXJyb3IgbWVzc2FnZSB3aGVuIGF0dGVtcHRpbmcgdG8KICAgICAjIGV4ZWN1dGUgYSB6aXBmaWxlIG9yIGRpcmVjdG9yeSBieSBpbnZva2luZyBfX21haW5fXy5weQogICAgICMgQWxzbyBtb3ZlcyB0aGUgc3RhbmRhcmQgX19tYWluX18gb3V0IG9mIHRoZSB3YXkgc28gdGhhdCB0aGUKQEAgLTE5Niw3ICsyMTAsNyBAQAogICAgICAgICByZXR1cm4gX2dldF9tb2R1bGVfZGV0YWlscyhtYWluX25hbWUpCiAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKICAgICAgICAgaWYgbWFpbl9uYW1lIGluIHN0cihleGMpOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImNhbid0IGZpbmQgJXIgbW9kdWxlIGluICVyIiAlCisgICAgICAgICAgICByYWlzZSBlcnJvcigiY2FuJ3QgZmluZCAlciBtb2R1bGUgaW4gJXIiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWluX25hbWUsIHN5cy5wYXRoWzBdKSkgZnJvbSBleGMKICAgICAgICAgcmFpc2UKICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3NjaGVkLnB5IGIvTGliL3NjaGVkLnB5CmluZGV4IDJlNmIwMGEuLmI0NzY0OGQgMTAwNjQ0Ci0tLSBhL0xpYi9zY2hlZC5weQorKysgYi9MaWIvc2NoZWQucHkKQEAgLTM1LDE2ICszNSwxMiBAQAogICAgIGltcG9ydCB0aHJlYWRpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nIGFzIHRocmVhZGluZwotdHJ5OgotICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIF90aW1lCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCitmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQogCiBfX2FsbF9fID0gWyJzY2hlZHVsZXIiXQogCiBjbGFzcyBFdmVudChuYW1lZHR1cGxlKCdFdmVudCcsICd0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzJykpOgogICAgIGRlZiBfX2VxX18ocywgbyk6IHJldHVybiAocy50aW1lLCBzLnByaW9yaXR5KSA9PSAoby50aW1lLCBvLnByaW9yaXR5KQotICAgIGRlZiBfX25lX18ocywgbyk6IHJldHVybiAocy50aW1lLCBzLnByaW9yaXR5KSAhPSAoby50aW1lLCBvLnByaW9yaXR5KQogICAgIGRlZiBfX2x0X18ocywgbyk6IHJldHVybiAocy50aW1lLCBzLnByaW9yaXR5KSA8ICAoby50aW1lLCBvLnByaW9yaXR5KQogICAgIGRlZiBfX2xlX18ocywgbyk6IHJldHVybiAocy50aW1lLCBzLnByaW9yaXR5KSA8PSAoby50aW1lLCBvLnByaW9yaXR5KQogICAgIGRlZiBfX2d0X18ocywgbyk6IHJldHVybiAocy50aW1lLCBzLnByaW9yaXR5KSA+ICAoby50aW1lLCBvLnByaW9yaXR5KQpkaWZmIC0tZ2l0IGEvTGliL3NlbGVjdG9ycy5weSBiL0xpYi9zZWxlY3RvcnMucHkKaW5kZXggN2I2ZGEyOS4uZDg3NjllMyAxMDA2NDQKLS0tIGEvTGliL3NlbGVjdG9ycy5weQorKysgYi9MaWIvc2VsZWN0b3JzLnB5CkBAIC00Myw5ICs0MywxOCBAQAogCiAKIFNlbGVjdG9yS2V5ID0gbmFtZWR0dXBsZSgnU2VsZWN0b3JLZXknLCBbJ2ZpbGVvYmonLCAnZmQnLCAnZXZlbnRzJywgJ2RhdGEnXSkKLSIiIk9iamVjdCB1c2VkIHRvIGFzc29jaWF0ZSBhIGZpbGUgb2JqZWN0IHRvIGl0cyBiYWNraW5nIGZpbGUgZGVzY3JpcHRvciwKLXNlbGVjdGVkIGV2ZW50IG1hc2sgYW5kIGF0dGFjaGVkIGRhdGEuIiIiCiAKK1NlbGVjdG9yS2V5Ll9fZG9jX18gPSAiIiJTZWxlY3RvcktleShmaWxlb2JqLCBmZCwgZXZlbnRzLCBkYXRhKQorCisgICAgT2JqZWN0IHVzZWQgdG8gYXNzb2NpYXRlIGEgZmlsZSBvYmplY3QgdG8gaXRzIGJhY2tpbmcKKyAgICBmaWxlIGRlc2NyaXB0b3IsIHNlbGVjdGVkIGV2ZW50IG1hc2ssIGFuZCBhdHRhY2hlZCBkYXRhLgorIiIiCitpZiBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA1KToKKyAgICBTZWxlY3RvcktleS5maWxlb2JqLl9fZG9jX18gPSAnRmlsZSBvYmplY3QgcmVnaXN0ZXJlZC4nCisgICAgU2VsZWN0b3JLZXkuZmQuX19kb2NfXyA9ICdVbmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4nCisgICAgU2VsZWN0b3JLZXkuZXZlbnRzLl9fZG9jX18gPSAnRXZlbnRzIHRoYXQgbXVzdCBiZSB3YWl0ZWQgZm9yIG9uIHRoaXMgZmlsZSBvYmplY3QuJworICAgIFNlbGVjdG9yS2V5LmRhdGEuX19kb2NfXyA9ICgnJydPcHRpb25hbCBvcGFxdWUgZGF0YSBhc3NvY2lhdGVkIHRvIHRoaXMgZmlsZSBvYmplY3QuCisgICAgRm9yIGV4YW1wbGUsIHRoaXMgY291bGQgYmUgdXNlZCB0byBzdG9yZSBhIHBlci1jbGllbnQgc2Vzc2lvbiBJRC4nJycpCiAKIGNsYXNzIF9TZWxlY3Rvck1hcHBpbmcoTWFwcGluZyk6CiAgICAgIiIiTWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4iIiIKQEAgLTE3NCw5ICsxODMsOSBAQAogICAgICAgICBTZWxlY3RvcktleSBmb3IgdGhpcyBmaWxlIG9iamVjdAogICAgICAgICAiIiIKICAgICAgICAgbWFwcGluZyA9IHNlbGYuZ2V0X21hcCgpCisgICAgICAgIGlmIG1hcHBpbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignU2VsZWN0b3IgaXMgY2xvc2VkJykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbWFwcGluZyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCiAgICAgICAgICAgICByZXR1cm4gbWFwcGluZ1tmaWxlb2JqXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKQEAgLTQ0NSwxMCArNDU0LDY2IEBACiAgICAgICAgICAgICByZXR1cm4gcmVhZHkKIAogICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9lcG9sbC5jbG9zZSgpCisgICAgICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ2RldnBvbGwnKToKKworICAgIGNsYXNzIERldnBvbGxTZWxlY3RvcihfQmFzZVNlbGVjdG9ySW1wbCk6CisgICAgICAgICIiIlNvbGFyaXMgL2Rldi9wb2xsIHNlbGVjdG9yLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5fZGV2cG9sbCA9IHNlbGVjdC5kZXZwb2xsKCkKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RldnBvbGwuZmlsZW5vKCkKKworICAgICAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgICAgICBwb2xsX2V2ZW50cyA9IDAKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgcG9sbF9ldmVudHMgfD0gc2VsZWN0LlBPTExJTgorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgcG9sbF9ldmVudHMgfD0gc2VsZWN0LlBPTExPVVQKKyAgICAgICAgICAgIHNlbGYuX2RldnBvbGwucmVnaXN0ZXIoa2V5LmZkLCBwb2xsX2V2ZW50cykKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5fZGV2cG9sbC51bnJlZ2lzdGVyKGtleS5mZCkKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgICAgIGVsaWYgdGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZGV2cG9sbCgpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwgcm91bmQgYXdheSBmcm9tCisgICAgICAgICAgICAgICAgIyB6ZXJvIHRvIHdhaXQgKmF0IGxlYXN0KiB0aW1lb3V0IHNlY29uZHMuCisgICAgICAgICAgICAgICAgdGltZW91dCA9IG1hdGguY2VpbCh0aW1lb3V0ICogMWUzKQorICAgICAgICAgICAgcmVhZHkgPSBbXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2Vwb2xsLmNsb3NlKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZmRfZXZlbnRfbGlzdCA9IHNlbGYuX2RldnBvbGwucG9sbCh0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIGZkX2V2ZW50X2xpc3Q6CisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5QT0xMSU46CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5QT0xMT1VUOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9kZXZwb2xsLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQogCiAKIGlmIGhhc2F0dHIoc2VsZWN0LCAna3F1ZXVlJyk6CkBAIC01MTksMTggKzU4NCwxOSBAQAogICAgICAgICAgICAgcmV0dXJuIHJlYWR5CiAKICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jbG9zZSgpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQogCiAKLSMgQ2hvb3NlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uOiByb3VnaGx5LCBlcG9sbHxrcXVldWUgPiBwb2xsID4gc2VsZWN0LgorIyBDaG9vc2UgdGhlIGJlc3QgaW1wbGVtZW50YXRpb24sIHJvdWdobHk6CisjICAgIGVwb2xsfGtxdWV1ZXxkZXZwb2xsID4gcG9sbCA+IHNlbGVjdC4KICMgc2VsZWN0KCkgYWxzbyBjYW4ndCBhY2NlcHQgYSBGRCA+IEZEX1NFVFNJWkUgKHVzdWFsbHkgYXJvdW5kIDEwMjQpCiBpZiAnS3F1ZXVlU2VsZWN0b3InIGluIGdsb2JhbHMoKToKICAgICBEZWZhdWx0U2VsZWN0b3IgPSBLcXVldWVTZWxlY3RvcgogZWxpZiAnRXBvbGxTZWxlY3RvcicgaW4gZ2xvYmFscygpOgogICAgIERlZmF1bHRTZWxlY3RvciA9IEVwb2xsU2VsZWN0b3IKK2VsaWYgJ0RldnBvbGxTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IERldnBvbGxTZWxlY3RvcgogZWxpZiAnUG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CiAgICAgRGVmYXVsdFNlbGVjdG9yID0gUG9sbFNlbGVjdG9yCiBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3NobGV4LnB5IGIvTGliL3NobGV4LnB5CmluZGV4IDQ2NzI1NTMuLmYwODM5MTggMTAwNjQ0Ci0tLSBhL0xpYi9zaGxleC5weQorKysgYi9MaWIvc2hsZXgucHkKQEAgLTQ5LDkgKzQ5LDYgQEAKICAgICAgICAgc2VsZi50b2tlbiA9ICcnCiAgICAgICAgIHNlbGYuZmlsZXN0YWNrID0gZGVxdWUoKQogICAgICAgICBzZWxmLnNvdXJjZSA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKLSAgICAgICAgICAgIHByaW50KCdzaGxleDogcmVhZGluZyBmcm9tICVzLCBsaW5lICVkJyBcCi0gICAgICAgICAgICAgICAgICAlIChzZWxmLmluc3RyZWFtLCBzZWxmLmxpbmVubykpCiAKICAgICBkZWYgcHVzaF90b2tlbihzZWxmLCB0b2spOgogICAgICAgICAiUHVzaCBhIHRva2VuIG9udG8gdGhlIHN0YWNrIHBvcHBlZCBieSB0aGUgZ2V0X3Rva2VuIG1ldGhvZCIKZGlmZiAtLWdpdCBhL0xpYi9zaHV0aWwucHkgYi9MaWIvc2h1dGlsLnB5CmluZGV4IGQ3NjdhMGMuLjMxNzQ2NDggMTAwNjQ0Ci0tLSBhL0xpYi9zaHV0aWwucHkKKysrIGIvTGliL3NodXRpbC5weQpAQCAtNyw3ICs3LDYgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHN0YXQKLWZyb20gb3MucGF0aCBpbXBvcnQgYWJzcGF0aAogaW1wb3J0IGZubWF0Y2gKIGltcG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IGVycm5vCkBAIC0yMSw2ICsyMCwxMyBAQAogICAgIF9CWjJfU1VQUE9SVEVEID0gRmFsc2UKIAogdHJ5OgorICAgIGltcG9ydCBsem1hCisgICAgZGVsIGx6bWEKKyAgICBfTFpNQV9TVVBQT1JURUQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX0xaTUFfU1VQUE9SVEVEID0gRmFsc2UKKwordHJ5OgogICAgIGZyb20gcHdkIGltcG9ydCBnZXRwd25hbQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGdldHB3bmFtID0gTm9uZQpAQCAtNDkxLDcgKzQ5Nyw3IEBACiAgICAgc2VwID0gb3MucGF0aC5zZXAgKyAob3MucGF0aC5hbHRzZXAgb3IgJycpCiAgICAgcmV0dXJuIG9zLnBhdGguYmFzZW5hbWUocGF0aC5yc3RyaXAoc2VwKSkKIAotZGVmIG1vdmUoc3JjLCBkc3QpOgorZGVmIG1vdmUoc3JjLCBkc3QsIGNvcHlfZnVuY3Rpb249Y29weTIpOgogICAgICIiIlJlY3Vyc2l2ZWx5IG1vdmUgYSBmaWxlIG9yIGRpcmVjdG9yeSB0byBhbm90aGVyIGxvY2F0aW9uLiBUaGlzIGlzCiAgICAgc2ltaWxhciB0byB0aGUgVW5peCAibXYiIGNvbW1hbmQuIFJldHVybiB0aGUgZmlsZSBvciBkaXJlY3RvcnkncwogICAgIGRlc3RpbmF0aW9uLgpAQCAtNTA4LDYgKzUxNCwxMSBAQAogICAgIHJlY3JlYXRlZCB1bmRlciB0aGUgbmV3IG5hbWUgaWYgb3MucmVuYW1lKCkgZmFpbHMgYmVjYXVzZSBvZiBjcm9zcwogICAgIGZpbGVzeXN0ZW0gcmVuYW1lcy4KIAorICAgIFRoZSBvcHRpb25hbCBgY29weV9mdW5jdGlvbmAgYXJndW1lbnQgaXMgYSBjYWxsYWJsZSB0aGF0IHdpbGwgYmUgdXNlZAorICAgIHRvIGNvcHkgdGhlIHNvdXJjZSBvciBpdCB3aWxsIGJlIGRlbGVnYXRlZCB0byBgY29weXRyZWVgLgorICAgIEJ5IGRlZmF1bHQsIGNvcHkyKCkgaXMgdXNlZCwgYnV0IGFueSBmdW5jdGlvbiB0aGF0IHN1cHBvcnRzIHRoZSBzYW1lCisgICAgc2lnbmF0dXJlIChsaWtlIGNvcHkoKSkgY2FuIGJlIHVzZWQuCisKICAgICBBIGxvdCBtb3JlIGNvdWxkIGJlIGRvbmUgaGVyZS4uLiAgQSBsb29rIGF0IGEgbXYuYyBzaG93cyBhIGxvdCBvZgogICAgIHRoZSBpc3N1ZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBnbG9zc2VzIG92ZXIuCiAKQEAgLTUzMiwxNyArNTQzLDE5IEBACiAgICAgICAgICAgICBvcy51bmxpbmsoc3JjKQogICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoc3JjKToKICAgICAgICAgICAgIGlmIF9kZXN0aW5zcmMoc3JjLCBkc3QpOgotICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJDYW5ub3QgbW92ZSBhIGRpcmVjdG9yeSAnJXMnIGludG8gaXRzZWxmICclcycuIiAlIChzcmMsIGRzdCkpCi0gICAgICAgICAgICBjb3B5dHJlZShzcmMsIHJlYWxfZHN0LCBzeW1saW5rcz1UcnVlKQorICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJDYW5ub3QgbW92ZSBhIGRpcmVjdG9yeSAnJXMnIGludG8gaXRzZWxmIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgJyVzJy4iICUgKHNyYywgZHN0KSkKKyAgICAgICAgICAgIGNvcHl0cmVlKHNyYywgcmVhbF9kc3QsIGNvcHlfZnVuY3Rpb249Y29weV9mdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPVRydWUpCiAgICAgICAgICAgICBybXRyZWUoc3JjKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29weTIoc3JjLCByZWFsX2RzdCkKKyAgICAgICAgICAgIGNvcHlfZnVuY3Rpb24oc3JjLCByZWFsX2RzdCkKICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCiAgICAgcmV0dXJuIHJlYWxfZHN0CiAKIGRlZiBfZGVzdGluc3JjKHNyYywgZHN0KToKLSAgICBzcmMgPSBhYnNwYXRoKHNyYykKLSAgICBkc3QgPSBhYnNwYXRoKGRzdCkKKyAgICBzcmMgPSBvcy5wYXRoLmFic3BhdGgoc3JjKQorICAgIGRzdCA9IG9zLnBhdGguYWJzcGF0aChkc3QpCiAgICAgaWYgbm90IHNyYy5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CiAgICAgICAgIHNyYyArPSBvcy5wYXRoLnNlcAogICAgIGlmIG5vdCBkc3QuZW5kc3dpdGgob3MucGF0aC5zZXApOgpAQCAtNTc4LDE0ICs1OTEsMTQgQEAKICAgICAiIiJDcmVhdGUgYSAocG9zc2libHkgY29tcHJlc3NlZCkgdGFyIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyCiAgICAgJ2Jhc2VfZGlyJy4KIAotICAgICdjb21wcmVzcycgbXVzdCBiZSAiZ3ppcCIgKHRoZSBkZWZhdWx0KSwgImJ6aXAyIiwgb3IgTm9uZS4KKyAgICAnY29tcHJlc3MnIG11c3QgYmUgImd6aXAiICh0aGUgZGVmYXVsdCksICJiemlwMiIsICJ4eiIsIG9yIE5vbmUuCiAKICAgICAnb3duZXInIGFuZCAnZ3JvdXAnIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBvd25lciBhbmQgYSBncm91cCBmb3IgdGhlCiAgICAgYXJjaGl2ZSB0aGF0IGlzIGJlaW5nIGJ1aWx0LiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IG93bmVyIGFuZCBncm91cAogICAgIHdpbGwgYmUgdXNlZC4KIAogICAgIFRoZSBvdXRwdXQgdGFyIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9uYW1lJyArICAiLnRhciIsIHBvc3NpYmx5IHBsdXMKLSAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6Iiwgb3IgIi5iejIiKS4KKyAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6IiwgIi5iejIiLCBvciAiLnh6IikuCiAKICAgICBSZXR1cm5zIHRoZSBvdXRwdXQgZmlsZW5hbWUuCiAgICAgIiIiCkBAIC01OTYsNiArNjA5LDEwIEBACiAgICAgICAgIHRhcl9jb21wcmVzc2lvblsnYnppcDInXSA9ICdiejInCiAgICAgICAgIGNvbXByZXNzX2V4dFsnYnppcDInXSA9ICcuYnoyJwogCisgICAgaWYgX0xaTUFfU1VQUE9SVEVEOgorICAgICAgICB0YXJfY29tcHJlc3Npb25bJ3h6J10gPSAneHonCisgICAgICAgIGNvbXByZXNzX2V4dFsneHonXSA9ICcueHonCisKICAgICAjIGZsYWdzIGZvciBjb21wcmVzc2lvbiBwcm9ncmFtLCBlYWNoIGVsZW1lbnQgb2YgbGlzdCB3aWxsIGJlIGFuIGFyZ3VtZW50CiAgICAgaWYgY29tcHJlc3MgaXMgbm90IE5vbmUgYW5kIGNvbXByZXNzIG5vdCBpbiBjb21wcmVzc19leHQ6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJhZCB2YWx1ZSBmb3IgJ2NvbXByZXNzJywgb3IgY29tcHJlc3Npb24gZm9ybWF0IG5vdCAiCkBAIC02MzUsMjMgKzY1Miw2IEBACiAKICAgICByZXR1cm4gYXJjaGl2ZV9uYW1lCiAKLWRlZiBfY2FsbF9leHRlcm5hbF96aXAoYmFzZV9kaXIsIHppcF9maWxlbmFtZSwgdmVyYm9zZT1GYWxzZSwgZHJ5X3J1bj1GYWxzZSk6Ci0gICAgIyBYWFggc2VlIGlmIHdlIHdhbnQgdG8ga2VlcCBhbiBleHRlcm5hbCBjYWxsIGhlcmUKLSAgICBpZiB2ZXJib3NlOgotICAgICAgICB6aXBvcHRpb25zID0gIi1yIgotICAgIGVsc2U6Ci0gICAgICAgIHppcG9wdGlvbnMgPSAiLXJxIgotICAgIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yCi0gICAgZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi0gICAgdHJ5OgotICAgICAgICBzcGF3bihbInppcCIsIHppcG9wdGlvbnMsIHppcF9maWxlbmFtZSwgYmFzZV9kaXJdLCBkcnlfcnVuPWRyeV9ydW4pCi0gICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvcjoKLSAgICAgICAgIyBYWFggcmVhbGx5IHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuICJjb3VsZG4ndCBmaW5kCi0gICAgICAgICMgZXh0ZXJuYWwgJ3ppcCcgY29tbWFuZCIgYW5kICJ6aXAgZmFpbGVkIi4KLSAgICAgICAgcmFpc2UgRXhlY0Vycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHppcCBmaWxlICclcyc6ICIKLSAgICAgICAgICAgICJjb3VsZCBuZWl0aGVyIGltcG9ydCB0aGUgJ3ppcGZpbGUnIG1vZHVsZSBub3IgIgotICAgICAgICAgICAgImZpbmQgYSBzdGFuZGFsb25lIHppcCB1dGlsaXR5IikgJSB6aXBfZmlsZW5hbWUKLQogZGVmIF9tYWtlX3ppcGZpbGUoYmFzZV9uYW1lLCBiYXNlX2RpciwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsIGxvZ2dlcj1Ob25lKToKICAgICAiIiJDcmVhdGUgYSB6aXAgZmlsZSBmcm9tIGFsbCB0aGUgZmlsZXMgdW5kZXIgJ2Jhc2VfZGlyJy4KIApAQCAtNjYxLDYgKzY2MSw4IEBACiAgICAgYXZhaWxhYmxlLCByYWlzZXMgRXhlY0Vycm9yLiAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IHppcAogICAgIGZpbGUuCiAgICAgIiIiCisgICAgaW1wb3J0IHppcGZpbGUKKwogICAgIHppcF9maWxlbmFtZSA9IGJhc2VfbmFtZSArICIuemlwIgogICAgIGFyY2hpdmVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJhc2VfbmFtZSkKIApAQCAtNjcwLDM5ICs2NzIsMjkgQEAKICAgICAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgICAgICBvcy5tYWtlZGlycyhhcmNoaXZlX2RpcikKIAotICAgICMgSWYgemlwZmlsZSBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSwgdHJ5IHNwYXduaW5nIGFuIGV4dGVybmFsICd6aXAnCi0gICAgIyBjb21tYW5kLgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IHppcGZpbGUKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHppcGZpbGUgPSBOb25lCisgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJyVzJyBhbmQgYWRkaW5nICclcycgdG8gaXQiLAorICAgICAgICAgICAgICAgICAgICB6aXBfZmlsZW5hbWUsIGJhc2VfZGlyKQogCi0gICAgaWYgemlwZmlsZSBpcyBOb25lOgotICAgICAgICBfY2FsbF9leHRlcm5hbF96aXAoYmFzZV9kaXIsIHppcF9maWxlbmFtZSwgdmVyYm9zZSwgZHJ5X3J1bikKLSAgICBlbHNlOgotICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJyVzJyBhbmQgYWRkaW5nICclcycgdG8gaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgemlwX2ZpbGVuYW1lLCBiYXNlX2RpcikKLQotICAgICAgICBpZiBub3QgZHJ5X3J1bjoKLSAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHppcF9maWxlbmFtZSwgInciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHpmOgotICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKGJhc2VfZGlyKQotICAgICAgICAgICAgICAgIHpmLndyaXRlKHBhdGgsIHBhdGgpCi0gICAgICAgICAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiYWRkaW5nICclcyciLCBwYXRoKQotICAgICAgICAgICAgICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoYmFzZV9kaXIpOgotICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoZGlybmFtZXMpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGRpcnBhdGgsIG5hbWUpKQorICAgIGlmIG5vdCBkcnlfcnVuOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZW5hbWUsICJ3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249emlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHpmOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoYmFzZV9kaXIpCisgICAgICAgICAgICB6Zi53cml0ZShwYXRoLCBwYXRoKQorICAgICAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJhZGRpbmcgJyVzJyIsIHBhdGgpCisgICAgICAgICAgICBmb3IgZGlycGF0aCwgZGlybmFtZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKGJhc2VfZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoZGlybmFtZXMpOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZGlycGF0aCwgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHpmLndyaXRlKHBhdGgsIHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJhZGRpbmcgJyVzJyIsIHBhdGgpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZGlycGF0aCwgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgogICAgICAgICAgICAgICAgICAgICAgICAgemYud3JpdGUocGF0aCwgcGF0aCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiYWRkaW5nICclcyciLCBwYXRoKQotICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZGlycGF0aCwgbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6Zi53cml0ZShwYXRoLCBwYXRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImFkZGluZyAnJXMnIiwgcGF0aCkKIAogICAgIHJldHVybiB6aXBfZmlsZW5hbWUKIApAQCAtNzE2LDYgKzcwOCwxMCBAQAogICAgIF9BUkNISVZFX0ZPUk1BVFNbJ2J6dGFyJ10gPSAoX21ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCAnYnppcDInKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiemlwMidlZCB0YXItZmlsZSIpCiAKK2lmIF9MWk1BX1NVUFBPUlRFRDoKKyAgICBfQVJDSElWRV9GT1JNQVRTWyd4enRhciddID0gKF9tYWtlX3RhcmJhbGwsIFsoJ2NvbXByZXNzJywgJ3h6JyldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieHonZWQgdGFyLWZpbGUiKQorCiBkZWYgZ2V0X2FyY2hpdmVfZm9ybWF0cygpOgogICAgICIiIlJldHVybnMgYSBsaXN0IG9mIHN1cHBvcnRlZCBmb3JtYXRzIGZvciBhcmNoaXZpbmcgYW5kIHVuYXJjaGl2aW5nLgogCkBAIC04NTcsNyArODUzLDcgQEAKICAgICBfVU5QQUNLX0ZPUk1BVFNbbmFtZV0gPSBleHRlbnNpb25zLCBmdW5jdGlvbiwgZXh0cmFfYXJncywgZGVzY3JpcHRpb24KIAogZGVmIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdChuYW1lKToKLSAgICAiIiJSZW1vdmVzIHRoZSBwYWNrIGZvcm1hdCBmcm9tIHRoZSByZWdpc3RlcnkuIiIiCisgICAgIiIiUmVtb3ZlcyB0aGUgcGFjayBmb3JtYXQgZnJvbSB0aGUgcmVnaXN0cnkuIiIiCiAgICAgZGVsIF9VTlBBQ0tfRk9STUFUU1tuYW1lXQogCiBkZWYgX2Vuc3VyZV9kaXJlY3RvcnkocGF0aCk6CkBAIC05MDQsNyArOTAwLDcgQEAKICAgICAgICAgemlwLmNsb3NlKCkKIAogZGVmIF91bnBhY2tfdGFyZmlsZShmaWxlbmFtZSwgZXh0cmFjdF9kaXIpOgotICAgICIiIlVucGFjayB0YXIvdGFyLmd6L3Rhci5iejIgYGZpbGVuYW1lYCB0byBgZXh0cmFjdF9kaXJgCisgICAgIiIiVW5wYWNrIHRhci90YXIuZ3ovdGFyLmJ6Mi90YXIueHogYGZpbGVuYW1lYCB0byBgZXh0cmFjdF9kaXJgCiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICB0YXJvYmogPSB0YXJmaWxlLm9wZW4oZmlsZW5hbWUpCkBAIC05MjMsOSArOTE5LDEzIEBACiAgICAgfQogCiBpZiBfQloyX1NVUFBPUlRFRDoKLSAgICBfVU5QQUNLX0ZPUk1BVFNbJ2J6dGFyJ10gPSAoWycuYnoyJ10sIF91bnBhY2tfdGFyZmlsZSwgW10sCisgICAgX1VOUEFDS19GT1JNQVRTWydienRhciddID0gKFsnLnRhci5iejInLCAnLnRiejInXSwgX3VucGFja190YXJmaWxlLCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ6aXAyJ2VkIHRhci1maWxlIikKIAoraWYgX0xaTUFfU1VQUE9SVEVEOgorICAgIF9VTlBBQ0tfRk9STUFUU1sneHp0YXInXSA9IChbJy50YXIueHonLCAnLnR4eiddLCBfdW5wYWNrX3RhcmZpbGUsIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieHonZWQgdGFyLWZpbGUiKQorCiBkZWYgX2ZpbmRfdW5wYWNrX2Zvcm1hdChmaWxlbmFtZSk6CiAgICAgZm9yIG5hbWUsIGluZm8gaW4gX1VOUEFDS19GT1JNQVRTLml0ZW1zKCk6CiAgICAgICAgIGZvciBleHRlbnNpb24gaW4gaW5mb1swXToKQEAgLTEwNjksNyArMTA2OSw5IEBACiAgICAgaWYgY29sdW1ucyA8PSAwIG9yIGxpbmVzIDw9IDA6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNpemUgPSBvcy5nZXRfdGVybWluYWxfc2l6ZShzeXMuX19zdGRvdXRfXy5maWxlbm8oKSkKLSAgICAgICAgZXhjZXB0IChOYW1lRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICMgc3Rkb3V0IGlzIE5vbmUsIGNsb3NlZCwgZGV0YWNoZWQsIG9yIG5vdCBhIHRlcm1pbmFsLCBvcgorICAgICAgICAgICAgIyBvcy5nZXRfdGVybWluYWxfc2l6ZSgpIGlzIHVuc3VwcG9ydGVkCiAgICAgICAgICAgICBzaXplID0gb3MudGVybWluYWxfc2l6ZShmYWxsYmFjaykKICAgICAgICAgaWYgY29sdW1ucyA8PSAwOgogICAgICAgICAgICAgY29sdW1ucyA9IHNpemUuY29sdW1ucwpkaWZmIC0tZ2l0IGEvTGliL3NpZ25hbC5weSBiL0xpYi9zaWduYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwNWM5MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zaWduYWwucHkKQEAgLTAsMCArMSw3OSBAQAoraW1wb3J0IF9zaWduYWwKK2Zyb20gX3NpZ25hbCBpbXBvcnQgKgorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzIGFzIF93cmFwcworZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtIGFzIF9JbnRFbnVtCisKK19nbG9iYWxzID0gZ2xvYmFscygpCisKK19JbnRFbnVtLl9jb252ZXJ0KAorICAgICAgICAnU2lnbmFscycsIF9fbmFtZV9fLAorICAgICAgICBsYW1iZGEgbmFtZToKKyAgICAgICAgICAgIG5hbWUuaXN1cHBlcigpCisgICAgICAgICAgICBhbmQgKG5hbWUuc3RhcnRzd2l0aCgnU0lHJykgYW5kIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ1NJR18nKSkKKyAgICAgICAgICAgIG9yIG5hbWUuc3RhcnRzd2l0aCgnQ1RSTF8nKSkKKworX0ludEVudW0uX2NvbnZlcnQoCisgICAgICAgICdIYW5kbGVycycsIF9fbmFtZV9fLAorICAgICAgICBsYW1iZGEgbmFtZTogbmFtZSBpbiAoJ1NJR19ERkwnLCAnU0lHX0lHTicpKQorCitpZiAncHRocmVhZF9zaWdtYXNrJyBpbiBfZ2xvYmFsczoKKyAgICBfSW50RW51bS5fY29udmVydCgKKyAgICAgICAgICAgICdTaWdtYXNrcycsIF9fbmFtZV9fLAorICAgICAgICAgICAgbGFtYmRhIG5hbWU6IG5hbWUgaW4gKCdTSUdfQkxPQ0snLCAnU0lHX1VOQkxPQ0snLCAnU0lHX1NFVE1BU0snKSkKKworCitkZWYgX2ludF90b19lbnVtKHZhbHVlLCBlbnVtX2tsYXNzKToKKyAgICAiIiJDb252ZXJ0IGEgbnVtZXJpYyB2YWx1ZSB0byBhbiBJbnRFbnVtIG1lbWJlci4KKyAgICBJZiBpdCdzIG5vdCBhIGtub3duIG1lbWJlciwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGl0c2VsZi4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBlbnVtX2tsYXNzKHZhbHVlKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICByZXR1cm4gdmFsdWUKKworCitkZWYgX2VudW1fdG9faW50KHZhbHVlKToKKyAgICAiIiJDb252ZXJ0IGFuIEludEVudW0gbWVtYmVyIHRvIGEgbnVtZXJpYyB2YWx1ZS4KKyAgICBJZiBpdCdzIG5vdCBhbiBJbnRFbnVtIG1lbWJlciByZXR1cm4gdGhlIHZhbHVlIGl0c2VsZi4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBpbnQodmFsdWUpCisgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICByZXR1cm4gdmFsdWUKKworCitAX3dyYXBzKF9zaWduYWwuc2lnbmFsKQorZGVmIHNpZ25hbChzaWduYWxudW0sIGhhbmRsZXIpOgorICAgIGhhbmRsZXIgPSBfc2lnbmFsLnNpZ25hbChfZW51bV90b19pbnQoc2lnbmFsbnVtKSwgX2VudW1fdG9faW50KGhhbmRsZXIpKQorICAgIHJldHVybiBfaW50X3RvX2VudW0oaGFuZGxlciwgSGFuZGxlcnMpCisKKworQF93cmFwcyhfc2lnbmFsLmdldHNpZ25hbCkKK2RlZiBnZXRzaWduYWwoc2lnbmFsbnVtKToKKyAgICBoYW5kbGVyID0gX3NpZ25hbC5nZXRzaWduYWwoc2lnbmFsbnVtKQorICAgIHJldHVybiBfaW50X3RvX2VudW0oaGFuZGxlciwgSGFuZGxlcnMpCisKKworaWYgJ3B0aHJlYWRfc2lnbWFzaycgaW4gX2dsb2JhbHM6CisgICAgQF93cmFwcyhfc2lnbmFsLnB0aHJlYWRfc2lnbWFzaykKKyAgICBkZWYgcHRocmVhZF9zaWdtYXNrKGhvdywgbWFzayk6CisgICAgICAgIHNpZ3Nfc2V0ID0gX3NpZ25hbC5wdGhyZWFkX3NpZ21hc2soaG93LCBtYXNrKQorICAgICAgICByZXR1cm4gc2V0KF9pbnRfdG9fZW51bSh4LCBTaWduYWxzKSBmb3IgeCBpbiBzaWdzX3NldCkKKyAgICBwdGhyZWFkX3NpZ21hc2suX19kb2NfXyA9IF9zaWduYWwucHRocmVhZF9zaWdtYXNrLl9fZG9jX18KKworCitpZiAnc2lncGVuZGluZycgaW4gX2dsb2JhbHM6CisgICAgQF93cmFwcyhfc2lnbmFsLnNpZ3BlbmRpbmcpCisgICAgZGVmIHNpZ3BlbmRpbmcoKToKKyAgICAgICAgc2lncyA9IF9zaWduYWwuc2lncGVuZGluZygpCisgICAgICAgIHJldHVybiBzZXQoX2ludF90b19lbnVtKHgsIFNpZ25hbHMpIGZvciB4IGluIHNpZ3MpCisKKworaWYgJ3NpZ3dhaXQnIGluIF9nbG9iYWxzOgorICAgIEBfd3JhcHMoX3NpZ25hbC5zaWd3YWl0KQorICAgIGRlZiBzaWd3YWl0KHNpZ3NldCk6CisgICAgICAgIHJldHNpZyA9IF9zaWduYWwuc2lnd2FpdChzaWdzZXQpCisgICAgICAgIHJldHVybiBfaW50X3RvX2VudW0ocmV0c2lnLCBTaWduYWxzKQorICAgIHNpZ3dhaXQuX19kb2NfXyA9IF9zaWduYWwuc2lnd2FpdAorCitkZWwgX2dsb2JhbHMsIF93cmFwcwpkaWZmIC0tZ2l0IGEvTGliL3NpdGUucHkgYi9MaWIvc2l0ZS5weQppbmRleCAzYzg1ODRiLi4zZjc4ZWY1IDEwMDY0NAotLS0gYS9MaWIvc2l0ZS5weQorKysgYi9MaWIvc2l0ZS5weQpAQCAtNyw3ICs3LDcgQEAKIFRoaXMgd2lsbCBhcHBlbmQgc2l0ZS1zcGVjaWZpYyBwYXRocyB0byB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoLiAgT24KIFVuaXggKGluY2x1ZGluZyBNYWMgT1NYKSwgaXQgc3RhcnRzIHdpdGggc3lzLnByZWZpeCBhbmQKIHN5cy5leGVjX3ByZWZpeCAoaWYgZGlmZmVyZW50KSBhbmQgYXBwZW5kcwotbGliL3B5dGhvbjx2ZXJzaW9uPi9zaXRlLXBhY2thZ2VzIGFzIHdlbGwgYXMgbGliL3NpdGUtcHl0aG9uLgorbGliL3B5dGhvbjx2ZXJzaW9uPi9zaXRlLXBhY2thZ2VzLgogT24gb3RoZXIgcGxhdGZvcm1zIChzdWNoIGFzIFdpbmRvd3MpLCBpdCB0cmllcyBlYWNoIG9mIHRoZQogcHJlZml4ZXMgZGlyZWN0bHksIGFzIHdlbGwgYXMgd2l0aCBsaWIvc2l0ZS1wYWNrYWdlcyBhcHBlbmRlZC4gIFRoZQogcmVzdWx0aW5nIGRpcmVjdG9yaWVzLCBpZiB0aGV5IGV4aXN0LCBhcmUgYXBwZW5kZWQgdG8gc3lzLnBhdGgsIGFuZApAQCAtMTUsNyArMTUsNyBAQAogCiBJZiBhIGZpbGUgbmFtZWQgInB5dmVudi5jZmciIGV4aXN0cyBvbmUgZGlyZWN0b3J5IGFib3ZlIHN5cy5leGVjdXRhYmxlLAogc3lzLnByZWZpeCBhbmQgc3lzLmV4ZWNfcHJlZml4IGFyZSBzZXQgdG8gdGhhdCBkaXJlY3RvcnkgYW5kCi1pdCBpcyBhbHNvIGNoZWNrZWQgZm9yIHNpdGUtcGFja2FnZXMgYW5kIHNpdGUtcHl0aG9uIChzeXMuYmFzZV9wcmVmaXggYW5kCitpdCBpcyBhbHNvIGNoZWNrZWQgZm9yIHNpdGUtcGFja2FnZXMgKHN5cy5iYXNlX3ByZWZpeCBhbmQKIHN5cy5iYXNlX2V4ZWNfcHJlZml4IHdpbGwgYWx3YXlzIGJlIHRoZSAicmVhbCIgcHJlZml4ZXMgb2YgdGhlIFB5dGhvbgogaW5zdGFsbGF0aW9uKS4gSWYgInB5dmVudi5jZmciIChhIGJvb3RzdHJhcCBjb25maWd1cmF0aW9uIGZpbGUpIGNvbnRhaW5zCiB0aGUga2V5ICJpbmNsdWRlLXN5c3RlbS1zaXRlLXBhY2thZ2VzIiBzZXQgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiAiZmFsc2UiCkBAIC01OSw3ICs1OSw3IEBACiBvbWl0dGVkIGJlY2F1c2UgaXQgaXMgbm90IG1lbnRpb25lZCBpbiBlaXRoZXIgcGF0aCBjb25maWd1cmF0aW9uIGZpbGUuCiAKIFRoZSByZWFkbGluZSBtb2R1bGUgaXMgYWxzbyBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgdG8gZW5hYmxlCi1jb21wbGV0aW9uIGZvciBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBpbgorY29tcGxldGlvbiBmb3Igc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQuICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGluCiBzaXRlY3VzdG9taXplLCB1c2VyY3VzdG9taXplIG9yIFBZVEhPTlNUQVJUVVAuCiAKIEFmdGVyIHRoZXNlIG9wZXJhdGlvbnMsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBpbXBvcnQgYSBtb2R1bGUKQEAgLTk4LDggKzk4LDggQEAKIGRlZiBhYnNfcGF0aHMoKToKICAgICAiIiJTZXQgYWxsIG1vZHVsZSBfX2ZpbGVfXyBhbmQgX19jYWNoZWRfXyBhdHRyaWJ1dGVzIHRvIGFuIGFic29sdXRlIHBhdGgiIiIKICAgICBmb3IgbSBpbiBzZXQoc3lzLm1vZHVsZXMudmFsdWVzKCkpOgotICAgICAgICBpZiAoZ2V0YXR0cihnZXRhdHRyKG0sICdfX2xvYWRlcl9fJywgTm9uZSksICdfX21vZHVsZV9fJywgTm9uZSkgIT0KLSAgICAgICAgICAgICAgICAnX2Zyb3plbl9pbXBvcnRsaWInKToKKyAgICAgICAgaWYgKGdldGF0dHIoZ2V0YXR0cihtLCAnX19sb2FkZXJfXycsIE5vbmUpLCAnX19tb2R1bGVfXycsIE5vbmUpIG5vdCBpbgorICAgICAgICAgICAgICAgICgnX2Zyb3plbl9pbXBvcnRsaWInLCAnX2Zyb3plbl9pbXBvcnRsaWJfZXh0ZXJuYWwnKSk6CiAgICAgICAgICAgICBjb250aW51ZSAgICMgZG9uJ3QgbWVzcyB3aXRoIGEgUEVQIDMwMi1zdXBwbGllZCBfX2ZpbGVfXwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtLl9fZmlsZV9fID0gb3MucGF0aC5hYnNwYXRoKG0uX19maWxlX18pCkBAIC0yODUsOCArMjg1LDcgQEAKICAgICByZXR1cm4ga25vd25fcGF0aHMKIAogZGVmIGdldHNpdGVwYWNrYWdlcyhwcmVmaXhlcz1Ob25lKToKLSAgICAiIiJSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIGFsbCBnbG9iYWwgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcmllcwotICAgIChhbmQgcG9zc2libHkgc2l0ZS1weXRob24pLgorICAgICIiIlJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgYWxsIGdsb2JhbCBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yaWVzLgogCiAgICAgRm9yIGVhY2ggZGlyZWN0b3J5IHByZXNlbnQgaW4gYGBwcmVmaXhlc2BgIChvciB0aGUgZ2xvYmFsIGBgUFJFRklYRVNgYCksCiAgICAgdGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgaXRzIGBzaXRlLXBhY2thZ2VzYCBzdWJkaXJlY3RvcnkgZGVwZW5kaW5nIG9uIHRoZQpAQCAtMzA3LDcgKzMwNiw2IEBACiAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCi0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQocHJlZml4KQogICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKQEAgLTMyMywxNCArMzIxLDkgQEAKICAgICByZXR1cm4gc2l0ZXBhY2thZ2VzCiAKIGRlZiBhZGRzaXRlcGFja2FnZXMoa25vd25fcGF0aHMsIHByZWZpeGVzPU5vbmUpOgotICAgICIiIkFkZCBzaXRlLXBhY2thZ2VzIChhbmQgcG9zc2libHkgc2l0ZS1weXRob24pIHRvIHN5cy5wYXRoIiIiCisgICAgIiIiQWRkIHNpdGUtcGFja2FnZXMgdG8gc3lzLnBhdGgiIiIKICAgICBmb3Igc2l0ZWRpciBpbiBnZXRzaXRlcGFja2FnZXMocHJlZml4ZXMpOgogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNpdGVkaXIpOgotICAgICAgICAgICAgaWYgInNpdGUtcHl0aG9uIiBpbiBzaXRlZGlyOgotICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncwotICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJyJzaXRlLXB5dGhvbiIgZGlyZWN0b3JpZXMgd2lsbCBub3QgYmUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1cHBvcnRlZCBpbiAzLjUgYW55bW9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBhZGRzaXRlZGlyKHNpdGVkaXIsIGtub3duX3BhdGhzKQogCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCkBAIC0zODYsNyArMzc5LDcgQEAKIAogICAgIElmIHRoZSByZWFkbGluZSBtb2R1bGUgY2FuIGJlIGltcG9ydGVkLCB0aGUgaG9vayB3aWxsIHNldCB0aGUgVGFiIGtleQogICAgIGFzIGNvbXBsZXRpb24ga2V5IGFuZCByZWdpc3RlciB+Ly5weXRob25faGlzdG9yeSBhcyBoaXN0b3J5IGZpbGUuCi0gICAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluIHRoZSBzaXRlY3VzdG9taXplIG9yIHVzZXJjdXN0b21pemUgbW9kdWxlLAorICAgIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIHNpdGVjdXN0b21pemUgb3IgdXNlcmN1c3RvbWl6ZSBtb2R1bGUsCiAgICAgb3IgaW4gYSBQWVRIT05TVEFSVFVQIGZpbGUuCiAgICAgIiIiCiAgICAgZGVmIHJlZ2lzdGVyX3JlYWRsaW5lKCk6CkBAIC00ODUsNiArNDc4LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1fc2l0ZSA9IHZhbHVlLmxvd2VyKCkKICAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ2hvbWUnOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLl9ob21lID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkgPT0gJ2FwcGxvY2FsJyBhbmQgdmFsdWUubG93ZXIoKSA9PSAndHJ1ZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEFwcC1sb2NhbCBpbnN0YWxscyB1c2UgdGhlIGV4ZV9kaXIgYXMgcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgIyBub3Qgb25lIGxldmVsIGhpZ2hlciwgYW5kIGRvIG5vdCB1c2Ugc3lzdGVtCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNpdGUgcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBzaXRlX3ByZWZpeCA9IGV4ZV9kaXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9zaXRlID0gJ2ZhbHNlJwogCiAgICAgICAgIHN5cy5wcmVmaXggPSBzeXMuZXhlY19wcmVmaXggPSBzaXRlX3ByZWZpeAogCmRpZmYgLS1naXQgYS9MaWIvc210cGQucHkgYi9MaWIvc210cGQucHkKaW5kZXggZGI3Yzg2Ny4uNzMyMDY2ZSAxMDA3NTUKLS0tIGEvTGliL3NtdHBkLnB5CisrKyBiL0xpYi9zbXRwZC5weQpAQCAtMSw1ICsxLDUgQEAKICMhIC91c3IvYmluL2VudiBweXRob24zCi0iIiJBbiBSRkMgNTMyMSBzbXRwIHByb3h5LgorIiIiQW4gUkZDIDUzMjEgc210cCBwcm94eSB3aXRoIG9wdGlvbmFsIFJGQyAxODcwIGFuZCBSRkMgNjUzMSBleHRlbnNpb25zLgogCiBVc2FnZTogJShwcm9ncmFtKXMgW29wdGlvbnNdIFtsb2NhbGhvc3Q6bG9jYWxwb3J0IFtyZW1vdGVob3N0OnJlbW90ZXBvcnRdXQogCkBAIC0yNSw2ICsyNSwxMCBAQAogICAgICAgICBSZXN0cmljdCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgaW5jb21pbmcgbWVzc2FnZSB0byAibGltaXQiIG51bWJlciBvZgogICAgICAgICBieXRlcyB2aWEgdGhlIFJGQyAxODcwIFNJWkUgZXh0ZW5zaW9uLiAgRGVmYXVsdHMgdG8gMzM1NTQ0MzIgYnl0ZXMuCiAKKyAgICAtLXNtdHB1dGY4CisgICAgLXUKKyAgICAgICAgRW5hYmxlIHRoZSBTTVRQVVRGOCBleHRlbnNpb24gYW5kIGJlaGF2ZSBhcyBhbiBSRkMgNjUzMSBzbXRwIHByb3h5LgorCiAgICAgLS1kZWJ1ZwogICAgIC1kCiAgICAgICAgIFR1cm4gb24gZGVidWdnaW5nIHByaW50cy4KQEAgLTk4LDcgKzEwMiw2IEBACiAKIERFQlVHU1RSRUFNID0gRGV2bnVsbCgpCiBORVdMSU5FID0gJ1xuJwotRU1QVFlTVFJJTkcgPSAnJwogQ09NTUFTUEFDRSA9ICcsICcKIERBVEFfU0laRV9ERUZBVUxUID0gMzM1NTQ0MzIKIApAQCAtMTE2LDI2ICsxMTksNDggQEAKIAogICAgIGNvbW1hbmRfc2l6ZV9saW1pdCA9IDUxMgogICAgIGNvbW1hbmRfc2l6ZV9saW1pdHMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsYW1iZGEgeD1jb21tYW5kX3NpemVfbGltaXQ6IHgpCi0gICAgY29tbWFuZF9zaXplX2xpbWl0cy51cGRhdGUoewotICAgICAgICAnTUFJTCc6IGNvbW1hbmRfc2l6ZV9saW1pdCArIDI2LAotICAgICAgICB9KQotICAgIG1heF9jb21tYW5kX3NpemVfbGltaXQgPSBtYXgoY29tbWFuZF9zaXplX2xpbWl0cy52YWx1ZXMoKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYXhfY29tbWFuZF9zaXplX2xpbWl0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbWF4KHNlbGYuY29tbWFuZF9zaXplX2xpbWl0cy52YWx1ZXMoKSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21tYW5kX3NpemVfbGltaXQKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCwKLSAgICAgICAgICAgICAgICAgbWFwPU5vbmUpOgorICAgICAgICAgICAgICAgICBtYXA9Tm9uZSwgZW5hYmxlX1NNVFBVVEY4PUZhbHNlLCBkZWNvZGVfZGF0YT1Ob25lKToKICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uLCBtYXA9bWFwKQogICAgICAgICBzZWxmLnNtdHBfc2VydmVyID0gc2VydmVyCiAgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KICAgICAgICAgc2VsZi5hZGRyID0gYWRkcgogICAgICAgICBzZWxmLmRhdGFfc2l6ZV9saW1pdCA9IGRhdGFfc2l6ZV9saW1pdAotICAgICAgICBzZWxmLnJlY2VpdmVkX2xpbmVzID0gW10KLSAgICAgICAgc2VsZi5zbXRwX3N0YXRlID0gc2VsZi5DT01NQU5ECisgICAgICAgIHNlbGYuZW5hYmxlX1NNVFBVVEY4ID0gZW5hYmxlX1NNVFBVVEY4CisgICAgICAgIGlmIGVuYWJsZV9TTVRQVVRGODoKKyAgICAgICAgICAgIGlmIGRlY29kZV9kYXRhOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImRlY29kZV9kYXRhIGFuZCBlbmFibGVfU01UUFVURjggY2Fubm90IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBiZSBzZXQgdG8gVHJ1ZSBhdCB0aGUgc2FtZSB0aW1lIikKKyAgICAgICAgICAgIGRlY29kZV9kYXRhID0gRmFsc2UKKyAgICAgICAgaWYgZGVjb2RlX2RhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIHdhcm4oIlRoZSBkZWNvZGVfZGF0YSBkZWZhdWx0IG9mIFRydWUgd2lsbCBjaGFuZ2UgdG8gRmFsc2UgaW4gMy42OyIKKyAgICAgICAgICAgICAgICAgIiBzcGVjaWZ5IGFuIGV4cGxpY2l0IHZhbHVlIGZvciB0aGlzIGtleXdvcmQiLAorICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgICAgICBkZWNvZGVfZGF0YSA9IFRydWUKKyAgICAgICAgc2VsZi5fZGVjb2RlX2RhdGEgPSBkZWNvZGVfZGF0YQorICAgICAgICBpZiBkZWNvZGVfZGF0YToKKyAgICAgICAgICAgIHNlbGYuX2VtcHR5c3RyaW5nID0gJycKKyAgICAgICAgICAgIHNlbGYuX2xpbmVzZXAgPSAnXHJcbicKKyAgICAgICAgICAgIHNlbGYuX2RvdHNlcCA9ICcuJworICAgICAgICAgICAgc2VsZi5fbmV3bGluZSA9IE5FV0xJTkUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2VtcHR5c3RyaW5nID0gYicnCisgICAgICAgICAgICBzZWxmLl9saW5lc2VwID0gYidcclxuJworICAgICAgICAgICAgc2VsZi5fZG90c2VwID0gb3JkKGInLicpCisgICAgICAgICAgICBzZWxmLl9uZXdsaW5lID0gYidcbicKKyAgICAgICAgc2VsZi5fc2V0X3JzZXRfc3RhdGUoKQogICAgICAgICBzZWxmLnNlZW5fZ3JlZXRpbmcgPSAnJwotICAgICAgICBzZWxmLm1haWxmcm9tID0gTm9uZQotICAgICAgICBzZWxmLnJjcHR0b3MgPSBbXQotICAgICAgICBzZWxmLnJlY2VpdmVkX2RhdGEgPSAnJworICAgICAgICBzZWxmLmV4dGVuZGVkX3NtdHAgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbW1hbmRfc2l6ZV9saW1pdHMuY2xlYXIoKQogICAgICAgICBzZWxmLmZxZG4gPSBzb2NrZXQuZ2V0ZnFkbigpCi0gICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgpAQCAtMTQ3LDggKzE3MiwyMiBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHByaW50KCdQZWVyOicsIHJlcHIoc2VsZi5wZWVyKSwgZmlsZT1ERUJVR1NUUkVBTSkKICAgICAgICAgc2VsZi5wdXNoKCcyMjAgJXMgJXMnICUgKHNlbGYuZnFkbiwgX192ZXJzaW9uX18pKQorCisgICAgZGVmIF9zZXRfcG9zdF9kYXRhX3N0YXRlKHNlbGYpOgorICAgICAgICAiIiJSZXNldCBzdGF0ZSB2YXJpYWJsZXMgdG8gdGhlaXIgcG9zdC1EQVRBIHN0YXRlLiIiIgorICAgICAgICBzZWxmLnNtdHBfc3RhdGUgPSBzZWxmLkNPTU1BTkQKKyAgICAgICAgc2VsZi5tYWlsZnJvbSA9IE5vbmUKKyAgICAgICAgc2VsZi5yY3B0dG9zID0gW10KKyAgICAgICAgc2VsZi5yZXF1aXJlX1NNVFBVVEY4ID0gRmFsc2UKKyAgICAgICAgc2VsZi5udW1fYnl0ZXMgPSAwCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYidcclxuJykKLSAgICAgICAgc2VsZi5leHRlbmRlZF9zbXRwID0gRmFsc2UKKworICAgIGRlZiBfc2V0X3JzZXRfc3RhdGUoc2VsZik6CisgICAgICAgICIiIlJlc2V0IGFsbCBzdGF0ZSB2YXJpYWJsZXMgZXhjZXB0IHRoZSBncmVldGluZy4iIiIKKyAgICAgICAgc2VsZi5fc2V0X3Bvc3RfZGF0YV9zdGF0ZSgpCisgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSA9ICcnCisgICAgICAgIHNlbGYucmVjZWl2ZWRfbGluZXMgPSBbXQorCiAKICAgICAjIHByb3BlcnRpZXMgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5CiAgICAgQHByb3BlcnR5CkBAIC0yNzIsOSArMzExLDEwIEBACiAgICAgICAgICAgICAic2V0ICdhZGRyJyBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzZWxmLmFkZHIgPSB2YWx1ZQogCi0gICAgIyBPdmVycmlkZXMgYmFzZSBjbGFzcyBmb3IgY29udmVuaWVuY2UKKyAgICAjIE92ZXJyaWRlcyBiYXNlIGNsYXNzIGZvciBjb252ZW5pZW5jZS4KICAgICBkZWYgcHVzaChzZWxmLCBtc2cpOgotICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LnB1c2goc2VsZiwgYnl0ZXMobXNnICsgJ1xyXG4nLCAnYXNjaWknKSkKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKHNlbGYsIGJ5dGVzKAorICAgICAgICAgICAgbXNnICsgJ1xyXG4nLCAndXRmLTgnIGlmIHNlbGYucmVxdWlyZV9TTVRQVVRGOCBlbHNlICdhc2NpaScpKQogCiAgICAgIyBJbXBsZW1lbnRhdGlvbiBvZiBiYXNlIGNsYXNzIGFic3RyYWN0IG1ldGhvZAogICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CkBAIC0yODcsMTEgKzMyNywxNCBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgbGltaXQ6CiAgICAgICAgICAgICBzZWxmLm51bV9ieXRlcyArPSBsZW4oZGF0YSkKLSAgICAgICAgc2VsZi5yZWNlaXZlZF9saW5lcy5hcHBlbmQoc3RyKGRhdGEsICJ1dGYtOCIpKQorICAgICAgICBpZiBzZWxmLl9kZWNvZGVfZGF0YToKKyAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfbGluZXMuYXBwZW5kKHN0cihkYXRhLCAndXRmLTgnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfbGluZXMuYXBwZW5kKGRhdGEpCiAKICAgICAjIEltcGxlbWVudGF0aW9uIG9mIGJhc2UgY2xhc3MgYWJzdHJhY3QgbWV0aG9kCiAgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6Ci0gICAgICAgIGxpbmUgPSBFTVBUWVNUUklORy5qb2luKHNlbGYucmVjZWl2ZWRfbGluZXMpCisgICAgICAgIGxpbmUgPSBzZWxmLl9lbXB0eXN0cmluZy5qb2luKHNlbGYucmVjZWl2ZWRfbGluZXMpCiAgICAgICAgIHByaW50KCdEYXRhOicsIHJlcHIobGluZSksIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgIHNlbGYucmVjZWl2ZWRfbGluZXMgPSBbXQogICAgICAgICBpZiBzZWxmLnNtdHBfc3RhdGUgPT0gc2VsZi5DT01NQU5EOgpAQCAtMjk5LDcgKzM0Miw4IEBACiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMCBFcnJvcjogYmFkIHN5bnRheCcpCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBtZXRob2QgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZGVjb2RlX2RhdGE6CisgICAgICAgICAgICAgICAgbGluZSA9IHN0cihsaW5lLCAndXRmLTgnKQogICAgICAgICAgICAgaSA9IGxpbmUuZmluZCgnICcpCiAgICAgICAgICAgICBpZiBpIDwgMDoKICAgICAgICAgICAgICAgICBjb21tYW5kID0gbGluZS51cHBlcigpCkBAIC0zMzAsMjEgKzM3NCwyMSBAQAogICAgICAgICAgICAgIyBSZW1vdmUgZXh0cmFuZW91cyBjYXJyaWFnZSByZXR1cm5zIGFuZCBkZS10cmFuc3BhcmVuY3kgYWNjb3JkaW5nCiAgICAgICAgICAgICAjIHRvIFJGQyA1MzIxLCBTZWN0aW9uIDQuNS4yLgogICAgICAgICAgICAgZGF0YSA9IFtdCi0gICAgICAgICAgICBmb3IgdGV4dCBpbiBsaW5lLnNwbGl0KCdcclxuJyk6Ci0gICAgICAgICAgICAgICAgaWYgdGV4dCBhbmQgdGV4dFswXSA9PSAnLic6CisgICAgICAgICAgICBmb3IgdGV4dCBpbiBsaW5lLnNwbGl0KHNlbGYuX2xpbmVzZXApOgorICAgICAgICAgICAgICAgIGlmIHRleHQgYW5kIHRleHRbMF0gPT0gc2VsZi5fZG90c2VwOgogICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCh0ZXh0WzE6XSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCh0ZXh0KQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9kYXRhID0gTkVXTElORS5qb2luKGRhdGEpCi0gICAgICAgICAgICBzdGF0dXMgPSBzZWxmLnNtdHBfc2VydmVyLnByb2Nlc3NfbWVzc2FnZShzZWxmLnBlZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1haWxmcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yY3B0dG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9kYXRhKQotICAgICAgICAgICAgc2VsZi5yY3B0dG9zID0gW10KLSAgICAgICAgICAgIHNlbGYubWFpbGZyb20gPSBOb25lCi0gICAgICAgICAgICBzZWxmLnNtdHBfc3RhdGUgPSBzZWxmLkNPTU1BTkQKLSAgICAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAotICAgICAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcihiJ1xyXG4nKQorICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9kYXRhID0gc2VsZi5fbmV3bGluZS5qb2luKGRhdGEpCisgICAgICAgICAgICBhcmdzID0gKHNlbGYucGVlciwgc2VsZi5tYWlsZnJvbSwgc2VsZi5yY3B0dG9zLCBzZWxmLnJlY2VpdmVkX2RhdGEpCisgICAgICAgICAgICBrd2FyZ3MgPSB7fQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2RlY29kZV9kYXRhOgorICAgICAgICAgICAgICAgIGt3YXJncyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ21haWxfb3B0aW9ucyc6IHNlbGYubWFpbF9vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAncmNwdF9vcHRpb25zJzogc2VsZi5yY3B0X29wdGlvbnMsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5zbXRwX3NlcnZlci5wcm9jZXNzX21lc3NhZ2UoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgc2VsZi5fc2V0X3Bvc3RfZGF0YV9zdGF0ZSgpCiAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnMjUwIE9LJykKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNTUsMjYgKzM5OSwzNSBAQAogICAgICAgICBpZiBub3QgYXJnOgogICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgU3ludGF4OiBIRUxPIGhvc3RuYW1lJykKICAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIFNlZSBpc3N1ZSAjMjE3ODMgZm9yIGEgZGlzY3Vzc2lvbiBvZiB0aGlzIGJlaGF2aW9yLgogICAgICAgICBpZiBzZWxmLnNlZW5fZ3JlZXRpbmc6CiAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMyBEdXBsaWNhdGUgSEVMTy9FSExPJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2Vlbl9ncmVldGluZyA9IGFyZwotICAgICAgICAgICAgc2VsZi5leHRlbmRlZF9zbXRwID0gRmFsc2UKLSAgICAgICAgICAgIHNlbGYucHVzaCgnMjUwICVzJyAlIHNlbGYuZnFkbikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9zZXRfcnNldF9zdGF0ZSgpCisgICAgICAgIHNlbGYuc2Vlbl9ncmVldGluZyA9IGFyZworICAgICAgICBzZWxmLnB1c2goJzI1MCAlcycgJSBzZWxmLmZxZG4pCiAKICAgICBkZWYgc210cF9FSExPKHNlbGYsIGFyZyk6CiAgICAgICAgIGlmIG5vdCBhcmc6CiAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMSBTeW50YXg6IEVITE8gaG9zdG5hbWUnKQogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgU2VlIGlzc3VlICMyMTc4MyBmb3IgYSBkaXNjdXNzaW9uIG9mIHRoaXMgYmVoYXZpb3IuCiAgICAgICAgIGlmIHNlbGYuc2Vlbl9ncmVldGluZzoKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTAzIER1cGxpY2F0ZSBIRUxPL0VITE8nKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zZWVuX2dyZWV0aW5nID0gYXJnCi0gICAgICAgICAgICBzZWxmLmV4dGVuZGVkX3NtdHAgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLnB1c2goJzI1MC0lcycgJSBzZWxmLmZxZG4pCi0gICAgICAgICAgICBpZiBzZWxmLmRhdGFfc2l6ZV9saW1pdDoKLSAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzI1MC1TSVpFICVzJyAlIHNlbGYuZGF0YV9zaXplX2xpbWl0KQotICAgICAgICAgICAgc2VsZi5wdXNoKCcyNTAgSEVMUCcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fc2V0X3JzZXRfc3RhdGUoKQorICAgICAgICBzZWxmLnNlZW5fZ3JlZXRpbmcgPSBhcmcKKyAgICAgICAgc2VsZi5leHRlbmRlZF9zbXRwID0gVHJ1ZQorICAgICAgICBzZWxmLnB1c2goJzI1MC0lcycgJSBzZWxmLmZxZG4pCisgICAgICAgIGlmIHNlbGYuZGF0YV9zaXplX2xpbWl0OgorICAgICAgICAgICAgc2VsZi5wdXNoKCcyNTAtU0laRSAlcycgJSBzZWxmLmRhdGFfc2l6ZV9saW1pdCkKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZF9zaXplX2xpbWl0c1snTUFJTCddICs9IDI2CisgICAgICAgIGlmIG5vdCBzZWxmLl9kZWNvZGVfZGF0YToKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMjUwLThCSVRNSU1FJykKKyAgICAgICAgaWYgc2VsZi5lbmFibGVfU01UUFVURjg6CisgICAgICAgICAgICBzZWxmLnB1c2goJzI1MC1TTVRQVVRGOCcpCisgICAgICAgICAgICBzZWxmLmNvbW1hbmRfc2l6ZV9saW1pdHNbJ01BSUwnXSArPSAxMAorICAgICAgICBzZWxmLnB1c2goJzI1MCBIRUxQJykKIAogICAgIGRlZiBzbXRwX05PT1Aoc2VsZiwgYXJnKToKICAgICAgICAgaWYgYXJnOgpAQCAtNDA1LDExICs0NTgsMTUgQEAKICAgICAgICAgcmV0dXJuIGFkZHJlc3MuYWRkcl9zcGVjLCByZXN0CiAKICAgICBkZWYgX2dldHBhcmFtcyhzZWxmLCBwYXJhbXMpOgotICAgICAgICAjIFJldHVybiBhbnkgcGFyYW1ldGVycyB0aGF0IGFwcGVhciB0byBiZSBzeW50YWN0aWNhbGx5IHZhbGlkIGFjY29yZGluZwotICAgICAgICAjIHRvIFJGQyAxODY5LCBpZ25vcmUgYWxsIG90aGVycy4gIChQb3N0ZWwgcnVsZTogYWNjZXB0IHdoYXQgd2UgY2FuLikKLSAgICAgICAgcGFyYW1zID0gW3BhcmFtLnNwbGl0KCc9JywgMSkgZm9yIHBhcmFtIGluIHBhcmFtcy5zcGxpdCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICc9JyBpbiBwYXJhbV0KLSAgICAgICAgcmV0dXJuIHtrOiB2IGZvciBrLCB2IGluIHBhcmFtcyBpZiBrLmlzYWxudW0oKX0KKyAgICAgICAgIyBSZXR1cm4gcGFyYW1zIGFzIGRpY3Rpb25hcnkuIFJldHVybiBOb25lIGlmIG5vdCBhbGwgcGFyYW1ldGVycworICAgICAgICAjIGFwcGVhciB0byBiZSBzeW50YWN0aWNhbGx5IHZhbGlkIGFjY29yZGluZyB0byBSRkMgMTg2OS4KKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgZm9yIHBhcmFtIGluIHBhcmFtczoKKyAgICAgICAgICAgIHBhcmFtLCBlcSwgdmFsdWUgPSBwYXJhbS5wYXJ0aXRpb24oJz0nKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtLmlzYWxudW0oKSBvciBlcSBhbmQgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXN1bHRbcGFyYW1dID0gdmFsdWUgaWYgZXEgZWxzZSBUcnVlCisgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBzbXRwX0hFTFAoc2VsZiwgYXJnKToKICAgICAgICAgaWYgYXJnOgpAQCAtNDU5LDcgKzUxNiw3IEBACiAKICAgICBkZWYgc210cF9NQUlMKHNlbGYsIGFyZyk6CiAgICAgICAgIGlmIG5vdCBzZWxmLnNlZW5fZ3JlZXRpbmc6Ci0gICAgICAgICAgICBzZWxmLnB1c2goJzUwMyBFcnJvcjogc2VuZCBIRUxPIGZpcnN0Jyk7CisgICAgICAgICAgICBzZWxmLnB1c2goJzUwMyBFcnJvcjogc2VuZCBIRUxPIGZpcnN0JykKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBwcmludCgnPT09PiBNQUlMJywgYXJnLCBmaWxlPURFQlVHU1RSRUFNKQogICAgICAgICBzeW50YXhlcnIgPSAnNTAxIFN5bnRheDogTUFJTCBGUk9NOiA8YWRkcmVzcz4nCkBAIC00NzksMTAgKzUzNiwyMyBAQAogICAgICAgICBpZiBzZWxmLm1haWxmcm9tOgogICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDMgRXJyb3I6IG5lc3RlZCBNQUlMIGNvbW1hbmQnKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHBhcmFtcyA9IHNlbGYuX2dldHBhcmFtcyhwYXJhbXMudXBwZXIoKSkKKyAgICAgICAgc2VsZi5tYWlsX29wdGlvbnMgPSBwYXJhbXMudXBwZXIoKS5zcGxpdCgpCisgICAgICAgIHBhcmFtcyA9IHNlbGYuX2dldHBhcmFtcyhzZWxmLm1haWxfb3B0aW9ucykKICAgICAgICAgaWYgcGFyYW1zIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLnB1c2goc3ludGF4ZXJyKQogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBzZWxmLl9kZWNvZGVfZGF0YToKKyAgICAgICAgICAgIGJvZHkgPSBwYXJhbXMucG9wKCdCT0RZJywgJzdCSVQnKQorICAgICAgICAgICAgaWYgYm9keSBub3QgaW4gWyc3QklUJywgJzhCSVRNSU1FJ106CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgRXJyb3I6IEJPRFkgY2FuIG9ubHkgYmUgb25lIG9mIDdCSVQsIDhCSVRNSU1FJykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5lbmFibGVfU01UUFVURjg6CisgICAgICAgICAgICBzbXRwdXRmOCA9IHBhcmFtcy5wb3AoJ1NNVFBVVEY4JywgRmFsc2UpCisgICAgICAgICAgICBpZiBzbXRwdXRmOCBpcyBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucmVxdWlyZV9TTVRQVVRGOCA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgc210cHV0ZjggaXMgbm90IEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnNTAxIEVycm9yOiBTTVRQVVRGOCB0YWtlcyBubyBhcmd1bWVudHMnKQorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzaXplID0gcGFyYW1zLnBvcCgnU0laRScsIE5vbmUpCiAgICAgICAgIGlmIHNpemU6CiAgICAgICAgICAgICBpZiBub3Qgc2l6ZS5pc2RpZ2l0KCk6CkBAIC01MTcsMTYgKzU4NywxNiBAQAogICAgICAgICBpZiBub3QgYWRkcmVzczoKICAgICAgICAgICAgIHNlbGYucHVzaChzeW50YXhlcnIpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgcGFyYW1zOgotICAgICAgICAgICAgaWYgc2VsZi5leHRlbmRlZF9zbXRwOgotICAgICAgICAgICAgICAgIHBhcmFtcyA9IHNlbGYuX2dldHBhcmFtcyhwYXJhbXMudXBwZXIoKSkKLSAgICAgICAgICAgICAgICBpZiBwYXJhbXMgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5wdXNoKHN5bnRheGVycikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYucHVzaChzeW50YXhlcnIpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHBhcmFtcyBhbmQgbGVuKHBhcmFtcy5rZXlzKCkpID4gMDoKKyAgICAgICAgaWYgbm90IHNlbGYuZXh0ZW5kZWRfc210cCBhbmQgcGFyYW1zOgorICAgICAgICAgICAgc2VsZi5wdXNoKHN5bnRheGVycikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnJjcHRfb3B0aW9ucyA9IHBhcmFtcy51cHBlcigpLnNwbGl0KCkKKyAgICAgICAgcGFyYW1zID0gc2VsZi5fZ2V0cGFyYW1zKHNlbGYucmNwdF9vcHRpb25zKQorICAgICAgICBpZiBwYXJhbXMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYucHVzaChzeW50YXhlcnIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBYWFggY3VycmVudGx5IHRoZXJlIGFyZSBubyBvcHRpb25zIHdlIHJlY29nbml6ZS4KKyAgICAgICAgaWYgbGVuKHBhcmFtcy5rZXlzKCkpID4gMDoKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTU1IFJDUFQgVE8gcGFyYW1ldGVycyBub3QgcmVjb2duaXplZCBvciBub3QgaW1wbGVtZW50ZWQnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYucmNwdHRvcy5hcHBlbmQoYWRkcmVzcykKQEAgLTUzNywxMSArNjA3LDcgQEAKICAgICAgICAgaWYgYXJnOgogICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgU3ludGF4OiBSU0VUJykKICAgICAgICAgICAgIHJldHVybgotICAgICAgICAjIFJlc2V0cyB0aGUgc2VuZGVyLCByZWNpcGllbnRzLCBhbmQgZGF0YSwgYnV0IG5vdCB0aGUgZ3JlZXRpbmcKLSAgICAgICAgc2VsZi5tYWlsZnJvbSA9IE5vbmUKLSAgICAgICAgc2VsZi5yY3B0dG9zID0gW10KLSAgICAgICAgc2VsZi5yZWNlaXZlZF9kYXRhID0gJycKLSAgICAgICAgc2VsZi5zbXRwX3N0YXRlID0gc2VsZi5DT01NQU5ECisgICAgICAgIHNlbGYuX3NldF9yc2V0X3N0YXRlKCkKICAgICAgICAgc2VsZi5wdXNoKCcyNTAgT0snKQogCiAgICAgZGVmIHNtdHBfREFUQShzZWxmLCBhcmcpOgpAQCAtNTY4LDEzICs2MzQsMjkgQEAKICAgICBjaGFubmVsX2NsYXNzID0gU01UUENoYW5uZWwKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbGFkZHIsIHJlbW90ZWFkZHIsCi0gICAgICAgICAgICAgICAgIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCwgbWFwPU5vbmUpOgorICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQsIG1hcD1Ob25lLAorICAgICAgICAgICAgICAgICBlbmFibGVfU01UUFVURjg9RmFsc2UsIGRlY29kZV9kYXRhPU5vbmUpOgogICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBsb2NhbGFkZHIKICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IHJlbW90ZWFkZHIKICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBkYXRhX3NpemVfbGltaXQKKyAgICAgICAgc2VsZi5lbmFibGVfU01UUFVURjggPSBlbmFibGVfU01UUFVURjgKKyAgICAgICAgaWYgZW5hYmxlX1NNVFBVVEY4OgorICAgICAgICAgICAgaWYgZGVjb2RlX2RhdGE6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIGRlY29kZV9kYXRhIGFuZCBlbmFibGVfU01UUFVURjgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHBhcmFtZXRlcnMgY2Fubm90IGJlIHNldCB0byBUcnVlIGF0IHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgc2FtZSB0aW1lLiIpCisgICAgICAgICAgICBkZWNvZGVfZGF0YSA9IEZhbHNlCisgICAgICAgIGlmIGRlY29kZV9kYXRhIGlzIE5vbmU6CisgICAgICAgICAgICB3YXJuKCJUaGUgZGVjb2RlX2RhdGEgZGVmYXVsdCBvZiBUcnVlIHdpbGwgY2hhbmdlIHRvIEZhbHNlIGluIDMuNjsiCisgICAgICAgICAgICAgICAgICIgc3BlY2lmeSBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBrZXl3b3JkIiwKKyAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICAgICAgZGVjb2RlX2RhdGEgPSBUcnVlCisgICAgICAgIHNlbGYuX2RlY29kZV9kYXRhID0gZGVjb2RlX2RhdGEKICAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9bWFwKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIGdhaV9yZXN1bHRzID0gc29ja2V0LmdldGFkZHJpbmZvKCpsb2NhbGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChnYWlfcmVzdWx0c1swXVswXSwgZ2FpX3Jlc3VsdHNbMF1bMV0pCiAgICAgICAgICAgICAjIHRyeSB0byByZS11c2UgYSBzZXJ2ZXIgcG9ydCBpZiBwb3NzaWJsZQogICAgICAgICAgICAgc2VsZi5zZXRfcmV1c2VfYWRkcigpCiAgICAgICAgICAgICBzZWxmLmJpbmQobG9jYWxhZGRyKQpAQCAtNTg5LDExICs2NzEsMTYgQEAKIAogICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6CiAgICAgICAgIHByaW50KCdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKSwgZmlsZT1ERUJVR1NUUkVBTSkKLSAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXApCisgICAgICAgIGNoYW5uZWwgPSBzZWxmLmNoYW5uZWxfY2xhc3Moc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5hYmxlX1NNVFBVVEY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlY29kZV9kYXRhKQogCiAgICAgIyBBUEkgZm9yICJkb2luZyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIG1lc3NhZ2UiCi0gICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CisgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSwgKiprd2FyZ3MpOgogICAgICAgICAiIiJPdmVycmlkZSB0aGlzIGFic3RyYWN0IG1ldGhvZCB0byBoYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUgY2xpZW50LgogCiAgICAgICAgIHBlZXIgaXMgYSB0dXBsZSBjb250YWluaW5nIChpcGFkZHIsIHBvcnQpIG9mIHRoZSBjbGllbnQgdGhhdCBtYWRlIHRoZQpAQCAtNjExLDI5ICs2OTgsNTggQEAKICAgICAgICAgY29udGFpbmluZyBhIGAuJyBmb2xsb3dlZCBieSBvdGhlciB0ZXh0IGhhcyBoYWQgdGhlIGxlYWRpbmcgZG90CiAgICAgICAgIHJlbW92ZWQuCiAKLSAgICAgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIE5vbmUsIGZvciBhIG5vcm1hbCBgMjUwIE9rJyByZXNwb25zZTsKLSAgICAgICAgb3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIGRlc2lyZWQgcmVzcG9uc2Ugc3RyaW5nIGluIFJGQyA4MjEgZm9ybWF0LgorICAgICAgICBrd2FyZ3MgaXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4gSXQgaXMgZW1wdHkKKyAgICAgICAgdW5sZXNzIGRlY29kZV9kYXRhPUZhbHNlIG9yIGVuYWJsZV9TTVRQVVRGOD1UcnVlIHdhcyBnaXZlbiBhcyBpbml0CisgICAgICAgIHBhcmFtZXRlciwgaW4gd2hpY2ggY2FzZSB1dCB3aWxsIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBrZXlzOgorICAgICAgICAgICAgJ21haWxfb3B0aW9ucyc6IGxpc3Qgb2YgcGFyYW1ldGVycyB0byB0aGUgbWFpbCBjb21tYW5kLiAgQWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgYXJlIHVwcGVyY2FzZSBzdHJpbmdzLiAgRXhhbXBsZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ0JPRFk9OEJJVE1JTUUnLCAnU01UUFVURjgnXS4KKyAgICAgICAgICAgICdyY3B0X29wdGlvbnMnOiBzYW1lLCBmb3IgdGhlIHJjcHQgY29tbWFuZC4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gTm9uZSBmb3IgYSBub3JtYWwgYDI1MCBPaycgcmVzcG9uc2U7CisgICAgICAgIG90aGVyd2lzZSwgaXQgc2hvdWxkIHJldHVybiB0aGUgZGVzaXJlZCByZXNwb25zZSBzdHJpbmcgaW4gUkZDIDgyMQorICAgICAgICBmb3JtYXQuCiAKICAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCiBjbGFzcyBEZWJ1Z2dpbmdTZXJ2ZXIoU01UUFNlcnZlcik6Ci0gICAgIyBEbyBzb21ldGhpbmcgd2l0aCB0aGUgZ2F0aGVyZWQgbWVzc2FnZQotICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgorCisgICAgZGVmIF9wcmludF9tZXNzYWdlX2NvbnRlbnQoc2VsZiwgcGVlciwgZGF0YSk6CiAgICAgICAgIGluaGVhZGVycyA9IDEKLSAgICAgICAgbGluZXMgPSBkYXRhLnNwbGl0KCdcbicpCi0gICAgICAgIHByaW50KCctLS0tLS0tLS0tIE1FU1NBR0UgRk9MTE9XUyAtLS0tLS0tLS0tJykKKyAgICAgICAgbGluZXMgPSBkYXRhLnNwbGl0bGluZXMoKQogICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAgICAgICMgaGVhZGVycyBmaXJzdAogICAgICAgICAgICAgaWYgaW5oZWFkZXJzIGFuZCBub3QgbGluZToKLSAgICAgICAgICAgICAgICBwcmludCgnWC1QZWVyOicsIHBlZXJbMF0pCisgICAgICAgICAgICAgICAgcGVlcmhlYWRlciA9ICdYLVBlZXI6ICcgKyBwZWVyWzBdCisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgIyBkZWNvZGVkX2RhdGE9ZmFsc2U7IG1ha2UgaGVhZGVyIG1hdGNoIG90aGVyIGJpbmFyeSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgcGVlcmhlYWRlciA9IHJlcHIocGVlcmhlYWRlci5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgICAgICAgICAgcHJpbnQocGVlcmhlYWRlcikKICAgICAgICAgICAgICAgICBpbmhlYWRlcnMgPSAwCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCBzdHIpOgorICAgICAgICAgICAgICAgICMgQXZvaWQgc3B1cmlvdXMgJ3N0ciBvbiBieXRlcyBpbnN0YW5jZScgd2FybmluZy4KKyAgICAgICAgICAgICAgICBsaW5lID0gcmVwcihsaW5lKQogICAgICAgICAgICAgcHJpbnQobGluZSkKKworICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEsICoqa3dhcmdzKToKKyAgICAgICAgcHJpbnQoJy0tLS0tLS0tLS0gTUVTU0FHRSBGT0xMT1dTIC0tLS0tLS0tLS0nKQorICAgICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICBpZiBrd2FyZ3MuZ2V0KCdtYWlsX29wdGlvbnMnKToKKyAgICAgICAgICAgICAgICBwcmludCgnbWFpbCBvcHRpb25zOiAlcycgJSBrd2FyZ3NbJ21haWxfb3B0aW9ucyddKQorICAgICAgICAgICAgaWYga3dhcmdzLmdldCgncmNwdF9vcHRpb25zJyk6CisgICAgICAgICAgICAgICAgcHJpbnQoJ3JjcHQgb3B0aW9uczogJXNcbicgJSBrd2FyZ3NbJ3JjcHRfb3B0aW9ucyddKQorICAgICAgICBzZWxmLl9wcmludF9tZXNzYWdlX2NvbnRlbnQocGVlciwgZGF0YSkKICAgICAgICAgcHJpbnQoJy0tLS0tLS0tLS0tLSBFTkQgTUVTU0FHRSAtLS0tLS0tLS0tLS0nKQogCiAKIGNsYXNzIFB1cmVQcm94eShTTVRQU2VydmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgJ2VuYWJsZV9TTVRQVVRGOCcgaW4ga3dhcmdzIGFuZCBrd2FyZ3NbJ2VuYWJsZV9TTVRQVVRGOCddOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHVyZVByb3h5IGRvZXMgbm90IHN1cHBvcnQgU01UUFVURjguIikKKyAgICAgICAgc3VwZXIoUHVyZVByb3h5LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKICAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKToKICAgICAgICAgbGluZXMgPSBkYXRhLnNwbGl0KCdcbicpCiAgICAgICAgICMgTG9vayBmb3IgdGhlIGxhc3QgaGVhZGVyCkBAIC02NzQsNiArNzkwLDExIEBACiAKIAogY2xhc3MgTWFpbG1hblByb3h5KFB1cmVQcm94eSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmICdlbmFibGVfU01UUFVURjgnIGluIGt3YXJncyBhbmQga3dhcmdzWydlbmFibGVfU01UUFVURjgnXToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk1haWxtYW5Qcm94eSBkb2VzIG5vdCBzdXBwb3J0IFNNVFBVVEY4LiIpCisgICAgICAgIHN1cGVyKFB1cmVQcm94eSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCiAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CiAgICAgICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAgICAgICAgIGZyb20gTWFpbG1hbiBpbXBvcnQgVXRpbHMKQEAgLTc1MiwxNyArODczLDE5IEBACiAKIAogY2xhc3MgT3B0aW9uczoKLSAgICBzZXR1aWQgPSAxCisgICAgc2V0dWlkID0gVHJ1ZQogICAgIGNsYXNzbmFtZSA9ICdQdXJlUHJveHknCiAgICAgc2l6ZV9saW1pdCA9IE5vbmUKKyAgICBlbmFibGVfU01UUFVURjggPSBGYWxzZQogCiAKIGRlZiBwYXJzZWFyZ3MoKToKICAgICBnbG9iYWwgREVCVUdTVFJFQU0KICAgICB0cnk6CiAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KAotICAgICAgICAgICAgc3lzLmFyZ3ZbMTpdLCAnblZoYzpzOmQnLAotICAgICAgICAgICAgWydjbGFzcz0nLCAnbm9zZXR1aWQnLCAndmVyc2lvbicsICdoZWxwJywgJ3NpemU9JywgJ2RlYnVnJ10pCisgICAgICAgICAgICBzeXMuYXJndlsxOl0sICduVmhjOnM6ZHUnLAorICAgICAgICAgICAgWydjbGFzcz0nLCAnbm9zZXR1aWQnLCAndmVyc2lvbicsICdoZWxwJywgJ3NpemU9JywgJ2RlYnVnJywKKyAgICAgICAgICAgICAnc210cHV0ZjgnXSkKICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIGU6CiAgICAgICAgIHVzYWdlKDEsIGUpCiAKQEAgLTc3NCwxMSArODk3LDEzIEBACiAgICAgICAgICAgICBwcmludChfX3ZlcnNpb25fXykKICAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLW4nLCAnLS1ub3NldHVpZCcpOgotICAgICAgICAgICAgb3B0aW9ucy5zZXR1aWQgPSAwCisgICAgICAgICAgICBvcHRpb25zLnNldHVpZCA9IEZhbHNlCiAgICAgICAgIGVsaWYgb3B0IGluICgnLWMnLCAnLS1jbGFzcycpOgogICAgICAgICAgICAgb3B0aW9ucy5jbGFzc25hbWUgPSBhcmcKICAgICAgICAgZWxpZiBvcHQgaW4gKCctZCcsICctLWRlYnVnJyk6CiAgICAgICAgICAgICBERUJVR1NUUkVBTSA9IHN5cy5zdGRlcnIKKyAgICAgICAgZWxpZiBvcHQgaW4gKCctdScsICctLXNtdHB1dGY4Jyk6CisgICAgICAgICAgICBvcHRpb25zLmVuYWJsZV9TTVRQVVRGOCA9IFRydWUKICAgICAgICAgZWxpZiBvcHQgaW4gKCctcycsICctLXNpemUnKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpbnRfc2l6ZSA9IGludChhcmcpCkBAIC04MzMsNyArOTU4LDcgQEAKICAgICBjbGFzc18gPSBnZXRhdHRyKG1vZCwgY2xhc3NuYW1lKQogICAgIHByb3h5ID0gY2xhc3NfKChvcHRpb25zLmxvY2FsaG9zdCwgb3B0aW9ucy5sb2NhbHBvcnQpLAogICAgICAgICAgICAgICAgICAgIChvcHRpb25zLnJlbW90ZWhvc3QsIG9wdGlvbnMucmVtb3RlcG9ydCksCi0gICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaXplX2xpbWl0KQorICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2l6ZV9saW1pdCwgZW5hYmxlX1NNVFBVVEY4PW9wdGlvbnMuZW5hYmxlX1NNVFBVVEY4KQogICAgIGlmIG9wdGlvbnMuc2V0dWlkOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgcHdkCmRpZmYgLS1naXQgYS9MaWIvc210cGxpYi5weSBiL0xpYi9zbXRwbGliLnB5CmluZGV4IGFjMWY1OTMuLjViOWU2NjUgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwbGliLnB5CisrKyBiL0xpYi9zbXRwbGliLnB5CkBAIC01MCw4ICs1MCw5IEBACiBpbXBvcnQgYmFzZTY0CiBpbXBvcnQgaG1hYwogaW1wb3J0IGNvcHkKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHN5cwogZnJvbSBlbWFpbC5iYXNlNjRtaW1lIGltcG9ydCBib2R5X2VuY29kZSBhcyBlbmNvZGVfYmFzZTY0Ci1mcm9tIHN5cyBpbXBvcnQgc3RkZXJyCiAKIF9fYWxsX18gPSBbIlNNVFBFeGNlcHRpb24iLCAiU01UUFNlcnZlckRpc2Nvbm5lY3RlZCIsICJTTVRQUmVzcG9uc2VFeGNlcHRpb24iLAogICAgICAgICAgICAiU01UUFNlbmRlclJlZnVzZWQiLCAiU01UUFJlY2lwaWVudHNSZWZ1c2VkIiwgIlNNVFBEYXRhRXJyb3IiLApAQCAtNzAsNiArNzEsMTMgQEAKIGNsYXNzIFNNVFBFeGNlcHRpb24oT1NFcnJvcik6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgYWxsIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoaXMgbW9kdWxlLiIiIgogCitjbGFzcyBTTVRQTm90U3VwcG9ydGVkRXJyb3IoU01UUEV4Y2VwdGlvbik6CisgICAgIiIiVGhlIGNvbW1hbmQgb3Igb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFNNVFAgc2VydmVyLgorCisgICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJ1biBhIGNvbW1hbmQgb3IgYQorICAgIGNvbW1hbmQgd2l0aCBhbiBvcHRpb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLgorICAgICIiIgorCiBjbGFzcyBTTVRQU2VydmVyRGlzY29ubmVjdGVkKFNNVFBFeGNlcHRpb24pOgogICAgICIiIk5vdCBjb25uZWN0ZWQgdG8gYW55IFNNVFAgc2VydmVyLgogCkBAIC0yMzYsNiArMjQ0LDcgQEAKICAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLmVzbXRwX2ZlYXR1cmVzID0ge30KKyAgICAgICAgc2VsZi5jb21tYW5kX2VuY29kaW5nID0gJ2FzY2lpJwogICAgICAgICBzZWxmLnNvdXJjZV9hZGRyZXNzID0gc291cmNlX2FkZHJlc3MKIAogICAgICAgICBpZiBob3N0OgpAQCAtMjgyLDEyICsyOTEsMTcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGRlYnVnbGV2ZWwKIAorICAgIGRlZiBfcHJpbnRfZGVidWcoc2VsZiwgKmFyZ3MpOgorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAxOgorICAgICAgICAgICAgcHJpbnQoZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkudGltZSgpLCAqYXJncywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoKmFyZ3MsIGZpbGU9c3lzLnN0ZGVycikKKwogICAgIGRlZiBfZ2V0X3NvY2tldChzZWxmLCBob3N0LCBwb3J0LCB0aW1lb3V0KToKICAgICAgICAgIyBUaGlzIG1ha2VzIGl0IHNpbXBsZXIgZm9yIFNNVFBfU1NMIHRvIHVzZSB0aGUgU01UUCBjb25uZWN0IGNvZGUKICAgICAgICAgIyBhbmQganVzdCBhbHRlciB0aGUgc29ja2V0IGNvbm5lY3Rpb24gYml0LgogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgotICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Q6IHRvJywgKGhvc3QsIHBvcnQpLCBzZWxmLnNvdXJjZV9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zdGRlcnIpCisgICAgICAgICAgICBzZWxmLl9wcmludF9kZWJ1ZygnY29ubmVjdDogdG8nLCAoaG9zdCwgcG9ydCksIHNlbGYuc291cmNlX2FkZHJlc3MpCiAgICAgICAgIHJldHVybiBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MpCiAKQEAgLTMxNywyMSArMzMxLDI0IEBACiAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgcG9ydCA9IHNlbGYuZGVmYXVsdF9wb3J0CiAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6Ci0gICAgICAgICAgICBwcmludCgnY29ubmVjdDonLCAoaG9zdCwgcG9ydCksIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRfZGVidWcoJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQpKQogICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9nZXRfc29ja2V0KGhvc3QsIHBvcnQsIHNlbGYudGltZW91dCkKICAgICAgICAgc2VsZi5maWxlID0gTm9uZQogICAgICAgICAoY29kZSwgbXNnKSA9IHNlbGYuZ2V0cmVwbHkoKQogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgotICAgICAgICAgICAgcHJpbnQoImNvbm5lY3Q6IiwgbXNnLCBmaWxlPXN0ZGVycikKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X2RlYnVnKCdjb25uZWN0OicsIHJlcHIobXNnKSkKICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKICAgICBkZWYgc2VuZChzZWxmLCBzKToKICAgICAgICAgIiIiU2VuZCBgcycgdG8gdGhlIHNlcnZlci4iIiIKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKLSAgICAgICAgICAgIHByaW50KCdzZW5kOicsIHJlcHIocyksIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRfZGVidWcoJ3NlbmQ6JywgcmVwcihzKSkKICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnc29jaycpIGFuZCBzZWxmLnNvY2s6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHMsIHN0cik6Ci0gICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKCJhc2NpaSIpCisgICAgICAgICAgICAgICAgIyBzZW5kIGlzIHVzZWQgYnkgdGhlICdkYXRhJyBjb21tYW5kLCB3aGVyZSBjb21tYW5kX2VuY29kaW5nCisgICAgICAgICAgICAgICAgIyBzaG91bGQgbm90IGJlIHVzZWQsIGJ1dCAnZGF0YScgbmVlZHMgdG8gY29udmVydCB0aGUgc3RyaW5nIHRvCisgICAgICAgICAgICAgICAgIyBiaW5hcnkgaXRzZWxmIGFueXdheSwgc28gdGhhdCdzIG5vdCBhIHByb2JsZW0uCisgICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKHNlbGYuY29tbWFuZF9lbmNvZGluZykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CkBAIC0zNzUsNyArMzkyLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVjdGVkKCJDb25uZWN0aW9uIHVuZXhwZWN0ZWRseSBjbG9zZWQiKQogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKLSAgICAgICAgICAgICAgICBwcmludCgncmVwbHk6JywgcmVwcihsaW5lKSwgZmlsZT1zdGRlcnIpCisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRfZGVidWcoJ3JlcGx5OicsIHJlcHIobGluZSkpCiAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBfTUFYTElORToKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSBTTVRQUmVzcG9uc2VFeGNlcHRpb24oNTAwLCAiTGluZSB0b28gbG9uZy4iKQpAQCAtMzk0LDggKzQxMSw3IEBACiAKICAgICAgICAgZXJybXNnID0gYiJcbiIuam9pbihyZXNwKQogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgotICAgICAgICAgICAgcHJpbnQoJ3JlcGx5OiByZXRjb2RlICglcyk7IE1zZzogJXMnICUgKGVycmNvZGUsIGVycm1zZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zdGRlcnIpCisgICAgICAgICAgICBzZWxmLl9wcmludF9kZWJ1ZygncmVwbHk6IHJldGNvZGUgKCVzKTsgTXNnOiAlYScgJSAoZXJyY29kZSwgZXJybXNnKSkKICAgICAgICAgcmV0dXJuIGVycmNvZGUsIGVycm1zZwogCiAgICAgZGVmIGRvY21kKHNlbGYsIGNtZCwgYXJncz0iIik6CkBAIC00NzcsNiArNDkzLDcgQEAKIAogICAgIGRlZiByc2V0KHNlbGYpOgogICAgICAgICAiIiJTTVRQICdyc2V0JyBjb21tYW5kIC0tIHJlc2V0cyBzZXNzaW9uLiIiIgorICAgICAgICBzZWxmLmNvbW1hbmRfZW5jb2RpbmcgPSAnYXNjaWknCiAgICAgICAgIHJldHVybiBzZWxmLmRvY21kKCJyc2V0IikKIAogICAgIGRlZiBfcnNldChzZWxmKToKQEAgLTQ5Niw5ICs1MTMsMjIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuZG9jbWQoIm5vb3AiKQogCiAgICAgZGVmIG1haWwoc2VsZiwgc2VuZGVyLCBvcHRpb25zPVtdKToKLSAgICAgICAgIiIiU01UUCAnbWFpbCcgY29tbWFuZCAtLSBiZWdpbnMgbWFpbCB4ZmVyIHNlc3Npb24uIiIiCisgICAgICAgICIiIlNNVFAgJ21haWwnIGNvbW1hbmQgLS0gYmVnaW5zIG1haWwgeGZlciBzZXNzaW9uLgorCisgICAgICAgIFRoaXMgbWV0aG9kIG1heSByYWlzZSB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnM6CisKKyAgICAgICAgIFNNVFBOb3RTdXBwb3J0ZWRFcnJvciAgVGhlIG9wdGlvbnMgcGFyYW1ldGVyIGluY2x1ZGVzICdTTVRQVVRGOCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRoZSBTTVRQVVRGOCBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2VydmVyLgorICAgICAgICAiIiIKICAgICAgICAgb3B0aW9ubGlzdCA9ICcnCiAgICAgICAgIGlmIG9wdGlvbnMgYW5kIHNlbGYuZG9lc19lc210cDoKKyAgICAgICAgICAgIGlmIGFueSh4Lmxvd2VyKCk9PSdzbXRwdXRmOCcgZm9yIHggaW4gb3B0aW9ucyk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5oYXNfZXh0bignc210cHV0ZjgnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kX2VuY29kaW5nID0gJ3V0Zi04JworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBOb3RTdXBwb3J0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICdTTVRQVVRGOCBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpCiAgICAgICAgICAgICBvcHRpb25saXN0ID0gJyAnICsgJyAnLmpvaW4ob3B0aW9ucykKICAgICAgICAgc2VsZi5wdXRjbWQoIm1haWwiLCAiRlJPTTolcyVzIiAlIChxdW90ZWFkZHIoc2VuZGVyKSwgb3B0aW9ubGlzdCkpCiAgICAgICAgIHJldHVybiBzZWxmLmdldHJlcGx5KCkKQEAgLTUyNCw3ICs1NTQsNyBAQAogICAgICAgICBzZWxmLnB1dGNtZCgiZGF0YSIpCiAgICAgICAgIChjb2RlLCByZXBsKSA9IHNlbGYuZ2V0cmVwbHkoKQogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgotICAgICAgICAgICAgcHJpbnQoImRhdGE6IiwgKGNvZGUsIHJlcGwpLCBmaWxlPXN0ZGVycikKKyAgICAgICAgICAgIHNlbGYuX3ByaW50X2RlYnVnKCdkYXRhOicsIChjb2RlLCByZXBsKSkKICAgICAgICAgaWYgY29kZSAhPSAzNTQ6CiAgICAgICAgICAgICByYWlzZSBTTVRQRGF0YUVycm9yKGNvZGUsIHJlcGwpCiAgICAgICAgIGVsc2U6CkBAIC01MzcsNyArNTY3LDcgQEAKICAgICAgICAgICAgIHNlbGYuc2VuZChxKQogICAgICAgICAgICAgKGNvZGUsIG1zZykgPSBzZWxmLmdldHJlcGx5KCkKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6Ci0gICAgICAgICAgICAgICAgcHJpbnQoImRhdGE6IiwgKGNvZGUsIG1zZyksIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50X2RlYnVnKCdkYXRhOicsIChjb2RlLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKICAgICBkZWYgdmVyaWZ5KHNlbGYsIGFkZHJlc3MpOgpAQCAtNTcxLDEyICs2MDEsNzcgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgKDIwMCA8PSBjb2RlIDw9IDI5OSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBIZWxvRXJyb3IoY29kZSwgcmVzcCkKIAotICAgIGRlZiBsb2dpbihzZWxmLCB1c2VyLCBwYXNzd29yZCk6CisgICAgZGVmIGF1dGgoc2VsZiwgbWVjaGFuaXNtLCBhdXRob2JqZWN0LCAqLCBpbml0aWFsX3Jlc3BvbnNlX29rPVRydWUpOgorICAgICAgICAiIiJBdXRoZW50aWNhdGlvbiBjb21tYW5kIC0gcmVxdWlyZXMgcmVzcG9uc2UgcHJvY2Vzc2luZy4KKworICAgICAgICAnbWVjaGFuaXNtJyBzcGVjaWZpZXMgd2hpY2ggYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGlzIHRvCisgICAgICAgIGJlIHVzZWQgLSB0aGUgdmFsaWQgdmFsdWVzIGFyZSB0aG9zZSBsaXN0ZWQgaW4gdGhlICdhdXRoJworICAgICAgICBlbGVtZW50IG9mICdlc210cF9mZWF0dXJlcycuCisKKyAgICAgICAgJ2F1dGhvYmplY3QnIG11c3QgYmUgYSBjYWxsYWJsZSBvYmplY3QgdGFraW5nIGEgc2luZ2xlIGFyZ3VtZW50OgorCisgICAgICAgICAgICAgICAgZGF0YSA9IGF1dGhvYmplY3QoY2hhbGxlbmdlKQorCisgICAgICAgIEl0IHdpbGwgYmUgY2FsbGVkIHRvIHByb2Nlc3MgdGhlIHNlcnZlcidzIGNoYWxsZW5nZSByZXNwb25zZTsgdGhlCisgICAgICAgIGNoYWxsZW5nZSBhcmd1bWVudCBpdCBpcyBwYXNzZWQgd2lsbCBiZSBhIGJ5dGVzLiAgSXQgc2hvdWxkIHJldHVybgorICAgICAgICBieXRlcyBkYXRhIHRoYXQgd2lsbCBiZSBiYXNlNjQgZW5jb2RlZCBhbmQgc2VudCB0byB0aGUgc2VydmVyLgorCisgICAgICAgIEtleXdvcmQgYXJndW1lbnRzOgorICAgICAgICAgICAgLSBpbml0aWFsX3Jlc3BvbnNlX29rOiBBbGxvdyBzZW5kaW5nIHRoZSBSRkMgNDk1NCBpbml0aWFsLXJlc3BvbnNlCisgICAgICAgICAgICAgIHRvIHRoZSBBVVRIIGNvbW1hbmQsIGlmIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHN1cHBvcnRzIGl0LgorICAgICAgICAiIiIKKyAgICAgICAgIyBSRkMgNDk1NCBhbGxvd3MgYXV0aCBtZXRob2RzIHRvIHByb3ZpZGUgYW4gaW5pdGlhbCByZXNwb25zZS4gIE5vdCBhbGwKKyAgICAgICAgIyBtZXRob2RzIHN1cHBvcnQgaXQuICBCeSBkZWZpbml0aW9uLCBpZiB0aGV5IHJldHVybiBzb21ldGhpbmcgb3RoZXIKKyAgICAgICAgIyB0aGFuIE5vbmUgd2hlbiBjaGFsbGVuZ2UgaXMgTm9uZSwgdGhlbiB0aGV5IGRvLiAgU2VlIGlzc3VlICMxNTAxNC4KKyAgICAgICAgbWVjaGFuaXNtID0gbWVjaGFuaXNtLnVwcGVyKCkKKyAgICAgICAgaW5pdGlhbF9yZXNwb25zZSA9IChhdXRob2JqZWN0KCkgaWYgaW5pdGlhbF9yZXNwb25zZV9vayBlbHNlIE5vbmUpCisgICAgICAgIGlmIGluaXRpYWxfcmVzcG9uc2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXNwb25zZSA9IGVuY29kZV9iYXNlNjQoaW5pdGlhbF9yZXNwb25zZS5lbmNvZGUoJ2FzY2lpJyksIGVvbD0nJykKKyAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZG9jbWQoIkFVVEgiLCBtZWNoYW5pc20gKyAiICIgKyByZXNwb25zZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZG9jbWQoIkFVVEgiLCBtZWNoYW5pc20pCisgICAgICAgICMgSWYgc2VydmVyIHJlc3BvbmRzIHdpdGggYSBjaGFsbGVuZ2UsIHNlbmQgdGhlIHJlc3BvbnNlLgorICAgICAgICBpZiBjb2RlID09IDMzNDoKKyAgICAgICAgICAgIGNoYWxsZW5nZSA9IGJhc2U2NC5kZWNvZGVieXRlcyhyZXNwKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBlbmNvZGVfYmFzZTY0KAorICAgICAgICAgICAgICAgIGF1dGhvYmplY3QoY2hhbGxlbmdlKS5lbmNvZGUoJ2FzY2lpJyksIGVvbD0nJykKKyAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZG9jbWQocmVzcG9uc2UpCisgICAgICAgIGlmIGNvZGUgaW4gKDIzNSwgNTAzKToKKyAgICAgICAgICAgIHJldHVybiAoY29kZSwgcmVzcCkKKyAgICAgICAgcmFpc2UgU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IoY29kZSwgcmVzcCkKKworICAgIGRlZiBhdXRoX2NyYW1fbWQ1KHNlbGYsIGNoYWxsZW5nZT1Ob25lKToKKyAgICAgICAgIiIiIEF1dGhvYmplY3QgdG8gdXNlIHdpdGggQ1JBTS1NRDUgYXV0aGVudGljYXRpb24uIFJlcXVpcmVzIHNlbGYudXNlcgorICAgICAgICBhbmQgc2VsZi5wYXNzd29yZCB0byBiZSBzZXQuIiIiCisgICAgICAgICMgQ1JBTS1NRDUgZG9lcyBub3Qgc3VwcG9ydCBpbml0aWFsLXJlc3BvbnNlLgorICAgICAgICBpZiBjaGFsbGVuZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLnVzZXIgKyAiICIgKyBobWFjLkhNQUMoCisgICAgICAgICAgICBzZWxmLnBhc3N3b3JkLmVuY29kZSgnYXNjaWknKSwgY2hhbGxlbmdlLCAnbWQ1JykuaGV4ZGlnZXN0KCkKKworICAgIGRlZiBhdXRoX3BsYWluKHNlbGYsIGNoYWxsZW5nZT1Ob25lKToKKyAgICAgICAgIiIiIEF1dGhvYmplY3QgdG8gdXNlIHdpdGggUExBSU4gYXV0aGVudGljYXRpb24uIFJlcXVpcmVzIHNlbGYudXNlciBhbmQKKyAgICAgICAgc2VsZi5wYXNzd29yZCB0byBiZSBzZXQuIiIiCisgICAgICAgIHJldHVybiAiXDAlc1wwJXMiICUgKHNlbGYudXNlciwgc2VsZi5wYXNzd29yZCkKKworICAgIGRlZiBhdXRoX2xvZ2luKHNlbGYsIGNoYWxsZW5nZT1Ob25lKToKKyAgICAgICAgIiIiIEF1dGhvYmplY3QgdG8gdXNlIHdpdGggTE9HSU4gYXV0aGVudGljYXRpb24uIFJlcXVpcmVzIHNlbGYudXNlciBhbmQKKyAgICAgICAgc2VsZi5wYXNzd29yZCB0byBiZSBzZXQuIiIiCisgICAgICAgIGlmIGNoYWxsZW5nZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudXNlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFzc3dvcmQKKworICAgIGRlZiBsb2dpbihzZWxmLCB1c2VyLCBwYXNzd29yZCwgKiwgaW5pdGlhbF9yZXNwb25zZV9vaz1UcnVlKToKICAgICAgICAgIiIiTG9nIGluIG9uIGFuIFNNVFAgc2VydmVyIHRoYXQgcmVxdWlyZXMgYXV0aGVudGljYXRpb24uCiAKICAgICAgICAgVGhlIGFyZ3VtZW50cyBhcmU6Ci0gICAgICAgICAgICAtIHVzZXI6ICAgICBUaGUgdXNlciBuYW1lIHRvIGF1dGhlbnRpY2F0ZSB3aXRoLgotICAgICAgICAgICAgLSBwYXNzd29yZDogVGhlIHBhc3N3b3JkIGZvciB0aGUgYXV0aGVudGljYXRpb24uCisgICAgICAgICAgICAtIHVzZXI6ICAgICAgICAgVGhlIHVzZXIgbmFtZSB0byBhdXRoZW50aWNhdGUgd2l0aC4KKyAgICAgICAgICAgIC0gcGFzc3dvcmQ6ICAgICBUaGUgcGFzc3dvcmQgZm9yIHRoZSBhdXRoZW50aWNhdGlvbi4KKworICAgICAgICBLZXl3b3JkIGFyZ3VtZW50czoKKyAgICAgICAgICAgIC0gaW5pdGlhbF9yZXNwb25zZV9vazogQWxsb3cgc2VuZGluZyB0aGUgUkZDIDQ5NTQgaW5pdGlhbC1yZXNwb25zZQorICAgICAgICAgICAgICB0byB0aGUgQVVUSCBjb21tYW5kLCBpZiB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBzdXBwb3J0cyBpdC4KIAogICAgICAgICBJZiB0aGVyZSBoYXMgYmVlbiBubyBwcmV2aW91cyBFSExPIG9yIEhFTE8gY29tbWFuZCB0aGlzIHNlc3Npb24sIHRoaXMKICAgICAgICAgbWV0aG9kIHRyaWVzIEVTTVRQIEVITE8gZmlyc3QuCkBAIC01ODksNjcgKzY4NCw0OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBoZWxvIGdyZWV0aW5nLgogICAgICAgICAgU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IgIFRoZSBzZXJ2ZXIgZGlkbid0IGFjY2VwdCB0aGUgdXNlcm5hbWUvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgY29tYmluYXRpb24uCisgICAgICAgICBTTVRQTm90U3VwcG9ydGVkRXJyb3IgICAgVGhlIEFVVEggY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci4KICAgICAgICAgIFNNVFBFeGNlcHRpb24gICAgICAgICAgICBObyBzdWl0YWJsZSBhdXRoZW50aWNhdGlvbiBtZXRob2Qgd2FzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQuCiAgICAgICAgICIiIgogCi0gICAgICAgIGRlZiBlbmNvZGVfY3JhbV9tZDUoY2hhbGxlbmdlLCB1c2VyLCBwYXNzd29yZCk6Ci0gICAgICAgICAgICBjaGFsbGVuZ2UgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoY2hhbGxlbmdlKQotICAgICAgICAgICAgcmVzcG9uc2UgPSB1c2VyICsgIiAiICsgaG1hYy5ITUFDKHBhc3N3b3JkLmVuY29kZSgnYXNjaWknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2UsICdtZDUnKS5oZXhkaWdlc3QoKQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZV9iYXNlNjQocmVzcG9uc2UuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpCi0KLSAgICAgICAgZGVmIGVuY29kZV9wbGFpbih1c2VyLCBwYXNzd29yZCk6Ci0gICAgICAgICAgICBzID0gIlwwJXNcMCVzIiAlICh1c2VyLCBwYXNzd29yZCkKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVfYmFzZTY0KHMuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpCi0KLSAgICAgICAgQVVUSF9QTEFJTiA9ICJQTEFJTiIKLSAgICAgICAgQVVUSF9DUkFNX01ENSA9ICJDUkFNLU1ENSIKLSAgICAgICAgQVVUSF9MT0dJTiA9ICJMT0dJTiIKLQogICAgICAgICBzZWxmLmVobG9fb3JfaGVsb19pZl9uZWVkZWQoKQotCiAgICAgICAgIGlmIG5vdCBzZWxmLmhhc19leHRuKCJhdXRoIik6Ci0gICAgICAgICAgICByYWlzZSBTTVRQRXhjZXB0aW9uKCJTTVRQIEFVVEggZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyLiIpCisgICAgICAgICAgICByYWlzZSBTTVRQTm90U3VwcG9ydGVkRXJyb3IoCisgICAgICAgICAgICAgICAgIlNNVFAgQVVUSCBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIuIikKIAogICAgICAgICAjIEF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgdGhlIHNlcnZlciBjbGFpbXMgdG8gc3VwcG9ydAogICAgICAgICBhZHZlcnRpc2VkX2F1dGhsaXN0ID0gc2VsZi5lc210cF9mZWF0dXJlc1siYXV0aCJdLnNwbGl0KCkKIAotICAgICAgICAjIExpc3Qgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyB3ZSBzdXBwb3J0OiBmcm9tIHByZWZlcnJlZCB0bwotICAgICAgICAjIGxlc3MgcHJlZmVycmVkIG1ldGhvZHMuIEV4Y2VwdCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGVzdGluZyB0aGUgd2Vha2VyCi0gICAgICAgICMgb25lcywgd2UgcHJlZmVyIHN0cm9uZ2VyIG1ldGhvZHMgbGlrZSBDUkFNLU1ENToKLSAgICAgICAgcHJlZmVycmVkX2F1dGhzID0gW0FVVEhfQ1JBTV9NRDUsIEFVVEhfUExBSU4sIEFVVEhfTE9HSU5dCisgICAgICAgICMgQXV0aGVudGljYXRpb24gbWV0aG9kcyB3ZSBjYW4gaGFuZGxlIGluIG91ciBwcmVmZXJyZWQgb3JkZXI6CisgICAgICAgIHByZWZlcnJlZF9hdXRocyA9IFsnQ1JBTS1NRDUnLCAnUExBSU4nLCAnTE9HSU4nXQogCi0gICAgICAgICMgV2UgdHJ5IHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHRoZSBzZXJ2ZXIgYWR2ZXJ0aXNlcywgYnV0IG9ubHkgdGhlCi0gICAgICAgICMgb25lcyAqd2UqIHN1cHBvcnQuIEFuZCBpbiBvdXIgcHJlZmVycmVkIG9yZGVyLgotICAgICAgICBhdXRobGlzdCA9IFthdXRoIGZvciBhdXRoIGluIHByZWZlcnJlZF9hdXRocyBpZiBhdXRoIGluIGFkdmVydGlzZWRfYXV0aGxpc3RdCisgICAgICAgICMgV2UgdHJ5IHRoZSBzdXBwb3J0ZWQgYXV0aGVudGljYXRpb25zIGluIG91ciBwcmVmZXJyZWQgb3JkZXIsIGlmCisgICAgICAgICMgdGhlIHNlcnZlciBzdXBwb3J0cyB0aGVtLgorICAgICAgICBhdXRobGlzdCA9IFthdXRoIGZvciBhdXRoIGluIHByZWZlcnJlZF9hdXRocworICAgICAgICAgICAgICAgICAgICBpZiBhdXRoIGluIGFkdmVydGlzZWRfYXV0aGxpc3RdCiAgICAgICAgIGlmIG5vdCBhdXRobGlzdDoKICAgICAgICAgICAgIHJhaXNlIFNNVFBFeGNlcHRpb24oIk5vIHN1aXRhYmxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBmb3VuZC4iKQogCiAgICAgICAgICMgU29tZSBzZXJ2ZXJzIGFkdmVydGlzZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHRoZXkgZG9uJ3QgcmVhbGx5CiAgICAgICAgICMgc3VwcG9ydCwgc28gaWYgYXV0aGVudGljYXRpb24gZmFpbHMsIHdlIGNvbnRpbnVlIHVudGlsIHdlJ3ZlIHRyaWVkCiAgICAgICAgICMgYWxsIG1ldGhvZHMuCisgICAgICAgIHNlbGYudXNlciwgc2VsZi5wYXNzd29yZCA9IHVzZXIsIHBhc3N3b3JkCiAgICAgICAgIGZvciBhdXRobWV0aG9kIGluIGF1dGhsaXN0OgotICAgICAgICAgICAgaWYgYXV0aG1ldGhvZCA9PSBBVVRIX0NSQU1fTUQ1OgotICAgICAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZG9jbWQoIkFVVEgiLCBBVVRIX0NSQU1fTUQ1KQotICAgICAgICAgICAgICAgIGlmIGNvZGUgPT0gMzM0OgotICAgICAgICAgICAgICAgICAgICAoY29kZSwgcmVzcCkgPSBzZWxmLmRvY21kKGVuY29kZV9jcmFtX21kNShyZXNwLCB1c2VyLCBwYXNzd29yZCkpCi0gICAgICAgICAgICBlbGlmIGF1dGhtZXRob2QgPT0gQVVUSF9QTEFJTjoKLSAgICAgICAgICAgICAgICAoY29kZSwgcmVzcCkgPSBzZWxmLmRvY21kKCJBVVRIIiwKLSAgICAgICAgICAgICAgICAgICAgQVVUSF9QTEFJTiArICIgIiArIGVuY29kZV9wbGFpbih1c2VyLCBwYXNzd29yZCkpCi0gICAgICAgICAgICBlbGlmIGF1dGhtZXRob2QgPT0gQVVUSF9MT0dJTjoKLSAgICAgICAgICAgICAgICAoY29kZSwgcmVzcCkgPSBzZWxmLmRvY21kKCJBVVRIIiwKLSAgICAgICAgICAgICAgICAgICAgIiVzICVzIiAlIChBVVRIX0xPR0lOLCBlbmNvZGVfYmFzZTY0KHVzZXIuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpKSkKLSAgICAgICAgICAgICAgICBpZiBjb2RlID09IDMzNDoKLSAgICAgICAgICAgICAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5kb2NtZChlbmNvZGVfYmFzZTY0KHBhc3N3b3JkLmVuY29kZSgnYXNjaWknKSwgZW9sPScnKSkKKyAgICAgICAgICAgIG1ldGhvZF9uYW1lID0gJ2F1dGhfJyArIGF1dGhtZXRob2QubG93ZXIoKS5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuYXV0aCgKKyAgICAgICAgICAgICAgICAgICAgYXV0aG1ldGhvZCwgZ2V0YXR0cihzZWxmLCBtZXRob2RfbmFtZSksCisgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfcmVzcG9uc2Vfb2s9aW5pdGlhbF9yZXNwb25zZV9vaykKKyAgICAgICAgICAgICAgICAjIDIzNSA9PSAnQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bCcKKyAgICAgICAgICAgICAgICAjIDUwMyA9PSAnRXJyb3I6IGFscmVhZHkgYXV0aGVudGljYXRlZCcKKyAgICAgICAgICAgICAgICBpZiBjb2RlIGluICgyMzUsIDUwMyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY29kZSwgcmVzcCkKKyAgICAgICAgICAgIGV4Y2VwdCBTTVRQQXV0aGVudGljYXRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGxhc3RfZXhjZXB0aW9uID0gZQogCi0gICAgICAgICAgICAjIDIzNSA9PSAnQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bCcKLSAgICAgICAgICAgICMgNTAzID09ICdFcnJvcjogYWxyZWFkeSBhdXRoZW50aWNhdGVkJwotICAgICAgICAgICAgaWYgY29kZSBpbiAoMjM1LCA1MDMpOgotICAgICAgICAgICAgICAgIHJldHVybiAoY29kZSwgcmVzcCkKLQotICAgICAgICAjIFdlIGNvdWxkIG5vdCBsb2dpbiBzdWNlc3NmdWxseS4gUmV0dXJuIHJlc3VsdCBvZiBsYXN0IGF0dGVtcHQuCi0gICAgICAgIHJhaXNlIFNNVFBBdXRoZW50aWNhdGlvbkVycm9yKGNvZGUsIHJlc3ApCisgICAgICAgICMgV2UgY291bGQgbm90IGxvZ2luIHN1Y2Nlc3NmdWxseS4gIFJldHVybiByZXN1bHQgb2YgbGFzdCBhdHRlbXB0LgorICAgICAgICByYWlzZSBsYXN0X2V4Y2VwdGlvbgogCiAgICAgZGVmIHN0YXJ0dGxzKHNlbGYsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lKToKICAgICAgICAgIiIiUHV0cyB0aGUgY29ubmVjdGlvbiB0byB0aGUgU01UUCBzZXJ2ZXIgaW50byBUTFMgbW9kZS4KQEAgLTY3MCw3ICs3NDcsOCBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5laGxvX29yX2hlbG9faWZfbmVlZGVkKCkKICAgICAgICAgaWYgbm90IHNlbGYuaGFzX2V4dG4oInN0YXJ0dGxzIik6Ci0gICAgICAgICAgICByYWlzZSBTTVRQRXhjZXB0aW9uKCJTVEFSVFRMUyBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIuIikKKyAgICAgICAgICAgIHJhaXNlIFNNVFBOb3RTdXBwb3J0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAiU1RBUlRUTFMgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyLiIpCiAgICAgICAgIChyZXNwLCByZXBseSkgPSBzZWxmLmRvY21kKCJTVEFSVFRMUyIpCiAgICAgICAgIGlmIHJlc3AgPT0gMjIwOgogICAgICAgICAgICAgaWYgbm90IF9oYXZlX3NzbDoKQEAgLTc0MCw2ICs4MTgsOSBAQAogICAgICAgICAgU01UUERhdGFFcnJvciAgICAgICAgICBUaGUgc2VydmVyIHJlcGxpZWQgd2l0aCBhbiB1bmV4cGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGNvZGUgKG90aGVyIHRoYW4gYSByZWZ1c2FsIG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcmVjaXBpZW50KS4KKyAgICAgICAgIFNNVFBOb3RTdXBwb3J0ZWRFcnJvciAgVGhlIG1haWxfb3B0aW9ucyBwYXJhbWV0ZXIgaW5jbHVkZXMgJ1NNVFBVVEY4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgdGhlIFNNVFBVVEY4IGV4dGVuc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzZXJ2ZXIuCiAKICAgICAgICAgTm90ZTogdGhlIGNvbm5lY3Rpb24gd2lsbCBiZSBvcGVuIGV2ZW4gYWZ0ZXIgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4KIApAQCAtNzY4LDggKzg0OSw2IEBACiAgICAgICAgIGlmIGlzaW5zdGFuY2UobXNnLCBzdHIpOgogICAgICAgICAgICAgbXNnID0gX2ZpeF9lb2xzKG1zZykuZW5jb2RlKCdhc2NpaScpCiAgICAgICAgIGlmIHNlbGYuZG9lc19lc210cDoKLSAgICAgICAgICAgICMgSG1tbT8gd2hhdCdzIHRoaXM/IC1kZG0KLSAgICAgICAgICAgICMgc2VsZi5lc210cF9mZWF0dXJlc1snN2JpdCddPSIiCiAgICAgICAgICAgICBpZiBzZWxmLmhhc19leHRuKCdzaXplJyk6CiAgICAgICAgICAgICAgICAgZXNtdHBfb3B0cy5hcHBlbmQoInNpemU9JWQiICUgbGVuKG1zZykpCiAgICAgICAgICAgICBmb3Igb3B0aW9uIGluIG1haWxfb3B0aW9uczoKQEAgLTgxNyw3ICs4OTYsMTMgQEAKICAgICAgICAgdG9fYWRkciwgYW55IEJjYyBmaWVsZCAob3IgUmVzZW50LUJjYyBmaWVsZCwgd2hlbiB0aGUgTWVzc2FnZSBpcyBhCiAgICAgICAgIHJlc2VudCkgb2YgdGhlIE1lc3NhZ2Ugb2JqZWN0IHdvbid0IGJlIHRyYW5zbWl0dGVkLiAgVGhlIE1lc3NhZ2UKICAgICAgICAgb2JqZWN0IGlzIHRoZW4gc2VyaWFsaXplZCB1c2luZyBlbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3IgYW5kCi0gICAgICAgIHNlbmRtYWlsIGlzIGNhbGxlZCB0byB0cmFuc21pdCB0aGUgbWVzc2FnZS4KKyAgICAgICAgc2VuZG1haWwgaXMgY2FsbGVkIHRvIHRyYW5zbWl0IHRoZSBtZXNzYWdlLiAgSWYgdGhlIHNlbmRlciBvciBhbnkgb2YKKyAgICAgICAgdGhlIHJlY2lwaWVudCBhZGRyZXNzZXMgY29udGFpbiBub24tQVNDSUkgYW5kIHRoZSBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGUKKyAgICAgICAgU01UUFVURjggY2FwYWJpbGl0eSwgdGhlIHBvbGljeSBpcyBjbG9uZWQgd2l0aCB1dGY4IHNldCB0byBUcnVlIGZvciB0aGUKKyAgICAgICAgc2VyaWFsaXphdGlvbiwgYW5kIFNNVFBVVEY4IGFuZCBCT0RZPThCSVRNSU1FIGFyZSBhc3NlcnRlZCBvbiB0aGUgc2VuZC4KKyAgICAgICAgSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNNVFBVVEY4LCBhbiBTTVRQTm90U3VwcG9ydGVkIGVycm9yIGlzCisgICAgICAgIHJhaXNlZC4gIE90aGVyd2lzZSB0aGUgZ2VuZXJhdG9yIGlzIGNhbGxlZCB3aXRob3V0IG1vZGlmeWluZyB0aGUKKyAgICAgICAgcG9saWN5LgogCiAgICAgICAgICIiIgogICAgICAgICAjICdSZXNlbnQtRGF0ZScgaXMgYSBtYW5kYXRvcnkgZmllbGQgaWYgdGhlIE1lc3NhZ2UgaXMgcmVzZW50IChSRkMgMjgyMgpAQCAtODMwLDYgKzkxNSw3IEBACiAgICAgICAgICMgb3B0aW9uIGFsbG93aW5nIHRoZSB1c2VyIHRvIGVuYWJsZSB0aGUgaGV1cmlzdGljcy4gIChJdCBzaG91bGQgYmUKICAgICAgICAgIyBwb3NzaWJsZSB0byBndWVzcyBjb3JyZWN0bHkgYWxtb3N0IGFsbCBvZiB0aGUgdGltZS4pCiAKKyAgICAgICAgc2VsZi5laGxvX29yX2hlbG9faWZfbmVlZGVkKCkKICAgICAgICAgcmVzZW50ID0gbXNnLmdldF9hbGwoJ1Jlc2VudC1EYXRlJykKICAgICAgICAgaWYgcmVzZW50IGlzIE5vbmU6CiAgICAgICAgICAgICBoZWFkZXJfcHJlZml4ID0gJycKQEAgLTg0NSwxNCArOTMxLDMwIEBACiAgICAgICAgIGlmIHRvX2FkZHJzIGlzIE5vbmU6CiAgICAgICAgICAgICBhZGRyX2ZpZWxkcyA9IFtmIGZvciBmIGluIChtc2dbaGVhZGVyX3ByZWZpeCArICdUbyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnW2hlYWRlcl9wcmVmaXggKyAnQmNjJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dbaGVhZGVyX3ByZWZpeCArICdDYyddKSBpZiBmIGlzIG5vdCBOb25lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnW2hlYWRlcl9wcmVmaXggKyAnQ2MnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgaXMgbm90IE5vbmVdCiAgICAgICAgICAgICB0b19hZGRycyA9IFthWzFdIGZvciBhIGluIGVtYWlsLnV0aWxzLmdldGFkZHJlc3NlcyhhZGRyX2ZpZWxkcyldCiAgICAgICAgICMgTWFrZSBhIGxvY2FsIGNvcHkgc28gd2UgY2FuIGRlbGV0ZSB0aGUgYmNjIGhlYWRlcnMuCiAgICAgICAgIG1zZ19jb3B5ID0gY29weS5jb3B5KG1zZykKICAgICAgICAgZGVsIG1zZ19jb3B5WydCY2MnXQogICAgICAgICBkZWwgbXNnX2NvcHlbJ1Jlc2VudC1CY2MnXQorICAgICAgICBpbnRlcm5hdGlvbmFsID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgJycuam9pbihbZnJvbV9hZGRyLCAqdG9fYWRkcnNdKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhc19leHRuKCdzbXRwdXRmOCcpOgorICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBOb3RTdXBwb3J0ZWRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIk9uZSBvciBtb3JlIHNvdXJjZSBvciBkZWxpdmVyeSBhZGRyZXNzZXMgcmVxdWlyZSIKKyAgICAgICAgICAgICAgICAgICAgIiBpbnRlcm5hdGlvbmFsaXplZCBlbWFpbCBzdXBwb3J0LCBidXQgdGhlIHNlcnZlciIKKyAgICAgICAgICAgICAgICAgICAgIiBkb2VzIG5vdCBhZHZlcnRpc2UgdGhlIHJlcXVpcmVkIFNNVFBVVEY4IGNhcGFiaWxpdHkiKQorICAgICAgICAgICAgaW50ZXJuYXRpb25hbCA9IFRydWUKICAgICAgICAgd2l0aCBpby5CeXRlc0lPKCkgYXMgYnl0ZXNtc2c6Ci0gICAgICAgICAgICBnID0gZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yKGJ5dGVzbXNnKQorICAgICAgICAgICAgaWYgaW50ZXJuYXRpb25hbDoKKyAgICAgICAgICAgICAgICBnID0gZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBieXRlc21zZywgcG9saWN5PW1zZy5wb2xpY3kuY2xvbmUodXRmOD1UcnVlKSkKKyAgICAgICAgICAgICAgICBtYWlsX29wdGlvbnMgKz0gWydTTVRQVVRGOCcsICdCT0RZPThCSVRNSU1FJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZyA9IGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcihieXRlc21zZykKICAgICAgICAgICAgIGcuZmxhdHRlbihtc2dfY29weSwgbGluZXNlcD0nXHJcbicpCiAgICAgICAgICAgICBmbGF0bXNnID0gYnl0ZXNtc2cuZ2V0dmFsdWUoKQogICAgICAgICByZXR1cm4gc2VsZi5zZW5kbWFpbChmcm9tX2FkZHIsIHRvX2FkZHJzLCBmbGF0bXNnLCBtYWlsX29wdGlvbnMsCkBAIC05MjAsNyArMTAyMiw3IEBACiAKICAgICAgICAgZGVmIF9nZXRfc29ja2V0KHNlbGYsIGhvc3QsIHBvcnQsIHRpbWVvdXQpOgogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKLSAgICAgICAgICAgICAgICBwcmludCgnY29ubmVjdDonLCAoaG9zdCwgcG9ydCksIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50X2RlYnVnKCdjb25uZWN0OicsIChob3N0LCBwb3J0KSkKICAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZV9hZGRyZXNzKQogICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChuZXdfc29ja2V0LApAQCAtOTY4LDIyICsxMDcwLDIwIEBACiAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChob3N0KQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3QgZmFpbDonLCBob3N0LCBmaWxlPXN0ZGVycikKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludF9kZWJ1ZygnY29ubmVjdCBmYWlsOicsIGhvc3QpCiAgICAgICAgICAgICBpZiBzZWxmLnNvY2s6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIChjb2RlLCBtc2cpID0gc2VsZi5nZXRyZXBseSgpCiAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6Ci0gICAgICAgICAgICBwcmludCgnY29ubmVjdDonLCBtc2csIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgc2VsZi5fcHJpbnRfZGVidWcoJ2Nvbm5lY3Q6JywgbXNnKQogICAgICAgICByZXR1cm4gKGNvZGUsIG1zZykKIAogCiAjIFRlc3QgdGhlIHNlbmRtYWlsIG1ldGhvZCwgd2hpY2ggdGVzdHMgbW9zdCBvZiB0aGUgb3RoZXJzLgogIyBOb3RlOiBUaGlzIGFsd2F5cyBzZW5kcyB0byBsb2NhbGhvc3QuCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBzeXMKLQogICAgIGRlZiBwcm9tcHQocHJvbXB0KToKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShwcm9tcHQgKyAiOiAiKQogICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKZGlmZiAtLWdpdCBhL0xpYi9zbmRoZHIucHkgYi9MaWIvc25kaGRyLnB5CmluZGV4IDI0MGU1MDcuLmU1OTAxZWMgMTAwNjQ0Ci0tLSBhL0xpYi9zbmRoZHIucHkKKysrIGIvTGliL3NuZGhkci5weQpAQCAtMzIsNiArMzIsMTEgQEAKIAogX19hbGxfXyA9IFsnd2hhdCcsICd3aGF0aGRyJ10KIAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCitTbmRIZWFkZXJzID0gbmFtZWR0dXBsZSgnU25kSGVhZGVycycsCisgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZXR5cGUgZnJhbWVyYXRlIG5jaGFubmVscyBuZnJhbWVzIHNhbXB3aWR0aCcpCisKIGRlZiB3aGF0KGZpbGVuYW1lKToKICAgICAiIiJHdWVzcyB0aGUgdHlwZSBvZiBhIHNvdW5kIGZpbGUuIiIiCiAgICAgcmVzID0gd2hhdGhkcihmaWxlbmFtZSkKQEAgLTQ1LDcgKzUwLDcgQEAKICAgICAgICAgZm9yIHRmIGluIHRlc3RzOgogICAgICAgICAgICAgcmVzID0gdGYoaCwgZikKICAgICAgICAgICAgIGlmIHJlczoKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzCisgICAgICAgICAgICAgICAgcmV0dXJuIFNuZEhlYWRlcnMoKnJlcykKICAgICAgICAgcmV0dXJuIE5vbmUKIAogCmRpZmYgLS1naXQgYS9MaWIvc29ja2V0LnB5IGIvTGliL3NvY2tldC5weQppbmRleCBmZjJmMDg3Li5hYzJlM2RkIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0LnB5CisrKyBiL0xpYi9zb2NrZXQucHkKQEAgLTQ5LDcgKzQ5LDcgQEAKIGltcG9ydCBfc29ja2V0CiBmcm9tIF9zb2NrZXQgaW1wb3J0ICoKIAotaW1wb3J0IG9zLCBzeXMsIGlvCitpbXBvcnQgb3MsIHN5cywgaW8sIHNlbGVjdG9ycwogZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCiAKIHRyeToKQEAgLTY5LDYgKzY5LDcgQEAKICMgTm90ZSB0aGF0IF9zb2NrZXQgb25seSBrbm93cyBhYm91dCB0aGUgaW50ZWdlciB2YWx1ZXMuIFRoZSBwdWJsaWMgaW50ZXJmYWNlCiAjIGluIHRoaXMgbW9kdWxlIHVuZGVyc3RhbmRzIHRoZSBlbnVtcyBhbmQgdHJhbnNsYXRlcyB0aGVtIGJhY2sgZnJvbSBpbnRlZ2VycwogIyB3aGVyZSBuZWVkZWQgKGUuZy4gLmZhbWlseSBwcm9wZXJ0eSBvZiBhIHNvY2tldCBvYmplY3QpLgorCiBJbnRFbnVtLl9jb252ZXJ0KAogICAgICAgICAnQWRkcmVzc0ZhbWlseScsCiAgICAgICAgIF9fbmFtZV9fLApAQCAtNzksNiArODAsMTAgQEAKICAgICAgICAgX19uYW1lX18sCiAgICAgICAgIGxhbWJkYSBDOiBDLmlzdXBwZXIoKSBhbmQgQy5zdGFydHN3aXRoKCdTT0NLXycpKQogCitfTE9DQUxIT1NUICAgID0gJzEyNy4wLjAuMScKK19MT0NBTEhPU1RfVjYgPSAnOjoxJworCisKIGRlZiBfaW50ZW51bV9jb252ZXJ0ZXIodmFsdWUsIGVudW1fa2xhc3MpOgogICAgICIiIkNvbnZlcnQgYSBudW1lcmljIGZhbWlseSB2YWx1ZSB0byBhbiBJbnRFbnVtIG1lbWJlci4KIApAQCAtMTEyLDYgKzExNyw5IEBACiAgICAgX19hbGxfXy5hcHBlbmQoImVycm9yVGFiIikKIAogCitjbGFzcyBfR2l2ZXVwT25TZW5kZmlsZShFeGNlcHRpb24pOiBwYXNzCisKKwogY2xhc3Mgc29ja2V0KF9zb2NrZXQuc29ja2V0KToKIAogICAgICIiIkEgc3ViY2xhc3Mgb2YgX3NvY2tldC5zb2NrZXQgYWRkaW5nIHRoZSBtYWtlZmlsZSgpIG1ldGhvZC4iIiIKQEAgLTE0MSw3ICsxNDksNyBAQAogICAgICAgICBjbG9zZWQgPSBnZXRhdHRyKHNlbGYsICdfY2xvc2VkJywgRmFsc2UpCiAgICAgICAgIHMgPSAiPCVzLiVzJXMgZmQ9JWksIGZhbWlseT0lcywgdHlwZT0lcywgcHJvdG89JWkiIFwKICAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCi0gICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXywKICAgICAgICAgICAgICAgICIgW2Nsb3NlZF0iIGlmIGNsb3NlZCBlbHNlICIiLAogICAgICAgICAgICAgICAgc2VsZi5maWxlbm8oKSwKICAgICAgICAgICAgICAgIHNlbGYuZmFtaWx5LApAQCAtMjAxLDEwICsyMDksMTAgQEAKICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSk6CiAgICAgICAgICIiIm1ha2VmaWxlKC4uLikgLT4gYW4gSS9PIHN0cmVhbSBjb25uZWN0ZWQgdG8gdGhlIHNvY2tldAogCi0gICAgICAgIFRoZSBhcmd1bWVudHMgYXJlIGFzIGZvciBpby5vcGVuKCkgYWZ0ZXIgdGhlIGZpbGVuYW1lLAotICAgICAgICBleGNlcHQgdGhlIG9ubHkgbW9kZSBjaGFyYWN0ZXJzIHN1cHBvcnRlZCBhcmUgJ3InLCAndycgYW5kICdiJy4KLSAgICAgICAgVGhlIHNlbWFudGljcyBhcmUgc2ltaWxhciB0b28uICAoWFhYIHJlZmFjdG9yIHRvIHNoYXJlIGNvZGU/KQorICAgICAgICBUaGUgYXJndW1lbnRzIGFyZSBhcyBmb3IgaW8ub3BlbigpIGFmdGVyIHRoZSBmaWxlbmFtZSwgZXhjZXB0IHRoZSBvbmx5CisgICAgICAgIHN1cHBvcnRlZCBtb2RlIHZhbHVlcyBhcmUgJ3InIChkZWZhdWx0KSwgJ3cnIGFuZCAnYicuCiAgICAgICAgICIiIgorICAgICAgICAjIFhYWCByZWZhY3RvciB0byBzaGFyZSBjb2RlPwogICAgICAgICBpZiBub3Qgc2V0KG1vZGUpIDw9IHsiciIsICJ3IiwgImIifToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgbW9kZSAlciAob25seSByLCB3LCBiIGFsbG93ZWQpIiAlIChtb2RlLCkpCiAgICAgICAgIHdyaXRpbmcgPSAidyIgaW4gbW9kZQpAQCAtMjM5LDYgKzI0NywxNDkgQEAKICAgICAgICAgdGV4dC5tb2RlID0gbW9kZQogICAgICAgICByZXR1cm4gdGV4dAogCisgICAgaWYgaGFzYXR0cihvcywgJ3NlbmRmaWxlJyk6CisKKyAgICAgICAgZGVmIF9zZW5kZmlsZV91c2Vfc2VuZGZpbGUoc2VsZiwgZmlsZSwgb2Zmc2V0PTAsIGNvdW50PU5vbmUpOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2VuZGZpbGVfcGFyYW1zKGZpbGUsIG9mZnNldCwgY291bnQpCisgICAgICAgICAgICBzb2Nrbm8gPSBzZWxmLmZpbGVubygpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmlsZW5vID0gZmlsZS5maWxlbm8oKQorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24pIGFzIGVycjoKKyAgICAgICAgICAgICAgICByYWlzZSBfR2l2ZXVwT25TZW5kZmlsZShlcnIpICAjIG5vdCBhIHJlZ3VsYXIgZmlsZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZzaXplID0gb3MuZnN0YXQoZmlsZW5vKS5zdF9zaXplCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBfR2l2ZXVwT25TZW5kZmlsZShlcnIpICAjIG5vdCBhIHJlZ3VsYXIgZmlsZQorICAgICAgICAgICAgaWYgbm90IGZzaXplOgorICAgICAgICAgICAgICAgIHJldHVybiAwICAjIGVtcHR5IGZpbGUKKyAgICAgICAgICAgIGJsb2Nrc2l6ZSA9IGZzaXplIGlmIG5vdCBjb3VudCBlbHNlIGNvdW50CisKKyAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLmdldHRpbWVvdXQoKQorICAgICAgICAgICAgaWYgdGltZW91dCA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vbi1ibG9ja2luZyBzb2NrZXRzIGFyZSBub3Qgc3VwcG9ydGVkIikKKyAgICAgICAgICAgICMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55CisgICAgICAgICAgICAjIGV4dHJhIGZpbGUgZGVzY3JpcHRvciwgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUKKyAgICAgICAgICAgICMgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZSBzeXNjYWxsKS4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IoKQorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc29ja25vLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisKKyAgICAgICAgICAgIHRvdGFsX3NlbnQgPSAwCisgICAgICAgICAgICAjIGxvY2FsaXplIHZhcmlhYmxlIGFjY2VzcyB0byBtaW5pbWl6ZSBvdmVyaGVhZAorICAgICAgICAgICAgc2VsZWN0b3Jfc2VsZWN0ID0gc2VsZWN0b3Iuc2VsZWN0CisgICAgICAgICAgICBvc19zZW5kZmlsZSA9IG9zLnNlbmRmaWxlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBhbmQgbm90IHNlbGVjdG9yX3NlbGVjdCh0aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9zb2NrZXQudGltZW91dCgndGltZWQgb3V0JykKKyAgICAgICAgICAgICAgICAgICAgaWYgY291bnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3NpemUgPSBjb3VudCAtIHRvdGFsX3NlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJsb2Nrc2l6ZSA8PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgPSBvc19zZW5kZmlsZShzb2Nrbm8sIGZpbGVubywgb2Zmc2V0LCBibG9ja3NpemUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgdGltZW91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJsb2NrIHVudGlsIHRoZSBzb2NrZXQgaXMgcmVhZHkgdG8gc2VuZCBzb21lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkYXRhOyBhdm9pZHMgaG9nZ2luZyBDUFUgcmVzb3VyY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yX3NlbGVjdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b3RhbF9zZW50ID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBjYW4gZ2V0IGhlcmUgZm9yIGRpZmZlcmVudCByZWFzb25zLCB0aGUgbWFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb25lIGJlaW5nICdmaWxlJyBpcyBub3QgYSByZWd1bGFyIG1tYXAoMiktbGlrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlsZSwgaW4gd2hpY2ggY2FzZSB3ZSdsbCBmYWxsIGJhY2sgb24gdXNpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBsYWluIHNlbmQoKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBfR2l2ZXVwT25TZW5kZmlsZShlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnIgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZW50ID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgICMgRU9GCisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc2VudAorICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfc2VudCArPSBzZW50CisgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3NlbnQKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgdG90YWxfc2VudCA+IDAgYW5kIGhhc2F0dHIoZmlsZSwgJ3NlZWsnKToKKyAgICAgICAgICAgICAgICAgICAgZmlsZS5zZWVrKG9mZnNldCkKKyAgICBlbHNlOgorICAgICAgICBkZWYgX3NlbmRmaWxlX3VzZV9zZW5kZmlsZShzZWxmLCBmaWxlLCBvZmZzZXQ9MCwgY291bnQ9Tm9uZSk6CisgICAgICAgICAgICByYWlzZSBfR2l2ZXVwT25TZW5kZmlsZSgKKyAgICAgICAgICAgICAgICAib3Muc2VuZGZpbGUoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iKQorCisgICAgZGVmIF9zZW5kZmlsZV91c2Vfc2VuZChzZWxmLCBmaWxlLCBvZmZzZXQ9MCwgY291bnQ9Tm9uZSk6CisgICAgICAgIHNlbGYuX2NoZWNrX3NlbmRmaWxlX3BhcmFtcyhmaWxlLCBvZmZzZXQsIGNvdW50KQorICAgICAgICBpZiBzZWxmLmdldHRpbWVvdXQoKSA9PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm9uLWJsb2NraW5nIHNvY2tldHMgYXJlIG5vdCBzdXBwb3J0ZWQiKQorICAgICAgICBpZiBvZmZzZXQ6CisgICAgICAgICAgICBmaWxlLnNlZWsob2Zmc2V0KQorICAgICAgICBibG9ja3NpemUgPSBtaW4oY291bnQsIDgxOTIpIGlmIGNvdW50IGVsc2UgODE5MgorICAgICAgICB0b3RhbF9zZW50ID0gMAorICAgICAgICAjIGxvY2FsaXplIHZhcmlhYmxlIGFjY2VzcyB0byBtaW5pbWl6ZSBvdmVyaGVhZAorICAgICAgICBmaWxlX3JlYWQgPSBmaWxlLnJlYWQKKyAgICAgICAgc29ja19zZW5kID0gc2VsZi5zZW5kCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgaWYgY291bnQ6CisgICAgICAgICAgICAgICAgICAgIGJsb2Nrc2l6ZSA9IG1pbihjb3VudCAtIHRvdGFsX3NlbnQsIGJsb2Nrc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgYmxvY2tzaXplIDw9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGZpbGVfcmVhZChibG9ja3NpemUpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhayAgIyBFT0YKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZW50ID0gc29ja19zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfc2VudCArPSBzZW50CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZW50IDwgbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW3NlbnQ6XQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3NlbnQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHRvdGFsX3NlbnQgPiAwIGFuZCBoYXNhdHRyKGZpbGUsICdzZWVrJyk6CisgICAgICAgICAgICAgICAgZmlsZS5zZWVrKG9mZnNldCArIHRvdGFsX3NlbnQpCisKKyAgICBkZWYgX2NoZWNrX3NlbmRmaWxlX3BhcmFtcyhzZWxmLCBmaWxlLCBvZmZzZXQsIGNvdW50KToKKyAgICAgICAgaWYgJ2InIG5vdCBpbiBnZXRhdHRyKGZpbGUsICdtb2RlJywgJ2InKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZpbGUgc2hvdWxkIGJlIG9wZW5lZCBpbiBiaW5hcnkgbW9kZSIpCisgICAgICAgIGlmIG5vdCBzZWxmLnR5cGUgJiBTT0NLX1NUUkVBTToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm9ubHkgU09DS19TVFJFQU0gdHlwZSBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQiKQorICAgICAgICBpZiBjb3VudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNvdW50LCBpbnQpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgImNvdW50IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIChnb3QgeyFyfSkiLmZvcm1hdChjb3VudCkpCisgICAgICAgICAgICBpZiBjb3VudCA8PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJjb3VudCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290IHshcn0pIi5mb3JtYXQoY291bnQpKQorCisgICAgZGVmIHNlbmRmaWxlKHNlbGYsIGZpbGUsIG9mZnNldD0wLCBjb3VudD1Ob25lKToKKyAgICAgICAgIiIic2VuZGZpbGUoZmlsZVssIG9mZnNldFssIGNvdW50XV0pIC0+IHNlbnQKKworICAgICAgICBTZW5kIGEgZmlsZSB1bnRpbCBFT0YgaXMgcmVhY2hlZCBieSB1c2luZyBoaWdoLXBlcmZvcm1hbmNlCisgICAgICAgIG9zLnNlbmRmaWxlKCkgYW5kIHJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdoaWNoCisgICAgICAgIHdlcmUgc2VudC4KKyAgICAgICAgKmZpbGUqIG11c3QgYmUgYSByZWd1bGFyIGZpbGUgb2JqZWN0IG9wZW5lZCBpbiBiaW5hcnkgbW9kZS4KKyAgICAgICAgSWYgb3Muc2VuZGZpbGUoKSBpcyBub3QgYXZhaWxhYmxlIChlLmcuIFdpbmRvd3MpIG9yIGZpbGUgaXMKKyAgICAgICAgbm90IGEgcmVndWxhciBmaWxlIHNvY2tldC5zZW5kKCkgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisgICAgICAgICpvZmZzZXQqIHRlbGxzIGZyb20gd2hlcmUgdG8gc3RhcnQgcmVhZGluZyB0aGUgZmlsZS4KKyAgICAgICAgSWYgc3BlY2lmaWVkLCAqY291bnQqIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNtaXQKKyAgICAgICAgYXMgb3Bwb3NlZCB0byBzZW5kaW5nIHRoZSBmaWxlIHVudGlsIEVPRiBpcyByZWFjaGVkLgorICAgICAgICBGaWxlIHBvc2l0aW9uIGlzIHVwZGF0ZWQgb24gcmV0dXJuIG9yIGFsc28gaW4gY2FzZSBvZiBlcnJvciBpbgorICAgICAgICB3aGljaCBjYXNlIGZpbGUudGVsbCgpIGNhbiBiZSB1c2VkIHRvIGZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZgorICAgICAgICBieXRlcyB3aGljaCB3ZXJlIHNlbnQuCisgICAgICAgIFRoZSBzb2NrZXQgbXVzdCBiZSBvZiBTT0NLX1NUUkVBTSB0eXBlLgorICAgICAgICBOb24tYmxvY2tpbmcgc29ja2V0cyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zZW5kZmlsZV91c2Vfc2VuZGZpbGUoZmlsZSwgb2Zmc2V0LCBjb3VudCkKKyAgICAgICAgZXhjZXB0IF9HaXZldXBPblNlbmRmaWxlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbmRmaWxlX3VzZV9zZW5kKGZpbGUsIG9mZnNldCwgY291bnQpCisKICAgICBkZWYgX2RlY3JlZl9zb2NrZXRpb3Moc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2lvX3JlZnMgPiAwOgogICAgICAgICAgICAgc2VsZi5faW9fcmVmcyAtPSAxCkBAIC0zMjksNiArNDgwLDUyIEBACiAgICAgICAgIGIgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywgYi5kZXRhY2goKSkKICAgICAgICAgcmV0dXJuIGEsIGIKIAorZWxzZToKKworICAgICMgT3JpZ2luOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS80MzI1NzgzLCBieSBHZWVydCBKYW5zZW4uICBQdWJsaWMgZG9tYWluLgorICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wKToKKyAgICAgICAgaWYgZmFtaWx5ID09IEFGX0lORVQ6CisgICAgICAgICAgICBob3N0ID0gX0xPQ0FMSE9TVAorICAgICAgICBlbGlmIGZhbWlseSA9PSBBRl9JTkVUNjoKKyAgICAgICAgICAgIGhvc3QgPSBfTE9DQUxIT1NUX1Y2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJPbmx5IEFGX0lORVQgYW5kIEFGX0lORVQ2IHNvY2tldCBhZGRyZXNzIGZhbWlsaWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZSBzdXBwb3J0ZWQiKQorICAgICAgICBpZiB0eXBlICE9IFNPQ0tfU1RSRUFNOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT25seSBTT0NLX1NUUkVBTSBzb2NrZXQgdHlwZSBpcyBzdXBwb3J0ZWQiKQorICAgICAgICBpZiBwcm90byAhPSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiT25seSBwcm90b2NvbCB6ZXJvIGlzIHN1cHBvcnRlZCIpCisKKyAgICAgICAgIyBXZSBjcmVhdGUgYSBjb25uZWN0ZWQgVENQIHNvY2tldC4gTm90ZSB0aGUgdHJpY2sgd2l0aAorICAgICAgICAjIHNldGJsb2NraW5nKEZhbHNlKSB0aGF0IHByZXZlbnRzIHVzIGZyb20gaGF2aW5nIHRvIGNyZWF0ZSBhIHRocmVhZC4KKyAgICAgICAgbHNvY2sgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbHNvY2suYmluZCgoaG9zdCwgMCkpCisgICAgICAgICAgICBsc29jay5saXN0ZW4oKQorICAgICAgICAgICAgIyBPbiBJUHY2LCBpZ25vcmUgZmxvd19pbmZvIGFuZCBzY29wZV9pZAorICAgICAgICAgICAgYWRkciwgcG9ydCA9IGxzb2NrLmdldHNvY2tuYW1lKClbOjJdCisgICAgICAgICAgICBjc29jayA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3NvY2suY29ubmVjdCgoYWRkciwgcG9ydCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgY3NvY2suc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzc29jaywgXyA9IGxzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgY3NvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsc29jay5jbG9zZSgpCisgICAgICAgIHJldHVybiAoc3NvY2ssIGNzb2NrKQorCitzb2NrZXRwYWlyLl9fZG9jX18gPSAiIiJzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KQorQ3JlYXRlIGEgcGFpciBvZiBzb2NrZXQgb2JqZWN0cyBmcm9tIHRoZSBzb2NrZXRzIHJldHVybmVkIGJ5IHRoZSBwbGF0Zm9ybQorc29ja2V0cGFpcigpIGZ1bmN0aW9uLgorVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHNvY2tldCgpIGV4Y2VwdCB0aGUgZGVmYXVsdCBmYW1pbHkgaXMgQUZfVU5JWAoraWYgZGVmaW5lZCBvbiB0aGUgcGxhdGZvcm07IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgQUZfSU5FVC4KKyIiIgogCiBfYmxvY2tpbmdfZXJybm9zID0geyBFQUdBSU4sIEVXT1VMREJMT0NLIH0KIApAQCAtMzc5LDggKzU3Niw2IEBACiAgICAgICAgICAgICBleGNlcHQgdGltZW91dDoKICAgICAgICAgICAgICAgICBzZWxmLl90aW1lb3V0X29jY3VycmVkID0gVHJ1ZQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZXhjZXB0IGVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdIGluIF9ibG9ja2luZ19lcnJub3M6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC00OTAsNyArNjg1LDcgQEAKICAgICBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IHNldHRpbmcgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldGRlZmF1bHR0aW1lb3V0YAogICAgIGlzIHVzZWQuICBJZiAqc291cmNlX2FkZHJlc3MqIGlzIHNldCBpdCBtdXN0IGJlIGEgdHVwbGUgb2YgKGhvc3QsIHBvcnQpCiAgICAgZm9yIHRoZSBzb2NrZXQgdG8gYmluZCBhcyBhIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBtYWtpbmcgdGhlIGNvbm5lY3Rpb24uCi0gICAgQW4gaG9zdCBvZiAnJyBvciBwb3J0IDAgdGVsbHMgdGhlIE9TIHRvIHVzZSB0aGUgZGVmYXVsdC4KKyAgICBBIGhvc3Qgb2YgJycgb3IgcG9ydCAwIHRlbGxzIHRoZSBPUyB0byB1c2UgdGhlIGRlZmF1bHQuCiAgICAgIiIiCiAKICAgICBob3N0LCBwb3J0ID0gYWRkcmVzcwpkaWZmIC0tZ2l0IGEvTGliL3NvY2tldHNlcnZlci5weSBiL0xpYi9zb2NrZXRzZXJ2ZXIucHkKaW5kZXggNWNiODliZS4uODgwODgxMyAxMDA2NDQKLS0tIGEvTGliL3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvc29ja2V0c2VydmVyLnB5CkBAIC05NCw3ICs5NCw3IEBACiBBbm90aGVyIGFwcHJvYWNoIHRvIGhhbmRsaW5nIG11bHRpcGxlIHNpbXVsdGFuZW91cyByZXF1ZXN0cyBpbiBhbgogZW52aXJvbm1lbnQgdGhhdCBzdXBwb3J0cyBuZWl0aGVyIHRocmVhZHMgbm9yIGZvcmsgKG9yIHdoZXJlIHRoZXNlIGFyZQogdG9vIGV4cGVuc2l2ZSBvciBpbmFwcHJvcHJpYXRlIGZvciB0aGUgc2VydmljZSkgaXMgdG8gbWFpbnRhaW4gYW4KLWV4cGxpY2l0IHRhYmxlIG9mIHBhcnRpYWxseSBmaW5pc2hlZCByZXF1ZXN0cyBhbmQgdG8gdXNlIHNlbGVjdCgpIHRvCitleHBsaWNpdCB0YWJsZSBvZiBwYXJ0aWFsbHkgZmluaXNoZWQgcmVxdWVzdHMgYW5kIHRvIHVzZSBhIHNlbGVjdG9yIHRvCiBkZWNpZGUgd2hpY2ggcmVxdWVzdCB0byB3b3JrIG9uIG5leHQgKG9yIHdoZXRoZXIgdG8gaGFuZGxlIGEgbmV3CiBpbmNvbWluZyByZXF1ZXN0KS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3Igc3RyZWFtIHNlcnZpY2VzCiB3aGVyZSBlYWNoIGNsaWVudCBjYW4gcG90ZW50aWFsbHkgYmUgY29ubmVjdGVkIGZvciBhIGxvbmcgdGltZSAoaWYKQEAgLTEwNCw3ICsxMDQsNiBAQAogLSBTdGFuZGFyZCBjbGFzc2VzIGZvciBTdW4gUlBDICh3aGljaCB1c2VzIGVpdGhlciBVRFAgb3IgVENQKQogLSBTdGFuZGFyZCBtaXgtaW4gY2xhc3NlcyB0byBpbXBsZW1lbnQgdmFyaW91cyBhdXRoZW50aWNhdGlvbgogICBhbmQgZW5jcnlwdGlvbiBzY2hlbWVzCi0tIFN0YW5kYXJkIGZyYW1ld29yayBmb3Igc2VsZWN0LWJhc2VkIG11bHRpcGxleGluZwogCiBYWFggT3BlbiBwcm9ibGVtczoKIC0gV2hhdCB0byBkbyB3aXRoIG91dC1vZi1iYW5kIGRhdGE/CkBAIC0xMjEsMjIgKzEyMCwxOCBAQAogCiAjIEF1dGhvciBvZiB0aGUgQmFzZVNlcnZlciBwYXRjaDogTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbgogCi0jIFhYWCBXYXJuaW5nIQotIyBUaGVyZSBpcyBhIHRlc3Qgc3VpdGUgZm9yIHRoaXMgbW9kdWxlLCBidXQgaXQgY2Fubm90IGJlIHJ1biBieSB0aGUKLSMgc3RhbmRhcmQgcmVncmVzc2lvbiB0ZXN0LgotIyBUbyBydW4gaXQgbWFudWFsbHksIHJ1biBMaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weS4KLQogX192ZXJzaW9uX18gPSAiMC40IgogCiAKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBzZWxlY3QKK2ltcG9ydCBzZWxlY3RvcnMKIGltcG9ydCBvcwogaW1wb3J0IGVycm5vCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGltcG9ydCBkdW1teV90aHJlYWRpbmcgYXMgdGhyZWFkaW5nCitmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyB0aW1lCiAKIF9fYWxsX18gPSBbIkJhc2VTZXJ2ZXIiLCAiVENQU2VydmVyIiwgIlVEUFNlcnZlciIsICJGb3JraW5nVURQU2VydmVyIiwKICAgICAgICAgICAgIkZvcmtpbmdUQ1BTZXJ2ZXIiLCAiVGhyZWFkaW5nVURQU2VydmVyIiwgIlRocmVhZGluZ1RDUFNlcnZlciIsCkBAIC0xNDcsMTQgKzE0MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAiVGhyZWFkaW5nVW5peFN0cmVhbVNlcnZlciIsCiAgICAgICAgICAgICAgICAgICAgICJUaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIiXSkKIAotZGVmIF9laW50cl9yZXRyeShmdW5jLCAqYXJncyk6Ci0gICAgIiIicmVzdGFydCBhIHN5c3RlbSBjYWxsIGludGVycnVwdGVkIGJ5IEVJTlRSIiIiCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgIHJhaXNlCisjIHBvbGwvc2VsZWN0IGhhdmUgdGhlIGFkdmFudGFnZSBvZiBub3QgcmVxdWlyaW5nIGFueSBleHRyYSBmaWxlIGRlc2NyaXB0b3IsCisjIGNvbnRyYXJpbHkgdG8gZXBvbGwva3F1ZXVlIChhbHNvLCB0aGV5IHJlcXVpcmUgYSBzaW5nbGUgc3lzY2FsbCkuCitpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpOgorICAgIF9TZXJ2ZXJTZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKK2Vsc2U6CisgICAgX1NlcnZlclNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCisKIAogY2xhc3MgQmFzZVNlcnZlcjoKIApAQCAtMTY2LDcgKzE2MCw3IEBACiAgICAgLSBzZXJ2ZV9mb3JldmVyKHBvbGxfaW50ZXJ2YWw9MC41KQogICAgIC0gc2h1dGRvd24oKQogICAgIC0gaGFuZGxlX3JlcXVlc3QoKSAgIyBpZiB5b3UgZG8gbm90IHVzZSBzZXJ2ZV9mb3JldmVyKCkKLSAgICAtIGZpbGVubygpIC0+IGludCAgICMgZm9yIHNlbGVjdCgpCisgICAgLSBmaWxlbm8oKSAtPiBpbnQgICAjIGZvciBzZWxlY3RvcgogCiAgICAgTWV0aG9kcyB0aGF0IG1heSBiZSBvdmVycmlkZGVuOgogCkBAIC0yMjcsMTcgKzIyMSwxOSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fX2lzX3NodXRfZG93bi5jbGVhcigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9fc2h1dGRvd25fcmVxdWVzdDoKLSAgICAgICAgICAgICAgICAjIFhYWDogQ29uc2lkZXIgdXNpbmcgYW5vdGhlciBmaWxlIGRlc2NyaXB0b3Igb3IKLSAgICAgICAgICAgICAgICAjIGNvbm5lY3RpbmcgdG8gdGhlIHNvY2tldCB0byB3YWtlIHRoaXMgdXAgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgICMgcG9sbGluZy4gUG9sbGluZyByZWR1Y2VzIG91ciByZXNwb25zaXZlbmVzcyB0byBhCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biByZXF1ZXN0IGFuZCB3YXN0ZXMgY3B1IGF0IGFsbCBvdGhlciB0aW1lcy4KLSAgICAgICAgICAgICAgICByLCB3LCBlID0gX2VpbnRyX3JldHJ5KHNlbGVjdC5zZWxlY3QsIFtzZWxmXSwgW10sIFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbF9pbnRlcnZhbCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmIGluIHI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9yZXF1ZXN0X25vYmxvY2soKQorICAgICAgICAgICAgIyBYWFg6IENvbnNpZGVyIHVzaW5nIGFub3RoZXIgZmlsZSBkZXNjcmlwdG9yIG9yIGNvbm5lY3RpbmcgdG8gdGhlCisgICAgICAgICAgICAjIHNvY2tldCB0byB3YWtlIHRoaXMgdXAgaW5zdGVhZCBvZiBwb2xsaW5nLiBQb2xsaW5nIHJlZHVjZXMgb3VyCisgICAgICAgICAgICAjIHJlc3BvbnNpdmVuZXNzIHRvIGEgc2h1dGRvd24gcmVxdWVzdCBhbmQgd2FzdGVzIGNwdSBhdCBhbGwgb3RoZXIKKyAgICAgICAgICAgICMgdGltZXMuCisgICAgICAgICAgICB3aXRoIF9TZXJ2ZXJTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQogCi0gICAgICAgICAgICAgICAgc2VsZi5zZXJ2aWNlX2FjdGlvbnMoKQorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9fc2h1dGRvd25fcmVxdWVzdDoKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBzZWxlY3Rvci5zZWxlY3QocG9sbF9pbnRlcnZhbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVhZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcmVxdWVzdF9ub2Jsb2NrKCkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZpY2VfYWN0aW9ucygpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9fc2h1dGRvd25fcmVxdWVzdCA9IEZhbHNlCiAgICAgICAgICAgICBzZWxmLl9faXNfc2h1dF9kb3duLnNldCgpCkBAIC0yNjAsMTYgKzI1NiwxNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcGFzcwogCi0gICAgIyBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiBoYW5kbGluZywgZ2V0dGluZywgcHJvY2Vzc2luZyBhbmQKLSAgICAjIGZpbmlzaGluZyBhIHJlcXVlc3QgaXMgZmFpcmx5IGFyYml0cmFyeS4gIFJlbWVtYmVyOgorICAgICMgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gaGFuZGxpbmcsIGdldHRpbmcsIHByb2Nlc3NpbmcgYW5kIGZpbmlzaGluZyBhCisgICAgIyByZXF1ZXN0IGlzIGZhaXJseSBhcmJpdHJhcnkuICBSZW1lbWJlcjoKICAgICAjCi0gICAgIyAtIGhhbmRsZV9yZXF1ZXN0KCkgaXMgdGhlIHRvcC1sZXZlbCBjYWxsLiAgSXQgY2FsbHMKLSAgICAjICAgc2VsZWN0LCBnZXRfcmVxdWVzdCgpLCB2ZXJpZnlfcmVxdWVzdCgpIGFuZCBwcm9jZXNzX3JlcXVlc3QoKQorICAgICMgLSBoYW5kbGVfcmVxdWVzdCgpIGlzIHRoZSB0b3AtbGV2ZWwgY2FsbC4gIEl0IGNhbGxzIHNlbGVjdG9yLnNlbGVjdCgpLAorICAgICMgICBnZXRfcmVxdWVzdCgpLCB2ZXJpZnlfcmVxdWVzdCgpIGFuZCBwcm9jZXNzX3JlcXVlc3QoKQogICAgICMgLSBnZXRfcmVxdWVzdCgpIGlzIGRpZmZlcmVudCBmb3Igc3RyZWFtIG9yIGRhdGFncmFtIHNvY2tldHMKLSAgICAjIC0gcHJvY2Vzc19yZXF1ZXN0KCkgaXMgdGhlIHBsYWNlIHRoYXQgbWF5IGZvcmsgYSBuZXcgcHJvY2VzcwotICAgICMgICBvciBjcmVhdGUgYSBuZXcgdGhyZWFkIHRvIGZpbmlzaCB0aGUgcmVxdWVzdAotICAgICMgLSBmaW5pc2hfcmVxdWVzdCgpIGluc3RhbnRpYXRlcyB0aGUgcmVxdWVzdCBoYW5kbGVyIGNsYXNzOwotICAgICMgICB0aGlzIGNvbnN0cnVjdG9yIHdpbGwgaGFuZGxlIHRoZSByZXF1ZXN0IGFsbCBieSBpdHNlbGYKKyAgICAjIC0gcHJvY2Vzc19yZXF1ZXN0KCkgaXMgdGhlIHBsYWNlIHRoYXQgbWF5IGZvcmsgYSBuZXcgcHJvY2VzcyBvciBjcmVhdGUgYQorICAgICMgICBuZXcgdGhyZWFkIHRvIGZpbmlzaCB0aGUgcmVxdWVzdAorICAgICMgLSBmaW5pc2hfcmVxdWVzdCgpIGluc3RhbnRpYXRlcyB0aGUgcmVxdWVzdCBoYW5kbGVyIGNsYXNzOyB0aGlzCisgICAgIyAgIGNvbnN0cnVjdG9yIHdpbGwgaGFuZGxlIHRoZSByZXF1ZXN0IGFsbCBieSBpdHNlbGYKIAogICAgIGRlZiBoYW5kbGVfcmVxdWVzdChzZWxmKToKICAgICAgICAgIiIiSGFuZGxlIG9uZSByZXF1ZXN0LCBwb3NzaWJseSBibG9ja2luZy4KQEAgLTI4MywxOCArMjc5LDMwIEBACiAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi50aW1lb3V0CiAgICAgICAgIGVsaWYgc2VsZi50aW1lb3V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgdGltZW91dCA9IG1pbih0aW1lb3V0LCBzZWxmLnRpbWVvdXQpCi0gICAgICAgIGZkX3NldHMgPSBfZWludHJfcmV0cnkoc2VsZWN0LnNlbGVjdCwgW3NlbGZdLCBbXSwgW10sIHRpbWVvdXQpCi0gICAgICAgIGlmIG5vdCBmZF9zZXRzWzBdOgotICAgICAgICAgICAgc2VsZi5oYW5kbGVfdGltZW91dCgpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5faGFuZGxlX3JlcXVlc3Rfbm9ibG9jaygpCisgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUoKSArIHRpbWVvdXQKKworICAgICAgICAjIFdhaXQgdW50aWwgYSByZXF1ZXN0IGFycml2ZXMgb3IgdGhlIHRpbWVvdXQgZXhwaXJlcyAtIHRoZSBsb29wIGlzCisgICAgICAgICMgbmVjZXNzYXJ5IHRvIGFjY29tbW9kYXRlIGVhcmx5IHdha2V1cHMgZHVlIHRvIEVJTlRSLgorICAgICAgICB3aXRoIF9TZXJ2ZXJTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgcmVhZHkgPSBzZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgICAgICAgICBpZiByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZV9yZXF1ZXN0X25vYmxvY2soKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSB0aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV90aW1lb3V0KCkKIAogICAgIGRlZiBfaGFuZGxlX3JlcXVlc3Rfbm9ibG9jayhzZWxmKToKICAgICAgICAgIiIiSGFuZGxlIG9uZSByZXF1ZXN0LCB3aXRob3V0IGJsb2NraW5nLgogCi0gICAgICAgIEkgYXNzdW1lIHRoYXQgc2VsZWN0LnNlbGVjdCBoYXMgcmV0dXJuZWQgdGhhdCB0aGUgc29ja2V0IGlzCi0gICAgICAgIHJlYWRhYmxlIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQsIHNvIHRoZXJlIHNob3VsZCBiZQotICAgICAgICBubyByaXNrIG9mIGJsb2NraW5nIGluIGdldF9yZXF1ZXN0KCkuCisgICAgICAgIEkgYXNzdW1lIHRoYXQgc2VsZWN0b3Iuc2VsZWN0KCkgaGFzIHJldHVybmVkIHRoYXQgdGhlIHNvY2tldCBpcworICAgICAgICByZWFkYWJsZSBiZWZvcmUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayBvZgorICAgICAgICBibG9ja2luZyBpbiBnZXRfcmVxdWVzdCgpLgogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MgPSBzZWxmLmdldF9yZXF1ZXN0KCkKQEAgLTMwNiw2ICszMTQsOCBAQAogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQogICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCiAKICAgICBkZWYgaGFuZGxlX3RpbWVvdXQoc2VsZik6CiAgICAgICAgICIiIkNhbGxlZCBpZiBubyBuZXcgcmVxdWVzdCBhcnJpdmVzIHdpdGhpbiBzZWxmLnRpbWVvdXQuCkBAIC0zNzcsNyArMzg3LDcgQEAKICAgICAtIHNlcnZlX2ZvcmV2ZXIocG9sbF9pbnRlcnZhbD0wLjUpCiAgICAgLSBzaHV0ZG93bigpCiAgICAgLSBoYW5kbGVfcmVxdWVzdCgpICAjIGlmIHlvdSBkb24ndCB1c2Ugc2VydmVfZm9yZXZlcigpCi0gICAgLSBmaWxlbm8oKSAtPiBpbnQgICAjIGZvciBzZWxlY3QoKQorICAgIC0gZmlsZW5vKCkgLT4gaW50ICAgIyBmb3Igc2VsZWN0b3IKIAogICAgIE1ldGhvZHMgdGhhdCBtYXkgYmUgb3ZlcnJpZGRlbjoKIApAQCAtNDYzLDcgKzQ3Myw3IEBACiAgICAgZGVmIGZpbGVubyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHNvY2tldCBmaWxlIG51bWJlci4KIAotICAgICAgICBJbnRlcmZhY2UgcmVxdWlyZWQgYnkgc2VsZWN0KCkuCisgICAgICAgIEludGVyZmFjZSByZXF1aXJlZCBieSBzZWxlY3Rvci4KIAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuc29ja2V0LmZpbGVubygpCkBAIC01NDAsOCArNTUwLDYgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWQsIF8gPSBvcy53YWl0cGlkKC0xLCAwKQogICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLmRpc2NhcmQocGlkKQotICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgogICAgICAgICAgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHdlJ3JlIGRvbmUKICAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5jbGVhcigpCkBAIC02NjAsNyArNjY4LDcgQEAKICAgICBjbGllbnQgYWRkcmVzcyBhcyBzZWxmLmNsaWVudF9hZGRyZXNzLCBhbmQgdGhlIHNlcnZlciAoaW4gY2FzZSBpdAogICAgIG5lZWRzIGFjY2VzcyB0byBwZXItc2VydmVyIGluZm9ybWF0aW9uKSBhcyBzZWxmLnNlcnZlci4gIFNpbmNlIGEKICAgICBzZXBhcmF0ZSBpbnN0YW5jZSBpcyBjcmVhdGVkIGZvciBlYWNoIHJlcXVlc3QsIHRoZSBoYW5kbGUoKSBtZXRob2QKLSAgICBjYW4gZGVmaW5lIGFyYml0cmFyeSBvdGhlciBpbnN0YW5jZSB2YXJpYXJpYWJsZXMuCisgICAgY2FuIGRlZmluZSBvdGhlciBhcmJpdHJhcnkgaW5zdGFuY2UgdmFyaWFibGVzLgogCiAgICAgIiIiCiAKQEAgLTcyOCw3ICs3MzYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYud2ZpbGUuZmx1c2goKQogICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgICAgICAjIEFuIGZpbmFsIHNvY2tldCBlcnJvciBtYXkgaGF2ZSBvY2N1cnJlZCBoZXJlLCBzdWNoIGFzCisgICAgICAgICAgICAgICAgIyBBIGZpbmFsIHNvY2tldCBlcnJvciBtYXkgaGF2ZSBvY2N1cnJlZCBoZXJlLCBzdWNoIGFzCiAgICAgICAgICAgICAgICAgIyB0aGUgbG9jYWwgZXJyb3IgRUNPTk5BQk9SVEVELgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi53ZmlsZS5jbG9zZSgpCkBAIC03MzcsOSArNzQ1LDYgQEAKIAogY2xhc3MgRGF0YWdyYW1SZXF1ZXN0SGFuZGxlcihCYXNlUmVxdWVzdEhhbmRsZXIpOgogCi0gICAgIyBYWFggUmVncmV0dGFibHksIEkgY2Fubm90IGdldCB0aGlzIHdvcmtpbmcgb24gTGludXg7Ci0gICAgIyBzLnJlY3Zmcm9tKCkgZG9lc24ndCByZXR1cm4gYSBtZWFuaW5nZnVsIGNsaWVudCBhZGRyZXNzLgotCiAgICAgIiIiRGVmaW5lIHNlbGYucmZpbGUgYW5kIHNlbGYud2ZpbGUgZm9yIGRhdGFncmFtIHNvY2tldHMuIiIiCiAKICAgICBkZWYgc2V0dXAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQppbmRleCAwNDY0OWZjLi5lYzQyZWI3IDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKQEAgLTEyMiwxMSArMTIyLDggQEAKIAogICAgIGRlZiBDaGVja0ZhaWxlZE9wZW4oc2VsZik6CiAgICAgICAgIFlPVV9DQU5OT1RfT1BFTl9USElTID0gIi9mb28vYmFyL2JsYS8yMzUzNC9teWRiLmRiIgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoWU9VX0NBTk5PVF9PUEVOX1RISVMpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKIAogICAgIGRlZiBDaGVja0Nsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmN4LmNsb3NlKCkKQEAgLTE4MCw2ICsxNzcsMTIgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgICAgIGN4LmV4ZWN1dGUoJ2luc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcygxKScpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvID49ICgzLCAzLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICduZWVkcyBzcWxpdGUgdmVyc2lvbnMgb2xkZXIgdGhhbiAzLjMuMScpCisgICAgZGVmIENoZWNrU2FtZVRocmVhZEVycm9yT25PbGRWZXJzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzcWxpdGUuY29ubmVjdCgnOm1lbW9yeTonLCBjaGVja19zYW1lX3RocmVhZD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ3NoYXJlZCBjb25uZWN0aW9ucyBub3QgYXZhaWxhYmxlJykKIAogY2xhc3MgQ3Vyc29yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE5NiwyMiArMTk5LDEyIEBACiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiZGVsZXRlIGZyb20gdGVzdCIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlSWxsZWdhbFNxbChzZWxmKToKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IGFzZGYiKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInJhaXNlZCB3cm9uZyBleGNlcHRpb24iKQogCiAgICAgZGVmIENoZWNrRXhlY3V0ZVRvb011Y2hTcWwoc2VsZik6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuV2FybmluZyk6CiAgICAgICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCA1KzQ7IHNlbGVjdCA0KzUiKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBXYXJuaW5nIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5XYXJuaW5nOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbiIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlVG9vTXVjaFNxbDIoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IDUrNDsgLS0gZm9vIGJhciIpCkBAIC0yMjYsMTMgKzIxOSw4IEBACiAgICAgICAgICAgICAiIiIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlV3JvbmdTcWxBcmcoc2VsZik6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSg0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVmFsdWVFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbi4iKQogCiAgICAgZGVmIENoZWNrRXhlY3V0ZUFyZ0ludChzZWxmKToKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGlkKSB2YWx1ZXMgKD8pIiwgKDQyLCkpCkBAIC0yNTAsMjkgKzIzOCwyNSBAQAogICAgICAgICByb3cgPSBzZWxmLmN1LmZldGNob25lKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sICJIdVx4MDBnbyIpCiAKKyAgICBkZWYgQ2hlY2tFeGVjdXRlTm9uSXRlcmFibGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcyAoPykiLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ3BhcmFtZXRlcnMgYXJlIG9mIHVuc3VwcG9ydGVkIHR5cGUnKQorCiAgICAgZGVmIENoZWNrRXhlY3V0ZVdyb25nTm9PZkFyZ3MxKHNlbGYpOgogICAgICAgICAjIHRvbyBtYW55IHBhcmFtZXRlcnMKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzICg/KSIsICgxNywgIkVnb24iKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlV3JvbmdOb09mQXJnczIoc2VsZik6CiAgICAgICAgICMgdG9vIGxpdHRsZSBwYXJhbWV0ZXJzCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcyAoPykiKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVXcm9uZ05vT2ZBcmdzMyhzZWxmKToKICAgICAgICAgIyBubyBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzIGFyZSBuZWVkZWQKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzICg/KSIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIENoZWNrRXhlY3V0ZVBhcmFtTGlzdChzZWxmKToKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKQEAgLTMxMSwyNyArMjk1LDE4IEBACiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlRGljdE1hcHBpbmdUb29MaXR0bGVBcmdzKHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3Qgd2hlcmUgbmFtZT06bmFtZSBhbmQgaWQ9OmlkIiwgeyJuYW1lIjogImZvbyJ9KQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVEaWN0TWFwcGluZ05vQXJncyhzZWxmKToKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9Om5hbWUiKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVEaWN0TWFwcGluZ1VubmFtZWQoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCB3aGVyZSBuYW1lPT8iLCB7Im5hbWUiOiAiZm9vIn0pCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIENoZWNrQ2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuY2xvc2UoKQpAQCAtMzYwLDggKzMzNSw3IEBACiAgICAgZGVmIENoZWNrVG90YWxDaGFuZ2VzKHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQotICAgICAgICBpZiBzZWxmLmN4LnRvdGFsX2NoYW5nZXMgPCAyOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJ0b3RhbCBjaGFuZ2VzIHJlcG9ydGVkIHdyb25nIHZhbHVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDIsIHNlbGYuY3gudG90YWxfY2hhbmdlcywgbXNnPSd0b3RhbCBjaGFuZ2VzIHJlcG9ydGVkIHdyb25nIHZhbHVlJykKIAogICAgICMgQ2hlY2tzIGZvciBleGVjdXRlbWFueToKICAgICAjIFNlcXVlbmNlcyBhcmUgcmVxdWlyZWQgYnkgdGhlIERCLUFQSSwgaXRlcmF0b3JzCkBAIC0zOTIsMzIgKzM2NiwxNiBAQAogICAgICAgICBzZWxmLmN1LmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byB0ZXN0KGluY29tZSkgdmFsdWVzICg/KSIsIG15Z2VuKCkpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlTWFueVdyb25nU3FsQXJnKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN1LmV4ZWN1dGVtYW55KDQyLCBbKDMsKV0pCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFZhbHVlRXJyb3IiKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInJhaXNlZCB3cm9uZyBleGNlcHRpb24uIikKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVNYW55U2VsZWN0KHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlbWFueSgic2VsZWN0ID8iLCBbKDMsKV0pCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJyYWlzZWQgd3JvbmcgZXhjZXB0aW9uLiIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlTWFueU5vdEl0ZXJhYmxlKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZW1hbnkoImluc2VydCBpbnRvIHRlc3QoaW5jb21lKSB2YWx1ZXMgKD8pIiwgNDIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFR5cGVFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgcHJpbnQoInJhaXNlZCIsIGUuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJyYWlzZWQgd3JvbmcgZXhjZXB0aW9uLiIpCiAKICAgICBkZWYgQ2hlY2tGZXRjaEl0ZXIoc2VsZik6CiAgICAgICAgICMgT3B0aW9uYWwgREItQVBJIGV4dGVuc2lvbi4KQEAgLTQ5NCwyMiArNDUyLDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdS5jb25uZWN0aW9uLCBzZWxmLmN4KQogCiAgICAgZGVmIENoZWNrV3JvbmdDdXJzb3JDYWxsYWJsZShzZWxmKToKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBkZWYgZigpOiBwYXNzCiAgICAgICAgICAgICBjdXIgPSBzZWxmLmN4LmN1cnNvcihmKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBUeXBlRXJyb3IiKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVmFsdWVFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tDdXJzb3JXcm9uZ0NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBGb286IHBhc3MKICAgICAgICAgZm9vID0gRm9vKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBjdXIgPSBzcWxpdGUuQ3Vyc29yKGZvbykKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVmFsdWVFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RoaXMgdGVzdCByZXF1aXJlcyB0aHJlYWRpbmcuJykKIGNsYXNzIFRocmVhZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTcwOCwyMiArNjU5LDIxIEBACiAgICAgZGVmIENoZWNrU2NyaXB0U3ludGF4RXJyb3Ioc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQotICAgICAgICByYWlzZWQgPSBGYWxzZQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgY3VyLmV4ZWN1dGVzY3JpcHQoImNyZWF0ZSB0YWJsZSB0ZXN0KHgpOyBhc2RmOyBjcmVhdGUgdGFibGUgdGVzdDIoeCkiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3I6Ci0gICAgICAgICAgICByYWlzZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFpc2VkLCBUcnVlLCAic2hvdWxkIGhhdmUgcmFpc2VkIGFuIGV4Y2VwdGlvbiIpCiAKICAgICBkZWYgQ2hlY2tTY3JpcHRFcnJvck5vcm1hbChzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCi0gICAgICAgIHJhaXNlZCA9IEZhbHNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CiAgICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3Qoc2FkZnNhZGZkc2EpOyBzZWxlY3QgZm9vIGZyb20gaHVyejsiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3I6Ci0gICAgICAgICAgICByYWlzZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFpc2VkLCBUcnVlLCAic2hvdWxkIGhhdmUgcmFpc2VkIGFuIGV4Y2VwdGlvbiIpCisKKyAgICBkZWYgQ2hlY2tDdXJzb3JFeGVjdXRlc2NyaXB0QXNCeXRlcyhzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdChiImNyZWF0ZSB0YWJsZSB0ZXN0KGZvbyk7IGluc2VydCBpbnRvIHRlc3QoZm9vKSB2YWx1ZXMgKDUpOyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdzY3JpcHQgYXJndW1lbnQgbXVzdCBiZSB1bmljb2RlLicpCiAKICAgICBkZWYgQ2hlY2tDb25uZWN0aW9uRXhlY3V0ZShzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKQEAgLTc0NSw2OCArNjk1LDM3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCA1LCAiQmFzaWMgdGVzdCBvZiBDb25uZWN0aW9uLmV4ZWN1dGVzY3JpcHQiKQogCiBjbGFzcyBDbG9zZWRDb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBDaGVja0Nsb3NlZENvbkN1cnNvcihzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY29uLmNsb3NlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQogCiAgICAgZGVmIENoZWNrQ2xvc2VkQ29uQ29tbWl0KHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uY2xvc2UoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uLmNvbW1pdCgpCi0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tDbG9zZWRDb25Sb2xsYmFjayhzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY29uLmNsb3NlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIGNvbi5yb2xsYmFjaygpCi0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tDbG9zZWRDdXJFeGVjdXRlKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKICAgICAgICAgY29uLmNsb3NlKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgNCIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tDbG9zZWRDcmVhdGVGdW5jdGlvbihzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY29uLmNsb3NlKCkKICAgICAgICAgZGVmIGYoeCk6IHJldHVybiAxNwotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uLmNyZWF0ZV9mdW5jdGlvbigiZm9vIiwgMSwgZikKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAogICAgIGRlZiBDaGVja0Nsb3NlZENyZWF0ZUFnZ3JlZ2F0ZShzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKQEAgLTgxOCw1NyArNzM3LDMxIEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZGVmIGZpbmFsaXplKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiAxNwotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uLmNyZWF0ZV9hZ2dyZWdhdGUoImZvbyIsIDEsIEFnZykKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAogICAgIGRlZiBDaGVja0Nsb3NlZFNldEF1dGhvcml6ZXIoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGNvbi5jbG9zZSgpCiAgICAgICAgIGRlZiBhdXRob3JpemVyKCphcmdzKToKICAgICAgICAgICAgIHJldHVybiBzcWxpdGUuREVOWQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uLnNldF9hdXRob3JpemVyKGF1dGhvcml6ZXIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tDbG9zZWRTZXRQcm9ncmVzc0NhbGxiYWNrKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uY2xvc2UoKQogICAgICAgICBkZWYgcHJvZ3Jlc3MoKTogcGFzcwotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uLnNldF9wcm9ncmVzc19oYW5kbGVyKHByb2dyZXNzLCAxMDApCi0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tDbG9zZWRDYWxsKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uY2xvc2UoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAogY2xhc3MgQ2xvc2VkQ3VyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBwYXNzCi0KICAgICBkZWYgQ2hlY2tDbG9zZWQoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQpAQCAtODgyLDE1ICs3NzUsOSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYXJhbXMgPSBbXQogCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKGN1ciwgbWV0aG9kX25hbWUpCi0KICAgICAgICAgICAgICAgICBtZXRob2QoKnBhcmFtcykKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3I6IG1ldGhvZCAiICsgbWV0aG9kX25hbWUpCi0gICAgICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvcjogIiArIG1ldGhvZF9uYW1lKQogCiBkZWYgc3VpdGUoKToKICAgICBtb2R1bGVfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoTW9kdWxlVGVzdHMsICJDaGVjayIpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKaW5kZXggYTgzNDhiNC4uZjU4NzU5NiAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weQpAQCAtMTExLDYgKzExMSwyNCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgogICAgICAgICAgICAgcm93WzIqKjEwMDBdCiAKKyAgICBkZWYgQ2hlY2tTcWxpdGVSb3dTbGljZShzZWxmKToKKyAgICAgICAgIyBBIHNxbGl0ZS5Sb3cgY2FuIGJlIHNsaWNlZCBsaWtlIGEgbGlzdC4KKyAgICAgICAgc2VsZi5jb24ucm93X2ZhY3RvcnkgPSBzcWxpdGUuUm93CisgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAxLCAyLCAzLCA0IikuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swOjBdLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMDoxXSwgKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMTozXSwgKDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1szOjFdLCAoKSkKKyAgICAgICAgIyBFeHBsaWNpdCBib3VuZHMgYXJlIG9wdGlvbmFsLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1sxOl0sICgyLCAzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbOjNdLCAoMSwgMiwgMykpCisgICAgICAgICMgU2xpY2VzIGNhbiB1c2UgbmVnYXRpdmUgaW5kaWNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbLTI6LTFdLCAoMywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1stMjpdLCAoMywgNCkpCisgICAgICAgICMgU2xpY2luZyBzdXBwb3J0cyBzdGVwcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMDo0OjJdLCAoMSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzM6MDotMl0sICg0LCAyKSkKKwogICAgIGRlZiBDaGVja1NxbGl0ZVJvd0l0ZXIoc2VsZik6CiAgICAgICAgICIiIkNoZWNrcyBpZiB0aGUgcm93IG9iamVjdCBpcyBpdGVyYWJsZSIiIgogICAgICAgICBzZWxmLmNvbi5yb3dfZmFjdG9yeSA9IHNxbGl0ZS5Sb3cKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2hvb2tzLnB5CmluZGV4IGVkZTBiZWMuLmNhZmZmOTMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9ob29rcy5weQpAQCAtMjUsMjcgKzI1LDE2IEBACiBpbXBvcnQgc3FsaXRlMyBhcyBzcWxpdGUKIAogY2xhc3MgQ29sbGF0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBwYXNzCi0KICAgICBkZWYgQ2hlY2tDcmVhdGVDb2xsYXRpb25Ob3RDYWxsYWJsZShzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjb24uY3JlYXRlX2NvbGxhdGlvbigiWCIsIDQyKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBUeXBlRXJyb3IiKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInBhcmFtZXRlciBtdXN0IGJlIGNhbGxhYmxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ3BhcmFtZXRlciBtdXN0IGJlIGNhbGxhYmxlJykKIAogICAgIGRlZiBDaGVja0NyZWF0ZUNvbGxhdGlvbk5vdEFzY2lpKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oImNvbGzkIiwgbGFtYmRhIHgsIHk6ICh4ID4geSkgLSAoeCA8IHkpKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBwYXNzCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDIsIDEpLAogICAgICAgICAgICAgICAgICAgICAgJ29sZCBTUUxpdGUgdmVyc2lvbnMgY3Jhc2ggb24gdGhpcyB0ZXN0JykKQEAgLTY2LDE1ICs1NSwxMyBAQAogICAgICAgICAgICAgKSBvcmRlciBieSB4IGNvbGxhdGUgbXljb2xsCiAgICAgICAgICAgICAiIiIKICAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoc3FsKS5mZXRjaGFsbCgpCi0gICAgICAgIGlmIHJlc3VsdFswXVswXSAhPSAiYyIgb3IgcmVzdWx0WzFdWzBdICE9ICJiIiBvciByZXN1bHRbMl1bMF0gIT0gImEiOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJ0aGUgZXhwZWN0ZWQgb3JkZXIgd2FzIG5vdCByZXR1cm5lZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbKCdjJywpLCAoJ2InLCksICgnYScsKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSd0aGUgZXhwZWN0ZWQgb3JkZXIgd2FzIG5vdCByZXR1cm5lZCcpCiAKICAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oIm15Y29sbCIsIE5vbmUpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcikgYXMgY206CiAgICAgICAgICAgICByZXN1bHQgPSBjb24uZXhlY3V0ZShzcWwpLmZldGNoYWxsKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLmxvd2VyKCksICJubyBzdWNoIGNvbGxhdGlvbiBzZXF1ZW5jZTogbXljb2xsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ25vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlOiBteWNvbGwnKQogCiAgICAgZGVmIENoZWNrQ29sbGF0aW9uUmV0dXJuc0xhcmdlSW50ZWdlcihzZWxmKToKICAgICAgICAgZGVmIG15Y29sbCh4LCB5KToKQEAgLTEwNiw4ICs5Myw4IEBACiAgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKCIiIgogICAgICAgICAgICAgc2VsZWN0IHggZnJvbSAoc2VsZWN0ICdhJyBhcyB4IHVuaW9uIHNlbGVjdCAnYicgYXMgeCkgb3JkZXIgYnkgeCBjb2xsYXRlIG15Y29sbAogICAgICAgICAgICAgIiIiKS5mZXRjaGFsbCgpCi0gICAgICAgIGlmIHJlc3VsdFswXVswXSAhPSAnYicgb3IgcmVzdWx0WzFdWzBdICE9ICdhJzoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgY29sbGF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXVswXSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsxXVswXSwgJ2EnKQogCiAgICAgZGVmIENoZWNrRGVyZWdpc3RlckNvbGxhdGlvbihzZWxmKToKICAgICAgICAgIiIiCkBAIC0xMTcsMTIgKzEwNCw5IEBACiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGNvbi5jcmVhdGVfY29sbGF0aW9uKCJteWNvbGwiLCBsYW1iZGEgeCwgeTogKHggPiB5KSAtICh4IDwgeSkpCiAgICAgICAgIGNvbi5jcmVhdGVfY29sbGF0aW9uKCJteWNvbGwiLCBOb25lKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY29uLmV4ZWN1dGUoInNlbGVjdCAnYScgYXMgeCB1bmlvbiBzZWxlY3QgJ2InIGFzIHggb3JkZXIgYnkgeCBjb2xsYXRlIG15Y29sbCIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBub3QgZS5hcmdzWzBdLnN0YXJ0c3dpdGgoIm5vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlIik6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBPcGVyYXRpb25hbEVycm9yIHJhaXNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdubyBzdWNoIGNvbGxhdGlvbiBzZXF1ZW5jZTogbXljb2xsJykKIAogY2xhc3MgUHJvZ3Jlc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIENoZWNrUHJvZ3Jlc3NIYW5kbGVyVXNlZChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQppbmRleCBlYWFhYTJjLi40NDk3NGIwIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5CkBAIC03Myw3ICs3Myw3IEBACiAgICAgZGVmIENoZWNrU3RhdGVtZW50RmluYWxpemF0aW9uT25DbG9zZURiKHNlbGYpOgogICAgICAgICAjIHB5c3FsaXRlIHZlcnNpb25zIDw9IDIuMy4zIG9ubHkgZmluYWxpemVkIHN0YXRlbWVudHMgaW4gdGhlIHN0YXRlbWVudAogICAgICAgICAjIGNhY2hlIHdoZW4gY2xvc2luZyB0aGUgZGF0YWJhc2UuIHN0YXRlbWVudHMgdGhhdCB3ZXJlIHN0aWxsCi0gICAgICAgICMgcmVmZXJlbmNlZCBpbiBjdXJzb3JzIHdlcmVuJ3QgY2xvc2VkIGFuIGNvdWxkIHByb3Zva2UgIgorICAgICAgICAjIHJlZmVyZW5jZWQgaW4gY3Vyc29ycyB3ZXJlbid0IGNsb3NlZCBhbmQgY291bGQgcHJvdm9rZSAiCiAgICAgICAgICMgIk9wZXJhdGlvbmFsRXJyb3I6IFVuYWJsZSB0byBjbG9zZSBkdWUgdG8gdW5maW5hbGlzZWQgc3RhdGVtZW50cyIuCiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGN1cnNvcnMgPSBbXQpAQCAtODQsOSArODQsOCBAQAogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCAxIHggdW5pb24gc2VsZWN0ICIgKyBzdHIoaSkpCiAgICAgICAgIGNvbi5jbG9zZSgpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDIsIDIpLCAnbmVlZHMgc3FsaXRlIDMuMi4yIG9yIG5ld2VyJykKICAgICBkZWYgQ2hlY2tPbkNvbmZsaWN0Um9sbGJhY2soc2VsZik6Ci0gICAgICAgIGlmIHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDIsIDIpOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGNvbi5leGVjdXRlKCJjcmVhdGUgdGFibGUgZm9vKHgsIHVuaXF1ZSh4KSBvbiBjb25mbGljdCByb2xsYmFjaykiKQogICAgICAgICBjb24uZXhlY3V0ZSgiaW5zZXJ0IGludG8gZm9vKHgpIHZhbHVlcyAoMSkiKQpAQCAtMTM0LDE3ICsxMzMsMTEgQEAKICAgICBkZWYgQ2hlY2tFcnJvck1zZ0RlY29kZUVycm9yKHNlbGYpOgogICAgICAgICAjIFdoZW4gcG9ydGluZyB0aGUgbW9kdWxlIHRvIFB5dGhvbiAzLjAsIHRoZSBlcnJvciBtZXNzYWdlIGFib3V0CiAgICAgICAgICMgZGVjb2RpbmcgZXJyb3JzIGRpc2FwcGVhcmVkLiBUaGlzIHZlcmlmaWVzIHRoZXkncmUgYmFjayBhZ2Fpbi4KLSAgICAgICAgZmFpbHVyZSA9IE5vbmUKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAneHh4JyB8fCA/IHx8ICd5eXknIGNvbG5hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnl0ZXMoYnl0ZWFycmF5KFsyNTBdKSksKSkuZmV0Y2hvbmUoKQotICAgICAgICAgICAgZmFpbHVyZSA9ICJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciB3aXRoIGRldGFpbGVkIGRlc2NyaXB0aW9uIgotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IgYXMgZToKLSAgICAgICAgICAgIG1zZyA9IGUuYXJnc1swXQotICAgICAgICAgICAgaWYgbm90IG1zZy5zdGFydHN3aXRoKCJDb3VsZCBub3QgZGVjb2RlIHRvIFVURi04IGNvbHVtbiAnY29sbmFtZScgd2l0aCB0ZXh0ICd4eHgiKToKLSAgICAgICAgICAgICAgICBmYWlsdXJlID0gIk9wZXJhdGlvbmFsRXJyb3IgZGlkIG5vdCBoYXZlIGV4cGVjdGVkIGRlc2NyaXB0aW9uIHRleHQiCi0gICAgICAgIGlmIGZhaWx1cmU6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoZmFpbHVyZSkKKyAgICAgICAgbXNnID0gIkNvdWxkIG5vdCBkZWNvZGUgdG8gVVRGLTggY29sdW1uICdjb2xuYW1lJyB3aXRoIHRleHQgJ3h4eCIKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtc2csIHN0cihjbS5leGNlcHRpb24pKQogCiAgICAgZGVmIENoZWNrUmVnaXN0ZXJBZGFwdGVyKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTE3MCwxNCArMTYzLDggQEAKIAogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjdXIgPSBDdXJzb3IoY29uKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCA0KzUiKS5mZXRjaGFsbCgpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKLQogCiAgICAgZGVmIENoZWNrU3RyU3ViY2xhc3Moc2VsZik6CiAgICAgICAgICIiIgpAQCAtMTk2LDEzICsxODMsOCBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBjb24gPSBDb25uZWN0aW9uKCI6bWVtb3J5OiIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQogCiAgICAgZGVmIENoZWNrQ3Vyc29yUmVnaXN0cmF0aW9uKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTIyMywxMyArMjA1LDggQEAKICAgICAgICAgY3VyLmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byBmb28oeCkgdmFsdWVzICg/KSIsIFsoMywpLCAoNCwpLCAoNSwpXSkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCB4IGZyb20gZm9vIikKICAgICAgICAgY29uLnJvbGxiYWNrKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5JbnRlcmZhY2VFcnJvcik6CiAgICAgICAgICAgICBjdXIuZmV0Y2hhbGwoKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgSW50ZXJmYWNlRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLkludGVyZmFjZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBJbnRlcmZhY2VFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBdXRvQ29tbWl0KHNlbGYpOgogICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC90cmFuc2FjdGlvbnMucHkKaW5kZXggZmViNGZhMS4uYTI1MzYwYSAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC90cmFuc2FjdGlvbnMucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC90cmFuc2FjdGlvbnMucHkKQEAgLTExMSwzOSArMTExLDI1IEBACiAgICAgICAgIHJlcyA9IHNlbGYuY3VyMi5mZXRjaGFsbCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDIsIDIpLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgaGFuZ3Mgb24gc3FsaXRlIHZlcnNpb25zIG9sZGVyIHRoYW4gMy4yLjInKQogICAgIGRlZiBDaGVja1JhaXNlVGltZW91dChzZWxmKToKLSAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgMiwgMik6Ci0gICAgICAgICAgICAjIFRoaXMgd2lsbCBmYWlsIChoYW5nKSBvbiBlYXJsaWVyIHZlcnNpb25zIG9mIHNxbGl0ZS4KLSAgICAgICAgICAgICMgRGV0ZXJtaW5lIGV4YWN0IHZlcnNpb24gaXQgd2FzIGZpeGVkLiAzLjIuMSBoYW5ncy4KLSAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaSkiKQogICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKToKICAgICAgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDIsIDIpLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgaGFuZ3Mgb24gc3FsaXRlIHZlcnNpb25zIG9sZGVyIHRoYW4gMy4yLjInKQogICAgIGRlZiBDaGVja0xvY2tpbmcoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIHRlc3RzIHRoZSBpbXByb3ZlZCBjb25jdXJyZW5jeSB3aXRoIHB5c3FsaXRlIDIuMy40LiBZb3UgbmVlZGVkCiAgICAgICAgIHRvIHJvbGwgYmFjayBjb24yIGJlZm9yZSB5b3UgY291bGQgY29tbWl0IGNvbjEuCiAgICAgICAgICIiIgotICAgICAgICBpZiBzcWxpdGUuc3FsaXRlX3ZlcnNpb25faW5mbyA8ICgzLCAyLCAyKToKLSAgICAgICAgICAgICMgVGhpcyB3aWxsIGZhaWwgKGhhbmcpIG9uIGVhcmxpZXIgdmVyc2lvbnMgb2Ygc3FsaXRlLgotICAgICAgICAgICAgIyBEZXRlcm1pbmUgZXhhY3QgdmVyc2lvbiBpdCB3YXMgZml4ZWQuIDMuMi4xIGhhbmdzLgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdXIyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg1KSIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKICAgICAgICAgIyBOTyBzZWxmLmNvbjIucm9sbGJhY2soKSBIRVJFISEhCiAgICAgICAgIHNlbGYuY29uMS5jb21taXQoKQogCkBAIC0xNTksMTMgKzE0NSw4IEBACiAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgMSB1bmlvbiBzZWxlY3QgMiB1bmlvbiBzZWxlY3QgMyIpCiAKICAgICAgICAgY29uLnJvbGxiYWNrKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5JbnRlcmZhY2VFcnJvcik6CiAgICAgICAgICAgICBjdXIuZmV0Y2hhbGwoKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnRlcmZhY2VFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZXJmYWNlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnRlcmZhY2VFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCiAKIGNsYXNzIFNwZWNpYWxDb21tYW5kVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5CmluZGV4IGFkYWQ1NzEuLjY2NjdiYzggMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weQpAQCAtMTg1LDI0ICsxODUsMTQgQEAKICAgICBkZWYgQ2hlY2tVbnN1cHBvcnRlZFNlcShzZWxmKToKICAgICAgICAgY2xhc3MgQmFyOiBwYXNzCiAgICAgICAgIHZhbCA9IEJhcigpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuSW50ZXJmYWNlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChmKSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gSW50ZXJmYWNlRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLkludGVyZmFjZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBJbnRlcmZhY2VFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tVbnN1cHBvcnRlZERpY3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIEJhcjogcGFzcwogICAgICAgICB2YWwgPSBCYXIoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLkludGVyZmFjZUVycm9yKToKICAgICAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoZikgdmFsdWVzICg6dmFsKSIsIHsidmFsIjogdmFsfSkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIEludGVyZmFjZUVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5JbnRlcmZhY2VFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gSW50ZXJmYWNlRXJyb3IiKQogCiAgICAgZGVmIENoZWNrQmxvYihzZWxmKToKICAgICAgICAgIyBkZWZhdWx0CkBAIC0zNTAsMTEgKzM0MCw5IEBACiAgICAgICAgIHRzMiA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cywgdHMyKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzcWxpdGUuc3FsaXRlX3ZlcnNpb25faW5mbyA8ICgzLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICd0aGUgZGF0ZSBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBvbiAzLjEgb3IgbGF0ZXInKQogICAgIGRlZiBDaGVja1NxbFRpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBUaGUgZGF0ZSBmdW5jdGlvbnMgYXJlIG9ubHkgYXZhaWxhYmxlIGluIFNRTGl0ZSB2ZXJzaW9uIDMuMSBvciBsYXRlcgotICAgICAgICBpZiBzcWxpdGUuc3FsaXRlX3ZlcnNpb25faW5mbyA8ICgzLCAxKToKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgICMgU1FMaXRlJ3MgY3VycmVudF90aW1lc3RhbXAgdXNlcyBVVEMgdGltZSwgd2hpbGUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkgdXNlcyBsb2NhbCB0aW1lLgogICAgICAgICBub3cgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHRzKSB2YWx1ZXMgKGN1cnJlbnRfdGltZXN0YW1wKSIpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkKaW5kZXggNjllMmVjMi4uNDA3NTA0NSAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC91c2VyZnVuY3Rpb25zLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weQpAQCAtNTUsNiArNTUsOSBAQAogZGVmIGZ1bmNfaXNsb25nbG9uZyh2KToKICAgICByZXR1cm4gaXNpbnN0YW5jZSh2LCBpbnQpIGFuZCB2ID49IDE8PDMxCiAKK2RlZiBmdW5jKCphcmdzKToKKyAgICByZXR1cm4gbGVuKGFyZ3MpCisKIGNsYXNzIEFnZ3JOb1N0ZXA6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC0xMTEsNiArMTE0LDE5IEBACiAgICAgZGVmIGZpbmFsaXplKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi52YWwKIAorY2xhc3MgQWdnckNoZWNrVHlwZXM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnZhbCA9IDAKKworICAgIGRlZiBzdGVwKHNlbGYsIHdoaWNoVHlwZSwgKnZhbHMpOgorICAgICAgICB0aGVUeXBlID0geyJzdHIiOiBzdHIsICJpbnQiOiBpbnQsICJmbG9hdCI6IGZsb2F0LCAiTm9uZSI6IHR5cGUoTm9uZSksCisgICAgICAgICAgICAgICAgICAgImJsb2IiOiBieXRlc30KKyAgICAgICAgZm9yIHZhbCBpbiB2YWxzOgorICAgICAgICAgICAgc2VsZi52YWwgKz0gaW50KHRoZVR5cGVbd2hpY2hUeXBlXSBpcyB0eXBlKHZhbCkpCisKKyAgICBkZWYgZmluYWxpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbAorCiBjbGFzcyBBZ2dyU3VtOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi52YWwgPSAwLjAKQEAgLTE0MCwxNiArMTU2LDE0IEBACiAgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiaXNub25lIiwgMSwgZnVuY19pc25vbmUpCiAgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiaXNibG9iIiwgMSwgZnVuY19pc2Jsb2IpCiAgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiaXNsb25nbG9uZyIsIDEsIGZ1bmNfaXNsb25nbG9uZykKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJzcGFtIiwgLTEsIGZ1bmMpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKIAogICAgIGRlZiBDaGVja0Z1bmNFcnJvck9uQ3JlYXRlKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJibGEiLCAtMTAwLCBsYW1iZGEgeDogMip4KQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0Z1bmNSZWZDb3VudChzZWxmKToKICAgICAgICAgZGVmIGdldGZ1bmMoKToKQEAgLTIxNCwxMiArMjI4LDEwIEBACiAKICAgICBkZWYgQ2hlY2tGdW5jRXhjZXB0aW9uKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByYWlzZWV4Y2VwdGlvbigpIikKICAgICAgICAgICAgIGN1ci5mZXRjaG9uZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgJ3VzZXItZGVmaW5lZCBmdW5jdGlvbiByYWlzZWQgZXhjZXB0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ3VzZXItZGVmaW5lZCBmdW5jdGlvbiByYWlzZWQgZXhjZXB0aW9uJykKIAogICAgIGRlZiBDaGVja1BhcmFtU3RyaW5nKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQpAQCAtMjU3LDYgKzI2OSwxMyBAQAogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKIAorICAgIGRlZiBDaGVja0FueUFyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBzcGFtKD8sID8pIiwgKDEsIDIpKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMikKKworCiBjbGFzcyBBZ2dyZWdhdGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCkBAIC0yNzksNiArMjk4LDcgQEAKICAgICAgICAgc2VsZi5jb24uY3JlYXRlX2FnZ3JlZ2F0ZSgiZXhjU3RlcCIsIDEsIEFnZ3JFeGNlcHRpb25JblN0ZXApCiAgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9hZ2dyZWdhdGUoImV4Y0ZpbmFsaXplIiwgMSwgQWdnckV4Y2VwdGlvbkluRmluYWxpemUpCiAgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9hZ2dyZWdhdGUoImNoZWNrVHlwZSIsIDIsIEFnZ3JDaGVja1R5cGUpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9hZ2dyZWdhdGUoImNoZWNrVHlwZXMiLCAtMSwgQWdnckNoZWNrVHlwZXMpCiAgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9hZ2dyZWdhdGUoIm15c3VtIiwgMSwgQWdnclN1bSkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTI4Nyw1NSArMzA3LDQyIEBACiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0FnZ3JFcnJvck9uQ3JlYXRlKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJibGEiLCAtMTAwLCBBZ2dyU3VtKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0FnZ3JOb1N0ZXAoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IG5vc3RlcCh0KSBmcm9tIHRlc3QiKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gQXR0cmlidXRlRXJyb3IiKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAiJ0FnZ3JOb1N0ZXAnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzdGVwJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInQWdnck5vU3RlcCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3N0ZXAnIikKIAogICAgIGRlZiBDaGVja0FnZ3JOb0ZpbmFsaXplKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBub2ZpbmFsaXplKHQpIGZyb20gdGVzdCIpCiAgICAgICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQogCiAgICAgZGVmIENoZWNrQWdnckV4Y2VwdGlvbkluSW5pdChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgZXhjSW5pdCh0KSBmcm9tIHRlc3QiKQogICAgICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdfX2luaXRfXycgbWV0aG9kIHJhaXNlZCBlcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ19faW5pdF9fJyBtZXRob2QgcmFpc2VkIGVycm9yIikKIAogICAgIGRlZiBDaGVja0FnZ3JFeGNlcHRpb25JblN0ZXAoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGV4Y1N0ZXAodCkgZnJvbSB0ZXN0IikKICAgICAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnc3RlcCcgbWV0aG9kIHJhaXNlZCBlcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ3N0ZXAnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQogCiAgICAgZGVmIENoZWNrQWdnckV4Y2VwdGlvbkluRmluYWxpemUoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGV4Y0ZpbmFsaXplKHQpIGZyb20gdGVzdCIpCiAgICAgICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQogCiAgICAgZGVmIENoZWNrQWdnckNoZWNrUGFyYW1TdHIoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCkBAIC0zNDksNiArMzU2LDEyIEBACiAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQogCisgICAgZGVmIENoZWNrQWdnckNoZWNrUGFyYW1zSW50KHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGNoZWNrVHlwZXMoJ2ludCcsID8sID8pIiwgKDQyLCAyNCkpCisgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAyKQorCiAgICAgZGVmIENoZWNrQWdnckNoZWNrUGFyYW1GbG9hdChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBjaGVja1R5cGUoJ2Zsb2F0JywgPykiLCAoMy4xNCwpKQpAQCAtNDAyLDIyICs0MTUsMTQgQEAKICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfdGFibGVfYWNjZXNzKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLkRhdGFiYXNlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0ICogZnJvbSB0MiIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuRGF0YWJhc2VFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgbm90IGUuYXJnc1swXS5lbmRzd2l0aCgicHJvaGliaXRlZCIpOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIHRleHQ6ICVzIiAlIGUuYXJnc1swXSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBleGNlcHRpb24gZHVlIHRvIG1pc3NpbmcgcHJpdmlsZWdlcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Byb2hpYml0ZWQnLCBzdHIoY20uZXhjZXB0aW9uKSkKIAogICAgIGRlZiB0ZXN0X2NvbHVtbl9hY2Nlc3Moc2VsZik6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuRGF0YWJhc2VFcnJvcikgYXMgY206CiAgICAgICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgYzIgZnJvbSB0MSIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuRGF0YWJhc2VFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgbm90IGUuYXJnc1swXS5lbmRzd2l0aCgicHJvaGliaXRlZCIpOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIHRleHQ6ICVzIiAlIGUuYXJnc1swXSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBleGNlcHRpb24gZHVlIHRvIG1pc3NpbmcgcHJpdmlsZWdlcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Byb2hpYml0ZWQnLCBzdHIoY20uZXhjZXB0aW9uKSkKIAogY2xhc3MgQXV0aG9yaXplclJhaXNlRXhjZXB0aW9uVGVzdHMoQXV0aG9yaXplclRlc3RzKToKICAgICBAc3RhdGljbWV0aG9kCmRpZmYgLS1naXQgYS9MaWIvc3JlX2NvbXBpbGUucHkgYi9MaWIvc3JlX2NvbXBpbGUucHkKaW5kZXggNTUwZWExNS4uNTAyYjA2MSAxMDA2NDQKLS0tIGEvTGliL3NyZV9jb21waWxlLnB5CisrKyBiL0xpYi9zcmVfY29tcGlsZS5weQpAQCAtMTMsMTkgKzEzLDEzIEBACiBpbXBvcnQgX3NyZQogaW1wb3J0IHNyZV9wYXJzZQogZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCi1mcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAogCiBhc3NlcnQgX3NyZS5NQUdJQyA9PSBNQUdJQywgIlNSRSBtb2R1bGUgbWlzbWF0Y2giCiAKLWlmIF9zcmUuQ09ERVNJWkUgPT0gMjoKLSAgICBNQVhDT0RFID0gNjU1MzUKLWVsc2U6Ci0gICAgTUFYQ09ERSA9IDB4RkZGRkZGRkYKLQotX0xJVEVSQUxfQ09ERVMgPSBzZXQoW0xJVEVSQUwsIE5PVF9MSVRFUkFMXSkKLV9SRVBFQVRJTkdfQ09ERVMgPSBzZXQoW1JFUEVBVCwgTUlOX1JFUEVBVCwgTUFYX1JFUEVBVF0pCi1fU1VDQ0VTU19DT0RFUyA9IHNldChbU1VDQ0VTUywgRkFJTFVSRV0pCi1fQVNTRVJUX0NPREVTID0gc2V0KFtBU1NFUlQsIEFTU0VSVF9OT1RdKQorX0xJVEVSQUxfQ09ERVMgPSB7TElURVJBTCwgTk9UX0xJVEVSQUx9CitfUkVQRUFUSU5HX0NPREVTID0ge1JFUEVBVCwgTUlOX1JFUEVBVCwgTUFYX1JFUEVBVH0KK19TVUNDRVNTX0NPREVTID0ge1NVQ0NFU1MsIEZBSUxVUkV9CitfQVNTRVJUX0NPREVTID0ge0FTU0VSVCwgQVNTRVJUX05PVH0KIAogIyBTZXRzIG9mIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIHdoaWNoIGhhdmUgdGhlIHNhbWUgdXBwZXJjYXNlLgogX2VxdWl2YWxlbmNlcyA9ICgKQEAgLTg2LDc1ICs4MCw3NSBAQAogICAgICAgICAgICAgaWYgZmxhZ3MgJiBTUkVfRkxBR19JR05PUkVDQVNFOgogICAgICAgICAgICAgICAgIGxvID0gX3NyZS5nZXRsb3dlcihhdiwgZmxhZ3MpCiAgICAgICAgICAgICAgICAgaWYgZml4ZXMgYW5kIGxvIGluIGZpeGVzOgotICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbSU5fSUdOT1JFXSkKKyAgICAgICAgICAgICAgICAgICAgZW1pdChJTl9JR05PUkUpCiAgICAgICAgICAgICAgICAgICAgIHNraXAgPSBfbGVuKGNvZGUpOyBlbWl0KDApCiAgICAgICAgICAgICAgICAgICAgIGlmIG9wIGlzIE5PVF9MSVRFUkFMOgotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW05FR0FURV0pCisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0KE5FR0FURSkKICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gKGxvLCkgKyBmaXhlc1tsb106Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbTElURVJBTF0pCisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0KExJVEVSQUwpCiAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0KGspCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tGQUlMVVJFXSkKKyAgICAgICAgICAgICAgICAgICAgZW1pdChGQUlMVVJFKQogICAgICAgICAgICAgICAgICAgICBjb2RlW3NraXBdID0gX2xlbihjb2RlKSAtIHNraXAKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbT1BfSUdOT1JFW29wXV0pCisgICAgICAgICAgICAgICAgICAgIGVtaXQoT1BfSUdOT1JFW29wXSkKICAgICAgICAgICAgICAgICAgICAgZW1pdChsbykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW29wXSkKKyAgICAgICAgICAgICAgICBlbWl0KG9wKQogICAgICAgICAgICAgICAgIGVtaXQoYXYpCiAgICAgICAgIGVsaWYgb3AgaXMgSU46CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX0lHTk9SRUNBU0U6Ci0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW09QX0lHTk9SRVtvcF1dKQorICAgICAgICAgICAgICAgIGVtaXQoT1BfSUdOT1JFW29wXSkKICAgICAgICAgICAgICAgICBkZWYgZml4dXAobGl0ZXJhbCwgZmxhZ3M9ZmxhZ3MpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3NyZS5nZXRsb3dlcihsaXRlcmFsLCBmbGFncykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW29wXSkKKyAgICAgICAgICAgICAgICBlbWl0KG9wKQogICAgICAgICAgICAgICAgIGZpeHVwID0gTm9uZQogICAgICAgICAgICAgc2tpcCA9IF9sZW4oY29kZSk7IGVtaXQoMCkKICAgICAgICAgICAgIF9jb21waWxlX2NoYXJzZXQoYXYsIGZsYWdzLCBjb2RlLCBmaXh1cCwgZml4ZXMpCiAgICAgICAgICAgICBjb2RlW3NraXBdID0gX2xlbihjb2RlKSAtIHNraXAKICAgICAgICAgZWxpZiBvcCBpcyBBTlk6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX0RPVEFMTDoKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbQU5ZX0FMTF0pCisgICAgICAgICAgICAgICAgZW1pdChBTllfQUxMKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbQU5ZXSkKKyAgICAgICAgICAgICAgICBlbWl0KEFOWSkKICAgICAgICAgZWxpZiBvcCBpbiBSRVBFQVRJTkdfQ09ERVM6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX1RFTVBMQVRFOgotICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJpbnRlcm5hbDogdW5zdXBwb3J0ZWQgdGVtcGxhdGUgb3BlcmF0b3IiKQorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJpbnRlcm5hbDogdW5zdXBwb3J0ZWQgdGVtcGxhdGUgb3BlcmF0b3IgJXIiICUgKG9wLCkpCiAgICAgICAgICAgICBlbGlmIF9zaW1wbGUoYXYpIGFuZCBvcCBpcyBub3QgUkVQRUFUOgogICAgICAgICAgICAgICAgIGlmIG9wIGlzIE1BWF9SRVBFQVQ6Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRfT05FXSkKKyAgICAgICAgICAgICAgICAgICAgZW1pdChSRVBFQVRfT05FKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tNSU5fUkVQRUFUX09ORV0pCisgICAgICAgICAgICAgICAgICAgIGVtaXQoTUlOX1JFUEVBVF9PTkUpCiAgICAgICAgICAgICAgICAgc2tpcCA9IF9sZW4oY29kZSk7IGVtaXQoMCkKICAgICAgICAgICAgICAgICBlbWl0KGF2WzBdKQogICAgICAgICAgICAgICAgIGVtaXQoYXZbMV0pCiAgICAgICAgICAgICAgICAgX2NvbXBpbGUoY29kZSwgYXZbMl0sIGZsYWdzKQotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tTVUNDRVNTXSkKKyAgICAgICAgICAgICAgICBlbWl0KFNVQ0NFU1MpCiAgICAgICAgICAgICAgICAgY29kZVtza2lwXSA9IF9sZW4oY29kZSkgLSBza2lwCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRdKQorICAgICAgICAgICAgICAgIGVtaXQoUkVQRUFUKQogICAgICAgICAgICAgICAgIHNraXAgPSBfbGVuKGNvZGUpOyBlbWl0KDApCiAgICAgICAgICAgICAgICAgZW1pdChhdlswXSkKICAgICAgICAgICAgICAgICBlbWl0KGF2WzFdKQogICAgICAgICAgICAgICAgIF9jb21waWxlKGNvZGUsIGF2WzJdLCBmbGFncykKICAgICAgICAgICAgICAgICBjb2RlW3NraXBdID0gX2xlbihjb2RlKSAtIHNraXAKICAgICAgICAgICAgICAgICBpZiBvcCBpcyBNQVhfUkVQRUFUOgotICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbTUFYX1VOVElMXSkKKyAgICAgICAgICAgICAgICAgICAgZW1pdChNQVhfVU5USUwpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW01JTl9VTlRJTF0pCisgICAgICAgICAgICAgICAgICAgIGVtaXQoTUlOX1VOVElMKQogICAgICAgICBlbGlmIG9wIGlzIFNVQlBBVFRFUk46CiAgICAgICAgICAgICBpZiBhdlswXToKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbTUFSS10pCisgICAgICAgICAgICAgICAgZW1pdChNQVJLKQogICAgICAgICAgICAgICAgIGVtaXQoKGF2WzBdLTEpKjIpCiAgICAgICAgICAgICAjIF9jb21waWxlX2luZm8oY29kZSwgYXZbMV0sIGZsYWdzKQogICAgICAgICAgICAgX2NvbXBpbGUoY29kZSwgYXZbMV0sIGZsYWdzKQogICAgICAgICAgICAgaWYgYXZbMF06Ci0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW01BUktdKQorICAgICAgICAgICAgICAgIGVtaXQoTUFSSykKICAgICAgICAgICAgICAgICBlbWl0KChhdlswXS0xKSoyKzEpCiAgICAgICAgIGVsaWYgb3AgaW4gU1VDQ0VTU19DT0RFUzoKLSAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tvcF0pCisgICAgICAgICAgICBlbWl0KG9wKQogICAgICAgICBlbGlmIG9wIGluIEFTU0VSVF9DT0RFUzoKLSAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tvcF0pCisgICAgICAgICAgICBlbWl0KG9wKQogICAgICAgICAgICAgc2tpcCA9IF9sZW4oY29kZSk7IGVtaXQoMCkKICAgICAgICAgICAgIGlmIGF2WzBdID49IDA6CiAgICAgICAgICAgICAgICAgZW1pdCgwKSAjIGxvb2sgYWhlYWQKQEAgLTE2NCw1NyArMTU4LDU3IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJsb29rLWJlaGluZCByZXF1aXJlcyBmaXhlZC13aWR0aCBwYXR0ZXJuIikKICAgICAgICAgICAgICAgICBlbWl0KGxvKSAjIGxvb2sgYmVoaW5kCiAgICAgICAgICAgICBfY29tcGlsZShjb2RlLCBhdlsxXSwgZmxhZ3MpCi0gICAgICAgICAgICBlbWl0KE9QQ09ERVNbU1VDQ0VTU10pCisgICAgICAgICAgICBlbWl0KFNVQ0NFU1MpCiAgICAgICAgICAgICBjb2RlW3NraXBdID0gX2xlbihjb2RlKSAtIHNraXAKICAgICAgICAgZWxpZiBvcCBpcyBDQUxMOgotICAgICAgICAgICAgZW1pdChPUENPREVTW29wXSkKKyAgICAgICAgICAgIGVtaXQob3ApCiAgICAgICAgICAgICBza2lwID0gX2xlbihjb2RlKTsgZW1pdCgwKQogICAgICAgICAgICAgX2NvbXBpbGUoY29kZSwgYXYsIGZsYWdzKQotICAgICAgICAgICAgZW1pdChPUENPREVTW1NVQ0NFU1NdKQorICAgICAgICAgICAgZW1pdChTVUNDRVNTKQogICAgICAgICAgICAgY29kZVtza2lwXSA9IF9sZW4oY29kZSkgLSBza2lwCiAgICAgICAgIGVsaWYgb3AgaXMgQVQ6Ci0gICAgICAgICAgICBlbWl0KE9QQ09ERVNbb3BdKQorICAgICAgICAgICAgZW1pdChvcCkKICAgICAgICAgICAgIGlmIGZsYWdzICYgU1JFX0ZMQUdfTVVMVElMSU5FOgogICAgICAgICAgICAgICAgIGF2ID0gQVRfTVVMVElMSU5FLmdldChhdiwgYXYpCiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX0xPQ0FMRToKICAgICAgICAgICAgICAgICBhdiA9IEFUX0xPQ0FMRS5nZXQoYXYsIGF2KQogICAgICAgICAgICAgZWxpZiBmbGFncyAmIFNSRV9GTEFHX1VOSUNPREU6CiAgICAgICAgICAgICAgICAgYXYgPSBBVF9VTklDT0RFLmdldChhdiwgYXYpCi0gICAgICAgICAgICBlbWl0KEFUQ09ERVNbYXZdKQorICAgICAgICAgICAgZW1pdChhdikKICAgICAgICAgZWxpZiBvcCBpcyBCUkFOQ0g6Ci0gICAgICAgICAgICBlbWl0KE9QQ09ERVNbb3BdKQorICAgICAgICAgICAgZW1pdChvcCkKICAgICAgICAgICAgIHRhaWwgPSBbXQogICAgICAgICAgICAgdGFpbGFwcGVuZCA9IHRhaWwuYXBwZW5kCiAgICAgICAgICAgICBmb3IgYXYgaW4gYXZbMV06CiAgICAgICAgICAgICAgICAgc2tpcCA9IF9sZW4oY29kZSk7IGVtaXQoMCkKICAgICAgICAgICAgICAgICAjIF9jb21waWxlX2luZm8oY29kZSwgYXYsIGZsYWdzKQogICAgICAgICAgICAgICAgIF9jb21waWxlKGNvZGUsIGF2LCBmbGFncykKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbSlVNUF0pCisgICAgICAgICAgICAgICAgZW1pdChKVU1QKQogICAgICAgICAgICAgICAgIHRhaWxhcHBlbmQoX2xlbihjb2RlKSk7IGVtaXQoMCkKICAgICAgICAgICAgICAgICBjb2RlW3NraXBdID0gX2xlbihjb2RlKSAtIHNraXAKLSAgICAgICAgICAgIGVtaXQoMCkgIyBlbmQgb2YgYnJhbmNoCisgICAgICAgICAgICBlbWl0KEZBSUxVUkUpICMgZW5kIG9mIGJyYW5jaAogICAgICAgICAgICAgZm9yIHRhaWwgaW4gdGFpbDoKICAgICAgICAgICAgICAgICBjb2RlW3RhaWxdID0gX2xlbihjb2RlKSAtIHRhaWwKICAgICAgICAgZWxpZiBvcCBpcyBDQVRFR09SWToKLSAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tvcF0pCisgICAgICAgICAgICBlbWl0KG9wKQogICAgICAgICAgICAgaWYgZmxhZ3MgJiBTUkVfRkxBR19MT0NBTEU6CiAgICAgICAgICAgICAgICAgYXYgPSBDSF9MT0NBTEVbYXZdCiAgICAgICAgICAgICBlbGlmIGZsYWdzICYgU1JFX0ZMQUdfVU5JQ09ERToKICAgICAgICAgICAgICAgICBhdiA9IENIX1VOSUNPREVbYXZdCi0gICAgICAgICAgICBlbWl0KENIQ09ERVNbYXZdKQorICAgICAgICAgICAgZW1pdChhdikKICAgICAgICAgZWxpZiBvcCBpcyBHUk9VUFJFRjoKICAgICAgICAgICAgIGlmIGZsYWdzICYgU1JFX0ZMQUdfSUdOT1JFQ0FTRToKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbT1BfSUdOT1JFW29wXV0pCisgICAgICAgICAgICAgICAgZW1pdChPUF9JR05PUkVbb3BdKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbb3BdKQorICAgICAgICAgICAgICAgIGVtaXQob3ApCiAgICAgICAgICAgICBlbWl0KGF2LTEpCiAgICAgICAgIGVsaWYgb3AgaXMgR1JPVVBSRUZfRVhJU1RTOgotICAgICAgICAgICAgZW1pdChPUENPREVTW29wXSkKKyAgICAgICAgICAgIGVtaXQob3ApCiAgICAgICAgICAgICBlbWl0KGF2WzBdLTEpCiAgICAgICAgICAgICBza2lweWVzID0gX2xlbihjb2RlKTsgZW1pdCgwKQogICAgICAgICAgICAgX2NvbXBpbGUoY29kZSwgYXZbMV0sIGZsYWdzKQogICAgICAgICAgICAgaWYgYXZbMl06Ci0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW0pVTVBdKQorICAgICAgICAgICAgICAgIGVtaXQoSlVNUCkKICAgICAgICAgICAgICAgICBza2lwbm8gPSBfbGVuKGNvZGUpOyBlbWl0KDApCiAgICAgICAgICAgICAgICAgY29kZVtza2lweWVzXSA9IF9sZW4oY29kZSkgLSBza2lweWVzICsgMQogICAgICAgICAgICAgICAgIF9jb21waWxlKGNvZGUsIGF2WzJdLCBmbGFncykKQEAgLTIyMiwxOSArMjE2LDE4IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGNvZGVbc2tpcHllc10gPSBfbGVuKGNvZGUpIC0gc2tpcHllcyArIDEKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZSIsIG9wKQorICAgICAgICAgICAgcmFpc2UgZXJyb3IoImludGVybmFsOiB1bnN1cHBvcnRlZCBvcGVyYW5kIHR5cGUgJXIiICUgKG9wLCkpCiAKIGRlZiBfY29tcGlsZV9jaGFyc2V0KGNoYXJzZXQsIGZsYWdzLCBjb2RlLCBmaXh1cD1Ob25lLCBmaXhlcz1Ob25lKToKICAgICAjIGNvbXBpbGUgY2hhcnNldCBzdWJwcm9ncmFtCiAgICAgZW1pdCA9IGNvZGUuYXBwZW5kCi0gICAgZm9yIG9wLCBhdiBpbiBfb3B0aW1pemVfY2hhcnNldChjaGFyc2V0LCBmaXh1cCwgZml4ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIFNSRV9GTEFHX1VOSUNPREUpOgotICAgICAgICBlbWl0KE9QQ09ERVNbb3BdKQorICAgIGZvciBvcCwgYXYgaW4gX29wdGltaXplX2NoYXJzZXQoY2hhcnNldCwgZml4dXAsIGZpeGVzKToKKyAgICAgICAgZW1pdChvcCkKICAgICAgICAgaWYgb3AgaXMgTkVHQVRFOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbGlmIG9wIGlzIExJVEVSQUw6CiAgICAgICAgICAgICBlbWl0KGF2KQotICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgorICAgICAgICBlbGlmIG9wIGlzIFJBTkdFIG9yIG9wIGlzIFJBTkdFX0lHTk9SRToKICAgICAgICAgICAgIGVtaXQoYXZbMF0pCiAgICAgICAgICAgICBlbWl0KGF2WzFdKQogICAgICAgICBlbGlmIG9wIGlzIENIQVJTRVQ6CkBAIC0yNDMsMTYgKzIzNiwxNiBAQAogICAgICAgICAgICAgY29kZS5leHRlbmQoYXYpCiAgICAgICAgIGVsaWYgb3AgaXMgQ0FURUdPUlk6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX0xPQ0FMRToKLSAgICAgICAgICAgICAgICBlbWl0KENIQ09ERVNbQ0hfTE9DQUxFW2F2XV0pCisgICAgICAgICAgICAgICAgZW1pdChDSF9MT0NBTEVbYXZdKQogICAgICAgICAgICAgZWxpZiBmbGFncyAmIFNSRV9GTEFHX1VOSUNPREU6Ci0gICAgICAgICAgICAgICAgZW1pdChDSENPREVTW0NIX1VOSUNPREVbYXZdXSkKKyAgICAgICAgICAgICAgICBlbWl0KENIX1VOSUNPREVbYXZdKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbWl0KENIQ09ERVNbYXZdKQorICAgICAgICAgICAgICAgIGVtaXQoYXYpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBlcnJvcigiaW50ZXJuYWw6IHVuc3VwcG9ydGVkIHNldCBvcGVyYXRvciIpCi0gICAgZW1pdChPUENPREVTW0ZBSUxVUkVdKQorICAgICAgICAgICAgcmFpc2UgZXJyb3IoImludGVybmFsOiB1bnN1cHBvcnRlZCBzZXQgb3BlcmF0b3IgJXIiICUgKG9wLCkpCisgICAgZW1pdChGQUlMVVJFKQogCi1kZWYgX29wdGltaXplX2NoYXJzZXQoY2hhcnNldCwgZml4dXAsIGZpeGVzLCBpc3VuaWNvZGUpOgorZGVmIF9vcHRpbWl6ZV9jaGFyc2V0KGNoYXJzZXQsIGZpeHVwLCBmaXhlcyk6CiAgICAgIyBpbnRlcm5hbDogb3B0aW1pemUgY2hhcmFjdGVyIHNldAogICAgIG91dCA9IFtdCiAgICAgdGFpbCA9IFtdCkBAIC0yNjIsMTAgKzI1NSwxMCBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlmIG9wIGlzIExJVEVSQUw6CiAgICAgICAgICAgICAgICAgICAgIGlmIGZpeHVwOgotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGZpeHVwKGF2KQotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtpXSA9IDEKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpeGVzIGFuZCBpIGluIGZpeGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrIGluIGZpeGVzW2ldOgorICAgICAgICAgICAgICAgICAgICAgICAgbG8gPSBmaXh1cChhdikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbbG9dID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZml4ZXMgYW5kIGxvIGluIGZpeGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrIGluIGZpeGVzW2xvXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtrXSA9IDEKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbYXZdID0gMQpAQCAtMjkxLDIxICsyODQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIG5vbi1VQ1MxIGNoYXJhY3RlciBjb2RlcwogICAgICAgICAgICAgICAgICAgICBjaGFybWFwICs9IGInXDAnICogMHhmZjAwCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIG5vbi1CTVAgY2hhcmFjdGVyIGNvZGVzCi0gICAgICAgICAgICAgICAgaWYgZml4dXAgYW5kIGlzdW5pY29kZSBhbmQgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIGxvLCBoaSA9IGF2Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlcyA9IFthdl0KLSAgICAgICAgICAgICAgICAgICAgIyBUaGVyZSBhcmUgb25seSB0d28gcmFuZ2VzIG9mIGNhc2VkIGFzdHJhbCBjaGFyYWN0ZXJzOgotICAgICAgICAgICAgICAgICAgICAjIDEwNDAwLTEwNDRGIChEZXNlcmV0KSBhbmQgMTE4QTAtMTE4REYgKFdhcmFuZyBDaXRpKS4KLSAgICAgICAgICAgICAgICAgICAgX2ZpeHVwX3JhbmdlKG1heCgweDEwMDAwLCBsbyksIG1pbigweDExZmZmLCBoaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMsIGZpeHVwKQotICAgICAgICAgICAgICAgICAgICBmb3IgbG8sIGhpIGluIHJhbmdlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvID09IGhpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWwuYXBwZW5kKChMSVRFUkFMLCBoaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWwuYXBwZW5kKChSQU5HRSwgKGxvLCBoaSkpKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHRhaWwuYXBwZW5kKChvcCwgYXYpKQorICAgICAgICAgICAgICAgICMgQ2hhcmFjdGVyIHNldCBjb250YWlucyBub24tQk1QIGNoYXJhY3RlciBjb2Rlcy4KKyAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBvbmx5IHR3byByYW5nZXMgb2YgY2FzZWQgbm9uLUJNUCBjaGFyYWN0ZXJzOgorICAgICAgICAgICAgICAgICMgMTA0MDAtMTA0NEYgKERlc2VyZXQpIGFuZCAxMThBMC0xMThERiAoV2FyYW5nIENpdGkpLAorICAgICAgICAgICAgICAgICMgYW5kIGZvciBib3RoIHJhbmdlcyBSQU5HRV9JR05PUkUgd29ya3MuCisgICAgICAgICAgICAgICAgaWYgZml4dXAgYW5kIG9wIGlzIFJBTkdFOgorICAgICAgICAgICAgICAgICAgICBvcCA9IFJBTkdFX0lHTk9SRQorICAgICAgICAgICAgICAgIHRhaWwuYXBwZW5kKChvcCwgYXYpKQogICAgICAgICAgICAgYnJlYWsKIAogICAgICMgY29tcHJlc3MgY2hhcmFjdGVyIG1hcApAQCAtMzgzLDI1ICszNjgsOCBAQAogICAgIG91dCArPSB0YWlsCiAgICAgcmV0dXJuIG91dAogCi1kZWYgX2ZpeHVwX3JhbmdlKGxvLCBoaSwgcmFuZ2VzLCBmaXh1cCk6Ci0gICAgZm9yIGkgaW4gbWFwKGZpeHVwLCByYW5nZShsbywgaGkrMSkpOgotICAgICAgICBmb3IgaywgKGxvLCBoaSkgaW4gZW51bWVyYXRlKHJhbmdlcyk6Ci0gICAgICAgICAgICBpZiBpIDwgbG86Ci0gICAgICAgICAgICAgICAgaWYgbCA9PSBsbyAtIDE6Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlc1trXSA9IChpLCBoaSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGssIChpLCBpKSkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxpZiBpID4gaGk6Ci0gICAgICAgICAgICAgICAgaWYgaSA9PSBoaSArIDE6Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlc1trXSA9IChsbywgaSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhbmdlcy5hcHBlbmQoKGksIGkpKQotCiBfQ09ERUJJVFMgPSBfc3JlLkNPREVTSVpFICogOAorTUFYQ09ERSA9ICgxIDw8IF9DT0RFQklUUykgLSAxCiBfQklUU19UUkFOUyA9IGInMCcgKyBiJzEnICogMjU1CiBkZWYgX21rX2JpdG1hcChiaXRzLCBfQ09ERUJJVFM9X0NPREVCSVRTLCBfaW50PWludCk6CiAgICAgcyA9IGJpdHMudHJhbnNsYXRlKF9CSVRTX1RSQU5TKVs6Oi0xXQpAQCAtNDQ2LDggKzQxNCwxMSBAQAogICAgICMgdGhpcyBjb250YWlucyBtaW4vbWF4IHBhdHRlcm4gd2lkdGgsIGFuZCBhbiBvcHRpb25hbCBsaXRlcmFsCiAgICAgIyBwcmVmaXggb3IgYSBjaGFyYWN0ZXIgbWFwCiAgICAgbG8sIGhpID0gcGF0dGVybi5nZXR3aWR0aCgpCisgICAgaWYgaGkgPiBNQVhDT0RFOgorICAgICAgICBoaSA9IE1BWENPREUKICAgICBpZiBsbyA9PSAwOgotICAgICAgICByZXR1cm4gIyBub3Qgd29ydGggaXQKKyAgICAgICAgY29kZS5leHRlbmQoW0lORk8sIDQsIDAsIGxvLCBoaV0pCisgICAgICAgIHJldHVybgogICAgICMgbG9vayBmb3IgYSBsaXRlcmFsIHByZWZpeAogICAgIHByZWZpeCA9IFtdCiAgICAgcHJlZml4YXBwZW5kID0gcHJlZml4LmFwcGVuZApAQCAtNTA1LDIxICs0NzYsMjEgQEAKICAgICAgICAgICAgIGVsaWYgb3AgaXMgSU46CiAgICAgICAgICAgICAgICAgY2hhcnNldCA9IGF2CiAjIyAgICAgaWYgcHJlZml4OgotIyMgICAgICAgICBwcmludCAiKioqIFBSRUZJWCIsIHByZWZpeCwgcHJlZml4X3NraXAKKyMjICAgICAgICAgcHJpbnQoIioqKiBQUkVGSVgiLCBwcmVmaXgsIHByZWZpeF9za2lwKQogIyMgICAgIGlmIGNoYXJzZXQ6Ci0jIyAgICAgICAgIHByaW50ICIqKiogQ0hBUlNFVCIsIGNoYXJzZXQKKyMjICAgICAgICAgcHJpbnQoIioqKiBDSEFSU0VUIiwgY2hhcnNldCkKICAgICAjIGFkZCBhbiBpbmZvIGJsb2NrCiAgICAgZW1pdCA9IGNvZGUuYXBwZW5kCi0gICAgZW1pdChPUENPREVTW0lORk9dKQorICAgIGVtaXQoSU5GTykKICAgICBza2lwID0gbGVuKGNvZGUpOyBlbWl0KDApCiAgICAgIyBsaXRlcmFsIGZsYWcKICAgICBtYXNrID0gMAogICAgIGlmIHByZWZpeDoKICAgICAgICAgbWFzayA9IFNSRV9JTkZPX1BSRUZJWAogICAgICAgICBpZiBsZW4ocHJlZml4KSA9PSBwcmVmaXhfc2tpcCA9PSBsZW4ocGF0dGVybi5kYXRhKToKLSAgICAgICAgICAgIG1hc2sgPSBtYXNrICsgU1JFX0lORk9fTElURVJBTAorICAgICAgICAgICAgbWFzayA9IG1hc2sgfCBTUkVfSU5GT19MSVRFUkFMCiAgICAgZWxpZiBjaGFyc2V0OgotICAgICAgICBtYXNrID0gbWFzayArIFNSRV9JTkZPX0NIQVJTRVQKKyAgICAgICAgbWFzayA9IG1hc2sgfCBTUkVfSU5GT19DSEFSU0VUCiAgICAgZW1pdChtYXNrKQogICAgICMgcGF0dGVybiBsZW5ndGgKICAgICBpZiBsbyA8IE1BWENPREU6CkBAIC01MjcsMTAgKzQ5OCw3IEBACiAgICAgZWxzZToKICAgICAgICAgZW1pdChNQVhDT0RFKQogICAgICAgICBwcmVmaXggPSBwcmVmaXhbOk1BWENPREVdCi0gICAgaWYgaGkgPCBNQVhDT0RFOgotICAgICAgICBlbWl0KGhpKQotICAgIGVsc2U6Ci0gICAgICAgIGVtaXQoMCkKKyAgICBlbWl0KG1pbihoaSwgTUFYQ09ERSkpCiAgICAgIyBhZGQgbGl0ZXJhbCBwcmVmaXgKICAgICBpZiBwcmVmaXg6CiAgICAgICAgIGVtaXQobGVuKHByZWZpeCkpICMgbGVuZ3RoCkBAIC01NTYsNyArNTI0LDcgQEAKICAgICAjIGNvbXBpbGUgdGhlIHBhdHRlcm4KICAgICBfY29tcGlsZShjb2RlLCBwLmRhdGEsIGZsYWdzKQogCi0gICAgY29kZS5hcHBlbmQoT1BDT0RFU1tTVUNDRVNTXSkKKyAgICBjb2RlLmFwcGVuZChTVUNDRVNTKQogCiAgICAgcmV0dXJuIGNvZGUKIApAQCAtNTcxLDEzICs1MzksNyBAQAogCiAgICAgY29kZSA9IF9jb2RlKHAsIGZsYWdzKQogCi0gICAgIyBwcmludCBjb2RlCi0KLSAgICAjIFhYWDogPGZsPiBnZXQgcmlkIG9mIHRoaXMgbGltaXRhdGlvbiEKLSAgICBpZiBwLnBhdHRlcm4uZ3JvdXBzID4gMTAwOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKLSAgICAgICAgICAgICJzb3JyeSwgYnV0IHRoaXMgdmVyc2lvbiBvbmx5IHN1cHBvcnRzIDEwMCBuYW1lZCBncm91cHMiCi0gICAgICAgICAgICApCisgICAgIyBwcmludChjb2RlKQogCiAgICAgIyBtYXAgaW4gZWl0aGVyIGRpcmVjdGlvbgogICAgIGdyb3VwaW5kZXggPSBwLnBhdHRlcm4uZ3JvdXBkaWN0CmRpZmYgLS1naXQgYS9MaWIvc3JlX2NvbnN0YW50cy5weSBiL0xpYi9zcmVfY29uc3RhbnRzLnB5CmluZGV4IDIzZTM1MTYuLmZjNjg0YWUgMTAwNjQ0Ci0tLSBhL0xpYi9zcmVfY29uc3RhbnRzLnB5CisrKyBiL0xpYi9zcmVfY29uc3RhbnRzLnB5CkBAIC0xMywxNTMgKzEzLDExNSBAQAogCiAjIHVwZGF0ZSB3aGVuIGNvbnN0YW50cyBhcmUgYWRkZWQgb3IgcmVtb3ZlZAogCi1NQUdJQyA9IDIwMDMxMDE3CitNQUdJQyA9IDIwMTQwOTE3CiAKLWZyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCitmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVCwgTUFYR1JPVVBTCiAKICMgU1JFIHN0YW5kYXJkIGV4Y2VwdGlvbiAoYWNjZXNzIGFzIHNyZS5lcnJvcikKICMgc2hvdWxkIHRoaXMgcmVhbGx5IGJlIGhlcmU/CiAKIGNsYXNzIGVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2csIHBhdHRlcm49Tm9uZSwgcG9zPU5vbmUpOgorICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICBzZWxmLnBhdHRlcm4gPSBwYXR0ZXJuCisgICAgICAgIHNlbGYucG9zID0gcG9zCisgICAgICAgIGlmIHBhdHRlcm4gaXMgbm90IE5vbmUgYW5kIHBvcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1zZyA9ICclcyBhdCBwb3NpdGlvbiAlZCcgJSAobXNnLCBwb3MpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhdHRlcm4sIHN0cik6CisgICAgICAgICAgICAgICAgbmV3bGluZSA9ICdcbicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3bGluZSA9IGInXG4nCisgICAgICAgICAgICBzZWxmLmxpbmVubyA9IHBhdHRlcm4uY291bnQobmV3bGluZSwgMCwgcG9zKSArIDEKKyAgICAgICAgICAgIHNlbGYuY29sbm8gPSBwb3MgLSBwYXR0ZXJuLnJmaW5kKG5ld2xpbmUsIDAsIHBvcykKKyAgICAgICAgICAgIGlmIG5ld2xpbmUgaW4gcGF0dGVybjoKKyAgICAgICAgICAgICAgICBtc2cgPSAnJXMgKGxpbmUgJWQsIGNvbHVtbiAlZCknICUgKG1zZywgc2VsZi5saW5lbm8sIHNlbGYuY29sbm8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxpbmVubyA9IHNlbGYuY29sbm8gPSBOb25lCisgICAgICAgIHN1cGVyKCkuX19pbml0X18obXNnKQorCisKK2NsYXNzIF9OYW1lZEludENvbnN0YW50KGludCk6CisgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZSwgbmFtZSk6CisgICAgICAgIHNlbGYgPSBzdXBlcihfTmFtZWRJbnRDb25zdGFudCwgY2xzKS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKKyAgICBfX3JlcHJfXyA9IF9fc3RyX18KKworTUFYUkVQRUFUID0gX05hbWVkSW50Q29uc3RhbnQoTUFYUkVQRUFULCAnTUFYUkVQRUFUJykKKworZGVmIF9tYWtlY29kZXMobmFtZXMpOgorICAgIG5hbWVzID0gbmFtZXMuc3RyaXAoKS5zcGxpdCgpCisgICAgaXRlbXMgPSBbX05hbWVkSW50Q29uc3RhbnQoaSwgbmFtZSkgZm9yIGksIG5hbWUgaW4gZW51bWVyYXRlKG5hbWVzKV0KKyAgICBnbG9iYWxzKCkudXBkYXRlKHtpdGVtLm5hbWU6IGl0ZW0gZm9yIGl0ZW0gaW4gaXRlbXN9KQorICAgIHJldHVybiBpdGVtcwogCiAjIG9wZXJhdG9ycworIyBmYWlsdXJlPTAgc3VjY2Vzcz0xIChqdXN0IGJlY2F1c2UgaXQgbG9va3MgYmV0dGVyIHRoYXQgd2F5IDotKQorT1BDT0RFUyA9IF9tYWtlY29kZXMoIiIiCisgICAgRkFJTFVSRSBTVUNDRVNTCiAKLUZBSUxVUkUgPSAiZmFpbHVyZSIKLVNVQ0NFU1MgPSAic3VjY2VzcyIKKyAgICBBTlkgQU5ZX0FMTAorICAgIEFTU0VSVCBBU1NFUlRfTk9UCisgICAgQVQKKyAgICBCUkFOQ0gKKyAgICBDQUxMCisgICAgQ0FURUdPUlkKKyAgICBDSEFSU0VUIEJJR0NIQVJTRVQKKyAgICBHUk9VUFJFRiBHUk9VUFJFRl9FWElTVFMgR1JPVVBSRUZfSUdOT1JFCisgICAgSU4gSU5fSUdOT1JFCisgICAgSU5GTworICAgIEpVTVAKKyAgICBMSVRFUkFMIExJVEVSQUxfSUdOT1JFCisgICAgTUFSSworICAgIE1BWF9VTlRJTAorICAgIE1JTl9VTlRJTAorICAgIE5PVF9MSVRFUkFMIE5PVF9MSVRFUkFMX0lHTk9SRQorICAgIE5FR0FURQorICAgIFJBTkdFCisgICAgUkVQRUFUCisgICAgUkVQRUFUX09ORQorICAgIFNVQlBBVFRFUk4KKyAgICBNSU5fUkVQRUFUX09ORQorICAgIFJBTkdFX0lHTk9SRQogCi1BTlkgPSAiYW55IgotQU5ZX0FMTCA9ICJhbnlfYWxsIgotQVNTRVJUID0gImFzc2VydCIKLUFTU0VSVF9OT1QgPSAiYXNzZXJ0X25vdCIKLUFUID0gImF0IgotQklHQ0hBUlNFVCA9ICJiaWdjaGFyc2V0IgotQlJBTkNIID0gImJyYW5jaCIKLUNBTEwgPSAiY2FsbCIKLUNBVEVHT1JZID0gImNhdGVnb3J5IgotQ0hBUlNFVCA9ICJjaGFyc2V0IgotR1JPVVBSRUYgPSAiZ3JvdXByZWYiCi1HUk9VUFJFRl9JR05PUkUgPSAiZ3JvdXByZWZfaWdub3JlIgotR1JPVVBSRUZfRVhJU1RTID0gImdyb3VwcmVmX2V4aXN0cyIKLUlOID0gImluIgotSU5fSUdOT1JFID0gImluX2lnbm9yZSIKLUlORk8gPSAiaW5mbyIKLUpVTVAgPSAianVtcCIKLUxJVEVSQUwgPSAibGl0ZXJhbCIKLUxJVEVSQUxfSUdOT1JFID0gImxpdGVyYWxfaWdub3JlIgotTUFSSyA9ICJtYXJrIgotTUFYX1JFUEVBVCA9ICJtYXhfcmVwZWF0IgotTUFYX1VOVElMID0gIm1heF91bnRpbCIKLU1JTl9SRVBFQVQgPSAibWluX3JlcGVhdCIKLU1JTl9VTlRJTCA9ICJtaW5fdW50aWwiCi1ORUdBVEUgPSAibmVnYXRlIgotTk9UX0xJVEVSQUwgPSAibm90X2xpdGVyYWwiCi1OT1RfTElURVJBTF9JR05PUkUgPSAibm90X2xpdGVyYWxfaWdub3JlIgotUkFOR0UgPSAicmFuZ2UiCi1SRVBFQVQgPSAicmVwZWF0IgotUkVQRUFUX09ORSA9ICJyZXBlYXRfb25lIgotU1VCUEFUVEVSTiA9ICJzdWJwYXR0ZXJuIgotTUlOX1JFUEVBVF9PTkUgPSAibWluX3JlcGVhdF9vbmUiCisgICAgTUlOX1JFUEVBVCBNQVhfUkVQRUFUCisiIiIpCitkZWwgT1BDT0RFU1stMjpdICMgcmVtb3ZlIE1JTl9SRVBFQVQgYW5kIE1BWF9SRVBFQVQKIAogIyBwb3NpdGlvbnMKLUFUX0JFR0lOTklORyA9ICJhdF9iZWdpbm5pbmciCi1BVF9CRUdJTk5JTkdfTElORSA9ICJhdF9iZWdpbm5pbmdfbGluZSIKLUFUX0JFR0lOTklOR19TVFJJTkcgPSAiYXRfYmVnaW5uaW5nX3N0cmluZyIKLUFUX0JPVU5EQVJZID0gImF0X2JvdW5kYXJ5IgotQVRfTk9OX0JPVU5EQVJZID0gImF0X25vbl9ib3VuZGFyeSIKLUFUX0VORCA9ICJhdF9lbmQiCi1BVF9FTkRfTElORSA9ICJhdF9lbmRfbGluZSIKLUFUX0VORF9TVFJJTkcgPSAiYXRfZW5kX3N0cmluZyIKLUFUX0xPQ19CT1VOREFSWSA9ICJhdF9sb2NfYm91bmRhcnkiCi1BVF9MT0NfTk9OX0JPVU5EQVJZID0gImF0X2xvY19ub25fYm91bmRhcnkiCi1BVF9VTklfQk9VTkRBUlkgPSAiYXRfdW5pX2JvdW5kYXJ5IgotQVRfVU5JX05PTl9CT1VOREFSWSA9ICJhdF91bmlfbm9uX2JvdW5kYXJ5IgorQVRDT0RFUyA9IF9tYWtlY29kZXMoIiIiCisgICAgQVRfQkVHSU5OSU5HIEFUX0JFR0lOTklOR19MSU5FIEFUX0JFR0lOTklOR19TVFJJTkcKKyAgICBBVF9CT1VOREFSWSBBVF9OT05fQk9VTkRBUlkKKyAgICBBVF9FTkQgQVRfRU5EX0xJTkUgQVRfRU5EX1NUUklORworICAgIEFUX0xPQ19CT1VOREFSWSBBVF9MT0NfTk9OX0JPVU5EQVJZCisgICAgQVRfVU5JX0JPVU5EQVJZIEFUX1VOSV9OT05fQk9VTkRBUlkKKyIiIikKIAogIyBjYXRlZ29yaWVzCi1DQVRFR09SWV9ESUdJVCA9ICJjYXRlZ29yeV9kaWdpdCIKLUNBVEVHT1JZX05PVF9ESUdJVCA9ICJjYXRlZ29yeV9ub3RfZGlnaXQiCi1DQVRFR09SWV9TUEFDRSA9ICJjYXRlZ29yeV9zcGFjZSIKLUNBVEVHT1JZX05PVF9TUEFDRSA9ICJjYXRlZ29yeV9ub3Rfc3BhY2UiCi1DQVRFR09SWV9XT1JEID0gImNhdGVnb3J5X3dvcmQiCi1DQVRFR09SWV9OT1RfV09SRCA9ICJjYXRlZ29yeV9ub3Rfd29yZCIKLUNBVEVHT1JZX0xJTkVCUkVBSyA9ICJjYXRlZ29yeV9saW5lYnJlYWsiCi1DQVRFR09SWV9OT1RfTElORUJSRUFLID0gImNhdGVnb3J5X25vdF9saW5lYnJlYWsiCi1DQVRFR09SWV9MT0NfV09SRCA9ICJjYXRlZ29yeV9sb2Nfd29yZCIKLUNBVEVHT1JZX0xPQ19OT1RfV09SRCA9ICJjYXRlZ29yeV9sb2Nfbm90X3dvcmQiCi1DQVRFR09SWV9VTklfRElHSVQgPSAiY2F0ZWdvcnlfdW5pX2RpZ2l0IgotQ0FURUdPUllfVU5JX05PVF9ESUdJVCA9ICJjYXRlZ29yeV91bmlfbm90X2RpZ2l0IgotQ0FURUdPUllfVU5JX1NQQUNFID0gImNhdGVnb3J5X3VuaV9zcGFjZSIKLUNBVEVHT1JZX1VOSV9OT1RfU1BBQ0UgPSAiY2F0ZWdvcnlfdW5pX25vdF9zcGFjZSIKLUNBVEVHT1JZX1VOSV9XT1JEID0gImNhdGVnb3J5X3VuaV93b3JkIgotQ0FURUdPUllfVU5JX05PVF9XT1JEID0gImNhdGVnb3J5X3VuaV9ub3Rfd29yZCIKLUNBVEVHT1JZX1VOSV9MSU5FQlJFQUsgPSAiY2F0ZWdvcnlfdW5pX2xpbmVicmVhayIKLUNBVEVHT1JZX1VOSV9OT1RfTElORUJSRUFLID0gImNhdGVnb3J5X3VuaV9ub3RfbGluZWJyZWFrIgorQ0hDT0RFUyA9IF9tYWtlY29kZXMoIiIiCisgICAgQ0FURUdPUllfRElHSVQgQ0FURUdPUllfTk9UX0RJR0lUCisgICAgQ0FURUdPUllfU1BBQ0UgQ0FURUdPUllfTk9UX1NQQUNFCisgICAgQ0FURUdPUllfV09SRCBDQVRFR09SWV9OT1RfV09SRAorICAgIENBVEVHT1JZX0xJTkVCUkVBSyBDQVRFR09SWV9OT1RfTElORUJSRUFLCisgICAgQ0FURUdPUllfTE9DX1dPUkQgQ0FURUdPUllfTE9DX05PVF9XT1JECisgICAgQ0FURUdPUllfVU5JX0RJR0lUIENBVEVHT1JZX1VOSV9OT1RfRElHSVQKKyAgICBDQVRFR09SWV9VTklfU1BBQ0UgQ0FURUdPUllfVU5JX05PVF9TUEFDRQorICAgIENBVEVHT1JZX1VOSV9XT1JEIENBVEVHT1JZX1VOSV9OT1RfV09SRAorICAgIENBVEVHT1JZX1VOSV9MSU5FQlJFQUsgQ0FURUdPUllfVU5JX05PVF9MSU5FQlJFQUsKKyIiIikKIAotT1BDT0RFUyA9IFsKLQotICAgICMgZmFpbHVyZT0wIHN1Y2Nlc3M9MSAoanVzdCBiZWNhdXNlIGl0IGxvb2tzIGJldHRlciB0aGF0IHdheSA6LSkKLSAgICBGQUlMVVJFLCBTVUNDRVNTLAotCi0gICAgQU5ZLCBBTllfQUxMLAotICAgIEFTU0VSVCwgQVNTRVJUX05PVCwKLSAgICBBVCwKLSAgICBCUkFOQ0gsCi0gICAgQ0FMTCwKLSAgICBDQVRFR09SWSwKLSAgICBDSEFSU0VULCBCSUdDSEFSU0VULAotICAgIEdST1VQUkVGLCBHUk9VUFJFRl9FWElTVFMsIEdST1VQUkVGX0lHTk9SRSwKLSAgICBJTiwgSU5fSUdOT1JFLAotICAgIElORk8sCi0gICAgSlVNUCwKLSAgICBMSVRFUkFMLCBMSVRFUkFMX0lHTk9SRSwKLSAgICBNQVJLLAotICAgIE1BWF9VTlRJTCwKLSAgICBNSU5fVU5USUwsCi0gICAgTk9UX0xJVEVSQUwsIE5PVF9MSVRFUkFMX0lHTk9SRSwKLSAgICBORUdBVEUsCi0gICAgUkFOR0UsCi0gICAgUkVQRUFULAotICAgIFJFUEVBVF9PTkUsCi0gICAgU1VCUEFUVEVSTiwKLSAgICBNSU5fUkVQRUFUX09ORQotCi1dCi0KLUFUQ09ERVMgPSBbCi0gICAgQVRfQkVHSU5OSU5HLCBBVF9CRUdJTk5JTkdfTElORSwgQVRfQkVHSU5OSU5HX1NUUklORywgQVRfQk9VTkRBUlksCi0gICAgQVRfTk9OX0JPVU5EQVJZLCBBVF9FTkQsIEFUX0VORF9MSU5FLCBBVF9FTkRfU1RSSU5HLAotICAgIEFUX0xPQ19CT1VOREFSWSwgQVRfTE9DX05PTl9CT1VOREFSWSwgQVRfVU5JX0JPVU5EQVJZLAotICAgIEFUX1VOSV9OT05fQk9VTkRBUlkKLV0KLQotQ0hDT0RFUyA9IFsKLSAgICBDQVRFR09SWV9ESUdJVCwgQ0FURUdPUllfTk9UX0RJR0lULCBDQVRFR09SWV9TUEFDRSwKLSAgICBDQVRFR09SWV9OT1RfU1BBQ0UsIENBVEVHT1JZX1dPUkQsIENBVEVHT1JZX05PVF9XT1JELAotICAgIENBVEVHT1JZX0xJTkVCUkVBSywgQ0FURUdPUllfTk9UX0xJTkVCUkVBSywgQ0FURUdPUllfTE9DX1dPUkQsCi0gICAgQ0FURUdPUllfTE9DX05PVF9XT1JELCBDQVRFR09SWV9VTklfRElHSVQsIENBVEVHT1JZX1VOSV9OT1RfRElHSVQsCi0gICAgQ0FURUdPUllfVU5JX1NQQUNFLCBDQVRFR09SWV9VTklfTk9UX1NQQUNFLCBDQVRFR09SWV9VTklfV09SRCwKLSAgICBDQVRFR09SWV9VTklfTk9UX1dPUkQsIENBVEVHT1JZX1VOSV9MSU5FQlJFQUssCi0gICAgQ0FURUdPUllfVU5JX05PVF9MSU5FQlJFQUsKLV0KLQotZGVmIG1ha2VkaWN0KGxpc3QpOgotICAgIGQgPSB7fQotICAgIGkgPSAwCi0gICAgZm9yIGl0ZW0gaW4gbGlzdDoKLSAgICAgICAgZFtpdGVtXSA9IGkKLSAgICAgICAgaSA9IGkgKyAxCi0gICAgcmV0dXJuIGQKLQotT1BDT0RFUyA9IG1ha2VkaWN0KE9QQ09ERVMpCi1BVENPREVTID0gbWFrZWRpY3QoQVRDT0RFUykKLUNIQ09ERVMgPSBtYWtlZGljdChDSENPREVTKQogCiAjIHJlcGxhY2VtZW50IG9wZXJhdGlvbnMgZm9yICJpZ25vcmUgY2FzZSIgbW9kZQogT1BfSUdOT1JFID0gewogICAgIEdST1VQUkVGOiBHUk9VUFJFRl9JR05PUkUsCiAgICAgSU46IElOX0lHTk9SRSwKICAgICBMSVRFUkFMOiBMSVRFUkFMX0lHTk9SRSwKLSAgICBOT1RfTElURVJBTDogTk9UX0xJVEVSQUxfSUdOT1JFCisgICAgTk9UX0xJVEVSQUw6IE5PVF9MSVRFUkFMX0lHTk9SRSwKKyAgICBSQU5HRTogUkFOR0VfSUdOT1JFLAogfQogCiBBVF9NVUxUSUxJTkUgPSB7CkBAIC0yMTcsMTEgKzE3OSwxMSBAQAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGRlZiBkdW1wKGYsIGQsIHByZWZpeCk6Ci0gICAgICAgIGl0ZW1zID0gc29ydGVkKGQuaXRlbXMoKSwga2V5PWxhbWJkYSBhOiBhWzFdKQotICAgICAgICBmb3IgaywgdiBpbiBpdGVtczoKLSAgICAgICAgICAgIGYud3JpdGUoIiNkZWZpbmUgJXNfJXMgJXNcbiIgJSAocHJlZml4LCBrLnVwcGVyKCksIHYpKQotICAgIGYgPSBvcGVuKCJzcmVfY29uc3RhbnRzLmgiLCAidyIpCi0gICAgZi53cml0ZSgiIiJcCisgICAgICAgIGl0ZW1zID0gc29ydGVkKGQpCisgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgZi53cml0ZSgiI2RlZmluZSAlc18lcyAlZFxuIiAlIChwcmVmaXgsIGl0ZW0sIGl0ZW0pKQorICAgIHdpdGggb3Blbigic3JlX2NvbnN0YW50cy5oIiwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKCIiIlwKIC8qCiAgKiBTZWNyZXQgTGFicycgUmVndWxhciBFeHByZXNzaW9uIEVuZ2luZQogICoKQEAgLTIzNywyNSArMTk5LDI0IEBACiAKICIiIikKIAotICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX01BR0lDICVkXG4iICUgTUFHSUMpCisgICAgICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX01BR0lDICVkXG4iICUgTUFHSUMpCiAKLSAgICBkdW1wKGYsIE9QQ09ERVMsICJTUkVfT1AiKQotICAgIGR1bXAoZiwgQVRDT0RFUywgIlNSRSIpCi0gICAgZHVtcChmLCBDSENPREVTLCAiU1JFIikKKyAgICAgICAgZHVtcChmLCBPUENPREVTLCAiU1JFX09QIikKKyAgICAgICAgZHVtcChmLCBBVENPREVTLCAiU1JFIikKKyAgICAgICAgZHVtcChmLCBDSENPREVTLCAiU1JFIikKIAotICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVEVNUExBVEUgJWRcbiIgJSBTUkVfRkxBR19URU1QTEFURSkKLSAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0lHTk9SRUNBU0UgJWRcbiIgJSBTUkVfRkxBR19JR05PUkVDQVNFKQotICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfTE9DQUxFICVkXG4iICUgU1JFX0ZMQUdfTE9DQUxFKQotICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfTVVMVElMSU5FICVkXG4iICUgU1JFX0ZMQUdfTVVMVElMSU5FKQotICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfRE9UQUxMICVkXG4iICUgU1JFX0ZMQUdfRE9UQUxMKQotICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVU5JQ09ERSAlZFxuIiAlIFNSRV9GTEFHX1VOSUNPREUpCi0gICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19WRVJCT1NFICVkXG4iICUgU1JFX0ZMQUdfVkVSQk9TRSkKLSAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0RFQlVHICVkXG4iICUgU1JFX0ZMQUdfREVCVUcpCi0gICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19BU0NJSSAlZFxuIiAlIFNSRV9GTEFHX0FTQ0lJKQorICAgICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX1RFTVBMQVRFICVkXG4iICUgU1JFX0ZMQUdfVEVNUExBVEUpCisgICAgICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfSUdOT1JFQ0FTRSAlZFxuIiAlIFNSRV9GTEFHX0lHTk9SRUNBU0UpCisgICAgICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfTE9DQUxFICVkXG4iICUgU1JFX0ZMQUdfTE9DQUxFKQorICAgICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX01VTFRJTElORSAlZFxuIiAlIFNSRV9GTEFHX01VTFRJTElORSkKKyAgICAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19ET1RBTEwgJWRcbiIgJSBTUkVfRkxBR19ET1RBTEwpCisgICAgICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVU5JQ09ERSAlZFxuIiAlIFNSRV9GTEFHX1VOSUNPREUpCisgICAgICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSAlZFxuIiAlIFNSRV9GTEFHX1ZFUkJPU0UpCisgICAgICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfREVCVUcgJWRcbiIgJSBTUkVfRkxBR19ERUJVRykKKyAgICAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19BU0NJSSAlZFxuIiAlIFNSRV9GTEFHX0FTQ0lJKQogCi0gICAgZi53cml0ZSgiI2RlZmluZSBTUkVfSU5GT19QUkVGSVggJWRcbiIgJSBTUkVfSU5GT19QUkVGSVgpCi0gICAgZi53cml0ZSgiI2RlZmluZSBTUkVfSU5GT19MSVRFUkFMICVkXG4iICUgU1JFX0lORk9fTElURVJBTCkKLSAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9JTkZPX0NIQVJTRVQgJWRcbiIgJSBTUkVfSU5GT19DSEFSU0VUKQorICAgICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9JTkZPX1BSRUZJWCAlZFxuIiAlIFNSRV9JTkZPX1BSRUZJWCkKKyAgICAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfSU5GT19MSVRFUkFMICVkXG4iICUgU1JFX0lORk9fTElURVJBTCkKKyAgICAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfSU5GT19DSEFSU0VUICVkXG4iICUgU1JFX0lORk9fQ0hBUlNFVCkKIAotICAgIGYuY2xvc2UoKQogICAgIHByaW50KCJkb25lIikKZGlmZiAtLWdpdCBhL0xpYi9zcmVfcGFyc2UucHkgYi9MaWIvc3JlX3BhcnNlLnB5CmluZGV4IGRmMWU2NDMuLjRmZjUwZDEgMTAwNjQ0Ci0tLSBhL0xpYi9zcmVfcGFyc2UucHkKKysrIGIvTGliL3NyZV9wYXJzZS5weQpAQCAtMTMsMTcgKzEzLDIwIEBACiAjIFhYWDogc2hvdyBzdHJpbmcgb2Zmc2V0IGFuZCBvZmZlbmRpbmcgY2hhcmFjdGVyIGZvciBhbGwgZXJyb3JzCiAKIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgotZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKIAogU1BFQ0lBTF9DSEFSUyA9ICIuXFxbeygpKis/XiR8IgogUkVQRUFUX0NIQVJTID0gIiorP3siCiAKLURJR0lUUyA9IHNldCgiMDEyMzQ1Njc4OSIpCitESUdJVFMgPSBmcm96ZW5zZXQoIjAxMjM0NTY3ODkiKQogCi1PQ1RESUdJVFMgPSBzZXQoIjAxMjM0NTY3IikKLUhFWERJR0lUUyA9IHNldCgiMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRiIpCitPQ1RESUdJVFMgPSBmcm96ZW5zZXQoIjAxMjM0NTY3IikKK0hFWERJR0lUUyA9IGZyb3plbnNldCgiMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRiIpCitBU0NJSUxFVFRFUlMgPSBmcm96ZW5zZXQoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiKQogCi1XSElURVNQQUNFID0gc2V0KCIgXHRcblxyXHZcZiIpCitXSElURVNQQUNFID0gZnJvemVuc2V0KCIgXHRcblxyXHZcZiIpCisKK19SRVBFQVRDT0RFUyA9IGZyb3plbnNldCh7TUlOX1JFUEVBVCwgTUFYX1JFUEVBVH0pCitfVU5JVENPREVTID0gZnJvemVuc2V0KHtBTlksIFJBTkdFLCBJTiwgTElURVJBTCwgTk9UX0xJVEVSQUwsIENBVEVHT1JZfSkKIAogRVNDQVBFUyA9IHsKICAgICByIlxhIjogKExJVEVSQUwsIG9yZCgiXGEiKSksCkBAIC02NiwyNiArNjksMzYgQEAKICAgICAjIG1hc3RlciBwYXR0ZXJuIG9iamVjdC4gIGtlZXBzIHRyYWNrIG9mIGdsb2JhbCBhdHRyaWJ1dGVzCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLmZsYWdzID0gMAotICAgICAgICBzZWxmLm9wZW4gPSBbXQotICAgICAgICBzZWxmLmdyb3VwcyA9IDEKICAgICAgICAgc2VsZi5ncm91cGRpY3QgPSB7fQotICAgICAgICBzZWxmLmxvb2tiZWhpbmQgPSAwCi0KKyAgICAgICAgc2VsZi5ncm91cHdpZHRocyA9IFtOb25lXSAgIyBncm91cCAwCisgICAgICAgIHNlbGYubG9va2JlaGluZGdyb3VwcyA9IE5vbmUKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZ3JvdXBzKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuZ3JvdXB3aWR0aHMpCiAgICAgZGVmIG9wZW5ncm91cChzZWxmLCBuYW1lPU5vbmUpOgogICAgICAgICBnaWQgPSBzZWxmLmdyb3VwcwotICAgICAgICBzZWxmLmdyb3VwcyA9IGdpZCArIDEKKyAgICAgICAgc2VsZi5ncm91cHdpZHRocy5hcHBlbmQoTm9uZSkKKyAgICAgICAgaWYgc2VsZi5ncm91cHMgPiBNQVhHUk9VUFM6CisgICAgICAgICAgICByYWlzZSBlcnJvcigidG9vIG1hbnkgZ3JvdXBzIikKICAgICAgICAgaWYgbmFtZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIG9naWQgPSBzZWxmLmdyb3VwZGljdC5nZXQobmFtZSwgTm9uZSkKICAgICAgICAgICAgIGlmIG9naWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInJlZGVmaW5pdGlvbiBvZiBncm91cCBuYW1lICVzIGFzIGdyb3VwICVkOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcyBncm91cCAlZCIgJSAocmVwcihuYW1lKSwgZ2lkLCAgb2dpZCkpCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInJlZGVmaW5pdGlvbiBvZiBncm91cCBuYW1lICVyIGFzIGdyb3VwICVkOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcyBncm91cCAlZCIgJSAobmFtZSwgZ2lkLCAgb2dpZCkpCiAgICAgICAgICAgICBzZWxmLmdyb3VwZGljdFtuYW1lXSA9IGdpZAotICAgICAgICBzZWxmLm9wZW4uYXBwZW5kKGdpZCkKICAgICAgICAgcmV0dXJuIGdpZAotICAgIGRlZiBjbG9zZWdyb3VwKHNlbGYsIGdpZCk6Ci0gICAgICAgIHNlbGYub3Blbi5yZW1vdmUoZ2lkKQorICAgIGRlZiBjbG9zZWdyb3VwKHNlbGYsIGdpZCwgcCk6CisgICAgICAgIHNlbGYuZ3JvdXB3aWR0aHNbZ2lkXSA9IHAuZ2V0d2lkdGgoKQogICAgIGRlZiBjaGVja2dyb3VwKHNlbGYsIGdpZCk6Ci0gICAgICAgIHJldHVybiBnaWQgPCBzZWxmLmdyb3VwcyBhbmQgZ2lkIG5vdCBpbiBzZWxmLm9wZW4KKyAgICAgICAgcmV0dXJuIGdpZCA8IHNlbGYuZ3JvdXBzIGFuZCBzZWxmLmdyb3Vwd2lkdGhzW2dpZF0gaXMgbm90IE5vbmUKKworICAgIGRlZiBjaGVja2xvb2tiZWhpbmRncm91cChzZWxmLCBnaWQsIHNvdXJjZSk6CisgICAgICAgIGlmIHNlbGYubG9va2JlaGluZGdyb3VwcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrZ3JvdXAoZ2lkKToKKyAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoJ2Nhbm5vdCByZWZlciB0byBhbiBvcGVuIGdyb3VwJykKKyAgICAgICAgICAgIGlmIGdpZCA+PSBzZWxmLmxvb2tiZWhpbmRncm91cHM6CisgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCdjYW5ub3QgcmVmZXIgdG8gZ3JvdXAgZGVmaW5lZCBpbiB0aGUgc2FtZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb29rYmVoaW5kIHN1YnBhdHRlcm4nKQogCiBjbGFzcyBTdWJQYXR0ZXJuOgogICAgICMgYSBzdWJwYXR0ZXJuLCBpbiBpbnRlcm1lZGlhdGUgZm9ybQpAQCAtOTksMjQgKzExMiwyNCBAQAogICAgICAgICBubCA9IFRydWUKICAgICAgICAgc2VxdHlwZXMgPSAodHVwbGUsIGxpc3QpCiAgICAgICAgIGZvciBvcCwgYXYgaW4gc2VsZi5kYXRhOgotICAgICAgICAgICAgcHJpbnQobGV2ZWwqIiAgIiArIG9wLCBlbmQ9JycpCi0gICAgICAgICAgICBpZiBvcCA9PSBJTjoKKyAgICAgICAgICAgIHByaW50KGxldmVsKiIgICIgKyBzdHIob3ApLCBlbmQ9JycpCisgICAgICAgICAgICBpZiBvcCBpcyBJTjoKICAgICAgICAgICAgICAgICAjIG1lbWJlciBzdWJsYW5ndWFnZQogICAgICAgICAgICAgICAgIHByaW50KCkKICAgICAgICAgICAgICAgICBmb3Igb3AsIGEgaW4gYXY6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KChsZXZlbCsxKSoiICAiICsgb3AsIGEpCi0gICAgICAgICAgICBlbGlmIG9wID09IEJSQU5DSDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoKGxldmVsKzEpKiIgICIgKyBzdHIob3ApLCBhKQorICAgICAgICAgICAgZWxpZiBvcCBpcyBCUkFOQ0g6CiAgICAgICAgICAgICAgICAgcHJpbnQoKQogICAgICAgICAgICAgICAgIGZvciBpLCBhIGluIGVudW1lcmF0ZShhdlsxXSk6CiAgICAgICAgICAgICAgICAgICAgIGlmIGk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludChsZXZlbCoiICAiICsgIm9yIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGxldmVsKiIgICIgKyAiT1IiKQogICAgICAgICAgICAgICAgICAgICBhLmR1bXAobGV2ZWwrMSkKLSAgICAgICAgICAgIGVsaWYgb3AgPT0gR1JPVVBSRUZfRVhJU1RTOgorICAgICAgICAgICAgZWxpZiBvcCBpcyBHUk9VUFJFRl9FWElTVFM6CiAgICAgICAgICAgICAgICAgY29uZGdyb3VwLCBpdGVtX3llcywgaXRlbV9ubyA9IGF2CiAgICAgICAgICAgICAgICAgcHJpbnQoJycsIGNvbmRncm91cCkKICAgICAgICAgICAgICAgICBpdGVtX3llcy5kdW1wKGxldmVsKzEpCiAgICAgICAgICAgICAgICAgaWYgaXRlbV9ubzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQobGV2ZWwqIiAgIiArICJlbHNlIikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobGV2ZWwqIiAgIiArICJFTFNFIikKICAgICAgICAgICAgICAgICAgICAgaXRlbV9uby5kdW1wKGxldmVsKzEpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYXYsIHNlcXR5cGVzKToKICAgICAgICAgICAgICAgICBubCA9IEZhbHNlCkBAIC0xNTMsMTEgKzE2Niw5IEBACiAgICAgICAgIHNlbGYuZGF0YS5hcHBlbmQoY29kZSkKICAgICBkZWYgZ2V0d2lkdGgoc2VsZik6CiAgICAgICAgICMgZGV0ZXJtaW5lIHRoZSB3aWR0aCAobWluLCBtYXgpIGZvciB0aGlzIHN1YnBhdHRlcm4KLSAgICAgICAgaWYgc2VsZi53aWR0aDoKKyAgICAgICAgaWYgc2VsZi53aWR0aCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLndpZHRoCiAgICAgICAgIGxvID0gaGkgPSAwCi0gICAgICAgIFVOSVRDT0RFUyA9IChBTlksIFJBTkdFLCBJTiwgTElURVJBTCwgTk9UX0xJVEVSQUwsIENBVEVHT1JZKQotICAgICAgICBSRVBFQVRDT0RFUyA9IChNSU5fUkVQRUFULCBNQVhfUkVQRUFUKQogICAgICAgICBmb3Igb3AsIGF2IGluIHNlbGYuZGF0YToKICAgICAgICAgICAgIGlmIG9wIGlzIEJSQU5DSDoKICAgICAgICAgICAgICAgICBpID0gTUFYUkVQRUFUIC0gMQpAQCAtMTc2LDE0ICsxODcsMjggQEAKICAgICAgICAgICAgICAgICBpLCBqID0gYXZbMV0uZ2V0d2lkdGgoKQogICAgICAgICAgICAgICAgIGxvID0gbG8gKyBpCiAgICAgICAgICAgICAgICAgaGkgPSBoaSArIGoKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gUkVQRUFUQ09ERVM6CisgICAgICAgICAgICBlbGlmIG9wIGluIF9SRVBFQVRDT0RFUzoKICAgICAgICAgICAgICAgICBpLCBqID0gYXZbMl0uZ2V0d2lkdGgoKQogICAgICAgICAgICAgICAgIGxvID0gbG8gKyBpICogYXZbMF0KICAgICAgICAgICAgICAgICBoaSA9IGhpICsgaiAqIGF2WzFdCi0gICAgICAgICAgICBlbGlmIG9wIGluIFVOSVRDT0RFUzoKKyAgICAgICAgICAgIGVsaWYgb3AgaW4gX1VOSVRDT0RFUzoKICAgICAgICAgICAgICAgICBsbyA9IGxvICsgMQogICAgICAgICAgICAgICAgIGhpID0gaGkgKyAxCi0gICAgICAgICAgICBlbGlmIG9wID09IFNVQ0NFU1M6CisgICAgICAgICAgICBlbGlmIG9wIGlzIEdST1VQUkVGOgorICAgICAgICAgICAgICAgIGksIGogPSBzZWxmLnBhdHRlcm4uZ3JvdXB3aWR0aHNbYXZdCisgICAgICAgICAgICAgICAgbG8gPSBsbyArIGkKKyAgICAgICAgICAgICAgICBoaSA9IGhpICsgagorICAgICAgICAgICAgZWxpZiBvcCBpcyBHUk9VUFJFRl9FWElTVFM6CisgICAgICAgICAgICAgICAgaSwgaiA9IGF2WzFdLmdldHdpZHRoKCkKKyAgICAgICAgICAgICAgICBpZiBhdlsyXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbCwgaCA9IGF2WzJdLmdldHdpZHRoKCkKKyAgICAgICAgICAgICAgICAgICAgaSA9IG1pbihpLCBsKQorICAgICAgICAgICAgICAgICAgICBqID0gbWF4KGosIGgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICBsbyA9IGxvICsgaQorICAgICAgICAgICAgICAgIGhpID0gaGkgKyBqCisgICAgICAgICAgICBlbGlmIG9wIGlzIFNVQ0NFU1M6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgc2VsZi53aWR0aCA9IG1pbihsbywgTUFYUkVQRUFUIC0gMSksIG1pbihoaSwgTUFYUkVQRUFUKQogICAgICAgICByZXR1cm4gc2VsZi53aWR0aApAQCAtMTkyLDMzICsyMTcsMzMgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyaW5nKToKICAgICAgICAgc2VsZi5pc3RleHQgPSBpc2luc3RhbmNlKHN0cmluZywgc3RyKQogICAgICAgICBzZWxmLnN0cmluZyA9IHN0cmluZworICAgICAgICBpZiBub3Qgc2VsZi5pc3RleHQ6CisgICAgICAgICAgICBzdHJpbmcgPSBzdHIoc3RyaW5nLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5kZWNvZGVkX3N0cmluZyA9IHN0cmluZwogICAgICAgICBzZWxmLmluZGV4ID0gMAorICAgICAgICBzZWxmLm5leHQgPSBOb25lCiAgICAgICAgIHNlbGYuX19uZXh0KCkKICAgICBkZWYgX19uZXh0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmluZGV4ID49IGxlbihzZWxmLnN0cmluZyk6CisgICAgICAgIGluZGV4ID0gc2VsZi5pbmRleAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjaGFyID0gc2VsZi5kZWNvZGVkX3N0cmluZ1tpbmRleF0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICBzZWxmLm5leHQgPSBOb25lCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgY2hhciA9IHNlbGYuc3RyaW5nW3NlbGYuaW5kZXg6c2VsZi5pbmRleCsxXQotICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgdGhlIHN0cjgsIHNpbmNlIGluZGV4aW5nIHJldHVybnMgYSBpbnRlZ2VyCi0gICAgICAgICMgWFhYIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIHRlc3RfYnVnXzkyNjA3NSBpbiB0ZXN0X3JlLnB5Ci0gICAgICAgIGlmIGNoYXIgYW5kIG5vdCBzZWxmLmlzdGV4dDoKLSAgICAgICAgICAgIGNoYXIgPSBjaHIoY2hhclswXSkKICAgICAgICAgaWYgY2hhciA9PSAiXFwiOgorICAgICAgICAgICAgaW5kZXggKz0gMQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGMgPSBzZWxmLnN0cmluZ1tzZWxmLmluZGV4ICsgMV0KKyAgICAgICAgICAgICAgICBjaGFyICs9IHNlbGYuZGVjb2RlZF9zdHJpbmdbaW5kZXhdCiAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiYm9ndXMgZXNjYXBlIChlbmQgb2YgbGluZSkiKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuaXN0ZXh0OgotICAgICAgICAgICAgICAgIGMgPSBjaHIoYykKLSAgICAgICAgICAgIGNoYXIgPSBjaGFyICsgYwotICAgICAgICBzZWxmLmluZGV4ID0gc2VsZi5pbmRleCArIGxlbihjaGFyKQorICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJiYWQgZXNjYXBlIChlbmQgb2YgcGF0dGVybikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyaW5nLCBsZW4oc2VsZi5zdHJpbmcpIC0gMSkgZnJvbSBOb25lCisgICAgICAgIHNlbGYuaW5kZXggPSBpbmRleCArIDEKICAgICAgICAgc2VsZi5uZXh0ID0gY2hhcgotICAgIGRlZiBtYXRjaChzZWxmLCBjaGFyLCBza2lwPTEpOgorICAgIGRlZiBtYXRjaChzZWxmLCBjaGFyKToKICAgICAgICAgaWYgY2hhciA9PSBzZWxmLm5leHQ6Ci0gICAgICAgICAgICBpZiBza2lwOgotICAgICAgICAgICAgICAgIHNlbGYuX19uZXh0KCkKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBzZWxmLl9fbmV4dCgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKICAgICBkZWYgZ2V0KHNlbGYpOgogICAgICAgICB0aGlzID0gc2VsZi5uZXh0CiAgICAgICAgIHNlbGYuX19uZXh0KCkKQEAgLTIzMiwxMCArMjU3LDMwIEBACiAgICAgICAgICAgICByZXN1bHQgKz0gYwogICAgICAgICAgICAgc2VsZi5fX25leHQoKQogICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgZGVmIGdldHVudGlsKHNlbGYsIHRlcm1pbmF0b3IpOgorICAgICAgICByZXN1bHQgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHNlbGYubmV4dAorICAgICAgICAgICAgc2VsZi5fX25leHQoKQorICAgICAgICAgICAgaWYgYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZXJyb3IoIm1pc3NpbmcgZ3JvdXAgbmFtZSIpCisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5lcnJvcigibWlzc2luZyAlcywgdW50ZXJtaW5hdGVkIG5hbWUiICUgdGVybWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihyZXN1bHQpKQorICAgICAgICAgICAgaWYgYyA9PSB0ZXJtaW5hdG9yOgorICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZXJyb3IoIm1pc3NpbmcgZ3JvdXAgbmFtZSIsIDEpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHJlc3VsdCArPSBjCisgICAgICAgIHJldHVybiByZXN1bHQKICAgICBkZWYgdGVsbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXgsIHNlbGYubmV4dAorICAgICAgICByZXR1cm4gc2VsZi5pbmRleCAtIGxlbihzZWxmLm5leHQgb3IgJycpCiAgICAgZGVmIHNlZWsoc2VsZiwgaW5kZXgpOgotICAgICAgICBzZWxmLmluZGV4LCBzZWxmLm5leHQgPSBpbmRleAorICAgICAgICBzZWxmLmluZGV4ID0gaW5kZXgKKyAgICAgICAgc2VsZi5fX25leHQoKQorCisgICAgZGVmIGVycm9yKHNlbGYsIG1zZywgb2Zmc2V0PTApOgorICAgICAgICByZXR1cm4gZXJyb3IobXNnLCBzZWxmLnN0cmluZywgc2VsZi50ZWxsKCkgLSBvZmZzZXQpCiAKICMgVGhlIGZvbGxvd2luZyB0aHJlZSBmdW5jdGlvbnMgYXJlIG5vdCB1c2VkIGluIHRoaXMgbW9kdWxlIGFueW1vcmUsIGJ1dCB3ZSBrZWVwCiAjIHRoZW0gaGVyZSAod2l0aCBEZXByZWNhdGlvbldhcm5pbmdzKSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCkBAIC0yNzAsNyArMzE1LDcgQEAKICAgICBpZiBjb2RlOgogICAgICAgICByZXR1cm4gY29kZQogICAgIGNvZGUgPSBDQVRFR09SSUVTLmdldChlc2NhcGUpCi0gICAgaWYgY29kZSBhbmQgY29kZVswXSA9PSBJTjoKKyAgICBpZiBjb2RlIGFuZCBjb2RlWzBdIGlzIElOOgogICAgICAgICByZXR1cm4gY29kZQogICAgIHRyeToKICAgICAgICAgYyA9IGVzY2FwZVsxOjJdCkBAIC0yNzgsMzMgKzMyMyw0MSBAQAogICAgICAgICAgICAgIyBoZXhhZGVjaW1hbCBlc2NhcGUgKGV4YWN0bHkgdHdvIGRpZ2l0cykKICAgICAgICAgICAgIGVzY2FwZSArPSBzb3VyY2UuZ2V0d2hpbGUoMiwgSEVYRElHSVRTKQogICAgICAgICAgICAgaWYgbGVuKGVzY2FwZSkgIT0gNDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0gICAgICAgICAgICByZXR1cm4gTElURVJBTCwgaW50KGVzY2FwZVsyOl0sIDE2KSAmIDB4ZmYKKyAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoImluY29tcGxldGUgZXNjYXBlICVzIiAlIGVzY2FwZSwgbGVuKGVzY2FwZSkpCisgICAgICAgICAgICByZXR1cm4gTElURVJBTCwgaW50KGVzY2FwZVsyOl0sIDE2KQogICAgICAgICBlbGlmIGMgPT0gInUiIGFuZCBzb3VyY2UuaXN0ZXh0OgogICAgICAgICAgICAgIyB1bmljb2RlIGVzY2FwZSAoZXhhY3RseSBmb3VyIGRpZ2l0cykKICAgICAgICAgICAgIGVzY2FwZSArPSBzb3VyY2UuZ2V0d2hpbGUoNCwgSEVYRElHSVRTKQogICAgICAgICAgICAgaWYgbGVuKGVzY2FwZSkgIT0gNjoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJpbmNvbXBsZXRlIGVzY2FwZSAlcyIgJSBlc2NhcGUsIGxlbihlc2NhcGUpKQogICAgICAgICAgICAgcmV0dXJuIExJVEVSQUwsIGludChlc2NhcGVbMjpdLCAxNikKICAgICAgICAgZWxpZiBjID09ICJVIiBhbmQgc291cmNlLmlzdGV4dDoKICAgICAgICAgICAgICMgdW5pY29kZSBlc2NhcGUgKGV4YWN0bHkgZWlnaHQgZGlnaXRzKQogICAgICAgICAgICAgZXNjYXBlICs9IHNvdXJjZS5nZXR3aGlsZSg4LCBIRVhESUdJVFMpCiAgICAgICAgICAgICBpZiBsZW4oZXNjYXBlKSAhPSAxMDoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJpbmNvbXBsZXRlIGVzY2FwZSAlcyIgJSBlc2NhcGUsIGxlbihlc2NhcGUpKQogICAgICAgICAgICAgYyA9IGludChlc2NhcGVbMjpdLCAxNikKICAgICAgICAgICAgIGNocihjKSAjIHJhaXNlIFZhbHVlRXJyb3IgZm9yIGludmFsaWQgY29kZQogICAgICAgICAgICAgcmV0dXJuIExJVEVSQUwsIGMKICAgICAgICAgZWxpZiBjIGluIE9DVERJR0lUUzoKICAgICAgICAgICAgICMgb2N0YWwgZXNjYXBlICh1cCB0byB0aHJlZSBkaWdpdHMpCiAgICAgICAgICAgICBlc2NhcGUgKz0gc291cmNlLmdldHdoaWxlKDIsIE9DVERJR0lUUykKLSAgICAgICAgICAgIHJldHVybiBMSVRFUkFMLCBpbnQoZXNjYXBlWzE6XSwgOCkgJiAweGZmCisgICAgICAgICAgICBjID0gaW50KGVzY2FwZVsxOl0sIDgpCisgICAgICAgICAgICBpZiBjID4gMG8zNzc6CisgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCdvY3RhbCBlc2NhcGUgdmFsdWUgJXMgb3V0c2lkZSBvZiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyYW5nZSAwLTBvMzc3JyAlIGVzY2FwZSwgbGVuKGVzY2FwZSkpCisgICAgICAgICAgICByZXR1cm4gTElURVJBTCwgYwogICAgICAgICBlbGlmIGMgaW4gRElHSVRTOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgogICAgICAgICBpZiBsZW4oZXNjYXBlKSA9PSAyOgorICAgICAgICAgICAgaWYgYyBpbiBBU0NJSUxFVFRFUlM6CisgICAgICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignYmFkIGVzY2FwZSAlcycgJSBlc2NhcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9OCkKICAgICAgICAgICAgIHJldHVybiBMSVRFUkFMLCBvcmQoZXNjYXBlWzFdKQogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICBwYXNzCi0gICAgcmFpc2UgZXJyb3IoImJvZ3VzIGVzY2FwZTogJXMiICUgcmVwcihlc2NhcGUpKQorICAgIHJhaXNlIHNvdXJjZS5lcnJvcigiYmFkIGVzY2FwZSAlcyIgJSBlc2NhcGUsIGxlbihlc2NhcGUpKQogCiBkZWYgX2VzY2FwZShzb3VyY2UsIGVzY2FwZSwgc3RhdGUpOgogICAgICMgaGFuZGxlIGVzY2FwZSBjb2RlIGluIGV4cHJlc3Npb24KQEAgLTMyMCw2OSArMzczLDcwIEBACiAgICAgICAgICAgICAjIGhleGFkZWNpbWFsIGVzY2FwZQogICAgICAgICAgICAgZXNjYXBlICs9IHNvdXJjZS5nZXR3aGlsZSgyLCBIRVhESUdJVFMpCiAgICAgICAgICAgICBpZiBsZW4oZXNjYXBlKSAhPSA0OgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgICAgIHJldHVybiBMSVRFUkFMLCBpbnQoZXNjYXBlWzI6XSwgMTYpICYgMHhmZgorICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcigiaW5jb21wbGV0ZSBlc2NhcGUgJXMiICUgZXNjYXBlLCBsZW4oZXNjYXBlKSkKKyAgICAgICAgICAgIHJldHVybiBMSVRFUkFMLCBpbnQoZXNjYXBlWzI6XSwgMTYpCiAgICAgICAgIGVsaWYgYyA9PSAidSIgYW5kIHNvdXJjZS5pc3RleHQ6CiAgICAgICAgICAgICAjIHVuaWNvZGUgZXNjYXBlIChleGFjdGx5IGZvdXIgZGlnaXRzKQogICAgICAgICAgICAgZXNjYXBlICs9IHNvdXJjZS5nZXR3aGlsZSg0LCBIRVhESUdJVFMpCiAgICAgICAgICAgICBpZiBsZW4oZXNjYXBlKSAhPSA2OgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoImluY29tcGxldGUgZXNjYXBlICVzIiAlIGVzY2FwZSwgbGVuKGVzY2FwZSkpCiAgICAgICAgICAgICByZXR1cm4gTElURVJBTCwgaW50KGVzY2FwZVsyOl0sIDE2KQogICAgICAgICBlbGlmIGMgPT0gIlUiIGFuZCBzb3VyY2UuaXN0ZXh0OgogICAgICAgICAgICAgIyB1bmljb2RlIGVzY2FwZSAoZXhhY3RseSBlaWdodCBkaWdpdHMpCiAgICAgICAgICAgICBlc2NhcGUgKz0gc291cmNlLmdldHdoaWxlKDgsIEhFWERJR0lUUykKICAgICAgICAgICAgIGlmIGxlbihlc2NhcGUpICE9IDEwOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoImluY29tcGxldGUgZXNjYXBlICVzIiAlIGVzY2FwZSwgbGVuKGVzY2FwZSkpCiAgICAgICAgICAgICBjID0gaW50KGVzY2FwZVsyOl0sIDE2KQogICAgICAgICAgICAgY2hyKGMpICMgcmFpc2UgVmFsdWVFcnJvciBmb3IgaW52YWxpZCBjb2RlCiAgICAgICAgICAgICByZXR1cm4gTElURVJBTCwgYwogICAgICAgICBlbGlmIGMgPT0gIjAiOgogICAgICAgICAgICAgIyBvY3RhbCBlc2NhcGUKICAgICAgICAgICAgIGVzY2FwZSArPSBzb3VyY2UuZ2V0d2hpbGUoMiwgT0NURElHSVRTKQotICAgICAgICAgICAgcmV0dXJuIExJVEVSQUwsIGludChlc2NhcGVbMTpdLCA4KSAmIDB4ZmYKKyAgICAgICAgICAgIHJldHVybiBMSVRFUkFMLCBpbnQoZXNjYXBlWzE6XSwgOCkKICAgICAgICAgZWxpZiBjIGluIERJR0lUUzoKICAgICAgICAgICAgICMgb2N0YWwgZXNjYXBlICpvciogZGVjaW1hbCBncm91cCByZWZlcmVuY2UgKHNpZ2gpCiAgICAgICAgICAgICBpZiBzb3VyY2UubmV4dCBpbiBESUdJVFM6Ci0gICAgICAgICAgICAgICAgZXNjYXBlID0gZXNjYXBlICsgc291cmNlLmdldCgpCisgICAgICAgICAgICAgICAgZXNjYXBlICs9IHNvdXJjZS5nZXQoKQogICAgICAgICAgICAgICAgIGlmIChlc2NhcGVbMV0gaW4gT0NURElHSVRTIGFuZCBlc2NhcGVbMl0gaW4gT0NURElHSVRTIGFuZAogICAgICAgICAgICAgICAgICAgICBzb3VyY2UubmV4dCBpbiBPQ1RESUdJVFMpOgogICAgICAgICAgICAgICAgICAgICAjIGdvdCB0aHJlZSBvY3RhbCBkaWdpdHM7IHRoaXMgaXMgYW4gb2N0YWwgZXNjYXBlCi0gICAgICAgICAgICAgICAgICAgIGVzY2FwZSA9IGVzY2FwZSArIHNvdXJjZS5nZXQoKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTElURVJBTCwgaW50KGVzY2FwZVsxOl0sIDgpICYgMHhmZgorICAgICAgICAgICAgICAgICAgICBlc2NhcGUgKz0gc291cmNlLmdldCgpCisgICAgICAgICAgICAgICAgICAgIGMgPSBpbnQoZXNjYXBlWzE6XSwgOCkKKyAgICAgICAgICAgICAgICAgICAgaWYgYyA+IDBvMzc3OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCdvY3RhbCBlc2NhcGUgdmFsdWUgJXMgb3V0c2lkZSBvZiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhbmdlIDAtMG8zNzcnICUgZXNjYXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihlc2NhcGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTElURVJBTCwgYwogICAgICAgICAgICAgIyBub3QgYW4gb2N0YWwgZXNjYXBlLCBzbyB0aGlzIGlzIGEgZ3JvdXAgcmVmZXJlbmNlCiAgICAgICAgICAgICBncm91cCA9IGludChlc2NhcGVbMTpdKQogICAgICAgICAgICAgaWYgZ3JvdXAgPCBzdGF0ZS5ncm91cHM6CiAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXRlLmNoZWNrZ3JvdXAoZ3JvdXApOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiY2Fubm90IHJlZmVyIHRvIG9wZW4gZ3JvdXAiKQotICAgICAgICAgICAgICAgIGlmIHN0YXRlLmxvb2tiZWhpbmQ6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncwotICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCdncm91cCByZWZlcmVuY2VzIGluIGxvb2tiZWhpbmQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3NlcnRpb25zIGFyZSBub3Qgc3VwcG9ydGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJjYW5ub3QgcmVmZXIgdG8gYW4gb3BlbiBncm91cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZXNjYXBlKSkKKyAgICAgICAgICAgICAgICBzdGF0ZS5jaGVja2xvb2tiZWhpbmRncm91cChncm91cCwgc291cmNlKQogICAgICAgICAgICAgICAgIHJldHVybiBHUk9VUFJFRiwgZ3JvdXAKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcigiaW52YWxpZCBncm91cCByZWZlcmVuY2UiLCBsZW4oZXNjYXBlKSkKICAgICAgICAgaWYgbGVuKGVzY2FwZSkgPT0gMjoKKyAgICAgICAgICAgIGlmIGMgaW4gQVNDSUlMRVRURVJTOgorICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ2JhZCBlc2NhcGUgJXMnICUgZXNjYXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTgpCiAgICAgICAgICAgICByZXR1cm4gTElURVJBTCwgb3JkKGVzY2FwZVsxXSkKICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgcGFzcwotICAgIHJhaXNlIGVycm9yKCJib2d1cyBlc2NhcGU6ICVzIiAlIHJlcHIoZXNjYXBlKSkKKyAgICByYWlzZSBzb3VyY2UuZXJyb3IoImJhZCBlc2NhcGUgJXMiICUgZXNjYXBlLCBsZW4oZXNjYXBlKSkKIAotZGVmIF9wYXJzZV9zdWIoc291cmNlLCBzdGF0ZSwgbmVzdGVkPTEpOgorZGVmIF9wYXJzZV9zdWIoc291cmNlLCBzdGF0ZSwgbmVzdGVkPVRydWUpOgogICAgICMgcGFyc2UgYW4gYWx0ZXJuYXRpb246IGF8YnxjCiAKICAgICBpdGVtcyA9IFtdCiAgICAgaXRlbXNhcHBlbmQgPSBpdGVtcy5hcHBlbmQKICAgICBzb3VyY2VtYXRjaCA9IHNvdXJjZS5tYXRjaAotICAgIHdoaWxlIDE6CisgICAgc3RhcnQgPSBzb3VyY2UudGVsbCgpCisgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgaXRlbXNhcHBlbmQoX3BhcnNlKHNvdXJjZSwgc3RhdGUpKQotICAgICAgICBpZiBzb3VyY2VtYXRjaCgifCIpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgbm90IG5lc3RlZDoKKyAgICAgICAgaWYgbm90IHNvdXJjZW1hdGNoKCJ8Iik6CiAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3Qgc291cmNlLm5leHQgb3Igc291cmNlbWF0Y2goIikiLCAwKToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBlcnJvcigicGF0dGVybiBub3QgcHJvcGVybHkgY2xvc2VkIikKIAogICAgIGlmIGxlbihpdGVtcykgPT0gMToKICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdCkBAIC0zOTEsNyArNDQ1LDcgQEAKICAgICBzdWJwYXR0ZXJuYXBwZW5kID0gc3VicGF0dGVybi5hcHBlbmQKIAogICAgICMgY2hlY2sgaWYgYWxsIGl0ZW1zIHNoYXJlIGEgY29tbW9uIHByZWZpeAotICAgIHdoaWxlIDE6CisgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgcHJlZml4ID0gTm9uZQogICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKICAgICAgICAgICAgIGlmIG5vdCBpdGVtOgpAQCAtNDExLDE2ICs0NjUsMTIgQEAKIAogICAgICMgY2hlY2sgaWYgdGhlIGJyYW5jaCBjYW4gYmUgcmVwbGFjZWQgYnkgYSBjaGFyYWN0ZXIgc2V0CiAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6Ci0gICAgICAgIGlmIGxlbihpdGVtKSAhPSAxIG9yIGl0ZW1bMF1bMF0gIT0gTElURVJBTDoKKyAgICAgICAgaWYgbGVuKGl0ZW0pICE9IDEgb3IgaXRlbVswXVswXSBpcyBub3QgTElURVJBTDoKICAgICAgICAgICAgIGJyZWFrCiAgICAgZWxzZToKICAgICAgICAgIyB3ZSBjYW4gc3RvcmUgdGhpcyBhcyBhIGNoYXJhY3RlciBzZXQgaW5zdGVhZCBvZiBhCiAgICAgICAgICMgYnJhbmNoICh0aGUgY29tcGlsZXIgbWF5IG9wdGltaXplIHRoaXMgZXZlbiBtb3JlKQotICAgICAgICBzZXQgPSBbXQotICAgICAgICBzZXRhcHBlbmQgPSBzZXQuYXBwZW5kCi0gICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgotICAgICAgICAgICAgc2V0YXBwZW5kKGl0ZW1bMF0pCi0gICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKElOLCBzZXQpKQorICAgICAgICBzdWJwYXR0ZXJuYXBwZW5kKChJTiwgW2l0ZW1bMF0gZm9yIGl0ZW0gaW4gaXRlbXNdKSkKICAgICAgICAgcmV0dXJuIHN1YnBhdHRlcm4KIAogICAgIHN1YnBhdHRlcm4uYXBwZW5kKChCUkFOQ0gsIChOb25lLCBpdGVtcykpKQpAQCAtNDMwLDIxICs0ODAsMTQgQEAKICAgICBpdGVtX3llcyA9IF9wYXJzZShzb3VyY2UsIHN0YXRlKQogICAgIGlmIHNvdXJjZS5tYXRjaCgifCIpOgogICAgICAgICBpdGVtX25vID0gX3BhcnNlKHNvdXJjZSwgc3RhdGUpCi0gICAgICAgIGlmIHNvdXJjZS5tYXRjaCgifCIpOgotICAgICAgICAgICAgcmFpc2UgZXJyb3IoImNvbmRpdGlvbmFsIGJhY2tyZWYgd2l0aCBtb3JlIHRoYW4gdHdvIGJyYW5jaGVzIikKKyAgICAgICAgaWYgc291cmNlLm5leHQgPT0gInwiOgorICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJjb25kaXRpb25hbCBiYWNrcmVmIHdpdGggbW9yZSB0aGFuIHR3byBicmFuY2hlcyIpCiAgICAgZWxzZToKICAgICAgICAgaXRlbV9ubyA9IE5vbmUKLSAgICBpZiBzb3VyY2UubmV4dCBhbmQgbm90IHNvdXJjZS5tYXRjaCgiKSIsIDApOgotICAgICAgICByYWlzZSBlcnJvcigicGF0dGVybiBub3QgcHJvcGVybHkgY2xvc2VkIikKICAgICBzdWJwYXR0ZXJuID0gU3ViUGF0dGVybihzdGF0ZSkKICAgICBzdWJwYXR0ZXJuLmFwcGVuZCgoR1JPVVBSRUZfRVhJU1RTLCAoY29uZGdyb3VwLCBpdGVtX3llcywgaXRlbV9ubykpKQogICAgIHJldHVybiBzdWJwYXR0ZXJuCiAKLV9QQVRURVJORU5ERVJTID0gc2V0KCJ8KSIpCi1fQVNTRVJUQ0hBUlMgPSBzZXQoIj0hPCIpCi1fTE9PS0JFSElOREFTU0VSVENIQVJTID0gc2V0KCI9ISIpCi1fUkVQRUFUQ09ERVMgPSBzZXQoW01JTl9SRVBFQVQsIE1BWF9SRVBFQVRdKQotCiBkZWYgX3BhcnNlKHNvdXJjZSwgc3RhdGUpOgogICAgICMgcGFyc2UgYSBzaW1wbGUgcGF0dGVybgogICAgIHN1YnBhdHRlcm4gPSBTdWJQYXR0ZXJuKHN0YXRlKQpAQCAtNDU0LDM0ICs0OTcsMzggQEAKICAgICBzb3VyY2VnZXQgPSBzb3VyY2UuZ2V0CiAgICAgc291cmNlbWF0Y2ggPSBzb3VyY2UubWF0Y2gKICAgICBfbGVuID0gbGVuCi0gICAgUEFUVEVSTkVOREVSUyA9IF9QQVRURVJORU5ERVJTCi0gICAgQVNTRVJUQ0hBUlMgPSBfQVNTRVJUQ0hBUlMKLSAgICBMT09LQkVISU5EQVNTRVJUQ0hBUlMgPSBfTE9PS0JFSElOREFTU0VSVENIQVJTCi0gICAgUkVQRUFUQ09ERVMgPSBfUkVQRUFUQ09ERVMKKyAgICBfb3JkID0gb3JkCisgICAgdmVyYm9zZSA9IHN0YXRlLmZsYWdzICYgU1JFX0ZMQUdfVkVSQk9TRQogCi0gICAgd2hpbGUgMToKKyAgICB3aGlsZSBUcnVlOgogCi0gICAgICAgIGlmIHNvdXJjZS5uZXh0IGluIFBBVFRFUk5FTkRFUlM6Ci0gICAgICAgICAgICBicmVhayAjIGVuZCBvZiBzdWJwYXR0ZXJuCi0gICAgICAgIHRoaXMgPSBzb3VyY2VnZXQoKQorICAgICAgICB0aGlzID0gc291cmNlLm5leHQKICAgICAgICAgaWYgdGhpcyBpcyBOb25lOgogICAgICAgICAgICAgYnJlYWsgIyBlbmQgb2YgcGF0dGVybgorICAgICAgICBpZiB0aGlzIGluICJ8KSI6CisgICAgICAgICAgICBicmVhayAjIGVuZCBvZiBzdWJwYXR0ZXJuCisgICAgICAgIHNvdXJjZWdldCgpCiAKLSAgICAgICAgaWYgc3RhdGUuZmxhZ3MgJiBTUkVfRkxBR19WRVJCT1NFOgorICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgIyBza2lwIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzCiAgICAgICAgICAgICBpZiB0aGlzIGluIFdISVRFU1BBQ0U6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIHRoaXMgPT0gIiMiOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHNvdXJjZWdldCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHRoaXMgaW4gKE5vbmUsICJcbiIpOgorICAgICAgICAgICAgICAgICAgICBpZiB0aGlzIGlzIE5vbmUgb3IgdGhpcyA9PSAiXG4iOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgIGlmIHRoaXMgYW5kIHRoaXNbMF0gbm90IGluIFNQRUNJQUxfQ0hBUlM6Ci0gICAgICAgICAgICBzdWJwYXR0ZXJuYXBwZW5kKChMSVRFUkFMLCBvcmQodGhpcykpKQorICAgICAgICBpZiB0aGlzWzBdID09ICJcXCI6CisgICAgICAgICAgICBjb2RlID0gX2VzY2FwZShzb3VyY2UsIHRoaXMsIHN0YXRlKQorICAgICAgICAgICAgc3VicGF0dGVybmFwcGVuZChjb2RlKQorCisgICAgICAgIGVsaWYgdGhpcyBub3QgaW4gU1BFQ0lBTF9DSEFSUzoKKyAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKExJVEVSQUwsIF9vcmQodGhpcykpKQogCiAgICAgICAgIGVsaWYgdGhpcyA9PSAiWyI6CisgICAgICAgICAgICBoZXJlID0gc291cmNlLnRlbGwoKSAtIDEKICAgICAgICAgICAgICMgY2hhcmFjdGVyIHNldAogICAgICAgICAgICAgc2V0ID0gW10KICAgICAgICAgICAgIHNldGFwcGVuZCA9IHNldC5hcHBlbmQKQEAgLTQ5MSwzOSArNTM4LDQyIEBACiAgICAgICAgICAgICAgICAgc2V0YXBwZW5kKChORUdBVEUsIE5vbmUpKQogICAgICAgICAgICAgIyBjaGVjayByZW1haW5pbmcgY2hhcmFjdGVycwogICAgICAgICAgICAgc3RhcnQgPSBzZXRbOl0KLSAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIHRoaXMgPSBzb3VyY2VnZXQoKQorICAgICAgICAgICAgICAgIGlmIHRoaXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJ1bnRlcm1pbmF0ZWQgY2hhcmFjdGVyIHNldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UudGVsbCgpIC0gaGVyZSkKICAgICAgICAgICAgICAgICBpZiB0aGlzID09ICJdIiBhbmQgc2V0ICE9IHN0YXJ0OgogICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGVsaWYgdGhpcyBhbmQgdGhpc1swXSA9PSAiXFwiOgorICAgICAgICAgICAgICAgIGVsaWYgdGhpc1swXSA9PSAiXFwiOgogICAgICAgICAgICAgICAgICAgICBjb2RlMSA9IF9jbGFzc19lc2NhcGUoc291cmNlLCB0aGlzKQotICAgICAgICAgICAgICAgIGVsaWYgdGhpczoKLSAgICAgICAgICAgICAgICAgICAgY29kZTEgPSBMSVRFUkFMLCBvcmQodGhpcykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW5leHBlY3RlZCBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIikKKyAgICAgICAgICAgICAgICAgICAgY29kZTEgPSBMSVRFUkFMLCBfb3JkKHRoaXMpCiAgICAgICAgICAgICAgICAgaWYgc291cmNlbWF0Y2goIi0iKToKICAgICAgICAgICAgICAgICAgICAgIyBwb3RlbnRpYWwgcmFuZ2UKLSAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHNvdXJjZWdldCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHRoaXMgPT0gIl0iOgorICAgICAgICAgICAgICAgICAgICB0aGF0ID0gc291cmNlZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhhdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJ1bnRlcm1pbmF0ZWQgY2hhcmFjdGVyIHNldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnRlbGwoKSAtIGhlcmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRoYXQgPT0gIl0iOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZTFbMF0gaXMgSU46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSBjb2RlMVsxXVswXQogICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXBwZW5kKGNvZGUxKQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXBwZW5kKChMSVRFUkFMLCBvcmQoIi0iKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRhcHBlbmQoKExJVEVSQUwsIF9vcmQoIi0iKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBlbGlmIHRoaXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGlzWzBdID09ICJcXCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTIgPSBfY2xhc3NfZXNjYXBlKHNvdXJjZSwgdGhpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTIgPSBMSVRFUkFMLCBvcmQodGhpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGUxWzBdICE9IExJVEVSQUwgb3IgY29kZTJbMF0gIT0gTElURVJBTDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiYmFkIGNoYXJhY3RlciByYW5nZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICBsbyA9IGNvZGUxWzFdCi0gICAgICAgICAgICAgICAgICAgICAgICBoaSA9IGNvZGUyWzFdCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBoaSA8IGxvOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJiYWQgY2hhcmFjdGVyIHJhbmdlIikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldGFwcGVuZCgoUkFOR0UsIChsbywgaGkpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhhdFswXSA9PSAiXFwiOgorICAgICAgICAgICAgICAgICAgICAgICAgY29kZTIgPSBfY2xhc3NfZXNjYXBlKHNvdXJjZSwgdGhhdCkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmV4cGVjdGVkIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iKQorICAgICAgICAgICAgICAgICAgICAgICAgY29kZTIgPSBMSVRFUkFMLCBfb3JkKHRoYXQpCisgICAgICAgICAgICAgICAgICAgIGlmIGNvZGUxWzBdICE9IExJVEVSQUwgb3IgY29kZTJbMF0gIT0gTElURVJBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJiYWQgY2hhcmFjdGVyIHJhbmdlICVzLSVzIiAlICh0aGlzLCB0aGF0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKG1zZywgbGVuKHRoaXMpICsgMSArIGxlbih0aGF0KSkKKyAgICAgICAgICAgICAgICAgICAgbG8gPSBjb2RlMVsxXQorICAgICAgICAgICAgICAgICAgICBoaSA9IGNvZGUyWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIGhpIDwgbG86CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAiYmFkIGNoYXJhY3RlciByYW5nZSAlcy0lcyIgJSAodGhpcywgdGhhdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcihtc2csIGxlbih0aGlzKSArIDEgKyBsZW4odGhhdCkpCisgICAgICAgICAgICAgICAgICAgIHNldGFwcGVuZCgoUkFOR0UsIChsbywgaGkpKSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpZiBjb2RlMVswXSBpcyBJTjoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gY29kZTFbMV1bMF0KQEAgLTUzOCw4ICs1ODgsOSBAQAogICAgICAgICAgICAgICAgICMgWFhYOiA8Zmw+IHNob3VsZCBhZGQgY2hhcm1hcCBvcHRpbWl6YXRpb24gaGVyZQogICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKElOLCBzZXQpKQogCi0gICAgICAgIGVsaWYgdGhpcyBhbmQgdGhpc1swXSBpbiBSRVBFQVRfQ0hBUlM6CisgICAgICAgIGVsaWYgdGhpcyBpbiBSRVBFQVRfQ0hBUlM6CiAgICAgICAgICAgICAjIHJlcGVhdCBwcmV2aW91cyBpdGVtCisgICAgICAgICAgICBoZXJlID0gc291cmNlLnRlbGwoKQogICAgICAgICAgICAgaWYgdGhpcyA9PSAiPyI6CiAgICAgICAgICAgICAgICAgbWluLCBtYXggPSAwLCAxCiAgICAgICAgICAgICBlbGlmIHRoaXMgPT0gIioiOgpAQCAtNTQ5LDIwICs2MDAsMTkgQEAKICAgICAgICAgICAgICAgICBtaW4sIG1heCA9IDEsIE1BWFJFUEVBVAogICAgICAgICAgICAgZWxpZiB0aGlzID09ICJ7IjoKICAgICAgICAgICAgICAgICBpZiBzb3VyY2UubmV4dCA9PSAifSI6Ci0gICAgICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKExJVEVSQUwsIG9yZCh0aGlzKSkpCisgICAgICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKExJVEVSQUwsIF9vcmQodGhpcykpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGhlcmUgPSBzb3VyY2UudGVsbCgpCiAgICAgICAgICAgICAgICAgbWluLCBtYXggPSAwLCBNQVhSRVBFQVQKICAgICAgICAgICAgICAgICBsbyA9IGhpID0gIiIKICAgICAgICAgICAgICAgICB3aGlsZSBzb3VyY2UubmV4dCBpbiBESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIGxvID0gbG8gKyBzb3VyY2UuZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgbG8gKz0gc291cmNlZ2V0KCkKICAgICAgICAgICAgICAgICBpZiBzb3VyY2VtYXRjaCgiLCIpOgogICAgICAgICAgICAgICAgICAgICB3aGlsZSBzb3VyY2UubmV4dCBpbiBESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBoaSA9IGhpICsgc291cmNlZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpICs9IHNvdXJjZWdldCgpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgaGkgPSBsbwogICAgICAgICAgICAgICAgIGlmIG5vdCBzb3VyY2VtYXRjaCgifSIpOgotICAgICAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuYXBwZW5kKChMSVRFUkFMLCBvcmQodGhpcykpKQorICAgICAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuYXBwZW5kKChMSVRFUkFMLCBfb3JkKHRoaXMpKSkKICAgICAgICAgICAgICAgICAgICAgc291cmNlLnNlZWsoaGVyZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBpZiBsbzoKQEAgLTU3NCwxOCArNjI0LDIxIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG1heCA+PSBNQVhSRVBFQVQ6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJ0aGUgcmVwZXRpdGlvbiBudW1iZXIgaXMgdG9vIGxhcmdlIikKICAgICAgICAgICAgICAgICAgICAgaWYgbWF4IDwgbWluOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoImJhZCByZXBlYXQgaW50ZXJ2YWwiKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJtaW4gcmVwZWF0IGdyZWF0ZXIgdGhhbiBtYXggcmVwZWF0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UudGVsbCgpIC0gaGVyZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoIm5vdCBzdXBwb3J0ZWQiKQorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ1bnN1cHBvcnRlZCBxdWFudGlmaWVyICVyIiAlIChjaGFyLCkpCiAgICAgICAgICAgICAjIGZpZ3VyZSBvdXQgd2hpY2ggaXRlbSB0byByZXBlYXQKICAgICAgICAgICAgIGlmIHN1YnBhdHRlcm46CiAgICAgICAgICAgICAgICAgaXRlbSA9IHN1YnBhdHRlcm5bLTE6XQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpdGVtID0gTm9uZQotICAgICAgICAgICAgaWYgbm90IGl0ZW0gb3IgKF9sZW4oaXRlbSkgPT0gMSBhbmQgaXRlbVswXVswXSA9PSBBVCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoIm5vdGhpbmcgdG8gcmVwZWF0IikKLSAgICAgICAgICAgIGlmIGl0ZW1bMF1bMF0gaW4gUkVQRUFUQ09ERVM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoIm11bHRpcGxlIHJlcGVhdCIpCisgICAgICAgICAgICBpZiBub3QgaXRlbSBvciAoX2xlbihpdGVtKSA9PSAxIGFuZCBpdGVtWzBdWzBdIGlzIEFUKToKKyAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoIm5vdGhpbmcgdG8gcmVwZWF0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnRlbGwoKSAtIGhlcmUgKyBsZW4odGhpcykpCisgICAgICAgICAgICBpZiBpdGVtWzBdWzBdIGluIF9SRVBFQVRDT0RFUzoKKyAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoIm11bHRpcGxlIHJlcGVhdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS50ZWxsKCkgLSBoZXJlICsgbGVuKHRoaXMpKQogICAgICAgICAgICAgaWYgc291cmNlbWF0Y2goIj8iKToKICAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuWy0xXSA9IChNSU5fUkVQRUFULCAobWluLCBtYXgsIGl0ZW0pKQogICAgICAgICAgICAgZWxzZToKQEAgLTU5NSwxNTAgKzY0OCwxNDAgQEAKICAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKEFOWSwgTm9uZSkpCiAKICAgICAgICAgZWxpZiB0aGlzID09ICIoIjoKLSAgICAgICAgICAgIGdyb3VwID0gMQorICAgICAgICAgICAgc3RhcnQgPSBzb3VyY2UudGVsbCgpIC0gMQorICAgICAgICAgICAgZ3JvdXAgPSBUcnVlCiAgICAgICAgICAgICBuYW1lID0gTm9uZQogICAgICAgICAgICAgY29uZGdyb3VwID0gTm9uZQogICAgICAgICAgICAgaWYgc291cmNlbWF0Y2goIj8iKToKLSAgICAgICAgICAgICAgICBncm91cCA9IDAKICAgICAgICAgICAgICAgICAjIG9wdGlvbnMKLSAgICAgICAgICAgICAgICBpZiBzb3VyY2VtYXRjaCgiUCIpOgorICAgICAgICAgICAgICAgIGNoYXIgPSBzb3VyY2VnZXQoKQorICAgICAgICAgICAgICAgIGlmIGNoYXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJ1bmV4cGVjdGVkIGVuZCBvZiBwYXR0ZXJuIikKKyAgICAgICAgICAgICAgICBpZiBjaGFyID09ICJQIjoKICAgICAgICAgICAgICAgICAgICAgIyBweXRob24gZXh0ZW5zaW9ucwogICAgICAgICAgICAgICAgICAgICBpZiBzb3VyY2VtYXRjaCgiPCIpOgogICAgICAgICAgICAgICAgICAgICAgICAgIyBuYW1lZCBncm91cDogc2tpcCBmb3J3YXJkIHRvIGVuZCBvZiBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gIiIKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9IHNvdXJjZWdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW50ZXJtaW5hdGVkIG5hbWUiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgPT0gIj4iOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmFtZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigibWlzc2luZyBncm91cCBuYW1lIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzb3VyY2UuZ2V0dW50aWwoIj4iKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5hbWUuaXNpZGVudGlmaWVyKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoImJhZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSAlciIgJSBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJXIiICUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcihtc2csIGxlbihuYW1lKSArIDEpCiAgICAgICAgICAgICAgICAgICAgIGVsaWYgc291cmNlbWF0Y2goIj0iKToKICAgICAgICAgICAgICAgICAgICAgICAgICMgbmFtZWQgYmFja3JlZmVyZW5jZQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICIiCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzb3VyY2VnZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVudGVybWluYXRlZCBuYW1lIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyID09ICIpIjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSArIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJtaXNzaW5nIGdyb3VwIG5hbWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNvdXJjZS5nZXR1bnRpbCgiKSIpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmFtZS5pc2lkZW50aWZpZXIoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiYmFkIGNoYXJhY3RlciBpbiBiYWNrcmVmIGdyb3VwIG5hbWUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlciIgJSBuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJXIiICUgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcihtc2csIGxlbihuYW1lKSArIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICBnaWQgPSBzdGF0ZS5ncm91cGRpY3QuZ2V0KG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBnaWQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAidW5rbm93biBncm91cCBuYW1lOiB7MCFyfSIuZm9ybWF0KG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IobXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RhdGUubG9va2JlaGluZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCdncm91cCByZWZlcmVuY2VzIGluIGxvb2tiZWhpbmQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2VydGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInVua25vd24gZ3JvdXAgbmFtZSAlciIgJSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKG1zZywgbGVuKG5hbWUpICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0ZS5jaGVja2dyb3VwKGdpZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJjYW5ub3QgcmVmZXIgdG8gYW4gb3BlbiBncm91cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVja2xvb2tiZWhpbmRncm91cChnaWQsIHNvdXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKEdST1VQUkVGLCBnaWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzb3VyY2VnZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmV4cGVjdGVkIGVuZCBvZiBwYXR0ZXJuIikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmtub3duIHNwZWNpZmllcjogP1AlcyIgJSBjaGFyKQotICAgICAgICAgICAgICAgIGVsaWYgc291cmNlbWF0Y2goIjoiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoInVuZXhwZWN0ZWQgZW5kIG9mIHBhdHRlcm4iKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJ1bmtub3duIGV4dGVuc2lvbiA/UCIgKyBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihjaGFyKSArIDIpCisgICAgICAgICAgICAgICAgZWxpZiBjaGFyID09ICI6IjoKICAgICAgICAgICAgICAgICAgICAgIyBub24tY2FwdHVyaW5nIGdyb3VwCi0gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gMgotICAgICAgICAgICAgICAgIGVsaWYgc291cmNlbWF0Y2goIiMiKToKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBOb25lCisgICAgICAgICAgICAgICAgZWxpZiBjaGFyID09ICIjIjoKICAgICAgICAgICAgICAgICAgICAgIyBjb21tZW50Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzb3VyY2UubmV4dCBpcyBOb25lIG9yIHNvdXJjZS5uZXh0ID09ICIpIjoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNvdXJjZS5uZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJtaXNzaW5nICksIHVudGVybWluYXRlZCBjb21tZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnRlbGwoKSAtIHN0YXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc291cmNlZ2V0KCkgPT0gIikiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VnZXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc291cmNlbWF0Y2goIikiKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmJhbGFuY2VkIHBhcmVudGhlc2lzIikKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBlbGlmIHNvdXJjZS5uZXh0IGluIEFTU0VSVENIQVJTOgorICAgICAgICAgICAgICAgIGVsaWYgY2hhciBpbiAiPSE8IjoKICAgICAgICAgICAgICAgICAgICAgIyBsb29rYWhlYWQgYXNzZXJ0aW9ucwotICAgICAgICAgICAgICAgICAgICBjaGFyID0gc291cmNlZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgZGlyID0gMQogICAgICAgICAgICAgICAgICAgICBpZiBjaGFyID09ICI8IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNvdXJjZS5uZXh0IG5vdCBpbiBMT09LQkVISU5EQVNTRVJUQ0hBUlM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInN5bnRheCBlcnJvciIpCi0gICAgICAgICAgICAgICAgICAgICAgICBkaXIgPSAtMSAjIGxvb2tiZWhpbmQKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzb3VyY2VnZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubG9va2JlaGluZCArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJ1bmV4cGVjdGVkIGVuZCBvZiBwYXR0ZXJuIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgbm90IGluICI9ISI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJ1bmtub3duIGV4dGVuc2lvbiA/PCIgKyBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oY2hhcikgKyAyKQorICAgICAgICAgICAgICAgICAgICAgICAgZGlyID0gLTEgIyBsb29rYmVoaW5kCisgICAgICAgICAgICAgICAgICAgICAgICBsb29rYmVoaW5kZ3JvdXBzID0gc3RhdGUubG9va2JlaGluZGdyb3VwcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9va2JlaGluZGdyb3VwcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxvb2tiZWhpbmRncm91cHMgPSBzdGF0ZS5ncm91cHMKICAgICAgICAgICAgICAgICAgICAgcCA9IF9wYXJzZV9zdWIoc291cmNlLCBzdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgaWYgZGlyIDwgMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxvb2tiZWhpbmQgLT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9va2JlaGluZGdyb3VwcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxvb2tiZWhpbmRncm91cHMgPSBOb25lCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzb3VyY2VtYXRjaCgiKSIpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVuYmFsYW5jZWQgcGFyZW50aGVzaXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJtaXNzaW5nICksIHVudGVybWluYXRlZCBzdWJwYXR0ZXJuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UudGVsbCgpIC0gc3RhcnQpCiAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgPT0gIj0iOgogICAgICAgICAgICAgICAgICAgICAgICAgc3VicGF0dGVybmFwcGVuZCgoQVNTRVJULCAoZGlyLCBwKSkpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwYXR0ZXJuYXBwZW5kKChBU1NFUlRfTk9ULCAoZGlyLCBwKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgZWxpZiBzb3VyY2VtYXRjaCgiKCIpOgorICAgICAgICAgICAgICAgIGVsaWYgY2hhciA9PSAiKCI6CiAgICAgICAgICAgICAgICAgICAgICMgY29uZGl0aW9uYWwgYmFja3JlZmVyZW5jZSBncm91cAotICAgICAgICAgICAgICAgICAgICBjb25kbmFtZSA9ICIiCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyID0gc291cmNlZ2V0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW50ZXJtaW5hdGVkIG5hbWUiKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciA9PSAiKSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRuYW1lID0gY29uZG5hbWUgKyBjaGFyCi0gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gMgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgY29uZG5hbWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigibWlzc2luZyBncm91cCBuYW1lIikKKyAgICAgICAgICAgICAgICAgICAgY29uZG5hbWUgPSBzb3VyY2UuZ2V0dW50aWwoIikiKQorICAgICAgICAgICAgICAgICAgICBncm91cCA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgaWYgY29uZG5hbWUuaXNpZGVudGlmaWVyKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25kZ3JvdXAgPSBzdGF0ZS5ncm91cGRpY3QuZ2V0KGNvbmRuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29uZGdyb3VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInVua25vd24gZ3JvdXAgbmFtZTogezAhcn0iLmZvcm1hdChjb25kbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcihtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInVua25vd24gZ3JvdXAgbmFtZSAlciIgJSBjb25kbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcihtc2csIGxlbihjb25kbmFtZSkgKyAxKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRncm91cCA9IGludChjb25kbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb25kZ3JvdXAgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiYmFkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIikKLSAgICAgICAgICAgICAgICAgICAgaWYgc3RhdGUubG9va2JlaGluZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncwotICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignZ3JvdXAgcmVmZXJlbmNlcyBpbiBsb29rYmVoaW5kICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2VydGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKLSAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJXIiICUgY29uZG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IobXNnLCBsZW4oY29uZG5hbWUpICsgMSkgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgY29uZGdyb3VwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcigiYmFkIGdyb3VwIG51bWJlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihjb25kbmFtZSkgKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29uZGdyb3VwID49IE1BWEdST1VQUzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoImludmFsaWQgZ3JvdXAgcmVmZXJlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGNvbmRuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrbG9va2JlaGluZGdyb3VwKGNvbmRncm91cCwgc291cmNlKQorICAgICAgICAgICAgICAgIGVsaWYgY2hhciBpbiBGTEFHUzoKICAgICAgICAgICAgICAgICAgICAgIyBmbGFncwotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc291cmNlLm5leHQgaW4gRkxBR1M6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW5leHBlY3RlZCBlbmQgb2YgcGF0dGVybiIpCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIHNvdXJjZS5uZXh0IGluIEZMQUdTOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MgPSBzdGF0ZS5mbGFncyB8IEZMQUdTW3NvdXJjZWdldCgpXQotICAgICAgICAgICAgaWYgZ3JvdXA6Ci0gICAgICAgICAgICAgICAgIyBwYXJzZSBncm91cCBjb250ZW50cwotICAgICAgICAgICAgICAgIGlmIGdyb3VwID09IDI6Ci0gICAgICAgICAgICAgICAgICAgICMgYW5vbnltb3VzIGdyb3VwCi0gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gTm9uZQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MgfD0gRkxBR1NbY2hhcl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzb3VyY2VnZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcigibWlzc2luZyApIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgPT0gIikiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyIG5vdCBpbiBGTEFHUzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBzb3VyY2UuZXJyb3IoInVua25vd24gZmxhZyIsIGxlbihjaGFyKSkKKyAgICAgICAgICAgICAgICAgICAgdmVyYm9zZSA9IHN0YXRlLmZsYWdzICYgU1JFX0ZMQUdfVkVSQk9TRQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcigidW5rbm93biBleHRlbnNpb24gPyIgKyBjaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGNoYXIpICsgMSkKKworICAgICAgICAgICAgIyBwYXJzZSBncm91cCBjb250ZW50cworICAgICAgICAgICAgaWYgZ3JvdXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBncm91cCA9IHN0YXRlLm9wZW5ncm91cChuYW1lKQotICAgICAgICAgICAgICAgIGlmIGNvbmRncm91cDoKLSAgICAgICAgICAgICAgICAgICAgcCA9IF9wYXJzZV9zdWJfY29uZChzb3VyY2UsIHN0YXRlLCBjb25kZ3JvdXApCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcCA9IF9wYXJzZV9zdWIoc291cmNlLCBzdGF0ZSkKLSAgICAgICAgICAgICAgICBpZiBub3Qgc291cmNlbWF0Y2goIikiKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVuYmFsYW5jZWQgcGFyZW50aGVzaXMiKQotICAgICAgICAgICAgICAgIGlmIGdyb3VwIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jbG9zZWdyb3VwKGdyb3VwKQotICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKFNVQlBBVFRFUk4sIChncm91cCwgcCkpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBlcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcihlcnIubXNnLCBsZW4obmFtZSkgKyAxKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIGlmIGNvbmRncm91cDoKKyAgICAgICAgICAgICAgICBwID0gX3BhcnNlX3N1Yl9jb25kKHNvdXJjZSwgc3RhdGUsIGNvbmRncm91cCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgY2hhciA9IHNvdXJjZWdldCgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmV4cGVjdGVkIGVuZCBvZiBwYXR0ZXJuIikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2hhciA9PSAiKSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW5rbm93biBleHRlbnNpb24iKQorICAgICAgICAgICAgICAgIHAgPSBfcGFyc2Vfc3ViKHNvdXJjZSwgc3RhdGUpCisgICAgICAgICAgICBpZiBub3Qgc291cmNlLm1hdGNoKCIpIik6CisgICAgICAgICAgICAgICAgcmFpc2Ugc291cmNlLmVycm9yKCJtaXNzaW5nICksIHVudGVybWluYXRlZCBzdWJwYXR0ZXJuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnRlbGwoKSAtIHN0YXJ0KQorICAgICAgICAgICAgaWYgZ3JvdXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhdGUuY2xvc2Vncm91cChncm91cCwgcCkKKyAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKFNVQlBBVFRFUk4sIChncm91cCwgcCkpKQogCiAgICAgICAgIGVsaWYgdGhpcyA9PSAiXiI6CiAgICAgICAgICAgICBzdWJwYXR0ZXJuYXBwZW5kKChBVCwgQVRfQkVHSU5OSU5HKSkKQEAgLTc0NiwyNSArNzg5LDMxIEBACiAgICAgICAgIGVsaWYgdGhpcyA9PSAiJCI6CiAgICAgICAgICAgICBzdWJwYXR0ZXJuLmFwcGVuZCgoQVQsIEFUX0VORCkpCiAKLSAgICAgICAgZWxpZiB0aGlzIGFuZCB0aGlzWzBdID09ICJcXCI6Ci0gICAgICAgICAgICBjb2RlID0gX2VzY2FwZShzb3VyY2UsIHRoaXMsIHN0YXRlKQotICAgICAgICAgICAgc3VicGF0dGVybmFwcGVuZChjb2RlKQotCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBlcnJvcigicGFyc2VyIGVycm9yIikKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ1bnN1cHBvcnRlZCBzcGVjaWFsIGNoYXJhY3RlciAlciIgJSAoY2hhciwpKQogCiAgICAgcmV0dXJuIHN1YnBhdHRlcm4KIAogZGVmIGZpeF9mbGFncyhzcmMsIGZsYWdzKToKICAgICAjIENoZWNrIGFuZCBmaXggZmxhZ3MgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mIHBhdHRlcm4gKHN0ciBvciBieXRlcykKICAgICBpZiBpc2luc3RhbmNlKHNyYywgc3RyKToKKyAgICAgICAgaWYgZmxhZ3MgJiBTUkVfRkxBR19MT0NBTEU6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIkxPQ0FMRSBmbGFnIHdpdGggYSBzdHIgcGF0dGVybiBpcyBkZXByZWNhdGVkLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJXaWxsIGJlIGFuIGVycm9yIGluIDMuNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD02KQogICAgICAgICBpZiBub3QgZmxhZ3MgJiBTUkVfRkxBR19BU0NJSToKICAgICAgICAgICAgIGZsYWdzIHw9IFNSRV9GTEFHX1VOSUNPREUKICAgICAgICAgZWxpZiBmbGFncyAmIFNSRV9GTEFHX1VOSUNPREU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJBU0NJSSBhbmQgVU5JQ09ERSBmbGFncyBhcmUgaW5jb21wYXRpYmxlIikKICAgICBlbHNlOgogICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX1VOSUNPREU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCB1c2UgVU5JQ09ERSBmbGFnIHdpdGggYSBieXRlcyBwYXR0ZXJuIikKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbm5vdCB1c2UgVU5JQ09ERSBmbGFnIHdpdGggYSBieXRlcyBwYXR0ZXJuIikKKyAgICAgICAgaWYgZmxhZ3MgJiBTUkVfRkxBR19MT0NBTEUgYW5kIGZsYWdzICYgU1JFX0ZMQUdfQVNDSUk6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIkFTQ0lJIGFuZCBMT0NBTEUgZmxhZ3MgYXJlIGluY29tcGF0aWJsZS4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiV2lsbCBiZSBhbiBlcnJvciBpbiAzLjYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9NikKICAgICByZXR1cm4gZmxhZ3MKIAogZGVmIHBhcnNlKHN0ciwgZmxhZ3M9MCwgcGF0dGVybj1Ob25lKToKQEAgLTc4MCwyMCArODI5LDE4IEBACiAgICAgcCA9IF9wYXJzZV9zdWIoc291cmNlLCBwYXR0ZXJuLCAwKQogICAgIHAucGF0dGVybi5mbGFncyA9IGZpeF9mbGFncyhzdHIsIHAucGF0dGVybi5mbGFncykKIAotICAgIHRhaWwgPSBzb3VyY2UuZ2V0KCkKLSAgICBpZiB0YWlsID09ICIpIjoKLSAgICAgICAgcmFpc2UgZXJyb3IoInVuYmFsYW5jZWQgcGFyZW50aGVzaXMiKQotICAgIGVsaWYgdGFpbDoKLSAgICAgICAgcmFpc2UgZXJyb3IoImJvZ3VzIGNoYXJhY3RlcnMgYXQgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIpCi0KLSAgICBpZiBmbGFncyAmIFNSRV9GTEFHX0RFQlVHOgotICAgICAgICBwLmR1bXAoKQorICAgIGlmIHNvdXJjZS5uZXh0IGlzIG5vdCBOb25lOgorICAgICAgICBhc3NlcnQgc291cmNlLm5leHQgPT0gIikiCisgICAgICAgIHJhaXNlIHNvdXJjZS5lcnJvcigidW5iYWxhbmNlZCBwYXJlbnRoZXNpcyIpCiAKICAgICBpZiBub3QgKGZsYWdzICYgU1JFX0ZMQUdfVkVSQk9TRSkgYW5kIHAucGF0dGVybi5mbGFncyAmIFNSRV9GTEFHX1ZFUkJPU0U6CiAgICAgICAgICMgdGhlIFZFUkJPU0UgZmxhZyB3YXMgc3dpdGNoZWQgb24gaW5zaWRlIHRoZSBwYXR0ZXJuLiAgdG8gYmUKICAgICAgICAgIyBvbiB0aGUgc2FmZSBzaWRlLCB3ZSdsbCBwYXJzZSB0aGUgd2hvbGUgdGhpbmcgYWdhaW4uLi4KICAgICAgICAgcmV0dXJuIHBhcnNlKHN0ciwgcC5wYXR0ZXJuLmZsYWdzKQogCisgICAgaWYgZmxhZ3MgJiBTUkVfRkxBR19ERUJVRzoKKyAgICAgICAgcC5kdW1wKCkKKwogICAgIHJldHVybiBwCiAKIGRlZiBwYXJzZV90ZW1wbGF0ZShzb3VyY2UsIHBhdHRlcm4pOgpAQCAtODExLDYgKzg1OCw3IEBACiAgICAgICAgICAgICBkZWwgbGl0ZXJhbFs6XQogICAgICAgICBncm91cHMuYXBwZW5kKChsZW4obGl0ZXJhbHMpLCBpbmRleCkpCiAgICAgICAgIGxpdGVyYWxzLmFwcGVuZChOb25lKQorICAgIGdyb3VwaW5kZXggPSBwYXR0ZXJuLmdyb3VwaW5kZXgKICAgICB3aGlsZSBUcnVlOgogICAgICAgICB0aGlzID0gc2dldCgpCiAgICAgICAgIGlmIHRoaXMgaXMgTm9uZToKQEAgLTgyMCwyOCArODY4LDI1IEBACiAgICAgICAgICAgICBjID0gdGhpc1sxXQogICAgICAgICAgICAgaWYgYyA9PSAiZyI6CiAgICAgICAgICAgICAgICAgbmFtZSA9ICIiCi0gICAgICAgICAgICAgICAgaWYgcy5tYXRjaCgiPCIpOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9IHNnZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bnRlcm1pbmF0ZWQgZ3JvdXAgbmFtZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyID09ICI+IjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBjaGFyCi0gICAgICAgICAgICAgICAgaWYgbm90IG5hbWU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJtaXNzaW5nIGdyb3VwIG5hbWUiKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbnQobmFtZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXggPCAwOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoIm5lZ2F0aXZlIGdyb3VwIG51bWJlciIpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lLmlzaWRlbnRpZmllcigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoImJhZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSIpCisgICAgICAgICAgICAgICAgaWYgbm90IHMubWF0Y2goIjwiKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugcy5lcnJvcigibWlzc2luZyA8IikKKyAgICAgICAgICAgICAgICBuYW1lID0gcy5nZXR1bnRpbCgiPiIpCisgICAgICAgICAgICAgICAgaWYgbmFtZS5pc2lkZW50aWZpZXIoKToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXR0ZXJuLmdyb3VwaW5kZXhbbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZ3JvdXBpbmRleFtuYW1lXQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAidW5rbm93biBncm91cCBuYW1lOiB7MCFyfSIuZm9ybWF0KG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoInVua25vd24gZ3JvdXAgbmFtZSAlciIgJSBuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW50KG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbmRleCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHMuZXJyb3IoImJhZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSAlciIgJSBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4obmFtZSkgKyAxKSBmcm9tIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXggPj0gTUFYR1JPVVBTOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugcy5lcnJvcigiaW52YWxpZCBncm91cCByZWZlcmVuY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4obmFtZSkgKyAxKQogICAgICAgICAgICAgICAgIGFkZGdyb3VwKGluZGV4KQogICAgICAgICAgICAgZWxpZiBjID09ICIwIjoKICAgICAgICAgICAgICAgICBpZiBzLm5leHQgaW4gT0NURElHSVRTOgpAQCAtODU3LDE0ICs5MDIsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHMubmV4dCBpbiBPQ1RESUdJVFMpOgogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlzb2N0YWwgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXBwZW5kKGNocihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCisgICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHRoaXNbMTpdLCA4KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYyA+IDBvMzc3OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHMuZXJyb3IoJ29jdGFsIGVzY2FwZSB2YWx1ZSAlcyBvdXRzaWRlIG9mICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyYW5nZSAwLTBvMzc3JyAlIHRoaXMsIGxlbih0aGlzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhcHBlbmQoY2hyKGMpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBpc29jdGFsOgogICAgICAgICAgICAgICAgICAgICBhZGRncm91cChpbnQodGhpc1sxOl0pKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHRoaXMgPSBjaHIoRVNDQVBFU1t0aGlzXVsxXSkKICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgaWYgYyBpbiBBU0NJSUxFVFRFUlM6CisgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ2JhZCBlc2NhcGUgJXMnICUgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTQpCiAgICAgICAgICAgICAgICAgbGFwcGVuZCh0aGlzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGFwcGVuZCh0aGlzKQpAQCAtODc4LDE0ICs5MzAsMTIgQEAKIAogZGVmIGV4cGFuZF90ZW1wbGF0ZSh0ZW1wbGF0ZSwgbWF0Y2gpOgogICAgIGcgPSBtYXRjaC5ncm91cAotICAgIHNlcCA9IG1hdGNoLnN0cmluZ1s6MF0KKyAgICBlbXB0eSA9IG1hdGNoLnN0cmluZ1s6MF0KICAgICBncm91cHMsIGxpdGVyYWxzID0gdGVtcGxhdGUKICAgICBsaXRlcmFscyA9IGxpdGVyYWxzWzpdCiAgICAgdHJ5OgogICAgICAgICBmb3IgaW5kZXgsIGdyb3VwIGluIGdyb3VwczoKLSAgICAgICAgICAgIGxpdGVyYWxzW2luZGV4XSA9IHMgPSBnKGdyb3VwKQotICAgICAgICAgICAgaWYgcyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bm1hdGNoZWQgZ3JvdXAiKQorICAgICAgICAgICAgbGl0ZXJhbHNbaW5kZXhdID0gZyhncm91cCkgb3IgZW1wdHkKICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgcmFpc2UgZXJyb3IoImludmFsaWQgZ3JvdXAgcmVmZXJlbmNlIikKLSAgICByZXR1cm4gc2VwLmpvaW4obGl0ZXJhbHMpCisgICAgcmV0dXJuIGVtcHR5LmpvaW4obGl0ZXJhbHMpCmRpZmYgLS1naXQgYS9MaWIvc3NsLnB5IGIvTGliL3NzbC5weQppbmRleCBlYzQyZTM4Li4zZjVjM2M0IDEwMDY0NAotLS0gYS9MaWIvc3NsLnB5CisrKyBiL0xpYi9zc2wucHkKQEAgLTg3LDE3ICs4NywxOCBAQAogQUxFUlRfREVTQ1JJUFRJT05fVU5LTk9XTl9QU0tfSURFTlRJVFkKICIiIgogCitpbXBvcnQgaXBhZGRyZXNzCiBpbXBvcnQgdGV4dHdyYXAKIGltcG9ydCByZQogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCi1mcm9tIGVudW0gaW1wb3J0IEVudW0gYXMgX0VudW0KK2Zyb20gZW51bSBpbXBvcnQgRW51bSBhcyBfRW51bSwgSW50RW51bSBhcyBfSW50RW51bQogCiBpbXBvcnQgX3NzbCAgICAgICAgICAgICAjIGlmIHdlIGNhbid0IGltcG9ydCBpdCwgbGV0IHRoZSBlcnJvciBwcm9wYWdhdGUKIAogZnJvbSBfc3NsIGltcG9ydCBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSLCBPUEVOU1NMX1ZFUlNJT05fSU5GTywgT1BFTlNTTF9WRVJTSU9OCi1mcm9tIF9zc2wgaW1wb3J0IF9TU0xDb250ZXh0Citmcm9tIF9zc2wgaW1wb3J0IF9TU0xDb250ZXh0LCBNZW1vcnlCSU8KIGZyb20gX3NzbCBpbXBvcnQgKAogICAgIFNTTEVycm9yLCBTU0xaZXJvUmV0dXJuRXJyb3IsIFNTTFdhbnRSZWFkRXJyb3IsIFNTTFdhbnRXcml0ZUVycm9yLAogICAgIFNTTFN5c2NhbGxFcnJvciwgU1NMRU9GRXJyb3IsCkBAIC0xMTksMzAgKzEyMCwyMyBAQAogX2ltcG9ydF9zeW1ib2xzKCdPUF8nKQogX2ltcG9ydF9zeW1ib2xzKCdBTEVSVF9ERVNDUklQVElPTl8nKQogX2ltcG9ydF9zeW1ib2xzKCdTU0xfRVJST1JfJykKLV9pbXBvcnRfc3ltYm9scygnUFJPVE9DT0xfJykKIF9pbXBvcnRfc3ltYm9scygnVkVSSUZZXycpCiAKLWZyb20gX3NzbCBpbXBvcnQgSEFTX1NOSSwgSEFTX0VDREgsIEhBU19OUE4KK2Zyb20gX3NzbCBpbXBvcnQgSEFTX1NOSSwgSEFTX0VDREgsIEhBU19OUE4sIEhBU19BTFBOCiAKIGZyb20gX3NzbCBpbXBvcnQgX09QRU5TU0xfQVBJX1ZFUlNJT04KIAorX0ludEVudW0uX2NvbnZlcnQoCisgICAgICAgICdfU1NMTWV0aG9kJywgX19uYW1lX18sCisgICAgICAgIGxhbWJkYSBuYW1lOiBuYW1lLnN0YXJ0c3dpdGgoJ1BST1RPQ09MXycpLAorICAgICAgICBzb3VyY2U9X3NzbCkKIAotX1BST1RPQ09MX05BTUVTID0ge3ZhbHVlOiBuYW1lIGZvciBuYW1lLCB2YWx1ZSBpbiBnbG9iYWxzKCkuaXRlbXMoKSBpZiBuYW1lLnN0YXJ0c3dpdGgoJ1BST1RPQ09MXycpfQorX1BST1RPQ09MX05BTUVTID0ge3ZhbHVlOiBuYW1lIGZvciBuYW1lLCB2YWx1ZSBpbiBfU1NMTWV0aG9kLl9fbWVtYmVyc19fLml0ZW1zKCl9CisKIHRyeToKLSAgICBmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1NTTHYyCiAgICAgX1NTTHYyX0lGX0VYSVNUUyA9IFBST1RPQ09MX1NTTHYyCi1leGNlcHQgSW1wb3J0RXJyb3I6CitleGNlcHQgTmFtZUVycm9yOgogICAgIF9TU0x2Ml9JRl9FWElTVFMgPSBOb25lCi1lbHNlOgotICAgIF9QUk9UT0NPTF9OQU1FU1tQUk9UT0NPTF9TU0x2Ml0gPSAiU1NMdjIiCi0KLXRyeToKLSAgICBmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1RMU3YxXzEsIFBST1RPQ09MX1RMU3YxXzIKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIF9QUk9UT0NPTF9OQU1FU1tQUk9UT0NPTF9UTFN2MV8xXSA9ICJUTFN2MS4xIgotICAgIF9QUk9UT0NPTF9OQU1FU1tQUk9UT0NPTF9UTFN2MV8yXSA9ICJUTFN2MS4yIgogCiBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKICAgICBmcm9tIF9zc2wgaW1wb3J0IGVudW1fY2VydGlmaWNhdGVzLCBlbnVtX2NybHMKQEAgLTE1MSw2ICsxNDUsNyBAQAogZnJvbSBzb2NrZXQgaW1wb3J0IFNPTF9TT0NLRVQsIFNPX1RZUEUKIGltcG9ydCBiYXNlNjQgICAgICAgICMgZm9yIERFUi10by1QRU0gdHJhbnNsYXRpb24KIGltcG9ydCBlcnJubworaW1wb3J0IHdhcm5pbmdzCiAKIAogc29ja2V0X2Vycm9yID0gT1NFcnJvciAgIyBrZWVwIHRoYXQgcHVibGljIG5hbWUgaW4gbW9kdWxlIG5hbWVzcGFjZQpAQCAtMjQ2LDYgKzI0MSwxNyBAQAogICAgIHJldHVybiBwYXQubWF0Y2goaG9zdG5hbWUpCiAKIAorZGVmIF9pcGFkZHJlc3NfbWF0Y2goaXBuYW1lLCBob3N0X2lwKToKKyAgICAiIiJFeGFjdCBtYXRjaGluZyBvZiBJUCBhZGRyZXNzZXMuCisKKyAgICBSRkMgNjEyNSBleHBsaWNpdGx5IGRvZXNuJ3QgZGVmaW5lIGFuIGFsZ29yaXRobSBmb3IgdGhpcworICAgIChzZWN0aW9uIDEuNy4yIC0gIk91dCBvZiBTY29wZSIpLgorICAgICIiIgorICAgICMgT3BlblNTTCBtYXkgYWRkIGEgdHJhaWxpbmcgbmV3bGluZSB0byBhIHN1YmplY3RBbHROYW1lJ3MgSVAgYWRkcmVzcworICAgIGlwID0gaXBhZGRyZXNzLmlwX2FkZHJlc3MoaXBuYW1lLnJzdHJpcCgpKQorICAgIHJldHVybiBpcCA9PSBob3N0X2lwCisKKwogZGVmIG1hdGNoX2hvc3RuYW1lKGNlcnQsIGhvc3RuYW1lKToKICAgICAiIiJWZXJpZnkgdGhhdCAqY2VydCogKGluIGRlY29kZWQgZm9ybWF0IGFzIHJldHVybmVkIGJ5CiAgICAgU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkpIG1hdGNoZXMgdGhlICpob3N0bmFtZSouICBSRkMgMjgxOCBhbmQgUkZDIDYxMjUKQEAgLTI1OCwxMSArMjY0LDIwIEBACiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImVtcHR5IG9yIG5vIGNlcnRpZmljYXRlLCBtYXRjaF9ob3N0bmFtZSBuZWVkcyBhICIKICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMIHNvY2tldCBvciBTU0wgY29udGV4dCB3aXRoIGVpdGhlciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkNFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRCIpCisgICAgdHJ5OgorICAgICAgICBob3N0X2lwID0gaXBhZGRyZXNzLmlwX2FkZHJlc3MoaG9zdG5hbWUpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICMgTm90IGFuIElQIGFkZHJlc3MgKGNvbW1vbiBjYXNlKQorICAgICAgICBob3N0X2lwID0gTm9uZQogICAgIGRuc25hbWVzID0gW10KICAgICBzYW4gPSBjZXJ0LmdldCgnc3ViamVjdEFsdE5hbWUnLCAoKSkKICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzYW46CiAgICAgICAgIGlmIGtleSA9PSAnRE5TJzoKLSAgICAgICAgICAgIGlmIF9kbnNuYW1lX21hdGNoKHZhbHVlLCBob3N0bmFtZSk6CisgICAgICAgICAgICBpZiBob3N0X2lwIGlzIE5vbmUgYW5kIF9kbnNuYW1lX21hdGNoKHZhbHVlLCBob3N0bmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBkbnNuYW1lcy5hcHBlbmQodmFsdWUpCisgICAgICAgIGVsaWYga2V5ID09ICdJUCBBZGRyZXNzJzoKKyAgICAgICAgICAgIGlmIGhvc3RfaXAgaXMgbm90IE5vbmUgYW5kIF9pcGFkZHJlc3NfbWF0Y2godmFsdWUsIGhvc3RfaXApOgogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgZG5zbmFtZXMuYXBwZW5kKHZhbHVlKQogICAgIGlmIG5vdCBkbnNuYW1lczoKQEAgLTM2MSw2ICszNzYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0PXNlbGYpCiAKKyAgICBkZWYgd3JhcF9iaW8oc2VsZiwgaW5jb21pbmcsIG91dGdvaW5nLCBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICBzc2xvYmogPSBzZWxmLl93cmFwX2JpbyhpbmNvbWluZywgb3V0Z29pbmcsIHNlcnZlcl9zaWRlPXNlcnZlcl9zaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQorICAgICAgICByZXR1cm4gU1NMT2JqZWN0KHNzbG9iaikKKwogICAgIGRlZiBzZXRfbnBuX3Byb3RvY29scyhzZWxmLCBucG5fcHJvdG9jb2xzKToKICAgICAgICAgcHJvdG9zID0gYnl0ZWFycmF5KCkKICAgICAgICAgZm9yIHByb3RvY29sIGluIG5wbl9wcm90b2NvbHM6CkBAIC0zNzIsMTQgKzM5MywyOSBAQAogCiAgICAgICAgIHNlbGYuX3NldF9ucG5fcHJvdG9jb2xzKHByb3RvcykKIAorICAgIGRlZiBzZXRfYWxwbl9wcm90b2NvbHMoc2VsZiwgYWxwbl9wcm90b2NvbHMpOgorICAgICAgICBwcm90b3MgPSBieXRlYXJyYXkoKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gYWxwbl9wcm90b2NvbHM6CisgICAgICAgICAgICBiID0gYnl0ZXMocHJvdG9jb2wsICdhc2NpaScpCisgICAgICAgICAgICBpZiBsZW4oYikgPT0gMCBvciBsZW4oYikgPiAyNTU6CisgICAgICAgICAgICAgICAgcmFpc2UgU1NMRXJyb3IoJ0FMUE4gcHJvdG9jb2xzIG11c3QgYmUgMSB0byAyNTUgaW4gbGVuZ3RoJykKKyAgICAgICAgICAgIHByb3Rvcy5hcHBlbmQobGVuKGIpKQorICAgICAgICAgICAgcHJvdG9zLmV4dGVuZChiKQorCisgICAgICAgIHNlbGYuX3NldF9hbHBuX3Byb3RvY29scyhwcm90b3MpCisKICAgICBkZWYgX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyhzZWxmLCBzdG9yZW5hbWUsIHB1cnBvc2UpOgogICAgICAgICBjZXJ0cyA9IGJ5dGVhcnJheSgpCi0gICAgICAgIGZvciBjZXJ0LCBlbmNvZGluZywgdHJ1c3QgaW4gZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVuYW1lKToKLSAgICAgICAgICAgICMgQ0EgY2VydHMgYXJlIG5ldmVyIFBLQ1MjNyBlbmNvZGVkCi0gICAgICAgICAgICBpZiBlbmNvZGluZyA9PSAieDUwOV9hc24iOgotICAgICAgICAgICAgICAgIGlmIHRydXN0IGlzIFRydWUgb3IgcHVycG9zZS5vaWQgaW4gdHJ1c3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNlcnRzLmV4dGVuZChjZXJ0KQotICAgICAgICBzZWxmLmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2VydHMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjZXJ0LCBlbmNvZGluZywgdHJ1c3QgaW4gZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVuYW1lKToKKyAgICAgICAgICAgICAgICAjIENBIGNlcnRzIGFyZSBuZXZlciBQS0NTIzcgZW5jb2RlZAorICAgICAgICAgICAgICAgIGlmIGVuY29kaW5nID09ICJ4NTA5X2FzbiI6CisgICAgICAgICAgICAgICAgICAgIGlmIHRydXN0IGlzIFRydWUgb3IgcHVycG9zZS5vaWQgaW4gdHJ1c3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0cy5leHRlbmQoY2VydCkKKyAgICAgICAgZXhjZXB0IFBlcm1pc3Npb25FcnJvcjoKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInVuYWJsZSB0byBlbnVtZXJhdGUgV2luZG93cyBjZXJ0aWZpY2F0ZSBzdG9yZSIpCisgICAgICAgIGlmIGNlcnRzOgorICAgICAgICAgICAgc2VsZi5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNlcnRzKQogICAgICAgICByZXR1cm4gY2VydHMKIAogICAgIGRlZiBsb2FkX2RlZmF1bHRfY2VydHMoc2VsZiwgcHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRIKToKQEAgLTQ4OCw2ICs1MjQsMTQxIEBACiBfY3JlYXRlX3N0ZGxpYl9jb250ZXh0ID0gX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQKIAogCitjbGFzcyBTU0xPYmplY3Q6CisgICAgIiIiVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSBvbiB0b3Agb2YgYSBsb3ctbGV2ZWwgU1NMIG9iamVjdCBhcworICAgIGltcGxlbWVudGVkIGJ5IE9wZW5TU0wuIFRoaXMgb2JqZWN0IGNhcHR1cmVzIHRoZSBzdGF0ZSBvZiBhbiBTU0wgY29ubmVjdGlvbgorICAgIGJ1dCBkb2VzIG5vdCBwcm92aWRlIGFueSBuZXR3b3JrIElPIGl0c2VsZi4gSU8gbmVlZHMgdG8gYmUgcGVyZm9ybWVkCisgICAgdGhyb3VnaCBzZXBhcmF0ZSAiQklPIiBvYmplY3RzIHdoaWNoIGFyZSBPcGVuU1NMJ3MgSU8gYWJzdHJhY3Rpb24gbGF5ZXIuCisKKyAgICBUaGlzIGNsYXNzIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgY29uc3RydWN0b3IuIEluc3RhbmNlcyBhcmUgcmV0dXJuZWQgYnkKKyAgICBgYFNTTENvbnRleHQud3JhcF9iaW9gYC4gVGhpcyBjbGFzcyBpcyB0eXBpY2FsbHkgdXNlZCBieSBmcmFtZXdvcmsgYXV0aG9ycworICAgIHRoYXQgd2FudCB0byBpbXBsZW1lbnQgYXN5bmNocm9ub3VzIElPIGZvciBTU0wgdGhyb3VnaCBtZW1vcnkgYnVmZmVycy4KKworICAgIFdoZW4gY29tcGFyZWQgdG8gYGBTU0xTb2NrZXRgYCwgdGhpcyBvYmplY3QgbGFja3MgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKworICAgICAqIEFueSBmb3JtIG9mIG5ldHdvcmsgSU8gaW5jbHVnaW5nIG1ldGhvZHMgc3VjaCBhcyBgYHJlY3ZgYCBhbmQgYGBzZW5kYGAuCisgICAgICogVGhlIGBgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3RgYCBhbmQgYGBzdXBwcmVzc19yYWdnZWRfZW9mc2BgIG1hY2hpbmVyeS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzc2xvYmosIG93bmVyPU5vbmUpOgorICAgICAgICBzZWxmLl9zc2xvYmogPSBzc2xvYmoKKyAgICAgICAgIyBOb3RlOiBfc3Nsb2JqIHRha2VzIGEgd2VhayByZWZlcmVuY2UgdG8gb3duZXIKKyAgICAgICAgc2VsZi5fc3Nsb2JqLm93bmVyID0gb3duZXIgb3Igc2VsZgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvbnRleHQoc2VsZik6CisgICAgICAgICIiIlRoZSBTU0xDb250ZXh0IHRoYXQgaXMgY3VycmVudGx5IGluIHVzZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5jb250ZXh0CisKKyAgICBAY29udGV4dC5zZXR0ZXIKKyAgICBkZWYgY29udGV4dChzZWxmLCBjdHgpOgorICAgICAgICBzZWxmLl9zc2xvYmouY29udGV4dCA9IGN0eAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNlcnZlcl9zaWRlKHNlbGYpOgorICAgICAgICAiIiJXaGV0aGVyIHRoaXMgaXMgYSBzZXJ2ZXItc2lkZSBzb2NrZXQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmouc2VydmVyX3NpZGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZXJ2ZXJfaG9zdG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBjdXJyZW50bHkgc2V0IHNlcnZlciBob3N0bmFtZSAoZm9yIFNOSSksIG9yIGBgTm9uZWBgIGlmIG5vCisgICAgICAgIHNlcnZlciBob3N0YW1lIGlzIHNldC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5zZXJ2ZXJfaG9zdG5hbWUKKworICAgIGRlZiByZWFkKHNlbGYsIGxlbj0xMDI0LCBidWZmZXI9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgdXAgdG8gJ2xlbicgYnl0ZXMgZnJvbSB0aGUgU1NMIG9iamVjdCBhbmQgcmV0dXJuIHRoZW0uCisKKyAgICAgICAgSWYgJ2J1ZmZlcicgaXMgcHJvdmlkZWQsIHJlYWQgaW50byB0aGlzIGJ1ZmZlciBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKKyAgICAgICAgYnl0ZXMgcmVhZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGJ1ZmZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoucmVhZChsZW4sIGJ1ZmZlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoucmVhZChsZW4pCisgICAgICAgIHJldHVybiB2CisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIldyaXRlICdkYXRhJyB0byB0aGUgU1NMIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAgICAgICAgd3JpdHRlbi4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IG11c3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKKworICAgIGRlZiBnZXRwZWVyY2VydChzZWxmLCBiaW5hcnlfZm9ybT1GYWxzZSk6CisgICAgICAgICIiIlJldHVybnMgYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgZGF0YSBpbiB0aGUgY2VydGlmaWNhdGUgcHJvdmlkZWQKKyAgICAgICAgYnkgdGhlIG90aGVyIGVuZCBvZiB0aGUgU1NMIGNoYW5uZWwuCisKKyAgICAgICAgUmV0dXJuIE5vbmUgaWYgbm8gY2VydGlmaWNhdGUgd2FzIHByb3ZpZGVkLCB7fSBpZiBhIGNlcnRpZmljYXRlIHdhcworICAgICAgICBwcm92aWRlZCwgYnV0IG5vdCB2YWxpZGF0ZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnBlZXJfY2VydGlmaWNhdGUoYmluYXJ5X2Zvcm0pCisKKyAgICBkZWYgc2VsZWN0ZWRfbnBuX3Byb3RvY29sKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBOUE4gcHJvdG9jb2wgYXMgYSBzdHJpbmcsIG9yIGBgTm9uZWBgCisgICAgICAgIGlmIGEgbmV4dCBwcm90b2NvbCB3YXMgbm90IG5lZ290aWF0ZWQgb3IgaWYgTlBOIGlzIG5vdCBzdXBwb3J0ZWQgYnkgb25lCisgICAgICAgIG9mIHRoZSBwZWVycy4iIiIKKyAgICAgICAgaWYgX3NzbC5IQVNfTlBOOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5zZWxlY3RlZF9ucG5fcHJvdG9jb2woKQorCisgICAgZGVmIHNlbGVjdGVkX2FscG5fcHJvdG9jb2woc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIEFMUE4gcHJvdG9jb2wgYXMgYSBzdHJpbmcsIG9yIGBgTm9uZWBgCisgICAgICAgIGlmIGEgbmV4dCBwcm90b2NvbCB3YXMgbm90IG5lZ290aWF0ZWQgb3IgaWYgQUxQTiBpcyBub3Qgc3VwcG9ydGVkIGJ5IG9uZQorICAgICAgICBvZiB0aGUgcGVlcnMuIiIiCisgICAgICAgIGlmIF9zc2wuSEFTX0FMUE46CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnNlbGVjdGVkX2FscG5fcHJvdG9jb2woKQorCisgICAgZGVmIGNpcGhlcihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2lwaGVyIGFzIGEgMy10dXBsZSBgYChuYW1lLAorICAgICAgICBzc2xfdmVyc2lvbiwgc2VjcmV0X2JpdHMpYGAuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmouY2lwaGVyKCkKKworICAgIGRlZiBzaGFyZWRfY2lwaGVycyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBjaXBoZXJzIHNoYXJlZCBieSB0aGUgY2xpZW50IGR1cmluZyB0aGUgaGFuZHNoYWtlIG9yCisgICAgICAgIE5vbmUgaWYgdGhpcyBpcyBub3QgYSB2YWxpZCBzZXJ2ZXIgY29ubmVjdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmouc2hhcmVkX2NpcGhlcnMoKQorCisgICAgZGVmIGNvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgY29tcHJlc3Npb24gYWxnb3JpdGhtIGluIHVzZSwgb3IgYGBOb25lYGAgaWYKKyAgICAgICAgY29tcHJlc3Npb24gd2FzIG5vdCBuZWdvdGlhdGVkIG9yIG5vdCBzdXBwb3J0ZWQgYnkgb25lIG9mIHRoZSBwZWVycy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5jb21wcmVzc2lvbigpCisKKyAgICBkZWYgcGVuZGluZyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgcmVhZCBpbW1lZGlhdGVseS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5wZW5kaW5nKCkKKworICAgIGRlZiBkb19oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICIiIlN0YXJ0IHRoZSBTU0wvVExTIGhhbmRzaGFrZS4iIiIKKyAgICAgICAgc2VsZi5fc3Nsb2JqLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIGlmIHNlbGYuY29udGV4dC5jaGVja19ob3N0bmFtZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlcl9ob3N0bmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjaGVja19ob3N0bmFtZSBuZWVkcyBzZXJ2ZXJfaG9zdG5hbWUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IikKKyAgICAgICAgICAgIG1hdGNoX2hvc3RuYW1lKHNlbGYuZ2V0cGVlcmNlcnQoKSwgc2VsZi5zZXJ2ZXJfaG9zdG5hbWUpCisKKyAgICBkZWYgdW53cmFwKHNlbGYpOgorICAgICAgICAiIiJTdGFydCB0aGUgU1NMIHNodXRkb3duIGhhbmRzaGFrZS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai5zaHV0ZG93bigpCisKKyAgICBkZWYgZ2V0X2NoYW5uZWxfYmluZGluZyhzZWxmLCBjYl90eXBlPSJ0bHMtdW5pcXVlIik6CisgICAgICAgICIiIkdldCBjaGFubmVsIGJpbmRpbmcgZGF0YSBmb3IgY3VycmVudCBjb25uZWN0aW9uLiAgUmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIGBjYl90eXBlYCBpcyBub3Qgc3VwcG9ydGVkLiAgUmV0dXJuIGJ5dGVzIG9mIHRoZSBkYXRhCisgICAgICAgIG9yIE5vbmUgaWYgdGhlIGRhdGEgaXMgbm90IGF2YWlsYWJsZSAoZS5nLiBiZWZvcmUgdGhlIGhhbmRzaGFrZSkuIiIiCisgICAgICAgIGlmIGNiX3R5cGUgbm90IGluIENIQU5ORUxfQklORElOR19UWVBFUzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGNoYW5uZWwgYmluZGluZyB0eXBlIikKKyAgICAgICAgaWYgY2JfdHlwZSAhPSAidGxzLXVuaXF1ZSI6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7MH0gY2hhbm5lbCBiaW5kaW5nIHR5cGUgbm90IGltcGxlbWVudGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoY2JfdHlwZSkpCisgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmoudGxzX3VuaXF1ZV9jYigpCisKKyAgICBkZWYgdmVyc2lvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBwcm90b2NvbCB2ZXJzaW9uIHVzZWQgYnkgdGhlCisgICAgICAgIGN1cnJlbnQgU1NMIGNoYW5uZWwuICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnZlcnNpb24oKQorCisKIGNsYXNzIFNTTFNvY2tldChzb2NrZXQpOgogICAgICIiIlRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHN1YnR5cGUgb2Ygc29ja2V0LnNvY2tldCB0aGF0IHdyYXBzCiAgICAgdGhlIHVuZGVybHlpbmcgT1Mgc29ja2V0IGluIGFuIFNTTCBjb250ZXh0IHdoZW4gbmVjZXNzYXJ5LCBhbmQKQEAgLTU3MCw4ICs3NDEsOSBAQAogICAgICAgICBpZiBjb25uZWN0ZWQ6CiAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgU1NMIG9iamVjdAogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IHNlbGYuX2NvbnRleHQuX3dyYXBfc29ja2V0KHNlbGYsIHNlcnZlcl9zaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lKQorICAgICAgICAgICAgICAgIHNzbG9iaiA9IHNlbGYuX2NvbnRleHQuX3dyYXBfc29ja2V0KHNlbGYsIHNlcnZlcl9zaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBTU0xPYmplY3Qoc3Nsb2JqLCBvd25lcj1zZWxmKQogICAgICAgICAgICAgICAgIGlmIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgogICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5nZXR0aW1lb3V0KCkKICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA9PSAwLjA6CkBAIC02MDgsNyArNzgwLDcgQEAKICAgICAgICAgICAgICMgRUFHQUlOLgogICAgICAgICAgICAgc2VsZi5nZXRwZWVybmFtZSgpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBsZW49MCwgYnVmZmVyPU5vbmUpOgorICAgIGRlZiByZWFkKHNlbGYsIGxlbj0xMDI0LCBidWZmZXI9Tm9uZSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gTEVOIGJ5dGVzIGFuZCByZXR1cm4gdGhlbS4KICAgICAgICAgUmV0dXJuIHplcm8tbGVuZ3RoIHN0cmluZyBvbiBFT0YuIiIiCiAKQEAgLTYxNiwxMSArNzg4LDcgQEAKICAgICAgICAgaWYgbm90IHNlbGYuX3NzbG9iajoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlJlYWQgb24gY2xvc2VkIG9yIHVud3JhcHBlZCBTU0wgc29ja2V0LiIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIGJ1ZmZlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLnJlYWQobGVuLCBidWZmZXIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoucmVhZChsZW4gb3IgMTAyNCkKLSAgICAgICAgICAgIHJldHVybiB2CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnJlYWQobGVuLCBidWZmZXIpCiAgICAgICAgIGV4Y2VwdCBTU0xFcnJvciBhcyB4OgogICAgICAgICAgICAgaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9FT0YgYW5kIHNlbGYuc3VwcHJlc3NfcmFnZ2VkX2VvZnM6CiAgICAgICAgICAgICAgICAgaWYgYnVmZmVyIGlzIG5vdCBOb25lOgpAQCAtNjQ3LDcgKzgxNSw3IEBACiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja19jb25uZWN0ZWQoKQotICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnBlZXJfY2VydGlmaWNhdGUoYmluYXJ5X2Zvcm0pCisgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmouZ2V0cGVlcmNlcnQoYmluYXJ5X2Zvcm0pCiAKICAgICBkZWYgc2VsZWN0ZWRfbnBuX3Byb3RvY29sKHNlbGYpOgogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCkBAIC02NTYsNiArODI0LDEzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnNlbGVjdGVkX25wbl9wcm90b2NvbCgpCiAKKyAgICBkZWYgc2VsZWN0ZWRfYWxwbl9wcm90b2NvbChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBpZiBub3Qgc2VsZi5fc3Nsb2JqIG9yIG5vdCBfc3NsLkhBU19BTFBOOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmouc2VsZWN0ZWRfYWxwbl9wcm90b2NvbCgpCisKICAgICBkZWYgY2lwaGVyKHNlbGYpOgogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9zc2xvYmo6CkBAIC02NjMsNiArODM4LDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLmNpcGhlcigpCiAKKyAgICBkZWYgc2hhcmVkX2NpcGhlcnMoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX3NzbG9iajoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmouc2hhcmVkX2NpcGhlcnMoKQorCiAgICAgZGVmIGNvbXByZXNzaW9uKHNlbGYpOgogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9zc2xvYmo6CkBAIC02NzcsMTcgKzg1OCw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGZsYWdzIG5vdCBhbGxvd2VkIGluIGNhbGxzIHRvIHNlbmQoKSBvbiAlcyIgJQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCi0gICAgICAgICAgICBleGNlcHQgU1NMRXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgICAgICBlbGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gdgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iai53cml0ZShkYXRhKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNvY2tldC5zZW5kKHNlbGYsIGRhdGEsIGZsYWdzKQogCkBAIC03MjMsNiArODk0LDE2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmRhbGwoc2VsZiwgZGF0YSwgZmxhZ3MpCiAKKyAgICBkZWYgc2VuZGZpbGUoc2VsZiwgZmlsZSwgb2Zmc2V0PTAsIGNvdW50PU5vbmUpOgorICAgICAgICAiIiJTZW5kIGEgZmlsZSwgcG9zc2libHkgYnkgdXNpbmcgb3Muc2VuZGZpbGUoKSBpZiB0aGlzIGlzIGEKKyAgICAgICAgY2xlYXItdGV4dCBzb2NrZXQuICBSZXR1cm4gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBzZW50LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3Nsb2JqIGlzIE5vbmU6CisgICAgICAgICAgICAjIG9zLnNlbmRmaWxlKCkgd29ya3Mgd2l0aCBwbGFpbiBzb2NrZXRzIG9ubHkKKyAgICAgICAgICAgIHJldHVybiBzdXBlcigpLnNlbmRmaWxlKGZpbGUsIG9mZnNldCwgY291bnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2VuZGZpbGVfdXNlX3NlbmQoZmlsZSwgb2Zmc2V0LCBjb3VudCkKKwogICAgIGRlZiByZWN2KHNlbGYsIGJ1Zmxlbj0xMDI0LCBmbGFncz0wKToKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgICAgICBpZiBzZWxmLl9zc2xvYmo6CkBAIC03ODcsNyArOTY4LDcgQEAKIAogICAgIGRlZiB1bndyYXAoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3NzbG9iajoKLSAgICAgICAgICAgIHMgPSBzZWxmLl9zc2xvYmouc2h1dGRvd24oKQorICAgICAgICAgICAgcyA9IHNlbGYuX3NzbG9iai51bndyYXAoKQogICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHMKICAgICAgICAgZWxzZToKQEAgLTgwOCwxMiArOTg5LDYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuc2V0dGltZW91dCh0aW1lb3V0KQogCi0gICAgICAgIGlmIHNlbGYuY29udGV4dC5jaGVja19ob3N0bmFtZToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlcl9ob3N0bmFtZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjaGVja19ob3N0bmFtZSBuZWVkcyBzZXJ2ZXJfaG9zdG5hbWUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IikKLSAgICAgICAgICAgIG1hdGNoX2hvc3RuYW1lKHNlbGYuZ2V0cGVlcmNlcnQoKSwgc2VsZi5zZXJ2ZXJfaG9zdG5hbWUpCi0KICAgICBkZWYgX3JlYWxfY29ubmVjdChzZWxmLCBhZGRyLCBjb25uZWN0X2V4KToKICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJfc2lkZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGNvbm5lY3QgaW4gc2VydmVyLXNpZGUgbW9kZSIpCkBAIC04MjEsNyArOTk2LDggQEAKICAgICAgICAgIyBjb25uZWN0ZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGNhbGwuICBXZSBjb25uZWN0IGl0LCB0aGVuIHdyYXAgaXQuCiAgICAgICAgIGlmIHNlbGYuX2Nvbm5lY3RlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImF0dGVtcHQgdG8gY29ubmVjdCBhbHJlYWR5LWNvbm5lY3RlZCBTU0xTb2NrZXQhIikKLSAgICAgICAgc2VsZi5fc3Nsb2JqID0gc2VsZi5jb250ZXh0Ll93cmFwX3NvY2tldChzZWxmLCBGYWxzZSwgc2VsZi5zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIHNzbG9iaiA9IHNlbGYuY29udGV4dC5fd3JhcF9zb2NrZXQoc2VsZiwgRmFsc2UsIHNlbGYuc2VydmVyX2hvc3RuYW1lKQorICAgICAgICBzZWxmLl9zc2xvYmogPSBTU0xPYmplY3Qoc3Nsb2JqLCBvd25lcj1zZWxmKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBjb25uZWN0X2V4OgogICAgICAgICAgICAgICAgIHJjID0gc29ja2V0LmNvbm5lY3RfZXgoc2VsZiwgYWRkcikKQEAgLTg2NCwxNSArMTA0MCwxOCBAQAogICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIGBjYl90eXBlYCBpcyBub3Qgc3VwcG9ydGVkLiAgUmV0dXJuIGJ5dGVzIG9mIHRoZSBkYXRhCiAgICAgICAgIG9yIE5vbmUgaWYgdGhlIGRhdGEgaXMgbm90IGF2YWlsYWJsZSAoZS5nLiBiZWZvcmUgdGhlIGhhbmRzaGFrZSkuCiAgICAgICAgICIiIgotICAgICAgICBpZiBjYl90eXBlIG5vdCBpbiBDSEFOTkVMX0JJTkRJTkdfVFlQRVM6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBjaGFubmVsIGJpbmRpbmcgdHlwZSIpCi0gICAgICAgIGlmIGNiX3R5cGUgIT0gInRscy11bmlxdWUiOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiezB9IGNoYW5uZWwgYmluZGluZyB0eXBlIG5vdCBpbXBsZW1lbnRlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGNiX3R5cGUpKQogICAgICAgICBpZiBzZWxmLl9zc2xvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmoudGxzX3VuaXF1ZV9jYigpCisgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmouZ2V0X2NoYW5uZWxfYmluZGluZyhjYl90eXBlKQorCisgICAgZGVmIHZlcnNpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHByb3RvY29sIHZlcnNpb24gdXNlZCBieSB0aGUKKyAgICAgICAgY3VycmVudCBTU0wgY2hhbm5lbCwgb3IgTm9uZSBpZiB0aGVyZSBpcyBubyBlc3RhYmxpc2hlZCBjaGFubmVsLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3Nsb2JqIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnZlcnNpb24oKQogCiAKIGRlZiB3cmFwX3NvY2tldChzb2NrLCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUsCkBAIC04OTIsMTIgKzEwNzEsMzQgQEAKICMgc29tZSB1dGlsaXR5IGZ1bmN0aW9ucwogCiBkZWYgY2VydF90aW1lX3RvX3NlY29uZHMoY2VydF90aW1lKToKLSAgICAiIiJUYWtlcyBhIGRhdGUtdGltZSBzdHJpbmcgaW4gc3RhbmRhcmQgQVNOMV9wcmludCBmb3JtCi0gICAgKCJNT04gREFZIDI0SE9VUjpNSU5VVEU6U0VDIFlFQVIgVElNRVpPTkUiKSBhbmQgcmV0dXJuCi0gICAgYSBQeXRob24gdGltZSB2YWx1ZSBpbiBzZWNvbmRzIHBhc3QgdGhlIGVwb2NoLiIiIgorICAgICIiIlJldHVybiB0aGUgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBFcG9jaCwgZ2l2ZW4gdGhlIHRpbWVzdHJpbmcKKyAgICByZXByZXNlbnRpbmcgdGhlICJub3RCZWZvcmUiIG9yICJub3RBZnRlciIgZGF0ZSBmcm9tIGEgY2VydGlmaWNhdGUKKyAgICBpbiBgYCIlYiAlZCAlSDolTTolUyAlWSAlWiJgYCBzdHJwdGltZSBmb3JtYXQgKEMgbG9jYWxlKS4KIAotICAgIGltcG9ydCB0aW1lCi0gICAgcmV0dXJuIHRpbWUubWt0aW1lKHRpbWUuc3RycHRpbWUoY2VydF90aW1lLCAiJWIgJWQgJUg6JU06JVMgJVkgR01UIikpCisgICAgIm5vdEJlZm9yZSIgb3IgIm5vdEFmdGVyIiBkYXRlcyBtdXN0IHVzZSBVVEMgKFJGQyA1MjgwKS4KKworICAgIE1vbnRoIGlzIG9uZSBvZjogSmFuIEZlYiBNYXIgQXByIE1heSBKdW4gSnVsIEF1ZyBTZXAgT2N0IE5vdiBEZWMKKyAgICBVVEMgc2hvdWxkIGJlIHNwZWNpZmllZCBhcyBHTVQgKHNlZSBBU04xX1RJTUVfcHJpbnQoKSkKKyAgICAiIiIKKyAgICBmcm9tIHRpbWUgaW1wb3J0IHN0cnB0aW1lCisgICAgZnJvbSBjYWxlbmRhciBpbXBvcnQgdGltZWdtCisKKyAgICBtb250aHMgPSAoCisgICAgICAgICJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLAorICAgICAgICAiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIgorICAgICkKKyAgICB0aW1lX2Zvcm1hdCA9ICcgJWQgJUg6JU06JVMgJVkgR01UJyAjIE5PVEU6IG5vIG1vbnRoLCBmaXhlZCBHTVQKKyAgICB0cnk6CisgICAgICAgIG1vbnRoX251bWJlciA9IG1vbnRocy5pbmRleChjZXJ0X3RpbWVbOjNdLnRpdGxlKCkpICsgMQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0aW1lIGRhdGEgJXIgZG9lcyBub3QgbWF0Y2ggJworICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtYXQgIiUlYiVzIicgJSAoY2VydF90aW1lLCB0aW1lX2Zvcm1hdCkpCisgICAgZWxzZToKKyAgICAgICAgIyBmb3VuZCB2YWxpZCBtb250aAorICAgICAgICB0dCA9IHN0cnB0aW1lKGNlcnRfdGltZVszOl0sIHRpbWVfZm9ybWF0KQorICAgICAgICAjIHJldHVybiBhbiBpbnRlZ2VyLCB0aGUgcHJldmlvdXMgbWt0aW1lKCktYmFzZWQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyByZXR1cm5lZCBhIGZsb2F0IChmcmFjdGlvbmFsIHNlY29uZHMgYXJlIGFsd2F5cyB6ZXJvIGhlcmUpLgorICAgICAgICByZXR1cm4gdGltZWdtKCh0dFswXSwgbW9udGhfbnVtYmVyKSArIHR0WzI6Nl0pCiAKIFBFTV9IRUFERVIgPSAiLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tIgogUEVNX0ZPT1RFUiA9ICItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tIgpkaWZmIC0tZ2l0IGEvTGliL3N0YXQucHkgYi9MaWIvc3RhdC5weQppbmRleCAzZWVjYzNlLi40NjgzN2MwIDEwMDY0NAotLS0gYS9MaWIvc3RhdC5weQorKysgYi9MaWIvc3RhdC5weQpAQCAtMTQ4LDYgKzE0OCwyOSBAQAogICAgICAgICAgICAgcGVybS5hcHBlbmQoIi0iKQogICAgIHJldHVybiAiIi5qb2luKHBlcm0pCiAKKworIyBXaW5kb3dzIEZJTEVfQVRUUklCVVRFIGNvbnN0YW50cyBmb3IgaW50ZXJwcmV0aW5nIG9zLnN0YXQoKSdzCisjICJzdF9maWxlX2F0dHJpYnV0ZXMiIG1lbWJlcgorCitGSUxFX0FUVFJJQlVURV9BUkNISVZFID0gMzIKK0ZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQgPSAyMDQ4CitGSUxFX0FUVFJJQlVURV9ERVZJQ0UgPSA2NAorRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZID0gMTYKK0ZJTEVfQVRUUklCVVRFX0VOQ1JZUFRFRCA9IDE2Mzg0CitGSUxFX0FUVFJJQlVURV9ISURERU4gPSAyCitGSUxFX0FUVFJJQlVURV9JTlRFR1JJVFlfU1RSRUFNID0gMzI3NjgKK0ZJTEVfQVRUUklCVVRFX05PUk1BTCA9IDEyOAorRklMRV9BVFRSSUJVVEVfTk9UX0NPTlRFTlRfSU5ERVhFRCA9IDgxOTIKK0ZJTEVfQVRUUklCVVRFX05PX1NDUlVCX0RBVEEgPSAxMzEwNzIKK0ZJTEVfQVRUUklCVVRFX09GRkxJTkUgPSA0MDk2CitGSUxFX0FUVFJJQlVURV9SRUFET05MWSA9IDEKK0ZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQgPSAxMDI0CitGSUxFX0FUVFJJQlVURV9TUEFSU0VfRklMRSA9IDUxMgorRklMRV9BVFRSSUJVVEVfU1lTVEVNID0gNAorRklMRV9BVFRSSUJVVEVfVEVNUE9SQVJZID0gMjU2CitGSUxFX0FUVFJJQlVURV9WSVJUVUFMID0gNjU1MzYKKworCiAjIElmIGF2YWlsYWJsZSwgdXNlIEMgaW1wbGVtZW50YXRpb24KIHRyeToKICAgICBmcm9tIF9zdGF0IGltcG9ydCAqCmRpZmYgLS1naXQgYS9MaWIvc3RhdGlzdGljcy5weSBiL0xpYi9zdGF0aXN0aWNzLnB5CmluZGV4IDUxOGY1NDYuLjRmNWMxYzEgMTAwNjQ0Ci0tLSBhL0xpYi9zdGF0aXN0aWNzLnB5CisrKyBiL0xpYi9zdGF0aXN0aWNzLnB5CkBAIC02MDEsNyArNjAxLDYgQEAKICAgICBuID0gbGVuKGRhdGEpCiAgICAgaWYgbiA8IDE6CiAgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigncHZhcmlhbmNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBkYXRhIHBvaW50JykKLSAgICBzcyA9IF9zcyhkYXRhLCBtdSkKICAgICBULCBzcyA9IF9zcyhkYXRhLCBtdSkKICAgICByZXR1cm4gX2NvbnZlcnQoc3MvbiwgVCkKIApkaWZmIC0tZ2l0IGEvTGliL3N0cmluZy5weSBiL0xpYi9zdHJpbmcucHkKaW5kZXggZWYwNzg3Zi4uODkyODdjNCAxMDA2NDQKLS0tIGEvTGliL3N0cmluZy5weQorKysgYi9MaWIvc3RyaW5nLnB5CkBAIC0xNCw2ICsxNCwxMCBAQAogCiAiIiIKIAorX19hbGxfXyA9IFsiYXNjaWlfbGV0dGVycyIsICJhc2NpaV9sb3dlcmNhc2UiLCAiYXNjaWlfdXBwZXJjYXNlIiwgImNhcHdvcmRzIiwKKyAgICAgICAgICAgImRpZ2l0cyIsICJoZXhkaWdpdHMiLCAib2N0ZGlnaXRzIiwgInByaW50YWJsZSIsICJwdW5jdHVhdGlvbiIsCisgICAgICAgICAgICJ3aGl0ZXNwYWNlIiwgIkZvcm1hdHRlciIsICJUZW1wbGF0ZSJdCisKIGltcG9ydCBfc3RyaW5nCiAKICMgU29tZSBzdHJpbmdzIGZvciBjdHlwZS1zdHlsZSBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24KQEAgLTQ2LDcgKzUwLDcgQEAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGltcG9ydCByZSBhcyBfcmUKLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENoYWluTWFwCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDaGFpbk1hcCBhcyBfQ2hhaW5NYXAKIAogY2xhc3MgX1RlbXBsYXRlTWV0YWNsYXNzKHR5cGUpOgogICAgIHBhdHRlcm4gPSByIiIiCkBAIC0xMDQsNyArMTA4LDcgQEAKICAgICAgICAgaWYgbm90IGFyZ3M6CiAgICAgICAgICAgICBtYXBwaW5nID0ga3dzCiAgICAgICAgIGVsaWYga3dzOgotICAgICAgICAgICAgbWFwcGluZyA9IENoYWluTWFwKGt3cywgYXJnc1swXSkKKyAgICAgICAgICAgIG1hcHBpbmcgPSBfQ2hhaW5NYXAoa3dzLCBhcmdzWzBdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbWFwcGluZyA9IGFyZ3NbMF0KICAgICAgICAgIyBIZWxwZXIgZnVuY3Rpb24gZm9yIC5zdWIoKQpAQCAtMTM0LDcgKzEzOCw3IEBACiAgICAgICAgIGlmIG5vdCBhcmdzOgogICAgICAgICAgICAgbWFwcGluZyA9IGt3cwogICAgICAgICBlbGlmIGt3czoKLSAgICAgICAgICAgIG1hcHBpbmcgPSBDaGFpbk1hcChrd3MsIGFyZ3NbMF0pCisgICAgICAgICAgICBtYXBwaW5nID0gX0NoYWluTWFwKGt3cywgYXJnc1swXSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1hcHBpbmcgPSBhcmdzWzBdCiAgICAgICAgICMgSGVscGVyIGZ1bmN0aW9uIGZvciAuc3ViKCkKQEAgLTE3OCw2ICsxODIsOSBAQAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIGlmICdmb3JtYXRfc3RyaW5nJyBpbiBrd2FyZ3M6CiAgICAgICAgICAgICAgICAgZm9ybWF0X3N0cmluZyA9IGt3YXJncy5wb3AoJ2Zvcm1hdF9zdHJpbmcnKQorICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlBhc3NpbmcgJ2Zvcm1hdF9zdHJpbmcnIGFzIGtleXdvcmQgYXJndW1lbnQgaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmb3JtYXQoKSBtaXNzaW5nIDEgcmVxdWlyZWQgcG9zaXRpb25hbCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudDogJ2Zvcm1hdF9zdHJpbmcnIikgZnJvbSBOb25lCmRpZmYgLS1naXQgYS9MaWIvc3VicHJvY2Vzcy5weSBiL0xpYi9zdWJwcm9jZXNzLnB5CmluZGV4IDA0Y2ZiNDQuLmQ4ZDZhYjIgMTAwNjQ0Ci0tLSBhL0xpYi9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi9zdWJwcm9jZXNzLnB5CkBAIC0xMDQsMTcgKzEwNCwyMSBAQAogSWYgZW52IGlzIG5vdCBOb25lLCBpdCBkZWZpbmVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBuZXcKIHByb2Nlc3MuCiAKLUlmIHVuaXZlcnNhbF9uZXdsaW5lcyBpcyBmYWxzZSwgdGhlIGZpbGUgb2JqZWN0cyBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIKK0lmIHVuaXZlcnNhbF9uZXdsaW5lcyBpcyBGYWxzZSwgdGhlIGZpbGUgb2JqZWN0cyBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIKIGFyZSBvcGVuZWQgYXMgYmluYXJ5IGZpbGVzLCBhbmQgbm8gbGluZSBlbmRpbmcgY29udmVyc2lvbiBpcyBkb25lLgogCi1JZiB1bml2ZXJzYWxfbmV3bGluZXMgaXMgdHJ1ZSwgdGhlIGZpbGUgb2JqZWN0cyBzdGRvdXQgYW5kIHN0ZGVyciBhcmUKLW9wZW5lZCBhcyBhIHRleHQgZmlsZXMsIGJ1dCBsaW5lcyBtYXkgYmUgdGVybWluYXRlZCBieSBhbnkgb2YgJ1xuJywKK0lmIHVuaXZlcnNhbF9uZXdsaW5lcyBpcyBUcnVlLCB0aGUgZmlsZSBvYmplY3RzIHN0ZG91dCBhbmQgc3RkZXJyIGFyZQorb3BlbmVkIGFzIGEgdGV4dCBmaWxlLCBidXQgbGluZXMgbWF5IGJlIHRlcm1pbmF0ZWQgYnkgYW55IG9mICdcbicsCiB0aGUgVW5peCBlbmQtb2YtbGluZSBjb252ZW50aW9uLCAnXHInLCB0aGUgb2xkIE1hY2ludG9zaCBjb252ZW50aW9uIG9yCiAnXHJcbicsIHRoZSBXaW5kb3dzIGNvbnZlbnRpb24uICBBbGwgb2YgdGhlc2UgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb25zCiBhcmUgc2VlbiBhcyAnXG4nIGJ5IHRoZSBQeXRob24gcHJvZ3JhbS4gIEFsc28sIHRoZSBuZXdsaW5lcyBhdHRyaWJ1dGUKIG9mIHRoZSBmaWxlIG9iamVjdHMgc3Rkb3V0LCBzdGRpbiBhbmQgc3RkZXJyIGFyZSBub3QgdXBkYXRlZCBieSB0aGUKIGNvbW11bmljYXRlKCkgbWV0aG9kLgogCitJbiBlaXRoZXIgY2FzZSwgdGhlIHByb2Nlc3MgYmVpbmcgY29tbXVuaWNhdGVkIHdpdGggc2hvdWxkIHN0YXJ0IHVwCitleHBlY3RpbmcgdG8gcmVjZWl2ZSBieXRlcyBvbiBpdHMgc3RhbmRhcmQgaW5wdXQgYW5kIGRlY29kZSB0aGVtIHdpdGgKK3RoZSBzYW1lIGVuY29kaW5nIHRoZXkgYXJlIHNlbnQgaW4uCisKIFRoZSBzdGFydHVwaW5mbyBhbmQgY3JlYXRpb25mbGFncywgaWYgZ2l2ZW4sIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQogdW5kZXJseWluZyBDcmVhdGVQcm9jZXNzKCkgZnVuY3Rpb24uICBUaGV5IGNhbiBzcGVjaWZ5IHRoaW5ncyBzdWNoIGFzCiBhcHBlYXJhbmNlIG9mIHRoZSBtYWluIHdpbmRvdyBhbmQgcHJpb3JpdHkgZm9yIHRoZSBuZXcgcHJvY2Vzcy4KQEAgLTE4NCw2ICsxODgsOSBAQAogICAgIHBhc3MgYSBzdHJpbmcgdG8gdGhlIHN1YnByb2Nlc3MncyBzdGRpbi4gIElmIHlvdSB1c2UgdGhpcyBhcmd1bWVudAogICAgIHlvdSBtYXkgbm90IGFsc28gdXNlIHRoZSBQb3BlbiBjb25zdHJ1Y3RvcidzICJzdGRpbiIgYXJndW1lbnQuCiAKKyAgICBJZiB1bml2ZXJzYWxfbmV3bGluZXMgaXMgc2V0IHRvIFRydWUsIHRoZSAiaW5wdXQiIGFyZ3VtZW50IG11c3QKKyAgICBiZSBhIHN0cmluZyByYXRoZXIgdGhhbiBieXRlcywgYW5kIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhIHN0cmluZy4KKwogRXhjZXB0aW9ucwogLS0tLS0tLS0tLQogRXhjZXB0aW9ucyByYWlzZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIGJlZm9yZSB0aGUgbmV3IHByb2dyYW0gaGFzCkBAIC0yMjUsOSArMjMyLDEzIEBACiBjb21tdW5pY2F0ZShpbnB1dD1Ob25lKQogICAgIEludGVyYWN0IHdpdGggcHJvY2VzczogU2VuZCBkYXRhIHRvIHN0ZGluLiAgUmVhZCBkYXRhIGZyb20gc3Rkb3V0CiAgICAgYW5kIHN0ZGVyciwgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZC4gIFdhaXQgZm9yIHByb2Nlc3MgdG8KLSAgICB0ZXJtaW5hdGUuICBUaGUgb3B0aW9uYWwgaW5wdXQgYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nIHRvIGJlCisgICAgdGVybWluYXRlLiAgVGhlIG9wdGlvbmFsIGlucHV0IGFyZ3VtZW50IHNob3VsZCBiZSBkYXRhIHRvIGJlCiAgICAgc2VudCB0byB0aGUgY2hpbGQgcHJvY2Vzcywgb3IgTm9uZSwgaWYgbm8gZGF0YSBzaG91bGQgYmUgc2VudCB0bwotICAgIHRoZSBjaGlsZC4KKyAgICB0aGUgY2hpbGQuIElmIHRoZSBQb3BlbiBpbnN0YW5jZSB3YXMgY29uc3RydWN0ZWQgd2l0aCB1bml2ZXJzYWxfbmV3bGluZXMKKyAgICBzZXQgdG8gVHJ1ZSwgdGhlIGlucHV0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyBhbmQgd2lsbCBiZSBlbmNvZGVkCisgICAgdXNpbmcgdGhlIHByZWZlcnJlZCBzeXN0ZW0gZW5jb2RpbmcgKHNlZSBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcpOworICAgIGlmIHVuaXZlcnNhbF9uZXdsaW5lcyBpcyBGYWxzZSwgdGhlIGlucHV0IGFyZ3VtZW50IHNob3VsZCBiZSBhCisgICAgYnl0ZSBzdHJpbmcuCiAKICAgICBjb21tdW5pY2F0ZSgpIHJldHVybnMgYSB0dXBsZSAoc3Rkb3V0LCBzdGRlcnIpLgogCkBAIC0zNDUsNyArMzU2LDcgQEAKICIiIgogCiBpbXBvcnQgc3lzCi1tc3dpbmRvd3MgPSAoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIpCitfbXN3aW5kb3dzID0gKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiKQogCiBpbXBvcnQgaW8KIGltcG9ydCBvcwpAQCAtMzU0LDEwICszNjUsNyBAQAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBlcnJubwotdHJ5OgotICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIF90aW1lCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCitmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQogCiAjIEV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhpcyBtb2R1bGUuCiBjbGFzcyBTdWJwcm9jZXNzRXJyb3IoRXhjZXB0aW9uKTogcGFzcwpAQCAtMzY5LDI5ICszNzcsNTMgQEAKICAgICBUaGUgZXhpdCBzdGF0dXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIHJldHVybmNvZGUgYXR0cmlidXRlOwogICAgIGNoZWNrX291dHB1dCgpIHdpbGwgYWxzbyBzdG9yZSB0aGUgb3V0cHV0IGluIHRoZSBvdXRwdXQgYXR0cmlidXRlLgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXR1cm5jb2RlLCBjbWQsIG91dHB1dD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0dXJuY29kZSwgY21kLCBvdXRwdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpOgogICAgICAgICBzZWxmLnJldHVybmNvZGUgPSByZXR1cm5jb2RlCiAgICAgICAgIHNlbGYuY21kID0gY21kCiAgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCisKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQiICUgKHNlbGYuY21kLCBzZWxmLnJldHVybmNvZGUpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3Rkb3V0KHNlbGYpOgorICAgICAgICAiIiJBbGlhcyBmb3Igb3V0cHV0IGF0dHJpYnV0ZSwgdG8gbWF0Y2ggc3RkZXJyIiIiCisgICAgICAgIHJldHVybiBzZWxmLm91dHB1dAorCisgICAgQHN0ZG91dC5zZXR0ZXIKKyAgICBkZWYgc3Rkb3V0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgIyBUaGVyZSdzIG5vIG9idmlvdXMgcmVhc29uIHRvIHNldCB0aGlzLCBidXQgYWxsb3cgaXQgYW55d2F5IHNvCisgICAgICAgICMgLnN0ZG91dCBpcyBhIHRyYW5zcGFyZW50IGFsaWFzIGZvciAub3V0cHV0CisgICAgICAgIHNlbGYub3V0cHV0ID0gdmFsdWUKKwogCiBjbGFzcyBUaW1lb3V0RXhwaXJlZChTdWJwcm9jZXNzRXJyb3IpOgogICAgICIiIlRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMgd2hpbGUgd2FpdGluZyBmb3IgYQogICAgIGNoaWxkIHByb2Nlc3MuCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZCwgdGltZW91dCwgb3V0cHV0PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWQsIHRpbWVvdXQsIG91dHB1dD1Ob25lLCBzdGRlcnI9Tm9uZSk6CiAgICAgICAgIHNlbGYuY21kID0gY21kCiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKKyAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gKCJDb21tYW5kICclcycgdGltZWQgb3V0IGFmdGVyICVzIHNlY29uZHMiICUKICAgICAgICAgICAgICAgICAoc2VsZi5jbWQsIHNlbGYudGltZW91dCkpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3Rkb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vdXRwdXQKIAotaWYgbXN3aW5kb3dzOgorICAgIEBzdGRvdXQuc2V0dGVyCisgICAgZGVmIHN0ZG91dChzZWxmLCB2YWx1ZSk6CisgICAgICAgICMgVGhlcmUncyBubyBvYnZpb3VzIHJlYXNvbiB0byBzZXQgdGhpcywgYnV0IGFsbG93IGl0IGFueXdheSBzbworICAgICAgICAjIC5zdGRvdXQgaXMgYSB0cmFuc3BhcmVudCBhbGlhcyBmb3IgLm91dHB1dAorICAgICAgICBzZWxmLm91dHB1dCA9IHZhbHVlCisKKworaWYgX21zd2luZG93czoKICAgICBpbXBvcnQgdGhyZWFkaW5nCiAgICAgaW1wb3J0IG1zdmNydAogICAgIGltcG9ydCBfd2luYXBpCkBAIC00MjUsOSArNDU3LDEyIEBACiAKIAogX19hbGxfXyA9IFsiUG9wZW4iLCAiUElQRSIsICJTVERPVVQiLCAiY2FsbCIsICJjaGVja19jYWxsIiwgImdldHN0YXR1c291dHB1dCIsCi0gICAgICAgICAgICJnZXRvdXRwdXQiLCAiY2hlY2tfb3V0cHV0IiwgIkNhbGxlZFByb2Nlc3NFcnJvciIsICJERVZOVUxMIl0KKyAgICAgICAgICAgImdldG91dHB1dCIsICJjaGVja19vdXRwdXQiLCAicnVuIiwgIkNhbGxlZFByb2Nlc3NFcnJvciIsICJERVZOVUxMIiwKKyAgICAgICAgICAgIlN1YnByb2Nlc3NFcnJvciIsICJUaW1lb3V0RXhwaXJlZCIsICJDb21wbGV0ZWRQcm9jZXNzIl0KKyAgICAgICAgICAgIyBOT1RFOiBXZSBpbnRlbnRpb25hbGx5IGV4Y2x1ZGUgbGlzdDJjbWRsaW5lIGFzIGl0IGlzCisgICAgICAgICAgICMgY29uc2lkZXJlZCBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBpc3N1ZTEwODM4LgogCi1pZiBtc3dpbmRvd3M6CitpZiBfbXN3aW5kb3dzOgogICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgKENSRUFURV9ORVdfQ09OU09MRSwgQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQLAogICAgICAgICAgICAgICAgICAgICAgICAgIFNURF9JTlBVVF9IQU5ETEUsIFNURF9PVVRQVVRfSEFORExFLAogICAgICAgICAgICAgICAgICAgICAgICAgIFNURF9FUlJPUl9IQU5ETEUsIFNXX0hJREUsCkBAIC00NTMsMTUgKzQ4OCwxMSBAQAogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYWxyZWFkeSBjbG9zZWQiKQogCiAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiAiSGFuZGxlKCVkKSIgJSBpbnQoc2VsZikKKyAgICAgICAgICAgIHJldHVybiAiJXMoJWQpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgaW50KHNlbGYpKQogCiAgICAgICAgIF9fZGVsX18gPSBDbG9zZQogICAgICAgICBfX3N0cl9fID0gX19yZXByX18KIAotdHJ5OgotICAgIE1BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQotZXhjZXB0OgotICAgIE1BWEZEID0gMjU2CiAKICMgVGhpcyBsaXN0cyBob2xkcyBQb3BlbiBpbnN0YW5jZXMgZm9yIHdoaWNoIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MgaGFkIG5vdAogIyBleGl0ZWQgYXQgdGhlIHRpbWUgaXRzIF9fZGVsX18gbWV0aG9kIGdvdCBjYWxsZWQ6IHRob3NlIHByb2Nlc3NlcyBhcmUgd2FpdCgpZWQKQEAgLTQ4NSwxNCArNTE2LDYgQEAKIERFVk5VTEwgPSAtMwogCiAKLWRlZiBfZWludHJfcmV0cnlfY2FsbChmdW5jLCAqYXJncyk6Ci0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MpCi0gICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgotICAgICAgICAgICAgY29udGludWUKLQotCiAjIFhYWCBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBieSBtdWx0aXByb2Nlc3NpbmcgYW5kIHRoZSB0ZXN0IHN1aXRlLAogIyBidXQgaXQncyBoZXJlIHNvIHRoYXQgaXQgY2FuIGJlIGltcG9ydGVkIHdoZW4gUHl0aG9uIGlzIGNvbXBpbGVkIHdpdGhvdXQKICMgdGhyZWFkcy4KQEAgLTU4OCwzNCArNjExLDEwMiBAQAogICAgIC4uLiAgICAgICAgICAgICAgaW5wdXQ9YiJ3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgZm9vbWFuIGV2ZW50c1xuIikKICAgICBiJ3doZW4gaW4gdGhlIGNvdXJzZSBvZiBiYXJtYW4gZXZlbnRzXG4nCiAKLSAgICBJZiB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSBpcyBwYXNzZWQsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhCi0gICAgc3RyaW5nIHJhdGhlciB0aGFuIGJ5dGVzLgorICAgIElmIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlIGlzIHBhc3NlZCwgdGhlICJpbnB1dCIgYXJndW1lbnQgbXVzdCBiZSBhCisgICAgc3RyaW5nIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYSBzdHJpbmcgcmF0aGVyIHRoYW4gYnl0ZXMuCiAgICAgIiIiCiAgICAgaWYgJ3N0ZG91dCcgaW4ga3dhcmdzOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRvdXQgYXJndW1lbnQgbm90IGFsbG93ZWQsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi4nKQotICAgIGlmICdpbnB1dCcgaW4ga3dhcmdzOgorCisgICAgaWYgJ2lucHV0JyBpbiBrd2FyZ3MgYW5kIGt3YXJnc1snaW5wdXQnXSBpcyBOb25lOgorICAgICAgICAjIEV4cGxpY2l0bHkgcGFzc2luZyBpbnB1dD1Ob25lIHdhcyBwcmV2aW91c2x5IGVxdWl2YWxlbnQgdG8gcGFzc2luZyBhbgorICAgICAgICAjIGVtcHR5IHN0cmluZy4gVGhhdCBpcyBtYWludGFpbmVkIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorICAgICAgICBrd2FyZ3NbJ2lucHV0J10gPSAnJyBpZiBrd2FyZ3MuZ2V0KCd1bml2ZXJzYWxfbmV3bGluZXMnLCBGYWxzZSkgZWxzZSBiJycKKworICAgIHJldHVybiBydW4oKnBvcGVuYXJncywgc3Rkb3V0PVBJUEUsIHRpbWVvdXQ9dGltZW91dCwgY2hlY2s9VHJ1ZSwKKyAgICAgICAgICAgICAgICoqa3dhcmdzKS5zdGRvdXQKKworCitjbGFzcyBDb21wbGV0ZWRQcm9jZXNzKG9iamVjdCk6CisgICAgIiIiQSBwcm9jZXNzIHRoYXQgaGFzIGZpbmlzaGVkIHJ1bm5pbmcuCisKKyAgICBUaGlzIGlzIHJldHVybmVkIGJ5IHJ1bigpLgorCisgICAgQXR0cmlidXRlczoKKyAgICAgIGFyZ3M6IFRoZSBsaXN0IG9yIHN0ciBhcmdzIHBhc3NlZCB0byBydW4oKS4KKyAgICAgIHJldHVybmNvZGU6IFRoZSBleGl0IGNvZGUgb2YgdGhlIHByb2Nlc3MsIG5lZ2F0aXZlIGZvciBzaWduYWxzLgorICAgICAgc3Rkb3V0OiBUaGUgc3RhbmRhcmQgb3V0cHV0IChOb25lIGlmIG5vdCBjYXB0dXJlZCkuCisgICAgICBzdGRlcnI6IFRoZSBzdGFuZGFyZCBlcnJvciAoTm9uZSBpZiBub3QgY2FwdHVyZWQpLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCByZXR1cm5jb2RlLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpOgorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IHJldHVybmNvZGUKKyAgICAgICAgc2VsZi5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgYXJncyA9IFsnYXJncz17IXJ9Jy5mb3JtYXQoc2VsZi5hcmdzKSwKKyAgICAgICAgICAgICAgICAncmV0dXJuY29kZT17IXJ9Jy5mb3JtYXQoc2VsZi5yZXR1cm5jb2RlKV0KKyAgICAgICAgaWYgc2VsZi5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnc3Rkb3V0PXshcn0nLmZvcm1hdChzZWxmLnN0ZG91dCkpCisgICAgICAgIGlmIHNlbGYuc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoJ3N0ZGVycj17IXJ9Jy5mb3JtYXQoc2VsZi5zdGRlcnIpKQorICAgICAgICByZXR1cm4gInt9KHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sICcsICcuam9pbihhcmdzKSkKKworICAgIGRlZiBjaGVja19yZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICAiIiJSYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IgaWYgdGhlIGV4aXQgY29kZSBpcyBub24temVyby4iIiIKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlOgorICAgICAgICAgICAgcmFpc2UgQ2FsbGVkUHJvY2Vzc0Vycm9yKHNlbGYucmV0dXJuY29kZSwgc2VsZi5hcmdzLCBzZWxmLnN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGVycikKKworCitkZWYgcnVuKCpwb3BlbmFyZ3MsIGlucHV0PU5vbmUsIHRpbWVvdXQ9Tm9uZSwgY2hlY2s9RmFsc2UsICoqa3dhcmdzKToKKyAgICAiIiJSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGEgQ29tcGxldGVkUHJvY2VzcyBpbnN0YW5jZS4KKworICAgIFRoZSByZXR1cm5lZCBpbnN0YW5jZSB3aWxsIGhhdmUgYXR0cmlidXRlcyBhcmdzLCByZXR1cm5jb2RlLCBzdGRvdXQgYW5kCisgICAgc3RkZXJyLiBCeSBkZWZhdWx0LCBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgbm90IGNhcHR1cmVkLCBhbmQgdGhvc2UgYXR0cmlidXRlcworICAgIHdpbGwgYmUgTm9uZS4gUGFzcyBzdGRvdXQ9UElQRSBhbmQvb3Igc3RkZXJyPVBJUEUgaW4gb3JkZXIgdG8gY2FwdHVyZSB0aGVtLgorCisgICAgSWYgY2hlY2sgaXMgVHJ1ZSBhbmQgdGhlIGV4aXQgY29kZSB3YXMgbm9uLXplcm8sIGl0IHJhaXNlcyBhCisgICAgQ2FsbGVkUHJvY2Vzc0Vycm9yLiBUaGUgQ2FsbGVkUHJvY2Vzc0Vycm9yIG9iamVjdCB3aWxsIGhhdmUgdGhlIHJldHVybiBjb2RlCisgICAgaW4gdGhlIHJldHVybmNvZGUgYXR0cmlidXRlLCBhbmQgb3V0cHV0ICYgc3RkZXJyIGF0dHJpYnV0ZXMgaWYgdGhvc2Ugc3RyZWFtcworICAgIHdlcmUgY2FwdHVyZWQuCisKKyAgICBJZiB0aW1lb3V0IGlzIGdpdmVuLCBhbmQgdGhlIHByb2Nlc3MgdGFrZXMgdG9vIGxvbmcsIGEgVGltZW91dEV4cGlyZWQKKyAgICBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQuCisKKyAgICBUaGVyZSBpcyBhbiBvcHRpb25hbCBhcmd1bWVudCAiaW5wdXQiLCBhbGxvd2luZyB5b3UgdG8KKyAgICBwYXNzIGEgc3RyaW5nIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB5b3UgdXNlIHRoaXMgYXJndW1lbnQKKyAgICB5b3UgbWF5IG5vdCBhbHNvIHVzZSB0aGUgUG9wZW4gY29uc3RydWN0b3IncyAic3RkaW4iIGFyZ3VtZW50LCBhcworICAgIGl0IHdpbGwgYmUgdXNlZCBpbnRlcm5hbGx5LgorCisgICAgVGhlIG90aGVyIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4KKworICAgIElmIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlIGlzIHBhc3NlZCwgdGhlICJpbnB1dCIgYXJndW1lbnQgbXVzdCBiZSBhCisgICAgc3RyaW5nIGFuZCBzdGRvdXQvc3RkZXJyIGluIHRoZSByZXR1cm5lZCBvYmplY3Qgd2lsbCBiZSBzdHJpbmdzIHJhdGhlciB0aGFuCisgICAgYnl0ZXMuCisgICAgIiIiCisgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CiAgICAgICAgIGlmICdzdGRpbicgaW4ga3dhcmdzOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3RkaW4gYW5kIGlucHV0IGFyZ3VtZW50cyBtYXkgbm90IGJvdGggYmUgdXNlZC4nKQotICAgICAgICBpbnB1dGRhdGEgPSBrd2FyZ3NbJ2lucHV0J10KLSAgICAgICAgZGVsIGt3YXJnc1snaW5wdXQnXQogICAgICAgICBrd2FyZ3NbJ3N0ZGluJ10gPSBQSVBFCi0gICAgZWxzZToKLSAgICAgICAgaW5wdXRkYXRhID0gTm9uZQotICAgIHdpdGggUG9wZW4oKnBvcGVuYXJncywgc3Rkb3V0PVBJUEUsICoqa3dhcmdzKSBhcyBwcm9jZXNzOgorCisgICAgd2l0aCBQb3BlbigqcG9wZW5hcmdzLCAqKmt3YXJncykgYXMgcHJvY2VzczoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dGRhdGEsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZShpbnB1dCwgdGltZW91dD10aW1lb3V0KQogICAgICAgICBleGNlcHQgVGltZW91dEV4cGlyZWQ6CiAgICAgICAgICAgICBwcm9jZXNzLmtpbGwoKQotICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCi0gICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChwcm9jZXNzLmFyZ3MsIHRpbWVvdXQsIG91dHB1dD1vdXRwdXQpCisgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQocHJvY2Vzcy5hcmdzLCB0aW1lb3V0LCBvdXRwdXQ9c3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVycikKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcHJvY2Vzcy5raWxsKCkKICAgICAgICAgICAgIHByb2Nlc3Mud2FpdCgpCiAgICAgICAgICAgICByYWlzZQogICAgICAgICByZXRjb2RlID0gcHJvY2Vzcy5wb2xsKCkKLSAgICAgICAgaWYgcmV0Y29kZToKLSAgICAgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBwcm9jZXNzLmFyZ3MsIG91dHB1dD1vdXRwdXQpCi0gICAgcmV0dXJuIG91dHB1dAorICAgICAgICBpZiBjaGVjayBhbmQgcmV0Y29kZToKKyAgICAgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBwcm9jZXNzLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0PXN0ZG91dCwgc3RkZXJyPXN0ZGVycikKKyAgICByZXR1cm4gQ29tcGxldGVkUHJvY2Vzcyhwcm9jZXNzLmFyZ3MsIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyKQogCiAKIGRlZiBsaXN0MmNtZGxpbmUoc2VxKToKQEAgLTc2Myw3ICs4NTQsNyBAQAogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShidWZzaXplLCBpbnQpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJidWZzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAKLSAgICAgICAgaWYgbXN3aW5kb3dzOgorICAgICAgICBpZiBfbXN3aW5kb3dzOgogICAgICAgICAgICAgaWYgcHJlZXhlY19mbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwcmVleGVjX2ZuIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxhdGZvcm1zIikKQEAgLTgyMyw3ICs5MTQsNyBAQAogICAgICAgICAjIHF1aWNrbHkgdGVybWluYXRpbmcgY2hpbGQgY291bGQgbWFrZSBvdXIgZmRzIHVud3JhcHBhYmxlCiAgICAgICAgICMgKHNlZSAjODQ1OCkuCiAKLSAgICAgICAgaWYgbXN3aW5kb3dzOgorICAgICAgICBpZiBfbXN3aW5kb3dzOgogICAgICAgICAgICAgaWYgcDJjd3JpdGUgIT0gLTE6CiAgICAgICAgICAgICAgICAgcDJjd3JpdGUgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUocDJjd3JpdGUuRGV0YWNoKCksIDApCiAgICAgICAgICAgICBpZiBjMnByZWFkICE9IC0xOgpAQCAtOTE1LDE0ICsxMDA2LDQyIEBACiAgICAgICAgICAgICBzZWxmLl9kZXZudWxsID0gb3Mub3Blbihvcy5kZXZudWxsLCBvcy5PX1JEV1IpCiAgICAgICAgIHJldHVybiBzZWxmLl9kZXZudWxsCiAKKyAgICBkZWYgX3N0ZGluX3dyaXRlKHNlbGYsIGlucHV0KToKKyAgICAgICAgaWYgaW5wdXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKKyAgICAgICAgICAgIGV4Y2VwdCBCcm9rZW5QaXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAgIyBjb21tdW5pY2F0ZSgpIG11c3QgaWdub3JlIGJyb2tlbiBwaXBlIGVycm9ycy4KKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5WQUwgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIElzc3VlICMxOTYxMjogT24gV2luZG93cywgc3RkaW4ud3JpdGUoKSBmYWlscyB3aXRoIEVJTlZBTAorICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBwcm9jZXNzIGFscmVhZHkgZXhpdGVkIGJlZm9yZSB0aGUgd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQorICAgICAgICBleGNlcHQgQnJva2VuUGlwZUVycm9yOgorICAgICAgICAgICAgcGFzcyAgIyBjb21tdW5pY2F0ZSgpIG11c3QgaWdub3JlIGJyb2tlbiBwaXBlIGVycm9ycy4KKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVkFMIGFuZCBzZWxmLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKICAgICBkZWYgY29tbXVuaWNhdGUoc2VsZiwgaW5wdXQ9Tm9uZSwgdGltZW91dD1Ob25lKToKICAgICAgICAgIiIiSW50ZXJhY3Qgd2l0aCBwcm9jZXNzOiBTZW5kIGRhdGEgdG8gc3RkaW4uICBSZWFkIGRhdGEgZnJvbQogICAgICAgICBzdGRvdXQgYW5kIHN0ZGVyciwgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZC4gIFdhaXQgZm9yCi0gICAgICAgIHByb2Nlc3MgdG8gdGVybWluYXRlLiAgVGhlIG9wdGlvbmFsIGlucHV0IGFyZ3VtZW50IHNob3VsZCBiZQotICAgICAgICBieXRlcyB0byBiZSBzZW50IHRvIHRoZSBjaGlsZCBwcm9jZXNzLCBvciBOb25lLCBpZiBubyBkYXRhCi0gICAgICAgIHNob3VsZCBiZSBzZW50IHRvIHRoZSBjaGlsZC4KKyAgICAgICAgcHJvY2VzcyB0byB0ZXJtaW5hdGUuCiAKLSAgICAgICAgY29tbXVuaWNhdGUoKSByZXR1cm5zIGEgdHVwbGUgKHN0ZG91dCwgc3RkZXJyKS4iIiIKKyAgICAgICAgVGhlIG9wdGlvbmFsICJpbnB1dCIgYXJndW1lbnQgc2hvdWxkIGJlIGRhdGEgdG8gYmUgc2VudCB0byB0aGUKKyAgICAgICAgY2hpbGQgcHJvY2VzcyAoaWYgc2VsZi51bml2ZXJzYWxfbmV3bGluZXMgaXMgVHJ1ZSwgdGhpcyBzaG91bGQKKyAgICAgICAgYmUgYSBzdHJpbmc7IGlmIGl0IGlzIEZhbHNlLCAiaW5wdXQiIHNob3VsZCBiZSBieXRlcyksIG9yCisgICAgICAgIE5vbmUsIGlmIG5vIGRhdGEgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGNoaWxkLgorCisgICAgICAgIGNvbW11bmljYXRlKCkgcmV0dXJucyBhIHR1cGxlIChzdGRvdXQsIHN0ZGVycikuICBUaGVzZSB3aWxsIGJlCisgICAgICAgIGJ5dGVzIG9yLCBpZiBzZWxmLnVuaXZlcnNhbF9uZXdsaW5lcyB3YXMgVHJ1ZSwgYSBzdHJpbmcuCisgICAgICAgICIiIgogCiAgICAgICAgIGlmIHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZCBhbmQgaW5wdXQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3Qgc2VuZCBpbnB1dCBhZnRlciBzdGFydGluZyBjb21tdW5pY2F0aW9uIikKQEAgLTkzNSwxOCArMTA1NCwxMiBAQAogICAgICAgICAgICAgc3Rkb3V0ID0gTm9uZQogICAgICAgICAgICAgc3RkZXJyID0gTm9uZQogICAgICAgICAgICAgaWYgc2VsZi5zdGRpbjoKLSAgICAgICAgICAgICAgICBpZiBpbnB1dDoKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBJUEUgYW5kIGUuZXJybm8gIT0gZXJybm8uRUlOVkFMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fc3RkaW5fd3JpdGUoaW5wdXQpCiAgICAgICAgICAgICBlbGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgIHN0ZG91dCA9IF9laW50cl9yZXRyeV9jYWxsKHNlbGYuc3Rkb3V0LnJlYWQpCisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc2VsZi5zdGRvdXQucmVhZCgpCiAgICAgICAgICAgICAgICAgc2VsZi5zdGRvdXQuY2xvc2UoKQogICAgICAgICAgICAgZWxpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzdGRlcnIgPSBfZWludHJfcmV0cnlfY2FsbChzZWxmLnN0ZGVyci5yZWFkKQorICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuc3RkZXJyLnJlYWQoKQogICAgICAgICAgICAgICAgIHNlbGYuc3RkZXJyLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYud2FpdCgpCiAgICAgICAgIGVsc2U6CkBAIC05ODUsNyArMTA5OCw3IEBACiAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKIAogCi0gICAgaWYgbXN3aW5kb3dzOgorICAgIGlmIF9tc3dpbmRvd3M6CiAgICAgICAgICMKICAgICAgICAgIyBXaW5kb3dzIG1ldGhvZHMKICAgICAgICAgIwpAQCAtMTE5MCwyMSArMTMwMyw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zdGRlcnJfdGhyZWFkLnN0YXJ0KCkKIAogICAgICAgICAgICAgaWYgc2VsZi5zdGRpbjoKLSAgICAgICAgICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBJUEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21tdW5pY2F0ZSgpIHNob3VsZCBpZ25vcmUgcGlwZSBmdWxsIGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAoZS5lcnJubyA9PSBlcnJuby5FSU5WQUwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnBvbGwoKSBpcyBub3QgTm9uZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTk2MTI6IHN0ZGluLndyaXRlKCkgZmFpbHMgd2l0aCBFSU5WQUwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBwcm9jZXNzIGFscmVhZHkgZXhpdGVkIGJlZm9yZSB0aGUgd3JpdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fc3RkaW5fd3JpdGUoaW5wdXQpCiAKICAgICAgICAgICAgICMgV2FpdCBmb3IgdGhlIHJlYWRlciB0aHJlYWRzLCBvciB0aW1lIG91dC4gIElmIHdlIHRpbWUgb3V0LCB0aGUKICAgICAgICAgICAgICMgdGhyZWFkcyByZW1haW4gcmVhZGluZyBhbmQgdGhlIGZkcyBsZWZ0IG9wZW4gaW4gY2FzZSB0aGUgdXNlcgpAQCAtMTMwOSw3ICsxNDA4LDEwIEBACiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBQSVBFOgogICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBTVERPVVQ6Ci0gICAgICAgICAgICAgICAgZXJyd3JpdGUgPSBjMnB3cml0ZQorICAgICAgICAgICAgICAgIGlmIGMycHdyaXRlICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBlcnJ3cml0ZSA9IGMycHdyaXRlCisgICAgICAgICAgICAgICAgZWxzZTogIyBjaGlsZCdzIHN0ZG91dCBpcyBub3Qgc2V0LCB1c2UgcGFyZW50J3Mgc3Rkb3V0CisgICAgICAgICAgICAgICAgICAgIGVycndyaXRlID0gc3lzLl9fc3Rkb3V0X18uZmlsZW5vKCkKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IERFVk5VTEw6CiAgICAgICAgICAgICAgICAgZXJyd3JpdGUgPSBzZWxmLl9nZXRfZGV2bnVsbCgpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RkZXJyLCBpbnQpOgpAQCAtMTMyMywxNiArMTQyNSw2IEBACiAgICAgICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlKQogCiAKLSAgICAgICAgZGVmIF9jbG9zZV9mZHMoc2VsZiwgZmRzX3RvX2tlZXApOgotICAgICAgICAgICAgc3RhcnRfZmQgPSAzCi0gICAgICAgICAgICBmb3IgZmQgaW4gc29ydGVkKGZkc190b19rZWVwKToKLSAgICAgICAgICAgICAgICBpZiBmZCA+PSBzdGFydF9mZDoKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2VyYW5nZShzdGFydF9mZCwgZmQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0X2ZkID0gZmQgKyAxCi0gICAgICAgICAgICBpZiBzdGFydF9mZCA8PSBNQVhGRDoKLSAgICAgICAgICAgICAgICBvcy5jbG9zZXJhbmdlKHN0YXJ0X2ZkLCBNQVhGRCkKLQotCiAgICAgICAgIGRlZiBfZXhlY3V0ZV9jaGlsZChzZWxmLCBhcmdzLCBleGVjdXRhYmxlLCBwcmVleGVjX2ZuLCBjbG9zZV9mZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2ZkcywgY3dkLCBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbywgY3JlYXRpb25mbGFncywgc2hlbGwsCkBAIC0xNDE4LDcgKzE1MTAsNyBAQAogICAgICAgICAgICAgICAgICMgZXhjZXB0aW9uIChsaW1pdGVkIGluIHNpemUpCiAgICAgICAgICAgICAgICAgZXJycGlwZV9kYXRhID0gYnl0ZWFycmF5KCkKICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gX2VpbnRyX3JldHJ5X2NhbGwob3MucmVhZCwgZXJycGlwZV9yZWFkLCA1MDAwMCkKKyAgICAgICAgICAgICAgICAgICAgcGFydCA9IG9zLnJlYWQoZXJycGlwZV9yZWFkLCA1MDAwMCkKICAgICAgICAgICAgICAgICAgICAgZXJycGlwZV9kYXRhICs9IHBhcnQKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhcnQgb3IgbGVuKGVycnBpcGVfZGF0YSkgPiA1MDAwMDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xNDI4LDEwICsxNTIwLDkgQEAKIAogICAgICAgICAgICAgaWYgZXJycGlwZV9kYXRhOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgX2VpbnRyX3JldHJ5X2NhbGwob3Mud2FpdHBpZCwgc2VsZi5waWQsIDApCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQ0hJTEQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKHNlbGYucGlkLCAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUsIGhleF9lcnJubywgZXJyX21zZyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJwaXBlX2RhdGEuc3BsaXQoYic6JywgMikpCkBAIC0xNTE0LDEwICsxNjA1LDggQEAKICAgICAgICAgZGVmIF90cnlfd2FpdChzZWxmLCB3YWl0X2ZsYWdzKToKICAgICAgICAgICAgICIiIkFsbCBjYWxsZXJzIHRvIHRoaXMgZnVuY3Rpb24gTVVTVCBob2xkIHNlbGYuX3dhaXRwaWRfbG9jay4iIiIKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAocGlkLCBzdHMpID0gX2VpbnRyX3JldHJ5X2NhbGwob3Mud2FpdHBpZCwgc2VsZi5waWQsIHdhaXRfZmxhZ3MpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUNISUxEOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIChwaWQsIHN0cykgPSBvcy53YWl0cGlkKHNlbGYucGlkLCB3YWl0X2ZsYWdzKQorICAgICAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgogICAgICAgICAgICAgICAgICMgVGhpcyBoYXBwZW5zIGlmIFNJR0NMRCBpcyBzZXQgdG8gYmUgaWdub3JlZCBvciB3YWl0aW5nCiAgICAgICAgICAgICAgICAgIyBmb3IgY2hpbGQgcHJvY2Vzc2VzIGhhcyBvdGhlcndpc2UgYmVlbiBkaXNhYmxlZCBmb3Igb3VyCiAgICAgICAgICAgICAgICAgIyBwcm9jZXNzLiAgVGhpcyBjaGlsZCBpcyBkZWFkLCB3ZSBjYW4ndCBnZXQgdGhlIHN0YXR1cy4KQEAgLTE1NzksOSArMTY2OCwxNSBAQAogICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKICAgICAgICAgICAgICAgICAjIEZsdXNoIHN0ZGlvIGJ1ZmZlci4gIFRoaXMgbWlnaHQgYmxvY2ssIGlmIHRoZSB1c2VyIGhhcwogICAgICAgICAgICAgICAgICMgYmVlbiB3cml0aW5nIHRvIC5zdGRpbiBpbiBhbiB1bmNvbnRyb2xsZWQgZmFzaGlvbi4KLSAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBCcm9rZW5QaXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MgICMgY29tbXVuaWNhdGUoKSBtdXN0IGlnbm9yZSBCcm9rZW5QaXBlRXJyb3IuCiAgICAgICAgICAgICAgICAgaWYgbm90IGlucHV0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCcm9rZW5QaXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICAjIGNvbW11bmljYXRlKCkgbXVzdCBpZ25vcmUgQnJva2VuUGlwZUVycm9yLgogCiAgICAgICAgICAgICBzdGRvdXQgPSBOb25lCiAgICAgICAgICAgICBzdGRlcnIgPSBOb25lCkBAIC0xNjI5LDEyICsxNzI0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICsgX1BJUEVfQlVGXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IG9zLndyaXRlKGtleS5mZCwgY2h1bmspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnVucmVnaXN0ZXIoa2V5LmZpbGVvYmopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZmlsZW9iai5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBCcm9rZW5QaXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnVucmVnaXN0ZXIoa2V5LmZpbGVvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5maWxlb2JqLmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnB1dF9vZmZzZXQgPj0gbGVuKHNlbGYuX2lucHV0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnVucmVnaXN0ZXIoa2V5LmZpbGVvYmopCmRpZmYgLS1naXQgYS9MaWIvc3ltYm9sLnB5IGIvTGliL3N5bWJvbC5weQppbmRleCA1Y2Y0YTY1Li43NTQxNDk3IDEwMDc1NQotLS0gYS9MaWIvc3ltYm9sLnB5CisrKyBiL0xpYi9zeW1ib2wucHkKQEAgLTE2LDgyICsxNiw4NSBAQAogZGVjb3JhdG9yID0gMjU5CiBkZWNvcmF0b3JzID0gMjYwCiBkZWNvcmF0ZWQgPSAyNjEKLWZ1bmNkZWYgPSAyNjIKLXBhcmFtZXRlcnMgPSAyNjMKLXR5cGVkYXJnc2xpc3QgPSAyNjQKLXRmcGRlZiA9IDI2NQotdmFyYXJnc2xpc3QgPSAyNjYKLXZmcGRlZiA9IDI2Nwotc3RtdCA9IDI2OAotc2ltcGxlX3N0bXQgPSAyNjkKLXNtYWxsX3N0bXQgPSAyNzAKLWV4cHJfc3RtdCA9IDI3MQotdGVzdGxpc3Rfc3Rhcl9leHByID0gMjcyCi1hdWdhc3NpZ24gPSAyNzMKLWRlbF9zdG10ID0gMjc0Ci1wYXNzX3N0bXQgPSAyNzUKLWZsb3dfc3RtdCA9IDI3NgotYnJlYWtfc3RtdCA9IDI3NwotY29udGludWVfc3RtdCA9IDI3OAotcmV0dXJuX3N0bXQgPSAyNzkKLXlpZWxkX3N0bXQgPSAyODAKLXJhaXNlX3N0bXQgPSAyODEKLWltcG9ydF9zdG10ID0gMjgyCi1pbXBvcnRfbmFtZSA9IDI4MwotaW1wb3J0X2Zyb20gPSAyODQKLWltcG9ydF9hc19uYW1lID0gMjg1Ci1kb3R0ZWRfYXNfbmFtZSA9IDI4NgotaW1wb3J0X2FzX25hbWVzID0gMjg3Ci1kb3R0ZWRfYXNfbmFtZXMgPSAyODgKLWRvdHRlZF9uYW1lID0gMjg5Ci1nbG9iYWxfc3RtdCA9IDI5MAotbm9ubG9jYWxfc3RtdCA9IDI5MQotYXNzZXJ0X3N0bXQgPSAyOTIKLWNvbXBvdW5kX3N0bXQgPSAyOTMKLWlmX3N0bXQgPSAyOTQKLXdoaWxlX3N0bXQgPSAyOTUKLWZvcl9zdG10ID0gMjk2Ci10cnlfc3RtdCA9IDI5Nwotd2l0aF9zdG10ID0gMjk4Ci13aXRoX2l0ZW0gPSAyOTkKLWV4Y2VwdF9jbGF1c2UgPSAzMDAKLXN1aXRlID0gMzAxCi10ZXN0ID0gMzAyCi10ZXN0X25vY29uZCA9IDMwMwotbGFtYmRlZiA9IDMwNAotbGFtYmRlZl9ub2NvbmQgPSAzMDUKLW9yX3Rlc3QgPSAzMDYKLWFuZF90ZXN0ID0gMzA3Ci1ub3RfdGVzdCA9IDMwOAotY29tcGFyaXNvbiA9IDMwOQotY29tcF9vcCA9IDMxMAotc3Rhcl9leHByID0gMzExCi1leHByID0gMzEyCi14b3JfZXhwciA9IDMxMwotYW5kX2V4cHIgPSAzMTQKLXNoaWZ0X2V4cHIgPSAzMTUKLWFyaXRoX2V4cHIgPSAzMTYKLXRlcm0gPSAzMTcKLWZhY3RvciA9IDMxOAotcG93ZXIgPSAzMTkKLWF0b20gPSAzMjAKLXRlc3RsaXN0X2NvbXAgPSAzMjEKLXRyYWlsZXIgPSAzMjIKLXN1YnNjcmlwdGxpc3QgPSAzMjMKLXN1YnNjcmlwdCA9IDMyNAotc2xpY2VvcCA9IDMyNQotZXhwcmxpc3QgPSAzMjYKLXRlc3RsaXN0ID0gMzI3Ci1kaWN0b3JzZXRtYWtlciA9IDMyOAotY2xhc3NkZWYgPSAzMjkKLWFyZ2xpc3QgPSAzMzAKLWFyZ3VtZW50ID0gMzMxCi1jb21wX2l0ZXIgPSAzMzIKLWNvbXBfZm9yID0gMzMzCi1jb21wX2lmID0gMzM0Ci1lbmNvZGluZ19kZWNsID0gMzM1Ci15aWVsZF9leHByID0gMzM2Ci15aWVsZF9hcmcgPSAzMzcKK2FzeW5jX2Z1bmNkZWYgPSAyNjIKK2Z1bmNkZWYgPSAyNjMKK3BhcmFtZXRlcnMgPSAyNjQKK3R5cGVkYXJnc2xpc3QgPSAyNjUKK3RmcGRlZiA9IDI2NgordmFyYXJnc2xpc3QgPSAyNjcKK3ZmcGRlZiA9IDI2OAorc3RtdCA9IDI2OQorc2ltcGxlX3N0bXQgPSAyNzAKK3NtYWxsX3N0bXQgPSAyNzEKK2V4cHJfc3RtdCA9IDI3MgordGVzdGxpc3Rfc3Rhcl9leHByID0gMjczCithdWdhc3NpZ24gPSAyNzQKK2RlbF9zdG10ID0gMjc1CitwYXNzX3N0bXQgPSAyNzYKK2Zsb3dfc3RtdCA9IDI3NworYnJlYWtfc3RtdCA9IDI3OAorY29udGludWVfc3RtdCA9IDI3OQorcmV0dXJuX3N0bXQgPSAyODAKK3lpZWxkX3N0bXQgPSAyODEKK3JhaXNlX3N0bXQgPSAyODIKK2ltcG9ydF9zdG10ID0gMjgzCitpbXBvcnRfbmFtZSA9IDI4NAoraW1wb3J0X2Zyb20gPSAyODUKK2ltcG9ydF9hc19uYW1lID0gMjg2Citkb3R0ZWRfYXNfbmFtZSA9IDI4NworaW1wb3J0X2FzX25hbWVzID0gMjg4Citkb3R0ZWRfYXNfbmFtZXMgPSAyODkKK2RvdHRlZF9uYW1lID0gMjkwCitnbG9iYWxfc3RtdCA9IDI5MQorbm9ubG9jYWxfc3RtdCA9IDI5MgorYXNzZXJ0X3N0bXQgPSAyOTMKK2NvbXBvdW5kX3N0bXQgPSAyOTQKK2FzeW5jX3N0bXQgPSAyOTUKK2lmX3N0bXQgPSAyOTYKK3doaWxlX3N0bXQgPSAyOTcKK2Zvcl9zdG10ID0gMjk4Cit0cnlfc3RtdCA9IDI5OQord2l0aF9zdG10ID0gMzAwCit3aXRoX2l0ZW0gPSAzMDEKK2V4Y2VwdF9jbGF1c2UgPSAzMDIKK3N1aXRlID0gMzAzCit0ZXN0ID0gMzA0Cit0ZXN0X25vY29uZCA9IDMwNQorbGFtYmRlZiA9IDMwNgorbGFtYmRlZl9ub2NvbmQgPSAzMDcKK29yX3Rlc3QgPSAzMDgKK2FuZF90ZXN0ID0gMzA5Citub3RfdGVzdCA9IDMxMAorY29tcGFyaXNvbiA9IDMxMQorY29tcF9vcCA9IDMxMgorc3Rhcl9leHByID0gMzEzCitleHByID0gMzE0Cit4b3JfZXhwciA9IDMxNQorYW5kX2V4cHIgPSAzMTYKK3NoaWZ0X2V4cHIgPSAzMTcKK2FyaXRoX2V4cHIgPSAzMTgKK3Rlcm0gPSAzMTkKK2ZhY3RvciA9IDMyMAorcG93ZXIgPSAzMjEKK2F0b21fZXhwciA9IDMyMgorYXRvbSA9IDMyMwordGVzdGxpc3RfY29tcCA9IDMyNAordHJhaWxlciA9IDMyNQorc3Vic2NyaXB0bGlzdCA9IDMyNgorc3Vic2NyaXB0ID0gMzI3CitzbGljZW9wID0gMzI4CitleHBybGlzdCA9IDMyOQordGVzdGxpc3QgPSAzMzAKK2RpY3RvcnNldG1ha2VyID0gMzMxCitjbGFzc2RlZiA9IDMzMgorYXJnbGlzdCA9IDMzMworYXJndW1lbnQgPSAzMzQKK2NvbXBfaXRlciA9IDMzNQorY29tcF9mb3IgPSAzMzYKK2NvbXBfaWYgPSAzMzcKK2VuY29kaW5nX2RlY2wgPSAzMzgKK3lpZWxkX2V4cHIgPSAzMzkKK3lpZWxkX2FyZyA9IDM0MAogIy0tZW5kIGNvbnN0YW50cy0tCiAKIHN5bV9uYW1lID0ge30KZGlmZiAtLWdpdCBhL0xpYi9zeW10YWJsZS5weSBiL0xpYi9zeW10YWJsZS5weQppbmRleCBlMjMzMTNiLi44NGZlYzRhIDEwMDY0NAotLS0gYS9MaWIvc3ltdGFibGUucHkKKysrIGIvTGliL3N5bXRhYmxlLnB5CkBAIC0yLDcgKzIsNyBAQAogCiBpbXBvcnQgX3N5bXRhYmxlCiBmcm9tIF9zeW10YWJsZSBpbXBvcnQgKFVTRSwgREVGX0dMT0JBTCwgREVGX0xPQ0FMLCBERUZfUEFSQU0sCi0gICAgIERFRl9JTVBPUlQsIERFRl9CT1VORCwgT1BUX0lNUE9SVF9TVEFSLCBTQ09QRV9PRkYsIFNDT1BFX01BU0ssIEZSRUUsCisgICAgIERFRl9JTVBPUlQsIERFRl9CT1VORCwgU0NPUEVfT0ZGLCBTQ09QRV9NQVNLLCBGUkVFLAogICAgICBMT0NBTCwgR0xPQkFMX0lNUExJQ0lULCBHTE9CQUxfRVhQTElDSVQsIENFTEwpCiAKIGltcG9ydCB3ZWFrcmVmCkBAIC03NCw4ICs3NCw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLl90YWJsZS5saW5lbm8KIAogICAgIGRlZiBpc19vcHRpbWl6ZWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBib29sKHNlbGYuX3RhYmxlLnR5cGUgPT0gX3N5bXRhYmxlLlRZUEVfRlVOQ1RJT04KLSAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBzZWxmLl90YWJsZS5vcHRpbWl6ZWQpCisgICAgICAgIHJldHVybiBib29sKHNlbGYuX3RhYmxlLnR5cGUgPT0gX3N5bXRhYmxlLlRZUEVfRlVOQ1RJT04pCiAKICAgICBkZWYgaXNfbmVzdGVkKHNlbGYpOgogICAgICAgICByZXR1cm4gYm9vbChzZWxmLl90YWJsZS5uZXN0ZWQpCkBAIC04NywxMCArODYsNiBAQAogICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgc2NvcGUgdXNlcyBleGVjLiAgRGVwcmVjYXRlZCBtZXRob2QuIiIiCiAgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIGhhc19pbXBvcnRfc3RhcihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIHNjb3BlIHVzZXMgaW1wb3J0ICoiIiIKLSAgICAgICAgcmV0dXJuIGJvb2woc2VsZi5fdGFibGUub3B0aW1pemVkICYgT1BUX0lNUE9SVF9TVEFSKQotCiAgICAgZGVmIGdldF9pZGVudGlmaWVycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3RhYmxlLnN5bWJvbHMua2V5cygpCiAKZGlmZiAtLWdpdCBhL0xpYi9zeXNjb25maWcucHkgYi9MaWIvc3lzY29uZmlnLnB5CmluZGV4IGRiZjc3NjcuLjljMzRiZTAgMTAwNjQ0Ci0tLSBhL0xpYi9zeXNjb25maWcucHkKKysrIGIvTGliL3N5c2NvbmZpZy5weQpAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fS9zaXRlLXBhY2thZ2VzJywKICAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0vc2l0ZS1wYWNrYWdlcycsCiAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9L0luY2x1ZGUnLAotICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L1NjcmlwdHMnLAorICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fS9TY3JpcHRzJywKICAgICAgICAgJ2RhdGEnOiAne3VzZXJiYXNlfScsCiAgICAgICAgIH0sCiAgICAgJ3Bvc2l4X3VzZXInOiB7CkBAIC0xMDksMTMgKzEwOSw4IEBACiAgICAgIyB1bmFibGUgdG8gcmV0cmlldmUgdGhlIHJlYWwgcHJvZ3JhbSBuYW1lCiAgICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLmdldGN3ZCgpKQogCi1pZiBvcy5uYW1lID09ICJudCIgYW5kICJwY2J1aWxkIiBpbiBfUFJPSkVDVF9CQVNFWy04Ol0ubG93ZXIoKToKLSAgICBfUFJPSkVDVF9CQVNFID0gX3NhZmVfcmVhbHBhdGgob3MucGF0aC5qb2luKF9QUk9KRUNUX0JBU0UsIHBhcmRpcikpCi0jIFBDL1ZTNy4xCi1pZiBvcy5uYW1lID09ICJudCIgYW5kICJcXHBjXFx2IiBpbiBfUFJPSkVDVF9CQVNFWy0xMDpdLmxvd2VyKCk6Ci0gICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCBwYXJkaXIsIHBhcmRpcikpCi0jIFBDL0FNRDY0Ci1pZiBvcy5uYW1lID09ICJudCIgYW5kICJcXHBjYnVpbGRcXGFtZDY0IiBpbiBfUFJPSkVDVF9CQVNFWy0xNDpdLmxvd2VyKCk6CitpZiAob3MubmFtZSA9PSAnbnQnIGFuZAorICAgIF9QUk9KRUNUX0JBU0UubG93ZXIoKS5lbmRzd2l0aCgoJ1xccGNidWlsZFxcd2luMzInLCAnXFxwY2J1aWxkXFxhbWQ2NCcpKSk6CiAgICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCBwYXJkaXIsIHBhcmRpcikpCiAKICMgc2V0IGZvciBjcm9zcyBidWlsZHMKQEAgLTEyOSwxMSArMTI0LDkgQEAKICAgICByZXR1cm4gRmFsc2UKIAogX3N5c19ob21lID0gZ2V0YXR0cihzeXMsICdfaG9tZScsIE5vbmUpCi1pZiBfc3lzX2hvbWUgYW5kIG9zLm5hbWUgPT0gJ250JyBhbmQgXAotICAgIF9zeXNfaG9tZS5sb3dlcigpLmVuZHN3aXRoKCgncGNidWlsZCcsICdwY2J1aWxkXFxhbWQ2NCcpKToKLSAgICBfc3lzX2hvbWUgPSBvcy5wYXRoLmRpcm5hbWUoX3N5c19ob21lKQotICAgIGlmIF9zeXNfaG9tZS5lbmRzd2l0aCgncGNidWlsZCcpOiAgICMgbXVzdCBiZSBhbWQ2NAotICAgICAgICBfc3lzX2hvbWUgPSBvcy5wYXRoLmRpcm5hbWUoX3N5c19ob21lKQoraWYgKF9zeXNfaG9tZSBhbmQgb3MubmFtZSA9PSAnbnQnIGFuZAorICAgIF9zeXNfaG9tZS5sb3dlcigpLmVuZHN3aXRoKCgnXFxwY2J1aWxkXFx3aW4zMicsICdcXHBjYnVpbGRcXGFtZDY0JykpKToKKyAgICBfc3lzX2hvbWUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9zeXNfaG9tZSkpCiBkZWYgaXNfcHl0aG9uX2J1aWxkKGNoZWNrX2hvbWU9RmFsc2UpOgogICAgIGlmIGNoZWNrX2hvbWUgYW5kIF9zeXNfaG9tZToKICAgICAgICAgcmV0dXJuIF9pc19weXRob25fc291cmNlX2Rpcihfc3lzX2hvbWUpCkBAIC0yNjcsNyArMjYwLDEyIEBACiAgICAgd2hpbGUgbGVuKHZhcmlhYmxlcykgPiAwOgogICAgICAgICBmb3IgbmFtZSBpbiB0dXBsZSh2YXJpYWJsZXMpOgogICAgICAgICAgICAgdmFsdWUgPSBub3Rkb25lW25hbWVdCi0gICAgICAgICAgICBtID0gX2ZpbmR2YXIxX3J4LnNlYXJjaCh2YWx1ZSkgb3IgX2ZpbmR2YXIyX3J4LnNlYXJjaCh2YWx1ZSkKKyAgICAgICAgICAgIG0xID0gX2ZpbmR2YXIxX3J4LnNlYXJjaCh2YWx1ZSkKKyAgICAgICAgICAgIG0yID0gX2ZpbmR2YXIyX3J4LnNlYXJjaCh2YWx1ZSkKKyAgICAgICAgICAgIGlmIG0xIGFuZCBtMjoKKyAgICAgICAgICAgICAgICBtID0gbTEgaWYgbTEuc3RhcnQoKSA8IG0yLnN0YXJ0KCkgZWxzZSBtMgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtID0gbTEgaWYgbTEgZWxzZSBtMgogICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBuID0gbS5ncm91cCgxKQogICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL3RhcmZpbGUucHkgYi9MaWIvdGFyZmlsZS5weQppbmRleCA1ZjFhOTc5Li43MjFmOWQ3IDEwMDc1NQotLS0gYS9MaWIvdGFyZmlsZS5weQorKysgYi9MaWIvdGFyZmlsZS5weQpAQCAtNDU5LDEzICs0NTksNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzZWxmLmJ1ZikKICAgICAgICAgICAgICAgICBzZWxmLmJ1ZiA9IGIiIgogICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcHR5cGUgPT0gImd6IjoKLSAgICAgICAgICAgICAgICAgICAgIyBUaGUgbmF0aXZlIHpsaWIgY3JjIGlzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLCBidXQKLSAgICAgICAgICAgICAgICAgICAgIyB0aGUgUHl0aG9uIHdyYXBwZXIgaW1wbGljaXRseSBjYXN0cyB0aGF0IHRvIGEgc2lnbmVkIEMKLSAgICAgICAgICAgICAgICAgICAgIyBsb25nLiAgU28sIG9uIGEgMzItYml0IGJveCBzZWxmLmNyYyBtYXkgImxvb2sgbmVnYXRpdmUiLAotICAgICAgICAgICAgICAgICAgICAjIHdoaWxlIHRoZSBzYW1lIGNyYyBvbiBhIDY0LWJpdCBib3ggbWF5ICJsb29rIHBvc2l0aXZlIi4KLSAgICAgICAgICAgICAgICAgICAgIyBUbyBhdm9pZCBpcmtzb21lIHdhcm5pbmdzIGZyb20gdGhlIGBzdHJ1Y3RgIG1vZHVsZSwgZm9yY2UKLSAgICAgICAgICAgICAgICAgICAgIyBpdCB0byBsb29rIHBvc2l0aXZlIG9uIGFsbCBib3hlcy4KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKHN0cnVjdC5wYWNrKCI8TCIsIHNlbGYuY3JjICYgMHhmZmZmZmZmZikpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCBzZWxmLmNyYykpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCBzZWxmLnBvcyAmIDB4ZmZmZkZGRkYpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2V4dGZpbGVvYmo6CkBAIC04MTgsMTEgKzgxMiwxMSBAQAogICAgICAgICAiIiIKICAgICAgICAgaW5mb1sibWFnaWMiXSA9IFBPU0lYX01BR0lDCiAKLSAgICAgICAgaWYgbGVuKGluZm9bImxpbmtuYW1lIl0pID4gTEVOR1RIX0xJTks6CisgICAgICAgIGlmIGxlbihpbmZvWyJsaW5rbmFtZSJdLmVuY29kZShlbmNvZGluZywgZXJyb3JzKSkgPiBMRU5HVEhfTElOSzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxpbmtuYW1lIGlzIHRvbyBsb25nIikKIAotICAgICAgICBpZiBsZW4oaW5mb1sibmFtZSJdKSA+IExFTkdUSF9OQU1FOgotICAgICAgICAgICAgaW5mb1sicHJlZml4Il0sIGluZm9bIm5hbWUiXSA9IHNlbGYuX3Bvc2l4X3NwbGl0X25hbWUoaW5mb1sibmFtZSJdKQorICAgICAgICBpZiBsZW4oaW5mb1sibmFtZSJdLmVuY29kZShlbmNvZGluZywgZXJyb3JzKSkgPiBMRU5HVEhfTkFNRToKKyAgICAgICAgICAgIGluZm9bInByZWZpeCJdLCBpbmZvWyJuYW1lIl0gPSBzZWxmLl9wb3NpeF9zcGxpdF9uYW1lKGluZm9bIm5hbWUiXSwgZW5jb2RpbmcsIGVycm9ycykKIAogICAgICAgICByZXR1cm4gc2VsZi5fY3JlYXRlX2hlYWRlcihpbmZvLCBVU1RBUl9GT1JNQVQsIGVuY29kaW5nLCBlcnJvcnMpCiAKQEAgLTgzMiwxMCArODI2LDEwIEBACiAgICAgICAgIGluZm9bIm1hZ2ljIl0gPSBHTlVfTUFHSUMKIAogICAgICAgICBidWYgPSBiIiIKLSAgICAgICAgaWYgbGVuKGluZm9bImxpbmtuYW1lIl0pID4gTEVOR1RIX0xJTks6CisgICAgICAgIGlmIGxlbihpbmZvWyJsaW5rbmFtZSJdLmVuY29kZShlbmNvZGluZywgZXJyb3JzKSkgPiBMRU5HVEhfTElOSzoKICAgICAgICAgICAgIGJ1ZiArPSBzZWxmLl9jcmVhdGVfZ251X2xvbmdfaGVhZGVyKGluZm9bImxpbmtuYW1lIl0sIEdOVVRZUEVfTE9OR0xJTkssIGVuY29kaW5nLCBlcnJvcnMpCiAKLSAgICAgICAgaWYgbGVuKGluZm9bIm5hbWUiXSkgPiBMRU5HVEhfTkFNRToKKyAgICAgICAgaWYgbGVuKGluZm9bIm5hbWUiXS5lbmNvZGUoZW5jb2RpbmcsIGVycm9ycykpID4gTEVOR1RIX05BTUU6CiAgICAgICAgICAgICBidWYgKz0gc2VsZi5fY3JlYXRlX2dudV9sb25nX2hlYWRlcihpbmZvWyJuYW1lIl0sIEdOVVRZUEVfTE9OR05BTUUsIGVuY29kaW5nLCBlcnJvcnMpCiAKICAgICAgICAgcmV0dXJuIGJ1ZiArIHNlbGYuX2NyZWF0ZV9oZWFkZXIoaW5mbywgR05VX0ZPUk1BVCwgZW5jb2RpbmcsIGVycm9ycykKQEAgLTg5NSwxOSArODg5LDIwIEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gY2xzLl9jcmVhdGVfcGF4X2dlbmVyaWNfaGVhZGVyKHBheF9oZWFkZXJzLCBYR0xUWVBFLCAidXRmLTgiKQogCi0gICAgZGVmIF9wb3NpeF9zcGxpdF9uYW1lKHNlbGYsIG5hbWUpOgorICAgIGRlZiBfcG9zaXhfc3BsaXRfbmFtZShzZWxmLCBuYW1lLCBlbmNvZGluZywgZXJyb3JzKToKICAgICAgICAgIiIiU3BsaXQgYSBuYW1lIGxvbmdlciB0aGFuIDEwMCBjaGFycyBpbnRvIGEgcHJlZml4CiAgICAgICAgICAgIGFuZCBhIG5hbWUgcGFydC4KICAgICAgICAgIiIiCi0gICAgICAgIHByZWZpeCA9IG5hbWVbOkxFTkdUSF9QUkVGSVggKyAxXQotICAgICAgICB3aGlsZSBwcmVmaXggYW5kIHByZWZpeFstMV0gIT0gIi8iOgotICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4WzotMV0KLQotICAgICAgICBuYW1lID0gbmFtZVtsZW4ocHJlZml4KTpdCi0gICAgICAgIHByZWZpeCA9IHByZWZpeFs6LTFdCi0KLSAgICAgICAgaWYgbm90IHByZWZpeCBvciBsZW4obmFtZSkgPiBMRU5HVEhfTkFNRToKKyAgICAgICAgY29tcG9uZW50cyA9IG5hbWUuc3BsaXQoIi8iKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oY29tcG9uZW50cykpOgorICAgICAgICAgICAgcHJlZml4ID0gIi8iLmpvaW4oY29tcG9uZW50c1s6aV0pCisgICAgICAgICAgICBuYW1lID0gIi8iLmpvaW4oY29tcG9uZW50c1tpOl0pCisgICAgICAgICAgICBpZiBsZW4ocHJlZml4LmVuY29kZShlbmNvZGluZywgZXJyb3JzKSkgPD0gTEVOR1RIX1BSRUZJWCBhbmQgXAorICAgICAgICAgICAgICAgICAgICBsZW4obmFtZS5lbmNvZGUoZW5jb2RpbmcsIGVycm9ycykpIDw9IExFTkdUSF9OQU1FOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuYW1lIGlzIHRvbyBsb25nIikKKwogICAgICAgICByZXR1cm4gcHJlZml4LCBuYW1lCiAKICAgICBAc3RhdGljbWV0aG9kCkBAIC0xNDE0LDkgKzE0MDksOSBAQAogICAgICAgICAgICBjYW4gYmUgZGV0ZXJtaW5lZCwgYG1vZGUnIGlzIG92ZXJyaWRkZW4gYnkgYGZpbGVvYmoncyBtb2RlLgogICAgICAgICAgICBgZmlsZW9iaicgaXMgbm90IGNsb3NlZCwgd2hlbiBUYXJGaWxlIGlzIGNsb3NlZC4KICAgICAgICAgIiIiCi0gICAgICAgIG1vZGVzID0geyJyIjogInJiIiwgImEiOiAicitiIiwgInciOiAid2IifQorICAgICAgICBtb2RlcyA9IHsiciI6ICJyYiIsICJhIjogInIrYiIsICJ3IjogIndiIiwgIngiOiAieGIifQogICAgICAgICBpZiBtb2RlIG5vdCBpbiBtb2RlczoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1vZGUgbXVzdCBiZSAncicsICdhJyBvciAndyciKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibW9kZSBtdXN0IGJlICdyJywgJ2EnLCAndycgb3IgJ3gnIikKICAgICAgICAgc2VsZi5tb2RlID0gbW9kZQogICAgICAgICBzZWxmLl9tb2RlID0gbW9kZXNbbW9kZV0KIApAQCAtMTQ4OCw3ICsxNDgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEhlYWRlckVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3Ioc3RyKGUpKQogCi0gICAgICAgICAgICBpZiBzZWxmLm1vZGUgaW4gImF3IjoKKyAgICAgICAgICAgIGlmIHNlbGYubW9kZSBpbiAoImEiLCAidyIsICJ4Iik6CiAgICAgICAgICAgICAgICAgc2VsZi5fbG9hZGVkID0gVHJ1ZQogCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5wYXhfaGVhZGVyczoKQEAgLTE1MjksNiArMTUyNCwxNSBAQAogICAgICAgICAgICAndzpiejInICAgICAgb3BlbiBmb3Igd3JpdGluZyB3aXRoIGJ6aXAyIGNvbXByZXNzaW9uCiAgICAgICAgICAgICd3Onh6JyAgICAgICBvcGVuIGZvciB3cml0aW5nIHdpdGggbHptYSBjb21wcmVzc2lvbgogCisgICAgICAgICAgICd4JyBvciAneDonICBjcmVhdGUgYSB0YXJmaWxlIGV4Y2x1c2l2ZWx5IHdpdGhvdXQgY29tcHJlc3Npb24sIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICBhbiBleGNlcHRpb24gaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBjcmVhdGVkCisgICAgICAgICAgICd4Omd6JyAgICAgICBjcmVhdGUgYSBnemlwIGNvbXByZXNzZWQgdGFyZmlsZSwgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNyZWF0ZWQKKyAgICAgICAgICAgJ3g6YnoyJyAgICAgIGNyZWF0ZSBhIGJ6aXAyIGNvbXByZXNzZWQgdGFyZmlsZSwgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNyZWF0ZWQKKyAgICAgICAgICAgJ3g6eHonICAgICAgIGNyZWF0ZSBhbiBsem1hIGNvbXByZXNzZWQgdGFyZmlsZSwgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNyZWF0ZWQKKwogICAgICAgICAgICAncnwqJyAgICAgICAgb3BlbiBhIHN0cmVhbSBvZiB0YXIgYmxvY2tzIHdpdGggdHJhbnNwYXJlbnQgY29tcHJlc3Npb24KICAgICAgICAgICAgJ3J8JyAgICAgICAgIG9wZW4gYW4gdW5jb21wcmVzc2VkIHN0cmVhbSBvZiB0YXIgYmxvY2tzIGZvciByZWFkaW5nCiAgICAgICAgICAgICdyfGd6JyAgICAgICBvcGVuIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmVhbSBvZiB0YXIgYmxvY2tzCkBAIC0xNTg3LDcgKzE1OTEsNyBAQAogICAgICAgICAgICAgdC5fZXh0ZmlsZW9iaiA9IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gdAogCi0gICAgICAgIGVsaWYgbW9kZSBpbiAoImEiLCAidyIpOgorICAgICAgICBlbGlmIG1vZGUgaW4gKCJhIiwgInciLCAieCIpOgogICAgICAgICAgICAgcmV0dXJuIGNscy50YXJvcGVuKG5hbWUsIG1vZGUsIGZpbGVvYmosICoqa3dhcmdzKQogCiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuZGlzY2VybmlibGUgbW9kZSIpCkBAIC0xNTk2LDggKzE2MDAsOCBAQAogICAgIGRlZiB0YXJvcGVuKGNscywgbmFtZSwgbW9kZT0iciIsIGZpbGVvYmo9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgICAiIiJPcGVuIHVuY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSBuYW1lIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCiAgICAgICAgICIiIgotICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAiYSIsICJ3Iik6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtb2RlIG11c3QgYmUgJ3InLCAnYScgb3IgJ3cnIikKKyAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJyIiwgImEiLCAidyIsICJ4Iik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtb2RlIG11c3QgYmUgJ3InLCAnYScsICd3JyBvciAneCciKQogICAgICAgICByZXR1cm4gY2xzKG5hbWUsIG1vZGUsIGZpbGVvYmosICoqa3dhcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0xNjA1LDggKzE2MDksOCBAQAogICAgICAgICAiIiJPcGVuIGd6aXAgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSBuYW1lIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCiAgICAgICAgICAgIEFwcGVuZGluZyBpcyBub3QgYWxsb3dlZC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG1vZGUgbm90IGluICgiciIsICJ3Iik6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtb2RlIG11c3QgYmUgJ3InIG9yICd3JyIpCisgICAgICAgIGlmIG1vZGUgbm90IGluICgiciIsICJ3IiwgIngiKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1vZGUgbXVzdCBiZSAncicsICd3JyBvciAneCciKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBnemlwCkBAIC0xNjM5LDggKzE2NDMsOCBAQAogICAgICAgICAiIiJPcGVuIGJ6aXAyIGNvbXByZXNzZWQgdGFyIGFyY2hpdmUgbmFtZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLgogICAgICAgICAgICBBcHBlbmRpbmcgaXMgbm90IGFsbG93ZWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAidyIpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibW9kZSBtdXN0IGJlICdyJyBvciAndycuIikKKyAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJyIiwgInciLCAieCIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibW9kZSBtdXN0IGJlICdyJywgJ3cnIG9yICd4JyIpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IGJ6MgpAQCAtMTY2OCw4ICsxNjcyLDggQEAKICAgICAgICAgIiIiT3BlbiBsem1hIGNvbXByZXNzZWQgdGFyIGFyY2hpdmUgbmFtZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLgogICAgICAgICAgICBBcHBlbmRpbmcgaXMgbm90IGFsbG93ZWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAidyIpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibW9kZSBtdXN0IGJlICdyJyBvciAndyciKQorICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAidyIsICJ4Iik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtb2RlIG11c3QgYmUgJ3InLCAndycgb3IgJ3gnIikKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgbHptYQpAQCAtMTcxMSw3ICsxNzE1LDcgQEAKIAogICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgc2VsZi5tb2RlIGluICJhdyI6CisgICAgICAgICAgICBpZiBzZWxmLm1vZGUgaW4gKCJhIiwgInciLCAieCIpOgogICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShOVUwgKiAoQkxPQ0tTSVpFICogMikpCiAgICAgICAgICAgICAgICAgc2VsZi5vZmZzZXQgKz0gKEJMT0NLU0laRSAqIDIpCiAgICAgICAgICAgICAgICAgIyBmaWxsIHVwIHRoZSBlbmQgd2l0aCB6ZXJvLWJsb2NrcwpAQCAtMTc1MSwxMyArMTc1NSwxNSBAQAogICAgICAgICByZXR1cm4gW3RhcmluZm8ubmFtZSBmb3IgdGFyaW5mbyBpbiBzZWxmLmdldG1lbWJlcnMoKV0KIAogICAgIGRlZiBnZXR0YXJpbmZvKHNlbGYsIG5hbWU9Tm9uZSwgYXJjbmFtZT1Ob25lLCBmaWxlb2JqPU5vbmUpOgotICAgICAgICAiIiJDcmVhdGUgYSBUYXJJbmZvIG9iamVjdCBmb3IgZWl0aGVyIHRoZSBmaWxlIGBuYW1lJyBvciB0aGUgZmlsZQotICAgICAgICAgICBvYmplY3QgYGZpbGVvYmonICh1c2luZyBvcy5mc3RhdCBvbiBpdHMgZmlsZSBkZXNjcmlwdG9yKS4gWW91IGNhbgotICAgICAgICAgICBtb2RpZnkgc29tZSBvZiB0aGUgVGFySW5mbydzIGF0dHJpYnV0ZXMgYmVmb3JlIHlvdSBhZGQgaXQgdXNpbmcKLSAgICAgICAgICAgYWRkZmlsZSgpLiBJZiBnaXZlbiwgYGFyY25hbWUnIHNwZWNpZmllcyBhbiBhbHRlcm5hdGl2ZSBuYW1lIGZvciB0aGUKLSAgICAgICAgICAgZmlsZSBpbiB0aGUgYXJjaGl2ZS4KKyAgICAgICAgIiIiQ3JlYXRlIGEgVGFySW5mbyBvYmplY3QgZnJvbSB0aGUgcmVzdWx0IG9mIG9zLnN0YXQgb3IgZXF1aXZhbGVudAorICAgICAgICAgICBvbiBhbiBleGlzdGluZyBmaWxlLiBUaGUgZmlsZSBpcyBlaXRoZXIgbmFtZWQgYnkgYG5hbWUnLCBvcgorICAgICAgICAgICBzcGVjaWZpZWQgYXMgYSBmaWxlIG9iamVjdCBgZmlsZW9iaicgd2l0aCBhIGZpbGUgZGVzY3JpcHRvci4gSWYKKyAgICAgICAgICAgZ2l2ZW4sIGBhcmNuYW1lJyBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgbmFtZSBmb3IgdGhlIGZpbGUgaW4gdGhlCisgICAgICAgICAgIGFyY2hpdmUsIG90aGVyd2lzZSwgdGhlIG5hbWUgaXMgdGFrZW4gZnJvbSB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBvZgorICAgICAgICAgICAnZmlsZW9iaicsIG9yIHRoZSAnbmFtZScgYXJndW1lbnQuIFRoZSBuYW1lIHNob3VsZCBiZSBhIHRleHQKKyAgICAgICAgICAgc3RyaW5nLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fY2hlY2soImF3IikKKyAgICAgICAgc2VsZi5fY2hlY2soImF3eCIpCiAKICAgICAgICAgIyBXaGVuIGZpbGVvYmogaXMgZ2l2ZW4sIHJlcGxhY2UgbmFtZSBieQogICAgICAgICAjIGZpbGVvYmoncyByZWFsIG5hbWUuCkBAIC0xNzc2LDcgKzE3ODIsNyBAQAogICAgICAgICAjIE5vdywgZmlsbCB0aGUgVGFySW5mbyBvYmplY3Qgd2l0aAogICAgICAgICAjIGluZm9ybWF0aW9uIHNwZWNpZmljIGZvciB0aGUgZmlsZS4KICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyaW5mbygpCi0gICAgICAgIHRhcmluZm8udGFyZmlsZSA9IHNlbGYKKyAgICAgICAgdGFyaW5mby50YXJmaWxlID0gc2VsZiAgIyBOb3QgbmVlZGVkCiAKICAgICAgICAgIyBVc2Ugb3Muc3RhdCBvciBvcy5sc3RhdCwgZGVwZW5kaW5nIG9uIHBsYXRmb3JtCiAgICAgICAgICMgYW5kIGlmIHN5bWxpbmtzIHNoYWxsIGJlIHJlc29sdmVkLgpAQCAtMTg0OCwxNCArMTg1NCwxNyBAQAogICAgICAgICAgICAgICAgIHRhcmluZm8uZGV2bWlub3IgPSBvcy5taW5vcihzdGF0cmVzLnN0X3JkZXYpCiAgICAgICAgIHJldHVybiB0YXJpbmZvCiAKLSAgICBkZWYgbGlzdChzZWxmLCB2ZXJib3NlPVRydWUpOgorICAgIGRlZiBsaXN0KHNlbGYsIHZlcmJvc2U9VHJ1ZSwgKiwgbWVtYmVycz1Ob25lKToKICAgICAgICAgIiIiUHJpbnQgYSB0YWJsZSBvZiBjb250ZW50cyB0byBzeXMuc3Rkb3V0LiBJZiBgdmVyYm9zZScgaXMgRmFsc2UsIG9ubHkKICAgICAgICAgICAgdGhlIG5hbWVzIG9mIHRoZSBtZW1iZXJzIGFyZSBwcmludGVkLiBJZiBpdCBpcyBUcnVlLCBhbiBgbHMgLWwnLWxpa2UKLSAgICAgICAgICAgb3V0cHV0IGlzIHByb2R1Y2VkLgorICAgICAgICAgICBvdXRwdXQgaXMgcHJvZHVjZWQuIGBtZW1iZXJzJyBpcyBvcHRpb25hbCBhbmQgbXVzdCBiZSBhIHN1YnNldCBvZiB0aGUKKyAgICAgICAgICAgbGlzdCByZXR1cm5lZCBieSBnZXRtZW1iZXJzKCkuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVjaygpCiAKLSAgICAgICAgZm9yIHRhcmluZm8gaW4gc2VsZjoKKyAgICAgICAgaWYgbWVtYmVycyBpcyBOb25lOgorICAgICAgICAgICAgbWVtYmVycyA9IHNlbGYKKyAgICAgICAgZm9yIHRhcmluZm8gaW4gbWVtYmVyczoKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICAgX3NhZmVfcHJpbnQoc3RhdC5maWxlbW9kZSh0YXJpbmZvLm1vZGUpKQogICAgICAgICAgICAgICAgIF9zYWZlX3ByaW50KCIlcy8lcyIgJSAodGFyaW5mby51bmFtZSBvciB0YXJpbmZvLnVpZCwKQEAgLTE4ODgsNyArMTg5Nyw3IEBACiAgICAgICAgICAgIFRhckluZm8gb2JqZWN0LCBpZiBpdCByZXR1cm5zIE5vbmUgdGhlIFRhckluZm8gb2JqZWN0IHdpbGwgYmUKICAgICAgICAgICAgZXhjbHVkZWQgZnJvbSB0aGUgYXJjaGl2ZS4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2NoZWNrKCJhdyIpCisgICAgICAgIHNlbGYuX2NoZWNrKCJhd3giKQogCiAgICAgICAgIGlmIGFyY25hbWUgaXMgTm9uZToKICAgICAgICAgICAgIGFyY25hbWUgPSBuYW1lCkBAIC0xOTQwLDEyICsxOTQ5LDExIEBACiAKICAgICBkZWYgYWRkZmlsZShzZWxmLCB0YXJpbmZvLCBmaWxlb2JqPU5vbmUpOgogICAgICAgICAiIiJBZGQgdGhlIFRhckluZm8gb2JqZWN0IGB0YXJpbmZvJyB0byB0aGUgYXJjaGl2ZS4gSWYgYGZpbGVvYmonIGlzCi0gICAgICAgICAgIGdpdmVuLCB0YXJpbmZvLnNpemUgYnl0ZXMgYXJlIHJlYWQgZnJvbSBpdCBhbmQgYWRkZWQgdG8gdGhlIGFyY2hpdmUuCi0gICAgICAgICAgIFlvdSBjYW4gY3JlYXRlIFRhckluZm8gb2JqZWN0cyB1c2luZyBnZXR0YXJpbmZvKCkuCi0gICAgICAgICAgIE9uIFdpbmRvd3MgcGxhdGZvcm1zLCBgZmlsZW9iaicgc2hvdWxkIGFsd2F5cyBiZSBvcGVuZWQgd2l0aCBtb2RlCi0gICAgICAgICAgICdyYicgdG8gYXZvaWQgaXJyaXRhdGlvbiBhYm91dCB0aGUgZmlsZSBzaXplLgorICAgICAgICAgICBnaXZlbiwgaXQgc2hvdWxkIGJlIGEgYmluYXJ5IGZpbGUsIGFuZCB0YXJpbmZvLnNpemUgYnl0ZXMgYXJlIHJlYWQKKyAgICAgICAgICAgZnJvbSBpdCBhbmQgYWRkZWQgdG8gdGhlIGFyY2hpdmUuIFlvdSBjYW4gY3JlYXRlIFRhckluZm8gb2JqZWN0cworICAgICAgICAgICBkaXJlY3RseSwgb3IgYnkgdXNpbmcgZ2V0dGFyaW5mbygpLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fY2hlY2soImF3IikKKyAgICAgICAgc2VsZi5fY2hlY2soImF3eCIpCiAKICAgICAgICAgdGFyaW5mbyA9IGNvcHkuY29weSh0YXJpbmZvKQogCkBAIC0xOTY0LDEyICsxOTcyLDEzIEBACiAKICAgICAgICAgc2VsZi5tZW1iZXJzLmFwcGVuZCh0YXJpbmZvKQogCi0gICAgZGVmIGV4dHJhY3RhbGwoc2VsZiwgcGF0aD0iLiIsIG1lbWJlcnM9Tm9uZSk6CisgICAgZGVmIGV4dHJhY3RhbGwoc2VsZiwgcGF0aD0iLiIsIG1lbWJlcnM9Tm9uZSwgKiwgbnVtZXJpY19vd25lcj1GYWxzZSk6CiAgICAgICAgICIiIkV4dHJhY3QgYWxsIG1lbWJlcnMgZnJvbSB0aGUgYXJjaGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nCiAgICAgICAgICAgIGRpcmVjdG9yeSBhbmQgc2V0IG93bmVyLCBtb2RpZmljYXRpb24gdGltZSBhbmQgcGVybWlzc2lvbnMgb24KICAgICAgICAgICAgZGlyZWN0b3JpZXMgYWZ0ZXJ3YXJkcy4gYHBhdGgnIHNwZWNpZmllcyBhIGRpZmZlcmVudCBkaXJlY3RvcnkKICAgICAgICAgICAgdG8gZXh0cmFjdCB0by4gYG1lbWJlcnMnIGlzIG9wdGlvbmFsIGFuZCBtdXN0IGJlIGEgc3Vic2V0IG9mIHRoZQotICAgICAgICAgICBsaXN0IHJldHVybmVkIGJ5IGdldG1lbWJlcnMoKS4KKyAgICAgICAgICAgbGlzdCByZXR1cm5lZCBieSBnZXRtZW1iZXJzKCkuIElmIGBudW1lcmljX293bmVyYCBpcyBUcnVlLCBvbmx5CisgICAgICAgICAgIHRoZSBudW1iZXJzIGZvciB1c2VyL2dyb3VwIG5hbWVzIGFyZSB1c2VkIGFuZCBub3QgdGhlIG5hbWVzLgogICAgICAgICAiIiIKICAgICAgICAgZGlyZWN0b3JpZXMgPSBbXQogCkBAIC0xOTgzLDcgKzE5OTIsOCBAQAogICAgICAgICAgICAgICAgIHRhcmluZm8gPSBjb3B5LmNvcHkodGFyaW5mbykKICAgICAgICAgICAgICAgICB0YXJpbmZvLm1vZGUgPSAwbzcwMAogICAgICAgICAgICAgIyBEbyBub3Qgc2V0X2F0dHJzIGRpcmVjdG9yaWVzLCBhcyB3ZSB3aWxsIGRvIHRoYXQgZnVydGhlciBkb3duCi0gICAgICAgICAgICBzZWxmLmV4dHJhY3QodGFyaW5mbywgcGF0aCwgc2V0X2F0dHJzPW5vdCB0YXJpbmZvLmlzZGlyKCkpCisgICAgICAgICAgICBzZWxmLmV4dHJhY3QodGFyaW5mbywgcGF0aCwgc2V0X2F0dHJzPW5vdCB0YXJpbmZvLmlzZGlyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19vd25lcj1udW1lcmljX293bmVyKQogCiAgICAgICAgICMgUmV2ZXJzZSBzb3J0IGRpcmVjdG9yaWVzLgogICAgICAgICBkaXJlY3Rvcmllcy5zb3J0KGtleT1sYW1iZGEgYTogYS5uYW1lKQpAQCAtMTk5Myw3ICsyMDAzLDcgQEAKICAgICAgICAgZm9yIHRhcmluZm8gaW4gZGlyZWN0b3JpZXM6CiAgICAgICAgICAgICBkaXJwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIHRhcmluZm8ubmFtZSkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmNob3duKHRhcmluZm8sIGRpcnBhdGgpCisgICAgICAgICAgICAgICAgc2VsZi5jaG93bih0YXJpbmZvLCBkaXJwYXRoLCBudW1lcmljX293bmVyPW51bWVyaWNfb3duZXIpCiAgICAgICAgICAgICAgICAgc2VsZi51dGltZSh0YXJpbmZvLCBkaXJwYXRoKQogICAgICAgICAgICAgICAgIHNlbGYuY2htb2QodGFyaW5mbywgZGlycGF0aCkKICAgICAgICAgICAgIGV4Y2VwdCBFeHRyYWN0RXJyb3IgYXMgZToKQEAgLTIwMDIsMTIgKzIwMTIsMTQgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMSwgInRhcmZpbGU6ICVzIiAlIGUpCiAKLSAgICBkZWYgZXh0cmFjdChzZWxmLCBtZW1iZXIsIHBhdGg9IiIsIHNldF9hdHRycz1UcnVlKToKKyAgICBkZWYgZXh0cmFjdChzZWxmLCBtZW1iZXIsIHBhdGg9IiIsIHNldF9hdHRycz1UcnVlLCAqLCBudW1lcmljX293bmVyPUZhbHNlKToKICAgICAgICAgIiIiRXh0cmFjdCBhIG1lbWJlciBmcm9tIHRoZSBhcmNoaXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LAogICAgICAgICAgICB1c2luZyBpdHMgZnVsbCBuYW1lLiBJdHMgZmlsZSBpbmZvcm1hdGlvbiBpcyBleHRyYWN0ZWQgYXMgYWNjdXJhdGVseQogICAgICAgICAgICBhcyBwb3NzaWJsZS4gYG1lbWJlcicgbWF5IGJlIGEgZmlsZW5hbWUgb3IgYSBUYXJJbmZvIG9iamVjdC4gWW91IGNhbgogICAgICAgICAgICBzcGVjaWZ5IGEgZGlmZmVyZW50IGRpcmVjdG9yeSB1c2luZyBgcGF0aCcuIEZpbGUgYXR0cmlidXRlcyAob3duZXIsCi0gICAgICAgICAgIG10aW1lLCBtb2RlKSBhcmUgc2V0IHVubGVzcyBgc2V0X2F0dHJzJyBpcyBGYWxzZS4KKyAgICAgICAgICAgbXRpbWUsIG1vZGUpIGFyZSBzZXQgdW5sZXNzIGBzZXRfYXR0cnMnIGlzIEZhbHNlLiBJZiBgbnVtZXJpY19vd25lcmAKKyAgICAgICAgICAgaXMgVHJ1ZSwgb25seSB0aGUgbnVtYmVycyBmb3IgdXNlci9ncm91cCBuYW1lcyBhcmUgdXNlZCBhbmQgbm90CisgICAgICAgICAgIHRoZSBuYW1lcy4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrKCJyIikKIApAQCAtMjAyMiw3ICsyMDM0LDggQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9leHRyYWN0X21lbWJlcih0YXJpbmZvLCBvcy5wYXRoLmpvaW4ocGF0aCwgdGFyaW5mby5uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9hdHRycz1zZXRfYXR0cnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfYXR0cnM9c2V0X2F0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19vd25lcj1udW1lcmljX293bmVyKQogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmxldmVsID4gMDoKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMjA2OCw3ICsyMDgxLDggQEAKICAgICAgICAgICAgICMgYmxrZGV2LCBldGMuKSwgcmV0dXJuIE5vbmUgaW5zdGVhZCBvZiBhIGZpbGUgb2JqZWN0LgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRlZiBfZXh0cmFjdF9tZW1iZXIoc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCwgc2V0X2F0dHJzPVRydWUpOgorICAgIGRlZiBfZXh0cmFjdF9tZW1iZXIoc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCwgc2V0X2F0dHJzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX293bmVyPUZhbHNlKToKICAgICAgICAgIiIiRXh0cmFjdCB0aGUgVGFySW5mbyBvYmplY3QgdGFyaW5mbyB0byBhIHBoeXNpY2FsCiAgICAgICAgICAgIGZpbGUgY2FsbGVkIHRhcmdldHBhdGguCiAgICAgICAgICIiIgpAQCAtMjEwNiw3ICsyMTIwLDcgQEAKICAgICAgICAgICAgIHNlbGYubWFrZWZpbGUodGFyaW5mbywgdGFyZ2V0cGF0aCkKIAogICAgICAgICBpZiBzZXRfYXR0cnM6Ci0gICAgICAgICAgICBzZWxmLmNob3duKHRhcmluZm8sIHRhcmdldHBhdGgpCisgICAgICAgICAgICBzZWxmLmNob3duKHRhcmluZm8sIHRhcmdldHBhdGgsIG51bWVyaWNfb3duZXIpCiAgICAgICAgICAgICBpZiBub3QgdGFyaW5mby5pc3N5bSgpOgogICAgICAgICAgICAgICAgIHNlbGYuY2htb2QodGFyaW5mbywgdGFyZ2V0cGF0aCkKICAgICAgICAgICAgICAgICBzZWxmLnV0aW1lKHRhcmluZm8sIHRhcmdldHBhdGgpCkBAIC0yMTM2LDEwICsyMTUwLDEwIEBACiAgICAgICAgICAgICAgICAgZm9yIG9mZnNldCwgc2l6ZSBpbiB0YXJpbmZvLnNwYXJzZToKICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNlZWsob2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICBjb3B5ZmlsZW9iaihzb3VyY2UsIHRhcmdldCwgc2l6ZSwgUmVhZEVycm9yKQorICAgICAgICAgICAgICAgIHRhcmdldC5zZWVrKHRhcmluZm8uc2l6ZSkKKyAgICAgICAgICAgICAgICB0YXJnZXQudHJ1bmNhdGUoKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjb3B5ZmlsZW9iaihzb3VyY2UsIHRhcmdldCwgdGFyaW5mby5zaXplLCBSZWFkRXJyb3IpCi0gICAgICAgICAgICB0YXJnZXQuc2Vlayh0YXJpbmZvLnNpemUpCi0gICAgICAgICAgICB0YXJnZXQudHJ1bmNhdGUoKQogCiAgICAgZGVmIG1ha2V1bmtub3duKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgogICAgICAgICAiIiJNYWtlIGEgZmlsZSBmcm9tIGEgVGFySW5mbyBvYmplY3Qgd2l0aCBhbiB1bmtub3duIHR5cGUKQEAgLTIxOTUsMTkgKzIyMDksMjQgQEAKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoInVuYWJsZSB0byByZXNvbHZlIGxpbmsgaW5zaWRlIGFyY2hpdmUiKQogCi0gICAgZGVmIGNob3duKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgotICAgICAgICAiIiJTZXQgb3duZXIgb2YgdGFyZ2V0cGF0aCBhY2NvcmRpbmcgdG8gdGFyaW5mby4KKyAgICBkZWYgY2hvd24oc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCwgbnVtZXJpY19vd25lcik6CisgICAgICAgICIiIlNldCBvd25lciBvZiB0YXJnZXRwYXRoIGFjY29yZGluZyB0byB0YXJpbmZvLiBJZiBudW1lcmljX293bmVyCisgICAgICAgICAgIGlzIFRydWUsIHVzZSAuZ2lkLy51aWQgaW5zdGVhZCBvZiAuZ25hbWUvLnVuYW1lLgogICAgICAgICAiIiIKICAgICAgICAgaWYgcHdkIGFuZCBoYXNhdHRyKG9zLCAiZ2V0ZXVpZCIpIGFuZCBvcy5nZXRldWlkKCkgPT0gMDoKICAgICAgICAgICAgICMgV2UgaGF2ZSB0byBiZSByb290IHRvIGRvIHNvLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGcgPSBncnAuZ2V0Z3JuYW0odGFyaW5mby5nbmFtZSlbMl0KLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGlmIG51bWVyaWNfb3duZXI6CiAgICAgICAgICAgICAgICAgZyA9IHRhcmluZm8uZ2lkCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdSA9IHB3ZC5nZXRwd25hbSh0YXJpbmZvLnVuYW1lKVsyXQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgIHUgPSB0YXJpbmZvLnVpZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGcgPSBncnAuZ2V0Z3JuYW0odGFyaW5mby5nbmFtZSlbMl0KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGcgPSB0YXJpbmZvLmdpZAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdSA9IHB3ZC5nZXRwd25hbSh0YXJpbmZvLnVuYW1lKVsyXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgdSA9IHRhcmluZm8udWlkCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaWYgdGFyaW5mby5pc3N5bSgpIGFuZCBoYXNhdHRyKG9zLCAibGNob3duIik6CiAgICAgICAgICAgICAgICAgICAgIG9zLmxjaG93bih0YXJnZXRwYXRoLCB1LCBnKQpkaWZmIC0tZ2l0IGEvTGliL3RlbG5ldGxpYi5weSBiL0xpYi90ZWxuZXRsaWIucHkKaW5kZXggNTE3MzhmMC4uNzJkYWJjNyAxMDA2NDQKLS0tIGEvTGliL3RlbG5ldGxpYi5weQorKysgYi9MaWIvdGVsbmV0bGliLnB5CkBAIC0zNiwxMCArMzYsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHNlbGVjdG9ycwotdHJ5OgotICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIF90aW1lCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCitmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQogCiBfX2FsbF9fID0gWyJUZWxuZXQiXQogCkBAIC0yNjUsOCArMjYyLDggQEAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNsb3NlIHRoZSBjb25uZWN0aW9uLiIiIgogICAgICAgICBzb2NrID0gc2VsZi5zb2NrCi0gICAgICAgIHNlbGYuc29jayA9IDAKLSAgICAgICAgc2VsZi5lb2YgPSAxCisgICAgICAgIHNlbGYuc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5lb2YgPSBUcnVlCiAgICAgICAgIHNlbGYuaWFjc2VxID0gYicnCiAgICAgICAgIHNlbGYuc2IgPSAwCiAgICAgICAgIGlmIHNvY2s6CmRpZmYgLS1naXQgYS9MaWIvdGVtcGZpbGUucHkgYi9MaWIvdGVtcGZpbGUucHkKaW5kZXggMDUzNzIyOC4uYWQ2ODdiOSAxMDA2NDQKLS0tIGEvTGliL3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZW1wZmlsZS5weQpAQCAtNiw2ICs2LDE0IEBACiBleGNlcHQgZm9yICdta3RlbXAnLiAgJ21rdGVtcCcgaXMgc3ViamVjdCB0byByYWNlIGNvbmRpdGlvbnMgYW5kCiBzaG91bGQgbm90IGJlIHVzZWQ7IGl0IGlzIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9ubHkuCiAKK1RoZSBkZWZhdWx0IHBhdGggbmFtZXMgYXJlIHJldHVybmVkIGFzIHN0ci4gIElmIHlvdSBzdXBwbHkgYnl0ZXMgYXMKK2lucHV0LCBhbGwgcmV0dXJuIHZhbHVlcyB3aWxsIGJlIGluIGJ5dGVzLiAgRXg6CisKKyAgICA+Pj4gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgKDQsICcvdG1wL3RtcHRwdTluaW44JykKKyAgICA+Pj4gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9YicnKQorICAgIGInL3RtcC90bXBwYmk4ZjBoeScKKwogVGhpcyBtb2R1bGUgYWxzbyBwcm92aWRlcyBzb21lIGRhdGEgaXRlbXMgdG8gdGhlIHVzZXI6CiAKICAgVE1QX01BWCAgLSBtYXhpbXVtIG51bWJlciBvZiBuYW1lcyB0aGF0IHdpbGwgYmUgdHJpZWQgYmVmb3JlCkBAIC0yMSw3ICsyOSw4IEBACiAgICAgIm1rc3RlbXAiLCAibWtkdGVtcCIsICAgICAgICAgICAgICAgICAgIyBsb3cgbGV2ZWwgc2FmZSBpbnRlcmZhY2VzCiAgICAgIm1rdGVtcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZXByZWNhdGVkIHVuc2FmZSBpbnRlcmZhY2UKICAgICAiVE1QX01BWCIsICJnZXR0ZW1wcHJlZml4IiwgICAgICAgICAgICAjIGNvbnN0YW50cwotICAgICJ0ZW1wZGlyIiwgImdldHRlbXBkaXIiCisgICAgInRlbXBkaXIiLCAiZ2V0dGVtcGRpciIsCisgICAgImdldHRlbXBwcmVmaXhiIiwgImdldHRlbXBkaXJiIiwKICAgIF0KIAogCkBAIC01NSw4ICs2NCwxMCBAQAogZWxzZToKICAgICBUTVBfTUFYID0gMTAwMDAKIAotIyBBbHRob3VnaCBpdCBkb2VzIG5vdCBoYXZlIGFuIHVuZGVyc2NvcmUgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhpcwotIyB2YXJpYWJsZSBpcyBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgKHNlZSBpc3N1ZSAxMDM1NCkuCisjIFRoaXMgdmFyaWFibGUgX3dhc18gdW51c2VkIGZvciBsZWdhY3kgcmVhc29ucywgc2VlIGlzc3VlIDEwMzU0LgorIyBCdXQgYXMgb2YgMy41IHdlIGFjdHVhbGx5IHVzZSBpdCBhdCBydW50aW1lIHNvIGNoYW5naW5nIGl0IHdvdWxkCisjIGhhdmUgYSBwb3NzaWJseSBkZXNpcmFibGUgc2lkZSBlZmZlY3QuLi4gIEJ1dCB3ZSBkbyBub3Qgd2FudCB0byBzdXBwb3J0CisjIHRoYXQgYXMgYW4gQVBJLiAgSXQgaXMgdW5kb2N1bWVudGVkIG9uIHB1cnBvc2UuICBEbyBub3QgZGVwZW5kIG9uIHRoaXMuCiB0ZW1wbGF0ZSA9ICJ0bXAiCiAKICMgSW50ZXJuYWwgcm91dGluZXMuCkBAIC04Miw2ICs5Myw0NiBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBUcnVlCiAKKworZGVmIF9pbmZlcl9yZXR1cm5fdHlwZSgqYXJncyk6CisgICAgIiIiTG9vayBhdCB0aGUgdHlwZSBvZiBhbGwgYXJncyBhbmQgZGl2aW5lIHRoZWlyIGltcGxpZWQgcmV0dXJuIHR5cGUuIiIiCisgICAgcmV0dXJuX3R5cGUgPSBOb25lCisgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICBpZiBhcmcgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBieXRlcyk6CisgICAgICAgICAgICBpZiByZXR1cm5fdHlwZSBpcyBzdHI6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4ndCBtaXggYnl0ZXMgYW5kIG5vbi1ieXRlcyBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRoIGNvbXBvbmVudHMuIikKKyAgICAgICAgICAgIHJldHVybl90eXBlID0gYnl0ZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJldHVybl90eXBlIGlzIGJ5dGVzOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2FuJ3QgbWl4IGJ5dGVzIGFuZCBub24tYnl0ZXMgaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aCBjb21wb25lbnRzLiIpCisgICAgICAgICAgICByZXR1cm5fdHlwZSA9IHN0cgorICAgIGlmIHJldHVybl90eXBlIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBzdHIgICMgdGVtcGZpbGUgQVBJcyByZXR1cm4gYSBzdHIgYnkgZGVmYXVsdC4KKyAgICByZXR1cm4gcmV0dXJuX3R5cGUKKworCitkZWYgX3Nhbml0aXplX3BhcmFtcyhwcmVmaXgsIHN1ZmZpeCwgZGlyKToKKyAgICAiIiJDb21tb24gcGFyYW1ldGVyIHByb2Nlc3NpbmcgZm9yIG1vc3QgQVBJcyBpbiB0aGlzIG1vZHVsZS4iIiIKKyAgICBvdXRwdXRfdHlwZSA9IF9pbmZlcl9yZXR1cm5fdHlwZShwcmVmaXgsIHN1ZmZpeCwgZGlyKQorICAgIGlmIHN1ZmZpeCBpcyBOb25lOgorICAgICAgICBzdWZmaXggPSBvdXRwdXRfdHlwZSgpCisgICAgaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgIGlmIG91dHB1dF90eXBlIGlzIHN0cjoKKyAgICAgICAgICAgIHByZWZpeCA9IHRlbXBsYXRlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVmaXggPSBfb3MuZnNlbmNvZGUodGVtcGxhdGUpCisgICAgaWYgZGlyIGlzIE5vbmU6CisgICAgICAgIGlmIG91dHB1dF90eXBlIGlzIHN0cjoKKyAgICAgICAgICAgIGRpciA9IGdldHRlbXBkaXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlyID0gZ2V0dGVtcGRpcmIoKQorICAgIHJldHVybiBwcmVmaXgsIHN1ZmZpeCwgZGlyLCBvdXRwdXRfdHlwZQorCisKIGNsYXNzIF9SYW5kb21OYW1lU2VxdWVuY2U6CiAgICAgIiIiQW4gaW5zdGFuY2Ugb2YgX1JhbmRvbU5hbWVTZXF1ZW5jZSBnZW5lcmF0ZXMgYW4gZW5kbGVzcwogICAgIHNlcXVlbmNlIG9mIHVucHJlZGljdGFibGUgc3RyaW5ncyB3aGljaCBjYW4gc2FmZWx5IGJlIGluY29ycG9yYXRlZApAQCAtMTk1LDE3ICsyNDYsMTggQEAKICAgICByZXR1cm4gX25hbWVfc2VxdWVuY2UKIAogCi1kZWYgX21rc3RlbXBfaW5uZXIoZGlyLCBwcmUsIHN1ZiwgZmxhZ3MpOgorZGVmIF9ta3N0ZW1wX2lubmVyKGRpciwgcHJlLCBzdWYsIGZsYWdzLCBvdXRwdXRfdHlwZSk6CiAgICAgIiIiQ29kZSBjb21tb24gdG8gbWtzdGVtcCwgVGVtcG9yYXJ5RmlsZSwgYW5kIE5hbWVkVGVtcG9yYXJ5RmlsZS4iIiIKIAogICAgIG5hbWVzID0gX2dldF9jYW5kaWRhdGVfbmFtZXMoKQorICAgIGlmIG91dHB1dF90eXBlIGlzIGJ5dGVzOgorICAgICAgICBuYW1lcyA9IG1hcChfb3MuZnNlbmNvZGUsIG5hbWVzKQogCiAgICAgZm9yIHNlcSBpbiByYW5nZShUTVBfTUFYKToKICAgICAgICAgbmFtZSA9IG5leHQobmFtZXMpCiAgICAgICAgIGZpbGUgPSBfb3MucGF0aC5qb2luKGRpciwgcHJlICsgbmFtZSArIHN1ZikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmQgPSBfb3Mub3BlbihmaWxlLCBmbGFncywgMG82MDApCi0gICAgICAgICAgICByZXR1cm4gKGZkLCBfb3MucGF0aC5hYnNwYXRoKGZpbGUpKQogICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgogICAgICAgICAgICAgY29udGludWUgICAgIyB0cnkgYWdhaW4KICAgICAgICAgZXhjZXB0IFBlcm1pc3Npb25FcnJvcjoKQEAgLTIxNiw2ICsyNjgsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiAoZmQsIF9vcy5wYXRoLmFic3BhdGgoZmlsZSkpCiAKICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IoX2Vycm5vLkVFWElTVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIHVzYWJsZSB0ZW1wb3JhcnkgZmlsZSBuYW1lIGZvdW5kIikKQEAgLTIyNCw5ICsyNzcsMTMgQEAKICMgVXNlciB2aXNpYmxlIGludGVyZmFjZXMuCiAKIGRlZiBnZXR0ZW1wcHJlZml4KCk6Ci0gICAgIiIiQWNjZXNzb3IgZm9yIHRlbXBkaXIudGVtcGxhdGUuIiIiCisgICAgIiIiVGhlIGRlZmF1bHQgcHJlZml4IGZvciB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuIiIiCiAgICAgcmV0dXJuIHRlbXBsYXRlCiAKK2RlZiBnZXR0ZW1wcHJlZml4YigpOgorICAgICIiIlRoZSBkZWZhdWx0IHByZWZpeCBmb3IgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGFzIGJ5dGVzLiIiIgorICAgIHJldHVybiBfb3MuZnNlbmNvZGUoZ2V0dGVtcHByZWZpeCgpKQorCiB0ZW1wZGlyID0gTm9uZQogCiBkZWYgZ2V0dGVtcGRpcigpOgpAQCAtMjQxLDI0ICsyOTgsMzIgQEAKICAgICAgICAgICAgIF9vbmNlX2xvY2sucmVsZWFzZSgpCiAgICAgcmV0dXJuIHRlbXBkaXIKIAotZGVmIG1rc3RlbXAoc3VmZml4PSIiLCBwcmVmaXg9dGVtcGxhdGUsIGRpcj1Ob25lLCB0ZXh0PUZhbHNlKToKK2RlZiBnZXR0ZW1wZGlyYigpOgorICAgICIiIkEgYnl0ZXMgdmVyc2lvbiBvZiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkuIiIiCisgICAgcmV0dXJuIF9vcy5mc2VuY29kZShnZXR0ZW1wZGlyKCkpCisKK2RlZiBta3N0ZW1wKHN1ZmZpeD1Ob25lLCBwcmVmaXg9Tm9uZSwgZGlyPU5vbmUsIHRleHQ9RmFsc2UpOgogICAgICIiIlVzZXItY2FsbGFibGUgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCByZXR1cm4gYSB1bmlxdWUgdGVtcG9yYXJ5CiAgICAgZmlsZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwYWlyIChmZCwgbmFtZSkgd2hlcmUgZmQgaXMgdGhlCiAgICAgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IG9zLm9wZW4sIGFuZCBuYW1lIGlzIHRoZSBmaWxlbmFtZS4KIAotICAgIElmICdzdWZmaXgnIGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgbmFtZSB3aWxsIGVuZCB3aXRoIHRoYXQgc3VmZml4LAorICAgIElmICdzdWZmaXgnIGlzIG5vdCBOb25lLCB0aGUgZmlsZSBuYW1lIHdpbGwgZW5kIHdpdGggdGhhdCBzdWZmaXgsCiAgICAgb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgbm8gc3VmZml4LgogCi0gICAgSWYgJ3ByZWZpeCcgaXMgc3BlY2lmaWVkLCB0aGUgZmlsZSBuYW1lIHdpbGwgYmVnaW4gd2l0aCB0aGF0IHByZWZpeCwKKyAgICBJZiAncHJlZml4JyBpcyBub3QgTm9uZSwgdGhlIGZpbGUgbmFtZSB3aWxsIGJlZ2luIHdpdGggdGhhdCBwcmVmaXgsCiAgICAgb3RoZXJ3aXNlIGEgZGVmYXVsdCBwcmVmaXggaXMgdXNlZC4KIAotICAgIElmICdkaXInIGlzIHNwZWNpZmllZCwgdGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoYXQgZGlyZWN0b3J5LAorICAgIElmICdkaXInIGlzIG5vdCBOb25lLCB0aGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhhdCBkaXJlY3RvcnksCiAgICAgb3RoZXJ3aXNlIGEgZGVmYXVsdCBkaXJlY3RvcnkgaXMgdXNlZC4KIAogICAgIElmICd0ZXh0JyBpcyBzcGVjaWZpZWQgYW5kIHRydWUsIHRoZSBmaWxlIGlzIG9wZW5lZCBpbiB0ZXh0CiAgICAgbW9kZS4gIEVsc2UgKHRoZSBkZWZhdWx0KSB0aGUgZmlsZSBpcyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuICBPbgogICAgIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMsIHRoaXMgbWFrZXMgbm8gZGlmZmVyZW5jZS4KIAorICAgIElmIGFueSBvZiAnc3VmZml4JywgJ3ByZWZpeCcgYW5kICdkaXInIGFyZSBub3QgTm9uZSwgdGhleSBtdXN0IGJlIHRoZQorICAgIHNhbWUgdHlwZS4gIElmIHRoZXkgYXJlIGJ5dGVzLCB0aGUgcmV0dXJuZWQgbmFtZSB3aWxsIGJlIGJ5dGVzOyBzdHIKKyAgICBvdGhlcndpc2UuCisKICAgICBUaGUgZmlsZSBpcyByZWFkYWJsZSBhbmQgd3JpdGFibGUgb25seSBieSB0aGUgY3JlYXRpbmcgdXNlciBJRC4KICAgICBJZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB1c2VzIHBlcm1pc3Npb24gYml0cyB0byBpbmRpY2F0ZSB3aGV0aGVyIGEKICAgICBmaWxlIGlzIGV4ZWN1dGFibGUsIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGUgYnkgbm8gb25lLiBUaGUgZmlsZQpAQCAtMjY3LDE4ICszMzIsMTcgQEAKICAgICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlbGV0aW5nIHRoZSBmaWxlIHdoZW4gZG9uZSB3aXRoIGl0LgogICAgICIiIgogCi0gICAgaWYgZGlyIGlzIE5vbmU6Ci0gICAgICAgIGRpciA9IGdldHRlbXBkaXIoKQorICAgIHByZWZpeCwgc3VmZml4LCBkaXIsIG91dHB1dF90eXBlID0gX3Nhbml0aXplX3BhcmFtcyhwcmVmaXgsIHN1ZmZpeCwgZGlyKQogCiAgICAgaWYgdGV4dDoKICAgICAgICAgZmxhZ3MgPSBfdGV4dF9vcGVuZmxhZ3MKICAgICBlbHNlOgogICAgICAgICBmbGFncyA9IF9iaW5fb3BlbmZsYWdzCiAKLSAgICByZXR1cm4gX21rc3RlbXBfaW5uZXIoZGlyLCBwcmVmaXgsIHN1ZmZpeCwgZmxhZ3MpCisgICAgcmV0dXJuIF9ta3N0ZW1wX2lubmVyKGRpciwgcHJlZml4LCBzdWZmaXgsIGZsYWdzLCBvdXRwdXRfdHlwZSkKIAogCi1kZWYgbWtkdGVtcChzdWZmaXg9IiIsIHByZWZpeD10ZW1wbGF0ZSwgZGlyPU5vbmUpOgorZGVmIG1rZHRlbXAoc3VmZml4PU5vbmUsIHByZWZpeD1Ob25lLCBkaXI9Tm9uZSk6CiAgICAgIiIiVXNlci1jYWxsYWJsZSBmdW5jdGlvbiB0byBjcmVhdGUgYW5kIHJldHVybiBhIHVuaXF1ZSB0ZW1wb3JhcnkKICAgICBkaXJlY3RvcnkuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZGlyZWN0b3J5LgogCkBAIC0yOTEsMTcgKzM1NSwxNyBAQAogICAgIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgdGhlIGRpcmVjdG9yeSB3aGVuIGRvbmUgd2l0aCBpdC4KICAgICAiIiIKIAotICAgIGlmIGRpciBpcyBOb25lOgotICAgICAgICBkaXIgPSBnZXR0ZW1wZGlyKCkKKyAgICBwcmVmaXgsIHN1ZmZpeCwgZGlyLCBvdXRwdXRfdHlwZSA9IF9zYW5pdGl6ZV9wYXJhbXMocHJlZml4LCBzdWZmaXgsIGRpcikKIAogICAgIG5hbWVzID0gX2dldF9jYW5kaWRhdGVfbmFtZXMoKQorICAgIGlmIG91dHB1dF90eXBlIGlzIGJ5dGVzOgorICAgICAgICBuYW1lcyA9IG1hcChfb3MuZnNlbmNvZGUsIG5hbWVzKQogCiAgICAgZm9yIHNlcSBpbiByYW5nZShUTVBfTUFYKToKICAgICAgICAgbmFtZSA9IG5leHQobmFtZXMpCiAgICAgICAgIGZpbGUgPSBfb3MucGF0aC5qb2luKGRpciwgcHJlZml4ICsgbmFtZSArIHN1ZmZpeCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX29zLm1rZGlyKGZpbGUsIDBvNzAwKQotICAgICAgICAgICAgcmV0dXJuIGZpbGUKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlICAgICMgdHJ5IGFnYWluCiAgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3I6CkBAIC0zMTIsNiArMzc2LDcgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gZmlsZQogCiAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKF9lcnJuby5FRVhJU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyB1c2FibGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBuYW1lIGZvdW5kIikKQEAgLTMyMCwxMSArMzg1LDEyIEBACiAgICAgIiIiVXNlci1jYWxsYWJsZSBmdW5jdGlvbiB0byByZXR1cm4gYSB1bmlxdWUgdGVtcG9yYXJ5IGZpbGUgbmFtZS4gIFRoZQogICAgIGZpbGUgaXMgbm90IGNyZWF0ZWQuCiAKLSAgICBBcmd1bWVudHMgYXJlIGFzIGZvciBta3N0ZW1wLCBleGNlcHQgdGhhdCB0aGUgJ3RleHQnIGFyZ3VtZW50IGlzCi0gICAgbm90IGFjY2VwdGVkLgorICAgIEFyZ3VtZW50cyBhcmUgc2ltaWxhciB0byBta3N0ZW1wLCBleGNlcHQgdGhhdCB0aGUgJ3RleHQnIGFyZ3VtZW50IGlzCisgICAgbm90IGFjY2VwdGVkLCBhbmQgc3VmZml4PU5vbmUsIHByZWZpeD1Ob25lIGFuZCBieXRlcyBmaWxlIG5hbWVzIGFyZSBub3QKKyAgICBzdXBwb3J0ZWQuCiAKLSAgICBUaGlzIGZ1bmN0aW9uIGlzIHVuc2FmZSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiAgVGhlIGZpbGUgbmFtZQotICAgIHJlZmVycyB0byBhIGZpbGUgdGhhdCBkaWQgbm90IGV4aXN0IGF0IHNvbWUgcG9pbnQsIGJ1dCBieSB0aGUgdGltZQorICAgIFRISVMgRlVOQ1RJT04gSVMgVU5TQUZFIEFORCBTSE9VTEQgTk9UIEJFIFVTRUQuICBUaGUgZmlsZSBuYW1lIG1heQorICAgIHJlZmVyIHRvIGEgZmlsZSB0aGF0IGRpZCBub3QgZXhpc3QgYXQgc29tZSBwb2ludCwgYnV0IGJ5IHRoZSB0aW1lCiAgICAgeW91IGdldCBhcm91bmQgdG8gY3JlYXRpbmcgaXQsIHNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBiZWF0ZW4geW91IHRvCiAgICAgdGhlIHB1bmNoLgogICAgICIiIgpAQCAtNDU0LDcgKzUyMCw3IEBACiAKIAogZGVmIE5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3K2InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9Tm9uZSwgc3VmZml4PSIiLCBwcmVmaXg9dGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9Tm9uZSwgc3VmZml4PU5vbmUsIHByZWZpeD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICBkaXI9Tm9uZSwgZGVsZXRlPVRydWUpOgogICAgICIiIkNyZWF0ZSBhbmQgcmV0dXJuIGEgdGVtcG9yYXJ5IGZpbGUuCiAgICAgQXJndW1lbnRzOgpAQCAtNDY3LDEyICs1MzMsMTEgQEAKICAgICBUaGUgZmlsZSBpcyBjcmVhdGVkIGFzIG1rc3RlbXAoKSB3b3VsZCBkbyBpdC4KIAogICAgIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBmaWxlLWxpa2UgaW50ZXJmYWNlOyB0aGUgbmFtZSBvZiB0aGUgZmlsZQotICAgIGlzIGFjY2Vzc2libGUgYXMgZmlsZS5uYW1lLiAgVGhlIGZpbGUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQKLSAgICB3aGVuIGl0IGlzIGNsb3NlZCB1bmxlc3MgdGhlICdkZWxldGUnIGFyZ3VtZW50IGlzIHNldCB0byBGYWxzZS4KKyAgICBpcyBhY2Nlc3NpYmxlIGFzIGl0cyAnbmFtZScgYXR0cmlidXRlLiAgVGhlIGZpbGUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5CisgICAgZGVsZXRlZCB3aGVuIGl0IGlzIGNsb3NlZCB1bmxlc3MgdGhlICdkZWxldGUnIGFyZ3VtZW50IGlzIHNldCB0byBGYWxzZS4KICAgICAiIiIKIAotICAgIGlmIGRpciBpcyBOb25lOgotICAgICAgICBkaXIgPSBnZXR0ZW1wZGlyKCkKKyAgICBwcmVmaXgsIHN1ZmZpeCwgZGlyLCBvdXRwdXRfdHlwZSA9IF9zYW5pdGl6ZV9wYXJhbXMocHJlZml4LCBzdWZmaXgsIGRpcikKIAogICAgIGZsYWdzID0gX2Jpbl9vcGVuZmxhZ3MKIApAQCAtNDgxLDEzICs1NDYsMTQgQEAKICAgICBpZiBfb3MubmFtZSA9PSAnbnQnIGFuZCBkZWxldGU6CiAgICAgICAgIGZsYWdzIHw9IF9vcy5PX1RFTVBPUkFSWQogCi0gICAgKGZkLCBuYW1lKSA9IF9ta3N0ZW1wX2lubmVyKGRpciwgcHJlZml4LCBzdWZmaXgsIGZsYWdzKQorICAgIChmZCwgbmFtZSkgPSBfbWtzdGVtcF9pbm5lcihkaXIsIHByZWZpeCwgc3VmZml4LCBmbGFncywgb3V0cHV0X3R5cGUpCiAgICAgdHJ5OgogICAgICAgICBmaWxlID0gX2lvLm9wZW4oZmQsIG1vZGUsIGJ1ZmZlcmluZz1idWZmZXJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lPW5ld2xpbmUsIGVuY29kaW5nPWVuY29kaW5nKQogCiAgICAgICAgIHJldHVybiBfVGVtcG9yYXJ5RmlsZVdyYXBwZXIoZmlsZSwgbmFtZSwgZGVsZXRlKQotICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgIF9vcy51bmxpbmsobmFtZSkKICAgICAgICAgX29zLmNsb3NlKGZkKQogICAgICAgICByYWlzZQogCkBAIC00OTcsOCArNTYzLDEzIEBACiAgICAgVGVtcG9yYXJ5RmlsZSA9IE5hbWVkVGVtcG9yYXJ5RmlsZQogCiBlbHNlOgorICAgICMgSXMgdGhlIE9fVE1QRklMRSBmbGFnIGF2YWlsYWJsZSBhbmQgZG9lcyBpdCB3b3JrPworICAgICMgVGhlIGZsYWcgaXMgc2V0IHRvIEZhbHNlIGlmIG9zLm9wZW4oZGlyLCBvcy5PX1RNUEZJTEUpIHJhaXNlcyBhbgorICAgICMgSXNBRGlyZWN0b3J5RXJyb3IgZXhjZXB0aW9uCisgICAgX09fVE1QRklMRV9XT1JLUyA9IGhhc2F0dHIoX29zLCAnT19UTVBGSUxFJykKKwogICAgIGRlZiBUZW1wb3JhcnlGaWxlKG1vZGU9J3crYicsIGJ1ZmZlcmluZz0tMSwgZW5jb2Rpbmc9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lPU5vbmUsIHN1ZmZpeD0iIiwgcHJlZml4PXRlbXBsYXRlLAorICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9Tm9uZSwgc3VmZml4PU5vbmUsIHByZWZpeD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgIGRpcj1Ob25lKToKICAgICAgICAgIiIiQ3JlYXRlIGFuZCByZXR1cm4gYSB0ZW1wb3JhcnkgZmlsZS4KICAgICAgICAgQXJndW1lbnRzOgpAQCAtNTEyLDEzICs1ODMsNDEgQEAKICAgICAgICAgUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGZpbGUtbGlrZSBpbnRlcmZhY2UuICBUaGUgZmlsZSBoYXMgbm8KICAgICAgICAgbmFtZSwgYW5kIHdpbGwgY2Vhc2UgdG8gZXhpc3Qgd2hlbiBpdCBpcyBjbG9zZWQuCiAgICAgICAgICIiIgorICAgICAgICBnbG9iYWwgX09fVE1QRklMRV9XT1JLUwogCi0gICAgICAgIGlmIGRpciBpcyBOb25lOgotICAgICAgICAgICAgZGlyID0gZ2V0dGVtcGRpcigpCisgICAgICAgIHByZWZpeCwgc3VmZml4LCBkaXIsIG91dHB1dF90eXBlID0gX3Nhbml0aXplX3BhcmFtcyhwcmVmaXgsIHN1ZmZpeCwgZGlyKQogCiAgICAgICAgIGZsYWdzID0gX2Jpbl9vcGVuZmxhZ3MKKyAgICAgICAgaWYgX09fVE1QRklMRV9XT1JLUzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmbGFnczIgPSAoZmxhZ3MgfCBfb3MuT19UTVBGSUxFKSAmIH5fb3MuT19DUkVBVAorICAgICAgICAgICAgICAgIGZkID0gX29zLm9wZW4oZGlyLCBmbGFnczIsIDBvNjAwKQorICAgICAgICAgICAgZXhjZXB0IElzQURpcmVjdG9yeUVycm9yOgorICAgICAgICAgICAgICAgICMgTGludXgga2VybmVsIG9sZGVyIHRoYW4gMy4xMSBpZ25vcmVzIHRoZSBPX1RNUEZJTEUgZmxhZzoKKyAgICAgICAgICAgICAgICAjIE9fVE1QRklMRSBpcyByZWFkIGFzIE9fRElSRUNUT1JZLiBUcnlpbmcgdG8gb3BlbiBhIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICMgd2l0aCBPX1JEV1J8T19ESVJFQ1RPUlkgZmFpbHMgd2l0aCBJc0FEaXJlY3RvcnlFcnJvciwgYQorICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuIHRvIHdyaXRlLiBTZXQgZmxhZyB0byBGYWxzZSB0byBub3QKKyAgICAgICAgICAgICAgICAjIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBfT19UTVBGSUxFX1dPUktTID0gRmFsc2UKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgVGhlIGZpbGVzeXN0ZW0gb2YgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBzdXBwb3J0IE9fVE1QRklMRS4KKyAgICAgICAgICAgICAgICAjIEZvciBleGFtcGxlLCBPU0Vycm9yKDk1LCAnT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQnKS4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBPbiBMaW51eCBrZXJuZWwgb2xkZXIgdGhhbiAzLjExLCB0cnlpbmcgdG8gb3BlbiBhIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAjIGZpbGUgKG9yIGEgc3ltYm9saWMgbGluayB0byBhIHJlZ3VsYXIgZmlsZSkgd2l0aCBPX1RNUEZJTEUKKyAgICAgICAgICAgICAgICAjIGZhaWxzIHdpdGggTm90QURpcmVjdG9yeUVycm9yLCBiZWNhdXNlIE9fVE1QRklMRSBpcyByZWFkIGFzCisgICAgICAgICAgICAgICAgIyBPX0RJUkVDVE9SWS4KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9pby5vcGVuKGZkLCBtb2RlLCBidWZmZXJpbmc9YnVmZmVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT1uZXdsaW5lLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIF9vcy5jbG9zZShmZCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgRmFsbGJhY2sgdG8gX21rc3RlbXBfaW5uZXIoKS4KIAotICAgICAgICAoZmQsIG5hbWUpID0gX21rc3RlbXBfaW5uZXIoZGlyLCBwcmVmaXgsIHN1ZmZpeCwgZmxhZ3MpCisgICAgICAgIChmZCwgbmFtZSkgPSBfbWtzdGVtcF9pbm5lcihkaXIsIHByZWZpeCwgc3VmZml4LCBmbGFncywgb3V0cHV0X3R5cGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIF9vcy51bmxpbmsobmFtZSkKICAgICAgICAgICAgIHJldHVybiBfaW8ub3BlbihmZCwgbW9kZSwgYnVmZmVyaW5nPWJ1ZmZlcmluZywKQEAgLTUzNiw3ICs2MzUsNyBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heF9zaXplPTAsIG1vZGU9J3crYicsIGJ1ZmZlcmluZz0tMSwKICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwgbmV3bGluZT1Ob25lLAotICAgICAgICAgICAgICAgICBzdWZmaXg9IiIsIHByZWZpeD10ZW1wbGF0ZSwgZGlyPU5vbmUpOgorICAgICAgICAgICAgICAgICBzdWZmaXg9Tm9uZSwgcHJlZml4PU5vbmUsIGRpcj1Ob25lKToKICAgICAgICAgaWYgJ2InIGluIG1vZGU6CiAgICAgICAgICAgICBzZWxmLl9maWxlID0gX2lvLkJ5dGVzSU8oKQogICAgICAgICBlbHNlOgpAQCAtNjg3LDcgKzc4Niw3IEBACiAgICAgaW4gaXQgYXJlIHJlbW92ZWQuCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3VmZml4PSIiLCBwcmVmaXg9dGVtcGxhdGUsIGRpcj1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3VmZml4PU5vbmUsIHByZWZpeD1Ob25lLCBkaXI9Tm9uZSk6CiAgICAgICAgIHNlbGYubmFtZSA9IG1rZHRlbXAoc3VmZml4LCBwcmVmaXgsIGRpcikKICAgICAgICAgc2VsZi5fZmluYWxpemVyID0gX3dlYWtyZWYuZmluYWxpemUoCiAgICAgICAgICAgICBzZWxmLCBzZWxmLl9jbGVhbnVwLCBzZWxmLm5hbWUsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKaW5kZXggMjA0ZDg5NC4uMTFhNjMxMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CisrKyBiL0xpYi90ZXN0L190ZXN0X211bHRpcHJvY2Vzc2luZy5weQpAQCAtMTksNyArMTksNyBAQAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgdGVzdC5zdXBwb3J0Ci1pbXBvcnQgdGVzdC5zY3JpcHRfaGVscGVyCitpbXBvcnQgdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIKIAogCiAjIFNraXAgdGVzdHMgaWYgX211bHRpcHJvY2Vzc2luZyB3YXNuJ3QgYnVpbHQuCkBAIC00NTUsMTMgKzQ1NSwxNSBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90ZXN0X3N0ZGVycl9mbHVzaChjbHMsIHRlc3Rmbik6Ci0gICAgICAgIHN5cy5zdGRlcnIgPSBvcGVuKHRlc3RmbiwgJ3cnKQorICAgICAgICBmZCA9IG9zLm9wZW4odGVzdGZuLCBvcy5PX1dST05MWSB8IG9zLk9fQ1JFQVQgfCBvcy5PX0VYQ0wpCisgICAgICAgIHN5cy5zdGRlcnIgPSBvcGVuKGZkLCAndycsIGNsb3NlZmQ9RmFsc2UpCiAgICAgICAgIDEvMCAjIE1BUktFUgogCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX3Rlc3Rfc3lzX2V4aXQoY2xzLCByZWFzb24sIHRlc3Rmbik6Ci0gICAgICAgIHN5cy5zdGRlcnIgPSBvcGVuKHRlc3RmbiwgJ3cnKQorICAgICAgICBmZCA9IG9zLm9wZW4odGVzdGZuLCBvcy5PX1dST05MWSB8IG9zLk9fQ1JFQVQgfCBvcy5PX0VYQ0wpCisgICAgICAgIHN5cy5zdGRlcnIgPSBvcGVuKGZkLCAndycsIGNsb3NlZmQ9RmFsc2UpCiAgICAgICAgIHN5cy5leGl0KHJlYXNvbikKIAogICAgIGRlZiB0ZXN0X3N5c19leGl0KHNlbGYpOgpAQCAtNDcyLDE1ICs0NzQsMjEgQEAKICAgICAgICAgdGVzdGZuID0gdGVzdC5zdXBwb3J0LlRFU1RGTgogICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdC5zdXBwb3J0LnVubGluaywgdGVzdGZuKQogCi0gICAgICAgIGZvciByZWFzb24sIGNvZGUgaW4gKChbMSwgMiwgM10sIDEpLCAoJ2lnbm9yZSB0aGlzJywgMSkpOgorICAgICAgICBmb3IgcmVhc29uIGluICgKKyAgICAgICAgICAgIFsxLCAyLCAzXSwKKyAgICAgICAgICAgICdpZ25vcmUgdGhpcycsCisgICAgICAgICk6CiAgICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X3N5c19leGl0LCBhcmdzPShyZWFzb24sIHRlc3RmbikpCiAgICAgICAgICAgICBwLmRhZW1vbiA9IFRydWUKICAgICAgICAgICAgIHAuc3RhcnQoKQogICAgICAgICAgICAgcC5qb2luKDUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIGNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIDEpCiAKICAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0Zm4sICdyJykgYXMgZjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLnJzdHJpcCgpLCBzdHIocmVhc29uKSkKKyAgICAgICAgICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudC5yc3RyaXAoKSwgc3RyKHJlYXNvbikpCisKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0Zm4pCiAKICAgICAgICAgZm9yIHJlYXNvbiBpbiAoVHJ1ZSwgRmFsc2UsIDgpOgogICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c3lzLmV4aXQsIGFyZ3M9KHJlYXNvbiwpKQpAQCAtMTgxOCwxMyArMTgyNiwxOSBAQAogICAgICAgICAgICAgICAgIGV4cGVjdGVkX3ZhbHVlcy5yZW1vdmUodmFsdWUpCiAKICAgICBkZWYgdGVzdF9tYWtlX3Bvb2woc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG11bHRpcHJvY2Vzc2luZy5Qb29sLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXVsdGlwcm9jZXNzaW5nLlBvb2wsIDApCisgICAgICAgIGV4cGVjdGVkX2Vycm9yID0gKFJlbW90ZUVycm9yIGlmIHNlbGYuVFlQRSA9PSAnbWFuYWdlcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBWYWx1ZUVycm9yKQogCi0gICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihwLl9wb29sKSkKLSAgICAgICAgcC5jbG9zZSgpCi0gICAgICAgIHAuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkX2Vycm9yLCBzZWxmLlBvb2wsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleHBlY3RlZF9lcnJvciwgc2VsZi5Qb29sLCAwKQorCisgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAnbWFuYWdlcic6CisgICAgICAgICAgICBwID0gc2VsZi5Qb29sKDMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4ocC5fcG9vbCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHAuY2xvc2UoKQorICAgICAgICAgICAgICAgIHAuam9pbigpCiAKICAgICBkZWYgdGVzdF90ZXJtaW5hdGUoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IHNlbGYucG9vbC5tYXBfYXN5bmMoCkBAIC0xODMzLDcgKzE4NDcsOCBAQAogICAgICAgICBzZWxmLnBvb2wudGVybWluYXRlKCkKICAgICAgICAgam9pbiA9IFRpbWluZ1dyYXBwZXIoc2VsZi5wb29sLmpvaW4pCiAgICAgICAgIGpvaW4oKQotICAgICAgICBzZWxmLmFzc2VydExlc3Moam9pbi5lbGFwc2VkLCAwLjUpCisgICAgICAgICMgU2FuaXR5IGNoZWNrIHRoZSBwb29sIGRpZG4ndCB3YWl0IGZvciBhbGwgdGFza3MgdG8gZmluaXNoCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhqb2luLmVsYXBzZWQsIDIuMCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2l0ZXJhYmxlKHNlbGYpOgogICAgICAgICAjIFNlZSBJc3N1ZSAxMjE1NwpAQCAtMTg1MSw3ICsxODY2LDcgQEAKICAgICAgICAgaWYgc2VsZi5UWVBFID09ICdwcm9jZXNzZXMnOgogICAgICAgICAgICAgTCA9IGxpc3QocmFuZ2UoMTApKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSBbc3FyKGkpIGZvciBpIGluIExdCi0gICAgICAgICAgICB3aXRoIG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpIGFzIHA6CisgICAgICAgICAgICB3aXRoIHNlbGYuUG9vbCgyKSBhcyBwOgogICAgICAgICAgICAgICAgIHIgPSBwLm1hcF9hc3luYyhzcXIsIEwpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldCgpLCBleHBlY3RlZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAubWFwX2FzeW5jLCBzcXIsIEwpCkBAIC0yNjI0LDcgKzI2MzksNyBAQAogCiAgICAgICAgIGwgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgbC5iaW5kKCh0ZXN0LnN1cHBvcnQuSE9TVCwgMCkpCi0gICAgICAgIGwubGlzdGVuKDEpCisgICAgICAgIGwubGlzdGVuKCkKICAgICAgICAgY29ubi5zZW5kKGwuZ2V0c29ja25hbWUoKSkKICAgICAgICAgbmV3X2Nvbm4sIGFkZHIgPSBsLmFjY2VwdCgpCiAgICAgICAgIGNvbm4uc2VuZChuZXdfY29ubikKQEAgLTMyNzEsNyArMzI4Niw3IEBACiAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKICAgICAgICAgbCA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICBsLmJpbmQoKHRlc3Quc3VwcG9ydC5IT1NULCAwKSkKLSAgICAgICAgbC5saXN0ZW4oNCkKKyAgICAgICAgbC5saXN0ZW4oKQogICAgICAgICBhZGRyID0gbC5nZXRzb2NrbmFtZSgpCiAgICAgICAgIHJlYWRlcnMgPSBbXQogICAgICAgICBwcm9jcyA9IFtdCkBAIC0zNDgzLDExICszNDk4LDExIEBACiAgICAgICAgIHNtID0gbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKQogICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdtcF9mb3JrX2JvbWIucHknKQogICAgICAgICBpZiBzbSAhPSAnZm9yayc6Ci0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUsIHNtKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUsIHNtKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidSdW50aW1lRXJyb3InLCBlcnIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayhuYW1lLCBzbSkKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sobmFtZSwgc20pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgYicxMjMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKIApAQCAtMzgzNCw3ICszODQ5LDcgQEAKICAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LmNvbm5lY3Rpb24KICAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmN1cnJlbnRfcHJvY2VzcykKICAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmFjdGl2ZV9jaGlsZHJlbikKLSAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQorICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlBvb2wpCiAgICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUGlwZSkKICAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUXVldWUpCiAgICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuSm9pbmFibGVRdWV1ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzEucHkgYi9MaWIvdGVzdC9iYWRzeW50YXhfYXN5bmMxLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiODVlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9iYWRzeW50YXhfYXN5bmMxLnB5CkBAIC0wLDAgKzEsMiBAQAorYXN5bmMgZGVmIGZvbyhhPWF3YWl0IHNvbWV0aGluZygpKToKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9iYWRzeW50YXhfYXN5bmMyLnB5IGIvTGliL3Rlc3QvYmFkc3ludGF4X2FzeW5jMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjg1ZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYmFkc3ludGF4X2FzeW5jMi5weQpAQCAtMCwwICsxLDIgQEAKK2FzeW5jIGRlZiBmb28oYT1hd2FpdCBzb21ldGhpbmcoKSk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYmFkc3ludGF4X2FzeW5jMy5weSBiL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlMWJjNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzMucHkKQEAgLTAsMCArMSwyIEBACithc3luYyBkZWYgZm9vKCk6CisgICAgW2kgYXN5bmMgZm9yIGkgaW4gZWxzXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYmFkc3ludGF4X2FzeW5jNC5weSBiL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzM2IyOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzQucHkKQEAgLTAsMCArMSwyIEBACithc3luYyBkZWYgZm9vKCk6CisgICAgYXdhaXQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzUucHkgYi9MaWIvdGVzdC9iYWRzeW50YXhfYXN5bmM1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMTlhZjYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9iYWRzeW50YXhfYXN5bmM1LnB5CkBAIC0wLDAgKzEsMiBAQAorZGVmIGZvbygpOgorICAgIGF3YWl0IHNvbWV0aGluZygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9iYWRzeW50YXhfYXN5bmM2LnB5IGIvTGliL3Rlc3QvYmFkc3ludGF4X2FzeW5jNi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjBhMjNkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYmFkc3ludGF4X2FzeW5jNi5weQpAQCAtMCwwICsxLDIgQEAKK2FzeW5jIGRlZiBmb28oKToKKyAgICB5aWVsZApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYmFkc3ludGF4X2FzeW5jNy5weSBiL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlNGJmOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzcucHkKQEAgLTAsMCArMSwyIEBACithc3luYyBkZWYgZm9vKCk6CisgICAgeWllbGQgZnJvbSBbXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYmFkc3ludGF4X2FzeW5jOC5weSBiL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M2MzZmOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2JhZHN5bnRheF9hc3luYzgucHkKQEAgLTAsMCArMSwyIEBACithc3luYyBkZWYgZm9vKCk6CisgICAgYXdhaXQgYXdhaXQgZnV0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkgYi9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNjI5NDAuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLSMgVGVzdHMgdGhhdCB3b3JrIGZvciBib3RoIGJ5dGVzIGFuZCBidWZmZXIgb2JqZWN0cy4KLSMgU2VlIFBFUCAzMTM3LgotCi1pbXBvcnQgc3RydWN0Ci1pbXBvcnQgc3lzCi0KLWNsYXNzIE1peGluQnl0ZXNCdWZmZXJDb21tb25UZXN0cyhvYmplY3QpOgotICAgICIiIlRlc3RzIHRoYXQgd29yayBmb3IgYm90aCBieXRlcyBhbmQgYnVmZmVyIG9iamVjdHMuCi0gICAgU2VlIFBFUCAzMTM3LgotICAgICIiIgotCi0gICAgZGVmIG1hcnNoYWwoc2VsZiwgeCk6Ci0gICAgICAgICIiIkNvbnZlcnQgeCBpbnRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGZvciB0aGVzZSB0ZXN0cy4iIiIKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd0ZXN0IGNsYXNzIG11c3QgcHJvdmlkZSBhIG1hcnNoYWwgbWV0aG9kJykKLQotICAgIGRlZiB0ZXN0X2lzbG93ZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNsb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYScpLmlzbG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidBJykuaXNsb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNsb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjJykuaXNsb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FCYycpLmlzbG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNsb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzbG93ZXIsIDQyKQotCi0gICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc3VwcGVyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYScpLmlzdXBwZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc3VwcGVyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc3VwcGVyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBQkMnKS5pc3VwcGVyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInQWJDJykuaXN1cHBlcigpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQUJDXG4nKS5pc3VwcGVyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXN1cHBlciwgNDIpCi0KLSAgICBkZWYgdGVzdF9pc3RpdGxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXN0aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQScpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidcbicpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EgVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQVxuVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQSBUaXRsZWNhc2VkLCBMaW5lJykuaXN0aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ05vdCBhIGNhcGl0YWxpemVkIFN0cmluZycpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOb3RcdGEgVGl0bGVjYXNlIFN0cmluZycpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOb3QtLWEgVGl0bGVjYXNlIFN0cmluZycpLmlzdGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOT1QnKS5pc3RpdGxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXN0aXRsZSwgNDIpCi0KLSAgICBkZWYgdGVzdF9pc3NwYWNlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzc3BhY2UoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXNzcGFjZSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInICcpLmlzc3BhY2UoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ1x0JykuaXNzcGFjZSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInXHInKS5pc3NwYWNlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidcbicpLmlzc3BhY2UoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJyBcdFxyXG4nKS5pc3NwYWNlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInIFx0XHJcbmEnKS5pc3NwYWNlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNzcGFjZSwgNDIpCi0KLSAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzYWxwaGEoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2EnKS5pc2FscGhhKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBJykuaXNhbHBoYSgpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNhbHBoYSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjJykuaXNhbHBoYSgpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FCYzEyMycpLmlzYWxwaGEoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhYmNcbicpLmlzYWxwaGEoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5pc2FscGhhLCA0MikKLQotICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNhbG51bSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYScpLmlzYWxudW0oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc2FsbnVtKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc2FsbnVtKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicxMjNhYmM0NTYnKS5pc2FsbnVtKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidhMWIzYycpLmlzYWxudW0oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhQmMwMDAgJykuaXNhbG51bSgpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNhbG51bSgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzYWxudW0sIDQyKQotCi0gICAgZGVmIHRlc3RfaXNkaWdpdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc2RpZ2l0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYScpLmlzZGlnaXQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJzAnKS5pc2RpZ2l0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicwMTIzNDU2Nzg5JykuaXNkaWdpdCgpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJzAxMjM0NTY3ODlhJykuaXNkaWdpdCgpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNkaWdpdCwgNDIpCi0KLSAgICBkZWYgdGVzdF9sb3dlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2hlbGxvJywgc2VsZi5tYXJzaGFsKGInSGVMTG8nKS5sb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInaGVsbG8nLCBzZWxmLm1hcnNoYWwoYidoZWxsbycpLmxvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5sb3dlciwgNDIpCi0KLSAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0hFTExPJywgc2VsZi5tYXJzaGFsKGInSGVMTG8nKS51cHBlcigpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInSEVMTE8nLCBzZWxmLm1hcnNoYWwoYidIRUxMTycpLnVwcGVyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS51cHBlciwgNDIpCi0KLSAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInIGhlbGxvICcsIHNlbGYubWFyc2hhbChiJyBoZWxsbyAnKS5jYXBpdGFsaXplKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidIZWxsbyAnLCBzZWxmLm1hcnNoYWwoYidIZWxsbyAnKS5jYXBpdGFsaXplKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidIZWxsbyAnLCBzZWxmLm1hcnNoYWwoYidoZWxsbyAnKS5jYXBpdGFsaXplKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidBYWFhJywgc2VsZi5tYXJzaGFsKGInYWFhYScpLmNhcGl0YWxpemUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0FhYWEnLCBzZWxmLm1hcnNoYWwoYidBYUFhJykuY2FwaXRhbGl6ZSgpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5jYXBpdGFsaXplLCA0MikKLQotICAgIGRlZiB0ZXN0X2xqdXN0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjICAgICAgICcsIHNlbGYubWFyc2hhbChiJ2FiYycpLmxqdXN0KDEwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiYyAgICcsIHNlbGYubWFyc2hhbChiJ2FiYycpLmxqdXN0KDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykubGp1c3QoMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5sanVzdCgyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiYyoqKioqKionLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5sanVzdCgxMCwgYicqJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykubGp1c3QpCi0KLSAgICBkZWYgdGVzdF9yanVzdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgICAgICBhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5yanVzdCgxMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicgICBhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5yanVzdCg2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiYycsIHNlbGYubWFyc2hhbChiJ2FiYycpLnJqdXN0KDMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykucmp1c3QoMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicqKioqKioqYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykucmp1c3QoMTAsIGInKicpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLnJqdXN0KQotCi0gICAgZGVmIHRlc3RfY2VudGVyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInICAgYWJjICAgICcsIHNlbGYubWFyc2hhbChiJ2FiYycpLmNlbnRlcigxMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicgYWJjICAnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5jZW50ZXIoNikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5jZW50ZXIoMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5jZW50ZXIoMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicqKiphYmMqKioqJywgc2VsZi5tYXJzaGFsKGInYWJjJykuY2VudGVyKDEwLCBiJyonKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5jZW50ZXIpCi0KLSAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2hFbGxPIENvTVB1VEVyUycsCi0gICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidIZUxMbyBjT21wVXRlUnMnKS5zd2FwY2FzZSgpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5zd2FwY2FzZSwgNDIpCi0KLSAgICBkZWYgdGVzdF96ZmlsbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEyMycsIHNlbGYubWFyc2hhbChiJzEyMycpLnpmaWxsKDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMTIzJywgc2VsZi5tYXJzaGFsKGInMTIzJykuemZpbGwoMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicwMTIzJywgc2VsZi5tYXJzaGFsKGInMTIzJykuemZpbGwoNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMTIzJywgc2VsZi5tYXJzaGFsKGInKzEyMycpLnpmaWxsKDMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInKzEyMycsIHNlbGYubWFyc2hhbChiJysxMjMnKS56ZmlsbCg0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyswMTIzJywgc2VsZi5tYXJzaGFsKGInKzEyMycpLnpmaWxsKDUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInLTEyMycsIHNlbGYubWFyc2hhbChiJy0xMjMnKS56ZmlsbCgzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJy0xMjMnLCBzZWxmLm1hcnNoYWwoYictMTIzJykuemZpbGwoNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYictMDEyMycsIHNlbGYubWFyc2hhbChiJy0xMjMnKS56ZmlsbCg1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzAwMCcsIHNlbGYubWFyc2hhbChiJycpLnpmaWxsKDMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMzQnLCBzZWxmLm1hcnNoYWwoYiczNCcpLnpmaWxsKDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMDAzNCcsIHNlbGYubWFyc2hhbChiJzM0JykuemZpbGwoNCkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYicxMjMnKS56ZmlsbCkKLQotICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICBkZWZcbmcgICBoaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJykuZXhwYW5kdGFicyg0KSkKLSAgICAgICAgIyBjaGVjayBrZXl3b3JkIGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKHRhYnNpemU9OCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICBkZWZcbmcgICBoaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnModGFic2l6ZT00KSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInICBhXG4gYicsIHNlbGYubWFyc2hhbChiJyBcdGFcblx0YicpLmV4cGFuZHRhYnMoMSkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidoZWxsbycpLmV4cGFuZHRhYnMsIDQyLCA0MikKLSAgICAgICAgIyBUaGlzIHRlc3QgaXMgb25seSB2YWxpZCB3aGVuIHNpemVvZihpbnQpID09IHNpemVvZih2b2lkKikgPT0gNC4KLSAgICAgICAgaWYgc3lzLm1heHNpemUgPCAoMSA8PCAzMikgYW5kIHN0cnVjdC5jYWxjc2l6ZSgnUCcpID09IDQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXHRhXG5cdGInKS5leHBhbmR0YWJzLCBzeXMubWF4c2l6ZSkKLQotICAgIGRlZiB0ZXN0X3RpdGxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInIEhlbGxvICcsIHNlbGYubWFyc2hhbChiJyBoZWxsbyAnKS50aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInSGVsbG8gJywgc2VsZi5tYXJzaGFsKGInaGVsbG8gJykudGl0bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0hlbGxvICcsIHNlbGYubWFyc2hhbChiJ0hlbGxvICcpLnRpdGxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidGb3JtYXQgVGhpcyBBcyBUaXRsZSBTdHJpbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2ZPck1hVCB0aElzIGFTIHRpdExlIFN0cmluZycpLnRpdGxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidGb3JtYXQsVGhpcy1BcypUaXRsZTtTdHJpbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2ZPck1hVCx0aElzLWFTKnRpdExlO1N0cmluZycpLnRpdGxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidHZXRpbnQnLCBzZWxmLm1hcnNoYWwoYidnZXRJbnQnKS50aXRsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2hlbGxvJykudGl0bGUsIDQyKQotCi0gICAgZGVmIHRlc3Rfc3BsaXRsaW5lcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhYmMnLCBiJ2RlZicsIGInJywgYidnaGknXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcbmRlZlxuXHJnaGknKS5zcGxpdGxpbmVzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InYWJjJywgYidkZWYnLCBiJycsIGInZ2hpJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXG5kZWZcblxyXG5naGknKS5zcGxpdGxpbmVzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InYWJjJywgYidkZWYnLCBiJ2doaSddLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xuZGVmXHJcbmdoaScpLnNwbGl0bGluZXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhYmMnLCBiJ2RlZicsIGInZ2hpJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXG5kZWZcclxuZ2hpXG4nKS5zcGxpdGxpbmVzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InYWJjJywgYidkZWYnLCBiJ2doaScsIGInJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXG5kZWZcclxuZ2hpXG5ccicpLnNwbGl0bGluZXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYicnLCBiJ2FiYycsIGInZGVmJywgYidnaGknLCBiJyddLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ1xuYWJjXG5kZWZcclxuZ2hpXG5ccicpLnNwbGl0bGluZXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYicnLCBiJ2FiYycsIGInZGVmJywgYidnaGknLCBiJyddLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ1xuYWJjXG5kZWZcclxuZ2hpXG5ccicpLnNwbGl0bGluZXMoRmFsc2UpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ1xuJywgYidhYmNcbicsIGInZGVmXHJcbicsIGInZ2hpXG4nLCBiJ1xyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXG5hYmNcbmRlZlxyXG5naGlcblxyJykuc3BsaXRsaW5lcyhUcnVlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYicnLCBiJ2FiYycsIGInZGVmJywgYidnaGknLCBiJyddLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ1xuYWJjXG5kZWZcclxuZ2hpXG5ccicpLnNwbGl0bGluZXMoa2VlcGVuZHM9RmFsc2UpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ1xuJywgYidhYmNcbicsIGInZGVmXHJcbicsIGInZ2hpXG4nLCBiJ1xyJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXG5hYmNcbmRlZlxyXG5naGlcblxyJykuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLnNwbGl0bGluZXMsIDQyLCA0MikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weSBiL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weQppbmRleCA1OGI0MjA5Li4zNDdkNjAzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkKKysrIGIvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5CkBAIC0zMiw4ICszMiw4IEBACiAgICAgICAgICIiIlRocm93cyBBc3NlcnRpb25FcnJvciBpZiBvcCBpcyBmb3VuZCIiIgogICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoeCk6CiAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gb3BuYW1lOgotICAgICAgICAgICAgICAgIGRpc2Fzc2VtYmx5ID0gc2VsZi5nZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKGNvKQotICAgICAgICAgICAgICAgIGlmIG9wYXJndmFsIGlzIF9VTlNQRUNJRklFRDoKKyAgICAgICAgICAgICAgICBkaXNhc3NlbWJseSA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyh4KQorICAgICAgICAgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CiAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICclcyBvY2N1cnMgaW4gYnl0ZWNvZGU6XG4lcycgJSAob3BuYW1lLCBkaXNhc3NlbWJseSkKICAgICAgICAgICAgICAgICBlbGlmIGluc3RyLmFyZ3ZhbCA9PSBhcmd2YWw6CiAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICcoJXMsJXIpIG9jY3VycyBpbiBieXRlY29kZTpcbiVzJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvY2ZncGFyc2VyLjIgYi9MaWIvdGVzdC9jZmdwYXJzZXIuMgppbmRleCAxOWE0MjBhLi4xNjQ2ZGU4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9jZmdwYXJzZXIuMgorKysgYi9MaWIvdGVzdC9jZmdwYXJzZXIuMgpAQCAtMjgyLDcgKzI4Miw3IEBACiAjIGVpdGhlciAvZXRjL2hvc3RzIE9SIEROUyBvciBOSVMgZGVwZW5kaW5nIG9uIHRoZSBzZXR0aW5ncyBvZiAKICMgL2V0Yy9ob3N0LmNvbmZpZywgL2V0Yy9uc3N3aXRjaC5jb25mCiAjIGFuZCB0aGUgL2V0Yy9yZXNvbHYuY29uZiBmaWxlLiAiaG9zdCIgdGhlcmVmb3JlIGlzIHN5c3RlbSAKLSMgY29uZmlndXJhdGlvbiBkZXBlbmRhbnQuIFRoaXMgcGFyYW1ldGVyIGlzIG1vc3Qgb2Z0ZW4gb2YgdXNlIHRvIAorIyBjb25maWd1cmF0aW9uIGRlcGVuZGVudC4gVGhpcyBwYXJhbWV0ZXIgaXMgbW9zdCBvZnRlbiBvZiB1c2UgdG8gCiAjIHByZXZlbnQgRE5TIGxvb2t1cHMKICMgaW4gb3JkZXIgdG8gcmVzb2x2ZSBOZXRCSU9TIG5hbWVzIHRvIElQIEFkZHJlc3Nlcy4gVXNlIHdpdGggY2FyZSEKICMgVGhlIGV4YW1wbGUgYmVsb3cgZXhjbHVkZXMgdXNlIG9mIG5hbWUgcmVzb2x1dGlvbiBmb3IgbWFjaGluZXMgdGhhdApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQppbmRleCAyODliMGNhLi5mNTIyMmM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQpAQCAtNCw2ICs0LDcgQEAKICIiIgogCiBpbXBvcnQgY29weQoraW1wb3J0IGRlY2ltYWwKIGltcG9ydCBzeXMKIGltcG9ydCBwaWNrbGUKIGltcG9ydCByYW5kb20KQEAgLTUxLDYgKzUyLDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXRpbWUuTUlOWUVBUiwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRldGltZS5NQVhZRUFSLCA5OTk5KQogCisgICAgZGVmIHRlc3RfbmFtZV9jbGVhbnVwKHNlbGYpOgorICAgICAgICBpZiAnX0Zhc3QnIG5vdCBpbiBzdHIoc2VsZik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGF0ZXRpbWUgPSBkYXRldGltZV9tb2R1bGUKKyAgICAgICAgbmFtZXMgPSBzZXQobmFtZSBmb3IgbmFtZSBpbiBkaXIoZGF0ZXRpbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ19fJykgYW5kIG5vdCBuYW1lLmVuZHN3aXRoKCdfXycpKQorICAgICAgICBhbGxvd2VkID0gc2V0KFsnTUFYWUVBUicsICdNSU5ZRUFSJywgJ2RhdGUnLCAnZGF0ZXRpbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAnZGF0ZXRpbWVfQ0FQSScsICd0aW1lJywgJ3RpbWVkZWx0YScsICd0aW1lem9uZScsCisgICAgICAgICAgICAgICAgICAgICAgICd0emluZm8nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcyAtIGFsbG93ZWQsIHNldChbXSkpCisKICAgICBkZWYgdGVzdF9kaXZpZGVfYW5kX3JvdW5kKHNlbGYpOgogICAgICAgICBpZiAnX0Zhc3QnIGluIHN0cihzZWxmKToKICAgICAgICAgICAgIHJldHVybgpAQCAtMTA1LDYgKzExNyw5IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldD1Ob25lLCBuYW1lPU5vbmUsIGRzdG9mZnNldD1Ob25lKToKICAgICAgICAgRml4ZWRPZmZzZXQuX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lLCBkc3RvZmZzZXQpCiAKKyAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXworCiBjbGFzcyBfVFpJbmZvKHR6aW5mbyk6CiAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkYXRldGltZV9tb2R1bGUpOgogICAgICAgICByZXR1cm4gcmFuZG9tLnJhbmRvbSgpCkBAIC0xMjEyLDcgKzEyMjcsNyBAQAogICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5zdHJmdGltZSwgIiUjIikKIAogICAgICAgICAjb2ggd2VsbCwgc29tZSBzeXN0ZW1zIGp1c3QgaWdub3JlIHRob3NlIGludmFsaWQgb25lcy4KLSAgICAgICAgI2F0IGxlYXN0LCBleGNlcmNpc2UgdGhlbSB0byBtYWtlIHN1cmUgdGhhdCBubyBjcmFzaGVzCisgICAgICAgICNhdCBsZWFzdCwgZXhlcmNpc2UgdGhlbSB0byBtYWtlIHN1cmUgdGhhdCBubyBjcmFzaGVzCiAgICAgICAgICNhcmUgZ2VuZXJhdGVkCiAgICAgICAgIGZvciBmIGluIFsiJWUiLCAiJSIsICIlIyJdOgogICAgICAgICAgICAgdHJ5OgpAQCAtMTIyMywxMSArMTIzOCwxMyBAQAogICAgICAgICAjY2hlY2sgdGhhdCB0aGlzIHN0YW5kYXJkIGV4dGVuc2lvbiB3b3JrcwogICAgICAgICB0LnN0cmZ0aW1lKCIlZiIpCiAKLQogICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKICAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDcsIDksIDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Ll9fZm9ybWF0X18oJycpLCBzdHIoZHQpKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdtdXN0IGJlIHN0ciwgbm90IGludCcpOgorICAgICAgICAgICAgZHQuX19mb3JtYXRfXygxMjMpCisKICAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIF9fc3RyX18oKSBnZXRzIGNhbGxlZAogICAgICAgICBjbGFzcyBBKHNlbGYudGhlY2xhc3MpOgogICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CkBAIC0xMzc5LDggKzEzOTYsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBMYXJnZXJUaGFuQW55dGhpbmcpCiAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgTGFyZ2VyVGhhbkFueXRoaW5nKQotICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKG90aGVyLCBMYXJnZXJUaGFuQW55dGhpbmcpCiAgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2Uob3RoZXIsIExhcmdlclRoYW5Bbnl0aGluZykKICAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgpAQCAtMTQ4Myw5ICsxNDk4LDEwIEBACiAgICAgICAgIGZvciBtb250aF9ieXRlIGluIGInOScsIGInXDAnLCBiJ1xyJywgYidceGZmJzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGVjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVs6Ml0gKyBtb250aF9ieXRlICsgYmFzZVszOl0pCi0gICAgICAgICMgR29vZCBieXRlcywgYnV0IGJhZCB0emluZm86Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGVjbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXMoWzFdICogbGVuKGJhc2UpKSwgJ0VTVCcpCisgICAgICAgIGlmIGlzc3ViY2xhc3Moc2VsZi50aGVjbGFzcywgZGF0ZXRpbWUpOgorICAgICAgICAgICAgIyBHb29kIGJ5dGVzLCBidXQgYmFkIHR6aW5mbzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdeYmFkIHR6aW5mbyBzdGF0ZSBhcmckJyk6CisgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcyhieXRlcyhbMV0gKiBsZW4oYmFzZSkpLCAnRVNUJykKIAogICAgICAgICBmb3Igb3JkX2J5dGUgaW4gcmFuZ2UoMSwgMTMpOgogICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG93IHVwIGJlY2F1c2Ugb2YgdGhlIG1vbnRoIGJ5dGUgYWxvbmUuICBJZgpAQCAtMTU2MSw2ICsxNTc3LDkgQEAKICAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDcsIDksIDEwLCA0LCA1LCAxLCAxMjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuX19mb3JtYXRfXygnJyksIHN0cihkdCkpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ211c3QgYmUgc3RyLCBub3QgaW50Jyk6CisgICAgICAgICAgICBkdC5fX2Zvcm1hdF9fKDEyMykKKwogICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3MgX19zdHJfXygpIGdldHMgY2FsbGVkCiAgICAgICAgIGNsYXNzIEEoc2VsZi50aGVjbGFzcyk6CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKQEAgLTE5NDAsNiArMTk1OSw3IEBACiAgICAgICAgIGZvciBpbnNhbmUgaW4gLTFlMjAwLCAxZTIwMDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2FuZSkKKwogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHRpbWVzdGFtcHMiKQogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2Zsb2F0X2Zyb210aW1lc3RhbXAoc2VsZik6CiAgICAgICAgICMgVGhlIHJlc3VsdCBpcyB0ei1kZXBlbmRlbnQ7IGF0IGxlYXN0IHRlc3QgdGhhdCB0aGlzIGRvZXNuJ3QKQEAgLTIzMTksNiArMjMzOSw5IEBACiAgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDEsIDIsIDMsIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2Zvcm1hdF9fKCcnKSwgc3RyKHQpKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdtdXN0IGJlIHN0ciwgbm90IGludCcpOgorICAgICAgICAgICAgdC5fX2Zvcm1hdF9fKDEyMykKKwogICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3MgX19zdHJfXygpIGdldHMgY2FsbGVkCiAgICAgICAgIGNsYXNzIEEoc2VsZi50aGVjbGFzcyk6CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKQEAgLTIzODIsMTMgKzI0MDUsMTQgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKIAogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgICMgdGltZSBpcyBhbHdheXMgVHJ1ZS4KICAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDAsIDEpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNscygwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNscygwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNscygpKQogCiAgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKICAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwpAQCAtMjQ0Nyw5ICsyNDcxLDEyIEBACiAgICAgICAgIGZvciBob3VyX2J5dGUgaW4gJyAnLCAnOScsIGNocigyNCksICdceGZmJzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGVjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91cl9ieXRlICsgYmFzZVsxOl0pCisgICAgICAgICMgR29vZCBieXRlcywgYnV0IGJhZCB0emluZm86CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdeYmFkIHR6aW5mbyBzdGF0ZSBhcmckJyk6CisgICAgICAgICAgICBzZWxmLnRoZWNsYXNzKGJ5dGVzKFsxXSAqIGxlbihiYXNlKSksICdFU1QnKQogCiAjIEEgbWl4aW4gZm9yIGNsYXNzZXMgd2l0aCBhIHR6aW5mbz0gYXJndW1lbnQuICBTdWJjbGFzc2VzIG11c3QgZGVmaW5lCi0jIHRoZWNsYXNzIGFzIGEgY2xhc3MgYXRyaWJ1dGUsIGFuZCB0aGVjbGFzcygxLCAxLCAxLCB0emluZm89d2hhdGV2ZXIpCisjIHRoZWNsYXNzIGFzIGEgY2xhc3MgYXR0cmlidXRlLCBhbmQgdGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPXdoYXRldmVyKQogIyBtdXN0IGJlIGxlZ2l0ICh3aGljaCBpcyB0cnVlIGZvciB0aW1lIGFuZCBkYXRldGltZSkuCiBjbGFzcyBUWkluZm9CYXNlOgogCkBAIC0yNzA2LDcgKzI3MzMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuc3RyZnRpbWUsICIlWiIpCiAKICAgICAgICAgIyBJc3N1ZSAjNjY5NzoKLSAgICAgICAgaWYgJ19GYXN0JyBpbiBzdHIodHlwZShzZWxmKSk6CisgICAgICAgIGlmICdfRmFzdCcgaW4gc3RyKHNlbGYpOgogICAgICAgICAgICAgQmFkdHpuYW1lLnR6ID0gJ1x1ZDgwMCcKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuc3RyZnRpbWUsICIlWiIpCiAKQEAgLTI3NDEsNyArMjc2OCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudHpuYW1lKCksICdjb29raWUnKQogCiAgICAgZGVmIHRlc3RfbW9yZV9ib29sKHNlbGYpOgotICAgICAgICAjIFRlc3QgY2FzZXMgd2l0aCBub24tTm9uZSB0emluZm8uCisgICAgICAgICMgdGltZSBpcyBhbHdheXMgVHJ1ZS4KICAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwogCiAgICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0zMDAsICIiKSkKQEAgLTI3NTEsMjIgKzI3NzgsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCiAKICAgICAgICAgdCA9IGNscyg1LCB0emluZm89Rml4ZWRPZmZzZXQoMzAwLCAiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodCkKLQotICAgICAgICB0ID0gY2xzKDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDIzKjYwICsgNTksICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0KQotCi0gICAgICAgICMgTW9zdGx5IGVuc3VyaW5nIHRoaXMgZG9lc24ndCBvdmVyZmxvdyBpbnRlcm5hbGx5LgotICAgICAgICB0ID0gY2xzKDAsIHR6aW5mbz1GaXhlZE9mZnNldCgyMyo2MCArIDU5LCAiIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0KQogCi0gICAgICAgICMgQnV0IHRoaXMgc2hvdWxkIHlpZWxkIGEgdmFsdWUgZXJyb3IgLS0gdGhlIHV0Y29mZnNldCBpcyBib2d1cy4KLSAgICAgICAgdCA9IGNscygwLCB0emluZm89Rml4ZWRPZmZzZXQoMjQqNjAsICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBib29sKHQpKQotCi0gICAgICAgICMgTGlrZXdpc2UuCi0gICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0yNCo2MCwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGJvb2wodCkpCisgICAgICAgIHQgPSBjbHMoMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMjMqNjAgKyA1OSwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodCkKIAogICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CiAgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKQEAgLTM0MTEsNiArMzQyNiwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBsb2NhbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC5zdHJmdGltZSgiJXogJVoiKSwgIi0wNDAwIEVEVCIpCiAKKyAgICBAc3VwcG9ydC5ydW5fd2l0aF90eignRVNUKzA1RURULE0zLjIuMCxNMTEuMS4wJykKKyAgICBkZWYgdGVzdF9hc3RpbWV6b25lX2RlZmF1bHRfbmVhcl9mb2xkKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNjYxNi4KKyAgICAgICAgdSA9IGRhdGV0aW1lKDIwMTUsIDExLCAxLCA1LCB0emluZm89dGltZXpvbmUudXRjKQorICAgICAgICB0ID0gdS5hc3RpbWV6b25lKCkKKyAgICAgICAgcyA9IHQuYXN0aW1lem9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50emluZm8sIHMudHppbmZvKQorCiAgICAgZGVmIHRlc3RfYXdhcmVfc3VidHJhY3Qoc2VsZik6CiAgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKIApAQCAtMzg4MCw4ICszOTAzLDU5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNfZGF0ZXRpbWUsIGRhdGV0aW1lX3NjKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGV0aW1lX3NjLCBhc19kYXRldGltZSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorICAgIGRlZiB0ZXN0X2V4dHJhX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGZvciB4IGluIFtkYXRlLnRvZGF5KCksCisgICAgICAgICAgICAgICAgICB0aW1lKCksCisgICAgICAgICAgICAgICAgICBkYXRldGltZS51dGNub3coKSwKKyAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YSgpLAorICAgICAgICAgICAgICAgICAgdHppbmZvKCksCisgICAgICAgICAgICAgICAgICB0aW1lem9uZSh0aW1lZGVsdGEoKSldOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgeC5hYmMgPSAxCisKKyAgICBkZWYgdGVzdF9jaGVja19hcmdfdHlwZXMoc2VsZik6CisgICAgICAgIGNsYXNzIE51bWJlcjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgIGZvciB4eCBpbiBbZGVjaW1hbC5EZWNpbWFsKDEwKSwKKyAgICAgICAgICAgICAgICAgICBkZWNpbWFsLkRlY2ltYWwoJzEwLjknKSwKKyAgICAgICAgICAgICAgICAgICBOdW1iZXIoMTApXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXRpbWUoMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSh4eCwgeHgsIHh4LCB4eCwgeHgsIHh4LCB4eCkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ15hbiBpbnRlZ2VyIGlzIHJlcXVpcmVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1woZ290IHR5cGUgc3RyXCkkJyk6CisgICAgICAgICAgICBkYXRldGltZSgxMCwgMTAsICcxMCcpCisKKyAgICAgICAgZjEwID0gTnVtYmVyKDEwLjkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdeX19pbnRfXyByZXR1cm5lZCBub24taW50ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wodHlwZSBmbG9hdFwpJCcpOgorICAgICAgICAgICAgZGF0ZXRpbWUoMTAsIDEwLCBmMTApCisKKyAgICAgICAgY2xhc3MgRmxvYXQoZmxvYXQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzMTAgPSBGbG9hdCgxMC45KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnXmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dvdCBmbG9hdCQnKToKKyAgICAgICAgICAgIGRhdGV0aW1lKDEwLCAxMCwgczEwKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRhdGV0aW1lKDEwLiwgMTAsIDEwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkYXRldGltZSgxMCwgMTAuLCAxMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZGF0ZXRpbWUoMTAsIDEwLCAxMC4pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRhdGV0aW1lKDEwLCAxMCwgMTAsIDEwLikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZGF0ZXRpbWUoMTAsIDEwLCAxMCwgMTAsIDEwLikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZGF0ZXRpbWUoMTAsIDEwLCAxMCwgMTAsIDEwLCAxMC4pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRhdGV0aW1lKDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZWludHJkYXRhL2VpbnRyX3Rlc3Rlci5weSBiL0xpYi90ZXN0L2VpbnRyZGF0YS9laW50cl90ZXN0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmMWFhNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2VpbnRyZGF0YS9laW50cl90ZXN0ZXIucHkKQEAgLTAsMCArMSw0ODEgQEAKKyIiIgorVGhpcyB0ZXN0IHN1aXRlIGV4ZXJjaXNlcyBzb21lIHN5c3RlbSBjYWxscyBzdWJqZWN0IHRvIGludGVycnVwdGlvbiB3aXRoIEVJTlRSLAordG8gY2hlY2sgdGhhdCBpdCBpcyBhY3R1YWxseSBoYW5kbGVkIHRyYW5zcGFyZW50bHkuCitJdCBpcyBpbnRlbmRlZCB0byBiZSBydW4gYnkgdGhlIG1haW4gdGVzdCBzdWl0ZSB3aXRoaW4gYSBjaGlsZCBwcm9jZXNzLCB0bworZW5zdXJlIHRoZXJlIGlzIG5vIGJhY2tncm91bmQgdGhyZWFkIHJ1bm5pbmcgKHNvIHRoYXQgc2lnbmFscyBhcmUgZGVsaXZlcmVkIHRvCit0aGUgY29ycmVjdCB0aHJlYWQpLgorU2lnbmFscyBhcmUgZ2VuZXJhdGVkIGluLXByb2Nlc3MgdXNpbmcgc2V0aXRpbWVyKElUSU1FUl9SRUFMKSwgd2hpY2ggYWxsb3dzCitzdWItc2Vjb25kIHBlcmlvZGljaXR5IChjb250cmFyaWx5IHRvIHNpZ25hbCgpKS4KKyIiIgorCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGtpbGxfb25fZXJyb3IocHJvYyk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIGtpbGxpbmcgdGhlIHN1YnByb2Nlc3MgaWYgYSBQeXRob24gZXhjZXB0aW9uIGlzIHJhaXNlZC4iIiIKKyAgICB3aXRoIHByb2M6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIHByb2MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJvYy5raWxsKCkKKyAgICAgICAgICAgIHJhaXNlCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJzZXRpdGltZXIiKSwgInJlcXVpcmVzIHNldGl0aW1lcigpIikKK2NsYXNzIEVJTlRSQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIiBCYXNlIGNsYXNzIGZvciBFSU5UUiB0ZXN0cy4gIiIiCisKKyAgICAjIGRlbGF5IGZvciBpbml0aWFsIHNpZ25hbCBkZWxpdmVyeQorICAgIHNpZ25hbF9kZWxheSA9IDAuMQorICAgICMgc2lnbmFsIGRlbGl2ZXJ5IHBlcmlvZGljaXR5CisgICAgc2lnbmFsX3BlcmlvZCA9IDAuMQorICAgICMgZGVmYXVsdCBzbGVlcCB0aW1lIGZvciB0ZXN0cyAtIHNob3VsZCBvYnZpb3VzbHkgaGF2ZToKKyAgICAjIHNsZWVwX3RpbWUgPiBzaWduYWxfcGVyaW9kCisgICAgc2xlZXBfdGltZSA9IDAuMgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLm9yaWdfaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGxhbWJkYSAqYXJnczogTm9uZSkKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzaWduYWwuSVRJTUVSX1JFQUwsIGNscy5zaWduYWxfZGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLnNpZ25hbF9wZXJpb2QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3RvcF9hbGFybShjbHMpOgorICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNpZ25hbC5JVElNRVJfUkVBTCwgMCwgMCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGNscy5zdG9wX2FsYXJtKCkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgY2xzLm9yaWdfaGFuZGxlcikKKworICAgIGRlZiBzdWJwcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgY21kX2FyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctYycpICsgYXJncworICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWRfYXJncywgKiprdykKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgInNldGl0aW1lciIpLCAicmVxdWlyZXMgc2V0aXRpbWVyKCkiKQorY2xhc3MgT1NFSU5UUlRlc3QoRUlOVFJCYXNlVGVzdCk6CisgICAgIiIiIEVJTlRSIHRlc3RzIGZvciB0aGUgb3MgbW9kdWxlLiAiIiIKKworICAgIGRlZiBuZXdfc2xlZXBfcHJvY2VzcyhzZWxmKToKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdGltZTsgdGltZS5zbGVlcCglciknICUgc2VsZi5zbGVlcF90aW1lCisgICAgICAgIHJldHVybiBzZWxmLnN1YnByb2Nlc3MoY29kZSkKKworICAgIGRlZiBfdGVzdF93YWl0X211bHRpcGxlKHNlbGYsIHdhaXRfZnVuYyk6CisgICAgICAgIG51bSA9IDMKKyAgICAgICAgcHJvY2Vzc2VzID0gW3NlbGYubmV3X3NsZWVwX3Byb2Nlc3MoKSBmb3IgXyBpbiByYW5nZShudW0pXQorICAgICAgICBmb3IgXyBpbiByYW5nZShudW0pOgorICAgICAgICAgICAgd2FpdF9mdW5jKCkKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfd2FpdF9tdWx0aXBsZShvcy53YWl0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3dhaXQzJyksICdyZXF1aXJlcyB3YWl0MygpJykKKyAgICBkZWYgdGVzdF93YWl0MyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF93YWl0X211bHRpcGxlKGxhbWJkYTogb3Mud2FpdDMoMCkpCisKKyAgICBkZWYgX3Rlc3Rfd2FpdF9zaW5nbGUoc2VsZiwgd2FpdF9mdW5jKToKKyAgICAgICAgcHJvYyA9IHNlbGYubmV3X3NsZWVwX3Byb2Nlc3MoKQorICAgICAgICB3YWl0X2Z1bmMocHJvYy5waWQpCisKKyAgICBkZWYgdGVzdF93YWl0cGlkKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3dhaXRfc2luZ2xlKGxhbWJkYSBwaWQ6IG9zLndhaXRwaWQocGlkLCAwKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICd3YWl0NCcpLCAncmVxdWlyZXMgd2FpdDQoKScpCisgICAgZGVmIHRlc3Rfd2FpdDQoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfd2FpdF9zaW5nbGUobGFtYmRhIHBpZDogb3Mud2FpdDQocGlkLCAwKSkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHJkLCB3ciA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHJkKQorICAgICAgICAjIHdyIGNsb3NlZCBleHBsaWNpdGx5IGJ5IHBhcmVudAorCisgICAgICAgICMgdGhlIHBheWxvYWQgYmVsb3cgYXJlIHNtYWxsZXIgdGhhbiBQSVBFX0JVRiwgaGVuY2UgdGhlIHdyaXRlcyB3aWxsIGJlCisgICAgICAgICMgYXRvbWljCisgICAgICAgIGRhdGFzID0gW2IiaGVsbG8iLCBiIndvcmxkIiwgYiJzcGFtIl0KKworICAgICAgICBjb2RlID0gJ1xuJy5qb2luKCgKKyAgICAgICAgICAgICdpbXBvcnQgb3MsIHN5cywgdGltZScsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICd3ciA9IGludChzeXMuYXJndlsxXSknLAorICAgICAgICAgICAgJ2RhdGFzID0gJXInICUgZGF0YXMsCisgICAgICAgICAgICAnc2xlZXBfdGltZSA9ICVyJyAlIHNlbGYuc2xlZXBfdGltZSwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ2ZvciBkYXRhIGluIGRhdGFzOicsCisgICAgICAgICAgICAnICAgICMgbGV0IHRoZSBwYXJlbnQgYmxvY2sgb24gcmVhZCgpJywKKyAgICAgICAgICAgICcgICAgdGltZS5zbGVlcChzbGVlcF90aW1lKScsCisgICAgICAgICAgICAnICAgIG9zLndyaXRlKHdyLCBkYXRhKScsCisgICAgICAgICkpCisKKyAgICAgICAgcHJvYyA9IHNlbGYuc3VicHJvY2Vzcyhjb2RlLCBzdHIod3IpLCBwYXNzX2Zkcz1bd3JdKQorICAgICAgICB3aXRoIGtpbGxfb25fZXJyb3IocHJvYyk6CisgICAgICAgICAgICBvcy5jbG9zZSh3cikKKyAgICAgICAgICAgIGZvciBkYXRhIGluIGRhdGFzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgb3MucmVhZChyZCwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvYy53YWl0KCksIDApCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgcmQsIHdyID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgd3IpCisgICAgICAgICMgcmQgY2xvc2VkIGV4cGxpY2l0bHkgYnkgcGFyZW50CisKKyAgICAgICAgIyB3ZSBtdXN0IHdyaXRlIGVub3VnaCBkYXRhIGZvciB0aGUgd3JpdGUoKSB0byBibG9jaworICAgICAgICBkYXRhID0gYiJ4IiAqIHN1cHBvcnQuUElQRV9NQVhfU0laRQorCisgICAgICAgIGNvZGUgPSAnXG4nLmpvaW4oKAorICAgICAgICAgICAgJ2ltcG9ydCBpbywgb3MsIHN5cywgdGltZScsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdyZCA9IGludChzeXMuYXJndlsxXSknLAorICAgICAgICAgICAgJ3NsZWVwX3RpbWUgPSAlcicgJSBzZWxmLnNsZWVwX3RpbWUsCisgICAgICAgICAgICAnZGF0YSA9IGIieCIgKiAlcycgJSBzdXBwb3J0LlBJUEVfTUFYX1NJWkUsCisgICAgICAgICAgICAnZGF0YV9sZW4gPSBsZW4oZGF0YSknLAorICAgICAgICAgICAgJycsCisgICAgICAgICAgICAnIyBsZXQgdGhlIHBhcmVudCBibG9jayBvbiB3cml0ZSgpJywKKyAgICAgICAgICAgICd0aW1lLnNsZWVwKHNsZWVwX3RpbWUpJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ3JlYWRfZGF0YSA9IGlvLkJ5dGVzSU8oKScsCisgICAgICAgICAgICAnd2hpbGUgbGVuKHJlYWRfZGF0YS5nZXR2YWx1ZSgpKSA8IGRhdGFfbGVuOicsCisgICAgICAgICAgICAnICAgIGNodW5rID0gb3MucmVhZChyZCwgMiAqIGRhdGFfbGVuKScsCisgICAgICAgICAgICAnICAgIHJlYWRfZGF0YS53cml0ZShjaHVuayknLAorICAgICAgICAgICAgJycsCisgICAgICAgICAgICAndmFsdWUgPSByZWFkX2RhdGEuZ2V0dmFsdWUoKScsCisgICAgICAgICAgICAnaWYgdmFsdWUgIT0gZGF0YTonLAorICAgICAgICAgICAgJyAgICByYWlzZSBFeGNlcHRpb24oInJlYWQgZXJyb3I6ICVzIHZzICVzIGJ5dGVzIicsCisgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAlIChsZW4odmFsdWUpLCBkYXRhX2xlbikpJywKKyAgICAgICAgKSkKKworICAgICAgICBwcm9jID0gc2VsZi5zdWJwcm9jZXNzKGNvZGUsIHN0cihyZCksIHBhc3NfZmRzPVtyZF0pCisgICAgICAgIHdpdGgga2lsbF9vbl9lcnJvcihwcm9jKToKKyAgICAgICAgICAgIG9zLmNsb3NlKHJkKQorICAgICAgICAgICAgd3JpdHRlbiA9IDAKKyAgICAgICAgICAgIHdoaWxlIHdyaXR0ZW4gPCBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgd3JpdHRlbiArPSBvcy53cml0ZSh3ciwgbWVtb3J5dmlldyhkYXRhKVt3cml0dGVuOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Mud2FpdCgpLCAwKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAic2V0aXRpbWVyIiksICJyZXF1aXJlcyBzZXRpdGltZXIoKSIpCitjbGFzcyBTb2NrZXRFSU5UUlRlc3QoRUlOVFJCYXNlVGVzdCk6CisgICAgIiIiIEVJTlRSIHRlc3RzIGZvciB0aGUgc29ja2V0IG1vZHVsZS4gIiIiCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKSwgJ25lZWRzIHNvY2tldHBhaXIoKScpCisgICAgZGVmIF90ZXN0X3JlY3Yoc2VsZiwgcmVjdl9mdW5jKToKKyAgICAgICAgcmQsIHdyID0gc29ja2V0LnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgICMgd3IgY2xvc2VkIGV4cGxpY2l0bHkgYnkgcGFyZW50CisKKyAgICAgICAgIyBzaW5nbGUtYnl0ZSBwYXlsb2FkIGd1YXJkIHVzIGFnYWluc3QgcGFydGlhbCByZWN2CisgICAgICAgIGRhdGFzID0gW2IieCIsIGIieSIsIGIieiJdCisKKyAgICAgICAgY29kZSA9ICdcbicuam9pbigoCisgICAgICAgICAgICAnaW1wb3J0IG9zLCBzb2NrZXQsIHN5cywgdGltZScsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdmZCA9IGludChzeXMuYXJndlsxXSknLAorICAgICAgICAgICAgJ2ZhbWlseSA9ICVzJyAlIGludCh3ci5mYW1pbHkpLAorICAgICAgICAgICAgJ3NvY2tfdHlwZSA9ICVzJyAlIGludCh3ci50eXBlKSwKKyAgICAgICAgICAgICdkYXRhcyA9ICVyJyAlIGRhdGFzLAorICAgICAgICAgICAgJ3NsZWVwX3RpbWUgPSAlcicgJSBzZWxmLnNsZWVwX3RpbWUsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICd3ciA9IHNvY2tldC5mcm9tZmQoZmQsIGZhbWlseSwgc29ja190eXBlKScsCisgICAgICAgICAgICAnb3MuY2xvc2UoZmQpJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ3dpdGggd3I6JywKKyAgICAgICAgICAgICcgICAgZm9yIGRhdGEgaW4gZGF0YXM6JywKKyAgICAgICAgICAgICcgICAgICAgICMgbGV0IHRoZSBwYXJlbnQgYmxvY2sgb24gcmVjdigpJywKKyAgICAgICAgICAgICcgICAgICAgIHRpbWUuc2xlZXAoc2xlZXBfdGltZSknLAorICAgICAgICAgICAgJyAgICAgICAgd3Iuc2VuZGFsbChkYXRhKScsCisgICAgICAgICkpCisKKyAgICAgICAgZmQgPSB3ci5maWxlbm8oKQorICAgICAgICBwcm9jID0gc2VsZi5zdWJwcm9jZXNzKGNvZGUsIHN0cihmZCksIHBhc3NfZmRzPVtmZF0pCisgICAgICAgIHdpdGgga2lsbF9vbl9lcnJvcihwcm9jKToKKyAgICAgICAgICAgIHdyLmNsb3NlKCkKKyAgICAgICAgICAgIGZvciBkYXRhIGluIGRhdGFzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgcmVjdl9mdW5jKHJkLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLndhaXQoKSwgMCkKKworICAgIGRlZiB0ZXN0X3JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVjdihzb2NrZXQuc29ja2V0LnJlY3YpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdyZWN2bXNnJyksICduZWVkcyByZWN2bXNnKCknKQorICAgIGRlZiB0ZXN0X3JlY3Ztc2coc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVjdihsYW1iZGEgc29jaywgZGF0YTogc29jay5yZWN2bXNnKGRhdGEpWzBdKQorCisgICAgZGVmIF90ZXN0X3NlbmQoc2VsZiwgc2VuZF9mdW5jKToKKyAgICAgICAgcmQsIHdyID0gc29ja2V0LnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisgICAgICAgICMgcmQgY2xvc2VkIGV4cGxpY2l0bHkgYnkgcGFyZW50CisKKyAgICAgICAgIyB3ZSBtdXN0IHNlbmQgZW5vdWdoIGRhdGEgZm9yIHRoZSBzZW5kKCkgdG8gYmxvY2sKKyAgICAgICAgZGF0YSA9IGIieHl6IiAqIChzdXBwb3J0LlNPQ0tfTUFYX1NJWkUgLy8gMykKKworICAgICAgICBjb2RlID0gJ1xuJy5qb2luKCgKKyAgICAgICAgICAgICdpbXBvcnQgb3MsIHNvY2tldCwgc3lzLCB0aW1lJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ2ZkID0gaW50KHN5cy5hcmd2WzFdKScsCisgICAgICAgICAgICAnZmFtaWx5ID0gJXMnICUgaW50KHJkLmZhbWlseSksCisgICAgICAgICAgICAnc29ja190eXBlID0gJXMnICUgaW50KHJkLnR5cGUpLAorICAgICAgICAgICAgJ3NsZWVwX3RpbWUgPSAlcicgJSBzZWxmLnNsZWVwX3RpbWUsCisgICAgICAgICAgICAnZGF0YSA9IGIieHl6IiAqICVzJyAlIChzdXBwb3J0LlNPQ0tfTUFYX1NJWkUgLy8gMyksCisgICAgICAgICAgICAnZGF0YV9sZW4gPSBsZW4oZGF0YSknLAorICAgICAgICAgICAgJycsCisgICAgICAgICAgICAncmQgPSBzb2NrZXQuZnJvbWZkKGZkLCBmYW1pbHksIHNvY2tfdHlwZSknLAorICAgICAgICAgICAgJ29zLmNsb3NlKGZkKScsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICd3aXRoIHJkOicsCisgICAgICAgICAgICAnICAgICMgbGV0IHRoZSBwYXJlbnQgYmxvY2sgb24gc2VuZCgpJywKKyAgICAgICAgICAgICcgICAgdGltZS5zbGVlcChzbGVlcF90aW1lKScsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICcgICAgcmVjZWl2ZWRfZGF0YSA9IGJ5dGVhcnJheShkYXRhX2xlbiknLAorICAgICAgICAgICAgJyAgICBuID0gMCcsCisgICAgICAgICAgICAnICAgIHdoaWxlIG4gPCBkYXRhX2xlbjonLAorICAgICAgICAgICAgJyAgICAgICAgbiArPSByZC5yZWN2X2ludG8obWVtb3J5dmlldyhyZWNlaXZlZF9kYXRhKVtuOl0pJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ2lmIHJlY2VpdmVkX2RhdGEgIT0gZGF0YTonLAorICAgICAgICAgICAgJyAgICByYWlzZSBFeGNlcHRpb24oInJlY3YgZXJyb3I6ICVzIHZzICVzIGJ5dGVzIicsCisgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAlIChsZW4ocmVjZWl2ZWRfZGF0YSksIGRhdGFfbGVuKSknLAorICAgICAgICApKQorCisgICAgICAgIGZkID0gcmQuZmlsZW5vKCkKKyAgICAgICAgcHJvYyA9IHNlbGYuc3VicHJvY2Vzcyhjb2RlLCBzdHIoZmQpLCBwYXNzX2Zkcz1bZmRdKQorICAgICAgICB3aXRoIGtpbGxfb25fZXJyb3IocHJvYyk6CisgICAgICAgICAgICByZC5jbG9zZSgpCisgICAgICAgICAgICB3cml0dGVuID0gMAorICAgICAgICAgICAgd2hpbGUgd3JpdHRlbiA8IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZW50ID0gc2VuZF9mdW5jKHdyLCBtZW1vcnl2aWV3KGRhdGEpW3dyaXR0ZW46XSkKKyAgICAgICAgICAgICAgICAjIHNlbmRhbGwoKSByZXR1cm5zIE5vbmUKKyAgICAgICAgICAgICAgICB3cml0dGVuICs9IGxlbihkYXRhKSBpZiBzZW50IGlzIE5vbmUgZWxzZSBzZW50CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Mud2FpdCgpLCAwKQorCisgICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zZW5kKHNvY2tldC5zb2NrZXQuc2VuZCkKKworICAgIGRlZiB0ZXN0X3NlbmRhbGwoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2VuZChzb2NrZXQuc29ja2V0LnNlbmRhbGwpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdzZW5kbXNnJyksICduZWVkcyBzZW5kbXNnKCknKQorICAgIGRlZiB0ZXN0X3NlbmRtc2coc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2VuZChsYW1iZGEgc29jaywgZGF0YTogc29jay5zZW5kbXNnKFtkYXRhXSkpCisKKyAgICBkZWYgdGVzdF9hY2NlcHQoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorCisgICAgICAgIHNvY2suYmluZCgoc3VwcG9ydC5IT1NULCAwKSkKKyAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQorICAgICAgICBzb2NrLmxpc3RlbigpCisKKyAgICAgICAgY29kZSA9ICdcbicuam9pbigoCisgICAgICAgICAgICAnaW1wb3J0IHNvY2tldCwgdGltZScsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdob3N0ID0gJXInICUgc3VwcG9ydC5IT1NULAorICAgICAgICAgICAgJ3BvcnQgPSAlcycgJSBwb3J0LAorICAgICAgICAgICAgJ3NsZWVwX3RpbWUgPSAlcicgJSBzZWxmLnNsZWVwX3RpbWUsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICcjIGxldCBwYXJlbnQgYmxvY2sgb24gYWNjZXB0KCknLAorICAgICAgICAgICAgJ3RpbWUuc2xlZXAoc2xlZXBfdGltZSknLAorICAgICAgICAgICAgJ3dpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSk6JywKKyAgICAgICAgICAgICcgICAgdGltZS5zbGVlcChzbGVlcF90aW1lKScsCisgICAgICAgICkpCisKKyAgICAgICAgcHJvYyA9IHNlbGYuc3VicHJvY2Vzcyhjb2RlKQorICAgICAgICB3aXRoIGtpbGxfb25fZXJyb3IocHJvYyk6CisgICAgICAgICAgICBjbGllbnRfc29jaywgXyA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGNsaWVudF9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvYy53YWl0KCksIDApCisKKyAgICAjIElzc3VlICMyNTEyMjogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgRnJlZUJTRCBrZXJuZWwgb24KKyAgICAjIGhhbmRsaW5nIHNpZ25hbHMgaW4gdGhlIEZJRk8gZGV2aWNlLiBTa2lwIHRoZSB0ZXN0IHVudGlsIHRoZSBidWcgaXMKKyAgICAjIGZpeGVkIGluIHRoZSBrZXJuZWwuCisgICAgIyBodHRwczovL2J1Z3MuZnJlZWJzZC5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTIwMzE2MgorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbigxMCwgMykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnbWtmaWZvJyksICduZWVkcyBta2ZpZm8oKScpCisgICAgZGVmIF90ZXN0X29wZW4oc2VsZiwgZG9fb3Blbl9jbG9zZV9yZWFkZXIsIGRvX29wZW5fY2xvc2Vfd3JpdGVyKToKKyAgICAgICAgZmlsZW5hbWUgPSBzdXBwb3J0LlRFU1RGTgorCisgICAgICAgICMgVXNlIGEgZmlmbzogdW50aWwgdGhlIGNoaWxkIG9wZW5zIGl0IGZvciByZWFkaW5nLCB0aGUgcGFyZW50IHdpbGwKKyAgICAgICAgIyBibG9jayB3aGVuIHRyeWluZyB0byBvcGVuIGl0IGZvciB3cml0aW5nLgorICAgICAgICBzdXBwb3J0LnVubGluayhmaWxlbmFtZSkKKyAgICAgICAgb3MubWtmaWZvKGZpbGVuYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZpbGVuYW1lKQorCisgICAgICAgIGNvZGUgPSAnXG4nLmpvaW4oKAorICAgICAgICAgICAgJ2ltcG9ydCBvcywgdGltZScsCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICdwYXRoID0gJWEnICUgZmlsZW5hbWUsCisgICAgICAgICAgICAnc2xlZXBfdGltZSA9ICVyJyAlIHNlbGYuc2xlZXBfdGltZSwKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJyMgbGV0IHRoZSBwYXJlbnQgYmxvY2snLAorICAgICAgICAgICAgJ3RpbWUuc2xlZXAoc2xlZXBfdGltZSknLAorICAgICAgICAgICAgJycsCisgICAgICAgICAgICBkb19vcGVuX2Nsb3NlX3JlYWRlciwKKyAgICAgICAgKSkKKworICAgICAgICBwcm9jID0gc2VsZi5zdWJwcm9jZXNzKGNvZGUpCisgICAgICAgIHdpdGgga2lsbF9vbl9lcnJvcihwcm9jKToKKyAgICAgICAgICAgIGRvX29wZW5fY2xvc2Vfd3JpdGVyKGZpbGVuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLndhaXQoKSwgMCkKKworICAgIGRlZiBweXRob25fb3BlbihzZWxmLCBwYXRoKToKKyAgICAgICAgZnAgPSBvcGVuKHBhdGgsICd3JykKKyAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9vcGVuKCJmcCA9IG9wZW4ocGF0aCwgJ3InKVxuZnAuY2xvc2UoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB5dGhvbl9vcGVuKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsICJoYW5ncyB1bmRlciBPUyBYOyBzZWUgaXNzdWUgIzI1MjM0IikKKyAgICBkZWYgb3Nfb3BlbihzZWxmLCBwYXRoKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKHBhdGgsIG9zLk9fV1JPTkxZKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iLCAiaGFuZ3MgdW5kZXIgT1MgWDsgc2VlIGlzc3VlICMyNTIzNCIpCisgICAgZGVmIHRlc3Rfb3Nfb3BlbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9vcGVuKCJmZCA9IG9zLm9wZW4ocGF0aCwgb3MuT19SRE9OTFkpXG5vcy5jbG9zZShmZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vc19vcGVuKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAic2V0aXRpbWVyIiksICJyZXF1aXJlcyBzZXRpdGltZXIoKSIpCitjbGFzcyBUaW1lRUlOVFJUZXN0KEVJTlRSQmFzZVRlc3QpOgorICAgICIiIiBFSU5UUiB0ZXN0cyBmb3IgdGhlIHRpbWUgbW9kdWxlLiAiIiIKKworICAgIGRlZiB0ZXN0X3NsZWVwKHNlbGYpOgorICAgICAgICB0MCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgdGltZS5zbGVlcChzZWxmLnNsZWVwX3RpbWUpCisgICAgICAgIHNlbGYuc3RvcF9hbGFybSgpCisgICAgICAgIGR0ID0gdGltZS5tb25vdG9uaWMoKSAtIHQwCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGR0LCBzZWxmLnNsZWVwX3RpbWUpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJzZXRpdGltZXIiKSwgInJlcXVpcmVzIHNldGl0aW1lcigpIikKK2NsYXNzIFNpZ25hbEVJTlRSVGVzdChFSU5UUkJhc2VUZXN0KToKKyAgICAiIiIgRUlOVFIgdGVzdHMgZm9yIHRoZSBzaWduYWwgbW9kdWxlLiAiIiIKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnc2lndGltZWR3YWl0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZWQgc2lnbmFsLnNpZ3RpbWVkd2FpdCgpJykKKyAgICBkZWYgdGVzdF9zaWd0aW1lZHdhaXQoc2VsZik6CisgICAgICAgIHQwID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBzaWduYWwuc2lndGltZWR3YWl0KFtzaWduYWwuU0lHVVNSMV0sIHNlbGYuc2xlZXBfdGltZSkKKyAgICAgICAgZHQgPSB0aW1lLm1vbm90b25pYygpIC0gdDAKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZHQsIHNlbGYuc2xlZXBfdGltZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnc2lnd2FpdGluZm8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZCBzaWduYWwuc2lnd2FpdGluZm8oKScpCisgICAgZGVmIHRlc3Rfc2lnd2FpdGluZm8oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI1Mjc3LCAjMjU4Njg6IGdpdmUgYSBmZXcgbWlsbGlzZWNvbmRzIHRvIHRoZSBwYXJlbnQgcHJvY2VzcworICAgICAgICAjIGJldHdlZW4gb3Mud3JpdGUoKSBhbmQgc2lnbmFsLnNpZ3dhaXRpbmZvKCkgdG8gd29ya3MgYXJvdW5kIGEgcmFjZQorICAgICAgICAjIGNvbmRpdGlvbgorICAgICAgICBzZWxmLnNsZWVwX3RpbWUgPSAwLjEwMAorCisgICAgICAgIHNpZ251bSA9IHNpZ25hbC5TSUdVU1IxCisgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisKKyAgICAgICAgb2xkX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ251bSwgbGFtYmRhICphcmdzOiBOb25lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLnNpZ25hbCwgc2lnbnVtLCBvbGRfaGFuZGxlcikKKworICAgICAgICBycGlwZSwgd3BpcGUgPSBvcy5waXBlKCkKKworICAgICAgICBjb2RlID0gJ1xuJy5qb2luKCgKKyAgICAgICAgICAgICdpbXBvcnQgb3MsIHRpbWUnLAorICAgICAgICAgICAgJ3BpZCA9ICVzJyAlIG9zLmdldHBpZCgpLAorICAgICAgICAgICAgJ3NpZ251bSA9ICVzJyAlIGludChzaWdudW0pLAorICAgICAgICAgICAgJ3NsZWVwX3RpbWUgPSAlcicgJSBzZWxmLnNsZWVwX3RpbWUsCisgICAgICAgICAgICAncnBpcGUgPSAlcicgJSBycGlwZSwKKyAgICAgICAgICAgICdvcy5yZWFkKHJwaXBlLCAxKScsCisgICAgICAgICAgICAnb3MuY2xvc2UocnBpcGUpJywKKyAgICAgICAgICAgICd0aW1lLnNsZWVwKHNsZWVwX3RpbWUpJywKKyAgICAgICAgICAgICdvcy5raWxsKHBpZCwgc2lnbnVtKScsCisgICAgICAgICkpCisKKyAgICAgICAgdDAgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHByb2MgPSBzZWxmLnN1YnByb2Nlc3MoY29kZSwgcGFzc19mZHM9KHJwaXBlLCkpCisgICAgICAgIG9zLmNsb3NlKHJwaXBlKQorICAgICAgICB3aXRoIGtpbGxfb25fZXJyb3IocHJvYyk6CisgICAgICAgICAgICAjIHN5bmMgY2hpbGQtcGFyZW50CisgICAgICAgICAgICBvcy53cml0ZSh3cGlwZSwgYid4JykKKyAgICAgICAgICAgIG9zLmNsb3NlKHdwaXBlKQorCisgICAgICAgICAgICAjIHBhcmVudAorICAgICAgICAgICAgc2lnbmFsLnNpZ3dhaXRpbmZvKFtzaWdudW1dKQorICAgICAgICAgICAgZHQgPSB0aW1lLm1vbm90b25pYygpIC0gdDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvYy53YWl0KCksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZHQsIHNlbGYuc2xlZXBfdGltZSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgInNldGl0aW1lciIpLCAicmVxdWlyZXMgc2V0aXRpbWVyKCkiKQorY2xhc3MgU2VsZWN0RUlOVFJUZXN0KEVJTlRSQmFzZVRlc3QpOgorICAgICIiIiBFSU5UUiB0ZXN0cyBmb3IgdGhlIHNlbGVjdCBtb2R1bGUuICIiIgorCisgICAgZGVmIHRlc3Rfc2VsZWN0KHNlbGYpOgorICAgICAgICB0MCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgc2VsZWN0LnNlbGVjdChbXSwgW10sIFtdLCBzZWxmLnNsZWVwX3RpbWUpCisgICAgICAgIGR0ID0gdGltZS5tb25vdG9uaWMoKSAtIHQwCisgICAgICAgIHNlbGYuc3RvcF9hbGFybSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGR0LCBzZWxmLnNsZWVwX3RpbWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKSwgJ25lZWQgc2VsZWN0LnBvbGwnKQorICAgIGRlZiB0ZXN0X3BvbGwoc2VsZik6CisgICAgICAgIHBvbGxlciA9IHNlbGVjdC5wb2xsKCkKKworICAgICAgICB0MCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgcG9sbGVyLnBvbGwoc2VsZi5zbGVlcF90aW1lICogMWUzKQorICAgICAgICBkdCA9IHRpbWUubW9ub3RvbmljKCkgLSB0MAorICAgICAgICBzZWxmLnN0b3BfYWxhcm0oKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkdCwgc2VsZi5zbGVlcF90aW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3QsICdlcG9sbCcpLCAnbmVlZCBzZWxlY3QuZXBvbGwnKQorICAgIGRlZiB0ZXN0X2Vwb2xsKHNlbGYpOgorICAgICAgICBwb2xsZXIgPSBzZWxlY3QuZXBvbGwoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocG9sbGVyLmNsb3NlKQorCisgICAgICAgIHQwID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBwb2xsZXIucG9sbChzZWxmLnNsZWVwX3RpbWUpCisgICAgICAgIGR0ID0gdGltZS5tb25vdG9uaWMoKSAtIHQwCisgICAgICAgIHNlbGYuc3RvcF9hbGFybSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGR0LCBzZWxmLnNsZWVwX3RpbWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdCwgJ2txdWV1ZScpLCAnbmVlZCBzZWxlY3Qua3F1ZXVlJykKKyAgICBkZWYgdGVzdF9rcXVldWUoc2VsZik6CisgICAgICAgIGtxdWV1ZSA9IHNlbGVjdC5rcXVldWUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoa3F1ZXVlLmNsb3NlKQorCisgICAgICAgIHQwID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBrcXVldWUuY29udHJvbChOb25lLCAxLCBzZWxmLnNsZWVwX3RpbWUpCisgICAgICAgIGR0ID0gdGltZS5tb25vdG9uaWMoKSAtIHQwCisgICAgICAgIHNlbGYuc3RvcF9hbGFybSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGR0LCBzZWxmLnNsZWVwX3RpbWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdCwgJ2RldnBvbGwnKSwgJ25lZWQgc2VsZWN0LmRldnBvbGwnKQorICAgIGRlZiB0ZXN0X2RldnBvbGwoc2VsZik6CisgICAgICAgIHBvbGxlciA9IHNlbGVjdC5kZXZwb2xsKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHBvbGxlci5jbG9zZSkKKworICAgICAgICB0MCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgcG9sbGVyLnBvbGwoc2VsZi5zbGVlcF90aW1lICogMWUzKQorICAgICAgICBkdCA9IHRpbWUubW9ub3RvbmljKCkgLSB0MAorICAgICAgICBzZWxmLnN0b3BfYWxhcm0oKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkdCwgc2VsZi5zbGVlcF90aW1lKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgT1NFSU5UUlRlc3QsCisgICAgICAgIFNvY2tldEVJTlRSVGVzdCwKKyAgICAgICAgVGltZUVJTlRSVGVzdCwKKyAgICAgICAgU2lnbmFsRUlOVFJUZXN0LAorICAgICAgICBTZWxlY3RFSU5UUlRlc3QpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZXhjZXB0aW9uX2hpZXJhcmNoeS50eHQgYi9MaWIvdGVzdC9leGNlcHRpb25faGllcmFyY2h5LnR4dAppbmRleCAxYzFmNjlmLi4wNTEzNzY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9leGNlcHRpb25faGllcmFyY2h5LnR4dAorKysgYi9MaWIvdGVzdC9leGNlcHRpb25faGllcmFyY2h5LnR4dApAQCAtNCw2ICs0LDcgQEAKICArLS0gR2VuZXJhdG9yRXhpdAogICstLSBFeGNlcHRpb24KICAgICAgICstLSBTdG9wSXRlcmF0aW9uCisgICAgICArLS0gU3RvcEFzeW5jSXRlcmF0aW9uCiAgICAgICArLS0gQXJpdGhtZXRpY0Vycm9yCiAgICAgICB8ICAgICstLSBGbG9hdGluZ1BvaW50RXJyb3IKICAgICAgIHwgICAgKy0tIE92ZXJmbG93RXJyb3IKQEAgLTM4LDYgKzM5LDcgQEAKICAgICAgICstLSBSZWZlcmVuY2VFcnJvcgogICAgICAgKy0tIFJ1bnRpbWVFcnJvcgogICAgICAgfCAgICArLS0gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgfCAgICArLS0gUmVjdXJzaW9uRXJyb3IKICAgICAgICstLSBTeW50YXhFcnJvcgogICAgICAgfCAgICArLS0gSW5kZW50YXRpb25FcnJvcgogICAgICAgfCAgICAgICAgICstLSBUYWJFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZm9ya193YWl0LnB5IGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CmluZGV4IDE5YjU0ZWMuLjcxMzAzOWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQorKysgYi9MaWIvdGVzdC9mb3JrX3dhaXQucHkKQEAgLTQ4LDcgKzQ4LDEyIEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTV9USFJFQURTKToKICAgICAgICAgICAgIF90aHJlYWQuc3RhcnRfbmV3KHNlbGYuZiwgKGksKSkKIAotICAgICAgICB0aW1lLnNsZWVwKExPTkdTTEVFUCkKKyAgICAgICAgIyBidXN5LWxvb3AgdG8gd2FpdCBmb3IgdGhyZWFkcworICAgICAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyAxMC4wCisgICAgICAgIHdoaWxlIGxlbihzZWxmLmFsaXZlKSA8IE5VTV9USFJFQURTOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgICAgICBpZiBkZWFkbGluZSA8IHRpbWUubW9ub3RvbmljKCk6CisgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBhID0gc29ydGVkKHNlbGYuYWxpdmUua2V5cygpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGxpc3QocmFuZ2UoTlVNX1RIUkVBRFMpKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLmV4ciBiL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLmV4cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzNjODFlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1naGRyZGF0YS9weXRob24uZXhyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltZ2hkcmRhdGEvcHl0aG9uLndlYnAgYi9MaWIvdGVzdC9pbWdoZHJkYXRhL3B5dGhvbi53ZWJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MjRlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9pbWdoZHJkYXRhL3B5dGhvbi53ZWJwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ltcF9kdW1teS5weSBiL0xpYi90ZXN0L2ltcF9kdW1teS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRkZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvaW1wX2R1bW15LnB5CkBAIC0wLDAgKzEsMyBAQAorIyBGb2RkZXIgZm9yIHRlc3Qgb2YgaXNzdWUyNDc0OCBpbiB0ZXN0X2ltcAorCitkdW1teV9uYW1lID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvaW5zcGVjdF9mb2RkZXIucHkgYi9MaWIvdGVzdC9pbnNwZWN0X2ZvZGRlci5weQppbmRleCAwYzFkODEwLi43MTFiYWRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9pbnNwZWN0X2ZvZGRlci5weQorKysgYi9MaWIvdGVzdC9pbnNwZWN0X2ZvZGRlci5weQpAQCAtNDUsOSArNDUsMTkgQEAKICAgICAgICAgICAgIHNlbGYuZXggPSBzeXMuZXhjX2luZm8oKQogICAgICAgICAgICAgc2VsZi50ciA9IGluc3BlY3QudHJhY2UoKQogCi0jIGxpbmUgNDgKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29udHJhZGljdGlvbihzZWxmKToKKyAgICAgICAgJ1RoZSBhdXRvbWF0aWMgZ2FpbnNheWluZy4nCisgICAgICAgIHBhc3MKKworIyBsaW5lIDUzCiBjbGFzcyBNYWxvZG9yb3VzUGVydmVydChTdHVwaWRHaXQpOgotICAgIHBhc3MKKyAgICBkZWYgYWJ1c2Uoc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHBhc3MKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjb250cmFkaWN0aW9uKHNlbGYpOgorICAgICAgICBwYXNzCiAKIFRpdCA9IE1hbG9kb3JvdXNQZXJ2ZXJ0CiAKQEAgLTU1LDQgKzY1LDEyIEBACiAgICAgcGFzcwogCiBjbGFzcyBGZXN0ZXJpbmdHb2IoTWFsb2Rvcm91c1BlcnZlcnQsIFBhcnJvdERyb3BwaW5ncyk6CisgICAgZGVmIGFidXNlKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICBwYXNzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29udHJhZGljdGlvbihzZWxmKToKKyAgICAgICAgcGFzcworCithc3luYyBkZWYgbG9iYmVzdChncmVuYWRlKToKICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9pbnNwZWN0X2ZvZGRlcjIucHkgYi9MaWIvdGVzdC9pbnNwZWN0X2ZvZGRlcjIucHkKaW5kZXggYmQ3MTA2Zi4uYzY5ODdlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvaW5zcGVjdF9mb2RkZXIyLnB5CisrKyBiL0xpYi90ZXN0L2luc3BlY3RfZm9kZGVyMi5weQpAQCAtMTA5LDMgKzEwOSwzMSBAQAogI2xpbmUgMTA5CiBkZWYga2V5d29yZF9vbmx5X2FyZygqLCBhcmcpOgogICAgIHBhc3MKKworQHdyYXAobGFtYmRhOiBOb25lKQorZGVmIGZ1bmMxMTQoKToKKyAgICByZXR1cm4gMTE1CisKK2NsYXNzIENsYXNzV2l0aE1ldGhvZDoKKyAgICBkZWYgbWV0aG9kKHNlbGYpOgorICAgICAgICBwYXNzCisKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworCitkZWYgZGVjb3JhdG9yKGZ1bmMpOgorICAgIEB3cmFwcyhmdW5jKQorICAgIGRlZiBmYWtlKCk6CisgICAgICAgIHJldHVybiA0MgorICAgIHJldHVybiBmYWtlCisKKyNsaW5lIDEyOQorQGRlY29yYXRvcgorZGVmIHJlYWwoKToKKyAgICByZXR1cm4gMjAKKworI2xpbmUgMTM0CitjbGFzcyBjbHMxMzU6CisgICAgZGVmIGZ1bmMxMzYoKToKKyAgICAgICAgZGVmIGZ1bmMxMzcoKToKKyAgICAgICAgICAgIG5ldmVyX3JlYWNoZWQxCisgICAgICAgICAgICBuZXZlcl9yZWFjaGVkMgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbGlzdF90ZXN0cy5weSBiL0xpYi90ZXN0L2xpc3RfdGVzdHMucHkKaW5kZXggNDJlMTE4Yi4uZjIwZmRjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbGlzdF90ZXN0cy5weQorKysgYi9MaWIvdGVzdC9saXN0X3Rlc3RzLnB5CkBAIC0zMCw2ICszMCwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQogCisgICAgZGVmIHRlc3RfZ2V0aXRlbV9lcnJvcihzZWxmKToKKyAgICAgICAgbXNnID0gImxpc3QgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yIHNsaWNlcyIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGEgPSBbXQorICAgICAgICAgICAgYVsnYSddID0gInB5dGhvbiIKKwogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGwwID0gW10KICAgICAgICAgbDIgPSBbMCwgMSwgMl0KQEAgLTUwLDcgKzU2LDcgQEAKICAgICAgICAgbDAgPSBbXQogICAgICAgICBmb3IgaSBpbiByYW5nZShzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSArIDEwMCk6CiAgICAgICAgICAgICBsMCA9IFtsMF0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCByZXByLCBsMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIHJlcHIsIGwwKQogCiAgICAgZGVmIHRlc3RfcHJpbnQoc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLnR5cGUydGVzdChyYW5nZSgyMDApKQpAQCAtMTIwLDYgKzEyNiwxMCBAQAogICAgICAgICBhWy0xXSA9IDkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbNSw2LDcsOCw5XSkpCiAKKyAgICAgICAgbXNnID0gImxpc3QgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yIHNsaWNlcyIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGFbJ2EnXSA9ICJweXRob24iCisKICAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgogICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQogICAgICAgICBkZWwgYVsxXQpAQCAtNTgzLDMgKzU5MywxNCBAQAogICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBsaXN0LCBGKCkpCisKKyAgICBkZWYgdGVzdF9leGhhdXN0ZWRfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgM10pCisgICAgICAgIGV4aGl0ID0gaXRlcihhKQorICAgICAgICBlbXBpdCA9IGl0ZXIoYSkKKyAgICAgICAgZm9yIHggaW4gZXhoaXQ6ICAjIGV4aGF1c3QgdGhlIGl0ZXJhdG9yCisgICAgICAgICAgICBuZXh0KGVtcGl0KSAgIyBub3QgZXhoYXVzdGVkCisgICAgICAgIGEuYXBwZW5kKDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChleGhpdCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZW1waXQpLCBbOV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzEsIDIsIDMsIDldKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CmluZGV4IDQ2MmVjZWYuLmE2NGFhMTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQpAQCAtODYsNyArODYsMTMgQEAKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKLSAgICAgICAgcmVwcihsb2NrKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIobG9jayksICI8dW5sb2NrZWQgLiogb2JqZWN0ICguKik/YXQgLio+IikKKyAgICAgICAgZGVsIGxvY2sKKworICAgIGRlZiB0ZXN0X2xvY2tlZF9yZXByKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihsb2NrKSwgIjxsb2NrZWQgLiogb2JqZWN0ICguKik/YXQgLio+IikKICAgICAgICAgZGVsIGxvY2sKIAogICAgIGRlZiB0ZXN0X2FjcXVpcmVfZGVzdHJveShzZWxmKToKQEAgLTM4OSwxMiArMzk1LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgW1RydWVdICogTikKIAogICAgIGRlZiB0ZXN0X3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYpOgorICAgICAgICAjIGVuc3VyZSB0aGF0IGNvbmRpdGlvbiBpcyBzdGlsbCB1c2luZyBhIExvY2sgYWZ0ZXIgcmVzZXQKICAgICAgICAgZXZ0ID0gc2VsZi5ldmVudHR5cGUoKQotICAgICAgICBvbGRfbG9jayA9IGV2dC5fY29uZC5fbG9jaworICAgICAgICB3aXRoIGV2dC5fY29uZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZ0Ll9jb25kLmFjcXVpcmUoRmFsc2UpKQogICAgICAgICBldnQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKLSAgICAgICAgbmV3X2xvY2sgPSBldnQuX2NvbmQuX2xvY2sKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdChuZXdfbG9jaywgb2xkX2xvY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShuZXdfbG9jayksIHR5cGUob2xkX2xvY2spKQorICAgICAgICB3aXRoIGV2dC5fY29uZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZ0Ll9jb25kLmFjcXVpcmUoRmFsc2UpKQogCiAKIGNsYXNzIENvbmRpdGlvblRlc3RzKEJhc2VUZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tb2NrX3NvY2tldC5weSBiL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CmluZGV4IGUzNjcyNGYuLmIyOGM0NzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CkBAIC0zNSw4ICszNSw5IEBACiBjbGFzcyBNb2NrU29ja2V0OgogICAgICIiIk1vY2sgc29ja2V0IG9iamVjdCB1c2VkIGJ5IHNtdHBkIGFuZCBzbXRwbGliIHRlc3RzLgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmFtaWx5PU5vbmUpOgogICAgICAgICBnbG9iYWwgX3JlcGx5X2RhdGEKKyAgICAgICAgc2VsZi5mYW1pbHkgPSBmYW1pbHkKICAgICAgICAgc2VsZi5vdXRwdXQgPSBbXQogICAgICAgICBzZWxmLmxpbmVzID0gW10KICAgICAgICAgaWYgX3JlcGx5X2RhdGE6CkBAIC0xMDEsMTUgKzEwMiwxNCBAQAogICAgICAgICByZXR1cm4gbGVuKGRhdGEpCiAKICAgICBkZWYgZ2V0cGVlcm5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiAncGVlcicKKyAgICAgICAgcmV0dXJuICgncGVlci1hZGRyZXNzJywgJ3BlZXItcG9ydCcpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIHBhc3MKIAogCiBkZWYgc29ja2V0KGZhbWlseT1Ob25lLCB0eXBlPU5vbmUsIHByb3RvPU5vbmUpOgotICAgIHJldHVybiBNb2NrU29ja2V0KCkKLQorICAgIHJldHVybiBNb2NrU29ja2V0KGZhbWlseSkKIAogZGVmIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MsIHRpbWVvdXQ9c29ja2V0X21vZHVsZS5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKToKQEAgLTE0NCwxMyArMTQ0LDE2IEBACiBkZWYgZ2V0aG9zdGJ5bmFtZShuYW1lKToKICAgICByZXR1cm4gIiIKIAorZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICByZXR1cm4gc29ja2V0X21vZHVsZS5nZXRhZGRyaW5mbygqYXJncywgKiprdykKIAogZ2FpZXJyb3IgPSBzb2NrZXRfbW9kdWxlLmdhaWVycm9yCiBlcnJvciA9IHNvY2tldF9tb2R1bGUuZXJyb3IKIAogCiAjIENvbnN0YW50cwotQUZfSU5FVCA9IE5vbmUKLVNPQ0tfU1RSRUFNID0gTm9uZQorQUZfSU5FVCA9IHNvY2tldF9tb2R1bGUuQUZfSU5FVAorQUZfSU5FVDYgPSBzb2NrZXRfbW9kdWxlLkFGX0lORVQ2CitTT0NLX1NUUkVBTSA9IHNvY2tldF9tb2R1bGUuU09DS19TVFJFQU0KIFNPTF9TT0NLRVQgPSBOb25lCiBTT19SRVVTRUFERFIgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKaW5kZXggYjk0OGM1NS4uNzkyMmI1NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CisrKyBiL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQpAQCAtMTgxNSwxNiArMTgxNSw2MiBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bV9hZGRpdGVtcywgMikKIAogICAgIGRlZiB0ZXN0X3NpbXBsZV9uZXdvYmooc2VsZik6Ci0gICAgICAgIHggPSBvYmplY3QuX19uZXdfXyhTaW1wbGVOZXdPYmopICAjIGF2b2lkIF9faW5pdF9fCisgICAgICAgIHggPSBTaW1wbGVOZXdPYmouX19uZXdfXyhTaW1wbGVOZXdPYmosIDB4ZmFjZSkgICMgYXZvaWQgX19pbml0X18KICAgICAgICAgeC5hYmMgPSA2NjYKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkosIHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDw9IHByb3RvIDwgNCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKX0VYLCBzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8gPj0gNCkKLSAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpICAgIyB3aWxsIHJhaXNlIFR5cGVFcnJvciBpZiBfX2luaXRfXyBjYWxsZWQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgICAgICBpZiBwcm90byA8IDE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidcbkw2NDIwNicsIHMpICAjIExPTkcKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInTVx4Y2VceGZhJywgcykgICMgQklOSU5UMgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKLCBzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPD0gcHJvdG8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkpfRVgsIHMpKQorICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpICAgIyB3aWxsIHJhaXNlIFR5cGVFcnJvciBpZiBfX2luaXRfXyBjYWxsZWQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICBkZWYgdGVzdF9jb21wbGV4X25ld29iaihzZWxmKToKKyAgICAgICAgeCA9IENvbXBsZXhOZXdPYmouX19uZXdfXyhDb21wbGV4TmV3T2JqLCAweGZhY2UpICAjIGF2b2lkIF9faW5pdF9fCisgICAgICAgIHguYWJjID0gNjY2CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAxOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInXG5MNjQyMDYnLCBzKSAgIyBMT05HCisgICAgICAgICAgICAgICAgZWxpZiBwcm90byA8IDI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidNXHhjZVx4ZmEnLCBzKSAgIyBCSU5JTlQyCisgICAgICAgICAgICAgICAgZWxpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidYXHgwNFx4MDBceDAwXHgwMEZBQ0UnLCBzKSAgIyBCSU5VTklDT0RFCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4OGNceDA0RkFDRScsIHMpICAjIFNIT1JUX0JJTlVOSUNPREUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSiwgcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDw9IHByb3RvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKX0VYLCBzKSkKKyAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKSAgICMgd2lsbCByYWlzZSBUeXBlRXJyb3IgaWYgX19pbml0X18gY2FsbGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgZGVmIHRlc3RfY29tcGxleF9uZXdvYmpfZXgoc2VsZik6CisgICAgICAgIHggPSBDb21wbGV4TmV3T2JqRXguX19uZXdfXyhDb21wbGV4TmV3T2JqRXgsIDB4ZmFjZSkgICMgYXZvaWQgX19pbml0X18KKyAgICAgICAgeC5hYmMgPSA2NjYKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBpZiAyIDw9IHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5kdW1wcywgeCwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAxOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInXG5MNjQyMDYnLCBzKSAgIyBMT05HCisgICAgICAgICAgICAgICAgZWxpZiBwcm90byA8IDI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidNXHhjZVx4ZmEnLCBzKSAgIyBCSU5JTlQyCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHByb3RvID49IDQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4OGNceDA0RkFDRScsIHMpICAjIFNIT1JUX0JJTlVOSUNPREUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSiwgcykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkpfRVgsIHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA8PSBwcm90bykKKyAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKSAgICMgd2lsbCByYWlzZSBUeXBlRXJyb3IgaWYgX19pbml0X18gY2FsbGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgZGVmIHRlc3RfbmV3b2JqX2xpc3Rfc2xvdHMoc2VsZik6CiAgICAgICAgIHggPSBTbG90TGlzdChbMSwgMiwgM10pCkBAIC0xODk4LDE1ICsxOTQ0LDE1IEBACiAgICAgICAgICAgICAgICAgIyA1dGggaXRlbSBpcyBub3QgYW4gaXRlcmF0b3IKICAgICAgICAgICAgICAgICByZXR1cm4gZGljdCwgKCksIE5vbmUsIE5vbmUsIFtdCiAKLSAgICAgICAgIyBQcm90b2NvbCAwIGlzIGxlc3Mgc3RyaWN0IGFuZCBhbHNvIGFjY2VwdCBpdGVyYWJsZXMuCisgICAgICAgICMgUHl0aG9uIGltcGxlbWVudGF0aW9uIGlzIGxlc3Mgc3RyaWN0IGFuZCBhbHNvIGFjY2VwdHMgaXRlcmFibGVzLgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoQygpLCBwcm90bykKLSAgICAgICAgICAgIGV4Y2VwdCAocGlja2xlLlBpY2tsZUVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCBwaWNrbGUuUGlja2xpbmdFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhEKCksIHByb3RvKQotICAgICAgICAgICAgZXhjZXB0IChwaWNrbGUuUGlja2xlRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IHBpY2tsZS5QaWNrbGluZ0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X21hbnlfcHV0c19hbmRfZ2V0cyhzZWxmKToKQEAgLTIwODgsMTMgKzIxMzQsMjQgQEAKICAgICAgICAgICAgICAgICBjbGFzcyBCOgogICAgICAgICAgICAgICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGZvciBvYmogaW4gW05lc3RlZC5BLCBOZXN0ZWQuQS5CLCBOZXN0ZWQuQS5CLkNdOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBvYmo9b2JqKToKICAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG9iaiwgcHJvdG8pKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9iaiwgdW5waWNrbGVkKQogCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX25lc3RlZF9uYW1lcyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIFJlY3Vyc2l2ZQorICAgICAgICBjbGFzcyBSZWN1cnNpdmU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIFJlY3Vyc2l2ZS5tb2QgPSBzeXMubW9kdWxlc1tSZWN1cnNpdmUuX19tb2R1bGVfX10KKyAgICAgICAgUmVjdXJzaXZlLl9fcXVhbG5hbWVfXyA9ICdSZWN1cnNpdmUubW9kLlJlY3Vyc2l2ZScKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKFJlY3Vyc2l2ZSwgcHJvdG8pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkLCBSZWN1cnNpdmUpCisgICAgICAgIGRlbCBSZWN1cnNpdmUubW9kICMgYnJlYWsgcmVmZXJlbmNlIGxvb3AKKwogICAgIGRlZiB0ZXN0X3B5X21ldGhvZHMoc2VsZik6CiAgICAgICAgIGdsb2JhbCBQeU1ldGhvZHNUZXN0CiAgICAgICAgIGNsYXNzIFB5TWV0aG9kc1Rlc3Q6CkBAIC0yMTMzLDcgKzIxOTAsNyBAQAogICAgICAgICAgICAgKFB5TWV0aG9kc1Rlc3QuYmlzY3VpdHMsIFB5TWV0aG9kc1Rlc3QpLAogICAgICAgICAgICAgKFB5TWV0aG9kc1Rlc3QuTmVzdGVkLnBpZSwgUHlNZXRob2RzVGVzdC5OZXN0ZWQpCiAgICAgICAgICkKLSAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgogICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiBweV9tZXRob2RzOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBtZXRob2Q9bWV0aG9kKToKICAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG1ldGhvZCwgcHJvdG8pKQpAQCAtMjE3Myw3ICsyMjMwLDcgQEAKICAgICAgICAgICAgIChTdWJjbGFzcy5OZXN0ZWQoInN3ZWV0IikuY291bnQsICgiZSIsKSksCiAgICAgICAgICAgICAoU3ViY2xhc3MuTmVzdGVkLmNvdW50LCAoU3ViY2xhc3MuTmVzdGVkKCJzd2VldCIpLCAiZSIpKSwKICAgICAgICAgKQotICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CiAgICAgICAgICAgICBmb3IgbWV0aG9kLCBhcmdzIGluIGNfbWV0aG9kczoKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CiAgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKQEAgLTIxOTcsNiArMjI1NCwyNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCgnYyVzXG4lcycgJSAobW9kLCBuYW1lKSkuZW5jb2RlKCksIHBpY2tsZWQpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzZWxmLmxvYWRzKHBpY2tsZWQpKSwgdHlwZSh2YWwpKQogCisgICAgZGVmIHRlc3RfbG9jYWxfbG9va3VwX2Vycm9yKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3aGljaG1vZHVsZSgpIGVycm9ycyBvdXQgY2xlYW5seSB3aGVuIGxvb2tpbmcgdXAKKyAgICAgICAgIyBhbiBhc3N1bWVkIGdsb2JhbGx5LXJlYWNoYWJsZSBvYmplY3QgZmFpbHMuCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgU2luY2UgdGhlIGZ1bmN0aW9uIGlzIGxvY2FsLCBsb29rdXAgd2lsbCBmYWlsCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSk6CisgICAgICAgICAgICAgICAgcGlja2xldG9vbHMuZGlzKHNlbGYuZHVtcHMoZiwgcHJvdG8pKQorICAgICAgICAjIFNhbWUgd2l0aG91dCBhIF9fbW9kdWxlX18gYXR0cmlidXRlIChleGVyY2lzZXMgYSBkaWZmZXJlbnQgcGF0aAorICAgICAgICAjIGluIF9waWNrbGUuYykuCisgICAgICAgIGRlbCBmLl9fbW9kdWxlX18KKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgcGlja2xlLlBpY2tsaW5nRXJyb3IpKToKKyAgICAgICAgICAgICAgICBwaWNrbGV0b29scy5kaXMoc2VsZi5kdW1wcyhmLCBwcm90bykpCisgICAgICAgICMgWWV0IGEgZGlmZmVyZW50IHBhdGguCisgICAgICAgIGYuX19uYW1lX18gPSBmLl9fcXVhbG5hbWVfXworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBwaWNrbGUuUGlja2xpbmdFcnJvcikpOgorICAgICAgICAgICAgICAgIHBpY2tsZXRvb2xzLmRpcyhzZWxmLmR1bXBzKGYsIHByb3RvKSkKKwogCiBjbGFzcyBCaWdtZW1QaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTIzNzAsNyArMjQ0OCw3IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW1zPU5vbmUpOgogICAgICAgICBzZWxmLml0ZW1zID0gaXRlbXMgaWYgaXRlbXMgaXMgbm90IE5vbmUgZWxzZSBbXQogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKSBhbmQgc2VsZi5pdGVtcyA9PSBzZWxmLml0ZW1zCisgICAgICAgIHJldHVybiB0eXBlKHNlbGYpIGlzIHR5cGUob3RoZXIpIGFuZCBzZWxmLml0ZW1zID09IG90aGVyLml0ZW1zCiAgICAgZGVmIGFwcGVuZChzZWxmLCBpdGVtKToKICAgICAgICAgc2VsZi5pdGVtcy5hcHBlbmQoaXRlbSkKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKQEAgLTIzODMsNyArMjQ2MSw3IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhYmxlPU5vbmUpOgogICAgICAgICBzZWxmLnRhYmxlID0gdGFibGUgaWYgdGFibGUgaXMgbm90IE5vbmUgZWxzZSB7fQogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gdHlwZShzZWxmKSBpcyB0eXBlKG90aGVyKSBhbmQgc2VsZi50YWJsZSA9PSBzZWxmLnRhYmxlCisgICAgICAgIHJldHVybiB0eXBlKHNlbGYpIGlzIHR5cGUob3RoZXIpIGFuZCBzZWxmLnRhYmxlID09IG90aGVyLnRhYmxlCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgogICAgICAgICBzZWxmLnRhYmxlW2tleV0gPSB2YWx1ZQogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgpAQCAtMjQzMSwxMiArMjUwOSwyMCBAQAogY2xhc3MgU2xvdExpc3QoTXlMaXN0KToKICAgICBfX3Nsb3RzX18gPSBbImZvbyJdCiAKLWNsYXNzIFNpbXBsZU5ld09iaihvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiLCBjKToKK2NsYXNzIFNpbXBsZU5ld09iaihpbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAjIHJhaXNlIGFuIGVycm9yLCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBjYWxsZWQKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJTaW1wbGVOZXdPYmouX19pbml0X18oKSBkaWRuJ3QgZXhwZWN0IHRvIGdldCBjYWxsZWQiKQogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXworICAgICAgICByZXR1cm4gaW50KHNlbGYpID09IGludChvdGhlcikgYW5kIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KKworY2xhc3MgQ29tcGxleE5ld09iaihTaW1wbGVOZXdPYmopOgorICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgnJVgnICUgc2VsZiwgMTYpCisKK2NsYXNzIENvbXBsZXhOZXdPYmpFeChTaW1wbGVOZXdPYmopOgorICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgnJVgnICUgc2VsZiwpLCB7J2Jhc2UnOiAxNn0KIAogY2xhc3MgQmFkR2V0YXR0cjoKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwga2V5KToKQEAgLTI1NDMsNiArMjYyOSwzNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRfZmFsc2VfY291bnQsIDEpCiAKIAorY2xhc3MgQWJzdHJhY3RJZGVudGl0eVBlcnNpc3RlbnRQaWNrbGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHBlcnNpc3RlbnRfaWQoc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHBlcnNpc3RlbnRfbG9hZChzZWxmLCBwaWQpOgorICAgICAgICByZXR1cm4gcGlkCisKKyAgICBkZWYgX2NoZWNrX3JldHVybl9jb3JyZWN0X3R5cGUoc2VsZiwgb2JqLCBwcm90byk6CisgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhvYmosIHByb3RvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHVucGlja2xlZCwgdHlwZShvYmopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgb2JqKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2NvcnJlY3RfdHlwZShzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgICMgUHJvdG9jb2wgMCBzdXBwb3J0cyBvbmx5IEFTQ0lJIHN0cmluZ3MuCisgICAgICAgICAgICBpZiBwcm90byA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JldHVybl9jb3JyZWN0X3R5cGUoImFiYyIsIDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBvYmogaW4gW2IiYWJjXG4iLCAiYWJjXG4iLCAtMSwgLTEuMSAqIDAuMSwgc3RyXToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmV0dXJuX2NvcnJlY3RfdHlwZShvYmosIHByb3RvKQorCisgICAgZGVmIHRlc3RfcHJvdG9jb2wwX2lzX2FzY2lpX29ubHkoc2VsZik6CisgICAgICAgIG5vbl9hc2NpaV9zdHIgPSAiXE57RU1QVFkgU0VUfSIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocGlja2xlLlBpY2tsaW5nRXJyb3IsIHNlbGYuZHVtcHMsIG5vbl9hc2NpaV9zdHIsIDApCisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuUEVSU0lEICsgbm9uX2FzY2lpX3N0ci5lbmNvZGUoJ3V0Zi04JykgKyBiJ1xuLicKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocGlja2xlLlVucGlja2xpbmdFcnJvciwgc2VsZi5sb2FkcywgcGlja2xlZCkKKworCiBjbGFzcyBBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBwaWNrbGVyX2NsYXNzID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcHlzdG9uZS5weSBiL0xpYi90ZXN0L3B5c3RvbmUucHkKaW5kZXggNTlkZDk5Yi4uY2YxNjkyZSAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvcHlzdG9uZS5weQorKysgYi9MaWIvdGVzdC9weXN0b25lLnB5CkBAIC00MSw3ICs0MSw3IEBACiAKIExPT1BTID0gNTAwMDAKIAotZnJvbSB0aW1lIGltcG9ydCBjbG9jaworZnJvbSB0aW1lIGltcG9ydCB0aW1lCiAKIF9fdmVyc2lvbl9fID0gIjEuMiIKIApAQCAtOTMsMTAgKzkzLDEwIEBACiAgICAgZ2xvYmFsIFB0ckdsYgogICAgIGdsb2JhbCBQdHJHbGJOZXh0CiAKLSAgICBzdGFydHRpbWUgPSBjbG9jaygpCisgICAgc3RhcnR0aW1lID0gdGltZSgpCiAgICAgZm9yIGkgaW4gcmFuZ2UobG9vcHMpOgogICAgICAgICBwYXNzCi0gICAgbnVsbHRpbWUgPSBjbG9jaygpIC0gc3RhcnR0aW1lCisgICAgbnVsbHRpbWUgPSB0aW1lKCkgLSBzdGFydHRpbWUKIAogICAgIFB0ckdsYk5leHQgPSBSZWNvcmQoKQogICAgIFB0ckdsYiA9IFJlY29yZCgpCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICBTdHJpbmcxTG9jID0gIkRIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklORyIKICAgICBBcnJheTJHbG9iWzhdWzddID0gMTAKIAotICAgIHN0YXJ0dGltZSA9IGNsb2NrKCkKKyAgICBzdGFydHRpbWUgPSB0aW1lKCkKIAogICAgIGZvciBpIGluIHJhbmdlKGxvb3BzKToKICAgICAgICAgUHJvYzUoKQpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgIEludExvYzIgPSA3ICogKEludExvYzMgLSBJbnRMb2MyKSAtIEludExvYzEKICAgICAgICAgSW50TG9jMSA9IFByb2MyKEludExvYzEpCiAKLSAgICBiZW5jaHRpbWUgPSBjbG9jaygpIC0gc3RhcnR0aW1lIC0gbnVsbHRpbWUKKyAgICBiZW5jaHRpbWUgPSB0aW1lKCkgLSBzdGFydHRpbWUgLSBudWxsdGltZQogICAgIGlmIGJlbmNodGltZSA9PSAwLjA6CiAgICAgICAgIGxvb3BzUGVyQmVuY2h0aW1lID0gMC4wCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3JlX3Rlc3RzLnB5IGIvTGliL3Rlc3QvcmVfdGVzdHMucHkKaW5kZXggN2Y4MDc1ZS4uOGMxNThmOCAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvcmVfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvcmVfdGVzdHMucHkKQEAgLTg3LDcgKzg3LDcgQEAKICAgICAocidbXGFdW1xiXVtcZl1bXG5dW1xyXVtcdF1bXHZdJywgJ1xhXGJcZlxuXHJcdFx2JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1xhXGJcZlxuXHJcdFx2JyksCiAgICAgIyBOT1RFOiBub3QgYW4gZXJyb3IgdW5kZXIgUENSRS9QUkU6CiAgICAgKHInXHUnLCAnJywgU1lOVEFYX0VSUk9SKSwgICAgIyBBIFBlcmwgZXNjYXBlCi0gICAgKHInXGNcZVxnXGhcaVxqXGtcbVxvXHBccVx5XHonLCAnY2VnaGlqa21vcHF5eicsIFNVQ0NFRUQsICdmb3VuZCcsICdjZWdoaWprbW9wcXl6JyksCisgICAgIyAocidcY1xlXGdcaFxpXGpca1xtXG9ccFxxXHlceicsICdjZWdoaWprbW9wcXl6JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2NlZ2hpamttb3BxeXonKSwKICAgICAocidceGZmJywgJ1wzNzcnLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoMjU1KSksCiAgICAgIyBuZXcgXHggc2VtYW50aWNzCiAgICAgKHInXHgwMGZmZmZmZmZmZmZmZmZmJywgJ1wzNzcnLCBGQUlMLCAnZm91bmQnLCBjaHIoMjU1KSksCkBAIC02MDcsOCArNjA3LDggQEAKICAgICAjIG5ldyBceCBzZW1hbnRpY3MKICAgICAocidceDAwZmYnLCAnXDM3NycsIEZBSUwpLAogICAgICMgKHInXHgwMGZmJywgJ1wzNzcnLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoMjU1KSksCi0gICAgKHInXHRcblx2XHJcZlxhXGcnLCAnXHRcblx2XHJcZlxhZycsIFNVQ0NFRUQsICdmb3VuZCcsICdcdFxuXHZcclxmXGFnJyksCi0gICAgKCdcdFxuXHZcclxmXGFcZycsICdcdFxuXHZcclxmXGFnJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1x0XG5cdlxyXGZcYWcnKSwKKyAgICAocidcdFxuXHZcclxmXGEnLCAnXHRcblx2XHJcZlxhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1x0XG5cdlxyXGZcYScpLAorICAgICgnXHRcblx2XHJcZlxhJywgJ1x0XG5cdlxyXGZcYScsIFNVQ0NFRUQsICdmb3VuZCcsICdcdFxuXHZcclxmXGEnKSwKICAgICAocidcdFxuXHZcclxmXGEnLCAnXHRcblx2XHJcZlxhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDkpK2NocigxMCkrY2hyKDExKStjaHIoMTMpK2NocigxMikrY2hyKDcpKSwKICAgICAocidbXHRdW1xuXVtcdl1bXHJdW1xmXVtcYl0nLCAnXHRcblx2XHJcZlxiJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1x0XG5cdlxyXGZcYicpLAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZWdydGVzdC5weSBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CmluZGV4IGViZGNkYWQuLmZlY2ZkMDkgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CkBAIC0zMjIsNiArMzIyLDggQEAKICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1GJywgJy0tZm9yZXZlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBoYXBwZW5zJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1QJywgJy0tcGdvJywgZGVzdD0ncGdvJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZW5hYmxlIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbiB0cmFpbmluZycpCiAKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdhcmdzJywgbmFyZ3M9YXJncGFyc2UuUkVNQUlOREVSLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKQEAgLTM2MSw3ICszNjMsNyBAQAogICAgICAgICAgZmluZGxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsIHRyYWNlPUZhbHNlLCBjb3ZlcmRpcj0nY292ZXJhZ2UnLAogICAgICAgICAgcnVubGVha3M9RmFsc2UsIGh1bnRybGVha3M9RmFsc2UsIHZlcmJvc2UyPUZhbHNlLCBwcmludF9zbG93PUZhbHNlLAogICAgICAgICAgcmFuZG9tX3NlZWQ9Tm9uZSwgdXNlX21wPU5vbmUsIHZlcmJvc2UzPUZhbHNlLCBmb3JldmVyPUZhbHNlLAotICAgICAgICAgaGVhZGVyPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSkKKyAgICAgICAgIGhlYWRlcj1GYWxzZSwgZmFpbGZhc3Q9RmFsc2UsIG1hdGNoX3Rlc3RzPU5vbmUsIHBnbz1GYWxzZSkKICAgICBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIobnMsIGspOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclciBpcyBhbiBpbnZhbGlkIGtleXdvcmQgYXJndW1lbnQgJwpAQCAtNDM1LDE0ICs0MzcsMTYgQEAKICAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCiAgICAgYmFzZV9jbWQgPSAoW3N5cy5leGVjdXRhYmxlXSArIHN1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkgKwogICAgICAgICAgICAgICAgIFsnLVgnLCAnZmF1bHRoYW5kbGVyJywgJy1tJywgJ3Rlc3QucmVncnRlc3QnXSkKLQorICAgICMgcmVxdWlyZWQgdG8gc3Bhd24gYSBuZXcgcHJvY2VzcyB3aXRoIFBHTyBmbGFnIG9uL29mZgorICAgIGlmIG5zLnBnbzoKKyAgICAgICAgYmFzZV9jbWQgPSBiYXNlX2NtZCArIFsnLS1wZ28nXQogICAgIHNsYXZlYXJncyA9ICgKICAgICAgICAgICAgICh0ZXN0bmFtZSwgbnMudmVyYm9zZSwgbnMucXVpZXQpLAogICAgICAgICAgICAgZGljdChodW50cmxlYWtzPW5zLmh1bnRybGVha3MsCiAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXM9bnMudXNlX3Jlc291cmNlcywKICAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCiAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgZmFpbGZhc3Q9bnMuZmFpbGZhc3QsCi0gICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKSkKKyAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bnMubWF0Y2hfdGVzdHMsIHBnbz1ucy5wZ28pKQogICAgICMgUnVubmluZyB0aGUgY2hpbGQgZnJvbSB0aGUgc2FtZSB3b3JraW5nIGRpcmVjdG9yeSBhcyByZWdydGVzdCdzIG9yaWdpbmFsCiAgICAgIyBpbnZvY2F0aW9uIGVuc3VyZXMgdGhhdCBURU1QRElSIGZvciB0aGUgY2hpbGQgaXMgdGhlIHNhbWUgd2hlbgogICAgICMgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpIGlzIHRydWUuIFNlZSBpc3N1ZSAxNTMwMC4KQEAgLTUwNyw3ICs1MTEsMTMgQEAKICAgICAgICAgaW1wb3J0IGdjCiAgICAgICAgIGdjLnNldF90aHJlc2hvbGQobnMudGhyZXNob2xkKQogICAgIGlmIG5zLm5vd2luZG93czoKKyAgICAgICAgcHJpbnQoJ1RoZSAtLW5vd2luZG93cyAoLW4pIG9wdGlvbiBpcyBkZXByZWNhdGVkLiAnCisgICAgICAgICAgICAgICdVc2UgLXZ2IHRvIGRpc3BsYXkgYXNzZXJ0aW9ucyBpbiBzdGRlcnIuJykKKyAgICB0cnk6CiAgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgogICAgICAgICBtc3ZjcnQuU2V0RXJyb3JNb2RlKG1zdmNydC5TRU1fRkFJTENSSVRJQ0FMRVJST1JTfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9BTElHTk1FTlRGQVVMVEVYQ0VQVHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PR1BGQVVMVEVSUk9SQk9YfApAQCAtNTE5LDggKzUyOSwxMSBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgotICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlKG0sIG1zdmNydC5DUlREQkdfTU9ERV9GSUxFKQotICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRGaWxlKG0sIG1zdmNydC5DUlREQkdfRklMRV9TVERFUlIpCisgICAgICAgICAgICAgICAgaWYgbnMudmVyYm9zZSBhbmQgbnMudmVyYm9zZSA+PSAyOgorICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZShtLCBtc3ZjcnQuQ1JUREJHX01PREVfRklMRSkKKyAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUobSwgbXN2Y3J0LkNSVERCR19GSUxFX1NUREVSUikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZShtLCAwKQogICAgIGlmIG5zLndhaXQ6CiAgICAgICAgIGlucHV0KCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIikKIApAQCAtNTk2LDEzICs2MDksMTQgQEAKICAgICAgICAgbnMuYXJncyA9IFtdCiAKICAgICAjIEZvciBhIHBhcnRpYWwgcnVuLCB3ZSBkbyBub3QgbmVlZCB0byBjbHV0dGVyIHRoZSBvdXRwdXQuCi0gICAgaWYgbnMudmVyYm9zZSBvciBucy5oZWFkZXIgb3Igbm90IChucy5xdWlldCBvciBucy5zaW5nbGUgb3IgdGVzdHMgb3IgbnMuYXJncyk6CisgICAgaWYgKG5zLnZlcmJvc2Ugb3IgbnMuaGVhZGVyIG9yCisgICAgICAgICAgICBub3QgKG5zLnBnbyBvciBucy5xdWlldCBvciBucy5zaW5nbGUgb3IgdGVzdHMgb3IgbnMuYXJncykpOgogICAgICAgICAjIFByaW50IGJhc2ljIHBsYXRmb3JtIGluZm9ybWF0aW9uCiAgICAgICAgIHByaW50KCI9PSIsIHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCAqc3lzLnZlcnNpb24uc3BsaXQoKSkKICAgICAgICAgcHJpbnQoIj09ICAiLCBwbGF0Zm9ybS5wbGF0Zm9ybShhbGlhc2VkPVRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICIlcy1lbmRpYW4iICUgc3lzLmJ5dGVvcmRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcy1lbmRpYW4iICUgc3lzLmJ5dGVvcmRlcikKICAgICAgICAgcHJpbnQoIj09ICAiLCAiaGFzaCBhbGdvcml0aG06Iiwgc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sCi0gICAgICAgICAgICAgICI2NGJpdCIgaWYgc3lzLm1heHNpemUgPiAyKiozMiBlbHNlICIzMmJpdCIpCisgICAgICAgICAgICAgICAgIjY0Yml0IiBpZiBzeXMubWF4c2l6ZSA+IDIqKjMyIGVsc2UgIjMyYml0IikKICAgICAgICAgcHJpbnQoIj09ICAiLCBvcy5nZXRjd2QoKSkKICAgICAgICAgcHJpbnQoIlRlc3Rpbmcgd2l0aCBmbGFnczoiLCBzeXMuZmxhZ3MpCiAKQEAgLTY0NSw3ICs2NTksOCBAQAogCiAgICAgZGVmIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCk6CiAgICAgICAgIG9rLCB0ZXN0X3RpbWUgPSByZXN1bHQKLSAgICAgICAgdGVzdF90aW1lcy5hcHBlbmQoKHRlc3RfdGltZSwgdGVzdCkpCisgICAgICAgIGlmIG9rIG5vdCBpbiAoQ0hJTERfRVJST1IsIElOVEVSUlVQVEVEKToKKyAgICAgICAgICAgIHRlc3RfdGltZXMuYXBwZW5kKCh0ZXN0X3RpbWUsIHRlc3QpKQogICAgICAgICBpZiBvayA9PSBQQVNTRUQ6CiAgICAgICAgICAgICBnb29kLmFwcGVuZCh0ZXN0KQogICAgICAgICBlbGlmIG9rID09IEZBSUxFRDoKQEAgLTcyMiwxMyArNzM3LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQogICAgICAgICAgICAgICAgIGlmIG5vdCBucy5xdWlldDoKLSAgICAgICAgICAgICAgICAgICAgZm10ID0gIlt7MTp7MH19ezJ9L3szfV0gezR9IiBpZiBiYWQgZWxzZSAiW3sxOnswfX17Mn1dIHs0fSIKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFkIGFuZCBub3QgbnMucGdvOgorICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gIlt7MTp7MH19ezJ9L3szfV0gezR9IgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm10ID0gIlt7MTp7MH19ezJ9XSB7NH0iCiAgICAgICAgICAgICAgICAgICAgIHByaW50KGZtdC5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGJhZCksIHRlc3QpKQogICAgICAgICAgICAgICAgIGlmIHN0ZG91dDoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoc3Rkb3V0KQotICAgICAgICAgICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgICAgICBpZiBzdGRlcnIgYW5kIG5vdCBucy5wZ286CiAgICAgICAgICAgICAgICAgICAgIHByaW50KHN0ZGVyciwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQpAQCAtNzQ1LDcgKzc2MywxMCBAQAogICAgIGVsc2U6CiAgICAgICAgIGZvciB0ZXN0X2luZGV4LCB0ZXN0IGluIGVudW1lcmF0ZSh0ZXN0cywgMSk6CiAgICAgICAgICAgICBpZiBub3QgbnMucXVpZXQ6Ci0gICAgICAgICAgICAgICAgZm10ID0gIlt7MTp7MH19ezJ9L3szfV0gezR9IiBpZiBiYWQgZWxzZSAiW3sxOnswfX17Mn1dIHs0fSIKKyAgICAgICAgICAgICAgICBpZiBiYWQgYW5kIG5vdCBucy5wZ286CisgICAgICAgICAgICAgICAgICAgIGZtdCA9ICJbezE6ezB9fXsyfS97M31dIHs0fSIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmbXQgPSAiW3sxOnswfX17Mn1dIHs0fSIKICAgICAgICAgICAgICAgICBwcmludChmbXQuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LCBsZW4oYmFkKSwgdGVzdCkpCiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCkBAIC03NjAsMTMgKzc4MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLmh1bnRybGVha3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1ucy50aW1lb3V0LCBmYWlsZmFzdD1ucy5mYWlsZmFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cywgcGdvPW5zLnBnbykKICAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgaWYgbnMuZmluZGxlYWtzOgogICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICAgICAgICAgIGlmIGdjLmdhcmJhZ2U6CkBAIC03ODEsMTQgKzgwMCwxNCBAQAogICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gc2F2ZV9tb2R1bGVzIGFuZCBtb2R1bGUuc3RhcnRzd2l0aCgidGVzdC4iKToKICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxvYWQobW9kdWxlKQogCi0gICAgaWYgaW50ZXJydXB0ZWQ6CisgICAgaWYgaW50ZXJydXB0ZWQgYW5kIG5vdCBucy5wZ286CiAgICAgICAgICMgcHJpbnQgYSBuZXdsaW5lIGFmdGVyIF5DCiAgICAgICAgIHByaW50KCkKICAgICAgICAgcHJpbnQoIlRlc3Qgc3VpdGUgaW50ZXJydXB0ZWQgYnkgc2lnbmFsIFNJR0lOVC4iKQogICAgICAgICBvbWl0dGVkID0gc2V0KHNlbGVjdGVkKSAtIHNldChnb29kKSAtIHNldChiYWQpIC0gc2V0KHNraXBwZWQpCiAgICAgICAgIHByaW50KGNvdW50KGxlbihvbWl0dGVkKSwgInRlc3QiKSwgIm9taXR0ZWQ6IikKICAgICAgICAgcHJpbnRsaXN0KG9taXR0ZWQpCi0gICAgaWYgZ29vZCBhbmQgbm90IG5zLnF1aWV0OgorICAgIGlmIGdvb2QgYW5kIG5vdCBucy5xdWlldCBhbmQgbm90IG5zLnBnbzoKICAgICAgICAgaWYgbm90IGJhZCBhbmQgbm90IHNraXBwZWQgYW5kIG5vdCBpbnRlcnJ1cHRlZCBhbmQgbGVuKGdvb2QpID4gMToKICAgICAgICAgICAgIHByaW50KCJBbGwiLCBlbmQ9JyAnKQogICAgICAgICBwcmludChjb3VudChsZW4oZ29vZCksICJ0ZXN0IiksICJPSy4iKQpAQCAtNzk3LDI2ICs4MTYsMjcgQEAKICAgICAgICAgcHJpbnQoIjEwIHNsb3dlc3QgdGVzdHM6IikKICAgICAgICAgZm9yIHRpbWUsIHRlc3QgaW4gdGVzdF90aW1lc1s6MTBdOgogICAgICAgICAgICAgcHJpbnQoIiVzOiAlLjFmcyIgJSAodGVzdCwgdGltZSkpCi0gICAgaWYgYmFkOgorICAgIGlmIGJhZCBhbmQgbm90IG5zLnBnbzoKICAgICAgICAgcHJpbnQoY291bnQobGVuKGJhZCksICJ0ZXN0IiksICJmYWlsZWQ6IikKICAgICAgICAgcHJpbnRsaXN0KGJhZCkKLSAgICBpZiBlbnZpcm9ubWVudF9jaGFuZ2VkOgorICAgIGlmIGVudmlyb25tZW50X2NoYW5nZWQgYW5kIG5vdCBucy5wZ286CiAgICAgICAgIHByaW50KCJ7fSBhbHRlcmVkIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQ6Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICAgIGNvdW50KGxlbihlbnZpcm9ubWVudF9jaGFuZ2VkKSwgInRlc3QiKSkpCiAgICAgICAgIHByaW50bGlzdChlbnZpcm9ubWVudF9jaGFuZ2VkKQotICAgIGlmIHNraXBwZWQgYW5kIG5vdCBucy5xdWlldDoKKyAgICBpZiBza2lwcGVkIGFuZCBub3QgbnMucXVpZXQgYW5kIG5vdCBucy5wZ286CiAgICAgICAgIHByaW50KGNvdW50KGxlbihza2lwcGVkKSwgInRlc3QiKSwgInNraXBwZWQ6IikKICAgICAgICAgcHJpbnRsaXN0KHNraXBwZWQpCiAKICAgICBpZiBucy52ZXJib3NlMiBhbmQgYmFkOgogICAgICAgICBwcmludCgiUmUtcnVubmluZyBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlIikKICAgICAgICAgZm9yIHRlc3QgaW4gYmFkWzpdOgotICAgICAgICAgICAgcHJpbnQoIlJlLXJ1bm5pbmcgdGVzdCAlciBpbiB2ZXJib3NlIG1vZGUiICUgdGVzdCkKKyAgICAgICAgICAgIGlmIG5vdCBucy5wZ286CisgICAgICAgICAgICAgICAgcHJpbnQoIlJlLXJ1bm5pbmcgdGVzdCAlciBpbiB2ZXJib3NlIG1vZGUiICUgdGVzdCkKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG5zLnZlcmJvc2UgPSBUcnVlCiAgICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIG5zLnF1aWV0LCBucy5odW50cmxlYWtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PW5zLnRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgcGdvPW5zLnBnbykKICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQwogICAgICAgICAgICAgICAgIHByaW50KCkKQEAgLTkxNSw3ICs5MzUsNyBAQAogZGVmIHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsCiAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsCiAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT1GYWxzZSwgZmFpbGZhc3Q9RmFsc2UsIG1hdGNoX3Rlc3RzPU5vbmUsCi0gICAgICAgICAgICB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dD1Ob25lLCAqLCBwZ289RmFsc2UpOgogICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0LgogCiAgICAgdGVzdCAtLSB0aGUgbmFtZSBvZiB0aGUgdGVzdApAQCAtOTI4LDYgKzk0OCw4IEBACiAgICAgdGltZW91dCAtLSBkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgogICAgICAgICAgICAgICAgdGltZW91dCBzZWNvbmRzCiAgICAgZmFpbGZhc3QsIG1hdGNoX3Rlc3RzIC0tIFNlZSByZWdydGVzdCBjb21tYW5kLWxpbmUgZmxhZ3MgZm9yIHRoZXNlLgorICAgIHBnbyAtLSBpZiB0cnVlLCBkbyBub3QgcHJpbnQgdW5uZWNlc3NhcnkgaW5mbyB3aGVuIHJ1bm5pbmcgdGhlIHRlc3QKKyAgICAgICAgICAgZm9yIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbiBidWlsZAogCiAgICAgUmV0dXJucyB0aGUgdHVwbGUgcmVzdWx0LCB0ZXN0X3RpbWUsIHdoZXJlIHJlc3VsdCBpcyBvbmUgb2YgdGhlIGNvbnN0YW50czoKICAgICAgICAgSU5URVJSVVBURUQgICAgICBLZXlib2FyZEludGVycnVwdCB3aGVuIHJ1biB1bmRlciAtagpAQCAtOTM3LDcgKzk1OSw2IEBACiAgICAgICAgIEZBSUxFRCAgICAgICAgICAgdGVzdCBmYWlsZWQKICAgICAgICAgUEFTU0VEICAgICAgICAgICB0ZXN0IHBhc3NlZAogICAgICIiIgotCiAgICAgaWYgdXNlX3Jlc291cmNlcyBpcyBub3QgTm9uZToKICAgICAgICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gdXNlX3Jlc291cmNlcwogICAgIHVzZV90aW1lb3V0ID0gKHRpbWVvdXQgaXMgbm90IE5vbmUpCkBAIC05NjcsOCArOTg4LDggQEAKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3RyZWFtCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0cmVhbQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X2ZhaWx1cmU9RmFsc2UpCi0gICAgICAgICAgICAgICAgaWYgcmVzdWx0WzBdID09IEZBSUxFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1GYWxzZSwgcGdvPXBnbykKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbMF0gPT0gRkFJTEVEIGFuZCBub3QgcGdvOgogICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdHJlYW0uZ2V0dmFsdWUoKQogICAgICAgICAgICAgICAgICAgICBvcmlnX3N0ZGVyci53cml0ZShvdXRwdXQpCiAgICAgICAgICAgICAgICAgICAgIG9yaWdfc3RkZXJyLmZsdXNoKCkKQEAgLTk3OCw3ICs5OTksNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1ub3QgdmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPW5vdCB2ZXJib3NlLCBwZ289cGdvKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgZmluYWxseToKICAgICAgICAgaWYgdXNlX3RpbWVvdXQ6CkBAIC0xMDEwLDEwICsxMDMxLDExIEBACiAKICAgICBjaGFuZ2VkID0gRmFsc2UKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0bmFtZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RuYW1lLCB2ZXJib3NlPTAsIHF1aWV0PUZhbHNlLCAqLCBwZ289RmFsc2UpOgogICAgICAgICBzZWxmLnRlc3RuYW1lID0gdGVzdG5hbWUKICAgICAgICAgc2VsZi52ZXJib3NlID0gdmVyYm9zZQogICAgICAgICBzZWxmLnF1aWV0ID0gcXVpZXQKKyAgICAgICAgc2VsZi5wZ28gPSBwZ28KIAogICAgICMgVG8gYWRkIHRoaW5ncyB0byBzYXZlIGFuZCByZXN0b3JlLCBhZGQgYSBuYW1lIFhYWCB0byB0aGUgcmVzb3VyY2VzIGxpc3QKICAgICAjIGFuZCBhZGQgY29ycmVzcG9uZGluZyBnZXRfWFhYL3Jlc3RvcmVfWFhYIGZ1bmN0aW9ucy4gIGdldF9YWFggc2hvdWxkCkBAIC0xMDM1LDYgKzEwNTcsNyBAQAogICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAogICAgICAgICAgICAgICAgICAnc3lzY29uZmlnLl9DT05GSUdfVkFSUycsICdzeXNjb25maWcuX0lOU1RBTExfU0NIRU1FUycsCiAgICAgICAgICAgICAgICAgICdmaWxlcycsICdsb2NhbGUnLCAnd2FybmluZ3Muc2hvd3dhcm5pbmcnLAorICAgICAgICAgICAgICAgICAnc2h1dGlsX2FyY2hpdmVfZm9ybWF0cycsICdzaHV0aWxfdW5wYWNrX2Zvcm1hdHMnLAogICAgICAgICAgICAgICAgICkKIAogICAgIGRlZiBnZXRfc3lzX2FyZ3Yoc2VsZik6CkBAIC0xMjQyLDExICsxMjY1LDExIEBACiAgICAgICAgICAgICBpZiBjdXJyZW50ICE9IG9yaWdpbmFsOgogICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlZCA9IFRydWUKICAgICAgICAgICAgICAgICByZXN0b3JlKG9yaWdpbmFsKQotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnF1aWV0OgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnF1aWV0IGFuZCBub3Qgc2VsZi5wZ286CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nIC0tIHt9IHdhcyBtb2RpZmllZCBieSB7fSIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNlbGYudGVzdG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlID4gMToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlID4gMSBhbmQgbm90IHNlbGYucGdvOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiAgQmVmb3JlOiB7fVxuICBBZnRlcjogIHt9ICIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCwgY3VycmVudCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKQEAgLTEyNTQsNyArMTI3Nyw3IEBACiAKIAogZGVmIHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsCi0gICAgICAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSwgcGdvPUZhbHNlKToKICAgICBzdXBwb3J0LnVubG9hZCh0ZXN0KQogCiAgICAgdGVzdF90aW1lID0gMC4wCkBAIC0xMjY1LDcgKzEyODgsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBBbHdheXMgaW1wb3J0IGl0IGZyb20gdGhlIHRlc3QgcGFja2FnZQogICAgICAgICAgICAgYWJzdGVzdCA9ICd0ZXN0LicgKyB0ZXN0Ci0gICAgICAgIHdpdGggc2F2ZWRfdGVzdF9lbnZpcm9ubWVudCh0ZXN0LCB2ZXJib3NlLCBxdWlldCkgYXMgZW52aXJvbm1lbnQ6CisgICAgICAgIHdpdGggc2F2ZWRfdGVzdF9lbnZpcm9ubWVudCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgcGdvPXBnbykgYXMgZW52aXJvbm1lbnQ6CiAgICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShhYnN0ZXN0KQogICAgICAgICAgICAgIyBJZiB0aGUgdGVzdCBoYXMgYSB0ZXN0X21haW4sIHRoYXQgd2lsbCBydW4gdGhlIGFwcHJvcHJpYXRlCkBAIC0xMjc1LDMzICsxMjk4LDM5IEBACiAgICAgICAgICAgICAgICAgZGVmIHRlc3RfcnVubmVyKCk6CiAgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQogICAgICAgICAgICAgICAgICAgICB0ZXN0cyA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKHRoZV9tb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIGZvciBlcnJvciBpbiBsb2FkZXIuZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZXJyb3IsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9hZGVyLmVycm9yczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiZXJyb3JzIHdoaWxlIGxvYWRpbmcgdGVzdHMiKQogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0cykKICAgICAgICAgICAgIHRlc3RfcnVubmVyKCkKICAgICAgICAgICAgIGlmIGh1bnRybGVha3M6CiAgICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCB0ZXN0X3J1bm5lciwgaHVudHJsZWFrcykKICAgICAgICAgICAgIHRlc3RfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQogICAgIGV4Y2VwdCBzdXBwb3J0LlJlc291cmNlRGVuaWVkIGFzIG1zZzoKLSAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICBpZiBub3QgcXVpZXQgYW5kIG5vdCBwZ286CiAgICAgICAgICAgICBwcmludCh0ZXN0LCAic2tpcHBlZCAtLSIsIG1zZykKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICByZXR1cm4gUkVTT1VSQ0VfREVOSUVELCB0ZXN0X3RpbWUKICAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3QgYXMgbXNnOgotICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgIGlmIG5vdCBxdWlldCBhbmQgbm90IHBnbzoKICAgICAgICAgICAgIHByaW50KHRlc3QsICJza2lwcGVkIC0tIiwgbXNnKQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHJldHVybiBTS0lQUEVELCB0ZXN0X3RpbWUKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgIHJhaXNlCiAgICAgZXhjZXB0IHN1cHBvcnQuVGVzdEZhaWxlZCBhcyBtc2c6Ci0gICAgICAgIGlmIGRpc3BsYXlfZmFpbHVyZToKLSAgICAgICAgICAgIHByaW50KCJ0ZXN0IiwgdGVzdCwgImZhaWxlZCAtLSIsIG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoInRlc3QiLCB0ZXN0LCAiZmFpbGVkIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBpZiBub3QgcGdvOgorICAgICAgICAgICAgaWYgZGlzcGxheV9mYWlsdXJlOgorICAgICAgICAgICAgICAgIHByaW50KCJ0ZXN0IiwgdGVzdCwgImZhaWxlZCAtLSIsIG1zZywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgidGVzdCIsIHRlc3QsICJmYWlsZWQiLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQogICAgICAgICByZXR1cm4gRkFJTEVELCB0ZXN0X3RpbWUKICAgICBleGNlcHQ6CiAgICAgICAgIG1zZyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKLSAgICAgICAgcHJpbnQoInRlc3QiLCB0ZXN0LCAiY3Jhc2hlZCAtLSIsIG1zZywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBpZiBub3QgcGdvOgorICAgICAgICAgICAgcHJpbnQoInRlc3QiLCB0ZXN0LCAiY3Jhc2hlZCAtLSIsIG1zZywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKICAgICAgICAgcmV0dXJuIEZBSUxFRCwgdGVzdF90aW1lCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NlcV90ZXN0cy5weSBiL0xpYi90ZXN0L3NlcV90ZXN0cy5weQppbmRleCAyNDE2MjQ5Li43MmY0ODQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zZXFfdGVzdHMucHkKKysrIGIvTGliL3Rlc3Qvc2VxX3Rlc3RzLnB5CkBAIC01LDYgKzUsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgcGlja2xlCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogIyBWYXJpb3VzIGl0ZXJhYmxlcwogIyBUaGlzIGlzIHVzZWQgZm9yIGNoZWNraW5nIHRoZSBjb25zdHJ1Y3RvciAoaGVyZSBhbmQgaW4gdGVzdF9kZXF1ZS5weSkKQEAgLTQwOCwzICs0MDksNyBAQAogICAgICAgICAgICAgbHN0MiA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMobHN0LCBwcm90bykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdDIsIGxzdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQobHN0MiksIGlkKGxzdCkpCisKKyAgICBkZWYgdGVzdF9mcmVlX2FmdGVyX2l0ZXJhdGluZyhzZWxmKToKKyAgICAgICAgc3VwcG9ydC5jaGVja19mcmVlX2FmdGVyX2l0ZXJhdGluZyhzZWxmLCBpdGVyLCBzZWxmLnR5cGUydGVzdCkKKyAgICAgICAgc3VwcG9ydC5jaGVja19mcmVlX2FmdGVyX2l0ZXJhdGluZyhzZWxmLCByZXZlcnNlZCwgc2VsZi50eXBlMnRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zc2xfc2VydmVycy5weSBiL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CmluZGV4IDc1OWIzZjQuLmY5ZDMwY2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CisrKyBiL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CkBAIC0xNTAsNyArMTUwLDcgQEAKIGRlZiBtYWtlX2h0dHBzX3NlcnZlcihjYXNlLCAqLCBjb250ZXh0PU5vbmUsIGNlcnRmaWxlPUNFUlRGSUxFLAogICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCiAgICAgIyBXZSBhc3N1bWUgdGhlIGNlcnRmaWxlIGNvbnRhaW5zIGJvdGggcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlCiAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUpCiAgICAgc2VydmVyID0gSFRUUFNTZXJ2ZXJUaHJlYWQoY29udGV4dCwgaG9zdCwgaGFuZGxlcl9jbGFzcykKQEAgLTE4Miw2ICsxODIsOCBAQAogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY3VydmUtbmFtZScsIGRlc3Q9J2N1cnZlX25hbWUnLCB0eXBlPXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nY3VydmUgbmFtZSBmb3IgRUMtYmFzZWQgRGlmZmllLUhlbGxtYW4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2lwaGVycycsIGRlc3Q9J2NpcGhlcnMnLCB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FsbG93ZWQgY2lwaGVyIGxpc3QnKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGgnLCBkZXN0PSdkaF9maWxlJywgdHlwZT1zdHIsIGFjdGlvbj0nc3RvcmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUEVNIGZpbGUgY29udGFpbmluZyBESCBwYXJhbWV0ZXJzJykKICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQpAQCAtMTkyLDEyICsxOTQsMTQgQEAKICAgICBlbHNlOgogICAgICAgICBoYW5kbGVyX2NsYXNzID0gUm9vdGVkSFRUUFJlcXVlc3RIYW5kbGVyCiAgICAgICAgIGhhbmRsZXJfY2xhc3Mucm9vdCA9IG9zLmdldGN3ZCgpCi0gICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCiAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgaWYgYXJncy5jdXJ2ZV9uYW1lOgogICAgICAgICBjb250ZXh0LnNldF9lY2RoX2N1cnZlKGFyZ3MuY3VydmVfbmFtZSkKICAgICBpZiBhcmdzLmRoX2ZpbGU6CiAgICAgICAgIGNvbnRleHQubG9hZF9kaF9wYXJhbXMoYXJncy5kaF9maWxlKQorICAgIGlmIGFyZ3MuY2lwaGVyczoKKyAgICAgICAgY29udGV4dC5zZXRfY2lwaGVycyhhcmdzLmNpcGhlcnMpCiAKICAgICBzZXJ2ZXIgPSBIVFRQU1NlcnZlcigoIiIsIGFyZ3MucG9ydCksIGhhbmRsZXJfY2xhc3MsIGNvbnRleHQpCiAgICAgaWYgYXJncy52ZXJib3NlOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5IGIvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CmluZGV4IDI0MmE5MzEuLmNkM2VlNDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQorKysgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKQEAgLTEsNSArMSw1IEBACiAiIiIKLUNvbW1vbiB0ZXN0cyBzaGFyZWQgYnkgdGVzdF91bmljb2RlLCB0ZXN0X3VzZXJzdHJpbmcgYW5kIHRlc3Rfc3RyaW5nLgorQ29tbW9uIHRlc3RzIHNoYXJlZCBieSB0ZXN0X3VuaWNvZGUsIHRlc3RfdXNlcnN0cmluZyBhbmQgdGVzdF9ieXRlcy4KICIiIgogCiBpbXBvcnQgdW5pdHRlc3QsIHN0cmluZywgc3lzLCBzdHJ1Y3QKQEAgLTUxLDYgKzUxLDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBvYmoKIAorICAgIGRlZiB0ZXN0X2ZpeHR5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzZWxmLmZpeHR5cGUoIjEyMyIpKSwgc2VsZi50eXBlMnRlc3QpCisKICAgICAjIGNoZWNrIHRoYXQgb2JqLm1ldGhvZCgqYXJncykgcmV0dXJucyByZXN1bHQKICAgICBkZWYgY2hlY2tlcXVhbChzZWxmLCByZXN1bHQsIG9iaiwgbWV0aG9kbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgcmVzdWx0ID0gc2VsZi5maXh0eXBlKHJlc3VsdCkKQEAgLTM2NSw2ICszNjgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1heHNpemUtMikKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYXxifGN8ZCddLCAnYXxifGN8ZCcsICdzcGxpdCcsICd8JywgMCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICcnLCAnYnx8Y3x8ZCddLCAnYXx8Ynx8Y3x8ZCcsICdzcGxpdCcsICd8JywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWJjZCddLCAnYWJjZCcsICdzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJ10sICcnLCAnc3BsaXQnLCAnfCcpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2VuZGNhc2UgJywgJyddLCAnZW5kY2FzZSB8JywgJ3NwbGl0JywgJ3wnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnIHN0YXJ0Y2FzZSddLCAnfCBzdGFydGNhc2UnLCAnc3BsaXQnLCAnfCcpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJycsICdib3RoY2FzZScsICcnXSwgJ3xib3RoY2FzZXwnLCAnc3BsaXQnLCAnfCcpCkBAIC00MzIsNiArNDM3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5tYXhzaXplLTEwMCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYXxifGN8ZCddLCAnYXxifGN8ZCcsICdyc3BsaXQnLCAnfCcsIDApCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2F8fGJ8fGMnLCAnJywgJ2QnXSwgJ2F8fGJ8fGN8fGQnLCAncnNwbGl0JywgJ3wnLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYmNkJ10sICdhYmNkJywgJ3JzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJ10sICcnLCAncnNwbGl0JywgJ3wnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnIGJlZ2luY2FzZSddLCAnfCBiZWdpbmNhc2UnLCAncnNwbGl0JywgJ3wnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydlbmRjYXNlICcsICcnXSwgJ2VuZGNhc2UgfCcsICdyc3BsaXQnLCAnfCcpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJycsICdib3RoY2FzZScsICcnXSwgJ3xib3RoY2FzZXwnLCAncnNwbGl0JywgJ3wnKQpAQCAtNjM4LDE0ICs2NDUsNiBAQAogICAgICAgICBFUSgiYm9ib2JYYm9ib2IiLCAiYm9ib2JvYlhib2JvYm9iIiwgInJlcGxhY2UiLCAiYm9ib2IiLCAiYm9iIikKICAgICAgICAgRVEoIkJPQk9CT0IiLCAiQk9CT0JPQiIsICJyZXBsYWNlIiwgImJvYiIsICJib2JieSIpCiAKLSAgICAgICAgIyBYWFggQ29tbWVudGVkIG91dC4gSXMgdGhlcmUgYW55IHJlYXNvbiB0byBzdXBwb3J0IGJ1ZmZlciBvYmplY3RzCi0gICAgICAgICMgYXMgYXJndW1lbnRzIGZvciBzdHIucmVwbGFjZSgpPyAgR3ZSCi0jIyAgICAgICAgIGJhID0gYnl0ZWFycmF5KCdhJykKLSMjICAgICAgICAgYmIgPSBieXRlYXJyYXkoJ2InKQotIyMgICAgICAgICBFUSgiYmJjIiwgImFiYyIsICJyZXBsYWNlIiwgYmEsIGJiKQotIyMgICAgICAgICBFUSgiYWFjIiwgImFiYyIsICJyZXBsYWNlIiwgYmIsIGJhKQotCi0gICAgICAgICMKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmVAdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25ldHdvdGhyZWUnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJycpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25lQHR3b0B0aHJlZSEnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJ0AnLCAyKQpAQCAtNjgyLDIyICs2ODEsNiBAQAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsIEEyXzE2LCAicmVwbGFjZSIsICJBIiwgQTJfMTYpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgQTJfMTYsICJyZXBsYWNlIiwgIkFBIiwgQTJfMTYrQTJfMTYpCiAKLQotCi1jbGFzcyBDb21tb25UZXN0KEJhc2VUZXN0KToKLSAgICAjIFRoaXMgdGVzdGNhc2UgY29udGFpbnMgdGVzdCB0aGF0IGNhbiBiZSB1c2VkIGluIGFsbAotICAgICMgc3RyaW5nbGlrZSBjbGFzc2VzLiBDdXJyZW50bHkgdGhpcyBpcyBzdHIsIHVuaWNvZGUKLSAgICAjIFVzZXJTdHJpbmcgYW5kIHRoZSBzdHJpbmcgbW9kdWxlLgotCi0gICAgZGVmIHRlc3RfaGFzaChzZWxmKToKLSAgICAgICAgIyBTRiBidWcgMTA1NDEzOTogICs9IG9wdGltaXphdGlvbiB3YXMgbm90IGludmFsaWRhdGluZyBjYWNoZWQgaGFzaCB2YWx1ZQotICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoJ0ROU1NFQycpCi0gICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgnJykKLSAgICAgICAgZm9yIGMgaW4gYToKLSAgICAgICAgICAgIGIgKz0gYwotICAgICAgICAgICAgaGFzaChiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goYikpCi0KICAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyBoZWxsbyAnLCAnIGhlbGxvICcsICdjYXBpdGFsaXplJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdIZWxsbyAnLCAnSGVsbG8gJywnY2FwaXRhbGl6ZScpCkBAIC03MDUsMjMgKzY4OCw2IEBACiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnQWFhYScsICdhYWFhJywgJ2NhcGl0YWxpemUnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0FhYWEnLCAnQWFBYScsICdjYXBpdGFsaXplJykKIAotICAgICAgICAjIGNoZWNrIHRoYXQgdGl0bGVjYXNlZCBjaGFycyBhcmUgbG93ZXJlZCBjb3JyZWN0bHkKLSAgICAgICAgIyBcdTFmZmMgaXMgdGhlIHRpdGxlY2FzZWQgY2hhcgotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ1x1MDNhOVx1MDM5OVx1MWZmM1x1MWZmM1x1MWZmMycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnXHUxZmYzXHUxZmYzXHUxZmZjXHUxZmZjJywgJ2NhcGl0YWxpemUnKQotICAgICAgICAjIGNoZWNrIHdpdGggY2FzZWQgbm9uLWxldHRlciBjaGFycwotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ1x1MjRjNVx1MjRlOFx1MjRlM1x1MjRkN1x1MjRkZVx1MjRkZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnXHUyNGM1XHUyNGNlXHUyNGM5XHUyNGJkXHUyNGM0XHUyNGMzJywgJ2NhcGl0YWxpemUnKQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ1x1MjRjNVx1MjRlOFx1MjRlM1x1MjRkN1x1MjRkZVx1MjRkZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnXHUyNGRmXHUyNGU4XHUyNGUzXHUyNGQ3XHUyNGRlXHUyNGRkJywgJ2NhcGl0YWxpemUnKQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ1x1MjE2MFx1MjE3MVx1MjE3MicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnXHUyMTYwXHUyMTYxXHUyMTYyJywgJ2NhcGl0YWxpemUnKQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ1x1MjE2MFx1MjE3MVx1MjE3MicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnXHUyMTcwXHUyMTcxXHUyMTcyJywgJ2NhcGl0YWxpemUnKQotICAgICAgICAjIGNoZWNrIHdpdGggTGwgY2hhcnMgd2l0aCBubyB1cHBlciAtIG5vdGhpbmcgY2hhbmdlcyBoZXJlCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnXHUwMTliXHUxZDAwXHUxZDg2XHUwMjIxXHUxZmI3JywKLSAgICAgICAgICAgICAgICAgICAgICAgICdcdTAxOWJcdTFkMDBcdTFkODZcdTAyMjFcdTFmYjcnLCAnY2FwaXRhbGl6ZScpCi0KICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdjYXBpdGFsaXplJywgNDIpCiAKICAgICBkZWYgdGVzdF9hZGRpdGlvbmFsX3NwbGl0KHNlbGYpOgpAQCAtNzQ0LDE2ICs3MTAsMjEgQEAKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddLCAnICBhICAgICcsICdzcGxpdCcpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYiddLCAnICBhICAgIGIgICAnLCAnc3BsaXQnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2IgICAnXSwgJyAgYSAgICBiICAgJywgJ3NwbGl0JywgTm9uZSwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSAgICBiICAgYyAgICddLCAnICBhICAgIGIgICBjICAgJywgJ3NwbGl0JywgTm9uZSwgMCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiICAgYyAgICddLCAnICBhICAgIGIgICBjICAgJywgJ3NwbGl0JywgTm9uZSwgMSkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MgICAnXSwgJyAgYSAgICBiICAgYyAgICcsICdzcGxpdCcsIE5vbmUsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJ10sICcgIGEgICAgYiAgIGMgICAnLCAnc3BsaXQnLCBOb25lLCAzKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InXSwgJ1xuXHRhIFx0XHIgYiBcdiAnLCAnc3BsaXQnKQogICAgICAgICBhYWEgPSAnIGEgJyoyMAogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMjAsIGFhYSwgJ3NwbGl0JykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddICsgW2FhYVs0Ol1dLCBhYWEsICdzcGxpdCcsIE5vbmUsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSoxOSArIFsnYSAnXSwgYWFhLCAnc3BsaXQnLCBOb25lLCAxOSkKIAotICAgICAgICAjIG1peGVkIHVzZSBvZiBzdHIgYW5kIHVuaWNvZGUKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MgZCddLCAnYSBiIGMgZCcsICdzcGxpdCcsICcgJywgMikKKyAgICAgICAgZm9yIGIgaW4gKCdhcmZcdGJhcmYnLCAnYXJmXG5iYXJmJywgJ2FyZlxyYmFyZicsCisgICAgICAgICAgICAgICAgICAnYXJmXGZiYXJmJywgJ2FyZlx2YmFyZicpOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYXJmJywgJ2JhcmYnXSwgYiwgJ3NwbGl0JykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FyZicsICdiYXJmJ10sIGIsICdzcGxpdCcsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhcmYnLCAnYmFyZiddLCBiLCAnc3BsaXQnLCBOb25lLCAyKQogCiAgICAgZGVmIHRlc3RfYWRkaXRpb25hbF9yc3BsaXQoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ3RoaXMnLCAnaXMnLCAndGhlJywgJ3JzcGxpdCcsICdmdW5jdGlvbiddLApAQCAtNzc1LDM2ICs3NDYsNTMgQEAKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddLCAnICBhICAgICcsICdyc3BsaXQnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InXSwgJyAgYSAgICBiICAgJywgJ3JzcGxpdCcpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJyAgYScsICdiJ10sICcgIGEgICAgYiAgICcsICdyc3BsaXQnLCBOb25lLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycgIGEgICAgYiAgIGMnXSwgJyAgYSAgICBiICAgYyAgICcsICdyc3BsaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgMCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnICBhICAgIGInLCdjJ10sICcgIGEgICAgYiAgIGMgICAnLCAncnNwbGl0JywKICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJyAgYScsICdiJywgJ2MnXSwgJyAgYSAgICBiICAgYyAgICcsICdyc3BsaXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnXSwgJyAgYSAgICBiICAgYyAgICcsICdyc3BsaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgMykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJ10sICdcblx0YSBcdFxyIGIgXHYgJywgJ3JzcGxpdCcsIE5vbmUsIDg4KQogICAgICAgICBhYWEgPSAnIGEgJyoyMAogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMjAsIGFhYSwgJ3JzcGxpdCcpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbYWFhWzotNF1dICsgWydhJ10sIGFhYSwgJ3JzcGxpdCcsIE5vbmUsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJyBhICBhJ10gKyBbJ2EnXSoxOCwgYWFhLCAncnNwbGl0JywgTm9uZSwgMTgpCiAKLSAgICAgICAgIyBtaXhlZCB1c2Ugb2Ygc3RyIGFuZCB1bmljb2RlCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EgYicsICdjJywgJ2QnXSwgJ2EgYiBjIGQnLCAncnNwbGl0JywgJyAnLCAyKQorICAgICAgICBmb3IgYiBpbiAoJ2FyZlx0YmFyZicsICdhcmZcbmJhcmYnLCAnYXJmXHJiYXJmJywKKyAgICAgICAgICAgICAgICAgICdhcmZcZmJhcmYnLCAnYXJmXHZiYXJmJyk6CisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhcmYnLCAnYmFyZiddLCBiLCAncnNwbGl0JykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FyZicsICdiYXJmJ10sIGIsICdyc3BsaXQnLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYXJmJywgJ2JhcmYnXSwgYiwgJ3JzcGxpdCcsIE5vbmUsIDIpCiAKLSAgICBkZWYgdGVzdF9zdHJpcChzZWxmKToKKyAgICBkZWYgdGVzdF9zdHJpcF93aGl0ZXNwYWNlKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJyAgIGhlbGxvICAgJywgJ3N0cmlwJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbyAgICcsICcgICBoZWxsbyAgICcsICdsc3RyaXAnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgIGhlbGxvJywgJyAgIGhlbGxvICAgJywgJ3JzdHJpcCcpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnaGVsbG8nLCAnc3RyaXAnKQogCisgICAgICAgIGIgPSAnIFx0XG5cclxmXHZhYmMgXHRcblxyXGZcdicKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCBiLCAnc3RyaXAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYyBcdFxuXHJcZlx2JywgYiwgJ2xzdHJpcCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnIFx0XG5cclxmXHZhYmMnLCBiLCAncnN0cmlwJykKKwogICAgICAgICAjIHN0cmlwL2xzdHJpcC9yc3RyaXAgd2l0aCBOb25lIGFyZwogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJyAgIGhlbGxvICAgJywgJ3N0cmlwJywgTm9uZSkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbyAgICcsICcgICBoZWxsbyAgICcsICdsc3RyaXAnLCBOb25lKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgIGhlbGxvJywgJyAgIGhlbGxvICAgJywgJ3JzdHJpcCcsIE5vbmUpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnaGVsbG8nLCAnc3RyaXAnLCBOb25lKQogCisgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6CiAgICAgICAgICMgc3RyaXAvbHN0cmlwL3JzdHJpcCB3aXRoIHN0ciBhcmcKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICd4eXp6eWhlbGxveHl6enknLCAnc3RyaXAnLCAneHl6JykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsb3h5enp5JywgJ3h5enp5aGVsbG94eXp6eScsICdsc3RyaXAnLCAneHl6JykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd4eXp6eWhlbGxvJywgJ3h5enp5aGVsbG94eXp6eScsICdyc3RyaXAnLCAneHl6JykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICdoZWxsbycsICdzdHJpcCcsICd4eXonKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICdtaXNzaXNzaXBwaScsICdzdHJpcCcsICdtaXNzaXNzaXBwaScpCisKKyAgICAgICAgIyBvbmx5IHRyaW0gdGhlIHN0YXJ0IGFuZCBlbmQ7IGRvZXMgbm90IHN0cmlwIGludGVybmFsIGNoYXJhY3RlcnMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdtaXNzaXNzaXBwJywgJ21pc3Npc3NpcHBpJywgJ3N0cmlwJywgJ2knKQogCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnc3RyaXAnLCA0MiwgNDIpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnbHN0cmlwJywgNDIsIDQyKQpAQCAtODU1LDExICs4NDMsNiBAQAogCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnMTIzJywgJ3pmaWxsJykKIAotY2xhc3MgTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3Q6Ci0gICAgIyBhZGRpdGlvbmFsIHRlc3RzIHRoYXQgb25seSB3b3JrIGZvcgotICAgICMgc3RyaW5nbGlrZSBvYmplY3RzLCBpLmUuIHN0ciwgdW5pY29kZSwgVXNlclN0cmluZwotICAgICMgKGJ1dCBub3QgdGhlIHN0cmluZyBtb2R1bGUpCi0KICAgICBkZWYgdGVzdF9pc2xvd2VyKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnaXNsb3dlcicpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYScsICdpc2xvd2VyJykKQEAgLTk2Miw2ICs5NDUsNDMgQEAKIAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdzcGxpdGxpbmVzJywgNDIsIDQyKQogCisKK2NsYXNzIENvbW1vblRlc3QoQmFzZVRlc3QpOgorICAgICMgVGhpcyB0ZXN0Y2FzZSBjb250YWlucyB0ZXN0cyB0aGF0IGNhbiBiZSB1c2VkIGluIGFsbAorICAgICMgc3RyaW5nbGlrZSBjbGFzc2VzLiBDdXJyZW50bHkgdGhpcyBpcyBzdHIgYW5kIFVzZXJTdHJpbmcuCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAxMDU0MTM5OiAgKz0gb3B0aW1pemF0aW9uIHdhcyBub3QgaW52YWxpZGF0aW5nIGNhY2hlZCBoYXNoIHZhbHVlCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdCgnRE5TU0VDJykKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KCcnKQorICAgICAgICBmb3IgYyBpbiBhOgorICAgICAgICAgICAgYiArPSBjCisgICAgICAgICAgICBoYXNoKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaChiKSkKKworICAgIGRlZiB0ZXN0X2NhcGl0YWxpemVfbm9uYXNjaWkoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCB0aXRsZWNhc2VkIGNoYXJzIGFyZSBsb3dlcmVkIGNvcnJlY3RseQorICAgICAgICAjIFx1MWZmYyBpcyB0aGUgdGl0bGVjYXNlZCBjaGFyCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnXHUwM2E5XHUwMzk5XHUxZmYzXHUxZmYzXHUxZmYzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdcdTFmZjNcdTFmZjNcdTFmZmNcdTFmZmMnLCAnY2FwaXRhbGl6ZScpCisgICAgICAgICMgY2hlY2sgd2l0aCBjYXNlZCBub24tbGV0dGVyIGNoYXJzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnXHUyNGM1XHUyNGU4XHUyNGUzXHUyNGQ3XHUyNGRlXHUyNGRkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdcdTI0YzVcdTI0Y2VcdTI0YzlcdTI0YmRcdTI0YzRcdTI0YzMnLCAnY2FwaXRhbGl6ZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnXHUyNGM1XHUyNGU4XHUyNGUzXHUyNGQ3XHUyNGRlXHUyNGRkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdcdTI0ZGZcdTI0ZThcdTI0ZTNcdTI0ZDdcdTI0ZGVcdTI0ZGQnLCAnY2FwaXRhbGl6ZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnXHUyMTYwXHUyMTcxXHUyMTcyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdcdTIxNjBcdTIxNjFcdTIxNjInLCAnY2FwaXRhbGl6ZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnXHUyMTYwXHUyMTcxXHUyMTcyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdcdTIxNzBcdTIxNzFcdTIxNzInLCAnY2FwaXRhbGl6ZScpCisgICAgICAgICMgY2hlY2sgd2l0aCBMbCBjaGFycyB3aXRoIG5vIHVwcGVyIC0gbm90aGluZyBjaGFuZ2VzIGhlcmUKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdcdTAxOWJcdTFkMDBcdTFkODZcdTAyMjFcdTFmYjcnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1x1MDE5Ylx1MWQwMFx1MWQ4Nlx1MDIyMVx1MWZiNycsICdjYXBpdGFsaXplJykKKworCitjbGFzcyBNaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdDoKKyAgICAjIGFkZGl0aW9uYWwgdGVzdHMgdGhhdCBvbmx5IHdvcmsgZm9yCisgICAgIyBzdHJpbmdsaWtlIG9iamVjdHMsIGkuZS4gc3RyLCBVc2VyU3RyaW5nCisKICAgICBkZWYgdGVzdF9zdGFydHN3aXRoKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGUnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nKQpAQCAtOTc2LDYgKzk5Niw5IEBACiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdzdGFydHN3aXRoJywgJ2xvd28nLCAzKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnc3RhcnRzd2l0aCcsICdsb3dvJywgMywgNykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdzdGFydHN3aXRoJywgJ2xvd28nLCAzLCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJycsICdzdGFydHN3aXRoJywgJycsIDAsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnJywgJ3N0YXJ0c3dpdGgnLCAnJywgMCwgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnJywgJ3N0YXJ0c3dpdGgnLCAnJywgMSwgMCkKIAogICAgICAgICAjIHRlc3QgbmVnYXRpdmUgaW5kaWNlcwogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGUnLCAwLCAtMSkKQEAgLTEwMjIsNiArMTA0NSw5IEBACiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDMsIDgpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2FiJywgJ2VuZHN3aXRoJywgJ2FiJywgMCwgMSkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWInLCAnZW5kc3dpdGgnLCAnYWInLCAwLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJycsICdlbmRzd2l0aCcsICcnLCAwLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJycsICdlbmRzd2l0aCcsICcnLCAwLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnZW5kc3dpdGgnLCAnJywgMSwgMCkKIAogICAgICAgICAjIHRlc3QgbmVnYXRpdmUgaW5kaWNlcwogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJ2xvJywgLTIpCkBAIC0xMTc2LDggKzEyMDIsNyBAQAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdfX21vZF9fJykKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclKGZvbylzJywgJ19fbW9kX18nLCA0MikKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclcyVzJywgJ19fbW9kX18nLCAoNDIsKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVjJywgJ19fbW9kX18nLCAoTm9uZSwpKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVjJywgJ19fbW9kX18nLCAoTm9uZSwpKQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICclKGZvbycsICdfX21vZF9fJywge30pCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJShmb28pcyAlKGJhcilzJywgJ19fbW9kX18nLCAoJ2ZvbycsIDQyKSkKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclZCcsICdfX21vZF9fJywgIjQyIikgIyBub3QgbnVtZXJpYwpAQCAtMTMzOCw3ICsxMzYzLDcgQEAKIAogCiBjbGFzcyBNaXhpblN0clVuaWNvZGVUZXN0OgotICAgICMgQWRkaXRpb25hbCB0ZXN0cyB0aGF0IG9ubHkgd29yayB3aXRoIHN0ciBhbmQgdW5pY29kZS4KKyAgICAjIEFkZGl0aW9uYWwgdGVzdHMgdGhhdCBvbmx5IHdvcmsgd2l0aCBzdHIuCiAKICAgICBkZWYgdGVzdF9idWcxMDAxMDExKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBqb2luIHJldHVybnMgYSBORVcgb2JqZWN0IGZvciBzaW5nbGUgaXRlbSBzZXF1ZW5jZXMKQEAgLTEzNTYsMjggKzEzODEsMyBAQAogICAgICAgICBzMSA9IHQoImFiY2QiKQogICAgICAgICBzMiA9IHQoKS5qb2luKFtzMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoczEsIHMyKQotCi0gICAgICAgICMgU2hvdWxkIGFsc28gdGVzdCBtaXhlZC10eXBlIGpvaW4uCi0gICAgICAgIGlmIHQgaXMgc3RyOgotICAgICAgICAgICAgczEgPSBzdWJjbGFzcygiYWJjZCIpCi0gICAgICAgICAgICBzMiA9ICIiLmpvaW4oW3MxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoczEsIHMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHMyKSwgdCkKLQotICAgICAgICAgICAgczEgPSB0KCJhYmNkIikKLSAgICAgICAgICAgIHMyID0gIiIuam9pbihbczFdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzMSwgczIpCi0KLSMjICAgICAgICAgZWxpZiB0IGlzIHN0cjg6Ci0jIyAgICAgICAgICAgICBzMSA9IHN1YmNsYXNzKCJhYmNkIikKLSMjICAgICAgICAgICAgIHMyID0gIiIuam9pbihbczFdKQotIyMgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzMSwgczIpCi0jIyAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoczIpLCBzdHIpICMgcHJvbW90ZXMhCi0KLSMjICAgICAgICAgICAgIHMxID0gdCgiYWJjZCIpCi0jIyAgICAgICAgICAgICBzMiA9ICIiLmpvaW4oW3MxXSkKLSMjICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoczEsIHMyKQotIyMgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHMyKSwgc3RyKSAjIHByb21vdGVzIQotCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgdHlwZSBmb3IgTWl4aW5TdHJVbmljb2RlVGVzdCAlciIgJSB0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKaW5kZXggY2RmODZlNy4uODY3ZGMyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CkBAIC04OCw3ICs4OCw3IEBACiAgICAgInNraXBfdW5sZXNzX3N5bWxpbmsiLCAicmVxdWlyZXNfZ3ppcCIsICJyZXF1aXJlc19iejIiLCAicmVxdWlyZXNfbHptYSIsCiAgICAgImJpZ21lbXRlc3QiLCAiYmlnYWRkcnNwYWNldGVzdCIsICJjcHl0aG9uX29ubHkiLCAiZ2V0X2F0dHJpYnV0ZSIsCiAgICAgInJlcXVpcmVzX0lFRUVfNzU0IiwgInNraXBfdW5sZXNzX3hhdHRyIiwgInJlcXVpcmVzX3psaWIiLAotICAgICJhbnRpY2lwYXRlX2ZhaWx1cmUiLCAibG9hZF9wYWNrYWdlX3Rlc3RzIiwKKyAgICAiYW50aWNpcGF0ZV9mYWlsdXJlIiwgImxvYWRfcGFja2FnZV90ZXN0cyIsICJkZXRlY3RfYXBpX21pc21hdGNoIiwKICAgICAjIHN5cwogICAgICJpc19qeXRob24iLCAiY2hlY2tfaW1wbF9kZXRhaWwiLAogICAgICMgbmV0d29yawpAQCAtMTAwLDcgKzEwMCw4IEBACiAgICAgIyB0aHJlYWRzCiAgICAgInRocmVhZGluZ19zZXR1cCIsICJ0aHJlYWRpbmdfY2xlYW51cCIsICJyZWFwX3RocmVhZHMiLCAic3RhcnRfdGhyZWFkcyIsCiAgICAgIyBtaXNjZWxsYW5lb3VzCi0gICAgImNoZWNrX3dhcm5pbmdzIiwgIkVudmlyb25tZW50VmFyR3VhcmQiLCAicnVuX3dpdGhfbG9jYWxlIiwgInN3YXBfaXRlbSIsCisgICAgImNoZWNrX3dhcm5pbmdzIiwgImNoZWNrX25vX3Jlc291cmNlX3dhcm5pbmciLCAiRW52aXJvbm1lbnRWYXJHdWFyZCIsCisgICAgInJ1bl93aXRoX2xvY2FsZSIsICJzd2FwX2l0ZW0iLAogICAgICJzd2FwX2F0dHIiLCAiTWF0Y2hlciIsICJzZXRfbWVtbGltaXQiLCAiU3VwcHJlc3NDcmFzaFJlcG9ydCIsICJzb3J0ZGljdCIsCiAgICAgInJ1bl93aXRoX3R6IiwKICAgICBdCkBAIC0zNzYsMzYgKzM3NywzMiBAQAogICAgICAgICBwYXNzCiAKIGRlZiBtYWtlX2xlZ2FjeV9weWMoc291cmNlKToKLSAgICAiIiJNb3ZlIGEgUEVQIDMxNDcgcHljL3B5byBmaWxlIHRvIGl0cyBsZWdhY3kgcHljL3B5byBsb2NhdGlvbi4KLQotICAgIFRoZSBjaG9pY2Ugb2YgLnB5YyBvciAucHlvIGV4dGVuc2lvbiBpcyBkb25lIGJhc2VkIG9uIHRoZSBfX2RlYnVnX18gZmxhZwotICAgIHZhbHVlLgorICAgICIiIk1vdmUgYSBQRVAgMzE0Ny80ODggcHljIGZpbGUgdG8gaXRzIGxlZ2FjeSBweWMgbG9jYXRpb24uCiAKICAgICA6cGFyYW0gc291cmNlOiBUaGUgZmlsZSBzeXN0ZW0gcGF0aCB0byB0aGUgc291cmNlIGZpbGUuICBUaGUgc291cmNlIGZpbGUKLSAgICAgICAgZG9lcyBub3QgbmVlZCB0byBleGlzdCwgaG93ZXZlciB0aGUgUEVQIDMxNDcgcHljIGZpbGUgbXVzdCBleGlzdC4KKyAgICAgICAgZG9lcyBub3QgbmVlZCB0byBleGlzdCwgaG93ZXZlciB0aGUgUEVQIDMxNDcvNDg4IHB5YyBmaWxlIG11c3QgZXhpc3QuCiAgICAgOnJldHVybjogVGhlIGZpbGUgc3lzdGVtIHBhdGggdG8gdGhlIGxlZ2FjeSBweWMgZmlsZS4KICAgICAiIiIKICAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICB1cF9vbmUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHNvdXJjZSkpCi0gICAgbGVnYWN5X3B5YyA9IG9zLnBhdGguam9pbih1cF9vbmUsIHNvdXJjZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKSkKKyAgICBsZWdhY3lfcHljID0gb3MucGF0aC5qb2luKHVwX29uZSwgc291cmNlICsgJ2MnKQogICAgIG9zLnJlbmFtZShweWNfZmlsZSwgbGVnYWN5X3B5YykKICAgICByZXR1cm4gbGVnYWN5X3B5YwogCiBkZWYgZm9yZ2V0KG1vZG5hbWUpOgogICAgICIiIidGb3JnZXQnIGEgbW9kdWxlIHdhcyBldmVyIGltcG9ydGVkLgogCi0gICAgVGhpcyByZW1vdmVzIHRoZSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcyBhbmQgZGVsZXRlcyBhbnkgUEVQIDMxNDcgb3IKLSAgICBsZWdhY3kgLnB5YyBhbmQgLnB5byBmaWxlcy4KKyAgICBUaGlzIHJlbW92ZXMgdGhlIG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzIGFuZCBkZWxldGVzIGFueSBQRVAgMzE0Ny80ODggb3IKKyAgICBsZWdhY3kgLnB5YyBmaWxlcy4KICAgICAiIiIKICAgICB1bmxvYWQobW9kbmFtZSkKICAgICBmb3IgZGlybmFtZSBpbiBzeXMucGF0aDoKICAgICAgICAgc291cmNlID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIG1vZG5hbWUgKyAnLnB5JykKICAgICAgICAgIyBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGV5IGV4aXN0IG9yIG5vdCwgdW5saW5rIGFsbCBwb3NzaWJsZQotICAgICAgICAjIGNvbWJpbmF0aW9ucyBvZiBQRVAgMzE0NyBhbmQgbGVnYWN5IHB5YyBhbmQgcHlvIGZpbGVzLgorICAgICAgICAjIGNvbWJpbmF0aW9ucyBvZiBQRVAgMzE0Ny80ODggYW5kIGxlZ2FjeSBweWMgZmlsZXMuCiAgICAgICAgIHVubGluayhzb3VyY2UgKyAnYycpCi0gICAgICAgIHVubGluayhzb3VyY2UgKyAnbycpCi0gICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPVRydWUpKQotICAgICAgICB1bmxpbmsoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCisgICAgICAgIGZvciBvcHQgaW4gKCcnLCAxLCAyKToKKyAgICAgICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIG9wdGltaXphdGlvbj1vcHQpKQogCiAjIENoZWNrIHdoZXRoZXIgYSBndWkgaXMgYWN0dWFsbHkgYXZhaWxhYmxlCiBkZWYgX2lzX2d1aV9hdmFpbGFibGUoKToKQEAgLTEwNDIsNyArMTAzOSw4IEBACiAgICAgIyBWZXJpZnkgdGhlIHJlcXVpcmVtZW50IGJlZm9yZSBkb3dubG9hZGluZyB0aGUgZmlsZQogICAgIHJlcXVpcmVzKCd1cmxmZXRjaCcpCiAKLSAgICBwcmludCgnXHRmZXRjaGluZyAlcyAuLi4nICUgdXJsLCBmaWxlPWdldF9vcmlnaW5hbF9zdGRvdXQoKSkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCgnXHRmZXRjaGluZyAlcyAuLi4nICUgdXJsLCBmaWxlPWdldF9vcmlnaW5hbF9zdGRvdXQoKSkKICAgICBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoKQogICAgIGlmIGd6aXA6CiAgICAgICAgIG9wZW5lci5hZGRoZWFkZXJzLmFwcGVuZCgoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwJykpCkBAIC0xMTUwLDYgKzExNDgsMjcgQEAKICAgICByZXR1cm4gX2ZpbHRlcndhcm5pbmdzKGZpbHRlcnMsIHF1aWV0KQogCiAKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgY2hlY2tfbm9fcmVzb3VyY2Vfd2FybmluZyh0ZXN0Y2FzZSk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIGNoZWNrIHRoYXQgbm8gUmVzb3VyY2VXYXJuaW5nIGlzIGVtaXR0ZWQuCisKKyAgICBVc2FnZToKKworICAgICAgICB3aXRoIGNoZWNrX25vX3Jlc291cmNlX3dhcm5pbmcoc2VsZik6CisgICAgICAgICAgICBmID0gb3BlbiguLi4pCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIGRlbCBmCisKKyAgICBZb3UgbXVzdCByZW1vdmUgdGhlIG9iamVjdCB3aGljaCBtYXkgZW1pdCBSZXNvdXJjZVdhcm5pbmcgYmVmb3JlCisgICAgdGhlIGVuZCBvZiB0aGUgY29udGV4dCBtYW5hZ2VyLgorICAgICIiIgorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHdhcm5zOgorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnYWx3YXlzJywgY2F0ZWdvcnk9UmVzb3VyY2VXYXJuaW5nKQorICAgICAgICB5aWVsZAorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbCh3YXJucywgW10pCisKKwogY2xhc3MgQ2xlYW5JbXBvcnQob2JqZWN0KToKICAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gZm9yY2UgaW1wb3J0IHRvIHJldHVybiBhIG5ldyBtb2R1bGUgcmVmZXJlbmNlLgogCkBAIC0xMzMwLDcgKzEzNDksOCBAQAogICAgICAgICAgICAgIDUwMCA8PSBlcnIuY29kZSA8PSA1OTkpIG9yCiAgICAgICAgICAgICAoaXNpbnN0YW5jZShlcnIsIHVybGxpYi5lcnJvci5VUkxFcnJvcikgYW5kCiAgICAgICAgICAgICAgICAgICgoIkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3IiIGluIGVyci5yZWFzb24pIG9yCi0gICAgICAgICAgICAgICAgICAoIlRpbWVvdXRFcnJvciIgaW4gZXJyLnJlYXNvbikpKSBvcgorICAgICAgICAgICAgICAgICAgKCJUaW1lb3V0RXJyb3IiIGluIGVyci5yZWFzb24pIG9yCisgICAgICAgICAgICAgICAgICAoIkVPRkVycm9yIiBpbiBlcnIucmVhc29uKSkpIG9yCiAgICAgICAgICAgICBuIGluIGNhcHR1cmVkX2Vycm5vcyk6CiAgICAgICAgICAgICBpZiBub3QgdmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGRlbmllZC5hcmdzWzBdICsgIlxuIikKQEAgLTE2MTEsMTIgKzE2MzEsMTUgQEAKIGRlZiBiaWdtZW10ZXN0KHNpemUsIG1lbXVzZSwgZHJ5X3J1bj1UcnVlKToKICAgICAiIiJEZWNvcmF0b3IgZm9yIGJpZ21lbSB0ZXN0cy4KIAotICAgICdtaW5zaXplJyBpcyB0aGUgbWluaW11bSB1c2VmdWwgc2l6ZSBmb3IgdGhlIHRlc3QgKGluIGFyYml0cmFyeSwKLSAgICB0ZXN0LWludGVycHJldGVkIHVuaXRzLikgJ21lbXVzZScgaXMgdGhlIG51bWJlciBvZiAnYnl0ZXMgcGVyIHNpemUnIGZvcgotICAgIHRoZSB0ZXN0LCBvciBhIGdvb2QgZXN0aW1hdGUgb2YgaXQuCisgICAgJ3NpemUnIGlzIGEgcmVxdWVzdGVkIHNpemUgZm9yIHRoZSB0ZXN0IChpbiBhcmJpdHJhcnksIHRlc3QtaW50ZXJwcmV0ZWQKKyAgICB1bml0cy4pICdtZW11c2UnIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHVuaXQgZm9yIHRoZSB0ZXN0LCBvciBhIGdvb2QKKyAgICBlc3RpbWF0ZSBvZiBpdC4gRm9yIGV4YW1wbGUsIGEgdGVzdCB0aGF0IG5lZWRzIHR3byBieXRlIGJ1ZmZlcnMsIG9mIDQgR2lCCisgICAgZWFjaCwgY291bGQgYmUgZGVjb3JhdGVkIHdpdGggQGJpZ21lbXRlc3Qoc2l6ZT1fNEcsIG1lbXVzZT0yKS4KIAotICAgIGlmICdkcnlfcnVuJyBpcyBGYWxzZSwgaXQgbWVhbnMgdGhlIHRlc3QgZG9lc24ndCBzdXBwb3J0IGR1bW15IHJ1bnMKLSAgICB3aGVuIC1NIGlzIG5vdCBzcGVjaWZpZWQuCisgICAgVGhlICdzaXplJyBhcmd1bWVudCBpcyBub3JtYWxseSBwYXNzZWQgdG8gdGhlIGRlY29yYXRlZCB0ZXN0IG1ldGhvZCBhcyBhbgorICAgIGV4dHJhIGFyZ3VtZW50LiBJZiAnZHJ5X3J1bicgaXMgdHJ1ZSwgdGhlIHZhbHVlIHBhc3NlZCB0byB0aGUgdGVzdCBtZXRob2QKKyAgICBtYXkgYmUgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgdmFsdWUuIElmICdkcnlfcnVuJyBpcyBmYWxzZSwgaXQgbWVhbnMgdGhlCisgICAgdGVzdCBkb2Vzbid0IHN1cHBvcnQgZHVtbXkgcnVucyB3aGVuIC1NIGlzIG5vdCBzcGVjaWZpZWQuCiAgICAgIiIiCiAgICAgZGVmIGRlY29yYXRvcihmKToKICAgICAgICAgZGVmIHdyYXBwZXIoc2VsZik6CkBAIC0yMDQ2LDYgKzIwNjksOSBAQAogICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzLCBcZCsgYmxvY2tzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQogICAgIHJldHVybiBzdGRlcnIKIAorcmVxdWlyZXNfdHlwZV9jb2xsZWN0aW5nID0gdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0Y291bnRzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAndHlwZXMgYXJlIGltbW9ydGFsIGlmIENPVU5UX0FMTE9DUyBpcyBkZWZpbmVkJykKKwogZGVmIGFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpOgogICAgICIiIlJldHVybiBhIGxpc3Qgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyByZXByb2R1Y2luZyB0aGUgY3VycmVudAogICAgIHNldHRpbmdzIGluIHN5cy5mbGFncyBhbmQgc3lzLndhcm5vcHRpb25zLiIiIgpAQCAtMjE4Nyw2ICsyMjEzLDIxIEBACiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogCitkZWYgZGV0ZWN0X2FwaV9taXNtYXRjaChyZWZfYXBpLCBvdGhlcl9hcGksICosIGlnbm9yZT0oKSk6CisgICAgIiIiUmV0dXJucyB0aGUgc2V0IG9mIGl0ZW1zIGluIHJlZl9hcGkgbm90IGluIG90aGVyX2FwaSwgZXhjZXB0IGZvciBhCisgICAgZGVmaW5lZCBsaXN0IG9mIGl0ZW1zIHRvIGJlIGlnbm9yZWQgaW4gdGhpcyBjaGVjay4KKworICAgIEJ5IGRlZmF1bHQgdGhpcyBza2lwcyBwcml2YXRlIGF0dHJpYnV0ZXMgYmVnaW5uaW5nIHdpdGggJ18nIGJ1dAorICAgIGluY2x1ZGVzIGFsbCBtYWdpYyBtZXRob2RzLCBpLmUuIHRob3NlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgaW4gJ19fJy4KKyAgICAiIiIKKyAgICBtaXNzaW5nX2l0ZW1zID0gc2V0KGRpcihyZWZfYXBpKSkgLSBzZXQoZGlyKG90aGVyX2FwaSkpCisgICAgaWYgaWdub3JlOgorICAgICAgICBtaXNzaW5nX2l0ZW1zIC09IHNldChpZ25vcmUpCisgICAgbWlzc2luZ19pdGVtcyA9IHNldChtIGZvciBtIGluIG1pc3NpbmdfaXRlbXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBtLnN0YXJ0c3dpdGgoJ18nKSBvciBtLmVuZHN3aXRoKCdfXycpKQorICAgIHJldHVybiBtaXNzaW5nX2l0ZW1zCisKKwogY2xhc3MgU3VwcHJlc3NDcmFzaFJlcG9ydDoKICAgICAiIiJUcnkgdG8gcHJldmVudCBhIGNyYXNoIHJlcG9ydCBmcm9tIHBvcHBpbmcgdXAuCiAKQEAgLTIxOTQsNiArMjIzNSw3IEBACiAgICAgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgY29yZWR1bXAgZmlsZS4KICAgICAiIiIKICAgICBvbGRfdmFsdWUgPSBOb25lCisgICAgb2xkX21vZGVzID0gTm9uZQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgIiIiT24gV2luZG93cywgZGlzYWJsZSBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCkBAIC0yMjExLDYgKzIyNTMsMjYgQEAKICAgICAgICAgICAgIFNFTV9OT0dQRkFVTFRFUlJPUkJPWCA9IDB4MDIKICAgICAgICAgICAgIHNlbGYub2xkX3ZhbHVlID0gc2VsZi5fazMyLlNldEVycm9yTW9kZShTRU1fTk9HUEZBVUxURVJST1JCT1gpCiAgICAgICAgICAgICBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKHNlbGYub2xkX3ZhbHVlIHwgU0VNX05PR1BGQVVMVEVSUk9SQk9YKQorCisgICAgICAgICAgICAjIFN1cHByZXNzIGFzc2VydCBkaWFsb2dzIGluIGRlYnVnIGJ1aWxkcworICAgICAgICAgICAgIyAoc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzMxNCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEltcG9ydEVycm9yKToKKyAgICAgICAgICAgICAgICAjIG5vIG1zdmNydCBvciBhIHJlbGVhc2UgYnVpbGQKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYub2xkX21vZGVzID0ge30KKyAgICAgICAgICAgICAgICBmb3IgcmVwb3J0X3R5cGUgaW4gW21zdmNydC5DUlRfV0FSTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5DUlRfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ1JUX0FTU0VSVF06CisgICAgICAgICAgICAgICAgICAgIG9sZF9tb2RlID0gbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUocmVwb3J0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNSVERCR19NT0RFX0ZJTEUpCisgICAgICAgICAgICAgICAgICAgIG9sZF9maWxlID0gbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUocmVwb3J0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNSVERCR19GSUxFX1NUREVSUikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vbGRfbW9kZXNbcmVwb3J0X3R5cGVdID0gb2xkX21vZGUsIG9sZF9maWxlCisKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHRyeToKQEAgLTIyNDIsNiArMjMwNCwxMiBAQAogCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKICAgICAgICAgICAgIHNlbGYuX2szMi5TZXRFcnJvck1vZGUoc2VsZi5vbGRfdmFsdWUpCisKKyAgICAgICAgICAgIGlmIHNlbGYub2xkX21vZGVzOgorICAgICAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgICAgICAgICBmb3IgcmVwb3J0X3R5cGUsIChvbGRfbW9kZSwgb2xkX2ZpbGUpIGluIHNlbGYub2xkX21vZGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlKHJlcG9ydF90eXBlLCBvbGRfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUocmVwb3J0X3R5cGUsIG9sZF9maWxlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMjMwMiwzICsyMzcwLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhbGxvY2F0aW9ucyIpCiAgICAgaW1wb3J0IF90ZXN0Y2FwaQogICAgIHJldHVybiBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQorCisKK2RlZiBjaGVja19mcmVlX2FmdGVyX2l0ZXJhdGluZyh0ZXN0LCBpdGVyLCBjbHMsIGFyZ3M9KCkpOgorICAgIGNsYXNzIEEoY2xzKToKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBub25sb2NhbCBkb25lCisgICAgICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkb25lID0gRmFsc2UKKyAgICBpdCA9IGl0ZXIoQSgqYXJncykpCisgICAgIyBJc3N1ZSAyNjQ5NDogU2hvdWxkbid0IGNyYXNoCisgICAgdGVzdC5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgIyBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlIGRlYWxsb2NhdGVkIGp1c3QgYWZ0ZXIgdGhlIGVuZCBvZiBpdGVyYXRpbmcKKyAgICBnY19jb2xsZWN0KCkKKyAgICB0ZXN0LmFzc2VydFRydWUoZG9uZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkgYi9MaWIvdGVzdC9zdXBwb3J0L3NjcmlwdF9oZWxwZXIucHkKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQpyZW5hbWUgdG8gTGliL3Rlc3Qvc3VwcG9ydC9zY3JpcHRfaGVscGVyLnB5CmluZGV4IGQyNzQ5NmIuLmM0NWQwMTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKKysrIGIvTGliL3Rlc3Qvc3VwcG9ydC9zY3JpcHRfaGVscGVyLnB5CkBAIC0xNCwxMyArMTQsMTMgQEAKIGltcG9ydCB6aXBmaWxlCiAKIGZyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbWFrZV9sZWdhY3lfcHljLCBzdHJpcF9weXRob25fc3RkZXJyLCB0ZW1wX2RpcgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5Yywgc3RyaXBfcHl0aG9uX3N0ZGVycgogCiAKICMgQ2FjaGVkIHJlc3VsdCBvZiB0aGUgZXhwZW5zaXZlIHRlc3QgcGVyZm9ybWVkIGluIHRoZSBmdW5jdGlvbiBiZWxvdy4KIF9fY2FjaGVkX2ludGVycF9yZXF1aXJlc19lbnZpcm9ubWVudCA9IE5vbmUKIAotZGVmIF9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpOgorZGVmIGludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCk6CiAgICAgIiIiCiAgICAgUmV0dXJucyBUcnVlIGlmIG91ciBzeXMuZXhlY3V0YWJsZSBpbnRlcnByZXRlciByZXF1aXJlcyBlbnZpcm9ubWVudAogICAgIHZhcmlhYmxlcyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJ1biBhdCBhbGwuCkBAIC01Nyw3ICs1Nyw3IEBACiAKICMgRXhlY3V0aW5nIHRoZSBpbnRlcnByZXRlciBpbiBhIHN1YnByb2Nlc3MKIGRlZiBydW5fcHl0aG9uX3VudGlsX2VuZCgqYXJncywgKiplbnZfdmFycyk6Ci0gICAgZW52X3JlcXVpcmVkID0gX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkKKyAgICBlbnZfcmVxdWlyZWQgPSBpbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpCiAgICAgaWYgJ19faXNvbGF0ZWQnIGluIGVudl92YXJzOgogICAgICAgICBpc29sYXRlZCA9IGVudl92YXJzLnBvcCgnX19pc29sYXRlZCcpCiAgICAgZWxzZToKQEAgLTczLDYgKzczLDEwIEBACiAgICAgIyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCwgZm9yIGluLXBsYWNlIHRlc3Rpbmcgb2YKICAgICAjIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkcy4KICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICMgc2V0IFRFUk09JycgdW5sZXNzIHRoZSBURVJNIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHBhc3NlZCBleHBsaWNpdGx5CisgICAgIyBzZWUgaXNzdWVzICMxMTM5MCBhbmQgIzE4MzAwCisgICAgaWYgJ1RFUk0nIG5vdCBpbiBlbnZfdmFyczoKKyAgICAgICAgZW52WydURVJNJ10gPSAnJwogICAgICMgQnV0IGEgc3BlY2lhbCBmbGFnIHRoYXQgY2FuIGJlIHNldCB0byBvdmVycmlkZSAtLSBpbiB0aGlzIGNhc2UsIHRoZQogICAgICMgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIHBhc3MgdGhlIGZ1bGwgZW52aXJvbm1lbnQuCiAgICAgaWYgZW52X3ZhcnMucG9wKCdfX2NsZWFuZW52JywgTm9uZSk6CkBAIC05NSwxMCArOTksMzAgQEAKIGRlZiBfYXNzZXJ0X3B5dGhvbihleHBlY3RlZF9zdWNjZXNzLCAqYXJncywgKiplbnZfdmFycyk6CiAgICAgcmVzLCBjbWRfbGluZSA9IHJ1bl9weXRob25fdW50aWxfZW5kKCphcmdzLCAqKmVudl92YXJzKQogICAgIGlmIChyZXMucmMgYW5kIGV4cGVjdGVkX3N1Y2Nlc3MpIG9yIChub3QgcmVzLnJjIGFuZCBub3QgZXhwZWN0ZWRfc3VjY2Vzcyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWQsIGNvbW1hbmQgbGluZSB3YXM6ICVyLCAiCi0gICAgICAgICAgICAic3RkZXJyIGZvbGxvd3M6XG4lcyIgJSAocmVzLnJjLCBjbWRfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZXJyLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJykpKQorICAgICAgICAjIExpbWl0IHRvIDgwIGxpbmVzIHRvIEFTQ0lJIGNoYXJhY3RlcnMKKyAgICAgICAgbWF4bGVuID0gODAgKiAxMDAKKyAgICAgICAgb3V0LCBlcnIgPSByZXMub3V0LCByZXMuZXJyCisgICAgICAgIGlmIGxlbihvdXQpID4gbWF4bGVuOgorICAgICAgICAgICAgb3V0ID0gYicoLi4uIHRydW5jYXRlZCBzdGRvdXQgLi4uKScgKyBvdXRbLW1heGxlbjpdCisgICAgICAgIGlmIGxlbihlcnIpID4gbWF4bGVuOgorICAgICAgICAgICAgZXJyID0gYicoLi4uIHRydW5jYXRlZCBzdGRlcnIgLi4uKScgKyBlcnJbLW1heGxlbjpdCisgICAgICAgIG91dCA9IG91dC5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKS5yc3RyaXAoKQorICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCdhc2NpaScsICdyZXBsYWNlJykucnN0cmlwKCkKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1hbmQgbGluZTogJXJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Rkb3V0OlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ZGVycjpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocmVzLnJjLCBjbWRfbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIpKQogICAgIHJldHVybiByZXMKIAogZGVmIGFzc2VydF9weXRob25fb2soKmFyZ3MsICoqZW52X3ZhcnMpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5CmluZGV4IDZmNzNjN2YuLjU1OWExODcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19mdXR1cmVfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fZnV0dXJlX18ucHkKQEAgLTEsNSArMSw0IEBACiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IF9fZnV0dXJlX18KIAogR09PRF9TRVJJQUxTID0gKCJhbHBoYSIsICJiZXRhIiwgImNhbmRpZGF0ZSIsICJmaW5hbCIpCkBAIC01OCw4ICs1Nyw1IEBACiAgICAgICAgICAgICAgICAgICAgIi5jb21waWxlcl9mbGFnIGlzbid0IGludCIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZ1dHVyZVRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weQppbmRleCAwMTUyZTlkLi4xMDc1ZGVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X19vcGNvZGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9fb3Bjb2RlLnB5CkBAIC0xLDUgKzEsNSBAQAogaW1wb3J0IGRpcwotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUKIGltcG9ydCB1bml0dGVzdAogCiBfb3Bjb2RlID0gaW1wb3J0X21vZHVsZSgiX29wY29kZSIpCkBAIC0xNiw4ICsxNiw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCBkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCBkaXMub3BtYXBbJ1BPUF9UT1AnXSwgMCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChPcGNvZGVUZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fb3N4X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weQppbmRleCA1ZGNhZGY3Li5hYzYzMjVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weQpAQCAtMjczLDkgKzI3Myw1IEBACiAgICAgICAgIHJlc3VsdCA9IF9vc3hfc3VwcG9ydC5nZXRfcGxhdGZvcm1fb3N4KGNvbmZpZ192YXJzLCAnICcsICcgJywgJyAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnbWFjb3N4JywgJzEwLjYnLCAnZmF0JyksIHJlc3VsdCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0X09TWFN1cHBvcnQpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CmluZGV4IDVlZmRiNjcuLmY5ZWUzOTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpAQCAtMjAsMTUgKzIwLDYgQEAKIAogY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIGFzc2VydEVxdWFsKHNlbGYsIG9iajEsIG9iajIpOgotICAgICAgICBpZiBvYmoxICE9IG9iajI6Ci0gICAgICAgICAgICBwcmludCgnJykKLSAgICAgICAgICAgIHByaW50KHJlcHIob2JqMSkpCi0gICAgICAgICAgICBwcmludChyZXByKG9iajIpKQotICAgICAgICAgICAgcHJpbnQob2JqMSkKLSAgICAgICAgICAgIHByaW50KG9iajIpCi0gICAgICAgIHN1cGVyKFRlc3RDYXNlLCBzZWxmKS5hc3NlcnRFcXVhbChvYmoxLCBvYmoyKQotCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAjIFRoZSB0ZXN0cyBhc3N1bWUgdGhhdCBsaW5lIHdyYXBwaW5nIG9jY3VycyBhdCA4MCBjb2x1bW5zLCBidXQgdGhpcwogICAgICAgICAjIGJlaGF2aW91ciBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIHRoZSBDT0xVTU5TIGVudmlyb25tZW50CkBAIC03OCw5ICs2OSw2IEBACiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgIHJldHVybiB2YXJzKHNlbGYpID09IHZhcnMob3RoZXIpCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQogCiBjbGFzcyBBcmd1bWVudFBhcnNlckVycm9yKEV4Y2VwdGlvbik6CiAKQEAgLTU0Niw3ICs1MzQsNyBAQAogCiAKIGNsYXNzIFRlc3RPcHRpb25hbHNOYXJnczEoUGFyc2VyVGVzdENhc2UpOgotICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgdGhlIDEgYXJnIGZvciBhbiBPcHRpb25hbCIiIgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgMSBhcmcgZm9yIGFuIE9wdGlvbmFsIiIiCiAKICAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBuYXJncz0xKV0KICAgICBmYWlsdXJlcyA9IFsnYScsICcteCddCkBAIC01NTcsNyArNTQ1LDcgQEAKIAogCiBjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3MzKFBhcnNlclRlc3RDYXNlKToKLSAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIHRoZSAzIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIiIiCisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyAzIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIiIiCiAKICAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBuYXJncz0zKV0KICAgICBmYWlsdXJlcyA9IFsnYScsICcteCcsICcteCBhJywgJy14IGEgYicsICdhIC14JywgJ2EgLXggYiddCkBAIC01OTEsNyArNTc5LDcgQEAKIAogCiBjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3NaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKLSAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyB6ZXJvIG9yIG1vcmUiIiIKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyB6ZXJvIG9yIG1vcmUiIiIKIAogICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCiAgICAgICAgIFNpZygnLXgnLCBuYXJncz0nKicpLApAQCAtNjEwLDcgKzU5OCw3IEBACiAKIAogY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKLSAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIHRoYXQgYWNjZXB0cyBvbmUgb3IgbW9yZSIiIgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYXJncyBmb3IgYW4gT3B0aW9uYWwgdGhhdCBhY2NlcHRzIG9uZSBvciBtb3JlIiIiCiAKICAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWwogICAgICAgICBTaWcoJy14JywgbmFyZ3M9JysnKSwKQEAgLTc2NSw2ICs3NTMsMzkgQEAKICAgICBdCiAKIAorY2xhc3MgVGVzdE9wdGlvbmFsc0FsbG93TG9uZ0FiYnJldmlhdGlvbihQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiQWxsb3cgbG9uZyBvcHRpb25zIHRvIGJlIGFiYnJldmlhdGVkIHVuYW1iaWd1b3VzbHkiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nKSwKKyAgICAgICAgU2lnKCctLWZvb2JheicpLAorICAgICAgICBTaWcoJy0tZm9vYmxlJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWZvb2IgNScsICctLWZvb2InXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSwgZm9vYmF6PU5vbmUsIGZvb2JsZT1GYWxzZSkpLAorICAgICAgICAoJy0tZm9vIDcnLCBOUyhmb289JzcnLCBmb29iYXo9Tm9uZSwgZm9vYmxlPUZhbHNlKSksCisgICAgICAgICgnLS1mb29iYSBhJywgTlMoZm9vPU5vbmUsIGZvb2Jhej0nYScsIGZvb2JsZT1GYWxzZSkpLAorICAgICAgICAoJy0tZm9vYmwgLS1mb28gZycsIE5TKGZvbz0nZycsIGZvb2Jhej1Ob25lLCBmb29ibGU9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRGlzYWxsb3dMb25nQWJicmV2aWF0aW9uKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJEbyBub3QgYWxsb3cgYWJicmV2aWF0aW9ucyBvZiBsb25nIG9wdGlvbnMgYXQgYWxsIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGFsbG93X2FiYnJldj1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJyksCisgICAgICAgIFNpZygnLS1mb29kbGUnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCctLWZvb25seScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLWZvb24gMycsICctLWZvb24gMycsICctLWZvb2QnLCAnLS1mb29kIC0tZm9vIDInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSwgZm9vZGxlPUZhbHNlLCBmb29ubHk9Tm9uZSkpLAorICAgICAgICAoJy0tZm9vIDMnLCBOUyhmb289JzMnLCBmb29kbGU9RmFsc2UsIGZvb25seT1Ob25lKSksCisgICAgICAgICgnLS1mb29ubHkgNyAtLWZvb2RsZSAtLWZvbyAyJywgTlMoZm9vPScyJywgZm9vZGxlPVRydWUsIGZvb25seT0nNycpKSwKKyAgICBdCisKICMgPT09PT09PT09PT09PT09PQogIyBQb3NpdGlvbmFsIHRlc3RzCiAjID09PT09PT09PT09PT09PT0KQEAgLTEyMzAsNyArMTI1MSw3IEBACiAKIAogY2xhc3MgVGVzdE5hcmdzWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6Ci0gICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhbiBhcmdzIGZvciBhbiBPcHRpb25hbCB0aGF0IGFjY2VwdHMgemVybyBvciBtb3JlIiIiCisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhcmdzIGZvciBhbiBPcHRpb25hbCB0aGF0IGFjY2VwdHMgemVybyBvciBtb3JlIiIiCiAKICAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBuYXJncz0nKicpLCBTaWcoJ3knLCBuYXJncz0nKicpXQogICAgIGZhaWx1cmVzID0gW10KQEAgLTE5OTMsMTQgKzIwMTQsOSBAQAogICAgICAgICAgICAgJycnKSkKIAogICAgIGRlZiBfdGVzdF9zdWJwYXJzZXJfaGVscChzZWxmLCBhcmdzX3N0ciwgZXhwZWN0ZWRfaGVscCk6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoYXJnc19zdHIuc3BsaXQoKSkKLSAgICAgICAgZXhjZXB0IEFyZ3VtZW50UGFyc2VyRXJyb3I6Ci0gICAgICAgICAgICBlcnIgPSBzeXMuZXhjX2luZm8oKVsxXQotICAgICAgICAgICAgaWYgZXJyLnN0ZG91dCAhPSBleHBlY3RlZF9oZWxwOgotICAgICAgICAgICAgICAgIHByaW50KHJlcHIoZXhwZWN0ZWRfaGVscCkpCi0gICAgICAgICAgICAgICAgcHJpbnQocmVwcihlcnIuc3Rkb3V0KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnN0ZG91dCwgZXhwZWN0ZWRfaGVscCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9oZWxwLCBjbS5leGNlcHRpb24uc3Rkb3V0KQogCiAgICAgZGVmIHRlc3Rfc3VicGFyc2VyMV9oZWxwKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X3N1YnBhcnNlcl9oZWxwKCc1LjAgMSAtaCcsIHRleHR3cmFwLmRlZGVudCgnJydcCkBAIC0yODQ2LDE1ICsyODYyLDE1IEBACiAKICAgICBkZWYgdGVzdF9nZXRfZGVmYXVsdChzZWxmKToKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmdldF9kZWZhdWx0KCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKIAogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJmb28iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImJhciIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuZ2V0X2RlZmF1bHQoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuZ2V0X2RlZmF1bHQoImJhciIpKQogCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tYmFyIiwgdHlwZT1pbnQsIGRlZmF1bHQ9NDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmdldF9kZWZhdWx0KCJmb28iKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgcGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKIAogICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZvbz0iYmFkZ2VyIikKQEAgLTI4NjksMTggKzI4ODUsMTYgQEAKIAogICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgogICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycgaW4gbnMsIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIG5vdCBpbiBucywgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgaW4gbnMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCcnLCBucykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigneCcsIG5zKQogCiAgICAgZGVmIHRlc3Rfbm9uX2VtcHR5KHNlbGYpOgogICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSh4PTEsIHk9MikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgaW4gbnMsIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3gnIG5vdCBpbiBucywgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3knIGluIG5zLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIGluIG5zLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneHgnIGluIG5zLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneicgaW4gbnMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCcnLCBucykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigneCcsIG5zKQorICAgICAgICBzZWxmLmFzc2VydEluKCd5JywgbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3h4JywgbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3onLCBucykKIAogIyA9PT09PT09PT09PT09PT09PT09PT0KICMgSGVscCBmb3JtYXR0aW5nIHRlc3RzCkBAIC0yOTM2LDEzICsyOTUwLDYgQEAKICAgICAgICAgICAgIGRlZiBfdGVzdChzZWxmLCB0ZXN0ZXIsIHBhcnNlcl90ZXh0KToKICAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0ID0gZ2V0YXR0cih0ZXN0ZXIsIHNlbGYuZnVuY19zdWZmaXgpCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IHRleHR3cmFwLmRlZGVudChleHBlY3RlZF90ZXh0KQotICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX3RleHQgIT0gcGFyc2VyX3RleHQ6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KHJlcHIoZXhwZWN0ZWRfdGV4dCkpCi0gICAgICAgICAgICAgICAgICAgIHByaW50KHJlcHIocGFyc2VyX3RleHQpKQotICAgICAgICAgICAgICAgICAgICBmb3IgY2hhcjEsIGNoYXIyIGluIHppcChleHBlY3RlZF90ZXh0LCBwYXJzZXJfdGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyMSAhPSBjaGFyMjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnZmlyc3QgZGlmZjogJXIgJXInICUgKGNoYXIxLCBjaGFyMikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICB0ZXN0ZXIuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGV4dCwgcGFyc2VyX3RleHQpCiAKICAgICAgICAgICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmLCB0ZXN0ZXIpOgpAQCAtNDIyMSwyNCArNDIyOCwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJ2ZvbycsIGFjdGlvbj0nYmF6JykKICAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCctLWZvbycsIGFjdGlvbj0oJ3N0b3JlJywgJ2FwcGVuZCcpKQogICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZm9vIiwgYWN0aW9uPSJzdG9yZS10cnVlIikKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KLSAgICAgICAgICAgIGV4cGVjdGVkID0gJ3Vua25vd24gYWN0aW9uJwotICAgICAgICAgICAgbXNnID0gJ2V4cGVjdGVkICVyLCBmb3VuZCAlcicgJSAoZXhwZWN0ZWQsIGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgaW4gc3RyKGUpLCBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Vua25vd24gYWN0aW9uJywgc3RyKGNtLmV4Y2VwdGlvbikpCiAKICAgICBkZWYgdGVzdF9tdWx0aXBsZV9kZXN0KHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoZGVzdD0nZm9vJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgZGVzdD0nYmF6JykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KLSAgICAgICAgICAgIGV4cGVjdGVkID0gJ2Rlc3Qgc3VwcGxpZWQgdHdpY2UgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQnCi0gICAgICAgICAgICBtc2cgPSAnZXhwZWN0ZWQgJXIsIGZvdW5kICVyJyAlIChleHBlY3RlZCwgZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCBpbiBzdHIoZSksIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZGVzdCBzdXBwbGllZCB0d2ljZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgc3RyKGNtLmV4Y2VwdGlvbikpCiAKICAgICBkZWYgdGVzdF9ub19hcmd1bWVudF9hY3Rpb25zKHNlbGYpOgogICAgICAgICBmb3IgYWN0aW9uIGluIFsnc3RvcmVfY29uc3QnLCAnc3RvcmVfdHJ1ZScsICdzdG9yZV9mYWxzZScsCkBAIC00Mzk1LDE4ICs0Mzk1LDEwIEBACiBjbGFzcyBUZXN0T3B0aW9uYWxzSGVscFZlcnNpb25BY3Rpb25zKFRlc3RDYXNlKToKICAgICAiIiJUZXN0IHRoZSBoZWxwIGFuZCB2ZXJzaW9uIGFjdGlvbnMiIiIKIAotICAgIGRlZiBfZ2V0X2Vycm9yKHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgQXJndW1lbnRQYXJzZXJFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsxXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKQotCiAgICAgZGVmIGFzc2VydFByaW50SGVscEV4aXQoc2VsZiwgcGFyc2VyLCBhcmdzX3N0cik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBwYXJzZXIuZm9ybWF0X2hlbHAoKSwKLSAgICAgICAgICAgIHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgYXJnc19zdHIuc3BsaXQoKSkuc3Rkb3V0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoYXJnc19zdHIuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgY20uZXhjZXB0aW9uLnN0ZG91dCkKIAogICAgIGRlZiBhc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYsIHBhcnNlciwgKmFyZ3MpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBwYXJzZXIucGFyc2VfYXJncywgYXJncykKQEAgLTQ0MjEsOCArNDQxMyw5IEBACiAgICAgZGVmIHRlc3RfdmVyc2lvbl9mb3JtYXQoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BQUCcpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyc2lvbicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249JyUocHJvZylzIDMuNScpCi0gICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctdiddKS5zdGRvdXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUFBQIDMuNVxuJywgbXNnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoWyctdiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdQUFAgMy41XG4nLCBjbS5leGNlcHRpb24uc3Rkb3V0KQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9ub19oZWxwKHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKQEAgLTQ0MzQsOCArNDQyNyw5IEBACiAgICAgZGVmIHRlc3RfdmVyc2lvbl9hY3Rpb24oc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1hYWCcpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1WJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy43JykKLSAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy1WJ10pLnN0ZG91dAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYWFggMy43XG4nLCBtc2cpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvcikgYXMgY206CisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbJy1WJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1hYWCAzLjdcbicsIGNtLmV4Y2VwdGlvbi5zdGRvdXQpCiAKICAgICBkZWYgdGVzdF9ub19oZWxwKHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKQEAgLTQ2MDUsMTQgKzQ1OTksMTAgQEAKIAogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3gnLCB0eXBlPXNwYW0pCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFsnWFhYJ10pCi0gICAgICAgIGV4Y2VwdCBBcmd1bWVudFBhcnNlckVycm9yOgotICAgICAgICAgICAgZXhwZWN0ZWQgPSAndXNhZ2U6IFBST0cgeFxuUFJPRzogZXJyb3I6IGFyZ3VtZW50IHg6IHNwYW0hXG4nCi0gICAgICAgICAgICBtc2cgPSBzeXMuZXhjX2luZm8oKVsxXS5zdGRlcnIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG1zZykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3VzYWdlOiBQUk9HIHhcblBST0c6IGVycm9yOiBhcmd1bWVudCB4OiBzcGFtIVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbS5leGNlcHRpb24uc3RkZXJyKQogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT0KICMgTWVzc2FnZUNvbnRlbnRFcnJvciB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weSBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKaW5kZXggMDdjOWJmOS4uNDgyNTI2ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CkBAIC0yODQsMTkgKzI4NCw0MiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGEpLCB0eXBlKGIpKQogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3JfcGlja2xlKHNlbGYpOgotICAgICAgICBkYXRhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBvcmlnID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBkYXRhID0gbGlzdChvcmlnKQorICAgICAgICBkYXRhMiA9IGRhdGFbOjotMV0KICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6Ci0gICAgICAgICAgICBvcmdpdCA9IGl0ZXIoZGF0YSkKLSAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMob3JnaXQsIHByb3RvKQotICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShvcmdpdCksIHR5cGUoaXQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKSkKKyAgICAgICAgICAgICMgaW5pdGlhbCBpdGVyYXRvcgorICAgICAgICAgICAgaXRvcmlnID0gaXRlcihvcmlnKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcygoaXRvcmlnLCBvcmlnKSwgcHJvdG8pCisgICAgICAgICAgICBpdCwgYSA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgYS5mcm9tbGlzdChkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdCksIHR5cGUoaXRvcmlnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGEgKyBkYXRhMikKIAotICAgICAgICAgICAgaWYgbGVuKGRhdGEpOgotICAgICAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBsaXN0KGRhdGEpWzE6XSkKKyAgICAgICAgICAgICMgcnVubmluZyBpdGVyYXRvcgorICAgICAgICAgICAgbmV4dChpdG9yaWcpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKChpdG9yaWcsIG9yaWcpLCBwcm90bykKKyAgICAgICAgICAgIGl0LCBhID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBhLmZyb21saXN0KGRhdGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0KSwgdHlwZShpdG9yaWcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgZGF0YVsxOl0gKyBkYXRhMikKKworICAgICAgICAgICAgIyBlbXB0eSBpdGVyYXRvcgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGRhdGEpKToKKyAgICAgICAgICAgICAgICBuZXh0KGl0b3JpZykKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoKGl0b3JpZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGEgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGEuZnJvbWxpc3QoZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXQpLCB0eXBlKGl0b3JpZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhMikKKworICAgICAgICAgICAgIyBleGhhdXN0ZWQgaXRlcmF0b3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0b3JpZykKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoKGl0b3JpZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGEgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGEuZnJvbWxpc3QoZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXQpLCB0eXBlKGl0b3JpZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhMikKIAogICAgIGRlZiB0ZXN0X2luc2VydChzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKQEAgLTM5NCw3ICs0MTcsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCiAKICAgICBkZWYgdGVzdF90b2Zyb21zdHJpbmcoc2VsZik6Ci0gICAgICAgIG5iX3dhcm5pbmdzID0gNAorICAgICAgICAjIFdhcm5pbmdzIG5vdCByYWlzZWQgd2hlbiBhcmd1bWVudHMgYXJlIGluY29ycmVjdCBhcyBBcmd1bWVudCBDbGluaWMKKyAgICAgICAgIyBoYW5kbGVzIHRoYXQgYmVmb3JlIHRoZSB3YXJuaW5nIGNhbiBiZSByYWlzZWQuCisgICAgICAgIG5iX3dhcm5pbmdzID0gMgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyByOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXIiKHRvfGZyb20pc3RyaW5nXChcKSBpcyBkZXByZWNhdGVkIiwKQEAgLTEwMzksNiArMTA2NCwxMSBAQAogICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsICJmb28iKQogICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGFycmF5LmFycmF5KCd1JywgJ2ZvbycpKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfb2Jzb2xldGVfd3JpdGVfbG9jayhzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGJ1ZmZlcl93aXRoX251bGxfdmlldworICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ0InLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBnZXRidWZmZXJfd2l0aF9udWxsX3ZpZXcsIGEpCiAKIGNsYXNzIFN0cmluZ1Rlc3QoQmFzZVRlc3QpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzZGxfcGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9hc2RsX3BhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWJjNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc2RsX3BhcnNlci5weQpAQCAtMCwwICsxLDEyMiBAQAorIiIiVGVzdHMgZm9yIHRoZSBhc2RsIHBhcnNlciBpbiBQYXJzZXIvYXNkbC5weSIiIgorCitpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQoraW1wb3J0IG9zCitmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBzeXNjb25maWcKK2ltcG9ydCB1bml0dGVzdAorCisKKyMgVGhpcyB0ZXN0IGlzIG9ubHkgcmVsZXZhbnQgZm9yIGZyb20tc291cmNlIGJ1aWxkcyBvZiBQeXRob24uCitpZiBub3Qgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCd0ZXN0IGlycmVsZXZhbnQgZm9yIGFuIGluc3RhbGxlZCBQeXRob24nKQorCitzcmNfYmFzZSA9IGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkpCitwYXJzZXJfZGlyID0gb3MucGF0aC5qb2luKHNyY19iYXNlLCAnUGFyc2VyJykKKworCitjbGFzcyBUZXN0QXNkbFBhcnNlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIyBMb2FkcyB0aGUgYXNkbCBtb2R1bGUgZHluYW1pY2FsbHksIHNpbmNlIGl0J3Mgbm90IGluIGEgcmVhbCBpbXBvcnRhYmxlCisgICAgICAgICMgcGFja2FnZS4KKyAgICAgICAgIyBQYXJzZXMgUHl0aG9uLmFzZGwgaW50byBhbiBhc3QuTW9kdWxlIGFuZCBydW4gdGhlIGNoZWNrIG9uIGl0LgorICAgICAgICAjIFRoZXJlJ3Mgbm8gbmVlZCB0byBkbyB0aGlzIGZvciBlYWNoIHRlc3QgbWV0aG9kLCBoZW5jZSBzZXRVcENsYXNzLgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGFyc2VyX2RpcikKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKAorICAgICAgICAgICAgICAgICdhc2RsJywgb3MucGF0aC5qb2luKHBhcnNlcl9kaXIsICdhc2RsLnB5JykpCisgICAgICAgIGNscy5hc2RsID0gbG9hZGVyLmxvYWRfbW9kdWxlKCkKKyAgICAgICAgY2xzLm1vZCA9IGNscy5hc2RsLnBhcnNlKG9zLnBhdGguam9pbihwYXJzZXJfZGlyLCAnUHl0aG9uLmFzZGwnKSkKKyAgICAgICAgY2xzLmFzc2VydFRydWUoY2xzLmFzZGwuY2hlY2soY2xzLm1vZCksICdNb2R1bGUgdmFsaWRhdGlvbiBmYWlsZWQnKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgYWxpYXMgc3R1ZmYgZnJvbSB0aGUgY2xhc3MsIGZvciBjb252ZW5pZW5jZQorICAgICAgICBzZWxmLmFzZGwgPSBUZXN0QXNkbFBhcnNlci5hc2RsCisgICAgICAgIHNlbGYubW9kID0gVGVzdEFzZGxQYXJzZXIubW9kCisgICAgICAgIHNlbGYudHlwZXMgPSBzZWxmLm1vZC50eXBlcworCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kLm5hbWUsICdQeXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzdG10Jywgc2VsZi50eXBlcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZXhwcicsIHNlbGYudHlwZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21vZCcsIHNlbGYudHlwZXMpCisKKyAgICBkZWYgdGVzdF9kZWZpbml0aW9ucyhzZWxmKToKKyAgICAgICAgZGVmcyA9IHNlbGYubW9kLmRmbnMKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRlZnNbMF0sIHNlbGYuYXNkbC5UeXBlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGVmc1swXS52YWx1ZSwgc2VsZi5hc2RsLlN1bSkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50eXBlc1snd2l0aGl0ZW0nXSwgc2VsZi5hc2RsLlByb2R1Y3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnR5cGVzWydhbGlhcyddLCBzZWxmLmFzZGwuUHJvZHVjdCkKKworICAgIGRlZiB0ZXN0X3Byb2R1Y3Qoc2VsZik6CisgICAgICAgIGFsaWFzID0gc2VsZi50eXBlc1snYWxpYXMnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc3RyKGFsaWFzKSwKKyAgICAgICAgICAgICdQcm9kdWN0KFtGaWVsZChpZGVudGlmaWVyLCBuYW1lKSwgRmllbGQoaWRlbnRpZmllciwgYXNuYW1lLCBvcHQ9VHJ1ZSldKScpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzdG10ID0gc2VsZi50eXBlc1snc3RtdCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0bXQuYXR0cmlidXRlcyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHN0bXQuYXR0cmlidXRlc1swXSksICdGaWVsZChpbnQsIGxpbmVubyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdG10LmF0dHJpYnV0ZXNbMV0pLCAnRmllbGQoaW50LCBjb2xfb2Zmc2V0KScpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9maWVsZHMoc2VsZik6CisgICAgICAgIGVoYW5kbGVyID0gc2VsZi50eXBlc1snZXhjZXB0aGFuZGxlciddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVoYW5kbGVyLnR5cGVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWhhbmRsZXIuYXR0cmlidXRlcyksIDIpCisKKyAgICAgICAgY29ucyA9IGVoYW5kbGVyLnR5cGVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjb25zLCBzZWxmLmFzZGwuQ29uc3RydWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNvbnMuZmllbGRzKSwgMykKKworICAgICAgICBmMCA9IGNvbnMuZmllbGRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjAudHlwZSwgJ2V4cHInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYwLm5hbWUsICd0eXBlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYwLm9wdCkKKworICAgICAgICBmMSA9IGNvbnMuZmllbGRzWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjEudHlwZSwgJ2lkZW50aWZpZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYxLm5hbWUsICduYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxLm9wdCkKKworICAgICAgICBmMiA9IGNvbnMuZmllbGRzWzJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIudHlwZSwgJ3N0bXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLm5hbWUsICdib2R5JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMi5vcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMi5zZXEpCisKKyAgICBkZWYgdGVzdF92aXNpdG9yKHNlbGYpOgorICAgICAgICBjbGFzcyBDdXN0b21WaXNpdG9yKHNlbGYuYXNkbC5WaXNpdG9yQmFzZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICAgICAgc2VsZi5uYW1lc193aXRoX3NlcSA9IFtdCisKKyAgICAgICAgICAgIGRlZiB2aXNpdE1vZHVsZShzZWxmLCBtb2QpOgorICAgICAgICAgICAgICAgIGZvciBkZm4gaW4gbW9kLmRmbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudmlzaXQoZGZuKQorCisgICAgICAgICAgICBkZWYgdmlzaXRUeXBlKHNlbGYsIHR5cGUpOgorICAgICAgICAgICAgICAgIHNlbGYudmlzaXQodHlwZS52YWx1ZSkKKworICAgICAgICAgICAgZGVmIHZpc2l0U3VtKHNlbGYsIHN1bSk6CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gc3VtLnR5cGVzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KHQpCisKKyAgICAgICAgICAgIGRlZiB2aXNpdENvbnN0cnVjdG9yKHNlbGYsIGNvbnMpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGNvbnMuZmllbGRzOgorICAgICAgICAgICAgICAgICAgICBpZiBmLnNlcToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZXNfd2l0aF9zZXEuYXBwZW5kKGNvbnMubmFtZSkKKworICAgICAgICB2ID0gQ3VzdG9tVmlzaXRvcigpCisgICAgICAgIHYudmlzaXQoc2VsZi50eXBlc1snbW9kJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5uYW1lc193aXRoX3NlcSwgWydNb2R1bGUnLCAnSW50ZXJhY3RpdmUnLCAnU3VpdGUnXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3QucHkgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQppbmRleCBhNTMzZjg2Li5kM2U2ZDM1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQpAQCAtNzgsOSArNzgsOSBAQAogICAgICMgUGFzcywKICAgICAicGFzcyIsCiAgICAgIyBCcmVhawotICAgICJicmVhayIsCisgICAgImZvciB2IGluIHY6YnJlYWsiLAogICAgICMgQ29udGludWUKLSAgICAiY29udGludWUiLAorICAgICJmb3IgdiBpbiB2OmNvbnRpbnVlIiwKICAgICAjIGZvciBzdGF0ZW1lbnRzIHdpdGggbmFrZWQgdHVwbGVzIChzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY3MDQpCiAgICAgImZvciBhLGIgaW4gYzogcGFzcyIsCiAgICAgIlsoYSxiKSBmb3IgYSxiIGluIGNdIiwKQEAgLTEwNiw2ICsxMDYsMTUgQEAKICAgICAie3IgZm9yIGwgaW4geCBpZiBnfSIsCiAgICAgIyBzZXRjb21wIHdpdGggbmFrZWQgdHVwbGUKICAgICAie3IgZm9yIGwsbSBpbiB4fSIsCisgICAgIyBBc3luY0Z1bmN0aW9uRGVmCisgICAgImFzeW5jIGRlZiBmKCk6XG4gYXdhaXQgc29tZXRoaW5nKCkiLAorICAgICMgQXN5bmNGb3IKKyAgICAiYXN5bmMgZGVmIGYoKTpcbiBhc3luYyBmb3IgZSBpbiBpOiAxXG4gZWxzZTogMiIsCisgICAgIyBBc3luY1dpdGgKKyAgICAiYXN5bmMgZGVmIGYoKTpcbiBhc3luYyB3aXRoIGEgYXMgYjogMSIsCisgICAgIyBQRVAgNDQ4OiBBZGRpdGlvbmFsIFVucGFja2luZyBHZW5lcmFsaXphdGlvbnMKKyAgICAieyoqezE6Mn0sIDI6M30iLAorICAgICJ7KnsxLCAyfSwgM30iLAogXQogCiAjIFRoZXNlIGFyZSBjb21waWxlZCB0aHJvdWdoICJzaW5nbGUiCkBAIC0yMjUsOSArMjM0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlX3Rlc3RzLCBzaW5nbGVfcmVzdWx0cywgInNpbmdsZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2YWxfdGVzdHMsIGV2YWxfcmVzdWx0cywgImV2YWwiKSk6CiAgICAgICAgICAgICBmb3IgaSwgbyBpbiB6aXAoaW5wdXQsIG91dHB1dCk6Ci0gICAgICAgICAgICAgICAgYXN0X3RyZWUgPSBjb21waWxlKGksICI/Iiwga2luZCwgYXN0LlB5Q0ZfT05MWV9BU1QpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b190dXBsZShhc3RfdHJlZSksIG8pCi0gICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKGFzdF90cmVlLCAoMCwgMCkpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYWN0aW9uPSJwYXJzaW5nIiwgaW5wdXQ9aSk6CisgICAgICAgICAgICAgICAgICAgIGFzdF90cmVlID0gY29tcGlsZShpLCAiPyIsIGtpbmQsIGFzdC5QeUNGX09OTFlfQVNUKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvX3R1cGxlKGFzdF90cmVlKSwgbykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKGFzdF90cmVlLCAoMCwgMCkpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYWN0aW9uPSJjb21waWxpbmciLCBpbnB1dD1pKToKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZShhc3RfdHJlZSwgIj8iLCBraW5kKQogCiAgICAgZGVmIHRlc3Rfc2xpY2Uoc2VsZik6CiAgICAgICAgIHNsYyA9IGFzdC5wYXJzZSgieFs6Ol0iKS5ib2R5WzBdLnZhbHVlLnNsaWNlCkBAIC00MjcsMTcgKzQzOSwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKG5vZGUpLAogICAgICAgICAgICAgIk1vZHVsZShib2R5PVtFeHByKHZhbHVlPUNhbGwoZnVuYz1OYW1lKGlkPSdzcGFtJywgY3R4PUxvYWQoKSksICIKICAgICAgICAgICAgICJhcmdzPVtOYW1lKGlkPSdlZ2dzJywgY3R4PUxvYWQoKSksIFN0cihzPSdhbmQgY2hlZXNlJyldLCAiCi0gICAgICAgICAgICAia2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lKSldKSIKKyAgICAgICAgICAgICJrZXl3b3Jkcz1bXSkpXSkiCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZHVtcChub2RlLCBhbm5vdGF0ZV9maWVsZHM9RmFsc2UpLAogICAgICAgICAgICAgIk1vZHVsZShbRXhwcihDYWxsKE5hbWUoJ3NwYW0nLCBMb2FkKCkpLCBbTmFtZSgnZWdncycsIExvYWQoKSksICIKLSAgICAgICAgICAgICJTdHIoJ2FuZCBjaGVlc2UnKV0sIFtdLCBOb25lLCBOb25lKSldKSIKKyAgICAgICAgICAgICJTdHIoJ2FuZCBjaGVlc2UnKV0sIFtdKSldKSIKICAgICAgICAgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKG5vZGUsIGluY2x1ZGVfYXR0cmlidXRlcz1UcnVlKSwKICAgICAgICAgICAgICJNb2R1bGUoYm9keT1bRXhwcih2YWx1ZT1DYWxsKGZ1bmM9TmFtZShpZD0nc3BhbScsIGN0eD1Mb2FkKCksICIKICAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgYXJncz1bTmFtZShpZD0nZWdncycsIGN0eD1Mb2FkKCksICIKICAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD01KSwgU3RyKHM9J2FuZCBjaGVlc2UnLCBsaW5lbm89MSwgIgotICAgICAgICAgICAgImNvbF9vZmZzZXQ9MTEpXSwga2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCAiCisgICAgICAgICAgICAiY29sX29mZnNldD0xMSldLCBrZXl3b3Jkcz1bXSwgIgogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0pIgogICAgICAgICApCiAKQEAgLTQ1MywxNiArNDY1LDE2IEBACiAgICAgZGVmIHRlc3RfZml4X21pc3NpbmdfbG9jYXRpb25zKHNlbGYpOgogICAgICAgICBzcmMgPSBhc3QucGFyc2UoJ3dyaXRlKCJzcGFtIiknKQogICAgICAgICBzcmMuYm9keS5hcHBlbmQoYXN0LkV4cHIoYXN0LkNhbGwoYXN0Lk5hbWUoJ3NwYW0nLCBhc3QuTG9hZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthc3QuU3RyKCdlZ2dzJyldLCBbXSwgTm9uZSwgTm9uZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FzdC5TdHIoJ2VnZ3MnKV0sIFtdKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLCBhc3QuZml4X21pc3NpbmdfbG9jYXRpb25zKHNyYykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmR1bXAoc3JjLCBpbmNsdWRlX2F0dHJpYnV0ZXM9VHJ1ZSksCiAgICAgICAgICAgICAiTW9kdWxlKGJvZHk9W0V4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3dyaXRlJywgY3R4PUxvYWQoKSwgIgogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBhcmdzPVtTdHIocz0nc3BhbScsIGxpbmVubz0xLCAiCi0gICAgICAgICAgICAiY29sX29mZnNldD02KV0sIGtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgIgorICAgICAgICAgICAgImNvbF9vZmZzZXQ9NildLCBrZXl3b3Jkcz1bXSwgIgogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBsaW5lbm89MSwgY29sX29mZnNldD0wKSwgIgogICAgICAgICAgICAgIkV4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3NwYW0nLCBjdHg9TG9hZCgpLCBsaW5lbm89MSwgIgogICAgICAgICAgICAgImNvbF9vZmZzZXQ9MCksIGFyZ3M9W1N0cihzPSdlZ2dzJywgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldLCAiCi0gICAgICAgICAgICAia2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCBsaW5lbm89MSwgIgorICAgICAgICAgICAgImtleXdvcmRzPVtdLCBsaW5lbm89MSwgIgogICAgICAgICAgICAgImNvbF9vZmZzZXQ9MCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApXSkiCiAgICAgICAgICkKIApAQCAtNDg3LDggKzQ5OSw3IEBACiAgICAgICAgIG5vZGUgPSBhc3QucGFyc2UoJ2ZvbygpJywgbW9kZT0nZXZhbCcpCiAgICAgICAgIGQgPSBkaWN0KGFzdC5pdGVyX2ZpZWxkcyhub2RlLmJvZHkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKCdmdW5jJykuaWQsICdmb28nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsna2V5d29yZHMnOiBbXSwgJ2t3YXJncyc6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmdzJzogW10sICdzdGFyYXJncyc6IE5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsna2V5d29yZHMnOiBbXSwgJ2FyZ3MnOiBbXX0pCiAKICAgICBkZWYgdGVzdF9pdGVyX2NoaWxkX25vZGVzKHNlbGYpOgogICAgICAgICBub2RlID0gYXN0LnBhcnNlKCJzcGFtKDIzLCA0MiwgZWdncz0nbGVlaycpIiwgbW9kZT0nZXZhbCcpCkBAIC01MDYsNiArNTE3LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZ2V0X2RvY3N0cmluZyhub2RlLmJvZHlbMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lIG9uZVxubGluZSB0d28nKQogCisgICAgICAgIG5vZGUgPSBhc3QucGFyc2UoJ2FzeW5jIGRlZiBmb28oKTpcbiAgIiIic3BhbVxuICBoYW0iIiInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5nZXRfZG9jc3RyaW5nKG5vZGUuYm9keVswXSksICdzcGFtXG5oYW0nKQorCiAgICAgZGVmIHRlc3RfbGl0ZXJhbF9ldmFsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJ1sxLCAyLCAzXScpLCBbMSwgMiwgM10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgneyJmb28iOiA0Mn0nKSwgeyJmb28iOiA0Mn0pCkBAIC02MDQsOCArNjE4LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tfYXJndW1lbnRzKGZhYywgc2VsZi5zdG10KQogCiAgICAgZGVmIHRlc3RfY2xhc3NkZWYoc2VsZik6Ci0gICAgICAgIGRlZiBjbHMoYmFzZXM9Tm9uZSwga2V5d29yZHM9Tm9uZSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsCi0gICAgICAgICAgICAgICAgYm9keT1Ob25lLCBkZWNvcmF0b3JfbGlzdD1Ob25lKToKKyAgICAgICAgZGVmIGNscyhiYXNlcz1Ob25lLCBrZXl3b3Jkcz1Ob25lLCBib2R5PU5vbmUsIGRlY29yYXRvcl9saXN0PU5vbmUpOgogICAgICAgICAgICAgaWYgYmFzZXMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBiYXNlcyA9IFtdCiAgICAgICAgICAgICBpZiBrZXl3b3JkcyBpcyBOb25lOgpAQCAtNjE0LDE2ICs2MjcsMTIgQEAKICAgICAgICAgICAgICAgICBib2R5ID0gW2FzdC5QYXNzKCldCiAgICAgICAgICAgICBpZiBkZWNvcmF0b3JfbGlzdCBpcyBOb25lOgogICAgICAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gW10KLSAgICAgICAgICAgIHJldHVybiBhc3QuQ2xhc3NEZWYoIm15Y2xhc3MiLCBiYXNlcywga2V5d29yZHMsIHN0YXJhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZ3MsIGJvZHksIGRlY29yYXRvcl9saXN0KQorICAgICAgICAgICAgcmV0dXJuIGFzdC5DbGFzc0RlZigibXljbGFzcyIsIGJhc2VzLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSwgZGVjb3JhdG9yX2xpc3QpCiAgICAgICAgIHNlbGYuc3RtdChjbHMoYmFzZXM9W2FzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpXSksCiAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIHNlbGYuc3RtdChjbHMoa2V5d29yZHM9W2FzdC5rZXl3b3JkKCJ4IiwgYXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSkpXSksCiAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCi0gICAgICAgIHNlbGYuc3RtdChjbHMoc3RhcmFyZ3M9YXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSkpLAotICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQotICAgICAgICBzZWxmLnN0bXQoY2xzKGt3YXJncz1hc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSksCi0gICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIHNlbGYuc3RtdChjbHMoYm9keT1bXSksICJlbXB0eSBib2R5IG9uIENsYXNzRGVmIikKICAgICAgICAgc2VsZi5zdG10KGNscyhib2R5PVtOb25lXSksICJOb25lIGRpc2FsbG93ZWQiKQogICAgICAgICBzZWxmLnN0bXQoY2xzKGRlY29yYXRvcl9saXN0PVthc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKV0pLApAQCAtNzc3LDggKzc4Niw2IEBACiAgICAgZGVmIHRlc3RfZGljdChzZWxmKToKICAgICAgICAgZCA9IGFzdC5EaWN0KFtdLCBbYXN0Lk5hbWUoIngiLCBhc3QuTG9hZCgpKV0pCiAgICAgICAgIHNlbGYuZXhwcihkLCAic2FtZSBudW1iZXIgb2Yga2V5cyBhcyB2YWx1ZXMiKQotICAgICAgICBkID0gYXN0LkRpY3QoW05vbmVdLCBbYXN0Lk5hbWUoIngiLCBhc3QuTG9hZCgpKV0pCi0gICAgICAgIHNlbGYuZXhwcihkLCAiTm9uZSBkaXNhbGxvd2VkIikKICAgICAgICAgZCA9IGFzdC5EaWN0KFthc3QuTmFtZSgieCIsIGFzdC5Mb2FkKCkpXSwgW05vbmVdKQogICAgICAgICBzZWxmLmV4cHIoZCwgIk5vbmUgZGlzYWxsb3dlZCIpCiAKQEAgLTg1NCwyMCArODYxLDEyIEBACiAgICAgICAgIGZ1bmMgPSBhc3QuTmFtZSgieCIsIGFzdC5Mb2FkKCkpCiAgICAgICAgIGFyZ3MgPSBbYXN0Lk5hbWUoInkiLCBhc3QuTG9hZCgpKV0KICAgICAgICAga2V5d29yZHMgPSBbYXN0LmtleXdvcmQoInciLCBhc3QuTmFtZSgieiIsIGFzdC5Mb2FkKCkpKV0KLSAgICAgICAgc3RhcmFyZyA9IGFzdC5OYW1lKCJwIiwgYXN0LkxvYWQoKSkKLSAgICAgICAga3dhcmcgPSBhc3QuTmFtZSgicSIsIGFzdC5Mb2FkKCkpCi0gICAgICAgIGNhbGwgPSBhc3QuQ2FsbChhc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSwgYXJncywga2V5d29yZHMsIHN0YXJhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBrd2FyZykKKyAgICAgICAgY2FsbCA9IGFzdC5DYWxsKGFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpLCBhcmdzLCBrZXl3b3JkcykKICAgICAgICAgc2VsZi5leHByKGNhbGwsICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKLSAgICAgICAgY2FsbCA9IGFzdC5DYWxsKGZ1bmMsIFtOb25lXSwga2V5d29yZHMsIHN0YXJhcmcsIGt3YXJnKQorICAgICAgICBjYWxsID0gYXN0LkNhbGwoZnVuYywgW05vbmVdLCBrZXl3b3JkcykKICAgICAgICAgc2VsZi5leHByKGNhbGwsICJOb25lIGRpc2FsbG93ZWQiKQogICAgICAgICBiYWRfa2V5d29yZHMgPSBbYXN0LmtleXdvcmQoInciLCBhc3QuTmFtZSgieiIsIGFzdC5TdG9yZSgpKSldCi0gICAgICAgIGNhbGwgPSBhc3QuQ2FsbChmdW5jLCBhcmdzLCBiYWRfa2V5d29yZHMsIHN0YXJhcmcsIGt3YXJnKQotICAgICAgICBzZWxmLmV4cHIoY2FsbCwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQotICAgICAgICBjYWxsID0gYXN0LkNhbGwoZnVuYywgYXJncywga2V5d29yZHMsIGFzdC5OYW1lKCJ6IiwgYXN0LlN0b3JlKCkpLCBrd2FyZykKLSAgICAgICAgc2VsZi5leHByKGNhbGwsICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKLSAgICAgICAgY2FsbCA9IGFzdC5DYWxsKGZ1bmMsIGFyZ3MsIGtleXdvcmRzLCBzdGFyYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYXN0Lk5hbWUoInciLCBhc3QuU3RvcmUoKSkpCisgICAgICAgIGNhbGwgPSBhc3QuQ2FsbChmdW5jLCBhcmdzLCBiYWRfa2V5d29yZHMpCiAgICAgICAgIHNlbGYuZXhwcihjYWxsLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAKICAgICBkZWYgdGVzdF9udW0oc2VsZik6CkBAIC05NTcsOCArOTU2LDggQEAKICgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgKCdhcmcnLCAoMSwgNyksICdhcmdzJywgTm9uZSksIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCAoJ2FyZycsICgxLCA4KSwgJ2t3YXJncycsIE5vbmUpLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKSwgKCdhcmcnLCAoMSwgOSksICdiJywgTm9uZSksICgnYXJnJywgKDEsIDE0KSwgJ2MnLCBOb25lKSwgKCdhcmcnLCAoMSwgMjIpLCAnZCcsIE5vbmUpLCAoJ2FyZycsICgxLCAyOCksICdlJywgTm9uZSldLCAoJ2FyZycsICgxLCAzNSksICdhcmdzJywgTm9uZSksIFsoJ2FyZycsICgxLCA0MSksICdmJywgTm9uZSldLCBbKCdOdW0nLCAoMSwgNDMpLCA0MildLCAoJ2FyZycsICgxLCA0OSksICdrd2FyZ3MnLCBOb25lKSwgWygnTnVtJywgKDEsIDExKSwgMSksICgnTmFtZUNvbnN0YW50JywgKDEsIDE2KSwgTm9uZSksICgnTGlzdCcsICgxLCAyNCksIFtdLCAoJ0xvYWQnLCkpLCAoJ0RpY3QnLCAoMSwgMzApLCBbXSwgW10pXSksIFsoJ1Bhc3MnLCAoMSwgNTgpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbXSwgW10sIE5vbmUsIE5vbmUsIFsoJ1Bhc3MnLCAoMSwgOCkpXSwgW10pXSksCi0oJ01vZHVsZScsIFsoJ0NsYXNzRGVmJywgKDEsIDApLCAnQycsIFsoJ05hbWUnLCAoMSwgOCksICdvYmplY3QnLCAoJ0xvYWQnLCkpXSwgW10sIE5vbmUsIE5vbmUsIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbXSwgW10sIFsoJ1Bhc3MnLCAoMSwgOCkpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ0NsYXNzRGVmJywgKDEsIDApLCAnQycsIFsoJ05hbWUnLCAoMSwgOCksICdvYmplY3QnLCAoJ0xvYWQnLCkpXSwgW10sIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdKV0pLAogKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUmV0dXJuJywgKDEsIDgpLCAoJ051bScsICgxLCAxNSksIDEpKV0sIFtdLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdEZWxldGUnLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgNCksICd2JywgKCdEZWwnLCkpXSldKSwKICgnTW9kdWxlJywgWygnQXNzaWduJywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDApLCAndicsICgnU3RvcmUnLCkpXSwgKCdOdW0nLCAoMSwgNCksIDEpKV0pLApAQCAtOTY4LDcgKzk2Nyw3IEBACiAoJ01vZHVsZScsIFsoJ0lmJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMyksICd2JywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCA1KSldLCBbXSldKSwKICgnTW9kdWxlJywgWygnV2l0aCcsICgxLCAwKSwgWygnd2l0aGl0ZW0nLCAoJ05hbWUnLCAoMSwgNSksICd4JywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDEwKSwgJ3knLCAoJ1N0b3JlJywpKSldLCBbKCdQYXNzJywgKDEsIDEzKSldKV0pLAogKCdNb2R1bGUnLCBbKCdXaXRoJywgKDEsIDApLCBbKCd3aXRoaXRlbScsICgnTmFtZScsICgxLCA1KSwgJ3gnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTApLCAneScsICgnU3RvcmUnLCkpKSwgKCd3aXRoaXRlbScsICgnTmFtZScsICgxLCAxMyksICd6JywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDE4KSwgJ3EnLCAoJ1N0b3JlJywpKSldLCBbKCdQYXNzJywgKDEsIDIxKSldKV0pLAotKCdNb2R1bGUnLCBbKCdSYWlzZScsICgxLCAwKSwgKCdDYWxsJywgKDEsIDYpLCAoJ05hbWUnLCAoMSwgNiksICdFeGNlcHRpb24nLCAoJ0xvYWQnLCkpLCBbKCdTdHInLCAoMSwgMTYpLCAnc3RyaW5nJyldLCBbXSwgTm9uZSwgTm9uZSksIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ1JhaXNlJywgKDEsIDApLCAoJ0NhbGwnLCAoMSwgNiksICgnTmFtZScsICgxLCA2KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksIFsoJ1N0cicsICgxLCAxNiksICdzdHJpbmcnKV0sIFtdKSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnVHJ5JywgKDEsIDApLCBbKCdQYXNzJywgKDIsIDIpKV0sIFsoJ0V4Y2VwdEhhbmRsZXInLCAoMywgMCksICgnTmFtZScsICgzLCA3KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksIE5vbmUsIFsoJ1Bhc3MnLCAoNCwgMikpXSldLCBbXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ1RyeScsICgxLCAwKSwgWygnUGFzcycsICgyLCAyKSldLCBbXSwgW10sIFsoJ1Bhc3MnLCAoNCwgMikpXSldKSwKICgnTW9kdWxlJywgWygnQXNzZXJ0JywgKDEsIDApLCAoJ05hbWUnLCAoMSwgNyksICd2JywgKCdMb2FkJywpKSwgTm9uZSldKSwKQEAgLTk3NywxNyArOTc2LDIyIEBACiAoJ01vZHVsZScsIFsoJ0dsb2JhbCcsICgxLCAwKSwgWyd2J10pXSksCiAoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSldKSwKICgnTW9kdWxlJywgWygnUGFzcycsICgxLCAwKSldKSwKLSgnTW9kdWxlJywgWygnQnJlYWsnLCAoMSwgMCkpXSksCi0oJ01vZHVsZScsIFsoJ0NvbnRpbnVlJywgKDEsIDApKV0pLAorKCdNb2R1bGUnLCBbKCdGb3InLCAoMSwgMCksICgnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDkpLCAndicsICgnTG9hZCcsKSksIFsoJ0JyZWFrJywgKDEsIDExKSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnRm9yJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgNCksICd2JywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCA5KSwgJ3YnLCAoJ0xvYWQnLCkpLCBbKCdDb250aW51ZScsICgxLCAxMSkpXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ0ZvcicsICgxLCAwKSwgKCdUdXBsZScsICgxLCA0KSwgWygnTmFtZScsICgxLCA0KSwgJ2EnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDYpLCAnYicsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMSksICdjJywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTGlzdENvbXAnLCAoMSwgMSksICgnVHVwbGUnLCAoMSwgMiksIFsoJ05hbWUnLCAoMSwgMiksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSldLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdUdXBsZScsICgxLCAxMSksIFsoJ05hbWUnLCAoMSwgMTEpLCAnYScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTMpLCAnYicsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxOCksICdjJywgKCdMb2FkJywpKSwgW10pXSkpXSksCiAoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnR2VuZXJhdG9yRXhwJywgKDEsIDEpLCAoJ1R1cGxlJywgKDEsIDIpLCBbKCdOYW1lJywgKDEsIDIpLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2InLCAoJ0xvYWQnLCkpXSwgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnVHVwbGUnLCAoMSwgMTEpLCBbKCdOYW1lJywgKDEsIDExKSwgJ2EnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEzKSwgJ2InLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTgpLCAnYycsICgnTG9hZCcsKSksIFtdKV0pKV0pLAogKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0dlbmVyYXRvckV4cCcsICgxLCAxKSwgKCdUdXBsZScsICgxLCAyKSwgWygnTmFtZScsICgxLCAyKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdiJywgKCdMb2FkJywpKV0sICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDEsIDEyKSwgWygnTmFtZScsICgxLCAxMiksICdhJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxNCksICdiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDIwKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbXSldKSldKSwKICgnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdHZW5lcmF0b3JFeHAnLCAoMiwgNCksICgnVHVwbGUnLCAoMywgNCksIFsoJ05hbWUnLCAoMywgNCksICdBYScsICgnTG9hZCcsKSksICgnTmFtZScsICg1LCA3KSwgJ0JiJywgKCdMb2FkJywpKV0sICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDgsIDQpLCBbKCdOYW1lJywgKDgsIDQpLCAnQWEnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEwLCA0KSwgJ0JiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEwLCAxMCksICdDYycsICgnTG9hZCcsKSksIFtdKV0pKV0pLAotKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0RpY3RDb21wJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDUpLCAnYicsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgMTEpLCAndycsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTYpLCAneCcsICgnTG9hZCcsKSksIFtdKSwgKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDIyKSwgJ20nLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDI3KSwgJ3AnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDMyKSwgJ2cnLCAoJ0xvYWQnLCkpXSldKSldKSwKLSgnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdEaWN0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA1KSwgJ2InLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdUdXBsZScsICgxLCAxMSksIFsoJ05hbWUnLCAoMSwgMTEpLCAndicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTMpLCAndycsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxOCksICd4JywgKCdMb2FkJywpKSwgW10pXSkpXSksCi0oJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnU2V0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAncicsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdsJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICd4JywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdnJywgKCdMb2FkJywpKV0pXSkpXSksCi0oJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnU2V0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAncicsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDEsIDcpLCBbKCdOYW1lJywgKDEsIDcpLCAnbCcsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgOSksICdtJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDE0KSwgJ3gnLCAoJ0xvYWQnLCkpLCBbXSldKSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdEaWN0Q29tcCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA1KSwgJ2InLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDExKSwgJ3cnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDE2KSwgJ3gnLCAoJ0xvYWQnLCkpLCBbXSksICgnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCAyMiksICdtJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAyNyksICdwJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAzMiksICdnJywgKCdMb2FkJywpKV0pXSkpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnRGljdENvbXAnLCAoMSwgMCksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNSksICdiJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnVHVwbGUnLCAoMSwgMTEpLCBbKCdOYW1lJywgKDEsIDExKSwgJ3YnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEzKSwgJ3cnLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTgpLCAneCcsICgnTG9hZCcsKSksIFtdKV0pKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ1NldENvbXAnLCAoMSwgMCksICgnTmFtZScsICgxLCAxKSwgJ3InLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnbCcsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAneCcsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZycsICgnTG9hZCcsKSldKV0pKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ1NldENvbXAnLCAoMSwgMCksICgnTmFtZScsICgxLCAxKSwgJ3InLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdUdXBsZScsICgxLCA3KSwgWygnTmFtZScsICgxLCA3KSwgJ2wnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDkpLCAnbScsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxNCksICd4JywgKCdMb2FkJywpKSwgW10pXSkpXSksCisoJ01vZHVsZScsIFsoJ0FzeW5jRnVuY3Rpb25EZWYnLCAoMSwgNiksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ0V4cHInLCAoMiwgMSksICgnQXdhaXQnLCAoMiwgMSksICgnQ2FsbCcsICgyLCA3KSwgKCdOYW1lJywgKDIsIDcpLCAnc29tZXRoaW5nJywgKCdMb2FkJywpKSwgW10sIFtdKSkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0FzeW5jRnVuY3Rpb25EZWYnLCAoMSwgNiksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ0FzeW5jRm9yJywgKDIsIDcpLCAoJ05hbWUnLCAoMiwgMTEpLCAnZScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMiwgMTYpLCAnaScsICgnTG9hZCcsKSksIFsoJ0V4cHInLCAoMiwgMTkpLCAoJ051bScsICgyLCAxOSksIDEpKV0sIFsoJ0V4cHInLCAoMywgNyksICgnTnVtJywgKDMsIDcpLCAyKSldKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdBc3luY0Z1bmN0aW9uRGVmJywgKDEsIDYpLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdBc3luY1dpdGgnLCAoMiwgNyksIFsoJ3dpdGhpdGVtJywgKCdOYW1lJywgKDIsIDEyKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMiwgMTcpLCAnYicsICgnU3RvcmUnLCkpKV0sIFsoJ0V4cHInLCAoMiwgMjApLCAoJ051bScsICgyLCAyMCksIDEpKV0pXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnRGljdCcsICgxLCAwKSwgW05vbmUsICgnTnVtJywgKDEsIDEwKSwgMildLCBbKCdEaWN0JywgKDEsIDMpLCBbKCdOdW0nLCAoMSwgNCksIDEpXSwgWygnTnVtJywgKDEsIDYpLCAyKV0pLCAoJ051bScsICgxLCAxMiksIDMpXSkpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnU2V0JywgKDEsIDApLCBbKCdTdGFycmVkJywgKDEsIDEpLCAoJ1NldCcsICgxLCAyKSwgWygnTnVtJywgKDEsIDMpLCAxKSwgKCdOdW0nLCAoMSwgNiksIDIpXSksICgnTG9hZCcsKSksICgnTnVtJywgKDEsIDEwKSwgMyldKSldKSwKIF0KIHNpbmdsZV9yZXN1bHRzID0gWwogKCdJbnRlcmFjdGl2ZScsIFsoJ0V4cHInLCAoMSwgMCksICgnQmluT3AnLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDIpLCAyKSkpXSksCkBAIC0xMDA1LDcgKzEwMDksNyBAQAogKCdFeHByZXNzaW9uJywgKCdMaXN0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdiJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICdjJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdkJywgKCdMb2FkJywpKV0pXSkpLAogKCdFeHByZXNzaW9uJywgKCdHZW5lcmF0b3JFeHAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnYicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAnYycsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZCcsICgnTG9hZCcsKSldKV0pKSwKICgnRXhwcmVzc2lvbicsICgnQ29tcGFyZScsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpLCBbKCdMdCcsKSwgKCdMdCcsKV0sIFsoJ051bScsICgxLCA0KSwgMiksICgnTnVtJywgKDEsIDgpLCAzKV0pKSwKLSgnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnZicsICgnTG9hZCcsKSksIFsoJ051bScsICgxLCAyKSwgMSksICgnTnVtJywgKDEsIDQpLCAyKV0sIFsoJ2tleXdvcmQnLCAnYycsICgnTnVtJywgKDEsIDgpLCAzKSldLCAoJ05hbWUnLCAoMSwgMTEpLCAnZCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxNSksICdlJywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdmJywgKCdMb2FkJywpKSwgWygnTnVtJywgKDEsIDIpLCAxKSwgKCdOdW0nLCAoMSwgNCksIDIpLCAoJ1N0YXJyZWQnLCAoMSwgMTApLCAoJ05hbWUnLCAoMSwgMTEpLCAnZCcsICgnTG9hZCcsKSksICgnTG9hZCcsKSldLCBbKCdrZXl3b3JkJywgJ2MnLCAoJ051bScsICgxLCA4KSwgMykpLCAoJ2tleXdvcmQnLCBOb25lLCAoJ05hbWUnLCAoMSwgMTUpLCAnZScsICgnTG9hZCcsKSkpXSkpLAogKCdFeHByZXNzaW9uJywgKCdOdW0nLCAoMSwgMCksIDEwKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1N0cicsICgxLCAwKSwgJ3N0cmluZycpKSwKICgnRXhwcmVzc2lvbicsICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpKSwKQEAgLTEwMTYsNiArMTAyMCw2IEBACiAoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMCksIDEpLCAoJ051bScsICgxLCAyKSwgMiksICgnTnVtJywgKDEsIDQpLCAzKV0sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAxKSwgWygnTnVtJywgKDEsIDEpLCAxKSwgKCdOdW0nLCAoMSwgMyksIDIpLCAoJ051bScsICgxLCA1KSwgMyldLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMCksIFtdLCAoJ0xvYWQnLCkpKSwKLSgnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgJ2MnLCAoJ0xvYWQnLCkpLCAnZCcsICgnTG9hZCcsKSksIFsoJ1N1YnNjcmlwdCcsICgxLCA4KSwgKCdBdHRyaWJ1dGUnLCAoMSwgOCksICgnTmFtZScsICgxLCA4KSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ051bScsICgxLCAxMiksIDEpLCAoJ051bScsICgxLCAxNCksIDIpLCBOb25lKSwgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lKSksCisoJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICdjJywgKCdMb2FkJywpKSwgJ2QnLCAoJ0xvYWQnLCkpLCBbKCdTdWJzY3JpcHQnLCAoMSwgOCksICgnQXR0cmlidXRlJywgKDEsIDgpLCAoJ05hbWUnLCAoMSwgOCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOdW0nLCAoMSwgMTIpLCAxKSwgKCdOdW0nLCAoMSwgMTQpLCAyKSwgTm9uZSksICgnTG9hZCcsKSldLCBbXSkpLAogXQogbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQppbmRleCAyZGM5ZDBjLi4zYTMzZmM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKQEAgLTEyLDYgKzEyLDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0Lm1vY2sKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC0zOCw3ICszOSw3IEBACiAgICAgICAgICAgICBzZWxmLnN0YXJ0X3Jlc2VuZF9ldmVudCA9IE5vbmUKIAogICAgICAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5zb2NrLmxpc3RlbigxKQorICAgICAgICAgICAgc2VsZi5zb2NrLmxpc3RlbigpCiAgICAgICAgICAgICBzZWxmLmV2ZW50LnNldCgpCiAgICAgICAgICAgICBjb25uLCBjbGllbnQgPSBzZWxmLnNvY2suYWNjZXB0KCkKICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gYiIiCkBAIC0yOTgsNyArMjk5LDEwIEBACiAKIGNsYXNzIFRlc3RGaWZvKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgZiA9IGFzeW5jaGF0LmZpZm8oKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKSBhcyBjbToKKyAgICAgICAgICAgIGYgPSBhc3luY2hhdC5maWZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20ud2FybmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpZm8gY2xhc3Mgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjYiKQogICAgICAgICBmLnB1c2goNykKICAgICAgICAgZi5wdXNoKGInYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYpLCAyKQpAQCAtMzEzLDcgKzMxNywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucG9wKCksICgwLCBOb25lKSkKIAogICAgIGRlZiB0ZXN0X2dpdmVuX2xpc3Qoc2VsZik6Ci0gICAgICAgIGYgPSBhc3luY2hhdC5maWZvKFtiJ3gnLCAxNywgM10pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpIGFzIGNtOgorICAgICAgICAgICAgZiA9IGFzeW5jaGF0LmZpZm8oW2IneCcsIDE3LCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20ud2FybmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpZm8gY2xhc3Mgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBvcCgpLCAoMSwgYid4JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDEsIDE3KSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Jhc2VfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkKaW5kZXggZDY2MDcxNy4uMjA2ZWJjNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogICAgIG1fc29ja2V0LnNvY2tldCA9IG1vY2suTWFnaWNNb2NrKCkKICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8uX2lzX2Nvcm91dGluZSA9IEZhbHNlCiAKICAgICByZXR1cm4gbV9zb2NrZXQKIApAQCAtNTYsMTQgKzU3LDYgQEAKIAogY2xhc3MgQmFzZUV2ZW50VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKCkuc2V0VXAoKQotICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8uY2FjaGVfY2xlYXIoKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8uY2FjaGVfY2xlYXIoKQotICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKLQogICAgIGRlZiB0ZXN0X2lwYWRkcl9pbmZvKHNlbGYpOgogICAgICAgICBVTlNQRUMgPSBzb2NrZXQuQUZfVU5TUEVDCiAgICAgICAgIElORVQgPSBzb2NrZXQuQUZfSU5FVApAQCAtNzksNiArNzIsMTAgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgKElORVQsIFNUUkVBTSwgVENQLCAnJywgKCcxLjIuMy40JywgMSkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKGInMS4yLjMuNCcsIDEsIElORVQsIFNUUkVBTSwgVENQKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQsIFNUUkVBTSwgVENQLCAnJywgKCcxLjIuMy40JywgMSkpLAogICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgMSwgVU5TUEVDLCBTVFJFQU0sIFRDUCkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTExNiwzOCArMTEzLDYyIEBACiAgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzo6MycsIDEsIElORVQsIFNUUkVBTSwgVENQKSkKIAogICAgICAgICAjIElQdjYgYWRkcmVzcyB3aXRoIHpvbmUgaW5kZXguCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAoSU5FVDYsIFNUUkVBTSwgVENQLCAnJywgKCc6OjMlbG8wJywgMSkpLAorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSgKICAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnOjozJWxvMCcsIDEsIElORVQ2LCBTVFJFQU0sIFRDUCkpCiAKKyAgICBkZWYgdGVzdF9wb3J0X3BhcmFtZXRlcl90eXBlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG9ic2N1cmUga2luZHMgb2YgYXJndW1lbnRzIGZvciAicG9ydCIuCisgICAgICAgIElORVQgPSBzb2NrZXQuQUZfSU5FVAorICAgICAgICBTVFJFQU0gPSBzb2NrZXQuU09DS19TVFJFQU0KKyAgICAgICAgVENQID0gc29ja2V0LklQUFJPVE9fVENQCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVULCBTVFJFQU0sIFRDUCwgJycsICgnMS4yLjMuNCcsIDApKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsIE5vbmUsIElORVQsIFNUUkVBTSwgVENQKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQsIFNUUkVBTSwgVENQLCAnJywgKCcxLjIuMy40JywgMCkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgYicnLCBJTkVULCBTVFJFQU0sIFRDUCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVULCBTVFJFQU0sIFRDUCwgJycsICgnMS4yLjMuNCcsIDApKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsICcnLCBJTkVULCBTVFJFQU0sIFRDUCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVULCBTVFJFQU0sIFRDUCwgJycsICgnMS4yLjMuNCcsIDEpKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsICcxJywgSU5FVCwgU1RSRUFNLCBUQ1ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoSU5FVCwgU1RSRUFNLCBUQ1AsICcnLCAoJzEuMi4zLjQnLCAxKSksCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzEuMi4zLjQnLCBiJzEnLCBJTkVULCBTVFJFQU0sIFRDUCkpCisKKyAgICBkZWYgdGVzdF9nZXRhZGRyaW5mb19zZXJ2bmFtZShzZWxmKToKKyAgICAgICAgSU5FVCA9IHNvY2tldC5BRl9JTkVUCisgICAgICAgIFNUUkVBTSA9IHNvY2tldC5TT0NLX1NUUkVBTQorICAgICAgICBUQ1AgPSBzb2NrZXQuSVBQUk9UT19UQ1AKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQsIFNUUkVBTSwgVENQLCAnJywgKCcxLjIuMy40JywgODApKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsICdodHRwJywgSU5FVCwgU1RSRUFNLCBUQ1ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoSU5FVCwgU1RSRUFNLCBUQ1AsICcnLCAoJzEuMi4zLjQnLCA4MCkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgYidodHRwJywgSU5FVCwgU1RSRUFNLCBUQ1ApKQorCisgICAgICAgICMgUmFpc2VzICJzZXJ2aWNlL3Byb3RvIG5vdCBmb3VuZCIuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzEuMi4zLjQnLCAnbm9uc2Vuc2UnLCBJTkVULCBTVFJFQU0sIFRDUCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgJ25vbnNlbnNlJywgSU5FVCwgU1RSRUFNLCBUQ1ApCisKICAgICBAcGF0Y2hfc29ja2V0CiAgICAgZGVmIHRlc3RfaXBhZGRyX2luZm9fbm9faW5ldF9wdG9uKHNlbGYsIG1fc29ja2V0KToKICAgICAgICAgZGVsIG1fc29ja2V0LmluZXRfcHRvbgotICAgICAgICBzZWxmLnRlc3RfaXBhZGRyX2luZm8oKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzZWxmKToKLSAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCi0gICAgICAgIHdpdGggc29jazoKLSAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssICgnMS4yLjMuNCcsIDEpKQotCi0gICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikKLSAgICAgICAgd2l0aCBzb2NrOgotICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgKCc6OjMnLCAxKSkKLSAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssICgnOjozJWxvMCcsIDEpKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCAoJ2ZvbycsIDEpKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfcmVzb2x2ZWRfc29ja190eXBlKHNlbGYpOgotICAgICAgICAjIEVuc3VyZSB3ZSBpZ25vcmUgZXh0cmEgZmxhZ3MgaW4gc29jay50eXBlLgotICAgICAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfTk9OQkxPQ0snKToKLSAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfTk9OQkxPQ0spCi0gICAgICAgICAgICB3aXRoIHNvY2s6Ci0gICAgICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgKCcxLjIuMy40JywgMSkpCi0KLSAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKLSAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQykKLSAgICAgICAgICAgIHdpdGggc29jazoKLSAgICAgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCAoJzEuMi4zLjQnLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fVENQKSkKIAogCiBjbGFzcyBCYXNlRXZlbnRMb29wVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CkBAIC02MjgsNiArNjQ5LDcgQEAKICAgICAgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhsYW1iZGEgKmFyZ3M6IHNlbGYubG9vcC5zdG9wKCkpCiAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQogICAgICAgICAgICAgZnV0ID0gTm9uZSAjIFRyaWdnZXIgRnV0dXJlLl9fZGVsX18gb3IgZnV0dXJlcy5fVHJhY2ViYWNrTG9nZ2VyCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICAgICAgaWYgUFkzNDoKICAgICAgICAgICAgICAgICAjIEZ1dHVyZS5fX2RlbF9fIGluIFB5dGhvbiAzLjQgbG9ncyBlcnJvciB3aXRoCiAgICAgICAgICAgICAgICAgIyBhbiBhY3R1YWwgZXhjZXB0aW9uIGNvbnRleHQKQEAgLTY1Nyw4ICs2NzksMTAgQEAKICAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQogICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKIAorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuZ2V0X2V4Y2VwdGlvbl9oYW5kbGVyKCkpCiAgICAgICAgIG1vY2tfaGFuZGxlciA9IG1vY2suTW9jaygpCiAgICAgICAgIHNlbGYubG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIobW9ja19oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9vcC5nZXRfZXhjZXB0aW9uX2hhbmRsZXIoKSwgbW9ja19oYW5kbGVyKQogICAgICAgICBoYW5kbGUgPSBydW5fbG9vcCgpCiAgICAgICAgIG1vY2tfaGFuZGxlci5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5sb29wLCB7CiAgICAgICAgICAgICAnZXhjZXB0aW9uJzogTU9DS19BTlksCkBAIC05OTMsMTEgKzEwMTcsNiBAQAogICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKICAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICMgQ2xlYXIgbW9ja2VkIGNvbnN0YW50cyBsaWtlIEFGX0lORVQgZnJvbSB0aGUgY2FjaGUuCi0gICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mby5jYWNoZV9jbGVhcigpCi0gICAgICAgIHN1cGVyKCkudGVhckRvd24oKQotCiAgICAgQHBhdGNoX3NvY2tldAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX211bHRpcGxlX2Vycm9ycyhzZWxmLCBtX3NvY2tldCk6CiAKQEAgLTExNDYsMTAgKzExNjUsNyBAQAogICAgICAgICBpZiBub3QgYWxsb3dfaW5ldF9wdG9uOgogICAgICAgICAgICAgZGVsIG1fc29ja2V0LmluZXRfcHRvbgogCi0gICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ3Nob3VsZCBub3QgaGF2ZSBjYWxsZWQgZ2V0YWRkcmluZm8nKQotCi0gICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm8KKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8gPSBzb2NrZXQuZ2V0YWRkcmluZm8KICAgICAgICAgc29jayA9IG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUKIAogICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IG1vY2suTW9jaygpCkBAIC0xMTYxLDIxICsxMTc3LDI2IEBACiAgICAgICAgIHQsIHAgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2suY29ubmVjdC5hc3NlcnRfY2FsbGVkX3dpdGgoKCcxLjIuMy40JywgODApKQotICAgICAgICAgICAgbV9zb2NrZXQuc29ja2V0LmFzc2VydF9jYWxsZWRfd2l0aChmYW1pbHk9bV9zb2NrZXQuQUZfSU5FVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89bV9zb2NrZXQuSVBQUk9UT19UQ1AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9bV9zb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBfLCBrd2FyZ3MgPSBtX3NvY2tldC5zb2NrZXQuY2FsbF9hcmdzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGt3YXJnc1snZmFtaWx5J10sIG1fc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGt3YXJnc1sndHlwZSddLCBtX3NvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHQuY2xvc2UoKQogICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIGFsbG93IHRyYW5zcG9ydCB0byBjbG9zZQogCiAgICAgICAgIHNvY2suZmFtaWx5ID0gc29ja2V0LkFGX0lORVQ2Ci0gICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oYXN5bmNpby5Qcm90b2NvbCwgJzo6MicsIDgwKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKGFzeW5jaW8uUHJvdG9jb2wsICc6OjEnLCA4MCkKICAgICAgICAgdCwgcCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc29jay5jb25uZWN0LmFzc2VydF9jYWxsZWRfd2l0aCgoJzo6MicsIDgwKSkKLSAgICAgICAgICAgIG1fc29ja2V0LnNvY2tldC5hc3NlcnRfY2FsbGVkX3dpdGgoZmFtaWx5PW1fc29ja2V0LkFGX0lORVQ2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1tX3NvY2tldC5JUFBST1RPX1RDUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1tX3NvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgICMgV2l0aG91dCBpbmV0X3B0b24gd2UgdXNlIGdldGFkZHJpbmZvLCB3aGljaCB0cmFuc2Zvcm1zICgnOjoxJywgODApCisgICAgICAgICAgICAjIHRvICgnOjoxJywgODAsIDAsIDApLiBUaGUgbGFzdCAwcyBhcmUgZmxvdyBpbmZvLCBzY29wZSBpZC4KKyAgICAgICAgICAgIFthZGRyZXNzXSA9IHNvY2suY29ubmVjdC5jYWxsX2FyZ3NbMF0KKyAgICAgICAgICAgIGhvc3QsIHBvcnQgPSBhZGRyZXNzWzoyXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChob3N0LCByJzo6KDBcLikqMScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQsIDgwKQorICAgICAgICAgICAgXywga3dhcmdzID0gbV9zb2NrZXQuc29ja2V0LmNhbGxfYXJncworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrd2FyZ3NbJ2ZhbWlseSddLCBtX3NvY2tldC5BRl9JTkVUNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3dhcmdzWyd0eXBlJ10sIG1fc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdC5jbG9zZSgpCiAgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgYWxsb3cgdHJhbnNwb3J0IHRvIGNsb3NlCkBAIC0xMjA3LDYgKzEyMjgsMjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCiAgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQogCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2JsdWV0b290aChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNzEzNiwgZmFsbGJhY2sgdG8gZ2V0YWRkcmluZm8gd2hlbgorICAgICAgICAjIHdlIGNhbid0IHJlY29nbml6ZSBhbiBhZGRyZXNzIGlzIHJlc29sdmVkLCBlLmcuIGEgQmx1ZXRvb3RoIGFkZHJlc3MuCisgICAgICAgIGFkZHIgPSAoJzAwOjAxOjAyOjAzOjA0OjA1JywgMSkKKworICAgICAgICBkZWYgZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgYXNzZXJ0IChob3N0LCBwb3J0KSA9PSBhZGRyCisgICAgICAgICAgICByZXR1cm4gWyg5OTksIDEsIDk5OSwgJycsIChhZGRyLCAxKSldCisKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mbworICAgICAgICBzb2NrID0gbV9zb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcikKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCiAgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fc3NsX3NlcnZlcl9ob3N0bmFtZV9kZWZhdWx0KHNlbGYpOgogICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBtb2NrLk1vY2soKQogCkBAIC0xMzIwLDcgKzEzNTYsNyBAQAogICAgICAgICBnZXRhZGRyaW5mbyA9IHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IG1vY2suTW9jaygpCiAgICAgICAgIGdldGFkZHJpbmZvLnJldHVybl92YWx1ZSA9IFtdCiAKLSAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICdweXRob24ub3JnJywgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZikKIAogICAgIEBwYXRjaF9zb2NrZXQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQppbmRleCBlNzJiODZlLi41YzE4NmNlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZXZlbnRzLnB5CkBAIC03NDQsMzkgKzc0NCwxMjEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQUREUklOVVNFKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdHIoaHR0cGQuYWRkcmVzcyksIGNtLmV4Y2VwdGlvbi5zdHJlcnJvcikKIAorICAgIGRlZiB0ZXN0X2Nvbm5lY3RfYWNjZXB0ZWRfc29ja2V0KHNlbGYsIHNlcnZlcl9zc2w9Tm9uZSwgY2xpZW50X3NzbD1Ob25lKToKKyAgICAgICAgbG9vcCA9IHNlbGYubG9vcAorCisgICAgICAgIGNsYXNzIE15UHJvdG8oTXlCYXNlUHJvdG8pOgorCisgICAgICAgICAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICAgICAgICAgIGxvb3AuY2FsbF9zb29uKGxvb3Auc3RvcCkKKworICAgICAgICAgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQud3JpdGUoZXhwZWN0ZWRfcmVzcG9uc2UpCisKKyAgICAgICAgbHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgbHNvY2suYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBsc29jay5saXN0ZW4oMSkKKyAgICAgICAgYWRkciA9IGxzb2NrLmdldHNvY2tuYW1lKCkKKworICAgICAgICBtZXNzYWdlID0gYid0ZXN0IGRhdGEnCisgICAgICAgIHJlcG9uc2UgPSBOb25lCisgICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gYidyb2dlcicKKworICAgICAgICBkZWYgY2xpZW50KCk6CisgICAgICAgICAgICBnbG9iYWwgcmVzcG9uc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIGlmIGNsaWVudF9zc2wgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNzb2NrID0gY2xpZW50X3NzbC53cmFwX3NvY2tldChjc29jaykKKyAgICAgICAgICAgICAgICBjc29jay5jb25uZWN0KGFkZHIpCisgICAgICAgICAgICAgICAgY3NvY2suc2VuZGFsbChtZXNzYWdlKQorICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gY3NvY2sucmVjdig5OSkKKyAgICAgICAgICAgICAgICBjc29jay5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwcmludCgKKyAgICAgICAgICAgICAgICAgICAgIkZhaWx1cmUgaW4gY2xpZW50IHRocmVhZCBpbiB0ZXN0X2Nvbm5lY3RfYWNjZXB0ZWRfc29ja2V0IiwKKyAgICAgICAgICAgICAgICAgICAgZXhjKQorCisgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNsaWVudCwgZGFlbW9uPVRydWUpCisgICAgICAgIHRocmVhZC5zdGFydCgpCisKKyAgICAgICAgY29ubiwgXyA9IGxzb2NrLmFjY2VwdCgpCisgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPWxvb3ApCisgICAgICAgIHByb3RvLmxvb3AgPSBsb29wCisgICAgICAgIGYgPSBsb29wLmNyZWF0ZV90YXNrKAorICAgICAgICAgICAgbG9vcC5jb25uZWN0X2FjY2VwdGVkX3NvY2tldCgKKyAgICAgICAgICAgICAgICAobGFtYmRhIDogcHJvdG8pLCBjb25uLCBzc2w9c2VydmVyX3NzbCkpCisgICAgICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgbHNvY2suY2xvc2UoKQorCisgICAgICAgIHRocmVhZC5qb2luKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhyZWFkLmlzX2FsaXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uc3RhdGUsICdDTE9TRUQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvLm5ieXRlcywgbGVuKG1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLCBleHBlY3RlZF9yZXNwb25zZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9zc2xfY29ubmVjdF9hY2NlcHRlZF9zb2NrZXQoc2VsZik6CisgICAgICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQKKyAgICAgICAgICAgIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgNSkgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKHNlbGYubG9vcCwgcHJvYWN0b3JfZXZlbnRzLkJhc2VQcm9hY3RvckV2ZW50TG9vcCkKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgICAgICAgICAnU1NMIG5vdCBzdXBwb3J0ZWQgd2l0aCBwcm9hY3RvciBldmVudCBsb29wcyBiZWZvcmUgUHl0aG9uIDMuNScKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oT05MWUNFUlQsIE9OTFlLRVkpCisgICAgICAgIGlmIGhhc2F0dHIoc2VydmVyX2NvbnRleHQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBGYWxzZQorICAgICAgICBzZXJ2ZXJfY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX05PTkUKKworICAgICAgICBjbGllbnRfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIGlmIGhhc2F0dHIoc2VydmVyX2NvbnRleHQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBGYWxzZQorICAgICAgICBjbGllbnRfY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX05PTkUKKworICAgICAgICBzZWxmLnRlc3RfY29ubmVjdF9hY2NlcHRlZF9zb2NrZXQoc2VydmVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0KQorCiAgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKICAgICBkZWYgY3JlYXRlX3NlcnZlcl9tdWx0aXBsZV9ob3N0cyhzZWxmLCBmYW1pbHksIGhvc3RzLCBtb2NrX3NvY2spOgogICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKICAgICAgICAgZGVmIGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsICphcmdzLCAqKmt3KToKICAgICAgICAgICAgIGlmIGZhbWlseSA9PSBzb2NrZXQuQUZfSU5FVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gW1tmYW1pbHksIHNvY2tldC5TT0NLX1NUUkVBTSwgNiwgJycsIChob3N0LCBwb3J0KV1dCisgICAgICAgICAgICAgICAgcmV0dXJuIFsoZmFtaWx5LCBzb2NrZXQuU09DS19TVFJFQU0sIDYsICcnLCAoaG9zdCwgcG9ydCkpXQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gW1tmYW1pbHksIHNvY2tldC5TT0NLX1NUUkVBTSwgNiwgJycsIChob3N0LCBwb3J0LCAwLCAwKV1dCisgICAgICAgICAgICAgICAgcmV0dXJuIFsoZmFtaWx5LCBzb2NrZXQuU09DS19TVFJFQU0sIDYsICcnLCAoaG9zdCwgcG9ydCwgMCwgMCkpXQogCiAgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgogICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCiAKKyAgICAgICAgdW5pcXVlX2hvc3RzID0gc2V0KGhvc3RzKQorCiAgICAgICAgIGlmIGZhbWlseSA9PSBzb2NrZXQuQUZfSU5FVDoKLSAgICAgICAgICAgIG1vY2tfc29jay5zb2NrZXQoKS5nZXRzb2NrYnluYW1lLnNpZGVfZWZmZWN0ID0gWyhob3N0LCA4MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBob3N0IGluIGhvc3RzXQorICAgICAgICAgICAgbW9ja19zb2NrLnNvY2tldCgpLmdldHNvY2tieW5hbWUuc2lkZV9lZmZlY3QgPSBbCisgICAgICAgICAgICAgICAgKGhvc3QsIDgwKSBmb3IgaG9zdCBpbiB1bmlxdWVfaG9zdHNdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2NrX3NvY2suc29ja2V0KCkuZ2V0c29ja2J5bmFtZS5zaWRlX2VmZmVjdCA9IFsoaG9zdCwgODAsIDAsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaG9zdCBpbiBob3N0c10KKyAgICAgICAgICAgIG1vY2tfc29jay5zb2NrZXQoKS5nZXRzb2NrYnluYW1lLnNpZGVfZWZmZWN0ID0gWworICAgICAgICAgICAgICAgIChob3N0LCA4MCwgMCwgMCkgZm9yIGhvc3QgaW4gdW5pcXVlX2hvc3RzXQogICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCiAgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyA9IG1vY2suTW9jaygpCiAgICAgICAgIHNlbGYubG9vcC5fc3RvcF9zZXJ2aW5nID0gbW9jay5Nb2NrKCkKICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKGxhbWJkYTogTXlQcm90byhzZWxmLmxvb3ApLCBob3N0cywgODApCiAgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlcnZlci5jbG9zZSkKLSAgICAgICAgc2VydmVyX2hvc3RzID0gW3NvY2suZ2V0c29ja2J5bmFtZSgpWzBdIGZvciBzb2NrIGluIHNlcnZlci5zb2NrZXRzXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl9ob3N0cywgaG9zdHMpCisgICAgICAgIHNlcnZlcl9ob3N0cyA9IHtzb2NrLmdldHNvY2tieW5hbWUoKVswXSBmb3Igc29jayBpbiBzZXJ2ZXIuc29ja2V0c30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfaG9zdHMsIHVuaXF1ZV9ob3N0cykKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbXVsdGlwbGVfaG9zdHNfaXB2NChzZWxmKToKICAgICAgICAgc2VsZi5jcmVhdGVfc2VydmVyX211bHRpcGxlX2hvc3RzKHNvY2tldC5BRl9JTkVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycxLjIuMy40JywgJzUuNi43LjgnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnMS4yLjMuNCcsICc1LjYuNy44JywgJzEuMi4zLjQnXSkKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbXVsdGlwbGVfaG9zdHNfaXB2NihzZWxmKToKLSAgICAgICAgc2VsZi5jcmVhdGVfc2VydmVyX211bHRpcGxlX2hvc3RzKHNvY2tldC5BRl9JTkVUNiwgWyc6OjEnLCAnOjoyJ10pCisgICAgICAgIHNlbGYuY3JlYXRlX3NlcnZlcl9tdWx0aXBsZV9ob3N0cyhzb2NrZXQuQUZfSU5FVDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJzo6MScsICc6OjInLCAnOjoxJ10pCiAKICAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyKHNlbGYpOgogICAgICAgICBwcm90byA9IE15UHJvdG8oc2VsZi5sb29wKQpAQCAtOTk5LDcgKzEwODEsNyBAQAogICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYubG9vcCwgJ2NhbGxfZXhjZXB0aW9uX2hhbmRsZXInKToKICAgICAgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoP2kpY2VydGlmaWNhdGUudmVyaWZ5LmZhaWxlZCAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyg/aSljZXJ0aWZpY2F0ZS52ZXJpZnkuZmFpbGVkJyk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9jKQogCiAgICAgICAgICAgICAjIGV4ZWN1dGUgdGhlIGxvb3AgdG8gbG9nIHRoZSBjb25uZWN0aW9uIGVycm9yCkBAIC0xMDMzLDcgKzExMTUsNyBAQAogICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYubG9vcCwgJ2NhbGxfZXhjZXB0aW9uX2hhbmRsZXInKToKICAgICAgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoP2kpY2VydGlmaWNhdGUudmVyaWZ5LmZhaWxlZCAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyg/aSljZXJ0aWZpY2F0ZS52ZXJpZnkuZmFpbGVkJyk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9jKQogCiAgICAgICAgICAgICAjIGV4ZWN1dGUgdGhlIGxvb3AgdG8gbG9nIHRoZSBjb25uZWN0aW9uIGVycm9yCkBAIC0xMzY1LDYgKzE0NDcsNDEgQEAKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAogICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF91bmNsb3NlZF9waXBlX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgcmVwcm9kdWNlcyB0aGUgaXNzdWUgIzMxNCBvbiBHaXRIdWIKKyAgICAgICAgbG9vcCA9IHNlbGYuY3JlYXRlX2V2ZW50X2xvb3AoKQorICAgICAgICByZWFkX3Byb3RvID0gTXlSZWFkUGlwZVByb3RvKGxvb3A9bG9vcCkKKyAgICAgICAgd3JpdGVfcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9bG9vcCkKKworICAgICAgICBycGlwZSwgd3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgcnBpcGVvYmogPSBpby5vcGVuKHJwaXBlLCAncmInLCAxMDI0KQorICAgICAgICB3cGlwZW9iaiA9IGlvLm9wZW4od3BpcGUsICd3JywgMTAyNCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIHJlYWRfdHJhbnNwb3J0LCBfID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogcmVhZF9wcm90bywgcnBpcGVvYmopCisgICAgICAgICAgICB3cml0ZV90cmFuc3BvcnQsIF8gPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF93cml0ZV9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogd3JpdGVfcHJvdG8sIHdwaXBlb2JqKQorICAgICAgICAgICAgcmV0dXJuIHJlYWRfdHJhbnNwb3J0LCB3cml0ZV90cmFuc3BvcnQKKworICAgICAgICAjIFJ1biBhbmQgY2xvc2UgdGhlIGxvb3Agd2l0aG91dCBjbG9zaW5nIHRoZSB0cmFuc3BvcnRzCisgICAgICAgIHJlYWRfdHJhbnNwb3J0LCB3cml0ZV90cmFuc3BvcnQgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgICAgICMgVGhlc2UgJ3JlcHInIGNhbGxzIHVzZWQgdG8gcmFpc2UgYW4gQXR0cmlidXRlRXJyb3IKKyAgICAgICAgIyBTZWUgSXNzdWUgIzMxNCBvbiBHaXRIdWIKKyAgICAgICAgc2VsZi5hc3NlcnRJbignb3BlbicsIHJlcHIocmVhZF90cmFuc3BvcnQpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdvcGVuJywgcmVwcih3cml0ZV90cmFuc3BvcnQpKQorCisgICAgICAgICMgQ2xlYW4gdXAgKGF2b2lkIFJlc291cmNlV2FybmluZykKKyAgICAgICAgcnBpcGVvYmouY2xvc2UoKQorICAgICAgICB3cGlwZW9iai5jbG9zZSgpCisgICAgICAgIHJlYWRfdHJhbnNwb3J0Ll9waXBlID0gTm9uZQorICAgICAgICB3cml0ZV90cmFuc3BvcnQuX3BpcGUgPSBOb25lCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCiAgICAgIyBzZWxlY3QsIHBvbGwgYW5kIGtxdWV1ZSBkb24ndCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIChQVFkpIG9uIE1hYyBPUyBYCiAgICAgIyBvbGRlciB0aGFuIDEwLjYgKFNub3cgTGVvcGFyZCkKICAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA2KQpAQCAtMTU3MiwyNSArMTY4OSw2IEBACiAgICAgICAgICAgICB7J2Nsb2NrX3Jlc29sdXRpb24nOiBzZWxmLmxvb3AuX2Nsb2NrX3Jlc29sdXRpb24sCiAgICAgICAgICAgICAgJ3NlbGVjdG9yJzogc2VsZi5sb29wLl9zZWxlY3Rvci5fX2NsYXNzX18uX19uYW1lX199KQogCi0gICAgZGVmIHRlc3Rfc29ja19jb25uZWN0X2FkZHJlc3Moc2VsZik6Ci0gICAgICAgIGFkZHJlc3NlcyA9IFsoc29ja2V0LkFGX0lORVQsICgnd3d3LnB5dGhvbi5vcmcnLCA4MCkpXQotICAgICAgICBpZiBzdXBwb3J0LklQVjZfRU5BQkxFRDoKLSAgICAgICAgICAgIGFkZHJlc3Nlcy5leHRlbmQoKAotICAgICAgICAgICAgICAgIChzb2NrZXQuQUZfSU5FVDYsICgnd3d3LnB5dGhvbi5vcmcnLCA4MCkpLAotICAgICAgICAgICAgICAgIChzb2NrZXQuQUZfSU5FVDYsICgnd3d3LnB5dGhvbi5vcmcnLCA4MCwgMCwgMCkpLAotICAgICAgICAgICAgKSkKLQotICAgICAgICBmb3IgZmFtaWx5LCBhZGRyZXNzIGluIGFkZHJlc3NlczoKLSAgICAgICAgICAgIGZvciBzb2NrX3R5cGUgaW4gKHNvY2tldC5TT0NLX1NUUkVBTSwgc29ja2V0LlNPQ0tfREdSQU0pOgotICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgc29ja190eXBlKQotICAgICAgICAgICAgICAgIHdpdGggc29jazoKLSAgICAgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYWRkcmVzcyBtdXN0IGJlIHJlc29sdmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoY20uZXhjZXB0aW9uKSkKLQogICAgIGRlZiB0ZXN0X3JlbW92ZV9mZHNfYWZ0ZXJfY2xvc2luZyhzZWxmKToKICAgICAgICAgbG9vcCA9IHNlbGYuY3JlYXRlX2V2ZW50X2xvb3AoKQogICAgICAgICBjYWxsYmFjayA9IGxhbWJkYTogTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKaW5kZXggNTVmZGZmMy4uYzM4YzFmMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZnV0dXJlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9mdXR1cmVzLnB5CkBAIC03Niw2ICs3NiwxMCBAQAogICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuZXhjZXB0aW9uKQogCisgICAgICAgICMgU3RvcEl0ZXJhdGlvbiBjYW5ub3QgYmUgcmFpc2VkIGludG8gYSBGdXR1cmUgLSBDUHl0aG9uIGlzc3VlMjYyMjEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJTdG9wSXRlcmF0aW9uIC4qIGNhbm5vdCBiZSByYWlzZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuc2V0X2V4Y2VwdGlvbiwgU3RvcEl0ZXJhdGlvbikKKwogICAgICAgICBmLnNldF9leGNlcHRpb24oZXhjKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsbGVkKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKQEAgLTIzOCw2ICsyNDIsNyBAQAogICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKICAgICAgICAgZGVsIGZ1dAogICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKIAogICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCkBAIC0yNzMsMTQgKzI3OCwxNSBAQAogICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZjEsIGYyKQogCi0gICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uZnV0dXJlcy5ldmVudHMnKQotICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX3VzZV9nbG9iYWxfbG9vcChzZWxmLCBtX2V2ZW50cyk6Ci0gICAgICAgIGRlZiBydW4oYXJnKToKLSAgICAgICAgICAgIHJldHVybiAoYXJnLCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCi0gICAgICAgIGV4ID0gY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcigxKQotICAgICAgICBmMSA9IGV4LnN1Ym1pdChydW4sICdvaScpCi0gICAgICAgIGYyID0gYXN5bmNpby53cmFwX2Z1dHVyZShmMSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhtX2V2ZW50cy5nZXRfZXZlbnRfbG9vcC5yZXR1cm5fdmFsdWUsIGYyLl9sb29wKQorICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX3VzZV9nbG9iYWxfbG9vcChzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMuZXZlbnRzJykgYXMgZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRzLmdldF9ldmVudF9sb29wID0gbGFtYmRhOiBzZWxmLmxvb3AKKyAgICAgICAgICAgIGRlZiBydW4oYXJnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICAgICAgZXggPSBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKDEpCisgICAgICAgICAgICBmMSA9IGV4LnN1Ym1pdChydW4sICdvaScpCisgICAgICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9vcCwgZjIuX2xvb3ApCiAKICAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV9jYW5jZWwoc2VsZik6CiAgICAgICAgIGYxID0gY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5CmluZGV4IGNkZjVkOWQuLmQzYmRjNTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5CkBAIC00NTcsNiArNDU3LDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5fd2FpdGVycykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCiAKKyAgICBkZWYgdGVzdF93YWl0X2NhbmNlbF9jb250ZXN0ZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICB3YWl0X3Rhc2sgPSBhc3luY2lvLlRhc2soY29uZC53YWl0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgICMgTm90aWZ5LCBidXQgY29udGVzdCB0aGUgbG9jayBiZWZvcmUgY2FuY2VsbGluZworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHdhaXRfdGFzay5jYW5jZWwpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY29uZC5yZWxlYXNlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdF90YXNrKQorICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICMgU2hvdWxkIG5vdCBoYXBwZW4sIHNpbmNlIG5vIGNhbmNlbGxhdGlvbiBwb2ludHMKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKwogICAgIGRlZiB0ZXN0X3dhaXRfdW5hY3F1aXJlZChzZWxmKToKICAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3BlcDQ5Mi5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3BlcDQ5Mi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWFiYTgxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcGVwNDkyLnB5CkBAIC0wLDAgKzEsMjMxIEBACisiIiJUZXN0cyBzdXBwb3J0IGZvciBuZXcgc3ludGF4IGludHJvZHVjZWQgYnkgUEVQIDQ5Mi4iIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zLmFiYworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKKwordHJ5OgorICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIEJhc2VUZXN0KHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLkJhc2VFdmVudExvb3AoKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0LnJldHVybl92YWx1ZSA9ICgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisKK2NsYXNzIExvY2tUZXN0cyhCYXNlVGVzdCk6CisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfYXN5bmNfd2l0aChzZWxmKToKKyAgICAgICAgcHJpbWl0aXZlcyA9IFsKKyAgICAgICAgICAgIGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBhc3luY2lvLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBhc3luY2lvLkJvdW5kZWRTZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApLAorICAgICAgICBdCisKKyAgICAgICAgYXN5bmMgZGVmIHRlc3QobG9jayk6CisgICAgICAgICAgICBhd2FpdCBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorICAgICAgICAgICAgYXN5bmMgd2l0aCBsb2NrIGFzIF9sb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoX2xvY2ssIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisgICAgICAgICAgICAgICAgYXdhaXQgYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgICAgICBmb3IgcHJpbWl0aXZlIGluIHByaW1pdGl2ZXM6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QocHJpbWl0aXZlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJpbWl0aXZlLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX3dpdGhfYXdhaXQoc2VsZik6CisgICAgICAgIHByaW1pdGl2ZXMgPSBbCisgICAgICAgICAgICBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgYXN5bmNpby5Cb3VuZGVkU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgXQorCisgICAgICAgIGFzeW5jIGRlZiB0ZXN0KGxvY2spOgorICAgICAgICAgICAgYXdhaXQgYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKyAgICAgICAgICAgIHdpdGggYXdhaXQgbG9jayBhcyBfbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKF9sb2NrLCBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorICAgICAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgZm9yIHByaW1pdGl2ZSBpbiBwcmltaXRpdmVzOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0ZXN0KHByaW1pdGl2ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHByaW1pdGl2ZS5sb2NrZWQoKSkKKworCitjbGFzcyBTdHJlYW1SZWFkZXJUZXN0cyhCYXNlVGVzdCk6CisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgREFUQSA9IGInbGluZTFcbmxpbmUyXG5saW5lMycKKworICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShEQVRBKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorCisgICAgICAgIGFzeW5jIGRlZiByZWFkZXIoKToKKyAgICAgICAgICAgIGRhdGEgPSBbXQorICAgICAgICAgICAgYXN5bmMgZm9yIGxpbmUgaW4gc3RyZWFtOgorICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRlcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIFtiJ2xpbmUxXG4nLCBiJ2xpbmUyXG4nLCBiJ2xpbmUzJ10pCisKKworY2xhc3MgQ29yb3V0aW5lVGVzdHMoQmFzZVRlc3QpOgorCisgICAgZGVmIHRlc3RfaXNjb3JvdXRpbmUoc2VsZik6CisgICAgICAgIGFzeW5jIGRlZiBmb28oKTogcGFzcworCisgICAgICAgIGYgPSBmb28oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5pc2Nvcm91dGluZShmKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKSAjIHNpbGVuY2Ugd2FybmluZworCisgICAgICAgICMgVGVzdCB0aGF0IGFzeW5jaW8uaXNjb3JvdXRpbmUoKSB1c2VzIGNvbGxlY3Rpb25zLmFiYy5Db3JvdXRpbmUKKyAgICAgICAgY2xhc3MgRmFrZUNvcm86CisgICAgICAgICAgICBkZWYgc2VuZChzZWxmLCB2YWx1ZSk6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0aHJvdyhzZWxmLCB0eXAsIHZhbD1Ob25lLCB0Yj1Ob25lKTogcGFzcworICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX19hd2FpdF9fKHNlbGYpOiB5aWVsZAorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLmlzY29yb3V0aW5lKEZha2VDb3JvKCkpKQorCisgICAgZGVmIHRlc3RfaXNjb3JvdXRpbmVmdW5jdGlvbihzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLmlzY29yb3V0aW5lZnVuY3Rpb24oZm9vKSkKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX3JldHVybmluZ19hd2FpdGFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIEF3YWl0YWJsZToKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgnc3BhbScsKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZnVuYygpOgorICAgICAgICAgICAgcmV0dXJuIEF3YWl0YWJsZSgpCisKKyAgICAgICAgY29ybyA9IGZ1bmMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcm8uc2VuZChOb25lKSwgJ3NwYW0nKQorICAgICAgICBjb3JvLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FzeW5jX2RlZl9jb3JvdXRpbmVzKHNlbGYpOgorICAgICAgICBhc3luYyBkZWYgYmFyKCk6CisgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCBiYXIoKQorCisgICAgICAgICMgcHJvZHVjdGlvbiBtb2RlCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZvbygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICdzcGFtJykKKworICAgICAgICAjIGRlYnVnIG1vZGUKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmb28oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnc3BhbScpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5jb3JvdXRpbmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfYXN5bmNfZGVmX3dyYXBwZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGFzeW5jIGRlZiBzdGFydCgpOgorICAgICAgICAgICAgZm9vX2Nvcm8gPSBmb28oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCgKKyAgICAgICAgICAgICAgICByZXByKGZvb19jb3JvKSwKKyAgICAgICAgICAgICAgICByJzxDb3JvV3JhcHBlciAuKlwuZm9vXChcKSBydW5uaW5nIGF0IC4qcGVwNDkyLio+JykKKworICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKChyJy4qZm9vLip3YXMgbmV2ZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykpOgorICAgICAgICAgICAgICAgIGZvb19jb3JvID0gTm9uZQorICAgICAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gbV9sb2cuZXJyb3IuY2FsbF9hcmdzWzBdWzBdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidDb3JvV3JhcHBlci4qZm9vLip3YXMgbmV2ZXInKQorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdGFydCgpKQorCisgICAgICAgIGFzeW5jIGRlZiBzdGFydCgpOgorICAgICAgICAgICAgZm9vX2Nvcm8gPSBmb28oKQorICAgICAgICAgICAgdGFzayA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShmb29fY29ybywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIodGFzayksIHInVGFzay4qZm9vLipydW5uaW5nJykKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0YXJ0KCkpCisKKworICAgIGRlZiB0ZXN0X3R5cGVzX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgZnJvbSAoKQorICAgICAgICAgICAgcmV0dXJuICdzcGFtJworCisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHJldHVybiBnZW4oKQorCisgICAgICAgIGFzeW5jIGRlZiBjb3JvKCk6CisgICAgICAgICAgICB3cmFwcGVyID0gZnVuYygpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod3JhcHBlciwgdHlwZXMuX0dlbmVyYXRvcldyYXBwZXIpCisgICAgICAgICAgICByZXR1cm4gYXdhaXQgd3JhcHBlcgorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnc3BhbScpCisKKyAgICBkZWYgdGVzdF90YXNrX3ByaW50X3N0YWNrKHNlbGYpOgorICAgICAgICBUID0gTm9uZQorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGYgPSBULmdldF9zdGFjayhsaW1pdD0xKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZlswXS5mX2NvZGUuY29fbmFtZSwgJ2ZvbycpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGYgPSBOb25lCisKKyAgICAgICAgYXN5bmMgZGVmIHJ1bm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgVAorICAgICAgICAgICAgVCA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShmb28oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBhd2FpdCBUCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShydW5uZXIoKSkKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9hd2FpdChzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGFmdW5jKCk6CisgICAgICAgICAgICBhd2FpdCBhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgYXN5bmMgZGVmIHJ1bm5lcigpOgorICAgICAgICAgICAgY29ybyA9IGFmdW5jKCkKKyAgICAgICAgICAgIHQgPSBhc3luY2lvLlRhc2soY29ybywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYXdhaXQgYXN5bmNpby5zbGVlcCgwLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICBhd2FpdCBjb3JvCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHQuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHInQ2Fubm90IGF3YWl0Lip0ZXN0X2RvdWJsZV9hd2FpdC4qXGJhZnVuY1xiLip3aGlsZS4qXGJzbGVlcFxiJyk6CisKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocnVubmVyKCkpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NlbGVjdG9yX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NlbGVjdG9yX2V2ZW50cy5weQppbmRleCAxMzViNWFiLi5mZjcxYzIxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5CkBAIC0zNDMsOSArMzQzLDExIEBACiAKICAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFzeW5jaW8uRnV0dXJlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgKGYsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpLAotICAgICAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QuY2FsbF9hcmdzWzBdKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgZnV0dXJlX2luLCBzb2NrX2luLCBhZGRyZXNzX2luID0gc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0dXJlX2luLCBmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2tfaW4sIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkcmVzc19pbiwgKCcxMjcuMC4wLjEnLCA4MDgwKSkKIAogICAgIGRlZiB0ZXN0X3NvY2tfY29ubmVjdF90aW1lb3V0KHNlbGYpOgogICAgICAgICAjIGFzeW5jaW8gaXNzdWUgIzIwNTogc29ja19jb25uZWN0KCkgbXVzdCB1bnJlZ2lzdGVyIHRoZSBzb2NrZXQgb24KQEAgLTM1OSw2ICszNjEsNyBAQAogCiAgICAgICAgICMgZmlyc3QgY2FsbCB0byBzb2NrX2Nvbm5lY3QoKSByZWdpc3RlcnMgdGhlIHNvY2tldAogICAgICAgICBmdXQgPSBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssICgnMTI3LjAuMC4xJywgODApKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY29ubmVjdC5jYWxsZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZ1dC5fY2FsbGJhY2tzKSwgMSkKQEAgLTM3MCwxMyArMzczLDI3IEBACiAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxlZCkKIAorICAgIGRlZiB0ZXN0X3NvY2tfY29ubmVjdF9yZXNvbHZlX3VzaW5nX3NvY2tldF9wYXJhbXMoc2VsZik6CisgICAgICAgIGFkZHIgPSAoJ25lZWQtcmVzb2x1dGlvbi5jb20nLCA4MDgwKQorICAgICAgICBzb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcikKKyAgICAgICAgd2hpbGUgbm90IHNlbGYubG9vcC5nZXRhZGRyaW5mby5jYWxsZWQ6CisgICAgICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICphZGRyLCB0eXBlPXNvY2sudHlwZSwgZmFtaWx5PXNvY2suZmFtaWx5LCBwcm90bz1zb2NrLnByb3RvLAorICAgICAgICAgICAgZmxhZ3M9MCkKKwogICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3Qoc2VsZik6CiAgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKIAogICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKICAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKIAotICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICByZXNvbHZlZCA9IHNlbGYubG9vcC5jcmVhdGVfZnV0dXJlKCkKKyAgICAgICAgcmVzb2x2ZWQuc2V0X3Jlc3VsdChbKHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19UQ1AsICcnLCAoJzEyNy4wLjAuMScsIDgwODApKV0pCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIHNvY2ssIHJlc29sdmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmNvbm5lY3QuY2FsbGVkKQpAQCAtNDAyLDkgKzQxOSwxMyBAQAogICAgICAgICBzb2NrLmNvbm5lY3Quc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKICAgICAgICAgc29jay5nZXRzb2Nrb3B0LnJldHVybl92YWx1ZSA9IDAKICAgICAgICAgYWRkcmVzcyA9ICgnMTI3LjAuMC4xJywgODA4MCkKKyAgICAgICAgcmVzb2x2ZWQgPSBzZWxmLmxvb3AuY3JlYXRlX2Z1dHVyZSgpCisgICAgICAgIHJlc29sdmVkLnNldF9yZXN1bHQoWyhzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fVENQLCAnJywgYWRkcmVzcyldKQogCiAgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKLSAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QoZiwgc29jaywgYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3QoZiwgc29jaywgcmVzb2x2ZWQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbGVkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF1bMF0pCiAKQEAgLTEwNzcsMTcgKzEwOTgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKIAotICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCi0gICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uX2FuZF9jbG9zZShzZWxmLCBtX2xvZyk6Ci0gICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCi0gICAgICAgIHJlbW92ZV93cml0ZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCi0KLSAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKLSAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKLSAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCi0gICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQotICAgICAgICByZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2tfZmQpCi0KICAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CiAgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKQEAgLTExMTEsNiArMTEyMSwxNCBAQAogICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQogICAgICAgICB0ci5jbG9zZSgpCiAKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RyYW5zcG9ydF9jbG9zZV9yZW1vdmVfd3JpdGVyKHNlbGYsIG1fbG9nKToKKyAgICAgICAgcmVtb3ZlX3dyaXRlciA9IHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICByZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2tfZmQpCisKIAogQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQogY2xhc3MgU2VsZWN0b3JTc2xUcmFuc3BvcnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKQEAgLTExNjUsNyArMTE4Myw3IEBACiAgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBleGMKICAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CiAgICAgICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKLSAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc3NsX3RyYW5zcG9ydCh3YWl0ZXI9d2FpdGVyKQorICAgICAgICAgICAgc2VsZi5zc2xfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuZG9uZSgpKQogICAgICAgICBzZWxmLmFzc2VydElzKGV4Yywgd2FpdGVyLmV4Y2VwdGlvbigpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKQEAgLTExODIsNyArMTIwMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB3YWl0ZXIuZXhjZXB0aW9uKCkpCiAKICAgICBkZWYgdGVzdF9jYW5jZWxfaGFuZHNoYWtlKHNlbGYpOgotICAgICAgICAjIFB5dGhvbiBpc3N1ZSAjMjMxOTc6IGNhbmNlbGxpbmcgYW4gaGFuZHNoYWtlIG11c3Qgbm90IHJhaXNlIGFuCisgICAgICAgICMgUHl0aG9uIGlzc3VlICMyMzE5NzogY2FuY2VsbGluZyBhIGhhbmRzaGFrZSBtdXN0IG5vdCByYWlzZSBhbgogICAgICAgICAjIGV4Y2VwdGlvbiBvciBsb2cgYW4gZXJyb3IsIGV2ZW4gaWYgdGhlIGhhbmRzaGFrZSBmYWlsZWQKICAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCiAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc3NsX3RyYW5zcG9ydCh3YWl0ZXI9d2FpdGVyKQpAQCAtMTM2NCwyMCArMTM4MiwxOSBAQAogICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfY2xvc2luZyhzZWxmKToKICAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAogICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCi0gICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCiAgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQogICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKICAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCiAKICAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3NpbmdfZW1wdHlfYnVmZmVyKHNlbGYpOgogICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIGNhbGxfc29vbiA9IHNlbGYubG9vcC5jYWxsX3Nvb24gPSBtb2NrLk1vY2soKQogICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCi0gICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCiAgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQogICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKLSAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIGNhbGxfc29vbi5hc3NlcnRfY2FsbGVkX3dpdGgodHJhbnNwb3J0Ll9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfcmV0cnkoc2VsZik6CiAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NzbHByb3RvLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3NscHJvdG8ucHkKaW5kZXggYTcyOTY3ZS4uOGQ1MjMzNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3NscHJvdG8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3NscHJvdG8ucHkKQEAgLTEsNSArMSw2IEBACiAiIiJUZXN0cyBmb3IgYXN5bmNpby9zc2xwcm90by5weS4iIiIKIAoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB1bml0dGVzdAogZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogdHJ5OgpAQCAtOCw2ICs5LDcgQEAKICAgICBzc2wgPSBOb25lCiAKIGltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IGxvZwogZnJvbSBhc3luY2lvIGltcG9ydCBzc2xwcm90bwogZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCiAKQEAgLTQwLDcgKzQyLDcgQEAKICAgICAgICAgICAgIHNzbF9wcm90by5jb25uZWN0aW9uX21hZGUodHJhbnNwb3J0KQogCiAgICAgZGVmIHRlc3RfY2FuY2VsX2hhbmRzaGFrZShzZWxmKToKLSAgICAgICAgIyBQeXRob24gaXNzdWUgIzIzMTk3OiBjYW5jZWxsaW5nIGFuIGhhbmRzaGFrZSBtdXN0IG5vdCByYWlzZSBhbgorICAgICAgICAjIFB5dGhvbiBpc3N1ZSAjMjMxOTc6IGNhbmNlbGxpbmcgYSBoYW5kc2hha2UgbXVzdCBub3QgcmFpc2UgYW4KICAgICAgICAgIyBleGNlcHRpb24gb3IgbG9nIGFuIGVycm9yLCBldmVuIGlmIHRoZSBoYW5kc2hha2UgZmFpbGVkCiAgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQogICAgICAgICBzc2xfcHJvdG8gPSBzZWxmLnNzbF9wcm90b2NvbCh3YWl0ZXIpCkBAIC02Niw2ICs2OCwyMCBAQAogICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhaXRlci5leGNlcHRpb24oKSwgQ29ubmVjdGlvblJlc2V0RXJyb3IpCiAKKyAgICBkZWYgdGVzdF9mYXRhbF9lcnJvcl9ub19uYW1lX2Vycm9yKHNlbGYpOgorICAgICAgICAjIEZyb20gaXNzdWUgIzM2My4KKyAgICAgICAgIyBfZmF0YWxfZXJyb3IoKSBnZW5lcmF0ZXMgYSBOYW1lRXJyb3IgaWYgc3NscHJvdG8ucHkKKyAgICAgICAgIyBkb2VzIG5vdCBpbXBvcnQgYmFzZV9ldmVudHMuCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzc2xfcHJvdG8gPSBzZWxmLnNzbF9wcm90b2NvbCh3YWl0ZXIpCisgICAgICAgICMgVGVtcG9yYXJpbHkgdHVybiBvZmYgZXJyb3IgbG9nZ2luZyBzbyBhcyBub3QgdG8gc3BvaWwgdGVzdCBvdXRwdXQuCisgICAgICAgIGxvZ19sZXZlbCA9IGxvZy5sb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQorICAgICAgICBsb2cubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuRkFUQUwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNzbF9wcm90by5fZmF0YWxfZXJyb3IoTm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgUmVzdG9yZSBlcnJvciBsb2dnaW5nLgorICAgICAgICAgICAgbG9nLmxvZ2dlci5zZXRMZXZlbChsb2dfbGV2ZWwpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdWJwcm9jZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3VicHJvY2Vzcy5weQppbmRleCBlOTBmMTdkLi41OGY3MjUzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N1YnByb2Nlc3MucHkKQEAgLTI4Nyw2ICsyODcsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQucnN0cmlwKCksIGInMycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCiAKKyAgICBkZWYgdGVzdF9lbXB0eV9pbnB1dChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBlbXB0eV9pbnB1dCgpOgorICAgICAgICAgICAgY29kZSA9ICdpbXBvcnQgc3lzOyBkYXRhID0gc3lzLnN0ZGluLnJlYWQoKTsgcHJpbnQobGVuKGRhdGEpKScKKyAgICAgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49YXN5bmNpby5zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9YXN5bmNpby5zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9YXN5bmNpby5zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0geWllbGQgZnJvbSBwcm9jLmNvbW11bmljYXRlKGInJykKKyAgICAgICAgICAgIGV4aXRjb2RlID0geWllbGQgZnJvbSBwcm9jLndhaXQoKQorICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIGV4aXRjb2RlKQorCisgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGVtcHR5X2lucHV0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRjb2RlLCAwKQorCiAgICAgZGVmIHRlc3RfY2FuY2VsX3Byb2Nlc3Nfd2FpdChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMjMxNDA6IGNhbmNlbCBQcm9jZXNzLndhaXQoKQogCkBAIC0zODgsNyArNDA3LDcgQEAKICAgICAgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIGNyZWF0ZQogICAgICAgICAgICAgcHJvYyA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc3VicHJvY2VzcycpCiAKLSAgICAgICAgICAgICMga2lsbCB0aGUgcHJvY2VzcyAoYnV0IGFzeW5jaW8gaXMgbm90IG5vdGlmaWVkIGltbWVkaWF0bHkpCisgICAgICAgICAgICAjIGtpbGwgdGhlIHByb2Nlc3MgKGJ1dCBhc3luY2lvIGlzIG5vdCBub3RpZmllZCBpbW1lZGlhdGVseSkKICAgICAgICAgICAgIHByb2Mua2lsbCgpCiAgICAgICAgICAgICBwcm9jLndhaXQoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Rhc2tzLnB5CmluZGV4IGM5ZDQ5ZjAuLmU3ZmI3NzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Rhc2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Rhc2tzLnB5CkBAIC0xNzk0LDYgKzE3OTQsMzAgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG1lc3NhZ2UsIHJlLmNvbXBpbGUocmVnZXgsIHJlLkRPVEFMTCkpCiAKKyAgICBkZWYgdGVzdF9yZXR1cm5fY29yb3V0aW5lX2Zyb21fY29yb3V0aW5lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gb2YgQGFzeW5jaW8uY29yb3V0aW5lKCktd3JhcHBlZCBmdW5jdGlvbiBnZW5lcmF0b3Igb2JqZWN0CisgICAgICAgIGZyb20gQGFzeW5jaW8uY29yb3V0aW5lKCktd3JhcHBlZCBmdW5jdGlvbiBzaG91bGQgaGF2ZSBzYW1lIGVmZmVjdCBhcworICAgICAgICByZXR1cm5pbmcgZ2VuZXJhdG9yIG9iamVjdCBvciBGdXR1cmUuIiIiCisgICAgICAgIGRlZiBjaGVjaygpOgorICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgb3V0ZXJfY29ybygpOgorICAgICAgICAgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICAgICAgICAgIGRlZiBpbm5lcl9jb3JvKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5uZXJfY29ybygpCisKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUob3V0ZXJfY29ybygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDEpCisKKyAgICAgICAgIyBUZXN0IHdpdGggZGVidWcgZmxhZyBjbGVhcmVkLgorICAgICAgICB3aXRoIHNldF9jb3JvdXRpbmVfZGVidWcoRmFsc2UpOgorICAgICAgICAgICAgY2hlY2soKQorCisgICAgICAgICMgVGVzdCB3aXRoIGRlYnVnIGZsYWcgc2V0LgorICAgICAgICB3aXRoIHNldF9jb3JvdXRpbmVfZGVidWcoVHJ1ZSk6CisgICAgICAgICAgICBjaGVjaygpCisKICAgICBkZWYgdGVzdF90YXNrX3NvdXJjZV90cmFjZWJhY2soc2VsZik6CiAgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKIApAQCAtMjIzNiwxNzQgKzIyNjAsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMTEpCiAKIAotY2xhc3MgVGltZW91dFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCi0gICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKLSAgICAgICAgc2VsZi5sb29wID0gTm9uZQotCi0gICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKLSAgICAgICAgY2FuY2VsZWRfcmFpc2VkID0gW0ZhbHNlXQotCi0gICAgICAgIEBhc3luY2lvLmNvcm91dGluZQotICAgICAgICBkZWYgbG9uZ19ydW5uaW5nX3Rhc2soKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMTAsIGxvb3A9c2VsZi5sb29wKQotICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgY2FuY2VsZWRfcmFpc2VkWzBdID0gVHJ1ZQotICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCi0gICAgICAgIGRlZiBnbygpOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlRpbWVvdXRFcnJvcik6Ci0gICAgICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4wMSwgbG9vcD1zZWxmLmxvb3ApIGFzIHQ6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gbG9uZ19ydW5uaW5nX3Rhc2soKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQuX2xvb3AsIHNlbGYubG9vcCkKLQotICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdvKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYW5jZWxlZF9yYWlzZWRbMF0sICdDYW5jZWxsZWRFcnJvciB3YXMgbm90IHJhaXNlZCcpCi0KLSAgICBkZWYgdGVzdF90aW1lb3V0X2ZpbmlzaF9pbl90aW1lKHNlbGYpOgotICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKLSAgICAgICAgZGVmIGxvbmdfcnVubmluZ190YXNrKCk6Ci0gICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1zZWxmLmxvb3ApCi0gICAgICAgICAgICByZXR1cm4gJ2RvbmUnCi0KLSAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCi0gICAgICAgIGRlZiBnbygpOgotICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4xLCBsb29wPXNlbGYubG9vcCk6Ci0gICAgICAgICAgICAgICAgcmVzcCA9IHlpZWxkIGZyb20gbG9uZ19ydW5uaW5nX3Rhc2soKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAnZG9uZScpCi0KLSAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShnbygpKQotCi0gICAgZGVmIHRlc3RfdGltZW91dF9nbG9hYmFsX2xvb3Aoc2VsZik6Ci0gICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQotCi0gICAgICAgIEBhc3luY2lvLmNvcm91dGluZQotICAgICAgICBkZWYgcnVuKCk6Ci0gICAgICAgICAgICB3aXRoIGFzeW5jaW8udGltZW91dCgwLjEpIGFzIHQ6Ci0gICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBzZWxmLmxvb3ApCi0KLSAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShydW4oKSkKLQotICAgIGRlZiB0ZXN0X3RpbWVvdXRfbm90X3JlbGV2YW50X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCi0gICAgICAgIGRlZiBnbygpOgotICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAsIGxvb3A9c2VsZi5sb29wKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4xLCBsb29wPXNlbGYubG9vcCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShnbygpKQotCi0gICAgZGVmIHRlc3RfdGltZW91dF9jYW5jZWxlZF9lcnJvcl9pc19jb252ZXJ0ZWRfdG9fdGltZW91dChzZWxmKToKLSAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCi0gICAgICAgIGRlZiBnbygpOgotICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAsIGxvb3A9c2VsZi5sb29wKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKLSAgICAgICAgICAgICAgICB3aXRoIGFzeW5jaW8udGltZW91dCgwLjAwMSwgbG9vcD1zZWxmLmxvb3ApOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBhc3luY2lvLkNhbmNlbGxlZEVycm9yCi0KLSAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShnbygpKQotCi0gICAgZGVmIHRlc3RfdGltZW91dF9ibG9ja2luZ19sb29wKHNlbGYpOgotICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKLSAgICAgICAgZGVmIGxvbmdfcnVubmluZ190YXNrKCk6Ci0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCi0gICAgICAgICAgICByZXR1cm4gJ2RvbmUnCi0KLSAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCi0gICAgICAgIGRlZiBnbygpOgotICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4wMSwgbG9vcD1zZWxmLmxvb3ApOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gbG9uZ19ydW5uaW5nX3Rhc2soKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICdkb25lJykKLQotICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdvKCkpCi0KLSAgICBkZWYgdGVzdF9mb3JfcmFjZV9jb25kaXRpb25zKHNlbGYpOgotICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKLSAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC4xLCBmdXQuc2V0X3Jlc3VsdCgnZG9uZScpKQotCi0gICAgICAgIEBhc3luY2lvLmNvcm91dGluZQotICAgICAgICBkZWYgZ28oKToKLSAgICAgICAgICAgIHdpdGggYXN5bmNpby50aW1lb3V0KDAuMiwgbG9vcD1zZWxmLmxvb3ApOgotICAgICAgICAgICAgICAgIHJlc3AgPSB5aWVsZCBmcm9tIGZ1dAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAnZG9uZScpCi0KLSAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShnbygpKQotCi0gICAgZGVmIHRlc3RfdGltZW91dF90aW1lKHNlbGYpOgotICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKLSAgICAgICAgZGVmIGdvKCk6Ci0gICAgICAgICAgICBmb29fcnVubmluZyA9IE5vbmUKLQotICAgICAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uVGltZW91dEVycm9yKToKLSAgICAgICAgICAgICAgICB3aXRoIGFzeW5jaW8udGltZW91dCgwLjEsIGxvb3A9c2VsZi5sb29wKToKLSAgICAgICAgICAgICAgICAgICAgZm9vX3J1bm5pbmcgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjIsIGxvb3A9c2VsZi5sb29wKQotICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICAgICAgZm9vX3J1bm5pbmcgPSBGYWxzZQotCi0gICAgICAgICAgICBkdCA9IHNlbGYubG9vcC50aW1lKCkgLSBzdGFydAotICAgICAgICAgICAgIyB0b2xlcmF0ZSBhIHNtYWxsIGRlbHRhIGZvciBzbG93IGRlbHRhIG9yIHVuc3RhYmxlIGNsb2NrcwotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDkgPCBkdCA8IDAuMTIsIGR0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmb29fcnVubmluZykKLQotICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdvKCkpCi0KLSAgICBkZWYgdGVzdF9yYWlzZV9ydW50aW1lZXJyb3JfaWZfbm9fdGFzayhzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4xLCBsb29wPXNlbGYubG9vcCk6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3Rfb3V0ZXJfY29yb19pc19ub3RfY2FuY2VsbGVkKHNlbGYpOgotCi0gICAgICAgIGhhc190aW1lb3V0ID0gW0ZhbHNlXQotCi0gICAgICAgIEBhc3luY2lvLmNvcm91dGluZQotICAgICAgICBkZWYgb3V0ZXIoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIGFzeW5jaW8udGltZW91dCgwLjAwMSwgbG9vcD1zZWxmLmxvb3ApOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMSwgbG9vcD1zZWxmLmxvb3ApCi0gICAgICAgICAgICBleGNlcHQgYXN5bmNpby5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICAgICAgaGFzX3RpbWVvdXRbMF0gPSBUcnVlCi0KLSAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCi0gICAgICAgIGRlZiBnbygpOgotICAgICAgICAgICAgdGFzayA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShvdXRlcigpLCBsb29wPXNlbGYubG9vcCkKLSAgICAgICAgICAgIHlpZWxkIGZyb20gdGFzawotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc190aW1lb3V0WzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmNhbmNlbGxlZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2suZG9uZSgpKQotCi0gICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ28oKSkKLQotICAgIGRlZiB0ZXN0X2NhbmNlbF9vdXRlcl9jb3JvKHNlbGYpOgotICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKLQotICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKLSAgICAgICAgZGVmIG91dGVyKCk6Ci0gICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQotICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEsIGxvb3A9c2VsZi5sb29wKQotCi0gICAgICAgIEBhc3luY2lvLmNvcm91dGluZQotICAgICAgICBkZWYgZ28oKToKLSAgICAgICAgICAgIHRhc2sgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUob3V0ZXIoKSwgbG9vcD1zZWxmLmxvb3ApCi0gICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAotICAgICAgICAgICAgdGFzay5jYW5jZWwoKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKLSAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2sKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmNhbmNlbGxlZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2suZG9uZSgpKQotCi0gICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ28oKSkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CmluZGV4IGQ0NDcyNmQuLjM4NTc5MTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQpAQCAtNyw3ICs3LDYgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgZXJybm8KIGltcG9ydCBzdHJ1Y3QKLWltcG9ydCB3YXJuaW5ncwogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KQEAgLTY1LDcgKzY0LDcgQEAKICMgdXNlZCB3aGVuIHRlc3Rpbmcgc2VuZGVyczsganVzdCBjb2xsZWN0cyB3aGF0IGl0IGdldHMgdW50aWwgbmV3bGluZSBpcyBzZW50CiBkZWYgY2FwdHVyZV9zZXJ2ZXIoZXZ0LCBidWYsIHNlcnYpOgogICAgIHRyeToKLSAgICAgICAgc2Vydi5saXN0ZW4oNSkKKyAgICAgICAgc2Vydi5saXN0ZW4oKQogICAgICAgICBjb25uLCBhZGRyID0gc2Vydi5hY2NlcHQoKQogICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgcGFzcwpAQCAtMjk4LDIzICsyOTcsNiBAQAogICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIGNvbm5lY3QgZXZlbnQnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBleHBlY3RlZCkKIAotICAgIGRlZiB0ZXN0X2lzc3VlXzg1OTQoc2VsZik6Ci0gICAgICAgICMgWFhYIC0gdGhpcyB0ZXN0IGlzIHN1cHBvc2VkIHRvIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciBQeXRob24KLSAgICAgICAgIyB2ZXJzaW9uCi0gICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKHNvY2tldC5zb2NrZXQoKSkKLSAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGVycm9yIG1lc3NhZ2Ugbm8gbG9uZ2VyIHJlZmVycyB0byB0aGUgc29ja2V0Ci0gICAgICAgICMgb2JqZWN0IGJ1dCB0aGUgZGlzcGF0Y2hlciBpbnN0YW5jZSBpbnN0ZWFkCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoQXR0cmlidXRlRXJyb3IsICdkaXNwYXRjaGVyIGluc3RhbmNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyLCBkLCAnZm9vJykKLSAgICAgICAgIyBjaGVhcCBpbmhlcml0YW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBpcyBzdXBwb3NlZAotICAgICAgICAjIHRvIHN0aWxsIHdvcmsgYnV0IGEgRGVwcmVjYXRpb25XYXJuaW5nIGlzIGV4cGVjdGVkCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCi0gICAgICAgICAgICBmYW1pbHkgPSBkLmZhbWlseQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW1pbHksIHNvY2tldC5BRl9JTkVUKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3WzBdLmNhdGVnb3J5LCBEZXByZWNhdGlvbldhcm5pbmcpKQotCiAgICAgZGVmIHRlc3Rfc3RyZXJyb3Ioc2VsZik6CiAgICAgICAgICMgcmVmZXJzIHRvIGJ1ZyAjODU3MwogICAgICAgICBlcnIgPSBhc3luY29yZS5fc3RyZXJyb3IoZXJybm8uRVBFUk0pCkBAIC0zMzEsOSArMzEzLDggQEAKICAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CiAgICAgICAgIHBhc3MKIAotY2xhc3MgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIHVzZXBvbGwgPSBGYWxzZQogCitjbGFzcyBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBwYXNzCiAKQEAgLTM4MywxMCArMzY0LDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAKLQotY2xhc3MgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHNfVXNlUG9sbChEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cyk6Ci0gICAgdXNlcG9sbCA9IFRydWUKLQogQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihhc3luY29yZSwgJ2ZpbGVfd3JhcHBlcicpLAogICAgICAgICAgICAgICAgICAgICAgJ2FzeW5jb3JlLmZpbGVfd3JhcHBlciByZXF1aXJlZCcpCiBjbGFzcyBGaWxlV3JhcHBlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkgYi9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQppbmRleCA3MGQyZjFjLi4xNzJiZDI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQpAQCAtMTc3LDkgKzE3Nyw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRleGl0Ll9uY2FsbGJhY2tzKCksIG4pCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5IGIvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkKaW5kZXggMGU3NWM2Yi4uNTA5M2U5ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkKQEAgLTEsNiArMSw1IEBACiAjIEF1Z21lbnRlZCBhc3NpZ25tZW50IHRlc3QuCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCB1bml0dGVzdAogCiAKQEAgLTEzNiw2ICsxMzUsMTQgQEAKICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2ltdWxfXyBjYWxsZWQiKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKKyAgICAgICAgICAgIGRlZiBfX21hdG11bF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19tYXRtdWxfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9fcm1hdG11bF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19ybWF0bXVsX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX2ltYXRtdWxfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9faW1hdG11bF9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKwogICAgICAgICAgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLCB2YWwpOgogICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fZmxvb3JkaXZfXyBjYWxsZWQiKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCkBAIC0yMjUsNiArMjMyLDEwIEBACiAgICAgICAgIDEgKiB4CiAgICAgICAgIHggKj0gMQogCisgICAgICAgIHggQCAxCisgICAgICAgIDEgQCB4CisgICAgICAgIHggQD0gMQorCiAgICAgICAgIHggLyAxCiAgICAgICAgIDEgLyB4CiAgICAgICAgIHggLz0gMQpAQCAtMjcxLDYgKzI4Miw5IEBACiBfX211bF9fIGNhbGxlZAogX19ybXVsX18gY2FsbGVkCiBfX2ltdWxfXyBjYWxsZWQKK19fbWF0bXVsX18gY2FsbGVkCitfX3JtYXRtdWxfXyBjYWxsZWQKK19faW1hdG11bF9fIGNhbGxlZAogX190cnVlZGl2X18gY2FsbGVkCiBfX3J0cnVlZGl2X18gY2FsbGVkCiBfX2l0cnVlZGl2X18gY2FsbGVkCkBAIC0zMDAsOCArMzE0LDUgQEAKIF9faWxzaGlmdF9fIGNhbGxlZAogJycnLnNwbGl0bGluZXMoKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChBdWdBc3NpZ25UZXN0KQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weSBiL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CmluZGV4IGI5NzM4ZGQuLjRmODZhYWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CkBAIC0zLDEwICszLDggQEAKIGltcG9ydCBiYXNlNjQKIGltcG9ydCBiaW5hc2NpaQogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN0cnVjdAogZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBzY3JpcHRfaGVscGVyCiAKIAogY2xhc3MgTGVnYWN5QmFzZTY0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjQ1LDE0ICsyNDMsMjYgQEAKICAgICAgICAgICAgICAgICAgKGInQEAnLCBiJycpLAogICAgICAgICAgICAgICAgICAoYichJywgYicnKSwKICAgICAgICAgICAgICAgICAgKGInWVdKalxuWVdJPScsIGInYWJjYWInKSkKKyAgICAgICAgZnVuY3MgPSAoCisgICAgICAgICAgICBiYXNlNjQuYjY0ZGVjb2RlLAorICAgICAgICAgICAgYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSwKKyAgICAgICAgICAgIGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSwKKyAgICAgICAgKQogICAgICAgICBmb3IgYnN0ciwgcmVzIGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlNjQuYjY0ZGVjb2RlKGJzdHIpLCByZXMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2U2NC5iNjRkZWNvZGUoYnN0ci5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCisgICAgICAgICAgICBmb3IgZnVuYyBpbiBmdW5jczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChic3RyPWJzdHIsIGZ1bmM9ZnVuYyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhic3RyKSwgcmVzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYnN0ci5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yKToKICAgICAgICAgICAgICAgICBiYXNlNjQuYjY0ZGVjb2RlKGJzdHIsIHZhbGlkYXRlPVRydWUpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yKToKICAgICAgICAgICAgICAgICBiYXNlNjQuYjY0ZGVjb2RlKGJzdHIuZGVjb2RlKCdhc2NpaScpLCB2YWxpZGF0ZT1UcnVlKQogCisgICAgICAgICMgTm9ybWFsIGFscGhhYmV0IGNoYXJhY3RlcnMgbm90IGRpc2NhcmRlZCB3aGVuIGFsdGVybmF0aXZlIGdpdmVuCisgICAgICAgIHJlcyA9IGInXHhGQlx4RUZceEJFXHhGRlx4RkZceEZGJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2U2NC5iNjRkZWNvZGUoYicrK1tbLy9dXScsIGInW10nKSwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShiJysrLS0vL19fJyksIHJlcykKKwogICAgIGRlZiB0ZXN0X2IzMmVuY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYicnKSwgYicnKQpAQCAtMzYyLDYgKzM3MiwxMCBAQAogICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKICAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShhcnJheSgnQicsIGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKICAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgICMgTm9uLWFscGhhYmV0IGNoYXJhY3RlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJhc2U2NC5iMTZkZWNvZGUsICcwMTAyQUcnKQorICAgICAgICAjIEluY29ycmVjdCAicGFkZGluZyIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJhc2U2NC5iMTZkZWNvZGUsICcwMTAnKQogCiAgICAgZGVmIHRlc3RfYTg1ZW5jb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTQ4MCw2ICs0OTQsNyBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShkYXRhLCBhZG9iZT1GYWxzZSksIHJlcywgZGF0YSkKICAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YS5kZWNvZGUoImFzY2lpIiksIGFkb2JlPUZhbHNlKSwgcmVzLCBkYXRhKQogICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJzx+JyArIGRhdGEgKyBiJ34+JywgYWRvYmU9VHJ1ZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YSArIGInfj4nLCBhZG9iZT1UcnVlKSwgcmVzLCBkYXRhKQogICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZSgnPH4lc34+JyAlIGRhdGEuZGVjb2RlKCJhc2NpaSIpLCBhZG9iZT1UcnVlKSwKICAgICAgICAgICAgICAgIHJlcywgZGF0YSkKIApAQCAtNTcwLDggKzU4NSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibWFsZm9ybWVkIiwgYWRvYmU9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8fnN0aWxsIG1hbGZvcm1lZCIsIGFkb2JlPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWxzbyBtYWxmb3JtZWR+PiIsIGFkb2JlPVRydWUpCiAKICAgICAgICAgIyBXaXRoIGFkb2JlPUZhbHNlICh0aGUgZGVmYXVsdCksIEFkb2JlIGZyYW1pbmcgbWFya2VycyBhcmUgZGlzYWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLApAQCAtNjIyLDE1ICs2MzUsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYmluYXNjaWkuRXJyb3IsIFZhbHVlRXJyb3IpKQogCiAKLQogY2xhc3MgVGVzdE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3VwcG9ydC5URVNURk4pOgogICAgICAgICAgICAgb3MudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCi0gICAgZGVmIGdldF9vdXRwdXQoc2VsZiwgKmFyZ3MsICoqb3B0aW9ucyk6Ci0gICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctbScsICdiYXNlNjQnKSArIGFyZ3MKLSAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsICoqb3B0aW9ucykKKyAgICBkZWYgZ2V0X291dHB1dChzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soJy1tJywgJ2Jhc2U2NCcsICphcmdzKS5vdXQKIAogICAgIGRlZiB0ZXN0X2VuY29kZV9kZWNvZGUoc2VsZik6CiAgICAgICAgIG91dHB1dCA9IHNlbGYuZ2V0X291dHB1dCgnLXQnKQpAQCAtNjQzLDEzICs2NTQsMTQgQEAKICAgICBkZWYgdGVzdF9lbmNvZGVfZmlsZShzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKICAgICAgICAgICAgIGZwLndyaXRlKGInYVx4ZmZiXG4nKQotCiAgICAgICAgIG91dHB1dCA9IHNlbGYuZ2V0X291dHB1dCgnLWUnLCBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQucnN0cmlwKCksIGInWWY5aUNnPT0nKQogCi0gICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZnA6Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLmdldF9vdXRwdXQoJy1lJywgc3RkaW49ZnApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiJ1lmOWlDZz09JykKKyAgICBkZWYgdGVzdF9lbmNvZGVfZnJvbV9zdGRpbihzZWxmKToKKyAgICAgICAgd2l0aCBzY3JpcHRfaGVscGVyLnNwYXduX3B5dGhvbignLW0nLCAnYmFzZTY0JywgJy1lJykgYXMgcHJvYzoKKyAgICAgICAgICAgIG91dCwgZXJyID0gcHJvYy5jb21tdW5pY2F0ZShiJ2FceGZmYlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGInWWY5aUNnPT0nKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlcnIpCiAKICAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CkBAIC02NTcsMTAgKzY2OSw1IEBACiAgICAgICAgIG91dHB1dCA9IHNlbGYuZ2V0X291dHB1dCgnLWQnLCBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQucnN0cmlwKCksIGInYVx4ZmZiJykKIAotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkgYi9MaWIvdGVzdC90ZXN0X2JpZ21lbS5weQppbmRleCAwZTU0NTk1Li40MGFjOWJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2JpZ21lbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2JpZ21lbS5weQpAQCAtNzM3LDcgKzczNyw3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByID0gcyA9IE5vbmUKIAotICAgICMgVGhlIG9yaWdpbmFsIHRlc3RfdHJhbnNsYXRlIGlzIG92ZXJyaWRlbiBoZXJlLCBzbyBhcyB0byBnZXQgdGhlCisgICAgIyBUaGUgb3JpZ2luYWwgdGVzdF90cmFuc2xhdGUgaXMgb3ZlcnJpZGRlbiBoZXJlLCBzbyBhcyB0byBnZXQgdGhlCiAgICAgIyBjb3JyZWN0IHNpemUgZXN0aW1hdGU6IHN0ci50cmFuc2xhdGUoKSB1c2VzIGFuIGludGVybWVkaWF0ZSBQeV9VQ1M0CiAgICAgIyByZXByZXNlbnRhdGlvbi4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weSBiL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkKaW5kZXggMzg5ZGFhMC4uODM2N2FmZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CkBAIC0xLDYgKzEsNSBAQAogIiIiVGVzdCB0aGUgYmluYXNjaWkgQyBtb2R1bGUuIiIiCiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgYmluYXNjaWkKIGltcG9ydCBhcnJheQpAQCAtMjc3LDExICsyNzYsNSBAQAogICAgIHR5cGUydGVzdCA9IG1lbW9yeXZpZXcKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmluQVNDSUlUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QmluQVNDSUlUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVhcnJheUJpbkFTQ0lJVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnl2aWV3QmluQVNDSUlUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5IGIvTGliL3Rlc3QvdGVzdF9iaW5vcC5weQppbmRleCA5NjNhYTAxLi5lOWRiZGRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlub3AucHkKQEAgLTU4LDcgKzU4LDcgQEAKICAgICBkZW4gPSBwcm9wZXJ0eShfZ2V0X2RlbiwgTm9uZSkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiQ29udmVydCBhIFJhdCB0byBhbiBzdHJpbmcgcmVzZW1ibGluZyBhIFJhdCBjb25zdHJ1Y3RvciBjYWxsLiIiIgorICAgICAgICAiIiJDb252ZXJ0IGEgUmF0IHRvIGEgc3RyaW5nIHJlc2VtYmxpbmcgYSBSYXQgY29uc3RydWN0b3IgY2FsbC4iIiIKICAgICAgICAgcmV0dXJuICJSYXQoJWQsICVkKSIgJSAoc2VsZi5fX251bSwgc2VsZi5fX2RlbikKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgpAQCAtMzg5LDkgKzM4OSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEIsIFYpLCBbJ0IuX19sZV9fJywgJ1YuX19nZV9fJ10pCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFJhdFRlc3RDYXNlLCBPcGVyYXRpb25PcmRlclRlc3RzKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYm9vbC5weSBiL0xpYi90ZXN0L3Rlc3RfYm9vbC5weQppbmRleCAyNTA3NDM5Li5kMzBhM2I5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jvb2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ib29sLnB5CkBAIC0zMTQsNiArMzE0LDEwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJvb2wsIEVnZ3MoKSkKIAorICAgIGRlZiB0ZXN0X2Zyb21fYnl0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbC5mcm9tX2J5dGVzKGInXHgwMCcqOCwgJ2JpZycpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sLmZyb21fYnl0ZXMoYidhYmNkJywgJ2xpdHRsZScpLCBUcnVlKQorCiAgICAgZGVmIHRlc3Rfc2FuZV9sZW4oc2VsZik6CiAgICAgICAgICMgdGhpcyB0ZXN0IGp1c3QgdGVzdHMgb3VyIGFzc3VtcHRpb25zIGFib3V0IF9fbGVuX18KICAgICAgICAgIyB0aGlzIHdpbGwgc3RhcnQgZmFpbGluZyBpZiBfX2xlbl9fIGNoYW5nZXMgYXNzZXJ0aW9ucwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkgYi9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQppbmRleCBhYTE1Mzc3Li4yZWVmOWZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weQpAQCAtMTEsNiArMTEsNyBAQAogIyBtZW1vcnl2aWV3IHRlc3RzIGlzIG5vdyBpbiB0aGlzIG1vZHVsZS4KICMKIAoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcGVybXV0YXRpb25zLCBwcm9kdWN0CkBAIC0yMTYsNyArMjE3LDcgQEAKICAgICBmb3IgdCBpbiBpdGVyX21vZGUobml0ZW1zLCB0ZXN0b2JqKToKICAgICAgICAgeWllbGQgdAogICAgIGlmIHRlc3RvYmogIT0gJ25kYXJyYXknOgotICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHJldHVybgogICAgIHlpZWxkIHN0cnVjdF9pdGVtcyhuaXRlbXMsIHRlc3RvYmopCiAKIApAQCAtODQwLDYgKzg0MSwxMSBAQAogICAgICAgICAgICAgICAgICMgdGVzdCB0b2J5dGVzKCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50b2J5dGVzKCksIGIpCiAKKyAgICAgICAgICAgICAgICAjIHRlc3QgaGV4KCkKKyAgICAgICAgICAgICAgICBtID0gbWVtb3J5dmlldyhyZXN1bHQpCisgICAgICAgICAgICAgICAgaCA9ICIiLmpvaW4oIiUwMngiICUgYyBmb3IgYyBpbiBiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5oZXgoKSwgaCkKKwogICAgICAgICAgICAgICAgICMgbHN0IDo9IGV4cGVjdGVkIG11bHRpLWRpbWVuc2lvbmFsIGxvZ2ljYWwgcmVwcmVzZW50YXRpb24KICAgICAgICAgICAgICAgICAjIGZsYXR0ZW4obHN0KSA6PSBlbGVtZW50cyBpbiBDLW9yZGVyCiAgICAgICAgICAgICAgICAgZmYgPSBmbXQgaWYgZm10IGVsc2UgJ0InCkBAIC0xMDA3LDYgKzEwMTMsNyBAQAogICAgICAgICAjIHNoYXBlLCBzdHJpZGVzLCBvZmZzZXQKICAgICAgICAgc3RydWN0dXJlID0gKAogICAgICAgICAgICAgKFtdLCBbXSwgMCksCisgICAgICAgICAgICAoWzEsMywxXSwgW10sIDApLAogICAgICAgICAgICAgKFsxMl0sIFtdLCAwKSwKICAgICAgICAgICAgIChbMTJdLCBbLTFdLCAxMSksCiAgICAgICAgICAgICAoWzZdLCBbMl0sIDApLApAQCAtMTA3OCw2ICsxMDg1LDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBuZGFycmF5LCBleCwgZ2V0YnVmPVB5QlVGX0FOWV9DT05USUdVT1VTKQogICAgICAgICBuZCA9IG5kYXJyYXkoZXgsIGdldGJ1Zj1QeUJVRl9TSU1QTEUpCiAKKyAgICAgICAgIyBJc3N1ZSAjMjI0NDU6IE5ldyBwcmVjaXNlIGNvbnRpZ3VpdHkgZGVmaW5pdGlvbi4KKyAgICAgICAgZm9yIHNoYXBlIGluIFsxLDEyLDFdLCBbNywwLDddOgorICAgICAgICAgICAgZm9yIG9yZGVyIGluIDAsIE5EX0ZPUlRSQU46CisgICAgICAgICAgICAgICAgZXggPSBuZGFycmF5KGl0ZW1zLCBzaGFwZT1zaGFwZSwgZmxhZ3M9b3JkZXJ8TkRfV1JJVEFCTEUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX2NvbnRpZ3VvdXMoZXgsICdGJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX2NvbnRpZ3VvdXMoZXgsICdDJykpCisKKyAgICAgICAgICAgICAgICBmb3IgZmxhZ3MgaW4gcmVxdWVzdHM6CisgICAgICAgICAgICAgICAgICAgIG5kID0gbmRhcnJheShleCwgZ2V0YnVmPWZsYWdzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfY29udGlndW91cyhuZCwgJ0YnKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX2NvbnRpZ3VvdXMobmQsICdDJykpCisKICAgICBkZWYgdGVzdF9uZGFycmF5X2V4Y2VwdGlvbnMoc2VsZik6CiAgICAgICAgIG5kID0gbmRhcnJheShbOV0sIFsxXSkKICAgICAgICAgbmRtID0gbmRhcnJheShbOV0sIFsxXSwgZmxhZ3M9TkRfVkFSRVhQT1JUKQpAQCAtMjQ1NCw3ICsyNDczLDcgQEAKICAgICBkZWYgdGVzdF9tZW1vcnl2aWV3X3NpemVvZihzZWxmKToKICAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgogICAgICAgICB2c2l6ZSA9IHN1cHBvcnQuY2FsY3ZvYmpzaXplCi0gICAgICAgIGJhc2Vfc3RydWN0ID0gJ1BuaW4gMlAybjJpNVAgM2NQJworICAgICAgICBiYXNlX3N0cnVjdCA9ICdQbmluIDJQMm4yaTVQIFAnCiAgICAgICAgIHBlcl9kaW0gPSAnM24nCiAKICAgICAgICAgaXRlbXMgPSBsaXN0KHJhbmdlKDgpKQpAQCAtMjU0NSw4ICsyNTY0LDcgQEAKICAgICAgICAgICAgIGV4ID0gbmRhcnJheShzaXRlbXMsIHNoYXBlPVsxXSwgZm9ybWF0PXNmbXQpCiAgICAgICAgICAgICBtc3JjID0gbWVtb3J5dmlldyhleCkKICAgICAgICAgICAgIGZvciBkZm10LCBfLCBfIGluIGl0ZXJfZm9ybWF0KDEpOgotICAgICAgICAgICAgICAgIGlmIChub3QgaXNfbWVtb3J5dmlld19mb3JtYXQoc2ZtdCkgb3IKLSAgICAgICAgICAgICAgICAgICAgbm90IGlzX21lbW9yeXZpZXdfZm9ybWF0KGRmbXQpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNfbWVtb3J5dmlld19mb3JtYXQoZGZtdCk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zcmMuY2FzdCwgZGZtdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzMyLy9kc2l6ZV0pCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTI3NTksNiArMjc3NywzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZGltPW5kaW0sIHNoYXBlPXNoYXBlLCBzdHJpZGVzPXN0cmlkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzdD1sc3QsIGNhc3Q9VHJ1ZSkKIAorICAgICAgICBpZiBjdHlwZXM6CisgICAgICAgICAgICAjIGZvcm1hdDogIlR7Pmw6eDo+ZDp5On0iCisgICAgICAgICAgICBjbGFzcyBCRVBvaW50KGN0eXBlcy5CaWdFbmRpYW5TdHJ1Y3R1cmUpOgorICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGN0eXBlcy5jX2xvbmcpLCAoInkiLCBjdHlwZXMuY19kb3VibGUpXQorICAgICAgICAgICAgcG9pbnQgPSBCRVBvaW50KDEwMCwgMjAwLjEpCisgICAgICAgICAgICBtMSA9IG1lbW9yeXZpZXcocG9pbnQpCisgICAgICAgICAgICBtMiA9IG0xLmNhc3QoJ0InKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMi5vYmosIHBvaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMi5pdGVtc2l6ZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTIucmVhZG9ubHksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yLm5kaW0sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yLnNoYXBlLCAobTIubmJ5dGVzLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yLnN0cmlkZXMsICgxLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yLnN1Ym9mZnNldHMsICgpKQorCisgICAgICAgICAgICB4ID0gY3R5cGVzLmNfZG91YmxlKDEuMikKKyAgICAgICAgICAgIG0xID0gbWVtb3J5dmlldyh4KQorICAgICAgICAgICAgbTIgPSBtMS5jYXN0KCdjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTIub2JqLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMi5pdGVtc2l6ZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTIucmVhZG9ubHksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yLm5kaW0sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yLnNoYXBlLCAobTIubmJ5dGVzLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yLnN0cmlkZXMsICgxLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yLnN1Ym9mZnNldHMsICgpKQorCiAgICAgZGVmIHRlc3RfbWVtb3J5dmlld190b2xpc3Qoc2VsZik6CiAKICAgICAgICAgIyBNb3N0IHRvbGlzdCgpIHRlc3RzIGFyZSBpbiBzZWxmLnZlcmlmeSgpIGV0Yy4KQEAgLTI4MTIsNiArMjg1NiwxMyBAQAogICAgICAgICBtID0gbWVtb3J5dmlldyhleCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAiOS4wIGluIG0iLCBsb2NhbHMoKSkKIAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIGFzc2VydF9vdXRfb2ZfYm91bmRzX2Vycm9yKHNlbGYsIGRpbSk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcikgYXMgY206CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRleCBvdXQgb2YgYm91bmRzIG9uIGRpbWVuc2lvbiAlZCIgJSAoZGltLCkpCisKICAgICBkZWYgdGVzdF9tZW1vcnl2aWV3X2luZGV4KHNlbGYpOgogCiAgICAgICAgICMgbmRpbSA9IDAKQEAgLTI4MzgsMTIgKzI4ODksMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbS5fX2dldGl0ZW1fXywgLTgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG0uX19nZXRpdGVtX18sIDgpCiAKLSAgICAgICAgIyBOb3QgaW1wbGVtZW50ZWQ6IG11bHRpZGltZW5zaW9uYWwgc3ViLXZpZXdzCisgICAgICAgICMgbXVsdGktZGltZW5zaW9uYWwKICAgICAgICAgZXggPSBuZGFycmF5KGxpc3QocmFuZ2UoMTIpKSwgc2hhcGU9WzMsNF0sIGZsYWdzPU5EX1dSSVRBQkxFKQogICAgICAgICBtID0gbWVtb3J5dmlldyhleCkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtLl9fZ2V0aXRlbV9fLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtLl9fc2V0aXRlbV9fLCAwLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMCwgMF0sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsyLCAwXSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzIsIDNdLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWy0xLCAtMV0sIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bLTMsIC00XSwgMCkKKworICAgICAgICAjIG91dCBvZiBib3VuZHMKKyAgICAgICAgZm9yIGluZGV4IGluICgzLCAtNCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0X291dF9vZl9ib3VuZHNfZXJyb3IoZGltPTEpOgorICAgICAgICAgICAgICAgIG1baW5kZXgsIDBdCisgICAgICAgIGZvciBpbmRleCBpbiAoNCwgLTUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydF9vdXRfb2ZfYm91bmRzX2Vycm9yKGRpbT0yKToKKyAgICAgICAgICAgICAgICBtWzAsIGluZGV4XQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBtLl9fZ2V0aXRlbV9fLCAoMioqNjQsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBtLl9fZ2V0aXRlbV9fLCAoMCwgMioqNjQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbS5fX2dldGl0ZW1fXywgKDAsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG0uX19nZXRpdGVtX18sICgwLjAsIDAuMCkpCisKKyAgICAgICAgIyBOb3QgaW1wbGVtZW50ZWQ6IG11bHRpZGltZW5zaW9uYWwgc3ViLXZpZXdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG0uX19nZXRpdGVtX18sICgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtLl9fZ2V0aXRlbV9fLCAwKQogCiAgICAgZGVmIHRlc3RfbWVtb3J5dmlld19hc3NpZ24oc2VsZik6CkBAIC0yOTMyLDEwICszMDAyLDI3IEBACiAgICAgICAgIG0gPSBtZW1vcnl2aWV3KGV4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtLl9fc2V0aXRlbV9fLCAwLCAxKQogCi0gICAgICAgICMgTm90IGltcGxlbWVudGVkOiBtdWx0aWRpbWVuc2lvbmFsIHN1Yi12aWV3cworICAgICAgICAjIG11bHRpLWRpbWVuc2lvbmFsCiAgICAgICAgIGV4ID0gbmRhcnJheShsaXN0KHJhbmdlKDEyKSksIHNoYXBlPVszLDRdLCBmbGFncz1ORF9XUklUQUJMRSkKICAgICAgICAgbSA9IG1lbW9yeXZpZXcoZXgpCisgICAgICAgIG1bMCwxXSA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhbMF1bMV0sIDQyKQorICAgICAgICBtWy0xLC0xXSA9IDQzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhbMl1bM10sIDQzKQorICAgICAgICAjIGVycm9ycworICAgICAgICBmb3IgaW5kZXggaW4gKDMsIC00KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRfb3V0X29mX2JvdW5kc19lcnJvcihkaW09MSk6CisgICAgICAgICAgICAgICAgbVtpbmRleCwgMF0gPSAwCisgICAgICAgIGZvciBpbmRleCBpbiAoNCwgLTUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydF9vdXRfb2ZfYm91bmRzX2Vycm9yKGRpbT0yKToKKyAgICAgICAgICAgICAgICBtWzAsIGluZGV4XSA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbS5fX3NldGl0ZW1fXywgKDIqKjY0LCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbS5fX3NldGl0ZW1fXywgKDAsIDIqKjY0KSwgMCkKIAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG0uX19zZXRpdGVtX18sICgwLCAwLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtLl9fc2V0aXRlbV9fLCAoMC4wLCAwLjApLCAwKQorCisgICAgICAgICMgTm90IGltcGxlbWVudGVkOiBtdWx0aWRpbWVuc2lvbmFsIHN1Yi12aWV3cwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBtLl9fc2V0aXRlbV9fLCAwLCBbMiwgM10pCiAKICAgICBkZWYgdGVzdF9tZW1vcnl2aWV3X3NsaWNlKHNlbGYpOgpAQCAtMjk0OCw4ICszMDM1LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5fX3NldGl0ZW1fXywgc2xpY2UoMCwyLDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoWzEsMl0pKQogCi0gICAgICAgICMgaW52YWxpZCBzbGljZSBrZXkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtLl9fZ2V0aXRlbV9fLCAoKSkKKyAgICAgICAgIyAwLWRpbSBzbGljaW5nIChpZGVudGl0eSBmdW5jdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbS5fX2dldGl0ZW1fXywgKCkpCiAKICAgICAgICAgIyBtdWx0aWRpbWVuc2lvbmFsIHNsaWNlcwogICAgICAgICBleCA9IG5kYXJyYXkobGlzdChyYW5nZSgxMikpLCBzaGFwZT1bMTJdLCBmbGFncz1ORF9XUklUQUJMRSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCBkMDBkMGI3Li44Y2MxYjAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC0xNiw3ICsxNiw3IEBACiBpbXBvcnQgd2FybmluZ3MKIGZyb20gb3BlcmF0b3IgaW1wb3J0IG5lZwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCAgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIHRyeToKICAgICBpbXBvcnQgcHR5LCBzaWduYWwKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTMxMiwxMSArMzEyLDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGlsZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGlsZSwgJ3ByaW50KDQyKVxuJywgJzxzdHJpbmc+JywgJ2JhZG1vZGUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21waWxlLCAncHJpbnQoNDIpXG4nLCAnPHN0cmluZz4nLCAnc2luZ2xlJywgMHhmZikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21waWxlLCBjaHIoMCksICdmJywgJ2V4ZWMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21waWxlLCBjaHIoMCksICdmJywgJ2V4ZWMnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBpbGUsICdwYXNzJywgJz8nLCAnZXhlYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9J2V2YWwnLCBzb3VyY2U9JzAnLCBmaWxlbmFtZT0ndG1wJykKICAgICAgICAgY29tcGlsZSgncHJpbnQoIlx4ZTUiKVxuJywgJycsICdleGVjJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21waWxlLCBjaHIoMCksICdmJywgJ2V4ZWMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21waWxlLCBjaHIoMCksICdmJywgJ2V4ZWMnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21waWxlLCBzdHIoJ2EgPSAxJyksICdmJywgJ2JhZCcpCiAKICAgICAgICAgIyB0ZXN0IHRoZSBvcHRpbWl6ZSBhcmd1bWVudApAQCAtMTA5NCw3ICsxMDk0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coLTEsIDAuNSksIDFqKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygtMSwgMS8zKSwgMC41ICsgMC44NjYwMjU0MDM3ODQ0Mzg2aikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvdywgLTEsIC0yLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3csIC0xLCAtMiwgMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93LCAxLCAyLCAwKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG93KQpAQCAtMTY2OCw2ICsxNjY4LDE2MSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsiYmVmb3JlIiwgImFmdGVyIl0sIG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkpCiAKIAorY2xhc3MgVGVzdFR5cGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X25ld190eXBlKHNlbGYpOgorICAgICAgICBBID0gdHlwZSgnQScsICgpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBLl9fbmFtZV9fLCAnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQS5fX3F1YWxuYW1lX18sICdBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBLl9fbW9kdWxlX18sIF9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEEuX19iYXNlc19fLCAob2JqZWN0LCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoQS5fX2Jhc2VfXywgb2JqZWN0KQorICAgICAgICB4ID0gQSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh4KSwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4Ll9fY2xhc3NfXywgQSkKKworICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2hhbSVkJyAlIHNlbGYKKyAgICAgICAgQyA9IHR5cGUoJ0MnLCAoQiwgaW50KSwgeydzcGFtJzogbGFtYmRhIHNlbGY6ICdzcGFtJXMnICUgc2VsZn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX25hbWVfXywgJ0MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19xdWFsbmFtZV9fLCAnQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX21vZHVsZV9fLCBfX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fYmFzZXNfXywgKEIsIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoQy5fX2Jhc2VfXywgaW50KQorICAgICAgICBzZWxmLmFzc2VydEluKCdzcGFtJywgQy5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignaGFtJywgQy5fX2RpY3RfXykKKyAgICAgICAgeCA9IEMoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh4KSwgQykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4Ll9fY2xhc3NfXywgQykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmhhbSgpLCAnaGFtNDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguc3BhbSgpLCAnc3BhbTQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnRvX2J5dGVzKDIsICdsaXR0bGUnKSwgYidceDJhXHgwMCcpCisKKyAgICBkZWYgdGVzdF90eXBlX25ld19rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIGRlZiBoYW0oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdoYW0lZCcgJSBzZWxmCisgICAgICAgIEMgPSB0eXBlLl9fbmV3X18odHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSdDJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlcz0oQiwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0PXsnc3BhbSc6IGxhbWJkYSBzZWxmOiAnc3BhbSVzJyAlIHNlbGZ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19uYW1lX18sICdDJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fcXVhbG5hbWVfXywgJ0MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19tb2R1bGVfXywgX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX2Jhc2VzX18sIChCLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzKEMuX19iYXNlX18sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3BhbScsIEMuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2hhbScsIEMuX19kaWN0X18pCisKKyAgICBkZWYgdGVzdF90eXBlX25hbWUoc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluICdBJywgJ1x4YzQnLCAnXFUwMDAxZjQwZCcsICdCLkEnLCAnNDInLCAnJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgQSA9IHR5cGUobmFtZSwgKCksIHt9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQS5fX25hbWVfXywgbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEEuX19xdWFsbmFtZV9fLCBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQS5fX21vZHVsZV9fLCBfX25hbWVfXykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0FceDAwQicsICgpLCB7fSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0FcdWRjZGNCJywgKCksIHt9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBlKGInQScsICgpLCB7fSkKKworICAgICAgICBDID0gdHlwZSgnQycsICgpLCB7fSkKKyAgICAgICAgZm9yIG5hbWUgaW4gJ0EnLCAnXHhjNCcsICdcVTAwMDFmNDBkJywgJ0IuQScsICc0MicsICcnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFtZT1uYW1lKToKKyAgICAgICAgICAgICAgICBDLl9fbmFtZV9fID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX25hbWVfXywgbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19xdWFsbmFtZV9fLCAnQycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fbW9kdWxlX18sIF9fbmFtZV9fKQorCisgICAgICAgIEEgPSB0eXBlKCdDJywgKCksIHt9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgQS5fX25hbWVfXyA9ICdBXHgwMEInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQS5fX25hbWVfXywgJ0MnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgQS5fX25hbWVfXyA9ICdBXHVkY2RjQicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBLl9fbmFtZV9fLCAnQycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEEuX19uYW1lX18gPSBiJ0EnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQS5fX25hbWVfXywgJ0MnKQorCisgICAgZGVmIHRlc3RfdHlwZV9xdWFsbmFtZShzZWxmKToKKyAgICAgICAgQSA9IHR5cGUoJ0EnLCAoKSwgeydfX3F1YWxuYW1lX18nOiAnQi5DJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQS5fX25hbWVfXywgJ0EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEEuX19xdWFsbmFtZV9fLCAnQi5DJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBLl9fbW9kdWxlX18sIF9fbmFtZV9fKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBlKCdBJywgKCksIHsnX19xdWFsbmFtZV9fJzogYidCJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQS5fX3F1YWxuYW1lX18sICdCLkMnKQorCisgICAgICAgIEEuX19xdWFsbmFtZV9fID0gJ0QuRScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBLl9fbmFtZV9fLCAnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQS5fX3F1YWxuYW1lX18sICdELkUnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBBLl9fcXVhbG5hbWVfXyA9IGInQicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBLl9fcXVhbG5hbWVfXywgJ0QuRScpCisKKyAgICBkZWYgdGVzdF90eXBlX2RvYyhzZWxmKToKKyAgICAgICAgZm9yIGRvYyBpbiAneCcsICdceGM0JywgJ1xVMDAwMWY0MGQnLCAneFx4MDB5JywgYid4JywgNDIsIE5vbmU6CisgICAgICAgICAgICBBID0gdHlwZSgnQScsICgpLCB7J19fZG9jX18nOiBkb2N9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBLl9fZG9jX18sIGRvYykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgdHlwZSgnQScsICgpLCB7J19fZG9jX18nOiAneFx1ZGNkY3knfSkKKworICAgICAgICBBID0gdHlwZSgnQScsICgpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBLl9fZG9jX18sIE5vbmUpCisgICAgICAgIGZvciBkb2MgaW4gJ3gnLCAnXHhjNCcsICdcVTAwMDFmNDBkJywgJ3hceDAweScsICd4XHVkY2RjeScsIGIneCcsIDQyLCBOb25lOgorICAgICAgICAgICAgQS5fX2RvY19fID0gZG9jCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEEuX19kb2NfXywgZG9jKQorCisgICAgZGVmIHRlc3RfYmFkX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBlKCdBJywgKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0EnLCAoKSwge30sICgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBlKCdBJywgKCksIGRpY3Q9e30pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0EnLCBbXSwge30pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0EnLCAoKSwgdHlwZXMuTWFwcGluZ1Byb3h5VHlwZSh7fSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0EnLCAoTm9uZSwpLCB7fSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwZSgnQScsIChib29sLCksIHt9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBlKCdBJywgKGludCwgc3RyKSwge30pCisKKyAgICBkZWYgdGVzdF9iYWRfc2xvdHMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0EnLCAoKSwgeydfX3Nsb3RzX18nOiBiJ3gnfSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwZSgnQScsIChpbnQsKSwgeydfX3Nsb3RzX18nOiAneCd9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBlKCdBJywgKCksIHsnX19zbG90c19fJzogJyd9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBlKCdBJywgKCksIHsnX19zbG90c19fJzogJzQyJ30pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0EnLCAoKSwgeydfX3Nsb3RzX18nOiAneFx4MDB5J30pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB0eXBlKCdBJywgKCksIHsnX19zbG90c19fJzogJ3gnLCAneCc6IDB9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBlKCdBJywgKCksIHsnX19zbG90c19fJzogKCdfX2RpY3RfXycsICdfX2RpY3RfXycpfSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwZSgnQScsICgpLCB7J19fc2xvdHNfXyc6ICgnX193ZWFrcmVmX18nLCAnX193ZWFrcmVmX18nKX0pCisKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwZSgnQScsIChCLCksIHsnX19zbG90c19fJzogJ19fZGljdF9fJ30pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGUoJ0EnLCAoQiwpLCB7J19fc2xvdHNfXyc6ICdfX3dlYWtyZWZfXyd9KQorCisKIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgogICAgIGZyb20gZG9jdGVzdCBpbXBvcnQgRG9jVGVzdFN1aXRlCiAgICAgdGVzdHMuYWRkVGVzdChEb2NUZXN0U3VpdGUoYnVpbHRpbnMpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKaW5kZXggMGE3M2ZjYi4uY2MzMTJiMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CkBAIC0xLDggKzEsNyBAQAogIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIGJ5dGVzIGFuZCBieXRlYXJyYXkgdHlwZXMuCiAKLVhYWCBUaGlzIGlzIGEgbWVzcy4gIENvbW1vbiB0ZXN0cyBzaG91bGQgYmUgbW92ZWQgdG8gYnVmZmVyX3Rlc3RzLnB5LAotd2hpY2ggaXRzZWxmIG91Z2h0IHRvIGJlIHVuaWZpZWQgd2l0aCBzdHJpbmdfdGVzdHMucHkgKGFuZCB0aGUgbGF0dGVyCi1zaG91bGQgYmUgbW9kZXJuaXplZCkuCitYWFggVGhpcyBpcyBhIG1lc3MuICBDb21tb24gdGVzdHMgc2hvdWxkIGJlIHVuaWZpZWQgd2l0aCBzdHJpbmdfdGVzdHMucHkgKGFuZAordGhlIGxhdHRlciBzaG91bGQgYmUgbW9kZXJuaXplZCkuCiAiIiIKIAogaW1wb3J0IG9zCkBAIC0xNiw3ICsxNSw3IEBACiAKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCB0ZXN0LnN0cmluZ190ZXN0cwotaW1wb3J0IHRlc3QuYnVmZmVyX3Rlc3RzCitpbXBvcnQgdGVzdC5saXN0X3Rlc3RzCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgYmlnYWRkcnNwYWNldGVzdCwgTUFYX1B5X3NzaXplX3QKIAogCkBAIC0zMDEsNiArMzAwLDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgsICdceDAwJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCwgJzEyICAgXHgwMCAgIDM0JykKIAorICAgIGRlZiB0ZXN0X2hleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdC5oZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QuaGV4LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuaGV4KCksICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShbMHgxYSwgMHgyYiwgMHgzMF0pLmhleCgpLCAnMWEyYjMwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIlx4MWFceDJiXHgzMCIpLmhleCgpLCAnMWEyYjMwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1vcnl2aWV3KGIiXHgxYVx4MmJceDMwIikuaGV4KCksICcxYTJiMzAnKQorCiAgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4oW10pLCBiIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKFtiIiJdKSwgYiIiKQpAQCAtNDYxLDczICs0NjgsNTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJpbmRleChpLCAzLCA5KSwgNykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5yaW5kZXgsIHcsIDEsIDMpCiAKKyAgICBkZWYgdGVzdF9tb2Qoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ2hlbGxvLCAlYiEnKQorICAgICAgICBvcmlnID0gYgorICAgICAgICBiID0gYiAlIGInd29ybGQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYidoZWxsbywgd29ybGQhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBiJ2hlbGxvLCAlYiEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIgaXMgb3JpZykKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInJXMgLyAxMDAgPSAlZCUlJykKKyAgICAgICAgYSA9IGIgJSAoYidzZXZlbnR5LW5pbmUnLCA3OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiJ3NldmVudHktbmluZSAvIDEwMCA9IDc5JScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShhKSwgc2VsZi50eXBlMnRlc3QpCisKKyAgICBkZWYgdGVzdF9pbW9kKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidoZWxsbywgJWIhJykKKyAgICAgICAgb3JpZyA9IGIKKyAgICAgICAgYiAlPSBiJ3dvcmxkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInaGVsbG8sIHdvcmxkIScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgYidoZWxsbywgJWIhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiIGlzIG9yaWcpCisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJyVzIC8gMTAwID0gJWQlJScpCisgICAgICAgIGIgJT0gKGInc2V2ZW50eS1uaW5lJywgNzkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYidzZXZlbnR5LW5pbmUgLyAxMDAgPSA3OSUnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYiksIHNlbGYudHlwZTJ0ZXN0KQorCisgICAgZGVmIHRlc3Rfcm1vZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgb2JqZWN0KCkgJSBzZWxmLnR5cGUydGVzdChiJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi50eXBlMnRlc3QoYidhYmMnKS5fX3Jtb2RfXygnJXInKSwgTm90SW1wbGVtZW50ZWQpCisKICAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZXBsYWNlKGInaScsIGInYScpLCBiJ21hc3Nhc3NhcHBhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJlcGxhY2UoYidzcycsIGIneCcpLCBiJ21peGl4aXBwaScpCiAKLSAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKLSAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoYidpJyksIFtiJ20nLCBiJ3NzJywgYidzcycsIGIncHAnLCBiJyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoYidzcycpLCBbYidtaScsIGInaScsIGInaXBwaSddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoYid3JyksIFtiXSkKLSAgICAgICAgIyB3aXRoIGtleXdvcmQgYXJncwotICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidhfGJ8Y3xkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KHNlcD1iJ3wnKSwgW2InYScsIGInYicsIGInYycsIGInZCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoYid8JywgbWF4c3BsaXQ9MSksIFtiJ2EnLCBiJ2J8Y3xkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zcGxpdChzZXA9Yid8JywgbWF4c3BsaXQ9MSksIFtiJ2EnLCBiJ2J8Y3xkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zcGxpdChtYXhzcGxpdD0xLCBzZXA9Yid8JyksIFtiJ2EnLCBiJ2J8Y3xkJ10pCi0gICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ2EgYiBjIGQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQobWF4c3BsaXQ9MSksIFtiJ2EnLCBiJ2IgYyBkJ10pCi0KLSAgICBkZWYgdGVzdF9zcGxpdF93aGl0ZXNwYWNlKHNlbGYpOgotICAgICAgICBmb3IgYiBpbiAoYicgIGFyZiAgYmFyZiAgJywgYidhcmZcdGJhcmYnLCBiJ2FyZlxuYmFyZicsIGInYXJmXHJiYXJmJywKLSAgICAgICAgICAgICAgICAgIGInYXJmXGZiYXJmJywgYidhcmZcdmJhcmYnKToKLSAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KCksIFtiJ2FyZicsIGInYmFyZiddKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KE5vbmUpLCBbYidhcmYnLCBiJ2JhcmYnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zcGxpdChOb25lLCAyKSwgW2InYXJmJywgYidiYXJmJ10pCi0gICAgICAgIGZvciBiIGluIChiJ2FceDFDYicsIGInYVx4MURiJywgYidhXHgxRWInLCBiJ2FceDFGYicpOgotICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoKSwgW2JdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykuc3BsaXQoTm9uZSwgMCksIFtiJ2EgIGJiICBjICAnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJyAgYSAgYmIgIGMgICcpLnNwbGl0KE5vbmUsIDEpLCBbYidhJywgYidiYiAgYyAgJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYicgIGEgIGJiICBjICAnKS5zcGxpdChOb25lLCAyKSwgW2InYScsIGInYmInLCBiJ2MgICddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykuc3BsaXQoTm9uZSwgMyksIFtiJ2EnLCBiJ2JiJywgYidjJ10pCi0KICAgICBkZWYgdGVzdF9zcGxpdF9zdHJpbmdfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QoYidhIGInKS5zcGxpdCwgJyAnKQogCiAgICAgZGVmIHRlc3Rfc3BsaXRfdW5pY29kZXdoaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIGZvciBiIGluIChiJ2FceDFDYicsIGInYVx4MURiJywgYidhXHgxRWInLCBiJ2FceDFGYicpOgorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoKSwgW2JdKQogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYiJceDA5XHgwQVx4MEJceDBDXHgwRFx4MUNceDFEXHgxRVx4MUYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoKSwgW2InXHgxY1x4MWRceDFlXHgxZiddKQogCi0gICAgZGVmIHRlc3RfcnNwbGl0KHNlbGYpOgotICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoYidpJyksIFtiJ20nLCBiJ3NzJywgYidzcycsIGIncHAnLCBiJyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KGInc3MnKSwgW2InbWknLCBiJ2knLCBiJ2lwcGknXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzcGxpdChiJ3cnKSwgW2JdKQotICAgICAgICAjIHdpdGgga2V5d29yZCBhcmdzCi0gICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ2F8YnxjfGQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KHNlcD1iJ3wnKSwgW2InYScsIGInYicsIGInYycsIGInZCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KGInfCcsIG1heHNwbGl0PTEpLCBbYidhfGJ8YycsIGInZCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KHNlcD1iJ3wnLCBtYXhzcGxpdD0xKSwgW2InYXxifGMnLCBiJ2QnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzcGxpdChtYXhzcGxpdD0xLCBzZXA9Yid8JyksIFtiJ2F8YnxjJywgYidkJ10pCi0gICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ2EgYiBjIGQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KG1heHNwbGl0PTEpLCBbYidhIGIgYycsIGInZCddKQotCi0gICAgZGVmIHRlc3RfcnNwbGl0X3doaXRlc3BhY2Uoc2VsZik6Ci0gICAgICAgIGZvciBiIGluIChiJyAgYXJmICBiYXJmICAnLCBiJ2FyZlx0YmFyZicsIGInYXJmXG5iYXJmJywgYidhcmZccmJhcmYnLAotICAgICAgICAgICAgICAgICAgYidhcmZcZmJhcmYnLCBiJ2FyZlx2YmFyZicpOgotICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KCksIFtiJ2FyZicsIGInYmFyZiddKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzcGxpdChOb25lKSwgW2InYXJmJywgYidiYXJmJ10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KE5vbmUsIDIpLCBbYidhcmYnLCBiJ2JhcmYnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJyAgYSAgYmIgIGMgICcpLnJzcGxpdChOb25lLCAwKSwgW2InICBhICBiYiAgYyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykucnNwbGl0KE5vbmUsIDEpLCBbYicgIGEgIGJiJywgYidjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYicgIGEgIGJiICBjICAnKS5yc3BsaXQoTm9uZSwgMiksIFtiJyAgYScsIGInYmInLCBiJ2MnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJyAgYSAgYmIgIGMgICcpLnJzcGxpdChOb25lLCAzKSwgW2InYScsIGInYmInLCBiJ2MnXSkKLQogICAgIGRlZiB0ZXN0X3JzcGxpdF9zdHJpbmdfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QoYidhIGInKS5yc3BsaXQsICcgJykKIApAQCAtNTY1LDQ1ICs1NDksMTMgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhKQogCiAgICAgICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG5leHQoaXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgaWYgbm90IGI6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmV4dChpdCkKICAgICAgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKICAgICAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGFbMTpdKQogCi0gICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6Ci0gICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnN0cmlwKGInaScpLCBiJ21pc3Npc3NpcHAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoYidtJyksIGInaXNzaXNzaXBwaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zdHJpcChiJ3BpJyksIGInbWlzc2lzcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zdHJpcChiJ2ltJyksIGInc3Npc3NpcHAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoYidwaW0nKSwgYidzc2lzcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zdHJpcChiKSwgYicnKQotCi0gICAgZGVmIHRlc3RfbHN0cmlwKHNlbGYpOgotICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5sc3RyaXAoYidpJyksIGInbWlzc2lzc2lwcGknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKGInbScpLCBiJ2lzc2lzc2lwcGknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKGIncGknKSwgYidtaXNzaXNzaXBwaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5sc3RyaXAoYidpbScpLCBiJ3NzaXNzaXBwaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5sc3RyaXAoYidwaW0nKSwgYidzc2lzc2lwcGknKQotCi0gICAgZGVmIHRlc3RfcnN0cmlwKHNlbGYpOgotICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3RyaXAoYidpJyksIGInbWlzc2lzc2lwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3RyaXAoYidtJyksIGInbWlzc2lzc2lwcGknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnN0cmlwKGIncGknKSwgYidtaXNzaXNzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzdHJpcChiJ2ltJyksIGInbWlzc2lzc2lwcCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3RyaXAoYidwaW0nKSwgYidtaXNzaXNzJykKLQotICAgIGRlZiB0ZXN0X3N0cmlwX3doaXRlc3BhY2Uoc2VsZik6Ci0gICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJyBcdFxuXHJcZlx2YWJjIFx0XG5cclxmXHYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoKSwgYidhYmMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKCksIGInYWJjIFx0XG5cclxmXHYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnN0cmlwKCksIGInIFx0XG5cclxmXHZhYmMnKQotCiAgICAgZGVmIHRlc3Rfc3RyaXBfYnl0ZWFycmF5KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInYWJjJykuc3RyaXAobWVtb3J5dmlldyhiJ2FjJykpLCBiJ2InKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInYWJjJykubHN0cmlwKG1lbW9yeXZpZXcoYidhYycpKSwgYidiYycpCkBAIC03MTgsMTAgKzY3MCwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgcidcYmVuZHN3aXRoXGInLCBiLmVuZHN3aXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQogCisgICAgZGVmIHRlc3RfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZik6CisgICAgICAgIHRlc3Quc3VwcG9ydC5jaGVja19mcmVlX2FmdGVyX2l0ZXJhdGluZyhzZWxmLCBpdGVyLCBzZWxmLnR5cGUydGVzdCkKKyAgICAgICAgdGVzdC5zdXBwb3J0LmNoZWNrX2ZyZWVfYWZ0ZXJfaXRlcmF0aW5nKHNlbGYsIHJldmVyc2VkLCBzZWxmLnR5cGUydGVzdCkKKwogCiBjbGFzcyBCeXRlc1Rlc3QoQmFzZUJ5dGVzVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHR5cGUydGVzdCA9IGJ5dGVzCiAKKyAgICBkZWYgdGVzdF9nZXRpdGVtX2Vycm9yKHNlbGYpOgorICAgICAgICBtc2cgPSAiYnl0ZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3Igc2xpY2VzIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgYidweXRob24nWydhJ10KKwogICAgIGRlZiB0ZXN0X2J1ZmZlcl9pc19yZWFkb25seShzZWxmKToKICAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKICAgICAgICAgd2l0aCBvcGVuKGZkLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKQEAgLTc0NCw2ICs3MDUsMTIgQEAKICAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoQSgpKSwgYidhJykKKyAgICAgICAgIyBJc3N1ZSAjMjU3NjYKKyAgICAgICAgY2xhc3MgQShzdHIpOgorICAgICAgICAgICAgZGVmIF9fYnl0ZXNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYidhYmMnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoQSgnXHUyMGFjJykpLCBiJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoQSgnXHUyMGFjJyksICdpc284ODU5LTE1JyksIGInXHhhNCcpCiAgICAgICAgICMgSXNzdWUgIzI0NzMxCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBkZWYgX19ieXRlc19fKHNlbGYpOgpAQCAtNzg0LDYgKzc1MSwxNyBAQAogY2xhc3MgQnl0ZUFycmF5VGVzdChCYXNlQnl0ZXNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5CiAKKyAgICBkZWYgdGVzdF9nZXRpdGVtX2Vycm9yKHNlbGYpOgorICAgICAgICBtc2cgPSAiYnl0ZWFycmF5IGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciBzbGljZXMiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBieXRlYXJyYXkoYidweXRob24nKVsnYSddCisKKyAgICBkZWYgdGVzdF9zZXRpdGVtX2Vycm9yKHNlbGYpOgorICAgICAgICBtc2cgPSAiYnl0ZWFycmF5IGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciBzbGljZXMiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiID0gYnl0ZWFycmF5KGIncHl0aG9uJykKKyAgICAgICAgICAgIGJbJ2EnXSA9ICJweXRob24iCisKICAgICBkZWYgdGVzdF9ub2hhc2goc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgYnl0ZWFycmF5KCkpCiAKQEAgLTExMDQsNiArMTA4MiwxMyBAQAogICAgICAgICBiLnJlbW92ZShJbmRleGFibGUob3JkKCdlJykpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInJykKIAorICAgICAgICAjIHRlc3QgdmFsdWVzIG91dHNpZGUgb2YgdGhlIGFzY2lpIHJhbmdlOiAoMCwgMTI3KQorICAgICAgICBjID0gYnl0ZWFycmF5KFsxMjYsIDEyNywgMTI4LCAxMjldKQorICAgICAgICBjLnJlbW92ZSgxMjcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYnl0ZXMoWzEyNiwgMTI4LCAxMjldKSkKKyAgICAgICAgYy5yZW1vdmUoMTI5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGJ5dGVzKFsxMjYsIDEyOF0pKQorCiAgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgogICAgICAgICBiID0gYnl0ZWFycmF5KGInd29ybGQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucG9wKCksIG9yZCgnZCcpKQpAQCAtMTIwNSw2ICsxMTkwLDU4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBkZWxzbGljZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQogCisgICAgQHRlc3Quc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9vYnNvbGV0ZV93cml0ZV9sb2NrKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YnVmZmVyX3dpdGhfbnVsbF92aWV3CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBnZXRidWZmZXJfd2l0aF9udWxsX3ZpZXcsIGJ5dGVhcnJheSgpKQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3JfcGlja2xpbmcyKHNlbGYpOgorICAgICAgICBvcmlnID0gYnl0ZWFycmF5KGInYWJjJykKKyAgICAgICAgZGF0YSA9IGxpc3QoYidxd2VydHknKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICMgaW5pdGlhbCBpdGVyYXRvcgorICAgICAgICAgICAgaXRvcmlnID0gaXRlcihvcmlnKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcygoaXRvcmlnLCBvcmlnKSwgcHJvdG8pCisgICAgICAgICAgICBpdCwgYiA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgYls6XSA9IGRhdGEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdCksIHR5cGUoaXRvcmlnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGEpCisKKyAgICAgICAgICAgICMgcnVubmluZyBpdGVyYXRvcgorICAgICAgICAgICAgbmV4dChpdG9yaWcpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKChpdG9yaWcsIG9yaWcpLCBwcm90bykKKyAgICAgICAgICAgIGl0LCBiID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBiWzpdID0gZGF0YQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0KSwgdHlwZShpdG9yaWcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgZGF0YVsxOl0pCisKKyAgICAgICAgICAgICMgZW1wdHkgaXRlcmF0b3IKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihvcmlnKSk6CisgICAgICAgICAgICAgICAgbmV4dChpdG9yaWcpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKChpdG9yaWcsIG9yaWcpLCBwcm90bykKKyAgICAgICAgICAgIGl0LCBiID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBiWzpdID0gZGF0YQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0KSwgdHlwZShpdG9yaWcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgZGF0YVtsZW4ob3JpZyk6XSkKKworICAgICAgICAgICAgIyBleGhhdXN0ZWQgaXRlcmF0b3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0b3JpZykKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoKGl0b3JpZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGIgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGJbOl0gPSBkYXRhCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKKworICAgIHRlc3RfZXhoYXVzdGVkX2l0ZXJhdG9yID0gdGVzdC5saXN0X3Rlc3RzLkNvbW1vblRlc3QudGVzdF9leGhhdXN0ZWRfaXRlcmF0b3IKKworICAgIGRlZiB0ZXN0X2l0ZXJhdG9yX2xlbmd0aF9oaW50KHNlbGYpOgorICAgICAgICAjIElzc3VlIDI3NDQzOiBfX2xlbmd0aF9oaW50X18gY2FuIHJldHVybiBuZWdhdGl2ZSBpbnRlZ2VyCisgICAgICAgIGJhID0gYnl0ZWFycmF5KGInYWInKQorICAgICAgICBpdCA9IGl0ZXIoYmEpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIGJhLmNsZWFyKCkKKyAgICAgICAgIyBTaG91bGRuJ3QgcmFpc2UgYW4gZXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisKIAogY2xhc3MgQXNzb3J0ZWRCeXRlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMKQEAgLTEzMTUsMjAgKzEzNTIsMzUgQEAKICAgICAgICAgYiA9IGJ5dGVhcnJheSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5yZXBsYWNlKGInJywgYicnKSBpcyBiKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLmZsYWdzLmJ5dGVzX3dhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJ5dGVzV2FybmluZyBpcyBuZWVkZWQgZm9yIHRoaXMgdGVzdDogdXNlIC1iYiBvcHRpb24iKQogICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6Ci0gICAgICAgIGlmIHN5cy5mbGFncy5ieXRlc193YXJuaW5nOgotICAgICAgICAgICAgZGVmIGJ5dGVzX3dhcm5pbmcoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gdGVzdC5zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgQnl0ZXNXYXJuaW5nKSkKLSAgICAgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgotICAgICAgICAgICAgICAgIGInJyA9PSAnJwotICAgICAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCk6Ci0gICAgICAgICAgICAgICAgYicnICE9ICcnCi0gICAgICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKToKLSAgICAgICAgICAgICAgICBieXRlYXJyYXkoYicnKSA9PSAnJwotICAgICAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCk6Ci0gICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInJykgIT0gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkJ5dGVzV2FybmluZyBpcyBuZWVkZWQgZm9yIHRoaXMgdGVzdDogdXNlIC1iYiBvcHRpb24iKQorICAgICAgICBkZWYgYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgcmV0dXJuIHRlc3Quc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIEJ5dGVzV2FybmluZykpCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgYicnID09ICcnCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgJycgPT0gYicnCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgYicnICE9ICcnCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgJycgIT0gYicnCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgYnl0ZWFycmF5KGInJykgPT0gJycKKyAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCk6CisgICAgICAgICAgICAnJyA9PSBieXRlYXJyYXkoYicnKQorICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKToKKyAgICAgICAgICAgIGJ5dGVhcnJheShiJycpICE9ICcnCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgJycgIT0gYnl0ZWFycmF5KGInJykKKyAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCk6CisgICAgICAgICAgICBiJ1wwJyA9PSAwCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgMCA9PSBiJ1wwJworICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKToKKyAgICAgICAgICAgIGInXDAnICE9IDAKKyAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCk6CisgICAgICAgICAgICAwICE9IGInXDAnCiAKICAgICAjIE9wdGltaXphdGlvbnM6CiAgICAgIyBfX2l0ZXJfXz8gKG9wdGltaXphdGlvbikKQEAgLTEzMzcsNyArMTM4OSw3IEBACiAgICAgIyBYWFggTW9yZSBzdHJpbmcgbWV0aG9kcz8gIChUaG9zZSB0aGF0IGRvbid0IHVzZSBjaGFyYWN0ZXIgcHJvcGVydGllcykKIAogICAgICMgVGhlcmUgYXJlIHRlc3RzIGluIHN0cmluZ190ZXN0cy5weSB0aGF0IGFyZSBtb3JlCi0gICAgIyBjb21wcmVoZW5zaXZlIGZvciB0aGluZ3MgbGlrZSBzcGxpdCwgcGFydGl0aW9uLCBldGMuCisgICAgIyBjb21wcmVoZW5zaXZlIGZvciB0aGluZ3MgbGlrZSBwYXJ0aXRpb24sIGV0Yy4KICAgICAjIFVuZm9ydHVuYXRlbHkgdGhleSBhcmUgYWxsIGJ1bmRsZWQgd2l0aCB0ZXN0cyB0aGF0CiAgICAgIyBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciBieXRlcwogCkBAIC0xMzQ1LDggKzEzOTcsNyBAQAogICAgICMgdGhlIHJlc3QgdGhhdCBtYWtlIHNlbnNlICh0aGUgY29kZSBjYW4gYmUgY2xlYW5lZCB1cCB0byB1c2UgbW9kZXJuCiAgICAgIyB1bml0dGVzdCBtZXRob2RzIGF0IHRoZSBzYW1lIHRpbWUpLgogCi1jbGFzcyBCeXRlYXJyYXlQRVAzMTM3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdGVzdC5idWZmZXJfdGVzdHMuTWl4aW5CeXRlc0J1ZmZlckNvbW1vblRlc3RzKToKK2NsYXNzIEJ5dGVhcnJheVBFUDMxMzdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgbWFyc2hhbChzZWxmLCB4KToKICAgICAgICAgcmV0dXJuIGJ5dGVhcnJheSh4KQogCkBAIC0xMzc0LDQxICsxNDI1LDI4IEBACiAKIAogY2xhc3MgRml4ZWRTdHJpbmdUZXN0KHRlc3Quc3RyaW5nX3Rlc3RzLkJhc2VUZXN0KToKLQogICAgIGRlZiBmaXh0eXBlKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgotICAgICAgICAgICAgcmV0dXJuIG9iai5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGUydGVzdChvYmouZW5jb2RlKCJ1dGYtOCIpKQogICAgICAgICByZXR1cm4gc3VwZXIoKS5maXh0eXBlKG9iaikKIAotICAgICMgQ3VycmVudGx5IHRoZSBieXRlcyBjb250YWlubWVudCB0ZXN0aW5nIHVzZXMgYSBzaW5nbGUgaW50ZWdlcgotICAgICMgdmFsdWUuIFRoaXMgbWF5IG5vdCBiZSB0aGUgZmluYWwgZGVzaWduLCBidXQgdW50aWwgdGhlbiB0aGUKLSAgICAjIGJ5dGVzIHNlY3Rpb24gd2l0aCBpbiBhIGJ5dGVzIGNvbnRhaW5tZW50IG5vdCB2YWxpZAotICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgotICAgICAgICBwYXNzCi0gICAgZGVmIHRlc3RfZXhwYW5kdGFicyhzZWxmKToKLSAgICAgICAgcGFzcwotICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYpOgotICAgICAgICBwYXNzCi0gICAgZGVmIHRlc3RfbG93ZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICBjb250YWluc19ieXRlcyA9IFRydWUKIAogY2xhc3MgQnl0ZUFycmF5QXNTdHJpbmdUZXN0KEZpeGVkU3RyaW5nVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHR5cGUydGVzdCA9IGJ5dGVhcnJheQotICAgIGNvbnRhaW5zX2J5dGVzID0gVHJ1ZQogCiBjbGFzcyBCeXRlc0FzU3RyaW5nVGVzdChGaXhlZFN0cmluZ1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICB0eXBlMnRlc3QgPSBieXRlcwotICAgIGNvbnRhaW5zX2J5dGVzID0gVHJ1ZQogCiAKIGNsYXNzIFN1YmNsYXNzVGVzdDoKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLnN1YmNsYXNzMnRlc3QsIHNlbGYudHlwZTJ0ZXN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuc3ViY2xhc3MydGVzdCgpLCBzZWxmLnR5cGUydGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi50eXBlMnRlc3QsIHNlbGYuYmFzZXR5cGUpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50eXBlMnRlc3QoKSwgc2VsZi5iYXNldHlwZSkKIAogICAgICAgICBhLCBiID0gYiJhYmNkIiwgYiJlZmdoIgotICAgICAgICBfYSwgX2IgPSBzZWxmLnN1YmNsYXNzMnRlc3QoYSksIHNlbGYuc3ViY2xhc3MydGVzdChiKQorICAgICAgICBfYSwgX2IgPSBzZWxmLnR5cGUydGVzdChhKSwgc2VsZi50eXBlMnRlc3QoYikKIAogICAgICAgICAjIHRlc3QgY29tcGFyaXNvbiBvcGVyYXRvcnMgd2l0aCBzdWJjbGFzcyBpbnN0YW5jZXMKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9hID09IF9hKQpAQCAtMTQzMSwxOSArMTQ2OSwxOSBAQAogICAgICAgICAjIE1ha2Ugc3VyZSBqb2luIHJldHVybnMgYSBORVcgb2JqZWN0IGZvciBzaW5nbGUgaXRlbSBzZXF1ZW5jZXMKICAgICAgICAgIyBpbnZvbHZpbmcgYSBzdWJjbGFzcy4KICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBpdCBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KLSAgICAgICAgczEgPSBzZWxmLnN1YmNsYXNzMnRlc3QoYiJhYmNkIikKLSAgICAgICAgczIgPSBzZWxmLnR5cGUydGVzdCgpLmpvaW4oW3MxXSkKKyAgICAgICAgczEgPSBzZWxmLnR5cGUydGVzdChiImFiY2QiKQorICAgICAgICBzMiA9IHNlbGYuYmFzZXR5cGUoKS5qb2luKFtzMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBub3QgczIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyBzZWxmLnR5cGUydGVzdCwgdHlwZShzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyBzZWxmLmJhc2V0eXBlLCB0eXBlKHMyKSkKIAogICAgICAgICAjIFRlc3QgcmV2ZXJzZSwgY2FsbGluZyBqb2luIG9uIHN1YmNsYXNzCiAgICAgICAgIHMzID0gczEuam9pbihbYiJhYmNkIl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMzKSBpcyBzZWxmLnR5cGUydGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczMpIGlzIHNlbGYuYmFzZXR5cGUpCiAKICAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6Ci0gICAgICAgIGEgPSBzZWxmLnN1YmNsYXNzMnRlc3QoYiJhYmNkIikKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KGIiYWJjZCIpCiAgICAgICAgIGEueCA9IDEwCi0gICAgICAgIGEueSA9IHNlbGYuc3ViY2xhc3MydGVzdChiImVmZ2giKQorICAgICAgICBhLnkgPSBzZWxmLnR5cGUydGVzdChiImVmZ2giKQogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGIgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGEsIHByb3RvKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQpAQCAtMTQ1NCw5ICsxNDkyLDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhLnkpLCB0eXBlKGIueSkpCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgotICAgICAgICBhID0gc2VsZi5zdWJjbGFzczJ0ZXN0KGIiYWJjZCIpCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChiImFiY2QiKQogICAgICAgICBhLnggPSAxMAotICAgICAgICBhLnkgPSBzZWxmLnN1YmNsYXNzMnRlc3QoYiJlZmdoIikKKyAgICAgICAgYS55ID0gc2VsZi50eXBlMnRlc3QoYiJlZmdoIikKICAgICAgICAgZm9yIGNvcHlfbWV0aG9kIGluIChjb3B5LmNvcHksIGNvcHkuZGVlcGNvcHkpOgogICAgICAgICAgICAgYiA9IGNvcHlfbWV0aG9kKGEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKQEAgLTE0NjYsNiArMTUwNCw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIHR5cGUoYikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYS55KSwgdHlwZShiLnkpKQogCisgICAgdGVzdF9mcm9taGV4ID0gQmFzZUJ5dGVzVGVzdC50ZXN0X2Zyb21oZXgKKwogCiBjbGFzcyBCeXRlQXJyYXlTdWJjbGFzcyhieXRlYXJyYXkpOgogICAgIHBhc3MKQEAgLTE0NzcsOCArMTUxNyw4IEBACiAgICAgcGFzcwogCiBjbGFzcyBCeXRlQXJyYXlTdWJjbGFzc1Rlc3QoU3ViY2xhc3NUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5Ci0gICAgc3ViY2xhc3MydGVzdCA9IEJ5dGVBcnJheVN1YmNsYXNzCisgICAgYmFzZXR5cGUgPSBieXRlYXJyYXkKKyAgICB0eXBlMnRlc3QgPSBCeXRlQXJyYXlTdWJjbGFzcwogCiAgICAgZGVmIHRlc3RfaW5pdF9vdmVycmlkZShzZWxmKToKICAgICAgICAgY2xhc3Mgc3ViY2xhc3MoYnl0ZWFycmF5KToKQEAgLTE0OTIsOCArMTUzMiw4IEBACiAKIAogY2xhc3MgQnl0ZXNTdWJjbGFzc1Rlc3QoU3ViY2xhc3NUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgdHlwZTJ0ZXN0ID0gYnl0ZXMKLSAgICBzdWJjbGFzczJ0ZXN0ID0gQnl0ZXNTdWJjbGFzcworICAgIGJhc2V0eXBlID0gYnl0ZXMKKyAgICB0eXBlMnRlc3QgPSBCeXRlc1N1YmNsYXNzCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnoyLnB5IGIvTGliL3Rlc3QvdGVzdF9iejIucHkKaW5kZXggYmVlZjI3NS4uYTFlNGI4ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iejIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iejIucHkKQEAgLTIsMTMgKzIsMTUgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBiaWdtZW10ZXN0LCBfNEcKIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGlvIGltcG9ydCBCeXRlc0lPCitmcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBERUZBVUxUX0JVRkZFUl9TSVpFCiBpbXBvcnQgb3MKIGltcG9ydCBwaWNrbGUKK2ltcG9ydCBnbG9iCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHVubGluaworaW1wb3J0IF9jb21wcmVzc2lvbgogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwpAQCAtNTEsNiArNTMsMTkgQEAKICAgICBFTVBUWV9EQVRBID0gYidCWmg5XHgxN3JFOFBceDkwXHgwMFx4MDBceDAwXHgwMCcKICAgICBCQURfREFUQSA9IGIndGhpcyBpcyBub3QgYSB2YWxpZCBiemlwMiBmaWxlJwogCisgICAgIyBTb21lIHRlc3RzIG5lZWQgbW9yZSB0aGFuIG9uZSBibG9jayBvZiB1bmNvbXByZXNzZWQgZGF0YS4gU2luY2Ugb25lIGJsb2NrCisgICAgIyBpcyBhdCBsZWFzdCAxMDAga0IsIHdlIGdhdGhlciBzb21lIGRhdGEgZHluYW1pY2FsbHkgYW5kIGNvbXByZXNzIGl0LgorICAgICMgTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGF0IGNvbXByZXNzaW9uIHdvcmtzIGNvcnJlY3RseSwgc28gd2UgY2Fubm90CisgICAgIyBzaW1wbHkgdXNlIHRoZSBiaWdnZXIgdGVzdCBkYXRhIGZvciBhbGwgdGVzdHMuCisgICAgdGVzdF9zaXplID0gMAorICAgIEJJR19URVhUID0gYnl0ZWFycmF5KDEyOCoxMDI0KQorICAgIGZvciBmbmFtZSBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcqLnB5JykpOgorICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICdyYicpIGFzIGZoOgorICAgICAgICAgICAgdGVzdF9zaXplICs9IGZoLnJlYWRpbnRvKG1lbW9yeXZpZXcoQklHX1RFWFQpW3Rlc3Rfc2l6ZTpdKQorICAgICAgICBpZiB0ZXN0X3NpemUgPiAxMjgqMTAyNDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgQklHX0RBVEEgPSBiejIuY29tcHJlc3MoQklHX1RFWFQsIGNvbXByZXNzbGV2ZWw9MSkKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5maWxlbmFtZSA9IHN1cHBvcnQuVEVTVEZOCiAKQEAgLTk2LDcgKzExMSw3IEBACiAgICAgZGVmIHRlc3RSZWFkKHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKICAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBmbG9hdCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQogCiAgICAgZGVmIHRlc3RSZWFkQmFkRmlsZShzZWxmKToKQEAgLTEwNywyMSArMTIyLDIxIEBACiAgICAgZGVmIHRlc3RSZWFkTXVsdGlTdHJlYW0oc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoc3RyZWFtcz01KQogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWQsIGZsb2F0KCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFQgKiA1KQogCiAgICAgZGVmIHRlc3RSZWFkTW9ua2V5TXVsdGlTdHJlYW0oc2VsZik6CiAgICAgICAgICMgVGVzdCBCWjJGaWxlLnJlYWQoKSBvbiBhIG11bHRpLXN0cmVhbSBhcmNoaXZlIHdoZXJlIGEgc3RyZWFtCiAgICAgICAgICMgYm91bmRhcnkgY29pbmNpZGVzIHdpdGggdGhlIGVuZCBvZiB0aGUgcmF3IHJlYWQgYnVmZmVyLgotICAgICAgICBidWZmZXJfc2l6ZSA9IGJ6Mi5fQlVGRkVSX1NJWkUKLSAgICAgICAgYnoyLl9CVUZGRVJfU0laRSA9IGxlbihzZWxmLkRBVEEpCisgICAgICAgIGJ1ZmZlcl9zaXplID0gX2NvbXByZXNzaW9uLkJVRkZFUl9TSVpFCisgICAgICAgIF9jb21wcmVzc2lvbi5CVUZGRVJfU0laRSA9IGxlbihzZWxmLkRBVEEpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoc3RyZWFtcz01KQogICAgICAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWQsIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWQsIGZsb2F0KCkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUICogNSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGJ6Mi5fQlVGRkVSX1NJWkUgPSBidWZmZXJfc2l6ZQorICAgICAgICAgICAgX2NvbXByZXNzaW9uLkJVRkZFUl9TSVpFID0gYnVmZmVyX3NpemUKIAogICAgIGRlZiB0ZXN0UmVhZFRyYWlsaW5nSnVuayhzZWxmKToKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZShzdWZmaXg9c2VsZi5CQURfREFUQSkKQEAgLTEzNiw3ICsxNTEsNyBAQAogICAgIGRlZiB0ZXN0UmVhZDAoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWQsIGZsb2F0KCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgwKSwgYiIiKQogCiAgICAgZGVmIHRlc3RSZWFkQ2h1bmsxMChzZWxmKToKQEAgLTU0NSwxMyArNTYwLDI0IEBACiAgICAgICAgIHdpdGggQloyRmlsZShzdHJfZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLkRBVEEpCiAKKyAgICBkZWYgdGVzdERlY29tcHJlc3NMaW1pdGVkKHNlbGYpOgorICAgICAgICAiIiJEZWNvbXByZXNzZWQgZGF0YSBidWZmZXJpbmcgc2hvdWxkIGJlIGxpbWl0ZWQiIiIKKyAgICAgICAgYm9tYiA9IGJ6Mi5jb21wcmVzcyhieXRlcyhpbnQoMmU2KSksIGNvbXByZXNzbGV2ZWw9OSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGxlbihib21iKSwgX2NvbXByZXNzaW9uLkJVRkZFUl9TSVpFKQorCisgICAgICAgIGRlY29tcCA9IEJaMkZpbGUoQnl0ZXNJTyhib21iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcygxKSwgZGVjb21wLnJlYWQoMSkpCisgICAgICAgIG1heF9kZWNvbXAgPSAxICsgREVGQVVMVF9CVUZGRVJfU0laRQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChkZWNvbXAuX2J1ZmZlci5yYXcudGVsbCgpLCBtYXhfZGVjb21wLAorICAgICAgICAgICAgIkV4Y2Vzc2l2ZSBhbW91bnQgb2YgZGF0YSB3YXMgZGVjb21wcmVzc2VkIikKKwogCiAgICAgIyBUZXN0cyBmb3IgYSBCWjJGaWxlIHdyYXBwaW5nIGFub3RoZXIgZmlsZSBvYmplY3Q6CiAKICAgICBkZWYgdGVzdFJlYWRCeXRlc0lPKHNlbGYpOgogICAgICAgICB3aXRoIEJ5dGVzSU8oc2VsZi5EQVRBKSBhcyBiaW86CiAgICAgICAgICAgICB3aXRoIEJaMkZpbGUoYmlvKSBhcyBiejJmOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBmbG9hdCgpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmlvLmNsb3NlZCkKIApAQCAtNzA1LDYgKzczMSw5NSBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhCWjJEZWNvbXByZXNzb3IoKSwgcHJvdG8pCiAKKyAgICBkZWYgdGVzdERlY29tcHJlc3NvckNodW5rc01heHNpemUoc2VsZik6CisgICAgICAgIGJ6ZCA9IEJaMkRlY29tcHJlc3NvcigpCisgICAgICAgIG1heF9sZW5ndGggPSAxMDAKKyAgICAgICAgb3V0ID0gW10KKworICAgICAgICAjIEZlZWQgc29tZSBpbnB1dAorICAgICAgICBsZW5fID0gbGVuKHNlbGYuQklHX0RBVEEpIC0gNjQKKyAgICAgICAgb3V0LmFwcGVuZChiemQuZGVjb21wcmVzcyhzZWxmLkJJR19EQVRBWzpsZW5fXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGVuZ3RoPW1heF9sZW5ndGgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ6ZC5uZWVkc19pbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3V0Wy0xXSksIG1heF9sZW5ndGgpCisKKyAgICAgICAgIyBSZXRyaWV2ZSBtb3JlIGRhdGEgd2l0aG91dCBwcm92aWRpbmcgbW9yZSBpbnB1dAorICAgICAgICBvdXQuYXBwZW5kKGJ6ZC5kZWNvbXByZXNzKGInJywgbWF4X2xlbmd0aD1tYXhfbGVuZ3RoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiemQubmVlZHNfaW5wdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91dFstMV0pLCBtYXhfbGVuZ3RoKQorCisgICAgICAgICMgUmV0cmlldmUgbW9yZSBkYXRhIHdoaWxlIHByb3ZpZGluZyBtb3JlIGlucHV0CisgICAgICAgIG91dC5hcHBlbmQoYnpkLmRlY29tcHJlc3Moc2VsZi5CSUdfREFUQVtsZW5fOl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xlbmd0aD1tYXhfbGVuZ3RoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobGVuKG91dFstMV0pLCBtYXhfbGVuZ3RoKQorCisgICAgICAgICMgUmV0cmlldmUgcmVtYWluaW5nIHVuY29tcHJlc3NlZCBkYXRhCisgICAgICAgIHdoaWxlIG5vdCBiemQuZW9mOgorICAgICAgICAgICAgb3V0LmFwcGVuZChiemQuZGVjb21wcmVzcyhiJycsIG1heF9sZW5ndGg9bWF4X2xlbmd0aCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4ob3V0Wy0xXSksIG1heF9sZW5ndGgpCisKKyAgICAgICAgb3V0ID0gYiIiLmpvaW4ob3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgc2VsZi5CSUdfVEVYVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiemQudW51c2VkX2RhdGEsIGIiIikKKworICAgIGRlZiB0ZXN0X2RlY29tcHJlc3Nvcl9pbnB1dGJ1Zl8xKHNlbGYpOgorICAgICAgICAjIFRlc3QgcmV1c2luZyBpbnB1dCBidWZmZXIgYWZ0ZXIgbW92aW5nIGV4aXN0aW5nCisgICAgICAgICMgY29udGVudHMgdG8gYmVnaW5uaW5nCisgICAgICAgIGJ6ZCA9IEJaMkRlY29tcHJlc3NvcigpCisgICAgICAgIG91dCA9IFtdCisKKyAgICAgICAgIyBDcmVhdGUgaW5wdXQgYnVmZmVyIGFuZCBmaWxsIGl0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnpkLmRlY29tcHJlc3Moc2VsZi5EQVRBWzoxMDBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9sZW5ndGg9MCksIGInJykKKworICAgICAgICAjIFJldHJpZXZlIHNvbWUgcmVzdWx0cywgZnJlZWluZyBjYXBhY2l0eSBhdCBiZWdpbm5pbmcKKyAgICAgICAgIyBvZiBpbnB1dCBidWZmZXIKKyAgICAgICAgb3V0LmFwcGVuZChiemQuZGVjb21wcmVzcyhiJycsIDIpKQorCisgICAgICAgICMgQWRkIG1vcmUgZGF0YSB0aGF0IGZpdHMgaW50byBpbnB1dCBidWZmZXIgYWZ0ZXIKKyAgICAgICAgIyBtb3ZpbmcgZXhpc3RpbmcgZGF0YSB0byBiZWdpbm5pbmcKKyAgICAgICAgb3V0LmFwcGVuZChiemQuZGVjb21wcmVzcyhzZWxmLkRBVEFbMTAwOjEwNV0sIDE1KSkKKworICAgICAgICAjIERlY29tcHJlc3MgcmVzdCBvZiBkYXRhCisgICAgICAgIG91dC5hcHBlbmQoYnpkLmRlY29tcHJlc3Moc2VsZi5EQVRBWzEwNTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbihvdXQpLCBzZWxmLlRFWFQpCisKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzb3JfaW5wdXRidWZfMihzZWxmKToKKyAgICAgICAgIyBUZXN0IHJldXNpbmcgaW5wdXQgYnVmZmVyIGJ5IGFwcGVuZGluZyBkYXRhIGF0IHRoZQorICAgICAgICAjIGVuZCByaWdodCBhd2F5CisgICAgICAgIGJ6ZCA9IEJaMkRlY29tcHJlc3NvcigpCisgICAgICAgIG91dCA9IFtdCisKKyAgICAgICAgIyBDcmVhdGUgaW5wdXQgYnVmZmVyIGFuZCBlbXB0eSBpdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6ZC5kZWNvbXByZXNzKHNlbGYuREFUQVs6MjAwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGVuZ3RoPTApLCBiJycpCisgICAgICAgIG91dC5hcHBlbmQoYnpkLmRlY29tcHJlc3MoYicnKSkKKworICAgICAgICAjIEZpbGwgYnVmZmVyIHdpdGggbmV3IGRhdGEKKyAgICAgICAgb3V0LmFwcGVuZChiemQuZGVjb21wcmVzcyhzZWxmLkRBVEFbMjAwOjI4MF0sIDIpKQorCisgICAgICAgICMgQXBwZW5kIHNvbWUgbW9yZSBkYXRhLCBub3QgZW5vdWdoIHRvIHJlcXVpcmUgcmVzaXplCisgICAgICAgIG91dC5hcHBlbmQoYnpkLmRlY29tcHJlc3Moc2VsZi5EQVRBWzI4MDozMDBdLCAyKSkKKworICAgICAgICAjIERlY29tcHJlc3MgcmVzdCBvZiBkYXRhCisgICAgICAgIG91dC5hcHBlbmQoYnpkLmRlY29tcHJlc3Moc2VsZi5EQVRBWzMwMDpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbihvdXQpLCBzZWxmLlRFWFQpCisKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzb3JfaW5wdXRidWZfMyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHJldXNpbmcgaW5wdXQgYnVmZmVyIGFmdGVyIGV4dGVuZGluZyBpdAorCisgICAgICAgIGJ6ZCA9IEJaMkRlY29tcHJlc3NvcigpCisgICAgICAgIG91dCA9IFtdCisKKyAgICAgICAgIyBDcmVhdGUgYWxtb3N0IGZ1bGwgaW5wdXQgYnVmZmVyCisgICAgICAgIG91dC5hcHBlbmQoYnpkLmRlY29tcHJlc3Moc2VsZi5EQVRBWzoyMDBdLCA1KSkKKworICAgICAgICAjIEFkZCBldmVuIG1vcmUgZGF0YSB0byBpdCwgcmVxdWlyaW5nIHJlc2l6ZQorICAgICAgICBvdXQuYXBwZW5kKGJ6ZC5kZWNvbXByZXNzKHNlbGYuREFUQVsyMDA6MzAwXSwgNSkpCisKKyAgICAgICAgIyBEZWNvbXByZXNzIHJlc3Qgb2YgZGF0YQorICAgICAgICBvdXQuYXBwZW5kKGJ6ZC5kZWNvbXByZXNzKHNlbGYuREFUQVszMDA6XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLmpvaW4ob3V0KSwgc2VsZi5URVhUKQogCiBjbGFzcyBDb21wcmVzc0RlY29tcHJlc3NUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdENvbXByZXNzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weSBiL0xpYi90ZXN0L3Rlc3RfY2FsZW5kYXIucHkKaW5kZXggOTE5Mzg1Ny4uODBlZDYzMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhbGVuZGFyLnB5CkBAIC0yLDcgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQorZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiBpbXBvcnQgdGltZQogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jYWxsLnB5CmluZGV4IGMwMGNjYmEuLmUyYjhlMGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhbGwucHkKQEAgLTEsNSArMSw0IEBACiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiAjIFRoZSB0ZXN0IGNhc2VzIGhlcmUgY292ZXIgc2V2ZXJhbCBwYXRocyB0aHJvdWdoIHRoZSBmdW5jdGlvbiBjYWxsaW5nCiAjIGNvZGUuICBUaGV5IGRlcGVuZCBvbiB0aGUgTUVUSF9YWFggZmxhZyB0aGF0IGlzIHVzZWQgdG8gZGVmaW5lIGEgQwpAQCAtMTIzLDkgKzEyMiw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgW10uY291bnQsIHg9MiwgeT0yKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDRnVuY3Rpb25DYWxscykKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NhcGkucHkgYi9MaWIvdGVzdC90ZXN0X2NhcGkucHkKaW5kZXggYTBjMWU3OS4uMWVhZGQyMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQpAQCAtNiwxMCArNiwxMiBAQAogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgTUlTU0lOR19DX0RPQ1NUUklOR1MKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fZmFpbHVyZQogdHJ5OgogICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0yMSw2ICsyMyw5IEBACiAjIFNraXAgdGhpcyB0ZXN0IGlmIHRoZSBfdGVzdGNhcGkgbW9kdWxlIGlzbid0IGF2YWlsYWJsZS4KIF90ZXN0Y2FwaSA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3Rlc3RjYXBpJykKIAorIyBXZXJlIHdlIGNvbXBpbGVkIC0td2l0aC1weWRlYnVnIG9yIHdpdGggI2RlZmluZSBQeV9ERUJVRz8KK1B5X0RFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKKwogCiBkZWYgdGVzdGZ1bmN0aW9uKHNlbGYpOgogICAgICIiInNvbWUgZG9jIiIiCkBAIC0xMTgsNyArMTIzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkubm9fZG9jc3RyaW5nLl9fZG9jX18sIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLm5vX2RvY3N0cmluZy5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX2VtcHR5Ll9fZG9jX18sICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfZW1wdHkuX19kb2NfXywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX2VtcHR5Ll9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlLl9fZG9jX18sCkBAIC0xNDUsMTEgKzE1MCw5NSBAQAogICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZS4iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmUuX190ZXh0X3NpZ25hdHVyZV9fLCAiKCRtb2R1bGUsIC8sIHNpZykiKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9idXRfbm9fZG9jLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9idXRfbm9fZG9jLl9fdGV4dF9zaWduYXR1cmVfXywKKyAgICAgICAgICAgICIoJG1vZHVsZSwgLywgc2lnKSIpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcy5fX2RvY19fLAogICAgICAgICAgICAgIlxuVGhpcyBkb2NzdHJpbmcgaGFzIGEgdmFsaWQgc2lnbmF0dXJlIGFuZCBzb21lIGV4dHJhIG5ld2xpbmVzLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMuX190ZXh0X3NpZ25hdHVyZV9fLAogICAgICAgICAgICAgIigkbW9kdWxlLCAvLCBwYXJhbWV0ZXIpIikKIAorICAgIGRlZiB0ZXN0X2NfdHlwZV93aXRoX21hdHJpeF9tdWx0aXBsaWNhdGlvbihzZWxmKToKKyAgICAgICAgTSA9IF90ZXN0Y2FwaS5tYXRtdWxUeXBlCisgICAgICAgIG0xID0gTSgpCisgICAgICAgIG0yID0gTSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTEgQCBtMiwgKCJtYXRtdWwiLCBtMSwgbTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xIEAgNDIsICgibWF0bXVsIiwgbTEsIDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiBAIG0xLCAoIm1hdG11bCIsIDQyLCBtMSkpCisgICAgICAgIG8gPSBtMQorICAgICAgICBvIEA9IG0yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobywgKCJpbWF0bXVsIiwgbTEsIG0yKSkKKyAgICAgICAgbyA9IG0xCisgICAgICAgIG8gQD0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLCAoImltYXRtdWwiLCBtMSwgNDIpKQorICAgICAgICBvID0gNDIKKyAgICAgICAgbyBAPSBtMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8sICgibWF0bXVsIiwgNDIsIG0xKSkKKworICAgIGRlZiB0ZXN0X3JldHVybl9udWxsX3dpdGhvdXRfZXJyb3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIzNTcxOiBBIGZ1bmN0aW9uIG11c3Qgbm90IHJldHVybiBOVUxMIHdpdGhvdXQgc2V0dGluZyBhbgorICAgICAgICAjIGVycm9yCisgICAgICAgIGlmIFB5X0RFQlVHOgorICAgICAgICAgICAgY29kZSA9IHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgICAgICAgICBfdGVzdGNhcGkucmV0dXJuX251bGxfd2l0aG91dF9lcnJvcigpCisgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1jJywgY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLnJlcGxhY2UoYidccicsIGInJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ0ZhdGFsIFB5dGhvbiBlcnJvcjogYSBmdW5jdGlvbiByZXR1cm5lZCBOVUxMICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInd2l0aG91dCBzZXR0aW5nIGFuIGVycm9yXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ1N5c3RlbUVycm9yOiA8YnVpbHQtaW4gZnVuY3Rpb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnIncmV0dXJuX251bGxfd2l0aG91dF9lcnJvcj4gcmV0dXJuZWQgTlVMTCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicid3aXRob3V0IHNldHRpbmcgYW4gZXJyb3JcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ0N1cnJlbnQgdGhyZWFkLio6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJyAgRmlsZSAuKiIsIGxpbmUgNiBpbiA8bW9kdWxlPicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBfdGVzdGNhcGkucmV0dXJuX251bGxfd2l0aG91dF9lcnJvcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV0dXJuX251bGxfd2l0aG91dF9lcnJvci4qICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybmVkIE5VTEwgd2l0aG91dCBzZXR0aW5nIGFuIGVycm9yJykKKworICAgIGRlZiB0ZXN0X3JldHVybl9yZXN1bHRfd2l0aF9lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjM1NzE6IEEgZnVuY3Rpb24gbXVzdCBub3QgcmV0dXJuIGEgcmVzdWx0IHdpdGggYW4gZXJyb3Igc2V0CisgICAgICAgIGlmIFB5X0RFQlVHOgorICAgICAgICAgICAgY29kZSA9IHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgICAgICAgICBfdGVzdGNhcGkucmV0dXJuX3Jlc3VsdF93aXRoX2Vycm9yKCkKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgnLWMnLCBjb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIucmVwbGFjZShiJ1xyJywgYicnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInRmF0YWwgUHl0aG9uIGVycm9yOiBhIGZ1bmN0aW9uIHJldHVybmVkIGEgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicidyZXN1bHQgd2l0aCBhbiBlcnJvciBzZXRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInVmFsdWVFcnJvclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicidcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInRHVyaW5nIGhhbmRsaW5nIG9mIHRoZSBhYm92ZSBleGNlcHRpb24sICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicidTeXN0ZW1FcnJvcjogPGJ1aWx0LWluICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInZnVuY3Rpb24gcmV0dXJuX3Jlc3VsdF93aXRoX2Vycm9yPiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ3JldHVybmVkIGEgcmVzdWx0IHdpdGggYW4gZXJyb3Igc2V0XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicidDdXJyZW50IHRocmVhZC4qOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicicgIEZpbGUgLiosIGxpbmUgNiBpbiA8bW9kdWxlPicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBfdGVzdGNhcGkucmV0dXJuX3Jlc3VsdF93aXRoX2Vycm9yKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5fcmVzdWx0X3dpdGhfZXJyb3IuKiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXR1cm5lZCBhIHJlc3VsdCB3aXRoIGFuIGVycm9yIHNldCcpCisKKyAgICBkZWYgdGVzdF9idWlsZHZhbHVlX04oc2VsZik6CisgICAgICAgIF90ZXN0Y2FwaS50ZXN0X2J1aWxkdmFsdWVfTigpCisKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFRlc3RQZW5kaW5nQ2FsbHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjY1LDcgKzM1NCw3IEBACiAgICAgICAgICAgICBleGVuYW1lICs9IGV4dAogICAgICAgICAgICAgZXhlcGF0aCA9IG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4ZXBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIikKKyAgICAgICAgICAgIGV4ZXBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJQcm9ncmFtcyIpCiAgICAgICAgIHNlbGYudGVzdF9leGUgPSBleGUgPSBvcy5wYXRoLmpvaW4oZXhlcGF0aCwgZXhlbmFtZSkKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBkb2Vzbid0IGV4aXN0IiAlIGV4ZSkKQEAgLTI4NCwxMiArMzczLDEzIEBACiAgICAgICAgIGNtZC5leHRlbmQoYXJncykKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKICAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJldHVybmNvZGUgJWQsIHN0ZGVyciBpcyAlciIgJQogICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCi0gICAgICAgIHJldHVybiBvdXQuZGVjb2RlKCJsYXRpbjEiKSwgZXJyLmRlY29kZSgibGF0aW4xIikKKyAgICAgICAgcmV0dXJuIG91dCwgZXJyCiAKICAgICBkZWYgdGVzdF9zdWJpbnRlcnBzKHNlbGYpOgogICAgICAgICAjIFRoaXMgaXMganVzdCBhICJkb24ndCBjcmFzaCIgdGVzdApAQCAtMzE2LDM0ICs0MDYsMzggQEAKICAgICAgICAgICAgIHByaW50KCkKICAgICAgICAgICAgIHByaW50KG91dCkKICAgICAgICAgICAgIHByaW50KGVycikKKyAgICAgICAgZXhwZWN0ZWRfZXJyb3JzID0gc3lzLl9fc3Rkb3V0X18uZXJyb3JzCiAgICAgICAgIGV4cGVjdGVkX3N0ZGluX2VuY29kaW5nID0gc3lzLl9fc3RkaW5fXy5lbmNvZGluZwogICAgICAgICBleHBlY3RlZF9waXBlX2VuY29kaW5nID0gc2VsZi5fZ2V0X2RlZmF1bHRfcGlwZV9lbmNvZGluZygpCi0gICAgICAgIGV4cGVjdGVkX291dHB1dCA9IG9zLmxpbmVzZXAuam9pbihbCisgICAgICAgIGV4cGVjdGVkX291dHB1dCA9ICdcbicuam9pbihbCiAgICAgICAgICItLS0gVXNlIGRlZmF1bHRzIC0tLSIsCiAgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdCIsCiAgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHQiLAotICAgICAgICAic3RkaW46IHswfTpzdHJpY3QiLAotICAgICAgICAic3Rkb3V0OiB7MX06c3RyaWN0IiwKLSAgICAgICAgInN0ZGVycjogezF9OmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAic3RkaW46IHtpbl9lbmNvZGluZ306e2Vycm9yc30iLAorICAgICAgICAic3Rkb3V0OiB7b3V0X2VuY29kaW5nfTp7ZXJyb3JzfSIsCisgICAgICAgICJzdGRlcnI6IHtvdXRfZW5jb2Rpbmd9OmJhY2tzbGFzaHJlcGxhY2UiLAogICAgICAgICAiLS0tIFNldCBlcnJvcnMgb25seSAtLS0iLAogICAgICAgICAiRXhwZWN0ZWQgZW5jb2Rpbmc6IGRlZmF1bHQiLAotICAgICAgICAiRXhwZWN0ZWQgZXJyb3JzOiBzdXJyb2dhdGVlc2NhcGUiLAotICAgICAgICAic3RkaW46IHswfTpzdXJyb2dhdGVlc2NhcGUiLAotICAgICAgICAic3Rkb3V0OiB7MX06c3Vycm9nYXRlZXNjYXBlIiwKLSAgICAgICAgInN0ZGVycjogezF9OmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiRXhwZWN0ZWQgZXJyb3JzOiBpZ25vcmUiLAorICAgICAgICAic3RkaW46IHtpbl9lbmNvZGluZ306aWdub3JlIiwKKyAgICAgICAgInN0ZG91dDoge291dF9lbmNvZGluZ306aWdub3JlIiwKKyAgICAgICAgInN0ZGVycjoge291dF9lbmNvZGluZ306YmFja3NsYXNocmVwbGFjZSIsCiAgICAgICAgICItLS0gU2V0IGVuY29kaW5nIG9ubHkgLS0tIiwKICAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBsYXRpbi0xIiwKICAgICAgICAgIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdCIsCi0gICAgICAgICJzdGRpbjogbGF0aW4tMTpzdHJpY3QiLAotICAgICAgICAic3Rkb3V0OiBsYXRpbi0xOnN0cmljdCIsCisgICAgICAgICJzdGRpbjogbGF0aW4tMTp7ZXJyb3JzfSIsCisgICAgICAgICJzdGRvdXQ6IGxhdGluLTE6e2Vycm9yc30iLAogICAgICAgICAic3RkZXJyOiBsYXRpbi0xOmJhY2tzbGFzaHJlcGxhY2UiLAogICAgICAgICAiLS0tIFNldCBlbmNvZGluZyBhbmQgZXJyb3JzIC0tLSIsCiAgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMSIsCi0gICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IHN1cnJvZ2F0ZWVzY2FwZSIsCi0gICAgICAgICJzdGRpbjogbGF0aW4tMTpzdXJyb2dhdGVlc2NhcGUiLAotICAgICAgICAic3Rkb3V0OiBsYXRpbi0xOnN1cnJvZ2F0ZWVzY2FwZSIsCi0gICAgICAgICJzdGRlcnI6IGxhdGluLTE6YmFja3NsYXNocmVwbGFjZSJdKS5mb3JtYXQoZXhwZWN0ZWRfc3RkaW5fZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGlwZV9lbmNvZGluZykKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogcmVwbGFjZSIsCisgICAgICAgICJzdGRpbjogbGF0aW4tMTpyZXBsYWNlIiwKKyAgICAgICAgInN0ZG91dDogbGF0aW4tMTpyZXBsYWNlIiwKKyAgICAgICAgInN0ZGVycjogbGF0aW4tMTpiYWNrc2xhc2hyZXBsYWNlIl0pCisgICAgICAgIGV4cGVjdGVkX291dHB1dCA9IGV4cGVjdGVkX291dHB1dC5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2VuY29kaW5nPWV4cGVjdGVkX3N0ZGluX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZW5jb2Rpbmc9ZXhwZWN0ZWRfcGlwZV9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPWV4cGVjdGVkX2Vycm9ycykKICAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCBpZiB3ZSBldmVyIHRyaXAgb3ZlciBvZGQgcGxhdGZvcm0gYmVoYXZpb3VyCiAgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZXhwZWN0ZWRfb3V0cHV0KQpAQCAtMzY3LDcgKzQ2MSw3IEBACiAgICAgICAgIHRlc3QgYW5kIG5vdCBmb3IgdGhlIG90aGVyLCB0aGVyZSdzIGEgbWlzbWF0Y2gsIGFuZCB0aGUgdGVzdCBmYWlscy4KIAogICAgICAgICAgICAqKiBTb21lIGZvcm1hdCB1bml0cyBoYXZlIHNwZWNpYWwgZnVubnkgc2VtYW50aWNzIGFuZCBpdCB3b3VsZAotICAgICAgICAgICAgICBiZSBkaWZmaWN1bHQgdG8gYWNjb21vZGF0ZSB0aGVtIGhlcmUuICBTaW5jZSB0aGVzZSBhcmUgYWxsCisgICAgICAgICAgICAgIGJlIGRpZmZpY3VsdCB0byBhY2NvbW1vZGF0ZSB0aGVtIGhlcmUuICBTaW5jZSB0aGVzZSBhcmUgYWxsCiAgICAgICAgICAgICAgIHdlbGwtZXN0YWJsaXNoZWQgYW5kIHByb3Blcmx5IHNraXBwZWQgaW4gc2tpcGl0ZW0oKSB3ZSBjYW4KICAgICAgICAgICAgICAgZ2V0IGF3YXkgd2l0aCBub3QgdGVzdGluZyB0aGVtLS10aGlzIHRlc3QgaXMgcmVhbGx5IGludGVuZGVkCiAgICAgICAgICAgICAgIHRvIGNhdGNoICpuZXcqIGZvcm1hdCB1bml0cy4KQEAgLTM5OCw3ICs0OTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBmb3JtYXQuZW5jb2RlKCJhc2NpaSIpLCBrZXl3b3JkcykKICAgICAgICAgICAgICAgICB3aGVuX25vdF9za2lwcGVkID0gRmFsc2UKICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBzID0gImFyZ3VtZW50IDEgbXVzdCBiZSBpbXBvc3NpYmxlPGJhZCBmb3JtYXQgY2hhcj4sIG5vdCBpbnQiCisgICAgICAgICAgICAgICAgcyA9ICJhcmd1bWVudCAxIChpbXBvc3NpYmxlPGJhZCBmb3JtYXQgY2hhcj4pIgogICAgICAgICAgICAgICAgIHdoZW5fbm90X3NraXBwZWQgPSAoc3RyKGUpID09IHMpCiAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgd2hlbl9ub3Rfc2tpcHBlZCA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NnaS5weSBiL0xpYi90ZXN0L3Rlc3RfY2dpLnB5CmluZGV4IDZiMjgxMDYuLmFiOWY2YWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2dpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2dpLnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjaGVja193YXJuaW5ncwogaW1wb3J0IGNnaQogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCkBAIC0zNDQsNiArMzQ0LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMubGlzdFswXS5uYW1lLCAnc3VibWl0LW5hbWUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmxpc3RbMF0udmFsdWUsICdMYXJyeScpCiAKKyAgICBkZWYgdGVzdF9maWVsZHN0b3JhZ2VfYXNfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBmcCA9IEJ5dGVzSU8oYid4JyAqIDEwKQorICAgICAgICBlbnYgPSB7J1JFUVVFU1RfTUVUSE9EJzogJ1BVVCd9CisgICAgICAgIHdpdGggY2dpLkZpZWxkU3RvcmFnZShmcD1mcCwgZW52aXJvbj1lbnYpIGFzIGZzOgorICAgICAgICAgICAgY29udGVudCA9IGZzLmZpbGUucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZzLmZpbGUuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnMuZmlsZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudCwgJ3gnICogMTApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZScpOgorICAgICAgICAgICAgZnMuZmlsZS5yZWFkKCkKIAogICAgIF9xc19yZXN1bHQgPSB7CiAgICAgICAgICdrZXkxJzogJ3ZhbHVlMScsCkBAIC01MTksOSArNTI5LDUgQEAKIC0tQWFCMDN4LS0KICIiIgogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoQ2dpVGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2dpdGIucHkgYi9MaWIvdGVzdC90ZXN0X2NnaXRiLnB5CmluZGV4IDJlMDcyYTkuLmE4N2E0MjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2dpdGIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jZ2l0Yi5weQpAQCAtMSw1ICsxLDUgQEAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUsIHRlbXBfZGlyCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdGVtcF9kaXIKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fZmFpbHVyZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgY2dpdGIKQEAgLTYzLDggKzYzLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignPC9wPicsIG91dCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RDZ2l0YikKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jaGFybWFwY29kZWMucHkgYi9MaWIvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weQppbmRleCA2MjI2NTg3Li40MDY0YWVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weQpAQCAtNDksOCArNDksNSBAQAogICAgIGRlZiB0ZXN0X21hcHRvdW5kZWZpbmVkKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHN0ciwgYidhYmNcMDAxJywgY29kZWNuYW1lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDaGFybWFwQ29kZWNUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jbGFzcy5weQppbmRleCBlMzg4M2Q2Li40ZDU1NGEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkKQEAgLTIsNyArMiw2IEBACiAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogdGVzdG1ldGhzID0gWwogCkBAIC0xMyw2ICsxMiw4IEBACiAgICAgInJzdWIiLAogICAgICJtdWwiLAogICAgICJybXVsIiwKKyAgICAibWF0bXVsIiwKKyAgICAicm1hdG11bCIsCiAgICAgInRydWVkaXYiLAogICAgICJydHJ1ZWRpdiIsCiAgICAgImZsb29yZGl2IiwKQEAgLTE3Nyw2ICsxNzgsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19ybXVsX18iLCAodGVzdG1lLCAxKSldKQogCiAgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgQCAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fbWF0bXVsX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxIEAgdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fcm1hdG11bF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KICAgICAgICAgdGVzdG1lIC8gMQogICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX3RydWVkaXZfXyIsICh0ZXN0bWUsIDEpKV0pCiAKQEAgLTQ5MSwxMCArNTAwLDEwIEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYSgpICMgVGhpcyBzaG91bGQgbm90IHNlZ2ZhdWx0Ci0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgIGV4Y2VwdCBSZWN1cnNpb25FcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFJ1bnRpbWVFcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBSZWN1cnNpb25FcnJvciIpCiAKICAgICBkZWYgdGVzdEZvckV4Y2VwdGlvbnNSYWlzZWRJbkluc3RhbmNlR2V0YXR0cjIoc2VsZik6CiAgICAgICAgICMgVGVzdHMgZm9yIGV4Y2VwdGlvbnMgcmFpc2VkIGluIGluc3RhbmNlX2dldGF0dHIyKCkuCkBAIC01NTksOCArNTY4LDUgQEAKICAgICAgICAgYSA9IEEoaGFzaChBLmYpXigtMSkpCiAgICAgICAgIGhhc2goYS5mKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ2xhc3NUZXN0cykKLQotaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQppbmRleCA2OGJmMTZlLi4xZjg4NGU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21hdGgucHkKQEAgLTEsNSArMSw2IEBACi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZXF1aXJlc19JRUVFXzc1NCwgY3B5dGhvbl9vbmx5Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXNfSUVFRV83NTQsIGNweXRob25fb25seQogZnJvbSB0ZXN0LnRlc3RfbWF0aCBpbXBvcnQgcGFyc2VfdGVzdGZpbGUsIHRlc3RfZmlsZQoraW1wb3J0IHRlc3QudGVzdF9tYXRoIGFzIHRlc3RfbWF0aAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgY21hdGgsIG1hdGgKIGZyb20gY21hdGggaW1wb3J0IHBoYXNlLCBwb2xhciwgcmVjdCwgcGkKQEAgLTU2MCw4ICs1NjEsNDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGxleElkZW50aWNhbChjbWF0aC5hdGFuaCh6KSwgeikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KENNYXRoVGVzdHMpCitjbGFzcyBJc0Nsb3NlVGVzdHModGVzdF9tYXRoLklzQ2xvc2VUZXN0cyk6CisgICAgaXNjbG9zZSA9IGNtYXRoLmlzY2xvc2UKKworICAgIGRlZiB0ZXN0X3JlamVjdF9jb21wbGV4X3RvbGVyYW5jZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaXNjbG9zZSgxaiwgMWosIHJlbF90b2w9MWopCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pc2Nsb3NlKDFqLCAxaiwgYWJzX3RvbD0xaikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlzY2xvc2UoMWosIDFqLCByZWxfdG9sPTFqLCBhYnNfdG9sPTFqKQorCisgICAgZGVmIHRlc3RfY29tcGxleF92YWx1ZXMoc2VsZik6CisgICAgICAgICMgdGVzdCBjb21wbGV4IHZhbHVlcyB0aGF0IGFyZSBjbG9zZSB0byB3aXRoaW4gMTIgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgY29tcGxleF9leGFtcGxlcyA9IFsoMS4wKzEuMGosIDEuMDAwMDAwMDAwMDAxKzEuMGopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLjArMS4waiwgMS4wKzEuMDAwMDAwMDAwMDAxaiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xLjArMS4waiwgLTEuMDAwMDAwMDAwMDAxKzEuMGopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLjAtMS4waiwgMS4wLTAuOTk5OTk5OTk5OTk5aiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxsQ2xvc2UoY29tcGxleF9leGFtcGxlcywgcmVsX3RvbD0xZS0xMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbGxOb3RDbG9zZShjb21wbGV4X2V4YW1wbGVzLCByZWxfdG9sPTFlLTEzKQorCisgICAgZGVmIHRlc3RfY29tcGxleF9uZWFyX3plcm8oc2VsZik6CisgICAgICAgICMgdGVzdCB2YWx1ZXMgbmVhciB6ZXJvIHRoYXQgYXJlIG5lYXIgdG8gd2l0aGluIHRocmVlIGRlY2ltYWwgcGxhY2VzCisgICAgICAgIG5lYXJfemVyb19leGFtcGxlcyA9IFsoMC4wMDFqLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjAwMSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4wMDErMC4wMDFqLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMC4wMDErMC4wMDFqLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjAwMS0wLjAwMWosIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0wLjAwMS0wLjAwMWosIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxsQ2xvc2UobmVhcl96ZXJvX2V4YW1wbGVzLCBhYnNfdG9sPTEuNWUtMDMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxsTm90Q2xvc2UobmVhcl96ZXJvX2V4YW1wbGVzLCBhYnNfdG9sPTAuNWUtMDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0Nsb3NlKDAuMDAxLTAuMDAxaiwgMC4wMDErMC4wMDFqLCBhYnNfdG9sPTJlLTAzKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Q2xvc2UoMC4wMDEtMC4wMDFqLCAwLjAwMSswLjAwMWosIGFic190b2w9MWUtMDMpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKaW5kZXggNWNhZDNlYy4uZGNlNDE4YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CkBAIC04LDggKzgsOCBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0ZW1wZmlsZQotZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCi1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgKHNwYXduX3B5dGhvbiwga2lsbF9weXRob24sIGFzc2VydF9weXRob25fb2ssCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgc2NyaXB0X2hlbHBlcgorZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgKHNwYXduX3B5dGhvbiwga2lsbF9weXRob24sIGFzc2VydF9weXRob25fb2ssCiAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKQogCiAKQEAgLTU5LDcgKzU5LDcgQEAKIAogICAgIGRlZiB0ZXN0X3hvcHRpb25zKHNlbGYpOgogICAgICAgICBkZWYgZ2V0X3hvcHRpb25zKCphcmdzKToKLSAgICAgICAgICAgICMgdXNlIHN1YnByb2Nlc3MgbW9kdWxlIGRpcmVjdGx5IGJlY2F1c2UgdGVzdC5zY3JpcHRfaGVscGVyIGFkZHMKKyAgICAgICAgICAgICMgdXNlIHN1YnByb2Nlc3MgbW9kdWxlIGRpcmVjdGx5IGJlY2F1c2UgdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgYWRkcwogICAgICAgICAgICAgIyAiLVggZmF1bHRoYW5kbGVyIiB0byB0aGUgY29tbWFuZCBsaW5lCiAgICAgICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAnLUUnKSArIGFyZ3MKICAgICAgICAgICAgIGFyZ3MgKz0gKCctYycsICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScpCkBAIC0zNDQsNyArMzQ0LDggQEAKICAgICAgICAgIyBJc3N1ZSAjNTMxOTogaWYgc3Rkb3V0LmZsdXNoKCkgZmFpbHMgYXQgc2h1dGRvd24sIGFuIGVycm9yIHNob3VsZAogICAgICAgICAjIGJlIHByaW50ZWQgb3V0LgogICAgICAgICBjb2RlID0gIiIiaWYgMToKLSAgICAgICAgICAgIGltcG9ydCBvcywgc3lzCisgICAgICAgICAgICBpbXBvcnQgb3MsIHN5cywgdGVzdC5zdXBwb3J0CisgICAgICAgICAgICB0ZXN0LnN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpLl9fZW50ZXJfXygpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCd4JykKICAgICAgICAgICAgIG9zLmNsb3NlKHN5cy5zdGRvdXQuZmlsZW5vKCkpIiIiCiAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKQEAgLTQ1Niw3ICs0NTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5zcGxpdGxpbmVzKCkuY291bnQoYidVbmtub3duIG9wdGlvbjogLWEnKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSwKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNjcmlwdF9oZWxwZXIuaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSwKICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcnVuIC1JIHRlc3RzIHdoZW4gUFlUSE9OIGVudiB2YXJzIGFyZSByZXF1aXJlZC4nKQogICAgIGRlZiB0ZXN0X2lzb2xhdGVkbW9kZShzZWxmKToKICAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLUknKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQppbmRleCA3MzUwMTY0Li5iMmJlOWIxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQpAQCAtMTMsMTAgKzEzLDkgQEAKIAogaW1wb3J0IHRleHR3cmFwCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAoCitmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCAoCiAgICAgbWFrZV9wa2csIG1ha2Vfc2NyaXB0LCBtYWtlX3ppcF9wa2csIG1ha2VfemlwX3NjcmlwdCwKLSAgICBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUsIHRlbXBfZGlyLAotICAgIHNwYXduX3B5dGhvbiwga2lsbF9weXRob24pCisgICAgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlLCBzcGF3bl9weXRob24sIGtpbGxfcHl0aG9uKQogCiB2ZXJib3NlID0gc3VwcG9ydC52ZXJib3NlCiAKQEAgLTIyMywxNCArMjIyLDE0IEBACiAgICAgICAgIHNlbGYuY2hlY2tfcmVwbF9zdGRlcnJfZmx1c2goVHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2Jhc2ljX3NjcmlwdChzZWxmKToKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCiAKICAgICBkZWYgdGVzdF9zY3JpcHRfY29tcGlsZWQoc2VsZik6Ci0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JykKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQpAQCAtMjQwLDE0ICsyMzksMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJykKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfbmFtZSwgc2NyaXB0X2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfZGlyLCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCiAKICAgICBkZWYgdGVzdF9kaXJlY3RvcnlfY29tcGlsZWQoc2VsZik6Ci0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCiAgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCkBAIC0yNTcsMTkgKzI1NiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIpCiAKICAgICBkZWYgdGVzdF9kaXJlY3RvcnlfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgbXNnID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgc2NyaXB0X2RpcgogICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKHNjcmlwdF9kaXIsIG1zZykKIAogICAgIGRlZiB0ZXN0X3ppcGZpbGUoc2VsZik6Ci0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQogICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCBydW5fbmFtZSwgemlwX25hbWUsIHppcF9uYW1lLCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBpbXBvcnQuemlwaW1wb3J0ZXIpCiAKICAgICBkZWYgdGVzdF96aXBmaWxlX2NvbXBpbGVkKHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJykKICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKICAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBjb21waWxlZF9uYW1lKQpAQCAtMjc3LDE0ICsyNzYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBpbXBvcnQuemlwaW1wb3J0ZXIpCiAKICAgICBkZWYgdGVzdF96aXBmaWxlX2Vycm9yKHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ25vdF9tYWluJykKICAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHppcF9uYW1lCiAgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IoemlwX25hbWUsIG1zZykKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlKHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdzY3JpcHQnKQpAQCAtMjk0LDE0ICsyOTMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfaW5fcGFja2FnZV9pbl96aXBmaWxlKHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwX3BrZyhzY3JpcHRfZGlyLCAndGVzdF96aXAnLCAndGVzdF9wa2cnLCAnc2NyaXB0JykKICAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnNjcmlwdCcsIHppcF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBydW5fbmFtZSwgcnVuX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwX25hbWUsICd0ZXN0X3BrZycsIHppcGltcG9ydC56aXBpbXBvcnRlcikKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9zdWJwYWNrYWdlX2luX3ppcGZpbGUoc2VsZik6Ci0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXBfcGtnKHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsICd0ZXN0X3BrZycsICdzY3JpcHQnLCBkZXB0aD0yKQogICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cudGVzdF9wa2cuc2NyaXB0JywgemlwX25hbWUpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUsIHJ1bl9uYW1lLCBydW5fbmFtZSwKQEAgLTMwOSw3ICszMDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGltcG9ydC56aXBpbXBvcnRlcikKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQogICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJykKQEAgLTMxOSw3ICszMTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2VfY29tcGlsZWQoc2VsZik6Ci0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQogICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJykKQEAgLTMzMiw3ICszMzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIpCiAKICAgICBkZWYgdGVzdF9wYWNrYWdlX2Vycm9yKHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCiAgICAgICAgICAgICBtc2cgPSAoIid0ZXN0X3BrZycgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIgpAQCAtMzQxLDcgKzM0MCw3IEBACiAgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IobGF1bmNoX25hbWUsIG1zZykKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2VfcmVjdXJzaW9uKHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCiAgICAgICAgICAgICBtYWluX2RpciA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnX19tYWluX18nKQpAQCAtMzU1LDcgKzM1NCw3IEBACiAgICAgZGVmIHRlc3RfaXNzdWU4MjAyKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBwYWNrYWdlIF9faW5pdF9fIG1vZHVsZXMgc2VlICItbSIgaW4gc3lzLmFyZ3YwIHdoaWxlCiAgICAgICAgICMgc2VhcmNoaW5nIGZvciB0aGUgbW9kdWxlIHRvIGV4ZWN1dGUKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChwYXRoPXNjcmlwdF9kaXIpOgogICAgICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyLCAiaW1wb3J0IHN5czsgcHJpbnQoJ2luaXRfYXJndjA9PSVyJyAlIHN5cy5hcmd2WzBdKSIpCkBAIC0zNzIsNyArMzcxLDcgQEAKICAgICBkZWYgdGVzdF9pc3N1ZTgyMDJfZGFzaF9jX2ZpbGVfaWdub3JlZChzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgYSAiLWMiIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CiAgICAgICAgICMgZG9lcyBub3QgYWx0ZXIgdGhlIHZhbHVlIG9mIHN5cy5wYXRoWzBdCi0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QocGF0aD1zY3JpcHRfZGlyKToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oIi1jIiwgInciKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKQEAgLTM4Nyw3ICszODYsNyBAQAogICAgIGRlZiB0ZXN0X2lzc3VlODIwMl9kYXNoX21fZmlsZV9pZ25vcmVkKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBhICItbSIgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKICAgICAgICAgIyBkb2VzIG5vdCBhbHRlciB0aGUgdmFsdWUgb2Ygc3lzLnBhdGhbMF0KLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdvdGhlcicpCiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChwYXRoPXNjcmlwdF9kaXIpOgogICAgICAgICAgICAgICAgIHdpdGggb3BlbigiLW0iLCAidyIpIGFzIGY6CkBAIC0zOTgsMjAgKzM5Nyw4NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsICcnLCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQogCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgc2V0dXBfdGVzdF9wa2coc2VsZiwgKmFyZ3MpOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyLCBcCisgICAgICAgICAgICAgICAgc3VwcG9ydC5jaGFuZ2VfY3dkKHBhdGg9c2NyaXB0X2Rpcik6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyLCAqYXJncykKKyAgICAgICAgICAgIHlpZWxkIHBrZ19kaXIKKworICAgIGRlZiBjaGVja19kYXNoX21fZmFpbHVyZShzZWxmLCAqYXJncyk6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAqYXJncywgX19pc29sYXRlZD1GYWxzZSkKKyAgICAgICAgaWYgdmVyYm9zZSA+IDE6CisgICAgICAgICAgICBwcmludChyZXByKG91dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisgICAgICAgIHJldHVybiBlcnIKKwogICAgIGRlZiB0ZXN0X2Rhc2hfbV9lcnJvcl9jb2RlX2lzX29uZShzZWxmKToKICAgICAgICAgIyBJZiBhIG1vZHVsZSBpcyBpbnZva2VkIHdpdGggdGhlIC1tIGNvbW1hbmQgbGluZSBmbGFnCiAgICAgICAgICMgYW5kIHJlc3VsdHMgaW4gYW4gZXJyb3IgdGhhdCB0aGUgcmV0dXJuIGNvZGUgdG8gdGhlCiAgICAgICAgICMgc2hlbGwgaXMgJzEnCi0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgotICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QocGF0aD1zY3JpcHRfZGlyKToKLSAgICAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCi0gICAgICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKLSAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdvdGhlcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzogcmFpc2UgVmFsdWVFcnJvciIpCi0gICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICd0ZXN0X3BrZy5vdGhlcicsICpleGFtcGxlX2FyZ3MpCi0gICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KHJlcHIob3V0KSkKKyAgICAgICAgd2l0aCBzZWxmLnNldHVwX3Rlc3RfcGtnKCkgYXMgcGtnX2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ290aGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6IHJhaXNlIFZhbHVlRXJyb3IiKQorICAgICAgICAgICAgZXJyID0gc2VsZi5jaGVja19kYXNoX21fZmFpbHVyZSgndGVzdF9wa2cub3RoZXInLCAqZXhhbXBsZV9hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1ZhbHVlRXJyb3InLCBlcnIpCisKKyAgICBkZWYgdGVzdF9kYXNoX21fZXJyb3JzKHNlbGYpOgorICAgICAgICAjIEV4ZXJjaXNlIGVycm9yIHJlcG9ydGluZyBmb3IgdmFyaW91cyBpbnZhbGlkIHBhY2thZ2UgZXhlY3V0aW9ucworICAgICAgICB0ZXN0cyA9ICgKKyAgICAgICAgICAgICgnYnVpbHRpbnMnLCBicidObyBjb2RlIG9iamVjdCBhdmFpbGFibGUnKSwKKyAgICAgICAgICAgICgnYnVpbHRpbnMueCcsIGJyJ0Vycm9yIHdoaWxlIGZpbmRpbmcgc3BlYy4qQXR0cmlidXRlRXJyb3InKSwKKyAgICAgICAgICAgICgnYnVpbHRpbnMueC55JywgYnInRXJyb3Igd2hpbGUgZmluZGluZyBzcGVjLionCisgICAgICAgICAgICAgICAgYnInSW1wb3J0RXJyb3IuKk5vIG1vZHVsZSBuYW1lZC4qbm90IGEgcGFja2FnZScpLAorICAgICAgICAgICAgKCdvcy5wYXRoJywgYnInbG9hZGVyLipjYW5ub3QgaGFuZGxlJyksCisgICAgICAgICAgICAoJ2ltcG9ydGxpYicsIGJyJ05vIG1vZHVsZSBuYW1lZC4qJworICAgICAgICAgICAgICAgIGJyJ2lzIGEgcGFja2FnZSBhbmQgY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkJyksCisgICAgICAgICAgICAoJ2ltcG9ydGxpYi5ub25leGlzdGFudCcsIGJyJ05vIG1vZHVsZSBuYW1lZCcpLAorICAgICAgICAgICAgKCcudW5pdHRlc3QnLCBicidSZWxhdGl2ZSBtb2R1bGUgbmFtZXMgbm90IHN1cHBvcnRlZCcpLAorICAgICAgICApCisgICAgICAgIGZvciBuYW1lLCByZWdleCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWUpOgorICAgICAgICAgICAgICAgIHJjLCBfLCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCByZWdleCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInVHJhY2ViYWNrJywgZXJyKQorCisgICAgZGVmIHRlc3RfZGFzaF9tX2JhZF9weWMoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXIsIFwKKyAgICAgICAgICAgICAgICBzdXBwb3J0LmNoYW5nZV9jd2QocGF0aD1zY3JpcHRfZGlyKToKKyAgICAgICAgICAgIG9zLm1rZGlyKCd0ZXN0X3BrZycpCisgICAgICAgICAgICAjIENyZWF0ZSBpbnZhbGlkICoucHljIGFzIGVtcHR5IGZpbGUKKyAgICAgICAgICAgIHdpdGggb3BlbigndGVzdF9wa2cvX19pbml0X18ucHljJywgJ3diJyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXJyID0gc2VsZi5jaGVja19kYXNoX21fZmFpbHVyZSgndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGJyJ0Vycm9yIHdoaWxlIGZpbmRpbmcgc3BlYy4qJworICAgICAgICAgICAgICAgIGJyJ0ltcG9ydEVycm9yLipiYWQgbWFnaWMgbnVtYmVyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidpcyBhIHBhY2thZ2UnLCBlcnIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInVHJhY2ViYWNrJywgZXJyKQorCisgICAgZGVmIHRlc3RfZGFzaF9tX2luaXRfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICAjIFRoZXNlIHdlcmUgd3JhcHBlZCBpbiBhbiBJbXBvcnRFcnJvciBhbmQgdHJhY2ViYWNrcyB3ZXJlCisgICAgICAgICMgc3VwcHJlc3NlZDsgc2VlIElzc3VlIDE0Mjg1CisgICAgICAgIGV4Y2VwdGlvbnMgPSAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IsIFZhbHVlRXJyb3IpCisgICAgICAgIGZvciBleGNlcHRpb24gaW4gZXhjZXB0aW9uczoKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbi5fX25hbWVfXworICAgICAgICAgICAgaW5pdCA9ICJyYWlzZSB7MH0oJ0V4Y2VwdGlvbiBpbiBfX2luaXRfXy5weScpIi5mb3JtYXQoZXhjZXB0aW9uKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZXhjZXB0aW9uKSwgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLnNldHVwX3Rlc3RfcGtnKGluaXQpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICAgICAgZXJyID0gc2VsZi5jaGVja19kYXNoX21fZmFpbHVyZSgndGVzdF9wa2cnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhjZXB0aW9uLmVuY29kZSgnYXNjaWknKSwgZXJyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidFeGNlcHRpb24gaW4gX19pbml0X18ucHknLCBlcnIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1RyYWNlYmFjaycsIGVycikKKworICAgIGRlZiB0ZXN0X2Rhc2hfbV9tYWluX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCBhbiBJbXBvcnRFcnJvcidzIHRyYWNlYmFjayBpcyByZXBvcnRlZAorICAgICAgICB3aXRoIHNlbGYuc2V0dXBfdGVzdF9wa2coKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgbWFpbiA9ICJyYWlzZSBJbXBvcnRFcnJvcignRXhjZXB0aW9uIGluIF9fbWFpbl9fIG1vZHVsZScpIgorICAgICAgICAgICAgX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJywgbWFpbikKKyAgICAgICAgICAgIGVyciA9IHNlbGYuY2hlY2tfZGFzaF9tX2ZhaWx1cmUoJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidJbXBvcnRFcnJvcicsIGVycikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidFeGNlcHRpb24gaW4gX19tYWluX18gbW9kdWxlJywgZXJyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1RyYWNlYmFjaycsIGVycikKIAogICAgIGRlZiB0ZXN0X3BlcF80MDlfdmVyYmlhZ2Uoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIFBFUCA0MDkgc3ludGF4IHByb3Blcmx5IHN1cHByZXNzZXMKQEAgLTQyMiw3ICs0ODgsNyBAQAogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHJhaXNlIE5hbWVFcnJvciBmcm9tIE5vbmUKICAgICAgICAgICAgICIiIikKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnLCBzY3JpcHQpCiAgICAgICAgICAgICBleGl0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoc2NyaXB0X25hbWUpCiAgICAgICAgICAgICB0ZXh0ID0gc3RkZXJyLmRlY29kZSgnYXNjaWknKS5zcGxpdCgnXG4nKQpAQCAtNDMzLDcgKzQ5OSw3IEBACiAKICAgICBkZWYgdGVzdF9ub25fYXNjaWkoc2VsZik6CiAgICAgICAgICMgTWFjIE9TIFggZGVuaWVzIHRoZSBjcmVhdGlvbiBvZiBhIGZpbGUgd2l0aCBhbiBpbnZhbGlkIFVURi04IG5hbWUuCi0gICAgICAgICMgV2luZG93cyBhbGxvd3MgdG8gY3JlYXRlIGEgbmFtZSB3aXRoIGFuIGFyYml0cmFyeSBieXRlcyBuYW1lLCBidXQKKyAgICAgICAgIyBXaW5kb3dzIGFsbG93cyBjcmVhdGluZyBhIG5hbWUgd2l0aCBhbiBhcmJpdHJhcnkgYnl0ZXMgbmFtZSwgYnV0CiAgICAgICAgICMgUHl0aG9uIGNhbm5vdCBhIHVuZGVjb2RhYmxlIGJ5dGVzIGFyZ3VtZW50IHRvIGEgc3VicHJvY2Vzcy4KICAgICAgICAgaWYgKHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFCiAgICAgICAgIGFuZCBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnZGFyd2luJykpOgpAQCAtNDY2LDcgKzUzMiw3IEBACiAgICAgICAgICAgICBpZiBlcnJvcjoKICAgICAgICAgICAgICAgICBzeXMuZXhpdChlcnJvcikKICAgICAgICAgICAgICIiIikKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnLCBzY3JpcHQpCiAgICAgICAgICAgICBleGl0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoc2NyaXB0X25hbWUpCiAgICAgICAgICAgICB0ZXh0ID0gc3RkZXJyLmRlY29kZSgnYXNjaWknKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKaW5kZXggN2E4MGE4MC4uMzM5NGIzOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CkBAIC0xLDYgKzEsNyBAQAogIlRlc3QgSW50ZXJhY3RpdmVDb25zb2xlIGFuZCBJbnRlcmFjdGl2ZUludGVycHJldGVyIGZyb20gY29kZSBtb2R1bGUiCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGV4dHdyYXAgaW1wb3J0IGRlZGVudAogZnJvbSBjb250ZXh0bGliIGltcG9ydCBFeGl0U3RhY2sKIGZyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydApAQCAtNzgsOSArNzksNDAgQEAKICAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KGJhbm5lcj0nJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzKSwgMSkKIAorICAgIGRlZiB0ZXN0X2NhdXNlX3RiKHNlbGYpOgorICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IFsicmFpc2UgVmFsdWVFcnJvcignJykgZnJvbSBBdHRyaWJ1dGVFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFT0ZFcnJvcignRmluaXNoZWQnKV0KKyAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KCkKKyAgICAgICAgb3V0cHV0ID0gJycuam9pbignJy5qb2luKGNhbGxbMV0pIGZvciBjYWxsIGluIHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxscykKKyAgICAgICAgZXhwZWN0ZWQgPSBkZWRlbnQoIiIiCisgICAgICAgIEF0dHJpYnV0ZUVycm9yCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0SW50ZXJhY3RpdmVDb25zb2xlKQorICAgICAgICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorCisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgICBGaWxlICI8Y29uc29sZT4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgICAgIFZhbHVlRXJyb3IKKyAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X3RiKHNlbGYpOgorICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IFsidHJ5OiBoYW1cbmV4Y2VwdDogZWdnc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVPRkVycm9yKCdGaW5pc2hlZCcpXQorICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoKQorICAgICAgICBvdXRwdXQgPSAnJy5qb2luKCcnLmpvaW4oY2FsbFsxXSkgZm9yIGNhbGwgaW4gc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzKQorICAgICAgICBleHBlY3RlZCA9IGRlZGVudCgiIiIKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAgIEZpbGUgIjxjb25zb2xlPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgICAgTmFtZUVycm9yOiBuYW1lICdoYW0nIGlzIG5vdCBkZWZpbmVkCisKKyAgICAgICAgRHVyaW5nIGhhbmRsaW5nIG9mIHRoZSBhYm92ZSBleGNlcHRpb24sIGFub3RoZXIgZXhjZXB0aW9uIG9jY3VycmVkOgorCisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgICBGaWxlICI8Y29uc29sZT4iLCBsaW5lIDIsIGluIDxtb2R1bGU+CisgICAgICAgIE5hbWVFcnJvcjogbmFtZSAnZWdncycgaXMgbm90IGRlZmluZWQKKyAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCBvdXRwdXQpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CmluZGV4IDEzMjdmMTEuLmVlMWUyOGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQpAQCAtMTUwLDYgKzE1MCwyMiBAQAogICAgICAgICBzb3V0ID0gYiJhXHhhY1xcdTEyMzRceGE0XFx1ODAwMFxcVTAwMTBmZmZmIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImlzby04ODU5LTE1IiwgImJhY2tzbGFzaHJlcGxhY2UiKSwgc291dCkKIAorICAgIGRlZiB0ZXN0X25hbWVlc2NhcGUoc2VsZik6CisgICAgICAgICMgRG9lcyB0aGUgc2FtZSBhcyBiYWNrc2xhc2hlc2NhcGUsIGJ1dCBwcmVmZXJzIGBgXE57Li4ufWBgIGVzY2FwZQorICAgICAgICAjIHNlcXVlbmNlcy4KKyAgICAgICAgc2luID0gImFceGFjXHUxMjM0XHUyMGFjXHU4MDAwXFUwMDEwZmZmZiIKKyAgICAgICAgc291dCA9IChiJ2FcXE57Tk9UIFNJR059XFxOe0VUSElPUElDIFNZTExBQkxFIFNFRX1cXE57RVVSTyBTSUdOfScKKyAgICAgICAgICAgICAgICBiJ1xcTntDSksgVU5JRklFRCBJREVPR1JBUEgtODAwMH1cXFUwMDEwZmZmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgiYXNjaWkiLCAibmFtZXJlcGxhY2UiKSwgc291dCkKKworICAgICAgICBzb3V0ID0gKGInYVx4YWNcXE57RVRISU9QSUMgU1lMTEFCTEUgU0VFfVxcTntFVVJPIFNJR059JworICAgICAgICAgICAgICAgIGInXFxOe0NKSyBVTklGSUVEIElERU9HUkFQSC04MDAwfVxcVTAwMTBmZmZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW4uZW5jb2RlKCJsYXRpbi0xIiwgIm5hbWVyZXBsYWNlIiksIHNvdXQpCisKKyAgICAgICAgc291dCA9IChiJ2FceGFjXFxOe0VUSElPUElDIFNZTExBQkxFIFNFRX1ceGE0JworICAgICAgICAgICAgICAgIGInXFxOe0NKSyBVTklGSUVEIElERU9HUkFQSC04MDAwfVxcVTAwMTBmZmZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW4uZW5jb2RlKCJpc28tODg1OS0xNSIsICJuYW1lcmVwbGFjZSIpLCBzb3V0KQorCiAgICAgZGVmIHRlc3RfZGVjb2RpbmdfY2FsbGJhY2tzKHNlbGYpOgogICAgICAgICAjIFRoaXMgaXMgYSB0ZXN0IGZvciBhIGRlY29kaW5nIGNhbGxiYWNrIGhhbmRsZXIKICAgICAgICAgIyB0aGF0IGFsbG93cyB0aGUgZGVjb2Rpbmcgb2YgdGhlIGludmFsaWQgc2VxdWVuY2UKQEAgLTIyMCw2ICsyMzYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgIlx1MDAwMFx1ZmZmZCIKICAgICAgICAgICAgICAgICApCiAKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MDBceDAwIi5kZWNvZGUoInVuaWNvZGUtaW50ZXJuYWwiLCAiYmFja3NsYXNocmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAiXHUwMDAwXFx4MDAiCisgICAgICAgICAgICAgICAgKQorCiAgICAgICAgICAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0Lmh1aSIsIGhhbmRsZXJfdW5pY29kZWludGVybmFsKQogCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTI4Nyw3ICszMDgsNyBAQAogICAgIGRlZiB0ZXN0X2xvbmdzdHJpbmdzKHNlbGYpOgogICAgICAgICAjIHRlc3QgbG9uZyBzdHJpbmdzIHRvIGNoZWNrIGZvciBtZW1vcnkgb3ZlcmZsb3cgcHJvYmxlbXMKICAgICAgICAgZXJyb3JzID0gWyAic3RyaWN0IiwgImlnbm9yZSIsICJyZXBsYWNlIiwgInhtbGNoYXJyZWZyZXBsYWNlIiwKLSAgICAgICAgICAgICAgICAgICAiYmFja3NsYXNocmVwbGFjZSJdCisgICAgICAgICAgICAgICAgICAgImJhY2tzbGFzaHJlcGxhY2UiLCAibmFtZXJlcGxhY2UiXQogICAgICAgICAjIHJlZ2lzdGVyIHRoZSBoYW5kbGVycyB1bmRlciBkaWZmZXJlbnQgbmFtZXMsCiAgICAgICAgICMgdG8gcHJldmVudCB0aGUgY29kZWMgZnJvbSByZWNvZ25pemluZyB0aGUgbmFtZQogICAgICAgICBmb3IgZXJyIGluIGVycm9yczoKQEAgLTU1MCwxNyArNTcxLDYgQEAKICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAogICAgICAgICAgICBVbmljb2RlRXJyb3IoIm91Y2giKQogICAgICAgICApCi0gICAgICAgICMgImJhY2tzbGFzaHJlcGxhY2UiIGNhbiBvbmx5IGJlIHVzZWQgZm9yIGVuY29kaW5nCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgVHlwZUVycm9yLAotICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAotICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsIGJ5dGVhcnJheShiIlx4ZmYiKSwgMCwgMSwgIm91Y2giKQotICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgVHlwZUVycm9yLAotICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAotICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJcdTMwNDIiLCAwLCAxLCAib3VjaCIpCi0gICAgICAgICkKICAgICAgICAgIyBVc2UgdGhlIGNvcnJlY3QgZXhjZXB0aW9uCiAgICAgICAgIHRlc3RzID0gWwogICAgICAgICAgICAgKCJcdTMwNDIiLCAiXFx1MzA0MiIpLApAQCAtNTg1LDYgKzU5NSw3MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEgKyBsZW4ocyksICJvdWNoIikpLAogICAgICAgICAgICAgICAgICAgICAociwgMSArIGxlbihzKSkKICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAorICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJhIiArIHMgKyAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSArIGxlbihzKSwgIm91Y2giKSksCisgICAgICAgICAgICAgICAgICAgIChyLCAxICsgbGVuKHMpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoYiJhIiwgIlxceDYxIiksCisgICAgICAgICAgICAoYiJcbiIsICJcXHgwYSIpLAorICAgICAgICAgICAgKGIiXHgwMCIsICJcXHgwMCIpLAorICAgICAgICAgICAgKGIiXHhmZiIsICJcXHhmZiIpLAorICAgICAgICBdCisgICAgICAgIGZvciBiLCByIGluIHRlc3RzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYnl0ZXM9Yik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAorICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsIGJ5dGVhcnJheShiImEiICsgYiArIGIiYiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsICJvdWNoIikpLAorICAgICAgICAgICAgICAgICAgICAociwgMikKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYWRhbmRnb29kbmFtZXJlcGxhY2VleGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjICJuYW1lcmVwbGFjZSIgY29tcGxhaW5zIGFib3V0IGEgbm9uLWV4Y2VwdGlvbiBwYXNzZWQgaW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLm5hbWVyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgNDIKKyAgICAgICAgKQorICAgICAgICAjICJuYW1lcmVwbGFjZSIgY29tcGxhaW5zIGFib3V0IHRoZSB3cm9uZyBleGNlcHRpb24gdHlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLm5hbWVyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgVW5pY29kZUVycm9yKCJvdWNoIikKKyAgICAgICAgKQorICAgICAgICAjICJuYW1lcmVwbGFjZSIgY2FuIG9ubHkgYmUgdXNlZCBmb3IgZW5jb2RpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3MubmFtZXJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsIGJ5dGVhcnJheShiIlx4ZmYiKSwgMCwgMSwgIm91Y2giKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLm5hbWVyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvcigiXHUzMDQyIiwgMCwgMSwgIm91Y2giKQorICAgICAgICApCisgICAgICAgICMgVXNlIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgICgiXHUzMDQyIiwgIlxcTntISVJBR0FOQSBMRVRURVIgQX0iKSwKKyAgICAgICAgICAgICgiXHgwMCIsICJcXHgwMCIpLAorICAgICAgICAgICAgKCJcdWZiZjkiLCAiXFxOe0FSQUJJQyBMSUdBVFVSRSBVSUdIVVIgS0lSR0hJWiBZRUggV0lUSCAiCisgICAgICAgICAgICAgICAgICAgICAgICJIQU1aQSBBQk9WRSBXSVRIIEFMRUYgTUFLU1VSQSBJU09MQVRFRCBGT1JNfSIpLAorICAgICAgICAgICAgKCJcVTAwMGUwMDdmIiwgIlxcTntDQU5DRUwgVEFHfSIpLAorICAgICAgICAgICAgKCJcVTAwMTBmZmZmIiwgIlxcVTAwMTBmZmZmIiksCisgICAgICAgICAgICAjIExvbmUgc3Vycm9nYXRlcworICAgICAgICAgICAgKCJcdWQ4MDAiLCAiXFx1ZDgwMCIpLAorICAgICAgICAgICAgKCJcdWRmZmYiLCAiXFx1ZGZmZiIpLAorICAgICAgICAgICAgKCJcdWQ4MDBcdWRmZmYiLCAiXFx1ZDgwMFxcdWRmZmYiKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgcywgciBpbiB0ZXN0czoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHN0cj1zKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBjb2RlY3MubmFtZXJlcGxhY2VfZXJyb3JzKAorICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJhIiArIHMgKyAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSArIGxlbihzKSwgIm91Y2giKSksCisgICAgICAgICAgICAgICAgICAgIChyLCAxICsgbGVuKHMpKQorICAgICAgICAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RzdXJyb2dhdGVlc2NhcGVleGNlcHRpb25zKHNlbGYpOgogICAgICAgICBzdXJyb2dhdGVlc2NhcGVfZXJyb3JzID0gY29kZWNzLmxvb2t1cF9lcnJvcignc3Vycm9nYXRlZXNjYXBlJykKQEAgLTY2MywyMCArNzM5LDI0IEBACiAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZXBhc3NfZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoZW5jLCAiYSIuZW5jb2RlKGVuYyksIDAsIDEsICJvdWNoIikKICAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBzIGluICgiXHVkODAwIiwgIlx1ZGZmZiIsICJcdWQ4MDBcdWRmZmYiKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHN0cj1zKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGVwYXNzX2Vycm9ycywKKyAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHMsIDAsIGxlbihzKSwgIm91Y2giKQorICAgICAgICAgICAgICAgICkKICAgICAgICAgdGVzdHMgPSBbCi0gICAgICAgICAgICAoImFzY2lpIiwgIlx1ZDgwMCIsIGInXHhlZFx4YTBceDgwJywgMyksCiAgICAgICAgICAgICAoInV0Zi04IiwgIlx1ZDgwMCIsIGInXHhlZFx4YTBceDgwJywgMyksCiAgICAgICAgICAgICAoInV0Zi0xNmxlIiwgIlx1ZDgwMCIsIGInXHgwMFx4ZDgnLCAyKSwKICAgICAgICAgICAgICgidXRmLTE2YmUiLCAiXHVkODAwIiwgYidceGQ4XHgwMCcsIDIpLAogICAgICAgICAgICAgKCJ1dGYtMzJsZSIsICJcdWQ4MDAiLCBiJ1x4MDBceGQ4XHgwMFx4MDAnLCA0KSwKICAgICAgICAgICAgICgidXRmLTMyYmUiLCAiXHVkODAwIiwgYidceDAwXHgwMFx4ZDhceDAwJywgNCksCi0gICAgICAgICAgICAoImFzY2lpIiwgIlx1ZGZmZiIsIGInXHhlZFx4YmZceGJmJywgMyksCiAgICAgICAgICAgICAoInV0Zi04IiwgIlx1ZGZmZiIsIGInXHhlZFx4YmZceGJmJywgMyksCiAgICAgICAgICAgICAoInV0Zi0xNmxlIiwgIlx1ZGZmZiIsIGInXHhmZlx4ZGYnLCAyKSwKICAgICAgICAgICAgICgidXRmLTE2YmUiLCAiXHVkZmZmIiwgYidceGRmXHhmZicsIDIpLAogICAgICAgICAgICAgKCJ1dGYtMzJsZSIsICJcdWRmZmYiLCBiJ1x4ZmZceGRmXHgwMFx4MDAnLCA0KSwKICAgICAgICAgICAgICgidXRmLTMyYmUiLCAiXHVkZmZmIiwgYidceDAwXHgwMFx4ZGZceGZmJywgNCksCi0gICAgICAgICAgICAoImFzY2lpIiwgIlx1ZDgwMFx1ZGZmZiIsIGInXHhlZFx4YTBceDgwXHhlZFx4YmZceGJmJywgMyksCiAgICAgICAgICAgICAoInV0Zi04IiwgIlx1ZDgwMFx1ZGZmZiIsIGInXHhlZFx4YTBceDgwXHhlZFx4YmZceGJmJywgMyksCiAgICAgICAgICAgICAoInV0Zi0xNmxlIiwgIlx1ZDgwMFx1ZGZmZiIsIGInXHgwMFx4ZDhceGZmXHhkZicsIDIpLAogICAgICAgICAgICAgKCJ1dGYtMTZiZSIsICJcdWQ4MDBcdWRmZmYiLCBiJ1x4ZDhceDAwXHhkZlx4ZmYnLCAyKSwKQEAgLTY5NCw3ICs3NzQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZXBhc3NfZXJyb3JzKAogICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKGVuYywgYnl0ZWFycmF5KGIiYSIgKyBiWzpuXSArIGIiYiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIG4sICJvdWNoIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEgKyBuLCAib3VjaCIpKSwKICAgICAgICAgICAgICAgICAgICAgKHNbOjFdLCAxICsgbikKICAgICAgICAgICAgICAgICApCiAKQEAgLTczOCw2ICs4MTgsMTAgQEAKICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycywKICAgICAgICAgICAgIGNvZGVjcy5sb29rdXBfZXJyb3IoImJhY2tzbGFzaHJlcGxhY2UiKQogICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MubmFtZXJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgY29kZWNzLmxvb2t1cF9lcnJvcigibmFtZXJlcGxhY2UiKQorICAgICAgICApCiAKICAgICBkZWYgdGVzdF91bmVuY29kYWJsZXJlcGxhY2VtZW50KHNlbGYpOgogICAgICAgICBkZWYgdW5lbmNyZXBsKGV4Yyk6CkBAIC04OTAsNyArOTc0LDggQEAKICAgICAgICAgY2xhc3MgRChkaWN0KToKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgZm9yIGVyciBpbiAoInN0cmljdCIsICJyZXBsYWNlIiwgInhtbGNoYXJyZWZyZXBsYWNlIiwgImJhY2tzbGFzaHJlcGxhY2UiLCAidGVzdC5wb3NyZXR1cm4iKToKKyAgICAgICAgZm9yIGVyciBpbiAoInN0cmljdCIsICJyZXBsYWNlIiwgInhtbGNoYXJyZWZyZXBsYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgImJhY2tzbGFzaHJlcGxhY2UiLCAibmFtZXJlcGxhY2UiLCAidGVzdC5wb3NyZXR1cm4iKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgY29kZWNzLmNoYXJtYXBfZW5jb2RlLCAiXHhmZiIsIGVyciwgezB4ZmY6IE5vbmV9KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmNoYXJtYXBfZW5jb2RlLCAiXHhmZiIsIGVyciwgRCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9lbmNvZGUsICJceGZmIiwgZXJyLCB7MHhmZjogMzAwfSkKQEAgLTkwNSw3ICs5OTAsNyBAQAogICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgogICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIlx4ZmYiLnRyYW5zbGF0ZSwgRCgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJceGZmIi50cmFuc2xhdGUsIHsweGZmOiBzeXMubWF4dW5pY29kZSsxfSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIlx4ZmYiLnRyYW5zbGF0ZSwgezB4ZmY6IHN5cy5tYXh1bmljb2RlKzF9KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJceGZmIi50cmFuc2xhdGUsIHsweGZmOiAoKX0pCiAKICAgICBkZWYgdGVzdF9idWc4Mjg3Mzcoc2VsZik6CkBAIC05NjcsNiArMTA1Miw3IEBACiAgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycywKICAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycywKICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIGNvZGVjcy5uYW1lcmVwbGFjZV9lcnJvcnMsCiAgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzLAogICAgICAgICAgICAgY29kZWNzLmxvb2t1cF9lcnJvcignc3Vycm9nYXRlZXNjYXBlJyksCiAgICAgICAgICAgICBjb2RlY3MubG9va3VwX2Vycm9yKCdzdXJyb2dhdGVwYXNzJyksCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2NuLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19jbi5weQppbmRleCA2MGU2OWViLi5kMGUzYTE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2NuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfY24ucHkKQEAgLTgzLDggKzgzLDUgQEAKICAgICAgICAgKGIiYWJ+e1x4NzlceDc5XHg0MVx4NDR+fWNkIiwgInJlcGxhY2UiLCAiYWJcdWZmZmRcdWZmZmRcdTgwNGFjZCIpLAogICAgICkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2hrLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19oay5weQppbmRleCAyNWMwNWI2Li5iYjliZTExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2hrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfaGsucHkKQEAgLTE5LDggKzE5LDUgQEAKICAgICAgICAgKGIiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJpZ25vcmUiLCAgImFiY1x1OGIxMCIpLAogICAgICkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2lzbzIwMjIucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2lzbzIwMjIucHkKaW5kZXggODc3Njg2NC4uOGEzY2E3MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19pc28yMDIyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfaXNvMjAyMi5weQpAQCAtMzgsOCArMzgsNSBAQAogICAgIGRlZiB0ZXN0X2NodW5rY29kaW5nKHNlbGYpOgogICAgICAgICBwYXNzCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19qcC5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfanAucHkKaW5kZXggNDA5MTk0OC4uNDRiNjNhMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19qcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2pwLnB5CkBAIC0xMjMsOCArMTIzLDUgQEAKICAgICAgICAgYiJceDg1RyZyZWFsO1x4ODVRID0gJmxhbmc7JiM0NjYwOyZyYW5nOyIKICAgICApCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19rci5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3Nfa3IucHkKaW5kZXggY2Q3Njk2YS4uYjZhNzRmYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19rci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2tyLnB5CkBAIC02Niw4ICs2Niw1IEBACiAgICAgICAgIChiIlx4OENCeHkiLCAicmVwbGFjZSIsICAiXHVGRkZEQnh5IiksCiAgICAgKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfdHcucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX3R3LnB5CmluZGV4IGVhNmUxYzEuLjkxNzQyOTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfdHcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc190dy5weQpAQCAtMTksOCArMTksNSBAQAogICAgICAgICAoYiJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICAiYWJjXHU4YjEwIiksCiAgICAgKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKaW5kZXggOGZlMjFmYi4uMDQ3OTU0MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKQEAgLTM0OSw2ICszNDksOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsICJcdWQ4MDAiLmVuY29kZSwgc2VsZi5lbmNvZGluZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAiYmFja3NsYXNocmVwbGFjZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJbXFx1ZGM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAibmFtZXJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW1xcdWRjODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZywgInhtbGNoYXJyZWZyZXBsYWNlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlsmIzU2NDQ4O10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAiaWdub3JlIiksCkBAIC0zNzYsNiArMzc4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSArIGFmdGVyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3NlcXVlbmNlLmRlY29kZShzZWxmLmVuY29kaW5nLCAicmVwbGFjZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKyBzZWxmLmlsbF9mb3JtZWRfc2VxdWVuY2VfcmVwbGFjZSArIGFmdGVyKQorICAgICAgICAgICAgYmFja3NsYXNocmVwbGFjZSA9ICcnLmpvaW4oJ1xceCUwMngnICUgYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGIgaW4gc2VsZi5pbGxfZm9ybWVkX3NlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3NlcXVlbmNlLmRlY29kZShzZWxmLmVuY29kaW5nLCAiYmFja3NsYXNocmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKyBiYWNrc2xhc2hyZXBsYWNlICsgYWZ0ZXIpCiAKIGNsYXNzIFVURjMyVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMiIKQEAgLTgwOCw2ICs4MTQsNyBAQAogICAgICAgICAgICAgICAgICgnXHVkYzgwJywgJ2lnbm9yZScsIGInJyksCiAgICAgICAgICAgICAgICAgKCdcdWRjODAnLCAncmVwbGFjZScsIGInPycpLAogICAgICAgICAgICAgICAgICgnXHVkYzgwJywgJ2JhY2tzbGFzaHJlcGxhY2UnLCBiJ1xcdWRjODAnKSwKKyAgICAgICAgICAgICAgICAoJ1x1ZGM4MCcsICduYW1lcmVwbGFjZScsIGInXFx1ZGM4MCcpLAogICAgICAgICAgICAgICAgICgnXHVkYzgwJywgJ3N1cnJvZ2F0ZXBhc3MnLCBiJ1x4ZWRceGIyXHg4MCcpLAogICAgICAgICAgICAgKSkKICAgICAgICAgZWxzZToKQEAgLTg2OSw2ICs4NzYsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGIiXHhlZFx4YTBceDgwIi5kZWNvZGUsICJjcDY1MDAxIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgiY3A2NTAwMSIsICJiYWNrc2xhc2hyZXBsYWNlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXFx1ZGM4MF0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJjcDY1MDAxIiwgIm5hbWVyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidbXFx1ZGM4MF0nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJjcDY1MDAxIiwgInhtbGNoYXJyZWZyZXBsYWNlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidbJiM1NjQ0ODtdJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgiY3A2NTAwMSIsICJzdXJyb2dhdGVlc2NhcGUiKSwKQEAgLTg5MCwxMCArODk5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiXFUwMDAxMGZmZlx1RDgwMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2RlY3MubG9va3VwX2Vycm9yKCJzdXJyb2dhdGVwYXNzIikpCiAKLSAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKLSAgICAgICAgc2VsZi5za2lwVGVzdCgiaXNzdWUgIzIwNTcxOiBjb2RlIHBhZ2UgNjUwMDEgY29kZWMgZG9lcyBub3QgIgotICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IHBhcnRpYWwgZGVjb2RlciB5ZXQiKQotCiAKIGNsYXNzIFVURjdUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTciCkBAIC0xMTM5LDYgKzExNDQsNyBAQAogY2xhc3MgRXNjYXBlRGVjb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmVzY2FwZV9kZWNvZGUoYiIiKSwgKGIiIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmVzY2FwZV9kZWNvZGUoYnl0ZWFycmF5KCkpLCAoYiIiLCAwKSkKIAogICAgIGRlZiB0ZXN0X3JhdyhzZWxmKToKICAgICAgICAgZGVjb2RlID0gY29kZWNzLmVzY2FwZV9kZWNvZGUKQEAgLTEzNTcsMTQgKzEzNjMsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZV9pbnRlcm5hbCIpCiAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CiAgICAgICAgICAgICBpbnZhbGlkID0gYiJceDAwXHgwMFx4MTFceDAwIgorICAgICAgICAgICAgaW52YWxpZF9iYWNrc2xhc2hyZXBsYWNlID0gciJceDAwXHgwMFx4MTFceDAwIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaW52YWxpZCA9IGIiXHgwMFx4MTFceDAwXHgwMCIKKyAgICAgICAgICAgIGludmFsaWRfYmFja3NsYXNocmVwbGFjZSA9IHIiXHgwMFx4MTFceDAwXHgwMCIKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkLmRlY29kZSwgInVuaWNvZGVfaW50ZXJuYWwiKQogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW52YWxpZC5kZWNvZGUoInVuaWNvZGVfaW50ZXJuYWwiLCAicmVwbGFjZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHVmZmZkJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludmFsaWQuZGVjb2RlKCJ1bmljb2RlX2ludGVybmFsIiwgImJhY2tzbGFzaHJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9iYWNrc2xhc2hyZXBsYWNlKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoU0laRU9GX1dDSEFSX1QgPT0gNCwgJ3NwZWNpZmljIHRvIDMyLWJpdCB3Y2hhcl90JykKICAgICBkZWYgdGVzdF9kZWNvZGVfZXJyb3JfYXR0cmlidXRlcyhzZWxmKToKQEAgLTE2NzAsNiArMTY4MSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5kZWNvZGUoYidhYmMnKSwgJ2FiYycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLmRlY29kZSwgYidceGZmJywgJ2FzY2lpJykKIAorICAgICAgICAjIHRlc3Qga2V5d29yZHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZGVjb2RlKG9iaj1iJ1x4ZTRceGY2XHhmYycsIGVuY29kaW5nPSdsYXRpbi0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4ZTRceGY2XHhmYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmRlY29kZShiJ1tceGZmXScsICdhc2NpaScsIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1tdJykKKwogICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZW5jb2RlKCdceGU0XHhmNlx4ZmMnLCAnbGF0aW4tMScpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhlNFx4ZjZceGZjJykKQEAgLTE2NzgsNiArMTY5NSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5lbmNvZGUoJ2FiYycpLCBiJ2FiYycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgY29kZWNzLmVuY29kZSwgJ1x4ZmZmZicsICdhc2NpaScpCiAKKyAgICAgICAgIyB0ZXN0IGtleXdvcmRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmVuY29kZShvYmo9J1x4ZTRceGY2XHhmYycsIGVuY29kaW5nPSdsYXRpbi0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGU0XHhmNlx4ZmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5lbmNvZGUoJ1tceGZmXScsICdhc2NpaScsIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidbXScpCisKICAgICBkZWYgdGVzdF9yZWdpc3RlcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVnaXN0ZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlZ2lzdGVyLCA0MikKQEAgLTE3MjYsNiArMTc0OSw3IEBACiAgICAgICAgICAgICAicmVnaXN0ZXJfZXJyb3IiLCAibG9va3VwX2Vycm9yIiwKICAgICAgICAgICAgICJzdHJpY3RfZXJyb3JzIiwgInJlcGxhY2VfZXJyb3JzIiwgImlnbm9yZV9lcnJvcnMiLAogICAgICAgICAgICAgInhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycyIsICJiYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyIsCisgICAgICAgICAgICAibmFtZXJlcGxhY2VfZXJyb3JzIiwKICAgICAgICAgICAgICJvcGVuIiwgIkVuY29kZWRGaWxlIiwKICAgICAgICAgICAgICJpdGVyZW5jb2RlIiwgIml0ZXJkZWNvZGUiLAogICAgICAgICAgICAgIkJPTSIsICJCT01fQkUiLCAiQk9NX0xFIiwKQEAgLTE4NTYsNyArMTg4MCw5IEBACiAgICAgImlzbzg4NTlfOSIsCiAgICAgImpvaGFiIiwKICAgICAia29pOF9yIiwKKyAgICAia29pOF90IiwKICAgICAia29pOF91IiwKKyAgICAia3oxMDQ4IiwKICAgICAibGF0aW5fMSIsCiAgICAgIm1hY19jeXJpbGxpYyIsCiAgICAgIm1hY19ncmVlayIsCkBAIC0yMDg3LDYgKzIxMTMsMTYgQEAKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoYiJceDAwXHgwMVx4MDIiLCAiYmFja3NsYXNocmVwbGFjZSIsICJhYiIpLAorICAgICAgICAgICAgKCJhYlxceDAyIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoYiJceDAwXHgwMVx4MDIiLCAiYmFja3NsYXNocmVwbGFjZSIsICJhYlx1ZmZmZSIpLAorICAgICAgICAgICAgKCJhYlxceDAyIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoYiJceDAwXHgwMVx4MDIiLCAiaWdub3JlIiwgImFiIiksCiAgICAgICAgICAgICAoImFiIiwgMykKICAgICAgICAgKQpAQCAtMjE2Myw2ICsyMTk5LDI1IEBACiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKGIiXHgwMFx4MDFceDAyIiwgImJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiAnYScsIDE6ICdiJ30pLAorICAgICAgICAgICAgKCJhYlxceDAyIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoYiJceDAwXHgwMVx4MDIiLCAiYmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6ICdhJywgMTogJ2InLCAyOiBOb25lfSksCisgICAgICAgICAgICAoImFiXFx4MDIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgIyBJc3N1ZSAjMTQ4NTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZShiIlx4MDBceDAxXHgwMiIsICJiYWNrc2xhc2hyZXBsYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogJ2EnLCAxOiAnYicsIDI6ICdcdWZmZmUnfSksCisgICAgICAgICAgICAoImFiXFx4MDIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZShiIlx4MDBceDAxXHgwMiIsICJpZ25vcmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiAnYScsIDE6ICdiJ30pLAogICAgICAgICAgICAgKCJhYiIsIDMpCkBAIC0yMjM5LDYgKzIyOTQsMTggQEAKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoYiJceDAwXHgwMVx4MDIiLCAiYmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IGEsIDE6IGJ9KSwKKyAgICAgICAgICAgICgiYWJcXHgwMiIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKGIiXHgwMFx4MDFceDAyIiwgImJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiBhLCAxOiBiLCAyOiAweEZGRkV9KSwKKyAgICAgICAgICAgICgiYWJcXHgwMiIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKGIiXHgwMFx4MDFceDAyIiwgImlnbm9yZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IGEsIDE6IGJ9KSwKICAgICAgICAgICAgICgiYWIiLCAzKQpAQCAtMjI4OCw3ICsyMzU1LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVjb2RlciwgInh4eCIpCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2VzY2FwZShzZWxmKToKLSAgICAgICAgIyBFc2NhcGUtZGVjb2RpbmcgYW4gdW5pY29kZSBzdHJpbmcgaXMgc3VwcG9ydGVkIGFuZyBnaXZlcyB0aGUgc2FtZQorICAgICAgICAjIEVzY2FwZS1kZWNvZGluZyBhIHVuaWNvZGUgc3RyaW5nIGlzIHN1cHBvcnRlZCBhbmQgZ2l2ZXMgdGhlIHNhbWUKICAgICAgICAgIyByZXN1bHQgYXMgZGVjb2RpbmcgdGhlIGVxdWl2YWxlbnQgQVNDSUkgYnl0ZXMgc3RyaW5nLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy51bmljb2RlX2VzY2FwZV9kZWNvZGUociJcdTEyMzQiKSwgKCJcdTEyMzQiLCA2KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MudW5pY29kZV9lc2NhcGVfZGVjb2RlKGJyIlx1MTIzNCIpLCAoIlx1MTIzNCIsIDYpKQpAQCAtMjI5Nyw5ICsyMzY0LDEzIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudW5pY29kZV9lc2NhcGVfZGVjb2RlLCBiciJcVTAwMTEwMDAwIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MudW5pY29kZV9lc2NhcGVfZGVjb2RlKHIiXFUwMDExMDAwMCIsICJyZXBsYWNlIiksICgiXHVmZmZkIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy51bmljb2RlX2VzY2FwZV9kZWNvZGUociJcVTAwMTEwMDAwIiwgImJhY2tzbGFzaHJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAociJceDVjXHg1NVx4MzBceDMwXHgzMVx4MzFceDMwXHgzMFx4MzBceDMwIiwgMTApKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnJhd191bmljb2RlX2VzY2FwZV9kZWNvZGUsIGJyIlxVMDAxMTAwMDAiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5yYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlKHIiXFUwMDExMDAwMCIsICJyZXBsYWNlIiksICgiXHVmZmZkIiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5yYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlKHIiXFUwMDExMDAwMCIsICJiYWNrc2xhc2hyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHIiXHg1Y1x4NTVceDMwXHgzMFx4MzFceDMxXHgzMFx4MzBceDMwXHgzMCIsIDEwKSkKIAogCiBjbGFzcyBVbmljb2RlRXNjYXBlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yNjkxLDcgKzI3NjIsNyBAQAogIyB0eXBlIGFuZCBhIHNpbmdsZSBzdHIgYXJndW1lbnQuCiAKICMgVXNlIGEgbG9jYWwgY29kZWMgcmVnaXN0cnkgdG8gYXZvaWQgYXBwZWFyaW5nIHRvIGxlYWsgb2JqZWN0cyB3aGVuCi0jIHJlZ2lzdGVyaW5nIG11bHRpcGxlIHNlYWNoIGZ1bmN0aW9ucworIyByZWdpc3RlcmluZyBtdWx0aXBsZSBzZWFyY2ggZnVuY3Rpb25zCiBfVEVTVF9DT0RFQ1MgPSB7fQogCiBkZWYgX2dldF90ZXN0X2NvZGVjKGNvZGVjX25hbWUpOgpAQCAtMjg4NCwxNSArMjk1NSwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFVuaWNvZGVFbmNvZGVFcnJvciwgJ2NwOTMyJywKICAgICAgICAgICAgIGNvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlLCA5MzIsICdceGZmJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChVbmljb2RlRGVjb2RlRXJyb3IsICdjcDkzMicsCi0gICAgICAgICAgICBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgOTMyLCBiJ1x4ODFceDAwJykKKyAgICAgICAgICAgIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCA5MzIsIGInXHg4MVx4MDAnLCAnc3RyaWN0JywgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChVbmljb2RlRGVjb2RlRXJyb3IsICdDUF9VVEY4JywKLSAgICAgICAgICAgIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCBzZWxmLkNQX1VURjgsIGInXHhmZicpCisgICAgICAgICAgICBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgc2VsZi5DUF9VVEY4LCBiJ1x4ZmYnLCAnc3RyaWN0JywgVHJ1ZSkKIAogICAgIGRlZiBjaGVja19kZWNvZGUoc2VsZiwgY3AsIHRlc3RzKToKICAgICAgICAgZm9yIHJhdywgZXJyb3JzLCBleHBlY3RlZCBpbiB0ZXN0czoKICAgICAgICAgICAgIGlmIGV4cGVjdGVkIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlKGNwLCByYXcsIGVycm9ycykKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlKGNwLCByYXcsIGVycm9ycywgVHJ1ZSkKICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmFibGUgdG8gZGVjb2RlICVhIGZyb20gImNwJXMiIHdpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9ycz0lcjogJXMnICUgKHJhdywgY3AsIGVycm9ycywgZXJyKSkKQEAgLTI5MDQsNyArMjk3NSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZGVjb2RlZFsxXSwgbGVuKHJhdykpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIGNwLCByYXcsIGVycm9ycykKKyAgICAgICAgICAgICAgICAgICAgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIGNwLCByYXcsIGVycm9ycywgVHJ1ZSkKIAogICAgIGRlZiBjaGVja19lbmNvZGUoc2VsZiwgY3AsIHRlc3RzKToKICAgICAgICAgZm9yIHRleHQsIGVycm9ycywgZXhwZWN0ZWQgaW4gdGVzdHM6CkBAIC0yOTMyLDcgKzMwMDMsMTIgQEAKICAgICAgICAgICAgICgnW1x4ZmZdJywgJ3JlcGxhY2UnLCBiJ1t5XScpLAogICAgICAgICAgICAgKCdbXHUyMGFjXScsICdyZXBsYWNlJywgYidbP10nKSwKICAgICAgICAgICAgICgnW1x4ZmZdJywgJ2JhY2tzbGFzaHJlcGxhY2UnLCBiJ1tcXHhmZl0nKSwKKyAgICAgICAgICAgICgnW1x4ZmZdJywgJ25hbWVyZXBsYWNlJywKKyAgICAgICAgICAgICBiJ1tcXE57TEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVN9XScpLAogICAgICAgICAgICAgKCdbXHhmZl0nLCAneG1sY2hhcnJlZnJlcGxhY2UnLCBiJ1smIzI1NTtdJyksCisgICAgICAgICAgICAoJ1x1ZGNmZicsICdzdHJpY3QnLCBOb25lKSwKKyAgICAgICAgICAgICgnW1x1ZGNmZl0nLCAnc3Vycm9nYXRlZXNjYXBlJywgYidbXHhmZl0nKSwKKyAgICAgICAgICAgICgnW1x1ZGNmZl0nLCAnc3Vycm9nYXRlcGFzcycsIE5vbmUpLAogICAgICAgICApKQogICAgICAgICBzZWxmLmNoZWNrX2RlY29kZSg5MzIsICgKICAgICAgICAgICAgIChiJ2FiYycsICdzdHJpY3QnLCAnYWJjJyksCkBAIC0yOTQxLDEwICszMDE3LDEzIEBACiAgICAgICAgICAgICAoYidbXHhmZl0nLCAnc3RyaWN0JywgTm9uZSksCiAgICAgICAgICAgICAoYidbXHhmZl0nLCAnaWdub3JlJywgJ1tdJyksCiAgICAgICAgICAgICAoYidbXHhmZl0nLCAncmVwbGFjZScsICdbXHVmZmZkXScpLAorICAgICAgICAgICAgKGInW1x4ZmZdJywgJ2JhY2tzbGFzaHJlcGxhY2UnLCAnW1xceGZmXScpLAogICAgICAgICAgICAgKGInW1x4ZmZdJywgJ3N1cnJvZ2F0ZWVzY2FwZScsICdbXHVkY2ZmXScpLAorICAgICAgICAgICAgKGInW1x4ZmZdJywgJ3N1cnJvZ2F0ZXBhc3MnLCBOb25lKSwKICAgICAgICAgICAgIChiJ1x4ODFceDAwYWJjJywgJ3N0cmljdCcsIE5vbmUpLAogICAgICAgICAgICAgKGInXHg4MVx4MDBhYmMnLCAnaWdub3JlJywgJ1x4MDBhYmMnKSwKICAgICAgICAgICAgIChiJ1x4ODFceDAwYWJjJywgJ3JlcGxhY2UnLCAnXHVmZmZkXHgwMGFiYycpLAorICAgICAgICAgICAgKGInXHg4MVx4MDBhYmMnLCAnYmFja3NsYXNocmVwbGFjZScsICdcXHg4MVx4MDBhYmMnKSwKICAgICAgICAgKSkKIAogICAgIGRlZiB0ZXN0X2NwMTI1MihzZWxmKToKQEAgLTI5NTIsOSArMzAzMSwxMiBAQAogICAgICAgICAgICAgKCdhYmMnLCAnc3RyaWN0JywgYidhYmMnKSwKICAgICAgICAgICAgICgnXHhlOVx1MjBhYycsICdzdHJpY3QnLCAgYidceGU5XHg4MCcpLAogICAgICAgICAgICAgKCdceGZmJywgJ3N0cmljdCcsIGInXHhmZicpLAorICAgICAgICAgICAgIyB0ZXN0IGVycm9yIGhhbmRsZXJzCiAgICAgICAgICAgICAoJ1x1MDE0MScsICdzdHJpY3QnLCBOb25lKSwKICAgICAgICAgICAgICgnXHUwMTQxJywgJ2lnbm9yZScsIGInJyksCiAgICAgICAgICAgICAoJ1x1MDE0MScsICdyZXBsYWNlJywgYidMJyksCisgICAgICAgICAgICAoJ1x1ZGM5OCcsICdzdXJyb2dhdGVlc2NhcGUnLCBiJ1x4OTgnKSwKKyAgICAgICAgICAgICgnXHVkYzk4JywgJ3N1cnJvZ2F0ZXBhc3MnLCBOb25lKSwKICAgICAgICAgKSkKICAgICAgICAgc2VsZi5jaGVja19kZWNvZGUoMTI1MiwgKAogICAgICAgICAgICAgKGInYWJjJywgJ3N0cmljdCcsICdhYmMnKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZW9wLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkKaW5kZXggYjY1NDIzYi4uNTA5YmY1ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2Rlb3AucHkKQEAgLTMsNyArMyw3IEBACiAgICBOaWNrIE1hdGhld3NvbgogIiIiCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGlzX2p5dGhvbgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGlzX2p5dGhvbgogCiBmcm9tIGNvZGVvcCBpbXBvcnQgY29tcGlsZV9jb21tYW5kLCBQeUNGX0RPTlRfSU1QTFlfREVERU5UCiBpbXBvcnQgaW8KQEAgLTI5Niw5ICsyOTYsNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoImEgPSAxXG4iLCAiZGVmIiwgJ3NpbmdsZScpLmNvX2ZpbGVuYW1lKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoQ29kZW9wVGVzdHMpCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKaW5kZXggMDg4MmJhYy4uNTIzODM4MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CkBAIC0zLDYgKzMsNyBAQAogaW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgY29weQogaW1wb3J0IGRvY3Rlc3QKK2ltcG9ydCBpbnNwZWN0CiBpbXBvcnQga2V5d29yZAogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgcGlja2xlCkBAIC0xMSwxMiArMTIsMTUgQEAKIGltcG9ydCBzdHJpbmcKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgQ291bnRlciwgT3JkZXJlZERpY3QsIF9jb3VudF9lbGVtZW50cwotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgVXNlckRpY3QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IFVzZXJEaWN0LCBVc2VyU3RyaW5nLCBVc2VyTGlzdAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ2hhaW5NYXAKLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBIYXNoYWJsZSwgSXRlcmFibGUsIEl0ZXJhdG9yCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQorZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IEF3YWl0YWJsZSwgQ29yb3V0aW5lLCBBc3luY0l0ZXJhdG9yLCBBc3luY0l0ZXJhYmxlCitmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvciwgR2VuZXJhdG9yCiBmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgU2l6ZWQsIENvbnRhaW5lciwgQ2FsbGFibGUKIGZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBTZXQsIE11dGFibGVTZXQKIGZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBNYXBwaW5nLCBNdXRhYmxlTWFwcGluZywgS2V5c1ZpZXcsIEl0ZW1zVmlldwpAQCAtMjQsNiArMjgsMjYgQEAKIGZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBCeXRlU3RyaW5nCiAKIAorY2xhc3MgVGVzdFVzZXJPYmplY3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX3N1cGVyc2V0X3Rlc3Qoc2VsZiwgYSwgYik6CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKAorICAgICAgICAgICAgc2V0KGRpcihhKSksCisgICAgICAgICAgICBzZXQoZGlyKGIpKSwKKyAgICAgICAgICAgICd7YX0gc2hvdWxkIGhhdmUgYWxsIHRoZSBtZXRob2RzIG9mIHtifScuZm9ybWF0KAorICAgICAgICAgICAgICAgIGE9YS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICBiPWIuX19uYW1lX18sCisgICAgICAgICAgICApLAorICAgICAgICApCisgICAgZGVmIHRlc3Rfc3RyX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBzZWxmLl9zdXBlcnNldF90ZXN0KFVzZXJTdHJpbmcsIHN0cikKKworICAgIGRlZiB0ZXN0X2xpc3RfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHNlbGYuX3N1cGVyc2V0X3Rlc3QoVXNlckxpc3QsIGxpc3QpCisKKyAgICBkZWYgdGVzdF9kaWN0X3Byb3RvY29sKHNlbGYpOgorICAgICAgICBzZWxmLl9zdXBlcnNldF90ZXN0KFVzZXJEaWN0LCBkaWN0KQorCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgQ2hhaW5NYXAgKGhlbHBlciBjbGFzcyBmb3IgY29uZmlncGFyc2VyIGFuZCB0aGUgc3RyaW5nIG1vZHVsZSkKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC05MCw3ICsxMTQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZbJ2InXSwgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpbmQgZmlyc3QgaW4gY2hhaW4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBhcmVudHNbJ2InXSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsb29rIGJleW9uZCBtYXBzWzBdCiAKLSAgICBkZWYgdGVzdF9jb250cnVjdG9yKHNlbGYpOgorICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENoYWluTWFwKCkubWFwcywgW3t9XSkgICAgICAgICAgICAgICAgICAgICAgICAjIG5vLWFyZ3MgLS0+IG9uZSBuZXcgZGljdAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENoYWluTWFwKHsxOjJ9KS5tYXBzLCBbezE6Mn1dKSAgICAgICAgICAgICAgICAjIDEgYXJnIC0tPiBsaXN0CiAKQEAgLTE5OSw2ICsyMjMsMTQgQEAKICAgICAgICAgUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fZG9jX18sICdQb2ludCh4LCB5KScpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9kb2Nfd3JpdGFibGUoc2VsZik6CisgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC54Ll9fZG9jX18sICdBbGlhcyBmb3IgZmllbGQgbnVtYmVyIDAnKQorICAgICAgICBQb2ludC54Ll9fZG9jX18gPSAnZG9jc3RyaW5nIGZvciBQb2ludC54JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50LnguX19kb2NfXywgJ2RvY3N0cmluZyBmb3IgUG9pbnQueCcpCisKICAgICBkZWYgdGVzdF9uYW1lX2ZpeGVyKHNlbGYpOgogICAgICAgICBmb3Igc3BlYywgcmVuYW1lZCBpbiBbCiAgICAgICAgICAgICBbKCdlZmcnLCAnZyVoaScpLCAgKCdlZmcnLCAnXzEnKV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZCB3aXRoIG5vbi1hbHBoYSBjaGFyCkBAIC00NTcsNiArNDg5LDEyMSBAQAogCiBjbGFzcyBUZXN0T25lVHJpY2tQb255QUJDcyhBQkNUZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdF9Bd2FpdGFibGUoc2VsZik6CisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBhc3luYyBkZWYgbmV3X2Nvcm8oKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBCYXI6CisgICAgICAgICAgICBkZWYgX19hd2FpdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgY2xhc3MgTWluaW1hbENvcm8oQ29yb3V0aW5lKToKKyAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgICAgIGRlZiB0aHJvdyhzZWxmLCB0eXAsIHZhbD1Ob25lLCB0Yj1Ob25lKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLnRocm93KHR5cCwgdmFsLCB0YikKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICAgICAgeWllbGQKKworICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCBpbnQoKSwgZ2VuKCksIG9iamVjdCgpXQorICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBBd2FpdGFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgQXdhaXRhYmxlKSwgcmVwcih0eXBlKHgpKSkKKworICAgICAgICBzYW1wbGVzID0gW0JhcigpLCBNaW5pbWFsQ29ybygpXQorICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIEF3YWl0YWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIEF3YWl0YWJsZSkpCisKKyAgICAgICAgYyA9IGNvcm8oKQorICAgICAgICAjIEl0ZXJhYmxlIGNvcm91dGluZXMgKGdlbmVyYXRvcnMgd2l0aCBDT19JVEVSQUJMRV9DT1JPVVRJTkUKKyAgICAgICAgIyBmbGFnIGRvbid0IGhhdmUgJ19fYXdhaXRfXycgbWV0aG9kLCBoZW5jZSBjYW4ndCBiZSBpbnN0YW5jZXMKKyAgICAgICAgIyBvZiBBd2FpdGFibGUuIFVzZSBpbnNwZWN0LmlzYXdhaXRhYmxlIHRvIGRldGVjdCB0aGVtLgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoYywgQXdhaXRhYmxlKQorCisgICAgICAgIGMgPSBuZXdfY29ybygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBBd2FpdGFibGUpCisgICAgICAgIGMuY2xvc2UoKSAjIGF3b2lkIFJ1bnRpbWVXYXJuaW5nIHRoYXQgY29ybygpIHdhcyBub3QgYXdhaXRlZAorCisgICAgICAgIGNsYXNzIENvcm9MaWtlOiBwYXNzCisgICAgICAgIENvcm91dGluZS5yZWdpc3RlcihDb3JvTGlrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoQ29yb0xpa2UoKSwgQXdhaXRhYmxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQ29yb0xpa2UsIEF3YWl0YWJsZSkpCisgICAgICAgIENvcm9MaWtlID0gTm9uZQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKSAjIEtpbGwgQ29yb0xpa2UgdG8gY2xlYW4tdXAgQUJDTWV0YSBjYWNoZQorCisgICAgZGVmIHRlc3RfQ29yb3V0aW5lKHNlbGYpOgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgYXN5bmMgZGVmIG5ld19jb3JvKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFyOgorICAgICAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIGNsYXNzIE1pbmltYWxDb3JvKENvcm91dGluZSk6CisgICAgICAgICAgICBkZWYgc2VuZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICAgICBkZWYgdGhyb3coc2VsZiwgdHlwLCB2YWw9Tm9uZSwgdGI9Tm9uZSk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS50aHJvdyh0eXAsIHZhbCwgdGIpCisgICAgICAgICAgICBkZWYgX19hd2FpdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgbm9uX3NhbXBsZXMgPSBbTm9uZSwgaW50KCksIGdlbigpLCBvYmplY3QoKSwgQmFyKCldCisgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIENvcm91dGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBDb3JvdXRpbmUpLCByZXByKHR5cGUoeCkpKQorCisgICAgICAgIHNhbXBsZXMgPSBbTWluaW1hbENvcm8oKV0KKyAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBBd2FpdGFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBBd2FpdGFibGUpKQorCisgICAgICAgIGMgPSBjb3JvKCkKKyAgICAgICAgIyBJdGVyYWJsZSBjb3JvdXRpbmVzIChnZW5lcmF0b3JzIHdpdGggQ09fSVRFUkFCTEVfQ09ST1VUSU5FCisgICAgICAgICMgZmxhZyBkb24ndCBoYXZlICdfX2F3YWl0X18nIG1ldGhvZCwgaGVuY2UgY2FuJ3QgYmUgaW5zdGFuY2VzCisgICAgICAgICMgb2YgQ29yb3V0aW5lLiBVc2UgaW5zcGVjdC5pc2F3YWl0YWJsZSB0byBkZXRlY3QgdGhlbS4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGMsIENvcm91dGluZSkKKworICAgICAgICBjID0gbmV3X2Nvcm8oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgQ29yb3V0aW5lKQorICAgICAgICBjLmNsb3NlKCkgIyBhd29pZCBSdW50aW1lV2FybmluZyB0aGF0IGNvcm8oKSB3YXMgbm90IGF3YWl0ZWQKKworICAgICAgICBjbGFzcyBDb3JvTGlrZToKKyAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGhyb3coc2VsZiwgdHlwLCB2YWw9Tm9uZSwgdGI9Tm9uZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShDb3JvTGlrZSgpLCBDb3JvdXRpbmUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDb3JvTGlrZSwgQ29yb3V0aW5lKSkKKworICAgICAgICBjbGFzcyBDb3JvTGlrZToKKyAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShDb3JvTGlrZSgpLCBDb3JvdXRpbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQ29yb0xpa2UsIENvcm91dGluZSkpCisKICAgICBkZWYgdGVzdF9IYXNoYWJsZShzZWxmKToKICAgICAgICAgIyBDaGVjayBzb21lIG5vbi1oYXNoYWJsZXMKICAgICAgICAgbm9uX3NhbXBsZXMgPSBbYnl0ZWFycmF5KCksIGxpc3QoKSwgc2V0KCksIGRpY3QoKV0KQEAgLTQ4Myw2ICs2MzAsNDAgQEAKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEhhc2hhYmxlLCAnX19oYXNoX18nKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoSGFzaGFibGUsICdfX2hhc2hfXycpCiAKKyAgICBkZWYgdGVzdF9Bc3luY0l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBBSToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoQUkoKSwgQXN5bmNJdGVyYWJsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEFJLCBBc3luY0l0ZXJhYmxlKSkKKyAgICAgICAgIyBDaGVjayBzb21lIG5vbi1pdGVyYWJsZXMKKyAgICAgICAgbm9uX3NhbXBsZXMgPSBbTm9uZSwgb2JqZWN0LCBbXV0KKyAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoeCwgQXN5bmNJdGVyYWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBBc3luY0l0ZXJhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEFzeW5jSXRlcmFibGUsICdfX2FpdGVyX18nKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoQXN5bmNJdGVyYWJsZSwgJ19fYWl0ZXJfXycpCisKKyAgICBkZWYgdGVzdF9Bc3luY0l0ZXJhdG9yKHNlbGYpOgorICAgICAgICBjbGFzcyBBSToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FuZXh0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEFzeW5jSXRlcmF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKEFJKCksIEFzeW5jSXRlcmF0b3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhBSSwgQXN5bmNJdGVyYXRvcikpCisgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIG9iamVjdCwgW11dCisgICAgICAgICMgQ2hlY2sgc29tZSBub24taXRlcmFibGVzCisgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIEFzeW5jSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgQXN5bmNJdGVyYXRvciksIHJlcHIodHlwZSh4KSkpCisgICAgICAgICMgU2ltaWxhcmx5IHRvIHJlZ3VsYXIgaXRlcmF0b3JzIChzZWUgaXNzdWUgMTA1NjUpCisgICAgICAgIGNsYXNzIEFuZXh0T25seToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FuZXh0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEFzeW5jSXRlcmF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShBbmV4dE9ubHkoKSwgQXN5bmNJdGVyYXRvcikKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEFzeW5jSXRlcmF0b3IsICdfX2FuZXh0X18nLCAnX19haXRlcl9fJykKKwogICAgIGRlZiB0ZXN0X0l0ZXJhYmxlKHNlbGYpOgogICAgICAgICAjIENoZWNrIHNvbWUgbm9uLWl0ZXJhYmxlcwogICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWpdCkBAIC01MzAsOSArNzExLDgwIEBACiAgICAgICAgIGNsYXNzIE5leHRPbmx5OgogICAgICAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHlpZWxkIDEKLSAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShOZXh0T25seSgpLCBJdGVyYXRvcikKIAorICAgIGRlZiB0ZXN0X0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgY2xhc3MgTm9uR2VuMToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKTogcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRocm93KHNlbGYsIHR5cCwgdmFsPU5vbmUsIHRiPU5vbmUpOiBwYXNzCisKKyAgICAgICAgY2xhc3MgTm9uR2VuMjoKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKTogcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHNlbmQoc2VsZiwgdmFsdWUpOiByZXR1cm4gdmFsdWUKKworICAgICAgICBjbGFzcyBOb25HZW4zOgorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgc2VuZChzZWxmLCB2YWx1ZSk6IHJldHVybiB2YWx1ZQorICAgICAgICAgICAgZGVmIHRocm93KHNlbGYsIHR5cCwgdmFsPU5vbmUsIHRiPU5vbmUpOiBwYXNzCisKKyAgICAgICAgbm9uX3NhbXBsZXMgPSBbCisgICAgICAgICAgICBOb25lLCA0MiwgMy4xNCwgMWosIGIiIiwgIiIsICgpLCBbXSwge30sIHNldCgpLAorICAgICAgICAgICAgaXRlcigoKSksIGl0ZXIoW10pLCBOb25HZW4xKCksIE5vbkdlbjIoKSwgTm9uR2VuMygpXQorICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBHZW5lcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgR2VuZXJhdG9yKSwgcmVwcih0eXBlKHgpKSkKKworICAgICAgICBjbGFzcyBHZW46CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6IHJldHVybiBOb25lCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIHZhbHVlKTogcmV0dXJuIHZhbHVlCisgICAgICAgICAgICBkZWYgdGhyb3coc2VsZiwgdHlwLCB2YWw9Tm9uZSwgdGI9Tm9uZSk6IHBhc3MKKworICAgICAgICBjbGFzcyBNaW5pbWFsR2VuKEdlbmVyYXRvcik6CisgICAgICAgICAgICBkZWYgc2VuZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICAgICBkZWYgdGhyb3coc2VsZiwgdHlwLCB2YWw9Tm9uZSwgdGI9Tm9uZSk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS50aHJvdyh0eXAsIHZhbCwgdGIpCisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMQorCisgICAgICAgIHNhbXBsZXMgPSBbZ2VuKCksIChsYW1iZGE6ICh5aWVsZCkpKCksIEdlbigpLCBNaW5pbWFsR2VuKCldCisgICAgICAgIGZvciB4IGluIHNhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgR2VuZXJhdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgR2VuZXJhdG9yKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEdlbmVyYXRvciwgJ3NlbmQnLCAndGhyb3cnKQorCisgICAgICAgICMgbWl4aW4gdGVzdHMKKyAgICAgICAgbWdlbiA9IE1pbmltYWxHZW4oKQorICAgICAgICBzZWxmLmFzc2VydElzKG1nZW4sIGl0ZXIobWdlbikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWdlbi5zZW5kKE5vbmUpLCBuZXh0KG1nZW4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1nZW4uc2VuZCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWdlbi5jbG9zZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZ2VuLnRocm93LCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJeaHVodSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1nZW4udGhyb3csIFZhbHVlRXJyb3IsIFZhbHVlRXJyb3IoImh1aHUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbWdlbi50aHJvdywgU3RvcEl0ZXJhdGlvbigpKQorCisgICAgICAgIGNsYXNzIEZhaWxPbkNsb3NlKEdlbmVyYXRvcik6CisgICAgICAgICAgICBkZWYgc2VuZChzZWxmLCB2YWx1ZSk6IHJldHVybiB2YWx1ZQorICAgICAgICAgICAgZGVmIHRocm93KHNlbGYsICphcmdzKTogcmFpc2UgVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEZhaWxPbkNsb3NlKCkuY2xvc2UpCisKKyAgICAgICAgY2xhc3MgSWdub3JlR2VuZXJhdG9yRXhpdChHZW5lcmF0b3IpOgorICAgICAgICAgICAgZGVmIHNlbmQoc2VsZiwgdmFsdWUpOiByZXR1cm4gdmFsdWUKKyAgICAgICAgICAgIGRlZiB0aHJvdyhzZWxmLCAqYXJncyk6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIElnbm9yZUdlbmVyYXRvckV4aXQoKS5jbG9zZSkKKwogICAgIGRlZiB0ZXN0X1NpemVkKHNlbGYpOgogICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWosCiAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGE6ICh5aWVsZCkpKCksCkBAIC02NTksNiArOTExLDU5IEBACiAgICAgICAgIGEsIGIgPSBPbmVUd29UaHJlZVNldCgpLCBPbmVUd29UaHJlZVNldCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNoKGEpID09IGhhc2goYikpCiAKKyAgICBkZWYgdGVzdF9pc2Rpc2pvaW50X1NldChzZWxmKToKKyAgICAgICAgY2xhc3MgTXlTZXQoU2V0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdHIpOgorICAgICAgICAgICAgICAgIHNlbGYuY29udGVudHMgPSBpdHIKKyAgICAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHggaW4gc2VsZi5jb250ZW50cworICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuY29udGVudHMpCisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVuKFt4IGZvciB4IGluIHNlbGYuY29udGVudHNdKQorICAgICAgICBzMSA9IE15U2V0KCgxLCAyLCAzKSkKKyAgICAgICAgczIgPSBNeVNldCgoNCwgNSwgNikpCisgICAgICAgIHMzID0gTXlTZXQoKDEsIDUsIDYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoczEuaXNkaXNqb2ludChzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoczEuaXNkaXNqb2ludChzMykpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eV9TZXQoc2VsZik6CisgICAgICAgIGNsYXNzIE15U2V0KFNldCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaXRyKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRlbnRzID0gaXRyCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHJldHVybiB4IGluIHNlbGYuY29udGVudHMKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcihzZWxmLmNvbnRlbnRzKQorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihbeCBmb3IgeCBpbiBzZWxmLmNvbnRlbnRzXSkKKyAgICAgICAgczEgPSBNeVNldCgoMSwpKQorICAgICAgICBzMiA9IE15U2V0KCgxLCAyKSkKKyAgICAgICAgczMgPSBNeVNldCgoMywgNCkpCisgICAgICAgIHM0ID0gTXlTZXQoKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoczIgPiBzMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIDwgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoczIgPD0gczEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoczIgPD0gczMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoczEgPj0gczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczMsIHM0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHMyLCBzMykKKworICAgIGRlZiB0ZXN0X2FyaXRobWV0aWNfU2V0KHNlbGYpOgorICAgICAgICBjbGFzcyBNeVNldChTZXQpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0cik6CisgICAgICAgICAgICAgICAgc2VsZi5jb250ZW50cyA9IGl0cgorICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICByZXR1cm4geCBpbiBzZWxmLmNvbnRlbnRzCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5jb250ZW50cykKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBsZW4oW3ggZm9yIHggaW4gc2VsZi5jb250ZW50c10pCisgICAgICAgIHMxID0gTXlTZXQoKDEsIDIsIDMpKQorICAgICAgICBzMiA9IE15U2V0KCgzLCA0LCA1KSkKKyAgICAgICAgczMgPSBzMSAmIHMyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczMsIE15U2V0KCgzLCkpKQorCiAgICAgZGVmIHRlc3RfTXV0YWJsZVNldChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNldCgpLCBNdXRhYmxlU2V0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZXQsIE11dGFibGVTZXQpKQpAQCAtOTU5LDYgKzEyNjQsNDEgQEAKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKFNlcXVlbmNlLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAogICAgICAgICAgICAgJ19fZ2V0aXRlbV9fJykKIAorICAgIGRlZiB0ZXN0X1NlcXVlbmNlX21peGlucyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2VxdWVuY2VTdWJjbGFzcyhTZXF1ZW5jZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VxPSgpKToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcSA9IHNlcQorCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNlcVtpbmRleF0KKworICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnNlcSkKKworICAgICAgICAjIENvbXBhcmUgU2VxdWVuY2UuaW5kZXgoKSBiZWhhdmlvciB0byAobGlzdHxzdHIpLmluZGV4KCkgYmVoYXZpb3IKKyAgICAgICAgZGVmIGFzc2VydF9pbmRleF9zYW1lKHNlcTEsIHNlcTIsIGluZGV4X2FyZ3MpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VxMS5pbmRleCgqaW5kZXhfYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHNlcTIuaW5kZXgoKmluZGV4X2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHNlcTIuaW5kZXgoKmluZGV4X2FyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsLCBleHBlY3RlZCwgJyVyLmluZGV4JXMnICUgKHNlcTEsIGluZGV4X2FyZ3MpKQorCisgICAgICAgIGZvciB0eSBpbiBsaXN0LCBzdHI6CisgICAgICAgICAgICBuYXRpdmVzZXEgPSB0eSgnYWJyYWNhZGFicmEnKQorICAgICAgICAgICAgaW5kZXhlcyA9IFstMTAwMDAsIC05OTk5XSArIGxpc3QocmFuZ2UoLTMsIGxlbihuYXRpdmVzZXEpICsgMykpCisgICAgICAgICAgICBzZXFzZXEgPSBTZXF1ZW5jZVN1YmNsYXNzKG5hdGl2ZXNlcSkKKyAgICAgICAgICAgIGZvciBsZXR0ZXIgaW4gc2V0KG5hdGl2ZXNlcSkgfCB7J3onfToKKyAgICAgICAgICAgICAgICBhc3NlcnRfaW5kZXhfc2FtZShuYXRpdmVzZXEsIHNlcXNlcSwgKGxldHRlciwpKQorICAgICAgICAgICAgICAgIGZvciBzdGFydCBpbiByYW5nZSgtMywgbGVuKG5hdGl2ZXNlcSkgKyAzKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X2luZGV4X3NhbWUobmF0aXZlc2VxLCBzZXFzZXEsIChsZXR0ZXIsIHN0YXJ0KSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHN0b3AgaW4gcmFuZ2UoLTMsIGxlbihuYXRpdmVzZXEpICsgMyk6CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfaW5kZXhfc2FtZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVzZXEsIHNlcXNlcSwgKGxldHRlciwgc3RhcnQsIHN0b3ApKQorCiAgICAgZGVmIHRlc3RfQnl0ZVN0cmluZyhzZWxmKToKICAgICAgICAgZm9yIHNhbXBsZSBpbiBbYnl0ZXMsIGJ5dGVhcnJheV06CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIEJ5dGVTdHJpbmcpCkBAIC05NzMsNyArMTMxMyw3IEBACiAgICAgICAgIGZvciBzYW1wbGUgaW4gW3R1cGxlLCBzdHIsIGJ5dGVzXToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzYW1wbGUoKSwgTXV0YWJsZVNlcXVlbmNlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZVNlcXVlbmNlKSkKLSAgICAgICAgZm9yIHNhbXBsZSBpbiBbbGlzdCwgYnl0ZWFycmF5XToKKyAgICAgICAgZm9yIHNhbXBsZSBpbiBbbGlzdCwgYnl0ZWFycmF5LCBkZXF1ZV06CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVTZXF1ZW5jZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZVNlcXVlbmNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHN0ciwgTXV0YWJsZVNlcXVlbmNlKSkKQEAgLTEyODksNyArMTYyOSw5IEBACiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgTmFtZWRUdXBsZURvY3MgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZShtb2R1bGU9Y29sbGVjdGlvbnMpCiAgICAgdGVzdF9jbGFzc2VzID0gW1Rlc3ROYW1lZFR1cGxlLCBOYW1lZFR1cGxlRG9jcywgVGVzdE9uZVRyaWNrUG9ueUFCQ3MsCi0gICAgICAgICAgICAgICAgICAgIFRlc3RDb2xsZWN0aW9uQUJDcywgVGVzdENvdW50ZXIsIFRlc3RDaGFpbk1hcF0KKyAgICAgICAgICAgICAgICAgICAgVGVzdENvbGxlY3Rpb25BQkNzLCBUZXN0Q291bnRlciwgVGVzdENoYWluTWFwLAorICAgICAgICAgICAgICAgICAgICBUZXN0VXNlck9iamVjdHMsCisgICAgICAgICAgICAgICAgICAgIF0KICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QoY29sbGVjdGlvbnMsIHZlcmJvc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGFyZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGFyZS5weQppbmRleCBhNjYzODMyLi40NzFjOGRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBhcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21wYXJlLnB5CkBAIC0xLDUgKzEsNCBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogY2xhc3MgRW1wdHk6CiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgpAQCAtMTIxLDggKzEyMCw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQW55dGhpbmcoKSwgeSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29tcGFyaXNvblRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQppbmRleCBlZTI4Y2E5Li44MjRlODQzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CkBAIC01LDcgKzUsOCBAQAogaW1wb3J0IF9hc3QKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHR5cGVzCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHNjcmlwdF9oZWxwZXIKIAogY2xhc3MgVGVzdFNwZWNpZmljcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTQyNyw3ICs0MjgsNyBAQAogCiAgICAgZGVmIHRlc3RfY29tcGlsZV9hc3Qoc2VsZik6CiAgICAgICAgIGZuYW1lID0gX19maWxlX18KLSAgICAgICAgaWYgZm5hbWUubG93ZXIoKS5lbmRzd2l0aCgoJ3B5YycsICdweW8nKSk6CisgICAgICAgIGlmIGZuYW1lLmxvd2VyKCkuZW5kc3dpdGgoJ3B5YycpOgogICAgICAgICAgICAgZm5hbWUgPSBmbmFtZVs6LTFdCiAgICAgICAgIHdpdGggb3BlbihmbmFtZSwgJ3InKSBhcyBmOgogICAgICAgICAgICAgZmNvbnRlbnRzID0gZi5yZWFkKCkKQEAgLTQ2MCw2ICs0NjEsMjQgQEAKICAgICAgICAgYXN0LmJvZHkgPSBbX2FzdC5Cb29sT3AoKV0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21waWxlLCBhc3QsICc8YXN0PicsICdleGVjJykKIAorICAgIGRlZiB0ZXN0X2RpY3RfZXZhbHVhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgaSA9IDAKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgbm9ubG9jYWwgaQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICByZXR1cm4gaQorCisgICAgICAgIGQgPSB7ZigpOiBmKCksIGYoKTogZigpfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsxOiAyLCAzOiA0fSkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGZvciBmaWxlbmFtZSBpbiAoJ2ZpbGUucHknLCBiJ2ZpbGUucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiJ2ZpbGUucHknKSwgbWVtb3J5dmlldyhiJ2ZpbGUucHknKSk6CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZSgncGFzcycsIGZpbGVuYW1lLCAnZXhlYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICdmaWxlLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21waWxlLCAncGFzcycsIGxpc3QoYidmaWxlLnB5JyksICdleGVjJykKKwogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X3NhbWVfZmlsZW5hbWVfdXNlZChzZWxmKToKICAgICAgICAgcyA9ICIiImRlZiBmKCk6IHBhc3NcbmRlZiBnKCk6IHBhc3MiIiIKQEAgLTUzMiw3ICs1NTEsNyBAQAogICAgICAgICAgICAgYnJva2VuID0gcHJlZml4ICsgcmVwZWF0ZWQgKiBmYWlsX2RlcHRoCiAgICAgICAgICAgICBkZXRhaWxzID0gIkNvbXBpbGluZyAoeyFyfSArIHshcn0gKiB7fSkiLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXgsIHJlcGVhdGVkLCBmYWlsX2RlcHRoKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG1zZz1kZXRhaWxzKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIG1zZz1kZXRhaWxzKToKICAgICAgICAgICAgICAgICBzZWxmLmNvbXBpbGVfc2luZ2xlKGJyb2tlbikKIAogICAgICAgICBjaGVja19saW1pdCgiYSIsICIoKSIpCkBAIC01NDMsMTAgKzU2Miw5IEBACiAgICAgZGVmIHRlc3RfbnVsbF90ZXJtaW5hdGVkKHNlbGYpOgogICAgICAgICAjIFRoZSBzb3VyY2UgY29kZSBpcyBudWxsLXRlcm1pbmF0ZWQgaW50ZXJuYWxseSwgYnV0IGJ5dGVzLWxpa2UKICAgICAgICAgIyBvYmplY3RzIGFyZSBhY2NlcHRlZCwgd2hpY2ggY291bGQgYmUgbm90IHRlcm1pbmF0ZWQuCi0gICAgICAgICMgRXhjZXB0aW9uIGNoYW5nZWQgZnJvbSBUeXBlRXJyb3IgdG8gVmFsdWVFcnJvciBpbiAzLjUKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgImNhbm5vdCBjb250YWluIG51bGwiKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYW5ub3QgY29udGFpbiBudWxsIik6CiAgICAgICAgICAgICBjb21waWxlKCIxMjNceDAwIiwgIjxkdW1teT4iLCAiZXZhbCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sICJjYW5ub3QgY29udGFpbiBudWxsIik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAiY2Fubm90IGNvbnRhaW4gbnVsbCIpOgogICAgICAgICAgICAgY29tcGlsZShtZW1vcnl2aWV3KGIiMTIzXHgwMCIpLCAiPGR1bW15PiIsICJldmFsIikKICAgICAgICAgY29kZSA9IGNvbXBpbGUobWVtb3J5dmlldyhiIjEyM1x4MDAiKVsxOi0xXSwgIjxkdW1teT4iLCAiZXZhbCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgMjMpCkBAIC01NjEsNiArNTc5LDg4IEBACiAgICAgICAgIGV4ZWMobWVtb3J5dmlldyhiImF4ID0gMTIzIilbMTotMV0sIG5hbWVzcGFjZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2VbJ3gnXSwgMTIpCiAKKyAgICBkZWYgY2hlY2tfY29uc3RhbnQoc2VsZiwgZnVuYywgZXhwZWN0ZWQpOgorICAgICAgICBmb3IgY29uc3QgaW4gZnVuYy5fX2NvZGVfXy5jb19jb25zdHM6CisgICAgICAgICAgICBpZiByZXByKGNvbnN0KSA9PSByZXByKGV4cGVjdGVkKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmFibGUgdG8gZmluZCBjb25zdGFudCAlciBpbiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAlIChleHBlY3RlZCwgZnVuYy5fX2NvZGVfXy5jb19jb25zdHMpKQorCisgICAgIyBNZXJnaW5nIGVxdWFsIGNvbnN0YW50cyBpcyBub3QgYSBzdHJpY3QgcmVxdWlyZW1lbnQgZm9yIHRoZSBQeXRob24KKyAgICAjIHNlbWFudGljcywgaXQncyBhIG1vcmUgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X21lcmdlX2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjU4NDM6IGNvbXBpbGUoKSBtdXN0IG1lcmdlIGNvbnN0YW50cyB3aGljaCBhcmUgZXF1YWwKKyAgICAgICAgIyBhbmQgaGF2ZSB0aGUgc2FtZSB0eXBlLgorCisgICAgICAgIGRlZiBjaGVja19zYW1lX2NvbnN0YW50KGNvbnN0KToKKyAgICAgICAgICAgIG5zID0ge30KKyAgICAgICAgICAgIGNvZGUgPSAiZjEsIGYyID0gbGFtYmRhOiAlciwgbGFtYmRhOiAlciIgJSAoY29uc3QsIGNvbnN0KQorICAgICAgICAgICAgZXhlYyhjb2RlLCBucykKKyAgICAgICAgICAgIGYxID0gbnNbJ2YxJ10KKyAgICAgICAgICAgIGYyID0gbnNbJ2YyJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZjEuX19jb2RlX18sIGYyLl9fY29kZV9fKQorICAgICAgICAgICAgc2VsZi5jaGVja19jb25zdGFudChmMSwgY29uc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZjEoKSksIHJlcHIoY29uc3QpKQorCisgICAgICAgIGNoZWNrX3NhbWVfY29uc3RhbnQoTm9uZSkKKyAgICAgICAgY2hlY2tfc2FtZV9jb25zdGFudCgwKQorICAgICAgICBjaGVja19zYW1lX2NvbnN0YW50KDAuMCkKKyAgICAgICAgY2hlY2tfc2FtZV9jb25zdGFudChiJ2FiYycpCisgICAgICAgIGNoZWNrX3NhbWVfY29uc3RhbnQoJ2FiYycpCisKKyAgICAgICAgIyBOb3RlOiAibGFtYmRhOiAuLi4iIGVtaXRzICJMT0FEX0NPTlNUIEVsbGlwc2lzIiwKKyAgICAgICAgIyB3aGVyZWFzICJsYW1iZGE6IEVsbGlwc2lzIiBlbWl0cyAiTE9BRF9HTE9CQUwgRWxsaXBzaXMiCisgICAgICAgIGYxLCBmMiA9IGxhbWJkYTogLi4uLCBsYW1iZGE6IC4uLgorICAgICAgICBzZWxmLmFzc2VydElzKGYxLl9fY29kZV9fLCBmMi5fX2NvZGVfXykKKyAgICAgICAgc2VsZi5jaGVja19jb25zdGFudChmMSwgRWxsaXBzaXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmMSgpKSwgcmVwcihFbGxpcHNpcykpCisKKyAgICAgICAgIyB7MH0gaXMgY29udmVydGVkIHRvIGEgY29uc3RhbnQgZnJvemVuc2V0KHswfSkgYnkgdGhlIHBlZXBob2xlCisgICAgICAgICMgb3B0aW1pemVyCisgICAgICAgIGYxLCBmMiA9IGxhbWJkYSB4OiB4IGluIHswfSwgbGFtYmRhIHg6IHggaW4gezB9CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZjEuX19jb2RlX18sIGYyLl9fY29kZV9fKQorICAgICAgICBzZWxmLmNoZWNrX2NvbnN0YW50KGYxLCBmcm96ZW5zZXQoezB9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxKDApKQorCisgICAgZGVmIHRlc3RfZG9udF9tZXJnZV9jb25zdGFudHMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI1ODQzOiBjb21waWxlKCkgbXVzdCBub3QgbWVyZ2UgY29uc3RhbnRzIHdoaWNoIGFyZSBlcXVhbAorICAgICAgICAjIGJ1dCBoYXZlIGEgZGlmZmVyZW50IHR5cGUuCisKKyAgICAgICAgZGVmIGNoZWNrX2RpZmZlcmVudF9jb25zdGFudHMoY29uc3QxLCBjb25zdDIpOgorICAgICAgICAgICAgbnMgPSB7fQorICAgICAgICAgICAgZXhlYygiZjEsIGYyID0gbGFtYmRhOiAlciwgbGFtYmRhOiAlciIgJSAoY29uc3QxLCBjb25zdDIpLCBucykKKyAgICAgICAgICAgIGYxID0gbnNbJ2YxJ10KKyAgICAgICAgICAgIGYyID0gbnNbJ2YyJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZjEuX19jb2RlX18sIGYyLl9fY29kZV9fKQorICAgICAgICAgICAgc2VsZi5jaGVja19jb25zdGFudChmMSwgY29uc3QxKQorICAgICAgICAgICAgc2VsZi5jaGVja19jb25zdGFudChmMiwgY29uc3QyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGYxKCkpLCByZXByKGNvbnN0MSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZjIoKSksIHJlcHIoY29uc3QyKSkKKworICAgICAgICBjaGVja19kaWZmZXJlbnRfY29uc3RhbnRzKDAsIDAuMCkKKyAgICAgICAgY2hlY2tfZGlmZmVyZW50X2NvbnN0YW50cygrMC4wLCAtMC4wKQorICAgICAgICBjaGVja19kaWZmZXJlbnRfY29uc3RhbnRzKCgwLCksICgwLjAsKSkKKworICAgICAgICAjIGNoZWNrX2RpZmZlcmVudF9jb25zdGFudHMoKSBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIHJlcHIoLTBqKSBpcworICAgICAgICAjICcoLTAtMGopJywgYnV0IHdoZW4gJygtMC0waiknIGlzIGV2YWx1YXRlZCB0byAwajogd2UgbG9vc2UgdGhlIHNpZ24uCisgICAgICAgIGYxLCBmMiA9IGxhbWJkYTogKzAuMGosIGxhbWJkYTogLTAuMGoKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmMS5fX2NvZGVfXywgZjIuX19jb2RlX18pCisgICAgICAgIHNlbGYuY2hlY2tfY29uc3RhbnQoZjEsICswLjBqKQorICAgICAgICBzZWxmLmNoZWNrX2NvbnN0YW50KGYyLCAtMC4waikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGYxKCkpLCByZXByKCswLjBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGYyKCkpLCByZXByKC0wLjBqKSkKKworICAgICAgICAjIHswfSBpcyBjb252ZXJ0ZWQgdG8gYSBjb25zdGFudCBmcm96ZW5zZXQoezB9KSBieSB0aGUgcGVlcGhvbGUKKyAgICAgICAgIyBvcHRpbWl6ZXIKKyAgICAgICAgZjEsIGYyID0gbGFtYmRhIHg6IHggaW4gezB9LCBsYW1iZGEgeDogeCBpbiB7MC4wfQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGYxLl9fY29kZV9fLCBmMi5fX2NvZGVfXykKKyAgICAgICAgc2VsZi5jaGVja19jb25zdGFudChmMSwgZnJvemVuc2V0KHswfSkpCisgICAgICAgIHNlbGYuY2hlY2tfY29uc3RhbnQoZjIsIGZyb3plbnNldCh7MC4wfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYyKDAuMCkpCisKIAogY2xhc3MgVGVzdFN0YWNrU2l6ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBUaGVzZSB0ZXN0cyBjaGVjayB0aGF0IHRoZSBjb21wdXRlZCBzdGFjayBzaXplIGZvciBhIGNvZGUgb2JqZWN0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKaW5kZXggN2M2MWZhMy4uMmNlOGE2MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQpAQCAtMTEsNyArMTEsMTUgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGlvCiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaywgc2tpcFVubGVzcwordHJ5OgorICAgIGZyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBQcm9jZXNzUG9vbEV4ZWN1dG9yCisgICAgX2hhdmVfbXVsdGlwcm9jZXNzaW5nID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9oYXZlX211bHRpcHJvY2Vzc2luZyA9IEZhbHNlCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHNjcmlwdF9oZWxwZXIKIAogY2xhc3MgQ29tcGlsZWFsbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtOTUsMTggKzEwMyw0NSBAQAogICAgIGRlZiB0ZXN0X29wdGltaXplKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSBjb21waWxpbmcgd2l0aCBkaWZmZXJlbnQgb3B0aW1pemF0aW9uIHNldHRpbmdzIHRoYW4gdGhlCiAgICAgICAgICMgaW50ZXJwcmV0ZXIncyBjcmVhdGVzIHRoZSBjb3JyZWN0IGZpbGUgbmFtZXMKLSAgICAgICAgb3B0aW1pemUgPSAxIGlmIF9fZGVidWdfXyBlbHNlIDAKKyAgICAgICAgb3B0aW1pemUsIG9wdCA9ICgxLCAxKSBpZiBfX2RlYnVnX18gZWxzZSAoMCwgJycpCiAgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHF1aWV0PVRydWUsIG9wdGltaXplPW9wdGltaXplKQogICAgICAgICBjYWNoZWQgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbj1vcHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjYWNoZWQpKQogICAgICAgICBjYWNoZWQyID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb249b3B0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkMikpCiAgICAgICAgIGNhY2hlZDMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXphdGlvbj1vcHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjYWNoZWQzKSkKIAorICAgIEBtb2NrLnBhdGNoKCdjb21waWxlYWxsLlByb2Nlc3NQb29sRXhlY3V0b3InKQorICAgIGRlZiB0ZXN0X2NvbXBpbGVfcG9vbF9jYWxsZWQoc2VsZiwgcG9vbF9tb2NrKToKKyAgICAgICAgY29tcGlsZWFsbC5jb21waWxlX2RpcihzZWxmLmRpcmVjdG9yeSwgcXVpZXQ9VHJ1ZSwgd29ya2Vycz01KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocG9vbF9tb2NrLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVfd29ya2Vyc19ub25fcG9zaXRpdmUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvcmtlcnMgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIDAiKToKKyAgICAgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHdvcmtlcnM9LTEpCisKKyAgICBAbW9jay5wYXRjaCgnY29tcGlsZWFsbC5Qcm9jZXNzUG9vbEV4ZWN1dG9yJykKKyAgICBkZWYgdGVzdF9jb21waWxlX3dvcmtlcnNfY3B1X2NvdW50KHNlbGYsIHBvb2xfbW9jayk6CisgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHF1aWV0PVRydWUsIHdvcmtlcnM9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb29sX21vY2suY2FsbF9hcmdzWzFdWydtYXhfd29ya2VycyddLCBOb25lKQorCisgICAgQG1vY2sucGF0Y2goJ2NvbXBpbGVhbGwuUHJvY2Vzc1Bvb2xFeGVjdXRvcicpCisgICAgQG1vY2sucGF0Y2goJ2NvbXBpbGVhbGwuY29tcGlsZV9maWxlJykKKyAgICBkZWYgdGVzdF9jb21waWxlX29uZV93b3JrZXIoc2VsZiwgY29tcGlsZV9maWxlX21vY2ssIHBvb2xfbW9jayk6CisgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHF1aWV0PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9vbF9tb2NrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBpbGVfZmlsZV9tb2NrLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdjb21waWxlYWxsLlByb2Nlc3NQb29sRXhlY3V0b3InLCBuZXc9Tm9uZSkKKyAgICBAbW9jay5wYXRjaCgnY29tcGlsZWFsbC5jb21waWxlX2ZpbGUnKQorICAgIGRlZiB0ZXN0X2NvbXBpbGVfbWlzc2luZ19tdWx0aXByb2Nlc3Npbmcoc2VsZiwgY29tcGlsZV9maWxlX21vY2spOgorICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZGlyKHNlbGYuZGlyZWN0b3J5LCBxdWlldD1UcnVlLCB3b3JrZXJzPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21waWxlX2ZpbGVfbW9jay5jYWxsZWQpCiAKIGNsYXNzIEVuY29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiSXNzdWUgNjcxNjogY29tcGlsZWFsbCBzaG91bGQgZXNjYXBlIHNvdXJjZSBjb2RlIHdoZW4gcHJpbnRpbmcgZXJyb3JzCkBAIC0yMzEsMTEgKzI2NiwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInTGlzdGluZyAnLCBxdWlldCkKIAogICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgY29tcGlsZWFsbCdzIENMSSBpcyB0byBjcmVhdGUKLSAgICAjIFBFUCAzMTQ3IHB5Yy9weW8gZmlsZXMuCisgICAgIyBQRVAgMzE0Ny9QRVAgNDg4IHB5YyBmaWxlcy4KICAgICBmb3IgbmFtZSwgZXh0LCBzd2l0Y2ggaW4gWwogICAgICAgICAoJ25vcm1hbCcsICdweWMnLCBbXSksCi0gICAgICAgICgnb3B0aW1pemUnLCAncHlvJywgWyctTyddKSwKLSAgICAgICAgKCdkb3VibGVvcHRpbWl6ZScsICdweW8nLCBbJy1PTyddKSwKKyAgICAgICAgKCdvcHRpbWl6ZScsICdvcHQtMS5weWMnLCBbJy1PJ10pLAorICAgICAgICAoJ2RvdWJsZW9wdGltaXplJywgJ29wdC0yLnB5YycsIFsnLU9PJ10pLAogICAgIF06CiAgICAgICAgIGRlZiBmKHNlbGYsIGV4dD1leHQsIHN3aXRjaD1zd2l0Y2gpOgogICAgICAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCooc3dpdGNoICsKQEAgLTI1MiwxMyArMjg3LDEyIEBACiAKICAgICBkZWYgdGVzdF9sZWdhY3lfcGF0aHMoc2VsZik6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgd2l0aCB0aGUgcHJvcGVyIHN3aXRjaCwgY29tcGlsZWFsbCBsZWF2ZXMgbGVnYWN5Ci0gICAgICAgICMgcHljL3B5byBmaWxlcywgYW5kIG5vIF9fcHljYWNoZV9fIGRpcmVjdG9yeS4KKyAgICAgICAgIyBweWMgZmlsZXMsIGFuZCBubyBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkuCiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1iJywgJy1xJywgc2VsZi5wa2dkaXIpCiAgICAgICAgICMgVmVyaWZ5IHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgY29udGVudHMuCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5wa2dkaXJfY2FjaGVkaXIpKQotICAgICAgICBvcHQgPSAnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nCi0gICAgICAgIGV4cGVjdGVkID0gc29ydGVkKFsnX19pbml0X18ucHknLCAnX19pbml0X18ucHknICsgb3B0LCAnYmFyLnB5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXIucHknICsgb3B0XSkKKyAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoWydfX2luaXRfXy5weScsICdfX2luaXRfXy5weWMnLCAnYmFyLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXIucHljJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG9zLmxpc3RkaXIoc2VsZi5wa2dkaXIpKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aXBsZV9ydW5zKHNlbGYpOgpAQCAtMzAxLDEyICszMzUsNTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChzdWJpbml0Zm4pCiAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoaGFtZm4pCiAKKyAgICBkZWYgdGVzdF9yZWN1cnNpb25fbGltaXQoc2VsZik6CisgICAgICAgIHN1YnBhY2thZ2UgPSBvcy5wYXRoLmpvaW4oc2VsZi5wa2dkaXIsICdzcGFtJykKKyAgICAgICAgc3VicGFja2FnZTIgPSBvcy5wYXRoLmpvaW4oc3VicGFja2FnZSwgJ2hhbScpCisgICAgICAgIHN1YnBhY2thZ2UzID0gb3MucGF0aC5qb2luKHN1YnBhY2thZ2UyLCAnZWdncycpCisgICAgICAgIGZvciBwa2cgaW4gKHN1YnBhY2thZ2UsIHN1YnBhY2thZ2UyLCBzdWJwYWNrYWdlMyk6CisgICAgICAgICAgICBzY3JpcHRfaGVscGVyLm1ha2VfcGtnKHBrZykKKworICAgICAgICBzdWJpbml0Zm4gPSBvcy5wYXRoLmpvaW4oc3VicGFja2FnZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgaGFtZm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHN1YnBhY2thZ2UsICdoYW0nLCAnJykKKyAgICAgICAgc3BhbWZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzdWJwYWNrYWdlMiwgJ3NwYW0nLCAnJykKKyAgICAgICAgZWdnZm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHN1YnBhY2thZ2UzLCAnZWdnJywgJycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCAnLXIgMCcsIHNlbGYucGtnZGlyKQorICAgICAgICBzZWxmLmFzc2VydE5vdENvbXBpbGVkKHN1YmluaXRmbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzdWJwYWNrYWdlLCAnX19weWNhY2hlX18nKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCAnLXIgMScsIHNlbGYucGtnZGlyKQorICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKHN1YmluaXRmbikKKyAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChoYW1mbikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RDb21waWxlZChzcGFtZm4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCAnLXIgMicsIHNlbGYucGtnZGlyKQorICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKHN1YmluaXRmbikKKyAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChoYW1mbikKKyAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChzcGFtZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90Q29tcGlsZWQoZWdnZm4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCAnLXIgNScsIHNlbGYucGtnZGlyKQorICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKHN1YmluaXRmbikKKyAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChoYW1mbikKKyAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChzcGFtZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoZWdnZm4pCisKICAgICBkZWYgdGVzdF9xdWlldChzZWxmKToKICAgICAgICAgbm9pc3kgPSBzZWxmLmFzc2VydFJ1bk9LKHNlbGYucGtnZGlyKQogICAgICAgICBxdWlldCA9IHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgc2VsZi5wa2dkaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYicnLCBub2lzeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHF1aWV0KQogCisgICAgZGVmIHRlc3Rfc2lsZW50KHNlbGYpOgorICAgICAgICBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnY3J1bmNoeWZyb2cnLCAnYmFkKHN5bnRheCcpCisgICAgICAgIF8sIHF1aWV0LCBfID0gc2VsZi5hc3NlcnRSdW5Ob3RPSygnLXEnLCBzZWxmLnBrZ2RpcikKKyAgICAgICAgXywgc2lsZW50LCBfID0gc2VsZi5hc3NlcnRSdW5Ob3RPSygnLXFxJywgc2VsZi5wa2dkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYicnLCBxdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHNpbGVudCkKKwogICAgIGRlZiB0ZXN0X3JlZ2V4cChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCAnLXgnLCByJ2JhW15cXC9dKiQnLCBzZWxmLnBrZ2RpcikKICAgICAgICAgc2VsZi5hc3NlcnROb3RDb21waWxlZChzZWxmLmJhcmZuKQpAQCAtMzk5LDYgKzQ3NCwyOSBAQAogICAgICAgICBvdXQgPSBzZWxmLmFzc2VydFJ1bk9LKCdiYWRmaWxlbmFtZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCBiIkNhbid0IGxpc3QgJ2JhZGZpbGVuYW1lJyIpCiAKKyAgICBAc2tpcFVubGVzcyhfaGF2ZV9tdWx0aXByb2Nlc3NpbmcsICJyZXF1aXJlcyBtdWx0aXByb2Nlc3NpbmciKQorICAgIGRlZiB0ZXN0X3dvcmtlcnMoc2VsZik6CisgICAgICAgIGJhcjJmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5kaXJlY3RvcnksICdiYXIyJywgJycpCisgICAgICAgIGZpbGVzID0gW10KKyAgICAgICAgZm9yIHN1ZmZpeCBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ2Zvb3t9Jy5mb3JtYXQoc3VmZml4KSkKKyAgICAgICAgICAgIG9zLm1rZGlyKHBrZ2RpcikKKyAgICAgICAgICAgIGZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChwa2dkaXIsICdfX2luaXRfXycsICcnKQorICAgICAgICAgICAgZmlsZXMuYXBwZW5kKHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQocGtnZGlyLCAnYmFyMicsICcnKSkKKworICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKHNlbGYuZGlyZWN0b3J5LCAnLWonLCAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoYmFyMmZuKQorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoZmlsZSkKKworICAgIEBtb2NrLnBhdGNoKCdjb21waWxlYWxsLmNvbXBpbGVfZGlyJykKKyAgICBkZWYgdGVzdF93b3JrZXJzX2F2YWlsYWJsZV9jb3JlcyhzZWxmLCBjb21waWxlX2Rpcik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgic3lzLmFyZ3YiLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3PVtzeXMuZXhlY3V0YWJsZSwgc2VsZi5kaXJlY3RvcnksICItajAiXSk6CisgICAgICAgICAgICBjb21waWxlYWxsLm1haW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBpbGVfZGlyLmNhbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9kaXIuY2FsbF9hcmdzWy0xXVsnd29ya2VycyddLCBOb25lKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5CmluZGV4IGM3NGIyY2EuLmNkYjkzMDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5CkBAIC05LDggKzksOSBAQAogIyB3aXRob3V0IHRocmVhZCBzdXBwb3J0LgogdGVzdC5zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCitmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiAKK2ltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKQEAgLTQyNSw2ICs0MjYsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbGxlY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFsZSByZWZlcmVuY2Ugbm90IGNvbGxlY3RlZCB3aXRoaW4gdGltZW91dC4iKQogCisgICAgZGVmIHRlc3RfbWF4X3dvcmtlcnNfbmVnYXRpdmUoc2VsZik6CisgICAgICAgIGZvciBudW1iZXIgaW4gKDAsIC0xKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhfd29ya2VycyBtdXN0IGJlIGdyZWF0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGFuIDAiKToKKyAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yX3R5cGUobWF4X3dvcmtlcnM9bnVtYmVyKQorCiAKIGNsYXNzIFRocmVhZFBvb2xFeGVjdXRvclRlc3QoVGhyZWFkUG9vbE1peGluLCBFeGVjdXRvclRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYXBfc3VibWl0c193aXRob3V0X2l0ZXJhdGlvbihzZWxmKToKQEAgLTQzNyw2ICs0NDUsMTEgQEAKICAgICAgICAgc2VsZi5leGVjdXRvci5zaHV0ZG93bih3YWl0PVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChmaW5pc2hlZCwgcmFuZ2UoMTApKQogCisgICAgZGVmIHRlc3RfZGVmYXVsdF93b3JrZXJzKHNlbGYpOgorICAgICAgICBleGVjdXRvciA9IHNlbGYuZXhlY3V0b3JfdHlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhlY3V0b3IuX21heF93b3JrZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5jcHVfY291bnQoKSBvciAxKSAqIDUpCisKIAogY2xhc3MgUHJvY2Vzc1Bvb2xFeGVjdXRvclRlc3QoUHJvY2Vzc1Bvb2xNaXhpbiwgRXhlY3V0b3JUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfa2lsbGVkX2NoaWxkKHNlbGYpOgpAQCAtNDUxLDYgKzQ2NCw0OCBAQAogICAgICAgICAjIFN1Ym1pdHRpbmcgb3RoZXIgam9icyBmYWlscyBhcyB3ZWxsLgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCcm9rZW5Qcm9jZXNzUG9vbCwgc2VsZi5leGVjdXRvci5zdWJtaXQsIHBvdywgMiwgOCkKIAorICAgIGRlZiB0ZXN0X21hcF9jaHVua3NpemUoc2VsZik6CisgICAgICAgIGRlZiBiYWRfbWFwKCk6CisgICAgICAgICAgICBsaXN0KHNlbGYuZXhlY3V0b3IubWFwKHBvdywgcmFuZ2UoNDApLCByYW5nZSg0MCksIGNodW5rc2l6ZT0tMSkpCisKKyAgICAgICAgcmVmID0gbGlzdChtYXAocG93LCByYW5nZSg0MCksIHJhbmdlKDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBsaXN0KHNlbGYuZXhlY3V0b3IubWFwKHBvdywgcmFuZ2UoNDApLCByYW5nZSg0MCksIGNodW5rc2l6ZT02KSksCisgICAgICAgICAgICByZWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBsaXN0KHNlbGYuZXhlY3V0b3IubWFwKHBvdywgcmFuZ2UoNDApLCByYW5nZSg0MCksIGNodW5rc2l6ZT01MCkpLAorICAgICAgICAgICAgcmVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChzZWxmLmV4ZWN1dG9yLm1hcChwb3csIHJhbmdlKDQwKSwgcmFuZ2UoNDApLCBjaHVua3NpemU9NDApKSwKKyAgICAgICAgICAgIHJlZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFkX21hcCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF90cmFjZWJhY2soY2xzKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQKKworICAgIGRlZiB0ZXN0X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgIyBXZSB3YW50IGVuc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyBpcworICAgICAgICAjIGNvbnRhaW5lZCBpbiB0aGUgdHJhY2ViYWNrIHJhaXNlZCBpbiB0aGUgbWFpbiBwcm9jZXNzLgorICAgICAgICBmdXR1cmUgPSBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChzZWxmLl90ZXN0X3RyYWNlYmFjaykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgZnV0dXJlLnJlc3VsdCgpCisKKyAgICAgICAgZXhjID0gY20uZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShleGMpLCBSdW50aW1lRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmFyZ3MsICgxMjMsKSkKKyAgICAgICAgY2F1c2UgPSBleGMuX19jYXVzZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShjYXVzZSksIGZ1dHVyZXMucHJvY2Vzcy5fUmVtb3RlVHJhY2ViYWNrKQorICAgICAgICBzZWxmLmFzc2VydEluKCdyYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudCcsIGNhdXNlLnRiKQorCisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIGYxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIGV4YworICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3JhaXNlIFJ1bnRpbWVFcnJvcigxMjMpICMgc29tZSBjb21tZW50JywKKyAgICAgICAgICAgICAgICAgICAgICBmMS5nZXR2YWx1ZSgpKQorCiAKIGNsYXNzIEZ1dHVyZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9kb25lX2NhbGxiYWNrX3dpdGhfcmVzdWx0KHNlbGYpOgpAQCAtNjIxLDcgKzY3Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU1VDQ0VTU0ZVTF9GVVRVUkUucmVzdWx0KHRpbWVvdXQ9MCksIDQyKQogCiAgICAgZGVmIHRlc3RfcmVzdWx0X3dpdGhfc3VjY2VzcyhzZWxmKToKLSAgICAgICAgIyBUT0RPKGJyaWFuQHN3ZWV0YXBwLmNvbSk6IFRoaXMgdGVzdCBpcyB0aW1pbmcgZGVwZW5kYW50LgorICAgICAgICAjIFRPRE8oYnJpYW5Ac3dlZXRhcHAuY29tKTogVGhpcyB0ZXN0IGlzIHRpbWluZyBkZXBlbmRlbnQuCiAgICAgICAgIGRlZiBub3RpZmljYXRpb24oKToKICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIHJlc3VsdC4KICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKQEAgLTYzNCw3ICs2ODksNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYxLnJlc3VsdCh0aW1lb3V0PTUpLCA0MikKIAogICAgIGRlZiB0ZXN0X3Jlc3VsdF93aXRoX2NhbmNlbChzZWxmKToKLSAgICAgICAgIyBUT0RPKGJyaWFuQHN3ZWV0YXBwLmNvbSk6IFRoaXMgdGVzdCBpcyB0aW1pbmcgZGVwZW5kYW50LgorICAgICAgICAjIFRPRE8oYnJpYW5Ac3dlZXRhcHAuY29tKTogVGhpcyB0ZXN0IGlzIHRpbWluZyBkZXBlbmRlbnQuCiAgICAgICAgIGRlZiBub3RpZmljYXRpb24oKToKICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIHJlc3VsdC4KICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29uZmlncGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9jb25maWdwYXJzZXIucHkKaW5kZXggM2IwMzUwMC4uNzFhOGYzZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb25maWdwYXJzZXIucHkKQEAgLTU3OSw3ICs1NzksNyBAQAogICAgICAgICAgICAgcmV0dXJuIGUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIHR5cGUgJXMuJXMiCi0gICAgICAgICAgICAgICAgICAgICAgJSAoZXhjLl9fbW9kdWxlX18sIGV4Yy5fX25hbWVfXykpCisgICAgICAgICAgICAgICAgICAgICAgJSAoZXhjLl9fbW9kdWxlX18sIGV4Yy5fX3F1YWxuYW1lX18pKQogCiAgICAgZGVmIHRlc3RfYm9vbGVhbihzZWxmKToKICAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoCkBAIC0xNTg1LDYgKzE1ODUsMzQgQEAKICAgICAgICAgIiIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocGFyc2VyWydzZWN0aW9uJ10pLCAnPFNlY3Rpb246IHNlY3Rpb24+JykKIAorICAgIGRlZiB0ZXN0X2luY29uc2lzdGVudF9jb252ZXJ0ZXJzX3N0YXRlKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgaW1wb3J0IGRlY2ltYWwKKyAgICAgICAgcGFyc2VyLmNvbnZlcnRlcnNbJ2RlY2ltYWwnXSA9IGRlY2ltYWwuRGVjaW1hbAorICAgICAgICBwYXJzZXIucmVhZF9zdHJpbmcoIiIiCisgICAgICAgICAgICBbczFdCisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICBbczJdCisgICAgICAgICAgICB0d28gPSAyCisgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZGVjaW1hbCcsIHBhcnNlci5jb252ZXJ0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRkZWNpbWFsKCdzMScsICdvbmUnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0ZGVjaW1hbCgnczInLCAndHdvJyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyWydzMSddLmdldGRlY2ltYWwoJ29uZScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlclsnczInXS5nZXRkZWNpbWFsKCd0d28nKSwgMikKKyAgICAgICAgZGVsIHBhcnNlci5nZXRkZWNpbWFsCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcGFyc2VyLmdldGRlY2ltYWwoJ3MxJywgJ29uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2RlY2ltYWwnLCBwYXJzZXIuY29udmVydGVycykKKyAgICAgICAgZGVsIHBhcnNlci5jb252ZXJ0ZXJzWydkZWNpbWFsJ10KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZGVjaW1hbCcsIHBhcnNlci5jb252ZXJ0ZXJzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhcnNlci5nZXRkZWNpbWFsKCdzMScsICdvbmUnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhcnNlclsnczEnXS5nZXRkZWNpbWFsKCdvbmUnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhcnNlclsnczInXS5nZXRkZWNpbWFsKCd0d28nKQorCiAKIGNsYXNzIEV4Y2VwdGlvblBpY2tsaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIGZvciBpc3N1ZSAjMTM3NjA6IENvbmZpZ1BhcnNlciBleGNlcHRpb25zIGFyZSBub3QgcGlja2xhYmxlLiIiIgpAQCAtMTc3Nyw1ICsxODA1LDI1MiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2szJ10sICd2MzsjLy9zdGlsbCB2MyMgYW5kIHN0aWxsIHYzJykKIAogCitjbGFzcyBFeGNlcHRpb25Db250ZXh0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIiBUZXN0IHRoYXQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBkb2Vzbid0IGxlYWsKKyAgICB0aHJvdWdoIHJhaXNpbmcgZXhjZXB0aW9ucy4gIiIiCisKKyAgICBkZWYgdGVzdF9nZXRfYmFzaWNfaW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWFkX3N0cmluZygiIiIKKyAgICAgICAgW1BhdGhzXQorICAgICAgICBob21lX2RpcjogL1VzZXJzCisgICAgICAgIG15X2RpcjogJShob21lX2RpcjEpcy9sdW1iZXJqYWNrCisgICAgICAgIG15X3BpY3R1cmVzOiAlKG15X2RpcilzL1BpY3R1cmVzCisgICAgICAgICIiIikKKyAgICAgICAgY20gPSBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcikKKyAgICAgICAgd2l0aCBjbToKKyAgICAgICAgICAgIHBhcnNlci5nZXQoJ1BhdGhzJywgJ215X2RpcicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY20uZXhjZXB0aW9uLl9fc3VwcHJlc3NfY29udGV4dF9fLCBUcnVlKQorCisgICAgZGVmIHRlc3RfZ2V0X2V4dGVuZGVkX2ludGVycG9sYXRpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoCisgICAgICAgICAgaW50ZXJwb2xhdGlvbj1jb25maWdwYXJzZXIuRXh0ZW5kZWRJbnRlcnBvbGF0aW9uKCkpCisgICAgICAgIHBhcnNlci5yZWFkX3N0cmluZygiIiIKKyAgICAgICAgW1BhdGhzXQorICAgICAgICBob21lX2RpcjogL1VzZXJzCisgICAgICAgIG15X2RpcjogJHtob21lX2RpcjF9L2x1bWJlcmphY2sKKyAgICAgICAgbXlfcGljdHVyZXM6ICR7bXlfZGlyfS9QaWN0dXJlcworICAgICAgICAiIiIpCisgICAgICAgIGNtID0gc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLkludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IpCisgICAgICAgIHdpdGggY206CisgICAgICAgICAgICBwYXJzZXIuZ2V0KCdQYXRocycsICdteV9kaXInKQorICAgICAgICBzZWxmLmFzc2VydElzKGNtLmV4Y2VwdGlvbi5fX3N1cHByZXNzX2NvbnRleHRfXywgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWFkX3N0cmluZygiIiIKKyAgICAgICAgW1BhdGhzXQorICAgICAgICBob21lX2RpcjogL1VzZXJzCisgICAgICAgICIiIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcGFyc2VyLm9wdGlvbnMoJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydElzKGNtLmV4Y2VwdGlvbi5fX3N1cHByZXNzX2NvbnRleHRfXywgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfc2VjdGlvbihzZWxmKToKKyAgICAgICAgY29uZmlnID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLk5vU2VjdGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGNvbmZpZy5zZXQoJ1NlY3Rpb24xJywgJ2FuX2ludCcsICcxNScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY20uZXhjZXB0aW9uLl9fc3VwcHJlc3NfY29udGV4dF9fLCBUcnVlKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX29wdGlvbihzZWxmKToKKyAgICAgICAgY29uZmlnID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLk5vU2VjdGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGNvbmZpZy5yZW1vdmVfb3B0aW9uKCdTZWN0aW9uMScsICdhbl9pbnQnKQorICAgICAgICBzZWxmLmFzc2VydElzKGNtLmV4Y2VwdGlvbi5fX3N1cHByZXNzX2NvbnRleHRfXywgVHJ1ZSkKKworCitjbGFzcyBDb252ZXJ0ZXJzVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkludHJvZHVjZWQgaW4gMy41LCBpc3N1ZSAjMTgxNTkuIiIiCisKKyAgICBjb25maWdfY2xhc3MgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyCisKKyAgICBkZWYgbmV3Y29uZmlnKHNlbGYsIGRlZmF1bHRzPU5vbmUpOgorICAgICAgICBpbnN0YW5jZSA9IHN1cGVyKCkubmV3Y29uZmlnKGRlZmF1bHRzPWRlZmF1bHRzKQorICAgICAgICBpbnN0YW5jZS5jb252ZXJ0ZXJzWydsaXN0J10gPSBsYW1iZGEgdjogW2Uuc3RyaXAoKSBmb3IgZSBpbiB2LnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLnN0cmlwKCldCisgICAgICAgIHJldHVybiBpbnN0YW5jZQorCisgICAgZGVmIHRlc3RfY29udmVydGVycyhzZWxmKToKKyAgICAgICAgY2ZnID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdib29sZWFuJywgY2ZnLmNvbnZlcnRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpc3QnLCBjZmcuY29udmVydGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY2ZnLmNvbnZlcnRlcnNbJ2ludCddKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjZmcuY29udmVydGVyc1snZmxvYXQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY2ZnLmNvbnZlcnRlcnNbJ2Jvb2xlYW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoY2ZnLmNvbnZlcnRlcnNbJ2xpc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2ZnLmNvbnZlcnRlcnMpLCA0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY2ZnLmNvbnZlcnRlcnNbJyddID0gbGFtYmRhIHY6IHYKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNmZy5jb252ZXJ0ZXJzW05vbmVdID0gbGFtYmRhIHY6IHYKKyAgICAgICAgY2ZnLnJlYWRfc3RyaW5nKCIiIgorICAgICAgICBbc10KKyAgICAgICAgc3RyID0gc3RyaW5nCisgICAgICAgIGludCA9IDEKKyAgICAgICAgZmxvYXQgPSAwLjUKKyAgICAgICAgbGlzdCA9IGEgYiBjIGQgZSBmIGcKKyAgICAgICAgYm9vbCA9IHllcworICAgICAgICAiIiIpCisgICAgICAgIHMgPSBjZmdbJ3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ3N0ciddLCAnc3RyaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydpbnQnXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2Zsb2F0J10sICcwLjUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2xpc3QnXSwgJ2EgYiBjIGQgZSBmIGcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2Jvb2wnXSwgJ3llcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldCgncycsICdzdHInKSwgJ3N0cmluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldCgncycsICdpbnQnKSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZy5nZXQoJ3MnLCAnZmxvYXQnKSwgJzAuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldCgncycsICdsaXN0JyksICdhIGIgYyBkIGUgZiBnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmcuZ2V0KCdzJywgJ2Jvb2wnKSwgJ3llcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldCgncycsICdzdHInKSwgJ3N0cmluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldGludCgncycsICdpbnQnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmcuZ2V0ZmxvYXQoJ3MnLCAnZmxvYXQnKSwgMC41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZy5nZXRsaXN0KCdzJywgJ2xpc3QnKSwgWydhJywgJ2InLCAnYycsICdkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZScsICdmJywgJ2cnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmcuZ2V0Ym9vbGVhbigncycsICdib29sJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXQoJ3N0cicpLCAnc3RyaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldGludCgnaW50JyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXRmbG9hdCgnZmxvYXQnKSwgMC41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0bGlzdCgnbGlzdCcpLCBbJ2EnLCAnYicsICdjJywgJ2QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2UnLCAnZicsICdnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXRib29sZWFuKCdib29sJyksIFRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgY2ZnLmdldGRlY2ltYWwoJ3MnLCAnZmxvYXQnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHMuZ2V0ZGVjaW1hbCgnZmxvYXQnKQorICAgICAgICBpbXBvcnQgZGVjaW1hbAorICAgICAgICBjZmcuY29udmVydGVyc1snZGVjaW1hbCddID0gZGVjaW1hbC5EZWNpbWFsCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2RlY2ltYWwnLCBjZmcuY29udmVydGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoY2ZnLmNvbnZlcnRlcnNbJ2RlY2ltYWwnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2ZnLmNvbnZlcnRlcnMpLCA1KQorICAgICAgICBkZWMwXzUgPSBkZWNpbWFsLkRlY2ltYWwoJzAuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldGRlY2ltYWwoJ3MnLCAnZmxvYXQnKSwgZGVjMF81KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0ZGVjaW1hbCgnZmxvYXQnKSwgZGVjMF81KQorICAgICAgICBkZWwgY2ZnLmNvbnZlcnRlcnNbJ2RlY2ltYWwnXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkZWNpbWFsJywgY2ZnLmNvbnZlcnRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNmZy5jb252ZXJ0ZXJzKSwgNCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBjZmcuZ2V0ZGVjaW1hbCgncycsICdmbG9hdCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcy5nZXRkZWNpbWFsKCdmbG9hdCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgZGVsIGNmZy5jb252ZXJ0ZXJzWydkZWNpbWFsJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBkZWwgY2ZnLmNvbnZlcnRlcnNbJyddCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgZGVsIGNmZy5jb252ZXJ0ZXJzW05vbmVdCisKKworY2xhc3MgQmxhdGFudE92ZXJyaWRlQ29udmVydGVyc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJXaGF0IGlmIHNvbWVib2R5IG92ZXJyb2RlIGEgZ2V0Ym9vbGVhbigpPyBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGluCisgICAgdGhpcyBjYXNlIHRoZSBhdXRvbWF0aWMgY29udmVydGVycyBkbyBub3Qga2ljayBpbi4iIiIKKworICAgIGNvbmZpZyA9ICIiIgorICAgICAgICBbb25lXQorICAgICAgICBvbmUgPSBmYWxzZQorICAgICAgICB0d28gPSBmYWxzZQorICAgICAgICB0aHJlZSA9IGxvbmcgc3Rvcnkgc2hvcnQKKworICAgICAgICBbdHdvXQorICAgICAgICBvbmUgPSBmYWxzZQorICAgICAgICB0d28gPSBmYWxzZQorICAgICAgICB0aHJlZSA9IGZvdXIKKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2NvbnZlcnRlcnNfYXRfaW5pdChzZWxmKToKKyAgICAgICAgY2ZnID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcihjb252ZXJ0ZXJzPXsnbGVuJzogbGVufSkKKyAgICAgICAgY2ZnLnJlYWRfc3RyaW5nKHNlbGYuY29uZmlnKQorICAgICAgICBzZWxmLl90ZXN0X2xlbihjZmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGNmZy5jb252ZXJ0ZXJzWydsZW4nXSkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICBjbGFzcyBTdHJhbmdlQ29uZmlnUGFyc2VyKGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIpOgorICAgICAgICAgICAgZ2V0dHlzYnVyZyA9ICdhIGhpc3RvcmljIGJvcm91Z2ggaW4gc291dGggY2VudHJhbCBQZW5uc3lsdmFuaWEnCisKKyAgICAgICAgICAgIGRlZiBnZXRib29sZWFuKHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgKiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjaz1jb25maWdwYXJzZXIuX1VOU0VUKToKKyAgICAgICAgICAgICAgICBpZiBzZWN0aW9uID09IG9wdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRib29sZWFuKHNlY3Rpb24sIG9wdGlvbiwgcmF3PXJhdywgdmFycz12YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9ZmFsbGJhY2spCisgICAgICAgICAgICBkZWYgZ2V0bGVuKHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgKiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPWNvbmZpZ3BhcnNlci5fVU5TRVQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY29udihzZWN0aW9uLCBvcHRpb24sIGxlbiwgcmF3PXJhdywgdmFycz12YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjaz1mYWxsYmFjaykKKworICAgICAgICBjZmcgPSBTdHJhbmdlQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgY2ZnLnJlYWRfc3RyaW5nKHNlbGYuY29uZmlnKQorICAgICAgICBzZWxmLl90ZXN0X2xlbihjZmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNmZy5jb252ZXJ0ZXJzWydsZW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmZy5nZXRib29sZWFuKCdvbmUnLCAnb25lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZmcuZ2V0Ym9vbGVhbigndHdvJywgJ3R3bycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmZy5nZXRib29sZWFuKCdvbmUnLCAndHdvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2ZnLmdldGJvb2xlYW4oJ3R3bycsICdvbmUnKSkKKyAgICAgICAgY2ZnLmNvbnZlcnRlcnNbJ2Jvb2xlYW4nXSA9IGNmZy5fY29udmVydF90b19ib29sZWFuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2ZnLmdldGJvb2xlYW4oJ29uZScsICdvbmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZmcuZ2V0Ym9vbGVhbigndHdvJywgJ3R3bycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmZy5nZXRib29sZWFuKCdvbmUnLCAndHdvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2ZnLmdldGJvb2xlYW4oJ3R3bycsICdvbmUnKSkKKworICAgIGRlZiBfdGVzdF9sZW4oc2VsZiwgY2ZnKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2ZnLmNvbnZlcnRlcnMpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdib29sZWFuJywgY2ZnLmNvbnZlcnRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xlbicsIGNmZy5jb252ZXJ0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd0eXNidXJnJywgY2ZnLmNvbnZlcnRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNmZy5jb252ZXJ0ZXJzWydpbnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY2ZnLmNvbnZlcnRlcnNbJ2Zsb2F0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNmZy5jb252ZXJ0ZXJzWydib29sZWFuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldGxlbignb25lJywgJ29uZScpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZy5nZXRsZW4oJ29uZScsICd0d28nKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmcuZ2V0bGVuKCdvbmUnLCAndGhyZWUnKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldGxlbigndHdvJywgJ29uZScpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZy5nZXRsZW4oJ3R3bycsICd0d28nKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmcuZ2V0bGVuKCd0d28nLCAndGhyZWUnKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmcuZ2V0bGVuKCd0d28nLCAnZm91cicsIGZhbGxiYWNrPTApLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5Ob09wdGlvbkVycm9yKToKKyAgICAgICAgICAgIGNmZy5nZXRsZW4oJ3R3bycsICdmb3VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmdbJ29uZSddLmdldGxlbignb25lJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnWydvbmUnXS5nZXRsZW4oJ3R3bycpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZ1snb25lJ10uZ2V0bGVuKCd0aHJlZScpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmdbJ3R3byddLmdldGxlbignb25lJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnWyd0d28nXS5nZXRsZW4oJ3R3bycpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZ1sndHdvJ10uZ2V0bGVuKCd0aHJlZScpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZ1sndHdvJ10uZ2V0bGVuKCdmb3VyJywgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnWyd0d28nXS5nZXRsZW4oJ2ZvdXInKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2Fzc2lnbm1lbnQoc2VsZik6CisgICAgICAgIGNmZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICBjZmcuZ2V0Ym9vbGVhbiA9IGxhbWJkYSBzZWN0aW9uLCBvcHRpb246IFRydWUKKyAgICAgICAgY2ZnLmdldGxlbiA9IGxhbWJkYSBzZWN0aW9uLCBvcHRpb246IGxlbihjZmdbc2VjdGlvbl1bb3B0aW9uXSkKKyAgICAgICAgY2ZnLnJlYWRfc3RyaW5nKHNlbGYuY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjZmcuY29udmVydGVycyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Jvb2xlYW4nLCBjZmcuY29udmVydGVycykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGVuJywgY2ZnLmNvbnZlcnRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNmZy5jb252ZXJ0ZXJzWydpbnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY2ZnLmNvbnZlcnRlcnNbJ2Zsb2F0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNmZy5jb252ZXJ0ZXJzWydib29sZWFuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZmcuZ2V0Ym9vbGVhbignb25lJywgJ29uZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2ZnLmdldGJvb2xlYW4oJ3R3bycsICd0d28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmZy5nZXRib29sZWFuKCdvbmUnLCAndHdvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZmcuZ2V0Ym9vbGVhbigndHdvJywgJ29uZScpKQorICAgICAgICBjZmcuY29udmVydGVyc1snYm9vbGVhbiddID0gY2ZnLl9jb252ZXJ0X3RvX2Jvb2xlYW4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZmcuZ2V0Ym9vbGVhbignb25lJywgJ29uZScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmZy5nZXRib29sZWFuKCd0d28nLCAndHdvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2ZnLmdldGJvb2xlYW4oJ29uZScsICd0d28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZmcuZ2V0Ym9vbGVhbigndHdvJywgJ29uZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZy5nZXRsZW4oJ29uZScsICdvbmUnKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmcuZ2V0bGVuKCdvbmUnLCAndHdvJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldGxlbignb25lJywgJ3RocmVlJyksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmZy5nZXRsZW4oJ3R3bycsICdvbmUnKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmcuZ2V0bGVuKCd0d28nLCAndHdvJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZnLmdldGxlbigndHdvJywgJ3RocmVlJyksIDQpCisgICAgICAgICMgSWYgYSBnZXR0ZXIgaW1wbCBpcyBhc3NpZ25lZCBzdHJhaWdodCB0byB0aGUgaW5zdGFuY2UsIGl0IHdvbid0CisgICAgICAgICMgYmUgYXZhaWxhYmxlIG9uIHRoZSBzZWN0aW9uIHByb3hpZXMuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmdbJ29uZSddLmdldGxlbignb25lJyksIDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZmdbJ3R3byddLmdldGxlbignb25lJyksIDUpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29udGFpbnMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbnRhaW5zLnB5CmluZGV4IGE2NjdhMTYuLjNjNmJkZWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGFpbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb250YWlucy5weQpAQCAtMSw1ICsxLDQgQEAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgdW5pdHRlc3QKIAogCkBAIC04Niw4ICs4NSw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGFpbmVyID09IGNvbnRhaW5lcikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RDb250YWlucykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IDI2Njk2NTEuLjUxNjQwM2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTgzLDYgKzgzLDQyIEBACiAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcig5OTkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0MiwgOTk5XSkKIAorICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX2V4Y2VwdF9zdG9waXRlcihzZWxmKToKKyAgICAgICAgc3RvcF9leGMgPSBTdG9wSXRlcmF0aW9uKCdzcGFtJykKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiB3b29ob28oKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RvcEl0ZXJhdGlvbiIpOgorICAgICAgICAgICAgICAgIHdpdGggd29vaG9vKCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHN0b3BfZXhjCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGV4LCBzdG9wX2V4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnU3RvcEl0ZXJhdGlvbiB3YXMgc3VwcHJlc3NlZCcpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9leGNlcHRfcGVwNDc5KHNlbGYpOgorICAgICAgICBjb2RlID0gIiIiXAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBnZW5lcmF0b3Jfc3RvcAorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorQGNvbnRleHRtYW5hZ2VyCitkZWYgd29vaG9vKCk6CisgICAgeWllbGQKKyIiIgorICAgICAgICBsb2NhbHMgPSB7fQorICAgICAgICBleGVjKGNvZGUsIGxvY2FscywgbG9jYWxzKQorICAgICAgICB3b29ob28gPSBsb2NhbHNbJ3dvb2hvbyddCisKKyAgICAgICAgc3RvcF9leGMgPSBTdG9wSXRlcmF0aW9uKCdzcGFtJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB3b29ob28oKToKKyAgICAgICAgICAgICAgICByYWlzZSBzdG9wX2V4YworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhleCwgc3RvcF9leGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1N0b3BJdGVyYXRpb24gd2FzIHN1cHByZXNzZWQnKQorCiAgICAgZGVmIF9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicyhzZWxmKToKICAgICAgICAgZGVmIGF0dHJpYnMoKiprdyk6CiAgICAgICAgICAgICBkZWYgZGVjb3JhdGUoZnVuYyk6CkBAIC03MjYsNjAgKzc2MiwxMTAgQEAKICAgICAgICAgc3RhY2sucHVzaChjbSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhzdGFjay5fZXhpdF9jYWxsYmFja3NbLTFdLCBjbSkKIAotY2xhc3MgVGVzdFJlZGlyZWN0U3Rkb3V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9kb250X3JlcmFpc2VfUnVudGltZUVycm9yKHNlbGYpOgorICAgICAgICAjIGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjcxMjIKKyAgICAgICAgY2xhc3MgVW5pcXVlRXhjZXB0aW9uKEV4Y2VwdGlvbik6IHBhc3MKKyAgICAgICAgY2xhc3MgVW5pcXVlUnVudGltZUVycm9yKFJ1bnRpbWVFcnJvcik6IHBhc3MKKworICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIHNlY29uZCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHJhaXNlIFVuaXF1ZUV4Y2VwdGlvbigibmV3IGV4Y2VwdGlvbiIpIGZyb20gZXhjCisKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiBmaXJzdCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHJhaXNlIGV4YworCisgICAgICAgICMgVGhlIFVuaXF1ZVJ1bnRpbWVFcnJvciBzaG91bGQgYmUgY2F1Z2h0IGJ5IHNlY29uZCgpJ3MgZXhjZXB0aW9uCisgICAgICAgICMgaGFuZGxlciB3aGljaCBjaGFpbiByYWlzZWQgYSBuZXcgVW5pcXVlRXhjZXB0aW9uLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaXF1ZUV4Y2VwdGlvbikgYXMgZXJyX2N0eDoKKyAgICAgICAgICAgIHdpdGggRXhpdFN0YWNrKCkgYXMgZXNfY3R4OgorICAgICAgICAgICAgICAgIGVzX2N0eC5lbnRlcl9jb250ZXh0KHNlY29uZCgpKQorICAgICAgICAgICAgICAgIGVzX2N0eC5lbnRlcl9jb250ZXh0KGZpcnN0KCkpCisgICAgICAgICAgICAgICAgcmFpc2UgVW5pcXVlUnVudGltZUVycm9yKCJwbGVhc2Ugbm8gaW5maW5pdGUgbG9vcC4iKQorCisgICAgICAgIGV4YyA9IGVycl9jdHguZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMsIFVuaXF1ZUV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5fX2NvbnRleHRfXywgVW5pcXVlUnVudGltZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShleGMuX19jb250ZXh0X18uX19jb250ZXh0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGV4Yy5fX2NvbnRleHRfXy5fX2NhdXNlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLl9fY2F1c2VfXywgZXhjLl9fY29udGV4dF9fKQorCisKK2NsYXNzIFRlc3RSZWRpcmVjdFN0cmVhbToKKworICAgIHJlZGlyZWN0X3N0cmVhbSA9IE5vbmUKKyAgICBvcmlnX3N0cmVhbSA9IE5vbmUKIAogICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKICAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncwotICAgICAgICBjbV9kb2NzdHJpbmcgPSByZWRpcmVjdF9zdGRvdXQuX19kb2NfXwotICAgICAgICBvYmogPSByZWRpcmVjdF9zdGRvdXQoTm9uZSkKKyAgICAgICAgY21fZG9jc3RyaW5nID0gc2VsZi5yZWRpcmVjdF9zdHJlYW0uX19kb2NfXworICAgICAgICBvYmogPSBzZWxmLnJlZGlyZWN0X3N0cmVhbShOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCiAKICAgICBkZWYgdGVzdF9ub19yZWRpcmVjdF9pbl9pbml0KHNlbGYpOgotICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgcmVkaXJlY3Rfc3Rkb3V0KE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gZ2V0YXR0cihzeXMsIHNlbGYub3JpZ19zdHJlYW0pCisgICAgICAgIHNlbGYucmVkaXJlY3Rfc3RyZWFtKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihzeXMsIHNlbGYub3JpZ19zdHJlYW0pLCBvcmlnX3N0ZG91dCkKIAogICAgIGRlZiB0ZXN0X3JlZGlyZWN0X3RvX3N0cmluZ19pbyhzZWxmKToKICAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKICAgICAgICAgbXNnID0gIkNvbnNpZGVyIGFuIEFQSSBsaWtlIGhlbHAoKSwgd2hpY2ggcHJpbnRzIGRpcmVjdGx5IHRvIHN0ZG91dCIKLSAgICAgICAgb3JpZ19zdGRvdXQgPSBzeXMuc3Rkb3V0Ci0gICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgotICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorICAgICAgICBvcmlnX3N0ZG91dCA9IGdldGF0dHIoc3lzLCBzZWxmLm9yaWdfc3RyZWFtKQorICAgICAgICB3aXRoIHNlbGYucmVkaXJlY3Rfc3RyZWFtKGYpOgorICAgICAgICAgICAgcHJpbnQobXNnLCBmaWxlPWdldGF0dHIoc3lzLCBzZWxmLm9yaWdfc3RyZWFtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHN5cywgc2VsZi5vcmlnX3N0cmVhbSksIG9yaWdfc3Rkb3V0KQogICAgICAgICBzID0gZi5nZXR2YWx1ZSgpLnN0cmlwKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBtc2cpCiAKICAgICBkZWYgdGVzdF9lbnRlcl9yZXN1bHRfaXNfdGFyZ2V0KHNlbGYpOgogICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQotICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKSBhcyBlbnRlcl9yZXN1bHQ6CisgICAgICAgIHdpdGggc2VsZi5yZWRpcmVjdF9zdHJlYW0oZikgYXMgZW50ZXJfcmVzdWx0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlbnRlcl9yZXN1bHQsIGYpCiAKICAgICBkZWYgdGVzdF9jbV9pc19yZXVzYWJsZShzZWxmKToKICAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgd3JpdGVfdG9fZiA9IHJlZGlyZWN0X3N0ZG91dChmKQotICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgd3JpdGVfdG9fZiA9IHNlbGYucmVkaXJlY3Rfc3RyZWFtKGYpCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gZ2V0YXR0cihzeXMsIHNlbGYub3JpZ19zdHJlYW0pCiAgICAgICAgIHdpdGggd3JpdGVfdG9fZjoKLSAgICAgICAgICAgIHByaW50KCJIZWxsbyIsIGVuZD0iICIpCisgICAgICAgICAgICBwcmludCgiSGVsbG8iLCBlbmQ9IiAiLCBmaWxlPWdldGF0dHIoc3lzLCBzZWxmLm9yaWdfc3RyZWFtKSkKICAgICAgICAgd2l0aCB3cml0ZV90b19mOgotICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgICAgICBwcmludCgiV29ybGQhIiwgZmlsZT1nZXRhdHRyKHN5cywgc2VsZi5vcmlnX3N0cmVhbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihzeXMsIHNlbGYub3JpZ19zdHJlYW0pLCBvcmlnX3N0ZG91dCkKICAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJIZWxsbyBXb3JsZCFcbiIpCiAKICAgICBkZWYgdGVzdF9jbV9pc19yZWVudHJhbnQoc2VsZik6CiAgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCi0gICAgICAgIHdyaXRlX3RvX2YgPSByZWRpcmVjdF9zdGRvdXQoZikKLSAgICAgICAgb3JpZ19zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHdyaXRlX3RvX2YgPSBzZWxmLnJlZGlyZWN0X3N0cmVhbShmKQorICAgICAgICBvcmlnX3N0ZG91dCA9IGdldGF0dHIoc3lzLCBzZWxmLm9yaWdfc3RyZWFtKQogICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6Ci0gICAgICAgICAgICBwcmludCgiSGVsbG8iLCBlbmQ9IiAiKQorICAgICAgICAgICAgcHJpbnQoIkhlbGxvIiwgZW5kPSIgIiwgZmlsZT1nZXRhdHRyKHN5cywgc2VsZi5vcmlnX3N0cmVhbSkpCiAgICAgICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgICAgICAgICAgcHJpbnQoIldvcmxkISIsIGZpbGU9Z2V0YXR0cihzeXMsIHNlbGYub3JpZ19zdHJlYW0pKQorICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIoc3lzLCBzZWxmLm9yaWdfc3RyZWFtKSwgb3JpZ19zdGRvdXQpCiAgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiSGVsbG8gV29ybGQhXG4iKQogCiAKK2NsYXNzIFRlc3RSZWRpcmVjdFN0ZG91dChUZXN0UmVkaXJlY3RTdHJlYW0sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHJlZGlyZWN0X3N0cmVhbSA9IHJlZGlyZWN0X3N0ZG91dAorICAgIG9yaWdfc3RyZWFtID0gInN0ZG91dCIKKworCitjbGFzcyBUZXN0UmVkaXJlY3RTdGRlcnIoVGVzdFJlZGlyZWN0U3RyZWFtLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICByZWRpcmVjdF9zdHJlYW0gPSByZWRpcmVjdF9zdGRlcnIKKyAgICBvcmlnX3N0cmVhbSA9ICJzdGRlcnIiCisKKwogY2xhc3MgVGVzdFN1cHByZXNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29weS5weSBiL0xpYi90ZXN0L3Rlc3RfY29weS5weQppbmRleCAwYzUzNTRjLi4wZTFmNjcwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvcHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb3B5LnB5CkBAIC03LDcgKzcsNiBAQAogZnJvbSBvcGVyYXRvciBpbXBvcnQgbGUsIGx0LCBnZSwgZ3QsIGVxLCBuZQogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBvcmRlcl9jb21wYXJpc29ucyA9IGxlLCBsdCwgZ2UsIGd0CiBlcXVhbGl0eV9jb21wYXJpc29ucyA9IGVxLCBuZQpAQCAtOTYsMjQgKzk1LDY3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGNsYXNzIFdpdGhNZXRhY2xhc3MobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgdGVzdHMgPSBbTm9uZSwgNDIsIDIqKjEwMCwgMy4xNCwgVHJ1ZSwgRmFsc2UsIDFqLAorICAgICAgICB0ZXN0cyA9IFtOb25lLCAuLi4sIE5vdEltcGxlbWVudGVkLAorICAgICAgICAgICAgICAgICA0MiwgMioqMTAwLCAzLjE0LCBUcnVlLCBGYWxzZSwgMWosCiAgICAgICAgICAgICAgICAgICJoZWxsbyIsICJoZWxsb1x1MTIzNCIsIGYuX19jb2RlX18sCi0gICAgICAgICAgICAgICAgIGIid29ybGQiLCBieXRlcyhyYW5nZSgyNTYpKSwKLSAgICAgICAgICAgICAgICAgTmV3U3R5bGUsIHJhbmdlKDEwKSwgQ2xhc3NpYywgbWF4LCBXaXRoTWV0YWNsYXNzXQorICAgICAgICAgICAgICAgICBiIndvcmxkIiwgYnl0ZXMocmFuZ2UoMjU2KSksIHJhbmdlKDEwKSwKKyAgICAgICAgICAgICAgICAgTmV3U3R5bGUsIENsYXNzaWMsIG1heCwgV2l0aE1ldGFjbGFzc10KICAgICAgICAgZm9yIHggaW4gdGVzdHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNvcHkuY29weSh4KSwgeCkKIAogICAgIGRlZiB0ZXN0X2NvcHlfbGlzdChzZWxmKToKICAgICAgICAgeCA9IFsxLCAyLCAzXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeSwgeCkKKyAgICAgICAgeCA9IFtdCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHksIHgpCiAKICAgICBkZWYgdGVzdF9jb3B5X3R1cGxlKHNlbGYpOgogICAgICAgICB4ID0gKDEsIDIsIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5jb3B5KHgpLCB4KQorICAgICAgICBzZWxmLmFzc2VydElzKGNvcHkuY29weSh4KSwgeCkKKyAgICAgICAgeCA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29weS5jb3B5KHgpLCB4KQorICAgICAgICB4ID0gKDEsIDIsIDMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvcHkuY29weSh4KSwgeCkKIAogICAgIGRlZiB0ZXN0X2NvcHlfZGljdChzZWxmKToKICAgICAgICAgeCA9IHsiZm9vIjogMSwgImJhciI6IDJ9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5jb3B5KHgpLCB4KQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQorICAgICAgICB4ID0ge30KKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeSwgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfc2V0KHNlbGYpOgorICAgICAgICB4ID0gezEsIDIsIDN9CisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHksIHgpCisgICAgICAgIHggPSBzZXQoKQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQorCisgICAgZGVmIHRlc3RfY29weV9mcm96ZW5zZXQoc2VsZik6CisgICAgICAgIHggPSBmcm96ZW5zZXQoezEsIDIsIDN9KQorICAgICAgICBzZWxmLmFzc2VydElzKGNvcHkuY29weSh4KSwgeCkKKyAgICAgICAgeCA9IGZyb3plbnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29weS5jb3B5KHgpLCB4KQorCisgICAgZGVmIHRlc3RfY29weV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIHggPSBieXRlYXJyYXkoYidhYmMnKQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQorICAgICAgICB4ID0gYnl0ZWFycmF5KCkKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeSwgeCkKIAogICAgIGRlZiB0ZXN0X2NvcHlfaW5zdF92YW5pbGxhKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpAQCAtMTQ2LDYgKzE4OCw0MCBAQAogICAgICAgICB4ID0gQyg0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCiAKKyAgICBkZWYgdGVzdF9jb3B5X2luc3RfZ2V0bmV3YXJncyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyhpbnQpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZvbywKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZvbyA9PSBvdGhlci5mb28KKyAgICAgICAgeCA9IEMoNDIpCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHksIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuZm9vLCB4LmZvbykKKworICAgIGRlZiB0ZXN0X2NvcHlfaW5zdF9nZXRuZXdhcmdzX2V4KHNlbGYpOgorICAgICAgICBjbGFzcyBDKGludCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICosIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgpLCB7J2Zvbyc6IHNlbGYuZm9vfQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZm9vID09IG90aGVyLmZvbworICAgICAgICB4ID0gQyhmb289NDIpCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHksIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuZm9vLCB4LmZvbykKKwogICAgIGRlZiB0ZXN0X2NvcHlfaW5zdF9nZXRzdGF0ZShzZWxmKToKICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgpAQCAtMjgxLDcgKzM1Nyw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRlc3RzID0gW05vbmUsIDQyLCAyKioxMDAsIDMuMTQsIFRydWUsIEZhbHNlLCAxaiwKICAgICAgICAgICAgICAgICAgImhlbGxvIiwgImhlbGxvXHUxMjM0IiwgZi5fX2NvZGVfXywKLSAgICAgICAgICAgICAgICAgTmV3U3R5bGUsIHJhbmdlKDEwKSwgQ2xhc3NpYywgbWF4XQorICAgICAgICAgICAgICAgICBOZXdTdHlsZSwgQ2xhc3NpYywgbWF4XQogICAgICAgICBmb3IgeCBpbiB0ZXN0czoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29weS5kZWVwY29weSh4KSwgeCkKIApAQCAtMjk3LDcgKzM3Myw3IEBACiAgICAgICAgIHguYXBwZW5kKHgpCiAgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCiAgICAgICAgIGZvciBvcCBpbiBjb21wYXJpc29uczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3AsIHksIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgb3AsIHksIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeSwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyh5WzBdLCB5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih5KSwgMSkKQEAgLTMyNCw3ICs0MDAsNyBAQAogICAgICAgICB4WzBdLmFwcGVuZCh4KQogICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQogICAgICAgICBmb3Igb3AgaW4gY29tcGFyaXNvbnM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wLCB5LCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIG9wLCB5LCB4KQogICAgICAgICBzZWxmLmFzc2VydElzTm90KHksIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeVswXSwgeFswXSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyh5WzBdWzBdLCB5KQpAQCAtMzQzLDcgKzQxOSw3IEBACiAgICAgICAgIGZvciBvcCBpbiBvcmRlcl9jb21wYXJpc29uczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3AsIHksIHgpCiAgICAgICAgIGZvciBvcCBpbiBlcXVhbGl0eV9jb21wYXJpc29uczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3AsIHksIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgb3AsIHksIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeSwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyh5Wydmb28nXSwgeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeSksIDEpCkBAIC00MDgsNiArNDg0LDQyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeSwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LmZvbywgeC5mb28pCiAKKyAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X2dldG5ld2FyZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIEMoaW50KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28sCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28gPT0gb3RoZXIuZm9vCisgICAgICAgIHggPSBDKFs0Ml0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh5LCBDKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmZvbywgeC5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeS5mb28sIHguZm9vKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF9nZXRuZXdhcmdzX2V4KHNlbGYpOgorICAgICAgICBjbGFzcyBDKGludCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICosIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgpLCB7J2Zvbyc6IHNlbGYuZm9vfQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZm9vID09IG90aGVyLmZvbworICAgICAgICB4ID0gQyhmb289WzQyXSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHksIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuZm9vLCB4LmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LmZvbywgeC5mb28pCisKICAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X2dldHN0YXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CkBAIC00NjcsNiArNTc5LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeSwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyh5LmZvbywgeSkKIAorICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JhbmdlKHNlbGYpOgorICAgICAgICBjbGFzcyBJKGludCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSByYW5nZShJKDEwKSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeS5zdG9wLCB4LnN0b3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5zdG9wLCB4LnN0b3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh5LnN0b3AsIEkpCisKICAgICAjIF9yZWNvbnN0cnVjdCgpCiAKICAgICBkZWYgdGVzdF9yZWNvbnN0cnVjdF9zdHJpbmcoc2VsZik6CkBAIC03NjEsOCArODg0LDUgQEAKIAogZGVmIGdsb2JhbF9mb28oeCwgeSk6IHJldHVybiB4K3kKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDb3B5KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvcHlyZWcucHkgYi9MaWIvdGVzdC90ZXN0X2NvcHlyZWcucHkKaW5kZXggYWJlMDc0OC4uNTJlODg3YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb3B5cmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29weXJlZy5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCBjb3B5cmVnCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBFeHRlbnNpb25TYXZlcgogCiBjbGFzcyBDOgpAQCAtMTEzLDkgKzExMiw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29weVJlZ1Rlc3RDYXNlKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29yb3V0aW5lcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29yb3V0aW5lcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGNlZmIwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9jb3JvdXRpbmVzLnB5CkBAIC0wLDAgKzEsMTcyMCBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBjb3B5CitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKworY2xhc3MgQXN5bmNZaWVsZEZyb206CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaik6CisgICAgICAgIHNlbGYub2JqID0gb2JqCisKKyAgICBkZWYgX19hd2FpdF9fKHNlbGYpOgorICAgICAgICB5aWVsZCBmcm9tIHNlbGYub2JqCisKKworY2xhc3MgQXN5bmNZaWVsZDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgIHlpZWxkIHNlbGYudmFsdWUKKworCitkZWYgcnVuX2FzeW5jKGNvcm8pOgorICAgIGFzc2VydCBjb3JvLl9fY2xhc3NfXyBpbiB7dHlwZXMuR2VuZXJhdG9yVHlwZSwgdHlwZXMuQ29yb3V0aW5lVHlwZX0KKworICAgIGJ1ZmZlciA9IFtdCisgICAgcmVzdWx0ID0gTm9uZQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoY29yby5zZW5kKE5vbmUpKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAgICAgICAgIHJlc3VsdCA9IGV4LmFyZ3NbMF0gaWYgZXguYXJncyBlbHNlIE5vbmUKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIGJ1ZmZlciwgcmVzdWx0CisKKworZGVmIHJ1bl9hc3luY19fYXdhaXRfXyhjb3JvKToKKyAgICBhc3NlcnQgY29yby5fX2NsYXNzX18gaXMgdHlwZXMuQ29yb3V0aW5lVHlwZQorICAgIGF3ID0gY29yby5fX2F3YWl0X18oKQorICAgIGJ1ZmZlciA9IFtdCisgICAgcmVzdWx0ID0gTm9uZQorICAgIGkgPSAwCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaSAlIDI6CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChuZXh0KGF3KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChhdy5zZW5kKE5vbmUpKQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgICAgICAgICAgcmVzdWx0ID0gZXguYXJnc1swXSBpZiBleC5hcmdzIGVsc2UgTm9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gYnVmZmVyLCByZXN1bHQKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHNpbGVuY2VfY29yb19nYygpOgorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiKQorICAgICAgICB5aWVsZAorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisKK2NsYXNzIEFzeW5jQmFkU3ludGF4VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYWRzeW50YXhfMShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAiJ2F3YWl0JyBvdXRzaWRlIik6CisgICAgICAgICAgICBpbXBvcnQgdGVzdC5iYWRzeW50YXhfYXN5bmMxCisKKyAgICBkZWYgdGVzdF9iYWRzeW50YXhfMihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAiJ2F3YWl0JyBvdXRzaWRlIik6CisgICAgICAgICAgICBpbXBvcnQgdGVzdC5iYWRzeW50YXhfYXN5bmMyCisKKyAgICBkZWYgdGVzdF9iYWRzeW50YXhfMyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaW52YWxpZCBzeW50YXgnKToKKyAgICAgICAgICAgIGltcG9ydCB0ZXN0LmJhZHN5bnRheF9hc3luYzMKKworICAgIGRlZiB0ZXN0X2JhZHN5bnRheF80KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdpbnZhbGlkIHN5bnRheCcpOgorICAgICAgICAgICAgaW1wb3J0IHRlc3QuYmFkc3ludGF4X2FzeW5jNAorCisgICAgZGVmIHRlc3RfYmFkc3ludGF4XzUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2ludmFsaWQgc3ludGF4Jyk6CisgICAgICAgICAgICBpbXBvcnQgdGVzdC5iYWRzeW50YXhfYXN5bmM1CisKKyAgICBkZWYgdGVzdF9iYWRzeW50YXhfNihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgU3ludGF4RXJyb3IsICIneWllbGQnIGluc2lkZSBhc3luYyBmdW5jdGlvbiIpOgorCisgICAgICAgICAgICBpbXBvcnQgdGVzdC5iYWRzeW50YXhfYXN5bmM2CisKKyAgICBkZWYgdGVzdF9iYWRzeW50YXhfNyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgU3ludGF4RXJyb3IsICIneWllbGQgZnJvbScgaW5zaWRlIGFzeW5jIGZ1bmN0aW9uIik6CisKKyAgICAgICAgICAgIGltcG9ydCB0ZXN0LmJhZHN5bnRheF9hc3luYzcKKworICAgIGRlZiB0ZXN0X2JhZHN5bnRheF84KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdpbnZhbGlkIHN5bnRheCcpOgorICAgICAgICAgICAgaW1wb3J0IHRlc3QuYmFkc3ludGF4X2FzeW5jOAorCisgICAgZGVmIHRlc3RfYmFkc3ludGF4Xzkoc2VsZik6CisgICAgICAgIG5zID0ge30KKyAgICAgICAgZm9yIGNvbXAgaW4geycoYXdhaXQgYSBmb3IgYSBpbiBiKScsCisgICAgICAgICAgICAgICAgICAgICAnW2F3YWl0IGEgZm9yIGEgaW4gYl0nLAorICAgICAgICAgICAgICAgICAgICAgJ3thd2FpdCBhIGZvciBhIGluIGJ9JywKKyAgICAgICAgICAgICAgICAgICAgICd7YXdhaXQgYTogYyBmb3IgYSBpbiBifSd9OgorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdhd2FpdC4qaW4gY29tcHJlaGVuJyk6CisgICAgICAgICAgICAgICAgZXhlYygnYXN5bmMgZGVmIGYoKTpcblx0e30nLmZvcm1hdChjb21wKSwgbnMsIG5zKQorCisgICAgZGVmIHRlc3RfYmFkc3ludGF4XzEwKHNlbGYpOgorICAgICAgICAjIFRlc3RzIGZvciBpc3N1ZSAyNDYxOQorCisgICAgICAgIHNhbXBsZXMgPSBbCisgICAgICAgICAgICAiIiJhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgZGVmIGJhcigpOiBwYXNzCisgICAgICAgICAgICAgICAgICAgYXdhaXQgPSAxCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImFzeW5jIGRlZiBmb28oKToKKworICAgICAgICAgICAgICAgICAgIGRlZiBiYXIoKTogcGFzcworICAgICAgICAgICAgICAgICAgIGF3YWl0ID0gMQorICAgICAgICAgICAgIiIiLAorCisgICAgICAgICAgICAiIiJhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgZGVmIGJhcigpOiBwYXNzCisgICAgICAgICAgICAgICAgICAgaWYgMToKKyAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgPSAxCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBhc3luYyBkZWYgYmFyKCk6IHBhc3MKKyAgICAgICAgICAgICAgICAgICBpZiAxOgorICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBhCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBhc3luYyBkZWYgYmFyKCk6IHBhc3MKKyAgICAgICAgICAgICAgICAgICBhd2FpdCBhCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBkZWYgYmF6KCk6IHBhc3MKKyAgICAgICAgICAgICAgICAgICBhc3luYyBkZWYgYmFyKCk6IHBhc3MKKyAgICAgICAgICAgICAgICAgICBhd2FpdCBhCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBkZWYgYmF6KCk6IHBhc3MKKyAgICAgICAgICAgICAgICAgICAjIDQ1NgorICAgICAgICAgICAgICAgICAgIGFzeW5jIGRlZiBiYXIoKTogcGFzcworICAgICAgICAgICAgICAgICAgICMgMTIzCisgICAgICAgICAgICAgICAgICAgYXdhaXQgYQorICAgICAgICAgICAgIiIiLAorCisgICAgICAgICAgICAiIiJhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgZGVmIGJheigpOiBwYXNzCisgICAgICAgICAgICAgICAgICAgIyA0NTYKKyAgICAgICAgICAgICAgICAgICBhc3luYyBkZWYgYmFyKCk6IHBhc3MKKyAgICAgICAgICAgICAgICAgICAjIDEyMworICAgICAgICAgICAgICAgICAgIGF3YWl0ID0gMgorICAgICAgICAgICAgIiIiLAorCisgICAgICAgICAgICAiIiJkZWYgZm9vKCk6CisKKyAgICAgICAgICAgICAgICAgICBkZWYgYmF6KCk6IHBhc3MKKworICAgICAgICAgICAgICAgICAgIGFzeW5jIGRlZiBiYXIoKTogcGFzcworCisgICAgICAgICAgICAgICAgICAgYXdhaXQgYQorICAgICAgICAgICAgIiIiLAorCisgICAgICAgICAgICAiIiJhc3luYyBkZWYgZm9vKCk6CisKKyAgICAgICAgICAgICAgICAgICBkZWYgYmF6KCk6IHBhc3MKKworICAgICAgICAgICAgICAgICAgIGFzeW5jIGRlZiBiYXIoKTogcGFzcworCisgICAgICAgICAgICAgICAgICAgYXdhaXQgPSAyCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBkZWYgYXN5bmMoKTogcGFzcworICAgICAgICAgICAgIiIiLAorCisgICAgICAgICAgICAiIiJhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgZGVmIGF3YWl0KCk6IHBhc3MKKyAgICAgICAgICAgICIiIiwKKworICAgICAgICAgICAgIiIiYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgICAgIGRlZiBiYXIoKToKKyAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQKKyAgICAgICAgICAgICIiIiwKKworICAgICAgICAgICAgIiIiYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgICAgIHJldHVybiBsYW1iZGEgYXN5bmM6IGF3YWl0CisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFtYmRhIGE6IGF3YWl0CisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImF3YWl0IGEoKSIiIiwKKworICAgICAgICAgICAgIiIiYXN5bmMgZGVmIGZvbyhhPWF3YWl0IGIpOgorICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIiwKKworICAgICAgICAgICAgIiIiYXN5bmMgZGVmIGZvbyhhOmF3YWl0IGIpOgorICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIiwKKworICAgICAgICAgICAgIiIiZGVmIGJheigpOgorICAgICAgICAgICAgICAgICAgIGFzeW5jIGRlZiBmb28oYT1hd2FpdCBiKToKKyAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIiIiLAorCisgICAgICAgICAgICAiIiJhc3luYyBkZWYgZm9vKGFzeW5jKToKKyAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBkZWYgYmFyKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgYmF6KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgPSAxCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBkZWYgYmFyKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgYmF6KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgPSAxCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBhc3luYyBkZWYgYmFyKCk6CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jIGRlZiBiYXooKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBiYXooKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MgorCisgICAgICAgICAgICAgICAgICAgICAgICBhc3luYyA9IDEKKyAgICAgICAgICAgICIiIiwKKworICAgICAgICAgICAgIiIiYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgICAgIGRlZiBiYXIoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBiYXooKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzXG5hd2FpdCBmb28oKQorICAgICAgICAgICAgIiIiLAorCisgICAgICAgICAgICAiIiJkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgZGVmIGJheigpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NcbmF3YWl0IGZvbygpCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImFzeW5jIGRlZiBmb28oYXdhaXQpOgorICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIiwKKworICAgICAgICAgICAgIiIiZGVmIGZvbygpOgorCisgICAgICAgICAgICAgICAgICAgYXN5bmMgZGVmIGJhcigpOiBwYXNzCisKKyAgICAgICAgICAgICAgICAgICBhd2FpdCBhCisgICAgICAgICAgICAiIiIsCisKKyAgICAgICAgICAgICIiImRlZiBmb28oKToKKyAgICAgICAgICAgICAgICAgICBhc3luYyBkZWYgYmFyKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzXG5hd2FpdCBhCisgICAgICAgICAgICAiIiJdCisKKyAgICAgICAgZm9yIGNvZGUgaW4gc2FtcGxlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNvZGU9Y29kZSksIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKKyAgICAgICAgICAgICAgICBjb21waWxlKGNvZGUsICI8dGVzdD4iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9nb29kc3ludGF4XzEoc2VsZik6CisgICAgICAgICMgVGVzdHMgZm9yIGlzc3VlIDI0NjE5CisKKyAgICAgICAgZGVmIGZvbyhhd2FpdCk6CisgICAgICAgICAgICBhc3luYyBkZWYgZm9vKCk6IHBhc3MKKyAgICAgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXR1cm4gYXdhaXQgKyAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKDEwKSwgMTEpCisKKyAgICAgICAgZGVmIGZvbyhhd2FpdCk6CisgICAgICAgICAgICBhc3luYyBkZWYgZm9vKCk6IHBhc3MKKyAgICAgICAgICAgIGFzeW5jIGRlZiBmb28oKTogcGFzcworICAgICAgICAgICAgcmV0dXJuIGF3YWl0ICsgMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygyMCksIDIyKQorCisgICAgICAgIGRlZiBmb28oYXdhaXQpOgorCisgICAgICAgICAgICBhc3luYyBkZWYgZm9vKCk6IHBhc3MKKworICAgICAgICAgICAgYXN5bmMgZGVmIGZvbygpOiBwYXNzCisKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCArIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oMjApLCAyMikKKworICAgICAgICBkZWYgZm9vKGF3YWl0KToKKyAgICAgICAgICAgICIiInNwYW0iIiIKKyAgICAgICAgICAgIGFzeW5jIGRlZiBmb28oKTogXAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgMTIzCisgICAgICAgICAgICBhc3luYyBkZWYgZm9vKCk6IHBhc3MKKyAgICAgICAgICAgICMgNDU2CisgICAgICAgICAgICByZXR1cm4gYXdhaXQgKyAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKDIwKSwgMjIpCisKKyAgICAgICAgZGVmIGZvbyhhd2FpdCk6CisgICAgICAgICAgICBkZWYgZm9vKCk6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb28oKTogcGFzcworICAgICAgICAgICAgYXN5bmMgZGVmIGJhcigpOiByZXR1cm4gYXdhaXRfCisgICAgICAgICAgICBhd2FpdF8gPSBhd2FpdAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJhcigpLnNlbmQoTm9uZSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgICAgICAgICAgICAgIHJldHVybiBleC5hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKDQyKSwgNDIpCisKKyAgICAgICAgYXN5bmMgZGVmIGYoKToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBnKCk6IHBhc3MKKyAgICAgICAgICAgIGF3YWl0IHoKKyAgICAgICAgYXdhaXQgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzY29yb3V0aW5lZnVuY3Rpb24oZikpCisKKworY2xhc3MgVG9rZW5pemVyUmVnclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfb25lbGluZV9kZWZzKHNlbGYpOgorICAgICAgICBidWYgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1MDApOgorICAgICAgICAgICAgYnVmLmFwcGVuZCgnZGVmIGl7aX0oKTogcmV0dXJuIHtpfScuZm9ybWF0KGk9aSkpCisgICAgICAgIGJ1ZiA9ICdcbicuam9pbihidWYpCisKKyAgICAgICAgIyBUZXN0IHRoYXQgNTAwIGNvbnNlcXVlbnQsIG9uZS1saW5lIGRlZnMgaXMgT0sKKyAgICAgICAgbnMgPSB7fQorICAgICAgICBleGVjKGJ1ZiwgbnMsIG5zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zWydpNDk5J10oKSwgNDk5KQorCisgICAgICAgICMgVGVzdCB0aGF0IDUwMCBjb25zZXF1ZW50LCBvbmUtbGluZSBkZWZzICphbmQqCisgICAgICAgICMgb25lICdhc3luYyBkZWYnIGZvbGxvd2luZyB0aGVtIGlzIE9LCisgICAgICAgIGJ1ZiArPSAnXG5hc3luYyBkZWYgZm9vKCk6XG4gICAgcmV0dXJuJworICAgICAgICBucyA9IHt9CisgICAgICAgIGV4ZWMoYnVmLCBucywgbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnNbJ2k0OTknXSgpLCA0OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzY29yb3V0aW5lZnVuY3Rpb24obnNbJ2ZvbyddKSkKKworCitjbGFzcyBDb3JvdXRpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2dlbl8xKHNlbGYpOgorICAgICAgICBkZWYgZ2VuKCk6IHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihnZW4sICdfX2F3YWl0X18nKSkKKworICAgIGRlZiB0ZXN0X2Z1bmNfMShzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgcmV0dXJuIDEwCisKKyAgICAgICAgZiA9IGZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCB0eXBlcy5Db3JvdXRpbmVUeXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChmb28uX19jb2RlX18uY29fZmxhZ3MgJiBpbnNwZWN0LkNPX0NPUk9VVElORSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm9vbChmb28uX19jb2RlX18uY29fZmxhZ3MgJiBpbnNwZWN0LkNPX0dFTkVSQVRPUikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKGYuY3JfY29kZS5jb19mbGFncyAmIGluc3BlY3QuQ09fQ09ST1VUSU5FKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShib29sKGYuY3JfY29kZS5jb19mbGFncyAmIGluc3BlY3QuQ09fR0VORVJBVE9SKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fYXN5bmMoZiksIChbXSwgMTApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuX2FzeW5jX19hd2FpdF9fKGZvbygpKSwgKFtdLCAxMCkpCisKKyAgICAgICAgZGVmIGJhcigpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm9vbChiYXIuX19jb2RlX18uY29fZmxhZ3MgJiBpbnNwZWN0LkNPX0NPUk9VVElORSkpCisKKyAgICBkZWYgdGVzdF9mdW5jXzIoc2VsZik6CisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgUnVudGltZUVycm9yLCAiY29yb3V0aW5lIHJhaXNlZCBTdG9wSXRlcmF0aW9uIik6CisKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X2Z1bmNfMyhzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgICAgIHdpdGggc2lsZW5jZV9jb3JvX2djKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoZm9vKCkpLCAnXjxjb3JvdXRpbmUgb2JqZWN0LiogYXQgMHguKj4kJykKKworICAgIGRlZiB0ZXN0X2Z1bmNfNChzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgICAgIGNoZWNrID0gbGFtYmRhOiBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgVHlwZUVycm9yLCAiJ2Nvcm91dGluZScgb2JqZWN0IGlzIG5vdCBpdGVyYWJsZSIpCisKKyAgICAgICAgd2l0aCBjaGVjaygpOgorICAgICAgICAgICAgbGlzdChmb28oKSkKKworICAgICAgICB3aXRoIGNoZWNrKCk6CisgICAgICAgICAgICB0dXBsZShmb28oKSkKKworICAgICAgICB3aXRoIGNoZWNrKCk6CisgICAgICAgICAgICBzdW0oZm9vKCkpCisKKyAgICAgICAgd2l0aCBjaGVjaygpOgorICAgICAgICAgICAgaXRlcihmb28oKSkKKworICAgICAgICB3aXRoIHNpbGVuY2VfY29yb19nYygpLCBjaGVjaygpOgorICAgICAgICAgICAgZm9yIGkgaW4gZm9vKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggc2lsZW5jZV9jb3JvX2djKCksIGNoZWNrKCk6CisgICAgICAgICAgICBbaSBmb3IgaSBpbiBmb28oKV0KKworICAgIGRlZiB0ZXN0X2Z1bmNfNShzZWxmKToKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgYmFyKCk6CisgICAgICAgICAgICB5aWVsZCAxCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgYXdhaXQgYmFyKCkKKworICAgICAgICBjaGVjayA9IGxhbWJkYTogc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIidjb3JvdXRpbmUnIG9iamVjdCBpcyBub3QgaXRlcmFibGUiKQorCisgICAgICAgIHdpdGggY2hlY2soKToKKyAgICAgICAgICAgIGZvciBlbCBpbiBmb28oKTogcGFzcworCisgICAgICAgICMgdGhlIGZvbGxvd2luZyBzaG91bGQgcGFzcyB3aXRob3V0IGFuIGVycm9yCisgICAgICAgIGZvciBlbCBpbiBiYXIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2VsIGZvciBlbCBpbiBiYXIoKV0sIFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShiYXIoKSksICgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdGVyKGJhcigpKSksIDEpCisKKyAgICBkZWYgdGVzdF9mdW5jXzYoc2VsZik6CisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgeWllbGQgMgorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGF3YWl0IGJhcigpCisKKyAgICAgICAgZiA9IGZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZW5kKE5vbmUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VuZChOb25lKSwgMikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKToKKyAgICAgICAgICAgIGYuc2VuZChOb25lKQorCisgICAgZGVmIHRlc3RfZnVuY183KHNlbGYpOgorICAgICAgICBhc3luYyBkZWYgYmFyKCk6CisgICAgICAgICAgICByZXR1cm4gMTAKKworICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGJhcigpCisKKyAgICAgICAgd2l0aCBzaWxlbmNlX2Nvcm9fZ2MoKSwgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgICJjYW5ub3QgJ3lpZWxkIGZyb20nIGEgY29yb3V0aW5lIG9iamVjdCBpbiBhIG5vbi1jb3JvdXRpbmUgZ2VuZXJhdG9yIik6CisKKyAgICAgICAgICAgIGxpc3QoZm9vKCkpCisKKyAgICBkZWYgdGVzdF9mdW5jXzgoc2VsZik6CisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZvbygpKQorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiAnc3BhbScKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bl9hc3luYyhiYXIoKSksIChbXSwgJ3NwYW0nKSApCisKKyAgICBkZWYgdGVzdF9mdW5jXzkoc2VsZik6CisgICAgICAgIGFzeW5jIGRlZiBmb28oKTogcGFzcworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KAorICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsICJjb3JvdXRpbmUgJy4qdGVzdF9mdW5jXzkuKmZvbycgd2FzIG5ldmVyIGF3YWl0ZWQiKToKKworICAgICAgICAgICAgZm9vKCkKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9mdW5jXzEwKHNlbGYpOgorICAgICAgICBOID0gMAorCisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgTgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGEgPSB5aWVsZAorICAgICAgICAgICAgICAgIHlpZWxkIChhICoqIDIpCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgTiArPSAxMDAKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBOICs9IDEKKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICBhd2FpdCBnZW4oKQorCisgICAgICAgIGNvcm8gPSBmb28oKQorICAgICAgICBhdyA9IGNvcm8uX19hd2FpdF9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhhdywgaXRlcihhdykpCisgICAgICAgIG5leHQoYXcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXcuc2VuZCgxMCksIDEwMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE4sIDApCisgICAgICAgIGF3LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOLCAxKQorCisgICAgICAgIGNvcm8gPSBmb28oKQorICAgICAgICBhdyA9IGNvcm8uX19hd2FpdF9fKCkKKyAgICAgICAgbmV4dChhdykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICBhdy50aHJvdyhaZXJvRGl2aXNpb25FcnJvciwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOLCAxMDIpCisKKyAgICBkZWYgdGVzdF9mdW5jXzExKHNlbGYpOgorICAgICAgICBhc3luYyBkZWYgZnVuYygpOiBwYXNzCisgICAgICAgIGNvcm8gPSBmdW5jKCkKKyAgICAgICAgIyBUZXN0IHRoYXQgUHlDb3JvX1R5cGUgYW5kIF9QeUNvcm9XcmFwcGVyX1R5cGUgdHlwZXMgd2VyZSBwcm9wZXJseQorICAgICAgICAjIGluaXRpYWxpemVkCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19fYXdhaXRfXycsIGRpcihjb3JvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignX19pdGVyX18nLCBkaXIoY29yby5fX2F3YWl0X18oKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Nvcm91dGluZV93cmFwcGVyJywgcmVwcihjb3JvLl9fYXdhaXRfXygpKSkKKyAgICAgICAgY29yby5jbG9zZSgpICMgYXZvaWQgUnVudGltZVdhcm5pbmcKKworICAgIGRlZiB0ZXN0X2Z1bmNfMTIoc2VsZik6CisgICAgICAgIGFzeW5jIGRlZiBnKCk6CisgICAgICAgICAgICBpID0gbWUuc2VuZChOb25lKQorICAgICAgICAgICAgYXdhaXQgZm9vCisgICAgICAgIG1lID0gZygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcm91dGluZSBhbHJlYWR5IGV4ZWN1dGluZyIpOgorICAgICAgICAgICAgbWUuc2VuZChOb25lKQorCisgICAgZGVmIHRlc3RfZnVuY18xMyhzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGcoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgImNhbid0IHNlbmQgbm9uLU5vbmUgdmFsdWUgdG8gYSBqdXN0LXN0YXJ0ZWQgY29yb3V0aW5lIik6CisKKyAgICAgICAgICAgIGcoKS5zZW5kKCdzcGFtJykKKworICAgIGRlZiB0ZXN0X2Z1bmNfMTQoc2VsZik6CisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgYXN5bmMgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhd2FpdCBnZW4oKQorICAgICAgICAgICAgZXhjZXB0IEdlbmVyYXRvckV4aXQ6CisgICAgICAgICAgICAgICAgYXdhaXQgZ2VuKCkKKyAgICAgICAgYyA9IGNvcm8oKQorICAgICAgICBjLnNlbmQoTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JvdXRpbmUgaWdub3JlZCBHZW5lcmF0b3JFeGl0Iik6CisgICAgICAgICAgICBjLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Z1bmNfMTUoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTg4NyBmb3IgZGV0YWlscworCisgICAgICAgIGFzeW5jIGRlZiBzcGFtbWVyKCk6CisgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgIGFzeW5jIGRlZiByZWFkZXIoY29ybyk6CisgICAgICAgICAgICByZXR1cm4gYXdhaXQgY29ybworCisgICAgICAgIHNwYW1tZXJfY29ybyA9IHNwYW1tZXIoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTdG9wSXRlcmF0aW9uLCAnc3BhbScpOgorICAgICAgICAgICAgcmVhZGVyKHNwYW1tZXJfY29ybykuc2VuZChOb25lKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IHJldXNlIGFscmVhZHkgYXdhaXRlZCBjb3JvdXRpbmUnKToKKyAgICAgICAgICAgIHJlYWRlcihzcGFtbWVyX2Nvcm8pLnNlbmQoTm9uZSkKKworICAgIGRlZiB0ZXN0X2Z1bmNfMTYoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTg4NyBmb3IgZGV0YWlscworCisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vcCgpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgYXN5bmMgZGVmIHNlbmQoKToKKyAgICAgICAgICAgIGF3YWl0IG5vcCgpCisgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgIGFzeW5jIGRlZiByZWFkKGNvcm8pOgorICAgICAgICAgICAgYXdhaXQgbm9wKCkKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCBjb3JvCisKKyAgICAgICAgc3BhbW1lciA9IHNlbmQoKQorCisgICAgICAgIHJlYWRlciA9IHJlYWQoc3BhbW1lcikKKyAgICAgICAgcmVhZGVyLnNlbmQoTm9uZSkKKyAgICAgICAgcmVhZGVyLnNlbmQoTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgJ2hhbScpOgorICAgICAgICAgICAgcmVhZGVyLnRocm93KEV4Y2VwdGlvbignaGFtJykpCisKKyAgICAgICAgcmVhZGVyID0gcmVhZChzcGFtbWVyKQorICAgICAgICByZWFkZXIuc2VuZChOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nhbm5vdCByZXVzZSBhbHJlYWR5IGF3YWl0ZWQgY29yb3V0aW5lJyk6CisgICAgICAgICAgICByZWFkZXIuc2VuZChOb25lKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IHJldXNlIGFscmVhZHkgYXdhaXRlZCBjb3JvdXRpbmUnKToKKyAgICAgICAgICAgIHJlYWRlci50aHJvdyhFeGNlcHRpb24oJ3dhdCcpKQorCisgICAgZGVmIHRlc3RfZnVuY18xNyhzZWxmKToKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI1ODg3IGZvciBkZXRhaWxzCisKKyAgICAgICAgYXN5bmMgZGVmIGNvcm91dGluZSgpOgorICAgICAgICAgICAgcmV0dXJuICdzcGFtJworCisgICAgICAgIGNvcm8gPSBjb3JvdXRpbmUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3RvcEl0ZXJhdGlvbiwgJ3NwYW0nKToKKyAgICAgICAgICAgIGNvcm8uc2VuZChOb25lKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IHJldXNlIGFscmVhZHkgYXdhaXRlZCBjb3JvdXRpbmUnKToKKyAgICAgICAgICAgIGNvcm8uc2VuZChOb25lKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IHJldXNlIGFscmVhZHkgYXdhaXRlZCBjb3JvdXRpbmUnKToKKyAgICAgICAgICAgIGNvcm8udGhyb3coRXhjZXB0aW9uKCd3YXQnKSkKKworICAgICAgICAjIENsb3NpbmcgYSBjb3JvdXRpbmUgc2hvdWxkbid0IHJhaXNlIGFueSBleGNlcHRpb24gZXZlbiBpZiBpdCdzCisgICAgICAgICMgYWxyZWFkeSBjbG9zZWQvZXhoYXVzdGVkIChzaW1pbGFyIHRvIGdlbmVyYXRvcnMpCisgICAgICAgIGNvcm8uY2xvc2UoKQorICAgICAgICBjb3JvLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Z1bmNfMTgoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTg4NyBmb3IgZGV0YWlscworCisgICAgICAgIGFzeW5jIGRlZiBjb3JvdXRpbmUoKToKKyAgICAgICAgICAgIHJldHVybiAnc3BhbScKKworICAgICAgICBjb3JvID0gY29yb3V0aW5lKCkKKyAgICAgICAgYXdhaXRfaXRlciA9IGNvcm8uX19hd2FpdF9fKCkKKyAgICAgICAgaXQgPSBpdGVyKGF3YWl0X2l0ZXIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN0b3BJdGVyYXRpb24sICdzcGFtJyk6CisgICAgICAgICAgICBpdC5zZW5kKE5vbmUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYW5ub3QgcmV1c2UgYWxyZWFkeSBhd2FpdGVkIGNvcm91dGluZScpOgorICAgICAgICAgICAgaXQuc2VuZChOb25lKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IHJldXNlIGFscmVhZHkgYXdhaXRlZCBjb3JvdXRpbmUnKToKKyAgICAgICAgICAgICMgQWx0aG91Z2ggdGhlIGl0ZXJhdG9yIHByb3RvY29sIHJlcXVpcmVzIGl0ZXJhdG9ycyB0bworICAgICAgICAgICAgIyByYWlzZSBhbm90aGVyIFN0b3BJdGVyYXRpb24gaGVyZSwgd2UgZG9uJ3Qgd2FudCB0byBkbworICAgICAgICAgICAgIyB0aGF0LiAgSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UsIHRoZSBpdGVyYXRvciB3aWxsIHJhaXNlCisgICAgICAgICAgICAjIGEgUnVudGltZUVycm9yLCBzbyB0aGF0ICd5aWVsZCBmcm9tJyBhbmQgJ2F3YWl0JworICAgICAgICAgICAgIyBleHByZXNzaW9ucyB3aWxsIHRyaWdnZXIgdGhlIGVycm9yLCBpbnN0ZWFkIG9mIHNpbGVudGx5CisgICAgICAgICAgICAjIGlnbm9yaW5nIHRoZSBjYWxsLgorICAgICAgICAgICAgbmV4dChpdCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nhbm5vdCByZXVzZSBhbHJlYWR5IGF3YWl0ZWQgY29yb3V0aW5lJyk6CisgICAgICAgICAgICBpdC50aHJvdyhFeGNlcHRpb24oJ3dhdCcpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IHJldXNlIGFscmVhZHkgYXdhaXRlZCBjb3JvdXRpbmUnKToKKyAgICAgICAgICAgIGl0LnRocm93KEV4Y2VwdGlvbignd2F0JykpCisKKyAgICAgICAgIyBDbG9zaW5nIGEgY29yb3V0aW5lIHNob3VsZG4ndCByYWlzZSBhbnkgZXhjZXB0aW9uIGV2ZW4gaWYgaXQncworICAgICAgICAjIGFscmVhZHkgY2xvc2VkL2V4aGF1c3RlZCAoc2ltaWxhciB0byBnZW5lcmF0b3JzKQorICAgICAgICBpdC5jbG9zZSgpCisgICAgICAgIGl0LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Z1bmNfMTkoc2VsZik6CisgICAgICAgIENISyA9IDAKKworICAgICAgICBAdHlwZXMuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIG5vbmxvY2FsIENISworICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZXhjZXB0IEdlbmVyYXRvckV4aXQ6CisgICAgICAgICAgICAgICAgQ0hLICs9IDEKKworICAgICAgICBhc3luYyBkZWYgY29yb3V0aW5lKCk6CisgICAgICAgICAgICBhd2FpdCBmb28oKQorCisgICAgICAgIGNvcm8gPSBjb3JvdXRpbmUoKQorCisgICAgICAgIGNvcm8uc2VuZChOb25lKQorICAgICAgICBjb3JvLnNlbmQoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENISywgMCkKKyAgICAgICAgY29yby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ0hLLCAxKQorCisgICAgICAgIGZvciBfIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgIyBDbG9zaW5nIGEgY29yb3V0aW5lIHNob3VsZG4ndCByYWlzZSBhbnkgZXhjZXB0aW9uIGV2ZW4gaWYgaXQncworICAgICAgICAgICAgIyBhbHJlYWR5IGNsb3NlZC9leGhhdXN0ZWQgKHNpbWlsYXIgdG8gZ2VuZXJhdG9ycykKKyAgICAgICAgICAgIGNvcm8uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDSEssIDEpCisKKyAgICBkZWYgdGVzdF9jcl9hd2FpdChzZWxmKToKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgYSgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGNvcm91dGluZXN0YXRlKGNvcm9fYiksIGluc3BlY3QuQ09ST19SVU5OSU5HKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29yb19iLmNyX2F3YWl0KQorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRjb3JvdXRpbmVzdGF0ZShjb3JvX2IpLCBpbnNwZWN0LkNPUk9fUlVOTklORykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvcm9fYi5jcl9hd2FpdCkKKworICAgICAgICBhc3luYyBkZWYgYygpOgorICAgICAgICAgICAgYXdhaXQgYSgpCisKKyAgICAgICAgYXN5bmMgZGVmIGIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvcm9fYi5jcl9hd2FpdCkKKyAgICAgICAgICAgIGF3YWl0IGMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29yb19iLmNyX2F3YWl0KQorCisgICAgICAgIGNvcm9fYiA9IGIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0Y29yb3V0aW5lc3RhdGUoY29yb19iKSwgaW5zcGVjdC5DT1JPX0NSRUFURUQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvcm9fYi5jcl9hd2FpdCkKKworICAgICAgICBjb3JvX2Iuc2VuZChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0Y29yb3V0aW5lc3RhdGUoY29yb19iKSwgaW5zcGVjdC5DT1JPX1NVU1BFTkRFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3JvX2IuY3JfYXdhaXQuY3JfYXdhaXQuZ2lfY29kZS5jb19uYW1lLCAnYScpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKToKKyAgICAgICAgICAgIGNvcm9fYi5zZW5kKE5vbmUpICAjIGNvbXBsZXRlIGNvcm91dGluZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0Y29yb3V0aW5lc3RhdGUoY29yb19iKSwgaW5zcGVjdC5DT1JPX0NMT1NFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29yb19iLmNyX2F3YWl0KQorCisgICAgZGVmIHRlc3RfY29yb3R5cGVfMShzZWxmKToKKyAgICAgICAgY3QgPSB0eXBlcy5Db3JvdXRpbmVUeXBlCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ludG8gY29yb3V0aW5lJywgY3Quc2VuZC5fX2RvY19fKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbnNpZGUgY29yb3V0aW5lJywgY3QuY2xvc2UuX19kb2NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW4gY29yb3V0aW5lJywgY3QudGhyb3cuX19kb2NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignb2YgdGhlIGNvcm91dGluZScsIGN0Ll9fZGljdF9fWydfX25hbWVfXyddLl9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ29mIHRoZSBjb3JvdXRpbmUnLCBjdC5fX2RpY3RfX1snX19xdWFsbmFtZV9fJ10uX19kb2NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdC5fX25hbWVfXywgJ2Nvcm91dGluZScpCisKKyAgICAgICAgYXN5bmMgZGVmIGYoKTogcGFzcworICAgICAgICBjID0gZigpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Nvcm91dGluZSBvYmplY3QnLCByZXByKGMpKQorICAgICAgICBjLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2F3YWl0XzEoc2VsZik6CisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgYXdhaXQgMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAib2JqZWN0IGludCBjYW4udC4qYXdhaXQiKToKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X2F3YWl0XzIoc2VsZik6CisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGF3YWl0IFtdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJvYmplY3QgbGlzdCBjYW4udC4qYXdhaXQiKToKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X2F3YWl0XzMoc2VsZik6CisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGF3YWl0IEFzeW5jWWllbGRGcm9tKFsxLCAyLCAzXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bl9hc3luYyhmb28oKSksIChbMSwgMiwgM10sIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bl9hc3luY19fYXdhaXRfXyhmb28oKSksIChbMSwgMiwgM10sIE5vbmUpKQorCisgICAgZGVmIHRlc3RfYXdhaXRfNChzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGJhcigpOgorICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJhcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fYXN5bmMoZm9vKCkpLCAoW10sIDQyKSkKKworICAgIGRlZiB0ZXN0X2F3YWl0XzUoc2VsZik6CisgICAgICAgIGNsYXNzIEF3YWl0YWJsZToKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBBd2FpdGFibGUoKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICBUeXBlRXJyb3IsICJfX2F3YWl0X18uKnJldHVybmVkIG5vbi1pdGVyYXRvciBvZiB0eXBlIik6CisKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X2F3YWl0XzYoc2VsZik6CisgICAgICAgIGNsYXNzIEF3YWl0YWJsZToKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIoWzUyXSkKKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICByZXR1cm4gKGF3YWl0IEF3YWl0YWJsZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuX2FzeW5jKGZvbygpKSwgKFs1Ml0sIE5vbmUpKQorCisgICAgZGVmIHRlc3RfYXdhaXRfNyhzZWxmKToKKyAgICAgICAgY2xhc3MgQXdhaXRhYmxlOgorICAgICAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICB5aWVsZCA0MgorICAgICAgICAgICAgICAgIHJldHVybiAxMDAKKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICByZXR1cm4gKGF3YWl0IEF3YWl0YWJsZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuX2FzeW5jKGZvbygpKSwgKFs0Ml0sIDEwMCkpCisKKyAgICBkZWYgdGVzdF9hd2FpdF84KHNlbGYpOgorICAgICAgICBjbGFzcyBBd2FpdGFibGU6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOiByZXR1cm4gYXdhaXQgQXdhaXRhYmxlKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICBUeXBlRXJyb3IsICJvYmplY3QgQXdhaXRhYmxlIGNhbid0IGJlIHVzZWQgaW4gJ2F3YWl0JyBleHByZXNzaW9uIik6CisKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X2F3YWl0Xzkoc2VsZik6CisgICAgICAgIGRlZiB3cmFwKCk6CisgICAgICAgICAgICByZXR1cm4gYmFyCisKKyAgICAgICAgYXN5bmMgZGVmIGJhcigpOgorICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgYiA9IGJhcigpCisKKyAgICAgICAgICAgIGRiID0geydiJzogIGxhbWJkYTogd3JhcH0KKworICAgICAgICAgICAgY2xhc3MgREI6CisgICAgICAgICAgICAgICAgYiA9IHdyYXAKKworICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBiYXIoKSArIGF3YWl0IHdyYXAoKSgpICsgYXdhaXQgZGJbJ2InXSgpKCkoKSArCisgICAgICAgICAgICAgICAgICAgIGF3YWl0IGJhcigpICogMTAwMCArIGF3YWl0IERCLmIoKSgpKQorCisgICAgICAgIGFzeW5jIGRlZiBmb28yKCk6CisgICAgICAgICAgICByZXR1cm4gLWF3YWl0IGJhcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fYXN5bmMoZm9vKCkpLCAoW10sIDQyMTY4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fYXN5bmMoZm9vMigpKSwgKFtdLCAtNDIpKQorCisgICAgZGVmIHRlc3RfYXdhaXRfMTAoc2VsZik6CisgICAgICAgIGFzeW5jIGRlZiBiYXooKToKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGFzeW5jIGRlZiBiYXIoKToKKyAgICAgICAgICAgIHJldHVybiBiYXooKQorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCAoYXdhaXQgYmFyKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fYXN5bmMoZm9vKCkpLCAoW10sIDQyKSkKKworICAgIGRlZiB0ZXN0X2F3YWl0XzExKHNlbGYpOgorICAgICAgICBkZWYgaWRlbnQodmFsKToKKyAgICAgICAgICAgIHJldHVybiB2YWwKKworICAgICAgICBhc3luYyBkZWYgYmFyKCk6CisgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgcmV0dXJuIGlkZW50KHZhbD1hd2FpdCBiYXIoKSkKKworICAgICAgICBhc3luYyBkZWYgZm9vMigpOgorICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJhcigpLCAnaGFtJworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuX2FzeW5jKGZvbzIoKSksIChbXSwgKCdzcGFtJywgJ2hhbScpKSkKKworICAgIGRlZiB0ZXN0X2F3YWl0XzEyKHNlbGYpOgorICAgICAgICBhc3luYyBkZWYgY29ybygpOgorICAgICAgICAgICAgcmV0dXJuICdzcGFtJworCisgICAgICAgIGNsYXNzIEF3YWl0YWJsZToKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvcm8oKQorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCBBd2FpdGFibGUoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIl9fYXdhaXRfX1woXCkgcmV0dXJuZWQgYSBjb3JvdXRpbmUiKToKKworICAgICAgICAgICAgcnVuX2FzeW5jKGZvbygpKQorCisgICAgZGVmIHRlc3RfYXdhaXRfMTMoc2VsZik6CisgICAgICAgIGNsYXNzIEF3YWl0YWJsZToKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICByZXR1cm4gYXdhaXQgQXdhaXRhYmxlKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICBUeXBlRXJyb3IsICJfX2F3YWl0X18uKnJldHVybmVkIG5vbi1pdGVyYXRvciBvZiB0eXBlIik6CisKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X2F3YWl0XzE0KHNlbGYpOgorICAgICAgICBjbGFzcyBXcmFwcGVyOgorICAgICAgICAgICAgIyBGb3JjZXMgdGhlIGludGVycHJldGVyIHRvIHVzZSBDb3JvdXRpbmVUeXBlLl9fYXdhaXRfXworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvcm8pOgorICAgICAgICAgICAgICAgIGFzc2VydCBjb3JvLl9fY2xhc3NfXyBpcyB0eXBlcy5Db3JvdXRpbmVUeXBlCisgICAgICAgICAgICAgICAgc2VsZi5jb3JvID0gY29ybworICAgICAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb3JvLl9fYXdhaXRfXygpCisKKyAgICAgICAgY2xhc3MgRnV0dXJlTGlrZToKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICh5aWVsZCkKKworICAgICAgICBjbGFzcyBNYXJrZXIoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhc3luYyBkZWYgY29ybzEoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgRnV0dXJlTGlrZSgpCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgTWFya2VyCisgICAgICAgIGFzeW5jIGRlZiBjb3JvMigpOgorICAgICAgICAgICAgcmV0dXJuIGF3YWl0IFdyYXBwZXIoY29ybzEoKSkKKworICAgICAgICBjID0gY29ybzIoKQorICAgICAgICBjLnNlbmQoTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN0b3BJdGVyYXRpb24sICdzcGFtJyk6CisgICAgICAgICAgICBjLnNlbmQoJ3NwYW0nKQorCisgICAgICAgIGMgPSBjb3JvMigpCisgICAgICAgIGMuc2VuZChOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE1hcmtlcik6CisgICAgICAgICAgICBjLnRocm93KFplcm9EaXZpc2lvbkVycm9yKQorCisgICAgZGVmIHRlc3RfYXdhaXRfMTUoc2VsZik6CisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vcCgpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBhc3luYyBkZWYgY29yb3V0aW5lKCk6CisgICAgICAgICAgICBhd2FpdCBub3AoKQorCisgICAgICAgIGFzeW5jIGRlZiB3YWl0ZXIoY29ybyk6CisgICAgICAgICAgICBhd2FpdCBjb3JvCisKKyAgICAgICAgY29ybyA9IGNvcm91dGluZSgpCisgICAgICAgIGNvcm8uc2VuZChOb25lKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yb3V0aW5lIGlzIGJlaW5nIGF3YWl0ZWQgYWxyZWFkeSIpOgorICAgICAgICAgICAgd2FpdGVyKGNvcm8pLnNlbmQoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dpdGhfMShzZWxmKToKKyAgICAgICAgY2xhc3MgTWFuYWdlcjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FlbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGF3YWl0IEFzeW5jWWllbGRGcm9tKFsnZW50ZXItMS0nICsgc2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW50ZXItMi0nICsgc2VsZi5uYW1lXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBhc3luYyBkZWYgX19hZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBhd2FpdCBBc3luY1lpZWxkRnJvbShbJ2V4aXQtMS0nICsgc2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhpdC0yLScgKyBzZWxmLm5hbWVdKQorCisgICAgICAgICAgICAgICAgaWYgc2VsZi5uYW1lID09ICdCJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGFzeW5jIHdpdGggTWFuYWdlcigiQSIpIGFzIGEsIE1hbmFnZXIoIkIiKSBhcyBiOgorICAgICAgICAgICAgICAgIGF3YWl0IEFzeW5jWWllbGRGcm9tKFsoJ21hbmFnZXJzJywgYS5uYW1lLCBiLm5hbWUpXSkKKyAgICAgICAgICAgICAgICAxLzAKKworICAgICAgICBmID0gZm9vKCkKKyAgICAgICAgcmVzdWx0LCBfID0gcnVuX2FzeW5jKGYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlc3VsdCwgWydlbnRlci0xLUEnLCAnZW50ZXItMi1BJywgJ2VudGVyLTEtQicsICdlbnRlci0yLUInLAorICAgICAgICAgICAgICAgICAgICAgKCdtYW5hZ2VycycsICdBJywgJ0InKSwKKyAgICAgICAgICAgICAgICAgICAgICdleGl0LTEtQicsICdleGl0LTItQicsICdleGl0LTEtQScsICdleGl0LTItQSddCisgICAgICAgICkKKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICBhc3luYyB3aXRoIE1hbmFnZXIoIkEiKSBhcyBhLCBNYW5hZ2VyKCJDIikgYXMgYzoKKyAgICAgICAgICAgICAgICBhd2FpdCBBc3luY1lpZWxkRnJvbShbKCdtYW5hZ2VycycsIGEubmFtZSwgYy5uYW1lKV0pCisgICAgICAgICAgICAgICAgMS8wCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisKKyAgICBkZWYgdGVzdF93aXRoXzIoc2VsZik6CisgICAgICAgIGNsYXNzIENNOgorICAgICAgICAgICAgZGVmIF9fYWVudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGFzeW5jIHdpdGggQ00oKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEF0dHJpYnV0ZUVycm9yLCAnX19hZXhpdF9fJyk6CisgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisKKyAgICBkZWYgdGVzdF93aXRoXzMoc2VsZik6CisgICAgICAgIGNsYXNzIENNOgorICAgICAgICAgICAgZGVmIF9fYWV4aXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgYXN5bmMgd2l0aCBDTSgpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoQXR0cmlidXRlRXJyb3IsICdfX2FlbnRlcl9fJyk6CisgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisKKyAgICBkZWYgdGVzdF93aXRoXzQoc2VsZik6CisgICAgICAgIGNsYXNzIENNOgorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgYXN5bmMgd2l0aCBDTSgpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoQXR0cmlidXRlRXJyb3IsICdfX2FleGl0X18nKToKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X3dpdGhfNShzZWxmKToKKyAgICAgICAgIyBXaGlsZSB0aGlzIHRlc3QgZG9lc24ndCBtYWtlIGEgbG90IG9mIHNlbnNlLAorICAgICAgICAjIGl0J3MgYSByZWdyZXNzaW9uIHRlc3QgZm9yIGFuIGVhcmx5IGJ1ZyB3aXRoIG9wY29kZXMKKyAgICAgICAgIyBnZW5lcmF0aW9uCisKKyAgICAgICAgY2xhc3MgQ006CisgICAgICAgICAgICBhc3luYyBkZWYgX19hZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBhc3luYyBkZWYgX19hZXhpdF9fKHNlbGYsICpleGMpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhc3luYyBkZWYgZnVuYygpOgorICAgICAgICAgICAgYXN5bmMgd2l0aCBDTSgpOgorICAgICAgICAgICAgICAgIGFzc2VydCAoMSwgKSA9PSAxCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBydW5fYXN5bmMoZnVuYygpKQorCisgICAgZGVmIHRlc3Rfd2l0aF82KHNlbGYpOgorICAgICAgICBjbGFzcyBDTToKKyAgICAgICAgICAgIGRlZiBfX2FlbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAxMjMKKworICAgICAgICAgICAgZGVmIF9fYWV4aXRfXyhzZWxmLCAqZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQ1NgorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGFzeW5jIHdpdGggQ00oKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgVHlwZUVycm9yLCAib2JqZWN0IGludCBjYW4ndCBiZSB1c2VkIGluICdhd2FpdCcgZXhwcmVzc2lvbiIpOgorICAgICAgICAgICAgIyBpdCdzIGltcG9ydGFudCB0aGF0IF9fYWV4aXRfXyB3YXNuJ3QgY2FsbGVkCisgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisKKyAgICBkZWYgdGVzdF93aXRoXzcoc2VsZik6CisgICAgICAgIGNsYXNzIENNOgorICAgICAgICAgICAgYXN5bmMgZGVmIF9fYWVudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fYWV4aXRfXyhzZWxmLCAqZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQ0NAorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGFzeW5jIHdpdGggQ00oKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCgKKyAgICAgICAgICAgICAgICBleGMuYXJnc1swXSwgIm9iamVjdCBpbnQgY2FuJ3QgYmUgdXNlZCBpbiAnYXdhaXQnIGV4cHJlc3Npb24iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4Yy5fX2NvbnRleHRfXyBpcyBub3QgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGV4Yy5fX2NvbnRleHRfXywgWmVyb0RpdmlzaW9uRXJyb3IpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdpbnZhbGlkIGFzeW5jaHJvbm91cyBjb250ZXh0IG1hbmFnZXIgZGlkIG5vdCBmYWlsJykKKworCisgICAgZGVmIHRlc3Rfd2l0aF84KHNlbGYpOgorICAgICAgICBDTlQgPSAwCisKKyAgICAgICAgY2xhc3MgQ006CisgICAgICAgICAgICBhc3luYyBkZWYgX19hZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19hZXhpdF9fKHNlbGYsICplKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDU2CisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgbm9ubG9jYWwgQ05UCisgICAgICAgICAgICBhc3luYyB3aXRoIENNKCk6CisgICAgICAgICAgICAgICAgQ05UICs9IDEKKworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIm9iamVjdCBpbnQgY2FuJ3QgYmUgdXNlZCBpbiAnYXdhaXQnIGV4cHJlc3Npb24iKToKKworICAgICAgICAgICAgcnVuX2FzeW5jKGZvbygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ05ULCAxKQorCisKKyAgICBkZWYgdGVzdF93aXRoXzkoc2VsZik6CisgICAgICAgIENOVCA9IDAKKworICAgICAgICBjbGFzcyBDTToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FlbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FleGl0X18oc2VsZiwgKmUpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIG5vbmxvY2FsIENOVAorICAgICAgICAgICAgYXN5bmMgd2l0aCBDTSgpOgorICAgICAgICAgICAgICAgIENOVCArPSAxCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDTlQsIDEpCisKKyAgICBkZWYgdGVzdF93aXRoXzEwKHNlbGYpOgorICAgICAgICBDTlQgPSAwCisKKyAgICAgICAgY2xhc3MgQ006CisgICAgICAgICAgICBhc3luYyBkZWYgX19hZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBhc3luYyBkZWYgX19hZXhpdF9fKHNlbGYsICplKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICBub25sb2NhbCBDTlQKKyAgICAgICAgICAgIGFzeW5jIHdpdGggQ00oKToKKyAgICAgICAgICAgICAgICBhc3luYyB3aXRoIENNKCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleGMuX19jb250ZXh0X18gaXMgbm90IE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShleGMuX19jb250ZXh0X18sIFplcm9EaXZpc2lvbkVycm9yKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGV4Yy5fX2NvbnRleHRfXy5fX2NvbnRleHRfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2V4Y2VwdGlvbiBmcm9tIF9fYWV4aXRfXyBkaWQgbm90IHByb3BhZ2F0ZScpCisKKyAgICBkZWYgdGVzdF93aXRoXzExKHNlbGYpOgorICAgICAgICBDTlQgPSAwCisKKyAgICAgICAgY2xhc3MgQ006CisgICAgICAgICAgICBhc3luYyBkZWYgX19hZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FleGl0X18oc2VsZiwgKmUpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIG5vbmxvY2FsIENOVAorICAgICAgICAgICAgYXN5bmMgd2l0aCBDTSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4Yy5fX2NvbnRleHRfXyBpcyBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdleGNlcHRpb24gZnJvbSBfX2FlbnRlcl9fIGRpZCBub3QgcHJvcGFnYXRlJykKKworICAgIGRlZiB0ZXN0X3dpdGhfMTIoc2VsZik6CisgICAgICAgIENOVCA9IDAKKworICAgICAgICBjbGFzcyBDTToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FlbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FleGl0X18oc2VsZiwgKmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgbm9ubG9jYWwgQ05UCisgICAgICAgICAgICBhc3luYyB3aXRoIENNKCkgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjbS5fX2NsYXNzX18sIENNKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCisgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X3dpdGhfMTMoc2VsZik6CisgICAgICAgIENOVCA9IDAKKworICAgICAgICBjbGFzcyBDTToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FlbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgICAgICAgICBhc3luYyBkZWYgX19hZXhpdF9fKHNlbGYsICplKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIG5vbmxvY2FsIENOVAorICAgICAgICAgICAgQ05UICs9IDEKKyAgICAgICAgICAgIGFzeW5jIHdpdGggQ00oKToKKyAgICAgICAgICAgICAgICBDTlQgKz0gMTAwMAorICAgICAgICAgICAgQ05UICs9IDEwMDAwCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ05ULCAxKQorCisgICAgZGVmIHRlc3RfZm9yXzEoc2VsZik6CisgICAgICAgIGFpdGVyX2NhbGxzID0gMAorCisgICAgICAgIGNsYXNzIEFzeW5jSXRlcjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmkgPSAwCisKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgYWl0ZXJfY2FsbHMKKyAgICAgICAgICAgICAgICBhaXRlcl9jYWxscyArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgYXN5bmMgZGVmIF9fYW5leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmkgKz0gMQorCisgICAgICAgICAgICAgICAgaWYgbm90IChzZWxmLmkgJSAxMCk6CisgICAgICAgICAgICAgICAgICAgIGF3YWl0IEFzeW5jWWllbGQoc2VsZi5pICogMTApCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmkgPiAxMDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BBc3luY0l0ZXJhdGlvbgorCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaSwgc2VsZi5pCisKKworICAgICAgICBidWZmZXIgPSBbXQorICAgICAgICBhc3luYyBkZWYgdGVzdDEoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsICJsZWdhY3kiKToKKyAgICAgICAgICAgICAgICBhc3luYyBmb3IgaTEsIGkyIGluIEFzeW5jSXRlcigpOgorICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGkxICsgaTIpCisKKyAgICAgICAgeWllbGRlZCwgXyA9IHJ1bl9hc3luYyh0ZXN0MSgpKQorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IF9fYWl0ZXJfXyB3YXMgY2FsbGVkIG9ubHkgb25jZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFpdGVyX2NhbGxzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHlpZWxkZWQsIFtpICogMTAwIGZvciBpIGluIHJhbmdlKDEsIDExKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmZmVyLCBbaSoyIGZvciBpIGluIHJhbmdlKDEsIDEwMSldKQorCisKKyAgICAgICAgYnVmZmVyID0gW10KKyAgICAgICAgYXN5bmMgZGVmIHRlc3QyKCk6CisgICAgICAgICAgICBub25sb2NhbCBidWZmZXIKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsICJsZWdhY3kiKToKKyAgICAgICAgICAgICAgICBhc3luYyBmb3IgaSBpbiBBc3luY0l0ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChpWzBdKQorICAgICAgICAgICAgICAgICAgICBpZiBpWzBdID09IDIwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCd3aGF0PycpCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCdlbmQnKQorCisgICAgICAgIHlpZWxkZWQsIF8gPSBydW5fYXN5bmModGVzdDIoKSkKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBfX2FpdGVyX18gd2FzIGNhbGxlZCBvbmx5IG9uY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhaXRlcl9jYWxscywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5aWVsZGVkLCBbMTAwLCAyMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmZlciwgW2kgZm9yIGkgaW4gcmFuZ2UoMSwgMjEpXSArIFsnZW5kJ10pCisKKworICAgICAgICBidWZmZXIgPSBbXQorICAgICAgICBhc3luYyBkZWYgdGVzdDMoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGJ1ZmZlcgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgImxlZ2FjeSIpOgorICAgICAgICAgICAgICAgIGFzeW5jIGZvciBpIGluIEFzeW5jSXRlcigpOgorICAgICAgICAgICAgICAgICAgICBpZiBpWzBdID4gMjA6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGlbMF0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnd2hhdD8nKQorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnZW5kJykKKworICAgICAgICB5aWVsZGVkLCBfID0gcnVuX2FzeW5jKHRlc3QzKCkpCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgX19haXRlcl9fIHdhcyBjYWxsZWQgb25seSBvbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWl0ZXJfY2FsbHMsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeWllbGRlZCwgW2kgKiAxMDAgZm9yIGkgaW4gcmFuZ2UoMSwgMTEpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZmZXIsIFtpIGZvciBpIGluIHJhbmdlKDEsIDIxKV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyd3aGF0PycsICdlbmQnXSkKKworICAgIGRlZiB0ZXN0X2Zvcl8yKHNlbGYpOgorICAgICAgICB0dXAgPSAoMSwgMiwgMykKKyAgICAgICAgcmVmc19iZWZvcmUgPSBzeXMuZ2V0cmVmY291bnQodHVwKQorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGFzeW5jIGZvciBpIGluIHR1cDoKKyAgICAgICAgICAgICAgICBwcmludCgnbmV2ZXIgZ29pbmcgdG8gaGFwcGVuJykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgVHlwZUVycm9yLCAiYXN5bmMgZm9yJyByZXF1aXJlcyBhbiBvYmplY3QuKl9fYWl0ZXJfXy4qdHVwbGUiKToKKworICAgICAgICAgICAgcnVuX2FzeW5jKGZvbygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KHR1cCksIHJlZnNfYmVmb3JlKQorCisgICAgZGVmIHRlc3RfZm9yXzMoc2VsZik6CisgICAgICAgIGNsYXNzIEk6CisgICAgICAgICAgICBkZWYgX19haXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgYWl0ZXIgPSBJKCkKKyAgICAgICAgcmVmc19iZWZvcmUgPSBzeXMuZ2V0cmVmY291bnQoYWl0ZXIpCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgYXN5bmMgZm9yIGkgaW4gYWl0ZXI6CisgICAgICAgICAgICAgICAgcHJpbnQoJ25ldmVyIGdvaW5nIHRvIGhhcHBlbicpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAiYXN5bmMgZm9yJyByZWNlaXZlZCBhbiBpbnZhbGlkIG9iamVjdC4qX19haXRlci4qXDogSSIpOgorCisgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYWl0ZXIpLCByZWZzX2JlZm9yZSkKKworICAgIGRlZiB0ZXN0X2Zvcl80KHNlbGYpOgorICAgICAgICBjbGFzcyBJOgorICAgICAgICAgICAgZGVmIF9fYWl0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19hbmV4dF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoKQorCisgICAgICAgIGFpdGVyID0gSSgpCisgICAgICAgIHJlZnNfYmVmb3JlID0gc3lzLmdldHJlZmNvdW50KGFpdGVyKQorCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGFzeW5jIGZvciBpIGluIGFpdGVyOgorICAgICAgICAgICAgICAgIHByaW50KCduZXZlciBnb2luZyB0byBoYXBwZW4nKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgImFzeW5jIGZvcicgcmVjZWl2ZWQgYW4gaW52YWxpZCBvYmplY3QuKl9fYW5leHRfXy4qdHVwbGUiKToKKworICAgICAgICAgICAgcnVuX2FzeW5jKGZvbygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KGFpdGVyKSwgcmVmc19iZWZvcmUpCisKKyAgICBkZWYgdGVzdF9mb3JfNShzZWxmKToKKyAgICAgICAgY2xhc3MgSToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fYW5leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTIzCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgImxlZ2FjeSIpOgorICAgICAgICAgICAgICAgIGFzeW5jIGZvciBpIGluIEkoKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ25ldmVyIGdvaW5nIHRvIGhhcHBlbicpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAiYXN5bmMgZm9yJyByZWNlaXZlZCBhbiBpbnZhbGlkIG9iamVjdC4qX19hbmV4dC4qaW50Iik6CisKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKworICAgIGRlZiB0ZXN0X2Zvcl82KHNlbGYpOgorICAgICAgICBJID0gMAorCisgICAgICAgIGNsYXNzIE1hbmFnZXI6CisgICAgICAgICAgICBhc3luYyBkZWYgX19hZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBub25sb2NhbCBJCisgICAgICAgICAgICAgICAgSSArPSAxMDAwMAorCisgICAgICAgICAgICBhc3luYyBkZWYgX19hZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBub25sb2NhbCBJCisgICAgICAgICAgICAgICAgSSArPSAxMDAwMDAKKworICAgICAgICBjbGFzcyBJdGVyYWJsZToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmkgPSAwCisKKyAgICAgICAgICAgIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgYXN5bmMgZGVmIF9fYW5leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmkgPiAxMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEFzeW5jSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pCisKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMKKworICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcigpCisgICAgICAgIGl0ZXJhYmxlID0gSXRlcmFibGUoKQorICAgICAgICBtcmVmc19iZWZvcmUgPSBzeXMuZ2V0cmVmY291bnQobWFuYWdlcikKKyAgICAgICAgaXJlZnNfYmVmb3JlID0gc3lzLmdldHJlZmNvdW50KGl0ZXJhYmxlKQorCisgICAgICAgIGFzeW5jIGRlZiBtYWluKCk6CisgICAgICAgICAgICBub25sb2NhbCBJCisKKyAgICAgICAgICAgIGFzeW5jIHdpdGggbWFuYWdlcjoKKyAgICAgICAgICAgICAgICBhc3luYyBmb3IgaSBpbiBpdGVyYWJsZToKKyAgICAgICAgICAgICAgICAgICAgSSArPSAxCisgICAgICAgICAgICBJICs9IDEwMDAKKworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImVycm9yIikKKyAgICAgICAgICAgICMgVGVzdCB0aGF0IF9fYWl0ZXJfXyB0aGF0IHJldHVybnMgYW4gYXN5bmNocm9ub3VzIGl0ZXJhdG9yCisgICAgICAgICAgICAjIGRpcmVjdGx5IGRvZXMgbm90IHRocm93IGFueSB3YXJuaW5ncy4KKyAgICAgICAgICAgIHJ1bl9hc3luYyhtYWluKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSSwgMTExMDExKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KG1hbmFnZXIpLCBtcmVmc19iZWZvcmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KGl0ZXJhYmxlKSwgaXJlZnNfYmVmb3JlKQorCisgICAgICAgICMjIyMjIyMjIyMjIyMjCisKKyAgICAgICAgYXN5bmMgZGVmIG1haW4oKToKKyAgICAgICAgICAgIG5vbmxvY2FsIEkKKworICAgICAgICAgICAgYXN5bmMgd2l0aCBNYW5hZ2VyKCk6CisgICAgICAgICAgICAgICAgYXN5bmMgZm9yIGkgaW4gSXRlcmFibGUoKToKKyAgICAgICAgICAgICAgICAgICAgSSArPSAxCisgICAgICAgICAgICBJICs9IDEwMDAKKworICAgICAgICAgICAgYXN5bmMgd2l0aCBNYW5hZ2VyKCk6CisgICAgICAgICAgICAgICAgYXN5bmMgZm9yIGkgaW4gSXRlcmFibGUoKToKKyAgICAgICAgICAgICAgICAgICAgSSArPSAxCisgICAgICAgICAgICBJICs9IDEwMDAKKworICAgICAgICBydW5fYXN5bmMobWFpbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEksIDMzMzAzMykKKworICAgICAgICAjIyMjIyMjIyMjIyMjIworCisgICAgICAgIGFzeW5jIGRlZiBtYWluKCk6CisgICAgICAgICAgICBub25sb2NhbCBJCisKKyAgICAgICAgICAgIGFzeW5jIHdpdGggTWFuYWdlcigpOgorICAgICAgICAgICAgICAgIEkgKz0gMTAwCisgICAgICAgICAgICAgICAgYXN5bmMgZm9yIGkgaW4gSXRlcmFibGUoKToKKyAgICAgICAgICAgICAgICAgICAgSSArPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgSSArPSAxMDAwMDAwMAorICAgICAgICAgICAgSSArPSAxMDAwCisKKyAgICAgICAgICAgIGFzeW5jIHdpdGggTWFuYWdlcigpOgorICAgICAgICAgICAgICAgIEkgKz0gMTAwCisgICAgICAgICAgICAgICAgYXN5bmMgZm9yIGkgaW4gSXRlcmFibGUoKToKKyAgICAgICAgICAgICAgICAgICAgSSArPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgSSArPSAxMDAwMDAwMAorICAgICAgICAgICAgSSArPSAxMDAwCisKKyAgICAgICAgcnVuX2FzeW5jKG1haW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJLCAyMDU1NTI1NSkKKworICAgIGRlZiB0ZXN0X2Zvcl83KHNlbGYpOgorICAgICAgICBDTlQgPSAwCisgICAgICAgIGNsYXNzIEFJOgorICAgICAgICAgICAgYXN5bmMgZGVmIF9fYWl0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgbm9ubG9jYWwgQ05UCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAibGVnYWN5Iik6CisgICAgICAgICAgICAgICAgYXN5bmMgZm9yIGkgaW4gQUkoKToKKyAgICAgICAgICAgICAgICAgICAgQ05UICs9IDEKKyAgICAgICAgICAgIENOVCArPSAxMAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHJ1bl9hc3luYyhmb28oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDTlQsIDApCisKKyAgICBkZWYgdGVzdF9mb3JfOChzZWxmKToKKyAgICAgICAgQ05UID0gMAorICAgICAgICBjbGFzcyBBSToKKyAgICAgICAgICAgIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIG5vbmxvY2FsIENOVAorICAgICAgICAgICAgYXN5bmMgZm9yIGkgaW4gQUkoKToKKyAgICAgICAgICAgICAgICBDTlQgKz0gMQorICAgICAgICAgICAgQ05UICs9IDEwCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiZXJyb3IiKQorICAgICAgICAgICAgICAgICMgVGVzdCB0aGF0IGlmIF9fYWl0ZXJfXyByYWlzZXMgYW4gZXhjZXB0aW9uIGl0IHByb3BhZ2F0ZXMKKyAgICAgICAgICAgICAgICAjIHdpdGhvdXQgYW55IGtpbmQgb2Ygd2FybmluZy4KKyAgICAgICAgICAgICAgICBydW5fYXN5bmMoZm9vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ05ULCAwKQorCisgICAgZGVmIHRlc3RfZm9yXzkoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgY2FuIHNhZmVseSBiZSBjb252ZXJ0ZWQgaW50bworICAgICAgICAjIGFuIGV4Y2VwdGlvbiAoX19haXRlcl9fIHNob3VsZCBub3QgaGF2ZSBhIGNoYW5jZSB0byByYWlzZQorICAgICAgICAjIGEgWmVyb0RpdmlzaW9uRXJyb3IuKQorICAgICAgICBjbGFzcyBBSToKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FpdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGFzeW5jIGZvciBpIGluIEFJKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJlcnJvciIpCisgICAgICAgICAgICAgICAgcnVuX2FzeW5jKGZvbygpKQorCisgICAgZGVmIHRlc3RfZm9yXzEwKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIGNhbiBzYWZlbHkgYmUgY29udmVydGVkIGludG8KKyAgICAgICAgIyBhbiBleGNlcHRpb24uCisgICAgICAgIGNsYXNzIEFJOgorICAgICAgICAgICAgYXN5bmMgZGVmIF9fYWl0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGFzeW5jIGRlZiBmb28oKToKKyAgICAgICAgICAgIGFzeW5jIGZvciBpIGluIEFJKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJlcnJvciIpCisgICAgICAgICAgICAgICAgcnVuX2FzeW5jKGZvbygpKQorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGZ1bmMoKTogcGFzcworICAgICAgICBjb3JvID0gZnVuYygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNvcHkuY29weShjb3JvKQorCisgICAgICAgIGF3ID0gY29yby5fX2F3YWl0X18oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgY29weS5jb3B5KGF3KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXcuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBhc3luYyBkZWYgZnVuYygpOiBwYXNzCisgICAgICAgIGNvcm8gPSBmdW5jKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSk6CisgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKGNvcm8sIHByb3RvKQorCisgICAgICAgIGF3ID0gY29yby5fX2F3YWl0X18oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhhdywgcHJvdG8pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhdy5jbG9zZSgpCisKKworY2xhc3MgQ29yb0FzeW5jSU9Db21wYXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2FzeW5jaW9fMShzZWxmKToKKyAgICAgICAgIyBhc3luY2lvIGNhbm5vdCBiZSBpbXBvcnRlZCB3aGVuIFB5dGhvbiBpcyBjb21waWxlZCB3aXRob3V0IHRocmVhZAorICAgICAgICAjIHN1cHBvcnQKKyAgICAgICAgYXN5bmNpbyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnYXN5bmNpbycpCisKKyAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBidWZmZXIgPSBbXQorCisgICAgICAgIGNsYXNzIENNOgorICAgICAgICAgICAgYXN5bmMgZGVmIF9fYWVudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMC4wMSkKKyAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgYXN5bmMgZGVmIF9fYWV4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKKyAgICAgICAgICAgICAgICBhd2FpdCBhc3luY2lvLnNsZWVwKDAuMDEpCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChleGNfdHlwZS5fX25hbWVfXykKKworICAgICAgICBhc3luYyBkZWYgZigpOgorICAgICAgICAgICAgYXN5bmMgd2l0aCBDTSgpIGFzIGM6CisgICAgICAgICAgICAgICAgYXdhaXQgYXN5bmNpby5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgIHJhaXNlIE15RXhjZXB0aW9uCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCd1bnJlYWNoYWJsZScpCisKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYoKSkKKyAgICAgICAgZXhjZXB0IE15RXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZmZXIsIFsxLCAyLCAnTXlFeGNlcHRpb24nXSkKKworCitjbGFzcyBTeXNTZXRDb3JvV3JhcHBlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2V0X3dyYXBwZXJfMShzZWxmKToKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgcmV0dXJuICdzcGFtJworCisgICAgICAgIHdyYXBwZWQgPSBOb25lCisgICAgICAgIGRlZiB3cmFwKGdlbik6CisgICAgICAgICAgICBub25sb2NhbCB3cmFwcGVkCisgICAgICAgICAgICB3cmFwcGVkID0gZ2VuCisgICAgICAgICAgICByZXR1cm4gZ2VuCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lzLmdldF9jb3JvdXRpbmVfd3JhcHBlcigpKQorCisgICAgICAgIHN5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXIod3JhcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuZ2V0X2Nvcm91dGluZV93cmFwcGVyKCksIHdyYXApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBmb28oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZWQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuX2FzeW5jKGYpLCAoW10sICdzcGFtJykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc2V0X2Nvcm91dGluZV93cmFwcGVyKE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lzLmdldF9jb3JvdXRpbmVfd3JhcHBlcigpKQorCisgICAgICAgIHdyYXBwZWQgPSBOb25lCisgICAgICAgIHdpdGggc2lsZW5jZV9jb3JvX2djKCk6CisgICAgICAgICAgICBmb28oKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdyYXBwZWQpCisKKyAgICBkZWYgdGVzdF9zZXRfd3JhcHBlcl8yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzeXMuZ2V0X2Nvcm91dGluZV93cmFwcGVyKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJjYWxsYWJsZSBleHBlY3RlZCwgZ290IGludCIpOgorICAgICAgICAgICAgc3lzLnNldF9jb3JvdXRpbmVfd3JhcHBlcigxKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzeXMuZ2V0X2Nvcm91dGluZV93cmFwcGVyKCkpCisKKyAgICBkZWYgdGVzdF9zZXRfd3JhcHBlcl8zKHNlbGYpOgorICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisKKyAgICAgICAgZGVmIHdyYXBwZXIoY29ybyk6CisgICAgICAgICAgICBhc3luYyBkZWYgd3JhcChjb3JvKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgY29ybworICAgICAgICAgICAgcmV0dXJuIHdyYXAoY29ybykKKworICAgICAgICBzeXMuc2V0X2Nvcm91dGluZV93cmFwcGVyKHdyYXBwZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2lsZW5jZV9jb3JvX2djKCksIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICJjb3JvdXRpbmUgd3JhcHBlci4qXC53cmFwcGVyIGF0IDB4LiphdHRlbXB0ZWQgdG8gIgorICAgICAgICAgICAgICAgICJyZWN1cnNpdmVseSB3cmFwIC4qIHdyYXAgLioiKToKKworICAgICAgICAgICAgICAgIGZvbygpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc2V0X2Nvcm91dGluZV93cmFwcGVyKE5vbmUpCisKKyAgICBkZWYgdGVzdF9zZXRfd3JhcHBlcl80KHNlbGYpOgorICAgICAgICBAdHlwZXMuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiAnc3BhbScKKworICAgICAgICB3cmFwcGVkID0gTm9uZQorICAgICAgICBkZWYgd3JhcChnZW4pOgorICAgICAgICAgICAgbm9ubG9jYWwgd3JhcHBlZAorICAgICAgICAgICAgd3JhcHBlZCA9IGdlbgorICAgICAgICAgICAgcmV0dXJuIGdlbgorCisgICAgICAgIHN5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXIod3JhcCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCisgICAgICAgICAgICAgICAgd3JhcHBlZCwgTm9uZSwKKyAgICAgICAgICAgICAgICAiZ2VuZXJhdG9yLWJhc2VkIGNvcm91dGluZSB3YXMgd3JhcHBlZCB2aWEgIgorICAgICAgICAgICAgICAgICJzeXMuc2V0X2Nvcm91dGluZV93cmFwcGVyIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXIoTm9uZSkKKworCitjbGFzcyBDQVBJVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90cF9hd2FpdF8xKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgYXdhaXRUeXBlIGFzIGF0CisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgZnV0dXJlID0gYXQoaXRlcihbMV0pKQorICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBmdXR1cmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKS5zZW5kKE5vbmUpLCAxKQorCisgICAgZGVmIHRlc3RfdHBfYXdhaXRfMihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRwX2F3YWl0IHRvIF9fYXdhaXRfXyBtYXBwaW5nCisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBhd2FpdFR5cGUgYXMgYXQKKyAgICAgICAgZnV0dXJlID0gYXQoaXRlcihbMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZnV0dXJlLl9fYXdhaXRfXygpKSwgMSkKKworICAgIGRlZiB0ZXN0X3RwX2F3YWl0XzMoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBhd2FpdFR5cGUgYXMgYXQKKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICBmdXR1cmUgPSBhdCgxKQorICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBmdXR1cmUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgIFR5cGVFcnJvciwgIl9fYXdhaXRfXy4qcmV0dXJuZWQgbm9uLWl0ZXJhdG9yIG9mIHR5cGUgJ2ludCciKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKCkuc2VuZChOb25lKSwgMSkKKworCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CmluZGV4IGNlNWQyN2UuLmYxODk4M2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQpAQCAtMTEsNyArMTEsNyBAQAogY2xhc3MgQ1Byb2ZpbGVUZXN0KFByb2ZpbGVUZXN0KToKICAgICBwcm9maWxlcmNsYXNzID0gY1Byb2ZpbGUuUHJvZmlsZQogICAgIHByb2ZpbGVybW9kdWxlID0gY1Byb2ZpbGUKLSAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gIntidWlsdC1pbiBtZXRob2QgbWF4fSIKKyAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gIntidWlsdC1pbiBtZXRob2QgYnVpbHRpbnMubWF4fSIKIAogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgogICAgICAgICByZXR1cm4gX1Byb2ZpbGVPdXRwdXQKQEAgLTcyLDkgKzcyLDkgQEAKIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgNiAgICAwLjIzNCAgICAwLjMwMCAgcHJvZmlsZWUucHk6NTUoaGVscGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgIDAuMDc4ICAgIDAuMTAwICBwcm9maWxlZS5weTo4NChoZWxwZXIyX2luZGlyZWN0KQogcHJvZmlsZWUucHk6OTgoc3ViaGVscGVyKSAgICAgICAgICAgICAgICAgICAgICAgICA8LSAgICAgICA4ICAgIDAuMDY0ICAgIDAuMDgwICBwcm9maWxlZS5weTo4OChoZWxwZXIyKQote2J1aWx0LWluIG1ldGhvZCBleGNfaW5mb30gICAgICAgICAgICAgICAgICAgICAgICA8LSAgICAgICA0ICAgIDAuMDAwICAgIDAuMDAwICBwcm9maWxlZS5weTo3MyhoZWxwZXIxKQote2J1aWx0LWluIG1ldGhvZCBoYXNhdHRyfSAgICAgICAgICAgICAgICAgICAgICAgICA8LSAgICAgICA0ICAgIDAuMDAwICAgIDAuMDA0ICBwcm9maWxlZS5weTo3MyhoZWxwZXIxKQore2J1aWx0LWluIG1ldGhvZCBidWlsdGlucy5oYXNhdHRyfSAgICAgICAgICAgICAgICA8LSAgICAgICA0ICAgIDAuMDAwICAgIDAuMDA0ICBwcm9maWxlZS5weTo3MyhoZWxwZXIxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAgIDAuMDAwICAgIDAuMDA4ICBwcm9maWxlZS5weTo4OChoZWxwZXIyKQore2J1aWx0LWluIG1ldGhvZCBzeXMuZXhjX2luZm99ICAgICAgICAgICAgICAgICAgICA8LSAgICAgICA0ICAgIDAuMDAwICAgIDAuMDAwICBwcm9maWxlZS5weTo3MyhoZWxwZXIxKQoge21ldGhvZCAnYXBwZW5kJyBvZiAnbGlzdCcgb2JqZWN0c30gICAgICAgICAgICAgICA8LSAgICAgICA0ICAgIDAuMDAwICAgIDAuMDAwICBwcm9maWxlZS5weTo3MyhoZWxwZXIxKSIiIgogX1Byb2ZpbGVPdXRwdXRbJ3ByaW50X2NhbGxlZXMnXSA9ICIiIlwKIDxzdHJpbmc+OjEoPG1vZHVsZT4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAgMSAgICAwLjI3MCAgICAxLjAwMCAgcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpCkBAIC04NywxMiArODcsMTIgQEAKIHByb2ZpbGVlLnB5OjU1KGhlbHBlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAgNCAgICAwLjExNiAgICAwLjEyMCAgcHJvZmlsZWUucHk6NzMoaGVscGVyMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAwLjAwMCAgICAwLjE0MCAgcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgICAwLjIzNCAgICAwLjMwMCAgcHJvZmlsZWUucHk6ODgoaGVscGVyMikKLXByb2ZpbGVlLnB5OjczKGhlbHBlcjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAgNCAgICAwLjAwMCAgICAwLjAwMCAge2J1aWx0LWluIG1ldGhvZCBleGNfaW5mb30KK3Byb2ZpbGVlLnB5OjczKGhlbHBlcjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAgNCAgICAwLjAwMCAgICAwLjAwNCAge2J1aWx0LWluIG1ldGhvZCBidWlsdGlucy5oYXNhdHRyfQogcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkgICAgICAgICAgICAgICAgICAtPiAgICAgICAyICAgIDAuMDA2ICAgIDAuMDQwICBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgMC4wNzggICAgMC4xMDAgIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpCiBwcm9maWxlZS5weTo4OChoZWxwZXIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgIDggICAgMC4wNjQgICAgMC4wODAgIHByb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikKIHByb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikgICAgICAgICAgICAgICAgICAgICAgICAgLT4gICAgICAxNiAgICAwLjAxNiAgICAwLjAxNiAgcHJvZmlsZWUucHk6MTEwKF9fZ2V0YXR0cl9fKQote2J1aWx0LWluIG1ldGhvZCBoYXNhdHRyfSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDEyICAgIDAuMDEyICAgIDAuMDEyICBwcm9maWxlZS5weToxMTAoX19nZXRhdHRyX18pIiIiCit7YnVpbHQtaW4gbWV0aG9kIGJ1aWx0aW5zLmhhc2F0dHJ9ICAgICAgICAgICAgICAgIC0+ICAgICAgMTIgICAgMC4wMTIgICAgMC4wMTIgIHByb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykiIiIKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3Jhc2hlcnMucHkgYi9MaWIvdGVzdC90ZXN0X2NyYXNoZXJzLnB5CmluZGV4IDMzNmNjYmUuLjU4ZGZkMDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3Jhc2hlcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jcmFzaGVycy5weQpAQCAtOCw3ICs4LDcgQEAKIGltcG9ydCBnbG9iCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHRlc3Quc3VwcG9ydAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fZmFpbHVyZQorZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiAKIENSQVNIRVJfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJjcmFzaGVycyIpCiBDUkFTSEVSX0ZJTEVTID0gb3MucGF0aC5qb2luKENSQVNIRVJfRElSLCAiKi5weSIpCkBAIC0zMCw5ICszMCw4IEBACiAgICAgICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm5hbWUpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ3Jhc2hlclRlc3QpCitkZWYgdGVhckRvd25Nb2R1bGUoKToKICAgICB0ZXN0LnN1cHBvcnQucmVhcF9jaGlsZHJlbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkgYi9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CmluZGV4IDYyNGQ3MDIuLmU0ZjU4OTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQpAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocHcpLCBtZXRob2QudG90YWxfc2l6ZSkKIAogICAgIGRlZiB0ZXN0X21ldGhvZHMoc2VsZik6Ci0gICAgICAgICMgR3VyYW50ZWUgdGhhdCBNRVRIT0RfQ1JZUFQgaXMgdGhlIGxhc3QgbWV0aG9kIGluIGNyeXB0Lm1ldGhvZHMuCisgICAgICAgICMgR3VhcmFudGVlIHRoYXQgTUVUSE9EX0NSWVBUIGlzIHRoZSBsYXN0IG1ldGhvZCBpbiBjcnlwdC5tZXRob2RzLgogICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGNyeXB0Lm1ldGhvZHMpID49IDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3J5cHQuTUVUSE9EX0NSWVBULCBjcnlwdC5tZXRob2RzWy0xXSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jc3YucHkgYi9MaWIvdGVzdC90ZXN0X2Nzdi5weQppbmRleCA2NTQ0OWFlLi43N2MzMTVlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nzdi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Nzdi5weQpAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgY3N2IHBhY2thZ2UgdW5pdCB0ZXN0cwogCitpbXBvcnQgY29weQogaW1wb3J0IGlvCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKQEAgLTksNiArMTAsNyBAQAogZnJvbSB0ZW1wZmlsZSBpbXBvcnQgVGVtcG9yYXJ5RmlsZQogaW1wb3J0IGNzdgogaW1wb3J0IGdjCitpbXBvcnQgcGlja2xlCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogY2xhc3MgVGVzdF9Dc3YodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTg2LDYgKzE4OCwxNCBAQAogICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICdhLDEscFxcLHEnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9J1xcJywgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfaXRlcmFibGUoc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoaXRlcihbJ2EnLCAxLCAncCxxJ10pLCAnYSwxLCJwLHEiJykKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChpdGVyKFsnYScsIDEsIE5vbmVdKSwgJ2EsMSwnKQorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KGl0ZXIoW10pLCAnJykKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChpdGVyKFtOb25lXSksICciIicpCisgICAgICAgIHNlbGYuX3dyaXRlX2Vycm9yX3Rlc3QoY3N2LkVycm9yLCBpdGVyKFtOb25lXSksIHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoaXRlcihbTm9uZSwgTm9uZV0pLCAnLCcpCisKICAgICBkZWYgdGVzdF93cml0ZXJvd3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEJyb2tlbkZpbGU6CiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYnVmKToKQEAgLTQxNiw2ICs0MjYsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YucmVhZGVyLCBbXSwgcXVvdGluZyA9IC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5yZWFkZXIsIFtdLCBxdW90aW5nID0gMTAwKQogCisgICAgIyBTZWUgaXNzdWUgIzIyOTk1CisgICAgIyMgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAjIyAgICAgZm9yIG5hbWUgaW4gY3N2Lmxpc3RfZGlhbGVjdHMoKToKKyAgICAjIyAgICAgICAgIGRpYWxlY3QgPSBjc3YuZ2V0X2RpYWxlY3QobmFtZSkKKyAgICAjIyAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29weS5jb3B5LCBkaWFsZWN0KQorCisgICAgIyMgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICMjICAgICBmb3IgbmFtZSBpbiBjc3YubGlzdF9kaWFsZWN0cygpOgorICAgICMjICAgICAgICAgZGlhbGVjdCA9IGNzdi5nZXRfZGlhbGVjdChuYW1lKQorICAgICMjICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgIyMgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwaWNrbGUuZHVtcHMsIGRpYWxlY3QsIHByb3RvKQorCiBjbGFzcyBUZXN0Q3N2QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHJlYWRlckFzc2VydEVxdWFsKHNlbGYsIGlucHV0LCBleHBlY3RlZF9yZXN1bHQpOgogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoIncrIiwgbmV3bGluZT0nJykgYXMgZmlsZW9iajoKQEAgLTU3OCw2ICs2MDAsMTYgQEAKICAgICAgICAgICAgIGZpbGVvYmoucmVhZGxpbmUoKSAjIGhlYWRlcgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgIjEwLCxhYmNcclxuIikKIAorICAgIGRlZiB0ZXN0X3dyaXRlX211bHRpcGxlX2RpY3Rfcm93cyhzZWxmKToKKyAgICAgICAgZmlsZW9iaiA9IFN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVyID0gY3N2LkRpY3RXcml0ZXIoZmlsZW9iaiwgZmllbGRuYW1lcz1bImYxIiwgImYyIiwgImYzIl0pCisgICAgICAgIHdyaXRlci53cml0ZWhlYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5nZXR2YWx1ZSgpLCAiZjEsZjIsZjNcclxuIikKKyAgICAgICAgd3JpdGVyLndyaXRlcm93cyhbeyJmMSI6IDEsICJmMiI6ICJhYmMiLCAiZjMiOiAiZiJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7ImYxIjogMiwgImYyIjogNSwgImYzIjogInh5eiJ9XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImYxLGYyLGYzXHJcbjEsYWJjLGZcclxuMiw1LHh5elxyXG4iKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZmllbGRzKHNlbGYpOgogICAgICAgICBmaWxlb2JqID0gU3RyaW5nSU8oKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5EaWN0V3JpdGVyLCBmaWxlb2JqKQpAQCAtNzc2LDcgKzgwOCw3IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yKSBhcyBjbToKICAgICAgICAgICAgIG15ZGlhbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyJxdW90ZWNoYXIiIG11c3QgYmUgYW4gMS1jaGFyYWN0ZXIgc3RyaW5nJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnInF1b3RlY2hhciIgbXVzdCBiZSBhIDEtY2hhcmFjdGVyIHN0cmluZycpCiAKICAgICAgICAgbXlkaWFsZWN0LnF1b3RlY2hhciA9IDQKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IpIGFzIGNtOgpAQCAtNzk5LDEzICs4MzEsMTMgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgbXlkaWFsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnImRlbGltaXRlciIgbXVzdCBiZSBhbiAxLWNoYXJhY3RlciBzdHJpbmcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICciZGVsaW1pdGVyIiBtdXN0IGJlIGEgMS1jaGFyYWN0ZXIgc3RyaW5nJykKIAogICAgICAgICBteWRpYWxlY3QuZGVsaW1pdGVyID0gIiIKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgbXlkaWFsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnImRlbGltaXRlciIgbXVzdCBiZSBhbiAxLWNoYXJhY3RlciBzdHJpbmcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICciZGVsaW1pdGVyIiBtdXN0IGJlIGEgMS1jaGFyYWN0ZXIgc3RyaW5nJykKIAogICAgICAgICBteWRpYWxlY3QuZGVsaW1pdGVyID0gYiIsIgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvcikgYXMgY206CkBAIC0xMDY2LDExICsxMDk4LDUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksIGV4cGVjdGVkKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBtb2QgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgKltnZXRhdHRyKG1vZCwgbmFtZSkgZm9yIG5hbWUgaW4gZGlyKG1vZCkgaWYgbmFtZS5zdGFydHN3aXRoKCdUZXN0JyldCi0gICAgKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weSBiL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CmluZGV4IGJkN2Q0ZmMuLjg5N2Q3MzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CkBAIC0xMCw2ICsxMCw3IEBACiAjCiAKIGltcG9ydCBvcworaW1wb3J0IHN0cmluZwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTI0LDE5ICsyNSw0MSBAQAogCiAjIElmIGVpdGhlciBvZiB0aGVzZSBkb24ndCBleGlzdCwgc2tpcCB0aGUgdGVzdHMuCiBjdXJzZXMgPSBpbXBvcnRfbW9kdWxlKCdjdXJzZXMnKQotY3Vyc2VzLnBhbmVsID0gaW1wb3J0X21vZHVsZSgnY3Vyc2VzLnBhbmVsJykKK2ltcG9ydF9tb2R1bGUoJ2N1cnNlcy5wYW5lbCcpCitpbXBvcnRfbW9kdWxlKCdjdXJzZXMuYXNjaWknKQogCi10ZXJtID0gb3MuZW52aXJvbi5nZXQoJ1RFUk0nLCAndW5rbm93bicpCitkZWYgcmVxdWlyZXNfY3Vyc2VzX2Z1bmMobmFtZSk6CisgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjdXJzZXMsIG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBjdXJzZXMuJXMnICUgbmFtZSkKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLl9fc3Rkb3V0X18uaXNhdHR5KCksICdzeXMuX19zdGRvdXRfXyBpcyBub3QgYSB0dHknKQotQHVuaXR0ZXN0LnNraXBJZih0ZXJtID09ICd1bmtub3duJywKK3Rlcm0gPSBvcy5lbnZpcm9uLmdldCgnVEVSTScpCisKKyMgSWYgbmV3dGVybSB3YXMgc3VwcG9ydGVkIHdlIGNvdWxkIHVzZSBpdCBpbnN0ZWFkIG9mIGluaXRzY3IgYW5kIG5vdCBleGl0CitAdW5pdHRlc3Quc2tpcElmKG5vdCB0ZXJtIG9yIHRlcm0gPT0gJ3Vua25vd24nLAogICAgICAgICAgICAgICAgICAiJFRFUk09JXIsIGNhbGxpbmcgaW5pdHNjcigpIG1heSBjYXVzZSBleGl0IiAlIHRlcm0pCiBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIiwKICAgICAgICAgICAgICAgICAgImN5Z3dpbidzIGN1cnNlcyBtb3N0bHkganVzdCBoYW5ncyIpCiBjbGFzcyBUZXN0Q3Vyc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIGN1cnNlcy5zZXR1cHRlcm0oZmQ9c3lzLl9fc3Rkb3V0X18uZmlsZW5vKCkpCisgICAgICAgIGlmIG5vdCBzeXMuX19zdGRvdXRfXy5pc2F0dHkoKToKKyAgICAgICAgICAgICMgVGVtcG9yYXJ5IHNraXAgdGVzdHMgb24gbm9uLXR0eQorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3N5cy5fX3N0ZG91dF9fIGlzIG5vdCBhIHR0eScpCisgICAgICAgICAgICBjbHMudG1wID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgICAgICBmZCA9IGNscy50bXAuZmlsZW5vKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNscy50bXAgPSBOb25lCisgICAgICAgICAgICBmZCA9IHN5cy5fX3N0ZG91dF9fLmZpbGVubygpCisgICAgICAgICMgdGVzdGluZyBzZXR1cHRlcm0oKSBpbnNpZGUgaW5pdHNjci9lbmR3aW4KKyAgICAgICAgIyBjYXVzZXMgdGVybWluYWwgYnJlYWthZ2UKKyAgICAgICAgY3Vyc2VzLnNldHVwdGVybShmZD1mZCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGlmIGNscy50bXA6CisgICAgICAgICAgICBjbHMudG1wLmNsb3NlKCkKKyAgICAgICAgICAgIGRlbCBjbHMudG1wCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGlmIHZlcmJvc2U6CkBAIC01OSw3ICs4Miw4IEBACiAgICAgICAgIGZvciBtZXRoIGluIFtzdGRzY3IuYWRkY2gsIHN0ZHNjci5hZGRzdHJdOgogICAgICAgICAgICAgZm9yIGFyZ3MgaW4gWygnYScpLCAoJ2EnLCBjdXJzZXMuQV9CT0xEKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoNCw0LCAnYScpLCAoNSw1LCAnYScsIGN1cnNlcy5BX0JPTEQpXToKLSAgICAgICAgICAgICAgICBtZXRoKCphcmdzKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG1ldGg9bWV0aC5fX3F1YWxuYW1lX18sIGFyZ3M9YXJncyk6CisgICAgICAgICAgICAgICAgICAgIG1ldGgoKmFyZ3MpCiAKICAgICAgICAgZm9yIG1ldGggaW4gW3N0ZHNjci5ib3gsIHN0ZHNjci5jbGVhciwgc3Rkc2NyLmNscnRvYm90LAogICAgICAgICAgICAgICAgICAgICAgc3Rkc2NyLmNscnRvZW9sLCBzdGRzY3IuY3Vyc3luY3VwLCBzdGRzY3IuZGVsY2gsCkBAIC03MCw3ICs5NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICB3aW4ubm91dHJlZnJlc2gsIHN0ZHNjci5yZWRyYXd3aW4sIHN0ZHNjci5yZWZyZXNoLAogICAgICAgICAgICAgICAgICAgICAgc3Rkc2NyLnN0YW5kb3V0LCBzdGRzY3Iuc3RhbmRlbmQsIHN0ZHNjci5zeW5jZG93biwKICAgICAgICAgICAgICAgICAgICAgIHN0ZHNjci5zeW5jdXAsIHN0ZHNjci50b3VjaHdpbiwgc3Rkc2NyLnVudG91Y2h3aW5dOgotICAgICAgICAgICAgbWV0aCgpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtZXRoPW1ldGguX19xdWFsbmFtZV9fKToKKyAgICAgICAgICAgICAgICBtZXRoKCkKIAogICAgICAgICBzdGRzY3IuYWRkbnN0cignMTIzNCcsIDMpCiAgICAgICAgIHN0ZHNjci5hZGRuc3RyKCcxMjM0JywgMywgY3Vyc2VzLkFfQk9MRCkKQEAgLTE2Niw3ICsxOTEsNiBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX2Z1bmNzKHNlbGYpOgogICAgICAgICAiVGVzdCBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zIgotICAgICAgICBzdGRzY3IgPSBzZWxmLnN0ZHNjcgogICAgICAgICBmb3IgZnVuYyBpbiBbY3Vyc2VzLmJhdWRyYXRlLCBjdXJzZXMuYmVlcCwgY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3IsCiAgICAgICAgICAgICAgICAgICAgICBjdXJzZXMuY2JyZWFrLCBjdXJzZXMuZGVmX3Byb2dfbW9kZSwgY3Vyc2VzLmRvdXBkYXRlLAogICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLmZpbHRlciwgY3Vyc2VzLmZsYXNoLCBjdXJzZXMuZmx1c2hpbnAsCkBAIC0xNzYsNyArMjAwLDggQEAKICAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5ub3FpZmx1c2gsIGN1cnNlcy5ub3JhdywKICAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5yZXNldF9wcm9nX21vZGUsIGN1cnNlcy50ZXJtYXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICBjdXJzZXMudGVybW5hbWUsIGN1cnNlcy5lcmFzZWNoYXIsIGN1cnNlcy5nZXRzeXhdOgotICAgICAgICAgICAgZnVuYygpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmdW5jPWZ1bmMuX19xdWFsbmFtZV9fKToKKyAgICAgICAgICAgICAgICBmdW5jKCkKIAogICAgICAgICAjIEZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IG5lZWQgYXJndW1lbnRzCiAgICAgICAgIGlmIGN1cnNlcy50aWdldHN0cigiY25vcm0iKToKQEAgLTE4NCwxMSArMjA5LDEwIEBACiAgICAgICAgIGN1cnNlcy5kZWxheV9vdXRwdXQoMSkKICAgICAgICAgY3Vyc2VzLmVjaG8oKSA7IGN1cnNlcy5lY2hvKDEpCiAKLSAgICAgICAgZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQotICAgICAgICBzdGRzY3IucHV0d2luKGYpCi0gICAgICAgIGYuc2VlaygwKQotICAgICAgICBjdXJzZXMuZ2V0d2luKGYpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5zdGRzY3IucHV0d2luKGYpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIGN1cnNlcy5nZXR3aW4oZikKIAogICAgICAgICBjdXJzZXMuaGFsZmRlbGF5KDEpCiAgICAgICAgIGN1cnNlcy5pbnRyZmx1c2goMSkKQEAgLTIxMSw1MSArMjM1LDM3IEBACiAgICAgICAgIGN1cnNlcy51bmdldGNoKCdhJykKICAgICAgICAgY3Vyc2VzLnVzZV9lbnYoMSkKIAotICAgICAgICAjIEZ1bmN0aW9ucyBvbmx5IGF2YWlsYWJsZSBvbiBhIGZldyBwbGF0Zm9ybXMKLSAgICAgICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKLSAgICAgICAgICAgIGN1cnNlcy5zdGFydF9jb2xvcigpCi0gICAgICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKDIsIDEsMSkKLSAgICAgICAgICAgIGN1cnNlcy5jb2xvcl9jb250ZW50KDEpCi0gICAgICAgICAgICBjdXJzZXMuY29sb3JfcGFpcigyKQotICAgICAgICAgICAgY3Vyc2VzLnBhaXJfY29udGVudChjdXJzZXMuQ09MT1JfUEFJUlMgLSAxKQotICAgICAgICAgICAgY3Vyc2VzLnBhaXJfbnVtYmVyKDApCisgICAgIyBGdW5jdGlvbnMgb25seSBhdmFpbGFibGUgb24gYSBmZXcgcGxhdGZvcm1zCisgICAgZGVmIHRlc3RfY29sb3JzX2Z1bmNzKHNlbGYpOgorICAgICAgICBpZiBub3QgY3Vyc2VzLmhhc19jb2xvcnMoKToKKyAgICAgICAgICAgIHNlbGYuc2tpcCgncmVxdWlyZXMgY29sb3JzIHN1cHBvcnQnKQorICAgICAgICBjdXJzZXMuc3RhcnRfY29sb3IoKQorICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKDIsIDEsMSkKKyAgICAgICAgY3Vyc2VzLmNvbG9yX2NvbnRlbnQoMSkKKyAgICAgICAgY3Vyc2VzLmNvbG9yX3BhaXIoMikKKyAgICAgICAgY3Vyc2VzLnBhaXJfY29udGVudChjdXJzZXMuQ09MT1JfUEFJUlMgLSAxKQorICAgICAgICBjdXJzZXMucGFpcl9udW1iZXIoMCkKIAotICAgICAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICd1c2VfZGVmYXVsdF9jb2xvcnMnKToKLSAgICAgICAgICAgICAgICBjdXJzZXMudXNlX2RlZmF1bHRfY29sb3JzKCkKKyAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICd1c2VfZGVmYXVsdF9jb2xvcnMnKToKKyAgICAgICAgICAgIGN1cnNlcy51c2VfZGVmYXVsdF9jb2xvcnMoKQogCi0gICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAna2V5bmFtZScpOgotICAgICAgICAgICAgY3Vyc2VzLmtleW5hbWUoMTMpCisgICAgQHJlcXVpcmVzX2N1cnNlc19mdW5jKCdrZXluYW1lJykKKyAgICBkZWYgdGVzdF9rZXluYW1lKHNlbGYpOgorICAgICAgICBjdXJzZXMua2V5bmFtZSgxMykKIAotICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2hhc19rZXknKToKLSAgICAgICAgICAgIGN1cnNlcy5oYXNfa2V5KDEzKQorICAgIEByZXF1aXJlc19jdXJzZXNfZnVuYygnaGFzX2tleScpCisgICAgZGVmIHRlc3RfaGFzX2tleShzZWxmKToKKyAgICAgICAgY3Vyc2VzLmhhc19rZXkoMTMpCiAKLSAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICdnZXRtb3VzZScpOgotICAgICAgICAgICAgKGF2YWlsbWFzaywgb2xkbWFzaykgPSBjdXJzZXMubW91c2VtYXNrKGN1cnNlcy5CVVRUT04xX1BSRVNTRUQpCi0gICAgICAgICAgICAjIGF2YWlsbWFzayBpbmRpY2F0ZXMgdGhhdCBtb3VzZSBzdHVmZiBub3QgYXZhaWxhYmxlLgotICAgICAgICAgICAgaWYgYXZhaWxtYXNrICE9IDA6Ci0gICAgICAgICAgICAgICAgY3Vyc2VzLm1vdXNlaW50ZXJ2YWwoMTApCi0gICAgICAgICAgICAgICAgIyBqdXN0IHZlcmlmeSB0aGVzZSBkb24ndCBjYXVzZSBlcnJvcnMKLSAgICAgICAgICAgICAgICBjdXJzZXMudW5nZXRtb3VzZSgwLCAwLCAwLCAwLCBjdXJzZXMuQlVUVE9OMV9QUkVTU0VEKQotICAgICAgICAgICAgICAgIG0gPSBjdXJzZXMuZ2V0bW91c2UoKQotCi0gICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnaXNfdGVybV9yZXNpemVkJyk6Ci0gICAgICAgICAgICBjdXJzZXMuaXNfdGVybV9yZXNpemVkKCpzdGRzY3IuZ2V0bWF4eXgoKSkKLSAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemV0ZXJtJyk6Ci0gICAgICAgICAgICBjdXJzZXMucmVzaXpldGVybSgqc3Rkc2NyLmdldG1heHl4KCkpCi0gICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAncmVzaXplX3Rlcm0nKToKLSAgICAgICAgICAgIGN1cnNlcy5yZXNpemVfdGVybSgqc3Rkc2NyLmdldG1heHl4KCkpCi0KLSAgICBkZWYgdGVzdF91bmN0cmwoc2VsZik6Ci0gICAgICAgIGZyb20gY3Vyc2VzIGltcG9ydCBhc2NpaQotICAgICAgICBmb3IgY2gsIGV4cGVjdGVkIGluIFsoJ2EnLCAnYScpLCAoJ0EnLCAnQScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzsnLCAnOycpLCAoJyAnLCAnICcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4N2YnLCAnXj8nKSwgKCdcbicsICdeSicpLCAoJ1wwJywgJ15AJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWV0YS1iaXQgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4OGEnLCAnIV5KJyksICgnXHhjMScsICchQScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaS51bmN0cmwoY2gpLCBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnNlcy51bmN0cmwgZmFpbHMgb24gY2hhcmFjdGVyICVyJyAlIGNoKQotCisgICAgQHJlcXVpcmVzX2N1cnNlc19mdW5jKCdnZXRtb3VzZScpCisgICAgZGVmIHRlc3RfZ2V0bW91c2Uoc2VsZik6CisgICAgICAgIChhdmFpbG1hc2ssIG9sZG1hc2spID0gY3Vyc2VzLm1vdXNlbWFzayhjdXJzZXMuQlVUVE9OMV9QUkVTU0VEKQorICAgICAgICBpZiBhdmFpbG1hc2sgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuc2tpcCgnbW91c2Ugc3R1ZmYgbm90IGF2YWlsYWJsZScpCisgICAgICAgIGN1cnNlcy5tb3VzZWludGVydmFsKDEwKQorICAgICAgICAjIGp1c3QgdmVyaWZ5IHRoZXNlIGRvbid0IGNhdXNlIGVycm9ycworICAgICAgICBjdXJzZXMudW5nZXRtb3VzZSgwLCAwLCAwLCAwLCBjdXJzZXMuQlVUVE9OMV9QUkVTU0VEKQorICAgICAgICBtID0gY3Vyc2VzLmdldG1vdXNlKCkKIAogICAgIGRlZiB0ZXN0X3VzZXJwdHJfd2l0aG91dF9zZXQoc2VsZik6CiAgICAgICAgIHcgPSBjdXJzZXMubmV3d2luKDEwLCAxMCkKQEAgLTI4NSw5ICsyOTUsMjEgQEAKICAgICAgICAgcGFuZWwuc2V0X3VzZXJwdHIoQSgpKQogICAgICAgICBwYW5lbC5zZXRfdXNlcnB0cihOb25lKQogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjdXJzZXMsICdyZXNpemV0ZXJtJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzaXpldGVybSBub3QgYXZhaWxhYmxlJykKKyAgICBkZWYgdGVzdF9uZXdfY3Vyc2VzX3BhbmVsKHNlbGYpOgorICAgICAgICBwYW5lbCA9IGN1cnNlcy5wYW5lbC5uZXdfcGFuZWwoc2VsZi5zdGRzY3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZShwYW5lbCkpCisKKyAgICBAcmVxdWlyZXNfY3Vyc2VzX2Z1bmMoJ2lzX3Rlcm1fcmVzaXplZCcpCisgICAgZGVmIHRlc3RfaXNfdGVybV9yZXNpemVkKHNlbGYpOgorICAgICAgICBjdXJzZXMuaXNfdGVybV9yZXNpemVkKCpzZWxmLnN0ZHNjci5nZXRtYXh5eCgpKQorCisgICAgQHJlcXVpcmVzX2N1cnNlc19mdW5jKCdyZXNpemVfdGVybScpCiAgICAgZGVmIHRlc3RfcmVzaXplX3Rlcm0oc2VsZik6CisgICAgICAgIGN1cnNlcy5yZXNpemVfdGVybSgqc2VsZi5zdGRzY3IuZ2V0bWF4eXgoKSkKKworICAgIEByZXF1aXJlc19jdXJzZXNfZnVuYygncmVzaXpldGVybScpCisgICAgZGVmIHRlc3RfcmVzaXpldGVybShzZWxmKToKKyAgICAgICAgc3Rkc2NyID0gc2VsZi5zdGRzY3IKICAgICAgICAgbGluZXMsIGNvbHMgPSBjdXJzZXMuTElORVMsIGN1cnNlcy5DT0xTCiAgICAgICAgIG5ld19saW5lcyA9IGxpbmVzIC0gMQogICAgICAgICBuZXdfY29scyA9IGNvbHMgKyAxCkBAIC0zMDAsOCArMzIyLDcgQEAKICAgICAgICAgY3Vyc2VzLnVuZ2V0Y2goMTAyNSkKICAgICAgICAgc2VsZi5zdGRzY3IuZ2V0a2V5KCkKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY3Vyc2VzLCAndW5nZXRfd2NoJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZ2V0X3djaCBub3QgYXZhaWxhYmxlJykKKyAgICBAcmVxdWlyZXNfY3Vyc2VzX2Z1bmMoJ3VuZ2V0X3djaCcpCiAgICAgZGVmIHRlc3RfdW5nZXRfd2NoKHNlbGYpOgogICAgICAgICBzdGRzY3IgPSBzZWxmLnN0ZHNjcgogICAgICAgICBlbmNvZGluZyA9IHN0ZHNjci5lbmNvZGluZwpAQCAtMzI2LDE3ICszNDcsMTQgQEAKICAgICBkZWYgdGVzdF9pc3N1ZTEwNTcwKHNlbGYpOgogICAgICAgICBiID0gY3Vyc2VzLnRwYXJtKGN1cnNlcy50aWdldHN0cigiY3VwIiksIDUsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShiKSwgYnl0ZXMpCi0gICAgICAgIGN1cnNlcy5wdXRwKGIpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKICAgICAgICAgc3Rkc2NyID0gc2VsZi5zdGRzY3IKICAgICAgICAgaW1wb3J0IGNvZGVjcwogICAgICAgICBlbmNvZGluZyA9IHN0ZHNjci5lbmNvZGluZwogICAgICAgICBjb2RlY3MubG9va3VwKGVuY29kaW5nKQotCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIHN0ZHNjci5lbmNvZGluZyA9IDEwCi0KICAgICAgICAgc3Rkc2NyLmVuY29kaW5nID0gZW5jb2RpbmcKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgZGVsIHN0ZHNjci5lbmNvZGluZwpAQCAtMzY3LDggKzM4NSw4NiBAQAogICAgICAgICAjIGJlIHJlYXNvbmFibHkgY2VydGFpbiB0aGUgZ2VuZXJhdGVkIHBhcnNpbmcgY29kZSB3aWxsIGJlCiAgICAgICAgICMgY29ycmVjdCB0b28uCiAgICAgICAgIGh1bWFuX3JlYWRhYmxlX3NpZ25hdHVyZSA9IHN0ZHNjci5hZGRjaC5fX2RvY19fLnNwbGl0KCJcbiIpWzBdCi0gICAgICAgIG9mZnNldCA9IGh1bWFuX3JlYWRhYmxlX3NpZ25hdHVyZS5maW5kKCJbeSwgeCxdIikKLSAgICAgICAgYXNzZXJ0IG9mZnNldCA+PSAwLCAiIgorICAgICAgICBzZWxmLmFzc2VydEluKCJbeSwgeCxdIiwgaHVtYW5fcmVhZGFibGVfc2lnbmF0dXJlKQorCisKK2NsYXNzIE1pc2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91cGRhdGVfbGluZXNfY29scyhzZWxmKToKKyAgICAgICAgIyB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgdGVzdCB0aGF0IExJTkVTIGFuZCBDT0xTIGFyZSB1cGRhdGVkLAorICAgICAgICAjIGJlY2F1c2Ugd2UgY2FuJ3QgYXV0b21hdGUgY2hhbmdpbmcgdGhlbS4gU2VlIElzc3VlICM0MjU0IGZvcgorICAgICAgICAjIGEgbWFudWFsIHRlc3Qgc2NyaXB0LiBXZSBjYW4gb25seSB0ZXN0IHRoYXQgdGhlIGZ1bmN0aW9uCisgICAgICAgICMgY2FuIGJlIGNhbGxlZC4KKyAgICAgICAgY3Vyc2VzLnVwZGF0ZV9saW5lc19jb2xzKCkKKworCitjbGFzcyBUZXN0QXNjaWkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29udHJvbG5hbWVzKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBjdXJzZXMuYXNjaWkuY29udHJvbG5hbWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoY3Vyc2VzLmFzY2lpLCBuYW1lKSwgbmFtZSkKKworICAgIGRlZiB0ZXN0X2N0eXBlcyhzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrKGZ1bmMsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNoPWMsIGZ1bmM9ZnVuYyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKGkpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYyksIGV4cGVjdGVkKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICBjID0gY2hyKGkpCisgICAgICAgICAgICBiID0gYnl0ZXMoW2ldKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzYWxudW0sIGIuaXNhbG51bSgpKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzYWxwaGEsIGIuaXNhbHBoYSgpKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzZGlnaXQsIGIuaXNkaWdpdCgpKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzbG93ZXIsIGIuaXNsb3dlcigpKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzc3BhY2UsIGIuaXNzcGFjZSgpKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzdXBwZXIsIGIuaXN1cHBlcigpKQorCisgICAgICAgICAgICBjaGVjayhjdXJzZXMuYXNjaWkuaXNhc2NpaSwgaSA8IDEyOCkKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc21ldGEsIGkgPj0gMTI4KQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzY3RybCwgaSA8IDMyKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzY250cmwsIGkgPCAzMiBvciBpID09IDEyNykKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc2JsYW5rLCBjIGluICcgXHQnKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzZ3JhcGgsIDMyIDwgaSA8PSAxMjYpCisgICAgICAgICAgICBjaGVjayhjdXJzZXMuYXNjaWkuaXNwcmludCwgMzIgPD0gaSA8PSAxMjYpCisgICAgICAgICAgICBjaGVjayhjdXJzZXMuYXNjaWkuaXNwdW5jdCwgYyBpbiBzdHJpbmcucHVuY3R1YXRpb24pCisgICAgICAgICAgICBjaGVjayhjdXJzZXMuYXNjaWkuaXN4ZGlnaXQsIGMgaW4gc3RyaW5nLmhleGRpZ2l0cykKKworICAgIGRlZiB0ZXN0X2FzY2lpKHNlbGYpOgorICAgICAgICBhc2NpaSA9IGN1cnNlcy5hc2NpaS5hc2NpaQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKCdceGMxJyksICdBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaSgnQScpLCAnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkob3JkKCdceGMxJykpLCBvcmQoJ0EnKSkKKworICAgIGRlZiB0ZXN0X2N0cmwoc2VsZik6CisgICAgICAgIGN0cmwgPSBjdXJzZXMuYXNjaWkuY3RybAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0cmwoJ0onKSwgJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHJsKCdcbicpLCAnXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0cmwoJ0AnKSwgJ1wwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHJsKG9yZCgnSicpKSwgb3JkKCdcbicpKQorCisgICAgZGVmIHRlc3RfYWx0KHNlbGYpOgorICAgICAgICBhbHQgPSBjdXJzZXMuYXNjaWkuYWx0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWx0KCdcbicpLCAnXHg4YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWx0KCdBJyksICdceGMxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbHQob3JkKCdBJykpLCAweGMxKQorCisgICAgZGVmIHRlc3RfdW5jdHJsKHNlbGYpOgorICAgICAgICB1bmN0cmwgPSBjdXJzZXMuYXNjaWkudW5jdHJsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jdHJsKCdhJyksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmN0cmwoJ0EnKSwgJ0EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuY3RybCgnOycpLCAnOycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jdHJsKCcgJyksICcgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmN0cmwoJ1x4N2YnKSwgJ14/JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmN0cmwoJ1xuJyksICdeSicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jdHJsKCdcMCcpLCAnXkAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuY3RybChvcmQoJ0EnKSksICdBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmN0cmwob3JkKCdcbicpKSwgJ15KJykKKyAgICAgICAgIyBNZXRhLWJpdCBjaGFyYWN0ZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jdHJsKCdceDhhJyksICchXkonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuY3RybCgnXHhjMScpLCAnIUEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuY3RybChvcmQoJ1x4OGEnKSksICchXkonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuY3RybChvcmQoJ1x4YzEnKSksICchQScpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X2RhdGV0aW1lLnB5CmluZGV4IGQ5ZGRiMzIuLjJkNGViNTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYXRldGltZS5weQpAQCAtMSwyMCArMSwyMCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCisKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfZnJlc2hfbW9kdWxlLCBydW5fdW5pdHRlc3QKIAogVEVTVFMgPSAndGVzdC5kYXRldGltZXRlc3RlcicKIAotIyBYWFg6IGltcG9ydF9mcmVzaF9tb2R1bGUoKSBpcyBzdXBwb3NlZCB0byBsZWF2ZSBzeXMubW9kdWxlIGNhY2hlIHVudG91Y2hlZCwKLSMgWFhYOiBidXQgaXQgZG9lcyBub3QsIHNvIHdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSBpdCBvdXJzZWx2ZXMuCi1zYXZlX3N5c19tb2R1bGVzID0gc3lzLm1vZHVsZXMuY29weSgpCiB0cnk6CiAgICAgcHVyZV90ZXN0cyA9IGltcG9ydF9mcmVzaF9tb2R1bGUoVEVTVFMsIGZyZXNoPVsnZGF0ZXRpbWUnLCAnX3N0cnB0aW1lJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tlZD1bJ19kYXRldGltZSddKQogICAgIGZhc3RfdGVzdHMgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKFRFU1RTLCBmcmVzaD1bJ2RhdGV0aW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfZGF0ZXRpbWUnLCAnX3N0cnB0aW1lJ10pCiBmaW5hbGx5OgotICAgIHN5cy5tb2R1bGVzLmNsZWFyKCkKLSAgICBzeXMubW9kdWxlcy51cGRhdGUoc2F2ZV9zeXNfbW9kdWxlcykKKyAgICAjIFhYWDogaW1wb3J0X2ZyZXNoX21vZHVsZSgpIGlzIHN1cHBvc2VkIHRvIGxlYXZlIHN5cy5tb2R1bGUgY2FjaGUgdW50b3VjaGVkLAorICAgICMgWFhYOiBidXQgaXQgZG9lcyBub3QsIHNvIHdlIGhhdmUgdG8gY2xlYW51cCBvdXJzZWx2ZXMuCisgICAgZm9yIG1vZG5hbWUgaW4gWydkYXRldGltZScsICdfZGF0ZXRpbWUnLCAnX3N0cnB0aW1lJ106CisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChtb2RuYW1lLCBOb25lKQogdGVzdF9tb2R1bGVzID0gW3B1cmVfdGVzdHMsIGZhc3RfdGVzdHNdCiB0ZXN0X3N1ZmZpeGVzID0gWyJfUHVyZSIsICJfRmFzdCJdCiAjIFhYWChnYikgRmlyc3QgcnVuIGFsbCB0aGUgX1B1cmUgdGVzdHMsIHRoZW4gYWxsIHRoZSBfRmFzdCB0ZXN0cy4gIFlvdSBtaWdodApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKaW5kZXggZGM4OGNhNi4uZmY2M2M4OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CkBAIC0yMTcsNiArMjE3LDE0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpCiAKKyAgICBkZWYgdGVzdF9jcmVhdGVfbmV3KHNlbGYpOgorICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICduJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBrIGluIHNlbGYuX2RpY3Q6CisgICAgICAgICAgICAgICAgZltrXSA9IHNlbGYuX2RpY3Rba10KKworICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICduJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5rZXlzKCksIFtdKQorCiAgICAgZGVmIHRlc3RfZXZhbChzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKF9mbmFtZSArICcuZGlyJywgJ3cnKSBhcyBzdHJlYW06CiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoInN0cihwcmludCgnSGFja2VkIScpKSwgMFxuIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQppbmRleCBhMTc4ZjZmLi4xYWEwYmY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CkBAIC0zMywxMiArMzMsMTMgQEAKIGltcG9ydCBudW1iZXJzCiBpbXBvcnQgbG9jYWxlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgcnVuX2RvY3Rlc3QsIGlzX3Jlc291cmNlX2VuYWJsZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzX0lFRUVfNzU0KQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlc19JRUVFXzc1NCwgcmVxdWlyZXNfZG9jc3RyaW5ncykKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoY2hlY2tfd2FybmluZ3MsIGltcG9ydF9mcmVzaF9tb2R1bGUsIFRlc3RGYWlsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl93aXRoX2xvY2FsZSwgY3B5dGhvbl9vbmx5KQogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHRpbWUKIGltcG9ydCB3YXJuaW5ncworaW1wb3J0IGluc3BlY3QKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0yNDkwLDcgKzI0OTEsOCBAQAogICAgICAgICBEZWNpbWFsID0gc2VsZi5kZWNpbWFsLkRlY2ltYWwKIAogICAgICAgICBjbGFzcyBNeURlY2ltYWwoRGVjaW1hbCk6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgXyk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0gJ3knCiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTXlEZWNpbWFsLCBEZWNpbWFsKSkKIApAQCAtMjQ5OCw2ICsyNTAwLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHIpLCBNeURlY2ltYWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHIpLAogICAgICAgICAgICAgICAgICcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIueCwgJ3knKQorCiAgICAgICAgIGJpZ2ludCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTXlEZWNpbWFsLmZyb21fZmxvYXQoYmlnaW50KSwgTXlEZWNpbWFsKGJpZ2ludCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShNeURlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnbmFuJykpLmlzX3FuYW4oKSkKQEAgLTQxNzIsMTEgKzQxNzYsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoUC5IQVZFX1RIUkVBRFMgaXMgVHJ1ZSBvciBQLkhBVkVfVEhSRUFEUyBpcyBGYWxzZSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX192ZXJzaW9uX18sIFAuX192ZXJzaW9uX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX2xpYm1wZGVjX3ZlcnNpb25fXywgUC5fX2xpYm1wZGVjX3ZlcnNpb25fXykKIAotICAgICAgICB4ID0gZGlyKEMpCi0gICAgICAgIHkgPSBbcyBmb3IgcyBpbiBkaXIoUCkgaWYgJ19fJyBpbiBzIG9yIG5vdCBzLnN0YXJ0c3dpdGgoJ18nKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoeCkgLSBzZXQoeSksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihDKSwgZGlyKFApKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9hdHRyaWJ1dGVzKHNlbGYpOgogCkBAIC00NDU1LDE4ICs0NDU2LDYgQEAKIGNsYXNzIFB5RnVuY3Rpb25hbGl0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiRXh0cmEgZnVuY3Rpb25hbGl0eSBpbiBkZWNpbWFsLnB5IiIiCiAKLSAgICBkZWYgdGVzdF9weV9xdWFudGl6ZV93YXRjaGV4cChzZWxmKToKLSAgICAgICAgIyB3YXRjaGV4cCBmdW5jdGlvbmFsaXR5Ci0gICAgICAgIERlY2ltYWwgPSBQLkRlY2ltYWwKLSAgICAgICAgbG9jYWxjb250ZXh0ID0gUC5sb2NhbGNvbnRleHQKLQotICAgICAgICB3aXRoIGxvY2FsY29udGV4dCgpIGFzIGM6Ci0gICAgICAgICAgICBjLnByZWMgPSAxCi0gICAgICAgICAgICBjLkVtYXggPSAxCi0gICAgICAgICAgICBjLkVtaW4gPSAtMQotICAgICAgICAgICAgeCA9IERlY2ltYWwoOTk5OTkpLnF1YW50aXplKERlY2ltYWwoIjFlMyIpLCB3YXRjaGV4cD1GYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgRGVjaW1hbCgnMS4wMEUrNScpKQotCiAgICAgZGVmIHRlc3RfcHlfYWx0ZXJuYXRlX2Zvcm1hdHRpbmcoc2VsZik6CiAgICAgICAgICMgdHJpcGxlcyBnaXZpbmcgYSBmb3JtYXQsIGEgRGVjaW1hbCwgYW5kIHRoZSBleHBlY3RlZCByZXN1bHQKICAgICAgICAgRGVjaW1hbCA9IFAuRGVjaW1hbApAQCAtNTQwOSw2ICs1Mzk4LDE3MSBAQAogICAgICAgICAgICAgeSA9IERlY2ltYWwoMTAqKig5KjI1KSkuX19zaXplb2ZfXygpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgrNCkKIAorICAgIGRlZiB0ZXN0X2ludGVybmFsX3VzZV9vZl9vdmVycmlkZGVuX21ldGhvZHMoc2VsZik6CisgICAgICAgIERlY2ltYWwgPSBDLkRlY2ltYWwKKworICAgICAgICAjIFVuc291bmQgc3VidHlwaW5nCisgICAgICAgIGNsYXNzIFgoZmxvYXQpOgorICAgICAgICAgICAgZGVmIGFzX2ludGVnZXJfcmF0aW8oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIGRlZiBfX2Fic19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2xhc3MgWShmbG9hdCk6CisgICAgICAgICAgICBkZWYgX19hYnNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWzFdKjIwMAorCisgICAgICAgIGNsYXNzIEkoaW50KToKKyAgICAgICAgICAgIGRlZiBiaXRfbGVuZ3RoKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBbMV0qMjAwCisKKyAgICAgICAgY2xhc3MgWihmbG9hdCk6CisgICAgICAgICAgICBkZWYgYXNfaW50ZWdlcl9yYXRpbyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKEkoMSksIEkoMSkpCisgICAgICAgICAgICBkZWYgX19hYnNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGZvciBjbHMgaW4gWCwgWSwgWjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbC5mcm9tX2Zsb2F0KGNscygxMDEuMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsLmZyb21fZmxvYXQoMTAxLjEpKQorCitAcmVxdWlyZXNfZG9jc3RyaW5ncworQHVuaXR0ZXN0LnNraXBVbmxlc3MoQywgInRlc3QgcmVxdWlyZXMgQyB2ZXJzaW9uIikKK2NsYXNzIFNpZ25hdHVyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkZ1bmN0aW9uIHNpZ25hdHVyZXMiIiIKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBmb3IgYXR0ciBpbiBkaXIoUCk6CisgICAgICAgICAgICBpZiBhdHRyLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcF9mdW5jID0gZ2V0YXR0cihQLCBhdHRyKQorICAgICAgICAgICAgY19mdW5jID0gZ2V0YXR0cihDLCBhdHRyKQorICAgICAgICAgICAgaWYgKGF0dHIgPT0gJ0RlY2ltYWwnIG9yIGF0dHIgPT0gJ0NvbnRleHQnIG9yCisgICAgICAgICAgICAgICAgaW5zcGVjdC5pc2Z1bmN0aW9uKHBfZnVuYykpOgorICAgICAgICAgICAgICAgIHBfc2lnID0gaW5zcGVjdC5zaWduYXR1cmUocF9mdW5jKQorICAgICAgICAgICAgICAgIGNfc2lnID0gaW5zcGVjdC5zaWduYXR1cmUoY19mdW5jKQorCisgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXIgbmFtZXM6CisgICAgICAgICAgICAgICAgY19uYW1lcyA9IGxpc3QoY19zaWcucGFyYW1ldGVycy5rZXlzKCkpCisgICAgICAgICAgICAgICAgcF9uYW1lcyA9IFt4IGZvciB4IGluIHBfc2lnLnBhcmFtZXRlcnMua2V5cygpIGlmIG5vdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5zdGFydHN3aXRoKCdfJyldCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfbmFtZXMsIHBfbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9InBhcmFtZXRlciBuYW1lIG1pc21hdGNoIGluICVzIiAlIHBfZnVuYykKKworICAgICAgICAgICAgICAgIGNfa2luZCA9IFt4LmtpbmQgZm9yIHggaW4gY19zaWcucGFyYW1ldGVycy52YWx1ZXMoKV0KKyAgICAgICAgICAgICAgICBwX2tpbmQgPSBbeFsxXS5raW5kIGZvciB4IGluIHBfc2lnLnBhcmFtZXRlcnMuaXRlbXMoKSBpZiBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeFswXS5zdGFydHN3aXRoKCdfJyldCisKKyAgICAgICAgICAgICAgICAjIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgaWYgYXR0ciAhPSAnc2V0Y29udGV4dCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19raW5kLCBwX2tpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJwYXJhbWV0ZXIga2luZCBtaXNtYXRjaCBpbiAlcyIgJSBwX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9pbnNwZWN0X3R5cGVzKHNlbGYpOgorCisgICAgICAgIFBPUyA9IGluc3BlY3QuX1BhcmFtZXRlcktpbmQuUE9TSVRJT05BTF9PTkxZCisgICAgICAgIFBPU19LV0QgPSBpbnNwZWN0Ll9QYXJhbWV0ZXJLaW5kLlBPU0lUSU9OQUxfT1JfS0VZV09SRAorCisgICAgICAgICMgVHlwZSBoZXVyaXN0aWMgKHR5cGUgYW5ub3RhdGlvbnMgd291bGQgaGVscCEpOgorICAgICAgICBwZGljdCA9IHtDOiB7J290aGVyJzogQy5EZWNpbWFsKDEpLAorICAgICAgICAgICAgICAgICAgICAgJ3RoaXJkJzogQy5EZWNpbWFsKDEpLAorICAgICAgICAgICAgICAgICAgICAgJ3gnOiBDLkRlY2ltYWwoMSksCisgICAgICAgICAgICAgICAgICAgICAneSc6IEMuRGVjaW1hbCgxKSwKKyAgICAgICAgICAgICAgICAgICAgICd6JzogQy5EZWNpbWFsKDEpLAorICAgICAgICAgICAgICAgICAgICAgJ2EnOiBDLkRlY2ltYWwoMSksCisgICAgICAgICAgICAgICAgICAgICAnYic6IEMuRGVjaW1hbCgxKSwKKyAgICAgICAgICAgICAgICAgICAgICdjJzogQy5EZWNpbWFsKDEpLAorICAgICAgICAgICAgICAgICAgICAgJ2V4cCc6IEMuRGVjaW1hbCgxKSwKKyAgICAgICAgICAgICAgICAgICAgICdtb2R1bG8nOiBDLkRlY2ltYWwoMSksCisgICAgICAgICAgICAgICAgICAgICAnbnVtJzogIjEiLAorICAgICAgICAgICAgICAgICAgICAgJ2YnOiAxLjAsCisgICAgICAgICAgICAgICAgICAgICAncm91bmRpbmcnOiBDLlJPVU5EX0hBTEZfVVAsCisgICAgICAgICAgICAgICAgICAgICAnY29udGV4dCc6IEMuZ2V0Y29udGV4dCgpfSwKKyAgICAgICAgICAgICAgICAgUDogeydvdGhlcic6IFAuRGVjaW1hbCgxKSwKKyAgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IFAuRGVjaW1hbCgxKSwKKyAgICAgICAgICAgICAgICAgICAgICdhJzogUC5EZWNpbWFsKDEpLAorICAgICAgICAgICAgICAgICAgICAgJ2InOiBQLkRlY2ltYWwoMSksCisgICAgICAgICAgICAgICAgICAgICAnYyc6IFAuRGVjaW1hbCgxKSwKKyAgICAgICAgICAgICAgICAgICAgICdleHAnOiBQLkRlY2ltYWwoMSksCisgICAgICAgICAgICAgICAgICAgICAnbW9kdWxvJzogUC5EZWNpbWFsKDEpLAorICAgICAgICAgICAgICAgICAgICAgJ251bSc6ICIxIiwKKyAgICAgICAgICAgICAgICAgICAgICdmJzogMS4wLAorICAgICAgICAgICAgICAgICAgICAgJ3JvdW5kaW5nJzogUC5ST1VORF9IQUxGX1VQLAorICAgICAgICAgICAgICAgICAgICAgJ2NvbnRleHQnOiBQLmdldGNvbnRleHQoKX19CisKKyAgICAgICAgZGVmIG1rYXJncyhtb2R1bGUsIHNpZyk6CisgICAgICAgICAgICBhcmdzID0gW10KKyAgICAgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgICAgICBmb3IgbmFtZSwgcGFyYW0gaW4gc2lnLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdzZWxmJzogY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbS5raW5kID09IFBPUzoKKyAgICAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQocGRpY3RbbW9kdWxlXVtuYW1lXSkKKyAgICAgICAgICAgICAgICBlbGlmIHBhcmFtLmtpbmQgPT0gUE9TX0tXRDoKKyAgICAgICAgICAgICAgICAgICAga3dhcmdzW25hbWVdID0gcGRpY3RbbW9kdWxlXVtuYW1lXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoInVuZXhwZWN0ZWQgcGFyYW1ldGVyIGtpbmQiKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3MsIGt3YXJncworCisgICAgICAgIGRlZiB0cihzKToKKyAgICAgICAgICAgICIiIlRoZSBDIENvbnRleHQgZG9jc3RyaW5ncyB1c2UgJ3gnIGluIG9yZGVyIHRvIHByZXZlbnQgY29uZnVzaW9uCisgICAgICAgICAgICAgICB3aXRoIHRoZSBhcnRpY2xlICdhJyBpbiB0aGUgZGVzY3JpcHRpb25zLiIiIgorICAgICAgICAgICAgaWYgcyA9PSAneCc6IHJldHVybiAnYScKKyAgICAgICAgICAgIGlmIHMgPT0gJ3knOiByZXR1cm4gJ2InCisgICAgICAgICAgICBpZiBzID09ICd6JzogcmV0dXJuICdjJworICAgICAgICAgICAgcmV0dXJuIHMKKworICAgICAgICBkZWYgZG9pdCh0eSk6CisgICAgICAgICAgICBwX3R5cGUgPSBnZXRhdHRyKFAsIHR5KQorICAgICAgICAgICAgY190eXBlID0gZ2V0YXR0cihDLCB0eSkKKyAgICAgICAgICAgIGZvciBhdHRyIGluIGRpcihwX3R5cGUpOgorICAgICAgICAgICAgICAgIGlmIGF0dHIuc3RhcnRzd2l0aCgnXycpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBfZnVuYyA9IGdldGF0dHIocF90eXBlLCBhdHRyKQorICAgICAgICAgICAgICAgIGNfZnVuYyA9IGdldGF0dHIoY190eXBlLCBhdHRyKQorICAgICAgICAgICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihwX2Z1bmMpOgorICAgICAgICAgICAgICAgICAgICBwX3NpZyA9IGluc3BlY3Quc2lnbmF0dXJlKHBfZnVuYykKKyAgICAgICAgICAgICAgICAgICAgY19zaWcgPSBpbnNwZWN0LnNpZ25hdHVyZShjX2Z1bmMpCisKKyAgICAgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXIgbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHBfbmFtZXMgPSBsaXN0KHBfc2lnLnBhcmFtZXRlcnMua2V5cygpKQorICAgICAgICAgICAgICAgICAgICBjX25hbWVzID0gW3RyKHgpIGZvciB4IGluIGNfc2lnLnBhcmFtZXRlcnMua2V5cygpXQorCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19uYW1lcywgcF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9InBhcmFtZXRlciBuYW1lIG1pc21hdGNoIGluICVzIiAlIHBfZnVuYykKKworICAgICAgICAgICAgICAgICAgICBwX2tpbmQgPSBbeC5raW5kIGZvciB4IGluIHBfc2lnLnBhcmFtZXRlcnMudmFsdWVzKCldCisgICAgICAgICAgICAgICAgICAgIGNfa2luZCA9IFt4LmtpbmQgZm9yIHggaW4gY19zaWcucGFyYW1ldGVycy52YWx1ZXMoKV0KKworICAgICAgICAgICAgICAgICAgICAjICdzZWxmJyBwYXJhbWV0ZXI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocF9raW5kWzBdLCBQT1NfS1dEKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNfa2luZFswXSwgUE9TKQorCisgICAgICAgICAgICAgICAgICAgICMgcmVtYWluaW5nIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5ID09ICdEZWNpbWFsJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19raW5kWzE6XSwgcF9raW5kWzE6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJwYXJhbWV0ZXIga2luZCBtaXNtYXRjaCBpbiAlcyIgJSBwX2Z1bmMpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6ICMgQ29udGV4dCBtZXRob2RzIGFyZSBwb3NpdGlvbmFsIG9ubHkgaW4gdGhlIEMgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNfa2luZCksIGxlbihwX2tpbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9InBhcmFtZXRlciBraW5kIG1pc21hdGNoIGluICVzIiAlIHBfZnVuYykKKworICAgICAgICAgICAgICAgICAgICAjIFJ1biB0aGUgZnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGFyZ3MsIGt3ZHMgPSBta2FyZ3MoQywgY19zaWcpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoY190eXBlKDkpLCBhdHRyKSgqYXJncywgKiprd2RzKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoImludmFsaWQgc2lnbmF0dXJlIGZvciAlczogJXMgJXMiICUgKGNfZnVuYywgYXJncywga3dkcykpCisKKyAgICAgICAgICAgICAgICAgICAgYXJncywga3dkcyA9IG1rYXJncyhQLCBwX3NpZykKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihwX3R5cGUoOSksIGF0dHIpKCphcmdzLCAqKmt3ZHMpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgiaW52YWxpZCBzaWduYXR1cmUgZm9yICVzOiAlcyAlcyIgJSAocF9mdW5jLCBhcmdzLCBrd2RzKSkKKworICAgICAgICBkb2l0KCdEZWNpbWFsJykKKyAgICAgICAgZG9pdCgnQ29udGV4dCcpCisKKwogYWxsX3Rlc3RzID0gWwogICBDRXhwbGljaXRDb25zdHJ1Y3Rpb25UZXN0LCBQeUV4cGxpY2l0Q29uc3RydWN0aW9uVGVzdCwKICAgQ0ltcGxpY2l0Q29uc3RydWN0aW9uVGVzdCwgUHlJbXBsaWNpdENvbnN0cnVjdGlvblRlc3QsCkBAIC01NDM0LDYgKzU1ODgsNyBAQAogICAgIGFsbF90ZXN0cyA9IGFsbF90ZXN0c1sxOjoyXQogZWxzZToKICAgICBhbGxfdGVzdHMuaW5zZXJ0KDAsIENoZWNrQXR0cmlidXRlcykKKyAgICBhbGxfdGVzdHMuaW5zZXJ0KDEsIFNpZ25hdHVyZVRlc3QpCiAKIAogZGVmIHRlc3RfbWFpbihhcml0aD1Ob25lLCB2ZXJib3NlPU5vbmUsIHRvZG9fdGVzdHM9Tm9uZSwgZGVidWc9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlY29yYXRvcnMucHkgYi9MaWIvdGVzdC90ZXN0X2RlY29yYXRvcnMucHkKaW5kZXggNTNjOTQ2OS4uZDBhMmVjOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZWNvcmF0b3JzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVjb3JhdG9ycy5weQpAQCAtMSw1ICsxLDQgQEAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGRlZiBmdW5jYXR0cnMoKiprd2RzKToKICAgICBkZWYgZGVjb3JhdGUoZnVuYyk6CkBAIC0zMDEsOSArMzAwLDUgQEAKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5leHRyYSwgJ3NlY29uZCcpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RGVjb3JhdG9ycykKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Q2xhc3NEZWNvcmF0b3JzKQotCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkgYi9MaWIvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5CmluZGV4IDUzMmQ1MzUuLmE5MGJjMmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZWZhdWx0ZGljdC5weQpAQCAtNSw3ICs1LDYgQEAKIGltcG9ydCBwaWNrbGUKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKIApAQCAtMTU3LDggKzE1Niw5IEBACiAgICAgICAgICAgICBkZWYgX2ZhY3Rvcnkoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGQgPSBzdWIoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihkKS5zdGFydHN3aXRoKAotICAgICAgICAgICAgImRlZmF1bHRkaWN0KDxib3VuZCBtZXRob2Qgc3ViLl9mYWN0b3J5IG9mIGRlZmF1bHRkaWN0KC4uLiIpKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoZCksCisgICAgICAgICAgICByImRlZmF1bHRkaWN0XCg8Ym91bmQgbWV0aG9kIC4qc3ViXC5fZmFjdG9yeSAiCisgICAgICAgICAgICByIm9mIGRlZmF1bHRkaWN0XChcLlwuXC4sIFx7XH1cKT4sIFx7XH1cKSIpCiAKICAgICAgICAgIyBOT1RFOiBwcmludGluZyBhIHN1YmNsYXNzIG9mIGEgYnVpbHRpbiB0eXBlIGRvZXMgbm90IGNhbGwgaXRzCiAgICAgICAgICMgdHBfcHJpbnQgc2xvdC4gU28gdGhpcyBwYXJ0IGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIHRlc3QgYXMgYWJvdmUuCkBAIC0xODMsOCArMTgzLDUgQEAKICAgICAgICAgICAgIG8gPSBwaWNrbGUubG9hZHMocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgbykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3REZWZhdWx0RGljdCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKaW5kZXggNWVjYmM3My4uMThlMWRmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CkBAIC0xNjQsNiArMTY0LDI2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID4gIHksIGxpc3QoeCkgPiAgbGlzdCh5KSwgKHgseSkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID49IHksIGxpc3QoeCkgPj0gbGlzdCh5KSwgKHgseSkpCiAKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgbiA9IDIwMAorCisgICAgICAgIGQgPSBkZXF1ZShyYW5nZShuKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaSBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKG4rMSkgbm90IGluIGQpCisKKyAgICAgICAgIyBUZXN0IGRldGVjdGlvbiBvZiBtdXRhdGlvbiBkdXJpbmcgaXRlcmF0aW9uCisgICAgICAgIGQgPSBkZXF1ZShyYW5nZShuKSkKKyAgICAgICAgZFtuLy8yXSA9IE11dGF0ZUNtcChkLCBGYWxzZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgbiBpbiBkCisKKyAgICAgICAgIyBUZXN0IGRldGVjdGlvbiBvZiBjb21wYXJpc29uIGV4Y2VwdGlvbnMKKyAgICAgICAgZCA9IGRlcXVlKHJhbmdlKG4pKQorICAgICAgICBkW24vLzJdID0gQmFkQ21wKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgbiBpbiBkCisKICAgICBkZWYgdGVzdF9leHRlbmQoc2VsZik6CiAgICAgICAgIGQgPSBkZXF1ZSgnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5leHRlbmQsIDEpCkBAIC0xNzIsNiArMTkyLDI2IEBACiAgICAgICAgIGQuZXh0ZW5kKGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdCgnYWJjZGFiY2QnKSkKIAorICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgZSA9IGRlcXVlKCdhYmMnKQorICAgICAgICBmID0gZGVxdWUoJ2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCArIGQsIGRlcXVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSArIGYsIGRlcXVlKCdhYmNkZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlICsgZSwgZGVxdWUoJ2FiY2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUgKyBkLCBkZXF1ZSgnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCArIGUsIGRlcXVlKCdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkICsgZCwgZGVxdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChlICsgZCwgZGVxdWUoJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGQgKyBlLCBkZXF1ZSgnYWJjJykpCisKKyAgICAgICAgZyA9IGRlcXVlKCdhYmNkZWYnLCBtYXhsZW49NCkKKyAgICAgICAgaCA9IGRlcXVlKCdnaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyArIGgsIGRlcXVlKCdlZmdoJykpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZGVxdWUoJ2FiYycpICsgJ2RlZicKKwogICAgIGRlZiB0ZXN0X2lhZGQoc2VsZik6CiAgICAgICAgIGQgPSBkZXF1ZSgnYScpCiAgICAgICAgIGQgKz0gJ2JjZCcKQEAgLTIxMSw2ICsyNTEsMTMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGQuX19nZXRpdGVtX18sIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGQuX19nZXRpdGVtX18sIC0xKQogCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIGZvciBuIGluIDEsIDIsIDMwLCA0MCwgMjAwOgorCisgICAgICAgICAgICBkID0gZGVxdWUocmFuZ2UobikpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaW5kZXgoaSksIGkpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZC5pbmRleChuKzEpCisKKyAgICAgICAgICAgICMgVGVzdCBkZXRlY3Rpb24gb2YgbXV0YXRpb24gZHVyaW5nIGl0ZXJhdGlvbgorICAgICAgICAgICAgZCA9IGRlcXVlKHJhbmdlKG4pKQorICAgICAgICAgICAgZFtuLy8yXSA9IE11dGF0ZUNtcChkLCBGYWxzZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBkLmluZGV4KG4pCisKKyAgICAgICAgICAgICMgVGVzdCBkZXRlY3Rpb24gb2YgY29tcGFyaXNvbiBleGNlcHRpb25zCisgICAgICAgICAgICBkID0gZGVxdWUocmFuZ2UobikpCisgICAgICAgICAgICBkW24vLzJdID0gQmFkQ21wKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBkLmluZGV4KG4pCisKKyAgICAgICAgIyBUZXN0IHN0YXJ0IGFuZCBzdG9wIGFyZ3VtZW50cyBiZWhhdmlvciBtYXRjaGVzIGxpc3QuaW5kZXgoKQorICAgICAgICBlbGVtZW50cyA9ICdBQkNERUZHSEknCisgICAgICAgIG5vbmVsZW1lbnQgPSAnWicKKyAgICAgICAgZCA9IGRlcXVlKGVsZW1lbnRzICogMikKKyAgICAgICAgcyA9IGxpc3QoZWxlbWVudHMgKiAyKQorICAgICAgICBmb3Igc3RhcnQgaW4gcmFuZ2UoLTUgLSBsZW4ocykqMiwgNSArIGxlbihzKSAqIDIpOgorICAgICAgICAgICAgZm9yIHN0b3AgaW4gcmFuZ2UoLTUgLSBsZW4ocykqMiwgNSArIGxlbihzKSAqIDIpOgorICAgICAgICAgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzICsgJ1onOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBzLmluZGV4KGVsZW1lbnQsIHN0YXJ0LCBzdG9wKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5pbmRleChlbGVtZW50LCBzdGFydCwgc3RvcCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pbmRleChlbGVtZW50LCBzdGFydCwgc3RvcCksIHRhcmdldCkKKworICAgIGRlZiB0ZXN0X2luc2VydF9idWdfMjQ5MTMoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgnQScgKiAzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaSA9IGQuaW5kZXgoIkhlbGxvIHdvcmxkIiwgMCwgNCkKKworICAgIGRlZiB0ZXN0X2luc2VydChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRvIG1ha2Ugc3VyZSBpbnNlcnQgYmVoYXZlcyBsaWtlIGxpc3RzCisgICAgICAgIGVsZW1lbnRzID0gJ0FCQ0RFRkdISScKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTUgLSBsZW4oZWxlbWVudHMpKjIsIDUgKyBsZW4oZWxlbWVudHMpICogMik6CisgICAgICAgICAgICBkID0gZGVxdWUoJ0FCQ0RFRkdISScpCisgICAgICAgICAgICBzID0gbGlzdCgnQUJDREVGR0hJJykKKyAgICAgICAgICAgIGQuaW5zZXJ0KGksICdaJykKKyAgICAgICAgICAgIHMuaW5zZXJ0KGksICdaJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcykKKworICAgIGRlZiB0ZXN0X2luc2VydF9idWdfMjYxOTQoc2VsZik6CisgICAgICAgIGRhdGEgPSAnQUJDJworICAgICAgICBkID0gZGVxdWUoZGF0YSwgbWF4bGVuPWxlbihkYXRhKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIGQuaW5zZXJ0KDIsIE5vbmUpCisKKyAgICAgICAgZWxlbWVudHMgPSAnQUJDREVGR0hJJworICAgICAgICBmb3IgaSBpbiByYW5nZSgtbGVuKGVsZW1lbnRzKSwgbGVuKGVsZW1lbnRzKSk6CisgICAgICAgICAgICBkID0gZGVxdWUoZWxlbWVudHMsIG1heGxlbj1sZW4oZWxlbWVudHMpKzEpCisgICAgICAgICAgICBkLmluc2VydChpLCAnWicpCisgICAgICAgICAgICBpZiBpID49IDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2ldLCAnWicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtpLTFdLCAnWicpCisKKyAgICBkZWYgdGVzdF9pbXVsKHNlbGYpOgorICAgICAgICBmb3IgbiBpbiAoLTEwLCAtMSwgMCwgMSwgMiwgMTAsIDEwMDApOgorICAgICAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgICAgIGQgKj0gbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkZXF1ZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZC5tYXhsZW4pCisKKyAgICAgICAgZm9yIG4gaW4gKC0xMCwgLTEsIDAsIDEsIDIsIDEwLCAxMDAwKToKKyAgICAgICAgICAgIGQgPSBkZXF1ZSgnYScpCisgICAgICAgICAgICBkICo9IG4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGVxdWUoJ2EnICogbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkLm1heGxlbikKKworICAgICAgICBmb3IgbiBpbiAoLTEwLCAtMSwgMCwgMSwgMiwgMTAsIDQ5OSwgNTAwLCA1MDEsIDEwMDApOgorICAgICAgICAgICAgZCA9IGRlcXVlKCdhJywgNTAwKQorICAgICAgICAgICAgZCAqPSBuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRlcXVlKCdhJyAqIG1pbihuLCA1MDApKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tYXhsZW4sIDUwMCkKKworICAgICAgICBmb3IgbiBpbiAoLTEwLCAtMSwgMCwgMSwgMiwgMTAsIDEwMDApOgorICAgICAgICAgICAgZCA9IGRlcXVlKCdhYmNkZWYnKQorICAgICAgICAgICAgZCAqPSBuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRlcXVlKCdhYmNkZWYnICogbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkLm1heGxlbikKKworICAgICAgICBmb3IgbiBpbiAoLTEwLCAtMSwgMCwgMSwgMiwgMTAsIDQ5OSwgNTAwLCA1MDEsIDEwMDApOgorICAgICAgICAgICAgZCA9IGRlcXVlKCdhYmNkZWYnLCA1MDApCisgICAgICAgICAgICBkICo9IG4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGVxdWUoKCdhYmNkZWYnICogbilbLTUwMDpdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tYXhsZW4sIDUwMCkKKworICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQgKiAtNSwgZGVxdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkICogMCwgZGVxdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkICogMSwgZGVxdWUoJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQgKiAyLCBkZXF1ZSgnYWJjYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCAqIDMsIGRlcXVlKCdhYmNhYmNhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkICogMSwgZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCkgKiAwLCBkZXF1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCkgKiAxLCBkZXF1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCkgKiA1LCBkZXF1ZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTUgKiBkLCBkZXF1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAgKiBkLCBkZXF1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgKiBkLCBkZXF1ZSgnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiAqIGQsIGRlcXVlKCdhYmNhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzICogZCwgZGVxdWUoJ2FiY2FiY2FiYycpKQorCisgICAgICAgIGQgPSBkZXF1ZSgnYWJjJywgbWF4bGVuPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCAqIC01LCBkZXF1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQgKiAwLCBkZXF1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQgKiAxLCBkZXF1ZSgnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCAqIDIsIGRlcXVlKCdiY2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQgKiAzMCwgZGVxdWUoJ2JjYWJjJykpCisKICAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgogICAgICAgICBuID0gMjAwCiAgICAgICAgIGQgPSBkZXF1ZShyYW5nZShuKSkKQEAgLTMyOSw3ICs0OTQsNyBAQAogICAgICAgICBkLmNsZWFyKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgW10pCi0gICAgICAgIGQuY2xlYXIoKSAgICAgICAgICAgICAgICMgY2xlYXIgYW4gZW10cHkgZGVxdWUKKyAgICAgICAgZC5jbGVhcigpICAgICAgICAgICAgICAgIyBjbGVhciBhbiBlbXB0eSBkZXF1ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIFtdKQogCiAgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgpAQCAtNDczLDE4ICs2MzgsNDUgQEAKICMjICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChlKSwgaWQoZVstMV0pKQogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3JfcGlja2xlKHNlbGYpOgotICAgICAgICBkYXRhID0gZGVxdWUocmFuZ2UoMjAwKSkKKyAgICAgICAgb3JpZyA9IGRlcXVlKHJhbmdlKDIwMCkpCisgICAgICAgIGRhdGEgPSBbaSoxLjAxIGZvciBpIGluIG9yaWddCiAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgotICAgICAgICAgICAgaXQgPSBpdG9yZyA9IGl0ZXIoZGF0YSkKLSAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQotICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKSkKKyAgICAgICAgICAgICMgaW5pdGlhbCBpdGVyYXRvcgorICAgICAgICAgICAgaXRvcmcgPSBpdGVyKG9yaWcpCisgICAgICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKChpdG9yZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGQgPSBwaWNrbGUubG9hZHMoZHVtcCkKKyAgICAgICAgICAgIGZvciBpLCB4IGluIGVudW1lcmF0ZShkYXRhKToKKyAgICAgICAgICAgICAgICBkW2ldID0geAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0KSwgdHlwZShpdG9yZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhKQogCi0gICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKVsxOl0pCisgICAgICAgICAgICAjIHJ1bm5pbmcgaXRlcmF0b3IKKyAgICAgICAgICAgIG5leHQoaXRvcmcpCisgICAgICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKChpdG9yZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGQgPSBwaWNrbGUubG9hZHMoZHVtcCkKKyAgICAgICAgICAgIGZvciBpLCB4IGluIGVudW1lcmF0ZShkYXRhKToKKyAgICAgICAgICAgICAgICBkW2ldID0geAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0KSwgdHlwZShpdG9yZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhWzE6XSkKKworICAgICAgICAgICAgIyBlbXB0eSBpdGVyYXRvcgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGRhdGEpKToKKyAgICAgICAgICAgICAgICBuZXh0KGl0b3JnKQorICAgICAgICAgICAgZHVtcCA9IHBpY2tsZS5kdW1wcygoaXRvcmcsIG9yaWcpLCBwcm90bykKKyAgICAgICAgICAgIGl0LCBkID0gcGlja2xlLmxvYWRzKGR1bXApCisgICAgICAgICAgICBmb3IgaSwgeCBpbiBlbnVtZXJhdGUoZGF0YSk6CisgICAgICAgICAgICAgICAgZFtpXSA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdCksIHR5cGUoaXRvcmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisKKyAgICAgICAgICAgICMgZXhoYXVzdGVkIGl0ZXJhdG9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdG9yZykKKyAgICAgICAgICAgIGR1bXAgPSBwaWNrbGUuZHVtcHMoKGl0b3JnLCBvcmlnKSwgcHJvdG8pCisgICAgICAgICAgICBpdCwgZCA9IHBpY2tsZS5sb2FkcyhkdW1wKQorICAgICAgICAgICAgZm9yIGksIHggaW4gZW51bWVyYXRlKGRhdGEpOgorICAgICAgICAgICAgICAgIGRbaV0gPSB4CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXQpLCB0eXBlKGl0b3JnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHkoc2VsZik6CiAgICAgICAgIG11dCA9IFsxMF0KQEAgLTUwNCwxMCArNjk2LDI0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCiAKKyAgICBkZWYgdGVzdF9jb3B5X21ldGhvZChzZWxmKToKKyAgICAgICAgbXV0ID0gWzEwXQorICAgICAgICBkID0gZGVxdWUoW211dF0pCisgICAgICAgIGUgPSBkLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCisgICAgICAgIG11dFswXSA9IDExCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCisKICAgICBkZWYgdGVzdF9yZXZlcnNlZChzZWxmKToKICAgICAgICAgZm9yIHMgaW4gKCdhYmNkJywgcmFuZ2UoMjAwMCkpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKGRlcXVlKHMpKSksIGxpc3QocmV2ZXJzZWQocykpKQogCisgICAgZGVmIHRlc3RfcmV2ZXJzZWRfbmV3KHNlbGYpOgorICAgICAgICBrbGFzcyA9IHR5cGUocmV2ZXJzZWQoZGVxdWUoKSkpCisgICAgICAgIGZvciBzIGluICgnYWJjZCcsIHJhbmdlKDIwMDApKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrbGFzcyhkZXF1ZShzKSkpLCBsaXN0KHJldmVyc2VkKHMpKSkKKwogICAgIGRlZiB0ZXN0X2djX2RvZXNudF9ibG93dXAoc2VsZik6CiAgICAgICAgIGltcG9ydCBnYwogICAgICAgICAjIFRoaXMgdXNlZCB0byBhc3NlcnQtZmFpbCBpbiBkZXF1ZV90cmF2ZXJzZSgpIHVuZGVyIGEgZGVidWcKQEAgLTUzNyw5ICs3NDMsOSBAQAogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgotICAgICAgICBCTE9DS0xFTiA9IDYyCi0gICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnMlA0bmxQJykKLSAgICAgICAgYmxvY2tzaXplID0gc3RydWN0LmNhbGNzaXplKCcyUCVkUCcgJSBCTE9DS0xFTikKKyAgICAgICAgQkxPQ0tMRU4gPSA2NAorICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY3ZvYmpzaXplKCcyUDRuUCcpCisgICAgICAgIGJsb2Nrc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZSgnUCVkUFAnICUgQkxPQ0tMRU4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqZWN0Ll9fc2l6ZW9mX18oZGVxdWUoKSksIGJhc2VzaXplKQogICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCiAgICAgICAgIGNoZWNrKGRlcXVlKCksIGJhc2VzaXplICsgYmxvY2tzaXplKQpAQCAtNjg0LDYgKzg5MCwyNSBAQAogICAgICAgICAjIFNGIGJ1ZyAjMTQ4NjY2MyAtLSB0aGlzIHVzZWQgdG8gZXJyb25lb3VzbHkgcmFpc2UgYSBUeXBlRXJyb3IKICAgICAgICAgU3ViY2xhc3NXaXRoS3dhcmdzKG5ld2FyZz0xKQogCitjbGFzcyBUZXN0U2VxdWVuY2Uoc2VxX3Rlc3RzLkNvbW1vblRlc3QpOgorICAgIHR5cGUydGVzdCA9IGRlcXVlCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICAjIEZvciBub3csIGJ5cGFzcyB0ZXN0cyB0aGF0IHJlcXVpcmUgc2xpY2luZworICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9nZXRzbGljZShzZWxmKToKKyAgICAgICAgIyBGb3Igbm93LCBieXBhc3MgdGVzdHMgdGhhdCByZXF1aXJlIHNsaWNpbmcKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc3Vic2NyaXB0KHNlbGYpOgorICAgICAgICAjIEZvciBub3csIGJ5cGFzcyB0ZXN0cyB0aGF0IHJlcXVpcmUgc2xpY2luZworICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9mcmVlX2FmdGVyX2l0ZXJhdGluZyhzZWxmKToKKyAgICAgICAgIyBGb3Igbm93LCBieXBhc3MgdGVzdHMgdGhhdCByZXF1aXJlIHNsaWNpbmcKKyAgICAgICAgc2VsZi5za2lwVGVzdCgiRXhoYXVzdGVkIGRlcXVlIGl0ZXJhdG9yIGRvZXNuJ3QgZnJlZSBhIGRlcXVlIikKKwogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBsaWJyZWZ0ZXN0ID0gIiIiCkBAIC03OTgsNiArMTAyMyw3IEBACiAgICAgICAgIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzLAogICAgICAgICBUZXN0U3ViY2xhc3MsCiAgICAgICAgIFRlc3RTdWJjbGFzc1dpdGhLd2FyZ3MsCisgICAgICAgIFRlc3RTZXF1ZW5jZSwKICAgICApCiAKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weSBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKaW5kZXggNjRhNGEzNi4uYTEzMGNlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CkBAIC0yMSw2ICsyMSw3IEBACiAgICAgICAgICAgICAnYWRkJzogJysnLAogICAgICAgICAgICAgJ3N1Yic6ICctJywKICAgICAgICAgICAgICdtdWwnOiAnKicsCisgICAgICAgICAgICAnbWF0bXVsJzogJ0AnLAogICAgICAgICAgICAgJ3RydWVkaXYnOiAnLycsCiAgICAgICAgICAgICAnZmxvb3JkaXYnOiAnLy8nLAogICAgICAgICAgICAgJ2Rpdm1vZCc6ICdkaXZtb2QnLApAQCAtMTAxOSw2ICsxMDIwLDY3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeydmb28nOiAxfSkKIAorICAgIGRlZiB0ZXN0X29iamVjdF9jbGFzc19hc3NpZ25tZW50X2JldHdlZW5faGVhcHR5cGVzX2FuZF9ub25oZWFwdHlwZXMoc2VsZik6CisgICAgICAgIGNsYXNzIFN1YlR5cGUodHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBhID0gMQorCisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCJtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uX19jbGFzc19fIGlzIHR5cGVzLk1vZHVsZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtLCAiYSIpKQorCisgICAgICAgIG0uX19jbGFzc19fID0gU3ViVHlwZQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5fX2NsYXNzX18gaXMgU3ViVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobSwgImEiKSkKKworICAgICAgICBtLl9fY2xhc3NfXyA9IHR5cGVzLk1vZHVsZVR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uX19jbGFzc19fIGlzIHR5cGVzLk1vZHVsZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtLCAiYSIpKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgYnVpbHRpbiBpbW11dGFibGUgb2JqZWN0cyBkb24ndCBzdXBwb3J0IF9fY2xhc3NfXworICAgICAgICAjIGFzc2lnbm1lbnQsIGJlY2F1c2UgdGhlIG9iamVjdCBpbnN0YW5jZXMgbWF5IGJlIGludGVybmVkLgorICAgICAgICAjIFdlIHNldCBfX3Nsb3RzX18gPSAoKSB0byBlbnN1cmUgdGhhdCB0aGUgc3ViY2xhc3NlcyBhcmUKKyAgICAgICAgIyBtZW1vcnktbGF5b3V0IGNvbXBhdGlibGUsIGFuZCB0aHVzIG90aGVyd2lzZSByZWFzb25hYmxlIGNhbmRpZGF0ZXMKKyAgICAgICAgIyBmb3IgX19jbGFzc19fIGFzc2lnbm1lbnQuCisKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIHR5cGVzIGhhdmUgaW1tdXRhYmxlIGluc3RhbmNlcywgYnV0IGFyZSBub3QKKyAgICAgICAgIyBzdWJjbGFzc2FibGUgYW5kIHRodXMgZG9uJ3QgbmVlZCB0byBiZSBjaGVja2VkOgorICAgICAgICAjICAgTm9uZVR5cGUsIGJvb2wKKworICAgICAgICBjbGFzcyBNeUludChpbnQpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgKDEpLl9fY2xhc3NfXyA9IE15SW50CisKKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAoMS4wKS5fX2NsYXNzX18gPSBNeUZsb2F0CisKKyAgICAgICAgY2xhc3MgTXlDb21wbGV4KGNvbXBsZXgpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgKDEgKyAyaikuX19jbGFzc19fID0gTXlDb21wbGV4CisKKyAgICAgICAgY2xhc3MgTXlTdHIoc3RyKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICJhIi5fX2NsYXNzX18gPSBNeVN0cgorCisgICAgICAgIGNsYXNzIE15Qnl0ZXMoYnl0ZXMpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYiJhIi5fX2NsYXNzX18gPSBNeUJ5dGVzCisKKyAgICAgICAgY2xhc3MgTXlUdXBsZSh0dXBsZSk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAoKS5fX2NsYXNzX18gPSBNeVR1cGxlCisKKyAgICAgICAgY2xhc3MgTXlGcm96ZW5TZXQoZnJvemVuc2V0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGZyb3plbnNldCgpLl9fY2xhc3NfXyA9IE15RnJvemVuU2V0CisKICAgICBkZWYgdGVzdF9zbG90cyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIF9fc2xvdHNfXy4uLgogICAgICAgICBjbGFzcyBDMChvYmplY3QpOgpAQCAtMjAwNSw3ICsyMDY3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyhyYXcuZnNldCwgQy5fX2RpY3RfX1snc2V0eCddKQogICAgICAgICBzZWxmLmFzc2VydElzKHJhdy5mZGVsLCBDLl9fZGljdF9fWydkZWx4J10pCiAKLSAgICAgICAgZm9yIGF0dHIgaW4gIl9fZG9jX18iLCAiZmdldCIsICJmc2V0IiwgImZkZWwiOgorICAgICAgICBmb3IgYXR0ciBpbiAiZmdldCIsICJmc2V0IiwgImZkZWwiOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNldGF0dHIocmF3LCBhdHRyLCA0MikKICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBtc2c6CkBAIC0yMDE2LDYgKzIwNzgsOSBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgQXR0cmlidXRlRXJyb3IgZnJvbSB0cnlpbmcgdG8gc2V0IHJlYWRvbmx5ICVyICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0dHIgb24gYSBwcm9wZXJ0eSIgJSBhdHRyKQogCisgICAgICAgIHJhdy5fX2RvY19fID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuX19kb2NfXywgNDIpCisKICAgICAgICAgY2xhc3MgRChvYmplY3QpOgogICAgICAgICAgICAgX19nZXRpdGVtX18gPSBwcm9wZXJ0eShsYW1iZGEgczogMS8wKQogCkBAIC0zMDAzLDggKzMwNjgsNiBAQAogICAgICAgICBjYW50KG9iamVjdCgpLCBsaXN0KQogICAgICAgICBjYW50KGxpc3QoKSwgb2JqZWN0KQogICAgICAgICBjbGFzcyBJbnQoaW50KTogX19zbG90c19fID0gW10KLSAgICAgICAgY2FudCgyLCBJbnQpCi0gICAgICAgIGNhbnQoSW50KCksIGludCkKICAgICAgICAgY2FudChUcnVlLCBpbnQpCiAgICAgICAgIGNhbnQoMiwgYm9vbCkKICAgICAgICAgbyA9IG9iamVjdCgpCkBAIC0zMzI0LDcgKzMzODcsNyBAQAogICAgICAgICBBLl9fY2FsbF9fID0gQSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIEEoKSgpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgIGV4Y2VwdCBSZWN1cnNpb25FcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVjdXJzaW9uIGxpbWl0IHNob3VsZCBoYXZlIGJlZW4gcmVhY2hlZCBmb3IgX19jYWxsX18oKSIpCkBAIC0zNDI2LDcgKzM0ODksNyBAQAogICAgICAgICBiLmEgPSBhCiAgICAgICAgIHogPSBkZWVwY29weShhKSAjIFRoaXMgYmxldyB1cCBiZWZvcmUKIAotICAgIGRlZiB0ZXN0X3VuaW50aWFsaXplZF9tb2R1bGVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VuaW5pdGlhbGl6ZWRfbW9kdWxlcyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHVuaW5pdGlhbGl6ZWQgbW9kdWxlIG9iamVjdHMuLi4KICAgICAgICAgZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZSBhcyBNCiAgICAgICAgIG0gPSBNLl9fbmV3X18oTSkKQEAgLTQxODQsNiArNDI0Nyw3IEBACiAgICAgICAgICAgICAgICAgKCdfX2FkZF9fJywgICAgICAneCArIHknLCAgICAgICAgICAgICAgICAgICAneCArPSB5JyksCiAgICAgICAgICAgICAgICAgKCdfX3N1Yl9fJywgICAgICAneCAtIHknLCAgICAgICAgICAgICAgICAgICAneCAtPSB5JyksCiAgICAgICAgICAgICAgICAgKCdfX211bF9fJywgICAgICAneCAqIHknLCAgICAgICAgICAgICAgICAgICAneCAqPSB5JyksCisgICAgICAgICAgICAgICAgKCdfX21hdG11bF9fJywgICAneCBAIHknLCAgICAgICAgICAgICAgICAgICAneCBAPSB5JyksCiAgICAgICAgICAgICAgICAgKCdfX3RydWVkaXZfXycsICAneCAvIHknLCAgICAgICAgICAgICAgICAgICAneCAvPSB5JyksCiAgICAgICAgICAgICAgICAgKCdfX2Zsb29yZGl2X18nLCAneCAvLyB5JywgICAgICAgICAgICAgICAgICAneCAvLz0geScpLAogICAgICAgICAgICAgICAgICgnX19tb2RfXycsICAgICAgJ3ggJSB5JywgICAgICAgICAgICAgICAgICAgJ3ggJT0geScpLApAQCAtNDMyOSw4ICs0MzkzLDggQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgRm9vLl9fcmVwcl9fID0gRm9vLl9fc3RyX18KICAgICAgICAgZm9vID0gRm9vKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzdHIsIGZvbykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCByZXByLCBmb28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yLCBzdHIsIGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIHJlcHIsIGZvbykKIAogICAgIGRlZiB0ZXN0X21peGluZ19zbG90X3dyYXBwZXJzKHNlbGYpOgogICAgICAgICBjbGFzcyBYKGRpY3QpOgpAQCAtNDQ0NSw2ICs0NTA5LDYxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fZGljdF9fIiwgQmFzZS5fX2RpY3RfXykKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19kaWN0X18iLCBTdWIuX19kaWN0X18pCiAKKyAgICBkZWYgdGVzdF9ib3VuZF9tZXRob2RfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vOgorICAgICAgICAgICAgZGVmIG1ldGhvZChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihGb28oKS5tZXRob2QpLAorICAgICAgICAgICAgciI8Ym91bmQgbWV0aG9kIC4qRm9vXC5tZXRob2Qgb2YgPC4qRm9vIG9iamVjdCBhdCAuKj4+IikKKworCisgICAgICAgIGNsYXNzIEJhc2U6CisgICAgICAgICAgICBkZWYgbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRGVyaXZlZDEoQmFzZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIERlcml2ZWQyKEJhc2UpOgorICAgICAgICAgICAgZGVmIG1ldGhvZChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGJhc2UgPSBCYXNlKCkKKyAgICAgICAgZGVyaXZlZDEgPSBEZXJpdmVkMSgpCisgICAgICAgIGRlcml2ZWQyID0gRGVyaXZlZDIoKQorICAgICAgICBzdXBlcl9kMiA9IHN1cGVyKERlcml2ZWQyLCBkZXJpdmVkMikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGJhc2UubWV0aG9kKSwKKyAgICAgICAgICAgIHIiPGJvdW5kIG1ldGhvZCAuKkJhc2VcLm1ldGhvZCBvZiA8LipCYXNlIG9iamVjdCBhdCAuKj4+IikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGRlcml2ZWQxLm1ldGhvZCksCisgICAgICAgICAgICByIjxib3VuZCBtZXRob2QgLipCYXNlXC5tZXRob2Qgb2YgPC4qRGVyaXZlZDEgb2JqZWN0IGF0IC4qPj4iKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoZGVyaXZlZDIubWV0aG9kKSwKKyAgICAgICAgICAgIHIiPGJvdW5kIG1ldGhvZCAuKkRlcml2ZWQyXC5tZXRob2Qgb2YgPC4qRGVyaXZlZDIgb2JqZWN0IGF0IC4qPj4iKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoc3VwZXJfZDIubWV0aG9kKSwKKyAgICAgICAgICAgIHIiPGJvdW5kIG1ldGhvZCAuKkJhc2VcLm1ldGhvZCBvZiA8LipEZXJpdmVkMiBvYmplY3QgYXQgLio+PiIpCisKKyAgICAgICAgY2xhc3MgRm9vOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgbWV0aG9kKGNscyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmb28gPSBGb28oKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoZm9vLm1ldGhvZCksICMgYWNjZXNzIHZpYSBpbnN0YW5jZQorICAgICAgICAgICAgciI8Ym91bmQgbWV0aG9kIC4qRm9vXC5tZXRob2Qgb2YgPGNsYXNzICcuKkZvbyc+PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihGb28ubWV0aG9kKSwgIyBhY2Nlc3MgdmlhIHRoZSBjbGFzcworICAgICAgICAgICAgciI8Ym91bmQgbWV0aG9kIC4qRm9vXC5tZXRob2Qgb2YgPGNsYXNzICcuKkZvbyc+PiIpCisKKworICAgICAgICBjbGFzcyBNeUNhbGxhYmxlOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmdW5jID0gTXlDYWxsYWJsZSgpICMgZnVuYyBoYXMgbm8gX19uYW1lX18gb3IgX19xdWFsbmFtZV9fIGF0dHJpYnV0ZXMKKyAgICAgICAgaW5zdGFuY2UgPSBvYmplY3QoKQorICAgICAgICBtZXRob2QgPSB0eXBlcy5NZXRob2RUeXBlKGZ1bmMsIGluc3RhbmNlKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIobWV0aG9kKSwKKyAgICAgICAgICAgIHIiPGJvdW5kIG1ldGhvZCBcPyBvZiA8b2JqZWN0IG9iamVjdCBhdCAuKj4+IikKKyAgICAgICAgZnVuYy5fX25hbWVfXyA9ICJuYW1lIgorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIobWV0aG9kKSwKKyAgICAgICAgICAgIHIiPGJvdW5kIG1ldGhvZCBuYW1lIG9mIDxvYmplY3Qgb2JqZWN0IGF0IC4qPj4iKQorICAgICAgICBmdW5jLl9fcXVhbG5hbWVfXyA9ICJxdWFsbmFtZSIKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKG1ldGhvZCksCisgICAgICAgICAgICByIjxib3VuZCBtZXRob2QgcXVhbG5hbWUgb2YgPG9iamVjdCBvYmplY3QgYXQgLio+PiIpCisKIAogY2xhc3MgRGljdFByb3h5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTQ1NTksMjYgKzQ2NzgsMTUgQEAKIAogICAgIGRlZiBfY2hlY2tfcmVkdWNlKHNlbGYsIHByb3RvLCBvYmosIGFyZ3M9KCksIGt3YXJncz17fSwgc3RhdGU9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICBsaXN0aXRlbXM9Tm9uZSwgZGljdGl0ZW1zPU5vbmUpOgotICAgICAgICBpZiBwcm90byA+PSA0OgorICAgICAgICBpZiBwcm90byA+PSAyOgogICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZV92YWx1ZVs6M10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3B5cmVnLl9fbmV3b2JqX2V4X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShvYmopLCBhcmdzLCBrd2FyZ3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUpKQotICAgICAgICAgICAgaWYgbGlzdGl0ZW1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QocmVkdWNlX3ZhbHVlWzNdKSwgbGlzdGl0ZW1zKQorICAgICAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlX3ZhbHVlWzBdLCBjb3B5cmVnLl9fbmV3b2JqX2V4X18pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbMV0sICh0eXBlKG9iaiksIGFyZ3MsIGt3YXJncykpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZHVjZV92YWx1ZVszXSkKLSAgICAgICAgICAgIGlmIGRpY3RpdGVtcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChkaWN0KHJlZHVjZV92YWx1ZVs0XSksIGRpY3RpdGVtcykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzRdKQotICAgICAgICBlbGlmIHByb3RvID49IDI6Ci0gICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlX3ZhbHVlWzozXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvcHlyZWcuX19uZXdvYmpfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG9iaiksKSArIGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbMF0sIGNvcHlyZWcuX19uZXdvYmpfXykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZV92YWx1ZVsxXSwgKHR5cGUob2JqKSwpICsgYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlX3ZhbHVlWzJdLCBzdGF0ZSkKICAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKICAgICAgICAgICAgIGVsc2U6CkBAIC00OTczLDEwICs1MDgxLDYgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMpOgogICAgICAgICAgICAgICAgIGt3YXJncyA9IGdldGF0dHIoY2xzLCAnS1dBUkdTJywge30pCiAgICAgICAgICAgICAgICAgb2JqID0gY2xzKCpjbHMuQVJHUywgKiprd2FyZ3MpCi0gICAgICAgICAgICAgICAgIyBYWFg6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBjb3B5IG1vZHVsZSB0byBzdXBwb3J0IFBFUCAzMTU0J3MKLSAgICAgICAgICAgICAgICAjIHJlZHVjZSBwcm90b2NvbCA0LgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoY2xzLCAnX19nZXRuZXdhcmdzX2V4X18nKToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBvYmpjb3B5ID0gZGVlcGNvcHkob2JqKQogICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKICAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RpY3QucHkgYi9MaWIvdGVzdC90ZXN0X2RpY3QucHkKaW5kZXggODBmZWI5MC4uNmQ2OGU3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGljdC5weQpAQCAtODYxLDcgKzg2MSw3IEBACiAgICAgICAgICAgICBpdG9yZyA9IGl0ZXIoZGF0YS5pdGVtcygpKQogICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZywgcHJvdG8pCiAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAgICAgIyBub3RlIHRoYXQgdGhlIHR5cGUgb2YgdHlwZSBvZiB0aGUgdW5waWNrbGVkIGl0ZXJhdG9yCisgICAgICAgICAgICAjIG5vdGUgdGhhdCB0aGUgdHlwZSBvZiB0aGUgdW5waWNrbGVkIGl0ZXJhdG9yCiAgICAgICAgICAgICAjIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwuICBJdCBpcwogICAgICAgICAgICAgIyBtZXJlbHkgYW4gb2JqZWN0IHN1cHBvcnRpbmcgdGhlIGl0ZXJhdG9yIHByb3RvY29sLCB5aWVsZGluZwogICAgICAgICAgICAgIyB0aGUgc2FtZSBvYmplY3RzIGFzIHRoZSBvcmlnaW5hbCBvbmUuCkBAIC05NTIsNiArOTUyLDEyIEBACiAgICAgICAgIGQgPSB7WCgpOiAwLCAxOiAxfQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGQudXBkYXRlLCBvdGhlcikKIAorICAgIGRlZiB0ZXN0X2ZyZWVfYWZ0ZXJfaXRlcmF0aW5nKHNlbGYpOgorICAgICAgICBzdXBwb3J0LmNoZWNrX2ZyZWVfYWZ0ZXJfaXRlcmF0aW5nKHNlbGYsIGl0ZXIsIGRpY3QpCisgICAgICAgIHN1cHBvcnQuY2hlY2tfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZiwgbGFtYmRhIGQ6IGl0ZXIoZC5rZXlzKCkpLCBkaWN0KQorICAgICAgICBzdXBwb3J0LmNoZWNrX2ZyZWVfYWZ0ZXJfaXRlcmF0aW5nKHNlbGYsIGxhbWJkYSBkOiBpdGVyKGQudmFsdWVzKCkpLCBkaWN0KQorICAgICAgICBzdXBwb3J0LmNoZWNrX2ZyZWVfYWZ0ZXJfaXRlcmF0aW5nKHNlbGYsIGxhbWJkYSBkOiBpdGVyKGQuaXRlbXMoKSksIGRpY3QpCisKIGZyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cwogCiBjbGFzcyBHZW5lcmFsTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKQEAgLTk2MywxMiArOTY5LDUgQEAKIGNsYXNzIFN1YmNsYXNzTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKICAgICB0eXBlMnRlc3QgPSBEaWN0CiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgRGljdFRlc3QsCi0gICAgICAgIEdlbmVyYWxNYXBwaW5nVGVzdHMsCi0gICAgICAgIFN1YmNsYXNzTWFwcGluZ1Rlc3RzLAotICAgICkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaWN0dmlld3MucHkgYi9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQppbmRleCA1ZjIxNDRhLi5hYjIzY2ExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCBjb3B5CiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBjbGFzcyBEaWN0U2V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTIwMiw3ICsyMDEsNyBAQAogICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9yZXByKHNlbGYpOgogICAgICAgICBkID0ge30KICAgICAgICAgZFs0Ml0gPSBkLnZhbHVlcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcmVwciwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIHJlcHIsIGQpCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgogICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQpAQCAtMjIxLDggKzIyMCw1IEBACiAgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzLCBkLml0ZW1zKCksIHByb3RvKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChEaWN0U2V0VGVzdCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5CmluZGV4IDBiYThmMGUuLmFiOWRlYmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKQEAgLTEwNyw2ICsxMDcsMjAgQEAKICAgIDUuIEZsYXQgaXMgYmV0dGVyIHRoYW4gbmVzdGVkLgogIiIiCiAKK3BhdGNoOTE0NTc1X25vbmFzY2lpX2Zyb20xID0gIiIiCisgICAxLiBCZWF1dGlmdWwgaXMgYmVUVGVyIHRoYW4gdWdseS4KKyAgIDIuIEV4cGxpY2l0IGlzIGJldHRlciB0aGFuIMSxbXBsxLFjxLF0LgorICAgMy4gU2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCisgICA0LiBDb21wbGV4IGlzIGJldHRlciB0aGFuIGNvbXBsaWNhdGVkLgorIiIiCisKK3BhdGNoOTE0NTc1X25vbmFzY2lpX3RvMSA9ICIiIgorICAgMS4gQmVhdXRpZnVsIGlzIGJldHRlciB0aGFuIMO8Z2x5LgorICAgMy4gICBTxLFtcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCisgICA0LiBDb21wbGljYXRlZCBpcyBiZXR0ZXIgdGhhbiBjw7ZtcGxleC4KKyAgIDUuIEZsYXQgaXMgYmV0dGVyIHRoYW4gbmVzdGVkLgorIiIiCisKIHBhdGNoOTE0NTc1X2Zyb20yID0gIiIiCiBcdFx0TGluZSAxOiBwcmVjZWVkZWQgYnkgZnJvbTpbdHRdIHRvOltzc3NzXQogICBcdFx0TGluZSAyOiBwcmVjZWVkZWQgYnkgZnJvbTpbc3N0dF0gdG86W3Nzc3N0XQpAQCAtMjIzLDYgKzIzNywyNyBAQAogICAgICAgICBuZXcgPSBbKGklMiBhbmQgIks6JWQiIG9yICJWOkI6JWQiKSAlIGkgZm9yIGkgaW4gcmFuZ2UobGltaXQqMildCiAgICAgICAgIGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsIG9sZCwgbmV3KS5nZXRfb3Bjb2RlcygpCiAKKyAgICBkZWYgdGVzdF9tYWtlX2ZpbGVfZGVmYXVsdF9jaGFyc2V0KHNlbGYpOgorICAgICAgICBodG1sX2RpZmYgPSBkaWZmbGliLkh0bWxEaWZmKCkKKyAgICAgICAgb3V0cHV0ID0gaHRtbF9kaWZmLm1ha2VfZmlsZShwYXRjaDkxNDU3NV9mcm9tMS5zcGxpdGxpbmVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2g5MTQ1NzVfdG8xLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IicsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0X21ha2VfZmlsZV9pc284ODU5MV9jaGFyc2V0KHNlbGYpOgorICAgICAgICBodG1sX2RpZmYgPSBkaWZmbGliLkh0bWxEaWZmKCkKKyAgICAgICAgb3V0cHV0ID0gaHRtbF9kaWZmLm1ha2VfZmlsZShwYXRjaDkxNDU3NV9mcm9tMS5zcGxpdGxpbmVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2g5MTQ1NzVfdG8xLnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0PSdpc28tODg1OS0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiJywgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfbWFrZV9maWxlX3VzYXNjaWlfY2hhcnNldF93aXRoX25vbmFzY2lpX2lucHV0KHNlbGYpOgorICAgICAgICBodG1sX2RpZmYgPSBkaWZmbGliLkh0bWxEaWZmKCkKKyAgICAgICAgb3V0cHV0ID0gaHRtbF9kaWZmLm1ha2VfZmlsZShwYXRjaDkxNDU3NV9ub25hc2NpaV9mcm9tMS5zcGxpdGxpbmVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2g5MTQ1NzVfbm9uYXNjaWlfdG8xLnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0PSd1cy1hc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2NvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSInLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyYjMzA1O21wbCYjMzA1O2MmIzMwNTt0Jywgb3V0cHV0KQorCiAKIGNsYXNzIFRlc3RPdXRwdXRGb3JtYXQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3RhYl9kZWxpbWl0ZXIoc2VsZik6CkBAIC0yODcsMTIgKzMyMiwxNTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQoMCwwKSwgJzAnKQogCiAKK2NsYXNzIFRlc3RCeXRlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGUgY29udGVudCBvZiB0aGUgb3V0cHV0LCBqdXN0IHRoZSBmYWN0CisgICAgIyB0aGF0IGl0J3MgYnl0ZXMgYW5kIHdlIGRvbid0IGNyYXNoCisgICAgZGVmIGNoZWNrKHNlbGYsIGRpZmYpOgorICAgICAgICBkaWZmID0gbGlzdChkaWZmKSAgICMgdHJpZ2dlciBleGNlcHRpb25zIGZpcnN0CisgICAgICAgIGZvciBsaW5lIGluIGRpZmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoCisgICAgICAgICAgICAgICAgbGluZSwgYnl0ZXMsCisgICAgICAgICAgICAgICAgImFsbCBsaW5lcyBvZiBkaWZmIHNob3VsZCBiZSBieXRlcywgYnV0IGdvdDogJXIiICUgbGluZSkKKworICAgIGRlZiB0ZXN0X2J5dGVfY29udGVudChzZWxmKToKKyAgICAgICAgIyBpZiB3ZSByZWNlaXZlIGJ5dGUgc3RyaW5ncywgd2UgcmV0dXJuIGJ5dGUgc3RyaW5ncworICAgICAgICBhID0gW2InaGVsbG8nLCBiJ2FuZHJceGU5J10gICAgICMgaXNvLTg4NTktMSBieXRlcworICAgICAgICBiID0gW2InaGVsbG8nLCBiJ2FuZHJceGMzXHhhOSddICMgdXRmLTggYnl0ZXMKKworICAgICAgICB1bmlmaWVkID0gZGlmZmxpYi51bmlmaWVkX2RpZmYKKyAgICAgICAgY29udGV4dCA9IGRpZmZsaWIuY29udGV4dF9kaWZmCisKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrCisgICAgICAgIGNoZWNrKGRpZmZsaWIuZGlmZl9ieXRlcyh1bmlmaWVkLCBhLCBhKSkKKyAgICAgICAgY2hlY2soZGlmZmxpYi5kaWZmX2J5dGVzKHVuaWZpZWQsIGEsIGIpKQorCisgICAgICAgICMgbm93IHdpdGggZmlsZW5hbWVzIChjb250ZW50IGFuZCBmaWxlbmFtZXMgYXJlIGFsbCBieXRlcyEpCisgICAgICAgIGNoZWNrKGRpZmZsaWIuZGlmZl9ieXRlcyh1bmlmaWVkLCBhLCBhLCBiJ2EnLCBiJ2EnKSkKKyAgICAgICAgY2hlY2soZGlmZmxpYi5kaWZmX2J5dGVzKHVuaWZpZWQsIGEsIGIsIGInYScsIGInYicpKQorCisgICAgICAgICMgYW5kIHdpdGggZmlsZW5hbWVzIGFuZCBkYXRlcworICAgICAgICBjaGVjayhkaWZmbGliLmRpZmZfYnl0ZXModW5pZmllZCwgYSwgYSwgYidhJywgYidhJywgYicyMDA1JywgYicyMDEzJykpCisgICAgICAgIGNoZWNrKGRpZmZsaWIuZGlmZl9ieXRlcyh1bmlmaWVkLCBhLCBiLCBiJ2EnLCBiJ2InLCBiJzIwMDUnLCBiJzIwMTMnKSkKKworICAgICAgICAjIHNhbWUgYWxsIG92ZXIgYWdhaW4sIHdpdGggY29udGV4dCBkaWZmCisgICAgICAgIGNoZWNrKGRpZmZsaWIuZGlmZl9ieXRlcyhjb250ZXh0LCBhLCBhKSkKKyAgICAgICAgY2hlY2soZGlmZmxpYi5kaWZmX2J5dGVzKGNvbnRleHQsIGEsIGIpKQorICAgICAgICBjaGVjayhkaWZmbGliLmRpZmZfYnl0ZXMoY29udGV4dCwgYSwgYSwgYidhJywgYidhJykpCisgICAgICAgIGNoZWNrKGRpZmZsaWIuZGlmZl9ieXRlcyhjb250ZXh0LCBhLCBiLCBiJ2EnLCBiJ2InKSkKKyAgICAgICAgY2hlY2soZGlmZmxpYi5kaWZmX2J5dGVzKGNvbnRleHQsIGEsIGEsIGInYScsIGInYScsIGInMjAwNScsIGInMjAxMycpKQorICAgICAgICBjaGVjayhkaWZmbGliLmRpZmZfYnl0ZXMoY29udGV4dCwgYSwgYiwgYidhJywgYidiJywgYicyMDA1JywgYicyMDEzJykpCisKKyAgICBkZWYgdGVzdF9ieXRlX2ZpbGVuYW1lcyhzZWxmKToKKyAgICAgICAgIyBzb21lYm9keSByZW5hbWVkIGEgZmlsZSBmcm9tIElTTy04ODU5LTIgdG8gVVRGLTgKKyAgICAgICAgZm5hID0gYidceGIzb2R6LnR4dCcgICAgIyAixYJvZHoudHh0IgorICAgICAgICBmbmIgPSBiJ1x4YzVceDgyb2R6LnR4dCcKKworICAgICAgICAjIHRoZXkgdHJhbnNjb2RlZCB0aGUgY29udGVudCBhdCB0aGUgc2FtZSB0aW1lCisgICAgICAgIGEgPSBbYidceGEzb2R6IGlzIGEgY2l0eSBpbiBQb2xhbmQuJ10KKyAgICAgICAgYiA9IFtiJ1x4YzVceDgxb2R6IGlzIGEgY2l0eSBpbiBQb2xhbmQuJ10KKworICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2sKKyAgICAgICAgdW5pZmllZCA9IGRpZmZsaWIudW5pZmllZF9kaWZmCisgICAgICAgIGNvbnRleHQgPSBkaWZmbGliLmNvbnRleHRfZGlmZgorICAgICAgICBjaGVjayhkaWZmbGliLmRpZmZfYnl0ZXModW5pZmllZCwgYSwgYiwgZm5hLCBmbmIpKQorICAgICAgICBjaGVjayhkaWZmbGliLmRpZmZfYnl0ZXMoY29udGV4dCwgYSwgYiwgZm5hLCBmbmIpKQorCisgICAgICAgIGRlZiBhc3NlcnREaWZmKGV4cGVjdCwgYWN0dWFsKToKKyAgICAgICAgICAgICMgZG8gbm90IGNvbXBhcmUgZXhwZWN0IGFuZCBlcXVhbCBhcyBsaXN0cywgYmVjYXVzZSB1bml0dGVzdAorICAgICAgICAgICAgIyB1c2VzIGRpZmZsaWIgdG8gcmVwb3J0IGRpZmZlcmVuY2UgYmV0d2VlbiBsaXN0cworICAgICAgICAgICAgYWN0dWFsID0gbGlzdChhY3R1YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3QpLCBsZW4oYWN0dWFsKSkKKyAgICAgICAgICAgIGZvciBlLCBhIGluIHppcChleHBlY3QsIGFjdHVhbCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBhKQorCisgICAgICAgIGV4cGVjdCA9IFsKKyAgICAgICAgICAgIGInLS0tIFx4YjNvZHoudHh0JywKKyAgICAgICAgICAgIGInKysrIFx4YzVceDgyb2R6LnR4dCcsCisgICAgICAgICAgICBiJ0BAIC0xICsxIEBAJywKKyAgICAgICAgICAgIGInLVx4YTNvZHogaXMgYSBjaXR5IGluIFBvbGFuZC4nLAorICAgICAgICAgICAgYicrXHhjNVx4ODFvZHogaXMgYSBjaXR5IGluIFBvbGFuZC4nLAorICAgICAgICBdCisgICAgICAgIGFjdHVhbCA9IGRpZmZsaWIuZGlmZl9ieXRlcyh1bmlmaWVkLCBhLCBiLCBmbmEsIGZuYiwgbGluZXRlcm09YicnKQorICAgICAgICBhc3NlcnREaWZmKGV4cGVjdCwgYWN0dWFsKQorCisgICAgICAgICMgd2l0aCBkYXRlcyAocGxhaW4gQVNDSUkpCisgICAgICAgIGRhdGVhID0gYicyMDA1LTAzLTE4JworICAgICAgICBkYXRlYiA9IGInMjAwNS0wMy0xOScKKyAgICAgICAgY2hlY2soZGlmZmxpYi5kaWZmX2J5dGVzKHVuaWZpZWQsIGEsIGIsIGZuYSwgZm5iLCBkYXRlYSwgZGF0ZWIpKQorICAgICAgICBjaGVjayhkaWZmbGliLmRpZmZfYnl0ZXMoY29udGV4dCwgYSwgYiwgZm5hLCBmbmIsIGRhdGVhLCBkYXRlYikpCisKKyAgICAgICAgZXhwZWN0ID0gWworICAgICAgICAgICAgIyBub3RlIHRoZSBtaXhlZCBlbmNvZGluZ3MgaGVyZTogdGhpcyBpcyBkZWVwbHkgd3JvbmcgYnkgZXZlcnkKKyAgICAgICAgICAgICMgdGVuZXQgb2YgVW5pY29kZSwgYnV0IGl0IGRvZXNuJ3QgY3Jhc2gsIGl0J3MgcGFyc2VhYmxlIGJ5CisgICAgICAgICAgICAjIHBhdGNoLCBhbmQgaXQncyBob3cgVU5JWCh0bSkgZGlmZiBiZWhhdmVzCisgICAgICAgICAgICBiJy0tLSBceGIzb2R6LnR4dFx0MjAwNS0wMy0xOCcsCisgICAgICAgICAgICBiJysrKyBceGM1XHg4Mm9kei50eHRcdDIwMDUtMDMtMTknLAorICAgICAgICAgICAgYidAQCAtMSArMSBAQCcsCisgICAgICAgICAgICBiJy1ceGEzb2R6IGlzIGEgY2l0eSBpbiBQb2xhbmQuJywKKyAgICAgICAgICAgIGInK1x4YzVceDgxb2R6IGlzIGEgY2l0eSBpbiBQb2xhbmQuJywKKyAgICAgICAgXQorICAgICAgICBhY3R1YWwgPSBkaWZmbGliLmRpZmZfYnl0ZXModW5pZmllZCwgYSwgYiwgZm5hLCBmbmIsIGRhdGVhLCBkYXRlYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmV0ZXJtPWInJykKKyAgICAgICAgYXNzZXJ0RGlmZihleHBlY3QsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0X21peGVkX3R5cGVzX2NvbnRlbnQoc2VsZik6CisgICAgICAgICMgdHlwZSBvZiBpbnB1dCBjb250ZW50IG11c3QgYmUgY29uc2lzdGVudDogYWxsIHN0ciBvciBhbGwgYnl0ZXMKKyAgICAgICAgYSA9IFtiJ2hlbGxvJ10KKyAgICAgICAgYiA9IFsnaGVsbG8nXQorCisgICAgICAgIHVuaWZpZWQgPSBkaWZmbGliLnVuaWZpZWRfZGlmZgorICAgICAgICBjb250ZXh0ID0gZGlmZmxpYi5jb250ZXh0X2RpZmYKKworICAgICAgICBleHBlY3QgPSAibGluZXMgdG8gY29tcGFyZSBtdXN0IGJlIHN0ciwgbm90IGJ5dGVzIChiJ2hlbGxvJykiCisgICAgICAgIHNlbGYuX2Fzc2VydF90eXBlX2Vycm9yKGV4cGVjdCwgdW5pZmllZCwgYSwgYikKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3R5cGVfZXJyb3IoZXhwZWN0LCB1bmlmaWVkLCBiLCBhKQorICAgICAgICBzZWxmLl9hc3NlcnRfdHlwZV9lcnJvcihleHBlY3QsIGNvbnRleHQsIGEsIGIpCisgICAgICAgIHNlbGYuX2Fzc2VydF90eXBlX2Vycm9yKGV4cGVjdCwgY29udGV4dCwgYiwgYSkKKworICAgICAgICBleHBlY3QgPSAiYWxsIGFyZ3VtZW50cyBtdXN0IGJlIGJ5dGVzLCBub3Qgc3RyICgnaGVsbG8nKSIKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3R5cGVfZXJyb3IoZXhwZWN0LCBkaWZmbGliLmRpZmZfYnl0ZXMsIHVuaWZpZWQsIGEsIGIpCisgICAgICAgIHNlbGYuX2Fzc2VydF90eXBlX2Vycm9yKGV4cGVjdCwgZGlmZmxpYi5kaWZmX2J5dGVzLCB1bmlmaWVkLCBiLCBhKQorICAgICAgICBzZWxmLl9hc3NlcnRfdHlwZV9lcnJvcihleHBlY3QsIGRpZmZsaWIuZGlmZl9ieXRlcywgY29udGV4dCwgYSwgYikKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3R5cGVfZXJyb3IoZXhwZWN0LCBkaWZmbGliLmRpZmZfYnl0ZXMsIGNvbnRleHQsIGIsIGEpCisKKyAgICBkZWYgdGVzdF9taXhlZF90eXBlc19maWxlbmFtZXMoc2VsZik6CisgICAgICAgICMgY2Fubm90IHBhc3MgZmlsZW5hbWVzIGFzIGJ5dGVzIGlmIGNvbnRlbnQgaXMgc3RyICh0aGlzIG1heSBub3QgYmUKKyAgICAgICAgIyB0aGUgcmlnaHQgYmVoYXZpb3VyLCBidXQgYXQgbGVhc3QgdGhlIHRlc3QgZGVtb25zdHJhdGVzIGhvdworICAgICAgICAjIHRoaW5ncyB3b3JrKQorICAgICAgICBhID0gWydoZWxsb1xuJ10KKyAgICAgICAgYiA9IFsnb2hlbGxcbiddCisgICAgICAgIGZuYSA9IGInb2xceGU5LnR4dCcgICAgICMgZmlsZW5hbWUgdHJhbnNjb2RlZCBmcm9tIElTTy04ODU5LTEKKyAgICAgICAgZm5iID0gYidvbFx4YzNhOS50eHQnICAgIyB0byBVVEYtOAorICAgICAgICBzZWxmLl9hc3NlcnRfdHlwZV9lcnJvcigKKyAgICAgICAgICAgICJhbGwgYXJndW1lbnRzIG11c3QgYmUgc3RyLCBub3Q6IGInb2xcXHhlOS50eHQnIiwKKyAgICAgICAgICAgIGRpZmZsaWIudW5pZmllZF9kaWZmLCBhLCBiLCBmbmEsIGZuYikKKworICAgIGRlZiB0ZXN0X21peGVkX3R5cGVzX2RhdGVzKHNlbGYpOgorICAgICAgICAjIHR5cGUgb2YgZGF0ZXMgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdHlwZSBvZiBjb250ZW50cworICAgICAgICBhID0gW2InZm9vXG4nXQorICAgICAgICBiID0gW2InYmFyXG4nXQorICAgICAgICBkYXRlYSA9ICcxIGbDqXYnCisgICAgICAgIGRhdGViID0gJzMgZsOpdicKKyAgICAgICAgc2VsZi5fYXNzZXJ0X3R5cGVfZXJyb3IoCisgICAgICAgICAgICAiYWxsIGFyZ3VtZW50cyBtdXN0IGJlIGJ5dGVzLCBub3Qgc3RyICgnMSBmw6l2JykiLAorICAgICAgICAgICAgZGlmZmxpYi5kaWZmX2J5dGVzLCBkaWZmbGliLnVuaWZpZWRfZGlmZiwKKyAgICAgICAgICAgIGEsIGIsIGInYScsIGInYicsIGRhdGVhLCBkYXRlYikKKworICAgICAgICAjIGlmIGlucHV0IGlzIHN0ciwgbm9uLUFTQ0lJIGRhdGVzIGFyZSBmaW5lCisgICAgICAgIGEgPSBbJ2Zvb1xuJ10KKyAgICAgICAgYiA9IFsnYmFyXG4nXQorICAgICAgICBsaXN0KGRpZmZsaWIudW5pZmllZF9kaWZmKGEsIGIsICdhJywgJ2InLCBkYXRlYSwgZGF0ZWIpKQorCisgICAgZGVmIF9hc3NlcnRfdHlwZV9lcnJvcihzZWxmLCBtc2csIGdlbmVyYXRvciwgKmFyZ3MpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY3R4OgorICAgICAgICAgICAgbGlzdChnZW5lcmF0b3IoKmFyZ3MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgc3RyKGN0eC5leGNlcHRpb24pKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBkaWZmbGliLkh0bWxEaWZmLl9kZWZhdWx0X3ByZWZpeCA9IDAKICAgICBEb2N0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKGRpZmZsaWIpCiAgICAgcnVuX3VuaXR0ZXN0KAogICAgICAgICBUZXN0V2l0aEFzY2lpLCBUZXN0QXV0b2p1bmssIFRlc3RTRnBhdGNoZXMsIFRlc3RTRmJ1Z3MsCi0gICAgICAgIFRlc3RPdXRwdXRGb3JtYXQsIERvY3Rlc3RzKQorICAgICAgICBUZXN0T3V0cHV0Rm9ybWF0LCBUZXN0Qnl0ZXMsIERvY3Rlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwgYi9MaWIvdGVzdC90ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwKaW5kZXggNzFiNmQ3YS4uZWE3YTI0ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaWZmbGliX2V4cGVjdC5odG1sCisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYl9leHBlY3QuaHRtbApAQCAtNiw3ICs2LDcgQEAKIAogPGhlYWQ+CiAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIgotICAgICAgICAgIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorICAgICAgICAgIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KICAgICA8dGl0bGU+PC90aXRsZT4KICAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAgICB0YWJsZS5kaWZmIHtmb250LWZhbWlseTpDb3VyaWVyOyBib3JkZXI6bWVkaXVtO30KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKaW5kZXggYjhkYWZmNy4uMGZkMTM0OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKQEAgLTEsNiArMSw2IEBACiAjIE1pbmltYWwgdGVzdHMgZm9yIGRpcyBtb2R1bGUKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2FwdHVyZWRfc3Rkb3V0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0CiBmcm9tIHRlc3QuYnl0ZWNvZGVfaGVscGVyIGltcG9ydCBCeXRlY29kZVRlc3RDYXNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IHVuaXR0ZXN0CkBAIC0zMCw4ICszMCwxNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKICAgICAgICAgc2VsZi54ID0geCA9PSAxCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNtKHgpOgorICAgICAgICB4ID0geCA9PSAxCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY20oY2xzLCB4KToKKyAgICAgICAgY2xzLnggPSB4ID09IDEKKwogZGlzX2NfaW5zdGFuY2VfbWV0aG9kID0gIiIiXAotICUtNGQgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICh4KQorJTNkICAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICh4KQogICAgICAgICAgICAgICAzIExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQogICAgICAgICAgICAgICA2IENPTVBBUkVfT1AgICAgICAgICAgICAgICAyICg9PSkKICAgICAgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoc2VsZikKQEAgLTUwLDE3ICs1OCw0OCBAQAogICAgICAgICAgMTggUkVUVVJOX1ZBTFVFCiAiIiIKIAorZGlzX2NfY2xhc3NfbWV0aG9kID0gIiIiXAorJTNkICAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICh4KQorICAgICAgICAgICAgICAzIExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgICAgICA2IENPTVBBUkVfT1AgICAgICAgICAgICAgICAyICg9PSkKKyAgICAgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoY2xzKQorICAgICAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICh4KQorICAgICAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorICAgICAgICAgICAgIDE4IFJFVFVSTl9WQUxVRQorIiIiICUgKF9DLmNtLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vICsgMiwpCisKK2Rpc19jX3N0YXRpY19tZXRob2QgPSAiIiJcCislM2QgICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDAgKHgpCisgICAgICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAgICAgIDIgKD09KQorICAgICAgICAgICAgICA5IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAwICh4KQorICAgICAgICAgICAgIDEyIExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorICAgICAgICAgICAgIDE1IFJFVFVSTl9WQUxVRQorIiIiICUgKF9DLnNtLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vICsgMiwpCisKKyMgQ2xhc3MgZGlzYXNzZW1ibGluZyBpbmZvIGhhcyBhbiBleHRyYSBuZXdsaW5lIGF0IGVuZC4KK2Rpc19jID0gIiIiXAorRGlzYXNzZW1ibHkgb2YgJXM6CislcworRGlzYXNzZW1ibHkgb2YgJXM6CislcworRGlzYXNzZW1ibHkgb2YgJXM6CislcworIiIiICUgKF9DLl9faW5pdF9fLl9fbmFtZV9fLCBkaXNfY19pbnN0YW5jZV9tZXRob2QsCisgICAgICAgX0MuY20uX19uYW1lX18sIGRpc19jX2NsYXNzX21ldGhvZCwKKyAgICAgICBfQy5zbS5fX25hbWVfXywgZGlzX2Nfc3RhdGljX21ldGhvZCkKKwogZGVmIF9mKGEpOgogICAgIHByaW50KGEpCiAgICAgcmV0dXJuIDEKIAogZGlzX2YgPSAiIiJcCi0gJS00ZCAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKHByaW50KQorJTNkICAgICAgICAgICAwIExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChwcmludCkKICAgICAgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoYSkKICAgICAgICAgICAgICAgNiBDQUxMX0ZVTkNUSU9OICAgICAgICAgICAgMSAoMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcikKICAgICAgICAgICAgICAgOSBQT1BfVE9QCiAKLSAlLTRkICAgICAgICAxMCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKKyUzZCAgICAgICAgICAxMCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKICAgICAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIiAlIChfZi5fX2NvZGVfXy5jb19maXJzdGxpbmVubyArIDEsCiAgICAgICAgX2YuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAyKQpAQCAtODIsMTcgKzEyMSwxNyBAQAogICAgICAgICBwYXNzCiAKIGRpc19idWc3MDg5MDEgPSAiIiJcCi0gJS00ZCAgICAgICAgIDAgU0VUVVBfTE9PUCAgICAgICAgICAgICAgMjMgKHRvIDI2KQorJTNkICAgICAgICAgICAwIFNFVFVQX0xPT1AgICAgICAgICAgICAgIDIzICh0byAyNikKICAgICAgICAgICAgICAgMyBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAocmFuZ2UpCiAgICAgICAgICAgICAgIDYgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAKLSAlLTRkICAgICAgICAgOSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMiAoMTApCislM2QgICAgICAgICAgIDkgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDEwKQogICAgICAgICAgICAgIDEyIENBTExfRlVOQ1RJT04gICAgICAgICAgICAyICgyIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgICAgIDE1IEdFVF9JVEVSCiAgICAgICAgID4+ICAgMTYgRk9SX0lURVIgICAgICAgICAgICAgICAgIDYgKHRvIDI1KQogICAgICAgICAgICAgIDE5IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAwIChyZXMpCiAKLSAlLTRkICAgICAgICAyMiBKVU1QX0FCU09MVVRFICAgICAgICAgICAxNgorJTNkICAgICAgICAgIDIyIEpVTVBfQUJTT0xVVEUgICAgICAgICAgIDE2CiAgICAgICAgID4+ICAgMjUgUE9QX0JMT0NLCiAgICAgICAgID4+ICAgMjYgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCiAgICAgICAgICAgICAgMjkgUkVUVVJOX1ZBTFVFCkBAIC0xOTEsMTYgKzIzMCwxNiBAQAogIiIiCiAKIGRpc190cmFjZWJhY2sgPSAiIiJcCi0gJS00ZCAgICAgICAgIDAgU0VUVVBfRVhDRVBUICAgICAgICAgICAgMTIgKHRvIDE1KQorJTNkICAgICAgICAgICAwIFNFVFVQX0VYQ0VQVCAgICAgICAgICAgIDEyICh0byAxNSkKIAotICUtNGQgICAgICAgICAzIExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQorJTNkICAgICAgICAgICAzIExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQogICAgICAgICAgICAgICA2IExPQURfQ09OU1QgICAgICAgICAgICAgICAyICgwKQogICAgIC0tPiAgICAgICA5IEJJTkFSWV9UUlVFX0RJVklERQogICAgICAgICAgICAgIDEwIFBPUF9UT1AKICAgICAgICAgICAgICAxMSBQT1BfQkxPQ0sKICAgICAgICAgICAgICAxMiBKVU1QX0ZPUldBUkQgICAgICAgICAgICA0NiAodG8gNjEpCiAKLSAlLTRkICAgPj4gICAxNSBEVVBfVE9QCislM2QgICAgID4+ICAgMTUgRFVQX1RPUAogICAgICAgICAgICAgIDE2IExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChFeGNlcHRpb24pCiAgICAgICAgICAgICAgMTkgQ09NUEFSRV9PUCAgICAgICAgICAgICAgMTAgKGV4Y2VwdGlvbiBtYXRjaCkKICAgICAgICAgICAgICAyMiBQT1BfSlVNUF9JRl9GQUxTRSAgICAgICA2MApAQCAtMjA5LDcgKzI0OCw3IEBACiAgICAgICAgICAgICAgMjkgUE9QX1RPUAogICAgICAgICAgICAgIDMwIFNFVFVQX0ZJTkFMTFkgICAgICAgICAgIDE0ICh0byA0NykKIAotICUtNGQgICAgICAgIDMzIExPQURfRkFTVCAgICAgICAgICAgICAgICAwIChlKQorJTNkICAgICAgICAgIDMzIExPQURfRkFTVCAgICAgICAgICAgICAgICAwIChlKQogICAgICAgICAgICAgIDM2IExPQURfQVRUUiAgICAgICAgICAgICAgICAxIChfX3RyYWNlYmFja19fKQogICAgICAgICAgICAgIDM5IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAxICh0YikKICAgICAgICAgICAgICA0MiBQT1BfQkxPQ0sKQEAgLTIyMiw3ICsyNjEsNyBAQAogICAgICAgICAgICAgIDU3IEpVTVBfRk9SV0FSRCAgICAgICAgICAgICAxICh0byA2MSkKICAgICAgICAgPj4gICA2MCBFTkRfRklOQUxMWQogCi0gJS00ZCAgID4+ICAgNjEgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDEgKHRiKQorJTNkICAgICA+PiAgIDYxIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICh0YikKICAgICAgICAgICAgICA2NCBSRVRVUk5fVkFMVUUKICIiIiAlIChUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDEsCiAgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyAyLApAQCAtMjMwLDYgKzI2OSw5IEBACiAgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyA0LAogICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgNSkKIAorZGVmIF9nKHgpOgorICAgIHlpZWxkIHgKKwogY2xhc3MgRGlzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9kaXNhc3NlbWJseShzZWxmLCBmdW5jLCBsYXN0aT0tMSwgd3JhcHBlcj1UcnVlKToKQEAgLTMwOCwxMyArMzUwLDI3IEBACiAgICAgZGVmIHRlc3RfZGlzYXNzZW1ibGVfYnl0ZXMoc2VsZik6CiAgICAgICAgIHNlbGYuZG9fZGlzYXNzZW1ibHlfdGVzdChfZi5fX2NvZGVfXy5jb19jb2RlLCBkaXNfZl9jb19jb2RlKQogCi0gICAgZGVmIHRlc3RfZGlzYXNzZW1ibGVfbWV0aG9kKHNlbGYpOgorICAgIGRlZiB0ZXN0X2Rpc2Fzc2VtYmxlX2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX2Rpc2Fzc2VtYmx5X3Rlc3QoX0MsIGRpc19jKQorCisgICAgZGVmIHRlc3RfZGlzYXNzZW1ibGVfaW5zdGFuY2VfbWV0aG9kKHNlbGYpOgogICAgICAgICBzZWxmLmRvX2Rpc2Fzc2VtYmx5X3Rlc3QoX0MoMSkuX19pbml0X18sIGRpc19jX2luc3RhbmNlX21ldGhvZCkKIAotICAgIGRlZiB0ZXN0X2Rpc2Fzc2VtYmxlX21ldGhvZF9ieXRlcyhzZWxmKToKKyAgICBkZWYgdGVzdF9kaXNhc3NlbWJsZV9pbnN0YW5jZV9tZXRob2RfYnl0ZXMoc2VsZik6CiAgICAgICAgIG1ldGhvZF9ieXRlY29kZSA9IF9DKDEpLl9faW5pdF9fLl9fY29kZV9fLmNvX2NvZGUKICAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KG1ldGhvZF9ieXRlY29kZSwgZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzKQogCisgICAgZGVmIHRlc3RfZGlzYXNzZW1ibGVfc3RhdGljX21ldGhvZChzZWxmKToKKyAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KF9DLnNtLCBkaXNfY19zdGF0aWNfbWV0aG9kKQorCisgICAgZGVmIHRlc3RfZGlzYXNzZW1ibGVfY2xhc3NfbWV0aG9kKHNlbGYpOgorICAgICAgICBzZWxmLmRvX2Rpc2Fzc2VtYmx5X3Rlc3QoX0MuY20sIGRpc19jX2NsYXNzX21ldGhvZCkKKworICAgIGRlZiB0ZXN0X2Rpc2Fzc2VtYmxlX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgZ2VuX2Z1bmNfZGlzYXMgPSBzZWxmLmdldF9kaXNhc3NlbWJseShfZykgICMgRGlzYXNzZW1ibGUgZ2VuZXJhdG9yIGZ1bmN0aW9uCisgICAgICAgIGdlbl9kaXNhcyA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KF9nKDEpKSAgIyBEaXNhc3NlbWJsZSBnZW5lcmF0b3IgaXRzZWxmCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuX2Rpc2FzLCBnZW5fZnVuY19kaXNhcykKKwogICAgIGRlZiB0ZXN0X2Rpc19ub25lKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkZWwgc3lzLmxhc3RfdHJhY2ViYWNrCkBAIC00NzIsNiArNTI4LDI0IEBACiBOYW1lczoKICAgIDA6IHgiIiIKIAorCithc3luYyBkZWYgYXN5bmNfZGVmKCk6CisgICAgYXdhaXQgMQorICAgIGFzeW5jIGZvciBhIGluIGI6IHBhc3MKKyAgICBhc3luYyB3aXRoIGMgYXMgZDogcGFzcworCitjb2RlX2luZm9fYXN5bmNfZGVmID0gIiIiXAorTmFtZTogICAgICAgICAgICAgIGFzeW5jX2RlZgorRmlsZW5hbWU6ICAgICAgICAgICguKikKK0FyZ3VtZW50IGNvdW50OiAgICAwCitLdy1vbmx5IGFyZ3VtZW50czogMAorTnVtYmVyIG9mIGxvY2FsczogIDIKK1N0YWNrIHNpemU6ICAgICAgICAxNworRmxhZ3M6ICAgICAgICAgICAgIE9QVElNSVpFRCwgTkVXTE9DQUxTLCBHRU5FUkFUT1IsIE5PRlJFRSwgQ09ST1VUSU5FCitDb25zdGFudHM6CisgICAwOiBOb25lCisgICAxOiAxIiIiCisKIGNsYXNzIENvZGVJbmZvVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHRlc3RfcGFpcnMgPSBbCiAgICAgICAoZGlzLmNvZGVfaW5mbywgY29kZV9pbmZvX2NvZGVfaW5mbyksCkBAIC00ODAsNiArNTU0LDcgQEAKICAgICAgIChleHByX3N0ciwgY29kZV9pbmZvX2V4cHJfc3RyKSwKICAgICAgIChzaW1wbGVfc3RtdF9zdHIsIGNvZGVfaW5mb19zaW1wbGVfc3RtdF9zdHIpLAogICAgICAgKGNvbXBvdW5kX3N0bXRfc3RyLCBjb2RlX2luZm9fY29tcG91bmRfc3RtdF9zdHIpLAorICAgICAgKGFzeW5jX2RlZiwgY29kZV9pbmZvX2FzeW5jX2RlZikKICAgICBdCiAKICAgICBkZWYgdGVzdF9jb2RlX2luZm8oc2VsZik6CkBAIC01NjEsMTAgKzYzNiwxMCBAQAogI19pbnN0cnVjdGlvbnMgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhvdXRlciwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQogI3ByaW50KCdleHBlY3RlZF9vcGluZm9fb3V0ZXIgPSBbXG4gICcsCiAgICAgICAjJyxcbiAgJy5qb2luKG1hcChzdHIsIF9pbnN0cnVjdGlvbnMpKSwgJyxcbl0nLCBzZXA9JycpCi0jX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyKCksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSwgZmlyc3RfbGluZT1leHBlY3RlZF9mX2xpbmUpCiAjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19mID0gW1xuICAnLAogICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQotI19pbnN0cnVjdGlvbnMgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhvdXRlcigpKCksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSgpLCBmaXJzdF9saW5lPWV4cGVjdGVkX2lubmVyX2xpbmUpCiAjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19pbm5lciA9IFtcbiAgJywKICAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKICNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoanVtcHksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfanVtcHlfbGluZSkKQEAgLTYzNSwxMiArNzEwLDEyIEBACiBdCiAKIGV4cGVjdGVkX29waW5mb19qdW1weSA9IFsKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTc0LCBhcmd2YWw9NzcsIGFyZ3JlcHI9J3RvIDc3Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTY4LCBhcmd2YWw9NzEsIGFyZ3JlcHI9J3RvIDcxJywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKICAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3JhbmdlJywgYXJncmVwcj0ncmFuZ2UnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAogICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTEwLCBhcmdyZXByPScxMCcsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCiAgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCiAgIEluc3RydWN0aW9uKG9wbmFtZT0nR0VUX0lURVInLCBvcGNvZGU9NjgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nRk9SX0lURVInLCBvcGNvZGU9OTMsIGFyZz01MCwgYXJndmFsPTY2LCBhcmdyZXByPSd0byA2NicsIG9mZnNldD0xMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRk9SX0lURVInLCBvcGNvZGU9OTMsIGFyZz00NCwgYXJndmFsPTYwLCBhcmdyZXByPSd0byA2MCcsIG9mZnNldD0xMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCiAgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTE2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCiAgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE5LCBzdGFydHNfbGluZT00LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCiAgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKQEAgLTY0OSw5MiArNzI0LDg5IEBACiAgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjksIHN0YXJ0c19saW5lPTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKICAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD00LCBhcmdyZXByPSc0Jywgb2Zmc2V0PTMyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCiAgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz0wLCBhcmd2YWw9JzwnLCBhcmdyZXByPSc8Jywgb2Zmc2V0PTM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9NDcsIGFyZ3ZhbD00NywgYXJncmVwcj0nJywgb2Zmc2V0PTM4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9NDQsIGFyZ3ZhbD00NCwgYXJncmVwcj0nJywgb2Zmc2V0PTM4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCiAgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NDEsIHN0YXJ0c19saW5lPTYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MCwgYXJndmFsPTQ3LCBhcmdyZXByPSd0byA0NycsIG9mZnNldD00NCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTQ3LCBzdGFydHNfbGluZT03LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTUwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz00LCBhcmd2YWw9Jz4nLCBhcmdyZXByPSc+Jywgb2Zmc2V0PTUzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTU2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nQlJFQUtfTE9PUCcsIG9wY29kZT04MCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTksIHN0YXJ0c19saW5lPTgsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD02MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTYzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD02Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTY3LCBzdGFydHNfbGluZT0xMCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NCwgYXJndmFsPSdJIGNhbiBoYXogZWxzZSBjbGF1c2U/JywgYXJncmVwcj0iJ0kgY2FuIGhheiBlbHNlIGNsYXVzZT8nIiwgb2Zmc2V0PTcwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD03Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTc0LCBhcmd2YWw9MTU0LCBhcmdyZXByPSd0byAxNTQnLCBvZmZzZXQ9NzcsIHN0YXJ0c19saW5lPTExLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD04MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTQzLCBhcmd2YWw9MTQzLCBhcmdyZXByPScnLCBvZmZzZXQ9ODMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9ODYsIHN0YXJ0c19saW5lPTEyLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9ODksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTkyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD05NSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTk2LCBzdGFydHNfbGluZT0xMywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEnLCBvZmZzZXQ9OTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdJTlBMQUNFX1NVQlRSQUNUJywgb3Bjb2RlPTU2LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xMDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTVE9SRV9GQVNUJywgb3Bjb2RlPTEyNSwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MTAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MTA2LCBzdGFydHNfbGluZT0xNCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPTYsIGFyZ3JlcHI9JzYnLCBvZmZzZXQ9MTA5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz00LCBhcmd2YWw9Jz4nLCBhcmdyZXByPSc+Jywgb2Zmc2V0PTExMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTEyNCwgYXJndmFsPTEyNCwgYXJncmVwcj0nJywgb2Zmc2V0PTExNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTExOCwgc3RhcnRzX2xpbmU9MTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MCwgYXJndmFsPTEyNCwgYXJncmVwcj0ndG8gMTI0Jywgb2Zmc2V0PTEyMSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEyNCwgc3RhcnRzX2xpbmU9MTYsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTQsIGFyZ3JlcHI9JzQnLCBvZmZzZXQ9MTI3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz0wLCBhcmd2YWw9JzwnLCBhcmdyZXByPSc8Jywgb2Zmc2V0PTEzMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCUkVBS19MT09QJywgb3Bjb2RlPTgwLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xMzYsIHN0YXJ0c19saW5lPTE3LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTM3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTQwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNDMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0xNDQsIHN0YXJ0c19saW5lPTE5LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz02LCBhcmd2YWw9J1dobyBsZXQgbG9sY2F0eiBpbnRvIHRoaXMgdGVzdCBzdWl0ZT8nLCBhcmdyZXByPSInV2hvIGxldCBsb2xjYXR6IGludG8gdGhpcyB0ZXN0IHN1aXRlPyciLCBvZmZzZXQ9MTQ3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0xNTAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE1Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX0ZJTkFMTFknLCBvcGNvZGU9MTIyLCBhcmc9NzIsIGFyZ3ZhbD0yMjksIGFyZ3JlcHI9J3RvIDIyOScsIG9mZnNldD0xNTQsIHN0YXJ0c19saW5lPTIwLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9FWENFUFQnLCBvcGNvZGU9MTIxLCBhcmc9MTIsIGFyZ3ZhbD0xNzIsIGFyZ3JlcHI9J3RvIDE3MicsIG9mZnNldD0xNTcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTE2MCwgc3RhcnRzX2xpbmU9MjEsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTcsIGFyZ3ZhbD0wLCBhcmdyZXByPScwJywgb2Zmc2V0PTE2Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0JJTkFSWV9UUlVFX0RJVklERScsIG9wY29kZT0yNywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0yOCwgYXJndmFsPTIwMCwgYXJncmVwcj0ndG8gMjAwJywgb2Zmc2V0PTE2OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0RVUF9UT1AnLCBvcGNvZGU9NCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTcyLCBzdGFydHNfbGluZT0yMiwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MiwgYXJndmFsPSdaZXJvRGl2aXNpb25FcnJvcicsIGFyZ3JlcHI9J1plcm9EaXZpc2lvbkVycm9yJywgb2Zmc2V0PTE3Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MTAsIGFyZ3ZhbD0nZXhjZXB0aW9uIG1hdGNoJywgYXJncmVwcj0nZXhjZXB0aW9uIG1hdGNoJywgb2Zmc2V0PTE3Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTE5OSwgYXJndmFsPTE5OSwgYXJncmVwcj0nJywgb2Zmc2V0PTE3OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTQ0LCBzdGFydHNfbGluZT03LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTQ3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz00LCBhcmd2YWw9Jz4nLCBhcmdyZXByPSc+Jywgb2Zmc2V0PTUwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTUzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlJFQUtfTE9PUCcsIG9wY29kZT04MCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTYsIHN0YXJ0c19saW5lPTgsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD01Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NjAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD02MSwgc3RhcnRzX2xpbmU9MTAsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nSSBjYW4gaGF6IGVsc2UgY2xhdXNlPycsIGFyZ3JlcHI9IidJIGNhbiBoYXogZWxzZSBjbGF1c2U/JyIsIG9mZnNldD02NCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NjcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTcwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfTE9PUCcsIG9wY29kZT0xMjAsIGFyZz02OCwgYXJndmFsPTE0MiwgYXJncmVwcj0ndG8gMTQyJywgb2Zmc2V0PTcxLCBzdGFydHNfbGluZT0xMSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9NzQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTEzMSwgYXJndmFsPTEzMSwgYXJncmVwcj0nJywgb2Zmc2V0PTc3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTgwLCBzdGFydHNfbGluZT0xMiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD04Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9ODksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD05MCwgc3RhcnRzX2xpbmU9MTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTkzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSU5QTEFDRV9TVUJUUkFDVCcsIG9wY29kZT01NiwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9OTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTVE9SRV9GQVNUJywgb3Bjb2RlPTEyNSwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9OTcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMDAsIHN0YXJ0c19saW5lPTE0LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD0xMDMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTQsIGFyZ3ZhbD0nPicsIGFyZ3JlcHI9Jz4nLCBvZmZzZXQ9MTA2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTE1LCBhcmd2YWw9MTE1LCBhcmdyZXByPScnLCBvZmZzZXQ9MTA5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz03NCwgYXJndmFsPTc0LCBhcmdyZXByPScnLCBvZmZzZXQ9MTEyLCBzdGFydHNfbGluZT0xNSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTExNSwgc3RhcnRzX2xpbmU9MTYsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTQsIGFyZ3JlcHI9JzQnLCBvZmZzZXQ9MTE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz0wLCBhcmd2YWw9JzwnLCBhcmdyZXByPSc8Jywgb2Zmc2V0PTEyMSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTc0LCBhcmd2YWw9NzQsIGFyZ3JlcHI9JycsIG9mZnNldD0xMjQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCUkVBS19MT09QJywgb3Bjb2RlPTgwLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xMjcsIHN0YXJ0c19saW5lPTE3LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz03NCwgYXJndmFsPTc0LCBhcmdyZXByPScnLCBvZmZzZXQ9MTI4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xMzEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0xMzIsIHN0YXJ0c19saW5lPTE5LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz02LCBhcmd2YWw9J1dobyBsZXQgbG9sY2F0eiBpbnRvIHRoaXMgdGVzdCBzdWl0ZT8nLCBhcmdyZXByPSInV2hvIGxldCBsb2xjYXR6IGludG8gdGhpcyB0ZXN0IHN1aXRlPyciLCBvZmZzZXQ9MTM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0xMzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE0MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX0ZJTkFMTFknLCBvcGNvZGU9MTIyLCBhcmc9NzMsIGFyZ3ZhbD0yMTgsIGFyZ3JlcHI9J3RvIDIxOCcsIG9mZnNldD0xNDIsIHN0YXJ0c19saW5lPTIwLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9FWENFUFQnLCBvcGNvZGU9MTIxLCBhcmc9MTIsIGFyZ3ZhbD0xNjAsIGFyZ3JlcHI9J3RvIDE2MCcsIG9mZnNldD0xNDUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTE0OCwgc3RhcnRzX2xpbmU9MjEsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTcsIGFyZ3ZhbD0wLCBhcmdyZXByPScwJywgb2Zmc2V0PTE1MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JJTkFSWV9UUlVFX0RJVklERScsIG9wY29kZT0yNywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTU0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE1Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0yOCwgYXJndmFsPTE4OCwgYXJncmVwcj0ndG8gMTg4Jywgb2Zmc2V0PTE1Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0RVUF9UT1AnLCBvcGNvZGU9NCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTYwLCBzdGFydHNfbGluZT0yMiwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MiwgYXJndmFsPSdaZXJvRGl2aXNpb25FcnJvcicsIGFyZ3JlcHI9J1plcm9EaXZpc2lvbkVycm9yJywgb2Zmc2V0PTE2MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MTAsIGFyZ3ZhbD0nZXhjZXB0aW9uIG1hdGNoJywgYXJncmVwcj0nZXhjZXB0aW9uIG1hdGNoJywgb2Zmc2V0PTE2NCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTE4NywgYXJndmFsPTE4NywgYXJncmVwcj0nJywgb2Zmc2V0PTE2Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTcwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNzEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE3Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0xNzMsIHN0YXJ0c19saW5lPTIzLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz04LCBhcmd2YWw9J0hlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4nLCBhcmdyZXByPSInSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLiciLCBvZmZzZXQ9MTc2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0xNzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKICAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTg1LCBzdGFydHNfbGluZT0yMywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9OCwgYXJndmFsPSdIZXJlIHdlIGdvLCBoZXJlIHdlIGdvLCBoZXJlIHdlIGdvLi4uJywgYXJncmVwcj0iJ0hlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4nIiwgb2Zmc2V0PTE4OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTkxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfRVhDRVBUJywgb3Bjb2RlPTg5LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjYsIGFyZ3ZhbD0yMjUsIGFyZ3JlcHI9J3RvIDIyNScsIG9mZnNldD0xOTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yMDAsIHN0YXJ0c19saW5lPTI1LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9XSVRIJywgb3Bjb2RlPTE0MywgYXJnPTE3LCBhcmd2YWw9MjIzLCBhcmdyZXByPSd0byAyMjMnLCBvZmZzZXQ9MjAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0xLCBhcmd2YWw9J2RvZGd5JywgYXJncmVwcj0nZG9kZ3knLCBvZmZzZXQ9MjA2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIwOSwgc3RhcnRzX2xpbmU9MjYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTksIGFyZ3ZhbD0nTmV2ZXIgcmVhY2ggdGhpcycsIGFyZ3JlcHI9IidOZXZlciByZWFjaCB0aGlzJyIsIG9mZnNldD0yMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J1dJVEhfQ0xFQU5VUCcsIG9wY29kZT04MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjIzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjI2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIyOSwgc3RhcnRzX2xpbmU9MjgsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MTAsIGFyZ3ZhbD0iT0ssIG5vdyB3ZSdyZSBkb25lIiwgYXJncmVwcj0nIk9LLCBub3cgd2VcJ3JlIGRvbmUiJywgb2Zmc2V0PTIzMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAotICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCi0gIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yNDAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKLSAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI0Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9FWENFUFQnLCBvcGNvZGU9ODksIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0yNywgYXJndmFsPTIxNCwgYXJncmVwcj0ndG8gMjE0Jywgb2Zmc2V0PTE4NCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0VORF9GSU5BTExZJywgb3Bjb2RlPTg4LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTE4OCwgc3RhcnRzX2xpbmU9MjUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX1dJVEgnLCBvcGNvZGU9MTQzLCBhcmc9MTcsIGFyZ3ZhbD0yMTEsIGFyZ3JlcHI9J3RvIDIxMScsIG9mZnNldD0xOTEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTVE9SRV9GQVNUJywgb3Bjb2RlPTEyNSwgYXJnPTEsIGFyZ3ZhbD0nZG9kZ3knLCBhcmdyZXByPSdkb2RneScsIG9mZnNldD0xOTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTk3LCBzdGFydHNfbGluZT0yNiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9OSwgYXJndmFsPSdOZXZlciByZWFjaCB0aGlzJywgYXJncmVwcj0iJ05ldmVyIHJlYWNoIHRoaXMnIiwgb2Zmc2V0PTIwMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMDYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIwNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjA4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nV0lUSF9DTEVBTlVQX1NUQVJUJywgb3Bjb2RlPTgxLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1dJVEhfQ0xFQU5VUF9GSU5JU0gnLCBvcGNvZGU9ODIsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIxMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0VORF9GSU5BTExZJywgb3Bjb2RlPTg4LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIxNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yMTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MjE4LCBzdGFydHNfbGluZT0yOCwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xMCwgYXJndmFsPSJPSywgbm93IHdlJ3JlIGRvbmUiLCBhcmdyZXByPSciT0ssIG5vdyB3ZVwncmUgZG9uZSInLCBvZmZzZXQ9MjIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0yMjQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIyNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0VORF9GSU5BTExZJywgb3Bjb2RlPTg4LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjMyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCiBdCiAKICMgT25lIGxhc3QgcGllY2Ugb2YgaW5zcGVjdCBmb2RkZXIgdG8gY2hlY2sgdGhlIGRlZmF1bHQgbGluZSBudW1iZXIgaGFuZGxpbmcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQppbmRleCA5MjkyZDkyLi4zMzE2M2I5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CkBAIC00LDYgKzQsNyBAQAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBkb2N0ZXN0CitpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIApAQCAtMzIzLDcgKzMyNCw3IEBACiAgICAgPj4+IHRlc3QubGluZW5vICsgZTIubGluZW5vCiAgICAgMjYKIAotSWYgdGhlIGRvY3N0cmluZyBjb250YWlucyBpbmNvbnNpc3RhbnQgbGVhZGluZyB3aGl0ZXNwYWNlIGluIHRoZQorSWYgdGhlIGRvY3N0cmluZyBjb250YWlucyBpbmNvbnNpc3RlbnQgbGVhZGluZyB3aGl0ZXNwYWNlIGluIHRoZQogZXhwZWN0ZWQgb3V0cHV0IG9mIGFuIGV4YW1wbGUsIHRoZW4gYERvY1Rlc3RgIHdpbGwgcmFpc2UgYSBWYWx1ZUVycm9yOgogCiAgICAgPj4+IGRvY3N0cmluZyA9IHInJycKQEAgLTQzNCw3ICs0MzUsNyBAQAogICAgID4+PiB0ZXN0cyA9IGZpbmRlci5maW5kKHNhbXBsZV9mdW5jKQogCiAgICAgPj4+IHByaW50KHRlc3RzKSAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICBbPERvY1Rlc3Qgc2FtcGxlX2Z1bmMgZnJvbSAuLi46MTggKDEgZXhhbXBsZSk+XQorICAgIFs8RG9jVGVzdCBzYW1wbGVfZnVuYyBmcm9tIC4uLjoxOSAoMSBleGFtcGxlKT5dCiAKIFRoZSBleGFjdCBuYW1lIGRlcGVuZHMgb24gaG93IHRlc3RfZG9jdGVzdCB3YXMgaW52b2tlZCwgc28gYWxsb3cgZm9yCiBsZWFkaW5nIHBhdGggY29tcG9uZW50cy4KQEAgLTY1OCw3ICs2NTksNyBAQAogCiAgICAgPj4+IGltcG9ydCBidWlsdGlucwogICAgID4+PiB0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoYnVpbHRpbnMpCi0gICAgPj4+IDc5MCA8IGxlbih0ZXN0cykgPCA4MDAgIyBhcHByb3hpbWF0ZSBudW1iZXIgb2Ygb2JqZWN0cyB3aXRoIGRvY3N0cmluZ3MKKyAgICA+Pj4gNzkwIDwgbGVuKHRlc3RzKSA8IDgxMCAjIGFwcHJveGltYXRlIG51bWJlciBvZiBvYmplY3RzIHdpdGggZG9jc3RyaW5ncwogICAgIFRydWUKICAgICA+Pj4gcmVhbF90ZXN0cyA9IFt0IGZvciB0IGluIHRlc3RzIGlmIGxlbih0LmV4YW1wbGVzKSA+IDBdCiAgICAgPj4+IGxlbihyZWFsX3Rlc3RzKSAjIG9iamVjdHMgdGhhdCBhY3R1YWxseSBoYXZlIGRvY3Rlc3RzCkBAIC0yMDk2LDIyICsyMDk3LDkgQEAKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQogICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0wIGVycm9ycz0wIGZhaWx1cmVzPTA+CiAKLSAgICAgICBIb3dldmVyLCBpZiBEb2NUZXN0U3VpdGUgZmluZHMgbm8gZG9jc3RyaW5ncywgaXQgcmFpc2VzIGFuIGVycm9yOgorICAgICAgIFRoZSBtb2R1bGUgbmVlZCBub3QgY29udGFpbiBhbnkgZG9jc3RyaW5ncyBlaXRoZXI6CiAKLSAgICAgICAgID4+PiB0cnk6Ci0gICAgICAgICAuLi4gICAgIGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0X25vX2RvY3N0cmluZ3MnKQotICAgICAgICAgLi4uIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6Ci0gICAgICAgICAuLi4gICAgIGVycm9yID0gZQotCi0gICAgICAgICA+Pj4gcHJpbnQoZXJyb3IuYXJnc1sxXSkKLSAgICAgICAgIGhhcyBubyBkb2NzdHJpbmdzCi0KLSAgICAgICBZb3UgY2FuIHByZXZlbnQgdGhpcyBlcnJvciBieSBwYXNzaW5nIGEgRG9jVGVzdEZpbmRlciBpbnN0YW5jZSB3aXRoCi0gICAgICAgdGhlIGBleGNsdWRlX2VtcHR5YCBrZXl3b3JkIGFyZ3VtZW50IHNldCB0byBGYWxzZToKLQotICAgICAgICAgPj4+IGZpbmRlciA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcihleGNsdWRlX2VtcHR5PUZhbHNlKQotICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jc3RyaW5ncycsCi0gICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2ZpbmRlcj1maW5kZXIpCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdF9ub19kb2NzdHJpbmdzJykKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQogICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0wIGVycm9ycz0wIGZhaWx1cmVzPTA+CiAKQEAgLTIxMjEsNiArMjEwOSwyMiBAQAogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCiAgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KIAorICAgICAgIFdlIGNhbiBhbHNvIHByb3ZpZGUgYSBEb2NUZXN0RmluZGVyOgorCisgICAgICAgICA+Pj4gZmluZGVyID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9maW5kZXI9ZmluZGVyKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKworICAgICAgIFRoZSBEb2NUZXN0RmluZGVyIG5lZWQgbm90IHJldHVybiBhbnkgdGVzdHM6CisKKyAgICAgICAgID4+PiBmaW5kZXIgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKQorICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jc3RyaW5ncycsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZmluZGVyPWZpbmRlcikKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0wIGVycm9ycz0wIGZhaWx1cmVzPTA+CisKICAgICAgICBXZSBjYW4gc3VwcGx5IGdsb2JhbCB2YXJpYWJsZXMuICBJZiB3ZSBwYXNzIGdsb2JzLCB0aGV5IHdpbGwgYmUKICAgICAgICB1c2VkIGluc3RlYWQgb2YgdGhlIG1vZHVsZSBnbG9iYWxzLiAgSGVyZSB3ZSdsbCBwYXNzIGFuIGVtcHR5CiAgICAgICAgZ2xvYmFscywgdHJpZ2dlcmluZyBhbiBleHRyYSBlcnJvcjoKQEAgLTIxNjgsNyArMjE3Miw3IEBACiAgICAgICAgICA+Pj4gdGVzdC50ZXN0X2RvY3Rlc3Quc2lsbHlTZXR1cAogICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAgLi4uCi0gICAgICAgICBBdHRyaWJ1dGVFcnJvcjogJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NpbGx5U2V0dXAnCisgICAgICAgICBBdHRyaWJ1dGVFcnJvcjogbW9kdWxlICd0ZXN0LnRlc3RfZG9jdGVzdCcgaGFzIG5vIGF0dHJpYnV0ZSAnc2lsbHlTZXR1cCcKIAogICAgICAgIFRoZSBzZXRVcCBhbmQgdGVhckRvd24gZnVuY3Rpb25zIGFyZSBwYXNzZWQgdGVzdCBvYmplY3RzLiBIZXJlCiAgICAgICAgd2UnbGwgdXNlIHRoZSBzZXRVcCBmdW5jdGlvbiB0byBzdXBwbHkgdGhlIG1pc3NpbmcgdmFyaWFibGUgeToKQEAgLTIzMTQsNyArMjMxOCw3IEBACiAgICAgICAgICA+Pj4gdGVzdC50ZXN0X2RvY3Rlc3Quc2lsbHlTZXR1cAogICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAgLi4uCi0gICAgICAgICBBdHRyaWJ1dGVFcnJvcjogJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NpbGx5U2V0dXAnCisgICAgICAgICBBdHRyaWJ1dGVFcnJvcjogbW9kdWxlICd0ZXN0LnRlc3RfZG9jdGVzdCcgaGFzIG5vIGF0dHJpYnV0ZSAnc2lsbHlTZXR1cCcKIAogICAgICAgIFRoZSBzZXRVcCBhbmQgdGVhckRvd24gZnVuY3Rpb25zIGFyZSBwYXNzZWQgdGVzdCBvYmplY3RzLgogICAgICAgIEhlcmUsIHdlJ2xsIHVzZSBhIHNldFVwIGZ1bmN0aW9uIHRvIHNldCB0aGUgZmF2b3JpdGUgY29sb3IgaW4KQEAgLTIzNjEsNiArMjM2NSwyMiBAQAogICAgICAgZm9vIFxuCiAgICAgIiIiCiAKK2NsYXNzIFdyYXBwZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMpOgorICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgIGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcihzZWxmLCBmdW5jKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZnVuYygqYXJncywgKiprd2FyZ3MpCisKK0BXcmFwcGVyCitkZWYgdGVzdF9sb29rX2luX3Vud3JhcHBlZCgpOgorICAgICIiIgorICAgIERvY3N0cmluZ3MgaW4gd3JhcHBlZCBmdW5jdGlvbnMgbXVzdCBiZSBkZXRlY3RlZCBhcyB3ZWxsLgorCisgICAgPj4+ICdvbmUgb3RoZXIgdGVzdCcKKyAgICAnb25lIG90aGVyIHRlc3QnCisgICAgIiIiCiAKIGRlZiB0ZXN0X3VuaXR0ZXN0X3JlcG9ydGZsYWdzKCk6CiAgICAgIiIiRGVmYXVsdCB1bml0dGVzdCByZXBvcnRpbmcgZmxhZ3MgY2FuIGJlIHNldCB0byBjb250cm9sIHJlcG9ydGluZwpAQCAtMjYyNyw3ICsyNjQ3LDcgQEAKICAgICA+Pj4gd2l0aCBvcGVuKGZuLCAnd2InKSBhcyBmOgogICAgIC4uLiAgICBmLndyaXRlKGInVGVzdDpcclxuXHJcbiAgPj4+IHggPSAxICsgMVxyXG5cclxuRG9uZS5cclxuJykKICAgICAzNQotICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKGZuLCBGYWxzZSkKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZShmbiwgbW9kdWxlX3JlbGF0aXZlPUZhbHNlLCB2ZXJib3NlPUZhbHNlKQogICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKICAgICA+Pj4gb3MucmVtb3ZlKGZuKQogCkBAIC0yNjM3LDcgKzI2NTcsNyBAQAogICAgID4+PiB3aXRoIG9wZW4oZm4sICd3YicpIGFzIGY6CiAgICAgLi4uICAgICBmLndyaXRlKGInVGVzdDpcblxuICA+Pj4geCA9IDEgKyAxXG5cbkRvbmUuXG4nKQogICAgIDMwCi0gICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoZm4sIEZhbHNlKQorICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKGZuLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UsIHZlcmJvc2U9RmFsc2UpCiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQogICAgID4+PiBvcy5yZW1vdmUoZm4pCiAKQEAgLTI2OTksMTggKzI3MTksMTIgQEAKICAgICA+Pj4gZGVmIG5vcm1hbGl6ZShzKToKICAgICAuLi4gICAgIHJldHVybiAnXG4nLmpvaW4ocy5kZWNvZGUoKS5zcGxpdGxpbmVzKCkpCiAKLU5vdGU6IHdlIGFsc28gcGFzcyBURVJNPScnIHRvIGFsbCB0aGUgYXNzZXJ0X3B5dGhvbiBjYWxscyB0byBhdm9pZCBhIGJ1ZwotaW4gdGhlIHJlYWRsaW5lIGxpYnJhcnkgdGhhdCBpcyB0cmlnZ2VyZWQgaW4gdGhlc2UgdGVzdHMgYmVjYXVzZSB3ZSBhcmUKLXJ1bm5pbmcgdGhlbSBpbiBhIG5ldyBweXRob24gcHJvY2Vzcy4gIFNlZToKLQotICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXJlYWRsaW5lLzIwMTMtMDYvbXNnMDAwMDAuaHRtbAotCiBXaXRoIHRob3NlIHByZWxpbWluYXJpZXMgb3V0IG9mIHRoZSB3YXksIHdlJ2xsIHN0YXJ0IHdpdGggYSBmaWxlIHdpdGggdHdvCiBzaW1wbGUgdGVzdHMgYW5kIG5vIGVycm9ycy4gIFdlJ2xsIHJ1biBib3RoIHRoZSB1bmFkb3JuZWQgZG9jdGVzdCBjb21tYW5kLCBhbmQKIHRoZSB2ZXJib3NlIHZlcnNpb24sIGFuZCB0aGVuIGNoZWNrIHRoZSBvdXRwdXQ6CiAKLSAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCi0gICAgPj4+IHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHRtcGRpcjoKKyAgICA+Pj4gZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHNjcmlwdF9oZWxwZXIsIHRlbXBfZGlyCisgICAgPj4+IHdpdGggdGVtcF9kaXIoKSBhcyB0bXBkaXI6CiAgICAgLi4uICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdteWZpbGUuZG9jJykKICAgICAuLi4gICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBmOgogICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdUaGlzIGlzIGEgdmVyeSBzaW1wbGUgdGVzdCBmaWxlLlxuJykKQEAgLTI3MjEsOSArMjczNSw5IEBACiAgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1xuJykKICAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnQW5kIHRoYXQgaXMgaXQuXG4nKQogICAgIC4uLiAgICAgcmMxLCBvdXQxLCBlcnIxID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKAotICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsIGZuLCBURVJNPScnKQorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsIGZuKQogICAgIC4uLiAgICAgcmMyLCBvdXQyLCBlcnIyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKAotICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctdicsIGZuLCBURVJNPScnKQorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctdicsIGZuKQogCiBXaXRoIG5vIGFyZ3VtZW50cyBhbmQgcGFzc2luZyB0ZXN0cywgd2Ugc2hvdWxkIGdldCBubyBvdXRwdXQ6CiAKQEAgLTI3NTUsMTMgKzI3NjksMTMgQEAKIHdpdGggdHdvIHRlc3RzLCBib3RoIG9mIHRoZSBmaWxlcyBoYXZpbmcgImVycm9ycyIgaW4gdGhlIHRlc3RzIHRoYXQgY2FuIGJlIG1hZGUKIG5vbi1lcnJvcnMgYnkgYXBwbHlpbmcgdGhlIGFwcHJvcHJpYXRlIGRvY3Rlc3Qgb3B0aW9ucyB0byB0aGUgcnVuIChFTExJUFNJUyBpbgogdGhlIGZpcnN0IGZpbGUsIE5PUk1BTElaRV9XSElURVNQQUNFIGluIHRoZSBzZWNvbmQpLiAgVGhpcyBjb21iaW5hdGlvbiB3aWxsCi1hbGxvdyB0byB0aG9yb3VnaGx5IHRlc3QgdGhlIC1mIGFuZCAtbyBmbGFncywgYXMgd2VsbCBhcyB0aGUgZG9jdGVzdCBjb21tYW5kJ3MKK2FsbG93IHRob3JvdWdobHkgdGVzdGluZyB0aGUgLWYgYW5kIC1vIGZsYWdzLCBhcyB3ZWxsIGFzIHRoZSBkb2N0ZXN0IGNvbW1hbmQncwogYWJpbGl0eSB0byBwcm9jZXNzIG1vcmUgdGhhbiBvbmUgZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCwgc2luY2UgdGhlIHNlY29uZAogZmlsZSBlbmRzIGluICcucHknLCBpdHMgaGFuZGxpbmcgb2YgcHl0aG9uIG1vZHVsZSBmaWxlcyAoYXMgb3Bwb3NlZCB0byBzdHJhaWdodAogdGV4dCBmaWxlcykuCiAKLSAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCi0gICAgPj4+IHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHRtcGRpcjoKKyAgICA+Pj4gZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHNjcmlwdF9oZWxwZXIsIHRlbXBfZGlyCisgICAgPj4+IHdpdGggdGVtcF9kaXIoKSBhcyB0bXBkaXI6CiAgICAgLi4uICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdteWZpbGUuZG9jJykKICAgICAuLi4gICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBmOgogICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdUaGlzIGlzIGFub3RoZXIgc2ltcGxlIHRlc3QgZmlsZS5cbicpCkBAIC0yNzg2LDE3ICsyODAwLDE3IEBACiAgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIFwiXCJcIlxuJykKICAgICAuLi4gICAgIGltcG9ydCBzaHV0aWwKICAgICAuLi4gICAgIHJjMSwgb3V0MSwgZXJyMSA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAotICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsIGZuLCBmbjIsIFRFUk09JycpCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIGZuMikKICAgICAuLi4gICAgIHJjMiwgb3V0MiwgZXJyMiA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKLSAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLCBmbiwgVEVSTT0nJykKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLCBmbikKICAgICAuLi4gICAgIHJjMywgb3V0MywgZXJyMyA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKICAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnRUxMSVBTSVMnLAotICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yKQogICAgIC4uLiAgICAgcmM0LCBvdXQ0LCBlcnI0ID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCi0gICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1mJywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLWYnLCBmbiwgZm4yKQogICAgIC4uLiAgICAgcmM1LCBvdXQ1LCBlcnI1ID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKAogICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctdicsICctbycsICdFTExJUFNJUycsCi0gICAgLi4uICAgICAgICAgICAgICctbycsICdOT1JNQUxJWkVfV0hJVEVTUEFDRScsIGZuLCBmbjIsIFRFUk09JycpCisgICAgLi4uICAgICAgICAgICAgICctbycsICdOT1JNQUxJWkVfV0hJVEVTUEFDRScsIGZuLCBmbjIpCiAKIE91ciBmaXJzdCB0ZXN0IHJ1biB3aWxsIHNob3cgdGhlIGVycm9ycyBmcm9tIHRoZSBmaXJzdCBmaWxlIChkb2N0ZXN0IHN0b3BzIGlmIGEKIGZpbGUgaGFzIGVycm9ycykuICBOb3RlIHRoYXQgZG9jdGVzdCB0ZXN0LXJ1biBlcnJvciBvdXRwdXQgYXBwZWFycyBvbiBzdGRvdXQsCkBAIC0yOTAyLDcgKzI5MTYsNyBAQAogSW52YWxpZCBmaWxlIG5hbWU6CiAKICAgICA+Pj4gcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCi0gICAgLi4uICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnbm9zdWNoZmlsZScsIFRFUk09JycpCisgICAgLi4uICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnbm9zdWNoZmlsZScpCiAgICAgPj4+IHJjLCBvdXQKICAgICAoMSwgYicnKQogICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCkBAIC0yOTEzLDcgKzI5MjcsNyBAQAogSW52YWxpZCBkb2N0ZXN0IG9wdGlvbjoKIAogICAgID4+PiByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgKLSAgICAuLi4gICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctbycsICdub3N1Y2hvcHRpb24nLCBURVJNPScnKQorICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ25vc3VjaG9wdGlvbicpCiAgICAgPj4+IHJjLCBvdXQKICAgICAoMiwgYicnKQogICAgID4+PiBwcmludChub3JtYWxpemUoZXJyKSkgICAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK0VMTElQU0lTCkBAIC0yOTI3LDcgKzI5NDEsNyBAQAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgIyBDaGVjayB0aGUgZG9jdGVzdCBjYXNlcyBpbiBkb2N0ZXN0IGl0c2VsZjoKLSAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KGRvY3Rlc3QsIHZlcmJvc2l0eT1UcnVlKQorICAgIHJldCA9IHN1cHBvcnQucnVuX2RvY3Rlc3QoZG9jdGVzdCwgdmVyYm9zaXR5PVRydWUpCiAgICAgIyBDaGVjayB0aGUgZG9jdGVzdCBjYXNlcyBkZWZpbmVkIGhlcmU6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2RvY3Rlc3QKICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZG9jdGVzdCwgdmVyYm9zaXR5PVRydWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5CmluZGV4IDA2MTYxZjIuLmU2Y2E5NjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5CkBAIC04NywxMCArODcsMTEgQEAKICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPShzZWxmLmV2dCwgMSkpLnN0YXJ0KCkKIAogICAgICAgICAjIHdhaXQgZm9yIHBvcnQgdG8gYmUgYXNzaWduZWQKLSAgICAgICAgbiA9IDEwMDAKLSAgICAgICAgd2hpbGUgbiA+IDAgYW5kIFBPUlQgaXMgTm9uZToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDEpCi0gICAgICAgICAgICBuIC09IDEKKyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLm1vbm90b25pYygpICsgMTAuMAorICAgICAgICB3aGlsZSBQT1JUIGlzIE5vbmU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEwKQorICAgICAgICAgICAgaWYgdGltZS5tb25vdG9uaWMoKSA+IGRlYWRsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgc2VsZi5jbGllbnQgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbigibG9jYWxob3N0OiVkIiAlIFBPUlQpCiAKQEAgLTIxMiw4ICsyMTMsNSBAQAogICAgICAgICAgICAgcmVzcG9uc2UucmVhZCgpKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChEb2NYTUxSUENIVFRQR0VUU2VydmVyKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R1bW15X3RocmVhZC5weSBiL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkLnB5CmluZGV4IDJmYWZlMWQuLmE2YTI4NTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkLnB5CkBAIC0yNCwxNCArMjQsMTQgQEAKIAogICAgIGRlZiB0ZXN0X2luaXRsb2NrKHNlbGYpOgogICAgICAgICAjTWFrZSBzdXJlIGxvY2tzIHN0YXJ0IGxvY2tlZAotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYubG9jay5sb2NrZWQoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvY2subG9ja2VkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jayBvYmplY3QgaXMgbm90IGluaXRpYWxpemVkIHVubG9ja2VkLiIpCiAKICAgICBkZWYgdGVzdF9yZWxlYXNlKHNlbGYpOgogICAgICAgICAjIFRlc3Qgc2VsZi5sb2NrLnJlbGVhc2UoKQogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZSgpCiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmxvY2subG9ja2VkKCksCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2NrLmxvY2tlZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2sgb2JqZWN0IGRpZCBub3QgcmVsZWFzZSBwcm9wZXJseS4iKQogCiAgICAgZGVmIHRlc3RfaW1wcm9wZXJfcmVsZWFzZShzZWxmKToKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICBkZWYgdGVzdF9jb25kX2FjcXVpcmVfZmFpbChzZWxmKToKICAgICAgICAgI1Rlc3QgYWNxdWlyaW5nIGxvY2tlZCBsb2NrIHJldHVybnMgRmFsc2UKICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmxvY2suYWNxdWlyZSgwKSwKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvY2suYWNxdWlyZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgYSBsb2NrZWQgbG9jayBpbmNvcnJlY3RseSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Y2NlZWRlZC4iKQogCkBAIC01OCw5ICs1OCw5IEBACiAKICAgICBkZWYgdGVzdF91bmNvbmRfYWNxdWlyZV9yZXR1cm5fdmFsKHNlbGYpOgogICAgICAgICAjTWFrZSBzdXJlIHRoYXQgYW4gdW5jb25kaXRpb25hbCBsb2NraW5nIHJldHVybnMgVHJ1ZS4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5hY3F1aXJlKDEpIGlzIFRydWUsCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5sb2NrLmFjcXVpcmUoMSksIFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVW5jb25kaXRpb25hbCBsb2NraW5nIGRpZCBub3QgcmV0dXJuIFRydWUuIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5hY3F1aXJlKCkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmxvY2suYWNxdWlyZSgpLCBUcnVlKQogCiAgICAgZGVmIHRlc3RfdW5jb25kX2FjcXVpcmVfYmxvY2tpbmcoc2VsZik6CiAgICAgICAgICNNYWtlIHN1cmUgdGhhdCB1bmNvbmRpdGlvbmFsIGFjcXVpcmluZyBvZiBhIGxvY2tlZCBsb2NrIGJsb2Nrcy4KQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgZW5kX3RpbWUgPSBpbnQodGltZS50aW1lKCkpCiAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCJkb25lIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmRfdGltZSAtIHN0YXJ0X3RpbWUpID49IERFTEFZLAorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChlbmRfdGltZSAtIHN0YXJ0X3RpbWUsIERFTEFZLAogICAgICAgICAgICAgICAgICAgICAgICAgIkJsb2NraW5nIGJ5IHVuY29uZGl0aW9uYWwgYWNxdWlyaW5nIGZhaWxlZC4iKQogCiBjbGFzcyBNaXNjVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICAjVGVzdCBzYW5pdHkgb2YgX3RocmVhZC5nZXRfaWRlbnQoKQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoX3RocmVhZC5nZXRfaWRlbnQoKSwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuZ2V0X2lkZW50KCkgcmV0dXJuZWQgYSBub24taW50ZWdlciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfdGhyZWFkLmdldF9pZGVudCgpICE9IDAsCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoX3RocmVhZC5nZXRfaWRlbnQoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICJfdGhyZWFkLmdldF9pZGVudCgpIHJldHVybmVkIDAiKQogCiAgICAgZGVmIHRlc3RfTG9ja1R5cGUoc2VsZik6CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICAgICAgdGltZS5zbGVlcChERUxBWSkKICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ2RvbmUnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdGluZ19xdWV1ZS5xc2l6ZSgpID09IHRocmVhZF9jb3VudCwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0aW5nX3F1ZXVlLnFzaXplKCksIHRocmVhZF9jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICJOb3QgYWxsICVzIHRocmVhZHMgZXhlY3V0ZWQgcHJvcGVybHkgYWZ0ZXIgJXMgc2VjLiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgKHRocmVhZF9jb3VudCwgREVMQVkpKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R1bW15X3RocmVhZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkaW5nLnB5CmluZGV4IDZlYzVkYTMuLmEwYzI5NzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkaW5nLnB5CkBAIC01Niw5ICs1Niw1IEBACiAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCdhbGwgdGFza3MgZG9uZScpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChEdW1teVRocmVhZGluZ1Rlc3RDYXNlKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZHluYW1pYy5weSBiL0xpYi90ZXN0L3Rlc3RfZHluYW1pYy5weQppbmRleCBiZWI3YjFjLi41MDgwZWM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2R5bmFtaWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9keW5hbWljLnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBzd2FwX2l0ZW0sIHN3YXBfYXR0cgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHN3YXBfaXRlbSwgc3dhcF9hdHRyCiAKIAogY2xhc3MgUmViaW5kQnVpbHRpbnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMzUsOSArMTM1LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgNykKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJlYmluZEJ1aWx0aW5zVGVzdHMpCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9keW5hbWljY2xhc3NhdHRyaWJ1dGUucHkgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQppbmRleCBiYzZhMzliLi45ZjY5NGQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQpAQCAtNCw3ICs0LDYgQEAKIGltcG9ydCBhYmMKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogZnJvbSB0eXBlcyBpbXBvcnQgRHluYW1pY0NsYXNzQXR0cmlidXRlCiAKIGNsYXNzIFByb3BlcnR5QmFzZShFeGNlcHRpb24pOgpAQCAtMjk3LDggKzI5Niw1IEBACiAKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9laW50ci5weSBiL0xpYi90ZXN0L3Rlc3RfZWludHIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFiYWQ4MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZWludHIucHkKQEAgLTAsMCArMSwzMCBAQAoraW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHNjcmlwdF9oZWxwZXIKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICJwb3NpeCIsICJvbmx5IHN1cHBvcnRlZCBvbiBVbml4IikKK2NsYXNzIEVJTlRSVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJzZXRpdGltZXIiKSwgInJlcXVpcmVzIHNldGl0aW1lcigpIikKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgICMgUnVuIHRoZSB0ZXN0ZXIgaW4gYSBzdWItcHJvY2VzcywgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG9ubHkgb25lCisgICAgICAgICMgdGhyZWFkIChmb3IgcmVsaWFibGUgc2lnbmFsIGRlbGl2ZXJ5KS4KKyAgICAgICAgdGVzdGVyID0gc3VwcG9ydC5maW5kZmlsZSgiZWludHJfdGVzdGVyLnB5Iiwgc3ViZGlyPSJlaW50cmRhdGEiKQorCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsIHRlc3Rlcl0KKyAgICAgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihhcmdzKSBhcyBwcm9jOgorICAgICAgICAgICAgICAgIGV4aXRjb2RlID0gcHJvYy53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sodGVzdGVyKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKaW5kZXggZDAyOGY3NC4uZjdhYzBlMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQpAQCAtMjQ5OCw3ICsyNDk4LDcgQEAKICAgICAgICAgIyBOb3RlIHRoYXQgaXQgaXMgdW5kZWZpbmVkIHdoYXQgd2Ugc2hvdWxkIGRvIGZvciBlcnJvciByZWNvdmVyeSB3aGVuCiAgICAgICAgICMgdGhlcmUgYXJlIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMgb3IgZHVwbGljYXRlIHBhcnRzIGluIGEgc3BsaXQKICAgICAgICAgIyBwYXJ0LiAgV2UgY2hvb3NlIHRvIGlnbm9yZSBhbGwgZHVwbGljYXRlIHBhcmFtZXRlcnMgYWZ0ZXIgdGhlIGZpcnN0Ci0gICAgICAgICMgYW5kIHRvIHRha2UgZHVwbGljYXRlIG9yIG1pc3NpbmcgcmZjIDIyMzEgcGFydHMgaW4gYXBwZXJhbmNlIG9yZGVyLgorICAgICAgICAjIGFuZCB0byB0YWtlIGR1cGxpY2F0ZSBvciBtaXNzaW5nIHJmYyAyMjMxIHBhcnRzIGluIGFwcGVhcmFuY2Ugb3JkZXIuCiAgICAgICAgICMgVGhpcyBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggZ2V0X3BhcmFtJ3MgYmVoYXZpb3IsIGJ1dCB0aGUKICAgICAgICAgIyBkZWNpc2lvbnMgYXJlIGFyYml0cmFyeS4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2FzaWFuX2NvZGVjcy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9hc2lhbl9jb2RlY3MucHkKaW5kZXggMDg5MjY5Zi4uZjljZDdkOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2FzaWFuX2NvZGVjcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfYXNpYW5fY29kZWNzLnB5CkBAIC01LDcgKzUsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKLWZyb20gdGVzdC50ZXN0X2VtYWlsLnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UKK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlCiBmcm9tIGVtYWlsLmNoYXJzZXQgaW1wb3J0IENoYXJzZXQKIGZyb20gZW1haWwuaGVhZGVyIGltcG9ydCBIZWFkZXIsIGRlY29kZV9oZWFkZXIKIGZyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgTWVzc2FnZQpAQCAtMTgsNyArMTgsNyBAQAogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0CiAKIAotDAorCiBjbGFzcyBUZXN0RW1haWxBc2lhbkNvZGVjcyhUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9qYXBhbmVzZV9jb2RlY3Moc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCkBAIC03Nyw2ICs3Nyw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoamhlbGxvLCB1c3RyKQogCiAKLQwKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weQppbmRleCBjZGIwNGU0Li4xNjkwNThlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfY29udGVudG1hbmFnZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC02MjEsNyArNjIxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCiAKICAgICBkZWYgdGVzdF9zZXRfYXBwbGljYXRpb25fb2N0ZXRfc3RyZWFtX3dpdGhfOGJpdF9jdGUoc2VsZik6Ci0gICAgICAgICMgSW4gOGJpdCBtb2RlLCB1bml2ZXJhbCBsaW5lIGVuZCBsb2dpYyBhcHBsaWVzLiAgSXQgaXMgdXAgdG8gdGhlCisgICAgICAgICMgSW4gOGJpdCBtb2RlLCB1bml2ZXJzYWwgbGluZSBlbmQgbG9naWMgYXBwbGllcy4gIEl0IGlzIHVwIHRvIHRoZQogICAgICAgICAjIGFwcGxpY2F0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgbGluZXMgYXJlIHNob3J0IGVub3VnaDsgd2UgZG9uJ3QgY2hlY2suCiAgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQogICAgICAgICBjb250ZW50ID0gYidiXHhGRmd1c1x0Y29uXG50XHJlbnRcbicgKyBiJ3onKjYwICsgYidcbicKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weQppbmRleCA4NGY0ZTM4Li44OTRiODAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC01OTAsNiArNTkwLDE3IEBACiAgICAgICAgIGVxKG1zZy52YWx1ZXMoKSwgWydPbmUgSHVuZHJlZCcsICdUd2VudHknLCAnVGhyZWUnLCAnRWxldmVuJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBtc2cucmVwbGFjZV9oZWFkZXIsICdGb3VydGgnLCAnTWlzc2luZycpCiAKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9kaXNwb3NpdGlvbihzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1zZy5nZXRfY29udGVudF9kaXNwb3NpdGlvbigpKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J3JhbmRvbS5hdmknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9kaXNwb3NpdGlvbigpLCAnYXR0YWNobWVudCcpCisgICAgICAgIG1zZy5yZXBsYWNlX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9kaXNwb3NpdGlvbigpLCAnaW5saW5lJykKKyAgICAgICAgbXNnLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ0lubGluRScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X2Rpc3Bvc2l0aW9uKCksICdpbmxpbmUnKQorCiAgICAgIyB0ZXN0X2RlZmVjdF9oYW5kbGluZzp0ZXN0X2ludmFsaWRfY2hhcnNfaW5fYmFzZTY0X3BheWxvYWQKICAgICBkZWYgdGVzdF9icm9rZW5fYmFzZTY0X3BheWxvYWQoc2VsZik6CiAgICAgICAgIHggPSAnQXdEcDBQNy8veTZMd0tFQWNQYS82UT05JwpAQCAtMTY0MCw2ICsxNjUxLDEwIEBACiAgICAgICAgIG1zZyA9IE1JTUVUZXh0KCdoZWxsbyB0aGVyZScsIF9jaGFyc2V0PSd1cy1hc2NpaScpCiAgICAgICAgIGVxKG1zZy5nZXRfY2hhcnNldCgpLmlucHV0X2NoYXJzZXQsICd1cy1hc2NpaScpCiAgICAgICAgIGVxKG1zZ1snY29udGVudC10eXBlJ10sICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSInKQorICAgICAgICAjIEFsc28gYWNjZXB0IGEgQ2hhcnNldCBpbnN0YW5jZQorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gdGhlcmUnLCBfY2hhcnNldD1DaGFyc2V0KCd1dGYtOCcpKQorICAgICAgICBlcShtc2cuZ2V0X2NoYXJzZXQoKS5pbnB1dF9jaGFyc2V0LCAndXRmLTgnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiJykKIAogICAgIGRlZiB0ZXN0XzdiaXRfaW5wdXQoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMzE2NCwxMCArMzE3OSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5tc2dpZHMgPSBbXQogICAgICAgICAgICAgICAgIGFwcGVuZCA9IHNlbGYubXNnaWRzLmFwcGVuZAogICAgICAgICAgICAgICAgIG1ha2VfbXNnaWQgPSB1dGlscy5tYWtlX21zZ2lkCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBjbG9jayA9IHRpbWUubW9ub3RvbmljCi0gICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBjbG9jayA9IHRpbWUudGltZQorICAgICAgICAgICAgICAgIGNsb2NrID0gdGltZS5tb25vdG9uaWMKICAgICAgICAgICAgICAgICB0ZmluID0gY2xvY2soKSArIDMuMAogICAgICAgICAgICAgICAgIHdoaWxlIGNsb2NrKCkgPCB0ZmluOgogICAgICAgICAgICAgICAgICAgICBhcHBlbmQobWFrZV9tc2dpZChkb21haW49J3Rlc3Rkb21haW4tc3RyaW5nJykpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZ2VuZXJhdG9yLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2dlbmVyYXRvci5weQppbmRleCA4OTE3NDA4Li5iMWNiY2UyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZ2VuZXJhdG9yLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9nZW5lcmF0b3IucHkKQEAgLTIsNiArMiw3IEBACiBpbXBvcnQgdGV4dHdyYXAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBlbWFpbCBpbXBvcnQgbWVzc2FnZV9mcm9tX3N0cmluZywgbWVzc2FnZV9mcm9tX2J5dGVzCitmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQogZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgQnl0ZXNHZW5lcmF0b3IKIGZyb20gZW1haWwgaW1wb3J0IHBvbGljeQogZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UsIHBhcmFtZXRlcml6ZQpAQCAtMTM5LDYgKzE0MCwyOCBAQAogICAgICAgICBnLmZsYXR0ZW4obXNnLCBsaW5lc2VwPSdcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBzZWxmLnR5cChleHBlY3RlZCkpCiAKKyAgICBkZWYgdGVzdF9zZXRfbWFuZ2xlX2Zyb21fdmlhX3BvbGljeShzZWxmKToKKyAgICAgICAgc291cmNlID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIFN1YmplY3Q6IHRlc3QgdGhhdAorICAgICAgICAgICAgIGZyb20gaXMgbWFuZ2VsZCBpbiB0aGUgYm9keSEKKworICAgICAgICAgICAgRnJvbSB0aW1lIHRvIHRpbWUgSSB3cml0ZSBhIHJoeW1lLgorICAgICAgICAgICAgIiIiKQorICAgICAgICB2YXJpYW50cyA9ICgKKyAgICAgICAgICAgIChOb25lLCBUcnVlKSwKKyAgICAgICAgICAgIChwb2xpY3kuY29tcGF0MzIsIFRydWUpLAorICAgICAgICAgICAgKHBvbGljeS5kZWZhdWx0LCBGYWxzZSksCisgICAgICAgICAgICAocG9saWN5LmRlZmF1bHQuY2xvbmUobWFuZ2xlX2Zyb21fPVRydWUpLCBUcnVlKSwKKyAgICAgICAgICAgICkKKyAgICAgICAgZm9yIHAsIG1hbmdsZSBpbiB2YXJpYW50czoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc291cmNlLnJlcGxhY2UoJ0Zyb20gJywgJz5Gcm9tICcpIGlmIG1hbmdsZSBlbHNlIHNvdXJjZQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocG9saWN5PXAsIG1hbmdsZV9mcm9tXz1tYW5nbGUpOgorICAgICAgICAgICAgICAgIG1zZyA9IHNlbGYubXNnbWFrZXIoc2VsZi50eXAoc291cmNlKSkKKyAgICAgICAgICAgICAgICBzID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgICAgICAgICBnID0gc2VsZi5nZW5jbGFzcyhzLCBwb2xpY3k9cCkKKyAgICAgICAgICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBzZWxmLnR5cChleHBlY3RlZCkpCisKIAogY2xhc3MgVGVzdEdlbmVyYXRvcihUZXN0R2VuZXJhdG9yQmFzZSwgVGVzdEVtYWlsQmFzZSk6CiAKQEAgLTE5NCw2ICsyMTcsMjcgQEAKICAgICAgICAgZy5mbGF0dGVuKG1zZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGV4cGVjdGVkKQogCisgICAgZGVmIHRlc3Rfc210cHV0ZjhfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBFbWFpbE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0Zyb20nXSA9ICJQw6FvbG8gPGbFkW9AYmFyLmNvbT4iCisgICAgICAgIG1zZ1snVG8nXSA9ICdEaW5zZGFsZScKKyAgICAgICAgbXNnWydTdWJqZWN0J10gPSAnTnVkZ2UgbnVkZ2UsIHdpbmssIHdpbmsgXHUxRjYwOScKKyAgICAgICAgbXNnLnNldF9jb250ZW50KCJvaCBsw6AgbMOgLCBrbm93IHdoYXQgSSBtZWFuLCBrbm93IHdoYXQgSSBtZWFuPyIpCisgICAgICAgIGV4cGVjdGVkID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIEZyb206IFDDoW9sbyA8ZsWRb0BiYXIuY29tPgorICAgICAgICAgICAgVG86IERpbnNkYWxlCisgICAgICAgICAgICBTdWJqZWN0OiBOdWRnZSBudWRnZSwgd2luaywgd2luayBcdTFGNjA5CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgb2ggbMOgIGzDoCwga25vdyB3aGF0IEkgbWVhbiwga25vdyB3aGF0IEkgbWVhbj8KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpLnJlcGxhY2UoYidcbicsIGInXHJcbicpCisgICAgICAgIHMgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgZyA9IEJ5dGVzR2VuZXJhdG9yKHMsIHBvbGljeT1wb2xpY3kuU01UUFVURjgpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQppbmRleCA1MGUxYTYzLi5kNzgwNDllIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQpAQCAtNzIzLDI0ICs3MjMsMTQgQEAKICAgICBkZWYgdGVzdF9pc19hdHRhY2htZW50KHNlbGYpOgogICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLmlzX2F0dGFjaG1lbnQoKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uaXNfYXR0YWNobWVudCkKICAgICAgICAgbVsnQ29udGVudC1EaXNwb3NpdGlvbiddID0gJ2lubGluZScKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLmlzX2F0dGFjaG1lbnQoKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uaXNfYXR0YWNobWVudCkKICAgICAgICAgbS5yZXBsYWNlX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCgpKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmlzX2F0dGFjaG1lbnQpCiAgICAgICAgIG0ucmVwbGFjZV9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnQXRUYWNoTWVudCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmlzX2F0dGFjaG1lbnQoKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQogICAgICAgICBtLnNldF9wYXJhbSgnZmlsZW5hbWUnLCAnYWJjLnBuZycsICdDb250ZW50LURpc3Bvc2l0aW9uJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCgpKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmlzX2F0dGFjaG1lbnQpCiAKIAogY2xhc3MgVGVzdEVtYWlsTWVzc2FnZShUZXN0RW1haWxNZXNzYWdlQmFzZSwgVGVzdEVtYWlsQmFzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQppbmRleCBlNzk3ZjM2Li43MGFjNGRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKQEAgLTIyLDE1ICsyMiwxOCBAQAogICAgICAgICAnbGluZXNlcCc6ICAgICAgICAgICAgICAgICAgJ1xuJywKICAgICAgICAgJ2N0ZV90eXBlJzogICAgICAgICAgICAgICAgICc4Yml0JywKICAgICAgICAgJ3JhaXNlX29uX2RlZmVjdCc6ICAgICAgICAgIEZhbHNlLAorICAgICAgICAnbWFuZ2xlX2Zyb21fJzogICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgfQogICAgICMgVGhlc2UgZGVmYXVsdCB2YWx1ZXMgYXJlIHRoZSBvbmVzIHNldCBvbiBlbWFpbC5wb2xpY3kuZGVmYXVsdC4KICAgICAjIElmIGFueSBvZiB0aGVzZSBkZWZhdWx0cyBjaGFuZ2UsIHRoZSBkb2NzIG11c3QgYmUgdXBkYXRlZC4KICAgICBwb2xpY3lfZGVmYXVsdHMgPSBjb21wYXQzMl9kZWZhdWx0cy5jb3B5KCkKICAgICBwb2xpY3lfZGVmYXVsdHMudXBkYXRlKHsKKyAgICAgICAgJ3V0ZjgnOiAgICAgICAgICAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAncmFpc2Vfb25fZGVmZWN0JzogICAgICAgICAgRmFsc2UsCiAgICAgICAgICdoZWFkZXJfZmFjdG9yeSc6ICAgICAgICAgICBlbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuaGVhZGVyX2ZhY3RvcnksCiAgICAgICAgICdyZWZvbGRfc291cmNlJzogICAgICAgICAgICAnbG9uZycsCiAgICAgICAgICdjb250ZW50X21hbmFnZXInOiAgICAgICAgICBlbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuY29udGVudF9tYW5hZ2VyLAorICAgICAgICAnbWFuZ2xlX2Zyb21fJzogICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgIH0pCiAKICAgICAjIEZvciBlYWNoIHBvbGljeSB1bmRlciB0ZXN0LCB3ZSBnaXZlIGhlcmUgd2hhdCB3ZSBleHBlY3QgdGhlIGRlZmF1bHRzIHRvCkBAIC00Miw2ICs0NSw5IEBACiAgICAgICAgIGVtYWlsLnBvbGljeS5kZWZhdWx0OiBtYWtlX2RlZmF1bHRzKHBvbGljeV9kZWZhdWx0cywge30pLAogICAgICAgICBlbWFpbC5wb2xpY3kuU01UUDogbWFrZV9kZWZhdWx0cyhwb2xpY3lfZGVmYXVsdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnbGluZXNlcCc6ICdcclxuJ30pLAorICAgICAgICBlbWFpbC5wb2xpY3kuU01UUFVURjg6IG1ha2VfZGVmYXVsdHMocG9saWN5X2RlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydsaW5lc2VwJzogJ1xyXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1dGY4JzogVHJ1ZX0pLAogICAgICAgICBlbWFpbC5wb2xpY3kuSFRUUDogbWFrZV9kZWZhdWx0cyhwb2xpY3lfZGVmYXVsdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnbGluZXNlcCc6ICdcclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXhfbGluZV9sZW5ndGgnOiBOb25lfSksCkBAIC0xNzEsNyArMTc3LDcgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYuTXlEZWZlY3QsICJ0aGUgdGVsbHkgaXMgYnJva2VuIik6CiAgICAgICAgICAgICBzZWxmLk15UG9saWN5KHJhaXNlX29uX2RlZmVjdD1UcnVlKS5oYW5kbGVfZGVmZWN0KGZvbywgZGVmZWN0KQogCi0gICAgZGVmIHRlc3Rfb3ZlcnJpZGVuX3JlZ2lzdGVyX2RlZmVjdF93b3JrcyhzZWxmKToKKyAgICBkZWYgdGVzdF9vdmVycmlkZGVuX3JlZ2lzdGVyX2RlZmVjdF93b3JrcyhzZWxmKToKICAgICAgICAgZm9vID0gc2VsZi5NeU9iaigpCiAgICAgICAgIGRlZmVjdDEgPSBzZWxmLk15RGVmZWN0KCJvbmUiKQogICAgICAgICBteV9wb2xpY3kgPSBzZWxmLk15UG9saWN5KCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKaW5kZXggMTljZjY0Zi4uZTcyYTE0NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKQEAgLTEwLDEwICsxMCw5IEBACiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KLWZyb20gdHlwZXMgaW1wb3J0IExpc3RUeXBlCiAKLWZyb20gZW1haWwudGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogaW1wb3J0IGVtYWlsCiBmcm9tIGVtYWlsIGltcG9ydCBfX2ZpbGVfXyBhcyB0ZXN0ZmlsZQpAQCAtMjgsMTAgKzI3LDEwIEBACiB0cnk6CiAgICAgb3BlbmZpbGUoJ2NyaXNwaW4tdG9ydHVyZS50eHQnKQogZXhjZXB0IE9TRXJyb3I6Ci0gICAgcmFpc2UgVGVzdFNraXBwZWQKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdAogCiAKLQwKKwogY2xhc3MgVG9ydHVyZUJhc2UoVGVzdEVtYWlsQmFzZSk6CiAgICAgZGVmIF9tc2dvYmooc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBmcCA9IG9wZW5maWxlKGZpbGVuYW1lKQpAQCAtNDIsNyArNDEsNyBAQAogICAgICAgICByZXR1cm4gbXNnCiAKIAotDAorCiBjbGFzcyBUZXN0Q3Jpc3BpblRvcnR1cmUoVG9ydHVyZUJhc2UpOgogICAgICMgTWFyayBDcmlzcGluJ3MgdG9ydHVyZSB0ZXN0IGZyb20gdGhlIFNxdWlycmVsTWFpbCBwcm9qZWN0CiAgICAgZGVmIHRlc3RfbW9uZG9fbWVzc2FnZShzZWxmKToKQEAgLTUwLDcgKzQ5LDcgQEAKICAgICAgICAgbmVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignY3Jpc3Bpbi10b3J0dXJlLnR4dCcpCiAgICAgICAgIHBheWxvYWQgPSBtc2cuZ2V0X3BheWxvYWQoKQotICAgICAgICBlcSh0eXBlKHBheWxvYWQpLCBMaXN0VHlwZSkKKyAgICAgICAgZXEodHlwZShwYXlsb2FkKSwgbGlzdCkKICAgICAgICAgZXEobGVuKHBheWxvYWQpLCAxMikKICAgICAgICAgZXEobXNnLnByZWFtYmxlLCBOb25lKQogICAgICAgICBlcShtc2cuZXBpbG9ndWUsICdcbicpCkBAIC0xMTMsNyArMTEyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvL3gtc3VuCiAiIiIpCiAKLQwKIGRlZiBfdGVzdGNsYXNzZXMoKToKICAgICBtb2QgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KICAgICByZXR1cm4gW2dldGF0dHIobW9kLCBuYW1lKSBmb3IgbmFtZSBpbiBkaXIobW9kKSBpZiBuYW1lLnN0YXJ0c3dpdGgoJ1Rlc3QnKV0KQEAgLTEzMSw2ICsxMjksNSBAQAogICAgICAgICBydW5fdW5pdHRlc3QodGVzdGNsYXNzKQogCiAKLQwKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0nc3VpdGUnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnN1cmVwaXAucHkgYi9MaWIvdGVzdC90ZXN0X2Vuc3VyZXBpcC5weQppbmRleCA2ZGM3NjRiLi5hNzhjYTE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Vuc3VyZXBpcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Vuc3VyZXBpcC5weQpAQCAtMzU3LDQgKzM1Nyw0IEBACiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnVtLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnVtLnB5CmluZGV4IDk0MzM2MzguLjYzMGIxNTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW51bS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VudW0ucHkKQEAgLTY2LDE4ICs2NiwxNCBAQAogZXhjZXB0IEV4Y2VwdGlvbjoKICAgICBwYXNzCiAKLWRlZiB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoYXNzZXJ0aW9uLCBzb3VyY2UsIHRhcmdldD1Ob25lLAotICAgICAgICAqLCBwcm90b2NvbD0oMCwgSElHSEVTVF9QUk9UT0NPTCkpOgotICAgIHN0YXJ0LCBzdG9wID0gcHJvdG9jb2wKK2RlZiB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoYXNzZXJ0aW9uLCBzb3VyY2UsIHRhcmdldD1Ob25lKToKICAgICBpZiB0YXJnZXQgaXMgTm9uZToKICAgICAgICAgdGFyZ2V0ID0gc291cmNlCi0gICAgZm9yIHByb3RvY29sIGluIHJhbmdlKHN0YXJ0LCBzdG9wKzEpOgorICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShISUdIRVNUX1BST1RPQ09MICsgMSk6CiAgICAgICAgIGFzc2VydGlvbihsb2FkcyhkdW1wcyhzb3VyY2UsIHByb3RvY29sPXByb3RvY29sKSksIHRhcmdldCkKIAotZGVmIHRlc3RfcGlja2xlX2V4Y2VwdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbiwgb2JqLAotICAgICAgICAqLCBwcm90b2NvbD0oMCwgSElHSEVTVF9QUk9UT0NPTCkpOgotICAgIHN0YXJ0LCBzdG9wID0gcHJvdG9jb2wKLSAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2Uoc3RhcnQsIHN0b3ArMSk6CitkZWYgdGVzdF9waWNrbGVfZXhjZXB0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uLCBvYmopOgorICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShISUdIRVNUX1BST1RPQ09MICsgMSk6CiAgICAgICAgIHdpdGggYXNzZXJ0aW9uKGV4Y2VwdGlvbik6CiAgICAgICAgICAgICBkdW1wcyhvYmosIHByb3RvY29sPXByb3RvY29sKQogCkBAIC01NDUsNiArNTQxLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2sgZm9yIGssdiBpbiBXZWVrRGF5Ll9fbWVtYmVyc19fLml0ZW1zKCkKICAgICAgICAgICAgICAgICBpZiB2Lm5hbWUgIT0ga10sIFsnVEVVU0RBWScsIF0pCiAKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2Zyb21fYnl0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoSW50U3Rvb2dlcy5mcm9tX2J5dGVzKGInXHgwMFx4MDMnLCAnYmlnJyksIEludFN0b29nZXMuTU9FKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgSW50U3Rvb2dlcy5mcm9tX2J5dGVzKGInXHgwMFx4MDUnLCAnYmlnJykKKworICAgIGRlZiB0ZXN0X2Zsb2F0ZW51bV9mcm9taGV4KHNlbGYpOgorICAgICAgICBoID0gZmxvYXQuaGV4KEZsb2F0U3Rvb2dlcy5NT0UudmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmxvYXRTdG9vZ2VzLmZyb21oZXgoaCksIEZsb2F0U3Rvb2dlcy5NT0UpCisgICAgICAgIGggPSBmbG9hdC5oZXgoRmxvYXRTdG9vZ2VzLk1PRS52YWx1ZSArIDAuMDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBGbG9hdFN0b29nZXMuZnJvbWhleChoKQorCiAgICAgZGVmIHRlc3RfcGlja2xlX2VudW0oc2VsZik6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoU3Rvb2dlcywgRXhjZXB0aW9uKToKICAgICAgICAgICAgIHJhaXNlIFN0b29nZXMKQEAgLTU4OCwxMSArNTk2LDcgQEAKIAogICAgICAgICBzZWxmLl9fY2xhc3NfXy5OZXN0ZWRFbnVtID0gTmVzdGVkRW51bQogICAgICAgICBzZWxmLk5lc3RlZEVudW0uX19xdWFsbmFtZV9fID0gJyVzLk5lc3RlZEVudW0nICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KLSAgICAgICAgdGVzdF9waWNrbGVfZXhjZXB0aW9uKAotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzLCBQaWNrbGluZ0Vycm9yLCBzZWxmLk5lc3RlZEVudW0udHdpZ3MsCi0gICAgICAgICAgICAgICAgcHJvdG9jb2w9KDAsIDMpKQotICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgc2VsZi5OZXN0ZWRFbnVtLnR3aWdzLAotICAgICAgICAgICAgICAgIHByb3RvY29sPSg0LCBISUdIRVNUX1BST1RPQ09MKSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIHNlbGYuTmVzdGVkRW51bS50d2lncykKIAogICAgIGRlZiB0ZXN0X3BpY2tsZV9ieV9uYW1lKHNlbGYpOgogICAgICAgICBjbGFzcyBSZXBsYWNlR2xvYmFsSW50KEludEVudW0pOgpAQCAtNjUwLDcgKzY1NCw3IEBACiAgICAgICAgICAgICAgICAgIHNlbGYuU2Vhc29uLlNQUklOR10KICAgICAgICAgICAgICAgICApCiAKLSAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmcoc2VsZik6CisgICAgZGVmIHRlc3RfcHJvZ3JhbW1hdGljX2Z1bmN0aW9uX3N0cmluZyhzZWxmKToKICAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKICAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKQEAgLTY2Nyw3ICs2NzEsMjQgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQogCi0gICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25fc3RyaW5nX2xpc3Qoc2VsZik6CisgICAgZGVmIHRlc3RfcHJvZ3JhbW1hdGljX2Z1bmN0aW9uX3N0cmluZ193aXRoX3N0YXJ0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgJ2p1bmUganVseSBhdWd1c3QnLCBzdGFydD0xMCkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxMCk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtbWF0aWNfZnVuY3Rpb25fc3RyaW5nX2xpc3Qoc2VsZik6CiAgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCBbJ2p1bmUnLCAnanVseScsICdhdWd1c3QnXSkKICAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKQEAgLTY4NCw3ICs3MDUsMjQgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQogCi0gICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25faXRlcmFibGUoc2VsZik6CisgICAgZGVmIHRlc3RfcHJvZ3JhbW1hdGljX2Z1bmN0aW9uX3N0cmluZ19saXN0X3dpdGhfc3RhcnQoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCBbJ2p1bmUnLCAnanVseScsICdhdWd1c3QnXSwgc3RhcnQ9MjApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMjApOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbW1hdGljX2Z1bmN0aW9uX2l0ZXJhYmxlKHNlbGYpOgogICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oCiAgICAgICAgICAgICAgICAgJ1N1bW1lck1vbnRoJywKICAgICAgICAgICAgICAgICAoKCdqdW5lJywgMSksICgnanVseScsIDIpLCAoJ2F1Z3VzdCcsIDMpKQpAQCAtNzA0LDcgKzc0Miw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKIAotICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX2Zyb21fZGljdChzZWxmKToKKyAgICBkZWYgdGVzdF9wcm9ncmFtbWF0aWNfZnVuY3Rpb25fZnJvbV9kaWN0KHNlbGYpOgogICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oCiAgICAgICAgICAgICAgICAgJ1N1bW1lck1vbnRoJywKICAgICAgICAgICAgICAgICBPcmRlcmVkRGljdCgoKCdqdW5lJywgMSksICgnanVseScsIDIpLCAoJ2F1Z3VzdCcsIDMpKSkKQEAgLTcyNCw3ICs3NjIsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCiAKLSAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlKHNlbGYpOgorICAgIGRlZiB0ZXN0X3Byb2dyYW1tYXRpY19mdW5jdGlvbl90eXBlKHNlbGYpOgogICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgJ2p1bmUganVseSBhdWd1c3QnLCB0eXBlPWludCkKICAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKQEAgLTc0MCw3ICs3NzgsMjMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQogCi0gICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25fdHlwZV9mcm9tX3N1YmNsYXNzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3Byb2dyYW1tYXRpY19mdW5jdGlvbl90eXBlX3dpdGhfc3RhcnQoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcsIHR5cGU9aW50LCBzdGFydD0zMCkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAzMCk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbW1hdGljX2Z1bmN0aW9uX3R5cGVfZnJvbV9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgU3VtbWVyTW9udGggPSBJbnRFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKICAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKQEAgLTc1Niw2ICs4MTAsMjIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQogCisgICAgZGVmIHRlc3RfcHJvZ3JhbW1hdGljX2Z1bmN0aW9uX3R5cGVfZnJvbV9zdWJjbGFzc193aXRoX3N0YXJ0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEludEVudW0oJ1N1bW1lck1vbnRoJywgJ2p1bmUganVseSBhdWd1c3QnLCBzdGFydD00MCkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCA0MCk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3Npbmcoc2VsZik6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoTmFtZSwgRXhjZXB0aW9uKToKICAgICAgICAgICAgIHJhaXNlIE5hbWUKQEAgLTEwNDMsOSArMTExMyw5IEBACiAgICAgICAgIGdsb2JhbHMoKVsnTkVJJ10gPSBORUkKICAgICAgICAgTkk1ID0gTmFtZWRJbnQoJ3Rlc3QnLCA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5JNSwgNSkKLSAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0RXF1YWwsIE5JNSwgNSwgcHJvdG9jb2w9KDQsIDQpKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRFcXVhbCwgTkk1LCA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQotICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJLnksIHByb3RvY29sPSg0LCA0KSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSS55KQogICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRoX3JlZHVjZShzZWxmKToKQEAgLTE1MTAsMTEgKzE1ODAsMjYgQEAKICAgICAgICAgICAgICAgICB0cmlwbGUgPSAzCiAgICAgICAgICAgICAgICAgdHVya2V5ID0gMwogCisgICAgZGVmIHRlc3RfdW5pcXVlX3dpdGhfbmFtZShzZWxmKToKKyAgICAgICAgQHVuaXF1ZQorICAgICAgICBjbGFzcyBTaWxseShFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgICAgIHR3byA9ICdkb3MnCisgICAgICAgICAgICBuYW1lID0gMworICAgICAgICBAdW5pcXVlCisgICAgICAgIGNsYXNzIFNpbGxpZXIoSW50RW51bSk6CisgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICBuYW1lID0gMgorICAgICAgICAgICAgdHJpcGxlID0gMworICAgICAgICAgICAgdmFsdWUgPSA0CiAKLWV4cGVjdGVkX2hlbHBfb3V0cHV0ID0gIiIiCisKK2V4cGVjdGVkX2hlbHBfb3V0cHV0X3dpdGhfZG9jcyA9ICIiIlwKIEhlbHAgb24gY2xhc3MgQ29sb3IgaW4gbW9kdWxlICVzOgogCiBjbGFzcyBDb2xvcihlbnVtLkVudW0pCisgfCAgQW4gZW51bWVyYXRpb24uCisgfFx4MjBceDIwCiAgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CiAgfCAgICAgIENvbG9yCiAgfCAgICAgIGVudW0uRW51bQpAQCAtMTU0NCwxMSArMTYyOSw0MSBAQAogIHwgICAgICBSZXR1cm5zIGEgbWFwcGluZyBvZiBtZW1iZXIgbmFtZS0+dmFsdWUuCiAgfFx4MjBceDIwXHgyMFx4MjBceDIwXHgyMAogIHwgICAgICBUaGlzIG1hcHBpbmcgbGlzdHMgYWxsIGVudW0gbWVtYmVycywgaW5jbHVkaW5nIGFsaWFzZXMuIE5vdGUgdGhhdCB0aGlzCi0gfCAgICAgIGlzIGEgcmVhZC1vbmx5IHZpZXcgb2YgdGhlIGludGVybmFsIG1hcHBpbmcuCi0iIiIuc3RyaXAoKQorIHwgICAgICBpcyBhIHJlYWQtb25seSB2aWV3IG9mIHRoZSBpbnRlcm5hbCBtYXBwaW5nLiIiIgorCitleHBlY3RlZF9oZWxwX291dHB1dF93aXRob3V0X2RvY3MgPSAiIiJcCitIZWxwIG9uIGNsYXNzIENvbG9yIGluIG1vZHVsZSAlczoKKworY2xhc3MgQ29sb3IoZW51bS5FbnVtKQorIHwgIE1ldGhvZCByZXNvbHV0aW9uIG9yZGVyOgorIHwgICAgICBDb2xvcgorIHwgICAgICBlbnVtLkVudW0KKyB8ICAgICAgYnVpbHRpbnMub2JqZWN0CisgfFx4MjBceDIwCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgYmx1ZSA9IDxDb2xvci5ibHVlOiAzPgorIHxceDIwXHgyMAorIHwgIGdyZWVuID0gPENvbG9yLmdyZWVuOiAyPgorIHxceDIwXHgyMAorIHwgIHJlZCA9IDxDb2xvci5yZWQ6IDE+CisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgZGVzY3JpcHRvcnMgaW5oZXJpdGVkIGZyb20gZW51bS5FbnVtOgorIHxceDIwXHgyMAorIHwgIG5hbWUKKyB8XHgyMFx4MjAKKyB8ICB2YWx1ZQorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGRlc2NyaXB0b3JzIGluaGVyaXRlZCBmcm9tIGVudW0uRW51bU1ldGE6CisgfFx4MjBceDIwCisgfCAgX19tZW1iZXJzX18iIiIKIAogY2xhc3MgVGVzdFN0ZExpYih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBtYXhEaWZmID0gTm9uZQorCiAgICAgY2xhc3MgQ29sb3IoRW51bSk6CiAgICAgICAgIHJlZCA9IDEKICAgICAgICAgZ3JlZW4gPSAyCkBAIC0xNTU2LDcgKzE2NzEsMTAgQEAKIAogICAgIGRlZiB0ZXN0X3B5ZG9jKHNlbGYpOgogICAgICAgICAjIGluZGlyZWN0bHkgdGVzdCBfX29iamNsYXNzX18KLSAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX2hlbHBfb3V0cHV0ICUgX19uYW1lX18KKyAgICAgICAgaWYgU3RyRW51bS5fX2RvY19fIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfaGVscF9vdXRwdXRfd2l0aG91dF9kb2NzICUgX19uYW1lX18KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9oZWxwX291dHB1dF93aXRoX2RvY3MgJSBfX25hbWVfXwogICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCiAgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQogICAgICAgICBoZWxwZXIoc2VsZi5Db2xvcikKQEAgLTE1NjYsNyArMTY4NCw3IEBACiAgICAgZGVmIHRlc3RfaW5zcGVjdF9nZXRtZW1iZXJzKHNlbGYpOgogICAgICAgICB2YWx1ZXMgPSBkaWN0KCgKICAgICAgICAgICAgICAgICAoJ19fY2xhc3NfXycsIEVudW1NZXRhKSwKLSAgICAgICAgICAgICAgICAoJ19fZG9jX18nLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoJ19fZG9jX18nLCAnQW4gZW51bWVyYXRpb24uJyksCiAgICAgICAgICAgICAgICAgKCdfX21lbWJlcnNfXycsIHNlbGYuQ29sb3IuX19tZW1iZXJzX18pLAogICAgICAgICAgICAgICAgICgnX19tb2R1bGVfXycsIF9fbmFtZV9fKSwKICAgICAgICAgICAgICAgICAoJ2JsdWUnLCBzZWxmLkNvbG9yLmJsdWUpLApAQCAtMTU5NCw3ICsxNzEyLDcgQEAKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19jbGFzc19fJywga2luZD0nZGF0YScsCiAgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPW9iamVjdCwgb2JqZWN0PUVudW1NZXRhKSwKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19kb2NfXycsIGtpbmQ9J2RhdGEnLAotICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1zZWxmLkNvbG9yLCBvYmplY3Q9Tm9uZSksCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD0nQW4gZW51bWVyYXRpb24uJyksCiAgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fbWVtYmVyc19fJywga2luZD0ncHJvcGVydHknLAogICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1FbnVtTWV0YSwgb2JqZWN0PUVudW1NZXRhLl9fbWVtYmVyc19fKSwKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19tb2R1bGVfXycsIGtpbmQ9J2RhdGEnLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQppbmRleCBlODUyNTRjLi4yNjMwY2YyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQpAQCAtMjU4LDE2ICsyNTgsNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAoc3lzLm1heHNpemUrMywnYycpXQogCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQotICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgotICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKLSAgICAgICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBwcmludChjb3VudHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW9mLnB5IGIvTGliL3Rlc3QvdGVzdF9lb2YucHkKaW5kZXggNTJlNzkzMi4uN2JhYTdhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lb2YucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lb2YucHkKQEAgLTI0LDggKzI0LDUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRU9GVGVzdENhc2UpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CmluZGV4IGIzN2YwMzMuLmE3MzU5ZTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQpAQCAtNDQsNyArNDQsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXJTb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgc2VsZi5zZXJ2ZXJTb2NrZXQuYmluZCgoJzEyNy4wLjAuMScsIDApKQotICAgICAgICBzZWxmLnNlcnZlclNvY2tldC5saXN0ZW4oMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXJTb2NrZXQubGlzdGVuKCkKICAgICAgICAgc2VsZi5jb25uZWN0aW9ucyA9IFtzZWxmLnNlcnZlclNvY2tldF0KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTI1Miw4ICsyNTIsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShlcG9sbC5maWxlbm8oKSksIEZhbHNlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RVBvbGwpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXJybm8ucHkgYi9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5CmluZGV4IDA1OGRjYjkuLjVjNDM3ZTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXJybm8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lcnJuby5weQpAQCAtMyw3ICszLDYgQEAKICIiIgogCiBpbXBvcnQgZXJybm8KLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKIHN0ZF9jX2Vycm9ycyA9IGZyb3plbnNldChbJ0VET00nLCAnRVJBTkdFJ10pCkBAIC0zMiw5ICszMSw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gJXMgYXR0ciBpbiBlcnJuby5lcnJvcmNvZGUnICUgYXR0cmlidXRlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChFcnJub0F0dHJpYnV0ZVRlc3RzLCBFcnJvcmNvZGVUZXN0cykKLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbl92YXJpYXRpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25fdmFyaWF0aW9ucy5weQppbmRleCAxMWY1ZTVjLi5kODc0YjBlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbl92YXJpYXRpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9uX3ZhcmlhdGlvbnMucHkKQEAgLTEsNSArMSw0IEBACiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCB1bml0dGVzdAogCiBjbGFzcyBFeGNlcHRpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNzMsOCArMTcyLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9maW5hbGx5KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2V4Y2VwdCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0Q2FzZSkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CmluZGV4IGQ5NTQzMDIuLjQ1OGRkYzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKQEAgLTcsNyArNyw3IEBACiBpbXBvcnQgd2Vha3JlZgogaW1wb3J0IGVycm5vCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBjYXB0dXJlZF9vdXRwdXQsIGNoZWNrX2ltcGxfZGV0YWlsLAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIGNhcHR1cmVkX3N0ZGVyciwgY2hlY2tfaW1wbF9kZXRhaWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzLCBjcHl0aG9uX29ubHksIGdjX2NvbGxlY3QsIHJ1bl91bml0dGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fdHJhY2luZywgdW5saW5rLCBpbXBvcnRfbW9kdWxlKQogCkBAIC0yMCw2ICsyMCwxMCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKICAgICAgICAgc2VsZi54ID0geAogCitjbGFzcyBCcm9rZW5TdHJFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJzdHIoKSBpcyBicm9rZW4iKQorCiAjIFhYWCBUaGlzIGlzIG5vdCByZWFsbHkgZW5vdWdoLCBlYWNoICpvcGVyYXRpb24qIHNob3VsZCBiZSB0ZXN0ZWQhCiAKIGNsYXNzIEV4Y2VwdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg0LDYgKzg4LDcgQEAKICAgICAgICAgICAgIHggKz0geCAgIyB0aGlzIHNpbXBseSBzaG91bGRuJ3QgYmxvdyB1cAogCiAgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goUnVudGltZUVycm9yLCAiUnVudGltZUVycm9yIikKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChSZWN1cnNpb25FcnJvciwgIlJlY3Vyc2lvbkVycm9yIikKIAogICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKFN5bnRheEVycm9yLCAiU3ludGF4RXJyb3IiKQogICAgICAgICB0cnk6IGV4ZWMoJy9cbicpCkBAIC0xMTcsNiArMTIyLDggQEAKICAgICAgICAgdHJ5OiB4ID0gMS8wCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogcGFzcwogCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goU3RvcEFzeW5jSXRlcmF0aW9uLCAiU3RvcEFzeW5jSXRlcmF0aW9uIikKKwogICAgIGRlZiB0ZXN0U3ludGF4RXJyb3JNZXNzYWdlKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZXhjZXB0aW9uIG1lc3NhZ2UgaXMgcmFpc2VkIGZvciBlYWNoIG9mCiAgICAgICAgICMgdGhlc2UgY29kZSBmcmFnbWVudHMKQEAgLTQ4MSwxNCArNDg4LDE0IEBACiAgICAgZGVmIHRlc3RJbmZpbml0ZVJlY3Vyc2lvbihzZWxmKToKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgIHJldHVybiBmKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgZikKIAogICAgICAgICBkZWYgZygpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBnKCkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yLCBnKQogCiAgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBib3RoIGluc3RhbmNlcyBhbmQgY2xhc3NlcyBoYXZlIGEgc3RyIHJlcHJlc2VudGF0aW9uLgpAQCAtODc5LDcgKzg4Niw3IEBACiAgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEV4Y2VwdGlvbiwgbWV0YWNsYXNzPU1ldGEpOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdGRlcnI6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCkKICAgICAgICAgICAgIGV4Y2VwdCBNeUV4Y2VwdGlvbiBhcyBlOgpAQCAtODk0LDEwICs5MDEsMTAgQEAKICAgICAgICAgZGVmIGcoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gZygpCi0gICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgZXhjZXB0IFJlY3Vyc2lvbkVycm9yOgogICAgICAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKQogICAgICAgICBlLCB2LCB0YiA9IGcoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2LCBSdW50aW1lRXJyb3IpLCB0eXBlKHYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2LCBSZWN1cnNpb25FcnJvciksIHR5cGUodikpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIiwgc3RyKHYpKQogCiAKQEAgLTk5NiwxMCArMTAwMywxMCBAQAogICAgICAgICAjIFdlIGNhbm5vdCB1c2UgYXNzZXJ0UmFpc2VzIHNpbmNlIGl0IG1hbnVhbGx5IGRlbGV0ZXMgdGhlIHRyYWNlYmFjawogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbm5lcigpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IFJlY3Vyc2lvbkVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHdyKCksIE5vbmUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlJ1bnRpbWVFcnJvciBub3QgcmFpc2VkIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVjdXJzaW9uRXJyb3Igbm90IHJhaXNlZCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3IoKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2Vycm5vX0VOT1RESVIoc2VsZik6CkBAIC0xMDA4LDYgKzEwMTUsNjYgQEAKICAgICAgICAgICAgIG9zLmxpc3RkaXIoX19maWxlX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9URElSLCBjbS5leGNlcHRpb24pCiAKKyAgICBkZWYgdGVzdF91bnJhaXNhYmxlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjgzNjogUHlFcnJfV3JpdGVVbnJhaXNhYmxlKCkgc2hvdWxkIGdpdmUgc2Vuc2libGUgcmVwb3J0cworICAgICAgICBjbGFzcyBCcm9rZW5EZWw6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBleGMgPSBWYWx1ZUVycm9yKCJkZWwgaXMgYnJva2VuIikKKyAgICAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbmNsdWRlZCBpbiB0aGUgdHJhY2ViYWNrIHJlcG9ydDoKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKworICAgICAgICBjbGFzcyBCcm9rZW5SZXByKEJyb2tlbkRlbCk6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoInJlcHIoKSBpcyBicm9rZW4iKQorCisgICAgICAgIGNsYXNzIEJyb2tlbkV4Y2VwdGlvbkRlbDoKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGV4YyA9IEJyb2tlblN0ckV4Y2VwdGlvbigpCisgICAgICAgICAgICAgICAgIyBUaGUgZm9sbG93aW5nIGxpbmUgaXMgaW5jbHVkZWQgaW4gdGhlIHRyYWNlYmFjayByZXBvcnQ6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisKKyAgICAgICAgZm9yIHRlc3RfY2xhc3MgaW4gKEJyb2tlbkRlbCwgQnJva2VuUmVwciwgQnJva2VuRXhjZXB0aW9uRGVsKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHRlc3RfY2xhc3MpOgorICAgICAgICAgICAgICAgIG9iaiA9IHRlc3RfY2xhc3MoKQorICAgICAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBkZWwgb2JqCisgICAgICAgICAgICAgICAgcmVwb3J0ID0gc3RkZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJFeGNlcHRpb24gaWdub3JlZCIsIHJlcG9ydCkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X2NsYXNzIGlzIEJyb2tlblJlcHI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIjxvYmplY3QgcmVwcigpIGZhaWxlZD4iLCByZXBvcnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0X2NsYXNzLl9fZGVsX18uX19xdWFsbmFtZV9fLCByZXBvcnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigidGVzdF9leGNlcHRpb25zLnB5IiwgcmVwb3J0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInJhaXNlIGV4YyIsIHJlcG9ydCkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X2NsYXNzIGlzIEJyb2tlbkV4Y2VwdGlvbkRlbDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiQnJva2VuU3RyRXhjZXB0aW9uIiwgcmVwb3J0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCI8ZXhjZXB0aW9uIHN0cigpIGZhaWxlZD4iLCByZXBvcnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiVmFsdWVFcnJvciIsIHJlcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiZGVsIGlzIGJyb2tlbiIsIHJlcG9ydCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwb3J0LmVuZHN3aXRoKCJcbiIpKQorCisgICAgZGVmIHRlc3RfdW5oYW5kbGVkKHNlbGYpOgorICAgICAgICAjIENoZWNrIGZvciBzZW5zaWJsZSByZXBvcnRpbmcgb2YgdW5oYW5kbGVkIGV4Y2VwdGlvbnMKKyAgICAgICAgZm9yIGV4Y190eXBlIGluIChWYWx1ZUVycm9yLCBCcm9rZW5TdHJFeGNlcHRpb24pOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZXhjX3R5cGUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gZXhjX3R5cGUoInRlc3QgbWVzc2FnZSIpCisgICAgICAgICAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyBsaW5lIGlzIGluY2x1ZGVkIGluIHRoZSB0cmFjZWJhY2sgcmVwb3J0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgICAgICBleGNlcHQgZXhjX3R5cGU6CisgICAgICAgICAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLl9fZXhjZXB0aG9va19fKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICByZXBvcnQgPSBzdGRlcnIuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInRlc3RfZXhjZXB0aW9ucy5weSIsIHJlcG9ydCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJyYWlzZSBleGMiLCByZXBvcnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleGNfdHlwZS5fX25hbWVfXywgcmVwb3J0KQorICAgICAgICAgICAgICAgIGlmIGV4Y190eXBlIGlzIEJyb2tlblN0ckV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiPGV4Y2VwdGlvbiBzdHIoKSBmYWlsZWQ+IiwgcmVwb3J0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInRlc3QgbWVzc2FnZSIsIHJlcG9ydCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwb3J0LmVuZHN3aXRoKCJcbiIpKQorCiAKIGNsYXNzIEltcG9ydEVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkgYi9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkKaW5kZXggNmI2YzEyZC4uNWVlYTM3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXh0Y2FsbC5weQpAQCAtMzQsMTcgKzM0LDQxIEBACiAgICAgKDEsIDIsIDMsIDQsIDUpIHt9CiAgICAgPj4+IGYoMSwgMiwgMywgKls0LCA1XSkKICAgICAoMSwgMiwgMywgNCwgNSkge30KKyAgICA+Pj4gZigqWzEsIDIsIDNdLCA0LCA1KQorICAgICgxLCAyLCAzLCA0LCA1KSB7fQogICAgID4+PiBmKDEsIDIsIDMsICpVc2VyTGlzdChbNCwgNV0pKQogICAgICgxLCAyLCAzLCA0LCA1KSB7fQorICAgID4+PiBmKDEsIDIsIDMsICpbNCwgNV0sICpbNiwgN10pCisgICAgKDEsIDIsIDMsIDQsIDUsIDYsIDcpIHt9CisgICAgPj4+IGYoMSwgKlsyLCAzXSwgNCwgKls1LCA2XSwgNykKKyAgICAoMSwgMiwgMywgNCwgNSwgNiwgNykge30KKyAgICA+Pj4gZigqVXNlckxpc3QoWzEsIDJdKSwgKlVzZXJMaXN0KFszLCA0XSksIDUsICpVc2VyTGlzdChbNiwgN10pKQorICAgICgxLCAyLCAzLCA0LCA1LCA2LCA3KSB7fQogCiBIZXJlIHdlIGFkZCBrZXl3b3JkIGFyZ3VtZW50cwogCiAgICAgPj4+IGYoMSwgMiwgMywgKip7J2EnOjQsICdiJzo1fSkKICAgICAoMSwgMiwgMykgeydhJzogNCwgJ2InOiA1fQorICAgID4+PiBmKDEsIDIsICoqeydhJzogLTEsICdiJzogNX0sICoqeydhJzogNCwgJ2MnOiA2fSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJ2EnCisgICAgPj4+IGYoMSwgMiwgKip7J2EnOiAtMSwgJ2InOiA1fSwgYT00LCBjPTYpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50ICdhJworICAgID4+PiBmKDEsIDIsIGE9MywgKip7J2EnOiA0fSwgKip7J2EnOiA1fSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJ2EnCiAgICAgPj4+IGYoMSwgMiwgMywgKls0LCA1XSwgKip7J2EnOjYsICdiJzo3fSkKICAgICAoMSwgMiwgMywgNCwgNSkgeydhJzogNiwgJ2InOiA3fQogICAgID4+PiBmKDEsIDIsIDMsIHg9NCwgeT01LCAqKDYsIDcpLCAqKnsnYSc6OCwgJ2InOiA5fSkKICAgICAoMSwgMiwgMywgNiwgNykgeydhJzogOCwgJ2InOiA5LCAneCc6IDQsICd5JzogNX0KKyAgICA+Pj4gZigxLCAyLCAzLCAqWzQsIDVdLCAqKnsnYyc6IDh9LCAqKnsnYSc6NiwgJ2InOjd9KQorICAgICgxLCAyLCAzLCA0LCA1KSB7J2EnOiA2LCAnYic6IDcsICdjJzogOH0KKyAgICA+Pj4gZigxLCAyLCAzLCAqKDQsIDUpLCB4PTYsIHk9NywgKip7J2EnOjgsICdiJzogOX0pCisgICAgKDEsIDIsIDMsIDQsIDUpIHsnYSc6IDgsICdiJzogOSwgJ3gnOiA2LCAneSc6IDd9CiAKICAgICA+Pj4gZigxLCAyLCAzLCAqKlVzZXJEaWN0KGE9NCwgYj01KSkKICAgICAoMSwgMiwgMykgeydhJzogNCwgJ2InOiA1fQpAQCAtNTIsNiArNzYsOCBAQAogICAgICgxLCAyLCAzLCA0LCA1KSB7J2EnOiA2LCAnYic6IDd9CiAgICAgPj4+IGYoMSwgMiwgMywgeD00LCB5PTUsICooNiwgNyksICoqVXNlckRpY3QoYT04LCBiPTkpKQogICAgICgxLCAyLCAzLCA2LCA3KSB7J2EnOiA4LCAnYic6IDksICd4JzogNCwgJ3knOiA1fQorICAgID4+PiBmKDEsIDIsIDMsICooNCwgNSksIHg9NiwgeT03LCAqKlVzZXJEaWN0KGE9OCwgYj05KSkKKyAgICAoMSwgMiwgMywgNCwgNSkgeydhJzogOCwgJ2InOiA5LCAneCc6IDYsICd5JzogN30KIAogRXhhbXBsZXMgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cyAoVHlwZUVycm9ycykuIFdlJ3JlIGFsc28gdGVzdGluZyB0aGUgZnVuY3Rpb24KIG5hbWVzIGluIHRoZSBleGNlcHRpb24gbWVzc2FnZXMuCkBAIC05Miw3ICsxMTgsNyBAQAogICAgID4+PiBnKCpOb3RoaW5nKCkpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgVHlwZUVycm9yOiBnKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCBOb3RoaW5nCisgICAgVHlwZUVycm9yOiBnKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGFuIGl0ZXJhYmxlLCBub3QgTm90aGluZwogCiAgICAgPj4+IGNsYXNzIE5vdGhpbmc6CiAgICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIDUKQEAgLTEwMSw3ICsxMjcsNyBAQAogICAgID4+PiBnKCpOb3RoaW5nKCkpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgVHlwZUVycm9yOiBnKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCBOb3RoaW5nCisgICAgVHlwZUVycm9yOiBnKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGFuIGl0ZXJhYmxlLCBub3QgTm90aGluZwogCiAgICAgPj4+IGNsYXNzIE5vdGhpbmcoKToKICAgICAuLi4gICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gNQpAQCAtMTI3LDYgKzE1Myw0NSBAQAogICAgID4+PiBnKCpOb3RoaW5nKCkpCiAgICAgMCAoMSwgMiwgMykge30KIAorQ2hlY2sgZm9yIGlzc3VlICM0ODA2OiBEb2VzIGEgVHlwZUVycm9yIGluIGEgZ2VuZXJhdG9yIGdldCBwcm9wYWdhdGVkIHdpdGggdGhlCityaWdodCBlcnJvciBtZXNzYWdlPyAoQWxzbyBjaGVjayB3aXRoIG90aGVyIGl0ZXJhYmxlcy4pCisKKyAgICA+Pj4gZGVmIGJyb2tlbigpOiByYWlzZSBUeXBlRXJyb3IoIm15ZXJyb3IiKQorICAgIC4uLgorCisgICAgPj4+IGcoKihicm9rZW4oKSBmb3IgaSBpbiByYW5nZSgxKSkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBteWVycm9yCisKKyAgICA+Pj4gY2xhc3MgQnJva2VuSXRlcmFibGUxOgorICAgIC4uLiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbXllcnJvcicpCisgICAgLi4uCisgICAgPj4+IGcoKkJyb2tlbkl0ZXJhYmxlMSgpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogbXllcnJvcgorCisgICAgPj4+IGNsYXNzIEJyb2tlbkl0ZXJhYmxlMjoKKyAgICAuLi4gICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAuLi4gICAgICAgICB5aWVsZCAwCisgICAgLi4uICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdteWVycm9yJykKKyAgICAuLi4KKyAgICA+Pj4gZygqQnJva2VuSXRlcmFibGUyKCkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBteWVycm9yCisKKyAgICA+Pj4gY2xhc3MgQnJva2VuU2VxdWVuY2U6CisgICAgLi4uICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaWR4KToKKyAgICAuLi4gICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ215ZXJyb3InKQorICAgIC4uLgorICAgID4+PiBnKCpCcm9rZW5TZXF1ZW5jZSgpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogbXllcnJvcgorCiBNYWtlIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gZG9lc24ndCBzdG9tcCB0aGUgZGljdGlvbmFyeQogCiAgICAgPj4+IGQgPSB7J2EnOiAxLCAnYic6IDIsICdjJzogM30KQEAgLTE2NiwxNyArMjMxLDE3IEBACiAgICAgPj4+IGgoKmgpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgVHlwZUVycm9yOiBoKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCBmdW5jdGlvbgorICAgIFR5cGVFcnJvcjogaCgpIGFyZ3VtZW50IGFmdGVyICogbXVzdCBiZSBhbiBpdGVyYWJsZSwgbm90IGZ1bmN0aW9uCiAKICAgICA+Pj4gZGlyKCpoKQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgotICAgIFR5cGVFcnJvcjogZGlyKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCBmdW5jdGlvbgorICAgIFR5cGVFcnJvcjogZGlyKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGFuIGl0ZXJhYmxlLCBub3QgZnVuY3Rpb24KIAogICAgID4+PiBOb25lKCpoKQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgotICAgIFR5cGVFcnJvcjogTm9uZVR5cGUgb2JqZWN0IGFyZ3VtZW50IGFmdGVyICogbXVzdCBiZSBhIHNlcXVlbmNlLCBcCisgICAgVHlwZUVycm9yOiBOb25lVHlwZSBvYmplY3QgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGFuIGl0ZXJhYmxlLCBcCiBub3QgZnVuY3Rpb24KIAogICAgID4+PiBoKCoqaCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmF1bHRoYW5kbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKaW5kZXggZTY4YTA5ZS4uMTU2MmVlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKQEAgLTYsOCArNiw4IEBACiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCi1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGV4dHdyYXAgaW1wb3J0IGRlZGVudApAQCAtMTcsNiArMTcsMTAgQEAKICAgICBIQVZFX1RIUkVBRFMgPSBUcnVlCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgSEFWRV9USFJFQURTID0gRmFsc2UKK3RyeToKKyAgICBpbXBvcnQgX3Rlc3RjYXBpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3Rlc3RjYXBpID0gTm9uZQogCiBUSU1FT1VUID0gMC41CiAKQEAgLTM4LDcgKzQyLDcgQEAKICAgICAgICAgc3VwcG9ydC51bmxpbmsoZmlsZW5hbWUpCiAKIGNsYXNzIEZhdWx0SGFuZGxlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgZ2V0X291dHB1dChzZWxmLCBjb2RlLCBmaWxlbmFtZT1Ob25lKToKKyAgICBkZWYgZ2V0X291dHB1dChzZWxmLCBjb2RlLCBmaWxlbmFtZT1Ob25lLCBmZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFJ1biB0aGUgc3BlY2lmaWVkIGNvZGUgaW4gUHl0aG9uIChpbiBhIG5ldyBjaGlsZCBwcm9jZXNzKSBhbmQgcmVhZCB0aGUKICAgICAgICAgb3V0cHV0IGZyb20gdGhlIHN0YW5kYXJkIGVycm9yIG9yIGZyb20gYSBmaWxlIChpZiBmaWxlbmFtZSBpcyBzZXQpLgpAQCAtNDksOCArNTMsMTEgQEAKICAgICAgICAgdGhyZWFkIFhYWCIuCiAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gZGVkZW50KGNvZGUpLnN0cmlwKCkKKyAgICAgICAgcGFzc19mZHMgPSBbXQorICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBhc3NfZmRzLmFwcGVuZChmZCkKICAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKLSAgICAgICAgICAgIHByb2Nlc3MgPSBzY3JpcHRfaGVscGVyLnNwYXduX3B5dGhvbignLWMnLCBjb2RlKQorICAgICAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUsIHBhc3NfZmRzPXBhc3NfZmRzKQogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQogICAgICAgICBleGl0Y29kZSA9IHByb2Nlc3Mud2FpdCgpCiAgICAgICAgIG91dHB1dCA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihzdGRvdXQpCkBAIC02MCwxMyArNjcsMjAgQEAKICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CiAgICAgICAgICAgICAgICAgb3V0cHV0ID0gZnAucmVhZCgpCiAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZGVjb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJykKKyAgICAgICAgZWxpZiBmZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnJykKKyAgICAgICAgICAgIG9zLmxzZWVrKGZkLCBvcy5TRUVLX1NFVCwgMCkKKyAgICAgICAgICAgIHdpdGggb3BlbihmZCwgInJiIiwgY2xvc2VmZD1GYWxzZSkgYXMgZnA6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gZnAucmVhZCgpCisgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZGVjb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJykKICAgICAgICAgb3V0cHV0ID0gcmUuc3ViKCdDdXJyZW50IHRocmVhZCAweFswLTlhLWZdKycsCiAgICAgICAgICAgICAgICAgICAgICAgICAnQ3VycmVudCB0aHJlYWQgWFhYJywKICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCkKICAgICAgICAgcmV0dXJuIG91dHB1dC5zcGxpdGxpbmVzKCksIGV4aXRjb2RlCiAKICAgICBkZWYgY2hlY2tfZmF0YWxfZXJyb3Ioc2VsZiwgY29kZSwgbGluZV9udW1iZXIsIG5hbWVfcmVnZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPU5vbmUsIGFsbF90aHJlYWRzPVRydWUsIG90aGVyX3JlZ2V4PU5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT1Ob25lLCBhbGxfdGhyZWFkcz1UcnVlLCBvdGhlcl9yZWdleD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIENoZWNrIHRoYXQgdGhlIGZhdWx0IGhhbmRsZXIgZm9yIGZhdGFsIGVycm9ycyBpcyBlbmFibGVkIGFuZCBjaGVjayB0aGUKICAgICAgICAgdHJhY2ViYWNrIGZyb20gdGhlIGNoaWxkIHByb2Nlc3Mgb3V0cHV0LgpAQCAtODksNyArMTAzLDcgQEAKICAgICAgICAgICAgIGhlYWRlcj1yZS5lc2NhcGUoaGVhZGVyKSkpLnN0cmlwKCkKICAgICAgICAgaWYgb3RoZXJfcmVnZXg6CiAgICAgICAgICAgICByZWdleCArPSAnfCcgKyBvdGhlcl9yZWdleAotICAgICAgICBvdXRwdXQsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lKQorICAgICAgICBvdXRwdXQsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lPWZpbGVuYW1lLCBmZD1mZCkKICAgICAgICAgb3V0cHV0ID0gJ1xuJy5qb2luKG91dHB1dCkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQsIHJlZ2V4KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV4aXRjb2RlLCAwKQpAQCAtMTM1LDI2ICsxNDksMzIgQEAKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAnRmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uJykKIAotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnX3NpZ2J1cycpLAotICAgICAgICAgICAgICAgICAgICAgIm5lZWQgZmF1bHRoYW5kbGVyLl9zaWdidXMoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihfdGVzdGNhcGkgaXMgTm9uZSwgJ25lZWQgX3Rlc3RjYXBpJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0JVUycpLCAnbmVlZCBzaWduYWwuU0lHQlVTJykKICAgICBkZWYgdGVzdF9zaWdidXMoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCisgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCiAgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBpbXBvcnQgc2lnbmFsCisKICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQotICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdidXMoKQorICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX3NpZ25hbChzaWduYWwuU0lHQlVTKQogICAgICAgICAgICAgIiIiLAotICAgICAgICAgICAgMywKKyAgICAgICAgICAgIDYsCiAgICAgICAgICAgICAnQnVzIGVycm9yJykKIAotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnX3NpZ2lsbCcpLAotICAgICAgICAgICAgICAgICAgICAgIm5lZWQgZmF1bHRoYW5kbGVyLl9zaWdpbGwoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihfdGVzdGNhcGkgaXMgTm9uZSwgJ25lZWQgX3Rlc3RjYXBpJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0lMTCcpLCAnbmVlZCBzaWduYWwuU0lHSUxMJykKICAgICBkZWYgdGVzdF9zaWdpbGwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCisgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCiAgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBpbXBvcnQgc2lnbmFsCisKICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQotICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdpbGwoKQorICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX3NpZ25hbChzaWduYWwuU0lHSUxMKQogICAgICAgICAgICAgIiIiLAotICAgICAgICAgICAgMywKKyAgICAgICAgICAgIDYsCiAgICAgICAgICAgICAnSWxsZWdhbCBpbnN0cnVjdGlvbicpCiAKICAgICBkZWYgdGVzdF9mYXRhbF9lcnJvcihzZWxmKToKQEAgLTE2NSw2ICsxODUsMTQgQEAKICAgICAgICAgICAgIDIsCiAgICAgICAgICAgICAneHl6JykKIAorICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yX3dpdGhvdXRfZ2lsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZhdGFsX2Vycm9yKCIiIgorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9mYXRhbF9lcnJvcihiJ3h5eicsIFRydWUpCisgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAyLAorICAgICAgICAgICAgJ3h5eicpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdvcGVuYnNkJykgYW5kIEhBVkVfVEhSRUFEUywKICAgICAgICAgICAgICAgICAgICAgICJJc3N1ZSAjMTI4Njg6IHNpZ2FsdHN0YWNrKCkgZG9lc24ndCB3b3JrIG9uICIKICAgICAgICAgICAgICAgICAgICAgICJPcGVuQlNEIGlmIFB5dGhvbiBpcyBjb21waWxlZCB3aXRoIHB0aHJlYWQiKQpAQCAtMjAxLDYgKzIyOSwyMSBAQAogICAgICAgICAgICAgICAgICdTZWdtZW50YXRpb24gZmF1bHQnLAogICAgICAgICAgICAgICAgIGZpbGVuYW1lPWZpbGVuYW1lKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgICAgICJzdWJwcm9jZXNzIGRvZXNuJ3Qgc3VwcG9ydCBwYXNzX2ZkcyBvbiBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9lbmFibGVfZmQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgnd2IrJykgYXMgZnA6CisgICAgICAgICAgICBmZCA9IGZwLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2ZhdGFsX2Vycm9yKCIiIgorICAgICAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSglcykKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQorICAgICAgICAgICAgICAgICIiIiAlIGZkLAorICAgICAgICAgICAgICAgIDQsCisgICAgICAgICAgICAgICAgJ1NlZ21lbnRhdGlvbiBmYXVsdCcsCisgICAgICAgICAgICAgICAgZmQ9ZmQpCisKICAgICBkZWYgdGVzdF9lbmFibGVfc2luZ2xlX3RocmVhZChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKICAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKQEAgLTI4Nyw3ICszMzAsNyBAQAogICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKIAotICAgIGRlZiBjaGVja19kdW1wX3RyYWNlYmFjayhzZWxmLCBmaWxlbmFtZSk6CisgICAgZGVmIGNoZWNrX2R1bXBfdHJhY2ViYWNrKHNlbGYsICosIGZpbGVuYW1lPU5vbmUsIGZkPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgRXhwbGljaXRseSBjYWxsIGR1bXBfdHJhY2ViYWNrKCkgZnVuY3Rpb24gYW5kIGNoZWNrIGl0cyBvdXRwdXQuCiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgpAQCAtMjk1LDEwICszMzgsMTYgQEAKICAgICAgICAgY29kZSA9ICIiIgogICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgogCisgICAgICAgICAgICBmaWxlbmFtZSA9IHtmaWxlbmFtZSFyfQorICAgICAgICAgICAgZmQgPSB7ZmR9CisKICAgICAgICAgICAgIGRlZiBmdW5jQigpOgotICAgICAgICAgICAgICAgIGlmIHtoYXNfZmlsZW5hbWV9OgotICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oe2ZpbGVuYW1lfSwgIndiIikgYXMgZnA6CisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWU6CisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soZnAsIGFsbF90aHJlYWRzPUZhbHNlKQorICAgICAgICAgICAgICAgIGVsaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF90aHJlYWRzPUZhbHNlKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhhbGxfdGhyZWFkcz1GYWxzZSkKIApAQCAtMzA4LDI5ICszNTcsMzcgQEAKICAgICAgICAgICAgIGZ1bmNBKCkKICAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoCi0gICAgICAgICAgICBmaWxlbmFtZT1yZXByKGZpbGVuYW1lKSwKLSAgICAgICAgICAgIGhhc19maWxlbmFtZT1ib29sKGZpbGVuYW1lKSwKKyAgICAgICAgICAgIGZpbGVuYW1lPWZpbGVuYW1lLAorICAgICAgICAgICAgZmQ9ZmQsCiAgICAgICAgICkKICAgICAgICAgaWYgZmlsZW5hbWU6Ci0gICAgICAgICAgICBsaW5lbm8gPSA2CisgICAgICAgICAgICBsaW5lbm8gPSA5CisgICAgICAgIGVsaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lbm8gPSAxMgogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZW5vID0gOAorICAgICAgICAgICAgbGluZW5vID0gMTQKICAgICAgICAgZXhwZWN0ZWQgPSBbCiAgICAgICAgICAgICAnU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgJXMgaW4gZnVuY0InICUgbGluZW5vLAotICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDExIGluIGZ1bmNBJywKLSAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxMyBpbiA8bW9kdWxlPicKKyAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxNyBpbiBmdW5jQScsCisgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMTkgaW4gPG1vZHVsZT4nCiAgICAgICAgIF0KLSAgICAgICAgdHJhY2UsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lKQorICAgICAgICB0cmFjZSwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUsIGZkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLCBleHBlY3RlZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgMCkKIAogICAgIGRlZiB0ZXN0X2R1bXBfdHJhY2ViYWNrKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrX2R1bXBfdHJhY2ViYWNrKE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tfZHVtcF90cmFjZWJhY2soKQogCiAgICAgZGVmIHRlc3RfZHVtcF90cmFjZWJhY2tfZmlsZShzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wb3JhcnlfZmlsZW5hbWUoKSBhcyBmaWxlbmFtZToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfZHVtcF90cmFjZWJhY2soZmlsZW5hbWUpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2R1bXBfdHJhY2ViYWNrKGZpbGVuYW1lPWZpbGVuYW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgICAgICJzdWJwcm9jZXNzIGRvZXNuJ3Qgc3VwcG9ydCBwYXNzX2ZkcyBvbiBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9kdW1wX3RyYWNlYmFja19mZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCd3YisnKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZHVtcF90cmFjZWJhY2soZmQ9ZnAuZmlsZW5vKCkpCiAKICAgICBkZWYgdGVzdF90cnVuY2F0ZShzZWxmKToKICAgICAgICAgbWF4bGVuID0gNTAwCkBAIC00MjMsNyArNDgwLDEwIEBACiAgICAgICAgIHdpdGggdGVtcG9yYXJ5X2ZpbGVuYW1lKCkgYXMgZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLmNoZWNrX2R1bXBfdHJhY2ViYWNrX3RocmVhZHMoZmlsZW5hbWUpCiAKLSAgICBkZWYgX2NoZWNrX2R1bXBfdHJhY2ViYWNrX2xhdGVyKHNlbGYsIHJlcGVhdCwgY2FuY2VsLCBmaWxlbmFtZSwgbG9vcHMpOgorICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKSwKKyAgICAgICAgICAgICAgICAgICAgICduZWVkIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlcigpJykKKyAgICBkZWYgY2hlY2tfZHVtcF90cmFjZWJhY2tfbGF0ZXIoc2VsZiwgcmVwZWF0PUZhbHNlLCBjYW5jZWw9RmFsc2UsIGxvb3BzPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIGZpbGVuYW1lPU5vbmUsIGZkPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgQ2hlY2sgaG93IG1hbnkgdGltZXMgdGhlIHRyYWNlYmFjayBpcyB3cml0dGVuIGluIHRpbWVvdXQgeCAyLjUgc2Vjb25kcywKICAgICAgICAgb3IgdGltZW91dCB4IDMuNSBzZWNvbmRzIGlmIGNhbmNlbCBpcyBUcnVlOiAxLCAyIG9yIDMgdGltZXMgZGVwZW5kaW5nCkBAIC00MzUsNiArNDk1LDE0IEBACiAgICAgICAgIGNvZGUgPSAiIiIKICAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKICAgICAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICAgICBpbXBvcnQgc3lzCisKKyAgICAgICAgICAgIHRpbWVvdXQgPSB7dGltZW91dH0KKyAgICAgICAgICAgIHJlcGVhdCA9IHtyZXBlYXR9CisgICAgICAgICAgICBjYW5jZWwgPSB7Y2FuY2VsfQorICAgICAgICAgICAgbG9vcHMgPSB7bG9vcHN9CisgICAgICAgICAgICBmaWxlbmFtZSA9IHtmaWxlbmFtZSFyfQorICAgICAgICAgICAgZmQgPSB7ZmR9CiAKICAgICAgICAgICAgIGRlZiBmdW5jKHRpbWVvdXQsIHJlcGVhdCwgY2FuY2VsLCBmaWxlLCBsb29wcyk6CiAgICAgICAgICAgICAgICAgZm9yIGxvb3AgaW4gcmFuZ2UobG9vcHMpOgpAQCAtNDQ0LDE2ICs1MTIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCh0aW1lb3V0ICogNSkKICAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcigpCiAKLSAgICAgICAgICAgIHRpbWVvdXQgPSB7dGltZW91dH0KLSAgICAgICAgICAgIHJlcGVhdCA9IHtyZXBlYXR9Ci0gICAgICAgICAgICBjYW5jZWwgPSB7Y2FuY2VsfQotICAgICAgICAgICAgbG9vcHMgPSB7bG9vcHN9Ci0gICAgICAgICAgICBpZiB7aGFzX2ZpbGVuYW1lfToKLSAgICAgICAgICAgICAgICBmaWxlID0gb3Blbih7ZmlsZW5hbWV9LCAid2IiKQorICAgICAgICAgICAgaWYgZmlsZW5hbWU6CisgICAgICAgICAgICAgICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUsICJ3YiIpCisgICAgICAgICAgICBlbGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyLmZpbGVubygpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZpbGUgPSBOb25lCiAgICAgICAgICAgICBmdW5jKHRpbWVvdXQsIHJlcGVhdCwgY2FuY2VsLCBmaWxlLCBsb29wcykKLSAgICAgICAgICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBmaWxlbmFtZToKICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKICAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoCkBAIC00NjEsOCArNTI3LDggQEAKICAgICAgICAgICAgIHJlcGVhdD1yZXBlYXQsCiAgICAgICAgICAgICBjYW5jZWw9Y2FuY2VsLAogICAgICAgICAgICAgbG9vcHM9bG9vcHMsCi0gICAgICAgICAgICBoYXNfZmlsZW5hbWU9Ym9vbChmaWxlbmFtZSksCi0gICAgICAgICAgICBmaWxlbmFtZT1yZXByKGZpbGVuYW1lKSwKKyAgICAgICAgICAgIGZpbGVuYW1lPWZpbGVuYW1lLAorICAgICAgICAgICAgZmQ9ZmQsCiAgICAgICAgICkKICAgICAgICAgdHJhY2UsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lKQogICAgICAgICB0cmFjZSA9ICdcbicuam9pbih0cmFjZSkKQEAgLTQ3MiwyNyArNTM4LDEyIEBACiAgICAgICAgICAgICBpZiByZXBlYXQ6CiAgICAgICAgICAgICAgICAgY291bnQgKj0gMgogICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKyBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicgJSB0aW1lb3V0X3N0cgotICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soOSwgMjAsIGhlYWRlciwgbWluX2NvdW50PWNvdW50KQorICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soMTcsIDI2LCBoZWFkZXIsIG1pbl9jb3VudD1jb3VudCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgodHJhY2UsIHJlZ2V4KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZSwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyksCi0gICAgICAgICAgICAgICAgICAgICAnbmVlZCBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIoKScpCi0gICAgZGVmIGNoZWNrX2R1bXBfdHJhY2ViYWNrX2xhdGVyKHNlbGYsIHJlcGVhdD1GYWxzZSwgY2FuY2VsPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1GYWxzZSwgdHdpY2U9RmFsc2UpOgotICAgICAgICBpZiB0d2ljZToKLSAgICAgICAgICAgIGxvb3BzID0gMgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9vcHMgPSAxCi0gICAgICAgIGlmIGZpbGU6Ci0gICAgICAgICAgICB3aXRoIHRlbXBvcmFyeV9maWxlbmFtZSgpIGFzIGZpbGVuYW1lOgotICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2R1bXBfdHJhY2ViYWNrX2xhdGVyKHJlcGVhdCwgY2FuY2VsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbG9vcHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9jaGVja19kdW1wX3RyYWNlYmFja19sYXRlcihyZXBlYXQsIGNhbmNlbCwgTm9uZSwgbG9vcHMpCi0KICAgICBkZWYgdGVzdF9kdW1wX3RyYWNlYmFja19sYXRlcihzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19kdW1wX3RyYWNlYmFja19sYXRlcigpCiAKQEAgLTUwMywxNSArNTU0LDIyIEBACiAgICAgICAgIHNlbGYuY2hlY2tfZHVtcF90cmFjZWJhY2tfbGF0ZXIoY2FuY2VsPVRydWUpCiAKICAgICBkZWYgdGVzdF9kdW1wX3RyYWNlYmFja19sYXRlcl9maWxlKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrX2R1bXBfdHJhY2ViYWNrX2xhdGVyKGZpbGU9VHJ1ZSkKKyAgICAgICAgd2l0aCB0ZW1wb3JhcnlfZmlsZW5hbWUoKSBhcyBmaWxlbmFtZToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZHVtcF90cmFjZWJhY2tfbGF0ZXIoZmlsZW5hbWU9ZmlsZW5hbWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLAorICAgICAgICAgICAgICAgICAgICAgInN1YnByb2Nlc3MgZG9lc24ndCBzdXBwb3J0IHBhc3NfZmRzIG9uIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X2R1bXBfdHJhY2ViYWNrX2xhdGVyX2ZkKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoJ3diKycpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5jaGVja19kdW1wX3RyYWNlYmFja19sYXRlcihmZD1mcC5maWxlbm8oKSkKIAogICAgIGRlZiB0ZXN0X2R1bXBfdHJhY2ViYWNrX2xhdGVyX3R3aWNlKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrX2R1bXBfdHJhY2ViYWNrX2xhdGVyKHR3aWNlPVRydWUpCisgICAgICAgIHNlbGYuY2hlY2tfZHVtcF90cmFjZWJhY2tfbGF0ZXIobG9vcHM9MikKIAogICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAicmVnaXN0ZXIiKSwKICAgICAgICAgICAgICAgICAgICAgICJuZWVkIGZhdWx0aGFuZGxlci5yZWdpc3RlciIpCiAgICAgZGVmIGNoZWNrX3JlZ2lzdGVyKHNlbGYsIGZpbGVuYW1lPUZhbHNlLCBhbGxfdGhyZWFkcz1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcj1GYWxzZSwgY2hhaW49RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyPUZhbHNlLCBjaGFpbj1GYWxzZSwgZmQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBSZWdpc3RlciBhIGhhbmRsZXIgZGlzcGxheWluZyB0aGUgdHJhY2ViYWNrIG9uIGEgdXNlciBzaWduYWwuIFJhaXNlIHRoZQogICAgICAgICBzaWduYWwgYW5kIGNoZWNrIHRoZSB3cml0dGVuIHRyYWNlYmFjay4KQEAgLTUyNyw2ICs1ODUsMTMgQEAKICAgICAgICAgICAgIGltcG9ydCBzaWduYWwKICAgICAgICAgICAgIGltcG9ydCBzeXMKIAorICAgICAgICAgICAgYWxsX3RocmVhZHMgPSB7YWxsX3RocmVhZHN9CisgICAgICAgICAgICBzaWdudW0gPSB7c2lnbnVtfQorICAgICAgICAgICAgdW5yZWdpc3RlciA9IHt1bnJlZ2lzdGVyfQorICAgICAgICAgICAgY2hhaW4gPSB7Y2hhaW59CisgICAgICAgICAgICBmaWxlbmFtZSA9IHtmaWxlbmFtZSFyfQorICAgICAgICAgICAgZmQgPSB7ZmR9CisKICAgICAgICAgICAgIGRlZiBmdW5jKHNpZ251bSk6CiAgICAgICAgICAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbnVtKQogCkBAIC01MzQsMTkgKzU5OSwxNiBAQAogICAgICAgICAgICAgICAgIGhhbmRsZXIuY2FsbGVkID0gVHJ1ZQogICAgICAgICAgICAgaGFuZGxlci5jYWxsZWQgPSBGYWxzZQogCi0gICAgICAgICAgICBleGl0Y29kZSA9IDAKLSAgICAgICAgICAgIHNpZ251bSA9IHtzaWdudW19Ci0gICAgICAgICAgICB1bnJlZ2lzdGVyID0ge3VucmVnaXN0ZXJ9Ci0gICAgICAgICAgICBjaGFpbiA9IHtjaGFpbn0KLQotICAgICAgICAgICAgaWYge2hhc19maWxlbmFtZX06Ci0gICAgICAgICAgICAgICAgZmlsZSA9IG9wZW4oe2ZpbGVuYW1lfSwgIndiIikKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcGVuKGZpbGVuYW1lLCAid2IiKQorICAgICAgICAgICAgZWxpZiBmZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmaWxlID0gc3lzLnN0ZGVyci5maWxlbm8oKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmaWxlID0gTm9uZQogICAgICAgICAgICAgaWYgY2hhaW46CiAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWdudW0sIGhhbmRsZXIpCiAgICAgICAgICAgICBmYXVsdGhhbmRsZXIucmVnaXN0ZXIoc2lnbnVtLCBmaWxlPWZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX3RocmVhZHM9e2FsbF90aHJlYWRzfSwgY2hhaW49e2NoYWlufSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfdGhyZWFkcz1hbGxfdGhyZWFkcywgY2hhaW49e2NoYWlufSkKICAgICAgICAgICAgIGlmIHVucmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLnVucmVnaXN0ZXIoc2lnbnVtKQogICAgICAgICAgICAgZnVuYyhzaWdudW0pCkBAIC01NTcsMTcgKzYxOSwxOSBAQAogICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzeXMuc3RkZXJyCiAgICAgICAgICAgICAgICAgcHJpbnQoIkVycm9yOiBzaWduYWwgaGFuZGxlciBub3QgY2FsbGVkISIsIGZpbGU9b3V0cHV0KQogICAgICAgICAgICAgICAgIGV4aXRjb2RlID0gMQotICAgICAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXhpdGNvZGUgPSAwCisgICAgICAgICAgICBpZiBmaWxlbmFtZToKICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKICAgICAgICAgICAgIHN5cy5leGl0KGV4aXRjb2RlKQogICAgICAgICAgICAgIiIiCiAgICAgICAgIGNvZGUgPSBjb2RlLmZvcm1hdCgKLSAgICAgICAgICAgIGZpbGVuYW1lPXJlcHIoZmlsZW5hbWUpLAotICAgICAgICAgICAgaGFzX2ZpbGVuYW1lPWJvb2woZmlsZW5hbWUpLAogICAgICAgICAgICAgYWxsX3RocmVhZHM9YWxsX3RocmVhZHMsCiAgICAgICAgICAgICBzaWdudW09c2lnbnVtLAogICAgICAgICAgICAgdW5yZWdpc3Rlcj11bnJlZ2lzdGVyLAogICAgICAgICAgICAgY2hhaW49Y2hhaW4sCisgICAgICAgICAgICBmaWxlbmFtZT1maWxlbmFtZSwKKyAgICAgICAgICAgIGZkPWZkLAogICAgICAgICApCiAgICAgICAgIHRyYWNlLCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlLCBmaWxlbmFtZSkKICAgICAgICAgdHJhY2UgPSAnXG4nLmpvaW4odHJhY2UpCkBAIC01NzYsNyArNjQwLDcgQEAKICAgICAgICAgICAgICAgICByZWdleCA9ICdDdXJyZW50IHRocmVhZCBYWFggXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ1N0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJwotICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soNywgMjgsIHJlZ2V4KQorICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soMTQsIDMyLCByZWdleCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgodHJhY2UsIHJlZ2V4KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZSwgJycpCkBAIC01OTUsNiArNjU5LDEyIEBACiAgICAgICAgIHdpdGggdGVtcG9yYXJ5X2ZpbGVuYW1lKCkgYXMgZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLmNoZWNrX3JlZ2lzdGVyKGZpbGVuYW1lPWZpbGVuYW1lKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgICAgICJzdWJwcm9jZXNzIGRvZXNuJ3Qgc3VwcG9ydCBwYXNzX2ZkcyBvbiBXaW5kb3dzIikKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9mZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCd3YisnKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVnaXN0ZXIoZmQ9ZnAuZmlsZW5vKCkpCisKICAgICBkZWYgdGVzdF9yZWdpc3Rlcl90aHJlYWRzKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3JlZ2lzdGVyKGFsbF90aHJlYWRzPVRydWUpCiAKQEAgLTYxMyw3ICs2ODMsNyBAQAogICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0ZGVycgogCiAgICAgZGVmIHRlc3Rfc3RkZXJyX05vbmUoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzIxNDk3OiBwcm92aWRlIGFuIGhlbHBmdWwgZXJyb3IgaWYgc3lzLnN0ZGVyciBpcyBOb25lLAorICAgICAgICAjIElzc3VlICMyMTQ5NzogcHJvdmlkZSBhIGhlbHBmdWwgZXJyb3IgaWYgc3lzLnN0ZGVyciBpcyBOb25lLAogICAgICAgICAjIGluc3RlYWQgb2YganVzdCBhbiBhdHRyaWJ1dGUgZXJyb3I6ICJOb25lIGhhcyBubyBhdHRyaWJ1dGUgZmlsZW5vIi4KICAgICAgICAgd2l0aCBzZWxmLmNoZWNrX3N0ZGVycl9ub25lKCk6CiAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZV9laW50ci5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZV9laW50ci5weQppbmRleCBiNGUxOGNlLi5mMWVmZDI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGVfZWludHIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlX2VpbnRyLnB5CkBAIC0xMywxNiArMTMsMTYgQEAKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKICMgVGVzdCBpbXBvcnQgYWxsIG9mIHRoZSB0aGluZ3Mgd2UncmUgYWJvdXQgdG8gdHJ5IHRlc3RpbmcgdXAgZnJvbnQuCi1mcm9tIF9pbyBpbXBvcnQgRmlsZUlPCitpbXBvcnQgX2lvCitpbXBvcnQgX3B5aW8KIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICd0ZXN0cyByZXF1aXJlcyBhIHBvc2l4IHN5c3RlbS4nKQotY2xhc3MgVGVzdEZpbGVJT1NpZ25hbEludGVycnVwdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBUZXN0RmlsZUlPU2lnbmFsSW50ZXJydXB0OgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKIApAQCAtMzgsOCArMzgsOSBAQAogCiAgICAgICAgIHN1YmNsYXNzZXNlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byB0ZXN0IGRpZmZlcmVudCBJTyBvYmplY3RzLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuICgnaW1wb3J0IF9pbyA7JwotICAgICAgICAgICAgICAgICdpbmZpbGUgPSBfaW8uRmlsZUlPKHN5cy5zdGRpbi5maWxlbm8oKSwgInJiIiknKQorICAgICAgICByZXR1cm4gKCdpbXBvcnQgJXMgYXMgaW8gOycKKyAgICAgICAgICAgICAgICAnaW5maWxlID0gaW8uRmlsZUlPKHN5cy5zdGRpbi5maWxlbm8oKSwgInJiIiknICUKKyAgICAgICAgICAgICAgICBzZWxmLm1vZG5hbWUpCiAKICAgICBkZWYgZmFpbF93aXRoX3Byb2Nlc3NfaW5mbyhzZWxmLCB3aHksIHN0ZG91dD1iJycsIHN0ZGVycj1iJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbXVuaWNhdGU9VHJ1ZSk6CkBAIC0xNzksMTEgKzE4MCwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9YidoZWxsb1xud29ybGQhXG4nKSkKIAogCitjbGFzcyBDVGVzdEZpbGVJT1NpZ25hbEludGVycnVwdChUZXN0RmlsZUlPU2lnbmFsSW50ZXJydXB0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kbmFtZSA9ICdfaW8nCisKK2NsYXNzIFB5VGVzdEZpbGVJT1NpZ25hbEludGVycnVwdChUZXN0RmlsZUlPU2lnbmFsSW50ZXJydXB0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kbmFtZSA9ICdfcHlpbycKKworCiBjbGFzcyBUZXN0QnVmZmVyZWRJT1NpZ25hbEludGVycnVwdChUZXN0RmlsZUlPU2lnbmFsSW50ZXJydXB0KToKICAgICBkZWYgX2dlbmVyYXRlX2luZmlsZV9zZXR1cF9jb2RlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBpbmZpbGUgPSAuLi4gbGluZSBvZiBjb2RlIHRvIG1ha2UgYSBCdWZmZXJlZFJlYWRlci4iIiIKLSAgICAgICAgcmV0dXJuICgnaW5maWxlID0gb3BlbihzeXMuc3RkaW4uZmlsZW5vKCksICJyYiIpIDsnCi0gICAgICAgICAgICAgICAgJ2ltcG9ydCBfaW8gO2Fzc2VydCBpc2luc3RhbmNlKGluZmlsZSwgX2lvLkJ1ZmZlcmVkUmVhZGVyKScpCisgICAgICAgIHJldHVybiAoJ2ltcG9ydCAlcyBhcyBpbyA7aW5maWxlID0gaW8ub3BlbihzeXMuc3RkaW4uZmlsZW5vKCksICJyYiIpIDsnCisgICAgICAgICAgICAgICAgJ2Fzc2VydCBpc2luc3RhbmNlKGluZmlsZSwgaW8uQnVmZmVyZWRSZWFkZXIpJyAlCisgICAgICAgICAgICAgICAgc2VsZi5tb2RuYW1lKQogCiAgICAgZGVmIHRlc3RfcmVhZGFsbChzZWxmKToKICAgICAgICAgIiIiQnVmZmVyZWRSZWFkZXIucmVhZCgpIG11c3QgaGFuZGxlIHNpZ25hbHMgYW5kIG5vdCBsb3NlIGRhdGEuIiIiCkBAIC0xOTMsMTIgKzIwMiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9tZXRob2RfbmFtZT0ncmVhZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1iJ2hlbGxvXG53b3JsZCFcbicpKQogCitjbGFzcyBDVGVzdEJ1ZmZlcmVkSU9TaWduYWxJbnRlcnJ1cHQoVGVzdEJ1ZmZlcmVkSU9TaWduYWxJbnRlcnJ1cHQsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2RuYW1lID0gJ19pbycKKworY2xhc3MgUHlUZXN0QnVmZmVyZWRJT1NpZ25hbEludGVycnVwdChUZXN0QnVmZmVyZWRJT1NpZ25hbEludGVycnVwdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZG5hbWUgPSAnX3B5aW8nCisKIAogY2xhc3MgVGVzdFRleHRJT1NpZ25hbEludGVycnVwdChUZXN0RmlsZUlPU2lnbmFsSW50ZXJydXB0KToKICAgICBkZWYgX2dlbmVyYXRlX2luZmlsZV9zZXR1cF9jb2RlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHRoZSBpbmZpbGUgPSAuLi4gbGluZSBvZiBjb2RlIHRvIG1ha2UgYSBUZXh0SU9XcmFwcGVyLiIiIgotICAgICAgICByZXR1cm4gKCdpbmZpbGUgPSBvcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgInJ0IiwgbmV3bGluZT1Ob25lKSA7JwotICAgICAgICAgICAgICAgICdpbXBvcnQgX2lvIDthc3NlcnQgaXNpbnN0YW5jZShpbmZpbGUsIF9pby5UZXh0SU9XcmFwcGVyKScpCisgICAgICAgIHJldHVybiAoJ2ltcG9ydCAlcyBhcyBpbyA7JworICAgICAgICAgICAgICAgICdpbmZpbGUgPSBpby5vcGVuKHN5cy5zdGRpbi5maWxlbm8oKSwgInJ0IiwgbmV3bGluZT1Ob25lKSA7JworICAgICAgICAgICAgICAgICdhc3NlcnQgaXNpbnN0YW5jZShpbmZpbGUsIGlvLlRleHRJT1dyYXBwZXIpJyAlCisgICAgICAgICAgICAgICAgc2VsZi5tb2RuYW1lKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CiAgICAgICAgICIiInJlYWRsaW5lKCkgbXVzdCBoYW5kbGUgc2lnbmFscyBhbmQgbm90IGxvc2UgZGF0YS4iIiIKQEAgLTIyNCwxMyArMjQxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX21ldGhvZF9uYW1lPSdyZWFkJywKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPSJoZWxsb1xud29ybGQhXG4iKSkKIAorY2xhc3MgQ1Rlc3RUZXh0SU9TaWduYWxJbnRlcnJ1cHQoVGVzdFRleHRJT1NpZ25hbEludGVycnVwdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZG5hbWUgPSAnX2lvJwogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9jYXNlcyA9IFsKLSAgICAgICAgICAgIHRjIGZvciB0YyBpbiBnbG9iYWxzKCkudmFsdWVzKCkKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGMsIHR5cGUpIGFuZCBpc3N1YmNsYXNzKHRjLCB1bml0dGVzdC5UZXN0Q2FzZSldCi0gICAgcnVuX3VuaXR0ZXN0KCp0ZXN0X2Nhc2VzKQorY2xhc3MgUHlUZXN0VGV4dElPU2lnbmFsSW50ZXJydXB0KFRlc3RUZXh0SU9TaWduYWxJbnRlcnJ1cHQsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2RuYW1lID0gJ19weWlvJwogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKaW5kZXggNDc2NWEwNS4uNzg0YmM5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKQEAgLTQ2LDYgKzQ2LDQyIEBACiAgICAgICAgIGlmIG5hbWU6CiAgICAgICAgICAgICBzYWZlX3VubGluayhuYW1lKQogCitjbGFzcyBMaW5lUmVhZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9saW5lc3JlYWQgPSBbXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpbmVzcmVhZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xpbmVzcmVhZFs6XQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbGluZXNyZWFkID0gW10KKworICAgIGRlZiBvcGVuaG9vayhzZWxmLCBmaWxlbmFtZSwgbW9kZSk6CisgICAgICAgIHNlbGYuaXQgPSBpdGVyKGZpbGVuYW1lLnNwbGl0bGluZXMoVHJ1ZSkpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgbGluZSA9IG5leHQoc2VsZi5pdCwgJycpCisgICAgICAgIHNlbGYuX2xpbmVzcmVhZC5hcHBlbmQobGluZSkKKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIGRlZiByZWFkbGluZXMoc2VsZiwgaGludD0tMSk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgc2l6ZSA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lcworICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICBzaXplICs9IGxlbihsaW5lKQorICAgICAgICAgICAgaWYgc2l6ZSA+PSBoaW50OgorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKIGNsYXNzIEJ1ZmZlclNpemVzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2J1ZmZlcl9zaXplcyhzZWxmKToKICAgICAgICAgIyBGaXJzdCwgcnVuIHRoZSB0ZXN0cyB3aXRoIGRlZmF1bHQgYW5kIHRlZW55IGJ1ZmZlciBzaXplLgpAQCAtMjQwLDYgKzI3NiwxNyBAQAogICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgW2Inc3BhbSwgYmFjb24sIHNhdXNhZ2UsIGFuZCBzcGFtJ10pCiAKKyAgICBkZWYgdGVzdF9kZXRhY2hlZF9zdGRpbl9iaW5hcnlfbW9kZShzZWxmKToKKyAgICAgICAgb3JpZ19zdGRpbiA9IHN5cy5zdGRpbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4gPSBCeXRlc0lPKGInc3BhbSwgYmFjb24sIHNhdXNhZ2UsIGFuZCBzcGFtJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzeXMuc3RkaW4sICdidWZmZXInKSkKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPVsnLSddLCBtb2RlPSdyYicpCisgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbYidzcGFtLCBiYWNvbiwgc2F1c2FnZSwgYW5kIHNwYW0nXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IG9yaWdfc3RkaW4KKwogICAgIGRlZiB0ZXN0X2ZpbGVfb3BlbmluZ19ob29rKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIGNhbm5vdCB1c2Ugb3Blbmhvb2sgYW5kIGlucGxhY2UgbW9kZQpAQCAtMjc4LDcgKzMyNSw3IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzYWZlX3VubGluaywgVEVTVEZOKQogCiAgICAgICAgIHdpdGggRmlsZUlucHV0KGZpbGVzPVRFU1RGTiwKLSAgICAgICAgICAgICAgICAgICAgICAgb3Blbmhvb2s9aG9va19lbmNvZGVkKCdhc2NpaScpLCBidWZzaXplPTgpIGFzIGZpOgorICAgICAgICAgICAgICAgICAgICAgICBvcGVuaG9vaz1ob29rX2VuY29kZWQoJ2FzY2lpJykpIGFzIGZpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgJ0FcbicpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5yZWFkbGluZSgpLCAnQlxuJykKQEAgLTQ0Niw2ICs0OTMsMzggQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTEsICJmaWxlbm8oKSBzaG91bGQgcmV0dXJuIC0xIikKIAorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2J1ZmZlcmluZyhzZWxmKToKKyAgICAgICAgc3JjID0gTGluZVJlYWRlcigpCisgICAgICAgIHdpdGggRmlsZUlucHV0KGZpbGVzPVsnbGluZTFcbmxpbmUyJywgJ2xpbmUzXG4nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgb3Blbmhvb2s9c3JjLm9wZW5ob29rKSBhcyBmaToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLmxpbmVzcmVhZCwgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLnJlYWRsaW5lKCksICdsaW5lMVxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLmxpbmVzcmVhZCwgWydsaW5lMVxuJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLnJlYWRsaW5lKCksICdsaW5lMicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyYy5saW5lc3JlYWQsIFsnbGluZTInXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgJ2xpbmUzXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmMubGluZXNyZWFkLCBbJycsICdsaW5lM1xuJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLnJlYWRsaW5lKCksICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmMubGluZXNyZWFkLCBbJyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5yZWFkbGluZSgpLCAnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLmxpbmVzcmVhZCwgW10pCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb25fYnVmZmVyaW5nKHNlbGYpOgorICAgICAgICBzcmMgPSBMaW5lUmVhZGVyKCkKKyAgICAgICAgd2l0aCBGaWxlSW5wdXQoZmlsZXM9WydsaW5lMVxubGluZTInLCAnbGluZTNcbiddLAorICAgICAgICAgICAgICAgICAgICAgICBvcGVuaG9vaz1zcmMub3Blbmhvb2spIGFzIGZpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmMubGluZXNyZWFkLCBbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChmaSksICdsaW5lMVxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLmxpbmVzcmVhZCwgWydsaW5lMVxuJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZmkpLCAnbGluZTInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmMubGluZXNyZWFkLCBbJ2xpbmUyJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZmkpLCAnbGluZTNcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyYy5saW5lc3JlYWQsIFsnJywgJ2xpbmUzXG4nXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGZpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmMubGluZXNyZWFkLCBbJyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyYy5saW5lc3JlYWQsIFtdKQorCiBjbGFzcyBNb2NrRmlsZUlucHV0OgogICAgICIiIkEgY2xhc3MgdGhhdCBtb2NrcyBvdXQgZmlsZWlucHV0LkZpbGVJbnB1dCBmb3IgdXNlIGR1cmluZyB1bml0IHRlc3RzIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKaW5kZXggYTRmZDIwZC4uNTljYzM4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKQEAgLTEyLDEzICsxMiwxNSBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdCwgbWFrZV9iYWRfZmQsIGNweXRob25fb25seQogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgVXNlckxpc3QKIAotZnJvbSBfaW8gaW1wb3J0IEZpbGVJTyBhcyBfRmlsZUlPCitpbXBvcnQgX2lvICAjIEMgaW1wbGVtZW50YXRpb24gb2YgaW8KK2ltcG9ydCBfcHlpbyAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBpbwogCi1jbGFzcyBBdXRvRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgQXV0b0ZpbGVUZXN0czoKICAgICAjIGZpbGUgdGVzdHMgZm9yIHdoaWNoIGEgdGVzdCBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHVwCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAndycpCisgICAgICAgIHNlbGYuZiA9IHNlbGYuRmlsZUlPKFRFU1RGTiwgJ3cnKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmY6CkBAIC02MCwyMCArNjIsNjkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIsIGYsIGF0dHIsICdvb3BzJykKIAotICAgIGRlZiB0ZXN0UmVhZGludG8oc2VsZik6Ci0gICAgICAgICMgdmVyaWZ5IHJlYWRpbnRvCi0gICAgICAgIHNlbGYuZi53cml0ZShieXRlcyhbMSwgMl0pKQorICAgIGRlZiB0ZXN0Qmxrc2l6ZShzZWxmKToKKyAgICAgICAgIyB0ZXN0IHByaXZhdGUgX2Jsa3NpemUgYXR0cmlidXRlCisgICAgICAgIGJsa3NpemUgPSBpby5ERUZBVUxUX0JVRkZFUl9TSVpFCisgICAgICAgICMgdHJ5IHRvIGdldCBwcmVmZXJyZWQgYmxrc2l6ZSBmcm9tIHN0YXQuc3RfYmxrc2l6ZSwgaWYgYXZhaWxhYmxlCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdmc3RhdCcpOgorICAgICAgICAgICAgZnN0ID0gb3MuZnN0YXQoc2VsZi5mLmZpbGVubygpKQorICAgICAgICAgICAgYmxrc2l6ZSA9IGdldGF0dHIoZnN0LCAnc3RfYmxrc2l6ZScsIGJsa3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLl9ibGtzaXplLCBibGtzaXplKQorCisgICAgIyB2ZXJpZnkgcmVhZGludG8KKyAgICBkZWYgdGVzdFJlYWRpbnRvQnl0ZUFycmF5KHNlbGYpOgorICAgICAgICBzZWxmLmYud3JpdGUoYnl0ZXMoWzEsIDIsIDAsIDI1NV0pKQogICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICBhID0gYXJyYXkoJ2InLCBiJ3gnKjEwKQotICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3InKQotICAgICAgICBuID0gc2VsZi5mLnJlYWRpbnRvKGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyYXkoJ2InLCBbMSwgMl0pLCBhWzpuXSkKKworICAgICAgICBiYSA9IGJ5dGVhcnJheShiJ2FiY2RlZmdoJykKKyAgICAgICAgd2l0aCBzZWxmLkZpbGVJTyhURVNURk4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIG4gPSBmLnJlYWRpbnRvKGJhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhLCBiJ1x4MDFceDAyXHgwMFx4ZmZlZmdoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCA0KQorCisgICAgZGVmIF90ZXN0UmVhZGludG9NZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBzZWxmLmYud3JpdGUoYnl0ZXMoWzEsIDIsIDAsIDI1NV0pKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgIG0gPSBtZW1vcnl2aWV3KGJ5dGVhcnJheShiJ2FiY2RlZmdoJykpCisgICAgICAgIHdpdGggc2VsZi5GaWxlSU8oVEVTVEZOLCAncicpIGFzIGY6CisgICAgICAgICAgICBuID0gZi5yZWFkaW50byhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIGInXHgwMVx4MDJceDAwXHhmZmVmZ2gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDQpCisKKyAgICAgICAgbSA9IG1lbW9yeXZpZXcoYnl0ZWFycmF5KGInYWJjZGVmZ2gnKSkuY2FzdCgnSCcsIHNoYXBlPVsyLCAyXSkKKyAgICAgICAgd2l0aCBzZWxmLkZpbGVJTyhURVNURk4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIG4gPSBmLnJlYWRpbnRvKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIGInXHgwMVx4MDJceDAwXHhmZmVmZ2gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDQpCisKKyAgICBkZWYgX3Rlc3RSZWFkaW50b0FycmF5KHNlbGYpOgorICAgICAgICBzZWxmLmYud3JpdGUoYnl0ZXMoWzEsIDIsIDAsIDI1NV0pKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgIGEgPSBhcnJheSgnQicsIGInYWJjZGVmZ2gnKQorICAgICAgICB3aXRoIHNlbGYuRmlsZUlPKFRFU1RGTiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgbiA9IGYucmVhZGludG8oYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheSgnQicsIFsxLCAyLCAwLCAyNTUsIDEwMSwgMTAyLCAxMDMsIDEwNF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDQpCisKKyAgICAgICAgYSA9IGFycmF5KCdiJywgYidhYmNkZWZnaCcpCisgICAgICAgIHdpdGggc2VsZi5GaWxlSU8oVEVTVEZOLCAncicpIGFzIGY6CisgICAgICAgICAgICBuID0gZi5yZWFkaW50byhhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5KCdiJywgWzEsIDIsIDAsIC0xLCAxMDEsIDEwMiwgMTAzLCAxMDRdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCA0KQorCisgICAgICAgIGEgPSBhcnJheSgnSScsIGInYWJjZGVmZ2gnKQorICAgICAgICB3aXRoIHNlbGYuRmlsZUlPKFRFU1RGTiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgbiA9IGYucmVhZGludG8oYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheSgnSScsIGInXHgwMVx4MDJceDAwXHhmZmVmZ2gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCA0KQogCiAgICAgZGVmIHRlc3RXcml0ZWxpbmVzTGlzdChzZWxmKToKICAgICAgICAgbCA9IFtiJzEyMycsIGInNDU2J10KICAgICAgICAgc2VsZi5mLndyaXRlbGluZXMobCkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyYicpCisgICAgICAgIHNlbGYuZiA9IHNlbGYuRmlsZUlPKFRFU1RGTiwgJ3JiJykKICAgICAgICAgYnVmID0gc2VsZi5mLnJlYWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYicxMjM0NTYnKQogCkBAIC04MSw3ICsxMzIsNyBAQAogICAgICAgICBsID0gVXNlckxpc3QoW2InMTIzJywgYic0NTYnXSkKICAgICAgICAgc2VsZi5mLndyaXRlbGluZXMobCkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyYicpCisgICAgICAgIHNlbGYuZiA9IHNlbGYuRmlsZUlPKFRFU1RGTiwgJ3JiJykKICAgICAgICAgYnVmID0gc2VsZi5mLnJlYWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYicxMjM0NTYnKQogCkBAIC05Myw3ICsxNDQsNyBAQAogICAgIGRlZiB0ZXN0X25vbmVfYXJncyhzZWxmKToKICAgICAgICAgc2VsZi5mLndyaXRlKGIiaGlcbmJ5ZVxuYWJjIikKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyJykKKyAgICAgICAgc2VsZi5mID0gc2VsZi5GaWxlSU8oVEVTVEZOLCAncicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnJlYWQoTm9uZSksIGIiaGlcbmJ5ZVxuYWJjIikKICAgICAgICAgc2VsZi5mLnNlZWsoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYucmVhZGxpbmUoTm9uZSksIGIiaGlcbiIpCkBAIC0xMDMsMTMgKzE1NCwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZSwgIkhlbGxvISIpCiAKICAgICBkZWYgdGVzdFJlcHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLmYpLCAiPF9pby5GaWxlSU8gbmFtZT0lciBtb2RlPSVyPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmYubmFtZSwgc2VsZi5mLm1vZGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5mKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLkZpbGVJTyBuYW1lPSVyIG1vZGU9JXIgY2xvc2VmZD1UcnVlPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1vZHVsZW5hbWUsIHNlbGYuZi5uYW1lLCBzZWxmLmYubW9kZSkpCiAgICAgICAgIGRlbCBzZWxmLmYubmFtZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5mKSwgIjxfaW8uRmlsZUlPIGZkPSVyIG1vZGU9JXI+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuZi5maWxlbm8oKSwgc2VsZi5mLm1vZGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5mKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLkZpbGVJTyBmZD0lciBtb2RlPSVyIGNsb3NlZmQ9VHJ1ZT4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tb2R1bGVuYW1lLCBzZWxmLmYuZmlsZW5vKCksIHNlbGYuZi5tb2RlKSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYuZiksICI8X2lvLkZpbGVJTyBbY2xvc2VkXT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5mKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLkZpbGVJTyBbY2xvc2VkXT4iICUgKHNlbGYubW9kdWxlbmFtZSwpKQorCisgICAgZGVmIHRlc3RSZXByTm9DbG9zZUZEKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLkZpbGVJTyhmZCwgJ3InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuRmlsZUlPIG5hbWU9JXIgbW9kZT0lciBjbG9zZWZkPUZhbHNlPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubW9kdWxlbmFtZSwgZi5uYW1lLCBmLm1vZGUpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCiAKICAgICBkZWYgdGVzdEVycm9ycyhzZWxmKToKICAgICAgICAgZiA9IHNlbGYuZgpAQCAtMTE5LDcgKzE4Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZCwgMTApICMgT3BlbiBmb3IgcmVhZGluZwogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQotICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sICdyJykKKyAgICAgICAgZiA9IHNlbGYuRmlsZUlPKFRFU1RGTiwgJ3InKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGludG8sICIiKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTEzOCwxMSArMjAyLDExIEBACiAgICAgICAgICAgICAjIHNob3VsZCByYWlzZSBvbiBjbG9zZWQgZmlsZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi5yZWFkaW50bykgIyBYWFggc2hvdWxkIGJlIFR5cGVFcnJvcj8KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYucmVhZGludG8pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi5yZWFkaW50bywgYnl0ZWFycmF5KDEpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYuc2VlaykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYuc2VlaykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLnNlZWssIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi53cml0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi53cml0ZSwgYicnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgYicnKQpAQCAtMTUwLDkgKzIxNCw5IEBACiAgICAgZGVmIHRlc3RPcGVuZGlyKHNlbGYpOgogICAgICAgICAjIElzc3VlIDM3MDM6IG9wZW5pbmcgYSBkaXJlY3Rvcnkgc2hvdWxkIGZpbGwgdGhlIGVycm5vCiAgICAgICAgICMgV2luZG93cyBhbHdheXMgcmV0dXJucyAiW0Vycm5vIDEzXTogUGVybWlzc2lvbiBkZW5pZWQKLSAgICAgICAgIyBVbml4IGNhbGxzIGRpcmNoZWNrKCkgYW5kIHJldHVybnMgIltFcnJubyAyMV06IElzIGEgZGlyZWN0b3J5IgorICAgICAgICAjIFVuaXggdXNlcyBmc3RhdCBhbmQgcmV0dXJucyAiW0Vycm5vIDIxXTogSXMgYSBkaXJlY3RvcnkiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9GaWxlSU8oJy4nLCAncicpCisgICAgICAgICAgICBzZWxmLkZpbGVJTygnLicsICdyJykKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5lcnJubywgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgIi4iKQpAQCAtMTYzLDcgKzIyNyw3IEBACiAgICAgZGVmIHRlc3RPcGVuRGlyRkQoc2VsZik6CiAgICAgICAgIGZkID0gb3Mub3BlbignLicsIG9zLk9fUkRPTkxZKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgX0ZpbGVJTyhmZCwgJ3InKQorICAgICAgICAgICAgc2VsZi5GaWxlSU8oZmQsICdyJykKICAgICAgICAgb3MuY2xvc2UoZmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSVNESVIpCiAKQEAgLTI0OCw3ICszMTIsNyBAQAogICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCisgICAgICAgIHNlbGYuZiA9IHNlbGYuRmlsZUlPKFRFU1RGTiwgJ3InKQogICAgICAgICBvcy5jbG9zZShzZWxmLmYuZmlsZW5vKCkpCiAgICAgICAgIHJldHVybiBzZWxmLmYKIApAQCAtMjY4LDIzICszMzIsMzIgQEAKICAgICAgICAgYSA9IGFycmF5KCdiJywgYid4JyoxMCkKICAgICAgICAgZi5yZWFkaW50byhhKQogCi1jbGFzcyBPdGhlckZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDQXV0b0ZpbGVUZXN0cyhBdXRvRmlsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgRmlsZUlPID0gX2lvLkZpbGVJTworICAgIG1vZHVsZW5hbWUgPSAnX2lvJworCitjbGFzcyBQeUF1dG9GaWxlVGVzdHMoQXV0b0ZpbGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEZpbGVJTyA9IF9weWlvLkZpbGVJTworICAgIG1vZHVsZW5hbWUgPSAnX3B5aW8nCisKKworY2xhc3MgT3RoZXJGaWxlVGVzdHM6CiAKICAgICBkZWYgdGVzdEFibGVzKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sICJ3IikKKyAgICAgICAgICAgIGYgPSBzZWxmLkZpbGVJTyhURVNURk4sICJ3IikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCiAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAiciIpCisgICAgICAgICAgICBmID0gc2VsZi5GaWxlSU8oVEVTVEZOLCAiciIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBGYWxzZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgImErIikKKyAgICAgICAgICAgIGYgPSBzZWxmLkZpbGVJTyhURVNURk4sICJhKyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCkBAIC0yOTMsNyArMzY2LDcgQEAKIAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmID0gX0ZpbGVJTygiL2Rldi90dHkiLCAiYSIpCisgICAgICAgICAgICAgICAgICAgIGYgPSBzZWxmLkZpbGVJTygiL2Rldi90dHkiLCAiYSIpCiAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgV2hlbiBydW4gaW4gYSBjcm9uIGpvYiB0aGVyZSBqdXN0IGFyZW4ndCBhbnkKICAgICAgICAgICAgICAgICAgICAgIyB0dHlzLCBzbyBza2lwIHRoZSB0ZXN0LiAgVGhpcyBhbHNvIGhhbmRsZXMgb3RoZXIKQEAgLTMxNiw3ICszODksNyBAQAogICAgICAgICAjIGNoZWNrIGludmFsaWQgbW9kZSBzdHJpbmdzCiAgICAgICAgIGZvciBtb2RlIGluICgiIiwgImFVIiwgIndVKyIsICJydyIsICJydCIpOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5GaWxlSU8oVEVTVEZOLCBtb2RlKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKQEAgLTMzMiw3ICs0MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2FiKycsICdhYisnKSwgKCdhK2InLCAnYWIrJyksICgncicsICdyYicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JiJywgJ3JiJyksICgncmIrJywgJ3JiKycpLCAoJ3IrYicsICdyYisnKV06CiAgICAgICAgICAgICAgICAgIyByZWFkIG1vZGVzIGFyZSBsYXN0IHNvIHRoYXQgVEVTVEZOIHdpbGwgZXhpc3QgZmlyc3QKLSAgICAgICAgICAgICAgICB3aXRoIF9GaWxlSU8oVEVTVEZOLCBtb2Rlc1swXSkgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuRmlsZUlPKFRFU1RGTiwgbW9kZXNbMF0pIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5tb2RlLCBtb2Rlc1sxXSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CkBAIC0zNDAsNyArNDEzLDcgQEAKIAogICAgIGRlZiB0ZXN0VW5pY29kZU9wZW4oc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IHJlcHIgd29ya3MgZm9yIHVuaWNvZGUgdG9vCi0gICAgICAgIGYgPSBfRmlsZUlPKHN0cihURVNURk4pLCAidyIpCisgICAgICAgIGYgPSBzZWxmLkZpbGVJTyhzdHIoVEVTVEZOKSwgInciKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKIApAQCAtMzUwLDcgKzQyMyw3IEBACiAgICAgICAgICAgICBmbiA9IFRFU1RGTi5lbmNvZGUoImFzY2lpIikKICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2NvdWxkIG5vdCBlbmNvZGUgJXIgdG8gYXNjaWknICUgVEVTVEZOKQotICAgICAgICBmID0gX0ZpbGVJTyhmbiwgInciKQorICAgICAgICBmID0gc2VsZi5GaWxlSU8oZm4sICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShiImFiYyIpCiAgICAgICAgICAgICBmLmNsb3NlKCkKQEAgLTM2MSwyOCArNDM0LDIxIEBACiAKICAgICBkZWYgdGVzdENvbnN0cnVjdG9ySGFuZGxlc05VTENoYXJzKHNlbGYpOgogICAgICAgICBmbl93aXRoX05VTCA9ICdmb29cMGJhcicKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCBmbl93aXRoX05VTCwgJ3cnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sIGJ5dGVzKGZuX3dpdGhfTlVMLCAnYXNjaWknKSwgJ3cnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLkZpbGVJTywgZm5fd2l0aF9OVUwsICd3JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5GaWxlSU8sIGJ5dGVzKGZuX3dpdGhfTlVMLCAnYXNjaWknKSwgJ3cnKQogCiAgICAgZGVmIHRlc3RJbnZhbGlkRmQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9GaWxlSU8sIC0xMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgX0ZpbGVJTywgbWFrZV9iYWRfZmQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5GaWxlSU8sIC0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5GaWxlSU8sIG1ha2VfYmFkX2ZkKCkpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgaW1wb3J0IG1zdmNydAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXN2Y3J0LmdldF9vc2ZoYW5kbGUsIG1ha2VfYmFkX2ZkKCkpCiAKLSAgICBAY3B5dGhvbl9vbmx5Ci0gICAgZGVmIHRlc3RJbnZhbGlkRmRfb3ZlcmZsb3coc2VsZik6Ci0gICAgICAgICMgSXNzdWUgMTU5ODkKLSAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sIF90ZXN0Y2FwaS5JTlRfTUFYICsgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCBfdGVzdGNhcGkuSU5UX01JTiAtIDEpCi0KICAgICBkZWYgdGVzdEJhZE1vZGVBcmd1bWVudChzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgdGhhdCB3ZSBnZXQgYSBzZW5zaWJsZSBlcnJvciBtZXNzYWdlIGZvciBiYWQgbW9kZSBhcmd1bWVudAogICAgICAgICBiYWRfbW9kZSA9ICJxd2VydHkiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgYmFkX21vZGUpCisgICAgICAgICAgICBmID0gc2VsZi5GaWxlSU8oVEVTVEZOLCBiYWRfbW9kZSkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gIT0gMDoKICAgICAgICAgICAgICAgICBzID0gc3RyKG1zZykKQEAgLTM5NSw3ICs0NjEsNyBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBlcnJvciBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBiYWRfbW9kZSkKIAogICAgIGRlZiB0ZXN0VHJ1bmNhdGUoc2VsZik6Ci0gICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgJ3cnKQorICAgICAgICBmID0gc2VsZi5GaWxlSU8oVEVTVEZOLCAndycpCiAgICAgICAgIGYud3JpdGUoYnl0ZXMoYnl0ZWFycmF5KHJhbmdlKDEwKSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxMCkKICAgICAgICAgZi50cnVuY2F0ZSg1KQpAQCAtNDEwLDExICs0NzYsMTEgQEAKICAgICAgICAgZGVmIGJ1ZzgwMTYzMSgpOgogICAgICAgICAgICAgIyBTRiBidWcgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi84MDE2MzE+CiAgICAgICAgICAgICAjICJmaWxlLnRydW5jYXRlIGZhdWx0IG9uIHdpbmRvd3MiCi0gICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sICd3JykKKyAgICAgICAgICAgIGYgPSBzZWxmLkZpbGVJTyhURVNURk4sICd3JykKICAgICAgICAgICAgIGYud3JpdGUoYnl0ZXMocmFuZ2UoMTEpKSkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sJ3IrJykKKyAgICAgICAgICAgIGYgPSBzZWxmLkZpbGVJTyhURVNURk4sJ3IrJykKICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoNSkKICAgICAgICAgICAgIGlmIGRhdGEgIT0gYnl0ZXMocmFuZ2UoNSkpOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVhZCBvbiBmaWxlIG9wZW5lZCBmb3IgdXBkYXRlIGZhaWxlZCAlciIgJSBkYXRhKQpAQCAtNDU0LDE5ICs1MjAsMTkgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdEludmFsaWRJbml0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sICIxIiwgMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkZpbGVJTywgIjEiLCAwLCAwKQogCiAgICAgZGVmIHRlc3RXYXJuaW5ncyhzZWxmKToKICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncyhxdWlldD1UcnVlKSBhcyB3OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Lndhcm5pbmdzLCBbXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuRmlsZUlPLCBbXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfRmlsZUlPLCAiL3NvbWUvaW52YWxpZC9uYW1lIiwgInJ0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuRmlsZUlPLCAiL3NvbWUvaW52YWxpZC9uYW1lIiwgInJ0IikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCiAKICAgICBkZWYgdGVzdFVuY2xvc2VkRkRPbkV4Y2VwdGlvbihzZWxmKToKICAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRXhjZXB0aW9uKTogcGFzcwotICAgICAgICBjbGFzcyBNeUZpbGVJTyhfRmlsZUlPKToKKyAgICAgICAgY2xhc3MgTXlGaWxlSU8oc2VsZi5GaWxlSU8pOgogICAgICAgICAgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJuYW1lIjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTXlFeGNlcHRpb24oImJsb2NrZWQgc2V0dGluZyBuYW1lIikKQEAgLTQ3NSwxMiArNTQxLDI4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE15RXhjZXB0aW9uLCBNeUZpbGVJTywgZmQpCiAgICAgICAgIG9zLmNsb3NlKGZkKSAgIyBzaG91bGQgbm90IHJhaXNlIE9TRXJyb3IoRUJBREYpCiAKK2NsYXNzIENPdGhlckZpbGVUZXN0cyhPdGhlckZpbGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEZpbGVJTyA9IF9pby5GaWxlSU8KKyAgICBtb2R1bGVuYW1lID0gJ19pbycKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdEludmFsaWRGZF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNTk4OQorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5GaWxlSU8sIF90ZXN0Y2FwaS5JTlRfTUFYICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLkZpbGVJTywgX3Rlc3RjYXBpLklOVF9NSU4gLSAxKQorCitjbGFzcyBQeU90aGVyRmlsZVRlc3RzKE90aGVyRmlsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgRmlsZUlPID0gX3B5aW8uRmlsZUlPCisgICAgbW9kdWxlbmFtZSA9ICdfcHlpbycKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgIyBIaXN0b3JpY2FsbHksIHRoZXNlIHRlc3RzIGhhdmUgYmVlbiBzbG9wcHkgYWJvdXQgcmVtb3ZpbmcgVEVTVEZOLgogICAgICMgU28gZ2V0IHJpZCBvZiBpdCBubyBtYXR0ZXIgd2hhdC4KICAgICB0cnk6Ci0gICAgICAgIHJ1bl91bml0dGVzdChBdXRvRmlsZVRlc3RzLCBPdGhlckZpbGVUZXN0cykKKyAgICAgICAgcnVuX3VuaXR0ZXN0KENBdXRvRmlsZVRlc3RzLCBQeUF1dG9GaWxlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICBDT3RoZXJGaWxlVGVzdHMsIFB5T3RoZXJGaWxlVGVzdHMpCiAgICAgZmluYWxseToKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKICAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbmFsaXphdGlvbi5weSBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5CmluZGV4IDAzYWMxYWEuLjM1ZDc5MTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5CkBAIC01MTUsOCArNTE1LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mbG9hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKaW5kZXggMjRmZTEyOC4uY2IxZjZkYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CkBAIC04MjIsNiArODIyLDE0IEBACiAgICAgICAgICAgICB0ZXN0KHNmbXQsIE5BTiwgJyBuYW4nKQogICAgICAgICAgICAgdGVzdChzZm10LCAtTkFOLCAnIG5hbicpCiAKKyAgICBkZWYgdGVzdF9Ob25lX25kaWdpdHMoc2VsZik6CisgICAgICAgIGZvciB4IGluIHJvdW5kKDEuMjMpLCByb3VuZCgxLjIzLCBOb25lKSwgcm91bmQoMS4yMywgbmRpZ2l0cz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBpbnQpCisgICAgICAgIGZvciB4IGluIHJvdW5kKDEuNzgpLCByb3VuZCgxLjc4LCBOb25lKSwgcm91bmQoMS43OCwgbmRpZ2l0cz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBpbnQpCisKIAogIyBCZWdpbm5pbmcgd2l0aCBQeXRob24gMi42IGZsb2F0IGhhcyBjcm9zcyBwbGF0Zm9ybSBjb21wYXRpYmxlCiAjIHdheXMgdG8gY3JlYXRlIGFuZCByZXByZXNlbnQgaW5mIGFuZCBuYW4KQEAgLTEzNDcsMTkgKzEzNTUsMjQgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5pZGVudGljYWwoeCwgZnJvbUhleCh0b0hleCh4KSkpCiAKKyAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRihmbG9hdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIHZhbHVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQuX19uZXdfXyhjbHMsIHZhbHVlICsgMSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBHZW5lcmFsRmxvYXRDYXNlcywKLSAgICAgICAgRm9ybWF0RnVuY3Rpb25zVGVzdENhc2UsCi0gICAgICAgIFVua25vd25Gb3JtYXRUZXN0Q2FzZSwKLSAgICAgICAgSUVFRUZvcm1hdFRlc3RDYXNlLAotICAgICAgICBGb3JtYXRUZXN0Q2FzZSwKLSAgICAgICAgUmVwclRlc3RDYXNlLAotICAgICAgICBSb3VuZFRlc3RDYXNlLAotICAgICAgICBJbmZOYW5UZXN0LAotICAgICAgICBIZXhGbG9hdFRlc3RDYXNlLAotICAgICAgICApCisgICAgICAgIGYgPSBGLmZyb21oZXgoKDEuNSkuaGV4KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShmKSwgRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCAyLjUpCisKKyAgICAgICAgY2xhc3MgRjIoZmxvYXQpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9ICdiYXInCisKKyAgICAgICAgZiA9IEYyLmZyb21oZXgoKDEuNSkuaGV4KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShmKSwgRjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgMS41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIoZiwgJ2ZvbycsICdub25lJyksICdiYXInKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmx1ZmwucHkgYi9MaWIvdGVzdC90ZXN0X2ZsdWZsLnB5CmluZGV4IDVhNzA5YmMuLjk4YjViZDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmx1ZmwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mbHVmbC5weQpAQCAtMTgsMTAgKzE4LDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEZMVUZMIHRlc3Q+JywgJ2V4ZWMnKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZMVUZMVGVzdHMpCi0KLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mbm1hdGNoLnB5IGIvTGliL3Rlc3QvdGVzdF9mbm1hdGNoLnB5CmluZGV4IDQ4MjgzNWQuLmZhMzdmOTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm5tYXRjaC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZubWF0Y2gucHkKQEAgLTEsNiArMSw1IEBACiAiIiJUZXN0IGNhc2VzIGZvciB0aGUgZm5tYXRjaCBtb2R1bGUuIiIiCiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaCwgZm5tYXRjaGNhc2UsIHRyYW5zbGF0ZSwgZmlsdGVyCkBAIC03OSwxMSArNzgsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihbJ2EnLCAnYiddLCAnYScpLCBbJ2EnXSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRm5tYXRjaFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZVRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlclRlc3RDYXNlKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkgYi9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CmluZGV4IGUwNjI2ZGYuLmRhNDZmZTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQpAQCAtNiw5ICs2LDEwIEBACiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbiwgZ2V0X2F0dHJpYnV0ZSwKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAocmVhcF9jaGlsZHJlbiwgZ2V0X2F0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X21vZHVsZSwgdmVyYm9zZSkKIAogdGhyZWFkaW5nID0gaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKQEAgLTE4LDEzICsxOSwxNCBAQAogCiBjbGFzcyBGb3JrVGVzdChGb3JrV2FpdCk6CiAgICAgZGVmIHdhaXRfaW1wbChzZWxmLCBjcGlkKToKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyAxMC4wCisgICAgICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgPD0gZGVhZGxpbmU6CiAgICAgICAgICAgICAjIHdhaXRwaWQoKSBzaG91bGRuJ3QgaGFuZywgYnV0IHNvbWUgb2YgdGhlIGJ1aWxkYm90cyBzZWVtIHRvIGhhbmcKICAgICAgICAgICAgICMgaW4gdGhlIGZvcmtpbmcgdGVzdHMuICBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gZml4IHRoZSBwcm9ibGVtLgogICAgICAgICAgICAgc3BpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChjcGlkLCBvcy5XTk9IQU5HKQogICAgICAgICAgICAgaWYgc3BpZCA9PSBjcGlkOgogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDEuMCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BpZCwgY3BpZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpKQpAQCAtMTAzLDkgKzEwNSw4IEBACiAgICAgICAgICAgICBmb3JrX3dpdGhfaW1wb3J0X2xvY2sobGV2ZWwpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChGb3JrVGVzdCkKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgogICAgIHJlYXBfY2hpbGRyZW4oKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CmluZGV4IGZjNzFlNDguLjliMTM2MzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CkBAIC05LDcgKzksNyBAQAogIyB0ZXN0IHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdG9yIChJIGFtIG5vdCBzdXJlIGlmIHRoaXMgaXMgYmVpbmcgdGVzdGVkCiAjIGVsc2V3aGVyZSBidXQsIHN1cmVseSwgc29tZSBvZiB0aGUgZ2l2ZW4gY2FzZXMgYXJlICpub3QqIHRlc3RlZCBiZWNhdXNlCiAjIHRoZXkgY3Jhc2ggcHl0aG9uKQotIyB0ZXN0IG9uIHVuaWNvZGUgc3RyaW5ncyBhcyB3ZWxsCisjIHRlc3Qgb24gYnl0ZXMgb2JqZWN0IGFzIHdlbGwKIAogZGVmIHRlc3Rmb3JtYXQoZm9ybWF0c3RyLCBhcmdzLCBvdXRwdXQ9Tm9uZSwgbGltaXQ9Tm9uZSwgb3ZlcmZsb3dvaz1GYWxzZSk6CiAgICAgaWYgdmVyYm9zZToKQEAgLTQ2LDE5MSArNDYsMjA5IEBACiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50KCd5ZXMnKQogCitkZWYgdGVzdGNvbW1vbihmb3JtYXRzdHIsIGFyZ3MsIG91dHB1dD1Ob25lLCBsaW1pdD1Ob25lLCBvdmVyZmxvd29rPUZhbHNlKToKKyAgICAjIGlmIGZvcm1hdHN0ciBpcyBhIHN0ciwgdGVzdCBzdHIsIGJ5dGVzLCBhbmQgYnl0ZWFycmF5OworICAgICMgb3RoZXJ3aXNlLCB0ZXN0IGJ5dGVzIGFuZCBieXRlYXJyeQorICAgIGlmIGlzaW5zdGFuY2UoZm9ybWF0c3RyLCBzdHIpOgorICAgICAgICB0ZXN0Zm9ybWF0KGZvcm1hdHN0ciwgYXJncywgb3V0cHV0LCBsaW1pdCwgb3ZlcmZsb3dvaykKKyAgICAgICAgYl9mb3JtYXQgPSBmb3JtYXRzdHIuZW5jb2RlKCdhc2NpaScpCisgICAgZWxzZToKKyAgICAgICAgYl9mb3JtYXQgPSBmb3JtYXRzdHIKKyAgICBiYV9mb3JtYXQgPSBieXRlYXJyYXkoYl9mb3JtYXQpCisgICAgYl9hcmdzID0gW10KKyAgICBpZiBub3QgaXNpbnN0YW5jZShhcmdzLCB0dXBsZSk6CisgICAgICAgIGFyZ3MgPSAoYXJncywgKQorICAgIGJfYXJncyA9IHR1cGxlKGFyZ3MpCisgICAgaWYgb3V0cHV0IGlzIE5vbmU6CisgICAgICAgIGJfb3V0cHV0ID0gYmFfb3V0cHV0ID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3V0cHV0LCBzdHIpOgorICAgICAgICAgICAgYl9vdXRwdXQgPSBvdXRwdXQuZW5jb2RlKCdhc2NpaScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiX291dHB1dCA9IG91dHB1dAorICAgICAgICBiYV9vdXRwdXQgPSBieXRlYXJyYXkoYl9vdXRwdXQpCisgICAgdGVzdGZvcm1hdChiX2Zvcm1hdCwgYl9hcmdzLCBiX291dHB1dCwgbGltaXQsIG92ZXJmbG93b2spCisgICAgdGVzdGZvcm1hdChiYV9mb3JtYXQsIGJfYXJncywgYmFfb3V0cHV0LCBsaW1pdCwgb3ZlcmZsb3dvaykKKwogCiBjbGFzcyBGb3JtYXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6Ci0gICAgICAgIHRlc3Rmb3JtYXQoIiUuMWQiLCAoMSwpLCAiMSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUuKmQiLCAoc3lzLm1heHNpemUsMSksIG92ZXJmbG93b2s9VHJ1ZSkgICMgZXhwZWN0IG92ZXJmbG93Ci0gICAgICAgIHRlc3Rmb3JtYXQoIiUuMTAwZCIsICgxLCksICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKworICAgIGRlZiB0ZXN0X2NvbW1vbl9mb3JtYXQoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgZm9ybWF0IGlkZW50aWZpZXJzIHRoYXQgd29yayB0aGUgc2FtZSBhY3Jvc3MKKyAgICAgICAgIyBzdHIsIGJ5dGVzLCBhbmQgYnl0ZWFycmF5cyAoaW50ZWdlciwgZmxvYXQsIG9jdCwgaGV4KQorICAgICAgICB0ZXN0Y29tbW9uKCIlLjFkIiwgKDEsKSwgIjEiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlLipkIiwgKHN5cy5tYXhzaXplLDEpLCBvdmVyZmxvd29rPVRydWUpICAjIGV4cGVjdCBvdmVyZmxvdworICAgICAgICB0ZXN0Y29tbW9uKCIlLjEwMGQiLCAoMSwpLCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCiAgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCiAgICAgICAgICAgICAgICAgICcwMDAwMDAwMScsIG92ZXJmbG93b2s9VHJ1ZSkKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMuMTE3eCIsICgxLCksICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICB0ZXN0Y29tbW9uKCIlIy4xMTd4IiwgKDEsKSwgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCiAgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCiAgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJywKICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dvaz1UcnVlKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIy4xMTh4IiwgKDEsKSwgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgIHRlc3Rjb21tb24oIiUjLjExOHgiLCAoMSwpLCAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKICAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKICAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJywKICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dvaz1UcnVlKQogCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVmIiwgKDEuMCwpLCAiMS4wMDAwMDAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlZiIsICgxLjAsKSwgIjEuMDAwMDAwIikKICAgICAgICAgIyB0aGVzZSBhcmUgdHJ5aW5nIHRvIHRlc3QgdGhlIGxpbWl0cyBvZiB0aGUgaW50ZXJuYWwgbWFnaWMtbnVtYmVyLWxlbmd0aAogICAgICAgICAjIGZvcm1hdHRpbmcgYnVmZmVyLCBpZiB0aGF0IG51bWJlciBjaGFuZ2VzIHRoZW4gdGhlc2UgdGVzdHMgYXJlIGxlc3MKICAgICAgICAgIyBlZmZlY3RpdmUKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMuKmciLCAoMTA5LCAtMS5lKzQ5LzMuKSkKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMuKmciLCAoMTEwLCAtMS5lKzQ5LzMuKSkKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMuKmciLCAoMTEwLCAtMS5lKzEwMC8zLikpCisgICAgICAgIHRlc3Rjb21tb24oIiUjLipnIiwgKDEwOSwgLTEuZSs0OS8zLikpCisgICAgICAgIHRlc3Rjb21tb24oIiUjLipnIiwgKDExMCwgLTEuZSs0OS8zLikpCisgICAgICAgIHRlc3Rjb21tb24oIiUjLipnIiwgKDExMCwgLTEuZSsxMDAvMy4pKQogICAgICAgICAjIHRlc3Qgc29tZSByaWRpY3Vsb3VzbHkgbGFyZ2UgcHJlY2lzaW9uLCBleHBlY3Qgb3ZlcmZsb3cKLSAgICAgICAgdGVzdGZvcm1hdCgnJTEyLipmJywgKDEyMzQ1NiwgMS4wKSkKKyAgICAgICAgdGVzdGNvbW1vbignJTEyLipmJywgKDEyMzQ1NiwgMS4wKSkKIAogICAgICAgICAjIGNoZWNrIGZvciBpbnRlcm5hbCBvdmVyZmxvdyB2YWxpZGF0aW9uIG9uIGxlbmd0aCBvZiBwcmVjaXNpb24KICAgICAgICAgIyB0aGVzZSB0ZXN0cyBzaG91bGQgbm8gbG9uZ2VyIGNhdXNlIG92ZXJmbG93IGluIFB5dGhvbgogICAgICAgICAjIDIuNy8zLjEgYW5kIGxhdGVyLgotICAgICAgICB0ZXN0Zm9ybWF0KCIlIy4qZyIsICgxMTAsIC0xLmUrMTAwLzMuKSkKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMuKkciLCAoMTEwLCAtMS5lKzEwMC8zLikpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjLipmIiwgKDExMCwgLTEuZSsxMDAvMy4pKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIy4qRiIsICgxMTAsIC0xLmUrMTAwLzMuKSkKKyAgICAgICAgdGVzdGNvbW1vbigiJSMuKmciLCAoMTEwLCAtMS5lKzEwMC8zLikpCisgICAgICAgIHRlc3Rjb21tb24oIiUjLipHIiwgKDExMCwgLTEuZSsxMDAvMy4pKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIy4qZiIsICgxMTAsIC0xLmUrMTAwLzMuKSkKKyAgICAgICAgdGVzdGNvbW1vbigiJSMuKkYiLCAoMTEwLCAtMS5lKzEwMC8zLikpCiAgICAgICAgICMgRm9ybWF0dGluZyBvZiBpbnRlZ2Vycy4gT3ZlcmZsb3cgaXMgbm90IG9rCi0gICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgMTAsICJhIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCAxMDAwMDAwMDAwMDAsICIxNzQ4NzZlODAwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCAxMCwgIjEyIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCAxMDAwMDAwMDAwMDAsICIxMzUxMDM1NTY0MDAwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCAxMCwgIjEwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCAxMDAwMDAwMDAwMDAsICIxMDAwMDAwMDAwMDAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIleCIsIDEwLCAiYSIpCisgICAgICAgIHRlc3Rjb21tb24oIiV4IiwgMTAwMDAwMDAwMDAwLCAiMTc0ODc2ZTgwMCIpCisgICAgICAgIHRlc3Rjb21tb24oIiVvIiwgMTAsICIxMiIpCisgICAgICAgIHRlc3Rjb21tb24oIiVvIiwgMTAwMDAwMDAwMDAwLCAiMTM1MTAzNTU2NDAwMCIpCisgICAgICAgIHRlc3Rjb21tb24oIiVkIiwgMTAsICIxMCIpCisgICAgICAgIHRlc3Rjb21tb24oIiVkIiwgMTAwMDAwMDAwMDAwLCAiMTAwMDAwMDAwMDAwIikKICAgICAgICAgYmlnID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgYmlnLCAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCAtYmlnLCAiLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiU1ZCIsIC1iaWcsICItMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTMxZCIsIC1iaWcsICItMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTMyZCIsIC1iaWcsICIgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUtMzJkIiwgLWJpZywgIi0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTAzMmQiLCAtYmlnLCAiLTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlLTAzMmQiLCAtYmlnLCAiLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlMDM0ZCIsIC1iaWcsICItMDAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTAzNGQiLCBiaWcsICIwMDAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTArMzRkIiwgYmlnLCAiKzAwMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUrMzRkIiwgYmlnLCAiICAgKzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUzNGQiLCBiaWcsICIgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJS4yZCIsIGJpZywgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUuMzBkIiwgYmlnLCAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJS4zMWQiLCBiaWcsICIwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTMyLjMxZCIsIGJpZywgIiAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCBmbG9hdChiaWcpLCAiMTIzNDU2X19fX19fX19fX19fX19fX19fX19fX19fIiwgNikKKyAgICAgICAgdGVzdGNvbW1vbigiJWQiLCBiaWcsICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlZCIsIC1iaWcsICItMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJTVkIiwgLWJpZywgIi0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMzFkIiwgLWJpZywgIi0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMzJkIiwgLWJpZywgIiAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJS0zMmQiLCAtYmlnLCAiLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMDMyZCIsIC1iaWcsICItMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUtMDMyZCIsIC1iaWcsICItMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwICIpCisgICAgICAgIHRlc3Rjb21tb24oIiUwMzRkIiwgLWJpZywgIi0wMDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMDM0ZCIsIGJpZywgIjAwMDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMCszNGQiLCBiaWcsICIrMDAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJSszNGQiLCBiaWcsICIgICArMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJTM0ZCIsIGJpZywgIiAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlLjJkIiwgYmlnLCAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJS4zMGQiLCBiaWcsICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlLjMxZCIsIGJpZywgIjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMzIuMzFkIiwgYmlnLCAiIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlZCIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX19fX19fX19fX18iLCA2KQogICAgICAgICBiaWcgPSAweDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSAgIyAyMSBoZXggZGlnaXRzCi0gICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgYmlnLCAiMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCAtYmlnLCAiLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiU1eCIsIC1iaWcsICItMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTIyeCIsIC1iaWcsICItMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTIzeCIsIC1iaWcsICIgLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUtMjN4IiwgLWJpZywgIi0xMjM0NTY3ODkwYWJjZGVmMTIzNDUgIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTAyM3giLCAtYmlnLCAiLTAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlLTAyM3giLCAtYmlnLCAiLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlMDI1eCIsIC1iaWcsICItMDAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTAyNXgiLCBiaWcsICIwMDAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTArMjV4IiwgYmlnLCAiKzAwMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUrMjV4IiwgYmlnLCAiICAgKzEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUyNXgiLCBiaWcsICIgICAgMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJS4yeCIsIGJpZywgIjEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUuMjF4IiwgYmlnLCAiMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJS4yMngiLCBiaWcsICIwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTIzLjIyeCIsIGJpZywgIiAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJS0yMy4yMngiLCBiaWcsICIwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1ICIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVYIiwgYmlnLCAiMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSNYIiwgYmlnLCAiMFgxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlI3giLCBiaWcsICIweDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjeCIsIC1iaWcsICItMHgxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIy4yM3giLCAtYmlnLCAiLTB4MDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIysuMjN4IiwgYmlnLCAiKzB4MDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIyAuMjN4IiwgYmlnLCAiIDB4MDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIysuMjNYIiwgYmlnLCAiKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIy0rLjIzWCIsIGJpZywgIiswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMtKzI2LjIzWCIsIGJpZywgIiswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMtKzI3LjIzWCIsIGJpZywgIiswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1ICIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjKzI3LjIzWCIsIGJpZywgIiArMFgwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgIHRlc3Rjb21tb24oIiV4IiwgYmlnLCAiMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJXgiLCAtYmlnLCAiLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rjb21tb24oIiU1eCIsIC1iaWcsICItMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJTIyeCIsIC1iaWcsICItMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJTIzeCIsIC1iaWcsICIgLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rjb21tb24oIiUtMjN4IiwgLWJpZywgIi0xMjM0NTY3ODkwYWJjZGVmMTIzNDUgIikKKyAgICAgICAgdGVzdGNvbW1vbigiJTAyM3giLCAtYmlnLCAiLTAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlLTAyM3giLCAtYmlnLCAiLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMDI1eCIsIC1iaWcsICItMDAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJTAyNXgiLCBiaWcsICIwMDAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJTArMjV4IiwgYmlnLCAiKzAwMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rjb21tb24oIiUrMjV4IiwgYmlnLCAiICAgKzEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rjb21tb24oIiUyNXgiLCBiaWcsICIgICAgMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJS4yeCIsIGJpZywgIjEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rjb21tb24oIiUuMjF4IiwgYmlnLCAiMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJS4yMngiLCBiaWcsICIwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJTIzLjIyeCIsIGJpZywgIiAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJS0yMy4yMngiLCBiaWcsICIwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1ICIpCisgICAgICAgIHRlc3Rjb21tb24oIiVYIiwgYmlnLCAiMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJSNYIiwgYmlnLCAiMFgxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlI3giLCBiaWcsICIweDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjeCIsIC1iaWcsICItMHgxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIy4yM3giLCAtYmlnLCAiLTB4MDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIysuMjN4IiwgYmlnLCAiKzB4MDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIyAuMjN4IiwgYmlnLCAiIDB4MDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIysuMjNYIiwgYmlnLCAiKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIy0rLjIzWCIsIGJpZywgIiswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJSMtKzI2LjIzWCIsIGJpZywgIiswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKKyAgICAgICAgdGVzdGNvbW1vbigiJSMtKzI3LjIzWCIsIGJpZywgIiswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1ICIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjKzI3LjIzWCIsIGJpZywgIiArMFgwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCiAgICAgICAgICMgbmV4dCBvbmUgZ2V0cyB0d28gbGVhZGluZyB6ZXJvZXMgZnJvbSBwcmVjaXNpb24sIGFuZCBhbm90aGVyIGZyb20gdGhlCiAgICAgICAgICMgMCBmbGFnIGFuZCB0aGUgd2lkdGgKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMrMDI3LjIzWCIsIGJpZywgIiswWDAwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjKzAyNy4yM1giLCBiaWcsICIrMFgwMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQogICAgICAgICAjIHNhbWUsIGV4Y2VwdCBubyAwIGZsYWcKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMrMjcuMjNYIiwgYmlnLCAiICswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX18iLCA2KQorICAgICAgICB0ZXN0Y29tbW9uKCIlIysyNy4yM1giLCBiaWcsICIgKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQogICAgICAgICBiaWcgPSAwbzEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwICAjIDMyIG9jdGFsIGRpZ2l0cwotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIGJpZywgIjEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCAtYmlnLCAiLTEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTVvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUzM28iLCAtYmlnLCAiLTEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTM0byIsIC1iaWcsICIgLTEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJS0zNG8iLCAtYmlnLCAiLTEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwICIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUwMzRvIiwgLWJpZywgIi0wMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlLTAzNG8iLCAtYmlnLCAiLTEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwICIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUwMzZvIiwgLWJpZywgIi0wMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUwMzZvIiwgYmlnLCAiMDAwMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTArMzZvIiwgYmlnLCAiKzAwMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSszNm8iLCBiaWcsICIgICArMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlMzZvIiwgYmlnLCAiICAgIDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJS4ybyIsIGJpZywgIjEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJS4zMm8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUuMzNvIiwgYmlnLCAiMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJTM0LjMzbyIsIGJpZywgIiAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlLTM0LjMzbyIsIGJpZywgIjAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIGJpZywgIjEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSNvIiwgYmlnLCAiMG8xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjbyIsIC1iaWcsICItMG8xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjLjM0byIsIC1iaWcsICItMG8wMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMrLjM0byIsIGJpZywgIiswbzAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIyAuMzRvIiwgYmlnLCAiIDBvMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjKy4zNG8iLCBiaWcsICIrMG8wMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMtKy4zNG8iLCBiaWcsICIrMG8wMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMtKzM3LjM0byIsIGJpZywgIiswbzAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIyszNy4zNG8iLCBiaWcsICIrMG8wMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJW8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiVvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiU1byIsIC1iaWcsICItMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMzNvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUzNG8iLCAtYmlnLCAiIC0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUtMzRvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMDM0byIsIC1iaWcsICItMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJS0wMzRvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMDM2byIsIC1iaWcsICItMDAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlMDM2byIsIGJpZywgIjAwMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUwKzM2byIsIGJpZywgIiswMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUrMzZvIiwgYmlnLCAiICAgKzEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJTM2byIsIGJpZywgIiAgICAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUuMm8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUuMzJvIiwgYmlnLCAiMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlLjMzbyIsIGJpZywgIjAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUzNC4zM28iLCBiaWcsICIgMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJS0zNC4zM28iLCBiaWcsICIwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAgIikKKyAgICAgICAgdGVzdGNvbW1vbigiJW8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjbyIsIGJpZywgIjBvMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlI28iLCAtYmlnLCAiLTBvMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIy4zNG8iLCAtYmlnLCAiLTBvMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjKy4zNG8iLCBiaWcsICIrMG8wMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJSMgLjM0byIsIGJpZywgIiAwbzAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIysuMzRvIiwgYmlnLCAiKzBvMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjLSsuMzRvIiwgYmlnLCAiKzBvMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjLSszNy4zNG8iLCBiaWcsICIrMG8wMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJSMrMzcuMzRvIiwgYmlnLCAiKzBvMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCiAgICAgICAgICMgbmV4dCBvbmUgZ2V0cyBvbmUgbGVhZGluZyB6ZXJvIGZyb20gcHJlY2lzaW9uCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUuMzNvIiwgYmlnLCAiMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJS4zM28iLCBiaWcsICIwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQogICAgICAgICAjIGJhc2UgbWFya2VyIHNob3VsZG4ndCBjaGFuZ2UgdGhhdCwgc2luY2UgIjAiIGlzIHJlZHVuZGFudAotICAgICAgICB0ZXN0Zm9ybWF0KCIlIy4zM28iLCBiaWcsICIwbzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjLjMzbyIsIGJpZywgIjBvMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKICAgICAgICAgIyBidXQgcmVkdWNlIHByZWNpc2lvbiwgYW5kIGJhc2UgbWFya2VyIHNob3VsZCBhZGQgYSB6ZXJvCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjLjMybyIsIGJpZywgIjBvMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlIy4zMm8iLCBiaWcsICIwbzEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKICAgICAgICAgIyBvbmUgbGVhZGluZyB6ZXJvIGZyb20gcHJlY2lzaW9uLCBhbmQgYW5vdGhlciBmcm9tICIwIiBmbGFnICYgd2lkdGgKLSAgICAgICAgdGVzdGZvcm1hdCgiJTAzNC4zM28iLCBiaWcsICIwMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJTAzNC4zM28iLCBiaWcsICIwMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKICAgICAgICAgIyBiYXNlIG1hcmtlciBzaG91bGRuJ3QgY2hhbmdlIHRoYXQKLSAgICAgICAgdGVzdGZvcm1hdCgiJTAjMzQuMzNvIiwgYmlnLCAiMG8wMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fX19fX19fX19fX19fIiwgNikKKyAgICAgICAgdGVzdGNvbW1vbigiJTAjMzQuMzNvIiwgYmlnLCAiMG8wMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQogICAgICAgICAjIFNvbWUgc21hbGwgaW50cywgaW4gYm90aCBQeXRob24gaW50IGFuZCBmbGF2b3JzKS4KLSAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCA0MiwgIjQyIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCAtNDIsICItNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlZCIsIDQyLCAiNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlZCIsIC00MiwgIi00MiIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgNDIuMCwgIjQyIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSN4IiwgMSwgIjB4MSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjeCIsIDEsICIweDEiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlI1giLCAxLCAiMFgxIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSNYIiwgMSwgIjBYMSIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgdGVzdGZvcm1hdCgiJSN4IiwgMS4wLCAiMHgxIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSNvIiwgMSwgIjBvMSIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjbyIsIDEsICIwbzEiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlI28iLCAwLCAiMG8wIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSNvIiwgMCwgIjBvMCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgMCwgIjAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDAsICIwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJWQiLCAwLCAiMCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgMCwgIjAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlI3giLCAwLCAiMHgwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJSN4IiwgMCwgIjB4MCIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiUjWCIsIDAsICIwWDAiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlI1giLCAwLCAiMFgwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCAweDQyLCAiNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIC0weDQyLCAiLTQyIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCAweDQyLCAiNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIC0weDQyLCAiLTQyIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KDB4NDIpLCAiNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCi0gICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoMG80MiksICI0MiIpCisgICAgICAgIHRlc3Rjb21tb24oIiVkIiwgNDIsICI0MiIpCisgICAgICAgIHRlc3Rjb21tb24oIiVkIiwgLTQyLCAiLTQyIikKKyAgICAgICAgdGVzdGNvbW1vbigiJWQiLCA0MiwgIjQyIikKKyAgICAgICAgdGVzdGNvbW1vbigiJWQiLCAtNDIsICItNDIiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlZCIsIDQyLjAsICI0MiIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjeCIsIDEsICIweDEiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlI3giLCAxLCAiMHgxIikKKyAgICAgICAgdGVzdGNvbW1vbigiJSNYIiwgMSwgIjBYMSIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjWCIsIDEsICIwWDEiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlI28iLCAxLCAiMG8xIikKKyAgICAgICAgdGVzdGNvbW1vbigiJSNvIiwgMSwgIjBvMSIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjbyIsIDAsICIwbzAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlI28iLCAwLCAiMG8wIikKKyAgICAgICAgdGVzdGNvbW1vbigiJW8iLCAwLCAiMCIpCisgICAgICAgIHRlc3Rjb21tb24oIiVvIiwgMCwgIjAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlZCIsIDAsICIwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJWQiLCAwLCAiMCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjeCIsIDAsICIweDAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlI3giLCAwLCAiMHgwIikKKyAgICAgICAgdGVzdGNvbW1vbigiJSNYIiwgMCwgIjBYMCIpCisgICAgICAgIHRlc3Rjb21tb24oIiUjWCIsIDAsICIwWDAiKQorICAgICAgICB0ZXN0Y29tbW9uKCIleCIsIDB4NDIsICI0MiIpCisgICAgICAgIHRlc3Rjb21tb24oIiV4IiwgLTB4NDIsICItNDIiKQorICAgICAgICB0ZXN0Y29tbW9uKCIleCIsIDB4NDIsICI0MiIpCisgICAgICAgIHRlc3Rjb21tb24oIiV4IiwgLTB4NDIsICItNDIiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlbyIsIDBvNDIsICI0MiIpCisgICAgICAgIHRlc3Rjb21tb24oIiVvIiwgLTBvNDIsICItNDIiKQorICAgICAgICB0ZXN0Y29tbW9uKCIlbyIsIDBvNDIsICI0MiIpCisgICAgICAgIHRlc3Rjb21tb24oIiVvIiwgLTBvNDIsICItNDIiKQorICAgICAgICAjIGFsdGVybmF0ZSBmbG9hdCBmb3JtYXR0aW5nCisgICAgICAgIHRlc3Rjb21tb24oJyVnJywgMS4xLCAnMS4xJykKKyAgICAgICAgdGVzdGNvbW1vbignJSNnJywgMS4xLCAnMS4xMDAwMCcpCisKKyAgICBkZWYgdGVzdF9zdHJfZm9ybWF0KHNlbGYpOgogICAgICAgICB0ZXN0Zm9ybWF0KCIlciIsICJcdTAzNzgiLCAiJ1xcdTAzNzgnIikgICMgbm9uIHByaW50YWJsZQogICAgICAgICB0ZXN0Zm9ybWF0KCIlYSIsICJcdTAzNzgiLCAiJ1xcdTAzNzgnIikgICMgbm9uIHByaW50YWJsZQogICAgICAgICB0ZXN0Zm9ybWF0KCIlciIsICJcdTAzNzQiLCAiJ1x1MDM3NCciKSAgICMgcHJpbnRhYmxlCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVhIiwgIlx1MDM3NCIsICInXFx1MDM3NCciKSAgIyBwcmludGFibGUKIAotICAgICAgICAjIGFsdGVybmF0ZSBmbG9hdCBmb3JtYXR0aW5nCi0gICAgICAgIHRlc3Rmb3JtYXQoJyVnJywgMS4xLCAnMS4xJykKLSAgICAgICAgdGVzdGZvcm1hdCgnJSNnJywgMS4xLCAnMS4xMDAwMCcpCi0KLSAgICAgICAgIyBUZXN0IGV4Y2VwdGlvbiBmb3IgdW5rbm93biBmb3JtYXQgY2hhcmFjdGVycworICAgICAgICAjIFRlc3QgZXhjZXB0aW9uIGZvciB1bmtub3duIGZvcm1hdCBjaGFyYWN0ZXJzLCBldGMuCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgnVGVzdGluZyBleGNlcHRpb25zJykKICAgICAgICAgZGVmIHRlc3RfZXhjKGZvcm1hdHN0ciwgYXJncywgZXhjZXB0aW9uLCBleGNtc2cpOgpAQCAtMjU0LDExICsyNzIsMTA4IEBACiAgICAgICAgICN0ZXN0X2V4Yyh1bmljb2RlKCdhYmMgJVx1MzAwMCcsJ3Jhdy11bmljb2RlLWVzY2FwZScpLCAxLCBWYWx1ZUVycm9yLAogICAgICAgICAjICAgICAgICAgInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXIgJz8nICgweDMwMDApIGF0IGluZGV4IDUiKQogICAgICAgICB0ZXN0X2V4YygnJWQnLCAnMScsIFR5cGVFcnJvciwgIiVkIGZvcm1hdDogYSBudW1iZXIgaXMgcmVxdWlyZWQsIG5vdCBzdHIiKQorICAgICAgICB0ZXN0X2V4YygnJXgnLCAnMScsIFR5cGVFcnJvciwgIiV4IGZvcm1hdDogYW4gaW50ZWdlciBpcyByZXF1aXJlZCwgbm90IHN0ciIpCisgICAgICAgIHRlc3RfZXhjKCcleCcsIDMuMTQsIFR5cGVFcnJvciwgIiV4IGZvcm1hdDogYW4gaW50ZWdlciBpcyByZXF1aXJlZCwgbm90IGZsb2F0IikKICAgICAgICAgdGVzdF9leGMoJyVnJywgJzEnLCBUeXBlRXJyb3IsICJhIGZsb2F0IGlzIHJlcXVpcmVkIikKICAgICAgICAgdGVzdF9leGMoJ25vIGZvcm1hdCcsICcxJywgVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpCi0gICAgICAgIHRlc3RfZXhjKCdubyBmb3JtYXQnLCAnMScsIFR5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKQorICAgICAgICB0ZXN0X2V4YygnJWMnLCAtMSwgT3ZlcmZsb3dFcnJvciwgIiVjIGFyZyBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIikKKyAgICAgICAgdGVzdF9leGMoJyVjJywgc3lzLm1heHVuaWNvZGUrMSwgT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgIiVjIGFyZyBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIikKKyAgICAgICAgI3Rlc3RfZXhjKCclYycsIDIqKjEyOCwgT3ZlcmZsb3dFcnJvciwgIiVjIGFyZyBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIikKKyAgICAgICAgdGVzdF9leGMoJyVjJywgMy4xNCwgVHlwZUVycm9yLCAiJWMgcmVxdWlyZXMgaW50IG9yIGNoYXIiKQorICAgICAgICB0ZXN0X2V4YygnJWMnLCAnYWInLCBUeXBlRXJyb3IsICIlYyByZXF1aXJlcyBpbnQgb3IgY2hhciIpCisgICAgICAgIHRlc3RfZXhjKCclYycsIGIneCcsIFR5cGVFcnJvciwgIiVjIHJlcXVpcmVzIGludCBvciBjaGFyIikKKworICAgICAgICBpZiBtYXhzaXplID09IDIqKjMxLTE6CisgICAgICAgICAgICAjIGNyYXNoZXMgMi4yLjEgYW5kIGVhcmxpZXI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIiUqZCIlKG1heHNpemUsIC0xMjcpCisgICAgICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCciJSpkIiUobWF4c2l6ZSwgLTEyNykgc2hvdWxkIGZhaWwnKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfYW5kX2J5dGVhcnJheV9mb3JtYXQoc2VsZik6CisgICAgICAgICMgJWMgd2lsbCBpbnNlcnQgYSBzaW5nbGUgYnl0ZSwgZWl0aGVyIGZyb20gYW4gaW50IGluIHJhbmdlKDI1NiksIG9yCisgICAgICAgICMgZnJvbSBhIGJ5dGVzIGFyZ3VtZW50IG9mIGxlbmd0aCAxLCBub3QgZnJvbSBhIHN0ci4KKyAgICAgICAgdGVzdGNvbW1vbihiIiVjIiwgNywgYiJceDA3IikKKyAgICAgICAgdGVzdGNvbW1vbihiIiVjIiwgYiJaIiwgYiJaIikKKyAgICAgICAgdGVzdGNvbW1vbihiIiVjIiwgYnl0ZWFycmF5KGIiWiIpLCBiIloiKQorICAgICAgICAjICViIHdpbGwgaW5zZXJ0IGEgc2VyaWVzIG9mIGJ5dGVzLCBlaXRoZXIgZnJvbSBhIHR5cGUgdGhhdCBzdXBwb3J0cworICAgICAgICAjIHRoZSBQeV9idWZmZXIgcHJvdG9jb2wsIG9yIHNvbWV0aGluZyB0aGF0IGhhcyBhIF9fYnl0ZXNfXyBtZXRob2QKKyAgICAgICAgY2xhc3MgRmFrZUJ5dGVzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBiJzEyMycKKyAgICAgICAgZmIgPSBGYWtlQnl0ZXMoKQorICAgICAgICB0ZXN0Y29tbW9uKGIiJWIiLCBiImFiYyIsIGIiYWJjIikKKyAgICAgICAgdGVzdGNvbW1vbihiIiViIiwgYnl0ZWFycmF5KGIiZGVmIiksIGIiZGVmIikKKyAgICAgICAgdGVzdGNvbW1vbihiIiViIiwgZmIsIGIiMTIzIikKKyAgICAgICAgIyAjICVzIGlzIGFuIGFsaWFzIGZvciAlYiAtLSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBQeTIvMyBjb2RlCisgICAgICAgIHRlc3Rjb21tb24oYiIlcyIsIGIiYWJjIiwgYiJhYmMiKQorICAgICAgICB0ZXN0Y29tbW9uKGIiJXMiLCBieXRlYXJyYXkoYiJkZWYiKSwgYiJkZWYiKQorICAgICAgICB0ZXN0Y29tbW9uKGIiJXMiLCBmYiwgYiIxMjMiKQorICAgICAgICAjICVhIHdpbGwgZ2l2ZSB0aGUgZXF1aXZhbGVudCBvZgorICAgICAgICAjIHJlcHIoc29tZV9vYmopLmVuY29kZSgnYXNjaWknLCAnYmFja3NsYXNocmVwbGFjZScpCisgICAgICAgIHRlc3Rjb21tb24oYiIlYSIsIDMuMTQsIGIiMy4xNCIpCisgICAgICAgIHRlc3Rjb21tb24oYiIlYSIsIGIiZ2hpIiwgYiJiJ2doaSciKQorICAgICAgICB0ZXN0Y29tbW9uKGIiJWEiLCAiamtsIiwgYiInamtsJyIpCisgICAgICAgIHRlc3Rjb21tb24oYiIlYSIsICJcdTA1NDQiLCBiIidcXHUwNTQ0JyIpCisgICAgICAgICMgJXIgaXMgYW4gYWxpYXMgZm9yICVhCisgICAgICAgIHRlc3Rjb21tb24oYiIlciIsIDMuMTQsIGIiMy4xNCIpCisgICAgICAgIHRlc3Rjb21tb24oYiIlciIsIGIiZ2hpIiwgYiJiJ2doaSciKQorICAgICAgICB0ZXN0Y29tbW9uKGIiJXIiLCAiamtsIiwgYiInamtsJyIpCisgICAgICAgIHRlc3Rjb21tb24oYiIlciIsICJcdTA1NDQiLCBiIidcXHUwNTQ0JyIpCisKKyAgICAgICAgIyBUZXN0IGV4Y2VwdGlvbiBmb3IgdW5rbm93biBmb3JtYXQgY2hhcmFjdGVycywgZXRjLgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgZXhjZXB0aW9ucycpCisgICAgICAgIGRlZiB0ZXN0X2V4Yyhmb3JtYXRzdHIsIGFyZ3MsIGV4Y2VwdGlvbiwgZXhjbXNnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0Zm9ybWF0KGZvcm1hdHN0ciwgYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBleGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIHN0cihleGMpID09IGV4Y21zZzoKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJ5ZXMiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCdubycpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdVbmV4cGVjdGVkICcsIGV4Y2VwdGlvbiwgJzonLCByZXByKHN0cihleGMpKSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgnbm8nKQorICAgICAgICAgICAgICAgIHByaW50KCdVbmV4cGVjdGVkIGV4Y2VwdGlvbicpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgnZGlkIG5vdCBnZXQgZXhwZWN0ZWQgZXhjZXB0aW9uOiAlcycgJSBleGNtc2cpCisgICAgICAgIHRlc3RfZXhjKGInJWQnLCAnMScsIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAiJWQgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgbm90IHN0ciIpCisgICAgICAgIHRlc3RfZXhjKGInJWQnLCBiJzEnLCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgIiVkIGZvcm1hdDogYSBudW1iZXIgaXMgcmVxdWlyZWQsIG5vdCBieXRlcyIpCisgICAgICAgIHRlc3RfZXhjKGInJXgnLCAzLjE0LCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgIiV4IGZvcm1hdDogYW4gaW50ZWdlciBpcyByZXF1aXJlZCwgbm90IGZsb2F0IikKKyAgICAgICAgdGVzdF9leGMoYiclZycsICcxJywgVHlwZUVycm9yLCAiZmxvYXQgYXJndW1lbnQgcmVxdWlyZWQsIG5vdCBzdHIiKQorICAgICAgICB0ZXN0X2V4YyhiJyVnJywgYicxJywgVHlwZUVycm9yLCAiZmxvYXQgYXJndW1lbnQgcmVxdWlyZWQsIG5vdCBieXRlcyIpCisgICAgICAgIHRlc3RfZXhjKGInbm8gZm9ybWF0JywgNywgVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBieXRlcyBmb3JtYXR0aW5nIikKKyAgICAgICAgdGVzdF9leGMoYidubyBmb3JtYXQnLCBiJzEnLCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIGJ5dGVzIGZvcm1hdHRpbmciKQorICAgICAgICB0ZXN0X2V4YyhiJ25vIGZvcm1hdCcsIGJ5dGVhcnJheShiJzEnKSwgVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBieXRlcyBmb3JtYXR0aW5nIikKKyAgICAgICAgdGVzdF9leGMoYiIlYyIsIC0xLCBPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICIlYyBhcmcgbm90IGluIHJhbmdlKDI1NikiKQorICAgICAgICB0ZXN0X2V4YyhiIiVjIiwgMjU2LCBPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICIlYyBhcmcgbm90IGluIHJhbmdlKDI1NikiKQorICAgICAgICB0ZXN0X2V4YyhiIiVjIiwgMioqMTI4LCBPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICIlYyBhcmcgbm90IGluIHJhbmdlKDI1NikiKQorICAgICAgICB0ZXN0X2V4YyhiIiVjIiwgYiJaYSIsIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAiJWMgcmVxdWlyZXMgYW4gaW50ZWdlciBpbiByYW5nZSgyNTYpIG9yIGEgc2luZ2xlIGJ5dGUiKQorICAgICAgICB0ZXN0X2V4YyhiIiVjIiwgIlkiLCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgIiVjIHJlcXVpcmVzIGFuIGludGVnZXIgaW4gcmFuZ2UoMjU2KSBvciBhIHNpbmdsZSBieXRlIikKKyAgICAgICAgdGVzdF9leGMoYiIlYyIsIDMuMTQsIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAiJWMgcmVxdWlyZXMgYW4gaW50ZWdlciBpbiByYW5nZSgyNTYpIG9yIGEgc2luZ2xlIGJ5dGUiKQorICAgICAgICB0ZXN0X2V4YyhiIiViIiwgIlhjIiwgVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICIlYiByZXF1aXJlcyBieXRlcywgb3IgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyBfX2J5dGVzX18sIG5vdCAnc3RyJyIpCisgICAgICAgIHRlc3RfZXhjKGIiJXMiLCAiV2QiLCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgIiViIHJlcXVpcmVzIGJ5dGVzLCBvciBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIF9fYnl0ZXNfXywgbm90ICdzdHInIikKIAogICAgICAgICBpZiBtYXhzaXplID09IDIqKjMxLTE6CiAgICAgICAgICAgICAjIGNyYXNoZXMgMi4yLjEgYW5kIGVhcmxpZXI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CmluZGV4IDMzMzY1MzIuLjE2OTk4NTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CkBAIC0xLDEzICsxLDE0IEBACiAiIiJUZXN0cyBmb3IgTGliL2ZyYWN0aW9ucy5weS4iIiIKIAogZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZXF1aXJlc19JRUVFXzc1NAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzX0lFRUVfNzU0CiBpbXBvcnQgbWF0aAogaW1wb3J0IG51bWJlcnMKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IGZyYWN0aW9ucwogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIGZyb20gY29weSBpbXBvcnQgY29weSwgZGVlcGNvcHkKIGZyb20gcGlja2xlIGltcG9ydCBkdW1wcywgbG9hZHMKIEYgPSBmcmFjdGlvbnMuRnJhY3Rpb24KQEAgLTQ5LDcgKzUwLDcgQEAKICAgICAiIiJUZXN0IGNvbXBhcmlzb24gb2YgRnJhY3Rpb24gd2l0aCBhIG5haXZlIHJhdGlvbmFsIGltcGxlbWVudGF0aW9uLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bSwgZGVuKToKLSAgICAgICAgZyA9IGdjZChudW0sIGRlbikKKyAgICAgICAgZyA9IG1hdGguZ2NkKG51bSwgZGVuKQogICAgICAgICBzZWxmLm51bSA9IG51bSAvLyBnCiAgICAgICAgIHNlbGYuZGVuID0gZGVuIC8vIGcKIApAQCAtODMsMTYgKzg0LDI2IEBACiBjbGFzcyBHY2RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0TWlzYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnY2QoMCwgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2NkKDEsIDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBnY2QoLTEsIDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdjZCgwLCAxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgZ2NkKDAsIC0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoNywgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIGdjZCg3LCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2NkKC0yMywgMTUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyLCBnY2QoMTIwLCA4NCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEyLCBnY2QoODQsIC0xMjApKQorICAgICAgICAjIGZyYWN0aW9ucy5nY2QoKSBpcyBkZXByZWNhdGVkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KERlcHJlY2F0aW9uV2FybmluZywgcidmcmFjdGlvbnNcLmdjZCcpOgorICAgICAgICAgICAgZ2NkKDEsIDEpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCByJ2ZyYWN0aW9uc1wuZ2NkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2NkKDAsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoMSwgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBnY2QoLTEsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoMCwgMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBnY2QoMCwgLTEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoNywgMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBnY2QoNywgLTEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoLTIzLCAxNSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyLCBnY2QoMTIwLCA4NCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xMiwgZ2NkKDg0LCAtMTIwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDEyMC4wLCA4NCksIDEyLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgxMjAsIDg0LjApLCAxMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoRigxMjApLCBGKDg0KSksIEYoMTIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoRigxMjAsIDc3KSwgRig4NCwgNTUpKSwgRigxMiwgMzg1KSkKIAogCiBkZWYgX2NvbXBvbmVudHMocik6CkBAIC0zMzAsNyArMzQxLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKC0yLCAxMCksIHJvdW5kKEYoLTE1LCAxMDApLCAxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKC0yLCAxMCksIHJvdW5kKEYoLTI1LCAxMDApLCAxKSkKIAotCiAgICAgZGVmIHRlc3RBcml0aG1ldGljKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMSwgMiksIEYoMSwgMTApICsgRigyLCA1KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKC0zLCAxMCksIEYoMSwgMTApIC0gRigyLCA1KSkKQEAgLTQwMiw2ICs0MTIsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDIuMCAsIDQgKiogRigxLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjI1LCAyLjAgKiogRigtMiwgMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMS4wICsgMGosICgxLjAgKyAwaikgKiogRigxLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBvcGVyYXRvci5wb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgIEYoMCwgMSksIC0yKQogCiAgICAgZGVmIHRlc3RNaXhpbmdXaXRoRGVjaW1hbChzZWxmKToKICAgICAgICAgIyBEZWNpbWFsIHJlZnVzZXMgbWl4ZWQgYXJpdGhtZXRpYyAoYnV0IG5vdCBtaXhlZCBjb21wYXJpc29ucykKQEAgLTYwNSw4ICs2MTcsNSBAQAogICAgICAgICByID0gRigxMywgNykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHIsICdhJywgMTApCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoRnJhY3Rpb25UZXN0LCBHY2RUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZyYW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9mcmFtZS5weQppbmRleCBjNDAyZWMzLi4xODlmY2E5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZyYW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKQEAgLTE2MSw4ICsxNjEsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlubmVyLmZfbG9jYWxzLCB7fSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKaW5kZXggZDNiZTdkNi4uYWVmNjZkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgc3VwZXIoRHVtbXlEVFBIYW5kbGVyLCBzZWxmKS5wdXNoKHdoYXQuZW5jb2RlKCdhc2NpaScpKQogCiAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKLSAgICAgICAgcmFpc2UKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uCiAKIAogY2xhc3MgRHVtbXlGVFBIYW5kbGVyKGFzeW5jaGF0LmFzeW5jX2NoYXQpOgpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICBzZWxmLnB1c2goJzU1MCBjb21tYW5kICIlcyIgbm90IHVuZGVyc3Rvb2QuJyAlY21kKQogCiAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKLSAgICAgICAgcmFpc2UKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uCiAKICAgICBkZWYgcHVzaChzZWxmLCBkYXRhKToKICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKHNlbGYsIGRhdGEuZW5jb2RlKCdhc2NpaScpICsgYidcclxuJykKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgIGRlZiBjbWRfcGFzdihzZWxmLCBhcmcpOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKLSAgICAgICAgICAgIHNvY2subGlzdGVuKDUpCisgICAgICAgICAgICBzb2NrLmxpc3RlbigpCiAgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoVElNRU9VVCkKICAgICAgICAgICAgIGlwLCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzoyXQogICAgICAgICAgICAgaXAgPSBpcC5yZXBsYWNlKCcuJywgJywnKTsgcDEgPSBwb3J0IC8gMjU2OyBwMiA9IHBvcnQgJSAyNTYKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgIGRlZiBjbWRfZXBzdihzZWxmLCBhcmcpOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKLSAgICAgICAgICAgIHNvY2subGlzdGVuKDUpCisgICAgICAgICAgICBzb2NrLmxpc3RlbigpCiAgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoVElNRU9VVCkKICAgICAgICAgICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KICAgICAgICAgICAgIHNlbGYucHVzaCgnMjI5IGVudGVyaW5nIGV4dGVuZGVkIHBhc3NpdmUgbW9kZSAofHx8JWR8KScgJXBvcnQpCkBAIC0yOTYsNyArMjk2LDcgQEAKICAgICAgICAgcmV0dXJuIDAKIAogICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6Ci0gICAgICAgIHJhaXNlCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgogCiAKIGlmIHNzbCBpcyBub3QgTm9uZToKQEAgLTM5NCw3ICszOTQsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KIAogICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShzZWxmLnNvY2tldCwgc3NsLlNTTFNvY2tldCkgYW5kCkBAIC02NzAsNyArNjcwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgc2VsZi5jbGllbnQubWxzZCgpKQogICAgICAgICBzZXRfZGF0YSgnJykKICAgICAgICAgZm9yIHggaW4gc2VsZi5jbGllbnQubWxzZCgpOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIGRhdGEgJXMiICUgZGF0YSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidW5leHBlY3RlZCBkYXRhICVzIiAlIHgpCiAKICAgICBkZWYgdGVzdF9tYWtlcG9ydChzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmNsaWVudC5tYWtlcG9ydCgpOgpAQCAtOTc5LDcgKzk3OSw3IEBACiAgICAgICAgICMgIDEpIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgcmVhZHkgdG8gYmUgYWNjZXB0ZWQuCiAgICAgICAgICMgIDIpIHdoZW4gaXQgaXMgc2FmZSBmb3IgdGhlIGNhbGxlciB0byBjbG9zZSB0aGUgY29ubmVjdGlvbgogICAgICAgICAjICAzKSB3aGVuIHdlIGhhdmUgY2xvc2VkIHRoZSBzb2NrZXQKLSAgICAgICAgc2VsZi5zb2NrLmxpc3Rlbig1KQorICAgICAgICBzZWxmLnNvY2subGlzdGVuKCkKICAgICAgICAgIyAoMSkgU2lnbmFsIHRoZSBjYWxsZXIgdGhhdCB3ZSBhcmUgcmVhZHkgdG8gYWNjZXB0IHRoZSBjb25uZWN0aW9uLgogICAgICAgICBzZWxmLmV2dC5zZXQoKQogICAgICAgICB0cnk6CkBAIC0xMDQ5LDE5ICsxMDQ5LDggQEAKICAgICAgICAgZnRwLmNsb3NlKCkKIAogCi1jbGFzcyBUZXN0TmV0cmNEZXByZWNhdGlvbihUZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9kZXByZWNhdGlvbihzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKCksIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKLSAgICAgICAgICAgIGVudlsnSE9NRSddID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIG9wZW4oJy5uZXRyYycsICd3JykuY2xvc2UoKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICAgICAgZnRwbGliLk5ldHJjKCkKLQotCi0KIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFtUZXN0RlRQQ2xhc3MsIFRlc3RUaW1lb3V0cywgVGVzdE5ldHJjRGVwcmVjYXRpb24sCisgICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsCiAgICAgICAgICAgICAgVGVzdElQdjZFbnZpcm9ubWVudCwKICAgICAgICAgICAgICBUZXN0VExTX0ZUUENsYXNzTWl4aW4sIFRlc3RUTFNfRlRQQ2xhc3NdCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkKaW5kZXggNTA5NGY3Yi4uOGY0ODFiYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkKQEAgLTEsNCArMSwzIEBACi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKQEAgLTM3NCwxMiArMzczLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7J2Zvbyc6ICdiYXInfS5wb3AuX19xdWFsbmFtZV9fLCAnZGljdC5wb3AnKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGdW5jdGlvblByb3BlcnRpZXNUZXN0LCBJbnN0YW5jZW1ldGhvZEF0dHJUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJiaXRyYXJ5RnVuY3Rpb25BdHRyVGVzdCwgRnVuY3Rpb25EaWN0c1Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbkRvY3N0cmluZ1Rlc3QsIENlbGxUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGljTWV0aG9kQXR0cnNUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbHRpbkZ1bmN0aW9uUHJvcGVydGllc1Rlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKaW5kZXggYzBkMjRkOGMuLmFiNTFhMzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IGFiYwogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29weQogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHBlcm11dGF0aW9ucwogaW1wb3J0IHBpY2tsZQogZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZQpAQCAtNyw2ICs4LDEwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiAKIGltcG9ydCBmdW5jdG9vbHMKIApAQCAtMjUsNiArMzAsMTYgQEAKICAgICAiIiIgcmV0dXJuIHRoZSBzaWduYXR1cmUgb2YgYSBwYXJ0aWFsIG9iamVjdCAiIiIKICAgICByZXR1cm4gKHBhcnQuZnVuYywgcGFydC5hcmdzLCBwYXJ0LmtleXdvcmRzLCBwYXJ0Ll9fZGljdF9fKQogCitjbGFzcyBNeVR1cGxlKHR1cGxlKToKKyAgICBwYXNzCisKK2NsYXNzIEJhZFR1cGxlKHR1cGxlKToKKyAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBsaXN0KHNlbGYpICsgbGlzdChvdGhlcikKKworY2xhc3MgTXlEaWN0KGRpY3QpOgorICAgIHBhc3MKKwogCiBjbGFzcyBUZXN0UGFydGlhbDoKIApAQCAtMTMzLDYgKzE0OCwyNSBAQAogICAgICAgICBqb2luID0gc2VsZi5wYXJ0aWFsKCcnLmpvaW4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQogCisgICAgZGVmIHRlc3RfbmVzdGVkX29wdGltaXphdGlvbihzZWxmKToKKyAgICAgICAgcGFydGlhbCA9IHNlbGYucGFydGlhbAorICAgICAgICBpbm5lciA9IHBhcnRpYWwoc2lnbmF0dXJlLCAnYXNkZicpCisgICAgICAgIG5lc3RlZCA9IHBhcnRpYWwoaW5uZXIsIGJhcj1UcnVlKQorICAgICAgICBmbGF0ID0gcGFydGlhbChzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKG5lc3RlZCksIHNpZ25hdHVyZShmbGF0KSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9wYXJ0aWFsX3dpdGhfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSAyNTEzNworICAgICAgICBwYXJ0aWFsID0gc2VsZi5wYXJ0aWFsCisKKyAgICAgICAgZGVmIGZvbyhiYXIpOgorICAgICAgICAgICAgcmV0dXJuIGJhcgorCisgICAgICAgIHAgPSBwYXJ0aWFsKGZvbywgJ2ZpcnN0JykKKyAgICAgICAgcDIgPSBwYXJ0aWFsKHAsICdzZWNvbmQnKQorICAgICAgICBwMi5uZXdfYXR0ciA9ICdzcGFtJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLm5ld19hdHRyLCAnc3BhbScpCisKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCiBjbGFzcyBUZXN0UGFydGlhbEMoVGVzdFBhcnRpYWwsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE4MywxMiArMjE3LDE0NiBAQAogICAgICAgICAgICAgICAgICAgICAgIFsne30oeyFyfSwge30sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGFyZ3NfcmVwciwga3dhcmdzX3JlcHIpCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrd2FyZ3NfcmVwciBpbiBrd2FyZ3NfcmVwcnNdKQogCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3JlcHIoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGFydGlhbCBpcyBjX2Z1bmN0b29scy5wYXJ0aWFsOgorICAgICAgICAgICAgbmFtZSA9ICdmdW5jdG9vbHMucGFydGlhbCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhcnRpYWwuX19uYW1lX18KKworICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCisgICAgICAgIGYuX19zZXRzdGF0ZV9fKChmLCAoKSwge30sIHt9KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGYpLCAnJXMoJXMoLi4uKSknICUgKG5hbWUsIG5hbWUpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5fX3NldHN0YXRlX18oKGNhcHR1cmUsICgpLCB7fSwge30pKQorCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKKyAgICAgICAgZi5fX3NldHN0YXRlX18oKGNhcHR1cmUsIChmLCksIHt9LCB7fSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmKSwgJyVzKCVyLCAlcyguLi4pKScgJSAobmFtZSwgY2FwdHVyZSwgbmFtZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLl9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKCksIHt9LCB7fSkpCisKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlKQorICAgICAgICBmLl9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKCksIHsnYSc6IGZ9LCB7fSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmKSwgJyVzKCVyLCBhPSVzKC4uLikpJyAlIChuYW1lLCBjYXB0dXJlLCBuYW1lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwge30sIHt9KSkKKwogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKLSAgICAgICAgZiA9IHNlbGYucGFydGlhbChzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCi0gICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKHNpZ25hdHVyZSwgWydhc2RmJ10sIGJhcj1bVHJ1ZV0pCisgICAgICAgIGYuYXR0ciA9IFtdCiAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgogICAgICAgICAgICAgZl9jb3B5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhmLCBwcm90bykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmX2NvcHkpLCBzaWduYXR1cmUoZikpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKHNpZ25hdHVyZSwgWydhc2RmJ10sIGJhcj1bVHJ1ZV0pCisgICAgICAgIGYuYXR0ciA9IFtdCisgICAgICAgIGZfY29weSA9IGNvcHkuY29weShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmX2NvcHkpLCBzaWduYXR1cmUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZl9jb3B5LmF0dHIsIGYuYXR0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmX2NvcHkuYXJncywgZi5hcmdzKQorICAgICAgICBzZWxmLmFzc2VydElzKGZfY29weS5rZXl3b3JkcywgZi5rZXl3b3JkcykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKHNpZ25hdHVyZSwgWydhc2RmJ10sIGJhcj1bVHJ1ZV0pCisgICAgICAgIGYuYXR0ciA9IFtdCisgICAgICAgIGZfY29weSA9IGNvcHkuZGVlcGNvcHkoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoZl9jb3B5KSwgc2lnbmF0dXJlKGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGZfY29weS5hdHRyLCBmLmF0dHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZl9jb3B5LmFyZ3MsIGYuYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmX2NvcHkuYXJnc1swXSwgZi5hcmdzWzBdKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGZfY29weS5rZXl3b3JkcywgZi5rZXl3b3JkcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmX2NvcHkua2V5d29yZHNbJ2JhciddLCBmLmtleXdvcmRzWydiYXInXSkKKworICAgIGRlZiB0ZXN0X3NldHN0YXRlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKHNpZ25hdHVyZSkKKyAgICAgICAgZi5fX3NldHN0YXRlX18oKGNhcHR1cmUsICgxLCksIGRpY3QoYT0xMCksIGRpY3QoYXR0cj1bXSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY2FwdHVyZSwgKDEsKSwgZGljdChhPTEwKSwgZGljdChhdHRyPVtdKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigyLCBiPTIwKSwgKCgxLCAyKSwgeydhJzogMTAsICdiJzogMjB9KSkKKworICAgICAgICBmLl9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKDEsKSwgZGljdChhPTEwKSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKGYpLCAoY2FwdHVyZSwgKDEsKSwgZGljdChhPTEwKSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMiwgYj0yMCksICgoMSwgMiksIHsnYSc6IDEwLCAnYic6IDIwfSkpCisKKyAgICAgICAgZi5fX3NldHN0YXRlX18oKGNhcHR1cmUsICgxLCksIE5vbmUsIE5vbmUpKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoZiksIChjYXB0dXJlLCAoMSwpLCB7fSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMiwgYj0yMCksICgoMSwgMiksIHsnYic6IDIwfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigyKSwgKCgxLCAyKSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgKCgxLCksIHt9KSkKKworICAgICAgICBmLl9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKCksIHt9LCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoZiksIChjYXB0dXJlLCAoKSwge30sIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDIsIGI9MjApLCAoKDIsKSwgeydiJzogMjB9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDIpLCAoKDIsKSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgKCgpLCB7fSkpCisKKyAgICBkZWYgdGVzdF9zZXRzdGF0ZV9lcnJvcnMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoc2lnbmF0dXJlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuX19zZXRzdGF0ZV9fLCAoY2FwdHVyZSwgKCksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLl9fc2V0c3RhdGVfXywgKGNhcHR1cmUsICgpLCB7fSwge30sIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuX19zZXRzdGF0ZV9fLCBbY2FwdHVyZSwgKCksIHt9LCBOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLl9fc2V0c3RhdGVfXywgKE5vbmUsICgpLCB7fSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5fX3NldHN0YXRlX18sIChjYXB0dXJlLCBOb25lLCB7fSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5fX3NldHN0YXRlX18sIChjYXB0dXJlLCBbXSwge30sIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuX19zZXRzdGF0ZV9fLCAoY2FwdHVyZSwgKCksIFtdLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X3NldHN0YXRlX3N1YmNsYXNzZXMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoc2lnbmF0dXJlKQorICAgICAgICBmLl9fc2V0c3RhdGVfXygoY2FwdHVyZSwgTXlUdXBsZSgoMSwpKSwgTXlEaWN0KGE9MTApLCBOb25lKSkKKyAgICAgICAgcyA9IHNpZ25hdHVyZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIChjYXB0dXJlLCAoMSwpLCBkaWN0KGE9MTApLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzWzFdKSwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzWzJdKSwgZGljdCkKKyAgICAgICAgciA9IGYoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsICgoMSwpLCB7J2EnOiAxMH0pKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoclswXSksIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoclsxXSksIGRpY3QpCisKKyAgICAgICAgZi5fX3NldHN0YXRlX18oKGNhcHR1cmUsIEJhZFR1cGxlKCgxLCkpLCB7fSwgTm9uZSkpCisgICAgICAgIHMgPSBzaWduYXR1cmUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAoY2FwdHVyZSwgKDEsKSwge30sIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHNbMV0pLCB0dXBsZSkKKyAgICAgICAgciA9IGYoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCAoKDEsIDIpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyWzBdKSwgdHVwbGUpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfcGlja2xlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCisgICAgICAgIGYuX19zZXRzdGF0ZV9fKChmLCAoKSwge30sIHt9KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhmLCBwcm90bykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwge30sIHt9KSkKKworICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCisgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoZiwpLCB7fSwge30pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYsIHByb3RvKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZl9jb3B5LmFyZ3NbMF0sIGZfY29weSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmX2NvcHkuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwge30sIHt9KSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwge30sIHt9KSkKKworICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCisgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwgeydhJzogZn0sIHt9KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgZl9jb3B5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhmLCBwcm90bykpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGZfY29weS5rZXl3b3Jkc1snYSddLCBmX2NvcHkpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZl9jb3B5Ll9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKCksIHt9LCB7fSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLl9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKCksIHt9LCB7fSkpCiAKICAgICAjIElzc3VlIDYwODM6IFJlZmVyZW5jZSBjb3VudGluZyBidWcKICAgICBkZWYgdGVzdF9zZXRzdGF0ZV9yZWZjb3VudChzZWxmKToKQEAgLTIwNSw5ICszNzMsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKIAogICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKG9iamVjdCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAibmV3IHN0eWxlIGdldGFyZ3MgZm9ybWF0IGJ1dCBhcmd1bWVudCBpcyBub3QgYSB0dXBsZSIsCi0gICAgICAgICAgICAgICAgZi5fX3NldHN0YXRlX18sIEJhZFNlcXVlbmNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5fX3NldHN0YXRlX18sIEJhZFNlcXVlbmNlKCkpCiAKIAogY2xhc3MgVGVzdFBhcnRpYWxQeShUZXN0UGFydGlhbCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjI0LDYgKzM5MCw5IEBACiAgICAgaWYgY19mdW5jdG9vbHM6CiAgICAgICAgIHBhcnRpYWwgPSBQYXJ0aWFsU3ViY2xhc3MKIAorICAgICMgcGFydGlhbCBzdWJjbGFzc2VzIGFyZSBub3Qgb3B0aW1pemVkIGZvciBuZXN0ZWQgY2FsbHMKKyAgICB0ZXN0X25lc3RlZF9vcHRpbWl6YXRpb24gPSBOb25lCisKIAogY2xhc3MgVGVzdFBhcnRpYWxNZXRob2QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC04ODQsMTIgKzEwNTMsMzAgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICAgICBhIDw9IGIKIAotY2xhc3MgVGVzdExSVSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluICdfX2x0X18nLCAnX19ndF9fJywgJ19fbGVfXycsICdfX2dlX18nOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG1ldGhvZD1uYW1lLCBwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoT3JkZXJhYmxlX0xULCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBtZXRob2RfY29weSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMobWV0aG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobWV0aG9kX2NvcHksIG1ldGhvZCkKKworQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworY2xhc3MgT3JkZXJhYmxlX0xUOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisKKworY2xhc3MgVGVzdExSVToKIAogICAgIGRlZiB0ZXN0X2xydShzZWxmKToKICAgICAgICAgZGVmIG9yaWcoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gMyAqIHggKyB5Ci0gICAgICAgIGYgPSBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9MjApKG9yaWcpCisgICAgICAgIGYgPSBzZWxmLm1vZHVsZS5scnVfY2FjaGUobWF4c2l6ZT0yMCkob3JpZykKICAgICAgICAgaGl0cywgbWlzc2VzLCBtYXhzaXplLCBjdXJyc2l6ZSA9IGYuY2FjaGVfaW5mbygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4c2l6ZSwgMjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycnNpemUsIDApCkBAIC05MjcsNyArMTExNCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycnNpemUsIDEpCiAKICAgICAgICAgIyB0ZXN0IHNpemUgemVybyAod2hpY2ggbWVhbnMgIm5ldmVyLWNhY2hlIikKLSAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoMCkKKyAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZSgwKQogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgbm9ubG9jYWwgZl9jbnQKICAgICAgICAgICAgIGZfY250ICs9IDEKQEAgLTk0Myw3ICsxMTMwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJyc2l6ZSwgMCkKIAogICAgICAgICAjIHRlc3Qgc2l6ZSBvbmUKLSAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoMSkKKyAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZSgxKQogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgbm9ubG9jYWwgZl9jbnQKICAgICAgICAgICAgIGZfY250ICs9IDEKQEAgLTk1OSw3ICsxMTQ2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJyc2l6ZSwgMSkKIAogICAgICAgICAjIHRlc3Qgc2l6ZSB0d28KLSAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoMikKKyAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZSgyKQogICAgICAgICBkZWYgZih4KToKICAgICAgICAgICAgIG5vbmxvY2FsIGZfY250CiAgICAgICAgICAgICBmX2NudCArPSAxCkBAIC05NzYsNyArMTE2Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycnNpemUsIDIpCiAKICAgICBkZWYgdGVzdF9scnVfd2l0aF9tYXhzaXplX25vbmUoc2VsZik6Ci0gICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9Tm9uZSkKKyAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZShtYXhzaXplPU5vbmUpCiAgICAgICAgIGRlZiBmaWIobik6CiAgICAgICAgICAgICBpZiBuIDwgMjoKICAgICAgICAgICAgICAgICByZXR1cm4gbgpAQCAtOTg0LDE3ICsxMTcxLDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ZpYihuKSBmb3IgbiBpbiByYW5nZSgxNildLAogICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAotICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTE2KSkKICAgICAgICAgZmliLmNhY2hlX2NsZWFyKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAotICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0wKSkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0wKSkKKworICAgIGRlZiB0ZXN0X2xydV93aXRoX21heHNpemVfbmVnYXRpdmUoc2VsZik6CisgICAgICAgIEBzZWxmLm1vZHVsZS5scnVfY2FjaGUobWF4c2l6ZT0tMTApCisgICAgICAgIGRlZiBlcShuKToKKyAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgIGZvciBpIGluICgwLCAxKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2VxKG4pIGZvciBuIGluIHJhbmdlKDE1MCldLCBsaXN0KHJhbmdlKDE1MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVxLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MzAwLCBtYXhzaXplPS0xMCwgY3VycnNpemU9MSkpCiAKICAgICBkZWYgdGVzdF9scnVfd2l0aF9leGNlcHRpb25zKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0IHVzZXJfZnVuY3Rpb24gZXhjZXB0aW9ucyBnZXQgcGFzc2VkIHRocm91Z2ggd2l0aG91dAogICAgICAgICAjIGNyZWF0aW5nIGEgaGFyZC10by1yZWFkIGNoYWluZWQgZXhjZXB0aW9uLgogICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzE3NwogICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTI4KToKLSAgICAgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemUpCisgICAgICAgICAgICBAc2VsZi5tb2R1bGUubHJ1X2NhY2hlKG1heHNpemUpCiAgICAgICAgICAgICBkZWYgZnVuYyhpKToKICAgICAgICAgICAgICAgICByZXR1cm4gJ2FiYydbaV0KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygwKSwgJ2EnKQpAQCAtMTAwNyw3ICsxMjAzLDcgQEAKIAogICAgIGRlZiB0ZXN0X2xydV93aXRoX3R5cGVzKHNlbGYpOgogICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTI4KToKLSAgICAgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9bWF4c2l6ZSwgdHlwZWQ9VHJ1ZSkKKyAgICAgICAgICAgIEBzZWxmLm1vZHVsZS5scnVfY2FjaGUobWF4c2l6ZT1tYXhzaXplLCB0eXBlZD1UcnVlKQogICAgICAgICAgICAgZGVmIHNxdWFyZSh4KToKICAgICAgICAgICAgICAgICByZXR1cm4geCAqIHgKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3F1YXJlKDMpLCA5KQpAQCAtMTAyMiw3ICsxMjE4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3F1YXJlLmNhY2hlX2luZm8oKS5taXNzZXMsIDQpCiAKICAgICBkZWYgdGVzdF9scnVfd2l0aF9rZXl3b3JkX2FyZ3Moc2VsZik6Ci0gICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKKyAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZSgpCiAgICAgICAgIGRlZiBmaWIobik6CiAgICAgICAgICAgICBpZiBuIDwgMjoKICAgICAgICAgICAgICAgICByZXR1cm4gbgpAQCAtMTAzMiwxMyArMTIyOCwxMyBAQAogICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXQogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKLSAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MjgsIG1pc3Nlcz0xNiwgbWF4c2l6ZT0xMjgsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPTEyOCwgY3VycnNpemU9MTYpKQogICAgICAgICBmaWIuY2FjaGVfY2xlYXIoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCi0gICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPTEyOCwgY3VycnNpemU9MCkpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5fQ2FjaGVJbmZvKGhpdHM9MCwgbWlzc2VzPTAsIG1heHNpemU9MTI4LCBjdXJyc2l6ZT0wKSkKIAogICAgIGRlZiB0ZXN0X2xydV93aXRoX2tleXdvcmRfYXJnc19tYXhzaXplX25vbmUoc2VsZik6Ci0gICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9Tm9uZSkKKyAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZShtYXhzaXplPU5vbmUpCiAgICAgICAgIGRlZiBmaWIobik6CiAgICAgICAgICAgICBpZiBuIDwgMjoKICAgICAgICAgICAgICAgICByZXR1cm4gbgpAQCAtMTA0NiwxNSArMTI0MiwxMDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbZmliKG49bnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDE2KV0sCiAgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3LCA2MTBdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCi0gICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTI4LCBtaXNzZXM9MTYsIG1heHNpemU9Tm9uZSwgY3VycnNpemU9MTYpKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuX0NhY2hlSW5mbyhoaXRzPTI4LCBtaXNzZXM9MTYsIG1heHNpemU9Tm9uZSwgY3VycnNpemU9MTYpKQogICAgICAgICBmaWIuY2FjaGVfY2xlYXIoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCi0gICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTApKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTApKQorCisgICAgZGVmIHRlc3RfbHJ1X2NhY2hlX2RlY29yYXRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKHpvbWc6ICd6b21nX2Fubm90YXRpb24nKToKKyAgICAgICAgICAgICIiImYgZG9jIHN0cmluZyIiIgorICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIGcgPSBzZWxmLm1vZHVsZS5scnVfY2FjaGUoKShmKQorICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLm1vZHVsZS5XUkFQUEVSX0FTU0lHTk1FTlRTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKGcsIGF0dHIpLCBnZXRhdHRyKGYsIGF0dHIpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhpcyB0ZXN0IHJlcXVpcmVzIHRocmVhZGluZy4nKQorICAgIGRlZiB0ZXN0X2xydV9jYWNoZV90aHJlYWRlZChzZWxmKToKKyAgICAgICAgbiwgbSA9IDUsIDExCisgICAgICAgIGRlZiBvcmlnKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIDMgKiB4ICsgeQorICAgICAgICBmID0gc2VsZi5tb2R1bGUubHJ1X2NhY2hlKG1heHNpemU9biptKShvcmlnKQorICAgICAgICBoaXRzLCBtaXNzZXMsIG1heHNpemUsIGN1cnJzaXplID0gZi5jYWNoZV9pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJyc2l6ZSwgMCkKKworICAgICAgICBzdGFydCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIGRlZiBmdWxsKGspOgorICAgICAgICAgICAgc3RhcnQud2FpdCgxMCkKKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKG0pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihrLCAwKSwgb3JpZyhrLCAwKSkKKworICAgICAgICBkZWYgY2xlYXIoKToKKyAgICAgICAgICAgIHN0YXJ0LndhaXQoMTApCisgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSgyKm0pOgorICAgICAgICAgICAgICAgIGYuY2FjaGVfY2xlYXIoKQorCisgICAgICAgIG9yaWdfc2kgPSBzeXMuZ2V0c3dpdGNoaW50ZXJ2YWwoKQorICAgICAgICBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwoMWUtNikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBjcmVhdGUgbiB0aHJlYWRzIGluIG9yZGVyIHRvIGZpbGwgY2FjaGUKKyAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZnVsbCwgYXJncz1ba10pCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKG4pXQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN0YXJ0X3RocmVhZHModGhyZWFkcyk6CisgICAgICAgICAgICAgICAgc3RhcnQuc2V0KCkKKworICAgICAgICAgICAgaGl0cywgbWlzc2VzLCBtYXhzaXplLCBjdXJyc2l6ZSA9IGYuY2FjaGVfaW5mbygpCisgICAgICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBweV9mdW5jdG9vbHM6CisgICAgICAgICAgICAgICAgIyBYWFg6IFdoeSBjYW4gYmUgbm90IGVxdWFsPworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG1pc3NlcywgbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChoaXRzLCBtKm4gLSBtaXNzZXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWlzc2VzLCBuKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGl0cywgbSpuIC0gbWlzc2VzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJyc2l6ZSwgbikKKworICAgICAgICAgICAgIyBjcmVhdGUgbiB0aHJlYWRzIGluIG9yZGVyIHRvIGZpbGwgY2FjaGUgYW5kIDEgdG8gY2xlYXIgaXQKKyAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y2xlYXIpXQorICAgICAgICAgICAgdGhyZWFkcyArPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZnVsbCwgYXJncz1ba10pCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiByYW5nZShuKV0KKyAgICAgICAgICAgIHN0YXJ0LmNsZWFyKCkKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5zdGFydF90aHJlYWRzKHRocmVhZHMpOgorICAgICAgICAgICAgICAgIHN0YXJ0LnNldCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwob3JpZ19zaSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RoaXMgdGVzdCByZXF1aXJlcyB0aHJlYWRpbmcuJykKKyAgICBkZWYgdGVzdF9scnVfY2FjaGVfdGhyZWFkZWQyKHNlbGYpOgorICAgICAgICAjIFNpbXVsdGFuZW91cyBjYWxsIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzCisgICAgICAgIG4sIG0gPSA1LCA3CisgICAgICAgIHN0YXJ0ID0gdGhyZWFkaW5nLkJhcnJpZXIobisxKQorICAgICAgICBwYXVzZSA9IHRocmVhZGluZy5CYXJyaWVyKG4rMSkKKyAgICAgICAgc3RvcCA9IHRocmVhZGluZy5CYXJyaWVyKG4rMSkKKyAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZShtYXhzaXplPW0qbikKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBwYXVzZS53YWl0KDEwKQorICAgICAgICAgICAgcmV0dXJuIDMgKiB4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jYWNoZV9pbmZvKCksICgwLCAwLCBtKm4sIDApKQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobSk6CisgICAgICAgICAgICAgICAgc3RhcnQud2FpdCgxMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoaSksIDMgKiBpKQorICAgICAgICAgICAgICAgIHN0b3Aud2FpdCgxMCkKKyAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD10ZXN0KSBmb3IgayBpbiByYW5nZShuKV0KKyAgICAgICAgd2l0aCBzdXBwb3J0LnN0YXJ0X3RocmVhZHModGhyZWFkcyk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShtKToKKyAgICAgICAgICAgICAgICBzdGFydC53YWl0KDEwKQorICAgICAgICAgICAgICAgIHN0b3AucmVzZXQoKQorICAgICAgICAgICAgICAgIHBhdXNlLndhaXQoMTApCisgICAgICAgICAgICAgICAgc3RhcnQucmVzZXQoKQorICAgICAgICAgICAgICAgIHN0b3Aud2FpdCgxMCkKKyAgICAgICAgICAgICAgICBwYXVzZS5yZXNldCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNhY2hlX2luZm8oKSwgKDAsIChpKzEpKm4sIG0qbiwgaSsxKSkKIAogICAgIGRlZiB0ZXN0X25lZWRfZm9yX3Jsb2NrKHNlbGYpOgogICAgICAgICAjIFRoaXMgd2lsbCBkZWFkbG9jayBvbiBhbiBMUlUgY2FjaGUgdGhhdCB1c2VzIGEgcmVndWxhciBsb2NrCiAKLSAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0xMCkKKyAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZShtYXhzaXplPTEwKQogICAgICAgICBkZWYgdGVzdF9mdW5jKHgpOgogICAgICAgICAgICAgJ1VzZWQgdG8gZGVtb25zdHJhdGUgYSByZWVudHJhbnQgbHJ1X2NhY2hlIGNhbGwgd2l0aGluIGEgc2luZ2xlIHRocmVhZCcKICAgICAgICAgICAgIHJldHVybiB4CkBAIC0xMDgyLDYgKzEzNjMsMTA2IEBACiAgICAgICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiB0ZXN0X2xydV9tZXRob2Qoc2VsZik6CisgICAgICAgIGNsYXNzIFgoaW50KToKKyAgICAgICAgICAgIGZfY250ID0gMAorICAgICAgICAgICAgQHNlbGYubW9kdWxlLmxydV9jYWNoZSgyKQorICAgICAgICAgICAgZGVmIGYoc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi5mX2NudCArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHgqMTArc2VsZgorICAgICAgICBhID0gWCg1KQorICAgICAgICBiID0gWCg1KQorICAgICAgICBjID0gWCg3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguZi5jYWNoZV9pbmZvKCksICgwLCAwLCAyLCAwKSkKKworICAgICAgICBmb3IgeCBpbiAxLCAyLCAyLCAzLCAxLCAxLCAxLCAyLCAzLCAzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmYoeCksIHgqMTAgKyA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLmZfY250LCBiLmZfY250LCBjLmZfY250KSwgKDYsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguZi5jYWNoZV9pbmZvKCksICg0LCA2LCAyLCAyKSkKKworICAgICAgICBmb3IgeCBpbiAxLCAyLCAxLCAxLCAxLCAxLCAzLCAyLCAyLCAyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmYoeCksIHgqMTAgKyA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLmZfY250LCBiLmZfY250LCBjLmZfY250KSwgKDYsIDQsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguZi5jYWNoZV9pbmZvKCksICgxMCwgMTAsIDIsIDIpKQorCisgICAgICAgIGZvciB4IGluIDIsIDEsIDEsIDEsIDEsIDIsIDEsIDMsIDIsIDE6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZih4KSwgeCoxMCArIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEuZl9jbnQsIGIuZl9jbnQsIGMuZl9jbnQpLCAoNiwgNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5mLmNhY2hlX2luZm8oKSwgKDE1LCAxNSwgMiwgMikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmYuY2FjaGVfaW5mbygpLCBYLmYuY2FjaGVfaW5mbygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZi5jYWNoZV9pbmZvKCksIFguZi5jYWNoZV9pbmZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mLmNhY2hlX2luZm8oKSwgWC5mLmNhY2hlX2luZm8oKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgZm9yIGYgaW4gY2xzLmNhY2hlZF9mdW5jWzBdLCBjbHMuY2FjaGVkX21ldGgsIGNscy5jYWNoZWRfc3RhdGljbWV0aDoKKyAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBmdW5jPWYpOgorICAgICAgICAgICAgICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmX2NvcHksIGYpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLl9fY2xhc3NfXworICAgICAgICBkZWYgb3JpZyh4LCB5KToKKyAgICAgICAgICAgIHJldHVybiAzICogeCArIHkKKyAgICAgICAgcGFydCA9IHNlbGYubW9kdWxlLnBhcnRpYWwob3JpZywgMikKKyAgICAgICAgZnVuY3MgPSAoY2xzLmNhY2hlZF9mdW5jWzBdLCBjbHMuY2FjaGVkX21ldGgsIGNscy5jYWNoZWRfc3RhdGljbWV0aCwKKyAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUubHJ1X2NhY2hlKDIpKHBhcnQpKQorICAgICAgICBmb3IgZiBpbiBmdW5jczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZ1bmM9Zik6CisgICAgICAgICAgICAgICAgZl9jb3B5ID0gY29weS5jb3B5KGYpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmX2NvcHksIGYpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weShzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgZGVmIG9yaWcoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4gMyAqIHggKyB5CisgICAgICAgIHBhcnQgPSBzZWxmLm1vZHVsZS5wYXJ0aWFsKG9yaWcsIDIpCisgICAgICAgIGZ1bmNzID0gKGNscy5jYWNoZWRfZnVuY1swXSwgY2xzLmNhY2hlZF9tZXRoLCBjbHMuY2FjaGVkX3N0YXRpY21ldGgsCisgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmxydV9jYWNoZSgyKShwYXJ0KSkKKyAgICAgICAgZm9yIGYgaW4gZnVuY3M6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmdW5jPWYpOgorICAgICAgICAgICAgICAgIGZfY29weSA9IGNvcHkuZGVlcGNvcHkoZikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGZfY29weSwgZikKKworCitAcHlfZnVuY3Rvb2xzLmxydV9jYWNoZSgpCitkZWYgcHlfY2FjaGVkX2Z1bmMoeCwgeSk6CisgICAgcmV0dXJuIDMgKiB4ICsgeQorCitAY19mdW5jdG9vbHMubHJ1X2NhY2hlKCkKK2RlZiBjX2NhY2hlZF9mdW5jKHgsIHkpOgorICAgIHJldHVybiAzICogeCArIHkKKworCitjbGFzcyBUZXN0TFJVUHkoVGVzdExSVSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHB5X2Z1bmN0b29scworICAgIGNhY2hlZF9mdW5jID0gcHlfY2FjaGVkX2Z1bmMsCisKKyAgICBAbW9kdWxlLmxydV9jYWNoZSgpCisgICAgZGVmIGNhY2hlZF9tZXRoKHNlbGYsIHgsIHkpOgorICAgICAgICByZXR1cm4gMyAqIHggKyB5CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgQG1vZHVsZS5scnVfY2FjaGUoKQorICAgIGRlZiBjYWNoZWRfc3RhdGljbWV0aCh4LCB5KToKKyAgICAgICAgcmV0dXJuIDMgKiB4ICsgeQorCisKK2NsYXNzIFRlc3RMUlVDKFRlc3RMUlUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBjX2Z1bmN0b29scworICAgIGNhY2hlZF9mdW5jID0gY19jYWNoZWRfZnVuYywKKworICAgIEBtb2R1bGUubHJ1X2NhY2hlKCkKKyAgICBkZWYgY2FjaGVkX21ldGgoc2VsZiwgeCwgeSk6CisgICAgICAgIHJldHVybiAzICogeCArIHkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBAbW9kdWxlLmxydV9jYWNoZSgpCisgICAgZGVmIGNhY2hlZF9zdGF0aWNtZXRoKHgsIHkpOgorICAgICAgICByZXR1cm4gMyAqIHggKyB5CisKIAogY2xhc3MgVGVzdFNpbmdsZURpc3BhdGNoKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaW1wbGVfb3ZlcmxvYWRzKHNlbGYpOgpAQCAtMTE4Niw3ICsxNTY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF0pCiAKICAgICAgICAgIyBNdXRhYmxlU2VxdWVuY2UgYmVsb3cgaXMgcmVnaXN0ZXJlZCBkaXJlY3RseSBvbiBELiBJbiBvdGhlciB3b3JkcywgaXQKLSAgICAgICAgIyBwcmVjZWVkcyBNdXRhYmxlTWFwcGluZyB3aGljaCBtZWFucyBzaW5nbGUgZGlzcGF0Y2ggd2lsbCBhbHdheXMKKyAgICAgICAgIyBwcmVjZWRlcyBNdXRhYmxlTWFwcGluZyB3aGljaCBtZWFucyBzaW5nbGUgZGlzcGF0Y2ggd2lsbCBhbHdheXMKICAgICAgICAgIyBjaG9vc2UgTXV0YWJsZVNlcXVlbmNlIGhlcmUuCiAgICAgICAgIGNsYXNzIEQoYy5kZWZhdWx0ZGljdCk6CiAgICAgICAgICAgICBwYXNzCkBAIC0xNTc2LDMyICsxOTU3LDUgQEAKICAgICAgICAgZnVuY3Rvb2xzLldlYWtLZXlEaWN0aW9uYXJ5ID0gX29yaWdfd2tkCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHRlc3RfY2xhc3NlcyA9ICgKLSAgICAgICAgVGVzdFBhcnRpYWxDLAotICAgICAgICBUZXN0UGFydGlhbFB5LAotICAgICAgICBUZXN0UGFydGlhbENTdWJjbGFzcywKLSAgICAgICAgVGVzdFBhcnRpYWxNZXRob2QsCi0gICAgICAgIFRlc3RVcGRhdGVXcmFwcGVyLAotICAgICAgICBUZXN0VG90YWxPcmRlcmluZywKLSAgICAgICAgVGVzdENtcFRvS2V5QywKLSAgICAgICAgVGVzdENtcFRvS2V5UHksCi0gICAgICAgIFRlc3RXcmFwcywKLSAgICAgICAgVGVzdFJlZHVjZSwKLSAgICAgICAgVGVzdExSVSwKLSAgICAgICAgVGVzdFNpbmdsZURpc3BhdGNoLAotICAgICkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotCi0gICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6Ci0gICAgICAgIGltcG9ydCBnYwotICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKLSAgICAgICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCi0gICAgICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcHJpbnQoY291bnRzKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2djLnB5IGIvTGliL3Rlc3QvdGVzdF9nYy5weQppbmRleCAyYWMxZDRiLi5hNGQ2ODRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2djLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKQEAgLTEsNyArMSw4IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAodmVyYm9zZSwgcmVmY291bnRfdGVzdCwgcnVuX3VuaXR0ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX3B5dGhvbl9zdGRlcnIsIGNweXRob25fb25seSwgc3RhcnRfdGhyZWFkcykKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBtYWtlX3NjcmlwdCwgdGVtcF9kaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfcHl0aG9uX3N0ZGVyciwgY3B5dGhvbl9vbmx5LCBzdGFydF90aHJlYWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2RpciwgcmVxdWlyZXNfdHlwZV9jb2xsZWN0aW5nKQorZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgbWFrZV9zY3JpcHQKIAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKQEAgLTExNyw2ICsxMTgsNyBAQAogICAgICAgICBkZWwgYQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGdjLmNvbGxlY3QoKSwgMCkKIAorICAgIEByZXF1aXJlc190eXBlX2NvbGxlY3RpbmcKICAgICBkZWYgdGVzdF9uZXdpbnN0YW5jZShzZWxmKToKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgogICAgICAgICAgICAgcGFzcwpAQCAtNTQ2LDExICs1NDgsMzEgQEAKIAogICAgICAgICBjbGFzcyBVc2VyQ2xhc3M6CiAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVXNlckludChpbnQpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgQmFzZSBjbGFzcyBpcyBvYmplY3Q7IG5vIGV4dHJhIGZpZWxkcy4KKyAgICAgICAgY2xhc3MgVXNlckNsYXNzU2xvdHM6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgICAgICMgQmFzZSBjbGFzcyBpcyBmaXhlZCBzaXplIGxhcmdlciB0aGFuIG9iamVjdDsgbm8gZXh0cmEgZmllbGRzLgorICAgICAgICBjbGFzcyBVc2VyRmxvYXRTbG90cyhmbG9hdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgICAgICMgQmFzZSBjbGFzcyBpcyB2YXJpYWJsZSBzaXplOyBubyBleHRyYSBmaWVsZHMuCisgICAgICAgIGNsYXNzIFVzZXJJbnRTbG90cyhpbnQpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKwogICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChnYykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKFVzZXJDbGFzcykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKFVzZXJDbGFzcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoVXNlckludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoW10pKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChzZXQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChVc2VyQ2xhc3NTbG90cygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKFVzZXJGbG9hdFNsb3RzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoVXNlckludFNsb3RzKCkpKQogCiAgICAgZGVmIHRlc3RfYnVnMTA1NTgyMGIoc2VsZik6CiAgICAgICAgICMgQ29ycmVzcG9uZHMgdG8gdGVtcDJiLnB5IGluIHRoZSBidWcgcmVwb3J0LgpAQCAtNjU3LDYgKzY3OSw3IEBACiAgICAgICAgIHN0ZGVyciA9IHJ1bl9jb21tYW5kKGNvZGUgJSAiZ2MuREVCVUdfU0FWRUFMTCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJ1bmNvbGxlY3RhYmxlIG9iamVjdHMgYXQgc2h1dGRvd24iLCBzdGRlcnIpCiAKKyAgICBAcmVxdWlyZXNfdHlwZV9jb2xsZWN0aW5nCiAgICAgZGVmIHRlc3RfZ2NfbWFpbl9tb2R1bGVfYXRfc2h1dGRvd24oc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlIHRocm91Z2ggdGhlIF9fbWFpbl9fIG1vZHVsZSBhbmQgY2hlY2sKICAgICAgICAgIyBpdCBnZXRzIGNvbGxlY3RlZCBhdCBpbnRlcnByZXRlciBzaHV0ZG93bi4KQEAgLTY3MSw2ICs2OTQsNyBAQAogICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGInX19kZWxfXyBjYWxsZWQnKQogCisgICAgQHJlcXVpcmVzX3R5cGVfY29sbGVjdGluZwogICAgIGRlZiB0ZXN0X2djX29yZGluYXJ5X21vZHVsZV9hdF9zaHV0ZG93bihzZWxmKToKICAgICAgICAgIyBTYW1lIGFzIGFib3ZlLCBidXQgd2l0aCBhIG5vbi1fX21haW5fXyBtb2R1bGUuCiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZGIucHkgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQppbmRleCBiNTAxN2I5Li5jZDdkMjkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQpAQCAtNzUsNiArNzUsOSBAQAogICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pID49ICg3LCA0KToKICAgICAgICAgYmFzZV9jbWQgKz0gKCctaWV4JywgJ2FkZC1hdXRvLWxvYWQtc2FmZS1wYXRoICcgKyBjaGVja291dF9ob29rX3BhdGgpCiAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oYmFzZV9jbWQgKyBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmVkaXJlY3Qgc3RkaW4gdG8gcHJldmVudCBHREIgZnJvbSBtZXNzaW5nIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSB0ZXJtaW5hbCBzZXR0aW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKQEAgLTg5LDcgKzkyLDYgQEAKIAogIyBWZXJpZnkgdGhhdCAiZ2RiIiBjYW4gbG9hZCBvdXIgY3VzdG9tIGhvb2tzLCBhcyBPUyBzZWN1cml0eSBzZXR0aW5ncyBtYXkKICMgZGlzYWxsb3cgdGhpcyB3aXRob3V0IGEgY3VzdG9taXNlZCAuZ2RiaW5pdC4KLWNtZCA9IFsnLS1hcmdzJywgc3lzLmV4ZWN1dGFibGVdCiBfLCBnZGJweV9lcnJvcnMgPSBydW5fZ2RiKCctLWFyZ3MnLCBzeXMuZXhlY3V0YWJsZSkKIGlmICJhdXRvLWxvYWRpbmcgaGFzIGJlZW4gZGVjbGluZWQiIGluIGdkYnB5X2Vycm9yczoKICAgICBtc2cgPSAiZ2RiIHNlY3VyaXR5IHNldHRpbmdzIHByZXZlbnQgdXNlIG9mIGN1c3RvbSBob29rczogIgpAQCAtMTcxLDggKzE3Myw3IEBACiAgICAgICAgICMgcHJpbnQgY29tbWFuZHMKIAogICAgICAgICAjIFVzZSAiY29tbWFuZHMiIHRvIGdlbmVyYXRlIHRoZSBhcmd1bWVudHMgd2l0aCB3aGljaCB0byBpbnZva2UgImdkYiI6Ci0gICAgICAgIGFyZ3MgPSBbImdkYiIsICItLWJhdGNoIiwgIi1ueCJdCi0gICAgICAgIGFyZ3MgKz0gWyctLWV2YWwtY29tbWFuZD0lcycgJSBjbWQgZm9yIGNtZCBpbiBjb21tYW5kc10KKyAgICAgICAgYXJncyA9IFsnLS1ldmFsLWNvbW1hbmQ9JXMnICUgY21kIGZvciBjbWQgaW4gY29tbWFuZHNdCiAgICAgICAgIGFyZ3MgKz0gWyItLWFyZ3MiLAogICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZV0KIApAQCAtMTk3LDI3ICsxOTgsMTcgQEAKICAgICAgICAgIyBJZ25vcmUgc29tZSBiZW5pZ24gbWVzc2FnZXMgb24gc3RkZXJyLgogICAgICAgICBpZ25vcmVfcGF0dGVybnMgPSAoCiAgICAgICAgICAgICAnRnVuY3Rpb24gIiVzIiBub3QgZGVmaW5lZC4nICUgYnJlYWtwb2ludCwKLSAgICAgICAgICAgICJ3YXJuaW5nOiBubyBsb2FkYWJsZSBzZWN0aW9ucyBmb3VuZCBpbiBhZGRlZCBzeW1ib2wtZmlsZSIKLSAgICAgICAgICAgICIgc3lzdGVtLXN1cHBsaWVkIERTTyIsCi0gICAgICAgICAgICAid2FybmluZzogVW5hYmxlIHRvIGZpbmQgbGlidGhyZWFkX2RiIG1hdGNoaW5nIgotICAgICAgICAgICAgIiBpbmZlcmlvcidzIHRocmVhZCBsaWJyYXJ5LCB0aHJlYWQgZGVidWdnaW5nIHdpbGwiCi0gICAgICAgICAgICAiIG5vdCBiZSBhdmFpbGFibGUuIiwKLSAgICAgICAgICAgICJ3YXJuaW5nOiBDYW5ub3QgaW5pdGlhbGl6ZSB0aHJlYWQgZGVidWdnaW5nIgotICAgICAgICAgICAgIiBsaWJyYXJ5OiBEZWJ1Z2dlciBzZXJ2aWNlIGZhaWxlZCIsCi0gICAgICAgICAgICAnd2FybmluZzogQ291bGQgbm90IGxvYWQgc2hhcmVkIGxpYnJhcnkgc3ltYm9scyBmb3IgJwotICAgICAgICAgICAgJ2xpbnV4LXZkc28uc28nLAotICAgICAgICAgICAgJ3dhcm5pbmc6IENvdWxkIG5vdCBsb2FkIHNoYXJlZCBsaWJyYXJ5IHN5bWJvbHMgZm9yICcKLSAgICAgICAgICAgICdsaW51eC1nYXRlLnNvJywKLSAgICAgICAgICAgICd3YXJuaW5nOiBDb3VsZCBub3QgbG9hZCBzaGFyZWQgbGlicmFyeSBzeW1ib2xzIGZvciAnCi0gICAgICAgICAgICAnbGludXgtdmRzbzY0LnNvJywKICAgICAgICAgICAgICdEbyB5b3UgbmVlZCAic2V0IHNvbGliLXNlYXJjaC1wYXRoIiBvciAnCiAgICAgICAgICAgICAnInNldCBzeXNyb290Ij8nLAotICAgICAgICAgICAgJ3dhcm5pbmc6IFNvdXJjZSBmaWxlIGlzIG1vcmUgcmVjZW50IHRoYW4gZXhlY3V0YWJsZS4nLAotICAgICAgICAgICAgIyBJc3N1ZSAjMTk3NTM6IG1pc3Npbmcgc3ltYm9scyBvbiBTeXN0ZW0gWgotICAgICAgICAgICAgJ01pc3Npbmcgc2VwYXJhdGUgZGVidWdpbmZvIGZvciAnLAotICAgICAgICAgICAgJ1RyeTogenlwcGVyIGluc3RhbGwgLUMgJywKKyAgICAgICAgICAgICMgQkZEOiAvdXNyL2xpYi9kZWJ1Zy8oLi4uKTogdW5hYmxlIHRvIGluaXRpYWxpemUgZGVjb21wcmVzcworICAgICAgICAgICAgIyBzdGF0dXMgZm9yIHNlY3Rpb24gLmRlYnVnX2FyYW5nZXMKKyAgICAgICAgICAgICdCRkQ6ICcsCisgICAgICAgICAgICAjIGlnbm9yZSBhbGwgd2FybmluZ3MKKyAgICAgICAgICAgICd3YXJuaW5nOiAnLAogICAgICAgICAgICAgKQogICAgICAgICBmb3IgbGluZSBpbiBlcnJsaW5lczoKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKGlnbm9yZV9wYXR0ZXJucyk6CiAgICAgICAgICAgICAgICAgdW5leHBlY3RlZF9lcnJsaW5lcy5hcHBlbmQobGluZSkKIApAQCAtODIwLDI1ICs4MTEsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHdhcyBjb21waWxlZCB3aXRob3V0IHRocmVhZCBzdXBwb3J0IikKICAgICBkZWYgdGVzdF9weWNmdW5jdGlvbihzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGF0ICJweS1idCIgZGlzcGxheXMgaW52b2NhdGlvbnMgb2YgUHlDRnVuY3Rpb24gaW5zdGFuY2VzJwotICAgICAgICBjbWQgPSAoJ2Zyb20gdGltZSBpbXBvcnQgc2xlZXBcbicKKyAgICAgICAgIyBUZXN0ZWQgZnVuY3Rpb24gbXVzdCBub3QgYmUgZGVmaW5lZCB3aXRoIE1FVEhfTk9BUkdTIG9yIE1FVEhfTywKKyAgICAgICAgIyBvdGhlcndpc2UgY2FsbF9mdW5jdGlvbigpIGRvZXNuJ3QgY2FsbCBQeUNGdW5jdGlvbl9DYWxsKCkKKyAgICAgICAgY21kID0gKCdmcm9tIHRpbWUgaW1wb3J0IGdtdGltZVxuJwogICAgICAgICAgICAgICAgJ2RlZiBmb28oKTpcbicKLSAgICAgICAgICAgICAgICcgICAgc2xlZXAoMSlcbicKKyAgICAgICAgICAgICAgICcgICAgZ210aW1lKDEpXG4nCiAgICAgICAgICAgICAgICAnZGVmIGJhcigpOlxuJwogICAgICAgICAgICAgICAgJyAgICBmb28oKVxuJwogICAgICAgICAgICAgICAgJ2JhcigpXG4nKQogICAgICAgICAjIFZlcmlmeSB3aXRoICJweS1idCI6CiAgICAgICAgIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9zdGFja190cmFjZShjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50PSd0aW1lX3NsZWVwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQ9J3RpbWVfZ210aW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ2J0JywgJ3B5LWJ0J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJzxidWlsdC1pbiBtZXRob2Qgc2xlZXAnLCBnZGJfb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCc8YnVpbHQtaW4gbWV0aG9kIGdtdGltZScsIGdkYl9vdXRwdXQpCiAKICAgICAgICAgIyBWZXJpZnkgd2l0aCAicHktYnQtZnVsbCI6CiAgICAgICAgIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9zdGFja190cmFjZShjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50PSd0aW1lX3NsZWVwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQ9J3RpbWVfZ210aW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWJ0LWZ1bGwnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRJbignIzAgPGJ1aWx0LWluIG1ldGhvZCBzbGVlcCcsIGdkYl9vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyMwIDxidWlsdC1pbiBtZXRob2QgZ210aW1lJywgZ2RiX291dHB1dCkKIAogCiBjbGFzcyBQeVByaW50VGVzdHMoRGVidWdnZXJUZXN0cyk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKaW5kZXggNjA0ZTEyZC4uM2Y4MjQ2MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQpAQCAtMyw3ICszLDEwIEBACiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgdHlwZXMKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTc0LDYgKzc3LDQyIEBACiAKIGNsYXNzIEdlbmVyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3RfbmFtZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHlpZWxkIDEKKworICAgICAgICAjIGNoZWNrIGdlbmVyYXRvciBuYW1lcworICAgICAgICBnZW4gPSBmdW5jKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW4uX19uYW1lX18sICJmdW5jIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW4uX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICJHZW5lcmF0b3JUZXN0LnRlc3RfbmFtZS48bG9jYWxzPi5mdW5jIikKKworICAgICAgICAjIG1vZGlmeSBnZW5lcmF0b3IgbmFtZXMKKyAgICAgICAgZ2VuLl9fbmFtZV9fID0gIm5hbWUiCisgICAgICAgIGdlbi5fX3F1YWxuYW1lX18gPSAicXVhbG5hbWUiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fbmFtZV9fLCAibmFtZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fcXVhbG5hbWVfXywgInF1YWxuYW1lIikKKworICAgICAgICAjIGdlbmVyYXRvciBuYW1lcyBtdXN0IGJlIGEgc3RyaW5nIGFuZCBjYW5ub3QgYmUgZGVsZXRlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIGdlbiwgJ19fbmFtZV9fJywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIGdlbiwgJ19fcXVhbG5hbWVfXycsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWxhdHRyLCBnZW4sICdfX25hbWVfXycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVsYXR0ciwgZ2VuLCAnX19xdWFsbmFtZV9fJykKKworICAgICAgICAjIG1vZGlmeSBuYW1lcyBvZiB0aGUgZnVuY3Rpb24gY3JlYXRpbmcgdGhlIGdlbmVyYXRvcgorICAgICAgICBmdW5jLl9fcXVhbG5hbWVfXyA9ICJmdW5jX3F1YWxuYW1lIgorICAgICAgICBmdW5jLl9fbmFtZV9fID0gImZ1bmNfbmFtZSIKKyAgICAgICAgZ2VuID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fbmFtZV9fLCAiZnVuY19uYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW4uX19xdWFsbmFtZV9fLCAiZnVuY19xdWFsbmFtZSIpCisKKyAgICAgICAgIyB1bm5hbWVkIGdlbmVyYXRvcgorICAgICAgICBnZW4gPSAoeCBmb3IgeCBpbiByYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8Z2VuZXhwcj4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbi5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgIkdlbmVyYXRvclRlc3QudGVzdF9uYW1lLjxsb2NhbHM+LjxnZW5leHByPiIpCisKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgeWllbGQgMQpAQCAtMTk4LDYgKzIzNyw3OSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICJkb25lIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKSwgKE5vbmUsIE5vbmUsIE5vbmUpKQogCisgICAgZGVmIHRlc3Rfc3RvcGl0ZXJhdGlvbl93YXJuaW5nKHNlbGYpOgorICAgICAgICAjIFNlZSBhbHNvIFBFUCA0NzkuCisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pLCBcCisgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsICJTdG9wSXRlcmF0aW9uIik6CisKKyAgICAgICAgICAgIG5leHQoZ2VuKCkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdG9yIC4qIHJhaXNlZCBTdG9wSXRlcmF0aW9uIiksIFwKKyAgICAgICAgICAgICB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorCisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJykKKyAgICAgICAgICAgIG5leHQoZ2VuKCkpCisKKworICAgIGRlZiB0ZXN0X3R1dG9yaWFsX3N0b3BpdGVyYXRpb24oc2VsZik6CisgICAgICAgICMgUmFpc2UgU3RvcEl0ZXJhdGlvbiIgc3RvcHMgdGhlIGdlbmVyYXRvciB0b286CisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIHlpZWxkIDIgIyBuZXZlciByZWFjaGVkCisKKyAgICAgICAgZyA9IGYoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksIDEpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgIlN0b3BJdGVyYXRpb24iKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbik6CisgICAgICAgICAgICAgICAgbmV4dChnKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbik6CisgICAgICAgICAgICAjIFRoaXMgdGltZSBTdG9wSXRlcmF0aW9uIGlzbid0IHJhaXNlZCBmcm9tIHRoZSBnZW5lcmF0b3IncyBib2R5LAorICAgICAgICAgICAgIyBoZW5jZSBubyB3YXJuaW5nLgorICAgICAgICAgICAgbmV4dChnKQorCisKK2NsYXNzIFlpZWxkRnJvbVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9nZW5lcmF0b3JfZ2lfeWllbGRmcm9tKHNlbGYpOgorICAgICAgICBkZWYgYSgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGdlbmVyYXRvcnN0YXRlKGdlbl9iKSwgaW5zcGVjdC5HRU5fUlVOTklORykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGdlbl9iLmdpX3lpZWxkZnJvbSkKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0Z2VuZXJhdG9yc3RhdGUoZ2VuX2IpLCBpbnNwZWN0LkdFTl9SVU5OSU5HKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2VuX2IuZ2lfeWllbGRmcm9tKQorCisgICAgICAgIGRlZiBiKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZW5fYi5naV95aWVsZGZyb20pCisgICAgICAgICAgICB5aWVsZCBmcm9tIGEoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2VuX2IuZ2lfeWllbGRmcm9tKQorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGdlbl9iLmdpX3lpZWxkZnJvbSkKKworICAgICAgICBnZW5fYiA9IGIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0Z2VuZXJhdG9yc3RhdGUoZ2VuX2IpLCBpbnNwZWN0LkdFTl9DUkVBVEVEKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZW5fYi5naV95aWVsZGZyb20pCisKKyAgICAgICAgZ2VuX2Iuc2VuZChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0Z2VuZXJhdG9yc3RhdGUoZ2VuX2IpLCBpbnNwZWN0LkdFTl9TVVNQRU5ERUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuX2IuZ2lfeWllbGRmcm9tLmdpX2NvZGUuY29fbmFtZSwgJ2EnKQorCisgICAgICAgIGdlbl9iLnNlbmQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGdlbmVyYXRvcnN0YXRlKGdlbl9iKSwgaW5zcGVjdC5HRU5fU1VTUEVOREVEKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZW5fYi5naV95aWVsZGZyb20pCisKKyAgICAgICAgW10gPSBnZW5fYiAgIyBFeGhhdXN0IGdlbmVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0Z2VuZXJhdG9yc3RhdGUoZ2VuX2IpLCBpbnNwZWN0LkdFTl9DTE9TRUQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGdlbl9iLmdpX3lpZWxkZnJvbSkKKwogCiB0dXRvcmlhbF90ZXN0cyA9ICIiIgogTGV0J3MgdHJ5IGEgc2ltcGxlIGdlbmVyYXRvcjoKQEAgLTI0NCwyNiArMzU2LDcgQEAKICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgICBTdG9wSXRlcmF0aW9uCiAKLSJyYWlzZSBTdG9wSXRlcmF0aW9uIiBzdG9wcyB0aGUgZ2VuZXJhdG9yIHRvbzoKLQotICAgID4+PiBkZWYgZigpOgotICAgIC4uLiAgICAgeWllbGQgMQotICAgIC4uLiAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgIC4uLiAgICAgeWllbGQgMiAjIG5ldmVyIHJlYWNoZWQKLSAgICAuLi4KLSAgICA+Pj4gZyA9IGYoKQotICAgID4+PiBuZXh0KGcpCi0gICAgMQotICAgID4+PiBuZXh0KGcpCi0gICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwotICAgIFN0b3BJdGVyYXRpb24KLSAgICA+Pj4gbmV4dChnKQotICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KLSAgICBTdG9wSXRlcmF0aW9uCi0KLUhvd2V2ZXIsIHRoZXkgYXJlIG5vdCBleGFjdGx5IGVxdWl2YWxlbnQ6CitIb3dldmVyLCAicmV0dXJuIiBhbmQgU3RvcEl0ZXJhdGlvbiBhcmUgbm90IGV4YWN0bHkgZXF1aXZhbGVudDoKIAogICAgID4+PiBkZWYgZzEoKToKICAgICAuLi4gICAgIHRyeToKQEAgLTU4Myw3ICs2NzYsNyBAQAogPj4+IHR5cGUoaSkKIDxjbGFzcyAnZ2VuZXJhdG9yJz4KID4+PiBbcyBmb3IgcyBpbiBkaXIoaSkgaWYgbm90IHMuc3RhcnRzd2l0aCgnXycpXQotWydjbG9zZScsICdnaV9jb2RlJywgJ2dpX2ZyYW1lJywgJ2dpX3J1bm5pbmcnLCAnc2VuZCcsICd0aHJvdyddCitbJ2Nsb3NlJywgJ2dpX2NvZGUnLCAnZ2lfZnJhbWUnLCAnZ2lfcnVubmluZycsICdnaV95aWVsZGZyb20nLCAnc2VuZCcsICd0aHJvdyddCiA+Pj4gZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUwogPj4+IHByaW50KGkuX19uZXh0X18uX19kb2NfXyBpZiBIQVZFX0RPQ1NUUklOR1MgZWxzZSAnSW1wbGVtZW50IG5leHQoc2VsZikuJykKIEltcGxlbWVudCBuZXh0KHNlbGYpLgpAQCAtMTI1OCw3ICsxMzUxLDcgQEAKIAogICAgICAgICAjIEZvciBlYWNoIHNxdWFyZSwgY29tcHV0ZSBhIGJpdCB2ZWN0b3Igb2YgdGhlIGNvbHVtbnMgYW5kCiAgICAgICAgICMgZGlhZ29uYWxzIGl0IGNvdmVycywgYW5kIGZvciBlYWNoIHJvdyBjb21wdXRlIGEgZnVuY3Rpb24gdGhhdAotICAgICAgICAjIGdlbmVyYXRlcyB0aGUgcG9zc2libGl0aWVzIGZvciB0aGUgY29sdW1ucyBpbiB0aGF0IHJvdy4KKyAgICAgICAgIyBnZW5lcmF0ZXMgdGhlIHBvc3NpYmlsaXRpZXMgZm9yIHRoZSBjb2x1bW5zIGluIHRoYXQgcm93LgogICAgICAgICBzZWxmLnJvd2dlbmVyYXRvcnMgPSBbXQogICAgICAgICBmb3IgaSBpbiByYW5nZW46CiAgICAgICAgICAgICByb3d1c2VzID0gWygxIDw8IGopIHwgICAgICAgICAgICAgICAgICAjIGNvbHVtbiBvcmRpbmFsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQppbmRleCBlNTllZDRkLi5iNzdkMWQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTI3NCw2ICsyNzQsMTUgQEAKICAgICAjIGFuZCBpcyBvbmx5IG1lYW50IHRvIGJlIGluaGVyaXRlZCBieSBvdGhlcnMuCiAgICAgcGF0aG1vZHVsZSA9IGdlbmVyaWNwYXRoCiAKKyAgICBkZWYgdGVzdF9udWxsX2J5dGVzKHNlbGYpOgorICAgICAgICBmb3IgYXR0ciBpbiBHZW5lcmljVGVzdC5jb21tb25fYXR0cmlidXRlczoKKyAgICAgICAgICAgICMgb3MucGF0aC5jb21tb25wcmVmaXggZG9lc24ndCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICBpZiBhdHRyID09ICdjb21tb25wcmVmaXgnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChhdHRyPWF0dHIpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZi5wYXRobW9kdWxlLCBhdHRyKSgnL3RtcFx4MDBhYmNkcycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZW1iZWRkZWQgbnVsbCcsIHN0cihjbS5leGNlcHRpb24pKQogCiAjIEZvbGxvd2luZyBUZXN0Q2FzZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcnVuIGZyb20gdGVzdF9nZW5lcmljcGF0aC4KICMgSXQgaXMgaW5oZXJpdGVkIGJ5IG90aGVyIHRlc3QgbW9kdWxlcyAobWFjcGF0aCwgbnRwYXRoLCBwb3NpeHBhdGgpLgpAQCAtNDE5LDcgKzQyOCw3IEBACiAgICAgZGVmIHRlc3Rfbm9uYXNjaWlfYWJzcGF0aChzZWxmKToKICAgICAgICAgaWYgKHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFCiAgICAgICAgICMgTWFjIE9TIFggZGVuaWVzIHRoZSBjcmVhdGlvbiBvZiBhIGRpcmVjdG9yeSB3aXRoIGFuIGludmFsaWQKLSAgICAgICAgIyBVVEYtOCBuYW1lLiBXaW5kb3dzIGFsbG93cyB0byBjcmVhdGUgYSBkaXJlY3Rvcnkgd2l0aCBhbgorICAgICAgICAjIFVURi04IG5hbWUuIFdpbmRvd3MgYWxsb3dzIGNyZWF0aW5nIGEgZGlyZWN0b3J5IHdpdGggYW4KICAgICAgICAgIyBhcmJpdHJhcnkgYnl0ZXMgbmFtZSwgYnV0IGZhaWxzIHRvIGVudGVyIHRoaXMgZGlyZWN0b3J5CiAgICAgICAgICMgKHdoZW4gdGhlIGJ5dGVzIG5hbWUgaXMgdXNlZCkuCiAgICAgICAgIGFuZCBzeXMucGxhdGZvcm0gbm90IGluICgnd2luMzInLCAnZGFyd2luJykpOgpAQCAtNDM0LDYgKzQ0Myw0NCBAQAogICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKG5hbWUpOgogICAgICAgICAgICAgICAgIHNlbGYudGVzdF9hYnNwYXRoKCkKIAorICAgIGRlZiB0ZXN0X2pvaW5fZXJyb3JzKHNlbGYpOgorICAgICAgICAjIENoZWNrIGpvaW4oKSByYWlzZXMgZnJpZW5kbHkgVHlwZUVycm9ycy4KKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgQnl0ZXNXYXJuaW5nKSwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBlcnJtc2cgPSAiQ2FuJ3QgbWl4IHN0cmluZ3MgYW5kIGJ5dGVzIGluIHBhdGggY29tcG9uZW50cyIKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRobW9kdWxlLmpvaW4oYidieXRlcycsICdzdHInKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgZXJybXNnKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUuam9pbignc3RyJywgYidieXRlcycpCisgICAgICAgICAgICAjIHJlZ3Jlc3Npb24sIHNlZSAjMTUzNzcKKyAgICAgICAgICAgIGVycm1zZyA9IHInam9pblwoXCkgYXJndW1lbnQgbXVzdCBiZSBzdHIgb3IgYnl0ZXMsIG5vdCAlcicKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyAlICdpbnQnKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUuam9pbig0MiwgJ3N0cicpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBlcnJtc2cgJSAnaW50Jyk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRobW9kdWxlLmpvaW4oJ3N0cicsIDQyKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgZXJybXNnICUgJ2ludCcpOgorICAgICAgICAgICAgICAgIHNlbGYucGF0aG1vZHVsZS5qb2luKDQyKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgZXJybXNnICUgJ2xpc3QnKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUuam9pbihbXSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyAlICdieXRlYXJyYXknKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUuam9pbihieXRlYXJyYXkoYidmb28nKSwgYnl0ZWFycmF5KGInYmFyJykpCisKKyAgICBkZWYgdGVzdF9yZWxwYXRoX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBDaGVjayByZWxwYXRoKCkgcmFpc2VzIGZyaWVuZGx5IFR5cGVFcnJvcnMuCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIChCeXRlc1dhcm5pbmcsIERlcHJlY2F0aW9uV2FybmluZykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBlcnJtc2cgPSAiQ2FuJ3QgbWl4IHN0cmluZ3MgYW5kIGJ5dGVzIGluIHBhdGggY29tcG9uZW50cyIKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRobW9kdWxlLnJlbHBhdGgoYidieXRlcycsICdzdHInKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgZXJybXNnKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUucmVscGF0aCgnc3RyJywgYidieXRlcycpCisgICAgICAgICAgICBlcnJtc2cgPSByJ3JlbHBhdGhcKFwpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCBub3QgJXInCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBlcnJtc2cgJSAnaW50Jyk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXRobW9kdWxlLnJlbHBhdGgoNDIsICdzdHInKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgZXJybXNnICUgJ2ludCcpOgorICAgICAgICAgICAgICAgIHNlbGYucGF0aG1vZHVsZS5yZWxwYXRoKCdzdHInLCA0MikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyAlICdieXRlYXJyYXknKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUucmVscGF0aChieXRlYXJyYXkoYidmb28nKSwgYnl0ZWFycmF5KGInYmFyJykpCisKIAogaWYgX19uYW1lX189PSJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQppbmRleCAxODUzYTJkLi45ODRhYWM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKQEAgLTEsNCArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBtYXRoCitpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKICMgU2tpcCB0aGlzIHRlc3QgaWYgdGhlIF90ZXN0Y2FwaSBtb2R1bGUgaXNuJ3QgYXZhaWxhYmxlLgogc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGVzdGNhcGknKQpAQCAtMzQsOCArMzYsOCBAQAogIyA+ICoqIENoYW5nZWQgZnJvbSBwcmV2aW91cyAicmFuZ2UtYW5kLWEtaGFsZiIgdG8gIm5vbmUiOyB0aGUKICMgPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgogIwotIyBQbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgotIyB1bnNpZ25lZCBsb25nIGFuZCBQeUludF9Bc0xvbmdMb25nTWFzaygpIC0+IHVuc2lnbmVkCisjIFBsdXMgYSBDIEFQSSBvciB0d28sIGUuZy4gUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaygpIC0+CisjIHVuc2lnbmVkIGxvbmcgYW5kIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKCkgLT4gdW5zaWduZWQKICMgbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCiAKIExBUkdFID0gMHg3RkZGRkZGRgpAQCAtNDMsNyArNDUsMTEgQEAKIAogZnJvbSBfdGVzdGNhcGkgaW1wb3J0IFVDSEFSX01BWCwgVVNIUlRfTUFYLCBVSU5UX01BWCwgVUxPTkdfTUFYLCBJTlRfTUFYLCBcCiAgICAgIElOVF9NSU4sIExPTkdfTUlOLCBMT05HX01BWCwgUFlfU1NJWkVfVF9NSU4sIFBZX1NTSVpFX1RfTUFYLCBcCi0gICAgIFNIUlRfTUlOLCBTSFJUX01BWAorICAgICBTSFJUX01JTiwgU0hSVF9NQVgsIEZMVF9NSU4sIEZMVF9NQVgsIERCTF9NSU4sIERCTF9NQVgKKworREJMX01BWF9FWFAgPSBzeXMuZmxvYXRfaW5mby5tYXhfZXhwCitJTkYgPSBmbG9hdCgnaW5mJykKK05BTiA9IGZsb2F0KCduYW4nKQogCiAjIGZha2UsIHRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIFB5dGhvbidzIGhlYWRlciBmaWxlcwogTExPTkdfTUFYID0gMioqNjMtMQpAQCAtNzEsNiArNzcsNjEgQEAKICAgICAgICAgcmV0dXJuIFRydWUKIAogCitjbGFzcyBGbG9hdDoKKyAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gNC4yNQorCitjbGFzcyBGbG9hdFN1YmNsYXNzKGZsb2F0KToKKyAgICBwYXNzCisKK2NsYXNzIEZsb2F0U3ViY2xhc3MyKGZsb2F0KToKKyAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gNC4yNQorCitjbGFzcyBCYWRGbG9hdDoKKyAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gNjg3CisKK2NsYXNzIEJhZEZsb2F0MjoKKyAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gRmxvYXRTdWJjbGFzcyg0LjI1KQorCitjbGFzcyBCYWRGbG9hdDMoZmxvYXQpOgorICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgIHJldHVybiBGbG9hdFN1YmNsYXNzKDQuMjUpCisKKworY2xhc3MgQ29tcGxleDoKKyAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiA0LjI1KzAuNWoKKworY2xhc3MgQ29tcGxleFN1YmNsYXNzKGNvbXBsZXgpOgorICAgIHBhc3MKKworY2xhc3MgQ29tcGxleFN1YmNsYXNzMihjb21wbGV4KToKKyAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiA0LjI1KzAuNWoKKworY2xhc3MgQmFkQ29tcGxleDoKKyAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiAxLjI1CisKK2NsYXNzIEJhZENvbXBsZXgyOgorICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIENvbXBsZXhTdWJjbGFzcyg0LjI1KzAuNWopCisKK2NsYXNzIEJhZENvbXBsZXgzKGNvbXBsZXgpOgorICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIENvbXBsZXhTdWJjbGFzcyg0LjI1KzAuNWopCisKKworY2xhc3MgVHVwbGVTdWJjbGFzcyh0dXBsZSk6CisgICAgcGFzcworCitjbGFzcyBEaWN0U3ViY2xhc3MoZGljdCk6CisgICAgcGFzcworCisKIGNsYXNzIFVuc2lnbmVkX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9iKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19iCkBAIC0yODksNiArMzUwLDgxIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWRVJZX0xBUkdFICYgVUxMT05HX01BWCwgZ2V0YXJnc19LKFZFUllfTEFSR0UpKQogCisKK2NsYXNzIEZsb2F0X1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0RXF1YWxXaXRoU2lnbihzZWxmLCBhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMSwgYWN0dWFsKSwgbWF0aC5jb3B5c2lnbigxLCBleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF9mKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19mCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19mKDQuMjUpLCA0LjI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZig0KSwgNC4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfZiwgNC4yNSswaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2YoRmxvYXQoKSksIDQuMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19mKEZsb2F0U3ViY2xhc3MoNy41KSksIDcuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2YoRmxvYXRTdWJjbGFzczIoNy41KSksIDcuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2YsIEJhZEZsb2F0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19mKEJhZEZsb2F0MigpKSwgNC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2YoQmFkRmxvYXQzKDcuNSkpLCA3LjUpCisKKyAgICAgICAgZm9yIHggaW4gKEZMVF9NSU4sIC1GTFRfTUlOLCBGTFRfTUFYLCAtRkxUX01BWCwgSU5GLCAtSU5GKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19mKHgpLCB4KQorICAgICAgICBpZiBGTFRfTUFYIDwgREJMX01BWDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19mKERCTF9NQVgpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZigtREJMX01BWCksIC1JTkYpCisgICAgICAgIGlmIEZMVF9NSU4gPiBEQkxfTUlOOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFdpdGhTaWduKGdldGFyZ3NfZihEQkxfTUlOKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFdpdGhTaWduKGdldGFyZ3NfZigtREJMX01JTiksIC0wLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxXaXRoU2lnbihnZXRhcmdzX2YoMC4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsV2l0aFNpZ24oZ2V0YXJnc19mKC0wLjApLCAtMC4wKQorICAgICAgICByID0gZ2V0YXJnc19mKE5BTikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyLCByKQorCisgICAgZGVmIHRlc3RfZChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZCg0LjI1KSwgNC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2QoNCksIDQuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2QsIDQuMjUrMGopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19kKEZsb2F0KCkpLCA0LjI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZChGbG9hdFN1YmNsYXNzKDcuNSkpLCA3LjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19kKEZsb2F0U3ViY2xhc3MyKDcuNSkpLCA3LjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19kLCBCYWRGbG9hdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZChCYWRGbG9hdDIoKSksIDQuMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19kKEJhZEZsb2F0Myg3LjUpKSwgNy41KQorCisgICAgICAgIGZvciB4IGluIChEQkxfTUlOLCAtREJMX01JTiwgREJMX01BWCwgLURCTF9NQVgsIElORiwgLUlORik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZCh4KSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19kLCAxPDxEQkxfTUFYX0VYUCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19kLCAtMTw8REJMX01BWF9FWFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxXaXRoU2lnbihnZXRhcmdzX2QoMC4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsV2l0aFNpZ24oZ2V0YXJnc19kKC0wLjApLCAtMC4wKQorICAgICAgICByID0gZ2V0YXJnc19kKE5BTikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyLCByKQorCisgICAgZGVmIHRlc3RfRChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfRAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfRCg0LjI1KzAuNWopLCA0LjI1KzAuNWopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19EKDQuMjUpLCA0LjI1KzBqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfRCg0KSwgNC4wKzBqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfRChDb21wbGV4KCkpLCA0LjI1KzAuNWopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19EKENvbXBsZXhTdWJjbGFzcyg3LjUrMC4yNWopKSwgNy41KzAuMjVqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfRChDb21wbGV4U3ViY2xhc3MyKDcuNSswLjI1aikpLCA3LjUrMC4yNWopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19ELCBCYWRDb21wbGV4KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19EKEJhZENvbXBsZXgyKCkpLCA0LjI1KzAuNWopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19EKEJhZENvbXBsZXgzKDcuNSswLjI1aikpLCA3LjUrMC4yNWopCisKKyAgICAgICAgZm9yIHggaW4gKERCTF9NSU4sIC1EQkxfTUlOLCBEQkxfTUFYLCAtREJMX01BWCwgSU5GLCAtSU5GKToKKyAgICAgICAgICAgIGMgPSBjb21wbGV4KHgsIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19EKGMpLCBjKQorICAgICAgICAgICAgYyA9IGNvbXBsZXgoMS4wLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX0QoYyksIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxXaXRoU2lnbihnZXRhcmdzX0QoY29tcGxleCgwLjAsIDEuMCkpLnJlYWwsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFdpdGhTaWduKGdldGFyZ3NfRChjb21wbGV4KC0wLjAsIDEuMCkpLnJlYWwsIC0wLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxXaXRoU2lnbihnZXRhcmdzX0QoY29tcGxleCgxLjAsIDAuMCkpLmltYWcsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFdpdGhTaWduKGdldGFyZ3NfRChjb21wbGV4KDEuMCwgLTAuMCkpLmltYWcsIC0wLjApCisKKwogY2xhc3MgUGFyYWRveDoKICAgICAiVGhpcyBzdGF0ZW1lbnQgaXMgZmFsc2UuIgogICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKQEAgLTMyMSw2ICs0NTcsMzMgQEAKIAogCiBjbGFzcyBUdXBsZV9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYXJncyhzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldF9hcmdzCisKKyAgICAgICAgcmV0ID0gZ2V0X2FyZ3MoMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHJldCksIHR1cGxlKQorCisgICAgICAgIHJldCA9IGdldF9hcmdzKDEsICooMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAoMSwgMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyZXQpLCB0dXBsZSkKKworICAgICAgICByZXQgPSBnZXRfYXJncygqWzEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocmV0KSwgdHVwbGUpCisKKyAgICAgICAgcmV0ID0gZ2V0X2FyZ3MoKlR1cGxlU3ViY2xhc3MoWzEsIDJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldCwgdHVwbGUpCisKKyAgICAgICAgcmV0ID0gZ2V0X2FyZ3MoKQorICAgICAgICBzZWxmLmFzc2VydEluKHJldCwgKCgpLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0eXBlKHJldCksICh0dXBsZSwgdHlwZShOb25lKSkpCisKKyAgICAgICAgcmV0ID0gZ2V0X2FyZ3MoKigpKQorICAgICAgICBzZWxmLmFzc2VydEluKHJldCwgKCgpLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0eXBlKHJldCksICh0dXBsZSwgdHlwZShOb25lKSkpCisKICAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfdHVwbGUKIApAQCAtMzM2LDYgKzQ5OSwyOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfdHVwbGUsIDEsIHNlcSgpKQogCiBjbGFzcyBLZXl3b3Jkc19UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfa3dhcmdzKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0X2t3YXJncworCisgICAgICAgIHJldCA9IGdldF9rd2FyZ3MoYT0xLCBiPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCB7J2EnOiAxLCAnYic6IDJ9KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocmV0KSwgZGljdCkKKworICAgICAgICByZXQgPSBnZXRfa3dhcmdzKGE9MSwgKip7J2InOiAyLCAnYyc6IDN9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgeydhJzogMSwgJ2InOiAyLCAnYyc6IDN9KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocmV0KSwgZGljdCkKKworICAgICAgICByZXQgPSBnZXRfa3dhcmdzKCoqRGljdFN1YmNsYXNzKHsnYSc6IDEsICdiJzogMn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgeydhJzogMSwgJ2InOiAyfSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldCwgZGljdCkKKworICAgICAgICByZXQgPSBnZXRfa3dhcmdzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXQsICh7fSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odHlwZShyZXQpLCAoZGljdCwgdHlwZShOb25lKSkpCisKKyAgICAgICAgcmV0ID0gZ2V0X2t3YXJncygqKnt9KQorICAgICAgICBzZWxmLmFzc2VydEluKHJldCwgKHt9LCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0eXBlKHJldCksIChkaWN0LCB0eXBlKE5vbmUpKSkKKwogICAgIGRlZiB0ZXN0X3Bvc2l0aW9uYWxfYXJncyhzZWxmKToKICAgICAgICAgIyB1c2luZyBhbGwgcG9zaXRpb25hbCBhcmdzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCkBAIC00NjksNzUgKzY1NSwyMyBAQAogICAgICAgICAgICAgIidcdWRjODAnIGlzIGFuIGludmFsaWQga2V5d29yZCBhcmd1bWVudCBmb3IgdGhpcyBmdW5jdGlvbiIpOgogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkX29ubHkoMSwgMiwgKip7J1x1REM4MCc6IDEwfSkKIAorCiBjbGFzcyBCeXRlc19UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfYyhzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfYwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfYywgYidhYmMnKSAgIyBsZW4gPiAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19jKGInYScpLCBiJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfYyhieXRlYXJyYXkoYidhJykpLCBiJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfYyhiJ2EnKSwgOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19jKGJ5dGVhcnJheShiJ2EnKSksIDk3KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfYywgbWVtb3J5dmlldyhiJ2EnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2MsICdzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2MsIDk3KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfYywgTm9uZSkKIAotICAgIGRlZiB0ZXN0X3Moc2VsZik6Ci0gICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3MoJ2FiY1x4ZTknKSwgYidhYmNceGMzXHhhOScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zLCAnbnVsOlwwJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3MsIGInYnl0ZXMnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfcywgYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfcywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X3Nfc3RhcihzZWxmKToKLSAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3Nfc19zdGFyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX3N0YXIoJ2FiY1x4ZTknKSwgYidhYmNceGMzXHhhOScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX3N0YXIoJ251bDpcMCcpLCBiJ251bDpcMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX3N0YXIoYidieXRlcycpLCBiJ2J5dGVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3Nfc3RhcihieXRlYXJyYXkoYidieXRlYXJyYXknKSksIGInYnl0ZWFycmF5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3Nfc3RhcihtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKSwgYidtZW1vcnl2aWV3JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3Nfc3RhciwgTm9uZSkKLQotICAgIGRlZiB0ZXN0X3NfaGFzaChzZWxmKToKLSAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3Nfc19oYXNoCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX2hhc2goJ2FiY1x4ZTknKSwgYidhYmNceGMzXHhhOScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX2hhc2goJ251bDpcMCcpLCBiJ251bDpcMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX2hhc2goYidieXRlcycpLCBiJ2J5dGVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3NfaGFzaCwgYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zX2hhc2gsIG1lbW9yeXZpZXcoYidtZW1vcnl2aWV3JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zX2hhc2gsIE5vbmUpCi0KLSAgICBkZWYgdGVzdF96KHNlbGYpOgotICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc196Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196KCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeiwgJ251bDpcMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc196LCBiJ2J5dGVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3osIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeiwgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc196KE5vbmUpKQotCi0gICAgZGVmIHRlc3Rfel9zdGFyKHNlbGYpOgotICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc196X3N0YXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3pfc3RhcignYWJjXHhlOScpLCBiJ2FiY1x4YzNceGE5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3pfc3RhcignbnVsOlwwJyksIGInbnVsOlwwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3pfc3RhcihiJ2J5dGVzJyksIGInYnl0ZXMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfel9zdGFyKGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKSwgYidieXRlYXJyYXknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfel9zdGFyKG1lbW9yeXZpZXcoYidtZW1vcnl2aWV3JykpLCBiJ21lbW9yeXZpZXcnKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZXRhcmdzX3pfc3RhcihOb25lKSkKLQotICAgIGRlZiB0ZXN0X3pfaGFzaChzZWxmKToKLSAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3Nfel9oYXNoCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196X2hhc2goJ2FiY1x4ZTknKSwgYidhYmNceGMzXHhhOScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196X2hhc2goJ251bDpcMCcpLCBiJ251bDpcMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196X2hhc2goYidieXRlcycpLCBiJ2J5dGVzJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3pfaGFzaCwgYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc196X2hhc2gsIG1lbW9yeXZpZXcoYidtZW1vcnl2aWV3JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGdldGFyZ3Nfel9oYXNoKE5vbmUpKQotCiAgICAgZGVmIHRlc3RfeShzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfeQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeSwgJ2FiY1x4ZTknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfeShiJ2J5dGVzJyksIGInYnl0ZXMnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeSwgYidudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRhcmdzX3ksIGInbnVsOlwwJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3ksIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeSwgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3ksIE5vbmUpCkBAIC01NjcsMTcgKzcwMSwxNjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3dfc3RhciwgYidieXRlcycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc193X3N0YXIsIGInbnVsOlwwJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3dfc3RhciwgbWVtb3J5dmlldyhiJ2J5dGVzJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc193X3N0YXIoYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpLCBiJ1t5dGVhcnJhXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc193X3N0YXIobWVtb3J5dmlldyhieXRlYXJyYXkoYidtZW1vcnl2aWV3JykpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tlbW9yeXZpZV0nKQorICAgICAgICBidWYgPSBieXRlYXJyYXkoYidieXRlYXJyYXknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfd19zdGFyKGJ1ZiksIGInW3l0ZWFycmFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGJ5dGVhcnJheShiJ1t5dGVhcnJhXScpKQorICAgICAgICBidWYgPSBieXRlYXJyYXkoYidtZW1vcnl2aWV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3dfc3RhcihtZW1vcnl2aWV3KGJ1ZikpLCBiJ1tlbW9yeXZpZV0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYnl0ZWFycmF5KGInW2Vtb3J5dmllXScpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfd19zdGFyLCBOb25lKQogCiAKLWNsYXNzIFVuaWNvZGVfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3RyaW5nX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9DKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19DCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19DLCAnYWJjJykgICMgbGVuID4gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfQygnYScpLCA5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX0MoJ1x1MjBhYycpLCAweDIwYWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19DKCdcVTAwMDFmNDBkJyksIDB4MWY0MGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19DLCBiJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfQywgYnl0ZWFycmF5KGInYScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfQywgbWVtb3J5dmlldyhiJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0MsIDk3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfQywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3Moc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3MoJ2FiY1x4ZTknKSwgYidhYmNceGMzXHhhOScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldGFyZ3NfcywgJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3MsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfcywgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3MsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zX3N0YXIoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3Nfc3RhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19zdGFyKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19zdGFyKCdudWw6XDAnKSwgYidudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19zdGFyKGInYnl0ZXMnKSwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX3N0YXIoYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpLCBiJ2J5dGVhcnJheScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX3N0YXIobWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSksIGInbWVtb3J5dmlldycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zX3N0YXIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zX2hhc2goc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3NfaGFzaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19oYXNoKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19oYXNoKCdudWw6XDAnKSwgYidudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19oYXNoKGInYnl0ZXMnKSwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zX2hhc2gsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfc19oYXNoLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfc19oYXNoLCBOb25lKQorCisgICAgZGVmIHRlc3RfeihzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfegorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfeignYWJjXHhlOScpLCBiJ2FiY1x4YzNceGE5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0YXJnc196LCAnbnVsOlwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3osIGInYnl0ZXMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeiwgYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc196LCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZXRhcmdzX3ooTm9uZSkpCisKKyAgICBkZWYgdGVzdF96X3N0YXIoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3pfc3RhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfel9zdGFyKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfel9zdGFyKCdudWw6XDAnKSwgYidudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfel9zdGFyKGInYnl0ZXMnKSwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196X3N0YXIoYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpLCBiJ2J5dGVhcnJheScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196X3N0YXIobWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSksIGInbWVtb3J5dmlldycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGdldGFyZ3Nfel9zdGFyKE5vbmUpKQorCisgICAgZGVmIHRlc3Rfel9oYXNoKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc196X2hhc2gKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3pfaGFzaCgnYWJjXHhlOScpLCBiJ2FiY1x4YzNceGE5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3pfaGFzaCgnbnVsOlwwJyksIGInbnVsOlwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3pfaGFzaChiJ2J5dGVzJyksIGInYnl0ZXMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfel9oYXNoLCBieXRlYXJyYXkoYidieXRlYXJyYXknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3pfaGFzaCwgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc196X2hhc2goTm9uZSkpCisKKyAgICBkZWYgdGVzdF9lcyhzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2VzKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZXMoJ2FiY1x4ZTknLCAnbGF0aW4xJyksIGInYWJjXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgZ2V0YXJnc19lcywgJ2FiY1x4ZTknLCAnYXNjaWknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgZ2V0YXJnc19lcywgJ2FiY1x4ZTknLCAnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19lcywgYidieXRlcycsICdsYXRpbjEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfZXMsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2VzLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2VzLCBOb25lLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2VzLCAnbnVsOlwwJywgJ2xhdGluMScpCisKKyAgICBkZWYgdGVzdF9ldChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2V0KCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZXQoJ2FiY1x4ZTknLCAnbGF0aW4xJyksIGInYWJjXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgZ2V0YXJnc19ldCwgJ2FiY1x4ZTknLCAnYXNjaWknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgZ2V0YXJnc19ldCwgJ2FiY1x4ZTknLCAnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19ldChiJ2J5dGVzJywgJ2xhdGluMScpLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2V0KGJ5dGVhcnJheShiJ2J5dGVhcnJheScpLCAnbGF0aW4xJyksIGInYnl0ZWFycmF5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2V0LCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2V0LCBOb25lLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2V0LCAnbnVsOlwwJywgJ2xhdGluMScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19ldCwgYidudWw6XDAnLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2V0LCBieXRlYXJyYXkoYidudWw6XDAnKSwgJ2xhdGluMScpCisKKyAgICBkZWYgdGVzdF9lc19oYXNoKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19lc19oYXNoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19lc19oYXNoKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZXNfaGFzaCgnYWJjXHhlOScsICdsYXRpbjEnKSwgYidhYmNceGU5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBnZXRhcmdzX2VzX2hhc2gsICdhYmNceGU5JywgJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGdldGFyZ3NfZXNfaGFzaCwgJ2FiY1x4ZTknLCAnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19lc19oYXNoLCBiJ2J5dGVzJywgJ2xhdGluMScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19lc19oYXNoLCBieXRlYXJyYXkoYidieXRlYXJyYXknKSwgJ2xhdGluMScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19lc19oYXNoLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2VzX2hhc2gsIE5vbmUsICdsYXRpbjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZXNfaGFzaCgnbnVsOlwwJywgJ2xhdGluMScpLCBiJ251bDpcMCcpCisKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KGIneCcqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2VzX2hhc2goJ2FiY1x4ZTknLCAnbGF0aW4xJywgYnVmKSwgYidhYmNceGU5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGJ5dGVhcnJheShiJ2FiY1x4ZTlceDAweHh4JykpCisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheShiJ3gnKjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19lc19oYXNoKCdhYmNceGU5JywgJ2xhdGluMScsIGJ1ZiksIGInYWJjXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBieXRlYXJyYXkoYidhYmNceGU5XHgwMCcpKQorICAgICAgICBidWYgPSBieXRlYXJyYXkoYid4Jyo0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfZXNfaGFzaCwgJ2FiY1x4ZTknLCAnbGF0aW4xJywgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYnl0ZWFycmF5KGIneCcqNCkpCisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19lc19oYXNoLCAnYWJjXHhlOScsICdsYXRpbjEnLCBidWYpCisKKyAgICBkZWYgdGVzdF9ldF9oYXNoKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19ldF9oYXNoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19ldF9oYXNoKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZXRfaGFzaCgnYWJjXHhlOScsICdsYXRpbjEnKSwgYidhYmNceGU5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBnZXRhcmdzX2V0X2hhc2gsICdhYmNceGU5JywgJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGdldGFyZ3NfZXRfaGFzaCwgJ2FiY1x4ZTknLCAnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19ldF9oYXNoKGInYnl0ZXMnLCAnbGF0aW4xJyksIGInYnl0ZXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZXRfaGFzaChieXRlYXJyYXkoYidieXRlYXJyYXknKSwgJ2xhdGluMScpLCBiJ2J5dGVhcnJheScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19ldF9oYXNoLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpLCAnbGF0aW4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2V0X2hhc2gsIE5vbmUsICdsYXRpbjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZXRfaGFzaCgnbnVsOlwwJywgJ2xhdGluMScpLCBiJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19ldF9oYXNoKGInbnVsOlwwJywgJ2xhdGluMScpLCBiJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19ldF9oYXNoKGJ5dGVhcnJheShiJ251bDpcMCcpLCAnbGF0aW4xJyksIGInbnVsOlwwJykKKworICAgICAgICBidWYgPSBieXRlYXJyYXkoYid4Jyo4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfZXRfaGFzaCgnYWJjXHhlOScsICdsYXRpbjEnLCBidWYpLCBiJ2FiY1x4ZTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYnl0ZWFycmF5KGInYWJjXHhlOVx4MDB4eHgnKSkKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KGIneCcqNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX2V0X2hhc2goJ2FiY1x4ZTknLCAnbGF0aW4xJywgYnVmKSwgYidhYmNceGU5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGJ5dGVhcnJheShiJ2FiY1x4ZTlceDAwJykpCisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheShiJ3gnKjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19ldF9oYXNoLCAnYWJjXHhlOScsICdsYXRpbjEnLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBieXRlYXJyYXkoYid4Jyo0KSkKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2V0X2hhc2gsICdhYmNceGU5JywgJ2xhdGluMScsIGJ1ZikKKwogICAgIGRlZiB0ZXN0X3Uoc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3UKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3UoJ2FiY1x4ZTknKSwgJ2FiY1x4ZTknKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfdSwgJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldGFyZ3NfdSwgJ251bDpcMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc191LCBiJ2J5dGVzJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3UsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfdSwgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKQEAgLTU5NSw3ICs4NzQsNyBAQAogICAgIGRlZiB0ZXN0X1ooc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX1oKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX1ooJ2FiY1x4ZTknKSwgJ2FiY1x4ZTknKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfWiwgJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldGFyZ3NfWiwgJ251bDpcMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19aLCBiJ2J5dGVzJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX1osIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfWiwgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKQEAgLTYxMSw1ICs4OTAsMzMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc19aX2hhc2goTm9uZSkpCiAKIAorY2xhc3MgT2JqZWN0X1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9TKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19TCisgICAgICAgIG9iaiA9IGInYnl0ZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXJnc19TKG9iaiksIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX1MsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfUywgJ3N0cicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19TLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfUywgbWVtb3J5dmlldyhvYmopKQorCisgICAgZGVmIHRlc3RfWShzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfWQorICAgICAgICBvYmogPSBieXRlYXJyYXkoYidieXRlYXJyYXknKQorICAgICAgICBzZWxmLmFzc2VydElzKGdldGFyZ3NfWShvYmopLCBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19ZLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX1ksICdzdHInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfWSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX1ksIG1lbW9yeXZpZXcob2JqKSkKKworICAgIGRlZiB0ZXN0X1Uoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX1UKKyAgICAgICAgb2JqID0gJ3N0cicKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhcmdzX1Uob2JqKSwgb2JqKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfVSwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19VLCBieXRlYXJyYXkoYidieXRlYXJyYXknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX1UsIE5vbmUpCisKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKaW5kZXggZmE1NzAxZi4uOTI3NWRjNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKQEAgLTEsNyArMSw3IEBACiAjIHRlc3RfZ2V0b3B0LnB5CiAjIERhdmlkIEdvb2RnZXIgPGRnb29kZ2VyQGJpZ2Zvb3QuY29tPiAyMDAwLTA4LTE5CiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fZG9jdGVzdCwgcnVuX3VuaXR0ZXN0LCBFbnZpcm9ubWVudFZhckd1YXJkCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgcnVuX2RvY3Rlc3QsIEVudmlyb25tZW50VmFyR3VhcmQKIGltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgZ2V0b3B0CkBAIC0xODAsOCArMTgwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nb3B0cywgWygnLS1oZWxwJywgJ3gnKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGdldG9wdC5HZXRvcHRFcnJvciwgZ2V0b3B0LmdldG9wdCwgWyctLWhlbHA9J10sICcnLCBbJ2hlbHAnXSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChHZXRvcHRUZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5IGIvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5CmluZGV4IDI3MzdlODEuLmRlNjEwYzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dldHRleHQucHkKQEAgLTMzLDYgKzMzLDU1IEBACiBjaUJVUVVnS2RISm5aM0pyWnlCNmNtWm1iblJ5SUhCdVoyNTVZblFnZVhadlpXNWxiQzRBWW1GamIyNEFkMmx1YXlCM2FXNXJBQT09CiAnJycKIAorIyBUaGlzIGRhdGEgY29udGFpbnMgYW4gaW52YWxpZCBtYWpvciB2ZXJzaW9uIG51bWJlciAoNSkKKyMgQW4gdW5leHBlY3RlZCBtYWpvciB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvciB3aGVuCisjIHBhcnNpbmcgYSAubW8gZmlsZQorCitHTlVfTU9fREFUQV9CQURfTUFKT1JfVkVSU0lPTiA9IGInJydcCiszaElFbFFBQUJRQUdBQUFBSEFBQUFFd0FBQUFMQUFBQWZBQUFBQUFBQUFDb0FBQUFGUUFBQUtrQUFBQWpBQUFBdndBQUFLRUFBQURqCitBQUFBQndBQUFJVUJBQUFMQUFBQWpRRUFBRVVCQUFDWkFRQUFGZ0FBQU44Q0FBQWVBQUFBOWdJQUFLRUFBQUFWQXdBQUJRQUFBTGNECitBQUFKQUFBQXZRTUFBQUVBQUFBREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUJRQUFBQVlBQUFBQ0FBQUFBRkpoCitlVzF2Ym1RZ1RIVjRkWEo1SUZsaFkyZ3RkQUJVYUdWeVpTQnBjeUFsY3lCbWFXeGxBRlJvWlhKbElHRnlaU0FsY3lCbWFXeGxjd0JVCithR2x6SUcxdlpIVnNaU0J3Y205MmFXUmxjeUJwYm5SbGNtNWhkR2x2Ym1Gc2FYcGhkR2x2YmlCaGJtUWdiRzlqWVd4cGVtRjBhVzl1CitDbk4xY0hCdmNuUWdabTl5SUhsdmRYSWdVSGwwYUc5dUlIQnliMmR5WVcxeklHSjVJSEJ5YjNacFpHbHVaeUJoYmlCcGJuUmxjbVpoCitZMlVnZEc4Z2RHaGxJRWRPVlFwblpYUjBaWGgwSUcxbGMzTmhaMlVnWTJGMFlXeHZaeUJzYVdKeVlYSjVMZ0J0ZFd4c2RYTnJBRzUxCitaR2RsSUc1MVpHZGxBRkJ5YjJwbFkzUXRTV1F0Vm1WeWMybHZiam9nTWk0d0NsQlBMVkpsZG1semFXOXVMVVJoZEdVNklESXdNREF0CitNRGd0TWprZ01USTZNVGt0TURRNk1EQUtUR0Z6ZEMxVWNtRnVjMnhoZEc5eU9pQktMaUJFWVhacFpDQkpZc09odzdGbGVpQThhaTFrCitZWFpwWkVCdWIyOXpMbVp5UGdwTVlXNW5kV0ZuWlMxVVpXRnRPaUJZV0NBOGNIbDBhRzl1TFdSbGRrQndlWFJvYjI0dWIzSm5QZ3BOCitTVTFGTFZabGNuTnBiMjQ2SURFdU1BcERiMjUwWlc1MExWUjVjR1U2SUhSbGVIUXZjR3hoYVc0N0lHTm9ZWEp6WlhROWFYTnZMVGc0CitOVGt0TVFwRGIyNTBaVzUwTFZSeVlXNXpabVZ5TFVWdVkyOWthVzVuT2lCdWIyNWxDa2RsYm1WeVlYUmxaQzFDZVRvZ2NIbG5aWFIwCitaWGgwTG5CNUlERXVNUXBRYkhWeVlXd3RSbTl5YlhNNklHNXdiSFZ5WVd4elBUSTdJSEJzZFhKaGJEMXVJVDB4T3dvQVZHaHliMkYwCitkMjlpWW14bGNpQk5ZVzVuY205MlpRQklZWGtnSlhNZ1ptbGphR1Z5YndCSVlYa2dKWE1nWm1samFHVnliM01BUjNWMlppQjZZbkZvCitlWElnWTJWaWFYWnhjbVlnZG1GbmNtVmhibWQyWW1GdWVYWnRibWQyWW1FZ2JtRnhJSGxpY0c1NWRtMXVaM1ppWVFwbWFHTmpZbVZuCitJSE5pWlNCc1ltaGxJRU5zWjNWaVlTQmpaV0owWlc1NlppQnZiQ0JqWldKcGRuRjJZWFFnYm1FZ2RtRm5jbVZ6Ym5CeUlHZGlJR2QxCitjaUJVUVVnS2RISm5aM0pyWnlCNmNtWm1iblJ5SUhCdVoyNTVZblFnZVhadlpXNWxiQzRBWW1GamIyNEFkMmx1YXlCM2FXNXJBQT09CisnJycKKworIyBUaGlzIGRhdGEgY29udGFpbnMgYW4gaW52YWxpZCBtaW5vciB2ZXJzaW9uIG51bWJlciAoNykKKyMgQW4gdW5leHBlY3RlZCBtaW5vciB2ZXJzaW9uIG51bWJlciBvbmx5IGluZGljYXRlcyB0aGF0IHNvbWUgb2YgdGhlIGZpbGUncworIyBjb250ZW50cyBtYXkgbm90IGJlIGFibGUgdG8gYmUgcmVhZC4gSXQgZG9lcyBub3QgaW5kaWNhdGUgYW4gZXJyb3IuCisKK0dOVV9NT19EQVRBX0JBRF9NSU5PUl9WRVJTSU9OID0gYicnJ1wKKzNoSUVsUWNBQUFBR0FBQUFIQUFBQUV3QUFBQUxBQUFBZkFBQUFBQUFBQUNvQUFBQUZRQUFBS2tBQUFBakFBQUF2d0FBQUtFQUFBRGoKK0FBQUFCd0FBQUlVQkFBQUxBQUFBalFFQUFFVUJBQUNaQVFBQUZnQUFBTjhDQUFBZUFBQUE5Z0lBQUtFQUFBQVZBd0FBQlFBQUFMY0QKK0FBQUpBQUFBdlFNQUFBRUFBQUFEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQlFBQUFBWUFBQUFDQUFBQUFGSmgKK2VXMXZibVFnVEhWNGRYSjVJRmxoWTJndGRBQlVhR1Z5WlNCcGN5QWxjeUJtYVd4bEFGUm9aWEpsSUdGeVpTQWxjeUJtYVd4bGN3QlUKK2FHbHpJRzF2WkhWc1pTQndjbTkyYVdSbGN5QnBiblJsY201aGRHbHZibUZzYVhwaGRHbHZiaUJoYm1RZ2JHOWpZV3hwZW1GMGFXOXUKK0NuTjFjSEJ2Y25RZ1ptOXlJSGx2ZFhJZ1VIbDBhRzl1SUhCeWIyZHlZVzF6SUdKNUlIQnliM1pwWkdsdVp5QmhiaUJwYm5SbGNtWmgKK1kyVWdkRzhnZEdobElFZE9WUXBuWlhSMFpYaDBJRzFsYzNOaFoyVWdZMkYwWVd4dlp5QnNhV0p5WVhKNUxnQnRkV3hzZFhOckFHNTEKK1pHZGxJRzUxWkdkbEFGQnliMnBsWTNRdFNXUXRWbVZ5YzJsdmJqb2dNaTR3Q2xCUExWSmxkbWx6YVc5dUxVUmhkR1U2SURJd01EQXQKK01EZ3RNamtnTVRJNk1Ua3RNRFE2TURBS1RHRnpkQzFVY21GdWMyeGhkRzl5T2lCS0xpQkVZWFpwWkNCSllzT2h3N0ZsZWlBOGFpMWsKK1lYWnBaRUJ1YjI5ekxtWnlQZ3BNWVc1bmRXRm5aUzFVWldGdE9pQllXQ0E4Y0hsMGFHOXVMV1JsZGtCd2VYUm9iMjR1YjNKblBncE4KK1NVMUZMVlpsY25OcGIyNDZJREV1TUFwRGIyNTBaVzUwTFZSNWNHVTZJSFJsZUhRdmNHeGhhVzQ3SUdOb1lYSnpaWFE5YVhOdkxUZzQKK05Ua3RNUXBEYjI1MFpXNTBMVlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5PaUJ1YjI1bENrZGxibVZ5WVhSbFpDMUNlVG9nY0hsblpYUjAKK1pYaDBMbkI1SURFdU1RcFFiSFZ5WVd3dFJtOXliWE02SUc1d2JIVnlZV3h6UFRJN0lIQnNkWEpoYkQxdUlUMHhPd29BVkdoeWIyRjAKK2QyOWlZbXhsY2lCTllXNW5jbTkyWlFCSVlYa2dKWE1nWm1samFHVnlid0JJWVhrZ0pYTWdabWxqYUdWeWIzTUFSM1YyWmlCNlluRm8KK2VYSWdZMlZpYVhaeGNtWWdkbUZuY21WaGJtZDJZbUZ1ZVhadGJtZDJZbUVnYm1GeElIbGljRzU1ZG0xdVozWmlZUXBtYUdOalltVm4KK0lITmlaU0JzWW1obElFTnNaM1ZpWVNCalpXSjBaVzU2WmlCdmJDQmpaV0pwZG5GMllYUWdibUVnZG1GbmNtVnpibkJ5SUdkaUlHZDEKK2NpQlVRVWdLZEhKblozSnJaeUI2Y21abWJuUnlJSEJ1WjI1NVluUWdlWFp2Wlc1bGJDNEFZbUZqYjI0QWQybHVheUIzYVc1ckFBPT0KKycnJworCisKIFVNT19EQVRBID0gYicnJ1wKIDNoSUVsUUFBQUFBQ0FBQUFIQUFBQUN3QUFBQUZBQUFBUEFBQUFBQUFBQUJRQUFBQUJBQUFBRkVBQUFBUEFRQUFWZ0FBQUFRQUFBQm0KIEFRQUFBUUFBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBWVdMRG5nQlFjbTlxWldOMExVbGtMVlpsY25OcGIyNDZJREl1TUFwUVR5MVMKQEAgLTU2LDYgKzEwNSw4IEBACiAKIExPQ0FMRURJUiA9IG9zLnBhdGguam9pbigneHgnLCAnTENfTUVTU0FHRVMnKQogTU9GSUxFID0gb3MucGF0aC5qb2luKExPQ0FMRURJUiwgJ2dldHRleHQubW8nKQorTU9GSUxFX0JBRF9NQUpPUl9WRVJTSU9OID0gb3MucGF0aC5qb2luKExPQ0FMRURJUiwgJ2dldHRleHRfYmFkX21ham9yX3ZlcnNpb24ubW8nKQorTU9GSUxFX0JBRF9NSU5PUl9WRVJTSU9OID0gb3MucGF0aC5qb2luKExPQ0FMRURJUiwgJ2dldHRleHRfYmFkX21pbm9yX3ZlcnNpb24ubW8nKQogVU1PRklMRSA9IG9zLnBhdGguam9pbihMT0NBTEVESVIsICd1Z2V0dGV4dC5tbycpCiBNTU9GSUxFID0gb3MucGF0aC5qb2luKExPQ0FMRURJUiwgJ21ldGFkYXRhLm1vJykKIApAQCAtNjYsNiArMTE3LDEwIEBACiAgICAgICAgICAgICBvcy5tYWtlZGlycyhMT0NBTEVESVIpCiAgICAgICAgIHdpdGggb3BlbihNT0ZJTEUsICd3YicpIGFzIGZwOgogICAgICAgICAgICAgZnAud3JpdGUoYmFzZTY0LmRlY29kZWJ5dGVzKEdOVV9NT19EQVRBKSkKKyAgICAgICAgd2l0aCBvcGVuKE1PRklMRV9CQURfTUFKT1JfVkVSU0lPTiwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShiYXNlNjQuZGVjb2RlYnl0ZXMoR05VX01PX0RBVEFfQkFEX01BSk9SX1ZFUlNJT04pKQorICAgICAgICB3aXRoIG9wZW4oTU9GSUxFX0JBRF9NSU5PUl9WRVJTSU9OLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVieXRlcyhHTlVfTU9fREFUQV9CQURfTUlOT1JfVkVSU0lPTikpCiAgICAgICAgIHdpdGggb3BlbihVTU9GSUxFLCAnd2InKSBhcyBmcDoKICAgICAgICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVieXRlcyhVTU9fREFUQSkpCiAgICAgICAgIHdpdGggb3BlbihNTU9GSUxFLCAnd2InKSBhcyBmcDoKQEAgLTE3Miw2ICsyMjcsMjEgQEAKICAgICBkZWYgdGVzdF90ZXh0ZG9tYWluKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldHRleHQudGV4dGRvbWFpbigpLCAnZ2V0dGV4dCcpCiAKKyAgICBkZWYgdGVzdF9iYWRfbWFqb3JfdmVyc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKE1PRklMRV9CQURfTUFKT1JfVkVSU0lPTiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGdldHRleHQuR05VVHJhbnNsYXRpb25zKGZwKQorCisgICAgICAgICAgICBleGNlcHRpb24gPSBjbS5leGNlcHRpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjZXB0aW9uLmVycm5vLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNlcHRpb24uc3RyZXJyb3IsICJCYWQgdmVyc2lvbiBudW1iZXIgNSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y2VwdGlvbi5maWxlbmFtZSwgTU9GSUxFX0JBRF9NQUpPUl9WRVJTSU9OKQorCisgICAgZGVmIHRlc3RfYmFkX21pbm9yX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHdpdGggb3BlbihNT0ZJTEVfQkFEX01JTk9SX1ZFUlNJT04sICdyYicpIGFzIGZwOgorICAgICAgICAgICAgIyBDaGVjayB0aGF0IG5vIGVycm9yIGlzIHRocm93biB3aXRoIGEgYmFkIG1pbm9yIHZlcnNpb24gbnVtYmVyCisgICAgICAgICAgICBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKKwogICAgIGRlZiB0ZXN0X3NvbWVfdHJhbnNsYXRpb25zKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyB0ZXN0IHNvbWUgdHJhbnNsYXRpb25zCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkgYi9MaWIvdGVzdC90ZXN0X2dsb2IucHkKaW5kZXggYTVhYjhkNi4uZGNlNjRmOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQpAQCAtNCw4ICs0LDggQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCBza2lwX3VubGVzc19zeW1saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5fc3ltbGluaywgY3JlYXRlX2VtcHR5X2ZpbGUpCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgc2tpcF91bmxlc3Nfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX3N5bWxpbmssIGNyZWF0ZV9lbXB0eV9maWxlLCBjaGFuZ2VfY3dkKQogCiAKIGNsYXNzIEdsb2JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMyw2ICsxMyw5IEBACiAgICAgZGVmIG5vcm0oc2VsZiwgKnBhcnRzKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgKnBhcnRzKSkKIAorICAgIGRlZiBqb2lucyhzZWxmLCAqdHVwbGVzKToKKyAgICAgICAgcmV0dXJuIFtvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAqcGFydHMpIGZvciBwYXJ0cyBpbiB0dXBsZXNdCisKICAgICBkZWYgbWt0ZW1wKHNlbGYsICpwYXJ0cyk6CiAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5ub3JtKCpwYXJ0cykKICAgICAgICAgYmFzZSwgZmlsZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCkBAIC0yOCw2ICszMSw3IEBACiAgICAgICAgIHNlbGYubWt0ZW1wKCcuYmInLCAnSCcpCiAgICAgICAgIHNlbGYubWt0ZW1wKCdhYWEnLCAnenp6RicpCiAgICAgICAgIHNlbGYubWt0ZW1wKCdaWlonKQorICAgICAgICBzZWxmLm1rdGVtcCgnRUYnKQogICAgICAgICBzZWxmLm1rdGVtcCgnYScsICdiY2QnLCAnRUYnKQogICAgICAgICBzZWxmLm1rdGVtcCgnYScsICdiY2QnLCAnZWZnJywgJ2hhJykKICAgICAgICAgaWYgY2FuX3N5bWxpbmsoKToKQEAgLTM4LDE3ICs0MiwxNyBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRlbXBkaXIpCiAKLSAgICBkZWYgZ2xvYihzZWxmLCAqcGFydHMpOgorICAgIGRlZiBnbG9iKHNlbGYsICpwYXJ0cywgKiprd2FyZ3MpOgogICAgICAgICBpZiBsZW4ocGFydHMpID09IDE6CiAgICAgICAgICAgICBwYXR0ZXJuID0gcGFydHNbMF0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBhdHRlcm4gPSBvcy5wYXRoLmpvaW4oKnBhcnRzKQogICAgICAgICBwID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgcGF0dGVybikKLSAgICAgICAgcmVzID0gZ2xvYi5nbG9iKHApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChnbG9iLmlnbG9iKHApKSwgcmVzKQorICAgICAgICByZXMgPSBnbG9iLmdsb2IocCwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChnbG9iLmlnbG9iKHAsICoqa3dhcmdzKSksIHJlcykKICAgICAgICAgYnJlcyA9IFtvcy5mc2VuY29kZSh4KSBmb3IgeCBpbiByZXNdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYi5nbG9iKG9zLmZzZW5jb2RlKHApKSwgYnJlcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGdsb2IuaWdsb2Iob3MuZnNlbmNvZGUocCkpKSwgYnJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iLmdsb2Iob3MuZnNlbmNvZGUocCksICoqa3dhcmdzKSwgYnJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGdsb2IuaWdsb2Iob3MuZnNlbmNvZGUocCksICoqa3dhcmdzKSksIGJyZXMpCiAgICAgICAgIHJldHVybiByZXMKIAogICAgIGRlZiBhc3NlcnRTZXF1ZW5jZXNFcXVhbF9ub29yZGVyKHNlbGYsIGwxLCBsMik6CkBAIC0xOTIsOSArMTk2LDEyMiBAQAogICAgICAgICBjaGVjaygnLy8/L2M6Lz8nLCAnLy8/L2M6L1s/XScpCiAgICAgICAgIGNoZWNrKCcvLyovKi8qJywgJy8vKi8qL1sqXScpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoR2xvYlRlc3RzKQorICAgIGRlZiByZ2xvYihzZWxmLCAqcGFydHMsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2xvYigqcGFydHMsIHJlY3Vyc2l2ZT1UcnVlLCAqKmt3YXJncykKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9nbG9iKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0U2VxdWVuY2VzRXF1YWxfbm9vcmRlcgorICAgICAgICBmdWxsID0gWygnRUYnLCksICgnWlpaJywpLAorICAgICAgICAgICAgICAgICgnYScsKSwgKCdhJywgJ0QnKSwKKyAgICAgICAgICAgICAgICAoJ2EnLCAnYmNkJyksCisgICAgICAgICAgICAgICAgKCdhJywgJ2JjZCcsICdFRicpLAorICAgICAgICAgICAgICAgICgnYScsICdiY2QnLCAnZWZnJyksCisgICAgICAgICAgICAgICAgKCdhJywgJ2JjZCcsICdlZmcnLCAnaGEnKSwKKyAgICAgICAgICAgICAgICAoJ2FhYScsKSwgKCdhYWEnLCAnenp6RicpLAorICAgICAgICAgICAgICAgICgnYWFiJywpLCAoJ2FhYicsICdGJyksCisgICAgICAgICAgICAgICBdCisgICAgICAgIGlmIGNhbl9zeW1saW5rKCk6CisgICAgICAgICAgICBmdWxsICs9IFsoJ3N5bTEnLCksICgnc3ltMicsKSwKKyAgICAgICAgICAgICAgICAgICAgICgnc3ltMycsKSwKKyAgICAgICAgICAgICAgICAgICAgICgnc3ltMycsICdFRicpLAorICAgICAgICAgICAgICAgICAgICAgKCdzeW0zJywgJ2VmZycpLAorICAgICAgICAgICAgICAgICAgICAgKCdzeW0zJywgJ2VmZycsICdoYScpLAorICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIGVxKHNlbGYucmdsb2IoJyoqJyksIHNlbGYuam9pbnMoKCcnLCksICpmdWxsKSkKKyAgICAgICAgZXEoc2VsZi5yZ2xvYihvcy5jdXJkaXIsICcqKicpLAorICAgICAgICAgICAgc2VsZi5qb2lucygob3MuY3VyZGlyLCAnJyksICooKG9zLmN1cmRpciwpICsgaSBmb3IgaSBpbiBmdWxsKSkpCisgICAgICAgIGRpcnMgPSBbKCdhJywgJycpLCAoJ2EnLCAnYmNkJywgJycpLCAoJ2EnLCAnYmNkJywgJ2VmZycsICcnKSwKKyAgICAgICAgICAgICAgICAoJ2FhYScsICcnKSwgKCdhYWInLCAnJyldCisgICAgICAgIGlmIGNhbl9zeW1saW5rKCk6CisgICAgICAgICAgICBkaXJzICs9IFsoJ3N5bTMnLCAnJyksICgnc3ltMycsICdlZmcnLCAnJyldCisgICAgICAgIGVxKHNlbGYucmdsb2IoJyoqJywgJycpLCBzZWxmLmpvaW5zKCgnJywpLCAqZGlycykpCisKKyAgICAgICAgZXEoc2VsZi5yZ2xvYignYScsICcqKicpLCBzZWxmLmpvaW5zKAorICAgICAgICAgICAgKCdhJywgJycpLCAoJ2EnLCAnRCcpLCAoJ2EnLCAnYmNkJyksICgnYScsICdiY2QnLCAnRUYnKSwKKyAgICAgICAgICAgICgnYScsICdiY2QnLCAnZWZnJyksICgnYScsICdiY2QnLCAnZWZnJywgJ2hhJykpKQorICAgICAgICBlcShzZWxmLnJnbG9iKCdhKionKSwgc2VsZi5qb2lucygoJ2EnLCksICgnYWFhJywpLCAoJ2FhYicsKSkpCisgICAgICAgIGV4cGVjdCA9IFsoJ2EnLCAnYmNkJywgJ0VGJyksICgnRUYnLCldCisgICAgICAgIGlmIGNhbl9zeW1saW5rKCk6CisgICAgICAgICAgICBleHBlY3QgKz0gWygnc3ltMycsICdFRicpXQorICAgICAgICBlcShzZWxmLnJnbG9iKCcqKicsICdFRicpLCBzZWxmLmpvaW5zKCpleHBlY3QpKQorICAgICAgICBleHBlY3QgPSBbKCdhJywgJ2JjZCcsICdFRicpLCAoJ2FhYScsICd6enpGJyksICgnYWFiJywgJ0YnKSwgKCdFRicsKV0KKyAgICAgICAgaWYgY2FuX3N5bWxpbmsoKToKKyAgICAgICAgICAgIGV4cGVjdCArPSBbKCdzeW0zJywgJ0VGJyldCisgICAgICAgIGVxKHNlbGYucmdsb2IoJyoqJywgJypGJyksIHNlbGYuam9pbnMoKmV4cGVjdCkpCisgICAgICAgIGVxKHNlbGYucmdsb2IoJyoqJywgJypGJywgJycpLCBbXSkKKyAgICAgICAgZXEoc2VsZi5yZ2xvYignKionLCAnYmNkJywgJyonKSwgc2VsZi5qb2lucygKKyAgICAgICAgICAgICgnYScsICdiY2QnLCAnRUYnKSwgKCdhJywgJ2JjZCcsICdlZmcnKSkpCisgICAgICAgIGVxKHNlbGYucmdsb2IoJ2EnLCAnKionLCAnYmNkJyksIHNlbGYuam9pbnMoKCdhJywgJ2JjZCcpKSkKKworICAgICAgICB3aXRoIGNoYW5nZV9jd2Qoc2VsZi50ZW1wZGlyKToKKyAgICAgICAgICAgIGpvaW4gPSBvcy5wYXRoLmpvaW4KKyAgICAgICAgICAgIGVxKGdsb2IuZ2xvYignKionLCByZWN1cnNpdmU9VHJ1ZSksIFtqb2luKCppKSBmb3IgaSBpbiBmdWxsXSkKKyAgICAgICAgICAgIGVxKGdsb2IuZ2xvYihqb2luKCcqKicsICcnKSwgcmVjdXJzaXZlPVRydWUpLAorICAgICAgICAgICAgICAgIFtqb2luKCppKSBmb3IgaSBpbiBkaXJzXSkKKyAgICAgICAgICAgIGVxKGdsb2IuZ2xvYihqb2luKCcqKicsICcqJyksIHJlY3Vyc2l2ZT1UcnVlKSwKKyAgICAgICAgICAgICAgICBbam9pbigqaSkgZm9yIGkgaW4gZnVsbF0pCisgICAgICAgICAgICBlcShnbG9iLmdsb2Ioam9pbihvcy5jdXJkaXIsICcqKicpLCByZWN1cnNpdmU9VHJ1ZSksCisgICAgICAgICAgICAgICAgW2pvaW4ob3MuY3VyZGlyLCAnJyldICsgW2pvaW4ob3MuY3VyZGlyLCAqaSkgZm9yIGkgaW4gZnVsbF0pCisgICAgICAgICAgICBlcShnbG9iLmdsb2Ioam9pbihvcy5jdXJkaXIsICcqKicsICcnKSwgcmVjdXJzaXZlPVRydWUpLAorICAgICAgICAgICAgICAgIFtqb2luKG9zLmN1cmRpciwgJycpXSArIFtqb2luKG9zLmN1cmRpciwgKmkpIGZvciBpIGluIGRpcnNdKQorICAgICAgICAgICAgZXEoZ2xvYi5nbG9iKGpvaW4ob3MuY3VyZGlyLCAnKionLCAnKicpLCByZWN1cnNpdmU9VHJ1ZSksCisgICAgICAgICAgICAgICAgW2pvaW4ob3MuY3VyZGlyLCAqaSkgZm9yIGkgaW4gZnVsbF0pCisgICAgICAgICAgICBlcShnbG9iLmdsb2Ioam9pbignKionLCd6eipGJyksIHJlY3Vyc2l2ZT1UcnVlKSwKKyAgICAgICAgICAgICAgICBbam9pbignYWFhJywgJ3p6ekYnKV0pCisgICAgICAgICAgICBlcShnbG9iLmdsb2IoJyoqenoqRicsIHJlY3Vyc2l2ZT1UcnVlKSwgW10pCisgICAgICAgICAgICBleHBlY3QgPSBbam9pbignYScsICdiY2QnLCAnRUYnKSwgJ0VGJ10KKyAgICAgICAgICAgIGlmIGNhbl9zeW1saW5rKCk6CisgICAgICAgICAgICAgICAgZXhwZWN0ICs9IFtqb2luKCdzeW0zJywgJ0VGJyldCisgICAgICAgICAgICBlcShnbG9iLmdsb2Ioam9pbignKionLCAnRUYnKSwgcmVjdXJzaXZlPVRydWUpLCBleHBlY3QpCisKKworQHNraXBfdW5sZXNzX3N5bWxpbmsKK2NsYXNzIFN5bWxpbmtMb29wR2xvYlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NlbGZsaW5rKHNlbGYpOgorICAgICAgICB0ZW1wZGlyID0gVEVTVEZOICsgIl9kaXIiCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBkaXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaHV0aWwucm10cmVlLCB0ZW1wZGlyKQorICAgICAgICB3aXRoIGNoYW5nZV9jd2QodGVtcGRpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycygnZGlyJykKKyAgICAgICAgICAgIGNyZWF0ZV9lbXB0eV9maWxlKG9zLnBhdGguam9pbignZGlyJywgJ2ZpbGUnKSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsob3MuY3VyZGlyLCBvcy5wYXRoLmpvaW4oJ2RpcicsICdsaW5rJykpCisKKyAgICAgICAgICAgIHJlc3VsdHMgPSBnbG9iLmdsb2IoJyoqJywgcmVjdXJzaXZlPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzKSwgbGVuKHNldChyZXN1bHRzKSkpCisgICAgICAgICAgICByZXN1bHRzID0gc2V0KHJlc3VsdHMpCisgICAgICAgICAgICBkZXB0aCA9IDAKKyAgICAgICAgICAgIHdoaWxlIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigqKFsnZGlyJ10gKyBbJ2xpbmsnXSAqIGRlcHRoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgsIHJlc3VsdHMpCisgICAgICAgICAgICAgICAgcmVzdWx0cy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0czoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdmaWxlJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgsIHJlc3VsdHMpCisgICAgICAgICAgICAgICAgcmVzdWx0cy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgICAgICBkZXB0aCArPSAxCisKKyAgICAgICAgICAgIHJlc3VsdHMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKCcqKicsICdmaWxlJyksIHJlY3Vyc2l2ZT1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0cyksIGxlbihzZXQocmVzdWx0cykpKQorICAgICAgICAgICAgcmVzdWx0cyA9IHNldChyZXN1bHRzKQorICAgICAgICAgICAgZGVwdGggPSAwCisgICAgICAgICAgICB3aGlsZSByZXN1bHRzOgorICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oKihbJ2RpciddICsgWydsaW5rJ10gKiBkZXB0aCArIFsnZmlsZSddKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgsIHJlc3VsdHMpCisgICAgICAgICAgICAgICAgcmVzdWx0cy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgICAgICBkZXB0aCArPSAxCisKKyAgICAgICAgICAgIHJlc3VsdHMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKCcqKicsICcnKSwgcmVjdXJzaXZlPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzKSwgbGVuKHNldChyZXN1bHRzKSkpCisgICAgICAgICAgICByZXN1bHRzID0gc2V0KHJlc3VsdHMpCisgICAgICAgICAgICBkZXB0aCA9IDAKKyAgICAgICAgICAgIHdoaWxlIHJlc3VsdHM6CisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigqKFsnZGlyJ10gKyBbJ2xpbmsnXSAqIGRlcHRoICsgWycnXSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXRoLCByZXN1bHRzKQorICAgICAgICAgICAgICAgIHJlc3VsdHMucmVtb3ZlKHBhdGgpCisgICAgICAgICAgICAgICAgZGVwdGggKz0gMQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weSBiL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQppbmRleCAyNTA0NTIzLi4xNTRlM2I2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CkBAIC0xLDcgKzEsOCBAQAogIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCAxLCBncmFtbWFyLgogIyBUaGlzIGp1c3QgdGVzdHMgd2hldGhlciB0aGUgcGFyc2VyIGFjY2VwdHMgdGhlbSBhbGwuCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3N5bnRheF9lcnJvcgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3N5bnRheF9lcnJvcgoraW1wb3J0IGluc3BlY3QKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwogIyB0ZXN0aW5nIGltcG9ydCAqCkBAIC0yMDUsNiArMjA2LDcgQEAKICAgICAgICAgZDAxKDEpCiAgICAgICAgIGQwMSgqKDEsKSkKICAgICAgICAgZDAxKCpbXSBvciBbMl0pCisgICAgICAgIGQwMSgqKCkgb3IgKCksICp7fSBhbmQgKCksICoqKCkgb3Ige30pCiAgICAgICAgIGQwMSgqKnsnYSc6Mn0pCiAgICAgICAgIGQwMSgqKnsnYSc6Mn0gb3Ige30pCiAgICAgICAgIGRlZiBkMTEoYSwgYj0xKTogcGFzcwpAQCAtMjk4LDggKzMwMCwxMiBAQAogICAgICAgICAgICAgcmV0dXJuIGFyZ3MsIGt3YXJncwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMSwgeD0yLCAqWzMsIDRdLCB5PTUpLCAoKDEsIDMsIDQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsneCc6MiwgJ3knOjV9KSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICJmKDEsICooMiwzKSwgNCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoMSwgKigyLDMpLCA0KSwgKCgxLCAyLCAzLCA0KSwge30pKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgImYoMSwgeD0yLCAqKDMsNCksIHg9NSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKip7J2VnZ3MnOidzY3JhbWJsZWQnLCAnc3BhbSc6J2ZyaWVkJ30pLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKSwgeydlZ2dzJzonc2NyYW1ibGVkJywgJ3NwYW0nOidmcmllZCd9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKHNwYW09J2ZyaWVkJywgKip7J2VnZ3MnOidzY3JhbWJsZWQnfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgpLCB7J2VnZ3MnOidzY3JhbWJsZWQnLCAnc3BhbSc6J2ZyaWVkJ30pKQogCiAgICAgICAgICMgYXJndW1lbnQgYW5ub3RhdGlvbiB0ZXN0cwogICAgICAgICBkZWYgZih4KSAtPiBsaXN0OiBwYXNzCkBAIC01MzAsNyArNTM2LDggQEAKICAgICAgICAgIyBOb3QgYWxsb3dlZCBhdCBjbGFzcyBzY29wZQogICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImNsYXNzIGZvbzp5aWVsZCAxIikKICAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJjbGFzcyBmb286eWllbGQgZnJvbSAoKSIpCi0KKyAgICAgICAgIyBDaGVjayBhbm5vdGF0aW9uIHJlZmxlYWsgb24gU3ludGF4RXJyb3IKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJkZWYgZyhhOih5aWVsZCkpOiBwYXNzIikKIAogICAgIGRlZiB0ZXN0X3JhaXNlKHNlbGYpOgogICAgICAgICAjICdyYWlzZScgdGVzdCBbJywnIHRlc3RdCkBAIC05ODcsNyArOTk0LDcgQEAKICAgICAgICAgIyBUZXN0IGlmZWxzZSBleHByZXNzaW9ucyBpbiB2YXJpb3VzIGNhc2VzCiAgICAgICAgIGRlZiBfY2hlY2tldmFsKG1zZywgcmV0KToKICAgICAgICAgICAgICJoZWxwZXIgdG8gY2hlY2sgdGhhdCBldmFsdWF0aW9uIG9mIGV4cHJlc3Npb25zIGlzIGRvbmUgY29ycmVjdGx5IgotICAgICAgICAgICAgcHJpbnQoeCkKKyAgICAgICAgICAgIHByaW50KG1zZykKICAgICAgICAgICAgIHJldHVybiByZXQKIAogICAgICAgICAjIHRoZSBuZXh0IGxpbmUgaXMgbm90IGFsbG93ZWQgYW55bW9yZQpAQCAtMTAxOCw5ICsxMDI1LDEwMyBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChGYWxzZSBpcyAyKSBpcyAzKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEZhbHNlIGlzIDIgaXMgMykKIAorICAgIGRlZiB0ZXN0X21hdHJpeF9tdWwoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgYSBjb21wcmVoZW5zaXZlIHRlc3QsIHJhdGhlciBqdXN0IHRvIGJlIGZldworICAgICAgICAjIHNhbXBsZXMgb2YgdGhlIEAgb3BlcmF0b3IgaW4gdGVzdF9ncmFtbWFyLnB5LgorICAgICAgICBjbGFzcyBNOgorICAgICAgICAgICAgZGVmIF9fbWF0bXVsX18oc2VsZiwgbyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQKKyAgICAgICAgICAgIGRlZiBfX2ltYXRtdWxfXyhzZWxmLCBvKToKKyAgICAgICAgICAgICAgICBzZWxmLm90aGVyID0gbworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIG0gPSBNKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtIEAgbSwgNCkKKyAgICAgICAgbSBAPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ub3RoZXIsIDQyKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRva2VuVGVzdHMsIEdyYW1tYXJUZXN0cykKKyAgICBkZWYgdGVzdF9hc3luY19hd2FpdChzZWxmKToKKyAgICAgICAgYXN5bmMgPSAxCisgICAgICAgIGF3YWl0ID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jLCAxKQorCisgICAgICAgIGRlZiBhc3luYygpOgorICAgICAgICAgICAgbm9ubG9jYWwgYXdhaXQKKyAgICAgICAgICAgIGF3YWl0ID0gMTAKKyAgICAgICAgYXN5bmMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF3YWl0LCAxMCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJvb2woYXN5bmMuX19jb2RlX18uY29fZmxhZ3MgJiBpbnNwZWN0LkNPX0NPUk9VVElORSkpCisKKyAgICAgICAgYXN5bmMgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGRlZiBzdW0oKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiAxOgorICAgICAgICAgICAgICAgIGF3YWl0IHNvbWVvYmooKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5fX25hbWVfXywgJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbCh0ZXN0Ll9fY29kZV9fLmNvX2ZsYWdzICYgaW5zcGVjdC5DT19DT1JPVVRJTkUpKQorCisgICAgICAgIGRlZiBkZWNvcmF0b3IoZnVuYyk6CisgICAgICAgICAgICBzZXRhdHRyKGZ1bmMsICdfbWFya2VkJywgVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBmdW5jCisKKyAgICAgICAgQGRlY29yYXRvcgorICAgICAgICBhc3luYyBkZWYgdGVzdDIoKToKKyAgICAgICAgICAgIHJldHVybiAyMgorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdDIuX21hcmtlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Mi5fX25hbWVfXywgJ3Rlc3QyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvb2wodGVzdDIuX19jb2RlX18uY29fZmxhZ3MgJiBpbnNwZWN0LkNPX0NPUk9VVElORSkpCisKKyAgICBkZWYgdGVzdF9hc3luY19mb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIERvbmUoRXhjZXB0aW9uKTogcGFzcworCisgICAgICAgIGNsYXNzIEFJdGVyOgorICAgICAgICAgICAgZGVmIF9fYWl0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgYXN5bmMgZGVmIF9fYW5leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wQXN5bmNJdGVyYXRpb24KKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6CisgICAgICAgICAgICBhc3luYyBmb3IgaSBpbiBBSXRlcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGFzeW5jIGZvciBpLCBqIGluIEFJdGVyKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXN5bmMgZm9yIGkgaW4gQUl0ZXIoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJhaXNlIERvbmUKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKERvbmUpOgorICAgICAgICAgICAgZm9vKCkuc2VuZChOb25lKQorCisgICAgZGVmIHRlc3RfYXN5bmNfd2l0aChzZWxmKToKKyAgICAgICAgY2xhc3MgRG9uZShFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgbWFuYWdlcjoKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FlbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoMSwgMikKKyAgICAgICAgICAgIGFzeW5jIGRlZiBfX2FleGl0X18oc2VsZiwgKmV4Yyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgYXN5bmMgZGVmIGZvbygpOgorICAgICAgICAgICAgYXN5bmMgd2l0aCBtYW5hZ2VyKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXN5bmMgd2l0aCBtYW5hZ2VyKCkgYXMgeDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhc3luYyB3aXRoIG1hbmFnZXIoKSBhcyAoeCwgeSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXN5bmMgd2l0aCBtYW5hZ2VyKCksIG1hbmFnZXIoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhc3luYyB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCkgYXMgeToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhc3luYyB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmFpc2UgRG9uZQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRG9uZSk6CisgICAgICAgICAgICBmb28oKS5zZW5kKE5vbmUpCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ncnAucHkgYi9MaWIvdGVzdC90ZXN0X2dycC5weQppbmRleCA3NDkwNDFjLi4yNzJiMDg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dycC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dycC5weQpAQCAtOTIsOCArOTIsNSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBncnAuZ2V0Z3JnaWQsIGZha2VnaWQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChHcm91cERhdGFiYXNlVGVzdENhc2UpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weSBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQppbmRleCBiNDE3MDQ0Li4zYzUxNjczIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nemlwLnB5CkBAIC0zLDkgKzMsMTEgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBiaWdtZW10ZXN0LCBfNEcKIGltcG9ydCBvcwogaW1wb3J0IGlvCiBpbXBvcnQgc3RydWN0CitpbXBvcnQgYXJyYXkKIGd6aXAgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2d6aXAnKQogCiBkYXRhMSA9IGIiIiIgIGludCBsZW5ndGg9REVGQVVMVEFMTE9DLCBlcnIgPSBaX09LOwpAQCAtNzcsMTUgKzc5LDE4IEBACiAgICAgZGVmIHRlc3Rfd3JpdGVfYnl0ZWFycmF5KHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlX2FuZF9yZWFkX2JhY2soYnl0ZWFycmF5KGRhdGExICogNTApKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfYXJyYXkoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfYW5kX3JlYWRfYmFjayhhcnJheS5hcnJheSgnSScsIGRhdGExICogNDApKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfaW5jb21wYXRpYmxlX3R5cGUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IG5vbi1ieXRlcy1saWtlIHR5cGVzIHJhaXNlIFR5cGVFcnJvci4KICAgICAgICAgIyBJc3N1ZSAjMjE1NjA6IGF0dGVtcHRzIHRvIHdyaXRlIGluY29tcGF0aWJsZSB0eXBlcwogICAgICAgICAjIHNob3VsZCBub3QgYWZmZWN0IHRoZSBzdGF0ZSBvZiB0aGUgZmlsZW9iamVjdAogICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgICAgICBmLndyaXRlKCdhJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCcnKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgICAgIGYud3JpdGUoWzFdKQorICAgICAgICAgICAgICAgIGYud3JpdGUoW10pCiAgICAgICAgICAgICBmLndyaXRlKGRhdGExKQogICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGExKQpAQCAtMTEyLDYgKzExNywxNCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIG5yZWFkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKGJsb2NrcyksIGRhdGExICogNTApCiAKKyAgICBAYmlnbWVtdGVzdChzaXplPV80RywgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfcmVhZF9sYXJnZShzZWxmLCBzaXplKToKKyAgICAgICAgIyBSZWFkIGNodW5rIHNpemUgb3ZlciBVSU5UX01BWCBzaG91bGQgYmUgc3VwcG9ydGVkLCBkZXNwaXRlIHpsaWIncworICAgICAgICAjIGxpbWl0YXRpb24gcGVyIGxvdy1sZXZlbCBjYWxsCisgICAgICAgIGNvbXByZXNzZWQgPSBnemlwLmNvbXByZXNzKGRhdGExLCBjb21wcmVzc2xldmVsPTEpCisgICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKGZpbGVvYmo9aW8uQnl0ZXNJTyhjb21wcmVzc2VkKSwgbW9kZT0ncmInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChzaXplKSwgZGF0YTEpCisKICAgICBkZWYgdGVzdF9pb19vbl9jbG9zZWRfb2JqZWN0KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBJL08gb3BlcmF0aW9ucyBvbiBjbG9zZWQgR3ppcEZpbGUgb2JqZWN0cyByYWlzZSBhCiAgICAgICAgICMgVmFsdWVFcnJvciwganVzdCBsaWtlIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBvbiBmaWxlIG9iamVjdHMuCkBAIC0xMTksNyArMTMyLDEwIEBACiAgICAgICAgICMgV3JpdGUgdG8gYSBmaWxlLCBvcGVuIGl0IGZvciByZWFkaW5nLCB0aGVuIGNsb3NlIGl0LgogICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQogICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpCisgICAgICAgIGZpbGVvYmogPSBmLmZpbGVvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlb2JqLmNsb3NlZCkKICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlb2JqLmNsb3NlZCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGYucmVhZCgxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgpAQCAtMTI4LDcgKzE0NCwxMCBAQAogICAgICAgICAgICAgZi50ZWxsKCkKICAgICAgICAgIyBPcGVuIHRoZSBmaWxlIGZvciB3cml0aW5nLCB0aGVuIGNsb3NlIGl0LgogICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycpCisgICAgICAgIGZpbGVvYmogPSBmLmZpbGVvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlb2JqLmNsb3NlZCkKICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlb2JqLmNsb3NlZCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGYud3JpdGUoYicnKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgpAQCAtMjY3LDkgKzI4NiwxMCBAQAogICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnLCBtdGltZSA9IG10aW1lKSBhcyBmV3JpdGU6CiAgICAgICAgICAgICBmV3JpdGUud3JpdGUoZGF0YTEpCiAgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBmUmVhZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZSZWFkLCAnbXRpbWUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZSZWFkLm10aW1lKQogICAgICAgICAgICAgZGF0YVJlYWQgPSBmUmVhZC5yZWFkKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YVJlYWQsIGRhdGExKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZlJlYWQsICdtdGltZScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmUmVhZC5tdGltZSwgbXRpbWUpCiAKICAgICBkZWYgdGVzdF9tZXRhZGF0YShzZWxmKToKQEAgLTQxMiw2ICs0MzIsMTggQEAKICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHN0cl9maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGExICogNTApCiAKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzX2xpbWl0ZWQoc2VsZik6CisgICAgICAgICIiIkRlY29tcHJlc3NlZCBkYXRhIGJ1ZmZlcmluZyBzaG91bGQgYmUgbGltaXRlZCIiIgorICAgICAgICBib21iID0gZ3ppcC5jb21wcmVzcyhieXRlcyhpbnQoMmU2KSksIGNvbXByZXNzbGV2ZWw9OSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGxlbihib21iKSwgaW8uREVGQVVMVF9CVUZGRVJfU0laRSkKKworICAgICAgICBib21iID0gaW8uQnl0ZXNJTyhib21iKQorICAgICAgICBkZWNvbXAgPSBnemlwLkd6aXBGaWxlKGZpbGVvYmo9Ym9tYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcygxKSwgZGVjb21wLnJlYWQoMSkpCisgICAgICAgIG1heF9kZWNvbXAgPSAxICsgaW8uREVGQVVMVF9CVUZGRVJfU0laRQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChkZWNvbXAuX2J1ZmZlci5yYXcudGVsbCgpLCBtYXhfZGVjb21wLAorICAgICAgICAgICAgIkV4Y2Vzc2l2ZSBhbW91bnQgb2YgZGF0YSB3YXMgZGVjb21wcmVzc2VkIikKKwogICAgICMgVGVzdGluZyBjb21wcmVzcy9kZWNvbXByZXNzIHNob3J0Y3V0IGZ1bmN0aW9ucwogCiAgICAgZGVmIHRlc3RfY29tcHJlc3Moc2VsZik6CkBAIC00NTksNyArNDkxLDcgQEAKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoZGF0YTEpCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmLmZpbGVvYmoucHJlcGVuZCgpCisgICAgICAgICAgICBmLl9idWZmZXIucmF3Ll9mcC5wcmVwZW5kKCkKIAogY2xhc3MgVGVzdE9wZW4oQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0X2JpbmFyeV9tb2RlcyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weSBiL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQppbmRleCBmNjQ3YzZmLi5hYTRlZmJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2hhc2gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CkBAIC03LDcgKzcsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCitmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBIYXNoYWJsZQogCiBJU182NEJJVCA9IHN5cy5tYXhzaXplID4gMioqMzIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQppbmRleCA4NWVjMmY5Li5jOWIxMTNlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CkBAIC00NDksNyArNDQ5LDcgQEAKIAogICAgIHBia2RmMl9yZXN1bHRzID0gewogICAgICAgICAic2hhMSI6IFsKLSAgICAgICAgICAgICMgb2ZmaWNhbCB0ZXN0IHZlY3RvcnMgZnJvbSBSRkMgNjA3MAorICAgICAgICAgICAgIyBvZmZpY2lhbCB0ZXN0IHZlY3RvcnMgZnJvbSBSRkMgNjA3MAogICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzBjNjBjODBmOTYxZjBlNzFmM2E5YjUyNGFmNjAxMjA2MmZlMDM3YTYnKSwgTm9uZSksCiAgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZWE2YzAxNGRjNzJkNmY4Y2NkMWVkOTJhY2UxZDQxZjBkOGRlODk1NycpLCBOb25lKSwKICAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc0YjAwNzkwMWI3NjU0ODlhYmVhZDQ5ZDkyNmY3MjFkMDY1YTQyOWMxJyksIE5vbmUpLApAQCAtNTEzLDYgKzUxMyw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxLCAtMSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd1bnN1cHBvcnRlZCBoYXNoIHR5cGUnKToKICAgICAgICAgICAgIHBia2RmMigndW5rbm93bicsIGIncGFzcycsIGInc2FsdCcsIDEpCisgICAgICAgIG91dCA9IHBia2RmMihoYXNoX25hbWU9J3NoYTEnLCBwYXNzd29yZD1iJ3Bhc3N3b3JkJywgc2FsdD1iJ3NhbHQnLAorICAgICAgICAgICAgaXRlcmF0aW9ucz0xLCBka2xlbj1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgc2VsZi5wYmtkZjJfcmVzdWx0c1snc2hhMSddWzBdWzBdKQogCiAgICAgZGVmIHRlc3RfcGJrZGYyX2htYWNfcHkoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3RfcGJrZGYyX2htYWMocHlfaGFzaGxpYi5wYmtkZjJfaG1hYykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkgYi9MaWIvdGVzdC90ZXN0X2hlYXBxLnB5CmluZGV4IGI1YTJmZDguLmI3ZTgyNTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oZWFwcS5weQpAQCAtNiwxNCArNiwxNSBAQAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlLCBza2lwVW5sZXNzCitmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCiAKIHB5X2hlYXBxID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdoZWFwcScsIGJsb2NrZWQ9WydfaGVhcHEnXSkKIGNfaGVhcHEgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2hlYXBxJywgZnJlc2g9WydfaGVhcHEnXSkKIAogIyBfaGVhcHEubmxhcmdlc3QvbnNtYWxsZXN0IGFyZSBzYXZlZCBpbiBoZWFwcS5fbmxhcmdlc3QvX3NtYWxsZXN0IHdoZW4KICMgX2hlYXBxIGlzIGltcG9ydGVkLCBzbyBjaGVjayB0aGVtIHRoZXJlCi1mdW5jX25hbWVzID0gWydoZWFwaWZ5JywgJ2hlYXBwb3AnLCAnaGVhcHB1c2gnLCAnaGVhcHB1c2hwb3AnLAotICAgICAgICAgICAgICAnaGVhcHJlcGxhY2UnLCAnX25sYXJnZXN0JywgJ19uc21hbGxlc3QnXQorZnVuY19uYW1lcyA9IFsnaGVhcGlmeScsICdoZWFwcG9wJywgJ2hlYXBwdXNoJywgJ2hlYXBwdXNocG9wJywgJ2hlYXByZXBsYWNlJywKKyAgICAgICAgICAgICAgJ19oZWFwcG9wX21heCcsICdfaGVhcHJlcGxhY2VfbWF4JywgJ19oZWFwaWZ5X21heCddCiAKIGNsYXNzIFRlc3RNb2R1bGVzKFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9weV9mdW5jdGlvbnMoc2VsZik6CkBAIC02NCw3ICs2NSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhlYXBbcGFyZW50cG9zXSA8PSBpdGVtKQogCiAgICAgZGVmIHRlc3RfaGVhcGlmeShzZWxmKToKLSAgICAgICAgZm9yIHNpemUgaW4gcmFuZ2UoMzApOgorICAgICAgICBmb3Igc2l6ZSBpbiBsaXN0KHJhbmdlKDMwKSkgKyBbMjAwMDBdOgogICAgICAgICAgICAgaGVhcCA9IFtyYW5kb20ucmFuZG9tKCkgZm9yIGR1bW15IGluIHJhbmdlKHNpemUpXQogICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcGlmeShoZWFwKQogICAgICAgICAgICAgc2VsZi5jaGVja19pbnZhcmlhbnQoaGVhcCkKQEAgLTE1MiwxMSArMTUzLDIxIEBACiAKICAgICBkZWYgdGVzdF9tZXJnZShzZWxmKToKICAgICAgICAgaW5wdXRzID0gW10KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UocmFuZG9tLnJhbmRyYW5nZSg1KSk6Ci0gICAgICAgICAgICByb3cgPSBzb3J0ZWQocmFuZG9tLnJhbmRyYW5nZSgxMDAwKSBmb3IgaiBpbiByYW5nZShyYW5kb20ucmFuZHJhbmdlKDEwKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKHJhbmRvbS5yYW5kcmFuZ2UoMjUpKToKKyAgICAgICAgICAgIHJvdyA9IFtdCisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShyYW5kb20ucmFuZHJhbmdlKDEwMCkpOgorICAgICAgICAgICAgICAgIHR1cCA9IHJhbmRvbS5jaG9pY2UoJ0FCQycpLCByYW5kb20ucmFuZHJhbmdlKC01MDAsIDUwMCkKKyAgICAgICAgICAgICAgICByb3cuYXBwZW5kKHR1cCkKICAgICAgICAgICAgIGlucHV0cy5hcHBlbmQocm93KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjaGFpbigqaW5wdXRzKSksIGxpc3Qoc2VsZi5tb2R1bGUubWVyZ2UoKmlucHV0cykpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2VsZi5tb2R1bGUubWVyZ2UoKSksIFtdKQorCisgICAgICAgIGZvciBrZXkgaW4gW05vbmUsIGl0ZW1nZXR0ZXIoMCksIGl0ZW1nZXR0ZXIoMSksIGl0ZW1nZXR0ZXIoMSwgMCldOgorICAgICAgICAgICAgZm9yIHJldmVyc2UgaW4gW0ZhbHNlLCBUcnVlXToKKyAgICAgICAgICAgICAgICBzZXFzID0gW10KKyAgICAgICAgICAgICAgICBmb3Igc2VxIGluIGlucHV0czoKKyAgICAgICAgICAgICAgICAgICAgc2Vxcy5hcHBlbmQoc29ydGVkKHNlcSwga2V5PWtleSwgcmV2ZXJzZT1yZXZlcnNlKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjaGFpbigqaW5wdXRzKSwga2V5PWtleSwgcmV2ZXJzZT1yZXZlcnNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qoc2VsZi5tb2R1bGUubWVyZ2UoKnNlcXMsIGtleT1rZXksIHJldmVyc2U9cmV2ZXJzZSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLm1vZHVsZS5tZXJnZSgpKSwgW10pCiAKICAgICBkZWYgdGVzdF9tZXJnZV9kb2VzX25vdF9zdXBwcmVzc19pbmRleF9lcnJvcihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxOTAxODogSGVhcHEubWVyZ2Ugc3VwcHJlc3NlcyBJbmRleEVycm9yIGZyb20gdXNlciBnZW5lcmF0b3IKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weSBiL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQppbmRleCBjZGU1NmZkLi45ODgyNmI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2htYWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CkBAIC00OTMsMTQgKzQ5Myw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaG1hYy5jb21wYXJlX2RpZ2VzdChhLCBiKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIFRlc3RWZWN0b3JzVGVzdENhc2UsCi0gICAgICAgIENvbnN0cnVjdG9yVGVzdENhc2UsCi0gICAgICAgIFNhbml0eVRlc3RDYXNlLAotICAgICAgICBDb3B5VGVzdENhc2UsCi0gICAgICAgIENvbXBhcmVEaWdlc3RUZXN0Q2FzZQotICAgICkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odG1sLnB5IGIvTGliL3Rlc3QvdGVzdF9odG1sLnB5CmluZGV4IGQ2ZjBhZTguLjgzOWUwYTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0bWwucHkKQEAgLTQsNyArNCw2IEBACiAKIGltcG9ydCBodG1sCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogCiBjbGFzcyBIdG1sVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CmluZGV4IDE0NGY4MjAuLjExNDIwYjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKQEAgLTgyLDcgKzgyLDcgQEAKIGNsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAogICAgIGRlZiBfcnVuX2NoZWNrKHNlbGYsIHNvdXJjZSwgZXhwZWN0ZWRfZXZlbnRzLCBjb2xsZWN0b3I9Tm9uZSk6CiAgICAgICAgIGlmIGNvbGxlY3RvciBpcyBOb25lOgpAQCAtMTAyLDIxICsxMDIsOCBAQAogICAgICAgICBzZWxmLl9ydW5fY2hlY2soc291cmNlLCBldmVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudENvbGxlY3RvckV4dHJhKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpKQogCi0gICAgZGVmIF9wYXJzZV9lcnJvcihzZWxmLCBzb3VyY2UpOgotICAgICAgICBkZWYgcGFyc2Uoc291cmNlPXNvdXJjZSk6Ci0gICAgICAgICAgICBwYXJzZXIgPSBzZWxmLmdldF9jb2xsZWN0b3IoKQotICAgICAgICAgICAgcGFyc2VyLmZlZWQoc291cmNlKQotICAgICAgICAgICAgcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhodG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvcik6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgICAgICBwYXJzZSgpCiAKLQotY2xhc3MgSFRNTFBhcnNlclN0cmljdFRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6Ci0KLSAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpdGU9RmFsc2UpOgotICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlLCBjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQorY2xhc3MgSFRNTFBhcnNlclRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CiAKICAgICBkZWYgdGVzdF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX29ubHkoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPD9wcm9jZXNzaW5nIGluc3RydWN0aW9uPiIsIFsKQEAgLTE5OCw5ICsxODUsNiBAQAogICAgICAgICAgICAgKCJkYXRhIiwgInRoaXMgPCB0ZXh0ID4gY29udGFpbnMgPCBiYXJlPnBvaW50eTwgYnJhY2tldHMiKSwKICAgICAgICAgICAgIF0pCiAKLSAgICBkZWYgdGVzdF9pbGxlZ2FsX2RlY2xhcmF0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5fcGFyc2VfZXJyb3IoJzwhc3BhY2VyIHR5cGU9ImJsb2NrIiBoZWlnaHQ9IjI1Ij4nKQotCiAgICAgZGVmIHRlc3Rfc3RhcnR0YWdfZW5kX2JvdW5kYXJ5KHNlbGYpOgogICAgICAgICBzZWxmLl9ydW5fY2hlY2soIiIiPGEgYj0nPCc+IiIiLCBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICI8IildKV0pCiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiIiI8YSBiPSc+Jz4iIiIsIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIj4iKV0pXSkKQEAgLTIzNSwyNSArMjE5LDYgQEAKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPCEtLWFiYy0tIiwgIj4iXSwgb3V0cHV0KQogICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8IS0tYWJjLS0+IiwgIiJdLCBvdXRwdXQpCiAKLSAgICBkZWYgdGVzdF9zdGFydHRhZ19qdW5rX2NoYXJzKHNlbGYpOgotICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiPC8+IikKLSAgICAgICAgc2VsZi5fcGFyc2VfZXJyb3IoIjwvJD4iKQotICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiPC8iKQotICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiPC9hIikKLSAgICAgICAgc2VsZi5fcGFyc2VfZXJyb3IoIjxhPGE+IikKLSAgICAgICAgc2VsZi5fcGFyc2VfZXJyb3IoIjwvYTxhPiIpCi0gICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCI8ISIpCi0gICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCI8YSIpCi0gICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCI8YSBmb289J2JhciciKQotICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiPGEgZm9vPSdiYXIiKQotICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiPGEgZm9vPSc+JyIpCi0gICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCI8YSBmb289Jz4iKQotICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiPGEkPiIpCi0gICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCI8YSRiPiIpCi0gICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCI8YSRiLz4iKQotICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiPGEkYiAgPiIpCi0gICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCI8YSRiICAvPiIpCi0KICAgICBkZWYgdGVzdF92YWxpZF9kb2N0eXBlcyhzZWxmKToKICAgICAgICAgIyBmcm9tIGh0dHA6Ly93d3cudzMub3JnL1FBLzIwMDIvMDQvdmFsaWQtZHRkLWxpc3QuaHRtbAogICAgICAgICBkdGRzID0gWydIVE1MJywgICMgSFRNTDUgZG9jdHlwZQpAQCAtMjc4LDkgKzI0Myw2IEBACiAgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjwhRE9DVFlQRSAlcz4iICUgZHRkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2RlY2wnLCAnRE9DVFlQRSAnICsgZHRkKV0pCiAKLSAgICBkZWYgdGVzdF9kZWNsYXJhdGlvbl9qdW5rX2NoYXJzKHNlbGYpOgotICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiPCFET0NUWVBFIGZvbyAkID4iKQotCiAgICAgZGVmIHRlc3Rfc3RhcnRlbmR0YWcoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPHAvPiIsIFsKICAgICAgICAgICAgICgic3RhcnRlbmR0YWciLCAicCIsIFtdKSwKQEAgLTM4MSw3ICszNDMsOCBAQAogICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9jb252ZXJ0X2NoYXJyZWZzKHNlbGYpOgotICAgICAgICBjb2xsZWN0b3IgPSBsYW1iZGE6IEV2ZW50Q29sbGVjdG9yQ2hhcnJlZnMoY29udmVydF9jaGFycmVmcz1UcnVlKQorICAgICAgICAjIGRlZmF1bHQgdmFsdWUgZm9yIGNvbnZlcnRfY2hhcnJlZnMgaXMgbm93IFRydWUKKyAgICAgICAgY29sbGVjdG9yID0gbGFtYmRhOiBFdmVudENvbGxlY3RvckNoYXJyZWZzKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbGxlY3RvcigpLmNvbnZlcnRfY2hhcnJlZnMpCiAgICAgICAgIGNoYXJyZWZzID0gWycmcXVvdDsnLCAnJiMzNDsnLCAnJiN4MjI7JywgJyZxdW90JywgJyYjMzQnLCAnJiN4MjInXQogICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRleHQvYXR0cmlidXRlcwpAQCAtNDE4LDIzICszODEsOCBAQAogICAgICAgICBzZWxmLl9ydW5fY2hlY2soJ25vIGNoYXJyZWZzIGhlcmUnLCBbKCdkYXRhJywgJ25vIGNoYXJyZWZzIGhlcmUnKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCiAKLQotY2xhc3MgSFRNTFBhcnNlclRvbGVyYW50VGVzdENhc2UoSFRNTFBhcnNlclN0cmljdFRlc3RDYXNlKToKLQotICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgotICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1GYWxzZSkKLQotICAgIGRlZiB0ZXN0X2RlcHJlY2F0aW9uX3dhcm5pbmdzKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKCkgICMgY29udmVydF9jaGFycmVmcyBub3QgcGFzc2VkIGV4cGxpY2l0bHkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICBFdmVudENvbGxlY3RvcihzdHJpY3Q9RmFsc2UpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoaHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3IpOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3IoKS5lcnJvcigndGVzdCcpCi0KKyAgICAjIHRoZSByZW1haW5pbmcgdGVzdHMgd2VyZSBmb3IgdGhlICJ0b2xlcmFudCIgcGFyc2VyICh3aGljaCBpcyBub3cKKyAgICAjIHRoZSBkZWZhdWx0KSwgYW5kIGNoZWNrIHZhcmlvdXMga2luZCBvZiBicm9rZW4gbWFya3VwCiAgICAgZGVmIHRlc3RfdG9sZXJhbnRfcGFyc2luZyhzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8aHRtbCA8aHRtbD50ZT4+eHQmYTw8YmM8L2E+PC9odG1sPlxuJwogICAgICAgICAgICAgICAgICAgICAgICAgJzxpbWcgc3JjPSJVUkw+PC8vaW1nPjwvaHRtbDwvaHRtbD4nLCBbCkBAIC02OTUsMTEgKzY0Myw3IEBACiAgICAgICAgICkKIAogCi1jbGFzcyBBdHRyaWJ1dGVzU3RyaWN0VGVzdENhc2UoVGVzdENhc2VCYXNlKToKLQotICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWl0ZT1GYWxzZSk6Ci0gICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUsIGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCitjbGFzcyBBdHRyaWJ1dGVzVGVzdENhc2UoVGVzdENhc2VCYXNlKToKIAogICAgIGRlZiB0ZXN0X2F0dHJfc3ludGF4KHNlbGYpOgogICAgICAgICBvdXRwdXQgPSBbCkBAIC03NTYsMTIgKzcwMCw2IEBACiAgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJodG1sIiwgWygiZm9vIiwgIlx1MjBBQyZhYSZ1bnN1cHBvcnRlZDsiKV0pXSkKIAogCi0KLWNsYXNzIEF0dHJpYnV0ZXNUb2xlcmFudFRlc3RDYXNlKEF0dHJpYnV0ZXNTdHJpY3RUZXN0Q2FzZSk6Ci0KLSAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKLSAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCi0KICAgICBkZWYgdGVzdF9hdHRyX2Z1bmt5X25hbWVzMihzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKAogICAgICAgICAgICAgIjxhICQ+PGIgJD0lPjxjIFw9Lz4iLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZWphci5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVqYXIucHkKaW5kZXggNTAyNjBmZi4uNDljMDFhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZWphci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llamFyLnB5CkBAIC0zMSw2ICszMSwyOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0ZXh0LCByIl5cZHs0fS1cZFxkLVxkXGQgXGRcZDpcZFxkOlxkXGRaJCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgdGltZTJpc296IGZvcm1hdDogJXMgJXMiICUgKGF6LCBieikpCiAKKyAgICBkZWYgdGVzdF90aW1lMm5ldHNjYXBlKHNlbGYpOgorICAgICAgICBiYXNlID0gMTAxOTIyNzAwMAorICAgICAgICBkYXkgPSAyNCozNjAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJuZXRzY2FwZShiYXNlKSwgIkZyaSwgMTktQXByLTIwMDIgMTQ6MzY6NDAgR01UIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lMm5ldHNjYXBlKGJhc2UrZGF5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU2F0LCAyMC1BcHItMjAwMiAxNDozNjo0MCBHTVQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJuZXRzY2FwZShiYXNlKzIqZGF5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU3VuLCAyMS1BcHItMjAwMiAxNDozNjo0MCBHTVQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJuZXRzY2FwZShiYXNlKzMqZGF5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTW9uLCAyMi1BcHItMjAwMiAxNDozNjo0MCBHTVQiKQorCisgICAgICAgIGF6ID0gdGltZTJuZXRzY2FwZSgpCisgICAgICAgIGJ6ID0gdGltZTJuZXRzY2FwZSg1MDAwMDApCisgICAgICAgIGZvciB0ZXh0IGluIChheiwgYnopOgorICAgICAgICAgICAgIyBGb3JtYXQgIiVzLCAlMDJkLSVzLSUwNGQgJTAyZDolMDJkOiUwMmQgR01UIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCgKKyAgICAgICAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAgIHIiW2EtekEtWl17M30sIFxkezJ9LVthLXpBLVpdezN9LVxkezR9IFxkezJ9OlxkezJ9OlxkezJ9IEdNVCQiLAorICAgICAgICAgICAgICAgICJiYWQgdGltZTJuZXRzY2FwZSBmb3JtYXQ6ICVzICVzIiAlIChheiwgYnopKQorCiAgICAgZGVmIHRlc3RfaHR0cDJ0aW1lKHNlbGYpOgogICAgICAgICBkZWYgcGFyc2VfZGF0ZSh0ZXh0KToKICAgICAgICAgICAgIHJldHVybiB0aW1lLmdtdGltZShodHRwMnRpbWUodGV4dCkpWzo2XQpAQCAtOTEsNiArMTEzLDEwIEBACiAgICAgICAgICAgICAnMDEtMDEtMTk4MCAyNTowMDowMCcsCiAgICAgICAgICAgICAnMDEtMDEtMTk4MCAwMDo2MTowMCcsCiAgICAgICAgICAgICAnMDEtMDEtMTk4MCAwMDowMDo2MicsCisgICAgICAgICAgICAnMDgtT2N0LTM2OTc3MzknLAorICAgICAgICAgICAgJzA4LTAxLTM2OTc3MzknLAorICAgICAgICAgICAgJzA5IEZlYiAxOTk0MjYzMiAyMjoyMzozMiBHTVQnLAorICAgICAgICAgICAgJ1dlZCwgMDkgRmViIDE5OTQ4MzQgMjI6MjM6MzIgR01UJywKICAgICAgICAgICAgIF06CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShodHRwMnRpbWUodGVzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDJ0aW1lKCVzKSBpcyBub3QgTm9uZVxuIgpAQCAtMzcwLDcgKzM5Niw3IEBACiAjIyAgIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBpdCdsbCBiZSBhIGhlYWRhY2hlIHRvIHBhcnNlIChhdCBsZWFzdCBteSBoZWFkCiAjIyAgIHN0YXJ0cyBodXJ0aW5nIGV2ZXJ5IHRpbWUgSSB0aGluayBvZiB0aGF0IGNvZGUpLgogIyMgLSBFeHBpcmVzOiBZb3UnbGwgZ2V0IGFsbCBzb3J0cyBvZiBkYXRlIGZvcm1hdHMgaW4gdGhlIGV4cGlyZXMsCi0jIyAgIGluY2x1ZGluZyBlbXRweSBleHBpcmVzIGF0dHJpYnV0ZXMgKCJleHBpcmVzPSIpLiBCZSBhcyBmbGV4aWJsZSBhcyB5b3UKKyMjICAgaW5jbHVkaW5nIGVtcHR5IGV4cGlyZXMgYXR0cmlidXRlcyAoImV4cGlyZXM9IikuIEJlIGFzIGZsZXhpYmxlIGFzIHlvdQogIyMgICBjYW4sIGFuZCBjZXJ0YWlubHkgZG9uJ3QgZXhwZWN0IHRoZSB3ZWVrZGF5IHRvIGJlIHRoZXJlOyBpZiB5b3UgY2FuJ3QKICMjICAgcGFyc2UgaXQsIGp1c3QgaWdub3JlIGl0IGFuZCBwcmV0ZW5kIGl0J3MgYSBzZXNzaW9uIGNvb2tpZS4KICMjIC0gRG9tYWluLW1hdGNoaW5nOiBOZXRzY2FwZSB1c2VzIHRoZSAyLWRvdCBydWxlIGZvciBfYWxsXyBkb21haW5zLCBub3QKQEAgLTE3MjUsNyArMTc1MSw3IEBACiAgICAgICAgICAgICBrZXkgPSAiJXNfYWZ0ZXIiICUgY29va2llLnZhbHVlCiAgICAgICAgICAgICBjb3VudGVyW2tleV0gPSBjb3VudGVyW2tleV0gKyAxCiAKLSAgICAgICAgICAgICMgYSBwZXJtYW5lbnQgY29va2llIGdvdCBsb3N0IGFjY2lkZW50bHkKKyAgICAgICAgICAgICMgYSBwZXJtYW5lbnQgY29va2llIGdvdCBsb3N0IGFjY2lkZW50YWxseQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50ZXJbInBlcm1fYWZ0ZXIiXSwgY291bnRlclsicGVybV9iZWZvcmUiXSkKICAgICAgICAgICAgICMgYSBzZXNzaW9uIGNvb2tpZSBoYXNuJ3QgYmVlbiBjbGVhcmVkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRlclsic2Vzc2lvbl9hZnRlciJdLCAwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZXMucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llcy5weQppbmRleCBjN2I2ODBiLi4yNDMyZTBiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llcy5weQpAQCAtMSw1ICsxLDYgQEAKICMgU2ltcGxlIHRlc3Qgc3VpdGUgZm9yIGh0dHAvY29va2llcy5weQogCitpbXBvcnQgY29weQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcnVuX2RvY3Rlc3QsIGNoZWNrX3dhcm5pbmdzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gaHR0cCBpbXBvcnQgY29va2llcwpAQCAtMTU0LDEzICsxNTUsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ2VnZ3MnXVsnaHR0cG9ubHknXSwgJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snZWdncyddWydzZWN1cmUnXSwgJ2JhcicpCiAKLSAgICBkZWYgdGVzdF9iYWRfYXR0cnMoc2VsZik6Ci0gICAgICAgICMgaXNzdWUgMTY2MTE6IG1ha2Ugc3VyZSB3ZSBkb24ndCBicmVhayBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotICAgICAgICBDID0gY29va2llcy5TaW1wbGVDb29raWUoKQotICAgICAgICBDLmxvYWQoJ2Nvb2tpZT13aXRoOyBpbnZhbGlkOyB2ZXJzaW9uOyBzZWNvbmQ9Y29va2llOycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5vdXRwdXQoKSwKLSAgICAgICAgICAgICdTZXQtQ29va2llOiBjb29raWU9d2l0aFxyXG5TZXQtQ29va2llOiBzZWNvbmQ9Y29va2llJykKLQogICAgIGRlZiB0ZXN0X2V4dHJhX3NwYWNlcyhzZWxmKToKICAgICAgICAgQyA9IGNvb2tpZXMuU2ltcGxlQ29va2llKCkKICAgICAgICAgQy5sb2FkKCdlZ2dzICA9ICBzY3JhbWJsZWQgIDsgIHNlY3VyZSAgOyAgcGF0aCAgPSAgYmFyICAgOyBmb289Zm9vICAgJykKQEAgLTE5NSw3ICsxODksMTAgQEAKICAgICBkZWYgdGVzdF9pbnZhbGlkX2Nvb2tpZXMoc2VsZik6CiAgICAgICAgICMgQWNjZXB0aW5nIHRoZXNlIGNvdWxkIGJlIGEgc2VjdXJpdHkgaXNzdWUKICAgICAgICAgQyA9IGNvb2tpZXMuU2ltcGxlQ29va2llKCkKLSAgICAgICAgZm9yIHMgaW4gKCddZm9vPXgnLCAnW2Zvbz14JywgJ2JsYWhdZm9vPXgnLCAnYmxhaFtmb289eCcpOgorICAgICAgICBmb3IgcyBpbiAoJ11mb289eCcsICdbZm9vPXgnLCAnYmxhaF1mb289eCcsICdibGFoW2Zvbz14JywKKyAgICAgICAgICAgICAgICAgICdTZXQtQ29va2llOiBmb289YmFyJywgJ1NldC1Db29raWU6IGZvbycsCisgICAgICAgICAgICAgICAgICAnZm9vPWJhcjsgYmF6JywgJ2JhejsgZm9vPWJhcicsCisgICAgICAgICAgICAgICAgICAnc2VjdXJlO2Zvbz1iYXInLCAnVmVyc2lvbj0xO2Zvbz1iYXInKToKICAgICAgICAgICAgIEMubG9hZChzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KEMpLCB7fSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5vdXRwdXQoKSwgJycpCkBAIC0yMTMsMTAgKzIxMCwyNSBAQAogICAgICAgICAgICAgICAgIEMxID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhDLCBwcm90b2NvbD1wcm90bykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDMS5vdXRwdXQoKSwgZXhwZWN0ZWRfb3V0cHV0KQogCisgICAgZGVmIHRlc3RfaWxsZWdhbF9jaGFycyhzZWxmKToKKyAgICAgICAgcmF3ZGF0YSA9ICJhPWI7IGMsZD1lIgorICAgICAgICBDID0gY29va2llcy5TaW1wbGVDb29raWUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvb2tpZXMuQ29va2llRXJyb3IpOgorICAgICAgICAgICAgQy5sb2FkKHJhd2RhdGEpCisKIAogY2xhc3MgTW9yc2VsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIGZvciB0aGUgTW9yc2VsIG9iamVjdC4iIiIKIAorICAgIGRlZiB0ZXN0X2RlZmF1bHRzKHNlbGYpOgorICAgICAgICBtb3JzZWwgPSBjb29raWVzLk1vcnNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1vcnNlbC5rZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1vcnNlbC52YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobW9yc2VsLmNvZGVkX3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vcnNlbC5rZXlzKCksIGNvb2tpZXMuTW9yc2VsLl9yZXNlcnZlZC5rZXlzKCkpCisgICAgICAgIGZvciBrZXksIHZhbCBpbiBtb3JzZWwuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAnJywga2V5KQorCiAgICAgZGVmIHRlc3RfcmVzZXJ2ZWRfa2V5cyhzZWxmKToKICAgICAgICAgTSA9IGNvb2tpZXMuTW9yc2VsKCkKICAgICAgICAgIyB0ZXN0cyB2YWxpZCBhbmQgaW52YWxpZCByZXNlcnZlZCBrZXlzIGZvciBNb3JzZWxzCkBAIC0yNjAsNiArMjcyLDE5NyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY29va2llcy5Db29raWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uc2V0LCBpLCAnJXNfdmFsdWUnICUgaSwgJyVzX3ZhbHVlJyAlIGkpCiAKKyAgICBkZWYgdGVzdF9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgbW9yc2VsID0gY29va2llcy5Nb3JzZWwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChEZXByZWNhdGlvbldhcm5pbmcsIHInXGJrZXlcYicpOgorICAgICAgICAgICAgbW9yc2VsLmtleSA9ICcnCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KERlcHJlY2F0aW9uV2FybmluZywgcidcYnZhbHVlXGInKToKKyAgICAgICAgICAgIG1vcnNlbC52YWx1ZSA9ICcnCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KERlcHJlY2F0aW9uV2FybmluZywgcidcYmNvZGVkX3ZhbHVlXGInKToKKyAgICAgICAgICAgIG1vcnNlbC5jb2RlZF92YWx1ZSA9ICcnCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KERlcHJlY2F0aW9uV2FybmluZywgcidcYkxlZ2FsQ2hhcnNcYicpOgorICAgICAgICAgICAgbW9yc2VsLnNldCgna2V5JywgJ3ZhbHVlJywgJ2NvZGVkX3ZhbHVlJywgTGVnYWxDaGFycz0nLionKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIGJhc2VfY2FzZSA9ICgna2V5JywgJ3ZhbHVlJywgJyJ2YWx1ZSInKQorICAgICAgICBhdHRyaWJzID0geworICAgICAgICAgICAgJ3BhdGgnOiAnLycsCisgICAgICAgICAgICAnY29tbWVudCc6ICdmb28nLAorICAgICAgICAgICAgJ2RvbWFpbic6ICdleGFtcGxlLmNvbScsCisgICAgICAgICAgICAndmVyc2lvbic6IDIsCisgICAgICAgIH0KKyAgICAgICAgbW9yc2VsX2EgPSBjb29raWVzLk1vcnNlbCgpCisgICAgICAgIG1vcnNlbF9hLnVwZGF0ZShhdHRyaWJzKQorICAgICAgICBtb3JzZWxfYS5zZXQoKmJhc2VfY2FzZSkKKyAgICAgICAgbW9yc2VsX2IgPSBjb29raWVzLk1vcnNlbCgpCisgICAgICAgIG1vcnNlbF9iLnVwZGF0ZShhdHRyaWJzKQorICAgICAgICBtb3JzZWxfYi5zZXQoKmJhc2VfY2FzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vcnNlbF9hID09IG1vcnNlbF9iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vcnNlbF9hICE9IG1vcnNlbF9iKQorICAgICAgICBjYXNlcyA9ICgKKyAgICAgICAgICAgICgna2V5JywgJ3ZhbHVlJywgJ21pc21hdGNoJyksCisgICAgICAgICAgICAoJ2tleScsICdtaXNtYXRjaCcsICcidmFsdWUiJyksCisgICAgICAgICAgICAoJ21pc21hdGNoJywgJ3ZhbHVlJywgJyJ2YWx1ZSInKSwKKyAgICAgICAgKQorICAgICAgICBmb3IgY2FzZV9iIGluIGNhc2VzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY2FzZV9iKToKKyAgICAgICAgICAgICAgICBtb3JzZWxfYiA9IGNvb2tpZXMuTW9yc2VsKCkKKyAgICAgICAgICAgICAgICBtb3JzZWxfYi51cGRhdGUoYXR0cmlicykKKyAgICAgICAgICAgICAgICBtb3JzZWxfYi5zZXQoKmNhc2VfYikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vcnNlbF9hID09IG1vcnNlbF9iKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb3JzZWxfYSAhPSBtb3JzZWxfYikKKworICAgICAgICBtb3JzZWxfYiA9IGNvb2tpZXMuTW9yc2VsKCkKKyAgICAgICAgbW9yc2VsX2IudXBkYXRlKGF0dHJpYnMpCisgICAgICAgIG1vcnNlbF9iLnNldCgqYmFzZV9jYXNlKQorICAgICAgICBtb3JzZWxfYlsnY29tbWVudCddID0gJ2JhcicKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb3JzZWxfYSA9PSBtb3JzZWxfYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vcnNlbF9hICE9IG1vcnNlbF9iKQorCisgICAgICAgICMgdGVzdCBtaXNtYXRjaGVkIHR5cGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29va2llcy5Nb3JzZWwoKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llcy5Nb3JzZWwoKSAhPSAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvb2tpZXMuTW9yc2VsKCkgPT0gJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWVzLk1vcnNlbCgpICE9ICcnKQorICAgICAgICBpdGVtcyA9IGxpc3QoY29va2llcy5Nb3JzZWwoKS5pdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvb2tpZXMuTW9yc2VsKCkgPT0gaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWVzLk1vcnNlbCgpICE9IGl0ZW1zKQorCisgICAgICAgICMgbW9yc2VsL2RpY3QKKyAgICAgICAgbW9yc2VsID0gY29va2llcy5Nb3JzZWwoKQorICAgICAgICBtb3JzZWwuc2V0KCpiYXNlX2Nhc2UpCisgICAgICAgIG1vcnNlbC51cGRhdGUoYXR0cmlicykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vcnNlbCA9PSBkaWN0KG1vcnNlbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9yc2VsICE9IGRpY3QobW9yc2VsKSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIG1vcnNlbF9hID0gY29va2llcy5Nb3JzZWwoKQorICAgICAgICBtb3JzZWxfYS5zZXQoJ2ZvbycsICdiYXInLCAnYmF6JykKKyAgICAgICAgbW9yc2VsX2EudXBkYXRlKHsKKyAgICAgICAgICAgICd2ZXJzaW9uJzogMiwKKyAgICAgICAgICAgICdjb21tZW50JzogJ2ZvbycsCisgICAgICAgIH0pCisgICAgICAgIG1vcnNlbF9iID0gbW9yc2VsX2EuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb3JzZWxfYiwgY29va2llcy5Nb3JzZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9yc2VsX2EsIG1vcnNlbF9iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vcnNlbF9hLCBtb3JzZWxfYikKKworICAgICAgICBtb3JzZWxfYiA9IGNvcHkuY29weShtb3JzZWxfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vcnNlbF9iLCBjb29raWVzLk1vcnNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb3JzZWxfYSwgbW9yc2VsX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9yc2VsX2EsIG1vcnNlbF9iKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgbW9yc2VsID0gY29va2llcy5Nb3JzZWwoKQorICAgICAgICBtb3JzZWxbJ2V4cGlyZXMnXSA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3JzZWxbJ2V4cGlyZXMnXSwgMCkKKyAgICAgICAgbW9yc2VsWydWZXJzaW9uJ10gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9yc2VsWyd2ZXJzaW9uJ10sIDIpCisgICAgICAgIG1vcnNlbFsnRE9NQUlOJ10gPSAnZXhhbXBsZS5jb20nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9yc2VsWydkb21haW4nXSwgJ2V4YW1wbGUuY29tJykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvb2tpZXMuQ29va2llRXJyb3IpOgorICAgICAgICAgICAgbW9yc2VsWydpbnZhbGlkJ10gPSAndmFsdWUnCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2ludmFsaWQnLCBtb3JzZWwpCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBtb3JzZWwgPSBjb29raWVzLk1vcnNlbCgpCisgICAgICAgIG1vcnNlbC51cGRhdGUoeworICAgICAgICAgICAgJ2RvbWFpbic6ICdleGFtcGxlLmNvbScsCisgICAgICAgICAgICAndmVyc2lvbic6IDIsCisgICAgICAgIH0pCisgICAgICAgICMgdGhpcyBzaG91bGRuJ3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3JzZWwuc2V0ZGVmYXVsdCgnZXhwaXJlcycsICd2YWx1ZScpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3JzZWxbJ2V4cGlyZXMnXSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9yc2VsLnNldGRlZmF1bHQoJ1ZlcnNpb24nLCAxKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3JzZWxbJ3ZlcnNpb24nXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3JzZWwuc2V0ZGVmYXVsdCgnRE9NQUlOJywgJ3ZhbHVlJyksICdleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9yc2VsWydkb21haW4nXSwgJ2V4YW1wbGUuY29tJykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvb2tpZXMuQ29va2llRXJyb3IpOgorICAgICAgICAgICAgbW9yc2VsLnNldGRlZmF1bHQoJ2ludmFsaWQnLCAndmFsdWUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdpbnZhbGlkJywgbW9yc2VsKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBhdHRyaWJzID0geydleHBpcmVzJzogMSwgJ1ZlcnNpb24nOiAyLCAnRE9NQUlOJzogJ2V4YW1wbGUuY29tJ30KKyAgICAgICAgIyB0ZXN0IGRpY3QgdXBkYXRlCisgICAgICAgIG1vcnNlbCA9IGNvb2tpZXMuTW9yc2VsKCkKKyAgICAgICAgbW9yc2VsLnVwZGF0ZShhdHRyaWJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vcnNlbFsnZXhwaXJlcyddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vcnNlbFsndmVyc2lvbiddLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vcnNlbFsnZG9tYWluJ10sICdleGFtcGxlLmNvbScpCisgICAgICAgICMgdGVzdCBpdGVyYWJsZSB1cGRhdGUKKyAgICAgICAgbW9yc2VsID0gY29va2llcy5Nb3JzZWwoKQorICAgICAgICBtb3JzZWwudXBkYXRlKGxpc3QoYXR0cmlicy5pdGVtcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3JzZWxbJ2V4cGlyZXMnXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3JzZWxbJ3ZlcnNpb24nXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb3JzZWxbJ2RvbWFpbiddLCAnZXhhbXBsZS5jb20nKQorICAgICAgICAjIHRlc3QgaXRlcmF0b3IgdXBkYXRlCisgICAgICAgIG1vcnNlbCA9IGNvb2tpZXMuTW9yc2VsKCkKKyAgICAgICAgbW9yc2VsLnVwZGF0ZSgoaywgdikgZm9yIGssIHYgaW4gYXR0cmlicy5pdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vcnNlbFsnZXhwaXJlcyddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vcnNlbFsndmVyc2lvbiddLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vcnNlbFsnZG9tYWluJ10sICdleGFtcGxlLmNvbScpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb29raWVzLkNvb2tpZUVycm9yKToKKyAgICAgICAgICAgIG1vcnNlbC51cGRhdGUoeydpbnZhbGlkJzogJ3ZhbHVlJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2ludmFsaWQnLCBtb3JzZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9yc2VsLnVwZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb3JzZWwudXBkYXRlLCAwKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBtb3JzZWxfYSA9IGNvb2tpZXMuTW9yc2VsKCkKKyAgICAgICAgbW9yc2VsX2Euc2V0KCdmb28nLCAnYmFyJywgJ2JheicpCisgICAgICAgIG1vcnNlbF9hLnVwZGF0ZSh7CisgICAgICAgICAgICAndmVyc2lvbic6IDIsCisgICAgICAgICAgICAnY29tbWVudCc6ICdmb28nLAorICAgICAgICB9KQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBtb3JzZWxfYiA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMobW9yc2VsX2EsIHByb3RvKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9yc2VsX2IsIGNvb2tpZXMuTW9yc2VsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9yc2VsX2IsIG1vcnNlbF9hKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG1vcnNlbF9iKSwgc3RyKG1vcnNlbF9hKSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIG1vcnNlbCA9IGNvb2tpZXMuTW9yc2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG1vcnNlbCksICc8TW9yc2VsOiBOb25lPU5vbmU+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobW9yc2VsKSwgJ1NldC1Db29raWU6IE5vbmU9Tm9uZScpCisgICAgICAgIG1vcnNlbC5zZXQoJ2tleScsICd2YWwnLCAnY29kZWRfdmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG1vcnNlbCksICc8TW9yc2VsOiBrZXk9Y29kZWRfdmFsPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG1vcnNlbCksICdTZXQtQ29va2llOiBrZXk9Y29kZWRfdmFsJykKKyAgICAgICAgbW9yc2VsLnVwZGF0ZSh7CisgICAgICAgICAgICAncGF0aCc6ICcvJywKKyAgICAgICAgICAgICdjb21tZW50JzogJ2ZvbycsCisgICAgICAgICAgICAnZG9tYWluJzogJ2V4YW1wbGUuY29tJywKKyAgICAgICAgICAgICdtYXgtYWdlJzogMCwKKyAgICAgICAgICAgICdzZWN1cmUnOiAwLAorICAgICAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICB9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobW9yc2VsKSwKKyAgICAgICAgICAgICAgICAnPE1vcnNlbDoga2V5PWNvZGVkX3ZhbDsgQ29tbWVudD1mb287IERvbWFpbj1leGFtcGxlLmNvbTsgJworICAgICAgICAgICAgICAgICdNYXgtQWdlPTA7IFBhdGg9LzsgVmVyc2lvbj0xPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG1vcnNlbCksCisgICAgICAgICAgICAgICAgJ1NldC1Db29raWU6IGtleT1jb2RlZF92YWw7IENvbW1lbnQ9Zm9vOyBEb21haW49ZXhhbXBsZS5jb207ICcKKyAgICAgICAgICAgICAgICAnTWF4LUFnZT0wOyBQYXRoPS87IFZlcnNpb249MScpCisgICAgICAgIG1vcnNlbFsnc2VjdXJlJ10gPSBUcnVlCisgICAgICAgIG1vcnNlbFsnaHR0cG9ubHknXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG1vcnNlbCksCisgICAgICAgICAgICAgICAgJzxNb3JzZWw6IGtleT1jb2RlZF92YWw7IENvbW1lbnQ9Zm9vOyBEb21haW49ZXhhbXBsZS5jb207ICcKKyAgICAgICAgICAgICAgICAnSHR0cE9ubHk7IE1heC1BZ2U9MDsgUGF0aD0vOyBTZWN1cmU7IFZlcnNpb249MT4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtb3JzZWwpLAorICAgICAgICAgICAgICAgICdTZXQtQ29va2llOiBrZXk9Y29kZWRfdmFsOyBDb21tZW50PWZvbzsgRG9tYWluPWV4YW1wbGUuY29tOyAnCisgICAgICAgICAgICAgICAgJ0h0dHBPbmx5OyBNYXgtQWdlPTA7IFBhdGg9LzsgU2VjdXJlOyBWZXJzaW9uPTEnKQorCisgICAgICAgIG1vcnNlbCA9IGNvb2tpZXMuTW9yc2VsKCkKKyAgICAgICAgbW9yc2VsLnNldCgna2V5JywgJ3ZhbCcsICdjb2RlZF92YWwnKQorICAgICAgICBtb3JzZWxbJ2V4cGlyZXMnXSA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKG1vcnNlbCksCisgICAgICAgICAgICAgICAgcic8TW9yc2VsOiBrZXk9Y29kZWRfdmFsOyAnCisgICAgICAgICAgICAgICAgcidleHBpcmVzPVx3KywgXGQrIFx3KyBcZCsgXGQrOlxkKzpcZCsgXHcrPicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RyKG1vcnNlbCksCisgICAgICAgICAgICAgICAgcidTZXQtQ29va2llOiBrZXk9Y29kZWRfdmFsOyAnCisgICAgICAgICAgICAgICAgcidleHBpcmVzPVx3KywgXGQrIFx3KyBcZCsgXGQrOlxkKzpcZCsgXHcrJykKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChDb29raWVUZXN0cywgTW9yc2VsVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKaW5kZXggZGY5YTllMy4uMzI5ZjA2OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQpAQCAtMTksNiArMTksMjYgQEAKICMgU2VsZi1zaWduZWQgY2VydCBmaWxlIGZvciBzZWxmLXNpZ25lZC5weXRob250ZXN0Lm5ldAogQ0VSVF9zZWxmc2lnbmVkX3B5dGhvbnRlc3Rkb3RuZXQgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ3NlbGZzaWduZWRfcHl0aG9udGVzdGRvdG5ldC5wZW0nKQogCisjIGNvbnN0YW50cyBmb3IgdGVzdGluZyBjaHVua2VkIGVuY29kaW5nCitjaHVua2VkX3N0YXJ0ID0gKAorICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICdUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG5cclxuJworICAgICdhXHJcbicKKyAgICAnaGVsbG8gd29ybFxyXG4nCisgICAgJzNcclxuJworICAgICdkISBcclxuJworICAgICc4XHJcbicKKyAgICAnYW5kIG5vdyBcclxuJworICAgICcyMlxyXG4nCisgICAgJ2ZvciBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnRcclxuJworKQorY2h1bmtlZF9leHBlY3RlZCA9IGInaGVsbG8gd29ybGQhIGFuZCBub3cgZm9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCcKK2NodW5rX2V4dGVuc2lvbiA9ICI7Zm9vPWJhciIKK2xhc3RfY2h1bmsgPSAiMFxyXG4iCitsYXN0X2NodW5rX2V4dGVuZGVkID0gIjAiICsgY2h1bmtfZXh0ZW5zaW9uICsgIlxyXG4iCit0cmFpbGVycyA9ICJYLUR1bW15OiBmb29cclxuWC1EdW1tMjogYmFyXHJcbiIKK2NodW5rZWRfZW5kID0gIlxyXG4iCisKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIAogY2xhc3MgRmFrZVNvY2tldDoKQEAgLTUxLDYgKzcxLDkgQEAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIHBhc3MKIAorICAgIGRlZiBzZXRzb2Nrb3B0KHNlbGYsIGxldmVsLCBvcHRuYW1lLCB2YWx1ZSk6CisgICAgICAgIHBhc3MKKwogY2xhc3MgRVBpcGVTb2NrZXQoRmFrZVNvY2tldCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgcGlwZV90cmlnZ2VyKToKQEAgLTg0LDYgKzEwNywyMyBAQAogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2NhbGxlciB0cmllZCB0byByZWFkIHBhc3QgRU9GJykKICAgICAgICAgcmV0dXJuIGRhdGEKIAorY2xhc3MgRmFrZVNvY2tldEhUVFBDb25uZWN0aW9uKGNsaWVudC5IVFRQQ29ubmVjdGlvbik6CisgICAgIiIiSFRUUENvbm5lY3Rpb24gc3ViY2xhc3MgdXNpbmcgRmFrZVNvY2tldDsgY291bnRzIGNvbm5lY3QoKSBjYWxscyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9ucyA9IDAKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygnZXhhbXBsZS5jb20nKQorICAgICAgICBzZWxmLmZha2Vfc29ja2V0X2FyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uID0gc2VsZi5jcmVhdGVfY29ubmVjdGlvbgorCisgICAgZGVmIGNvbm5lY3Qoc2VsZik6CisgICAgICAgICIiIkNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgY29ubmVjdCgpIGlzIGludm9rZWQiIiIKKyAgICAgICAgc2VsZi5jb25uZWN0aW9ucyArPSAxCisgICAgICAgIHJldHVybiBzdXBlcigpLmNvbm5lY3QoKQorCisgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKHNlbGYsICpwb3MsICoqa3cpOgorICAgICAgICByZXR1cm4gRmFrZVNvY2tldCgqc2VsZi5mYWtlX3NvY2tldF9hcmdzKQorCiBjbGFzcyBIZWFkZXJUZXN0cyhUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfYXV0b19oZWFkZXJzKHNlbGYpOgogICAgICAgICAjIFNvbWUgaGVhZGVycyBhcmUgYWRkZWQgYXV0b21hdGljYWxseSwgYnV0IHNob3VsZCBub3QgYmUgYWRkZWQgYnkKQEAgLTIxNSw4ICsyNTUsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEluKGInXHhhME5vbmJyZWFrU3BhY2U6IHZhbHVlJywgY29ubi5fYnVmZmVyKQogCiAgICAgZGVmIHRlc3RfaXB2Nmhvc3RfaGVhZGVyKHNlbGYpOgotICAgICAgICAjIERlZmF1bHQgaG9zdCBoZWFkZXIgb24gSVB2NiB0cmFuc2FjdGlvbiBzaG91bGQgd3JhcHBlZCBieSBbXSBpZgotICAgICAgICAjIGl0cyBhY3R1YWwgSVB2NiBhZGRyZXNzCisgICAgICAgICMgRGVmYXVsdCBob3N0IGhlYWRlciBvbiBJUHY2IHRyYW5zYWN0aW9uIHNob3VsZCBiZSB3cmFwcGVkIGJ5IFtdIGlmCisgICAgICAgICMgaXQgaXMgYW4gSVB2NiBhZGRyZXNzCiAgICAgICAgIGV4cGVjdGVkID0gYidHRVQgL2ZvbyBIVFRQLzEuMVxyXG5Ib3N0OiBbMjAwMTo6XTo4MVxyXG4nIFwKICAgICAgICAgICAgICAgICAgICBiJ0FjY2VwdC1FbmNvZGluZzogaWRlbnRpdHlcclxuXHJcbicKICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignWzIwMDE6Ol06ODEnKQpAQCAtMzAxLDggKzM0MSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihleGMpLCAnJydCYWRTdGF0dXNMaW5lKCJcJ1wnIiwpJycnKQogCiAgICAgZGVmIHRlc3RfcGFydGlhbF9yZWFkcyhzZWxmKToKLSAgICAgICAgIyBpZiB3ZSBoYXZlIGEgbGVuZ3RoLCB0aGUgc3lzdGVtIGtub3dzIHdoZW4gdG8gY2xvc2UgaXRzZWxmCi0gICAgICAgICMgc2FtZSBiZWhhdmlvdXIgdGhhbiB3aGVuIHdlIHJlYWQgdGhlIHdob2xlIHRoaW5nIHdpdGggcmVhZCgpCisgICAgICAgICMgaWYgd2UgaGF2ZSBDb250ZW50LUxlbmd0aCwgSFRUUFJlc3BvbnNlIGtub3dzIHdoZW4gdG8gY2xvc2UgaXRzZWxmLAorICAgICAgICAjIHRoZSBzYW1lIGJlaGF2aW91ciBhcyB3aGVuIHdlIHJlYWQgdGhlIHdob2xlIHRoaW5nIHdpdGggcmVhZCgpCiAgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rXHJcbkNvbnRlbnQtTGVuZ3RoOiA0XHJcblxyXG5UZXh0IgogICAgICAgICBzb2NrID0gRmFrZVNvY2tldChib2R5KQogICAgICAgICByZXNwID0gY2xpZW50LkhUVFBSZXNwb25zZShzb2NrKQpAQCAtMzE1LDkgKzM1NSwyNCBAQAogICAgICAgICByZXNwLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuY2xvc2VkKQogCisgICAgZGVmIHRlc3RfbWl4ZWRfcmVhZHMoc2VsZik6CisgICAgICAgICMgcmVhZGxpbmUoKSBzaG91bGQgdXBkYXRlIHRoZSByZW1haW5pbmcgbGVuZ3RoLCBzbyB0aGF0IHJlYWQoKSBrbm93cworICAgICAgICAjIGhvdyBtdWNoIGRhdGEgaXMgbGVmdCBhbmQgZG9lcyBub3QgcmFpc2UgSW5jb21wbGV0ZVJlYWQKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT2tcclxuQ29udGVudC1MZW5ndGg6IDEzXHJcblxyXG5UZXh0XHJcbkFub3RoZXIiCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2spCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZGxpbmUoKSwgYidUZXh0XHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzcC5pc2Nsb3NlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCBiJ0Fub3RoZXInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3AuY2xvc2VkKQorICAgICAgICByZXNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuY2xvc2VkKQorCiAgICAgZGVmIHRlc3RfcGFydGlhbF9yZWFkaW50b3Moc2VsZik6Ci0gICAgICAgICMgaWYgd2UgaGF2ZSBhIGxlbmd0aCwgdGhlIHN5c3RlbSBrbm93cyB3aGVuIHRvIGNsb3NlIGl0c2VsZgotICAgICAgICAjIHNhbWUgYmVoYXZpb3VyIHRoYW4gd2hlbiB3ZSByZWFkIHRoZSB3aG9sZSB0aGluZyB3aXRoIHJlYWQoKQorICAgICAgICAjIGlmIHdlIGhhdmUgQ29udGVudC1MZW5ndGgsIEhUVFBSZXNwb25zZSBrbm93cyB3aGVuIHRvIGNsb3NlIGl0c2VsZiwKKyAgICAgICAgIyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgd2hlbiB3ZSByZWFkIHRoZSB3aG9sZSB0aGluZyB3aXRoIHJlYWQoKQogICAgICAgICBib2R5ID0gIkhUVFAvMS4xIDIwMCBPa1xyXG5Db250ZW50LUxlbmd0aDogNFxyXG5cclxuVGV4dCIKICAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKICAgICAgICAgcmVzcCA9IGNsaWVudC5IVFRQUmVzcG9uc2Uoc29jaykKQEAgLTU0OCwyMCArNjAzLDggQEAKICAgICAgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICd0ZXN0JywgY29ubikKIAogICAgIGRlZiB0ZXN0X2NodW5rZWQoc2VsZik6Ci0gICAgICAgIGNodW5rZWRfc3RhcnQgPSAoCi0gICAgICAgICAgICAnSFRUUC8xLjEgMjAwIE9LXHJcbicKLSAgICAgICAgICAgICdUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG5cclxuJwotICAgICAgICAgICAgJ2FcclxuJwotICAgICAgICAgICAgJ2hlbGxvIHdvcmxcclxuJwotICAgICAgICAgICAgJzNcclxuJwotICAgICAgICAgICAgJ2QhIFxyXG4nCi0gICAgICAgICAgICAnOFxyXG4nCi0gICAgICAgICAgICAnYW5kIG5vdyBcclxuJwotICAgICAgICAgICAgJzIyXHJcbicKLSAgICAgICAgICAgICdmb3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50XHJcbicKLSAgICAgICAgKQotICAgICAgICBleHBlY3RlZCA9IGInaGVsbG8gd29ybGQhIGFuZCBub3cgZm9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCcKLSAgICAgICAgc29jayA9IEZha2VTb2NrZXQoY2h1bmtlZF9zdGFydCArICcwXHJcbicpCisgICAgICAgIGV4cGVjdGVkID0gY2h1bmtlZF9leHBlY3RlZAorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgbGFzdF9jaHVuayArIGNodW5rZWRfZW5kKQogICAgICAgICByZXNwID0gY2xpZW50LkhUVFBSZXNwb25zZShzb2NrLCBtZXRob2Q9IkdFVCIpCiAgICAgICAgIHJlc3AuYmVnaW4oKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCBleHBlY3RlZCkKQEAgLTU2OSw3ICs2MTIsNyBAQAogCiAgICAgICAgICMgVmFyaW91cyByZWFkIHNpemVzCiAgICAgICAgIGZvciBuIGluIHJhbmdlKDEsIDEyKToKLSAgICAgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGNodW5rZWRfc3RhcnQgKyAnMFxyXG4nKQorICAgICAgICAgICAgc29jayA9IEZha2VTb2NrZXQoY2h1bmtlZF9zdGFydCArIGxhc3RfY2h1bmsgKyBjaHVua2VkX2VuZCkKICAgICAgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKICAgICAgICAgICAgIHJlc3AuYmVnaW4oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQobikgKyByZXNwLnJlYWQobikgKyByZXNwLnJlYWQoKSwgZXhwZWN0ZWQpCkBAIC01OTIsMjMgKzYzNSwxMiBAQAogICAgICAgICAgICAgICAgIHJlc3AuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfcmVhZGludG9fY2h1bmtlZChzZWxmKToKLSAgICAgICAgY2h1bmtlZF9zdGFydCA9ICgKLSAgICAgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJwotICAgICAgICAgICAgJ1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXHJcblxyXG4nCi0gICAgICAgICAgICAnYVxyXG4nCi0gICAgICAgICAgICAnaGVsbG8gd29ybFxyXG4nCi0gICAgICAgICAgICAnM1xyXG4nCi0gICAgICAgICAgICAnZCEgXHJcbicKLSAgICAgICAgICAgICc4XHJcbicKLSAgICAgICAgICAgICdhbmQgbm93IFxyXG4nCi0gICAgICAgICAgICAnMjJcclxuJwotICAgICAgICAgICAgJ2ZvciBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnRcclxuJwotICAgICAgICApCi0gICAgICAgIGV4cGVjdGVkID0gYidoZWxsbyB3b3JsZCEgYW5kIG5vdyBmb3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50JworCisgICAgICAgIGV4cGVjdGVkID0gY2h1bmtlZF9leHBlY3RlZAogICAgICAgICBuZXhwZWN0ZWQgPSBsZW4oZXhwZWN0ZWQpCiAgICAgICAgIGIgPSBieXRlYXJyYXkoMTI4KQogCi0gICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGNodW5rZWRfc3RhcnQgKyAnMFxyXG4nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgbGFzdF9jaHVuayArIGNodW5rZWRfZW5kKQogICAgICAgICByZXNwID0gY2xpZW50LkhUVFBSZXNwb25zZShzb2NrLCBtZXRob2Q9IkdFVCIpCiAgICAgICAgIHJlc3AuYmVnaW4oKQogICAgICAgICBuID0gcmVzcC5yZWFkaW50byhiKQpAQCAtNjE4LDcgKzY1MCw3IEBACiAKICAgICAgICAgIyBWYXJpb3VzIHJlYWQgc2l6ZXMKICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoMSwgMTIpOgotICAgICAgICAgICAgc29jayA9IEZha2VTb2NrZXQoY2h1bmtlZF9zdGFydCArICcwXHJcbicpCisgICAgICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgbGFzdF9jaHVuayArIGNodW5rZWRfZW5kKQogICAgICAgICAgICAgcmVzcCA9IGNsaWVudC5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJHRVQiKQogICAgICAgICAgICAgcmVzcC5iZWdpbigpCiAgICAgICAgICAgICBtID0gbWVtb3J5dmlldyhiKQpAQCAtNjU0LDcgKzY4Niw3IEBACiAgICAgICAgICAgICAnMVxyXG4nCiAgICAgICAgICAgICAnZFxyXG4nCiAgICAgICAgICkKLSAgICAgICAgc29jayA9IEZha2VTb2NrZXQoY2h1bmtlZF9zdGFydCArICcwXHJcbicpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGNodW5rZWRfc3RhcnQgKyBsYXN0X2NodW5rICsgY2h1bmtlZF9lbmQpCiAgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iSEVBRCIpCiAgICAgICAgIHJlc3AuYmVnaW4oKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCBiJycpCkBAIC02NzQsNyArNzA2LDcgQEAKICAgICAgICAgICAgICcxXHJcbicKICAgICAgICAgICAgICdkXHJcbicKICAgICAgICAgKQotICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgJzBcclxuJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoY2h1bmtlZF9zdGFydCArIGxhc3RfY2h1bmsgKyBjaHVua2VkX2VuZCkKICAgICAgICAgcmVzcCA9IGNsaWVudC5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJIRUFEIikKICAgICAgICAgcmVzcC5iZWdpbigpCiAgICAgICAgIGIgPSBieXRlYXJyYXkoNSkKQEAgLTc0OSw2ICs3ODEsNyBAQAogICAgICAgICAgICAgKyAnMCcgKiA2NTUzNiArICdhXHJcbicKICAgICAgICAgICAgICdoZWxsbyB3b3JsZFxyXG4nCiAgICAgICAgICAgICAnMFxyXG4nCisgICAgICAgICAgICAnXHJcbicKICAgICAgICAgKQogICAgICAgICByZXNwID0gY2xpZW50LkhUVFBSZXNwb25zZShGYWtlU29ja2V0KGJvZHkpKQogICAgICAgICByZXNwLmJlZ2luKCkKQEAgLTc2NiwyOCArNzk5LDYgQEAKICAgICAgICAgcmVzcC5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmNsb3NlZCkKIAotICAgIGRlZiB0ZXN0X2RlbGF5ZWRfYWNrX29wdChzZWxmKToKLSAgICAgICAgIyBUZXN0IHRoYXQgTmFnbGUvZGVsYXllZF9hY2sgb3B0aW1pc3RhaW9uIHdvcmtzIGNvcnJlY3RseS4KLQotICAgICAgICAjIEZvciBzbWFsbCBwYXlsb2FkcywgaXQgc2hvdWxkIGNvYWxlc2NlIHRoZSBib2R5IHdpdGgKLSAgICAgICAgIyBoZWFkZXJzLCByZXN1bHRpbmcgaW4gYSBzaW5nbGUgc2VuZGFsbCgpIGNhbGwKLSAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQotICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQotICAgICAgICBjb25uLnNvY2sgPSBzb2NrCi0gICAgICAgIGJvZHkgPSBiJ3gnICogKGNvbm4ubXNzIC0gMSkKLSAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suc2VuZGFsbF9jYWxscywgMSkKLQotICAgICAgICAjIEZvciBsYXJnZSBwYXlsb2FkcywgaXQgc2hvdWxkIHNlbmQgdGhlIGhlYWRlcnMgYW5kCi0gICAgICAgICMgdGhlbiB0aGUgYm9keSwgcmVzdWx0aW5nIGluIG1vcmUgdGhhbiBvbmUgc2VuZGFsbCgpCi0gICAgICAgICMgY2FsbAotICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCi0gICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCi0gICAgICAgIGNvbm4uc29jayA9IHNvY2sKLSAgICAgICAgYm9keSA9IGIneCcgKiBjb25uLm1zcwotICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnLycsIGJvZHkpCi0gICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzb2NrLnNlbmRhbGxfY2FsbHMsIDEpCi0KICAgICBkZWYgdGVzdF9lcnJvcl9sZWFrKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB0aGUgc29ja2V0IGlzIG5vdCBsZWFrZWQgaWYgZ2V0cmVzcG9uc2UoKSBmYWlscwogICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCkBAIC03OTgsMTIgKzgwOSwzMzIgQEAKICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYgICMgQXZvaWQgZ2FyYmFnZSBjb2xsZWN0b3IgY2xvc2luZyB0aGUgc29ja2V0CiAgICAgICAgICAgICAgICAgY2xpZW50LkhUVFBSZXNwb25zZS5fX2luaXRfXyhzZWxmLCAqcG9zLCAqKmt3KQogICAgICAgICBjb25uLnJlc3BvbnNlX2NsYXNzID0gUmVzcG9uc2UKLSAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldCgnJykgICMgRW11bGF0ZSBzZXJ2ZXIgZHJvcHBpbmcgY29ubmVjdGlvbgorICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KCdJbnZhbGlkIHN0YXR1cyBsaW5lJykKICAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsaWVudC5CYWRTdGF0dXNMaW5lLCBjb25uLmdldHJlc3BvbnNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcG9uc2UuY2xvc2VkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY29ubi5zb2NrLmZpbGVfY2xvc2VkKQogCisgICAgZGVmIHRlc3RfY2h1bmtlZF9leHRlbnNpb24oc2VsZik6CisgICAgICAgIGV4dHJhID0gJzM7Zm9vPWJhclxyXG4nICsgJ2FiY1xyXG4nCisgICAgICAgIGV4cGVjdGVkID0gY2h1bmtlZF9leHBlY3RlZCArIGInYWJjJworCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGNodW5rZWRfc3RhcnQgKyBleHRyYSArIGxhc3RfY2h1bmtfZXh0ZW5kZWQgKyBjaHVua2VkX2VuZCkKKyAgICAgICAgcmVzcCA9IGNsaWVudC5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJHRVQiKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgZXhwZWN0ZWQpCisgICAgICAgIHJlc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2h1bmtlZF9taXNzaW5nX2VuZChzZWxmKToKKyAgICAgICAgIiIic29tZSBzZXJ2ZXJzIG1heSBzZXJ2ZSB1cCBhIHNob3J0IGNodW5rZWQgZW5jb2Rpbmcgc3RyZWFtIiIiCisgICAgICAgIGV4cGVjdGVkID0gY2h1bmtlZF9leHBlY3RlZAorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgbGFzdF9jaHVuaykgICNubyB0ZXJtaW5hdGluZyBjcmxmCisgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKCksIGV4cGVjdGVkKQorICAgICAgICByZXNwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NodW5rZWRfdHJhaWxlcnMoc2VsZik6CisgICAgICAgICIiIlNlZSB0aGF0IHRyYWlsZXJzIGFyZSByZWFkIGFuZCBpZ25vcmVkIiIiCisgICAgICAgIGV4cGVjdGVkID0gY2h1bmtlZF9leHBlY3RlZAorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgbGFzdF9jaHVuayArIHRyYWlsZXJzICsgY2h1bmtlZF9lbmQpCisgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKCksIGV4cGVjdGVkKQorICAgICAgICAjIHdlIHNob3VsZCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmlsZS5yZWFkKCksIGIiIikgI3dlIHJlYWQgdG8gdGhlIGVuZAorICAgICAgICByZXNwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NodW5rZWRfc3luYyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB3ZSBkb24ndCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgY2h1bmtlZC1lbmNvZGluZyBzdHJlYW0iIiIKKyAgICAgICAgZXhwZWN0ZWQgPSBjaHVua2VkX2V4cGVjdGVkCisgICAgICAgIGV4dHJhZGF0YSA9ICJleHRyYWRhdGEiCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGNodW5rZWRfc3RhcnQgKyBsYXN0X2NodW5rICsgdHJhaWxlcnMgKyBjaHVua2VkX2VuZCArIGV4dHJhZGF0YSkKKyAgICAgICAgcmVzcCA9IGNsaWVudC5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJHRVQiKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgZXhwZWN0ZWQpCisgICAgICAgICMgdGhlIGZpbGUgc2hvdWxkIG5vdyBoYXZlIG91ciBleHRyYWRhdGEgcmVhZHkgdG8gYmUgcmVhZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmlsZS5yZWFkKCksIGV4dHJhZGF0YS5lbmNvZGUoImFzY2lpIikpICN3ZSByZWFkIHRvIHRoZSBlbmQKKyAgICAgICAgcmVzcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jb250ZW50X2xlbmd0aF9zeW5jKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHdlIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBDb250ZW50LUxlbmd0aCBzdHJlYW0iIiIKKyAgICAgICAgZXh0cmFkYXRhID0gYiJleHRyYWRhdGEiCisgICAgICAgIGV4cGVjdGVkID0gYiJIZWxsbzEyM1xyXG4iCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGInSFRUUC8xLjEgMjAwIE9LXHJcbkNvbnRlbnQtTGVuZ3RoOiAxMFxyXG5cclxuJyArIGV4cGVjdGVkICsgZXh0cmFkYXRhKQorICAgICAgICByZXNwID0gY2xpZW50LkhUVFBSZXNwb25zZShzb2NrLCBtZXRob2Q9IkdFVCIpCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCBleHBlY3RlZCkKKyAgICAgICAgIyB0aGUgZmlsZSBzaG91bGQgbm93IGhhdmUgb3VyIGV4dHJhZGF0YSByZWFkeSB0byBiZSByZWFkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5maWxlLnJlYWQoKSwgZXh0cmFkYXRhKSAjd2UgcmVhZCB0byB0aGUgZW5kCisgICAgICAgIHJlc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBleHRyYWRhdGEgPSBiImV4dHJhZGF0YSIKKyAgICAgICAgZXhwZWN0ZWQgPSBiIkhlbGxvMTIzXHJcbiIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYidIVFRQLzEuMSAyMDAgT0tcclxuQ29udGVudC1MZW5ndGg6IDEwXHJcblxyXG4nICsgZXhwZWN0ZWQgKyBleHRyYWRhdGEpCisgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkbGluZXMoMjAwMCksIFtleHBlY3RlZF0pCisgICAgICAgICMgdGhlIGZpbGUgc2hvdWxkIG5vdyBoYXZlIG91ciBleHRyYWRhdGEgcmVhZHkgdG8gYmUgcmVhZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmlsZS5yZWFkKCksIGV4dHJhZGF0YSkgI3dlIHJlYWQgdG8gdGhlIGVuZAorICAgICAgICByZXNwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3JlYWQxX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBleHRyYWRhdGEgPSBiImV4dHJhZGF0YSIKKyAgICAgICAgZXhwZWN0ZWQgPSBiIkhlbGxvMTIzXHJcbiIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYidIVFRQLzEuMSAyMDAgT0tcclxuQ29udGVudC1MZW5ndGg6IDEwXHJcblxyXG4nICsgZXhwZWN0ZWQgKyBleHRyYWRhdGEpCisgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkMSgyMDAwKSwgZXhwZWN0ZWQpCisgICAgICAgICMgdGhlIGZpbGUgc2hvdWxkIG5vdyBoYXZlIG91ciBleHRyYWRhdGEgcmVhZHkgdG8gYmUgcmVhZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmlsZS5yZWFkKCksIGV4dHJhZGF0YSkgI3dlIHJlYWQgdG8gdGhlIGVuZAorICAgICAgICByZXNwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2JvdW5kX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBleHRyYWRhdGEgPSBiImV4dHJhZGF0YSIKKyAgICAgICAgZXhwZWN0ZWQgPSBiIkhlbGxvMTIzXHJcbiIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYidIVFRQLzEuMSAyMDAgT0tcclxuQ29udGVudC1MZW5ndGg6IDEwXHJcblxyXG4nICsgZXhwZWN0ZWQgKyBleHRyYWRhdGEpCisgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkbGluZSgxMCksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZGxpbmUoMTApLCBiIiIpCisgICAgICAgICMgdGhlIGZpbGUgc2hvdWxkIG5vdyBoYXZlIG91ciBleHRyYWRhdGEgcmVhZHkgdG8gYmUgcmVhZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmlsZS5yZWFkKCksIGV4dHJhZGF0YSkgI3dlIHJlYWQgdG8gdGhlIGVuZAorICAgICAgICByZXNwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3JlYWQxX2JvdW5kX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBleHRyYWRhdGEgPSBiImV4dHJhZGF0YSIKKyAgICAgICAgZXhwZWN0ZWQgPSBiIkhlbGxvMTIzXHJcbiIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYidIVFRQLzEuMSAyMDAgT0tcclxuQ29udGVudC1MZW5ndGg6IDMwXHJcblxyXG4nICsgZXhwZWN0ZWQqMyArIGV4dHJhZGF0YSkKKyAgICAgICAgcmVzcCA9IGNsaWVudC5IVFRQUmVzcG9uc2Uoc29jaywgbWV0aG9kPSJHRVQiKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQxKDIwKSwgZXhwZWN0ZWQqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgZXhwZWN0ZWQpCisgICAgICAgICMgdGhlIGZpbGUgc2hvdWxkIG5vdyBoYXZlIG91ciBleHRyYWRhdGEgcmVhZHkgdG8gYmUgcmVhZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmlsZS5yZWFkKCksIGV4dHJhZGF0YSkgI3dlIHJlYWQgdG8gdGhlIGVuZAorICAgICAgICByZXNwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3Jlc3BvbnNlX2ZpbGVubyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgZmQgcmV0dXJuZWQgYnkgZmlsZW5vIGlzIHZhbGlkLgorICAgICAgICB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInRocmVhZGluZyIpCisKKyAgICAgICAgc2VydiA9IHNvY2tldC5zb2NrZXQoCisgICAgICAgICAgICBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNLCBzb2NrZXQuSVBQUk9UT19UQ1ApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXJ2LmNsb3NlKQorICAgICAgICBzZXJ2LmJpbmQoKEhPU1QsIDApKQorICAgICAgICBzZXJ2Lmxpc3RlbigpCisKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgICAgICBkZWYgcnVuX3NlcnZlcigpOgorICAgICAgICAgICAgW2Nvbm4sIGFkZHJlc3NdID0gc2Vydi5hY2NlcHQoKQorICAgICAgICAgICAgd2l0aCBjb25uLCBjb25uLm1ha2VmaWxlKCJyYiIpIGFzIHJlYWRlcjoKKyAgICAgICAgICAgICAgICAjIFJlYWQgdGhlIHJlcXVlc3QgaGVhZGVyIHVudGlsIGEgYmxhbmsgbGluZQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZS5yc3RyaXAoYiJcclxuIik6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChiIkhUVFAvMS4xIDIwMCBDb25uZWN0aW9uIGVzdGFibGlzaGVkXHJcblxyXG4iKQorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHJlc3VsdAorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRlci5yZWFkKCkKKworICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW5fc2VydmVyKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCpzZXJ2LmdldHNvY2tuYW1lKCkpCisgICAgICAgIGNvbm4ucmVxdWVzdCgiQ09OTkVDVCIsICJkdW1teToxMjM0IikKKyAgICAgICAgcmVzcG9uc2UgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXMsIGNsaWVudC5PSykKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KGZpbGVubz1yZXNwb25zZS5maWxlbm8oKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLnNlbmRhbGwoYiJwcm94aWVkIGRhdGFcbiIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuZGV0YWNoKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYiJwcm94aWVkIGRhdGFcbiIpCisKK2NsYXNzIEV4dGVuZGVkUmVhZFRlc3QoVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgcGVlaygpLCByZWFkMSgpLCByZWFkbGluZSgpCisgICAgIiIiCisgICAgbGluZXMgPSAoCisgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAnXHJcbicKKyAgICAgICAgJ2hlbGxvIHdvcmxkIVxuJworICAgICAgICAnYW5kIG5vdyBcbicKKyAgICAgICAgJ2ZvciBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnRcbicKKyAgICAgICAgJ2ZvbycKKyAgICAgICAgKQorICAgIGxpbmVzX2V4cGVjdGVkID0gbGluZXNbbGluZXMuZmluZCgnaGVsbG8nKTpdLmVuY29kZSgiYXNjaWkiKQorICAgIGxpbmVzX2NodW5rZWQgPSAoCisgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAnVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcclxuXHJcbicKKyAgICAgICAgJ2FcclxuJworICAgICAgICAnaGVsbG8gd29ybFxyXG4nCisgICAgICAgICczXHJcbicKKyAgICAgICAgJ2QhXG5cclxuJworICAgICAgICAnOVxyXG4nCisgICAgICAgICdhbmQgbm93IFxuXHJcbicKKyAgICAgICAgJzIzXHJcbicKKyAgICAgICAgJ2ZvciBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnRcblxyXG4nCisgICAgICAgICczXHJcbicKKyAgICAgICAgJ2Zvb1xyXG4nCisgICAgICAgICcwXHJcbicgIyB0ZXJtaW5hdGluZyBjaHVuaworICAgICAgICAnXHJcbicgICMgZW5kIG9mIHRyYWlsZXJzCisgICAgKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChzZWxmLmxpbmVzKQorICAgICAgICByZXNwID0gY2xpZW50LkhUVFBSZXNwb25zZShzb2NrLCBtZXRob2Q9IkdFVCIpCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICByZXNwLmZwID0gaW8uQnVmZmVyZWRSZWFkZXIocmVzcC5mcCkKKyAgICAgICAgc2VsZi5yZXNwID0gcmVzcAorCisKKworICAgIGRlZiB0ZXN0X3BlZWsoc2VsZik6CisgICAgICAgIHJlc3AgPSBzZWxmLnJlc3AKKyAgICAgICAgIyBwYXRjaCB1cCB0aGUgYnVmZmVyZWQgcGVlayBzbyB0aGF0IGl0IHJldHVybnMgbm90IHRvbyBtdWNoIHN0dWZmCisgICAgICAgIG9sZHBlZWsgPSByZXNwLmZwLnBlZWsKKyAgICAgICAgZGVmIG15cGVlayhuPS0xKToKKyAgICAgICAgICAgIHAgPSBvbGRwZWVrKG4pCisgICAgICAgICAgICBpZiBuID49IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBbOm5dCisgICAgICAgICAgICByZXR1cm4gcFs6MTBdCisgICAgICAgIHJlc3AuZnAucGVlayA9IG15cGVlaworCisgICAgICAgIGFsbCA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIHRyeSBhIHNob3J0IHBlZWsKKyAgICAgICAgICAgIHAgPSByZXNwLnBlZWsoMykKKyAgICAgICAgICAgIGlmIHA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihwKSwgMCkKKyAgICAgICAgICAgICAgICAjIHRoZW4gdW5ib3VuZGVkIHBlZWsKKyAgICAgICAgICAgICAgICBwMiA9IHJlc3AucGVlaygpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKHAyKSwgbGVuKHApKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwMi5zdGFydHN3aXRoKHApKQorICAgICAgICAgICAgICAgIG5leHQgPSByZXNwLnJlYWQobGVuKHAyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQsIHAyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXh0ID0gcmVzcC5yZWFkKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5leHQpCisgICAgICAgICAgICBhbGwuYXBwZW5kKG5leHQpCisgICAgICAgICAgICBpZiBub3QgbmV4dDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIi5qb2luKGFsbCksIHNlbGYubGluZXNfZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgcmVzcCA9IHNlbGYucmVzcAorICAgICAgICBzZWxmLl92ZXJpZnlfcmVhZGxpbmUoc2VsZi5yZXNwLnJlYWRsaW5lLCBzZWxmLmxpbmVzX2V4cGVjdGVkKQorCisgICAgZGVmIF92ZXJpZnlfcmVhZGxpbmUoc2VsZiwgcmVhZGxpbmUsIGV4cGVjdGVkKToKKyAgICAgICAgYWxsID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgc2hvcnQgcmVhZGxpbmVzCisgICAgICAgICAgICBsaW5lID0gcmVhZGxpbmUoNSkKKyAgICAgICAgICAgIGlmIGxpbmUgYW5kIGxpbmUgIT0gYiJmb28iOgorICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA8IDU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lLmVuZHN3aXRoKGIiXG4iKSkKKyAgICAgICAgICAgIGFsbC5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLmpvaW4oYWxsKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWFkMShzZWxmKToKKyAgICAgICAgcmVzcCA9IHNlbGYucmVzcAorICAgICAgICBkZWYgcigpOgorICAgICAgICAgICAgcmVzID0gcmVzcC5yZWFkMSg0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobGVuKHJlcyksIDQpCisgICAgICAgICAgICByZXR1cm4gcmVzCisgICAgICAgIHJlYWRsaW5lciA9IFJlYWRsaW5lcihyKQorICAgICAgICBzZWxmLl92ZXJpZnlfcmVhZGxpbmUocmVhZGxpbmVyLnJlYWRsaW5lLCBzZWxmLmxpbmVzX2V4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVhZDFfdW5ib3VuZGVkKHNlbGYpOgorICAgICAgICByZXNwID0gc2VsZi5yZXNwCisgICAgICAgIGFsbCA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBkYXRhID0gcmVzcC5yZWFkMSgpCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYWxsLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIi5qb2luKGFsbCksIHNlbGYubGluZXNfZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWFkMV9ib3VuZGVkKHNlbGYpOgorICAgICAgICByZXNwID0gc2VsZi5yZXNwCisgICAgICAgIGFsbCA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBkYXRhID0gcmVzcC5yZWFkMSgxMCkKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4oZGF0YSksIDEwKQorICAgICAgICAgICAgYWxsLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIi5qb2luKGFsbCksIHNlbGYubGluZXNfZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yZWFkMV8wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVzcC5yZWFkMSgwKSwgYiIiKQorCisgICAgZGVmIHRlc3RfcGVla18wKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5yZXNwLnBlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMCwgbGVuKHApKQorCitjbGFzcyBFeHRlbmRlZFJlYWRUZXN0Q2h1bmtlZChFeHRlbmRlZFJlYWRUZXN0KToKKyAgICAiIiIKKyAgICBUZXN0IHBlZWsoKSwgcmVhZDEoKSwgcmVhZGxpbmUoKSBpbiBjaHVua2VkIG1vZGUKKyAgICAiIiIKKyAgICBsaW5lcyA9ICgKKyAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCisgICAgICAgICdUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxyXG5cclxuJworICAgICAgICAnYVxyXG4nCisgICAgICAgICdoZWxsbyB3b3JsXHJcbicKKyAgICAgICAgJzNcclxuJworICAgICAgICAnZCFcblxyXG4nCisgICAgICAgICc5XHJcbicKKyAgICAgICAgJ2FuZCBub3cgXG5cclxuJworICAgICAgICAnMjNcclxuJworICAgICAgICAnZm9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudFxuXHJcbicKKyAgICAgICAgJzNcclxuJworICAgICAgICAnZm9vXHJcbicKKyAgICAgICAgJzBcclxuJyAjIHRlcm1pbmF0aW5nIGNodW5rCisgICAgICAgICdcclxuJyAgIyBlbmQgb2YgdHJhaWxlcnMKKyAgICApCisKKworY2xhc3MgUmVhZGxpbmVyOgorICAgICIiIgorICAgIGEgc2ltcGxlIHJlYWRsaW5lIGNsYXNzIHRoYXQgdXNlcyBhbiBhcmJpdHJhcnkgcmVhZCBmdW5jdGlvbiBhbmQgYnVmZmVyaW5nCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYWRmdW5jKToKKyAgICAgICAgc2VsZi5yZWFkZnVuYyA9IHJlYWRmdW5jCisgICAgICAgIHNlbGYucmVtYWluZGVyID0gYiIiCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQpOgorICAgICAgICBkYXRhID0gW10KKyAgICAgICAgZGF0YWxlbiA9IDAKKyAgICAgICAgcmVhZCA9IHNlbGYucmVtYWluZGVyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgaWR4ID0gcmVhZC5maW5kKGInXG4nKQorICAgICAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBkYXRhbGVuICsgbGVuKHJlYWQpID49IGxpbWl0OgorICAgICAgICAgICAgICAgICAgICBpZHggPSBsaW1pdCAtIGRhdGFsZW4gLSAxCisgICAgICAgICAgICAgICAgIyByZWFkIG1vcmUgZGF0YQorICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHJlYWQpCisgICAgICAgICAgICAgICAgcmVhZCA9IHNlbGYucmVhZGZ1bmMoKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkOgorICAgICAgICAgICAgICAgICAgICBpZHggPSAwICNlb2YgY29uZGl0aW9uCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZHggKz0gMQorICAgICAgICAgICAgZGF0YS5hcHBlbmQocmVhZFs6aWR4XSkKKyAgICAgICAgICAgIHNlbGYucmVtYWluZGVyID0gcmVhZFtpZHg6XQorICAgICAgICAgICAgcmV0dXJuIGIiIi5qb2luKGRhdGEpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYucmVtYWluZGVyID0gYiIiLmpvaW4oZGF0YSkKKyAgICAgICAgICAgIHJhaXNlCisKIAogY2xhc3MgT2ZmbGluZVRlc3QoVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2FsbChzZWxmKToKQEAgLTgxMyw3ICsxMTQ0LDcgQEAKICAgICAgICAgIyBpbnRlbnRpb25hbGx5IG9taXR0ZWQgZm9yIHNpbXBsaWNpdHkKICAgICAgICAgYmxhY2tsaXN0ID0geyJIVFRQTWVzc2FnZSIsICJwYXJzZV9oZWFkZXJzIn0KICAgICAgICAgZm9yIG5hbWUgaW4gZGlyKGNsaWVudCk6Ci0gICAgICAgICAgICBpZiBuYW1lIGluIGJsYWNrbGlzdDoKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiXyIpIG9yIG5hbWUgaW4gYmxhY2tsaXN0OgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBtb2R1bGVfb2JqZWN0ID0gZ2V0YXR0cihjbGllbnQsIG5hbWUpCiAgICAgICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZV9vYmplY3QsICJfX21vZHVsZV9fIiwgTm9uZSkgPT0gImh0dHAuY2xpZW50IjoKQEAgLTgyMywxMyArMTE1NCw3NCBAQAogICAgIGRlZiB0ZXN0X3Jlc3BvbnNlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQucmVzcG9uc2VzW2NsaWVudC5OT1RfRk9VTkRdLCAiTm90IEZvdW5kIikKIAorICAgIGRlZiB0ZXN0X2NsaWVudF9jb25zdGFudHMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHdlIGRvbid0IGJyZWFrIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCAzLjQKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAnQ09OVElOVUUnLAorICAgICAgICAgICAgJ1NXSVRDSElOR19QUk9UT0NPTFMnLAorICAgICAgICAgICAgJ1BST0NFU1NJTkcnLAorICAgICAgICAgICAgJ09LJywKKyAgICAgICAgICAgICdDUkVBVEVEJywKKyAgICAgICAgICAgICdBQ0NFUFRFRCcsCisgICAgICAgICAgICAnTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04nLAorICAgICAgICAgICAgJ05PX0NPTlRFTlQnLAorICAgICAgICAgICAgJ1JFU0VUX0NPTlRFTlQnLAorICAgICAgICAgICAgJ1BBUlRJQUxfQ09OVEVOVCcsCisgICAgICAgICAgICAnTVVMVElfU1RBVFVTJywKKyAgICAgICAgICAgICdJTV9VU0VEJywKKyAgICAgICAgICAgICdNVUxUSVBMRV9DSE9JQ0VTJywKKyAgICAgICAgICAgICdNT1ZFRF9QRVJNQU5FTlRMWScsCisgICAgICAgICAgICAnRk9VTkQnLAorICAgICAgICAgICAgJ1NFRV9PVEhFUicsCisgICAgICAgICAgICAnTk9UX01PRElGSUVEJywKKyAgICAgICAgICAgICdVU0VfUFJPWFknLAorICAgICAgICAgICAgJ1RFTVBPUkFSWV9SRURJUkVDVCcsCisgICAgICAgICAgICAnQkFEX1JFUVVFU1QnLAorICAgICAgICAgICAgJ1VOQVVUSE9SSVpFRCcsCisgICAgICAgICAgICAnUEFZTUVOVF9SRVFVSVJFRCcsCisgICAgICAgICAgICAnRk9SQklEREVOJywKKyAgICAgICAgICAgICdOT1RfRk9VTkQnLAorICAgICAgICAgICAgJ01FVEhPRF9OT1RfQUxMT1dFRCcsCisgICAgICAgICAgICAnTk9UX0FDQ0VQVEFCTEUnLAorICAgICAgICAgICAgJ1BST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEJywKKyAgICAgICAgICAgICdSRVFVRVNUX1RJTUVPVVQnLAorICAgICAgICAgICAgJ0NPTkZMSUNUJywKKyAgICAgICAgICAgICdHT05FJywKKyAgICAgICAgICAgICdMRU5HVEhfUkVRVUlSRUQnLAorICAgICAgICAgICAgJ1BSRUNPTkRJVElPTl9GQUlMRUQnLAorICAgICAgICAgICAgJ1JFUVVFU1RfRU5USVRZX1RPT19MQVJHRScsCisgICAgICAgICAgICAnUkVRVUVTVF9VUklfVE9PX0xPTkcnLAorICAgICAgICAgICAgJ1VOU1VQUE9SVEVEX01FRElBX1RZUEUnLAorICAgICAgICAgICAgJ1JFUVVFU1RFRF9SQU5HRV9OT1RfU0FUSVNGSUFCTEUnLAorICAgICAgICAgICAgJ0VYUEVDVEFUSU9OX0ZBSUxFRCcsCisgICAgICAgICAgICAnVU5QUk9DRVNTQUJMRV9FTlRJVFknLAorICAgICAgICAgICAgJ0xPQ0tFRCcsCisgICAgICAgICAgICAnRkFJTEVEX0RFUEVOREVOQ1knLAorICAgICAgICAgICAgJ1VQR1JBREVfUkVRVUlSRUQnLAorICAgICAgICAgICAgJ1BSRUNPTkRJVElPTl9SRVFVSVJFRCcsCisgICAgICAgICAgICAnVE9PX01BTllfUkVRVUVTVFMnLAorICAgICAgICAgICAgJ1JFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UnLAorICAgICAgICAgICAgJ0lOVEVSTkFMX1NFUlZFUl9FUlJPUicsCisgICAgICAgICAgICAnTk9UX0lNUExFTUVOVEVEJywKKyAgICAgICAgICAgICdCQURfR0FURVdBWScsCisgICAgICAgICAgICAnU0VSVklDRV9VTkFWQUlMQUJMRScsCisgICAgICAgICAgICAnR0FURVdBWV9USU1FT1VUJywKKyAgICAgICAgICAgICdIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRCcsCisgICAgICAgICAgICAnSU5TVUZGSUNJRU5UX1NUT1JBR0UnLAorICAgICAgICAgICAgJ05PVF9FWFRFTkRFRCcsCisgICAgICAgICAgICAnTkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRCcsCisgICAgICAgIF0KKyAgICAgICAgZm9yIGNvbnN0IGluIGV4cGVjdGVkOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY29uc3RhbnQ9Y29uc3QpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGNsaWVudCwgY29uc3QpKQorCiAKIGNsYXNzIFNvdXJjZUFkZHJlc3NUZXN0KFRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5wb3J0ID0gc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zZXJ2KQogICAgICAgICBzZWxmLnNvdXJjZV9wb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKLSAgICAgICAgc2VsZi5zZXJ2Lmxpc3Rlbig1KQorICAgICAgICBzZWxmLnNlcnYubGlzdGVuKCkKICAgICAgICAgc2VsZi5jb25uID0gTm9uZQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtODYxLDcgKzEyNTMsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBUaW1lb3V0VGVzdC5QT1JUID0gc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zZXJ2KQotICAgICAgICBzZWxmLnNlcnYubGlzdGVuKDUpCisgICAgICAgIHNlbGYuc2Vydi5saXN0ZW4oKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnYuY2xvc2UoKQpAQCAtOTAxLDYgKzEyOTMsNzggQEAKICAgICAgICAgaHR0cENvbm4uY2xvc2UoKQogCiAKK2NsYXNzIFBlcnNpc3RlbmNlVGVzdChUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yZXVzZV9yZWNvbm5lY3Qoc2VsZik6CisgICAgICAgICMgU2hvdWxkIHJldXNlIG9yIHJlY29ubmVjdCBkZXBlbmRpbmcgb24gaGVhZGVyIGZyb20gc2VydmVyCisgICAgICAgIHRlc3RzID0gKAorICAgICAgICAgICAgKCcxLjAnLCAnJywgRmFsc2UpLAorICAgICAgICAgICAgKCcxLjAnLCAnQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxyXG4nLCBUcnVlKSwKKyAgICAgICAgICAgICgnMS4xJywgJycsIFRydWUpLAorICAgICAgICAgICAgKCcxLjEnLCAnQ29ubmVjdGlvbjogY2xvc2VcclxuJywgRmFsc2UpLAorICAgICAgICAgICAgKCcxLjAnLCAnQ29ubmVjdGlvbjoga2VlcC1BTElWRVxyXG4nLCBUcnVlKSwKKyAgICAgICAgICAgICgnMS4xJywgJ0Nvbm5lY3Rpb246IGNsb1NFXHJcbicsIEZhbHNlKSwKKyAgICAgICAgKQorICAgICAgICBmb3IgdmVyc2lvbiwgaGVhZGVyLCByZXVzZSBpbiB0ZXN0czoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHZlcnNpb249dmVyc2lvbiwgaGVhZGVyPWhlYWRlcik6CisgICAgICAgICAgICAgICAgbXNnID0gKAorICAgICAgICAgICAgICAgICAgICAnSFRUUC97fSAyMDAgT0tcclxuJworICAgICAgICAgICAgICAgICAgICAne30nCisgICAgICAgICAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogMTJcclxuJworICAgICAgICAgICAgICAgICAgICAnXHJcbicKKyAgICAgICAgICAgICAgICAgICAgJ0R1bW15IGJvZHlcclxuJworICAgICAgICAgICAgICAgICkuZm9ybWF0KHZlcnNpb24sIGhlYWRlcikKKyAgICAgICAgICAgICAgICBjb25uID0gRmFrZVNvY2tldEhUVFBDb25uZWN0aW9uKG1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb25uLnNvY2spCisgICAgICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL29wZW4tY29ubmVjdGlvbicpCisgICAgICAgICAgICAgICAgd2l0aCBjb25uLmdldHJlc3BvbnNlKCkgYXMgcmVzcG9uc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5zb2NrIGlzIE5vbmUsIG5vdCByZXVzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnNvY2sgaXMgTm9uZSwgbm90IHJldXNlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5jb25uZWN0aW9ucywgMSkKKyAgICAgICAgICAgICAgICBjb25uLnJlcXVlc3QoJ0dFVCcsICcvc3Vic2VxdWVudC1yZXF1ZXN0JykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uY29ubmVjdGlvbnMsIDEgaWYgcmV1c2UgZWxzZSAyKQorCisgICAgZGVmIHRlc3RfZGlzY29ubmVjdGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBtYWtlX3Jlc2V0X3JlYWRlcih0ZXh0KToKKyAgICAgICAgICAgICIiIlJldHVybiBCdWZmZXJlZFJlYWRlciB0aGF0IHJhaXNlcyBFQ09OTlJFU0VUIGF0IEVPRiIiIgorICAgICAgICAgICAgc3RyZWFtID0gaW8uQnl0ZXNJTyh0ZXh0KQorICAgICAgICAgICAgZGVmIHJlYWRpbnRvKGJ1ZmZlcik6CisgICAgICAgICAgICAgICAgc2l6ZSA9IGlvLkJ5dGVzSU8ucmVhZGludG8oc3RyZWFtLCBidWZmZXIpCisgICAgICAgICAgICAgICAgaWYgc2l6ZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNpemUKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkaW50byA9IHJlYWRpbnRvCisgICAgICAgICAgICByZXR1cm4gaW8uQnVmZmVyZWRSZWFkZXIoc3RyZWFtKQorCisgICAgICAgIHRlc3RzID0gKAorICAgICAgICAgICAgKGlvLkJ5dGVzSU8sIGNsaWVudC5SZW1vdGVEaXNjb25uZWN0ZWQpLAorICAgICAgICAgICAgKG1ha2VfcmVzZXRfcmVhZGVyLCBDb25uZWN0aW9uUmVzZXRFcnJvciksCisgICAgICAgICkKKyAgICAgICAgZm9yIHN0cmVhbV9mYWN0b3J5LCBleGNlcHRpb24gaW4gdGVzdHM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChleGNlcHRpb249ZXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBjb25uID0gRmFrZVNvY2tldEhUVFBDb25uZWN0aW9uKGInJywgc3RyZWFtX2ZhY3RvcnkpCisgICAgICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL2VvZi1yZXNwb25zZScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBjb25uLmdldHJlc3BvbnNlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbm4uc29jaykKKyAgICAgICAgICAgICAgICAjIEhUVFBDb25uZWN0aW9uLmNvbm5lY3QoKSBzaG91bGQgYmUgYXV0b21hdGljYWxseSBpbnZva2VkCisgICAgICAgICAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL3JlY29ubmVjdCcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLmNvbm5lY3Rpb25zLCAyKQorCisgICAgZGVmIHRlc3RfMTAwX2Nsb3NlKHNlbGYpOgorICAgICAgICBjb25uID0gRmFrZVNvY2tldEhUVFBDb25uZWN0aW9uKAorICAgICAgICAgICAgYidIVFRQLzEuMSAxMDAgQ29udGludWVcclxuJworICAgICAgICAgICAgYidcclxuJworICAgICAgICAgICAgIyBNaXNzaW5nIGZpbmFsIHJlc3BvbnNlCisgICAgICAgICkKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnLycsIGhlYWRlcnM9eydFeHBlY3QnOiAnMTAwLWNvbnRpbnVlJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNsaWVudC5SZW1vdGVEaXNjb25uZWN0ZWQsIGNvbm4uZ2V0cmVzcG9uc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbm4uc29jaykKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL3JlY29ubmVjdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5jb25uZWN0aW9ucywgMikKKworCiBjbGFzcyBIVFRQU1Rlc3QoVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTE3MSwxNyArMTYzNSwxOCBAQAogICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nICMgUmVwbHkgdG8gSEVBRAogICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiA0MlxyXG5cclxuJwogICAgICAgICApCi0KLSAgICAgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MsIHRpbWVvdXQ9Tm9uZSwgc291cmNlX2FkZHJlc3M9Tm9uZSk6Ci0gICAgICAgICAgICByZXR1cm4gRmFrZVNvY2tldChyZXNwb25zZV90ZXh0LCBob3N0PWFkZHJlc3NbMF0sIHBvcnQ9YWRkcmVzc1sxXSkKLQogICAgICAgICBzZWxmLmhvc3QgPSAncHJveHkuY29tJwogICAgICAgICBzZWxmLmNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oc2VsZi5ob3N0KQotICAgICAgICBzZWxmLmNvbm4uX2NyZWF0ZV9jb25uZWN0aW9uID0gY3JlYXRlX2Nvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5jb25uLl9jcmVhdGVfY29ubmVjdGlvbiA9IHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uKHJlc3BvbnNlX3RleHQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY29ubi5jbG9zZSgpCiAKKyAgICBkZWYgX2NyZWF0ZV9jb25uZWN0aW9uKHNlbGYsIHJlc3BvbnNlX3RleHQpOgorICAgICAgICBkZWYgY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcywgdGltZW91dD1Ob25lLCBzb3VyY2VfYWRkcmVzcz1Ob25lKToKKyAgICAgICAgICAgIHJldHVybiBGYWtlU29ja2V0KHJlc3BvbnNlX3RleHQsIGhvc3Q9YWRkcmVzc1swXSwgcG9ydD1hZGRyZXNzWzFdKQorICAgICAgICByZXR1cm4gY3JlYXRlX2Nvbm5lY3Rpb24KKwogICAgIGRlZiB0ZXN0X3NldF90dW5uZWxfaG9zdF9wb3J0X2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHR1bm5lbF9ob3N0ID0gJ2Rlc3RpbmF0aW9uLmNvbScKICAgICAgICAgdHVubmVsX3BvcnQgPSA4ODg4CkBAIC0xMjIyLDEzICsxNjg3LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidDT05ORUNUIGRlc3RpbmF0aW9uLmNvbScsIHNlbGYuY29ubi5zb2NrLmRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidIb3N0OiBkZXN0aW5hdGlvbi5jb20nLCBzZWxmLmNvbm4uc29jay5kYXRhKQogCisgICAgZGVmIHRlc3RfdHVubmVsX2RlYnVnbG9nKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9oZWFkZXIgPSAnWC1EdW1teTogMScKKyAgICAgICAgcmVzcG9uc2VfdGV4dCA9ICdIVFRQLzEuMCAyMDAgT0tcclxue31cclxuXHJcbicuZm9ybWF0KGV4cGVjdGVkX2hlYWRlcikKKworICAgICAgICBzZWxmLmNvbm4uc2V0X2RlYnVnbGV2ZWwoMSkKKyAgICAgICAgc2VsZi5jb25uLl9jcmVhdGVfY29ubmVjdGlvbiA9IHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uKHJlc3BvbnNlX3RleHQpCisgICAgICAgIHNlbGYuY29ubi5zZXRfdHVubmVsKCdkZXN0aW5hdGlvbi5jb20nKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmNvbm4ucmVxdWVzdCgnUFVUJywgJy8nLCAnJykKKyAgICAgICAgbGluZXMgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaGVhZGVyOiB7fScuZm9ybWF0KGV4cGVjdGVkX2hlYWRlciksIGxpbmVzKQogCiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEhlYWRlclRlc3RzLCBPZmZsaW5lVGVzdCwgQmFzaWNUZXN0LCBUaW1lb3V0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQZXJzaXN0ZW5jZVRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFNUZXN0LCBSZXF1ZXN0Qm9keVRlc3QsIFNvdXJjZUFkZHJlc3NUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBSZXNwb25zZVRlc3QsIFR1bm5lbFRlc3RzKQorICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBSZXNwb25zZVRlc3QsIEV4dGVuZGVkUmVhZFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWRSZWFkVGVzdENodW5rZWQsIFR1bm5lbFRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5IGIvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQppbmRleCA2ZTVmMmRiLi43MmU2ZTA4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKQEAgLTYsMTIgKzYsMTMgQEAKIAogZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgSFRUUFNlcnZlciwgXAogICAgICBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIsIENHSUhUVFBSZXF1ZXN0SGFuZGxlcgotZnJvbSBodHRwIGltcG9ydCBzZXJ2ZXIKK2Zyb20gaHR0cCBpbXBvcnQgc2VydmVyLCBIVFRQU3RhdHVzCiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHJlCiBpbXBvcnQgYmFzZTY0CitpbXBvcnQgbnRwYXRoCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdXJsbGliLnBhcnNlCiBpbXBvcnQgaHRtbApAQCAtNzksMTMgKzgwLDEzIEBACiAgICAgICAgIGRlZmF1bHRfcmVxdWVzdF92ZXJzaW9uID0gJ0hUVFAvMS4xJwogCiAgICAgICAgIGRlZiBkb19URVNUKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwNCkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShIVFRQU3RhdHVzLk5PX0NPTlRFTlQpCiAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJykKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKQogICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAKICAgICAgICAgZGVmIGRvX0tFRVAoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjA0KQorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKEhUVFBTdGF0dXMuTk9fQ09OVEVOVCkKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQogICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdrZWVwLWFsaXZlJykKICAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQpAQCAtOTQsMTEgKzk1LDExIEBACiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoOTk5KQogCiAgICAgICAgIGRlZiBkb19OT1RGT1VORChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQpCisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoSFRUUFN0YXR1cy5OT1RfRk9VTkQpCiAKICAgICAgICAgZGVmIGRvX0VYUExBSU5FUlJPUihzZWxmKToKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig5OTksICJTaG9ydCBNZXNzYWdlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIGxvbmcgXG4gZXhwbGFpbmF0aW9uIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIGxvbmcgXG4gZXhwbGFuYXRpb24iKQogCiAgICAgICAgIGRlZiBkb19DVVNUT00oc2VsZik6CiAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoOTk5KQpAQCAtMTE0LDYgKzExNSwxMiBAQAogICAgICAgICAgICAgYm9keSA9IHNlbGYuaGVhZGVyc1sneC1zcGVjaWFsLWluY29taW5nJ10uZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGJvZHkpCiAKKyAgICAgICAgZGVmIGRvX1NFTkRfRVJST1Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoaW50KHNlbGYucGF0aFsxOl0pKQorCisgICAgICAgIGRlZiBkb19IRUFEKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKGludChzZWxmLnBhdGhbMTpdKSkKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3RDYXNlLnNldFVwKHNlbGYpCiAgICAgICAgIHNlbGYuY29uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oc2VsZi5IT1NULCBzZWxmLlBPUlQpCkBAIC0xMjIsMzUgKzEyOSwzNSBAQAogICAgIGRlZiB0ZXN0X2NvbW1hbmQoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCBIVFRQU3RhdHVzLk5PVF9JTVBMRU1FTlRFRCkKIAogICAgIGRlZiB0ZXN0X3JlcXVlc3RfbGluZV90cmltbWluZyhzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdIVFRQLzEuMVxuJwogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdYWVpCT0dVUycsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgSFRUUFN0YXR1cy5OT1RfSU1QTEVNRU5URUQpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2JvZ3VzKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJ0ZVQkFSJwogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIEhUVFBTdGF0dXMuQkFEX1JFUVVFU1QpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2RpZ2l0cyhzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdIVFRQLzkuOS45JwogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIEhUVFBTdGF0dXMuQkFEX1JFUVVFU1QpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX25vbmVfZ2V0KHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJycKICAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCBIVFRQU3RhdHVzLk5PVF9JTVBMRU1FTlRFRCkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9uZShzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYSB2YWxpZCBtZXRob2QgaXMgcmVqZWN0ZWQgd2hlbiBub3QgSFRUUC8xLngKQEAgLTE1OCw3ICsxNjUsNyBAQAogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdDVVNUT00nLCAnLycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIEhUVFBTdGF0dXMuQkFEX1JFUVVFU1QpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2ludmFsaWQoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3ZzbiA9IDk5CkBAIC0xNjYsMjEgKzE3MywyMSBAQAogICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIEhUVFBTdGF0dXMuSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQpCiAKICAgICBkZWYgdGVzdF9zZW5kX2JsYW5rKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJycKICAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnJywgJycpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIEhUVFBTdGF0dXMuQkFEX1JFUVVFU1QpCiAKICAgICBkZWYgdGVzdF9oZWFkZXJfY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgc2VsZi5jb24ucHV0aGVhZGVyKCdDb25uZWN0aW9uJywgJ2Nsb3NlJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgSFRUUFN0YXR1cy5OT1RfSU1QTEVNRU5URUQpCiAKICAgICBkZWYgdGVzdF9oZWFkX2tlZXBfYWxpdmUoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnSFRUUC8xLjEnCkBAIC0xODgsMTIgKzE5NSwxMiBAQAogICAgICAgICBzZWxmLmNvbi5wdXRoZWFkZXIoJ0Nvbm5lY3Rpb24nLCAna2VlcC1hbGl2ZScpCiAgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIEhUVFBTdGF0dXMuTk9UX0lNUExFTUVOVEVEKQogCiAgICAgZGVmIHRlc3RfaGFuZGxlcihzZWxmKToKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnVEVTVCcsICcvJykKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDIwNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCBIVFRQU3RhdHVzLk5PX0NPTlRFTlQpCiAKICAgICBkZWYgdGVzdF9yZXR1cm5faGVhZGVyX2tlZXBfYWxpdmUoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0tFRVAnLCAnLycpCkBAIC0yMzAsMTAgKzIzNyw4NSBAQAogICAgICAgICAjIElzc3VlICMxNjA4ODogc3RhbmRhcmQgZXJyb3IgcmVzcG9uc2VzIHNob3VsZCBoYXZlIGEgY29udGVudC1sZW5ndGgKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnTk9URk9VTkQnLCAnLycpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgSFRUUFN0YXR1cy5OT1RfRk9VTkQpCisKICAgICAgICAgZGF0YSA9IHJlcy5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSksIGxlbihkYXRhKSkKIAorICAgIGRlZiB0ZXN0X3NlbmRfZXJyb3Ioc2VsZik6CisgICAgICAgIGFsbG93X3RyYW5zZmVyX2VuY29kaW5nX2NvZGVzID0gKEhUVFBTdGF0dXMuTk9UX01PRElGSUVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLlJFU0VUX0NPTlRFTlQpCisgICAgICAgIGZvciBjb2RlIGluIChIVFRQU3RhdHVzLk5PX0NPTlRFTlQsIEhUVFBTdGF0dXMuTk9UX01PRElGSUVELAorICAgICAgICAgICAgICAgICAgICAgSFRUUFN0YXR1cy5QUk9DRVNTSU5HLCBIVFRQU3RhdHVzLlJFU0VUX0NPTlRFTlQsCisgICAgICAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLlNXSVRDSElOR19QUk9UT0NPTFMpOgorICAgICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnU0VORF9FUlJPUicsICcve30nLmZvcm1hdChjb2RlKSkKKyAgICAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgcmVzLnN0YXR1cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVzLmdldGhlYWRlcignQ29udGVudC1UeXBlJykpCisgICAgICAgICAgICBpZiBjb2RlIG5vdCBpbiBhbGxvd190cmFuc2Zlcl9lbmNvZGluZ19jb2RlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlcy5nZXRoZWFkZXIoJ1RyYW5zZmVyLUVuY29kaW5nJykpCisKKyAgICAgICAgICAgIGRhdGEgPSByZXMucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2hlYWRfdmlhX3NlbmRfZXJyb3Ioc2VsZik6CisgICAgICAgIGFsbG93X3RyYW5zZmVyX2VuY29kaW5nX2NvZGVzID0gKEhUVFBTdGF0dXMuTk9UX01PRElGSUVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLlJFU0VUX0NPTlRFTlQpCisgICAgICAgIGZvciBjb2RlIGluIChIVFRQU3RhdHVzLk9LLCBIVFRQU3RhdHVzLk5PX0NPTlRFTlQsCisgICAgICAgICAgICAgICAgICAgICBIVFRQU3RhdHVzLk5PVF9NT0RJRklFRCwgSFRUUFN0YXR1cy5SRVNFVF9DT05URU5ULAorICAgICAgICAgICAgICAgICAgICAgSFRUUFN0YXR1cy5TV0lUQ0hJTkdfUFJPVE9DT0xTKToKKyAgICAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0hFQUQnLCAnL3t9Jy5mb3JtYXQoY29kZSkpCisgICAgICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIHJlcy5zdGF0dXMpCisgICAgICAgICAgICBpZiBjb2RlID09IEhUVFBTdGF0dXMuT0s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChyZXMuZ2V0aGVhZGVyKCdDb250ZW50LUxlbmd0aCcpKSA+IDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigndGV4dC9odG1sJywgcmVzLmdldGhlYWRlcignQ29udGVudC1UeXBlJykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtVHlwZScpKQorICAgICAgICAgICAgaWYgY29kZSBub3QgaW4gYWxsb3dfdHJhbnNmZXJfZW5jb2RpbmdfY29kZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXMuZ2V0aGVhZGVyKCdUcmFuc2Zlci1FbmNvZGluZycpKQorCisgICAgICAgICAgICBkYXRhID0gcmVzLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisKKworY2xhc3MgUmVxdWVzdEhhbmRsZXJMb2dnaW5nVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKyAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIHByb3RvY29sX3ZlcnNpb24gPSAnSFRUUC8xLjEnCisgICAgICAgIGRlZmF1bHRfcmVxdWVzdF92ZXJzaW9uID0gJ0hUVFAvMS4xJworCisgICAgICAgIGRlZiBkb19HRVQoc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoSFRUUFN0YXR1cy5PSykKKyAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorCisgICAgICAgIGRlZiBkb19FUlJPUihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcihIVFRQU3RhdHVzLk5PVF9GT1VORCwgJ0ZpbGUgbm90IGZvdW5kJykKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgc2VsZi5jb24gPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbihzZWxmLkhPU1QsIHNlbGYuUE9SVCkKKyAgICAgICAgc2VsZi5jb24uY29ubmVjdCgpCisKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgICAgIHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBlcnIuZ2V0dmFsdWUoKS5lbmRzd2l0aCgnIkdFVCAvIEhUVFAvMS4xIiAyMDAgLVxuJykpCisKKyAgICBkZWYgdGVzdF9lcnIoc2VsZik6CisgICAgICAgIHNlbGYuY29uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oc2VsZi5IT1NULCBzZWxmLlBPUlQpCisgICAgICAgIHNlbGYuY29uLmNvbm5lY3QoKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdFUlJPUicsICcvJykKKyAgICAgICAgICAgIHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKworICAgICAgICBsaW5lcyA9IGVyci5nZXR2YWx1ZSgpLnNwbGl0KCdcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lc1swXS5lbmRzd2l0aCgnY29kZSA0MDQsIG1lc3NhZ2UgRmlsZSBub3QgZm91bmQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzFdLmVuZHN3aXRoKCciRVJST1IgLyBIVFRQLzEuMSIgNDA0IC0nKSkKKwogCiBjbGFzcyBTaW1wbGVIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKICAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKQEAgLTI0Nyw2ICszMjksNyBAQAogICAgICAgICBzZWxmLmRhdGEgPSBiJ1dlIGFyZSB0aGUga25pZ2h0cyB3aG8gc2F5IE5pIScKICAgICAgICAgc2VsZi50ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChkaXI9YmFzZXRlbXBkaXIpCiAgICAgICAgIHNlbGYudGVtcGRpcl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLnRlbXBkaXIpCisgICAgICAgIHNlbGYuYmFzZV91cmwgPSAnLycgKyBzZWxmLnRlbXBkaXJfbmFtZQogICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3QnKSwgJ3diJykgYXMgdGVtcDoKICAgICAgICAgICAgIHRlbXAud3JpdGUoc2VsZi5kYXRhKQogCkBAIC0yNjEsMTIgKzM0NCwyOCBAQAogICAgICAgICAgICAgQmFzZVRlc3RDYXNlLnRlYXJEb3duKHNlbGYpCiAKICAgICBkZWYgY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24oc2VsZiwgcmVzcG9uc2UsIHN0YXR1cywgZGF0YT1Ob25lKToKKyAgICAgICAgZGVmIGNsb3NlX2Nvbm4oKToKKyAgICAgICAgICAgICIiIkRvbid0IGNsb3NlIHJlYWRlciB5ZXQgc28gd2UgY2FuIGNoZWNrIGlmIHRoZXJlIHdhcyBsZWZ0b3ZlcgorICAgICAgICAgICAgYnVmZmVyZWQgaW5wdXQiIiIKKyAgICAgICAgICAgIG5vbmxvY2FsIHJlYWRlcgorICAgICAgICAgICAgcmVhZGVyID0gcmVzcG9uc2UuZnAKKyAgICAgICAgICAgIHJlc3BvbnNlLmZwID0gTm9uZQorICAgICAgICByZWFkZXIgPSBOb25lCisgICAgICAgIHJlc3BvbnNlLl9jbG9zZV9jb25uID0gY2xvc2VfY29ubgorCiAgICAgICAgIGJvZHkgPSByZXNwb25zZS5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzKQogICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZXNwb25zZS5yZWFzb24pCiAgICAgICAgIGlmIGRhdGE6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJvZHkpCisgICAgICAgICMgRW5zdXJlIHRoZSBzZXJ2ZXIgaGFzIG5vdCBzZXQgdXAgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24sIGFuZCBoYXMKKyAgICAgICAgIyBub3Qgc2VudCBhbnkgZXh0cmEgZGF0YQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnZlcnNpb24sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLm1zZy5nZXQoIkNvbm5lY3Rpb24iLCAiY2xvc2UiKSwgImNsb3NlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZCgzMCksIGInJywgJ0Nvbm5lY3Rpb24gc2hvdWxkIGJlIGNsb3NlZCcpCisKKyAgICAgICAgcmVhZGVyLmNsb3NlKCkKICAgICAgICAgcmV0dXJuIGJvZHkKIAogICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDUpCkBAIC0yNzcsNyArMzc2LDcgQEAKICAgICAgICAgZmlsZW5hbWUgPSBvcy5mc2RlY29kZShzdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRSkgKyAnLnR4dCcKICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsIGZpbGVuYW1lKSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUpCi0gICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy8nKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLmJhc2VfdXJsICsgJy8nKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICAjIE9uIE1hYyBPUyB0aGUgSEZTKyBmaWxlc3lzdGVtIHJlcGxhY2VzIGJ5dGVzIHRoYXQgYXJlbid0IHZhbGlkCiAgICAgICAgICAgICAjIFVURi04IGludG8gYSBwZXJjZW50LWVuY29kZWQgdmFsdWUuCkBAIC0yODUsNTIgKzM4NCw1OCBAQAogICAgICAgICAgICAgICAgIGlmIG5hbWUgIT0gJ3Rlc3QnOiAjIElnbm9yZSBhIGZpbGVuYW1lIGNyZWF0ZWQgaW4gc2V0VXAoKS4KICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBuYW1lCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGJvZHkgPSBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDApCisgICAgICAgIGJvZHkgPSBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk9LKQogICAgICAgICBxdW90ZWRuYW1lID0gdXJsbGliLnBhcnNlLnF1b3RlKGZpbGVuYW1lLCBlcnJvcnM9J3N1cnJvZ2F0ZXBhc3MnKQogICAgICAgICBzZWxmLmFzc2VydEluKCgnaHJlZj0iJXMiJyAlIHF1b3RlZG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgLmVuY29kZShlbmMsICdzdXJyb2dhdGVlc2NhcGUnKSwgYm9keSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJz4lczwnICUgaHRtbC5lc2NhcGUoZmlsZW5hbWUpKQogICAgICAgICAgICAgICAgICAgICAgIC5lbmNvZGUoZW5jLCAnc3Vycm9nYXRlZXNjYXBlJyksIGJvZHkpCi0gICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy8nICsgcXVvdGVkbmFtZSkKLSAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwLAorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLmJhc2VfdXJsICsgJy8nICsgcXVvdGVkbmFtZSkKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgSFRUUFN0YXR1cy5PSywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFKQogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgogICAgICAgICAjY29uc3RydWN0cyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIEhUVFBTZXJ2ZXIKLSAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3Qoc2VsZi50ZW1wZGlyX25hbWUgKyAnL3Rlc3QnKQotICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDAsIGRhdGE9c2VsZi5kYXRhKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLmJhc2VfdXJsICsgJy90ZXN0JykKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgSFRUUFN0YXR1cy5PSywgZGF0YT1zZWxmLmRhdGEpCiAgICAgICAgICMgY2hlY2sgZm9yIHRyYWlsaW5nICIvIiB3aGljaCBzaG91bGQgcmV0dXJuIDQwNC4gU2VlIElzc3VlMTczMjQKLSAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3Qoc2VsZi50ZW1wZGlyX25hbWUgKyAnL3Rlc3QvJykKLSAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNDA0KQotICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvJykKLSAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwKQotICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSkKLSAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMzAxKQotICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvP2hpPTInKQotICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDApCi0gICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJz9oaT0xJykKLSAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMzAxKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLmJhc2VfdXJsICsgJy90ZXN0LycpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIEhUVFBTdGF0dXMuTk9UX0ZPVU5EKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLmJhc2VfdXJsICsgJy8nKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk9LKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLmJhc2VfdXJsKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk1PVkVEX1BFUk1BTkVOVExZKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLmJhc2VfdXJsICsgJy8/aGk9MicpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIEhUVFBTdGF0dXMuT0spCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYuYmFzZV91cmwgKyAnP2hpPTEnKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk1PVkVEX1BFUk1BTkVOVExZKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLmdldGhlYWRlcigiTG9jYXRpb24iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlbXBkaXJfbmFtZSArICIvP2hpPTEiKQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmFzZV91cmwgKyAiLz9oaT0xIikKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy9UaGlzRG9lc05vdEV4aXN0JykKLSAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNDA0KQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk5PVF9GT1VORCkKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nICsgJ1RoaXNEb2VzTm90RXhpc3QnICsgJy8nKQotICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA0MDQpCi0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyX25hbWUsICdpbmRleC5odG1sJyksICd3JykgYXMgZjoKLSAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJyArIHNlbGYudGVtcGRpcl9uYW1lICsgJy8nKQotICAgICAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwKQotICAgICAgICAgICAgIyBjaG1vZCgpIGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZCBvbiBXaW5kb3dzLCBhbmQgZmlsZXN5c3RlbQotICAgICAgICAgICAgIyBwZXJtaXNzaW9ucyBhcmUgaWdub3JlZCBieSByb290IG9uIFVuaXguCi0gICAgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCcgYW5kIG9zLmdldGV1aWQoKSAhPSAwOgotICAgICAgICAgICAgICAgIG9zLmNobW9kKHNlbGYudGVtcGRpciwgMCkKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvJykKLSAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA0MDQpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIEhUVFBTdGF0dXMuTk9UX0ZPVU5EKQorCisgICAgICAgIGRhdGEgPSBiIkR1bW15IGluZGV4IGZpbGVcclxuIgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcGRpcl9uYW1lLCAnaW5kZXguaHRtbCcpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLmJhc2VfdXJsICsgJy8nKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk9LLCBkYXRhKQorCisgICAgICAgICMgY2htb2QoKSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gV2luZG93cywgYW5kIGZpbGVzeXN0ZW0KKyAgICAgICAgIyBwZXJtaXNzaW9ucyBhcmUgaWdub3JlZCBieSByb290IG9uIFVuaXguCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgb3MuZ2V0ZXVpZCgpICE9IDA6CisgICAgICAgICAgICBvcy5jaG1vZChzZWxmLnRlbXBkaXIsIDApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3Qoc2VsZi5iYXNlX3VybCArICcvJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk5PVF9GT1VORCkKKyAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgb3MuY2htb2Qoc2VsZi50ZW1wZGlyLCAwbzc1NSkKIAogICAgIGRlZiB0ZXN0X2hlYWQoc2VsZik6CiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KAotICAgICAgICAgICAgc2VsZi50ZW1wZGlyX25hbWUgKyAnL3Rlc3QnLCBtZXRob2Q9J0hFQUQnKQotICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDApCisgICAgICAgICAgICBzZWxmLmJhc2VfdXJsICsgJy90ZXN0JywgbWV0aG9kPSdIRUFEJykKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgSFRUUFN0YXR1cy5PSykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5nZXRoZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGxlbihzZWxmLmRhdGEpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5nZXRoZWFkZXIoJ2NvbnRlbnQtdHlwZScpLApAQCAtMzM4LDEyICs0NDMsMjggQEAKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVxdWVzdHMoc2VsZik6CiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJywgbWV0aG9kPSdGT08nKQotICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA1MDEpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIEhUVFBTdGF0dXMuTk9UX0lNUExFTUVOVEVEKQogICAgICAgICAjIHJlcXVlc3RzIG11c3QgYmUgY2FzZSBzZW5zaXRpdmUsc28gdGhpcyBzaG91bGQgZmFpbCB0b28KICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nLCBtZXRob2Q9J2N1c3RvbScpCi0gICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDUwMSkKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgSFRUUFN0YXR1cy5OT1RfSU1QTEVNRU5URUQpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJywgbWV0aG9kPSdHRVRzJykKLSAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNTAxKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk5PVF9JTVBMRU1FTlRFRCkKKworICAgIGRlZiB0ZXN0X3BhdGhfd2l0aG91dF9sZWFkaW5nX3NsYXNoKHNlbGYpOgorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvdGVzdCcpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIEhUVFBTdGF0dXMuT0ssIGRhdGE9c2VsZi5kYXRhKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvdGVzdC8nKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk5PVF9GT1VORCkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3Qoc2VsZi50ZW1wZGlyX25hbWUgKyAnLycpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIEhUVFBTdGF0dXMuT0spCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk1PVkVEX1BFUk1BTkVOVExZKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvP2hpPTInKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCBIVFRQU3RhdHVzLk9LKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICc/aGk9MScpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIEhUVFBTdGF0dXMuTU9WRURfUEVSTUFORU5UTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2UuZ2V0aGVhZGVyKCJMb2NhdGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVtcGRpcl9uYW1lICsgIi8/aGk9MSIpCiAKIAogY2dpX2ZpbGUxID0gIiIiXApAQCAtNTA4LDEyICs2MjksMTMgQEAKIAogICAgIGRlZiB0ZXN0X2hlYWRlcnNfYW5kX2NvbnRlbnQoc2VsZik6CiAgICAgICAgIHJlcyA9IHNlbGYucmVxdWVzdCgnL2NnaS1iaW4vZmlsZTEucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiJ0hlbGxvIFdvcmxkJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIDIwMCksCi0gICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSwKKyAgICAgICAgICAgIChiJ0hlbGxvIFdvcmxkJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIEhUVFBTdGF0dXMuT0spKQogCiAgICAgZGVmIHRlc3RfaXNzdWUxOTQzNShzZWxmKToKICAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvLy8vLy8vLy8vL25vY2dpLnB5Ly4uL2NnaS1iaW4vbm90aGVyZS5zaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIEhUVFBTdGF0dXMuTk9UX0ZPVU5EKQogCiAgICAgZGVmIHRlc3RfcG9zdChzZWxmKToKICAgICAgICAgcGFyYW1zID0gdXJsbGliLnBhcnNlLnVybGVuY29kZSgKQEAgLTUyNiw1MCArNjQ4LDU1IEBACiAgICAgZGVmIHRlc3RfaW52YWxpZHVyaShzZWxmKToKICAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9pbnZhbGlkJykKICAgICAgICAgcmVzLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCBIVFRQU3RhdHVzLk5PVF9GT1VORCkKIAogICAgIGRlZiB0ZXN0X2F1dGhvcml6YXRpb24oc2VsZik6CiAgICAgICAgIGhlYWRlcnMgPSB7YidBdXRob3JpemF0aW9uJyA6IGInQmFzaWMgJyArCiAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmI2NGVuY29kZShiJ3VzZXJuYW1lOnBhc3MnKX0KICAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMS5weScsICdHRVQnLCBoZWFkZXJzPWhlYWRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGInSGVsbG8gV29ybGQnICsgc2VsZi5saW5lc2VwLCAndGV4dC9odG1sJywgMjAwKSwKLSAgICAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKGInSGVsbG8gV29ybGQnICsgc2VsZi5saW5lc2VwLCAndGV4dC9odG1sJywgSFRUUFN0YXR1cy5PSyksCisgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQogCiAgICAgZGVmIHRlc3Rfbm9fbGVhZGluZ19zbGFzaChzZWxmKToKICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjI1NAogICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJ2NnaS1iaW4vZmlsZTEucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiJ0hlbGxvIFdvcmxkJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIDIwMCksCi0gICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChiJ0hlbGxvIFdvcmxkJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIEhUVFBTdGF0dXMuT0spLAorICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKIAogICAgIGRlZiB0ZXN0X29zX2Vudmlyb25faXNfbm90X2FsdGVyZWQoc2VsZik6CiAgICAgICAgIHNpZ25hdHVyZSA9ICJUZXN0IENHSSBTZXJ2ZXIiCiAgICAgICAgIG9zLmVudmlyb25bJ1NFUlZFUl9TT0ZUV0FSRSddID0gc2lnbmF0dXJlCiAgICAgICAgIHJlcyA9IHNlbGYucmVxdWVzdCgnL2NnaS1iaW4vZmlsZTEucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiJ0hlbGxvIFdvcmxkJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIDIwMCksCi0gICAgICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChiJ0hlbGxvIFdvcmxkJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIEhUVFBTdGF0dXMuT0spLAorICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5lbnZpcm9uWydTRVJWRVJfU09GVFdBUkUnXSwgc2lnbmF0dXJlKQogCiAgICAgZGVmIHRlc3RfdXJscXVvdGVfZGVjb2RpbmdfaW5fY2dpX2NoZWNrKHNlbGYpOgogICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluJTJmZmlsZTEucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiJ0hlbGxvIFdvcmxkJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIDIwMCksCi0gICAgICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChiJ0hlbGxvIFdvcmxkJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIEhUVFBTdGF0dXMuT0spLAorICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKIAogICAgIGRlZiB0ZXN0X25lc3RlZF9jZ2lfcGF0aF9pc3N1ZTIxMzIzKHNlbGYpOgogICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2NoaWxkLWRpci9maWxlMy5weScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGInSGVsbG8gV29ybGQnICsgc2VsZi5saW5lc2VwLCAndGV4dC9odG1sJywgMjAwKSwKLSAgICAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKGInSGVsbG8gV29ybGQnICsgc2VsZi5saW5lc2VwLCAndGV4dC9odG1sJywgSFRUUFN0YXR1cy5PSyksCisgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQogCiAgICAgZGVmIHRlc3RfcXVlcnlfd2l0aF9tdWx0aXBsZV9xdWVzdGlvbl9tYXJrKHNlbGYpOgogICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGU0LnB5P2E9Yj9jPWQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgKGInYT1iP2M9ZCcgKyBzZWxmLmxpbmVzZXAsICd0ZXh0L2h0bWwnLCAyMDApLAorICAgICAgICAgICAgKGInYT1iP2M9ZCcgKyBzZWxmLmxpbmVzZXAsICd0ZXh0L2h0bWwnLCBIVFRQU3RhdHVzLk9LKSwKICAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCiAKICAgICBkZWYgdGVzdF9xdWVyeV93aXRoX2NvbnRpbnVvdXNfc2xhc2hlcyhzZWxmKToKICAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlNC5weT9rPWFhJTJGJTJGYmImLy9xLy9wLy89Ly9hLy9iLy8nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgKGInaz1hYSUyRiUyRmJiJi8vcS8vcC8vPS8vYS8vYi8vJyArIHNlbGYubGluZXNlcCwKLSAgICAgICAgICAgICAndGV4dC9odG1sJywgMjAwKSwKKyAgICAgICAgICAgICAndGV4dC9odG1sJywgSFRUUFN0YXR1cy5PSyksCiAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQogCiAKQEAgLTU4MCw3ICs3MDcsNyBAQAogCiAgICAgZGVmIGRvX0dFVChzZWxmKToKICAgICAgICAgc2VsZi5nZXRfY2FsbGVkID0gVHJ1ZQotICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoSFRUUFN0YXR1cy5PSykKICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpCiAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgICBzZWxmLndmaWxlLndyaXRlKGInPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCkBAIC01OTAsNyArNzE3LDcgQEAKIAogY2xhc3MgUmVqZWN0aW5nU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyKFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcik6CiAgICAgZGVmIGhhbmRsZV9leHBlY3RfMTAwKHNlbGYpOgotICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDE3KQorICAgICAgICBzZWxmLnNlbmRfZXJyb3IoSFRUUFN0YXR1cy5FWFBFQ1RBVElPTl9GQUlMRUQpCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAKQEAgLTc5Myw2ICs5MjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmhhbmRsZXIuZ2V0X2NhbGxlZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucmVxdWVzdGxpbmUsICdHRVQgLyBIVFRQLzEuMScpCiAKKyAgICBkZWYgdGVzdF90b29fbWFueV9oZWFkZXJzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KAorICAgICAgICAgICAgYidHRVQgLyBIVFRQLzEuMVxyXG4nICsgYidYLUZvbzogYmFyXHJcbicgKiAxMDEgKyBiJ1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgYidIVFRQLzEuMSA0MzEgVG9vIG1hbnkgaGVhZGVyc1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5yZXF1ZXN0bGluZSwgJ0dFVCAvIEhUVFAvMS4xJykKKwogICAgIGRlZiB0ZXN0X2Nsb3NlX2Nvbm5lY3Rpb24oc2VsZik6CiAgICAgICAgICMgaGFuZGxlX29uZV9yZXF1ZXN0KCkgc2hvdWxkIGJlIHJlcGVhdGVkbHkgY2FsbGVkIHVudGlsCiAgICAgICAgICMgaXQgc2V0cyBjbG9zZV9jb25uZWN0aW9uCkBAIC04MjksNiArOTYzLDI0IEBACiAgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGgoJy8vZmlsZW5hbWU/Zm9vPWJhcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQogCisgICAgZGVmIHRlc3Rfd2luZG93c19jb2xvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihzZXJ2ZXIub3MsICdwYXRoJywgbnRwYXRoKToKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGgoJ2M6YzpjOmZvby9maWxlbmFtZScpCisgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKG50cGF0aC5zZXAsIG9zLnNlcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorCisgICAgICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCdcXGM6Li4vZmlsZW5hbWUnKQorICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShudHBhdGguc2VwLCBvcy5zZXApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKworICAgICAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCgnYzpcXGM6Li5cXGZvby9maWxlbmFtZScpCisgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKG50cGF0aC5zZXAsIG9zLnNlcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorCisgICAgICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCdjOmM6Zm9vXFxjOmM6YmFyL2ZpbGVuYW1lJykKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UobnRwYXRoLnNlcCwgb3Muc2VwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisKIAogY2xhc3MgTWlzY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9hbGwoc2VsZik6CkBAIC04NDcsNiArOTk5LDcgQEAKICAgICBjd2QgPSBvcy5nZXRjd2QoKQogICAgIHRyeToKICAgICAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICBSZXF1ZXN0SGFuZGxlckxvZ2dpbmdUZXN0Q2FzZSwKICAgICAgICAgICAgIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSwKICAgICAgICAgICAgIEJhc2VIVFRQU2VydmVyVGVzdENhc2UsCiAgICAgICAgICAgICBTaW1wbGVIVFRQU2VydmVyVGVzdENhc2UsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lkbGUucHkgYi9MaWIvdGVzdC90ZXN0X2lkbGUucHkKaW5kZXggMTMyNjU3Yi4uMTQxZTg5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pZGxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaWRsZS5weQpAQCAtMSwxMyArMSwxMSBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgaW1wb3J0X21vZHVsZSwgaW1wb3J0X2ZyZXNoX21vZHVsZQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgaW1wb3J0X21vZHVsZQogCiAjIFNraXAgdGVzdCBpZiBfdGhyZWFkIG9yIF90a2ludGVyIHdhc24ndCBidWlsdCBvciBpZGxlbGliIHdhcyBkZWxldGVkLgogaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykgICMgaW1wb3J0ZWQgYnkgUHlTaGVsbCwgaW1wb3J0cyBfdGhyZWFkCiB0ayA9IGltcG9ydF9tb2R1bGUoJ3RraW50ZXInKSAgIyBpbXBvcnRzIF90a2ludGVyCiBpZGxldGVzdCA9IGltcG9ydF9tb2R1bGUoJ2lkbGVsaWIuaWRsZV90ZXN0JykKLSMgTWFrZSBzdXJlIFRDTF9MSUJSQVJZIGlzIHNldCBwcm9wZXJseSBvbiBXaW5kb3dzLiAgTm90ZSB0aGF0IHRoaXMgd2lsbAotIyBjYXVzZSBhIHdhcm5pbmcgYWJvdXQgdGVzdF9pZGxlIG1vZGlmeWluZyB0aGUgZW52aXJvbm1lbnQKLWltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXIuX2ZpeCcpCiAKICMgV2l0aG91dCB0ZXN0X21haW4gcHJlc2VudCwgcmVncnRlc3QucnVudGVzdF9pbm5lciAobGluZTEyMTkpIGNhbGxzCiAjIHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tTW9kdWxlKHRoaXNfbW9kdWxlKSB3aGljaCBjYWxscwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CmluZGV4IDgzODQxMWUuLjA3MTU3ZjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKQEAgLTExLDcgKzExLDggQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgY2FsZW5kYXIKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlYXBfdGhyZWFkcywgdmVyYm9zZSwgdHJhbnNpZW50X2ludGVybmV0LCBydW5fd2l0aF90eiwgcnVuX3dpdGhfbG9jYWxlCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJlYXBfdGhyZWFkcywgdmVyYm9zZSwgdHJhbnNpZW50X2ludGVybmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fd2l0aF90eiwgcnVuX3dpdGhfbG9jYWxlKQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZXpvbmUsIHRpbWVkZWx0YQogdHJ5OgpAQCAtMTksOCArMjAsOCBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHNzbCA9IE5vbmUKIAotQ0VSVEZJTEUgPSBOb25lCi1DQUZJTEUgPSBOb25lCitDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwgImtleWNlcnQzLnBlbSIpCitDQUZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJweWNhY2VydC5wZW0iKQogCiAKIGNsYXNzIFRlc3RJbWFwbGliKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQxLDE3ICs0MiwxNSBAQAogICAgIGRlZiB0ZXN0X0ludGVybmFsZGF0ZTJ0dXBsZV9pc3N1ZTEwOTQxKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGltYXBsaWIuSW50ZXJuYWxkYXRlMnR1cGxlKAogICAgICAgICAgICAgYicyNSAoSU5URVJOQUxEQVRFICIwMi1BcHItMjAwMCAwMjozMDowMCArMDAwMCIpJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hcGxpYi5JbnRlcm5hbGRhdGUydHVwbGUoCi0gICAgICAgICAgICBiJzI1IChJTlRFUk5BTERBVEUgIjAyLUFwci0yMDAwIDAzOjMwOjAwICswMDAwIiknKSkKLQotCisgICAgICAgICAgICBpbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZSgKKyAgICAgICAgICAgICAgICBiJzI1IChJTlRFUk5BTERBVEUgIjAyLUFwci0yMDAwIDAzOjMwOjAwICswMDAwIiknKSkKIAogICAgIGRlZiB0aW1ldmFsdWVzKHNlbGYpOgogICAgICAgICByZXR1cm4gWzIwMDAwMDAwMDAsIDIwMDAwMDAwMDAuMCwgdGltZS5sb2NhbHRpbWUoMjAwMDAwMDAwMCksCiAgICAgICAgICAgICAgICAgKDIwMzMsIDUsIDE4LCA1LCAzMywgMjAsIC0xLCAtMSwgLTEpLAogICAgICAgICAgICAgICAgICgyMDMzLCA1LCAxOCwgNSwgMzMsIDIwLCAtMSwgLTEsIDEpLAogICAgICAgICAgICAgICAgIGRhdGV0aW1lLmZyb210aW1lc3RhbXAoMjAwMDAwMDAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lKHRpbWVkZWx0YSgwLCAyKjYwKjYwKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmUodGltZWRlbHRhKDAsIDIgKiA2MCAqIDYwKSkpLAogICAgICAgICAgICAgICAgICciMTgtTWF5LTIwMzMgMDU6MzM6MjAgKzAyMDAiJ10KIAogICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX0FMTCcsICdkZV9ERScsICdmcl9GUicpCkBAIC03NCw3ICs3Myw2IEBACiAKIAogaWYgc3NsOgotCiAgICAgY2xhc3MgU2VjdXJlVENQU2VydmVyKHNvY2tldHNlcnZlci5UQ1BTZXJ2ZXIpOgogCiAgICAgICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKQEAgLTk1LDEzICs5MywxNyBAQAogCiAKIGNsYXNzIFNpbXBsZUlNQVBIYW5kbGVyKHNvY2tldHNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlcik6Ci0KICAgICB0aW1lb3V0ID0gMQogICAgIGNvbnRpbnVhdGlvbiA9IE5vbmUKICAgICBjYXBhYmlsaXRpZXMgPSAnJwogCisgICAgZGVmIHNldHVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldHVwKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIubG9nZ2VkID0gTm9uZQorCiAgICAgZGVmIF9zZW5kKHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiU0VOVDogJXIiICUgbWVzc2FnZS5zdHJpcCgpKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIlNFTlQ6ICVyIiAlIG1lc3NhZ2Uuc3RyaXAoKSkKICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShtZXNzYWdlKQogCiAgICAgZGVmIF9zZW5kX2xpbmUoc2VsZiwgbWVzc2FnZSk6CkBAIC0xMzQsNyArMTM2LDggQEAKICAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKGInXHJcbicpOgogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgnR09UOiAlcicgJSBsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCdHT1Q6ICVyJyAlIGxpbmUuc3RyaXAoKSkKICAgICAgICAgICAgIGlmIHNlbGYuY29udGludWF0aW9uOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250aW51YXRpb24uc2VuZChsaW5lKQpAQCAtMTQ2LDggKzE0OSw4IEBACiAgICAgICAgICAgICBjbWQgPSBzcGxpdGxpbmVbMV0KICAgICAgICAgICAgIGFyZ3MgPSBzcGxpdGxpbmVbMjpdCiAKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2NtZF8nK2NtZCk6Ci0gICAgICAgICAgICAgICAgY29udGludWF0aW9uID0gZ2V0YXR0cihzZWxmLCAnY21kXycrY21kKSh0YWcsIGFyZ3MpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdjbWRfJyArIGNtZCk6CisgICAgICAgICAgICAgICAgY29udGludWF0aW9uID0gZ2V0YXR0cihzZWxmLCAnY21kXycgKyBjbWQpKHRhZywgYXJncykKICAgICAgICAgICAgICAgICBpZiBjb250aW51YXRpb246CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGludWF0aW9uID0gY29udGludWF0aW9uCiAgICAgICAgICAgICAgICAgICAgIG5leHQoY29udGludWF0aW9uKQpAQCAtMTU1LDE2ICsxNTgsMjUgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9zZW5kX3RhZ2dlZCh0YWcsICdCQUQnLCBjbWQgKyAnIHVua25vd24nKQogCiAgICAgZGVmIGNtZF9DQVBBQklMSVRZKHNlbGYsIHRhZywgYXJncyk6Ci0gICAgICAgIGNhcHMgPSAnSU1BUDRyZXYxICcgKyBzZWxmLmNhcGFiaWxpdGllcyBpZiBzZWxmLmNhcGFiaWxpdGllcyBlbHNlICdJTUFQNHJldjEnCisgICAgICAgIGNhcHMgPSAoJ0lNQVA0cmV2MSAnICsgc2VsZi5jYXBhYmlsaXRpZXMKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNhcGFiaWxpdGllcworICAgICAgICAgICAgICAgIGVsc2UgJ0lNQVA0cmV2MScpCiAgICAgICAgIHNlbGYuX3NlbmRfdGV4dGxpbmUoJyogQ0FQQUJJTElUWSAnICsgY2FwcykKICAgICAgICAgc2VsZi5fc2VuZF90YWdnZWQodGFnLCAnT0snLCAnQ0FQQUJJTElUWSBjb21wbGV0ZWQnKQogCiAgICAgZGVmIGNtZF9MT0dPVVQoc2VsZiwgdGFnLCBhcmdzKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIubG9nZ2VkID0gTm9uZQogICAgICAgICBzZWxmLl9zZW5kX3RleHRsaW5lKCcqIEJZRSBJTUFQNHJlZjEgU2VydmVyIGxvZ2dpbmcgb3V0JykKICAgICAgICAgc2VsZi5fc2VuZF90YWdnZWQodGFnLCAnT0snLCAnTE9HT1VUIGNvbXBsZXRlZCcpCiAKKyAgICBkZWYgY21kX0xPR0lOKHNlbGYsIHRhZywgYXJncyk6CisgICAgICAgIHNlbGYuc2VydmVyLmxvZ2dlZCA9IGFyZ3NbMF0KKyAgICAgICAgc2VsZi5fc2VuZF90YWdnZWQodGFnLCAnT0snLCAnTE9HSU4gY29tcGxldGVkJykKIAotY2xhc3MgQmFzZVRocmVhZGVkTmV0d29ya2VkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzZXJ2ZXJfY2xhc3MgPSBzb2NrZXRzZXJ2ZXIuVENQU2VydmVyCisgICAgaW1hcF9jbGFzcyA9IGltYXBsaWIuSU1BUDQKIAogICAgIGRlZiBtYWtlX3NlcnZlcihzZWxmLCBhZGRyLCBoZGxyKToKIApAQCAtMTc0LDcgKzE4Niw4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlCiAKLSAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoImNyZWF0aW5nIHNlcnZlciIpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiY3JlYXRpbmcgc2VydmVyIikKICAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoYWRkciwgaGRscikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKSkKIApAQCAtMTkwLDE4ICsyMDMsMjEgQEAKICAgICAgICAgICAgICMgU2hvcnQgcG9sbCBpbnRlcnZhbCB0byBtYWtlIHRoZSB0ZXN0IGZpbmlzaCBxdWlja2x5LgogICAgICAgICAgICAgIyBUaW1lIGJldHdlZW4gcmVxdWVzdHMgaXMgc2hvcnQgZW5vdWdoIHRoYXQgd2Ugd29uJ3Qgd2FrZQogICAgICAgICAgICAgIyB1cCBzcHVyaW91c2x5IHRvbyBtYW55IHRpbWVzLgotICAgICAgICAgICAga3dhcmdzPXsncG9sbF9pbnRlcnZhbCc6MC4wMX0pCisgICAgICAgICAgICBrd2FyZ3M9eydwb2xsX2ludGVydmFsJzogMC4wMX0pCiAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZSAgIyBJbiBjYXNlIHRoaXMgZnVuY3Rpb24gcmFpc2VzLgogICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoInNlcnZlciBydW5uaW5nIikKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJzZXJ2ZXIgcnVubmluZyIpCiAgICAgICAgIHJldHVybiBzZXJ2ZXIsIHQKIAogICAgIGRlZiByZWFwX3NlcnZlcihzZWxmLCBzZXJ2ZXIsIHRocmVhZCk6Ci0gICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCJ3YWl0aW5nIGZvciBzZXJ2ZXIiKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIndhaXRpbmcgZm9yIHNlcnZlciIpCiAgICAgICAgIHNlcnZlci5zaHV0ZG93bigpCiAgICAgICAgIHNlcnZlci5zZXJ2ZXJfY2xvc2UoKQogICAgICAgICB0aHJlYWQuam9pbigpCi0gICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCJkb25lIikKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCJkb25lIikKIAogICAgIEBjb250ZXh0bWFuYWdlcgogICAgIGRlZiByZWFwZWRfc2VydmVyKHNlbGYsIGhkbHIpOgpAQCAtMjUxLDYgKzI2Nyw4NCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaW1hcGxpYi5JTUFQNC5hYm9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hcF9jbGFzcywgKnNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKIAorICAgIGNsYXNzIFVURjhTZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpOgorICAgICAgICBjYXBhYmlsaXRpZXMgPSAnQVVUSCBFTkFCTEUgVVRGOD1BQ0NFUFQnCisKKyAgICAgICAgZGVmIGNtZF9FTkFCTEUoc2VsZiwgdGFnLCBhcmdzKToKKyAgICAgICAgICAgIHNlbGYuX3NlbmRfdGFnZ2VkKHRhZywgJ09LJywgJ0VOQUJMRSBzdWNjZXNzZnVsJykKKworICAgICAgICBkZWYgY21kX0FVVEhFTlRJQ0FURShzZWxmLCB0YWcsIGFyZ3MpOgorICAgICAgICAgICAgc2VsZi5fc2VuZF90ZXh0bGluZSgnKycpCisgICAgICAgICAgICBzZWxmLnNlcnZlci5yZXNwb25zZSA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLl9zZW5kX3RhZ2dlZCh0YWcsICdPSycsICdGQUtFQVVUSCBzdWNjZXNzZnVsJykKKworICAgIEByZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF9lbmFibGVfcmFpc2VzX2Vycm9yX2lmX25vdF9BVVRIKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYucmVhcGVkX3BhaXIoc2VsZi5VVEY4U2VydmVyKSBhcyAoc2VydmVyLCBjbGllbnQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbGllbnQudXRmOF9lbmFibGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaW1hcGxpYi5JTUFQNC5lcnJvciwgY2xpZW50LmVuYWJsZSwgJ2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC51dGY4X2VuYWJsZWQpCisKKyAgICAjIFhYWCBBbHNvIG5lZWQgYSB0ZXN0IHRoYXQgZW5hYmxlIGFmdGVyIFNFTEVDVCByYWlzZXMgYW4gZXJyb3IuCisKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3RfZW5hYmxlX3JhaXNlc19lcnJvcl9pZl9ub19jYXBhYmlsaXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBOb0VuYWJsZVNlcnZlcihzZWxmLlVURjhTZXJ2ZXIpOgorICAgICAgICAgICAgY2FwYWJpbGl0aWVzID0gJ0FVVEgnCisgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfcGFpcihOb0VuYWJsZVNlcnZlcikgYXMgKHNlcnZlciwgY2xpZW50KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGltYXBsaWIuSU1BUDQuZXJyb3IsIGNsaWVudC5lbmFibGUsICdmb28nKQorCisgICAgQHJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X2VuYWJsZV9VVEY4X3JhaXNlc19lcnJvcl9pZl9ub3Rfc3VwcG9ydGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBOb25VVEY4U2VydmVyKFNpbXBsZUlNQVBIYW5kbGVyKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhpbWFwbGliLklNQVA0LmVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfcGFpcihOb25VVEY4U2VydmVyKSBhcyAoc2VydmVyLCBjbGllbnQpOgorICAgICAgICAgICAgICAgIHR5cCwgZGF0YSA9IGNsaWVudC5sb2dpbigndXNlcicsICdwYXNzJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cCwgJ09LJykKKyAgICAgICAgICAgICAgICBjbGllbnQuZW5hYmxlKCdVVEY4PUFDQ0VQVCcpCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgQHJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X2VuYWJsZV9VVEY4X1RydWVfYXBwZW5kKHNlbGYpOgorCisgICAgICAgIGNsYXNzIFVURjhBcHBlbmRTZXJ2ZXIoc2VsZi5VVEY4U2VydmVyKToKKyAgICAgICAgICAgIGRlZiBjbWRfQVBQRU5EKHNlbGYsIHRhZywgYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF90ZXh0bGluZSgnKycpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucmVzcG9uc2UgPSB5aWVsZAorICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfdGFnZ2VkKHRhZywgJ09LJywgJ29rYXknKQorCisgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfcGFpcihVVEY4QXBwZW5kU2VydmVyKSBhcyAoc2VydmVyLCBjbGllbnQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQuX2VuY29kaW5nLCAnYXNjaWknKQorICAgICAgICAgICAgY29kZSwgXyA9IGNsaWVudC5hdXRoZW50aWNhdGUoJ01ZQVVUSCcsIGxhbWJkYSB4OiBiJ2Zha2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCAnT0snKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIucmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWm1GclpRPT1cclxuJykgICMgYjY0IGVuY29kZWQgJ2Zha2UnCisgICAgICAgICAgICBjb2RlLCBfID0gY2xpZW50LmVuYWJsZSgnVVRGOD1BQ0NFUFQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCAnT0snKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQuX2VuY29kaW5nLCAndXRmLTgnKQorICAgICAgICAgICAgbXNnX3N0cmluZyA9ICdTdWJqZWN0OiDDvMOxw63CqcO2w7DDqScKKyAgICAgICAgICAgIHR5cCwgZGF0YSA9IGNsaWVudC5hcHBlbmQoCisgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgTm9uZSwgbXNnX3N0cmluZy5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cCwgJ09LJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2VydmVyLnJlc3BvbnNlLAorICAgICAgICAgICAgICAgICgnVVRGOCAoJXMpXHJcbicgJSBtc2dfc3RyaW5nKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICkKKworICAgICMgWFhYIGFsc28gbmVlZCBhIHRlc3QgdGhhdCBtYWtlcyBzdXJlIHRoYXQgdGhlIExpdGVyYWwgYW5kIFVudGFnZ2VkX3N0YXR1cworICAgICMgcmVnZXhlcyB1c2VzIHVuaWNvZGUgaW4gVVRGOCBtb2RlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgQVNDSUkuCisKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3Rfc2VhcmNoX2Rpc2FsbG93c19jaGFyc2V0X2luX3V0ZjhfbW9kZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9wYWlyKHNlbGYuVVRGOFNlcnZlcikgYXMgKHNlcnZlciwgY2xpZW50KToKKyAgICAgICAgICAgIHR5cCwgXyA9IGNsaWVudC5hdXRoZW50aWNhdGUoJ01ZQVVUSCcsIGxhbWJkYSB4OiBiJ2Zha2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXAsICdPSycpCisgICAgICAgICAgICB0eXAsIF8gPSBjbGllbnQuZW5hYmxlKCdVVEY4PUFDQ0VQVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cCwgJ09LJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbGllbnQudXRmOF9lbmFibGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaW1hcGxpYi5JTUFQNC5lcnJvciwgY2xpZW50LnNlYXJjaCwgJ2ZvbycsICdiYXInKQorCiAgICAgQHJlYXBfdGhyZWFkcwogICAgIGRlZiB0ZXN0X2JhZF9hdXRoX25hbWUoc2VsZik6CiAKQEAgLTI1OCw3ICszNTIsNyBAQAogCiAgICAgICAgICAgICBkZWYgY21kX0FVVEhFTlRJQ0FURShzZWxmLCB0YWcsIGFyZ3MpOgogICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfdGFnZ2VkKHRhZywgJ05PJywgJ3VucmVjb2duaXplZCBhdXRoZW50aWNhdGlvbiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSB7fScuZm9ybWF0KGFyZ3NbMF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlIHt9Jy5mb3JtYXQoYXJnc1swXSkpCiAKICAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9wYWlyKE15U2VydmVyKSBhcyAoc2VydmVyLCBjbGllbnQpOgogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhpbWFwbGliLklNQVA0LmVycm9yKToKQEAgLTI5MiwxMyArMzg2LDEzIEBACiAgICAgICAgICAgICBjb2RlLCBkYXRhID0gY2xpZW50LmF1dGhlbnRpY2F0ZSgnTVlBVVRIJywgbGFtYmRhIHg6IGInZmFrZScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsICdPSycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5yZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidabUZyWlE9PVxyXG4nKSAjYjY0IGVuY29kZWQgJ2Zha2UnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWm1GclpRPT1cclxuJykgICMgYjY0IGVuY29kZWQgJ2Zha2UnCiAKICAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9wYWlyKE15U2VydmVyKSBhcyAoc2VydmVyLCBjbGllbnQpOgogICAgICAgICAgICAgY29kZSwgZGF0YSA9IGNsaWVudC5hdXRoZW50aWNhdGUoJ01ZQVVUSCcsIGxhbWJkYSB4OiAnZmFrZScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsICdPSycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5yZXNwb25zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidabUZyWlE9PVxyXG4nKSAjYjY0IGVuY29kZWQgJ2Zha2UnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWm1GclpRPT1cclxuJykgICMgYjY0IGVuY29kZWQgJ2Zha2UnCiAKICAgICBAcmVhcF90aHJlYWRzCiAgICAgZGVmIHRlc3RfbG9naW5fY3JhbV9tZDUoc2VsZik6CkBAIC0zMDksOSArNDAzLDEwIEBACiAKICAgICAgICAgICAgIGRlZiBjbWRfQVVUSEVOVElDQVRFKHNlbGYsIHRhZywgYXJncyk6CiAgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF90ZXh0bGluZSgnKyBQREU0T1RZdU5qazNNVGN3T1RVeVFIQnZjM1J2Wm1acFkyVXVjbScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWemRHOXVMbTFqYVM1dVpYUT0nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Z6ZEc5dUxtMWphUzV1WlhRPScpCiAgICAgICAgICAgICAgICAgciA9IHlpZWxkCi0gICAgICAgICAgICAgICAgaWYgciA9PSAgYidkR2x0SUdZeFkyRTJZbVUwTmpSaU9XVm1ZVEZqWTJFMlptWmtObU5tTW1RNVpqTXlcclxuJzoKKyAgICAgICAgICAgICAgICBpZiAociA9PSBiJ2RHbHRJR1l4WTJFMlltVTBOalJpT1dWbVlUJworICAgICAgICAgICAgICAgICAgICAgICAgIGInRmpZMkUyWm1aa05tTm1NbVE1WmpNeVxyXG4nKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF90YWdnZWQodGFnLCAnT0snLCAnQ1JBTS1NRDUgc3VjY2Vzc2Z1bCcpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF90YWdnZWQodGFnLCAnTk8nLCAnTm8gYWNjZXNzJykKQEAgLTMyNyw3ICs0MjIsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsICJPSyIpCiAKIAotCiAgICAgQHJlYXBfdGhyZWFkcwogICAgIGRlZiB0ZXN0X2Fib3J0ZWRfYXV0aGVudGljYXRpb24oc2VsZik6CiAKQEAgLTM0NiwyNiArNDQwLDQ2IEBACiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGltYXBsaWIuSU1BUDQuZXJyb3IpOgogICAgICAgICAgICAgICAgIGNvZGUsIGRhdGEgPSBjbGllbnQuYXV0aGVudGljYXRlKCdNWUFVVEgnLCBsYW1iZGEgeDogTm9uZSkKIAorCiAgICAgZGVmIHRlc3RfbGluZXRvb2xvbmcoc2VsZik6CiAgICAgICAgIGNsYXNzIFRvb0xvbmdIYW5kbGVyKFNpbXBsZUlNQVBIYW5kbGVyKToKICAgICAgICAgICAgIGRlZiBoYW5kbGUoc2VsZik6CiAgICAgICAgICAgICAgICAgIyBTZW5kIGEgdmVyeSBsb25nIHJlc3BvbnNlIGxpbmUKLSAgICAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGInKiBPSyAnICsgaW1hcGxpYi5fTUFYTElORSpiJ3gnICsgYidcclxuJykKKyAgICAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGInKiBPSyAnICsgaW1hcGxpYi5fTUFYTElORSAqIGIneCcgKyBiJ1xyXG4nKQogCiAgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKFRvb0xvbmdIYW5kbGVyKSBhcyBzZXJ2ZXI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpbWFwbGliLklNQVA0LmVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFwX2NsYXNzLCAqc2VydmVyLnNlcnZlcl9hZGRyZXNzKQogCisgICAgQHJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X3NpbXBsZV93aXRoX3N0YXRlbWVudChzZWxmKToKKyAgICAgICAgIyBzaW1wbGVzdCBjYWxsCisgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKFNpbXBsZUlNQVBIYW5kbGVyKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICB3aXRoIHNlbGYuaW1hcF9jbGFzcygqc2VydmVyLnNlcnZlcl9hZGRyZXNzKToKKyAgICAgICAgICAgICAgICBwYXNzCiAKLWNsYXNzIFRocmVhZGVkTmV0d29ya2VkVGVzdHMoQmFzZVRocmVhZGVkTmV0d29ya2VkVGVzdHMpOgorICAgIEByZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9zZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgIHdpdGggc2VsZi5pbWFwX2NsYXNzKCpzZXJ2ZXIuc2VydmVyX2FkZHJlc3MpIGFzIGltYXA6CisgICAgICAgICAgICAgICAgaW1hcC5sb2dpbigndXNlcicsICdwYXNzJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5sb2dnZWQsICd1c2VyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlci5sb2dnZWQpCiAKLSAgICBzZXJ2ZXJfY2xhc3MgPSBzb2NrZXRzZXJ2ZXIuVENQU2VydmVyCi0gICAgaW1hcF9jbGFzcyA9IGltYXBsaWIuSU1BUDQKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3Rfd2l0aF9zdGF0ZW1lbnRfbG9nb3V0KHNlbGYpOgorICAgICAgICAjIHdoYXQgaGFwcGVucyBpZiBhbHJlYWR5IGxvZ291dCBpbiB0aGUgYmxvY2s/CisgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKFNpbXBsZUlNQVBIYW5kbGVyKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICB3aXRoIHNlbGYuaW1hcF9jbGFzcygqc2VydmVyLnNlcnZlcl9hZGRyZXNzKSBhcyBpbWFwOgorICAgICAgICAgICAgICAgIGltYXAubG9naW4oJ3VzZXInLCAncGFzcycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIubG9nZ2VkLCAndXNlcicpCisgICAgICAgICAgICAgICAgaW1hcC5sb2dvdXQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlci5sb2dnZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZXJ2ZXIubG9nZ2VkKQogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHNzbCwgIlNTTCBub3QgYXZhaWxhYmxlIikKLWNsYXNzIFRocmVhZGVkTmV0d29ya2VkVGVzdHNTU0woQmFzZVRocmVhZGVkTmV0d29ya2VkVGVzdHMpOgotCitjbGFzcyBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzU1NMKFRocmVhZGVkTmV0d29ya2VkVGVzdHMpOgogICAgIHNlcnZlcl9jbGFzcyA9IFNlY3VyZVRDUFNlcnZlcgogICAgIGltYXBfY2xhc3MgPSBJTUFQNF9TU0wKIApAQCAtMzc2LDggKzQ5MCw5IEBACiAgICAgICAgIHNzbF9jb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQogICAgICAgICBzc2xfY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0FGSUxFKQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuQ2VydGlmaWNhdGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAnMTI3LjAuMC4xJyBkb2Vzbid0IG1hdGNoICdsb2NhbGhvc3QnIik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICBzc2wuQ2VydGlmaWNhdGVFcnJvciwKKyAgICAgICAgICAgICAgICAiaG9zdG5hbWUgJzEyNy4wLjAuMScgZG9lc24ndCBtYXRjaCAnbG9jYWxob3N0JyIpOgogICAgICAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9zZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpIGFzIHNlcnZlcjoKICAgICAgICAgICAgICAgICBjbGllbnQgPSBzZWxmLmltYXBfY2xhc3MoKnNlcnZlci5zZXJ2ZXJfYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NvbnRleHQ9c3NsX2NvbnRleHQpCkBAIC0zODksNiArNTA0LDggQEAKICAgICAgICAgICAgIGNsaWVudC5zaHV0ZG93bigpCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyksICduZXR3b3JrIHJlc291cmNlIGRpc2FibGVkJykKIGNsYXNzIFJlbW90ZUlNQVBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBob3N0ID0gJ2N5cnVzLmFuZHJldy5jbXUuZWR1JwogICAgIHBvcnQgPSAxNDMKQEAgLTQyMiw2ICs1MzksOCBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHNzbCwgIlNTTCBub3QgYXZhaWxhYmxlIikKK0B1bml0dGVzdC5za2lwVW5sZXNzKAorICAgIHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpLCAnbmV0d29yayByZXNvdXJjZSBkaXNhYmxlZCcpCiBjbGFzcyBSZW1vdGVJTUFQX1NUQVJUVExTVGVzdChSZW1vdGVJTUFQVGVzdCk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC00NzUsNyArNTk0LDggQEAKIAogICAgIGRlZiB0ZXN0X2xvZ2luY2FwYV93aXRoX2NsaWVudF9zc2xfY29udGV4dChzZWxmKToKICAgICAgICAgd2l0aCB0cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5ob3N0KToKLSAgICAgICAgICAgIF9zZXJ2ZXIgPSBzZWxmLmltYXBfY2xhc3Moc2VsZi5ob3N0LCBzZWxmLnBvcnQsIHNzbF9jb250ZXh0PXNlbGYuY3JlYXRlX3NzbF9jb250ZXh0KCkpCisgICAgICAgICAgICBfc2VydmVyID0gc2VsZi5pbWFwX2NsYXNzKAorICAgICAgICAgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0LCBzc2xfY29udGV4dD1zZWxmLmNyZWF0ZV9zc2xfY29udGV4dCgpKQogICAgICAgICAgICAgc2VsZi5jaGVja19sb2dpbmNhcGEoX3NlcnZlcikKIAogICAgIGRlZiB0ZXN0X2xvZ291dChzZWxmKToKQEAgLTQ4NiwzNSArNjA2LDE1IEBACiAKICAgICBkZWYgdGVzdF9zc2xfY29udGV4dF9jZXJ0ZmlsZV9leGNsdXNpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdHJhbnNpZW50X2ludGVybmV0KHNlbGYuaG9zdCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmltYXBfY2xhc3MsIHNlbGYuaG9zdCwgc2VsZi5wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsIHNzbF9jb250ZXh0PXNlbGYuY3JlYXRlX3NzbF9jb250ZXh0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmltYXBfY2xhc3MsIHNlbGYuaG9zdCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBzc2xfY29udGV4dD1zZWxmLmNyZWF0ZV9zc2xfY29udGV4dCgpKQogCiAgICAgZGVmIHRlc3Rfc3NsX2NvbnRleHRfa2V5ZmlsZV9leGNsdXNpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdHJhbnNpZW50X2ludGVybmV0KHNlbGYuaG9zdCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmltYXBfY2xhc3MsIHNlbGYuaG9zdCwgc2VsZi5wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1DRVJURklMRSwgc3NsX2NvbnRleHQ9c2VsZi5jcmVhdGVfc3NsX2NvbnRleHQoKSkKLQotCi1kZWYgbG9hZF90ZXN0cygqYXJncyk6Ci0gICAgdGVzdHMgPSBbVGVzdEltYXBsaWJdCi0KLSAgICBpZiBzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKToKLSAgICAgICAgaWYgc3NsOgotICAgICAgICAgICAgZ2xvYmFsIENFUlRGSUxFLCBDQUZJTEUKLSAgICAgICAgICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleWNlcnQzLnBlbSIpCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0VSVEZJTEUpOgotICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlcyEiKQotICAgICAgICAgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5Y2FjZXJ0LnBlbSIpCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0FGSUxFKToKLSAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgQ0EgZmlsZSEiKQotICAgICAgICB0ZXN0cy5leHRlbmQoWwotICAgICAgICAgICAgVGhyZWFkZWROZXR3b3JrZWRUZXN0cywgVGhyZWFkZWROZXR3b3JrZWRUZXN0c1NTTCwKLSAgICAgICAgICAgIFJlbW90ZUlNQVBUZXN0LCBSZW1vdGVJTUFQX1NTTFRlc3QsIFJlbW90ZUlNQVBfU1RBUlRUTFNUZXN0LAotICAgICAgICBdKQotCi0gICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZShbdW5pdHRlc3QubWFrZVN1aXRlKHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYuaW1hcF9jbGFzcywgc2VsZi5ob3N0LCBzZWxmLnBvcnQsCisgICAgICAgICAgICAgICAga2V5ZmlsZT1DRVJURklMRSwgc3NsX2NvbnRleHQ9c2VsZi5jcmVhdGVfc3NsX2NvbnRleHQoKSkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbWdoZHIucHkgYi9MaWIvdGVzdC90ZXN0X2ltZ2hkci5weQppbmRleCAwYWQ0MzQzLi5iNTRkYWY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltZ2hkci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltZ2hkci5weQpAQCAtMTYsNyArMTYsOSBAQAogICAgICgncHl0aG9uLnJhcycsICdyYXN0JyksCiAgICAgKCdweXRob24uc2dpJywgJ3JnYicpLAogICAgICgncHl0aG9uLnRpZmYnLCAndGlmZicpLAotICAgICgncHl0aG9uLnhibScsICd4Ym0nKQorICAgICgncHl0aG9uLnhibScsICd4Ym0nKSwKKyAgICAoJ3B5dGhvbi53ZWJwJywgJ3dlYnAnKSwKKyAgICAoJ3B5dGhvbi5leHInLCAnZXhyJyksCiApCiAKIGNsYXNzIFVuc2Vla2FibGVJTyhpby5GaWxlSU8pOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQppbmRleCA4MGI5ZWMzLi5lZTllZTFhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQpAQCAtMyw2ICszLDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBfdGhyZWFkID0gTm9uZQogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc2h1dGlsCkBAIC0xMTEsNyArMTEyLDYgQEAKICAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGVtcF9tb2RfbmFtZSArICcucHknKQogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGVtcF9tb2RfbmFtZSArICcucHljJykKLSAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRlbXBfbW9kX25hbWUgKyAnLnB5bycpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTU2MDQoc2VsZik6CiAgICAgICAgICMgVGVzdCBjYW5ub3QgY292ZXIgaW1wLmxvYWRfY29tcGlsZWQgZnVuY3Rpb24uCkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFja2FnZS5iLCAyKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICBmb3IgZXh0IGluICgnLnB5JywgJy5weWMnLCAnLnB5bycpOgorICAgICAgICAgICAgZm9yIGV4dCBpbiAoJy5weScsICcucHljJyk6CiAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGVtcF9tb2RfbmFtZSArIGV4dCkKICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhpbml0X2ZpbGVfbmFtZSArIGV4dCkKICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRlc3RfcGFja2FnZV9uYW1lKQpAQCAtMjc2LDYgKzI3NiwyOSBAQAogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiZm91bmQgbW9kdWxlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgQyBleHRlbnNpb24iKQogICAgICAgICBpbXAubG9hZF9tb2R1bGUobmFtZSwgTm9uZSwgKmZvdW5kWzE6XSkKIAorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKKyAgICBkZWYgdGVzdF9pc3N1ZTI0NzQ4X2xvYWRfbW9kdWxlX3NraXBzX3N5c19tb2R1bGVzX2NoZWNrKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3Rlc3QuaW1wX2R1bW15JworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYygnX3Rlc3RtdWx0aXBoYXNlJykKKyAgICAgICAgICAgIG1vZHVsZSA9IGltcC5sb2FkX2R5bmFtaWMobmFtZSwgc3BlYy5vcmlnaW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fc3BlY19fLm5hbWUsIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3NwZWNfXy5vcmlnaW4sIHNwZWMub3JpZ2luKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIG1vZHVsZSwgJ2R1bW15X25hbWUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuaW50X2NvbnN0LCAxOTY5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKwogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsCiAgICAgICAgICJ0ZXN0IG1lYW5pbmdmdWwgb25seSB3aGVuIHdyaXRpbmcgYnl0ZWNvZGUiKQogICAgIGRlZiB0ZXN0X2J1Zzc3MzIoc2VsZik6CkBAIC0zNDYsNTYgKzM2OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXV4Lnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksIGV4cGVjdCkKIAotICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX25vX2NhY2hlX3RhZyhzZWxmKToKLSAgICAgICAgIyBOb24gY2FjaGUgdGFnIG1lYW5zIE5vdEltcGxlbWVudGVkRXJyb3IuCi0gICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLmltcGxlbWVudGF0aW9uLCAnY2FjaGVfdGFnJywgTm9uZSk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnd2hhdGV2ZXIucHknKQotCi0gICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfbm9fZG90KHNlbGYpOgotICAgICAgICAjIERpcmVjdG9yeSB3aXRoIGEgZG90LCBmaWxlbmFtZSB3aXRob3V0IGRvdC4KLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vLmJhcicsICdmaWxlJykKLSAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28uYmFyJywgJ19fcHljYWNoZV9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxle30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQotCi0gICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3B0aW1pemVkKHNlbGYpOgotICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKLSAgICAgICAgIyBkZWZpbmVkIC5weW8gZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCi0gICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weW8nLmZvcm1hdChzZWxmLnRhZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIEZhbHNlKSwgZXhwZWN0KQotCi0gICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2VfY3dkKHNlbGYpOgotICAgICAgICBwYXRoID0gJ2Zvby5weScKLSAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdfX3B5Y2FjaGVfXycsICdmb28ue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQotCi0gICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3ZlcnJpZGUoc2VsZik6Ci0gICAgICAgICMgV2hlbiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgaXQgY2FuIGJlIGFueSB0cnVlLWlzaCBvciBmYWxzZS1pc2gKLSAgICAgICAgIyB2YWx1ZS4KLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXoucHknKQotICAgICAgICBwYXJ0aWFsX2V4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdfX3B5Y2FjaGVfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXoue30ucHknLmZvcm1hdChzZWxmLnRhZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFtdKSwgcGFydGlhbF9leHBlY3QgKyAnbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFsxN10pLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxfZXhwZWN0ICsgJ2MnKQotICAgICAgICAjIEhvd2V2ZXIgaWYgdGhlIGJvb2wtaXNobmVzcyBjYW4ndCBiZSBkZXRlcm1pbmVkLCB0aGUgZXhjZXB0aW9uCi0gICAgICAgICMgcHJvcGFnYXRlcy4KLSAgICAgICAgY2xhc3MgQmVhcmlzaDoKLSAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKLSAgICAgICAgICAgIGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnL2Zvby9iYXIvYmF6LnB5JywgQmVhcmlzaCgpKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3Muc2VwID09ICdcXCcgYW5kIG9zLmFsdHNlcCA9PSAnLycsCi0gICAgICAgICAgICAgICAgICAgICAndGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlcmUgb3MuYWx0c2VwIGlzIGRlZmluZWQnKQotICAgIGRlZiB0ZXN0X3NlcF9hbHRzZXBfYW5kX3NlcF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBXaW5kb3dzIHBhdGggYW5kIFBFUCAzMTQ3IHdoZXJlIHNlcCBpcyByaWdodCBvZiBhbHRzZXAuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJ1xcZm9vXFxiYXJcXGJhei9xdXgucHknLCBUcnVlKSwKLSAgICAgICAgICAgICdcXGZvb1xcYmFyXFxiYXpcXF9fcHljYWNoZV9fXFxxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQotCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBub3QgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyB0byBub3QgYmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICdOb25lJykKQEAgLTQwNyw2OCArMzgwLDYgQEAKICAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKSwgZXhwZWN0KQogCi0gICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fY2FjaGVfdGFnKHNlbGYpOgotICAgICAgICAjIElmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSwgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvci4KLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignYmxhaCcsICdfX3B5Y2FjaGVfXycsICd3aGF0ZXZlci5weWMnKQotICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKHN5cy5pbXBsZW1lbnRhdGlvbiwgJ2NhY2hlX3RhZycsIE5vbmUpOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKLSAgICAgICAgICAgICAgICBpbXAuc291cmNlX2Zyb21fY2FjaGUocGF0aCkKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX2JhZF9wYXRoKHNlbGYpOgotICAgICAgICAjIFdoZW4gdGhlIHBhdGggdG8gYSBweWMgZmlsZSBpcyBub3QgaW4gUEVQIDMxNDcgZm9ybWF0LCBhIFZhbHVlRXJyb3IKLSAgICAgICAgIyBpcyByYWlzZWQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgVmFsdWVFcnJvciwgaW1wLnNvdXJjZV9mcm9tX2NhY2hlLCAnL2Zvby9iYXIvYmF6cXV4LnB5YycpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19zbGFzaChzZWxmKToKLSAgICAgICAgIyBObyBzbGFzaGVzIGF0IGFsbCBpbiBwYXRoIC0+IFZhbHVlRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICBWYWx1ZUVycm9yLCBpbXAuc291cmNlX2Zyb21fY2FjaGUsICdmb28uY3B5dGhvbi0zMi5weWMnKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfdG9vX2Zld19kb3RzKHNlbGYpOgotICAgICAgICAjIFRvbyBmZXcgZG90cyBpbiBmaW5hbCBwYXRoIGNvbXBvbmVudCAtPiBWYWx1ZUVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgVmFsdWVFcnJvciwgaW1wLnNvdXJjZV9mcm9tX2NhY2hlLCAnX19weWNhY2hlX18vZm9vLnB5YycpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV90b29fbWFueV9kb3RzKHNlbGYpOgotICAgICAgICAjIFRvbyBtYW55IGRvdHMgaW4gZmluYWwgcGF0aCBjb21wb25lbnQgLT4gVmFsdWVFcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIFZhbHVlRXJyb3IsIGltcC5zb3VyY2VfZnJvbV9jYWNoZSwKLSAgICAgICAgICAgICdfX3B5Y2FjaGVfXy9mb28uY3B5dGhvbi0zMi5mb28ucHljJykKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX19weWNhY2hlX18oc2VsZik6Ci0gICAgICAgICMgQW5vdGhlciBwcm9ibGVtIHdpdGggdGhlIHBhdGggLT4gVmFsdWVFcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIFZhbHVlRXJyb3IsIGltcC5zb3VyY2VfZnJvbV9jYWNoZSwKLSAgICAgICAgICAgICcvZm9vL2Jhci9mb28uY3B5dGhvbi0zMi5mb28ucHljJykKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2VfX19maWxlX18oc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3JykKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJwZXAzMTQ3IG1vZHVsZSBhbHJlYWR5IGV4aXN0czogJXIiICUgKG0sKSkKLSAgICAgICAgIyBUZXN0IHRoYXQgYSBwYWNrYWdlJ3MgX19maWxlX18gcG9pbnRzIHRvIHRoZSByaWdodCBzb3VyY2UgZGlyZWN0b3J5LgotICAgICAgICBvcy5ta2RpcigncGVwMzE0NycpCi0gICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCi0gICAgICAgIGRlZiBjbGVhbnVwKCk6Ci0gICAgICAgICAgICBpZiBzeXMucGF0aFswXSA9PSBvcy5jdXJkaXI6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKCdwZXAzMTQ3JykKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCi0gICAgICAgICMgVG91Y2ggdGhlIF9faW5pdF9fLnB5IGZpbGUuCi0gICAgICAgIHN1cHBvcnQuY3JlYXRlX2VtcHR5X2ZpbGUoJ3BlcDMxNDcvX19pbml0X18ucHknKQotICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQotICAgICAgICBleHBlY3RlZF9fX2ZpbGVfXyA9IG9zLnNlcC5qb2luKCgnLicsICdwZXAzMTQ3JywgJ19faW5pdF9fLnB5JykpCi0gICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fZmlsZV9fLCBleHBlY3RlZF9fX2ZpbGVfXywgKG0uX19maWxlX18sIG0uX19wYXRoX18sIHN5cy5wYXRoLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkpCi0gICAgICAgICMgRW5zdXJlIHdlIGxvYWQgdGhlIHB5YyBmaWxlLgotICAgICAgICBzdXBwb3J0LnVubG9hZCgncGVwMzE0NycpCi0gICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3JykKLSAgICAgICAgc3VwcG9ydC51bmxvYWQoJ3BlcDMxNDcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19maWxlX18sIGV4cGVjdGVkX19fZmlsZV9fLCAobS5fX2ZpbGVfXywgbS5fX3BhdGhfXywgc3lzLnBhdGgsIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKSkKLQogCiBjbGFzcyBOdWxsSW1wb3J0ZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgQHVuaXR0ZXN0LnNraXBJZihzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRSBpcyBOb25lLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBMaWIvdGVzdC90ZXN0X2ltcG9ydC5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnQvX19pbml0X18ucHkKaW5kZXggYjQ4NDJjNS4uMWUzMzI3NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvX19pbml0X18ucHkKQEAgLTEsNyArMSw3IEBACiAjIFdlIGltcG9ydCBpbXBvcnRsaWIgKkFTQVAqIGluIG9yZGVyIHRvIHRlc3QgIzE1Mzg2CiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgaW1wb3J0bGliLnV0aWwKLWZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IF9nZXRfc291cmNlZmlsZQorZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbCBpbXBvcnQgX2dldF9zb3VyY2VmaWxlCiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKQEAgLTIxLDggKzIxLDkgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoCiAgICAgRW52aXJvbm1lbnRWYXJHdWFyZCwgVEVTVEZOLCBjaGVja193YXJuaW5ncywgZm9yZ2V0LCBpc19qeXRob24sCiAgICAgbWFrZV9sZWdhY3lfcHljLCBybXRyZWUsIHJ1bl91bml0dGVzdCwgc3dhcF9hdHRyLCBzd2FwX2l0ZW0sIHRlbXBfdW1hc2ssCi0gICAgdW5saW5rLCB1bmxvYWQsIGNyZWF0ZV9lbXB0eV9maWxlLCBjcHl0aG9uX29ubHksIFRFU1RGTl9VTkVOQ09EQUJMRSkKLWZyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlcgorICAgIHVubGluaywgdW5sb2FkLCBjcmVhdGVfZW1wdHlfZmlsZSwgY3B5dGhvbl9vbmx5LCBURVNURk5fVU5FTkNPREFCTEUsCisgICAgdGVtcF9kaXIpCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogCiAKIHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZSA9IHVuaXR0ZXN0LnNraXBJZigKQEAgLTMyLDcgKzMzLDYgQEAKIGRlZiByZW1vdmVfZmlsZXMobmFtZSk6CiAgICAgZm9yIGYgaW4gKG5hbWUgKyAiLnB5IiwKICAgICAgICAgICAgICAgbmFtZSArICIucHljIiwKLSAgICAgICAgICAgICAgbmFtZSArICIucHlvIiwKICAgICAgICAgICAgICAgbmFtZSArICIucHl3IiwKICAgICAgICAgICAgICAgbmFtZSArICIkcHkuY2xhc3MiKToKICAgICAgICAgdW5saW5rKGYpCkBAIC00Niw3ICs0Niw3IEBACiAgICAgIyB0ZW1wb3JhcmlseSBjbGVhcnMgdGhlIG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzIChpZiBhbnkpCiAgICAgIyByZXZlcnRzIG9yIHJlbW92ZXMgdGhlIG1vZHVsZSB3aGVuIGNsZWFuaW5nIHVwCiAgICAgbmFtZSA9IG5hbWUgb3IgInNwYW0iCi0gICAgd2l0aCBzY3JpcHRfaGVscGVyLnRlbXBfZGlyKCkgYXMgdGVtcGRpcjoKKyAgICB3aXRoIHRlbXBfZGlyKCkgYXMgdGVtcGRpcjoKICAgICAgICAgcGF0aCA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQodGVtcGRpciwgbmFtZSwgc291cmNlKQogICAgICAgICBvbGRfbW9kdWxlID0gc3lzLm1vZHVsZXMucG9wKG5hbWUsIE5vbmUpCiAgICAgICAgIHRyeToKQEAgLTg0LDcgKzg0LDYgQEAKICAgICAgICAgZGVmIHRlc3Rfd2l0aF9leHRlbnNpb24oZXh0KToKICAgICAgICAgICAgICMgVGhlIGV4dGVuc2lvbiBpcyBub3JtYWxseSAiLnB5IiwgcGVyaGFwcyAiLnB5dyIuCiAgICAgICAgICAgICBzb3VyY2UgPSBURVNURk4gKyBleHQKLSAgICAgICAgICAgIHB5byA9IFRFU1RGTiArICIucHlvIgogICAgICAgICAgICAgaWYgaXNfanl0aG9uOgogICAgICAgICAgICAgICAgIHB5YyA9IFRFU1RGTiArICIkcHkuY2xhc3MiCiAgICAgICAgICAgICBlbHNlOgpAQCAtMTE1LDcgKzExNCw2IEBACiAgICAgICAgICAgICAgICAgZm9yZ2V0KFRFU1RGTikKICAgICAgICAgICAgICAgICB1bmxpbmsoc291cmNlKQogICAgICAgICAgICAgICAgIHVubGluayhweWMpCi0gICAgICAgICAgICAgICAgdW5saW5rKHB5bykKIAogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQogICAgICAgICB0cnk6CkBAIC0xMzgsNyArMTM2LDcgQEAKICAgICAgICAgICAgIGYud3JpdGUoJ10nKQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgICMgQ29tcGlsZSAmIHJlbW92ZSAucHkgZmlsZTsgd2Ugb25seSBuZWVkIC5weWMgKG9yIC5weW8pLgorICAgICAgICAgICAgIyBDb21waWxlICYgcmVtb3ZlIC5weSBmaWxlOyB3ZSBvbmx5IG5lZWQgLnB5Yy4KICAgICAgICAgICAgICMgQnl0ZWNvZGUgbXVzdCBiZSByZWxvY2F0ZWQgZnJvbSB0aGUgUEVQIDMxNDcgYnl0ZWNvZGUtb25seSBsb2NhdGlvbi4KICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlbmFtZSkKICAgICAgICAgZmluYWxseToKQEAgLTI1Miw3ICsyNTAsNyBAQAogICAgICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgICAgIG1vZCA9IF9faW1wb3J0X18oVEVTVEZOKQogICAgICAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChtb2QuX19maWxlX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4dCwgKCcucHljJywgJy5weW8nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0LCAnLnB5YycpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KICAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCkBAIC0yODAsNiArMjc4LDcgQEAKICAgICAgICAgICAgICIiIikpCiAgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayh0ZXN0Zm4pCiAKKyAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCiAgICAgZGVmIHRlc3RfdGltZXN0YW1wX292ZXJmbG93KHNlbGYpOgogICAgICAgICAjIEEgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcCBsYXJnZXIgdGhhbiAyKiozMiBzaG91bGQgbm90IGJlIGEgcHJvYmxlbQogICAgICAgICAjIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlIChpc3N1ZSAjMTEyMzUpLgpAQCAtMjk0LDcgKzI5Myw4IEBACiAgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3Qgc2V0IG1vZGlmaWNhdGlvbiB0aW1lIHRvIGxhcmdlIGludGVnZXIiKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGdldGF0dHIoZXJybm8sICdFT1ZFUkZMT1cnLCBOb25lKToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoZ2V0YXR0cihlcnJubywgJ0VPVkVSRkxPVycsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKGVycm5vLCAnRUlOVkFMJywgTm9uZSkpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNhbm5vdCBzZXQgbW9kaWZpY2F0aW9uIHRpbWUgdG8gbGFyZ2UgaW50ZWdlciAoe30pIi5mb3JtYXQoZSkpCiAgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKQEAgLTMyNSwxMCArMzI1LDIzIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgIl5jYW5ub3QgaW1wb3J0IG5hbWUgJ2JvZ3VzJyIpOgogICAgICAgICAgICAgZnJvbSByZSBpbXBvcnQgYm9ndXMKIAorICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0X0F0dHJpYnV0ZUVycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNDQ5MjogdHJ5aW5nIHRvIGltcG9ydCBhbiBhdHRyaWJ1dGUgdGhhdCByYWlzZXMgYW4KKyAgICAgICAgIyBBdHRyaWJ1dGVFcnJvciBzaG91bGQgbGVhZCB0byBhbiBJbXBvcnRFcnJvci4KKyAgICAgICAgY2xhc3MgQWx3YXlzQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgXyk6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKworICAgICAgICBtb2R1bGVfbmFtZSA9ICd0ZXN0X2Zyb21faW1wb3J0X0F0dHJpYnV0ZUVycm9yJworICAgICAgICBzZWxmLmFkZENsZWFudXAodW5sb2FkLCBtb2R1bGVfbmFtZSkKKyAgICAgICAgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdID0gQWx3YXlzQXR0cmlidXRlRXJyb3IoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGZyb20gdGVzdF9mcm9tX2ltcG9ydF9BdHRyaWJ1dGVFcnJvciBpbXBvcnQgZG9lc19ub3RfZXhpc3QKKwogCiBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCiBjbGFzcyBGaWxlUGVybWlzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIHRlc3RzIGZvciBmaWxlIG1vZGUgb24gY2FjaGVkIC5weWMvLnB5byBmaWxlcworICAgICMgdGVzdHMgZm9yIGZpbGUgbW9kZSBvbiBjYWNoZWQgLnB5YyBmaWxlcwogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IG1lYW5pbmdmdWwgb25seSBvbiBwb3NpeCBzeXN0ZW1zIikKQEAgLTMzOSw3ICszNTIsNyBAQAogICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9faW1wb3J0X18gZGlkIG5vdCByZXN1bHQgaW4gY3JlYXRpb24gb2YgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiZWl0aGVyIGEgLnB5YyBvciAucHlvIGZpbGUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAiYSAucHljIGZpbGUiKQogICAgICAgICAgICAgc3RhdF9pbmZvID0gb3Muc3RhdChjYWNoZWRfcGF0aCkKIAogICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHVtYXNrIGlzIHJlc3BlY3RlZCwgYW5kIHRoZSBleGVjdXRhYmxlIGJpdHMKQEAgLTM1OCw3ICszNzEsNyBAQAogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9faW1wb3J0X18gZGlkIG5vdCByZXN1bHQgaW4gY3JlYXRpb24gb2YgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiZWl0aGVyIGEgLnB5YyBvciAucHlvIGZpbGUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAiYSAucHljIGZpbGUiKQogICAgICAgICAgICAgc3RhdF9pbmZvID0gb3Muc3RhdChjYWNoZWRfcGF0aCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdChzdGF0LlNfSU1PREUoc3RhdF9pbmZvLnN0X21vZGUpKSwgb2N0KG1vZGUpKQpAQCAtMzczLDcgKzM4Niw3IEBACiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiX19pbXBvcnRfXyBkaWQgbm90IHJlc3VsdCBpbiBjcmVhdGlvbiBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJlaXRoZXIgYSAucHljIG9yIC5weW8gZmlsZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhIC5weWMgZmlsZSIpCiAgICAgICAgICAgICBzdGF0X2luZm8gPSBvcy5zdGF0KGNhY2hlZF9wYXRoKQogCiAgICAgICAgIGV4cGVjdGVkID0gbW9kZSB8IDBvMjAwICMgQWNjb3VudCBmb3IgZml4IGZvciBpc3N1ZSAjNjA3NApAQCAtNDA0LDEwICs0MTcsNyBAQAogICAgICAgICAgICAgdW5saW5rKHBhdGgpCiAgICAgICAgICAgICB1bmxvYWQobmFtZSkKICAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCi0gICAgICAgICAgICBpZiBfX2RlYnVnX186Ci0gICAgICAgICAgICAgICAgYnl0ZWNvZGVfb25seSA9IHBhdGggKyAiYyIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYnl0ZWNvZGVfb25seSA9IHBhdGggKyAibyIKKyAgICAgICAgICAgIGJ5dGVjb2RlX29ubHkgPSBwYXRoICsgImMiCiAgICAgICAgICAgICBvcy5yZW5hbWUoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCksIGJ5dGVjb2RlX29ubHkpCiAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLngsICdyZXdyaXR0ZW4nKQpAQCAtNTY4LDcgKzU3OCw3IEBACiAKICAgICBkZWYgdGVzdF9yZWxpbXBvcnRfc3RhcihzZWxmKToKICAgICAgICAgIyBUaGlzIHdpbGwgaW1wb3J0ICogZnJvbSAudGVzdF9pbXBvcnQuCi0gICAgICAgIGZyb20gLiBpbXBvcnQgcmVsaW1wb3J0CisgICAgICAgIGZyb20gLi4gaW1wb3J0IHJlbGltcG9ydAogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihyZWxpbXBvcnQsICJSZWxhdGl2ZUltcG9ydFRlc3RzIikpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTMyMjEoc2VsZik6CkBAIC02MzEsOSArNjQxLDcgQEAKIAogCiBjbGFzcyBQeWNhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgVGVzdCB0aGUgdmFyaW91cyBQRVAgMzE0NyByZWxhdGVkIGJlaGF2aW9ycy4KLQotICAgIHRhZyA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKyAgICAjIFRlc3QgdGhlIHZhcmlvdXMgUEVQIDMxNDcvNDg4LXJlbGF0ZWQgYmVoYXZpb3JzLgogCiAgICAgZGVmIF9jbGVhbihzZWxmKToKICAgICAgICAgZm9yZ2V0KFRFU1RGTikKQEAgLTY1OCw5ICs2NjYsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cygnX19weWNhY2hlX18nKSkKICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cygnX19weWNhY2hlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbigKLSAgICAgICAgICAgICdfX3B5Y2FjaGVfXycsICd7fS57fS5weXt9Jy5mb3JtYXQoCi0gICAgICAgICAgICBURVNURk4sIHNlbGYudGFnLCAnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKSkpKQorICAgICAgICBweWNfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHljX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2J5dGVjb2RlIGZpbGUgeyFyfSBmb3IgeyFyfSBkb2VzIG5vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhpc3QnLmZvcm1hdChweWNfcGF0aCwgVEVTVEZOKSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgb24gcG9zaXggc3lzdGVtcyIpCkBAIC02NzMsOCArNjgyLDEwIEBACiAgICAgICAgIHdpdGggdGVtcF91bWFzaygwbzIyMik6CiAgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKCdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbigKLSAgICAgICAgICAgICdfX3B5Y2FjaGVfXycsICd7fS57fS5weWMnLmZvcm1hdChURVNURk4sIHNlbGYudGFnKSkpKQorICAgICAgICBweWNfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHB5Y19wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdieXRlY29kZSBmaWxlIHshcn0gZm9yIHshcn0gJworICAgICAgICAgICAgICAgICAgICAgICAgJ2V4aXN0cycuZm9ybWF0KHB5Y19wYXRoLCBURVNURk4pKQogCiAgICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQogICAgIGRlZiB0ZXN0X21pc3Npbmdfc291cmNlKHNlbGYpOgpAQCAtODQ5LDE5ICs4NjAsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19wYWNrYWdlX18sICdpbXBvcnRsaWInKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobW9kLl9fZmlsZV9fLmVuZHN3aXRoKCdfYm9vdHN0cmFwLnB5JyksIG1vZC5fX2ZpbGVfXykKIAorICAgIGRlZiB0ZXN0X2Zyb3plbl9pbXBvcnRsaWJfZXh0ZXJuYWxfaXNfYm9vdHN0cmFwX2V4dGVybmFsKHNlbGYpOgorICAgICAgICBmcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcF9leHRlcm5hbAorICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1snX2Zyb3plbl9pbXBvcnRsaWJfZXh0ZXJuYWwnXQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZCwgX2Jvb3RzdHJhcF9leHRlcm5hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19uYW1lX18sICdpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLl9fcGFja2FnZV9fLCAnaW1wb3J0bGliJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vZC5fX2ZpbGVfXy5lbmRzd2l0aCgnX2Jvb3RzdHJhcF9leHRlcm5hbC5weScpLCBtb2QuX19maWxlX18pCisKICAgICBkZWYgdGVzdF90aGVyZV9jYW5fYmVfb25seV9vbmUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE1Mzg2IHJldmVhbGVkIGEgdHJpY2t5IGxvb3Bob2xlIGluIHRoZSBib290c3RyYXBwaW5nCiAgICAgICAgICMgVGhpcyB0ZXN0IGlzIHRlY2huaWNhbGx5IHJlZHVuZGFudCwgc2luY2UgdGhlIGJ1ZyBjYXVzZWQgaW1wb3J0aW5nCiAgICAgICAgICMgdGhpcyB0ZXN0IG1vZHVsZSB0byBjcmFzaCBjb21wbGV0ZWx5LCBidXQgaXQgaGVscHMgcHJvdmUgdGhlIHBvaW50CiAgICAgICAgIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbJ19mcm96ZW5faW1wb3J0bGliJ10KLSAgICAgICAgc2VsZi5hc3NlcnRJcyhtYWNoaW5lcnkuRmlsZUZpbmRlciwgbW9kLkZpbGVGaW5kZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWFjaGluZXJ5Lk1vZHVsZVNwZWMsIG1vZC5Nb2R1bGVTcGVjKQogCiAKIEBjcHl0aG9uX29ubHkKIGNsYXNzIEdldFNvdXJjZWZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICAiIiJUZXN0IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9nZXRfc291cmNlZmlsZSgpIGFzIHVzZWQgYnkgdGhlIEMgQVBJLgorICAgICIiIlRlc3QgaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwuX2dldF9zb3VyY2VmaWxlKCkgYXMgdXNlZCBieSB0aGUgQyBBUEkuCiAKICAgICBCZWNhdXNlIG9mIHRoZSBwZWN1bGlhcml0aWVzIG9mIHRoZSBuZWVkIG9mIHRoaXMgZnVuY3Rpb24sIHRoZSB0ZXN0cyBhcmUKICAgICBrbm93aW5nbHkgd2hpdGVib3ggdGVzdHMuCkBAIC04NzEsNyArODkwLDcgQEAKICAgICBkZWYgdGVzdF9nZXRfc291cmNlZmlsZShzZWxmKToKICAgICAgICAgIyBHaXZlbiBhIHZhbGlkIGJ5dGVjb2RlIHBhdGgsIHJldHVybiB0aGUgcGF0aCB0byB0aGUgY29ycmVzcG9uZGluZwogICAgICAgICAjIHNvdXJjZSBmaWxlIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fcGF0aF9pc2ZpbGUnKSBhcyBfcGF0aF9pc2ZpbGU6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwuX3BhdGhfaXNmaWxlJykgYXMgX3BhdGhfaXNmaWxlOgogICAgICAgICAgICAgX3BhdGhfaXNmaWxlLnJldHVybl92YWx1ZSA9IFRydWU7CiAgICAgICAgICAgICBwYXRoID0gVEVTVEZOICsgJy5weWMnCiAgICAgICAgICAgICBleHBlY3QgPSBURVNURk4gKyAnLnB5JwpAQCAtODgwLDcgKzg5OSw3IEBACiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZWZpbGVfbm9fc291cmNlKHNlbGYpOgogICAgICAgICAjIEdpdmVuIGEgdmFsaWQgYnl0ZWNvZGUgcGF0aCB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBzb3VyY2UgcGF0aCwKICAgICAgICAgIyByZXR1cm4gdGhlIG9yaWdpbmFsIGJ5dGVjb2RlIHBhdGguCi0gICAgICAgIHdpdGggbW9jay5wYXRjaCgnaW1wb3J0bGliLl9ib290c3RyYXAuX3BhdGhfaXNmaWxlJykgYXMgX3BhdGhfaXNmaWxlOgorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2ltcG9ydGxpYi5fYm9vdHN0cmFwX2V4dGVybmFsLl9wYXRoX2lzZmlsZScpIGFzIF9wYXRoX2lzZmlsZToKICAgICAgICAgICAgIF9wYXRoX2lzZmlsZS5yZXR1cm5fdmFsdWUgPSBGYWxzZTsKICAgICAgICAgICAgIHBhdGggPSBURVNURk4gKyAnLnB5YycKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2dldF9zb3VyY2VmaWxlKHBhdGgpLCBwYXRoKQpAQCAtMTAzNSw3ICsxMDU0LDcgQEAKICAgICAgICAgIyBXZSBzaW11bGF0ZSBhIGJ1ZyBpbiBpbXBvcnRsaWIgYW5kIGNoZWNrIHRoYXQgaXQncyBub3Qgc3RyaXBwZWQKICAgICAgICAgIyBhd2F5IGZyb20gdGhlIHRyYWNlYmFjay4KICAgICAgICAgc2VsZi5jcmVhdGVfbW9kdWxlKCJmb28iLCAiIikKLSAgICAgICAgaW1wb3J0bGliID0gc3lzLm1vZHVsZXNbJ19mcm96ZW5faW1wb3J0bGliJ10KKyAgICAgICAgaW1wb3J0bGliID0gc3lzLm1vZHVsZXNbJ19mcm96ZW5faW1wb3J0bGliX2V4dGVybmFsJ10KICAgICAgICAgaWYgJ2xvYWRfbW9kdWxlJyBpbiB2YXJzKGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIpOgogICAgICAgICAgICAgb2xkX2V4ZWNfbW9kdWxlID0gaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZQogICAgICAgICBlbHNlOgpAQCAtMTA2OCw2ICsxMDg3LDQ2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzb2xhdGVkPUZhbHNlKQogCiAKK2NsYXNzIENpcmN1bGFySW1wb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiU2VlIHRoZSBkb2NzdHJpbmdzIG9mIHRoZSBtb2R1bGVzIGJlaW5nIGltcG9ydGVkIGZvciB0aGUgcHVycG9zZSBvZiB0aGUKKyAgICB0ZXN0LiIiIgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAiIiJNYWtlIHN1cmUgbm8gbW9kdWxlcyBwcmUtZXhpc3QgaW4gc3lzLm1vZHVsZXMgd2hpY2ggYXJlIGJlaW5nIHVzZWQgdG8KKyAgICAgICAgdGVzdC4iIiIKKyAgICAgICAgZm9yIGtleSBpbiBsaXN0KHN5cy5tb2R1bGVzLmtleXMoKSk6CisgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgndGVzdC50ZXN0X2ltcG9ydC5kYXRhLmNpcmN1bGFyX2ltcG9ydHMnKToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNba2V5XQorCisgICAgZGVmIHRlc3RfZGlyZWN0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgdGVzdC50ZXN0X2ltcG9ydC5kYXRhLmNpcmN1bGFyX2ltcG9ydHMuYmFzaWMKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjaXJjdWxhciBpbXBvcnQgdGhyb3VnaCByZWxhdGl2ZSBpbXBvcnRzIGZhaWxlZCcpCisKKyAgICBkZWYgdGVzdF9pbmRpcmVjdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHRlc3QudGVzdF9pbXBvcnQuZGF0YS5jaXJjdWxhcl9pbXBvcnRzLmluZGlyZWN0CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncmVsYXRpdmUgaW1wb3J0IGluIG1vZHVsZSBjb250cmlidXRpbmcgdG8gY2lyY3VsYXIgJworICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgZmFpbGVkJykKKworICAgIGRlZiB0ZXN0X3N1YnBhY2thZ2Uoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCB0ZXN0LnRlc3RfaW1wb3J0LmRhdGEuY2lyY3VsYXJfaW1wb3J0cy5zdWJwYWNrYWdlCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnY2lyY3VsYXIgaW1wb3J0IGludm9sdmluZyBhIHN1YnBhY2thZ2UgZmFpbGVkJykKKworICAgIGRlZiB0ZXN0X3JlYmluZGluZyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHRlc3QudGVzdF9pbXBvcnQuZGF0YS5jaXJjdWxhcl9pbXBvcnRzLnJlYmluZGluZyBhcyByZWJpbmRpbmcKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjaXJjdWxhciBpbXBvcnQgd2l0aCByZWJpbmRpbmcgb2YgbW9kdWxlIGF0dHJpYnV0ZSBmYWlsZWQnKQorICAgICAgICBmcm9tIHRlc3QudGVzdF9pbXBvcnQuZGF0YS5jaXJjdWxhcl9pbXBvcnRzLnN1YnBrZyBpbXBvcnQgdXRpbAorICAgICAgICBzZWxmLmFzc2VydElzKHV0aWwudXRpbCwgcmViaW5kaW5nLnV0aWwpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAjIFRlc3QgbmVlZHMgdG8gYmUgYSBwYWNrYWdlLCBzbyB3ZSBjYW4gZG8gcmVsYXRpdmUgaW1wb3J0cy4KICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmMDJhMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsMyBAQAoraW1wb3J0IHVuaXR0ZXN0CisKK3VuaXR0ZXN0Lm1haW4oJ3Rlc3QudGVzdF9pbXBvcnQnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL2Jhc2ljLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL2Jhc2ljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDFlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvYmFzaWMucHkKQEAgLTAsMCArMSwyIEBACisiIiJDaXJjdWxhciBpbXBvcnRzIHRocm91Z2ggZGlyZWN0LCByZWxhdGl2ZSBpbXBvcnRzLiIiIgorZnJvbSAuIGltcG9ydCBiYXNpYzIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L2RhdGEvY2lyY3VsYXJfaW1wb3J0cy9iYXNpYzIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvYmFzaWMyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYmQyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvYmFzaWMyLnB5CkBAIC0wLDAgKzEgQEAKK2Zyb20gLiBpbXBvcnQgYmFzaWMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L2RhdGEvY2lyY3VsYXJfaW1wb3J0cy9pbmRpcmVjdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L2RhdGEvY2lyY3VsYXJfaW1wb3J0cy9pbmRpcmVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI1Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL2luZGlyZWN0LnB5CkBAIC0wLDAgKzEgQEAKK2Zyb20gLiBpbXBvcnQgYmFzaWMsIGJhc2ljMgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL3JlYmluZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L2RhdGEvY2lyY3VsYXJfaW1wb3J0cy9yZWJpbmRpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3NzM3NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L2RhdGEvY2lyY3VsYXJfaW1wb3J0cy9yZWJpbmRpbmcucHkKQEAgLTAsMCArMSwzIEBACisiIiJUZXN0IHRoZSBiaW5kaW5nIG9mIG5hbWVzIHdoZW4gYSBjaXJjdWxhciBpbXBvcnQgc2hhcmVzIHRoZSBzYW1lIG5hbWUgYXMgYW4KK2F0dHJpYnV0ZS4iIiIKK2Zyb20gLnJlYmluZGluZzIgaW1wb3J0IHV0aWwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L2RhdGEvY2lyY3VsYXJfaW1wb3J0cy9yZWJpbmRpbmcyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL3JlYmluZGluZzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhOWU2OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L2RhdGEvY2lyY3VsYXJfaW1wb3J0cy9yZWJpbmRpbmcyLnB5CkBAIC0wLDAgKzEsMyBAQAorZnJvbSAuc3VicGtnIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHJlYmluZGluZwordXRpbCA9IHV0aWwudXRpbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL3N1YnBhY2thZ2UucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvc3VicGFja2FnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjQxMmY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL3N1YnBhY2thZ2UucHkKQEAgLTAsMCArMSwyIEBACisiIiJDaXJjdWxhciBpbXBvcnQgaW52b2x2aW5nIGEgc3ViLXBhY2thZ2UuIiIiCitmcm9tIC5zdWJwa2cgaW1wb3J0IHN1YnBhY2thZ2UyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvc3VicGtnL3N1YnBhY2thZ2UyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL3N1YnBrZy9zdWJwYWNrYWdlMi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2I4OTNhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL3N1YnBrZy9zdWJwYWNrYWdlMi5weQpAQCAtMCwwICsxLDIgQEAKKyNmcm9tIC51dGlsIGltcG9ydCB1dGlsCitmcm9tIC4uIGltcG9ydCBzdWJwYWNrYWdlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvc3VicGtnL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvc3VicGtnL3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzYmQ4NAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0L2RhdGEvY2lyY3VsYXJfaW1wb3J0cy9zdWJwa2cvdXRpbC5weQpAQCAtMCwwICsxLDIgQEAKK2RlZiB1dGlsKCk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNiZDg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzL3V0aWwucHkKQEAgLTAsMCArMSwyIEBACitkZWYgdXRpbCgpOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CmluZGV4IDkzNDU2MmYuLmEyZTZlMWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQpAQCAtMSwyMSArMSwyMSBAQAogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgYnVpbHRpbl91dGlsCiAKLWZyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKIAorQHVuaXR0ZXN0LnNraXBJZih1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSBpcyBOb25lLCAnbm8gcmVhc29uYWJsZSBidWlsdGluIG1vZHVsZScpCiBjbGFzcyBGaW5kU3BlY1Rlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IGZpbmRfc3BlYygpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBmb3VuZCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHV0aWwuQlVJTFRJTlMuZ29vZF9uYW1lKToKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQub3JpZ2luLCAnYnVpbHQtaW4nKQogCkBAIC0zOSwyMyArMzksMjYgQEAKIAogICAgIGRlZiB0ZXN0X2lnbm9yZV9wYXRoKHNlbGYpOgogICAgICAgICAjIFRoZSB2YWx1ZSBmb3IgJ3BhdGgnIHNob3VsZCBhbHdheXMgdHJpZ2dlciBhIGZhaWxlZCBpbXBvcnQuCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKLSAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKGJ1aWx0aW5fdXRpbC5OQU1FLAorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSk6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncGtnJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcGVjKQogCi1Gcm96ZW5fRmluZFNwZWNUZXN0cywgU291cmNlX0ZpbmRTcGVjVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kU3BlY1Rlc3RzLAotICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQorCisoRnJvemVuX0ZpbmRTcGVjVGVzdHMsCisgU291cmNlX0ZpbmRTcGVjVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCitAdW5pdHRlc3Quc2tpcElmKHV0aWwuQlVJTFRJTlMuZ29vZF9uYW1lIGlzIE5vbmUsICdubyByZWFzb25hYmxlIGJ1aWx0aW4gbW9kdWxlJykKIGNsYXNzIEZpbmRlclRlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IGZpbmRfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgQ29tbW9uIGNhc2UuCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKLSAgICAgICAgICAgIGZvdW5kID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSk6CisgICAgICAgICAgICBmb3VuZCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZSh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZvdW5kLCAnbG9hZF9tb2R1bGUnKSkKIApAQCAtNzIsMTMgKzc1LDE1IEBACiAKICAgICBkZWYgdGVzdF9pZ25vcmVfcGF0aChzZWxmKToKICAgICAgICAgIyBUaGUgdmFsdWUgZm9yICdwYXRoJyBzaG91bGQgYWx3YXlzIHRyaWdnZXIgYSBmYWlsZWQgaW1wb3J0LgotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUsCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHV0aWwuQlVJTFRJTlMuZ29vZF9uYW1lKToKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZSh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncGtnJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKLUZyb3plbl9GaW5kZXJUZXN0cywgU291cmNlX0ZpbmRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZGVyVGVzdHMsCi0gICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKyhGcm96ZW5fRmluZGVyVGVzdHMsCisgU291cmNlX0ZpbmRlclRlc3RzCisgKSA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQppbmRleCAxZjgzNTc0Li5iMTM0OWVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKQEAgLTEsMTQgKzEsMTMgQEAKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsIGFzIGJ1aWx0aW5fdXRpbAogCi1mcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCiAKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKLQorQHVuaXR0ZXN0LnNraXBJZih1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSBpcyBOb25lLCAnbm8gcmVhc29uYWJsZSBidWlsdGluIG1vZHVsZScpCiBjbGFzcyBMb2FkZXJUZXN0cyhhYmMuTG9hZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCBsb2FkX21vZHVsZSgpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgpAQCAtMjksOCArMjgsOCBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRfbW9kdWxlKHV0aWwuQlVJTFRJTlMuZ29vZF9uYW1lKQogICAgICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlKQogCiAgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCkBAIC00MSw5ICs0MCw5IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmV1c2Uoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IHRoZSBzYW1lIG1vZHVsZSBpcyB1c2VkIGluIGEgcmVsb2FkLgotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBtb2R1bGUxID0gc2VsZi5sb2FkX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSkKLSAgICAgICAgICAgIG1vZHVsZTIgPSBzZWxmLmxvYWRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSk6CisgICAgICAgICAgICBtb2R1bGUxID0gc2VsZi5sb2FkX21vZHVsZSh1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZTIgPSBzZWxmLmxvYWRfbW9kdWxlKHV0aWwuQlVJTFRJTlMuZ29vZF9uYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUxLCBtb2R1bGUyKQogCiAgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKQEAgLTY2LDQwICs2NSw0MyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBtb2R1bGVfbmFtZSkKIAogCi1Gcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKExvYWRlclRlc3RzLAotICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQorKEZyb3plbl9Mb2FkZXJUZXN0cywKKyBTb3VyY2VfTG9hZGVyVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAorQHVuaXR0ZXN0LnNraXBJZih1dGlsLkJVSUxUSU5TLmdvb2RfbmFtZSBpcyBOb25lLCAnbm8gcmVhc29uYWJsZSBidWlsdGluIG1vZHVsZScpCiBjbGFzcyBJbnNwZWN0TG9hZGVyVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgSW5zcGVjdExvYWRlciBtZXRob2RzIGZvciBCdWlsdGluSW1wb3J0ZXIuIiIiCiAKICAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKICAgICAgICAgIyBUaGVyZSBpcyBubyBjb2RlIG9iamVjdC4KLSAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9jb2RlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUodXRpbC5CVUlMVElOUy5nb29kX25hbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gc291cmNlLgotICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X3NvdXJjZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UodXRpbC5CVUlMVElOUy5nb29kX25hbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgQ2Fubm90IGJlIGEgcGFja2FnZS4KLSAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmlzX3BhY2thZ2UoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKHV0aWwuQlVJTFRJTlMuZ29vZF9uYW1lKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdCkKIAorICAgIEB1bml0dGVzdC5za2lwSWYodXRpbC5CVUlMVElOUy5iYWRfbmFtZSBpcyBOb25lLCAnYWxsIG1vZHVsZXMgYXJlIGJ1aWx0IGluJykKICAgICBkZWYgdGVzdF9ub3RfYnVpbHRpbihzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdCBidWlsdC1pbiBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtZXRoX25hbWUpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbWV0aG9kKGJ1aWx0aW5fdXRpbC5CQURfTkFNRSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYnVpbHRpbl91dGlsLkJBRF9OQU1FKQorICAgICAgICAgICAgbWV0aG9kKHV0aWwuQlVJTFRJTlMuYmFkX25hbWUpCiAKLUZyb3plbl9JbnNwZWN0TG9hZGVyVGVzdHMsIFNvdXJjZV9JbnNwZWN0TG9hZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgSW5zcGVjdExvYWRlclRlc3RzLAotICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQorCisoRnJvemVuX0luc3BlY3RMb2FkZXJUZXN0cywKKyBTb3VyY2VfSW5zcGVjdExvYWRlclRlc3RzCisgKSA9IHV0aWwudGVzdF9ib3RoKEluc3BlY3RMb2FkZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi91dGlsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzA0Njk5Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdXRpbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotaW1wb3J0IHN5cwotCi1hc3NlcnQgJ2Vycm5vJyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKLU5BTUUgPSAnZXJybm8nCi0KLWFzc2VydCAnaW1wb3J0bGliJyBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCi1CQURfTkFNRSA9ICdpbXBvcnRsaWInCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQppbmRleCBiYjI1MjhlLi5jMTEyY2E3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKQEAgLTEsMjUgKzEsMjUgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcF9leHRlcm5hbAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSAuLiBpbXBvcnQgdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsIGFzIGV4dF91dGlsCiAKLWZyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQoraW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAogCiAjIFhYWCBmaW5kX3NwZWMgdGVzdHMKIAotQHVuaXR0ZXN0LnNraXBJZihleHRfdXRpbC5GSUxFTkFNRSBpcyBOb25lLCAnX3Rlc3RjYXBpIG5vdCBhdmFpbGFibGUnKQorQHVuaXR0ZXN0LnNraXBJZih1dGlsLkVYVEVOU0lPTlMuZmlsZW5hbWUgaXMgTm9uZSwgJ190ZXN0Y2FwaSBub3QgYXZhaWxhYmxlJykKIEB1dGlsLmNhc2VfaW5zZW5zaXRpdmVfdGVzdHMKLWNsYXNzIEV4dGVuc2lvbk1vZHVsZUNhc2VTZW5zaXRpdml0eVRlc3Q6CitjbGFzcyBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0KHV0aWwuQ0FTRU9LVGVzdEJhc2UpOgogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYpOgotICAgICAgICBnb29kX25hbWUgPSBleHRfdXRpbC5OQU1FCisgICAgICAgIGdvb2RfbmFtZSA9IHV0aWwuRVhURU5TSU9OUy5uYW1lCiAgICAgICAgIGJhZF9uYW1lID0gZ29vZF9uYW1lLnVwcGVyKCkKICAgICAgICAgYXNzZXJ0IGdvb2RfbmFtZSAhPSBiYWRfbmFtZQotICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKGV4dF91dGlsLlBBVEgsCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5FWFRFTlNJT05TLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKQogICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfbW9kdWxlKGJhZF9uYW1lKQpAQCAtMjcsMjQgKzI3LDIyIEBACiAgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgogICAgICAgICAgICAgZW52LnVuc2V0KCdQWVRIT05DQVNFT0snKQotICAgICAgICAgICAgaWYgYidQWVRIT05DQVNFT0snIGluIF9ib290c3RyYXAuX29zLmVudmlyb246Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3MuZW52aXJvbiBjaGFuZ2VzIG5vdCByZWZsZWN0ZWQgaW4gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19vcy5lbnZpcm9uJykKKyAgICAgICAgICAgIHNlbGYuY2FzZW9rX2Vudl9jaGFuZ2VkKHNob3VsZF9leGlzdD1GYWxzZSkKICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuZmluZF9tb2R1bGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCiAgICAgZGVmIHRlc3RfY2FzZV9pbnNlbnNpdGl2aXR5KHNlbGYpOgogICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi5zZXQoJ1BZVEhPTkNBU0VPSycsICcxJykKLSAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5lbnZpcm9uIGNoYW5nZXMgbm90IHJlZmxlY3RlZCBpbiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX29zLmVudmlyb24nKQorICAgICAgICAgICAgc2VsZi5jYXNlb2tfZW52X2NoYW5nZWQoc2hvdWxkX2V4aXN0PVRydWUpCiAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLmZpbmRfbW9kdWxlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxvYWRlciwgJ2xvYWRfbW9kdWxlJykpCiAKLUZyb3plbl9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHksIFNvdXJjZV9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHkgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCwKLSAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKKworKEZyb3plbl9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHksCisgU291cmNlX0V4dGVuc2lvbkNhc2VTZW5zaXRpdml0eQorICkgPSB1dGlsLnRlc3RfYm90aChFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0LCBpbXBvcnRsaWI9aW1wb3J0bGliLAorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKaW5kZXggOTkwZjI5Yy4uNzFiZjY3ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQpAQCAtMSw4ICsxLDcgQEAKIGZyb20gLi4gaW1wb3J0IGFiYwotZnJvbSAuLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKLWZyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuLiBpbXBvcnQgdXRpbAogCi1tYWNoaW5lcnkgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncwpAQCAtMTQsNyArMTMsNyBAQAogICAgICIiIlRlc3QgdGhlIGZpbmRlciBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBpbXBvcnRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5QQVRILAorICAgICAgICBpbXBvcnRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5FWFRFTlNJT05TLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgpAQCAtMjIsNyArMjEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGltcG9ydGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX21vZHVsZSh1dGlsLk5BTUUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX21vZHVsZSh1dGlsLkVYVEVOU0lPTlMubmFtZSkpCiAKICAgICAjIE5vIGV4dGVuc2lvbiBtb2R1bGUgYXMgYW4gX19pbml0X18gYXZhaWxhYmxlIGZvciB0ZXN0aW5nLgogICAgIHRlc3RfcGFja2FnZSA9IHRlc3RfcGFja2FnZV9pbl9wYWNrYWdlID0gTm9uZQpAQCAtMzYsOCArMzUsMTAgQEAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmZpbmRfbW9kdWxlKCdhc2RmamtsOycpKQogCi1Gcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIEZpbmRlclRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisoRnJvemVuX0ZpbmRlclRlc3RzLAorIFNvdXJjZV9GaW5kZXJUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CmluZGV4IGZkOWFiZjIuLjE1NGE3OTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKQEAgLTEsNCArMSwzIEBACi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgZXh0X3V0aWwKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogCkBAIC04LDYgKzcsOCBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAoraW1wb3J0IGltcG9ydGxpYgogCiAKIGNsYXNzIExvYWRlclRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CkBAIC0xNSw4ICsxNiw4IEBACiAgICAgIiIiVGVzdCBsb2FkX21vZHVsZSgpIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dF91dGlsLk5BTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfdXRpbC5GSUxFUEFUSCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKHV0aWwuRVhURU5TSU9OUy5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5FWFRFTlNJT05TLmZpbGVfcGF0aCkKIAogICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIHJldHVybiBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShmdWxsbmFtZSkKQEAgLTI5LDIzICszMCwyMyBAQAogICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZSgnWFhYJykKIAogICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgotICAgICAgICBvdGhlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQorICAgICAgICBvdGhlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIodXRpbC5FWFRFTlNJT05TLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLkVYVEVOU0lPTlMuZmlsZV9wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLCBvdGhlcikKIAogICAgIGRlZiB0ZXN0X2luZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIG90aGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcignXycgKyBleHRfdXRpbC5OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCisgICAgICAgIG90aGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcignXycgKyB1dGlsLkVYVEVOU0lPTlMubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuRVhURU5TSU9OUy5maWxlX3BhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5sb2FkZXIsIG90aGVyKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShleHRfdXRpbC5OQU1FKToKLSAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZF9tb2R1bGUoZXh0X3V0aWwuTkFNRSkKLSAgICAgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBbKCdfX25hbWVfXycsIGV4dF91dGlsLk5BTUUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ19fZmlsZV9fJywgZXh0X3V0aWwuRklMRVBBVEgpLAorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSh1dGlsLkVYVEVOU0lPTlMubmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRfbW9kdWxlKHV0aWwuRVhURU5TSU9OUy5uYW1lKQorICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIFsoJ19fbmFtZV9fJywgdXRpbC5FWFRFTlNJT05TLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ19fZmlsZV9fJywgdXRpbC5FWFRFTlNJT05TLmZpbGVfcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnX19wYWNrYWdlX18nLCAnJyldOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXh0X3V0aWwuTkFNRSwgc3lzLm1vZHVsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHV0aWwuRVhURU5TSU9OUy5uYW1lLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R1bGUuX19sb2FkZXJfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQogCkBAIC01Niw5ICs1Nyw5IEBACiAgICAgdGVzdF9sYWNraW5nX3BhcmVudCA9IE5vbmUKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoZXh0X3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBtb2R1bGUxID0gc2VsZi5sb2FkX21vZHVsZShleHRfdXRpbC5OQU1FKQotICAgICAgICAgICAgbW9kdWxlMiA9IHNlbGYubG9hZF9tb2R1bGUoZXh0X3V0aWwuTkFNRSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUodXRpbC5FWFRFTlNJT05TLm5hbWUpOgorICAgICAgICAgICAgbW9kdWxlMSA9IHNlbGYubG9hZF9tb2R1bGUodXRpbC5FWFRFTlNJT05TLm5hbWUpCisgICAgICAgICAgICBtb2R1bGUyID0gc2VsZi5sb2FkX21vZHVsZSh1dGlsLkVYVEVOU0lPTlMubmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlMSwgbW9kdWxlMikKIAogICAgICMgTm8gZWFzeSB3YXkgdG8gdHJpZ2dlciBhIGZhaWx1cmUgYWZ0ZXIgYSBzdWNjZXNzZnVsIGltcG9ydC4KQEAgLTcxLDE1ICs3MiwxOTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbmFtZSkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShleHRfdXRpbC5OQU1FKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHV0aWwuRVhURU5TSU9OUy5uYW1lKSkKICAgICAgICAgZm9yIHN1ZmZpeCBpbiBzZWxmLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVM6CiAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdzb21lJywgJ3BhdGgnLCAncGtnJywgJ19faW5pdF9fJyArIHN1ZmZpeCkKICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ3BrZycsIHBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLmlzX3BhY2thZ2UoJ3BrZycpKQogCi1Gcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBMb2FkZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKyhGcm96ZW5fTG9hZGVyVGVzdHMsCisgU291cmNlX0xvYWRlclRlc3RzCisgKSA9IHV0aWwudGVzdF9ib3RoKExvYWRlclRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCitjbGFzcyBNdWx0aVBoYXNlRXh0ZW5zaW9uTW9kdWxlVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKKyAgICAiIiJUZXN0IGxvYWRpbmcgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiAoUEVQIDQ4OSkKKyAgICAiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ190ZXN0bXVsdGlwaGFzZScKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihOb25lKQorICAgICAgICBzZWxmLnNwZWMgPSBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMoc2VsZi5uYW1lKQorICAgICAgICBhc3NlcnQgc2VsZi5zcGVjCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcigKKyAgICAgICAgICAgIHNlbGYubmFtZSwgc2VsZi5zcGVjLm9yaWdpbikKKworICAgICMgTm8gZXh0ZW5zaW9uIG1vZHVsZSBhcyBfX2luaXRfXyBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCisgICAgdGVzdF9wYWNrYWdlID0gTm9uZQorCisgICAgIyBObyBleHRlbnNpb24gbW9kdWxlIGluIGEgcGFja2FnZSBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCisgICAgdGVzdF9sYWNraW5nX3BhcmVudCA9IE5vbmUKKworICAgICMgSGFuZGxpbmcgZmFpbHVyZSBvbiByZWxvYWQgaXMgdGhlIHVwIHRvIHRoZSBtb2R1bGUuCisgICAgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlID0gTm9uZQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICAnJydUZXN0IGxvYWRpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZScnJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkX21vZHVsZSgpCisgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gWygnX19uYW1lX18nLCBzZWxmLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ19fZmlsZV9fJywgc2VsZi5zcGVjLm9yaWdpbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnX19wYWNrYWdlX18nLCAnJyldOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhdGhfXworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUsIHN5cy5tb2R1bGVzW3NlbGYubmFtZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLl9fbG9hZGVyX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uYWxpdHkoc2VsZik6CisgICAgICAgICcnJ1Rlc3QgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiBzdHVmZiBkZWZpbmVkIGluIGFuIGV4dGVuc2lvbiBtb2R1bGUnJycKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZF9tb2R1bGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHVsZSwgdHlwZXMuTW9kdWxlVHlwZSkKKyAgICAgICAgICAgIGV4ID0gbW9kdWxlLkV4YW1wbGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5kZW1vKCdhYmNkJyksICdhYmNkJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXguZGVtbygpLCBOb25lKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgZXguYWJjCisgICAgICAgICAgICBleC5hYmMgPSAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4LmFiYywgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmZvbyg5LCA5KSwgMTgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLlN0cigpLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5TdHIoMSkgKyAnMjMnLCAnMTIzJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobW9kdWxlLmVycm9yKToKKyAgICAgICAgICAgICAgICByYWlzZSBtb2R1bGUuZXJyb3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuaW50X2NvbnN0LCAxOTY5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuc3RyX2NvbnN0LCAnc29tZXRoaW5nIGRpZmZlcmVudCcpCisKKyAgICBkZWYgdGVzdF9yZWxvYWQoc2VsZik6CisgICAgICAgICcnJ1Rlc3QgdGhhdCByZWxvYWQgZGlkbid0IHJlLXNldCB0aGUgbW9kdWxlJ3MgYXR0cmlidXRlcycnJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkX21vZHVsZSgpCisgICAgICAgICAgICBleF9jbGFzcyA9IG1vZHVsZS5FeGFtcGxlCisgICAgICAgICAgICBpbXBvcnRsaWIucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhfY2xhc3MsIG1vZHVsZS5FeGFtcGxlKQorCisgICAgZGVmIHRlc3RfdHJ5X3JlZ2lzdHJhdGlvbihzZWxmKToKKyAgICAgICAgJycnQXNzZXJ0IHRoYXQgdGhlIFB5U3RhdGVfe0ZpbmQsQWRkLFJlbW92ZX1Nb2R1bGUgQyBBUEkgZG9lc24ndCB3b3JrJycnCisgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZF9tb2R1bGUoKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgnUHlTdGF0ZV9GaW5kTW9kdWxlJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5jYWxsX3N0YXRlX3JlZ2lzdHJhdGlvbl9mdW5jKDApLCBOb25lKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgnUHlTdGF0ZV9BZGRNb2R1bGUnKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IpOgorICAgICAgICAgICAgICAgIG1vZHVsZS5jYWxsX3N0YXRlX3JlZ2lzdHJhdGlvbl9mdW5jKDEpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdQeVN0YXRlX1JlbW92ZU1vZHVsZScpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvcik6CisgICAgICAgICAgICAgICAgbW9kdWxlLmNhbGxfc3RhdGVfcmVnaXN0cmF0aW9uX2Z1bmMoMikKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmKToKKyAgICAgICAgJycnTG9hZCB0aGUgbW9kdWxlIGZyb20gdGhlIHRlc3QgZXh0ZW5zaW9uJycnCisgICAgICAgIHJldHVybiBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCisKKyAgICBkZWYgbG9hZF9tb2R1bGVfYnlfbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICcnJ0xvYWQgYSBtb2R1bGUgZnJvbSB0aGUgdGVzdCBleHRlbnNpb24gYnkgbmFtZScnJworICAgICAgICBvcmlnaW4gPSBzZWxmLnNwZWMub3JpZ2luCisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZnVsbG5hbWUsIG9yaWdpbikKKyAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGxvYWRlcikKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zyb21fc3BlYyhzcGVjKQorICAgICAgICBsb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICByZXR1cm4gbW9kdWxlCisKKyAgICBkZWYgdGVzdF9sb2FkX3N1Ym1vZHVsZShzZWxmKToKKyAgICAgICAgJycnVGVzdCBsb2FkaW5nIGEgc2ltdWxhdGVkIHN1Ym1vZHVsZScnJworICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRfbW9kdWxlX2J5X25hbWUoJ3BrZy4nICsgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZy4nICsgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5zdHJfY29uc3QsICdzb21ldGhpbmcgZGlmZmVyZW50JykKKworICAgIGRlZiB0ZXN0X2xvYWRfc2hvcnRfbmFtZShzZWxmKToKKyAgICAgICAgJycnVGVzdCBsb2FkaW5nIG1vZHVsZSB3aXRoIGEgb25lLWNoYXJhY3RlciBuYW1lJycnCisgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZF9tb2R1bGVfYnlfbmFtZSgneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLnN0cl9jb25zdCwgJ3NvbWV0aGluZyBkaWZmZXJlbnQnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd4Jywgc3lzLm1vZHVsZXMpCisKKyAgICBkZWYgdGVzdF9sb2FkX3R3aWNlKHNlbGYpOgorICAgICAgICAnJydUZXN0IHRoYXQgMiBsb2FkcyByZXN1bHQgaW4gMiBtb2R1bGUgb2JqZWN0cycnJworICAgICAgICBtb2R1bGUxID0gc2VsZi5sb2FkX21vZHVsZV9ieV9uYW1lKHNlbGYubmFtZSkKKyAgICAgICAgbW9kdWxlMiA9IHNlbGYubG9hZF9tb2R1bGVfYnlfbmFtZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlMSwgbW9kdWxlMikKKworICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6CisgICAgICAgICcnJ1Rlc3Qgbm9uZXhpc3RlbnQgbW9kdWxlJycnCisgICAgICAgIG5hbWUgPSAnYXNkZmprbDsnCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZV9ieV9uYW1lKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCisKKyAgICBkZWYgdGVzdF91bmxvYWRhYmxlX25vbmFzY2lpKHNlbGYpOgorICAgICAgICAnJydUZXN0IGJlaGF2aW9yIHdpdGggbm9uZXhpc3RlbnQgbW9kdWxlIHdpdGggbm9uLUFTQ0lJIG5hbWUnJycKKyAgICAgICAgbmFtZSA9ICdmb1x4ZjMnCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZV9ieV9uYW1lKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCisKKyAgICBkZWYgdGVzdF9ub25tb2R1bGUoc2VsZik6CisgICAgICAgICcnJ1Rlc3QgcmV0dXJuaW5nIGEgbm9uLW1vZHVsZSBvYmplY3QgZnJvbSBjcmVhdGUgd29ya3MnJycKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZSArICdfbm9ubW9kdWxlJworICAgICAgICBtb2QgPSBzZWxmLmxvYWRfbW9kdWxlX2J5X25hbWUobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0eXBlKG1vZCksIHR5cGUodW5pdHRlc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC50aHJlZSwgMykKKworICAgIGRlZiB0ZXN0X251bGxfc2xvdHMoc2VsZik6CisgICAgICAgICcnJ1Rlc3QgdGhhdCBOVUxMIHNsb3RzIGFyZW4ndCBhIHByb2JsZW0nJycKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZSArICdfbnVsbF9zbG90cycKKyAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkX21vZHVsZV9ieV9uYW1lKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBuYW1lKQorCisgICAgZGVmIHRlc3RfYmFkX21vZHVsZXMoc2VsZik6CisgICAgICAgICcnJ1Rlc3QgU3lzdGVtRXJyb3IgaXMgcmFpc2VkIGZvciBtaXNiZWhhdmluZyBleHRlbnNpb25zJycnCisgICAgICAgIGZvciBuYW1lX2Jhc2UgaW4gWworICAgICAgICAgICAgICAgICdiYWRfc2xvdF9sYXJnZScsCisgICAgICAgICAgICAgICAgJ2JhZF9zbG90X25lZ2F0aXZlJywKKyAgICAgICAgICAgICAgICAnY3JlYXRlX2ludF93aXRoX3N0YXRlJywKKyAgICAgICAgICAgICAgICAnbmVnYXRpdmVfc2l6ZScsCisgICAgICAgICAgICAgICAgJ2V4cG9ydF9udWxsJywKKyAgICAgICAgICAgICAgICAnZXhwb3J0X3VuaW5pdGlhbGl6ZWQnLAorICAgICAgICAgICAgICAgICdleHBvcnRfcmFpc2UnLAorICAgICAgICAgICAgICAgICdleHBvcnRfdW5yZXBvcnRlZF9leGNlcHRpb24nLAorICAgICAgICAgICAgICAgICdjcmVhdGVfbnVsbCcsCisgICAgICAgICAgICAgICAgJ2NyZWF0ZV9yYWlzZScsCisgICAgICAgICAgICAgICAgJ2NyZWF0ZV91bnJlcG9ydGVkX2V4Y2VwdGlvbicsCisgICAgICAgICAgICAgICAgJ25vbm1vZHVsZV93aXRoX2V4ZWNfc2xvdHMnLAorICAgICAgICAgICAgICAgICdleGVjX2VycicsCisgICAgICAgICAgICAgICAgJ2V4ZWNfcmFpc2UnLAorICAgICAgICAgICAgICAgICdleGVjX3VucmVwb3J0ZWRfZXhjZXB0aW9uJywKKyAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFtZV9iYXNlKToKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5uYW1lICsgJ18nICsgbmFtZV9iYXNlCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGVfYnlfbmFtZShuYW1lKQorCisgICAgZGVmIHRlc3Rfbm9uYXNjaWkoc2VsZik6CisgICAgICAgICcnJ1Rlc3QgdGhhdCBtb2R1bGVzIHdpdGggbm9uLUFTQ0lJIG5hbWVzIGNhbiBiZSBsb2FkZWQnJycKKyAgICAgICAgIyBwdW55Y29kZSBiZWhhdmVzIHNsaWdodGx5IGRpZmZlcmVudGx5IGluIHNvbWUtQVNDSUkgYW5kIG5vLUFTQ0lJCisgICAgICAgICMgY2FzZXMsIHNvIHRlc3QgYm90aAorICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAgIChzZWxmLm5hbWUgKyAnX3prb3VcdTAxNjFrYV9uYVx1MDEwZHRlblx4ZWQnLCAnQ3plY2gnKSwKKyAgICAgICAgICAgICgnXHVmZjNmXHUzMGE0XHUzMGYzXHUzMGRkXHUzMGZjXHUzMGM4XHUzMGM2XHUzMGI5XHUzMGM4JywKKyAgICAgICAgICAgICAnSmFwYW5lc2UnKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIG5hbWUsIGxhbmcgaW4gY2FzZXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRfbW9kdWxlX2J5X25hbWUobmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2RvY19fLCAiTW9kdWxlIG5hbWVkIGluICVzIiAlIGxhbmcpCisKKworKEZyb3plbl9NdWx0aVBoYXNlRXh0ZW5zaW9uTW9kdWxlVGVzdHMsCisgU291cmNlX011bHRpUGhhc2VFeHRlbnNpb25Nb2R1bGVUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChNdWx0aVBoYXNlRXh0ZW5zaW9uTW9kdWxlVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQppbmRleCA0OWQ2NzM0Li44ZjRiOGJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CkBAIC0xLDcgKzEsNiBAQAotZnJvbSAuLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKLWZyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuLiBpbXBvcnQgdXRpbAogCi1tYWNoaW5lcnkgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCiBpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBzeXMKQEAgLTIyLDEwICsyMSwxMiBAQAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgICMgUGF0aCBob29rIHNob3VsZCBoYW5kbGUgYSBkaXJlY3Rvcnkgd2hlcmUgYSBrbm93biBleHRlbnNpb24gbW9kdWxlCiAgICAgICAgICMgZXhpc3RzLgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLmhvb2sodXRpbC5QQVRIKSwgJ2ZpbmRfbW9kdWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYuaG9vayh1dGlsLkVYVEVOU0lPTlMucGF0aCksICdmaW5kX21vZHVsZScpKQogCi1Gcm96ZW5fUGF0aEhvb2tzVGVzdHMsIFNvdXJjZV9QYXRoSG9va3NUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIFBhdGhIb29rVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKyhGcm96ZW5fUGF0aEhvb2tzVGVzdHMsCisgU291cmNlX1BhdGhIb29rc1Rlc3RzCisgKSA9IHV0aWwudGVzdF9ib3RoKFBhdGhIb29rVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMDg5ZjAuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotUEFUSCA9IE5vbmUKLUVYVCA9IE5vbmUKLUZJTEVOQU1FID0gTm9uZQotTkFNRSA9ICdfdGVzdGNhcGknCi10cnk6Ci0gICAgZm9yIFBBVEggaW4gc3lzLnBhdGg6Ci0gICAgICAgIGZvciBFWFQgaW4gbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUzoKLSAgICAgICAgICAgIEZJTEVOQU1FID0gTkFNRSArIEVYVAotICAgICAgICAgICAgRklMRVBBVEggPSBvcy5wYXRoLmpvaW4oUEFUSCwgRklMRU5BTUUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oUEFUSCwgRklMRU5BTUUpKToKLSAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgZWxzZToKLSAgICAgICAgUEFUSCA9IEVYVCA9IEZJTEVOQU1FID0gRklMRVBBVEggPSBOb25lCi1leGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKaW5kZXggZjlmOTdmMy4uNTE5YWEwMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQpAQCAtMzcsOCArMzcsMTAgQEAKICAgICAgICAgc3BlYyA9IHNlbGYuZmluZCgnPG5vdCByZWFsPicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwZWMpCiAKLUZyb3plbl9GaW5kU3BlY1Rlc3RzLCBTb3VyY2VfRmluZFNwZWNUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRTcGVjVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisoRnJvemVuX0ZpbmRTcGVjVGVzdHMsCisgU291cmNlX0ZpbmRTcGVjVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgpAQCAtNzIsOCArNzQsMTAgQEAKICAgICAgICAgbG9hZGVyID0gc2VsZi5maW5kKCc8bm90IHJlYWw+JykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCi1Gcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisoRnJvemVuX0ZpbmRlclRlc3RzLAorIFNvdXJjZV9GaW5kZXJUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CmluZGV4IDdjMDE0NjQuLjYwM2M3ZDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKQEAgLTg1LDggKzg1LDEwIEBACiAgICAgICAgICAgICBzZWxmLmV4ZWNfbW9kdWxlKCdfbm90X3JlYWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnX25vdF9yZWFsJykKIAotRnJvemVuX0V4ZWNNb2R1bGVUZXN0cywgU291cmNlX0V4ZWNNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEV4ZWNNb2R1bGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworKEZyb3plbl9FeGVjTW9kdWxlVGVzdHMsCisgU291cmNlX0V4ZWNNb2R1bGVUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChFeGVjTW9kdWxlVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogY2xhc3MgTG9hZGVyVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKQEAgLTE3NSw4ICsxNzcsMTAgQEAKICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfbm90X3JlYWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnX25vdF9yZWFsJykKIAotRnJvemVuX0xvYWRlclRlc3RzLCBTb3VyY2VfTG9hZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aChMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworKEZyb3plbl9Mb2FkZXJUZXN0cywKKyBTb3VyY2VfTG9hZGVyVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzOgpAQCAtMjE0LDggKzIxOCw5IEBACiAgICAgICAgICAgICAgICAgbWV0aG9kKCdpbXBvcnRsaWInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ2ltcG9ydGxpYicpCiAKLUZyb3plbl9JTFRlc3RzLCBTb3VyY2VfSUxUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEluc3BlY3RMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisoRnJvemVuX0lMVGVzdHMsCisgU291cmNlX0lMVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoSW5zcGVjdExvYWRlclRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5CmluZGV4IDZkZjgwMTAuLjRiMTgwOTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5CkBAIC00LDcgKzQsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAogCiAKIGNsYXNzIFNwZWNMb2FkZXJNb2NrOgpAQCAtMTIsNiArMTEsOSBAQAogICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgogICAgICAgICByZXR1cm4gbWFjaGluZXJ5Lk1vZHVsZVNwZWMoZnVsbG5hbWUsIHNlbGYpCiAKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgogICAgICAgICBwYXNzCiAKQEAgLTI0LDggKzI2LDEwIEBACiAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ2JsYWgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCiAKLUZyb3plbl9TcGVjVGVzdHMsIFNvdXJjZV9TcGVjVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgU3BlY0xvYWRlckF0dHJpYnV0ZVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKyhGcm96ZW5fU3BlY1Rlc3RzLAorIFNvdXJjZV9TcGVjVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoU3BlY0xvYWRlckF0dHJpYnV0ZVRlc3RzLCBfX2ltcG9ydF9fPXV0aWwuX19pbXBvcnRfXykKIAogCiBjbGFzcyBMb2FkZXJNb2NrOgpAQCAtNjIsOCArNjYsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCiAKIAotRnJvemVuX1Rlc3RzLCBTb3VyY2VfVGVzdHMgPSB1dGlsLnRlc3RfYm90aChMb2FkZXJBdHRyaWJ1dGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorKEZyb3plbl9UZXN0cywKKyBTb3VyY2VfVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyQXR0cmlidXRlVGVzdHMsIF9faW1wb3J0X189dXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKaW5kZXggMmUxOTcyNS4uYzdkM2EyYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQpAQCAtNiw3ICs2LDYgQEAKICIiIgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKIAogCiBjbGFzcyBVc2luZ19fcGFja2FnZV9fOgpAQCAtNzAsMTcgKzY5LDIzIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCiAKKwogY2xhc3MgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMihVc2luZ19fcGFja2FnZV9fKToKICAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfbW9kdWxlcwogCi1Gcm96ZW5fVXNpbmdQYWNrYWdlUEVQMzAyLCBTb3VyY2VfVXNpbmdQYWNrYWdlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIFVzaW5nX19wYWNrYWdlX19QRVAzMDIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotY2xhc3MgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMihVc2luZ19fcGFja2FnZV9fKToKKyhGcm96ZW5fVXNpbmdQYWNrYWdlUEVQMzAyLAorIFNvdXJjZV9Vc2luZ1BhY2thZ2VQRVAzMDIKKyApID0gdXRpbC50ZXN0X2JvdGgoVXNpbmdfX3BhY2thZ2VfX1BFUDMwMiwgX19pbXBvcnRfXz11dGlsLl9faW1wb3J0X18pCisKKworY2xhc3MgVXNpbmdfX3BhY2thZ2VfX1BFUDQ1MShVc2luZ19fcGFja2FnZV9fKToKICAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfc3BlYwogCi1Gcm96ZW5fVXNpbmdQYWNrYWdlUEVQNDUxLCBTb3VyY2VfVXNpbmdQYWNrYWdlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIFVzaW5nX19wYWNrYWdlX19QRVAzMDIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworKEZyb3plbl9Vc2luZ1BhY2thZ2VQRVA0NTEsCisgU291cmNlX1VzaW5nUGFja2FnZVBFUDQ1MQorICkgPSB1dGlsLnRlc3RfYm90aChVc2luZ19fcGFja2FnZV9fUEVQNDUxLCBfX2ltcG9ydF9fPXV0aWwuX19pbXBvcnRfXykKIAogCiBjbGFzcyBTZXR0aW5nX19wYWNrYWdlX186CkBAIC05NSw3ICsxMDAsNyBAQAogCiAgICAgIiIiCiAKLSAgICBfX2ltcG9ydF9fID0gaW1wb3J0X3V0aWwuX19pbXBvcnRfX1sxXQorICAgIF9faW1wb3J0X18gPSB1dGlsLl9faW1wb3J0X19bJ1NvdXJjZSddCiAKICAgICAjIFt0b3AtbGV2ZWxdCiAgICAgZGVmIHRlc3RfdG9wX2xldmVsKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKaW5kZXggNDM5YzEwNS4uNzA2OWQ5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CkBAIC0xLDUgKzEsNCBAQAogZnJvbSAuLiBpbXBvcnQgdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCiAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGltcG9ydCBzeXMKQEAgLTE4LDYgKzE3LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gc3BlYwogCiAgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNwZWMpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBleGVjX21vZHVsZShtb2R1bGUpOgogICAgICAgICBpZiBtb2R1bGUuX19uYW1lX18gPT0gU1VCTU9EX05BTUU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignSSBjYW5ub3QgYmUgbG9hZGVkIScpCkBAIC03OSwxNSArODIsMTkgQEAKIGNsYXNzIE9sZEFQSVRlc3RzKEFQSVRlc3QpOgogICAgIGJhZF9maW5kZXJfbG9hZGVyID0gQmFkTG9hZGVyRmluZGVyCiAKLUZyb3plbl9PbGRBUElUZXN0cywgU291cmNlX09sZEFQSVRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIE9sZEFQSVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKyhGcm96ZW5fT2xkQVBJVGVzdHMsCisgU291cmNlX09sZEFQSVRlc3RzCisgKSA9IHV0aWwudGVzdF9ib3RoKE9sZEFQSVRlc3RzLCBfX2ltcG9ydF9fPXV0aWwuX19pbXBvcnRfXykKIAogCiBjbGFzcyBTcGVjQVBJVGVzdHMoQVBJVGVzdCk6CiAgICAgYmFkX2ZpbmRlcl9sb2FkZXIgPSBCYWRTcGVjRmluZGVyTG9hZGVyCiAKLUZyb3plbl9TcGVjQVBJVGVzdHMsIFNvdXJjZV9TcGVjQVBJVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgU3BlY0FQSVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKyhGcm96ZW5fU3BlY0FQSVRlc3RzLAorIFNvdXJjZV9TcGVjQVBJVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoU3BlY0FQSVRlc3RzLCBfX2ltcG9ydF9fPXV0aWwuX19pbXBvcnRfXykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQppbmRleCBjMjkyZWU0Li44MDc5YWRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQpAQCAtMSw2ICsxLDUgQEAKICIiIlRlc3QgdGhhdCBzeXMubW9kdWxlcyBpcyB1c2VkIHByb3Blcmx5IGJ5IGltcG9ydC4iIiIKIGZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAogaW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgTWV0aG9kVHlwZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC0zOSwxNSArMzgsMTcgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCiAKLUZyb3plbl9Vc2VDYWNoZSwgU291cmNlX1VzZUNhY2hlID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIFVzZUNhY2hlLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKyhGcm96ZW5fVXNlQ2FjaGUsCisgU291cmNlX1VzZUNhY2hlCisgKSA9IHV0aWwudGVzdF9ib3RoKFVzZUNhY2hlLCBfX2ltcG9ydF9fPXV0aWwuX19pbXBvcnRfXykKIAogCiBjbGFzcyBJbXBvcnRsaWJVc2VDYWNoZShVc2VDYWNoZSwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgIyBQZXJ0aW5lbnQgb25seSB0byBQRVAgMzAyOyBleGVjX21vZHVsZSgpIGRvZXNuJ3QgcmV0dXJuIGEgbW9kdWxlLgogCi0gICAgX19pbXBvcnRfXyA9IGltcG9ydF91dGlsLl9faW1wb3J0X19bMV0KKyAgICBfX2ltcG9ydF9fID0gdXRpbC5fX2ltcG9ydF9fWydTb3VyY2UnXQogCiAgICAgZGVmIGNyZWF0ZV9tb2NrKHNlbGYsICpuYW1lcywgcmV0dXJuXz1Ob25lKToKICAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCpuYW1lcykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQppbmRleCBhNzU1Yjc1Li44MDQ1NDY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CkBAIC0xLDYgKzEsNSBAQAogIiIiVGVzdCB0aGF0IHRoZSBzZW1hbnRpY3MgcmVsYXRpbmcgdG8gdGhlICdmcm9tbGlzdCcgYXJndW1lbnQgYXJlIGNvcnJlY3QuIiIiCiBmcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKIGltcG9ydCB1bml0dGVzdAogCiAKQEAgLTI5LDggKzI4LDEwIEBACiAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cubW9kdWxlJykKIAotRnJvemVuX1JldHVyblZhbHVlLCBTb3VyY2VfUmV0dXJuVmFsdWUgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgUmV0dXJuVmFsdWUsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworKEZyb3plbl9SZXR1cm5WYWx1ZSwKKyBTb3VyY2VfUmV0dXJuVmFsdWUKKyApID0gdXRpbC50ZXN0X2JvdGgoUmV0dXJuVmFsdWUsIF9faW1wb3J0X189dXRpbC5fX2ltcG9ydF9fKQogCiAKIGNsYXNzIEhhbmRsaW5nRnJvbWxpc3Q6CkBAIC0xMjEsOCArMTIyLDEwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlMS5fX25hbWVfXywgJ3BrZy5tb2R1bGUxJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUyLl9fbmFtZV9fLCAncGtnLm1vZHVsZTInKQogCi1Gcm96ZW5fRnJvbUxpc3QsIFNvdXJjZV9Gcm9tTGlzdCA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBIYW5kbGluZ0Zyb21saXN0LCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKyhGcm96ZW5fRnJvbUxpc3QsCisgU291cmNlX0Zyb21MaXN0CisgKSA9IHV0aWwudGVzdF9ib3RoKEhhbmRsaW5nRnJvbWxpc3QsIF9faW1wb3J0X189dXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weQppbmRleCA1ZWViMTQ1Li5jNDUyY2RkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkKQEAgLTEsNSArMSw0IEBACiBmcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKIGltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAogaW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgTWV0aG9kVHlwZQpAQCAtNDYsOCArNDUsMTAgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3Wy0xXS5jYXRlZ29yeSwgSW1wb3J0V2FybmluZykpCiAKLUZyb3plbl9DYWxsaW5nT3JkZXIsIFNvdXJjZV9DYWxsaW5nT3JkZXIgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgQ2FsbGluZ09yZGVyLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKyhGcm96ZW5fQ2FsbGluZ09yZGVyLAorIFNvdXJjZV9DYWxsaW5nT3JkZXIKKyApID0gdXRpbC50ZXN0X2JvdGgoQ2FsbGluZ09yZGVyLCBfX2ltcG9ydF9fPXV0aWwuX19pbXBvcnRfXykKIAogCiBjbGFzcyBDYWxsU2lnbmF0dXJlOgpAQCAtMTAwLDE5ICsxMDEsMjUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3NbMF0sIG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYXJnc1sxXSwgcGF0aCkKIAorCiBjbGFzcyBDYWxsU2lnbmF0dXJlUEVQMzAyKENhbGxTaWduYXR1cmUpOgogICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19tb2R1bGVzCiAgICAgZmluZGVyX25hbWUgPSAnZmluZF9tb2R1bGUnCiAKLUZyb3plbl9DYWxsU2lnbmF0dXJlUEVQMzAyLCBTb3VyY2VfQ2FsbFNpZ25hdHVyZVBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBDYWxsU2lnbmF0dXJlUEVQMzAyLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKyhGcm96ZW5fQ2FsbFNpZ25hdHVyZVBFUDMwMiwKKyBTb3VyY2VfQ2FsbFNpZ25hdHVyZVBFUDMwMgorICkgPSB1dGlsLnRlc3RfYm90aChDYWxsU2lnbmF0dXJlUEVQMzAyLCBfX2ltcG9ydF9fPXV0aWwuX19pbXBvcnRfXykKKwogCiBjbGFzcyBDYWxsU2lnbmF0dXJlUEVQNDUxKENhbGxTaWduYXR1cmUpOgogICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19zcGVjCiAgICAgZmluZGVyX25hbWUgPSAnZmluZF9zcGVjJwogCi1Gcm96ZW5fQ2FsbFNpZ25hdHVyZVBFUDQ1MSwgU291cmNlX0NhbGxTaWduYXR1cmVQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgQ2FsbFNpZ25hdHVyZVBFUDQ1MSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisoRnJvemVuX0NhbGxTaWduYXR1cmVQRVA0NTEsCisgU291cmNlX0NhbGxTaWduYXR1cmVQRVA0NTEKKyApID0gdXRpbC50ZXN0X2JvdGgoQ2FsbFNpZ25hdHVyZVBFUDQ1MSwgX19pbXBvcnRfXz11dGlsLl9faW1wb3J0X18pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQppbmRleCA1NWE1ZDE0Li4zNzU1Yjg0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CkBAIC0xLDUgKzEsNCBAQAogZnJvbSAuLiBpbXBvcnQgdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBpbXBvcnRsaWIKQEAgLTEwMiw4ICsxMDEsMTAgQEAKICAgICAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubG9hZChzdWJuYW1lKQogCi1Gcm96ZW5fUGFyZW50VGVzdHMsIFNvdXJjZV9QYXJlbnRUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBQYXJlbnRNb2R1bGVUZXN0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisoRnJvemVuX1BhcmVudFRlc3RzLAorIFNvdXJjZV9QYXJlbnRUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChQYXJlbnRNb2R1bGVUZXN0cywgX19pbXBvcnRfXz11dGlsLl9faW1wb3J0X18pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKaW5kZXggMTI3NGY4Yy4uYjMyYTg3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKQEAgLTEsMTEgKzEsMTEgQEAKIGZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAogCiBpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCiBtYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHBhdGggPSAnPHRlc3QgcGF0aD4nCiAgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQotICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2socGF0aCwgaW1wb3J0ZXI9aW1wb3J0ZXIpCisgICAgICAgIGhvb2sgPSB1dGlsLm1vY2tfcGF0aF9ob29rKHBhdGgsIGltcG9ydGVyPWltcG9ydGVyKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaG9va3M9W2hvb2tdKToKICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIHBhdGggPSAnJwogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCi0gICAgICAgIGhvb2sgPSBpbXBvcnRfdXRpbC5tb2NrX3BhdGhfaG9vayhvcy5nZXRjd2QoKSwgaW1wb3J0ZXI9aW1wb3J0ZXIpCisgICAgICAgIGhvb2sgPSB1dGlsLm1vY2tfcGF0aF9ob29rKG9zLmdldGN3ZCgpLCBpbXBvcnRlcj1pbXBvcnRlcikKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoPVtwYXRoXSwgcGF0aF9ob29rcz1baG9va10pOgogICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgIG5ld19wYXRoX2ltcG9ydGVyX2NhY2hlLnBvcChOb25lLCBOb25lKQogICAgICAgICBuZXdfcGF0aF9ob29rcyA9IFt6aXBpbXBvcnQuemlwaW1wb3J0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNlbGYuaW1wb3J0bGliLl9ib290c3RyYXAuX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNlbGYuaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwuX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkpXQogICAgICAgICBtaXNzaW5nID0gb2JqZWN0KCkKICAgICAgICAgZW1haWwgPSBzeXMubW9kdWxlcy5wb3AoJ2VtYWlsJywgbWlzc2luZykKICAgICAgICAgdHJ5OgpAQCAtMTEyLDggKzExMiw4MSBAQAogICAgICAgICAgICAgaWYgZW1haWwgaXMgbm90IG1pc3Npbmc6CiAgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2VtYWlsJ10gPSBlbWFpbAogCi1Gcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBGaW5kZXJUZXN0cywgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKyAgICBkZWYgdGVzdF9maW5kZXJfd2l0aF9maW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdEZpbmRlcjoKKyAgICAgICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudG9fcmV0dXJuCisgICAgICAgIGZhaWxpbmdfZmluZGVyID0gVGVzdEZpbmRlcigpCisgICAgICAgIGZhaWxpbmdfZmluZGVyLnRvX3JldHVybiA9IE5vbmUKKyAgICAgICAgcGF0aCA9ICd0ZXN0aW5nIHBhdGgnCisgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogZmFpbGluZ19maW5kZXJ9KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKAorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlYygnd2hhdGV2ZXInLCBbcGF0aF0pKQorICAgICAgICBzdWNjZXNzX2ZpbmRlciA9IFRlc3RGaW5kZXIoKQorICAgICAgICBzdWNjZXNzX2ZpbmRlci50b19yZXR1cm4gPSBfX2xvYWRlcl9fCisgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogc3VjY2Vzc19maW5kZXJ9KToKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlYygnd2hhdGV2ZXInLCBbcGF0aF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIF9fbG9hZGVyX18pCisKKyAgICBkZWYgdGVzdF9maW5kZXJfd2l0aF9maW5kX2xvYWRlcihzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdEZpbmRlcjoKKyAgICAgICAgICAgIGxvYWRlciA9IE5vbmUKKyAgICAgICAgICAgIHBvcnRpb25zID0gW10KKyAgICAgICAgICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZGVyLCBzZWxmLnBvcnRpb25zCisgICAgICAgIHBhdGggPSAndGVzdGluZyBwYXRoJworICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaW1wb3J0ZXJfY2FjaGU9e3BhdGg6IFRlc3RGaW5kZXIoKX0pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjKCd3aGF0ZXZlcicsIFtwYXRoXSkpCisgICAgICAgIHN1Y2Nlc3NfZmluZGVyID0gVGVzdEZpbmRlcigpCisgICAgICAgIHN1Y2Nlc3NfZmluZGVyLmxvYWRlciA9IF9fbG9hZGVyX18KKyAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBzdWNjZXNzX2ZpbmRlcn0pOgorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjKCd3aGF0ZXZlcicsIFtwYXRoXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgX19sb2FkZXJfXykKKworICAgIGRlZiB0ZXN0X2ZpbmRlcl93aXRoX2ZpbmRfc3BlYyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdEZpbmRlcjoKKyAgICAgICAgICAgIHNwZWMgPSBOb25lCisgICAgICAgICAgICBkZWYgZmluZF9zcGVjKHNlbGYsIGZ1bGxuYW1lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3BlYworICAgICAgICBwYXRoID0gJ3Rlc3RpbmcgcGF0aCcKKyAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBUZXN0RmluZGVyKCl9KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKAorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlYygnd2hhdGV2ZXInLCBbcGF0aF0pKQorICAgICAgICBzdWNjZXNzX2ZpbmRlciA9IFRlc3RGaW5kZXIoKQorICAgICAgICBzdWNjZXNzX2ZpbmRlci5zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnd2hhdGV2ZXInLCBfX2xvYWRlcl9fKQorICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaW1wb3J0ZXJfY2FjaGU9e3BhdGg6IHN1Y2Nlc3NfZmluZGVyfSk6CisgICAgICAgICAgICBnb3QgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlYygnd2hhdGV2ZXInLCBbcGF0aF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBzdWNjZXNzX2ZpbmRlci5zcGVjKQorCisgICAgZGVmIHRlc3RfZGVsZXRlZF9jd2Qoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIyODM0CisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2hkaXIsIG9sZF9kaXIpCisgICAgICAgIG5ld19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2hkaXIobmV3X2RpcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihuZXdfZGlyKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBFSU5WQUwgb24gU29sYXJpcywgRUJVU1kgb24gQUlYLCBFTk9URU1QVFkgb24gV2luZG93cworICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInBsYXRmb3JtIGRvZXMgbm90IGFsbG93ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgZGVsZXRpb24gb2YgdGhlIGN3ZCIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgICAgICBvcy5ybWRpcihuZXdfZGlyKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGg9WycnXSk6CisgICAgICAgICAgICAjIERvIG5vdCB3YW50IEZpbGVOb3RGb3VuZEVycm9yIHJhaXNlZC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjKCd3aGF0ZXZlcicpKQorCisKKworCisoRnJvemVuX0ZpbmRlclRlc3RzLAorIFNvdXJjZV9GaW5kZXJUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBjbGFzcyBQYXRoRW50cnlGaW5kZXJUZXN0czoKQEAgLTEzNiw4ICsyMDksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2hvb2tzPVtGaW5kZXJdKToKICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjKCdpbXBvcnRsaWInKQogCi1Gcm96ZW5fUEVGVGVzdHMsIFNvdXJjZV9QRUZUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBQYXRoRW50cnlGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworKEZyb3plbl9QRUZUZXN0cywKKyBTb3VyY2VfUEVGVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoUGF0aEVudHJ5RmluZGVyVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKaW5kZXggYjIxNmU5Yy4uM2JiODE5ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKQEAgLTEsNiArMSw1IEBACiAiIiJUZXN0IHJlbGF0aXZlIGltcG9ydHMgKFBFUCAzMjgpLiIiIgogZnJvbSAuLiBpbXBvcnQgdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtMjA4LDggKzIwNywxNSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnc3lzJywgbGV2ZWw9MSkKIAotRnJvemVuX1JlbGF0aXZlSW1wb3J0cywgU291cmNlX1JlbGF0aXZlSW1wb3J0cyA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBSZWxhdGl2ZUltcG9ydHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKyAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfbm9fcGFja2FnZV9leGlzdHNfYWJzb2x1dGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdzeXMnLCB7J19fcGFja2FnZV9fJzogJycsICdfX3NwZWNfXyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTEpCisKKworKEZyb3plbl9SZWxhdGl2ZUltcG9ydHMsCisgU291cmNlX1JlbGF0aXZlSW1wb3J0cworICkgPSB1dGlsLnRlc3RfYm90aChSZWxhdGl2ZUltcG9ydHMsIF9faW1wb3J0X189dXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYjQ5MGYuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotZnJvbSAuLiBpbXBvcnQgdXRpbAotCi1mcm96ZW5faW1wb3J0bGliLCBzb3VyY2VfaW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQotCi1pbXBvcnQgYnVpbHRpbnMKLWltcG9ydCBmdW5jdG9vbHMKLWltcG9ydCBpbXBvcnRsaWIKLWltcG9ydCB1bml0dGVzdAotCi0KLV9faW1wb3J0X18gPSBzdGF0aWNtZXRob2QoYnVpbHRpbnMuX19pbXBvcnRfXyksIHN0YXRpY21ldGhvZChzb3VyY2VfaW1wb3J0bGliLl9faW1wb3J0X18pCi0KLQotZGVmIG1vY2tfcGF0aF9ob29rKCplbnRyaWVzLCBpbXBvcnRlcik6Ci0gICAgIiIiQSBtb2NrIHN5cy5wYXRoX2hvb2tzIGVudHJ5LiIiIgotICAgIGRlZiBob29rKGVudHJ5KToKLSAgICAgICAgaWYgZW50cnkgbm90IGluIGVudHJpZXM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICByZXR1cm4gaW1wb3J0ZXIKLSAgICByZXR1cm4gaG9vawpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKaW5kZXggZWZkMzE0Ni4uMzRiODZjZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CkBAIC0xLDYgKzEsNSBAQAogIiIiVGVzdCBjYXNlLXNlbnNpdGl2aXR5IChQRVAgMjM1KS4iIiIKIGZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCiBpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCiBtYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQpAQCAtMTIsNyArMTEsNyBAQAogCiAKIEB1dGlsLmNhc2VfaW5zZW5zaXRpdmVfdGVzdHMKLWNsYXNzIENhc2VTZW5zaXRpdml0eVRlc3Q6CitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0KHV0aWwuQ0FTRU9LVGVzdEJhc2UpOgogCiAgICAgIiIiUEVQIDIzNSBkaWN0YXRlcyB0aGF0IG9uIGNhc2UtcHJlc2VydmluZywgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMKICAgICB0aGF0IGltcG9ydHMgYXJlIGNhc2Utc2Vuc2l0aXZlIHVubGVzcyB0aGUgUFlUSE9OQ0FTRU9LIGVudmlyb25tZW50CkBAIC0zMiw3ICszMSw3IEBACiAgICAgICAgICIiIkxvb2sgZm9yIGEgbW9kdWxlIHdpdGggbWF0Y2hpbmcgYW5kIG5vbi1tYXRjaGluZyBzZW5zaXRpdml0eS4iIiIKICAgICAgICAgc2Vuc2l0aXZlX3BrZyA9ICdzZW5zaXRpdmUuezB9Jy5mb3JtYXQoc2VsZi5uYW1lKQogICAgICAgICBpbnNlbnNpdGl2ZV9wa2cgPSAnaW5zZW5zaXRpdmUuezB9Jy5mb3JtYXQoc2VsZi5uYW1lLmxvd2VyKCkpCi0gICAgICAgIGNvbnRleHQgPSBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhpbnNlbnNpdGl2ZV9wa2csIHNlbnNpdGl2ZV9wa2cpCisgICAgICAgIGNvbnRleHQgPSB1dGlsLmNyZWF0ZV9tb2R1bGVzKGluc2Vuc2l0aXZlX3BrZywgc2Vuc2l0aXZlX3BrZykKICAgICAgICAgd2l0aCBjb250ZXh0IGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBzZW5zaXRpdmVfcGF0aCA9IG9zLnBhdGguam9pbihtYXBwaW5nWycucm9vdCddLCAnc2Vuc2l0aXZlJykKICAgICAgICAgICAgIGluc2Vuc2l0aXZlX3BhdGggPSBvcy5wYXRoLmpvaW4obWFwcGluZ1snLnJvb3QnXSwgJ2luc2Vuc2l0aXZlJykKQEAgLTQzLDkgKzQyLDcgQEAKICAgICBkZWYgdGVzdF9zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CiAgICAgICAgICAgICBlbnYudW5zZXQoJ1BZVEhPTkNBU0VPSycpCi0gICAgICAgICAgICBpZiBiJ1BZVEhPTkNBU0VPSycgaW4gc2VsZi5pbXBvcnRsaWIuX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5lbnZpcm9uIGNoYW5nZXMgbm90IHJlZmxlY3RlZCBpbiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX29zLmVudmlyb24nKQorICAgICAgICAgICAgc2VsZi5jYXNlb2tfZW52X2NoYW5nZWQoc2hvdWxkX2V4aXN0PUZhbHNlKQogICAgICAgICAgICAgc2Vuc2l0aXZlLCBpbnNlbnNpdGl2ZSA9IHNlbGYuc2Vuc2l0aXZpdHlfdGVzdCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQpAQCAtNTQsMjkgKzUxLDM1IEBACiAgICAgZGVmIHRlc3RfaW5zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CiAgICAgICAgICAgICBlbnYuc2V0KCdQWVRIT05DQVNFT0snLCAnMScpCi0gICAgICAgICAgICBpZiBiJ1BZVEhPTkNBU0VPSycgbm90IGluIHNlbGYuaW1wb3J0bGliLl9ib290c3RyYXAuX29zLmVudmlyb246Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3MuZW52aXJvbiBjaGFuZ2VzIG5vdCByZWZsZWN0ZWQgaW4gJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19vcy5lbnZpcm9uJykKKyAgICAgICAgICAgIHNlbGYuY2FzZW9rX2Vudl9jaGFuZ2VkKHNob3VsZF9leGlzdD1UcnVlKQogICAgICAgICAgICAgc2Vuc2l0aXZlLCBpbnNlbnNpdGl2ZSA9IHNlbGYuc2Vuc2l0aXZpdHlfdGVzdCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoaW5zZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgaW5zZW5zaXRpdmUuZ2V0X2ZpbGVuYW1lKHNlbGYubmFtZSkpCiAKKwogY2xhc3MgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDMwMihDYXNlU2Vuc2l0aXZpdHlUZXN0KToKICAgICBkZWYgZmluZChzZWxmLCBmaW5kZXIpOgogICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfbW9kdWxlKHNlbGYubmFtZSkKIAotRnJvemVuX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIsIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworKEZyb3plbl9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyLAorIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyCisgKSA9IHV0aWwudGVzdF9ib3RoKENhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKIAogY2xhc3MgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MShDYXNlU2Vuc2l0aXZpdHlUZXN0KToKICAgICBkZWYgZmluZChzZWxmLCBmaW5kZXIpOgogICAgICAgICBmb3VuZCA9IGZpbmRlci5maW5kX3NwZWMoc2VsZi5uYW1lKQogICAgICAgICByZXR1cm4gZm91bmQubG9hZGVyIGlmIGZvdW5kIGlzIG5vdCBOb25lIGVsc2UgZm91bmQKIAotRnJvemVuX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVA0NTEsIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworKEZyb3plbl9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxLAorIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxCisgKSA9IHV0aWwudGVzdF9ib3RoKENhc2VTZW5zaXRpdml0eVRlc3RQRVA0NTEsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKaW5kZXggMmQ0MTVmOS4uNzNmNGM2MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKQEAgLTEsNiArMSw1IEBACiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCiBpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCiBpbXBvcnRsaWJfYWJjID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIuYWJjJykKQEAgLTcxLDcgKzcwLDcgQEAKIAogICAgICMgW2Jhc2ljXQogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKQEAgLTgzLDcgKzgyLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfcGtnLl9faW5pdF9fJykgYXMgbWFwcGluZzoKKyAgICAgICAgd2l0aCB1dGlsLmNyZWF0ZV9tb2R1bGVzKCdfcGtnLl9faW5pdF9fJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ19wa2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSkKICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKQEAgLTk4LDcgKzk3LDcgQEAKIAogCiAgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ19wa2cuX19pbml0X18nLCAnX3BrZy5tb2QnKWFzIG1hcHBpbmc6CisgICAgICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycsICdfcGtnLm1vZCcpYXMgbWFwcGluZzoKICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ19wa2cubW9kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nWydfcGtnLm1vZCddKQogICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgpAQCAtMTE1LDcgKzExNCw3IEBACiAgICAgICAgIHJldHVybiBsYW1iZGEgbmFtZTogZnhuKG5hbWUpICsgMQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CisgICAgICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQpAQCAtMTM5LDcgKzEzOCw3IEBACiAgICAgICAgIGF0dHJpYnV0ZXMgPSAoJ19fZmlsZV9fJywgJ19fcGF0aF9fJywgJ19fcGFja2FnZV9fJykKICAgICAgICAgdmFsdWUgPSAnPHRlc3Q+JwogICAgICAgICBuYW1lID0gJ190ZW1wJwotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG5hbWUpIGFzIG1hcHBpbmc6CisgICAgICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcyhuYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgb3JpZ19tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRyaWJ1dGVzOgogICAgICAgICAgICAgICAgIHNldGF0dHIob3JpZ19tb2R1bGUsIGF0dHIsIHZhbHVlKQpAQCAtMTU5LDcgKzE1OCw3IEBACiAKICAgICAjIFtzeW50YXggZXJyb3JdCiAgICAgZGVmIHRlc3RfYmFkX3N5bnRheChzZWxmKToKLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nWydfdGVtcCddLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgnPScpCiAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCkBAIC0xOTAsMTEgKzE4OSwxMSBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocHljYWNoZSk6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShweWNhY2hlKQogCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIEB1dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwogICAgIGRlZiB0ZXN0X3RpbWVzdGFtcF9vdmVyZmxvdyhzZWxmKToKICAgICAgICAgIyBXaGVuIGEgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcCBpcyBsYXJnZXIgdGhhbiAyKiozMiwgaXQgc2hvdWxkIGJlCiAgICAgICAgICMgdHJ1bmNhdGVkIHJhdGhlciB0aGFuIHJhaXNlIGFuIE92ZXJmbG93RXJyb3IuCi0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKKyAgICAgICAgd2l0aCB1dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBzb3VyY2UgPSBtYXBwaW5nWydfdGVtcCddCiAgICAgICAgICAgICBjb21waWxlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAndycpIGFzIGY6CkBAIC0yMzYsOSArMjM1LDExIEBACiAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKCdiYWQgbmFtZScpCiAKLUZyb3plbl9TaW1wbGVUZXN0LCBTb3VyY2VfU2ltcGxlVGVzdCA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBTaW1wbGVUZXN0LCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LCBhYmM9aW1wb3J0bGliX2FiYywKLSAgICAgICAgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworKEZyb3plbl9TaW1wbGVUZXN0LAorIFNvdXJjZV9TaW1wbGVUZXN0CisgKSA9IHV0aWwudGVzdF9ib3RoKFNpbXBsZVRlc3QsIGltcG9ydGxpYj1pbXBvcnRsaWIsIG1hY2hpbmVyeT1tYWNoaW5lcnksCisgICAgICAgICAgICAgICAgICAgIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGNsYXNzIEJhZEJ5dGVjb2RlVGVzdDoKQEAgLTI3NSw0NSArMjc2LDQ1IEBACiAgICAgICAgIHJldHVybiBieXRlY29kZV9wYXRoCiAKICAgICBkZWYgX3Rlc3RfZW1wdHlfZmlsZShzZWxmLCB0ZXN0LCAqLCBkZWxfc291cmNlPUZhbHNlKToKLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIGJjX3BhdGggPSBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiYzogYicnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQogICAgICAgICAgICAgdGVzdCgnX3RlbXAnLCBtYXBwaW5nLCBiY19wYXRoKQogCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIEB1dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwogICAgIGRlZiBfdGVzdF9wYXJ0aWFsX21hZ2ljKHNlbGYsIHRlc3QsICosIGRlbF9zb3VyY2U9RmFsc2UpOgogICAgICAgICAjIFdoZW4gdGhlaXIgYXJlIGxlc3MgdGhhbiA0IGJ5dGVzIHRvIGEgLnB5YywgcmVnZW5lcmF0ZSBpdCBpZgogICAgICAgICAjIHBvc3NpYmxlLCBlbHNlIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CisgICAgICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgYmNfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6M10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxfc291cmNlPWRlbF9zb3VyY2UpCiAgICAgICAgICAgICB0ZXN0KCdfdGVtcCcsIG1hcHBpbmcsIGJjX3BhdGgpCiAKICAgICBkZWYgX3Rlc3RfbWFnaWNfb25seShzZWxmLCB0ZXN0LCAqLCBkZWxfc291cmNlPUZhbHNlKToKLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIGJjX3BhdGggPSBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiYzogYmNbOjRdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQogICAgICAgICAgICAgdGVzdCgnX3RlbXAnLCBtYXBwaW5nLCBiY19wYXRoKQogCiAgICAgZGVmIF90ZXN0X3BhcnRpYWxfdGltZXN0YW1wKHNlbGYsIHRlc3QsICosIGRlbF9zb3VyY2U9RmFsc2UpOgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CisgICAgICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgYmNfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6N10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxfc291cmNlPWRlbF9zb3VyY2UpCiAgICAgICAgICAgICB0ZXN0KCdfdGVtcCcsIG1hcHBpbmcsIGJjX3BhdGgpCiAKICAgICBkZWYgX3Rlc3RfcGFydGlhbF9zaXplKHNlbGYsIHRlc3QsICosIGRlbF9zb3VyY2U9RmFsc2UpOgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CisgICAgICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgYmNfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6MTFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQogICAgICAgICAgICAgdGVzdCgnX3RlbXAnLCBtYXBwaW5nLCBiY19wYXRoKQogCiAgICAgZGVmIF90ZXN0X25vX21hcnNoYWwoc2VsZiwgKiwgZGVsX3NvdXJjZT1GYWxzZSk6Ci0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKKyAgICAgICAgd2l0aCB1dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBiY19wYXRoID0gc2VsZi5tYW5pcHVsYXRlX2J5dGVjb2RlKCdfdGVtcCcsIG1hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYmM6IGJjWzoxMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxfc291cmNlPWRlbF9zb3VyY2UpCkBAIC0zMjIsNyArMzIzLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF8oZmlsZV9wYXRoLCAnX3RlbXAnKQogCiAgICAgZGVmIF90ZXN0X25vbl9jb2RlX21hcnNoYWwoc2VsZiwgKiwgZGVsX3NvdXJjZT1GYWxzZSk6Ci0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKKyAgICAgICAgd2l0aCB1dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi5tYW5pcHVsYXRlX2J5dGVjb2RlKCdfdGVtcCcsIG1hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYmM6IGJjWzoxMl0gKyBtYXJzaGFsLmR1bXBzKGInYWJjZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQpAQCAtMzMzLDcgKzMzNCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5wYXRoLCBieXRlY29kZV9wYXRoKQogCiAgICAgZGVmIF90ZXN0X2JhZF9tYXJzaGFsKHNlbGYsICosIGRlbF9zb3VyY2U9RmFsc2UpOgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CisgICAgICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6MTJdICsgYic8dGVzdD4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQpAQCAtMzQyLDExICszNDMsMTIgQEAKICAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF8oZmlsZV9wYXRoLCAnX3RlbXAnKQogCiAgICAgZGVmIF90ZXN0X2JhZF9tYWdpYyhzZWxmLCB0ZXN0LCAqLCBkZWxfc291cmNlPUZhbHNlKToKLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIGJjX3BhdGggPSBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiYzogYidceDAwXHgwMFx4MDBceDAwJyArIGJjWzQ6XSkKICAgICAgICAgICAgIHRlc3QoJ190ZW1wJywgbWFwcGluZywgYmNfcGF0aCkKIAorCiBjbGFzcyBCYWRCeXRlY29kZVRlc3RQRVA0NTEoQmFkQnl0ZWNvZGVUZXN0KToKIAogICAgIGRlZiBpbXBvcnRfKHNlbGYsIGZpbGUsIG1vZHVsZV9uYW1lKToKQEAgLTM1NSw2ICszNTcsNyBAQAogICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihtb2R1bGVfbmFtZSwgbG9hZGVyKQogICAgICAgICBsb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQogCisKIGNsYXNzIEJhZEJ5dGVjb2RlVGVzdFBFUDMwMihCYWRCeXRlY29kZVRlc3QpOgogCiAgICAgZGVmIGltcG9ydF8oc2VsZiwgZmlsZSwgbW9kdWxlX25hbWUpOgpAQCAtMzcxLDcgKzM3NCw3IEBACiAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICAgY2xzLmxvYWRlciA9IGNscy5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcgogCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIEB1dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwogICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGUoc2VsZik6CiAgICAgICAgICMgV2hlbiBhIC5weWMgaXMgZW1wdHksIHJlZ2VuZXJhdGUgaXQgaWYgcG9zc2libGUsIGVsc2UgcmFpc2UKICAgICAgICAgIyBJbXBvcnRFcnJvci4KQEAgLTM5MCw3ICszOTMsNyBAQAogCiAgICAgICAgIHNlbGYuX3Rlc3RfcGFydGlhbF9tYWdpYyh0ZXN0KQogCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIEB1dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwogICAgIGRlZiB0ZXN0X21hZ2ljX29ubHkoc2VsZik6CiAgICAgICAgICMgV2hlbiB0aGVyZSBpcyBvbmx5IHRoZSBtYWdpYyBudW1iZXIsIHJlZ2VuZXJhdGUgdGhlIC5weWMgaWYgcG9zc2libGUsCiAgICAgICAgICMgZWxzZSByYWlzZSBFT0ZFcnJvci4KQEAgLTQwMSw3ICs0MDQsNyBAQAogCiAgICAgICAgIHNlbGYuX3Rlc3RfbWFnaWNfb25seSh0ZXN0KQogCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIEB1dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwogICAgIGRlZiB0ZXN0X2JhZF9tYWdpYyhzZWxmKToKICAgICAgICAgIyBXaGVuIHRoZSBtYWdpYyBudW1iZXIgaXMgZGlmZmVyZW50LCB0aGUgYnl0ZWNvZGUgc2hvdWxkIGJlCiAgICAgICAgICMgcmVnZW5lcmF0ZWQuCkBAIC00MTMsNyArNDE2LDcgQEAKIAogICAgICAgICBzZWxmLl90ZXN0X2JhZF9tYWdpYyh0ZXN0KQogCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIEB1dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwogICAgIGRlZiB0ZXN0X3BhcnRpYWxfdGltZXN0YW1wKHNlbGYpOgogICAgICAgICAjIFdoZW4gdGhlIHRpbWVzdGFtcCBpcyBwYXJ0aWFsLCByZWdlbmVyYXRlIHRoZSAucHljLCBlbHNlCiAgICAgICAgICMgcmFpc2UgRU9GRXJyb3IuCkBAIC00MjQsNyArNDI3LDcgQEAKIAogICAgICAgICBzZWxmLl90ZXN0X3BhcnRpYWxfdGltZXN0YW1wKHRlc3QpCiAKLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCisgICAgQHV0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfcGFydGlhbF9zaXplKHNlbGYpOgogICAgICAgICAjIFdoZW4gdGhlIHNpemUgaXMgcGFydGlhbCwgcmVnZW5lcmF0ZSB0aGUgLnB5YywgZWxzZQogICAgICAgICAjIHJhaXNlIEVPRkVycm9yLgpAQCAtNDM1LDI5ICs0MzgsMjkgQEAKIAogICAgICAgICBzZWxmLl90ZXN0X3BhcnRpYWxfc2l6ZSh0ZXN0KQogCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIEB1dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwogICAgIGRlZiB0ZXN0X25vX21hcnNoYWwoc2VsZik6CiAgICAgICAgICMgV2hlbiB0aGVyZSBpcyBvbmx5IHRoZSBtYWdpYyBudW1iZXIgYW5kIHRpbWVzdGFtcCwgcmFpc2UgRU9GRXJyb3IuCiAgICAgICAgIHNlbGYuX3Rlc3Rfbm9fbWFyc2hhbCgpCiAKLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCisgICAgQHV0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3Rfbm9uX2NvZGVfbWFyc2hhbChzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9ub25fY29kZV9tYXJzaGFsKCkKICAgICAgICAgIyBYWFggSW1wb3J0RXJyb3Igd2hlbiBzb3VyY2VsZXNzCiAKICAgICAjIFtiYWQgbWFyc2hhbF0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCisgICAgQHV0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfYmFkX21hcnNoYWwoc2VsZik6CiAgICAgICAgICMgQmFkIG1hcnNoYWwgZGF0YSBzaG91bGQgcmFpc2UgYSBWYWx1ZUVycm9yLgogICAgICAgICBzZWxmLl90ZXN0X2JhZF9tYXJzaGFsKCkKIAogICAgICMgW2JhZCB0aW1lc3RhbXBdCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIEB1dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwogICAgIGRlZiB0ZXN0X29sZF90aW1lc3RhbXAoc2VsZik6CiAgICAgICAgICMgV2hlbiB0aGUgdGltZXN0YW1wIGlzIG9sZGVyIHRoYW4gdGhlIHNvdXJjZSwgYnl0ZWNvZGUgc2hvdWxkIGJlCiAgICAgICAgICMgcmVnZW5lcmF0ZWQuCiAgICAgICAgIHplcm9zID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CisgICAgICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CkBAIC00NzEsMTAgKzQ3NCwxMCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWNvZGVfZmlsZS5yZWFkKDQpLCBzb3VyY2VfdGltZXN0YW1wKQogCiAgICAgIyBbYnl0ZWNvZGUgcmVhZC1vbmx5XQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKKyAgICBAdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKICAgICBkZWYgdGVzdF9yZWFkX29ubHlfYnl0ZWNvZGUoc2VsZik6CiAgICAgICAgICMgV2hlbiBieXRlY29kZSBpcyByZWFkLW9ubHkgYnV0IHNob3VsZCBiZSByZXdyaXR0ZW4sIGZhaWwgc2lsZW50bHkuCi0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKKyAgICAgICAgd2l0aCB1dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICAjIENyZWF0ZSBieXRlY29kZSB0aGF0IHdpbGwgbmVlZCB0byBiZSByZS1jcmVhdGVkLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCkBAIC00OTEsMjEgKzQ5NCwyOSBAQAogICAgICAgICAgICAgICAgICMgTWFrZSB3cml0YWJsZSBmb3IgZXZlbnR1YWwgY2xlYW4tdXAuCiAgICAgICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwgc3RhdC5TX0lXVVNSKQogCisKIGNsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSgKICAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0LCBCYWRCeXRlY29kZVRlc3RQRVA0NTEpOgogICAgIHBhc3MKIAotRnJvemVuX1NvdXJjZUJhZEJ5dGVjb2RlUEVQNDUxLCBTb3VyY2VfU291cmNlQmFkQnl0ZWNvZGVQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQNDUxLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LAotICAgICAgICBhYmM9aW1wb3J0bGliX2FiYywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworKEZyb3plbl9Tb3VyY2VCYWRCeXRlY29kZVBFUDQ1MSwKKyBTb3VyY2VfU291cmNlQmFkQnl0ZWNvZGVQRVA0NTEKKyApID0gdXRpbC50ZXN0X2JvdGgoU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQNDUxLCBpbXBvcnRsaWI9aW1wb3J0bGliLAorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5LCBhYmM9aW1wb3J0bGliX2FiYywKKyAgICAgICAgICAgICAgICAgICAgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKwogCiBjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVAzMDIoCiAgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdCwgQmFkQnl0ZWNvZGVUZXN0UEVQMzAyKToKICAgICBwYXNzCiAKLUZyb3plbl9Tb3VyY2VCYWRCeXRlY29kZVBFUDMwMiwgU291cmNlX1NvdXJjZUJhZEJ5dGVjb2RlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSwKLSAgICAgICAgYWJjPWltcG9ydGxpYl9hYmMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCisKKyhGcm96ZW5fU291cmNlQmFkQnl0ZWNvZGVQRVAzMDIsCisgU291cmNlX1NvdXJjZUJhZEJ5dGVjb2RlUEVQMzAyCisgKSA9IHV0aWwudGVzdF9ib3RoKFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSwgYWJjPWltcG9ydGxpYl9hYmMsCisgICAgICAgICAgICAgICAgICAgIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKIAogY2xhc3MgU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdDoKQEAgLTU2NywyMSArNTc4LDI5IEBACiAgICAgZGVmIHRlc3Rfbm9uX2NvZGVfbWFyc2hhbChzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9ub25fY29kZV9tYXJzaGFsKGRlbF9zb3VyY2U9VHJ1ZSkKIAorCiBjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCiAgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSk6CiAgICAgcGFzcwogCi1Gcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEsIGltcG9ydGxpYj1pbXBvcnRsaWIsCi0gICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQorCisoRnJvemVuX1NvdXJjZWxlc3NCYWRCeXRlY29kZVBFUDQ1MSwKKyBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxCisgKSA9IHV0aWwudGVzdF9ib3RoKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLAorICAgICAgICAgICAgICAgICAgICB1dGlsPWltcG9ydGxpYl91dGlsKQorCiAKIGNsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVAzMDIoU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdCwKICAgICAgICAgQmFkQnl0ZWNvZGVUZXN0UEVQMzAyKToKICAgICBwYXNzCiAKLUZyb3plbl9Tb3VyY2VsZXNzQmFkQnl0ZWNvZGVQRVAzMDIsIFNvdXJjZV9Tb3VyY2VsZXNzQmFkQnl0ZWNvZGVQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwKLSAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSwgYWJjPWltcG9ydGxpYl9hYmMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCisKKyhGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyLAorIFNvdXJjZV9Tb3VyY2VsZXNzQmFkQnl0ZWNvZGVQRVAzMDIKKyApID0gdXRpbC50ZXN0X2JvdGgoU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSwgYWJjPWltcG9ydGxpYl9hYmMsCisgICAgICAgICAgICAgICAgICAgIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQppbmRleCA0NzMyOTdiLi5mMzcyYjg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDYgKzEsNSBAQAogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAogbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIApAQCAtNjAsNyArNTksNyBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgY3JlYXRlIGlzIE5vbmU6CiAgICAgICAgICAgICBjcmVhdGUgPSB7dGVzdH0KLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygqY3JlYXRlKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMoKmNyZWF0ZSkgYXMgbWFwcGluZzoKICAgICAgICAgICAgIGlmIGNvbXBpbGVfOgogICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGNvbXBpbGVfOgogICAgICAgICAgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobWFwcGluZ1tuYW1lXSkKQEAgLTEwMCwxNCArOTksMTQgQEAKIAogICAgICMgW3N1YiBtb2R1bGVdCiAgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuc3ViJykgYXMgbWFwcGluZzoKKyAgICAgICAgd2l0aCB1dGlsLmNyZWF0ZV9tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLnN1YicpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5kaXJuYW1lKG1hcHBpbmdbJ3BrZy5fX2luaXRfXyddKQogICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5pbXBvcnRfKHBrZ19kaXIsICdwa2cuc3ViJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxvYWRlciwgJ2xvYWRfbW9kdWxlJykpCiAKICAgICAjIFtzdWIgcGFja2FnZV0KICAgICBkZWYgdGVzdF9wYWNrYWdlX2luX3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIGNvbnRleHQgPSBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5zdWIuX19pbml0X18nKQorICAgICAgICBjb250ZXh0ID0gdXRpbC5jcmVhdGVfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5zdWIuX19pbml0X18nKQogICAgICAgICB3aXRoIGNvbnRleHQgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmRpcm5hbWUobWFwcGluZ1sncGtnLl9faW5pdF9fJ10pCiAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLmltcG9ydF8ocGtnX2RpciwgJ3BrZy5zdWInKQpAQCAtMTIwLDcgKzExOSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19faW5pdF9fJywgbG9hZGVyLmdldF9maWxlbmFtZShuYW1lKSkKIAogICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6Ci0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ2JsYWgnKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMoJ2JsYWgnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgbm90aGluZyA9IHNlbGYuaW1wb3J0XyhtYXBwaW5nWycucm9vdCddLCAnc2Rmc2Fkc2FkZicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShub3RoaW5nKQogCkBAIC0xNDcsNyArMTQ2LDcgQEAKICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE0ODQ2CiAgICAgZGVmIHRlc3RfZGlyX3JlbW92YWxfaGFuZGxpbmcoc2VsZik6CiAgICAgICAgIG1vZCA9ICdtb2QnCi0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMobW9kKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMobW9kKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgZmluZGVyID0gc2VsZi5nZXRfZmluZGVyKG1hcHBpbmdbJy5yb290J10pCiAgICAgICAgICAgICBmb3VuZCA9IHNlbGYuX2ZpbmQoZmluZGVyLCAnbW9kJywgbG9hZGVyX29ubHk9VHJ1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGZvdW5kKQpAQCAtMTk2LDggKzE5NSwxMCBAQAogICAgICAgICBzcGVjID0gZmluZGVyLmZpbmRfc3BlYyhuYW1lKQogICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIgaWYgc3BlYyBpcyBub3QgTm9uZSBlbHNlIHNwZWMKIAotRnJvemVuX0ZpbmRlclRlc3RzUEVQNDUxLCBTb3VyY2VfRmluZGVyVGVzdHNQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgRmluZGVyVGVzdHNQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKyhGcm96ZW5fRmluZGVyVGVzdHNQRVA0NTEsCisgU291cmNlX0ZpbmRlclRlc3RzUEVQNDUxCisgKSA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzUEVQNDUxLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGNsYXNzIEZpbmRlclRlc3RzUEVQNDIwKEZpbmRlclRlc3RzKToKQEAgLTIxMCw4ICsyMTEsMTAgQEAKICAgICAgICAgICAgIGxvYWRlcl9wb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihuYW1lKQogICAgICAgICAgICAgcmV0dXJuIGxvYWRlcl9wb3J0aW9uc1swXSBpZiBsb2FkZXJfb25seSBlbHNlIGxvYWRlcl9wb3J0aW9ucwogCi1Gcm96ZW5fRmluZGVyVGVzdHNQRVA0MjAsIFNvdXJjZV9GaW5kZXJUZXN0c1BFUDQyMCA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBGaW5kZXJUZXN0c1BFUDQyMCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworKEZyb3plbl9GaW5kZXJUZXN0c1BFUDQyMCwKKyBTb3VyY2VfRmluZGVyVGVzdHNQRVA0MjAKKyApID0gdXRpbC50ZXN0X2JvdGgoRmluZGVyVGVzdHNQRVA0MjAsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogY2xhc3MgRmluZGVyVGVzdHNQRVAzMDIoRmluZGVyVGVzdHMpOgpAQCAtMjIzLDkgKzIyNiwxMCBAQAogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUpCiAKLUZyb3plbl9GaW5kZXJUZXN0c1BFUDMwMiwgU291cmNlX0ZpbmRlclRlc3RzUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIEZpbmRlclRlc3RzUEVQMzAyLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCisoRnJvemVuX0ZpbmRlclRlc3RzUEVQMzAyLAorIFNvdXJjZV9GaW5kZXJUZXN0c1BFUDMwMgorICkgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0c1BFUDMwMiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDkyZGE3NzIuLmU2YTI0MTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKQEAgLTEsNSArMSw0IEBACiBmcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAogbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIApAQCAtMTUsNyArMTQsNyBAQAogICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6Ci0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ2R1bW15JykgYXMgbWFwcGluZzoKKyAgICAgICAgd2l0aCB1dGlsLmNyZWF0ZV9tb2R1bGVzKCdkdW1teScpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLnBhdGhfaG9vaygpKG1hcHBpbmdbJy5yb290J10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbmRfbW9kdWxlJykpCiAKQEAgLTIzLDcgKzIyLDEwIEBACiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyByZXByZXNlbnRzIHRoZSBjd2QuCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYucGF0aF9ob29rKCkoJycpLCAnZmluZF9tb2R1bGUnKSkKIAotRnJvemVuX1BhdGhIb29rVGVzdCwgU291cmNlX1BhdGhIb29rdGVzdCA9IHV0aWwudGVzdF9ib3RoKFBhdGhIb29rVGVzdCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworKEZyb3plbl9QYXRoSG9va1Rlc3QsCisgU291cmNlX1BhdGhIb29rdGVzdAorICkgPSB1dGlsLnRlc3RfYm90aChQYXRoSG9va1Rlc3QsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQppbmRleCBjNjJkZmExLi4xZTA3NzFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CkBAIC0xLDUgKzEsNCBAQAogZnJvbSAuLiBpbXBvcnQgdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKIG1hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCiAKQEAgLTE1LDcgKzE0LDcgQEAKIGltcG9ydCB3YXJuaW5ncwogCiAKLUNPRElOR19SRSA9IHJlLmNvbXBpbGUocideWyBcdFxmXSojLipjb2RpbmdbOj1dWyBcdF0qKFstXHcuXSspJywgcmUuQVNDSUkpCitDT0RJTkdfUkUgPSByZS5jb21waWxlKHInXlsgXHRcZl0qIy4qP2NvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknLCByZS5BU0NJSSkKIAogCiBjbGFzcyBFbmNvZGluZ1Rlc3Q6CkBAIC0zNyw3ICszNiw3IEBACiAgICAgbW9kdWxlX25hbWUgPSAnX3RlbXAnCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgc291cmNlKToKLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhzZWxmLm1vZHVsZV9uYW1lKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMoc2VsZi5tb2R1bGVfbmFtZSkgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nW3NlbGYubW9kdWxlX25hbWVdLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoc291cmNlKQogICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLApAQCAtODksNiArODgsNyBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKICAgICAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc291cmNlKQogCisKIGNsYXNzIEVuY29kaW5nVGVzdFBFUDQ1MShFbmNvZGluZ1Rlc3QpOgogCiAgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyKToKQEAgLTk3LDggKzk3LDExIEBACiAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCiAgICAgICAgIHJldHVybiBtb2R1bGUKIAotRnJvemVuX0VuY29kaW5nVGVzdFBFUDQ1MSwgU291cmNlX0VuY29kaW5nVGVzdFBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBFbmNvZGluZ1Rlc3RQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKyhGcm96ZW5fRW5jb2RpbmdUZXN0UEVQNDUxLAorIFNvdXJjZV9FbmNvZGluZ1Rlc3RQRVA0NTEKKyApID0gdXRpbC50ZXN0X2JvdGgoRW5jb2RpbmdUZXN0UEVQNDUxLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCiAKIGNsYXNzIEVuY29kaW5nVGVzdFBFUDMwMihFbmNvZGluZ1Rlc3QpOgogCkBAIC0xMDcsOCArMTEwLDEwIEBACiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHJldHVybiBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKIAotRnJvemVuX0VuY29kaW5nVGVzdFBFUDMwMiwgU291cmNlX0VuY29kaW5nVGVzdFBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBFbmNvZGluZ1Rlc3RQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKyhGcm96ZW5fRW5jb2RpbmdUZXN0UEVQMzAyLAorIFNvdXJjZV9FbmNvZGluZ1Rlc3RQRVAzMDIKKyApID0gdXRpbC50ZXN0X2JvdGgoRW5jb2RpbmdUZXN0UEVQMzAyLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGNsYXNzIExpbmVFbmRpbmdUZXN0OgpAQCAtMTIwLDcgKzEyNSw3IEBACiAgICAgICAgIG1vZHVsZV9uYW1lID0gJ190ZW1wJwogICAgICAgICBzb3VyY2VfbGluZXMgPSBbYiJhID0gNDIiLCBiImIgPSAtMTMiLCBiJyddCiAgICAgICAgIHNvdXJjZSA9IGxpbmVfZW5kaW5nLmpvaW4oc291cmNlX2xpbmVzKQotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG1vZHVsZV9uYW1lKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMobW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1ttb2R1bGVfbmFtZV0sICd3YicpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShzb3VyY2UpCiAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLApAQCAtMTM5LDYgKzE0NCw3IEBACiAgICAgZGVmIHRlc3RfbGYoc2VsZik6CiAgICAgICAgIHNlbGYucnVuX3Rlc3QoYidcbicpCiAKKwogY2xhc3MgTGluZUVuZGluZ1Rlc3RQRVA0NTEoTGluZUVuZGluZ1Rlc3QpOgogCiAgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyLCBtb2R1bGVfbmFtZSk6CkBAIC0xNDcsOCArMTUzLDExIEBACiAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCiAgICAgICAgIHJldHVybiBtb2R1bGUKIAotRnJvemVuX0xpbmVFbmRpbmdUZXN0UEVQNDUxLCBTb3VyY2VfTGluZUVuZGluZ1Rlc3RQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgTGluZUVuZGluZ1Rlc3RQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKyhGcm96ZW5fTGluZUVuZGluZ1Rlc3RQRVA0NTEsCisgU291cmNlX0xpbmVFbmRpbmdUZXN0UEVQNDUxCisgKSA9IHV0aWwudGVzdF9ib3RoKExpbmVFbmRpbmdUZXN0UEVQNDUxLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCiAKIGNsYXNzIExpbmVFbmRpbmdUZXN0UEVQMzAyKExpbmVFbmRpbmdUZXN0KToKIApAQCAtMTU3LDggKzE2NiwxMCBAQAogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQogCi1Gcm96ZW5fTGluZUVuZGluZ1Rlc3RQRVAzMDIsIFNvdXJjZV9MaW5lRW5kaW5nVGVzdFBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAotICAgICAgICBMaW5lRW5kaW5nVGVzdFBFUDMwMiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworKEZyb3plbl9MaW5lRW5kaW5nVGVzdFBFUDMwMiwKKyBTb3VyY2VfTGluZUVuZGluZ1Rlc3RQRVAzMDIKKyApID0gdXRpbC50ZXN0X2JvdGgoTGluZUVuZGluZ1Rlc3RQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzY2QyNWEuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi1mcm9tIC4uIGltcG9ydCB1dGlsCi1pbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGVycm5vCi1pbXBvcnQgZnVuY3Rvb2xzCi1pbXBvcnQgb3MKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotCi0KLWRlZiB3cml0ZXNfYnl0ZWNvZGVfZmlsZXMoZnhuKToKLSAgICAiIiJEZWNvcmF0b3IgdG8gcHJvdGVjdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBmcm9tIG11dGF0aW9uIGFuZCB0byBza2lwCi0gICAgdGVzdHMgdGhhdCByZXF1aXJlIGl0IHRvIGJlIHNldCB0byBGYWxzZS4iIiIKLSAgICBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKLSAgICAgICAgcmV0dXJuIGxhbWJkYSAqYXJncywgKiprd2FyZ3M6IE5vbmUKLSAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKLSAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBvcmlnaW5hbCA9IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlCi0gICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gRmFsc2UKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdG9fcmV0dXJuID0gZnhuKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gb3JpZ2luYWwKLSAgICAgICAgcmV0dXJuIHRvX3JldHVybgotICAgIHJldHVybiB3cmFwcGVyCi0KLQotZGVmIGVuc3VyZV9ieXRlY29kZV9wYXRoKGJ5dGVjb2RlX3BhdGgpOgotICAgICIiIkVuc3VyZSB0aGF0IHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgZm9yIFBFUCAzMTQ3IHB5YyBmaWxlIGV4aXN0cy4KLQotICAgIDpwYXJhbSBieXRlY29kZV9wYXRoOiBGaWxlIHN5c3RlbSBwYXRoIHRvIFBFUCAzMTQ3IHB5YyBmaWxlLgotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgb3MubWtkaXIob3MucGF0aC5kaXJuYW1lKGJ5dGVjb2RlX3BhdGgpKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICBpZiBlcnJvci5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotCi0KLUBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi1kZWYgY3JlYXRlX21vZHVsZXMoKm5hbWVzKToKLSAgICAiIiJUZW1wb3JhcmlseSBjcmVhdGUgZWFjaCBuYW1lZCBtb2R1bGUgd2l0aCBhbiBhdHRyaWJ1dGUgKG5hbWVkICdhdHRyJykKLSAgICB0aGF0IGNvbnRhaW5zIHRoZSBuYW1lIHBhc3NlZCBpbnRvIHRoZSBjb250ZXh0IG1hbmFnZXIgdGhhdCBjYXVzZWQgdGhlCi0gICAgY3JlYXRpb24gb2YgdGhlIG1vZHVsZS4KLQotICAgIEFsbCBmaWxlcyBhcmUgY3JlYXRlZCBpbiBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgcmV0dXJuZWQgYnkKLSAgICB0ZW1wZmlsZS5ta2R0ZW1wKCkuIFRoaXMgZGlyZWN0b3J5IGlzIGluc2VydGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YKLSAgICBzeXMucGF0aC4gV2hlbiB0aGUgY29udGV4dCBtYW5hZ2VyIGV4aXRzIGFsbCBjcmVhdGVkIGZpbGVzIChzb3VyY2UgYW5kCi0gICAgYnl0ZWNvZGUpIGFyZSBleHBsaWNpdGx5IGRlbGV0ZWQuCi0KLSAgICBObyBtYWdpYyBpcyBwZXJmb3JtZWQgd2hlbiBjcmVhdGluZyBwYWNrYWdlcyEgVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBjcmVhdGUKLSAgICBhIG1vZHVsZSB3aXRoaW4gYSBwYWNrYWdlIHlvdSBtdXN0IGFsc28gY3JlYXRlIHRoZSBwYWNrYWdlJ3MgX19pbml0X18gYXMKLSAgICB3ZWxsLgotCi0gICAgIiIiCi0gICAgc291cmNlID0gJ2F0dHIgPSB7MCFyfScKLSAgICBjcmVhdGVkX3BhdGhzID0gW10KLSAgICBtYXBwaW5nID0ge30KLSAgICBzdGF0ZV9tYW5hZ2VyID0gTm9uZQotICAgIHVuY2FjaGVfbWFuYWdlciA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICAgIHRlbXBfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCi0gICAgICAgIG1hcHBpbmdbJy5yb290J10gPSB0ZW1wX2RpcgotICAgICAgICBpbXBvcnRfbmFtZXMgPSBzZXQoKQotICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCdfX2luaXRfXycpOgotICAgICAgICAgICAgICAgIGltcG9ydF9uYW1lID0gbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpbXBvcnRfbmFtZSA9IG5hbWVbOi1sZW4oJy5fX2luaXRfXycpXQotICAgICAgICAgICAgaW1wb3J0X25hbWVzLmFkZChpbXBvcnRfbmFtZSkKLSAgICAgICAgICAgIGlmIGltcG9ydF9uYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tpbXBvcnRfbmFtZV0KLSAgICAgICAgICAgIG5hbWVfcGFydHMgPSBuYW1lLnNwbGl0KCcuJykKLSAgICAgICAgICAgIGZpbGVfcGF0aCA9IHRlbXBfZGlyCi0gICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIG5hbWVfcGFydHNbOi0xXToKLSAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZmlsZV9wYXRoLCBkaXJlY3RvcnkpCi0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKGZpbGVfcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlZF9wYXRocy5hcHBlbmQoZmlsZV9wYXRoKQotICAgICAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKGZpbGVfcGF0aCwgbmFtZV9wYXJ0c1stMV0gKyAnLnB5JykKLSAgICAgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZmlsZToKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRlKHNvdXJjZS5mb3JtYXQobmFtZSkpCi0gICAgICAgICAgICBjcmVhdGVkX3BhdGhzLmFwcGVuZChmaWxlX3BhdGgpCi0gICAgICAgICAgICBtYXBwaW5nW25hbWVdID0gZmlsZV9wYXRoCi0gICAgICAgIHVuY2FjaGVfbWFuYWdlciA9IHV0aWwudW5jYWNoZSgqaW1wb3J0X25hbWVzKQotICAgICAgICB1bmNhY2hlX21hbmFnZXIuX19lbnRlcl9fKCkKLSAgICAgICAgc3RhdGVfbWFuYWdlciA9IHV0aWwuaW1wb3J0X3N0YXRlKHBhdGg9W3RlbXBfZGlyXSkKLSAgICAgICAgc3RhdGVfbWFuYWdlci5fX2VudGVyX18oKQotICAgICAgICB5aWVsZCBtYXBwaW5nCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgc3RhdGVfbWFuYWdlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHN0YXRlX21hbmFnZXIuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKLSAgICAgICAgaWYgdW5jYWNoZV9tYW5hZ2VyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdW5jYWNoZV9tYW5hZ2VyLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgIHN1cHBvcnQucm10cmVlKHRlbXBfZGlyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQppbmRleCBhMWY4ZTc2Li5kNGJmOTE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQpAQCAtMTAsMTIgKzEwLDEzIEBACiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiBpbXBvcnQgd2FybmluZ3MKIAotZnJvbSAuIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCiAKLWZyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKLWZyb3plbl9hYmMsIHNvdXJjZV9hYmMgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5hYmMnKQotbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKLWZyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQoraW5pdCA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorYWJjID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5hYmMnKQorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQordXRpbCA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKIAogIyMjIyMgSW5oZXJpdGFuY2UgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGNsYXNzIEluaGVyaXRhbmNlVGVzdHM6CkBAIC0yNiw4ICsyNyw3IEBACiAgICAgc3ViY2xhc3NlcyA9IFtdCiAgICAgc3VwZXJjbGFzc2VzID0gW10KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc3VwZXJjbGFzc2VzID0gW2dldGF0dHIoc2VsZi5hYmMsIGNsYXNzX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuc3VwZXJjbGFzc19uYW1lc10KICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnc3ViY2xhc3NfbmFtZXMnKToKQEAgLTM2LDExICszNiwxMSBAQAogICAgICAgICAgICAgIyBjaGVja2luZyBhY3Jvc3MgbW9kdWxlIGJvdW5kYXJpZXMgKGkuZS4gdGhlIF9ib290c3RyYXAgaW4gYWJjIGlzCiAgICAgICAgICAgICAjIG5vdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluIG1hY2hpbmVyeSkuIFRoYXQgbWVhbnMgc3RlYWxpbmcgb25lIG9mCiAgICAgICAgICAgICAjIHRoZSBtb2R1bGVzIGZyb20gdGhlIG90aGVyIHRvIG1ha2Ugc3VyZSB0aGUgc2FtZSBpbnN0YW5jZSBpcyB1c2VkLgotICAgICAgICAgICAgc2VsZi5zdWJjbGFzc2VzID0gW2dldGF0dHIoc2VsZi5hYmMubWFjaGluZXJ5LCBjbGFzc19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2xhc3NfbmFtZSBpbiBzZWxmLnN1YmNsYXNzX25hbWVzXQorICAgICAgICAgICAgbWFjaGluZXJ5ID0gc2VsZi5hYmMubWFjaGluZXJ5CisgICAgICAgICAgICBzZWxmLnN1YmNsYXNzZXMgPSBbZ2V0YXR0cihtYWNoaW5lcnksIGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5zdWJjbGFzc19uYW1lc10KICAgICAgICAgYXNzZXJ0IHNlbGYuc3ViY2xhc3NlcyBvciBzZWxmLnN1cGVyY2xhc3Nlcywgc2VsZi5fX2NsYXNzX18KLSAgICAgICAgdGVzdGluZyA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLnBhcnRpdGlvbignXycpWzJdCi0gICAgICAgIHNlbGYuX190ZXN0ID0gZ2V0YXR0cihzZWxmLmFiYywgdGVzdGluZykKKyAgICAgICAgc2VsZi5fX3Rlc3QgPSBnZXRhdHRyKHNlbGYuYWJjLCBzZWxmLl9OQU1FKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGV4cGVjdGVkIHN1YmNsYXNzZXMgaW5oZXJpdC4KQEAgLTU0LDk0ICs1NCw5NyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5fX3Rlc3QsIHN1cGVyY2xhc3MpLAogICAgICAgICAgICAgICAgInswfSBpcyBub3QgYSBzdXBlcmNsYXNzIG9mIHsxfSIuZm9ybWF0KHN1cGVyY2xhc3MsIHNlbGYuX190ZXN0KSkKIAotZGVmIGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhiYXNlX2NsYXNzKToKLSAgICBkZWYgc2V0X2Zyb3plbihucyk6Ci0gICAgICAgIG5zWydhYmMnXSA9IGZyb3plbl9hYmMKLSAgICBkZWYgc2V0X3NvdXJjZShucyk6Ci0gICAgICAgIG5zWydhYmMnXSA9IHNvdXJjZV9hYmMKLQotICAgIGNsYXNzZXMgPSBbXQotICAgIGZvciBwcmVmaXgsIG5zX3NldCBpbiBbKCdGcm96ZW4nLCBzZXRfZnJvemVuKSwgKCdTb3VyY2UnLCBzZXRfc291cmNlKV06Ci0gICAgICAgIGNsYXNzZXMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcygnXycuam9pbihbcHJlZml4LCBiYXNlX2NsYXNzLl9fbmFtZV9fXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFzZV9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY19ib2R5PW5zX3NldCkpCi0gICAgcmV0dXJuIGNsYXNzZXMKLQogCiBjbGFzcyBNZXRhUGF0aEZpbmRlcihJbmhlcml0YW5jZVRlc3RzKToKICAgICBzdXBlcmNsYXNzX25hbWVzID0gWydGaW5kZXInXQogICAgIHN1YmNsYXNzX25hbWVzID0gWydCdWlsdGluSW1wb3J0ZXInLCAnRnJvemVuSW1wb3J0ZXInLCAnUGF0aEZpbmRlcicsCiAgICAgICAgICAgICAgICAgICAgICAgJ1dpbmRvd3NSZWdpc3RyeUZpbmRlciddCiAKLXRlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKE1ldGFQYXRoRmluZGVyKQotRnJvemVuX01ldGFQYXRoRmluZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX01ldGFQYXRoRmluZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKyhGcm96ZW5fTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzLAorIFNvdXJjZV9NZXRhUGF0aEZpbmRlckluaGVyaXRhbmNlVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChNZXRhUGF0aEZpbmRlciwgYWJjPWFiYykKIAogCiBjbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cyk6CiAgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnRmluZGVyJ10KICAgICBzdWJjbGFzc19uYW1lcyA9IFsnRmlsZUZpbmRlciddCiAKLXRlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlcikKLUZyb3plbl9QYXRoRW50cnlGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUGF0aEVudHJ5RmluZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKyhGcm96ZW5fUGF0aEVudHJ5RmluZGVySW5oZXJpdGFuY2VUZXN0cywKKyBTb3VyY2VfUGF0aEVudHJ5RmluZGVySW5oZXJpdGFuY2VUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKFBhdGhFbnRyeUZpbmRlciwgYWJjPWFiYykKIAogCiBjbGFzcyBSZXNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKICAgICBzdXBlcmNsYXNzX25hbWVzID0gWydMb2FkZXInXQogCi10ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhSZXNvdXJjZUxvYWRlcikKLUZyb3plbl9SZXNvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9SZXNvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisoRnJvemVuX1Jlc291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywKKyBTb3VyY2VfUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoUmVzb3VyY2VMb2FkZXIsIGFiYz1hYmMpCiAKIAogY2xhc3MgSW5zcGVjdExvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKICAgICBzdXBlcmNsYXNzX25hbWVzID0gWydMb2FkZXInXQogICAgIHN1YmNsYXNzX25hbWVzID0gWydCdWlsdGluSW1wb3J0ZXInLCAnRnJvemVuSW1wb3J0ZXInLCAnRXh0ZW5zaW9uRmlsZUxvYWRlciddCiAKLXRlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEluc3BlY3RMb2FkZXIpCi1Gcm96ZW5fSW5zcGVjdExvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9JbnNwZWN0TG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKyhGcm96ZW5fSW5zcGVjdExvYWRlckluaGVyaXRhbmNlVGVzdHMsCisgU291cmNlX0luc3BlY3RMb2FkZXJJbmhlcml0YW5jZVRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoSW5zcGVjdExvYWRlciwgYWJjPWFiYykKIAogCiBjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CiAgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnSW5zcGVjdExvYWRlciddCiAgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0V4dGVuc2lvbkZpbGVMb2FkZXInXQogCi10ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIpCi1Gcm96ZW5fRXhlY3V0aW9uTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0V4ZWN1dGlvbkxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisoRnJvemVuX0V4ZWN1dGlvbkxvYWRlckluaGVyaXRhbmNlVGVzdHMsCisgU291cmNlX0V4ZWN1dGlvbkxvYWRlckluaGVyaXRhbmNlVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChFeGVjdXRpb25Mb2FkZXIsIGFiYz1hYmMpCiAKIAogY2xhc3MgRmlsZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKICAgICBzdXBlcmNsYXNzX25hbWVzID0gWydSZXNvdXJjZUxvYWRlcicsICdFeGVjdXRpb25Mb2FkZXInXQogICAgIHN1YmNsYXNzX25hbWVzID0gWydTb3VyY2VGaWxlTG9hZGVyJywgJ1NvdXJjZWxlc3NGaWxlTG9hZGVyJ10KIAotdGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoRmlsZUxvYWRlcikKLUZyb3plbl9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0ZpbGVMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworKEZyb3plbl9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywKKyBTb3VyY2VfRmlsZUxvYWRlckluaGVyaXRhbmNlVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChGaWxlTG9hZGVyLCBhYmM9YWJjKQogCiAKIGNsYXNzIFNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKICAgICBzdXBlcmNsYXNzX25hbWVzID0gWydSZXNvdXJjZUxvYWRlcicsICdFeGVjdXRpb25Mb2FkZXInXQogICAgIHN1YmNsYXNzX25hbWVzID0gWydTb3VyY2VGaWxlTG9hZGVyJ10KIAotdGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoU291cmNlTG9hZGVyKQotRnJvemVuX1NvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9Tb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworKEZyb3plbl9Tb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzLAorIFNvdXJjZV9Tb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoU291cmNlTG9hZGVyLCBhYmM9YWJjKQorCiAKICMjIyMjIERlZmF1bHQgcmV0dXJuIHZhbHVlcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1kZWYgbWFrZV9hYmNfc3ViY2xhc3NlcyhiYXNlX2NsYXNzKToKLSAgICBjbGFzc2VzID0gW10KLSAgICBmb3Iga2luZCwgYWJjIGluIFsoJ0Zyb3plbicsIGZyb3plbl9hYmMpLCAoJ1NvdXJjZScsIHNvdXJjZV9hYmMpXToKLSAgICAgICAgbmFtZSA9ICdfJy5qb2luKFtraW5kLCBiYXNlX2NsYXNzLl9fbmFtZV9fXSkKLSAgICAgICAgYmFzZV9jbGFzc2VzID0gYmFzZV9jbGFzcywgZ2V0YXR0cihhYmMsIGJhc2VfY2xhc3MuX19uYW1lX18pCi0gICAgICAgIGNsYXNzZXMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcyhuYW1lLCBiYXNlX2NsYXNzZXMpKQotICAgIHJldHVybiBjbGFzc2VzCiAKLWRlZiBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhiYXNlX2NsYXNzLCB0ZXN0X2NsYXNzKToKLSAgICBmcm96ZW5fY2xhc3MsIHNvdXJjZV9jbGFzcyA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcykKLSAgICB0ZXN0cyA9IFtdCi0gICAgZm9yIHByZWZpeCwgY2xhc3NfaW5fdGVzdCBpbiBbKCdGcm96ZW4nLCBmcm96ZW5fY2xhc3MpLCAoJ1NvdXJjZScsIHNvdXJjZV9jbGFzcyldOgotICAgICAgICBkZWYgc2V0X25zKG5zKToKLSAgICAgICAgICAgIG5zWydpbnMnXSA9IGNsYXNzX2luX3Rlc3QoKQotICAgICAgICB0ZXN0cy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKCdfJy5qb2luKFtwcmVmaXgsIHRlc3RfY2xhc3MuX19uYW1lX19dKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfYm9keT1zZXRfbnMpKQotICAgIHJldHVybiB0ZXN0cworZGVmIG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcywgbmFtZT1Ob25lLCBpbnN0PUZhbHNlLCAqKmt3YXJncyk6CisgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICBuYW1lID0gYmFzZV9jbGFzcy5fX25hbWVfXworICAgIGJhc2UgPSB7a2luZDogZ2V0YXR0cihzcGxpdGFiYywgbmFtZSkKKyAgICAgICAgICAgIGZvciBraW5kLCBzcGxpdGFiYyBpbiBhYmMuaXRlbXMoKX0KKyAgICByZXR1cm4ge2Nscy5fS0lORDogY2xzKCkgaWYgaW5zdCBlbHNlIGNscworICAgICAgICAgICAgZm9yIGNscyBpbiB0ZXN0X3V0aWwuc3BsaXRfZnJvemVuKGJhc2VfY2xhc3MsIGJhc2UsICoqa3dhcmdzKX0KKworCitjbGFzcyBBQkNUZXN0SGFybmVzczoKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbnMoc2VsZik6CisgICAgICAgICMgTGF6aWx5IHNldCBpbnMgb24gdGhlIGNsYXNzLgorICAgICAgICBjbHMgPSBzZWxmLlNQTElUW3NlbGYuX0tJTkRdCisgICAgICAgIGlucyA9IGNscygpCisgICAgICAgIHNlbGYuX19jbGFzc19fLmlucyA9IGlucworICAgICAgICByZXR1cm4gaW5zCiAKIAogY2xhc3MgTWV0YVBhdGhGaW5kZXI6CkBAIC0xNDksMTAgKzE1MiwxMCBAQAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzdXBlcigpLmZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQogCi1Gcm96ZW5fTVBGLCBTb3VyY2VfTVBGID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhNZXRhUGF0aEZpbmRlcikKIAorY2xhc3MgTWV0YVBhdGhGaW5kZXJEZWZhdWx0c1Rlc3RzKEFCQ1Rlc3RIYXJuZXNzKToKIAotY2xhc3MgTWV0YVBhdGhGaW5kZXJEZWZhdWx0c1Rlc3RzOgorICAgIFNQTElUID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhNZXRhUGF0aEZpbmRlcikKIAogICAgIGRlZiB0ZXN0X2ZpbmRfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIERlZmF1bHQgc2hvdWxkIHJldHVybiBOb25lLgpAQCAtMTYzLDggKzE2Niw5IEBACiAgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKIAogCi10ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKE1ldGFQYXRoRmluZGVyLCBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHMpCi1Gcm96ZW5fTVBGRGVmYXVsdFRlc3RzLCBTb3VyY2VfTVBGRGVmYXVsdFRlc3RzID0gdGVzdHMKKyhGcm96ZW5fTVBGRGVmYXVsdFRlc3RzLAorIFNvdXJjZV9NUEZEZWZhdWx0VGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHMpCiAKIAogY2xhc3MgUGF0aEVudHJ5RmluZGVyOgpAQCAtMTcyLDEwICsxNzYsMTAgQEAKICAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICByZXR1cm4gc3VwZXIoKS5maW5kX2xvYWRlcihmdWxsbmFtZSkKIAotRnJvemVuX1BFRiwgU291cmNlX1BFRiA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUGF0aEVudHJ5RmluZGVyKQogCitjbGFzcyBQYXRoRW50cnlGaW5kZXJEZWZhdWx0c1Rlc3RzKEFCQ1Rlc3RIYXJuZXNzKToKIAotY2xhc3MgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0czoKKyAgICBTUExJVCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUGF0aEVudHJ5RmluZGVyKQogCiAgICAgZGVmIHRlc3RfZmluZF9sb2FkZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIFtdKSwgc2VsZi5pbnMuZmluZF9sb2FkZXIoJ3NvbWV0aGluZycpKQpAQCAtMTg4LDggKzE5Miw5IEBACiAgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKIAogCi10ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlciwgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0cykKLUZyb3plbl9QRUZEZWZhdWx0VGVzdHMsIFNvdXJjZV9QRUZEZWZhdWx0VGVzdHMgPSB0ZXN0cworKEZyb3plbl9QRUZEZWZhdWx0VGVzdHMsCisgU291cmNlX1BFRkRlZmF1bHRUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKFBhdGhFbnRyeUZpbmRlckRlZmF1bHRzVGVzdHMpCiAKIAogY2xhc3MgTG9hZGVyOgpAQCAtMTk4LDEwICsyMDMsOSBAQAogICAgICAgICByZXR1cm4gc3VwZXIoKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKIAogCi1Gcm96ZW5fTCwgU291cmNlX0wgPSBtYWtlX2FiY19zdWJjbGFzc2VzKExvYWRlcikKK2NsYXNzIExvYWRlckRlZmF1bHRzVGVzdHMoQUJDVGVzdEhhcm5lc3MpOgogCi0KLWNsYXNzIExvYWRlckRlZmF1bHRzVGVzdHM6CisgICAgU1BMSVQgPSBtYWtlX2FiY19zdWJjbGFzc2VzKExvYWRlcikKIAogICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKQEAgLTIxNyw4ICsyMjEsOSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtb2QpKQogCiAKLXRlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoTG9hZGVyLCBMb2FkZXJEZWZhdWx0c1Rlc3RzKQotRnJvemVuX0xEZWZhdWx0VGVzdHMsIFNvdXJjZUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworKEZyb3plbl9MRGVmYXVsdFRlc3RzLAorIFNvdXJjZUxEZWZhdWx0VGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChMb2FkZXJEZWZhdWx0c1Rlc3RzKQogCiAKIGNsYXNzIFJlc291cmNlTG9hZGVyKExvYWRlcik6CkBAIC0yMjcsMTggKzIzMiwxOCBAQAogICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQogCiAKLUZyb3plbl9STCwgU291cmNlX1JMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhSZXNvdXJjZUxvYWRlcikKK2NsYXNzIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0cyhBQkNUZXN0SGFybmVzcyk6CiAKLQotY2xhc3MgUmVzb3VyY2VMb2FkZXJEZWZhdWx0c1Rlc3RzOgorICAgIFNQTElUID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhSZXNvdXJjZUxvYWRlcikKIAogICAgIGRlZiB0ZXN0X2dldF9kYXRhKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X2RhdGEoJy9zb21lL3BhdGgnKQogCiAKLXRlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoUmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0cykKLUZyb3plbl9STERlZmF1bHRUZXN0cywgU291cmNlX1JMRGVmYXVsdFRlc3RzID0gdGVzdHMKKyhGcm96ZW5fUkxEZWZhdWx0VGVzdHMsCisgU291cmNlX1JMRGVmYXVsdFRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoUmVzb3VyY2VMb2FkZXJEZWZhdWx0c1Rlc3RzKQogCiAKIGNsYXNzIEluc3BlY3RMb2FkZXIoTG9hZGVyKToKQEAgLTI1MCwxMCArMjU1LDEyIEBACiAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9zb3VyY2UoZnVsbG5hbWUpCiAKIAotRnJvemVuX0lMLCBTb3VyY2VfSUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKEluc3BlY3RMb2FkZXIpCitTUExJVF9JTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoSW5zcGVjdExvYWRlcikKIAogCi1jbGFzcyBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0czoKK2NsYXNzIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKEFCQ1Rlc3RIYXJuZXNzKToKKworICAgIFNQTElUID0gU1BMSVRfSUwKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgpAQCAtMjY0LDggKzI3MSw5IEBACiAgICAgICAgICAgICBzZWxmLmlucy5nZXRfc291cmNlKCdibGFoJykKIAogCi10ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKEluc3BlY3RMb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQotRnJvemVuX0lMRGVmYXVsdFRlc3RzLCBTb3VyY2VfSUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworKEZyb3plbl9JTERlZmF1bHRUZXN0cywKKyBTb3VyY2VfSUxEZWZhdWx0VGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0cykKIAogCiBjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5zcGVjdExvYWRlcik6CkBAIC0yNzMsMjEgKzI4MSwyNSBAQAogICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCiAKLUZyb3plbl9FTCwgU291cmNlX0VMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhFeGVjdXRpb25Mb2FkZXIpCisKK1NQTElUX0VMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhFeGVjdXRpb25Mb2FkZXIpCiAKIAotY2xhc3MgRXhlY3V0aW9uTG9hZGVyRGVmYXVsdHNUZXN0czoKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlckRlZmF1bHRzVGVzdHMoQUJDVGVzdEhhcm5lc3MpOgorCisgICAgU1BMSVQgPSBTUExJVF9FTAogCiAgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIHNlbGYuaW5zLmdldF9maWxlbmFtZSgnYmxhaCcpCiAKIAotdGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQotRnJvemVuX0VMRGVmYXVsdFRlc3RzLCBTb3VyY2VfRUxEZWZhdWx0c1Rlc3RzID0gdGVzdHMKKyhGcm96ZW5fRUxEZWZhdWx0VGVzdHMsCisgU291cmNlX0VMRGVmYXVsdHNUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQorCiAKICMjIyMjIE1ldGFQYXRoRmluZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KIGNsYXNzIE1ldGFQYXRoRmluZGVyRmluZE1vZHVsZVRlc3RzOgogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0zMTcsMTMgKzMyOSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydElzKGZvdW5kLCBzcGVjLmxvYWRlcikKIAogCi1Gcm96ZW5fTVBGRmluZE1vZHVsZVRlc3RzLCBTb3VyY2VfTVBGRmluZE1vZHVsZVRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIE1ldGFQYXRoRmluZGVyRmluZE1vZHVsZVRlc3RzLAotICAgICAgICBhYmM9KGZyb3plbl9hYmMsIHNvdXJjZV9hYmMpLAotICAgICAgICB1dGlsPShmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwpKQorKEZyb3plbl9NUEZGaW5kTW9kdWxlVGVzdHMsCisgU291cmNlX01QRkZpbmRNb2R1bGVUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKE1ldGFQYXRoRmluZGVyRmluZE1vZHVsZVRlc3RzLCBhYmM9YWJjLCB1dGlsPXV0aWwpCisKIAogIyMjIyMgUGF0aEVudHJ5RmluZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQogY2xhc3MgUGF0aEVudHJ5RmluZGVyRmluZExvYWRlclRlc3RzOgogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0zNjEsMTEgKzM3MiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGhzLCBmb3VuZFsxXSkKIAogCi1Gcm96ZW5fUEVGRmluZExvYWRlclRlc3RzLCBTb3VyY2VfUEVGRmluZExvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIFBhdGhFbnRyeUZpbmRlckZpbmRMb2FkZXJUZXN0cywKLSAgICAgICAgYWJjPShmcm96ZW5fYWJjLCBzb3VyY2VfYWJjKSwKLSAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSwKLSAgICAgICAgdXRpbD0oZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsKSkKKyhGcm96ZW5fUEVGRmluZExvYWRlclRlc3RzLAorIFNvdXJjZV9QRUZGaW5kTG9hZGVyVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChQYXRoRW50cnlGaW5kZXJGaW5kTG9hZGVyVGVzdHMsIGFiYz1hYmMsIHV0aWw9dXRpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKICMjIyMjIExvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0zODYsNyArMzk2LDcgQEAKICAgICBkZWYgdGVzdF9mcmVzaChzZWxmKToKICAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIoKQogICAgICAgICBuYW1lID0gJ2JsYWgnCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIuZm91bmQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbbmFtZV0sIG1vZHVsZSkKQEAgLTQwNCw3ICs0MTQsNyBAQAogICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlcikKICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICBmb3VuZCA9IGxvYWRlci5mb3VuZApAQCAtNDEyLDEwICs0MjIsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUsIHN5cy5tb2R1bGVzW25hbWVdKQogCiAKLUZyb3plbl9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMsIFNvdXJjZV9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKLSAgICAgICAgTG9hZGVyTG9hZE1vZHVsZVRlc3RzLAotICAgICAgICBhYmM9KGZyb3plbl9hYmMsIHNvdXJjZV9hYmMpLAotICAgICAgICB1dGlsPShmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwpKQorKEZyb3plbl9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMsCisgU291cmNlX0xvYWRlckxvYWRNb2R1bGVUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKExvYWRlckxvYWRNb2R1bGVUZXN0cywgYWJjPWFiYywgdXRpbD11dGlsKQogCiAKICMjIyMjIEluc3BlY3RMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC00NjEsMTEgKzQ3MCwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3RyaW5nPicpCiAKIAotY2xhc3MgRnJvemVuX0lMU291cmNlVG9Db2RlVGVzdHMoSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gRnJvemVuX0lMCi0KLWNsYXNzIFNvdXJjZV9JTFNvdXJjZVRvQ29kZVRlc3RzKEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorKEZyb3plbl9JTFNvdXJjZVRvQ29kZVRlc3RzLAorIFNvdXJjZV9JTFNvdXJjZVRvQ29kZVRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcz1TUExJVF9JTCkKIAogCiBjbGFzcyBJbnNwZWN0TG9hZGVyR2V0Q29kZVRlc3RzOgpAQCAtNDk1LDExICs1MDMsMTAgQEAKICAgICAgICAgICAgIGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCiAKIAotY2xhc3MgRnJvemVuX0lMR2V0Q29kZVRlc3RzKEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKLQotY2xhc3MgU291cmNlX0lMR2V0Q29kZVRlc3RzKEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKyhGcm96ZW5fSUxHZXRDb2RlVGVzdHMsCisgU291cmNlX0lMR2V0Q29kZVRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoSW5zcGVjdExvYWRlckdldENvZGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3M9U1BMSVRfSUwpCiAKIAogY2xhc3MgSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0czoKQEAgLTU0MywxMSArNTUwLDEwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZSwgc3lzLm1vZHVsZXNbc2VsZi5tb2R1bGVfbmFtZV0pCiAKIAotY2xhc3MgRnJvemVuX0lMTG9hZE1vZHVsZVRlc3RzKEluc3BlY3RMb2FkZXJMb2FkTW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKLQotY2xhc3MgU291cmNlX0lMTG9hZE1vZHVsZVRlc3RzKEluc3BlY3RMb2FkZXJMb2FkTW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKyhGcm96ZW5fSUxMb2FkTW9kdWxlVGVzdHMsCisgU291cmNlX0lMTG9hZE1vZHVsZVRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3M9U1BMSVRfSUwpCiAKIAogIyMjIyMgRXhlY3V0aW9uTG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTYwOCwxNSArNjE0LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQogCiAKLWNsYXNzIEZyb3plbl9FTEdldENvZGVUZXN0cyhFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBFeGVjdXRpb25Mb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9FTAotCi1jbGFzcyBTb3VyY2VfRUxHZXRDb2RlVGVzdHMoRXhlY3V0aW9uTG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfRUwKKyhGcm96ZW5fRUxHZXRDb2RlVGVzdHMsCisgU291cmNlX0VMR2V0Q29kZVRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoRXhlY3V0aW9uTG9hZGVyR2V0Q29kZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzPVNQTElUX0VMKQogCiAKICMjIyMjIFNvdXJjZUxvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1jbGFzcyBTb3VyY2VMb2FkZXI6CitjbGFzcyBTb3VyY2VPbmx5TG9hZGVyOgogCiAgICAgIyBHbG9iYWxzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgZm9yIGFsbCBtb2R1bGVzLgogICAgIHNvdXJjZSA9IChiIl8gPSAnOjonLmpvaW4oW19fbmFtZV9fLCBfX2ZpbGVfXywgX19jYWNoZWRfXywgX19wYWNrYWdlX18sICIKQEAgLTYzNywxMCArNjQyLDEwIEBACiAgICAgICAgIHJldHVybiAnPG1vZHVsZT4nCiAKIAotRnJvemVuX1NvdXJjZU9ubHlMLCBTb3VyY2VfU291cmNlT25seUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFNvdXJjZUxvYWRlcikKK1NQTElUX1NPTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoU291cmNlT25seUxvYWRlciwgJ1NvdXJjZUxvYWRlcicpCiAKIAotY2xhc3MgU291cmNlTG9hZGVyKFNvdXJjZUxvYWRlcik6CitjbGFzcyBTb3VyY2VMb2FkZXIoU291cmNlT25seUxvYWRlcik6CiAKICAgICBzb3VyY2VfbXRpbWUgPSAxCiAKQEAgLTY3NywxMSArNjgyLDcgQEAKICAgICAgICAgcmV0dXJuIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoCiAKIAotRnJvemVuX1NMLCBTb3VyY2VfU0wgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFNvdXJjZUxvYWRlcikKLUZyb3plbl9TTC51dGlsID0gZnJvemVuX3V0aWwKLVNvdXJjZV9TTC51dGlsID0gc291cmNlX3V0aWwKLUZyb3plbl9TTC5pbml0ID0gZnJvemVuX2luaXQKLVNvdXJjZV9TTC5pbml0ID0gc291cmNlX2luaXQKK1NQTElUX1NMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhTb3VyY2VMb2FkZXIsIHV0aWw9dXRpbCwgaW5pdD1pbml0KQogCiAKIGNsYXNzIFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzOgpAQCAtNzY1LDcgKzc2Niw3IEBACiAgICAgICAgICMgTG9hZGluZyBhIG1vZHVsZSBzaG91bGQgc2V0IF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywKICAgICAgICAgIyBfX3BhdGhfXyAoZm9yIHBhY2thZ2VzKSwgX19maWxlX18sIGFuZCBfX2NhY2hlZF9fLgogICAgICAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIGFsc28gYmUgcHV0IGludG8gc3lzLm1vZHVsZXMuCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6CisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCkBAIC03NzgsNyArNzc5LDcgQEAKICAgICAgICAgIyBpcyBhIHBhY2thZ2UuCiAgICAgICAgICMgVGVzdGluZyB0aGUgdmFsdWVzIGZvciBhIHBhY2thZ2UgYXJlIGNvdmVyZWQgYnkgdGVzdF9sb2FkX21vZHVsZS4KICAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6CiAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQpAQCAtNzk4LDEzICs3OTksMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKIAogCi1jbGFzcyBGcm96ZW5fU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAotICAgIHV0aWwgPSBmcm96ZW5fdXRpbAotCi1jbGFzcyBTb3VyY2VfU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9Tb3VyY2VPbmx5TAotICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorKEZyb3plbl9Tb3VyY2VPbmx5TG9hZGVyVGVzdHMsCisgU291cmNlX1NvdXJjZU9ubHlMb2FkZXJUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdXRpbD11dGlsLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcl9tb2NrPVNQTElUX1NPTCkKIAogCiBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAic3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgaXMgdHJ1ZSIpCkBAIC04OTYsMTUgKzg5NCwxMCBAQAogICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQogCiAKLWNsYXNzIEZyb3plbl9TTEJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGxvYWRlcl9tb2NrID0gRnJvemVuX1NMCi0gICAgaW5pdCA9IGZyb3plbl9pbml0Ci0gICAgdXRpbCA9IGZyb3plbl91dGlsCi0KLWNsYXNzIFNvdXJjZVNMQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VfU0wKLSAgICBpbml0ID0gc291cmNlX2luaXQKLSAgICB1dGlsID0gc291cmNlX3V0aWwKKyhGcm96ZW5fU0xCeXRlY29kZVRlc3RzLAorIFNvdXJjZVNMQnl0ZWNvZGVUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIGluaXQ9aW5pdCwgdXRpbD11dGlsLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcl9tb2NrPVNQTElUX1NMKQogCiAKIGNsYXNzIFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzOgpAQCAtOTQwLDExICs5MzMsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKIAogCi1jbGFzcyBGcm96ZW5fU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCi0KLWNsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TEdldFNvdXJjZVRlc3RzKFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgU291cmNlT25seUxvYWRlck1vY2sgPSBTb3VyY2VfU291cmNlT25seUwKKyhGcm96ZW5fU291cmNlT25seUxvYWRlckdldFNvdXJjZVRlc3RzLAorIFNvdXJjZV9Tb3VyY2VPbmx5TG9hZGVyR2V0U291cmNlVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VPbmx5TG9hZGVyTW9jaz1TUExJVF9TT0wpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hcGkucHkKaW5kZXggMmEyZDQyYi4uNmJjM2M1NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hcGkucHkKQEAgLTEsOCArMSw4IEBACi1mcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKIAotZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQotZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCi1mcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKK2luaXQgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK3V0aWwgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwpAQCAtMTgsOCArMTgsOCBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX2ltcG9ydChzZWxmKToKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6Ci0gICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICB3aXRoIHRlc3RfdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CisgICAgICAgICAgICB3aXRoIHRlc3RfdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICd0b3BfbGV2ZWwnKQogCkBAIC0yOCw4ICsyOCw4IEBACiAgICAgICAgIHBrZ19uYW1lID0gJ3BrZycKICAgICAgICAgcGtnX2xvbmdfbmFtZSA9ICd7MH0uX19pbml0X18nLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKLSAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgIHdpdGggdGVzdF91dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKQEAgLTQwLDE2ICs0MCwxNiBAQAogICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCiAgICAgICAgIGFic29sdXRlX25hbWUgPSAnezB9LnsxfScuZm9ybWF0KHBrZ19uYW1lLCBtb2R1bGVfbmFtZSkKICAgICAgICAgcmVsYXRpdmVfbmFtZSA9ICcuezB9Jy5mb3JtYXQobW9kdWxlX25hbWUpCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgYWJzb2x1dGVfbmFtZSkgYXMgbW9jazoKLSAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgIHdpdGggdGVzdF91dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBhYnNvbHV0ZV9uYW1lKSBhcyBtb2NrOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBhYnNvbHV0ZV9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGVlcF9yZWxhdGl2ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKLSAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgIHdpdGggdGVzdF91dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYScpCiAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCiAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy4uYycsICdhLmInKQpAQCAtNjEsOCArNjEsOCBAQAogICAgICAgICBwa2dfbmFtZSA9ICdwa2cnCiAgICAgICAgIHBrZ19sb25nX25hbWUgPSAnezB9Ll9faW5pdF9fJy5mb3JtYXQocGtnX25hbWUpCiAgICAgICAgIG5hbWUgPSAnezB9Lm1vZCcuZm9ybWF0KHBrZ19uYW1lKQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIG5hbWUpIGFzIG1vY2s6Ci0gICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICB3aXRoIHRlc3RfdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShwa2dfbmFtZSkKICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lLCBwa2dfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKQEAgLTg2LDE2ICs4NiwxNSBAQAogICAgICAgICAgICAgYl9sb2FkX2NvdW50ICs9IDEKICAgICAgICAgY29kZSA9IHsnYSc6IGxvYWRfYSwgJ2EuYic6IGxvYWRfYn0KICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmInXQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzLCBtb2R1bGVfY29kZT1jb2RlKSBhcyBtb2NrOgotICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzLCBtb2R1bGVfY29kZT1jb2RlKSBhcyBtb2NrOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJfbG9hZF9jb3VudCwgMSkKIAotY2xhc3MgRnJvemVuX0ltcG9ydE1vZHVsZVRlc3RzKEltcG9ydE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaW5pdCA9IGZyb3plbl9pbml0CiAKLWNsYXNzIFNvdXJjZV9JbXBvcnRNb2R1bGVUZXN0cyhJbXBvcnRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGluaXQgPSBzb3VyY2VfaW5pdAorKEZyb3plbl9JbXBvcnRNb2R1bGVUZXN0cywKKyBTb3VyY2VfSW1wb3J0TW9kdWxlVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChJbXBvcnRNb2R1bGVUZXN0cywgaW5pdD1pbml0KQogCiAKIGNsYXNzIEZpbmRMb2FkZXJUZXN0czoKQEAgLTEwNyw3ICsxMDYsNyBAQAogICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzKHNlbGYpOgogICAgICAgICAjIElmIGEgbW9kdWxlIHdpdGggX19sb2FkZXJfXyBpcyBpbiBzeXMubW9kdWxlcywgdGhlbiByZXR1cm4gaXQuCiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCkBAIC0xMjAsNyArMTE5LDcgQEAKICAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBJZiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fIGlzIE5vbmUsIHJhaXNlIFZhbHVlRXJyb3IuCiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQpAQCAtMTMzLDcgKzEzMiw3IEBACiAgICAgICAgICMgU2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKICAgICAgICAgIyBJc3N1ZSAjMTcwOTkKICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGVsIG1vZHVsZS5fX2xvYWRlcl9fCkBAIC0xNDgsOCArMTQ3LDggQEAKICAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgogICAgICAgICAjIFJldHVybiB0aGUgbG9hZGVyIGZvdW5kIG9uIHN5cy5tZXRhX3BhdGguCiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKICAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBOb25lKSwgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpKQpAQCAtMTU4LDggKzE1Nyw4IEBACiAgICAgICAgICMgU2VhcmNoaW5nIG9uIGEgcGF0aCBzaG91bGQgd29yay4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgcGF0aCA9ICdwYXRoIHRvIHNvbWUgcGxhY2UnCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKICAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBwYXRoKSwKQEAgLTE3MSwxMSArMTcwLDEwIEBACiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuaW5pdC5maW5kX2xvYWRlcignbmV2ZXJnb2luZ3RvZmluZHRoaXNtb2R1bGUnKSkKIAotY2xhc3MgRnJvemVuX0ZpbmRMb2FkZXJUZXN0cyhGaW5kTG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpbml0ID0gZnJvemVuX2luaXQKIAotY2xhc3MgU291cmNlX0ZpbmRMb2FkZXJUZXN0cyhGaW5kTG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpbml0ID0gc291cmNlX2luaXQKKyhGcm96ZW5fRmluZExvYWRlclRlc3RzLAorIFNvdXJjZV9GaW5kTG9hZGVyVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChGaW5kTG9hZGVyVGVzdHMsIGluaXQ9aW5pdCkKIAogCiBjbGFzcyBSZWxvYWRUZXN0czoKQEAgLTE5NSwxMCArMTkzLDEwIEBACiAgICAgICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ3RvcF9sZXZlbCcpCiAgICAgICAgICAgICBtb2R1bGUuc3BhbSA9IDMKICAgICAgICAgICAgIHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXSA9IG1vZHVsZQotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3RvcF9sZXZlbCc6IGNvZGV9KQorICAgICAgICBtb2NrID0gdGVzdF91dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eyd0b3BfbGV2ZWwnOiBjb2RlfSkKICAgICAgICAgd2l0aCBtb2NrOgotICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgndG9wX2xldmVsJykKICAgICAgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQobW9kdWxlKQogICAgICAgICAgICAgICAgIGFjdHVhbCA9IHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXQpAQCAtMjMwLDcgKzIyOCw3IEBACiAgICAgZGVmIHRlc3RfcmVsb2FkX2xvY2F0aW9uX2NoYW5nZWQoc2VsZik6CiAgICAgICAgIG5hbWUgPSAnc3BhbScKICAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKE5vbmUpIGFzIGN3ZDoKLSAgICAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdzcGFtJyk6CisgICAgICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKCdzcGFtJyk6CiAgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgoY3dkKToKICAgICAgICAgICAgICAgICAgICAgIyBTdGFydCBhcyBhIHBsYWluIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKQEAgLTI4MSw3ICsyNzksNyBAQAogICAgIGRlZiB0ZXN0X3JlbG9hZF9uYW1lc3BhY2VfY2hhbmdlZChzZWxmKToKICAgICAgICAgbmFtZSA9ICdzcGFtJwogICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgotICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NwYW0nKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUoJ3NwYW0nKToKICAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRGlyc09uU3lzUGF0aChjd2QpOgogICAgICAgICAgICAgICAgICAgICAjIFN0YXJ0IGFzIGEgbmFtZXNwYWNlIHBhY2thZ2UuCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCkBAIC0zMzgsMjAgKzMzNiwxNiBAQAogICAgICAgICAjIFNlZSAjMTk4NTEuCiAgICAgICAgIG5hbWUgPSAnc3BhbScKICAgICAgICAgc3VibmFtZSA9ICdoYW0nCi0gICAgICAgIHdpdGggdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKLSAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHRlc3RfdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKICAgICAgICAgICAgIGhhbSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKGZ1bGxuYW1lKQogICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKGhhbSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGhhbSkKIAogCi1jbGFzcyBGcm96ZW5fUmVsb2FkVGVzdHMoUmVsb2FkVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpbml0ID0gZnJvemVuX2luaXQKLSAgICB1dGlsID0gZnJvemVuX3V0aWwKLQotY2xhc3MgU291cmNlX1JlbG9hZFRlc3RzKFJlbG9hZFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaW5pdCA9IHNvdXJjZV9pbml0Ci0gICAgdXRpbCA9IHNvdXJjZV91dGlsCisoRnJvemVuX1JlbG9hZFRlc3RzLAorIFNvdXJjZV9SZWxvYWRUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKFJlbG9hZFRlc3RzLCBpbml0PWluaXQsIHV0aWw9dXRpbCkKIAogCiBjbGFzcyBJbnZhbGlkYXRlQ2FjaGVUZXN0czoKQEAgLTM4NCwxMSArMzc4LDEwIEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLl9fZGVsaXRlbV9fKGtleSkpCiAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpICAjIFNob3VsZG4ndCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbi4KIAotY2xhc3MgRnJvemVuX0ludmFsaWRhdGVDYWNoZVRlc3RzKEludmFsaWRhdGVDYWNoZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaW5pdCA9IGZyb3plbl9pbml0CiAKLWNsYXNzIFNvdXJjZV9JbnZhbGlkYXRlQ2FjaGVUZXN0cyhJbnZhbGlkYXRlQ2FjaGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGluaXQgPSBzb3VyY2VfaW5pdAorKEZyb3plbl9JbnZhbGlkYXRlQ2FjaGVUZXN0cywKKyBTb3VyY2VfSW52YWxpZGF0ZUNhY2hlVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChJbnZhbGlkYXRlQ2FjaGVUZXN0cywgaW5pdD1pbml0KQogCiAKIGNsYXNzIEZyb3plbkltcG9ydGxpYlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM5OCw2ICszOTEsNyBAQAogICAgICAgICAjIENhbid0IGRvIGFuIGlzaW5zdGFuY2UoKSBjaGVjayBzaW5jZSBzZXBhcmF0ZSBjb3BpZXMgb2YgaW1wb3J0bGliCiAgICAgICAgICMgbWF5IGhhdmUgYmVlbiB1c2VkIGZvciBpbXBvcnQsIHNvIGp1c3QgY2hlY2sgdGhlIG5hbWUgaXMgbm90IGZvciB0aGUKICAgICAgICAgIyBmcm96ZW4gbG9hZGVyLgorICAgICAgICBzb3VyY2VfaW5pdCA9IGluaXRbJ1NvdXJjZSddCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc291cmNlX2luaXQuX19sb2FkZXJfXy5fX2NsYXNzX18uX19uYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyb3plbkltcG9ydGVyJykKIApAQCAtNDI2LDExICs0MjAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fc3BlY19fLCBOb25lKQogCi1jbGFzcyBGcm96ZW5fU3RhcnR1cFRlc3RzKFN0YXJ0dXBUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKIAotY2xhc3MgU291cmNlX1N0YXJ0dXBUZXN0cyhTdGFydHVwVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisoRnJvemVuX1N0YXJ0dXBUZXN0cywKKyBTb3VyY2VfU3RhcnR1cFRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoU3RhcnR1cFRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xhenkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xhenkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MzODNjMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbGF6eS5weQpAQCAtMCwwICsxLDE0MyBAQAoraW1wb3J0IGltcG9ydGxpYgorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYworZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKKworCitjbGFzcyBDb2xsZWN0SW5pdDoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworCitjbGFzcyBMYXp5TG9hZGVyRmFjdG9yeVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIGZhY3RvcnkgPSB1dGlsLkxhenlMb2FkZXIuZmFjdG9yeShDb2xsZWN0SW5pdCkKKyAgICAgICAgIyBFLmcuIHdoYXQgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIGluc3RhbnRpYXRlcyBsb2FkZXJzIHdpdGgKKyAgICAgICAgIyBwbHVzIGtleXdvcmQgYXJndW1lbnRzLgorICAgICAgICBsYXp5X2xvYWRlciA9IGZhY3RvcnkoJ21vZHVsZSBuYW1lJywgJ21vZHVsZSBwYXRoJywga3c9J2t3JykKKyAgICAgICAgbG9hZGVyID0gbGF6eV9sb2FkZXIubG9hZGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdtb2R1bGUgbmFtZScsICdtb2R1bGUgcGF0aCcpLCBsb2FkZXIuYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7J2t3JzogJ2t3J30sIGxvYWRlci5rd2FyZ3MpCisKKyAgICBkZWYgdGVzdF92YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICAjIE5vIGV4ZWNfbW9kdWxlKCksIG5vIGxhenkgbG9hZGluZy4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdXRpbC5MYXp5TG9hZGVyLmZhY3Rvcnkob2JqZWN0KQorCisKK2NsYXNzIFRlc3RpbmdJbXBvcnRlcihhYmMuTWV0YVBhdGhGaW5kZXIsIGFiYy5Mb2FkZXIpOgorCisgICAgbW9kdWxlX25hbWUgPSAnbGF6eV9sb2FkZXJfdGVzdCcKKyAgICBtdXRhdGVkX25hbWUgPSAnY2hhbmdlZCcKKyAgICBsb2FkZWQgPSBOb25lCisgICAgc291cmNlX2NvZGUgPSAnYXR0ciA9IDQyOyBfX25hbWVfXyA9IHshcn0nLmZvcm1hdChtdXRhdGVkX25hbWUpCisKKyAgICBkZWYgZmluZF9zcGVjKHNlbGYsIG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgbmFtZSAhPSBzZWxmLm1vZHVsZV9uYW1lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHV0aWwuc3BlY19mcm9tX2xvYWRlcihuYW1lLCB1dGlsLkxhenlMb2FkZXIoc2VsZikpCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgZXhlYyhzZWxmLnNvdXJjZV9jb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYubG9hZGVkID0gbW9kdWxlCisKKworY2xhc3MgTGF6eUxvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICMgQ2xhc3NlcyB0aGF0IGRvbm8ndCBkZWZpbmUgZXhlY19tb2R1bGUoKSB0cmlnZ2VyIFR5cGVFcnJvci4KKyAgICAgICAgICAgIHV0aWwuTGF6eUxvYWRlcihvYmplY3QpCisKKyAgICBkZWYgbmV3X21vZHVsZShzZWxmLCBzb3VyY2VfY29kZT1Ob25lKToKKyAgICAgICAgbG9hZGVyID0gVGVzdGluZ0ltcG9ydGVyKCkKKyAgICAgICAgaWYgc291cmNlX2NvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb2FkZXIuc291cmNlX2NvZGUgPSBzb3VyY2VfY29kZQorICAgICAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fbG9hZGVyKFRlc3RpbmdJbXBvcnRlci5tb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLkxhenlMb2FkZXIobG9hZGVyKSkKKyAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIuY3JlYXRlX21vZHVsZShzcGVjKQorICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc3BlYy5sb2FkZXIKKyAgICAgICAgc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICAjIE1vZHVsZSBpcyBub3cgbGF6eS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyLmxvYWRlZCkKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIHRlc3RfZTJlKHNlbGYpOgorICAgICAgICAjIEVuZC10by1lbmQgdGVzdCB0byB2ZXJpZnkgdGhlIGxvYWQgaXMgaW4gZmFjdCBsYXp5LgorICAgICAgICBpbXBvcnRlciA9IFRlc3RpbmdJbXBvcnRlcigpCisgICAgICAgIGFzc2VydCBpbXBvcnRlci5sb2FkZWQgaXMgTm9uZQorICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKGltcG9ydGVyLm1vZHVsZV9uYW1lKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoaW1wb3J0ZXIubW9kdWxlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGltcG9ydGVyLmxvYWRlZCkKKyAgICAgICAgIyBUcmlnZ2VyIGxvYWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbG9hZGVyX18sIGltcG9ydGVyKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShpbXBvcnRlci5sb2FkZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLCBpbXBvcnRlci5sb2FkZWQpCisKKyAgICBkZWYgdGVzdF9hdHRyX3VuY2hhbmdlZChzZWxmKToKKyAgICAgICAgIyBBbiBhdHRyaWJ1dGUgb25seSBtdXRhdGVkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgaW1wb3J0IHNob3VsZCBub3QgYmUKKyAgICAgICAgIyBjaGFuZ2VkIG5lZWRsZXNzbHkuCisgICAgICAgIG1vZHVsZSA9IHNlbGYubmV3X21vZHVsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdGluZ0ltcG9ydGVyLm11dGF0ZWRfbmFtZSwgbW9kdWxlLl9fbmFtZV9fKQorCisgICAgZGVmIHRlc3RfbmV3X2F0dHIoc2VsZik6CisgICAgICAgICMgQSBuZXcgYXR0cmlidXRlIHNob3VsZCBwZXJzaXN0LgorICAgICAgICBtb2R1bGUgPSBzZWxmLm5ld19tb2R1bGUoKQorICAgICAgICBtb2R1bGUubmV3X2F0dHIgPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBtb2R1bGUubmV3X2F0dHIpCisKKyAgICBkZWYgdGVzdF9tdXRhdGVkX3ByZWV4aXN0aW5nX2F0dHIoc2VsZik6CisgICAgICAgICMgQ2hhbmdpbmcgYW4gYXR0cmlidXRlIHRoYXQgYWxyZWFkeSBleGlzdGVkIG9uIHRoZSBtb2R1bGUgLS0KKyAgICAgICAgIyBlLmcuIF9fbmFtZV9fIC0tIHNob3VsZCBwZXJzaXN0LgorICAgICAgICBtb2R1bGUgPSBzZWxmLm5ld19tb2R1bGUoKQorICAgICAgICBtb2R1bGUuX19uYW1lX18gPSAnYm9ndXMnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JvZ3VzJywgbW9kdWxlLl9fbmFtZV9fKQorCisgICAgZGVmIHRlc3RfbXV0YXRlZF9hdHRyKHNlbGYpOgorICAgICAgICAjIENoYW5naW5nIGFuIGF0dHJpYnV0ZSB0aGF0IGNvbWVzIGludG8gZXhpc3RlbmNlIGFmdGVyIGFuIGltcG9ydAorICAgICAgICAjIHNob3VsZCBwZXJzaXN0LgorICAgICAgICBtb2R1bGUgPSBzZWxmLm5ld19tb2R1bGUoKQorICAgICAgICBtb2R1bGUuYXR0ciA9IDYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBtb2R1bGUuYXR0cikKKworICAgIGRlZiB0ZXN0X2RlbGV0ZV9ldmVudHVhbF9hdHRyKHNlbGYpOgorICAgICAgICAjIERlbGV0aW5nIGFuIGF0dHJpYnV0ZSBzaG91bGQgc3RheSBkZWxldGVkLgorICAgICAgICBtb2R1bGUgPSBzZWxmLm5ld19tb2R1bGUoKQorICAgICAgICBkZWwgbW9kdWxlLmF0dHIKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ2F0dHInKSkKKworICAgIGRlZiB0ZXN0X2RlbGV0ZV9wcmVleGlzdGluZ19hdHRyKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBzZWxmLm5ld19tb2R1bGUoKQorICAgICAgICBkZWwgbW9kdWxlLl9fbmFtZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX25hbWVfXycpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3N1YnN0aXR1dGlvbl9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShUZXN0aW5nSW1wb3J0ZXIubW9kdWxlX25hbWUpOgorICAgICAgICAgICAgZnJlc2hfbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShUZXN0aW5nSW1wb3J0ZXIubW9kdWxlX25hbWUpCisgICAgICAgICAgICBzeXMubW9kdWxlc1tUZXN0aW5nSW1wb3J0ZXIubW9kdWxlX25hbWVdID0gZnJlc2hfbW9kdWxlCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm5ld19tb2R1bGUoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJzdWJzdGl0dXRlZCIpOgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX25hbWVfXworCisgICAgZGVmIHRlc3RfbW9kdWxlX2FscmVhZHlfaW5fc3lzKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKFRlc3RpbmdJbXBvcnRlci5tb2R1bGVfbmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm5ld19tb2R1bGUoKQorICAgICAgICAgICAgc3lzLm1vZHVsZXNbVGVzdGluZ0ltcG9ydGVyLm1vZHVsZV9uYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgIyBGb3JjZSB0aGUgbG9hZDsganVzdCBjYXJlIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgICAgICAgIG1vZHVsZS5fX25hbWVfXworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQppbmRleCBkYzk3YmExLi5kZjBhZjEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKQEAgLTEsNyArMSw2IEBACi1mcm9tIC4gaW1wb3J0IHV0aWwKLWZyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKLWZyb3plbl9ib290c3RyYXAgPSBmcm96ZW5faW5pdC5fYm9vdHN0cmFwCi1zb3VyY2VfYm9vdHN0cmFwID0gc291cmNlX2luaXQuX2Jvb3RzdHJhcAorZnJvbSAuIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAorCitpbml0ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCiAKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCkBAIC0zMiwxNCArMzEsMjAgQEAKICAgICAgICAgdGVzdF90aW1lb3V0ID0gTm9uZQogICAgICAgICAjIF9yZWxlYXNlX3NhdmUoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X3JlbGVhc2Vfc2F2ZV91bmFjcXVpcmVkID0gTm9uZQorICAgICAgICAjIGxvY2sgc3RhdHVzIGluIHJlcHIgdW5zdXBwb3J0ZWQKKyAgICAgICAgdGVzdF9yZXByID0gTm9uZQorICAgICAgICB0ZXN0X2xvY2tlZF9yZXByID0gTm9uZQogCi0gICAgY2xhc3MgRnJvemVuX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMoTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywgbG9ja190ZXN0cy5STG9ja1Rlc3RzKToKLSAgICAgICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisgICAgTE9DS19UWVBFUyA9IHtraW5kOiBzcGxpdGluaXQuX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworICAgICAgICAgICAgICAgICAgZm9yIGtpbmQsIHNwbGl0aW5pdCBpbiBpbml0Lml0ZW1zKCl9CiAKLSAgICBjbGFzcyBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLCBsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgotICAgICAgICBMb2NrVHlwZSA9IHNvdXJjZV9ib290c3RyYXAuX01vZHVsZUxvY2sKLQorICAgIChGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgU291cmNlX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMKKyAgICAgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywgbG9ja190ZXN0cy5STG9ja1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NrVHlwZT1MT0NLX1RZUEVTKQogZWxzZToKKyAgICBMT0NLX1RZUEVTID0ge30KKwogICAgIGNsYXNzIEZyb3plbl9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcGFzcwogCkBAIC00Nyw3OCArNTIsOTQgQEAKICAgICAgICAgcGFzcwogCiAKLWNsYXNzIERlYWRsb2NrQXZvaWRhbmNlVGVzdHM6CitpZiB0aHJlYWRpbmcgaXMgbm90IE5vbmU6CisgICAgY2xhc3MgRGVhZGxvY2tBdm9pZGFuY2VUZXN0czoKIAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5vbGRfc3dpdGNoaW50ZXJ2YWwgPSBzeXMuZ2V0c3dpdGNoaW50ZXJ2YWwoKQotICAgICAgICAgICAgc3lzLnNldHN3aXRjaGludGVydmFsKDAuMDAwMDAxKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLm9sZF9zd2l0Y2hpbnRlcnZhbCA9IE5vbmUKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vbGRfc3dpdGNoaW50ZXJ2YWwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwoc2VsZi5vbGRfc3dpdGNoaW50ZXJ2YWwpCi0KLSAgICBkZWYgcnVuX2RlYWRsb2NrX2F2b2lkYW5jZV90ZXN0KHNlbGYsIGNyZWF0ZV9kZWFkbG9jayk6Ci0gICAgICAgIE5MT0NLUyA9IDEwCi0gICAgICAgIGxvY2tzID0gW3NlbGYuTG9ja1R5cGUoc3RyKGkpKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQotICAgICAgICBwYWlycyA9IFsobG9ja3NbaV0sIGxvY2tzWyhpKzEpJU5MT0NLU10pIGZvciBpIGluIHJhbmdlKE5MT0NLUyldCi0gICAgICAgIGlmIGNyZWF0ZV9kZWFkbG9jazoKLSAgICAgICAgICAgIE5USFJFQURTID0gTkxPQ0tTCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBOVEhSRUFEUyA9IE5MT0NLUyAtIDEKLSAgICAgICAgYmFycmllciA9IHRocmVhZGluZy5CYXJyaWVyKE5USFJFQURTKQotICAgICAgICByZXN1bHRzID0gW10KLSAgICAgICAgZGVmIF9hY3F1aXJlKGxvY2spOgotICAgICAgICAgICAgIiIiVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2suIFJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIEZhbHNlIG9uIGRlYWRsb2NrLiIiIgorICAgICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxmLkRlYWRsb2NrRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5vbGRfc3dpdGNoaW50ZXJ2YWwgPSBzeXMuZ2V0c3dpdGNoaW50ZXJ2YWwoKQorICAgICAgICAgICAgICAgIHN5cy5zZXRzd2l0Y2hpbnRlcnZhbCgwLjAwMDAwMSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLm9sZF9zd2l0Y2hpbnRlcnZhbCA9IE5vbmUKKworICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLm9sZF9zd2l0Y2hpbnRlcnZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwoc2VsZi5vbGRfc3dpdGNoaW50ZXJ2YWwpCisKKyAgICAgICAgZGVmIHJ1bl9kZWFkbG9ja19hdm9pZGFuY2VfdGVzdChzZWxmLCBjcmVhdGVfZGVhZGxvY2spOgorICAgICAgICAgICAgTkxPQ0tTID0gMTAKKyAgICAgICAgICAgIGxvY2tzID0gW3NlbGYuTG9ja1R5cGUoc3RyKGkpKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQorICAgICAgICAgICAgcGFpcnMgPSBbKGxvY2tzW2ldLCBsb2Nrc1soaSsxKSVOTE9DS1NdKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQorICAgICAgICAgICAgaWYgY3JlYXRlX2RlYWRsb2NrOgorICAgICAgICAgICAgICAgIE5USFJFQURTID0gTkxPQ0tTCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGRlZiBmKCk6Ci0gICAgICAgICAgICBhLCBiID0gcGFpcnMucG9wKCkKLSAgICAgICAgICAgIHJhID0gX2FjcXVpcmUoYSkKLSAgICAgICAgICAgIGJhcnJpZXIud2FpdCgpCi0gICAgICAgICAgICByYiA9IF9hY3F1aXJlKGIpCi0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgocmEsIHJiKSkKLSAgICAgICAgICAgIGlmIHJiOgotICAgICAgICAgICAgICAgIGIucmVsZWFzZSgpCi0gICAgICAgICAgICBpZiByYToKLSAgICAgICAgICAgICAgICBhLnJlbGVhc2UoKQotICAgICAgICBsb2NrX3Rlc3RzLkJ1bmNoKGYsIE5USFJFQURTKS53YWl0X2Zvcl9maW5pc2hlZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHMpLCBOVEhSRUFEUykKLSAgICAgICAgcmV0dXJuIHJlc3VsdHMKKyAgICAgICAgICAgICAgICBOVEhSRUFEUyA9IE5MT0NLUyAtIDEKKyAgICAgICAgICAgIGJhcnJpZXIgPSB0aHJlYWRpbmcuQmFycmllcihOVEhSRUFEUykKKyAgICAgICAgICAgIHJlc3VsdHMgPSBbXQogCi0gICAgZGVmIHRlc3RfZGVhZGxvY2soc2VsZik6Ci0gICAgICAgIHJlc3VsdHMgPSBzZWxmLnJ1bl9kZWFkbG9ja19hdm9pZGFuY2VfdGVzdChUcnVlKQotICAgICAgICAjIEF0IGxlYXN0IG9uZSBvZiB0aGUgdGhyZWFkcyBkZXRlY3RlZCBhIHBvdGVudGlhbCBkZWFkbG9jayBvbiBpdHMKLSAgICAgICAgIyBzZWNvbmQgYWNxdWlyZSgpIGNhbGwuICBJdCBtYXkgYmUgc2V2ZXJhbCBvZiB0aGVtLCBiZWNhdXNlIHRoZQotICAgICAgICAjIGRlYWRsb2NrIGF2b2lkYW5jZSBtZWNoYW5pc20gaXMgY29uc2VydmF0aXZlLgotICAgICAgICBuYl9kZWFkbG9ja3MgPSByZXN1bHRzLmNvdW50KChUcnVlLCBGYWxzZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG5iX2RlYWRsb2NrcywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLmNvdW50KChUcnVlLCBUcnVlKSksIGxlbihyZXN1bHRzKSAtIG5iX2RlYWRsb2NrcykKKyAgICAgICAgICAgIGRlZiBfYWNxdWlyZShsb2NrKToKKyAgICAgICAgICAgICAgICAiIiJUcnkgdG8gYWNxdWlyZSB0aGUgbG9jay4gUmV0dXJuIFRydWUgb24gc3VjY2VzcywKKyAgICAgICAgICAgICAgICBGYWxzZSBvbiBkZWFkbG9jay4iIiIKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNlbGYuRGVhZGxvY2tFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgIGRlZiB0ZXN0X25vX2RlYWRsb2NrKHNlbGYpOgotICAgICAgICByZXN1bHRzID0gc2VsZi5ydW5fZGVhZGxvY2tfYXZvaWRhbmNlX3Rlc3QoRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgRmFsc2UpKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLmNvdW50KChUcnVlLCBUcnVlKSksIGxlbihyZXN1bHRzKSkKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgYSwgYiA9IHBhaXJzLnBvcCgpCisgICAgICAgICAgICAgICAgcmEgPSBfYWNxdWlyZShhKQorICAgICAgICAgICAgICAgIGJhcnJpZXIud2FpdCgpCisgICAgICAgICAgICAgICAgcmIgPSBfYWNxdWlyZShiKQorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKChyYSwgcmIpKQorICAgICAgICAgICAgICAgIGlmIHJiOgorICAgICAgICAgICAgICAgICAgICBiLnJlbGVhc2UoKQorICAgICAgICAgICAgICAgIGlmIHJhOgorICAgICAgICAgICAgICAgICAgICBhLnJlbGVhc2UoKQorICAgICAgICAgICAgbG9ja190ZXN0cy5CdW5jaChmLCBOVEhSRUFEUykud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0cyksIE5USFJFQURTKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCi1jbGFzcyBGcm96ZW5fRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyhEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCi0gICAgRGVhZGxvY2tFcnJvciA9IGZyb3plbl9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKKyAgICAgICAgZGVmIHRlc3RfZGVhZGxvY2soc2VsZik6CisgICAgICAgICAgICByZXN1bHRzID0gc2VsZi5ydW5fZGVhZGxvY2tfYXZvaWRhbmNlX3Rlc3QoVHJ1ZSkKKyAgICAgICAgICAgICMgQXQgbGVhc3Qgb25lIG9mIHRoZSB0aHJlYWRzIGRldGVjdGVkIGEgcG90ZW50aWFsIGRlYWRsb2NrIG9uIGl0cworICAgICAgICAgICAgIyBzZWNvbmQgYWNxdWlyZSgpIGNhbGwuICBJdCBtYXkgYmUgc2V2ZXJhbCBvZiB0aGVtLCBiZWNhdXNlIHRoZQorICAgICAgICAgICAgIyBkZWFkbG9jayBhdm9pZGFuY2UgbWVjaGFuaXNtIGlzIGNvbnNlcnZhdGl2ZS4KKyAgICAgICAgICAgIG5iX2RlYWRsb2NrcyA9IHJlc3VsdHMuY291bnQoKFRydWUsIEZhbHNlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG5iX2RlYWRsb2NrcywgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgVHJ1ZSkpLCBsZW4ocmVzdWx0cykgLSBuYl9kZWFkbG9ja3MpCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQotY2xhc3MgU291cmNlX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHMoRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIExvY2tUeXBlID0gc291cmNlX2Jvb3RzdHJhcC5fTW9kdWxlTG9jawotICAgIERlYWRsb2NrRXJyb3IgPSBzb3VyY2VfYm9vdHN0cmFwLl9EZWFkbG9ja0Vycm9yCisgICAgICAgIGRlZiB0ZXN0X25vX2RlYWRsb2NrKHNlbGYpOgorICAgICAgICAgICAgcmVzdWx0cyA9IHNlbGYucnVuX2RlYWRsb2NrX2F2b2lkYW5jZV90ZXN0KEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLmNvdW50KChUcnVlLCBGYWxzZSkpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLmNvdW50KChUcnVlLCBUcnVlKSksIGxlbihyZXN1bHRzKSkKKworCisgICAgREVBRExPQ0tfRVJST1JTID0ge2tpbmQ6IHNwbGl0aW5pdC5fYm9vdHN0cmFwLl9EZWFkbG9ja0Vycm9yCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBraW5kLCBzcGxpdGluaXQgaW4gaW5pdC5pdGVtcygpfQorCisgICAgKEZyb3plbl9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAorICAgICBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cworICAgICApID0gdGVzdF91dGlsLnRlc3RfYm90aChEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NrVHlwZT1MT0NLX1RZUEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWFkbG9ja0Vycm9yPURFQURMT0NLX0VSUk9SUykKK2Vsc2U6CisgICAgREVBRExPQ0tfRVJST1JTID0ge30KKworICAgIGNsYXNzIEZyb3plbl9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworCisgICAgY2xhc3MgU291cmNlX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBwYXNzCiAKIAogY2xhc3MgTGlmZXRpbWVUZXN0czoKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBib290c3RyYXAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmluaXQuX2Jvb3RzdHJhcAorCiAgICAgZGVmIHRlc3RfbG9ja19saWZldGltZShzZWxmKToKICAgICAgICAgbmFtZSA9ICJ4eXp6eSIKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQpAQCAtMTM1LDExICsxNTYsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKIAotY2xhc3MgRnJvemVuX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKIAotY2xhc3MgU291cmNlX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKKyhGcm96ZW5fTGlmZXRpbWVUZXN0cywKKyBTb3VyY2VfTGlmZXRpbWVUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKExpZmV0aW1lVGVzdHMsIGluaXQ9aW5pdCkKIAogCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfc3BlYy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfc3BlYy5weQppbmRleCA3MTU0MWY2Li44YjMzM2U4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9zcGVjLnB5CkBAIC0xLDEwICsxLDggQEAKLWZyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAogCi1mcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCi1mcm96ZW5fYm9vdHN0cmFwID0gZnJvemVuX2luaXQuX2Jvb3RzdHJhcAotc291cmNlX2Jvb3RzdHJhcCA9IHNvdXJjZV9pbml0Ll9ib290c3RyYXAKLWZyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQotZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCitpbml0ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCittYWNoaW5lcnkgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCit1dGlsID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKIAogaW1wb3J0IG9zLnBhdGgKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBDbGVhbkltcG9ydApAQCAtMzYsNiArMzQsOSBAQAogICAgIGRlZiBfaXNfcGFja2FnZShzZWxmLCBuYW1lKToKICAgICAgICAgcmV0dXJuIHNlbGYucGFja2FnZQogCisgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgIHJldHVybiBOb25lCisKIAogY2xhc3MgTmV3TG9hZGVyKFRlc3RMb2FkZXIpOgogCkBAIC01Miw2ICs1Myw4IEBACiAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKIAorICAgICAgICBmcm96ZW5fdXRpbCA9IHV0aWxbJ0Zyb3plbiddCisKICAgICAgICAgQGZyb3plbl91dGlsLm1vZHVsZV9mb3JfbG9hZGVyCiAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgogICAgICAgICAgICAgbW9kdWxlLmhhbSA9IHNlbGYuSEFNCkBAIC0yMjEsMTggKzIyNCwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMuY2FjaGVkLCAnc3BhbS5weWMnKQogCiAKLWNsYXNzIEZyb3plbl9Nb2R1bGVTcGVjVGVzdHMoTW9kdWxlU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgdXRpbCA9IGZyb3plbl91dGlsCi0gICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQotCi0KLWNsYXNzIFNvdXJjZV9Nb2R1bGVTcGVjVGVzdHMoTW9kdWxlU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgdXRpbCA9IHNvdXJjZV91dGlsCi0gICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorKEZyb3plbl9Nb2R1bGVTcGVjVGVzdHMsCisgU291cmNlX01vZHVsZVNwZWNUZXN0cworICkgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKE1vZHVsZVNwZWNUZXN0cywgdXRpbD11dGlsLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGNsYXNzIE1vZHVsZVNwZWNNZXRob2RzVGVzdHM6CiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYm9vdHN0cmFwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbml0Ll9ib290c3RyYXAKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCiAgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JwpAQCAtMjQzLDE1MiArMjQ1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgpCiAgICAgICAgIHNlbGYubG9jX3NwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKIAotICAgICMgaW5pdF9tb2R1bGVfYXR0cnMKLQotICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzKHNlbGYpOgotICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQotICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQotICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCi0KLSAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19wYWNrYWdlKHNlbGYpOgotICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQotICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQotICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gWydzcGFtJywgJ2hhbSddCi0gICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fcGF0aF9fLCBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKLQotICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2xvY2F0aW9uKHNlbGYpOgotICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQotICAgICAgICBzcGVjID0gc2VsZi5sb2Nfc3BlYwotICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIHNwZWMub3JpZ2luKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzcGVjLm9yaWdpbikpCi0KLSAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19kaWZmZXJlbnRfbmFtZShzZWxmKToKLSAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCdlZ2dzJykKLSAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKLSAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQotCi0gICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfZGlmZmVyZW50X3NwZWMoc2VsZik6Ci0gICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCi0gICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2VnZ3MnLCBvYmplY3QoKSkKLSAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKLSAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQotICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKLQotICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2FscmVhZHlfc2V0KHNlbGYpOgotICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ2hhbS5lZ2dzJykKLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBvYmplY3QoKQotICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnaGFtJwotICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJ2VnZ3MnXQotICAgICAgICBtb2R1bGUuX19maWxlX18gPSAnaGFtL2VnZ3MvX19pbml0X18ucHknCi0gICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1vZHVsZS5fX2ZpbGVfXykKLSAgICAgICAgb3JpZ2luYWwgPSB2YXJzKG1vZHVsZSkuY29weSgpCi0gICAgICAgIHNwZWMgPSBzZWxmLmxvY19zcGVjCi0gICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbJyddCi0gICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgb3JpZ2luYWxbJ19fbG9hZGVyX18nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG9yaWdpbmFsWydfX3BhY2thZ2VfXyddKQotICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3BhdGhfXywgb3JpZ2luYWxbJ19fcGF0aF9fJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBvcmlnaW5hbFsnX19maWxlX18nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19jYWNoZWRfXywgb3JpZ2luYWxbJ19fY2FjaGVkX18nXSkKLQotICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2ltbXV0YWJsZShzZWxmKToKLSAgICAgICAgbW9kdWxlID0gb2JqZWN0KCkKLSAgICAgICAgc3BlYyA9IHNlbGYubG9jX3NwZWMKLSAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFsnJ10KLSAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKLQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19uYW1lX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCi0KLSAgICAjIGNyZWF0ZSgpCi0KLSAgICBkZWYgdGVzdF9jcmVhdGUoc2VsZik6Ci0gICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fcGF0aF9fJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19maWxlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2NhY2hlZF9fJykpCi0KLSAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9sb2FkZXIoc2VsZik6Ci0gICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKSgpCi0gICAgICAgIGNsYXNzIENyZWF0aW5nTG9hZGVyKFRlc3RMb2FkZXIpOgotICAgICAgICAgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQotICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gQ3JlYXRpbmdMb2FkZXIoKQotICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKLQotICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQsIG1vZHVsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19wYXRoX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2ZpbGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fY2FjaGVkX18nKSkKLQotICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xvYWRlcl9ub3RfaGFuZGxlZChzZWxmKToKLSAgICAgICAgY2xhc3MgQ3JlYXRpbmdMb2FkZXIoVGVzdExvYWRlcik6Ci0gICAgICAgICAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gQ3JlYXRpbmdMb2FkZXIoKQotICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQotICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19zcGVjX18sIHNlbGYuc3BlYykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX3BhdGhfXycpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fZmlsZV9fJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19jYWNoZWRfXycpKQotCiAgICAgIyBleGVjKCkKIAogICAgIGRlZiB0ZXN0X2V4ZWMoc2VsZik6CiAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQotICAgICAgICBtb2R1bGUgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorICAgICAgICBtb2R1bGUgPSBzZWxmLnV0aWwubW9kdWxlX2Zyb21fc3BlYyhzZWxmLnNwZWMpCiAgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubmFtZV0gPSBtb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ2VnZ3MnKSkKLSAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhtb2R1bGUpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9leGVjKHNlbGYuc3BlYywgbW9kdWxlKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmVnZ3MsIDEpCiAKQEAgLTM5Nyw3ICsyNjEsNyBAQAogICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6CiAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQogICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKLSAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX2xvYWQoc2VsZi5zcGVjKQogICAgICAgICAgICAgaW5zdGFsbGVkID0gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZWdncywgMSkKQEAgLTQxMCw3ICsyNzQsNyBAQAogICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZS5fX25hbWVfX10gPSByZXBsYWNlbWVudAogICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gUmVwbGFjaW5nTG9hZGVyKCkKICAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6Ci0gICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9sb2FkKHNlbGYuc3BlYykKICAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQogCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLCByZXBsYWNlbWVudCkKQEAgLTQyMyw3ICsyODcsNyBAQAogICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gRmFpbGVkTG9hZGVyKCkKICAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX2xvYWQoc2VsZi5zcGVjKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzZWxmLnNwZWMubmFtZSwgc3lzLm1vZHVsZXMpCiAKICAgICBkZWYgdGVzdF9sb2FkX2ZhaWxlZF9yZW1vdmVkKHNlbGYpOgpAQCAtNDM0LDIwICsyOTgsMjAgQEAKICAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEZhaWxlZExvYWRlcigpCiAgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9sb2FkKHNlbGYuc3BlYykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5zcGVjLm5hbWUsIHN5cy5tb2R1bGVzKQogCiAgICAgZGVmIHRlc3RfbG9hZF9sZWdhY3koc2VsZik6CiAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQogICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKLSAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX2xvYWQoc2VsZi5zcGVjKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmhhbSwgLTEpCiAKICAgICBkZWYgdGVzdF9sb2FkX2xlZ2FjeV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTGVnYWN5TG9hZGVyKCkKICAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6Ci0gICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9sb2FkKHNlbGYuc3BlYykKIAogICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKQEAgLTQ2MSw3ICszMjUsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKICAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEltbXV0YWJsZUxvYWRlcigpCiAgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgotICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fbG9hZChzZWxmLnNwZWMpCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdLCBtb2R1bGUpCiAKQEAgLTQ3MCw4ICszMzQsOCBAQAogICAgIGRlZiB0ZXN0X3JlbG9hZChzZWxmKToKICAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCiAgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgotICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCi0gICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX2xvYWQoc2VsZi5zcGVjKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fZXhlYyhzZWxmLnNwZWMsIGxvYWRlZCkKICAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCkBAIC00ODEsOSArMzQ1LDkgQEAKICAgICBkZWYgdGVzdF9yZWxvYWRfbW9kaWZpZWQoc2VsZik6CiAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQogICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKLSAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX2xvYWQoc2VsZi5zcGVjKQogICAgICAgICAgICAgbG9hZGVkLmVnZ3MgPSAyCi0gICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fZXhlYyhzZWxmLnNwZWMsIGxvYWRlZCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQogICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCkBAIC00OTEsOSArMzU1LDkgQEAKICAgICBkZWYgdGVzdF9yZWxvYWRfZXh0cmFfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCiAgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgotICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fbG9hZChzZWxmLnNwZWMpCiAgICAgICAgICAgICBsb2FkZWQuYXZhaWxhYmxlID0gRmFsc2UKLSAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9leGVjKHNlbGYuc3BlYywgbG9hZGVkKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9hZGVkLmF2YWlsYWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQpAQCAtNTAxLDEyICszNjUsMTIgQEAKICAgICBkZWYgdGVzdF9yZWxvYWRfaW5pdF9tb2R1bGVfYXR0cnMoc2VsZik6CiAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQogICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKLSAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX2xvYWQoc2VsZi5zcGVjKQogICAgICAgICAgICAgbG9hZGVkLl9fbmFtZV9fID0gJ2hhbScKICAgICAgICAgICAgIGRlbCBsb2FkZWQuX19sb2FkZXJfXwogICAgICAgICAgICAgZGVsIGxvYWRlZC5fX3BhY2thZ2VfXwogICAgICAgICAgICAgZGVsIGxvYWRlZC5fX3NwZWNfXwotICAgICAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisgICAgICAgICAgICBzZWxmLmJvb3RzdHJhcC5fZXhlYyhzZWxmLnNwZWMsIGxvYWRlZCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCkBAIC01MTksOCArMzgzLDggQEAKICAgICBkZWYgdGVzdF9yZWxvYWRfbGVnYWN5KHNlbGYpOgogICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTGVnYWN5TG9hZGVyKCkKICAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6Ci0gICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKLSAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fbG9hZChzZWxmLnNwZWMpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9leGVjKHNlbGYuc3BlYywgbG9hZGVkKQogICAgICAgICAgICAgaW5zdGFsbGVkID0gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuaGFtLCAtMSkKQEAgLTUyOCwyMCArMzkyLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zdGFsbGVkLCBsb2FkZWQpCiAKIAotY2xhc3MgRnJvemVuX01vZHVsZVNwZWNNZXRob2RzVGVzdHMoTW9kdWxlU3BlY01ldGhvZHNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKLSAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5Ci0gICAgdXRpbCA9IGZyb3plbl91dGlsCi0KLQotY2xhc3MgU291cmNlX01vZHVsZVNwZWNNZXRob2RzVGVzdHMoTW9kdWxlU3BlY01ldGhvZHNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKLSAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5Ci0gICAgdXRpbCA9IHNvdXJjZV91dGlsCisoRnJvemVuX01vZHVsZVNwZWNNZXRob2RzVGVzdHMsCisgU291cmNlX01vZHVsZVNwZWNNZXRob2RzVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChNb2R1bGVTcGVjTWV0aG9kc1Rlc3RzLCBpbml0PWluaXQsIHV0aWw9dXRpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGNsYXNzIE1vZHVsZVJlcHJUZXN0czoKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBib290c3RyYXAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmluaXQuX2Jvb3RzdHJhcAorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLm1vZHVsZSA9IHR5cGUob3MpKCdzcGFtJykKICAgICAgICAgc2VsZi5zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnc3BhbScsIFRlc3RMb2FkZXIoKSkKQEAgLTYyNSwxNiArNDg3LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfT4nLmZvcm1hdCgnc3BhbScpKQogCiAKLWNsYXNzIEZyb3plbl9Nb2R1bGVSZXByVGVzdHMoTW9kdWxlUmVwclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAotICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKLSAgICB1dGlsID0gZnJvemVuX3V0aWwKLQotCi1jbGFzcyBTb3VyY2VfTW9kdWxlUmVwclRlc3RzKE1vZHVsZVJlcHJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKLSAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5Ci0gICAgdXRpbCA9IHNvdXJjZV91dGlsCisoRnJvemVuX01vZHVsZVJlcHJUZXN0cywKKyBTb3VyY2VfTW9kdWxlUmVwclRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoTW9kdWxlUmVwclRlc3RzLCBpbml0PWluaXQsIHV0aWw9dXRpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGNsYXNzIEZhY3RvcnlUZXN0czoKQEAgLTc4NywxMyArNjQzLDE0IEBACiAgICAgIyBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbigpCiAKICAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9kZWZhdWx0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLm1hY2hpbmVyeSBpcyBzb3VyY2VfbWFjaGluZXJ5OgotICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ25vdCBzdXJlIHdoeSB0aGlzIGlzIGJyZWFraW5nLi4uJykKICAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICAjIE5lZWQgdG8gdXNlIGEgY2lyY3VpdG91cyByb3V0ZSB0byBnZXQgYXQgaW1wb3J0bGliLm1hY2hpbmVyeSB0byBtYWtlCisgICAgICAgICMgc3VyZSB0aGUgc2FtZSBjbGFzcyBvYmplY3QgaXMgdXNlZCBpbiB0aGUgaXNpbnN0YW5jZSgpIGNoZWNrIGFzCisgICAgICAgICMgd291bGQgaGF2ZSBiZWVuIHVzZWQgdG8gY3JlYXRlIHRoZSBsb2FkZXIuCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzcGVjLmxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwuYWJjLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLm5hbWUsIHNlbGYubmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlci5wYXRoLCBzZWxmLnBhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKQEAgLTk0NywxMSArODA0LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKIAogCi1jbGFzcyBGcm96ZW5fRmFjdG9yeVRlc3RzKEZhY3RvcnlUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIHV0aWwgPSBmcm96ZW5fdXRpbAotICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyhGcm96ZW5fRmFjdG9yeVRlc3RzLAorIFNvdXJjZV9GYWN0b3J5VGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChGYWN0b3J5VGVzdHMsIHV0aWw9dXRpbCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCi1jbGFzcyBTb3VyY2VfRmFjdG9yeVRlc3RzKEZhY3RvcnlUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIHV0aWwgPSBzb3VyY2VfdXRpbAotICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKaW5kZXggYjI4MjNjNi4uNjk0NjZiMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQpAQCAtMSwxMCArMSwxMSBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKLWZyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQotZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKLWZyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCitmcm9tIC4gaW1wb3J0IHV0aWwKK2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCitpbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKK2ltcG9ydGxpYl91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCiAKIGltcG9ydCBvcworaW1wb3J0IHN0cmluZwogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdHlwZXMKQEAgLTMyLDggKzMzLDk0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oW3NlbGYuc291cmNlLCBzZWxmLnNvdXJjZV0pKQogCi1Gcm96ZW5fRGVjb2RlU291cmNlQnl0ZXNUZXN0cywgU291cmNlX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAotICAgICAgICBEZWNvZGVTb3VyY2VCeXRlc1Rlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisoRnJvemVuX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMsCisgU291cmNlX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoRGVjb2RlU291cmNlQnl0ZXNUZXN0cywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworCitjbGFzcyBNb2R1bGVGcm9tU3BlY1Rlc3RzOgorCisgICAgZGVmIHRlc3Rfbm9fY3JlYXRlX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygndGVzdCcsIExvYWRlcigpKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdhbHdheXMnKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi51dGlsLm1vZHVsZV9mcm9tX3NwZWMoc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4odykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2NyZWF0ZV9tb2R1bGUnLCBzdHIod1swXS5tZXNzYWdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHVsZSwgdHlwZXMuTW9kdWxlVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9tb2R1bGVfcmV0dXJuc19Ob25lKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXIoc2VsZi5hYmMuTG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCd0ZXN0JywgTG9hZGVyKCkpCisgICAgICAgIG1vZHVsZSA9IHNlbGYudXRpbC5tb2R1bGVfZnJvbV9zcGVjKHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2FscmVhZHkgc2V0JworICAgICAgICBjbGFzcyBDdXN0b21Nb2R1bGUodHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIExvYWRlcihzZWxmLmFiYy5Mb2FkZXIpOgorICAgICAgICAgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gQ3VzdG9tTW9kdWxlKHNwZWMubmFtZSkKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19uYW1lX18gPSBuYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygndGVzdCcsIExvYWRlcigpKQorICAgICAgICBtb2R1bGUgPSBzZWxmLnV0aWwubW9kdWxlX2Zyb21fc3BlYyhzcGVjKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLCBDdXN0b21Nb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBuYW1lKQorCisgICAgZGVmIHRlc3RfX19uYW1lX18oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCd0ZXN0Jywgb2JqZWN0KCkpCisgICAgICAgIG1vZHVsZSA9IHNlbGYudXRpbC5tb2R1bGVfZnJvbV9zcGVjKHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisKKyAgICBkZWYgdGVzdF9fX3NwZWNfXyhzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3Rlc3QnLCBvYmplY3QoKSkKKyAgICAgICAgbW9kdWxlID0gc2VsZi51dGlsLm1vZHVsZV9mcm9tX3NwZWMoc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19zcGVjX18sIHNwZWMpCisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBvYmplY3QoKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygndGVzdCcsIGxvYWRlcikKKyAgICAgICAgbW9kdWxlID0gc2VsZi51dGlsLm1vZHVsZV9mcm9tX3NwZWMoc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgbG9hZGVyKQorCisgICAgZGVmIHRlc3RfX19wYWNrYWdlX18oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCd0ZXN0LnBrZycsIG9iamVjdCgpKQorICAgICAgICBtb2R1bGUgPSBzZWxmLnV0aWwubW9kdWxlX2Zyb21fc3BlYyhzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisKKyAgICBkZWYgdGVzdF9fX3BhdGhfXyhzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3Rlc3QnLCBvYmplY3QoKSwgaXNfcGFja2FnZT1UcnVlKQorICAgICAgICBtb2R1bGUgPSBzZWxmLnV0aWwubW9kdWxlX2Zyb21fc3BlYyhzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhdGhfXywgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucykKKworICAgIGRlZiB0ZXN0X19fZmlsZV9fKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygndGVzdCcsIG9iamVjdCgpLCBvcmlnaW49J3NvbWUvcGF0aCcpCisgICAgICAgIHNwZWMuaGFzX2xvY2F0aW9uID0gVHJ1ZQorICAgICAgICBtb2R1bGUgPSBzZWxmLnV0aWwubW9kdWxlX2Zyb21fc3BlYyhzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc3BlYy5vcmlnaW4pCisKKyAgICBkZWYgdGVzdF9fX2NhY2hlZF9fKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygndGVzdCcsIG9iamVjdCgpKQorICAgICAgICBzcGVjLmNhY2hlZCA9ICdzb21lL3BhdGgnCisgICAgICAgIHNwZWMuaGFzX2xvY2F0aW9uID0gVHJ1ZQorICAgICAgICBtb2R1bGUgPSBzZWxmLnV0aWwubW9kdWxlX2Zyb21fc3BlYyhzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBzcGVjLmNhY2hlZCkKKworKEZyb3plbl9Nb2R1bGVGcm9tU3BlY1Rlc3RzLAorIFNvdXJjZV9Nb2R1bGVGcm9tU3BlY1Rlc3RzCispID0gdXRpbC50ZXN0X2JvdGgoTW9kdWxlRnJvbVNwZWNUZXN0cywgYWJjPWFiYywgbWFjaGluZXJ5PW1hY2hpbmVyeSwKKyAgICAgICAgICAgICAgICAgICB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGNsYXNzIE1vZHVsZUZvckxvYWRlclRlc3RzOgpAQCAtNzAsNyArMTU3LDcgQEAKICAgICAgICAgIyBUZXN0IHRoYXQgd2hlbiBubyBtb2R1bGUgZXhpc3RzIGluIHN5cy5tb2R1bGVzIGEgbmV3IG1vZHVsZSBpcwogICAgICAgICAjIGNyZWF0ZWQuCiAgICAgICAgIG1vZHVsZV9uYW1lID0gJ2EuYi5jJwotICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG1vZHVsZV9uYW1lKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobW9kdWxlX25hbWUpOgogICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5yZXR1cm5fbW9kdWxlKG1vZHVsZV9uYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpCkBAIC04OCw3ICsxNzUsNyBAQAogICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdhLmIuYycpCiAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gNDIKICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gNDIKLSAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgbG9hZGVyID0gRmFrZUxvYWRlcigpCiAgICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKQEAgLTEwMCw3ICsxODcsNyBAQAogICAgICAgICAjIFRlc3QgdGhhdCBhIG1vZHVsZSBpcyByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMgaWYgYWRkZWQgYnV0IGFuCiAgICAgICAgICMgZXhjZXB0aW9uIGlzIHJhaXNlZC4KICAgICAgICAgbmFtZSA9ICdhLmIuYycKLSAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzZWxmLnJhaXNlX2V4Y2VwdGlvbihuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzeXMubW9kdWxlcykKIApAQCAtMTA4LDcgKzE5NSw3IEBACiAgICAgICAgICMgVGVzdCB0aGF0IGEgZmFpbHVyZSBvbiByZWxvYWQgbGVhdmVzIHRoZSBtb2R1bGUgaW4tcGxhY2UuCiAgICAgICAgIG5hbWUgPSAnYS5iLmMnCiAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKLSAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgc2VsZi5yYWlzZV9leGNlcHRpb24obmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLCBzeXMubW9kdWxlc1tuYW1lXSkKQEAgLTEyNyw3ICsyMTQsNyBAQAogCiAgICAgICAgIG5hbWUgPSAnbW9kJwogICAgICAgICBtb2R1bGUgPSBGYWxzZU1vZHVsZShuYW1lKQotICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9kdWxlKQogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKICAgICAgICAgICAgIGdpdmVuID0gc2VsZi5yZXR1cm5fbW9kdWxlKG5hbWUpCkBAIC0xNDYsNyArMjMzLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCiAKICAgICAgICAgbmFtZSA9ICdwa2cubW9kJwotICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIGxvYWRlciA9IEZha2VMb2FkZXIoRmFsc2UpCiAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBuYW1lKQpAQCAtMTU0LDE1ICsyNDEsMTcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAncGtnJykKIAogICAgICAgICBuYW1lID0gJ3BrZy5zdWInCi0gICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgbG9hZGVyID0gRmFrZUxvYWRlcihUcnVlKQogICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBuYW1lKQogCi1Gcm96ZW5fTW9kdWxlRm9yTG9hZGVyVGVzdHMsIFNvdXJjZV9Nb2R1bGVGb3JMb2FkZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIE1vZHVsZUZvckxvYWRlclRlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisoRnJvemVuX01vZHVsZUZvckxvYWRlclRlc3RzLAorIFNvdXJjZV9Nb2R1bGVGb3JMb2FkZXJUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChNb2R1bGVGb3JMb2FkZXJUZXN0cywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKIAogCiBjbGFzcyBTZXRQYWNrYWdlVGVzdHM6CkBAIC0yMjIsMTggKzMxMSwyNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19uYW1lX18sIGZ4bi5fX25hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fcXVhbG5hbWVfXywgZnhuLl9fcXVhbG5hbWVfXykKIAotRnJvemVuX1NldFBhY2thZ2VUZXN0cywgU291cmNlX1NldFBhY2thZ2VUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIFNldFBhY2thZ2VUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKKworKEZyb3plbl9TZXRQYWNrYWdlVGVzdHMsCisgU291cmNlX1NldFBhY2thZ2VUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChTZXRQYWNrYWdlVGVzdHMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKIAogY2xhc3MgU2V0TG9hZGVyVGVzdHM6CiAKICAgICAiIiJUZXN0cyBpbXBvcnRsaWIudXRpbC5zZXRfbG9hZGVyKCkuIiIiCiAKLSAgICBjbGFzcyBEdW1teUxvYWRlcjoKLSAgICAgICAgQHV0aWwuc2V0X2xvYWRlcgotICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBEdW1teUxvYWRlcihzZWxmKToKKyAgICAgICAgIyBTZXQgRHVtbXlMb2FkZXIgb24gdGhlIGNsYXNzIGxhemlseS4KKyAgICAgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgICAgICBAc2VsZi51dGlsLnNldF9sb2FkZXIKKyAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQorICAgICAgICBzZWxmLl9fY2xhc3NfXy5EdW1teUxvYWRlciA9IER1bW15TG9hZGVyCisgICAgICAgIHJldHVybiBEdW1teUxvYWRlcgogCiAgICAgZGVmIHRlc3Rfbm9fYXR0cmlidXRlKHNlbGYpOgogICAgICAgICBsb2FkZXIgPSBzZWxmLkR1bW15TG9hZGVyKCkKQEAgLTI2MiwxNyArMzU4LDEwIEBACiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGxvYWRlci5sb2FkX21vZHVsZSgnYmxhaCcpLl9fbG9hZGVyX18pCiAKLWNsYXNzIEZyb3plbl9TZXRMb2FkZXJUZXN0cyhTZXRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGNsYXNzIER1bW15TG9hZGVyOgotICAgICAgICBAZnJvemVuX3V0aWwuc2V0X2xvYWRlcgotICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQogCi1jbGFzcyBTb3VyY2VfU2V0TG9hZGVyVGVzdHMoU2V0TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBjbGFzcyBEdW1teUxvYWRlcjoKLSAgICAgICAgQHNvdXJjZV91dGlsLnNldF9sb2FkZXIKLSAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKyhGcm96ZW5fU2V0TG9hZGVyVGVzdHMsCisgU291cmNlX1NldExvYWRlclRlc3RzCisgKSA9IHV0aWwudGVzdF9ib3RoKFNldExvYWRlclRlc3RzLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGNsYXNzIFJlc29sdmVOYW1lVGVzdHM6CkBAIC0zMDcsOSArMzk2LDEwIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0nKQogCi1Gcm96ZW5fUmVzb2x2ZU5hbWVUZXN0cywgU291cmNlX1Jlc29sdmVOYW1lVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAotICAgICAgICBSZXNvbHZlTmFtZVRlc3RzLAotICAgICAgICB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisoRnJvemVuX1Jlc29sdmVOYW1lVGVzdHMsCisgU291cmNlX1Jlc29sdmVOYW1lVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoUmVzb2x2ZU5hbWVUZXN0cywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKIAogCiBjbGFzcyBGaW5kU3BlY1Rlc3RzOgpAQCAtMzIwLDcgKzQxMCw3IEBACiAKICAgICBkZWYgdGVzdF9zeXNfbW9kdWxlcyhzZWxmKToKICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKLSAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJwogICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgbG9hZGVyKQpAQCAtMzMyLDcgKzQyMiw3IEBACiAKICAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc193aXRob3V0X19fbG9hZGVyX18oc2VsZik6CiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCi0gICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgZGVsIG1vZHVsZS5fX2xvYWRlcl9fCiAgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJwpAQCAtMzQ0LDcgKzQzNCw3IEBACiAKICAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19zcGVjX2lzX05vbmUoc2VsZik6CiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCi0gICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gTm9uZQogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKQEAgLTM1Myw3ICs0NDMsNyBAQAogCiAgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfbG9hZGVyX2lzX05vbmUoc2VsZik6CiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCi0gICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgTm9uZSkKICAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKQEAgLTM2Myw3ICs0NTMsNyBAQAogCiAgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfc3BlY19pc19ub3Rfc2V0KHNlbGYpOgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwotICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkZWwgbW9kdWxlLl9fc3BlY19fCkBAIC0zNzUsMjAgKzQ2NSwxMSBAQAogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKLSAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIE5vbmUsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lKSkKIAotIyAgICBkZWYgdGVzdF9zdWNjZXNzX3BhdGgoc2VsZik6Ci0jICAgICAgICAjIFNlYXJjaGluZyBvbiBhIHBhdGggc2hvdWxkIHdvcmsuCi0jICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwotIyAgICAgICAgcGF0aCA9ICdwYXRoIHRvIHNvbWUgcGxhY2UnCi0jICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgotIyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKLSMgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCwgTm9uZSksCi0jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lLCBwYXRoKSkKLQogICAgIGRlZiB0ZXN0X25vdGhpbmcoc2VsZik6CiAgICAgICAgICMgTm9uZSBpcyByZXR1cm5lZCB1cG9uIGZhaWx1cmUgdG8gZmluZCBhIGxvYWRlci4KICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi51dGlsLmZpbmRfc3BlYygnbmV2ZXJnb2luZ3RvZmluZHRoaXNtb2R1bGUnKSkKQEAgLTM5Niw4ICs0NzcsOCBAQAogICAgIGRlZiB0ZXN0X2ZpbmRfc3VibW9kdWxlKHNlbGYpOgogICAgICAgICBuYW1lID0gJ3NwYW0nCiAgICAgICAgIHN1Ym5hbWUgPSAnaGFtJwotICAgICAgICB3aXRoIHRlc3RfdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKLSAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdGVzdF91dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICB3aXRoIHV0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHV0aWwuc3VibW9kdWxlKG5hbWUsIHN1Ym5hbWUsIHBrZ19kaXIpCiAgICAgICAgICAgICBzcGVjID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3BlYywgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKQEAgLTQwOSw5ICs0OTAsOSBAQAogICAgIGRlZiB0ZXN0X2ZpbmRfc3VibW9kdWxlX3BhcmVudF9hbHJlYWR5X2ltcG9ydGVkKHNlbGYpOgogICAgICAgICBuYW1lID0gJ3NwYW0nCiAgICAgICAgIHN1Ym5hbWUgPSAnaGFtJwotICAgICAgICB3aXRoIHRlc3RfdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKKyAgICAgICAgd2l0aCB1dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgogICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdGVzdF91dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB1dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQogICAgICAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHNwZWMsIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCkBAIC00MjMsOCArNTA0LDggQEAKICAgICBkZWYgdGVzdF9maW5kX3JlbGF0aXZlX21vZHVsZShzZWxmKToKICAgICAgICAgbmFtZSA9ICdzcGFtJwogICAgICAgICBzdWJuYW1lID0gJ2hhbScKLSAgICAgICAgd2l0aCB0ZXN0X3V0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6Ci0gICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHRlc3RfdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKKyAgICAgICAgd2l0aCB1dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB1dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQogICAgICAgICAgICAgcmVsbmFtZSA9ICcuJyArIHN1Ym5hbWUKICAgICAgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuZmluZF9zcGVjKHJlbG5hbWUsIG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHNwZWMsIE5vbmUpCkBAIC00MzcsOCArNTE4LDggQEAKICAgICBkZWYgdGVzdF9maW5kX3JlbGF0aXZlX21vZHVsZV9taXNzaW5nX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIG5hbWUgPSAnc3BhbScKICAgICAgICAgc3VibmFtZSA9ICdoYW0nCi0gICAgICAgIHdpdGggdGVzdF91dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgotICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB0ZXN0X3V0aWwuc3VibW9kdWxlKG5hbWUsIHN1Ym5hbWUsIHBrZ19kaXIpCisgICAgICAgIHdpdGggdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKKyAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKICAgICAgICAgICAgIHJlbG5hbWUgPSAnLicgKyBzdWJuYW1lCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMocmVsbmFtZSkKQEAgLTQ0NiwxNSArNTI3LDEwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZ1bGxuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQogCiAKLWNsYXNzIEZyb3plbl9GaW5kU3BlY1Rlc3RzKEZpbmRTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpbml0ID0gZnJvemVuX2luaXQKLSAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5Ci0gICAgdXRpbCA9IGZyb3plbl91dGlsCi0KLWNsYXNzIFNvdXJjZV9GaW5kU3BlY1Rlc3RzKEZpbmRTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpbml0ID0gc291cmNlX2luaXQKLSAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5Ci0gICAgdXRpbCA9IHNvdXJjZV91dGlsCisoRnJvemVuX0ZpbmRTcGVjVGVzdHMsCisgU291cmNlX0ZpbmRTcGVjVGVzdHMKKyApID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywgaW5pdD1pbml0LCB1dGlsPWltcG9ydGxpYl91dGlsLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogY2xhc3MgTWFnaWNOdW1iZXJUZXN0czoKQEAgLTQ2Nyw4ICs1NDMsMTAgQEAKICAgICAgICAgIyBUaGUgbWFnaWMgbnVtYmVyIHVzZXMgXHJcbiB0byBjb21lIG91dCB3cm9uZyB3aGVuIHNwbGl0dGluZyBvbiBsaW5lcy4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudXRpbC5NQUdJQ19OVU1CRVIuZW5kc3dpdGgoYidcclxuJykpCiAKLUZyb3plbl9NYWdpY051bWJlclRlc3RzLCBTb3VyY2VfTWFnaWNOdW1iZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCi0gICAgICAgIE1hZ2ljTnVtYmVyVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCisKKyhGcm96ZW5fTWFnaWNOdW1iZXJUZXN0cywKKyBTb3VyY2VfTWFnaWNOdW1iZXJUZXN0cworICkgPSB1dGlsLnRlc3RfYm90aChNYWdpY051bWJlclRlc3RzLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGNsYXNzIFBFUDMxNDdUZXN0czoKQEAgLTQ4NSw3ICs1NjMsOCBAQAogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQogICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBvcHRpbWl6YXRpb249JycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCkKIAogICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX25vX2NhY2hlX3RhZyhzZWxmKToKICAgICAgICAgIyBObyBjYWNoZSB0YWcgbWVhbnMgTm90SW1wbGVtZW50ZWRFcnJvci4KQEAgLTQ5OCw0MyArNTc3LDEwMyBAQAogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28uYmFyJywgJ2ZpbGUnKQogICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2Zvby5iYXInLCAnX19weWNhY2hlX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGV7fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIG9wdGltaXphdGlvbj0nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KQogCi0gICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3B0aW1pemVkKHNlbGYpOgotICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKLSAgICAgICAgIyBkZWZpbmVkIC5weW8gZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2VfZGVidWdfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgICMgR2l2ZW4gdGhlIHBhdGggdG8gYSAucHkgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIGl0cyBQRVAgMzE0Ny9QRVAgNDg4CisgICAgICAgICMgZGVmaW5lZCAucHljIGZpbGUgKGkuZS4gdW5kZXIgX19weWNhY2hlX18pLgogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQotICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHlvJy5mb3JtYXQoc2VsZi50YWcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBGYWxzZSksIGV4cGVjdCkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgb3B0aW1pemF0aW9uPTEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBvcHRpbWl6YXRpb249JycpKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgRmFsc2UpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpCiAKICAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9jd2Qoc2VsZik6CiAgICAgICAgIHBhdGggPSAnZm9vLnB5JwogICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ19fcHljYWNoZV9fJywgJ2Zvby57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIG9wdGltaXphdGlvbj0nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KQogCiAgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3ZlcnJpZGUoc2VsZik6CiAgICAgICAgICMgV2hlbiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgaXQgY2FuIGJlIGFueSB0cnVlLWlzaCBvciBmYWxzZS1pc2gKICAgICAgICAgIyB2YWx1ZS4KICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXoucHknKQotICAgICAgICBwYXJ0aWFsX2V4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdfX3B5Y2FjaGVfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXoue30ucHknLmZvcm1hdChzZWxmLnRhZykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFtdKSwgcGFydGlhbF9leHBlY3QgKyAnbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFsxN10pLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxfZXhwZWN0ICsgJ2MnKQogICAgICAgICAjIEhvd2V2ZXIgaWYgdGhlIGJvb2wtaXNobmVzcyBjYW4ndCBiZSBkZXRlcm1pbmVkLCB0aGUgZXhjZXB0aW9uCiAgICAgICAgICMgcHJvcGFnYXRlcy4KICAgICAgICAgY2xhc3MgQmVhcmlzaDoKICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKLSAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnL2Zvby9iYXIvYmF6LnB5JywgQmVhcmlzaCgpKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBvcHRpbWl6YXRpb249MSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBbMTddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIG9wdGltaXphdGlvbj0nJykpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCcvZm9vL2Jhci9iYXoucHknLCBCZWFyaXNoKCkpCisKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX29wdGltaXphdGlvbl9lbXB0eV9zdHJpbmcoc2VsZik6CisgICAgICAgICMgU2V0dGluZyAnb3B0aW1pemF0aW9uJyB0byAnJyBsZWFkcyB0byBubyBvcHRpbWl6YXRpb24gdGFnIChQRVAgNDg4KS4KKyAgICAgICAgcGF0aCA9ICdmb28ucHknCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignX19weWNhY2hlX18nLCAnZm9vLnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgb3B0aW1pemF0aW9uPScnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9vcHRpbWl6YXRpb25fTm9uZShzZWxmKToKKyAgICAgICAgIyBTZXR0aW5nICdvcHRpbWl6YXRpb24nIHRvIE5vbmUgdXNlcyB0aGUgaW50ZXJwcmV0ZXIncyBvcHRpbWl6YXRpb24uCisgICAgICAgICMgKFBFUCA0ODgpCisgICAgICAgIHBhdGggPSAnZm9vLnB5JworICAgICAgICBvcHRpbWl6YXRpb25fbGV2ZWwgPSBzeXMuZmxhZ3Mub3B0aW1pemUKKyAgICAgICAgYWxtb3N0X2V4cGVjdCA9IG9zLnBhdGguam9pbignX19weWNhY2hlX18nLCAnZm9vLnt9Jy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBpZiBvcHRpbWl6YXRpb25fbGV2ZWwgPT0gMDoKKyAgICAgICAgICAgIGV4cGVjdCA9IGFsbW9zdF9leHBlY3QgKyAnLnB5YycKKyAgICAgICAgZWxpZiBvcHRpbWl6YXRpb25fbGV2ZWwgPD0gMjoKKyAgICAgICAgICAgIGV4cGVjdCA9IGFsbW9zdF9leHBlY3QgKyAnLm9wdC17fS5weWMnLmZvcm1hdChvcHRpbWl6YXRpb25fbGV2ZWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAneyFyfSBpcyBhIG5vbi1zdGFuZGFyZCBvcHRpbWl6YXRpb24gbGV2ZWwnLmZvcm1hdChvcHRpbWl6YXRpb25fbGV2ZWwpCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgb3B0aW1pemF0aW9uPU5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX29wdGltaXphdGlvbl9zZXQoc2VsZik6CisgICAgICAgICMgVGhlICdvcHRpbWl6YXRpb24nIHBhcmFtZXRlciBhY2NlcHRzIGFueXRoaW5nIHRoYXQgaGFzIGEgc3RyaW5nIHJlcHIKKyAgICAgICAgIyB0aGF0IHBhc3NlcyBzdHIuYWxudW0oKS4KKyAgICAgICAgcGF0aCA9ICdmb28ucHknCisgICAgICAgIHZhbGlkX2NoYXJhY3RlcnMgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMKKyAgICAgICAgYWxtb3N0X2V4cGVjdCA9IG9zLnBhdGguam9pbignX19weWNhY2hlX18nLCAnZm9vLnt9Jy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBnb3QgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgb3B0aW1pemF0aW9uPXZhbGlkX2NoYXJhY3RlcnMpCisgICAgICAgICMgVGVzdCBhbGwgdmFsaWQgY2hhcmFjdGVycyBhcmUgYWNjZXB0ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgIGFsbW9zdF9leHBlY3QgKyAnLm9wdC17fS5weWMnLmZvcm1hdCh2YWxpZF9jaGFyYWN0ZXJzKSkKKyAgICAgICAgIyBzdHIoKSBzaG91bGQgYmUgY2FsbGVkIG9uIGFyZ3VtZW50LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBvcHRpbWl6YXRpb249NDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFsbW9zdF9leHBlY3QgKyAnLm9wdC00Mi5weWMnKQorICAgICAgICAjIEludmFsaWQgY2hhcmFjdGVycyByYWlzZSBWYWx1ZUVycm9yLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIG9wdGltaXphdGlvbj0ncGF0aC9pcy9iYWQnKQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2VfZGVidWdfb3ZlcnJpZGVfb3B0aW1pemF0aW9uX2JvdGhfc2V0KHNlbGYpOgorICAgICAgICAjIENhbiBvbmx5IHNldCBvbmUgb2YgdGhlIG9wdGltaXphdGlvbi1yZWxhdGVkIHBhcmFtZXRlcnMuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsIEZhbHNlLCBvcHRpbWl6YXRpb249JycpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5zZXAgPT0gJ1xcJyBhbmQgb3MuYWx0c2VwID09ICcvJywKICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG1lYW5pbmdmdWwgb25seSB3aGVyZSBvcy5hbHRzZXAgaXMgZGVmaW5lZCcpCiAgICAgZGVmIHRlc3Rfc2VwX2FsdHNlcF9hbmRfc2VwX2NhY2hlX2Zyb21fc291cmNlKHNlbGYpOgogICAgICAgICAjIFdpbmRvd3MgcGF0aCBhbmQgUEVQIDMxNDcgd2hlcmUgc2VwIGlzIHJpZ2h0IG9mIGFsdHNlcC4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnXFxmb29cXGJhclxcYmF6L3F1eC5weScsIFRydWUpLAorICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdcXGZvb1xcYmFyXFxiYXovcXV4LnB5Jywgb3B0aW1pemF0aW9uPScnKSwKICAgICAgICAgICAgICdcXGZvb1xcYmFyXFxiYXpcXF9fcHljYWNoZV9fXFxxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBub3QgTm9uZSwKQEAgLTU3Miw3ICs3MTEsMTIgQEAKICAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJ19fcHljYWNoZV9fL2Zvby5weWMnKQogCiAgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfdG9vX21hbnlfZG90cyhzZWxmKToKLSAgICAgICAgIyBUb28gbWFueSBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSgKKyAgICAgICAgICAgICAgICAgICAgJ19fcHljYWNoZV9fL2Zvby5jcHl0aG9uLTMyLm9wdC0xLmZvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm90X29wdChzZWxmKToKKyAgICAgICAgIyBOb24tYG9wdC1gIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCiAgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCiAgICAgICAgICAgICAnX19weWNhY2hlX18vZm9vLmNweXRob24tMzIuZm9vLnB5YycpCkBAIC01ODMsOSArNzI3LDIxIEBACiAgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCiAgICAgICAgICAgICAnL2Zvby9iYXIvZm9vLmNweXRob24tMzIuZm9vLnB5YycpCiAKLUZyb3plbl9QRVAzMTQ3VGVzdHMsIFNvdXJjZV9QRVAzMTQ3VGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAotICAgICAgICBQRVAzMTQ3VGVzdHMsCi0gICAgICAgIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfb3B0aW1pemVkX2J5dGVjb2RlKHNlbGYpOgorICAgICAgICAjIE9wdGltaXplZCBieXRlY29kZSBpcyBub3QgYW4gaXNzdWUuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ19fcHljYWNoZV9fJywgJ2Zvby57fS5vcHQtMS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpLCAnZm9vLnB5JykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX21pc3Npbmdfb3B0aW1pemF0aW9uKHNlbGYpOgorICAgICAgICAjIEFuIGVtcHR5IG9wdGltaXphdGlvbiBsZXZlbCBpcyBhIG5vLW5vLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdfX3B5Y2FjaGVfXycsICdmb28ue30ub3B0LS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUocGF0aCkKKworCisoRnJvemVuX1BFUDMxNDdUZXN0cywKKyBTb3VyY2VfUEVQMzE0N1Rlc3RzCisgKSA9IHV0aWwudGVzdF9ib3RoKFBFUDMxNDdUZXN0cywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF93aW5kb3dzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF93aW5kb3dzLnB5CmluZGV4IDk2YjRhZGMuLmM4OTNiY2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfd2luZG93cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3dpbmRvd3MucHkKQEAgLTEsMTQgKzEsNjQgQEAKLWZyb20gLiBpbXBvcnQgdXRpbAotZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCittYWNoaW5lcnkgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCiAKK2ltcG9ydCBvcworaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCitmcm9tIC51dGlsIGltcG9ydCB0ZW1wX21vZHVsZQorCitzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3dpbnJlZycsIHJlcXVpcmVkX29uPVsnd2luJ10pCitmcm9tIHdpbnJlZyBpbXBvcnQgKAorICAgIENyZWF0ZUtleSwgSEtFWV9DVVJSRU5UX1VTRVIsCisgICAgU2V0VmFsdWUsIFJFR19TWiwgS0VZX0FMTF9BQ0NFU1MsCisgICAgRW51bUtleSwgQ2xvc2VLZXksIERlbGV0ZUtleSwgT3BlbktleQorKQorCitkZWYgZGVsZXRlX3JlZ2lzdHJ5X3RyZWUocm9vdCwgc3Via2V5KToKKyAgICB0cnk6CisgICAgICAgIGhrZXkgPSBPcGVuS2V5KHJvb3QsIHN1YmtleSwgYWNjZXNzPUtFWV9BTExfQUNDRVNTKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAjIHN1YmtleSBkb2VzIG5vdCBleGlzdAorICAgICAgICByZXR1cm4KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJzdWJrZXkgPSBFbnVtS2V5KGhrZXksIDApCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBubyBtb3JlIHN1YmtleXMKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGRlbGV0ZV9yZWdpc3RyeV90cmVlKGhrZXksIHN1YnN1YmtleSkKKyAgICBDbG9zZUtleShoa2V5KQorICAgIERlbGV0ZUtleShyb290LCBzdWJrZXkpCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHNldHVwX21vZHVsZShtYWNoaW5lcnksIG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgaWYgbWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlci5ERUJVR19CVUlMRDoKKyAgICAgICAgcm9vdCA9IG1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXIuUkVHSVNUUllfS0VZX0RFQlVHCisgICAgZWxzZToKKyAgICAgICAgcm9vdCA9IG1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXIuUkVHSVNUUllfS0VZCisgICAga2V5ID0gcm9vdC5mb3JtYXQoZnVsbG5hbWU9bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBzeXNfdmVyc2lvbj1zeXMudmVyc2lvbls6M10pCisgICAgdHJ5OgorICAgICAgICB3aXRoIHRlbXBfbW9kdWxlKG5hbWUsICJhID0gMSIpIGFzIGxvY2F0aW9uOgorICAgICAgICAgICAgc3Via2V5ID0gQ3JlYXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCBrZXkpCisgICAgICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcGF0aCA9IGxvY2F0aW9uICsgIi5weSIKKyAgICAgICAgICAgIFNldFZhbHVlKHN1YmtleSwgIiIsIFJFR19TWiwgcGF0aCkKKyAgICAgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgaWYgbWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlci5ERUJVR19CVUlMRDoKKyAgICAgICAgICAgIGtleSA9IG9zLnBhdGguZGlybmFtZShrZXkpCisgICAgICAgIGRlbGV0ZV9yZWdpc3RyeV90cmVlKEhLRVlfQ1VSUkVOVF9VU0VSLCBrZXkpCiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLCAncmVxdWlyZXMgV2luZG93cycpCiBjbGFzcyBXaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0czoKLQotICAgICMgWFhYIE5lZWQgYSB0ZXN0IHRoYXQgZmluZHMgdGhlIHNwZWMgdmlhIHRoZSByZWdpc3RyeS4KKyAgICAjIFRoZSBtb2R1bGUgbmFtZSBpcyBwcm9jZXNzLXNwZWNpZmljLCBhbGxvd2luZyBmb3IKKyAgICAjIHNpbXVsdGFuZW91cyBydW5zIG9mIHRoZSBzYW1lIHRlc3Qgb24gYSBzaW5nbGUgbWFjaGluZS4KKyAgICB0ZXN0X21vZHVsZSA9ICJzcGFtaGFte30iLmZvcm1hdChvcy5nZXRwaWQoKSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfc3BlY19taXNzaW5nKHNlbGYpOgogICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyLmZpbmRfc3BlYygnc3BhbScpCkBAIC0xOCwxMiArNjgsNDIgQEAKICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyLmZpbmRfbW9kdWxlKCdzcGFtJykKICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIE5vbmUpCiAKKyAgICBkZWYgdGVzdF9tb2R1bGVfZm91bmQoc2VsZik6CisgICAgICAgIHdpdGggc2V0dXBfbW9kdWxlKHNlbGYubWFjaGluZXJ5LCBzZWxmLnRlc3RfbW9kdWxlKToKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlci5maW5kX21vZHVsZShzZWxmLnRlc3RfbW9kdWxlKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlci5maW5kX3NwZWMoc2VsZi50ZXN0X21vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9hZGVyLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzcGVjLCBOb25lKQogCi1jbGFzcyBGcm96ZW5fV2luZG93c1JlZ2lzdHJ5RmluZGVyVGVzdHMoV2luZG93c1JlZ2lzdHJ5RmluZGVyVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICBkZWYgdGVzdF9tb2R1bGVfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICB3aXRoIHNldHVwX21vZHVsZShzZWxmLm1hY2hpbmVyeSwgc2VsZi50ZXN0X21vZHVsZSwgcGF0aD0iLiIpOgorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyLmZpbmRfbW9kdWxlKHNlbGYudGVzdF9tb2R1bGUpCisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyLmZpbmRfc3BlYyhzZWxmLnRlc3RfbW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKIAorKEZyb3plbl9XaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cywKKyBTb3VyY2VfV2luZG93c1JlZ2lzdHJ5RmluZGVyVGVzdHMKKyApID0gdGVzdF91dGlsLnRlc3RfYm90aChXaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotY2xhc3MgU291cmNlX1dpbmRvd3NSZWdpc3RyeUZpbmRlclRlc3RzKFdpbmRvd3NSZWdpc3RyeUZpbmRlclRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksICdyZXF1aXJlcyBXaW5kb3dzJykKK2NsYXNzIFdpbmRvd3NFeHRlbnNpb25TdWZmaXhUZXN0czoKKyAgICBkZWYgdGVzdF90YWdnZWRfc3VmZml4KHNlbGYpOgorICAgICAgICBzdWZmaXhlcyA9IHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUworICAgICAgICBleHBlY3RlZF90YWcgPSAiLmNwezAubWFqb3J9ezAubWlub3J9LXsxfS5weWQiLmZvcm1hdChzeXMudmVyc2lvbl9pbmZvLAorICAgICAgICAgICAgcmUuc3ViKCdbXmEtekEtWjAtOV0nLCAnXycsIGdldF9wbGF0Zm9ybSgpKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdW50YWdnZWRfaSA9IHN1ZmZpeGVzLmluZGV4KCIucHlkIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICB1bnRhZ2dlZF9pID0gc3VmZml4ZXMuaW5kZXgoIl9kLnB5ZCIpCisgICAgICAgICAgICBleHBlY3RlZF90YWcgPSAiX2QiICsgZXhwZWN0ZWRfdGFnCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZF90YWcsIHN1ZmZpeGVzKQorCisgICAgICAgICMgRW5zdXJlIHRoZSB0YWdzIGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlcgorICAgICAgICB0YWdnZWRfaSA9IHN1ZmZpeGVzLmluZGV4KGV4cGVjdGVkX3RhZykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRhZ2dlZF9pLCB1bnRhZ2dlZF9pKQorCisoRnJvemVuX1dpbmRvd3NFeHRlbnNpb25TdWZmaXhUZXN0cywKKyBTb3VyY2VfV2luZG93c0V4dGVuc2lvblN1ZmZpeFRlc3RzCisgKSA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoV2luZG93c0V4dGVuc2lvblN1ZmZpeFRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKaW5kZXggODg1Y2VjMy4uNDM4OTZjNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CkBAIC0xLDMxICsxLDg1IEBACi1mcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgdXRpbCwgaW52YWxpZGF0ZV9jYWNoZXMKK2ltcG9ydCBidWlsdGlucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBlcnJubworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGltcG9ydGxpYgorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeSwgdXRpbCwgaW52YWxpZGF0ZV9jYWNoZXMKK2ltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0eXBlcwogCiAKK0JVSUxUSU5TID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkKK0JVSUxUSU5TLmdvb2RfbmFtZSA9IE5vbmUKK0JVSUxUSU5TLmJhZF9uYW1lID0gTm9uZQoraWYgJ2Vycm5vJyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgQlVJTFRJTlMuZ29vZF9uYW1lID0gJ2Vycm5vJworaWYgJ2ltcG9ydGxpYicgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKKyAgICBCVUlMVElOUy5iYWRfbmFtZSA9ICdpbXBvcnRsaWInCisKK0VYVEVOU0lPTlMgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKQorRVhURU5TSU9OUy5wYXRoID0gTm9uZQorRVhURU5TSU9OUy5leHQgPSBOb25lCitFWFRFTlNJT05TLmZpbGVuYW1lID0gTm9uZQorRVhURU5TSU9OUy5maWxlX3BhdGggPSBOb25lCitFWFRFTlNJT05TLm5hbWUgPSAnX3Rlc3RjYXBpJworCitkZWYgX2V4dGVuc2lvbl9kZXRhaWxzKCk6CisgICAgZ2xvYmFsIEVYVEVOU0lPTlMKKyAgICBmb3IgcGF0aCBpbiBzeXMucGF0aDoKKyAgICAgICAgZm9yIGV4dCBpbiBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBFWFRFTlNJT05TLm5hbWUgKyBleHQKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVfcGF0aCk6CisgICAgICAgICAgICAgICAgRVhURU5TSU9OUy5wYXRoID0gcGF0aAorICAgICAgICAgICAgICAgIEVYVEVOU0lPTlMuZXh0ID0gZXh0CisgICAgICAgICAgICAgICAgRVhURU5TSU9OUy5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgICAgICAgICAgRVhURU5TSU9OUy5maWxlX3BhdGggPSBmaWxlX3BhdGgKKyAgICAgICAgICAgICAgICByZXR1cm4KKworX2V4dGVuc2lvbl9kZXRhaWxzKCkKKworCiBkZWYgaW1wb3J0X2ltcG9ydGxpYihtb2R1bGVfbmFtZSk6CiAgICAgIiIiSW1wb3J0IGEgbW9kdWxlIGZyb20gaW1wb3J0bGliIGJvdGggdy8gYW5kIHcvbyBfZnJvemVuX2ltcG9ydGxpYi4iIiIKICAgICBmcmVzaCA9ICgnaW1wb3J0bGliJywpIGlmICcuJyBpbiBtb2R1bGVfbmFtZSBlbHNlICgpCiAgICAgZnJvemVuID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKG1vZHVsZV9uYW1lKQogICAgIHNvdXJjZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZShtb2R1bGVfbmFtZSwgZnJlc2g9ZnJlc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrZWQ9KCdfZnJvemVuX2ltcG9ydGxpYicsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tlZD0oJ19mcm96ZW5faW1wb3J0bGliJywgJ19mcm96ZW5faW1wb3J0bGliX2V4dGVybmFsJykpCisgICAgcmV0dXJuIHsnRnJvemVuJzogZnJvemVuLCAnU291cmNlJzogc291cmNlfQorCisKK2RlZiBzcGVjaWFsaXplX2NsYXNzKGNscywga2luZCwgYmFzZT1Ob25lLCAqKmt3YXJncyk6CisgICAgIyBYWFggU3VwcG9ydCBwYXNzaW5nIGluIHN1Ym1vZHVsZSBuYW1lcy0tbG9hZCAoYW5kIGNhY2hlKSB0aGVtPworICAgICMgVGhhdCB3b3VsZCBjbGVhbiB1cCB0aGUgdGVzdCBtb2R1bGVzIGEgYml0IG1vcmUuCisgICAgaWYgYmFzZSBpcyBOb25lOgorICAgICAgICBiYXNlID0gdW5pdHRlc3QuVGVzdENhc2UKKyAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGJhc2UsIHR5cGUpOgorICAgICAgICBiYXNlID0gYmFzZVtraW5kXQorICAgIG5hbWUgPSAne31fe30nLmZvcm1hdChraW5kLCBjbHMuX19uYW1lX18pCisgICAgYmFzZXMgPSAoY2xzLCBiYXNlKQorICAgIHNwZWNpYWxpemVkID0gdHlwZXMubmV3X2NsYXNzKG5hbWUsIGJhc2VzKQorICAgIHNwZWNpYWxpemVkLl9fbW9kdWxlX18gPSBjbHMuX19tb2R1bGVfXworICAgIHNwZWNpYWxpemVkLl9OQU1FID0gY2xzLl9fbmFtZV9fCisgICAgc3BlY2lhbGl6ZWQuX0tJTkQgPSBraW5kCisgICAgZm9yIGF0dHIsIHZhbHVlcyBpbiBrd2FyZ3MuaXRlbXMoKToKKyAgICAgICAgdmFsdWUgPSB2YWx1ZXNba2luZF0KKyAgICAgICAgc2V0YXR0cihzcGVjaWFsaXplZCwgYXR0ciwgdmFsdWUpCisgICAgcmV0dXJuIHNwZWNpYWxpemVkCisKKworZGVmIHNwbGl0X2Zyb3plbihjbHMsIGJhc2U9Tm9uZSwgKiprd2FyZ3MpOgorICAgIGZyb3plbiA9IHNwZWNpYWxpemVfY2xhc3MoY2xzLCAnRnJvemVuJywgYmFzZSwgKiprd2FyZ3MpCisgICAgc291cmNlID0gc3BlY2lhbGl6ZV9jbGFzcyhjbHMsICdTb3VyY2UnLCBiYXNlLCAqKmt3YXJncykKICAgICByZXR1cm4gZnJvemVuLCBzb3VyY2UKIAogCi1kZWYgdGVzdF9ib3RoKHRlc3RfY2xhc3MsICoqa3dhcmdzKToKLSAgICBmcm96ZW5fdGVzdHMgPSB0eXBlcy5uZXdfY2xhc3MoJ0Zyb3plbl8nK3Rlc3RfY2xhc3MuX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSkpCi0gICAgc291cmNlX3Rlc3RzID0gdHlwZXMubmV3X2NsYXNzKCdTb3VyY2VfJyt0ZXN0X2NsYXNzLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpKQotICAgIGZyb3plbl90ZXN0cy5fX21vZHVsZV9fID0gc291cmNlX3Rlc3RzLl9fbW9kdWxlX18gPSB0ZXN0X2NsYXNzLl9fbW9kdWxlX18KLSAgICBmb3IgYXR0ciwgKGZyb3plbl92YWx1ZSwgc291cmNlX3ZhbHVlKSBpbiBrd2FyZ3MuaXRlbXMoKToKLSAgICAgICAgc2V0YXR0cihmcm96ZW5fdGVzdHMsIGF0dHIsIGZyb3plbl92YWx1ZSkKLSAgICAgICAgc2V0YXR0cihzb3VyY2VfdGVzdHMsIGF0dHIsIHNvdXJjZV92YWx1ZSkKLSAgICByZXR1cm4gZnJvemVuX3Rlc3RzLCBzb3VyY2VfdGVzdHMKK2RlZiB0ZXN0X2JvdGgodGVzdF9jbGFzcywgYmFzZT1Ob25lLCAqKmt3YXJncyk6CisgICAgcmV0dXJuIHNwbGl0X2Zyb3plbih0ZXN0X2NsYXNzLCBiYXNlLCAqKmt3YXJncykKIAogCiBDQVNFX0lOU0VOU0lUSVZFX0ZTID0gVHJ1ZQpAQCAtMzgsNiArOTIsMTAgQEAKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2hhbmdlZF9uYW1lKToKICAgICAgICAgQ0FTRV9JTlNFTlNJVElWRV9GUyA9IEZhbHNlCiAKK3NvdXJjZV9pbXBvcnRsaWIgPSBpbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKVsnU291cmNlJ10KK19faW1wb3J0X18gPSB7J0Zyb3plbic6IHN0YXRpY21ldGhvZChidWlsdGlucy5fX2ltcG9ydF9fKSwKKyAgICAgICAgICAgICAgJ1NvdXJjZSc6IHN0YXRpY21ldGhvZChzb3VyY2VfaW1wb3J0bGliLl9faW1wb3J0X18pfQorCiAKIGRlZiBjYXNlX2luc2Vuc2l0aXZlX3Rlc3RzKHRlc3QpOgogICAgICIiIkNsYXNzIGRlY29yYXRvciB0aGF0IG51bGxpZmllcyB0ZXN0cyByZXF1aXJpbmcgYSBjYXNlLWluc2Vuc2l0aXZlCkBAIC01Myw3ICsxMTEsNyBAQAogICAgIHJldHVybiAne30ue30nLmZvcm1hdChwYXJlbnQsIG5hbWUpLCBwYXRoCiAKIAotQGNvbnRleHRtYW5hZ2VyCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgogZGVmIHVuY2FjaGUoKm5hbWVzKToKICAgICAiIiJVbmNhY2hlIGEgbW9kdWxlIGZyb20gc3lzLm1vZHVsZXMuCiAKQEAgLTc5LDcgKzEzNyw3IEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAKLUBjb250ZXh0bWFuYWdlcgorQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKIGRlZiB0ZW1wX21vZHVsZShuYW1lLCBjb250ZW50PScnLCAqLCBwa2c9RmFsc2UpOgogICAgIGNvbmZsaWN0cyA9IFtuIGZvciBuIGluIHN5cy5tb2R1bGVzIGlmIG4ucGFydGl0aW9uKCcuJylbMF0gPT0gbmFtZV0KICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgpAQCAtMTAzLDcgKzE2MSw3IEBACiAgICAgICAgICAgICAgICAgeWllbGQgbG9jYXRpb24KIAogCi1AY29udGV4dG1hbmFnZXIKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiBkZWYgaW1wb3J0X3N0YXRlKCoqa3dhcmdzKToKICAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gbWFuYWdlIHRoZSB2YXJpb3VzIGltcG9ydGVycyBhbmQgc3RvcmVkIHN0YXRlIGluIHRoZQogICAgIHN5cyBtb2R1bGUuCkBAIC0xOTgsNiArMjU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbZnVsbG5hbWVdCiAKKwogY2xhc3MgbW9ja19zcGVjKF9JbXBvcnRlck1vY2spOgogCiAgICAgIiIiSW1wb3J0ZXIgbW9jayB1c2luZyBQRVAgNDUxIEFQSXMuIiIiCkBAIC0yMjMsMyArMjgyLDEwOCBAQAogICAgICAgICAgICAgc2VsZi5tb2R1bGVfY29kZVttb2R1bGUuX19zcGVjX18ubmFtZV0oKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICBwYXNzCisKKworZGVmIHdyaXRlc19ieXRlY29kZV9maWxlcyhmeG4pOgorICAgICIiIkRlY29yYXRvciB0byBwcm90ZWN0IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGZyb20gbXV0YXRpb24gYW5kIHRvIHNraXAKKyAgICB0ZXN0cyB0aGF0IHJlcXVpcmUgaXQgdG8gYmUgc2V0IHRvIEZhbHNlLiIiIgorICAgIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgorICAgICAgICByZXR1cm4gbGFtYmRhICphcmdzLCAqKmt3YXJnczogTm9uZQorICAgIEBmdW5jdG9vbHMud3JhcHMoZnhuKQorICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIG9yaWdpbmFsID0gc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUKKyAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0b19yZXR1cm4gPSBmeG4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBvcmlnaW5hbAorICAgICAgICByZXR1cm4gdG9fcmV0dXJuCisgICAgcmV0dXJuIHdyYXBwZXIKKworCitkZWYgZW5zdXJlX2J5dGVjb2RlX3BhdGgoYnl0ZWNvZGVfcGF0aCk6CisgICAgIiIiRW5zdXJlIHRoYXQgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yeSBmb3IgUEVQIDMxNDcgcHljIGZpbGUgZXhpc3RzLgorCisgICAgOnBhcmFtIGJ5dGVjb2RlX3BhdGg6IEZpbGUgc3lzdGVtIHBhdGggdG8gUEVQIDMxNDcgcHljIGZpbGUuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmRpcm5hbWUoYnl0ZWNvZGVfcGF0aCkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CisgICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBjcmVhdGVfbW9kdWxlcygqbmFtZXMpOgorICAgICIiIlRlbXBvcmFyaWx5IGNyZWF0ZSBlYWNoIG5hbWVkIG1vZHVsZSB3aXRoIGFuIGF0dHJpYnV0ZSAobmFtZWQgJ2F0dHInKQorICAgIHRoYXQgY29udGFpbnMgdGhlIG5hbWUgcGFzc2VkIGludG8gdGhlIGNvbnRleHQgbWFuYWdlciB0aGF0IGNhdXNlZCB0aGUKKyAgICBjcmVhdGlvbiBvZiB0aGUgbW9kdWxlLgorCisgICAgQWxsIGZpbGVzIGFyZSBjcmVhdGVkIGluIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSByZXR1cm5lZCBieQorICAgIHRlbXBmaWxlLm1rZHRlbXAoKS4gVGhpcyBkaXJlY3RvcnkgaXMgaW5zZXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgIHN5cy5wYXRoLiBXaGVuIHRoZSBjb250ZXh0IG1hbmFnZXIgZXhpdHMgYWxsIGNyZWF0ZWQgZmlsZXMgKHNvdXJjZSBhbmQKKyAgICBieXRlY29kZSkgYXJlIGV4cGxpY2l0bHkgZGVsZXRlZC4KKworICAgIE5vIG1hZ2ljIGlzIHBlcmZvcm1lZCB3aGVuIGNyZWF0aW5nIHBhY2thZ2VzISBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IGNyZWF0ZQorICAgIGEgbW9kdWxlIHdpdGhpbiBhIHBhY2thZ2UgeW91IG11c3QgYWxzbyBjcmVhdGUgdGhlIHBhY2thZ2UncyBfX2luaXRfXyBhcworICAgIHdlbGwuCisKKyAgICAiIiIKKyAgICBzb3VyY2UgPSAnYXR0ciA9IHswIXJ9JworICAgIGNyZWF0ZWRfcGF0aHMgPSBbXQorICAgIG1hcHBpbmcgPSB7fQorICAgIHN0YXRlX21hbmFnZXIgPSBOb25lCisgICAgdW5jYWNoZV9tYW5hZ2VyID0gTm9uZQorICAgIHRyeToKKyAgICAgICAgdGVtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgbWFwcGluZ1snLnJvb3QnXSA9IHRlbXBfZGlyCisgICAgICAgIGltcG9ydF9uYW1lcyA9IHNldCgpCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoJ19faW5pdF9fJyk6CisgICAgICAgICAgICAgICAgaW1wb3J0X25hbWUgPSBuYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltcG9ydF9uYW1lID0gbmFtZVs6LWxlbignLl9faW5pdF9fJyldCisgICAgICAgICAgICBpbXBvcnRfbmFtZXMuYWRkKGltcG9ydF9uYW1lKQorICAgICAgICAgICAgaWYgaW1wb3J0X25hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2ltcG9ydF9uYW1lXQorICAgICAgICAgICAgbmFtZV9wYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICAgICAgZmlsZV9wYXRoID0gdGVtcF9kaXIKKyAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gbmFtZV9wYXJ0c1s6LTFdOgorICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihmaWxlX3BhdGgsIGRpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZmlsZV9wYXRoKQorICAgICAgICAgICAgICAgICAgICBjcmVhdGVkX3BhdGhzLmFwcGVuZChmaWxlX3BhdGgpCisgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZmlsZV9wYXRoLCBuYW1lX3BhcnRzWy0xXSArICcucHknKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoc291cmNlLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgIGNyZWF0ZWRfcGF0aHMuYXBwZW5kKGZpbGVfcGF0aCkKKyAgICAgICAgICAgIG1hcHBpbmdbbmFtZV0gPSBmaWxlX3BhdGgKKyAgICAgICAgdW5jYWNoZV9tYW5hZ2VyID0gdW5jYWNoZSgqaW1wb3J0X25hbWVzKQorICAgICAgICB1bmNhY2hlX21hbmFnZXIuX19lbnRlcl9fKCkKKyAgICAgICAgc3RhdGVfbWFuYWdlciA9IGltcG9ydF9zdGF0ZShwYXRoPVt0ZW1wX2Rpcl0pCisgICAgICAgIHN0YXRlX21hbmFnZXIuX19lbnRlcl9fKCkKKyAgICAgICAgeWllbGQgbWFwcGluZworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHN0YXRlX21hbmFnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ZV9tYW5hZ2VyLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIGlmIHVuY2FjaGVfbWFuYWdlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHVuY2FjaGVfbWFuYWdlci5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzdXBwb3J0LnJtdHJlZSh0ZW1wX2RpcikKKworCitkZWYgbW9ja19wYXRoX2hvb2soKmVudHJpZXMsIGltcG9ydGVyKToKKyAgICAiIiJBIG1vY2sgc3lzLnBhdGhfaG9va3MgZW50cnkuIiIiCisgICAgZGVmIGhvb2soZW50cnkpOgorICAgICAgICBpZiBlbnRyeSBub3QgaW4gZW50cmllczoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIHJldHVybiBpbXBvcnRlcgorICAgIHJldHVybiBob29rCisKKworY2xhc3MgQ0FTRU9LVGVzdEJhc2U6CisKKyAgICBkZWYgY2FzZW9rX2Vudl9jaGFuZ2VkKHNlbGYsICosIHNob3VsZF9leGlzdCk6CisgICAgICAgIHBvc3NpYmlsaXRpZXMgPSBiJ1BZVEhPTkNBU0VPSycsICdQWVRIT05DQVNFT0snCisgICAgICAgIGlmIGFueSh4IGluIHNlbGYuaW1wb3J0bGliLl9ib290c3RyYXBfZXh0ZXJuYWwuX29zLmVudmlyb24KKyAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcG9zc2liaWxpdGllcykgIT0gc2hvdWxkX2V4aXN0OgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3MuZW52aXJvbiBjaGFuZ2VzIG5vdCByZWZsZWN0ZWQgaW4gX29zLmVudmlyb24nKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CmluZGV4IDFhMTI0YjUuLjY3MWUwNWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKQEAgLTEsMyArMSw0IEBACitpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgZnVuY3Rvb2xzCkBAIC04LDYgKzksNyBAQAogaW1wb3J0IG9zCiBmcm9tIG9zLnBhdGggaW1wb3J0IG5vcm1jYXNlCiBpbXBvcnQgX3BpY2tsZQoraW1wb3J0IHBpY2tsZQogaW1wb3J0IHJlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCkBAIC0xNiw2ICsxOCw3IEBACiBpbXBvcnQgdW5pY29kZWRhdGEKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2ltcG9ydCB3YXJuaW5ncwogCiB0cnk6CiAgICAgZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFRocmVhZFBvb2xFeGVjdXRvcgpAQCAtMjMsOCArMjYsOCBAQAogICAgIFRocmVhZFBvb2xFeGVjdXRvciA9IE5vbmUKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBEaXJzT25TeXNQYXRoLCBjcHl0aG9uX29ubHkKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBNSVNTSU5HX0NfRE9DU1RSSU5HUwotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IE1JU1NJTkdfQ19ET0NTVFJJTkdTLCBjcHl0aG9uX29ubHkKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQogZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlciBhcyBtb2QKIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIyIGFzIG1vZDIKIApAQCAtNjAsMTQgKzYzLDE2IEBACiAgICAgcHJlZGljYXRlcyA9IHNldChbaW5zcGVjdC5pc2J1aWx0aW4sIGluc3BlY3QuaXNjbGFzcywgaW5zcGVjdC5pc2NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5pc2ZyYW1lLCBpbnNwZWN0LmlzZnVuY3Rpb24sIGluc3BlY3QuaXNtZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5pc21vZHVsZSwgaW5zcGVjdC5pc3RyYWNlYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzZ2VuZXJhdG9yLCBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb25dKQorICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNnZW5lcmF0b3IsIGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzY29yb3V0aW5lLCBpbnNwZWN0LmlzY29yb3V0aW5lZnVuY3Rpb25dKQogCiAgICAgZGVmIGlzdGVzdChzZWxmLCBwcmVkaWNhdGUsIGV4cCk6CiAgICAgICAgIG9iaiA9IGV2YWwoZXhwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocHJlZGljYXRlKG9iaiksICclcyglcyknICUgKHByZWRpY2F0ZS5fX25hbWVfXywgZXhwKSkKIAogICAgICAgICBmb3Igb3RoZXIgaW4gc2VsZi5wcmVkaWNhdGVzIC0gc2V0KFtwcmVkaWNhdGVdKToKLSAgICAgICAgICAgIGlmIHByZWRpY2F0ZSA9PSBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24gYW5kXAorICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSA9PSBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24gb3IgXAorICAgICAgICAgICAgICAgcHJlZGljYXRlID09IGluc3BlY3QuaXNjb3JvdXRpbmVmdW5jdGlvbikgYW5kIFwKICAgICAgICAgICAgICAgIG90aGVyID09IGluc3BlY3QuaXNmdW5jdGlvbjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdGhlcihvYmopLCAnbm90ICVzKCVzKScgJSAob3RoZXIuX19uYW1lX18sIGV4cCkpCkBAIC03NiwxOSArODEsMTkgQEAKICAgICBmb3IgaSBpbiByYW5nZSgyKToKICAgICAgICAgeWllbGQgaQogCithc3luYyBkZWYgY29yb3V0aW5lX2Z1bmN0aW9uX2V4YW1wbGUoc2VsZik6CisgICAgcmV0dXJuICdzcGFtJworCitAdHlwZXMuY29yb3V0aW5lCitkZWYgZ2VuX2Nvcm91dGluZV9mdW5jdGlvbl9leGFtcGxlKHNlbGYpOgorICAgIHlpZWxkCisgICAgcmV0dXJuICdzcGFtJworCiBjbGFzcyBFcXVhbHNUb0FsbDoKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgcmV0dXJuIFRydWUKIAogY2xhc3MgVGVzdFByZWRpY2F0ZXMoSXNUZXN0QmFzZSk6Ci0gICAgZGVmIHRlc3Rfc2l4dGVlbihzZWxmKToKLSAgICAgICAgY291bnQgPSBsZW4oW3ggZm9yIHggaW4gZGlyKGluc3BlY3QpIGlmIHguc3RhcnRzd2l0aCgnaXMnKV0pCi0gICAgICAgICMgVGhpcyB0ZXN0IGlzIGhlcmUgZm9yIHJlbWVtYmVyIHlvdSB0byB1cGRhdGUgRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKLSAgICAgICAgIyB3aGljaCBjbGFpbXMgdGhlcmUgYXJlIDE2IHN1Y2ggZnVuY3Rpb25zCi0gICAgICAgIGV4cGVjdGVkID0gMTYKLSAgICAgICAgZXJyX21zZyA9ICJUaGVyZSBhcmUgJWQgKG5vdCAlZCkgaXMqIGZ1bmN0aW9ucyIgJSAoY291bnQsIGV4cGVjdGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBleHBlY3RlZCwgZXJyX21zZykKLQogCiAgICAgZGVmIHRlc3RfZXhjbHVkaW5nX3ByZWRpY2F0ZXMoc2VsZik6CiAgICAgICAgIGdsb2JhbCB0YgpAQCAtMTE2LDExICsxMjEsNjIgQEAKICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2RhdGFkZXNjcmlwdG9yLCAnY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QuZGVmYXVsdF9mYWN0b3J5JykKICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2dlbmVyYXRvciwgJyh4IGZvciB4IGluIHJhbmdlKDIpKScpCiAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbiwgJ2dlbmVyYXRvcl9mdW5jdGlvbl9leGFtcGxlJykKKworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCisgICAgICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzY29yb3V0aW5lLCAnY29yb3V0aW5lX2Z1bmN0aW9uX2V4YW1wbGUoMSknKQorICAgICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2Nvcm91dGluZWZ1bmN0aW9uLCAnY29yb3V0aW5lX2Z1bmN0aW9uX2V4YW1wbGUnKQorCiAgICAgICAgIGlmIGhhc2F0dHIodHlwZXMsICdNZW1iZXJEZXNjcmlwdG9yVHlwZScpOgogICAgICAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc21lbWJlcmRlc2NyaXB0b3IsICdkYXRldGltZS50aW1lZGVsdGEuZGF5cycpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNtZW1iZXJkZXNjcmlwdG9yKGRhdGV0aW1lLnRpbWVkZWx0YS5kYXlzKSkKIAorICAgIGRlZiB0ZXN0X2lzY29yb3V0aW5lKHNlbGYpOgorICAgICAgICBnZW5fY29ybyA9IGdlbl9jb3JvdXRpbmVfZnVuY3Rpb25fZXhhbXBsZSgxKQorICAgICAgICBjb3JvID0gY29yb3V0aW5lX2Z1bmN0aW9uX2V4YW1wbGUoMSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICAgICAgaW5zcGVjdC5pc2Nvcm91dGluZWZ1bmN0aW9uKGdlbl9jb3JvdXRpbmVfZnVuY3Rpb25fZXhhbXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2Nvcm91dGluZShnZW5fY29ybykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uKGdlbl9jb3JvdXRpbmVfZnVuY3Rpb25fZXhhbXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzZ2VuZXJhdG9yKGdlbl9jb3JvKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBpbnNwZWN0LmlzY29yb3V0aW5lZnVuY3Rpb24oY29yb3V0aW5lX2Z1bmN0aW9uX2V4YW1wbGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc2Nvcm91dGluZShjb3JvKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICAgICAgaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uKGNvcm91dGluZV9mdW5jdGlvbl9leGFtcGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzZ2VuZXJhdG9yKGNvcm8pKQorCisgICAgICAgIGNvcm8uY2xvc2UoKTsgZ2VuX2Nvcm8uY2xvc2UoKSAjIHNpbGVuY2Ugd2FybmluZ3MKKworICAgIGRlZiB0ZXN0X2lzYXdhaXRhYmxlKHNlbGYpOgorICAgICAgICBkZWYgZ2VuKCk6IHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2F3YWl0YWJsZShnZW4oKSkpCisKKyAgICAgICAgY29ybyA9IGNvcm91dGluZV9mdW5jdGlvbl9leGFtcGxlKDEpCisgICAgICAgIGdlbl9jb3JvID0gZ2VuX2Nvcm91dGluZV9mdW5jdGlvbl9leGFtcGxlKDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNhd2FpdGFibGUoY29ybykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzYXdhaXRhYmxlKGdlbl9jb3JvKSkKKworICAgICAgICBjbGFzcyBGdXR1cmU6CisgICAgICAgICAgICBkZWYgX19hd2FpdF9fKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc2F3YWl0YWJsZShGdXR1cmUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2F3YWl0YWJsZShGdXR1cmUpKQorCisgICAgICAgIGNsYXNzIE5vdEZ1dHVyZTogcGFzcworICAgICAgICBub3RfZnV0ID0gTm90RnV0dXJlKCkKKyAgICAgICAgbm90X2Z1dC5fX2F3YWl0X18gPSBsYW1iZGE6IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzYXdhaXRhYmxlKG5vdF9mdXQpKQorCisgICAgICAgIGNvcm8uY2xvc2UoKTsgZ2VuX2Nvcm8uY2xvc2UoKSAjIHNpbGVuY2Ugd2FybmluZ3MKKwogICAgIGRlZiB0ZXN0X2lzcm91dGluZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNyb3V0aW5lKG1vZC5zcGFtKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNyb3V0aW5lKFtdLmNvdW50KSkKQEAgLTE4Niw2ICsyNDIsMTQgQEAKICAgICAgICAgICAgICAobW9kZmlsZSwgNDMsICdhcmd1ZScsIFsnICAgICAgICAgICAgc3BhbShhLCBiLCBjKVxuJ10sIDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmlzZSgqbW9kLnN0WzNdWzE6XSksCiAgICAgICAgICAgICAgKG1vZGZpbGUsIDM5LCAnYWJ1c2UnLCBbJyAgICAgICAgc2VsZi5hcmd1ZShhLCBiLCBjKVxuJ10sIDApKQorICAgICAgICAjIFRlc3QgbmFtZWQgdHVwbGUgZmllbGRzCisgICAgICAgIHJlY29yZCA9IG1vZC5zdFswXQorICAgICAgICBzZWxmLmFzc2VydElzKHJlY29yZC5mcmFtZSwgbW9kLmZyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZC5saW5lbm8sIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZC5maWxlbmFtZSwgbW9kLl9fZmlsZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZC5mdW5jdGlvbiwgJ2VnZ3MnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbnNwZWN0LnN0YWNrKCknLCByZWNvcmQuY29kZV9jb250ZXh0WzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZC5pbmRleCwgMCkKIAogICAgIGRlZiB0ZXN0X3RyYWNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnaXQudHIpLCAzKQpAQCAtMjE3LDkgKzI4MSw3IEBACiAgICAgIyBTdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUuCiAgICAgZm9kZGVyTW9kdWxlID0gTm9uZQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKLQorICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKGluc3BlY3QuZ2V0c291cmNlZmlsZShzZWxmLmZvZGRlck1vZHVsZSkpIGFzIGZwOgogICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBmcC5yZWFkKCkKIApAQCAtMjc0LDYgKzMzNiw3IEBACiAgICAgZGVmIHRlc3RfZ2V0ZnVuY3Rpb25zKHNlbGYpOgogICAgICAgICBmdW5jdGlvbnMgPSBpbnNwZWN0LmdldG1lbWJlcnMobW9kLCBpbnNwZWN0LmlzZnVuY3Rpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb25zLCBbKCdlZ2dzJywgbW9kLmVnZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnbG9iYmVzdCcsIG1vZC5sb2JiZXN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3NwYW0nLCBtb2Quc3BhbSldKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKQEAgLTI4NSw2ICszNDgsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGRvYyhnaXQuYWJ1c2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICdBbm90aGVyXG5cbmRvY3N0cmluZ1xuXG5jb250YWluaW5nXG5cbnRhYnMnKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZ2V0ZG9jX2luaGVyaXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGRvYyhtb2QuRmVzdGVyaW5nR29iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQSBsb25nZXIsXG5cbmluZGVudGVkXG5cbmRvY3N0cmluZy4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZG9jKG1vZC5GZXN0ZXJpbmdHb2IuYWJ1c2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdBbm90aGVyXG5cbmRvY3N0cmluZ1xuXG5jb250YWluaW5nXG5cbnRhYnMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZG9jKG1vZC5GZXN0ZXJpbmdHb2IoKS5hYnVzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub3RoZXJcblxuZG9jc3RyaW5nXG5cbmNvbnRhaW5pbmdcblxudGFicycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRkb2MobW9kLkZlc3RlcmluZ0dvYi5jb250cmFkaWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIGF1dG9tYXRpYyBnYWluc2F5aW5nLicpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLCAidGVzdCByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9maW5kZG9jKHNlbGYpOgorICAgICAgICBmaW5kZG9jID0gaW5zcGVjdC5fZmluZGRvYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmRkb2MoaW50KSwgaW50Ll9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGRvYyhpbnQudG9fYnl0ZXMpLCBpbnQudG9fYnl0ZXMuX19kb2NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kZG9jKGludCgpLnRvX2J5dGVzKSwgaW50LnRvX2J5dGVzLl9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGRvYyhpbnQuZnJvbV9ieXRlcyksIGludC5mcm9tX2J5dGVzLl9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGRvYyhpbnQucmVhbCksIGludC5yZWFsLl9fZG9jX18pCisKICAgICBkZWYgdGVzdF9jbGVhbmRvYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmNsZWFuZG9jKCdBblxuICAgIGluZGVudGVkXG4gICAgZG9jc3RyaW5nLicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICdBblxuaW5kZW50ZWRcbmRvY3N0cmluZy4nKQpAQCAtMzA5LDcgKzM5Myw4IEBACiAKICAgICBkZWYgdGVzdF9nZXRzb3VyY2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwoZ2l0LmFidXNlLCAyOSwgMzkpCi0gICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kLlN0dXBpZEdpdCwgMjEsIDQ2KQorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZC5TdHVwaWRHaXQsIDIxLCA1MSkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QubG9iYmVzdCwgNzUsIDc2KQogCiAgICAgZGVmIHRlc3RfZ2V0c291cmNlZmlsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3JtY2FzZShpbnNwZWN0LmdldHNvdXJjZWZpbGUobW9kLnNwYW0pKSwgbW9kZmlsZSkKQEAgLTM2NCw2ICs0NDksOSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgbGluZWNhY2hlLmdldGxpbmVzID0gZ2V0bGluZXMKIAorICAgIGRlZiB0ZXN0X2dldHNvdXJjZV9vbl9jb2RlX29iamVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QuZWdncy5fX2NvZGVfXywgMTIsIDE4KQorCiBjbGFzcyBUZXN0RGVjb3JhdG9ycyhHZXRTb3VyY2VCYXNlKToKICAgICBmb2RkZXJNb2R1bGUgPSBtb2QyCiAKQEAgLTM3Myw2ICs0NjEsMTIgQEAKICAgICBkZWYgdGVzdF9yZXBsYWNpbmdfZGVjb3JhdG9yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIuZ29uZSwgOSwgMTApCiAKKyAgICBkZWYgdGVzdF9nZXRzb3VyY2VfdW53cmFwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIucmVhbCwgMTMwLCAxMzIpCisKKyAgICBkZWYgdGVzdF9kZWNvcmF0b3Jfd2l0aF9sYW1iZGEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5mdW5jMTE0LCAxMTMsIDExNSkKKwogY2xhc3MgVGVzdE9uZWxpbmVycyhHZXRTb3VyY2VCYXNlKToKICAgICBmb2RkZXJNb2R1bGUgPSBtb2QyCiAgICAgZGVmIHRlc3Rfb25lbGluZV9sYW1iZGEoc2VsZik6CkBAIC00NjYsOCArNTYwLDE1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIGNvKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIGNvKQogCisgICAgZGVmIHRlc3RfZ2V0c291cmNlX29uX21ldGhvZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLkNsYXNzV2l0aE1ldGhvZC5tZXRob2QsIDExOCwgMTE5KQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2Z1bmMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5jbHMxMzUuZnVuYzEzNiwgMTM2LCAxMzkpCisKKwogY2xhc3MgVGVzdE5vRU9MKEdldFNvdXJjZUJhc2UpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi50ZW1wZGlyID0gVEVTVEZOICsgJ19kaXInCiAgICAgICAgIG9zLm1rZGlyKHNlbGYudGVtcGRpcikKICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsCkBAIC00NzYsNyArNTc3LDcgQEAKICAgICAgICAgd2l0aCBEaXJzT25TeXNQYXRoKHNlbGYudGVtcGRpcik6CiAgICAgICAgICAgICBpbXBvcnQgaW5zcGVjdF9mb2RkZXIzIGFzIG1vZDMKICAgICAgICAgc2VsZi5mb2RkZXJNb2R1bGUgPSBtb2QzCi0gICAgICAgIEdldFNvdXJjZUJhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzdXBlcigpLnNldFVwKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRlbXBkaXIpCkBAIC01MjksNyArNjMwLDggQEAKIAogICAgIGRlZiBhc3NlcnRBcmdTcGVjRXF1YWxzKHNlbGYsIHJvdXRpbmUsIGFyZ3NfZSwgdmFyYXJnc19lPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFya3dfZT1Ob25lLCBkZWZhdWx0c19lPU5vbmUsIGZvcm1hdHRlZD1Ob25lKToKLSAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzID0gaW5zcGVjdC5nZXRhcmdzcGVjKHJvdXRpbmUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzID0gaW5zcGVjdC5nZXRhcmdzcGVjKHJvdXRpbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgYXJnc19lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcmFyZ3MsIHZhcmFyZ3NfZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJrdywgdmFya3dfZSkKQEAgLTE2MzQsMTAgKzE3MzYsODYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnNwZWN0LmdldGdlbmVyYXRvcmxvY2FscywgKDIsMykpCiAKIAorY2xhc3MgVGVzdEdldENvcm91dGluZVN0YXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgbnVtYmVyX2Nvcm91dGluZSgpOgorICAgICAgICAgICAgZm9yIG51bWJlciBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICB5aWVsZCBudW1iZXIKKyAgICAgICAgYXN5bmMgZGVmIGNvcm91dGluZSgpOgorICAgICAgICAgICAgYXdhaXQgbnVtYmVyX2Nvcm91dGluZSgpCisgICAgICAgIHNlbGYuY29yb3V0aW5lID0gY29yb3V0aW5lKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jb3JvdXRpbmUuY2xvc2UoKQorCisgICAgZGVmIF9jb3JvdXRpbmVzdGF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGluc3BlY3QuZ2V0Y29yb3V0aW5lc3RhdGUoc2VsZi5jb3JvdXRpbmUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2Nvcm91dGluZXN0YXRlKCksIGluc3BlY3QuQ09ST19DUkVBVEVEKQorCisgICAgZGVmIHRlc3Rfc3VzcGVuZGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNvcm91dGluZS5zZW5kKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fY29yb3V0aW5lc3RhdGUoKSwgaW5zcGVjdC5DT1JPX1NVU1BFTkRFRCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlZF9hZnRlcl9leGhhdXN0aW9uKHNlbGYpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuY29yb3V0aW5lLnNlbmQoTm9uZSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9jb3JvdXRpbmVzdGF0ZSgpLCBpbnNwZWN0LkNPUk9fQ0xPU0VEKQorCisgICAgZGVmIHRlc3RfY2xvc2VkX2FmdGVyX2ltbWVkaWF0ZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuY29yb3V0aW5lLnRocm93KFJ1bnRpbWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9jb3JvdXRpbmVzdGF0ZSgpLCBpbnNwZWN0LkNPUk9fQ0xPU0VEKQorCisgICAgZGVmIHRlc3RfZWFzeV9kZWJ1Z2dpbmcoc2VsZik6CisgICAgICAgICMgcmVwcigpIGFuZCBzdHIoKSBvZiBhIGNvcm91dGluZSBzdGF0ZSBzaG91bGQgY29udGFpbiB0aGUgc3RhdGUgbmFtZQorICAgICAgICBuYW1lcyA9ICdDT1JPX0NSRUFURUQgQ09ST19SVU5OSU5HIENPUk9fU1VTUEVOREVEIENPUk9fQ0xPU0VEJy5zcGxpdCgpCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgc3RhdGUgPSBnZXRhdHRyKGluc3BlY3QsIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHJlcHIoc3RhdGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzdHIoc3RhdGUpKQorCisgICAgZGVmIHRlc3RfZ2V0Y29yb3V0aW5lbG9jYWxzKHNlbGYpOgorICAgICAgICBAdHlwZXMuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZW5jb3JvKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIGdlbmNvcm8gPSBnZW5jb3JvKCkKKyAgICAgICAgYXN5bmMgZGVmIGZ1bmMoYT1Ob25lKToKKyAgICAgICAgICAgIGIgPSAnc3BhbScKKyAgICAgICAgICAgIGF3YWl0IGdlbmNvcm8KKworICAgICAgICBjb3JvID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRjb3JvdXRpbmVsb2NhbHMoY29ybyksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogTm9uZSwgJ2dlbmNvcm8nOiBnZW5jb3JvfSkKKyAgICAgICAgY29yby5zZW5kKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRjb3JvdXRpbmVsb2NhbHMoY29ybyksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogTm9uZSwgJ2dlbmNvcm8nOiBnZW5jb3JvLCAnYic6ICdzcGFtJ30pCisKKworY2xhc3MgTXlTaWduYXR1cmUoaW5zcGVjdC5TaWduYXR1cmUpOgorICAgICMgVG9wLWxldmVsIHRvIG1ha2UgaXQgcGlja2xhYmxlOworICAgICMgdXNlZCBpbiB0ZXN0X3NpZ25hdHVyZV9vYmplY3RfcGlja2xlCisgICAgcGFzcworCitjbGFzcyBNeVBhcmFtZXRlcihpbnNwZWN0LlBhcmFtZXRlcik6CisgICAgIyBUb3AtbGV2ZWwgdG8gbWFrZSBpdCBwaWNrbGFibGU7CisgICAgIyB1c2VkIGluIHRlc3Rfc2lnbmF0dXJlX29iamVjdF9waWNrbGUKKyAgICBwYXNzCisKKworCiBjbGFzcyBUZXN0U2lnbmF0dXJlT2JqZWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNpZ25hdHVyZShmdW5jKToKLSAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUoZnVuYykKKyAgICBkZWYgc2lnbmF0dXJlKGZ1bmMsICoqa3cpOgorICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZShmdW5jLCAqKmt3KQogICAgICAgICByZXR1cm4gKHR1cGxlKChwYXJhbS5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAoLi4uIGlmIHBhcmFtLmRlZmF1bHQgaXMgcGFyYW0uZW1wdHkgZWxzZSBwYXJhbS5kZWZhdWx0KSwKICAgICAgICAgICAgICAgICAgICAgICAgKC4uLiBpZiBwYXJhbS5hbm5vdGF0aW9uIGlzIHBhcmFtLmVtcHR5CkBAIC0xNjkxLDYgKzE4NjksMzcgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQnKToKICAgICAgICAgICAgIFMoKHBrZCwgcGspKQogCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHNpZykuc3RhcnRzd2l0aCgnPFNpZ25hdHVyZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJyhwbywgcGsnIGluIHJlcHIoc2lnKSkKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vYmplY3RfcGlja2xlKHNlbGYpOgorICAgICAgICBkZWYgZm9vKGEsIGIsICosIGM6MT17fSwgKiprdykgLT4gezQyOidoYW0nfTogcGFzcworICAgICAgICBmb29fcGFydGlhbCA9IGZ1bmN0b29scy5wYXJ0aWFsKGZvbywgYT0xKQorCisgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKGZvb19wYXJ0aWFsKQorCisgICAgICAgIGZvciB2ZXIgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBpY2tsZV92ZXI9dmVyLCBzdWJjbGFzcz1GYWxzZSk6CisgICAgICAgICAgICAgICAgc2lnX3BpY2tsZWQgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHNpZywgdmVyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZywgc2lnX3BpY2tsZWQpCisKKyAgICAgICAgIyBUZXN0IHRoYXQgYmFzaWMgc3ViLWNsYXNzaW5nIHdvcmtzCisgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykKKyAgICAgICAgbXlwYXJhbSA9IE15UGFyYW1ldGVyKG5hbWU9J3onLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgbXlwYXJhbXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdChzaWcucGFyYW1ldGVycywgYT1teXBhcmFtKQorICAgICAgICBteXNpZyA9IE15U2lnbmF0dXJlKCkucmVwbGFjZShwYXJhbWV0ZXJzPW15cGFyYW1zLnZhbHVlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fYW5ub3RhdGlvbj1zaWcucmV0dXJuX2Fubm90YXRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG15c2lnLCBNeVNpZ25hdHVyZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG15c2lnLnBhcmFtZXRlcnNbJ3onXSwgTXlQYXJhbWV0ZXIpKQorCisgICAgICAgIGZvciB2ZXIgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBpY2tsZV92ZXI9dmVyLCBzdWJjbGFzcz1UcnVlKToKKyAgICAgICAgICAgICAgICBzaWdfcGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMobXlzaWcsIHZlcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteXNpZywgc2lnX3BpY2tsZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2lnX3BpY2tsZWQsIE15U2lnbmF0dXJlKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzaWdfcGlja2xlZC5wYXJhbWV0ZXJzWyd6J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlQYXJhbWV0ZXIpKQorCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2ltbXV0YWJpbGl0eShzZWxmKToKICAgICAgICAgZGVmIHRlc3QoYSk6CiAgICAgICAgICAgICBwYXNzCkBAIC0xODA1LDYgKzIwMTQsOCBAQAogICAgICAgICB0ZXN0X3VuYm91bmRfbWV0aG9kKGRpY3QuX19kZWxpdGVtX18pCiAgICAgICAgIHRlc3RfdW5ib3VuZF9tZXRob2QocHJvcGVydHkuX19kZWxldGVfXykKIAorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgIzIwNTg2CisgICAgICAgIHRlc3RfY2FsbGFibGUoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9idXRfbm9fZG9jKQogCiAgICAgQGNweXRob25fb25seQogICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCkBAIC0xODI0LDIzICsyMDM1LDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZnVuYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoZGVjb3JhdGVkX2Z1bmMpKQogCisgICAgICAgIGRlZiB3cmFwcGVyX2xpa2UoKmFyZ3MsICoqa3dhcmdzKSAtPiBpbnQ6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShkZWNvcmF0ZWRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlZD1GYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUod3JhcHBlcl9saWtlKSkKKwogICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbnNfbm9fc2lnbmF0dXJlKHNlbGYpOgogICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciBidWlsdGluJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vIHNpZ25hdHVyZSBmb3VuZCBmb3IgYnVpbHRpbicpOgogICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciBidWlsdGluJyk6CisgICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShzdHIpCisKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fbm9uX2Z1bmN0aW9uKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgY2FsbGFibGUgb2JqZWN0Jyk6CiAgICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZSg0MikKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgUHl0aG9uIGZ1bmN0aW9uJyk6Ci0gICAgICAgICAgICBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKDQyKQotCi0gICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2Zyb21fYnVpbHRpbl9lcnJvcnMoc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdpcyBub3QgYSBQeXRob24gYnVpbHRpbicpOgotICAgICAgICAgICAgaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9idWlsdGluKDQyKQotCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2Zyb21fZnVuY3Rpb25saWtlX29iamVjdChzZWxmKToKICAgICAgICAgZGVmIGZ1bmMoYSxiLCAqYXJncywga3dvbmx5PVRydWUsIGt3b25seXJlcSwgKiprd2FyZ3MpOgogICAgICAgICAgICAgcGFzcwpAQCAtMTg2MSw5ICsyMDc1LDkgQEAKICAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bmMoKmFyZ3MsICoqa3dhcmdzKQogCi0gICAgICAgIHNpZ19mdW5jID0gaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9mdW5jdGlvbihmdW5jKQorICAgICAgICBzaWdfZnVuYyA9IGluc3BlY3QuU2lnbmF0dXJlLmZyb21fY2FsbGFibGUoZnVuYykKIAotICAgICAgICBzaWdfZnVuY2xpa2UgPSBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKGZ1bmNsaWtlKGZ1bmMpKQorICAgICAgICBzaWdfZnVuY2xpa2UgPSBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2NhbGxhYmxlKGZ1bmNsaWtlKGZ1bmMpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ19mdW5jbGlrZSwgc2lnX2Z1bmMpCiAKICAgICAgICAgc2lnX2Z1bmNsaWtlID0gaW5zcGVjdC5zaWduYXR1cmUoZnVuY2xpa2UoZnVuYykpCkBAIC0xOTExLDkgKzIxMjUsNiBAQAogICAgICAgICAgICAgX19kZWZhdWx0c19fID0gZnVuYy5fX2RlZmF1bHRzX18KICAgICAgICAgICAgIF9fa3dkZWZhdWx0c19fID0gZnVuYy5fX2t3ZGVmYXVsdHNfXwogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nKToKLSAgICAgICAgICAgIGluc3BlY3QuU2lnbmF0dXJlLmZyb21fZnVuY3Rpb24oZnVuY2xpa2UpCi0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoZnVuY2xpa2UpKSwgJyhtYXJrZXIpJykKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9tZXRob2Qoc2VsZik6CkBAIC0yMjY1LDYgKzI0NzYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoRm9vLmJhciwgZm9sbG93X3dyYXBwZWQ9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmdzJywgLi4uLCAuLi4sICJ2YXJfcG9zaXRpb25hbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9rZXl3b3JkIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKSAjIGZ1bmN0b29scy53cmFwcyB3aWxsIGNvcHkgX19hbm5vdGF0aW9uc19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSAiZnVuYyIgdG8gIndyYXBwZXIiLCBoZW5jZSBubworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybl9hbm5vdGF0aW9uCisKICAgICAgICAgIyBUZXN0IHRoYXQgd2UgaGFuZGxlIG1ldGhvZCB3cmFwcGVycyBjb3JyZWN0bHkKICAgICAgICAgZGVmIGRlY29yYXRvcihmdW5jKToKICAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKQEAgLTI0NzEsNjAgKzI2ODksMTAyIEBACiAgICAgICAgIGRlZiBiYXIoYSwgKiwgYjppbnQpIC0+IGZsb2F0OiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgaGFzaChpbnNwZWN0LnNpZ25hdHVyZShmb28pKSwgaGFzaChpbnNwZWN0LnNpZ25hdHVyZShiYXIpKSkKIAogICAgICAgICBkZWYgYmFyKGEsICosIGI6aW50KSAtPiBpbnQ6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoCisgICAgICAgICAgICBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGZvbykpLCBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGJhcikpKQogCiAgICAgICAgIGRlZiBiYXIoYSwgKiwgYjppbnQpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKAorICAgICAgICAgICAgaGFzaChpbnNwZWN0LnNpZ25hdHVyZShmb28pKSwgaGFzaChpbnNwZWN0LnNpZ25hdHVyZShiYXIpKSkKIAogICAgICAgICBkZWYgYmFyKGEsICosIGI6aW50PTQyKSAtPiBmbG9hdDogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgKKyAgICAgICAgICAgIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoZm9vKSksIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkpCiAKICAgICAgICAgZGVmIGJhcihhLCAqLCBjKSAtPiBmbG9hdDogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgKKyAgICAgICAgICAgIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoZm9vKSksIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkpCiAKICAgICAgICAgZGVmIGJhcihhLCBiOmludCkgLT4gZmxvYXQ6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoCisgICAgICAgICAgICBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGZvbykpLCBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGJhcikpKQogICAgICAgICBkZWYgc3BhbShiOmludCwgYSkgLT4gZmxvYXQ6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShzcGFtKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoc3BhbSkgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgKKyAgICAgICAgICAgIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoc3BhbSkpLCBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGJhcikpKQogCiAgICAgICAgIGRlZiBmb28oKiwgYSwgYiwgYyk6IHBhc3MKICAgICAgICAgZGVmIGJhcigqLCBjLCBiLCBhKTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoZm9vKSksIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkpCiAKICAgICAgICAgZGVmIGZvbygqLCBhPTEsIGIsIGMpOiBwYXNzCiAgICAgICAgIGRlZiBiYXIoKiwgYywgYiwgYT0xKTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoZm9vKSksIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkpCiAKICAgICAgICAgZGVmIGZvbyhwb3MsICosIGE9MSwgYiwgYyk6IHBhc3MKICAgICAgICAgZGVmIGJhcihwb3MsICosIGMsIGIsIGE9MSk6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGZvbykpLCBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGJhcikpKQogCiAgICAgICAgIGRlZiBmb28ocG9zLCAqLCBhLCBiLCBjKTogcGFzcwogICAgICAgICBkZWYgYmFyKHBvcywgKiwgYywgYiwgYT0xKTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgKKyAgICAgICAgICAgIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoZm9vKSksIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkpCiAKICAgICAgICAgZGVmIGZvbyhwb3MsICphcmdzLCBhPTQyLCBiLCBjLCAqKmt3YXJnczppbnQpOiBwYXNzCiAgICAgICAgIGRlZiBiYXIocG9zLCAqYXJncywgYywgYiwgYT00MiwgKiprd2FyZ3M6aW50KTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoZm9vKSksIGhhc2goaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkpCiAKLSAgICBkZWYgdGVzdF9zaWduYXR1cmVfdW5oYXNoYWJsZShzZWxmKToKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfaGFzaGFibGUoc2VsZik6CisgICAgICAgIFMgPSBpbnNwZWN0LlNpZ25hdHVyZQorICAgICAgICBQID0gaW5zcGVjdC5QYXJhbWV0ZXIKKwogICAgICAgICBkZWYgZm9vKGEpOiBwYXNzCi0gICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykKKyAgICAgICAgZm9vX3NpZyA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykKKworICAgICAgICBtYW51YWxfc2lnID0gUyhwYXJhbWV0ZXJzPVtQKCdhJywgUC5QT1NJVElPTkFMX09SX0tFWVdPUkQpXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZm9vX3NpZyksIGhhc2gobWFudWFsX3NpZykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaGFzaChmb29fc2lnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoKG1hbnVhbF9zaWcucmVwbGFjZShyZXR1cm5fYW5ub3RhdGlvbj0nc3BhbScpKSkKKworICAgICAgICBkZWYgYmFyKGEpIC0+IDE6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoYXNoKGZvb19zaWcpLCBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGJhcikpKQorCisgICAgICAgIGRlZiBmb28oYT17fSk6IHBhc3MKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ3VuaGFzaGFibGUgdHlwZScpOgotICAgICAgICAgICAgaGFzaChzaWcpCisgICAgICAgICAgICBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGZvbykpCisKKyAgICAgICAgZGVmIGZvbyhhKSAtPiB7fTogcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAndW5oYXNoYWJsZSB0eXBlJyk6CisgICAgICAgICAgICBoYXNoKGluc3BlY3Quc2lnbmF0dXJlKGZvbykpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfc3RyKHNlbGYpOgogICAgICAgICBkZWYgZm9vKGE6aW50PTEsICosIGIsIGM9Tm9uZSwgKiprd2FyZ3MpIC0+IDQyOgpAQCAtMjU5OCw2ICsyODU4LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoU3BhbS5mb28pLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2lnbmF0dXJlKEhhbS5mb28pKQogCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2Zyb21fY2FsbGFibGVfcHl0aG9uX29iaihzZWxmKToKKyAgICAgICAgY2xhc3MgTXlTaWduYXR1cmUoaW5zcGVjdC5TaWduYXR1cmUpOiBwYXNzCisgICAgICAgIGRlZiBmb28oYSwgKiwgYjoxKTogcGFzcworICAgICAgICBmb29fc2lnID0gTXlTaWduYXR1cmUuZnJvbV9jYWxsYWJsZShmb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZvb19zaWcsIE15U2lnbmF0dXJlKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfZnJvbV9jYWxsYWJsZV9idWlsdGluX29iaihzZWxmKToKKyAgICAgICAgY2xhc3MgTXlTaWduYXR1cmUoaW5zcGVjdC5TaWduYXR1cmUpOiBwYXNzCisgICAgICAgIHNpZyA9IE15U2lnbmF0dXJlLmZyb21fY2FsbGFibGUoX3BpY2tsZS5QaWNrbGVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzaWcsIE15U2lnbmF0dXJlKSkKKwogCiBjbGFzcyBUZXN0UGFyYW1ldGVyT2JqZWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfcGFyYW1ldGVyX2tpbmRzKHNlbGYpOgpAQCAtMjY0Myw2ICsyOTE2LDE2IEBACiAgICAgICAgICAgICBwLnJlcGxhY2Uoa2luZD1pbnNwZWN0LlBhcmFtZXRlci5WQVJfUE9TSVRJT05BTCkKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihwKS5zdGFydHN3aXRoKCc8UGFyYW1ldGVyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnImE9NDIiJyBpbiByZXByKHApKQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3BhcmFtZXRlcl9oYXNoYWJsZShzZWxmKToKKyAgICAgICAgUCA9IGluc3BlY3QuUGFyYW1ldGVyCisgICAgICAgIGZvbyA9IFAoJ2ZvbycsIGtpbmQ9UC5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChmb28pLCBoYXNoKFAoJ2ZvbycsIGtpbmQ9UC5QT1NJVElPTkFMX09OTFkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoYXNoKGZvbyksIGhhc2goUCgnZm9vJywga2luZD1QLlBPU0lUSU9OQUxfT05MWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTQyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaGFzaChmb28pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2goZm9vLnJlcGxhY2Uoa2luZD1QLlZBUl9QT1NJVElPTkFMKSkpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfcGFyYW1ldGVyX2VxdWFsaXR5KHNlbGYpOgogICAgICAgICBQID0gaW5zcGVjdC5QYXJhbWV0ZXIKQEAgLTI2NjAsMTMgKzI5NDMsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgIT0gUCgnZm9vJywgZGVmYXVsdD00MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1pbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkpKQogCi0gICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3BhcmFtZXRlcl91bmhhc2hhYmxlKHNlbGYpOgotICAgICAgICBwID0gaW5zcGVjdC5QYXJhbWV0ZXIoJ2ZvbycsIGRlZmF1bHQ9NDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kPWluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSkKLQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAndW5oYXNoYWJsZSB0eXBlJyk6Ci0gICAgICAgICAgICBoYXNoKHApCi0KICAgICBkZWYgdGVzdF9zaWduYXR1cmVfcGFyYW1ldGVyX3JlcGxhY2Uoc2VsZik6CiAgICAgICAgIHAgPSBpbnNwZWN0LlBhcmFtZXRlcignZm9vJywgZGVmYXVsdD00MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZKQpAQCAtMjczNSw3ICszMDExLDkgQEAKICAgICAgICAgICAgIHNlbGYuY2FsbCh0ZXN0LCAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAndG9vIG1hbnkgcG9zaXRpb25hbCBhcmd1bWVudHMnKToKICAgICAgICAgICAgIHNlbGYuY2FsbCh0ZXN0LCAxLCBzcGFtPTEwKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAndG9vIG1hbnkga2V5d29yZCBhcmd1bWVudHMnKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgVHlwZUVycm9yLCAiZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnc3BhbSciKToKKwogICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIHNwYW09MSkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9iaW5kX3ZhcihzZWxmKToKQEAgLTI3NjAsMTAgKzMwMzgsMTIgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ3RvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzJyk6CiAgICAgICAgICAgICBzZWxmLmNhbGwodGVzdCwgMSwgMiwgMywgNCkKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiJ2InIHBhcmFtZXRlciBsYWNraW5nIGRlZmF1bHQiKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXNzaW5nIGEgcmVxdWlyZWQgYXJndW1lbnQ6ICdiJyIpOgogICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIDEpCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIidhJyBwYXJhbWV0ZXIgbGFja2luZyBkZWZhdWx0Iik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2luZyBhIHJlcXVpcmVkIGFyZ3VtZW50OiAnYSciKToKICAgICAgICAgICAgIHNlbGYuY2FsbCh0ZXN0KQogCiAgICAgICAgIGRlZiB0ZXN0KGEsIGIsIGM9MTApOgpAQCAtMjgzNiw3ICszMTE2LDcgQEAKICAgICAgICAgZGVmIHRlc3QoYSwgKiwgZm9vPTEsIGJhcik6CiAgICAgICAgICAgICByZXR1cm4gZm9vCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidiYXInIHBhcmFtZXRlciBsYWNraW5nIGRlZmF1bHQgdmFsdWUiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2luZyBhIHJlcXVpcmVkIGFyZ3VtZW50OiAnYmFyJyIpOgogICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIDEpCiAKICAgICAgICAgZGVmIHRlc3QoZm9vLCAqLCBiYXIpOgpAQCAtMjg0NCw4ICszMTI0LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNhbGwodGVzdCwgMSwgYmFyPTIpLCAoMSwgMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIGJhcj0yLCBmb289MSksICgxLCAyKSkKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b28gbWFueSBrZXl3b3JkIGFyZ3VtZW50cycpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICBUeXBlRXJyb3IsICJnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICdzcGFtJyIpOgorCiAgICAgICAgICAgICBzZWxmLmNhbGwodGVzdCwgYmFyPTIsIGZvbz0xLCBzcGFtPTEwKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsCkBAIC0yODU2LDEyICszMTM3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzJyk6CiAgICAgICAgICAgICBzZWxmLmNhbGwodGVzdCwgMSwgMiwgYmFyPTIpCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG9vIG1hbnkga2V5d29yZCBhcmd1bWVudHMnKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgVHlwZUVycm9yLCAiZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnc3BhbSciKToKKwogICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIDEsIGJhcj0yLCBzcGFtPSdoYW0nKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidiYXInIHBhcmFtZXRlciBsYWNraW5nIGRlZmF1bHQgdmFsdWUiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2luZyBhIHJlcXVpcmVkIGFyZ3VtZW50OiAnYmFyJyIpOgogICAgICAgICAgICAgc2VsZi5jYWxsKHRlc3QsIDEpCiAKICAgICAgICAgZGVmIHRlc3QoZm9vLCAqLCBiYXIsICoqYmluKToKQEAgLTI4NzMsNyArMzE1NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIHNwYW09J2hhbScsIGZvbz0xLCBiYXI9MiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDIsIHsnc3BhbSc6ICdoYW0nfSkpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIidmb28nIHBhcmFtZXRlciBsYWNraW5nIGRlZmF1bHQgdmFsdWUiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXNzaW5nIGEgcmVxdWlyZWQgYXJndW1lbnQ6ICdmb28nIik6CiAgICAgICAgICAgICBzZWxmLmNhbGwodGVzdCwgc3BhbT0naGFtJywgYmFyPTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIDEsIGJhcj0yLCBiaW49MSwgc3BhbT0xMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDIsIHsnYmluJzogMSwgJ3NwYW0nOiAxMH0pKQpAQCAtMjkzOCw3ICszMjIwLDkgQEAKICAgICAgICAgICAgIHJldHVybiBhLCBhcmdzCiAgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKHRlc3QpCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgInRvbyBtYW55IGtleXdvcmQgYXJndW1lbnRzIik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgImdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJ2FyZ3MnIik6CisKICAgICAgICAgICAgIHNpZy5iaW5kKGE9MCwgYXJncz0xKQogCiAgICAgICAgIGRlZiB0ZXN0KCphcmdzLCAqKmt3YXJncyk6CkBAIC0yOTgyLDYgKzMyNjYsNzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYSA9PSBiYTQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYSAhPSBiYTQpCiAKKyAgICAgICAgZGVmIGZvbygqLCBhLCBiKTogcGFzcworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pCisgICAgICAgIGJhMSA9IHNpZy5iaW5kKGE9MSwgYj0yKQorICAgICAgICBiYTIgPSBzaWcuYmluZChiPTIsIGE9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhMSA9PSBiYTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmExICE9IGJhMikKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9ib3VuZF9hcmd1bWVudHNfcGlja2xlKHNlbGYpOgorICAgICAgICBkZWYgZm9vKGEsIGIsICosIGM6MT17fSwgKiprdykgLT4gezQyOidoYW0nfTogcGFzcworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pCisgICAgICAgIGJhID0gc2lnLmJpbmQoMjAsIDMwLCB6PXt9KQorCisgICAgICAgIGZvciB2ZXIgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBpY2tsZV92ZXI9dmVyKToKKyAgICAgICAgICAgICAgICBiYV9waWNrbGVkID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhiYSwgdmVyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhLCBiYV9waWNrbGVkKQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2JvdW5kX2FyZ3VtZW50c19yZXByKHNlbGYpOgorICAgICAgICBkZWYgZm9vKGEsIGIsICosIGM6MT17fSwgKiprdykgLT4gezQyOidoYW0nfTogcGFzcworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pCisgICAgICAgIGJhID0gc2lnLmJpbmQoMjAsIDMwLCB6PXt9KQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoYmEpLCByJzxCb3VuZEFyZ3VtZW50cyBcKGE9MjAsLipcfVx9XCk+JykKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9ib3VuZF9hcmd1bWVudHNfYXBwbHlfZGVmYXVsdHMoc2VsZik6CisgICAgICAgIGRlZiBmb28oYSwgYj0xLCAqYXJncywgYzoxPXt9LCAqKmt3KTogcGFzcworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pCisKKyAgICAgICAgYmEgPSBzaWcuYmluZCgyMCkKKyAgICAgICAgYmEuYXBwbHlfZGVmYXVsdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChiYS5hcmd1bWVudHMuaXRlbXMoKSksCisgICAgICAgICAgICBbKCdhJywgMjApLCAoJ2InLCAxKSwgKCdhcmdzJywgKCkpLCAoJ2MnLCB7fSksICgna3cnLCB7fSldKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2UgcHJlc2VydmUgdGhlIG9yZGVyOgorICAgICAgICAjIGkuZS4gJ2MnIHNob3VsZCBiZSAqYmVmb3JlKiAna3cnLgorICAgICAgICBiYSA9IHNpZy5iaW5kKDEwLCAyMCwgMzAsIGQ9MSkKKyAgICAgICAgYmEuYXBwbHlfZGVmYXVsdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChiYS5hcmd1bWVudHMuaXRlbXMoKSksCisgICAgICAgICAgICBbKCdhJywgMTApLCAoJ2InLCAyMCksICgnYXJncycsICgzMCwpKSwgKCdjJywge30pLCAoJ2t3JywgeydkJzoxfSldKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgQm91bmRBcmd1bWVudHMgcHJvZHVjZWQgYnkgYmluZF9wYXJ0aWFsKCkKKyAgICAgICAgIyBhcmUgc3VwcG9ydGVkLgorICAgICAgICBkZWYgZm9vKGEsIGIpOiBwYXNzCisgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykKKyAgICAgICAgYmEgPSBzaWcuYmluZF9wYXJ0aWFsKDIwKQorICAgICAgICBiYS5hcHBseV9kZWZhdWx0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBsaXN0KGJhLmFyZ3VtZW50cy5pdGVtcygpKSwKKyAgICAgICAgICAgIFsoJ2EnLCAyMCldKQorCisgICAgICAgICMgVGVzdCBubyBhcmdzCisgICAgICAgIGRlZiBmb28oKTogcGFzcworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pCisgICAgICAgIGJhID0gc2lnLmJpbmQoKQorICAgICAgICBiYS5hcHBseV9kZWZhdWx0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiYS5hcmd1bWVudHMuaXRlbXMoKSksIFtdKQorCisgICAgICAgICMgTWFrZSBzdXJlIGEgbm8tYXJncyBiaW5kaW5nIHN0aWxsIGFjcXVpcmVzIHByb3BlciBkZWZhdWx0cy4KKyAgICAgICAgZGVmIGZvbyhhPSdzcGFtJyk6IHBhc3MKKyAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUoZm9vKQorICAgICAgICBiYSA9IHNpZy5iaW5kKCkKKyAgICAgICAgYmEuYXBwbHlfZGVmYXVsdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYmEuYXJndW1lbnRzLml0ZW1zKCkpLCBbKCdhJywgJ3NwYW0nKV0pCisKIAogY2xhc3MgVGVzdFNpZ25hdHVyZVByaXZhdGVIZWxwZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfZ2V0X2JvdW5kX3BhcmFtKHNlbGYpOgpAQCAtMzA0Niw2ICszMzk1LDYxIEBACiAgICAgICAgICAgICBOb25lLAogICAgICAgICAgICAgTm9uZSkKIAorY2xhc3MgVGVzdFNpZ25hdHVyZURlZmluaXRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoaXMgdGVzdCBjYXNlIHByb3ZpZGVzIGEgaG9tZSBmb3IgY2hlY2tpbmcgdGhhdCBwYXJ0aWN1bGFyIEFQSXMKKyAgICAjIGhhdmUgc2lnbmF0dXJlcyBhdmFpbGFibGUgZm9yIGludHJvc3BlY3Rpb24KKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3RfYnVpbHRpbnNfaGF2ZV9zaWduYXR1cmVzKHNlbGYpOgorICAgICAgICAjIFRoaXMgY2hlY2tzIGFsbCBidWlsdGluIGNhbGxhYmxlcyBpbiBDUHl0aG9uIGhhdmUgc2lnbmF0dXJlcworICAgICAgICAjIEEgZmV3IGhhdmUgc2lnbmF0dXJlcyBTaWduYXR1cmUgY2FuJ3QgeWV0IGhhbmRsZSwgc28gd2Ugc2tpcCB0aG9zZQorICAgICAgICAjIHNpbmNlIHRoZXkgd2lsbCBoYXZlIHRvIHdhaXQgdW50aWwgUEVQIDQ1NyBhZGRzIHRoZSByZXF1aXJlZAorICAgICAgICAjIGludHJvc3BlY3Rpb24gc3VwcG9ydCB0byB0aGUgaW5zcGVjdCBtb2R1bGUKKyAgICAgICAgIyBTb21lIG90aGVycyBhbHNvIGhhdmVuJ3QgYmVlbiBjb252ZXJ0ZWQgeWV0IGZvciB2YXJpb3VzIG90aGVyCisgICAgICAgICMgcmVhc29ucywgc28gd2UgYWxzbyBza2lwIHRob3NlIGZvciB0aGUgdGltZSBiZWluZywgYnV0IGRlc2lnbgorICAgICAgICAjIHRoZSB0ZXN0IHRvIGZhaWwgaW4gb3JkZXIgdG8gaW5kaWNhdGUgd2hlbiBpdCBuZWVkcyB0byBiZQorICAgICAgICAjIHVwZGF0ZWQuCisgICAgICAgIG5vX3NpZ25hdHVyZSA9IHNldCgpCisgICAgICAgICMgVGhlc2UgbmVlZCBQRVAgNDU3IGdyb3VwcworICAgICAgICBuZWVkc19ncm91cHMgPSB7InJhbmdlIiwgInNsaWNlIiwgImRpciIsICJnZXRhdHRyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJuZXh0IiwgIml0ZXIiLCAidmFycyJ9CisgICAgICAgIG5vX3NpZ25hdHVyZSB8PSBuZWVkc19ncm91cHMKKyAgICAgICAgIyBUaGVzZSBuZWVkIFBFUCA0NTcgZ3JvdXBzIG9yIGEgc2lnbmF0dXJlIGNoYW5nZSB0byBhY2NlcHQgTm9uZQorICAgICAgICBuZWVkc19zZW1hbnRpY191cGRhdGUgPSB7InJvdW5kIn0KKyAgICAgICAgbm9fc2lnbmF0dXJlIHw9IG5lZWRzX3NlbWFudGljX3VwZGF0ZQorICAgICAgICAjIFRoZXNlIG5lZWQgKmFyZ3Mgc3VwcG9ydCBpbiBBcmd1bWVudCBDbGluaWMKKyAgICAgICAgbmVlZHNfdmFyYXJncyA9IHsibWluIiwgIm1heCIsICJwcmludCIsICJfX2J1aWxkX2NsYXNzX18ifQorICAgICAgICBub19zaWduYXR1cmUgfD0gbmVlZHNfdmFyYXJncworICAgICAgICAjIFRoZXNlIHNpbXBseSB3ZXJlbid0IGNvdmVyZWQgaW4gdGhlIGluaXRpYWwgQUMgY29udmVyc2lvbgorICAgICAgICAjIGZvciBidWlsdGluIGNhbGxhYmxlcworICAgICAgICBub3RfY29udmVydGVkX3lldCA9IHsib3BlbiIsICJfX2ltcG9ydF9fIn0KKyAgICAgICAgbm9fc2lnbmF0dXJlIHw9IG5vdF9jb252ZXJ0ZWRfeWV0CisgICAgICAgICMgVGhlc2UgYnVpbHRpbiB0eXBlcyBhcmUgZXhwZWN0ZWQgdG8gcHJvdmlkZSBpbnRyb3NwZWN0aW9uIGluZm8KKyAgICAgICAgdHlwZXNfd2l0aF9zaWduYXR1cmVzID0gc2V0KCkKKyAgICAgICAgIyBDaGVjayB0aGUgc2lnbmF0dXJlcyB3ZSBleHBlY3QgdG8gYmUgdGhlcmUKKyAgICAgICAgbnMgPSB2YXJzKGJ1aWx0aW5zKQorICAgICAgICBmb3IgbmFtZSwgb2JqIGluIHNvcnRlZChucy5pdGVtcygpKToKKyAgICAgICAgICAgIGlmIG5vdCBjYWxsYWJsZShvYmopOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIFRoZSBidWlsdGluIHR5cGVzIGhhdmVuJ3QgYmVlbiBjb252ZXJ0ZWQgdG8gQUMgeWV0CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSkgYW5kIChuYW1lIG5vdCBpbiB0eXBlc193aXRoX3NpZ25hdHVyZXMpOgorICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgYWxzbyBza2lwcyBhbGwgdGhlIGV4Y2VwdGlvbiB0eXBlcworICAgICAgICAgICAgICAgIG5vX3NpZ25hdHVyZS5hZGQobmFtZSkKKyAgICAgICAgICAgIGlmIChuYW1lIGluIG5vX3NpZ25hdHVyZSk6CisgICAgICAgICAgICAgICAgIyBOb3QgeWV0IGNvbnZlcnRlZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChidWlsdGluPW5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGluc3BlY3Quc2lnbmF0dXJlKG9iaikpCisgICAgICAgICMgQ2hlY2sgY2FsbGFibGVzIHRoYXQgaGF2ZW4ndCBiZWVuIGNvbnZlcnRlZCBkb24ndCBjbGFpbSBhIHNpZ25hdHVyZQorICAgICAgICAjIFRoaXMgZW5zdXJlcyB0aGlzIHRlc3Qgd2lsbCBzdGFydCBmYWlsaW5nIGFzIG1vcmUgc2lnbmF0dXJlcyBhcmUKKyAgICAgICAgIyBhZGRlZCwgc28gdGhlIGFmZmVjdGVkIGl0ZW1zIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSBzY29wZSBvZiB0aGUKKyAgICAgICAgIyByZWdyZXNzaW9uIHRlc3QgYWJvdmUKKyAgICAgICAgZm9yIG5hbWUgaW4gbm9fc2lnbmF0dXJlOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYnVpbHRpbj1uYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShvYmouX190ZXh0X3NpZ25hdHVyZV9fKQorCiAKIGNsYXNzIFRlc3RVbndyYXAodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zMTg3LDggKzM1OTEsMTAgQEAKICAgICAgICAgVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zLCBUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzLAogICAgICAgICBUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgVGVzdEdldGF0dHJTdGF0aWMsIFRlc3RHZXRHZW5lcmF0b3JTdGF0ZSwKICAgICAgICAgVGVzdE5vRU9MLCBUZXN0U2lnbmF0dXJlT2JqZWN0LCBUZXN0U2lnbmF0dXJlQmluZCwgVGVzdFBhcmFtZXRlck9iamVjdCwKLSAgICAgICAgVGVzdEJvdW5kQXJndW1lbnRzLCBUZXN0U2lnbmF0dXJlUHJpdmF0ZUhlbHBlcnMsIFRlc3RHZXRDbG9zdXJlVmFycywKLSAgICAgICAgVGVzdFVud3JhcCwgVGVzdE1haW4sIFRlc3RSZWxvYWQKKyAgICAgICAgVGVzdEJvdW5kQXJndW1lbnRzLCBUZXN0U2lnbmF0dXJlUHJpdmF0ZUhlbHBlcnMsCisgICAgICAgIFRlc3RTaWduYXR1cmVEZWZpbml0aW9ucywKKyAgICAgICAgVGVzdEdldENsb3N1cmVWYXJzLCBUZXN0VW53cmFwLCBUZXN0TWFpbiwgVGVzdFJlbG9hZCwKKyAgICAgICAgVGVzdEdldENvcm91dGluZVN0YXRlCiAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbnQucHkgYi9MaWIvdGVzdC90ZXN0X2ludC5weQppbmRleCA0OTA2ZTQ2Li5iNjZjNWQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ludC5weQpAQCAtNDgyLDggKzQ4Miw1IEBACiAgICAgICAgIGNoZWNrKCcxMjNcdWQ4MDAnKQogICAgICAgICBjaGVjaygnMTIzXHVkODAwJywgMTApCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChJbnRUZXN0Q2FzZXMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW50X2xpdGVyYWwucHkgYi9MaWIvdGVzdC90ZXN0X2ludF9saXRlcmFsLnB5CmluZGV4IDFkNTc4YTcuLmJmNzI1NzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW50X2xpdGVyYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbnRfbGl0ZXJhbC5weQpAQCAtNCw3ICs0LDYgQEAKICIiIgogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBjbGFzcyBUZXN0SGV4T2N0QmluKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTQwLDggKzEzOSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgLTkyMjMzNzIwMzY4NTQ3NzU4MDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSwgLTE4NDQ2NzQ0MDczNzA5NTUxNjE1KQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEhleE9jdEJpbikKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pby5weSBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKaW5kZXggODZjZjhlMS4uNTExMTg4MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lvLnB5CkBAIC0zNSw3ICszNSw3IEBACiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSwgVXNlckxpc3QKIGZyb20gaXRlcnRvb2xzIGltcG9ydCBjeWNsZSwgY291bnQKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIHJ1bl9weXRob25fdW50aWxfZW5kCitmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBydW5fcHl0aG9uX3VudGlsX2VuZAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgaW8gICMgQyBpbXBsZW1lbnRhdGlvbiBvZiBpbwpAQCAtNDQsMTAgKzQ0LDIyIEBACiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKKwogdHJ5OgotICAgIGltcG9ydCBmY250bAorICAgIGltcG9ydCBjdHlwZXMKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBmY250bCA9IE5vbmUKKyAgICBkZWYgYnl0ZXNsaWtlKCpwb3MsICoqa3cpOgorICAgICAgICByZXR1cm4gYXJyYXkuYXJyYXkoImIiLCBieXRlcygqcG9zLCAqKmt3KSkKK2Vsc2U6CisgICAgZGVmIGJ5dGVzbGlrZSgqcG9zLCAqKmt3KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgYnl0ZXMtbGlrZSBvYmplY3QgaGF2aW5nIG5vIHN0cmluZyBvciBzZXF1ZW5jZSBtZXRob2RzIiIiCisgICAgICAgIGRhdGEgPSBieXRlcygqcG9zLCAqKmt3KQorICAgICAgICBvYmogPSBFbXB0eVN0cnVjdCgpCisgICAgICAgIGN0eXBlcy5yZXNpemUob2JqLCBsZW4oZGF0YSkpCisgICAgICAgIG1lbW9yeXZpZXcob2JqKS5jYXN0KCJCIilbOl0gPSBkYXRhCisgICAgICAgIHJldHVybiBvYmoKKyAgICBjbGFzcyBFbXB0eVN0cnVjdChjdHlwZXMuU3RydWN0dXJlKToKKyAgICAgICAgcGFzcwogCiBkZWYgX2RlZmF1bHRfY2h1bmtfc2l6ZSgpOgogICAgICIiIkdldCB0aGUgZGVmYXVsdCBUZXh0SU9XcmFwcGVyIGNodW5rIHNpemUiIiIKQEAgLTIwNyw2ICsyMTksOSBAQAogICAgIGRlZiB0ZWxsKHNlbGYsICphcmdzKToKICAgICAgICAgcmFpc2Ugc2VsZi5VbnN1cHBvcnRlZE9wZXJhdGlvbigibm90IHNlZWthYmxlIikKIAorICAgIGRlZiB0cnVuY2F0ZShzZWxmLCAqYXJncyk6CisgICAgICAgIHJhaXNlIHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24oIm5vdCBzZWVrYWJsZSIpCisKIGNsYXNzIENNb2NrVW5zZWVrYWJsZUlPKE1vY2tVbnNlZWthYmxlSU8sIGlvLkJ5dGVzSU8pOgogICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIApAQCAtMjg1LDcgKzMwMCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKC0xLCAxKSwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGJ5dGVhcnJheShiIiB3b3JsZFxuXG5cbiIpKSwgOSkKKyAgICAgICAgYnVmZmVyID0gYnl0ZWFycmF5KGIiIHdvcmxkXG5cblxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGJ1ZmZlciksIDkpCisgICAgICAgIGJ1ZmZlcls6XSA9IGIiKiIgKiA5ICAjIE92ZXJ3cml0ZSBvdXIgY29weSBvZiB0aGUgZGF0YQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGIiaCIpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygtMSwgMiksIDEzKQpAQCAtMjk4LDIwICszMTUsMjEgQEAKICAgICBkZWYgcmVhZF9vcHMoc2VsZiwgZiwgYnVmZmVyZWQ9RmFsc2UpOgogICAgICAgICBkYXRhID0gZi5yZWFkKDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiJoZWxsbyIpCi0gICAgICAgIGRhdGEgPSBieXRlYXJyYXkoZGF0YSkKKyAgICAgICAgZGF0YSA9IGJ5dGVzbGlrZShkYXRhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGludG8oZGF0YSksIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiIgd29ybCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoZGF0YSksIGIiIHdvcmwiKQorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkaW50byhkYXRhKSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGF0YSksIDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YVs6Ml0sIGIiZFxuIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDIwKSwgYiJoZWxsbyB3b3JsZFxuIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksIGIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRpbnRvKGJ5dGVhcnJheShiIngiKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkaW50byhieXRlc2xpa2UoYiJ4IikpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygtNiwgMiksIDYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDUpLCBiIndvcmxkIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMCksIGIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRpbnRvKGJ5dGVhcnJheSgpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRpbnRvKGJ5dGVzbGlrZSgpKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoLTYsIDEpLCA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCg1KSwgYiIgd29ybCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDEwKQpAQCAtMzIyLDYgKzM0MCwxMCBAQAogICAgICAgICAgICAgZi5zZWVrKDYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIndvcmxkXG4iKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiIiKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBkYXRhID0gYnl0ZXNsaWtlKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGludG8xKGRhdGEpLCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhkYXRhKSwgYiJoZWxsbyIpCiAKICAgICBMQVJHRSA9IDIqKjMxCiAKQEAgLTM2NSwxMCArMzg3LDExNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBmcC5zZWVrLCAxLCBzZWxmLlNFRUtfQ1VSKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBmcC5zZWVrLCAtMSwgc2VsZi5TRUVLX0VORCkKIAorICAgIGRlZiB0ZXN0X29wdGlvbmFsX2FiaWxpdGllcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBPU0Vycm9yIHdoZW4gb3B0aW9uYWwgQVBJcyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICAjIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB0cnkgZmlsZW5vKCksIHJlYWRpbmcsIHdyaXRpbmcgYW5kCisgICAgICAgICMgc2Vla2luZyBvcGVyYXRpb25zIHdpdGggdmFyaW91cyBvYmplY3RzIHRoYXQgaW5kaWNhdGUgdGhleSBkbyBub3QKKyAgICAgICAgIyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMuCisKKyAgICAgICAgZGVmIHBpcGVfcmVhZGVyKCk6CisgICAgICAgICAgICBbciwgd10gPSBvcy5waXBlKCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpICAjIFNvIHRoYXQgcmVhZCgpIGlzIGhhcm1sZXNzCisgICAgICAgICAgICByZXR1cm4gc2VsZi5GaWxlSU8ociwgInIiKQorCisgICAgICAgIGRlZiBwaXBlX3dyaXRlcigpOgorICAgICAgICAgICAgW3IsIHddID0gb3MucGlwZSgpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHIpCisgICAgICAgICAgICAjIEd1YXJhbnRlZSB0aGF0IHdlIGNhbiB3cml0ZSBpbnRvIHRoZSBwaXBlIHdpdGhvdXQgYmxvY2tpbmcKKyAgICAgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PW9zLnJlYWQsIGFyZ3M9KHIsIDEwMCkpCisgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRocmVhZC5qb2luKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuRmlsZUlPKHcsICJ3IikKKworICAgICAgICBkZWYgYnVmZmVyZWRfcmVhZGVyKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5CdWZmZXJlZFJlYWRlcihzZWxmLk1vY2tVbnNlZWthYmxlSU8oKSkKKworICAgICAgICBkZWYgYnVmZmVyZWRfd3JpdGVyKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5CdWZmZXJlZFdyaXRlcihzZWxmLk1vY2tVbnNlZWthYmxlSU8oKSkKKworICAgICAgICBkZWYgYnVmZmVyZWRfcmFuZG9tKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5CdWZmZXJlZFJhbmRvbShzZWxmLkJ5dGVzSU8oKSkKKworICAgICAgICBkZWYgYnVmZmVyZWRfcndfcGFpcigpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuQnVmZmVyZWRSV1BhaXIoc2VsZi5Nb2NrVW5zZWVrYWJsZUlPKCksCisgICAgICAgICAgICAgICAgc2VsZi5Nb2NrVW5zZWVrYWJsZUlPKCkpCisKKyAgICAgICAgZGVmIHRleHRfcmVhZGVyKCk6CisgICAgICAgICAgICBjbGFzcyBVbnNlZWthYmxlUmVhZGVyKHNlbGYuTW9ja1Vuc2Vla2FibGVJTyk6CisgICAgICAgICAgICAgICAgd3JpdGFibGUgPSBzZWxmLkJ1ZmZlcmVkSU9CYXNlLndyaXRhYmxlCisgICAgICAgICAgICAgICAgd3JpdGUgPSBzZWxmLkJ1ZmZlcmVkSU9CYXNlLndyaXRlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5UZXh0SU9XcmFwcGVyKFVuc2Vla2FibGVSZWFkZXIoKSwgImFzY2lpIikKKworICAgICAgICBkZWYgdGV4dF93cml0ZXIoKToKKyAgICAgICAgICAgIGNsYXNzIFVuc2Vla2FibGVXcml0ZXIoc2VsZi5Nb2NrVW5zZWVrYWJsZUlPKToKKyAgICAgICAgICAgICAgICByZWFkYWJsZSA9IHNlbGYuQnVmZmVyZWRJT0Jhc2UucmVhZGFibGUKKyAgICAgICAgICAgICAgICByZWFkID0gc2VsZi5CdWZmZXJlZElPQmFzZS5yZWFkCisgICAgICAgICAgICByZXR1cm4gc2VsZi5UZXh0SU9XcmFwcGVyKFVuc2Vla2FibGVXcml0ZXIoKSwgImFzY2lpIikKKworICAgICAgICB0ZXN0cyA9ICgKKyAgICAgICAgICAgIChwaXBlX3JlYWRlciwgImZyIiksIChwaXBlX3dyaXRlciwgImZ3IiksCisgICAgICAgICAgICAoYnVmZmVyZWRfcmVhZGVyLCAiciIpLCAoYnVmZmVyZWRfd3JpdGVyLCAidyIpLAorICAgICAgICAgICAgKGJ1ZmZlcmVkX3JhbmRvbSwgInJ3cyIpLCAoYnVmZmVyZWRfcndfcGFpciwgInJ3IiksCisgICAgICAgICAgICAodGV4dF9yZWFkZXIsICJyIiksICh0ZXh0X3dyaXRlciwgInciKSwKKyAgICAgICAgICAgIChzZWxmLkJ5dGVzSU8sICJyd3MiKSwgKHNlbGYuU3RyaW5nSU8sICJyd3MiKSwKKyAgICAgICAgKQorICAgICAgICBmb3IgW3Rlc3QsIGFiaWxpdGllc10gaW4gdGVzdHM6CisgICAgICAgICAgICBpZiB0ZXN0IGlzIHBpcGVfd3JpdGVyIGFuZCBub3QgdGhyZWFkaW5nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlICAjIFNraXAgc3VidGVzdCB0aGF0IHVzZXMgYSBiYWNrZ3JvdW5kIHRocmVhZAorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodGVzdCksIHRlc3QoKSBhcyBvYmo6CisgICAgICAgICAgICAgICAgcmVhZGFibGUgPSAiciIgaW4gYWJpbGl0aWVzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoucmVhZGFibGUoKSwgcmVhZGFibGUpCisgICAgICAgICAgICAgICAgd3JpdGFibGUgPSAidyIgaW4gYWJpbGl0aWVzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoud3JpdGFibGUoKSwgd3JpdGFibGUpCisKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgc2VsZi5UZXh0SU9CYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICIzIgorICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIChzZWxmLkJ1ZmZlcmVkSU9CYXNlLCBzZWxmLlJhd0lPQmFzZSkpOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gYiIzIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiVW5rbm93biBiYXNlIGNsYXNzIikKKworICAgICAgICAgICAgICAgIGlmICJmIiBpbiBhYmlsaXRpZXM6CisgICAgICAgICAgICAgICAgICAgIG9iai5maWxlbm8oKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9iai5maWxlbm8pCisKKyAgICAgICAgICAgICAgICBpZiByZWFkYWJsZToKKyAgICAgICAgICAgICAgICAgICAgb2JqLnJlYWQoMSkKKyAgICAgICAgICAgICAgICAgICAgb2JqLnJlYWQoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9iai5yZWFkLCAxKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvYmoucmVhZCkKKworICAgICAgICAgICAgICAgIGlmIHdyaXRhYmxlOgorICAgICAgICAgICAgICAgICAgICBvYmoud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvYmoud3JpdGUsIGRhdGEpCisKKyAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIikgYW5kIHRlc3QgaW4gKAorICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9yZWFkZXIsIHBpcGVfd3JpdGVyKToKKyAgICAgICAgICAgICAgICAgICAgIyBQaXBlcyBzZWVtIHRvIGFwcGVhciBhcyBzZWVrYWJsZSBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2Vla2FibGUgPSAicyIgaW4gYWJpbGl0aWVzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc2Vla2FibGUoKSwgc2Vla2FibGUpCisKKyAgICAgICAgICAgICAgICBpZiBzZWVrYWJsZToKKyAgICAgICAgICAgICAgICAgICAgb2JqLnRlbGwoKQorICAgICAgICAgICAgICAgICAgICBvYmouc2VlaygwKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9iai50ZWxsKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvYmouc2VlaywgMCkKKworICAgICAgICAgICAgICAgIGlmIHdyaXRhYmxlIGFuZCBzZWVrYWJsZToKKyAgICAgICAgICAgICAgICAgICAgb2JqLnRydW5jYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqLnRydW5jYXRlKDApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb2JqLnRydW5jYXRlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvYmoudHJ1bmNhdGUsIDApCisKICAgICBkZWYgdGVzdF9vcGVuX2hhbmRsZXNfTlVMX2NoYXJzKHNlbGYpOgogICAgICAgICBmbl93aXRoX05VTCA9ICdmb29cMGJhcicKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm9wZW4sIGZuX3dpdGhfTlVMLCAndycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5vcGVuLCBieXRlcyhmbl93aXRoX05VTCwgJ2FzY2lpJyksICd3JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5vcGVuLCBmbl93aXRoX05VTCwgJ3cnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLm9wZW4sIGJ5dGVzKGZuX3dpdGhfTlVMLCAnYXNjaWknKSwgJ3cnKQogCiAgICAgZGVmIHRlc3RfcmF3X2ZpbGVfaW8oc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkgYXMgZjoKQEAgLTUzMiwxMCArNjYwLDE1IEBACiAgICAgZGVmIHRlc3RfYXJyYXlfd3JpdGVzKHNlbGYpOgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ2knLCByYW5nZSgxMCkpCiAgICAgICAgIG4gPSBsZW4oYS50b2J5dGVzKCkpCi0gICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCAwKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGEpLCBuKQotICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZShhKSwgbikKKyAgICAgICAgZGVmIGNoZWNrKGYpOgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZShhKSwgbikKKyAgICAgICAgICAgICAgICBmLndyaXRlbGluZXMoKGEsKSkKKyAgICAgICAgY2hlY2soc2VsZi5CeXRlc0lPKCkpCisgICAgICAgIGNoZWNrKHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidyIpKQorICAgICAgICBjaGVjayhzZWxmLkJ1ZmZlcmVkV3JpdGVyKHNlbGYuTW9ja1Jhd0lPKCkpKQorICAgICAgICBjaGVjayhzZWxmLkJ1ZmZlcmVkUmFuZG9tKHNlbGYuTW9ja1Jhd0lPKCkpKQorICAgICAgICBjaGVjayhzZWxmLkJ1ZmZlcmVkUldQYWlyKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpKQogCiAgICAgZGVmIHRlc3RfY2xvc2VmZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5vcGVuLCBzdXBwb3J0LlRFU1RGTiwgJ3cnLApAQCAtNjcyLDYgKzgwNSwyMiBAQAogICAgICAgICB3aXRoIHNlbGYub3Blbigibm9uLWV4aXN0ZW50IiwgInIiLCBvcGVuZXI9b3BlbmVyKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgImVnZ1xuIikKIAorICAgIGRlZiB0ZXN0X2JhZF9vcGVuZXJfbmVnYXRpdmVfMShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjcwNjYuCisgICAgICAgIGRlZiBiYWRvcGVuZXIoZm5hbWUsIGZsYWdzKToKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgb3Blbignbm9uLWV4aXN0ZW50JywgJ3InLCBvcGVuZXI9YmFkb3BlbmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAnb3BlbmVyIHJldHVybmVkIC0xJykKKworICAgIGRlZiB0ZXN0X2JhZF9vcGVuZXJfb3RoZXJfbmVnYXRpdmUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI3MDY2LgorICAgICAgICBkZWYgYmFkb3BlbmVyKGZuYW1lLCBmbGFncyk6CisgICAgICAgICAgICByZXR1cm4gLTIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG9wZW4oJ25vbi1leGlzdGVudCcsICdyJywgb3BlbmVyPWJhZG9wZW5lcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ29wZW5lciByZXR1cm5lZCAtMicpCisKICAgICBkZWYgdGVzdF9maWxlaW9fY2xvc2VmZChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNDg0MQogICAgICAgICB3aXRoIHNlbGYub3BlbihfX2ZpbGVfXywgJ3JiJykgYXMgZjEsIFwKQEAgLTY4NSwxOCArODM0LDI3IEBACiAgICAgICAgICAgICBmMi5yZWFkbGluZSgpCiAKICAgICBkZWYgdGVzdF9ub25idWZmZXJlZF90ZXh0aW8oc2VsZik6Ci0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHJlY29yZGVkOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfbm9fcmVzb3VyY2Vfd2FybmluZyhzZWxmKToKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAndycsIGJ1ZmZlcmluZz0wKQotICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmRlZCwgW10pCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkX25ld2xpbmUoc2VsZik6Ci0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHJlY29yZGVkOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfbm9fcmVzb3VyY2Vfd2FybmluZyhzZWxmKToKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAndycsIG5ld2xpbmU9J2ludmFsaWQnKQotICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmRlZCwgW10pCisKKyAgICBkZWYgdGVzdF9idWZmZXJlZF9yZWFkaW50b19taXhpbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSBCdWZmZXJlZElPQmFzZQorICAgICAgICBjbGFzcyBTdHJlYW0oc2VsZi5CdWZmZXJlZElPQmFzZSk6CisgICAgICAgICAgICBkZWYgcmVhZChzZWxmLCBzaXplKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYiIxMjM0NSIKKyAgICAgICAgICAgIHJlYWQxID0gcmVhZAorICAgICAgICBzdHJlYW0gPSBTdHJlYW0oKQorICAgICAgICBmb3IgbWV0aG9kIGluICgicmVhZGludG8iLCAicmVhZGludG8xIik6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtZXRob2QpOgorICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ5dGVzbGlrZSg1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihzdHJlYW0sIG1ldGhvZCkoYnVmZmVyKSwgNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGJ1ZmZlciksIGIiMTIzNDUiKQogCiAKIGNsYXNzIENJT1Rlc3QoSU9UZXN0KToKQEAgLTcyMyw2ICs4ODEsMjEgQEAKICAgICBwYXNzCiAKIAorQHN1cHBvcnQuY3B5dGhvbl9vbmx5CitjbGFzcyBBUElNaXNtYXRjaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfUmF3SU9CYXNlX2lvX2luX3B5aW9fbWF0Y2goc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhhdCBweWlvIFJhd0lPQmFzZSBjbGFzcyBoYXMgYWxsIGMgUmF3SU9CYXNlIG1ldGhvZHMiIiIKKyAgICAgICAgbWlzbWF0Y2ggPSBzdXBwb3J0LmRldGVjdF9hcGlfbWlzbWF0Y2gocHlpby5SYXdJT0Jhc2UsIGlvLlJhd0lPQmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlPSgnX193ZWFrcmVmX18nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWlzbWF0Y2gsIHNldCgpLCBtc2c9J1B5dGhvbiBSYXdJT0Jhc2UgZG9lcyBub3QgaGF2ZSBhbGwgQyBSYXdJT0Jhc2UgbWV0aG9kcycpCisKKyAgICBkZWYgdGVzdF9SYXdJT0Jhc2VfcHlpb19pbl9pb19tYXRjaChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGF0IGMgUmF3SU9CYXNlIGNsYXNzIGhhcyBhbGwgcHlpbyBSYXdJT0Jhc2UgbWV0aG9kcyIiIgorICAgICAgICBtaXNtYXRjaCA9IHN1cHBvcnQuZGV0ZWN0X2FwaV9taXNtYXRjaChpby5SYXdJT0Jhc2UsIHB5aW8uUmF3SU9CYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pc21hdGNoLCBzZXQoKSwgbXNnPSdDIFJhd0lPQmFzZSBkb2VzIG5vdCBoYXZlIGFsbCBQeXRob24gUmF3SU9CYXNlIG1ldGhvZHMnKQorCisKIGNsYXNzIENvbW1vbkJ1ZmZlcmVkVGVzdHM6CiAgICAgIyBUZXN0cyBjb21tb24gdG8gQnVmZmVyZWRSZWFkZXIsIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbQogCkBAIC03NDAsMTIgKzkxMyw2IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgYnVmaW8uZmlsZW5vKCkpCiAKLSAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBoYXZpbmcgZXhpc3RlbnRpYWwgY3Jpc2lzJykKLSAgICBkZWYgdGVzdF9ub19maWxlbm8oc2VsZik6Ci0gICAgICAgICMgWFhYIHdpbGwgd2UgYWx3YXlzIGhhdmUgZmlsZW5vKCkgZnVuY3Rpb24/IElmIHNvLCBraWxsCi0gICAgICAgICMgdGhpcyB0ZXN0LiBFbHNlLCB3cml0ZSBpdC4KLSAgICAgICAgcGFzcwotCiAgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgogICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQpAQCAtNzczLDEzICs5NDAsOSBAQAogICAgICAgICAgICAgICAgIHN1cGVyKCkuZmx1c2goKQogICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgYnVmaW8gPSBNeUJ1ZmZlcmVkSU8ocmF3aW8pCi0gICAgICAgIHdyaXRhYmxlID0gYnVmaW8ud3JpdGFibGUoKQogICAgICAgICBkZWwgYnVmaW8KICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgaWYgd3JpdGFibGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzEsIDIsIDNdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyLCAzXSkKIAogICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKICAgICAgICAgIyBUZXN0IHVzYWJpbGl0eSBhcyBhIGNvbnRleHQgbWFuYWdlcgpAQCAtODExLDcgKzk3NCw3IEBACiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBiID0gc2VsZi50cChyYXcpCi0gICAgICAgIGNsc25hbWUgPSAiJXMuJXMiICUgKHNlbGYudHAuX19tb2R1bGVfXywgc2VsZi50cC5fX25hbWVfXykKKyAgICAgICAgY2xzbmFtZSA9ICIlcy4lcyIgJSAoc2VsZi50cC5fX21vZHVsZV9fLCBzZWxmLnRwLl9fcXVhbG5hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGIpLCAiPCVzPiIgJSBjbHNuYW1lKQogICAgICAgICByYXcubmFtZSA9ICJkdW1teSIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGIpLCAiPCVzIG5hbWU9J2R1bW15Jz4iICUgY2xzbmFtZSkKQEAgLTk4NSw2ICsxMTQ4LDcxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZGludG8oYiksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJjYiIpCiAKKyAgICBkZWYgdGVzdF9yZWFkaW50bzEoc2VsZik6CisgICAgICAgIGJ1ZmZlcl9zaXplID0gMTAKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImRlIiwgYiJmZ2giLCBiImprbCIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZmZlcl9zaXplKQorICAgICAgICBiID0gYnl0ZWFycmF5KDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucGVlaygzKSwgYidhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50bzEoYiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8uX3JlYWRzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWRpbnRvMShiKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzoxXSwgYiJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fcmVhZHMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZGludG8xKGIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiZGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMikKKyAgICAgICAgYiA9IGJ5dGVhcnJheSgyKmJ1ZmZlcl9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnBlZWsoMyksIGInZmdoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fcmVhZHMsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZGludG8xKGIpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjZdLCBiImZnaGprbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8uX3JlYWRzLCA0KQorCisgICAgZGVmIHRlc3RfcmVhZGludG9fYXJyYXkoc2VsZik6CisgICAgICAgIGJ1ZmZlcl9zaXplID0gNjAKKyAgICAgICAgZGF0YSA9IGIiYSIgKiAyNgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChkYXRhLCkpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmZmVyX3NpemUpCisKKyAgICAgICAgIyBDcmVhdGUgYW4gYXJyYXkgd2l0aCBlbGVtZW50IHNpemUgPiAxIGJ5dGUKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KCdpJywgYid4JyAqIDMyKQorICAgICAgICBhc3NlcnQgbGVuKGIpICE9IDE2CisKKyAgICAgICAgIyBSZWFkIGludG8gaXQuIFdlIHNob3VsZCBnZXQgYXMgbWFueSAqYnl0ZXMqIGFzIHdlIGNhbiBmaXQgaW50byBiCisgICAgICAgICMgKHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzKQorICAgICAgICBuID0gYnVmaW8ucmVhZGludG8oYikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKG4sIGxlbihiKSkKKworICAgICAgICAjIENoZWNrIHRoYXQgb2xkIGNvbnRlbnRzIG9mIGIgYXJlIHByZXNlcnZlZAorICAgICAgICBibSA9IG1lbW9yeXZpZXcoYikuY2FzdCgnQicpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhuLCBsZW4oYm0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJtWzpuXSwgZGF0YVs6bl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm1bbjpdLCBiJ3gnICogKGxlbihibVtuOl0pKSkKKworICAgIGRlZiB0ZXN0X3JlYWRpbnRvMV9hcnJheShzZWxmKToKKyAgICAgICAgYnVmZmVyX3NpemUgPSA2MAorICAgICAgICBkYXRhID0gYiJhIiAqIDI2CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGRhdGEsKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCBidWZmZXJfc2l6ZT1idWZmZXJfc2l6ZSkKKworICAgICAgICAjIENyZWF0ZSBhbiBhcnJheSB3aXRoIGVsZW1lbnQgc2l6ZSA+IDEgYnl0ZQorICAgICAgICBiID0gYXJyYXkuYXJyYXkoJ2knLCBiJ3gnICogMzIpCisgICAgICAgIGFzc2VydCBsZW4oYikgIT0gMTYKKworICAgICAgICAjIFJlYWQgaW50byBpdC4gV2Ugc2hvdWxkIGdldCBhcyBtYW55ICpieXRlcyogYXMgd2UgY2FuIGZpdCBpbnRvIGIKKyAgICAgICAgIyAod2hpY2ggaXMgbW9yZSB0aGFuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMpCisgICAgICAgIG4gPSBidWZpby5yZWFkaW50bzEoYikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKG4sIGxlbihiKSkKKworICAgICAgICAjIENoZWNrIHRoYXQgb2xkIGNvbnRlbnRzIG9mIGIgYXJlIHByZXNlcnZlZAorICAgICAgICBibSA9IG1lbW9yeXZpZXcoYikuY2FzdCgnQicpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhuLCBsZW4oYm0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJtWzpuXSwgZGF0YVs6bl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm1bbjpdLCBiJ3gnICogKGxlbihibVtuOl0pKSkKKwogICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKICAgICAgICAgZGVmIGJ1ZmlvKCk6CiAgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiY1xuIiwgYiJkXG4iLCBiImVmIikpCkBAIC0xMjE5LDYgKzE0NDcsMTEgQEAKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHdyaXRlciwgOCkKICAgICAgICAgYnVmaW8ud3JpdGUoYiJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdyaXRlci5fd3JpdGVfc3RhY2spCisgICAgICAgIGJ1ZmZlciA9IGJ5dGVhcnJheShiImRlZiIpCisgICAgICAgIGJ1ZmlvLndyaXRlKGJ1ZmZlcikKKyAgICAgICAgYnVmZmVyWzpdID0gYiIqKioiICAjIE92ZXJ3cml0ZSBvdXIgY29weSBvZiB0aGUgZGF0YQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLmpvaW4od3JpdGVyLl93cml0ZV9zdGFjayksIGIiYWJjZGVmIikKIAogICAgIGRlZiB0ZXN0X3dyaXRlX292ZXJmbG93KHNlbGYpOgogICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCkBAIC0xNTQ1LDExICsxNzc4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkMSgzKSwgYiJhYmMiKQogCiAgICAgZGVmIHRlc3RfcmVhZGludG8oc2VsZik6Ci0gICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBmb3IgbWV0aG9kIGluICgicmVhZGludG8iLCAicmVhZGludG8xIik6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtZXRob2QpOgorICAgICAgICAgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQogCi0gICAgICAgIGRhdGEgPSBieXRlYXJyYXkoNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWRpbnRvKGRhdGEpLCA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIiYWJjZGUiKQorICAgICAgICAgICAgICAgIGRhdGEgPSBieXRlc2xpa2UoNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocGFpciwgbWV0aG9kKShkYXRhKSwgNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGRhdGEpLCBiImFiY2RlIikKIAogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgogICAgICAgICB3ID0gc2VsZi5Nb2NrUmF3SU8oKQpAQCAtMTU1Nyw3ICsxNzkyLDkgQEAKIAogICAgICAgICBwYWlyLndyaXRlKGIiYWJjIikKICAgICAgICAgcGFpci5mbHVzaCgpCi0gICAgICAgIHBhaXIud3JpdGUoYiJkZWYiKQorICAgICAgICBidWZmZXIgPSBieXRlYXJyYXkoYiJkZWYiKQorICAgICAgICBwYWlyLndyaXRlKGJ1ZmZlcikKKyAgICAgICAgYnVmZmVyWzpdID0gYiIqKioiICAjIE92ZXJ3cml0ZSBvdXIgY29weSBvZiB0aGUgZGF0YQogICAgICAgICBwYWlyLmZsdXNoKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Ll93cml0ZV9zdGFjaywgW2IiYWJjIiwgYiJkZWYiXSkKIApAQCAtMjg5OCw2ICszMTM1LDcgQEAKICAgICAgICAgICAgICIiIi5mb3JtYXQoaW9tb2Q9aW9tb2QsIGt3YXJncz1rd2FyZ3MpCiAgICAgICAgIHJldHVybiBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc190eXBlX2NvbGxlY3RpbmcKICAgICBkZWYgdGVzdF9jcmVhdGVfYXRfc2h1dGRvd25fd2l0aG91dF9lbmNvZGluZyhzZWxmKToKICAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi5fY2hlY2tfY3JlYXRlX2F0X3NodXRkb3duKCkKICAgICAgICAgaWYgZXJyOgpAQCAtMjkwNywxMiArMzE0NSwyNCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib2siLCBvdXQuZGVjb2RlKCkuc3RyaXAoKSkKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX3R5cGVfY29sbGVjdGluZwogICAgIGRlZiB0ZXN0X2NyZWF0ZV9hdF9zaHV0ZG93bl93aXRoX2VuY29kaW5nKHNlbGYpOgogICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLl9jaGVja19jcmVhdGVfYXRfc2h1dGRvd24oZW5jb2Rpbmc9J3V0Zi04JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz0nc3RyaWN0JykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9rIiwgb3V0LmRlY29kZSgpLnN0cmlwKCkpCiAKKyAgICBkZWYgdGVzdF9yZWFkX2J5dGVzbGlrZShzZWxmKToKKyAgICAgICAgciA9IE1lbXZpZXdCeXRlc0lPKGInSnVzdCBzb21lIHJhbmRvbSBzdHJpbmdcbicpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIociwgJ3V0Zi04JykKKworICAgICAgICAjIFRleHRJT3dyYXBwZXIgd2lsbCBub3QgcmVhZCB0aGUgZnVsbCBzdHJpbmcsIGJlY2F1c2UKKyAgICAgICAgIyB3ZSB0cnVuY2F0ZSBpdCB0byBhIG11bHRpcGxlIG9mIHRoZSBuYXRpdmUgaW50IHNpemUKKyAgICAgICAgIyBzbyB0aGF0IHdlIGNhbiBjb25zdHJ1Y3QgYSBtb3JlIGNvbXBsZXggbWVtb3J5dmlldy4KKyAgICAgICAgYnl0ZXNfdmFsID0gIF90b19tZW1vcnl2aWV3KHIuZ2V0dmFsdWUoKSkudG9ieXRlcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlYWQoMjAwKSwgYnl0ZXNfdmFsLmRlY29kZSgndXRmLTgnKSkKKwogICAgIGRlZiB0ZXN0X2lzc3VlMjI4NDkoc2VsZik6CiAgICAgICAgIGNsYXNzIEYob2JqZWN0KToKICAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKTogcmV0dXJuIFRydWUKQEAgLTI5MjksNiArMzE3OSwyNSBAQAogICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKEYoKSwgZW5jb2Rpbmc9J3V0Zi04JykKIAogCitjbGFzcyBNZW12aWV3Qnl0ZXNJTyhpby5CeXRlc0lPKToKKyAgICAnJydBIEJ5dGVzSU8gb2JqZWN0IHdob3NlIHJlYWQgbWV0aG9kIHJldHVybnMgbWVtb3J5dmlld3MKKyAgICAgICByYXRoZXIgdGhhbiBieXRlcycnJworCisgICAgZGVmIHJlYWQxKHNlbGYsIGxlbl8pOgorICAgICAgICByZXR1cm4gX3RvX21lbW9yeXZpZXcoc3VwZXIoKS5yZWFkMShsZW5fKSkKKworICAgIGRlZiByZWFkKHNlbGYsIGxlbl8pOgorICAgICAgICByZXR1cm4gX3RvX21lbW9yeXZpZXcoc3VwZXIoKS5yZWFkKGxlbl8pKQorCitkZWYgX3RvX21lbW9yeXZpZXcoYnVmKToKKyAgICAnJydDb252ZXJ0IGJ5dGVzLW9iamVjdCAqYnVmKiB0byBhIG5vbi10cml2aWFsIG1lbW9yeXZpZXcnJycKKworICAgIGFyciA9IGFycmF5LmFycmF5KCdpJykKKyAgICBpZHggPSBsZW4oYnVmKSAtIGxlbihidWYpICUgYXJyLml0ZW1zaXplCisgICAgYXJyLmZyb21ieXRlcyhidWZbOmlkeF0pCisgICAgcmV0dXJuIG1lbW9yeXZpZXcoYXJyKQorCisKIGNsYXNzIENUZXh0SU9XcmFwcGVyVGVzdChUZXh0SU9XcmFwcGVyVGVzdCk6CiAgICAgaW8gPSBpbwogICAgIHNodXRkb3duX2Vycm9yID0gIlJ1bnRpbWVFcnJvcjogY291bGQgbm90IGZpbmQgaW8gbW9kdWxlIHN0YXRlIgpAQCAtMjkzNyw4ICszMjA2LDYgQEAKICAgICAgICAgciA9IHNlbGYuQnl0ZXNJTyhiIlx4YzNceGE5XG5cbiIpCiAgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHIsIDEwMDApCiAgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Ll9faW5pdF9fLCBiLCBuZXdsaW5lPTQyKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnJlYWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9J3h5enp5JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5yZWFkKQogCkBAIC0zMTc1LDYgKzM0NDIsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGFsbCkKICAgICAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkaW50bywgYnl0ZWFycmF5KDEwMjQpKQorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAicmVhZGludG8xIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkaW50bzEsIGJ5dGVhcnJheSgxMDI0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGxpbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWRsaW5lcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuc2VlaywgMCkKQEAgLTMyNjAsMTAgKzM1MjksOCBAQAogICAgICAgICAjIFdoZW4gdXNpbmcgY2xvc2VmZD1GYWxzZSwgdGhlcmUncyBubyB3YXJuaW5nCiAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKICAgICAgICAgZmRzICs9IHIsIHcKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgcmVjb3JkZWQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja19ub19yZXNvdXJjZV93YXJuaW5nKHNlbGYpOgogICAgICAgICAgICAgb3BlbihyLCAqYXJncywgY2xvc2VmZD1GYWxzZSwgKiprd2FyZ3MpCi0gICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZGVkLCBbXSkKIAogICAgIGRlZiB0ZXN0X3dhcm5fb25fZGVhbGxvY19mZChzZWxmKToKICAgICAgICAgc2VsZi5fY2hlY2tfd2Fybl9vbl9kZWFsbG9jX2ZkKCJyYiIsIGJ1ZmZlcmluZz0wKQpAQCAtMzI4OCwyNiArMzU1NSwyMCBAQAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAqKmt3YXJncykgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwaWNrbGUuZHVtcHMsIGYsIHByb3RvY29sKQogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmNudGwsICdmY250bCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKICAgICBkZWYgdGVzdF9ub25ibG9ja19waXBlX3dyaXRlX2JpZ2J1ZihzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9ub25ibG9ja19waXBlX3dyaXRlKDE2KjEwMjQpCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmY250bCwgJ2ZjbnRsIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQogICAgIGRlZiB0ZXN0X25vbmJsb2NrX3BpcGVfd3JpdGVfc21hbGxidWYoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3Rfbm9uYmxvY2tfcGlwZV93cml0ZSgxMDI0KQogCi0gICAgZGVmIF9zZXRfbm9uX2Jsb2NraW5nKHNlbGYsIGZkKToKLSAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmbGFncywgLTEpCi0gICAgICAgIHJlcyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbGFncyB8IG9zLk9fTk9OQkxPQ0spCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQotCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldF9ibG9ja2luZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdvcy5zZXRfYmxvY2tpbmcoKSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKICAgICBkZWYgX3Rlc3Rfbm9uYmxvY2tfcGlwZV93cml0ZShzZWxmLCBidWZzaXplKToKICAgICAgICAgc2VudCA9IFtdCiAgICAgICAgIHJlY2VpdmVkID0gW10KICAgICAgICAgciwgdyA9IG9zLnBpcGUoKQotICAgICAgICBzZWxmLl9zZXRfbm9uX2Jsb2NraW5nKHIpCi0gICAgICAgIHNlbGYuX3NldF9ub25fYmxvY2tpbmcodykKKyAgICAgICAgb3Muc2V0X2Jsb2NraW5nKHIsIEZhbHNlKQorICAgICAgICBvcy5zZXRfYmxvY2tpbmcodywgRmFsc2UpCiAKICAgICAgICAgIyBUbyBleGVyY2lzZSBhbGwgY29kZSBwYXRocyBpbiB0aGUgQyBpbXBsZW1lbnRhdGlvbiB3ZSBuZWVkCiAgICAgICAgICMgdG8gcGxheSB3aXRoIGJ1ZmZlciBzaXplcy4gIEZvciBpbnN0YW5jZSwgaWYgd2UgY2hvb3NlIGEKQEAgLTM0NTYsNiArMzcxNyw3IEBACiAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQogICAgICAgICByLCB3ID0gb3MucGlwZSgpCiAgICAgICAgIGZkb3Blbl9rd2FyZ3NbImNsb3NlZmQiXSA9IEZhbHNlCisgICAgICAgIGxhcmdlX2RhdGEgPSBpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aW8gPSBzZWxmLmlvLm9wZW4odywgKipmZG9wZW5fa3dhcmdzKQogICAgICAgICAgICAgdC5zdGFydCgpCkBAIC0zNDY3LDggKzM3MjksNyBAQAogICAgICAgICAgICAgIyBoYW5kbGVycywgd2hpY2ggaW4gdGhpcyBjYXNlIHdpbGwgaW52b2tlIGFsYXJtX2ludGVycnVwdCgpLgogICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHdpby53cml0ZShpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgd2lvLndyaXRlLCBsYXJnZV9kYXRhKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKICAgICAgICAgICAgICAgICB0LmpvaW4oKQpAQCAtMzU2OSwxMSArMzgzMCwxMyBAQAogICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWFsIHJlc3VsdCBvciBFSU5UUiksIHByb3Blcmx5IGludm9rZXMgdGhlIHNpZ25hbAogICAgICAgICBoYW5kbGVyIGFuZCByZXRyaWVzIGlmIHRoZSBsYXR0ZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LiIiIgogICAgICAgICBzZWxlY3QgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNlbGVjdCIpCisKICAgICAgICAgIyBBIHF1YW50aXR5IHRoYXQgZXhjZWVkcyB0aGUgYnVmZmVyIHNpemUgb2YgYW4gYW5vbnltb3VzIHBpcGUncwogICAgICAgICAjIHdyaXRlIGVuZC4KICAgICAgICAgTiA9IHN1cHBvcnQuUElQRV9NQVhfU0laRQogICAgICAgICByLCB3ID0gb3MucGlwZSgpCiAgICAgICAgIGZkb3Blbl9rd2FyZ3NbImNsb3NlZmQiXSA9IEZhbHNlCisKICAgICAgICAgIyBXZSBuZWVkIGEgc2VwYXJhdGUgdGhyZWFkIHRvIHJlYWQgZnJvbSB0aGUgcGlwZSBhbmQgYWxsb3cgdGhlCiAgICAgICAgICMgd3JpdGUoKSB0byBmaW5pc2guICBUaGlzIHRocmVhZCBpcyBzdGFydGVkIGFmdGVyIHRoZSBTSUdBTFJNIGlzCiAgICAgICAgICMgcmVjZWl2ZWQgKGZvcmNpbmcgYSBmaXJzdCBFSU5UUiBpbiB3cml0ZSgpKS4KQEAgLTM1OTYsNiArMzg1OSw4IEBACiAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKICAgICAgICAgZGVmIGFsYXJtMihzaWcsIGZyYW1lKToKICAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIGxhcmdlX2RhdGEgPSBpdGVtICogTgogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybTEpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCkBAIC0zNjA1LDcgKzM4NzAsOSBAQAogICAgICAgICAgICAgIyAgIGFuZCB0aGUgZmlyc3QgYWxhcm0pCiAgICAgICAgICAgICAjIC0gc2Vjb25kIHJhdyB3cml0ZSgpIHJldHVybnMgRUlOVFIgKGJlY2F1c2Ugb2YgdGhlIHNlY29uZCBhbGFybSkKICAgICAgICAgICAgICMgLSBzdWJzZXF1ZW50IHdyaXRlKClzIGFyZSBzdWNjZXNzZnVsIChlaXRoZXIgcGFydGlhbCBvciBjb21wbGV0ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTiwgd2lvLndyaXRlKGl0ZW0gKiBOKSkKKyAgICAgICAgICAgIHdyaXR0ZW4gPSB3aW8ud3JpdGUobGFyZ2VfZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTiwgd3JpdHRlbikKKwogICAgICAgICAgICAgd2lvLmZsdXNoKCkKICAgICAgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gVHJ1ZQogICAgICAgICAgICAgdC5qb2luKCkKQEAgLTM2NDUsNyArMzkxMiw3IEBACiAKIAogZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgotICAgIHRlc3RzID0gKENJT1Rlc3QsIFB5SU9UZXN0LAorICAgIHRlc3RzID0gKENJT1Rlc3QsIFB5SU9UZXN0LCBBUElNaXNtYXRjaFRlc3QsCiAgICAgICAgICAgICAgQ0J1ZmZlcmVkUmVhZGVyVGVzdCwgUHlCdWZmZXJlZFJlYWRlclRlc3QsCiAgICAgICAgICAgICAgQ0J1ZmZlcmVkV3JpdGVyVGVzdCwgUHlCdWZmZXJlZFdyaXRlclRlc3QsCiAgICAgICAgICAgICAgQ0J1ZmZlcmVkUldQYWlyVGVzdCwgUHlCdWZmZXJlZFJXUGFpclRlc3QsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5IGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQppbmRleCBlZmU5ZjUxLi5iODJiNjUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKQEAgLTEsNiArMSw2IEBACiBpbXBvcnQgYXJyYXkKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgZ2V0X2F0dHJpYnV0ZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUsIGdldF9hdHRyaWJ1dGUKIGltcG9ydCBvcywgc3RydWN0CiBmY250bCA9IGltcG9ydF9tb2R1bGUoJ2ZjbnRsJykKIHRlcm1pb3MgPSBpbXBvcnRfbW9kdWxlKCd0ZXJtaW9zJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKaW5kZXggOTVlM2YwNC4uOTRiZjRjZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKQEAgLTksNyArOSw5IEBACiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgaXBhZGRyZXNzCitpbXBvcnQgd2Vha3JlZgogCiAKIGNsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC04Myw2ICs4NSwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhleCwgc2VsZi5mYWN0b3J5KDEpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ5dGVzLCBzZWxmLmZhY3RvcnkoMSkpCiAKKyAgICBkZWYgcGlja2xlX3Rlc3Qoc2VsZiwgYWRkcik6CisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHggPSBzZWxmLmZhY3RvcnkoYWRkcikKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4LCBwcm90bykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorCiAKIGNsYXNzIENvbW1vblRlc3RNaXhpbl92NChDb21tb25UZXN0TWl4aW4pOgogCkBAIC0yNDgsNiArMjU3LDEyIEBACiAgICAgICAgIGFzc2VydEJhZE9jdGV0KCIyNTcuMC4wLjAiLCAyNTcpCiAgICAgICAgIGFzc2VydEJhZE9jdGV0KCIxOTIuMTY4LjAuOTk5IiwgOTk5KQogCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBzZWxmLnBpY2tsZV90ZXN0KCcxOTIuMC4yLjEnKQorCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgd2Vha3JlZi5yZWYoc2VsZi5mYWN0b3J5KCcxOTIuMC4yLjEnKSkKKwogCiBjbGFzcyBBZGRyZXNzVGVzdENhc2VfdjYoQmFzZVRlc3RDYXNlLCBDb21tb25UZXN0TWl4aW5fdjYpOgogICAgIGZhY3RvcnkgPSBpcGFkZHJlc3MuSVB2NkFkZHJlc3MKQEAgLTM4MCw2ICszOTUsMTIgQEAKICAgICAgICAgYXNzZXJ0QmFkUGFydCgiMDIwMDE6ZGI4OjoiLCAiMDIwMDEiKQogICAgICAgICBhc3NlcnRCYWRQYXJ0KCcyMDAxOjg4ODg4ODo6MScsICI4ODg4ODgiKQogCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBzZWxmLnBpY2tsZV90ZXN0KCcyMDAxOmRiODo6JykKKworICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CisgICAgICAgIHdlYWtyZWYucmVmKHNlbGYuZmFjdG9yeSgnMjAwMTpkYjg6OicpKQorCiAKIGNsYXNzIE5ldG1hc2tUZXN0TWl4aW5fdjQoQ29tbW9uVGVzdE1peGluX3Y0KToKICAgICAiIiJJbnB1dCB2YWxpZGF0aW9uIG9uIGludGVyZmFjZXMgYW5kIG5ldHdvcmtzIGlzIHZlcnkgc2ltaWxhciIiIgpAQCAtNDQzLDYgKzQ2NCwxMSBAQAogICAgICAgICBhc3NlcnRCYWROZXRtYXNrKCIxLjEuMS4xIiwgInB1ZGRpbmciKQogICAgICAgICBhc3NlcnRCYWROZXRtYXNrKCIxLjEuMS4xIiwgIjo6IikKIAorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgc2VsZi5waWNrbGVfdGVzdCgnMTkyLjAuMi4wLzI3JykKKyAgICAgICAgc2VsZi5waWNrbGVfdGVzdCgnMTkyLjAuMi4wLzMxJykgICMgSVBWNExFTkdUSCAtIDEKKyAgICAgICAgc2VsZi5waWNrbGVfdGVzdCgnMTkyLjAuMi4wJykgICAgICMgSVBWNExFTkdUSAorCiAKIGNsYXNzIEludGVyZmFjZVRlc3RDYXNlX3Y0KEJhc2VUZXN0Q2FzZSwgTmV0bWFza1Rlc3RNaXhpbl92NCk6CiAgICAgZmFjdG9yeSA9IGlwYWRkcmVzcy5JUHY0SW50ZXJmYWNlCkBAIC01MDEsNiArNTI3LDExIEBACiAgICAgICAgIGFzc2VydEJhZE5ldG1hc2soIjo6MSIsICJwdWRkaW5nIikKICAgICAgICAgYXNzZXJ0QmFkTmV0bWFzaygiOjoiLCAiOjoiKQogCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBzZWxmLnBpY2tsZV90ZXN0KCcyMDAxOmRiODo6MTAwMC8xMjQnKQorICAgICAgICBzZWxmLnBpY2tsZV90ZXN0KCcyMDAxOmRiODo6MTAwMC8xMjcnKSAgIyBJUFY2TEVOR1RIIC0gMQorICAgICAgICBzZWxmLnBpY2tsZV90ZXN0KCcyMDAxOmRiODo6MTAwMCcpICAgICAgIyBJUFY2TEVOR1RICisKIAogY2xhc3MgSW50ZXJmYWNlVGVzdENhc2VfdjYoQmFzZVRlc3RDYXNlLCBOZXRtYXNrVGVzdE1peGluX3Y2KToKICAgICBmYWN0b3J5ID0gaXBhZGRyZXNzLklQdjZJbnRlcmZhY2UKQEAgLTU1Niw4ICs1ODcsMTYgQEAKICAgICB2NF9vYmplY3RzID0gdjRfYWRkcmVzc2VzICsgW3Y0bmV0XQogICAgIHY2X2FkZHJlc3NlcyA9IFt2NmFkZHIsIHY2aW50Zl0KICAgICB2Nl9vYmplY3RzID0gdjZfYWRkcmVzc2VzICsgW3Y2bmV0XQorCiAgICAgb2JqZWN0cyA9IHY0X29iamVjdHMgKyB2Nl9vYmplY3RzCiAKKyAgICB2NGFkZHIyID0gaXBhZGRyZXNzLklQdjRBZGRyZXNzKDIpCisgICAgdjRuZXQyID0gaXBhZGRyZXNzLklQdjROZXR3b3JrKDIpCisgICAgdjRpbnRmMiA9IGlwYWRkcmVzcy5JUHY0SW50ZXJmYWNlKDIpCisgICAgdjZhZGRyMiA9IGlwYWRkcmVzcy5JUHY2QWRkcmVzcygyKQorICAgIHY2bmV0MiA9IGlwYWRkcmVzcy5JUHY2TmV0d29yaygyKQorICAgIHY2aW50ZjIgPSBpcGFkZHJlc3MuSVB2NkludGVyZmFjZSgyKQorCiAgICAgZGVmIHRlc3RfZm9yZWlnbl90eXBlX2VxdWFsaXR5KHNlbGYpOgogICAgICAgICAjIF9fZXFfXyBzaG91bGQgbmV2ZXIgcmFpc2UgVHlwZUVycm9yIGRpcmVjdGx5CiAgICAgICAgIG90aGVyID0gb2JqZWN0KCkKQEAgLTU3Niw2ICs2MTUsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxocywgcmhzKQogCisgICAgZGVmIHRlc3Rfc2FtZV90eXBlX2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIHNlbGYub2JqZWN0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChvYmosIG9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG9iaiwgb2JqKQorCisgICAgZGVmIHRlc3Rfc2FtZV90eXBlX29yZGVyaW5nKHNlbGYpOgorICAgICAgICBmb3IgbGhzLCByaHMgaW4gKAorICAgICAgICAgICAgKHNlbGYudjRhZGRyLCBzZWxmLnY0YWRkcjIpLAorICAgICAgICAgICAgKHNlbGYudjRuZXQsIHNlbGYudjRuZXQyKSwKKyAgICAgICAgICAgIChzZWxmLnY0aW50Ziwgc2VsZi52NGludGYyKSwKKyAgICAgICAgICAgIChzZWxmLnY2YWRkciwgc2VsZi52NmFkZHIyKSwKKyAgICAgICAgICAgIChzZWxmLnY2bmV0LCBzZWxmLnY2bmV0MiksCisgICAgICAgICAgICAoc2VsZi52NmludGYsIHNlbGYudjZpbnRmMiksCisgICAgICAgICk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxocywgcmhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGxocywgcmhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobGhzLCByaHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocmhzLCBsaHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChyaHMsIGxocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGhzID4gcmhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyaHMgPCBsaHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxocyA+PSByaHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJocyA8PSBsaHMpCisKICAgICBkZWYgdGVzdF9jb250YWlubWVudChzZWxmKToKICAgICAgICAgZm9yIG9iaiBpbiBzZWxmLnY0X2FkZHJlc3NlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob2JqLCBzZWxmLnY0bmV0KQpAQCAtNjcwLDYgKzczNCwxMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiSVB2NkludGVyZmFjZSgnOjoxLzEyOCcpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGlwYWRkcmVzcy5JUHY2SW50ZXJmYWNlKCc6OjEnKSkpCiAKKyAgICAjIGlzc3VlICMxNjUzMTogY29uc3RydWN0aW5nIElQdjROZXR3b3JrIGZyb20gYW4gKGFkZHJlc3MsIG1hc2spIHR1cGxlCisgICAgZGVmIHRlc3RJUHY0VHVwbGUoc2VsZik6CisgICAgICAgICMgLzMyCisgICAgICAgIGlwID0gaXBhZGRyZXNzLklQdjRBZGRyZXNzKCcxOTIuMC4yLjEnKQorICAgICAgICBuZXQgPSBpcGFkZHJlc3MuSVB2NE5ldHdvcmsoJzE5Mi4wLjIuMS8zMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKCgnMTkyLjAuMi4xJywgMzIpKSwgbmV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkcmVzcy5JUHY0TmV0d29yaygoaXAsIDMyKSksIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2NE5ldHdvcmsoKDMyMjEyMjU5ODUsIDMyKSksIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2NE5ldHdvcmsoKCcxOTIuMC4yLjEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzI1NS4yNTUuMjU1LjI1NScpKSwgbmV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkcmVzcy5JUHY0TmV0d29yaygoaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMjU1LjI1NS4yNTUuMjU1JykpLCBuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKCgzMjIxMjI1OTg1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzI1NS4yNTUuMjU1LjI1NScpKSwgbmV0KQorICAgICAgICAjIHN0cmljdD1UcnVlIGFuZCBob3N0IGJpdHMgc2V0CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpcGFkZHJlc3MuSVB2NE5ldHdvcmsoKCcxOTIuMC4yLjEnLCAyNCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpcGFkZHJlc3MuSVB2NE5ldHdvcmsoKGlwLCAyNCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpcGFkZHJlc3MuSVB2NE5ldHdvcmsoKDMyMjEyMjU5ODUsIDI0KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGlwYWRkcmVzcy5JUHY0TmV0d29yaygoJzE5Mi4wLjIuMScsICcyNTUuMjU1LjI1NS4wJykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpcGFkZHJlc3MuSVB2NE5ldHdvcmsoKGlwLCAnMjU1LjI1NS4yNTUuMCcpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaXBhZGRyZXNzLklQdjROZXR3b3JrKCgzMjIxMjI1OTg1LCAnMjU1LjI1NS4yNTUuMCcpKQorICAgICAgICAjIHN0cmljdD1GYWxzZSBhbmQgaG9zdCBiaXRzIHNldAorICAgICAgICBuZXQgPSBpcGFkZHJlc3MuSVB2NE5ldHdvcmsoJzE5Mi4wLjIuMC8yNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKCgnMTkyLjAuMi4xJywgMjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9RmFsc2UpLCBuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKChpcCwgMjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9RmFsc2UpLCBuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKCgzMjIxMjI1OTg1LCAyNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1GYWxzZSksIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2NE5ldHdvcmsoKCcxOTIuMC4yLjEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzI1NS4yNTUuMjU1LjAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PUZhbHNlKSwgbmV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkcmVzcy5JUHY0TmV0d29yaygoaXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMjU1LjI1NS4yNTUuMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9RmFsc2UpLCBuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKCgzMjIxMjI1OTg1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzI1NS4yNTUuMjU1LjAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PUZhbHNlKSwgbmV0KQorCisgICAgICAgICMgLzI0CisgICAgICAgIGlwID0gaXBhZGRyZXNzLklQdjRBZGRyZXNzKCcxOTIuMC4yLjAnKQorICAgICAgICBuZXQgPSBpcGFkZHJlc3MuSVB2NE5ldHdvcmsoJzE5Mi4wLjIuMC8yNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKCgnMTkyLjAuMi4wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcyNTUuMjU1LjI1NS4wJykpLCBuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKChpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcyNTUuMjU1LjI1NS4wJykpLCBuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKCgzMjIxMjI1OTg0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzI1NS4yNTUuMjU1LjAnKSksIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2NE5ldHdvcmsoKCcxOTIuMC4yLjAnLCAyNCkpLCBuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjROZXR3b3JrKChpcCwgMjQpKSwgbmV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkcmVzcy5JUHY0TmV0d29yaygoMzIyMTIyNTk4NCwgMjQpKSwgbmV0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjRJbnRlcmZhY2UoKCcxOTIuMC4yLjEnLCAyNCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5JUHY0SW50ZXJmYWNlKCcxOTIuMC4yLjEvMjQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2NEludGVyZmFjZSgoMzIyMTIyNTk4NSwgMjQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuSVB2NEludGVyZmFjZSgnMTkyLjAuMi4xLzI0JykpCisKKyAgICAjIGlzc3VlICMxNjUzMTogY29uc3RydWN0aW5nIElQdjZOZXR3b3JrIGZyb20gYW4gKGFkZHJlc3MsIG1hc2spIHR1cGxlCisgICAgZGVmIHRlc3RJUHY2VHVwbGUoc2VsZik6CisgICAgICAgICMgLzEyOAorICAgICAgICBpcCA9IGlwYWRkcmVzcy5JUHY2QWRkcmVzcygnMjAwMTpkYjg6OicpCisgICAgICAgIG5ldCA9IGlwYWRkcmVzcy5JUHY2TmV0d29yaygnMjAwMTpkYjg6Oi8xMjgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkcmVzcy5JUHY2TmV0d29yaygoJzIwMDE6ZGI4OjonLCAnMTI4JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2Nk5ldHdvcmsoCisgICAgICAgICAgICAgICAgKDQyNTQwNzY2NDExMjgyNTkyODU2OTAzOTg0OTUxNjUzODI2NTYwLCAxMjgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjZOZXR3b3JrKChpcCwgJzEyOCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXQpCisgICAgICAgIGlwID0gaXBhZGRyZXNzLklQdjZBZGRyZXNzKCcyMDAxOmRiODo6JykKKyAgICAgICAgbmV0ID0gaXBhZGRyZXNzLklQdjZOZXR3b3JrKCcyMDAxOmRiODo6Lzk2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2Nk5ldHdvcmsoKCcyMDAxOmRiODo6JywgJzk2JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2Nk5ldHdvcmsoCisgICAgICAgICAgICAgICAgKDQyNTQwNzY2NDExMjgyNTkyODU2OTAzOTg0OTUxNjUzODI2NTYwLCA5NikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2Nk5ldHdvcmsoKGlwLCAnOTYnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0KQorCisgICAgICAgICMgc3RyaWN0PVRydWUgYW5kIGhvc3QgYml0cyBzZXQKKyAgICAgICAgaXAgPSBpcGFkZHJlc3MuSVB2NkFkZHJlc3MoJzIwMDE6ZGI4OjoxJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGlwYWRkcmVzcy5JUHY2TmV0d29yaygoJzIwMDE6ZGI4OjoxJywgOTYpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaXBhZGRyZXNzLklQdjZOZXR3b3JrKCgKKyAgICAgICAgICAgICAgICA0MjU0MDc2NjQxMTI4MjU5Mjg1NjkwMzk4NDk1MTY1MzgyNjU2MSwgOTYpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaXBhZGRyZXNzLklQdjZOZXR3b3JrKChpcCwgOTYpKQorICAgICAgICAjIHN0cmljdD1GYWxzZSBhbmQgaG9zdCBiaXRzIHNldAorICAgICAgICBuZXQgPSBpcGFkZHJlc3MuSVB2Nk5ldHdvcmsoJzIwMDE6ZGI4OjovOTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlwYWRkcmVzcy5JUHY2TmV0d29yaygoJzIwMDE6ZGI4OjoxJywgOTYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2Nk5ldHdvcmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0MjU0MDc2NjQxMTI4MjU5Mjg1NjkwMzk4NDk1MTY1MzgyNjU2MSwgOTYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2Nk5ldHdvcmsoKGlwLCA5NiksIHN0cmljdD1GYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0KQorCisgICAgICAgICMgLzk2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjZJbnRlcmZhY2UoKCcyMDAxOmRiODo6MScsICc5NicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuSVB2NkludGVyZmFjZSgnMjAwMTpkYjg6OjEvOTYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcGFkZHJlc3MuSVB2NkludGVyZmFjZSgKKyAgICAgICAgICAgICAgICAoNDI1NDA3NjY0MTEyODI1OTI4NTY5MDM5ODQ5NTE2NTM4MjY1NjEsICc5NicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuSVB2NkludGVyZmFjZSgnMjAwMTpkYjg6OjEvOTYnKSkKKwogICAgICMgaXNzdWU1NwogICAgIGRlZiB0ZXN0QWRkcmVzc0ludE1hdGgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXBhZGRyZXNzLklQdjRBZGRyZXNzKCcxLjEuMS4xJykgKyAyNTUsCkBAIC02OTAsMjAgKzg2NywxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAyICoqIGlwYWRkcmVzcy5JUFY2TEVOR1RIKQogCiAgICAgZGVmIHRlc3RJbnRlcm5hbHMoc2VsZik6Ci0gICAgICAgIGZpcnN0LCBsYXN0ID0gaXBhZGRyZXNzLl9maW5kX2FkZHJlc3NfcmFuZ2UoWwotICAgICAgICAgICAgaXBhZGRyZXNzLklQdjRBZGRyZXNzKCcxMC4xMC4xMC4xMCcpLAotICAgICAgICAgICAgaXBhZGRyZXNzLklQdjRBZGRyZXNzKCcxMC4xMC4xMC4xMicpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdCwgbGFzdCkKKyAgICAgICAgaXAxID0gaXBhZGRyZXNzLklQdjRBZGRyZXNzKCcxMC4xMC4xMC4xMCcpCisgICAgICAgIGlwMiA9IGlwYWRkcmVzcy5JUHY0QWRkcmVzcygnMTAuMTAuMTAuMTEnKQorICAgICAgICBpcDMgPSBpcGFkZHJlc3MuSVB2NEFkZHJlc3MoJzEwLjEwLjEwLjEyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlwYWRkcmVzcy5fZmluZF9hZGRyZXNzX3JhbmdlKFtpcDFdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWyhpcDEsIGlwMSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXBhZGRyZXNzLl9maW5kX2FkZHJlc3NfcmFuZ2UoW2lwMSwgaXAzXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoaXAxLCBpcDEpLCAoaXAzLCBpcDMpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlwYWRkcmVzcy5fZmluZF9hZGRyZXNzX3JhbmdlKFtpcDEsIGlwMiwgaXAzXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoaXAxLCBpcDMpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMjgsIGlwYWRkcmVzcy5fY291bnRfcmlnaHRoYW5kX3plcm9fYml0cygwLCAxMjgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJJUHY0TmV0d29yaygnMS4yLjMuMC8yNCcpIiwgcmVwcihzZWxmLmlwdjRfbmV0d29yaykpCiAKLSAgICBkZWYgdGVzdE1pc3NpbmdBZGRyZXNzVmVyc2lvbihzZWxmKToKLSAgICAgICAgY2xhc3MgQnJva2VuKGlwYWRkcmVzcy5fQmFzZUFkZHJlc3MpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBicm9rZW4gPSBCcm9rZW4oJzEyNy4wLjAuMScpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChOb3RJbXBsZW1lbnRlZEVycm9yLCAiQnJva2VuLip2ZXJzaW9uIik6Ci0gICAgICAgICAgICBicm9rZW4udmVyc2lvbgotCiAgICAgZGVmIHRlc3RNaXNzaW5nTmV0d29ya1ZlcnNpb24oc2VsZik6CiAgICAgICAgIGNsYXNzIEJyb2tlbihpcGFkZHJlc3MuX0Jhc2VOZXR3b3JrKToKICAgICAgICAgICAgIHBhc3MKQEAgLTkyNCw2ICsxMDk5LDI2IEBACiAgICAgICAgICAgICAgJzIwMDE6NjU4OjIyYTpjYWZlOjgwMDA6Oi82NicsCiAgICAgICAgICAgICAgJzIwMDE6NjU4OjIyYTpjYWZlOmMwMDA6Oi82NiddKQogCisgICAgZGVmIHRlc3RHZXRTdWJuZXRzMyhzZWxmKToKKyAgICAgICAgc3VibmV0cyA9IFtzdHIoeCkgZm9yIHggaW4gc2VsZi5pcHY0X25ldHdvcmsuc3VibmV0cyg4KV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJuZXRzWzozXSwKKyAgICAgICAgICAgIFsnMS4yLjMuMC8zMicsICcxLjIuMy4xLzMyJywgJzEuMi4zLjIvMzInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJuZXRzWy0zOl0sCisgICAgICAgICAgICBbJzEuMi4zLjI1My8zMicsICcxLjIuMy4yNTQvMzInLCAnMS4yLjMuMjU1LzMyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN1Ym5ldHMpLCAyNTYpCisKKyAgICAgICAgaXB2Nl9uZXR3b3JrID0gaXBhZGRyZXNzLklQdjZOZXR3b3JrKCcyMDAxOjY1ODoyMmE6Y2FmZTo6LzEyMCcpCisgICAgICAgIHN1Ym5ldHMgPSBbc3RyKHgpIGZvciB4IGluIGlwdjZfbmV0d29yay5zdWJuZXRzKDgpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Ym5ldHNbOjNdLAorICAgICAgICAgICAgWycyMDAxOjY1ODoyMmE6Y2FmZTo6LzEyOCcsCisgICAgICAgICAgICAgJzIwMDE6NjU4OjIyYTpjYWZlOjoxLzEyOCcsCisgICAgICAgICAgICAgJzIwMDE6NjU4OjIyYTpjYWZlOjoyLzEyOCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Ym5ldHNbLTM6XSwKKyAgICAgICAgICAgIFsnMjAwMTo2NTg6MjJhOmNhZmU6OmZkLzEyOCcsCisgICAgICAgICAgICAgJzIwMDE6NjU4OjIyYTpjYWZlOjpmZS8xMjgnLAorICAgICAgICAgICAgICcyMDAxOjY1ODoyMmE6Y2FmZTo6ZmYvMTI4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN1Ym5ldHMpLCAyNTYpCisKICAgICBkZWYgdGVzdFN1Ym5ldEZhaWxzRm9yTGFyZ2VDaWRyRGlmZihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pcHY0X2ludGVyZmFjZS5uZXR3b3JrLnN1Ym5ldHMoOSkpCkBAIC0xNDMxLDYgKzE2MjYsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcxNjkuMjU1LjEwMC4yMDAnKS5pc19saW5rX2xvY2FsKQogCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpcGFkZHJlc3MuaXBfYWRkcmVzcygnMTkyLjAuNy4xJykuaXNfZ2xvYmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcyMDMuMC4xMTMuMScpLmlzX2dsb2JhbCkKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcxMjcuMTAwLjIwMC4yNTQnKS5pc19sb29wYmFjaykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygnMTI3LjQyLjAuMCcpLmlzX2xvb3BiYWNrKQpAQCAtMTUyOCw2ICsxNzI2LDcgQEAKICAgICAgICAgYWRkcjMgPSBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAuMi4xLjAvMjQnKQogICAgICAgICBhZGRyNCA9IGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcxMC4xLjEuMCcpCiAgICAgICAgIGFkZHI1ID0gaXBhZGRyZXNzLmlwX25ldHdvcmsoJzIwMDE6ZGI4OjowLzMyJykKKyAgICAgICAgYWRkcjYgPSBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAuMS4xLjUvMzInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChsaXN0KGFkZHIxLmFkZHJlc3NfZXhjbHVkZShhZGRyMikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEwLjEuMS42NC8yNicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAuMS4xLjEyOC8yNScpXSkKQEAgLTE1MzUsNiArMTczNCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGFkZHIxLmFkZHJlc3NfZXhjbHVkZShhZGRyNCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgYWRkcjEuYWRkcmVzc19leGNsdWRlKGFkZHI1KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFkZHIxLmFkZHJlc3NfZXhjbHVkZShhZGRyMSkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChhZGRyMS5hZGRyZXNzX2V4Y2x1ZGUoYWRkcjYpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW2lwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMC4xLjEuMC8zMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAuMS4xLjQvMzInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEwLjEuMS42LzMxJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMC4xLjEuOC8yOScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAuMS4xLjE2LzI4JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMC4xLjEuMzIvMjcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEwLjEuMS42NC8yNicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAuMS4xLjEyOC8yNScpXSkKIAogICAgIGRlZiB0ZXN0SGFzaChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGlwYWRkcmVzcy5pcF9pbnRlcmZhY2UoJzEwLjEuMS4wLzI0JykpLApAQCAtMTU5OCw3ICsxODA2LDYgQEAKICAgICAgICAgICAgICcyMDAxOjA6MDo0OjA6MDowOjgnOiAnMjAwMTowOjA6NDo6OC8xMjgnLAogICAgICAgICAgICAgJzIwMDE6MDowOjQ6NTo2Ojc6OCc6ICcyMDAxOjo0OjU6Njo3OjgvMTI4JywKICAgICAgICAgICAgICcyMDAxOjA6Mzo0OjU6Njo3OjgnOiAnMjAwMTowOjM6NDo1OjY6Nzo4LzEyOCcsCi0gICAgICAgICAgICAnMjAwMTowOjM6NDo1OjY6Nzo4JzogJzIwMDE6MDozOjQ6NTo2Ojc6OC8xMjgnLAogICAgICAgICAgICAgJzA6MDozOjA6MDowOjA6ZmZmZic6ICcwOjA6Mzo6ZmZmZi8xMjgnLAogICAgICAgICAgICAgJzA6MDowOjQ6MDowOjA6ZmZmZic6ICc6OjQ6MDowOjA6ZmZmZi8xMjgnLAogICAgICAgICAgICAgJzA6MDowOjA6NTowOjA6ZmZmZic6ICc6OjU6MDowOmZmZmYvMTI4JywKQEAgLTE2MzUsNiArMTg0MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIzLmV4cGxvZGVkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxOTIuMTY4LjE3OC4xJywgYWRkcjQuZXhwbG9kZWQpCiAKKyAgICBkZWYgdGVzdFJldmVyc2VQb2ludGVyKHNlbGYpOgorICAgICAgICBhZGRyMSA9IGlwYWRkcmVzcy5JUHY0QWRkcmVzcygnMTI3LjAuMC4xJykKKyAgICAgICAgYWRkcjIgPSBpcGFkZHJlc3MuSVB2NkFkZHJlc3MoJzIwMDE6ZGI4OjoxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMS4wLjAuMTI3LmluLWFkZHIuYXJwYScsIGFkZHIxLnJldmVyc2VfcG9pbnRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMS4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuOC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYi5kLjAuMS4wLjAuMi5pcDYuYXJwYScsCisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcjIucmV2ZXJzZV9wb2ludGVyKQorCiAgICAgZGVmIHRlc3RJbnRSZXByZXNlbnRhdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNjkwOTA2MCwgaW50KHNlbGYuaXB2NF9hZGRyZXNzKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MjU0MDYxNjgyOTE4MjQ2OTQzMzU0Nzc2MjQ4MjA5Nzk0NjYyNSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXNpbnN0YW5jZS5weSBiL0xpYi90ZXN0L3Rlc3RfaXNpbnN0YW5jZS5weQppbmRleCA3YTY3MzBlLi5lNjNkNTliIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lzaW5zdGFuY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pc2luc3RhbmNlLnB5CkBAIC0zLDcgKzMsNiBAQAogIyB0ZXN0aW5nIG9mIGVycm9yIGNvbmRpdGlvbnMgdW5jb3ZlcmVkIHdoZW4gdXNpbmcgZXh0ZW5zaW9uIHR5cGVzLgogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHN5cwogCiAKQEAgLTI1OSwzMSArMjU4LDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhzdHIsIChzdHIsIChDaGlsZCwgTmV3Q2hpbGQsIHN0cikpKSkKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlY3Vyc2lvbl9saW1pdChzZWxmKToKLSAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBpc3N1YmNsYXNzIHJhaXNlcyBSdW50aW1lRXJyb3IgYmVmb3JlIHRoZSBDIHN0YWNrIGlzCisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgaXNzdWJjbGFzcyByYWlzZXMgUmVjdXJzaW9uRXJyb3IgYmVmb3JlIHRoZSBDIHN0YWNrIGlzCiAgICAgICAgICMgYmxvd24KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBibG93c3RhY2ssIGlzc3ViY2xhc3MsIHN0ciwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgYmxvd3N0YWNrLCBpc3N1YmNsYXNzLCBzdHIsIHN0cikKIAogICAgIGRlZiB0ZXN0X2lzaW5zdGFuY2VfcmVjdXJzaW9uX2xpbWl0KHNlbGYpOgotICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IGlzc3ViY2xhc3MgcmFpc2VzIFJ1bnRpbWVFcnJvciBiZWZvcmUgdGhlIEMgc3RhY2sgaXMKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBpc3N1YmNsYXNzIHJhaXNlcyBSZWN1cnNpb25FcnJvciBiZWZvcmUgdGhlIEMgc3RhY2sgaXMKICAgICAgICAgIyBibG93bgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGJsb3dzdGFjaywgaXNpbnN0YW5jZSwgJycsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIGJsb3dzdGFjaywgaXNpbnN0YW5jZSwgJycsIHN0cikKIAogZGVmIGJsb3dzdGFjayhmeG4sIGFyZywgY29tcGFyZV90byk6CiAgICAgIyBNYWtlIHN1cmUgdGhhdCBjYWxsaW5nIGlzaW5zdGFuY2Ugd2l0aCBhIGRlZXBseSBuZXN0ZWQgdHVwbGUgZm9yIGl0cwotICAgICMgYXJndW1lbnQgd2lsbCByYWlzZSBSdW50aW1lRXJyb3IgZXZlbnR1YWxseS4KKyAgICAjIGFyZ3VtZW50IHdpbGwgcmFpc2UgUmVjdXJzaW9uRXJyb3IgZXZlbnR1YWxseS4KICAgICB0dXBsZV9hcmcgPSAoY29tcGFyZV90bywpCiAgICAgZm9yIGNudCBpbiByYW5nZShzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSs1KToKICAgICAgICAgdHVwbGVfYXJnID0gKHR1cGxlX2FyZywpCiAgICAgICAgIGZ4bihhcmcsIHR1cGxlX2FyZykKIAogDAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBUZXN0SXNJbnN0YW5jZUV4Y2VwdGlvbnMsCi0gICAgICAgIFRlc3RJc1N1YmNsYXNzRXhjZXB0aW9ucywKLSAgICAgICAgVGVzdElzSW5zdGFuY2VJc1N1YmNsYXNzCi0gICAgKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaXRlci5weQppbmRleCBhYmM0MDhmLi5hOTE2NzBiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2l0ZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pdGVyLnB5CkBAIC0zLDYgKzMsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIHVubGluaywgY3B5dGhvbl9vbmx5Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2hlY2tfZnJlZV9hZnRlcl9pdGVyYXRpbmcKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBjb2xsZWN0aW9ucy5hYmMKIApAQCAtMTUzLDYgKzE1NCw1MyBAQAogICAgIGRlZiB0ZXN0X3NlcV9jbGFzc19pdGVyKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2l0ZXJhdG9yKGl0ZXIoU2VxdWVuY2VDbGFzcygxMCkpLCBsaXN0KHJhbmdlKDEwKSkpCiAKKyAgICBkZWYgdGVzdF9tdXRhdGluZ19zZXFfY2xhc3NfaXRlcl9waWNrbGUoc2VsZik6CisgICAgICAgIG9yaWcgPSBTZXF1ZW5jZUNsYXNzKDUpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgIyBpbml0aWFsIGl0ZXJhdG9yCisgICAgICAgICAgICBpdG9yaWcgPSBpdGVyKG9yaWcpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKChpdG9yaWcsIG9yaWcpLCBwcm90bykKKyAgICAgICAgICAgIGl0LCBzZXEgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHNlcS5uID0gNworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGl0KSwgdHlwZShpdG9yaWcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChyYW5nZSg3KSkpCisKKyAgICAgICAgICAgICMgcnVubmluZyBpdGVyYXRvcgorICAgICAgICAgICAgbmV4dChpdG9yaWcpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKChpdG9yaWcsIG9yaWcpLCBwcm90bykKKyAgICAgICAgICAgIGl0LCBzZXEgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHNlcS5uID0gNworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGl0KSwgdHlwZShpdG9yaWcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChyYW5nZSgxLCA3KSkpCisKKyAgICAgICAgICAgICMgZW1wdHkgaXRlcmF0b3IKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDUpOgorICAgICAgICAgICAgICAgIG5leHQoaXRvcmlnKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcygoaXRvcmlnLCBvcmlnKSwgcHJvdG8pCisgICAgICAgICAgICBpdCwgc2VxID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZXEubiA9IDcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShpdCksIHR5cGUoaXRvcmlnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGxpc3QocmFuZ2UoNSwgNykpKQorCisgICAgICAgICAgICAjIGV4aGF1c3RlZCBpdGVyYXRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXRvcmlnKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcygoaXRvcmlnLCBvcmlnKSwgcHJvdG8pCisgICAgICAgICAgICBpdCwgc2VxID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZXEubiA9IDcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5hYmMuSXRlcmF0b3IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisKKyAgICBkZWYgdGVzdF9tdXRhdGluZ19zZXFfY2xhc3NfZXhoYXVzdGVkX2l0ZXIoc2VsZik6CisgICAgICAgIGEgPSBTZXF1ZW5jZUNsYXNzKDUpCisgICAgICAgIGV4aGl0ID0gaXRlcihhKQorICAgICAgICBlbXBpdCA9IGl0ZXIoYSkKKyAgICAgICAgZm9yIHggaW4gZXhoaXQ6ICAjIGV4aGF1c3QgdGhlIGl0ZXJhdG9yCisgICAgICAgICAgICBuZXh0KGVtcGl0KSAgIyBub3QgZXhoYXVzdGVkCisgICAgICAgIGEubiA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGV4aGl0KSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChlbXBpdCksIFs1LCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGEpLCBbMCwgMSwgMiwgMywgNCwgNSwgNl0pCisKICAgICAjIFRlc3QgYSBuZXdfc3R5bGUgY2xhc3Mgd2l0aCBfX2l0ZXJfXyBidXQgbm8gbmV4dCgpIG1ldGhvZAogICAgIGRlZiB0ZXN0X25ld19zdHlsZV9pdGVyX2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBJdGVyQ2xhc3Mob2JqZWN0KToKQEAgLTk0NCw2ICs5OTIsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAxKQogCisgICAgZGVmIHRlc3RfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZik6CisgICAgICAgIGNoZWNrX2ZyZWVfYWZ0ZXJfaXRlcmF0aW5nKHNlbGYsIGl0ZXIsIFNlcXVlbmNlQ2xhc3MsICgwLCkpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUZXN0Q2FzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKaW5kZXggOTkzNDM4Yy4uZjk0MDg1MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkKQEAgLTEzOTgsNiArMTM5OCwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5kZWVwY29weShpdCkpLCBhY2N1bXVsYXRlZFsxOl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmNvcHkoaXQpKSwgYWNjdW11bGF0ZWRbMTpdKQogCisgICAgZGVmIHRlc3RfYWNjdW11bGF0ZV9yZWR1Y2libGVfbm9uZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjU3MTg6IHRvdGFsIGlzIE5vbmUKKyAgICAgICAgaXQgPSBhY2N1bXVsYXRlKFtOb25lLCBOb25lLCBOb25lXSwgb3BlcmF0b3IuaXNfKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCBOb25lKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGl0X2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGl0LCBwcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXRfY29weSksIFtUcnVlLCBGYWxzZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KGl0KSksIFtUcnVlLCBGYWxzZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmNvcHkoaXQpKSwgW1RydWUsIEZhbHNlXSkKKwogICAgIGRlZiB0ZXN0X2NoYWluKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oY2hhaW4oJ0FCQycsICdERUYnKSksICdBQkNERUYnKQogCkBAIC0xODcwLDggKzE4ODAsNiBAQAogICAgICAgICAgICAgaGlzdC5hcHBlbmQoMykKICAgICAgICAgICAgIHlpZWxkIDIKICAgICAgICAgICAgIGhpc3QuYXBwZW5kKDQpCi0gICAgICAgICAgICBpZiB4OgotICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KIAogICAgICAgICBoaXN0ID0gW10KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIGxpc3QsIGNoYWluKGdlbjEoKSwgZ2VuMihGYWxzZSkpKQpAQCAtMjAwNiw2ICsyMDE0LDExIEBACiAuLi4gICAgICJSZXR1cm5zIHRoZSBudGggaXRlbSBvciBhIGRlZmF1bHQgdmFsdWUiCiAuLi4gICAgIHJldHVybiBuZXh0KGlzbGljZShpdGVyYWJsZSwgbiwgTm9uZSksIGRlZmF1bHQpCiAKKz4+PiBkZWYgYWxsX2VxdWFsKGl0ZXJhYmxlKToKKy4uLiAgICAgIlJldHVybnMgVHJ1ZSBpZiBhbGwgdGhlIGVsZW1lbnRzIGFyZSBlcXVhbCB0byBlYWNoIG90aGVyIgorLi4uICAgICBnID0gZ3JvdXBieShpdGVyYWJsZSkKKy4uLiAgICAgcmV0dXJuIG5leHQoZywgVHJ1ZSkgYW5kIG5vdCBuZXh0KGcsIEZhbHNlKQorCiA+Pj4gZGVmIHF1YW50aWZ5KGl0ZXJhYmxlLCBwcmVkPWJvb2wpOgogLi4uICAgICAiQ291bnQgaG93IG1hbnkgdGltZXMgdGhlIHByZWRpY2F0ZSBpcyB0cnVlIgogLi4uICAgICByZXR1cm4gc3VtKG1hcChwcmVkLCBpdGVyYWJsZSkpCkBAIC0yMTE5LDYgKzIxMzIsOSBAQAogPj4+IG50aCgnYWJjZGUnLCA5KSBpcyBOb25lCiBUcnVlCiAKKz4+PiBbYWxsX2VxdWFsKHMpIGZvciBzIGluICgnJywgJ0EnLCAnQUFBQScsICdBQUFCJywgJ0FBQUJBJyldCitbVHJ1ZSwgVHJ1ZSwgVHJ1ZSwgRmFsc2UsIEZhbHNlXQorCiA+Pj4gcXVhbnRpZnkocmFuZ2UoOTkpLCBsYW1iZGEgeDogeCUyPT0wKQogNTAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL19faW5pdF9fLnB5CmluZGV4IDJjZjEwMzIuLjA4MDdlNmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vX19pbml0X18ucHkKQEAgLTksMTIgKzksMTUgQEAKICMgaW1wb3J0IGpzb24gd2l0aCBhbmQgd2l0aG91dCBhY2NlbGVyYXRpb25zCiBjanNvbiA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnanNvbicsIGZyZXNoPVsnX2pzb24nXSkKIHB5anNvbiA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnanNvbicsIGJsb2NrZWQ9WydfanNvbiddKQorIyBKU09ORGVjb2RlRXJyb3IgaXMgY2FjaGVkIGluc2lkZSB0aGUgX2pzb24gbW9kdWxlCitjanNvbi5KU09ORGVjb2RlRXJyb3IgPSBjanNvbi5kZWNvZGVyLkpTT05EZWNvZGVFcnJvciA9IGpzb24uSlNPTkRlY29kZUVycm9yCiAKICMgY3JlYXRlIHR3byBiYXNlIGNsYXNzZXMgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIG90aGVyIHRlc3RzCiBjbGFzcyBQeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGpzb24gPSBweWpzb24KICAgICBsb2FkcyA9IHN0YXRpY21ldGhvZChweWpzb24ubG9hZHMpCiAgICAgZHVtcHMgPSBzdGF0aWNtZXRob2QocHlqc29uLmR1bXBzKQorICAgIEpTT05EZWNvZGVFcnJvciA9IHN0YXRpY21ldGhvZChweWpzb24uSlNPTkRlY29kZUVycm9yKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhjanNvbiwgJ3JlcXVpcmVzIF9qc29uJykKIGNsYXNzIENUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTIyLDYgKzI1LDcgQEAKICAgICAgICAganNvbiA9IGNqc29uCiAgICAgICAgIGxvYWRzID0gc3RhdGljbWV0aG9kKGNqc29uLmxvYWRzKQogICAgICAgICBkdW1wcyA9IHN0YXRpY21ldGhvZChjanNvbi5kdW1wcykKKyAgICAgICAgSlNPTkRlY29kZUVycm9yID0gc3RhdGljbWV0aG9kKGNqc29uLkpTT05EZWNvZGVFcnJvcikKIAogIyB0ZXN0IFB5VGVzdCBhbmQgQ1Rlc3QgY2hlY2tpbmcgaWYgdGhlIGZ1bmN0aW9ucyBjb21lIGZyb20gdGhlIHJpZ2h0IG1vZHVsZQogY2xhc3MgVGVzdFB5VGVzdChQeVRlc3QpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CmluZGV4IDU5MWIyZTIuLmNjODNiNDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKQEAgLTYzLDEyICs2MywxMiBAQAogICAgIGRlZiB0ZXN0X2V4dHJhX2RhdGEoc2VsZik6CiAgICAgICAgIHMgPSAnWzEsIDIsIDNdNScKICAgICAgICAgbXNnID0gJ0V4dHJhIGRhdGEnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYuSlNPTkRlY29kZUVycm9yLCBtc2csIHNlbGYubG9hZHMsIHMpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkX2VzY2FwZShzZWxmKToKICAgICAgICAgcyA9ICdbImFiY1xceSJdJwogICAgICAgICBtc2cgPSAnZXNjYXBlJwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsIG1zZywgc2VsZi5sb2FkcywgcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzZWxmLkpTT05EZWNvZGVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9pbnB1dF90eXBlKHNlbGYpOgogICAgICAgICBtc2cgPSAndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyJwpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgZGVmIHRlc3Rfc3RyaW5nX3dpdGhfdXRmOF9ib20oc2VsZik6CiAgICAgICAgICMgc2VlICMxODk1OAogICAgICAgICBib21fanNvbiA9ICJbMSwyLDNdIi5lbmNvZGUoJ3V0Zi04LXNpZycpLmRlY29kZSgndXRmLTgnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuSlNPTkRlY29kZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHNlbGYubG9hZHMoYm9tX2pzb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JPTScsIHN0cihjbS5leGNlcHRpb24pKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuSlNPTkRlY29kZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9qc29uKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbignQk9NJywgc3RyKGNtLmV4Y2VwdGlvbikpCiAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIEJPTSBpcyBub3QgZGV0ZWN0ZWQgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmluZwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5weQppbmRleCAyMTIyZGExLi40YmJjNmM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5weQpAQCAtMTIsOSArMTIsNiBAQAogICAgICgnIHMgcCBhIGMgZSBkICcsICciIHMgcCBhIGMgZSBkICInKSwKICAgICAoJ1xVMDAwMWQxMjAnLCAnIlxcdWQ4MzRcXHVkZDIwIicpLAogICAgICgnXHUwM2IxXHUwM2E5JywgJyJcXHUwM2IxXFx1MDNhOSInKSwKLSAgICAoJ1x1MDNiMVx1MDNhOScsICciXFx1MDNiMVxcdTAzYTkiJyksCi0gICAgKCdcdTAzYjFcdTAzYTknLCAnIlxcdTAzYjFcXHUwM2E5IicpLAotICAgICgnXHUwM2IxXHUwM2E5JywgJyJcXHUwM2IxXFx1MDNhOSInKSwKICAgICAoImAxfiFAIyQlXiYqKClfKy09eyc6WyxdfXw7LjwvPj8iLCAnImAxfiFAIyQlXiYqKClfKy09e1wnOlssXX18Oy48Lz4/IicpLAogICAgICgnXHgwOFx4MGNcblxyXHQnLCAnIlxcYlxcZlxcblxcclxcdCInKSwKICAgICAoJ1x1MDEyM1x1NDU2N1x1ODlhYlx1Y2RlZlx1YWJjZFx1ZWY0YScsICciXFx1MDEyM1xcdTQ1NjdcXHU4OWFiXFx1Y2RlZlxcdWFiY2RcXHVlZjRhIicpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKaW5kZXggN2NhYWZkYi4uOTVmZjViOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmxvYWRzKGRvYykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZXhjZXB0IHNlbGYuSlNPTkRlY29kZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBmYWlsdXJlIGZvciBmYWlsezB9Lmpzb246IHsxIXJ9Ii5mb3JtYXQoaWR4LCBkb2MpKQpAQCAtMTI0LDEwICsxMjQsMTYgQEAKICAgICAgICAgICAgICgnInNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDApLAogICAgICAgICBdCiAgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gXChjaGFyIHsyfVwpJy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZShtc2cpLCBpZHggKyAxLCBpZHgpLAotICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuSlNPTkRlY29kZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzKGRhdGEpCisgICAgICAgICAgICBlcnIgPSBjbS5leGNlcHRpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLm1zZywgbXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIucG9zLCBpZHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5saW5lbm8sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5jb2xubywgaWR4ICsgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclczogbGluZSAxIGNvbHVtbiAlZCAoY2hhciAlZCknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1zZywgaWR4ICsgMSwgaWR4KSkKIAogICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfZGF0YShzZWxmKToKICAgICAgICAgdGVzdF9jYXNlcyA9IFsKQEAgLTE1NCwxMCArMTYwLDE2IEBACiAgICAgICAgICAgICAoJ3sic3BhbSI6NDIsfScsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMTEpLAogICAgICAgICBdCiAgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gXChjaGFyIHsyfVwpJy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZShtc2cpLCBpZHggKyAxLCBpZHgpLAotICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuSlNPTkRlY29kZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzKGRhdGEpCisgICAgICAgICAgICBlcnIgPSBjbS5leGNlcHRpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLm1zZywgbXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIucG9zLCBpZHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5saW5lbm8sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5jb2xubywgaWR4ICsgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclczogbGluZSAxIGNvbHVtbiAlZCAoY2hhciAlZCknICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1zZywgaWR4ICsgMSwgaWR4KSkKIAogICAgIGRlZiB0ZXN0X2V4dHJhX2RhdGEoc2VsZik6CiAgICAgICAgIHRlc3RfY2FzZXMgPSBbCkBAIC0xNzEsMTEgKzE4MywxNiBAQAogICAgICAgICAgICAgKCcic3BhbSIsNDInLCAnRXh0cmEgZGF0YScsIDYpLAogICAgICAgICBdCiAgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gLSBsaW5lIDEgY29sdW1uIHsyfScKLSAgICAgICAgICAgICAgICByJyBcKGNoYXIgezN9IC0gezR9XCknLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGxlbihkYXRhKSArIDEsIGlkeCwgbGVuKGRhdGEpKSwKLSAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLkpTT05EZWNvZGVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgZXJyID0gY20uZXhjZXB0aW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5tc2csIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnBvcywgaWR4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIubGluZW5vLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuY29sbm8sIGlkeCArIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXM6IGxpbmUgMSBjb2x1bW4gJWQgKGNoYXIgJWQpJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtc2csIGlkeCArIDEsIGlkeCkpCiAKICAgICBkZWYgdGVzdF9saW5lY29sKHNlbGYpOgogICAgICAgICB0ZXN0X2Nhc2VzID0gWwpAQCAtMTg1LDEwICsyMDIsMTYgQEAKICAgICAgICAgICAgICgnXG4gIFxuXG4gICAgICEnLCA0LCA2LCAxMCksCiAgICAgICAgIF0KICAgICAgICAgZm9yIGRhdGEsIGxpbmUsIGNvbCwgaWR4IGluIHRlc3RfY2FzZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgcideRXhwZWN0aW5nIHZhbHVlOiBsaW5lIHswfSBjb2x1bW4gezF9JwotICAgICAgICAgICAgICAgIHInIFwoY2hhciB7Mn1cKSQnLmZvcm1hdChsaW5lLCBjb2wsIGlkeCksCi0gICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5KU09ORGVjb2RlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMoZGF0YSkKKyAgICAgICAgICAgIGVyciA9IGNtLmV4Y2VwdGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIubXNnLCAnRXhwZWN0aW5nIHZhbHVlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnBvcywgaWR4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIubGluZW5vLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuY29sbm8sIGNvbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBlY3RpbmcgdmFsdWU6IGxpbmUgJXMgY29sdW1uICVkIChjaGFyICVkKScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZSwgY29sLCBpZHgpKQogCiBjbGFzcyBUZXN0UHlGYWlsKFRlc3RGYWlsLCBQeVRlc3QpOiBwYXNzCiBjbGFzcyBUZXN0Q0ZhaWwoVGVzdEZhaWwsIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfcmVjdXJzaW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfcmVjdXJzaW9uLnB5CmluZGV4IDFhNzYyNTQuLjg3N2RjNDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X3JlY3Vyc2lvbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9yZWN1cnNpb24ucHkKQEAgLTY4LDExICs2OCwxMSBAQAogICAgIGRlZiB0ZXN0X2hpZ2hseV9uZXN0ZWRfb2JqZWN0c19kZWNvZGluZyhzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgbG9hZGluZyBoaWdobHktbmVzdGVkIG9iamVjdHMgZG9lc24ndCBzZWdmYXVsdCB3aGVuIEMKICAgICAgICAgIyBhY2NlbGVyYXRpb25zIGFyZSB1c2VkLiBTZWUgIzEyMDE3Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvcik6CiAgICAgICAgICAgICBzZWxmLmxvYWRzKCd7ImEiOicgKiAxMDAwMDAgKyAnMScgKyAnfScgKiAxMDAwMDApCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvcik6CiAgICAgICAgICAgICBzZWxmLmxvYWRzKCd7ImEiOicgKiAxMDAwMDAgKyAnWzFdJyArICd9JyAqIDEwMDAwMCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yKToKICAgICAgICAgICAgIHNlbGYubG9hZHMoJ1snICogMTAwMDAwICsgJzEnICsgJ10nICogMTAwMDAwKQogCiAgICAgZGVmIHRlc3RfaGlnaGx5X25lc3RlZF9vYmplY3RzX2VuY29kaW5nKHNlbGYpOgpAQCAtODAsOSArODAsOSBAQAogICAgICAgICBsLCBkID0gW10sIHt9CiAgICAgICAgIGZvciB4IGluIHJhbmdlKDEwMDAwMCk6CiAgICAgICAgICAgICBsLCBkID0gW2xdLCB7J2snOmR9Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvcik6CiAgICAgICAgICAgICBzZWxmLmR1bXBzKGwpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvcik6CiAgICAgICAgICAgICBzZWxmLmR1bXBzKGQpCiAKICAgICBkZWYgdGVzdF9lbmRsZXNzX3JlY3Vyc2lvbihzZWxmKToKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICAiIiJJZiBjaGVja19jaXJjdWxhciBpcyBGYWxzZSwgdGhpcyB3aWxsIGtlZXAgYWRkaW5nIGFub3RoZXIgbGlzdC4iIiIKICAgICAgICAgICAgICAgICByZXR1cm4gW29dCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yKToKICAgICAgICAgICAgIEVuZGxlc3NKU09ORW5jb2RlcihjaGVja19jaXJjdWxhcj1GYWxzZSkuZW5jb2RlKDVqKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X3NjYW5zdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9zY2Fuc3RyaW5nLnB5CmluZGV4IDA3ZjQzNTguLjJkM2VlOGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X3NjYW5zdHJpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3Rfc2NhbnN0cmluZy5weQpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICAnIlxcdWQ4MzRcXHUwWDIwIicsCiAgICAgICAgIF0KICAgICAgICAgZm9yIHMgaW4gYmFkX2VzY2FwZXM6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1zKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5KU09ORGVjb2RlRXJyb3IsIG1zZz1zKToKICAgICAgICAgICAgICAgICBzY2Fuc3RyaW5nKHMsIDEsIFRydWUpCiAKICAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X3Rvb2wucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF90b29sLnB5CmluZGV4IDBjMzllNTYuLjE1ZjM3MzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X3Rvb2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfdG9vbC5weQpAQCAtNCw3ICs0LDggQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN1YnByb2Nlc3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKKwogCiBjbGFzcyBUZXN0VG9vbCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGF0YSA9ICIiIgpAQCAtMTUsNyArMTYsNyBAQAogICAgICAgICAgICAgOiJ5ZXMifSAgXQogICAgICAgICAgICAiIiIKIAotICAgIGV4cGVjdCA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgZXhwZWN0X3dpdGhvdXRfc29ydF9rZXlzID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKICAgICBbCiAgICAgICAgIFsKICAgICAgICAgICAgICJibG9ycGllIgpAQCAtMzcsNiArMzgsMjggQEAKICAgICBdCiAgICAgIiIiKQogCisgICAgZXhwZWN0ID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICBbCisgICAgICAgIFsKKyAgICAgICAgICAgICJibG9ycGllIgorICAgICAgICBdLAorICAgICAgICBbCisgICAgICAgICAgICAid2hvb3BzIgorICAgICAgICBdLAorICAgICAgICBbXSwKKyAgICAgICAgImQtc2h0YWVvdSIsCisgICAgICAgICJkLW50aGlvdWgiLAorICAgICAgICAiaS12aGJqa2hudGgiLAorICAgICAgICB7CisgICAgICAgICAgICAibmlmdHkiOiA4NworICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibW9yZWZpZWxkIjogZmFsc2UsCisgICAgICAgICAgICAiZmllbGQiOiAieWVzIgorICAgICAgICB9CisgICAgXQorICAgICIiIikKKwogICAgIGRlZiB0ZXN0X3N0ZGluX3N0ZG91dChzZWxmKToKICAgICAgICAgd2l0aCBzdWJwcm9jZXNzLlBvcGVuKAogICAgICAgICAgICAgICAgIChzeXMuZXhlY3V0YWJsZSwgJy1tJywgJ2pzb24udG9vbCcpLApAQCAtNTUsNiArNzgsNyBAQAogICAgIGRlZiB0ZXN0X2luZmlsZV9zdGRvdXQoc2VsZik6CiAgICAgICAgIGluZmlsZSA9IHNlbGYuX2NyZWF0ZV9pbmZpbGUoKQogICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdqc29uLnRvb2wnLCBpbmZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKSwgc2VsZi5leHBlY3QuZW5jb2RlKCkuc3BsaXRsaW5lcygpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQogCkBAIC02NSw1ICs4OSwyMCBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBvdXRmaWxlKQogICAgICAgICB3aXRoIG9wZW4ob3V0ZmlsZSwgInIiKSBhcyBmcDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZCgpLCBzZWxmLmV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworICAgIGRlZiB0ZXN0X2hlbHBfZmxhZyhzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnanNvbi50b29sJywgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5zdGFydHN3aXRoKGIndXNhZ2U6ICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisgICAgZGVmIHRlc3Rfc29ydF9rZXlzX2ZsYWcoc2VsZik6CisgICAgICAgIGluZmlsZSA9IHNlbGYuX2NyZWF0ZV9pbmZpbGUoKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdqc29uLnRvb2wnLCAnLS1zb3J0LWtleXMnLCBpbmZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF93aXRob3V0X3NvcnRfa2V5cy5lbmNvZGUoKS5zcGxpdGxpbmVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5IGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQppbmRleCA3ZjMxNWQ0Li5kODJlMzNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKQEAgLTQsNyArNCw2IEBACiBfX2VtYWlsX18gPSAic2Vvaml3b24gYXQgZ21haWwgZG90IGNvbSIKIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGRlZiBwb3Nvbmx5X3N1bShwb3NfYXJnMSwgKmFyZywgKiprd2FyZyk6CiAgICAgcmV0dXJuIHBvc19hcmcxICsgc3VtKGFyZykgKyBzdW0oa3dhcmcudmFsdWVzKCkpCkBAIC0xODYsOCArMTg1LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyLmV4Y2VwdGlvbiksICJuYW1lICdiJyBpcyBub3QgZGVmaW5lZCIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChLZXl3b3JkT25seUFyZ1Rlc3RDYXNlKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2txdWV1ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CmluZGV4IGY3OWJkODkuLmY4MjIwMjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CkBAIC05LDcgKzksNiBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGlmIG5vdCBoYXNhdHRyKHNlbGVjdCwgImtxdWV1ZSIpOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0ZXN0IHdvcmtzIG9ubHkgb24gQlNEIikKIApAQCAtMTE0LDcgKzExMyw3IEBACiAgICAgZGVmIHRlc3RfcXVldWVfZXZlbnQoc2VsZik6CiAgICAgICAgIHNlcnZlclNvY2tldCA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICBzZXJ2ZXJTb2NrZXQuYmluZCgoJzEyNy4wLjAuMScsIDApKQotICAgICAgICBzZXJ2ZXJTb2NrZXQubGlzdGVuKDEpCisgICAgICAgIHNlcnZlclNvY2tldC5saXN0ZW4oKQogICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgY2xpZW50LnNldGJsb2NraW5nKEZhbHNlKQogICAgICAgICB0cnk6CkBAIC0yMzcsOCArMjM2LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoa3F1ZXVlLmZpbGVubygpKSwgRmFsc2UpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RLUXVldWUpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5IGIvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKaW5kZXggNzkxNTdkZS4uNDdlMmVkZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKQEAgLTcsNiArNyw3IEBACiAKIAogRklMRU5BTUUgPSBsaW5lY2FjaGUuX19maWxlX18KK05PTkVYSVNURU5UX0ZJTEVOQU1FID0gRklMRU5BTUUgKyAnLm1pc3NpbmcnCiBJTlZBTElEX05BTUUgPSAnIUAkKSghQCNfMScKIEVNUFRZID0gJycKIFRFU1RTID0gJ2luc3BlY3RfZm9kZGVyIGluc3BlY3RfZm9kZGVyMiBtYXBwaW5nX3Rlc3RzJwpAQCAtMTI2LDYgKzEyNyw0OCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZ2V0bGluZShzb3VyY2VfbmFtZSwgaW5kZXggKyAxKSkKICAgICAgICAgICAgICAgICBzb3VyY2VfbGlzdC5hcHBlbmQobGluZSkKIAorICAgIGRlZiB0ZXN0X2xhenljYWNoZV9ub19nbG9iYWxzKHNlbGYpOgorICAgICAgICBsaW5lcyA9IGxpbmVjYWNoZS5nZXRsaW5lcyhGSUxFTkFNRSkKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBsaW5lY2FjaGUubGF6eWNhY2hlKEZJTEVOQU1FLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgbGluZWNhY2hlLmdldGxpbmVzKEZJTEVOQU1FKSkKKworICAgIGRlZiB0ZXN0X2xhenljYWNoZV9zbW9rZShzZWxmKToKKyAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoTk9ORVhJU1RFTlRfRklMRU5BTUUsIGdsb2JhbHMoKSkKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgVHJ1ZSwgbGluZWNhY2hlLmxhenljYWNoZShOT05FWElTVEVOVF9GSUxFTkFNRSwgZ2xvYmFscygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4obGluZWNhY2hlLmNhY2hlW05PTkVYSVNURU5UX0ZJTEVOQU1FXSkpCisgICAgICAgICMgTm90ZSBoZXJlIHRoYXQgd2UncmUgbG9va2luZyB1cCBhIG5vbmV4aXN0ZW50IGZpbGVuYW1lIHdpdGggbm8KKyAgICAgICAgIyBnbG9iYWxzOiB0aGlzIHdvdWxkIGVycm9yIGlmIHRoZSBsYXp5IHZhbHVlIHdhc24ndCByZXNvbHZlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgbGluZWNhY2hlLmdldGxpbmVzKE5PTkVYSVNURU5UX0ZJTEVOQU1FKSkKKworICAgIGRlZiB0ZXN0X2xhenljYWNoZV9wcm92aWRlX2FmdGVyX2ZhaWxlZF9sb29rdXAoc2VsZik6CisgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKKyAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoTk9ORVhJU1RFTlRfRklMRU5BTUUsIGdsb2JhbHMoKSkKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBsaW5lY2FjaGUuZ2V0bGluZXMoTk9ORVhJU1RFTlRfRklMRU5BTUUpCisgICAgICAgIGxpbmVjYWNoZS5sYXp5Y2FjaGUoTk9ORVhJU1RFTlRfRklMRU5BTUUsIGdsb2JhbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgbGluZWNhY2hlLnVwZGF0ZWNhY2hlKE5PTkVYSVNURU5UX0ZJTEVOQU1FKSkKKworICAgIGRlZiB0ZXN0X2xhenljYWNoZV9jaGVjayhzZWxmKToKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBsaW5lY2FjaGUubGF6eWNhY2hlKE5PTkVYSVNURU5UX0ZJTEVOQU1FLCBnbG9iYWxzKCkpCisgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKCkKKworICAgIGRlZiB0ZXN0X2xhenljYWNoZV9iYWRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgbGluZWNhY2hlLmxhenljYWNoZSgnJywgZ2xvYmFscygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgbGluZWNhY2hlLmxhenljYWNoZSgnPGZvbz4nLCBnbG9iYWxzKCkpKQorCisgICAgZGVmIHRlc3RfbGF6eWNhY2hlX2FscmVhZHlfY2FjaGVkKHNlbGYpOgorICAgICAgICBsaW5lY2FjaGUuY2xlYXJjYWNoZSgpCisgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKE5PTkVYSVNURU5UX0ZJTEVOQU1FLCBnbG9iYWxzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGYWxzZSwKKyAgICAgICAgICAgIGxpbmVjYWNoZS5sYXp5Y2FjaGUoTk9ORVhJU1RFTlRfRklMRU5BTUUsIGdsb2JhbHMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgbGVuKGxpbmVjYWNoZS5jYWNoZVtOT05FWElTVEVOVF9GSUxFTkFNRV0pKQorCiAgICAgZGVmIHRlc3RfbWVtb3J5ZXJyb3Ioc2VsZik6CiAgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKEZJTEVOQU1FKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xpc3QucHkgYi9MaWIvdGVzdC90ZXN0X2xpc3QucHkKaW5kZXggM2I5NDcwMC4uOGY4MmFiNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9saXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGlzdC5weQpAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgbGlzdF90ZXN0cwogaW1wb3J0IHBpY2tsZQoraW1wb3J0IHVuaXR0ZXN0CiAKIGNsYXNzIExpc3RUZXN0KGxpc3RfdGVzdHMuQ29tbW9uVGVzdCk6CiAgICAgdHlwZTJ0ZXN0ID0gbGlzdApAQCAtNzEsMzQgKzcyLDc2IEBACiAgICAgICAgIGNoZWNrKDEwMDAwMDApCiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcl9waWNrbGUoc2VsZik6Ci0gICAgICAgICMgVXNlcmxpc3QgaXRlcmF0b3JzIGRvbid0IHN1cHBvcnQgcGlja2xpbmcgeWV0IHNpbmNlCi0gICAgICAgICMgdGhleSBhcmUgYmFzZWQgb24gZ2VuZXJhdG9ycy4KLSAgICAgICAgZGF0YSA9IHNlbGYudHlwZTJ0ZXN0KFs0LCA1LCA2LCA3XSkKKyAgICAgICAgb3JpZyA9IHNlbGYudHlwZTJ0ZXN0KFs0LCA1LCA2LCA3XSkKKyAgICAgICAgZGF0YSA9IFsxMCwgMTEsIDEyLCAxMywgMTQsIDE1XQogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKLSAgICAgICAgICAgIGl0ID0gaXRvcmcgPSBpdGVyKGRhdGEpCi0gICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKLSAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChkYXRhKSkKKyAgICAgICAgICAgICMgaW5pdGlhbCBpdGVyYXRvcgorICAgICAgICAgICAgaXRvcmlnID0gaXRlcihvcmlnKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcygoaXRvcmlnLCBvcmlnKSwgcHJvdG8pCisgICAgICAgICAgICBpdCwgYSA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgYVs6XSA9IGRhdGEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdCksIHR5cGUoaXRvcmlnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGEpCiAKLSAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgICAgICBuZXh0KGl0KQotICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QoZGF0YSlbMTpdKQorICAgICAgICAgICAgIyBydW5uaW5nIGl0ZXJhdG9yCisgICAgICAgICAgICBuZXh0KGl0b3JpZykKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoKGl0b3JpZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGEgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGFbOl0gPSBkYXRhCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXQpLCB0eXBlKGl0b3JpZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhWzE6XSkKKworICAgICAgICAgICAgIyBlbXB0eSBpdGVyYXRvcgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG9yaWcpKToKKyAgICAgICAgICAgICAgICBuZXh0KGl0b3JpZykKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoKGl0b3JpZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGEgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGFbOl0gPSBkYXRhCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXQpLCB0eXBlKGl0b3JpZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhW2xlbihvcmlnKTpdKQorCisgICAgICAgICAgICAjIGV4aGF1c3RlZCBpdGVyYXRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXRvcmlnKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcygoaXRvcmlnLCBvcmlnKSwgcHJvdG8pCisgICAgICAgICAgICBpdCwgYSA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgYVs6XSA9IGRhdGEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQogCiAgICAgZGVmIHRlc3RfcmV2ZXJzZWRfcGlja2xlKHNlbGYpOgotICAgICAgICBkYXRhID0gc2VsZi50eXBlMnRlc3QoWzQsIDUsIDYsIDddKQorICAgICAgICBvcmlnID0gc2VsZi50eXBlMnRlc3QoWzQsIDUsIDYsIDddKQorICAgICAgICBkYXRhID0gWzEwLCAxMSwgMTIsIDEzLCAxNCwgMTVdCiAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgotICAgICAgICAgICAgaXQgPSBpdG9yZyA9IHJldmVyc2VkKGRhdGEpCi0gICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKLSAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSkpCisgICAgICAgICAgICAjIGluaXRpYWwgaXRlcmF0b3IKKyAgICAgICAgICAgIGl0b3JpZyA9IHJldmVyc2VkKG9yaWcpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKChpdG9yaWcsIG9yaWcpLCBwcm90bykKKyAgICAgICAgICAgIGl0LCBhID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBhWzpdID0gZGF0YQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0KSwgdHlwZShpdG9yaWcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgZGF0YVtsZW4ob3JpZyktMTo6LTFdKQogCi0gICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChpdCksIHNlbGYudHlwZTJ0ZXN0KHJldmVyc2VkKGRhdGEpKVsxOl0pCisgICAgICAgICAgICAjIHJ1bm5pbmcgaXRlcmF0b3IKKyAgICAgICAgICAgIG5leHQoaXRvcmlnKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcygoaXRvcmlnLCBvcmlnKSwgcHJvdG8pCisgICAgICAgICAgICBpdCwgYSA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgYVs6XSA9IGRhdGEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdCksIHR5cGUoaXRvcmlnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGFbbGVuKG9yaWcpLTI6Oi0xXSkKKworICAgICAgICAgICAgIyBlbXB0eSBpdGVyYXRvcgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKG9yaWcpKToKKyAgICAgICAgICAgICAgICBuZXh0KGl0b3JpZykKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoKGl0b3JpZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGEgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGFbOl0gPSBkYXRhCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXQpLCB0eXBlKGl0b3JpZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKKworICAgICAgICAgICAgIyBleGhhdXN0ZWQgaXRlcmF0b3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0b3JpZykKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoKGl0b3JpZywgb3JpZyksIHByb3RvKQorICAgICAgICAgICAgaXQsIGEgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGFbOl0gPSBkYXRhCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKIAogICAgIGRlZiB0ZXN0X25vX2NvbWRhdF9mb2xkaW5nKHNlbGYpOgogICAgICAgICAjIElzc3VlIDg4NDc6IEluIHRoZSBQR08gYnVpbGQsIHRoZSBNU1ZDIGxpbmtlcidzIENPTURBVCBmb2xkaW5nCkBAIC0xMDgsMjAgKzE1MSw1IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgICgzLCkgKyBMKFsxLDJdKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTGlzdFRlc3QpCi0KLSAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpbXBvcnQgc3lzCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6Ci0gICAgICAgIGltcG9ydCBnYwotICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKLSAgICAgICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KExpc3RUZXN0KQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvY2FsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CmluZGV4IDkzNjlhMjUuLmZhZTJjM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CkBAIC01MjQsNSArNTI0LDU5IEBACiAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsIChiJ25vdCcsIGIndmFsaWQnKSkKIAogCitjbGFzcyBCYXNlRGVsb2NhbGl6ZVRlc3QoQmFzZUxvY2FsaXplZFRlc3QpOgorCisgICAgZGVmIF90ZXN0X2RlbG9jYWxpemUoc2VsZiwgdmFsdWUsIG91dCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmRlbG9jYWxpemUodmFsdWUpLCBvdXQpCisKKyAgICBkZWYgX3Rlc3RfYXRvZihzZWxmLCB2YWx1ZSwgb3V0KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuYXRvZih2YWx1ZSksIG91dCkKKworICAgIGRlZiBfdGVzdF9hdG9pKHNlbGYsIHZhbHVlLCBvdXQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5hdG9pKHZhbHVlKSwgb3V0KQorCisKK2NsYXNzIFRlc3RFblVTRGVsb2NhbGl6ZShFblVTQ29va2VkVGVzdCwgQmFzZURlbG9jYWxpemVUZXN0KToKKworICAgIGRlZiB0ZXN0X2RlbG9jYWxpemUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZGVsb2NhbGl6ZSgnNTAwMDAuMDAnLCAnNTAwMDAuMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2RlbG9jYWxpemUoJzUwLDAwMC4wMCcsICc1MDAwMC4wMCcpCisKKyAgICBkZWYgdGVzdF9hdG9mKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2F0b2YoJzUwMDAwLjAwJywgNTAwMDAuKQorICAgICAgICBzZWxmLl90ZXN0X2F0b2YoJzUwLDAwMC4wMCcsIDUwMDAwLikKKworICAgIGRlZiB0ZXN0X2F0b2koc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXRvaSgnNTAwMDAnLCA1MDAwMCkKKyAgICAgICAgc2VsZi5fdGVzdF9hdG9pKCc1MCwwMDAnLCA1MDAwMCkKKworCitjbGFzcyBUZXN0Q0RlbG9jYWxpemVUZXN0KENDb29rZWRUZXN0LCBCYXNlRGVsb2NhbGl6ZVRlc3QpOgorCisgICAgZGVmIHRlc3RfZGVsb2NhbGl6ZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9kZWxvY2FsaXplKCc1MDAwMC4wMCcsICc1MDAwMC4wMCcpCisKKyAgICBkZWYgdGVzdF9hdG9mKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2F0b2YoJzUwMDAwLjAwJywgNTAwMDAuKQorCisgICAgZGVmIHRlc3RfYXRvaShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hdG9pKCc1MDAwMCcsIDUwMDAwKQorCisKK2NsYXNzIFRlc3RmckZSRGVsb2NhbGl6ZVRlc3QoRnJGUkNvb2tlZFRlc3QsIEJhc2VEZWxvY2FsaXplVGVzdCk6CisKKyAgICBkZWYgdGVzdF9kZWxvY2FsaXplKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2RlbG9jYWxpemUoJzUwMDAwLDAwJywgJzUwMDAwLjAwJykKKyAgICAgICAgc2VsZi5fdGVzdF9kZWxvY2FsaXplKCc1MCAwMDAsMDAnLCAnNTAwMDAuMDAnKQorCisgICAgZGVmIHRlc3RfYXRvZihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hdG9mKCc1MDAwMCwwMCcsIDUwMDAwLikKKyAgICAgICAgc2VsZi5fdGVzdF9hdG9mKCc1MCAwMDAsMDAnLCA1MDAwMC4pCisKKyAgICBkZWYgdGVzdF9hdG9pKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2F0b2koJzUwMDAwJywgNTAwMDApCisgICAgICAgIHNlbGYuX3Rlc3RfYXRvaSgnNTAgMDAwJywgNTAwMDApCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQppbmRleCBiMTdmNWU1Li5jYjZhNjI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAwMS0yMDEzIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDE0IGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMTYsNyArMTYsNyBAQAogCiAiIiJUZXN0IGhhcm5lc3MgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZS4gUnVuIGFsbCB0ZXN0cy4KIAotQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICIiIgogCiBpbXBvcnQgbG9nZ2luZwpAQCAtMzQsMTUgKzM0LDEyIEBACiBpbXBvcnQgcXVldWUKIGltcG9ydCByYW5kb20KIGltcG9ydCByZQotaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCi1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChjYXB0dXJlZF9zdGRvdXQsIHJ1bl93aXRoX2xvY2FsZSwgcnVuX3VuaXR0ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaCwgcmVxdWlyZXNfemxpYiwgVGVzdEhhbmRsZXIsIE1hdGNoZXIsIEhPU1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBfYXR0cikKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC01MiwxNiArNDksMTIgQEAKICAgICBpbXBvcnQgdGhyZWFkaW5nCiAgICAgIyBUaGUgZm9sbG93aW5nIGltcG9ydHMgYXJlIG5lZWRlZCBvbmx5IGZvciB0ZXN0cyB3aGljaAogICAgICMgcmVxdWlyZSB0aHJlYWRpbmcKLSAgICBpbXBvcnQgYXN5bmNoYXQKICAgICBpbXBvcnQgYXN5bmNvcmUKLSAgICBpbXBvcnQgZXJybm8KICAgICBmcm9tIGh0dHAuc2VydmVyIGltcG9ydCBIVFRQU2VydmVyLCBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyCiAgICAgaW1wb3J0IHNtdHBkCiAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlLCBwYXJzZV9xcwogICAgIGZyb20gc29ja2V0c2VydmVyIGltcG9ydCAoVGhyZWFkaW5nVURQU2VydmVyLCBEYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1VuaXhTdHJlYW1TZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIsIFN0cmVhbVJlcXVlc3RIYW5kbGVyKQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIHRyeToKQEAgLTY0MiwyMiArNjM1LDIzIEBACiAgICAgICAgIGggPSBUZXN0U3RyZWFtSGFuZGxlcihCYWRTdHJlYW0oKSkKICAgICAgICAgciA9IGxvZ2dpbmcubWFrZUxvZ1JlY29yZCh7fSkKICAgICAgICAgb2xkX3JhaXNlID0gbG9nZ2luZy5yYWlzZUV4Y2VwdGlvbnMKLSAgICAgICAgb2xkX3N0ZGVyciA9IHN5cy5zdGRlcnIKKwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoLmhhbmRsZShyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhoLmVycm9yX3JlY29yZCwgcikKKwogICAgICAgICAgICAgaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihCYWRTdHJlYW0oKSkKLSAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzaW8gPSBpby5TdHJpbmdJTygpCi0gICAgICAgICAgICBoLmhhbmRsZShyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignXG5SdW50aW1lRXJyb3I6IGRlbGliZXJhdGUgbWlzdGFrZVxuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2lvLmdldHZhbHVlKCkpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIGguaGFuZGxlKHIpCisgICAgICAgICAgICAgICAgbXNnID0gJ1xuUnVudGltZUVycm9yOiBkZWxpYmVyYXRlIG1pc3Rha2VcbicKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1zZywgc3RkZXJyLmdldHZhbHVlKCkpCisKICAgICAgICAgICAgIGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zID0gRmFsc2UKLSAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzaW8gPSBpby5TdHJpbmdJTygpCi0gICAgICAgICAgICBoLmhhbmRsZShyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2lvLmdldHZhbHVlKCkpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIGguaGFuZGxlKHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc3RkZXJyLmdldHZhbHVlKCkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBsb2dnaW5nLnJhaXNlRXhjZXB0aW9ucyA9IG9sZF9yYWlzZQotICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9sZF9zdGRlcnIKIAogIyAtLSBUaGUgZm9sbG93aW5nIHNlY3Rpb24gY291bGQgYmUgbW92ZWQgaW50byBhIHNlcnZlcl9oZWxwZXIucHkgbW9kdWxlCiAjIC0tIGlmIGl0IHByb3ZlcyB0byBiZSBvZiB3aWRlciB1dGlsaXR5IHRoYW4ganVzdCB0ZXN0X2xvZ2dpbmcKQEAgLTY4NSw3ICs2NzksOCBAQAogICAgICAgICAiIiIKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkciwgaGFuZGxlciwgcG9sbF9pbnRlcnZhbCwgc29ja21hcCk6Ci0gICAgICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIE5vbmUsIG1hcD1zb2NrbWFwKQorICAgICAgICAgICAgc210cGQuU01UUFNlcnZlci5fX2luaXRfXyhzZWxmLCBhZGRyLCBOb25lLCBtYXA9c29ja21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9VHJ1ZSkKICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KICAgICAgICAgICAgIHNlbGYuX2hhbmRsZXIgPSBoYW5kbGVyCiAgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCkBAIC05MjcsMTAgKzkyMiwxMCBAQAogICAgIFRJTUVPVVQgPSA4LjAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKICAgICAgICAgc29ja21hcCA9IHt9Ci0gICAgICAgIHNlcnZlciA9IFRlc3RTTVRQU2VydmVyKChIT1NULCAwKSwgc2VsZi5wcm9jZXNzX21lc3NhZ2UsIDAuMDAxLAorICAgICAgICBzZXJ2ZXIgPSBUZXN0U01UUFNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgc2VsZi5wcm9jZXNzX21lc3NhZ2UsIDAuMDAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbWFwKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQotICAgICAgICBhZGRyID0gKEhPU1QsIHNlcnZlci5wb3J0KQorICAgICAgICBhZGRyID0gKHN1cHBvcnQuSE9TVCwgc2VydmVyLnBvcnQpCiAgICAgICAgIGggPSBsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVyKGFkZHIsICdtZScsICd5b3UnLCAnTG9nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1zZWxmLlRJTUVPVVQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC50b2FkZHJzLCBbJ3lvdSddKQpAQCAtMTI0Niw3ICsxMjQxLDcgQEAKIAogICAgIGRlZiB0ZXN0X2NvbmZpZzBfb2soc2VsZik6CiAgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIGZpbGUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKICAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMCkKICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKICAgICAgICAgICAgICMgV29uJ3Qgb3V0cHV0IGFueXRoaW5nCkBAIC0xMjYxLDcgKzEyNTYsNyBAQAogCiAgICAgZGVmIHRlc3RfY29uZmlnMF91c2luZ19jcF9vayhzZWxmKToKICAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgZmlsZSB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKHRleHR3cmFwLmRlZGVudChzZWxmLmNvbmZpZzApKQogICAgICAgICAgICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKICAgICAgICAgICAgIGNwLnJlYWRfZmlsZShmaWxlKQpAQCAtMTI3OSw3ICsxMjc0LDcgQEAKIAogICAgIGRlZiB0ZXN0X2NvbmZpZzFfb2soc2VsZiwgY29uZmlnPWNvbmZpZzEpOgogICAgICAgICAjIEEgY29uZmlnIGZpbGUgZGVmaW5pbmcgYSBzdWItcGFyc2VyIGFzIHdlbGwuCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoY29uZmlnKQogICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCiAgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCkBAIC0xMzAyLDcgKzEyOTcsNyBAQAogCiAgICAgZGVmIHRlc3RfY29uZmlnNF9vayhzZWxmKToKICAgICAgICAgIyBBIGNvbmZpZyBmaWxlIHNwZWNpZnlpbmcgYSBjdXN0b20gZm9ybWF0dGVyIGNsYXNzLgotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKICAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnNCkKICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKICAgICAgICAgICAgIHRyeToKQEAgLTEzMjIsNyArMTMxNyw3IEBACiAgICAgICAgIHNlbGYudGVzdF9jb25maWcxX29rKGNvbmZpZz1zZWxmLmNvbmZpZzYpCiAKICAgICBkZWYgdGVzdF9jb25maWc3X29rKHNlbGYpOgotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKICAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMWEpCiAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKICAgICAgICAgICAgICMgU2VlIGlzc3VlICMxMTQyNC4gY29tcGlsZXItaHlwaGVuYXRlZCBzb3J0cwpAQCAtMTM0Miw3ICsxMzM3LDcgQEAKICAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCiAgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc3KQogICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKQEAgLTE2NzcsNyArMTY3Miw4IEBACiAgICAgICAgICAgICBzZWN1cmVfY2xpZW50ID0gc2VjdXJlIGFuZCBzc2xjdHgKICAgICAgICAgICAgIHNlbGYuaF9oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlcihob3N0LCAnL2Zyb2InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZT1zZWN1cmVfY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PWNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM9KCdmb28nLCAnYmFyJykpCiAgICAgICAgICAgICBzZWxmLmxvZ19kYXRhID0gTm9uZQogICAgICAgICAgICAgcm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLmhfaGRscikKIApAQCAtMjQ4OSw3ICsyNDg1LDcgQEAKIAogICAgIGRlZiB0ZXN0X2NvbmZpZzBfb2soc2VsZik6CiAgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzApCiAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCiAgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZwpAQCAtMjUwNCw3ICsyNTAwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2NvbmZpZzFfb2soc2VsZiwgY29uZmlnPWNvbmZpZzEpOgogICAgICAgICAjIEEgY29uZmlnIGRlZmluaW5nIGEgc3ViLXBhcnNlciBhcyB3ZWxsLgotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKICAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKGNvbmZpZykKICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQogICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQpAQCAtMjUzNSw3ICsyNTMxLDcgQEAKIAogICAgIGRlZiB0ZXN0X2NvbmZpZzRfb2soc2VsZik6CiAgICAgICAgICMgQSBjb25maWcgc3BlY2lmeWluZyBhIGN1c3RvbSBmb3JtYXR0ZXIgY2xhc3MuCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc0KQogICAgICAgICAgICAgI2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKICAgICAgICAgICAgIHRyeToKQEAgLTI1NTAsNyArMjU0Niw3IEBACiAKICAgICBkZWYgdGVzdF9jb25maWc0YV9vayhzZWxmKToKICAgICAgICAgIyBBIGNvbmZpZyBzcGVjaWZ5aW5nIGEgY3VzdG9tIGZvcm1hdHRlciBjbGFzcy4KLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzRhKQogICAgICAgICAgICAgI2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKICAgICAgICAgICAgIHRyeToKQEAgLTI1NzAsNyArMjU2Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnNikKIAogICAgIGRlZiB0ZXN0X2NvbmZpZzdfb2soc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxKQogICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCiAgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCkBAIC0yNTgyLDcgKzI1NzgsNyBAQAogICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzcpCiAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dnZXIuZGlzYWJsZWQpCkBAIC0yNTk5LDcgKzI1OTUsNyBAQAogCiAgICAgI1NhbWUgYXMgdGVzdF9jb25maWdfN19vayBidXQgZG9uJ3QgZGlzYWJsZSBvbGQgbG9nZ2Vycy4KICAgICBkZWYgdGVzdF9jb25maWdfOF9vayhzZWxmKToKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzEpCiAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKICAgICAgICAgICAgICMgQWxsIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQpAQCAtMjYxMSw3ICsyNjA3LDcgQEAKICAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCiAgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc4KQogICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKQEAgLTI2MzIsNyArMjYyOCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCiAKICAgICBkZWYgdGVzdF9jb25maWdfOGFfb2soc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxYSkKICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQogICAgICAgICAgICAgIyBTZWUgaXNzdWUgIzExNDI0LiBjb21waWxlci1oeXBoZW5hdGVkIHNvcnRzCkBAIC0yNjUyLDcgKzI2NDgsNyBAQAogICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzhhKQogICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKQEAgLTI2NzUsNyArMjY3MSw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCiAKICAgICBkZWYgdGVzdF9jb25maWdfOV9vayhzZWxmKToKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzkpCiAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKICAgICAgICAgICAgICNOb3RoaW5nIHdpbGwgYmUgb3V0cHV0IHNpbmNlIGJvdGggaGFuZGxlciBhbmQgbG9nZ2VyIGFyZSBzZXQgdG8gV0FSTklORwpAQCAtMjY5Myw3ICsyNjg5LDcgQEAKICAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCiAKICAgICBkZWYgdGVzdF9jb25maWdfMTBfb2soc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxMCkKICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQogICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKQEAgLTI3MjEsNyArMjcxNyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMTMpCiAKICAgICBkZWYgdGVzdF9jb25maWcxNF9vayhzZWxmKToKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzE0KQogICAgICAgICAgICAgaCA9IGxvZ2dpbmcuX2hhbmRsZXJzWydoYW5kMSddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZm9vLCAnYmFyJykKQEAgLTI3NjAsNyArMjc1Niw3IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIGRlZiB0ZXN0X2xpc3Rlbl9jb25maWdfMTBfb2soc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIoanNvbi5kdW1wcyhzZWxmLmNvbmZpZzEwKSkKICAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQogICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKQEAgLTI3ODAsNyArMjc3Niw3IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIGRlZiB0ZXN0X2xpc3Rlbl9jb25maWdfMV9vayhzZWxmKToKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0ZXh0d3JhcC5kZWRlbnQoQ29uZmlnRmlsZVRlc3QuY29uZmlnMSkpCiAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKICAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKQEAgLTI4MDcsNyArMjgwMyw3IEBACiAgICAgICAgICMgRmlyc3QsIHNwZWNpZnkgYSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gdGhhdCB3aWxsIGZhaWwuCiAgICAgICAgICMgV2UgZXhwZWN0IHRvIHNlZSBubyBvdXRwdXQsIHNpbmNlIG91ciBjb25maWd1cmF0aW9uCiAgICAgICAgICMgbmV2ZXIgdG9vayBlZmZlY3QuCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZCwgdmVyaWZ5X2ZhaWwpCiAgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCiAgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQpAQCAtMjgyMiw3ICsyODE4LDcgQEAKICAgICAgICAgIyBOb3csIHBlcmZvcm0gbm8gdmVyaWZpY2F0aW9uLiBPdXIgY29uZmlndXJhdGlvbgogICAgICAgICAjIHNob3VsZCB0YWtlIGVmZmVjdC4KIAotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKICAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmQpICAgICMgbm8gdmVyaWZ5IGNhbGxhYmxlIHNwZWNpZmllZAogICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCiAgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCkBAIC0yODQwLDcgKzI4MzYsNyBAQAogCiAgICAgICAgICMgTm93LCBwZXJmb3JtIHZlcmlmaWNhdGlvbiB3aGljaCB0cmFuc2Zvcm1zIHRoZSBieXRlcy4KIAotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKICAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmRbOjotMV0sIHZlcmlmeV9yZXZlcnNlKQogICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCiAgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCkBAIC0yOTk1LDcgKzI5OTEsNyBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIobG9nZ2luZy5oYW5kbGVycywgJ1F1ZXVlTGlzdGVuZXInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQogICAgIGRlZiB0ZXN0X3F1ZXVlX2xpc3RlbmVyKHNlbGYpOgotICAgICAgICBoYW5kbGVyID0gVGVzdEhhbmRsZXIoTWF0Y2hlcigpKQorICAgICAgICBoYW5kbGVyID0gc3VwcG9ydC5UZXN0SGFuZGxlcihzdXBwb3J0Lk1hdGNoZXIoKSkKICAgICAgICAgbGlzdGVuZXIgPSBsb2dnaW5nLmhhbmRsZXJzLlF1ZXVlTGlzdGVuZXIoc2VsZi5xdWV1ZSwgaGFuZGxlcikKICAgICAgICAgbGlzdGVuZXIuc3RhcnQoKQogICAgICAgICB0cnk6CkBAIC0zMDA3LDYgKzMwMDMsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhbmRsZXIubWF0Y2hlcyhsZXZlbG5vPWxvZ2dpbmcuV0FSTklORywgbWVzc2FnZT0nMScpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFuZGxlci5tYXRjaGVzKGxldmVsbm89bG9nZ2luZy5FUlJPUiwgbWVzc2FnZT0nMicpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFuZGxlci5tYXRjaGVzKGxldmVsbm89bG9nZ2luZy5DUklUSUNBTCwgbWVzc2FnZT0nMycpKQorICAgICAgICBoYW5kbGVyLmNsb3NlKCkKKworICAgICAgICAjIE5vdyB0ZXN0IHdpdGggcmVzcGVjdF9oYW5kbGVyX2xldmVsIHNldAorCisgICAgICAgIGhhbmRsZXIgPSBzdXBwb3J0LlRlc3RIYW5kbGVyKHN1cHBvcnQuTWF0Y2hlcigpKQorICAgICAgICBoYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuQ1JJVElDQUwpCisgICAgICAgIGxpc3RlbmVyID0gbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyKHNlbGYucXVldWUsIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BlY3RfaGFuZGxlcl9sZXZlbD1UcnVlKQorICAgICAgICBsaXN0ZW5lci5zdGFydCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucXVlX2xvZ2dlci53YXJuaW5nKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLnF1ZV9sb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYucXVlX2xvZ2dlci5jcml0aWNhbChzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbGlzdGVuZXIuc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFuZGxlci5tYXRjaGVzKGxldmVsbm89bG9nZ2luZy5XQVJOSU5HLCBtZXNzYWdlPSc0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFuZGxlci5tYXRjaGVzKGxldmVsbm89bG9nZ2luZy5FUlJPUiwgbWVzc2FnZT0nNScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFuZGxlci5tYXRjaGVzKGxldmVsbm89bG9nZ2luZy5DUklUSUNBTCwgbWVzc2FnZT0nNicpKQorCiAKIFpFUk8gPSBkYXRldGltZS50aW1lZGVsdGEoMCkKIApAQCAtMzE2MywzMiArMzE3OCwzNSBAQAogICAgICAgICAjIFRlc3QgdGhlIGxhc3QgcmVzb3J0IGhhbmRsZXIKICAgICAgICAgcm9vdCA9IHNlbGYucm9vdF9sb2dnZXIKICAgICAgICAgcm9vdC5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9oZGxyKQotICAgICAgICBvbGRfc3RkZXJyID0gc3lzLnN0ZGVycgogICAgICAgICBvbGRfbGFzdHJlc29ydCA9IGxvZ2dpbmcubGFzdFJlc29ydAogICAgICAgICBvbGRfcmFpc2VfZXhjZXB0aW9ucyA9IGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zCisKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHNpbyA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgICAgIHJvb3QuZGVidWcoJ1RoaXMgc2hvdWxkIG5vdCBhcHBlYXInKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW8uZ2V0dmFsdWUoKSwgJycpCi0gICAgICAgICAgICByb290Lndhcm5pbmcoJ1RoaXMgaXMgeW91ciBmaW5hbCBjaGFuY2UhJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lvLmdldHZhbHVlKCksICdUaGlzIGlzIHlvdXIgZmluYWwgY2hhbmNlIVxuJykKLSAgICAgICAgICAgICNObyBoYW5kbGVycyBhbmQgbm8gbGFzdCByZXNvcnQsIHNvICdObyBoYW5kbGVycycgbWVzc2FnZQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICByb290LmRlYnVnKCdUaGlzIHNob3VsZCBub3QgYXBwZWFyJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZGVyci5nZXR2YWx1ZSgpLCAnJykKKyAgICAgICAgICAgICAgICByb290Lndhcm5pbmcoJ0ZpbmFsIGNoYW5jZSEnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLmdldHZhbHVlKCksICdGaW5hbCBjaGFuY2UhXG4nKQorCisgICAgICAgICAgICAjIE5vIGhhbmRsZXJzIGFuZCBubyBsYXN0IHJlc29ydCwgc28gJ05vIGhhbmRsZXJzJyBtZXNzYWdlCiAgICAgICAgICAgICBsb2dnaW5nLmxhc3RSZXNvcnQgPSBOb25lCi0gICAgICAgICAgICBzeXMuc3RkZXJyID0gc2lvID0gaW8uU3RyaW5nSU8oKQotICAgICAgICAgICAgcm9vdC53YXJuaW5nKCdUaGlzIGlzIHlvdXIgZmluYWwgY2hhbmNlIScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpby5nZXR2YWx1ZSgpLCAnTm8gaGFuZGxlcnMgY291bGQgYmUgZm91bmQgZm9yIGxvZ2dlciAicm9vdCJcbicpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIHJvb3Qud2FybmluZygnRmluYWwgY2hhbmNlIScpCisgICAgICAgICAgICAgICAgbXNnID0gJ05vIGhhbmRsZXJzIGNvdWxkIGJlIGZvdW5kIGZvciBsb2dnZXIgInJvb3QiXG4nCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwgbXNnKQorCiAgICAgICAgICAgICAjICdObyBoYW5kbGVycycgbWVzc2FnZSBvbmx5IHByaW50ZWQgb25jZQotICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHNpbyA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgICAgIHJvb3Qud2FybmluZygnVGhpcyBpcyB5b3VyIGZpbmFsIGNoYW5jZSEnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW8uZ2V0dmFsdWUoKSwgJycpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIHJvb3Qud2FybmluZygnRmluYWwgY2hhbmNlIScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwgJycpCisKKyAgICAgICAgICAgICMgSWYgcmFpc2VFeGNlcHRpb25zIGlzIEZhbHNlLCBubyBtZXNzYWdlIGlzIHByaW50ZWQKICAgICAgICAgICAgIHJvb3QubWFuYWdlci5lbWl0dGVkTm9IYW5kbGVyV2FybmluZyA9IEZhbHNlCi0gICAgICAgICAgICAjSWYgcmFpc2VFeGNlcHRpb25zIGlzIEZhbHNlLCBubyBtZXNzYWdlIGlzIHByaW50ZWQKICAgICAgICAgICAgIGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zID0gRmFsc2UKLSAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzaW8gPSBpby5TdHJpbmdJTygpCi0gICAgICAgICAgICByb290Lndhcm5pbmcoJ1RoaXMgaXMgeW91ciBmaW5hbCBjaGFuY2UhJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lvLmdldHZhbHVlKCksICcnKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICByb290Lndhcm5pbmcoJ0ZpbmFsIGNoYW5jZSEnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLmdldHZhbHVlKCksICcnKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9sZF9zdGRlcnIKICAgICAgICAgICAgIHJvb3QuYWRkSGFuZGxlcihzZWxmLnJvb3RfaGRscikKICAgICAgICAgICAgIGxvZ2dpbmcubGFzdFJlc29ydCA9IG9sZF9sYXN0cmVzb3J0CiAgICAgICAgICAgICBsb2dnaW5nLnJhaXNlRXhjZXB0aW9ucyA9IG9sZF9yYWlzZV9leGNlcHRpb25zCkBAIC0zMzE5LDggKzMzMzcsOCBAQAogCiAgICAgZGVmIF90ZXN0X2xvZyhzZWxmLCBtZXRob2QsIGxldmVsPU5vbmUpOgogICAgICAgICBjYWxsZWQgPSBbXQotICAgICAgICBwYXRjaChzZWxmLCBsb2dnaW5nLCAnYmFzaWNDb25maWcnLAotICAgICAgICAgICAgICBsYW1iZGEgKmEsICoqa3c6IGNhbGxlZC5hcHBlbmQoKGEsIGt3KSkpCisgICAgICAgIHN1cHBvcnQucGF0Y2goc2VsZiwgbG9nZ2luZywgJ2Jhc2ljQ29uZmlnJywKKyAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgKmEsICoqa3c6IGNhbGxlZC5hcHBlbmQoKGEsIGt3KSkpCiAKICAgICAgICAgcmVjb3JkaW5nID0gUmVjb3JkaW5nSGFuZGxlcigpCiAgICAgICAgIGxvZ2dpbmcucm9vdC5hZGRIYW5kbGVyKHJlY29yZGluZykKQEAgLTMzNzEsNiArMzM4OSw3IEBACiAgICAgICAgIGxvZ2dpbmcuc2V0TG9nZ2VyQ2xhc3MobG9nZ2luZy5Mb2dnZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5nZXRMb2dnZXJDbGFzcygpLCBsb2dnaW5nLkxvZ2dlcikKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX3R5cGVfY29sbGVjdGluZwogICAgIGRlZiB0ZXN0X2xvZ2dpbmdfYXRfc2h1dGRvd24oc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzIwMDM3CiAgICAgICAgIGNvZGUgPSAiIiJpZiAxOgpAQCAtMzQ5MSw3ICszNTEwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLnJvb3QubGV2ZWwsIHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCkKIAogICAgIGRlZiB0ZXN0X3N0cmZvcm1hdHN0eWxlKHNlbGYpOgotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKICAgICAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoc3RyZWFtPXN5cy5zdGRvdXQsIHN0eWxlPSJ7IikKICAgICAgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkxvZyBhbiBlcnJvciIpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LnNlZWsoMCkKQEAgLTM0OTksNyArMzUxOCw3IEBACiAgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6TG9nIGFuIGVycm9yIikKIAogICAgIGRlZiB0ZXN0X3N0cmluZ3RlbXBsYXRlc3R5bGUoc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhzdHJlYW09c3lzLnN0ZG91dCwgc3R5bGU9IiQiKQogICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiTG9nIGFuIGVycm9yIikKICAgICAgICAgICAgIHN5cy5zdGRvdXQuc2VlaygwKQpAQCAtMzYyMCw3ICszNjM5LDcgQEAKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb2dnaW5nLnJvb3Quc2V0TGV2ZWwsIG9sZF9sZXZlbCkKICAgICAgICAgICAgIGNhbGxlZC5hcHBlbmQoKGEsIGt3KSkKIAotICAgICAgICBwYXRjaChzZWxmLCBsb2dnaW5nLCAnYmFzaWNDb25maWcnLCBteV9iYXNpY19jb25maWcpCisgICAgICAgIHN1cHBvcnQucGF0Y2goc2VsZiwgbG9nZ2luZywgJ2Jhc2ljQ29uZmlnJywgbXlfYmFzaWNfY29uZmlnKQogCiAgICAgICAgIGxvZ19tZXRob2QgPSBnZXRhdHRyKGxvZ2dpbmcsIG1ldGhvZCkKICAgICAgICAgaWYgbGV2ZWwgaXMgbm90IE5vbmU6CkBAIC0zNjg2LDYgKzM3MDUsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQuZXhjX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4Yy5fX2NsYXNzX18sIGV4YywgZXhjLl9fdHJhY2ViYWNrX18pKQogCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2V4Y2luZm8oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDEgLyAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjID0gZQorCisgICAgICAgIHNlbGYuYWRhcHRlci5leGNlcHRpb24oJ2V4Y19pbmZvIHRlc3QnLCBleGNfaW5mbz1leGMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5yZWNvcmRpbmcucmVjb3JkcyksIDEpCisgICAgICAgIHJlY29yZCA9IHNlbGYucmVjb3JkaW5nLnJlY29yZHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQuZXhjX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgKGV4Yy5fX2NsYXNzX18sIGV4YywgZXhjLl9fdHJhY2ViYWNrX18pKQorCiAgICAgZGVmIHRlc3RfY3JpdGljYWwoc2VsZik6CiAgICAgICAgIG1zZyA9ICdjcml0aWNhbCB0ZXN0ISAlcicKICAgICAgICAgc2VsZi5hZGFwdGVyLmNyaXRpY2FsKG1zZywgc2VsZi5yZWNvcmRpbmcpCkBAIC0zNzQ1LDE3ICszNzc3LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4Yy5fX2NsYXNzX18sIGV4YywgZXhjLl9fdHJhY2ViYWNrX18pKQogCiAgICAgZGVmIHRlc3RfbG9nX2ludmFsaWRfbGV2ZWxfd2l0aF9yYWlzZShzZWxmKToKLSAgICAgICAgd2l0aCBzd2FwX2F0dHIobG9nZ2luZywgJ3JhaXNlRXhjZXB0aW9ucycsIFRydWUpOgorICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKGxvZ2dpbmcsICdyYWlzZUV4Y2VwdGlvbnMnLCBUcnVlKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb2dnZXIubG9nLCAnMTAnLCAndGVzdCBtZXNzYWdlJykKIAogICAgIGRlZiB0ZXN0X2xvZ19pbnZhbGlkX2xldmVsX25vX3JhaXNlKHNlbGYpOgotICAgICAgICB3aXRoIHN3YXBfYXR0cihsb2dnaW5nLCAncmFpc2VFeGNlcHRpb25zJywgRmFsc2UpOgorICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKGxvZ2dpbmcsICdyYWlzZUV4Y2VwdGlvbnMnLCBGYWxzZSk6CiAgICAgICAgICAgICBzZWxmLmxvZ2dlci5sb2coJzEwJywgJ3Rlc3QgbWVzc2FnZScpICAjIG5vIGV4Y2VwdGlvbiBoYXBwZW5zCiAKICAgICBkZWYgdGVzdF9maW5kX2NhbGxlcl93aXRoX3N0YWNrX2luZm8oc2VsZik6CiAgICAgICAgIGNhbGxlZCA9IFtdCi0gICAgICAgIHBhdGNoKHNlbGYsIGxvZ2dpbmcudHJhY2ViYWNrLCAncHJpbnRfc3RhY2snLAotICAgICAgICAgICAgICBsYW1iZGEgZiwgZmlsZTogY2FsbGVkLmFwcGVuZChmaWxlLmdldHZhbHVlKCkpKQorICAgICAgICBzdXBwb3J0LnBhdGNoKHNlbGYsIGxvZ2dpbmcudHJhY2ViYWNrLCAncHJpbnRfc3RhY2snLAorICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBmLCBmaWxlOiBjYWxsZWQuYXBwZW5kKGZpbGUuZ2V0dmFsdWUoKSkpCiAKICAgICAgICAgc2VsZi5sb2dnZXIuZmluZENhbGxlcihzdGFja19pbmZvPVRydWUpCiAKQEAgLTM4OTIsNyArMzkyNCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMobmFtZXIoc2VsZi5mbiArICIuMyIpKSkKICAgICAgICAgcmguY2xvc2UoKQogCi0gICAgQHJlcXVpcmVzX3psaWIKKyAgICBAc3VwcG9ydC5yZXF1aXJlc196bGliCiAgICAgZGVmIHRlc3Rfcm90YXRvcihzZWxmKToKICAgICAgICAgZGVmIG5hbWVyKG5hbWUpOgogICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAiLmd6IgpAQCAtNDEzMiwyMiArNDE2NCwyMCBAQAogIyBTZXQgdGhlIGxvY2FsZSB0byB0aGUgcGxhdGZvcm0tZGVwZW5kZW50IGRlZmF1bHQuICBJIGhhdmUgbm8gaWRlYQogIyB3aHkgdGhlIHRlc3QgZG9lcyB0aGlzLCBidXQgaW4gYW55IGNhc2Ugd2Ugc2F2ZSB0aGUgY3VycmVudCBsb2NhbGUKICMgZmlyc3QgYW5kIHJlc3RvcmUgaXQgYXQgdGhlIGVuZC4KLUBydW5fd2l0aF9sb2NhbGUoJ0xDX0FMTCcsICcnKQorQHN1cHBvcnQucnVuX3dpdGhfbG9jYWxlKCdMQ19BTEwnLCAnJykKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoQnVpbHRpbkxldmVsc1Rlc3QsIEJhc2ljRmlsdGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgQ3VzdG9tTGV2ZWxzQW5kRmlsdGVyc1Rlc3QsIEhhbmRsZXJUZXN0LCBNZW1vcnlIYW5kbGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgQ29uZmlnRmlsZVRlc3QsIFNvY2tldEhhbmRsZXJUZXN0LCBEYXRhZ3JhbUhhbmRsZXJUZXN0LAotICAgICAgICAgICAgICAgICBNZW1vcnlUZXN0LCBFbmNvZGluZ1Rlc3QsIFdhcm5pbmdzVGVzdCwgQ29uZmlnRGljdFRlc3QsCi0gICAgICAgICAgICAgICAgIE1hbmFnZXJUZXN0LCBGb3JtYXR0ZXJUZXN0LCBCdWZmZXJpbmdGb3JtYXR0ZXJUZXN0LAotICAgICAgICAgICAgICAgICBTdHJlYW1IYW5kbGVyVGVzdCwgTG9nUmVjb3JkRmFjdG9yeVRlc3QsIENoaWxkTG9nZ2VyVGVzdCwKLSAgICAgICAgICAgICAgICAgUXVldWVIYW5kbGVyVGVzdCwgU2h1dGRvd25UZXN0LCBNb2R1bGVMZXZlbE1pc2NUZXN0LAotICAgICAgICAgICAgICAgICBCYXNpY0NvbmZpZ1Rlc3QsIExvZ2dlckFkYXB0ZXJUZXN0LCBMb2dnZXJUZXN0LAotICAgICAgICAgICAgICAgICBTTVRQSGFuZGxlclRlc3QsIEZpbGVIYW5kbGVyVGVzdCwgUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsCi0gICAgICAgICAgICAgICAgIExhc3RSZXNvcnRUZXN0LCBMb2dSZWNvcmRUZXN0LCBFeGNlcHRpb25UZXN0LAotICAgICAgICAgICAgICAgICBTeXNMb2dIYW5kbGVyVGVzdCwgSFRUUEhhbmRsZXJUZXN0LCBOVEV2ZW50TG9nSGFuZGxlclRlc3QsCi0gICAgICAgICAgICAgICAgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsIFVuaXhTb2NrZXRIYW5kbGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgVW5peERhdGFncmFtSGFuZGxlclRlc3QsIFVuaXhTeXNMb2dIYW5kbGVyVGVzdAotICAgICAgICAgICAgICAgICkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgQnVpbHRpbkxldmVsc1Rlc3QsIEJhc2ljRmlsdGVyVGVzdCwgQ3VzdG9tTGV2ZWxzQW5kRmlsdGVyc1Rlc3QsCisgICAgICAgIEhhbmRsZXJUZXN0LCBNZW1vcnlIYW5kbGVyVGVzdCwgQ29uZmlnRmlsZVRlc3QsIFNvY2tldEhhbmRsZXJUZXN0LAorICAgICAgICBEYXRhZ3JhbUhhbmRsZXJUZXN0LCBNZW1vcnlUZXN0LCBFbmNvZGluZ1Rlc3QsIFdhcm5pbmdzVGVzdCwKKyAgICAgICAgQ29uZmlnRGljdFRlc3QsIE1hbmFnZXJUZXN0LCBGb3JtYXR0ZXJUZXN0LCBCdWZmZXJpbmdGb3JtYXR0ZXJUZXN0LAorICAgICAgICBTdHJlYW1IYW5kbGVyVGVzdCwgTG9nUmVjb3JkRmFjdG9yeVRlc3QsIENoaWxkTG9nZ2VyVGVzdCwKKyAgICAgICAgUXVldWVIYW5kbGVyVGVzdCwgU2h1dGRvd25UZXN0LCBNb2R1bGVMZXZlbE1pc2NUZXN0LCBCYXNpY0NvbmZpZ1Rlc3QsCisgICAgICAgIExvZ2dlckFkYXB0ZXJUZXN0LCBMb2dnZXJUZXN0LCBTTVRQSGFuZGxlclRlc3QsIEZpbGVIYW5kbGVyVGVzdCwKKyAgICAgICAgUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsICBMYXN0UmVzb3J0VGVzdCwgTG9nUmVjb3JkVGVzdCwKKyAgICAgICAgRXhjZXB0aW9uVGVzdCwgU3lzTG9nSGFuZGxlclRlc3QsIEhUVFBIYW5kbGVyVGVzdCwKKyAgICAgICAgTlRFdmVudExvZ0hhbmRsZXJUZXN0LCBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0LAorICAgICAgICBVbml4U29ja2V0SGFuZGxlclRlc3QsIFVuaXhEYXRhZ3JhbUhhbmRsZXJUZXN0LCBVbml4U3lzTG9nSGFuZGxlclRlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQppbmRleCA1YjllMzdhLi5iMmQwMDhiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CkBAIC01ODIsOCArNTgyLDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXBfXyhvdGhlcikgPT0gMAotICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcF9fKG90aGVyKSAhPSAwCiAgICAgICAgICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wX18ob3RoZXIpID49IDAKICAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgpAQCAtMTIwNSw2ICsxMjAzLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbXlpbnQuZnJvbV9ieXRlcywgMCwgJ2JpZycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LmZyb21fYnl0ZXMsIDAsICdiaWcnLCBUcnVlKQogCisgICAgICAgIGNsYXNzIG15aW50MihpbnQpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludC5fX25ld19fKGNscywgdmFsdWUgKyAxKQorCisgICAgICAgIGkgPSBteWludDIuZnJvbV9ieXRlcyhiJ1x4MDEnLCAnYmlnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGkpLCBteWludDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgMikKKworICAgICAgICBjbGFzcyBteWludDMoaW50KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSAnYmFyJworCisgICAgICAgIGkgPSBteWludDMuZnJvbV9ieXRlcyhiJ1x4MDEnLCAnYmlnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGkpLCBteWludDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKGksICdmb28nLCAnbm9uZScpLCAnYmFyJykKKwogICAgIGRlZiB0ZXN0X2FjY2Vzc190b19ub25leGlzdGVudF9kaWdpdF8wKHNlbGYpOgogICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNDYzMDogQSBidWcgaW4gX1B5TG9uZ19Db3B5IG1lYW50IHRoYXQKICAgICAgICAgIyBvYl9kaWdpdFswXSB3YXMgYmVpbmcgaW5jb3JyZWN0bHkgYWNjZXNzZWQgZm9yIGluc3RhbmNlcyBvZiBhCkBAIC0xMjI3LDggKzEyNDIsNSBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWx1ZSA+PiBzaGlmdCksIGludCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTG9uZ1Rlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9uZ2V4cC5weSBiL0xpYi90ZXN0L3Rlc3RfbG9uZ2V4cC5weQppbmRleCAxYjQwZDAyLi5mNGM0NjNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvbmdleHAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb25nZXhwLnB5CkBAIC0xLDUgKzEsNCBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogY2xhc3MgTG9uZ0V4cFRleHQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2xvbmdleHAoc2VsZik6CkBAIC03LDggKzYsNSBAQAogICAgICAgICBsID0gZXZhbCgiWyIgKyAiMiwiICogUkVQUyArICJdIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIFJFUFMpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChMb25nRXhwVGV4dCkKLQotaWYgX19uYW1lX189PSJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2x6bWEucHkgYi9MaWIvdGVzdC90ZXN0X2x6bWEucHkKaW5kZXggMDdmYWRiZC4uNmM2OThlMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sem1hLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbHptYS5weQpAQCAtMSw0ICsxLDUgQEAKLWZyb20gaW8gaW1wb3J0IEJ5dGVzSU8sIFVuc3VwcG9ydGVkT3BlcmF0aW9uCitpbXBvcnQgX2NvbXByZXNzaW9uCitmcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBVbnN1cHBvcnRlZE9wZXJhdGlvbiwgREVGQVVMVF9CVUZGRVJfU0laRQogaW1wb3J0IG9zCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcmFuZG9tCkBAIC0xMzUsNiArMTM2LDk3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsemQuZW9mKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGx6ZC51bnVzZWRfZGF0YSwgYiIiKQogCisgICAgZGVmIHRlc3RfZGVjb21wcmVzc29yX2NodW5rc19tYXhzaXplKHNlbGYpOgorICAgICAgICBsemQgPSBMWk1BRGVjb21wcmVzc29yKCkKKyAgICAgICAgbWF4X2xlbmd0aCA9IDEwMAorICAgICAgICBvdXQgPSBbXQorCisgICAgICAgICMgRmVlZCBmaXJzdCBoYWxmIHRoZSBpbnB1dAorICAgICAgICBsZW5fID0gbGVuKENPTVBSRVNTRURfWFopIC8vIDIKKyAgICAgICAgb3V0LmFwcGVuZChsemQuZGVjb21wcmVzcyhDT01QUkVTU0VEX1haWzpsZW5fXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGVuZ3RoPW1heF9sZW5ndGgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGx6ZC5uZWVkc19pbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3V0Wy0xXSksIG1heF9sZW5ndGgpCisKKyAgICAgICAgIyBSZXRyaWV2ZSBtb3JlIGRhdGEgd2l0aG91dCBwcm92aWRpbmcgbW9yZSBpbnB1dAorICAgICAgICBvdXQuYXBwZW5kKGx6ZC5kZWNvbXByZXNzKGInJywgbWF4X2xlbmd0aD1tYXhfbGVuZ3RoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsemQubmVlZHNfaW5wdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91dFstMV0pLCBtYXhfbGVuZ3RoKQorCisgICAgICAgICMgUmV0cmlldmUgbW9yZSBkYXRhIHdoaWxlIHByb3ZpZGluZyBtb3JlIGlucHV0CisgICAgICAgIG91dC5hcHBlbmQobHpkLmRlY29tcHJlc3MoQ09NUFJFU1NFRF9YWltsZW5fOl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xlbmd0aD1tYXhfbGVuZ3RoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobGVuKG91dFstMV0pLCBtYXhfbGVuZ3RoKQorCisgICAgICAgICMgUmV0cmlldmUgcmVtYWluaW5nIHVuY29tcHJlc3NlZCBkYXRhCisgICAgICAgIHdoaWxlIG5vdCBsemQuZW9mOgorICAgICAgICAgICAgb3V0LmFwcGVuZChsemQuZGVjb21wcmVzcyhiJycsIG1heF9sZW5ndGg9bWF4X2xlbmd0aCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4ob3V0Wy0xXSksIG1heF9sZW5ndGgpCisKKyAgICAgICAgb3V0ID0gYiIiLmpvaW4ob3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgSU5QVVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHpkLmNoZWNrLCBsem1hLkNIRUNLX0NSQzY0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGx6ZC51bnVzZWRfZGF0YSwgYiIiKQorCisgICAgZGVmIHRlc3RfZGVjb21wcmVzc29yX2lucHV0YnVmXzEoc2VsZik6CisgICAgICAgICMgVGVzdCByZXVzaW5nIGlucHV0IGJ1ZmZlciBhZnRlciBtb3ZpbmcgZXhpc3RpbmcKKyAgICAgICAgIyBjb250ZW50cyB0byBiZWdpbm5pbmcKKyAgICAgICAgbHpkID0gTFpNQURlY29tcHJlc3NvcigpCisgICAgICAgIG91dCA9IFtdCisKKyAgICAgICAgIyBDcmVhdGUgaW5wdXQgYnVmZmVyIGFuZCBmaWxsIGl0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHpkLmRlY29tcHJlc3MoQ09NUFJFU1NFRF9YWls6MTAwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGVuZ3RoPTApLCBiJycpCisKKyAgICAgICAgIyBSZXRyaWV2ZSBzb21lIHJlc3VsdHMsIGZyZWVpbmcgY2FwYWNpdHkgYXQgYmVnaW5uaW5nCisgICAgICAgICMgb2YgaW5wdXQgYnVmZmVyCisgICAgICAgIG91dC5hcHBlbmQobHpkLmRlY29tcHJlc3MoYicnLCAyKSkKKworICAgICAgICAjIEFkZCBtb3JlIGRhdGEgdGhhdCBmaXRzIGludG8gaW5wdXQgYnVmZmVyIGFmdGVyCisgICAgICAgICMgbW92aW5nIGV4aXN0aW5nIGRhdGEgdG8gYmVnaW5uaW5nCisgICAgICAgIG91dC5hcHBlbmQobHpkLmRlY29tcHJlc3MoQ09NUFJFU1NFRF9YWlsxMDA6MTA1XSwgMTUpKQorCisgICAgICAgICMgRGVjb21wcmVzcyByZXN0IG9mIGRhdGEKKyAgICAgICAgb3V0LmFwcGVuZChsemQuZGVjb21wcmVzcyhDT01QUkVTU0VEX1haWzEwNTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbihvdXQpLCBJTlBVVCkKKworICAgIGRlZiB0ZXN0X2RlY29tcHJlc3Nvcl9pbnB1dGJ1Zl8yKHNlbGYpOgorICAgICAgICAjIFRlc3QgcmV1c2luZyBpbnB1dCBidWZmZXIgYnkgYXBwZW5kaW5nIGRhdGEgYXQgdGhlCisgICAgICAgICMgZW5kIHJpZ2h0IGF3YXkKKyAgICAgICAgbHpkID0gTFpNQURlY29tcHJlc3NvcigpCisgICAgICAgIG91dCA9IFtdCisKKyAgICAgICAgIyBDcmVhdGUgaW5wdXQgYnVmZmVyIGFuZCBlbXB0eSBpdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGx6ZC5kZWNvbXByZXNzKENPTVBSRVNTRURfWFpbOjIwMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xlbmd0aD0wKSwgYicnKQorICAgICAgICBvdXQuYXBwZW5kKGx6ZC5kZWNvbXByZXNzKGInJykpCisKKyAgICAgICAgIyBGaWxsIGJ1ZmZlciB3aXRoIG5ldyBkYXRhCisgICAgICAgIG91dC5hcHBlbmQobHpkLmRlY29tcHJlc3MoQ09NUFJFU1NFRF9YWlsyMDA6MjgwXSwgMikpCisKKyAgICAgICAgIyBBcHBlbmQgc29tZSBtb3JlIGRhdGEsIG5vdCBlbm91Z2ggdG8gcmVxdWlyZSByZXNpemUKKyAgICAgICAgb3V0LmFwcGVuZChsemQuZGVjb21wcmVzcyhDT01QUkVTU0VEX1haWzI4MDozMDBdLCAyKSkKKworICAgICAgICAjIERlY29tcHJlc3MgcmVzdCBvZiBkYXRhCisgICAgICAgIG91dC5hcHBlbmQobHpkLmRlY29tcHJlc3MoQ09NUFJFU1NFRF9YWlszMDA6XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLmpvaW4ob3V0KSwgSU5QVVQpCisKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzb3JfaW5wdXRidWZfMyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHJldXNpbmcgaW5wdXQgYnVmZmVyIGFmdGVyIGV4dGVuZGluZyBpdAorCisgICAgICAgIGx6ZCA9IExaTUFEZWNvbXByZXNzb3IoKQorICAgICAgICBvdXQgPSBbXQorCisgICAgICAgICMgQ3JlYXRlIGFsbW9zdCBmdWxsIGlucHV0IGJ1ZmZlcgorICAgICAgICBvdXQuYXBwZW5kKGx6ZC5kZWNvbXByZXNzKENPTVBSRVNTRURfWFpbOjIwMF0sIDUpKQorCisgICAgICAgICMgQWRkIGV2ZW4gbW9yZSBkYXRhIHRvIGl0LCByZXF1aXJpbmcgcmVzaXplCisgICAgICAgIG91dC5hcHBlbmQobHpkLmRlY29tcHJlc3MoQ09NUFJFU1NFRF9YWlsyMDA6MzAwXSwgNSkpCisKKyAgICAgICAgIyBEZWNvbXByZXNzIHJlc3Qgb2YgZGF0YQorICAgICAgICBvdXQuYXBwZW5kKGx6ZC5kZWNvbXByZXNzKENPTVBSRVNTRURfWFpbMzAwOl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKG91dCksIElOUFVUKQorCiAgICAgZGVmIHRlc3RfZGVjb21wcmVzc29yX3VudXNlZF9kYXRhKHNlbGYpOgogICAgICAgICBsemQgPSBMWk1BRGVjb21wcmVzc29yKCkKICAgICAgICAgZXh0cmEgPSBiImZvb2JsaWJhciIKQEAgLTY4MSwxMyArNzczLDEzIEBACiAgICAgZGVmIHRlc3RfcmVhZF9tdWx0aXN0cmVhbV9idWZmZXJfc2l6ZV9hbGlnbmVkKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhlIGNhc2Ugd2hlcmUgYSBzdHJlYW0gYm91bmRhcnkgY29pbmNpZGVzIHdpdGggdGhlIGVuZAogICAgICAgICAjIG9mIHRoZSByYXcgcmVhZCBidWZmZXIuCi0gICAgICAgIHNhdmVkX2J1ZmZlcl9zaXplID0gbHptYS5fQlVGRkVSX1NJWkUKLSAgICAgICAgbHptYS5fQlVGRkVSX1NJWkUgPSBsZW4oQ09NUFJFU1NFRF9YWikKKyAgICAgICAgc2F2ZWRfYnVmZmVyX3NpemUgPSBfY29tcHJlc3Npb24uQlVGRkVSX1NJWkUKKyAgICAgICAgX2NvbXByZXNzaW9uLkJVRkZFUl9TSVpFID0gbGVuKENPTVBSRVNTRURfWFopCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haICogIDUpKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIElOUFVUICogNSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGx6bWEuX0JVRkZFUl9TSVpFID0gc2F2ZWRfYnVmZmVyX3NpemUKKyAgICAgICAgICAgIF9jb21wcmVzc2lvbi5CVUZGRVJfU0laRSA9IHNhdmVkX2J1ZmZlcl9zaXplCiAKICAgICBkZWYgdGVzdF9yZWFkX3RyYWlsaW5nX2p1bmsoc2VsZik6CiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haICsgQ09NUFJFU1NFRF9CT0dVUykpIGFzIGY6CkBAIC03MzgsNyArODMwLDcgQEAKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJ3IikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZCkKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWQsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZCwgZmxvYXQoKSkKIAogICAgIGRlZiB0ZXN0X3JlYWRfYmFkX2RhdGEoc2VsZik6CiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX0JPR1VTKSkgYXMgZjoKQEAgLTgzNCw2ICs5MjYsMTcgQEAKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoZi5yZWFkbGluZXMoKSwgbGluZXMpCiAKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzX2xpbWl0ZWQoc2VsZik6CisgICAgICAgICIiIkRlY29tcHJlc3NlZCBkYXRhIGJ1ZmZlcmluZyBzaG91bGQgYmUgbGltaXRlZCIiIgorICAgICAgICBib21iID0gbHptYS5jb21wcmVzcyhieXRlcyhpbnQoMmU2KSksIHByZXNldD02KQorICAgICAgICBzZWxmLmFzc2VydExlc3MobGVuKGJvbWIpLCBfY29tcHJlc3Npb24uQlVGRkVSX1NJWkUpCisKKyAgICAgICAgZGVjb21wID0gTFpNQUZpbGUoQnl0ZXNJTyhib21iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcygxKSwgZGVjb21wLnJlYWQoMSkpCisgICAgICAgIG1heF9kZWNvbXAgPSAxICsgREVGQVVMVF9CVUZGRVJfU0laRQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChkZWNvbXAuX2J1ZmZlci5yYXcudGVsbCgpLCBtYXhfZGVjb21wLAorICAgICAgICAgICAgIkV4Y2Vzc2l2ZSBhbW91bnQgb2YgZGF0YSB3YXMgZGVjb21wcmVzc2VkIikKKwogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgogICAgICAgICB3aXRoIEJ5dGVzSU8oKSBhcyBkc3Q6CiAgICAgICAgICAgICB3aXRoIExaTUFGaWxlKGRzdCwgInciKSBhcyBmOgpAQCAtOTk5LDcgKzExMDIsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5zZWVrLCAwKQogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWikpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnNlZWssIDAsIDMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnNlZWssIDksICgpKQorICAgICAgICAgICAgIyBpby5CdWZmZXJlZFJlYWRlciByYWlzZXMgVHlwZUVycm9yIGluc3RlYWQgb2YgVmFsdWVFcnJvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgVmFsdWVFcnJvciksIGYuc2VlaywgOSwgKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuc2VlaywgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5zZWVrLCBiImRlcnAiKQogCkBAIC0xMTA3LDcgKzEyMTEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nX2Vycm9yX2hhbmRsZXIoc2VsZik6Ci0gICAgICAgICMgVGVzdCB3aWggbm9uLWRlZmF1bHQgZW5jb2RpbmcgZXJyb3IgaGFuZGxlci4KKyAgICAgICAgIyBUZXN0IHdpdGggbm9uLWRlZmF1bHQgZW5jb2RpbmcgZXJyb3IgaGFuZGxlci4KICAgICAgICAgd2l0aCBCeXRlc0lPKGx6bWEuY29tcHJlc3MoYiJmb29ceGZmYmFyIikpIGFzIGJpbzoKICAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKGJpbywgInJ0IiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJmb29iYXIiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5CmluZGV4IDIyZjg0OTEuLjgwYmVjN2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hY3BhdGgucHkKQEAgLTE0Miw2ICsxNDIsOCBAQAogY2xhc3MgTWFjQ29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBwYXRobW9kdWxlID0gbWFjcGF0aAogCisgICAgdGVzdF9yZWxwYXRoX2Vycm9ycyA9IE5vbmUKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYWlsY2FwLnB5IGIvTGliL3Rlc3QvdGVzdF9tYWlsY2FwLnB5CmluZGV4IGE0Y2QwOWMuLjIyYjJmY2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFpbGNhcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21haWxjYXAucHkKQEAgLTIxMyw5ICsyMTMsNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsY2FwLmZpbmRtYXRjaCgqY1swXSwgKipjWzFdKSwgY1syXSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChIZWxwZXJGdW5jdGlvblRlc3QsIEdldGNhcHNUZXN0LCBGaW5kbWF0Y2hUZXN0KQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQppbmRleCA5MDNlMTJjLi5jN2RlZjlhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICAgICAgaGVhZCA9IGxhc3QgPSBbXQogICAgICAgICAjIFRoZSBtYXggc3RhY2sgZGVwdGggc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBpbiBQeXRob24vbWFyc2hhbC5jLgogICAgICAgICBpZiBvcy5uYW1lID09ICdudCcgYW5kIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgotICAgICAgICAgICAgTUFYX01BUlNIQUxfU1RBQ0tfREVQVEggPSAxNTAwCisgICAgICAgICAgICBNQVhfTUFSU0hBTF9TVEFDS19ERVBUSCA9IDEwMDAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIE1BWF9NQVJTSEFMX1NUQUNLX0RFUFRIID0gMjAwMAogICAgICAgICBmb3IgaSBpbiByYW5nZShNQVhfTUFSU0hBTF9TVEFDS19ERVBUSCAtIDIpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9tYXRoLnB5CmluZGV4IDQ4Zjg0YmEuLmEzNzlhNmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hdGgucHkKQEAgLTE3NSw2ICsxNzUsMTQgQEAKICAgICAgICAgICAgICAgICAgICBmbGFncwogICAgICAgICAgICAgICAgICAgKQogCisjIENsYXNzIHByb3ZpZGluZyBhbiBfX2luZGV4X18gbWV0aG9kLgorY2xhc3MgTXlJbmRleGFibGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKIGNsYXNzIE1hdGhUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgZnRlc3Qoc2VsZiwgbmFtZSwgdmFsdWUsIGV4cGVjdGVkKToKQEAgLTQyMiw5ICs0MzAsMTcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mYWN0b3JpYWwoaSksIHB5X2ZhY3RvcmlhbChpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5mYWN0b3JpYWwsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZhY3RvcmlhbCwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5mYWN0b3JpYWwsIC0xMCoqMTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZhY3RvcmlhbCwgLTFlMTAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZhY3RvcmlhbCwgbWF0aC5waSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbWF0aC5mYWN0b3JpYWwsIHN5cy5tYXhzaXplKzEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG1hdGguZmFjdG9yaWFsLCAxMGUxMDApCisKKyAgICAjIE90aGVyIGltcGxlbWVudGF0aW9ucyBtYXkgcGxhY2UgZGlmZmVyZW50IHVwcGVyIGJvdW5kcy4KKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdEZhY3RvcmlhbEh1Z2VJbnB1dHMoc2VsZik6CisgICAgICAgICMgQ3VycmVudGx5IHJhaXNlcyBWYWx1ZUVycm9yIGZvciBpbnB1dHMgdGhhdCBhcmUgdG9vIGxhcmdlCisgICAgICAgICMgdG8gZml0IGludG8gYSBDIGxvbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG1hdGguZmFjdG9yaWFsLCAxMCoqMTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBtYXRoLmZhY3RvcmlhbCwgMWUxMDApCiAKICAgICBkZWYgdGVzdEZsb29yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmxvb3IpCkBAIC01ODcsNiArNjAzLDQ5IEBACiAgICAgICAgICAgICBzID0gbXN1bSh2YWxzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc3VtKHZhbHMpLCBtYXRoLmZzdW0odmFscykpCiAKKyAgICBkZWYgdGVzdEdjZChzZWxmKToKKyAgICAgICAgZ2NkID0gbWF0aC5nY2QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoMCwgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDEsIDApLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgtMSwgMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDAsIDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgwLCAtMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDcsIDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCg3LCAtMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKC0yMywgMTUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgxMjAsIDg0KSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDg0LCAtMTIwKSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKDEyMTYzNDI2ODM1NTc2MDE1MzU1MDYzMTE3MTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzNjUyMjY4MTg0OTExMDEyNDYxNjQ1ODc4NCksIDMyKQorICAgICAgICBjID0gNjUyNTYwCisgICAgICAgIHggPSA0MzQ2MTA0NTY1NzAzOTk5MDIzNzg4ODA2NzkyMzMwOTg4MTkwMTk4NTMyMjk0NzAyODY5OTQzNjc4MzY2MDA1NjYKKyAgICAgICAgeSA9IDEwNjQ1MDIyNDU4MjUxMTUzMjc3NTQ4NDcyNDQ5MTQ5MjE1NTM5NzcKKyAgICAgICAgYSA9IHggKiBjCisgICAgICAgIGIgPSB5ICogYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZChhLCBiKSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoYiwgYSksIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKC1hLCBiKSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoYiwgLWEpLCBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZChhLCAtYiksIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKC1iLCBhKSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoLWEsIC1iKSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoLWIsIC1hKSwgYykKKyAgICAgICAgYyA9IDU3NjU1OTIzMDg3MTY1NDk1OTgxNjEzMDU1MTg4NDg1NjkxMjAwMzE0MTQ0Njc4MTY0NjYwMjc5MDIxNjQwNjg3NAorICAgICAgICBhID0geCAqIGMKKyAgICAgICAgYiA9IHkgKiBjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKGEsIGIpLCBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZChiLCBhKSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoLWEsIGIpLCBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZChiLCAtYSksIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKGEsIC1iKSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoLWIsIGEpLCBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgtYSwgLWIpLCBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgtYiwgLWEpLCBjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2NkLCAxMjAuMCwgODQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2NkLCAxMjAsIDg0LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKE15SW5kZXhhYmxlKDEyMCksIE15SW5kZXhhYmxlKDg0KSksIDEyKQorCiAgICAgZGVmIHRlc3RIeXBvdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmh5cG90KQogICAgICAgICBzZWxmLmZ0ZXN0KCdoeXBvdCgwLDApJywgbWF0aC5oeXBvdCgwLDApLCAwKQpAQCAtOTc1LDYgKzEwMzQsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzaW5mKDAuKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzaW5mKDEuKSkKIAorICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X25hbl9jb25zdGFudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5uYW4pKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfaW5mX2NvbnN0YW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZihtYXRoLmluZikpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihtYXRoLmluZiwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguaW5mLCBmbG9hdCgiaW5mIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLW1hdGguaW5mLCBmbG9hdCgiLWluZiIpKQorCiAgICAgIyBSRURfRkxBRyAxNi1PY3QtMjAwMCBUaW0KICAgICAjIFdoaWxlIDIuMCBpcyBtb3JlIGNvbnNpc3RlbnQgYWJvdXQgZXhjZXB0aW9ucyB0aGFuIHByZXZpb3VzIHJlbGVhc2VzLCBpdAogICAgICMgc3RpbGwgZmFpbHMgdGhpcyBwYXJ0IG9mIHRoZSB0ZXN0IG9uIHNvbWUgcGxhdGZvcm1zLiAgRm9yIG5vdywgd2Ugb25seQpAQCAtMTA5NiwxMCArMTE2NiwxMzEgQEAKICAgICAgICAgICAgICAgICAgICAgICAnXG4gICcuam9pbihmYWlsdXJlcykpCiAKIAorY2xhc3MgSXNDbG9zZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpc2Nsb3NlID0gbWF0aC5pc2Nsb3NlICMgc3VibGNhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcworCisgICAgZGVmIGFzc2VydElzQ2xvc2Uoc2VsZiwgYSwgYiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNjbG9zZShhLCBiLCAqYXJncywgKiprd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSIlcyBhbmQgJXMgc2hvdWxkIGJlIGNsb3NlISIgJSAoYSwgYikpCisKKyAgICBkZWYgYXNzZXJ0SXNOb3RDbG9zZShzZWxmLCBhLCBiLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaXNjbG9zZShhLCBiLCAqYXJncywgKiprd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iJXMgYW5kICVzIHNob3VsZCBub3QgYmUgY2xvc2UhIiAlIChhLCBiKSkKKworICAgIGRlZiBhc3NlcnRBbGxDbG9zZShzZWxmLCBleGFtcGxlcywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgZm9yIGEsIGIgaW4gZXhhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzQ2xvc2UoYSwgYiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFzc2VydEFsbE5vdENsb3NlKHNlbGYsIGV4YW1wbGVzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBmb3IgYSwgYiBpbiBleGFtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3RDbG9zZShhLCBiLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV90b2xlcmFuY2VzKHNlbGYpOgorICAgICAgICAjIFZhbHVlRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBpZiBlaXRoZXIgdG9sZXJhbmNlIGlzIGxlc3MgdGhhbiB6ZXJvCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzQ2xvc2UoMSwgMSwgcmVsX3RvbD0tMWUtMTAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0Nsb3NlKDEsIDEsIHJlbF90b2w9MWUtMTAwLCBhYnNfdG9sPS0xZTEwKQorCisgICAgZGVmIHRlc3RfaWRlbnRpY2FsKHNlbGYpOgorICAgICAgICAjIGlkZW50aWNhbCB2YWx1ZXMgbXVzdCB0ZXN0IGFzIGNsb3NlCisgICAgICAgIGlkZW50aWNhbF9leGFtcGxlcyA9IFsoMi4wLCAyLjApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMWUyMDAsIDAuMWUyMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEuMTIzZS0zMDAsIDEuMTIzZS0zMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEyMzQ1LCAxMjM0NS4wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjAsIC0wLjApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDM0NTY3OCwgMzQ1Njc4KV0KKyAgICAgICAgc2VsZi5hc3NlcnRBbGxDbG9zZShpZGVudGljYWxfZXhhbXBsZXMsIHJlbF90b2w9MC4wLCBhYnNfdG9sPTAuMCkKKworICAgIGRlZiB0ZXN0X2VpZ2h0X2RlY2ltYWxfcGxhY2VzKHNlbGYpOgorICAgICAgICAjIGV4YW1wbGVzIHRoYXQgYXJlIGNsb3NlIHRvIDFlLTgsIGJ1dCBub3QgMWUtOQorICAgICAgICBlaWdodF9kZWNpbWFsX3BsYWNlc19leGFtcGxlcyA9IFsoMWU4LCAxZTggKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xZS04LCAtMS4wMDAwMDAwMDllLTgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS4xMjM0NTY3OCwgMS4xMjM0NTY3OSldCisgICAgICAgIHNlbGYuYXNzZXJ0QWxsQ2xvc2UoZWlnaHRfZGVjaW1hbF9wbGFjZXNfZXhhbXBsZXMsIHJlbF90b2w9MWUtOCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbGxOb3RDbG9zZShlaWdodF9kZWNpbWFsX3BsYWNlc19leGFtcGxlcywgcmVsX3RvbD0xZS05KQorCisgICAgZGVmIHRlc3RfbmVhcl96ZXJvKHNlbGYpOgorICAgICAgICAjIHZhbHVlcyBjbG9zZSB0byB6ZXJvCisgICAgICAgIG5lYXJfemVyb19leGFtcGxlcyA9IFsoMWUtOSwgMC4wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMWUtOSwgMC4wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMWUtMTUwLCAwLjApXQorICAgICAgICAjIHRoZXNlIHNob3VsZCBub3QgYmUgY2xvc2UgdG8gYW55IHJlbF90b2wKKyAgICAgICAgc2VsZi5hc3NlcnRBbGxOb3RDbG9zZShuZWFyX3plcm9fZXhhbXBsZXMsIHJlbF90b2w9MC45KQorICAgICAgICAjIHRoZXNlIHNob3VsZCBiZSBjbG9zZSB0byBhYnNfdG9sPTFlLTgKKyAgICAgICAgc2VsZi5hc3NlcnRBbGxDbG9zZShuZWFyX3plcm9fZXhhbXBsZXMsIGFic190b2w9MWUtOCkKKworICAgIGRlZiB0ZXN0X2lkZW50aWNhbF9pbmZpbml0ZShzZWxmKToKKyAgICAgICAgIyB0aGVzZSBhcmUgY2xvc2UgcmVnYXJkbGVzcyBvZiB0b2xlcmFuY2UgLS0gaS5lLiB0aGV5IGFyZSBlcXVhbAorICAgICAgICBzZWxmLmFzc2VydElzQ2xvc2UoSU5GLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNDbG9zZShJTkYsIElORiwgYWJzX3RvbD0wLjApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNDbG9zZShOSU5GLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydElzQ2xvc2UoTklORiwgTklORiwgYWJzX3RvbD0wLjApCisKKyAgICBkZWYgdGVzdF9pbmZfbmluZl9uYW4oc2VsZik6CisgICAgICAgICMgdGhlc2Ugc2hvdWxkIG5ldmVyIGJlIGNsb3NlIChmb2xsb3dpbmcgSUVFRSA3NTQgcnVsZXMgZm9yIGVxdWFsaXR5KQorICAgICAgICBub3RfY2xvc2VfZXhhbXBsZXMgPSBbKE5BTiwgTkFOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOQU4sIDFlLTEwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMWUtMTAwLCBOQU4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElORiwgTkFOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOQU4sIElORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5GLCBOSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTkYsIDEuMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS4wLCBJTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElORiwgMWUzMDgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDFlMzA4LCBJTkYpXQorICAgICAgICAjIHVzZSBsYXJnZXN0IHJlYXNvbmFibGUgdG9sZXJhbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0QWxsTm90Q2xvc2Uobm90X2Nsb3NlX2V4YW1wbGVzLCBhYnNfdG9sPTAuOTk5OTk5OTk5OTk5OTk5KQorCisgICAgZGVmIHRlc3RfemVyb190b2xlcmFuY2Uoc2VsZik6CisgICAgICAgICMgdGVzdCB3aXRoIHplcm8gdG9sZXJhbmNlCisgICAgICAgIHplcm9fdG9sZXJhbmNlX2Nsb3NlX2V4YW1wbGVzID0gWygxLjAsIDEuMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMy40LCAtMy40KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xZS0zMDAsIC0xZS0zMDApXQorICAgICAgICBzZWxmLmFzc2VydEFsbENsb3NlKHplcm9fdG9sZXJhbmNlX2Nsb3NlX2V4YW1wbGVzLCByZWxfdG9sPTAuMCkKKworICAgICAgICB6ZXJvX3RvbGVyYW5jZV9ub3RfY2xvc2VfZXhhbXBsZXMgPSBbKDEuMCwgMS4wMDAwMDAwMDAwMDAwMDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuOTk5OTk5OTk5OTk5OTksIDEuMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS4wZTIwMCwgLjk5OTk5OTk5OTk5OTk5OWUyMDApXQorICAgICAgICBzZWxmLmFzc2VydEFsbE5vdENsb3NlKHplcm9fdG9sZXJhbmNlX25vdF9jbG9zZV9leGFtcGxlcywgcmVsX3RvbD0wLjApCisKKyAgICBkZWYgdGVzdF9hc3ltbWV0cnkoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgYXN5bW1ldHJ5IGV4YW1wbGUgZnJvbSBQRVAgNDg1CisgICAgICAgIHNlbGYuYXNzZXJ0QWxsQ2xvc2UoWyg5LCAxMCksICgxMCwgOSldLCByZWxfdG9sPTAuMSkKKworICAgIGRlZiB0ZXN0X2ludGVnZXJzKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2l0aCBpbnRlZ2VyIHZhbHVlcworICAgICAgICBpbnRlZ2VyX2V4YW1wbGVzID0gWygxMDAwMDAwMDEsIDEwMDAwMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEyMzQ1Njc4OSwgMTIzNDU2Nzg4KV0KKworICAgICAgICBzZWxmLmFzc2VydEFsbENsb3NlKGludGVnZXJfZXhhbXBsZXMsIHJlbF90b2w9MWUtOCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbGxOb3RDbG9zZShpbnRlZ2VyX2V4YW1wbGVzLCByZWxfdG9sPTFlLTkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdpdGggRGVjaW1hbCB2YWx1ZXMKKyAgICAgICAgZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisKKyAgICAgICAgZGVjaW1hbF9leGFtcGxlcyA9IFsoRGVjaW1hbCgnMS4wMDAwMDAwMScpLCBEZWNpbWFsKCcxLjAnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlY2ltYWwoJzEuMDAwMDAwMDFlLTIwJyksIERlY2ltYWwoJzEuMGUtMjAnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlY2ltYWwoJzEuMDAwMDAwMDFlLTEwMCcpLCBEZWNpbWFsKCcxLjBlLTEwMCcpKV0KKyAgICAgICAgc2VsZi5hc3NlcnRBbGxDbG9zZShkZWNpbWFsX2V4YW1wbGVzLCByZWxfdG9sPTFlLTgpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxsTm90Q2xvc2UoZGVjaW1hbF9leGFtcGxlcywgcmVsX3RvbD0xZS05KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2l0aCBGcmFjdGlvbiB2YWx1ZXMKKyAgICAgICAgZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCisKKyAgICAgICAgIyBjb3VsZCB1c2Ugc29tZSBtb3JlIGV4YW1wbGVzIGhlcmUhCisgICAgICAgIGZyYWN0aW9uX2V4YW1wbGVzID0gWyhGcmFjdGlvbigxLCAxMDAwMDAwMDApICsgMSwgRnJhY3Rpb24oMSkpXQorICAgICAgICBzZWxmLmFzc2VydEFsbENsb3NlKGZyYWN0aW9uX2V4YW1wbGVzLCByZWxfdG9sPTFlLTgpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxsTm90Q2xvc2UoZnJhY3Rpb25fZXhhbXBsZXMsIHJlbF90b2w9MWUtOSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgZnJvbSBkb2N0ZXN0IGltcG9ydCBEb2NGaWxlU3VpdGUKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoTWF0aFRlc3RzKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShJc0Nsb3NlVGVzdHMpKQogICAgIHN1aXRlLmFkZFRlc3QoRG9jRmlsZVN1aXRlKCJpZWVlNzU0LnR4dCIpKQogICAgIHJ1bl91bml0dGVzdChzdWl0ZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weSBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKaW5kZXggN2NlOTViOS4uNTViNjkzZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQorKysgYi9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgX3B5aW8gYXMgcHlpbwogaW1wb3J0IHBpY2tsZQoraW1wb3J0IHN5cwogCiBjbGFzcyBNZW1vcnlTZWVrVGVzdE1peGluOgogCkBAIC0xNjUsNiArMTY2LDEwIEBACiAgICAgICAgIG1lbWlvLnNlZWsoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKE5vbmUpLCBidWYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ucmVhZCwgJycpCisgICAgICAgIG1lbWlvLnNlZWsobGVuKGJ1ZikgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoMSksIHNlbGYuRU9GKQorICAgICAgICBtZW1pby5zZWVrKGxlbihidWYpICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIHNlbGYuRU9GKQogICAgICAgICBtZW1pby5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnJlYWQpCiAKQEAgLTE4NCw2ICsxODksOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKC0xKSwgYnVmKQogICAgICAgICBtZW1pby5zZWVrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoMCksIHNlbGYuRU9GKQorICAgICAgICAjIElzc3VlICMyNDk4OTogQnVmZmVyIG92ZXJyZWFkCisgICAgICAgIG1lbWlvLnNlZWsobGVuKGJ1ZikgKiAyICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgpLCBzZWxmLkVPRikKIAogICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTBcbiIpCiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKChidWYgKiAzKVs6LTFdKQpAQCAtMjE2LDYgKzIyNCw5IEBACiAgICAgICAgIG1lbWlvLnNlZWsoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZXMoTm9uZSksIFtidWZdICogMTApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ucmVhZGxpbmVzLCAnJykKKyAgICAgICAgIyBJc3N1ZSAjMjQ5ODk6IEJ1ZmZlciBvdmVycmVhZAorICAgICAgICBtZW1pby5zZWVrKGxlbihidWYpICogMTAgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lcygpLCBbXSkKICAgICAgICAgbWVtaW8uY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5yZWFkbGluZXMpCiAKQEAgLTIzNyw2ICsyNDgsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBidWYpCiAgICAgICAgICAgICBpICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCAxMCkKKyAgICAgICAgIyBJc3N1ZSAjMjQ5ODk6IEJ1ZmZlciBvdmVycmVhZAorICAgICAgICBtZW1pby5zZWVrKGxlbihidWYpICogMTAgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbXSkKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmICogMikKICAgICAgICAgbWVtaW8uY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX25leHRfXykKQEAgLTM2Miw3ICszNzYsNyBAQAogCiAgICAgICAgICMgUGlja2xlIGV4cGVjdHMgdGhlIGNsYXNzIHRvIGJlIG9uIHRoZSBtb2R1bGUgbGV2ZWwuIEhlcmUgd2UgdXNlIGEKICAgICAgICAgIyBsaXR0bGUgaGFjayB0byBhbGxvdyB0aGUgUGlja2xlVGVzdE1lbUlPIGNsYXNzIHRvIGRlcml2ZSBmcm9tCi0gICAgICAgICMgc2VsZi5pb2NsYXNzIHdpdGhvdXQgaGF2aW5nIHRvIGRlZmluZSBhbGwgY29tYmluYXRpb25zIGV4cGxpY3RseSBvbgorICAgICAgICAjIHNlbGYuaW9jbGFzcyB3aXRob3V0IGhhdmluZyB0byBkZWZpbmUgYWxsIGNvbWJpbmF0aW9ucyBleHBsaWNpdGx5IG9uCiAgICAgICAgICMgdGhlIG1vZHVsZS1sZXZlbC4KICAgICAgICAgaW1wb3J0IF9fbWFpbl9fCiAgICAgICAgIFBpY2tsZVRlc3RNZW1JTy5fX21vZHVsZV9fID0gJ19fbWFpbl9fJwpAQCAtMzg1LDcgKzM5OSwxNiBAQAogICAgICAgICBkZWwgX19tYWluX18uUGlja2xlVGVzdE1lbUlPCiAKIAotY2xhc3MgQnl0ZXNJT01peGluOgorY2xhc3MgUHlCeXRlc0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIE1lbW9yeVNlZWtUZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgX3B5aW8uQnl0ZXNJTzsgY2xhc3MgYWxzbyBpbmhlcml0ZWQgZm9yIHRlc3RpbmcgQyBpbXBsZW1lbnRhdGlvbgorCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBweWlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGJ1ZnR5cGUocyk6CisgICAgICAgIHJldHVybiBzLmVuY29kZSgiYXNjaWkiKQorICAgIGlvY2xhc3MgPSBweWlvLkJ5dGVzSU8KKyAgICBFT0YgPSBiIiIKIAogICAgIGRlZiB0ZXN0X2dldGJ1ZmZlcihzZWxmKToKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYiIxMjM0NTY3ODkwIikKQEAgLTQxMiwxOCArNDM1LDYgQEAKICAgICAgICAgbWVtaW8uY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5nZXRidWZmZXIpCiAKLQotY2xhc3MgUHlCeXRlc0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIE1lbW9yeVNlZWtUZXN0TWl4aW4sCi0gICAgICAgICAgICAgICAgICAgIEJ5dGVzSU9NaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBweWlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGJ1ZnR5cGUocyk6Ci0gICAgICAgIHJldHVybiBzLmVuY29kZSgiYXNjaWkiKQotICAgIGlvY2xhc3MgPSBweWlvLkJ5dGVzSU8KLSAgICBFT0YgPSBiIiIKLQogICAgIGRlZiB0ZXN0X3JlYWQxKHNlbGYpOgogICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCkBAIC03MTgsMTIgKzcyOSw1NiBAQAogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgotICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJ1Aybk4yUG4nKQorICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJ1AybjJQbicpCiAgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmplY3QuX19zaXplb2ZfXyhpby5CeXRlc0lPKCkpLCBiYXNlc2l6ZSkKICAgICAgICAgY2hlY2soaW8uQnl0ZXNJTygpLCBiYXNlc2l6ZSApCi0gICAgICAgIGNoZWNrKGlvLkJ5dGVzSU8oYidhJyksIGJhc2VzaXplICsgMSArIDEgKQotICAgICAgICBjaGVjayhpby5CeXRlc0lPKGInYScgKiAxMDAwKSwgYmFzZXNpemUgKyAxMDAwICsgMSApCisgICAgICAgIGNoZWNrKGlvLkJ5dGVzSU8oYidhJyAqIDEwMDApLCBiYXNlc2l6ZSArIHN5cy5nZXRzaXplb2YoYidhJyAqIDEwMDApKQorCisgICAgIyBWYXJpb3VzIHRlc3RzIG9mIGNvcHktb24td3JpdGUgYmVoYXZpb3VyIGZvciBCeXRlc0lPLgorCisgICAgZGVmIF90ZXN0X2Nvd19tdXRhdGlvbihzZWxmLCBtdXRhdGlvbik6CisgICAgICAgICMgQ29tbW9uIGNvZGUgZm9yIGFsbCBCeXRlc0lPIGNvcHktb24td3JpdGUgbXV0YXRpb24gdGVzdHMuCisgICAgICAgIGltbSA9IGInICcgKiAxMDI0CisgICAgICAgIG9sZF9yYyA9IHN5cy5nZXRyZWZjb3VudChpbW0pCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGltbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoaW1tKSwgb2xkX3JjICsgMSkKKyAgICAgICAgbXV0YXRpb24obWVtaW8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KGltbSksIG9sZF9yYykKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2Nvd190cnVuY2F0ZShzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdHJ1bmNhdGUgY2F1c2VzIGEgY29weS4KKyAgICAgICAgZGVmIG11dGF0aW9uKG1lbWlvKToKKyAgICAgICAgICAgIG1lbWlvLnRydW5jYXRlKDEpCisgICAgICAgIHNlbGYuX3Rlc3RfY293X211dGF0aW9uKG11dGF0aW9uKQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfY293X3dyaXRlKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB3cml0ZSB0aGF0IHdvdWxkIG5vdCBjYXVzZSBhIHJlc2l6ZSBzdGlsbCByZXN1bHRzIGluIGEgY29weS4KKyAgICAgICAgZGVmIG11dGF0aW9uKG1lbWlvKToKKyAgICAgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgICAgIG1lbWlvLndyaXRlKGInZm9vJykKKyAgICAgICAgc2VsZi5fdGVzdF9jb3dfbXV0YXRpb24obXV0YXRpb24pCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jb3dfc2V0c3RhdGUoc2VsZik6CisgICAgICAgICMgX19zZXRzdGF0ZV9fIHNob3VsZCBjYXVzZSBidWZmZXIgdG8gYmUgcmVsZWFzZWQuCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGInZm9vb29vbycpCisgICAgICAgIHN0YXRlID0gbWVtaW8uX19nZXRzdGF0ZV9fKCkKKyAgICAgICAgZGVmIG11dGF0aW9uKG1lbWlvKToKKyAgICAgICAgICAgIG1lbWlvLl9fc2V0c3RhdGVfXyhzdGF0ZSkKKyAgICAgICAgc2VsZi5fdGVzdF9jb3dfbXV0YXRpb24obXV0YXRpb24pCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jb3dfbXV0YWJsZShzZWxmKToKKyAgICAgICAgIyBCeXRlc0lPIHNob3VsZCBhY2NlcHQgb25seSBCeXRlcyBmb3IgY29weS1vbi13cml0ZSBzaGFyaW5nLCBzaW5jZQorICAgICAgICAjIGFyYml0cmFyeSBidWZmZXItZXhwb3J0aW5nIG9iamVjdHMgbGlrZSBieXRlYXJyYXkoKSBhcmVuJ3QgZ3VhcmFudGVlZAorICAgICAgICAjIHRvIGJlIGltbXV0YWJsZS4KKyAgICAgICAgYmEgPSBieXRlYXJyYXkoMTAyNCkKKyAgICAgICAgb2xkX3JjID0gc3lzLmdldHJlZmNvdW50KGJhKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhiYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYmEpLCBvbGRfcmMpCiAKIGNsYXNzIENTdHJpbmdJT1Rlc3QoUHlTdHJpbmdJT1Rlc3QpOgogICAgIGlvY2xhc3MgPSBpby5TdHJpbmdJTwpAQCAtNzgzLDEwICs4MzgsNSBAQAogICAgICAgICAgICAgcGFzcwogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFtQeUJ5dGVzSU9UZXN0LCBQeVN0cmluZ0lPVGVzdCwgQ0J5dGVzSU9UZXN0LCBDU3RyaW5nSU9UZXN0LAotICAgICAgICAgICAgIFB5U3RyaW5nSU9QaWNrbGVUZXN0LCBDU3RyaW5nSU9QaWNrbGVUZXN0XQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5IGIvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CmluZGV4IDRiYzMxMzMuLmRkZDViOWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQorKysgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKQEAgLTExLDYgKzExLDggQEAKIGltcG9ydCB3ZWFrcmVmCiBpbXBvcnQgYXJyYXkKIGltcG9ydCBpbworaW1wb3J0IGNvcHkKK2ltcG9ydCBwaWNrbGUKIAogCiBjbGFzcyBBYnN0cmFjdE1lbW9yeVRlc3RzOgpAQCAtMzY5LDEyICszNzEsMTIgQEAKICAgICAgICAgZCA9IG1lbW9yeXZpZXcoYikKIAogICAgICAgICBkZWwgYgotIAorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1swXSwgMjU2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMF0sIDI1NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZvcm1hdCwgIkgiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9ybWF0LCAiSCIpCi0gCisKICAgICAgICAgXyA9IG0uY2FzdCgnSScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1swXSwgMjU2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMF0sIDI1NikKQEAgLTQ5Miw4ICs0OTQsNDQgQEAKICAgICBwYXNzCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCitjbGFzcyBPdGhlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2N0eXBlc19jYXN0KHNlbGYpOgorICAgICAgICAjIElzc3VlIDE1OTQ0OiBBbGxvdyBhbGwgc291cmNlIGZvcm1hdHMgd2hlbiBjYXN0aW5nIHRvIGJ5dGVzLgorICAgICAgICBjdHlwZXMgPSB0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZSgiY3R5cGVzIikKKyAgICAgICAgcDYgPSBieXRlcyhjdHlwZXMuY19kb3VibGUoMC42KSkKKworICAgICAgICBkID0gY3R5cGVzLmNfZG91YmxlKCkKKyAgICAgICAgbSA9IG1lbW9yeXZpZXcoZCkuY2FzdCgiQiIpCisgICAgICAgIG1bOjJdID0gcDZbOjJdCisgICAgICAgIG1bMjpdID0gcDZbMjpdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52YWx1ZSwgMC42KQorCisgICAgICAgIGZvciBmb3JtYXQgaW4gIkJiYyI6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb3JtYXQpOgorICAgICAgICAgICAgICAgIGQgPSBjdHlwZXMuY19kb3VibGUoKQorICAgICAgICAgICAgICAgIG0gPSBtZW1vcnl2aWV3KGQpLmNhc3QoZm9ybWF0KQorICAgICAgICAgICAgICAgIG1bOjJdID0gbWVtb3J5dmlldyhwNikuY2FzdChmb3JtYXQpWzoyXQorICAgICAgICAgICAgICAgIG1bMjpdID0gbWVtb3J5dmlldyhwNikuY2FzdChmb3JtYXQpWzI6XQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52YWx1ZSwgMC42KQorCisgICAgZGVmIHRlc3RfbWVtb3J5dmlld19oZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk5NTE6IG1lbW9yeXZpZXcuaGV4KCkgc2VnZmF1bHRzIHdpdGggbm9uLWNvbnRpZ3VvdXMgYnVmZmVycy4KKyAgICAgICAgeCA9IGInMCcgKiAyMDAwMDAKKyAgICAgICAgbTEgPSBtZW1vcnl2aWV3KHgpCisgICAgICAgIG0yID0gbTFbOjotMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMi5oZXgoKSwgJzMwJyAqIDIwMDAwMCkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KGInYWJjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY29weS5jb3B5KG0pCisKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KGInYWJjJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKG0sIHByb3RvKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5IGIvTGliL3Rlc3QvdGVzdF9taW1ldHlwZXMucHkKaW5kZXggMGI1MzAzMi4uNjg1NjU5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9taW1ldHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9taW1ldHlwZXMucHkKQEAgLTEwMSwxMSArMTAxLDUgQEAKICAgICAgICAgZXEoc2VsZi5kYi5ndWVzc190eXBlKCJpbWFnZS5qcGciKSwgKCJpbWFnZS9qcGVnIiwgTm9uZSkpCiAgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfdHlwZSgiaW1hZ2UucG5nIiksICgiaW1hZ2UvcG5nIiwgTm9uZSkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChNaW1lVHlwZXNUZXN0Q2FzZSwKLSAgICAgICAgV2luMzJNaW1lVHlwZXNUZXN0Q2FzZQotICAgICAgICApCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CmluZGV4IGY2NGY0MzguLmVlOGMwNDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKQEAgLTIsNyArMiw3IEBACiAKIGltcG9ydCBjb3B5CiBpbXBvcnQgcGlja2xlCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAogaW1wb3J0IHhtbC5kb20ubWluaWRvbQpAQCAtNTcsNiArNTcsMjEgQEAKICAgICAgICAgdCA9IG5vZGUud2hvbGVUZXh0CiAgICAgICAgIHNlbGYuY29uZmlybSh0ID09IHMsICJsb29raW5nIGZvciAlciwgZm91bmQgJXIiICUgKHMsIHQpKQogCisgICAgZGVmIHRlc3REb2N1bWVudEFzeW5jQXR0cihzZWxmKToKKyAgICAgICAgZG9jID0gRG9jdW1lbnQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRvYy5hc3luY18pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnZXRhdHRyKGRvYywgJ2FzeW5jJywgVHJ1ZSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2V0YXR0cihkb2MsICdhc3luYycsIFRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIoZG9jLCAnYXN5bmMnLCBGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb2MuYXN5bmNfKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRG9jdW1lbnQuYXN5bmNfKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2V0YXR0cihEb2N1bWVudCwgJ2FzeW5jJywgVHJ1ZSkpCisKICAgICBkZWYgdGVzdFBhcnNlRnJvbUJpbmFyeUZpbGUoc2VsZik6CiAgICAgICAgIHdpdGggb3Blbih0c3RmaWxlLCAncmInKSBhcyBmaWxlOgogICAgICAgICAgICAgZG9tID0gcGFyc2UoZmlsZSkKQEAgLTE1NTUsOCArMTU3MCw1IEBACiAgICAgICAgIHBpID0gZG9jLmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigieSIsICJ6IikKICAgICAgICAgcGkubm9kZVZhbHVlID0gImNyYXNoIgogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KE1pbmlkb21UZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21tYXAucHkgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKaW5kZXggYWQ5M2E1OS4uYjM2NWQ4NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQpAQCAtMjgyLDYgKzI4Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKGInb25lJywgMSksIDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKGInb25lJywgMSwgLTEpLCA4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZChiJ29uZScsIDEsIC0yKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKGJ5dGVhcnJheShiJ29uZScpKSwgMCkKIAogCiAgICAgZGVmIHRlc3RfcmZpbmQoc2VsZik6CkBAIC0zMDAsNiArMzAxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJmaW5kKGInb25lJywgMCwgLTIpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmZpbmQoYidvbmUnLCAxLCAtMSksIDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZmluZChiJ29uZScsIDEsIC0yKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZmluZChieXRlYXJyYXkoYidvbmUnKSksIDgpCiAKIAogICAgIGRlZiB0ZXN0X2RvdWJsZV9jbG9zZShzZWxmKToKQEAgLTYwMSw4ICs2MDMsMTAgQEAKICAgICAgICAgbS53cml0ZShiImJhciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50ZWxsKCksIDYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgYiIwMTJiYXI2Nzg5IikKLSAgICAgICAgbS5zZWVrKDgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ud3JpdGUsIGIiYmFyIikKKyAgICAgICAgbS53cml0ZShieXRlYXJyYXkoYiJiYXoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCBiIjAxMmJhcmJhejkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLndyaXRlLCBiImJhIikKIAogICAgIGRlZiB0ZXN0X25vbl9hc2NpaV9ieXRlKHNlbGYpOgogICAgICAgICBmb3IgYiBpbiAoMTI5LCAyMDAsIDI1NSk6ICMgPiAxMjgKQEAgLTcyNiw3ICs3MzAsNyBAQAogICAgICAgICAgICAgZi5zZWVrKG51bV96ZXJvZXMpCiAgICAgICAgICAgICBmLndyaXRlKHRhaWwpCiAgICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBPdmVyZmxvd0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgT3ZlcmZsb3dFcnJvcik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21vZHVsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CmluZGV4IDEyMzAyOTMuLjZkMGQ1OTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CkBAIC0xLDggKzEsOCBAQAogIyBUZXN0IHRoZSBtb2R1bGUgdHlwZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZ2NfY29sbGVjdAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBnY19jb2xsZWN0LCByZXF1aXJlc190eXBlX2NvbGxlY3RpbmcKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIAogaW1wb3J0IHN5cwogTW9kdWxlVHlwZSA9IHR5cGUoc3lzKQpAQCAtMzAsNiArMzAsMjIgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgTW9kdWxlVHlwZS5fX2RvY19fKQogCisgICAgZGVmIHRlc3RfdW5pbml0aWFsaXplZF9taXNzaW5nX2dldGF0dHIoc2VsZik6CisgICAgICAgICMgSXNzdWUgODI5NworICAgICAgICAjIHRlc3QgdGhlIHRleHQgaW4gdGhlIEF0dHJpYnV0ZUVycm9yIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbW9kdWxlCisgICAgICAgIGZvbyA9IE1vZHVsZVR5cGUuX19uZXdfXyhNb2R1bGVUeXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUVycm9yLCAibW9kdWxlIGhhcyBubyBhdHRyaWJ1dGUgJ25vdF9oZXJlJyIsCisgICAgICAgICAgICAgICAgZ2V0YXR0ciwgZm9vLCAibm90X2hlcmUiKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19nZXRhdHRyKHNlbGYpOgorICAgICAgICAjIElzc3VlIDgyOTcKKyAgICAgICAgIyB0ZXN0IHRoZSB0ZXh0IGluIHRoZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUVycm9yLCAibW9kdWxlICdmb28nIGhhcyBubyBhdHRyaWJ1dGUgJ25vdF9oZXJlJyIsCisgICAgICAgICAgICAgICAgZ2V0YXR0ciwgZm9vLCAibm90X2hlcmUiKQorCiAgICAgZGVmIHRlc3Rfbm9fZG9jc3RyaW5nKHNlbGYpOgogICAgICAgICAjIFJlZ3VsYXJseSBpbml0aWFsaXplZCBtb2R1bGUsIG5vIGRvY3N0cmluZwogICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQpAQCAtODUsNiArMTAxLDcgQEAKICAgICAgICAgZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLl9fZGljdF9fWyJiYXIiXSwgNCkKIAorICAgIEByZXF1aXJlc190eXBlX2NvbGxlY3RpbmcKICAgICBkZWYgdGVzdF9jbGVhcl9kaWN0X2luX3JlZl9jeWNsZShzZWxmKToKICAgICAgICAgZGVzdHJveWVkID0gW10KICAgICAgICAgbSA9IE1vZHVsZVR5cGUoImZvbyIpCkBAIC0xOTgsNiArMjE1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy1sZW4oZW5kc193aXRoKTpdLCBlbmRzX3dpdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gZG9lcyBub3QgZW5kIHdpdGggeyFyfScuZm9ybWF0KHIsIGVuZHNfd2l0aCkpCiAKKyAgICBAcmVxdWlyZXNfdHlwZV9jb2xsZWN0aW5nCiAgICAgZGVmIHRlc3RfbW9kdWxlX2ZpbmFsaXphdGlvbl9hdF9zaHV0ZG93bihzZWxmKToKICAgICAgICAgIyBNb2R1bGUgZ2xvYmFscyBhbmQgYnVpbHRpbnMgc2hvdWxkIHN0aWxsIGJlIGF2YWlsYWJsZSBkdXJpbmcgc2h1dGRvd24KICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCAiZnJvbSB0ZXN0IGltcG9ydCBmaW5hbF9hIikKQEAgLTIxMSwxMiArMjI5LDE2IEBACiAgICAgICAgICAgICBiImxlbiA9IGxlbiIsCiAgICAgICAgICAgICBiInNodXRpbC5ybXRyZWUgPSBybXRyZWUifSkKIAorICAgIGRlZiB0ZXN0X2Rlc2NyaXB0b3JfZXJyb3JzX3Byb3BhZ2F0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgRGVzY3I6CisgICAgICAgICAgICBkZWYgX19nZXRfXyhzZWxmLCBvLCB0KToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgY2xhc3MgTShNb2R1bGVUeXBlKToKKyAgICAgICAgICAgIG1lbG9uID0gRGVzY3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGdldGF0dHIsIE0oIm15bW9kIiksICJtZWxvbiIpCisKICAgICAjIGZyb3plbiBhbmQgbmFtZXNwYWNlIG1vZHVsZSByZXBycyBhcmUgdGVzdGVkIGluIGltcG9ydGxpYi4KIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KE1vZHVsZVRlc3RzKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKaW5kZXggNGM0OWU5YS4uZTRkZjJhOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKQEAgLTMxOSw2ICszMTksMTkgQEAKICAgICAgICAgZXhwZWN0ZWQgPSAiY29fZmlsZW5hbWUgJXIgY2hhbmdlZCB0byAlciIgJSAob2xkX3BhdGgsIG5ld19wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCBvdXRwdXQpCiAKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9vcGFyZ3Moc2VsZik6CisgICAgICAgIGV4dGVuZGVkX29wYXJnc190ZXN0ID0gWworICAgICAgICAgICAgImEiLAorICAgICAgICAgICAgWyJhIiwgImIiXSwKKyAgICAgICAgICAgIFtdLCBbXSwKKyAgICAgICAgICAgICIiIlwKK2EucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGIKK2IucHkKKyIiIiAlIGxpc3QocmFuZ2UoMioqMTYpKV0gICMgMioqMTYgY29uc3RhbnRzCisgICAgICAgIHNlbGYuX2RvX3Rlc3QoZXh0ZW5kZWRfb3BhcmdzX3Rlc3QpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXNpbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9tc2lsaWIucHkKaW5kZXggY2NkYWVjNy4uOGVmMzM0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tc2lsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tc2lsaWIucHkKQEAgLTEsNyArMSw3IEBACiAiIiIgVGVzdCBzdWl0ZSBmb3IgdGhlIGNvZGUgaW4gbXNpbGliICIiIgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfbW9kdWxlCiBtc2lsaWIgPSBpbXBvcnRfbW9kdWxlKCdtc2lsaWInKQogCiBjbGFzcyBUZXN0X21ha2VfaWQodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzksOCArMzksNSBAQAogICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoIi5zXHg4Mm8/KitydCIpLCAiXy5zX29fX19ydCIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKaW5kZXggMjkyOWY5OC4uOGQ3YTIxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVTdHJlYW1Xcml0ZXIsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9kZWNvZGVfdW5pY29kZShzZWxmKToKLSAgICAgICAgIyBUcnlpbmcgdG8gZGVjb2RlIGFuIHVuaWNvZGUgc3RyaW5nIHNob3VsZCByYWlzZSBhIFR5cGVFcnJvcgorICAgICAgICAjIFRyeWluZyB0byBkZWNvZGUgYSB1bmljb2RlIHN0cmluZyBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IKICAgICAgICAgZm9yIGVuYyBpbiBBTExfQ0pLRU5DT0RJTkdTOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuZ2V0ZGVjb2RlcihlbmMpLCAiIikKIApAQCAtMTYwLDcgKzE2MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoYidCQCQnKSwgJ1x1NGUxNicpCiAKICAgICBkZWYgdGVzdF9kZWNvZGVfdW5pY29kZShzZWxmKToKLSAgICAgICAgIyBUcnlpbmcgdG8gZGVjb2RlIGFuIHVuaWNvZGUgc3RyaW5nIHNob3VsZCByYWlzZSBhIFR5cGVFcnJvcgorICAgICAgICAjIFRyeWluZyB0byBkZWNvZGUgYSB1bmljb2RlIHN0cmluZyBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IKICAgICAgICAgZm9yIGVuYyBpbiBBTExfQ0pLRU5DT0RJTkdTOgogICAgICAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoZW5jKSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlY29kZXIuZGVjb2RlLCAiIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX21haW5faGFuZGxpbmcucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19tYWluX2hhbmRsaW5nLnB5CmluZGV4IGRlNWY3ODIuLjUyMjczZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX21haW5faGFuZGxpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfbWFpbl9oYW5kbGluZy5weQpAQCAtMTMsMTAgKzEzLDkgQEAKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcHlfY29tcGlsZQogCi1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgKAorZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgKAogICAgIG1ha2VfcGtnLCBtYWtlX3NjcmlwdCwgbWFrZV96aXBfcGtnLCBtYWtlX3ppcF9zY3JpcHQsCi0gICAgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlLCB0ZW1wX2RpciwKLSAgICBzcGF3bl9weXRob24sIGtpbGxfcHl0aG9uKQorICAgIGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZSwgc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbikKIAogIyBMb29rIHVwIHdoaWNoIHN0YXJ0IG1ldGhvZHMgYXJlIGF2YWlsYWJsZSB0byB0ZXN0CiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCkBAIC0xNTcsMTIgKzE1NiwxMiBAQAogICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsIGVycikKIAogICAgIGRlZiB0ZXN0X2Jhc2ljX3NjcmlwdChzZWxmKToKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0X25vX3N1ZmZpeChzZWxmKToKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0X3N1ZmZpeD1UcnVlKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lKQpAQCAtMTczLDcgKzE3Miw3IEBACiAgICAgICAgICMgYSB3b3JrYXJvdW5kIGZvciB0aGF0IGNhc2UKICAgICAgICAgIyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2lweXRob24vaXB5dGhvbi9pc3N1ZXMvNDY5OAogICAgICAgICBzb3VyY2UgPSB0ZXN0X3NvdXJjZV9tYWluX3NraXBwZWRfaW5fY2hpbGRyZW4KLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdpcHl0aG9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSkKQEAgLTE4Myw3ICsxODIsNyBAQAogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9ub19zdWZmaXgpCiAKICAgICBkZWYgdGVzdF9zY3JpcHRfY29tcGlsZWQoc2VsZik6Ci0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JykKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQpAQCAtMTkyLDE0ICsxOTEsMTQgQEAKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2NvbXBpbGVkKHNlbGYpOgogICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCi0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCkBAIC0yMDksNyArMjA4LDcgQEAKIAogICAgIGRlZiB0ZXN0X3ppcGZpbGUoc2VsZik6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCkBAIC0yMTcsNyArMjE2LDcgQEAKIAogICAgIGRlZiB0ZXN0X3ppcGZpbGVfY29tcGlsZWQoc2VsZik6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCiAgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCkBAIC0yMjUsNyArMjI0LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlKHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdjaGVja19zaWJsaW5nJykKQEAgLTIzNCwyMCArMjMzLDIwIEBACiAgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfaW5fcGFja2FnZV9pbl96aXBmaWxlKHNlbGYpOgotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwX3BrZyhzY3JpcHRfZGlyLCAndGVzdF96aXAnLCAndGVzdF9wa2cnLCAnc2NyaXB0JykKICAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnNjcmlwdCcsIHppcF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX2luX3N1YnBhY2thZ2VfaW5femlwZmlsZShzZWxmKToKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcF9wa2coc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgJ3Rlc3RfcGtnJywgJ3NjcmlwdCcsIGRlcHRoPTIpCiAgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy50ZXN0X3BrZy5zY3JpcHQnLCB6aXBfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSkKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCiAgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnX19tYWluX18nLApAQCAtMjU3LDcgKzI1Niw3IEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlX2NvbXBpbGVkKHNlbGYpOgogICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCi0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQogICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbmlzLnB5IGIvTGliL3Rlc3QvdGVzdF9uaXMucHkKaW5kZXggYTNhM2MyNi4uMzg3YTRlNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9uaXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9uaXMucHkKQEAgLTM2LDggKzM2LDUgQEAKICAgICAgICAgICAgIGlmIGRvbmU6CiAgICAgICAgICAgICAgICAgYnJlYWsKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KE5pc1Rlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKaW5kZXggYWUzNjE4Zi4uMmVmNmQwMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQpAQCAtNSw2ICs1LDcgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBvcy5wYXRoCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gbm50cGxpYiBpbXBvcnQgTk5UUCwgR3JvdXBJbmZvCiBpbXBvcnQgbm50cGxpYgpAQCAtMTMsOCArMTQsMTMgQEAKICAgICBpbXBvcnQgc3NsCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgc3NsID0gTm9uZQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiAKIFRJTUVPVVQgPSAzMAorY2VydGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2tleWNlcnQzLnBlbScpCiAKICMgVE9ETzoKICMgLSB0ZXN0IHRoZSBgZmlsZWAgYXJnIHRvIG1vcmUgY29tbWFuZHMKQEAgLTIwMiwyNCArMjA4LDYgQEAKICAgICAgICAgcmVzcCwgY2FwcyA9IHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcygpCiAgICAgICAgIF9jaGVja19jYXBzKGNhcHMpCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICdyZXF1aXJlcyBTU0wgc3VwcG9ydCcpCi0gICAgZGVmIHRlc3Rfc3RhcnR0bHMoc2VsZik6Ci0gICAgICAgIGZpbGUgPSBzZWxmLnNlcnZlci5maWxlCi0gICAgICAgIHNvY2sgPSBzZWxmLnNlcnZlci5zb2NrCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0dGxzKCkKLSAgICAgICAgZXhjZXB0IG5udHBsaWIuTk5UUFBlcm1hbmVudEVycm9yOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiU1RBUlRUTFMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIuIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgc29ja2V0IGFuZCBpbnRlcm5hbCBwc2V1ZG8tZmlsZSByZWFsbHkgd2VyZQotICAgICAgICAgICAgIyBjaGFuZ2VkLgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmaWxlLCBzZWxmLnNlcnZlci5maWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb2NrLCBzZWxmLnNlcnZlci5zb2NrKQotICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBuZXcgc29ja2V0IHJlYWxseSBpcyBhbiBTU0wgb25lCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5zZXJ2ZXIuc29jaywgc3NsLlNTTFNvY2tldCkKLSAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0cnlpbmcgc3RhcnR0bHMgd2hlbiBpdCdzIGFscmVhZHkgYWN0aXZlIGZhaWxzLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zZXJ2ZXIuc3RhcnR0bHMpCi0KICAgICBkZWYgdGVzdF96bG9naW4oc2VsZik6CiAgICAgICAgICMgVGhpcyB0ZXN0IG11c3QgYmUgdGhlIHBlbnVsdGltYXRlIGJlY2F1c2UgZnVydGhlciBjb21tYW5kcyB3aWxsIGJlCiAgICAgICAgICMgcmVmdXNlZC4KQEAgLTYyMSw3ICs2MDksNyBAQAogICAgICAgICAgICAgICAgICAgICAiXHRcdDY2ODNcdDE2IgogICAgICAgICAgICAgICAgICAgICAiXHQiCiAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAjIEFuIFVURi04IG92ZXJ2aWV3IGxpbmUgZnJvbSBmci5jb21wLmxhbmcucHl0aG9uCisgICAgICAgICAgICAgICAgIyBBIFVURi04IG92ZXJ2aWV3IGxpbmUgZnJvbSBmci5jb21wLmxhbmcucHl0aG9uCiAgICAgICAgICAgICAgICAgIjU5XHRSZTogTWVzc2FnZSBkJ2VycmV1ciBpbmNvbXByw6loZW5zaWJsZSAocGFyIG1vaSkiCiAgICAgICAgICAgICAgICAgICAgICJcdEVyaWMgQnJ1bmVsIDxlcmljLmJydW5lbEBwcmFnbWFkZXYubm9zcGFtLmNvbT4iCiAgICAgICAgICAgICAgICAgICAgICJcdFdlZCwgMTUgU2VwIDIwMTAgMTg6MDk6MTUgKzAyMDAiCkBAIC0xNDc3LDE0ICsxNDY1LDE0IEBACiAgICAgZGVmIHRlc3Rfc2VydmljZV90ZW1wb3JhcmlseV91bmF2YWlsYWJsZShzZWxmKToKICAgICAgICAgI1Rlc3Qgc2VydmljZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQogICAgICAgICBjbGFzcyBIYW5kbGVyKE5OVFB2MUhhbmRsZXIpOgotICAgICAgICAgICAgd2VsY29tZSA9ICc0MDAgU2VydmljZSB0ZW1wb3JhcmlseSB1bmF2aWxhYmxlJworICAgICAgICAgICAgd2VsY29tZSA9ICc0MDAgU2VydmljZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScKICAgICAgICAgc2VsZi5jaGVja19jb25zdHJ1Y3Rvcl9lcnJvcl9jb25kaXRpb25zKAogICAgICAgICAgICAgSGFuZGxlciwgbm50cGxpYi5OTlRQVGVtcG9yYXJ5RXJyb3IsIEhhbmRsZXIud2VsY29tZSkKIAogICAgIGRlZiB0ZXN0X3NlcnZpY2VfcGVybWFuZW50bHlfdW5hdmFpbGFibGUoc2VsZik6CiAgICAgICAgICNUZXN0IHNlcnZpY2UgcGVybWFuZW50bHkgdW5hdmFpbGFibGUKICAgICAgICAgY2xhc3MgSGFuZGxlcihOTlRQdjFIYW5kbGVyKToKLSAgICAgICAgICAgIHdlbGNvbWUgPSAnNTAyIFNlcnZpY2UgcGVybWFuZW50bHkgdW5hdmlsYWJsZScKKyAgICAgICAgICAgIHdlbGNvbWUgPSAnNTAyIFNlcnZpY2UgcGVybWFuZW50bHkgdW5hdmFpbGFibGUnCiAgICAgICAgIHNlbGYuY2hlY2tfY29uc3RydWN0b3JfZXJyb3JfY29uZGl0aW9ucygKICAgICAgICAgICAgIEhhbmRsZXIsIG5udHBsaWIuTk5UUFBlcm1hbmVudEVycm9yLCBIYW5kbGVyLndlbGNvbWUpCiAKQEAgLTE1MjAsNiArMTUwOCw2NCBAQAogICAgIGRlZiBubnRwX2NsYXNzKCpwb3MsICoqa3cpOgogICAgICAgICByZXR1cm4gbm50cGxpYi5OTlRQX1NTTCgqcG9zLCBzc2xfY29udGV4dD1ieXBhc3NfY29udGV4dCwgKiprdykKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAncmVxdWlyZXMgbXVsdGl0aHJlYWRpbmcnKQorY2xhc3MgTG9jYWxTZXJ2ZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHBvcnQgPSBzdXBwb3J0LmJpbmRfcG9ydChzb2NrKQorICAgICAgICBzb2NrLmxpc3RlbigpCisgICAgICAgIHNlbGYuYmFja2dyb3VuZCA9IHRocmVhZGluZy5UaHJlYWQoCisgICAgICAgICAgICB0YXJnZXQ9c2VsZi5ydW5fc2VydmVyLCBhcmdzPShzb2NrLCkpCisgICAgICAgIHNlbGYuYmFja2dyb3VuZC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmJhY2tncm91bmQuam9pbikKKworICAgICAgICBzZWxmLm5udHAgPSBOTlRQKHN1cHBvcnQuSE9TVCwgcG9ydCwgdXNlbmV0cmM9RmFsc2UpLl9fZW50ZXJfXygpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLm5udHAuX19leGl0X18sIE5vbmUsIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgcnVuX3NlcnZlcihzZWxmLCBzb2NrKToKKyAgICAgICAgIyBDb3VsZCBiZSBnZW5lcmFsaXplZCB0byBoYW5kbGUgbW9yZSBjb21tYW5kcyBpbiBzZXBhcmF0ZSBtZXRob2RzCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIFtjbGllbnQsIF9dID0gc29jay5hY2NlcHQoKQorICAgICAgICB3aXRoIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkgYXMgY2xlYW51cDoKKyAgICAgICAgICAgIGNsZWFudXAuZW50ZXJfY29udGV4dChjbGllbnQpCisgICAgICAgICAgICByZWFkZXIgPSBjbGVhbnVwLmVudGVyX2NvbnRleHQoY2xpZW50Lm1ha2VmaWxlKCdyYicpKQorICAgICAgICAgICAgY2xpZW50LnNlbmRhbGwoYicyMDAgU2VydmVyIHJlYWR5XHJcbicpCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGNtZCA9IHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgY21kID09IGInQ0FQQUJJTElUSUVTXHJcbic6CisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5zZW5kYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgYicxMDEgQ2FwYWJpbGl0eSBsaXN0OlxyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFUlNJT04gMlxyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICBiJ1NUQVJUVExTXHJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4nCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBlbGlmIGNtZCA9PSBiJ1NUQVJUVExTXHJcbic6CisgICAgICAgICAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5zZW5kYWxsKGInMzgyIEJlZ2luIFRMUyBuZWdvdGlhdGlvbiBub3dcclxuJykKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50ID0gc3NsLndyYXBfc29ja2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LCBzZXJ2ZXJfc2lkZT1UcnVlLCBjZXJ0ZmlsZT1jZXJ0ZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY2xlYW51cC5lbnRlcl9jb250ZXh0KGNsaWVudCkKKyAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gY2xlYW51cC5lbnRlcl9jb250ZXh0KGNsaWVudC5tYWtlZmlsZSgncmInKSkKKyAgICAgICAgICAgICAgICBlbGlmIGNtZCA9PSBiJ1FVSVRcclxuJzoKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LnNlbmRhbGwoYicyMDUgQnllIVxyXG4nKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuZXhwZWN0ZWQgY29tbWFuZCB7IXJ9Jy5mb3JtYXQoY21kKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHNzbCwgJ3JlcXVpcmVzIFNTTCBzdXBwb3J0JykKKyAgICBkZWYgdGVzdF9zdGFydHRscyhzZWxmKToKKyAgICAgICAgZmlsZSA9IHNlbGYubm50cC5maWxlCisgICAgICAgIHNvY2sgPSBzZWxmLm5udHAuc29jaworICAgICAgICBzZWxmLm5udHAuc3RhcnR0bHMoKQorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHNvY2tldCBhbmQgaW50ZXJuYWwgcHNldWRvLWZpbGUgcmVhbGx5IHdlcmUKKyAgICAgICAgIyBjaGFuZ2VkLgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZpbGUsIHNlbGYubm50cC5maWxlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNvY2ssIHNlbGYubm50cC5zb2NrKQorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIG5ldyBzb2NrZXQgcmVhbGx5IGlzIGFuIFNTTCBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYubm50cC5zb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICAjIENoZWNrIHRoYXQgdHJ5aW5nIHN0YXJ0dGxzIHdoZW4gaXQncyBhbHJlYWR5IGFjdGl2ZSBmYWlscy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5ubnRwLnN0YXJ0dGxzKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKaW5kZXggNWRhYzVkYi4uMzBmYTYxMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIG9wZW5fdXJscmVzb3VyY2UKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBvcGVuX3VybHJlc291cmNlCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBodHRwLmNsaWVudCBpbXBvcnQgSFRUUEV4Y2VwdGlvbgpAQCAtOTcsOCArOTcsNSBAQAogICAgICAgICBub3JtYWxpemUoJ05GQycsICdcdWQ1NWNcdWFlMDAnKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoTm9ybWFsaXphdGlvblRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKaW5kZXggZGFjZGRkZS4uNTgwZjIwMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKQEAgLTMzMCw2ICszMzAsNzUgQEAKICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL2EvYiIsICIvYS9iIiknLCAnLicpCiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImM6L2ZvbyIsICJDOi9GT08iKScsICcuJykKIAorICAgIGRlZiB0ZXN0X2NvbW1vbnBhdGgoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayhwYXRocywgZXhwZWN0ZWQpOgorICAgICAgICAgICAgdGVzdGVyKCgnbnRwYXRoLmNvbW1vbnBhdGgoJXIpJyAlIHBhdGhzKS5yZXBsYWNlKCdcXFxcJywgJ1xcJyksCisgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgIGRlZiBjaGVja19lcnJvcihleGMsIHBhdGhzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4YywgbnRwYXRoLmNvbW1vbnBhdGgsIHBhdGhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBudHBhdGguY29tbW9ucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcy5mc2VuY29kZShwKSBmb3IgcCBpbiBwYXRoc10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbnRwYXRoLmNvbW1vbnBhdGgsIFtdKQorICAgICAgICBjaGVja19lcnJvcihWYWx1ZUVycm9yLCBbJ0M6XFxQcm9ncmFtIEZpbGVzJywgJ1Byb2dyYW0gRmlsZXMnXSkKKyAgICAgICAgY2hlY2tfZXJyb3IoVmFsdWVFcnJvciwgWydDOlxcUHJvZ3JhbSBGaWxlcycsICdDOlByb2dyYW0gRmlsZXMnXSkKKyAgICAgICAgY2hlY2tfZXJyb3IoVmFsdWVFcnJvciwgWydcXFByb2dyYW0gRmlsZXMnLCAnUHJvZ3JhbSBGaWxlcyddKQorICAgICAgICBjaGVja19lcnJvcihWYWx1ZUVycm9yLCBbJ1Byb2dyYW0gRmlsZXMnLCAnQzpcXFByb2dyYW0gRmlsZXMnXSkKKyAgICAgICAgY2hlY2soWydDOlxcUHJvZ3JhbSBGaWxlcyddLCAnQzpcXFByb2dyYW0gRmlsZXMnKQorICAgICAgICBjaGVjayhbJ0M6XFxQcm9ncmFtIEZpbGVzJywgJ0M6XFxQcm9ncmFtIEZpbGVzJ10sICdDOlxcUHJvZ3JhbSBGaWxlcycpCisgICAgICAgIGNoZWNrKFsnQzpcXFByb2dyYW0gRmlsZXNcXCcsICdDOlxcUHJvZ3JhbSBGaWxlcyddLAorICAgICAgICAgICAgICAnQzpcXFByb2dyYW0gRmlsZXMnKQorICAgICAgICBjaGVjayhbJ0M6XFxQcm9ncmFtIEZpbGVzXFwnLCAnQzpcXFByb2dyYW0gRmlsZXNcXCddLAorICAgICAgICAgICAgICAnQzpcXFByb2dyYW0gRmlsZXMnKQorICAgICAgICBjaGVjayhbJ0M6XFxcXFByb2dyYW0gRmlsZXMnLCAnQzpcXFByb2dyYW0gRmlsZXNcXFxcJ10sCisgICAgICAgICAgICAgICdDOlxcUHJvZ3JhbSBGaWxlcycpCisgICAgICAgIGNoZWNrKFsnQzpcXC5cXFByb2dyYW0gRmlsZXMnLCAnQzpcXFByb2dyYW0gRmlsZXNcXC4nXSwKKyAgICAgICAgICAgICAgJ0M6XFxQcm9ncmFtIEZpbGVzJykKKyAgICAgICAgY2hlY2soWydDOlxcJywgJ0M6XFxiaW4nXSwgJ0M6XFwnKQorICAgICAgICBjaGVjayhbJ0M6XFxQcm9ncmFtIEZpbGVzJywgJ0M6XFxiaW4nXSwgJ0M6XFwnKQorICAgICAgICBjaGVjayhbJ0M6XFxQcm9ncmFtIEZpbGVzJywgJ0M6XFxQcm9ncmFtIEZpbGVzXFxCYXInXSwKKyAgICAgICAgICAgICAgJ0M6XFxQcm9ncmFtIEZpbGVzJykKKyAgICAgICAgY2hlY2soWydDOlxcUHJvZ3JhbSBGaWxlc1xcRm9vJywgJ0M6XFxQcm9ncmFtIEZpbGVzXFxCYXInXSwKKyAgICAgICAgICAgICAgJ0M6XFxQcm9ncmFtIEZpbGVzJykKKyAgICAgICAgY2hlY2soWydDOlxcUHJvZ3JhbSBGaWxlcycsICdDOlxcUHJvamVjdHMnXSwgJ0M6XFwnKQorICAgICAgICBjaGVjayhbJ0M6XFxQcm9ncmFtIEZpbGVzXFwnLCAnQzpcXFByb2plY3RzJ10sICdDOlxcJykKKworICAgICAgICBjaGVjayhbJ0M6XFxQcm9ncmFtIEZpbGVzXFxGb28nLCAnQzovUHJvZ3JhbSBGaWxlcy9CYXInXSwKKyAgICAgICAgICAgICAgJ0M6XFxQcm9ncmFtIEZpbGVzJykKKyAgICAgICAgY2hlY2soWydDOlxcUHJvZ3JhbSBGaWxlc1xcRm9vJywgJ2M6L3Byb2dyYW0gZmlsZXMvYmFyJ10sCisgICAgICAgICAgICAgICdDOlxcUHJvZ3JhbSBGaWxlcycpCisgICAgICAgIGNoZWNrKFsnYzovcHJvZ3JhbSBmaWxlcy9iYXInLCAnQzpcXFByb2dyYW0gRmlsZXNcXEZvbyddLAorICAgICAgICAgICAgICAnYzpcXHByb2dyYW0gZmlsZXMnKQorCisgICAgICAgIGNoZWNrX2Vycm9yKFZhbHVlRXJyb3IsIFsnQzpcXFByb2dyYW0gRmlsZXMnLCAnRDpcXFByb2dyYW0gRmlsZXMnXSkKKworICAgICAgICBjaGVjayhbJ3NwYW0nXSwgJ3NwYW0nKQorICAgICAgICBjaGVjayhbJ3NwYW0nLCAnc3BhbSddLCAnc3BhbScpCisgICAgICAgIGNoZWNrKFsnc3BhbScsICdhbG90J10sICcnKQorICAgICAgICBjaGVjayhbJ2FuZFxcamFtJywgJ2FuZFxcc3BhbSddLCAnYW5kJykKKyAgICAgICAgY2hlY2soWydhbmRcXFxcamFtJywgJ2FuZFxcc3BhbVxcXFwnXSwgJ2FuZCcpCisgICAgICAgIGNoZWNrKFsnYW5kXFwuXFxqYW0nLCAnLlxcYW5kXFxzcGFtJ10sICdhbmQnKQorICAgICAgICBjaGVjayhbJ2FuZFxcamFtJywgJ2FuZFxcc3BhbScsICdhbG90J10sICcnKQorICAgICAgICBjaGVjayhbJ2FuZFxcamFtJywgJ2FuZFxcc3BhbScsICdhbmQnXSwgJ2FuZCcpCisgICAgICAgIGNoZWNrKFsnQzphbmRcXGphbScsICdDOmFuZFxcc3BhbSddLCAnQzphbmQnKQorCisgICAgICAgIGNoZWNrKFsnJ10sICcnKQorICAgICAgICBjaGVjayhbJycsICdzcGFtXFxhbG90J10sICcnKQorICAgICAgICBjaGVja19lcnJvcihWYWx1ZUVycm9yLCBbJycsICdcXHNwYW1cXGFsb3QnXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG50cGF0aC5jb21tb25wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbYidDOlxcUHJvZ3JhbSBGaWxlcycsICdDOlxcUHJvZ3JhbSBGaWxlc1xcRm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbnRwYXRoLmNvbW1vbnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJ0M6XFxQcm9ncmFtIEZpbGVzJywgJ1Byb2dyYW0gRmlsZXNcXEZvbyddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG50cGF0aC5jb21tb25wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbYidQcm9ncmFtIEZpbGVzJywgJ0M6XFxQcm9ncmFtIEZpbGVzXFxGb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBudHBhdGguY29tbW9ucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWydDOlxcUHJvZ3JhbSBGaWxlcycsIGInQzpcXFByb2dyYW0gRmlsZXNcXEZvbyddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG50cGF0aC5jb21tb25wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJ0M6XFxQcm9ncmFtIEZpbGVzJywgYidQcm9ncmFtIEZpbGVzXFxGb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBudHBhdGguY29tbW9ucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWydQcm9ncmFtIEZpbGVzJywgYidDOlxcUHJvZ3JhbSBGaWxlc1xcRm9vJ10pCisKICAgICBkZWYgdGVzdF9zYW1lb3BlbmZpbGUoc2VsZik6CiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHRmMSwgVGVtcG9yYXJ5RmlsZSgpIGFzIHRmMjoKICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBzYW1lIGZpbGUgaXMgcmVhbGx5IHRoZSBzYW1lCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X251bWVyaWNfdG93ZXIucHkgYi9MaWIvdGVzdC90ZXN0X251bWVyaWNfdG93ZXIucHkKaW5kZXggMzQyM2Q0ZS4uYzU0ZGVkYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9udW1lcmljX3Rvd2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbnVtZXJpY190b3dlci5weQpAQCAtNSw3ICs1LDYgQEAKIGltcG9ydCBtYXRoCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3BlcmF0b3IKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKIGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCkBAIC0xOTksOCArMTk4LDUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCB2LCB6KQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoSGFzaFRlc3QsIENvbXBhcmlzb25UZXN0KQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkgYi9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkKaW5kZXggZjUxMGJhYy4uNmVmOTNkOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGNvZGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weQpAQCAtMSw2ICsxLDUgQEAKICMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgMiwgb3Bjb2RlcwogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiBpbXBvcnQgdW5pdHRlc3QKIAogY2xhc3MgT3Bjb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMDUsOCArMTA0LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNeVN0cmluZygpICUgMywgNDIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChPcGNvZGVUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkgYi9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKaW5kZXggNDc4NTEwNy4uM2Y0NmE2MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQpAQCAtMSw3ICsxLDYgQEAKICMgVGVzdCB0byBzZWUgaWYgb3BlbnB0eSB3b3Jrcy4gKEJ1dCBkb24ndCB3b3JyeSBpZiBpdCBpc24ndCBhdmFpbGFibGUuKQogCiBpbXBvcnQgb3MsIHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGlmIG5vdCBoYXNhdHRyKG9zLCAib3BlbnB0eSIpOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5vcGVucHR5KCkgbm90IGF2YWlsYWJsZS4iKQpAQCAtMTgsOCArMTcsNSBAQAogICAgICAgICBvcy53cml0ZShzbGF2ZSwgYidQaW5nIScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChtYXN0ZXIsIDEwMjQpLCBiJ1BpbmchJykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChPcGVucHR5VGVzdCkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKaW5kZXggYWI1OGE5OC4uYjViYTk3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CkBAIC0xLDQgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3lzCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC0yMDMsNiArMjA1LDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubXVsKDUsIDIpID09IDEwKQogCisgICAgZGVmIHRlc3RfbWF0bXVsKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubWF0bXVsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1hdG11bCwgNDIsIDQyKQorICAgICAgICBjbGFzcyBNOgorICAgICAgICAgICAgZGVmIF9fbWF0bXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciAtIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNKCkgQCA0MiwgNDEpCisKICAgICBkZWYgdGVzdF9uZWcoc2VsZik6CiAgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcpCkBAIC0zMDcsNiArMzE4LDkgQEAKICAgICAgICAgYS5uYW1lID0gJ2FydGh1cicKICAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ25hbWUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICdhcnRodXInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSwgJ2RlbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIHN1cm5hbWU9J2RlbnQnKQogICAgICAgICBmID0gb3BlcmF0b3IuYXR0cmdldHRlcigncmFuaycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmLCBhKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmF0dHJnZXR0ZXIsIDIpCkBAIC0zNTQsNiArMzY4LDkgQEAKICAgICAgICAgYSA9ICdBQkNERScKICAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAnQycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBhLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIHNpemU9MykKICAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoMTApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGYsIGEpCiAKQEAgLTM4Nyw2ICs0MDQsNyBAQAogICAgIGRlZiB0ZXN0X21ldGhvZGNhbGxlcihzZWxmKToKICAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1ldGhvZGNhbGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tZXRob2RjYWxsZXIsIDEyKQogICAgICAgICBjbGFzcyBBOgogICAgICAgICAgICAgZGVmIGZvbyhzZWxmLCAqYXJncywgKiprd2RzKToKICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1swXSArIGFyZ3NbMV0KQEAgLTM5OSw2ICs0MTcsOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBmLCBhKQogICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdmb28nLCAxLCAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBhLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIHNwYW09MykKICAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignYmFyJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBhLCBhKQpAQCAtNDE2LDYgKzQzNyw3IEBACiAgICAgICAgICAgICBkZWYgX19pbHNoaWZ0X18gIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWxzaGlmdCIKICAgICAgICAgICAgIGRlZiBfX2ltb2RfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpbW9kIgogICAgICAgICAgICAgZGVmIF9faW11bF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImltdWwiCisgICAgICAgICAgICBkZWYgX19pbWF0bXVsX18gIChzZWxmLCBvdGhlcik6IHJldHVybiAiaW1hdG11bCIKICAgICAgICAgICAgIGRlZiBfX2lvcl9fICAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpb3IiCiAgICAgICAgICAgICBkZWYgX19pcG93X18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaXBvdyIKICAgICAgICAgICAgIGRlZiBfX2lyc2hpZnRfXyAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpcnNoaWZ0IgpAQCAtNDMwLDYgKzQ1Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWxzaGlmdCAgKGMsIDUpLCAiaWxzaGlmdCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW1vZCAgICAgKGMsIDUpLCAiaW1vZCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW11bCAgICAgKGMsIDUpLCAiaW11bCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW1hdG11bCAgKGMsIDUpLCAiaW1hdG11bCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW9yICAgICAgKGMsIDUpLCAiaW9yIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pcG93ICAgICAoYywgNSksICJpcG93IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pcnNoaWZ0ICAoYywgNSksICJpcnNoaWZ0IikKQEAgLTQ4MCw1ICs1MDMsMTA3IEBACiBjbGFzcyBDT3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgbW9kdWxlID0gY19vcGVyYXRvcgogCisKK2NsYXNzIE9wZXJhdG9yUGlja2xlVGVzdENhc2U6CisgICAgZGVmIGNvcHkoc2VsZiwgb2JqLCBwcm90byk6CisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2l0ZW0oc3lzLm1vZHVsZXMsICdvcGVyYXRvcicsIHNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfaXRlbShzeXMubW9kdWxlcywgJ29wZXJhdG9yJywgc2VsZi5tb2R1bGUyKToKKyAgICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMocGlja2xlZCkKKworICAgIGRlZiB0ZXN0X2F0dHJnZXR0ZXIoc2VsZik6CisgICAgICAgIGF0dHJnZXR0ZXIgPSBzZWxmLm1vZHVsZS5hdHRyZ2V0dGVyCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgYS54ID0gJ1gnCisgICAgICAgIGEueSA9ICdZJworICAgICAgICBhLnogPSAnWicKKyAgICAgICAgYS50ID0gQSgpCisgICAgICAgIGEudC51ID0gQSgpCisgICAgICAgIGEudC51LnYgPSAnVicKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgZiA9IGF0dHJnZXR0ZXIoJ3gnKQorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5jb3B5KGYsIHByb3RvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmMiksIHJlcHIoZikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMihhKSwgZihhKSkKKyAgICAgICAgICAgICAgICAjIG11bHRpcGxlIGdldHMKKyAgICAgICAgICAgICAgICBmID0gYXR0cmdldHRlcigneCcsICd5JywgJ3onKQorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5jb3B5KGYsIHByb3RvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmMiksIHJlcHIoZikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMihhKSwgZihhKSkKKyAgICAgICAgICAgICAgICAjIHJlY3Vyc2l2ZSBnZXRzCisgICAgICAgICAgICAgICAgZiA9IGF0dHJnZXR0ZXIoJ3QudS52JykKKyAgICAgICAgICAgICAgICBmMiA9IHNlbGYuY29weShmLCBwcm90bykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZjIpLCByZXByKGYpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIoYSksIGYoYSkpCisKKyAgICBkZWYgdGVzdF9pdGVtZ2V0dGVyKHNlbGYpOgorICAgICAgICBpdGVtZ2V0dGVyID0gc2VsZi5tb2R1bGUuaXRlbWdldHRlcgorICAgICAgICBhID0gJ0FCQ0RFJworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBmID0gaXRlbWdldHRlcigyKQorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5jb3B5KGYsIHByb3RvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmMiksIHJlcHIoZikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMihhKSwgZihhKSkKKyAgICAgICAgICAgICAgICAjIG11bHRpcGxlIGdldHMKKyAgICAgICAgICAgICAgICBmID0gaXRlbWdldHRlcigyLCAwLCA0KQorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5jb3B5KGYsIHByb3RvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmMiksIHJlcHIoZikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMihhKSwgZihhKSkKKworICAgIGRlZiB0ZXN0X21ldGhvZGNhbGxlcihzZWxmKToKKyAgICAgICAgbWV0aG9kY2FsbGVyID0gc2VsZi5tb2R1bGUubWV0aG9kY2FsbGVyCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWzBdICsgYXJnc1sxXQorICAgICAgICAgICAgZGVmIGJhcihzZWxmLCBmPTQyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICAgICAgZGVmIGJheigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByZXR1cm4ga3dkc1snbmFtZSddLCBrd2RzWydzZWxmJ10KKyAgICAgICAgYSA9IEEoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBmID0gbWV0aG9kY2FsbGVyKCdiYXInKQorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5jb3B5KGYsIHByb3RvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmMiksIHJlcHIoZikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMihhKSwgZihhKSkKKyAgICAgICAgICAgICAgICAjIHBvc2l0aW9uYWwgYXJncworICAgICAgICAgICAgICAgIGYgPSBtZXRob2RjYWxsZXIoJ2ZvbycsIDEsIDIpCisgICAgICAgICAgICAgICAgZjIgPSBzZWxmLmNvcHkoZiwgcHJvdG8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGYyKSwgcmVwcihmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyKGEpLCBmKGEpKQorICAgICAgICAgICAgICAgICMga2V5d29yZCBhcmdzCisgICAgICAgICAgICAgICAgZiA9IG1ldGhvZGNhbGxlcignYmFyJywgZj01KQorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5jb3B5KGYsIHByb3RvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmMiksIHJlcHIoZikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMihhKSwgZihhKSkKKyAgICAgICAgICAgICAgICBmID0gbWV0aG9kY2FsbGVyKCdiYXonLCBzZWxmPSdlZ2dzJywgbmFtZT0nc3BhbScpCisgICAgICAgICAgICAgICAgZjIgPSBzZWxmLmNvcHkoZiwgcHJvdG8pCisgICAgICAgICAgICAgICAgIyBDYW4ndCB0ZXN0IHJlcHIgY29uc2lzdGVudGx5IHdpdGggbXVsdGlwbGUga2V5d29yZCBhcmdzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMihhKSwgZihhKSkKKworY2xhc3MgUHlQeU9wZXJhdG9yUGlja2xlVGVzdENhc2UoT3BlcmF0b3JQaWNrbGVUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHB5X29wZXJhdG9yCisgICAgbW9kdWxlMiA9IHB5X29wZXJhdG9yCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfb3BlcmF0b3IsICdyZXF1aXJlcyBfb3BlcmF0b3InKQorY2xhc3MgUHlDT3BlcmF0b3JQaWNrbGVUZXN0Q2FzZShPcGVyYXRvclBpY2tsZVRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gcHlfb3BlcmF0b3IKKyAgICBtb2R1bGUyID0gY19vcGVyYXRvcgorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX29wZXJhdG9yLCAncmVxdWlyZXMgX29wZXJhdG9yJykKK2NsYXNzIENQeU9wZXJhdG9yUGlja2xlVGVzdENhc2UoT3BlcmF0b3JQaWNrbGVUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IGNfb3BlcmF0b3IKKyAgICBtb2R1bGUyID0gcHlfb3BlcmF0b3IKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19vcGVyYXRvciwgJ3JlcXVpcmVzIF9vcGVyYXRvcicpCitjbGFzcyBDQ09wZXJhdG9yUGlja2xlVGVzdENhc2UoT3BlcmF0b3JQaWNrbGVUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IGNfb3BlcmF0b3IKKyAgICBtb2R1bGUyID0gY19vcGVyYXRvcgorCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29yZGVyZWRfZGljdC5weSBiL0xpYi90ZXN0L3Rlc3Rfb3JkZXJlZF9kaWN0LnB5CmluZGV4IDZkM2UzMDkuLjkwMWQ0YjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3JkZXJlZF9kaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3JkZXJlZF9kaWN0LnB5CkBAIC0xLDE3ICsxLDM0IEBACiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGNvcHkKK2ltcG9ydCBnYwogaW1wb3J0IHBpY2tsZQotZnJvbSByYW5kb20gaW1wb3J0IHNodWZmbGUKK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kcmFuZ2UsIHNodWZmbGUKK2ltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2ltcG9ydCB3ZWFrcmVmCiBmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKIGZyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cywgc3VwcG9ydAogCiAKLWNsYXNzIFRlc3RPcmRlcmVkRGljdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitweV9jb2xsID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdjb2xsZWN0aW9ucycsIGJsb2NrZWQ9WydfY29sbGVjdGlvbnMnXSkKK2NfY29sbCA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnY29sbGVjdGlvbnMnLCBmcmVzaD1bJ19jb2xsZWN0aW9ucyddKQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgcmVwbGFjZWRfbW9kdWxlKG5hbWUsIHJlcGxhY2VtZW50KToKKyAgICBvcmlnaW5hbF9tb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgIHN5cy5tb2R1bGVzW25hbWVdID0gcmVwbGFjZW1lbnQKKyAgICB0cnk6CisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBvcmlnaW5hbF9tb2R1bGUKKworCitjbGFzcyBPcmRlcmVkRGljdFRlc3RzOgogCiAgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMildLCBOb25lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncwogICAgICAgICBwYWlycyA9IFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSldCkBAIC0zNSw2ICs1Miw3IEBACiAgICAgICAgICAgICBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KSwgKCdnJywgNyldKQogCiAgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgT3JkZXJlZERpY3QoKS51cGRhdGUoWygnYScsIDEpLCAoJ2InLCAyKV0sIE5vbmUpICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCiAgICAgICAgIHBhaXJzID0gWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KV0KQEAgLTc1LDExICs5MywyNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIE9yZGVyZWREaWN0KCkudXBkYXRlLCAoKSwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QudXBkYXRlKQogCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QoKS51cGRhdGUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIE9yZGVyZWREaWN0KCkudXBkYXRlLCAoKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QudXBkYXRlKQorCisgICAgZGVmIHRlc3RfZnJvbWtleXMoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKCdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoYywgTm9uZSkgZm9yIGMgaW4gJ2FiYyddKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKCdhYmMnLCB2YWx1ZT1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoYywgTm9uZSkgZm9yIGMgaW4gJ2FiYyddKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKCdhYmMnLCB2YWx1ZT0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoYywgMCkgZm9yIGMgaW4gJ2FiYyddKQorCiAgICAgZGVmIHRlc3RfYWJjKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKE9yZGVyZWREaWN0KCksIE11dGFibGVNYXBwaW5nKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhPcmRlcmVkRGljdCwgTXV0YWJsZU1hcHBpbmcpKQogCiAgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAogICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQogICAgICAgICBzaHVmZmxlKHBhaXJzKQogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQpAQCAtODgsNiArMTIxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQogCiAgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CiAgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCiAgICAgICAgIGRlbCBvZFsnYSddCkBAIC05Nyw2ICsxMzEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzWzoyXSArIHBhaXJzWzM6XSkKIAogICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KFsoJ2QnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2EnLCA0KSwgKCdlJywgNSldKQogICAgICAgICBvZFsnYyddID0gMTAgICAgICAgICAgICMgZXhpc3RpbmcgZWxlbWVudAogICAgICAgICBvZFsnZiddID0gMjAgICAgICAgICAgICMgbmV3IGVsZW1lbnQKQEAgLTEwNCw2ICsxMzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2QnLCAxKSwgKCdiJywgMiksICgnYycsIDEwKSwgKCdhJywgNCksICgnZScsIDUpLCAoJ2YnLCAyMCldKQogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3JzKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KICAgICAgICAgc2h1ZmZsZShwYWlycykKICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKQEAgLTExMyw4ICsxNDksNTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlycykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKG9kKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RbMF0gZm9yIHQgaW4gcmV2ZXJzZWQocGFpcnMpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKG9kLmtleXMoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt0WzBdIGZvciB0IGluIHJldmVyc2VkKHBhaXJzKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChvZC52YWx1ZXMoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt0WzFdIGZvciB0IGluIHJldmVyc2VkKHBhaXJzKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChvZC5pdGVtcygpKSksIGxpc3QocmV2ZXJzZWQocGFpcnMpKSkKKworICAgIGRlZiB0ZXN0X2RldGVjdF9kZWxldGlvbl9kdXJpbmdfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjJykKKyAgICAgICAgaXQgPSBpdGVyKG9kKQorICAgICAgICBrZXkgPSBuZXh0KGl0KQorICAgICAgICBkZWwgb2Rba2V5XQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbik6CisgICAgICAgICAgICAjIE5vdGUsIHRoZSBleGFjdCBleGNlcHRpb24gcmFpc2VkIGlzIG5vdCBndWFyYW50ZWVkCisgICAgICAgICAgICAjIFRoZSBvbmx5IGd1YXJhbnRlZSB0aGF0IHRoZSBuZXh0KCkgd2lsbCBub3Qgc3VjY2VlZAorICAgICAgICAgICAgbmV4dChpdCkKKworICAgIGRlZiB0ZXN0X3NvcnRlZF9pdGVyYXRvcnMoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpXSwgTm9uZSkKKyAgICAgICAgcGFpcnMgPSBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvZCksIFt0WzBdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob2Qua2V5cygpKSwgW3RbMF0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvZC52YWx1ZXMoKSksIFt0WzFdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob2QuaXRlbXMoKSksIHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyZXZlcnNlZChvZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZChbdFswXSBmb3IgdCBpbiByZXZlcnNlZChwYWlycyldKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdG9yc19lbXB0eShzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBlbXB0eSA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGVtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2Qua2V5cygpKSwgZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC52YWx1ZXMoKSksIGVtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIGVtcHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQob2QpKSwgZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChvZC5rZXlzKCkpKSwgZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChvZC52YWx1ZXMoKSkpLCBlbXB0eSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKG9kLml0ZW1zKCkpKSwgZW1wdHkpCiAKICAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KICAgICAgICAgc2h1ZmZsZShwYWlycykKICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKQEAgLTEyNCw3ICsyMDMsMTkgQEAKICAgICAgICAgICAgIG9kLnBvcGl0ZW0oKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIDApCiAKKyAgICBkZWYgdGVzdF9wb3BpdGVtX2xhc3Qoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICBwYWlycyA9IFsoaSwgaSkgZm9yIGkgaW4gcmFuZ2UoMzApXQorCisgICAgICAgIG9iaiA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg4KToKKyAgICAgICAgICAgIG9iai5wb3BpdGVtKFRydWUpCisgICAgICAgIG9iai5wb3BpdGVtKFRydWUpCisgICAgICAgIG9iai5wb3BpdGVtKGxhc3Q9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2JqKSwgMjApCisKICAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAogICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQogICAgICAgICBzaHVmZmxlKHBhaXJzKQogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQpAQCAtMTQ1LDEwICsyMzYsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYicsIDUpLCA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdhJywgNiksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2EnLCA2KSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYScsIGRlZmF1bHQ9NiksIDYpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgogICAgICAgICAgICAgbS5wb3AoJ2EnKQogCiAgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAogICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQogICAgICAgICBzaHVmZmxlKHBhaXJzKQogICAgICAgICBvZDEgPSBPcmRlcmVkRGljdChwYWlycykKQEAgLTE2NCw2ICsyNTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9kMSwgT3JkZXJlZERpY3QocGFpcnNbOi0xXSkpCiAKICAgICBkZWYgdGVzdF9jb3B5aW5nKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgIyBDaGVjayB0aGF0IG9yZGVyZWQgZGljdHMgYXJlIGNvcHlhYmxlLCBkZWVwY29weWFibGUsIHBpY2tsYWJsZSwKICAgICAgICAgIyBhbmQgaGF2ZSBhIHJlcHIvZXZhbCByb3VuZC10cmlwCiAgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCkBAIC0xNzIsMTIgKzI2NiwxNyBAQAogICAgICAgICAgICAgbXNnID0gIlxuY29weTogJXNcbm9kOiAlcyIgJSAoZHVwLCBvZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZHVwLCBvZCwgbXNnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGR1cC5pdGVtcygpKSwgbGlzdChvZC5pdGVtcygpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbihvZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZHVwKSwgdHlwZShvZCkpCiAgICAgICAgIGNoZWNrKG9kLmNvcHkoKSkKICAgICAgICAgY2hlY2soY29weS5jb3B5KG9kKSkKICAgICAgICAgY2hlY2soY29weS5kZWVwY29weShvZCkpCi0gICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgotICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgotICAgICAgICAgICAgICAgIGNoZWNrKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIHByb3RvKSkpCisgICAgICAgICMgcGlja2xlIGRpcmVjdGx5IHB1bGxzIHRoZSBtb2R1bGUsIHNvIHdlIGhhdmUgdG8gZmFrZSBpdAorICAgICAgICB3aXRoIHJlcGxhY2VkX21vZHVsZSgnY29sbGVjdGlvbnMnLCBzZWxmLm1vZHVsZSk6CisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIHByb3RvKSkpCiAgICAgICAgIGNoZWNrKGV2YWwocmVwcihvZCkpKQogICAgICAgICB1cGRhdGVfdGVzdCA9IE9yZGVyZWREaWN0KCkKICAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKG9kKQpAQCAtMTg1LDYgKzI4NCw3IEBACiAgICAgICAgIGNoZWNrKE9yZGVyZWREaWN0KG9kKSkKIAogICAgIGRlZiB0ZXN0X3lhbWxfbGlua2FnZShzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgX19yZWR1Y2VfXyBpcyBzZXR1cCBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIFB5WUFNTCdzIGR1bXAoKSBmZWF0dXJlLgogICAgICAgICAjIEluIHlhbWwsIGxpc3RzIGFyZSBuYXRpdmUgYnV0IHR1cGxlcyBhcmUgbm90LgogICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQpAQCAtMTk0LDYgKzI5NCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwodHlwZShwYWlyKT09bGlzdCBmb3IgcGFpciBpbiBvZC5fX3JlZHVjZV9fKClbMV0pKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX25vdF90b29fZmF0KHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgIyBkbyBub3Qgc2F2ZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGlmIG5vdCBuZWVkZWQKICAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKQEAgLTIwMiwxNSArMzAzLDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG9kLl9fcmVkdWNlX18oKVsyXSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZV9yZWN1cnNpdmUoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKICAgICAgICAgb2RbMV0gPSBvZAotICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoLTEsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6Ci0gICAgICAgICAgICBkdXAgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCBwcm90bykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgb2QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHVwLmtleXMoKSksIFsxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVwWzFdLCBkdXApCisKKyAgICAgICAgIyBwaWNrbGUgZGlyZWN0bHkgcHVsbHMgdGhlIG1vZHVsZSwgc28gd2UgaGF2ZSB0byBmYWtlIGl0CisgICAgICAgIHdpdGggcmVwbGFjZWRfbW9kdWxlKCdjb2xsZWN0aW9ucycsIHNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgtMSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICBkdXAgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIG9kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAua2V5cygpKSwgWzFdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVwWzFdLCBkdXApCiAKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvZCksCiAgICAgICAgICAgICAiT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKSIpCkBAIC0yMTgsNiArMzI0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE9yZGVyZWREaWN0KCkpLCAiT3JkZXJlZERpY3QoKSIpCiAKICAgICBkZWYgdGVzdF9yZXByX3JlY3Vyc2l2ZShzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CiAgICAgICAgICMgU2VlIGlzc3VlICM5ODI2CiAgICAgICAgIG9kID0gT3JkZXJlZERpY3QuZnJvbWtleXMoJ2FiYycpCiAgICAgICAgIG9kWyd4J10gPSBvZApAQCAtMjI1LDYgKzMzMiw3IEBACiAgICAgICAgICAgICAiT3JkZXJlZERpY3QoWygnYScsIE5vbmUpLCAoJ2InLCBOb25lKSwgKCdjJywgTm9uZSksICgneCcsIC4uLildKSIpCiAKICAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KICAgICAgICAgc2h1ZmZsZShwYWlycykKICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKQEAgLTIzNSw2ICszNDMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnNldGRlZmF1bHQoJ3gnLCAxMCksIDEwKQogICAgICAgICAjIG1ha2Ugc3VyZSAneCcgaXMgYWRkZWQgdG8gdGhlIGVuZAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSlbLTFdLCAoJ3gnLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Quc2V0ZGVmYXVsdCgnZycsIGRlZmF1bHQ9OSksIDkpCiAKICAgICAgICAgIyBtYWtlIHN1cmUgc2V0ZGVmYXVsdCBzdGlsbCB3b3JrcyB3aGVuIF9fbWlzc2luZ19fIGlzIGRlZmluZWQKICAgICAgICAgY2xhc3MgTWlzc2luZyhPcmRlcmVkRGljdCk6CkBAIC0yNDMsMTYgKzM1MiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1pc3NpbmcoKS5zZXRkZWZhdWx0KDUsIDkpLCA5KQogCiAgICAgZGVmIHRlc3RfcmVpbnNlcnQoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAogICAgICAgICAjIEdpdmVuIGluc2VydCBhLCBpbnNlcnQgYiwgZGVsZXRlIGEsIHJlLWluc2VydCBhLAogICAgICAgICAjIHZlcmlmeSB0aGF0IGEgaXMgbm93IGxhdGVyIHRoYW4gYi4KICAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCiAgICAgICAgIG9kWydhJ10gPSAxCiAgICAgICAgIG9kWydiJ10gPSAyCiAgICAgICAgIGRlbCBvZFsnYSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnYicsIDIpXSkKICAgICAgICAgb2RbJ2EnXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdiJywgMiksICgnYScsIDEpXSkKIAogICAgIGRlZiB0ZXN0X21vdmVfdG9fZW5kKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjZGUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdhYmNkZScpKQogICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnYycpCkBAIC0yNjMsMTYgKzM3NSwzNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdjYWJkZScpKQogICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2NhYmRlJykpCisgICAgICAgIG9kLm1vdmVfdG9fZW5kKCdiJywgbGFzdD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnYmNhZGUnKSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CiAgICAgICAgICAgICBvZC5tb3ZlX3RvX2VuZCgneCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgb2QubW92ZV90b19lbmQoJ3gnLCAwKQorCisgICAgZGVmIHRlc3RfbW92ZV90b19lbmRfaXNzdWUyNTQwNihzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QuZnJvbWtleXMoJ2FiYycpCisgICAgICAgIG9kLm1vdmVfdG9fZW5kKCdjJywgbGFzdD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnY2FiJykpCisgICAgICAgIG9kLm1vdmVfdG9fZW5kKCdhJywgbGFzdD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnYWNiJykpCisKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjJykKKyAgICAgICAgb2QubW92ZV90b19lbmQoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdiY2EnKSkKKyAgICAgICAgb2QubW92ZV90b19lbmQoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdiYWMnKSkKIAogICAgIGRlZiB0ZXN0X3NpemVvZihzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CiAgICAgICAgICMgV2ltcHkgdGVzdDogSnVzdCB2ZXJpZnkgdGhlIHJlcG9ydGVkIHNpemUgaXMgbGFyZ2VyIHRoYW4gYSByZWd1bGFyIGRpY3QKICAgICAgICAgZCA9IGRpY3QoYT0xKQogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCoqZCkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHN5cy5nZXRzaXplb2Yob2QpLCBzeXMuZ2V0c2l6ZW9mKGQpKQogCiAgICAgZGVmIHRlc3Rfb3ZlcnJpZGVfdXBkYXRlKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKICAgICAgICAgIyBWZXJpZnkgdGhhdCBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB1cGRhdGUoKSB3aXRob3V0IGJyZWFraW5nIF9faW5pdF9fKCkKICAgICAgICAgY2xhc3MgTXlPRChPcmRlcmVkRGljdCk6CiAgICAgICAgICAgICBkZWYgdXBkYXRlKHNlbGYsICphcmdzLCAqKmt3ZHMpOgpAQCAtMjgwLDE4ICs0MTIsMzE4IEBACiAgICAgICAgIGl0ZW1zID0gWygnYScsIDEpLCAoJ2MnLCAzKSwgKCdiJywgMildCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChNeU9EKGl0ZW1zKS5pdGVtcygpKSwgaXRlbXMpCiAKLWNsYXNzIEdlbmVyYWxNYXBwaW5nVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgotICAgIHR5cGUydGVzdCA9IE9yZGVyZWREaWN0CisgICAgZGVmIHRlc3RfaGlnaGx5X25lc3RlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyNTM5NTogY3Jhc2hlcyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICBvYmogPSBOb25lCisgICAgICAgIGZvciBfIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgb2JqID0gT3JkZXJlZERpY3QoWyhOb25lLCBvYmopXSkKKyAgICAgICAgZGVsIG9iagorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfaGlnaGx5X25lc3RlZF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyNTM5NTogY3Jhc2hlcyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICBkZWxldGVkID0gW10KKyAgICAgICAgY2xhc3MgTXlPRChPcmRlcmVkRGljdCk6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBkZWxldGVkLmFwcGVuZChzZWxmLmkpCisgICAgICAgIG9iaiA9IE5vbmUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIG9iaiA9IE15T0QoWyhOb25lLCBvYmopXSkKKyAgICAgICAgICAgIG9iai5pID0gaQorICAgICAgICBkZWwgb2JqCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsZXRlZCwgbGlzdChyZXZlcnNlZChyYW5nZSgxMDApKSkpCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtX2hhc2hfY29sbGlzaW9uKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKKworICAgICAgICBjbGFzcyBLZXk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaGFzaCk6CisgICAgICAgICAgICAgICAgc2VsZi5faGFzaCA9IGhhc2gKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gc3RyKGlkKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYXNoCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgIGRlZiBibG9ja2luZ19oYXNoKGhhc2gpOgorICAgICAgICAgICAgIyBTZWUgdGhlIGNvbGxpc2lvbi1oYW5kbGluZyBpbiBsb29rZGljdCAoaW4gT2JqZWN0cy9kaWN0b2JqZWN0LmMpLgorICAgICAgICAgICAgTUlOU0laRSA9IDgKKyAgICAgICAgICAgIGkgPSAoaGFzaCAmIE1JTlNJWkUtMSkKKyAgICAgICAgICAgIHJldHVybiAoaSA8PCAyKSArIGkgKyBoYXNoICsgMQorCisgICAgICAgIENPTExJRElORyA9IDEKKworICAgICAgICBrZXkgPSBLZXkoQ09MTElESU5HKQorICAgICAgICBjb2xsaWRpbmcgPSBLZXkoQ09MTElESU5HKQorICAgICAgICBibG9ja2luZyA9IEtleShibG9ja2luZ19oYXNoKENPTExJRElORykpCisKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kW2tleV0gPSAuLi4KKyAgICAgICAgb2RbYmxvY2tpbmddID0gLi4uCisgICAgICAgIG9kW2NvbGxpZGluZ10gPSAuLi4KKyAgICAgICAgb2RbJ2FmdGVyJ10gPSAuLi4KKworICAgICAgICBkZWwgb2RbYmxvY2tpbmddCisgICAgICAgIGRlbCBvZFtjb2xsaWRpbmddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWyhrZXksIC4uLiksICgnYWZ0ZXInLCAuLi4pXSkKKworICAgIGRlZiB0ZXN0X2lzc3VlMjQzNDcoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorCisgICAgICAgIGNsYXNzIEtleToKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZHJhbmdlKDEwMDAwMCkKKworICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIGtleSA9IEtleSgpCisgICAgICAgICAgICBvZFtrZXldID0gaQorCisgICAgICAgICMgVGhlc2Ugc2hvdWxkIG5vdCBjcmFzaC4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBsaXN0KG9kLnZhbHVlcygpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGxpc3Qob2QuaXRlbXMoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICByZXByKG9kKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIG9kLmNvcHkoKQorCisgICAgZGVmIHRlc3RfaXNzdWUyNDM0OChzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CisKKyAgICAgICAgY2xhc3MgS2V5OgorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kW0tleSgpXSA9IDAKKyAgICAgICAgIyBUaGlzIHNob3VsZCBub3QgY3Jhc2guCisgICAgICAgIG9kLnBvcGl0ZW0oKQorCisgICAgZGVmIHRlc3RfaXNzdWUyNDY2NyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIGRpY3QgcmVzaXplcyBhZnRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIGluc2VydGlvbiBvcGVyYXRpb25zLAorICAgICAgICB3aGV0aGVyIG9yIG5vdCB0aGVyZSB3ZXJlIGRlbGV0aW9ucyB0aGF0IGZyZWVkIHVwIHNsb3RzIGluIHRoZQorICAgICAgICBoYXNoIHRhYmxlLiAgRHVyaW5nIGZhc3Qgbm9kZSBsb29rdXAsIE9yZGVyZWREaWN0IG11c3QgY29ycmVjdGx5CisgICAgICAgIHJlc3BvbmQgdG8gYWxsIHJlc2l6ZXMsIGV2ZW4gaWYgdGhlIGN1cnJlbnQgInNpemUiIGlzIHRoZSBzYW1lCisgICAgICAgIGFzIHRoZSBvbGQgb25lLiAgV2UgdmVyaWZ5IHRoYXQgaGVyZSBieSBmb3JjaW5nIGEgZGljdCByZXNpemUKKyAgICAgICAgb24gYSBzcGFyc2Ugb2RpY3QgYW5kIHRoZW4gcGVyZm9ybSBhbiBvcGVyYXRpb24gdGhhdCBzaG91bGQKKyAgICAgICAgdHJpZ2dlciBhbiBvZGljdCByZXNpemUgKGUuZy4gcG9waXRlbSkuICBPbmUga2V5IGFzcGVjdCBoZXJlIGlzCisgICAgICAgIHRoYXQgd2Ugd2lsbCBrZWVwIHRoZSBzaXplIG9mIHRoZSBvZGljdCB0aGUgc2FtZSBhdCBlYWNoIHBvcGl0ZW0KKyAgICAgICAgY2FsbC4gIFRoaXMgdmVyaWZpZXMgdGhhdCB3ZSBoYW5kbGVkIHRoZSBkaWN0IHJlc2l6ZSBwcm9wZXJseS4KKyAgICAgICAgIiIiCisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBmb3IgYzAgaW4gJzAxMjM0NTY3ODlBQkNERUYnOgorICAgICAgICAgICAgZm9yIGMxIGluICcwMTIzNDU2Nzg5QUJDREVGJzoKKyAgICAgICAgICAgICAgICBpZiBsZW4ob2QpID09IDQ6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbm90IHJhaXNlIGEgS2V5RXJyb3IuCisgICAgICAgICAgICAgICAgICAgIG9kLnBvcGl0ZW0obGFzdD1GYWxzZSkKKyAgICAgICAgICAgICAgICBrZXkgPSBjMCArIGMxCisgICAgICAgICAgICAgICAgb2Rba2V5XSA9IGtleQorCisgICAgIyBEaXJlY3QgdXNlIG9mIGRpY3QgbWV0aG9kcworCisgICAgZGVmIHRlc3RfZGljdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIGRpY3QuX19zZXRpdGVtX18ob2QsICdzcGFtJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTlVMTCcsIHJlcHIob2QpKQorCisgICAgZGVmIHRlc3RfZGljdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kWydzcGFtJ10gPSAxCisgICAgICAgIG9kWydoYW0nXSA9IDIKKyAgICAgICAgZGljdC5fX2RlbGl0ZW1fXyhvZCwgJ3NwYW0nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIHJlcHIob2QpCisKKyAgICBkZWYgdGVzdF9kaWN0X2NsZWFyKHNlbGYpOgorICAgICAgICBPcmRlcmVkRGljdCA9IHNlbGYuT3JkZXJlZERpY3QKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kWydzcGFtJ10gPSAxCisgICAgICAgIG9kWydoYW0nXSA9IDIKKyAgICAgICAgZGljdC5jbGVhcihvZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTlVMTCcsIHJlcHIob2QpKQorCisgICAgZGVmIHRlc3RfZGljdF9wb3Aoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2RbJ3NwYW0nXSA9IDEKKyAgICAgICAgb2RbJ2hhbSddID0gMgorICAgICAgICBkaWN0LnBvcChvZCwgJ3NwYW0nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIHJlcHIob2QpCisKKyAgICBkZWYgdGVzdF9kaWN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2RbJ3NwYW0nXSA9IDEKKyAgICAgICAgb2RbJ2hhbSddID0gMgorICAgICAgICBkaWN0LnBvcGl0ZW0ob2QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmVwcihvZCkKKworICAgIGRlZiB0ZXN0X2RpY3Rfc2V0ZGVmYXVsdChzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBkaWN0LnNldGRlZmF1bHQob2QsICdzcGFtJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTlVMTCcsIHJlcHIob2QpKQorCisgICAgZGVmIHRlc3RfZGljdF91cGRhdGUoc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgZGljdC51cGRhdGUob2QsIFsoJ3NwYW0nLCAxKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ05VTEwnLCByZXByKG9kKSkKKworICAgIGRlZiB0ZXN0X3JlZmVyZW5jZV9sb29wKHNlbGYpOgorICAgICAgICAjIElzc3VlIDI1OTM1CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIEEub2RbQV0gPSBOb25lCisgICAgICAgIHIgPSB3ZWFrcmVmLnJlZihBKQorICAgICAgICBkZWwgQQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocigpKQorCisgICAgZGVmIHRlc3RfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZik6CisgICAgICAgIHN1cHBvcnQuY2hlY2tfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZiwgaXRlciwgc2VsZi5PcmRlcmVkRGljdCkKKyAgICAgICAgc3VwcG9ydC5jaGVja19mcmVlX2FmdGVyX2l0ZXJhdGluZyhzZWxmLCBsYW1iZGEgZDogaXRlcihkLmtleXMoKSksIHNlbGYuT3JkZXJlZERpY3QpCisgICAgICAgIHN1cHBvcnQuY2hlY2tfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZiwgbGFtYmRhIGQ6IGl0ZXIoZC52YWx1ZXMoKSksIHNlbGYuT3JkZXJlZERpY3QpCisgICAgICAgIHN1cHBvcnQuY2hlY2tfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZiwgbGFtYmRhIGQ6IGl0ZXIoZC5pdGVtcygpKSwgc2VsZi5PcmRlcmVkRGljdCkKKworCitjbGFzcyBQdXJlUHl0aG9uT3JkZXJlZERpY3RUZXN0cyhPcmRlcmVkRGljdFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBtb2R1bGUgPSBweV9jb2xsCisgICAgT3JkZXJlZERpY3QgPSBweV9jb2xsLk9yZGVyZWREaWN0CisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19jb2xsLCAncmVxdWlyZXMgdGhlIEMgdmVyc2lvbiBvZiB0aGUgY29sbGVjdGlvbnMgbW9kdWxlJykKK2NsYXNzIENQeXRob25PcmRlcmVkRGljdFRlc3RzKE9yZGVyZWREaWN0VGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIG1vZHVsZSA9IGNfY29sbAorICAgIE9yZGVyZWREaWN0ID0gY19jb2xsLk9yZGVyZWREaWN0CisgICAgY2hlY2tfc2l6ZW9mID0gc3VwcG9ydC5jaGVja19zaXplb2YKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3NpemVvZl9leGFjdChzZWxmKToKKyAgICAgICAgT3JkZXJlZERpY3QgPSBzZWxmLk9yZGVyZWREaWN0CisgICAgICAgIGNhbGNzaXplID0gc3RydWN0LmNhbGNzaXplCisgICAgICAgIHNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKworICAgICAgICBiYXNpY3NpemUgPSBzaXplKCduMlAnICsgJzNQblBuMlAnKSArIGNhbGNzaXplKCcyblBuJykKKyAgICAgICAgZW50cnlzaXplID0gY2FsY3NpemUoJ24yUCcpICsgY2FsY3NpemUoJ1AnKQorICAgICAgICBub2Rlc2l6ZSA9IGNhbGNzaXplKCdQbjJQJykKKworICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgY2hlY2sob2QsIGJhc2ljc2l6ZSArIDgqZW50cnlzaXplKQorICAgICAgICBvZC54ID0gMQorICAgICAgICBjaGVjayhvZCwgYmFzaWNzaXplICsgOCplbnRyeXNpemUpCisgICAgICAgIG9kLnVwZGF0ZShbKGksIGkpIGZvciBpIGluIHJhbmdlKDMpXSkKKyAgICAgICAgY2hlY2sob2QsIGJhc2ljc2l6ZSArIDgqZW50cnlzaXplICsgMypub2Rlc2l6ZSkKKyAgICAgICAgb2QudXBkYXRlKFsoaSwgaSkgZm9yIGkgaW4gcmFuZ2UoMywgMTApXSkKKyAgICAgICAgY2hlY2sob2QsIGJhc2ljc2l6ZSArIDE2KmVudHJ5c2l6ZSArIDEwKm5vZGVzaXplKQorCisgICAgICAgIGNoZWNrKG9kLmtleXMoKSwgc2l6ZSgnUCcpKQorICAgICAgICBjaGVjayhvZC5pdGVtcygpLCBzaXplKCdQJykpCisgICAgICAgIGNoZWNrKG9kLnZhbHVlcygpLCBzaXplKCdQJykpCisKKyAgICAgICAgaXRlcnNpemUgPSBzaXplKCdpUDJuMlAnKQorICAgICAgICBjaGVjayhpdGVyKG9kKSwgaXRlcnNpemUpCisgICAgICAgIGNoZWNrKGl0ZXIob2Qua2V5cygpKSwgaXRlcnNpemUpCisgICAgICAgIGNoZWNrKGl0ZXIob2QuaXRlbXMoKSksIGl0ZXJzaXplKQorICAgICAgICBjaGVjayhpdGVyKG9kLnZhbHVlcygpKSwgaXRlcnNpemUpCisKKyAgICBkZWYgdGVzdF9rZXlfY2hhbmdlX2R1cmluZ19pdGVyYXRpb24oc2VsZik6CisgICAgICAgIE9yZGVyZWREaWN0ID0gc2VsZi5PcmRlcmVkRGljdAorCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QuZnJvbWtleXMoJ2FiY2RlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnYWJjZGUnKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZm9yIGksIGsgaW4gZW51bWVyYXRlKG9kKToKKyAgICAgICAgICAgICAgICBvZC5tb3ZlX3RvX2VuZChrKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhpLCA1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmb3IgayBpbiBvZDoKKyAgICAgICAgICAgICAgICBvZFsnZiddID0gTm9uZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmb3IgayBpbiBvZDoKKyAgICAgICAgICAgICAgICBkZWwgb2RbJ2MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdiZGVhZicpKQorCisKK2NsYXNzIFB1cmVQeXRob25PcmRlcmVkRGljdFN1YmNsYXNzVGVzdHMoUHVyZVB5dGhvbk9yZGVyZWREaWN0VGVzdHMpOgorCisgICAgbW9kdWxlID0gcHlfY29sbAorICAgIGNsYXNzIE9yZGVyZWREaWN0KHB5X2NvbGwuT3JkZXJlZERpY3QpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgQ1B5dGhvbk9yZGVyZWREaWN0U3ViY2xhc3NUZXN0cyhDUHl0aG9uT3JkZXJlZERpY3RUZXN0cyk6CisKKyAgICBtb2R1bGUgPSBjX2NvbGwKKyAgICBjbGFzcyBPcmRlcmVkRGljdChjX2NvbGwuT3JkZXJlZERpY3QpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgUHVyZVB5dGhvbkdlbmVyYWxNYXBwaW5nVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnR5cGUydGVzdCA9IHB5X2NvbGwuT3JkZXJlZERpY3QKIAogICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKIAotY2xhc3MgTXlPcmRlcmVkRGljdChPcmRlcmVkRGljdCk6Ci0gICAgcGFzcwogCi1jbGFzcyBTdWJjbGFzc01hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6Ci0gICAgdHlwZTJ0ZXN0ID0gTXlPcmRlcmVkRGljdAorQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19jb2xsLCAncmVxdWlyZXMgdGhlIEMgdmVyc2lvbiBvZiB0aGUgY29sbGVjdGlvbnMgbW9kdWxlJykKK2NsYXNzIENQeXRob25HZW5lcmFsTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy50eXBlMnRlc3QgPSBjX2NvbGwuT3JkZXJlZERpY3QKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKKworCitjbGFzcyBQdXJlUHl0aG9uU3ViY2xhc3NNYXBwaW5nVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xhc3MgTXlPcmRlcmVkRGljdChweV9jb2xsLk9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xzLnR5cGUydGVzdCA9IE15T3JkZXJlZERpY3QKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX2NvbGwsICdyZXF1aXJlcyB0aGUgQyB2ZXJzaW9uIG9mIHRoZSBjb2xsZWN0aW9ucyBtb2R1bGUnKQorY2xhc3MgQ1B5dGhvblN1YmNsYXNzTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNsYXNzIE15T3JkZXJlZERpY3QoY19jb2xsLk9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xzLnR5cGUydGVzdCA9IE15T3JkZXJlZERpY3QKIAogICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9MaWIvdGVzdC90ZXN0X29zLnB5CmluZGV4IGUyOWIwZDUuLjg3NGY5ZTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcy5weQpAQCAtOSw2ICs5LDcgQEAKIGltcG9ydCBkZWNpbWFsCiBpbXBvcnQgZXJybm8KIGltcG9ydCBmcmFjdGlvbnMKK2ltcG9ydCBnZXRwYXNzCiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgbW1hcApAQCAtNDAsOCArNDEsMzQgQEAKICAgICBpbXBvcnQgZmNudGwKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmY250bCA9IE5vbmUKK3RyeToKKyAgICBpbXBvcnQgX3dpbmFwaQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF93aW5hcGkgPSBOb25lCit0cnk6CisgICAgaW1wb3J0IGdycAorICAgIGdyb3VwcyA9IFtnLmdyX2dpZCBmb3IgZyBpbiBncnAuZ2V0Z3JhbGwoKSBpZiBnZXRwYXNzLmdldHVzZXIoKSBpbiBnLmdyX21lbV0KKyAgICBpZiBoYXNhdHRyKG9zLCAnZ2V0Z2lkJyk6CisgICAgICAgIHByb2Nlc3NfZ2lkID0gb3MuZ2V0Z2lkKCkKKyAgICAgICAgaWYgcHJvY2Vzc19naWQgbm90IGluIGdyb3VwczoKKyAgICAgICAgICAgIGdyb3Vwcy5hcHBlbmQocHJvY2Vzc19naWQpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3JvdXBzID0gW10KK3RyeToKKyAgICBpbXBvcnQgcHdkCisgICAgYWxsX3VzZXJzID0gW3UucHdfdWlkIGZvciB1IGluIHB3ZC5nZXRwd2FsbCgpXQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGFsbF91c2VycyA9IFtdCit0cnk6CisgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IElOVF9NQVgsIFBZX1NTSVpFX1RfTUFYCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgSU5UX01BWCA9IFBZX1NTSVpFX1RfTUFYID0gc3lzLm1heHNpemUKIAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKKworcm9vdF9pbl9wb3NpeCA9IEZhbHNlCitpZiBoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpOgorICAgIHJvb3RfaW5fcG9zaXggPSAob3MuZ2V0ZXVpZCgpID09IDApCiAKICMgRGV0ZWN0IHdoZXRoZXIgd2UncmUgb24gYSBMaW51eCBzeXN0ZW0gdGhhdCB1c2VzIHRoZSAobm93IG91dGRhdGVkCiAjIGFuZCB1bm1haW50YWluZWQpIGxpbnV4dGhyZWFkcyB0aHJlYWRpbmcgbGlicmFyeS4gIFRoZXJlJ3MgYW4gaXNzdWUKQEAgLTEwNiw2ICsxMzMsMjYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzKSwgYnl0ZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGIic3BhbSIpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICAjIFNraXAgdGhlIHRlc3Qgb24gMzItYml0IHBsYXRmb3JtczogdGhlIG51bWJlciBvZiBieXRlcyBtdXN0IGZpdCBpbiBhCisgICAgIyBQeV9zc2l6ZV90IHR5cGUKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJTlRfTUFYIDwgUFlfU1NJWkVfVF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRzIElOVF9NQVggPCBQWV9TU0laRV9UX01BWCIpCisgICAgQHN1cHBvcnQuYmlnbWVtdGVzdChzaXplPUlOVF9NQVggKyAxMCwgbWVtdXNlPTEsIGRyeV9ydW49RmFsc2UpCisgICAgZGVmIHRlc3RfbGFyZ2VfcmVhZChzZWxmLCBzaXplKToKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGIndGVzdCcpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgIyBJc3N1ZSAjMjE5MzI6IE1ha2Ugc3VyZSB0aGF0IG9zLnJlYWQoKSBkb2VzIG5vdCByYWlzZSBhbgorICAgICAgICAjIE92ZXJmbG93RXJyb3IgZm9yIHNpemUgbGFyZ2VyIHRoYW4gSU5UX01BWAorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoZnAuZmlsZW5vKCksIHNpemUpCisKKyAgICAgICAgIyBUaGUgdGVzdCBkb2VzIG5vdCB0cnkgdG8gcmVhZCBtb3JlIHRoYW4gMiBHQiBhdCBvbmNlIGJlY2F1c2UgdGhlCisgICAgICAgICMgb3BlcmF0aW5nIHN5c3RlbSBpcyBmcmVlIHRvIHJldHVybiBsZXNzIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIndGVzdCcpCisKICAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKICAgICAgICAgIyBvcy53cml0ZSgpIGFjY2VwdHMgYnl0ZXMtIGFuZCBidWZmZXItbGlrZSBvYmplY3RzIGJ1dCBub3Qgc3RyaW5ncwogICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fQ1JFQVQgfCBvcy5PX1dST05MWSkKQEAgLTM2Myw2ICs0MTAsMjggQEAKICAgICAgICAgICAgIG9zLnN0YXQocikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQkFERikKIAorICAgIGRlZiBjaGVja19maWxlX2F0dHJpYnV0ZXMoc2VsZiwgcmVzdWx0KToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVzdWx0LCAnc3RfZmlsZV9hdHRyaWJ1dGVzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHJlc3VsdC5zdF9maWxlX2F0dHJpYnV0ZXMsIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IHJlc3VsdC5zdF9maWxlX2F0dHJpYnV0ZXMgPD0gMHhGRkZGRkZGRikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzdF9maWxlX2F0dHJpYnV0ZXMgaXMgV2luMzIgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2ZpbGVfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGZpbGUgc3RfZmlsZV9hdHRyaWJ1dGVzIChGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkgbm90IHNldCkKKyAgICAgICAgcmVzdWx0ID0gb3Muc3RhdChzZWxmLmZuYW1lKQorICAgICAgICBzZWxmLmNoZWNrX2ZpbGVfYXR0cmlidXRlcyhyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZXN1bHQuc3RfZmlsZV9hdHRyaWJ1dGVzICYgc3RhdC5GSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlksCisgICAgICAgICAgICAwKQorCisgICAgICAgICMgdGVzdCBkaXJlY3Rvcnkgc3RfZmlsZV9hdHRyaWJ1dGVzIChGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkgc2V0KQorICAgICAgICByZXN1bHQgPSBvcy5zdGF0KHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmNoZWNrX2ZpbGVfYXR0cmlidXRlcyhyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZXN1bHQuc3RfZmlsZV9hdHRyaWJ1dGVzICYgc3RhdC5GSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlksCisgICAgICAgICAgICBzdGF0LkZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwogCiBjbGFzcyBVdGltZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC03MjIsMTIgKzc5MSwxMCBAQAogCiAgICAgIyBXcmFwcGVyIHRvIGhpZGUgbWlub3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBvcy53YWxrIGFuZCBvcy5md2FsawogICAgICMgdG8gdGVzdHMgYm90aCBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBjb2RlIGJhc2UKLSAgICBkZWYgd2FsayhzZWxmLCBkaXJlY3RvcnksIHRvcGRvd249VHJ1ZSwgZm9sbG93X3N5bWxpbmtzPUZhbHNlKToKLSAgICAgICAgd2Fsa19pdCA9IG9zLndhbGsoZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bkb3duPXRvcGRvd24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2xpbmtzPWZvbGxvd19zeW1saW5rcykKLSAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIHdhbGtfaXQ6Ci0gICAgICAgICAgICB5aWVsZCAocm9vdCwgZGlycywgZmlsZXMpCisgICAgZGVmIHdhbGsoc2VsZiwgdG9wLCAqKmt3YXJncyk6CisgICAgICAgIGlmICdmb2xsb3dfc3ltbGlua3MnIGluIGt3YXJnczoKKyAgICAgICAgICAgIGt3YXJnc1snZm9sbG93bGlua3MnXSA9IGt3YXJncy5wb3AoJ2ZvbGxvd19zeW1saW5rcycpCisgICAgICAgIHJldHVybiBvcy53YWxrKHRvcCwgKiprd2FyZ3MpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGpvaW4gPSBvcy5wYXRoLmpvaW4KQEAgLTc3Niw3ICs4NDMsNyBAQAogCiAgICAgZGVmIHRlc3Rfd2Fsa190b3Bkb3duKHNlbGYpOgogICAgICAgICAjIFdhbGsgdG9wLWRvd24uCi0gICAgICAgIGFsbCA9IGxpc3Qob3Mud2FsayhzZWxmLndhbGtfcGF0aCkpCisgICAgICAgIGFsbCA9IGxpc3Qoc2VsZi53YWxrKHNlbGYud2Fsa19wYXRoKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhbGwpLCA0KQogICAgICAgICAjIFdlIGNhbid0IGtub3cgd2hpY2ggb3JkZXIgU1VCMSBhbmQgU1VCMiB3aWxsIGFwcGVhciBpbi4KQEAgLTg1NywxOSArOTI0LDMxIEBACiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkaXJuYW1lKQogICAgICAgICBvcy5ybWRpcihzdXBwb3J0LlRFU1RGTikKIAorICAgIGRlZiB0ZXN0X3dhbGtfYmFkX2RpcihzZWxmKToKKyAgICAgICAgIyBXYWxrIHRvcC1kb3duLgorICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICB3YWxrX2l0ID0gc2VsZi53YWxrKHNlbGYud2Fsa19wYXRoLCBvbmVycm9yPWVycm9ycy5hcHBlbmQpCisgICAgICAgIHJvb3QsIGRpcnMsIGZpbGVzID0gbmV4dCh3YWxrX2l0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycm9ycykKKyAgICAgICAgZGlyMSA9IGRpcnNbMF0KKyAgICAgICAgZGlyMW5ldyA9IGRpcjEgKyAnLm5ldycKKyAgICAgICAgb3MucmVuYW1lKG9zLnBhdGguam9pbihyb290LCBkaXIxKSwgb3MucGF0aC5qb2luKHJvb3QsIGRpcjFuZXcpKQorICAgICAgICByb290cyA9IFtyIGZvciByLCBkLCBmIGluIHdhbGtfaXRdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJvcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ob3MucGF0aC5qb2luKHJvb3QsIGRpcjEpLCByb290cykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihvcy5wYXRoLmpvaW4ocm9vdCwgZGlyMW5ldyksIHJvb3RzKQorICAgICAgICBmb3IgZGlyMiBpbiBkaXJzWzE6XToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKHJvb3QsIGRpcjIpLCByb290cykKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZndhbGsnKSwgIlRlc3QgbmVlZHMgb3MuZndhbGsoKSIpCiBjbGFzcyBGd2Fsa1Rlc3RzKFdhbGtUZXN0cyk6CiAgICAgIiIiVGVzdHMgZm9yIG9zLmZ3YWxrKCkuIiIiCiAKLSAgICBkZWYgd2FsayhzZWxmLCBkaXJlY3RvcnksIHRvcGRvd249VHJ1ZSwgZm9sbG93X3N5bWxpbmtzPUZhbHNlKToKLSAgICAgICAgd2Fsa19pdCA9IG9zLmZ3YWxrKGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRvd249dG9wZG93biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd19zeW1saW5rcz1mb2xsb3dfc3ltbGlua3MpCi0gICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcywgcm9vdF9mZCBpbiB3YWxrX2l0OgorICAgIGRlZiB3YWxrKHNlbGYsIHRvcCwgKiprd2FyZ3MpOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMsIHJvb3RfZmQgaW4gb3MuZndhbGsodG9wLCAqKmt3YXJncyk6CiAgICAgICAgICAgICB5aWVsZCAocm9vdCwgZGlycywgZmlsZXMpCiAKLQogICAgIGRlZiBfY29tcGFyZV90b193YWxrKHNlbGYsIHdhbGtfa3dhcmdzLCBmd2Fsa19rd2FyZ3MpOgogICAgICAgICAiIiIKICAgICAgICAgY29tcGFyZSB3aXRoIHdhbGsoKSByZXN1bHRzLgpAQCAtOTQwLDYgKzEwMTksMzAgQEAKICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUsIGRpcl9mZD1yb290ZmQpCiAgICAgICAgIG9zLnJtZGlyKHN1cHBvcnQuVEVTVEZOKQogCitjbGFzcyBCeXRlc1dhbGtUZXN0cyhXYWxrVGVzdHMpOgorICAgICIiIlRlc3RzIGZvciBvcy53YWxrKCkgd2l0aCBieXRlcy4iIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBzZWxmLnN0YWNrID0gY29udGV4dGxpYi5FeGl0U3RhY2soKQorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBzZWxmLnN0YWNrLmVudGVyX2NvbnRleHQod2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKSkKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnN0YWNrLmNsb3NlKCkKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBkZWYgd2FsayhzZWxmLCB0b3AsICoqa3dhcmdzKToKKyAgICAgICAgaWYgJ2ZvbGxvd19zeW1saW5rcycgaW4ga3dhcmdzOgorICAgICAgICAgICAga3dhcmdzWydmb2xsb3dsaW5rcyddID0ga3dhcmdzLnBvcCgnZm9sbG93X3N5bWxpbmtzJykKKyAgICAgICAgZm9yIGJyb290LCBiZGlycywgYmZpbGVzIGluIG9zLndhbGsob3MuZnNlbmNvZGUodG9wKSwgKiprd2FyZ3MpOgorICAgICAgICAgICAgcm9vdCA9IG9zLmZzZGVjb2RlKGJyb290KQorICAgICAgICAgICAgZGlycyA9IGxpc3QobWFwKG9zLmZzZGVjb2RlLCBiZGlycykpCisgICAgICAgICAgICBmaWxlcyA9IGxpc3QobWFwKG9zLmZzZGVjb2RlLCBiZmlsZXMpKQorICAgICAgICAgICAgeWllbGQgKHJvb3QsIGRpcnMsIGZpbGVzKQorICAgICAgICAgICAgYmRpcnNbOl0gPSBsaXN0KG1hcChvcy5mc2VuY29kZSwgZGlycykpCisgICAgICAgICAgICBiZmlsZXNbOl0gPSBsaXN0KG1hcChvcy5mc2VuY29kZSwgZmlsZXMpKQorCiAKIGNsYXNzIE1ha2VkaXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtOTc0LDE3ICsxMDc3LDYgQEAKICAgICAgICAgIyBJc3N1ZSAjMjU1ODM6IEEgZHJpdmUgcm9vdCBjb3VsZCByYWlzZSBQZXJtaXNzaW9uRXJyb3Igb24gV2luZG93cwogICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmFic3BhdGgoJy8nKSwgZXhpc3Rfb2s9VHJ1ZSkKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdjaG93bicpLCAndGVzdCBuZWVkcyBvcy5jaG93bicpCi0gICAgZGVmIHRlc3RfY2hvd25fdWlkX2dpZF9hcmd1bWVudHNfbXVzdF9iZV9pbmRleChzZWxmKToKLSAgICAgICAgc3RhdCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHVpZCA9IHN0YXQuc3RfdWlkCi0gICAgICAgIGdpZCA9IHN0YXQuc3RfZ2lkCi0gICAgICAgIGZvciB2YWx1ZSBpbiAoLTEuMCwgLTFqLCBkZWNpbWFsLkRlY2ltYWwoLTEpLCBmcmFjdGlvbnMuRnJhY3Rpb24oLTIsIDIpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MuY2hvd24sIHN1cHBvcnQuVEVTVEZOLCB2YWx1ZSwgZ2lkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5jaG93biwgc3VwcG9ydC5URVNURk4sIHVpZCwgdmFsdWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCB1aWQsIGdpZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCAtMSwgLTEpKQotCiAgICAgZGVmIHRlc3RfZXhpc3Rfb2tfc19pc2dpZF9kaXJlY3Rvcnkoc2VsZik6CiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdkaXIxJykKICAgICAgICAgU19JU0dJRCA9IHN0YXQuU19JU0dJRApAQCAtMTAzNSw2ICsxMTI3LDYwIEBACiAgICAgICAgIG9zLnJlbW92ZWRpcnMocGF0aCkKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnY2hvd24nKSwgIlRlc3QgbmVlZHMgY2hvd24iKQorY2xhc3MgQ2hvd25GaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgb3MubWtkaXIoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9jaG93bl91aWRfZ2lkX2FyZ3VtZW50c19tdXN0X2JlX2luZGV4KHNlbGYpOgorICAgICAgICBzdGF0ID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgdWlkID0gc3RhdC5zdF91aWQKKyAgICAgICAgZ2lkID0gc3RhdC5zdF9naWQKKyAgICAgICAgZm9yIHZhbHVlIGluICgtMS4wLCAtMWosIGRlY2ltYWwuRGVjaW1hbCgtMSksIGZyYWN0aW9ucy5GcmFjdGlvbigtMiwgMikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5jaG93biwgc3VwcG9ydC5URVNURk4sIHZhbHVlLCBnaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLmNob3duLCBzdXBwb3J0LlRFU1RGTiwgdWlkLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob3MuY2hvd24oc3VwcG9ydC5URVNURk4sIHVpZCwgZ2lkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob3MuY2hvd24oc3VwcG9ydC5URVNURk4sIC0xLCAtMSkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhsZW4oZ3JvdXBzKSA+IDEsICJ0ZXN0IG5lZWRzIG1vcmUgdGhhbiBvbmUgZ3JvdXAiKQorICAgIGRlZiB0ZXN0X2Nob3duKHNlbGYpOgorICAgICAgICBnaWRfMSwgZ2lkXzIgPSBncm91cHNbOjJdCisgICAgICAgIHVpZCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pLnN0X3VpZAorICAgICAgICBvcy5jaG93bihzdXBwb3J0LlRFU1RGTiwgdWlkLCBnaWRfMSkKKyAgICAgICAgZ2lkID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikuc3RfZ2lkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2lkLCBnaWRfMSkKKyAgICAgICAgb3MuY2hvd24oc3VwcG9ydC5URVNURk4sIHVpZCwgZ2lkXzIpCisgICAgICAgIGdpZCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pLnN0X2dpZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpZCwgZ2lkXzIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhyb290X2luX3Bvc2l4IGFuZCBsZW4oYWxsX3VzZXJzKSA+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgbmVlZHMgcm9vdCBwcml2aWxlZ2UgYW5kIG1vcmUgdGhhbiBvbmUgdXNlciIpCisgICAgZGVmIHRlc3RfY2hvd25fd2l0aF9yb290KHNlbGYpOgorICAgICAgICB1aWRfMSwgdWlkXzIgPSBhbGxfdXNlcnNbOjJdCisgICAgICAgIGdpZCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pLnN0X2dpZAorICAgICAgICBvcy5jaG93bihzdXBwb3J0LlRFU1RGTiwgdWlkXzEsIGdpZCkKKyAgICAgICAgdWlkID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikuc3RfdWlkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWlkLCB1aWRfMSkKKyAgICAgICAgb3MuY2hvd24oc3VwcG9ydC5URVNURk4sIHVpZF8yLCBnaWQpCisgICAgICAgIHVpZCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pLnN0X3VpZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVpZCwgdWlkXzIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhub3Qgcm9vdF9pbl9wb3NpeCBhbmQgbGVuKGFsbF91c2VycykgPiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IG5lZWRzIG5vbi1yb290IGFjY291bnQgYW5kIG1vcmUgdGhhbiBvbmUgdXNlciIpCisgICAgZGVmIHRlc3RfY2hvd25fd2l0aG91dF9wZXJtaXNzaW9uKHNlbGYpOgorICAgICAgICB1aWRfMSwgdWlkXzIgPSBhbGxfdXNlcnNbOjJdCisgICAgICAgIGdpZCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pLnN0X2dpZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBlcm1pc3Npb25FcnJvcik6CisgICAgICAgICAgICBvcy5jaG93bihzdXBwb3J0LlRFU1RGTiwgdWlkXzEsIGdpZCkKKyAgICAgICAgICAgIG9zLmNob3duKHN1cHBvcnQuVEVTVEZOLCB1aWRfMiwgZ2lkKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgb3Mucm1kaXIoc3VwcG9ydC5URVNURk4pCisKKwogY2xhc3MgUmVtb3ZlRGlyc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIG9zLm1ha2VkaXJzKHN1cHBvcnQuVEVTVEZOKQpAQCAtMTExNywxMCArMTI2MywxNSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGExLCBkYXRhMikKIAogCi1IQVZFX0dFVEVOVFJPUFkgPSAoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdIQVZFX0dFVEVOVFJPUFknKSA9PSAxKQorIyBvcy51cmFuZG9tKCkgZG9lc24ndCB1c2UgYSBmaWxlIGRlc2NyaXB0b3Igd2hlbiBpdCBpcyBpbXBsZW1lbnRlZCB3aXRoIHRoZQorIyBnZXRlbnRyb3B5KCkgZnVuY3Rpb24sIHRoZSBnZXRyYW5kb20oKSBmdW5jdGlvbiBvciB0aGUgZ2V0cmFuZG9tKCkgc3lzY2FsbAorT1NfVVJBTkRPTV9ET05UX1VTRV9GRCA9ICgKKyAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0hBVkVfR0VURU5UUk9QWScpID09IDEKKyAgICBvciBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0hBVkVfR0VUUkFORE9NJykgPT0gMQorICAgIG9yIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSEFWRV9HRVRSQU5ET01fU1lTQ0FMTCcpID09IDEpCiAKLUB1bml0dGVzdC5za2lwSWYoSEFWRV9HRVRFTlRST1BZLAotICAgICAgICAgICAgICAgICAiZ2V0ZW50cm9weSgpIGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvciIpCitAdW5pdHRlc3Quc2tpcElmKE9TX1VSQU5ET01fRE9OVF9VU0VfRkQgLAorICAgICAgICAgICAgICAgICAib3MucmFuZG9tKCkgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yIikKIGNsYXNzIFVSYW5kb21GRFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhyZXNvdXJjZSwgInRlc3QgcmVxdWlyZXMgdGhlIHJlc291cmNlIG1vZHVsZSIpCiAgICAgZGVmIHRlc3RfdXJhbmRvbV9mYWlsdXJlKHNlbGYpOgpAQCAtMTE1MSw4ICsxMzAyLDEwIEBACiAgICAgICAgIGNvZGUgPSAiIiJpZiAxOgogICAgICAgICAgICAgaW1wb3J0IG9zCiAgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpbXBvcnQgdGVzdC5zdXBwb3J0CiAgICAgICAgICAgICBvcy51cmFuZG9tKDQpCi0gICAgICAgICAgICBvcy5jbG9zZXJhbmdlKDMsIDI1NikKKyAgICAgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZXJhbmdlKDMsIDI1NikKICAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKG9zLnVyYW5kb20oNCkpCiAgICAgICAgICAgICAiIiIKICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLVNjJywgY29kZSkKQEAgLTExNjYsMTYgKzEzMTksMTggQEAKICAgICAgICAgY29kZSA9ICIiImlmIDE6CiAgICAgICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIGltcG9ydCB0ZXN0LnN1cHBvcnQKICAgICAgICAgICAgIG9zLnVyYW5kb20oNCkKLSAgICAgICAgICAgIGZvciBmZCBpbiByYW5nZSgzLCAyNTYpOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEZvdW5kIHRoZSB1cmFuZG9tIGZkIChYWFggaG9wZWZ1bGx5KQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgb3MuY2xvc2VyYW5nZSgzLCAyNTYpCisgICAgICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICAgICAgZm9yIGZkIGluIHJhbmdlKDMsIDI1Nik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRm91bmQgdGhlIHVyYW5kb20gZmQgKFhYWCBob3BlZnVsbHkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIG9zLmNsb3NlcmFuZ2UoMywgMjU2KQogICAgICAgICAgICAgd2l0aCBvcGVuKHtURVNURk4hcn0sICdyYicpIGFzIGY6CiAgICAgICAgICAgICAgICAgb3MuZHVwMihmLmZpbGVubygpLCBmZCkKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShvcy51cmFuZG9tKDQpKQpAQCAtMTQwMSw2ICsxNTU2LDE2IEBACiAgICAgZGVmIHRlc3Rfd3JpdGV2KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKG9zLndyaXRldiwgW2InYWJjJ10pCiAKKyAgICBkZWYgdGVzdF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjayhvcy5nZXRfaW5oZXJpdGFibGUpCisgICAgICAgIHNlbGYuY2hlY2sob3Muc2V0X2luaGVyaXRhYmxlLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2dldF9ibG9ja2luZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkcyBvcy5nZXRfYmxvY2tpbmcoKSBhbmQgb3Muc2V0X2Jsb2NraW5nKCknKQorICAgIGRlZiB0ZXN0X2Jsb2NraW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKG9zLmdldF9ibG9ja2luZykKKyAgICAgICAgc2VsZi5jaGVjayhvcy5zZXRfYmxvY2tpbmcsIFRydWUpCisKIAogY2xhc3MgTGlua1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xODQ4LDYgKzIwMTMsMzcgQEAKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUobGV2ZWwxKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgV2luMzJKdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBqdW5jdGlvbiA9ICdqdW5jdGlvbnRlc3QnCisgICAganVuY3Rpb25fdGFyZ2V0ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhzZWxmLmp1bmN0aW9uX3RhcmdldCkKKyAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmp1bmN0aW9uKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmp1bmN0aW9uKToKKyAgICAgICAgICAgICMgb3Mucm1kaXIgZGVsZWdhdGVzIHRvIFdpbmRvd3MnIFJlbW92ZURpcmVjdG9yeVcsCisgICAgICAgICAgICAjIHdoaWNoIHJlbW92ZXMganVuY3Rpb24gcG9pbnRzIHNhZmVseS4KKyAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYuanVuY3Rpb24pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfanVuY3Rpb24oc2VsZik6CisgICAgICAgIF93aW5hcGkuQ3JlYXRlSnVuY3Rpb24oc2VsZi5qdW5jdGlvbl90YXJnZXQsIHNlbGYuanVuY3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLmp1bmN0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoc2VsZi5qdW5jdGlvbikpCisKKyAgICAgICAgIyBKdW5jdGlvbnMgYXJlIG5vdCByZWNvZ25pemVkIGFzIGxpbmtzLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNsaW5rKHNlbGYuanVuY3Rpb24pKQorCisgICAgZGVmIHRlc3RfdW5saW5rX3JlbW92ZXNfanVuY3Rpb24oc2VsZik6CisgICAgICAgIF93aW5hcGkuQ3JlYXRlSnVuY3Rpb24oc2VsZi5qdW5jdGlvbl90YXJnZXQsIHNlbGYuanVuY3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLmp1bmN0aW9uKSkKKworICAgICAgICBvcy51bmxpbmsoc2VsZi5qdW5jdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLmp1bmN0aW9uKSkKKworCiBAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCiBjbGFzcyBOb25Mb2NhbFN5bWxpbmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE5MjEsNiArMjExNywxMiBAQAogICAgICAgICAjIFdlIGFyZSB0aGUgcGFyZW50IG9mIG91ciBzdWJwcm9jZXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHN0ZG91dCksIG9zLmdldHBpZCgpKQogCisgICAgZGVmIHRlc3Rfd2FpdHBpZChzZWxmKToKKyAgICAgICAgYXJncyA9IFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnXQorICAgICAgICBwaWQgPSBvcy5zcGF3bnYob3MuUF9OT1dBSVQsIGFyZ3NbMF0sIGFyZ3MpCisgICAgICAgIHN0YXR1cyA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgKHBpZCwgMCkpCisKIAogIyBUaGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgVGVzdENhc2UgY2F1c2VkIGF0IGxlYXN0IHR3byBkaWZmZXJlbnQgZXJyb3JzIG9uCiAjICpuaXggYnVpbGRib3RzLiBUZW1wb3JhcmlseSBza2lwIHRoaXMgdG8gbGV0IHRoZSBidWlsZGJvdHMgbW92ZSBhbG9uZy4KQEAgLTIwNTQsMTEgKzIyNTYsMTMgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5rZXkgPSBzdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoY2xzLkRBVEEpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBzdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpjbHMua2V5KQogICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTI1OTMsNDMgKzI3OTcsMjUxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkKSwgRmFsc2UpCiAKIAotQHN1cHBvcnQucmVhcF90aHJlYWRzCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIEZpbGVUZXN0cywKLSAgICAgICAgU3RhdEF0dHJpYnV0ZVRlc3RzLAotICAgICAgICBVdGltZVRlc3RzLAotICAgICAgICBFbnZpcm9uVGVzdHMsCi0gICAgICAgIFdhbGtUZXN0cywKLSAgICAgICAgRndhbGtUZXN0cywKLSAgICAgICAgTWFrZWRpclRlc3RzLAotICAgICAgICBEZXZOdWxsVGVzdHMsCi0gICAgICAgIFVSYW5kb21UZXN0cywKLSAgICAgICAgVVJhbmRvbUZEVGVzdHMsCi0gICAgICAgIEV4ZWNUZXN0cywKLSAgICAgICAgV2luMzJFcnJvclRlc3RzLAotICAgICAgICBUZXN0SW52YWxpZEZELAotICAgICAgICBQb3NpeFVpZEdpZFRlc3RzLAotICAgICAgICBQZXAzODNUZXN0cywKLSAgICAgICAgV2luMzJLaWxsVGVzdHMsCi0gICAgICAgIFdpbjMyTGlzdGRpclRlc3RzLAotICAgICAgICBXaW4zMlN5bWxpbmtUZXN0cywKLSAgICAgICAgTm9uTG9jYWxTeW1saW5rVGVzdHMsCi0gICAgICAgIEZTRW5jb2RpbmdUZXN0cywKLSAgICAgICAgRGV2aWNlRW5jb2RpbmdUZXN0cywKLSAgICAgICAgUGlkVGVzdHMsCi0gICAgICAgIExvZ2luVGVzdHMsCi0gICAgICAgIExpbmtUZXN0cywKLSAgICAgICAgVGVzdFNlbmRmaWxlLAotICAgICAgICBQcm9ncmFtUHJpb3JpdHlUZXN0cywKLSAgICAgICAgRXh0ZW5kZWRBdHRyaWJ1dGVUZXN0cywKLSAgICAgICAgV2luMzJEZXByZWNhdGVkQnl0ZXNBUEksCi0gICAgICAgIFRlcm1zaXplVGVzdHMsCi0gICAgICAgIE9TRXJyb3JUZXN0cywKLSAgICAgICAgUmVtb3ZlRGlyc1Rlc3RzLAotICAgICAgICBDUFVDb3VudFRlc3RzLAotICAgICAgICBGREluaGVyaXRhbmNlVGVzdHMsCi0gICAgKQorQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2dldF9ibG9ja2luZycpLAorICAgICAgICAgICAgICAgICAgICAgJ25lZWRzIG9zLmdldF9ibG9ja2luZygpIGFuZCBvcy5zZXRfYmxvY2tpbmcoKScpCitjbGFzcyBCbG9ja2luZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9ibG9ja2luZyhzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfYmxvY2tpbmcoZmQpLCBUcnVlKQorCisgICAgICAgIG9zLnNldF9ibG9ja2luZyhmZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2Jsb2NraW5nKGZkKSwgRmFsc2UpCisKKyAgICAgICAgb3Muc2V0X2Jsb2NraW5nKGZkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9ibG9ja2luZyhmZCksIFRydWUpCisKKworCitjbGFzcyBFeHBvcnRzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X29zX2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbignb3BlbicsIG9zLl9fYWxsX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3dhbGsnLCBvcy5fX2FsbF9fKQorCisKK2NsYXNzIFRlc3RTY2FuZGlyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGgucmVhbHBhdGgoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnJtdHJlZSwgc2VsZi5wYXRoKQorICAgICAgICBvcy5ta2RpcihzZWxmLnBhdGgpCisKKyAgICBkZWYgY3JlYXRlX2ZpbGUoc2VsZiwgbmFtZT0iZmlsZS50eHQiKToKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXRoLCBuYW1lKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoYidweXRob24nKQorICAgICAgICByZXR1cm4gZmlsZW5hbWUKKworICAgIGRlZiBnZXRfZW50cmllcyhzZWxmLCBuYW1lcyk6CisgICAgICAgIGVudHJpZXMgPSBkaWN0KChlbnRyeS5uYW1lLCBlbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVudHJ5IGluIG9zLnNjYW5kaXIoc2VsZi5wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZW50cmllcy5rZXlzKCkpLCBuYW1lcykKKyAgICAgICAgcmV0dXJuIGVudHJpZXMKKworICAgIGRlZiBhc3NlcnRfc3RhdF9lcXVhbChzZWxmLCBzdGF0MSwgc3RhdDIsIHNraXBfZmllbGRzKToKKyAgICAgICAgaWYgc2tpcF9maWVsZHM6CisgICAgICAgICAgICBmb3IgYXR0ciBpbiBkaXIoc3RhdDEpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBhdHRyLnN0YXJ0c3dpdGgoInN0XyIpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGF0dHIgaW4gKCJzdF9kZXYiLCAic3RfaW5vIiwgInN0X25saW5rIik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHN0YXQxLCBhdHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc3RhdDIsIGF0dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXQxLCBzdGF0MiwgYXR0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQxLCBzdGF0MikKKworICAgIGRlZiBjaGVja19lbnRyeShzZWxmLCBlbnRyeSwgbmFtZSwgaXNfZGlyLCBpc19maWxlLCBpc19zeW1saW5rKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5uYW1lLCBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnBhdGgsIG9zLnBhdGguam9pbihzZWxmLnBhdGgsIG5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5Lmlub2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChlbnRyeS5wYXRoLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpLnN0X2lubykKKworICAgICAgICBlbnRyeV9zdGF0ID0gb3Muc3RhdChlbnRyeS5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LmlzX2RpcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JU0RJUihlbnRyeV9zdGF0LnN0X21vZGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LmlzX2ZpbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVNSRUcoZW50cnlfc3RhdC5zdF9tb2RlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5pc19zeW1saW5rKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5pc2xpbmsoZW50cnkucGF0aCkpCisKKyAgICAgICAgZW50cnlfbHN0YXQgPSBvcy5zdGF0KGVudHJ5LnBhdGgsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5pc19kaXIoZm9sbG93X3N5bWxpbmtzPUZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVNESVIoZW50cnlfbHN0YXQuc3RfbW9kZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuaXNfZmlsZShmb2xsb3dfc3ltbGlua3M9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JU1JFRyhlbnRyeV9sc3RhdC5zdF9tb2RlKSkKKworICAgICAgICBzZWxmLmFzc2VydF9zdGF0X2VxdWFsKGVudHJ5LnN0YXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9zdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLm5hbWUgPT0gJ250JyBhbmQgbm90IGlzX3N5bWxpbmspCisgICAgICAgIHNlbGYuYXNzZXJ0X3N0YXRfZXF1YWwoZW50cnkuc3RhdChmb2xsb3dfc3ltbGlua3M9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X2xzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLm5hbWUgPT0gJ250JykKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGxpbmsgPSBoYXNhdHRyKG9zLCAnbGluaycpCisgICAgICAgIHN5bWxpbmsgPSBzdXBwb3J0LmNhbl9zeW1saW5rKCkKKworICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5qb2luKHNlbGYucGF0aCwgImRpciIpCisgICAgICAgIG9zLm1rZGlyKGRpcm5hbWUpCisgICAgICAgIGZpbGVuYW1lID0gc2VsZi5jcmVhdGVfZmlsZSgiZmlsZS50eHQiKQorICAgICAgICBpZiBsaW5rOgorICAgICAgICAgICAgb3MubGluayhmaWxlbmFtZSwgb3MucGF0aC5qb2luKHNlbGYucGF0aCwgImxpbmtfZmlsZS50eHQiKSkKKyAgICAgICAgaWYgc3ltbGluazoKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoZGlybmFtZSwgb3MucGF0aC5qb2luKHNlbGYucGF0aCwgInN5bWxpbmtfZGlyIiksCisgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9pc19kaXJlY3Rvcnk9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoZmlsZW5hbWUsIG9zLnBhdGguam9pbihzZWxmLnBhdGgsICJzeW1saW5rX2ZpbGUudHh0IikpCisKKyAgICAgICAgbmFtZXMgPSBbJ2RpcicsICdmaWxlLnR4dCddCisgICAgICAgIGlmIGxpbms6CisgICAgICAgICAgICBuYW1lcy5hcHBlbmQoJ2xpbmtfZmlsZS50eHQnKQorICAgICAgICBpZiBzeW1saW5rOgorICAgICAgICAgICAgbmFtZXMuZXh0ZW5kKCgnc3ltbGlua19kaXInLCAnc3ltbGlua19maWxlLnR4dCcpKQorICAgICAgICBlbnRyaWVzID0gc2VsZi5nZXRfZW50cmllcyhuYW1lcykKKworICAgICAgICBlbnRyeSA9IGVudHJpZXNbJ2RpciddCisgICAgICAgIHNlbGYuY2hlY2tfZW50cnkoZW50cnksICdkaXInLCBUcnVlLCBGYWxzZSwgRmFsc2UpCisKKyAgICAgICAgZW50cnkgPSBlbnRyaWVzWydmaWxlLnR4dCddCisgICAgICAgIHNlbGYuY2hlY2tfZW50cnkoZW50cnksICdmaWxlLnR4dCcsIEZhbHNlLCBUcnVlLCBGYWxzZSkKKworICAgICAgICBpZiBsaW5rOgorICAgICAgICAgICAgZW50cnkgPSBlbnRyaWVzWydsaW5rX2ZpbGUudHh0J10KKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZW50cnkoZW50cnksICdsaW5rX2ZpbGUudHh0JywgRmFsc2UsIFRydWUsIEZhbHNlKQorCisgICAgICAgIGlmIHN5bWxpbms6CisgICAgICAgICAgICBlbnRyeSA9IGVudHJpZXNbJ3N5bWxpbmtfZGlyJ10KKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZW50cnkoZW50cnksICdzeW1saW5rX2RpcicsIFRydWUsIEZhbHNlLCBUcnVlKQorCisgICAgICAgICAgICBlbnRyeSA9IGVudHJpZXNbJ3N5bWxpbmtfZmlsZS50eHQnXQorICAgICAgICAgICAgc2VsZi5jaGVja19lbnRyeShlbnRyeSwgJ3N5bWxpbmtfZmlsZS50eHQnLCBGYWxzZSwgVHJ1ZSwgVHJ1ZSkKKworICAgIGRlZiBnZXRfZW50cnkoc2VsZiwgbmFtZSk6CisgICAgICAgIGVudHJpZXMgPSBsaXN0KG9zLnNjYW5kaXIoc2VsZi5wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZW50cmllcyksIDEpCisKKyAgICAgICAgZW50cnkgPSBlbnRyaWVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkubmFtZSwgbmFtZSkKKyAgICAgICAgcmV0dXJuIGVudHJ5CisKKyAgICBkZWYgY3JlYXRlX2ZpbGVfZW50cnkoc2VsZik6CisgICAgICAgIGZpbGVuYW1lID0gc2VsZi5jcmVhdGVfZmlsZSgpCisgICAgICAgIHJldHVybiBzZWxmLmdldF9lbnRyeShvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSkKKworICAgIGRlZiB0ZXN0X2N1cnJlbnRfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBmaWxlbmFtZSA9IHNlbGYuY3JlYXRlX2ZpbGUoKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi5wYXRoKQorCisgICAgICAgICAgICAjIGNhbGwgc2NhbmRpcigpIHdpdGhvdXQgcGFyYW1ldGVyOiBpdCBtdXN0IGxpc3QgdGhlIGNvbnRlbnQKKyAgICAgICAgICAgICMgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisgICAgICAgICAgICBlbnRyaWVzID0gZGljdCgoZW50cnkubmFtZSwgZW50cnkpIGZvciBlbnRyeSBpbiBvcy5zY2FuZGlyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChlbnRyaWVzLmtleXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKV0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZW50cnkgPSBzZWxmLmNyZWF0ZV9maWxlX2VudHJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGVudHJ5KSwgIjxEaXJFbnRyeSAnZmlsZS50eHQnPiIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVkX2RpcihzZWxmKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhdGgsICdkaXInKQorCisgICAgICAgIG9zLm1rZGlyKHBhdGgpCisgICAgICAgIGVudHJ5ID0gc2VsZi5nZXRfZW50cnkoJ2RpcicpCisgICAgICAgIG9zLnJtZGlyKHBhdGgpCisKKyAgICAgICAgIyBPbiBQT1NJWCwgaXNfZGlyKCkgcmVzdWx0IGRlcGVuZHMgaWYgc2NhbmRpcigpIGZpbGxlZCBkX3R5cGUgb3Igbm90CisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnRyeS5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnRyeS5pc19maWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW50cnkuaXNfc3ltbGluaygpKQorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvciwgZW50cnkuaW5vZGUpCisgICAgICAgICAgICAjIGRvbid0IGZhaWwKKyAgICAgICAgICAgIGVudHJ5LnN0YXQoKQorICAgICAgICAgICAgZW50cnkuc3RhdChmb2xsb3dfc3ltbGlua3M9RmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZW50cnkuaW5vZGUoKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yLCBlbnRyeS5zdGF0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IsIGVudHJ5LnN0YXQsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZWRfZmlsZShzZWxmKToKKyAgICAgICAgZW50cnkgPSBzZWxmLmNyZWF0ZV9maWxlX2VudHJ5KCkKKyAgICAgICAgb3MudW5saW5rKGVudHJ5LnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnRyeS5pc19kaXIoKSkKKyAgICAgICAgIyBPbiBQT1NJWCwgaXNfZGlyKCkgcmVzdWx0IGRlcGVuZHMgaWYgc2NhbmRpcigpIGZpbGxlZCBkX3R5cGUgb3Igbm90CisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnRyeS5pc19maWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW50cnkuaXNfc3ltbGluaygpKQorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvciwgZW50cnkuaW5vZGUpCisgICAgICAgICAgICAjIGRvbid0IGZhaWwKKyAgICAgICAgICAgIGVudHJ5LnN0YXQoKQorICAgICAgICAgICAgZW50cnkuc3RhdChmb2xsb3dfc3ltbGlua3M9RmFsc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZW50cnkuaW5vZGUoKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yLCBlbnRyeS5zdGF0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IsIGVudHJ5LnN0YXQsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X2Jyb2tlbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBpZiBub3Qgc3VwcG9ydC5jYW5fc3ltbGluaygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2tpcFRlc3QoJ2Nhbm5vdCBjcmVhdGUgc3ltYm9saWMgbGluaycpCisKKyAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmNyZWF0ZV9maWxlKCJmaWxlLnR4dCIpCisgICAgICAgIG9zLnN5bWxpbmsoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucGF0aCwgInN5bWxpbmsudHh0IikpCisgICAgICAgIGVudHJpZXMgPSBzZWxmLmdldF9lbnRyaWVzKFsnZmlsZS50eHQnLCAnc3ltbGluay50eHQnXSkKKyAgICAgICAgZW50cnkgPSBlbnRyaWVzWydzeW1saW5rLnR4dCddCisgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZW50cnkuaW5vZGUoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnRyeS5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnRyeS5pc19maWxlKCkpICAjIGJyb2tlbiBzeW1saW5rIHJldHVybnMgRmFsc2UKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnRyeS5pc19kaXIoZm9sbG93X3N5bWxpbmtzPUZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnRyeS5pc19maWxlKGZvbGxvd19zeW1saW5rcz1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnRyeS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yLCBlbnRyeS5zdGF0KQorICAgICAgICAjIGRvbid0IGZhaWwKKyAgICAgICAgZW50cnkuc3RhdChmb2xsb3dfc3ltbGlua3M9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAibnQiOgorICAgICAgICAgICAgIyBPbiBXaW5kb3dzLCBvcy5zY2FuZGlyKGJ5dGVzKSBtdXN0IHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5zY2FuZGlyLCBiJy4nKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5jcmVhdGVfZmlsZSgiZmlsZS50eHQiKQorCisgICAgICAgIHBhdGhfYnl0ZXMgPSBvcy5mc2VuY29kZShzZWxmLnBhdGgpCisgICAgICAgIGVudHJpZXMgPSBsaXN0KG9zLnNjYW5kaXIocGF0aF9ieXRlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVudHJpZXMpLCAxLCBlbnRyaWVzKQorICAgICAgICBlbnRyeSA9IGVudHJpZXNbMF0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5Lm5hbWUsIGInZmlsZS50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZnNlbmNvZGUob3MucGF0aC5qb2luKHNlbGYucGF0aCwgJ2ZpbGUudHh0JykpKQorCisgICAgZGVmIHRlc3RfZW1wdHlfcGF0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IsIG9zLnNjYW5kaXIsICcnKQorCisgICAgZGVmIHRlc3RfY29uc3VtZV9pdGVyYXRvcl90d2ljZShzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVfZmlsZSgiZmlsZS50eHQiKQorICAgICAgICBpdGVyYXRvciA9IG9zLnNjYW5kaXIoc2VsZi5wYXRoKQorCisgICAgICAgIGVudHJpZXMgPSBsaXN0KGl0ZXJhdG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbnRyaWVzKSwgMSwgZW50cmllcykKKworICAgICAgICAjIGNoZWNrIHRoYW4gY29uc3VtaW5nIHRoZSBpdGVyYXRvciB0d2ljZSBkb2Vzbid0IHJhaXNlIGV4Y2VwdGlvbgorICAgICAgICBlbnRyaWVzMiA9IGxpc3QoaXRlcmF0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVudHJpZXMyKSwgMCwgZW50cmllczIpCisKKyAgICBkZWYgdGVzdF9iYWRfcGF0aF90eXBlKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFsxMjM0LCAxLjIzNCwge30sIFtdXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3Muc2NhbmRpciwgb2JqKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3N4X2Vudi5weSBiL0xpYi90ZXN0L3Rlc3Rfb3N4X2Vudi5weQppbmRleCBkOGViOTgxLi44YTNiYzVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zeF9lbnYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vc3hfZW52LnB5CkBAIC0yLDcgKzIsNyBAQAogVGVzdCBzdWl0ZSBmb3IgT1MgWCBpbnRlcnByZXRlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAiIiIKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEVudmlyb25tZW50VmFyR3VhcmQsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEVudmlyb25tZW50VmFyR3VhcmQKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3lzY29uZmlnCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CmluZGV4IGU3OTY4Y2MuLmFiNjU3N2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3RydWN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fZmFpbHVyZQogCiAjCiAjICBGaXJzdCwgd2UgdGVzdCB0aGF0IHdlIGNhbiBnZW5lcmF0ZSB0cmVlcyBmcm9tIHZhbGlkIHNvdXJjZSBmcmFnbWVudHMsCkBAIC02Myw2ICs2MywyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgaWYgKHlpZWxkKTpcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICB5aWVsZCB4XG4iKQogCisgICAgZGVmIHRlc3RfYXdhaXRfc3RhdGVtZW50KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhc3luYyBkZWYgZigpOlxuIGF3YWl0IHNtdGgoKSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImFzeW5jIGRlZiBmKCk6XG4gZm9vID0gYXdhaXQgc210aCgpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYXN5bmMgZGVmIGYoKTpcbiBmb28sIGJhciA9IGF3YWl0IHNtdGgoKSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImFzeW5jIGRlZiBmKCk6XG4gKGF3YWl0IHNtdGgoKSkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhc3luYyBkZWYgZigpOlxuIGZvbygoYXdhaXQgc210aCgpKSkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhc3luYyBkZWYgZigpOlxuIGF3YWl0IGZvbygpOyByZXR1cm4gNDIiKQorCisgICAgZGVmIHRlc3RfYXN5bmNfd2l0aF9zdGF0ZW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImFzeW5jIGRlZiBmKCk6XG4gYXN5bmMgd2l0aCAxOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYXN5bmMgZGVmIGYoKTpcbiBhc3luYyB3aXRoIGEgYXMgYiwgYyBhcyBkOiBwYXNzIikKKworICAgIGRlZiB0ZXN0X2FzeW5jX2Zvcl9zdGF0ZW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImFzeW5jIGRlZiBmKCk6XG4gYXN5bmMgZm9yIGkgaW4gKCk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhc3luYyBkZWYgZigpOlxuIGFzeW5jIGZvciBpLCBiIGluICgpOiBwYXNzIikKKwogICAgIGRlZiB0ZXN0X25vbmxvY2FsX3N0YXRlbWVudChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTpcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHggPSAwXG4iCkBAIC0zMTMsNyArMzI5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdCBFeGNlcHRpb24gYXMgZTpcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJhaXNlIFZhbHVlRXJyb3IgZnJvbSBlXG4iKQogCisgICAgZGVmIHRlc3RfbGlzdF9kaXNwbGF5cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19leHByKCdbXScpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcignWyp7Mn0sIDMsICpbNF1dJykKKwogICAgIGRlZiB0ZXN0X3NldF9kaXNwbGF5cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19leHByKCd7KnsyfSwgMywgKls0XX0nKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoJ3syfScpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcignezIsfScpCiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcignezIsIDN9JykKQEAgLTMyNSw2ICszNDYsMTUgQEAKICAgICAgICAgc2VsZi5jaGVja19leHByKCd7YTpiLH0nKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoJ3thOmIsIGM6ZH0nKQogICAgICAgICBzZWxmLmNoZWNrX2V4cHIoJ3thOmIsIGM6ZCx9JykKKyAgICAgICAgc2VsZi5jaGVja19leHByKCd7Kip7fX0nKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoJ3sqKnt9LCAzOjQsICoqezU6NiwgNzo4fX0nKQorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfdW5wYWNraW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImYoKmEsICoqYikiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoJ2YoYSwgKmIsICpjLCAqZCknKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoJ2YoKiphLCAqKmIpJykKKyAgICAgICAgc2VsZi5jaGVja19leHByKCdmKDIsICphLCAqYiwgKipiLCAqKmMsICoqZCknKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImYoKmIsICooKSBvciAoKSBhbmQgKCksICoqe30gYW5kIHt9LCAqKigpIG9yIHt9KSIpCiAKICAgICBkZWYgdGVzdF9zZXRfY29tcHJlaGVuc2lvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZXhwcigne3ggZm9yIHggaW4gc2VxfScpCkBAIC01OTcsNiArNjI3LDIyIEBACiAgICAgICAgIGNvZGUyID0gcGFyc2VyLmNvbXBpbGVzdChzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUyKSwgLTMpCiAKKyAgICBkZWYgdGVzdF9jb21waWxlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzdCA9IHBhcnNlci5leHByKCdhICsgNScpCisgICAgICAgIGNvZGUgPSBwYXJzZXIuY29tcGlsZXN0KHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3ludGF4LXRyZWU+JykKKyAgICAgICAgY29kZSA9IHN0LmNvbXBpbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3ludGF4LXRyZWU+JykKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluICgnZmlsZS5weScsIGInZmlsZS5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInZmlsZS5weScpLCBtZW1vcnl2aWV3KGInZmlsZS5weScpKToKKyAgICAgICAgICAgIGNvZGUgPSBwYXJzZXIuY29tcGlsZXN0KHN0LCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgJ2ZpbGUucHknKQorICAgICAgICAgICAgY29kZSA9IHN0LmNvbXBpbGUoZmlsZW5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICdmaWxlLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwYXJzZXIuY29tcGlsZXN0LCBzdCwgbGlzdChiJ2ZpbGUucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdC5jb21waWxlLCBsaXN0KGInZmlsZS5weScpKQorCisKIGNsYXNzIFBhcnNlclN0YWNrTGltaXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIidHJ5IHRvIHB1c2ggdGhlIHBhcnNlciB0by9vdmVyIGl0cyBsaW1pdHMuCiAgICAgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxODgxIGZvciBhIGRpc2N1c3Npb24KQEAgLTczMCwxNiArNzc2LDUgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgcGFyc2VyLmV4cHIoImEiLCAiYiIpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgUm91bmR0cmlwTGVnYWxTeW50YXhUZXN0Q2FzZSwKLSAgICAgICAgSWxsZWdhbFN5bnRheFRlc3RDYXNlLAotICAgICAgICBDb21waWxlVGVzdENhc2UsCi0gICAgICAgIFBhcnNlclN0YWNrTGltaXRUZXN0Q2FzZSwKLSAgICAgICAgU1RPYmplY3RUZXN0Q2FzZSwKLSAgICAgICAgT3RoZXJQYXJzZXJDYXNlLAotICAgICkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BhdGhsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BhdGhsaWIucHkKaW5kZXggMGQ5OGYyNC4uZmE5NmQ5ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGF0aGxpYi5weQpAQCAtNCwxMyArNCwxMCBAQAogaW1wb3J0IGVycm5vCiBpbXBvcnQgcGF0aGxpYgogaW1wb3J0IHBpY2tsZQotaW1wb3J0IHNodXRpbAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0YXQKLWltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogVEVTVEZOID0gc3VwcG9ydC5URVNURk4KQEAgLTIwMyw3ICsyMDAsNyBAQAogCiAgICAgZGVmIF9jaGVja19zdHJfc3ViY2xhc3Moc2VsZiwgKmFyZ3MpOgogICAgICAgICAjIElzc3VlICMyMTEyNzogaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCBhIFB1cmVQYXRoIG9iamVjdAotICAgICAgICAjIGZyb20gYW4gc3RyIHN1YmNsYXNzIGluc3RhbmNlLCBhbmQgaXQgdGhlbiBnZXRzIGNvbnZlcnRlZCB0bworICAgICAgICAjIGZyb20gYSBzdHIgc3ViY2xhc3MgaW5zdGFuY2UsIGFuZCBpdCB0aGVuIGdldHMgY29udmVydGVkIHRvCiAgICAgICAgICMgYSBwdXJlIHN0ciBvYmplY3QuCiAgICAgICAgIGNsYXNzIFN0clN1YmNsYXNzKHN0cik6CiAgICAgICAgICAgICBwYXNzCkBAIC03NDcsNyArNzQ0LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL1NvbWUvU0hBUkUvYS9CJyksIFAoJy8vc29tRS9zaGFyZS9BL2InKSkKIAogICAgIGRlZiB0ZXN0X2FzX3VyaShzZWxmKToKLSAgICAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMKICAgICAgICAgUCA9IHNlbGYuY2xzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBQKCcvYS9iJykuYXNfdXJpKCkKQEAgLTExMzMsNyArMTEyOSw2IEBACiAgICAgICAgICMgVU5DIHBhdGhzIGFyZSBuZXZlciByZXNlcnZlZAogICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvL215L3NoYXJlL251bC9jb24vYXV4JykuaXNfcmVzZXJ2ZWQoKSkKIAotCiBjbGFzcyBQdXJlUGF0aFRlc3QoX0Jhc2VQdXJlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjbHMgPSBwYXRobGliLlB1cmVQYXRoCiAKQEAgLTExOTcsNiArMTE5MiwxNiBAQAogY2xhc3MgV2luZG93c1BhdGhBc1B1cmVUZXN0KFB1cmVXaW5kb3dzUGF0aFRlc3QpOgogICAgIGNscyA9IHBhdGhsaWIuV2luZG93c1BhdGgKIAorICAgIGRlZiB0ZXN0X293bmVyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIFAoJ2M6LycpLm93bmVyKCkKKworICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIFAoJ2M6LycpLmdyb3VwKCkKKwogCiBjbGFzcyBfQmFzZVBhdGhUZXN0KG9iamVjdCk6CiAgICAgIiIiVGVzdHMgZm9yIHRoZSBGUy1hY2Nlc3NpbmcgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBQYXRoIGNsYXNzZXMuIiIiCkBAIC0xMjc3LDExICsxMjgyLDU1IEBACiAgICAgICAgIHAgPSBzZWxmLmNscy5jd2QoKQogICAgICAgICBzZWxmLl90ZXN0X2N3ZChwKQogCisgICAgZGVmIF90ZXN0X2hvbWUoc2VsZiwgcCk6CisgICAgICAgIHEgPSBzZWxmLmNscyhvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgc3RyKHEpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksIHR5cGUocSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9ob21lKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMuaG9tZSgpCisgICAgICAgIHNlbGYuX3Rlc3RfaG9tZShwKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CisgICAgICAgIGZpbGVBX3BhdGggPSBvcy5wYXRoLmpvaW4oQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgZmlsZUJfcGF0aCA9IG9zLnBhdGguam9pbihCQVNFLCAnZGlyQicsICdmaWxlQicpCisgICAgICAgIHAgPSBzZWxmLmNscyhmaWxlQV9wYXRoKQorICAgICAgICBwcCA9IHNlbGYuY2xzKGZpbGVBX3BhdGgpCisgICAgICAgIHEgPSBzZWxmLmNscyhmaWxlQl9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5zYW1lZmlsZShmaWxlQV9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuc2FtZWZpbGUocHApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuc2FtZWZpbGUoZmlsZUJfcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5zYW1lZmlsZShxKSkKKyAgICAgICAgIyBUZXN0IHRoZSBub24tZXhpc3RlbnQgZmlsZSBjYXNlCisgICAgICAgIG5vbl9leGlzdGVudCA9IG9zLnBhdGguam9pbihCQVNFLCAnZm9vJykKKyAgICAgICAgciA9IHNlbGYuY2xzKG5vbl9leGlzdGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IsIHAuc2FtZWZpbGUsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yLCBwLnNhbWVmaWxlLCBub25fZXhpc3RlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yLCByLnNhbWVmaWxlLCBwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvciwgci5zYW1lZmlsZSwgbm9uX2V4aXN0ZW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvciwgci5zYW1lZmlsZSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IsIHIuc2FtZWZpbGUsIG5vbl9leGlzdGVudCkKKwogICAgIGRlZiB0ZXN0X2VtcHR5X3BhdGgoc2VsZik6CiAgICAgICAgICMgVGhlIGVtcHR5IHBhdGggcG9pbnRzIHRvICcuJwogICAgICAgICBwID0gc2VsZi5jbHMoJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCksIG9zLnN0YXQoJy4nKSkKIAorICAgIGRlZiB0ZXN0X2V4cGFuZHVzZXJfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ34nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhwYW5kdXNlcigpLCBQKG9zLnBhdGguZXhwYW5kdXNlcignficpKSkKKyAgICAgICAgcCA9IFAoJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leHBhbmR1c2VyKCksIHApCisgICAgICAgIHAgPSBQKCcvficpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leHBhbmR1c2VyKCksIHApCisgICAgICAgIHAgPSBQKCcuLi9+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4cGFuZHVzZXIoKSwgcCkKKyAgICAgICAgcCA9IFAoUCgnJykuYWJzb2x1dGUoKS5hbmNob3IpIC8gJ34nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leHBhbmR1c2VyKCksIHApCisKICAgICBkZWYgdGVzdF9leGlzdHMoc2VsZik6CiAgICAgICAgIFAgPSBzZWxmLmNscwogICAgICAgICBwID0gUChCQVNFKQpAQCAtMTMwOSw2ICsxMzU4LDIzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgaW8uUmF3SU9CYXNlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5zdHJpcCgpLCBiInRoaXMgaXMgZmlsZSBBIikKIAorICAgIGRlZiB0ZXN0X3JlYWRfd3JpdGVfYnl0ZXMoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICAocCAvICdmaWxlQScpLndyaXRlX2J5dGVzKGInYWJjZGVmZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHAgLyAnZmlsZUEnKS5yZWFkX2J5dGVzKCksIGInYWJjZGVmZycpCisgICAgICAgICMgY2hlY2sgdGhhdCB0cnlpbmcgdG8gd3JpdGUgc3RyIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgKHAgLyAnZmlsZUEnKS53cml0ZV9ieXRlcywgJ3NvbWVzdHInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChwIC8gJ2ZpbGVBJykucmVhZF9ieXRlcygpLCBiJ2FiY2RlZmcnKQorCisgICAgZGVmIHRlc3RfcmVhZF93cml0ZV90ZXh0KHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgKHAgLyAnZmlsZUEnKS53cml0ZV90ZXh0KCfDpGJjZGVmZycsIGVuY29kaW5nPSdsYXRpbi0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgocCAvICdmaWxlQScpLnJlYWRfdGV4dCgKKyAgICAgICAgICAgIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0naWdub3JlJyksICdiY2RlZmcnKQorICAgICAgICAjIGNoZWNrIHRoYXQgdHJ5aW5nIHRvIHdyaXRlIGJ5dGVzIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgKHAgLyAnZmlsZUEnKS53cml0ZV90ZXh0LCBiJ3NvbWVieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHAgLyAnZmlsZUEnKS5yZWFkX3RleHQoZW5jb2Rpbmc9J2xhdGluLTEnKSwgJ8OkYmNkZWZnJykKKwogICAgIGRlZiB0ZXN0X2l0ZXJkaXIoc2VsZik6CiAgICAgICAgIFAgPSBzZWxmLmNscwogICAgICAgICBwID0gUChCQVNFKQpAQCAtMTYzMiw2ICsxNjk4LDU5IEBACiAgICAgICAgICMgdGhlIHBhcmVudCdzIHBlcm1pc3Npb25zIGZvbGxvdyB0aGUgZGVmYXVsdCBwcm9jZXNzIHNldHRpbmdzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHAucGFyZW50LnN0YXQoKS5zdF9tb2RlKSwgbW9kZSkKIAorICAgIGRlZiB0ZXN0X21rZGlyX2V4aXN0X29rKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2RpckInKQorICAgICAgICBzdF9jdGltZV9maXJzdCA9IHAuc3RhdCgpLnN0X2N0aW1lCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19kaXIoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisgICAgICAgIHAubWtkaXIoZXhpc3Rfb2s9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCkuc3RfY3RpbWUsIHN0X2N0aW1lX2ZpcnN0KQorCisgICAgZGVmIHRlc3RfbWtkaXJfZXhpc3Rfb2tfd2l0aF9wYXJlbnQoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFLCAnZGlyQycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcikgYXMgY206CisgICAgICAgICAgICBwLm1rZGlyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVFWElTVCkKKyAgICAgICAgcCA9IHAgLyAnbmV3ZGlyQycKKyAgICAgICAgcC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIHN0X2N0aW1lX2ZpcnN0ID0gcC5zdGF0KCkuc3RfY3RpbWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIocGFyZW50cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUVYSVNUKQorICAgICAgICBwLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCkuc3RfY3RpbWUsIHN0X2N0aW1lX2ZpcnN0KQorCisgICAgZGVmIHRlc3RfbWtkaXJfd2l0aF9jaGlsZF9maWxlKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2RpckInLCAnZmlsZUInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgIyBBbiBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgaXMgYW4gZXhpc3RpbmcKKyAgICAgICAgIyByZWd1bGFyIGZpbGUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBleGlzdF9vayBpcyB0cnVlIG9yIG5vdC4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUVYSVNUKQorCisgICAgZGVmIHRlc3RfbWtkaXJfbm9fcGFyZW50c19maWxlKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgICMgQW4gZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHRoZSBsYXN0IHBhdGggY29tcG9uZW50IGlzIGFuIGV4aXN0aW5nCisgICAgICAgICMgcmVndWxhciBmaWxlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgZXhpc3Rfb2sgaXMgdHJ1ZSBvciBub3QuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUVYSVNUKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcikgYXMgY206CisgICAgICAgICAgICBwLm1rZGlyKGV4aXN0X29rPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisKICAgICBAd2l0aF9zeW1saW5rcwogICAgIGRlZiB0ZXN0X3N5bWxpbmtfdG8oc2VsZik6CiAgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQpAQCAtMTgzMiw2ICsxOTUxLDExIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwYXRobGliLldpbmRvd3NQYXRoKQogCisgICAgZGVmIHRlc3RfZ2xvYl9lbXB0eV9wYXR0ZXJuKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ1VuYWNjZXB0YWJsZSBwYXR0ZXJuJyk6CisgICAgICAgICAgICBsaXN0KHAuZ2xvYignJykpCisKIAogQG9ubHlfcG9zaXgKIGNsYXNzIFBvc2l4UGF0aFRlc3QoX0Jhc2VQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTg3NCw3ICsxOTk4LDYgQEAKICAgICBAd2l0aF9zeW1saW5rcwogICAgIGRlZiB0ZXN0X3Jlc29sdmVfbG9vcChzZWxmKToKICAgICAgICAgIyBMb29wIGRldGVjdGlvbiBmb3IgYnJva2VuIHN5bWxpbmtzIHVuZGVyIFBPU0lYCi0gICAgICAgIFAgPSBzZWxmLmNscwogICAgICAgICAjIExvb3BzIHdpdGggcmVsYXRpdmUgc3ltbGlua3MKICAgICAgICAgb3Muc3ltbGluaygnbGlua1gvaW5zaWRlJywgam9pbignbGlua1gnKSkKICAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWCcpCkBAIC0xOTA2LDYgKzIwMjksNDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXZlbiwgZXhwZWN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCoiKSksIHNldCgpKQogCisgICAgZGVmIHRlc3RfZXhwYW5kdXNlcihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgncHdkJykKKyAgICAgICAgaW1wb3J0IHB3ZAorICAgICAgICBwd2RlbnQgPSBwd2QuZ2V0cHd1aWQob3MuZ2V0dWlkKCkpCisgICAgICAgIHVzZXJuYW1lID0gcHdkZW50LnB3X25hbWUKKyAgICAgICAgdXNlcmhvbWUgPSBwd2RlbnQucHdfZGlyLnJzdHJpcCgnLycpIG9yICcvJworICAgICAgICAjIGZpbmQgYXJiaXRyYXJ5IGRpZmZlcmVudCB1c2VyIChpZiBleGlzdHMpCisgICAgICAgIGZvciBwd2RlbnQgaW4gcHdkLmdldHB3YWxsKCk6CisgICAgICAgICAgICBvdGhlcm5hbWUgPSBwd2RlbnQucHdfbmFtZQorICAgICAgICAgICAgb3RoZXJob21lID0gcHdkZW50LnB3X2Rpci5yc3RyaXAoJy8nKQorICAgICAgICAgICAgaWYgb3RoZXJuYW1lICE9IHVzZXJuYW1lIGFuZCBvdGhlcmhvbWU6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBwMSA9IFAoJ34vRG9jdW1lbnRzJykKKyAgICAgICAgcDIgPSBQKCd+JyArIHVzZXJuYW1lICsgJy9Eb2N1bWVudHMnKQorICAgICAgICBwMyA9IFAoJ34nICsgb3RoZXJuYW1lICsgJy9Eb2N1bWVudHMnKQorICAgICAgICBwNCA9IFAoJy4uL34nICsgdXNlcm5hbWUgKyAnL0RvY3VtZW50cycpCisgICAgICAgIHA1ID0gUCgnL34nICsgdXNlcm5hbWUgKyAnL0RvY3VtZW50cycpCisgICAgICAgIHA2ID0gUCgnJykKKyAgICAgICAgcDcgPSBQKCd+ZmFrZXVzZXIvRG9jdW1lbnRzJykKKworICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudi5wb3AoJ0hPTUUnLCBOb25lKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLmV4cGFuZHVzZXIoKSwgUCh1c2VyaG9tZSkgLyAnRG9jdW1lbnRzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDIuZXhwYW5kdXNlcigpLCBQKHVzZXJob21lKSAvICdEb2N1bWVudHMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMy5leHBhbmR1c2VyKCksIFAob3RoZXJob21lKSAvICdEb2N1bWVudHMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwNC5leHBhbmR1c2VyKCksIHA0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwNS5leHBhbmR1c2VyKCksIHA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwNi5leHBhbmR1c2VyKCksIHA2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBwNy5leHBhbmR1c2VyKQorCisgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9ICcvdG1wJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5leHBhbmR1c2VyKCksIFAoJy90bXAvRG9jdW1lbnRzJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLmV4cGFuZHVzZXIoKSwgUCh1c2VyaG9tZSkgLyAnRG9jdW1lbnRzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDMuZXhwYW5kdXNlcigpLCBQKG90aGVyaG9tZSkgLyAnRG9jdW1lbnRzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDQuZXhwYW5kdXNlcigpLCBwNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDUuZXhwYW5kdXNlcigpLCBwNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDYuZXhwYW5kdXNlcigpLCBwNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcDcuZXhwYW5kdXNlcikKKwogCiBAb25seV9udAogY2xhc3MgV2luZG93c1BhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE5MjEsNiArMjA4Niw2MSBAQAogICAgICAgICBwID0gUChCQVNFLCAiZGlyQyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAucmdsb2IoIkZJTEVkIikpLCB7IFAoQkFTRSwgImRpckMvZGlyRC9maWxlRCIpIH0pCiAKKyAgICBkZWYgdGVzdF9leHBhbmR1c2VyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnYucG9wKCdIT01FJywgTm9uZSkKKyAgICAgICAgICAgIGVudi5wb3AoJ1VTRVJQUk9GSUxFJywgTm9uZSkKKyAgICAgICAgICAgIGVudi5wb3AoJ0hPTUVQQVRIJywgTm9uZSkKKyAgICAgICAgICAgIGVudi5wb3AoJ0hPTUVEUklWRScsIE5vbmUpCisgICAgICAgICAgICBlbnZbJ1VTRVJOQU1FJ10gPSAnYWxpY2UnCisKKyAgICAgICAgICAgICMgdGVzdCB0aGF0IHRoZSBwYXRoIHJldHVybnMgdW5jaGFuZ2VkCisgICAgICAgICAgICBwMSA9IFAoJ34vTXkgRG9jdW1lbnRzJykKKyAgICAgICAgICAgIHAyID0gUCgnfmFsaWNlL015IERvY3VtZW50cycpCisgICAgICAgICAgICBwMyA9IFAoJ35ib2IvTXkgRG9jdW1lbnRzJykKKyAgICAgICAgICAgIHA0ID0gUCgnL34vTXkgRG9jdW1lbnRzJykKKyAgICAgICAgICAgIHA1ID0gUCgnZDp+L015IERvY3VtZW50cycpCisgICAgICAgICAgICBwNiA9IFAoJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHAxLmV4cGFuZHVzZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHAyLmV4cGFuZHVzZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHAzLmV4cGFuZHVzZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHA0LmV4cGFuZHVzZXIoKSwgcDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHA1LmV4cGFuZHVzZXIoKSwgcDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHA2LmV4cGFuZHVzZXIoKSwgcDYpCisKKyAgICAgICAgICAgIGRlZiBjaGVjaygpOgorICAgICAgICAgICAgICAgIGVudi5wb3AoJ1VTRVJOQU1FJywgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLmV4cGFuZHVzZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAoJ0M6L1VzZXJzL2FsaWNlL015IERvY3VtZW50cycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwMi5leHBhbmR1c2VyKQorICAgICAgICAgICAgICAgIGVudlsnVVNFUk5BTUUnXSA9ICdhbGljZScKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLmV4cGFuZHVzZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAoJ0M6L1VzZXJzL2FsaWNlL015IERvY3VtZW50cycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDMuZXhwYW5kdXNlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCgnQzovVXNlcnMvYm9iL015IERvY3VtZW50cycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDQuZXhwYW5kdXNlcigpLCBwNCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHA1LmV4cGFuZHVzZXIoKSwgcDUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwNi5leHBhbmR1c2VyKCksIHA2KQorCisgICAgICAgICAgICAjIHRlc3QgdGhlIGZpcnN0IGxvb2t1cCBrZXkgaW4gdGhlIGVudiB2YXJzCisgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9ICdDOlxcVXNlcnNcXGFsaWNlJworICAgICAgICAgICAgY2hlY2soKQorCisgICAgICAgICAgICAjIHRlc3QgdGhhdCBIT01FUEFUSCBpcyBhdmFpbGFibGUgaW5zdGVhZAorICAgICAgICAgICAgZW52LnBvcCgnSE9NRScsIE5vbmUpCisgICAgICAgICAgICBlbnZbJ0hPTUVQQVRIJ10gPSAnQzpcXFVzZXJzXFxhbGljZScKKyAgICAgICAgICAgIGNoZWNrKCkKKworICAgICAgICAgICAgZW52WydIT01FRFJJVkUnXSA9ICdDOlxcJworICAgICAgICAgICAgZW52WydIT01FUEFUSCddID0gJ1VzZXJzXFxhbGljZScKKyAgICAgICAgICAgIGNoZWNrKCkKKworICAgICAgICAgICAgZW52LnBvcCgnSE9NRURSSVZFJywgTm9uZSkKKyAgICAgICAgICAgIGVudi5wb3AoJ0hPTUVQQVRIJywgTm9uZSkKKyAgICAgICAgICAgIGVudlsnVVNFUlBST0ZJTEUnXSA9ICdDOlxcVXNlcnNcXGFsaWNlJworICAgICAgICAgICAgY2hlY2soKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BkYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CmluZGV4IDM1MDQ0YWQuLjQ1YmE1YTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CkBAIC04MjQsNyArODI0LDcgQEAKICAgICAiIiIKIAogZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3AoKToKLSAgICAiIiJUaGUgbmV4dCBjb21tYW5kIG9uIHJldHVybmluZyBmcm9tIGEgZ2VuZXJhdG9yIGNvbnRyb2xlZCBieSBhIGZvciBsb29wLgorICAgICIiIlRoZSBuZXh0IGNvbW1hbmQgb24gcmV0dXJuaW5nIGZyb20gYSBnZW5lcmF0b3IgY29udHJvbGxlZCBieSBhIGZvciBsb29wLgogCiAgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgogICAgIC4uLiAgICAgeWllbGQgMApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkgYi9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQppbmRleCA1MDI1NzkyLi40MWU1MDkxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weQpAQCAtMzE5LDIxICszMTksNSBAQAogICAgICAgICAgICAgZigpCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIGltcG9ydCBzeXMKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLSAgICB0ZXN0X2NsYXNzZXMgPSAoVGVzdFRyYW5mb3JtcywgVGVzdEJ1Z2xldHMpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKLQotICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgotICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgY291bnRzID0gW05vbmVdICogNQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6Ci0gICAgICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQppbmRleCBiODVhMjZhLi5hYjVmNDE4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkKQEAgLTYsNyArNiw2IEBACiBpbXBvcnQgaG1hYwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGhhc2hsaWIgaW1wb3J0IG1kNSwgc2hhMSwgc2hhMjI0LCBzaGEyNTYsIHNoYTM4NCwgc2hhNTEyCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogY2xhc3MgUGVwMjQ3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTYzLDggKzYyLDUgQEAKICAgICBkZWYgdGVzdF9obWFjKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX21vZHVsZShobWFjLCBrZXk9YidhYmMnKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUGVwMjQ3VGVzdCkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyOTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI5Mi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1MjU2Yy4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI5Mi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgotIyBBdXRob3I6IGJhcnJ5QHB5dGhvbi5vcmcgKEJhcnJ5IFdhcnNhdykKLSMgTGljZW5zZTogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9QeXRob25Tb2Z0Rm91bmRhdGlvbi5waHAKLQotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKLQotCi1jbGFzcyBCYWc6Ci0gICAgcGFzcwotCi1jbGFzcyBNYXBwaW5nOgotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKLSAgICAgICAgb2JqID0gc2VsZgotICAgICAgICBmb3IgcGFydCBpbiBuYW1lLnNwbGl0KCcuJyk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHBhcnQpCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IobmFtZSkKLSAgICAgICAgcmV0dXJuIG9iagotCi0KLWNsYXNzIFRlc3RUZW1wbGF0ZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfcmVndWxhcl90ZW1wbGF0ZXMoc2VsZik6Ci0gICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgJHdoYXQgd29ydGggJCQxMDAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJykpLAotICAgICAgICAgICAgICAgICAgICAgICAgICd0aW0gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIGhhbSB3b3J0aCAkMTAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdCh3aG89J3RpbScpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFRlbXBsYXRlLnN1YnN0aXR1dGUpCi0KLSAgICBkZWYgdGVzdF9yZWd1bGFyX3RlbXBsYXRlc193aXRoX2JyYWNlcyhzZWxmKToKLSAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICR7d2hhdH0gZm9yICR7bWVhbH0nKQotICAgICAgICBkID0gZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScsIG1lYWw9J2Rpbm5lcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGQpLCAndGltIGxpa2VzIGhhbSBmb3IgZGlubmVyJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuc3Vic3RpdHV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKQotCi0gICAgZGVmIHRlc3RfZXNjYXBlcyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgJCR3aGF0IHdvcnRoICQkMTAwJykKLSAgICAgICAgZXEocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCi0gICAgICAgICAgICd0aW0gbGlrZXMgdG8gZWF0IGEgYmFnIG9mICR3aGF0IHdvcnRoICQxMDAnKQotICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJCQnKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKSwgJ3RpbSBsaWtlcyAkJykKLQotICAgIGRlZiB0ZXN0X3BlcmNlbnRzKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgcyA9IFRlbXBsYXRlKCclKGZvbylzICRmb28gJHtmb299JykKLSAgICAgICAgZCA9IGRpY3QoZm9vPSdiYXonKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoZCksICclKGZvbylzIGJheiBiYXonKQotICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkKSwgJyUoZm9vKXMgYmF6IGJheicpCi0KLSAgICBkZWYgdGVzdF9zdHJpbmdpZmljYXRpb24oc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBzID0gVGVtcGxhdGUoJ3RpbSBoYXMgZWF0ZW4gJGNvdW50IGJhZ3Mgb2YgaGFtIHRvZGF5JykKLSAgICAgICAgZCA9IGRpY3QoY291bnQ9NykKLSAgICAgICAgZXEocy5zdWJzdGl0dXRlKGQpLCAndGltIGhhcyBlYXRlbiA3IGJhZ3Mgb2YgaGFtIHRvZGF5JykKLSAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZCksICd0aW0gaGFzIGVhdGVuIDcgYmFncyBvZiBoYW0gdG9kYXknKQotICAgICAgICBzID0gVGVtcGxhdGUoJ3RpbSBoYXMgZWF0ZW4gJHtjb3VudH0gYmFncyBvZiBoYW0gdG9kYXknKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoZCksICd0aW0gaGFzIGVhdGVuIDcgYmFncyBvZiBoYW0gdG9kYXknKQotCi0gICAgZGVmIHRlc3RfdHVwbGVhcmdzKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGF0ZSAke21lYWx9JykKLSAgICAgICAgZCA9IGRpY3Qod2hvPSgndGltJywgJ2ZyZWQnKSwgbWVhbD0oJ2hhbScsICdrdW5nIHBhbycpKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoZCksICIoJ3RpbScsICdmcmVkJykgYXRlICgnaGFtJywgJ2t1bmcgcGFvJykiKQotICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkKSwgIigndGltJywgJ2ZyZWQnKSBhdGUgKCdoYW0nLCAna3VuZyBwYW8nKSIpCi0KLSAgICBkZWYgdGVzdF9TYWZlVGVtcGxhdGUoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHt3aGF0fSBmb3IgJHttZWFsfScpCi0gICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nKSksICd0aW0gbGlrZXMgJHt3aGF0fSBmb3IgJHttZWFsfScpCi0gICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hhdD0naGFtJykpLCAnJHdobyBsaWtlcyBoYW0gZm9yICR7bWVhbH0nKQotICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdoYXQ9J2hhbScsIG1lYWw9J2Rpbm5lcicpKSwKLSAgICAgICAgICAgJyR3aG8gbGlrZXMgaGFtIGZvciBkaW5uZXInKQotICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJykpLAotICAgICAgICAgICAndGltIGxpa2VzIGhhbSBmb3IgJHttZWFsfScpCi0gICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nLCBtZWFsPSdkaW5uZXInKSksCi0gICAgICAgICAgICd0aW0gbGlrZXMgaGFtIGZvciBkaW5uZXInKQotCi0gICAgZGVmIHRlc3RfaW52YWxpZF9wbGFjZWhvbGRlcnMoc2VsZik6Ci0gICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCi0gICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkJykKLSAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdCh3aG89J3RpbScpKQotICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHt3aGF0KScpCi0gICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIGRpY3Qod2hvPSd0aW0nKSkKLSAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICQxMDAnKQotICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgcy5zdWJzdGl0dXRlLCBkaWN0KHdobz0ndGltJykpCi0KLSAgICBkZWYgdGVzdF9pZHBhdHRlcm5fb3ZlcnJpZGUoc2VsZik6Ci0gICAgICAgIGNsYXNzIFBhdGhQYXR0ZXJuKFRlbXBsYXRlKToKLSAgICAgICAgICAgIGlkcGF0dGVybiA9IHInW19hLXpdWy5fYS16MC05XSonCi0gICAgICAgIG0gPSBNYXBwaW5nKCkKLSAgICAgICAgbS5iYWcgPSBCYWcoKQotICAgICAgICBtLmJhZy5mb28gPSBCYWcoKQotICAgICAgICBtLmJhZy5mb28ud2hvID0gJ3RpbScKLSAgICAgICAgbS5iYWcud2hhdCA9ICdoYW0nCi0gICAgICAgIHMgPSBQYXRoUGF0dGVybignJGJhZy5mb28ud2hvIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiAkYmFnLndoYXQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3Vic3RpdHV0ZShtKSwgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtJykKLQotICAgIGRlZiB0ZXN0X3BhdHRlcm5fb3ZlcnJpZGUoc2VsZik6Ci0gICAgICAgIGNsYXNzIE15UGF0dGVybihUZW1wbGF0ZSk6Ci0gICAgICAgICAgICBwYXR0ZXJuID0gciIiIgotICAgICAgICAgICAgKD9QPGVzY2FwZWQ+QHsyfSkgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgQCg/UDxuYW1lZD5bX2Etel1bLl9hLXowLTldKikgICAgICAgfAotICAgICAgICAgICAgQHsoP1A8YnJhY2VkPltfYS16XVsuX2EtejAtOV0qKX0gICAgfAotICAgICAgICAgICAgKD9QPGludmFsaWQ+QCkKLSAgICAgICAgICAgICIiIgotICAgICAgICBtID0gTWFwcGluZygpCi0gICAgICAgIG0uYmFnID0gQmFnKCkKLSAgICAgICAgbS5iYWcuZm9vID0gQmFnKCkKLSAgICAgICAgbS5iYWcuZm9vLndobyA9ICd0aW0nCi0gICAgICAgIG0uYmFnLndoYXQgPSAnaGFtJwotICAgICAgICBzID0gTXlQYXR0ZXJuKCdAYmFnLmZvby53aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIEBiYWcud2hhdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKG0pLCAndGltIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiBoYW0nKQotCi0gICAgICAgIGNsYXNzIEJhZFBhdHRlcm4oVGVtcGxhdGUpOgotICAgICAgICAgICAgcGF0dGVybiA9IHIiIiIKLSAgICAgICAgICAgICg/UDxiYWRuYW1lPi4qKSAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICg/UDxlc2NhcGVkPkB7Mn0pICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgIEAoP1A8bmFtZWQ+W19hLXpdWy5fYS16MC05XSopICAgICAgIHwKLSAgICAgICAgICAgIEB7KD9QPGJyYWNlZD5bX2Etel1bLl9hLXowLTldKil9ICAgIHwKLSAgICAgICAgICAgICg/UDxpbnZhbGlkPkApICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICIiIgotICAgICAgICBzID0gQmFkUGF0dGVybignQGJhZy5mb28ud2hvIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiBAYmFnLndoYXQnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIHt9KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnNhZmVfc3Vic3RpdHV0ZSwge30pCi0KLSAgICBkZWYgdGVzdF9icmFjZWRfb3ZlcnJpZGUoc2VsZik6Ci0gICAgICAgIGNsYXNzIE15VGVtcGxhdGUoVGVtcGxhdGUpOgotICAgICAgICAgICAgcGF0dGVybiA9IHIiIiIKLSAgICAgICAgICAgIFwkKD86Ci0gICAgICAgICAgICAgICg/UDxlc2NhcGVkPiQpICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAoP1A8bmFtZWQ+W19hLXpdW19hLXowLTldKikgICAgICAgIHwKLSAgICAgICAgICAgICAgQEAoP1A8YnJhY2VkPltfYS16XVtfYS16MC05XSopQEAgICB8Ci0gICAgICAgICAgICAgICg/UDxpbnZhbGlkPikgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICApCi0gICAgICAgICAgICIiIgotCi0gICAgICAgIHRtcGwgPSAnUHlDb24gaW4gJEBAbG9jYXRpb25AQCcKLSAgICAgICAgdCA9IE15VGVtcGxhdGUodG1wbCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHQuc3Vic3RpdHV0ZSwge30pCi0gICAgICAgIHZhbCA9IHQuc3Vic3RpdHV0ZSh7J2xvY2F0aW9uJzogJ0NsZXZlbGFuZCd9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgJ1B5Q29uIGluIENsZXZlbGFuZCcpCi0KLSAgICBkZWYgdGVzdF9icmFjZWRfb3ZlcnJpZGVfc2FmZShzZWxmKToKLSAgICAgICAgY2xhc3MgTXlUZW1wbGF0ZShUZW1wbGF0ZSk6Ci0gICAgICAgICAgICBwYXR0ZXJuID0gciIiIgotICAgICAgICAgICAgXCQoPzoKLSAgICAgICAgICAgICAgKD9QPGVzY2FwZWQ+JCkgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICg/UDxuYW1lZD5bX2Etel1bX2EtejAtOV0qKSAgICAgICAgfAotICAgICAgICAgICAgICBAQCg/UDxicmFjZWQ+W19hLXpdW19hLXowLTldKilAQCAgIHwKLSAgICAgICAgICAgICAgKD9QPGludmFsaWQ+KSAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICkKLSAgICAgICAgICAgIiIiCi0KLSAgICAgICAgdG1wbCA9ICdQeUNvbiBpbiAkQEBsb2NhdGlvbkBAJwotICAgICAgICB0ID0gTXlUZW1wbGF0ZSh0bXBsKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2FmZV9zdWJzdGl0dXRlKCksIHRtcGwpCi0gICAgICAgIHZhbCA9IHQuc2FmZV9zdWJzdGl0dXRlKHsnbG9jYXRpb24nOiAnQ2xldmVsYW5kJ30pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAnUHlDb24gaW4gQ2xldmVsYW5kJykKLQotICAgIGRlZiB0ZXN0X2ludmFsaWRfd2l0aF9ub19saW5lcyhzZWxmKToKLSAgICAgICAgIyBUaGUgZXJyb3IgZm9ybWF0dGluZyBmb3IgaW52YWxpZCB0ZW1wbGF0ZXMKLSAgICAgICAgIyBoYXMgYSBzcGVjaWFsIGNhc2UgZm9yIG5vIGRhdGEgdGhhdCB0aGUgZGVmYXVsdAotICAgICAgICAjIHBhdHRlcm4gY2FuJ3QgdHJpZ2dlciAoYWx3YXlzIGhhcyBhdCBsZWFzdCAnJCcpCi0gICAgICAgICMgU28gd2UgY3JhZnQgYSBwYXR0ZXJuIHRoYXQgaXMgYWx3YXlzIGludmFsaWQKLSAgICAgICAgIyB3aXRoIG5vIGxlYWRpbmcgZGF0YS4KLSAgICAgICAgY2xhc3MgTXlUZW1wbGF0ZShUZW1wbGF0ZSk6Ci0gICAgICAgICAgICBwYXR0ZXJuID0gciIiIgotICAgICAgICAgICAgICAoP1A8aW52YWxpZD4pIHwKLSAgICAgICAgICAgICAgdW5yZWFjaGFibGUoCi0gICAgICAgICAgICAgICAgKD9QPG5hbWVkPikgICB8Ci0gICAgICAgICAgICAgICAgKD9QPGJyYWNlZD4pICB8Ci0gICAgICAgICAgICAgICAgKD9QPGVzY2FwZWQ+KQotICAgICAgICAgICAgICApCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgcyA9IE15VGVtcGxhdGUoJycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgZXJyOgotICAgICAgICAgICAgcy5zdWJzdGl0dXRlKHt9KQotICAgICAgICBzZWxmLmFzc2VydEluKCdsaW5lIDEsIGNvbCAxJywgc3RyKGVyci5leGNlcHRpb24pKQotCi0gICAgZGVmIHRlc3RfdW5pY29kZV92YWx1ZXMoc2VsZik6Ci0gICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkd2hhdCcpCi0gICAgICAgIGQgPSBkaWN0KHdobz0ndFx4ZmZtJywgd2hhdD0nZlx4ZmVcZmVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN1YnN0aXR1dGUoZCksICd0XHhmZm0gbGlrZXMgZlx4ZmVceDBjZWQnKQotCi0gICAgZGVmIHRlc3Rfa2V5d29yZF9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHdoYXQnKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSwgJ3RpbSBsaWtlcyBoYW0nKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdCh3aG89J3RpbScpLCB3aGF0PSdoYW0nKSwgJ3RpbSBsaWtlcyBoYW0nKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdCh3aG89J2ZyZWQnLCB3aGF0PSdrdW5nIHBhbycpLAotICAgICAgICAgICAgICAgICAgICAgICAgd2hvPSd0aW0nLCB3aGF0PSdoYW0nKSwKLSAgICAgICAgICAgJ3RpbSBsaWtlcyBoYW0nKQotICAgICAgICBzID0gVGVtcGxhdGUoJ3RoZSBtYXBwaW5nIGlzICRtYXBwaW5nJykKLSAgICAgICAgZXEocy5zdWJzdGl0dXRlKGRpY3QoZm9vPSdub25lJyksIG1hcHBpbmc9J2Jvem8nKSwKLSAgICAgICAgICAgJ3RoZSBtYXBwaW5nIGlzIGJvem8nKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdChtYXBwaW5nPSdvbmUnKSwgbWFwcGluZz0ndHdvJyksCi0gICAgICAgICAgICd0aGUgbWFwcGluZyBpcyB0d28nKQotCi0gICAgICAgIHMgPSBUZW1wbGF0ZSgndGhlIHNlbGYgaXMgJHNlbGYnKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoc2VsZj0nYm96bycpLCAndGhlIHNlbGYgaXMgYm96bycpCi0KLSAgICBkZWYgdGVzdF9rZXl3b3JkX2FyZ3VtZW50c19zYWZlKHNlbGYpOgotICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKLSAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICR3aGF0JykKLSAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSwgJ3RpbSBsaWtlcyBoYW0nKQotICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJyksIHdoYXQ9J2hhbScpLCAndGltIGxpa2VzIGhhbScpCi0gICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hvPSdmcmVkJywgd2hhdD0na3VuZyBwYW8nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdobz0ndGltJywgd2hhdD0naGFtJyksCi0gICAgICAgICAgICd0aW0gbGlrZXMgaGFtJykKLSAgICAgICAgcyA9IFRlbXBsYXRlKCd0aGUgbWFwcGluZyBpcyAkbWFwcGluZycpCi0gICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3QoZm9vPSdub25lJyksIG1hcHBpbmc9J2Jvem8nKSwKLSAgICAgICAgICAgJ3RoZSBtYXBwaW5nIGlzIGJvem8nKQotICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KG1hcHBpbmc9J29uZScpLCBtYXBwaW5nPSd0d28nKSwKLSAgICAgICAgICAgJ3RoZSBtYXBwaW5nIGlzIHR3bycpCi0gICAgICAgIGQgPSBkaWN0KG1hcHBpbmc9J29uZScpCi0gICAgICAgIHJhaXNlcyhUeXBlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZCwge30pCi0gICAgICAgIHJhaXNlcyhUeXBlRXJyb3IsIHMuc2FmZV9zdWJzdGl0dXRlLCBkLCB7fSkKLQotICAgICAgICBzID0gVGVtcGxhdGUoJ3RoZSBzZWxmIGlzICRzZWxmJykKLSAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoc2VsZj0nYm96bycpLCAndGhlIHNlbGYgaXMgYm96bycpCi0KLSAgICBkZWYgdGVzdF9kZWxpbWl0ZXJfb3ZlcnJpZGUoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcwotICAgICAgICBjbGFzcyBBbXBlcnNhbmRUZW1wbGF0ZShUZW1wbGF0ZSk6Ci0gICAgICAgICAgICBkZWxpbWl0ZXIgPSAnJicKLSAgICAgICAgcyA9IEFtcGVyc2FuZFRlbXBsYXRlKCd0aGlzICZnaWZ0IGlzIGZvciAme3dob30gJiYnKQotICAgICAgICBlcShzLnN1YnN0aXR1dGUoZ2lmdD0nYnVkJywgd2hvPSd5b3UnKSwgJ3RoaXMgYnVkIGlzIGZvciB5b3UgJicpCi0gICAgICAgIHJhaXNlcyhLZXlFcnJvciwgcy5zdWJzdGl0dXRlKQotICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShnaWZ0PSdidWQnLCB3aG89J3lvdScpLCAndGhpcyBidWQgaXMgZm9yIHlvdSAmJykKLSAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoKSwgJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJykKLSAgICAgICAgcyA9IEFtcGVyc2FuZFRlbXBsYXRlKCd0aGlzICZnaWZ0IGlzIGZvciAme3dob30gJicpCi0gICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIGRpY3QoZ2lmdD0nYnVkJywgd2hvPSd5b3UnKSkKLSAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoKSwgJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJykKLQotICAgICAgICBjbGFzcyBQaWVEZWxpbXMoVGVtcGxhdGUpOgotICAgICAgICAgICAgZGVsaW1pdGVyID0gJ0AnCi0gICAgICAgIHMgPSBQaWVEZWxpbXMoJ0B3aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIEB7d2hhdH0gd29ydGggJDEwMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtIHdvcnRoICQxMDAnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLSAgICB0ZXN0X2NsYXNzZXMgPSBbVGVzdFRlbXBsYXRlLF0KLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzEyMC5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMzEyMC5weQppbmRleCA1YjYzOTk4Li45N2RjZWQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDMxMjAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzMTIwLnB5CkBAIC0xLDcgKzEsNiBAQAogIyBUaGlzIGZpbGUgaXMgbWFya2VkIGFzIGJpbmFyeSBpbiB0aGUgQ1ZTLCB0byBwcmV2ZW50IE1hY0NWUyBmcm9tIHJlY29kaW5nIGl0LgogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBjbGFzcyBQRVAzMTIwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTQwLDggKzM5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnw4cnLCBuc1sndSddKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQRVAzMTIwVGVzdCwgQnVpbHRpbkNvbXBpbGVUZXN0cykKLQotaWYgX19uYW1lX189PSJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDMxMzEucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDMxMzEucHkKaW5kZXggMmU2YjkwYS4uMDY3OTg0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzMTMxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMzEzMS5weQpAQCAtMSw2ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGNsYXNzIFBFUDMxMzFUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjgsOCArMjcsNSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFBFUDMxMzFUZXN0KQotCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzE1MS5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMzE1MS5weQppbmRleCA3ZDRhNWQ4Li43YjBkNDY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzMTUxLnB5CkBAIC03LDcgKzcsNiBAQAogaW1wb3J0IGVycm5vCiBmcm9tIGVycm5vIGltcG9ydCBFRVhJU1QKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGNsYXNzIFN1Yk9TRXJyb3IoT1NFcnJvcik6CiAgICAgcGFzcwpAQCAtMTY1LDcgKzE2NCw3IEBACiAgICAgICAgIGUgPSBTdWJPU0Vycm9yKEVFWElTVCwgIkJhZCBmaWxlIGRlc2NyaXB0b3IiKQogICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1Yk9TRXJyb3IpCiAKLSAgICBkZWYgdGVzdF9pbml0X292ZXJyaWRlbihzZWxmKToKKyAgICBkZWYgdGVzdF9pbml0X292ZXJyaWRkZW4oc2VsZik6CiAgICAgICAgIGUgPSBTdWJPU0Vycm9yV2l0aEluaXQoInNvbWUgbWVzc2FnZSIsICJiYXoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYmFyLCAiYmF6IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsICgic29tZSBtZXNzYWdlIiwpKQpAQCAtMTc1LDcgKzE3NCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5iYXIsICJiYXoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCJzb21lIG1lc3NhZ2UiLCkpCiAKLSAgICBkZWYgdGVzdF9uZXdfb3ZlcnJpZGVuKHNlbGYpOgorICAgIGRlZiB0ZXN0X25ld19vdmVycmlkZGVuKHNlbGYpOgogICAgICAgICBlID0gU3ViT1NFcnJvcldpdGhOZXcoInNvbWUgbWVzc2FnZSIsICJiYXoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYmF6LCAiYmF6IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsICgic29tZSBtZXNzYWdlIiwpKQpAQCAtMTg1LDcgKzE4NCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5iYXosICJiYXoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCJzb21lIG1lc3NhZ2UiLCkpCiAKLSAgICBkZWYgdGVzdF9pbml0X25ld19vdmVycmlkZW4oc2VsZik6CisgICAgZGVmIHRlc3RfaW5pdF9uZXdfb3ZlcnJpZGRlbihzZWxmKToKICAgICAgICAgZSA9IFN1Yk9TRXJyb3JDb21iaW5lZEluaXRGaXJzdCgic29tZSBtZXNzYWdlIiwgImJheiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5iYXIsICJiYXoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYmF6LCAiYmF6IikKQEAgLTIwMiw4ICsyMDEsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJycpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzgwLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKaW5kZXggNjkxOTRkZi4uMjNmZmJlZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKQEAgLTEwMTMsMTEgKzEwMTMsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsICgxLCAyLCAzLCA0KSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0gICAgdGVzdF9jbGFzc2VzID0gW1Rlc3RQRVAzODBPcGVyYXRpb25dCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDQ3OS5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwNDc5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjM1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDQ3OS5weQpAQCAtMCwwICsxLDM0IEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGdlbmVyYXRvcl9zdG9wCisKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RQRVA0NzkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0b3BpdGVyYXRpb25fd3JhcHBpbmcoc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICB5aWVsZCBmKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0b3IgcmFpc2VkIFN0b3BJdGVyYXRpb24iKToKKyAgICAgICAgICAgIG5leHQoZygpKQorCisgICAgZGVmIHRlc3Rfc3RvcGl0ZXJhdGlvbl93cmFwcGluZ19jb250ZXh0KHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgeWllbGQgZigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmV4dChnKCkpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGV4Yy5fX2NhdXNlX18pLCBTdG9wSXRlcmF0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGV4Yy5fX2NvbnRleHRfXyksIFN0b3BJdGVyYXRpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhjLl9fc3VwcHJlc3NfY29udGV4dF9fKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdfX2NhdXNlX18sIF9fY29udGV4dF9fLCBvciBfX3N1cHByZXNzX2NvbnRleHRfXyAnCisgICAgICAgICAgICAgICAgICAgICAgJ3dlcmUgbm90IHByb3Blcmx5IHNldCcpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5IGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKaW5kZXggZjZkOWNjMC4uZDQ2N2Q1MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKQEAgLTE0LDYgKzE0LDcgQEAKIGZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlVGVzdHMKIGZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlTW9kdWxlVGVzdHMKIGZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGVyc2lzdGVudFBpY2tsZXJUZXN0cworZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RJZGVudGl0eVBlcnNpc3RlbnRQaWNrbGVyVGVzdHMKIGZyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzCiBmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBBYnN0cmFjdERpc3BhdGNoVGFibGVUZXN0cwogZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQmlnbWVtUGlja2xlVGVzdHMKQEAgLTgyLDEwICs4Myw3IEBACiAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMoYnVmLCAqKmt3ZHMpCiAKIAotY2xhc3MgUHlQZXJzUGlja2xlclRlc3RzKEFic3RyYWN0UGVyc2lzdGVudFBpY2tsZXJUZXN0cyk6Ci0KLSAgICBwaWNrbGVyID0gcGlja2xlLl9QaWNrbGVyCi0gICAgdW5waWNrbGVyID0gcGlja2xlLl9VbnBpY2tsZXIKK2NsYXNzIFBlcnNpc3RlbnRQaWNrbGVyVW5waWNrbGVyTWl4aW4ob2JqZWN0KToKIAogICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPU5vbmUpOgogICAgICAgICBjbGFzcyBQZXJzUGlja2xlcihzZWxmLnBpY2tsZXIpOgpAQCAtOTQsOCArOTIsNyBAQAogICAgICAgICBmID0gaW8uQnl0ZXNJTygpCiAgICAgICAgIHAgPSBQZXJzUGlja2xlcihmLCBwcm90bykKICAgICAgICAgcC5kdW1wKGFyZykKLSAgICAgICAgZi5zZWVrKDApCi0gICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICByZXR1cm4gZi5nZXR2YWx1ZSgpCiAKICAgICBkZWYgbG9hZHMoc2VsZiwgYnVmLCAqKmt3ZHMpOgogICAgICAgICBjbGFzcyBQZXJzVW5waWNrbGVyKHNlbGYudW5waWNrbGVyKToKQEAgLTEwNiw2ICsxMDMsMjAgQEAKICAgICAgICAgcmV0dXJuIHUubG9hZCgpCiAKIAorY2xhc3MgUHlQZXJzUGlja2xlclRlc3RzKEFic3RyYWN0UGVyc2lzdGVudFBpY2tsZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQZXJzaXN0ZW50UGlja2xlclVucGlja2xlck1peGluKToKKworICAgIHBpY2tsZXIgPSBwaWNrbGUuX1BpY2tsZXIKKyAgICB1bnBpY2tsZXIgPSBwaWNrbGUuX1VucGlja2xlcgorCisKK2NsYXNzIFB5SWRQZXJzUGlja2xlclRlc3RzKEFic3RyYWN0SWRlbnRpdHlQZXJzaXN0ZW50UGlja2xlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyc2lzdGVudFBpY2tsZXJVbnBpY2tsZXJNaXhpbik6CisKKyAgICBwaWNrbGVyID0gcGlja2xlLl9QaWNrbGVyCisgICAgdW5waWNrbGVyID0gcGlja2xlLl9VbnBpY2tsZXIKKworCiBjbGFzcyBQeVBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyhBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyk6CiAKICAgICBwaWNrbGVyX2NsYXNzID0gcGlja2xlLl9QaWNrbGVyCkBAIC0xNDQsNiArMTU1LDEwIEBACiAgICAgICAgIHBpY2tsZXIgPSBfcGlja2xlLlBpY2tsZXIKICAgICAgICAgdW5waWNrbGVyID0gX3BpY2tsZS5VbnBpY2tsZXIKIAorICAgIGNsYXNzIENJZFBlcnNQaWNrbGVyVGVzdHMoUHlJZFBlcnNQaWNrbGVyVGVzdHMpOgorICAgICAgICBwaWNrbGVyID0gX3BpY2tsZS5QaWNrbGVyCisgICAgICAgIHVucGlja2xlciA9IF9waWNrbGUuVW5waWNrbGVyCisKICAgICBjbGFzcyBDRHVtcFBpY2tsZV9Mb2FkUGlja2xlKFB5UGlja2xlclRlc3RzKToKICAgICAgICAgcGlja2xlciA9IF9waWNrbGUuUGlja2xlcgogICAgICAgICB1bnBpY2tsZXIgPSBwaWNrbGUuX1VucGlja2xlcgpAQCAtMjQ0LDYgKzI1OSw4IEBACiBBTFRfSU1QT1JUX01BUFBJTkcgPSB7CiAgICAgKCdfZWxlbWVudHRyZWUnLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJyksCiAgICAgKCdjUGlja2xlJywgJ3BpY2tsZScpLAorICAgICgnU3RyaW5nSU8nLCAnaW8nKSwKKyAgICAoJ2NTdHJpbmdJTycsICdpbycpLAogfQogCiBBTFRfTkFNRV9NQVBQSU5HID0gewpAQCAtMzgyLDcgKzM5OSwxMCBAQAogCiAgICAgICAgIGZvciBuYW1lLCBleGMgaW4gZ2V0X2V4Y2VwdGlvbnMoYnVpbHRpbnMpOgogICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFtZSk6Ci0gICAgICAgICAgICAgICAgaWYgZXhjIGluIChCbG9ja2luZ0lPRXJyb3IsIFJlc291cmNlV2FybmluZyk6CisgICAgICAgICAgICAgICAgaWYgZXhjIGluIChCbG9ja2luZ0lPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9wQXN5bmNJdGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN1cnNpb25FcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgZXhjIGlzIG5vdCBPU0Vycm9yIGFuZCBpc3N1YmNsYXNzKGV4YywgT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV2ZXJzZV9tYXBwaW5nKCdidWlsdGlucycsIG5hbWUpLApAQCAtNDA0LDExICs0MjQsMTMgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbUGlja2xlVGVzdHMsIFB5VW5waWNrbGVyVGVzdHMsIFB5UGlja2xlclRlc3RzLCBQeVBlcnNQaWNrbGVyVGVzdHMsCisgICAgdGVzdHMgPSBbUGlja2xlVGVzdHMsIFB5VW5waWNrbGVyVGVzdHMsIFB5UGlja2xlclRlc3RzLAorICAgICAgICAgICAgIFB5UGVyc1BpY2tsZXJUZXN0cywgUHlJZFBlcnNQaWNrbGVyVGVzdHMsCiAgICAgICAgICAgICAgUHlEaXNwYXRjaFRhYmxlVGVzdHMsIFB5Q2hhaW5EaXNwYXRjaFRhYmxlVGVzdHMsCiAgICAgICAgICAgICAgQ29tcGF0UGlja2xlVGVzdHNdCiAgICAgaWYgaGFzX2NfaW1wbGVtZW50YXRpb246Ci0gICAgICAgIHRlc3RzLmV4dGVuZChbQ1VucGlja2xlclRlc3RzLCBDUGlja2xlclRlc3RzLCBDUGVyc1BpY2tsZXJUZXN0cywKKyAgICAgICAgdGVzdHMuZXh0ZW5kKFtDVW5waWNrbGVyVGVzdHMsIENQaWNrbGVyVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgQ1BlcnNQaWNrbGVyVGVzdHMsIENJZFBlcnNQaWNrbGVyVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgQ0R1bXBQaWNrbGVfTG9hZFBpY2tsZSwgRHVtcFBpY2tsZV9DTG9hZFBpY2tsZSwKICAgICAgICAgICAgICAgICAgICAgICBQeVBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICBDUGlja2xlclVucGlja2xlck9iamVjdFRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2cucHkgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQppbmRleCA5ODgzMDAwLi41MzJlOGZlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BrZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZy5weQpAQCAtMjkxLDkgKzI5MSw1IEBACiAgICAgICAgIGltcG9ydCB0OAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ4Ll9fZG9jX18sICJkb2MgZm9yIHQ4IikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKaW5kZXggMzcwYjJhYS4uNWQ5YTQ1MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKQEAgLTcsNyArNyw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBpbXBvcnRsaWIudXRpbCBpbXBvcnQgY2FjaGVfZnJvbV9zb3VyY2UKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNyZWF0ZV9lbXB0eV9maWxlCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY3JlYXRlX2VtcHR5X2ZpbGUKIAogY2xhc3MgVGVzdEltcG9ydCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTc2LDkgKzc2LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgdmFyKSwgMSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RJbXBvcnQpCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CmluZGV4IGUwYzg2MzVkZS4uOWQyMDM1NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQpAQCAtNyw3ICs3LDYgQEAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHR5cGVzCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgemlwZmlsZQogCkBAIC0xMDEsOSArMTAwLDg5IEBACiAgICAgICAgIGZvciB0IGluIHBrZ3V0aWwud2Fsa19wYWNrYWdlcyhwYXRoPVtzZWxmLmRpcm5hbWVdKToKICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5leHBlY3RlZCBwYWNrYWdlIGZvdW5kIikKIAorICAgIGRlZiB0ZXN0X3dhbGtwYWNrYWdlc19maWxlc3lzKHNlbGYpOgorICAgICAgICBwa2cxID0gJ3Rlc3Rfd2Fsa3BhY2thZ2VzX2ZpbGVzeXMnCisgICAgICAgIHBrZzFfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGlybmFtZSwgcGtnMSkKKyAgICAgICAgb3MubWtkaXIocGtnMV9kaXIpCisgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihwa2cxX2RpciwgJ19faW5pdF9fLnB5JyksICJ3YiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4ocGtnMV9kaXIsICdzdWInKSkKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBrZzFfZGlyLCAnc3ViJywgJ19faW5pdF9fLnB5JyksICJ3YiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4ocGtnMV9kaXIsICdzdWInLCAnbW9kLnB5JyksICJ3YiIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgTm93LCB0byBqdWljZSBpdCB1cCwgbGV0J3MgYWRkIHRoZSBvcHBvc2l0ZSBwYWNrYWdlcywgdG9vLgorICAgICAgICBwa2cyID0gJ3N1YicKKyAgICAgICAgcGtnMl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJuYW1lLCBwa2cyKQorICAgICAgICBvcy5ta2Rpcihwa2cyX2RpcikKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBrZzJfZGlyLCAnX19pbml0X18ucHknKSwgIndiIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihwa2cyX2RpciwgJ3Rlc3Rfd2Fsa3BhY2thZ2VzX2ZpbGVzeXMnKSkKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBrZzJfZGlyLCAndGVzdF93YWxrcGFja2FnZXNfZmlsZXN5cycsICdfX2luaXRfXy5weScpLCAid2IiKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHBrZzJfZGlyLCAndGVzdF93YWxrcGFja2FnZXNfZmlsZXN5cycsICdtb2QucHknKSwgIndiIikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAnc3ViJywKKyAgICAgICAgICAgICdzdWIudGVzdF93YWxrcGFja2FnZXNfZmlsZXN5cycsCisgICAgICAgICAgICAnc3ViLnRlc3Rfd2Fsa3BhY2thZ2VzX2ZpbGVzeXMubW9kJywKKyAgICAgICAgICAgICd0ZXN0X3dhbGtwYWNrYWdlc19maWxlc3lzJywKKyAgICAgICAgICAgICd0ZXN0X3dhbGtwYWNrYWdlc19maWxlc3lzLnN1YicsCisgICAgICAgICAgICAndGVzdF93YWxrcGFja2FnZXNfZmlsZXN5cy5zdWIubW9kJywKKyAgICAgICAgXQorICAgICAgICBhY3R1YWw9IFtlWzFdIGZvciBlIGluIHBrZ3V0aWwud2Fsa19wYWNrYWdlcyhbc2VsZi5kaXJuYW1lXSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworICAgICAgICBmb3IgcGtnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCdtb2QnKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3BrZ10KKworICAgIGRlZiB0ZXN0X3dhbGtwYWNrYWdlc196aXBmaWxlKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyB0aGUgc2FtZSBhcyB0ZXN0X3dhbGtwYWNrYWdlc19maWxlc3lzLCBvbmx5IHdpdGggYSB6aXAgZmlsZS4iIiIKKworICAgICAgICB6aXAgPSAndGVzdF93YWxrcGFja2FnZXNfemlwZmlsZS56aXAnCisgICAgICAgIHBrZzEgPSAndGVzdF93YWxrcGFja2FnZXNfemlwZmlsZScKKyAgICAgICAgcGtnMiA9ICdzdWInCisKKyAgICAgICAgemlwX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJuYW1lLCB6aXApCisgICAgICAgIHogPSB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGUsICd3JykKKyAgICAgICAgei53cml0ZXN0cihwa2cyICsgJy9fX2luaXRfXy5weScsICIiKQorICAgICAgICB6LndyaXRlc3RyKHBrZzIgKyAnLycgKyBwa2cxICsgJy9fX2luaXRfXy5weScsICIiKQorICAgICAgICB6LndyaXRlc3RyKHBrZzIgKyAnLycgKyBwa2cxICsgJy9tb2QucHknLCAiIikKKyAgICAgICAgei53cml0ZXN0cihwa2cxICsgJy9fX2luaXRfXy5weScsICIiKQorICAgICAgICB6LndyaXRlc3RyKHBrZzEgKyAnLycgKyBwa2cyICsgJy9fX2luaXRfXy5weScsICIiKQorICAgICAgICB6LndyaXRlc3RyKHBrZzEgKyAnLycgKyBwa2cyICsgJy9tb2QucHknLCAiIikKKyAgICAgICAgei5jbG9zZSgpCisKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHppcF9maWxlKQorICAgICAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgICAgICdzdWInLAorICAgICAgICAgICAgJ3N1Yi50ZXN0X3dhbGtwYWNrYWdlc196aXBmaWxlJywKKyAgICAgICAgICAgICdzdWIudGVzdF93YWxrcGFja2FnZXNfemlwZmlsZS5tb2QnLAorICAgICAgICAgICAgJ3Rlc3Rfd2Fsa3BhY2thZ2VzX3ppcGZpbGUnLAorICAgICAgICAgICAgJ3Rlc3Rfd2Fsa3BhY2thZ2VzX3ppcGZpbGUuc3ViJywKKyAgICAgICAgICAgICd0ZXN0X3dhbGtwYWNrYWdlc196aXBmaWxlLnN1Yi5tb2QnLAorICAgICAgICBdCisgICAgICAgIGFjdHVhbD0gW2VbMV0gZm9yIGUgaW4gcGtndXRpbC53YWxrX3BhY2thZ2VzKFt6aXBfZmlsZV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgIGRlbCBzeXMucGF0aFswXQorCisgICAgICAgIGZvciBwa2cgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICBpZiBwa2cuZW5kc3dpdGgoJ21vZCcpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbcGtnXQorCisKKwogY2xhc3MgUGtndXRpbFBFUDMwMlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGNsYXNzIE15VGVzdExvYWRlcihvYmplY3QpOgorICAgICAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZCk6CiAgICAgICAgICAgICAjIENvdW50IGhvdyBtYW55IHRpbWVzIHRoZSBtb2R1bGUgaXMgcmVsb2FkZWQKICAgICAgICAgICAgIG1vZC5fX2RpY3RfX1snbG9hZHMnXSA9IG1vZC5fX2RpY3RfXy5nZXQoJ2xvYWRzJywgMCkgKyAxCkBAIC0zMjEsMTEgKzQwMCwxMSBAQAogCiAgICAgZGVmIHRlc3RfaW1wb3J0ZXJfZGVwcmVjYXRlZChzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmNoZWNrX2RlcHJlY2F0ZWQoKToKLSAgICAgICAgICAgIHggPSBwa2d1dGlsLkltcEltcG9ydGVyKCIiKQorICAgICAgICAgICAgcGtndXRpbC5JbXBJbXBvcnRlcigiIikKIAogICAgIGRlZiB0ZXN0X2xvYWRlcl9kZXByZWNhdGVkKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuY2hlY2tfZGVwcmVjYXRlZCgpOgotICAgICAgICAgICAgeCA9IHBrZ3V0aWwuSW1wTG9hZGVyKCIiLCAiIiwgIiIsICIiKQorICAgICAgICAgICAgcGtndXRpbC5JbXBMb2FkZXIoIiIsICIiLCAiIiwgIiIpCiAKICAgICBkZWYgdGVzdF9nZXRfbG9hZGVyX2F2b2lkc19lbXVsYXRpb24oc2VsZik6CiAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wbGF0Zm9ybS5weSBiL0xpYi90ZXN0L3Rlc3RfcGxhdGZvcm0ucHkKaW5kZXggYjNkZTQzYi4uZWQxODc3MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wbGF0Zm9ybS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BsYXRmb3JtLnB5CkBAIC03Niw2ICs3NiwyMiBAQAogICAgICAgICAgICAgICgnSXJvblB5dGhvbicsICcxLjAuNjA4MTYnLCAnJywgJycsICcnLCAnJywgJy5ORVQgMi4wLjUwNzI3LjQyJykpLAogICAgICAgICAgICAgKCdJcm9uUHl0aG9uIDEuMCAoMS4wLjYxMDA1LjE5NzcpIG9uIC5ORVQgMi4wLjUwNzI3LjQyJywKICAgICAgICAgICAgICAoJ0lyb25QeXRob24nLCAnMS4wLjAnLCAnJywgJycsICcnLCAnJywgJy5ORVQgMi4wLjUwNzI3LjQyJykpLAorICAgICAgICAgICAgKCcyLjQuMyAodHJ1bmNhdGlvbiwgZGF0ZSwgdCkgXG5bR0NDXScsCisgICAgICAgICAgICAgKCdDUHl0aG9uJywgJzIuNC4zJywgJycsICcnLCAndHJ1bmNhdGlvbicsICdkYXRlIHQnLCAnR0NDJykpLAorICAgICAgICAgICAgKCcyLjQuMyAodHJ1bmNhdGlvbiwgZGF0ZSwgKSBcbltHQ0NdJywKKyAgICAgICAgICAgICAoJ0NQeXRob24nLCAnMi40LjMnLCAnJywgJycsICd0cnVuY2F0aW9uJywgJ2RhdGUnLCAnR0NDJykpLAorICAgICAgICAgICAgKCcyLjQuMyAodHJ1bmNhdGlvbiwgZGF0ZSwpIFxuW0dDQ10nLAorICAgICAgICAgICAgICgnQ1B5dGhvbicsICcyLjQuMycsICcnLCAnJywgJ3RydW5jYXRpb24nLCAnZGF0ZScsICdHQ0MnKSksCisgICAgICAgICAgICAoJzIuNC4zICh0cnVuY2F0aW9uLCBkYXRlKSBcbltHQ0NdJywKKyAgICAgICAgICAgICAoJ0NQeXRob24nLCAnMi40LjMnLCAnJywgJycsICd0cnVuY2F0aW9uJywgJ2RhdGUnLCAnR0NDJykpLAorICAgICAgICAgICAgKCcyLjQuMyAodHJ1bmNhdGlvbiwgZCkgXG5bR0NDXScsCisgICAgICAgICAgICAgKCdDUHl0aG9uJywgJzIuNC4zJywgJycsICcnLCAndHJ1bmNhdGlvbicsICdkJywgJ0dDQycpKSwKKyAgICAgICAgICAgICgnMi40LjMgKHRydW5jYXRpb24sICkgXG5bR0NDXScsCisgICAgICAgICAgICAgKCdDUHl0aG9uJywgJzIuNC4zJywgJycsICcnLCAndHJ1bmNhdGlvbicsICcnLCAnR0NDJykpLAorICAgICAgICAgICAgKCcyLjQuMyAodHJ1bmNhdGlvbiwpIFxuW0dDQ10nLAorICAgICAgICAgICAgICgnQ1B5dGhvbicsICcyLjQuMycsICcnLCAnJywgJ3RydW5jYXRpb24nLCAnJywgJ0dDQycpKSwKKyAgICAgICAgICAgICgnMi40LjMgKHRydW5jYXRpb24pIFxuW0dDQ10nLAorICAgICAgICAgICAgICgnQ1B5dGhvbicsICcyLjQuMycsICcnLCAnJywgJ3RydW5jYXRpb24nLCAnJywgJ0dDQycpKSwKICAgICAgICAgICAgICk6CiAgICAgICAgICAgICAjIGJyYW5jaCBhbmQgcmV2aXNpb24gYXJlIG5vdCAicGFyc2VkIiwgYnV0IGZldGNoZWQKICAgICAgICAgICAgICMgZnJvbSBzeXMuX21lcmN1cmlhbC4gIElnbm9yZSB0aGVtCkBAIC0yMzYsNyArMjUyLDE0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cywgMCkKIAogICAgIGRlZiB0ZXN0X2Rpc3Qoc2VsZik6Ci0gICAgICAgIHJlcyA9IHBsYXRmb3JtLmRpc3QoKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygKKyAgICAgICAgICAgICAgICAnaWdub3JlJywKKyAgICAgICAgICAgICAgICAnZGlzdFwoXCkgYW5kIGxpbnV4X2Rpc3RyaWJ1dGlvblwoXCkgJworICAgICAgICAgICAgICAgICdmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQgLionLAorICAgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICApCisgICAgICAgICAgICByZXMgPSBwbGF0Zm9ybS5kaXN0KCkKIAogICAgIGRlZiB0ZXN0X2xpYmNfdmVyKHNlbGYpOgogICAgICAgICBpbXBvcnQgb3MKQEAgLTMwNSwxNiArMzI4LDM1IEBACiAgICAgICAgICAgICAgICAgZi53cml0ZSgnRmVkb3JhIHJlbGVhc2UgMTkgKFNjaHJceGY2ZGluZ2VyXHUyMDE5cyBDYXQpXG4nKQogCiAgICAgICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3BsYXRmb3JtLl9VTklYQ09ORkRJUicsIHRlbXBkaXIpOgotICAgICAgICAgICAgICAgIGRpc3RuYW1lLCB2ZXJzaW9uLCBkaXN0aWQgPSBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24oKQorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoCisgICAgICAgICAgICAgICAgICAgICAgICAnaWdub3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdkaXN0XChcKSBhbmQgbGludXhfZGlzdHJpYnV0aW9uXChcKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAnZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIC4qJywKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgZGlzdG5hbWUsIHZlcnNpb24sIGRpc3RpZCA9IHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdG5hbWUsICdGZWRvcmEnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdG5hbWUsICdGZWRvcmEnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJzaW9uLCAnMTknKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0aWQsICdTY2hyXHhmNmRpbmdlclx1MjAxOXMgQ2F0JykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBQbGF0Zm9ybVRlc3QKLSAgICApCisKK2NsYXNzIERlcHJlY2F0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kaXN0X2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykgYXMgY206CisgICAgICAgICAgICBwbGF0Zm9ybS5kaXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20ud2FybmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3QoKSBhbmQgbGludXhfZGlzdHJpYnV0aW9uKCkgZnVuY3Rpb25zIGFyZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuNScpCisKKyAgICBkZWYgdGVzdF9saW51eF9kaXN0cmlidXRpb25fZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSBhcyBjbToKKyAgICAgICAgICAgIHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLndhcm5pbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkaXN0KCkgYW5kIGxpbnV4X2Rpc3RyaWJ1dGlvbigpIGZ1bmN0aW9ucyBhcmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdkZXByZWNhdGVkIGluIFB5dGhvbiAzLjUnKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQppbmRleCBmZWY5ZjM5Li4xNjExNGY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKQEAgLTQyOCw2ICs0MjgsMTUgQEAKICAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDEzJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhkYXRhKSwgeydhJzogJ2InfSkKIAorICAgIGRlZiB0ZXN0X2xhcmdlX3RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjY3MDk6IDMyLWJpdCB0aW1lc3RhbXAgb3V0IG9mIHJhbmdlCisgICAgICAgIGZvciB0cyBpbiAtMioqMzEtMSwgMioqMzE6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh0cz10cyk6CisgICAgICAgICAgICAgICAgZCA9IChkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDApICsKKyAgICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPXRzKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMoZCwgZm10PXBsaXN0bGliLkZNVF9CSU5BUlkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhkYXRhKSwgZCkKKwogCiBjbGFzcyBUZXN0UGxpc3RsaWJEZXByZWNhdGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9pb19kZXByZWNhdGVkKHNlbGYpOgpAQCAtNTA2LDE1ICs1MTUsMTUgQEAKIAogICAgICAgICBjdXIgPSBwbGlzdGxpYi5sb2FkcyhidWYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBvdXRfZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIGluX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBpbl9kYXRhKQogCiAgICAgICAgIGN1ciA9IHBsaXN0bGliLmxvYWRzKGJ1ZiwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIG91dF9kYXRhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgaW5fZGF0YSkKIAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKICAgICAgICAgICAgIGN1ciA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhidWYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIG91dF9kYXRhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgaW5fZGF0YSkKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3Blbi5weQppbmRleCAxMTZiM2RkLi5kYTAxYTg3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9wZW4ucHkKQEAgLTYxLDggKzYxLDUgQEAKICAgICAgICAgd2l0aCBvcy5wb3BlbihjbWQ9ImV4aXQgMCIsIG1vZGU9InciLCBidWZmZXJpbmc9LTEpOgogICAgICAgICAgICAgcGFzcwogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUG9wZW5UZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5CmluZGV4IDhhM2M5ZjQuLmJjZWViOTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5CkBAIC00NCw2ICs0NCw3IEBACiBjbGFzcyBEdW1teVBPUDNIYW5kbGVyKGFzeW5jaGF0LmFzeW5jX2NoYXQpOgogCiAgICAgQ0FQQVMgPSB7J1VJREwnOiBbXSwgJ0lNUExFTUVOVEFUSU9OJzogWydweXRob24tdGVzdGxpYi1wb3Atc2VydmVyJ119CisgICAgZW5hYmxlX1VURjggPSBGYWxzZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCkBAIC0xNDIsNiArMTQzLDExIEBACiAgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcgJy5qb2luKF9sbikpCiAgICAgICAgIHNlbGYucHVzaCgnLicpCiAKKyAgICBkZWYgY21kX3V0Zjgoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgSSBrbm93IFJGQzY4NTYnCisgICAgICAgICAgICAgICAgICBpZiBzZWxmLmVuYWJsZV9VVEY4CisgICAgICAgICAgICAgICAgICBlbHNlICctRVJSIFdoYXQgaXMgVVRGOD8hJykKKwogICAgIGlmIFNVUFBPUlRTX1NTTDoKIAogICAgICAgICBkZWYgY21kX3N0bHMoc2VsZiwgYXJnKToKQEAgLTMwOSw2ICszMTUsMTYgQEAKICAgICAgICAgc2VsZi5jbGllbnQudWlkbCgpCiAgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoJ2ZvbycpCiAKKyAgICBkZWYgdGVzdF91dGY4X3JhaXNlc19pZl91bnN1cHBvcnRlZChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlci5lbmFibGVfVVRGOCA9IEZhbHNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQudXRmOCkKKworICAgIGRlZiB0ZXN0X3V0Zjgoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLmhhbmRsZXIuZW5hYmxlX1VURjggPSBUcnVlCisgICAgICAgIGV4cGVjdGVkID0gYicrT0sgSSBrbm93IFJGQzY4NTYnCisgICAgICAgIHJlc3VsdCA9IHNlbGYuY2xpZW50LnV0ZjgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKICAgICBkZWYgdGVzdF9jYXBhKHNlbGYpOgogICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnSU1QTEVNRU5UQVRJT04nIGluIGNhcGEua2V5cygpKQpAQCAtMzQ1LDIzICszNjEsMTggQEAKIAogCiBpZiBTVVBQT1JUU19TU0w6CisgICAgZnJvbSB0ZXN0LnRlc3RfZnRwbGliIGltcG9ydCBTU0xDb25uZWN0aW9uCiAKLSAgICBjbGFzcyBEdW1teVBPUDNfU1NMSGFuZGxlcihEdW1teVBPUDNIYW5kbGVyKToKKyAgICBjbGFzcyBEdW1teVBPUDNfU1NMSGFuZGxlcihTU0xDb25uZWN0aW9uLCBEdW1teVBPUDNIYW5kbGVyKToKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CiAgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCi0gICAgICAgICAgICBzc2xfc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29ja2V0LCBjZXJ0ZmlsZT1DRVJURklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKLSAgICAgICAgICAgIHNlbGYuZGVsX2NoYW5uZWwoKQotICAgICAgICAgICAgc2VsZi5zZXRfc29ja2V0KHNzbF9zb2NrZXQpCi0gICAgICAgICAgICAjIE11c3QgdHJ5IGhhbmRzaGFrZSBiZWZvcmUgY2FsbGluZyBwdXNoKCkKLSAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKLSAgICAgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBzZWxmLnNlY3VyZV9jb25uZWN0aW9uKCkKICAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LiA8dGltZXN0YW1wPicpCisgICAgICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IEZhbHNlCiAKIAogQHJlcXVpcmVzX3NzbApAQCAtNDUyLDcgKzQ2Myw3IEBACiAgICAgICAgIGRlbCBzZWxmLnRocmVhZCAgIyBDbGVhciBvdXQgYW55IGRhbmdsaW5nIFRocmVhZCBvYmplY3RzLgogCiAgICAgZGVmIHNlcnZlcihzZWxmLCBldnQsIHNlcnYpOgotICAgICAgICBzZXJ2Lmxpc3Rlbig1KQorICAgICAgICBzZXJ2Lmxpc3RlbigpCiAgICAgICAgIGV2dC5zZXQoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2Vydi5hY2NlcHQoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKaW5kZXggZDc2Nzk4OS4uMmE1OWMzOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CkBAIC05LDcgKzksNiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBvcwotaW1wb3J0IGZjbnRsCiBpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBwd2QKIGltcG9ydCBzaHV0aWwKQEAgLTM1NSw3ICszNTQsNyBAQAogICAgIGRlZiB0ZXN0X29zY2xvZXhlYyhzZWxmKToKICAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1JET05MWXxvcy5PX0NMT0VYRUMpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShmZCkpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnT19FWExPQ0snKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBuZWVkcyBwb3NpeC5PX0VYTE9DSycpCkBAIC02NDMsOCArNjQyLDggQEAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUodykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MuZ2V0X2Jsb2NraW5nKHIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9ibG9ja2luZyh3KSkKICAgICAgICAgIyB0cnkgcmVhZGluZyBmcm9tIGFuIGVtcHR5IHBpcGU6IHRoaXMgc2hvdWxkIGZhaWwsIG5vdCBibG9jawogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZWFkLCByLCAxKQogICAgICAgICAjIHRyeSBhIHdyaXRlIGJpZyBlbm91Z2ggdG8gZmlsbC11cCB0aGUgcGlwZTogdGhpcyBzaG91bGQgZWl0aGVyCkBAIC0xMTg0LDE2ICsxMTgzLDE2IEBACiAgICAgICAgIHN1cHBvcnQudW5saW5rKGZuKQogICAgICAgICBmZCA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4oZm5fd2l0aF9OVUwsIG9zLk9fV1JPTkxZIHwgb3MuT19DUkVBVCkgIyByYWlzZXMKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGZuKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5ta2RpciwgZm5fd2l0aF9OVUwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9zLm1rZGlyLCBmbl93aXRoX05VTCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmbikpCiAgICAgICAgIG9wZW4oZm4sICd3YicpLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5zdGF0LCBmbl93aXRoX05VTCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3Muc3RhdCwgZm5fd2l0aF9OVUwpCiAKICAgICBkZWYgdGVzdF9wYXRoX3dpdGhfbnVsbF9ieXRlKHNlbGYpOgogICAgICAgICBmbiA9IG9zLmZzZW5jb2RlKHN1cHBvcnQuVEVTVEZOKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQppbmRleCAxZDQ1OTZlLi5hY2YxMTAyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQpAQCAtNTcsMTggKzU3LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguam9pbihiIi9mb28vIiwgYiJiYXIvIiwgYiJiYXovIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvZm9vL2Jhci9iYXovIikKIAotICAgIGRlZiB0ZXN0X2pvaW5fZXJyb3JzKHNlbGYpOgotICAgICAgICAjIENoZWNrIHBvc2l4cGF0aC5qb2luIHJhaXNlcyBmcmllbmRseSBUeXBlRXJyb3JzLgotICAgICAgICBlcnJtc2cgPSAiQ2FuJ3QgbWl4IHN0cmluZ3MgYW5kIGJ5dGVzIGluIHBhdGggY29tcG9uZW50cyIKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgZXJybXNnKToKLSAgICAgICAgICAgIHBvc2l4cGF0aC5qb2luKGInYnl0ZXMnLCAnc3RyJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgZXJybXNnKToKLSAgICAgICAgICAgIHBvc2l4cGF0aC5qb2luKCdzdHInLCBiJ2J5dGVzJykKLSAgICAgICAgIyByZWdyZXNzaW9uLCBzZWUgIzE1Mzc3Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHBvc2l4cGF0aC5qb2luKE5vbmUsICdzdHInKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzBdLCBlcnJtc2cpCi0KICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi9mb28vYmFyIiksICgiL2ZvbyIsICJiYXIiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi8iKSwgKCIvIiwgIiIpKQpAQCAtMjI4LDYgKzIxNiwxMyBAQAogICAgIGRlZiB0ZXN0X2V4cGFuZHVzZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoImZvbyIpLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdXNlcihiImZvbyIpLCBiImZvbyIpCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZm9yIGhvbWUgaW4gJy8nLCAnJywgJy8vJywgJy8vLyc6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaG9tZT1ob21lKToKKyAgICAgICAgICAgICAgICAgICAgZW52WydIT01FJ10gPSBob21lCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi8iKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+LyIpLCAiLyIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4vZm9vIiksICIvZm9vIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IHB3ZAogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0yNTEsMTQgKzI0NiwxMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKGIifmZvby8iKSwgYnl0ZXMpCiAKICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgotICAgICAgICAgICAgICAgIGVudlsnSE9NRSddID0gJy8nCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdXNlcigifiIpLCAiLyIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdXNlcigifi9mb28iKSwgIi9mb28iKQogICAgICAgICAgICAgICAgICMgZXhwYW5kdXNlciBzaG91bGQgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBwYXNzd29yZCBkYXRhYmFzZQogICAgICAgICAgICAgICAgIGRlbCBlbnZbJ0hPTUUnXQogICAgICAgICAgICAgICAgIGhvbWUgPSBwd2QuZ2V0cHd1aWQob3MuZ2V0dWlkKCkpLnB3X2RpcgogICAgICAgICAgICAgICAgICMgJEhPTUUgY2FuIGVuZCB3aXRoIGEgdHJhaWxpbmcgLywgc28gc3RyaXAgaXQgKHNlZSAjMTc4MDkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdXNlcigifiIpLCBob21lLnJzdHJpcCgiLyIpKQorICAgICAgICAgICAgICAgIGhvbWUgPSBob21lLnJzdHJpcCgiLyIpIG9yICcvJworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4iKSwgaG9tZSkKIAogICAgIGRlZiB0ZXN0X25vcm1wYXRoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiIiksICIuIikKQEAgLTUyMyw2ICs1MTYsNjAgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLmdldGN3ZGIgPSByZWFsX2dldGN3ZGIKIAorICAgIGRlZiB0ZXN0X2NvbW1vbnBhdGgoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayhwYXRocywgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguY29tbW9ucGF0aChwYXRocyksIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguY29tbW9ucGF0aChbb3MuZnNlbmNvZGUocCkgZm9yIHAgaW4gcGF0aHNdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZnNlbmNvZGUoZXhwZWN0ZWQpKQorICAgICAgICBkZWYgY2hlY2tfZXJyb3IoZXhjLCBwYXRocyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIHBvc2l4cGF0aC5jb21tb25wYXRoLCBwYXRocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4YywgcG9zaXhwYXRoLmNvbW1vbnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3MuZnNlbmNvZGUocCkgZm9yIHAgaW4gcGF0aHNdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvc2l4cGF0aC5jb21tb25wYXRoLCBbXSkKKyAgICAgICAgY2hlY2tfZXJyb3IoVmFsdWVFcnJvciwgWycvdXNyJywgJ3VzciddKQorICAgICAgICBjaGVja19lcnJvcihWYWx1ZUVycm9yLCBbJ3VzcicsICcvdXNyJ10pCisKKyAgICAgICAgY2hlY2soWycvdXNyL2xvY2FsJ10sICcvdXNyL2xvY2FsJykKKyAgICAgICAgY2hlY2soWycvdXNyL2xvY2FsJywgJy91c3IvbG9jYWwnXSwgJy91c3IvbG9jYWwnKQorICAgICAgICBjaGVjayhbJy91c3IvbG9jYWwvJywgJy91c3IvbG9jYWwnXSwgJy91c3IvbG9jYWwnKQorICAgICAgICBjaGVjayhbJy91c3IvbG9jYWwvJywgJy91c3IvbG9jYWwvJ10sICcvdXNyL2xvY2FsJykKKyAgICAgICAgY2hlY2soWycvdXNyLy9sb2NhbCcsICcvL3Vzci9sb2NhbCddLCAnL3Vzci9sb2NhbCcpCisgICAgICAgIGNoZWNrKFsnL3Vzci8uL2xvY2FsJywgJy8uL3Vzci9sb2NhbCddLCAnL3Vzci9sb2NhbCcpCisgICAgICAgIGNoZWNrKFsnLycsICcvZGV2J10sICcvJykKKyAgICAgICAgY2hlY2soWycvdXNyJywgJy9kZXYnXSwgJy8nKQorICAgICAgICBjaGVjayhbJy91c3IvbGliLycsICcvdXNyL2xpYi9weXRob24zJ10sICcvdXNyL2xpYicpCisgICAgICAgIGNoZWNrKFsnL3Vzci9saWIvJywgJy91c3IvbGliNjQvJ10sICcvdXNyJykKKworICAgICAgICBjaGVjayhbJy91c3IvbGliJywgJy91c3IvbGliNjQnXSwgJy91c3InKQorICAgICAgICBjaGVjayhbJy91c3IvbGliLycsICcvdXNyL2xpYjY0J10sICcvdXNyJykKKworICAgICAgICBjaGVjayhbJ3NwYW0nXSwgJ3NwYW0nKQorICAgICAgICBjaGVjayhbJ3NwYW0nLCAnc3BhbSddLCAnc3BhbScpCisgICAgICAgIGNoZWNrKFsnc3BhbScsICdhbG90J10sICcnKQorICAgICAgICBjaGVjayhbJ2FuZC9qYW0nLCAnYW5kL3NwYW0nXSwgJ2FuZCcpCisgICAgICAgIGNoZWNrKFsnYW5kLy9qYW0nLCAnYW5kL3NwYW0vLyddLCAnYW5kJykKKyAgICAgICAgY2hlY2soWydhbmQvLi9qYW0nLCAnLi9hbmQvc3BhbSddLCAnYW5kJykKKyAgICAgICAgY2hlY2soWydhbmQvamFtJywgJ2FuZC9zcGFtJywgJ2Fsb3QnXSwgJycpCisgICAgICAgIGNoZWNrKFsnYW5kL2phbScsICdhbmQvc3BhbScsICdhbmQnXSwgJ2FuZCcpCisKKyAgICAgICAgY2hlY2soWycnXSwgJycpCisgICAgICAgIGNoZWNrKFsnJywgJ3NwYW0vYWxvdCddLCAnJykKKyAgICAgICAgY2hlY2tfZXJyb3IoVmFsdWVFcnJvciwgWycnLCAnL3NwYW0vYWxvdCddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmNvbW1vbnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJy91c3IvbGliLycsICcvdXNyL2xpYi9weXRob24zJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmNvbW1vbnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJy91c3IvbGliLycsICd1c3IvbGliL3B5dGhvbjMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguY29tbW9ucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2IndXNyL2xpYi8nLCAnL3Vzci9saWIvcHl0aG9uMyddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5jb21tb25wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliLycsIGInL3Vzci9saWIvcHl0aG9uMyddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5jb21tb25wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliLycsIGIndXNyL2xpYi9weXRob24zJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmNvbW1vbnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsndXNyL2xpYi8nLCBiJy91c3IvbGliL3B5dGhvbjMnXSkKKwogCiBjbGFzcyBQb3NpeENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aG1vZHVsZSA9IHBvc2l4cGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3cucHkgYi9MaWIvdGVzdC90ZXN0X3Bvdy5weQppbmRleCAyMGIxMDY2Li42ZmVhYzQwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Bvdy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvdy5weQpAQCAtMTIyLDggKzEyMiw1IEBACiAgICAgICAgICAgICBlcShwb3coYSwgLWZpdmV0byksIGV4cGVjdGVkKQogICAgICAgICBlcShleHBlY3RlZCwgMS4wKSAgICMgZWxzZSB3ZSBkaWRuJ3QgcHVzaCBmaXZldG8gdG8gZXZlbm5lc3MKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoUG93VGVzdCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkgYi9MaWIvdGVzdC90ZXN0X3BwcmludC5weQppbmRleCAxODBkZGIwLi43ZWJjMjk4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BwcmludC5weQpAQCAtMSwxMiArMSwxNCBAQAogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIAotaW1wb3J0IHBwcmludAotaW1wb3J0IHRlc3Quc3VwcG9ydAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdGVzdC50ZXN0X3NldAotaW1wb3J0IHJhbmRvbQogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KIGltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCB0ZXN0LnRlc3Rfc2V0CitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAogCiAjIGxpc3QsIHR1cGxlIGFuZCBkaWN0IHN1YmNsYXNzZXMgdGhhdCBkbyBvciBkb24ndCBvdmVyd3JpdGUgX19yZXByX18KIGNsYXNzIGxpc3QyKGxpc3QpOgpAQCAtNDgsNiArNTAsMjUgQEAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzdHIoaWQoc2VsZikpCiAKKyMgQ2xhc3MgT3JkZXJhYmxlIGlzIG9yZGVyYWJsZSB3aXRoIGFueSB0eXBlCitjbGFzcyBPcmRlcmFibGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhc2gpOgorICAgICAgICBzZWxmLl9oYXNoID0gaGFzaAorICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYgIT0gb3RoZXIKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYgPT0gb3RoZXIKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgbm90IG90aGVyCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5faGFzaAorCiBjbGFzcyBRdWVyeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTU1LDYgKzc2LDE4IEBACiAgICAgICAgIHNlbGYuYiA9IGxpc3QocmFuZ2UoMjAwKSkKICAgICAgICAgc2VsZi5hWy0xMl0gPSBzZWxmLmIKIAorICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHBwID0gcHByaW50LlByZXR0eVByaW50ZXIoKQorICAgICAgICBwcCA9IHBwcmludC5QcmV0dHlQcmludGVyKGluZGVudD00LCB3aWR0aD00MCwgZGVwdGg9NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW09aW8uU3RyaW5nSU8oKSwgY29tcGFjdD1UcnVlKQorICAgICAgICBwcCA9IHBwcmludC5QcmV0dHlQcmludGVyKDQsIDQwLCA1LCBpby5TdHJpbmdJTygpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwcCA9IHBwcmludC5QcmV0dHlQcmludGVyKDQsIDQwLCA1LCBpby5TdHJpbmdJTygpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwcHJpbnQuUHJldHR5UHJpbnRlciwgaW5kZW50PS0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwcHJpbnQuUHJldHR5UHJpbnRlciwgZGVwdGg9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcHByaW50LlByZXR0eVByaW50ZXIsIGRlcHRoPS0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwcHJpbnQuUHJldHR5UHJpbnRlciwgd2lkdGg9MCkKKwogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSAuaXNyZWN1cnNpdmUoKSBhbmQgLmlzcmVhZGFibGUoKSB3L28gcmVjdXJzaW9uCiAgICAgICAgIHBwID0gcHByaW50LlByZXR0eVByaW50ZXIoKQpAQCAtMTk1LDEwICsyMjgsNTIgQEAKICAgICAgICAgbyA9IFtvMSwgbzJdCiAgICAgICAgIGV4cGVjdGVkID0gIiIiXAogWyAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSwKKyAgICB7J2ZpcnN0JzogMSwgJ3NlY29uZCc6IDIsICd0aGlyZCc6IDN9XSIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KG8sIGluZGVudD00LCB3aWR0aD00MiksIGV4cGVjdGVkKQorICAgICAgICBleHBlY3RlZCA9ICIiIlwKK1sgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sCiAgICAgeyAgICdmaXJzdCc6IDEsCiAgICAgICAgICdzZWNvbmQnOiAyLAogICAgICAgICAndGhpcmQnOiAzfV0iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCBpbmRlbnQ9NCwgd2lkdGg9NDIpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCBpbmRlbnQ9NCwgd2lkdGg9NDEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3dpZHRoKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICIiIlwKK1tbW1tbWzEsIDIsIDNdLAorICAgICAnMSAyJ11dXV0sCisgezE6IFsxLCAyLCAzXSwKKyAgMjogWzEyLCAzNF19LAorICdhYmMgZGVmIGdoaScsCisgKCdhYiBjZCBlZicsKSwKKyBzZXQyKHsxLCAyM30pLAorIFtbW1tbMSwgMiwgM10sCisgICAgICcxIDInXV1dXV0iIiIKKyAgICAgICAgbyA9IGV2YWwoZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobywgd2lkdGg9MTUpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCB3aWR0aD0xNiksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KG8sIHdpZHRoPTI1KSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobywgd2lkdGg9MTQpLCAiIiJcCitbW1tbW1sxLAorICAgICAgMiwKKyAgICAgIDNdLAorICAgICAnMSAnCisgICAgICcyJ11dXV0sCisgezE6IFsxLAorICAgICAgMiwKKyAgICAgIDNdLAorICAyOiBbMTIsCisgICAgICAzNF19LAorICdhYmMgZGVmICcKKyAnZ2hpJywKKyAoJ2FiIGNkICcKKyAgJ2VmJywpLAorIHNldDIoezEsCisgICAgICAgMjN9KSwKKyBbW1tbWzEsCisgICAgICAyLAorICAgICAgM10sCisgICAgICcxICcKKyAgICAgJzInXV1dXV0iIiIpCiAKICAgICBkZWYgdGVzdF9zb3J0ZWRfZGljdChzZWxmKToKICAgICAgICAgIyBTdGFydGluZyBpbiBQeXRob24gMi41LCBwcHJpbnQgc29ydHMgZGljdCBkaXNwbGF5cyBieSBrZXkgcmVnYXJkbGVzcwpAQCAtMjE5LDE5ICsyOTQsNTEgQEAKICAgICAgICAgICAgIHIiezU6IFtbXV0sICd4eVx0YWJcbic6ICgzLCksICgpOiB7fX0iKQogCiAgICAgZGVmIHRlc3Rfb3JkZXJlZF9kaWN0KHNlbGYpOgorICAgICAgICBkID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGQsIHdpZHRoPTEpLCAnT3JkZXJlZERpY3QoKScpCisgICAgICAgIGQgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdChbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkLCB3aWR0aD0xKSwgJ09yZGVyZWREaWN0KCknKQogICAgICAgICB3b3JkcyA9ICd0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIGEgbGF6eSBkb2cnLnNwbGl0KCkKICAgICAgICAgZCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KHppcCh3b3JkcywgaXRlcnRvb2xzLmNvdW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGQpLAogIiIiXAoteyd0aGUnOiAwLAotICdxdWljayc6IDEsCi0gJ2Jyb3duJzogMiwKLSAnZm94JzogMywKLSAnanVtcGVkJzogNCwKLSAnb3Zlcic6IDUsCi0gJ2EnOiA2LAotICdsYXp5JzogNywKLSAnZG9nJzogOH0iIiIpCitPcmRlcmVkRGljdChbKCd0aGUnLCAwKSwKKyAgICAgICAgICAgICAoJ3F1aWNrJywgMSksCisgICAgICAgICAgICAgKCdicm93bicsIDIpLAorICAgICAgICAgICAgICgnZm94JywgMyksCisgICAgICAgICAgICAgKCdqdW1wZWQnLCA0KSwKKyAgICAgICAgICAgICAoJ292ZXInLCA1KSwKKyAgICAgICAgICAgICAoJ2EnLCA2KSwKKyAgICAgICAgICAgICAoJ2xhenknLCA3KSwKKyAgICAgICAgICAgICAoJ2RvZycsIDgpXSkiIiIpCisKKyAgICBkZWYgdGVzdF9tYXBwaW5nX3Byb3h5KHNlbGYpOgorICAgICAgICB3b3JkcyA9ICd0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIGEgbGF6eSBkb2cnLnNwbGl0KCkKKyAgICAgICAgZCA9IGRpY3QoemlwKHdvcmRzLCBpdGVydG9vbHMuY291bnQoKSkpCisgICAgICAgIG0gPSB0eXBlcy5NYXBwaW5nUHJveHlUeXBlKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobSksICIiIlwKK21hcHBpbmdwcm94eSh7J2EnOiA2LAorICAgICAgICAgICAgICAnYnJvd24nOiAyLAorICAgICAgICAgICAgICAnZG9nJzogOCwKKyAgICAgICAgICAgICAgJ2ZveCc6IDMsCisgICAgICAgICAgICAgICdqdW1wZWQnOiA0LAorICAgICAgICAgICAgICAnbGF6eSc6IDcsCisgICAgICAgICAgICAgICdvdmVyJzogNSwKKyAgICAgICAgICAgICAgJ3F1aWNrJzogMSwKKyAgICAgICAgICAgICAgJ3RoZSc6IDB9KSIiIikKKyAgICAgICAgZCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KHppcCh3b3JkcywgaXRlcnRvb2xzLmNvdW50KCkpKQorICAgICAgICBtID0gdHlwZXMuTWFwcGluZ1Byb3h5VHlwZShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KG0pLCAiIiJcCittYXBwaW5ncHJveHkoT3JkZXJlZERpY3QoWygndGhlJywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgncXVpY2snLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdicm93bicsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2ZveCcsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2p1bXBlZCcsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ292ZXInLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgNiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnbGF6eScsIDcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2RvZycsIDgpXSkpIiIiKQorCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3Npbmcoc2VsZik6CiAgICAgICAgIG8gPSB7J25hbWVzIHdpdGggc3BhY2VzJzogJ3Nob3VsZCBiZSBwcmVzZW50ZWQgdXNpbmcgcmVwcigpJywKICAgICAgICAgICAgICAnb3RoZXJzLnNob3VsZC5ub3QuYmUnOiAnbGlrZS50aGlzJ30KQEAgLTUzNSwxNiArNjQyLDM1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZGljdC5mcm9ta2V5cyhrZXlzLCAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3slcjogMCwgJXI6IDB9JyAlIHR1cGxlKHNvcnRlZChrZXlzLCBrZXk9aWQpKSkKIAorICAgIGRlZiB0ZXN0X3NvcnRfb3JkZXJhYmxlX2FuZF91bm9yZGVyYWJsZV92YWx1ZXMoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjI3MjE6ICBzb3J0ZWQgcHByaW50cyBpcyBub3Qgc3RhYmxlCisgICAgICAgIGEgPSBVbm9yZGVyYWJsZSgpCisgICAgICAgIGIgPSBPcmRlcmFibGUoaGFzaChhKSkgICMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZQorICAgICAgICAjIHNlbGYtdGVzdAorICAgICAgICBzZWxmLmFzc2VydExlc3MoYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHN0cih0eXBlKGIpKSwgc3RyKHR5cGUoYSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChbYiwgYV0pLCBbYSwgYl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFthLCBiXSksIFthLCBiXSkKKyAgICAgICAgIyBzZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzZXQoW2IsIGFdKSwgd2lkdGg9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3slcixcbiAlcn0nICUgKGEsIGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNldChbYSwgYl0pLCB3aWR0aD0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAneyVyLFxuICVyfScgJSAoYSwgYikpCisgICAgICAgICMgZGljdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGRpY3QuZnJvbWtleXMoW2IsIGFdKSwgd2lkdGg9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3slcjogTm9uZSxcbiAlcjogTm9uZX0nICUgKGEsIGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGRpY3QuZnJvbWtleXMoW2EsIGJdKSwgd2lkdGg9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3slcjogTm9uZSxcbiAlcjogTm9uZX0nICUgKGEsIGIpKQorCiAgICAgZGVmIHRlc3Rfc3RyX3dyYXAoc2VsZik6CiAgICAgICAgICMgcHByaW50IHRyaWVzIHRvIHdyYXAgc3RyaW5ncyBpbnRlbGxpZ2VudGx5CiAgICAgICAgIGZveCA9ICd0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIGEgbGF6eSBkb2cnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZm94LCB3aWR0aD0yMCksICIiIlwKLSgndGhlIHF1aWNrICcKLSAnYnJvd24gZm94ICcKLSAnanVtcGVkIG92ZXIgYSAnCi0gJ2xhenkgZG9nJykiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZm94LCB3aWR0aD0xOSksICIiIlwKKygndGhlIHF1aWNrIGJyb3duICcKKyAnZm94IGp1bXBlZCBvdmVyICcKKyAnYSBsYXp5IGRvZycpIiIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHsnYSc6IDEsICdiJzogZm94LCAnYyc6IDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTI2KSwgIiIiXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTI1KSwgIiIiXAogeydhJzogMSwKICAnYic6ICd0aGUgcXVpY2sgYnJvd24gJwogICAgICAgJ2ZveCBqdW1wZWQgb3ZlciAnCkBAIC01NTYsMTIgKzY4MiwzNCBAQAogICAgICAgICAjIC0gbm9uLUFTQ0lJIGlzIGFsbG93ZWQKICAgICAgICAgIyAtIGFuIGFwb3N0cm9waGUgZG9lc24ndCBkaXNydXB0IHRoZSBwcHJpbnQKICAgICAgICAgc3BlY2lhbCA9ICJQb3J0b25zIGRpeCBib25zIFwid2hpc2t5c1wiXG7DoCBsJ2F2b2NhdCBnb3VqYXRcdCBxdWkgZnVtYWl0IGF1IHpvbyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD0yMSksICIiIlwKLSgnUG9ydG9ucyBkaXggJwotICdib25zICJ3aGlza3lzIlxcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD02OCksIHJlcHIoc3BlY2lhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9MzEpLCAiIiJcCisoJ1BvcnRvbnMgZGl4IGJvbnMgIndoaXNreXMiXFxuJworICLDoCBsJ2F2b2NhdCBnb3VqYXRcXHQgcXVpICIKKyAnZnVtYWl0IGF1IHpvbycpIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPTIwKSwgIiIiXAorKCdQb3J0b25zIGRpeCBib25zICcKKyAnIndoaXNreXMiXFxuJwogICLDoCBsJ2F2b2NhdCAiCiAgJ2dvdWphdFxcdCBxdWkgJwogICdmdW1haXQgYXUgem9vJykiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoW1tbW1tzcGVjaWFsXV1dXV0sIHdpZHRoPTM1KSwgIiIiXAorW1tbW1snUG9ydG9ucyBkaXggYm9ucyAid2hpc2t5cyJcXG4nCisgICAgICLDoCBsJ2F2b2NhdCBnb3VqYXRcXHQgcXVpICIKKyAgICAgJ2Z1bWFpdCBhdSB6b28nXV1dXV0iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoW1tbW1tzcGVjaWFsXV1dXV0sIHdpZHRoPTI1KSwgIiIiXAorW1tbW1snUG9ydG9ucyBkaXggYm9ucyAnCisgICAgICcid2hpc2t5cyJcXG4nCisgICAgICLDoCBsJ2F2b2NhdCAiCisgICAgICdnb3VqYXRcXHQgcXVpICcKKyAgICAgJ2Z1bWFpdCBhdSB6b28nXV1dXV0iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoW1tbW1tzcGVjaWFsXV1dXV0sIHdpZHRoPTIzKSwgIiIiXAorW1tbW1snUG9ydG9ucyBkaXggJworICAgICAnYm9ucyAid2hpc2t5cyJcXG4nCisgICAgICLDoCBsJ2F2b2NhdCAiCisgICAgICdnb3VqYXRcXHQgcXVpICcKKyAgICAgJ2Z1bWFpdCBhdSAnCisgICAgICd6b28nXV1dXV0iIiIpCiAgICAgICAgICMgQW4gdW53cmFwcGFibGUgc3RyaW5nIGlzIGZvcm1hdHRlZCBhcyBpdHMgcmVwcgogICAgICAgICB1bndyYXBwYWJsZSA9ICJ4IiAqIDEwMAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHVud3JhcHBhYmxlLCB3aWR0aD04MCksIHJlcHIodW53cmFwcGFibGUpKQpAQCAtNTg0LDcgKzczMiwyNjcgQEAKICAgMTQsIDE1XSwKICBbXSwgWzBdLCBbMCwgMV0sIFswLCAxLCAyXSwgWzAsIDEsIDIsIDNdLAogIFswLCAxLCAyLCAzLCA0XV0iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCB3aWR0aD00OCwgY29tcGFjdD1UcnVlKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobywgd2lkdGg9NDcsIGNvbXBhY3Q9VHJ1ZSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfY29tcGFjdF93aWR0aChzZWxmKToKKyAgICAgICAgbGV2ZWxzID0gMjAKKyAgICAgICAgbnVtYmVyID0gMTAKKyAgICAgICAgbyA9IFswXSAqIG51bWJlcgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZXZlbHMgLSAxKToKKyAgICAgICAgICAgIG8gPSBbb10KKyAgICAgICAgZm9yIHcgaW4gcmFuZ2UobGV2ZWxzICogMiArIDEsIGxldmVscyArIDMgKiBudW1iZXIgLSAxKToKKyAgICAgICAgICAgIGxpbmVzID0gcHByaW50LnBmb3JtYXQobywgd2lkdGg9dywgY29tcGFjdD1UcnVlKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIG1heHdpZHRoID0gbWF4KG1hcChsZW4sIGxpbmVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG1heHdpZHRoLCB3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKG1heHdpZHRoLCB3IC0gMykKKworICAgIGRlZiB0ZXN0X2J5dGVzX3dyYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoYicnLCB3aWR0aD0xKSwgImInJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoYidhYmNkJywgd2lkdGg9MSksICJiJ2FiY2QnIikKKyAgICAgICAgbGV0dGVycyA9IGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobGV0dGVycywgd2lkdGg9MjkpLCByZXByKGxldHRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGxldHRlcnMsIHdpZHRoPTE5KSwgIiIiXAorKGInYWJjZGVmZ2hpamtsJworIGInbW5vcHFyc3R1dnd4eXonKSIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChsZXR0ZXJzLCB3aWR0aD0xOCksICIiIlwKKyhiJ2FiY2RlZmdoaWprbCcKKyBiJ21ub3BxcnN0dXZ3eCcKKyBiJ3l6JykiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobGV0dGVycywgd2lkdGg9MTYpLCAiIiJcCisoYidhYmNkZWZnaGlqa2wnCisgYidtbm9wcXJzdHV2d3gnCisgYid5eicpIiIiKQorICAgICAgICBzcGVjaWFsID0gYnl0ZXMocmFuZ2UoMTYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPTYxKSwgcmVwcihzcGVjaWFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD00OCksICIiIlwKKyhiJ1xceDAwXFx4MDFcXHgwMlxceDAzXFx4MDRcXHgwNVxceDA2XFx4MDdcXHgwOFxcdFxcblxceDBiJworIGInXFx4MGNcXHJcXHgwZVxceDBmJykiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9MzIpLCAiIiJcCisoYidcXHgwMFxceDAxXFx4MDJcXHgwMycKKyBiJ1xceDA0XFx4MDVcXHgwNlxceDA3XFx4MDhcXHRcXG5cXHgwYicKKyBiJ1xceDBjXFxyXFx4MGVcXHgwZicpIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPTEpLCAiIiJcCisoYidcXHgwMFxceDAxXFx4MDJcXHgwMycKKyBiJ1xceDA0XFx4MDVcXHgwNlxceDA3JworIGInXFx4MDhcXHRcXG5cXHgwYicKKyBiJ1xceDBjXFxyXFx4MGVcXHgwZicpIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHsnYSc6IDEsICdiJzogbGV0dGVycywgJ2MnOiAyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0yMSksICIiIlwKK3snYSc6IDEsCisgJ2InOiBiJ2FiY2RlZmdoaWprbCcKKyAgICAgIGInbW5vcHFyc3R1dnd4JworICAgICAgYid5eicsCisgJ2MnOiAyfSIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh7J2EnOiAxLCAnYic6IGxldHRlcnMsICdjJzogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9MjApLCAiIiJcCit7J2EnOiAxLAorICdiJzogYidhYmNkZWZnaCcKKyAgICAgIGInaWprbG1ub3AnCisgICAgICBiJ3Fyc3R1dnd4eXonLAorICdjJzogMn0iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoW1tbW1tbbGV0dGVyc11dXV1dXSwgd2lkdGg9MjUpLCAiIiJcCitbW1tbW1tiJ2FiY2RlZmdoaWprbG1ub3AnCisgICAgICBiJ3Fyc3R1dnd4eXonXV1dXV1dIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KFtbW1tbW3NwZWNpYWxdXV1dXV0sIHdpZHRoPTQxKSwgIiIiXAorW1tbW1tbYidcXHgwMFxceDAxXFx4MDJcXHgwM1xceDA0XFx4MDVcXHgwNlxceDA3JworICAgICAgYidcXHgwOFxcdFxcblxceDBiXFx4MGNcXHJcXHgwZVxceDBmJ11dXV1dXSIiIikKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBwcHJpbnQgaXMgYSB1c2FibGUgcmVwcgorICAgICAgICBmb3Igd2lkdGggaW4gcmFuZ2UoMSwgNjQpOgorICAgICAgICAgICAgZm9ybWF0dGVkID0gcHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9d2lkdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZm9ybWF0dGVkKSwgc3BlY2lhbCkKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IHBwcmludC5wZm9ybWF0KFtzcGVjaWFsXSAqIDIsIHdpZHRoPXdpZHRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGZvcm1hdHRlZCksIFtzcGVjaWFsXSAqIDIpCisKKyAgICBkZWYgdGVzdF9ieXRlYXJyYXlfd3JhcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChieXRlYXJyYXkoKSwgd2lkdGg9MSksICJieXRlYXJyYXkoYicnKSIpCisgICAgICAgIGxldHRlcnMgPSBieXRlYXJyYXkoYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobGV0dGVycywgd2lkdGg9NDApLCByZXByKGxldHRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGxldHRlcnMsIHdpZHRoPTI4KSwgIiIiXAorYnl0ZWFycmF5KGInYWJjZGVmZ2hpamtsJworICAgICAgICAgIGInbW5vcHFyc3R1dnd4eXonKSIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChsZXR0ZXJzLCB3aWR0aD0yNyksICIiIlwKK2J5dGVhcnJheShiJ2FiY2RlZmdoaWprbCcKKyAgICAgICAgICBiJ21ub3BxcnN0dXZ3eCcKKyAgICAgICAgICBiJ3l6JykiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobGV0dGVycywgd2lkdGg9MjUpLCAiIiJcCitieXRlYXJyYXkoYidhYmNkZWZnaGlqa2wnCisgICAgICAgICAgYidtbm9wcXJzdHV2d3gnCisgICAgICAgICAgYid5eicpIiIiKQorICAgICAgICBzcGVjaWFsID0gYnl0ZWFycmF5KHJhbmdlKDE2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD03MiksIHJlcHIoc3BlY2lhbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9NTcpLCAiIiJcCitieXRlYXJyYXkoYidcXHgwMFxceDAxXFx4MDJcXHgwM1xceDA0XFx4MDVcXHgwNlxceDA3XFx4MDhcXHRcXG5cXHgwYicKKyAgICAgICAgICBiJ1xceDBjXFxyXFx4MGVcXHgwZicpIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPTQxKSwgIiIiXAorYnl0ZWFycmF5KGInXFx4MDBcXHgwMVxceDAyXFx4MDMnCisgICAgICAgICAgYidcXHgwNFxceDA1XFx4MDZcXHgwN1xceDA4XFx0XFxuXFx4MGInCisgICAgICAgICAgYidcXHgwY1xcclxceDBlXFx4MGYnKSIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD0xKSwgIiIiXAorYnl0ZWFycmF5KGInXFx4MDBcXHgwMVxceDAyXFx4MDMnCisgICAgICAgICAgYidcXHgwNFxceDA1XFx4MDZcXHgwNycKKyAgICAgICAgICBiJ1xceDA4XFx0XFxuXFx4MGInCisgICAgICAgICAgYidcXHgwY1xcclxceDBlXFx4MGYnKSIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh7J2EnOiAxLCAnYic6IGxldHRlcnMsICdjJzogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9MzEpLCAiIiJcCit7J2EnOiAxLAorICdiJzogYnl0ZWFycmF5KGInYWJjZGVmZ2hpamtsJworICAgICAgICAgICAgICAgIGInbW5vcHFyc3R1dnd4JworICAgICAgICAgICAgICAgIGIneXonKSwKKyAnYyc6IDJ9IiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KFtbW1tbbGV0dGVyc11dXV1dLCB3aWR0aD0zNyksICIiIlwKK1tbW1tbYnl0ZWFycmF5KGInYWJjZGVmZ2hpamtsbW5vcCcKKyAgICAgICAgICAgICAgIGIncXJzdHV2d3h5eicpXV1dXV0iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoW1tbW1tzcGVjaWFsXV1dXV0sIHdpZHRoPTUwKSwgIiIiXAorW1tbW1tieXRlYXJyYXkoYidcXHgwMFxceDAxXFx4MDJcXHgwM1xceDA0XFx4MDVcXHgwNlxceDA3JworICAgICAgICAgICAgICAgYidcXHgwOFxcdFxcblxceDBiXFx4MGNcXHJcXHgwZVxceDBmJyldXV1dXSIiIikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfZGljdChzZWxmKToKKyAgICAgICAgZCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkLCB3aWR0aD0xKSwgImRlZmF1bHRkaWN0KDxjbGFzcyAnaW50Jz4sIHt9KSIpCisgICAgICAgIHdvcmRzID0gJ3RoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgYSBsYXp5IGRvZycuc3BsaXQoKQorICAgICAgICBkID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50LCB6aXAod29yZHMsIGl0ZXJ0b29scy5jb3VudCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkKSwKKyIiIlwKK2RlZmF1bHRkaWN0KDxjbGFzcyAnaW50Jz4sCisgICAgICAgICAgICB7J2EnOiA2LAorICAgICAgICAgICAgICdicm93bic6IDIsCisgICAgICAgICAgICAgJ2RvZyc6IDgsCisgICAgICAgICAgICAgJ2ZveCc6IDMsCisgICAgICAgICAgICAgJ2p1bXBlZCc6IDQsCisgICAgICAgICAgICAgJ2xhenknOiA3LAorICAgICAgICAgICAgICdvdmVyJzogNSwKKyAgICAgICAgICAgICAncXVpY2snOiAxLAorICAgICAgICAgICAgICd0aGUnOiAwfSkiIiIpCisKKyAgICBkZWYgdGVzdF9jb3VudGVyKHNlbGYpOgorICAgICAgICBkID0gY29sbGVjdGlvbnMuQ291bnRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZCwgd2lkdGg9MSksICJDb3VudGVyKCkiKQorICAgICAgICBkID0gY29sbGVjdGlvbnMuQ291bnRlcignc2Vuc2VsZXNzbmVzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZCwgd2lkdGg9NDApLAorIiIiXAorQ291bnRlcih7J3MnOiA2LAorICAgICAgICAgJ2UnOiA0LAorICAgICAgICAgJ24nOiAyLAorICAgICAgICAgJ2wnOiAxfSkiIiIpCisKKyAgICBkZWYgdGVzdF9jaGFpbm1hcChzZWxmKToKKyAgICAgICAgZCA9IGNvbGxlY3Rpb25zLkNoYWluTWFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkLCB3aWR0aD0xKSwgIkNoYWluTWFwKHt9KSIpCisgICAgICAgIHdvcmRzID0gJ3RoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgYSBsYXp5IGRvZycuc3BsaXQoKQorICAgICAgICBpdGVtcyA9IGxpc3QoemlwKHdvcmRzLCBpdGVydG9vbHMuY291bnQoKSkpCisgICAgICAgIGQgPSBjb2xsZWN0aW9ucy5DaGFpbk1hcChkaWN0KGl0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkKSwKKyIiIlwKK0NoYWluTWFwKHsnYSc6IDYsCisgICAgICAgICAgJ2Jyb3duJzogMiwKKyAgICAgICAgICAnZG9nJzogOCwKKyAgICAgICAgICAnZm94JzogMywKKyAgICAgICAgICAnanVtcGVkJzogNCwKKyAgICAgICAgICAnbGF6eSc6IDcsCisgICAgICAgICAgJ292ZXInOiA1LAorICAgICAgICAgICdxdWljayc6IDEsCisgICAgICAgICAgJ3RoZSc6IDB9KSIiIikKKyAgICAgICAgZCA9IGNvbGxlY3Rpb25zLkNoYWluTWFwKGRpY3QoaXRlbXMpLCBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdChpdGVtcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZCksCisiIiJcCitDaGFpbk1hcCh7J2EnOiA2LAorICAgICAgICAgICdicm93bic6IDIsCisgICAgICAgICAgJ2RvZyc6IDgsCisgICAgICAgICAgJ2ZveCc6IDMsCisgICAgICAgICAgJ2p1bXBlZCc6IDQsCisgICAgICAgICAgJ2xhenknOiA3LAorICAgICAgICAgICdvdmVyJzogNSwKKyAgICAgICAgICAncXVpY2snOiAxLAorICAgICAgICAgICd0aGUnOiAwfSwKKyAgICAgICAgIE9yZGVyZWREaWN0KFsoJ3RoZScsIDApLAorICAgICAgICAgICAgICAgICAgICAgICgncXVpY2snLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJ2Jyb3duJywgMiksCisgICAgICAgICAgICAgICAgICAgICAgKCdmb3gnLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJ2p1bXBlZCcsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICgnb3ZlcicsIDUpLAorICAgICAgICAgICAgICAgICAgICAgICgnYScsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICgnbGF6eScsIDcpLAorICAgICAgICAgICAgICAgICAgICAgICgnZG9nJywgOCldKSkiIiIpCisKKyAgICBkZWYgdGVzdF9kZXF1ZShzZWxmKToKKyAgICAgICAgZCA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkLCB3aWR0aD0xKSwgImRlcXVlKFtdKSIpCisgICAgICAgIGQgPSBjb2xsZWN0aW9ucy5kZXF1ZShtYXhsZW49NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkLCB3aWR0aD0xKSwgImRlcXVlKFtdLCBtYXhsZW49NykiKQorICAgICAgICB3b3JkcyA9ICd0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIGEgbGF6eSBkb2cnLnNwbGl0KCkKKyAgICAgICAgZCA9IGNvbGxlY3Rpb25zLmRlcXVlKHppcCh3b3JkcywgaXRlcnRvb2xzLmNvdW50KCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGQpLAorIiIiXAorZGVxdWUoWygndGhlJywgMCksCisgICAgICAgKCdxdWljaycsIDEpLAorICAgICAgICgnYnJvd24nLCAyKSwKKyAgICAgICAoJ2ZveCcsIDMpLAorICAgICAgICgnanVtcGVkJywgNCksCisgICAgICAgKCdvdmVyJywgNSksCisgICAgICAgKCdhJywgNiksCisgICAgICAgKCdsYXp5JywgNyksCisgICAgICAgKCdkb2cnLCA4KV0pIiIiKQorICAgICAgICBkID0gY29sbGVjdGlvbnMuZGVxdWUoemlwKHdvcmRzLCBpdGVydG9vbHMuY291bnQoKSksIG1heGxlbj03KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGQpLAorIiIiXAorZGVxdWUoWygnYnJvd24nLCAyKSwKKyAgICAgICAoJ2ZveCcsIDMpLAorICAgICAgICgnanVtcGVkJywgNCksCisgICAgICAgKCdvdmVyJywgNSksCisgICAgICAgKCdhJywgNiksCisgICAgICAgKCdsYXp5JywgNyksCisgICAgICAgKCdkb2cnLCA4KV0sCisgICAgICBtYXhsZW49NykiIiIpCisKKyAgICBkZWYgdGVzdF91c2VyX2RpY3Qoc2VsZik6CisgICAgICAgIGQgPSBjb2xsZWN0aW9ucy5Vc2VyRGljdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZCwgd2lkdGg9MSksICJ7fSIpCisgICAgICAgIHdvcmRzID0gJ3RoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgYSBsYXp5IGRvZycuc3BsaXQoKQorICAgICAgICBkID0gY29sbGVjdGlvbnMuVXNlckRpY3QoemlwKHdvcmRzLCBpdGVydG9vbHMuY291bnQoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZCksCisiIiJcCit7J2EnOiA2LAorICdicm93bic6IDIsCisgJ2RvZyc6IDgsCisgJ2ZveCc6IDMsCisgJ2p1bXBlZCc6IDQsCisgJ2xhenknOiA3LAorICdvdmVyJzogNSwKKyAncXVpY2snOiAxLAorICd0aGUnOiAwfSIiIikKKworICAgIGRlZiB0ZXN0X3VzZXJfbGlzdChzZWxmKToKKyAgICAgICAgZCA9IGNvbGxlY3Rpb25zLlVzZXJMaXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkLCB3aWR0aD0xKSwgIltdIikKKyAgICAgICAgd29yZHMgPSAndGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciBhIGxhenkgZG9nJy5zcGxpdCgpCisgICAgICAgIGQgPSBjb2xsZWN0aW9ucy5Vc2VyTGlzdCh6aXAod29yZHMsIGl0ZXJ0b29scy5jb3VudCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkKSwKKyIiIlwKK1soJ3RoZScsIDApLAorICgncXVpY2snLCAxKSwKKyAoJ2Jyb3duJywgMiksCisgKCdmb3gnLCAzKSwKKyAoJ2p1bXBlZCcsIDQpLAorICgnb3ZlcicsIDUpLAorICgnYScsIDYpLAorICgnbGF6eScsIDcpLAorICgnZG9nJywgOCldIiIiKQorCisgICAgZGVmIHRlc3RfdXNlcl9zdHJpbmcoc2VsZik6CisgICAgICAgIGQgPSBjb2xsZWN0aW9ucy5Vc2VyU3RyaW5nKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGQsIHdpZHRoPTEpLCAiJyciKQorICAgICAgICBkID0gY29sbGVjdGlvbnMuVXNlclN0cmluZygndGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciBhIGxhenkgZG9nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkLCB3aWR0aD0yMCksCisiIiJcCisoJ3RoZSBxdWljayBicm93biAnCisgJ2ZveCBqdW1wZWQgb3ZlciAnCisgJ2EgbGF6eSBkb2cnKSIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh7MTogZH0sIHdpZHRoPTIwKSwKKyIiIlwKK3sxOiAndGhlIHF1aWNrICcKKyAgICAnYnJvd24gZm94ICcKKyAgICAnanVtcGVkIG92ZXIgYSAnCisgICAgJ2xhenkgZG9nJ30iIiIpCiAKIAogY2xhc3MgRG90dGVkUHJldHR5UHJpbnRlcihwcHJpbnQuUHJldHR5UHJpbnRlcik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5IGIvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weQppbmRleCBjZWU3MjAzLi4yNmI3ZDUyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJvcGVydHkucHkKQEAgLTMsNyArMyw2IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBjbGFzcyBQcm9wZXJ0eUJhc2UoRXhjZXB0aW9uKToKICAgICBwYXNzCkBAIC0xNTEsNiArMTUwLDI4IEBACiAgICAgICAgICAgICAgICAgZm9vID0gcHJvcGVydHkoZm9vKQogICAgICAgICAgICAgQy5mb28uX19pc2Fic3RyYWN0bWV0aG9kX18KIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X3Byb3BlcnR5X2J1aWx0aW5fZG9jX3dyaXRhYmxlKHNlbGYpOgorICAgICAgICBwID0gcHJvcGVydHkoZG9jPSdiYXNpYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fX2RvY19fLCAnYmFzaWMnKQorICAgICAgICBwLl9fZG9jX18gPSAnZXh0ZW5kZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fX2RvY19fLCAnZXh0ZW5kZWQnKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvY193cml0YWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgUHJvcGVydHlXcml0YWJsZURvYyhvYmplY3QpOgorCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiIkVnZ3MiIiIKKyAgICAgICAgICAgICAgICByZXR1cm4gImVnZ3MiCisKKyAgICAgICAgc3ViID0gUHJvcGVydHlXcml0YWJsZURvYygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICdFZ2dzJykKKyAgICAgICAgc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18gPSAnU3BhbScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuX19jbGFzc19fLnNwYW0uX19kb2NfXywgJ1NwYW0nKQogCiAjIElzc3VlIDU4OTA6IHN1YmNsYXNzZXMgb2YgcHJvcGVydHkgZG8gbm90IHByZXNlcnZlIG1ldGhvZCBfX2RvY19fIHN0cmluZ3MKIGNsYXNzIFByb3BlcnR5U3ViKHByb3BlcnR5KToKQEAgLTI0Nyw4ICsyNjgsNSBAQAogCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChQcm9wZXJ0eVRlc3RzLCBQcm9wZXJ0eVN1YmNsYXNzVGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHN0YXRzLnB5IGIvTGliL3Rlc3QvdGVzdF9wc3RhdHMucHkKaW5kZXggOWViZWViYi4uNTY2YjNlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wc3RhdHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wc3RhdHMucHkKQEAgLTM0LDEyICszNCw1IEBACiAgICAgICAgIHN0YXRzLmFkZChzZWxmLnN0YXRzLCBzZWxmLnN0YXRzKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgQWRkQ2FsbGVyc1Rlc3RDYXNlLAotICAgICAgICBTdGF0c1Rlc3RDYXNlLAotICAgICkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B0eS5weSBiL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CmluZGV4IDg5MTY4NjEuLmVmNWU5OWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CkBAIC0xLDcgKzEsNiBAQAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgcmVhcF9jaGlsZHJlbgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUsIHJlYXBfY2hpbGRyZW4KIAotI1NraXAgdGhlc2UgdGVzdHMgaWYgZWl0aGVyIGZjbnRsIG9yIHRlcm1pb3MgaXMgbm90IGF2YWlsYWJsZQotZmNudGwgPSBpbXBvcnRfbW9kdWxlKCdmY250bCcpCisjIFNraXAgdGhlc2UgdGVzdHMgaWYgdGVybWlvcyBpcyBub3QgYXZhaWxhYmxlCiBpbXBvcnRfbW9kdWxlKCd0ZXJtaW9zJykKIAogaW1wb3J0IGVycm5vCkBAIC04NCwxNiArODMsMTggQEAKICAgICAgICAgIyBpbiBtYXN0ZXJfb3BlbigpLCB3ZSBuZWVkIHRvIHJlYWQgdGhlIEVPRi4KIAogICAgICAgICAjIEVuc3VyZSB0aGUgZmQgaXMgbm9uLWJsb2NraW5nIGluIGNhc2UgdGhlcmUncyBub3RoaW5nIHRvIHJlYWQuCi0gICAgICAgIG9yaWdfZmxhZ3MgPSBmY250bC5mY250bChtYXN0ZXJfZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgIGZjbnRsLmZjbnRsKG1hc3Rlcl9mZCwgZmNudGwuRl9TRVRGTCwgb3JpZ19mbGFncyB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgIGJsb2NraW5nID0gb3MuZ2V0X2Jsb2NraW5nKG1hc3Rlcl9mZCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgczEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzMSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFHQUlOOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICMgUmVzdG9yZSB0aGUgb3JpZ2luYWwgZmxhZ3MuCi0gICAgICAgIGZjbnRsLmZjbnRsKG1hc3Rlcl9mZCwgZmNudGwuRl9TRVRGTCwgb3JpZ19mbGFncykKKyAgICAgICAgICAgIG9zLnNldF9ibG9ja2luZyhtYXN0ZXJfZmQsIEZhbHNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMxID0gb3MucmVhZChtYXN0ZXJfZmQsIDEwMjQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHMxKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVBR0FJTjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgUmVzdG9yZSB0aGUgb3JpZ2luYWwgZmxhZ3MuCisgICAgICAgICAgICBvcy5zZXRfYmxvY2tpbmcobWFzdGVyX2ZkLCBibG9ja2luZykKIAogICAgICAgICBkZWJ1ZygiV3JpdGluZyB0byBzbGF2ZV9mZCIpCiAgICAgICAgIG9zLndyaXRlKHNsYXZlX2ZkLCBURVNUX1NUUklOR18xKQpAQCAtMjkyLDExICsyOTMsOCBAQAogICAgICAgICAgICAgcHR5Ll9jb3B5KG1hc3RlcnNbMF0pCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHRyeToKLSAgICAgICAgcnVuX3VuaXR0ZXN0KFNtYWxsUHR5VGVzdHMsIFB0eVRlc3QpCi0gICAgZmluYWxseToKLSAgICAgICAgcmVhcF9jaGlsZHJlbigpCitkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICByZWFwX2NoaWxkcmVuKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wdWxsZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9wdWxsZG9tLnB5CmluZGV4IGI4MWE1OTUuLjE5MzJjNmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHVsbGRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B1bGxkb20ucHkKQEAgLTYsNyArNiw3IEBACiBmcm9tIHhtbC5zYXgueG1scmVhZGVyIGltcG9ydCBBdHRyaWJ1dGVzSW1wbAogZnJvbSB4bWwuZG9tIGltcG9ydCBwdWxsZG9tCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUKIAogCiB0c3RmaWxlID0gZmluZGZpbGUoInRlc3QueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCkBAIC0zMzksOSArMzM5LDUgQEAKICAgICAgICAgZG9jLnVubGluaygpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChQdWxsRE9NVGVzdENhc2UsIFRob3JvdWdoVGVzdENhc2UsIFNBWDJET01UZXN0Q2FzZSkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B3ZC5weSBiL0xpYi90ZXN0L3Rlc3RfcHdkLnB5CmluZGV4IDM3YTFiY2IuLmI3YjFhNGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHdkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHdkLnB5CkBAIC0xMDcsOCArMTA3LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHB3ZC5nZXRwd3VpZCwgMioqMTI4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcHdkLmdldHB3dWlkLCAtMioqMTI4KQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHdkVGVzdCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CmluZGV4IGMxZmQ0ZjYuLjRhNmNhYTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKQEAgLTk4LDYgKzk4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cygKICAgICAgICAgICAgIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhZF9jb2RpbmcpKSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID4gMCwgJ3Rlc3QgZG9lcyBub3Qgd29yayB3aXRoIC1PJykKICAgICBkZWYgdGVzdF9kb3VibGVfZG90X25vX2Nsb2JiZXIoc2VsZik6CiAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIyOTY2CiAgICAgICAgICMgcHlfY29tcGlsZSBmb28uYmFyLnB5IC0+IF9fcHljYWNoZV9fL2Zvby5jcHl0aG9uLTM0LnB5YwpAQCAtMTE3LDYgKzExOCwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoY2FjaGVfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocHljX3BhdGgpKQogCisgICAgZGVmIHRlc3Rfb3B0aW1pemF0aW9uX3BhdGgoc2VsZik6CisgICAgICAgICMgU3BlY2lmeWluZyBvcHRpbWl6ZWQgYnl0ZWNvZGUgc2hvdWxkIGxlYWQgdG8gYSBwYXRoIHJlZmxlY3RpbmcgdGhhdC4KKyAgICAgICAgc2VsZi5hc3NlcnRJbignb3B0LTInLCBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgb3B0aW1pemU9MikpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5IGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKaW5kZXggMzllYjY1Zi4uNmZmYmJiZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKQEAgLTIsMTEgKzIsMTAgQEAKICAgIFRlc3QgY2FzZXMgZm9yIHB5Y2xici5weQogICAgTmljayBNYXRoZXdzb24KICcnJwotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogaW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgRnVuY3Rpb25UeXBlLCBNZXRob2RUeXBlLCBCdWlsdGluRnVuY3Rpb25UeXBlCiBpbXBvcnQgcHljbGJyCi1mcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UsIG1haW4gYXMgdW5pdHRlc3RfbWFpbgogCiBTdGF0aWNNZXRob2RUeXBlID0gdHlwZShzdGF0aWNtZXRob2QobGFtYmRhOiBOb25lKSkKIENsYXNzTWV0aG9kVHlwZSA9IHR5cGUoY2xhc3NtZXRob2QobGFtYmRhIGM6IE5vbmUpKQpAQCAtMTczLDkgKzE3Miw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBweWNsYnIucmVhZG1vZHVsZV9leCwgJ2FzeW5jb3JlLmZvbycpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChQeWNsYnJUZXN0KQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CmluZGV4IDM0M2RkMjEuLmFlZTk3OWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWRvYy5weQpAQCAtMiw3ICsyLDYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCBkaWZmbGliCiBpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgcHlkb2MKQEAgLTE5LDEwICsxOCwxMSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdXJsbGliLnBhcnNlCiBpbXBvcnQgeG1sLmV0cmVlCitpbXBvcnQgeG1sLmV0cmVlLkVsZW1lbnRUcmVlCiBpbXBvcnQgdGV4dHdyYXAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCi1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICgKICAgICBURVNURk4sIHJtdHJlZSwKICAgICByZWFwX2NoaWxkcmVuLCByZWFwX3RocmVhZHMsIGNhcHR1cmVkX291dHB1dCwgY2FwdHVyZWRfc3Rkb3V0LApAQCAtMjU3LDcgKzI1NywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MpCiAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1pc3NpbmcgbW9kdWxlCi1taXNzaW5nX3BhdHRlcm4gPSAibm8gUHl0aG9uIGRvY3VtZW50YXRpb24gZm91bmQgZm9yICclcyciCittaXNzaW5nX3BhdHRlcm4gPSAnJydcCitObyBQeXRob24gZG9jdW1lbnRhdGlvbiBmb3VuZCBmb3IgJXIuCitVc2UgaGVscCgpIHRvIGdldCB0aGUgaW50ZXJhY3RpdmUgaGVscCB1dGlsaXR5LgorVXNlIGhlbHAoc3RyKSBmb3IgaGVscCBvbiB0aGUgc3RyIGNsYXNzLicnJy5yZXBsYWNlKCdcbicsIG9zLmxpbmVzZXApCiAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1vZHVsZSB3aXRoIGJhZCBpbXBvcnRzCiBiYWRpbXBvcnRfcGF0dGVybiA9ICJwcm9ibGVtIGluICVzIC0gSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCAlciIKQEAgLTM1MCw2ICszNTMsMTQgQEAKICAgICAgICAgbG9jID0gIjxicj48YSBocmVmPVwiIiArIGxvYyArICJcIj5Nb2R1bGUgRG9jczwvYT4iCiAgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpLCBsb2MKIAorZGVmIGdldF9weWRvY19saW5rKG1vZHVsZSk6CisgICAgIlJldHVybnMgYSBkb2N1bWVudGF0aW9uIHdlYiBsaW5rIG9mIGEgbW9kdWxlIgorICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUKKyAgICBiYXNlZGlyID0gZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkKKyAgICBkb2MgPSBweWRvYy5UZXh0RG9jKCkKKyAgICBsb2MgPSBkb2MuZ2V0ZG9jbG9jKG1vZHVsZSwgYmFzZWRpcj1iYXNlZGlyKQorICAgIHJldHVybiBsb2MKKwogZGVmIGdldF9weWRvY190ZXh0KG1vZHVsZSk6CiAgICAgIlJldHVybnMgcHlkb2MgZ2VuZXJhdGVkIG91dHB1dCBhcyB0ZXh0IgogICAgIGRvYyA9IHB5ZG9jLlRleHREb2MoKQpAQCAtMzY0LDE1ICszNzUsNiBAQAogICAgIG91dHB1dCA9IHBhdHQuc3ViKCcnLCBvdXRwdXQpCiAgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpLCBsb2MKIAotZGVmIHByaW50X2RpZmZzKHRleHQxLCB0ZXh0Mik6Ci0gICAgIlByaW50cyB1bmlmaWVkIGRpZmZzIGZvciB0d28gdGV4dHMiCi0gICAgIyBYWFggbm93IG9ic29sZXRlLCB1c2UgdW5pdHRlc3QgYnVpbHQtaW4gc3VwcG9ydAotICAgIGxpbmVzMSA9IHRleHQxLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkKLSAgICBsaW5lczIgPSB0ZXh0Mi5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCi0gICAgZGlmZnMgPSBkaWZmbGliLnVuaWZpZWRfZGlmZihsaW5lczEsIGxpbmVzMiwgbj0wLCBmcm9tZmlsZT0nZXhwZWN0ZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9maWxlPSdnb3QnKQotICAgIHByaW50KCdcbicgKyAnJy5qb2luKGRpZmZzKSkKLQogZGVmIGdldF9odG1sX3RpdGxlKHRleHQpOgogICAgICMgQml0IG9mIGhhY2ssIGJ1dCBnb29kIGVub3VnaCBmb3IgdGVzdCBwdXJwb3NlcwogICAgIGhlYWRlciwgXywgXyA9IHRleHQucGFydGl0aW9uKCI8L2hlYWQ+IikKQEAgLTQyNSw5ICs0MjcsNyBAQAogICAgICAgICBleHBlY3RlZF9odG1sID0gZXhwZWN0ZWRfaHRtbF9wYXR0ZXJuICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgKG1vZF91cmwsIG1vZF9maWxlLCBkb2NfbG9jKSArCiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9odG1sX2RhdGFfZG9jc3RyaW5ncykKLSAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX2h0bWw6Ci0gICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF9odG1sLCByZXN1bHQpCi0gICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWRfaHRtbCkKIAogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCiAgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQpAQCAtNDQwLDkgKzQ0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoZG9jX2xvYywpICsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzICsKICAgICAgICAgICAgICAgICAgICAgICAgIChpbnNwZWN0LmdldGFic2ZpbGUocHlkb2NfbW9kKSwpKQotICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKLSAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQogCiAgICAgZGVmIHRlc3RfdGV4dF9lbnVtX21lbWJlcl93aXRoX3ZhbHVlX3plcm8oc2VsZik6CiAgICAgICAgICMgVGVzdCBpc3N1ZSAjMjA2NTQgdG8gZW5zdXJlIGVudW0gbWVtYmVyIHdpdGggdmFsdWUgMCBjYW4gYmUKQEAgLTQ1NCw2ICs0NTIsMTEgQEAKICAgICAgICAgZG9jID0gcHlkb2MucmVuZGVyX2RvYyhCaW5hcnlJbnRlZ2VyKQogICAgICAgICBzZWxmLmFzc2VydEluKCc8QmluYXJ5SW50ZWdlci56ZXJvOiAwPicsIGRvYykKIAorICAgIGRlZiB0ZXN0X21peGVkX2Nhc2VfbW9kdWxlX25hbWVzX2FyZV9sb3dlcl9jYXNlZChzZWxmKToKKyAgICAgICAgIyBpc3N1ZTE2NDg0CisgICAgICAgIGRvY19saW5rID0gZ2V0X3B5ZG9jX2xpbmsoeG1sLmV0cmVlLkVsZW1lbnRUcmVlKQorICAgICAgICBzZWxmLmFzc2VydEluKCd4bWwuZXRyZWUuZWxlbWVudHRyZWUnLCBkb2NfbGluaykKKwogICAgIGRlZiB0ZXN0X2lzc3VlODIyNShzZWxmKToKICAgICAgICAgIyBUZXN0IGlzc3VlODIyNSB0byBlbnN1cmUgbm8gZG9jIGxpbmsgYXBwZWFycyBmb3IgeG1sLmV0cmVlCiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHhtbC5ldHJlZSkKQEAgLTc0NSw3ICs3NDgsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzeXMucGF0aFs6XSA9IHNhdmVkX3BhdGhzCiAKLSAgICBAdW5pdHRlc3Quc2tpcCgnY2F1c2VzIHVuZGVzaXJlYWJsZSBzaWRlLWVmZmVjdHMgKCMyMDEyOCknKQorICAgIEB1bml0dGVzdC5za2lwKCdjYXVzZXMgdW5kZXNpcmFibGUgc2lkZS1lZmZlY3RzICgjMjAxMjgpJykKICAgICBkZWYgdGVzdF9tb2R1bGVzKHNlbGYpOgogICAgICAgICAjIFNlZSBIZWxwZXIubGlzdG1vZHVsZXMoKS4KICAgICAgICAgbnVtX2hlYWRlcl9saW5lcyA9IDIKQEAgLTc2MSw3ICs3NjQsNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bV9saW5lcywgZXhwZWN0ZWQpCiAKLSAgICBAdW5pdHRlc3Quc2tpcCgnY2F1c2VzIHVuZGVzaXJlYWJsZSBzaWRlLWVmZmVjdHMgKCMyMDEyOCknKQorICAgIEB1bml0dGVzdC5za2lwKCdjYXVzZXMgdW5kZXNpcmFibGUgc2lkZS1lZmZlY3RzICgjMjAxMjgpJykKICAgICBkZWYgdGVzdF9tb2R1bGVzX3NlYXJjaChzZWxmKToKICAgICAgICAgIyBTZWUgSGVscGVyLmxpc3Rtb2R1bGVzKCkuCiAgICAgICAgIGV4cGVjdGVkID0gJ3B5ZG9jIC0gJwpAQCAtOTU3LDkgKzk2MCw3IEBACiAgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9keW5hbWljYXR0cmlidXRlX3BhdHRlcm4gJSAoCiAgICAgICAgICAgICAgICAgKF9fbmFtZV9fLCkgKyBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5nc1s6Ml0pCiAgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6Ci0gICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCi0gICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKIAogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCiAgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQpAQCAtOTgwLDkgKzk4MSw3IEBACiAgICAgICAgIGhlbHBlcihDbGFzcykKICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjEgJSBfX25hbWVfXwogICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCi0gICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgotICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQotICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXh0LCByZXN1bHQpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKQEAgLTEwMjIsMTkgKzEwMjEsMTMgQEAKICAgICAgICAgaGVscGVyKENsYXNzMSkKICAgICAgICAgZXhwZWN0ZWRfdGV4dDEgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4yICUgX19uYW1lX18KICAgICAgICAgcmVzdWx0MSA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgcmVzdWx0MSAhPSBleHBlY3RlZF90ZXh0MToKLSAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQxLCByZXN1bHQxKQotICAgICAgICAgICAgZmFpbDEgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGV4dDEsIHJlc3VsdDEpCiAgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKICAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCiAgICAgICAgIGhlbHBlcihDbGFzczIpCiAgICAgICAgIGV4cGVjdGVkX3RleHQyID0gZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyAlIF9fbmFtZV9fCiAgICAgICAgIHJlc3VsdDIgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCi0gICAgICAgIGlmIHJlc3VsdDIgIT0gZXhwZWN0ZWRfdGV4dDI6Ci0gICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0MiwgcmVzdWx0MikKLSAgICAgICAgICAgIGZhaWwyID0gVHJ1ZQotICAgICAgICBpZiBmYWlsMSBvciBmYWlsMjoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGV4dDIsIHJlc3VsdDIpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKQEAgLTEwNTEsOSArMTA0NCw3IEBACiAgICAgICAgIGhlbHBlcihDKQogICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfbWlzc2luZ2F0dHJpYnV0ZV9wYXR0ZXJuICUgX19uYW1lX18KICAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQotICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKLSAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQogCiAgICAgZGVmIHRlc3RfcmVzb2x2ZV9mYWxzZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMjMwMDg6IHB5ZG9jIGVudW0ueyxJbnR9RW51bSBmYWlsZWQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weSBiL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQppbmRleCA4ZWM4MDhiLi45MmZmZmM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CkBAIC0xMSw3ICsxMSw3IEBACiBmcm9tIHhtbC5wYXJzZXJzIGltcG9ydCBleHBhdAogZnJvbSB4bWwucGFyc2Vycy5leHBhdCBpbXBvcnQgZXJyb3JzCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBzb3J0ZGljdCwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgc29ydGRpY3QKIAogCiBjbGFzcyBTZXRBdHRyaWJ1dGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQyLDEyICs0Miw2IEBACiAgICAgICAgICAgICBzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IHgKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMsIGJvb2woeCkpCiAKLSAgICBkZWYgdGVzdF9zcGVjaWZpZWRfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcywgRmFsc2UpCi0gICAgICAgIGZvciB4IGluIDAsIDEsIDIsIDA6Ci0gICAgICAgICAgICBzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IHgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMsIGJvb2woeCkpCi0KICAgICBkZWYgdGVzdF9pbnZhbGlkX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5wYXJzZXIucmV0dXJuc191bmljb2RlID0gMQpAQCAtNzM1LDE5ICs3MjksNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXJfY2FsbF9hcmdzLCBbKCJiYXIiLCAiYmF6IildKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoU2V0QXR0cmlidXRlVGVzdCwKLSAgICAgICAgICAgICAgICAgUGFyc2VUZXN0LAotICAgICAgICAgICAgICAgICBOYW1lc3BhY2VTZXBhcmF0b3JUZXN0LAotICAgICAgICAgICAgICAgICBJbnRlcm5pbmdUZXN0LAotICAgICAgICAgICAgICAgICBCdWZmZXJUZXh0VGVzdCwKLSAgICAgICAgICAgICAgICAgSGFuZGxlckV4Y2VwdGlvblRlc3QsCi0gICAgICAgICAgICAgICAgIFBvc2l0aW9uVGVzdCwKLSAgICAgICAgICAgICAgICAgc2YxMjk2NDMzVGVzdCwKLSAgICAgICAgICAgICAgICAgQ2hhcmRhdGFCdWZmZXJUZXN0LAotICAgICAgICAgICAgICAgICBNYWxmb3JtZWRJbnB1dFRlc3QsCi0gICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZVRlc3QsCi0gICAgICAgICAgICAgICAgIEZvcmVpZ25EVERUZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfcXVldWUucHkKaW5kZXggMmNkZmVlNC4uNGNjYWEzOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3F1ZXVlLnB5CkBAIC0zNTQsMTAgKzM1NCw1IEBACiAgICAgICAgIHNlbGYuZmFpbGluZ19xdWV1ZV90ZXN0KHEpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFF1ZXVlVGVzdCwgTGlmb1F1ZXVlVGVzdCwgUHJpb3JpdHlRdWV1ZVRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWlsaW5nUXVldWVUZXN0KQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5IGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKaW5kZXggOTI1MTFmYS4uN2NhYzAxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKQEAgLTEsNCArMSwzIEBACi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgc3lzLCBvcywgaW8sIHN1YnByb2Nlc3MKQEAgLTIwNyw5ICsyMDYsNSBAQAogICAgICAgICBwID0gcC5kZWNvZGUoJ2xhdGluLTEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdXQuc3BsaXRsaW5lcygpLCBwLnNwbGl0bGluZXMoKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFF1b3ByaVRlc3RDYXNlKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFpc2UucHkgYi9MaWIvdGVzdC90ZXN0X3JhaXNlLnB5CmluZGV4IGJlNWMxYzYuLmE0MWIzNTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFpc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYWlzZS5weQpAQCAtNDE1LDggKzQxNSw1IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKaW5kZXggNGI1MjMyZi4uNTM5MzQzMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKQEAgLTQ5NCw3ICs0OTQsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKmsgPiBuID4gMioqKGstMSkpICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KIAogICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdyYW5kb20uUmFuZG9tLnJhbmRvbScpCi0gICAgZGVmIHRlc3RfcmFuZGJlbG93X292ZXJyaWRlbl9yYW5kb20oc2VsZiwgcmFuZG9tX21vY2spOgorICAgIGRlZiB0ZXN0X3JhbmRiZWxvd19vdmVycmlkZGVuX3JhbmRvbShzZWxmLCByYW5kb21fbW9jayk6CiAgICAgICAgICMgUmFuZG9tLl9yYW5kYmVsb3coKSBjYW4gb25seSB1c2UgcmFuZG9tKCkgd2hlbiB0aGUgYnVpbHQtaW4gb25lCiAgICAgICAgICMgaGFzIGJlZW4gb3ZlcnJpZGRlbiBidXQgbm8gbmV3IGdldHJhbmRiaXRzKCkgbWV0aG9kIHdhcyBzdXBwbGllZC4KICAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSByYW5kb20uU3lzdGVtUmFuZG9tKCkucmFuZG9tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5IGIvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQppbmRleCAyZGJjZWJjLi4xMDZjNzMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKQEAgLTY0Nyw4ICs2NDcsNSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIGRlbCByYW5nZW9iai5zdGVwCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KFJhbmdlVGVzdCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKaW5kZXggNzM0OGFmMy4uN2E3NDE0MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC0zOCw2ICszOCwyNCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShhY3R1YWwpLCB0eXBlKGV4cGVjdCksIG1zZykKICAgICAgICAgcmVjdXJzZShhY3R1YWwsIGV4cGVjdCkKIAorICAgIGRlZiBjaGVja1BhdHRlcm5FcnJvcihzZWxmLCBwYXR0ZXJuLCBlcnJtc2csIHBvcz1Ob25lKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvcikgYXMgY206CisgICAgICAgICAgICByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBhdHRlcm49cGF0dGVybik6CisgICAgICAgICAgICBlcnIgPSBjbS5leGNlcHRpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLm1zZywgZXJybXNnKQorICAgICAgICAgICAgaWYgcG9zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnBvcywgcG9zKQorCisgICAgZGVmIGNoZWNrVGVtcGxhdGVFcnJvcihzZWxmLCBwYXR0ZXJuLCByZXBsLCBzdHJpbmcsIGVycm1zZywgcG9zPU5vbmUpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHJlLnN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmcpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBhdHRlcm49cGF0dGVybiwgcmVwbD1yZXBsKToKKyAgICAgICAgICAgIGVyciA9IGNtLmV4Y2VwdGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIubXNnLCBlcnJtc2cpCisgICAgICAgICAgICBpZiBwb3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIucG9zLCBwb3MpCisKICAgICBkZWYgdGVzdF9rZWVwX2J1ZmZlcihzZWxmKToKICAgICAgICAgIyBTZWUgYnVnIDE0MjEyCiAgICAgICAgIGIgPSBieXRlYXJyYXkoYid4JykKQEAgLTg0LDcgKzEwMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCIoP2kpYisiLCAieCIsICJiYmJiIEJCQkIiKSwgJ3ggeCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKHInXGQrJywgc2VsZi5idW1wX251bSwgJzA4LjIgLTIgMjN4OTl5JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzkuMyAtMyAyNHgxMDB5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIocidcZCsnLCBzZWxmLmJ1bXBfbnVtLCAnMDguMiAtMiAyM3g5OXknLCAzKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIocidcZCsnLCBzZWxmLmJ1bXBfbnVtLCAnMDguMiAtMiAyM3g5OXknLCBjb3VudD0zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnOS4zIC0zIDIzeDk5eScpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJy4nLCBsYW1iZGEgbTogciJcbiIsICd4JyksICdcXG4nKQpAQCAtMTAwLDExICsxMTgsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyg/UDx1bms+eCknLCAnXGc8dW5rPlxnPHVuaz4nLCAneHgnKSwgJ3h4eHgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKD9QPHVuaz54KScsICdcZzwxPlxnPDE+JywgJ3h4JyksICd4eHh4JykKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignYScscidcdFxuXHZcclxmXGFcYlxCXFpcYVxBXHdcV1xzXFNcZFxEJywnYScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdcdFxuXHZcclxmXGFcYlxcQlxcWlxhXFxBXFx3XFxXXFxzXFxTXFxkXFxEJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ2EnLCAnXHRcblx2XHJcZlxhJywgJ2EnKSwgJ1x0XG5cdlxyXGZcYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdhJywgJ1x0XG5cdlxyXGZcYScsICdhJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGNocig5KStjaHIoMTApK2NocigxMSkrY2hyKDEzKStjaHIoMTIpK2Nocig3KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdhJywgcidcdFxuXHZcclxmXGFcYicsICdhJyksICdcdFxuXHZcclxmXGFcYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdhJywgJ1x0XG5cdlxyXGZcYVxiJywgJ2EnKSwgJ1x0XG5cdlxyXGZcYVxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ2EnLCAnXHRcblx2XHJcZlxhXGInLCAnYScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChjaHIoOSkrY2hyKDEwKStjaHIoMTEpK2NocigxMykrY2hyKDEyKStjaHIoNykrY2hyKDgpKSkKKyAgICAgICAgZm9yIGMgaW4gJ2NkZWhpamtsbW9wcXN1d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGMpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignYScsICdcXCcgKyBjLCAnYScpLCAnXFwnICsgYykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignXlxzKicsICdYJywgJ3Rlc3QnKSwgJ1h0ZXN0JykKIApAQCAtMTQ1LDYgKzE2Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMDA5JywgJ3gnKSwgJ1wwJyArICc5JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wxMTEnLCAneCcpLCAnXDExMScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMTE3JywgJ3gnKSwgJ1wxMTcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDM3NycsICd4JyksICdcMzc3JykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDExMTEnLCAneCcpLCAnXDExMTEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDExMTEnLCAneCcpLCAnXDExMScgKyAnMScpCkBAIC0xNTUsMjEgKzE3NywyNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDA5JywgJ3gnKSwgJ1wwJyArICc5JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wwYScsICd4JyksICdcMCcgKyAnYScpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1w0MDAnLCAneCcpLCAnXDAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDc3NycsICd4JyksICdcMzc3JykKKyAgICAgICAgc2VsZi5jaGVja1RlbXBsYXRlRXJyb3IoJ3gnLCByJ1w0MDAnLCAneCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInb2N0YWwgZXNjYXBlIHZhbHVlIFw0MDAgb3V0c2lkZSBvZiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIncmFuZ2UgMC0wbzM3NycsIDApCisgICAgICAgIHNlbGYuY2hlY2tUZW1wbGF0ZUVycm9yKCd4JywgcidcNzc3JywgJ3gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ29jdGFsIGVzY2FwZSB2YWx1ZSBcNzc3IG91dHNpZGUgb2YgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ3JhbmdlIDAtMG8zNzcnLCAwKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMScsICd4JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJ3gnLCByJ1w4JywgJ3gnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDknLCAneCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMTEnLCAneCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMTgnLCAneCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMWEnLCAneCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcOTAnLCAneCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcOTknLCAneCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMTE4JywgJ3gnKSAjIHInXDExJyArICc4JwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDExYScsICd4JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJ3gnLCByJ1wxODEnLCAneCcpICMgcidcMTgnICsgJzEnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcODAwJywgJ3gnKSAjIHInXDgwJyArICcwJworICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcigneCcsIHInXDEnLCAneCcsICdpbnZhbGlkIGdyb3VwIHJlZmVyZW5jZScpCisgICAgICAgIHNlbGYuY2hlY2tUZW1wbGF0ZUVycm9yKCd4JywgcidcOCcsICd4JywgJ2ludmFsaWQgZ3JvdXAgcmVmZXJlbmNlJykKKyAgICAgICAgc2VsZi5jaGVja1RlbXBsYXRlRXJyb3IoJ3gnLCByJ1w5JywgJ3gnLCAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcigneCcsIHInXDExJywgJ3gnLCAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcigneCcsIHInXDE4JywgJ3gnLCAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcigneCcsIHInXDFhJywgJ3gnLCAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcigneCcsIHInXDkwJywgJ3gnLCAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcigneCcsIHInXDk5JywgJ3gnLCAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcigneCcsIHInXDExOCcsICd4JywgJ2ludmFsaWQgZ3JvdXAgcmVmZXJlbmNlJykgIyByJ1wxMScgKyAnOCcKKyAgICAgICAgc2VsZi5jaGVja1RlbXBsYXRlRXJyb3IoJ3gnLCByJ1wxMWEnLCAneCcsICdpbnZhbGlkIGdyb3VwIHJlZmVyZW5jZScpCisgICAgICAgIHNlbGYuY2hlY2tUZW1wbGF0ZUVycm9yKCd4JywgcidcMTgxJywgJ3gnLCAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnKSAjIHInXDE4JyArICcxJworICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcigneCcsIHInXDgwMCcsICd4JywgJ2ludmFsaWQgZ3JvdXAgcmVmZXJlbmNlJykgIyByJ1w4MCcgKyAnMCcKIAogICAgICAgICAjIGluIHB5dGhvbjIuMyAoZXRjKSwgdGhlc2UgbG9vcCBlbmRsZXNzbHkgaW4gc3JlX3BhcnNlci5weQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKCgoKCgoKCgoKCh4KSkpKSkpKSkpKSknLCByJ1wxMScsICd4JyksICd4JykKQEAgLTE4MCw3ICsyMDYsNyBAQAogCiAgICAgZGVmIHRlc3RfcXVhbGlmaWVkX3JlX3N1YihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ2EnLCAnYicsICdhYWFhYScpLCAnYmJiYmInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignYScsICdiJywgJ2FhYWFhJywgMSksICdiYWFhYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdhJywgJ2InLCAnYWFhYWEnLCBjb3VudD0xKSwgJ2JhYWFhJykKIAogICAgIGRlZiB0ZXN0X2J1Z18xMTQ2NjAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKHInKFxTKVxzKyhcUyknLCByJ1wxIFwyJywgJ2hlbGxvICB0aGVyZScpLApAQCAtMTk0LDc1ICsyMjAsMTA1IEBACiAgICAgZGVmIHRlc3Rfc3ltYm9saWNfZ3JvdXBzKHNlbGYpOgogICAgICAgICByZS5jb21waWxlKCcoP1A8YT54KSg/UD1hKSg/KGEpeSknKQogICAgICAgICByZS5jb21waWxlKCcoP1A8YTE+eCkoP1A9YTEpKD8oYTEpeSknKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UDxhPikoP1A8YT4pJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1B4KScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD9QPSknKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UD0xKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD9QPWEpJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A9YTEpJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A9YS4pJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A8KScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD9QPD4pJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A8MT4pJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A8YS4+KScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD8oKSknKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/KGEpKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD8oMWEpKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD8oYS4pKScpCisgICAgICAgIHJlLmNvbXBpbGUoJyg/UDxhMT54KVwxKD8oMSl5KScpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoJyg/UDxhPikoP1A8YT4pJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVkZWZpbml0aW9uIG9mIGdyb3VwIG5hbWUgJ2EnIGFzIGdyb3VwIDI7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FzIGdyb3VwIDEiKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKCcoP1A8YT4oP1A9YSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHJlZmVyIHRvIGFuIG9wZW4gZ3JvdXAiLCAxMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcignKD9QeHkpJywgJ3Vua25vd24gZXh0ZW5zaW9uID9QeCcpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoJyg/UDxhPikoP1A9YScsICdtaXNzaW5nICksIHVudGVybWluYXRlZCBuYW1lJywgMTEpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoJyg/UD0nLCAnbWlzc2luZyBncm91cCBuYW1lJywgNCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcignKD9QPSknLCAnbWlzc2luZyBncm91cCBuYW1lJywgNCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcignKD9QPTEpJywgImJhZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSAnMSciLCA0KQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKCcoP1A9YSknLCAidW5rbm93biBncm91cCBuYW1lICdhJyIpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoJyg/UD1hMSknLCAidW5rbm93biBncm91cCBuYW1lICdhMSciKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKCcoP1A9YS4pJywgImJhZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSAnYS4nIiwgNCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcignKD9QPCknLCAnbWlzc2luZyA+LCB1bnRlcm1pbmF0ZWQgbmFtZScsIDQpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoJyg/UDxhJywgJ21pc3NpbmcgPiwgdW50ZXJtaW5hdGVkIG5hbWUnLCA0KQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKCcoP1A8JywgJ21pc3NpbmcgZ3JvdXAgbmFtZScsIDQpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoJyg/UDw+KScsICdtaXNzaW5nIGdyb3VwIG5hbWUnLCA0KQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKD9QPDE+KScsICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJzEnIiwgNCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyJyg/UDxhLj4pJywgImJhZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSAnYS4nIiwgNCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyJyg/KCcsICdtaXNzaW5nIGdyb3VwIG5hbWUnLCAzKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKD8oKSknLCAnbWlzc2luZyBncm91cCBuYW1lJywgMykKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyJyg/KGEpKScsICJ1bmtub3duIGdyb3VwIG5hbWUgJ2EnIiwgMykKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyJyg/KC0xKSknLCAiYmFkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lICctMSciLCAzKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKD8oMWEpKScsICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJzFhJyIsIDMpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoPyhhLikpJywgImJhZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSAnYS4nIiwgMykKICAgICAgICAgIyBOZXcgdmFsaWQvaW52YWxpZCBpZGVudGlmaWVycyBpbiBQeXRob24gMwogICAgICAgICByZS5jb21waWxlKCcoP1A8wrU+eCkoP1A9wrUpKD8owrUpeSknKQogICAgICAgICByZS5jb21waWxlKCcoP1A88J2UmPCdlKvwnZSm8J2UoPCdlKzwnZSh8J2Uoj54KSg/UD3wnZSY8J2Uq/CdlKbwnZSg8J2UrPCdlKHwnZSiKSg/KPCdlJjwnZSr8J2UpvCdlKDwnZSs8J2UofCdlKIpeSknKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UDzCqT54KScpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoJyg/UDzCqT54KScsICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJ8KpJyIsIDQpCisgICAgICAgICMgU3VwcG9ydCA+IDEwMCBncm91cHMuCisgICAgICAgIHBhdCA9ICd8Jy5qb2luKCd4KD9QPGElZD4leCl5JyAlIChpLCBpKSBmb3IgaSBpbiByYW5nZSgxLCAyMDAgKyAxKSkKKyAgICAgICAgcGF0ID0gJyg/OiVzKSg/KDIwMCl6fHQpJyAlIHBhdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHBhdCwgJ3hjOHl6Jykuc3BhbigpLCAoMCwgNSkpCiAKICAgICBkZWYgdGVzdF9zeW1ib2xpY19yZWZzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCknLCAnXGc8YScsICd4eCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZzwnLCAneHgnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCknLCAnXGcnLCAneHgnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCknLCAnXGc8YSBhPicsICd4eCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZzw+JywgJ3h4JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJyg/UDxhPngpJywgJ1xnPDFhMT4nLCAneHgnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZzxhYj4nLCAneHgnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCl8KD9QPGI+eSknLCAnXGc8Yj4nLCAneHgnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCl8KD9QPGI+eSknLCAnXFwyJywgJ3h4JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJyg/UDxhPngpJywgJ1xnPC0xPicsICd4eCcpCisgICAgICAgIHNlbGYuY2hlY2tUZW1wbGF0ZUVycm9yKCcoP1A8YT54KScsICdcZzxhJywgJ3h4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcgPiwgdW50ZXJtaW5hdGVkIG5hbWUnLCAzKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcignKD9QPGE+eCknLCAnXGc8JywgJ3h4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcgZ3JvdXAgbmFtZScsIDMpCisgICAgICAgIHNlbGYuY2hlY2tUZW1wbGF0ZUVycm9yKCcoP1A8YT54KScsICdcZycsICd4eCcsICdtaXNzaW5nIDwnLCAyKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcignKD9QPGE+eCknLCAnXGc8YSBhPicsICd4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJ2EgYSciLCAzKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcignKD9QPGE+eCknLCAnXGc8PicsICd4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaXNzaW5nIGdyb3VwIG5hbWUnLCAzKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcignKD9QPGE+eCknLCAnXGc8MWExPicsICd4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJzFhMSciLCAzKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcignKD9QPGE+eCknLCByJ1xnPDI+JywgJ3h4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQgZ3JvdXAgcmVmZXJlbmNlJykKKyAgICAgICAgc2VsZi5jaGVja1RlbXBsYXRlRXJyb3IoJyg/UDxhPngpJywgcidcMicsICd4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGdyb3VwIHJlZmVyZW5jZScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbmRleEVycm9yLCAidW5rbm93biBncm91cCBuYW1lICdhYiciKToKKyAgICAgICAgICAgIHJlLnN1YignKD9QPGE+eCknLCAnXGc8YWI+JywgJ3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyg/UDxhPngpfCg/UDxiPnkpJywgcidcZzxiPicsICd4eCcpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyg/UDxhPngpfCg/UDxiPnkpJywgcidcMicsICd4eCcpLCAnJykKKyAgICAgICAgc2VsZi5jaGVja1RlbXBsYXRlRXJyb3IoJyg/UDxhPngpJywgJ1xnPC0xPicsICd4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUgJy0xJyIsIDMpCiAgICAgICAgICMgTmV3IHZhbGlkL2ludmFsaWQgaWRlbnRpZmllcnMgaW4gUHl0aG9uIDMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyg/UDzCtT54KScsIHInXGc8wrU+JywgJ3h4JyksICd4eCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCcoP1A88J2UmPCdlKvwnZSm8J2UoPCdlKzwnZSh8J2Uoj54KScsIHInXGc88J2UmPCdlKvwnZSm8J2UoPCdlKzwnZSh8J2Uoj4nLCAneHgnKSwgJ3h4JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJyg/UDxhPngpJywgcidcZzzCqT4nLCAneHgnKQorICAgICAgICBzZWxmLmNoZWNrVGVtcGxhdGVFcnJvcignKD9QPGE+eCknLCAnXGc8wqk+JywgJ3h4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBjaGFyYWN0ZXIgaW4gZ3JvdXAgbmFtZSAnwqknIiwgMykKKyAgICAgICAgIyBTdXBwb3J0ID4gMTAwIGdyb3Vwcy4KKyAgICAgICAgcGF0ID0gJ3wnLmpvaW4oJ3goP1A8YSVkPiV4KXknICUgKGksIGkpIGZvciBpIGluIHJhbmdlKDEsIDIwMCArIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihwYXQsICdcZzwyMDA+JywgJ3hjOHl6eGM4eScpLCAnYzh6YzgnKQogCiAgICAgZGVmIHRlc3RfcmVfc3VibihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWJuKCIoP2kpYisiLCAieCIsICJiYmJiIEJCQkIiKSwgKCd4IHgnLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWJuKCJiKyIsICJ4IiwgImJiYmIgQkJCQiIpLCAoJ3ggQkJCQicsIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIrIiwgIngiLCAieHl6IiksICgneHl6JywgMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3VibigiYioiLCAieCIsICJ4eXoiKSwgKCd4eHh5eHp4JywgNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3VibigiYioiLCAieCIsICJ4eXoiLCAyKSwgKCd4eHh5eicsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIqIiwgIngiLCAieHl6IiwgY291bnQ9MiksICgneHh4eXonLCAyKSkKIAogICAgIGRlZiB0ZXN0X3JlX3NwbGl0KHNlbGYpOgogICAgICAgICBmb3Igc3RyaW5nIGluICI6YTpiOjpjIiwgUygiOmE6Yjo6YyIpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICdhJywgJ2InLCAnJywgJ2MnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6KyIsIHN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnYScsICdiJywgJ2MnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIig6KykiLCBzdHJpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOjonLCAnYyddKQogICAgICAgICBmb3Igc3RyaW5nIGluIChiIjphOmI6OmMiLCBCKGIiOmE6Yjo6YyIpLCBieXRlYXJyYXkoYiI6YTpiOjpjIiksCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiI6YTpiOjpjIikpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOiIsIHN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYidhJywgYidiJywgYicnLCBiJ2MnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIjoqIiwgc3RyaW5nKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIjorIiwgc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJ2MnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIig6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiKDorKSIsIHN0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYic6JywgYidhJywgYic6JywgYidiJywgYic6OicsIGInYyddKQogICAgICAgICBmb3IgYSwgYiwgYyBpbiAoIlx4ZTBceGRmXHhlNyIsICJcdTA0MzBcdTA0MzFcdTA0MzIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlxVMDAwMWQ0OWNcVTAwMDFkNDllXFUwMDAxZDRiNSIpOgogICAgICAgICAgICAgc3RyaW5nID0gIjolczolczo6JXMiICUgKGEsIGIsIGMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwgWycnLCBhLCBiLCAnJywgY10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksIFsnJywgYSwgYiwgY10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjorIiwgc3RyaW5nKSwgWycnLCBhLCBiLCBjXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KykiLCBzdHJpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICc6JywgYSwgJzonLCBiLCAnOjonLCBjXSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoPzo6KikiLCAiOmE6Yjo6YyIpLCBbJycsICdhJywgJ2InLCAnYyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOikqIiwgIjphOmI6OmMiKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKD86OispIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDopKyIsICI6YTpiOjpjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6JywgJ2MnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKFtiOl0rKSIsICI6YTpiOjpjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzpiOjonLCAnYyddKQpAQCAtMjcyLDEzICszMjgsMzQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKD86Yil8KD86OispIiwgIjphOmI6OmMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICdhJywgJycsICcnLCAnYyddKQogCisgICAgICAgIGZvciBzZXAsIGV4cGVjdGVkIGluIFsKKyAgICAgICAgICAgICgnOionLCBbJycsICdhJywgJ2InLCAnYyddKSwKKyAgICAgICAgICAgICgnKD86OiopJywgWycnLCAnYScsICdiJywgJ2MnXSksCisgICAgICAgICAgICAoJyg6KiknLCBbJycsICc6JywgJ2EnLCAnOicsICdiJywgJzo6JywgJ2MnXSksCisgICAgICAgICAgICAoJyg6KSonLCBbJycsICc6JywgJ2EnLCAnOicsICdiJywgJzonLCAnYyddKSwKKyAgICAgICAgXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHNlcD1zZXApLCBzZWxmLmFzc2VydFdhcm5zKEZ1dHVyZVdhcm5pbmcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChzZXAsICc6YTpiOjpjJyksIGV4cGVjdGVkKQorCisgICAgICAgIGZvciBzZXAsIGV4cGVjdGVkIGluIFsKKyAgICAgICAgICAgICgnJywgWyc6YTpiOjpjJ10pLAorICAgICAgICAgICAgKHInXGInLCBbJzphOmI6OmMnXSksCisgICAgICAgICAgICAocicoPz06KScsIFsnOmE6Yjo6YyddKSwKKyAgICAgICAgICAgIChyJyg/PD06KScsIFsnOmE6Yjo6YyddKSwKKyAgICAgICAgXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHNlcD1zZXApLCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoc2VwLCAnOmE6Yjo6YycpLCBleHBlY3RlZCkKKwogICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9yZV9zcGxpdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsICI6YTpiOjpjIiwgMiksIFsnJywgJ2EnLCAnYjo6YyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCc6JywgJ2E6YjpjOmQnLCAyKSwgWydhJywgJ2InLCAnYzpkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KSIsICI6YTpiOjpjIiwgMiksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjoiLCAiOmE6Yjo6YyIsIG1heHNwbGl0PTIpLCBbJycsICdhJywgJ2I6OmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgnOicsICdhOmI6YzpkJywgbWF4c3BsaXQ9MiksIFsnYScsICdiJywgJ2M6ZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOikiLCAiOmE6Yjo6YyIsIG1heHNwbGl0PTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2I6OmMnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiwgMiksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KykiLCAiOmE6Yjo6YyIsIG1heHNwbGl0PTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2I6OmMnXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKEZ1dHVyZVdhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiwgbWF4c3BsaXQ9MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2I6OmMnXSkKIAogICAgIGRlZiB0ZXN0X3JlX2ZpbmRhbGwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiOisiLCAiYWJjIiksIFtdKQpAQCAtNDA1LDYgKzQ4MiwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLm1hdGNoKCdhYmQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5tYXRjaCgnYWMnKSkKIAorICAgICAgICAjIFN1cHBvcnQgPiAxMDAgZ3JvdXBzLgorICAgICAgICBwYXQgPSAnfCcuam9pbigneCg/UDxhJWQ+JXgpeScgJSAoaSwgaSkgZm9yIGkgaW4gcmFuZ2UoMSwgMjAwICsgMSkpCisgICAgICAgIHBhdCA9ICcoPzolcykoPygyMDApeiknICUgcGF0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocGF0LCAneGM4eXonKS5zcGFuKCksICgwLCA1KSkKKworICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKD9QPGE+KSg/KDApKScsICdiYWQgZ3JvdXAgbnVtYmVyJywgMTApCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoKSg/KDEpYXxiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlzc2luZyApLCB1bnRlcm1pbmF0ZWQgc3VicGF0dGVybicsIDIpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoKSg/KDEpYXxifGMpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9uYWwgYmFja3JlZiB3aXRoIG1vcmUgdGhhbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R3byBicmFuY2hlcycsIDEwKQorCisgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWZfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tUZW1wbGF0ZUVycm9yKCcoKScsICdcZzwlcz4nICUgc3JlX2NvbnN0YW50cy5NQVhHUk9VUFMsICd4eCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnZhbGlkIGdyb3VwIHJlZmVyZW5jZScsIDMpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoP1A8YT4pKD8oJWQpKScgJSBzcmVfY29uc3RhbnRzLk1BWEdST1VQUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnLCAxMCkKIAogICAgIGRlZiB0ZXN0X3JlX2dyb3VwcmVmKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMSQnLCAnfGF8JykuZ3JvdXBzKCksCkBAIC00MTgsNiArNTEyLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oPzooYSl8YykoXDEpPyQnLCAnYycpLmdyb3VwcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCBOb25lKSkKIAorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKGFiY1wxKScsICdjYW5ub3QgcmVmZXIgdG8gYW4gb3BlbiBncm91cCcsIDQpCisKICAgICBkZWYgdGVzdF9ncm91cGRpY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyg/UDxmaXJzdD5maXJzdCkgKD9QPHNlY29uZD5zZWNvbmQpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlyc3Qgc2Vjb25kJykuZ3JvdXBkaWN0KCksCkBAIC00MjgsNiArNTI0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IHNlY29uZCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmV4cGFuZChyIlwyIFwxIFxnPHNlY29uZD4gXGc8Zmlyc3Q+IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBmaXJzdCBzZWNvbmQgZmlyc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoP1A8Zmlyc3Q+Zmlyc3QpfCg/UDxzZWNvbmQ+c2Vjb25kKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZXhwYW5kKHIiXDIgXGc8c2Vjb25kPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIgIikKIAogICAgIGRlZiB0ZXN0X3JlcGVhdF9taW5tYXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCJeKFx3KXsxfSQiLCAiYWJjIikpCkBAIC00NTEsNiArNTUxLDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIl54ezN9JCIsICJ4eHgiKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDN9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHszLDN9JCIsICJ4eHgiKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDR9JCIsICJ4eHgiKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHszLDR9PyQiLCAieHh4IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgiXnh7M30/JCIsICJ4eHgiKSkKQEAgLTQ2MSw2ICs1NjIsOSBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXnh7fSQiLCAieHh4IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgiXnh7fSQiLCAieHt9IikpCiAKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyJ3h7MiwxfScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pbiByZXBlYXQgZ3JlYXRlciB0aGFuIG1heCByZXBlYXQnLCAyKQorCiAgICAgZGVmIHRlc3RfZ2V0YXR0cihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5jb21waWxlKCIoP2kpKGEpKGIpIikucGF0dGVybiwgIig/aSkoYSkoYikiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUoIig/aSkoYSkoYikiKS5mbGFncywgcmUuSSB8IHJlLlUpCkBAIC00NzUsNiArNTc5LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIihhKSIsICJhIikucmVncywgKCgwLCAxKSwgKDAsIDEpKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCIoYSkiLCAiYSIpLnJlKQogCisgICAgICAgICMgSXNzdWUgMTQyNjAuIGdyb3VwaW5kZXggc2hvdWxkIGJlIG5vbi1tb2RpZmlhYmxlIG1hcHBpbmcuCisgICAgICAgIHAgPSByZS5jb21waWxlKHInKD9pKSg/UDxmaXJzdD5hKSg/UDxvdGhlcj5iKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHAuZ3JvdXBpbmRleCksIFsnZmlyc3QnLCAnb3RoZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwaW5kZXhbJ290aGVyJ10sIDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAuZ3JvdXBpbmRleFsnb3RoZXInXSA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwaW5kZXhbJ290aGVyJ10sIDIpCisKICAgICBkZWYgdGVzdF9zcGVjaWFsX2VzY2FwZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGIoYi4pXGIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjZCBhYmMgYmNkIGJ4IikuZ3JvdXAoMSksICJieCIpCkBAIC00ODQsMTAgKzU5Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5BU0NJSSkuZ3JvdXAoMSksICJieCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuQVNDSUkpLmdyb3VwKDEpLCAiYngiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiKGIuKVxiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiY2QgYWJjIGJjZCBieCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksICJieCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuTE9DQUxFKS5ncm91cCgxKSwgImJ4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsICJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJhYmMiLCByZS5NKS5ncm91cCgwKSwgImFiYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJcbmFiY1xuIiwgcmUuTSkpCkBAIC01MDgsMTEgKzYxNiwzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjFhYSEgYSIpLmdyb3VwKDApLCBiIjFhYSEgYSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGRcRFx3XFdcc1xTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjFhYSEgYSIsIHJlLkFTQ0lJKS5ncm91cCgwKSwgIjFhYSEgYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGRcRFx3XFdcc1xTIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjFhYSEgYSIsIHJlLkxPQ0FMRSkuZ3JvdXAoMCksICIxYWEhIGEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChiciJcZFxEXHdcV1xzXFMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjFhYSEgYSIsIHJlLkxPQ0FMRSkuZ3JvdXAoMCksIGIiMWFhISBhIikKIAorICAgIGRlZiB0ZXN0X290aGVyX2VzY2FwZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoIlxcIiwgJ2JhZCBlc2NhcGUgKGVuZCBvZiBwYXR0ZXJuKScsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociJcKCIsICcoJykuZ3JvdXAoKSwgJygnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyIlwoIiwgJyknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIlxcIiwgJ1xcJykuZ3JvdXAoKSwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIltcXV0iLCAnXScpLmdyb3VwKCksICddJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gociJbXF1dIiwgJ1snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIlthXC1jXSIsICctJykuZ3JvdXAoKSwgJy0nKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyIlthXC1jXSIsICdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociJbXF5hXSsiLCAnYV4nKS5ncm91cCgpLCAnYV4nKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyIltcXmFdKyIsICdiJykpCisgICAgICAgIHJlLnB1cmdlKCkgICMgZm9yIHdhcm5pbmdzCisgICAgICAgIGZvciBjIGluICdjZWdoaWprbG1vcHF5ekNFRkdISUpLTE1OT1BRUlRWWFknOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYyk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKCdcXCVjJyAlIGMsIGMpLmdyb3VwKCksIGMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdcXCVjJyAlIGMsICdhJykpCisgICAgICAgIGZvciBjIGluICdjZWdoaWprbG1vcHF5ekFCQ0VGR0hJSktMTU5PUFFSVFZYWVonOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYyk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKCdbXFwlY10nICUgYywgYykuZ3JvdXAoKSwgYykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goJ1tcXCVjXScgJSBjLCAnYScpKQorCiAgICAgZGVmIHRlc3Rfc3RyaW5nX2JvdW5kYXJpZXMoc2VsZik6CiAgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMDcxMwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiKGFiYylcYiIsICJhYmMiKS5ncm91cCgxKSwKQEAgLTU3NCw5ICs3MDMsNiBAQAogICAgICAgICAjIEdyb3VwIHJlZmVyZW5jZS4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKGEpYig/PVwxKWEnLCAnYWJhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKGEpYig/PVwxKWMnLCAnYWJhYycpKQotICAgICAgICAjIE5hbWVkIGdyb3VwIHJlZmVyZW5jZS4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKD9QPGc+YSliKD89KD9QPWcpKWEnLCAnYWJhJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD9QPGc+YSliKD89KD9QPWcpKWMnLCAnYWJhYycpKQogICAgICAgICAjIENvbmRpdGlvbmFsIGdyb3VwIHJlZmVyZW5jZS4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKD86KGEpfCh4KSliKD89KD8oMil4fGMpKWMnLCAnYWJjJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD86KGEpfCh4KSliKD89KD8oMiljfHgpKWMnLCAnYWJjJykpCkBAIC01OTQsMTMgKzcyMCwyNSBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ2FiKD88IWIpYycsICdhYmMnKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInYWIoPzwhYyljJywgJ2FiYycpKQogICAgICAgICAjIEdyb3VwIHJlZmVyZW5jZS4KLSAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgcmUuY29tcGlsZSwgcicoYSlhKD88PVwxKWMnKQotICAgICAgICAjIE5hbWVkIGdyb3VwIHJlZmVyZW5jZS4KLSAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgcmUuY29tcGlsZSwgcicoP1A8Zz5hKWEoPzw9KD9QPWcpKWMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocicoYSlhKD88PVwxKWMnLCAnYWFjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKGEpYig/PD1cMSlhJywgJ2FiYWEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoYSlhKD88IVwxKWMnLCAnYWFjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJyhhKWIoPzwhXDEpYScsICdhYmFhJykpCiAgICAgICAgICMgQ29uZGl0aW9uYWwgZ3JvdXAgcmVmZXJlbmNlLgotICAgICAgICBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nLCByZS5jb21waWxlLCByJyhhKWIoPzw9KD8oMSlifHgpKWMnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJyg/OihhKXwoeCkpYig/PD0oPygyKXh8YykpYycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoPzooYSl8KHgpKWIoPzw9KD8oMilifHgpKWMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJyg/OihhKXwoeCkpYig/PD0oPygyKXh8YikpYycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoPzooYSl8KHgpKWIoPzw9KD8oMSljfHgpKWMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJyg/OihhKXwoeCkpYig/PD0oPygxKWJ8eCkpYycsICdhYmMnKSkKICAgICAgICAgIyBHcm91cCB1c2VkIGJlZm9yZSBkZWZpbmVkLgotICAgICAgICBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nLCByZS5jb21waWxlLCByJyhhKWIoPzw9KD8oMilifHgpKShjKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCByJyhhKWIoPzw9KD8oMilifHgpKShjKScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKGEpYig/PD0oPygxKWN8eCkpKGMpJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocicoYSliKD88PSg/KDEpYnx4KSkoYyknLCAnYWJjJykpCisgICAgICAgICMgR3JvdXAgZGVmaW5lZCBpbiB0aGUgc2FtZSBsb29rYmVoaW5kIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsIHInKGEpYig/PD0oLilcMikoYyknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgcicoYSliKD88PSg/UDxhPi4pKD9QPWEpKShjKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCByJyhhKWIoPzw9KGEpKD8oMilifHgpKShjKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCByJyhhKWIoPzw9KC4pKD88PVwyKSkoYyknKQogCiAgICAgZGVmIHRlc3RfaWdub3JlX2Nhc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImFiYyIsICJBQkMiLCByZS5JKS5ncm91cCgwKSwgIkFCQyIpCkBAIC02OTIsOSArODMwLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3NyZS5nZXRsb3dlcihvcmQoJ0EnKSwgMCksIG9yZCgnYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zcmUuZ2V0bG93ZXIob3JkKCdBJyksIHJlLkxPQ0FMRSksIG9yZCgnYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zcmUuZ2V0bG93ZXIob3JkKCdBJyksIHJlLlVOSUNPREUpLCBvcmQoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3JlLmdldGxvd2VyKG9yZCgnQScpLCByZS5BU0NJSSksIG9yZCgnYScpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImFiYyIsICJBQkMiLCByZS5JKS5ncm91cCgwKSwgIkFCQyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYiJhYmMiLCBiIkFCQyIsIHJlLkkpLmdyb3VwKDApLCBiIkFCQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImFiYyIsICJBQkMiLCByZS5JfHJlLkEpLmdyb3VwKDApLCAiQUJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiImFiYyIsIGIiQUJDIiwgcmUuSXxyZS5MKS5ncm91cCgwKSwgYiJBQkMiKQogCiAgICAgZGVmIHRlc3Rfbm90X2xpdGVyYWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKCJccyhbXmFdKSIsICIgYiIpLmdyb3VwKDEpLCAiYiIpCkBAIC03NzksOCArOTIwLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuWCwgcmUuVkVSQk9TRSkKIAogICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgotICAgICAgICBmb3IgZmxhZyBpbiBbcmUuSSwgcmUuTSwgcmUuWCwgcmUuUywgcmUuTF06CisgICAgICAgIGZvciBmbGFnIGluIFtyZS5JLCByZS5NLCByZS5YLCByZS5TLCByZS5BLCByZS5VXToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5jb21waWxlKCdecGF0dGVybiQnLCBmbGFnKSkKKyAgICAgICAgZm9yIGZsYWcgaW4gW3JlLkksIHJlLk0sIHJlLlgsIHJlLlMsIHJlLkEsIHJlLkxdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLmNvbXBpbGUoYidecGF0dGVybiQnLCBmbGFnKSkKIAogICAgIGRlZiB0ZXN0X3NyZV9jaGFyYWN0ZXJfbGl0ZXJhbHMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIFswLCA4LCAxNiwgMzIsIDY0LCAxMjcsIDEyOCwgMjU1LCAyNTYsIDB4RkZGRiwgMHgxMDAwMCwgMHgxMEZGRkZdOgpAQCAtODAyLDE1ICs5NDUsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDA4IiwgIlwwMDA4IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwwMSIsICJcMDAxIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwwMTgiLCAiXDAwMTgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDU2NyIsIGNocigwbzE2NykpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiXDkxMSIsICIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiXHgxIiwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJceDF6IiwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJcdTEyMyIsICIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiXHUxMjN6IiwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJcVTAwMDEyMzQiLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCByIlxVMDAwMTIzNHoiLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCByIlxVMDAxMTAwMDAiLCAiIikKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIlw1NjciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInb2N0YWwgZXNjYXBlIHZhbHVlIFw1Njcgb3V0c2lkZSBvZiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidyYW5nZSAwLTBvMzc3JywgMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIlw5MTEiLCAnaW52YWxpZCBncm91cCByZWZlcmVuY2UnLCAwKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHIiXHgxIiwgcidpbmNvbXBsZXRlIGVzY2FwZSBceDEnLCAwKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHIiXHgxeiIsIHInaW5jb21wbGV0ZSBlc2NhcGUgXHgxJywgMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIlx1MTIzIiwgcidpbmNvbXBsZXRlIGVzY2FwZSBcdTEyMycsIDApCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IociJcdTEyM3oiLCByJ2luY29tcGxldGUgZXNjYXBlIFx1MTIzJywgMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIlxVMDAwMTIzNCIsIHInaW5jb21wbGV0ZSBlc2NhcGUgXFUwMDAxMjM0JywgMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIlxVMDAwMTIzNHoiLCByJ2luY29tcGxldGUgZXNjYXBlIFxVMDAwMTIzNCcsIDApCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IociJcVTAwMTEwMDAwIiwgcidiYWQgZXNjYXBlIFxVMDAxMTAwMDAnLCAwKQogCiAgICAgZGVmIHRlc3Rfc3JlX2NoYXJhY3Rlcl9jbGFzc19saXRlcmFscyhzZWxmKToKICAgICAgICAgZm9yIGkgaW4gWzAsIDgsIDE2LCAzMiwgNjQsIDEyNywgMTI4LCAyNTUsIDI1NiwgMHhGRkZGLCAweDEwMDAwLCAweDEwRkZGRl06CkBAIC04MzAsMTIgKzk3NSwxNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1xVJTA4eF0iICUgaSwgY2hyKGkpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVSUwOHgwXSIgJSBpLCBjaHIoaSkrIjAiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVSUwOHh6XSIgJSBpLCBjaHIoaSkrInoiKSkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIltcNTY3XSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidvY3RhbCBlc2NhcGUgdmFsdWUgXDU2NyBvdXRzaWRlIG9mICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ3JhbmdlIDAtMG8zNzcnLCAxKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHIiW1w5MTFdIiwgcidiYWQgZXNjYXBlIFw5JywgMSkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIltceDF6XSIsIHInaW5jb21wbGV0ZSBlc2NhcGUgXHgxJywgMSkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIltcdTEyM3pdIiwgcidpbmNvbXBsZXRlIGVzY2FwZSBcdTEyMycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IociJbXFUwMDAxMjM0el0iLCByJ2luY29tcGxldGUgZXNjYXBlIFxVMDAwMTIzNCcsIDEpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IociJbXFUwMDExMDAwMF0iLCByJ2JhZCBlc2NhcGUgXFUwMDExMDAwMCcsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVTAwMDFkNDljLVxVMDAwMWQ0YjVdIiwgIlxVMDAwMWQ0OWUiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCByIltcOTExXSIsICIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiW1x4MXpdIiwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJbXHUxMjN6XSIsICIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiW1xVMDAwMTIzNHpdIiwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJbXFUwMDExMDAwMF0iLCAiIikKIAogICAgIGRlZiB0ZXN0X3NyZV9ieXRlX2xpdGVyYWxzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiBbMCwgOCwgMTYsIDMyLCA2NCwgMTI3LCAxMjgsIDI1NV06CkBAIC04NDUsMTYgKzk5MywyMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIlx4JTAyeCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiXHglMDJ4MCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjAiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJceCUwMnh6IiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pK2IieiIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXHUiLCBiJ3UnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlxVIiwgYidVJykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlx1MTIzNCIsIGIndTEyMzQnKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXFUwMDAxMjM0NSIsIGInVTAwMDEyMzQ1JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiciJcMCIsIGIiXDAwMCIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXDA4IiwgYiJcMDAwOCIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXDAxIiwgYiJcMDAxIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiciJcMDE4IiwgYiJcMDAxOCIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXDU2NyIsIGJ5dGVzKFswbzE2N10pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJcOTExIiwgYiIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIGJyIlx4MSIsIGIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJceDF6IiwgYiIiKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKGJyIlw1NjciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInb2N0YWwgZXNjYXBlIHZhbHVlIFw1Njcgb3V0c2lkZSBvZiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidyYW5nZSAwLTBvMzc3JywgMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihiciJcOTExIiwgJ2ludmFsaWQgZ3JvdXAgcmVmZXJlbmNlJywgMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihiciJceDEiLCByJ2luY29tcGxldGUgZXNjYXBlIFx4MScsIDApCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoYnIiXHgxeiIsIHInaW5jb21wbGV0ZSBlc2NhcGUgXHgxJywgMCkKIAogICAgIGRlZiB0ZXN0X3NyZV9ieXRlX2NsYXNzX2xpdGVyYWxzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiBbMCwgOCwgMTYsIDMyLCA2NCwgMTI3LCAxMjgsIDI1NV06CkBAIC04NjYsMTAgKzEwMTgsMjYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJbXHglMDJ4XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1x4JTAyeDBdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJbXHglMDJ4el0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiW1x1XSIsIGIndScpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiW1xVXSIsIGInVScpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIGJyIltcOTExXSIsIGIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJbXHgxel0iLCBiIiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIltcdTEyMzRdIiwgYid1JykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIltcVTAwMDEyMzQ1XSIsIGInVScpKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKGJyIltcNTY3XSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidvY3RhbCBlc2NhcGUgdmFsdWUgXDU2NyBvdXRzaWRlIG9mICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ3JhbmdlIDAtMG8zNzcnLCAxKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKGJyIltcOTExXSIsIHInYmFkIGVzY2FwZSBcOScsIDEpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IoYnIiW1x4MXpdIiwgcidpbmNvbXBsZXRlIGVzY2FwZSBceDEnLCAxKQorCisgICAgZGVmIHRlc3RfY2hhcmFjdGVyX3NldF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocidbJywgJ3VudGVybWluYXRlZCBjaGFyYWN0ZXIgc2V0JywgMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyJ1teJywgJ3VudGVybWluYXRlZCBjaGFyYWN0ZXIgc2V0JywgMCkKKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyJ1thJywgJ3VudGVybWluYXRlZCBjaGFyYWN0ZXIgc2V0JywgMCkKKyAgICAgICAgIyBidWcgNTQ1ODU1IC0tIFRoaXMgcGF0dGVybiBmYWlsZWQgdG8gY2F1c2UgYSBjb21waWxlIGVycm9yIGFzIGl0CisgICAgICAgICMgc2hvdWxkLCBpbnN0ZWFkIHByb3Zva2luZyBhIFR5cGVFcnJvci4KKyAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyIlthLSIsICd1bnRlcm1pbmF0ZWQgY2hhcmFjdGVyIHNldCcsIDApCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IociJbXHctYl0iLCByJ2JhZCBjaGFyYWN0ZXIgcmFuZ2UgXHctYicsIDEpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IociJbYS1cd10iLCByJ2JhZCBjaGFyYWN0ZXIgcmFuZ2UgYS1cdycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IociJbYi1hXSIsICdiYWQgY2hhcmFjdGVyIHJhbmdlIGItYScsIDEpCiAKICAgICBkZWYgdGVzdF9idWdfMTEzMjU0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpfChiKScsICdiJykuc3RhcnQoMSksIC0xKQpAQCAtODg0LDExICsxMDUyLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKD9QPGE+YShiKSkiLCAiYWIiKS5sYXN0Z3JvdXAsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKChhKSkiLCAiYSIpLmxhc3RpbmRleCwgMSkKIAotICAgIGRlZiB0ZXN0X2J1Z181NDU4NTUoc2VsZik6Ci0gICAgICAgICMgYnVnIDU0NTg1NSAtLSBUaGlzIHBhdHRlcm4gZmFpbGVkIHRvIGNhdXNlIGEgY29tcGlsZSBlcnJvciBhcyBpdAotICAgICAgICAjIHNob3VsZCwgaW5zdGVhZCBwcm92b2tpbmcgYSBUeXBlRXJyb3IuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnZm9vW2EtJykKLQogICAgIGRlZiB0ZXN0X2J1Z180MTg2MjYoc2VsZik6CiAgICAgICAgICMgYnVncyA0MTg2MjYgYXQgYWwuIC0tIFRlc3RpbmcgR3JlZyBDaGFwbWFuJ3MgYWRkaXRpb24gb2Ygb3AgY29kZQogICAgICAgICAjIFNSRV9PUF9NSU5fUkVQRUFUX09ORSBmb3IgZWxpbWluYXRpbmcgcmVjdXJzaW9uIG9uIHNpbXBsZSB1c2VzIG9mCkBAIC05MTIsNiArMTA3NSwyNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoeCkqeScsIDUwMDAwKid4JysneScpLmdyb3VwKDEpLCAneCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyh4KSo/eScsIDUwMDAwKid4JysneScpLmdyb3VwKDEpLCAneCcpCiAKKyAgICBkZWYgdGVzdF9ub3RoaW5nX3RvX3JlcGVhdChzZWxmKToKKyAgICAgICAgZm9yIHJlcHMgaW4gJyonLCAnKycsICc/JywgJ3sxLDJ9JzoKKyAgICAgICAgICAgIGZvciBtb2QgaW4gJycsICc/JzoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKCclcyVzJyAlIChyZXBzLCBtb2QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdGhpbmcgdG8gcmVwZWF0JywgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKCcoPzolcyVzKScgJSAocmVwcywgbW9kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3RoaW5nIHRvIHJlcGVhdCcsIDMpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9yZXBlYXQoc2VsZik6CisgICAgICAgIGZvciBvdXRlcl9yZXBzIGluICcqJywgJysnLCAnezEsMn0nOgorICAgICAgICAgICAgZm9yIG91dGVyX21vZCBpbiAnJywgJz8nOgorICAgICAgICAgICAgICAgIG91dGVyX29wID0gb3V0ZXJfcmVwcyArIG91dGVyX21vZAorICAgICAgICAgICAgICAgIGZvciBpbm5lcl9yZXBzIGluICcqJywgJysnLCAnPycsICd7MSwyfSc6CisgICAgICAgICAgICAgICAgICAgIGZvciBpbm5lcl9tb2QgaW4gJycsICc/JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyX29wID0gaW5uZXJfcmVwcyArIGlubmVyX21vZAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja1BhdHRlcm5FcnJvcihyJ3glcyVzJyAlIChpbm5lcl9vcCwgb3V0ZXJfb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwbGUgcmVwZWF0JywgMSArIGxlbihpbm5lcl9vcCkpCisKICAgICBkZWYgdGVzdF91bmxpbWl0ZWRfemVyb193aWR0aF9yZXBlYXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzk2NjkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoPzphPykqeScsICd6JykpCkBAIC0xMDYyLDggKzEyNDMsOCBAQAogCiAgICAgZGVmIHRlc3RfaW5saW5lX2ZsYWdzKHNlbGYpOgogICAgICAgICAjIEJ1ZyAjMTcwMAotICAgICAgICB1cHBlcl9jaGFyID0gY2hyKDB4MWVhMCkgIyBMYXRpbiBDYXBpdGFsIExldHRlciBBIHdpdGggRG90IEJlbGxvdwotICAgICAgICBsb3dlcl9jaGFyID0gY2hyKDB4MWVhMSkgIyBMYXRpbiBTbWFsbCBMZXR0ZXIgQSB3aXRoIERvdCBCZWxsb3cKKyAgICAgICAgdXBwZXJfY2hhciA9ICdcdTFlYTAnICMgTGF0aW4gQ2FwaXRhbCBMZXR0ZXIgQSB3aXRoIERvdCBCZWxvdworICAgICAgICBsb3dlcl9jaGFyID0gJ1x1MWVhMScgIyBMYXRpbiBTbWFsbCBMZXR0ZXIgQSB3aXRoIERvdCBCZWxvdwogCiAgICAgICAgIHAgPSByZS5jb21waWxlKHVwcGVyX2NoYXIsIHJlLkkgfCByZS5VKQogICAgICAgICBxID0gcC5tYXRjaChsb3dlcl9jaGFyKQpAQCAtMTE0Myw2ICsxMzI0LDUyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJlLmNvbXBpbGUsICcoP2EpXHcnLCByZS5VTklDT0RFKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByZS5jb21waWxlLCAnKD9hdSlcdycpCiAKKyAgICBkZWYgdGVzdF9sb2NhbGVfZmxhZyhzZWxmKToKKyAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICBfLCBlbmMgPSBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSkKKyAgICAgICAgIyBTZWFyY2ggbm9uLUFTQ0lJIGxldHRlcgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMjgsIDI1Nik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYyA9IGJ5dGVzKFtpXSkuZGVjb2RlKGVuYykKKyAgICAgICAgICAgICAgICBzbGV0dGVyID0gYy5sb3dlcigpCisgICAgICAgICAgICAgICAgaWYgc2xldHRlciA9PSBjOiBjb250aW51ZQorICAgICAgICAgICAgICAgIGJsZXR0ZXIgPSBzbGV0dGVyLmVuY29kZShlbmMpCisgICAgICAgICAgICAgICAgaWYgbGVuKGJsZXR0ZXIpICE9IDE6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgYmxldHRlci5kZWNvZGUoZW5jKSAhPSBzbGV0dGVyOiBjb250aW51ZQorICAgICAgICAgICAgICAgIGJwYXQgPSByZS5lc2NhcGUoYnl0ZXMoW2ldKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IChVbmljb2RlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmxldHRlciA9IE5vbmUKKyAgICAgICAgICAgIGJwYXQgPSBiJ0EnCisgICAgICAgICMgQnl0ZXMgcGF0dGVybnMKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShicGF0LCByZS5MT0NBTEUgfCByZS5JR05PUkVDQVNFKQorICAgICAgICBpZiBibGV0dGVyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdC5tYXRjaChibGV0dGVyKSkKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShiJyg/TCknICsgYnBhdCwgcmUuSUdOT1JFQ0FTRSkKKyAgICAgICAgaWYgYmxldHRlcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXQubWF0Y2goYmxldHRlcikpCisgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoYnBhdCwgcmUuSUdOT1JFQ0FTRSkKKyAgICAgICAgaWYgYmxldHRlcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhdC5tYXRjaChibGV0dGVyKSkKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShiJ1x3JywgcmUuTE9DQUxFKQorICAgICAgICBpZiBibGV0dGVyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdC5tYXRjaChibGV0dGVyKSkKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShiJyg/TClcdycpCisgICAgICAgIGlmIGJsZXR0ZXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0Lm1hdGNoKGJsZXR0ZXIpKQorICAgICAgICBwYXQgPSByZS5jb21waWxlKGInXHcnKQorICAgICAgICBpZiBibGV0dGVyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKGJsZXR0ZXIpKQorICAgICAgICAjIEluY29tcGF0aWJpbGl0aWVzCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCByZS5jb21waWxlLCAnJywgcmUuTE9DQUxFKQorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgcmUuY29tcGlsZSwgJyg/TCknKQorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgcmUuY29tcGlsZSwgYicnLCByZS5MT0NBTEUgfCByZS5BU0NJSSkKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsIHJlLmNvbXBpbGUsIGInKD9MKScsIHJlLkFTQ0lJKQorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgcmUuY29tcGlsZSwgYicoP2EpJywgcmUuTE9DQUxFKQorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgcmUuY29tcGlsZSwgYicoP2FMKScpCisKICAgICBkZWYgdGVzdF9idWdfNjUwOShzZWxmKToKICAgICAgICAgIyBSZXBsYWNlbWVudCBzdHJpbmdzIG9mIGJvdGggdHlwZXMgbXVzdCBwYXJzZSBwcm9wZXJseS4KICAgICAgICAgIyBhbGwgc3RyaW5ncwpAQCAtMTE3MCw4ICsxMzk3LDEwIEBACiAgICAgICAgICMgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkIGluc3RlYWQgb2YgT3ZlcmZsb3dFcnJvci4KICAgICAgICAgbG9uZ19vdmVyZmxvdyA9IDIqKjEyOAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlLmZpbmRpdGVyLCAiYSIsIHt9KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBfc3JlLmNvbXBpbGUsICJhYmMiLCAwLCBbbG9uZ19vdmVyZmxvd10pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX3NyZS5jb21waWxlLCB7fSwgMCwgW10pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICBfc3JlLmNvbXBpbGUoImFiYyIsIDAsIFtsb25nX292ZXJmbG93XSwgMCwgW10sIFtdKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBfc3JlLmNvbXBpbGUoe30sIDAsIFtdLCAwLCBbXSwgW10pCiAKICAgICBkZWYgdGVzdF9zZWFyY2hfZG90X3VuaWNvZGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNhYmMtJykpCkBAIC0xMTkzLDggKzE0MjIsOSBAQAogICAgIGRlZiB0ZXN0X2J1Z18xMzg5OShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTM4OTk6IHJlIHBhdHRlcm4gciJbXEFdIiBzaG91bGQgd29yayBsaWtlICJBIiBidXQgbWF0Y2hlcwogICAgICAgICAjIG5vdGhpbmcuIERpdHRvIEIgYW5kIFouCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyJ1tcQVxCXGJcQ1xaXScsICdBQlxiQ1onKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbJ0EnLCAnQicsICdcYicsICdDJywgJ1onXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwocidbXEFcQlxiXENcWl0nLCAnQUJcYkNaJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnQScsICdCJywgJ1xiJywgJ0MnLCAnWiddKQogCiAgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fMkcsIG1lbXVzZT0xKQogICAgIGRlZiB0ZXN0X2xhcmdlX3NlYXJjaChzZWxmLCBzaXplKToKQEAgLTEyNTMsMTMgKzE0ODMsMTMgQEAKIAogICAgIGRlZiB0ZXN0X2JhY2tyZWZfZ3JvdXBfbmFtZV9pbl9leGNlcHRpb24oc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTczNDE6IFBvb3IgZXJyb3IgbWVzc2FnZSB3aGVuIGNvbXBpbGluZyBpbnZhbGlkIHJlZ2V4Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzcmVfY29uc3RhbnRzLmVycm9yLCAnPGZvbz4nKToKLSAgICAgICAgICAgIHJlLmNvbXBpbGUoJyg/UD08Zm9vPiknKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKCcoP1A9PGZvbz4pJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lICc8Zm9vPiciLCA0KQogCiAgICAgZGVmIHRlc3RfZ3JvdXBfbmFtZV9pbl9leGNlcHRpb24oc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTczNDE6IFBvb3IgZXJyb3IgbWVzc2FnZSB3aGVuIGNvbXBpbGluZyBpbnZhbGlkIHJlZ2V4Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzcmVfY29uc3RhbnRzLmVycm9yLCAnXD9mb28nKToKLSAgICAgICAgICAgIHJlLmNvbXBpbGUoJyg/UDw/Zm9vPiknKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKCcoP1A8P2Zvbz4pJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lICc/Zm9vJyIsIDQpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTE3OTk4KHNlbGYpOgogICAgICAgICBmb3IgcmVwcyBpbiAnKicsICcrJywgJz8nLCAnezF9JzoKQEAgLTEzMDksMjIgKzE1MzksMjIgQEAKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXQ6CiAgICAgICAgICAgICByZS5jb21waWxlKHBhdCwgcmUuREVCVUcpCiAgICAgICAgIGR1bXAgPSAnJydcCi1zdWJwYXR0ZXJuIDEKLSAgbGl0ZXJhbCA0Ngotc3VicGF0dGVybiBOb25lCi0gIGJyYW5jaAotICAgIGluCi0gICAgICBsaXRlcmFsIDk5Ci0gICAgICBsaXRlcmFsIDEwNAotICBvcgotICAgIGxpdGVyYWwgMTEyCi0gICAgbGl0ZXJhbCAxMjEKLXN1YnBhdHRlcm4gTm9uZQotICBncm91cHJlZl9leGlzdHMgMQotICAgIGF0IGF0X2VuZAotICBlbHNlCi0gICAgbGl0ZXJhbCA1OAotICAgIGxpdGVyYWwgMzIKK1NVQlBBVFRFUk4gMQorICBMSVRFUkFMIDQ2CitTVUJQQVRURVJOIE5vbmUKKyAgQlJBTkNICisgICAgSU4KKyAgICAgIExJVEVSQUwgOTkKKyAgICAgIExJVEVSQUwgMTA0CisgIE9SCisgICAgTElURVJBTCAxMTIKKyAgICBMSVRFUkFMIDEyMQorU1VCUEFUVEVSTiBOb25lCisgIEdST1VQUkVGX0VYSVNUUyAxCisgICAgQVQgQVRfRU5ECisgIEVMU0UKKyAgICBMSVRFUkFMIDU4CisgICAgTElURVJBTCAzMgogJycnCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCksIGR1bXApCiAgICAgICAgICMgRGVidWcgb3V0cHV0IGlzIG91dHB1dCBhZ2FpbiBldmVuIGEgc2Vjb25kIHRpbWUgKGJ5cGFzc2luZwpAQCAtMTM5Miw2ICsxNjIyLDU1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKGInKD9MaSlceGM1JywgYidceGU1JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKGInKD9MaSlceGU1JywgYidceGM1JykpCiAKKyAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvcikgYXMgY206CisgICAgICAgICAgICByZS5jb21waWxlKCcoXHUyMGFjKSknKQorICAgICAgICBlcnIgPSBjbS5leGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyci5wYXR0ZXJuLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnBhdHRlcm4sICcoXHUyMGFjKSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5wb3MsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmxpbmVubywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuY29sbm8sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyLm1zZywgc3RyKGVycikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyBhdCBwb3NpdGlvbiAzJywgc3RyKGVycikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJyBhdCBwb3NpdGlvbiAzJywgZXJyLm1zZykKKyAgICAgICAgIyBCeXRlcyBwYXR0ZXJuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcmUuY29tcGlsZShiJyhceGE0KSknKQorICAgICAgICBlcnIgPSBjbS5leGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyci5wYXR0ZXJuLCBieXRlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIucGF0dGVybiwgYicoXHhhNCkpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIucG9zLCAzKQorICAgICAgICAjIE11bHRpbGluZSBwYXR0ZXJuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcmUuY29tcGlsZSgiIiIKKyAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgIGFiYworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICIiIiwgcmUuVkVSQk9TRSkKKyAgICAgICAgZXJyID0gY20uZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnBvcywgNzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmxpbmVubywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuY29sbm8sIDE3KQorICAgICAgICBzZWxmLmFzc2VydEluKGVyci5tc2csIHN0cihlcnIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCcgYXQgcG9zaXRpb24gNzcnLCBzdHIoZXJyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignKGxpbmUgNSwgY29sdW1uIDE3KScsIHN0cihlcnIpKQorCisgICAgZGVmIHRlc3RfbWlzY19lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoJywgJ21pc3NpbmcgKSwgdW50ZXJtaW5hdGVkIHN1YnBhdHRlcm4nLCAwKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKChhfGIpJywgJ21pc3NpbmcgKSwgdW50ZXJtaW5hdGVkIHN1YnBhdHRlcm4nLCAwKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKGF8YikpJywgJ3VuYmFsYW5jZWQgcGFyZW50aGVzaXMnLCA1KQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKD9QJywgJ3VuZXhwZWN0ZWQgZW5kIG9mIHBhdHRlcm4nLCAzKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKD96KScsICd1bmtub3duIGV4dGVuc2lvbiA/eicsIDEpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoP2l6KScsICd1bmtub3duIGZsYWcnLCAzKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKD9pJywgJ21pc3NpbmcgKScsIDMpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoPyNhYmMnLCAnbWlzc2luZyApLCB1bnRlcm1pbmF0ZWQgY29tbWVudCcsIDApCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoPzwnLCAndW5leHBlY3RlZCBlbmQgb2YgcGF0dGVybicsIDMpCisgICAgICAgIHNlbGYuY2hlY2tQYXR0ZXJuRXJyb3IocicoPzw+KScsICd1bmtub3duIGV4dGVuc2lvbiA/PD4nLCAxKQorICAgICAgICBzZWxmLmNoZWNrUGF0dGVybkVycm9yKHInKD8nLCAndW5leHBlY3RlZCBlbmQgb2YgcGF0dGVybicsIDIpCisKIAogY2xhc3MgUGF0dGVyblJlcHJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGNoZWNrKHNlbGYsIHBhdHRlcm4sIGV4cGVjdGVkKToKQEAgLTE0MzYsNiArMTcxNSwxMCBAQAogICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKGInYnl0ZXMgcGF0dGVybicsIHJlLkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJywgcmUuQVNDSUkpIikKIAorICAgIGRlZiB0ZXN0X2xvY2FsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncyhiJ2J5dGVzIHBhdHRlcm4nLCByZS5MLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKGInYnl0ZXMgcGF0dGVybicsIHJlLkxPQ0FMRSkiKQorCiAgICAgZGVmIHRlc3RfcXVvdGVzKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCdyYW5kb20gImRvdWJsZSBxdW90ZWQiIHBhdHRlcm4nLAogICAgICAgICAgICAgJycncmUuY29tcGlsZSgncmFuZG9tICJkb3VibGUgcXVvdGVkIiBwYXR0ZXJuJyknJycpCkBAIC0xNTQ5LDggKzE4MzIsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdieXRlcyBwYXR0ZXJuIG1hdGNoJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicGF0ID0gcmUuY29tcGlsZShicGF0KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJwYXQuc2VhcmNoKGJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUoYnBhdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmouc2VhcmNoKGJzKSkKKworICAgICAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCBMT0NBTEUgZW5hYmxlZCwgYW5kIGNoZWNrIHRoYXQgaXQKKyAgICAgICAgICAgICAgICAgICAgIyBzdGlsbCBzdWNjZWVkcy4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoJ2xvY2FsZS1zZW5zaXRpdmUgbWF0Y2gnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUoYnBhdCwgcmUuTE9DQUxFKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChicykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCc9PT0gRmFpbHMgb24gbG9jYWxlLXNlbnNpdGl2ZSBtYXRjaCcsIHQpCiAKICAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCB0aGUgc2VhcmNoIGFyZWEgbGltaXRlZCB0byB0aGUgZXh0ZW50CiAgICAgICAgICAgICAgICAgIyBvZiB0aGUgbWF0Y2ggYW5kIHNlZSBpZiBpdCBzdGlsbCBzdWNjZWVkcy4gIFxCIHdpbGwKQEAgLTE1NjgsMTMgKzE4NTksNiBAQAogICAgICAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLklHTk9SRUNBU0UpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmouc2VhcmNoKHMpKQogCi0gICAgICAgICAgICAgICAgIyBUcnkgdGhlIG1hdGNoIHdpdGggTE9DQUxFIGVuYWJsZWQsIGFuZCBjaGVjayB0aGF0IGl0Ci0gICAgICAgICAgICAgICAgIyBzdGlsbCBzdWNjZWVkcy4KLSAgICAgICAgICAgICAgICBpZiAnKD91KScgbm90IGluIHBhdHRlcm46Ci0gICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdsb2NhbGUtc2Vuc2l0aXZlIG1hdGNoJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLkxPQ0FMRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmouc2VhcmNoKHMpKQotCiAgICAgICAgICAgICAgICAgIyBUcnkgdGhlIG1hdGNoIHdpdGggVU5JQ09ERSBsb2NhbGUgZW5hYmxlZCwgYW5kIGNoZWNrCiAgICAgICAgICAgICAgICAgIyB0aGF0IGl0IHN0aWxsIHN1Y2NlZWRzLgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCd1bmljb2RlLXNlbnNpdGl2ZSBtYXRjaCcpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKaW5kZXggMGIyYjBhNS4uOGMyYWQ4NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CkBAIC0xLDE0ICsxLDI1IEBACiAiIiIKIFZlcnkgbWluaW1hbCB1bml0dGVzdHMgZm9yIHBhcnRzIG9mIHRoZSByZWFkbGluZSBtb2R1bGUuCiAiIiIKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgRXhpdFN0YWNrCitmcm9tIGVycm5vIGltcG9ydCBFSU8KIGltcG9ydCBvcworaW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCi1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUsIHVubGluaywgVEVTVEZOCitmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiAKICMgU2tpcCB0ZXN0cyBpZiB0aGVyZSBpcyBubyByZWFkbGluZSBtb2R1bGUKIHJlYWRsaW5lID0gaW1wb3J0X21vZHVsZSgncmVhZGxpbmUnKQogCitpc19lZGl0bGluZSA9IHJlYWRsaW5lLl9fZG9jX18gYW5kICJsaWJlZGl0IiBpbiByZWFkbGluZS5fX2RvY19fCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocmVhZGxpbmUsICJjbGVhcl9oaXN0b3J5IiksCisgICAgICAgICAgICAgICAgICAgICAiVGhlIGhpc3RvcnkgdXBkYXRlIHRlc3QgY2Fubm90IGJlIHJ1biBiZWNhdXNlIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAiY2xlYXJfaGlzdG9yeSBtZXRob2QgaXMgbm90IGF2YWlsYWJsZS4iKQogY2xhc3MgVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24gKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiIKICAgICBUaGVzZSB0ZXN0cyB3ZXJlIGFkZGVkIHRvIGNoZWNrIHRoYXQgdGhlIGxpYmVkaXQgZW11bGF0aW9uIG9uIE9TWCBhbmQgdGhlCkBAIC0xNiw5ICsyNyw2IEBACiAgICAgd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCiAgICAgIiIiCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHJlYWRsaW5lLCAiY2xlYXJfaGlzdG9yeSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgaGlzdG9yeSB1cGRhdGUgdGVzdCBjYW5ub3QgYmUgcnVuIGJlY2F1c2UgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY2xlYXJfaGlzdG9yeSBtZXRob2QgaXMgbm90IGF2YWlsYWJsZS4iKQogICAgIGRlZiB0ZXN0SGlzdG9yeVVwZGF0ZXMoc2VsZik6CiAgICAgICAgIHJlYWRsaW5lLmNsZWFyX2hpc3RvcnkoKQogCkBAIC00MiwxMSArNTAsNjggQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKCksIDEpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHJlYWRsaW5lLCAiYXBwZW5kX2hpc3RvcnlfZmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBlbmRfaGlzdG9yeSBub3QgYXZhaWxhYmxlIikKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkX2FwcGVuZChzZWxmKToKKyAgICAgICAgaGZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKQorICAgICAgICBoZmlsZS5jbG9zZSgpCisgICAgICAgIGhmaWxlbmFtZSA9IGhmaWxlLm5hbWUKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgaGZpbGVuYW1lKQorCisgICAgICAgICMgdGVzdCB3cml0ZS1jbGVhci1yZWFkID09IG5vcAorICAgICAgICByZWFkbGluZS5jbGVhcl9oaXN0b3J5KCkKKyAgICAgICAgcmVhZGxpbmUuYWRkX2hpc3RvcnkoImZpcnN0IGxpbmUiKQorICAgICAgICByZWFkbGluZS5hZGRfaGlzdG9yeSgic2Vjb25kIGxpbmUiKQorICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoaGZpbGVuYW1lKQorCisgICAgICAgIHJlYWRsaW5lLmNsZWFyX2hpc3RvcnkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKCksIDApCisKKyAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgxKSwgImZpcnN0IGxpbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMiksICJzZWNvbmQgbGluZSIpCisKKyAgICAgICAgIyB0ZXN0IGFwcGVuZAorICAgICAgICByZWFkbGluZS5hcHBlbmRfaGlzdG9yeV9maWxlKDEsIGhmaWxlbmFtZSkKKyAgICAgICAgcmVhZGxpbmUuY2xlYXJfaGlzdG9yeSgpCisgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCgpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMSksICJmaXJzdCBsaW5lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDIpLCAic2Vjb25kIGxpbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMyksICJzZWNvbmQgbGluZSIpCisKKyAgICAgICAgIyB0ZXN0ICdubyBzdWNoIGZpbGUnIGJlaGF2aW91cgorICAgICAgICBvcy51bmxpbmsoaGZpbGVuYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgIHJlYWRsaW5lLmFwcGVuZF9oaXN0b3J5X2ZpbGUoMSwgaGZpbGVuYW1lKQorCisgICAgICAgICMgd3JpdGVfaGlzdG9yeV9maWxlIGNhbiBjcmVhdGUgdGhlIHRhcmdldAorICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoaGZpbGVuYW1lKQorCisgICAgZGVmIHRlc3Rfbm9uYXNjaWlfaGlzdG9yeShzZWxmKToKKyAgICAgICAgcmVhZGxpbmUuY2xlYXJfaGlzdG9yeSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLmFkZF9oaXN0b3J5KCJlbnRyw6llIDEiKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkxvY2FsZSBjYW5ub3QgZW5jb2RlIHRlc3QgZGF0YTogIiArIGZvcm1hdChlcnIpKQorICAgICAgICByZWFkbGluZS5hZGRfaGlzdG9yeSgiZW50csOpZSAyIikKKyAgICAgICAgcmVhZGxpbmUucmVwbGFjZV9oaXN0b3J5X2l0ZW0oMSwgImVudHLDqWUgMjIiKQorICAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoVEVTVEZOKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBURVNURk4pCisgICAgICAgIHJlYWRsaW5lLmNsZWFyX2hpc3RvcnkoKQorICAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZShURVNURk4pCisgICAgICAgIGlmIGlzX2VkaXRsaW5lOgorICAgICAgICAgICAgIyBBbiBhZGRfaGlzdG9yeSgpIGNhbGwgc2VlbXMgdG8gYmUgcmVxdWlyZWQgZm9yIGdldF9oaXN0b3J5XworICAgICAgICAgICAgIyBpdGVtKCkgdG8gcmVnaXN0ZXIgaXRlbXMgZnJvbSB0aGUgZmlsZQorICAgICAgICAgICAgcmVhZGxpbmUuYWRkX2hpc3RvcnkoImR1bW15IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDEpLCAiZW50csOpZSAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDIpLCAiZW50csOpZSAyMiIpCisKIAogY2xhc3MgVGVzdFJlYWRsaW5lKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIEB1bml0dGVzdC5za2lwSWYocmVhZGxpbmUuX1JFQURMSU5FX1ZFUlNJT04gPCAweDA2MDAKLSAgICAgICAgICAgICAgICAgICAgIGFuZCAibGliZWRpdCIgbm90IGluIHJlYWRsaW5lLl9fZG9jX18sCisgICAgQHVuaXR0ZXN0LnNraXBJZihyZWFkbGluZS5fUkVBRExJTkVfVkVSU0lPTiA8IDB4MDYwMCBhbmQgbm90IGlzX2VkaXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBsaWJyYXJ5IHZlcnNpb24iKQogICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE5ODg0OiBFbnN1cmUgdGhhdCB0aGUgQU5TSSBzZXF1ZW5jZSAiXDAzM1sxMDM0aCIgaXMgbm90CkBAIC01Niw5ICsxMjEsMTMwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVSTT0neHRlcm0tMjU2Y29sb3InKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicnKQogCisgICAgZGVmIHRlc3Rfbm9uYXNjaWkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLmFkZF9oaXN0b3J5KCJceEVCXHhFRiIpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiTG9jYWxlIGNhbm5vdCBlbmNvZGUgdGVzdCBkYXRhOiAiICsgZm9ybWF0KGVycikpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24sIFRlc3RSZWFkbGluZSkKKyAgICAgICAgc2NyaXB0ID0gciIiImltcG9ydCByZWFkbGluZQorCitpc19lZGl0bGluZSA9IHJlYWRsaW5lLl9fZG9jX18gYW5kICJsaWJlZGl0IiBpbiByZWFkbGluZS5fX2RvY19fCitpbnNlcnRlZCA9ICJbXHhFRm5zZXJ0ZWRdIgorbWFjcm8gPSAifHRceEVCW2FmdGVyXSIKK3NldF9wcmVfaW5wdXRfaG9vayA9IGdldGF0dHIocmVhZGxpbmUsICJzZXRfcHJlX2lucHV0X2hvb2siLCBOb25lKQoraWYgaXNfZWRpdGxpbmUgb3Igbm90IHNldF9wcmVfaW5wdXRfaG9vazoKKyAgICAjIFRoZSBpbnNlcnRfbGluZSgpIGNhbGwgdmlhIHByZV9pbnB1dF9ob29rKCkgZG9lcyBub3RoaW5nIHdpdGggRWRpdGxpbmUsCisgICAgIyBzbyBpbmNsdWRlIHRoZSBleHRyYSB0ZXh0IHRoYXQgd291bGQgaGF2ZSBiZWVuIGluc2VydGVkIGhlcmUKKyAgICBtYWNybyA9IGluc2VydGVkICsgbWFjcm8KKworaWYgaXNfZWRpdGxpbmU6CisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQocidiaW5kIF5CIGVkLXByZXYtY2hhcicpCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQocidiaW5kICJcdCIgcmxfY29tcGxldGUnKQorICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKHInYmluZCAtcyBeQSAie30iJy5mb3JtYXQobWFjcm8pKQorZWxzZToKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZChyJ0NvbnRyb2wtYjogYmFja3dhcmQtY2hhcicpCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQociciXHQiOiBjb21wbGV0ZScpCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQocidzZXQgZGlzYWJsZS1jb21wbGV0aW9uIG9mZicpCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQocidzZXQgc2hvdy1hbGwtaWYtYW1iaWd1b3VzIG9mZicpCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQocidzZXQgc2hvdy1hbGwtaWYtdW5tb2RpZmllZCBvZmYnKQorICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKHInQ29udHJvbC1hOiAie30iJy5mb3JtYXQobWFjcm8pKQorCitkZWYgcHJlX2lucHV0X2hvb2soKToKKyAgICByZWFkbGluZS5pbnNlcnRfdGV4dChpbnNlcnRlZCkKKyAgICByZWFkbGluZS5yZWRpc3BsYXkoKQoraWYgc2V0X3ByZV9pbnB1dF9ob29rOgorICAgIHNldF9wcmVfaW5wdXRfaG9vayhwcmVfaW5wdXRfaG9vaykKKworZGVmIGNvbXBsZXRlcih0ZXh0LCBzdGF0ZSk6CisgICAgaWYgdGV4dCA9PSAidFx4RUIiOgorICAgICAgICBpZiBzdGF0ZSA9PSAwOgorICAgICAgICAgICAgcHJpbnQoInRleHQiLCBhc2NpaSh0ZXh0KSkKKyAgICAgICAgICAgIHByaW50KCJsaW5lIiwgYXNjaWkocmVhZGxpbmUuZ2V0X2xpbmVfYnVmZmVyKCkpKQorICAgICAgICAgICAgcHJpbnQoImluZGV4ZXMiLCByZWFkbGluZS5nZXRfYmVnaWR4KCksIHJlYWRsaW5lLmdldF9lbmRpZHgoKSkKKyAgICAgICAgICAgIHJldHVybiAidFx4RUJudCIKKyAgICAgICAgaWYgc3RhdGUgPT0gMToKKyAgICAgICAgICAgIHJldHVybiAidFx4RUJ4dCIKKyAgICBpZiB0ZXh0ID09ICJ0XHhFQngiIGFuZCBzdGF0ZSA9PSAwOgorICAgICAgICByZXR1cm4gInRceEVCeHQiCisgICAgcmV0dXJuIE5vbmUKK3JlYWRsaW5lLnNldF9jb21wbGV0ZXIoY29tcGxldGVyKQorCitkZWYgZGlzcGxheShzdWJzdGl0dXRpb24sIG1hdGNoZXMsIGxvbmdlc3RfbWF0Y2hfbGVuZ3RoKToKKyAgICBwcmludCgic3Vic3RpdHV0aW9uIiwgYXNjaWkoc3Vic3RpdHV0aW9uKSkKKyAgICBwcmludCgibWF0Y2hlcyIsIGFzY2lpKG1hdGNoZXMpKQorcmVhZGxpbmUuc2V0X2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2soZGlzcGxheSkKKworcHJpbnQoInJlc3VsdCIsIGFzY2lpKGlucHV0KCkpKQorcHJpbnQoImhpc3RvcnkiLCBhc2NpaShyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDEpKSkKKyIiIgorCisgICAgICAgIGlucHV0ID0gYiJceDAxIiAgIyBDdHJsLUEsIGV4cGFuZHMgdG8gInx0XHhFQlthZnRlcl0iCisgICAgICAgIGlucHV0ICs9IGIiXHgwMiIgKiBsZW4oIlthZnRlcl0iKSAgIyBNb3ZlIGN1cnNvciBiYWNrCisgICAgICAgIGlucHV0ICs9IGIiXHRcdCIgICMgRGlzcGxheSBwb3NzaWJsZSBjb21wbGV0aW9ucworICAgICAgICBpbnB1dCArPSBiInhcdCIgICMgQ29tcGxldGUgInRceEVCeCIgLT4gInRceEVCeHQiCisgICAgICAgIGlucHV0ICs9IGIiXHIiCisgICAgICAgIG91dHB1dCA9IHJ1bl9wdHkoc2NyaXB0LCBpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiInRleHQgJ3RcXHhlYidcclxuIiwgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKGIibGluZSAnW1xceGVmbnNlcnRlZF18dFxceGViW2FmdGVyXSdcclxuIiwgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKGIiaW5kZXhlcyAxMSAxM1xyXG4iLCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBpc19lZGl0bGluZSBhbmQgaGFzYXR0cihyZWFkbGluZSwgInNldF9wcmVfaW5wdXRfaG9vayIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiInN1YnN0aXR1dGlvbiAndFxceGViJ1xyXG4iLCBvdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIibWF0Y2hlcyBbJ3RcXHhlYm50JywgJ3RcXHhlYnh0J11cclxuIiwgb3V0cHV0KQorICAgICAgICBleHBlY3RlZCA9IGJyIidbXHhlZm5zZXJ0ZWRdfHRceGVieHRbYWZ0ZXJdJyIKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiInJlc3VsdCAiICsgZXhwZWN0ZWQgKyBiIlxyXG4iLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJoaXN0b3J5ICIgKyBleHBlY3RlZCArIGIiXHJcbiIsIG91dHB1dCkKKworCitkZWYgcnVuX3B0eShzY3JpcHQsIGlucHV0PWIiZHVtbXkgaW5wdXRcciIpOgorICAgIHB0eSA9IGltcG9ydF9tb2R1bGUoJ3B0eScpCisgICAgb3V0cHV0ID0gYnl0ZWFycmF5KCkKKyAgICBbbWFzdGVyLCBzbGF2ZV0gPSBwdHkub3BlbnB0eSgpCisgICAgYXJncyA9IChzeXMuZXhlY3V0YWJsZSwgJy1jJywgc2NyaXB0KQorICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZGluPXNsYXZlLCBzdGRvdXQ9c2xhdmUsIHN0ZGVycj1zbGF2ZSkKKyAgICBvcy5jbG9zZShzbGF2ZSkKKyAgICB3aXRoIEV4aXRTdGFjaygpIGFzIGNsZWFudXA6CisgICAgICAgIGNsZWFudXAuZW50ZXJfY29udGV4dChwcm9jKQorICAgICAgICBkZWYgdGVybWluYXRlKHByb2MpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHByb2MudGVybWluYXRlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBQcm9jZXNzTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBPcGVuL05ldCBCU0QgYnVnIChJc3N1ZSAxNjc2MikKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsZWFudXAuY2FsbGJhY2sodGVybWluYXRlLCBwcm9jKQorICAgICAgICBjbGVhbnVwLmNhbGxiYWNrKG9zLmNsb3NlLCBtYXN0ZXIpCisgICAgICAgICMgQXZvaWQgdXNpbmcgRGVmYXVsdFNlbGVjdG9yIGFuZCBQb2xsU2VsZWN0b3IuIEtxdWV1ZSgpIGRvZXMgbm90CisgICAgICAgICMgd29yayB3aXRoIHBzZXVkby10ZXJtaW5hbHMgb24gT1MgWCA8IDEwLjkgKElzc3VlIDIwMzY1KSBhbmQgT3BlbgorICAgICAgICAjIEJTRCAoSXNzdWUgMjA2NjcpLiBQb2xsKCkgZG9lcyBub3Qgd29yayB3aXRoIE9TIFggMTAuNiBvciAxMC40CisgICAgICAgICMgZWl0aGVyIChJc3N1ZSAyMDQ3MikuIEhvcGVmdWxseSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGxvdyBlbm91Z2gKKyAgICAgICAgIyB0byB1c2Ugd2l0aCBzZWxlY3QoKS4KKyAgICAgICAgc2VsID0gY2xlYW51cC5lbnRlcl9jb250ZXh0KHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcigpKQorICAgICAgICBzZWwucmVnaXN0ZXIobWFzdGVyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCB8IHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgb3Muc2V0X2Jsb2NraW5nKG1hc3RlciwgRmFsc2UpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBmb3IgW18sIGV2ZW50c10gaW4gc2VsLnNlbGVjdCgpOgorICAgICAgICAgICAgICAgIGlmIGV2ZW50cyAmIHNlbGVjdG9ycy5FVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IG9zLnJlYWQobWFzdGVyLCAweDEwMDAwKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICAjIExpbnV4IHJhaXNlcyBFSU8gd2hlbiBzbGF2ZSBpcyBjbG9zZWQgKElzc3VlIDUzODApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gIT0gRUlPOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGIiIgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2h1bms6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIG91dHB1dC5leHRlbmQoY2h1bmspCisgICAgICAgICAgICAgICAgaWYgZXZlbnRzICYgc2VsZWN0b3JzLkVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0W29zLndyaXRlKG1hc3RlciwgaW5wdXQpOl0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBcHBhcmVudGx5IEVJTyBtZWFucyB0aGUgc2xhdmUgd2FzIGNsb3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vICE9IEVJTzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBiIiIgICMgU3RvcCB3cml0aW5nCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpbnB1dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbC5tb2RpZnkobWFzdGVyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKaW5kZXggYWU2N2YwNi4uNGJmOTE5NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQpAQCAtMTAsNyArMTAsNyBAQAogaW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUsIHZlcmJvc2UKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjcmVhdGVfZW1wdHlfZmlsZSwgdmVyYm9zZQogZnJvbSByZXBybGliIGltcG9ydCByZXByIGFzIHIgIyBEb24ndCBzaGFkb3cgYnVpbHRpbiByZXByCiBmcm9tIHJlcHJsaWIgaW1wb3J0IFJlcHIKIGZyb20gcmVwcmxpYiBpbXBvcnQgcmVjdXJzaXZlX3JlcHIKQEAgLTcwLDE4ICs3MCwxOCBAQAogICAgICAgICBlcShyKFsxLCAyLCAzLCA0LCA1LCA2LCA3XSksICJbMSwgMiwgMywgNCwgNSwgNiwgLi4uXSIpCiAKICAgICAgICAgIyBTZXRzIGdpdmUgdXAgYWZ0ZXIgNiBhcyB3ZWxsCi0gICAgICAgIGVxKHIoc2V0KFtdKSksICJzZXQoW10pIikKLSAgICAgICAgZXEocihzZXQoWzFdKSksICJzZXQoWzFdKSIpCi0gICAgICAgIGVxKHIoc2V0KFsxLCAyLCAzXSkpLCAic2V0KFsxLCAyLCAzXSkiKQotICAgICAgICBlcShyKHNldChbMSwgMiwgMywgNCwgNSwgNl0pKSwgInNldChbMSwgMiwgMywgNCwgNSwgNl0pIikKLSAgICAgICAgZXEocihzZXQoWzEsIDIsIDMsIDQsIDUsIDYsIDddKSksICJzZXQoWzEsIDIsIDMsIDQsIDUsIDYsIC4uLl0pIikKKyAgICAgICAgZXEocihzZXQoW10pKSwgInNldCgpIikKKyAgICAgICAgZXEocihzZXQoWzFdKSksICJ7MX0iKQorICAgICAgICBlcShyKHNldChbMSwgMiwgM10pKSwgInsxLCAyLCAzfSIpCisgICAgICAgIGVxKHIoc2V0KFsxLCAyLCAzLCA0LCA1LCA2XSkpLCAiezEsIDIsIDMsIDQsIDUsIDZ9IikKKyAgICAgICAgZXEocihzZXQoWzEsIDIsIDMsIDQsIDUsIDYsIDddKSksICJ7MSwgMiwgMywgNCwgNSwgNiwgLi4ufSIpCiAKICAgICAgICAgIyBGcm96ZW5zZXRzIGdpdmUgdXAgYWZ0ZXIgNiBhcyB3ZWxsCi0gICAgICAgIGVxKHIoZnJvemVuc2V0KFtdKSksICJmcm96ZW5zZXQoW10pIikKLSAgICAgICAgZXEocihmcm96ZW5zZXQoWzFdKSksICJmcm96ZW5zZXQoWzFdKSIpCi0gICAgICAgIGVxKHIoZnJvemVuc2V0KFsxLCAyLCAzXSkpLCAiZnJvemVuc2V0KFsxLCAyLCAzXSkiKQotICAgICAgICBlcShyKGZyb3plbnNldChbMSwgMiwgMywgNCwgNSwgNl0pKSwgImZyb3plbnNldChbMSwgMiwgMywgNCwgNSwgNl0pIikKLSAgICAgICAgZXEocihmcm96ZW5zZXQoWzEsIDIsIDMsIDQsIDUsIDYsIDddKSksICJmcm96ZW5zZXQoWzEsIDIsIDMsIDQsIDUsIDYsIC4uLl0pIikKKyAgICAgICAgZXEocihmcm96ZW5zZXQoW10pKSwgImZyb3plbnNldCgpIikKKyAgICAgICAgZXEocihmcm96ZW5zZXQoWzFdKSksICJmcm96ZW5zZXQoezF9KSIpCisgICAgICAgIGVxKHIoZnJvemVuc2V0KFsxLCAyLCAzXSkpLCAiZnJvemVuc2V0KHsxLCAyLCAzfSkiKQorICAgICAgICBlcShyKGZyb3plbnNldChbMSwgMiwgMywgNCwgNSwgNl0pKSwgImZyb3plbnNldCh7MSwgMiwgMywgNCwgNSwgNn0pIikKKyAgICAgICAgZXEocihmcm96ZW5zZXQoWzEsIDIsIDMsIDQsIDUsIDYsIDddKSksICJmcm96ZW5zZXQoezEsIDIsIDMsIDQsIDUsIDYsIC4uLn0pIikKIAogICAgICAgICAjIGNvbGxlY3Rpb25zLmRlcXVlIGFmdGVyIDYKICAgICAgICAgZXEocihkZXF1ZShbMSwgMiwgMywgNCwgNSwgNiwgN10pKSwgImRlcXVlKFsxLCAyLCAzLCA0LCA1LCA2LCAuLi5dKSIpCkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIGVxKHIoZCksICJ7J2FsaWNlJzogMSwgJ2FydGh1cic6IDEsICdib2InOiAyLCAnY2hhcmxlcyc6IDMsIC4uLn0iKQogCiAgICAgICAgICMgYXJyYXkuYXJyYXkgYWZ0ZXIgNS4KLSAgICAgICAgZXEocihhcnJheSgnaScpKSwgImFycmF5KCdpJywgW10pIikKKyAgICAgICAgZXEocihhcnJheSgnaScpKSwgImFycmF5KCdpJykiKQogICAgICAgICBlcShyKGFycmF5KCdpJywgWzFdKSksICJhcnJheSgnaScsIFsxXSkiKQogICAgICAgICBlcShyKGFycmF5KCdpJywgWzEsIDJdKSksICJhcnJheSgnaScsIFsxLCAyXSkiKQogICAgICAgICBlcShyKGFycmF5KCdpJywgWzEsIDIsIDNdKSksICJhcnJheSgnaScsIFsxLCAyLCAzXSkiKQpAQCAtMTAzLDYgKzEwMywyMCBAQAogICAgICAgICBlcShyKGFycmF5KCdpJywgWzEsIDIsIDMsIDQsIDUsIDZdKSksCiAgICAgICAgICAgICAgICAgICAgImFycmF5KCdpJywgWzEsIDIsIDMsIDQsIDUsIC4uLl0pIikKIAorICAgIGRlZiB0ZXN0X3NldF9saXRlcmFsKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEocih7MX0pLCAiezF9IikKKyAgICAgICAgZXEocih7MSwgMiwgM30pLCAiezEsIDIsIDN9IikKKyAgICAgICAgZXEocih7MSwgMiwgMywgNCwgNSwgNn0pLCAiezEsIDIsIDMsIDQsIDUsIDZ9IikKKyAgICAgICAgZXEocih7MSwgMiwgMywgNCwgNSwgNiwgN30pLCAiezEsIDIsIDMsIDQsIDUsIDYsIC4uLn0iKQorCisgICAgZGVmIHRlc3RfZnJvemVuc2V0KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEocihmcm96ZW5zZXQoezF9KSksICJmcm96ZW5zZXQoezF9KSIpCisgICAgICAgIGVxKHIoZnJvemVuc2V0KHsxLCAyLCAzfSkpLCAiZnJvemVuc2V0KHsxLCAyLCAzfSkiKQorICAgICAgICBlcShyKGZyb3plbnNldCh7MSwgMiwgMywgNCwgNSwgNn0pKSwgImZyb3plbnNldCh7MSwgMiwgMywgNCwgNSwgNn0pIikKKyAgICAgICAgZXEocihmcm96ZW5zZXQoezEsIDIsIDMsIDQsIDUsIDYsIDd9KSksICJmcm96ZW5zZXQoezEsIDIsIDMsIDQsIDUsIDYsIC4uLn0pIikKKwogICAgIGRlZiB0ZXN0X251bWJlcnMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShyKDEyMyksIHJlcHIoMTIzKSkKQEAgLTEyMyw3ICsxMzcsNyBAQAogICAgICAgICBlcShyKGkyKSwgZXhwZWN0ZWQpCiAKICAgICAgICAgaTMgPSBDbGFzc1dpdGhGYWlsaW5nUmVwcigpCi0gICAgICAgIGVxKHIoaTMpLCAoIjxDbGFzc1dpdGhGYWlsaW5nUmVwciBpbnN0YW5jZSBhdCAleD4iJWlkKGkzKSkpCisgICAgICAgIGVxKHIoaTMpLCAoIjxDbGFzc1dpdGhGYWlsaW5nUmVwciBpbnN0YW5jZSBhdCAlI3g+IiVpZChpMykpKQogCiAgICAgICAgIHMgPSByKENsYXNzV2l0aEZhaWxpbmdSZXByKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCI8Y2xhc3MgIikpCkBAIC0zNjAsNiArMzc0LDEzIEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gJzwnICsgJywgJy5qb2luKG1hcChzdHIsIHNlbGYudmFsdWVzKSkgKyAnPicKIAorY2xhc3MgTXlDb250YWluZXIzOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgJ1Rlc3QgZG9jdW1lbnQgY29udGVudCcKKyAgICAgICAgcGFzcworICAgIHdyYXBwZWQgPSBfX3JlcHJfXworICAgIHdyYXBwZXIgPSByZWN1cnNpdmVfcmVwcigpKHdyYXBwZWQpCisKIGNsYXNzIFRlc3RSZWN1cnNpdmVSZXByKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZWN1cnNpdmVfcmVwcihzZWxmKToKICAgICAgICAgbSA9IE15Q29udGFpbmVyKGxpc3QoJ2FiY2RlJykpCkBAIC0zNzMsMTEgKzM5NCwxMiBAQAogICAgICAgICBtLmFwcGVuZChtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICc8YSwgYiwgYywgZCwgZSwgKysrLCB4LCArKys+JykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChSZXByVGVzdHMpCi0gICAgcnVuX3VuaXR0ZXN0KExvbmdSZXByVGVzdCkKLSAgICBydW5fdW5pdHRlc3QoVGVzdFJlY3Vyc2l2ZVJlcHIpCi0KKyAgICBkZWYgdGVzdF9hc3NpZ25lZF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBmcm9tIGZ1bmN0b29scyBpbXBvcnQgV1JBUFBFUl9BU1NJR05NRU5UUyBhcyBhc3NpZ25lZAorICAgICAgICB3cmFwcGVkID0gTXlDb250YWluZXIzLndyYXBwZWQKKyAgICAgICAgd3JhcHBlciA9IE15Q29udGFpbmVyMy53cmFwcGVyCisgICAgICAgIGZvciBuYW1lIGluIGFzc2lnbmVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHdyYXBwZXIsIG5hbWUpLCBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JpY2hjbXAucHkgYi9MaWIvdGVzdC90ZXN0X3JpY2hjbXAucHkKaW5kZXggMGI2MjlkYy4uMTU4MmNhYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yaWNoY21wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmljaGNtcC5weQpAQCAtMjI4LDI1ICsyMjgsMjUgQEAKICAgICAgICAgYiA9IFVzZXJMaXN0KCkKICAgICAgICAgYS5hcHBlbmQoYikKICAgICAgICAgYi5hcHBlbmQoYSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5lcSwgYSwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5uZSwgYSwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5sdCwgYSwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5sZSwgYSwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5ndCwgYSwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5nZSwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIG9wZXJhdG9yLmVxLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgb3BlcmF0b3IubmUsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yLCBvcGVyYXRvci5sdCwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIG9wZXJhdG9yLmxlLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgb3BlcmF0b3IuZ3QsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yLCBvcGVyYXRvci5nZSwgYSwgYikKIAogICAgICAgICBiLmFwcGVuZCgxNykKICAgICAgICAgIyBFdmVuIHJlY3Vyc2l2ZSBsaXN0cyBvZiBkaWZmZXJlbnQgbGVuZ3RocyBhcmUgZGlmZmVyZW50LAogICAgICAgICAjIGJ1dCB0aGV5IGNhbm5vdCBiZSBvcmRlcmVkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKGEgPT0gYikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICE9IGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubHQsIGEsIGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubGUsIGEsIGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IuZ3QsIGEsIGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IuZ2UsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yLCBvcGVyYXRvci5sdCwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIG9wZXJhdG9yLmxlLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgb3BlcmF0b3IuZ3QsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yLCBvcGVyYXRvci5nZSwgYSwgYikKICAgICAgICAgYS5hcHBlbmQoMTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IuZXEsIGEsIGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubmUsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yLCBvcGVyYXRvci5lcSwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVjdXJzaW9uRXJyb3IsIG9wZXJhdG9yLm5lLCBhLCBiKQogICAgICAgICBhLmluc2VydCgwLCAxMSkKICAgICAgICAgYi5pbnNlcnQoMCwgMTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKGEgPT0gYikpCkBAIC0zMjYsOCArMzI2LDUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3AoeCwgeSksIFRydWUpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFZlY3RvclRlc3QsIE51bWJlclRlc3QsIE1pc2NUZXN0LCBEaWN0VGVzdCwgTGlzdFRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfcmxjb21wbGV0ZXIucHkgYi9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5CmluZGV4IDBiMzkxOGIuLjg1M2U3NzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfcmxjb21wbGV0ZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ybGNvbXBsZXRlci5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IHJsY29tcGxldGVyCiAKQEAgLTc3LDYgKzc4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV0ZXIuY29tcGxldGUoJ2YuYicsIDApLCAnZi5iYXInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2FsbHMsIDEpCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmxjb21wbGV0ZXIuX3JlYWRsaW5lX2F2YWlsYWJsZScsIEZhbHNlKQogICAgIGRlZiB0ZXN0X2NvbXBsZXRlKHNlbGYpOgogICAgICAgICBjb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnJywgMCksICdcdCcpCkBAIC0xMDYsNiArMTA4LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV0ZXIuY29tcGxldGUoJ0VsbGlwc2lzJywgMCksICdFbGxpcHNpcygnKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb21wbGV0ZXIuY29tcGxldGUoJ0VsbGlwc2lzJywgMSkpCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CmluZGV4IDc4NmI4MTMuLjg3YzgzZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQpAQCAtOCwxMCArOCwxMCBAQAogaW1wb3J0IGltcG9ydGxpYiwgaW1wb3J0bGliLm1hY2hpbmVyeSwgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBweV9jb21waWxlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKAotICAgIGZvcmdldCwgbWFrZV9sZWdhY3lfcHljLCBydW5fdW5pdHRlc3QsIHVubG9hZCwgdmVyYm9zZSwgbm9fdHJhY2luZywKLSAgICBjcmVhdGVfZW1wdHlfZmlsZSkKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAoCi0gICAgbWFrZV9wa2csIG1ha2Vfc2NyaXB0LCBtYWtlX3ppcF9wa2csIG1ha2VfemlwX3NjcmlwdCwgdGVtcF9kaXIpCisgICAgZm9yZ2V0LCBtYWtlX2xlZ2FjeV9weWMsIHVubG9hZCwgdmVyYm9zZSwgbm9fdHJhY2luZywKKyAgICBjcmVhdGVfZW1wdHlfZmlsZSwgdGVtcF9kaXIpCitmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCAoCisgICAgbWFrZV9wa2csIG1ha2Vfc2NyaXB0LCBtYWtlX3ppcF9wa2csIG1ha2VfemlwX3NjcmlwdCkKIAogCiBpbXBvcnQgcnVucHkKQEAgLTE5Nyw4ICsxOTcsMTEgQEAKICAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCJzeXMuaW1wLmVyaWMiKQogICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoIm9zLnBhdGguaGFsZiIpCiAgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiYS5iZWUiKQorICAgICAgICAjIFJlbGF0aXZlIG5hbWVzIG5vdCBhbGxvd2VkCiAgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiLmhvd2FyZCIpCiAgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiLi5lYXRlbiIpCisgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigiLnRlc3RfcnVucHkiKQorICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoIi51bml0dGVzdCIpCiAgICAgICAgICMgUGFja2FnZSB3aXRob3V0IF9fbWFpbl9fLnB5CiAgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigibXVsdGlwcm9jZXNzaW5nIikKIApAQCAtMjY5LDcgKzI3Miw3IEBACiAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoZXgpICMgUGVyc2lzdCB3aXRoIGNsZWFuaW5nIHVwCiAKICAgICBkZWYgX2ZpeF9uc19mb3JfbGVnYWN5X3B5YyhzZWxmLCBucywgYWx0ZXJfc3lzKToKLSAgICAgICAgY2hhcl90b19hZGQgPSAiYyIgaWYgX19kZWJ1Z19fIGVsc2UgIm8iCisgICAgICAgIGNoYXJfdG9fYWRkID0gImMiCiAgICAgICAgIG5zWyJfX2ZpbGVfXyJdICs9IGNoYXJfdG9fYWRkCiAgICAgICAgIG5zWyJfX2NhY2hlZF9fIl0gPSBuc1siX19maWxlX18iXQogICAgICAgICBzcGVjID0gbnNbIl9fc3BlY19fIl0KQEAgLTQzOSw2ICs0NDIsMzQgQEAKICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGFja2FnZShkZXB0aCkKIAorICAgIGRlZiB0ZXN0X3J1bl9wYWNrYWdlX2luaXRfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUaGVzZSB3ZXJlIHByZXZpb3VzbHkgd3JhcHBlZCBpbiBhbiBJbXBvcnRFcnJvcjsgc2VlIElzc3VlIDE0Mjg1CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX21ha2VfcGtnKCIiLCAxLCAiX19tYWluX18iKQorICAgICAgICBwa2dfZGlyLCBfLCBtb2RfbmFtZSwgXyA9IHJlc3VsdAorICAgICAgICBtb2RfbmFtZSA9IG1vZF9uYW1lLnJlcGxhY2UoIi5fX21haW5fXyIsICIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5fZGVsX3BrZywgcGtnX2RpciwgMSwgbW9kX25hbWUpCisgICAgICAgIGluaXQgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgIl9fcnVucHlfcGtnX18iLCAiX19pbml0X18ucHkiKQorCisgICAgICAgIGV4Y2VwdGlvbnMgPSAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IsIFZhbHVlRXJyb3IpCisgICAgICAgIGZvciBleGNlcHRpb24gaW4gZXhjZXB0aW9uczoKKyAgICAgICAgICAgIG5hbWUgPSBleGNlcHRpb24uX19uYW1lX18KKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWUpOgorICAgICAgICAgICAgICAgIHNvdXJjZSA9ICJyYWlzZSB7MH0oJ3swfSBpbiBfX2luaXRfXy5weS4nKSIuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGluaXQsICJ3dCIsIGVuY29kaW5nPSJhc2NpaSIpIGFzIG1vZF9maWxlOgorICAgICAgICAgICAgICAgICAgICBtb2RfZmlsZS53cml0ZShzb3VyY2UpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBydW5fbW9kdWxlKG1vZF9uYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBleGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJmaW5kaW5nIHNwZWMiLCBmb3JtYXQoZXJyKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vdGhpbmcgcmFpc2VkOyBleHBlY3RlZCB7fSIuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcnVuX21vZHVsZShtb2RfbmFtZSArICIuc3VibW9kdWxlIikKKyAgICAgICAgICAgICAgICBleGNlcHQgZXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiZmluZGluZyBzcGVjIiwgZm9ybWF0KGVycikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJOb3RoaW5nIHJhaXNlZDsgZXhwZWN0ZWQge30iLmZvcm1hdChuYW1lKSkKKwogICAgIGRlZiB0ZXN0X3J1bl9wYWNrYWdlX2luX25hbWVzcGFjZV9wYWNrYWdlKHNlbGYpOgogICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMSwgNCk6CiAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKQEAgLTY3Myw3ICs3MDQsNyBAQAogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lLCBzb3VyY2UpCiAgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBtc2cgPSAicmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZywgcnVuX3BhdGgsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSZWN1cnNpb25FcnJvciwgbXNnLCBydW5fcGF0aCwgemlwX25hbWUpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NheC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2F4LnB5CmluZGV4IDkwZjMwMTYuLjI0MTE4OTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2F4LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2F4LnB5CkBAIC0yMDAsNiArMjAwLDEzIEBACiAgICAgICAgIHBhcnNlU3RyaW5nKHMsIFhNTEdlbmVyYXRvcihyZXN1bHQsICd1dGYtOCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfc3RyKHNlbGYuZGF0YSwgJ3V0Zi04JykpCiAKKyAgICBkZWYgdGVzdF9wYXJzZVN0cmluZ190ZXh0KHNlbGYpOgorICAgICAgICBlbmNvZGluZ3MgPSAoJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCAndXRmLTgnLAorICAgICAgICAgICAgICAgICAgICAgJ3V0Zi0xNicsICd1dGYtMTZsZScsICd1dGYtMTZiZScpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBlbmNvZGluZ3M6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9zdHIoc2VsZi5kYXRhLCBlbmNvZGluZykpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VTdHJpbmcoc2VsZi5kYXRhKQorCiAgICAgZGVmIHRlc3RfcGFyc2VTdHJpbmdfYnl0ZXMoc2VsZik6CiAgICAgICAgICMgVVRGLTggaXMgZGVmYXVsdCBlbmNvZGluZywgVVMtQVNDSUkgaXMgY29tcGF0aWJsZSB3aXRoIFVURi04LAogICAgICAgICAjIFVURi0xNiBpcyBhdXRvZGV0ZWN0ZWQKQEAgLTMwNiwxMiArMzEzLDI0IEBACiAgICAgZGVmIG1ha2VfYnl0ZV9zdHJlYW0oc2VsZik6CiAgICAgICAgIHJldHVybiBCeXRlc0lPKGIiVGhpcyBpcyBhIGJ5dGUgc3RyZWFtLiIpCiAKKyAgICBkZWYgbWFrZV9jaGFyYWN0ZXJfc3RyZWFtKHNlbGYpOgorICAgICAgICByZXR1cm4gU3RyaW5nSU8oIlRoaXMgaXMgYSBjaGFyYWN0ZXIgc3RyZWFtLiIpCisKICAgICBkZWYgY2hlY2tDb250ZW50KHNlbGYsIHN0cmVhbSwgY29udGVudCk6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHN0cmVhbSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJlYW0ucmVhZCgpLCBjb250ZW50KQogICAgICAgICBzdHJlYW0uY2xvc2UoKQogCiAKKyAgICBkZWYgdGVzdF9jaGFyYWN0ZXJfc3RyZWFtKHNlbGYpOgorICAgICAgICAjIElmIHRoZSBzb3VyY2UgaXMgYW4gSW5wdXRTb3VyY2Ugd2l0aCBhIGNoYXJhY3RlciBzdHJlYW0sIHVzZSBpdC4KKyAgICAgICAgc3JjID0gSW5wdXRTb3VyY2Uoc2VsZi5maWxlKQorICAgICAgICBzcmMuc2V0Q2hhcmFjdGVyU3RyZWFtKHNlbGYubWFrZV9jaGFyYWN0ZXJfc3RyZWFtKCkpCisgICAgICAgIHByZXAgPSBwcmVwYXJlX2lucHV0X3NvdXJjZShzcmMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByZXAuZ2V0Qnl0ZVN0cmVhbSgpKQorICAgICAgICBzZWxmLmNoZWNrQ29udGVudChwcmVwLmdldENoYXJhY3RlclN0cmVhbSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIGNoYXJhY3RlciBzdHJlYW0uIikKKwogICAgIGRlZiB0ZXN0X2J5dGVfc3RyZWFtKHNlbGYpOgogICAgICAgICAjIElmIHRoZSBzb3VyY2UgaXMgYW4gSW5wdXRTb3VyY2UgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY2hhcmFjdGVyCiAgICAgICAgICMgc3RyZWFtIGJ1dCBkb2VzIGhhdmUgYSBieXRlIHN0cmVhbSwgdXNlIHRoZSBieXRlIHN0cmVhbS4KQEAgLTM0Niw2ICszNjUsMTQgQEAKICAgICAgICAgc2VsZi5jaGVja0NvbnRlbnQocHJlcC5nZXRCeXRlU3RyZWFtKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhpcyBpcyBhIGJ5dGUgc3RyZWFtLiIpCiAKKyAgICBkZWYgdGVzdF90ZXh0X2ZpbGUoc2VsZik6CisgICAgICAgICMgSWYgdGhlIHNvdXJjZSBpcyBhIHRleHQgZmlsZS1saWtlIG9iamVjdCwgdXNlIGl0IGFzIGEgY2hhcmFjdGVyCisgICAgICAgICMgc3RyZWFtLgorICAgICAgICBwcmVwID0gcHJlcGFyZV9pbnB1dF9zb3VyY2Uoc2VsZi5tYWtlX2NoYXJhY3Rlcl9zdHJlYW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJlcC5nZXRCeXRlU3RyZWFtKCkpCisgICAgICAgIHNlbGYuY2hlY2tDb250ZW50KHByZXAuZ2V0Q2hhcmFjdGVyU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgY2hhcmFjdGVyIHN0cmVhbS4iKQorCiAKICMgPT09PT0gWE1MR2VuZXJhdG9yCiAKQEAgLTEwMjUsNiArMTA1MiwxOSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKIAorICAgIGRlZiB0ZXN0X2V4cGF0X2lucHNvdXJjZV9jaGFyYWN0ZXJfc3RyZWFtKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcmVzdWx0ID0gQnl0ZXNJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKyAgICAgICAgaW5wc3JjID0gSW5wdXRTb3VyY2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9YTUxGSUxFLCAncnQnLCBlbmNvZGluZz0naXNvLTg4NTktMScpIGFzIGY6CisgICAgICAgICAgICBpbnBzcmMuc2V0Q2hhcmFjdGVyU3RyZWFtKGYpCisgICAgICAgICAgICBwYXJzZXIucGFyc2UoaW5wc3JjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKwogICAgICMgPT09PT0gSW5jcmVtZW50YWxQYXJzZXIgc3VwcG9ydAogCiAgICAgZGVmIHRlc3RfZXhwYXRfaW5jcmVtZW50YWwoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5IGIvTGliL3Rlc3QvdGVzdF9zY29wZS5weQppbmRleCBiMzI1NTQ1Li40MjM5YjI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKQEAgLTEsNyArMSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjaGVja19zeW50YXhfZXJyb3IsIGNweXRob25fb25seSwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2hlY2tfc3ludGF4X2Vycm9yLCBjcHl0aG9uX29ubHkKIAogCiBjbGFzcyBTY29wZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTc1Nyw4ICs3NTcsNSBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWYoKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFNjb3BlVGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NyaXB0X2hlbHBlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc2NyaXB0X2hlbHBlci5weQppbmRleCAzNzJkNmE3Li5hNzY4MGY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NjcmlwdF9oZWxwZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zY3JpcHRfaGVscGVyLnB5CkBAIC0xLDggKzEsOCBAQAotIiIiVW5pdHRlc3RzIGZvciB0ZXN0LnNjcmlwdF9oZWxwZXIuICBXaG8gdGVzdHMgdGhlIHRlc3QgaGVscGVyPyIiIgorIiIiVW5pdHRlc3RzIGZvciB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlci4gIFdobyB0ZXN0cyB0aGUgdGVzdCBoZWxwZXI/IiIiCiAKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCi1mcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBzY3JpcHRfaGVscGVyCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIApAQCAtMjMsMjEgKzIzLDIxIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGVycm9yX2NvbnRleHQ6CiAgICAgICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soJy1jJywgJ3N5cy5leGl0KDApJykKICAgICAgICAgZXJyb3JfbXNnID0gc3RyKGVycm9yX2NvbnRleHQuZXhjZXB0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEluKCdjb21tYW5kIGxpbmUgd2FzOicsIGVycm9yX21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignY29tbWFuZCBsaW5lOicsIGVycm9yX21zZykKICAgICAgICAgc2VsZi5hc3NlcnRJbignc3lzLmV4aXQoMCknLCBlcnJvcl9tc2csIG1zZz0ndW5leHBlY3RlZCBjb21tYW5kIGxpbmUnKQogCiAgICAgZGVmIHRlc3RfYXNzZXJ0X3B5dGhvbl9mYWlsdXJlX3JhaXNlcyhzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgZXJyb3JfY29udGV4dDoKICAgICAgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctYycsICdpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKScpCiAgICAgICAgIGVycm9yX21zZyA9IHN0cihlcnJvcl9jb250ZXh0LmV4Y2VwdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRJbignUHJvY2VzcyByZXR1cm4gY29kZSBpcyAwLCcsIGVycm9yX21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUHJvY2VzcyByZXR1cm4gY29kZSBpcyAwXG4nLCBlcnJvcl9tc2cpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDApJywgZXJyb3JfbXNnLAogICAgICAgICAgICAgICAgICAgICAgIG1zZz0ndW5leHBlY3RlZCBjb21tYW5kIGxpbmUuJykKIAogICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLlBvcGVuJykKICAgICBkZWYgdGVzdF9hc3NlcnRfcHl0aG9uX2lzb2xhdGVkX3doZW5fZW52X25vdF9yZXF1aXJlZChzZWxmLCBtb2NrX3BvcGVuKToKICAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzY3JpcHRfaGVscGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPUZhbHNlKSBhcyBtb2NrX2lyZV9mdW5jOgogICAgICAgICAgICAgbW9ja19wb3Blbi5zaWRlX2VmZmVjdCA9IFJ1bnRpbWVFcnJvcignYmFpbCBvdXQgb2YgdW5pdHRlc3QnKQogICAgICAgICAgICAgdHJ5OgpAQCAtNTYsNyArNTYsNyBAQAogICAgIGRlZiB0ZXN0X2Fzc2VydF9weXRob25fbm90X2lzb2xhdGVkX3doZW5fZW52X2lzX3JlcXVpcmVkKHNlbGYsIG1vY2tfcG9wZW4pOgogICAgICAgICAiIiJFbnN1cmUgdGhhdCAtSSBpcyBub3QgcGFzc2VkIHdoZW4gdGhlIGVudmlyb25tZW50IGlzIHJlcXVpcmVkLiIiIgogICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNjcmlwdF9oZWxwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9VHJ1ZSkgYXMgbW9ja19pcmVfZnVuYzoKICAgICAgICAgICAgIG1vY2tfcG9wZW4uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JykKICAgICAgICAgICAgIHRyeToKQEAgLTY5LDcgKzY5LDcgQEAKIAogCiBjbGFzcyBUZXN0U2NyaXB0SGVscGVyRW52aXJvbm1lbnQodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICIiIkNvZGUgY292ZXJhZ2UgZm9yIF9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpLiIiIgorICAgICIiIkNvZGUgY292ZXJhZ2UgZm9yIGludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkuIiIiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKQEAgLTg0LDIyICs4NCwyMiBAQAogICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLmNoZWNrX2NhbGwnKQogICAgIGRlZiB0ZXN0X2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50X3RydWUoc2VsZiwgbW9ja19jaGVja19jYWxsKToKICAgICAgICAgbW9ja19jaGVja19jYWxsLnNpZGVfZWZmZWN0ID0gc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IoJycsICcnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNjcmlwdF9oZWxwZXIuX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY3JpcHRfaGVscGVyLmludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY3JpcHRfaGVscGVyLmludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbW9ja19jaGVja19jYWxsLmNhbGxfY291bnQpCiAKICAgICBAbW9jay5wYXRjaCgnc3VicHJvY2Vzcy5jaGVja19jYWxsJykKICAgICBkZWYgdGVzdF9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudF9mYWxzZShzZWxmLCBtb2NrX2NoZWNrX2NhbGwpOgogICAgICAgICAjIFRoZSBtb2NrZWQgc3VicHJvY2Vzcy5jaGVja19jYWxsIGZha2VzIGEgbm8tZXJyb3IgcHJvY2Vzcy4KLSAgICAgICAgc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNjcmlwdF9oZWxwZXIuX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkpCisgICAgICAgIHNjcmlwdF9oZWxwZXIuaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNjcmlwdF9oZWxwZXIuaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtb2NrX2NoZWNrX2NhbGwuY2FsbF9jb3VudCkKIAogICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLmNoZWNrX2NhbGwnKQogICAgIGRlZiB0ZXN0X2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50X2RldGFpbHMoc2VsZiwgbW9ja19jaGVja19jYWxsKToKLSAgICAgICAgc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNjcmlwdF9oZWxwZXIuX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKKyAgICAgICAgc2NyaXB0X2hlbHBlci5pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2NyaXB0X2hlbHBlci5pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNjcmlwdF9oZWxwZXIuaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtb2NrX2NoZWNrX2NhbGwuY2FsbF9jb3VudCkKICAgICAgICAgY2hlY2tfY2FsbF9jb21tYW5kID0gbW9ja19jaGVja19jYWxsLmNhbGxfYXJnc1swXVswXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGVjdXRhYmxlLCBjaGVja19jYWxsX2NvbW1hbmRbMF0pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CmluZGV4IDhmOWExYzkuLmE5NzNmM2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CkBAIC03NSw5ICs3NSw4IEBACiAgICAgICAgIGFbOl0gPSBbRigpXSAqIDEwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0LnNlbGVjdChbXSwgYSwgW10pLCAoW10sIGFbOjVdLCBbXSkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChTZWxlY3RUZXN0Q2FzZSkKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgogICAgIHN1cHBvcnQucmVhcF9jaGlsZHJlbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKaW5kZXggOTUyZmRhNi4uNDU0YzE3YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKQEAgLTksMTAgKzksNyBAQAogZnJvbSB0aW1lIGltcG9ydCBzbGVlcAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdW5pdHRlc3QubW9jawotdHJ5OgotICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIHRpbWUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgdGltZQorZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgdGltZQogdHJ5OgogICAgIGltcG9ydCByZXNvdXJjZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMjUsNyArMjIsNyBAQAogICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykgYXMgbDoKICAgICAgICAgICAgIGwuYmluZCgoc3VwcG9ydC5IT1NULCAwKSkKLSAgICAgICAgICAgIGwubGlzdGVuKDMpCisgICAgICAgICAgICBsLmxpc3RlbigpCiAgICAgICAgICAgICBjID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGMuY29ubmVjdChsLmdldHNvY2tuYW1lKCkpCkBAIC0xODgsOCArMTg1LDggQEAKICAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQogCiAgICAgICAgIHMuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzLmdldF9rZXksIHdyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbWFwcGluZy5fX2dldGl0ZW1fXywgcmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBtYXBwaW5nLl9fZ2V0aXRlbV9fLCB3cikKIApAQCAtMjU4LDggKzI1NSw4IEBACiAgICAgICAgICAgICBzZWwucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQogICAgICAgICAgICAgc2VsLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgcmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHdyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHMuZ2V0X2tleSwgcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcy5nZXRfa2V5LCB3cikKIAogICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKICAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQpAQCAtMzYwLDcgKzM1NywzNSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJhbGFybSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwuYWxhcm0oKSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKLSAgICBkZWYgdGVzdF9zZWxlY3RfaW50ZXJydXB0KHNlbGYpOgorICAgIGRlZiB0ZXN0X3NlbGVjdF9pbnRlcnJ1cHRfZXhjKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBjbGFzcyBJbnRlcnJ1cHRTZWxlY3QoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgaGFuZGxlcigqYXJncyk6CisgICAgICAgICAgICByYWlzZSBJbnRlcnJ1cHRTZWxlY3QKKworICAgICAgICBvcmlnX2Fscm1faGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaWduYWwuc2lnbmFsLCBzaWduYWwuU0lHQUxSTSwgb3JpZ19hbHJtX2hhbmRsZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaWduYWwuYWxhcm0sIDApCisKKyAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHQgPSB0aW1lKCkKKyAgICAgICAgIyBzZWxlY3QoKSBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCB3aGljaCByYWlzZXMgYW4gZXhjZXB0aW9uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW50ZXJydXB0U2VsZWN0KToKKyAgICAgICAgICAgIHMuc2VsZWN0KDMwKQorICAgICAgICAjIHNlbGVjdCgpIHdhcyBpbnRlcnJ1cHRlZCBiZWZvcmUgdGhlIHRpbWVvdXQgb2YgMzAgc2Vjb25kcworICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgNS4wKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJhbGFybSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwuYWxhcm0oKSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9zZWxlY3RfaW50ZXJydXB0X25vcmFpc2Uoc2VsZik6CiAgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCiAKQEAgLTM3NCw4ICszOTksMTEgQEAKIAogICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKICAgICAgICAgdCA9IHRpbWUoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDIpKQotICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgMi41KQorICAgICAgICAjIHNlbGVjdCgpIGlzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLCBidXQgdGhlIHNpZ25hbCBoYW5kbGVyIGRvZXNuJ3QKKyAgICAgICAgIyByYWlzZSBhbiBleGNlcHRpb24sIHNvIHNlbGVjdCgpIHNob3VsZCBieSByZXRyaWVzIHdpdGggYSByZWNvbXB1dGVkCisgICAgICAgICMgdGltZW91dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDEuNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHRpbWUoKSAtIHQsIDEuMCkKIAogCiBjbGFzcyBTY2FsYWJsZVNlbGVjdG9yTWl4SW46CkBAIC00NTUsMTAgKzQ4MywxOCBAQAogICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicsIE5vbmUpCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdEZXZwb2xsU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5EZXZwb2xsU2VsZWN0b3IiKQorY2xhc3MgRGV2cG9sbFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UsIFNjYWxhYmxlU2VsZWN0b3JNaXhJbik6CisKKyAgICBTRUxFQ1RPUiA9IGdldGF0dHIoc2VsZWN0b3JzLCAnRGV2cG9sbFNlbGVjdG9yJywgTm9uZSkKKworCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFtEZWZhdWx0U2VsZWN0b3JUZXN0Q2FzZSwgU2VsZWN0U2VsZWN0b3JUZXN0Q2FzZSwKICAgICAgICAgICAgICBQb2xsU2VsZWN0b3JUZXN0Q2FzZSwgRXBvbGxTZWxlY3RvclRlc3RDYXNlLAotICAgICAgICAgICAgIEtxdWV1ZVNlbGVjdG9yVGVzdENhc2VdCisgICAgICAgICAgICAgS3F1ZXVlU2VsZWN0b3JUZXN0Q2FzZSwgRGV2cG9sbFNlbGVjdG9yVGVzdENhc2VdCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQogICAgIHN1cHBvcnQucmVhcF9jaGlsZHJlbigpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZXQucHkKaW5kZXggZjA4NGViZS4uMWE0OWVkZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZXQucHkKQEAgLTM2Miw2ICszNjIsOSBAQAogICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZigpIGlzIE5vbmUsICJDeWNsZSB3YXMgbm90IGNvbGxlY3RlZCIpCiAKKyAgICBkZWYgdGVzdF9mcmVlX2FmdGVyX2l0ZXJhdGluZyhzZWxmKToKKyAgICAgICAgc3VwcG9ydC5jaGVja19mcmVlX2FmdGVyX2l0ZXJhdGluZyhzZWxmLCBpdGVyLCBzZWxmLnRoZXR5cGUpCisKIGNsYXNzIFRlc3RTZXQoVGVzdEpvaW50T3BzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdGhldHlwZSA9IHNldAogICAgIGJhc2V0eXBlID0gc2V0CkBAIC05MzEsNyArOTM0LDcgQEAKIAogY2xhc3MgVGVzdEJhc2ljT3BzQnl0ZXMoVGVzdEJhc2ljT3BzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmNhc2UgICA9ICJzdHJpbmcgc2V0IgorICAgICAgICBzZWxmLmNhc2UgICA9ICJieXRlcyBzZXQiCiAgICAgICAgIHNlbGYudmFsdWVzID0gW2IiYSIsIGIiYiIsIGIiYyJdCiAgICAgICAgIHNlbGYuc2V0ICAgID0gc2V0KHNlbGYudmFsdWVzKQogICAgICAgICBzZWxmLmR1cCAgICA9IHNldChzZWxmLnZhbHVlcykKQEAgLTE3NDIsNiArMTc0NSwxOSBAQAogICAgICAgICBzLnVwZGF0ZShyYW5nZSgxMDApKQogICAgICAgICBsaXN0KHNpKQogCisgICAgZGVmIHRlc3RfbWVyZ2VfYW5kX211dGF0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFzaCgwKQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvKToKKyAgICAgICAgICAgICAgICBvdGhlci5jbGVhcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgb3RoZXIgPSBzZXQoKQorICAgICAgICBvdGhlciA9IHtYKCkgZm9yIGkgaW4gcmFuZ2UoMTApfQorICAgICAgICBzID0gezB9CisgICAgICAgIHMudXBkYXRlKG90aGVyKQorCiAjIEFwcGxpY2F0aW9uIHRlc3RzIChiYXNlZCBvbiBEYXZpZCBFcHBzdGVpbidzIGdyYXBoIHJlY2lwZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIGRlZiBwb3dlcnNldChVKToKQEAgLTE4MjAsNyArMTgzNiw3IEBACiAKICAgICAgICAgIyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1Ym9jdGFoZWRyb24KICAgICAgICAgIyA4IHRyaWFuZ3VsYXIgZmFjZXMgYW5kIDYgc3F1YXJlIGZhY2VzCi0gICAgICAgICMgMTIgaW5kZW50aWNhbCB2ZXJ0aWNlcyBlYWNoIGNvbm5lY3RpbmcgYSB0cmlhbmdsZSBhbmQgc3F1YXJlCisgICAgICAgICMgMTIgaWRlbnRpY2FsIHZlcnRpY2VzIGVhY2ggY29ubmVjdGluZyBhIHRyaWFuZ2xlIGFuZCBzcXVhcmUKIAogICAgICAgICBnID0gY3ViZSgzKQogICAgICAgICBjdWJvY3RhaGVkcm9uID0gbGluZWdyYXBoKGcpICAgICAgICAgICAgIyBWKCAtLT4ge1YxLCBWMiwgVjMsIFY0fQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkgYi9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQppbmRleCBiZDUxZDg2Li5iNzFhZjJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQpAQCAtMTYyLDYgKzE2MiwxMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdDbG9zZWQgc2hlbGYgc2hvdWxkIG5vdCBmaW5kIGEga2V5JykKIAorICAgIGRlZiB0ZXN0X2RlZmF1bHRfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHdpdGggc2hlbHZlLlNoZWxmKHt9KSBhcyBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLl9wcm90b2NvbCwgMykKKwogZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCiAKIGNsYXNzIFRlc3RTaGVsdmVCYXNlKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2hsZXgucHkgYi9MaWIvdGVzdC90ZXN0X3NobGV4LnB5CmluZGV4IGQyODA5YWUuLjRmYWZkZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2hsZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaGxleC5weQpAQCAtMyw3ICszLDYgQEAKIGltcG9ydCBzdHJpbmcKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogCiAjIFRoZSBvcmlnaW5hbCB0ZXN0IGRhdGEgc2V0IHdhcyBmcm9tIHNoZWxsd29yZHMsIGJ5IEhhcnRtdXQgR29lYmVsLgpAQCAtMTk1LDggKzE5NCw1IEBACiAgICAgICAgIGlmIG1ldGhuYW1lLnN0YXJ0c3dpdGgoInRlc3QiKSBhbmQgbWV0aG5hbWUgIT0gInRlc3RDb21wYXQiOgogICAgICAgICAgICAgZGVsYXR0cihTaGxleFRlc3QsIG1ldGhuYW1lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU2hsZXhUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CmluZGV4IGQyZDRkMDMuLjFkNWUwMWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CkBAIC0zMCw2ICszMCwxMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIEJaMl9TVVBQT1JURUQgPSBGYWxzZQogCit0cnk6CisgICAgaW1wb3J0IGx6bWEKKyAgICBMWk1BX1NVUFBPUlRFRCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBMWk1BX1NVUFBPUlRFRCA9IEZhbHNlCisKIFRFU1RGTjIgPSBURVNURk4gKyAiMiIKIAogdHJ5OgpAQCAtMTIyOSw2ICsxMjM1LDggQEAKICAgICAgICAgZm9ybWF0cyA9IFsndGFyJywgJ2d6dGFyJywgJ3ppcCddCiAgICAgICAgIGlmIEJaMl9TVVBQT1JURUQ6CiAgICAgICAgICAgICBmb3JtYXRzLmFwcGVuZCgnYnp0YXInKQorICAgICAgICBpZiBMWk1BX1NVUFBPUlRFRDoKKyAgICAgICAgICAgIGZvcm1hdHMuYXBwZW5kKCd4enRhcicpCiAKICAgICAgICAgcm9vdF9kaXIsIGJhc2VfZGlyID0gc2VsZi5fY3JlYXRlX2ZpbGVzKCkKICAgICAgICAgZXhwZWN0ZWQgPSBybGlzdGRpcihyb290X2RpcikKQEAgLTEyNDksNyArMTI1Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5SZWFkRXJyb3IsIHVucGFja19hcmNoaXZlLCBURVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVucGFja19hcmNoaXZlLCBURVNURk4sIGZvcm1hdD0neHh4JykKIAotICAgIGRlZiB0ZXN0X3VucGFja19yZWdpc3Rlcnkoc2VsZik6CisgICAgZGVmIHRlc3RfdW5wYWNrX3JlZ2lzdHJ5KHNlbGYpOgogCiAgICAgICAgIGZvcm1hdHMgPSBnZXRfdW5wYWNrX2Zvcm1hdHMoKQogCkBAIC0xNjY1LDYgKzE2NzMsMjQgQEAKICAgICAgICAgcnYgPSBzaHV0aWwubW92ZShzZWxmLnNyY19maWxlLCBvcy5wYXRoLmpvaW4oc2VsZi5kc3RfZGlyLCAnYmFyJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnYsIG9zLnBhdGguam9pbihzZWxmLmRzdF9kaXIsICdiYXInKSkKIAorICAgIEBtb2NrX3JlbmFtZQorICAgIGRlZiB0ZXN0X21vdmVfZmlsZV9zcGVjaWFsX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBtb3ZlZCA9IFtdCisgICAgICAgIGRlZiBfY29weShzcmMsIGRzdCk6CisgICAgICAgICAgICBtb3ZlZC5hcHBlbmQoKHNyYywgZHN0KSkKKyAgICAgICAgc2h1dGlsLm1vdmUoc2VsZi5zcmNfZmlsZSwgc2VsZi5kc3RfZGlyLCBjb3B5X2Z1bmN0aW9uPV9jb3B5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb3ZlZCksIDEpCisKKyAgICBAbW9ja19yZW5hbWUKKyAgICBkZWYgdGVzdF9tb3ZlX2Rpcl9zcGVjaWFsX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBtb3ZlZCA9IFtdCisgICAgICAgIGRlZiBfY29weShzcmMsIGRzdCk6CisgICAgICAgICAgICBtb3ZlZC5hcHBlbmQoKHNyYywgZHN0KSkKKyAgICAgICAgc3VwcG9ydC5jcmVhdGVfZW1wdHlfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zcmNfZGlyLCAnY2hpbGQnKSkKKyAgICAgICAgc3VwcG9ydC5jcmVhdGVfZW1wdHlfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zcmNfZGlyLCAnY2hpbGQxJykpCisgICAgICAgIHNodXRpbC5tb3ZlKHNlbGYuc3JjX2Rpciwgc2VsZi5kc3RfZGlyLCBjb3B5X2Z1bmN0aW9uPV9jb3B5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb3ZlZCksIDMpCisKIAogY2xhc3MgVGVzdENvcHlGaWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTgwMiwxNSArMTgyOCwyNyBAQAogCiAgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgogICAgICAgICAgICAgZW52WydDT0xVTU5TJ10gPSAnNzc3JworICAgICAgICAgICAgZGVsIGVudlsnTElORVMnXQogICAgICAgICAgICAgc2l6ZSA9IHNodXRpbC5nZXRfdGVybWluYWxfc2l6ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZS5jb2x1bW5zLCA3NzcpCiAKICAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBkZWwgZW52WydDT0xVTU5TJ10KICAgICAgICAgICAgIGVudlsnTElORVMnXSA9ICc4ODgnCiAgICAgICAgICAgICBzaXplID0gc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLmxpbmVzLCA4ODgpCiAKKyAgICBkZWYgdGVzdF9iYWRfZW52aXJvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnZbJ0NPTFVNTlMnXSA9ICd4eHgnCisgICAgICAgICAgICBlbnZbJ0xJTkVTJ10gPSAneXl5JworICAgICAgICAgICAgc2l6ZSA9IHNodXRpbC5nZXRfdGVybWluYWxfc2l6ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUuY29sdW1ucywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZS5saW5lcywgMCkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLmlzYXR0eShzeXMuX19zdGRvdXRfXy5maWxlbm8oKSksICJub3Qgb24gdHR5IikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZ2V0X3Rlcm1pbmFsX3NpemUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZCBvcy5nZXRfdGVybWluYWxfc2l6ZSgpJykKICAgICBkZWYgdGVzdF9zdHR5X21hdGNoKHNlbGYpOgogICAgICAgICAiIiJDaGVjayBpZiBzdHR5IHJldHVybnMgdGhlIHNhbWUgcmVzdWx0cyBpZ25vcmluZyBlbnYKIApAQCAtMTgzMSw2ICsxODY5LDI1IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCisgICAgZGVmIHRlc3RfZmFsbGJhY2soc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZGVsIGVudlsnTElORVMnXQorICAgICAgICAgICAgZGVsIGVudlsnQ09MVU1OUyddCisKKyAgICAgICAgICAgICMgc3lzLl9fc3Rkb3V0X18gaGFzIG5vIGZpbGVubygpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKHN5cywgJ19fc3Rkb3V0X18nLCBOb25lKToKKyAgICAgICAgICAgICAgICBzaXplID0gc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplKGZhbGxiYWNrPSgxMCwgMjApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLmNvbHVtbnMsIDEwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLmxpbmVzLCAyMCkKKworICAgICAgICAgICAgIyBzeXMuX19zdGRvdXRfXyBpcyBub3QgYSB0ZXJtaW5hbCBvbiBVbml4CisgICAgICAgICAgICAjIG9yIGZpbGVubygpIG5vdCBpbiAoMCwgMSwgMikgb24gV2luZG93cworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICd3JykgYXMgZiwgXAorICAgICAgICAgICAgICAgICBzdXBwb3J0LnN3YXBfYXR0cihzeXMsICdfX3N0ZG91dF9fJywgZik6CisgICAgICAgICAgICAgICAgc2l6ZSA9IHNodXRpbC5nZXRfdGVybWluYWxfc2l6ZShmYWxsYmFjaz0oMzAsIDQwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZS5jb2x1bW5zLCAzMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZS5saW5lcywgNDApCisKIAogY2xhc3MgUHVibGljQVBJVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIkVuc3VyZXMgdGhhdCB0aGUgY29ycmVjdCB2YWx1ZXMgYXJlIGV4cG9zZWQgaW4gdGhlIHB1YmxpYyBBUEkuIiIiCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CmluZGV4IDc0Zjc0YWYuLjFiODBmZjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CkBAIC0xLDE5ICsxLDI1IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCitpbXBvcnQgZW51bQogaW1wb3J0IGdjCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IHN5cywgb3MsIHRpbWUsIGVycm5vCi1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgc3Bhd25fcHl0aG9uCitmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBzcGF3bl9weXRob24KIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBfdGVzdGNhcGkKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdGVzdGNhcGkgPSBOb25lCiAKIAogY2xhc3MgSGFuZGxlckJDYWxsZWQoRXhjZXB0aW9uKToKQEAgLTM5LDYgKzQ1LDIzIEBACiAgICAgICAgIHJldHVybiBOb25lCiAKIAorY2xhc3MgR2VuZXJpY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYodGhyZWFkaW5nIGlzIE5vbmUsICJ0ZXN0IG5lZWRzIHRocmVhZGluZyBtb2R1bGUiKQorICAgIGRlZiB0ZXN0X2VudW1zKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoc2lnbmFsKToKKyAgICAgICAgICAgIHNpZyA9IGdldGF0dHIoc2lnbmFsLCBuYW1lKQorICAgICAgICAgICAgaWYgbmFtZSBpbiB7J1NJR19ERkwnLCAnU0lHX0lHTid9OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzaWcsIHNpZ25hbC5IYW5kbGVycykKKyAgICAgICAgICAgIGVsaWYgbmFtZSBpbiB7J1NJR19CTE9DSycsICdTSUdfVU5CTE9DSycsICdTSUdfU0VUTUFTSyd9OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzaWcsIHNpZ25hbC5TaWdtYXNrcykKKyAgICAgICAgICAgIGVsaWYgbmFtZS5zdGFydHN3aXRoKCdTSUcnKSBhbmQgbm90IG5hbWUuc3RhcnRzd2l0aCgnU0lHXycpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzaWcsIHNpZ25hbC5TaWduYWxzKQorICAgICAgICAgICAgZWxpZiBuYW1lLnN0YXJ0c3dpdGgoJ0NUUkxfJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNpZywgc2lnbmFsLlNpZ25hbHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMucGxhdGZvcm0sICJ3aW4zMiIpCisKKwogQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIk5vdCB2YWxpZCBvbiBXaW5kb3dzIikKIGNsYXNzIEludGVyUHJvY2Vzc1NpZ25hbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBNQVhfRFVSQVRJT04gPSAyMCAgICMgRW50aXJlIHRlc3Qgc2hvdWxkIGxhc3QgYXQgbW9zdCAyMCBzZWMuCkBAIC0xOTUsNiArMjE4LDcgQEAKIAogICAgIGRlZiB0ZXN0X2dldHNpZ25hbChzZWxmKToKICAgICAgICAgaHVwID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLnRyaXZpYWxfc2lnbmFsX2hhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShodXAsIHNpZ25hbC5IYW5kbGVycykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdIVVApLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpdmlhbF9zaWduYWxfaGFuZGxlcikKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBodXApCkBAIC0yMjksMTUgKzI1Myw3NyBAQAogCiAgICAgZGVmIHRlc3RfaW52YWxpZF9mZChzZWxmKToKICAgICAgICAgZmQgPSBzdXBwb3J0Lm1ha2VfYmFkX2ZkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2lnbmFsLnNldF93YWtldXBfZmQsIGZkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCBmZCkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfc29ja2V0KHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE9TRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCwgZmQpCisKKyAgICBkZWYgdGVzdF9zZXRfd2FrZXVwX2ZkX3Jlc3VsdChzZWxmKToKKyAgICAgICAgcjEsIHcxID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcjEpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgdzEpCisgICAgICAgIHIyLCB3MiA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHIyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHcyKQorCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzZXRfYmxvY2tpbmcnKToKKyAgICAgICAgICAgIG9zLnNldF9ibG9ja2luZyh3MSwgRmFsc2UpCisgICAgICAgICAgICBvcy5zZXRfYmxvY2tpbmcodzIsIEZhbHNlKQorCisgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHcxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHcyKSwgdzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLnNldF93YWtldXBfZmQoLTEpLCB3MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuc2V0X3dha2V1cF9mZCgtMSksIC0xKQorCisgICAgZGVmIHRlc3Rfc2V0X3dha2V1cF9mZF9zb2NrZXRfcmVzdWx0KHNlbGYpOgorICAgICAgICBzb2NrMSA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jazEuY2xvc2UpCisgICAgICAgIHNvY2sxLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBmZDEgPSBzb2NrMS5maWxlbm8oKQorCisgICAgICAgIHNvY2syID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrMi5jbG9zZSkKKyAgICAgICAgc29jazIuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGZkMiA9IHNvY2syLmZpbGVubygpCisKKyAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQoZmQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5zZXRfd2FrZXVwX2ZkKGZkMiksIGZkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuc2V0X3dha2V1cF9mZCgtMSksIGZkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuc2V0X3dha2V1cF9mZCgtMSksIC0xKQorCisgICAgIyBPbiBXaW5kb3dzLCBmaWxlcyBhcmUgYWx3YXlzIGJsb2NraW5nIGFuZCBXaW5kb3dzIGRvZXMgbm90IHByb3ZpZGUgYQorICAgICMgZnVuY3Rpb24gdG8gdGVzdCBpZiBhIHNvY2tldCBpcyBpbiBub24tYmxvY2tpbmcgbW9kZS4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAidGVzdHMgc3BlY2lmaWMgdG8gUE9TSVgiKQorICAgIGRlZiB0ZXN0X3NldF93YWtldXBfZmRfYmxvY2tpbmcoc2VsZik6CisgICAgICAgIHJmZCwgd2ZkID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcmZkKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHdmZCkKKworICAgICAgICAjIGZkIG11c3QgYmUgbm9uLWJsb2NraW5nCisgICAgICAgIG9zLnNldF9ibG9ja2luZyh3ZmQsIFRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCh3ZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBmZCAlcyBtdXN0IGJlIGluIG5vbi1ibG9ja2luZyBtb2RlIiAlIHdmZCkKKworICAgICAgICAjIG5vbi1ibG9ja2luZyBpcyBvaworICAgICAgICBvcy5zZXRfYmxvY2tpbmcod2ZkLCBGYWxzZSkKKyAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQod2ZkKQorICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCgtMSkKIAogCiBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiTm90IHZhbGlkIG9uIFdpbmRvd3MiKQogY2xhc3MgV2FrZXVwU2lnbmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwSWYoX3Rlc3RjYXBpIGlzIE5vbmUsICduZWVkIF90ZXN0Y2FwaScpCiAgICAgZGVmIGNoZWNrX3dha2V1cChzZWxmLCB0ZXN0X2JvZHksICpzaWduYWxzLCBvcmRlcmVkPVRydWUpOgogICAgICAgICAjIHVzZSBhIHN1YnByb2Nlc3MgdG8gaGF2ZSBvbmx5IG9uZSB0aHJlYWQKICAgICAgICAgY29kZSA9ICIiImlmIDE6Ci0gICAgICAgIGltcG9ydCBmY250bAorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCiAgICAgICAgIGltcG9ydCBvcwogICAgICAgICBpbXBvcnQgc2lnbmFsCiAgICAgICAgIGltcG9ydCBzdHJ1Y3QKQEAgLTI2MCwxMCArMzQ2LDcgQEAKIAogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICByZWFkLCB3cml0ZSA9IG9zLnBpcGUoKQotICAgICAgICBmb3IgZmQgaW4gKHJlYWQsIHdyaXRlKToKLSAgICAgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwsIDApCi0gICAgICAgICAgICBmbGFncyA9IGZsYWdzIHwgb3MuT19OT05CTE9DSwotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsYWdzKQorICAgICAgICBvcy5zZXRfYmxvY2tpbmcod3JpdGUsIEZhbHNlKQogICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCh3cml0ZSkKIAogICAgICAgICB0ZXN0KCkKQEAgLTI3MSwyMSArMzU0LDIxIEBACiAKICAgICAgICAgb3MuY2xvc2UocmVhZCkKICAgICAgICAgb3MuY2xvc2Uod3JpdGUpCi0gICAgICAgICIiIi5mb3JtYXQoc2lnbmFscywgb3JkZXJlZCwgdGVzdF9ib2R5KQorICAgICAgICAiIiIuZm9ybWF0KHR1cGxlKG1hcChpbnQsIHNpZ25hbHMpKSwgb3JkZXJlZCwgdGVzdF9ib2R5KQogCiAgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoX3Rlc3RjYXBpIGlzIE5vbmUsICduZWVkIF90ZXN0Y2FwaScpCiAgICAgZGVmIHRlc3Rfd2FrZXVwX3dyaXRlX2Vycm9yKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxNjEwNTogd3JpdGUoKSBlcnJvcnMgaW4gdGhlIEMgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIG5vdAogICAgICAgICAjIHBhc3Mgc2lsZW50bHkuCiAgICAgICAgICMgVXNlIGEgc3VicHJvY2VzcyB0byBoYXZlIG9ubHkgb25lIHRocmVhZC4KICAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgIGltcG9ydCBmY250bAogICAgICAgICBpbXBvcnQgb3MKICAgICAgICAgaW1wb3J0IHNpZ25hbAogICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGltcG9ydCB0aW1lCiAgICAgICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRlcnIKIAogICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKQEAgLTI5MywxNSArMzc2LDEzIEBACiAKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKICAgICAgICAgciwgdyA9IG9zLnBpcGUoKQotICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfR0VURkwsIDApCi0gICAgICAgIGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfU0VURkwsIGZsYWdzIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgb3Muc2V0X2Jsb2NraW5nKHIsIEZhbHNlKQogCiAgICAgICAgICMgU2V0IHdha2V1cF9mZCBhIHJlYWQtb25seSBmaWxlIGRlc2NyaXB0b3IgdG8gdHJpZ2dlciB0aGUgZXJyb3IKICAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQocikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCi0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1LjApCisgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX3NpZ25hbChzaWduYWwuU0lHQUxSTSkKICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgogICAgICAgICAgICAgIyBBbiBpZ25vcmVkIGV4Y2VwdGlvbiBzaG91bGQgaGF2ZSBiZWVuIHByaW50ZWQgb3V0IG9uIHN0ZGVycgogICAgICAgICAgICAgZXJyID0gZXJyLmdldHZhbHVlKCkKQEAgLTMxMiw2ICszOTMsOSBAQAogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKGVycikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJaZXJvRGl2aXNpb25FcnJvciBub3QgcmFpc2VkIikKKworICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICBvcy5jbG9zZSh3KQogICAgICAgICAiIiIKICAgICAgICAgciwgdyA9IG9zLnBpcGUoKQogICAgICAgICB0cnk6CkBAIC0zMzQsMTggKzQxOCwyOCBAQAogICAgICAgICAgICAgVElNRU9VVF9GVUxMID0gMTAKICAgICAgICAgICAgIFRJTUVPVVRfSEFMRiA9IDUKIAorICAgICAgICAgICAgY2xhc3MgSW50ZXJydXB0U2VsZWN0KEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbnRlcnJ1cHRTZWxlY3QKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCisKICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQotICAgICAgICAgICAgYmVmb3JlX3RpbWUgPSB0aW1lLnRpbWUoKQorCiAgICAgICAgICAgICAjIFdlIGF0dGVtcHQgdG8gZ2V0IGEgc2lnbmFsIGR1cmluZyB0aGUgc2xlZXAsCiAgICAgICAgICAgICAjIGJlZm9yZSBzZWxlY3QgaXMgY2FsbGVkCi0gICAgICAgICAgICB0aW1lLnNsZWVwKFRJTUVPVVRfRlVMTCkKLSAgICAgICAgICAgIG1pZF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIGR0ID0gbWlkX3RpbWUgLSBiZWZvcmVfdGltZQotICAgICAgICAgICAgaWYgZHQgPj0gVElNRU9VVF9IQUxGOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiJXMgPj0gJXMiICUgKGR0LCBUSU1FT1VUX0hBTEYpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtdLCBbXSwgVElNRU9VVF9GVUxMKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdFNlbGVjdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic2VsZWN0KCkgd2FzIG5vdCBpbnRlcnJ1cHRlZCIpCisKKyAgICAgICAgICAgIGJlZm9yZV90aW1lID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbcmVhZF0sIFtdLCBbXSwgVElNRU9VVF9GVUxMKQotICAgICAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICBkdCA9IGFmdGVyX3RpbWUgLSBtaWRfdGltZQorICAgICAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgICAgIGR0ID0gYWZ0ZXJfdGltZSAtIGJlZm9yZV90aW1lCiAgICAgICAgICAgICBpZiBkdCA+PSBUSU1FT1VUX0hBTEY6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlcyA+PSAlcyIgJSAoZHQsIFRJTUVPVVRfSEFMRikpCiAgICAgICAgICIiIiwgc2lnbmFsLlNJR0FMUk0pCkBAIC0zNTgsMTYgKzQ1MiwyMyBAQAogICAgICAgICAgICAgVElNRU9VVF9GVUxMID0gMTAKICAgICAgICAgICAgIFRJTUVPVVRfSEFMRiA9IDUKIAorICAgICAgICAgICAgY2xhc3MgSW50ZXJydXB0U2VsZWN0KEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbnRlcnJ1cHRTZWxlY3QKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCisKICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQotICAgICAgICAgICAgYmVmb3JlX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgYmVmb3JlX3RpbWUgPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgICAgICAjIFdlIGF0dGVtcHQgdG8gZ2V0IGEgc2lnbmFsIGR1cmluZyB0aGUgc2VsZWN0IGNhbGwKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtyZWFkXSwgW10sIFtdLCBUSU1FT1VUX0ZVTEwpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRTZWxlY3Q6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk9TRXJyb3Igbm90IHJhaXNlZCIpCi0gICAgICAgICAgICBhZnRlcl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInNlbGVjdCgpIHdhcyBub3QgaW50ZXJydXB0ZWQiKQorICAgICAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgICAgIGR0ID0gYWZ0ZXJfdGltZSAtIGJlZm9yZV90aW1lCiAgICAgICAgICAgICBpZiBkdCA+PSBUSU1FT1VUX0hBTEY6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCIlcyA+PSAlcyIgJSAoZHQsIFRJTUVPVVRfSEFMRikpCkBAIC0zNzUsOSArNDc2LDEwIEBACiAKICAgICBkZWYgdGVzdF9zaWdudW0oc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfd2FrZXVwKCIiImRlZiB0ZXN0KCk6CisgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCiAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IxLCBoYW5kbGVyKQotICAgICAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbmFsLlNJR1VTUjEpCi0gICAgICAgICAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWduYWwuU0lHQUxSTSkKKyAgICAgICAgICAgIF90ZXN0Y2FwaS5yYWlzZV9zaWduYWwoc2lnbmFsLlNJR1VTUjEpCisgICAgICAgICAgICBfdGVzdGNhcGkucmFpc2Vfc2lnbmFsKHNpZ25hbC5TSUdBTFJNKQogICAgICAgICAiIiIsIHNpZ25hbC5TSUdVU1IxLCBzaWduYWwuU0lHQUxSTSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAncHRocmVhZF9zaWdtYXNrJyksCkBAIC0zOTEsMTMgKzQ5Myw5NyBAQAogICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWdudW0yLCBoYW5kbGVyKQogCiAgICAgICAgICAgICBzaWduYWwucHRocmVhZF9zaWdtYXNrKHNpZ25hbC5TSUdfQkxPQ0ssIChzaWdudW0xLCBzaWdudW0yKSkKLSAgICAgICAgICAgIG9zLmtpbGwob3MuZ2V0cGlkKCksIHNpZ251bTEpCi0gICAgICAgICAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWdudW0yKQorICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX3NpZ25hbChzaWdudW0xKQorICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX3NpZ25hbChzaWdudW0yKQogICAgICAgICAgICAgIyBVbmJsb2NraW5nIHRoZSAyIHNpZ25hbHMgY2FsbHMgdGhlIEMgc2lnbmFsIGhhbmRsZXIgdHdpY2UKICAgICAgICAgICAgIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19VTkJMT0NLLCAoc2lnbnVtMSwgc2lnbnVtMikpCiAgICAgICAgICIiIiwgIHNpZ25hbC5TSUdVU1IxLCBzaWduYWwuU0lHVVNSMiwgb3JkZXJlZD1GYWxzZSkKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKSwgJ25lZWQgc29ja2V0LnNvY2tldHBhaXInKQorY2xhc3MgV2FrZXVwU29ja2V0U2lnbmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0LnNraXBJZihfdGVzdGNhcGkgaXMgTm9uZSwgJ25lZWQgX3Rlc3RjYXBpJykKKyAgICBkZWYgdGVzdF9zb2NrZXQoc2VsZik6CisgICAgICAgICMgdXNlIGEgc3VicHJvY2VzcyB0byBoYXZlIG9ubHkgb25lIHRocmVhZAorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgaW1wb3J0IHNpZ25hbAorICAgICAgICBpbXBvcnQgc29ja2V0CisgICAgICAgIGltcG9ydCBzdHJ1Y3QKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorCisgICAgICAgIHNpZ251bSA9IHNpZ25hbC5TSUdJTlQKKyAgICAgICAgc2lnbmFscyA9IChzaWdudW0sKQorCisgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbnVtLCBoYW5kbGVyKQorCisgICAgICAgIHJlYWQsIHdyaXRlID0gc29ja2V0LnNvY2tldHBhaXIoKQorICAgICAgICByZWFkLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICB3cml0ZS5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQod3JpdGUuZmlsZW5vKCkpCisKKyAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX3NpZ25hbChzaWdudW0pCisKKyAgICAgICAgZGF0YSA9IHJlYWQucmVjdigxKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigibm8gc2lnbnVtIHdyaXR0ZW4iKQorICAgICAgICByYWlzZWQgPSBzdHJ1Y3QudW5wYWNrKCdCJywgZGF0YSkKKyAgICAgICAgaWYgcmFpc2VkICE9IHNpZ25hbHM6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVyICE9ICVyIiAlIChyYWlzZWQsIHNpZ25hbHMpKQorCisgICAgICAgIHJlYWQuY2xvc2UoKQorICAgICAgICB3cml0ZS5jbG9zZSgpCisgICAgICAgICIiIgorCisgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoX3Rlc3RjYXBpIGlzIE5vbmUsICduZWVkIF90ZXN0Y2FwaScpCisgICAgZGVmIHRlc3Rfc2VuZF9lcnJvcihzZWxmKToKKyAgICAgICAgIyBVc2UgYSBzdWJwcm9jZXNzIHRvIGhhdmUgb25seSBvbmUgdGhyZWFkLgorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBhY3Rpb24gPSAnc2VuZCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFjdGlvbiA9ICd3cml0ZScKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpbXBvcnQgc2lnbmFsCisgICAgICAgIGltcG9ydCBzb2NrZXQKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRlcnIKKworICAgICAgICBzaWdudW0gPSBzaWduYWwuU0lHSU5UCisKKyAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWdudW0sIGhhbmRsZXIpCisKKyAgICAgICAgcmVhZCwgd3JpdGUgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICAgICAgIHJlYWQuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHdyaXRlLnNldGJsb2NraW5nKEZhbHNlKQorCisgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHdyaXRlLmZpbGVubygpKQorCisgICAgICAgICMgQ2xvc2Ugc29ja2V0czogc2VuZCgpIHdpbGwgZmFpbAorICAgICAgICByZWFkLmNsb3NlKCkKKyAgICAgICAgd3JpdGUuY2xvc2UoKQorCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyOgorICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX3NpZ25hbChzaWdudW0pCisKKyAgICAgICAgZXJyID0gZXJyLmdldHZhbHVlKCkKKyAgICAgICAgaWYgKCdFeGNlcHRpb24gaWdub3JlZCB3aGVuIHRyeWluZyB0byB7YWN0aW9ufSB0byB0aGUgc2lnbmFsIHdha2V1cCBmZCcKKyAgICAgICAgICAgIG5vdCBpbiBlcnIpOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXJyKQorICAgICAgICAiIiIuZm9ybWF0KGFjdGlvbj1hY3Rpb24pCisgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKworCiBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiTm90IHZhbGlkIG9uIFdpbmRvd3MiKQogY2xhc3MgU2lnaW50ZXJydXB0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTQxOCw3ICs2MDQsNyBAQAogICAgICAgICAgICAgciwgdyA9IG9zLnBpcGUoKQogCiAgICAgICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKLSAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgMSAvIDAKIAogICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKICAgICAgICAgICAgIGlmIGludGVycnVwdCBpcyBub3QgTm9uZToKQEAgLTQyOCwxOCArNjE0LDIxIEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogICAgICAgICAgICAgIyBydW4gdGhlIHRlc3QgdHdpY2UKLSAgICAgICAgICAgIGZvciBsb29wIGluIHJhbmdlKDIpOgotICAgICAgICAgICAgICAgICMgc2VuZCBhIFNJR0FMUk0gaW4gYSBzZWNvbmQgKGR1cmluZyB0aGUgcmVhZCkKLSAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICMgYmxvY2tpbmcgY2FsbDogcmVhZCBmcm9tIGEgcGlwZSB3aXRob3V0IGRhdGEKLSAgICAgICAgICAgICAgICAgICAgb3MucmVhZChyLCAxKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKLSAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vICE9IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgyKQotICAgICAgICAgICAgc3lzLmV4aXQoMykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgbG9vcCBpbiByYW5nZSgyKToKKyAgICAgICAgICAgICAgICAgICAgIyBzZW5kIGEgU0lHQUxSTSBpbiBhIHNlY29uZCAoZHVyaW5nIHRoZSByZWFkKQorICAgICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBibG9ja2luZyBjYWxsOiByZWFkIGZyb20gYSBwaXBlIHdpdGhvdXQgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgb3MucmVhZChyLCAxKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgyKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDMpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UodykKICAgICAgICAgIiIiICUgKGludGVycnVwdCwpCiAgICAgICAgIHdpdGggc3Bhd25fcHl0aG9uKCctYycsIGNvZGUpIGFzIHByb2Nlc3M6CiAgICAgICAgICAgICB0cnk6CkBAIC01MzcsOCArNzI2LDggQEAKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVlRBTFJNLCBzZWxmLnNpZ192dGFscm0pCiAgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2VsZi5pdGltZXIsIDAuMywgMC4yKQogCi0gICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICB3aGlsZSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUgPCA2MC4wOgorICAgICAgICBzdGFydF90aW1lID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICB3aGlsZSB0aW1lLm1vbm90b25pYygpIC0gc3RhcnRfdGltZSA8IDYwLjA6CiAgICAgICAgICAgICAjIHVzZSB1cCBzb21lIHZpcnR1YWwgdGltZSBieSBkb2luZyByZWFsIHdvcmsKICAgICAgICAgICAgIF8gPSBwb3coMTIzNDUsIDY3ODkwLCAxMDAwMDAxOSkKICAgICAgICAgICAgIGlmIHNpZ25hbC5nZXRpdGltZXIoc2VsZi5pdGltZXIpID09ICgwLjAsIDAuMCk6CkBAIC01NjAsOCArNzQ5LDggQEAKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHUFJPRiwgc2VsZi5zaWdfcHJvZikKICAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzZWxmLml0aW1lciwgMC4yLCAwLjIpCiAKLSAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgIHdoaWxlIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8IDYwLjA6CisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgLSBzdGFydF90aW1lIDwgNjAuMDoKICAgICAgICAgICAgICMgZG8gc29tZSB3b3JrCiAgICAgICAgICAgICBfID0gcG93KDEyMzQ1LCA2Nzg5MCwgMTAwMDAwMTkpCiAgICAgICAgICAgICBpZiBzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSA9PSAoMC4wLCAwLjApOgpAQCAtNjA0LDYgKzc5Myw4IEBACiAgICAgICAgICAgICBzaWduYWwucHRocmVhZF9zaWdtYXNrKHNpZ25hbC5TSUdfQkxPQ0ssIFtzaWdudW1dKQogICAgICAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbnVtKQogICAgICAgICAgICAgcGVuZGluZyA9IHNpZ25hbC5zaWdwZW5kaW5nKCkKKyAgICAgICAgICAgIGZvciBzaWcgaW4gcGVuZGluZzoKKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzaWcsIHNpZ25hbC5TaWduYWxzKSwgcmVwcihwZW5kaW5nKQogICAgICAgICAgICAgaWYgcGVuZGluZyAhPSB7c2lnbnVtfToKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJyVzICE9IHslc30nICUgKHBlbmRpbmcsIHNpZ251bSkpCiAgICAgICAgICAgICB0cnk6CkBAIC02NjAsNiArODUxLDcgQEAKICAgICAgICAgY29kZSA9ICcnJ2lmIDE6CiAgICAgICAgIGltcG9ydCBzaWduYWwKICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBmcm9tIHNpZ25hbCBpbXBvcnQgU2lnbmFscwogCiAgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgogICAgICAgICAgICAgMS8wCkBAIC03MDIsNiArODk0LDcgQEAKICAgICAgICAgZGVmIHRlc3Qoc2lnbnVtKToKICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQogICAgICAgICAgICAgcmVjZWl2ZWQgPSBzaWduYWwuc2lnd2FpdChbc2lnbnVtXSkKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHJlY2VpdmVkLCBzaWduYWwuU2lnbmFscyksIHJlY2VpdmVkCiAgICAgICAgICAgICBpZiByZWNlaXZlZCAhPSBzaWdudW06CiAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdyZWNlaXZlZCAlcywgbm90ICVzJyAlIChyZWNlaXZlZCwgc2lnbnVtKSkKICAgICAgICAgJycnKQpAQCAtNzU3LDM1ICs5NTAsNiBAQAogICAgICAgICBzaWdudW0gPSBzaWduYWwuU0lHQUxSTQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzaWduYWwuc2lndGltZWR3YWl0LCBbc2lnbnVtXSwgLTEuMCkKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnc2lnd2FpdGluZm8nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZCBzaWduYWwuc2lnd2FpdGluZm8oKScpCi0gICAgIyBJc3N1ZSAjMTgyMzg6IHNpZ3dhaXRpbmZvKCkgY2FuIGJlIGludGVycnVwdGVkIG9uIExpbnV4IChyYWlzZXMKLSAgICAjIEludGVycnVwdGVkRXJyb3IpLCBidXQgbm90IG9uIEFJWAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpLAotICAgICAgICAgICAgICAgICAgICAgJ3NpZ25hbC5zaWd3YWl0aW5mbygpIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBvbiBBSVgnKQotICAgIGRlZiB0ZXN0X3NpZ3dhaXRpbmZvX2ludGVycnVwdGVkKHNlbGYpOgotICAgICAgICBzZWxmLndhaXRfaGVscGVyKHNpZ25hbC5TSUdVU1IxLCAnJycKLSAgICAgICAgZGVmIHRlc3Qoc2lnbnVtKToKLSAgICAgICAgICAgIGltcG9ydCBlcnJubwotCi0gICAgICAgICAgICBobmRsX2NhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIGRlZiBhbGFybV9oYW5kbGVyKHNpZ251bSwgZnJhbWUpOgotICAgICAgICAgICAgICAgIGhuZGxfY2FsbGVkID0gRmFsc2UKLQotICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgYWxhcm1faGFuZGxlcikKLSAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNpZ25hbC5zaWd3YWl0aW5mbyhbc2lnbmFsLlNJR1VTUjFdKQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgaG5kbF9jYWxsZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlNJR0FMUk0gaGFuZGxlciBub3QgY2FsbGVkIikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkV4cGVjdGVkIEVJTlRSIHRvIGJlIHJhaXNlZCBieSBzaWd3YWl0aW5mbyIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXhwZWN0ZWQgRUlOVFIgdG8gYmUgcmFpc2VkIGJ5IHNpZ3dhaXRpbmZvIikKLSAgICAgICAgJycnKQotCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdzaWd3YWl0JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZWQgc2lnbmFsLnNpZ3dhaXQoKScpCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdwdGhyZWFkX3NpZ21hc2snKSwKQEAgLTg0Miw4ICsxMDA2LDE0IEBACiAgICAgICAgIGRlZiBraWxsKHNpZ251bSk6CiAgICAgICAgICAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWdudW0pCiAKKyAgICAgICAgZGVmIGNoZWNrX21hc2sobWFzayk6CisgICAgICAgICAgICBmb3Igc2lnIGluIG1hc2s6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2lnLCBzaWduYWwuU2lnbmFscyksIHJlcHIoc2lnKQorCiAgICAgICAgIGRlZiByZWFkX3NpZ21hc2soKToKLSAgICAgICAgICAgIHJldHVybiBzaWduYWwucHRocmVhZF9zaWdtYXNrKHNpZ25hbC5TSUdfQkxPQ0ssIFtdKQorICAgICAgICAgICAgc2lnbWFzayA9IHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19CTE9DSywgW10pCisgICAgICAgICAgICBjaGVja19tYXNrKHNpZ21hc2spCisgICAgICAgICAgICByZXR1cm4gc2lnbWFzawogCiAgICAgICAgIHNpZ251bSA9IHNpZ25hbC5TSUdVU1IxCiAKQEAgLTg1Miw2ICsxMDIyLDcgQEAKIAogICAgICAgICAjIFVuYmxvY2sgU0lHVVNSMSAoYW5kIGNvcHkgdGhlIG9sZCBtYXNrKSB0byB0ZXN0IG91ciBzaWduYWwgaGFuZGxlcgogICAgICAgICBvbGRfbWFzayA9IHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19VTkJMT0NLLCBbc2lnbnVtXSkKKyAgICAgICAgY2hlY2tfbWFzayhvbGRfbWFzaykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAga2lsbChzaWdudW0pCiAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKQEAgLTg2MSwxMSArMTAzMiwxMyBAQAogCiAgICAgICAgICMgQmxvY2sgYW5kIHRoZW4gcmFpc2UgU0lHVVNSMS4gVGhlIHNpZ25hbCBpcyBibG9ja2VkOiB0aGUgc2lnbmFsCiAgICAgICAgICMgaGFuZGxlciBpcyBub3QgY2FsbGVkLCBhbmQgdGhlIHNpZ25hbCBpcyBub3cgcGVuZGluZwotICAgICAgICBzaWduYWwucHRocmVhZF9zaWdtYXNrKHNpZ25hbC5TSUdfQkxPQ0ssIFtzaWdudW1dKQorICAgICAgICBtYXNrID0gc2lnbmFsLnB0aHJlYWRfc2lnbWFzayhzaWduYWwuU0lHX0JMT0NLLCBbc2lnbnVtXSkKKyAgICAgICAgY2hlY2tfbWFzayhtYXNrKQogICAgICAgICBraWxsKHNpZ251bSkKIAogICAgICAgICAjIENoZWNrIHRoZSBuZXcgbWFzawogICAgICAgICBibG9ja2VkID0gcmVhZF9zaWdtYXNrKCkKKyAgICAgICAgY2hlY2tfbWFzayhibG9ja2VkKQogICAgICAgICBpZiBzaWdudW0gbm90IGluIGJsb2NrZWQ6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVzIG5vdCBpbiAlcyIgJSAoc2lnbnVtLCBibG9ja2VkKSkKICAgICAgICAgaWYgb2xkX21hc2sgXiBibG9ja2VkICE9IHtzaWdudW19OgpAQCAtOTI2LDE1ICsxMDk5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4aXRjb2RlLCBzdGRvdXQpKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0cnk6Ci0gICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFBvc2l4VGVzdHMsIEludGVyUHJvY2Vzc1NpZ25hbFRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXYWtldXBGRFRlc3RzLCBXYWtldXBTaWduYWxUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnaW50ZXJydXB0VGVzdCwgSXRpbWVyVGVzdCwgV2luZG93c1NpZ25hbFRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nU2lnbmFsc1Rlc3RzKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHN1cHBvcnQucmVhcF9jaGlsZHJlbigpCi0KK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgIHN1cHBvcnQucmVhcF9jaGlsZHJlbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQppbmRleCBmNzFjZjczLi5kYTIwYTNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CkBAIC0yOCw4ICsyOCwxMyBAQAogCiBpZiBzaXRlLkVOQUJMRV9VU0VSX1NJVEUgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHNpdGUuVVNFUl9TSVRFKToKICAgICAjIG5lZWQgdG8gYWRkIHVzZXIgc2l0ZSBkaXJlY3RvcnkgZm9yIHRlc3RzCi0gICAgb3MubWFrZWRpcnMoc2l0ZS5VU0VSX1NJVEUpCi0gICAgc2l0ZS5hZGRzaXRlZGlyKHNpdGUuVVNFUl9TSVRFKQorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMoc2l0ZS5VU0VSX1NJVEUpCisgICAgICAgIHNpdGUuYWRkc2l0ZWRpcihzaXRlLlVTRVJfU0lURSkKKyAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3VuYWJsZSB0byBjcmVhdGUgdXNlciBzaXRlIGRpcmVjdG9yeSAoJXIpOiAlcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2l0ZS5VU0VSX1NJVEUsIGV4YykpCisKIAogY2xhc3MgSGVscGVyRnVuY3Rpb25zVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIGZvciBoZWxwZXIgZnVuY3Rpb25zLgpAQCAtMTQ3LDcgKzE1Miw3IEBACiAgICAgICAgICAgICByZS5lc2NhcGUob3MucGF0aC5qb2luKHB0aF9kaXIsIHB0aF9mbikpKQogICAgICAgICAjIFhYWDogZGl0dG8gcHJldmlvdXMgWFhYIGNvbW1lbnQuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyX291dC5nZXR2YWx1ZSgpLCAnVHJhY2ViYWNrJykKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnJfb3V0LmdldHZhbHVlKCksICdUeXBlRXJyb3InKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1ZhbHVlRXJyb3InKQogCiAgICAgZGVmIHRlc3RfYWRkc2l0ZWRpcihzZWxmKToKICAgICAgICAgIyBTYW1lIHRlc3RzIGZvciB0ZXN0X2FkZHBhY2thZ2Ugc2luY2UgYWRkc2l0ZWRpcigpIGVzc2VudGlhbGx5IGp1c3QKQEAgLTIzNSwyMCArMjQwLDE4IEBACiAgICAgICAgICAgICAjIE9TIFggZnJhbWV3b3JrIGJ1aWxkcwogICAgICAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsnUHl0aG9uLmZyYW1ld29yayddCiAgICAgICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMikKICAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbignL0xpYnJhcnknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnZlcnNpb25bOjNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1syXSwgd2FudGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzFdLCB3YW50ZWQpCiAgICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKICAgICAgICAgICAgICMgT1MgWCBub24tZnJhbXdld29yayBidWlsZHMsIExpbnV4LCBGcmVlQlNELCBldGMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDEpCiAgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3B5dGhvbicgKyBzeXMudmVyc2lvbls6M10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdGUtcGFja2FnZXMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCi0gICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3NpdGUtcHl0aG9uJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1sxXSwgd2FudGVkKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBvdGhlciBwbGF0Zm9ybXMKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQpAQCAtMzU3LDggKzM2MCwxMiBAQAogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2MuY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgMCkKICAgICAgICAgb3NfX2ZpbGVfXywgb3NfX2NhY2hlZF9fID0gc3Rkb3V0LnNwbGl0bGluZXMoKVs6Ml0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNhYnMob3NfX2ZpbGVfXykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzYWJzKG9zX19jYWNoZWRfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzYWJzKG9zX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGFic29sdXRlIHBhdGgsIGdvdCB7fSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQob3NfX2ZpbGVfXy5kZWNvZGUoJ2FzY2lpJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Ficyhvc19fY2FjaGVkX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGFic29sdXRlIHBhdGgsIGdvdCB7fSIKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQob3NfX2NhY2hlZF9fLmRlY29kZSgnYXNjaWknKSkpCiAKICAgICBkZWYgdGVzdF9ub19kdXBsaWNhdGVfcGF0aHMoc2VsZik6CiAgICAgICAgICMgTm8gZHVwbGljYXRlIHBhdGhzIHNob3VsZCBleGlzdCBpbiBzeXMucGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbGljZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKaW5kZXggMWVkNzFmOS4uNGFlNDE0MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbGljZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CkBAIC0xLDEyICsxLDEzIEBACiAjIHRlc3RzIGZvciBzbGljZSBvYmplY3RzOyBpbiBwYXJ0aWN1bGFyIHRoZSBpbmRpY2VzIG1ldGhvZC4KIAotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gcGlja2xlIGltcG9ydCBsb2FkcywgZHVtcHMKLQogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gcGlja2xlIGltcG9ydCBsb2FkcywgZHVtcHMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiAKIGRlZiBldmFsdWF0ZV9zbGljZV9pbmRleChhcmcpOgpAQCAtMjQxLDggKzI0MiwxNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGljZXMoMTUpLCB0LmluZGljZXMoMTUpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQodCkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChTbGljZVRlc3QpCisgICAgZGVmIHRlc3RfY3ljbGUoc2VsZik6CisgICAgICAgIGNsYXNzIG15b2JqKCk6IHBhc3MKKyAgICAgICAgbyA9IG15b2JqKCkKKyAgICAgICAgby5zID0gc2xpY2UobykKKyAgICAgICAgdyA9IHdlYWtyZWYucmVmKG8pCisgICAgICAgIG8gPSBOb25lCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHcoKSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbXRwZC5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cGQucHkKaW5kZXggOTNmMTRjNC4uODhkYmZkZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbXRwZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBkLnB5CkBAIC0xLDQgKzEsNSBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGV4dHdyYXAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgbW9ja19zb2NrZXQKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBpbwpAQCAtNywxNCArOCwyMCBAQAogCiAKIGNsYXNzIER1bW15U2VydmVyKHNtdHBkLlNNVFBTZXJ2ZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbGFkZHIsIHJlbW90ZWFkZHIpOgotICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGxvY2FsYWRkciwgcmVtb3RlYWRkcikKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc210cGQuU01UUFNlcnZlci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYubWVzc2FnZXMgPSBbXQorICAgICAgICBpZiBzZWxmLl9kZWNvZGVfZGF0YToKKyAgICAgICAgICAgIHNlbGYucmV0dXJuX3N0YXR1cyA9ICdyZXR1cm4gc3RhdHVzJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZXR1cm5fc3RhdHVzID0gYidyZXR1cm4gc3RhdHVzJwogCi0gICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CisgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSwgKiprdyk6CiAgICAgICAgIHNlbGYubWVzc2FnZXMuYXBwZW5kKChwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSkpCi0gICAgICAgIGlmIGRhdGEgPT0gJ3JldHVybiBzdGF0dXMnOgorICAgICAgICBpZiBkYXRhID09IHNlbGYucmV0dXJuX3N0YXR1czoKICAgICAgICAgICAgIHJldHVybiAnMjUwIE9raXNoJworICAgICAgICBpZiAnbWFpbF9vcHRpb25zJyBpbiBrdyBhbmQgJ1NNVFBVVEY4JyBpbiBrd1snbWFpbF9vcHRpb25zJ106CisgICAgICAgICAgICByZXR1cm4gJzI1MCBTTVRQVVRGOCBtZXNzYWdlIG9raXNoJwogCiAKIGNsYXNzIER1bW15RGlzcGF0Y2hlckJyb2tlbihFeGNlcHRpb24pOgpAQCAtMzEsOSArMzgsMTAgQEAKICAgICAgICAgc210cGQuc29ja2V0ID0gYXN5bmNvcmUuc29ja2V0ID0gbW9ja19zb2NrZXQKIAogICAgIGRlZiB0ZXN0X3Byb2Nlc3NfbWVzc2FnZV91bmltcGxlbWVudGVkKHNlbGYpOgotICAgICAgICBzZXJ2ZXIgPSBzbXRwZC5TTVRQU2VydmVyKCdhJywgJ2InKQorICAgICAgICBzZXJ2ZXIgPSBzbXRwZC5TTVRQU2VydmVyKChzdXBwb3J0LkhPU1QsIDApLCAoJ2InLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfZGF0YT1UcnVlKQogICAgICAgICBjb25uLCBhZGRyID0gc2VydmVyLmFjY2VwdCgpCi0gICAgICAgIGNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIpCisgICAgICAgIGNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRlY29kZV9kYXRhPVRydWUpCiAKICAgICAgICAgZGVmIHdyaXRlX2xpbmUobGluZSk6CiAgICAgICAgICAgICBjaGFubmVsLnNvY2tldC5xdWV1ZV9yZWN2KGxpbmUpCkBAIC00NSwxOSArNTMsMjUxIEBACiAgICAgICAgIHdyaXRlX2xpbmUoYidEQVRBJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgd3JpdGVfbGluZSwgYidzcGFtXHJcbi5cclxuJykKIAorICAgIGRlZiB0ZXN0X2RlY29kZV9kYXRhX2RlZmF1bHRfd2FybnMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc210cGQuU01UUFNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgKCdiJywgMCkpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfZGF0YV9hbmRfZW5hYmxlX1NNVFBVVEY4X3JhaXNlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLAorICAgICAgICAgICAgc210cGQuU01UUFNlcnZlciwKKyAgICAgICAgICAgIChzdXBwb3J0LkhPU1QsIDApLAorICAgICAgICAgICAgKCdiJywgMCksCisgICAgICAgICAgICBlbmFibGVfU01UUFVURjg9VHJ1ZSwKKyAgICAgICAgICAgIGRlY29kZV9kYXRhPVRydWUpCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCiAgICAgICAgIGFzeW5jb3JlLnNvY2tldCA9IHNtdHBkLnNvY2tldCA9IHNvY2tldAogCiAKK2NsYXNzIERlYnVnZ2luZ1NlcnZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzbXRwZC5zb2NrZXQgPSBhc3luY29yZS5zb2NrZXQgPSBtb2NrX3NvY2tldAorCisgICAgZGVmIHNlbmRfZGF0YShzZWxmLCBjaGFubmVsLCBkYXRhLCBlbmFibGVfU01UUFVURjg9RmFsc2UpOgorICAgICAgICBkZWYgd3JpdGVfbGluZShsaW5lKToKKyAgICAgICAgICAgIGNoYW5uZWwuc29ja2V0LnF1ZXVlX3JlY3YobGluZSkKKyAgICAgICAgICAgIGNoYW5uZWwuaGFuZGxlX3JlYWQoKQorICAgICAgICB3cml0ZV9saW5lKGInRUhMTyBleGFtcGxlJykKKyAgICAgICAgaWYgZW5hYmxlX1NNVFBVVEY4OgorICAgICAgICAgICAgd3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUgQk9EWT04QklUTUlNRSBTTVRQVVRGOCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3cml0ZV9saW5lKGInTUFJTCBGcm9tOmVnZ3NAZXhhbXBsZScpCisgICAgICAgIHdyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHdyaXRlX2xpbmUoYidEQVRBJykKKyAgICAgICAgd3JpdGVfbGluZShkYXRhKQorICAgICAgICB3cml0ZV9saW5lKGInLicpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX21lc3NhZ2Vfd2l0aF9kZWNvZGVfZGF0YV90cnVlKHNlbGYpOgorICAgICAgICBzZXJ2ZXIgPSBzbXRwZC5EZWJ1Z2dpbmdTZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksICgnYicsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9VHJ1ZSkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlcnZlci5hY2NlcHQoKQorICAgICAgICBjaGFubmVsID0gc210cGQuU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyLCBkZWNvZGVfZGF0YT1UcnVlKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuc2VuZF9kYXRhKGNoYW5uZWwsIGInRnJvbTogdGVzdFxuXG5oZWxsb1xuJykKKyAgICAgICAgc3Rkb3V0ID0gcy5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgIC0tLS0tLS0tLS0gTUVTU0FHRSBGT0xMT1dTIC0tLS0tLS0tLS0KKyAgICAgICAgICAgICBGcm9tOiB0ZXN0CisgICAgICAgICAgICAgWC1QZWVyOiBwZWVyLWFkZHJlc3MKKworICAgICAgICAgICAgIGhlbGxvCisgICAgICAgICAgICAgLS0tLS0tLS0tLS0tIEVORCBNRVNTQUdFIC0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICIiIikpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX21lc3NhZ2Vfd2l0aF9kZWNvZGVfZGF0YV9mYWxzZShzZWxmKToKKyAgICAgICAgc2VydmVyID0gc210cGQuRGVidWdnaW5nU2VydmVyKChzdXBwb3J0LkhPU1QsIDApLCAoJ2InLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9kYXRhPUZhbHNlKQorICAgICAgICBjb25uLCBhZGRyID0gc2VydmVyLmFjY2VwdCgpCisgICAgICAgIGNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRlY29kZV9kYXRhPUZhbHNlKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuc2VuZF9kYXRhKGNoYW5uZWwsIGInRnJvbTogdGVzdFxuXG5oXHhjM1x4YTlsbG9ceGZmXG4nKQorICAgICAgICBzdGRvdXQgPSBzLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgLS0tLS0tLS0tLSBNRVNTQUdFIEZPTExPV1MgLS0tLS0tLS0tLQorICAgICAgICAgICAgIGInRnJvbTogdGVzdCcKKyAgICAgICAgICAgICBiJ1gtUGVlcjogcGVlci1hZGRyZXNzJworICAgICAgICAgICAgIGInJworICAgICAgICAgICAgIGInaFxceGMzXFx4YTlsbG9cXHhmZicKKyAgICAgICAgICAgICAtLS0tLS0tLS0tLS0gRU5EIE1FU1NBR0UgLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfbWVzc2FnZV93aXRoX2VuYWJsZV9TTVRQVVRGOF90cnVlKHNlbGYpOgorICAgICAgICBzZXJ2ZXIgPSBzbXRwZC5EZWJ1Z2dpbmdTZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksICgnYicsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX1NNVFBVVEY4PVRydWUpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2ZXIuYWNjZXB0KCkKKyAgICAgICAgY2hhbm5lbCA9IHNtdHBkLlNNVFBDaGFubmVsKHNlcnZlciwgY29ubiwgYWRkciwgZW5hYmxlX1NNVFBVVEY4PVRydWUpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzOgorICAgICAgICAgICAgc2VsZi5zZW5kX2RhdGEoY2hhbm5lbCwgYidGcm9tOiB0ZXN0XG5cbmhceGMzXHhhOWxsb1x4ZmZcbicpCisgICAgICAgIHN0ZG91dCA9IHMuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAtLS0tLS0tLS0tIE1FU1NBR0UgRk9MTE9XUyAtLS0tLS0tLS0tCisgICAgICAgICAgICAgYidGcm9tOiB0ZXN0JworICAgICAgICAgICAgIGInWC1QZWVyOiBwZWVyLWFkZHJlc3MnCisgICAgICAgICAgICAgYicnCisgICAgICAgICAgICAgYidoXFx4YzNcXHhhOWxsb1xceGZmJworICAgICAgICAgICAgIC0tLS0tLS0tLS0tLSBFTkQgTUVTU0FHRSAtLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19TTVRQVVRGOF9tZXNzYWdlX3dpdGhfZW5hYmxlX1NNVFBVVEY4X3RydWUoc2VsZik6CisgICAgICAgIHNlcnZlciA9IHNtdHBkLkRlYnVnZ2luZ1NlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgKCdiJywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfU01UUFVURjg9VHJ1ZSkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlcnZlci5hY2NlcHQoKQorICAgICAgICBjaGFubmVsID0gc210cGQuU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyLCBlbmFibGVfU01UUFVURjg9VHJ1ZSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHM6CisgICAgICAgICAgICBzZWxmLnNlbmRfZGF0YShjaGFubmVsLCBiJ0Zyb206IHRlc3RcblxuaFx4YzNceGE5bGxvXHhmZlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9TTVRQVVRGOD1UcnVlKQorICAgICAgICBzdGRvdXQgPSBzLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgLS0tLS0tLS0tLSBNRVNTQUdFIEZPTExPV1MgLS0tLS0tLS0tLQorICAgICAgICAgICAgIG1haWwgb3B0aW9uczogWydCT0RZPThCSVRNSU1FJywgJ1NNVFBVVEY4J10KKyAgICAgICAgICAgICBiJ0Zyb206IHRlc3QnCisgICAgICAgICAgICAgYidYLVBlZXI6IHBlZXItYWRkcmVzcycKKyAgICAgICAgICAgICBiJycKKyAgICAgICAgICAgICBiJ2hcXHhjM1xceGE5bGxvXFx4ZmYnCisgICAgICAgICAgICAgLS0tLS0tLS0tLS0tIEVORCBNRVNTQUdFIC0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICIiIikpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCisgICAgICAgIGFzeW5jb3JlLnNvY2tldCA9IHNtdHBkLnNvY2tldCA9IHNvY2tldAorCisKK2NsYXNzIFRlc3RGYW1pbHlEZXRlY3Rpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc210cGQuc29ja2V0ID0gYXN5bmNvcmUuc29ja2V0ID0gbW9ja19zb2NrZXQKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKyAgICAgICAgYXN5bmNvcmUuc29ja2V0ID0gc210cGQuc29ja2V0ID0gc29ja2V0CisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LklQVjZfRU5BQkxFRCwgIklQdjYgbm90IGVuYWJsZWQiKQorICAgIGRlZiB0ZXN0X3NvY2tldF91c2VzX0lQdjYoc2VsZik6CisgICAgICAgIHNlcnZlciA9IHNtdHBkLlNNVFBTZXJ2ZXIoKHN1cHBvcnQuSE9TVHY2LCAwKSwgKHN1cHBvcnQuSE9TVCwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyLnNvY2tldC5mYW1pbHksIHNvY2tldC5BRl9JTkVUNikKKworICAgIGRlZiB0ZXN0X3NvY2tldF91c2VzX0lQdjQoc2VsZik6CisgICAgICAgIHNlcnZlciA9IHNtdHBkLlNNVFBTZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksIChzdXBwb3J0LkhPU1R2NiwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyLnNvY2tldC5mYW1pbHksIHNvY2tldC5BRl9JTkVUKQorCisKK2NsYXNzIFRlc3RSY3B0T3B0aW9uUGFyc2luZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZXJyb3JfcmVzcG9uc2UgPSAoYic1NTUgUkNQVCBUTyBwYXJhbWV0ZXJzIG5vdCByZWNvZ25pemVkIG9yIG5vdCAnCisgICAgICAgICAgICAgICAgICAgICAgYidpbXBsZW1lbnRlZFxyXG4nKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzbXRwZC5zb2NrZXQgPSBhc3luY29yZS5zb2NrZXQgPSBtb2NrX3NvY2tldAorICAgICAgICBzZWxmLm9sZF9kZWJ1Z3N0cmVhbSA9IHNtdHBkLkRFQlVHU1RSRUFNCisgICAgICAgIHNlbGYuZGVidWcgPSBzbXRwZC5ERUJVR1NUUkVBTSA9IGlvLlN0cmluZ0lPKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKyAgICAgICAgYXN5bmNvcmUuc29ja2V0ID0gc210cGQuc29ja2V0ID0gc29ja2V0CisgICAgICAgIHNtdHBkLkRFQlVHU1RSRUFNID0gc2VsZi5vbGRfZGVidWdzdHJlYW0KKworICAgIGRlZiB3cml0ZV9saW5lKHNlbGYsIGNoYW5uZWwsIGxpbmUpOgorICAgICAgICBjaGFubmVsLnNvY2tldC5xdWV1ZV9yZWN2KGxpbmUpCisgICAgICAgIGNoYW5uZWwuaGFuZGxlX3JlYWQoKQorCisgICAgZGVmIHRlc3RfcGFyYW1zX3JlamVjdGVkKHNlbGYpOgorICAgICAgICBzZXJ2ZXIgPSBEdW1teVNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgKCdiJywgMCksIGRlY29kZV9kYXRhPUZhbHNlKQorICAgICAgICBjb25uLCBhZGRyID0gc2VydmVyLmFjY2VwdCgpCisgICAgICAgIGNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRlY29kZV9kYXRhPUZhbHNlKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoY2hhbm5lbCwgYidFSExPIGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoY2hhbm5lbCwgYidNQUlMIGZyb206IDxmb29AZXhhbXBsZS5jb20+IHNpemU9MjAnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoY2hhbm5lbCwgYidSQ1BUIHRvOiA8Zm9vQGV4YW1wbGUuY29tPiBmb289YmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFubmVsLnNvY2tldC5sYXN0LCBzZWxmLmVycm9yX3Jlc3BvbnNlKQorCisgICAgZGVmIHRlc3Rfbm90aGluZ19hY2NlcHRlZChzZWxmKToKKyAgICAgICAgc2VydmVyID0gRHVtbXlTZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksICgnYicsIDApLCBkZWNvZGVfZGF0YT1GYWxzZSkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlcnZlci5hY2NlcHQoKQorICAgICAgICBjaGFubmVsID0gc210cGQuU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyLCBkZWNvZGVfZGF0YT1GYWxzZSkKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGNoYW5uZWwsIGInRUhMTyBleGFtcGxlJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGNoYW5uZWwsIGInTUFJTCBmcm9tOiA8Zm9vQGV4YW1wbGUuY29tPiBzaXplPTIwJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGNoYW5uZWwsIGInUkNQVCB0bzogPGZvb0BleGFtcGxlLmNvbT4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYW5uZWwuc29ja2V0Lmxhc3QsIGInMjUwIE9LXHJcbicpCisKKworY2xhc3MgVGVzdE1haWxPcHRpb25QYXJzaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlcnJvcl9yZXNwb25zZSA9IChiJzU1NSBNQUlMIEZST00gcGFyYW1ldGVycyBub3QgcmVjb2duaXplZCBvciBub3QgJworICAgICAgICAgICAgICAgICAgICAgIGInaW1wbGVtZW50ZWRcclxuJykKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc210cGQuc29ja2V0ID0gYXN5bmNvcmUuc29ja2V0ID0gbW9ja19zb2NrZXQKKyAgICAgICAgc2VsZi5vbGRfZGVidWdzdHJlYW0gPSBzbXRwZC5ERUJVR1NUUkVBTQorICAgICAgICBzZWxmLmRlYnVnID0gc210cGQuREVCVUdTVFJFQU0gPSBpby5TdHJpbmdJTygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCisgICAgICAgIGFzeW5jb3JlLnNvY2tldCA9IHNtdHBkLnNvY2tldCA9IHNvY2tldAorICAgICAgICBzbXRwZC5ERUJVR1NUUkVBTSA9IHNlbGYub2xkX2RlYnVnc3RyZWFtCisKKyAgICBkZWYgd3JpdGVfbGluZShzZWxmLCBjaGFubmVsLCBsaW5lKToKKyAgICAgICAgY2hhbm5lbC5zb2NrZXQucXVldWVfcmVjdihsaW5lKQorICAgICAgICBjaGFubmVsLmhhbmRsZV9yZWFkKCkKKworICAgIGRlZiB0ZXN0X3dpdGhfZGVjb2RlX2RhdGFfdHJ1ZShzZWxmKToKKyAgICAgICAgc2VydmVyID0gRHVtbXlTZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksICgnYicsIDApLCBkZWNvZGVfZGF0YT1UcnVlKQorICAgICAgICBjb25uLCBhZGRyID0gc2VydmVyLmFjY2VwdCgpCisgICAgICAgIGNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRlY29kZV9kYXRhPVRydWUpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShjaGFubmVsLCBiJ0VITE8gZXhhbXBsZScpCisgICAgICAgIGZvciBsaW5lIGluIFsKKyAgICAgICAgICAgIGInTUFJTCBmcm9tOiA8Zm9vQGV4YW1wbGUuY29tPiBzaXplPTIwIFNNVFBVVEY4JywKKyAgICAgICAgICAgIGInTUFJTCBmcm9tOiA8Zm9vQGV4YW1wbGUuY29tPiBzaXplPTIwIFNNVFBVVEY4IEJPRFk9OEJJVE1JTUUnLAorICAgICAgICAgICAgYidNQUlMIGZyb206IDxmb29AZXhhbXBsZS5jb20+IHNpemU9MjAgQk9EWT1VTktOT1dOJywKKyAgICAgICAgICAgIGInTUFJTCBmcm9tOiA8Zm9vQGV4YW1wbGUuY29tPiBzaXplPTIwIGJvZHk9OGJpdG1pbWUnLAorICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKGNoYW5uZWwsIGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYW5uZWwuc29ja2V0Lmxhc3QsIHNlbGYuZXJyb3JfcmVzcG9uc2UpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShjaGFubmVsLCBiJ01BSUwgZnJvbTogPGZvb0BleGFtcGxlLmNvbT4gc2l6ZT0yMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhbm5lbC5zb2NrZXQubGFzdCwgYicyNTAgT0tcclxuJykKKworICAgIGRlZiB0ZXN0X3dpdGhfZGVjb2RlX2RhdGFfZmFsc2Uoc2VsZik6CisgICAgICAgIHNlcnZlciA9IER1bW15U2VydmVyKChzdXBwb3J0LkhPU1QsIDApLCAoJ2InLCAwKSwgZGVjb2RlX2RhdGE9RmFsc2UpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2ZXIuYWNjZXB0KCkKKyAgICAgICAgY2hhbm5lbCA9IHNtdHBkLlNNVFBDaGFubmVsKHNlcnZlciwgY29ubiwgYWRkciwgZGVjb2RlX2RhdGE9RmFsc2UpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShjaGFubmVsLCBiJ0VITE8gZXhhbXBsZScpCisgICAgICAgIGZvciBsaW5lIGluIFsKKyAgICAgICAgICAgIGInTUFJTCBmcm9tOiA8Zm9vQGV4YW1wbGUuY29tPiBzaXplPTIwIFNNVFBVVEY4JywKKyAgICAgICAgICAgIGInTUFJTCBmcm9tOiA8Zm9vQGV4YW1wbGUuY29tPiBzaXplPTIwIFNNVFBVVEY4IEJPRFk9OEJJVE1JTUUnLAorICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKGNoYW5uZWwsIGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYW5uZWwuc29ja2V0Lmxhc3QsIHNlbGYuZXJyb3JfcmVzcG9uc2UpCisgICAgICAgIHNlbGYud3JpdGVfbGluZSgKKyAgICAgICAgICAgIGNoYW5uZWwsCisgICAgICAgICAgICBiJ01BSUwgZnJvbTogPGZvb0BleGFtcGxlLmNvbT4gc2l6ZT0yMCBTTVRQVVRGOCBCT0RZPVVOS05PV04nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2hhbm5lbC5zb2NrZXQubGFzdCwKKyAgICAgICAgICAgIGInNTAxIEVycm9yOiBCT0RZIGNhbiBvbmx5IGJlIG9uZSBvZiA3QklULCA4QklUTUlNRVxyXG4nKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoCisgICAgICAgICAgICBjaGFubmVsLCBiJ01BSUwgZnJvbTogPGZvb0BleGFtcGxlLmNvbT4gc2l6ZT0yMCBib2R5PThiaXRtaW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFubmVsLnNvY2tldC5sYXN0LCBiJzI1MCBPS1xyXG4nKQorCisgICAgZGVmIHRlc3Rfd2l0aF9lbmFibGVfc210cHV0ZjhfdHJ1ZShzZWxmKToKKyAgICAgICAgc2VydmVyID0gRHVtbXlTZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksICgnYicsIDApLCBlbmFibGVfU01UUFVURjg9VHJ1ZSkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlcnZlci5hY2NlcHQoKQorICAgICAgICBjaGFubmVsID0gc210cGQuU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyLCBlbmFibGVfU01UUFVURjg9VHJ1ZSkKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGNoYW5uZWwsIGInRUhMTyBleGFtcGxlJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKAorICAgICAgICAgICAgY2hhbm5lbCwKKyAgICAgICAgICAgIGInTUFJTCBmcm9tOiA8Zm9vQGV4YW1wbGUuY29tPiBzaXplPTIwIGJvZHk9OGJpdG1pbWUgc210cHV0ZjgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYW5uZWwuc29ja2V0Lmxhc3QsIGInMjUwIE9LXHJcbicpCisKKwogY2xhc3MgU01UUERDaGFubmVsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzbXRwZC5zb2NrZXQgPSBhc3luY29yZS5zb2NrZXQgPSBtb2NrX3NvY2tldAogICAgICAgICBzZWxmLm9sZF9kZWJ1Z3N0cmVhbSA9IHNtdHBkLkRFQlVHU1RSRUFNCiAgICAgICAgIHNlbGYuZGVidWcgPSBzbXRwZC5ERUJVR1NUUkVBTSA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVNlcnZlcignYScsICdiJykKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgKCdiJywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9VHJ1ZSkKICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2VydmVyLmFjY2VwdCgpCi0gICAgICAgIHNlbGYuY2hhbm5lbCA9IHNtdHBkLlNNVFBDaGFubmVsKHNlbGYuc2VydmVyLCBjb25uLCBhZGRyKQorICAgICAgICBzZWxmLmNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZWxmLnNlcnZlciwgY29ubiwgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9VHJ1ZSkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKQEAgLTY5LDcgKzMwOSwxNSBAQAogICAgICAgICBzZWxmLmNoYW5uZWwuaGFuZGxlX3JlYWQoKQogCiAgICAgZGVmIHRlc3RfYnJva2VuX2Nvbm5lY3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKER1bW15RGlzcGF0Y2hlckJyb2tlbiwgQnJva2VuRHVtbXlTZXJ2ZXIsICdhJywgJ2InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIER1bW15RGlzcGF0Y2hlckJyb2tlbiwgQnJva2VuRHVtbXlTZXJ2ZXIsCisgICAgICAgICAgICAoc3VwcG9ydC5IT1NULCAwKSwgKCdiJywgMCksIGRlY29kZV9kYXRhPVRydWUpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfZGF0YV9hbmRfZW5hYmxlX1NNVFBVVEY4X3JhaXNlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzbXRwZC5TTVRQQ2hhbm5lbCwKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLCBzZWxmLmNoYW5uZWwuY29ubiwgc2VsZi5jaGFubmVsLmFkZHIsCisgICAgICAgICAgICBlbmFibGVfU01UUFVURjg9VHJ1ZSwgZGVjb2RlX2RhdGE9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X3NlcnZlcl9hY2NlcHQoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyLmhhbmRsZV9hY2NlcHQoKQpAQCAtMjE0LDYgKzQ2MiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJzUwMCBFcnJvcjogbGluZSB0b28gbG9uZ1xyXG4nKQogCisgICAgZGVmIHRlc3RfTUFJTF9jb21tYW5kX3JlamVjdHNfU01UUFVURjhfYnlfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInRUhMTyBleGFtcGxlJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKAorICAgICAgICAgICAgYidNQUlMIGZyb206IDxuYWl2ZUBleGFtcGxlLmNvbT4gQk9EWT04QklUTUlNRSBTTVRQVVRGOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0WzA6MV0sIGInNScpCisKICAgICBkZWYgdGVzdF9kYXRhX2xvbmdlcl90aGFuX2RlZmF1bHRfZGF0YV9zaXplX2xpbWl0KHNlbGYpOgogICAgICAgICAjIEhhY2sgdGhlIGRlZmF1bHQgc28gd2UgZG9uJ3QgaGF2ZSB0byBnZW5lcmF0ZSBzbyBtdWNoIGRhdGEuCiAgICAgICAgIHNlbGYuY2hhbm5lbC5kYXRhX3NpemVfbGltaXQgPSAxMDQ4CkBAIC0zODcsNyArNjQxLDEwIEBACiAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ2RhdGFcclxubW9yZVxyXG4uJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsIGInMjUwIE9LXHJcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIubWVzc2FnZXMsCi0gICAgICAgICAgICBbKCdwZWVyJywgJ2VnZ3NAZXhhbXBsZScsIFsnc3BhbUBleGFtcGxlJ10sICdkYXRhXG5tb3JlJyldKQorICAgICAgICAgICAgWygoJ3BlZXItYWRkcmVzcycsICdwZWVyLXBvcnQnKSwKKyAgICAgICAgICAgICAgJ2VnZ3NAZXhhbXBsZScsCisgICAgICAgICAgICAgIFsnc3BhbUBleGFtcGxlJ10sCisgICAgICAgICAgICAgICdkYXRhXG5tb3JlJyldKQogCiAgICAgZGVmIHRlc3RfREFUQV9zeW50YXgoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8gZXhhbXBsZScpCkBAIC00MTcsNyArNjc0LDEwIEBACiAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEnKQogICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidkYXRhXHJcbi4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLm1lc3NhZ2VzLAotICAgICAgICAgICAgWygncGVlcicsICdlZ2dzQGV4YW1wbGUnLCBbJ3NwYW1AZXhhbXBsZScsJ2hhbUBleGFtcGxlJ10sICdkYXRhJyldKQorICAgICAgICAgICAgWygoJ3BlZXItYWRkcmVzcycsICdwZWVyLXBvcnQnKSwKKyAgICAgICAgICAgICAgJ2VnZ3NAZXhhbXBsZScsCisgICAgICAgICAgICAgIFsnc3BhbUBleGFtcGxlJywnaGFtQGV4YW1wbGUnXSwKKyAgICAgICAgICAgICAgJ2RhdGEnKV0pCiAKICAgICBkZWYgdGVzdF9tYW51YWxfc3RhdHVzKHNlbGYpOgogICAgICAgICAjIGNoZWNrcyB0aGF0IHRoZSBDaGFubmVsIGlzIGFibGUgdG8gcmV0dXJuIGEgY3VzdG9tIHN0YXR1cyBtZXNzYWdlCkBAIC00MzksNyArNjk5LDEwIEBACiAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEnKQogICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidkYXRhXHJcbi4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLm1lc3NhZ2VzLAotICAgICAgICAgICAgWygncGVlcicsICdmb29AZXhhbXBsZScsIFsnZWdnc0BleGFtcGxlJ10sICdkYXRhJyldKQorICAgICAgICAgICAgWygoJ3BlZXItYWRkcmVzcycsICdwZWVyLXBvcnQnKSwKKyAgICAgICAgICAgICAgICdmb29AZXhhbXBsZScsCisgICAgICAgICAgICAgICBbJ2VnZ3NAZXhhbXBsZSddLAorICAgICAgICAgICAgICAgJ2RhdGEnKV0pCiAKICAgICBkZWYgdGVzdF9IRUxPX1JTRVQoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8gZXhhbXBsZScpCkBAIC01MDIsNiArNzY1LDI0IEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fYWRkciA9ICdzcGFtJwogCisgICAgZGVmIHRlc3RfZGVjb2RlX2RhdGFfZGVmYXVsdF93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlcnZlciA9IER1bW15U2VydmVyKChzdXBwb3J0LkhPU1QsIDApLCAoJ2InLCAwKSkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2VydmVyLmFjY2VwdCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc210cGQuU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LklQVjZfRU5BQkxFRCwgIklQdjYgbm90IGVuYWJsZWQiKQorY2xhc3MgU01UUERDaGFubmVsSVB2NlRlc3QoU01UUERDaGFubmVsVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzbXRwZC5zb2NrZXQgPSBhc3luY29yZS5zb2NrZXQgPSBtb2NrX3NvY2tldAorICAgICAgICBzZWxmLm9sZF9kZWJ1Z3N0cmVhbSA9IHNtdHBkLkRFQlVHU1RSRUFNCisgICAgICAgIHNlbGYuZGVidWcgPSBzbXRwZC5ERUJVR1NUUkVBTSA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVNlcnZlcigoc3VwcG9ydC5IT1NUdjYsIDApLCAoJ2InLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfZGF0YT1UcnVlKQorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2ZXIuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5jaGFubmVsID0gc210cGQuU01UUENoYW5uZWwoc2VsZi5zZXJ2ZXIsIGNvbm4sIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9kYXRhPVRydWUpCiAKIGNsYXNzIFNNVFBEQ2hhbm5lbFdpdGhEYXRhU2l6ZUxpbWl0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTUwOSwxMCArNzkwLDEyIEBACiAgICAgICAgIHNtdHBkLnNvY2tldCA9IGFzeW5jb3JlLnNvY2tldCA9IG1vY2tfc29ja2V0CiAgICAgICAgIHNlbGYub2xkX2RlYnVnc3RyZWFtID0gc210cGQuREVCVUdTVFJFQU0KICAgICAgICAgc2VsZi5kZWJ1ZyA9IHNtdHBkLkRFQlVHU1RSRUFNID0gaW8uU3RyaW5nSU8oKQotICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15U2VydmVyKCdhJywgJ2InKQorICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15U2VydmVyKChzdXBwb3J0LkhPU1QsIDApLCAoJ2InLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfZGF0YT1UcnVlKQogICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2ZXIuYWNjZXB0KCkKICAgICAgICAgIyBTZXQgREFUQSBzaXplIGxpbWl0IHRvIDMyIGJ5dGVzIGZvciBlYXN5IHRlc3RpbmcKLSAgICAgICAgc2VsZi5jaGFubmVsID0gc210cGQuU01UUENoYW5uZWwoc2VsZi5zZXJ2ZXIsIGNvbm4sIGFkZHIsIDMyKQorICAgICAgICBzZWxmLmNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZWxmLnNlcnZlciwgY29ubiwgYWRkciwgMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9kYXRhPVRydWUpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCkBAIC01MzYsNyArODE5LDEwIEBACiAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ2RhdGFcclxubW9yZVxyXG4uJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsIGInMjUwIE9LXHJcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIubWVzc2FnZXMsCi0gICAgICAgICAgICBbKCdwZWVyJywgJ2VnZ3NAZXhhbXBsZScsIFsnc3BhbUBleGFtcGxlJ10sICdkYXRhXG5tb3JlJyldKQorICAgICAgICAgICAgWygoJ3BlZXItYWRkcmVzcycsICdwZWVyLXBvcnQnKSwKKyAgICAgICAgICAgICAgJ2VnZ3NAZXhhbXBsZScsCisgICAgICAgICAgICAgIFsnc3BhbUBleGFtcGxlJ10sCisgICAgICAgICAgICAgICdkYXRhXG5tb3JlJyldKQogCiAgICAgZGVmIHRlc3RfZGF0YV9saW1pdF9kaWFsb2dfdG9vX211Y2hfZGF0YShzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV9saW5lKGInSEVMTyBleGFtcGxlJykKQEAgLTU1Myw1ICs4MzksMTgxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgYic1NTIgRXJyb3I6IFRvbyBtdWNoIG1haWwgZGF0YVxyXG4nKQogCiAKK2NsYXNzIFNNVFBEQ2hhbm5lbFdpdGhEZWNvZGVEYXRhRmFsc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzbXRwZC5zb2NrZXQgPSBhc3luY29yZS5zb2NrZXQgPSBtb2NrX3NvY2tldAorICAgICAgICBzZWxmLm9sZF9kZWJ1Z3N0cmVhbSA9IHNtdHBkLkRFQlVHU1RSRUFNCisgICAgICAgIHNlbGYuZGVidWcgPSBzbXRwZC5ERUJVR1NUUkVBTSA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgKCdiJywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9RmFsc2UpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnZlci5hY2NlcHQoKQorICAgICAgICAjIFNldCBkZWNvZGVfZGF0YSB0byBGYWxzZQorICAgICAgICBzZWxmLmNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZWxmLnNlcnZlciwgY29ubiwgYWRkciwKKyAgICAgICAgICAgICAgICBkZWNvZGVfZGF0YT1GYWxzZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKyAgICAgICAgYXN5bmNvcmUuc29ja2V0ID0gc210cGQuc29ja2V0ID0gc29ja2V0CisgICAgICAgIHNtdHBkLkRFQlVHU1RSRUFNID0gc2VsZi5vbGRfZGVidWdzdHJlYW0KKworICAgIGRlZiB3cml0ZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLmNoYW5uZWwuc29ja2V0LnF1ZXVlX3JlY3YobGluZSkKKyAgICAgICAgc2VsZi5jaGFubmVsLmhhbmRsZV9yZWFkKCkKKworICAgIGRlZiB0ZXN0X2FzY2lpX2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8gZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidwbGFpbiBhc2NpaSB0ZXh0JykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnJlY2VpdmVkX2RhdGEsIGIncGxhaW4gYXNjaWkgdGV4dCcpCisKKyAgICBkZWYgdGVzdF91dGY4X2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8gZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYid1dGY4IGVucmljaGVkIHRleHQ6IFx4YzVceGJjXHhjNVx4YmFceGM0XHg4NycpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ2FuZCBzb21lIHBsYWluIGFzY2lpJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLmNoYW5uZWwucmVjZWl2ZWRfZGF0YSwKKyAgICAgICAgICAgIGIndXRmOCBlbnJpY2hlZCB0ZXh0OiBceGM1XHhiY1x4YzVceGJhXHhjNFx4ODdcbicKKyAgICAgICAgICAgICAgICBiJ2FuZCBzb21lIHBsYWluIGFzY2lpJykKKworCitjbGFzcyBTTVRQRENoYW5uZWxXaXRoRGVjb2RlRGF0YVRydWUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzbXRwZC5zb2NrZXQgPSBhc3luY29yZS5zb2NrZXQgPSBtb2NrX3NvY2tldAorICAgICAgICBzZWxmLm9sZF9kZWJ1Z3N0cmVhbSA9IHNtdHBkLkRFQlVHU1RSRUFNCisgICAgICAgIHNlbGYuZGVidWcgPSBzbXRwZC5ERUJVR1NUUkVBTSA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgKCdiJywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9VHJ1ZSkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2VydmVyLmFjY2VwdCgpCisgICAgICAgICMgU2V0IGRlY29kZV9kYXRhIHRvIFRydWUKKyAgICAgICAgc2VsZi5jaGFubmVsID0gc210cGQuU01UUENoYW5uZWwoc2VsZi5zZXJ2ZXIsIGNvbm4sIGFkZHIsCisgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9VHJ1ZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKyAgICAgICAgYXN5bmNvcmUuc29ja2V0ID0gc210cGQuc29ja2V0ID0gc29ja2V0CisgICAgICAgIHNtdHBkLkRFQlVHU1RSRUFNID0gc2VsZi5vbGRfZGVidWdzdHJlYW0KKworICAgIGRlZiB3cml0ZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLmNoYW5uZWwuc29ja2V0LnF1ZXVlX3JlY3YobGluZSkKKyAgICAgICAgc2VsZi5jaGFubmVsLmhhbmRsZV9yZWFkKCkKKworICAgIGRlZiB0ZXN0X2FzY2lpX2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8gZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidwbGFpbiBhc2NpaSB0ZXh0JykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnJlY2VpdmVkX2RhdGEsICdwbGFpbiBhc2NpaSB0ZXh0JykKKworICAgIGRlZiB0ZXN0X3V0ZjhfZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInSEVMTyBleGFtcGxlJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInTUFJTCBGcm9tOmVnZ3NAZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ1JDUFQgVG86c3BhbUBleGFtcGxlJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInREFUQScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ3V0ZjggZW5yaWNoZWQgdGV4dDogXHhjNVx4YmNceGM1XHhiYVx4YzRceDg3JykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInYW5kIHNvbWUgcGxhaW4gYXNjaWknKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYicuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuY2hhbm5lbC5yZWNlaXZlZF9kYXRhLAorICAgICAgICAgICAgJ3V0ZjggZW5yaWNoZWQgdGV4dDogxbzFusSHXG5hbmQgc29tZSBwbGFpbiBhc2NpaScpCisKKworY2xhc3MgU01UUERDaGFubmVsVGVzdFdpdGhFbmFibGVTTVRQVVRGOFRydWUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc210cGQuc29ja2V0ID0gYXN5bmNvcmUuc29ja2V0ID0gbW9ja19zb2NrZXQKKyAgICAgICAgc2VsZi5vbGRfZGVidWdzdHJlYW0gPSBzbXRwZC5ERUJVR1NUUkVBTQorICAgICAgICBzZWxmLmRlYnVnID0gc210cGQuREVCVUdTVFJFQU0gPSBpby5TdHJpbmdJTygpCisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlTZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksICgnYicsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9TTVRQVVRGOD1UcnVlKQorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2ZXIuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5jaGFubmVsID0gc210cGQuU01UUENoYW5uZWwoc2VsZi5zZXJ2ZXIsIGNvbm4sIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9TTVRQVVRGOD1UcnVlKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoKQorICAgICAgICBhc3luY29yZS5zb2NrZXQgPSBzbXRwZC5zb2NrZXQgPSBzb2NrZXQKKyAgICAgICAgc210cGQuREVCVUdTVFJFQU0gPSBzZWxmLm9sZF9kZWJ1Z3N0cmVhbQorCisgICAgZGVmIHdyaXRlX2xpbmUoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYuY2hhbm5lbC5zb2NrZXQucXVldWVfcmVjdihsaW5lKQorICAgICAgICBzZWxmLmNoYW5uZWwuaGFuZGxlX3JlYWQoKQorCisgICAgZGVmIHRlc3RfTUFJTF9jb21tYW5kX2FjY2VwdHNfU01UUFVURjhfd2hlbl9hbm5vdW5jZWQoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0VITE8gZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZSgKKyAgICAgICAgICAgICdNQUlMIGZyb206IDxuYWnMiHZlQGV4YW1wbGUuY29tPiBCT0RZPThCSVRNSU1FIFNNVFBVVEY4Jy5lbmNvZGUoCisgICAgICAgICAgICAgICAgJ3V0Zi04JykKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwgYicyNTAgT0tcclxuJykKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3Nfc210cHV0ZjhfbWVzc2FnZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInRUhMTyBleGFtcGxlJykKKyAgICAgICAgZm9yIG1haWxfcGFyYW1ldGVycyBpbiBbYicnLCBiJ0JPRFk9OEJJVE1JTUUgU01UUFVURjgnXToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgZnJvbTogPGFAZXhhbXBsZT4gJyArIG1haWxfcGFyYW1ldGVycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0WzA6M10sIGInMjUwJykKKyAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ3JjcHQgdG86PGJAZXhhbXBsZS5jb20+JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0WzA6M10sIGInMjUwJykKKyAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ2RhdGEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3RbMDozXSwgYiczNTQnKQorICAgICAgICAgICAgc2VsZi53cml0ZV9saW5lKGInY1xyXG4uJykKKyAgICAgICAgICAgIGlmIG1haWxfcGFyYW1ldGVycyA9PSBiJyc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsIGInMjUwIE9LXHJcbicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyNTAgU01UUFVURjggbWVzc2FnZSBva2lzaFxyXG4nKQorCisgICAgZGVmIHRlc3RfdXRmOF9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidFSExPIGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoCisgICAgICAgICAgICAnTUFJTCBGcm9tOiBuYWnMiHZlQGV4YW1wbMOpIEJPRFk9OEJJVE1JTUUgU01UUFVURjgnLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3RbMDozXSwgYicyNTAnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoJ1JDUFQgVG86c3DDpG1AZXhhbXBsw6knLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3RbMDozXSwgYicyNTAnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidEQVRBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3RbMDozXSwgYiczNTQnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYid1dGY4IGVucmljaGVkIHRleHQ6IFx4YzVceGJjXHhjNVx4YmFceGM0XHg4NycpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJy4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5jaGFubmVsLnJlY2VpdmVkX2RhdGEsCisgICAgICAgICAgICBiJ3V0ZjggZW5yaWNoZWQgdGV4dDogXHhjNVx4YmNceGM1XHhiYVx4YzRceDg3JykKKworICAgIGRlZiB0ZXN0X01BSUxfY29tbWFuZF9saW1pdF9leHRlbmRlZF93aXRoX1NJWkVfYW5kX1NNVFBVVEY4KHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidlaGxvIGV4YW1wbGUnKQorICAgICAgICBmaWxsX2xlbiA9ICg1MTIgKyAyNiArIDEwKSAtIGxlbignbWFpbCBmcm9tOjxAZXhhbXBsZT4nKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidNQUlMIGZyb206PCcgKworICAgICAgICAgICAgICAgICAgICAgICAgYidhJyAqIChmaWxsX2xlbiArIDEpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGInQGV4YW1wbGU+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgYic1MDAgRXJyb3I6IGxpbmUgdG9vIGxvbmdcclxuJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInTUFJTCBmcm9tOjwnICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGInYScgKiBmaWxsX2xlbiArCisgICAgICAgICAgICAgICAgICAgICAgICBiJ0BleGFtcGxlPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LCBiJzI1MCBPS1xyXG4nKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZW1haWxzX3dpdGhfZXh0ZW5kZWRfY29tbWFuZF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ2VobG8gZXhhbXBsZScpCisgICAgICAgIGZpbGxfbGVuID0gKDUxMiArIDI2ICsgMTApIC0gbGVuKCdtYWlsIGZyb206PEBleGFtcGxlPicpCisgICAgICAgIGZvciBjaGFyIGluIFtiJ2EnLCBiJ2InLCBiJ2MnXToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgZnJvbTo8JyArIGNoYXIgKiBmaWxsX2xlbiArIGInYUBleGFtcGxlPicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdFswOjNdLCBiJzUwMCcpCisgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidNQUlMIGZyb206PCcgKyBjaGFyICogZmlsbF9sZW4gKyBiJ0BleGFtcGxlPicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdFswOjNdLCBiJzI1MCcpCisgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidyY3B0IHRvOjxoYW5zQGV4YW1wbGUuY29tPicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdFswOjNdLCBiJzI1MCcpCisgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidkYXRhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0WzA6M10sIGInMzU0JykKKyAgICAgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ3Rlc3RcclxuLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdFswOjNdLCBiJzI1MCcpCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKaW5kZXggOTVhOWRiZS4uMjg1MzlmMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQpAQCAtMSw2ICsxLDEwIEBACiBpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBiYXNlNjQKIGltcG9ydCBlbWFpbC5taW1lLnRleHQKK2Zyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgRW1haWxNZXNzYWdlCitmcm9tIGVtYWlsLmJhc2U2NG1pbWUgaW1wb3J0IGJvZHlfZW5jb2RlIGFzIGVuY29kZV9iYXNlNjQKIGltcG9ydCBlbWFpbC51dGlscworaW1wb3J0IGhtYWMKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzbXRwZAogaW1wb3J0IHNtdHBsaWIKQEAgLTEwLDYgKzE0LDcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgZXJybm8KK2ltcG9ydCB0ZXh0d3JhcAogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgbW9ja19zb2NrZXQKQEAgLTMwLDcgKzM1LDcgQEAKIAogCiBkZWYgc2VydmVyKGV2dCwgYnVmLCBzZXJ2KToKLSAgICBzZXJ2Lmxpc3Rlbig1KQorICAgIHNlcnYubGlzdGVuKCkKICAgICBldnQuc2V0KCkKICAgICB0cnk6CiAgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2LmFjY2VwdCgpCkBAIC0xMjMsNiArMTI4LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAgICAgICAgIHNtdHAuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfZGVidWdsZXZlbChzZWxmKToKKyAgICAgICAgbW9ja19zb2NrZXQucmVwbHlfd2l0aChiIjIyMCBIZWxsbyB3b3JsZCIpCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoKQorICAgICAgICBzbXRwLnNldF9kZWJ1Z2xldmVsKDEpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBzbXRwLmNvbm5lY3QoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzbXRwLmNsb3NlKCkKKyAgICAgICAgZXhwZWN0ZWQgPSByZS5jb21waWxlKHIiXmNvbm5lY3Q6IiwgcmUuTVVMVElMSU5FKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHN0ZGVyci5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2RlYnVnbGV2ZWxfMihzZWxmKToKKyAgICAgICAgbW9ja19zb2NrZXQucmVwbHlfd2l0aChiIjIyMCBIZWxsbyB3b3JsZCIpCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoKQorICAgICAgICBzbXRwLnNldF9kZWJ1Z2xldmVsKDIpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBzbXRwLmNvbm5lY3QoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzbXRwLmNsb3NlKCkKKyAgICAgICAgZXhwZWN0ZWQgPSByZS5jb21waWxlKHIiXlxkezJ9OlxkezJ9OlxkezJ9XC5cZHs2fSBjb25uZWN0OiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuTVVMVElMSU5FKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHN0ZGVyci5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKKwogCiAjIFRlc3Qgc2VydmVyIHRocmVhZCB1c2luZyB0aGUgc3BlY2lmaWVkIFNNVFAgc2VydmVyIGNsYXNzCiBkZWYgZGVidWdnaW5nX3NlcnZlcihzZXJ2LCBzZXJ2X2V2dCwgY2xpZW50X2V2dCk6CkBAIC0xODQsNyArMjEwLDggQEAKICAgICAgICAgc2VsZi5vbGRfREVCVUdTVFJFQU0gPSBzbXRwZC5ERUJVR1NUUkVBTQogICAgICAgICBzbXRwZC5ERUJVR1NUUkVBTSA9IGlvLlN0cmluZ0lPKCkKICAgICAgICAgIyBQaWNrIGEgcmFuZG9tIHVudXNlZCBwb3J0IGJ5IHBhc3NpbmcgMCBmb3IgdGhlIHBvcnQgbnVtYmVyCi0gICAgICAgIHNlbGYuc2VydiA9IHNtdHBkLkRlYnVnZ2luZ1NlcnZlcigoSE9TVCwgMCksICgnbm93aGVyZScsIC0xKSkKKyAgICAgICAgc2VsZi5zZXJ2ID0gc210cGQuRGVidWdnaW5nU2VydmVyKChIT1NULCAwKSwgKCdub3doZXJlJywgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlX2RhdGE9VHJ1ZSkKICAgICAgICAgIyBLZWVwIGEgbm90ZSBvZiB3aGF0IHBvcnQgd2FzIGFzc2lnbmVkCiAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5zZXJ2LCBzZWxmLnNlcnZfZXZ0LCBzZWxmLmNsaWVudF9ldnQpCkBAIC01OTgsMTkgKzYyNSwxMiBAQAogc2ltX2F1dGggPSAoJ01yLkFAc29tZXdoZXJlLmNvbScsICdzb21lcGFzc3dvcmQnKQogc2ltX2NyYW1fbWQ1X2NoYWxsZW5nZSA9ICgnUEVOQ2VVeEZSRUpvVTBObmJtaE5XaXRPTWpOR05uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnZEFaV3gzYjI5a0xtbHVibTl6YjJaMExtTnZiVDQ9JykKLXNpbV9hdXRoX2NyZWRlbnRpYWxzID0gewotICAgICdsb2dpbic6ICdUWEl1UVVCemIyMWxkMmhsY21VdVkyOXQnLAotICAgICdwbGFpbic6ICdBRTF5TGtGQWMyOXRaWGRvWlhKbExtTnZiUUJ6YjIxbGNHRnpjM2R2Y21RPScsCi0gICAgJ2NyYW0tbWQ1JzogKCdUWElVUVVCWkIyMUxEMkhMQ01VVVkyOVRJREc0T1dRME1KJwotICAgICAgICAgICAgICAgICAnS1daR1E0T0ROTU5EQTROVEdYTURSTFpXTVlaSkRNT0RHMScpLAotICAgIH0KLXNpbV9hdXRoX2xvZ2luX3Bhc3N3b3JkID0gJ0MyOVRaWEJIQzNOM0IzSksnCi0KIHNpbV9saXN0cyA9IHsnbGlzdC0xJzpbJ01yLkFAc29tZXdoZXJlLmNvbScsJ01ycy5DQHNvbWV3aGVyZWVzbGUuY29tJ10sCiAgICAgICAgICAgICAgJ2xpc3QtMic6WydNcy5CQHhuLS1mby1ma2EuY29tJyxdLAogICAgICAgICAgICAgfQogCiAjIFNpbXVsYXRlZCBTTVRQIGNoYW5uZWwgJiBzZXJ2ZXIKK2NsYXNzIFJlc3BvbnNlRXhjZXB0aW9uKEV4Y2VwdGlvbik6IHBhc3MKIGNsYXNzIFNpbVNNVFBDaGFubmVsKHNtdHBkLlNNVFBDaGFubmVsKToKIAogICAgIHF1aXRfcmVzcG9uc2UgPSBOb25lCkBAIC02MjAsMTIgKzY0MCwxMDkgQEAKICAgICByY3B0X2NvdW50ID0gMAogICAgIHJzZXRfY291bnQgPSAwCiAgICAgZGlzY29ubmVjdCA9IDAKKyAgICBBVVRIID0gOTkgICAgIyBBZGQgcHJvdG9jb2wgc3RhdGUgdG8gZW5hYmxlIGF1dGggdGVzdGluZy4KKyAgICBhdXRoZW50aWNhdGVkX3VzZXIgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0cmFfZmVhdHVyZXMsICphcmdzLCAqKmt3KToKICAgICAgICAgc2VsZi5fZXh0cmFmZWF0dXJlcyA9ICcnLmpvaW4oCiAgICAgICAgICAgICBbICIyNTAtezB9XHJcbiIuZm9ybWF0KHgpIGZvciB4IGluIGV4dHJhX2ZlYXR1cmVzIF0pCiAgICAgICAgIHN1cGVyKFNpbVNNVFBDaGFubmVsLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprdykKIAorICAgICMgQVVUSCByZWxhdGVkIHN0dWZmLiAgSXQgd291bGQgYmUgbmljZSBpZiBzdXBwb3J0IGZvciB0aGlzIHdlcmUgaW4gc210cGQuCisgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6CisgICAgICAgIGlmIHNlbGYuc210cF9zdGF0ZSA9PSBzZWxmLkFVVEg6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fZW1wdHlzdHJpbmcuam9pbihzZWxmLnJlY2VpdmVkX2xpbmVzKQorICAgICAgICAgICAgcHJpbnQoJ0RhdGE6JywgcmVwcihsaW5lKSwgZmlsZT1zbXRwZC5ERUJVR1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfbGluZXMgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXV0aF9vYmplY3QobGluZSkKKyAgICAgICAgICAgIGV4Y2VwdCBSZXNwb25zZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuc210cF9zdGF0ZSA9IHNlbGYuQ09NTUFORAorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnJXMgJXMnICUgKGUuc210cF9jb2RlLCBlLnNtdHBfZXJyb3IpKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdXBlcigpLmZvdW5kX3Rlcm1pbmF0b3IoKQorCisKKyAgICBkZWYgc210cF9BVVRIKHNlbGYsIGFyZyk6CisgICAgICAgIGlmIG5vdCBzZWxmLnNlZW5fZ3JlZXRpbmc6CisgICAgICAgICAgICBzZWxmLnB1c2goJzUwMyBFcnJvcjogc2VuZCBFSExPIGZpcnN0JykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3Qgc2VsZi5leHRlbmRlZF9zbXRwIG9yICdBVVRIJyBub3QgaW4gc2VsZi5fZXh0cmFmZWF0dXJlczoKKyAgICAgICAgICAgIHNlbGYucHVzaCgnNTAwIEVycm9yOiBjb21tYW5kICJBVVRIIiBub3QgcmVjb2duaXplZCcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5hdXRoZW50aWNhdGVkX3VzZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnB1c2goCisgICAgICAgICAgICAgICAgJzUwMyBCYWQgc2VxdWVuY2Ugb2YgY29tbWFuZHM6IGFscmVhZHkgYXV0aGVudGljYXRlZCcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXJncyA9IGFyZy5zcGxpdCgpCisgICAgICAgIGlmIGxlbihhcmdzKSBub3QgaW4gWzEsIDJdOgorICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgU3ludGF4OiBBVVRIIDxtZWNoYW5pc20+IFtpbml0aWFsLXJlc3BvbnNlXScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXV0aF9vYmplY3RfbmFtZSA9ICdfYXV0aF8lcycgJSBhcmdzWzBdLmxvd2VyKCkucmVwbGFjZSgnLScsICdfJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hdXRoX29iamVjdCA9IGdldGF0dHIoc2VsZiwgYXV0aF9vYmplY3RfbmFtZSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDQgQ29tbWFuZCBwYXJhbWV0ZXIgbm90IGltcGxlbWVudGVkOiB1bnN1cHBvcnRlZCAnCisgICAgICAgICAgICAgICAgICAgICAgJyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20geyFyfScuZm9ybWF0KGF1dGhfb2JqZWN0X25hbWUpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuc210cF9zdGF0ZSA9IHNlbGYuQVVUSAorICAgICAgICBzZWxmLmF1dGhfb2JqZWN0KGFyZ3NbMV0gaWYgbGVuKGFyZ3MpID09IDIgZWxzZSBOb25lKQorCisgICAgZGVmIF9hdXRoZW50aWNhdGVkKHNlbGYsIHVzZXIsIHZhbGlkKToKKyAgICAgICAgaWYgdmFsaWQ6CisgICAgICAgICAgICBzZWxmLmF1dGhlbnRpY2F0ZWRfdXNlciA9IHVzZXIKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMjM1IEF1dGhlbnRpY2F0aW9uIFN1Y2NlZWRlZCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2goJzUzNSBBdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBpbnZhbGlkJykKKyAgICAgICAgc2VsZi5zbXRwX3N0YXRlID0gc2VsZi5DT01NQU5ECisKKyAgICBkZWYgX2RlY29kZV9iYXNlNjQoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgcmV0dXJuIGJhc2U2NC5kZWNvZGVieXRlcyhzdHJpbmcuZW5jb2RlKCdhc2NpaScpKS5kZWNvZGUoJ3V0Zi04JykKKworICAgIGRlZiBfYXV0aF9wbGFpbihzZWxmLCBhcmc9Tm9uZSk6CisgICAgICAgIGlmIGFyZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5wdXNoKCczMzQgJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ3Bhc3MgPSBzZWxmLl9kZWNvZGVfYmFzZTY0KGFyZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAqXywgdXNlciwgcGFzc3dvcmQgPSBsb2dwYXNzLnNwbGl0KCdcMCcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnNTM1IFNwbGl0dGluZyByZXNwb25zZSB7IXJ9IGludG8gdXNlciBhbmQgcGFzc3dvcmQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiB7fScuZm9ybWF0KGxvZ3Bhc3MsIGUpKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5fYXV0aGVudGljYXRlZCh1c2VyLCBwYXNzd29yZCA9PSBzaW1fYXV0aFsxXSkKKworICAgIGRlZiBfYXV0aF9sb2dpbihzZWxmLCBhcmc9Tm9uZSk6CisgICAgICAgIGlmIGFyZyBpcyBOb25lOgorICAgICAgICAgICAgIyBiYXNlNjQgZW5jb2RlZCAnVXNlcm5hbWU6JworICAgICAgICAgICAgc2VsZi5wdXNoKCczMzQgVlhObGNtNWhiV1U2JykKKyAgICAgICAgZWxpZiBub3QgaGFzYXR0cihzZWxmLCAnX2F1dGhfbG9naW5fdXNlcicpOgorICAgICAgICAgICAgc2VsZi5fYXV0aF9sb2dpbl91c2VyID0gc2VsZi5fZGVjb2RlX2Jhc2U2NChhcmcpCisgICAgICAgICAgICAjIGJhc2U2NCBlbmNvZGVkICdQYXNzd29yZDonCisgICAgICAgICAgICBzZWxmLnB1c2goJzMzNCBVR0Z6YzNkdmNtUTYnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFzc3dvcmQgPSBzZWxmLl9kZWNvZGVfYmFzZTY0KGFyZykKKyAgICAgICAgICAgIHNlbGYuX2F1dGhlbnRpY2F0ZWQoc2VsZi5fYXV0aF9sb2dpbl91c2VyLCBwYXNzd29yZCA9PSBzaW1fYXV0aFsxXSkKKyAgICAgICAgICAgIGRlbCBzZWxmLl9hdXRoX2xvZ2luX3VzZXIKKworICAgIGRlZiBfYXV0aF9jcmFtX21kNShzZWxmLCBhcmc9Tm9uZSk6CisgICAgICAgIGlmIGFyZyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5wdXNoKCczMzQge30nLmZvcm1hdChzaW1fY3JhbV9tZDVfY2hhbGxlbmdlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ3Bhc3MgPSBzZWxmLl9kZWNvZGVfYmFzZTY0KGFyZykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1c2VyLCBoYXNoZWRfcGFzcyA9IGxvZ3Bhc3Muc3BsaXQoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzUzNSBTcGxpdHRpbmcgcmVzcG9uc2UgeyFyfSBpbnRvIHVzZXIgYW5kIHBhc3N3b3JkJworICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbGVkOiB7fScuZm9ybWF0KGxvZ3Bhc3MsIGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgdmFsaWRfaGFzaGVkX3Bhc3MgPSBobWFjLkhNQUMoCisgICAgICAgICAgICAgICAgc2ltX2F1dGhbMV0uZW5jb2RlKCdhc2NpaScpLAorICAgICAgICAgICAgICAgIHNlbGYuX2RlY29kZV9iYXNlNjQoc2ltX2NyYW1fbWQ1X2NoYWxsZW5nZSkuZW5jb2RlKCdhc2NpaScpLAorICAgICAgICAgICAgICAgICdtZDUnKS5oZXhkaWdlc3QoKQorICAgICAgICAgICAgc2VsZi5fYXV0aGVudGljYXRlZCh1c2VyLCBoYXNoZWRfcGFzcyA9PSB2YWxpZF9oYXNoZWRfcGFzcykKKyAgICAjIGVuZCBBVVRIIHJlbGF0ZWQgc3R1ZmYuCisKICAgICBkZWYgc210cF9FSExPKHNlbGYsIGFyZyk6CiAgICAgICAgIHJlc3AgPSAoJzI1MC10ZXN0aG9zdFxyXG4nCiAgICAgICAgICAgICAgICAgJzI1MC1FWFBOXHJcbicKQEAgLTY1NywyMiArNzc0LDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTUwIE5vIGFjY2VzcyBmb3IgeW91IScpCiAKLSAgICBkZWYgc210cF9BVVRIKHNlbGYsIGFyZyk6Ci0gICAgICAgIGlmIGFyZy5zdHJpcCgpLmxvd2VyKCk9PSdjcmFtLW1kNSc6Ci0gICAgICAgICAgICBzZWxmLnB1c2goJzMzNCB7fScuZm9ybWF0KHNpbV9jcmFtX21kNV9jaGFsbGVuZ2UpKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIG1lY2gsIGF1dGggPSBhcmcuc3BsaXQoKQotICAgICAgICBtZWNoID0gbWVjaC5sb3dlcigpCi0gICAgICAgIGlmIG1lY2ggbm90IGluIHNpbV9hdXRoX2NyZWRlbnRpYWxzOgotICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDQgYXV0aCB0eXBlIHVuaW1wbGVtZW50ZWQnKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG1lY2ggPT0gJ3BsYWluJyBhbmQgYXV0aD09c2ltX2F1dGhfY3JlZGVudGlhbHNbJ3BsYWluJ106Ci0gICAgICAgICAgICBzZWxmLnB1c2goJzIzNSBwbGFpbiBhdXRoIG9rJykKLSAgICAgICAgZWxpZiBtZWNoPT0nbG9naW4nIGFuZCBhdXRoPT1zaW1fYXV0aF9jcmVkZW50aWFsc1snbG9naW4nXToKLSAgICAgICAgICAgIHNlbGYucHVzaCgnMzM0IFBhc3N3b3JkOicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnB1c2goJzU1MCBObyBhY2Nlc3MgZm9yIHlvdSEnKQotCiAgICAgZGVmIHNtdHBfUVVJVChzZWxmLCBhcmcpOgogICAgICAgICBpZiBzZWxmLnF1aXRfcmVzcG9uc2UgaXMgTm9uZToKICAgICAgICAgICAgIHN1cGVyKFNpbVNNVFBDaGFubmVsLCBzZWxmKS5zbXRwX1FVSVQoYXJnKQpAQCAtNzE5LDcgKzgyMCw4IEBACiAKICAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIGNvbm4sIGFkZHIpOgogICAgICAgICBzZWxmLl9TTVRQY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcygKLSAgICAgICAgICAgIHNlbGYuX2V4dHJhX2ZlYXR1cmVzLCBzZWxmLCBjb25uLCBhZGRyKQorICAgICAgICAgICAgc2VsZi5fZXh0cmFfZmVhdHVyZXMsIHNlbGYsIGNvbm4sIGFkZHIsCisgICAgICAgICAgICBkZWNvZGVfZGF0YT1zZWxmLl9kZWNvZGVfZGF0YSkKIAogICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgogICAgICAgICBwYXNzCkBAIC03NDIsNyArODQ0LDcgQEAKICAgICAgICAgc2VsZi5zZXJ2X2V2dCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgIHNlbGYuY2xpZW50X2V2dCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgICMgUGljayBhIHJhbmRvbSB1bnVzZWQgcG9ydCBieSBwYXNzaW5nIDAgZm9yIHRoZSBwb3J0IG51bWJlcgotICAgICAgICBzZWxmLnNlcnYgPSBTaW1TTVRQU2VydmVyKChIT1NULCAwKSwgKCdub3doZXJlJywgLTEpKQorICAgICAgICBzZWxmLnNlcnYgPSBTaW1TTVRQU2VydmVyKChIT1NULCAwKSwgKCdub3doZXJlJywgLTEpLCBkZWNvZGVfZGF0YT1UcnVlKQogICAgICAgICAjIEtlZXAgYSBub3RlIG9mIHdoYXQgcG9ydCB3YXMgYXNzaWduZWQKICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLnNlcnYsIHNlbGYuc2Vydl9ldnQsIHNlbGYuY2xpZW50X2V2dCkKQEAgLTc5MCwxMSArODkyLDExIEBACiAgICAgZGVmIHRlc3RWUkZZKHNlbGYpOgogICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCiAKLSAgICAgICAgZm9yIGVtYWlsLCBuYW1lIGluIHNpbV91c2Vycy5pdGVtcygpOgorICAgICAgICBmb3IgYWRkcl9zcGVjLCBuYW1lIGluIHNpbV91c2Vycy5pdGVtcygpOgogICAgICAgICAgICAgZXhwZWN0ZWRfa25vd24gPSAoMjUwLCBieXRlcygnJXMgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHNtdHBsaWIucXVvdGVhZGRyKGVtYWlsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBzbXRwbGliLnF1b3RlYWRkcihhZGRyX3NwZWMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzY2lpIikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAudnJmeShlbWFpbCksIGV4cGVjdGVkX2tub3duKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnZyZnkoYWRkcl9zcGVjKSwgZXhwZWN0ZWRfa25vd24pCiAKICAgICAgICAgdSA9ICdub2JvZHlAbm93aGVyZS5jb20nCiAgICAgICAgIGV4cGVjdGVkX3Vua25vd24gPSAoNTUwLCAoJ05vIHN1Y2ggdXNlcjogJXMnICUgdSkuZW5jb2RlKCdhc2NpaScpKQpAQCAtODE5LDQ1ICs5MjEsNDcgQEAKICAgICBkZWYgdGVzdEFVVEhfUExBSU4oc2VsZik6CiAgICAgICAgIHNlbGYuc2Vydi5hZGRfZmVhdHVyZSgiQVVUSCBQTEFJTiIpCiAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKLQotICAgICAgICBleHBlY3RlZF9hdXRoX29rID0gKDIzNSwgYidwbGFpbiBhdXRoIG9rJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSksIGV4cGVjdGVkX2F1dGhfb2spCisgICAgICAgIHJlc3AgPSBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAoMjM1LCBiJ0F1dGhlbnRpY2F0aW9uIFN1Y2NlZWRlZCcpKQogICAgICAgICBzbXRwLmNsb3NlKCkKIAotICAgICMgU2ltU01UUENoYW5uZWwgZG9lc24ndCBmdWxseSBzdXBwb3J0IExPR0lOIG9yIENSQU0tTUQ1IGF1dGggYmVjYXVzZSB0aGV5Ci0gICAgIyByZXF1aXJlIGEgc3luY2hyb25vdXMgcmVhZCB0byBvYnRhaW4gdGhlIGNyZWRlbnRpYWxzLi4uc28gaW5zdGVhZCBzbXRwZAotICAgICMgc2VlcyB0aGUgY3JlZGVudGlhbCBzZW50IGJ5IHNtdHBsaWIncyBsb2dpbiBtZXRob2QgYXMgYW4gdW5rbm93biBjb21tYW5kLAotICAgICMgd2hpY2ggcmVzdWx0cyBpbiBzbXRwbGliIHJhaXNpbmcgYW4gYXV0aCBlcnJvci4gIEZvcnR1bmF0ZWx5IHRoZSBlcnJvcgotICAgICMgbWVzc2FnZSBjb250YWlucyB0aGUgZW5jb2RlZCBjcmVkZW50aWFsLCBzbyB3ZSBjYW4gcGFydGlhbGx5IGNoZWNrIHRoYXQgaXQKLSAgICAjIHdhcyBnZW5lcmF0ZWQgY29ycmVjdGx5IChwYXJ0aWFsbHksIGJlY2F1c2UgdGhlICd3b3JkJyBpcyB1cHBlcmNhc2VkIGluCi0gICAgIyB0aGUgZXJyb3IgbWVzc2FnZSkuCi0KICAgICBkZWYgdGVzdEFVVEhfTE9HSU4oc2VsZik6CiAgICAgICAgIHNlbGYuc2Vydi5hZGRfZmVhdHVyZSgiQVVUSCBMT0dJTiIpCiAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKLSAgICAgICAgdHJ5OiBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKLSAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9sb2dpbl9wYXNzd29yZCwgc3RyKGVycikpCisgICAgICAgIHJlc3AgPSBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAoMjM1LCBiJ0F1dGhlbnRpY2F0aW9uIFN1Y2NlZWRlZCcpKQogICAgICAgICBzbXRwLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0QVVUSF9DUkFNX01ENShzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2LmFkZF9mZWF0dXJlKCJBVVRIIENSQU0tTUQ1IikKICAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQotCi0gICAgICAgIHRyeTogc210cC5sb2dpbihzaW1fYXV0aFswXSwgc2ltX2F1dGhbMV0pCi0gICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBBdXRoZW50aWNhdGlvbkVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2ltX2F1dGhfY3JlZGVudGlhbHNbJ2NyYW0tbWQ1J10sIHN0cihlcnIpKQorICAgICAgICByZXNwID0gc210cC5sb2dpbihzaW1fYXV0aFswXSwgc2ltX2F1dGhbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgKDIzNSwgYidBdXRoZW50aWNhdGlvbiBTdWNjZWVkZWQnKSkKICAgICAgICAgc210cC5jbG9zZSgpCiAKICAgICBkZWYgdGVzdEFVVEhfbXVsdGlwbGUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IG11bHRpcGxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXJlIHRyaWVkLgogICAgICAgICBzZWxmLnNlcnYuYWRkX2ZlYXR1cmUoIkFVVEggQk9HVVMgUExBSU4gTE9HSU4gQ1JBTS1NRDUiKQogICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCi0gICAgICAgIHRyeTogc210cC5sb2dpbihzaW1fYXV0aFswXSwgc2ltX2F1dGhbMV0pCi0gICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBBdXRoZW50aWNhdGlvbkVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2ltX2F1dGhfbG9naW5fcGFzc3dvcmQsIHN0cihlcnIpKQorICAgICAgICByZXNwID0gc210cC5sb2dpbihzaW1fYXV0aFswXSwgc2ltX2F1dGhbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgKDIzNSwgYidBdXRoZW50aWNhdGlvbiBTdWNjZWVkZWQnKSkKICAgICAgICAgc210cC5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9hdXRoX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBzdXBwb3J0ZWQgPSB7J0NSQU0tTUQ1JywgJ1BMQUlOJywgJ0xPR0lOJ30KKyAgICAgICAgZm9yIG1lY2hhbmlzbSBpbiBzdXBwb3J0ZWQ6CisgICAgICAgICAgICBzZWxmLnNlcnYuYWRkX2ZlYXR1cmUoIkFVVEgge30iLmZvcm1hdChtZWNoYW5pc20pKQorICAgICAgICBmb3IgbWVjaGFuaXNtIGluIHN1cHBvcnRlZDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG1lY2hhbmlzbT1tZWNoYW5pc20pOgorICAgICAgICAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCisgICAgICAgICAgICAgICAgc210cC5laGxvKCdmb28nKQorICAgICAgICAgICAgICAgIHNtdHAudXNlciwgc210cC5wYXNzd29yZCA9IHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXQorICAgICAgICAgICAgICAgIG1ldGhvZCA9ICdhdXRoXycgKyBtZWNoYW5pc20ubG93ZXIoKS5yZXBsYWNlKCctJywgJ18nKQorICAgICAgICAgICAgICAgIHJlc3AgPSBzbXRwLmF1dGgobWVjaGFuaXNtLCBnZXRhdHRyKHNtdHAsIG1ldGhvZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAoMjM1LCBiJ0F1dGhlbnRpY2F0aW9uIFN1Y2NlZWRlZCcpKQorICAgICAgICAgICAgICAgIHNtdHAuY2xvc2UoKQorCiAgICAgZGVmIHRlc3RfcXVpdF9yZXNldHNfZ3JlZXRpbmcoc2VsZik6CiAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLApAQCAtOTM4LDEzICsxMDQyLDI0OSBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzbXRwLnNvY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2Ll9TTVRQY2hhbm5lbC5yY3B0X2NvdW50LCAwKQogCisgICAgZGVmIHRlc3Rfc210cHV0ZjhfTm90U3VwcG9ydGVkRXJyb3JfaWZfbm9fc2VydmVyX3N1cHBvcnQoc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoCisgICAgICAgICAgICBIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzbXRwLmNsb3NlKQorICAgICAgICBzbXRwLmVobG8oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc210cC5kb2VzX2VzbXRwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNtdHAuaGFzX2V4dG4oJ3NtdHB1dGY4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgc210cGxpYi5TTVRQTm90U3VwcG9ydGVkRXJyb3IsCisgICAgICAgICAgICBzbXRwLnNlbmRtYWlsLAorICAgICAgICAgICAgJ0pvaG4nLCAnU2FsbHknLCAnJywgbWFpbF9vcHRpb25zPVsnQk9EWT04QklUTUlNRScsICdTTVRQVVRGOCddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIHNtdHBsaWIuU01UUE5vdFN1cHBvcnRlZEVycm9yLAorICAgICAgICAgICAgc210cC5tYWlsLCAnSm9obicsIG9wdGlvbnM9WydCT0RZPThCSVRNSU1FJywgJ1NNVFBVVEY4J10pCisKKyAgICBkZWYgdGVzdF9zZW5kX3VuaWNvZGVfd2l0aG91dF9TTVRQVVRGOChzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUCgKKyAgICAgICAgICAgIEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNtdHAuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgc210cC5zZW5kbWFpbCwgJ0FsaWNlJywgJ0LDtmInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBzbXRwLm1haWwsICfDhGxpY2UnKQorCisKK2NsYXNzIFNpbVNNVFBVVEY4U2VydmVyKFNpbVNNVFBTZXJ2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgIyBUaGUgYmFzZSBTTVRQIHNlcnZlciB0dXJucyB0aGVzZSBvbiBhdXRvbWF0aWNhbGx5LCBidXQgb3VyIHRlc3QKKyAgICAgICAgIyBzZXJ2ZXIgaXMgc2V0IHVwIHRvIG11bmdlIHRoZSBFSExPIHJlc3BvbnNlLCBzbyB3ZSBuZWVkIHRvIHByb3ZpZGUKKyAgICAgICAgIyB0aGVtIGFzIHdlbGwuICBBbmQgeWVzLCB0aGUgY2FsbCBpcyB0byBTTVRQU2VydmVyIG5vdCBTaW1TTVRQU2VydmVyLgorICAgICAgICBzZWxmLl9leHRyYV9mZWF0dXJlcyA9IFsnU01UUFVURjgnLCAnOEJJVE1JTUUnXQorICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIGhhbmRsZV9hY2NlcHRlZChzZWxmLCBjb25uLCBhZGRyKToKKyAgICAgICAgc2VsZi5fU01UUGNoYW5uZWwgPSBzZWxmLmNoYW5uZWxfY2xhc3MoCisgICAgICAgICAgICBzZWxmLl9leHRyYV9mZWF0dXJlcywgc2VsZiwgY29ubiwgYWRkciwKKyAgICAgICAgICAgIGRlY29kZV9kYXRhPXNlbGYuX2RlY29kZV9kYXRhLAorICAgICAgICAgICAgZW5hYmxlX1NNVFBVVEY4PXNlbGYuZW5hYmxlX1NNVFBVVEY4LAorICAgICAgICApCisKKyAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhLCBtYWlsX29wdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY3B0X29wdGlvbnM9Tm9uZSk6CisgICAgICAgIHNlbGYubGFzdF9wZWVyID0gcGVlcgorICAgICAgICBzZWxmLmxhc3RfbWFpbGZyb20gPSBtYWlsZnJvbQorICAgICAgICBzZWxmLmxhc3RfcmNwdHRvcyA9IHJjcHR0b3MKKyAgICAgICAgc2VsZi5sYXN0X21lc3NhZ2UgPSBkYXRhCisgICAgICAgIHNlbGYubGFzdF9tYWlsX29wdGlvbnMgPSBtYWlsX29wdGlvbnMKKyAgICAgICAgc2VsZi5sYXN0X3JjcHRfb3B0aW9ucyA9IHJjcHRfb3B0aW9ucworCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBTTVRQVVRGOFNpbVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIG1heERpZmYgPSBOb25lCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucmVhbF9nZXRmcWRuID0gc29ja2V0LmdldGZxZG4KKyAgICAgICAgc29ja2V0LmdldGZxZG4gPSBtb2NrX3NvY2tldC5nZXRmcWRuCisgICAgICAgIHNlbGYuc2Vydl9ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmNsaWVudF9ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAjIFBpY2sgYSByYW5kb20gdW51c2VkIHBvcnQgYnkgcGFzc2luZyAwIGZvciB0aGUgcG9ydCBudW1iZXIKKyAgICAgICAgc2VsZi5zZXJ2ID0gU2ltU01UUFVURjhTZXJ2ZXIoKEhPU1QsIDApLCAoJ25vd2hlcmUnLCAtMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9kYXRhPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfU01UUFVURjg9VHJ1ZSkKKyAgICAgICAgIyBLZWVwIGEgbm90ZSBvZiB3aGF0IHBvcnQgd2FzIGFzc2lnbmVkCisgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5zZXJ2LCBzZWxmLnNlcnZfZXZ0LCBzZWxmLmNsaWVudF9ldnQpCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZGVidWdnaW5nX3NlcnZlciwgYXJncz1zZXJ2X2FyZ3MpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKworICAgICAgICAjIHdhaXQgdW50aWwgc2VydmVyIHRocmVhZCBoYXMgYXNzaWduZWQgYSBwb3J0IG51bWJlcgorICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnNlcnZfZXZ0LmNsZWFyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc29ja2V0LmdldGZxZG4gPSBzZWxmLnJlYWxfZ2V0ZnFkbgorICAgICAgICAjIGluZGljYXRlIHRoYXQgdGhlIGNsaWVudCBpcyBmaW5pc2hlZAorICAgICAgICBzZWxmLmNsaWVudF9ldnQuc2V0KCkKKyAgICAgICAgIyB3YWl0IGZvciB0aGUgc2VydmVyIHRocmVhZCB0byB0ZXJtaW5hdGUKKyAgICAgICAgc2VsZi5zZXJ2X2V2dC53YWl0KCkKKyAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisKKyAgICBkZWYgdGVzdF90ZXN0X3NlcnZlcl9zdXBwb3J0c19leHRlbnNpb25zKHNlbGYpOgorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKAorICAgICAgICAgICAgSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0zKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc210cC5jbG9zZSkKKyAgICAgICAgc210cC5laGxvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNtdHAuZG9lc19lc210cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNtdHAuaGFzX2V4dG4oJ3NtdHB1dGY4JykpCisKKyAgICBkZWYgdGVzdF9zZW5kX3VuaWNvZGVfd2l0aF9TTVRQVVRGOF92aWFfc2VuZG1haWwoc2VsZik6CisgICAgICAgIG0gPSAnwqFhIHRlc3QgbWVzc2FnZSBjb250YWluaW5nIHVuaWNvZGUhJy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUCgKKyAgICAgICAgICAgIEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNtdHAuY2xvc2UpCisgICAgICAgIHNtdHAuc2VuZG1haWwoJ0rFkWhuJywgJ1PDoWxseScsIG0sCisgICAgICAgICAgICAgICAgICAgICAgbWFpbF9vcHRpb25zPVsnQk9EWT04QklUTUlNRScsICdTTVRQVVRGOCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2Vydi5sYXN0X21haWxmcm9tLCAnSsWRaG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2Vydi5sYXN0X3JjcHR0b3MsIFsnU8OhbGx5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2Lmxhc3RfbWVzc2FnZSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQk9EWT04QklUTUlNRScsIHNlbGYuc2Vydi5sYXN0X21haWxfb3B0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignU01UUFVURjgnLCBzZWxmLnNlcnYubGFzdF9tYWlsX29wdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2Lmxhc3RfcmNwdF9vcHRpb25zLCBbXSkKKworICAgIGRlZiB0ZXN0X3NlbmRfdW5pY29kZV93aXRoX1NNVFBVVEY4X3ZpYV9sb3dfbGV2ZWxfQVBJKHNlbGYpOgorICAgICAgICBtID0gJ8KhYSB0ZXN0IG1lc3NhZ2UgY29udGFpbmluZyB1bmljb2RlIScuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoCisgICAgICAgICAgICBIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzbXRwLmNsb3NlKQorICAgICAgICBzbXRwLmVobG8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc210cC5tYWlsKCdKxZEnLCBvcHRpb25zPVsnQk9EWT04QklUTUlNRScsICdTTVRQVVRGOCddKSwKKyAgICAgICAgICAgICgyNTAsIGInT0snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnJjcHQoJ0rDoW5vcycpLCAoMjUwLCBiJ09LJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5kYXRhKG0pLCAoMjUwLCBiJ09LJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2Lmxhc3RfbWFpbGZyb20sICdKxZEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2Vydi5sYXN0X3JjcHR0b3MsIFsnSsOhbm9zJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2Lmxhc3RfbWVzc2FnZSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQk9EWT04QklUTUlNRScsIHNlbGYuc2Vydi5sYXN0X21haWxfb3B0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignU01UUFVURjgnLCBzZWxmLnNlcnYubGFzdF9tYWlsX29wdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2Lmxhc3RfcmNwdF9vcHRpb25zLCBbXSkKKworICAgIGRlZiB0ZXN0X3NlbmRfbWVzc2FnZV91c2VzX3NtdHB1dGY4X2lmX2FkZHJzX25vbl9hc2NpaShzZWxmKToKKyAgICAgICAgbXNnID0gRW1haWxNZXNzYWdlKCkKKyAgICAgICAgbXNnWydGcm9tJ10gPSAiUMOhb2xvIDxmxZFvQGJhci5jb20+IgorICAgICAgICBtc2dbJ1RvJ10gPSAnRGluc2RhbGUnCisgICAgICAgIG1zZ1snU3ViamVjdCddID0gJ051ZGdlIG51ZGdlLCB3aW5rLCB3aW5rIFx1MUY2MDknCisgICAgICAgICMgWFhYIEkgZG9uJ3Qga25vdyB3aHkgSSBuZWVkIHR3byBcbidzIGhlcmUsIGJ1dCB0aGlzIGlzIGFuIGV4aXN0aW5nCisgICAgICAgICMgYnVnIChpZiBpdCBpcyBvbmUpIGFuZCBub3QgYSBwcm9ibGVtIHdpdGggdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgorICAgICAgICBtc2cuc2V0X2NvbnRlbnQoIm9oIGzDoCBsw6AsIGtub3cgd2hhdCBJIG1lYW4sIGtub3cgd2hhdCBJIG1lYW4/XG5cbiIpCisgICAgICAgICMgWFhYIHNtdHBkIGNvbnZlcnRzIHJlY2VpdmVkIC9yL24gdG8gL24sIHNvIHdlIGNhbid0IGVhc2lseSB0ZXN0IHRoYXQKKyAgICAgICAgIyB3ZSBhcmUgc3VjY2Vzc2Z1bGx5IHNlbmRpbmcgL3IvbiA6KC4KKyAgICAgICAgZXhwZWN0ZWQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgRnJvbTogUMOhb2xvIDxmxZFvQGJhci5jb20+CisgICAgICAgICAgICBUbzogRGluc2RhbGUKKyAgICAgICAgICAgIFN1YmplY3Q6IE51ZGdlIG51ZGdlLCB3aW5rLCB3aW5rIFx1MUY2MDkKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBvaCBsw6AgbMOgLCBrbm93IHdoYXQgSSBtZWFuLCBrbm93IHdoYXQgSSBtZWFuPworICAgICAgICAgICAgIiIiKQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKAorICAgICAgICAgICAgSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0zKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc210cC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnNlbmRfbWVzc2FnZShtc2cpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnYubGFzdF9tYWlsZnJvbSwgJ2bFkW9AYmFyLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2Lmxhc3RfcmNwdHRvcywgWydEaW5zZGFsZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2Vydi5sYXN0X21lc3NhZ2UuZGVjb2RlKCksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT0RZPThCSVRNSU1FJywgc2VsZi5zZXJ2Lmxhc3RfbWFpbF9vcHRpb25zKQorICAgICAgICBzZWxmLmFzc2VydEluKCdTTVRQVVRGOCcsIHNlbGYuc2Vydi5sYXN0X21haWxfb3B0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnYubGFzdF9yY3B0X29wdGlvbnMsIFtdKQorCisgICAgZGVmIHRlc3Rfc2VuZF9tZXNzYWdlX2Vycm9yX29uX25vbl9hc2NpaV9hZGRyc19pZl9ub19zbXRwdXRmOChzZWxmKToKKyAgICAgICAgbXNnID0gRW1haWxNZXNzYWdlKCkKKyAgICAgICAgbXNnWydGcm9tJ10gPSAiUMOhb2xvIDxmxZFvQGJhci5jb20+IgorICAgICAgICBtc2dbJ1RvJ10gPSAnRGluc2RhbGUnCisgICAgICAgIG1zZ1snU3ViamVjdCddID0gJ051ZGdlIG51ZGdlLCB3aW5rLCB3aW5rIFx1MUY2MDknCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoCisgICAgICAgICAgICBIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzbXRwLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzbXRwbGliLlNNVFBOb3RTdXBwb3J0ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC5zZW5kX21lc3NhZ2UobXNnKSkKKworCitFWFBFQ1RFRF9SRVNQT05TRSA9IGVuY29kZV9iYXNlNjQoYidcMHBzdVwwZG9lc25vdGV4aXN0JywgZW9sPScnKQorCitjbGFzcyBTaW1TTVRQQVVUSEluaXRpYWxSZXNwb25zZUNoYW5uZWwoU2ltU01UUENoYW5uZWwpOgorICAgIGRlZiBzbXRwX0FVVEgoc2VsZiwgYXJnKToKKyAgICAgICAgIyBSRkMgNDk1NCdzIEFVVEggY29tbWFuZCBhbGxvd3MgZm9yIGFuIG9wdGlvbmFsIGluaXRpYWwtcmVzcG9uc2UuCisgICAgICAgICMgTm90IGFsbCBBVVRIIG1ldGhvZHMgc3VwcG9ydCB0aGlzOyBzb21lIHJlcXVpcmUgYSBjaGFsbGVuZ2UuICBBVVRICisgICAgICAgICMgUExBSU4gZG9lcyB0aG9zZSwgc28gdGVzdCB0aGF0IGhlcmUuICBTZWUgaXNzdWUgIzE1MDE0LgorICAgICAgICBhcmdzID0gYXJnLnNwbGl0KCkKKyAgICAgICAgaWYgYXJnc1swXS5sb3dlcigpID09ICdwbGFpbic6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMjoKKyAgICAgICAgICAgICAgICAjIEFVVEggUExBSU4gPGluaXRpYWwtcmVzcG9uc2U+IHdpdGggdGhlIHJlc3BvbnNlIGJhc2UgNjQKKyAgICAgICAgICAgICAgICAjIGVuY29kZWQuICBIYXJkIGNvZGUgdGhlIGV4cGVjdGVkIHJlc3BvbnNlIGZvciB0aGUgdGVzdC4KKyAgICAgICAgICAgICAgICBpZiBhcmdzWzFdID09IEVYUEVDVEVEX1JFU1BPTlNFOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzIzNSBPaycpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnB1c2goJzU3MSBCYWQgYXV0aGVudGljYXRpb24nKQorCitjbGFzcyBTaW1TTVRQQVVUSEluaXRpYWxSZXNwb25zZVNlcnZlcihTaW1TTVRQU2VydmVyKToKKyAgICBjaGFubmVsX2NsYXNzID0gU2ltU01UUEFVVEhJbml0aWFsUmVzcG9uc2VDaGFubmVsCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFNNVFBBVVRISW5pdGlhbFJlc3BvbnNlU2ltVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWFsX2dldGZxZG4gPSBzb2NrZXQuZ2V0ZnFkbgorICAgICAgICBzb2NrZXQuZ2V0ZnFkbiA9IG1vY2tfc29ja2V0LmdldGZxZG4KKyAgICAgICAgc2VsZi5zZXJ2X2V2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuY2xpZW50X2V2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgICMgUGljayBhIHJhbmRvbSB1bnVzZWQgcG9ydCBieSBwYXNzaW5nIDAgZm9yIHRoZSBwb3J0IG51bWJlcgorICAgICAgICBzZWxmLnNlcnYgPSBTaW1TTVRQQVVUSEluaXRpYWxSZXNwb25zZVNlcnZlcigKKyAgICAgICAgICAgIChIT1NULCAwKSwgKCdub3doZXJlJywgLTEpLCBkZWNvZGVfZGF0YT1UcnVlKQorICAgICAgICAjIEtlZXAgYSBub3RlIG9mIHdoYXQgcG9ydCB3YXMgYXNzaWduZWQKKyAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLnNlcnYsIHNlbGYuc2Vydl9ldnQsIHNlbGYuY2xpZW50X2V2dCkKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1kZWJ1Z2dpbmdfc2VydmVyLCBhcmdzPXNlcnZfYXJncykKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorCisgICAgICAgICMgd2FpdCB1bnRpbCBzZXJ2ZXIgdGhyZWFkIGhhcyBhc3NpZ25lZCBhIHBvcnQgbnVtYmVyCisgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYuc2Vydl9ldnQuY2xlYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzb2NrZXQuZ2V0ZnFkbiA9IHNlbGYucmVhbF9nZXRmcWRuCisgICAgICAgICMgaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50IGlzIGZpbmlzaGVkCisgICAgICAgIHNlbGYuY2xpZW50X2V2dC5zZXQoKQorICAgICAgICAjIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRlcm1pbmF0ZQorICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKworICAgIGRlZiB0ZXN0QVVUSF9QTEFJTl9pbml0aWFsX3Jlc3BvbnNlX2xvZ2luKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYuYWRkX2ZlYXR1cmUoJ0FVVEggUExBSU4nKQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKyAgICAgICAgc210cC5sb2dpbigncHN1JywgJ2RvZXNub3RleGlzdCcpCisgICAgICAgIHNtdHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RBVVRIX1BMQUlOX2luaXRpYWxfcmVzcG9uc2VfYXV0aChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2LmFkZF9mZWF0dXJlKCdBVVRIIFBMQUlOJykKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCisgICAgICAgIHNtdHAudXNlciA9ICdwc3UnCisgICAgICAgIHNtdHAucGFzc3dvcmQgPSAnZG9lc25vdGV4aXN0JworICAgICAgICBjb2RlLCByZXNwb25zZSA9IHNtdHAuYXV0aCgncGxhaW4nLCBzbXRwLmF1dGhfcGxhaW4pCisgICAgICAgIHNtdHAuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIDIzNSkKKwogCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmFsVGVzdHMsIERlYnVnZ2luZ1NlcnZlclRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uQ29ubmVjdGluZ1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkSEVMT1NlcnZlclRlc3RzLCBTTVRQU2ltVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb29Mb25nTGluZVRlc3RzKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBCYWRIRUxPU2VydmVyVGVzdHMsCisgICAgICAgIERlYnVnZ2luZ1NlcnZlclRlc3RzLAorICAgICAgICBHZW5lcmFsVGVzdHMsCisgICAgICAgIE5vbkNvbm5lY3RpbmdUZXN0cywKKyAgICAgICAgU01UUEFVVEhJbml0aWFsUmVzcG9uc2VTaW1UZXN0cywKKyAgICAgICAgU01UUFNpbVRlc3RzLAorICAgICAgICBUb29Mb25nTGluZVRlc3RzLAorICAgICAgICApCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5IGIvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CmluZGV4IDE1NjU0ZjIuLmNjOWJhYjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKQEAgLTc5LDggKzc5LDUgQEAKICAgICAgICAgICAgIHNlcnZlci5xdWl0KCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU210cFRlc3QsIFNtdHBTU0xUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NuZGhkci5weSBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CmluZGV4IDVlMGFiZTAuLjQyNjQxN2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CkBAIC0xLDQgKzEsNSBAQAogaW1wb3J0IHNuZGhkcgoraW1wb3J0IHBpY2tsZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUKIApAQCAtMTgsNiArMTksMTkgQEAKICAgICAgICAgICAgIHdoYXQgPSBzbmRoZHIud2hhdChmaWxlbmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwod2hhdCwgTm9uZSwgZmlsZW5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwod2hhdCwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdoYXQuZmlsZXR5cGUsIGV4cGVjdGVkWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aGF0LmZyYW1lcmF0ZSwgZXhwZWN0ZWRbMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdoYXQubmNoYW5uZWxzLCBleHBlY3RlZFsyXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2hhdC5uZnJhbWVzLCBleHBlY3RlZFszXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2hhdC5zYW1wd2lkdGgsIGV4cGVjdGVkWzRdKQorCisgICAgZGVmIHRlc3RfcGlja2xlYWJsZShzZWxmKToKKyAgICAgICAgZmlsZW5hbWUgPSBmaW5kZmlsZSgnc25kaGRyLmFpZmMnLCBzdWJkaXI9InNuZGhkcmRhdGEiKQorICAgICAgICB3aGF0ID0gc25kaGRyLndoYXQoZmlsZW5hbWUpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVtcCA9IHBpY2tsZS5kdW1wcyh3aGF0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLmxvYWRzKGR1bXApLCB3aGF0KQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CmluZGV4IDE0MGI0YmUuLmMxNTFhNTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CkBAIC0yMCw2ICsyMCw4IEBACiBpbXBvcnQgbWF0aAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN0cnVjdAoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cmluZwogdHJ5OgogICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTc2LDcgKzc4LDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5wb3J0ID0gc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zZXJ2KQotICAgICAgICBzZWxmLnNlcnYubGlzdGVuKDEpCisgICAgICAgIHNlbGYuc2Vydi5saXN0ZW4oKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnYuY2xvc2UoKQpAQCAtMTk3LDcgKzE5OSw3IEBACiAgICAgICAgIGNsaWVudFRlYXJEb3duICgpCiAKICAgICBBbnkgbmV3IHRlc3QgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY2xhc3MgbXVzdCB0aGVuIGRlZmluZQotICAgIHRlc3RzIGluIHBhaXJzLCB3aGVyZSB0aGUgdGVzdCBuYW1lIGlzIHByZWNlZWRlZCB3aXRoIGEKKyAgICB0ZXN0cyBpbiBwYWlycywgd2hlcmUgdGhlIHRlc3QgbmFtZSBpcyBwcmVjZWRlZCB3aXRoIGEKICAgICAnXycgdG8gaW5kaWNhdGUgdGhlIGNsaWVudCBwb3J0aW9uIG9mIHRoZSB0ZXN0LiBFeDoKIAogICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKQEAgLTQ0NSw3ICs0NDcsNyBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc2VsZi5zZXJ2Lmxpc3RlbigxKQorICAgICAgICBzZWxmLnNlcnYubGlzdGVuKCkKIAogCiBjbGFzcyBUaHJlYWRlZFNvY2tldFRlc3RNaXhpbihUaHJlYWRTYWZlQ2xlYW51cFRlc3RDYXNlLCBTb2NrZXRUZXN0QmFzZSwKQEAgLTcxNiwxMSArNzE4LDExIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHMuc2VuZHRvKCdcdTI2MjAnLCBzb2NrbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiJ3N0cicgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgImEgYnl0ZXMtbGlrZSBvYmplY3QgaXMgcmVxdWlyZWQsIG5vdCAnc3RyJyIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHMuc2VuZHRvKDVqLCBzb2NrbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiJ2NvbXBsZXgnIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJ1ZmZlciBpbnRlcmZhY2UiKQorICAgICAgICAgICAgICAgICAgICAgICAgICJhIGJ5dGVzLWxpa2Ugb2JqZWN0IGlzIHJlcXVpcmVkLCBub3QgJ2NvbXBsZXgnIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgcy5zZW5kdG8oYidmb28nLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEluKCdub3QgTm9uZVR5cGUnLHN0cihjbS5leGNlcHRpb24pKQpAQCAtNzI4LDExICs3MzAsMTEgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgcy5zZW5kdG8oJ1x1MjYyMCcsIDAsIHNvY2tuYW1lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICInc3RyJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgaW50ZXJmYWNlIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYSBieXRlcy1saWtlIG9iamVjdCBpcyByZXF1aXJlZCwgbm90ICdzdHInIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgcy5zZW5kdG8oNWosIDAsIHNvY2tuYW1lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICInY29tcGxleCcgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgImEgYnl0ZXMtbGlrZSBvYmplY3QgaXMgcmVxdWlyZWQsIG5vdCAnY29tcGxleCciKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBzLnNlbmR0byhiJ2ZvbycsIDAsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ25vdCBOb25lVHlwZScsIHN0cihjbS5leGNlcHRpb24pKQpAQCAtMTA3Miw2ICsxMDc0LDcgQEAKICAgICAgICAgYXNzZXJ0SW52YWxpZChmLCBiJ1x4MDAnICogMykKICAgICAgICAgYXNzZXJ0SW52YWxpZChmLCBiJ1x4MDAnICogNSkKICAgICAgICAgYXNzZXJ0SW52YWxpZChmLCBiJ1x4MDAnICogMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzE3MC44NS4xNzAuODUnLCBmKGJ5dGVhcnJheShiJ1x4YWFceDU1XHhhYVx4NTUnKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMS4wLjEuMCcsIGcoYidceDAxXHgwMFx4MDFceDAwJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzE3MC44NS4xNzAuODUnLCBnKGInXHhhYVx4NTVceGFhXHg1NScpKQpAQCAtMTA3OSw2ICsxMDgyLDcgQEAKICAgICAgICAgYXNzZXJ0SW52YWxpZChnLCBiJ1x4MDAnICogMykKICAgICAgICAgYXNzZXJ0SW52YWxpZChnLCBiJ1x4MDAnICogNSkKICAgICAgICAgYXNzZXJ0SW52YWxpZChnLCBiJ1x4MDAnICogMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzE3MC44NS4xNzAuODUnLCBnKGJ5dGVhcnJheShiJ1x4YWFceDU1XHhhYVx4NTUnKSkpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ2luZXRfbnRvcCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG5lZWRzIHNvY2tldC5pbmV0X250b3AoKScpCkBAIC0xMTA4LDYgKzExMTIsNyBAQAogICAgICAgICAgICAgJ2FlZjpiMDE6NTA2OjEwMDE6ZmZmZjo5OTk3OjU1OjE3MCcsCiAgICAgICAgICAgICBmKGInXHgwYVx4ZWZceDBiXHgwMVx4MDVceDA2XHgxMFx4MDFceGZmXHhmZlx4OTlceDk3XHgwMFx4NTVceDAxXHg3MCcpCiAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnOjoxJywgZihieXRlYXJyYXkoYidceDAwJyAqIDE1ICsgYidceDAxJykpKQogCiAgICAgICAgIGFzc2VydEludmFsaWQoYidceDEyJyAqIDE1KQogICAgICAgICBhc3NlcnRJbnZhbGlkKGInXHgxMicgKiAxNykKQEAgLTEyOTksNyArMTMwNCw3IEBACiAgICAgICAgICMgc29ja2V0LmdldGhvc3RieWFkZHIoJ9C40YHQv9GL0YLQsNC90LjQtS5weXRob24ub3JnJykKIAogICAgIGRlZiBjaGVja19zZW5kYWxsX2ludGVycnVwdGVkKHNlbGYsIHdpdGhfdGltZW91dCk6Ci0gICAgICAgICMgc29ja2V0cGFpcigpIGlzIG5vdCBzdHJpY2x5IHJlcXVpcmVkLCBidXQgaXQgbWFrZXMgdGhpbmdzIGVhc2llci4KKyAgICAgICAgIyBzb2NrZXRwYWlyKCkgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVkLCBidXQgaXQgbWFrZXMgdGhpbmdzIGVhc2llci4KICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2lnbmFsLCAnYWxhcm0nKSBvciBub3QgaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyk6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzaWduYWwuYWxhcm0gYW5kIHNvY2tldC5zb2NrZXRwYWlyIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQogICAgICAgICAjIE91ciBzaWduYWwgaGFuZGxlcnMgY2xvYmJlciB0aGUgQyBlcnJubyBieSBjYWxsaW5nIGEgbWF0aCBmdW5jdGlvbgpAQCAtMTM2OSw2ICsxMzc0LDIwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmcC53cml0YWJsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZwLnNlZWthYmxlKQogCisgICAgZGVmIHRlc3RfbWFrZWZpbGVfbW9kZShzZWxmKToKKyAgICAgICAgZm9yIG1vZGUgaW4gJ3InLCAncmInLCAncncnLCAndycsICd3Yic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2RlPW1vZGUpOgorICAgICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc29jay5tYWtlZmlsZShtb2RlKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAubW9kZSwgbW9kZSkKKworICAgIGRlZiB0ZXN0X21ha2VmaWxlX2ludmFsaWRfbW9kZShzZWxmKToKKyAgICAgICAgZm9yIG1vZGUgaW4gJ3J0JywgJ3gnLCAnKycsICdhJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG1vZGU9bW9kZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdpbnZhbGlkIG1vZGUnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2subWFrZWZpbGUobW9kZSkKKwogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICB3aXRoIHNvY2s6CkBAIC0xMzgyLDEwICsxNDAxLDEzIEBACiAKICAgICBkZWYgdGVzdF9saXN0ZW5fYmFja2xvZyhzZWxmKToKICAgICAgICAgZm9yIGJhY2tsb2cgaW4gMCwgLTE6Ci0gICAgICAgICAgICBzcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgc3J2OgorICAgICAgICAgICAgICAgIHNydi5iaW5kKChIT1NULCAwKSkKKyAgICAgICAgICAgICAgICBzcnYubGlzdGVuKGJhY2tsb2cpCisKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHNydjoKICAgICAgICAgICAgIHNydi5iaW5kKChIT1NULCAwKSkKLSAgICAgICAgICAgIHNydi5saXN0ZW4oYmFja2xvZykKLSAgICAgICAgICAgIHNydi5jbG9zZSgpCisgICAgICAgICAgICBzcnYubGlzdGVuKCkKIAogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2xpc3Rlbl9iYWNrbG9nX292ZXJmbG93KHNlbGYpOgpAQCAtMTQ5MSw2ICsxNTEzLDcgQEAKICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX0NBTl9SQVcsIHNvY2tldC5DQU5fUkFXX0ZJTFRFUiwgY2FuX2ZpbHRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FuX2ZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgcy5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfQ0FOX1JBVywgc29ja2V0LkNBTl9SQVdfRklMVEVSLCA4KSkKKyAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX0NBTl9SQVcsIHNvY2tldC5DQU5fUkFXX0ZJTFRFUiwgYnl0ZWFycmF5KGNhbl9maWx0ZXIpKQogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfU09DS0VUX0NBTiwgJ1NvY2tldENhbiByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCkBAIC0zNTkzLDcgKzM2MTYsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCiAgICAgICAgIG9yaWdfYWxybV9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBzaWdudW0sIGZyYW1lOiBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHNpZ251bSwgZnJhbWU6IDEgLyAwKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLnNpZ25hbCwgc2lnbmFsLlNJR0FMUk0sIG9yaWdfYWxybV9oYW5kbGVyKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5zZXRBbGFybSwgMCkKIApAQCAtMzYzMCwxMyArMzY1MywxMSBAQAogICAgICAgICBzZWxmLnNlcnYuc2V0dGltZW91dChzZWxmLnRpbWVvdXQpCiAKICAgICBkZWYgY2hlY2tJbnRlcnJ1cHRlZFJlY3Yoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgIyBDaGVjayB0aGF0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSByYWlzZXMgT1NFcnJvciB3aXRoIGFuCisgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzCiAgICAgICAgICMgZXJybm8gb2YgRUlOVFIgd2hlbiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KICAgICAgICAgc2VsZi5zZXRBbGFybShzZWxmLmFsYXJtX3RpbWUpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjbS5leGNlcHRpb24sIHNvY2tldC50aW1lb3V0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVFIpCiAKICAgICBkZWYgdGVzdEludGVycnVwdGVkUmVjdlRpbWVvdXQoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tJbnRlcnJ1cHRlZFJlY3Yoc2VsZi5zZXJ2LnJlY3YsIDEwMjQpCkBAIC0zNjkyLDEyICszNzEzLDEwIEBACiAgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncyksIHJ1biBpbiBhIGxvb3AsIHJhaXNlcwogICAgICAgICAjIE9TRXJyb3Igd2l0aCBhbiBlcnJubyBvZiBFSU5UUiB3aGVuIGludGVycnVwdGVkIGJ5IGEKICAgICAgICAgIyBzaWduYWwuCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBzZWxmLnNldEFsYXJtKHNlbGYuYWxhcm1fdGltZSkKICAgICAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbiwgc29ja2V0LnRpbWVvdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5UUikKIAogICAgICMgSXNzdWUgIzEyOTU4OiBUaGUgZm9sbG93aW5nIHRlc3RzIGhhdmUgcHJvYmxlbXMgb24gT1MgWCBwcmlvciB0byAxMC43CiAgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgNykKQEAgLTM3MzksOCArMzc1OCw2IEBACiAgICAgICAgIHNlbGYuY2xpLmNvbm5lY3QoKEhPU1QsIHNlbGYucG9ydCkpCiAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKSwKLSAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG5lZWRzIHNvY2tldC5zb2NrZXRwYWlyKCknKQogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljU29ja2V0UGFpclRlc3QoU29ja2V0UGFpclRlc3QpOgogCkBAIC0zODIxLDcgKzM4MzgsNyBAQAogICAgICAgICBzZWxmLnNlcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0gfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09DS19OT05CTE9DSykKICAgICAgICAgc2VsZi5wb3J0ID0gc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zZXJ2KQotICAgICAgICBzZWxmLnNlcnYubGlzdGVuKDEpCisgICAgICAgIHNlbGYuc2Vydi5saXN0ZW4oKQogICAgICAgICAjIGFjdHVhbCB0ZXN0aW5nCiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgpAQCAtNDA2OCwxMTcgKzQwODUsNiBAQAogICAgICAgICBwYXNzCiAKIAotY2xhc3MgRmlsZU9iamVjdEludGVycnVwdGVkVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICIiIlRlc3QgdGhhdCB0aGUgZmlsZSBvYmplY3QgY29ycmVjdGx5IGhhbmRsZXMgRUlOVFIgaW50ZXJuYWxseS4iIiIKLQotICAgIGNsYXNzIE1vY2tTb2NrZXQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3ZfZnVuY3M9KCkpOgotICAgICAgICAgICAgIyBBIGdlbmVyYXRvciB0aGF0IHJldHVybnMgY2FsbGFibGVzIHRoYXQgd2UnbGwgY2FsbCBmb3IgZWFjaAotICAgICAgICAgICAgIyBjYWxsIHRvIHJlY3YoKS4KLSAgICAgICAgICAgIHNlbGYuX3JlY3Zfc3RlcCA9IGl0ZXIocmVjdl9mdW5jcykKLQotICAgICAgICBkZWYgcmVjdl9pbnRvKHNlbGYsIGJ1ZmZlcik6Ci0gICAgICAgICAgICBkYXRhID0gbmV4dChzZWxmLl9yZWN2X3N0ZXApKCkKLSAgICAgICAgICAgIGFzc2VydCBsZW4oYnVmZmVyKSA+PSBsZW4oZGF0YSkKLSAgICAgICAgICAgIGJ1ZmZlcls6bGVuKGRhdGEpXSA9IGRhdGEKLSAgICAgICAgICAgIHJldHVybiBsZW4oZGF0YSkKLQotICAgICAgICBkZWYgX2RlY3JlZl9zb2NrZXRpb3Moc2VsZik6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIF90ZXh0aW93cmFwX2Zvcl90ZXN0KHNlbGYsIGJ1ZmZlcmluZz0tMSk6Ci0gICAgICAgICAgICByYXcgPSBzb2NrZXQuU29ja2V0SU8oc2VsZiwgInIiKQotICAgICAgICAgICAgaWYgYnVmZmVyaW5nIDwgMDoKLSAgICAgICAgICAgICAgICBidWZmZXJpbmcgPSBpby5ERUZBVUxUX0JVRkZFUl9TSVpFCi0gICAgICAgICAgICBpZiBidWZmZXJpbmcgPT0gMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gcmF3Ci0gICAgICAgICAgICBidWZmZXIgPSBpby5CdWZmZXJlZFJlYWRlcihyYXcsIGJ1ZmZlcmluZykKLSAgICAgICAgICAgIHRleHQgPSBpby5UZXh0SU9XcmFwcGVyKGJ1ZmZlciwgTm9uZSwgTm9uZSkKLSAgICAgICAgICAgIHRleHQubW9kZSA9ICJyYiIKLSAgICAgICAgICAgIHJldHVybiB0ZXh0Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9yYWlzZV9laW50cigpOgotICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQotCi0gICAgZGVmIF90ZXh0aW93cmFwX21vY2tfc29ja2V0KHNlbGYsIG1vY2ssIGJ1ZmZlcmluZz0tMSk6Ci0gICAgICAgIHJhdyA9IHNvY2tldC5Tb2NrZXRJTyhtb2NrLCAiciIpCi0gICAgICAgIGlmIGJ1ZmZlcmluZyA8IDA6Ci0gICAgICAgICAgICBidWZmZXJpbmcgPSBpby5ERUZBVUxUX0JVRkZFUl9TSVpFCi0gICAgICAgIGlmIGJ1ZmZlcmluZyA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHJhdwotICAgICAgICBidWZmZXIgPSBpby5CdWZmZXJlZFJlYWRlcihyYXcsIGJ1ZmZlcmluZykKLSAgICAgICAgdGV4dCA9IGlvLlRleHRJT1dyYXBwZXIoYnVmZmVyLCBOb25lLCBOb25lKQotICAgICAgICB0ZXh0Lm1vZGUgPSAicmIiCi0gICAgICAgIHJldHVybiB0ZXh0Ci0KLSAgICBkZWYgX3Rlc3RfcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSwgYnVmZmVyaW5nPS0xKToKLSAgICAgICAgbW9ja19zb2NrID0gc2VsZi5Nb2NrU29ja2V0KHJlY3ZfZnVuY3M9WwotICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIiVGhpcyBpcyB0aGUgZmlyc3QgbGluZVxuQW5kIHRoZSBzZWMiLAotICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlX2VpbnRyLAotICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIib25kIGxpbmUgaXMgaGVyZVxuIiwKLSAgICAgICAgICAgICAgICBsYW1iZGEgOiBiIiIsCi0gICAgICAgICAgICAgICAgbGFtYmRhIDogYiIiLCAgIyBYWFgoZ3BzKTogaW8gbGlicmFyeSBkb2VzIGFuIGV4dHJhIEVPRiByZWFkCi0gICAgICAgICAgICBdKQotICAgICAgICBmbyA9IG1vY2tfc29jay5fdGV4dGlvd3JhcF9mb3JfdGVzdChidWZmZXJpbmc9YnVmZmVyaW5nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZVxuIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkbGluZShzaXplKSwgIkFuZCB0aGUgc2Vjb25kIGxpbmUgaXMgaGVyZVxuIikKLQotICAgIGRlZiBfdGVzdF9yZWFkKHNlbGYsIHNpemU9LTEsIGJ1ZmZlcmluZz0tMSk6Ci0gICAgICAgIG1vY2tfc29jayA9IHNlbGYuTW9ja1NvY2tldChyZWN2X2Z1bmNzPVsKLSAgICAgICAgICAgICAgICBsYW1iZGEgOiBiIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbkFuZCB0aGUgc2VjIiwKLSAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9laW50ciwKLSAgICAgICAgICAgICAgICBsYW1iZGEgOiBiIm9uZCBsaW5lIGlzIGhlcmVcbiIsCi0gICAgICAgICAgICAgICAgbGFtYmRhIDogYiIiLAotICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIiIiwgICMgWFhYKGdwcyk6IGlvIGxpYnJhcnkgZG9lcyBhbiBleHRyYSBFT0YgcmVhZAotICAgICAgICAgICAgXSkKLSAgICAgICAgZXhwZWN0aW5nID0gKGIiVGhpcyBpcyB0aGUgZmlyc3QgbGluZVxuIgotICAgICAgICAgICAgICAgICAgICAgYiJBbmQgdGhlIHNlY29uZCBsaW5lIGlzIGhlcmVcbiIpCi0gICAgICAgIGZvID0gbW9ja19zb2NrLl90ZXh0aW93cmFwX2Zvcl90ZXN0KGJ1ZmZlcmluZz1idWZmZXJpbmcpCi0gICAgICAgIGlmIGJ1ZmZlcmluZyA9PSAwOgotICAgICAgICAgICAgZGF0YSA9IGInJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9ICcnCi0gICAgICAgICAgICBleHBlY3RpbmcgPSBleHBlY3RpbmcuZGVjb2RlKCd1dGYtOCcpCi0gICAgICAgIHdoaWxlIGxlbihkYXRhKSAhPSBsZW4oZXhwZWN0aW5nKToKLSAgICAgICAgICAgIHBhcnQgPSBmby5yZWFkKHNpemUpCi0gICAgICAgICAgICBpZiBub3QgcGFydDoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZGF0YSArPSBwYXJ0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0aW5nKQotCi0gICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZSgpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmUoc2l6ZT0xMDApCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVhZCgpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVhZChzaXplPTEwMCkKLQotICAgIGRlZiB0ZXN0X3dpdGhfMWtfYnVmZmVyKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lKGJ1ZmZlcmluZz0xMDI0KQotICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lKHNpemU9MTAwLCBidWZmZXJpbmc9MTAyNCkKLSAgICAgICAgc2VsZi5fdGVzdF9yZWFkKGJ1ZmZlcmluZz0xMDI0KQotICAgICAgICBzZWxmLl90ZXN0X3JlYWQoc2l6ZT0xMDAsIGJ1ZmZlcmluZz0xMDI0KQotCi0gICAgZGVmIF90ZXN0X3JlYWRsaW5lX25vX2J1ZmZlcihzZWxmLCBzaXplPS0xKToKLSAgICAgICAgbW9ja19zb2NrID0gc2VsZi5Nb2NrU29ja2V0KHJlY3ZfZnVuY3M9WwotICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIiYSIsCi0gICAgICAgICAgICAgICAgbGFtYmRhIDogYiJcbiIsCi0gICAgICAgICAgICAgICAgbGFtYmRhIDogYiJCIiwKLSAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9laW50ciwKLSAgICAgICAgICAgICAgICBsYW1iZGEgOiBiImIiLAotICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIiIiwKLSAgICAgICAgICAgIF0pCi0gICAgICAgIGZvID0gbW9ja19zb2NrLl90ZXh0aW93cmFwX2Zvcl90ZXN0KGJ1ZmZlcmluZz0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCBiImFcbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZGxpbmUoc2l6ZSksIGIiQmIiKQotCi0gICAgZGVmIHRlc3Rfbm9fYnVmZmVyKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lX25vX2J1ZmZlcigpCi0gICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmVfbm9fYnVmZmVyKHNpemU9NCkKLSAgICAgICAgc2VsZi5fdGVzdF9yZWFkKGJ1ZmZlcmluZz0wKQotICAgICAgICBzZWxmLl90ZXN0X3JlYWQoc2l6ZT0xMDAsIGJ1ZmZlcmluZz0wKQotCi0KIGNsYXNzIFVuYnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZShGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSk6CiAKICAgICAiIiJSZXBlYXQgdGhlIHRlc3RzIGZyb20gRmlsZU9iamVjdENsYXNzVGVzdENhc2Ugd2l0aCBidWZzaXplPT0wLgpAQCAtNDU5Nyw3ICs0NTAzLDcgQEAKICAgICAgICAgYWRkcmVzcyA9IGIiXHgwMHB5dGhvbi10ZXN0LWhlbGxvXHgwMFx4ZmYiCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzMToKICAgICAgICAgICAgIHMxLmJpbmQoYWRkcmVzcykKLSAgICAgICAgICAgIHMxLmxpc3RlbigxKQorICAgICAgICAgICAgczEubGlzdGVuKCkKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzMjoKICAgICAgICAgICAgICAgICBzMi5jb25uZWN0KHMxLmdldHNvY2tuYW1lKCkpCiAgICAgICAgICAgICAgICAgd2l0aCBzMS5hY2NlcHQoKVswXSBhcyBzMzoKQEAgLTQ2MjQsNiArNDUzMCwxMiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcy5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdEJ5dGVhcnJheU5hbWUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhbiBhYnN0cmFjdCBuYW1lIGNhbiBiZSBwYXNzZWQgYXMgYSBieXRlYXJyYXkuCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgorICAgICAgICAgICAgcy5iaW5kKGJ5dGVhcnJheShiIlx4MDBweXRob25ceDAwdGVzdFx4MDAiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXRzb2NrbmFtZSgpLCBiIlx4MDBweXRob25ceDAwdGVzdFx4MDAiKQorCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ3Rlc3QgbmVlZHMgc29ja2V0LkFGX1VOSVgnKQogY2xhc3MgVGVzdFVuaXhEb21haW4odW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC00ODI5LDEzICs0NzQxLDEzIEBACiAgICAgICAgIHNydmFkZHIgPSAoc29ja2V0LlRJUENfQUREUl9OQU1FU0VRLCBUSVBDX1NUWVBFLAogICAgICAgICAgICAgICAgIFRJUENfTE9XRVIsIFRJUENfVVBQRVIpCiAgICAgICAgIHNlbGYuc3J2LmJpbmQoc3J2YWRkcikKLSAgICAgICAgc2VsZi5zcnYubGlzdGVuKDUpCisgICAgICAgIHNlbGYuc3J2Lmxpc3RlbigpCiAgICAgICAgIHNlbGYuc2VydmVyRXhwbGljaXRSZWFkeSgpCiAgICAgICAgIHNlbGYuY29ubiwgc2VsZi5jb25uYWRkciA9IHNlbGYuc3J2LmFjY2VwdCgpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNvbm4uY2xvc2UpCiAKICAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6Ci0gICAgICAgICMgVGhlIGlzIGEgaGl0dGFibGUgcmFjZSBiZXR3ZWVuIHNlcnZlckV4cGxpY2l0UmVhZHkoKSBhbmQgdGhlCisgICAgICAgICMgVGhlcmUgaXMgYSBoaXR0YWJsZSByYWNlIGJldHdlZW4gc2VydmVyRXhwbGljaXRSZWFkeSgpIGFuZCB0aGUKICAgICAgICAgIyBhY2NlcHQoKSBjYWxsOyBzbGVlcCBhIGxpdHRsZSB3aGlsZSB0byBhdm9pZCBpdCwgb3RoZXJ3aXNlCiAgICAgICAgICMgd2UgY291bGQgZ2V0IGFuIGV4Y2VwdGlvbgogICAgICAgICB0aW1lLnNsZWVwKDAuMSkKQEAgLTUwNzYsNyArNDk4OCw3IEBACiAKICAgICBkZWYgY29tcGFyZVNvY2tldHMoc2VsZiwgb3JnLCBvdGhlcik6CiAgICAgICAgICMgc29ja2V0IHNoYXJpbmcgaXMgZXhwZWN0ZWQgdG8gd29yayBvbmx5IGZvciBibG9ja2luZyBzb2NrZXQKLSAgICAgICAgIyBzaW5jZSB0aGUgaW50ZXJuYWwgcHl0aG9uIHRpbW91dCB2YWx1ZSBpc24ndCB0cmFuc2ZlcmVkLgorICAgICAgICAjIHNpbmNlIHRoZSBpbnRlcm5hbCBweXRob24gdGltZW91dCB2YWx1ZSBpc24ndCB0cmFuc2ZlcnJlZC4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmcuZ2V0dGltZW91dCgpLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZy5nZXR0aW1lb3V0KCksIG90aGVyLmdldHRpbWVvdXQoKSkKIApAQCAtNTExOCw2ICs1MDMwLDI3NSBAQAogICAgICAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBTZW5kZmlsZVVzaW5nU2VuZFRlc3QoVGhyZWFkZWRUQ1BTb2NrZXRUZXN0KToKKyAgICAiIiIKKyAgICBUZXN0IHRoZSBzZW5kKCkgaW1wbGVtZW50YXRpb24gb2Ygc29ja2V0LnNlbmRmaWxlKCkuCisgICAgIiIiCisKKyAgICBGSUxFU0laRSA9ICgxMCAqIDEwMjQgKiAxMDI0KSAgIyAxME1CCisgICAgQlVGU0laRSA9IDgxOTIKKyAgICBGSUxFREFUQSA9IGIiIgorICAgIFRJTUVPVVQgPSAyCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBkZWYgY2h1bmtzKHRvdGFsLCBzdGVwKToKKyAgICAgICAgICAgIGFzc2VydCB0b3RhbCA+PSBzdGVwCisgICAgICAgICAgICB3aGlsZSB0b3RhbCA+IHN0ZXA6CisgICAgICAgICAgICAgICAgeWllbGQgc3RlcAorICAgICAgICAgICAgICAgIHRvdGFsIC09IHN0ZXAKKyAgICAgICAgICAgIGlmIHRvdGFsOgorICAgICAgICAgICAgICAgIHlpZWxkIHRvdGFsCisKKyAgICAgICAgY2h1bmsgPSBiIiIuam9pbihbcmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycykuZW5jb2RlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY2xzLkJVRlNJWkUpXSkKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGNzaXplIGluIGNodW5rcyhjbHMuRklMRVNJWkUsIGNscy5CVUZTSVpFKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKGNodW5rKQorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICBjbHMuRklMRURBVEEgPSBmLnJlYWQoKQorICAgICAgICAgICAgYXNzZXJ0IGxlbihjbHMuRklMRURBVEEpID09IGNscy5GSUxFU0laRQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgYWNjZXB0X2Nvbm4oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydi5zZXR0aW1lb3V0KHNlbGYuVElNRU9VVCkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBjb25uLnNldHRpbWVvdXQoc2VsZi5USU1FT1VUKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY29ubi5jbG9zZSkKKyAgICAgICAgcmV0dXJuIGNvbm4KKworICAgIGRlZiByZWN2X2RhdGEoc2VsZiwgY29ubik6CisgICAgICAgIHJlY2VpdmVkID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNodW5rID0gY29ubi5yZWN2KHNlbGYuQlVGU0laRSkKKyAgICAgICAgICAgIGlmIG5vdCBjaHVuazoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVjZWl2ZWQuYXBwZW5kKGNodW5rKQorICAgICAgICByZXR1cm4gYicnLmpvaW4ocmVjZWl2ZWQpCisKKyAgICBkZWYgbWV0aF9mcm9tX3NvY2soc2VsZiwgc29jayk6CisgICAgICAgICMgRGVwZW5kaW5nIG9uIHRoZSBtaXhpbiBjbGFzcyBiZWluZyBydW4gcmV0dXJuIGVpdGhlciBzZW5kKCkKKyAgICAgICAgIyBvciBzZW5kZmlsZSgpIG1ldGhvZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc29jaywgIl9zZW5kZmlsZV91c2Vfc2VuZCIpCisKKyAgICAjIHJlZ3VsYXIgZmlsZQorCisgICAgZGVmIF90ZXN0UmVndWxhckZpbGUoc2VsZik6CisgICAgICAgIGFkZHJlc3MgPSBzZWxmLnNlcnYuZ2V0c29ja25hbWUoKQorICAgICAgICBmaWxlID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykKKyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcykgYXMgc29jaywgZmlsZSBhcyBmaWxlOgorICAgICAgICAgICAgbWV0aCA9IHNlbGYubWV0aF9mcm9tX3NvY2soc29jaykKKyAgICAgICAgICAgIHNlbnQgPSBtZXRoKGZpbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbnQsIHNlbGYuRklMRVNJWkUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUudGVsbCgpLCBzZWxmLkZJTEVTSVpFKQorCisgICAgZGVmIHRlc3RSZWd1bGFyRmlsZShzZWxmKToKKyAgICAgICAgY29ubiA9IHNlbGYuYWNjZXB0X2Nvbm4oKQorICAgICAgICBkYXRhID0gc2VsZi5yZWN2X2RhdGEoY29ubikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGF0YSksIHNlbGYuRklMRVNJWkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5GSUxFREFUQSkKKworICAgICMgbm9uIHJlZ3VsYXIgZmlsZQorCisgICAgZGVmIF90ZXN0Tm9uUmVndWxhckZpbGUoc2VsZik6CisgICAgICAgIGFkZHJlc3MgPSBzZWxmLnNlcnYuZ2V0c29ja25hbWUoKQorICAgICAgICBmaWxlID0gaW8uQnl0ZXNJTyhzZWxmLkZJTEVEQVRBKQorICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzKSBhcyBzb2NrLCBmaWxlIGFzIGZpbGU6CisgICAgICAgICAgICBzZW50ID0gc29jay5zZW5kZmlsZShmaWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW50LCBzZWxmLkZJTEVTSVpFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlLnRlbGwoKSwgc2VsZi5GSUxFU0laRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5fR2l2ZXVwT25TZW5kZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suX3NlbmRmaWxlX3VzZV9zZW5kZmlsZSwgZmlsZSkKKworICAgIGRlZiB0ZXN0Tm9uUmVndWxhckZpbGUoc2VsZik6CisgICAgICAgIGNvbm4gPSBzZWxmLmFjY2VwdF9jb25uKCkKKyAgICAgICAgZGF0YSA9IHNlbGYucmVjdl9kYXRhKGNvbm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRhdGEpLCBzZWxmLkZJTEVTSVpFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNlbGYuRklMRURBVEEpCisKKyAgICAjIGVtcHR5IGZpbGUKKworICAgIGRlZiBfdGVzdEVtcHR5RmlsZVNlbmQoc2VsZik6CisgICAgICAgIGFkZHJlc3MgPSBzZWxmLnNlcnYuZ2V0c29ja25hbWUoKQorICAgICAgICBmaWxlbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJyk6CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZpbGVuYW1lKQorICAgICAgICBmaWxlID0gb3BlbihmaWxlbmFtZSwgJ3JiJykKKyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcykgYXMgc29jaywgZmlsZSBhcyBmaWxlOgorICAgICAgICAgICAgbWV0aCA9IHNlbGYubWV0aF9mcm9tX3NvY2soc29jaykKKyAgICAgICAgICAgIHNlbnQgPSBtZXRoKGZpbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbnQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUudGVsbCgpLCAwKQorCisgICAgZGVmIHRlc3RFbXB0eUZpbGVTZW5kKHNlbGYpOgorICAgICAgICBjb25uID0gc2VsZi5hY2NlcHRfY29ubigpCisgICAgICAgIGRhdGEgPSBzZWxmLnJlY3ZfZGF0YShjb25uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIiIikKKworICAgICMgb2Zmc2V0CisKKyAgICBkZWYgX3Rlc3RPZmZzZXQoc2VsZik6CisgICAgICAgIGFkZHJlc3MgPSBzZWxmLnNlcnYuZ2V0c29ja25hbWUoKQorICAgICAgICBmaWxlID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykKKyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcykgYXMgc29jaywgZmlsZSBhcyBmaWxlOgorICAgICAgICAgICAgbWV0aCA9IHNlbGYubWV0aF9mcm9tX3NvY2soc29jaykKKyAgICAgICAgICAgIHNlbnQgPSBtZXRoKGZpbGUsIG9mZnNldD01MDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW50LCBzZWxmLkZJTEVTSVpFIC0gNTAwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS50ZWxsKCksIHNlbGYuRklMRVNJWkUpCisKKyAgICBkZWYgdGVzdE9mZnNldChzZWxmKToKKyAgICAgICAgY29ubiA9IHNlbGYuYWNjZXB0X2Nvbm4oKQorICAgICAgICBkYXRhID0gc2VsZi5yZWN2X2RhdGEoY29ubikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGF0YSksIHNlbGYuRklMRVNJWkUgLSA1MDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNlbGYuRklMRURBVEFbNTAwMDpdKQorCisgICAgIyBjb3VudAorCisgICAgZGVmIF90ZXN0Q291bnQoc2VsZik6CisgICAgICAgIGFkZHJlc3MgPSBzZWxmLnNlcnYuZ2V0c29ja25hbWUoKQorICAgICAgICBmaWxlID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykKKyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcywgdGltZW91dD0yKSBhcyBzb2NrLCBmaWxlIGFzIGZpbGU6CisgICAgICAgICAgICBjb3VudCA9IDUwMDAwMDcKKyAgICAgICAgICAgIG1ldGggPSBzZWxmLm1ldGhfZnJvbV9zb2NrKHNvY2spCisgICAgICAgICAgICBzZW50ID0gbWV0aChmaWxlLCBjb3VudD1jb3VudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VudCwgY291bnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUudGVsbCgpLCBjb3VudCkKKworICAgIGRlZiB0ZXN0Q291bnQoc2VsZik6CisgICAgICAgIGNvdW50ID0gNTAwMDAwNworICAgICAgICBjb25uID0gc2VsZi5hY2NlcHRfY29ubigpCisgICAgICAgIGRhdGEgPSBzZWxmLnJlY3ZfZGF0YShjb25uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkYXRhKSwgY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5GSUxFREFUQVs6Y291bnRdKQorCisgICAgIyBjb3VudCBzbWFsbAorCisgICAgZGVmIF90ZXN0Q291bnRTbWFsbChzZWxmKToKKyAgICAgICAgYWRkcmVzcyA9IHNlbGYuc2Vydi5nZXRzb2NrbmFtZSgpCisgICAgICAgIGZpbGUgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKQorICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzLCB0aW1lb3V0PTIpIGFzIHNvY2ssIGZpbGUgYXMgZmlsZToKKyAgICAgICAgICAgIGNvdW50ID0gMQorICAgICAgICAgICAgbWV0aCA9IHNlbGYubWV0aF9mcm9tX3NvY2soc29jaykKKyAgICAgICAgICAgIHNlbnQgPSBtZXRoKGZpbGUsIGNvdW50PWNvdW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW50LCBjb3VudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS50ZWxsKCksIGNvdW50KQorCisgICAgZGVmIHRlc3RDb3VudFNtYWxsKHNlbGYpOgorICAgICAgICBjb3VudCA9IDEKKyAgICAgICAgY29ubiA9IHNlbGYuYWNjZXB0X2Nvbm4oKQorICAgICAgICBkYXRhID0gc2VsZi5yZWN2X2RhdGEoY29ubikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGF0YSksIGNvdW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNlbGYuRklMRURBVEFbOmNvdW50XSkKKworICAgICMgY291bnQgKyBvZmZzZXQKKworICAgIGRlZiBfdGVzdENvdW50V2l0aE9mZnNldChzZWxmKToKKyAgICAgICAgYWRkcmVzcyA9IHNlbGYuc2Vydi5nZXRzb2NrbmFtZSgpCisgICAgICAgIGZpbGUgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKQorICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzLCB0aW1lb3V0PTIpIGFzIHNvY2ssIGZpbGUgYXMgZmlsZToKKyAgICAgICAgICAgIGNvdW50ID0gMTAwMDA3CisgICAgICAgICAgICBtZXRoID0gc2VsZi5tZXRoX2Zyb21fc29jayhzb2NrKQorICAgICAgICAgICAgc2VudCA9IG1ldGgoZmlsZSwgb2Zmc2V0PTIwMDcsIGNvdW50PWNvdW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW50LCBjb3VudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS50ZWxsKCksIGNvdW50ICsgMjAwNykKKworICAgIGRlZiB0ZXN0Q291bnRXaXRoT2Zmc2V0KHNlbGYpOgorICAgICAgICBjb3VudCA9IDEwMDAwNworICAgICAgICBjb25uID0gc2VsZi5hY2NlcHRfY29ubigpCisgICAgICAgIGRhdGEgPSBzZWxmLnJlY3ZfZGF0YShjb25uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkYXRhKSwgY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5GSUxFREFUQVsyMDA3OmNvdW50KzIwMDddKQorCisgICAgIyBub24gYmxvY2tpbmcgc29ja2V0cyBhcmUgbm90IHN1cHBvc2VkIHRvIHdvcmsKKworICAgIGRlZiBfdGVzdE5vbkJsb2NraW5nKHNlbGYpOgorICAgICAgICBhZGRyZXNzID0gc2VsZi5zZXJ2LmdldHNvY2tuYW1lKCkKKyAgICAgICAgZmlsZSA9IG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpCisgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MpIGFzIHNvY2ssIGZpbGUgYXMgZmlsZToKKyAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICBtZXRoID0gc2VsZi5tZXRoX2Zyb21fc29jayhzb2NrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aCwgZmlsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNvY2suc2VuZGZpbGUsIGZpbGUpCisKKyAgICBkZWYgdGVzdE5vbkJsb2NraW5nKHNlbGYpOgorICAgICAgICBjb25uID0gc2VsZi5hY2NlcHRfY29ubigpCisgICAgICAgIGlmIGNvbm4ucmVjdig4MTkyKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnd2FzIG5vdCBzdXBwb3NlZCB0byByZWNlaXZlIGFueSBkYXRhJykKKworICAgICMgdGltZW91dCAobm9uLXRyaWdnZXJlZCkKKworICAgIGRlZiBfdGVzdFdpdGhUaW1lb3V0KHNlbGYpOgorICAgICAgICBhZGRyZXNzID0gc2VsZi5zZXJ2LmdldHNvY2tuYW1lKCkKKyAgICAgICAgZmlsZSA9IG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpCisgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MsIHRpbWVvdXQ9MikgYXMgc29jaywgZmlsZSBhcyBmaWxlOgorICAgICAgICAgICAgbWV0aCA9IHNlbGYubWV0aF9mcm9tX3NvY2soc29jaykKKyAgICAgICAgICAgIHNlbnQgPSBtZXRoKGZpbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbnQsIHNlbGYuRklMRVNJWkUpCisKKyAgICBkZWYgdGVzdFdpdGhUaW1lb3V0KHNlbGYpOgorICAgICAgICBjb25uID0gc2VsZi5hY2NlcHRfY29ubigpCisgICAgICAgIGRhdGEgPSBzZWxmLnJlY3ZfZGF0YShjb25uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkYXRhKSwgc2VsZi5GSUxFU0laRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzZWxmLkZJTEVEQVRBKQorCisgICAgIyB0aW1lb3V0ICh0cmlnZ2VyZWQpCisKKyAgICBkZWYgX3Rlc3RXaXRoVGltZW91dFRyaWdnZXJlZFNlbmQoc2VsZik6CisgICAgICAgIGFkZHJlc3MgPSBzZWxmLnNlcnYuZ2V0c29ja25hbWUoKQorICAgICAgICBmaWxlID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykKKyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcywgdGltZW91dD0wLjAxKSBhcyBzb2NrLCBcCisgICAgICAgICAgICAgICAgZmlsZSBhcyBmaWxlOgorICAgICAgICAgICAgbWV0aCA9IHNlbGYubWV0aF9mcm9tX3NvY2soc29jaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBtZXRoLCBmaWxlKQorCisgICAgZGVmIHRlc3RXaXRoVGltZW91dFRyaWdnZXJlZFNlbmQoc2VsZik6CisgICAgICAgIGNvbm4gPSBzZWxmLmFjY2VwdF9jb25uKCkKKyAgICAgICAgY29ubi5yZWN2KDg4MTkyKQorCisgICAgIyBlcnJvcnMKKworICAgIGRlZiBfdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfREdSQU0pIGFzIHM6CisgICAgICAgICAgICAgICAgbWV0aCA9IHNlbGYubWV0aF9mcm9tX3NvY2socykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgICAgICBWYWx1ZUVycm9yLCAiU09DS19TVFJFQU0iLCBtZXRoLCBmaWxlKQorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICdydCcpIGFzIGZpbGU6CisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzOgorICAgICAgICAgICAgICAgIG1ldGggPSBzZWxmLm1ldGhfZnJvbV9zb2NrKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwgImJpbmFyeSBtb2RlIiwgbWV0aCwgZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgczoKKyAgICAgICAgICAgICAgICBtZXRoID0gc2VsZi5tZXRoX2Zyb21fc29jayhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAicG9zaXRpdmUgaW50ZWdlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRoLCBmaWxlLCBjb3VudD0nMicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJwb3NpdGl2ZSBpbnRlZ2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGgsIGZpbGUsIGNvdW50PTAuMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJwb3NpdGl2ZSBpbnRlZ2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGgsIGZpbGUsIGNvdW50PTApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAicG9zaXRpdmUgaW50ZWdlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRoLCBmaWxlLCBjb3VudD0tMSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInNlbmRmaWxlIiksCisgICAgICAgICAgICAgICAgICAgICAnb3Muc2VuZGZpbGUoKSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBTZW5kZmlsZVVzaW5nU2VuZGZpbGVUZXN0KFNlbmRmaWxlVXNpbmdTZW5kVGVzdCk6CisgICAgIiIiCisgICAgVGVzdCB0aGUgc2VuZGZpbGUoKSBpbXBsZW1lbnRhdGlvbiBvZiBzb2NrZXQuc2VuZGZpbGUoKS4KKyAgICAiIiIKKyAgICBkZWYgbWV0aF9mcm9tX3NvY2soc2VsZiwgc29jayk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNvY2ssICJfc2VuZGZpbGVfdXNlX3NlbmRmaWxlIikKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdHMgPSBbR2VuZXJhbE1vZHVsZVRlc3RzLCBCYXNpY1RDUFRlc3QsIFRDUENsb3NlclRlc3QsIFRDUFRpbWVvdXRUZXN0LAogICAgICAgICAgICAgIFRlc3RFeGNlcHRpb25zLCBCdWZmZXJJT1Rlc3QsIEJhc2ljVENQVGVzdDIsIEJhc2ljVURQVGVzdCwgVURQVGltZW91dFRlc3QgXQpAQCAtNTEyNSw3ICs1MzA2LDYgQEAKICAgICB0ZXN0cy5leHRlbmQoWwogICAgICAgICBOb25CbG9ja2luZ1RDUFRlc3RzLAogICAgICAgICBGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSwKLSAgICAgICAgRmlsZU9iamVjdEludGVycnVwdGVkVGVzdENhc2UsCiAgICAgICAgIFVuYnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSwKICAgICAgICAgTGluZUJ1ZmZlcmVkRmlsZU9iamVjdENsYXNzVGVzdENhc2UsCiAgICAgICAgIFNtYWxsQnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSwKQEAgLTUxNzAsNiArNTM1MCw4IEBACiAgICAgICAgIEludGVycnVwdGVkUmVjdlRpbWVvdXRUZXN0LAogICAgICAgICBJbnRlcnJ1cHRlZFNlbmRUaW1lb3V0VGVzdCwKICAgICAgICAgVGVzdFNvY2tldFNoYXJpbmcsCisgICAgICAgIFNlbmRmaWxlVXNpbmdTZW5kVGVzdCwKKyAgICAgICAgU2VuZGZpbGVVc2luZ1NlbmRmaWxlVGVzdCwKICAgICBdKQogCiAgICAgdGhyZWFkX2luZm8gPSBzdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CmluZGV4IDMyNWQ0ODUuLjBkMGY4NmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CkBAIC0xNjAsNiArMTYwLDggQEAKIAogICAgIGRlZiBkZ3JhbV9leGFtaW5lKHNlbGYsIHByb3RvLCBhZGRyKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQocHJvdG8sIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBpZiBIQVZFX1VOSVhfU09DS0VUUyBhbmQgcHJvdG8gPT0gc29ja2V0LkFGX1VOSVg6CisgICAgICAgICAgICBzLmJpbmQoc2VsZi5waWNrYWRkcihwcm90bykpCiAgICAgICAgIHMuc2VuZHRvKFRFU1RfU1RSLCBhZGRyKQogICAgICAgICBidWYgPSBkYXRhID0gcmVjZWl2ZShzLCAxMDApCiAgICAgICAgIHdoaWxlIGRhdGEgYW5kIGInXG4nIG5vdCBpbiBidWY6CkBAIC0yMjIsNTkgKzIyNCwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldHNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKIAotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIG1vY2tlZF9zZWxlY3RfbW9kdWxlKHNlbGYpOgotICAgICAgICAiIiJNb2NrcyB0aGUgc2VsZWN0LnNlbGVjdCgpIGNhbGwgdG8gcmFpc2UgRUlOVFIgZm9yIGZpcnN0IGNhbGwiIiIKLSAgICAgICAgb2xkX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKKyAgICBAcmVxdWlyZXNfdW5peF9zb2NrZXRzCisgICAgZGVmIHRlc3RfVW5peERhdGFncmFtU2VydmVyKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl9zZXJ2ZXIoc29ja2V0c2VydmVyLlVuaXhEYXRhZ3JhbVNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldHNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZ3JhbV9leGFtaW5lKQogCi0gICAgICAgIGNsYXNzIE1vY2tTZWxlY3Q6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSAwCisgICAgQHJlcXVpcmVzX3VuaXhfc29ja2V0cworICAgIGRlZiB0ZXN0X1RocmVhZGluZ1VuaXhEYXRhZ3JhbVNlcnZlcihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fc2VydmVyKHNvY2tldHNlcnZlci5UaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRzZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKIAotICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgICAgICAgICBzZWxmLmNhbGxlZCArPSAxCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5jYWxsZWQgPT0gMToKLSAgICAgICAgICAgICAgICAgICAgIyByYWlzZSB0aGUgZXhjZXB0aW9uIG9uIGZpcnN0IGNhbGwKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5UUiwgb3Muc3RyZXJyb3IoZXJybm8uRUlOVFIpKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgUmV0dXJuIHJlYWwgc2VsZWN0IHZhbHVlIGZvciBjb25zZWN1dGl2ZSBjYWxscwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkX3NlbGVjdCgqYXJncykKLQotICAgICAgICBzZWxlY3Quc2VsZWN0ID0gTW9ja1NlbGVjdCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHlpZWxkIHNlbGVjdC5zZWxlY3QKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QgPSBvbGRfc2VsZWN0Ci0KLSAgICBkZWYgdGVzdF9JbnRlcnJ1cHRTZXJ2ZXJTZWxlY3RDYWxsKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYubW9ja2VkX3NlbGVjdF9tb2R1bGUoKSBhcyBtb2NrX3NlbGVjdDoKLSAgICAgICAgICAgIHBpZCA9IHNlbGYucnVuX3NlcnZlcihzb2NrZXRzZXJ2ZXIuVENQU2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldHNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9leGFtaW5lKQotICAgICAgICAgICAgIyBNYWtlIHN1cmUgc2VsZWN0IHdhcyBjYWxsZWQgYWdhaW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobW9ja19zZWxlY3QuY2FsbGVkLCAxKQotCi0gICAgIyBBbGFzLCBvbiBMaW51eCAoYXQgbGVhc3QpIHJlY3Zmcm9tKCkgZG9lc24ndCByZXR1cm4gYSBtZWFuaW5nZnVsCi0gICAgIyBjbGllbnQgYWRkcmVzcyBzbyB0aGlzIGNhbm5vdCB3b3JrOgotCi0gICAgIyBAcmVxdWlyZXNfdW5peF9zb2NrZXRzCi0gICAgIyBkZWYgdGVzdF9Vbml4RGF0YWdyYW1TZXJ2ZXIoc2VsZik6Ci0gICAgIyAgICAgc2VsZi5ydW5fc2VydmVyKHNvY2tldHNlcnZlci5Vbml4RGF0YWdyYW1TZXJ2ZXIsCi0gICAgIyAgICAgICAgICAgICAgICAgICAgIHNvY2tldHNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAotICAgICMgICAgICAgICAgICAgICAgICAgICBzZWxmLmRncmFtX2V4YW1pbmUpCi0gICAgIwotICAgICMgQHJlcXVpcmVzX3VuaXhfc29ja2V0cwotICAgICMgZGVmIHRlc3RfVGhyZWFkaW5nVW5peERhdGFncmFtU2VydmVyKHNlbGYpOgotICAgICMgICAgIHNlbGYucnVuX3NlcnZlcihzb2NrZXRzZXJ2ZXIuVGhyZWFkaW5nVW5peERhdGFncmFtU2VydmVyLAotICAgICMgICAgICAgICAgICAgICAgICAgICBzb2NrZXRzZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKLSAgICAjICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZ3JhbV9leGFtaW5lKQotICAgICMKLSAgICAjIEByZXF1aXJlc191bml4X3NvY2tldHMKLSAgICAjIEByZXF1aXJlc19mb3JraW5nCi0gICAgIyBkZWYgdGVzdF9Gb3JraW5nVW5peERhdGFncmFtU2VydmVyKHNlbGYpOgotICAgICMgICAgIHNlbGYucnVuX3NlcnZlcihzb2NrZXRzZXJ2ZXIuRm9ya2luZ1VuaXhEYXRhZ3JhbVNlcnZlciwKLSAgICAjICAgICAgICAgICAgICAgICAgICAgc29ja2V0c2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXIsCi0gICAgIyAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKKyAgICBAcmVxdWlyZXNfdW5peF9zb2NrZXRzCisgICAgQHJlcXVpcmVzX2ZvcmtpbmcKKyAgICBkZWYgdGVzdF9Gb3JraW5nVW5peERhdGFncmFtU2VydmVyKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl9zZXJ2ZXIoRm9ya2luZ1VuaXhEYXRhZ3JhbVNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldHNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZ3JhbV9leGFtaW5lKQogCiAgICAgQHJlYXBfdGhyZWFkcwogICAgIGRlZiB0ZXN0X3NodXRkb3duKHNlbGYpOgpAQCAtMzI1LDYgKzI5MiwyNyBAQAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5hcHBlbmQobmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKHNvY2tldHNlcnZlci5fX2FsbF9fLCBleHBlY3RlZCkKIAorICAgIGRlZiB0ZXN0X3NodXRkb3duX3JlcXVlc3RfY2FsbGVkX2lmX3ZlcmlmeV9yZXF1ZXN0X2ZhbHNlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNjMwOTogQmFzZVNlcnZlciBzaG91bGQgY2FsbCBzaHV0ZG93bl9yZXF1ZXN0IGV2ZW4gaWYKKyAgICAgICAgIyB2ZXJpZnlfcmVxdWVzdCBpcyBGYWxzZQorCisgICAgICAgIGNsYXNzIE15U2VydmVyKHNvY2tldHNlcnZlci5UQ1BTZXJ2ZXIpOgorICAgICAgICAgICAgZGVmIHZlcmlmeV9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgc2h1dGRvd25fY2FsbGVkID0gMAorICAgICAgICAgICAgZGVmIHNodXRkb3duX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5zaHV0ZG93bl9jYWxsZWQgKz0gMQorICAgICAgICAgICAgICAgIHNvY2tldHNlcnZlci5UQ1BTZXJ2ZXIuc2h1dGRvd25fcmVxdWVzdChzZWxmLCByZXF1ZXN0KQorCisgICAgICAgIHNlcnZlciA9IE15U2VydmVyKChIT1NULCAwKSwgc29ja2V0c2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyKQorICAgICAgICBzID0gc29ja2V0LnNvY2tldChzZXJ2ZXIuYWRkcmVzc19mYW1pbHksIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgcy5jb25uZWN0KHNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKKyAgICAgICAgcy5jbG9zZSgpCisgICAgICAgIHNlcnZlci5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyLnNodXRkb3duX2NhbGxlZCwgMSkKKyAgICAgICAgc2VydmVyLnNlcnZlcl9jbG9zZSgpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc29ydC5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ydC5weQppbmRleCA4ZjZhZjY0Li5hNWQwZWJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zb3J0LnB5CkBAIC0yNjIsMjQgKzI2Miw1IEBACiAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHRlc3RfY2xhc3NlcyA9ICgKLSAgICAgICAgVGVzdEJhc2UsCi0gICAgICAgIFRlc3REZWNvcmF0ZVNvcnRVbmRlY29yYXRlLAotICAgICAgICBUZXN0QnVncywKLSAgICApCi0KLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotCi0gICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6Ci0gICAgICAgIGltcG9ydCBnYwotICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKLSAgICAgICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCi0gICAgICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcHJpbnQoY291bnRzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CmluZGV4IDM5YTdjNTYuLjM4NzM0MDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CkBAIC0xLDEzICsxLDE0IEBACiAjIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0KIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssIHVubG9hZCwgcm10cmVlCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssIHVubG9hZCwgcm10cmVlLCBzY3JpcHRfaGVscGVyLCBjYXB0dXJlZF9zdGRvdXQKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQogCi1jbGFzcyBTb3VyY2VFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgTWlzY1NvdXJjZUVuY29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCkBAIC0xNDIsNSArMTQzLDgzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9Yy5leGNlcHRpb24uYXJnc1swXSkKIAogCitjbGFzcyBBYnN0cmFjdFNvdXJjZUVuY29kaW5nVGVzdDoKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29kaW5nKHNlbGYpOgorICAgICAgICBzcmMgPSAoYidwcmludChhc2NpaSgiXHhjM1x4YTQiKSlcbicpCisgICAgICAgIHNlbGYuY2hlY2tfc2NyaXB0X291dHB1dChzcmMsIGJyIidceGU0JyIpCisKKyAgICBkZWYgdGVzdF9maXJzdF9jb2RpbmdfbGluZShzZWxmKToKKyAgICAgICAgc3JjID0gKGInI2NvZGluZzppc284ODU5LTE1XG4nCisgICAgICAgICAgICAgICBiJ3ByaW50KGFzY2lpKCJceGMzXHhhNCIpKVxuJykKKyAgICAgICAgc2VsZi5jaGVja19zY3JpcHRfb3V0cHV0KHNyYywgYnIiJ1x4YzNcdTIwYWMnIikKKworICAgIGRlZiB0ZXN0X3NlY29uZF9jb2RpbmdfbGluZShzZWxmKToKKyAgICAgICAgc3JjID0gKGInI1xuJworICAgICAgICAgICAgICAgYicjY29kaW5nOmlzbzg4NTktMTVcbicKKyAgICAgICAgICAgICAgIGIncHJpbnQoYXNjaWkoIlx4YzNceGE0IikpXG4nKQorICAgICAgICBzZWxmLmNoZWNrX3NjcmlwdF9vdXRwdXQoc3JjLCBiciInXHhjM1x1MjBhYyciKQorCisgICAgZGVmIHRlc3RfdGhpcmRfY29kaW5nX2xpbmUoc2VsZik6CisgICAgICAgICMgT25seSBmaXJzdCB0d28gbGluZXMgYXJlIHRlc3RlZCBmb3IgYSBtYWdpYyBjb21tZW50LgorICAgICAgICBzcmMgPSAoYicjXG4nCisgICAgICAgICAgICAgICBiJyNcbicKKyAgICAgICAgICAgICAgIGInI2NvZGluZzppc284ODU5LTE1XG4nCisgICAgICAgICAgICAgICBiJ3ByaW50KGFzY2lpKCJceGMzXHhhNCIpKVxuJykKKyAgICAgICAgc2VsZi5jaGVja19zY3JpcHRfb3V0cHV0KHNyYywgYnIiJ1x4ZTQnIikKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9jb2RpbmdfbGluZShzZWxmKToKKyAgICAgICAgIyBJZiB0aGUgZmlyc3QgbGluZSBtYXRjaGVzIHRoZSBzZWNvbmQgbGluZSBpcyBpZ25vcmVkLgorICAgICAgICBzcmMgPSAoYicjY29kaW5nOmlzbzg4NTktMTVcbicKKyAgICAgICAgICAgICAgIGInI2NvZGluZzpsYXRpbjFcbicKKyAgICAgICAgICAgICAgIGIncHJpbnQoYXNjaWkoIlx4YzNceGE0IikpXG4nKQorICAgICAgICBzZWxmLmNoZWNrX3NjcmlwdF9vdXRwdXQoc3JjLCBiciInXHhjM1x1MjBhYyciKQorCisgICAgZGVmIHRlc3RfZG91YmxlX2NvZGluZ19zYW1lX2xpbmUoc2VsZik6CisgICAgICAgIHNyYyA9IChiJyNjb2Rpbmc6aXNvODg1OS0xNSBjb2Rpbmc6bGF0aW4xXG4nCisgICAgICAgICAgICAgICBiJ3ByaW50KGFzY2lpKCJceGMzXHhhNCIpKVxuJykKKyAgICAgICAgc2VsZi5jaGVja19zY3JpcHRfb3V0cHV0KHNyYywgYnIiJ1x4YzNcdTIwYWMnIikKKworICAgIGRlZiB0ZXN0X2ZpcnN0X25vbl91dGY4X2NvZGluZ19saW5lKHNlbGYpOgorICAgICAgICBzcmMgPSAoYicjY29kaW5nOmlzby04ODU5LTE1IFx4YTRcbicKKyAgICAgICAgICAgICAgIGIncHJpbnQoYXNjaWkoIlx4YzNceGE0IikpXG4nKQorICAgICAgICBzZWxmLmNoZWNrX3NjcmlwdF9vdXRwdXQoc3JjLCBiciInXHhjM1x1MjBhYyciKQorCisgICAgZGVmIHRlc3Rfc2Vjb25kX25vbl91dGY4X2NvZGluZ19saW5lKHNlbGYpOgorICAgICAgICBzcmMgPSAoYidcbicKKyAgICAgICAgICAgICAgIGInI2NvZGluZzppc28tODg1OS0xNSBceGE0XG4nCisgICAgICAgICAgICAgICBiJ3ByaW50KGFzY2lpKCJceGMzXHhhNCIpKVxuJykKKyAgICAgICAgc2VsZi5jaGVja19zY3JpcHRfb3V0cHV0KHNyYywgYnIiJ1x4YzNcdTIwYWMnIikKKworICAgIGRlZiB0ZXN0X3V0ZjhfYm9tKHNlbGYpOgorICAgICAgICBzcmMgPSAoYidceGVmXHhiYlx4YmZwcmludChhc2NpaSgiXHhjM1x4YTQiKSlcbicpCisgICAgICAgIHNlbGYuY2hlY2tfc2NyaXB0X291dHB1dChzcmMsIGJyIidceGU0JyIpCisKKyAgICBkZWYgdGVzdF91dGY4X2JvbV9hbmRfdXRmOF9jb2RpbmdfbGluZShzZWxmKToKKyAgICAgICAgc3JjID0gKGInXHhlZlx4YmJceGJmI2NvZGluZzp1dGYtOFxuJworICAgICAgICAgICAgICAgYidwcmludChhc2NpaSgiXHhjM1x4YTQiKSlcbicpCisgICAgICAgIHNlbGYuY2hlY2tfc2NyaXB0X291dHB1dChzcmMsIGJyIidceGU0JyIpCisKKworY2xhc3MgQnl0ZXNTb3VyY2VFbmNvZGluZ1Rlc3QoQWJzdHJhY3RTb3VyY2VFbmNvZGluZ1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja19zY3JpcHRfb3V0cHV0KHNlbGYsIHNyYywgZXhwZWN0ZWQpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIGV4ZWMoc3JjKQorICAgICAgICBvdXQgPSBzdGRvdXQuZ2V0dmFsdWUoKS5lbmNvZGUoJ2xhdGluMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnJzdHJpcCgpLCBleHBlY3RlZCkKKworCitjbGFzcyBGaWxlU291cmNlRW5jb2RpbmdUZXN0KEFic3RyYWN0U291cmNlRW5jb2RpbmdUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfc2NyaXB0X291dHB1dChzZWxmLCBzcmMsIGV4cGVjdGVkKToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZCwgJ3Rlc3QucHknKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShzcmMpCisgICAgICAgICAgICByZXMgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLm91dC5yc3RyaXAoKSwgZXhwZWN0ZWQpCisKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5IGIvTGliL3Rlc3QvdGVzdF9zc2wucHkKaW5kZXggMTllZjM1NC4uZjQ4MTAzZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zc2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zc2wucHkKQEAgLTYwLDcgKzYwLDcgQEAKIAogRU1QVFlDRVJUID0gZGF0YV9maWxlKCJudWxsY2VydC5wZW0iKQogQkFEQ0VSVCA9IGRhdGFfZmlsZSgiYmFkY2VydC5wZW0iKQotV1JPTkdDRVJUID0gZGF0YV9maWxlKCJYWFhub25leGlzdGluZy5wZW0iKQorTk9ORVhJU1RJTkdDRVJUID0gZGF0YV9maWxlKCJYWFhub25leGlzdGluZy5wZW0iKQogQkFES0VZID0gZGF0YV9maWxlKCJiYWRrZXkucGVtIikKIE5PS0lBQ0VSVCA9IGRhdGFfZmlsZSgibm9raWEucGVtIikKIE5VTExCWVRFQ0VSVCA9IGRhdGFfZmlsZSgibnVsbGJ5dGVjZXJ0LnBlbSIpCkBAIC04Niw2ICs4NiwxMiBAQAogICAgICMgMC45Ljggb3IgaGlnaGVyCiAgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgOCwgMCwgMTUpCiAKK2RlZiB1dGNfb2Zmc2V0KCk6ICNOT1RFOiBpZ25vcmUgaXNzdWVzIGxpa2UgIzE2NDc2NTQKKyAgICAjIGxvY2FsIHRpbWUgPSB1dGMgdGltZSArIHV0YyBvZmZzZXQKKyAgICBpZiB0aW1lLmRheWxpZ2h0IGFuZCB0aW1lLmxvY2FsdGltZSgpLnRtX2lzZHN0ID4gMDoKKyAgICAgICAgcmV0dXJuIC10aW1lLmFsdHpvbmUgICMgc2Vjb25kcworICAgIHJldHVybiAtdGltZS50aW1lem9uZQorCiBkZWYgYXNuMXRpbWUoY2VydF90aW1lKToKICAgICAjIFNvbWUgdmVyc2lvbnMgb2YgT3BlblNTTCBpZ25vcmUgc2Vjb25kcywgc2VlICMxODIwNwogICAgICMgMC45LjguaQpAQCAtMTM0LDYgKzE0MCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEluKHNzbC5IQVNfU05JLCB7VHJ1ZSwgRmFsc2V9KQogICAgICAgICBzZWxmLmFzc2VydEluKHNzbC5IQVNfRUNESCwge1RydWUsIEZhbHNlfSkKIAorICAgIGRlZiB0ZXN0X3N0cl9mb3JfZW51bXMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIFBST1RPQ09MXyogY29uc3RhbnRzIGhhdmUgZW51bS1saWtlIHN0cmluZworICAgICAgICAjIHJlcHJzLgorICAgICAgICBwcm90byA9IHNzbC5QUk9UT0NPTF9TU0x2MjMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocHJvdG8pLCAnX1NTTE1ldGhvZC5QUk9UT0NPTF9TU0x2MjMnKQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChwcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjdHgucHJvdG9jb2wsIHByb3RvKQorCiAgICAgZGVmIHRlc3RfcmFuZG9tKHNlbGYpOgogICAgICAgICB2ID0gc3NsLlJBTkRfc3RhdHVzKCkKICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgpAQCAtMTU4LDYgKzE3Miw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5SQU5EX2VnZCwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLlJBTkRfZWdkLCAnZm9vJywgMSkKICAgICAgICAgc3NsLlJBTkRfYWRkKCJ0aGlzIGlzIGEgcmFuZG9tIHN0cmluZyIsIDc1LjApCisgICAgICAgIHNzbC5SQU5EX2FkZChiInRoaXMgaXMgYSByYW5kb20gYnl0ZXMgb2JqZWN0IiwgNzUuMCkKKyAgICAgICAgc3NsLlJBTkRfYWRkKGJ5dGVhcnJheShiInRoaXMgaXMgYSByYW5kb20gYnl0ZWFycmF5IG9iamVjdCIpLCA3NS4wKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgcG9zaXgnKQogICAgIGRlZiB0ZXN0X3JhbmRvbV9mb3JrKHNlbGYpOgpAQCAtMjk4LDEwICszMTQsMTAgQEAKICAgICAgICAgIyBWZXJzaW9uIHN0cmluZyBhcyByZXR1cm5lZCBieSB7T3BlbixMaWJyZX1TU0wsIHRoZSBmb3JtYXQgbWlnaHQgY2hhbmdlCiAgICAgICAgIGlmICJMaWJyZVNTTCIgaW4gczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkxpYnJlU1NMIHs6ZH0uezpkfSIuZm9ybWF0KG1ham9yLCBtaW5vcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLCB0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocywgdCwgaGV4KG4pKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIk9wZW5TU0wgezpkfS57OmR9Lns6ZH0iLmZvcm1hdChtYWpvciwgbWlub3IsIGZpeCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLCB0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocywgdCwgaGV4KG4pKSkKIAogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X3JlZmN5Y2xlKHNlbGYpOgpAQCAtMzUxLDE3ICszNjcsNDIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCwgKEhPU1QsIDgwODApKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKLSAgICAgICAgICAgICAgICBzc2wud3JhcF9zb2NrZXQoc29jaywgY2VydGZpbGU9V1JPTkdDRVJUKQorICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1OT05FWElTVElOR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgotICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1DRVJURklMRSwga2V5ZmlsZT1XUk9OR0NFUlQpCisgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBrZXlmaWxlPU5PTkVYSVNUSU5HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6Ci0gICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCwga2V5ZmlsZT1XUk9OR0NFUlQpCisgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPU5PTkVYSVNUSU5HQ0VSVCwga2V5ZmlsZT1OT05FWElTVElOR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAKKyAgICBkZWYgYmFkX2NlcnRfdGVzdChzZWxmLCBjZXJ0ZmlsZSk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgdHJ5aW5nIHRvIHVzZSB0aGUgZ2l2ZW4gY2xpZW50IGNlcnRpZmljYXRlIGZhaWxzIiIiCisgICAgICAgIGNlcnRmaWxlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZSkKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpOgorICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxKQorCisgICAgZGVmIHRlc3RfZW1wdHlfY2VydChzZWxmKToKKyAgICAgICAgIiIiV3JhcHBpbmcgd2l0aCBhbiBlbXB0eSBjZXJ0IGZpbGUiIiIKKyAgICAgICAgc2VsZi5iYWRfY2VydF90ZXN0KCJudWxsY2VydC5wZW0iKQorCisgICAgZGVmIHRlc3RfbWFsZm9ybWVkX2NlcnQoc2VsZik6CisgICAgICAgICIiIldyYXBwaW5nIHdpdGggYSBiYWRseSBmb3JtYXR0ZWQgY2VydGlmaWNhdGUgKHN5bnRheCBlcnJvcikiIiIKKyAgICAgICAgc2VsZi5iYWRfY2VydF90ZXN0KCJiYWRjZXJ0LnBlbSIpCisKKyAgICBkZWYgdGVzdF9tYWxmb3JtZWRfa2V5KHNlbGYpOgorICAgICAgICAiIiJXcmFwcGluZyB3aXRoIGEgYmFkbHkgZm9ybWF0dGVkIGtleSAoc3ludGF4IGVycm9yKSIiIgorICAgICAgICBzZWxmLmJhZF9jZXJ0X3Rlc3QoImJhZGtleS5wZW0iKQorCiAgICAgZGVmIHRlc3RfbWF0Y2hfaG9zdG5hbWUoc2VsZik6CiAgICAgICAgIGRlZiBvayhjZXJ0LCBob3N0bmFtZSk6CiAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUoY2VydCwgaG9zdG5hbWUpCkBAIC0zNjksNiArNDEwLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lLCBjZXJ0LCBob3N0bmFtZSkKIAorICAgICAgICAjIC0tIEhvc3RuYW1lIG1hdGNoaW5nIC0tCisKICAgICAgICAgY2VydCA9IHsnc3ViamVjdCc6ICgoKCdjb21tb25OYW1lJywgJ2V4YW1wbGUuY29tJyksKSwpfQogICAgICAgICBvayhjZXJ0LCAnZXhhbXBsZS5jb20nKQogICAgICAgICBvayhjZXJ0LCAnRXhBbXBsZS5jT20nKQpAQCAtNDU0LDYgKzQ5NywyOCBAQAogICAgICAgICAjIE9ubHkgY29tbW9uTmFtZSBpcyBjb25zaWRlcmVkCiAgICAgICAgIGZhaWwoY2VydCwgJ0NhbGlmb3JuaWEnKQogCisgICAgICAgICMgLS0gSVB2NCBtYXRjaGluZyAtLQorICAgICAgICBjZXJ0ID0geydzdWJqZWN0JzogKCgoJ2NvbW1vbk5hbWUnLCAnZXhhbXBsZS5jb20nKSwpLCksCisgICAgICAgICAgICAgICAgJ3N1YmplY3RBbHROYW1lJzogKCgnRE5TJywgJ2V4YW1wbGUuY29tJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSVAgQWRkcmVzcycsICcxMC4xMS4xMi4xMycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0lQIEFkZHJlc3MnLCAnMTQuMTUuMTYuMTcnKSl9CisgICAgICAgIG9rKGNlcnQsICcxMC4xMS4xMi4xMycpCisgICAgICAgIG9rKGNlcnQsICcxNC4xNS4xNi4xNycpCisgICAgICAgIGZhaWwoY2VydCwgJzE0LjE1LjE2LjE4JykKKyAgICAgICAgZmFpbChjZXJ0LCAnZXhhbXBsZS5uZXQnKQorCisgICAgICAgICMgLS0gSVB2NiBtYXRjaGluZyAtLQorICAgICAgICBjZXJ0ID0geydzdWJqZWN0JzogKCgoJ2NvbW1vbk5hbWUnLCAnZXhhbXBsZS5jb20nKSwpLCksCisgICAgICAgICAgICAgICAgJ3N1YmplY3RBbHROYW1lJzogKCgnRE5TJywgJ2V4YW1wbGUuY29tJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSVAgQWRkcmVzcycsICcyMDAxOjA6MDowOjA6MDowOkNBRkVcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0lQIEFkZHJlc3MnLCAnMjAwMzowOjA6MDowOjA6MDpCQUJBXG4nKSl9CisgICAgICAgIG9rKGNlcnQsICcyMDAxOjpjYWZlJykKKyAgICAgICAgb2soY2VydCwgJzIwMDM6OmJhYmEnKQorICAgICAgICBmYWlsKGNlcnQsICcyMDAzOjpiZWJlJykKKyAgICAgICAgZmFpbChjZXJ0LCAnZXhhbXBsZS5uZXQnKQorCisgICAgICAgICMgLS0gTWlzY2VsbGFuZW91cyAtLQorCiAgICAgICAgICMgTmVpdGhlciBjb21tb25OYW1lIG5vciBzdWJqZWN0QWx0TmFtZQogICAgICAgICBjZXJ0ID0geydub3RBZnRlcic6ICdEZWMgMTggMjM6NTk6NTkgMjAxMSBHTVQnLAogICAgICAgICAgICAgICAgICdzdWJqZWN0JzogKCgoJ2NvdW50cnlOYW1lJywgJ1VTJyksKSwKQEAgLTUwNSw5ICs1NzAsMTQgQEAKICAgICBkZWYgdGVzdF91bmtub3duX2NoYW5uZWxfYmluZGluZyhzZWxmKToKICAgICAgICAgIyBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBmb3IgdW5rbm93biB0eXBlCiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQotICAgICAgICB3aXRoIHNzbC53cmFwX3NvY2tldChzKSBhcyBzczoKKyAgICAgICAgcy5iaW5kKCgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHMubGlzdGVuKCkKKyAgICAgICAgYyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgIGMuY29ubmVjdChzLmdldHNvY2tuYW1lKCkpCisgICAgICAgIHdpdGggc3NsLndyYXBfc29ja2V0KGMsIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlKSBhcyBzczoKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgc3MuZ2V0X2NoYW5uZWxfYmluZGluZygidW5rbm93bi10eXBlIikKKyAgICAgICAgcy5jbG9zZSgpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcygidGxzLXVuaXF1ZSIgaW4gc3NsLkNIQU5ORUxfQklORElOR19UWVBFUywKICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rscy11bmlxdWUnIGNoYW5uZWwgYmluZGluZyBub3QgYXZhaWxhYmxlIikKQEAgLTY0OCw2ICs3MTgsNzEgQEAKICAgICAgICAgICAgIGN0eC53cmFwX3NvY2tldChzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjeC5leGNlcHRpb24pLCAib25seSBzdHJlYW0gc29ja2V0cyBhcmUgc3VwcG9ydGVkIikKIAorICAgIGRlZiBjZXJ0X3RpbWVfb2soc2VsZiwgdGltZXN0cmluZywgdGltZXN0YW1wKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuY2VydF90aW1lX3RvX3NlY29uZHModGltZXN0cmluZyksIHRpbWVzdGFtcCkKKworICAgIGRlZiBjZXJ0X3RpbWVfZmFpbChzZWxmLCB0aW1lc3RyaW5nKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNzbC5jZXJ0X3RpbWVfdG9fc2Vjb25kcyh0aW1lc3RyaW5nKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModXRjX29mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhbCB0aW1lIG5lZWRzIHRvIGJlIGRpZmZlcmVudCBmcm9tIFVUQycpCisgICAgZGVmIHRlc3RfY2VydF90aW1lX3RvX3NlY29uZHNfdGltZXpvbmUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5OTQwOiBzc2wuY2VydF90aW1lX3RvX3NlY29uZHMoKSByZXR1cm5zIHdyb25nCisgICAgICAgICMgICAgICAgICAgICAgICByZXN1bHRzIGlmIGxvY2FsIHRpbWV6b25lIGlzIG5vdCBVVEMKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfb2soIk1heSAgOSAwMDowMDowMCAyMDA3IEdNVCIsIDExNzg2Njg4MDAuMCkKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfb2soIkphbiAgNSAwOTozNDo0MyAyMDE4IEdNVCIsIDE1MTUxNDQ4ODMuMCkKKworICAgIGRlZiB0ZXN0X2NlcnRfdGltZV90b19zZWNvbmRzKHNlbGYpOgorICAgICAgICB0aW1lc3RyaW5nID0gIkphbiAgNSAwOTozNDo0MyAyMDE4IEdNVCIKKyAgICAgICAgdHMgPSAxNTE1MTQ0ODgzLjAKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfb2sodGltZXN0cmluZywgdHMpCisgICAgICAgICMgYWNjZXB0IGtleXdvcmQgcGFyYW1ldGVyLCBhc3NlcnQgaXRzIG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuY2VydF90aW1lX3RvX3NlY29uZHMoY2VydF90aW1lPXRpbWVzdHJpbmcpLCB0cykKKyAgICAgICAgIyBhY2NlcHQgYm90aCAlZSBhbmQgJWQgKHNwYWNlIG9yIHplcm8gZ2VuZXJhdGVkIGJ5IHN0cmZ0aW1lKQorICAgICAgICBzZWxmLmNlcnRfdGltZV9vaygiSmFuIDA1IDA5OjM0OjQzIDIwMTggR01UIiwgdHMpCisgICAgICAgICMgY2FzZS1pbnNlbnNpdGl2ZQorICAgICAgICBzZWxmLmNlcnRfdGltZV9vaygiSmFOICA1IDA5OjM0OjQzIDIwMTggR21UIiwgdHMpCisgICAgICAgIHNlbGYuY2VydF90aW1lX2ZhaWwoIkphbiAgNSAwOTozNCAyMDE4IEdNVCIpICAgICAjIG5vIHNlY29uZHMKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfZmFpbCgiSmFuICA1IDA5OjM0OjQzIDIwMTgiKSAgICAgICMgbm8gR01UCisgICAgICAgIHNlbGYuY2VydF90aW1lX2ZhaWwoIkphbiAgNSAwOTozNDo0MyAyMDE4IFVUQyIpICAjIG5vdCBHTVQgdGltZXpvbmUKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfZmFpbCgiSmFuIDM1IDA5OjM0OjQzIDIwMTggR01UIikgICMgaW52YWxpZCBkYXkKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfZmFpbCgiSm9uICA1IDA5OjM0OjQzIDIwMTggR01UIikgICMgaW52YWxpZCBtb250aAorICAgICAgICBzZWxmLmNlcnRfdGltZV9mYWlsKCJKYW4gIDUgMjQ6MDA6MDAgMjAxOCBHTVQiKSAgIyBpbnZhbGlkIGhvdXIKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfZmFpbCgiSmFuICA1IDA5OjYwOjQzIDIwMTggR01UIikgICMgaW52YWxpZCBtaW51dGUKKworICAgICAgICBuZXd5ZWFyX3RzID0gMTIzMDc2ODAwMC4wCisgICAgICAgICMgbGVhcCBzZWNvbmRzCisgICAgICAgIHNlbGYuY2VydF90aW1lX29rKCJEZWMgMzEgMjM6NTk6NjAgMjAwOCBHTVQiLCBuZXd5ZWFyX3RzKQorICAgICAgICAjIHNhbWUgdGltZXN0YW1wCisgICAgICAgIHNlbGYuY2VydF90aW1lX29rKCJKYW4gIDEgMDA6MDA6MDAgMjAwOSBHTVQiLCBuZXd5ZWFyX3RzKQorCisgICAgICAgIHNlbGYuY2VydF90aW1lX29rKCJKYW4gIDUgMDk6MzQ6NTkgMjAxOCBHTVQiLCAxNTE1MTQ0ODk5KQorICAgICAgICAjICBhbGxvdyA2MHRoIHNlY29uZCAoZXZlbiBpZiBpdCBpcyBub3QgYSBsZWFwIHNlY29uZCkKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfb2soIkphbiAgNSAwOTozNDo2MCAyMDE4IEdNVCIsIDE1MTUxNDQ5MDApCisgICAgICAgICMgIGFsbG93IDJuZCBsZWFwIHNlY29uZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRpbWUuc3RycHRpbWUoKQorICAgICAgICBzZWxmLmNlcnRfdGltZV9vaygiSmFuICA1IDA5OjM0OjYxIDIwMTggR01UIiwgMTUxNTE0NDkwMSkKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfZmFpbCgiSmFuICA1IDA5OjM0OjYyIDIwMTggR01UIikgICMgaW52YWxpZCBzZWNvbmRzCisKKyAgICAgICAgIyBubyBzcGVjaWFsIHRyZWF0ZW1lbnQgZm9yIHRoZSBzcGVjaWFsIHZhbHVlOgorICAgICAgICAjICAgOTk5OTEyMzEyMzU5NTlaIChyZmMgNTI4MCkKKyAgICAgICAgc2VsZi5jZXJ0X3RpbWVfb2soIkRlYyAzMSAyMzo1OTo1OSA5OTk5IEdNVCIsIDI1MzQwMjMwMDc5OS4wKQorCisgICAgQHN1cHBvcnQucnVuX3dpdGhfbG9jYWxlKCdMQ19BTEwnLCAnJykKKyAgICBkZWYgdGVzdF9jZXJ0X3RpbWVfdG9fc2Vjb25kc19sb2NhbGUoc2VsZik6CisgICAgICAgICMgYGNlcnRfdGltZV90b19zZWNvbmRzKClgIHNob3VsZCBiZSBsb2NhbGUgaW5kZXBlbmRlbnQKKworICAgICAgICBkZWYgbG9jYWxfZmVicnVhcnlfbmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuIHRpbWUuc3RyZnRpbWUoJyViJywgKDEsIDIsIDMsIDQsIDUsIDYsIDAsIDAsIDApKQorCisgICAgICAgIGlmIGxvY2FsX2ZlYnJ1YXJ5X25hbWUoKS5sb3dlcigpID09ICdmZWInOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibG9jYWxlLXNwZWNpZmljIG1vbnRoIG5hbWUgbmVlZHMgdG8gYmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlmZmVyZW50IGZyb20gQyBsb2NhbGUiKQorCisgICAgICAgICMgbG9jYWxlLWluZGVwZW5kZW50CisgICAgICAgIHNlbGYuY2VydF90aW1lX29rKCJGZWIgIDkgMDA6MDA6MDAgMjAwNyBHTVQiLCAxMTcwOTc5MjAwLjApCisgICAgICAgIHNlbGYuY2VydF90aW1lX2ZhaWwobG9jYWxfZmVicnVhcnlfbmFtZSgpICsgIiAgOSAwMDowMDowMCAyMDA3IEdNVCIpCisKIAogY2xhc3MgQ29udGV4dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNzM0LDcgKzg2OSw3IEBACiAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUsIGtleWZpbGU9Q0VSVEZJTEUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfY2VydF9jaGFpbiwga2V5ZmlsZT1DRVJURklMRSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKLSAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oV1JPTkdDRVJUKQorICAgICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihOT05FWElTVElOR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CiAgICAgICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKEJBRENFUlQpCkBAIC04MTksNyArOTU0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIE5vbmUsIE5vbmUsIE5vbmUpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKFdST05HQ0VSVCkKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoTk9ORVhJU1RJTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAiUEVNIGxpYiIpOgogICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhCQURDRVJUKQpAQCAtODk1LDcgKzEwMzAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2RoX3BhcmFtcykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF9kaF9wYXJhbXMsIE5vbmUpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgY3R4LmxvYWRfZGhfcGFyYW1zKFdST05HQ0VSVCkKKyAgICAgICAgICAgIGN0eC5sb2FkX2RoX3BhcmFtcyhOT05FWElTVElOR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN0eC5sb2FkX2RoX3BhcmFtcyhDRVJURklMRSkKQEAgLTExNTgsNyArMTI5Myw3IEBACiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgczoKICAgICAgICAgICAgIHMuYmluZCgoIjEyNy4wLjAuMSIsIDApKQotICAgICAgICAgICAgcy5saXN0ZW4oNSkKKyAgICAgICAgICAgIHMubGlzdGVuKCkKICAgICAgICAgICAgIGMgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgICAgIGMuY29ubmVjdChzLmdldHNvY2tuYW1lKCkpCiAgICAgICAgICAgICBjLnNldGJsb2NraW5nKEZhbHNlKQpAQCAtMTE3MSw2ICsxMzA2LDY5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIHNzbC5TU0xfRVJST1JfV0FOVF9SRUFEKQogCiAKK2NsYXNzIE1lbW9yeUJJT1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlYWRfd3JpdGUoc2VsZik6CisgICAgICAgIGJpbyA9IHNzbC5NZW1vcnlCSU8oKQorICAgICAgICBiaW8ud3JpdGUoYidmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpby5yZWFkKCksIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW8ucmVhZCgpLCBiJycpCisgICAgICAgIGJpby53cml0ZShiJ2ZvbycpCisgICAgICAgIGJpby53cml0ZShiJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlvLnJlYWQoKSwgYidmb29iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpby5yZWFkKCksIGInJykKKyAgICAgICAgYmlvLndyaXRlKGInYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW8ucmVhZCgyKSwgYidiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlvLnJlYWQoMSksIGIneicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlvLnJlYWQoMSksIGInJykKKworICAgIGRlZiB0ZXN0X2VvZihzZWxmKToKKyAgICAgICAgYmlvID0gc3NsLk1lbW9yeUJJTygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmlvLmVvZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW8ucmVhZCgpLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmlvLmVvZikKKyAgICAgICAgYmlvLndyaXRlKGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiaW8uZW9mKQorICAgICAgICBiaW8ud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiaW8uZW9mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpby5yZWFkKDIpLCBiJ2ZvJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiaW8uZW9mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpby5yZWFkKDEpLCBiJ28nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmlvLmVvZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW8ucmVhZCgpLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiaW8uZW9mKQorCisgICAgZGVmIHRlc3RfcGVuZGluZyhzZWxmKToKKyAgICAgICAgYmlvID0gc3NsLk1lbW9yeUJJTygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlvLnBlbmRpbmcsIDApCisgICAgICAgIGJpby53cml0ZShiJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlvLnBlbmRpbmcsIDMpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgYmlvLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlvLnBlbmRpbmcsIDMtaS0xKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIGJpby53cml0ZShiJ3gnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW8ucGVuZGluZywgaSsxKQorICAgICAgICBiaW8ucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlvLnBlbmRpbmcsIDApCisKKyAgICBkZWYgdGVzdF9idWZmZXJfdHlwZXMoc2VsZik6CisgICAgICAgIGJpbyA9IHNzbC5NZW1vcnlCSU8oKQorICAgICAgICBiaW8ud3JpdGUoYidmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpby5yZWFkKCksIGInZm9vJykKKyAgICAgICAgYmlvLndyaXRlKGJ5dGVhcnJheShiJ2JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpby5yZWFkKCksIGInYmFyJykKKyAgICAgICAgYmlvLndyaXRlKG1lbW9yeXZpZXcoYidiYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW8ucmVhZCgpLCBiJ2JheicpCisKKyAgICBkZWYgdGVzdF9lcnJvcl90eXBlcyhzZWxmKToKKyAgICAgICAgYmlvID0gc3NsLk1lbW9yeUJJTygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmlvLndyaXRlLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiaW8ud3JpdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmlvLndyaXRlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJpby53cml0ZSwgMSkKKworCiBjbGFzcyBOZXR3b3JrZWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgpAQCAtMTQwMiwxNCArMTYwMCwxMiBAQAogICAgIGRlZiB0ZXN0X2dldF9zZXJ2ZXJfY2VydGlmaWNhdGUoc2VsZik6CiAgICAgICAgIGRlZiBfdGVzdF9nZXRfc2VydmVyX2NlcnRpZmljYXRlKGhvc3QsIHBvcnQsIGNlcnQ9Tm9uZSk6CiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KGhvc3QpOgotICAgICAgICAgICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKChob3N0LCBwb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKChob3N0LCBwb3J0KSkKICAgICAgICAgICAgICAgICBpZiBub3QgcGVtOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIHNlcnZlciBjZXJ0aWZpY2F0ZSBvbiAlczolcyEiICUgKGhvc3QsIHBvcnQpKQogCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBwZW0gPSBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZSgoaG9zdCwgcG9ydCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5QUk9UT0NPTF9TU0x2MjMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPUNFUlRGSUxFKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICAgICAgI3Nob3VsZCBmYWlsCkBAIC0xNDE5LDcgKzE2MTUsNiBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkdvdCBzZXJ2ZXIgY2VydGlmaWNhdGUgJXMgZm9yICVzOiVzISIgJSAocGVtLCBob3N0LCBwb3J0KSkKIAogICAgICAgICAgICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKChob3N0LCBwb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjIzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPWNlcnQpCiAgICAgICAgICAgICAgICAgaWYgbm90IHBlbToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBzZXJ2ZXIgY2VydGlmaWNhdGUgb24gJXM6JXMhIiAlIChob3N0LCBwb3J0KSkKQEAgLTE1MDUsNiArMTcwMCw5NCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuY29udGV4dCwgY3R4MikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNzLl9zc2xvYmouY29udGV4dCwgY3R4MikKIAorCitjbGFzcyBOZXR3b3JrZWRCSU9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc3NsX2lvX2xvb3Aoc2VsZiwgc29jaywgaW5jb21pbmcsIG91dGdvaW5nLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAjIEEgc2ltcGxlIElPIGxvb3AuIENhbGwgZnVuYygqYXJncykgZGVwZW5kaW5nIG9uIHRoZSBlcnJvciB3ZSBnZXQKKyAgICAgICAgIyAoV0FOVF9SRUFEIG9yIFdBTlRfV1JJVEUpIG1vdmUgZGF0YSBiZXR3ZWVuIHRoZSBzb2NrZXQgYW5kIHRoZSBCSU9zLgorICAgICAgICB0aW1lb3V0ID0ga3dhcmdzLmdldCgndGltZW91dCcsIDEwKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGVycm5vID0gTm9uZQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldCA9IGZ1bmMoKmFyZ3MpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVycm5vID0gZS5lcnJubworICAgICAgICAgICAgIyBHZXQgYW55IGRhdGEgZnJvbSB0aGUgb3V0Z29pbmcgQklPIGlycmVzcGVjdGl2ZSBvZiBhbnkgZXJyb3IsIGFuZAorICAgICAgICAgICAgIyBzZW5kIGl0IHRvIHRoZSBzb2NrZXQuCisgICAgICAgICAgICBidWYgPSBvdXRnb2luZy5yZWFkKCkKKyAgICAgICAgICAgIHNvY2suc2VuZGFsbChidWYpCisgICAgICAgICAgICAjIElmIHRoZXJlJ3Mgbm8gZXJyb3IsIHdlJ3JlIGRvbmUuIEZvciBXQU5UX1JFQUQsIHdlIG5lZWQgdG8gZ2V0CisgICAgICAgICAgICAjIGRhdGEgZnJvbSB0aGUgc29ja2V0IGFuZCBwdXQgaXQgaW4gdGhlIGluY29taW5nIEJJTy4KKyAgICAgICAgICAgIGlmIGVycm5vIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgZXJybm8gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgYnVmID0gc29jay5yZWN2KDMyNzY4KQorICAgICAgICAgICAgICAgIGlmIGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcud3JpdGUoYnVmKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluY29taW5nLndyaXRlX2VvZigpCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIk5lZWRlZCAlZCBjYWxscyB0byBjb21wbGV0ZSAlcygpLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjb3VudCwgZnVuYy5fX25hbWVfXykpCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiB0ZXN0X2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChSRU1PVEVfSE9TVCk6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIHNvY2suY29ubmVjdCgoUkVNT1RFX0hPU1QsIDQ0MykpCisgICAgICAgICAgICBpbmNvbWluZyA9IHNzbC5NZW1vcnlCSU8oKQorICAgICAgICAgICAgb3V0Z29pbmcgPSBzc2wuTWVtb3J5QklPKCkKKyAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhSRU1PVEVfUk9PVF9DRVJUKQorICAgICAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICAgICAgc3Nsb2JqID0gY3R4LndyYXBfYmlvKGluY29taW5nLCBvdXRnb2luZywgRmFsc2UsIFJFTU9URV9IT1NUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzc2xvYmouX3NzbG9iai5vd25lciwgc3Nsb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3Nsb2JqLmNpcGhlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3Nsb2JqLnNoYXJlZF9jaXBoZXJzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2xvYmouZ2V0cGVlcmNlcnQpCisgICAgICAgICAgICBpZiAndGxzLXVuaXF1ZScgaW4gc3NsLkNIQU5ORUxfQklORElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzc2xvYmouZ2V0X2NoYW5uZWxfYmluZGluZygndGxzLXVuaXF1ZScpKQorICAgICAgICAgICAgc2VsZi5zc2xfaW9fbG9vcChzb2NrLCBpbmNvbWluZywgb3V0Z29pbmcsIHNzbG9iai5kb19oYW5kc2hha2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Nsb2JqLmNpcGhlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3Nsb2JqLnNoYXJlZF9jaXBoZXJzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Nsb2JqLmdldHBlZXJjZXJ0KCkpCisgICAgICAgICAgICBpZiAndGxzLXVuaXF1ZScgaW4gc3NsLkNIQU5ORUxfQklORElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Nsb2JqLmdldF9jaGFubmVsX2JpbmRpbmcoJ3Rscy11bmlxdWUnKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNzbF9pb19sb29wKHNvY2ssIGluY29taW5nLCBvdXRnb2luZywgc3Nsb2JqLnVud3JhcCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMU3lzY2FsbEVycm9yOgorICAgICAgICAgICAgICAgICMgc2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQgcHJvYmFibHkgc2h1dHMgZG93biB0aGUgVENQCisgICAgICAgICAgICAgICAgIyBjb25uZWN0aW9uIHdpdGhvdXQgc2VuZGluZyBhIHNlY3VyZSBzaHV0ZG93biBtZXNzYWdlLCBhbmQKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgcmVwb3J0ZWQgYXMgU1NMX0VSUk9SX1NZU0NBTEwKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IsIHNzbG9iai53cml0ZSwgYidmb28nKQorICAgICAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3dyaXRlX2RhdGEoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoUkVNT1RFX0hPU1QpOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzb2NrLmNvbm5lY3QoKFJFTU9URV9IT1NULCA0NDMpKQorICAgICAgICAgICAgaW5jb21pbmcgPSBzc2wuTWVtb3J5QklPKCkKKyAgICAgICAgICAgIG91dGdvaW5nID0gc3NsLk1lbW9yeUJJTygpCisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfTk9ORQorICAgICAgICAgICAgc3Nsb2JqID0gY3R4LndyYXBfYmlvKGluY29taW5nLCBvdXRnb2luZywgRmFsc2UpCisgICAgICAgICAgICBzZWxmLnNzbF9pb19sb29wKHNvY2ssIGluY29taW5nLCBvdXRnb2luZywgc3Nsb2JqLmRvX2hhbmRzaGFrZSkKKyAgICAgICAgICAgIHJlcSA9IGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicKKyAgICAgICAgICAgIHNlbGYuc3NsX2lvX2xvb3Aoc29jaywgaW5jb21pbmcsIG91dGdvaW5nLCBzc2xvYmoud3JpdGUsIHJlcSkKKyAgICAgICAgICAgIGJ1ZiA9IHNlbGYuc3NsX2lvX2xvb3Aoc29jaywgaW5jb21pbmcsIG91dGdvaW5nLCBzc2xvYmoucmVhZCwgMTAyNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo1XSwgYidIVFRQLycpCisgICAgICAgICAgICBzZWxmLnNzbF9pb19sb29wKHNvY2ssIGluY29taW5nLCBvdXRnb2luZywgc3Nsb2JqLnVud3JhcCkKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorCisKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xNTM2LDcgKzE4MTksOCBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zc2xjb25uID0gc2VsZi5zZXJ2ZXIuY29udGV4dC53cmFwX3NvY2tldCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2VsZWN0ZWRfcHJvdG9jb2xzLmFwcGVuZChzZWxmLnNzbGNvbm4uc2VsZWN0ZWRfbnBuX3Byb3RvY29sKCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnNlbGVjdGVkX25wbl9wcm90b2NvbHMuYXBwZW5kKHNlbGYuc3NsY29ubi5zZWxlY3RlZF9ucG5fcHJvdG9jb2woKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2VsZWN0ZWRfYWxwbl9wcm90b2NvbHMuYXBwZW5kKHNlbGYuc3NsY29ubi5zZWxlY3RlZF9hbHBuX3Byb3RvY29sKCkpCiAgICAgICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgICAgICAjIFdlIHRyZWF0IENvbm5lY3Rpb25SZXNldEVycm9yIGFzIHRob3VnaCBpdCB3ZXJlIGFuCiAgICAgICAgICAgICAgICAgICAgICMgU1NMRXJyb3IgLSBPcGVuU1NMIG9uIFVidW50dSBhYnJ1cHRseSBjbG9zZXMgdGhlCkBAIC0xNTUzLDYgKzE4MzcsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2hhcmVkX2NpcGhlcnMuYXBwZW5kKHNlbGYuc3NsY29ubi5zaGFyZWRfY2lwaGVycygpKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5jb250ZXh0LnZlcmlmeV9tb2RlID09IHNzbC5DRVJUX1JFUVVJUkVEOgogICAgICAgICAgICAgICAgICAgICAgICAgY2VydCA9IHNlbGYuc3NsY29ubi5nZXRwZWVyY2VydCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuc2VydmVyLmNoYXR0eToKQEAgLTE2NDMsNyArMTkyOCw4IEBACiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjZXJ0aWZpY2F0ZT1Ob25lLCBzc2xfdmVyc2lvbj1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9Tm9uZSwgY2FjZXJ0cz1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UsIHN0YXJ0dGxzX3NlcnZlcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgIG5wbl9wcm90b2NvbHM9Tm9uZSwgY2lwaGVycz1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgbnBuX3Byb3RvY29scz1Ob25lLCBhbHBuX3Byb3RvY29scz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz1Ob25lLCBjb250ZXh0PU5vbmUpOgogICAgICAgICAgICAgaWYgY29udGV4dDoKICAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CiAgICAgICAgICAgICBlbHNlOgpAQCAtMTY1OCw2ICsxOTQ0LDggQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0aWZpY2F0ZSkKICAgICAgICAgICAgICAgICBpZiBucG5fcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X25wbl9wcm90b2NvbHMobnBuX3Byb3RvY29scykKKyAgICAgICAgICAgICAgICBpZiBhbHBuX3Byb3RvY29sczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9hbHBuX3Byb3RvY29scyhhbHBuX3Byb3RvY29scykKICAgICAgICAgICAgICAgICBpZiBjaXBoZXJzOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X2NpcGhlcnMoY2lwaGVycykKICAgICAgICAgICAgIHNlbGYuY2hhdHR5ID0gY2hhdHR5CkBAIC0xNjY3LDcgKzE5NTUsOSBAQAogICAgICAgICAgICAgc2VsZi5wb3J0ID0gc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQogICAgICAgICAgICAgc2VsZi5mbGFnID0gTm9uZQogICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQotICAgICAgICAgICAgc2VsZi5zZWxlY3RlZF9wcm90b2NvbHMgPSBbXQorICAgICAgICAgICAgc2VsZi5zZWxlY3RlZF9ucG5fcHJvdG9jb2xzID0gW10KKyAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRfYWxwbl9wcm90b2NvbHMgPSBbXQorICAgICAgICAgICAgc2VsZi5zaGFyZWRfY2lwaGVycyA9IFtdCiAgICAgICAgICAgICBzZWxmLmNvbm5fZXJyb3JzID0gW10KICAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKICAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQpAQCAtMTY4Nyw3ICsxOTc3LDcgQEAKIAogICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMC4wNSkKLSAgICAgICAgICAgIHNlbGYuc29jay5saXN0ZW4oNSkKKyAgICAgICAgICAgIHNlbGYuc29jay5saXN0ZW4oKQogICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBUcnVlCiAgICAgICAgICAgICBpZiBzZWxmLmZsYWc6CiAgICAgICAgICAgICAgICAgIyBzaWduYWwgYW4gZXZlbnQKQEAgLTE4MjYsMzYgKzIxMTYsNiBAQAogICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQogICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY2xvc2UoKQogCi0gICAgZGVmIGJhZF9jZXJ0X3Rlc3QoY2VydGZpbGUpOgotICAgICAgICAiIiIKLSAgICAgICAgTGF1bmNoIGEgc2VydmVyIHdpdGggQ0VSVF9SRVFVSVJFRCwgYW5kIGNoZWNrIHRoYXQgdHJ5aW5nIHRvCi0gICAgICAgIGNvbm5lY3QgdG8gaXQgd2l0aCB0aGUgZ2l2ZW4gY2xpZW50IGNlcnRpZmljYXRlIGZhaWxzLgotICAgICAgICAiIiIKLSAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKENFUlRGSUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNlcnRzPUNFUlRGSUxFLCBjaGF0dHk9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKQotICAgICAgICB3aXRoIHNlcnZlcjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgotICAgICAgICAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2VydGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxKQotICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKLSAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuU1NMRXJyb3IgaXMgJXNcbiIgJSB4LmFyZ3NbMV0pCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5PU0Vycm9yIGlzICVzXG4iICUgeC5hcmdzWzFdKQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBpZiB4LmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxPU0Vycm9yIGlzICVzXG4iICUgc3RyKHgpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVXNlIG9mIGludmFsaWQgY2VydCBzaG91bGQgaGF2ZSBmYWlsZWQhIikKLQogICAgIGRlZiBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LCBpbmRhdGE9YiJGT09cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSwgc25pX25hbWU9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtMTg5MywxNCArMjE1MywyNSBAQAogICAgICAgICAgICAgICAgICAgICAnY29tcHJlc3Npb24nOiBzLmNvbXByZXNzaW9uKCksCiAgICAgICAgICAgICAgICAgICAgICdjaXBoZXInOiBzLmNpcGhlcigpLAogICAgICAgICAgICAgICAgICAgICAncGVlcmNlcnQnOiBzLmdldHBlZXJjZXJ0KCksCi0gICAgICAgICAgICAgICAgICAgICdjbGllbnRfbnBuX3Byb3RvY29sJzogcy5zZWxlY3RlZF9ucG5fcHJvdG9jb2woKQorICAgICAgICAgICAgICAgICAgICAnY2xpZW50X2FscG5fcHJvdG9jb2wnOiBzLnNlbGVjdGVkX2FscG5fcHJvdG9jb2woKSwKKyAgICAgICAgICAgICAgICAgICAgJ2NsaWVudF9ucG5fcHJvdG9jb2wnOiBzLnNlbGVjdGVkX25wbl9wcm90b2NvbCgpLAorICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6IHMudmVyc2lvbigpLAogICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCi0gICAgICAgICAgICBzdGF0c1snc2VydmVyX25wbl9wcm90b2NvbHMnXSA9IHNlcnZlci5zZWxlY3RlZF9wcm90b2NvbHMKKyAgICAgICAgICAgIHN0YXRzWydzZXJ2ZXJfYWxwbl9wcm90b2NvbHMnXSA9IHNlcnZlci5zZWxlY3RlZF9hbHBuX3Byb3RvY29scworICAgICAgICAgICAgc3RhdHNbJ3NlcnZlcl9ucG5fcHJvdG9jb2xzJ10gPSBzZXJ2ZXIuc2VsZWN0ZWRfbnBuX3Byb3RvY29scworICAgICAgICAgICAgc3RhdHNbJ3NlcnZlcl9zaGFyZWRfY2lwaGVycyddID0gc2VydmVyLnNoYXJlZF9jaXBoZXJzCiAgICAgICAgIHJldHVybiBzdGF0cwogCiAgICAgZGVmIHRyeV9wcm90b2NvbF9jb21ibyhzZXJ2ZXJfcHJvdG9jb2wsIGNsaWVudF9wcm90b2NvbCwgZXhwZWN0X3N1Y2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0c3JlcXM9Tm9uZSwgc2VydmVyX29wdGlvbnM9MCwgY2xpZW50X29wdGlvbnM9MCk6CisgICAgICAgICIiIgorICAgICAgICBUcnkgdG8gU1NMLWNvbm5lY3QgdXNpbmcgKmNsaWVudF9wcm90b2NvbCogdG8gKnNlcnZlcl9wcm90b2NvbCouCisgICAgICAgIElmICpleHBlY3Rfc3VjY2VzcyogaXMgdHJ1ZSwgYXNzZXJ0IHRoYXQgdGhlIGNvbm5lY3Rpb24gc3VjY2VlZHMsCisgICAgICAgIGlmIGl0J3MgZmFsc2UsIGFzc2VydCB0aGF0IHRoZSBjb25uZWN0aW9uIGZhaWxzLgorICAgICAgICBBbHNvLCBpZiAqZXhwZWN0X3N1Y2Nlc3MqIGlzIGEgc3RyaW5nLCBhc3NlcnQgdGhhdCBpdCBpcyB0aGUgcHJvdG9jb2wKKyAgICAgICAgdmVyc2lvbiBhY3R1YWxseSB1c2VkIGJ5IHRoZSBjb25uZWN0aW9uLgorICAgICAgICAiIiIKICAgICAgICAgaWYgY2VydHNyZXFzIGlzIE5vbmU6CiAgICAgICAgICAgICBjZXJ0c3JlcXMgPSBzc2wuQ0VSVF9OT05FCiAgICAgICAgIGNlcnR0eXBlID0gewpAQCAtMTkzMCw4ICsyMjAxLDggQEAKICAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSkKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSkKICAgICAgICAgIyBQcm90b2NvbCBtaXNtYXRjaCBjYW4gcmVzdWx0IGluIGVpdGhlciBhbiBTU0xFcnJvciwgb3IgYQogICAgICAgICAjICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiIGVycm9yLgogICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgpAQCAtMTk0Niw2ICsyMjE3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICJDbGllbnQgcHJvdG9jb2wgJXMgc3VjY2VlZGVkIHdpdGggc2VydmVyIHByb3RvY29sICVzISIKICAgICAgICAgICAgICAgICAgICAgJSAoc3NsLmdldF9wcm90b2NvbF9uYW1lKGNsaWVudF9wcm90b2NvbCksCiAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5nZXRfcHJvdG9jb2xfbmFtZShzZXJ2ZXJfcHJvdG9jb2wpKSkKKyAgICAgICAgICAgIGVsaWYgKGV4cGVjdF9zdWNjZXNzIGlzIG5vdCBUcnVlCisgICAgICAgICAgICAgICAgICBhbmQgZXhwZWN0X3N1Y2Nlc3MgIT0gc3RhdHNbJ3ZlcnNpb24nXSk6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInZlcnNpb24gbWlzbWF0Y2g6IGV4cGVjdGVkICVyLCBnb3QgJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXhwZWN0X3N1Y2Nlc3MsIHN0YXRzWyd2ZXJzaW9uJ10pKQogCiAKICAgICBjbGFzcyBUaHJlYWRlZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTIwODEsMjIgKzIzNTYsMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19ob3N0bmFtZSByZXF1aXJlcyBzZXJ2ZXJfaG9zdG5hbWUiKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JhcF9zb2NrZXQocykKIAotICAgICAgICBkZWYgdGVzdF9lbXB0eV9jZXJ0KHNlbGYpOgotICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB3aXRoIGFuIGVtcHR5IGNlcnQgZmlsZSIiIgotICAgICAgICAgICAgYmFkX2NlcnRfdGVzdChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJudWxsY2VydC5wZW0iKSkKLSAgICAgICAgZGVmIHRlc3RfbWFsZm9ybWVkX2NlcnQoc2VsZik6Ci0gICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYSBiYWRseSBmb3JtYXR0ZWQgY2VydGlmaWNhdGUgKHN5bnRheCBlcnJvcikiIiIKLSAgICAgICAgICAgIGJhZF9jZXJ0X3Rlc3Qob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZGNlcnQucGVtIikpCi0gICAgICAgIGRlZiB0ZXN0X25vbmV4aXN0aW5nX2NlcnQoc2VsZik6Ci0gICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYSBub24tZXhpc3RpbmcgY2VydCBmaWxlIiIiCi0gICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZ2NlcnQucGVtIikpCi0gICAgICAgIGRlZiB0ZXN0X21hbGZvcm1lZF9rZXkoc2VsZik6Ci0gICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYSBiYWRseSBmb3JtYXR0ZWQga2V5IChzeW50YXggZXJyb3IpIiIiCi0gICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWRrZXkucGVtIikpCisgICAgICAgIGRlZiB0ZXN0X3dyb25nX2NlcnQoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdoZW4gdGhlIHNlcnZlciByZWplY3RzIHRoZSBjbGllbnQncyBjZXJ0aWZpY2F0ZQorCisgICAgICAgICAgICBMYXVuY2ggYSBzZXJ2ZXIgd2l0aCBDRVJUX1JFUVVJUkVELCBhbmQgY2hlY2sgdGhhdCB0cnlpbmcgdG8KKyAgICAgICAgICAgIGNvbm5lY3QgdG8gaXQgd2l0aCBhIHdyb25nIGNsaWVudCBjZXJ0aWZpY2F0ZSBmYWlscy4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgY2VydGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmdjZXJ0LnBlbSIpCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoQ0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjZXJ0cz1DRVJURklMRSwgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UpCisgICAgICAgICAgICB3aXRoIHNlcnZlciwgXAorICAgICAgICAgICAgICAgICAgICBzb2NrZXQuc29ja2V0KCkgYXMgc29jaywgXAorICAgICAgICAgICAgICAgICAgICBzc2wud3JhcF9zb2NrZXQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfVExTdjEpIGFzIHM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIEV4cGVjdCBlaXRoZXIgYW4gU1NMIGVycm9yIGFib3V0IHRoZSBzZXJ2ZXIgcmVqZWN0aW5nCisgICAgICAgICAgICAgICAgICAgICMgdGhlIGNvbm5lY3Rpb24sIG9yIGEgbG93LWxldmVsIGNvbm5lY3Rpb24gcmVzZXQgKHdoaWNoCisgICAgICAgICAgICAgICAgICAgICMgc29tZXRpbWVzIGhhcHBlbnMgb24gV2luZG93cykKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcblNTTEVycm9yIGlzICVyXG4iICUgZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDT05OUkVTRVQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbnNvY2tldC5lcnJvciBpcyAlclxuIiAlIGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJVc2Ugb2YgaW52YWxpZCBjZXJ0IHNob3VsZCBoYXZlIGZhaWxlZCEiKQogCiAgICAgICAgIGRlZiB0ZXN0X3J1ZGVfc2h1dGRvd24oc2VsZik6CiAgICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBPU0Vycm9yCkBAIC0yMTEzLDcgKzI0MDQsNyBAQAogICAgICAgICAgICAgIyBhbmQgc2V0cyBFdmVudCBgbGlzdGVuZXJfZ29uZWAgdG8gbGV0IHRoZSBtYWluIHRocmVhZCBrbm93CiAgICAgICAgICAgICAjIHRoZSBzb2NrZXQgaXMgZ29uZS4KICAgICAgICAgICAgIGRlZiBsaXN0ZW5lcigpOgotICAgICAgICAgICAgICAgIHMubGlzdGVuKDUpCisgICAgICAgICAgICAgICAgcy5saXN0ZW4oKQogICAgICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5LnNldCgpCiAgICAgICAgICAgICAgICAgbmV3c29jaywgYWRkciA9IHMuYWNjZXB0KCkKICAgICAgICAgICAgICAgICBuZXdzb2NrLmNsb3NlKCkKQEAgLTIxODAsMTcgKzI0NzEsMTcgQEAKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjMnKToKICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBUcnVlKQotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsICdUTFN2MScpCiAKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjMnKToKICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSwgc3NsLkNFUlRfT1BUSU9OQUwpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCi0gICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsICdUTFN2MScsIHNzbC5DRVJUX09QVElPTkFMKQogCiAgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYzJyk6CiAgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UsIHNzbC5DRVJUX1JFUVVJUkVEKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxLCAnVExTdjEnLCBzc2wuQ0VSVF9SRVFVSVJFRCkKIAogICAgICAgICAgICAgIyBTZXJ2ZXIgd2l0aCBzcGVjaWZpYyBTU0wgb3B0aW9ucwogICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpOgpAQCAtMjIxMCw5ICsyNTAxLDkgQEAKICAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYW4gU1NMdjMgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucyIiIgogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKLSAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgVHJ1ZSkKLSAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCi0gICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYzLCAnU1NMdjMnKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYzLCAnU1NMdjMnLCBzc2wuQ0VSVF9PUFRJT05BTCkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgJ1NTTHYzJywgc3NsLkNFUlRfUkVRVUlSRUQpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CiAgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYyLCBGYWxzZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIEZhbHNlLApAQCAtMjIyOCw5ICsyNTE5LDkgQEAKICAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MSBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlKQotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKLSAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjEsICdUTFN2MScpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjEsICdUTFN2MScsIHNzbC5DRVJUX09QVElPTkFMKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCAnVExTdjEnLCBzc2wuQ0VSVF9SRVFVSVJFRCkKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQogICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpOgpAQCAtMjI0Niw3ICsyNTM3LDcgQEAKICAgICAgICAgICAgICAgIFRlc3RpbmcgYWdhaW5zdCBvbGRlciBUTFMgdmVyc2lvbnMuIiIiCiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsICdUTFN2MS4xJykKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9TU0x2MiwgRmFsc2UpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYzJyk6CkBAIC0yMjU0LDcgKzI1NDUsNyBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjFfMSkKIAotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCAnVExTdjEuMScpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgRmFsc2UpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgRmFsc2UpCiAKQEAgLTIyNjcsNyArMjU1OCw3IEBACiAgICAgICAgICAgICAgICBUZXN0aW5nIGFnYWluc3Qgb2xkZXIgVExTIHZlcnNpb25zLiIiIgogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKLSAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxXzIsIFRydWUsCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCAnVExTdjEuMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX29wdGlvbnM9c3NsLk9QX05PX1NTTHYzfHNzbC5PUF9OT19TU0x2MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjN8c3NsLk9QX05PX1NTTHYyLCkKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKQEAgLTIyNzcsNyArMjU2OCw3IEBACiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19UTFN2MV8yKQogCi0gICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxXzIsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxXzIsICdUTFN2MS4yJykKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBGYWxzZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQpAQCAtMjUwMiw2ICsyNzkzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnN1bWUgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgcy5yZWFkKCkKIAorICAgICAgICAgICAgICAgICMgcmVhZCgtMSwgYnVmZmVyKSBpcyBzdXBwb3J0ZWQsIGV2ZW4gdGhvdWdoIHJlYWQoLTEpIGlzIG5vdAorICAgICAgICAgICAgICAgIGRhdGEgPSBiImRhdGEiCisgICAgICAgICAgICAgICAgcy5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgYnVmZmVyID0gYnl0ZWFycmF5KGxlbihkYXRhKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmVhZCgtMSwgYnVmZmVyKSwgbGVuKGRhdGEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmZmVyLCBkYXRhKQorCiAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgc2VuZG1zZyBldCBhbCBhcmUgZGlzYWxsb3dlZCB0byBhdm9pZAogICAgICAgICAgICAgICAgICMgaW5hZHZlcnRlbnQgZGlzY2xvc3VyZSBvZiBkYXRhIGFuZC9vciBjb3JydXB0aW9uCiAgICAgICAgICAgICAgICAgIyBvZiB0aGUgZW5jcnlwdGVkIGRhdGEgc3RyZWFtCkBAIC0yNTExLDYgKzI4MDksNjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnJlY3Ztc2dfaW50bywgYnl0ZWFycmF5KDEwMCkpCiAKICAgICAgICAgICAgICAgICBzLndyaXRlKGIib3ZlclxuIikKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmVjdiwgLTEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWFkLCAtMSkKKworICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgIGRlZiB0ZXN0X3JlY3ZfemVybyhzZWxmKToKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihDRVJURklMRSkKKyAgICAgICAgICAgIHNlcnZlci5fX2VudGVyX18oKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlcnZlci5fX2V4aXRfXywgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzLCBzdXBwcmVzc19yYWdnZWRfZW9mcz1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgICAgICAjIHJlY3YvcmVhZCgwKSBzaG91bGQgcmV0dXJuIG5vIGRhdGEKKyAgICAgICAgICAgIHMuc2VuZChiImRhdGEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJlY3YoMCksIGIiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZWFkKDApLCBiIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmVhZCgpLCBiImRhdGEiKQorCisgICAgICAgICAgICAjIFNob3VsZCBub3QgYmxvY2sgaWYgdGhlIG90aGVyIGVuZCBzZW5kcyBubyBkYXRhCisgICAgICAgICAgICBzLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJlY3YoMCksIGIiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZWN2X2ludG8oYnl0ZWFycmF5KCkpLCAwKQorCisgICAgICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX3NlbmQoc2VsZik6CisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoQ0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9c3NsLkNFUlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfVExTdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjZXJ0cz1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICBzLnNldGJsb2NraW5nKEZhbHNlKQorCisgICAgICAgICAgICAgICAgIyBJZiB3ZSBrZWVwIHNlbmRpbmcgZGF0YSwgYXQgc29tZSBwb2ludCB0aGUgYnVmZmVycworICAgICAgICAgICAgICAgICMgd2lsbCBiZSBmdWxsIGFuZCB0aGUgY2FsbCB3aWxsIGJsb2NrCisgICAgICAgICAgICAgICAgYnVmID0gYnl0ZWFycmF5KDgxOTIpCisgICAgICAgICAgICAgICAgZGVmIGZpbGxfYnVmZmVyKCk6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICBzLnNlbmQoYnVmKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzc2wuU1NMV2FudFdyaXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xXYW50UmVhZEVycm9yKSwgZmlsbF9idWZmZXIpCisKKyAgICAgICAgICAgICAgICAjIE5vdyByZWFkIGFsbCB0aGUgb3V0cHV0IGFuZCBkaXNjYXJkIGl0CisgICAgICAgICAgICAgICAgcy5zZXRibG9ja2luZyhUcnVlKQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCiAgICAgICAgIGRlZiB0ZXN0X2hhbmRzaGFrZV90aW1lb3V0KHNlbGYpOgpAQCAtMjUyMiw3ICsyODc0LDcgQEAKICAgICAgICAgICAgIGZpbmlzaCA9IEZhbHNlCiAKICAgICAgICAgICAgIGRlZiBzZXJ2ZSgpOgotICAgICAgICAgICAgICAgIHNlcnZlci5saXN0ZW4oNSkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIubGlzdGVuKCkKICAgICAgICAgICAgICAgICBzdGFydGVkLnNldCgpCiAgICAgICAgICAgICAgICAgY29ubnMgPSBbXQogICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBmaW5pc2g6CkBAIC0yNTc5LDcgKzI5MzEsNyBAQAogICAgICAgICAgICAgcGVlciA9IE5vbmUKICAgICAgICAgICAgIGRlZiBzZXJ2ZSgpOgogICAgICAgICAgICAgICAgIG5vbmxvY2FsIHJlbW90ZSwgcGVlcgotICAgICAgICAgICAgICAgIHNlcnZlci5saXN0ZW4oNSkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIubGlzdGVuKCkKICAgICAgICAgICAgICAgICAjIEJsb2NrIG9uIHRoZSBhY2NlcHQgYW5kIHdhaXQgb24gdGhlIGNvbm5lY3Rpb24gdG8gY2xvc2UuCiAgICAgICAgICAgICAgICAgZXZ0LnNldCgpCiAgICAgICAgICAgICAgICAgcmVtb3RlLCBwZWVyID0gc2VydmVyLmFjY2VwdCgpCkBAIC0yNjI5LDYgKzI5ODEsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibm8gc2hhcmVkIGNpcGhlciIsIHN0cihzZXJ2ZXIuY29ubl9lcnJvcnNbMF0pKQogCisgICAgICAgIGRlZiB0ZXN0X3ZlcnNpb25fYmFzaWMoc2VsZik6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIEJhc2ljIHRlc3RzIGZvciBTU0xTb2NrZXQudmVyc2lvbigpLgorICAgICAgICAgICAgTW9yZSB0ZXN0cyBhcmUgZG9uZSBpbiB0aGUgdGVzdF9wcm90b2NvbF8qKCkgbWV0aG9kcy4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIHdpdGggVGhyZWFkZWRFY2hvU2VydmVyKENFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzLnZlcnNpb24oKSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52ZXJzaW9uKCksICJUTFN2MSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzLnZlcnNpb24oKSwgTm9uZSkKKwogICAgICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wuSEFTX0VDREgsICJ0ZXN0IHJlcXVpcmVzIEVDREgtZW5hYmxlZCBPcGVuU1NMIikKICAgICAgICAgZGVmIHRlc3RfZGVmYXVsdF9lY2RoX2N1cnZlKHNlbGYpOgogICAgICAgICAgICAgIyBJc3N1ZSAjMjEwMTU6IGVsbGlwdGljIGN1cnZlLWJhc2VkIERpZmZpZSBIZWxsbWFuIGtleSBleGNoYW5nZQpAQCAtMjczOCw2ICszMTA1LDU1IEBACiAgICAgICAgICAgICBpZiAiQURIIiBub3QgaW4gcGFydHMgYW5kICJFREgiIG5vdCBpbiBwYXJ0cyBhbmQgIkRIRSIgbm90IGluIHBhcnRzOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm9uLURIIGNpcGhlcjogIiArIGNpcGhlclswXSkKIAorICAgICAgICBkZWYgdGVzdF9zZWxlY3RlZF9hbHBuX3Byb3RvY29sKHNlbGYpOgorICAgICAgICAgICAgIyBzZWxlY3RlZF9hbHBuX3Byb3RvY29sKCkgaXMgTm9uZSB1bmxlc3MgQUxQTiBpcyB1c2VkLgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY29udGV4dCwgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN0YXRzWydjbGllbnRfYWxwbl9wcm90b2NvbCddLCBOb25lKQorCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHNzbC5IQVNfQUxQTiwgIkFMUE4gc3VwcG9ydCByZXF1aXJlZCIpCisgICAgICAgIGRlZiB0ZXN0X3NlbGVjdGVkX2FscG5fcHJvdG9jb2xfaWZfc2VydmVyX3VzZXNfYWxwbihzZWxmKToKKyAgICAgICAgICAgICMgc2VsZWN0ZWRfYWxwbl9wcm90b2NvbCgpIGlzIE5vbmUgdW5sZXNzIEFMUE4gaXMgdXNlZCBieSB0aGUgY2xpZW50LgorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBjbGllbnRfY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9hbHBuX3Byb3RvY29scyhbJ2ZvbycsICdiYXInXSkKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN0YXRzWydjbGllbnRfYWxwbl9wcm90b2NvbCddLCBOb25lKQorCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHNzbC5IQVNfQUxQTiwgIkFMUE4gc3VwcG9ydCBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisgICAgICAgIGRlZiB0ZXN0X2FscG5fcHJvdG9jb2xzKHNlbGYpOgorICAgICAgICAgICAgc2VydmVyX3Byb3RvY29scyA9IFsnZm9vJywgJ2JhcicsICdtaWxrc2hha2UnXQorICAgICAgICAgICAgcHJvdG9jb2xfdGVzdHMgPSBbCisgICAgICAgICAgICAgICAgKFsnZm9vJywgJ2JhciddLCAnZm9vJyksCisgICAgICAgICAgICAgICAgKFsnYmFyJywgJ2ZvbyddLCAnZm9vJyksCisgICAgICAgICAgICAgICAgKFsnbWlsa3NoYWtlJ10sICdtaWxrc2hha2UnKSwKKyAgICAgICAgICAgICAgICAoWydodHRwLzMuMCcsICdodHRwLzQuMCddLCBOb25lKQorICAgICAgICAgICAgXQorICAgICAgICAgICAgZm9yIGNsaWVudF9wcm90b2NvbHMsIGV4cGVjdGVkIGluIHByb3RvY29sX3Rlc3RzOgorICAgICAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfYWxwbl9wcm90b2NvbHMoc2VydmVyX3Byb3RvY29scykKKyAgICAgICAgICAgICAgICBjbGllbnRfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgICAgICBjbGllbnRfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICAgICAgY2xpZW50X2NvbnRleHQuc2V0X2FscG5fcHJvdG9jb2xzKGNsaWVudF9wcm90b2NvbHMpCisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCisKKyAgICAgICAgICAgICAgICBtc2cgPSAiZmFpbGVkIHRyeWluZyAlcyAocykgYW5kICVzIChjKS5cbiIgXAorICAgICAgICAgICAgICAgICAgICAgICJ3YXMgZXhwZWN0aW5nICVzLCBidXQgZ290ICUlcyBmcm9tIHRoZSAlJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RyKHNlcnZlcl9wcm90b2NvbHMpLCBzdHIoY2xpZW50X3Byb3RvY29scyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihleHBlY3RlZCkpCisgICAgICAgICAgICAgICAgY2xpZW50X3Jlc3VsdCA9IHN0YXRzWydjbGllbnRfYWxwbl9wcm90b2NvbCddCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnRfcmVzdWx0LCBleHBlY3RlZCwgbXNnICUgKGNsaWVudF9yZXN1bHQsICJjbGllbnQiKSkKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfcmVzdWx0ID0gc3RhdHNbJ3NlcnZlcl9hbHBuX3Byb3RvY29scyddWy0xXSBcCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdGF0c1snc2VydmVyX2FscG5fcHJvdG9jb2xzJ10pIGVsc2UgJ25vdGhpbmcnCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfcmVzdWx0LCBleHBlY3RlZCwgbXNnICUgKHNlcnZlcl9yZXN1bHQsICJzZXJ2ZXIiKSkKKwogICAgICAgICBkZWYgdGVzdF9zZWxlY3RlZF9ucG5fcHJvdG9jb2woc2VsZik6CiAgICAgICAgICAgICAjIHNlbGVjdGVkX25wbl9wcm90b2NvbCgpIGlzIE5vbmUgdW5sZXNzIE5QTiBpcyB1c2VkCiAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQpAQCAtMjg3OCw2ICszMjk0LDIwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWFzb24sICdUTFNWMV9BTEVSVF9JTlRFUk5BTF9FUlJPUicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJUeXBlRXJyb3IiLCBzdGRlcnIuZ2V0dmFsdWUoKSkKIAorICAgICAgICBkZWYgdGVzdF9zaGFyZWRfY2lwaGVycyhzZWxmKToKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRSkKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNJR05JTkdfQ0EpCisgICAgICAgICAgICBjbGllbnRfY29udGV4dC5zZXRfY2lwaGVycygiUkM0IikKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9jaXBoZXJzKCJBRVM6UkM0IikKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCkKKyAgICAgICAgICAgIGNpcGhlcnMgPSBzdGF0c1snc2VydmVyX3NoYXJlZF9jaXBoZXJzJ11bMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oY2lwaGVycyksIDApCisgICAgICAgICAgICBmb3IgbmFtZSwgdGxzX3ZlcnNpb24sIGJpdHMgaW4gY2lwaGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJSQzQiLCBuYW1lLnNwbGl0KCItIikpCisKICAgICAgICAgZGVmIHRlc3RfcmVhZF93cml0ZV9hZnRlcl9jbG9zZV9yYWlzZXNfdmFsdWVycm9yKHNlbGYpOgogICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCiAgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKQEAgLTI4OTMsMjEgKzMzMjMsNDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlYWQsIDEwMjQpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy53cml0ZSwgYidoZWxsbycpCiAKKyAgICAgICAgZGVmIHRlc3Rfc2VuZGZpbGUoc2VsZik6CisgICAgICAgICAgICBURVNUX0RBVEEgPSBiIngiICogNTEyCisgICAgICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShURVNUX0RBVEEpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQorICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjaGF0dHk9RmFsc2UpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgcy5zZW5kZmlsZShmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJlY3YoMTAyNCksIFRFU1RfREFUQSkKKwogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9RmFsc2UpOgogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCiAgICAgICAgIHBsYXRzID0gewogICAgICAgICAgICAgJ0xpbnV4JzogcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uLAogICAgICAgICAgICAgJ01hYyc6IHBsYXRmb3JtLm1hY192ZXIsCiAgICAgICAgICAgICAnV2luZG93cyc6IHBsYXRmb3JtLndpbjMyX3ZlciwKICAgICAgICAgfQotICAgICAgICBmb3IgbmFtZSwgZnVuYyBpbiBwbGF0cy5pdGVtcygpOgotICAgICAgICAgICAgcGxhdCA9IGZ1bmMoKQotICAgICAgICAgICAgaWYgcGxhdCBhbmQgcGxhdFswXToKLSAgICAgICAgICAgICAgICBwbGF0ID0gJyVzICVyJyAlIChuYW1lLCBwbGF0KQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwbGF0ID0gcmVwcihwbGF0Zm9ybS5wbGF0Zm9ybSgpKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygKKyAgICAgICAgICAgICAgICAnaWdub3JlJywKKyAgICAgICAgICAgICAgICAnZGlzdFwoXCkgYW5kIGxpbnV4X2Rpc3RyaWJ1dGlvblwoXCkgJworICAgICAgICAgICAgICAgICdmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQgLionLAorICAgICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICApCisgICAgICAgICAgICBmb3IgbmFtZSwgZnVuYyBpbiBwbGF0cy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHBsYXQgPSBmdW5jKCkKKyAgICAgICAgICAgICAgICBpZiBwbGF0IGFuZCBwbGF0WzBdOgorICAgICAgICAgICAgICAgICAgICBwbGF0ID0gJyVzICVyJyAlIChuYW1lLCBwbGF0KQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwbGF0ID0gcmVwcihwbGF0Zm9ybS5wbGF0Zm9ybSgpKQogICAgICAgICBwcmludCgidGVzdF9zc2w6IHRlc3Rpbmcgd2l0aCAlciAlciIgJQogICAgICAgICAgICAgKHNzbC5PUEVOU1NMX1ZFUlNJT04sIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTykpCiAgICAgICAgIHByaW50KCIgICAgICAgICAgdW5kZXIgJXMiICUgcGxhdCkKQEAgLTI5MjYsMTAgKzMzODEsMTEgQEAKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlICVyIiAlIGZpbGVuYW1lKQogCi0gICAgdGVzdHMgPSBbQ29udGV4dFRlc3RzLCBCYXNpY1NvY2tldFRlc3RzLCBTU0xFcnJvclRlc3RzXQorICAgIHRlc3RzID0gW0NvbnRleHRUZXN0cywgQmFzaWNTb2NrZXRUZXN0cywgU1NMRXJyb3JUZXN0cywgTWVtb3J5QklPVGVzdHNdCiAKICAgICBpZiBzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKToKICAgICAgICAgdGVzdHMuYXBwZW5kKE5ldHdvcmtlZFRlc3RzKQorICAgICAgICB0ZXN0cy5hcHBlbmQoTmV0d29ya2VkQklPVGVzdHMpCiAKICAgICBpZiBfaGF2ZV90aHJlYWRzOgogICAgICAgICB0aHJlYWRfaW5mbyA9IHN1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RhcnRmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9zdGFydGZpbGUucHkKaW5kZXggNDNhYmY5Yi4uZjU5MjUyZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdGFydGZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdGFydGZpbGUucHkKQEAgLTMwLDggKzMwLDUgQEAKICAgICAgICAgICAgIHN0YXJ0ZmlsZShlbXB0eSkKICAgICAgICAgICAgIHN0YXJ0ZmlsZShlbXB0eSwgIm9wZW4iKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fPT0iX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CmluZGV4IGFmNmNlZDQuLmYxYTU5MzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0YXQucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBvcworaW1wb3J0IHN5cwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCiBjX3N0YXQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdzdGF0JywgZnJlc2g9Wydfc3RhdCddKQpAQCAtNTIsNiArNTMsMjYgQEAKICAgICAgICAgJ1NfSVdPVEgnOiAwbzAwMiwKICAgICAgICAgJ1NfSVhPVEgnOiAwbzAwMX0KIAorICAgICMgZGVmaW5lZCBieSB0aGUgV2luZG93cyBBUEkgZG9jdW1lbnRhdGlvbgorICAgIGZpbGVfYXR0cmlidXRlcyA9IHsKKyAgICAgICAgJ0ZJTEVfQVRUUklCVVRFX0FSQ0hJVkUnOiAzMiwKKyAgICAgICAgJ0ZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQnOiAyMDQ4LAorICAgICAgICAnRklMRV9BVFRSSUJVVEVfREVWSUNFJzogNjQsCisgICAgICAgICdGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlknOiAxNiwKKyAgICAgICAgJ0ZJTEVfQVRUUklCVVRFX0VOQ1JZUFRFRCc6IDE2Mzg0LAorICAgICAgICAnRklMRV9BVFRSSUJVVEVfSElEREVOJzogMiwKKyAgICAgICAgJ0ZJTEVfQVRUUklCVVRFX0lOVEVHUklUWV9TVFJFQU0nOiAzMjc2OCwKKyAgICAgICAgJ0ZJTEVfQVRUUklCVVRFX05PUk1BTCc6IDEyOCwKKyAgICAgICAgJ0ZJTEVfQVRUUklCVVRFX05PVF9DT05URU5UX0lOREVYRUQnOiA4MTkyLAorICAgICAgICAnRklMRV9BVFRSSUJVVEVfTk9fU0NSVUJfREFUQSc6IDEzMTA3MiwKKyAgICAgICAgJ0ZJTEVfQVRUUklCVVRFX09GRkxJTkUnOiA0MDk2LAorICAgICAgICAnRklMRV9BVFRSSUJVVEVfUkVBRE9OTFknOiAxLAorICAgICAgICAnRklMRV9BVFRSSUJVVEVfUkVQQVJTRV9QT0lOVCc6IDEwMjQsCisgICAgICAgICdGSUxFX0FUVFJJQlVURV9TUEFSU0VfRklMRSc6IDUxMiwKKyAgICAgICAgJ0ZJTEVfQVRUUklCVVRFX1NZU1RFTSc6IDQsCisgICAgICAgICdGSUxFX0FUVFJJQlVURV9URU1QT1JBUlknOiAyNTYsCisgICAgICAgICdGSUxFX0FUVFJJQlVURV9WSVJUVUFMJzogNjU1MzZ9CisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCkBAIC0xODUsNiArMjA2LDE0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoZnVuYykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoMCksIDApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRklMRV9BVFRSSUJVVEVfKiBjb25zdGFudHMgYXJlIFdpbjMyIHNwZWNpZmljIikKKyAgICBkZWYgdGVzdF9maWxlX2F0dHJpYnV0ZV9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNvcnRlZChzZWxmLmZpbGVfYXR0cmlidXRlcy5pdGVtcygpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYuc3RhdG1vZCwga2V5KSwga2V5KQorICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbW9kdmFsdWUsIGtleSkKKwogCiBjbGFzcyBUZXN0RmlsZW1vZGVDU3RhdChUZXN0RmlsZW1vZGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzdGF0bW9kID0gY19zdGF0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cmluZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RyaW5nLnB5CmluZGV4IDU3OTYzYmYuLjcwNDM5ZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RyaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyaW5nLnB5CkBAIC0xLDE5ICsxLDI0IEBACi1pbXBvcnQgdW5pdHRlc3QsIHN0cmluZwotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiAKIGNsYXNzIE1vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYXR0cnMoc2VsZik6Ci0gICAgICAgIHN0cmluZy53aGl0ZXNwYWNlCi0gICAgICAgIHN0cmluZy5hc2NpaV9sb3dlcmNhc2UKLSAgICAgICAgc3RyaW5nLmFzY2lpX3VwcGVyY2FzZQotICAgICAgICBzdHJpbmcuYXNjaWlfbGV0dGVycwotICAgICAgICBzdHJpbmcuZGlnaXRzCi0gICAgICAgIHN0cmluZy5oZXhkaWdpdHMKLSAgICAgICAgc3RyaW5nLm9jdGRpZ2l0cwotICAgICAgICBzdHJpbmcucHVuY3R1YXRpb24KLSAgICAgICAgc3RyaW5nLnByaW50YWJsZQorICAgICAgICAjIFdoaWxlIHRoZSBleGFjdCBvcmRlciBvZiB0aGUgaXRlbXMgaW4gdGhlc2UgYXR0cmlidXRlcyBpcyBub3QKKyAgICAgICAgIyB0ZWNobmljYWxseSBwYXJ0IG9mIHRoZSAibGFuZ3VhZ2Ugc3BlYyIsIGluIHByYWN0aWNlIHRoZXJlIGlzIGFsbW9zdAorICAgICAgICAjIGNlcnRhaW5seSB1c2VyIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSBvcmRlciwgc28gZGUtZmFjdG8gaXQgKmlzKgorICAgICAgICAjIHBhcnQgb2YgdGhlIHNwZWMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLndoaXRlc3BhY2UsICcgXHRcblxyXHgwYlx4MGMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5hc2NpaV9sb3dlcmNhc2UsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmFzY2lpX3VwcGVyY2FzZSwgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcuYXNjaWlfbGV0dGVycywgc3RyaW5nLmFzY2lpX2xvd2VyY2FzZSArIHN0cmluZy5hc2NpaV91cHBlcmNhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmRpZ2l0cywgJzAxMjM0NTY3ODknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5oZXhkaWdpdHMsIHN0cmluZy5kaWdpdHMgKyAnYWJjZGVmQUJDREVGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcub2N0ZGlnaXRzLCAnMDEyMzQ1NjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5wdW5jdHVhdGlvbiwgJyEiIyQlJlwnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5wcmludGFibGUsIHN0cmluZy5kaWdpdHMgKyBzdHJpbmcuYXNjaWlfbG93ZXJjYXNlICsgc3RyaW5nLmFzY2lpX3VwcGVyY2FzZSArIHN0cmluZy5wdW5jdHVhdGlvbiArIHN0cmluZy53aGl0ZXNwYWNlKQogCiAgICAgZGVmIHRlc3RfY2Fwd29yZHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmNhcHdvcmRzKCdhYmMgZGVmIGdoaScpLCAnQWJjIERlZiBHaGknKQpAQCAtNDMsOCArNDgsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoIi17Zm9ybWF0X3N0cmluZ30tIiwgZm9ybWF0X3N0cmluZz0ndGVzdCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICctdGVzdC0nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZm10LmZvcm1hdCwgIi17Zm9ybWF0X3N0cmluZ30tIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KGFyZz0ndGVzdCcsIGZvcm1hdF9zdHJpbmc9Ii17YXJnfS0iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnLXRlc3QtJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoRGVwcmVjYXRpb25XYXJuaW5nLCAiZm9ybWF0X3N0cmluZyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KGFyZz0ndGVzdCcsIGZvcm1hdF9zdHJpbmc9Ii17YXJnfS0iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy10ZXN0LScpCiAKICAgICBkZWYgdGVzdF9hdXRvX251bWJlcmluZyhzZWxmKToKICAgICAgICAgZm10ID0gc3RyaW5nLkZvcm1hdHRlcigpCkBAIC0xODMsOCArMTg5LDI0NSBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCJyZWN1cnNpb24iLCBzdHIoZXJyLmV4Y2VwdGlvbikpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KE1vZHVsZVRlc3QpCisjIFRlbXBsYXRlIHRlc3RzIChmb3JtZXJseSBob3VzZWQgaW4gdGVzdF9wZXAyOTIucHkpCiAKLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKK2NsYXNzIEJhZzoKKyAgICBwYXNzCisKK2NsYXNzIE1hcHBpbmc6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBvYmogPSBzZWxmCisgICAgICAgIGZvciBwYXJ0IGluIG5hbWUuc3BsaXQoJy4nKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgcGFydCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihuYW1lKQorICAgICAgICByZXR1cm4gb2JqCisKKworY2xhc3MgVGVzdFRlbXBsYXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yZWd1bGFyX3RlbXBsYXRlcyhzZWxmKToKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiAkd2hhdCB3b3J0aCAkJDEwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtIHdvcnRoICQxMDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5zdWJzdGl0dXRlLCBkaWN0KHdobz0ndGltJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgVGVtcGxhdGUuc3Vic3RpdHV0ZSkKKworICAgIGRlZiB0ZXN0X3JlZ3VsYXJfdGVtcGxhdGVzX3dpdGhfYnJhY2VzKHNlbGYpOgorICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHt3aGF0fSBmb3IgJHttZWFsfScpCisgICAgICAgIGQgPSBkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJywgbWVhbD0nZGlubmVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN1YnN0aXR1dGUoZCksICd0aW0gbGlrZXMgaGFtIGZvciBkaW5uZXInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5zdWJzdGl0dXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJykpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiAkJHdoYXQgd29ydGggJCQxMDAnKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKSwKKyAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgJHdoYXQgd29ydGggJDEwMCcpCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkJCcpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJykpLCAndGltIGxpa2VzICQnKQorCisgICAgZGVmIHRlc3RfcGVyY2VudHMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzID0gVGVtcGxhdGUoJyUoZm9vKXMgJGZvbyAke2Zvb30nKQorICAgICAgICBkID0gZGljdChmb289J2JheicpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkKSwgJyUoZm9vKXMgYmF6IGJheicpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGQpLCAnJShmb28pcyBiYXogYmF6JykKKworICAgIGRlZiB0ZXN0X3N0cmluZ2lmaWNhdGlvbihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSBUZW1wbGF0ZSgndGltIGhhcyBlYXRlbiAkY291bnQgYmFncyBvZiBoYW0gdG9kYXknKQorICAgICAgICBkID0gZGljdChjb3VudD03KQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZCksICd0aW0gaGFzIGVhdGVuIDcgYmFncyBvZiBoYW0gdG9kYXknKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkKSwgJ3RpbSBoYXMgZWF0ZW4gNyBiYWdzIG9mIGhhbSB0b2RheScpCisgICAgICAgIHMgPSBUZW1wbGF0ZSgndGltIGhhcyBlYXRlbiAke2NvdW50fSBiYWdzIG9mIGhhbSB0b2RheScpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkKSwgJ3RpbSBoYXMgZWF0ZW4gNyBiYWdzIG9mIGhhbSB0b2RheScpCisKKyAgICBkZWYgdGVzdF90dXBsZWFyZ3Moc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gYXRlICR7bWVhbH0nKQorICAgICAgICBkID0gZGljdCh3aG89KCd0aW0nLCAnZnJlZCcpLCBtZWFsPSgnaGFtJywgJ2t1bmcgcGFvJykpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkKSwgIigndGltJywgJ2ZyZWQnKSBhdGUgKCdoYW0nLCAna3VuZyBwYW8nKSIpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGQpLCAiKCd0aW0nLCAnZnJlZCcpIGF0ZSAoJ2hhbScsICdrdW5nIHBhbycpIikKKworICAgIGRlZiB0ZXN0X1NhZmVUZW1wbGF0ZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAke3doYXR9IGZvciAke21lYWx9JykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdCh3aG89J3RpbScpKSwgJ3RpbSBsaWtlcyAke3doYXR9IGZvciAke21lYWx9JykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdCh3aGF0PSdoYW0nKSksICckd2hvIGxpa2VzIGhhbSBmb3IgJHttZWFsfScpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hhdD0naGFtJywgbWVhbD0nZGlubmVyJykpLAorICAgICAgICAgICAnJHdobyBsaWtlcyBoYW0gZm9yIGRpbm5lcicpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCisgICAgICAgICAgICd0aW0gbGlrZXMgaGFtIGZvciAke21lYWx9JykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScsIG1lYWw9J2Rpbm5lcicpKSwKKyAgICAgICAgICAgJ3RpbSBsaWtlcyBoYW0gZm9yIGRpbm5lcicpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3BsYWNlaG9sZGVycyhzZWxmKToKKyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICQnKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgcy5zdWJzdGl0dXRlLCBkaWN0KHdobz0ndGltJykpCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAke3doYXQpJykKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdCh3aG89J3RpbScpKQorICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJDEwMCcpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIGRpY3Qod2hvPSd0aW0nKSkKKworICAgIGRlZiB0ZXN0X2lkcGF0dGVybl9vdmVycmlkZShzZWxmKToKKyAgICAgICAgY2xhc3MgUGF0aFBhdHRlcm4oVGVtcGxhdGUpOgorICAgICAgICAgICAgaWRwYXR0ZXJuID0gcidbX2Etel1bLl9hLXowLTldKicKKyAgICAgICAgbSA9IE1hcHBpbmcoKQorICAgICAgICBtLmJhZyA9IEJhZygpCisgICAgICAgIG0uYmFnLmZvbyA9IEJhZygpCisgICAgICAgIG0uYmFnLmZvby53aG8gPSAndGltJworICAgICAgICBtLmJhZy53aGF0ID0gJ2hhbScKKyAgICAgICAgcyA9IFBhdGhQYXR0ZXJuKCckYmFnLmZvby53aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mICRiYWcud2hhdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKG0pLCAndGltIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiBoYW0nKQorCisgICAgZGVmIHRlc3RfcGF0dGVybl9vdmVycmlkZShzZWxmKToKKyAgICAgICAgY2xhc3MgTXlQYXR0ZXJuKFRlbXBsYXRlKToKKyAgICAgICAgICAgIHBhdHRlcm4gPSByIiIiCisgICAgICAgICAgICAoP1A8ZXNjYXBlZD5AezJ9KSAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICBAKD9QPG5hbWVkPltfYS16XVsuX2EtejAtOV0qKSAgICAgICB8CisgICAgICAgICAgICBAeyg/UDxicmFjZWQ+W19hLXpdWy5fYS16MC05XSopfSAgICB8CisgICAgICAgICAgICAoP1A8aW52YWxpZD5AKQorICAgICAgICAgICAgIiIiCisgICAgICAgIG0gPSBNYXBwaW5nKCkKKyAgICAgICAgbS5iYWcgPSBCYWcoKQorICAgICAgICBtLmJhZy5mb28gPSBCYWcoKQorICAgICAgICBtLmJhZy5mb28ud2hvID0gJ3RpbScKKyAgICAgICAgbS5iYWcud2hhdCA9ICdoYW0nCisgICAgICAgIHMgPSBNeVBhdHRlcm4oJ0BiYWcuZm9vLndobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgQGJhZy53aGF0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN1YnN0aXR1dGUobSksICd0aW0gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIGhhbScpCisKKyAgICAgICAgY2xhc3MgQmFkUGF0dGVybihUZW1wbGF0ZSk6CisgICAgICAgICAgICBwYXR0ZXJuID0gciIiIgorICAgICAgICAgICAgKD9QPGJhZG5hbWU+LiopICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKD9QPGVzY2FwZWQ+QHsyfSkgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgQCg/UDxuYW1lZD5bX2Etel1bLl9hLXowLTldKikgICAgICAgfAorICAgICAgICAgICAgQHsoP1A8YnJhY2VkPltfYS16XVsuX2EtejAtOV0qKX0gICAgfAorICAgICAgICAgICAgKD9QPGludmFsaWQ+QCkgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgIiIiCisgICAgICAgIHMgPSBCYWRQYXR0ZXJuKCdAYmFnLmZvby53aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIEBiYWcud2hhdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMuc2FmZV9zdWJzdGl0dXRlLCB7fSkKKworICAgIGRlZiB0ZXN0X2JyYWNlZF9vdmVycmlkZShzZWxmKToKKyAgICAgICAgY2xhc3MgTXlUZW1wbGF0ZShUZW1wbGF0ZSk6CisgICAgICAgICAgICBwYXR0ZXJuID0gciIiIgorICAgICAgICAgICAgXCQoPzoKKyAgICAgICAgICAgICAgKD9QPGVzY2FwZWQ+JCkgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICg/UDxuYW1lZD5bX2Etel1bX2EtejAtOV0qKSAgICAgICAgfAorICAgICAgICAgICAgICBAQCg/UDxicmFjZWQ+W19hLXpdW19hLXowLTldKilAQCAgIHwKKyAgICAgICAgICAgICAgKD9QPGludmFsaWQ+KSAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICkKKyAgICAgICAgICAgIiIiCisKKyAgICAgICAgdG1wbCA9ICdQeUNvbiBpbiAkQEBsb2NhdGlvbkBAJworICAgICAgICB0ID0gTXlUZW1wbGF0ZSh0bXBsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgdC5zdWJzdGl0dXRlLCB7fSkKKyAgICAgICAgdmFsID0gdC5zdWJzdGl0dXRlKHsnbG9jYXRpb24nOiAnQ2xldmVsYW5kJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAnUHlDb24gaW4gQ2xldmVsYW5kJykKKworICAgIGRlZiB0ZXN0X2JyYWNlZF9vdmVycmlkZV9zYWZlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVRlbXBsYXRlKFRlbXBsYXRlKToKKyAgICAgICAgICAgIHBhdHRlcm4gPSByIiIiCisgICAgICAgICAgICBcJCg/OgorICAgICAgICAgICAgICAoP1A8ZXNjYXBlZD4kKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgKD9QPG5hbWVkPltfYS16XVtfYS16MC05XSopICAgICAgICB8CisgICAgICAgICAgICAgIEBAKD9QPGJyYWNlZD5bX2Etel1bX2EtejAtOV0qKUBAICAgfAorICAgICAgICAgICAgICAoP1A8aW52YWxpZD4pICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgKQorICAgICAgICAgICAiIiIKKworICAgICAgICB0bXBsID0gJ1B5Q29uIGluICRAQGxvY2F0aW9uQEAnCisgICAgICAgIHQgPSBNeVRlbXBsYXRlKHRtcGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zYWZlX3N1YnN0aXR1dGUoKSwgdG1wbCkKKyAgICAgICAgdmFsID0gdC5zYWZlX3N1YnN0aXR1dGUoeydsb2NhdGlvbic6ICdDbGV2ZWxhbmQnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICdQeUNvbiBpbiBDbGV2ZWxhbmQnKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF93aXRoX25vX2xpbmVzKHNlbGYpOgorICAgICAgICAjIFRoZSBlcnJvciBmb3JtYXR0aW5nIGZvciBpbnZhbGlkIHRlbXBsYXRlcworICAgICAgICAjIGhhcyBhIHNwZWNpYWwgY2FzZSBmb3Igbm8gZGF0YSB0aGF0IHRoZSBkZWZhdWx0CisgICAgICAgICMgcGF0dGVybiBjYW4ndCB0cmlnZ2VyIChhbHdheXMgaGFzIGF0IGxlYXN0ICckJykKKyAgICAgICAgIyBTbyB3ZSBjcmFmdCBhIHBhdHRlcm4gdGhhdCBpcyBhbHdheXMgaW52YWxpZAorICAgICAgICAjIHdpdGggbm8gbGVhZGluZyBkYXRhLgorICAgICAgICBjbGFzcyBNeVRlbXBsYXRlKFRlbXBsYXRlKToKKyAgICAgICAgICAgIHBhdHRlcm4gPSByIiIiCisgICAgICAgICAgICAgICg/UDxpbnZhbGlkPikgfAorICAgICAgICAgICAgICB1bnJlYWNoYWJsZSgKKyAgICAgICAgICAgICAgICAoP1A8bmFtZWQ+KSAgIHwKKyAgICAgICAgICAgICAgICAoP1A8YnJhY2VkPikgIHwKKyAgICAgICAgICAgICAgICAoP1A8ZXNjYXBlZD4pCisgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzID0gTXlUZW1wbGF0ZSgnJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBzLnN1YnN0aXR1dGUoe30pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpbmUgMSwgY29sIDEnLCBzdHIoZXJyLmV4Y2VwdGlvbikpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICR3aGF0JykKKyAgICAgICAgZCA9IGRpY3Qod2hvPSd0XHhmZm0nLCB3aGF0PSdmXHhmZVxmZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3Vic3RpdHV0ZShkKSwgJ3RceGZmbSBsaWtlcyBmXHhmZVx4MGNlZCcpCisKKyAgICBkZWYgdGVzdF9rZXl3b3JkX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkd2hhdCcpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZSh3aG89J3RpbScsIHdoYXQ9J2hhbScpLCAndGltIGxpa2VzIGhhbScpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJyksIHdoYXQ9J2hhbScpLCAndGltIGxpa2VzIGhhbScpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkaWN0KHdobz0nZnJlZCcsIHdoYXQ9J2t1bmcgcGFvJyksCisgICAgICAgICAgICAgICAgICAgICAgICB3aG89J3RpbScsIHdoYXQ9J2hhbScpLAorICAgICAgICAgICAndGltIGxpa2VzIGhhbScpCisgICAgICAgIHMgPSBUZW1wbGF0ZSgndGhlIG1hcHBpbmcgaXMgJG1hcHBpbmcnKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdChmb289J25vbmUnKSwgbWFwcGluZz0nYm96bycpLAorICAgICAgICAgICAndGhlIG1hcHBpbmcgaXMgYm96bycpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkaWN0KG1hcHBpbmc9J29uZScpLCBtYXBwaW5nPSd0d28nKSwKKyAgICAgICAgICAgJ3RoZSBtYXBwaW5nIGlzIHR3bycpCisKKyAgICAgICAgcyA9IFRlbXBsYXRlKCd0aGUgc2VsZiBpcyAkc2VsZicpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShzZWxmPSdib3pvJyksICd0aGUgc2VsZiBpcyBib3pvJykKKworICAgIGRlZiB0ZXN0X2tleXdvcmRfYXJndW1lbnRzX3NhZmUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHdoYXQnKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZSh3aG89J3RpbScsIHdoYXQ9J2hhbScpLCAndGltIGxpa2VzIGhhbScpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nKSwgd2hhdD0naGFtJyksICd0aW0gbGlrZXMgaGFtJykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdCh3aG89J2ZyZWQnLCB3aGF0PSdrdW5nIHBhbycpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2hvPSd0aW0nLCB3aGF0PSdoYW0nKSwKKyAgICAgICAgICAgJ3RpbSBsaWtlcyBoYW0nKQorICAgICAgICBzID0gVGVtcGxhdGUoJ3RoZSBtYXBwaW5nIGlzICRtYXBwaW5nJykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZGljdChmb289J25vbmUnKSwgbWFwcGluZz0nYm96bycpLAorICAgICAgICAgICAndGhlIG1hcHBpbmcgaXMgYm96bycpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3QobWFwcGluZz0nb25lJyksIG1hcHBpbmc9J3R3bycpLAorICAgICAgICAgICAndGhlIG1hcHBpbmcgaXMgdHdvJykKKyAgICAgICAgZCA9IGRpY3QobWFwcGluZz0nb25lJykKKyAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgcy5zdWJzdGl0dXRlLCBkLCB7fSkKKyAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgcy5zYWZlX3N1YnN0aXR1dGUsIGQsIHt9KQorCisgICAgICAgIHMgPSBUZW1wbGF0ZSgndGhlIHNlbGYgaXMgJHNlbGYnKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShzZWxmPSdib3pvJyksICd0aGUgc2VsZiBpcyBib3pvJykKKworICAgIGRlZiB0ZXN0X2RlbGltaXRlcl9vdmVycmlkZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIGNsYXNzIEFtcGVyc2FuZFRlbXBsYXRlKFRlbXBsYXRlKToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICcmJworICAgICAgICBzID0gQW1wZXJzYW5kVGVtcGxhdGUoJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJicpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShnaWZ0PSdidWQnLCB3aG89J3lvdScpLCAndGhpcyBidWQgaXMgZm9yIHlvdSAmJykKKyAgICAgICAgcmFpc2VzKEtleUVycm9yLCBzLnN1YnN0aXR1dGUpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGdpZnQ9J2J1ZCcsIHdobz0neW91JyksICd0aGlzIGJ1ZCBpcyBmb3IgeW91ICYnKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZSgpLCAndGhpcyAmZ2lmdCBpcyBmb3IgJnt3aG99ICYnKQorICAgICAgICBzID0gQW1wZXJzYW5kVGVtcGxhdGUoJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJykKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdChnaWZ0PSdidWQnLCB3aG89J3lvdScpKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZSgpLCAndGhpcyAmZ2lmdCBpcyBmb3IgJnt3aG99ICYnKQorCisgICAgICAgIGNsYXNzIFBpZURlbGltcyhUZW1wbGF0ZSk6CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAnQCcKKyAgICAgICAgcyA9IFBpZURlbGltcygnQHdobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgQHt3aGF0fSB3b3J0aCAkMTAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN1YnN0aXR1dGUoZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGltIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiBoYW0gd29ydGggJDEwMCcpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyaW5ncHJlcC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RyaW5ncHJlcC5weQppbmRleCBlNzYzNjM1Li5kNGI0YTEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5CkBAIC0yLDcgKzIsNiBAQAogIyBTaW5jZSB3ZSBkb24ndCBoYXZlIHRoZW0sIHRoaXMgdGVzdCBjaGVja3Mgb25seSBhIGZldyBjb2RlIHBvaW50cy4KIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogZnJvbSBzdHJpbmdwcmVwIGltcG9ydCAqCiAKQEAgLTg5LDggKzg4LDUgQEAKICAgICAgICAgIyAgICAgaC51cGRhdGUoZGF0YSkKICAgICAgICAgIyAgICAgcHJpbnQgcCwgaC5oZXhkaWdlc3QoKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyaW5ncHJlcFRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cmxpdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RybGl0LnB5CmluZGV4IGQwMTMyMmYuLjg3Y2ZmZTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RybGl0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RybGl0LnB5CkBAIC0zMiw3ICszMiw2IEBACiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRlc3Quc3VwcG9ydAogCiAKIFRFTVBMQVRFID0gciIiIiMgY29kaW5nOiAlcwpAQCAtMTk5LDggKzE5OCw1IEBACiAgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RpbmcoImxhdGluOSIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5CmluZGV4IGMxZGQxOTUuLjg1MTI2ZTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weQpAQCAtMTkwLDcgKzE5MCw3IEBACiAKICAgICBkZWYgdGVzdF93aGl0ZXNwYWNlX3N1YnN0aXR1dGlvbihzZWxmKToKICAgICAgICAgIyBXaGVuIHBhdHRlcm4gY29udGFpbnMgd2hpdGVzcGFjZSwgbWFrZSBzdXJlIGl0IGlzIHRha2VuIGludG8gYWNjb3VudAotICAgICAgICAjIHNvIGFzIHRvIG5vdCBhbGxvdyB0byBzdWJwYXR0ZXJucyB0byBlbmQgdXAgbmV4dCB0byBlYWNoIG90aGVyIGFuZAorICAgICAgICAjIHNvIGFzIHRvIG5vdCBhbGxvdyBzdWJwYXR0ZXJucyB0byBlbmQgdXAgbmV4dCB0byBlYWNoIG90aGVyIGFuZAogICAgICAgICAjICJzdGVhbCIgY2hhcmFjdGVycyBmcm9tIGVhY2ggb3RoZXIuCiAgICAgICAgIHBhdHRlcm4gPSBzZWxmLnRpbWVfcmUucGF0dGVybignJWogJUgnKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlLm1hdGNoKHBhdHRlcm4sICIxODAiKSkKQEAgLTQ5NiwxNCArNDk2LDE0IEBACiAgICAgZGVmIHRlc3Rfd2Vla18wKHNlbGYpOgogICAgICAgICBkZWYgY2hlY2sodmFsdWUsIGZvcm1hdCwgKmV4cGVjdGVkKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHZhbHVlLCBmb3JtYXQpWzotMV0sIGV4cGVjdGVkKQotICAgICAgICBjaGVjaygnMjAxNSAwIDAnLCAnJVkgJVUgJXcnLCAyMDE0LCAxMiwgMjgsIDAsIDAsIDAsIDYsIC0zKQorICAgICAgICBjaGVjaygnMjAxNSAwIDAnLCAnJVkgJVUgJXcnLCAyMDE0LCAxMiwgMjgsIDAsIDAsIDAsIDYsIDM2MikKICAgICAgICAgY2hlY2soJzIwMTUgMCAwJywgJyVZICVXICV3JywgMjAxNSwgMSwgNCwgMCwgMCwgMCwgNiwgNCkKLSAgICAgICAgY2hlY2soJzIwMTUgMCAxJywgJyVZICVVICV3JywgMjAxNCwgMTIsIDI5LCAwLCAwLCAwLCAwLCAtMikKLSAgICAgICAgY2hlY2soJzIwMTUgMCAxJywgJyVZICVXICV3JywgMjAxNCwgMTIsIDI5LCAwLCAwLCAwLCAwLCAtMikKLSAgICAgICAgY2hlY2soJzIwMTUgMCAyJywgJyVZICVVICV3JywgMjAxNCwgMTIsIDMwLCAwLCAwLCAwLCAxLCAtMSkKLSAgICAgICAgY2hlY2soJzIwMTUgMCAyJywgJyVZICVXICV3JywgMjAxNCwgMTIsIDMwLCAwLCAwLCAwLCAxLCAtMSkKLSAgICAgICAgY2hlY2soJzIwMTUgMCAzJywgJyVZICVVICV3JywgMjAxNCwgMTIsIDMxLCAwLCAwLCAwLCAyLCAwKQotICAgICAgICBjaGVjaygnMjAxNSAwIDMnLCAnJVkgJVcgJXcnLCAyMDE0LCAxMiwgMzEsIDAsIDAsIDAsIDIsIDApCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMScsICclWSAlVSAldycsIDIwMTQsIDEyLCAyOSwgMCwgMCwgMCwgMCwgMzYzKQorICAgICAgICBjaGVjaygnMjAxNSAwIDEnLCAnJVkgJVcgJXcnLCAyMDE0LCAxMiwgMjksIDAsIDAsIDAsIDAsIDM2MykKKyAgICAgICAgY2hlY2soJzIwMTUgMCAyJywgJyVZICVVICV3JywgMjAxNCwgMTIsIDMwLCAwLCAwLCAwLCAxLCAzNjQpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMicsICclWSAlVyAldycsIDIwMTQsIDEyLCAzMCwgMCwgMCwgMCwgMSwgMzY0KQorICAgICAgICBjaGVjaygnMjAxNSAwIDMnLCAnJVkgJVUgJXcnLCAyMDE0LCAxMiwgMzEsIDAsIDAsIDAsIDIsIDM2NSkKKyAgICAgICAgY2hlY2soJzIwMTUgMCAzJywgJyVZICVXICV3JywgMjAxNCwgMTIsIDMxLCAwLCAwLCAwLCAyLCAzNjUpCiAgICAgICAgIGNoZWNrKCcyMDE1IDAgNCcsICclWSAlVSAldycsIDIwMTUsIDEsIDEsIDAsIDAsIDAsIDMsIDEpCiAgICAgICAgIGNoZWNrKCcyMDE1IDAgNCcsICclWSAlVyAldycsIDIwMTUsIDEsIDEsIDAsIDAsIDAsIDMsIDEpCiAgICAgICAgIGNoZWNrKCcyMDE1IDAgNScsICclWSAlVSAldycsIDIwMTUsIDEsIDIsIDAsIDAsIDAsIDQsIDIpCkBAIC01MTEsNiArNTExLDIwIEBACiAgICAgICAgIGNoZWNrKCcyMDE1IDAgNicsICclWSAlVSAldycsIDIwMTUsIDEsIDMsIDAsIDAsIDAsIDUsIDMpCiAgICAgICAgIGNoZWNrKCcyMDE1IDAgNicsICclWSAlVyAldycsIDIwMTUsIDEsIDMsIDAsIDAsIDAsIDUsIDMpCiAKKyAgICAgICAgY2hlY2soJzIwMDkgMCAwJywgJyVZICVVICV3JywgMjAwOCwgMTIsIDI4LCAwLCAwLCAwLCA2LCAzNjMpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgMCcsICclWSAlVyAldycsIDIwMDksIDEsIDQsIDAsIDAsIDAsIDYsIDQpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgMScsICclWSAlVSAldycsIDIwMDgsIDEyLCAyOSwgMCwgMCwgMCwgMCwgMzY0KQorICAgICAgICBjaGVjaygnMjAwOSAwIDEnLCAnJVkgJVcgJXcnLCAyMDA4LCAxMiwgMjksIDAsIDAsIDAsIDAsIDM2NCkKKyAgICAgICAgY2hlY2soJzIwMDkgMCAyJywgJyVZICVVICV3JywgMjAwOCwgMTIsIDMwLCAwLCAwLCAwLCAxLCAzNjUpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgMicsICclWSAlVyAldycsIDIwMDgsIDEyLCAzMCwgMCwgMCwgMCwgMSwgMzY1KQorICAgICAgICBjaGVjaygnMjAwOSAwIDMnLCAnJVkgJVUgJXcnLCAyMDA4LCAxMiwgMzEsIDAsIDAsIDAsIDIsIDM2NikKKyAgICAgICAgY2hlY2soJzIwMDkgMCAzJywgJyVZICVXICV3JywgMjAwOCwgMTIsIDMxLCAwLCAwLCAwLCAyLCAzNjYpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgNCcsICclWSAlVSAldycsIDIwMDksIDEsIDEsIDAsIDAsIDAsIDMsIDEpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgNCcsICclWSAlVyAldycsIDIwMDksIDEsIDEsIDAsIDAsIDAsIDMsIDEpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgNScsICclWSAlVSAldycsIDIwMDksIDEsIDIsIDAsIDAsIDAsIDQsIDIpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgNScsICclWSAlVyAldycsIDIwMDksIDEsIDIsIDAsIDAsIDAsIDQsIDIpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgNicsICclWSAlVSAldycsIDIwMDksIDEsIDMsIDAsIDAsIDAsIDUsIDMpCisgICAgICAgIGNoZWNrKCcyMDA5IDAgNicsICclWSAlVyAldycsIDIwMDksIDEsIDMsIDAsIDAsIDAsIDUsIDMpCiAKIGNsYXNzIENhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgdGhhdCBjYWNoaW5nIHdvcmtzIHByb3Blcmx5LiIiIgpAQCAtNjA0LDE4ICs2MTgsNSBAQAogICAgICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKG9sZHR6bmFtZVsxXSwgJyVaJykKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIGdldGxhbmdfVGVzdHMsCi0gICAgICAgIExvY2FsZVRpbWVfVGVzdHMsCi0gICAgICAgIFRpbWVSRVRlc3RzLAotICAgICAgICBTdHJwdGltZVRlc3RzLAotICAgICAgICBTdHJwdGltZTEyQU1QTVRlc3RzLAotICAgICAgICBKdWxpYW5UZXN0cywKLSAgICAgICAgQ2FsY3VsYXRpb25UZXN0cywKLSAgICAgICAgQ2FjaGVUZXN0cwotICAgICkKLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CmluZGV4IDQxYjZlNWYuLjI3Mjc1MTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CkBAIC00MjksOCArNDI5LDUgQEAKICAgICAgICAgZm9yIHMgaW4gdGVzdF9zdHJpbmdzOgogICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RydG9kVGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkKaW5kZXggMDEwN2VlYi4uZWZiZGJmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkKQEAgLTY2MCw4ICs2NjAsNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0bWVtYmVycy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0bWVtYmVycy5weQppbmRleCAxYzkzMWFlLi41N2VjNDVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RtZW1iZXJzLnB5CkBAIC0xNDAsOCArMTQwLDUgQEAKICAgICAgICAgICAgIHRzLlRfVVNIT1JUID0gVVNIUlRfTUFYKzEKIAogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKaW5kZXggMzUzZDBlYS4uMzY2MzBhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKQEAgLTEsNyArMSw2IEBACiBpbXBvcnQgb3MKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiAKIGNsYXNzIFN0cnVjdFNlcVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTgsNyArOTcsNyBAQAogICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKToKICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICAjIERldmlvdXMgY29kZSBjb3VsZCBjcmFzaCBzdHJ1Y3RzZXFzJyBjb250cnVjdG9ycworICAgICAgICAjIERldmlvdXMgY29kZSBjb3VsZCBjcmFzaCBzdHJ1Y3RzZXFzJyBjb25zdHJ1Y3RvcnMKICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKICAgICAgICAgICAgICAgICByYWlzZSBFeGMKQEAgLTEyMyw4ICsxMjIsNSBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodFtzdGFydDpzdG9wOnN0ZXBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMW3N0YXJ0OnN0b3A6c3RlcF0pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChTdHJ1Y3RTZXFUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkgYi9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKaW5kZXggNDcxOWNjMC4uNGI0MDliNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwpAQCAtMzgxLDcgKzM4Miw3IEBACiAgICAgICAgIHB5dGhvbl9kaXIsIHB5dGhvbl9iYXNlID0gc2VsZi5fc3BsaXRfcHl0aG9uX3BhdGgoKQogICAgICAgICBhYnNfcHl0aG9uID0gb3MucGF0aC5qb2luKHB5dGhvbl9kaXIsIHB5dGhvbl9iYXNlKQogICAgICAgICByZWxfcHl0aG9uID0gb3MucGF0aC5qb2luKG9zLmN1cmRpciwgcHl0aG9uX2Jhc2UpCi0gICAgICAgIHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHdyb25nX2RpcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfZGlyKCkgYXMgd3JvbmdfZGlyOgogICAgICAgICAgICAgIyBCZWZvcmUgY2FsbGluZyB3aXRoIGFuIGFic29sdXRlIHBhdGgsIGNvbmZpcm0gdGhhdCB1c2luZyBhCiAgICAgICAgICAgICAjIHJlbGF0aXZlIHBhdGggZmFpbHMuCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvciwgc3VicHJvY2Vzcy5Qb3BlbiwKQEAgLTUwNCw2ICs1MDUsMjcgQEAKICAgICAgICAgdGYuc2VlaygwKQogICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHRmLnJlYWQoKSwgYiJzdHJhd2JlcnJ5IikKIAorICAgIGRlZiB0ZXN0X3N0ZGVycl9yZWRpcmVjdF93aXRoX25vX3N0ZG91dF9yZWRpcmVjdChzZWxmKToKKyAgICAgICAgIyB0ZXN0IHN0ZGVycj1TVERPVVQgd2hpbGUgc3Rkb3V0PU5vbmUgKG5vdCBzZXQpCisKKyAgICAgICAgIyAtIGdyYW5kY2hpbGQgcHJpbnRzIHRvIHN0ZGVycgorICAgICAgICAjIC0gY2hpbGQgcmVkaXJlY3RzIGdyYW5kY2hpbGQncyBzdGRlcnIgdG8gaXRzIHN0ZG91dAorICAgICAgICAjIC0gdGhlIHBhcmVudCBzaG91bGQgZ2V0IGdyYW5kY2hpbGQncyBzdGRlcnIgaW4gY2hpbGQncyBzdGRvdXQKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsIHN1YnByb2Nlc3M7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICJpbXBvcnQgc3lzOyInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICJzeXMuc3RkZXJyLndyaXRlKFwnNDJcJykiXSwnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5leGl0KHJjKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjTk9URTogc3Rkb3V0IHNob3VsZCBnZXQgc3RkZXJyIGZyb20gZ3JhbmRjaGlsZAorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZG91dCwgYic0MicpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwoc3RkZXJyLCBiJycpICMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwKQorCiAgICAgZGVmIHRlc3Rfc3Rkb3V0X3N0ZGVycl9waXBlKHNlbGYpOgogICAgICAgICAjIGNhcHR1cmUgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHNhbWUgcGlwZQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCkBAIC0xMjE5LDYgKzEyNDEsMTAyIEBACiAgICAgICAgIGZkc19hZnRlcl9leGNlcHRpb24gPSBvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZHNfYmVmb3JlX3BvcGVuLCBmZHNfYWZ0ZXJfZXhjZXB0aW9uKQogCisKK2NsYXNzIFJ1bkZ1bmNUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorICAgIGRlZiBydW5fcHl0aG9uKHNlbGYsIGNvZGUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUnVuIFB5dGhvbiBjb2RlIGluIGEgc3VicHJvY2VzcyB1c2luZyBzdWJwcm9jZXNzLnJ1biIiIgorICAgICAgICBhcmd2ID0gW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlXQorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5ydW4oYXJndiwgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHNlcXVlbmNlIGFyZ3VtZW50CisgICAgICAgIGNwID0gc2VsZi5ydW5fcHl0aG9uKCJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwLnJldHVybmNvZGUsIDQ3KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKToKKyAgICAgICAgICAgIGNwLmNoZWNrX3JldHVybmNvZGUoKQorCisgICAgZGVmIHRlc3RfY2hlY2soc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IpIGFzIGM6CisgICAgICAgICAgICBzZWxmLnJ1bl9weXRob24oImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSIsIGNoZWNrPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24ucmV0dXJuY29kZSwgNDcpCisKKyAgICBkZWYgdGVzdF9jaGVja196ZXJvKHNlbGYpOgorICAgICAgICAjIGNoZWNrX3JldHVybmNvZGUgc2hvdWxkbid0IHJhaXNlIHdoZW4gcmV0dXJuY29kZSBpcyB6ZXJvCisgICAgICAgIGNwID0gc2VsZi5ydW5fcHl0aG9uKCJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSIsIGNoZWNrPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3AucmV0dXJuY29kZSwgMCkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgICMgcnVuKCkgZnVuY3Rpb24gd2l0aCB0aW1lb3V0IGFyZ3VtZW50OyB3ZSB3YW50IHRvIHRlc3QgdGhhdCB0aGUgY2hpbGQKKyAgICAgICAgIyBwcm9jZXNzIGdldHMga2lsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcy4gIElmIHRoZSBjaGlsZCBpc24ndAorICAgICAgICAjIGtpbGxlZCwgdGhpcyBjYWxsIHdpbGwgZGVhZGxvY2sgc2luY2Ugc3VicHJvY2Vzcy5ydW4gd2FpdHMgZm9yIHRoZQorICAgICAgICAjIGNoaWxkLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQpOgorICAgICAgICAgICAgc2VsZi5ydW5fcHl0aG9uKCJ3aGlsZSBUcnVlOiBwYXNzIiwgdGltZW91dD0wLjAwMDEpCisKKyAgICBkZWYgdGVzdF9jYXB0dXJlX3N0ZG91dChzZWxmKToKKyAgICAgICAgIyBjYXB0dXJlIHN0ZG91dCB3aXRoIHplcm8gcmV0dXJuIGNvZGUKKyAgICAgICAgY3AgPSBzZWxmLnJ1bl9weXRob24oInByaW50KCdCREZMJykiLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFzc2VydEluKGInQkRGTCcsIGNwLnN0ZG91dCkKKworICAgIGRlZiB0ZXN0X2NhcHR1cmVfc3RkZXJyKHNlbGYpOgorICAgICAgICBjcCA9IHNlbGYucnVuX3B5dGhvbigiaW1wb3J0IHN5czsgc3lzLnN0ZGVyci53cml0ZSgnQkRGTCcpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0JERkwnLCBjcC5zdGRlcnIpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fYXJnKHNlbGYpOgorICAgICAgICAjIHJ1bigpIGNhbiBiZSBjYWxsZWQgd2l0aCBzdGRpbiBzZXQgdG8gYSBmaWxlCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKKyAgICAgICAgdGYud3JpdGUoYidwZWFyJykKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICBjcCA9IHNlbGYucnVuX3B5dGhvbigKKyAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoKS51cHBlcigpKSIsCisgICAgICAgICAgICAgICAgc3RkaW49dGYsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidQRUFSJywgY3Auc3Rkb3V0KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X2lucHV0X2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBjYW4gYmUgY2FsbGVkIHdpdGggaW5wdXQgc2V0IHRvIGEgc3RyaW5nCisgICAgICAgIGNwID0gc2VsZi5ydW5fcHl0aG9uKAorICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkudXBwZXIoKSkiLAorICAgICAgICAgICAgICAgIGlucHV0PWIncGVhcicsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidQRUFSJywgY3Auc3Rkb3V0KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZGluX3dpdGhfaW5wdXRfYXJnKHNlbGYpOgorICAgICAgICAjIHJ1bigpIHJlZnVzZXMgdG8gYWNjZXB0ICdzdGRpbicgd2l0aCAnaW5wdXQnCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKKyAgICAgICAgdGYud3JpdGUoYidwZWFyJykKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgIG1zZz0iRXhwZWN0ZWQgVmFsdWVFcnJvciB3aGVuIHN0ZGluIGFuZCBpbnB1dCBhcmdzIHN1cHBsaWVkLiIpIGFzIGM6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bl9weXRob24oInByaW50KCd3aWxsIG5vdCBiZSBydW4nKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49dGYsIGlucHV0PWInaGFyZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0ZGluJywgYy5leGNlcHRpb24uYXJnc1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW5wdXQnLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZCkgYXMgYzoKKyAgICAgICAgICAgIGNwID0gc2VsZi5ydW5fcHl0aG9uKCgKKyAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzLCB0aW1lXG4iCisgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZSgnQkRGTCcpXG4iCisgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC5mbHVzaCgpXG4iCisgICAgICAgICAgICAgICAgICAgICAidGltZS5zbGVlcCgzNjAwKSIpLAorICAgICAgICAgICAgICAgICAgICAjIFNvbWUgaGVhdmlseSBsb2FkZWQgYnVpbGRib3RzIChzcGFyYyBEZWJpYW4gMy54KSByZXF1aXJlCisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBtdWNoIHRpbWUgdG8gc3RhcnQgYW5kIHByaW50LgorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTMsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24ub3V0cHV0LCBiJ0JERkwnKQorICAgICAgICAjIG91dHB1dCBpcyBhbGlhc2VkIHRvIHN0ZG91dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLnN0ZG91dCwgYidCREZMJykKKworICAgIGRlZiB0ZXN0X3J1bl9rd2FyZ3Moc2VsZik6CisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJiYW5hbmEiCisgICAgICAgIGNwID0gc2VsZi5ydW5fcHl0aG9uKCgnaW1wb3J0IHN5cywgb3M7JworICAgICAgICAgICAgICAgICAgICAgICdzeXMuZXhpdCgzMyBpZiBvcy5nZXRlbnYoIkZSVUlUIik9PSJiYW5hbmEiIGVsc2UgMzEpJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3AucmV0dXJuY29kZSwgMzMpCisKKwogQHVuaXR0ZXN0LnNraXBJZihtc3dpbmRvd3MsICJQT1NJWCBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBQT1NJWFByb2Nlc3NUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgogCkBAIC0xMjM2LDcgKzEzNTQsNyBAQAogICAgICAgICAgICAgZGVzaXJlZF9leGNlcHRpb24gPSBlCiAgICAgICAgICAgICBkZXNpcmVkX2V4Y2VwdGlvbi5zdHJlcnJvciArPSAnOiAnICsgcmVwcihzZWxmLl9ub25leGlzdGVudF9kaXIpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImNoZGlyIHRvIG5vbmV4aXN0YW50IGRpcmVjdG9yeSAlcyBzdWNjZWVkZWQuIiAlCisgICAgICAgICAgICBzZWxmLmZhaWwoImNoZGlyIHRvIG5vbmV4aXN0ZW50IGRpcmVjdG9yeSAlcyBzdWNjZWVkZWQuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbm9uZXhpc3RlbnRfZGlyKQogICAgICAgICByZXR1cm4gZGVzaXJlZF9leGNlcHRpb24KIApAQCAtMTQyOSwxMCArMTU0NywxNCBAQAogICAgICAgICBbXywgaGFyZF0gPSBsaW1pdHMKICAgICAgICAgc2V0cmxpbWl0KFJMSU1JVF9OUFJPQywgKDAsIGhhcmQpKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0cmxpbWl0LCBSTElNSVRfTlBST0MsIGxpbWl0cykKLSAgICAgICAgIyBGb3JraW5nIHNob3VsZCByYWlzZSBFQUdBSU4sIHRyYW5zbGF0ZWQgdG8gQmxvY2tpbmdJT0Vycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQmxvY2tpbmdJT0Vycm9yKToKKyAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49bGFtYmRhOiBOb25lKQorICAgICAgICBleGNlcHQgQmxvY2tpbmdJT0Vycm9yOgorICAgICAgICAgICAgIyBGb3JraW5nIHNob3VsZCByYWlzZSBFQUdBSU4sIHRyYW5zbGF0ZWQgdG8gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdSTElNSVRfTlBST0MgaGFkIG5vIGVmZmVjdDsgcHJvYmFibHkgc3VwZXJ1c2VyJykKIAogICAgIGRlZiB0ZXN0X2FyZ3Nfc3RyaW5nKHNlbGYpOgogICAgICAgICAjIGFyZ3MgaXMgYSBzdHJpbmcKQEAgLTIyMzQsOCArMjM1Niw2IEBACiAgICAgICAgICAgICBmdW5jID0gbGFtYmRhOiBOb25lCiAgICAgICAgICAgICBnYy5lbmFibGUoKQogCi0gICAgICAgICAgICBleGVjdXRhYmxlX2xpc3QgPSAiZXhlYyIgICAjIGVycm9yOiBtdXN0IGJlIGEgc2VxdWVuY2UKLQogICAgICAgICAgICAgZm9yIGFyZ3MsIGV4ZV9saXN0LCBjd2QsIGVudl9saXN0IGluICgKICAgICAgICAgICAgICAgICAoMTIzLCAgICAgIFtiImV4ZSJdLCBOb25lLCBbYiJlbnYiXSksCiAgICAgICAgICAgICAgICAgKFtiImFyZyJdLCAxMjMsICAgICAgTm9uZSwgW2IiZW52Il0pLApAQCAtMjI1Myw2ICsyMzczLDgwIEBACiAgICAgICAgICAgICBpZiBub3QgZ2NfZW5hYmxlZDoKICAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2ZvcmtfZXhlY19zb3J0ZWRfZmRfc2FuaXR5X2NoZWNrKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMzU2NDogc2FuaXR5IGNoZWNrIHRoZSBmb3JrX2V4ZWMoKSBmZHNfdG9fa2VlcCBzYW5pdHkgY2hlY2suCisgICAgICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCisgICAgICAgIGdjX2VuYWJsZWQgPSBnYy5pc2VuYWJsZWQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnYy5lbmFibGUoKQorCisgICAgICAgICAgICBmb3IgZmRzX3RvX2tlZXAgaW4gKAorICAgICAgICAgICAgICAgICgtMSwgMiwgMywgNCwgNSksICAjIE5lZ2F0aXZlIG51bWJlci4KKyAgICAgICAgICAgICAgICAoJ3N0cicsIDQpLCAgIyBOb3QgYW4gaW50LgorICAgICAgICAgICAgICAgICgxOCwgMjMsIDQyLCAyKio2MyksICAjIE91dCBvZiByYW5nZS4KKyAgICAgICAgICAgICAgICAoNSwgNCksICAjIE5vdCBzb3J0ZWQuCisgICAgICAgICAgICAgICAgKDYsIDcsIDcsIDgpLCAgIyBEdXBsaWNhdGUuCisgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdmZHNfdG9fa2VlcD17fScuZm9ybWF0KGZkc190b19rZWVwKSkgYXMgYzoKKyAgICAgICAgICAgICAgICAgICAgX3Bvc2l4c3VicHJvY2Vzcy5mb3JrX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICBbYiJmYWxzZSJdLCBbYiJmYWxzZSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgZmRzX3RvX2tlZXAsIE5vbmUsIFtiImVudiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAzLCA0LAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgVHJ1ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmZHNfdG9fa2VlcCcsIHN0cihjLmV4Y2VwdGlvbikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZ2NfZW5hYmxlZDoKKyAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX0Jyb2tlblBpcGVFcnJvcl9zdGRpbl9jbG9zZShzZWxmKToKKyAgICAgICAgIyBCeSBub3Qgc2V0dGluZyBzdGRvdXQgb3Igc3RkZXJyIG9yIGEgdGltZW91dCB3ZSBmb3JjZSB0aGUgZmFzdCBwYXRoCisgICAgICAgICMgdGhhdCBqdXN0IGNhbGxzIF9zdGRpbl93cml0ZSgpIGludGVybmFsbHkgZHVlIHRvIG91ciBtb2NrLgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsICdwYXNzJ10pCisgICAgICAgIHdpdGggcHJvYywgbW9jay5wYXRjaC5vYmplY3QocHJvYywgJ3N0ZGluJykgYXMgbW9ja19wcm9jX3N0ZGluOgorICAgICAgICAgICAgbW9ja19wcm9jX3N0ZGluLmNsb3NlLnNpZGVfZWZmZWN0ID0gQnJva2VuUGlwZUVycm9yCisgICAgICAgICAgICBwcm9jLmNvbW11bmljYXRlKCkgICMgU2hvdWxkIHN3YWxsb3cgQnJva2VuUGlwZUVycm9yIGZyb20gY2xvc2UuCisgICAgICAgICAgICBtb2NrX3Byb2Nfc3RkaW4uY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX0Jyb2tlblBpcGVFcnJvcl9zdGRpbl93cml0ZShzZWxmKToKKyAgICAgICAgIyBCeSBub3Qgc2V0dGluZyBzdGRvdXQgb3Igc3RkZXJyIG9yIGEgdGltZW91dCB3ZSBmb3JjZSB0aGUgZmFzdCBwYXRoCisgICAgICAgICMgdGhhdCBqdXN0IGNhbGxzIF9zdGRpbl93cml0ZSgpIGludGVybmFsbHkgZHVlIHRvIG91ciBtb2NrLgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsICdwYXNzJ10pCisgICAgICAgIHdpdGggcHJvYywgbW9jay5wYXRjaC5vYmplY3QocHJvYywgJ3N0ZGluJykgYXMgbW9ja19wcm9jX3N0ZGluOgorICAgICAgICAgICAgbW9ja19wcm9jX3N0ZGluLndyaXRlLnNpZGVfZWZmZWN0ID0gQnJva2VuUGlwZUVycm9yCisgICAgICAgICAgICBwcm9jLmNvbW11bmljYXRlKGInc3R1ZmYnKSAgIyBTaG91bGQgc3dhbGxvdyB0aGUgQnJva2VuUGlwZUVycm9yLgorICAgICAgICAgICAgbW9ja19wcm9jX3N0ZGluLndyaXRlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGInc3R1ZmYnKQorICAgICAgICAgICAgbW9ja19wcm9jX3N0ZGluLmNsb3NlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX0Jyb2tlblBpcGVFcnJvcl9zdGRpbl9mbHVzaChzZWxmKToKKyAgICAgICAgIyBTZXR0aW5nIHN0ZGluIGFuZCBzdGRvdXQgZm9yY2VzIHRoZSAuX2NvbW11bmljYXRlKCkgY29kZSBwYXRoLgorICAgICAgICAjIHB5dGhvbiAtaCBleGl0cyBmYXN0ZXIgdGhhbiBweXRob24gLWMgcGFzcyAoYnV0IHNwYW1zIHN0ZG91dCkuCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1oJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgd2l0aCBwcm9jLCBtb2NrLnBhdGNoLm9iamVjdChwcm9jLCAnc3RkaW4nKSBhcyBtb2NrX3Byb2Nfc3RkaW4sIFwKKyAgICAgICAgICAgICAgICBvcGVuKG9zLmRldm51bGwsICd3YicpIGFzIGRldl9udWxsOgorICAgICAgICAgICAgbW9ja19wcm9jX3N0ZGluLmZsdXNoLnNpZGVfZWZmZWN0ID0gQnJva2VuUGlwZUVycm9yCisgICAgICAgICAgICAjIGJlY2F1c2UgX2NvbW11bmljYXRlIHJlZ2lzdGVycyBhIHNlbGVjdG9yIHVzaW5nIHByb2Muc3RkaW4uLi4KKyAgICAgICAgICAgIG1vY2tfcHJvY19zdGRpbi5maWxlbm8ucmV0dXJuX3ZhbHVlID0gZGV2X251bGwuZmlsZW5vKCkKKyAgICAgICAgICAgICMgX2NvbW11bmljYXRlKCkgc2hvdWxkIHN3YWxsb3cgQnJva2VuUGlwZUVycm9yIGZyb20gZmx1c2guCisgICAgICAgICAgICBwcm9jLmNvbW11bmljYXRlKGInc3R1ZmYnKQorICAgICAgICAgICAgbW9ja19wcm9jX3N0ZGluLmZsdXNoLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX0Jyb2tlblBpcGVFcnJvcl9zdGRpbl9jbG9zZV93aXRoX3RpbWVvdXQoc2VsZik6CisgICAgICAgICMgU2V0dGluZyBzdGRpbiBhbmQgc3Rkb3V0IGZvcmNlcyB0aGUgLl9jb21tdW5pY2F0ZSgpIGNvZGUgcGF0aC4KKyAgICAgICAgIyBweXRob24gLWggZXhpdHMgZmFzdGVyIHRoYW4gcHl0aG9uIC1jIHBhc3MgKGJ1dCBzcGFtcyBzdGRvdXQpLgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctaCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHdpdGggcHJvYywgbW9jay5wYXRjaC5vYmplY3QocHJvYywgJ3N0ZGluJykgYXMgbW9ja19wcm9jX3N0ZGluOgorICAgICAgICAgICAgbW9ja19wcm9jX3N0ZGluLmNsb3NlLnNpZGVfZWZmZWN0ID0gQnJva2VuUGlwZUVycm9yCisgICAgICAgICAgICAjIF9jb21tdW5pY2F0ZSgpIHNob3VsZCBzd2FsbG93IEJyb2tlblBpcGVFcnJvciBmcm9tIGNsb3NlLgorICAgICAgICAgICAgcHJvYy5jb21tdW5pY2F0ZSh0aW1lb3V0PTk5OSkKKyAgICAgICAgICAgIG1vY2tfcHJvY19zdGRpbi5jbG9zZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MobXN3aW5kb3dzLCAiV2luZG93cyBzcGVjaWZpYyB0ZXN0cyIpCkBAIC0yMzkyLDcgKzI1ODYsNyBAQAogICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZV9kZWFkKHNlbGYpOgogICAgICAgICBzZWxmLl9raWxsX2RlYWRfcHJvY2VzcygndGVybWluYXRlJykKIAotY2xhc3MgQ29tbWFuZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIE1pc2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZ2V0b3V0cHV0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MuZ2V0b3V0cHV0KCdlY2hvIHh5enp5JyksICd4eXp6eScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXQoJ2VjaG8geHl6enknKSwKQEAgLTI0MTIsNiArMjYwNiwyMSBAQAogICAgICAgICAgICAgaWYgZGlyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKIAorICAgIGRlZiB0ZXN0X19hbGxfXyhzZWxmKToKKyAgICAgICAgIiIiRW5zdXJlIHRoYXQgX19hbGxfXyBpcyBwb3B1bGF0ZWQgcHJvcGVybHkuIiIiCisgICAgICAgICMgU1RBUlRVUElORk8gYWRkZWQgdG8gX19hbGxfXyBpbiAzLjYKKyAgICAgICAgaW50ZW50aW9uYWxseV9leGNsdWRlZCA9IHsibGlzdDJjbWRsaW5lIiwgIlNUQVJUVVBJTkZPIiwgIkhhbmRsZSJ9CisgICAgICAgIGV4cG9ydGVkID0gc2V0KHN1YnByb2Nlc3MuX19hbGxfXykKKyAgICAgICAgcG9zc2libGVfZXhwb3J0cyA9IHNldCgpCisgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc3VicHJvY2Vzcy5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsICh0eXBlcy5Nb2R1bGVUeXBlLCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwb3NzaWJsZV9leHBvcnRzLmFkZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cG9ydGVkLCBwb3NzaWJsZV9leHBvcnRzIC0gaW50ZW50aW9uYWxseV9leGNsdWRlZCkKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAogICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCkBAIC0yNDI2LDI1ICsyNjM1LDYgQEAKICAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlLnRlYXJEb3duKHNlbGYpCiAKIAotY2xhc3MgSGVscGVyRnVuY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihtc3dpbmRvd3MsICJlcnJubyBhbmQgRUlOVFIgbWFrZSBubyBzZW5zZSBvbiB3aW5kb3dzIikKLSAgICBkZWYgdGVzdF9laW50cl9yZXRyeV9jYWxsKHNlbGYpOgotICAgICAgICByZWNvcmRfY2FsbHMgPSBbXQotICAgICAgICBkZWYgZmFrZV9vc19mdW5jKCphcmdzKToKLSAgICAgICAgICAgIHJlY29yZF9jYWxscy5hcHBlbmQoYXJncykKLSAgICAgICAgICAgIGlmIGxlbihyZWNvcmRfY2FsbHMpID09IDI6Ci0gICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5UUiwgImZha2UgaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwiKQotICAgICAgICAgICAgcmV0dXJuIHR1cGxlKHJldmVyc2VkKGFyZ3MpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDk5OSwgMjU2KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLl9laW50cl9yZXRyeV9jYWxsKGZha2Vfb3NfZnVuYywgMjU2LCA5OTkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoMjU2LCA5OTkpXSwgcmVjb3JkX2NhbGxzKQotICAgICAgICAjIFRoaXMgdGltZSB0aGVyZSB3aWxsIGJlIGFuIEVJTlRSIHNvIGl0IHdpbGwgbG9vcCBvbmNlLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2NjYsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLl9laW50cl9yZXRyeV9jYWxsKGZha2Vfb3NfZnVuYywgNjY2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKDI1NiwgOTk5KSwgKDY2NiwpLCAoNjY2LCldLCByZWNvcmRfY2FsbHMpCi0KLQogQHVuaXR0ZXN0LnNraXBVbmxlc3MobXN3aW5kb3dzLCAiV2luZG93cy1zcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBDb21tYW5kc1dpdGhTcGFjZXMgKEJhc2VUZXN0Q2FzZSk6CiAKQEAgLTI1NDcsMTEgKzI3MzcsMTEgQEAKICAgICB1bml0X3Rlc3RzID0gKFByb2Nlc3NUZXN0Q2FzZSwKICAgICAgICAgICAgICAgICAgIFBPU0lYUHJvY2Vzc1Rlc3RDYXNlLAogICAgICAgICAgICAgICAgICAgV2luMzJQcm9jZXNzVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICBDb21tYW5kVGVzdHMsCisgICAgICAgICAgICAgICAgICBNaXNjVGVzdHMsCiAgICAgICAgICAgICAgICAgICBQcm9jZXNzVGVzdENhc2VOb1BvbGwsCi0gICAgICAgICAgICAgICAgICBIZWxwZXJGdW5jdGlvblRlc3RzLAogICAgICAgICAgICAgICAgICAgQ29tbWFuZHNXaXRoU3BhY2VzLAogICAgICAgICAgICAgICAgICAgQ29udGV4dE1hbmFnZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgIFJ1bkZ1bmNUZXN0Q2FzZSwKICAgICAgICAgICAgICAgICAgICkKIAogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp1bml0X3Rlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkgYi9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQppbmRleCBlOTljYTllLi4xZmI5OTY0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQpAQCAtMjIsOCArMjIsNiBAQAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmZpbGVsaXN0Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5tc3ZjY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMudGV4dF9maWxlCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdXBlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKaW5kZXggMzdmYzJkOS4uYjg0ODYzZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CkBAIC0yLDcgKzIsNiBAQAogCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiAKIGNsYXNzIEE6CkBAIC0xNzIsOSArMTcxLDE0IEBACiAgICAgICAgIGMgPSBmKCkuX19jbG9zdXJlX19bMF0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBYLm1ldGgsIGMpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RTdXBlcikKKyAgICBkZWYgdGVzdF9zdXBlcl9pbml0X2xlYWtzKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNjcxODogc3VwZXIuX19pbml0X18gbGVha2VkIG1lbW9yeSBpZiBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCisgICAgICAgICMgVGhpcyB3aWxsIGJlIGNhdWdodCBieSByZWdydGVzdC5weSAtUiBpZiB0aGlzIGxlYWsuCisgICAgICAgICMgTk9URTogRGVzcGl0ZSB0aGUgdXNlIGluIHRoZSB0ZXN0IGEgZGlyZWN0IGNhbGwgb2Ygc3VwZXIuX19pbml0X18KKyAgICAgICAgIyBpcyBub3QgZW5kb3JzZWQuCisgICAgICAgIHNwID0gc3VwZXIoZmxvYXQsIDEuMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBzdXBlci5fX2luaXRfXyhzcCwgaW50LCBpKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggMDNjZTlkMS4uMmMwMDQxNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtODUsNyArODUsNyBAQAogICAgIGRlZiB0ZXN0X2JpbmRfcG9ydChzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICBzdXBwb3J0LmJpbmRfcG9ydChzKQotICAgICAgICBzLmxpc3RlbigxKQorICAgICAgICBzLmxpc3RlbigpCiAgICAgICAgIHMuY2xvc2UoKQogCiAgICAgIyBUZXN0cyBmb3IgdGVtcF9kaXIoKQpAQCAtMjgwLDYgKzI4MCwzOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEWyJpdGVtIl0sIDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRFsiaXRlbSJdLCAxKQogCisgICAgY2xhc3MgUmVmQ2xhc3M6CisgICAgICAgIGF0dHJpYnV0ZTEgPSBOb25lCisgICAgICAgIGF0dHJpYnV0ZTIgPSBOb25lCisgICAgICAgIF9oaWRkZW5fYXR0cmlidXRlMSA9IE5vbmUKKyAgICAgICAgX19tYWdpY18xX18gPSBOb25lCisKKyAgICBjbGFzcyBPdGhlckNsYXNzOgorICAgICAgICBhdHRyaWJ1dGUyID0gTm9uZQorICAgICAgICBhdHRyaWJ1dGUzID0gTm9uZQorICAgICAgICBfX21hZ2ljXzFfXyA9IE5vbmUKKyAgICAgICAgX19tYWdpY18yX18gPSBOb25lCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfYXBpX21pc21hdGNoKHNlbGYpOgorICAgICAgICBtaXNzaW5nX2l0ZW1zID0gc3VwcG9ydC5kZXRlY3RfYXBpX21pc21hdGNoKHNlbGYuUmVmQ2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5PdGhlckNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHsnYXR0cmlidXRlMSd9LCBtaXNzaW5nX2l0ZW1zKQorCisgICAgICAgIG1pc3NpbmdfaXRlbXMgPSBzdXBwb3J0LmRldGVjdF9hcGlfbWlzbWF0Y2goc2VsZi5PdGhlckNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuUmVmQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeydhdHRyaWJ1dGUzJywgJ19fbWFnaWNfMl9fJ30sIG1pc3NpbmdfaXRlbXMpCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfYXBpX21pc21hdGNoX19pZ25vcmUoc2VsZik6CisgICAgICAgIGlnbm9yZSA9IFsnYXR0cmlidXRlMScsICdhdHRyaWJ1dGUzJywgJ19fbWFnaWNfMl9fJywgJ25vdF9pbl9laXRoZXInXQorCisgICAgICAgIG1pc3NpbmdfaXRlbXMgPSBzdXBwb3J0LmRldGVjdF9hcGlfbWlzbWF0Y2goCisgICAgICAgICAgICAgICAgc2VsZi5SZWZDbGFzcywgc2VsZi5PdGhlckNsYXNzLCBpZ25vcmU9aWdub3JlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCgpLCBtaXNzaW5nX2l0ZW1zKQorCisgICAgICAgIG1pc3NpbmdfaXRlbXMgPSBzdXBwb3J0LmRldGVjdF9hcGlfbWlzbWF0Y2goCisgICAgICAgICAgICAgICAgc2VsZi5PdGhlckNsYXNzLCBzZWxmLlJlZkNsYXNzLCBpZ25vcmU9aWdub3JlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCgpLCBtaXNzaW5nX2l0ZW1zKQorCiAgICAgIyBYWFggLWZvbGxvd3MgYSBsaXN0IG9mIHVudGVzdGVkIEFQSQogICAgICMgbWFrZV9sZWdhY3lfcHljCiAgICAgIyBpc19yZXNvdXJjZV9lbmFibGVkCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5IGIvTGliL3Rlc3QvdGVzdF9zeW10YWJsZS5weQppbmRleCAzMzViNGRjLi5jNWQ3ZmFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3ltdGFibGUucHkKQEAgLTQsNyArNCw2IEBACiBpbXBvcnQgc3ltdGFibGUKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogCiBURVNUX0NPREUgPSAiIiIKQEAgLTE1OCw2ICsxNTcsMTIgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIFN5bnRheEVycm9yIGZvciAlciIgJSAoYnJva2VuY29kZSwpKQogICAgICAgICBjaGVja2ZpbGVuYW1lKCJkZWYgZih4KTogZm9vKSgiKSAgIyBwYXJzZS10aW1lCiAgICAgICAgIGNoZWNrZmlsZW5hbWUoImRlZiBmKHgpOiBnbG9iYWwgeCIpICAjIHN5bXRhYmxlLWJ1aWxkLXRpbWUKKyAgICAgICAgc3ltdGFibGUuc3ltdGFibGUoInBhc3MiLCBiInNwYW0iLCAiZXhlYyIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHN5bXRhYmxlLnN5bXRhYmxlKCJwYXNzIiwgYnl0ZWFycmF5KGIic3BhbSIpLCAiZXhlYyIpCisgICAgICAgIHN5bXRhYmxlLnN5bXRhYmxlKCJwYXNzIiwgbWVtb3J5dmlldyhiInNwYW0iKSwgImV4ZWMiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzeW10YWJsZS5zeW10YWJsZSgicGFzcyIsIGxpc3QoYiJzcGFtIiksICJleGVjIikKIAogICAgIGRlZiB0ZXN0X2V2YWwoc2VsZik6CiAgICAgICAgIHN5bWJvbHMgPSBzeW10YWJsZS5zeW10YWJsZSgiNDIiLCAiPyIsICJldmFsIikKQEAgLTE2OSw4ICsxNzQsNSBAQAogICAgICAgICBzeW1ib2xzID0gc3ltdGFibGUuc3ltdGFibGUoImRlZiBmKHgpOiByZXR1cm4geCIsICI/IiwgImV4ZWMiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChTeW10YWJsZVRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5IGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKaW5kZXggYTlkMzYyOC4uODNmNDlmNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKQEAgLTE0MSw2ICsxNDEsOSBAQAogPj4+IGYoeCBmb3IgeCBpbiBMLCAxKQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogU3ludGF4RXJyb3I6IEdlbmVyYXRvciBleHByZXNzaW9uIG11c3QgYmUgcGFyZW50aGVzaXplZCBpZiBub3Qgc29sZSBhcmd1bWVudAorPj4+IGYoeCBmb3IgeCBpbiBMLCB5IGZvciB5IGluIEwpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CitTeW50YXhFcnJvcjogR2VuZXJhdG9yIGV4cHJlc3Npb24gbXVzdCBiZSBwYXJlbnRoZXNpemVkIGlmIG5vdCBzb2xlIGFyZ3VtZW50CiA+Pj4gZigoeCBmb3IgeCBpbiBMKSwgMSkKIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQogCkBAIC0zMzksNyArMzQyLDkgQEAKICAgICAgLi4uCiAgICBTeW50YXhFcnJvcjogJ2JyZWFrJyBvdXRzaWRlIGxvb3AKIAotVGhpcyBzaG91bGQgcHJvYmFibHkgcmFpc2UgYSBiZXR0ZXIgZXJyb3IgdGhhbiBhIFN5c3RlbUVycm9yIChvciBub25lIGF0IGFsbCkuCitUaGlzIHJhaXNlcyBhIFN5bnRheEVycm9yLCBpdCB1c2VkIHRvIHJhaXNlIGEgU3lzdGVtRXJyb3IuCitDb250ZXh0IGZvciB0aGlzIGNoYW5nZSBjYW4gYmUgZm91bmQgb24gaXNzdWUgIzI3NTE0CisKIEluIDIuNSB0aGVyZSB3YXMgYSBtaXNzaW5nIGV4Y2VwdGlvbiBhbmQgYW4gYXNzZXJ0IHdhcyB0cmlnZ2VyZWQgaW4gYSBkZWJ1ZwogYnVpbGQuICBUaGUgbnVtYmVyIG9mIGJsb2NrcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBDT19NQVhCTE9DS1MuICBTRiAjMTU2NTUxNAogCkBAIC0zNjcsNyArMzcyLDcgQEAKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAuLi4KLSAgIFN5c3RlbUVycm9yOiB0b28gbWFueSBzdGF0aWNhbGx5IG5lc3RlZCBibG9ja3MKKyAgIFN5bnRheEVycm9yOiB0b28gbWFueSBzdGF0aWNhbGx5IG5lc3RlZCBibG9ja3MKIAogTWlzdXNlIG9mIHRoZSBub25sb2NhbCBzdGF0ZW1lbnQgY2FuIGxlYWQgdG8gYSBmZXcgdW5pcXVlIHN5bnRheCBlcnJvcnMuCiAKQEAgLTQxMyw2ICs0MTgsMTQgQEAKICMjICAgICAuLi4KICMjICAgU3ludGF4V2FybmluZzogbmFtZSAneCcgaXMgYXNzaWduZWQgdG8gYmVmb3JlIG5vbmxvY2FsIGRlY2xhcmF0aW9uCiAKKyBGcm9tIGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjU5NzMKKyAgID4+PiBjbGFzcyBBOgorICAgLi4uICAgICBkZWYgZihzZWxmKToKKyAgIC4uLiAgICAgICAgIG5vbmxvY2FsIF9feAorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAuLi4KKyAgIFN5bnRheEVycm9yOiBubyBiaW5kaW5nIGZvciBub25sb2NhbCAnX0FfX3gnIGZvdW5kCisKIAogVGhpcyB0ZXN0cyBhc3NpZ25tZW50LWNvbnRleHQ7IHRoZXJlIHdhcyBhIGJ1ZyBpbiBQeXRob24gMi41IHdoZXJlIGNvbXBpbGluZwogYSBjb21wbGV4ICdpZicgKG9uZSB3aXRoICdlbGlmJykgd291bGQgZmFpbCB0byBub3RpY2UgYW4gaW52YWxpZCBzdWl0ZSwKQEAgLTU4Miw3ICs1OTUsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViY2xhc3M9SW5kZW50YXRpb25FcnJvcikKIAogICAgIGRlZiB0ZXN0X2t3YXJnc19sYXN0KHNlbGYpOgotICAgICAgICBzZWxmLl9jaGVja19lcnJvcigiaW50KGJhc2U9MTAsICcyJykiLCAibm9uLWtleXdvcmQgYXJnIikKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3IoImludChiYXNlPTEwLCAnMicpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uYWwgYXJndW1lbnQgZm9sbG93cyBrZXl3b3JkIGFyZ3VtZW50IikKKworICAgIGRlZiB0ZXN0X2t3YXJnc19sYXN0MihzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3IoImludCgqKntiYXNlOiAxMH0sICcyJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb25hbCBhcmd1bWVudCBmb2xsb3dzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmQgYXJndW1lbnQgdW5wYWNraW5nIikKKworICAgIGRlZiB0ZXN0X2t3YXJnc19sYXN0MyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3IoImludCgqKntiYXNlOiAxMH0sICpbJzInXSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmFibGUgYXJndW1lbnQgdW5wYWNraW5nIGZvbGxvd3MgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZCBhcmd1bWVudCB1bnBhY2tpbmciKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3ludGF4VGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5cy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzLnB5CmluZGV4IGI3ZGRiZTkuLjQ0MzVkNjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3lzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzLnB5CkBAIC0xLDUgKzEsNSBAQAogaW1wb3J0IHVuaXR0ZXN0LCB0ZXN0LnN1cHBvcnQKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQogaW1wb3J0IHN5cywgaW8sIG9zCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3VicHJvY2VzcwpAQCAtMjAxLDE5ICsyMDEsNTcgQEAKICAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2ZhdGFsIGVycm9yIGlmIHJ1biB3aXRoIGEgdHJhY2UgZnVuY3Rpb24nKQogCi0gICAgICAgICMgTk9URTogdGhpcyB0ZXN0IGlzIHNsaWdodGx5IGZyYWdpbGUgaW4gdGhhdCBpdCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50Ci0gICAgICAgICMgcmVjdXJzaW9uIGNvdW50IHdoZW4gZXhlY3V0aW5nIHRoZSB0ZXN0IGJlaW5nIGxvdyBlbm91Z2ggc28gYXMgdG8KLSAgICAgICAgIyB0cmlnZ2VyIHRoZSByZWN1cnNpb24gcmVjb3ZlcnkgZGV0ZWN0aW9uIGluIHRoZSBfUHlfTWFrZUVuZFJlY0NoZWNrCi0gICAgICAgICMgbWFjcm8gKHNlZSBjZXZhbC5oKS4KICAgICAgICAgb2xkbGltaXQgPSBzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKQogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgZigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBpIGluICg1MCwgMTAwMCk6Ci0gICAgICAgICAgICAgICAgIyBJc3N1ZSAjNTM5Mjogc3RhY2sgb3ZlcmZsb3cgYWZ0ZXIgaGl0dGluZyByZWN1cnNpb24gbGltaXQgdHdpY2UKLSAgICAgICAgICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoaSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGYpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmKQorICAgICAgICAgICAgZm9yIGRlcHRoIGluICgxMCwgMjUsIDUwLCA3NSwgMTAwLCAyNTAsIDEwMDApOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KGRlcHRoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBSZWN1cnNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMjUyNzQ6IFRoZSByZWN1cnNpb24gbGltaXQgaXMgdG9vIGxvdyBhdCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBjdXJyZW50IHJlY3Vyc2lvbiBkZXB0aAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjNTM5MjogdGVzdCBzdGFjayBvdmVyZmxvdyBhZnRlciBoaXR0aW5nIHJlY3Vyc2lvbgorICAgICAgICAgICAgICAgICMgbGltaXQgdHdpY2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgZikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvciwgZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdChvbGRsaW1pdCkKKworICAgIEB0ZXN0LnN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc2V0cmVjdXJzaW9ubGltaXRfcmVjdXJzaW9uX2RlcHRoKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNTI3NDogU2V0dGluZyBhIGxvdyByZWN1cnNpb24gbGltaXQgbXVzdCBiZSBibG9ja2VkIGlmIHRoZQorICAgICAgICAjIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoIGlzIGFscmVhZHkgaGlnaGVyIHRoYW4gdGhlICJsb3dlci13YXRlcgorICAgICAgICAjIG1hcmsiLiBPdGhlcndpc2UsIGl0IG1heSBub3QgYmUgcG9zc2libGUgYW55bW9yZSB0bworICAgICAgICAjIHJlc2V0IHRoZSBvdmVyZmxvd2VkIGZsYWcgdG8gMC4KKworICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0X3JlY3Vyc2lvbl9kZXB0aAorCisgICAgICAgIGRlZiBzZXRfcmVjdXJzaW9uX2xpbWl0X2F0X2RlcHRoKGRlcHRoLCBsaW1pdCk6CisgICAgICAgICAgICByZWN1cnNpb25fZGVwdGggPSBnZXRfcmVjdXJzaW9uX2RlcHRoKCkKKyAgICAgICAgICAgIGlmIHJlY3Vyc2lvbl9kZXB0aCA+PSBkZXB0aDoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJlY3Vyc2lvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KGxpbWl0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNldCB0aGUgcmVjdXJzaW9uIGxpbWl0IHRvIFswLTldKyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQgdGhlIHJlY3Vyc2lvbiBkZXB0aCBbMC05XSs6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbGltaXQgaXMgdG9vIGxvdyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNldF9yZWN1cnNpb25fbGltaXRfYXRfZGVwdGgoZGVwdGgsIGxpbWl0KQorCisgICAgICAgIG9sZGxpbWl0ID0gc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KDEwMDApCisKKyAgICAgICAgICAgIGZvciBsaW1pdCBpbiAoMTAsIDI1LCA1MCwgNzUsIDEwMCwgMTUwLCAyMDApOgorICAgICAgICAgICAgICAgICMgZm9ybXVsYSBleHRyYWN0ZWQgZnJvbSBfUHlfUmVjdXJzaW9uTGltaXRMb3dlcldhdGVyTWFyaygpCisgICAgICAgICAgICAgICAgaWYgbGltaXQgPiAyMDA6CisgICAgICAgICAgICAgICAgICAgIGRlcHRoID0gbGltaXQgLSA1MAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRlcHRoID0gbGltaXQgKiAzIC8vIDQKKyAgICAgICAgICAgICAgICBzZXRfcmVjdXJzaW9uX2xpbWl0X2F0X2RlcHRoKGRlcHRoLCBsaW1pdCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdChvbGRsaW1pdCkKIApAQCAtMjI2LDcgKzI2NCw3IEBACiAgICAgICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZigpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgUmVjdXJzaW9uRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGYoKQogCiAgICAgICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoJWQpCkBAIC02MDYsNyArNjQ0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpLCBzeXMuZXhlY3V0YWJsZSkKIAogICAgICAgICAjIElzc3VlICM3Nzc0OiBFbnN1cmUgdGhhdCBzeXMuZXhlY3V0YWJsZSBpcyBhbiBlbXB0eSBzdHJpbmcgaWYgYXJndlswXQotICAgICAgICAjIGhhcyBiZWVuIHNldCB0byBhbiBub24gZXhpc3RlbnQgcHJvZ3JhbSBuYW1lIGFuZCBQeXRob24gaXMgdW5hYmxlIHRvCisgICAgICAgICMgaGFzIGJlZW4gc2V0IHRvIGEgbm9uIGV4aXN0ZW50IHByb2dyYW0gbmFtZSBhbmQgUHl0aG9uIGlzIHVuYWJsZSB0bwogICAgICAgICAjIHJldHJpZXZlIHRoZSByZWFsIHByb2dyYW0gbmFtZQogCiAgICAgICAgICMgRm9yIGEgbm9ybWFsIGluc3RhbGxhdGlvbiwgaXQgc2hvdWxkIHdvcmsgd2l0aG91dCAnY3dkJwpAQCAtNjM3LDYgKzY3NSw3MiBAQAogICAgICAgICAgICAgZXhwZWN0ZWQgPSBOb25lCiAgICAgICAgIHNlbGYuY2hlY2tfZnNlbmNvZGluZyhmc19lbmNvZGluZywgZXhwZWN0ZWQpCiAKKyAgICBkZWYgY19sb2NhbGVfZ2V0X2Vycm9yX2hhbmRsZXIoc2VsZiwgaXNvbGF0ZWQ9RmFsc2UsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICAjIEZvcmNlIHRoZSBQT1NJWCBsb2NhbGUKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJMQ19BTEwiXSA9ICJDIgorICAgICAgICBjb2RlID0gJ1xuJy5qb2luKCgKKyAgICAgICAgICAgICdpbXBvcnQgc3lzJywKKyAgICAgICAgICAgICdkZWYgZHVtcChuYW1lKTonLAorICAgICAgICAgICAgJyAgICBzdGQgPSBnZXRhdHRyKHN5cywgbmFtZSknLAorICAgICAgICAgICAgJyAgICBwcmludCgiJXM6ICVzIiAlIChuYW1lLCBzdGQuZXJyb3JzKSknLAorICAgICAgICAgICAgJ2R1bXAoInN0ZGluIiknLAorICAgICAgICAgICAgJ2R1bXAoInN0ZG91dCIpJywKKyAgICAgICAgICAgICdkdW1wKCJzdGRlcnIiKScsCisgICAgICAgICkpCisgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGVdCisgICAgICAgIGlmIGlzb2xhdGVkOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1JIikKKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbnZbJ1BZVEhPTklPRU5DT0RJTkcnXSA9IGVuY29kaW5nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbnYucG9wKCdQWVRIT05JT0VOQ09ESU5HJywgTm9uZSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHJldHVybiBzdGRvdXQKKworICAgIGRlZiB0ZXN0X2NfbG9jYWxlX3N1cnJvZ2F0ZWVzY2FwZShzZWxmKToKKyAgICAgICAgb3V0ID0gc2VsZi5jX2xvY2FsZV9nZXRfZXJyb3JfaGFuZGxlcihpc29sYXRlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc3RkaW46IHN1cnJvZ2F0ZWVzY2FwZVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRvdXQ6IHN1cnJvZ2F0ZWVzY2FwZVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRlcnI6IGJhY2tzbGFzaHJlcGxhY2VcbicpCisKKyAgICAgICAgIyByZXBsYWNlIHRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIKKyAgICAgICAgb3V0ID0gc2VsZi5jX2xvY2FsZV9nZXRfZXJyb3JfaGFuZGxlcihlbmNvZGluZz0nOmlnbm9yZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRpbjogaWdub3JlXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZG91dDogaWdub3JlXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZGVycjogYmFja3NsYXNocmVwbGFjZVxuJykKKworICAgICAgICAjIGZvcmNlIHRoZSBlbmNvZGluZworICAgICAgICBvdXQgPSBzZWxmLmNfbG9jYWxlX2dldF9lcnJvcl9oYW5kbGVyKGVuY29kaW5nPSdpc284ODU5LTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc3RkaW46IHN0cmljdFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRvdXQ6IHN0cmljdFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRlcnI6IGJhY2tzbGFzaHJlcGxhY2VcbicpCisgICAgICAgIG91dCA9IHNlbGYuY19sb2NhbGVfZ2V0X2Vycm9yX2hhbmRsZXIoZW5jb2Rpbmc9J2lzbzg4NTktMTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc3RkaW46IHN0cmljdFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRvdXQ6IHN0cmljdFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRlcnI6IGJhY2tzbGFzaHJlcGxhY2VcbicpCisKKyAgICAgICAgIyBoYXZlIG5vIGFueSBlZmZlY3QKKyAgICAgICAgb3V0ID0gc2VsZi5jX2xvY2FsZV9nZXRfZXJyb3JfaGFuZGxlcihlbmNvZGluZz0nOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICdzdGRpbjogc3Vycm9nYXRlZXNjYXBlXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZG91dDogc3Vycm9nYXRlZXNjYXBlXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZGVycjogYmFja3NsYXNocmVwbGFjZVxuJykKKyAgICAgICAgb3V0ID0gc2VsZi5jX2xvY2FsZV9nZXRfZXJyb3JfaGFuZGxlcihlbmNvZGluZz0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZGluOiBzdXJyb2dhdGVlc2NhcGVcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc3Rkb3V0OiBzdXJyb2dhdGVlc2NhcGVcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc3RkZXJyOiBiYWNrc2xhc2hyZXBsYWNlXG4nKQorCiAgICAgZGVmIHRlc3RfaW1wbGVtZW50YXRpb24oc2VsZik6CiAgICAgICAgICMgVGhpcyB0ZXN0IGFwcGxpZXMgdG8gYWxsIGltcGxlbWVudGF0aW9ucyBlcXVhbGx5LgogCkBAIC02NjIsNyArNzY2LDcgQEAKICAgICBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2RlYnVnbWFsbG9jc3RhdHMoc2VsZik6CiAgICAgICAgICMgVGVzdCBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKQotICAgICAgICBmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworICAgICAgICBmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiAgICAgICAgIGFyZ3MgPSBbJy1jJywgJ2ltcG9ydCBzeXM7IHN5cy5fZGVidWdtYWxsb2NzdGF0cygpJ10KICAgICAgICAgcmV0LCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJmcmVlIFB5RGljdE9iamVjdHMiLCBlcnIpCkBAIC02OTksNiArODAzLDI4IEBACiAgICAgICAgIGMgPSBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCByYW5nZShiIC0gNTAsIGIgKyA1MCkpCiAKKyAgICBAdGVzdC5zdXBwb3J0LnJlcXVpcmVzX3R5cGVfY29sbGVjdGluZworICAgIGRlZiB0ZXN0X2lzX2ZpbmFsaXppbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLmlzX2ZpbmFsaXppbmcoKSwgRmFsc2UpCisgICAgICAgICMgRG9uJ3QgdXNlIHRoZSBhdGV4aXQgbW9kdWxlIGJlY2F1c2UgX1B5X0ZpbmFsaXppbmcgaXMgb25seSBzZXQKKyAgICAgICAgIyBhZnRlciBjYWxsaW5nIGF0ZXhpdCBjYWxsYmFja3MKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisKKyAgICAgICAgICAgIGNsYXNzIEF0RXhpdDoKKyAgICAgICAgICAgICAgICBpc19maW5hbGl6aW5nID0gc3lzLmlzX2ZpbmFsaXppbmcKKyAgICAgICAgICAgICAgICBwcmludCA9IHByaW50CisKKyAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmludChzZWxmLmlzX2ZpbmFsaXppbmcoKSwgZmx1c2g9VHJ1ZSkKKworICAgICAgICAgICAgIyBLZWVwIGEgcmVmZXJlbmNlIGluIHRoZSBfX21haW5fXyBtb2R1bGUgbmFtZXNwYWNlLCBzbyB0aGUKKyAgICAgICAgICAgICMgQXRFeGl0IGRlc3RydWN0b3Igd2lsbCBiZSBjYWxsZWQgYXQgUHl0aG9uIGV4aXQKKyAgICAgICAgICAgIHJlZiA9IEF0RXhpdCgpCisgICAgICAgICIiIgorICAgICAgICByYywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJzdHJpcCgpLCBiJ1RydWUnKQorCiAKIEB0ZXN0LnN1cHBvcnQuY3B5dGhvbl9vbmx5CiBjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTcwOCwxMSArODM0LDYgQEAKICAgICAgICAgc2VsZi5sb25nZGlnaXQgPSBzeXMuaW50X2luZm8uc2l6ZW9mX2RpZ2l0CiAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKICAgICAgICAgc2VsZi5nY19oZWFkc2l6ZSA9IF90ZXN0Y2FwaS5TSVpFT0ZfUFlHQ19IRUFECi0gICAgICAgIHNlbGYuZmlsZSA9IG9wZW4odGVzdC5zdXBwb3J0LlRFU1RGTiwgJ3diJykKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgdGVzdC5zdXBwb3J0LnVubGluayh0ZXN0LnN1cHBvcnQuVEVTVEZOKQogCiAgICAgY2hlY2tfc2l6ZW9mID0gdGVzdC5zdXBwb3J0LmNoZWNrX3NpemVvZgogCkBAIC03NjMsNiArODg0LDcgQEAKIAogICAgIGRlZiB0ZXN0X29iamVjdHR5cGVzKHNlbGYpOgogICAgICAgICAjIGNoZWNrIGFsbCB0eXBlcyBkZWZpbmVkIGluIE9iamVjdHMvCisgICAgICAgIGNhbGNzaXplID0gc3RydWN0LmNhbGNzaXplCiAgICAgICAgIHNpemUgPSB0ZXN0LnN1cHBvcnQuY2FsY29ianNpemUKICAgICAgICAgdnNpemUgPSB0ZXN0LnN1cHBvcnQuY2FsY3ZvYmpzaXplCiAgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKQEAgLTc3MSw3ICs4OTMsNyBAQAogICAgICAgICAjIGJ1ZmZlcgogICAgICAgICAjIFhYWAogICAgICAgICAjIGJ1aWx0aW5fZnVuY3Rpb25fb3JfbWV0aG9kCi0gICAgICAgIGNoZWNrKGxlbiwgc2l6ZSgnM1AnKSkgIyBYWFggY2hlY2sgbGF5b3V0CisgICAgICAgIGNoZWNrKGxlbiwgc2l6ZSgnNFAnKSkgIyBYWFggY2hlY2sgbGF5b3V0CiAgICAgICAgICMgYnl0ZWFycmF5CiAgICAgICAgIHNhbXBsZXMgPSBbYicnLCBiJ3UnKjEwMDAwMF0KICAgICAgICAgZm9yIHNhbXBsZSBpbiBzYW1wbGVzOgpAQCAtODE0LDE3ICs5MzYsMjMgQEAKICAgICAgICAgIyBtZXRob2Qtd3JhcHBlciAoZGVzY3JpcHRvciBvYmplY3QpCiAgICAgICAgIGNoZWNrKHt9Ll9faXRlcl9fLCBzaXplKCcyUCcpKQogICAgICAgICAjIGRpY3QKLSAgICAgICAgY2hlY2soe30sIHNpemUoJ24yUCcgKyAnMm5QbicgKyA4KiduMlAnKSkKKyAgICAgICAgY2hlY2soe30sIHNpemUoJ24yUCcpICsgY2FsY3NpemUoJzJuUG4nKSArIDgqY2FsY3NpemUoJ24yUCcpKQogICAgICAgICBsb25nZGljdCA9IHsxOjEsIDI6MiwgMzozLCA0OjQsIDU6NSwgNjo2LCA3OjcsIDg6OH0KLSAgICAgICAgY2hlY2sobG9uZ2RpY3QsIHNpemUoJ24yUCcgKyAnMm5QbicpICsgMTYqc3RydWN0LmNhbGNzaXplKCduMlAnKSkKLSAgICAgICAgIyBkaWN0aW9uYXJ5LWtleWl0ZXJhdG9yCisgICAgICAgIGNoZWNrKGxvbmdkaWN0LCBzaXplKCduMlAnKSArIGNhbGNzaXplKCcyblBuJykgKyAxNipjYWxjc2l6ZSgnbjJQJykpCisgICAgICAgICMgZGljdGlvbmFyeS1rZXl2aWV3CiAgICAgICAgIGNoZWNrKHt9LmtleXMoKSwgc2l6ZSgnUCcpKQotICAgICAgICAjIGRpY3Rpb25hcnktdmFsdWVpdGVyYXRvcgorICAgICAgICAjIGRpY3Rpb25hcnktdmFsdWV2aWV3CiAgICAgICAgIGNoZWNrKHt9LnZhbHVlcygpLCBzaXplKCdQJykpCi0gICAgICAgICMgZGljdGlvbmFyeS1pdGVtaXRlcmF0b3IKKyAgICAgICAgIyBkaWN0aW9uYXJ5LWl0ZW12aWV3CiAgICAgICAgIGNoZWNrKHt9Lml0ZW1zKCksIHNpemUoJ1AnKSkKICAgICAgICAgIyBkaWN0aW9uYXJ5IGl0ZXJhdG9yCiAgICAgICAgIGNoZWNrKGl0ZXIoe30pLCBzaXplKCdQMm5QbicpKQorICAgICAgICAjIGRpY3Rpb25hcnkta2V5aXRlcmF0b3IKKyAgICAgICAgY2hlY2soaXRlcih7fS5rZXlzKCkpLCBzaXplKCdQMm5QbicpKQorICAgICAgICAjIGRpY3Rpb25hcnktdmFsdWVpdGVyYXRvcgorICAgICAgICBjaGVjayhpdGVyKHt9LnZhbHVlcygpKSwgc2l6ZSgnUDJuUG4nKSkKKyAgICAgICAgIyBkaWN0aW9uYXJ5LWl0ZW1pdGVyYXRvcgorICAgICAgICBjaGVjayhpdGVyKHt9Lml0ZW1zKCkpLCBzaXplKCdQMm5QbicpKQogICAgICAgICAjIGRpY3Rwcm94eQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6IHBhc3MKICAgICAgICAgY2hlY2soQy5fX2RpY3RfXywgc2l6ZSgnUCcpKQpAQCAtODc1LDcgKzEwMDMsNyBAQAogICAgICAgICAgICAgY2hlY2soYmFyLCBzaXplKCdQUCcpKQogICAgICAgICAjIGdlbmVyYXRvcgogICAgICAgICBkZWYgZ2V0X2dlbigpOiB5aWVsZCAxCi0gICAgICAgIGNoZWNrKGdldF9nZW4oKSwgc2l6ZSgnUGIyUCcpKQorICAgICAgICBjaGVjayhnZXRfZ2VuKCksIHNpemUoJ1BiMlBQUCcpKQogICAgICAgICAjIGl0ZXJhdG9yCiAgICAgICAgIGNoZWNrKGl0ZXIoJ2FiYycpLCBzaXplKCdsUCcpKQogICAgICAgICAjIGNhbGxhYmxlLWl0ZXJhdG9yCkBAIC05MjksNyArMTA1Nyw3IEBACiAgICAgICAgICMgZnJvemVuc2V0CiAgICAgICAgIFB5U2V0X01JTlNJWkUgPSA4CiAgICAgICAgIHNhbXBsZXMgPSBbW10sIHJhbmdlKDEwKSwgcmFuZ2UoNTApXQotICAgICAgICBzID0gc2l6ZSgnM24yUCcgKyBQeVNldF9NSU5TSVpFKiduUCcgKyAnblAnKQorICAgICAgICBzID0gc2l6ZSgnM25QJyArIFB5U2V0X01JTlNJWkUqJ25QJyArICcyblAnKQogICAgICAgICBmb3Igc2FtcGxlIGluIHNhbXBsZXM6CiAgICAgICAgICAgICBtaW51c2VkID0gbGVuKHNhbXBsZSkKICAgICAgICAgICAgIGlmIG1pbnVzZWQgPT0gMDogdG1wID0gMQpAQCAtOTQzLDggKzEwNzEsOCBAQAogICAgICAgICAgICAgICAgIGNoZWNrKHNldChzYW1wbGUpLCBzKQogICAgICAgICAgICAgICAgIGNoZWNrKGZyb3plbnNldChzYW1wbGUpLCBzKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjaGVjayhzZXQoc2FtcGxlKSwgcyArIG5ld3NpemUqc3RydWN0LmNhbGNzaXplKCduUCcpKQotICAgICAgICAgICAgICAgIGNoZWNrKGZyb3plbnNldChzYW1wbGUpLCBzICsgbmV3c2l6ZSpzdHJ1Y3QuY2FsY3NpemUoJ25QJykpCisgICAgICAgICAgICAgICAgY2hlY2soc2V0KHNhbXBsZSksIHMgKyBuZXdzaXplKmNhbGNzaXplKCduUCcpKQorICAgICAgICAgICAgICAgIGNoZWNrKGZyb3plbnNldChzYW1wbGUpLCBzICsgbmV3c2l6ZSpjYWxjc2l6ZSgnblAnKSkKICAgICAgICAgIyBzZXRpdGVyYXRvcgogICAgICAgICBjaGVjayhpdGVyKHNldCgpKSwgc2l6ZSgnUDNuJykpCiAgICAgICAgICMgc2xpY2UKQEAgLTk1NiwxMyArMTA4NCwyMCBAQAogICAgICAgICBjaGVjaygoMSwyLDMpLCB2c2l6ZSgnJykgKyAzKnNlbGYuUCkKICAgICAgICAgIyB0eXBlCiAgICAgICAgICMgc3RhdGljIHR5cGU6IFB5VHlwZU9iamVjdAotICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJUCcpCisgICAgICAgIGZtdCA9ICdQMm4xNVBsNFBuOVBuMTFQSVAnCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0Y291bnRzJyk6CisgICAgICAgICAgICBmbXQgKz0gJzNuMlAnCisgICAgICAgIHMgPSB2c2l6ZShmbXQpCiAgICAgICAgIGNoZWNrKGludCwgcykKLSAgICAgICAgIyAoUHlUeXBlT2JqZWN0ICsgUHlOdW1iZXJNZXRob2RzICsgUHlNYXBwaW5nTWV0aG9kcyArCi0gICAgICAgICMgIFB5U2VxdWVuY2VNZXRob2RzICsgUHlCdWZmZXJQcm9jcyArIDRQKQotICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJUCcpICsgc3RydWN0LmNhbGNzaXplKCczNFAgM1AgMTBQIDJQIDRQJykKKyAgICAgICAgcyA9IHZzaXplKGZtdCArICAgICAgICAgICAgICAgICAjIFB5VHlwZU9iamVjdAorICAgICAgICAgICAgICAgICAgJzNQJyAgICAgICAgICAgICAgICAgICMgUHlBc3luY01ldGhvZHMKKyAgICAgICAgICAgICAgICAgICczNlAnICAgICAgICAgICAgICAgICAjIFB5TnVtYmVyTWV0aG9kcworICAgICAgICAgICAgICAgICAgJzNQJyAgICAgICAgICAgICAgICAgICMgUHlNYXBwaW5nTWV0aG9kcworICAgICAgICAgICAgICAgICAgJzEwUCcgICAgICAgICAgICAgICAgICMgUHlTZXF1ZW5jZU1ldGhvZHMKKyAgICAgICAgICAgICAgICAgICcyUCcgICAgICAgICAgICAgICAgICAjIFB5QnVmZmVyUHJvY3MKKyAgICAgICAgICAgICAgICAgICc0UCcpCiAgICAgICAgICMgU2VwYXJhdGUgYmxvY2sgZm9yIFB5RGljdEtleXNPYmplY3Qgd2l0aCA0IGVudHJpZXMKLSAgICAgICAgcyArPSBzdHJ1Y3QuY2FsY3NpemUoIjJuUG4iKSArIDQqc3RydWN0LmNhbGNzaXplKCJuMlAiKQorICAgICAgICBzICs9IGNhbGNzaXplKCIyblBuIikgKyA0KmNhbGNzaXplKCJuMlAiKQogICAgICAgICAjIGNsYXNzCiAgICAgICAgIGNsYXNzIG5ld3N0eWxlY2xhc3Mob2JqZWN0KTogcGFzcwogICAgICAgICBjaGVjayhuZXdzdHlsZWNsYXNzLCBzKQpAQCAtMTAwNiw2ICsxMTQxLDM2IEBACiAgICAgICAgICMgd2Vha2NhbGxhYmxlcHJveHkKICAgICAgICAgY2hlY2sod2Vha3JlZi5wcm94eShpbnQpLCBzaXplKCcyUG4yUCcpKQogCisgICAgZGVmIGNoZWNrX3Nsb3RzKHNlbGYsIG9iaiwgYmFzZSwgZXh0cmEpOgorICAgICAgICBleHBlY3RlZCA9IHN5cy5nZXRzaXplb2YoYmFzZSkgKyBzdHJ1Y3QuY2FsY3NpemUoZXh0cmEpCisgICAgICAgIGlmIGdjLmlzX3RyYWNrZWQob2JqKSBhbmQgbm90IGdjLmlzX3RyYWNrZWQoYmFzZSk6CisgICAgICAgICAgICBleHBlY3RlZCArPSBzZWxmLmdjX2hlYWRzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihvYmopLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3Nsb3RzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGFsbCBzdWJjbGFzc2FibGUgdHlwZXMgZGVmaW5lZCBpbiBPYmplY3RzLyB0aGF0IGFsbG93CisgICAgICAgICMgbm9uLWVtcHR5IF9fc2xvdHNfXworICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2xvdHMKKyAgICAgICAgY2xhc3MgQkEoYnl0ZWFycmF5KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICdhJywgJ2InLCAnYycKKyAgICAgICAgY2hlY2soQkEoKSwgYnl0ZWFycmF5KCksICczUCcpCisgICAgICAgIGNsYXNzIEQoZGljdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAnYScsICdiJywgJ2MnCisgICAgICAgIGNoZWNrKEQoeD1bXSksIHsneCc6IFtdfSwgJzNQJykKKyAgICAgICAgY2xhc3MgTChsaXN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICdhJywgJ2InLCAnYycKKyAgICAgICAgY2hlY2soTCgpLCBbXSwgJzNQJykKKyAgICAgICAgY2xhc3MgUyhzZXQpOgorICAgICAgICAgICAgX19zbG90c19fID0gJ2EnLCAnYicsICdjJworICAgICAgICBjaGVjayhTKCksIHNldCgpLCAnM1AnKQorICAgICAgICBjbGFzcyBGUyhmcm96ZW5zZXQpOgorICAgICAgICAgICAgX19zbG90c19fID0gJ2EnLCAnYicsICdjJworICAgICAgICBjaGVjayhGUygpLCBmcm96ZW5zZXQoKSwgJzNQJykKKyAgICAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKKyAgICAgICAgY2xhc3MgT0QoT3JkZXJlZERpY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gJ2EnLCAnYicsICdjJworICAgICAgICBjaGVjayhPRCh4PVtdKSwgT3JkZXJlZERpY3QoeD1bXSksICczUCcpCisKICAgICBkZWYgdGVzdF9weXRob250eXBlcyhzZWxmKToKICAgICAgICAgIyBjaGVjayBhbGwgdHlwZXMgZGVmaW5lZCBpbiBQeXRob24vCiAgICAgICAgIHNpemUgPSB0ZXN0LnN1cHBvcnQuY2FsY29ianNpemUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHByb2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3N5c19zZXRwcm9maWxlLnB5CmluZGV4IDk4MTZlM2UuLmEzZTFkMzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHByb2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNfc2V0cHJvZmlsZS5weQpAQCAtMyw3ICszLDYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogY2xhc3MgVGVzdEdldFByb2ZpbGUodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE2NSw3ICsxNjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBnX2lkZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAKLSAgICBkZWYgdGVzdF9leGNlcHRpb25fcHJvcG9nYXRpb24oc2VsZik6CisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX3Byb3BhZ2F0aW9uKHNlbGYpOgogICAgICAgICBkZWYgZihwKToKICAgICAgICAgICAgIDEvMAogICAgICAgICBkZWYgZyhwKToKQEAgLTI2MCw3ICsyNTksNiBAQAogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CiAgICAgICAgICAgICAgICAgeWllbGQgaQotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgICBkZWYgZyhwKToKICAgICAgICAgICAgIGZvciBpIGluIGYoKToKICAgICAgICAgICAgICAgICBwYXNzCkBAIC0zNzQsMTMgKzM3Miw1IEBACiAgICAgcHByaW50LnBwcmludChjYXB0dXJlX2V2ZW50cyhjYWxsYWJsZSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBUZXN0R2V0UHJvZmlsZSwKLSAgICAgICAgUHJvZmlsZUhvb2tUZXN0Q2FzZSwKLSAgICAgICAgUHJvZmlsZVNpbXVsYXRvclRlc3RDYXNlCi0gICAgKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNfc2V0dHJhY2UucHkKaW5kZXggYWU4Zjg0NS4uNTA5YmMzZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNfc2V0dHJhY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNfc2V0dHJhY2UucHkKQEAgLTM4OCw2ICszODgsMTUgQEAKICAgICAgICAgICAgICAoMjU3LCAnbGluZScpLAogICAgICAgICAgICAgICgyNTcsICdyZXR1cm4nKV0pCiAKKyAgICBkZWYgdGVzdF8xN19ub25lX2ZfdHJhY2Uoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjAwNDE6IGZpeCBUeXBlRXJyb3Igd2hlbiBmX3RyYWNlIGlzIHNldCB0byBOb25lLgorICAgICAgICBkZWYgZnVuYygpOgorICAgICAgICAgICAgc3lzLl9nZXRmcmFtZSgpLmZfdHJhY2UgPSBOb25lCisgICAgICAgICAgICBsaW5lbm8gPSAyCisgICAgICAgIHNlbGYucnVuX2FuZF9jb21wYXJlKGZ1bmMsCisgICAgICAgICAgICBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgKDEsICdsaW5lJyldKQorCiAKIGNsYXNzIFJhaXNpbmdUcmFjZUZ1bmNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQppbmRleCA4ZWQ3MjlhLi5hMjNiZjA2YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKQEAgLTM4NSw2ICszODUsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodmFyc1snU08nXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzWydTTyddLCB2YXJzWydFWFRfU1VGRklYJ10pCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ0xpbnV4LXNwZWNpZmljIHRlc3QnKQorICAgIGRlZiB0ZXN0X3RyaXBsZXRfaW5fZXh0X3N1ZmZpeChzZWxmKToKKyAgICAgICAgaW1wb3J0IGN0eXBlcywgcGxhdGZvcm0sIHJlCisgICAgICAgIG1hY2hpbmUgPSBwbGF0Zm9ybS5tYWNoaW5lKCkKKyAgICAgICAgc3VmZml4ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykKKyAgICAgICAgaWYgcmUubWF0Y2goJyhhYXJjaDY0fGFybXxtaXBzfHBwY3xwb3dlcnBjfHMzOTB8c3BhcmMpJywgbWFjaGluZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xpbnV4JyBpbiBzdWZmaXgsIHN1ZmZpeCkKKyAgICAgICAgaWYgcmUubWF0Y2goJyhpWzMtNl04Nnx4ODZfNjQpJCcsIG1hY2hpbmUpOgorICAgICAgICAgICAgaWYgY3R5cGVzLnNpemVvZihjdHlwZXMuY19jaGFyX3AoKSkgPT0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VmZml4LmVuZHN3aXRoKCdpMzg2LWxpbnV4LWdudS5zbycpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Igc3VmZml4LmVuZHN3aXRoKCd4ODZfNjQtbGludXgtZ251eDMyLnNvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCkKKyAgICAgICAgICAgIGVsc2U6ICMgOCBieXRlIHBvaW50ZXIgc2l6ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWZmaXguZW5kc3dpdGgoJ3g4Nl82NC1saW51eC1nbnUuc28nKSwgc3VmZml4KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAnT1MgWC1zcGVjaWZpYyB0ZXN0JykKKyAgICBkZWYgdGVzdF9vc3hfZXh0X3N1ZmZpeChzZWxmKToKKyAgICAgICAgc3VmZml4ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1ZmZpeC5lbmRzd2l0aCgnLWRhcndpbi5zbycpLCBzdWZmaXgpCiAKIGNsYXNzIE1ha2VmaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC00MDIsNiArNDIxLDggQEAKICAgICAgICAgICAgIHByaW50KCJ2YXIzPTQyIiwgZmlsZT1tYWtlZmlsZSkKICAgICAgICAgICAgIHByaW50KCJ2YXI0PSQvaW52YWxpZCIsIGZpbGU9bWFrZWZpbGUpCiAgICAgICAgICAgICBwcmludCgidmFyNT1kb2xsYXIkJDUiLCBmaWxlPW1ha2VmaWxlKQorICAgICAgICAgICAgcHJpbnQoInZhcjY9JHt2YXIzfS9saWIvcHl0aG9uMy41L2NvbmZpZy0kKFZBUjIpJCh2YXI1KSIKKyAgICAgICAgICAgICAgICAgICIteDg2XzY0LWxpbnV4LWdudSIsIGZpbGU9bWFrZWZpbGUpCiAgICAgICAgIHZhcnMgPSBzeXNjb25maWcuX3BhcnNlX21ha2VmaWxlKFRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzLCB7CiAgICAgICAgICAgICAndmFyMSc6ICdhYjQyJywKQEAgLTQwOSw2ICs0MzAsNyBAQAogICAgICAgICAgICAgJ3ZhcjMnOiA0MiwKICAgICAgICAgICAgICd2YXI0JzogJyQvaW52YWxpZCcsCiAgICAgICAgICAgICAndmFyNSc6ICdkb2xsYXIkNScsCisgICAgICAgICAgICAndmFyNic6ICc0Mi9saWIvcHl0aG9uMy41L2NvbmZpZy1iNDJkb2xsYXIkNS14ODZfNjQtbGludXgtZ251JywKICAgICAgICAgfSkKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzbG9nLnB5CmluZGV4IGI3ZmQyYmQuLjZmOTAyZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3lzbG9nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzbG9nLnB5CkBAIC0zNiw4ICszNiw1IEBACiAgICAgICAgIHN5c2xvZy5vcGVubG9nKCkKICAgICAgICAgc3lzbG9nLnN5c2xvZygndGVzdCBtZXNzYWdlIGZyb20gcHl0aG9uIHRlc3Rfc3lzbG9nJykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKaW5kZXggMzA5MWNlNy4uYWJmYjM0ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQpAQCAtMiwxMSArMiwxNCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgaW8KIGZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1Citmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCiAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKIGltcG9ydCB0YXJmaWxlCiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogCiAjIENoZWNrIGZvciBvdXIgY29tcHJlc3Npb24gbW9kdWxlcy4KIHRyeToKQEAgLTI4NSw2ICsyODgsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3BheCcgKyAoYicvMTIzJyAqIDEyNSkgKyBiJy9sb25nbGluayBsaW5rIHRvIHBheCcgKwogICAgICAgICAgICAgICAgICAgICAgIChiJy8xMjMnICogMTI1KSArIGInL2xvbmduYW1lJywgb3V0KQogCisgICAgZGVmIHRlc3RfbGlzdF9tZW1iZXJzKHNlbGYpOgorICAgICAgICB0aW8gPSBpby5UZXh0SU9XcmFwcGVyKGlvLkJ5dGVzSU8oKSwgJ2FzY2lpJywgbmV3bGluZT0nXG4nKQorICAgICAgICBkZWYgbWVtYmVycyh0YXIpOgorICAgICAgICAgICAgZm9yIHRhcmluZm8gaW4gdGFyLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBpZiAncmVnJyBpbiB0YXJpbmZvLm5hbWU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRhcmluZm8KKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihzeXMsICdzdGRvdXQnLCB0aW8pOgorICAgICAgICAgICAgc2VsZi50YXIubGlzdCh2ZXJib3NlPUZhbHNlLCBtZW1iZXJzPW1lbWJlcnMoc2VsZi50YXIpKQorICAgICAgICBvdXQgPSB0aW8uZGV0YWNoKCkuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEluKGIndXN0YXIvcmVndHlwZScsIG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ3VzdGFyL2NvbnR0eXBlJywgb3V0KQorCiAKIGNsYXNzIEd6aXBMaXN0VGVzdChHemlwVGVzdCwgTGlzdFRlc3QpOgogICAgIHBhc3MKQEAgLTk5MCw2ICsxMDA1LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm9iai5jbG9zZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZm9iai5nZXR2YWx1ZSgpKQogCisgICAgZGVmIHRlc3RfZW9mX21hcmtlcihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYW4gZW5kIG9mIGFyY2hpdmUgbWFya2VyIGlzIHdyaXR0ZW4gKHR3byB6ZXJvIGJsb2NrcykuCisgICAgICAgICMgdGFyZmlsZSBpbnNpc3RzIG9uIGFsaWduaW5nIGFyY2hpdmVzIHRvIGEgMjAgKiA1MTIgYnl0ZSByZWNvcmRzaXplLgorICAgICAgICAjIFNvLCB3ZSBjcmVhdGUgYW4gYXJjaGl2ZSB0aGF0IGhhcyBleGFjdGx5IDEwMjQwIGJ5dGVzIHdpdGhvdXQgdGhlCisgICAgICAgICMgbWFya2VyLCBhbmQgaGFzIDIwNDgwIGJ5dGVzIG9uY2UgdGhlIG1hcmtlciBpcyB3cml0dGVuLgorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpIGFzIHRhcjoKKyAgICAgICAgICAgIHQgPSB0YXJmaWxlLlRhckluZm8oImZvbyIpCisgICAgICAgICAgICB0LnNpemUgPSB0YXJmaWxlLlJFQ09SRFNJWkUgLSB0YXJmaWxlLkJMT0NLU0laRQorICAgICAgICAgICAgdGFyLmFkZGZpbGUodCwgaW8uQnl0ZXNJTyhiImEiICogdC5zaXplKSkKKworICAgICAgICB3aXRoIHNlbGYub3Blbih0bXBuYW1lLCAicmIiKSBhcyBmb2JqOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZm9iai5yZWFkKCkpLCB0YXJmaWxlLlJFQ09SRFNJWkUgKiAyKQorCiAKIGNsYXNzIFdyaXRlVGVzdChXcml0ZVRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE0MzMsNiArMTQ2MSw4OCBAQAogICAgICAgICAgICAgICAgICAgICgibG9uZ2xuay8iICogMTI3KSArICJsb25nbGlua18iKQogCiAKK2NsYXNzIENyZWF0ZVRlc3QoV3JpdGVUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgcHJlZml4ID0gIng6IgorCisgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJzcGFtZWdnczQyIikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC51bmxpbmsodG1wbmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHdpdGggb3BlbihjbHMuZmlsZV9wYXRoLCAid2IiKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZShiImFhYSIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBzdXBwb3J0LnVubGluayhjbHMuZmlsZV9wYXRoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlKHNlbGYpOgorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpIGFzIHRvYmo6CisgICAgICAgICAgICB0b2JqLmFkZChzZWxmLmZpbGVfcGF0aCkKKworICAgICAgICB3aXRoIHNlbGYudGFyb3Blbih0bXBuYW1lKSBhcyB0b2JqOgorICAgICAgICAgICAgbmFtZXMgPSB0b2JqLmdldG5hbWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzcGFtZWdnczQyJywgbmFtZXNbMF0pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkgYXMgdG9iajoKKyAgICAgICAgICAgIHRvYmouYWRkKHNlbGYuZmlsZV9wYXRoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIHRvYmogPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQorCisgICAgICAgIHdpdGggc2VsZi50YXJvcGVuKHRtcG5hbWUpIGFzIHRvYmo6CisgICAgICAgICAgICBuYW1lcyA9IHRvYmouZ2V0bmFtZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3NwYW1lZ2dzNDInLCBuYW1lc1swXSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV90YXJvcGVuKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYudGFyb3Blbih0bXBuYW1lLCAieCIpIGFzIHRvYmo6CisgICAgICAgICAgICB0b2JqLmFkZChzZWxmLmZpbGVfcGF0aCkKKworICAgICAgICB3aXRoIHNlbGYudGFyb3Blbih0bXBuYW1lKSBhcyB0b2JqOgorICAgICAgICAgICAgbmFtZXMgPSB0b2JqLmdldG5hbWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzcGFtZWdnczQyJywgbmFtZXNbMF0pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZXhpc3RpbmdfdGFyb3BlbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnRhcm9wZW4odG1wbmFtZSwgIngiKSBhcyB0b2JqOgorICAgICAgICAgICAgdG9iai5hZGQoc2VsZi5maWxlX3BhdGgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnRhcm9wZW4odG1wbmFtZSwgIngiKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2l0aCBzZWxmLnRhcm9wZW4odG1wbmFtZSkgYXMgdG9iajoKKyAgICAgICAgICAgIG5hbWVzID0gdG9iai5nZXRuYW1lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5hbWVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic3BhbWVnZ3M0MiIsIG5hbWVzWzBdKQorCisKK2NsYXNzIEd6aXBDcmVhdGVUZXN0KEd6aXBUZXN0LCBDcmVhdGVUZXN0KToKKyAgICBwYXNzCisKKworY2xhc3MgQnoyQ3JlYXRlVGVzdChCejJUZXN0LCBDcmVhdGVUZXN0KToKKyAgICBwYXNzCisKKworY2xhc3MgTHptYUNyZWF0ZVRlc3QoTHptYVRlc3QsIENyZWF0ZVRlc3QpOgorICAgIHBhc3MKKworCitjbGFzcyBDcmVhdGVXaXRoWE1vZGVUZXN0KENyZWF0ZVRlc3QpOgorCisgICAgcHJlZml4ID0gIngiCisKKyAgICB0ZXN0X2NyZWF0ZV90YXJvcGVuID0gTm9uZQorICAgIHRlc3RfY3JlYXRlX2V4aXN0aW5nX3Rhcm9wZW4gPSBOb25lCisKKwogQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgImxpbmsiKSwgIk1pc3NpbmcgaGFyZGxpbmsgaW1wbGVtZW50YXRpb24iKQogY2xhc3MgSGFyZGxpbmtUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRlc3QgdGhlIGNyZWF0aW9uIG9mIExOS1RZUEUgKGhhcmRsaW5rKSBtZW1iZXJzIGluIGFuIGFyY2hpdmUuCkBAIC0xNTU3LDkgKzE2NjcsNyBAQAogICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogCi1jbGFzcyBVc3RhclVuaWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGZvcm1hdCA9IHRhcmZpbGUuVVNUQVJfRk9STUFUCitjbGFzcyBVbmljb2RlVGVzdDoKIAogICAgIGRlZiB0ZXN0X2lzbzg4NTlfMV9maWxlbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF91bmljb2RlX2ZpbGVuYW1lKCJpc284ODU5LTEiKQpAQCAtMTY0MCw3ICsxNzQ4LDg2IEBACiAgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAKLWNsYXNzIEdOVVVuaWNvZGVUZXN0KFVzdGFyVW5pY29kZVRlc3QpOgorY2xhc3MgVXN0YXJVbmljb2RlVGVzdChVbmljb2RlVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZm9ybWF0ID0gdGFyZmlsZS5VU1RBUl9GT1JNQVQKKworICAgICMgVGVzdCB3aGV0aGVyIHRoZSB1dGYtOCBlbmNvZGVkIHZlcnNpb24gb2YgYSBmaWxlbmFtZSBleGNlZWRzIHRoZSAxMDAKKyAgICAjIGJ5dGVzIG5hbWUgZmllbGQgbGltaXQgKGV2ZXJ5IG9jY3VycmVuY2Ugb2YgJ1x4ZmYnIHdpbGwgYmUgZXhwYW5kZWQgdG8gMgorICAgICMgYnl0ZXMpLgorICAgIGRlZiB0ZXN0X3VuaWNvZGVfbmFtZTEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfdXN0YXJfbmFtZSgiMDEyMzQ1Njc4OSIgKiAxMCkKKyAgICAgICAgc2VsZi5fdGVzdF91c3Rhcl9uYW1lKCIwMTIzNDU2Nzg5IiAqIDEwICsgIjAiLCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX25hbWUoIjAxMjM0NTY3ODkiICogOSArICIwMTIzNDU2N1x4ZmYiKQorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX25hbWUoIjAxMjM0NTY3ODkiICogOSArICIwMTIzNDU2NzhceGZmIiwgVmFsdWVFcnJvcikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfbmFtZTIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfdXN0YXJfbmFtZSgiMDEyMzQ1Njc4OSIgKiA5ICsgIjAxMjM0NVx4ZmZceGZmIikKKyAgICAgICAgc2VsZi5fdGVzdF91c3Rhcl9uYW1lKCIwMTIzNDU2Nzg5IiAqIDkgKyAiMDEyMzQ1Nlx4ZmZceGZmIiwgVmFsdWVFcnJvcikKKworICAgICMgVGVzdCB3aGV0aGVyIHRoZSB1dGYtOCBlbmNvZGVkIHZlcnNpb24gb2YgYSBmaWxlbmFtZSBleGNlZWRzIHRoZSAxNTUKKyAgICAjIGJ5dGVzIHByZWZpeCArICcvJyArIDEwMCBieXRlcyBuYW1lIGxpbWl0LgorICAgIGRlZiB0ZXN0X3VuaWNvZGVfbG9uZ25hbWUxKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX25hbWUoIjAxMjM0NTY3ODkiICogMTUgKyAiMDEyMzQvIiArICIwMTIzNDU2Nzg5IiAqIDEwKQorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX25hbWUoIjAxMjM0NTY3ODkiICogMTUgKyAiMDEyMy80IiArICIwMTIzNDU2Nzg5IiAqIDEwLCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX25hbWUoIjAxMjM0NTY3ODkiICogMTUgKyAiMDEyXHhmZi8iICsgIjAxMjM0NTY3ODkiICogMTApCisgICAgICAgIHNlbGYuX3Rlc3RfdXN0YXJfbmFtZSgiMDEyMzQ1Njc4OSIgKiAxNSArICIwMTIzXHhmZi8iICsgIjAxMjM0NTY3ODkiICogMTAsIFZhbHVlRXJyb3IpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2xvbmduYW1lMihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF91c3Rhcl9uYW1lKCIwMTIzNDU2Nzg5IiAqIDE1ICsgIjAxXHhmZi8yIiArICIwMTIzNDU2Nzg5IiAqIDEwLCBWYWx1ZUVycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX25hbWUoIjAxMjM0NTY3ODkiICogMTUgKyAiMDFceGZmXHhmZi8iICsgIjAxMjM0NTY3ODkiICogMTAsIFZhbHVlRXJyb3IpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2xvbmduYW1lMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF91c3Rhcl9uYW1lKCIwMTIzNDU2Nzg5IiAqIDE1ICsgIjAxXHhmZlx4ZmYvMiIgKyAiMDEyMzQ1Njc4OSIgKiAxMCwgVmFsdWVFcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF91c3Rhcl9uYW1lKCIwMTIzNDU2Nzg5IiAqIDE1ICsgIjAxMjM0LyIgKyAiMDEyMzQ1Njc4OSIgKiA5ICsgIjAxMjM0NTY3XHhmZiIpCisgICAgICAgIHNlbGYuX3Rlc3RfdXN0YXJfbmFtZSgiMDEyMzQ1Njc4OSIgKiAxNSArICIwMTIzNC8iICsgIjAxMjM0NTY3ODkiICogOSArICIwMTIzNDU2NzhceGZmIiwgVmFsdWVFcnJvcikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfbG9uZ25hbWU0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX25hbWUoIjAxMjM0NTY3ODkiICogMTUgKyAiMDEyMzQvIiArICIwMTIzNDU2Nzg5IiAqIDkgKyAiMDEyMzQ1XHhmZlx4ZmYiKQorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX25hbWUoIjAxMjM0NTY3ODkiICogMTUgKyAiMDEyMzQvIiArICIwMTIzNDU2Nzg5IiAqIDkgKyAiMDEyMzQ1Nlx4ZmZceGZmIiwgVmFsdWVFcnJvcikKKworICAgIGRlZiBfdGVzdF91c3Rhcl9uYW1lKHNlbGYsIG5hbWUsIGV4Yz1Ob25lKToKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9c2VsZi5mb3JtYXQsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIHRhcjoKKyAgICAgICAgICAgIHQgPSB0YXJmaWxlLlRhckluZm8obmFtZSkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHRhci5hZGRmaWxlKHQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4YywgdGFyLmFkZGZpbGUsIHQpCisKKyAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiB0YXI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgdC5uYW1lKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgIyBUZXN0IHRoZSBzYW1lIGFzIGFib3ZlIGZvciB0aGUgMTAwIGJ5dGVzIGxpbmsgZmllbGQuCisgICAgZGVmIHRlc3RfdW5pY29kZV9saW5rMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF91c3Rhcl9saW5rKCIwMTIzNDU2Nzg5IiAqIDEwKQorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX2xpbmsoIjAxMjM0NTY3ODkiICogMTAgKyAiMCIsIFZhbHVlRXJyb3IpCisgICAgICAgIHNlbGYuX3Rlc3RfdXN0YXJfbGluaygiMDEyMzQ1Njc4OSIgKiA5ICsgIjAxMjM0NTY3XHhmZiIpCisgICAgICAgIHNlbGYuX3Rlc3RfdXN0YXJfbGluaygiMDEyMzQ1Njc4OSIgKiA5ICsgIjAxMjM0NTY3OFx4ZmYiLCBWYWx1ZUVycm9yKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9saW5rMihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF91c3Rhcl9saW5rKCIwMTIzNDU2Nzg5IiAqIDkgKyAiMDEyMzQ1XHhmZlx4ZmYiKQorICAgICAgICBzZWxmLl90ZXN0X3VzdGFyX2xpbmsoIjAxMjM0NTY3ODkiICogOSArICIwMTIzNDU2XHhmZlx4ZmYiLCBWYWx1ZUVycm9yKQorCisgICAgZGVmIF90ZXN0X3VzdGFyX2xpbmsoc2VsZiwgbmFtZSwgZXhjPU5vbmUpOgorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD1zZWxmLmZvcm1hdCwgZW5jb2Rpbmc9InV0Zi04IikgYXMgdGFyOgorICAgICAgICAgICAgdCA9IHRhcmZpbGUuVGFySW5mbygiZm9vIikKKyAgICAgICAgICAgIHQubGlua25hbWUgPSBuYW1lCisgICAgICAgICAgICBpZiBleGMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0YXIuYWRkZmlsZSh0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIHRhci5hZGRmaWxlLCB0KQorCisgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHQubGlua25hbWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKworY2xhc3MgR05VVW5pY29kZVRlc3QoVW5pY29kZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGZvcm1hdCA9IHRhcmZpbGUuR05VX0ZPUk1BVAogCkBAIC0xNjU4LDcgKzE4NDUsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuYWJsZSB0byByZWFkIGJhZCBHTlUgdGFyIHBheCBoZWFkZXIiKQogCiAKLWNsYXNzIFBBWFVuaWNvZGVUZXN0KFVzdGFyVW5pY29kZVRlc3QpOgorY2xhc3MgUEFYVW5pY29kZVRlc3QoVW5pY29kZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGZvcm1hdCA9IHRhcmZpbGUuUEFYX0ZPUk1BVAogCkBAIC0yMTkxLDYgKzIzNzgsMTM4IEBACiAgICAgICAgIHNlbGYuX3Rlc3RfcGFydGlhbF9pbnB1dCgicjpiejIiKQogCiAKK2RlZiByb290X2lzX3VpZF9naWRfMCgpOgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHB3ZCwgZ3JwCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBwd2QuZ2V0cHd1aWQoMClbMF0gIT0gJ3Jvb3QnOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBncnAuZ2V0Z3JnaWQoMClbMF0gIT0gJ3Jvb3QnOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdjaG93bicpLCAibWlzc2luZyBvcy5jaG93biIpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpLCAibWlzc2luZyBvcy5nZXRldWlkIikKK2NsYXNzIE51bWVyaWNPd25lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgbW9jayB0aGUgZm9sbG93aW5nOgorICAgICMgIG9zLmNob3duOiBzbyB3ZSBjYW4gdGVzdCB3aGF0J3MgYmVpbmcgY2FsbGVkCisgICAgIyAgb3MuY2htb2Q6IHNvIHRoZSBtb2RlcyBhcmUgbm90IGFjdHVhbGx5IGNoYW5nZWQuIGlmIHRoZXkgYXJlLCB3ZSBjYW4ndAorICAgICMgICAgICAgICAgICAgZGVsZXRlIHRoZSBmaWxlcy9kaXJlY3RvcmllcworICAgICMgIG9zLmdldGV1aWQ6IHNvIHdlIGNhbiBsaWUgYW5kIHNheSB3ZSdyZSByb290ICh1aWQgPSAwKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfbWFrZV90ZXN0X2FyY2hpdmUoZmlsZW5hbWVfMSwgZGlybmFtZV8xLCBmaWxlbmFtZV8yKToKKyAgICAgICAgIyB0aGUgZmlsZSBjb250ZW50cyB0byB3cml0ZQorICAgICAgICBmb2JqID0gaW8uQnl0ZXNJTyhiImNvbnRlbnQiKQorCisgICAgICAgICMgY3JlYXRlIGEgdGFyIGZpbGUgd2l0aCBhIGZpbGUsIGEgZGlyZWN0b3J5LCBhbmQgYSBmaWxlIHdpdGhpbiB0aGF0CisgICAgICAgICMgIGRpcmVjdG9yeS4gQXNzaWduIHZhcmlvdXMgLnVpZC8uZ2lkIHZhbHVlcyB0byB0aGVtCisgICAgICAgIGl0ZW1zID0gWyhmaWxlbmFtZV8xLCA5OSwgOTgsIHRhcmZpbGUuUkVHVFlQRSwgZm9iaiksCisgICAgICAgICAgICAgICAgIChkaXJuYW1lXzEsICA3NywgNzYsIHRhcmZpbGUuRElSVFlQRSwgTm9uZSksCisgICAgICAgICAgICAgICAgIChmaWxlbmFtZV8yLCA4OCwgODcsIHRhcmZpbGUuUkVHVFlQRSwgZm9iaiksCisgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgJ3cnKSBhcyB0YXJmbDoKKyAgICAgICAgICAgIGZvciBuYW1lLCB1aWQsIGdpZCwgdHlwLCBjb250ZW50cyBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKG5hbWUpCisgICAgICAgICAgICAgICAgdC51aWQgPSB1aWQKKyAgICAgICAgICAgICAgICB0LmdpZCA9IGdpZAorICAgICAgICAgICAgICAgIHQudW5hbWUgPSAncm9vdCcKKyAgICAgICAgICAgICAgICB0LmduYW1lID0gJ3Jvb3QnCisgICAgICAgICAgICAgICAgdC50eXBlID0gdHlwCisgICAgICAgICAgICAgICAgdGFyZmwuYWRkZmlsZSh0LCBjb250ZW50cykKKworICAgICAgICAjIHJldHVybiB0aGUgZnVsbCBwYXRobmFtZSB0byB0aGUgdGFyIGZpbGUKKyAgICAgICAgcmV0dXJuIHRtcG5hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBAY29udGV4dG1hbmFnZXIKKyAgICBkZWYgX3NldHVwX3Rlc3QobW9ja19nZXRldWlkKToKKyAgICAgICAgbW9ja19nZXRldWlkLnJldHVybl92YWx1ZSA9IDAgICMgbGllIGFuZCBzYXkgd2UncmUgcm9vdAorICAgICAgICBmbmFtZSA9ICdudW1lcmljLW93bmVyLXRlc3RmaWxlJworICAgICAgICBkaXJuYW1lID0gJ2RpcicKKworICAgICAgICAjIHRoZSBuYW1lcyB3ZSB3YW50IHN0b3JlZCBpbiB0aGUgdGFyZmlsZQorICAgICAgICBmaWxlbmFtZV8xID0gZm5hbWUKKyAgICAgICAgZGlybmFtZV8xID0gZGlybmFtZQorICAgICAgICBmaWxlbmFtZV8yID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIGZuYW1lKQorCisgICAgICAgICMgY3JlYXRlIHRoZSB0YXJmaWxlIHdpdGggdGhlIGNvbnRlbnRzIHdlJ3JlIGFmdGVyCisgICAgICAgIHRhcl9maWxlbmFtZSA9IE51bWVyaWNPd25lclRlc3QuX21ha2VfdGVzdF9hcmNoaXZlKGZpbGVuYW1lXzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcm5hbWVfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVfMikKKworICAgICAgICAjIG9wZW4gdGhlIHRhcmZpbGUgZm9yIHJlYWRpbmcuIHlpZWxkIGl0IGFuZCB0aGUgbmFtZXMgb2YgdGhlIGl0ZW1zCisgICAgICAgICMgIHdlIHN0b3JlZCBpbnRvIHRoZSBmaWxlCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9maWxlbmFtZSkgYXMgdGFyZmw6CisgICAgICAgICAgICB5aWVsZCB0YXJmbCwgZmlsZW5hbWVfMSwgZGlybmFtZV8xLCBmaWxlbmFtZV8yCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuY2hvd24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5jaG1vZCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLmdldGV1aWQnKQorICAgIGRlZiB0ZXN0X2V4dHJhY3Rfd2l0aF9udW1lcmljX293bmVyKHNlbGYsIG1vY2tfZ2V0ZXVpZCwgbW9ja19jaG1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrX2Nob3duKToKKyAgICAgICAgd2l0aCBzZWxmLl9zZXR1cF90ZXN0KG1vY2tfZ2V0ZXVpZCkgYXMgKHRhcmZsLCBmaWxlbmFtZV8xLCBfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVfMik6CisgICAgICAgICAgICB0YXJmbC5leHRyYWN0KGZpbGVuYW1lXzEsIFRFTVBESVIsIG51bWVyaWNfb3duZXI9VHJ1ZSkKKyAgICAgICAgICAgIHRhcmZsLmV4dHJhY3QoZmlsZW5hbWVfMiAsIFRFTVBESVIsIG51bWVyaWNfb3duZXI9VHJ1ZSkKKworICAgICAgICAjIGNvbnZlcnQgdG8gZmlsZXN5c3RlbSBwYXRocworICAgICAgICBmX2ZpbGVuYW1lXzEgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgZmlsZW5hbWVfMSkKKyAgICAgICAgZl9maWxlbmFtZV8yID0gb3MucGF0aC5qb2luKFRFTVBESVIsIGZpbGVuYW1lXzIpCisKKyAgICAgICAgbW9ja19jaG93bi5hc3NlcnRfaGFzX2NhbGxzKFt1bml0dGVzdC5tb2NrLmNhbGwoZl9maWxlbmFtZV8xLCA5OSwgOTgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suY2FsbChmX2ZpbGVuYW1lXzIsIDg4LCA4NyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueV9vcmRlcj1UcnVlKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLmNob3duJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuY2htb2QnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5nZXRldWlkJykKKyAgICBkZWYgdGVzdF9leHRyYWN0YWxsX3dpdGhfbnVtZXJpY19vd25lcihzZWxmLCBtb2NrX2dldGV1aWQsIG1vY2tfY2htb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ja19jaG93bik6CisgICAgICAgIHdpdGggc2VsZi5fc2V0dXBfdGVzdChtb2NrX2dldGV1aWQpIGFzICh0YXJmbCwgZmlsZW5hbWVfMSwgZGlybmFtZV8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVfMik6CisgICAgICAgICAgICB0YXJmbC5leHRyYWN0YWxsKFRFTVBESVIsIG51bWVyaWNfb3duZXI9VHJ1ZSkKKworICAgICAgICAjIGNvbnZlcnQgdG8gZmlsZXN5c3RlbSBwYXRocworICAgICAgICBmX2ZpbGVuYW1lXzEgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgZmlsZW5hbWVfMSkKKyAgICAgICAgZl9kaXJuYW1lXzEgID0gb3MucGF0aC5qb2luKFRFTVBESVIsIGRpcm5hbWVfMSkKKyAgICAgICAgZl9maWxlbmFtZV8yID0gb3MucGF0aC5qb2luKFRFTVBESVIsIGZpbGVuYW1lXzIpCisKKyAgICAgICAgbW9ja19jaG93bi5hc3NlcnRfaGFzX2NhbGxzKFt1bml0dGVzdC5tb2NrLmNhbGwoZl9maWxlbmFtZV8xLCA5OSwgOTgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suY2FsbChmX2Rpcm5hbWVfMSwgNzcsIDc2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLmNhbGwoZl9maWxlbmFtZV8yLCA4OCwgODcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlfb3JkZXI9VHJ1ZSkKKworICAgICMgdGhpcyB0ZXN0IHJlcXVpcmVzIHRoYXQgdWlkPTAgYW5kIGdpZD0wIHJlYWxseSBiZSBuYW1lZCAncm9vdCcuIHRoYXQncworICAgICMgIGJlY2F1c2UgdGhlIHVuYW1lIGFuZCBnbmFtZSBpbiB0aGUgdGVzdCBmaWxlIGFyZSAncm9vdCcsIGFuZCBleHRyYWN0KCkKKyAgICAjICB3aWxsIGxvb2sgdGhlbSB1cCB1c2luZyBwd2QgYW5kIGdycCB0byBmaW5kIHRoZWlyIHVpZCBhbmQgZ2lkLCB3aGljaCB3ZQorICAgICMgIHRlc3QgaGVyZSB0byBiZSAwLgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHJvb3RfaXNfdWlkX2dpZF8wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VpZD0wLGdpZD0wIG11c3QgYmUgbmFtZWQgInJvb3QiJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuY2hvd24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5jaG1vZCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLmdldGV1aWQnKQorICAgIGRlZiB0ZXN0X2V4dHJhY3Rfd2l0aG91dF9udW1lcmljX293bmVyKHNlbGYsIG1vY2tfZ2V0ZXVpZCwgbW9ja19jaG1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrX2Nob3duKToKKyAgICAgICAgd2l0aCBzZWxmLl9zZXR1cF90ZXN0KG1vY2tfZ2V0ZXVpZCkgYXMgKHRhcmZsLCBmaWxlbmFtZV8xLCBfLCBfKToKKyAgICAgICAgICAgIHRhcmZsLmV4dHJhY3QoZmlsZW5hbWVfMSwgVEVNUERJUiwgbnVtZXJpY19vd25lcj1GYWxzZSkKKworICAgICAgICAjIGNvbnZlcnQgdG8gZmlsZXN5c3RlbSBwYXRocworICAgICAgICBmX2ZpbGVuYW1lXzEgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgZmlsZW5hbWVfMSkKKworICAgICAgICBtb2NrX2Nob3duLmFzc2VydF9jYWxsZWRfd2l0aChmX2ZpbGVuYW1lXzEsIDAsIDApCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MuZ2V0ZXVpZCcpCisgICAgZGVmIHRlc3Rfa2V5d29yZF9vbmx5KHNlbGYsIG1vY2tfZ2V0ZXVpZCk6CisgICAgICAgIHdpdGggc2VsZi5fc2V0dXBfdGVzdChtb2NrX2dldGV1aWQpIGFzICh0YXJmbCwgZmlsZW5hbWVfMSwgXywgXyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJmbC5leHRyYWN0LCBmaWxlbmFtZV8xLCBURU1QRElSLCBGYWxzZSwgVHJ1ZSkKKworCiBkZWYgc2V0VXBNb2R1bGUoKToKICAgICBzdXBwb3J0LnVubGluayhURU1QRElSKQogICAgIG9zLm1ha2VkaXJzKFRFTVBESVIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RjbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CmluZGV4IGI2NTY1NjMuLjhmZmQxODUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CkBAIC04LDkgKzgsNyBAQAogIyBTa2lwIHRoaXMgdGVzdCBpZiB0aGUgX3RraW50ZXIgbW9kdWxlIHdhc24ndCBidWlsdC4KIF90a2ludGVyID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCiAKLSMgTWFrZSBzdXJlIHRraW50ZXIuX2ZpeCBydW5zIHRvIHNldCB1cCB0aGUgZW52aXJvbm1lbnQKLXRraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXInKQotCitpbXBvcnQgdGtpbnRlcgogZnJvbSB0a2ludGVyIGltcG9ydCBUY2wKIGZyb20gX3RraW50ZXIgaW1wb3J0IFRjbEVycm9yCiAKQEAgLTEzMSw5ICsxMjksNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wudW5zZXR2YXIsJ2EnKQogCiAgICAgZGVmIGdldF9pbnRlZ2VycyhzZWxmKToKLSAgICAgICAgaW50ZWdlcnMgPSAoMCwgMSwgLTEsIDIqKjMxLTEsIC0yKiozMSkKLSAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDQpOiAgIyB3aWRlSW50IHdhcyBhZGRlZCBpbiBUY2wgOC40Ci0gICAgICAgICAgICBpbnRlZ2VycyArPSAoMioqMzEsIC0yKiozMS0xLCAyKio2My0xLCAtMioqNjMpCisgICAgICAgIGludGVnZXJzID0gKDAsIDEsIC0xLCAyKiozMS0xLCAtMioqMzEsIDIqKjMxLCAtMioqMzEtMSwgMioqNjMtMSwgLTIqKjYzKQogICAgICAgICAjIGJpZ251bSB3YXMgYWRkZWQgaW4gVGNsIDguNSwgYnV0IGl0cyBzdXBwb3J0IGlzIGFibGUgb25seSBzaW5jZSA4LjUuOAogICAgICAgICBpZiAoZ2V0X3RrX3BhdGNobGV2ZWwoKSA+PSAoOCwgNiwgMCwgJ2ZpbmFsJykgb3IKICAgICAgICAgICAgICg4LCA1LCA4KSA8PSBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDYpKToKQEAgLTE2NiwxMCArMTYyLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGRvdWJsZSgnIDQyICcpLCA0Mi4wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5nZXRkb3VibGUoJyA0Mi41ICcpLCA0Mi41KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5nZXRkb3VibGUoNDIuNSksIDQyLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGRvdWJsZSg0MiksIDQyLjApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGRvdWJsZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0ZG91YmxlLCAnNDIuNScsICcxMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGRvdWJsZSwgYic0Mi41JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0ZG91YmxlLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHRjbC5nZXRkb3VibGUsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgVmFsdWVFcnJvciwgVGNsRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2wuZ2V0ZG91YmxlLCAnNDIuNVwwJykKQEAgLTQ2NCw2ICs0NjAsOCBAQAogICAgICAgICAgICAgIyBYWFggTmFOIHJlcHJlc2VudGF0aW9uIGNhbiBiZSBub3QgcGFyc2FibGUgYnkgZmxvYXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZSgoMSwgJzInLCAoMy40LCkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJzInLCAoMy40LCkpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSAnMSAyIDMuNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKFsnYScsIFsnYicsICdjJ11dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnLCAoJ2InLCAnYycpKSBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UgJ2Ege2IgY30nKQogCiAgICAgZGVmIHRlc3RfdXNlcl9jb21tYW5kKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBOb25lCkBAIC01MTcsNiArNTE1LDcgQEAKICAgICAgICAgIyBYWFggTmFOIHJlcHJlc2VudGF0aW9uIGNhbiBiZSBub3QgcGFyc2FibGUgYnkgZmxvYXQoKQogICAgICAgICBjaGVjaygoKSwgJycpCiAgICAgICAgIGNoZWNrKCgxLCAoMiwpLCAoMywgNCksICc1IDYnLCAoKSksICcxIDIgezMgNH0gezUgNn0ge30nKQorICAgICAgICBjaGVjayhbMSwgWzIsXSwgWzMsIDRdLCAnNSA2JywgW11dLCAnMSAyIHszIDR9IHs1IDZ9IHt9JykKIAogICAgIGRlZiB0ZXN0X3NwbGl0bGlzdChzZWxmKToKICAgICAgICAgc3BsaXRsaXN0ID0gc2VsZi5pbnRlcnAudGsuc3BsaXRsaXN0CkBAIC01NDIsMTIgKzU0MSwxNSBAQAogICAgICAgICAgICAgKCdhIDMuNCcsICgnYScsICczLjQnKSksCiAgICAgICAgICAgICAoKCdhJywgMy40KSwgKCdhJywgMy40KSksCiAgICAgICAgICAgICAoKCksICgpKSwKKyAgICAgICAgICAgIChbXSwgKCkpLAorICAgICAgICAgICAgKFsnYScsIFsnYicsICdjJ11dLCAoJ2EnLCBbJ2InLCAnYyddKSksCiAgICAgICAgICAgICAoY2FsbCgnbGlzdCcsIDEsICcyJywgKDMuNCwpKSwKICAgICAgICAgICAgICAgICAoMSwgJzInLCAoMy40LCkpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZQogICAgICAgICAgICAgICAgICgnMScsICcyJywgJzMuNCcpKSwKICAgICAgICAgXQorICAgICAgICB0a19wYXRjaGxldmVsID0gZ2V0X3RrX3BhdGNobGV2ZWwoKQogICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0cyBvciBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDUpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYud2FudG9iamVjdHMgb3IgdGtfcGF0Y2hsZXZlbCA8ICg4LCA1LCA1KToKICAgICAgICAgICAgICAgICAjIEJlZm9yZSA4LjUuNSBkaWN0cyB3ZXJlIGNvbnZlcnRlZCB0byBsaXN0cyB0aHJvdWdoIHN0cmluZwogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKCcxMicsICdcdTIwYWMnLCAnXHhlMlx4ODJceGFjJywgJzMuNCcpCiAgICAgICAgICAgICBlbHNlOgpAQCAtNTU2LDggKzU1OCwxMSBAQAogICAgICAgICAgICAgICAgIChjYWxsKCdkaWN0JywgJ2NyZWF0ZScsIDEyLCAnXHUyMGFjJywgYidceGUyXHg4Mlx4YWMnLCAoMy40LCkpLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCksCiAgICAgICAgICAgICBdCisgICAgICAgIGRiZ19pbmZvID0gKCd3YW50IG9iamVjdHM/ICVzLCBUY2wgdmVyc2lvbjogJXMsIFRrIHBhdGNobGV2ZWw6ICVzJworICAgICAgICAgICAgICAgICAgICAlIChzZWxmLndhbnRvYmplY3RzLCB0Y2xfdmVyc2lvbiwgdGtfcGF0Y2hsZXZlbCkpCiAgICAgICAgIGZvciBhcmcsIHJlcyBpbiB0ZXN0Y2FzZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bGlzdChhcmcpLCByZXMsIG1zZz1hcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bGlzdChhcmcpLCByZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmc9JWEsICVzJyAlIChhcmcsIGRiZ19pbmZvKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHNwbGl0bGlzdCwgJ3snKQogCiAgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CkBAIC01ODksNiArNTk0LDkgQEAKICAgICAgICAgICAgICgoJ2EnLCAzLjQpLCAoJ2EnLCAzLjQpKSwKICAgICAgICAgICAgICgoJ2EnLCAoMiwgMy40KSksICgnYScsICgyLCAzLjQpKSksCiAgICAgICAgICAgICAoKCksICgpKSwKKyAgICAgICAgICAgIChbXSwgKCkpLAorICAgICAgICAgICAgKFsnYScsICdiIGMnXSwgKCdhJywgKCdiJywgJ2MnKSkpLAorICAgICAgICAgICAgKFsnYScsIFsnYicsICdjJ11dLCAoJ2EnLCAoJ2InLCAnYycpKSksCiAgICAgICAgICAgICAoY2FsbCgnbGlzdCcsIDEsICcyJywgKDMuNCwpKSwKICAgICAgICAgICAgICAgICAoMSwgJzInLCAoMy40LCkpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZQogICAgICAgICAgICAgICAgICgnMScsICcyJywgJzMuNCcpKSwKQEAgLTY0MSw2ICs2NDksOCBAQAogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0geydhJzogKDEsIDIsIDMpLCAnc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAnJ30KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkaWN0KHRjbCwgYXJnKSwgZXhwZWN0ZWQpCiAKKyAgICBkZWYgdGVzdF9uZXdfdGNsX29iaihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfdGtpbnRlci5UY2xfT2JqKQogCiBjbGFzcyBCaWdtZW1UY2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weQppbmRleCBlZTFjMzU3Li44ZTIxOWY0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weQpAQCAtNCwxNCArNCwxNCBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCBjb250ZXh0bGliCiAKLWZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCiBIT1NUID0gc3VwcG9ydC5IT1NUCiAKIGRlZiBzZXJ2ZXIoZXZ0LCBzZXJ2KToKLSAgICBzZXJ2Lmxpc3Rlbig1KQorICAgIHNlcnYubGlzdGVuKCkKICAgICBldnQuc2V0KCkKICAgICB0cnk6CiAgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2LmFjY2VwdCgpCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgZmluYWxseToKICAgICAgICAgc2Vydi5jbG9zZSgpCiAKLWNsYXNzIEdlbmVyYWxUZXN0cyhUZXN0Q2FzZSk6CitjbGFzcyBHZW5lcmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgdGVsbmV0Ll9tZXNzYWdlcyA9ICcnICMgZGVidWdsZXZlbCBvdXRwdXQKICAgICByZXR1cm4gdGVsbmV0CiAKLWNsYXNzIEV4cGVjdEFuZFJlYWRUZXN0Q2FzZShUZXN0Q2FzZSk6CitjbGFzcyBFeHBlY3RBbmRSZWFkVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5vbGRfc2VsZWN0b3IgPSB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yCiAgICAgICAgIHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IgPSBNb2NrU2VsZWN0b3IKQEAgLTIzNyw4ICsyMzcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHdhbnQpCiAKICAgICBkZWYgdGVzdF9yZWFkX2VhZ2VyKHNlbGYpOgotICAgICAgICAjIHJlYWRfZWFnZXIgYW5kIHJlYWRfdmVyeV9lYWdlciBtYWtlIHRoZSBzYW1lIGdhdXJhbnRlZXMKLSAgICAgICAgIyAodGhleSBiZWhhdmUgZGlmZmVyZW50bHkgYnV0IHdlIG9ubHkgdGVzdCB0aGUgZ2F1cmFudGVlcykKKyAgICAgICAgIyByZWFkX2VhZ2VyIGFuZCByZWFkX3ZlcnlfZWFnZXIgbWFrZSB0aGUgc2FtZSBndWFyYW50ZWVzCisgICAgICAgICMgKHRoZXkgYmVoYXZlIGRpZmZlcmVudGx5IGJ1dCB3ZSBvbmx5IHRlc3QgdGhlIGd1YXJhbnRlZXMpCiAgICAgICAgIHNlbGYuX3JlYWRfZWFnZXIoJ3JlYWRfZWFnZXInKQogICAgICAgICBzZWxmLl9yZWFkX2VhZ2VyKCdyZWFkX3ZlcnlfZWFnZXInKQogICAgICAgICAjIE5CIC0tIHdlIG5lZWQgdG8gdGVzdCB0aGUgSUFDIGJsb2NrIHdoaWNoIGlzIG1lbnRpb25lZCBpbiB0aGUKQEAgLTI4NCw3ICsyODQsNyBAQAogCiB0bCA9IHRlbG5ldGxpYgogCi1jbGFzcyBXcml0ZVRlc3RzKFRlc3RDYXNlKToKK2NsYXNzIFdyaXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICcnJ1RoZSBvbmx5IHRoaW5nIHRoYXQgd3JpdGUgZG9lcyBpcyByZXBsYWNlIGVhY2ggdGwuSUFDIGZvcgogICAgIHRsLklBQyt0bC5JQUMnJycKIApAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgICAgICAgICB3cml0dGVuID0gYicnLmpvaW4odGVsbmV0LnNvY2sud3JpdGVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLnJlcGxhY2UodGwuSUFDLHRsLklBQyt0bC5JQUMpLCB3cml0dGVuKQogCi1jbGFzcyBPcHRpb25UZXN0cyhUZXN0Q2FzZSk6CitjbGFzcyBPcHRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBSRkMgODU0IGNvbW1hbmRzCiAgICAgY21kcyA9IFt0bC5BTywgdGwuQVlULCB0bC5CUkssIHRsLkVDLCB0bC5FTCwgdGwuR0EsIHRsLklQLCB0bC5OT1BdCiAKQEAgLTM5Myw5ICszOTMsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInJy5qb2luKHdhbnRbOi0xXSkpCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEdlbmVyYWxUZXN0cywgUmVhZFRlc3RzLCBXcml0ZVRlc3RzLCBPcHRpb25UZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBFeHBlY3RUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKaW5kZXggNjY0MTI5OC4uNTFkZjFlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CkBAIC0xMiw3ICsxMiw4IEBACiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBzY3JpcHRfaGVscGVyCiAKIAogaWYgaGFzYXR0cihvcywgJ3N0YXQnKToKQEAgLTM1LDEwICszNiwzOCBAQAogIyBpbiBvcmRlciBvZiB0aGVpciBhcHBlYXJhbmNlIGluIHRoZSBmaWxlLiAgVGVzdGluZyB3aGljaCByZXF1aXJlcwogIyB0aHJlYWRzIGlzIG5vdCBkb25lIGhlcmUuCiAKK2NsYXNzIFRlc3RMb3dMZXZlbEludGVybmFscyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW5mZXJfcmV0dXJuX3R5cGVfc2luZ2xlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHIsIHRlbXBmaWxlLl9pbmZlcl9yZXR1cm5fdHlwZSgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYnl0ZXMsIHRlbXBmaWxlLl9pbmZlcl9yZXR1cm5fdHlwZShiJycpKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0ciwgdGVtcGZpbGUuX2luZmVyX3JldHVybl90eXBlKE5vbmUpKQorCisgICAgZGVmIHRlc3RfaW5mZXJfcmV0dXJuX3R5cGVfbXVsdGlwbGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKHN0ciwgdGVtcGZpbGUuX2luZmVyX3JldHVybl90eXBlKCcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYnl0ZXMsIHRlbXBmaWxlLl9pbmZlcl9yZXR1cm5fdHlwZShiJycsIGInJykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRlbXBmaWxlLl9pbmZlcl9yZXR1cm5fdHlwZSgnJywgYicnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0ZW1wZmlsZS5faW5mZXJfcmV0dXJuX3R5cGUoYicnLCAnJykKKworICAgIGRlZiB0ZXN0X2luZmVyX3JldHVybl90eXBlX211bHRpcGxlc19hbmRfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHIsIHRlbXBmaWxlLl9pbmZlcl9yZXR1cm5fdHlwZShOb25lLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyLCB0ZW1wZmlsZS5faW5mZXJfcmV0dXJuX3R5cGUoJycsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0ciwgdGVtcGZpbGUuX2luZmVyX3JldHVybl90eXBlKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydElzKGJ5dGVzLCB0ZW1wZmlsZS5faW5mZXJfcmV0dXJuX3R5cGUoYicnLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhieXRlcywgdGVtcGZpbGUuX2luZmVyX3JldHVybl90eXBlKE5vbmUsIGInJykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRlbXBmaWxlLl9pbmZlcl9yZXR1cm5fdHlwZSgnJywgTm9uZSwgYicnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0ZW1wZmlsZS5faW5mZXJfcmV0dXJuX3R5cGUoYicnLCBOb25lLCAnJykKKworCiAjIENvbW1vbiBmdW5jdGlvbmFsaXR5LgorCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgc3RyX2NoZWNrID0gcmUuY29tcGlsZShyIl5bYS16MC05Xy1dezh9JCIpCisgICAgYl9jaGVjayA9IHJlLmNvbXBpbGUoYnIiXlthLXowLTlfLV17OH0kIikKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlciA9IHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKQpAQCAtNTUsMTggKzg0LDMxIEBACiAgICAgICAgIG5wcmUgID0gbmJhc2VbOmxlbihwcmUpXQogICAgICAgICBuc3VmICA9IG5iYXNlW2xlbihuYmFzZSktbGVuKHN1Zik6XQogCisgICAgICAgIGlmIGRpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShuYW1lKSwgc3RyIGlmIHR5cGUoZGlyKSBpcyBzdHIgZWxzZSBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgcmV0dXJuIHR5cGUiKQorICAgICAgICBpZiBwcmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUobmFtZSksIHN0ciBpZiB0eXBlKHByZSkgaXMgc3RyIGVsc2UgYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHJldHVybiB0eXBlIikKKyAgICAgICAgaWYgc3VmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKG5hbWUpLCBzdHIgaWYgdHlwZShzdWYpIGlzIHN0ciBlbHNlIGJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCByZXR1cm4gdHlwZSIpCisgICAgICAgIGlmIChkaXIsIHByZSwgc3VmKSA9PSAoTm9uZSwgTm9uZSwgTm9uZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUobmFtZSksIHN0ciwgImRlZmF1bHQgcmV0dXJuIHR5cGUgbXVzdCBiZSBzdHIiKQorCiAgICAgICAgICMgY2hlY2sgZm9yIGVxdWFsaXR5IG9mIHRoZSBhYnNvbHV0ZSBwYXRocyEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmFic3BhdGgobmRpciksIG9zLnBhdGguYWJzcGF0aChkaXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlICclcycgbm90IGluIGRpcmVjdG9yeSAnJXMnIiAlIChuYW1lLCBkaXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlICVyIG5vdCBpbiBkaXJlY3RvcnkgJXIiICUgKG5hbWUsIGRpcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnByZSwgcHJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlICclcycgZG9lcyBub3QgYmVnaW4gd2l0aCAnJXMnIiAlIChuYmFzZSwgcHJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSAlciBkb2VzIG5vdCBiZWdpbiB3aXRoICVyIiAlIChuYmFzZSwgcHJlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuc3VmLCBzdWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnJXMnIiAlIChuYmFzZSwgc3VmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSAlciBkb2VzIG5vdCBlbmQgd2l0aCAlciIgJSAobmJhc2UsIHN1ZikpCiAKICAgICAgICAgbmJhc2UgPSBuYmFzZVtsZW4ocHJlKTpsZW4obmJhc2UpLWxlbihzdWYpXQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zdHJfY2hlY2subWF0Y2gobmJhc2UpLAotICAgICAgICAgICAgICAgICAgICAgInJhbmRvbSBzdHJpbmcgJyVzJyBkb2VzIG5vdCBtYXRjaCBeW2EtejAtOV8tXXs4fSQiCi0gICAgICAgICAgICAgICAgICAgICAlIG5iYXNlKQorICAgICAgICBjaGVjayA9IHNlbGYuc3RyX2NoZWNrIGlmIGlzaW5zdGFuY2UobmJhc2UsIHN0cikgZWxzZSBzZWxmLmJfY2hlY2sKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoZWNrLm1hdGNoKG5iYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyYW5kb20gY2hhcmFjdGVycyAlciBkbyBub3QgbWF0Y2ggJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChuYmFzZSwgY2hlY2sucGF0dGVybikpCiAKIAogY2xhc3MgVGVzdEV4cG9ydHMoQmFzZVRlc3RDYXNlKToKQEAgLTgyLDcgKzEyNCw5IEBACiAgICAgICAgICAgICAibWt0ZW1wIiA6IDEsCiAgICAgICAgICAgICAiVE1QX01BWCIgOiAxLAogICAgICAgICAgICAgImdldHRlbXBwcmVmaXgiIDogMSwKKyAgICAgICAgICAgICJnZXR0ZW1wcHJlZml4YiIgOiAxLAogICAgICAgICAgICAgImdldHRlbXBkaXIiIDogMSwKKyAgICAgICAgICAgICJnZXR0ZW1wZGlyYiIgOiAxLAogICAgICAgICAgICAgInRlbXBkaXIiIDogMSwKICAgICAgICAgICAgICJ0ZW1wbGF0ZSIgOiAxLAogICAgICAgICAgICAgIlNwb29sZWRUZW1wb3JhcnlGaWxlIiA6IDEsCkBAIC0zMTksNyArMzYzLDggQEAKICAgICAgICAgICAgIGlmIGJpbjogZmxhZ3MgPSBzZWxmLl9iZmxhZ3MKICAgICAgICAgICAgIGVsc2U6ICAgZmxhZ3MgPSBzZWxmLl90ZmxhZ3MKIAotICAgICAgICAgICAgKHNlbGYuZmQsIHNlbGYubmFtZSkgPSB0ZW1wZmlsZS5fbWtzdGVtcF9pbm5lcihkaXIsIHByZSwgc3VmLCBmbGFncykKKyAgICAgICAgICAgIG91dHB1dF90eXBlID0gdGVtcGZpbGUuX2luZmVyX3JldHVybl90eXBlKGRpciwgcHJlLCBzdWYpCisgICAgICAgICAgICAoc2VsZi5mZCwgc2VsZi5uYW1lKSA9IHRlbXBmaWxlLl9ta3N0ZW1wX2lubmVyKGRpciwgcHJlLCBzdWYsIGZsYWdzLCBvdXRwdXRfdHlwZSkKIAogICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKICAgICAgICAgICAgIG9zLndyaXRlKHNlbGYuZmQsIHN0cikKQEAgLTMyOCw5ICszNzMsMTcgQEAKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlKHNlbGYuZmQpCiAgICAgICAgICAgICBzZWxmLl91bmxpbmsoc2VsZi5uYW1lKQogCi0gICAgZGVmIGRvX2NyZWF0ZShzZWxmLCBkaXI9Tm9uZSwgcHJlPSIiLCBzdWY9IiIsIGJpbj0xKToKKyAgICBkZWYgZG9fY3JlYXRlKHNlbGYsIGRpcj1Ob25lLCBwcmU9Tm9uZSwgc3VmPU5vbmUsIGJpbj0xKToKKyAgICAgICAgb3V0cHV0X3R5cGUgPSB0ZW1wZmlsZS5faW5mZXJfcmV0dXJuX3R5cGUoZGlyLCBwcmUsIHN1ZikKICAgICAgICAgaWYgZGlyIGlzIE5vbmU6Ci0gICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgICAgIGlmIG91dHB1dF90eXBlIGlzIHN0cjoKKyAgICAgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcmIoKQorICAgICAgICBpZiBwcmUgaXMgTm9uZToKKyAgICAgICAgICAgIHByZSA9IG91dHB1dF90eXBlKCkKKyAgICAgICAgaWYgc3VmIGlzIE5vbmU6CisgICAgICAgICAgICBzdWYgPSBvdXRwdXRfdHlwZSgpCiAgICAgICAgIGZpbGUgPSBzZWxmLm1rc3RlbXBlZChkaXIsIHByZSwgc3VmLCBiaW4pCiAKICAgICAgICAgc2VsZi5uYW1lQ2hlY2soZmlsZS5uYW1lLCBkaXIsIHByZSwgc3VmKQpAQCAtMzQ0LDYgKzM5NywyMyBAQAogICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImEiLCBzdWY9ImIiKS53cml0ZShiImJsYXQiKQogICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImFhIiwgc3VmPSIudHh0Iikud3JpdGUoYiJibGF0IikKIAorICAgIGRlZiB0ZXN0X2Jhc2ljX3dpdGhfYnl0ZXNfbmFtZXMoc2VsZik6CisgICAgICAgICMgX21rc3RlbXBfaW5uZXIgY2FuIGNyZWF0ZSBmaWxlcyB3aGVuIGdpdmVuIG5hbWUgcGFydHMgYWxsCisgICAgICAgICMgc3BlY2lmaWVkIGFzIGJ5dGVzLgorICAgICAgICBkaXJfYiA9IHRlbXBmaWxlLmdldHRlbXBkaXJiKCkKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPWRpcl9iLCBzdWY9YiIiKS53cml0ZShiImJsYXQiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShkaXI9ZGlyX2IsIHByZT1iImEiKS53cml0ZShiImJsYXQiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShkaXI9ZGlyX2IsIHN1Zj1iImIiKS53cml0ZShiImJsYXQiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShkaXI9ZGlyX2IsIHByZT1iImEiLCBzdWY9YiJiIikud3JpdGUoYiJibGF0IikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPWRpcl9iLCBwcmU9YiJhYSIsIHN1Zj1iIi50eHQiKS53cml0ZShiImJsYXQiKQorICAgICAgICAjIENhbid0IG1peCBzdHIgJiBiaW5hcnkgdHlwZXMgaW4gdGhlIGFyZ3MuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuZG9fY3JlYXRlKGRpcj0iIiwgc3VmPWIiIikud3JpdGUoYiJibGF0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPWRpcl9iLCBwcmU9IiIpLndyaXRlKGIiYmxhdCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuZG9fY3JlYXRlKGRpcj1kaXJfYiwgcHJlPWIiIiwgc3VmPSIiKS53cml0ZShiImJsYXQiKQorCiAgICAgZGVmIHRlc3RfYmFzaWNfbWFueShzZWxmKToKICAgICAgICAgIyBfbWtzdGVtcF9pbm5lciBjYW4gY3JlYXRlIG1hbnkgZmlsZXMgKHN0b2NoYXN0aWMpCiAgICAgICAgIGV4dGFudCA9IGxpc3QocmFuZ2UoVEVTVF9GSUxFUykpCkBAIC00MjMsOSArNDkzLDEwIEBACiAKICAgICBkZWYgbWFrZV90ZW1wKHNlbGYpOgogICAgICAgICByZXR1cm4gdGVtcGZpbGUuX21rc3RlbXBfaW5uZXIodGVtcGZpbGUuZ2V0dGVtcGRpcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUudGVtcGxhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZmlsZS5nZXR0ZW1wcHJlZml4KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBmaWxlLl9iaW5fb3BlbmZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUuX2Jpbl9vcGVuZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIpCiAKICAgICBkZWYgdGVzdF9jb2xsaXNpb25fd2l0aF9leGlzdGluZ19maWxlKHNlbGYpOgogICAgICAgICAjIF9ta3N0ZW1wX2lubmVyIHRyaWVzIGFub3RoZXIgbmFtZSB3aGVuIGEgZmlsZSB3aXRoCkBAIC00NjEsNyArNTMyLDEyIEBACiAgICAgICAgIHAgPSB0ZW1wZmlsZS5nZXR0ZW1wcHJlZml4KCkKIAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocCwgc3RyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHApID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihwKSwgMCkKKworICAgICAgICBwYiA9IHRlbXBmaWxlLmdldHRlbXBwcmVmaXhiKCkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGIsIGJ5dGVzKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKHBiKSwgMCkKIAogICAgIGRlZiB0ZXN0X3VzYWJsZV90ZW1wbGF0ZShzZWxmKToKICAgICAgICAgIyBnZXR0ZW1wcHJlZml4IHJldHVybnMgYSB1c2FibGUgcHJlZml4IHN0cmluZwpAQCAtNDg2LDExICs1NjIsMTEgQEAKICAgICBkZWYgdGVzdF9kaXJlY3RvcnlfZXhpc3RzKHNlbGYpOgogICAgICAgICAjIGdldHRlbXBkaXIgcmV0dXJucyBhIGRpcmVjdG9yeSB3aGljaCBleGlzdHMKIAotICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNhYnMoZGlyKSBvciBkaXIgPT0gb3MuY3VyZGlyLAotICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIiAlIGRpcikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZGlyKSwKLSAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBub3QgYSBkaXJlY3RvcnkiICUgZGlyKQorICAgICAgICBmb3IgZCBpbiAodGVtcGZpbGUuZ2V0dGVtcGRpcigpLCB0ZW1wZmlsZS5nZXR0ZW1wZGlyYigpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzYWJzKGQpIG9yIGQgPT0gb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlciBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCIgJSBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVyIGlzIG5vdCBhIGRpcmVjdG9yeSIgJSBkKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X3dyaXRhYmxlKHNlbGYpOgogICAgICAgICAjIGdldHRlbXBkaXIgcmV0dXJucyBhIGRpcmVjdG9yeSB3cml0YWJsZSBieSB0aGUgdXNlcgpAQCAtNTA2LDggKzU4MiwxMSBAQAogICAgICAgICAjIGdldHRlbXBkaXIgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0CiAgICAgICAgIGEgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKICAgICAgICAgYiA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICBjID0gdGVtcGZpbGUuZ2V0dGVtcGRpcmIoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodHlwZShhKSwgdHlwZShjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBvcy5mc2RlY29kZShjKSkKIAogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZlKHNlbGYpOgogICAgICAgICAjIGdldHRlbXBkaXIgc2hvdWxkIG5vdCBmbGF0dGVuIGl0cyBjYXNlCkBAIC01MjcsOSArNjA2LDE3IEBACiBjbGFzcyBUZXN0TWtzdGVtcChCYXNlVGVzdENhc2UpOgogICAgICIiIlRlc3QgbWtzdGVtcCgpLiIiIgogCi0gICAgZGVmIGRvX2NyZWF0ZShzZWxmLCBkaXI9Tm9uZSwgcHJlPSIiLCBzdWY9IiIpOgorICAgIGRlZiBkb19jcmVhdGUoc2VsZiwgZGlyPU5vbmUsIHByZT1Ob25lLCBzdWY9Tm9uZSk6CisgICAgICAgIG91dHB1dF90eXBlID0gdGVtcGZpbGUuX2luZmVyX3JldHVybl90eXBlKGRpciwgcHJlLCBzdWYpCiAgICAgICAgIGlmIGRpciBpcyBOb25lOgotICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgICAgICBpZiBvdXRwdXRfdHlwZSBpcyBzdHI6CisgICAgICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXJiKCkKKyAgICAgICAgaWYgcHJlIGlzIE5vbmU6CisgICAgICAgICAgICBwcmUgPSBvdXRwdXRfdHlwZSgpCisgICAgICAgIGlmIHN1ZiBpcyBOb25lOgorICAgICAgICAgICAgc3VmID0gb3V0cHV0X3R5cGUoKQogICAgICAgICAoZmQsIG5hbWUpID0gdGVtcGZpbGUubWtzdGVtcChkaXI9ZGlyLCBwcmVmaXg9cHJlLCBzdWZmaXg9c3VmKQogICAgICAgICAobmRpciwgbmJhc2UpID0gb3MucGF0aC5zcGxpdChuYW1lKQogICAgICAgICBhZGlyID0gb3MucGF0aC5hYnNwYXRoKGRpcikKQEAgLTU1MSw2ICs2MzgsMjQgQEAKICAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhYSIsIHN1Zj0iLnR4dCIpCiAgICAgICAgIHNlbGYuZG9fY3JlYXRlKGRpcj0iLiIpCiAKKyAgICBkZWYgdGVzdF9iYXNpY193aXRoX2J5dGVzX25hbWVzKHNlbGYpOgorICAgICAgICAjIG1rc3RlbXAgY2FuIGNyZWF0ZSBmaWxlcyB3aGVuIGdpdmVuIG5hbWUgcGFydHMgYWxsCisgICAgICAgICMgc3BlY2lmaWVkIGFzIGJ5dGVzLgorICAgICAgICBkID0gdGVtcGZpbGUuZ2V0dGVtcGRpcmIoKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShkaXI9ZCwgc3VmPWIiIikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPWQsIHByZT1iImEiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShkaXI9ZCwgc3VmPWIiYiIpCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKGRpcj1kLCBwcmU9YiJhIiwgc3VmPWIiYiIpCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKGRpcj1kLCBwcmU9YiJhYSIsIHN1Zj1iIi50eHQiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShkaXI9YiIuIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPSIuIiwgcHJlPWIiYWEiLCBzdWY9YiIudHh0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPWIiLiIsIHByZT0iYWEiLCBzdWY9YiIudHh0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPWIiLiIsIHByZT1iImFhIiwgc3VmPSIudHh0IikKKworCiAgICAgZGVmIHRlc3RfY2hvb3NlX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgIyBta3N0ZW1wIGNhbiBjcmVhdGUgZGlyZWN0b3JpZXMgaW4gYSB1c2VyLXNlbGVjdGVkIGRpcmVjdG9yeQogICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKQEAgLTU2Niw5ICs2NzEsMTcgQEAKICAgICBkZWYgbWFrZV90ZW1wKHNlbGYpOgogICAgICAgICByZXR1cm4gdGVtcGZpbGUubWtkdGVtcCgpCiAKLSAgICBkZWYgZG9fY3JlYXRlKHNlbGYsIGRpcj1Ob25lLCBwcmU9IiIsIHN1Zj0iIik6CisgICAgZGVmIGRvX2NyZWF0ZShzZWxmLCBkaXI9Tm9uZSwgcHJlPU5vbmUsIHN1Zj1Ob25lKToKKyAgICAgICAgb3V0cHV0X3R5cGUgPSB0ZW1wZmlsZS5faW5mZXJfcmV0dXJuX3R5cGUoZGlyLCBwcmUsIHN1ZikKICAgICAgICAgaWYgZGlyIGlzIE5vbmU6Ci0gICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgICAgIGlmIG91dHB1dF90eXBlIGlzIHN0cjoKKyAgICAgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcmIoKQorICAgICAgICBpZiBwcmUgaXMgTm9uZToKKyAgICAgICAgICAgIHByZSA9IG91dHB1dF90eXBlKCkKKyAgICAgICAgaWYgc3VmIGlzIE5vbmU6CisgICAgICAgICAgICBzdWYgPSBvdXRwdXRfdHlwZSgpCiAgICAgICAgIG5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1kaXIsIHByZWZpeD1wcmUsIHN1ZmZpeD1zdWYpCiAKICAgICAgICAgdHJ5OgpAQCAtNTg2LDYgKzY5OSwyMSBAQAogICAgICAgICBvcy5ybWRpcihzZWxmLmRvX2NyZWF0ZShwcmU9ImEiLCBzdWY9ImIiKSkKICAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUocHJlPSJhYSIsIHN1Zj0iLnR4dCIpKQogCisgICAgZGVmIHRlc3RfYmFzaWNfd2l0aF9ieXRlc19uYW1lcyhzZWxmKToKKyAgICAgICAgIyBta2R0ZW1wIGNhbiBjcmVhdGUgZGlyZWN0b3JpZXMgd2hlbiBnaXZlbiBhbGwgYmluYXJ5IHBhcnRzCisgICAgICAgIGQgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyYigpCisgICAgICAgIG9zLnJtZGlyKHNlbGYuZG9fY3JlYXRlKGRpcj1kKSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUoZGlyPWQsIHByZT1iImEiKSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUoZGlyPWQsIHN1Zj1iImIiKSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUoZGlyPWQsIHByZT1iImEiLCBzdWY9YiJiIikpCisgICAgICAgIG9zLnJtZGlyKHNlbGYuZG9fY3JlYXRlKGRpcj1kLCBwcmU9YiJhYSIsIHN1Zj1iIi50eHQiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUoZGlyPWQsIHByZT0iYWEiLCBzdWY9YiIudHh0IikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYuZG9fY3JlYXRlKGRpcj1kLCBwcmU9YiJhYSIsIHN1Zj0iLnR4dCIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBvcy5ybWRpcihzZWxmLmRvX2NyZWF0ZShkaXI9IiIsIHByZT1iImFhIiwgc3VmPWIiLnR4dCIpKQorCiAgICAgZGVmIHRlc3RfYmFzaWNfbWFueShzZWxmKToKICAgICAgICAgIyBta2R0ZW1wIGNhbiBjcmVhdGUgbWFueSBkaXJlY3RvcmllcyAoc3RvY2hhc3RpYykKICAgICAgICAgZXh0YW50ID0gbGlzdChyYW5nZShURVNUX0ZJTEVTKSkKQEAgLTgyMCw4ICs5NDgsMTYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2xvc2VkKSwgMSkKIAotICAgICMgSG93IHRvIHRlc3QgdGhlIG1vZGUgYW5kIGJ1ZnNpemUgcGFyYW1ldGVycz8KKyAgICBkZWYgdGVzdF9iYWRfbW9kZShzZWxmKToKKyAgICAgICAgZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnJtdHJlZSwgZGlyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3dyJywgZGlyPWRpcikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9MiwgZGlyPWRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5saXN0ZGlyKGRpciksIFtdKQogCisgICAgIyBIb3cgdG8gdGVzdCB0aGUgbW9kZSBhbmQgYnVmc2l6ZSBwYXJhbWV0ZXJzPwogCiBjbGFzcyBUZXN0U3Bvb2xlZFRlbXBvcmFyeUZpbGUoQmFzZVRlc3RDYXNlKToKICAgICAiIiJUZXN0IFNwb29sZWRUZW1wb3JhcnlGaWxlKCkuIiIiCkBAIC0xMzEzLDggKzE0NDksNSBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG5hbWUpKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weSBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKaW5kZXggZWE3YzA4OS4uYTQ0MTg0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CkBAIC0xODQsNiArMTg0LDE2IEBACiAgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIFsidGhpcy1pcy1hLXVzZWZ1bC1mZWF0dXJlLWZvci1yZWZvcm1hdHRpbmctIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zdHMtZnJvbS10aW0tcGV0ZXJzJ2x5Il0pCisgICAgICAgICMgVGhlIHRlc3QgdGVzdHMgY3VycmVudCBiZWhhdmlvciBidXQgaXMgbm90IHRlc3RpbmcgcGFydHMgb2YgdGhlIEFQSS4KKyAgICAgICAgZXhwZWN0ID0gKCJ0aGlzLXxpcy18YS18dXNlZnVsLXxmZWF0dXJlLXxmb3ItfCIKKyAgICAgICAgICAgICAgICAgICJyZWZvcm1hdHRpbmctfHBvc3RzLXxmcm9tLXx0aW0tfHBldGVycydseSIpLnNwbGl0KCd8JykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDEsIGV4cGVjdCwgYnJlYWtfbG9uZ193b3Jkcz1GYWxzZSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCh0ZXh0LCBleHBlY3QpCisKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgnZS1tYWlsJywgWydlLW1haWwnXSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgnSmVsbHktTycsIFsnSmVsbHktTyddKQorICAgICAgICAjIFRoZSB0ZXN0IHRlc3RzIGN1cnJlbnQgYmVoYXZpb3IgYnV0IGlzIG5vdCB0ZXN0aW5nIHBhcnRzIG9mIHRoZSBBUEkuCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoJ2hhbGYtYS1jcm93bicsICdoYWxmLXxhLXxjcm93bicuc3BsaXQoJ3wnKSkKIAogICAgIGRlZiB0ZXN0X2h5cGhlbmF0ZWRfbnVtYmVycyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgaHlwaGVuYXRlZCBudW1iZXJzIChlZy4gZGF0ZXMpIGFyZSBub3QgYnJva2VuIGxpa2Ugd29yZHMuCkBAIC0xOTUsNiArMjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VkIG9uIDE5OTQtMDItMTUuJ10pCiAgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA0MCwgWydQeXRob24gMS4wLjAgd2FzIHJlbGVhc2VkIG9uIDE5OTQtMDEtMjYuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbiAxLjAuMSB3YXMgcmVsZWFzZWQgb24gMTk5NC0wMi0xNS4nXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDEsIHRleHQuc3BsaXQoKSwgYnJlYWtfbG9uZ193b3Jkcz1GYWxzZSkKIAogICAgICAgICB0ZXh0ID0gIkkgZG8gYWxsIG15IHNob3BwaW5nIGF0IDctMTEuIgogICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjUsIFsiSSBkbyBhbGwgbXkgc2hvcHBpbmcgYXQiLApAQCAtMjAyLDYgKzIxMyw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAyNywgWyJJIGRvIGFsbCBteSBzaG9wcGluZyBhdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI3LTExLiJdKQogICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjksIFsiSSBkbyBhbGwgbXkgc2hvcHBpbmcgYXQgNy0xMS4iXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDEsIHRleHQuc3BsaXQoKSwgYnJlYWtfbG9uZ193b3Jkcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2VtX2Rhc2goc2VsZik6CiAgICAgICAgICMgVGVzdCB0ZXh0IHdpdGggZW0tZGFzaGVzCkBAIC0zMjYsNiArMzM4LDEwIEBACiAgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoInRoZSBbJ3dpYmJsZS13b2JibGUnXSB3aWRnZXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsndGhlJywgJyAnLCAiWyd3aWJibGUtIiwgIndvYmJsZSddIiwgJyAnLCAnd2lkZ2V0J10pCiAKKyAgICAgICAgIyBUaGUgdGVzdCB0ZXN0cyBjdXJyZW50IGJlaGF2aW9yIGJ1dCBpcyBub3QgdGVzdGluZyBwYXJ0cyBvZiB0aGUgQVBJLgorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCJ3aGF0LWQneW91LWNhbGwtaXQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid2hhdC1kJ3lvdS18Y2FsbC18aXQuIi5zcGxpdCgnfCcpKQorCiAgICAgZGVmIHRlc3RfZnVua3lfcGFyZW5zIChzZWxmKToKICAgICAgICAgIyBTZWNvbmQgcGFydCBvZiBTRiBidWcgIzU5NjQzNDogbG9uZyBvcHRpb24gc3RyaW5ncyBpbnNpZGUKICAgICAgICAgIyBwYXJlbnRoZXNlcy4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKaW5kZXggNjE0NDkwMS4uZWYzMDU5YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKQEAgLTI1Miw5ICsyNTIsNSBAQAogICAgICAgICAgICAgcGFzcwogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUaHJlYWRSdW5uaW5nVGVzdHMsIEJhcnJpZXJUZXN0LCBMb2NrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEZvcmtJblRocmVhZCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQppbmRleCA0YmU2MTVhLi45YjJkOWE2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQpAQCAtMTE1LDEyICsxMTUsMTggQEAKICAgICAgICAgICAgIGVycm9ycyA9IFtdCiAgICAgICAgICAgICBkb25lX3Rhc2tzID0gW10KICAgICAgICAgICAgIGRvbmUuY2xlYXIoKQorICAgICAgICAgICAgdDAgPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgICAgICB3aXRoIHN0YXJ0X3RocmVhZHModGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9dGFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KE4sIGRvbmUsIGRvbmVfdGFza3MsIGVycm9ycywpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pKToKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9uZS53YWl0KDYwKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyb3JzKQorICAgICAgICAgICAgY29tcGxldGVkID0gZG9uZS53YWl0KDEwICogNjApCisgICAgICAgICAgICBkdCA9IHRpbWUubW9ub3RvbmljKCkgLSB0MAorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgiJS4xZiBtcyIgJSAoZHQqMWUzKSwgZmx1c2g9VHJ1ZSwgZW5kPSIgIikKKyAgICAgICAgICAgIGRiZ19pbmZvID0gJ2RvbmU6ICVzLyVzJyAlIChsZW4oZG9uZV90YXNrcyksIE4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycm9ycywgZGJnX2luZm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcGxldGVkLCBkYmdfaW5mbykKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQoIk9LLiIpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKaW5kZXggNGI3NWVhNi4uMWM5YzFlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKQEAgLTMsOCArMyw5IEBACiAiIiIKIAogaW1wb3J0IHRlc3Quc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHN0cmlwX3B5dGhvbl9zdGRlcnIsIGltcG9ydF9tb2R1bGUsIGNweXRob25fb25seQotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICh2ZXJib3NlLCBpbXBvcnRfbW9kdWxlLCBjcHl0aG9uX29ubHksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzX3R5cGVfY29sbGVjdGluZykKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQogCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgcmUKQEAgLTU4LDcgKzU5LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLm5ydW5uaW5nLmluYygpCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5ucnVubmluZy5nZXQoKSwgJ3Rhc2tzIGFyZSBydW5uaW5nJykKLSAgICAgICAgICAgICAgICBzZWxmLnRlc3RjYXNlLmFzc2VydFRydWUoc2VsZi5ucnVubmluZy5nZXQoKSA8PSAzKQorICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UuYXNzZXJ0TGVzc0VxdWFsKHNlbGYubnJ1bm5pbmcuZ2V0KCksIDMpCiAKICAgICAgICAgICAgIHRpbWUuc2xlZXAoZGVsYXkpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgpAQCAtNjYsNyArNjcsNyBAQAogCiAgICAgICAgICAgICB3aXRoIHNlbGYubXV0ZXg6CiAgICAgICAgICAgICAgICAgc2VsZi5ucnVubmluZy5kZWMoKQotICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UuYXNzZXJ0VHJ1ZShzZWxmLm5ydW5uaW5nLmdldCgpID49IDApCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZS5hc3NlcnRHcmVhdGVyRXF1YWwoc2VsZi5ucnVubmluZy5nZXQoKSwgMCkKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBwcmludCgnJXMgaXMgZmluaXNoZWQuICVkIHRhc2tzIGFyZSBydW5uaW5nJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm5hbWUsIHNlbGYubnJ1bm5pbmcuZ2V0KCkpKQpAQCAtMTAwLDI2ICsxMDEsMjUgQEAKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNVEFTS1MpOgogICAgICAgICAgICAgdCA9IFRlc3RUaHJlYWQoIjx0aHJlYWQgJWQ+IiVpLCBzZWxmLCBzZW1hLCBtdXRleCwgbnVtcnVubmluZykKICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaWRlbnQsIE5vbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxUZXN0VGhyZWFkXCguKiwgaW5pdGlhbFwpPicsIHJlcHIodCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodC5pZGVudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcih0KSwgcidePFRlc3RUaHJlYWRcKC4qLCBpbml0aWFsXCk+JCcpCiAgICAgICAgICAgICB0LnN0YXJ0KCkKIAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ3dhaXRpbmcgZm9yIGFsbCB0YXNrcyB0byBjb21wbGV0ZScpCiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0LmlzX2FsaXZlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuaXNfYWxpdmUoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodC5pZGVudCwgMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5pZGVudCBpcyBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8VGVzdFRocmVhZFwoLiosIHN0b3BwZWQgLT9cZCtcKT4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIodCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodC5pZGVudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcih0KSwgcidePFRlc3RUaHJlYWRcKC4qLCBzdG9wcGVkIC0/XGQrXCk+JCcpCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgnYWxsIHRhc2tzIGRvbmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bXJ1bm5pbmcuZ2V0KCksIDApCiAKICAgICBkZWYgdGVzdF9pZGVudF9vZl9ub190aHJlYWRpbmdfdGhyZWFkcyhzZWxmKToKICAgICAgICAgIyBUaGUgaWRlbnQgc3RpbGwgbXVzdCB3b3JrIGZvciB0aGUgbWFpbiB0aHJlYWQgYW5kIGR1bW15IHRocmVhZHMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhyZWFkaW5nLmN1cnJlbnRUaHJlYWQoKS5pZGVudCBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0aHJlYWRpbmcuY3VycmVudFRocmVhZCgpLmlkZW50KQogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgaWRlbnQuYXBwZW5kKHRocmVhZGluZy5jdXJyZW50VGhyZWFkKCkuaWRlbnQpCiAgICAgICAgICAgICBkb25lLnNldCgpCkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgaWRlbnQgPSBbXQogICAgICAgICBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoZiwgKCkpCiAgICAgICAgIGRvbmUud2FpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaWRlbnRbMF0gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoaWRlbnRbMF0pCiAgICAgICAgICMgS2lsbCB0aGUgImltbW9ydGFsIiBfRHVtbXlUaHJlYWQKICAgICAgICAgZGVsIHRocmVhZGluZy5fYWN0aXZlW2lkZW50WzBdXQogCkBAIC0yNDQsNyArMjQ0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJldCkKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCIgICAgdmVyaWZ5aW5nIHdvcmtlciBoYXNuJ3QgZXhpdGVkIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0LmZpbmlzaGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuZmluaXNoZWQpCiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgiICAgIGF0dGVtcHRpbmcgdG8gcmFpc2UgYXN5bmNoIGV4Y2VwdGlvbiBpbiB3b3JrZXIiKQogICAgICAgICByZXN1bHQgPSBzZXRfYXN5bmNfZXhjKGN0eXBlcy5jX2xvbmcodC5pZCksIGV4Y2VwdGlvbikKQEAgLTQxNSw5ICs0MTUsOSBAQAogCiAgICAgZGVmIHRlc3RfcmVwcl9kYWVtb24oc2VsZik6CiAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnZGFlbW9uJyBpbiByZXByKHQpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkYWVtb24nLCByZXByKHQpKQogICAgICAgICB0LmRhZW1vbiA9IFRydWUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdkYWVtb24nIGluIHJlcHIodCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2RhZW1vbicsIHJlcHIodCkpCiAKICAgICBkZWYgdGVzdF9kZWFtb25fcGFyYW0oc2VsZik6CiAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKCkKQEAgLTU2OSw3ICs1NjksNyBAQAogICAgICAgICB0c3RhdGVfbG9jay5yZWxlYXNlKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmlzX2FsaXZlKCkpCiAgICAgICAgICMgQW5kIHZlcmlmeSB0aGUgdGhyZWFkIGRpc3Bvc2VkIG9mIF90c3RhdGVfbG9jay4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuX3RzdGF0ZV9sb2NrIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQuX3RzdGF0ZV9sb2NrKQogCiAgICAgZGVmIHRlc3RfcmVwcl9zdG9wcGVkKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0ICJzdG9wcGVkIiBzaG93cyB1cCBpbiByZXByKFRocmVhZCkgYXBwcm9wcmlhdGVseS4KQEAgLTk0NSw3ICs5NDUsNyBAQAogICAgICAgICAgICAgZGVmIG91dGVyKCk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICByZWN1cnNlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBSZWN1cnNpb25FcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9b3V0ZXIpCkBAIC05ODgsNiArOTg4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbigiWmVyb0RpdmlzaW9uRXJyb3IiLCBlcnIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlVuaGFuZGxlZCBleGNlcHRpb24iLCBlcnIpCiAKKyAgICBAcmVxdWlyZXNfdHlwZV9jb2xsZWN0aW5nCiAgICAgZGVmIHRlc3RfcHJpbnRfZXhjZXB0aW9uX3N0ZGVycl9pc19ub25lXzEoc2VsZik6CiAgICAgICAgIHNjcmlwdCA9IHIiIiJpZiBUcnVlOgogICAgICAgICAgICAgaW1wb3J0IHN5cwpAQCAtMTA4Myw3ICsxMDg0LDcgQEAKICAgICBldmVudHR5cGUgPSBzdGF0aWNtZXRob2QodGhyZWFkaW5nLkV2ZW50KQogCiBjbGFzcyBDb25kaXRpb25Bc1JMb2NrVGVzdHMobG9ja190ZXN0cy5STG9ja1Rlc3RzKToKLSAgICAjIEFuIENvbmRpdGlvbiB1c2VzIGFuIFJMb2NrIGJ5IGRlZmF1bHQgYW5kIGV4cG9ydHMgaXRzIEFQSS4KKyAgICAjIENvbmRpdGlvbiB1c2VzIGFuIFJMb2NrIGJ5IGRlZmF1bHQgYW5kIGV4cG9ydHMgaXRzIEFQSS4KICAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuQ29uZGl0aW9uKQogCiBjbGFzcyBDb25kaXRpb25UZXN0cyhsb2NrX3Rlc3RzLkNvbmRpdGlvblRlc3RzKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmdfbG9jYWwucHkKaW5kZXggYzdmMzk0Yy4uNDA5MmNmMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmdfbG9jYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmdfbG9jYWwucHkKQEAgLTE4OSw3ICsxODksNyBAQAogICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHgpCiAgICAgICAgIGRlbCB4CiAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCiAKIAogY2xhc3MgVGhyZWFkTG9jYWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBCYXNlTG9jYWxUZXN0KToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQppbmRleCBiZTdkZGNjLi43NmI4OTRlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CkBAIC0xLDIxICsxLDM3IEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBlbnVtCitpbXBvcnQgbG9jYWxlCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzeXMKK2ltcG9ydCBzeXNjb25maWcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBsb2NhbGUKLWltcG9ydCBzeXNjb25maWcKLWltcG9ydCBzeXMKLWltcG9ydCBwbGF0Zm9ybQogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCit0cnk6CisgICAgaW1wb3J0IF90ZXN0Y2FwaQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF90ZXN0Y2FwaSA9IE5vbmUKKwogCiAjIE1heCB5ZWFyIGlzIG9ubHkgbGltaXRlZCBieSB0aGUgc2l6ZSBvZiBDIGludC4KIFNJWkVPRl9JTlQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NJWkVPRl9JTlQnKSBvciA0CiBUSU1FX01BWFlFQVIgPSAoMSA8PCA4ICogU0laRU9GX0lOVCAtIDEpIC0gMQogVElNRV9NSU5ZRUFSID0gLVRJTUVfTUFYWUVBUiAtIDEKLV9QeVRpbWVfUk9VTkRfRE9XTiA9IDAKLV9QeVRpbWVfUk9VTkRfVVAgPSAxCisKK1VTX1RPX05TID0gMTAgKiogMworTVNfVE9fTlMgPSAxMCAqKiA2CitTRUNfVE9fTlMgPSAxMCAqKiA5CisKK2NsYXNzIF9QeVRpbWUoZW51bS5JbnRFbnVtKToKKyAgICAjIFJvdW5kIHRvd2FyZHMgbWludXMgaW5maW5pdHkgKC1pbmYpCisgICAgUk9VTkRfRkxPT1IgPSAwCisgICAgIyBSb3VuZCB0b3dhcmRzIGluZmluaXR5ICgraW5mKQorICAgIFJPVU5EX0NFSUxJTkcgPSAxCisKK0FMTF9ST1VORElOR19NRVRIT0RTID0gKF9QeVRpbWUuUk9VTkRfRkxPT1IsIF9QeVRpbWUuUk9VTkRfQ0VJTElORykKIAogCiBjbGFzcyBUaW1lVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTgsMTMgKzExNCw2IEBACiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvbnZlcnNpb24gc3BlY2lmaWVyOiAlciBmYWlsZWQuJyAlIGZvcm1hdCkKIAotICAgICAgICAjIElzc3VlICMxMDc2MjogR3VhcmQgYWdhaW5zdCBpbnZhbGlkL25vbi1zdXBwb3J0ZWQgZm9ybWF0IHN0cmluZwotICAgICAgICAjIHNvIHRoYXQgUHl0aG9uIGRvbid0IGNyYXNoIChXaW5kb3dzIGNyYXNoZXMgd2hlbiB0aGUgZm9ybWF0IHN0cmluZwotICAgICAgICAjIGlucHV0IHRvIFt3XXN0cmZ0aW1lIGlzIG5vdCBrb3NoZXIuCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgdGltZS5zdHJmdGltZSgnJWYnKQotCiAgICAgZGVmIF9ib3VuZHNfY2hlY2tpbmcoc2VsZiwgZnVuYyk6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgc3RyZnRpbWUoKSBjaGVja3MgdGhlIGJvdW5kcyBvZiB0aGUgdmFyaW91cyBwYXJ0cwogICAgICAgICAjIG9mIHRoZSB0aW1lIHR1cGxlICgwIGlzIHZhbGlkIGZvciAqYWxsKiB2YWx1ZXMpLgpAQCAtMTY1LDYgKzE3NCwxOSBAQAogICAgIGRlZiB0ZXN0X3N0cmZ0aW1lX2JvdW5kaW5nX2NoZWNrKHNlbGYpOgogICAgICAgICBzZWxmLl9ib3VuZHNfY2hlY2tpbmcobGFtYmRhIHR1cDogdGltZS5zdHJmdGltZSgnJywgdHVwKSkKIAorICAgIGRlZiB0ZXN0X3N0cmZ0aW1lX2Zvcm1hdF9jaGVjayhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc3RyZnRpbWUgZG9lcyBub3QgY3Jhc2ggb24gaW52YWxpZCBmb3JtYXQgc3RyaW5ncworICAgICAgICAjIHRoYXQgbWF5IHRyaWdnZXIgYSBidWZmZXIgb3ZlcnJlYWQuIFdoZW4gbm90IHRyaWdnZXJlZCwKKyAgICAgICAgIyBzdHJmdGltZSBtYXkgc3VjY2VlZCBvciByYWlzZSBWYWx1ZUVycm9yIGRlcGVuZGluZyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybS4KKyAgICAgICAgZm9yIHggaW4gWyAnJywgJ0EnLCAnJUEnLCAnJUFBJyBdOgorICAgICAgICAgICAgZm9yIHkgaW4gcmFuZ2UoMHgwLCAweDEwKToKKyAgICAgICAgICAgICAgICBmb3IgeiBpbiBbICclJywgJ0ElJywgJ0FBJScsICclQSUnLCAnQSVBJScsICclIycgXToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zdHJmdGltZSh4ICogeSArIHopCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RfZGVmYXVsdF92YWx1ZXNfZm9yX3plcm8oc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdXNpbmcgYWxsIHplcm9zIHVzZXMgdGhlIHByb3BlciBkZWZhdWx0CiAgICAgICAgICMgdmFsdWVzLiAgTm8gdGVzdCBmb3IgZGF5bGlnaHQgc2F2aW5ncyBzaW5jZSBzdHJmdGltZSgpIGRvZXMKQEAgLTU5NSwxMTIgKzYxNyw2NSBAQAogICAgIGRlZiB0ZXN0X3RpbWVfdChzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHB5dGltZV9vYmplY3RfdG9fdGltZV90CiAgICAgICAgIGZvciBvYmosIHRpbWVfdCwgcm5kIGluICgKLSAgICAgICAgICAgICMgUm91bmQgdG93YXJkcyB6ZXJvCi0gICAgICAgICAgICAoMCwgMCwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgtMSwgLTEsIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTEuMCwgLTEsIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTEuOSwgLTEsIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoMS4wLCAxLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgKDEuOSwgMSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICMgUm91bmQgYXdheSBmcm9tIHplcm8KLSAgICAgICAgICAgICgwLCAwLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMSwgLTEsIF9QeVRpbWVfUk9VTkRfVVApLAotICAgICAgICAgICAgKC0xLjAsIC0xLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMS45LCAtMiwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoMS4wLCAxLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgxLjksIDIsIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgIyBSb3VuZCB0b3dhcmRzIG1pbnVzIGluZmluaXR5ICgtaW5mKQorICAgICAgICAgICAgKDAsIDAsIF9QeVRpbWUuUk9VTkRfRkxPT1IpLAorICAgICAgICAgICAgKC0xLCAtMSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoLTEuMCwgLTEsIF9QeVRpbWUuUk9VTkRfRkxPT1IpLAorICAgICAgICAgICAgKC0xLjksIC0yLCBfUHlUaW1lLlJPVU5EX0ZMT09SKSwKKyAgICAgICAgICAgICgxLjAsIDEsIF9QeVRpbWUuUk9VTkRfRkxPT1IpLAorICAgICAgICAgICAgKDEuOSwgMSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAjIFJvdW5kIHRvd2FyZHMgaW5maW5pdHkgKCtpbmYpCisgICAgICAgICAgICAoMCwgMCwgX1B5VGltZS5ST1VORF9DRUlMSU5HKSwKKyAgICAgICAgICAgICgtMSwgLTEsIF9QeVRpbWUuUk9VTkRfQ0VJTElORyksCisgICAgICAgICAgICAoLTEuMCwgLTEsIF9QeVRpbWUuUk9VTkRfQ0VJTElORyksCisgICAgICAgICAgICAoLTEuOSwgLTEsIF9QeVRpbWUuUk9VTkRfQ0VJTElORyksCisgICAgICAgICAgICAoMS4wLCAxLCBfUHlUaW1lLlJPVU5EX0NFSUxJTkcpLAorICAgICAgICAgICAgKDEuOSwgMiwgX1B5VGltZS5ST1VORF9DRUlMSU5HKSwKICAgICAgICAgKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lX3Qob2JqLCBybmQpLCB0aW1lX3QpCiAKLSAgICAgICAgcm5kID0gX1B5VGltZV9ST1VORF9ET1dOCisgICAgICAgIHJuZCA9IF9QeVRpbWUuUk9VTkRfRkxPT1IKICAgICAgICAgZm9yIGludmFsaWQgaW4gc2VsZi5pbnZhbGlkX3ZhbHVlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRpbWVfb2JqZWN0X3RvX3RpbWVfdCwgaW52YWxpZCwgcm5kKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5Ci0gICAgZGVmIHRlc3RfdGltZXZhbChzZWxmKToKLSAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHB5dGltZV9vYmplY3RfdG9fdGltZXZhbAotICAgICAgICBmb3Igb2JqLCB0aW1ldmFsLCBybmQgaW4gKAotICAgICAgICAgICAgIyBSb3VuZCB0b3dhcmRzIHplcm8KLSAgICAgICAgICAgICgwLCAoMCwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTEuMCwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgxZS02LCAoMCwgMSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoMWUtNywgKDAsIDApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgKC0xZS02LCAoLTEsIDk5OTk5OSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTFlLTcsICgtMSwgOTk5OTk5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgtMS4yLCAoLTIsIDgwMDAwMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoMC45OTk5OTk5LCAoMCwgOTk5OTk5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgwLjAwMDAwNDEsICgwLCA0KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgxLjEyMzQ1NjAsICgxLCAxMjM0NTYpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgKDEuMTIzNDU2OSwgKDEsIDEyMzQ1NiksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTAuMDAwMDA0MCwgKC0xLCA5OTk5OTYpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgKC0wLjAwMDAwNDEsICgtMSwgOTk5OTk1KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTYwLCAoLTIsIDg3NjU0NCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTEuMTIzNDU2MSwgKC0yLCA4NzY1NDMpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgIyBSb3VuZCBhd2F5IGZyb20gemVybwotICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAotICAgICAgICAgICAgKC0xLjAsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAotICAgICAgICAgICAgKDFlLTYsICgwLCAxKSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoMWUtNywgKDAsIDEpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMWUtNiwgKC0xLCA5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMWUtNywgKC0xLCA5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMS4yLCAoLTIsIDgwMDAwMCksIF9QeVRpbWVfUk9VTkRfVVApLAotICAgICAgICAgICAgKDAuOTk5OTk5OSwgKDEsIDApLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgwLjAwMDAwNDEsICgwLCA1KSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoMS4xMjM0NTYwLCAoMSwgMTIzNDU3KSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoMS4xMjM0NTY5LCAoMSwgMTIzNDU3KSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoLTAuMDAwMDA0MCwgKC0xLCA5OTk5OTYpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMC4wMDAwMDQxLCAoLTEsIDk5OTk5NSksIF9QeVRpbWVfUk9VTkRfVVApLAotICAgICAgICAgICAgKC0xLjEyMzQ1NjAsICgtMiwgODc2NTQ0KSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoLTEuMTIzNDU2MSwgKC0yLCA4NzY1NDMpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgKToKLSAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmosIHJvdW5kPXJuZCwgdGltZXZhbD10aW1ldmFsKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGltZV9vYmplY3RfdG9fdGltZXZhbChvYmosIHJuZCksIHRpbWV2YWwpCi0KLSAgICAgICAgcm5kID0gX1B5VGltZV9ST1VORF9ET1dOCi0gICAgICAgIGZvciBpbnZhbGlkIGluIHNlbGYuaW52YWxpZF92YWx1ZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHl0aW1lX29iamVjdF90b190aW1ldmFsLCBpbnZhbGlkLCBybmQpCi0KLSAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90aW1lc3BlYyhzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMKICAgICAgICAgZm9yIG9iaiwgdGltZXNwZWMsIHJuZCBpbiAoCi0gICAgICAgICAgICAjIFJvdW5kIHRvd2FyZHMgemVybwotICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgtMS4wLCAoLTEsIDApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgKDFlLTksICgwLCAxKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgxZS0xMCwgKDAsIDApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgKC0xZS05LCAoLTEsIDk5OTk5OTk5OSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTFlLTEwLCAoLTEsIDk5OTk5OTk5OSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDAwMDApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgKDAuOTk5OTk5OTk5OSwgKDAsIDk5OTk5OTk5OSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAoMS4xMjM0NTY3ODkwLCAoMSwgMTIzNDU2Nzg5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgxLjEyMzQ1Njc4OTksICgxLCAxMjM0NTY3ODkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAotICAgICAgICAgICAgKC0xLjEyMzQ1Njc4OTAsICgtMiwgODc2NTQzMjExKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTY3ODkxLCAoLTIsIDg3NjU0MzIxMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCi0gICAgICAgICAgICAjIFJvdW5kIGF3YXkgZnJvbSB6ZXJvCi0gICAgICAgICAgICAoMCwgKDAsIDApLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoLTEuMCwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoMWUtOSwgKDAsIDEpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgxZS0xMCwgKDAsIDEpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMWUtOSwgKC0xLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMWUtMTAsICgtMSwgOTk5OTk5OTk5KSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDAwMDApLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgwLjk5OTk5OTk5OTksICgxLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoMS4xMjM0NTY3ODkwLCAoMSwgMTIzNDU2NzkwKSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoMS4xMjM0NTY3ODk5LCAoMSwgMTIzNDU2NzkwKSwgX1B5VGltZV9ST1VORF9VUCksCi0gICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MCwgKC0yLCA4NzY1NDMyMTEpLCBfUHlUaW1lX1JPVU5EX1VQKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTY3ODkxLCAoLTIsIDg3NjU0MzIxMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgIyBSb3VuZCB0b3dhcmRzIG1pbnVzIGluZmluaXR5ICgtaW5mKQorICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWUuUk9VTkRfRkxPT1IpLAorICAgICAgICAgICAgKC0xLjAsICgtMSwgMCksIF9QeVRpbWUuUk9VTkRfRkxPT1IpLAorICAgICAgICAgICAgKDFlLTksICgwLCAxKSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoMWUtMTAsICgwLCAwKSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoLTFlLTksICgtMSwgOTk5OTk5OTk5KSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoLTFlLTEwLCAoLTEsIDk5OTk5OTk5OSksIF9QeVRpbWUuUk9VTkRfRkxPT1IpLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwMDAwKSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoMC45OTk5OTk5OTk5LCAoMCwgOTk5OTk5OTk5KSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoMS4xMjM0NTY3ODkwLCAoMSwgMTIzNDU2Nzg5KSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoMS4xMjM0NTY3ODk5LCAoMSwgMTIzNDU2Nzg5KSwgX1B5VGltZS5ST1VORF9GTE9PUiksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MCwgKC0yLCA4NzY1NDMyMTEpLCBfUHlUaW1lLlJPVU5EX0ZMT09SKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTY3ODkxLCAoLTIsIDg3NjU0MzIxMCksIF9QeVRpbWUuUk9VTkRfRkxPT1IpLAorICAgICAgICAgICAgIyBSb3VuZCB0b3dhcmRzIGluZmluaXR5ICgraW5mKQorICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZS5ST1VORF9DRUlMSU5HKSwKKyAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZS5ST1VORF9DRUlMSU5HKSwKKyAgICAgICAgICAgICgtMS4wLCAoLTEsIDApLCBfUHlUaW1lLlJPVU5EX0NFSUxJTkcpLAorICAgICAgICAgICAgKDFlLTksICgwLCAxKSwgX1B5VGltZS5ST1VORF9DRUlMSU5HKSwKKyAgICAgICAgICAgICgxZS0xMCwgKDAsIDEpLCBfUHlUaW1lLlJPVU5EX0NFSUxJTkcpLAorICAgICAgICAgICAgKC0xZS05LCAoLTEsIDk5OTk5OTk5OSksIF9QeVRpbWUuUk9VTkRfQ0VJTElORyksCisgICAgICAgICAgICAoLTFlLTEwLCAoMCwgMCksIF9QeVRpbWUuUk9VTkRfQ0VJTElORyksCisgICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDAwMDApLCBfUHlUaW1lLlJPVU5EX0NFSUxJTkcpLAorICAgICAgICAgICAgKDAuOTk5OTk5OTk5OSwgKDEsIDApLCBfUHlUaW1lLlJPVU5EX0NFSUxJTkcpLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5MCwgKDEsIDEyMzQ1Njc5MCksIF9QeVRpbWUuUk9VTkRfQ0VJTElORyksCisgICAgICAgICAgICAoMS4xMjM0NTY3ODk5LCAoMSwgMTIzNDU2NzkwKSwgX1B5VGltZS5ST1VORF9DRUlMSU5HKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTY3ODkwLCAoLTIsIDg3NjU0MzIxMSksIF9QeVRpbWUuUk9VTkRfQ0VJTElORyksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MSwgKC0yLCA4NzY1NDMyMTEpLCBfUHlUaW1lLlJPVU5EX0NFSUxJTkcpLAogICAgICAgICApOgogICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaiwgcm91bmQ9cm5kLCB0aW1lc3BlYz10aW1lc3BlYyk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjKG9iaiwgcm5kKSwgdGltZXNwZWMpCiAKLSAgICAgICAgcm5kID0gX1B5VGltZV9ST1VORF9ET1dOCisgICAgICAgIHJuZCA9IF9QeVRpbWUuUk9VTkRfRkxPT1IKICAgICAgICAgZm9yIGludmFsaWQgaW4gc2VsZi5pbnZhbGlkX3ZhbHVlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjLCBpbnZhbGlkLCBybmQpCkBAIC03NTksNSArNzM0LDI2NyBAQAogICAgICAgICBzZWxmLmFzc2VydElzKGx0LnRtX3pvbmUsIE5vbmUpCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MoX3Rlc3RjYXBpIGlzIG5vdCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ25lZWQgdGhlIF90ZXN0Y2FwaSBtb2R1bGUnKQorY2xhc3MgVGVzdFB5VGltZV90KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9Gcm9tU2Vjb25kcyhzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IFB5VGltZV9Gcm9tU2Vjb25kcworICAgICAgICBmb3Igc2Vjb25kcyBpbiAoMCwgMywgLTQ1NiwgX3Rlc3RjYXBpLklOVF9NQVgsIF90ZXN0Y2FwaS5JTlRfTUlOKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHNlY29uZHM9c2Vjb25kcyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVRpbWVfRnJvbVNlY29uZHMoc2Vjb25kcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzICogU0VDX1RPX05TKQorCisgICAgZGVmIHRlc3RfRnJvbVNlY29uZHNPYmplY3Qoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBQeVRpbWVfRnJvbVNlY29uZHNPYmplY3QKKworICAgICAgICAjIENvbnZlcnNpb24gZ2l2aW5nIHRoZSBzYW1lIHJlc3VsdCBmb3IgYWxsIHJvdW5kaW5nIG1ldGhvZHMKKyAgICAgICAgZm9yIHJuZCBpbiBBTExfUk9VTkRJTkdfTUVUSE9EUzoKKyAgICAgICAgICAgIGZvciBvYmosIHRzIGluICgKKyAgICAgICAgICAgICAgICAjIGludGVnZXJzCisgICAgICAgICAgICAgICAgKDAsIDApLAorICAgICAgICAgICAgICAgICgxLCBTRUNfVE9fTlMpLAorICAgICAgICAgICAgICAgICgtMywgLTMgKiBTRUNfVE9fTlMpLAorCisgICAgICAgICAgICAgICAgIyBmbG9hdDogc3Vic2Vjb25kcworICAgICAgICAgICAgICAgICgwLjAsIDApLAorICAgICAgICAgICAgICAgICgxZS05LCAxKSwKKyAgICAgICAgICAgICAgICAoMWUtNiwgMTAgKiogMyksCisgICAgICAgICAgICAgICAgKDFlLTMsIDEwICoqIDYpLAorCisgICAgICAgICAgICAgICAgIyBmbG9hdDogc2Vjb25kcworICAgICAgICAgICAgICAgICgyLjAsIDIgKiBTRUNfVE9fTlMpLAorICAgICAgICAgICAgICAgICgxMjMuMCwgMTIzICogU0VDX1RPX05TKSwKKyAgICAgICAgICAgICAgICAoLTcuMCwgLTcgKiBTRUNfVE9fTlMpLAorCisgICAgICAgICAgICAgICAgIyBuYW5vc2Vjb25kIGFyZSBrZXB0IGZvciB2YWx1ZSA8PSAyXjIzIHNlY29uZHMKKyAgICAgICAgICAgICAgICAoMioqMjIgLSAxZS05LCAgNDE5NDMwMzk5OTk5OTk5OSksCisgICAgICAgICAgICAgICAgKDIqKjIyLCAgICAgICAgIDQxOTQzMDQwMDAwMDAwMDApLAorICAgICAgICAgICAgICAgICgyKioyMiArIDFlLTksICA0MTk0MzA0MDAwMDAwMDAxKSwKKyAgICAgICAgICAgICAgICAoMioqMjMgLSAxZS05LCAgODM4ODYwNzk5OTk5OTk5OSksCisgICAgICAgICAgICAgICAgKDIqKjIzLCAgICAgICAgIDgzODg2MDgwMDAwMDAwMDApLAorCisgICAgICAgICAgICAgICAgIyBzdGFydCBsb3NpbmcgcHJlY2lzaW9uIGZvciB2YWx1ZSA+IDJeMjMgc2Vjb25kcworICAgICAgICAgICAgICAgICgyKioyMyArIDFlLTksICA4Mzg4NjA4MDAwMDAwMDAyKSwKKworICAgICAgICAgICAgICAgICMgbmFub3NlY29uZHMgYXJlIGxvc3QgZm9yIHZhbHVlID4gMl4yMyBzZWNvbmRzCisgICAgICAgICAgICAgICAgKDIqKjI0IC0gMWUtOSwgMTY3NzcyMTU5OTk5OTk5OTgpLAorICAgICAgICAgICAgICAgICgyKioyNCwgICAgICAgIDE2Nzc3MjE2MDAwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICAoMioqMjQgKyAxZS05LCAxNjc3NzIxNjAwMDAwMDAwMCksCisgICAgICAgICAgICAgICAgKDIqKjI1IC0gMWUtOSwgMzM1NTQ0MzIwMDAwMDAwMDApLAorICAgICAgICAgICAgICAgICgyKioyNSAgICAgICAsIDMzNTU0NDMyMDAwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICAoMioqMjUgKyAxZS05LCAzMzU1NDQzMjAwMDAwMDAwMCksCisKKyAgICAgICAgICAgICAgICAjIGNsb3NlIHRvIDJeNjMgbmFub3NlY29uZHMgKF9QeVRpbWVfdCBsaW1pdCkKKyAgICAgICAgICAgICAgICAoOTIyMzM3MjAzNiwgOTIyMzM3MjAzNiAqIFNFQ19UT19OUyksCisgICAgICAgICAgICAgICAgKDkyMjMzNzIwMzYuMCwgOTIyMzM3MjAzNiAqIFNFQ19UT19OUyksCisgICAgICAgICAgICAgICAgKC05MjIzMzcyMDM2LCAtOTIyMzM3MjAzNiAqIFNFQ19UT19OUyksCisgICAgICAgICAgICAgICAgKC05MjIzMzcyMDM2LjAsIC05MjIzMzcyMDM2ICogU0VDX1RPX05TKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaiwgcm91bmQ9cm5kLCB0aW1lc3RhbXA9dHMpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VGltZV9Gcm9tU2Vjb25kc09iamVjdChvYmosIHJuZCksIHRzKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChyb3VuZD1ybmQpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIFB5VGltZV9Gcm9tU2Vjb25kc09iamVjdCg5MjIzMzcyMDM3LCBybmQpCisgICAgICAgICAgICAgICAgICAgIFB5VGltZV9Gcm9tU2Vjb25kc09iamVjdCg5MjIzMzcyMDM3LjAsIHJuZCkKKyAgICAgICAgICAgICAgICAgICAgUHlUaW1lX0Zyb21TZWNvbmRzT2JqZWN0KC05MjIzMzcyMDM3LCBybmQpCisgICAgICAgICAgICAgICAgICAgIFB5VGltZV9Gcm9tU2Vjb25kc09iamVjdCgtOTIyMzM3MjAzNy4wLCBybmQpCisKKyAgICAgICAgIyBDb252ZXJzaW9uIGdpdmluZyBkaWZmZXJlbnQgcmVzdWx0cyBkZXBlbmRpbmcgb24gdGhlIHJvdW5kaW5nIG1ldGhvZAorICAgICAgICBGTE9PUiA9IF9QeVRpbWUuUk9VTkRfRkxPT1IKKyAgICAgICAgQ0VJTElORyA9IF9QeVRpbWUuUk9VTkRfQ0VJTElORworICAgICAgICBmb3Igb2JqLCB0cywgcm5kIGluICgKKyAgICAgICAgICAgICMgY2xvc2UgdG8gemVybworICAgICAgICAgICAgKCAxZS0xMCwgIDAsIEZMT09SKSwKKyAgICAgICAgICAgICggMWUtMTAsICAxLCBDRUlMSU5HKSwKKyAgICAgICAgICAgICgtMWUtMTAsIC0xLCBGTE9PUiksCisgICAgICAgICAgICAoLTFlLTEwLCAgMCwgQ0VJTElORyksCisKKyAgICAgICAgICAgICMgdGVzdCByb3VuZGluZyBvZiB0aGUgbGFzdCBuYW5vc2Vjb25kCisgICAgICAgICAgICAoIDEuMTIzNDU2Nzg5OSwgIDExMjM0NTY3ODksIEZMT09SKSwKKyAgICAgICAgICAgICggMS4xMjM0NTY3ODk5LCAgMTEyMzQ1Njc5MCwgQ0VJTElORyksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5OSwgLTExMjM0NTY3OTAsIEZMT09SKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTY3ODk5LCAtMTEyMzQ1Njc4OSwgQ0VJTElORyksCisKKyAgICAgICAgICAgICMgY2xvc2UgdG8gMSBzZWNvbmQKKyAgICAgICAgICAgICggMC45OTk5OTk5OTk5LCAgIDk5OTk5OTk5OSwgRkxPT1IpLAorICAgICAgICAgICAgKCAwLjk5OTk5OTk5OTksICAxMDAwMDAwMDAwLCBDRUlMSU5HKSwKKyAgICAgICAgICAgICgtMC45OTk5OTk5OTk5LCAtMTAwMDAwMDAwMCwgRkxPT1IpLAorICAgICAgICAgICAgKC0wLjk5OTk5OTk5OTksICAtOTk5OTk5OTk5LCBDRUlMSU5HKSwKKyAgICAgICAgKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmosIHJvdW5kPXJuZCwgdGltZXN0YW1wPXRzKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VGltZV9Gcm9tU2Vjb25kc09iamVjdChvYmosIHJuZCksIHRzKQorCisgICAgZGVmIHRlc3RfQXNTZWNvbmRzRG91YmxlKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgUHlUaW1lX0FzU2Vjb25kc0RvdWJsZQorCisgICAgICAgIGZvciBuYW5vc2Vjb25kcywgc2Vjb25kcyBpbiAoCisgICAgICAgICAgICAjIG5lYXIgMSBuYW5vc2Vjb25kCisgICAgICAgICAgICAoIDAsICAwLjApLAorICAgICAgICAgICAgKCAxLCAgMWUtOSksCisgICAgICAgICAgICAoLTEsIC0xZS05KSwKKworICAgICAgICAgICAgIyBuZWFyIDEgc2Vjb25kCisgICAgICAgICAgICAoU0VDX1RPX05TICsgMSwgMS4wICsgMWUtOSksCisgICAgICAgICAgICAoU0VDX1RPX05TLCAgICAgMS4wKSwKKyAgICAgICAgICAgIChTRUNfVE9fTlMgLSAxLCAxLjAgLSAxZS05KSwKKworICAgICAgICAgICAgIyBhIGZldyBzZWNvbmRzCisgICAgICAgICAgICAoMTIzICogU0VDX1RPX05TLCAxMjMuMCksCisgICAgICAgICAgICAoLTU2NyAqIFNFQ19UT19OUywgLTU2Ny4wKSwKKworICAgICAgICAgICAgIyBuYW5vc2Vjb25kIGFyZSBrZXB0IGZvciB2YWx1ZSA8PSAyXjIzIHNlY29uZHMKKyAgICAgICAgICAgICg0MTk0MzAzOTk5OTk5OTk5LCAyKioyMiAtIDFlLTkpLAorICAgICAgICAgICAgKDQxOTQzMDQwMDAwMDAwMDAsIDIqKjIyKSwKKyAgICAgICAgICAgICg0MTk0MzA0MDAwMDAwMDAxLCAyKioyMiArIDFlLTkpLAorCisgICAgICAgICAgICAjIHN0YXJ0IGxvc2luZyBwcmVjaXNpb24gZm9yIHZhbHVlID4gMl4yMyBzZWNvbmRzCisgICAgICAgICAgICAoODM4ODYwODAwMDAwMDAwMiwgMioqMjMgKyAxZS05KSwKKworICAgICAgICAgICAgIyBuYW5vc2Vjb25kcyBhcmUgbG9zdCBmb3IgdmFsdWUgPiAyXjIzIHNlY29uZHMKKyAgICAgICAgICAgICgxNjc3NzIxNTk5OTk5OTk5OCwgMioqMjQgLSAxZS05KSwKKyAgICAgICAgICAgICgxNjc3NzIxNTk5OTk5OTk5OSwgMioqMjQgLSAxZS05KSwKKyAgICAgICAgICAgICgxNjc3NzIxNjAwMDAwMDAwMCwgMioqMjQgICAgICAgKSwKKyAgICAgICAgICAgICgxNjc3NzIxNjAwMDAwMDAwMSwgMioqMjQgICAgICAgKSwKKyAgICAgICAgICAgICgxNjc3NzIxNjAwMDAwMDAwMiwgMioqMjQgKyAyZS05KSwKKworICAgICAgICAgICAgKDMzNTU0NDMyMDAwMDAwMDAwLCAyKioyNSAgICAgICApLAorICAgICAgICAgICAgKDMzNTU0NDMyMDAwMDAwMDAyLCAyKioyNSAgICAgICApLAorICAgICAgICAgICAgKDMzNTU0NDMyMDAwMDAwMDA0LCAyKioyNSArIDRlLTkpLAorCisgICAgICAgICAgICAjIGNsb3NlIHRvIDJeNjMgbmFub3NlY29uZHMgKF9QeVRpbWVfdCBsaW1pdCkKKyAgICAgICAgICAgICg5MjIzMzcyMDM2ICogU0VDX1RPX05TLCA5MjIzMzcyMDM2LjApLAorICAgICAgICAgICAgKC05MjIzMzcyMDM2ICogU0VDX1RPX05TLCAtOTIyMzM3MjAzNi4wKSwKKyAgICAgICAgKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbm9zZWNvbmRzPW5hbm9zZWNvbmRzLCBzZWNvbmRzPXNlY29uZHMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlUaW1lX0FzU2Vjb25kc0RvdWJsZShuYW5vc2Vjb25kcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzKQorCisgICAgZGVmIHRlc3RfdGltZXZhbChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IFB5VGltZV9Bc1RpbWV2YWwKKyAgICAgICAgZm9yIHJuZCBpbiBBTExfUk9VTkRJTkdfTUVUSE9EUzoKKyAgICAgICAgICAgIGZvciBucywgdHYgaW4gKAorICAgICAgICAgICAgICAgICMgbWljcm9zZWNvbmRzCisgICAgICAgICAgICAgICAgKDAsICgwLCAwKSksCisgICAgICAgICAgICAgICAgKDEwMDAsICgwLCAxKSksCisgICAgICAgICAgICAgICAgKC0xMDAwLCAoLTEsIDk5OTk5OSkpLAorCisgICAgICAgICAgICAgICAgIyBzZWNvbmRzCisgICAgICAgICAgICAgICAgKDIgKiBTRUNfVE9fTlMsICgyLCAwKSksCisgICAgICAgICAgICAgICAgKC0zICogU0VDX1RPX05TLCAoLTMsIDApKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFub3NlY29uZHM9bnMsIHRpbWV2YWw9dHYsIHJvdW5kPXJuZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlUaW1lX0FzVGltZXZhbChucywgcm5kKSwgdHYpCisKKyAgICAgICAgRkxPT1IgPSBfUHlUaW1lLlJPVU5EX0ZMT09SCisgICAgICAgIENFSUxJTkcgPSBfUHlUaW1lLlJPVU5EX0NFSUxJTkcKKyAgICAgICAgZm9yIG5zLCB0diwgcm5kIGluICgKKyAgICAgICAgICAgICMgbmFub3NlY29uZHMKKyAgICAgICAgICAgICgxLCAoMCwgMCksIEZMT09SKSwKKyAgICAgICAgICAgICgxLCAoMCwgMSksIENFSUxJTkcpLAorICAgICAgICAgICAgKC0xLCAoLTEsIDk5OTk5OSksIEZMT09SKSwKKyAgICAgICAgICAgICgtMSwgKDAsIDApLCBDRUlMSU5HKSwKKworICAgICAgICAgICAgIyBzZWNvbmRzICsgbmFub3NlY29uZHMKKyAgICAgICAgICAgICgxMjM0NTY3MDAxLCAoMSwgMjM0NTY3KSwgRkxPT1IpLAorICAgICAgICAgICAgKDEyMzQ1NjcwMDEsICgxLCAyMzQ1NjgpLCBDRUlMSU5HKSwKKyAgICAgICAgICAgICgtMTIzNDU2NzAwMSwgKC0yLCA3NjU0MzIpLCBGTE9PUiksCisgICAgICAgICAgICAoLTEyMzQ1NjcwMDEsICgtMiwgNzY1NDMzKSwgQ0VJTElORyksCisgICAgICAgICk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW5vc2Vjb25kcz1ucywgdGltZXZhbD10diwgcm91bmQ9cm5kKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VGltZV9Bc1RpbWV2YWwobnMsIHJuZCksIHR2KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihfdGVzdGNhcGksICdQeVRpbWVfQXNUaW1lc3BlYycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkIF90ZXN0Y2FwaS5QeVRpbWVfQXNUaW1lc3BlYycpCisgICAgZGVmIHRlc3RfdGltZXNwZWMoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBQeVRpbWVfQXNUaW1lc3BlYworICAgICAgICBmb3IgbnMsIHRzIGluICgKKyAgICAgICAgICAgICMgbmFub3NlY29uZHMKKyAgICAgICAgICAgICgwLCAoMCwgMCkpLAorICAgICAgICAgICAgKDEsICgwLCAxKSksCisgICAgICAgICAgICAoLTEsICgtMSwgOTk5OTk5OTk5KSksCisKKyAgICAgICAgICAgICMgc2Vjb25kcworICAgICAgICAgICAgKDIgKiBTRUNfVE9fTlMsICgyLCAwKSksCisgICAgICAgICAgICAoLTMgKiBTRUNfVE9fTlMsICgtMywgMCkpLAorCisgICAgICAgICAgICAjIHNlY29uZHMgKyBuYW5vc2Vjb25kcworICAgICAgICAgICAgKDEyMzQ1Njc4OTAsICgxLCAyMzQ1Njc4OTApKSwKKyAgICAgICAgICAgICgtMTIzNDU2Nzg5MCwgKC0yLCA3NjU0MzIxMTApKSwKKyAgICAgICAgKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbm9zZWNvbmRzPW5zLCB0aW1lc3BlYz10cyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVRpbWVfQXNUaW1lc3BlYyhucyksIHRzKQorCisgICAgZGVmIHRlc3RfbWlsbGlzZWNvbmRzKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgUHlUaW1lX0FzTWlsbGlzZWNvbmRzCisgICAgICAgIGZvciBybmQgaW4gQUxMX1JPVU5ESU5HX01FVEhPRFM6CisgICAgICAgICAgICBmb3IgbnMsIHR2IGluICgKKyAgICAgICAgICAgICAgICAjIG1pbGxpc2Vjb25kcworICAgICAgICAgICAgICAgICgxICogTVNfVE9fTlMsIDEpLAorICAgICAgICAgICAgICAgICgtMiAqIE1TX1RPX05TLCAtMiksCisKKyAgICAgICAgICAgICAgICAjIHNlY29uZHMKKyAgICAgICAgICAgICAgICAoMiAqIFNFQ19UT19OUywgMjAwMCksCisgICAgICAgICAgICAgICAgKC0zICogU0VDX1RPX05TLCAtMzAwMCksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbm9zZWNvbmRzPW5zLCB0aW1ldmFsPXR2LCByb3VuZD1ybmQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VGltZV9Bc01pbGxpc2Vjb25kcyhucywgcm5kKSwgdHYpCisKKyAgICAgICAgRkxPT1IgPSBfUHlUaW1lLlJPVU5EX0ZMT09SCisgICAgICAgIENFSUxJTkcgPSBfUHlUaW1lLlJPVU5EX0NFSUxJTkcKKyAgICAgICAgZm9yIG5zLCBtcywgcm5kIGluICgKKyAgICAgICAgICAgICMgbmFub3NlY29uZHMKKyAgICAgICAgICAgICgxLCAwLCBGTE9PUiksCisgICAgICAgICAgICAoMSwgMSwgQ0VJTElORyksCisgICAgICAgICAgICAoLTEsIC0xLCBGTE9PUiksCisgICAgICAgICAgICAoLTEsIDAsIENFSUxJTkcpLAorCisgICAgICAgICAgICAjIHNlY29uZHMgKyBuYW5vc2Vjb25kcworICAgICAgICAgICAgKDEyMzQgKiBNU19UT19OUyArIDEsIDEyMzQsIEZMT09SKSwKKyAgICAgICAgICAgICgxMjM0ICogTVNfVE9fTlMgKyAxLCAxMjM1LCBDRUlMSU5HKSwKKyAgICAgICAgICAgICgtMTIzNCAqIE1TX1RPX05TIC0gMSwgLTEyMzUsIEZMT09SKSwKKyAgICAgICAgICAgICgtMTIzNCAqIE1TX1RPX05TIC0gMSwgLTEyMzQsIENFSUxJTkcpLAorICAgICAgICApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFub3NlY29uZHM9bnMsIG1pbGxpc2Vjb25kcz1tcywgcm91bmQ9cm5kKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VGltZV9Bc01pbGxpc2Vjb25kcyhucywgcm5kKSwgbXMpCisKKyAgICBkZWYgdGVzdF9taWNyb3NlY29uZHMoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBQeVRpbWVfQXNNaWNyb3NlY29uZHMKKyAgICAgICAgZm9yIHJuZCBpbiBBTExfUk9VTkRJTkdfTUVUSE9EUzoKKyAgICAgICAgICAgIGZvciBucywgdHYgaW4gKAorICAgICAgICAgICAgICAgICMgbWljcm9zZWNvbmRzCisgICAgICAgICAgICAgICAgKDEgKiBVU19UT19OUywgMSksCisgICAgICAgICAgICAgICAgKC0yICogVVNfVE9fTlMsIC0yKSwKKworICAgICAgICAgICAgICAgICMgbWlsbGlzZWNvbmRzCisgICAgICAgICAgICAgICAgKDEgKiBNU19UT19OUywgMTAwMCksCisgICAgICAgICAgICAgICAgKC0yICogTVNfVE9fTlMsIC0yMDAwKSwKKworICAgICAgICAgICAgICAgICMgc2Vjb25kcworICAgICAgICAgICAgICAgICgyICogU0VDX1RPX05TLCAyMDAwMDAwKSwKKyAgICAgICAgICAgICAgICAoLTMgKiBTRUNfVE9fTlMsIC0zMDAwMDAwKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFub3NlY29uZHM9bnMsIHRpbWV2YWw9dHYsIHJvdW5kPXJuZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlUaW1lX0FzTWljcm9zZWNvbmRzKG5zLCBybmQpLCB0dikKKworICAgICAgICBGTE9PUiA9IF9QeVRpbWUuUk9VTkRfRkxPT1IKKyAgICAgICAgQ0VJTElORyA9IF9QeVRpbWUuUk9VTkRfQ0VJTElORworICAgICAgICBmb3IgbnMsIG1zLCBybmQgaW4gKAorICAgICAgICAgICAgIyBuYW5vc2Vjb25kcworICAgICAgICAgICAgKDEsIDAsIEZMT09SKSwKKyAgICAgICAgICAgICgxLCAxLCBDRUlMSU5HKSwKKyAgICAgICAgICAgICgtMSwgLTEsIEZMT09SKSwKKyAgICAgICAgICAgICgtMSwgMCwgQ0VJTElORyksCisKKyAgICAgICAgICAgICMgc2Vjb25kcyArIG5hbm9zZWNvbmRzCisgICAgICAgICAgICAoMTIzNCAqIFVTX1RPX05TICsgMSwgMTIzNCwgRkxPT1IpLAorICAgICAgICAgICAgKDEyMzQgKiBVU19UT19OUyArIDEsIDEyMzUsIENFSUxJTkcpLAorICAgICAgICAgICAgKC0xMjM0ICogVVNfVE9fTlMgLSAxLCAtMTIzNSwgRkxPT1IpLAorICAgICAgICAgICAgKC0xMjM0ICogVVNfVE9fTlMgLSAxLCAtMTIzNCwgQ0VJTElORyksCisgICAgICAgICk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW5vc2Vjb25kcz1ucywgbWlsbGlzZWNvbmRzPW1zLCByb3VuZD1ybmQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlUaW1lX0FzTWljcm9zZWNvbmRzKG5zLCBybmQpLCBtcykKKworCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aW1laXQucHkgYi9MaWIvdGVzdC90ZXN0X3RpbWVpdC5weQppbmRleCA5MThhMjk0Li4yZGIzYzFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVpdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RpbWVpdC5weQpAQCAtNSw3ICs1LDYgQEAKIGltcG9ydCB0aW1lCiBmcm9tIHRleHR3cmFwIGltcG9ydCBkZWRlbnQKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZGVycgogCkBAIC04OSw4ICs4OCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCB0aW1laXQuVGltZXIsIHNldHVwPSdjb250aW51ZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCB0aW1laXQuVGltZXIsIHNldHVwPSdmcm9tIHRpbWVpdCBpbXBvcnQgKicpCiAKLSAgICBmYWtlX3NldHVwID0gImltcG9ydCB0aW1laXQ7IHRpbWVpdC5fZmFrZV90aW1lci5zZXR1cCgpIgotICAgIGZha2Vfc3RtdCA9ICJpbXBvcnQgdGltZWl0OyB0aW1laXQuX2Zha2VfdGltZXIuaW5jKCkiCisgICAgZmFrZV9zZXR1cCA9ICJpbXBvcnQgdGltZWl0XG50aW1laXQuX2Zha2VfdGltZXIuc2V0dXAoKSIKKyAgICBmYWtlX3N0bXQgPSAiaW1wb3J0IHRpbWVpdFxudGltZWl0Ll9mYWtlX3RpbWVyLmluYygpIgogCiAgICAgZGVmIGZha2VfY2FsbGFibGVfc2V0dXAoc2VsZik6CiAgICAgICAgIHNlbGYuZmFrZV90aW1lci5zZXR1cCgpCkBAIC05OCw5ICs5NywxMCBAQAogICAgIGRlZiBmYWtlX2NhbGxhYmxlX3N0bXQoc2VsZik6CiAgICAgICAgIHNlbGYuZmFrZV90aW1lci5pbmMoKQogCi0gICAgZGVmIHRpbWVpdChzZWxmLCBzdG10LCBzZXR1cCwgbnVtYmVyPU5vbmUpOgorICAgIGRlZiB0aW1laXQoc2VsZiwgc3RtdCwgc2V0dXAsIG51bWJlcj1Ob25lLCBnbG9iYWxzPU5vbmUpOgogICAgICAgICBzZWxmLmZha2VfdGltZXIgPSBGYWtlVGltZXIoKQotICAgICAgICB0ID0gdGltZWl0LlRpbWVyKHN0bXQ9c3RtdCwgc2V0dXA9c2V0dXAsIHRpbWVyPXNlbGYuZmFrZV90aW1lcikKKyAgICAgICAgdCA9IHRpbWVpdC5UaW1lcihzdG10PXN0bXQsIHNldHVwPXNldHVwLCB0aW1lcj1zZWxmLmZha2VfdGltZXIsCisgICAgICAgICAgICAgICAgZ2xvYmFscz1nbG9iYWxzKQogICAgICAgICBrd2FyZ3MgPSB7fQogICAgICAgICBpZiBudW1iZXIgaXMgTm9uZToKICAgICAgICAgICAgIG51bWJlciA9IERFRkFVTFRfTlVNQkVSCkBAIC0xNDIsNiArMTQyLDE3IEBACiAgICAgICAgICAgICAgICAgdGltZXI9RmFrZVRpbWVyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsdGFfdGltZSwgMCkKIAorICAgIGRlZiB0ZXN0X3RpbWVpdF9nbG9iYWxzX2FyZ3Moc2VsZik6CisgICAgICAgIGdsb2JhbCBfZ2xvYmFsX3RpbWVyCisgICAgICAgIF9nbG9iYWxfdGltZXIgPSBGYWtlVGltZXIoKQorICAgICAgICB0ID0gdGltZWl0LlRpbWVyKHN0bXQ9J19nbG9iYWxfdGltZXIuaW5jKCknLCB0aW1lcj1fZ2xvYmFsX3RpbWVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IsIHQudGltZWl0LCBudW1iZXI9MykKKyAgICAgICAgdGltZWl0LnRpbWVpdChzdG10PSdfZ2xvYmFsX3RpbWVyLmluYygpJywgdGltZXI9X2dsb2JhbF90aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPWdsb2JhbHMoKSwgbnVtYmVyPTMpCisgICAgICAgIGxvY2FsX3RpbWVyID0gRmFrZVRpbWVyKCkKKyAgICAgICAgdGltZWl0LnRpbWVpdChzdG10PSdsb2NhbF90aW1lci5pbmMoKScsIHRpbWVyPWxvY2FsX3RpbWVyLAorICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHM9bG9jYWxzKCksIG51bWJlcj0zKQorCiAgICAgZGVmIHJlcGVhdChzZWxmLCBzdG10LCBzZXR1cCwgcmVwZWF0PU5vbmUsIG51bWJlcj1Ob25lKToKICAgICAgICAgc2VsZi5mYWtlX3RpbWVyID0gRmFrZVRpbWVyKCkKICAgICAgICAgdCA9IHRpbWVpdC5UaW1lcihzdG10PXN0bXQsIHNldHVwPXNldHVwLCB0aW1lcj1zZWxmLmZha2VfdGltZXIpCkBAIC0yNjEsNiArMjcyLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkN1c3RvbVNldHVwXG4iICogMyArCiAgICAgICAgICAgICAgICAgIjM1IGxvb3BzLCBiZXN0IG9mIDM6IDIgc2VjIHBlciBsb29wXG4iKQogCisgICAgZGVmIHRlc3RfbWFpbl9tdWx0aXBsZV9zZXR1cHMoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnJ1bl9tYWluKHNlY29uZHNfcGVyX2luY3JlbWVudD0yLjAsCisgICAgICAgICAgICAgICAgc3dpdGNoZXM9WyctbjM1JywgJy1zJywgJ2EgPSAiQ3VzdG9tU2V0dXAiJywgJy1zJywgJ3ByaW50KGEpJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkN1c3RvbVNldHVwXG4iICogMyArCisgICAgICAgICAgICAgICAgIjM1IGxvb3BzLCBiZXN0IG9mIDM6IDIgc2VjIHBlciBsb29wXG4iKQorCiAgICAgZGVmIHRlc3RfbWFpbl9maXhlZF9yZXBzKHNlbGYpOgogICAgICAgICBzID0gc2VsZi5ydW5fbWFpbihzZWNvbmRzX3Blcl9pbmNyZW1lbnQ9NjAuMCwgc3dpdGNoZXM9WyctcjknXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiMTAgbG9vcHMsIGJlc3Qgb2YgOTogNjAgc2VjIHBlciBsb29wXG4iKQpAQCAtMzA3LDYgKzMyNCwyNiBAQAogICAgICAgICAgICAgICAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDUwIHVzZWMgcGVyIGxvb3AKICAgICAgICAgICAgICIiIikpCiAKKyAgICBkZWYgdGVzdF9tYWluX3dpdGhfdGltZV91bml0KHNlbGYpOgorICAgICAgICB1bml0X3NlYyA9IHNlbGYucnVuX21haW4oc2Vjb25kc19wZXJfaW5jcmVtZW50PTAuMDAyLAorICAgICAgICAgICAgICAgIHN3aXRjaGVzPVsnLXUnLCAnc2VjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pdF9zZWMsCisgICAgICAgICAgICAgICAgIjEwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMC4wMDIgc2VjIHBlciBsb29wXG4iKQorICAgICAgICB1bml0X21zZWMgPSBzZWxmLnJ1bl9tYWluKHNlY29uZHNfcGVyX2luY3JlbWVudD0wLjAwMiwKKyAgICAgICAgICAgICAgICBzd2l0Y2hlcz1bJy11JywgJ21zZWMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0X21zZWMsCisgICAgICAgICAgICAgICAgIjEwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMiBtc2VjIHBlciBsb29wXG4iKQorICAgICAgICB1bml0X3VzZWMgPSBzZWxmLnJ1bl9tYWluKHNlY29uZHNfcGVyX2luY3JlbWVudD0wLjAwMiwKKyAgICAgICAgICAgICAgICBzd2l0Y2hlcz1bJy11JywgJ3VzZWMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bml0X3VzZWMsCisgICAgICAgICAgICAgICAgIjEwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMmUrMDMgdXNlYyBwZXIgbG9vcFxuIikKKyAgICAgICAgIyBUZXN0IGludmFsaWQgdW5pdCBpbnB1dAorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGVycm9yX3N0cmluZ2lvOgorICAgICAgICAgICAgaW52YWxpZCA9IHNlbGYucnVuX21haW4oc2Vjb25kc19wZXJfaW5jcmVtZW50PTAuMDAyLAorICAgICAgICAgICAgICAgICAgICBzd2l0Y2hlcz1bJy11JywgJ3BhcnNlYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yX3N0cmluZ2lvLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgdW5pdC4gUGxlYXNlIHNlbGVjdCB1c2VjLCBtc2VjLCBvciBzZWMuXG4iKQorCiAgICAgZGVmIHRlc3RfbWFpbl9leGNlcHRpb24oc2VsZik6CiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyb3Jfc3RyaW5naW86CiAgICAgICAgICAgICBzID0gc2VsZi5ydW5fbWFpbihzd2l0Y2hlcz1bJzEvMCddKQpAQCAtMzE4LDggKzM1NSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0X2V4Y19zdHJpbmcoZXJyb3Jfc3RyaW5naW8uZ2V0dmFsdWUoKSwgJ1plcm9EaXZpc2lvbkVycm9yJykKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RUaW1laXQpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQppbmRleCA3MDNjNDNhLi4zYzc1ZGNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0yNDMsMTQgKzI0MywxNCBAQAogICAgIGRlZiB0ZXN0QWNjZXB0VGltZW91dChzZWxmKToKICAgICAgICAgIyBUZXN0IGFjY2VwdCgpIHRpbWVvdXQKICAgICAgICAgc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrLCBzZWxmLmxvY2FsaG9zdCkKLSAgICAgICAgc2VsZi5zb2NrLmxpc3Rlbig1KQorICAgICAgICBzZWxmLnNvY2subGlzdGVuKCkKICAgICAgICAgc2VsZi5fc29ja19vcGVyYXRpb24oMSwgMS41LCAnYWNjZXB0JykKIAogICAgIGRlZiB0ZXN0U2VuZChzZWxmKToKICAgICAgICAgIyBUZXN0IHNlbmQoKSB0aW1lb3V0CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzZXJ2OgogICAgICAgICAgICAgc3VwcG9ydC5iaW5kX3BvcnQoc2Vydiwgc2VsZi5sb2NhbGhvc3QpCi0gICAgICAgICAgICBzZXJ2Lmxpc3Rlbig1KQorICAgICAgICAgICAgc2Vydi5saXN0ZW4oKQogICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3Qoc2Vydi5nZXRzb2NrbmFtZSgpKQogICAgICAgICAgICAgIyBTZW5kIGEgbG90IG9mIGRhdGEgaW4gb3JkZXIgdG8gYnlwYXNzIGJ1ZmZlcmluZyBpbiB0aGUgVENQIHN0YWNrLgogICAgICAgICAgICAgc2VsZi5fc29ja19vcGVyYXRpb24oMTAwLCAxLjUsICdzZW5kJywgYiJYIiAqIDIwMDAwMCkKQEAgLTI1OSw3ICsyNTksNyBAQAogICAgICAgICAjIFRlc3Qgc2VuZHRvKCkgdGltZW91dAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgc2VydjoKICAgICAgICAgICAgIHN1cHBvcnQuYmluZF9wb3J0KHNlcnYsIHNlbGYubG9jYWxob3N0KQotICAgICAgICAgICAgc2Vydi5saXN0ZW4oNSkKKyAgICAgICAgICAgIHNlcnYubGlzdGVuKCkKICAgICAgICAgICAgIHNlbGYuc29jay5jb25uZWN0KHNlcnYuZ2V0c29ja25hbWUoKSkKICAgICAgICAgICAgICMgVGhlIGFkZHJlc3MgYXJndW1lbnQgaXMgaWdub3JlZCBzaW5jZSB3ZSBhbHJlYWR5IGNvbm5lY3RlZC4KICAgICAgICAgICAgIHNlbGYuX3NvY2tfb3BlcmF0aW9uKDEwMCwgMS41LCAnc2VuZHRvJywgYiJYIiAqIDIwMDAwMCwKQEAgLTI2OSw3ICsyNjksNyBAQAogICAgICAgICAjIFRlc3Qgc2VuZGFsbCgpIHRpbWVvdXQKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHNlcnY6CiAgICAgICAgICAgICBzdXBwb3J0LmJpbmRfcG9ydChzZXJ2LCBzZWxmLmxvY2FsaG9zdCkKLSAgICAgICAgICAgIHNlcnYubGlzdGVuKDUpCisgICAgICAgICAgICBzZXJ2Lmxpc3RlbigpCiAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChzZXJ2LmdldHNvY2tuYW1lKCkpCiAgICAgICAgICAgICAjIFNlbmQgYSBsb3Qgb2YgZGF0YSBpbiBvcmRlciB0byBieXBhc3MgYnVmZmVyaW5nIGluIHRoZSBUQ1Agc3RhY2suCiAgICAgICAgICAgICBzZWxmLl9zb2NrX29wZXJhdGlvbigxMDAsIDEuNSwgJ3NlbmRhbGwnLCBiIlgiICogMjAwMDAwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aXgucHkgYi9MaWIvdGVzdC90ZXN0X3RpeC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmVhM2QwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90aXgucHkKQEAgLTAsMCArMSwzMiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBzeXMKKworIyBTa2lwIHRoaXMgdGVzdCBpZiB0aGUgX3RraW50ZXIgbW9kdWxlIHdhc24ndCBidWlsdC4KK190a2ludGVyID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGtpbnRlcicpCisKKyMgU2tpcCB0ZXN0IGlmIHRrIGNhbm5vdCBiZSBpbml0aWFsaXplZC4KK3N1cHBvcnQucmVxdWlyZXMoJ2d1aScpCisKK2Zyb20gdGtpbnRlciBpbXBvcnQgdGl4LCBUY2xFcnJvcgorCisKK2NsYXNzIFRlc3RUaXgodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJvb3QgPSB0aXguVGsoKQorICAgICAgICBleGNlcHQgVGNsRXJyb3I6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdUaXggc2hvdWxkIGFsd2F5cyBiZSBhdmFpbGFibGUgb24gV2luZG93cycpCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdUaXggbm90IGF2YWlsYWJsZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5yb290LmRlc3Ryb3kpCisKKyAgICBkZWYgdGVzdF90aXhfYXZhaWxhYmxlKHNlbGYpOgorICAgICAgICAjIHRoaXMgdGVzdCBpcyBqdXN0IGhlcmUgdG8gbWFrZSBzZXRVcCBydW4KKyAgICAgICAgcGFzcworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RrLnB5IGIvTGliL3Rlc3QvdGVzdF90ay5weQppbmRleCA2MjcyOWYwLi40OGNlZmQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGsucHkKQEAgLTIsOSArMiw2IEBACiAjIFNraXAgdGVzdCBpZiBfdGtpbnRlciB3YXNuJ3QgYnVpbHQuCiBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKIAotIyBNYWtlIHN1cmUgdGtpbnRlci5fZml4IHJ1bnMgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudAotc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd0a2ludGVyJykKLQogIyBTa2lwIHRlc3QgaWYgdGsgY2Fubm90IGJlIGluaXRpYWxpemVkLgogc3VwcG9ydC5yZXF1aXJlcygnZ3VpJykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weSBiL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkKaW5kZXggNDBiMGM5MC4uM2IxN2NhNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5CkBAIC00MjQsNyArNDI0LDcgQEAKIAogICAgIGRlZiB0ZXN0X211bHRpcGxpY2F0aXZlKHNlbGYpOgogICAgICAgICAjIE11bHRpcGxpY2F0aXZlCi0gICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAxLy8xKjEvNSoxMiUweDEyIiwgIiIiXAorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gMS8vMSoxLzUqMTIlMHgxMkA0MiIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA0KSAoMSwgNSkKQEAgLTQzOCw2ICs0MzgsOCBAQAogICAgIE5VTUJFUiAgICAgJzEyJyAgICAgICAgICAoMSwgMTMpICgxLCAxNSkKICAgICBPUCAgICAgICAgICclJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCiAgICAgTlVNQkVSICAgICAnMHgxMicgICAgICAgICgxLCAxNikgKDEsIDIwKQorICAgIE9QICAgICAgICAgJ0AnICAgICAgICAgICAoMSwgMjApICgxLCAyMSkKKyAgICBOVU1CRVIgICAgICc0MicgICAgICAgICAgKDEsIDIxKSAoMSwgMjMpCiAgICAgIiIiKQogCiAgICAgZGVmIHRlc3RfdW5hcnkoc2VsZik6CkBAIC01NjEsNiArNTYzLDI4MCBAQAogICAgIFNUUklORyAgICAgIlUnZ3JlZW4nIiAgICAoMiwgNykgKDIsIDE1KQogICAgICIiIikKIAorICAgIGRlZiB0ZXN0X2FzeW5jKHNlbGYpOgorICAgICAgICAjIEFzeW5jL2F3YWl0IGV4dGVuc2lvbjoKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiYXN5bmMgPSAxIiwgIiIiXAorICAgIE5BTUUgICAgICAgJ2FzeW5jJyAgICAgICAoMSwgMCkgKDEsIDUpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCA2KSAoMSwgNykKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgICIiIikKKworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJhID0gKGFzeW5jID0gMSkiLCAiIiJcCisgICAgTkFNRSAgICAgICAnYScgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisgICAgTkFNRSAgICAgICAnYXN5bmMnICAgICAgICgxLCA1KSAoMSwgMTApCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMTMpICgxLCAxNCkKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImFzeW5jKCkiLCAiIiJcCisgICAgTkFNRSAgICAgICAnYXN5bmMnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDUpICgxLCA2KQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgNikgKDEsIDcpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImNsYXNzIGFzeW5jKEJhcik6cGFzcyIsICIiIlwKKyAgICBOQU1FICAgICAgICdjbGFzcycgICAgICAgKDEsIDApICgxLCA1KQorICAgIE5BTUUgICAgICAgJ2FzeW5jJyAgICAgICAoMSwgNikgKDEsIDExKQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMSwgMTEpICgxLCAxMikKKyAgICBOQU1FICAgICAgICdCYXInICAgICAgICAgKDEsIDEyKSAoMSwgMTUpCisgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgxLCAxNSkgKDEsIDE2KQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgMTYpICgxLCAxNykKKyAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDEsIDE3KSAoMSwgMjEpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImNsYXNzIGFzeW5jOnBhc3MiLCAiIiJcCisgICAgTkFNRSAgICAgICAnY2xhc3MnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBOQU1FICAgICAgICdhc3luYycgICAgICAgKDEsIDYpICgxLCAxMSkKKyAgICBPUCAgICAgICAgICc6JyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgTkFNRSAgICAgICAncGFzcycgICAgICAgICgxLCAxMikgKDEsIDE2KQorICAgICIiIikKKworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJhd2FpdCA9IDEiLCAiIiJcCisgICAgTkFNRSAgICAgICAnYXdhaXQnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDYpICgxLCA3KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImZvby5hc3luYyIsICIiIlwKKyAgICBOQU1FICAgICAgICdmb28nICAgICAgICAgKDEsIDApICgxLCAzKQorICAgIE9QICAgICAgICAgJy4nICAgICAgICAgICAoMSwgMykgKDEsIDQpCisgICAgTkFNRSAgICAgICAnYXN5bmMnICAgICAgICgxLCA0KSAoMSwgOSkKKyAgICAiIiIpCisKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiYXN5bmMgZm9yIGEgaW4gYjogcGFzcyIsICIiIlwKKyAgICBOQU1FICAgICAgICdhc3luYycgICAgICAgKDEsIDApICgxLCA1KQorICAgIE5BTUUgICAgICAgJ2ZvcicgICAgICAgICAoMSwgNikgKDEsIDkpCisgICAgTkFNRSAgICAgICAnYScgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQorICAgIE5BTUUgICAgICAgJ2luJyAgICAgICAgICAoMSwgMTIpICgxLCAxNCkKKyAgICBOQU1FICAgICAgICdiJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCAxNikgKDEsIDE3KQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMSwgMTgpICgxLCAyMikKKyAgICAiIiIpCisKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiYXN5bmMgd2l0aCBhIGFzIGI6IHBhc3MiLCAiIiJcCisgICAgTkFNRSAgICAgICAnYXN5bmMnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBOQU1FICAgICAgICd3aXRoJyAgICAgICAgKDEsIDYpICgxLCAxMCkKKyAgICBOQU1FICAgICAgICdhJyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgTkFNRSAgICAgICAnYXMnICAgICAgICAgICgxLCAxMykgKDEsIDE1KQorICAgIE5BTUUgICAgICAgJ2InICAgICAgICAgICAoMSwgMTYpICgxLCAxNykKKyAgICBPUCAgICAgICAgICc6JyAgICAgICAgICAgKDEsIDE3KSAoMSwgMTgpCisgICAgTkFNRSAgICAgICAncGFzcycgICAgICAgICgxLCAxOSkgKDEsIDIzKQorICAgICIiIikKKworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJhc3luYy5mb28iLCAiIiJcCisgICAgTkFNRSAgICAgICAnYXN5bmMnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBPUCAgICAgICAgICcuJyAgICAgICAgICAgKDEsIDUpICgxLCA2KQorICAgIE5BTUUgICAgICAgJ2ZvbycgICAgICAgICAoMSwgNikgKDEsIDkpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImFzeW5jIiwgIiIiXAorICAgIE5BTUUgICAgICAgJ2FzeW5jJyAgICAgICAoMSwgMCkgKDEsIDUpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImFzeW5jXG4jY29tbWVudFxuYXdhaXQiLCAiIiJcCisgICAgTkFNRSAgICAgICAnYXN5bmMnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgxLCA1KSAoMSwgNikKKyAgICBDT01NRU5UICAgICcjY29tbWVudCcgICAgKDIsIDApICgyLCA4KQorICAgIE5MICAgICAgICAgJ1xcbicgICAgICAgICAgKDIsIDgpICgyLCA5KQorICAgIE5BTUUgICAgICAgJ2F3YWl0JyAgICAgICAoMywgMCkgKDMsIDUpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImFzeW5jXG4uLi5cbmF3YWl0IiwgIiIiXAorICAgIE5BTUUgICAgICAgJ2FzeW5jJyAgICAgICAoMSwgMCkgKDEsIDUpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMSwgNSkgKDEsIDYpCisgICAgT1AgICAgICAgICAnLi4uJyAgICAgICAgICgyLCAwKSAoMiwgMykKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgyLCAzKSAoMiwgNCkKKyAgICBOQU1FICAgICAgICdhd2FpdCcgICAgICAgKDMsIDApICgzLCA1KQorICAgICIiIikKKworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJhc3luY1xuYXdhaXQiLCAiIiJcCisgICAgTkFNRSAgICAgICAnYXN5bmMnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgxLCA1KSAoMSwgNikKKyAgICBOQU1FICAgICAgICdhd2FpdCcgICAgICAgKDIsIDApICgyLCA1KQorICAgICIiIikKKworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJmb28uYXN5bmMgKyAxIiwgIiIiXAorICAgIE5BTUUgICAgICAgJ2ZvbycgICAgICAgICAoMSwgMCkgKDEsIDMpCisgICAgT1AgICAgICAgICAnLicgICAgICAgICAgICgxLCAzKSAoMSwgNCkKKyAgICBOQU1FICAgICAgICdhc3luYycgICAgICAgKDEsIDQpICgxLCA5KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImFzeW5jIGRlZiBmb28oKTogcGFzcyIsICIiIlwKKyAgICBBU1lOQyAgICAgICdhc3luYycgICAgICAgKDEsIDApICgxLCA1KQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgNikgKDEsIDkpCisgICAgTkFNRSAgICAgICAnZm9vJyAgICAgICAgICgxLCAxMCkgKDEsIDEzKQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMSwgMTMpICgxLCAxNCkKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCAxNSkgKDEsIDE2KQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMSwgMTcpICgxLCAyMSkKKyAgICAiIiIpCisKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgnJydcCithc3luYyBkZWYgZm9vKCk6CisgIGRlZiBmb28oYXdhaXQpOgorICAgIGF3YWl0ID0gMQorICBpZiAxOgorICAgIGF3YWl0Cithc3luYyArPSAxCisnJycsICIiIlwKKyAgICBBU1lOQyAgICAgICdhc3luYycgICAgICAgKDEsIDApICgxLCA1KQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgNikgKDEsIDkpCisgICAgTkFNRSAgICAgICAnZm9vJyAgICAgICAgICgxLCAxMCkgKDEsIDEzKQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMSwgMTMpICgxLCAxNCkKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCAxNSkgKDEsIDE2KQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDEsIDE2KSAoMSwgMTcpCisgICAgSU5ERU5UICAgICAnICAnICAgICAgICAgICgyLCAwKSAoMiwgMikKKyAgICBOQU1FICAgICAgICdkZWYnICAgICAgICAgKDIsIDIpICgyLCA1KQorICAgIE5BTUUgICAgICAgJ2ZvbycgICAgICAgICAoMiwgNikgKDIsIDkpCisgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgyLCA5KSAoMiwgMTApCisgICAgQVdBSVQgICAgICAnYXdhaXQnICAgICAgICgyLCAxMCkgKDIsIDE1KQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMiwgMTUpICgyLCAxNikKKyAgICBPUCAgICAgICAgICc6JyAgICAgICAgICAgKDIsIDE2KSAoMiwgMTcpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMiwgMTcpICgyLCAxOCkKKyAgICBJTkRFTlQgICAgICcgICAgJyAgICAgICAgKDMsIDApICgzLCA0KQorICAgIEFXQUlUICAgICAgJ2F3YWl0JyAgICAgICAoMywgNCkgKDMsIDkpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgzLCAxMCkgKDMsIDExKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMywgMTIpICgzLCAxMykKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgzLCAxMykgKDMsIDE0KQorICAgIERFREVOVCAgICAgJycgICAgICAgICAgICAoNCwgMikgKDQsIDIpCisgICAgTkFNRSAgICAgICAnaWYnICAgICAgICAgICg0LCAyKSAoNCwgNCkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDQsIDUpICg0LCA2KQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoNCwgNikgKDQsIDcpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoNCwgNykgKDQsIDgpCisgICAgSU5ERU5UICAgICAnICAgICcgICAgICAgICg1LCAwKSAoNSwgNCkKKyAgICBBV0FJVCAgICAgICdhd2FpdCcgICAgICAgKDUsIDQpICg1LCA5KQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDUsIDkpICg1LCAxMCkKKyAgICBERURFTlQgICAgICcnICAgICAgICAgICAgKDYsIDApICg2LCAwKQorICAgIERFREVOVCAgICAgJycgICAgICAgICAgICAoNiwgMCkgKDYsIDApCisgICAgTkFNRSAgICAgICAnYXN5bmMnICAgICAgICg2LCAwKSAoNiwgNSkKKyAgICBPUCAgICAgICAgICcrPScgICAgICAgICAgKDYsIDYpICg2LCA4KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoNiwgOSkgKDYsIDEwKQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDYsIDEwKSAoNiwgMTEpCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoJycnXAorYXN5bmMgZGVmIGZvbygpOgorICBhc3luYyBmb3IgaSBpbiAxOiBwYXNzJycnLCAiIiJcCisgICAgQVNZTkMgICAgICAnYXN5bmMnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBOQU1FICAgICAgICdkZWYnICAgICAgICAgKDEsIDYpICgxLCA5KQorICAgIE5BTUUgICAgICAgJ2ZvbycgICAgICAgICAoMSwgMTApICgxLCAxMykKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDEzKSAoMSwgMTQpCisgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgxLCAxNCkgKDEsIDE1KQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgMTUpICgxLCAxNikKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgxLCAxNikgKDEsIDE3KQorICAgIElOREVOVCAgICAgJyAgJyAgICAgICAgICAoMiwgMCkgKDIsIDIpCisgICAgQVNZTkMgICAgICAnYXN5bmMnICAgICAgICgyLCAyKSAoMiwgNykKKyAgICBOQU1FICAgICAgICdmb3InICAgICAgICAgKDIsIDgpICgyLCAxMSkKKyAgICBOQU1FICAgICAgICdpJyAgICAgICAgICAgKDIsIDEyKSAoMiwgMTMpCisgICAgTkFNRSAgICAgICAnaW4nICAgICAgICAgICgyLCAxNCkgKDIsIDE2KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMiwgMTcpICgyLCAxOCkKKyAgICBPUCAgICAgICAgICc6JyAgICAgICAgICAgKDIsIDE4KSAoMiwgMTkpCisgICAgTkFNRSAgICAgICAncGFzcycgICAgICAgICgyLCAyMCkgKDIsIDI0KQorICAgIERFREVOVCAgICAgJycgICAgICAgICAgICAoMywgMCkgKDMsIDApCisgICAgIiIiKQorCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoJycnYXN5bmMgZGVmIGZvbyhhc3luYyk6IGF3YWl0JycnLCAiIiJcCisgICAgQVNZTkMgICAgICAnYXN5bmMnICAgICAgICgxLCAwKSAoMSwgNSkKKyAgICBOQU1FICAgICAgICdkZWYnICAgICAgICAgKDEsIDYpICgxLCA5KQorICAgIE5BTUUgICAgICAgJ2ZvbycgICAgICAgICAoMSwgMTApICgxLCAxMykKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDEzKSAoMSwgMTQpCisgICAgQVNZTkMgICAgICAnYXN5bmMnICAgICAgICgxLCAxNCkgKDEsIDE5KQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgMTkpICgxLCAyMCkKKyAgICBPUCAgICAgICAgICc6JyAgICAgICAgICAgKDEsIDIwKSAoMSwgMjEpCisgICAgQVdBSVQgICAgICAnYXdhaXQnICAgICAgICgxLCAyMikgKDEsIDI3KQorICAgICIiIikKKworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCcnJ1wKK2RlZiBmKCk6CisKKyAgZGVmIGJheigpOiBwYXNzCisgIGFzeW5jIGRlZiBiYXIoKTogcGFzcworCisgIGF3YWl0ID0gMicnJywgIiIiXAorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCisgICAgTkFNRSAgICAgICAnZicgICAgICAgICAgICgxLCA0KSAoMSwgNSkKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDUpICgxLCA2KQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgNikgKDEsIDcpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgxLCA4KSAoMSwgOSkKKyAgICBOTCAgICAgICAgICdcXG4nICAgICAgICAgICgyLCAwKSAoMiwgMSkKKyAgICBJTkRFTlQgICAgICcgICcgICAgICAgICAgKDMsIDApICgzLCAyKQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMywgMikgKDMsIDUpCisgICAgTkFNRSAgICAgICAnYmF6JyAgICAgICAgICgzLCA2KSAoMywgOSkKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDMsIDkpICgzLCAxMCkKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDMsIDEwKSAoMywgMTEpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgzLCAxMSkgKDMsIDEyKQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMywgMTMpICgzLCAxNykKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICgzLCAxNykgKDMsIDE4KQorICAgIEFTWU5DICAgICAgJ2FzeW5jJyAgICAgICAoNCwgMikgKDQsIDcpCisgICAgTkFNRSAgICAgICAnZGVmJyAgICAgICAgICg0LCA4KSAoNCwgMTEpCisgICAgTkFNRSAgICAgICAnYmFyJyAgICAgICAgICg0LCAxMikgKDQsIDE1KQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoNCwgMTUpICg0LCAxNikKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDQsIDE2KSAoNCwgMTcpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICg0LCAxNykgKDQsIDE4KQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoNCwgMTkpICg0LCAyMykKKyAgICBORVdMSU5FICAgICdcXG4nICAgICAgICAgICg0LCAyMykgKDQsIDI0KQorICAgIE5MICAgICAgICAgJ1xcbicgICAgICAgICAgKDUsIDApICg1LCAxKQorICAgIE5BTUUgICAgICAgJ2F3YWl0JyAgICAgICAoNiwgMikgKDYsIDcpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICg2LCA4KSAoNiwgOSkKKyAgICBOVU1CRVIgICAgICcyJyAgICAgICAgICAgKDYsIDEwKSAoNiwgMTEpCisgICAgREVERU5UICAgICAnJyAgICAgICAgICAgICg3LCAwKSAoNywgMCkKKyAgICAiIiIpCisKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgnJydcCithc3luYyBkZWYgZigpOgorCisgIGRlZiBiYXooKTogcGFzcworICBhc3luYyBkZWYgYmFyKCk6IHBhc3MKKworICBhd2FpdCA9IDInJycsICIiIlwKKyAgICBBU1lOQyAgICAgICdhc3luYycgICAgICAgKDEsIDApICgxLCA1KQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgNikgKDEsIDkpCisgICAgTkFNRSAgICAgICAnZicgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMSwgMTEpICgxLCAxMikKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCAxMykgKDEsIDE0KQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisgICAgTkwgICAgICAgICAnXFxuJyAgICAgICAgICAoMiwgMCkgKDIsIDEpCisgICAgSU5ERU5UICAgICAnICAnICAgICAgICAgICgzLCAwKSAoMywgMikKKyAgICBOQU1FICAgICAgICdkZWYnICAgICAgICAgKDMsIDIpICgzLCA1KQorICAgIE5BTUUgICAgICAgJ2JheicgICAgICAgICAoMywgNikgKDMsIDkpCisgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgzLCA5KSAoMywgMTApCisgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgzLCAxMCkgKDMsIDExKQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMywgMTEpICgzLCAxMikKKyAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDMsIDEzKSAoMywgMTcpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMywgMTcpICgzLCAxOCkKKyAgICBBU1lOQyAgICAgICdhc3luYycgICAgICAgKDQsIDIpICg0LCA3KQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoNCwgOCkgKDQsIDExKQorICAgIE5BTUUgICAgICAgJ2JhcicgICAgICAgICAoNCwgMTIpICg0LCAxNSkKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDQsIDE1KSAoNCwgMTYpCisgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICg0LCAxNikgKDQsIDE3KQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoNCwgMTcpICg0LCAxOCkKKyAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDQsIDE5KSAoNCwgMjMpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoNCwgMjMpICg0LCAyNCkKKyAgICBOTCAgICAgICAgICdcXG4nICAgICAgICAgICg1LCAwKSAoNSwgMSkKKyAgICBBV0FJVCAgICAgICdhd2FpdCcgICAgICAgKDYsIDIpICg2LCA3KQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoNiwgOCkgKDYsIDkpCisgICAgTlVNQkVSICAgICAnMicgICAgICAgICAgICg2LCAxMCkgKDYsIDExKQorICAgIERFREVOVCAgICAgJycgICAgICAgICAgICAoNywgMCkgKDcsIDApCisgICAgIiIiKQorCiAKIGRlZiBkZWNpc3RtdChzKToKICAgICByZXN1bHQgPSBbXQpAQCAtOTcxLDYgKzEyNDcsMTcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUoZW5jb2RpbmdfdXNlZCwgZW5jb2RpbmcpCiAKKyAgICBkZWYgdGVzdF9vbmVsaW5lX2RlZnMoc2VsZik6CisgICAgICAgIGJ1ZiA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUwMCk6CisgICAgICAgICAgICBidWYuYXBwZW5kKCdkZWYgaXtpfSgpOiByZXR1cm4ge2l9Jy5mb3JtYXQoaT1pKSkKKyAgICAgICAgYnVmLmFwcGVuZCgnT0snKQorICAgICAgICBidWYgPSAnXG4nLmpvaW4oYnVmKQorCisgICAgICAgICMgVGVzdCB0aGF0IDUwMCBjb25zZXF1ZW50LCBvbmUtbGluZSBkZWZzIGlzIE9LCisgICAgICAgIHRva3MgPSBsaXN0KHRva2VuaXplKEJ5dGVzSU8oYnVmLmVuY29kZSgndXRmLTgnKSkucmVhZGxpbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRva3NbLTJdLnN0cmluZywgJ09LJykgIyBbLTFdIGlzIGFsd2F5cyBFTkRNQVJLRVIKKwogICAgIGRlZiBhc3NlcnRFeGFjdFR5cGVFcXVhbChzZWxmLCBvcHN0ciwgKm9wdHlwZXMpOgogICAgICAgICB0b2tlbnMgPSBsaXN0KHRva2VuaXplKEJ5dGVzSU8ob3BzdHIuZW5jb2RlKCd1dGYtOCcpKS5yZWFkbGluZSkpCiAgICAgICAgIG51bV9vcHR5cGVzID0gbGVuKG9wdHlwZXMpCkBAIC0xMDI1LDYgKzEzMTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEV4YWN0VHlwZUVxdWFsKCcvLycsIHRva2VuLkRPVUJMRVNMQVNIKQogICAgICAgICBzZWxmLmFzc2VydEV4YWN0VHlwZUVxdWFsKCcvLz0nLCB0b2tlbi5ET1VCTEVTTEFTSEVRVUFMKQogICAgICAgICBzZWxmLmFzc2VydEV4YWN0VHlwZUVxdWFsKCdAJywgdG9rZW4uQVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXhhY3RUeXBlRXF1YWwoJ0A9JywgdG9rZW4uQVRFUVVBTCkKIAogICAgICAgICBzZWxmLmFzc2VydEV4YWN0VHlwZUVxdWFsKCdhKioyK2IqKjI9PWMqKjInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUUsIHRva2VuLkRPVUJMRVNUQVIsIE5VTUJFUiwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9ncHJvZjJodG1sLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X2dwcm9mMmh0bWwucHkKaW5kZXggODQ1YTJhOC4uMGMyOTRlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X2dwcm9mMmh0bWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X2dwcm9mMmh0bWwucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAgc3lzLmFyZ3YgPSBbXQogCiAgICAgZGVmIHRlc3RfZ3Byb2Yoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NTA4OiB0aGlzIHVzZWQgdG8gZmFpbCB3aXRoIGFuIE5hbWVFcnJvci4KKyAgICAgICAgIyBJc3N1ZSAjMTQ1MDg6IHRoaXMgdXNlZCB0byBmYWlsIHdpdGggYSBOYW1lRXJyb3IuCiAgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5ncHJvZiwgJ3dlYmJyb3dzZXInKSBhcyB3bW9jaywgXAogICAgICAgICAgICAgICAgIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRtcGRpcjoKICAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2FiYycpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfaTE4bi5weSBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9pMThuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYWE4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfaTE4bi5weQpAQCAtMCwwICsxLDY4IEBACisiIiJUZXN0cyB0byBjb3ZlciB0aGUgVG9vbHMvaTE4biBwYWNrYWdlIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC50ZXN0X3Rvb2xzIGltcG9ydCB0b29sc2RpcgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHRlbXBfY3dkCisKK2NsYXNzIFRlc3RfcHlnZXR0ZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgdGhlIHB5Z2V0dGV4dC5weSB0b29sIiIiCisKKyAgICBzY3JpcHQgPSBvcy5wYXRoLmpvaW4odG9vbHNkaXIsJ2kxOG4nLCAncHlnZXR0ZXh0LnB5JykKKworICAgIGRlZiBnZXRfaGVhZGVyKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiIgdXRpbGl0eTogcmV0dXJuIHRoZSBoZWFkZXIgb2YgYSAucG8gZmlsZSBhcyBhIGRpY3Rpb25hcnkgIiIiCisgICAgICAgIGhlYWRlcnMgPSB7fQorICAgICAgICBmb3IgbGluZSBpbiBkYXRhLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgaWYgbm90IGxpbmUgb3IgbGluZS5zdGFydHN3aXRoKCgnIycsICdtc2dpZCcsJ21zZ3N0cicpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoJyInKQorICAgICAgICAgICAga2V5LCB2YWwgPSBsaW5lLnNwbGl0KCc6JywxKQorICAgICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsLnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIGhlYWRlcnMKKworICAgIGRlZiB0ZXN0X2hlYWRlcihzZWxmKToKKyAgICAgICAgIiIiTWFrZSBzdXJlIHRoZSByZXF1aXJlZCBmaWVsZHMgYXJlIGluIHRoZSBoZWFkZXIsIGFjY29yZGluZyB0bzoKKyAgICAgICAgICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvbWFudWFsL2dldHRleHQuaHRtbCNIZWFkZXItRW50cnkKKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggdGVtcF9jd2QoTm9uZSkgYXMgY3dkOgorICAgICAgICAgICAgYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCkKKyAgICAgICAgICAgIHdpdGggb3BlbignbWVzc2FnZXMucG90JykgYXMgZnA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICAgICAgaGVhZGVyID0gc2VsZi5nZXRfaGVhZGVyKGRhdGEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlByb2plY3QtSWQtVmVyc2lvbiIsIGhlYWRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlBPVC1DcmVhdGlvbi1EYXRlIiwgaGVhZGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiUE8tUmV2aXNpb24tRGF0ZSIsIGhlYWRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkxhc3QtVHJhbnNsYXRvciIsIGhlYWRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkxhbmd1YWdlLVRlYW0iLCBoZWFkZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJNSU1FLVZlcnNpb24iLCBoZWFkZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJDb250ZW50LVR5cGUiLCBoZWFkZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIiwgaGVhZGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiR2VuZXJhdGVkLUJ5IiwgaGVhZGVyKQorCisgICAgICAgICAgICAjIG5vdCBjbGVhciBpZiB0aGVzZSBzaG91bGQgYmUgcmVxdWlyZWQgaW4gUE9UICh0ZW1wbGF0ZSkgZmlsZXMKKyAgICAgICAgICAgICNzZWxmLmFzc2VydEluKCJSZXBvcnQtTXNnaWQtQnVncy1UbyIsIGhlYWRlcikKKyAgICAgICAgICAgICNzZWxmLmFzc2VydEluKCJMYW5ndWFnZSIsIGhlYWRlcikKKworICAgICAgICAgICAgIyJQbHVyYWwtRm9ybXMiIGlzIG9wdGlvbmFsCisKKworICAgIGRlZiB0ZXN0X1BPVF9DcmVhdGlvbl9EYXRlKHNlbGYpOgorICAgICAgICAiIiIgTWF0Y2ggdGhlIGRhdGUgZm9ybWF0IGZyb20geGdldHRleHQgZm9yIFBPVC1DcmVhdGlvbi1EYXRlICIiIgorICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorICAgICAgICB3aXRoIHRlbXBfY3dkKE5vbmUpIGFzIGN3ZDoKKyAgICAgICAgICAgIGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oJ21lc3NhZ2VzLnBvdCcpIGFzIGZwOgorICAgICAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgICAgIGhlYWRlciA9IHNlbGYuZ2V0X2hlYWRlcihkYXRhKQorICAgICAgICAgICAgY3JlYXRpb25EYXRlID0gaGVhZGVyWydQT1QtQ3JlYXRpb24tRGF0ZSddCisKKyAgICAgICAgICAgICMgcGVlbCBvZmYgdGhlIGVzY2FwZWQgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHN0cmluZworICAgICAgICAgICAgaWYgY3JlYXRpb25EYXRlLmVuZHN3aXRoKCdcXG4nKToKKyAgICAgICAgICAgICAgICBjcmVhdGlvbkRhdGUgPSBjcmVhdGlvbkRhdGVbOi1sZW4oJ1xcbicpXQorCisgICAgICAgICAgICAjIFRoaXMgd2lsbCByYWlzZSBpZiB0aGUgZGF0ZSBmb3JtYXQgZG9lcyBub3QgZXhhY3RseSBtYXRjaC4KKyAgICAgICAgICAgIGRhdGV0aW1lLnN0cnB0aW1lKGNyZWF0aW9uRGF0ZSwgJyVZLSVtLSVkICVIOiVNJXonKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X21kNXN1bS5weSBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9tZDVzdW0ucHkKaW5kZXggNTllYTE0OS4uMTMwNTI5NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X21kNXN1bS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfbWQ1c3VtLnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQogCiBmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2RpciwgaW1wb3J0X3Rvb2wsIHNraXBfaWZfbWlzc2luZwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcGluZGVudC5weSBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CmluZGV4IDE0YTBhYTIuLmUyOTNiYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0ZXh0d3JhcAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiBmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2Rpciwgc2tpcF9pZl9taXNzaW5nCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9yZWluZGVudC5weSBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9yZWluZGVudC5weQppbmRleCA0NWNlYmY3Li5kN2MyMGUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcmVpbmRlbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3JlaW5kZW50LnB5CkBAIC02LDcgKzYsNyBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIAogZnJvbSB0ZXN0LnRlc3RfdG9vbHMgaW1wb3J0IHNjcmlwdHNkaXIsIHNraXBfaWZfbWlzc2luZwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfdW5wYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF91bnBhcnNlLnB5CmluZGV4IDk3NmE2YzUuLjczNGJiYzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF91bnBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF91bnBhcnNlLnB5CkBAIC0yNTAsNiArMjUwLDExIEBACiAgICAgZGVmIHRlc3Rfd2l0aF90d29faXRlbXMoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKHdpdGhfdHdvX2l0ZW1zKQogCisgICAgZGVmIHRlc3RfZGljdF91bnBhY2tpbmdfaW5fZGljdChzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgMjY0ODkKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAociIiInsqKnsneSc6IDJ9LCAneCc6IDF9IiIiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcChyIiIieyoqeyd5JzogMn0sICoqeyd4JzogMX19IiIiKQorCiAKIGNsYXNzIERpcmVjdG9yeVRlc3RDYXNlKEFTVFRlc3RDYXNlKToKICAgICAiIiJUZXN0IHJvdW5kdHJpcCBiZWhhdmlvdXIgb24gYWxsIGZpbGVzIGluIExpYiBhbmQgTGliL3Rlc3QuIiIiCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZS5weQppbmRleCBlZTMzOTg2Li4wM2RmZjg0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkKQEAgLTksMTIgKzksMTEgQEAKIAogZnJvbSB0ZXN0LnRyYWNlZG1vZHVsZXMgaW1wb3J0IHRlc3Rtb2QKIAotCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVdGlsaXRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiAKIGRlZiBmaXhfZXh0X3B5KGZpbGVuYW1lKToKLSAgICAiIiJHaXZlbiBhIC5weWMvLnB5byBmaWxlbmFtZSBjb252ZXJ0cyBpdCB0byB0aGUgYXBwcm9wcmlhdGUgLnB5IiIiCi0gICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgIiIiR2l2ZW4gYSAucHljIGZpbGVuYW1lIGNvbnZlcnRzIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSAucHkiIiIKKyAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgnLnB5YycpOgogICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lWzotMV0KICAgICByZXR1cm4gZmlsZW5hbWUKIApAQCAtMjIzLDYgKzIyMiwxMSBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAoc3lzLnNldHRyYWNlLCBzeXMuZ2V0dHJhY2UoKSkKICAgICAgICAgc2VsZi50cmFjZXIgPSBUcmFjZShjb3VudD0wLCB0cmFjZT0wLCBjb3VudGZ1bmNzPTEpCiAgICAgICAgIHNlbGYuZmlsZW1vZCA9IG15X2ZpbGVfYW5kX21vZG5hbWUoKQorICAgICAgICBzZWxmLl9zYXZlZF90cmFjZWZ1bmMgPSBzeXMuZ2V0dHJhY2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zYXZlZF90cmFjZWZ1bmMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzeXMuc2V0dHJhY2Uoc2VsZi5fc2F2ZWRfdHJhY2VmdW5jKQogCiAgICAgZGVmIHRlc3Rfc2ltcGxlX2NhbGxlcihzZWxmKToKICAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyLCAxKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkgYi9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQppbmRleCBkNmM5ZGYyLi41NDlkOGQxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQpAQCAtMSwxNSArMSwyNCBAQAogIiIiVGVzdCBjYXNlcyBmb3IgdHJhY2ViYWNrIG1vZHVsZSIiIgogCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgcmUKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIEVycm9yLCBjYXB0dXJlZF9vdXRwdXQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHVubGluaywgY3B5dGhvbl9vbmx5Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIEVycm9yLCBjYXB0dXJlZF9vdXRwdXQsIHVubGluaywgY3B5dGhvbl9vbmx5Citmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCitpbXBvcnQgdGV4dHdyYXAKIAogaW1wb3J0IHRyYWNlYmFjawogCiAKK3Rlc3RfY29kZSA9IG5hbWVkdHVwbGUoJ2NvZGUnLCBbJ2NvX2ZpbGVuYW1lJywgJ2NvX25hbWUnXSkKK3Rlc3RfZnJhbWUgPSBuYW1lZHR1cGxlKCdmcmFtZScsIFsnZl9jb2RlJywgJ2ZfZ2xvYmFscycsICdmX2xvY2FscyddKQordGVzdF90YiA9IG5hbWVkdHVwbGUoJ3RiJywgWyd0Yl9mcmFtZScsICd0Yl9saW5lbm8nLCAndGJfbmV4dCddKQorCisKIGNsYXNzIFN5bnRheFRyYWNlYmFja0Nhc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIEZvciBub3csIGEgdmVyeSBtaW5pbWFsIHNldCBvZiB0ZXN0cy4gIEkgd2FudCB0byBiZSBzdXJlIHRoYXQKICAgICAjIGZvcm1hdHRpbmcgb2YgU3ludGF4RXJyb3JzIHdvcmtzIGJhc2VkIG9uIGNoYW5nZXMgZm9yIDIuMS4KQEAgLTkyLDkgKzEwMSw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVyciksIDEpCiAgICAgICAgIHN0cl92YWx1ZSA9ICc8dW5wcmludGFibGUgJXMgb2JqZWN0PicgJSBYLl9fbmFtZV9fCiAgICAgICAgIGlmIFguX19tb2R1bGVfXyBpbiAoJ19fbWFpbl9fJywgJ2J1aWx0aW5zJyk6Ci0gICAgICAgICAgICBzdHJfbmFtZSA9IFguX19uYW1lX18KKyAgICAgICAgICAgIHN0cl9uYW1lID0gWC5fX3F1YWxuYW1lX18KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN0cl9uYW1lID0gJy4nLmpvaW4oW1guX19tb2R1bGVfXywgWC5fX25hbWVfX10pCisgICAgICAgICAgICBzdHJfbmFtZSA9ICcuJy5qb2luKFtYLl9fbW9kdWxlX18sIFguX19xdWFsbmFtZV9fXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJbMF0sICIlczogJXNcbiIgJSAoc3RyX25hbWUsIHN0cl92YWx1ZSkpCiAKICAgICBkZWYgdGVzdF93aXRob3V0X2V4Y2VwdGlvbihzZWxmKToKQEAgLTE2OSw2ICsxNzgsNDUgQEAKICAgICAgICAgIyBJc3N1ZSAjMTg5NjA6IGNvZGluZyBzcGVjIHNob3VsZCBoYXMgbm8gZWZmZWN0CiAgICAgICAgIGRvX3Rlc3QoIjBcbiMgY29kaW5nOiBHQktcbiIsICJoXHhlOSBobyIsICd1dGYtOCcsIDUpCiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc190eXBlX2NvbGxlY3RpbmcKKyAgICBkZWYgdGVzdF9wcmludF90cmFjZWJhY2tfYXRfZXhpdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjI1OTk6IEVuc3VyZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGUgdHJhY2ViYWNrIG1vZHVsZQorICAgICAgICAjIHRvIGRpc3BsYXkgYW4gZXhjZXB0aW9uIGF0IFB5dGhvbiBleGl0CisgICAgICAgIGNvZGUgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisKKyAgICAgICAgICAgIGNsYXNzIFByaW50RXhjZXB0aW9uQXRFeGl0KG9iamVjdCk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMSAvIDAKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBzZWxmLmV4Y19pbmZvWzFdICh0cmFjZWJhY2spIGNvbnRhaW5zIGZyYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZXhwbGljaXRseSBjbGVhciB0aGUgcmVmZXJlbmNlIHRvIHNlbGYgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZnJhbWUgdG8gYnJlYWsgYSByZWZlcmVuY2UgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgPSBOb25lCisKKyAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbigqc2VsZi5leGNfaW5mbykKKworICAgICAgICAgICAgIyBLZWVwIGEgcmVmZXJlbmNlIGluIHRoZSBtb2R1bGUgbmFtZXNwYWNlIHRvIGNhbGwgdGhlIGRlc3RydWN0b3IKKyAgICAgICAgICAgICMgd2hlbiB0aGUgbW9kdWxlIGlzIHVubG9hZGVkCisgICAgICAgICAgICBvYmogPSBQcmludEV4Y2VwdGlvbkF0RXhpdCgpCisgICAgICAgICIiIikKKyAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorICAgICAgICBleHBlY3RlZCA9IFtiJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonLAorICAgICAgICAgICAgICAgICAgICBiJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDgsIGluIF9faW5pdF9fJywKKyAgICAgICAgICAgICAgICAgICAgYidaZXJvRGl2aXNpb25FcnJvcjogZGl2aXNpb24gYnkgemVybyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLnNwbGl0bGluZXMoKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9wcmludF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbigKKyAgICAgICAgICAgIEV4Y2VwdGlvbiwgRXhjZXB0aW9uKCJwcm9qZWN0b3IiKSwgTm9uZSwgZmlsZT1vdXRwdXQKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLCAiRXhjZXB0aW9uOiBwcm9qZWN0b3JcbiIpCisKIAogY2xhc3MgVHJhY2ViYWNrRm9ybWF0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC00MzksNiArNDg3LDEyNiBAQAogICAgICAgICByZXR1cm4gcy5nZXR2YWx1ZSgpCiAKIAorY2xhc3MgTGltaXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAnJycgVGVzdHMgZm9yIGxpbWl0IGFyZ3VtZW50LgorICAgICAgICBJdCdzIGVub3VnaCB0byB0ZXN0IGV4dGFjdF90YiwgZXh0cmFjdF9zdGFjayBhbmQgZm9ybWF0X2V4Y2VwdGlvbiAnJycKKworICAgIGRlZiBsYXN0X3JhaXNlczEoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignTGFzdCByYWlzZWQnKQorCisgICAgZGVmIGxhc3RfcmFpc2VzMihzZWxmKToKKyAgICAgICAgc2VsZi5sYXN0X3JhaXNlczEoKQorCisgICAgZGVmIGxhc3RfcmFpc2VzMyhzZWxmKToKKyAgICAgICAgc2VsZi5sYXN0X3JhaXNlczIoKQorCisgICAgZGVmIGxhc3RfcmFpc2VzNChzZWxmKToKKyAgICAgICAgc2VsZi5sYXN0X3JhaXNlczMoKQorCisgICAgZGVmIGxhc3RfcmFpc2VzNShzZWxmKToKKyAgICAgICAgc2VsZi5sYXN0X3JhaXNlczQoKQorCisgICAgZGVmIGxhc3RfcmV0dXJuc19mcmFtZTEoc2VsZik6CisgICAgICAgIHJldHVybiBzeXMuX2dldGZyYW1lKCkKKworICAgIGRlZiBsYXN0X3JldHVybnNfZnJhbWUyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5sYXN0X3JldHVybnNfZnJhbWUxKCkKKworICAgIGRlZiBsYXN0X3JldHVybnNfZnJhbWUzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5sYXN0X3JldHVybnNfZnJhbWUyKCkKKworICAgIGRlZiBsYXN0X3JldHVybnNfZnJhbWU0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5sYXN0X3JldHVybnNfZnJhbWUzKCkKKworICAgIGRlZiBsYXN0X3JldHVybnNfZnJhbWU1KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5sYXN0X3JldHVybnNfZnJhbWU0KCkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Rfc3RhY2soc2VsZik6CisgICAgICAgIGZyYW1lID0gc2VsZi5sYXN0X3JldHVybnNfZnJhbWU1KCkKKyAgICAgICAgZGVmIGV4dHJhY3QoKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKGZyYW1lLCAqKmt3YXJncykKKyAgICAgICAgZGVmIGFzc2VydEVxdWFsRXhjZXB0KGFjdHVhbCwgZXhwZWN0ZWQsIGlnbm9yZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbFs6aWdub3JlXSwgZXhwZWN0ZWRbOmlnbm9yZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbFtpZ25vcmUrMTpdLCBleHBlY3RlZFtpZ25vcmUrMTpdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWN0dWFsKSwgbGVuKGV4cGVjdGVkKSkKKworICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0JywgMTAwMCk6CisgICAgICAgICAgICBub2xpbSA9IGV4dHJhY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihub2xpbSksIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QobGltaXQ9MiksIG5vbGltWy0yOl0pCisgICAgICAgICAgICBhc3NlcnRFcXVhbEV4Y2VwdChleHRyYWN0KGxpbWl0PTEwMCksIG5vbGltWy0xMDA6XSwgLTUtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdChsaW1pdD0tMiksIG5vbGltWzoyXSkKKyAgICAgICAgICAgIGFzc2VydEVxdWFsRXhjZXB0KGV4dHJhY3QobGltaXQ9LTEwMCksIG5vbGltWzoxMDBdLCBsZW4obm9saW0pLTUtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdChsaW1pdD0wKSwgW10pCisgICAgICAgICAgICBkZWwgc3lzLnRyYWNlYmFja2xpbWl0CisgICAgICAgICAgICBhc3NlcnRFcXVhbEV4Y2VwdChleHRyYWN0KCksIG5vbGltLCAtNS0xKQorICAgICAgICAgICAgc3lzLnRyYWNlYmFja2xpbWl0ID0gMgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KCksIG5vbGltWy0yOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QobGltaXQ9MyksIG5vbGltWy0zOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QobGltaXQ9LTMpLCBub2xpbVs6M10pCisgICAgICAgICAgICBzeXMudHJhY2ViYWNrbGltaXQgPSAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QoKSwgW10pCisgICAgICAgICAgICBzeXMudHJhY2ViYWNrbGltaXQgPSAtMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KCksIFtdKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF90YihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5sYXN0X3JhaXNlczUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBkZWYgZXh0cmFjdCgqKmt3YXJncyk6CisgICAgICAgICAgICByZXR1cm4gdHJhY2ViYWNrLmV4dHJhY3RfdGIodGIsICoqa3dhcmdzKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnLCAxMDAwKToKKyAgICAgICAgICAgIG5vbGltID0gZXh0cmFjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihub2xpbSksIDUrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdChsaW1pdD0yKSwgbm9saW1bOjJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KGxpbWl0PTEwKSwgbm9saW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QobGltaXQ9LTIpLCBub2xpbVstMjpdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KGxpbWl0PS0xMCksIG5vbGltKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KGxpbWl0PTApLCBbXSkKKyAgICAgICAgICAgIGRlbCBzeXMudHJhY2ViYWNrbGltaXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdCgpLCBub2xpbSkKKyAgICAgICAgICAgIHN5cy50cmFjZWJhY2tsaW1pdCA9IDIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdCgpLCBub2xpbVs6Ml0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QobGltaXQ9MyksIG5vbGltWzozXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdChsaW1pdD0tMyksIG5vbGltWy0zOl0pCisgICAgICAgICAgICBzeXMudHJhY2ViYWNrbGltaXQgPSAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QoKSwgW10pCisgICAgICAgICAgICBzeXMudHJhY2ViYWNrbGltaXQgPSAtMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KCksIFtdKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5sYXN0X3JhaXNlczUoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAjIFsxOi0xXSB0byBleGNsdWRlICJUcmFjZWJhY2sgKC4uLikiIGhlYWRlciBhbmQKKyAgICAgICAgIyBleGNlcHRpb24gdHlwZSBhbmQgdmFsdWUKKyAgICAgICAgZGVmIGV4dHJhY3QoKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Y190eXBlLCBleGNfdmFsdWUsIHRiLCAqKmt3YXJncylbMTotMV0KKworICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0JywgMTAwMCk6CisgICAgICAgICAgICBub2xpbSA9IGV4dHJhY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obm9saW0pLCA1KzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QobGltaXQ9MiksIG5vbGltWzoyXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdChsaW1pdD0xMCksIG5vbGltKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KGxpbWl0PS0yKSwgbm9saW1bLTI6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdChsaW1pdD0tMTApLCBub2xpbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdChsaW1pdD0wKSwgW10pCisgICAgICAgICAgICBkZWwgc3lzLnRyYWNlYmFja2xpbWl0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QoKSwgbm9saW0pCisgICAgICAgICAgICBzeXMudHJhY2ViYWNrbGltaXQgPSAyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QoKSwgbm9saW1bOjJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KGxpbWl0PTMpLCBub2xpbVs6M10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3QobGltaXQ9LTMpLCBub2xpbVstMzpdKQorICAgICAgICAgICAgc3lzLnRyYWNlYmFja2xpbWl0ID0gMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRyYWN0KCksIFtdKQorICAgICAgICAgICAgc3lzLnRyYWNlYmFja2xpbWl0ID0gLTEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0cmFjdCgpLCBbXSkKKworCiBjbGFzcyBNaXNjVHJhY2ViYWNrQ2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMKICAgICAjIENoZWNrIG5vbi1wcmludGluZyBmdW5jdGlvbnMgaW4gdHJhY2ViYWNrIG1vZHVsZQpAQCAtNDc2LDExICs2NDQsMjc5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0yOl0sIFsKICAgICAgICAgICAgIChfX2ZpbGVfXywgbGluZW5vKzIsICd0ZXN0X2V4dHJhY3Rfc3RhY2snLCAncmVzdWx0ID0gZXh0cmFjdCgpJyksCiAgICAgICAgICAgICAoX19maWxlX18sIGxpbmVubysxLCAnZXh0cmFjdCcsICdyZXR1cm4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soKScpLAotICAgICAgICBdKQorICAgICAgICAgICAgXSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorY2xhc3MgVGVzdEZyYW1lKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBsaW5lY2FjaGUubGF6eWNhY2hlKCJmIiwgZ2xvYmFscygpKQorICAgICAgICBmID0gdHJhY2ViYWNrLkZyYW1lU3VtbWFyeSgiZiIsIDEsICJkdW1teSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwKKyAgICAgICAgICAgICgiZiIsIDEsICJkdW1teSIsICciIiJUZXN0IGNhc2VzIGZvciB0cmFjZWJhY2sgbW9kdWxlIiIiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoZiksCisgICAgICAgICAgICAoImYiLCAxLCAiZHVtbXkiLCAnIiIiVGVzdCBjYXNlcyBmb3IgdHJhY2ViYWNrIG1vZHVsZSIiIicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYsIHRyYWNlYmFjay5GcmFtZVN1bW1hcnkoImYiLCAxLCAiZHVtbXkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCB0dXBsZShmKSkKKyAgICAgICAgIyBTaW5jZSB0dXBsZS5fX2VxX18gZG9lc24ndCBzdXBwb3J0IEZyYW1lU3VtbWFyeSwgdGhlIGVxdWFsaXR5CisgICAgICAgICMgb3BlcmF0b3IgZmFsbGJhY2tzIHRvIEZyYW1lU3VtbWFyeS5fX2VxX18uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoZiksIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYubG9jYWxzKQorCisgICAgZGVmIHRlc3RfbGF6eV9saW5lcyhzZWxmKToKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBmID0gdHJhY2ViYWNrLkZyYW1lU3VtbWFyeSgiZiIsIDEsICJkdW1teSIsIGxvb2t1cF9saW5lPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGYuX2xpbmUpCisgICAgICAgIGxpbmVjYWNoZS5sYXp5Y2FjaGUoImYiLCBnbG9iYWxzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnIiIiVGVzdCBjYXNlcyBmb3IgdHJhY2ViYWNrIG1vZHVsZSIiIicsCisgICAgICAgICAgICBmLmxpbmUpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9saW5lKHNlbGYpOgorICAgICAgICBmID0gdHJhY2ViYWNrLkZyYW1lU3VtbWFyeSgiZiIsIDEsICJkdW1teSIsIGxpbmU9ImxpbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJsaW5lIiwgZi5saW5lKQorCisKK2NsYXNzIFRlc3RTdGFjayh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF93YWxrX3N0YWNrKHNlbGYpOgorICAgICAgICBzID0gbGlzdCh0cmFjZWJhY2sud2Fsa19zdGFjayhOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzKSwgMTApCisKKyAgICBkZWYgdGVzdF93YWxrX3RiKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIF8sIF8sIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgcyA9IGxpc3QodHJhY2ViYWNrLndhbGtfdGIodGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgMSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Rfc3RhY2soc2VsZik6CisgICAgICAgIHMgPSB0cmFjZWJhY2suU3RhY2tTdW1tYXJ5LmV4dHJhY3QodHJhY2ViYWNrLndhbGtfc3RhY2soTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCB0cmFjZWJhY2suU3RhY2tTdW1tYXJ5KQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9zdGFja19saW1pdChzZWxmKToKKyAgICAgICAgcyA9IHRyYWNlYmFjay5TdGFja1N1bW1hcnkuZXh0cmFjdCh0cmFjZWJhY2sud2Fsa19zdGFjayhOb25lKSwgbGltaXQ9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIDUpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X3N0YWNrX2xvb2t1cF9saW5lcyhzZWxmKToKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBsaW5lY2FjaGUudXBkYXRlY2FjaGUoJy9mb28ucHknLCBnbG9iYWxzKCkpCisgICAgICAgIGMgPSB0ZXN0X2NvZGUoJy9mb28ucHknLCAnbWV0aG9kJykKKyAgICAgICAgZiA9IHRlc3RfZnJhbWUoYywgTm9uZSwgTm9uZSkKKyAgICAgICAgcyA9IHRyYWNlYmFjay5TdGFja1N1bW1hcnkuZXh0cmFjdChpdGVyKFsoZiwgNildKSwgbG9va3VwX2xpbmVzPVRydWUpCisgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzBdLmxpbmUsICJpbXBvcnQgc3lzIikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Rfc3RhY2t1cF9kZWZlcnJlZF9sb29rdXBfbGluZXMoc2VsZik6CisgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKKyAgICAgICAgYyA9IHRlc3RfY29kZSgnL2Zvby5weScsICdtZXRob2QnKQorICAgICAgICBmID0gdGVzdF9mcmFtZShjLCBOb25lLCBOb25lKQorICAgICAgICBzID0gdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5leHRyYWN0KGl0ZXIoWyhmLCA2KV0pLCBsb29rdXBfbGluZXM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe30sIGxpbmVjYWNoZS5jYWNoZSkKKyAgICAgICAgbGluZWNhY2hlLnVwZGF0ZWNhY2hlKCcvZm9vLnB5JywgZ2xvYmFscygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMF0ubGluZSwgImltcG9ydCBzeXMiKQorCisgICAgZGVmIHRlc3RfZnJvbV9saXN0KHNlbGYpOgorICAgICAgICBzID0gdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5mcm9tX2xpc3QoWygnZm9vLnB5JywgMSwgJ2ZyZWQnLCAnbGluZScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsnICBGaWxlICJmb28ucHkiLCBsaW5lIDEsIGluIGZyZWRcbiAgICBsaW5lXG4nXSwKKyAgICAgICAgICAgIHMuZm9ybWF0KCkpCisKKyAgICBkZWYgdGVzdF9mcm9tX2xpc3RfZWRpdGVkX3N0YWNrKHNlbGYpOgorICAgICAgICBzID0gdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5mcm9tX2xpc3QoWygnZm9vLnB5JywgMSwgJ2ZyZWQnLCAnbGluZScpXSkKKyAgICAgICAgc1swXSA9ICgnZm9vLnB5JywgMiwgJ2ZyZWQnLCAnbGluZScpCisgICAgICAgIHMyID0gdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5mcm9tX2xpc3QocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsnICBGaWxlICJmb28ucHkiLCBsaW5lIDIsIGluIGZyZWRcbiAgICBsaW5lXG4nXSwKKyAgICAgICAgICAgIHMyLmZvcm1hdCgpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X3Ntb2tlKHNlbGYpOgorICAgICAgICAjIEZvciBkZXRhaWxlZCB0ZXN0cyBzZWUgdGhlIGZvcm1hdF9saXN0IHRlc3RzLCB3aGljaCBjb25zdW1lIHRoZSBzYW1lCisgICAgICAgICMgY29kZS4KKyAgICAgICAgcyA9IHRyYWNlYmFjay5TdGFja1N1bW1hcnkuZnJvbV9saXN0KFsoJ2Zvby5weScsIDEsICdmcmVkJywgJ2xpbmUnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbJyAgRmlsZSAiZm9vLnB5IiwgbGluZSAxLCBpbiBmcmVkXG4gICAgbGluZVxuJ10sCisgICAgICAgICAgICBzLmZvcm1hdCgpKQorCisgICAgZGVmIHRlc3RfbG9jYWxzKHNlbGYpOgorICAgICAgICBsaW5lY2FjaGUudXBkYXRlY2FjaGUoJy9mb28ucHknLCBnbG9iYWxzKCkpCisgICAgICAgIGMgPSB0ZXN0X2NvZGUoJy9mb28ucHknLCAnbWV0aG9kJykKKyAgICAgICAgZiA9IHRlc3RfZnJhbWUoYywgZ2xvYmFscygpLCB7J3NvbWV0aGluZyc6IDF9KQorICAgICAgICBzID0gdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5leHRyYWN0KGl0ZXIoWyhmLCA2KV0pLCBjYXB0dXJlX2xvY2Fscz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMF0ubG9jYWxzLCB7J3NvbWV0aGluZyc6ICcxJ30pCisKKyAgICBkZWYgdGVzdF9ub19sb2NhbHMoc2VsZik6CisgICAgICAgIGxpbmVjYWNoZS51cGRhdGVjYWNoZSgnL2Zvby5weScsIGdsb2JhbHMoKSkKKyAgICAgICAgYyA9IHRlc3RfY29kZSgnL2Zvby5weScsICdtZXRob2QnKQorICAgICAgICBmID0gdGVzdF9mcmFtZShjLCBnbG9iYWxzKCksIHsnc29tZXRoaW5nJzogMX0pCisgICAgICAgIHMgPSB0cmFjZWJhY2suU3RhY2tTdW1tYXJ5LmV4dHJhY3QoaXRlcihbKGYsIDYpXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1swXS5sb2NhbHMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfbG9jYWxzKHNlbGYpOgorICAgICAgICBkZWYgc29tZV9pbm5lcihrLCB2KToKKyAgICAgICAgICAgIGEgPSAxCisgICAgICAgICAgICBiID0gMgorICAgICAgICAgICAgcmV0dXJuIHRyYWNlYmFjay5TdGFja1N1bW1hcnkuZXh0cmFjdCgKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sud2Fsa19zdGFjayhOb25lKSwgY2FwdHVyZV9sb2NhbHM9VHJ1ZSwgbGltaXQ9MSkKKyAgICAgICAgcyA9IHNvbWVfaW5uZXIoMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluIHNvbWVfaW5uZXJcbicKKyAgICAgICAgICAgICAnICAgIHRyYWNlYmFjay53YWxrX3N0YWNrKE5vbmUpLCBjYXB0dXJlX2xvY2Fscz1UcnVlLCBsaW1pdD0xKVxuJworICAgICAgICAgICAgICcgICAgYSA9IDFcbicKKyAgICAgICAgICAgICAnICAgIGIgPSAyXG4nCisgICAgICAgICAgICAgJyAgICBrID0gM1xuJworICAgICAgICAgICAgICcgICAgdiA9IDRcbicgJSAoX19maWxlX18sIHNvbWVfaW5uZXIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyA0KQorICAgICAgICAgICAgXSwgcy5mb3JtYXQoKSkKKworY2xhc3MgVGVzdFRyYWNlYmFja0V4Y2VwdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zbW9rZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgMS8wCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBleGMgPSB0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uKCpleGNfaW5mbykKKyAgICAgICAgICAgIGV4cGVjdGVkX3N0YWNrID0gdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5leHRyYWN0KAorICAgICAgICAgICAgICAgIHRyYWNlYmFjay53YWxrX3RiKGV4Y19pbmZvWzJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBleGMuX19jYXVzZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGV4Yy5fX2NvbnRleHRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZXhjLl9fc3VwcHJlc3NfY29udGV4dF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3N0YWNrLCBleGMuc3RhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2luZm9bMF0sIGV4Yy5leGNfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXhjX2luZm9bMV0pLCBzdHIoZXhjKSkKKworICAgIGRlZiB0ZXN0X2Zyb21fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIENoZWNrIGFsbCB0aGUgcGFyYW1ldGVycyBhcmUgYWNjZXB0ZWQuCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIDEvMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb28oKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBzZWxmLmV4cGVjdGVkX3N0YWNrID0gdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5leHRyYWN0KAorICAgICAgICAgICAgICAgIHRyYWNlYmFjay53YWxrX3RiKGV4Y19pbmZvWzJdKSwgbGltaXQ9MSwgbG9va3VwX2xpbmVzPUZhbHNlLAorICAgICAgICAgICAgICAgIGNhcHR1cmVfbG9jYWxzPVRydWUpCisgICAgICAgICAgICBzZWxmLmV4YyA9IHRyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb24uZnJvbV9leGNlcHRpb24oCisgICAgICAgICAgICAgICAgZSwgbGltaXQ9MSwgbG9va3VwX2xpbmVzPUZhbHNlLCBjYXB0dXJlX2xvY2Fscz1UcnVlKQorICAgICAgICBleHBlY3RlZF9zdGFjayA9IHNlbGYuZXhwZWN0ZWRfc3RhY2sKKyAgICAgICAgZXhjID0gc2VsZi5leGMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBleGMuX19jYXVzZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGV4Yy5fX2NvbnRleHRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZXhjLl9fc3VwcHJlc3NfY29udGV4dF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3N0YWNrLCBleGMuc3RhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2luZm9bMF0sIGV4Yy5leGNfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXhjX2luZm9bMV0pLCBzdHIoZXhjKSkKKworICAgIGRlZiB0ZXN0X2NhdXNlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGV4Y19pbmZvX2NvbnRleHQgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIGV4Y19jb250ZXh0ID0gdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbigqZXhjX2luZm9fY29udGV4dCkKKyAgICAgICAgICAgICAgICBjYXVzZSA9IEV4Y2VwdGlvbigiY2F1c2UiKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigidWggb2giKSBmcm9tIGNhdXNlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBleGMgPSB0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uKCpleGNfaW5mbykKKyAgICAgICAgICAgIGV4cGVjdGVkX3N0YWNrID0gdHJhY2ViYWNrLlN0YWNrU3VtbWFyeS5leHRyYWN0KAorICAgICAgICAgICAgICAgIHRyYWNlYmFjay53YWxrX3RiKGV4Y19pbmZvWzJdKSkKKyAgICAgICAgZXhjX2NhdXNlID0gdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbihFeGNlcHRpb24sIGNhdXNlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y19jYXVzZSwgZXhjLl9fY2F1c2VfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNfY29udGV4dCwgZXhjLl9fY29udGV4dF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGV4Yy5fX3N1cHByZXNzX2NvbnRleHRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9zdGFjaywgZXhjLnN0YWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y19pbmZvWzBdLCBleGMuZXhjX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4Y19pbmZvWzFdKSwgc3RyKGV4YykpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGV4Y19pbmZvX2NvbnRleHQgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIGV4Y19jb250ZXh0ID0gdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbigqZXhjX2luZm9fY29udGV4dCkKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInVoIG9oIikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGV4YyA9IHRyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb24oKmV4Y19pbmZvKQorICAgICAgICAgICAgZXhwZWN0ZWRfc3RhY2sgPSB0cmFjZWJhY2suU3RhY2tTdW1tYXJ5LmV4dHJhY3QoCisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLndhbGtfdGIoZXhjX2luZm9bMl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGV4Yy5fX2NhdXNlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2NvbnRleHQsIGV4Yy5fX2NvbnRleHRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgZXhjLl9fc3VwcHJlc3NfY29udGV4dF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3N0YWNrLCBleGMuc3RhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2luZm9bMF0sIGV4Yy5leGNfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXhjX2luZm9bMV0pLCBzdHIoZXhjKSkKKworICAgIGRlZiB0ZXN0X2xpbWl0KHNlbGYpOgorICAgICAgICBkZWYgcmVjdXJzZShuKToKKyAgICAgICAgICAgIGlmIG46CisgICAgICAgICAgICAgICAgcmVjdXJzZShuLTEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWN1cnNlKDEwKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgZXhjID0gdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbigqZXhjX2luZm8sIGxpbWl0PTUpCisgICAgICAgICAgICBleHBlY3RlZF9zdGFjayA9IHRyYWNlYmFjay5TdGFja1N1bW1hcnkuZXh0cmFjdCgKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sud2Fsa190YihleGNfaW5mb1syXSksIGxpbWl0PTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfc3RhY2ssIGV4Yy5zdGFjaykKKworICAgIGRlZiB0ZXN0X2xvb2t1cF9saW5lcyhzZWxmKToKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBlID0gRXhjZXB0aW9uKCJ1aCBvaCIpCisgICAgICAgIGMgPSB0ZXN0X2NvZGUoJy9mb28ucHknLCAnbWV0aG9kJykKKyAgICAgICAgZiA9IHRlc3RfZnJhbWUoYywgTm9uZSwgTm9uZSkKKyAgICAgICAgdGIgPSB0ZXN0X3RiKGYsIDYsIE5vbmUpCisgICAgICAgIGV4YyA9IHRyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb24oRXhjZXB0aW9uLCBlLCB0YiwgbG9va3VwX2xpbmVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt9LCBsaW5lY2FjaGUuY2FjaGUpCisgICAgICAgIGxpbmVjYWNoZS51cGRhdGVjYWNoZSgnL2Zvby5weScsIGdsb2JhbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuc3RhY2tbMF0ubGluZSwgImltcG9ydCBzeXMiKQorCisgICAgZGVmIHRlc3RfbG9jYWxzKHNlbGYpOgorICAgICAgICBsaW5lY2FjaGUudXBkYXRlY2FjaGUoJy9mb28ucHknLCBnbG9iYWxzKCkpCisgICAgICAgIGUgPSBFeGNlcHRpb24oInVoIG9oIikKKyAgICAgICAgYyA9IHRlc3RfY29kZSgnL2Zvby5weScsICdtZXRob2QnKQorICAgICAgICBmID0gdGVzdF9mcmFtZShjLCBnbG9iYWxzKCksIHsnc29tZXRoaW5nJzogMSwgJ290aGVyJzogJ3N0cmluZyd9KQorICAgICAgICB0YiA9IHRlc3RfdGIoZiwgNiwgTm9uZSkKKyAgICAgICAgZXhjID0gdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbigKKyAgICAgICAgICAgIEV4Y2VwdGlvbiwgZSwgdGIsIGNhcHR1cmVfbG9jYWxzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBleGMuc3RhY2tbMF0ubG9jYWxzLCB7J3NvbWV0aGluZyc6ICcxJywgJ290aGVyJzogIidzdHJpbmcnIn0pCisKKyAgICBkZWYgdGVzdF9ub19sb2NhbHMoc2VsZik6CisgICAgICAgIGxpbmVjYWNoZS51cGRhdGVjYWNoZSgnL2Zvby5weScsIGdsb2JhbHMoKSkKKyAgICAgICAgZSA9IEV4Y2VwdGlvbigidWggb2giKQorICAgICAgICBjID0gdGVzdF9jb2RlKCcvZm9vLnB5JywgJ21ldGhvZCcpCisgICAgICAgIGYgPSB0ZXN0X2ZyYW1lKGMsIGdsb2JhbHMoKSwgeydzb21ldGhpbmcnOiAxfSkKKyAgICAgICAgdGIgPSB0ZXN0X3RiKGYsIDYsIE5vbmUpCisgICAgICAgIGV4YyA9IHRyYWNlYmFjay5UcmFjZWJhY2tFeGNlcHRpb24oRXhjZXB0aW9uLCBlLCB0YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuc3RhY2tbMF0ubG9jYWxzLCBOb25lKQorCisgICAgZGVmIHRlc3RfdHJhY2ViYWNrX2hlYWRlcihzZWxmKToKKyAgICAgICAgIyBkbyBub3QgcHJpbnQgYSB0cmFjZWJhY2sgaGVhZGVyIGlmIGV4Y190cmFjZWJhY2sgaXMgTm9uZQorICAgICAgICAjIHNlZSBpc3N1ZSAjMjQ2OTUKKyAgICAgICAgZXhjID0gdHJhY2ViYWNrLlRyYWNlYmFja0V4Y2VwdGlvbihFeGNlcHRpb24sIEV4Y2VwdGlvbigiaGF2ZW4iKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGV4Yy5mb3JtYXQoKSksIFsiRXhjZXB0aW9uOiBoYXZlblxuIl0pCisKKworY2xhc3MgTWlzY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYWxsKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHNldCgpCisgICAgICAgIGJsYWNrbGlzdCA9IHsncHJpbnRfbGlzdCd9CisgICAgICAgIGZvciBuYW1lIGluIGRpcih0cmFjZWJhY2spOgorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJykgb3IgbmFtZSBpbiBibGFja2xpc3Q6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG1vZHVsZV9vYmplY3QgPSBnZXRhdHRyKHRyYWNlYmFjaywgbmFtZSkKKyAgICAgICAgICAgIGlmIGdldGF0dHIobW9kdWxlX29iamVjdCwgJ19fbW9kdWxlX18nLCBOb25lKSA9PSAndHJhY2ViYWNrJzoKKyAgICAgICAgICAgICAgICBleHBlY3RlZC5hZGQobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKHRyYWNlYmFjay5fX2FsbF9fLCBleHBlY3RlZCkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlbWFsbG9jLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZW1hbGxvYy5weQppbmRleCA0OGNjYWIyLi5kYTg5YTlhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RyYWNlbWFsbG9jLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkKQEAgLTQsOCArNCw5IEBACiBpbXBvcnQgdHJhY2VtYWxsb2MKIGltcG9ydCB1bml0dGVzdAogZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQotZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyLCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCAoYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMjUyLDcgKzI1Myw3IEBACiAgICAgICAgIHNuYXBzaG90LmR1bXAoc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCiAKLSAgICAgICAgIyBsb2FkKCkgc2hvdWxkIHJlY3JlYXRlcyB0aGUgYXR0cmlidXRlCisgICAgICAgICMgbG9hZCgpIHNob3VsZCByZWNyZWF0ZSB0aGUgYXR0cmlidXRlCiAgICAgICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLlNuYXBzaG90LmxvYWQoc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QyLnRlc3RfYXR0ciwgIm5ldyIpCiAKQEAgLTY2MCwxMSArNjYxLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmNkZCcsICdhKmMqZScpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiY2JkZWZlZicsICdhKmJkKmVnJykpCiAKLSAgICAgICAgIyByZXBsYWNlIC5weWMgYW5kIC5weW8gc3VmZml4IHdpdGggLnB5CisgICAgICAgICMgcmVwbGFjZSAucHljIHN1ZmZpeCB3aXRoIC5weQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5weScpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weW8nLCAnYS5weScpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5YycpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5bycpKQogCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgICAgICMgY2FzZSBpbnNlbnNpdGl2ZQpAQCAtNjcyLDE4ICs2NzEsMTQgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhQmNEZScsICdBYipkRScpKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EuUFlPJywgJ2EucHknKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5JywgJ2EuUFlDJykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBjYXNlIHNlbnNpdGl2ZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhQkMnLCAnQUJjJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FCY0RlJywgJ0FiKmRFJykpCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLlBZTycsICdhLnB5JykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EucHknLCAnYS5QWUMnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQogCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgICAgICMgbm9ybWFsaXplIGFsdGVybmF0ZSBzZXBhcmF0b3IgIi8iIHRvIHRoZSBzdGFuZGFyZCBzZXBhcmF0b3IgIlwiCkBAIC02OTgsNiArNjkzLDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2EvYlxjJywgcidhXGIvYycpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYS9iL2MnLCByJ2FcYlxjJykpCiAKKyAgICAgICAgIyBhcyBvZiAzLjUsIC5weW8gaXMgbm8gbG9uZ2VyIG11bmdlZCB0byAucHkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLnB5bycsICdhLnB5JykpCisKICAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2hfdHJhY2Uoc2VsZik6CiAgICAgICAgIHQxID0gKCgiYS5weSIsIDIpLCAoImIucHkiLCAzKSkKICAgICAgICAgdDIgPSAoKCJiLnB5IiwgNCksICgiYi5weSIsIDUpKQpAQCAtNzU1LDcgKzc1Myw3IEBACiAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidGYWxzZScpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHNjcmlwdF9oZWxwZXIuX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCksCisgICAgQHVuaXR0ZXN0LnNraXBJZihpbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpLAogICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBydW4gLUUgdGVzdHMgd2hlbiBQWVRIT04gZW52IHZhcnMgYXJlIHJlcXVpcmVkLicpCiAgICAgZGVmIHRlc3RfZW52X3Zhcl9pZ25vcmVkX3dpdGhfRShzZWxmKToKICAgICAgICAgIiIiUFlUSE9OKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbXVzdCBiZSBpZ25vcmVkIHdoZW4gLUUgaXMgcHJlc2VudC4iIiIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHRrX2d1aW9ubHkucHkgYi9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5CmluZGV4IGZjZGVkYWMuLjQ5MGU3MjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHRrX2d1aW9ubHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weQpAQCAtNSwxMiArNSwxMCBAQAogIyBTa2lwIHRoaXMgdGVzdCBpZiBfdGtpbnRlciB3YXNuJ3QgYnVpbHQuCiBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKIAotIyBNYWtlIHN1cmUgdGtpbnRlci5fZml4IHJ1bnMgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudAotdGtpbnRlciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgndGtpbnRlcicpCi0KICMgU2tpcCB0ZXN0IGlmIHRrIGNhbm5vdCBiZSBpbml0aWFsaXplZC4KIHN1cHBvcnQucmVxdWlyZXMoJ2d1aScpCiAKK2ltcG9ydCB0a2ludGVyCiBmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgogZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKIGZyb20gdGtpbnRlci50ZXN0IGltcG9ydCBydW50a3Rlc3RzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R0a190ZXh0b25seS5weSBiL0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5CmluZGV4IDFjZmViMTUuLjU2NmZjOWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5CkBAIC00LDkgKzQsNiBAQAogIyBTa2lwIHRoaXMgdGVzdCBpZiBfdGtpbnRlciBkb2VzIG5vdCBleGlzdC4KIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RraW50ZXInKQogCi0jIE1ha2Ugc3VyZSB0a2ludGVyLl9maXggcnVucyB0byBzZXQgdXAgdGhlIGVudmlyb25tZW50Ci1zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXInKQotCiBmcm9tIHRraW50ZXIudGVzdCBpbXBvcnQgcnVudGt0ZXN0cwogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5IGIvTGliL3Rlc3QvdGVzdF90dXBsZS5weQppbmRleCA1MTg3NWExLi41ZDFmY2Y2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHVwbGUucHkKQEAgLTEsNCArMSw1IEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNlcV90ZXN0cworaW1wb3J0IHVuaXR0ZXN0CiAKIGltcG9ydCBnYwogaW1wb3J0IHBpY2tsZQpAQCAtNiw2ICs3LDExIEBACiBjbGFzcyBUdXBsZVRlc3Qoc2VxX3Rlc3RzLkNvbW1vblRlc3QpOgogICAgIHR5cGUydGVzdCA9IHR1cGxlCiAKKyAgICBkZWYgdGVzdF9nZXRpdGVtX2Vycm9yKHNlbGYpOgorICAgICAgICBtc2cgPSAidHVwbGUgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yIHNsaWNlcyIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICgpWydhJ10KKwogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9ycyhzZWxmKToKICAgICAgICAgc3VwZXIoKS50ZXN0X2NvbnN0cnVjdG9ycygpCiAgICAgICAgICMgY2FsbGluZyBidWlsdC1pbiB0eXBlcyB3aXRob3V0IGFyZ3VtZW50IG11c3QgcmV0dXJuIGVtcHR5CkBAIC0yMDMsOCArMjA5LDEzIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIFszLF0gKyBUKCgxLDIpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVHVwbGVUZXN0KQorICAgIGRlZiB0ZXN0X2xleGljb2dyYXBoaWNfb3JkZXJpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjExMDAKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAyXSkKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAyLCAwXSkKKyAgICAgICAgYyA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhiLCBjKQogCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHVydGxlLnB5IGIvTGliL3Rlc3QvdGVzdF90dXJ0bGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkMTBjYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdHVydGxlLnB5CkBAIC0wLDAgKzEsNDM2IEBACitpbXBvcnQgcGlja2xlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCit0dXJ0bGUgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3R1cnRsZScpCitWZWMyRCA9IHR1cnRsZS5WZWMyRAorCit0ZXN0X2NvbmZpZyA9ICIiIlwKK3dpZHRoID0gMC43NQoraGVpZ2h0ID0gMC44CitjYW52d2lkdGggPSA1MDAKK2NhbnZoZWlnaHQgPSAyMDAKK2xlZnRyaWdodCA9IDEwMAordG9wYm90dG9tID0gMTAwCittb2RlID0gd29ybGQKK2NvbG9ybW9kZSA9IDI1NQorZGVsYXkgPSAxMDAKK3VuZG9idWZmZXJzaXplID0gMTAwMDAKK3NoYXBlID0gY2lyY2xlCitwZW5jb2xvciAgPSByZWQKK2ZpbGxjb2xvciAgPSBibHVlCityZXNpemVtb2RlICA9IGF1dG8KK3Zpc2libGUgID0gTm9uZQorbGFuZ3VhZ2UgPSBlbmdsaXNoCitleGFtcGxldHVydGxlID0gdHVydGxlCitleGFtcGxlc2NyZWVuID0gc2NyZWVuCit0aXRsZSA9IFB5dGhvbiBUdXJ0bGUgR3JhcGhpY3MKK3VzaW5nX0lETEUgPSAnJworIiIiCisKK3Rlc3RfY29uZmlnX3R3byA9ICIiIlwKKyMgQ29tbWVudHMhCisjIFRlc3RpbmcgY29tbWVudHMhCitwZW5jb2xvciAgPSByZWQKK2ZpbGxjb2xvciAgPSBibHVlCit2aXNpYmxlICA9IEZhbHNlCitsYW5ndWFnZSA9IGVuZ2xpc2gKKyMgU29tZSBtb3JlCisjIGNvbW1lbnRzCit1c2luZ19JRExFID0gRmFsc2UKKyIiIgorCitpbnZhbGlkX3Rlc3RfY29uZmlnID0gIiIiCitwZW5jb2xvciA9IHJlZAorZmlsbGNvbG9yOiBibHVlCit2aXNpYmxlID0gRmFsc2UKKyIiIgorCisKK2NsYXNzIFR1cnRsZUNvbmZpZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9jZmdfZmlsZShzZWxmLCBjZmdfc3RyKToKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGNmZ19zdHIpCisgICAgICAgIHJldHVybiBzdXBwb3J0LlRFU1RGTgorCisgICAgZGVmIHRlc3RfY29uZmlnX2RpY3Qoc2VsZik6CisKKyAgICAgICAgY2ZnX25hbWUgPSBzZWxmLmdldF9jZmdfZmlsZSh0ZXN0X2NvbmZpZykKKyAgICAgICAgcGFyc2VkX2NmZyA9IHR1cnRsZS5jb25maWdfZGljdChjZmdfbmFtZSkKKworICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgICd3aWR0aCcgOiAwLjc1LAorICAgICAgICAgICAgJ2hlaWdodCcgOiAwLjgsCisgICAgICAgICAgICAnY2FudndpZHRoJyA6IDUwMCwKKyAgICAgICAgICAgICdjYW52aGVpZ2h0JzogMjAwLAorICAgICAgICAgICAgJ2xlZnRyaWdodCc6IDEwMCwKKyAgICAgICAgICAgICd0b3Bib3R0b20nOiAxMDAsCisgICAgICAgICAgICAnbW9kZSc6ICd3b3JsZCcsCisgICAgICAgICAgICAnY29sb3Jtb2RlJzogMjU1LAorICAgICAgICAgICAgJ2RlbGF5JzogMTAwLAorICAgICAgICAgICAgJ3VuZG9idWZmZXJzaXplJzogMTAwMDAsCisgICAgICAgICAgICAnc2hhcGUnOiAnY2lyY2xlJywKKyAgICAgICAgICAgICdwZW5jb2xvcicgOiAncmVkJywKKyAgICAgICAgICAgICdmaWxsY29sb3InIDogJ2JsdWUnLAorICAgICAgICAgICAgJ3Jlc2l6ZW1vZGUnIDogJ2F1dG8nLAorICAgICAgICAgICAgJ3Zpc2libGUnIDogTm9uZSwKKyAgICAgICAgICAgICdsYW5ndWFnZSc6ICdlbmdsaXNoJywKKyAgICAgICAgICAgICdleGFtcGxldHVydGxlJzogJ3R1cnRsZScsCisgICAgICAgICAgICAnZXhhbXBsZXNjcmVlbic6ICdzY3JlZW4nLAorICAgICAgICAgICAgJ3RpdGxlJzogJ1B5dGhvbiBUdXJ0bGUgR3JhcGhpY3MnLAorICAgICAgICAgICAgJ3VzaW5nX0lETEUnOiAnJywKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX2NmZywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsX2NvbmZpZ19kaWN0X3dpdGhfY29tbW1lbnRzKHNlbGYpOgorCisgICAgICAgIGNmZ19uYW1lID0gc2VsZi5nZXRfY2ZnX2ZpbGUodGVzdF9jb25maWdfdHdvKQorICAgICAgICBwYXJzZWRfY2ZnID0gdHVydGxlLmNvbmZpZ19kaWN0KGNmZ19uYW1lKQorCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgJ3BlbmNvbG9yJzogJ3JlZCcsCisgICAgICAgICAgICAnZmlsbGNvbG9yJzogJ2JsdWUnLAorICAgICAgICAgICAgJ3Zpc2libGUnOiBGYWxzZSwKKyAgICAgICAgICAgICdsYW5ndWFnZSc6ICdlbmdsaXNoJywKKyAgICAgICAgICAgICd1c2luZ19JRExFJzogRmFsc2UsCisgICAgICAgIH0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlZF9jZmcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfY29uZmlnX2RpY3RfaW52YWxpZChzZWxmKToKKworICAgICAgICBjZmdfbmFtZSA9IHNlbGYuZ2V0X2NmZ19maWxlKGludmFsaWRfdGVzdF9jb25maWcpCisKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHBhcnNlZF9jZmcgPSB0dXJ0bGUuY29uZmlnX2RpY3QoY2ZnX25hbWUpCisKKyAgICAgICAgZXJyX21zZyA9IHN0ZG91dC5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQmFkIGxpbmUgaW4gY29uZmlnLWZpbGUgJywgZXJyX21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZmlsbGNvbG9yOiBibHVlJywgZXJyX21zZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlZF9jZmcsIHsKKyAgICAgICAgICAgICdwZW5jb2xvcic6ICdyZWQnLAorICAgICAgICAgICAgJ3Zpc2libGUnOiBGYWxzZSwKKyAgICAgICAgfSkKKworCitjbGFzcyBWZWN0b3JDb21wYXJpc29uTWl4aW46CisKKyAgICBkZWYgYXNzZXJ0VmVjdG9yc0FsbW9zdEVxdWFsKHNlbGYsIHZlYzEsIHZlYzIpOgorICAgICAgICBpZiBsZW4odmVjMSkgIT0gbGVuKHZlYzIpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUdXBsZXMgYXJlIG5vdCBvZiBlcXVhbCBzaXplIikKKyAgICAgICAgZm9yIGlkeCwgKGksIGopIGluIGVudW1lcmF0ZSh6aXAodmVjMSwgdmVjMikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgKKyAgICAgICAgICAgICAgICBpLCBqLCBtc2c9J3ZhbHVlcyBhdCBpbmRleCB7fSBkbyBub3QgbWF0Y2gnLmZvcm1hdChpZHgpKQorCisKK2NsYXNzIFRlc3RWZWMyRChWZWN0b3JDb21wYXJpc29uTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB2ZWMgPSBWZWMyRCgwLjUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVjWzBdLCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVjWzFdLCAyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmVjLCBWZWMyRCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFZlYzJEKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFZlYzJELCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFZlYzJELCAoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgVmVjMkQsIHZlYykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBWZWMyRCwgMCwgMSwgMikKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHZlYyA9IFZlYzJEKDAuNTY3LCAxLjIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHZlYyksICcoMC41NywxLjIzKScpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgdmVjMSA9IFZlYzJEKDAsIDEpCisgICAgICAgIHZlYzIgPSBWZWMyRCgwLjAsIDEpCisgICAgICAgIHZlYzMgPSBWZWMyRCg0MiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZWMxLCB2ZWMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlYzEsIHR1cGxlKHZlYzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHZlYzEpLCB2ZWMxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHZlYzEsIHZlYzMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodmVjMiwgdmVjMykKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICB2ZWMgPSBWZWMyRCgwLjUsIDIpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHModmVjLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgdmVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1bnBpY2tsZWQsIFZlYzJEKQorCisgICAgZGVmIF9hc3NlcnRfYXJpdGhtZXRpY19jYXNlcyhzZWxmLCB0ZXN0X2Nhc2VzLCBsYW1iZGFfb3BlcmF0b3IpOgorICAgICAgICBmb3IgdGVzdF9jYXNlIGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjYXNlPXRlc3RfY2FzZSk6CisKKyAgICAgICAgICAgICAgICAoKGZpcnN0LCBzZWNvbmQpLCBleHBlY3RlZCkgPSB0ZXN0X2Nhc2UKKworICAgICAgICAgICAgICAgIG9wMSA9IFZlYzJEKCpmaXJzdCkKKyAgICAgICAgICAgICAgICBvcDIgPSBWZWMyRCgqc2Vjb25kKQorCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGFtYmRhX29wZXJhdG9yKG9wMSwgb3AyKQorCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBWZWMyRCgqZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFZlY3RvcnNBbG1vc3RFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdmVjdG9yX2FkZGl0aW9uKHNlbGYpOgorCisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoKCgwLCAwKSwgKDEsIDEpKSwgKDEuMCwgMS4wKSksCisgICAgICAgICAgICAoKCgtMSwgMCksICgyLCAyKSksICgxLCAyKSksCisgICAgICAgICAgICAoKCgxLjUsIDApLCAoMSwgMSkpLCAoMi41LCAxKSksCisgICAgICAgIF0KKworICAgICAgICBzZWxmLl9hc3NlcnRfYXJpdGhtZXRpY19jYXNlcyh0ZXN0X2Nhc2VzLCBsYW1iZGEgeCwgeTogeCArIHkpCisKKyAgICBkZWYgdGVzdF92ZWN0b3Jfc3VidHJhY3Rpb24oc2VsZik6CisKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgoKDAsIDApLCAoMSwgMSkpLCAoLTEsIC0xKSksCisgICAgICAgICAgICAoKCgxMC42MjUsIDAuMTI1KSwgKDEwLCAwKSksICgwLjYyNSwgMC4xMjUpKSwKKyAgICAgICAgXQorCisgICAgICAgIHNlbGYuX2Fzc2VydF9hcml0aG1ldGljX2Nhc2VzKHRlc3RfY2FzZXMsIGxhbWJkYSB4LCB5OiB4IC0geSkKKworICAgIGRlZiB0ZXN0X3ZlY3Rvcl9tdWx0aXBseShzZWxmKToKKworICAgICAgICB2ZWMxID0gVmVjMkQoMTAsIDEwKQorICAgICAgICB2ZWMyID0gVmVjMkQoMC41LCAzKQorICAgICAgICBhbnN3ZXIgPSB2ZWMxICogdmVjMgorICAgICAgICBleHBlY3RlZCA9IDM1CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYW5zd2VyLCBleHBlY3RlZCkKKworICAgICAgICB2ZWMgPSBWZWMyRCgwLjUsIDMpCisgICAgICAgIGFuc3dlciA9IHZlYyAqIDEwCisgICAgICAgIGV4cGVjdGVkID0gVmVjMkQoNSwgMzApCisgICAgICAgIHNlbGYuYXNzZXJ0VmVjdG9yc0FsbW9zdEVxdWFsKGFuc3dlciwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF92ZWN0b3JfbmVnYXRpdmUoc2VsZik6CisgICAgICAgIHZlYyA9IFZlYzJEKDEwLCAtMTApCisgICAgICAgIGV4cGVjdGVkID0gKC0xMCwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0VmVjdG9yc0FsbW9zdEVxdWFsKC12ZWMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZGlzdGFuY2Uoc2VsZik6CisgICAgICAgIHZlYyA9IFZlYzJEKDYsIDgpCisgICAgICAgIGV4cGVjdGVkID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnModmVjKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgdmVjID0gVmVjMkQoMCwgMCkKKyAgICAgICAgZXhwZWN0ZWQgPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKHZlYyksIGV4cGVjdGVkKQorCisgICAgICAgIHZlYyA9IFZlYzJEKDIuNSwgNikKKyAgICAgICAgZXhwZWN0ZWQgPSA2LjUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnModmVjKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yb3RhdGUoc2VsZik6CisKKyAgICAgICAgY2FzZXMgPSBbCisgICAgICAgICAgICAoKCgwLCAwKSwgMCksICgwLCAwKSksCisgICAgICAgICAgICAoKCgwLCAxKSwgOTApLCAoLTEsIDApKSwKKyAgICAgICAgICAgICgoKDAsIDEpLCAtOTApLCAoMSwgMCkpLAorICAgICAgICAgICAgKCgoMSwgMCksIDE4MCksICgtMSwgMCkpLAorICAgICAgICAgICAgKCgoMSwgMCksIDM2MCksICgxLCAwKSksCisgICAgICAgIF0KKworICAgICAgICBmb3IgY2FzZSBpbiBjYXNlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNhc2U9Y2FzZSk6CisgICAgICAgICAgICAgICAgKHZlYywgcm90KSwgZXhwZWN0ZWQgPSBjYXNlCisgICAgICAgICAgICAgICAgdmVjID0gVmVjMkQoKnZlYykKKyAgICAgICAgICAgICAgICBnb3QgPSB2ZWMucm90YXRlKHJvdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFZlY3RvcnNBbG1vc3RFcXVhbChnb3QsIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RUTmF2aWdhdG9yKFZlY3RvckNvbXBhcmlzb25NaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hdiA9IHR1cnRsZS5UTmF2aWdhdG9yKCkKKworICAgIGRlZiB0ZXN0X2dvdG8oc2VsZik6CisgICAgICAgIHNlbGYubmF2LmdvdG8oMTAwLCAtMTAwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2Lnhjb3IoKSwgMTAwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2Lnljb3IoKSwgLTEwMCkKKworICAgIGRlZiB0ZXN0X3BvcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5hdi5wb3MoKSwgc2VsZi5uYXYuX3Bvc2l0aW9uKQorICAgICAgICBzZWxmLm5hdi5nb3RvKDEwMCwgLTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5hdi5wb3MoKSwgc2VsZi5uYXYuX3Bvc2l0aW9uKQorCisgICAgZGVmIHRlc3RfbGVmdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5hdi5fb3JpZW50LCAoMS4wLCAwKSkKKyAgICAgICAgc2VsZi5uYXYubGVmdCg5MCkKKyAgICAgICAgc2VsZi5hc3NlcnRWZWN0b3JzQWxtb3N0RXF1YWwoc2VsZi5uYXYuX29yaWVudCwgKDAuMCwgMS4wKSkKKworICAgIGRlZiB0ZXN0X3JpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmF2Ll9vcmllbnQsICgxLjAsIDApKQorICAgICAgICBzZWxmLm5hdi5yaWdodCg5MCkKKyAgICAgICAgc2VsZi5hc3NlcnRWZWN0b3JzQWxtb3N0RXF1YWwoc2VsZi5uYXYuX29yaWVudCwgKDAsIC0xLjApKQorCisgICAgZGVmIHRlc3RfcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYubmF2LmdvdG8oMTAwLCAtMTAwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2Lnhjb3IoKSwgMTAwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2Lnljb3IoKSwgLTEwMCkKKyAgICAgICAgc2VsZi5uYXYucmVzZXQoKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2Lnhjb3IoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLm5hdi55Y29yKCksIDApCisKKyAgICBkZWYgdGVzdF9mb3J3YXJkKHNlbGYpOgorICAgICAgICBzZWxmLm5hdi5mb3J3YXJkKDE1MCkKKyAgICAgICAgZXhwZWN0ZWQgPSBWZWMyRCgxNTAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VmVjdG9yc0FsbW9zdEVxdWFsKHNlbGYubmF2LnBvc2l0aW9uKCksIGV4cGVjdGVkKQorCisgICAgICAgIHNlbGYubmF2LnJlc2V0KCkKKyAgICAgICAgc2VsZi5uYXYubGVmdCg5MCkKKyAgICAgICAgc2VsZi5uYXYuZm9yd2FyZCgxNTApCisgICAgICAgIGV4cGVjdGVkID0gVmVjMkQoMCwgMTUwKQorICAgICAgICBzZWxmLmFzc2VydFZlY3RvcnNBbG1vc3RFcXVhbChzZWxmLm5hdi5wb3NpdGlvbigpLCBleHBlY3RlZCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubmF2LmZvcndhcmQsICdza2xkamZsZHNrJykKKworICAgIGRlZiB0ZXN0X2JhY2t3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5uYXYuYmFjaygyMDApCisgICAgICAgIGV4cGVjdGVkID0gVmVjMkQoLTIwMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRWZWN0b3JzQWxtb3N0RXF1YWwoc2VsZi5uYXYucG9zaXRpb24oKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgc2VsZi5uYXYucmVzZXQoKQorICAgICAgICBzZWxmLm5hdi5yaWdodCg5MCkKKyAgICAgICAgc2VsZi5uYXYuYmFjaygyMDApCisgICAgICAgIGV4cGVjdGVkID0gVmVjMkQoMCwgMjAwKQorICAgICAgICBzZWxmLmFzc2VydFZlY3RvcnNBbG1vc3RFcXVhbChzZWxmLm5hdi5wb3NpdGlvbigpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Rpc3RhbmNlKHNlbGYpOgorICAgICAgICBzZWxmLm5hdi5mb3J3YXJkKDEwMCkKKyAgICAgICAgZXhwZWN0ZWQgPSAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLm5hdi5kaXN0YW5jZShWZWMyRCgwLDApKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9yYWRpYW5zX2FuZF9kZWdyZWVzKHNlbGYpOgorICAgICAgICBzZWxmLm5hdi5sZWZ0KDkwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2LmhlYWRpbmcoKSwgOTApCisgICAgICAgIHNlbGYubmF2LnJhZGlhbnMoKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2LmhlYWRpbmcoKSwgMS41NzA3OTYzMykKKyAgICAgICAgc2VsZi5uYXYuZGVncmVlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZi5uYXYuaGVhZGluZygpLCA5MCkKKworICAgIGRlZiB0ZXN0X3Rvd2FyZHMoc2VsZik6CisKKyAgICAgICAgY29vcmRpbmF0ZXMgPSBbCisgICAgICAgICAgICAjIGNvb3JkaW5hdGVzLCBleHBlY3RlZAorICAgICAgICAgICAgKCgxMDAsIDApLCAwLjApLAorICAgICAgICAgICAgKCgxMDAsIDEwMCksIDQ1LjApLAorICAgICAgICAgICAgKCgwLCAxMDApLCA5MC4wKSwKKyAgICAgICAgICAgICgoLTEwMCwgMTAwKSwgMTM1LjApLAorICAgICAgICAgICAgKCgtMTAwLCAwKSwgMTgwLjApLAorICAgICAgICAgICAgKCgtMTAwLCAtMTAwKSwgMjI1LjApLAorICAgICAgICAgICAgKCgwLCAtMTAwKSwgMjcwLjApLAorICAgICAgICAgICAgKCgxMDAsIC0xMDApLCAzMTUuMCksCisgICAgICAgIF0KKworICAgICAgICBmb3IgKHgsIHkpLCBleHBlY3RlZCBpbiBjb29yZGluYXRlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYXYudG93YXJkcyh4LCB5KSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmF2LnRvd2FyZHMoKHgsIHkpKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmF2LnRvd2FyZHMoVmVjMkQoeCwgeSkpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2hlYWRpbmcoc2VsZik6CisKKyAgICAgICAgc2VsZi5uYXYubGVmdCg5MCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLm5hdi5oZWFkaW5nKCksIDkwKQorICAgICAgICBzZWxmLm5hdi5sZWZ0KDQ1KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2LmhlYWRpbmcoKSwgMTM1KQorICAgICAgICBzZWxmLm5hdi5yaWdodCgxLjYpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZi5uYXYuaGVhZGluZygpLCAxMzMuNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm5hdi5yaWdodCwgJ3Nka2ZqZHNmJykKKyAgICAgICAgc2VsZi5uYXYucmVzZXQoKQorCisgICAgICAgIHJvdGF0aW9ucyA9IFsxMCwgMjAsIDE3MCwgMzAwXQorICAgICAgICByZXN1bHQgPSBzdW0ocm90YXRpb25zKSAlIDM2MAorICAgICAgICBmb3IgbnVtIGluIHJvdGF0aW9uczoKKyAgICAgICAgICAgIHNlbGYubmF2LmxlZnQobnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmF2LmhlYWRpbmcoKSwgcmVzdWx0KQorICAgICAgICBzZWxmLm5hdi5yZXNldCgpCisKKyAgICAgICAgcmVzdWx0ID0gKDM2MC1zdW0ocm90YXRpb25zKSkgJSAzNjAKKyAgICAgICAgZm9yIG51bSBpbiByb3RhdGlvbnM6CisgICAgICAgICAgICBzZWxmLm5hdi5yaWdodChudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYXYuaGVhZGluZygpLCByZXN1bHQpCisgICAgICAgIHNlbGYubmF2LnJlc2V0KCkKKworICAgICAgICByb3RhdGlvbnMgPSBbMTAsIDIwLCAtMTcwLCAzMDAsIC0yMTAsIDM0LjMsIC01MC4yLCAtMTAsIC0yOS45OCwgNTAwXQorICAgICAgICBzdW1fc29fZmFyID0gMAorICAgICAgICBmb3IgbnVtIGluIHJvdGF0aW9uczoKKyAgICAgICAgICAgIGlmIG51bSA8IDA6CisgICAgICAgICAgICAgICAgc2VsZi5uYXYucmlnaHQoYWJzKG51bSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubmF2LmxlZnQobnVtKQorICAgICAgICAgICAgc3VtX3NvX2ZhciArPSBudW0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZi5uYXYuaGVhZGluZygpLCBzdW1fc29fZmFyICUgMzYwKQorCisgICAgZGVmIHRlc3Rfc2V0aGVhZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5uYXYuc2V0aGVhZGluZygxMDIuMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZi5uYXYuaGVhZGluZygpLCAxMDIuMzIpCisgICAgICAgIHNlbGYubmF2LnNldGhlYWRpbmcoLTEyMy4yMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLm5hdi5oZWFkaW5nKCksICgtMTIzLjIzKSAlIDM2MCkKKyAgICAgICAgc2VsZi5uYXYuc2V0aGVhZGluZygtMTAwMC4zNCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLm5hdi5oZWFkaW5nKCksICgtMTAwMC4zNCkgJSAzNjApCisgICAgICAgIHNlbGYubmF2LnNldGhlYWRpbmcoMzAwMDAwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2LmhlYWRpbmcoKSwgMzAwMDAwJTM2MCkKKworICAgIGRlZiB0ZXN0X3Bvc2l0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5uYXYuZm9yd2FyZCgxMDApCisgICAgICAgIHNlbGYubmF2LmxlZnQoOTApCisgICAgICAgIHNlbGYubmF2LmZvcndhcmQoLTIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRWZWN0b3JzQWxtb3N0RXF1YWwoc2VsZi5uYXYucG9zKCksICgxMDAuMCwgLTIwMC4wKSkKKworICAgIGRlZiB0ZXN0X3NldHhfYW5kX3NldHkoc2VsZik6CisgICAgICAgIHNlbGYubmF2LnNldHgoLTEwMjMuMjMzNCkKKyAgICAgICAgc2VsZi5uYXYuc2V0eSgxOTMzMjMuMjM0KQorICAgICAgICBzZWxmLmFzc2VydFZlY3RvcnNBbG1vc3RFcXVhbChzZWxmLm5hdi5wb3MoKSwgKC0xMDIzLjIzMzQsIDE5MzMyMy4yMzQpKQorCisgICAgZGVmIHRlc3RfaG9tZShzZWxmKToKKyAgICAgICAgc2VsZi5uYXYubGVmdCgzMCkKKyAgICAgICAgc2VsZi5uYXYuZm9yd2FyZCgtMTAwMDAwKQorICAgICAgICBzZWxmLm5hdi5ob21lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRWZWN0b3JzQWxtb3N0RXF1YWwoc2VsZi5uYXYucG9zKCksICgwLDApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYubmF2LmhlYWRpbmcoKSwgMCkKKworICAgIGRlZiB0ZXN0X2Rpc3RhbmNlX21ldGhvZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLm5hdi5kaXN0YW5jZSgzMCwgNDApLCA1MCkKKyAgICAgICAgdmVjID0gVmVjMkQoMC4yMiwgLjAwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLm5hdi5kaXN0YW5jZSh2ZWMpLCAwLjIyMDAwMjI3MjcxNTUzMzU1KQorICAgICAgICBhbm90aGVyX3R1cnRsZSA9IHR1cnRsZS5UTmF2aWdhdG9yKCkKKyAgICAgICAgYW5vdGhlcl90dXJ0bGUubGVmdCg5MCkKKyAgICAgICAgYW5vdGhlcl90dXJ0bGUuZm9yd2FyZCgxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLm5hdi5kaXN0YW5jZShhbm90aGVyX3R1cnRsZSksIDEwMDAwKQorCisKK2NsYXNzIFRlc3RUUGVuKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BlbmRvd25fYW5kX3BlbnVwKHNlbGYpOgorCisgICAgICAgIHRwZW4gPSB0dXJ0bGUuVFBlbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRwZW4uaXNkb3duKCkpCisgICAgICAgIHRwZW4ucGVudXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRwZW4uaXNkb3duKCkpCisgICAgICAgIHRwZW4ucGVuZG93bigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cGVuLmlzZG93bigpKQorCisgICAgZGVmIHRlc3Rfc2hvd3R1cnRsZV9oaWRldHVydGxlX2FuZF9pc3Zpc2libGUoc2VsZik6CisKKyAgICAgICAgdHBlbiA9IHR1cnRsZS5UUGVuKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHBlbi5pc3Zpc2libGUoKSkKKyAgICAgICAgdHBlbi5oaWRldHVydGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cGVuLmlzdmlzaWJsZSgpKQorICAgICAgICB0cGVuLnNob3d0dXJ0bGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHBlbi5pc3Zpc2libGUoKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90eXBlY2hlY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF90eXBlY2hlY2tzLnB5CmluZGV4IDE3Y2Q1ZDMuLmEwZTYxN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHlwZWNoZWNrcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3R5cGVjaGVja3MucHkKQEAgLTEsNyArMSw2IEBACiAiIiJVbml0IHRlc3RzIGZvciBfX2luc3RhbmNlY2hlY2tfXyBhbmQgX19zdWJjbGFzc2NoZWNrX18uIiIiCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIAogY2xhc3MgQUJDKHR5cGUpOgpAQCAtNjgsOSArNjcsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoNDIsIChTdWJJbnQsKSksIEZhbHNlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUeXBlQ2hlY2tzVGVzdCkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90eXBlcy5weSBiL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKaW5kZXggODQ5Y2JhOS4uNWU3NDExNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90eXBlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CkBAIC0xLDEyICsxLDE0IEBACiAjIFB5dGhvbiB0ZXN0IHNldCAtLSBwYXJ0IDYsIGJ1aWx0LWluIHR5cGVzCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJ1bl93aXRoX2xvY2FsZQotaW1wb3J0IGNvbGxlY3Rpb25zCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3dpdGhfbG9jYWxlCitpbXBvcnQgY29sbGVjdGlvbnMuYWJjCitpbXBvcnQgaW5zcGVjdAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCi1pbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitpbXBvcnQgd2Vha3JlZgogCiBjbGFzcyBUeXBlc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzQzLDYgKzM0NSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDMgLl9fZm9ybWF0X18sICIsbiIpCiAgICAgICAgICMgY2FuJ3QgaGF2ZSAnLCcgd2l0aCAnYycKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgMyAuX19mb3JtYXRfXywgIixjIikKKyAgICAgICAgIyBjYW4ndCBoYXZlICcjJyB3aXRoICdjJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAzIC5fX2Zvcm1hdF9fLCAiI2MiKQogCiAgICAgICAgICMgZW5zdXJlIHRoYXQgb25seSBpbnQgYW5kIGZsb2F0IHR5cGUgc3BlY2lmaWVycyB3b3JrCiAgICAgICAgIGZvciBmb3JtYXRfc3BlYyBpbiAoW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykrMSldICsKQEAgLTExODYsOSArMTE5MCwzMTggQEAKICAgICAgICAgICAgIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpID49IEZha2VTaW1wbGVOYW1lc3BhY2UoKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVHlwZXNUZXN0cywgTWFwcGluZ1Byb3h5VGVzdHMsIENsYXNzQ3JlYXRpb25UZXN0cywKLSAgICAgICAgICAgICAgICAgU2ltcGxlTmFtZXNwYWNlVGVzdHMpCitjbGFzcyBDb3JvdXRpbmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfd3JvbmdfYXJncyhzZWxmKToKKyAgICAgICAgc2FtcGxlcyA9IFtOb25lLCAxLCBvYmplY3QoKV0KKyAgICAgICAgZm9yIHNhbXBsZSBpbiBzYW1wbGVzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlwZXMuY29yb3V0aW5lLipleHBlY3RzIGEgY2FsbGFibGUnKToKKyAgICAgICAgICAgICAgICB0eXBlcy5jb3JvdXRpbmUoc2FtcGxlKQorCisgICAgZGVmIHRlc3Rfbm9uX2dlbl92YWx1ZXMoc2VsZik6CisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgcmV0dXJuICdzcGFtJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCAnc3BhbScpCisKKyAgICAgICAgY2xhc3MgQXdhaXRhYmxlOgorICAgICAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgYXcgPSBBd2FpdGFibGUoKQorICAgICAgICBAdHlwZXMuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiBhdworICAgICAgICBzZWxmLmFzc2VydElzKGF3LCBmb28oKSkKKworICAgICAgICAjIGRlY29yYXRlIGZvbyBzZWNvbmQgdGltZQorICAgICAgICBmb28gPSB0eXBlcy5jb3JvdXRpbmUoZm9vKQorICAgICAgICBzZWxmLmFzc2VydElzKGF3LCBmb28oKSkKKworICAgIGRlZiB0ZXN0X2FzeW5jX2RlZihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdHlwZXMuY29yb3V0aW5lIHBhc3NlcyAnYXN5bmMgZGVmJyBjb3JvdXRpbmVzCisgICAgICAgICMgd2l0aG91dCBtb2RpZmljYXRpb24KKworICAgICAgICBhc3luYyBkZWYgZm9vKCk6IHBhc3MKKyAgICAgICAgZm9vX2NvZGUgPSBmb28uX19jb2RlX18KKyAgICAgICAgZm9vX2ZsYWdzID0gZm9vLl9fY29kZV9fLmNvX2ZsYWdzCisgICAgICAgIGRlY29yYXRlZF9mb28gPSB0eXBlcy5jb3JvdXRpbmUoZm9vKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbywgZGVjb3JhdGVkX2ZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19jb2RlX18uY29fZmxhZ3MsIGZvb19mbGFncykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkZWNvcmF0ZWRfZm9vLl9fY29kZV9fLCBmb29fY29kZSkKKworICAgICAgICBmb29fY29ybyA9IGZvbygpCisgICAgICAgIGRlZiBiYXIoKTogcmV0dXJuIGZvb19jb3JvCisgICAgICAgIGZvciBfIGluIHJhbmdlKDIpOgorICAgICAgICAgICAgYmFyID0gdHlwZXMuY29yb3V0aW5lKGJhcikKKyAgICAgICAgICAgIGNvcm8gPSBiYXIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmb29fY29ybywgY29ybykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29yby5jcl9jb2RlLmNvX2ZsYWdzLCBmb29fZmxhZ3MpCisgICAgICAgICAgICBjb3JvLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2R1Y2tfY29ybyhzZWxmKToKKyAgICAgICAgY2xhc3MgQ29yb0xpa2U6CisgICAgICAgICAgICBkZWYgc2VuZChzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRocm93KHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6IHJldHVybiBzZWxmCisKKyAgICAgICAgY29ybyA9IENvcm9MaWtlKCkKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICByZXR1cm4gY29ybworICAgICAgICBzZWxmLmFzc2VydElzKGZvbygpLCBjb3JvKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbygpLl9fYXdhaXRfXygpLCBjb3JvKQorCisgICAgZGVmIHRlc3RfZHVja19jb3JvZ2VuKHNlbGYpOgorICAgICAgICBjbGFzcyBDb3JvR2VuTGlrZToKKyAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGhyb3coc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKTogcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKTogcGFzcworCisgICAgICAgIGNvcm8gPSBDb3JvR2VuTGlrZSgpCisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgcmV0dXJuIGNvcm8KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb28oKSwgY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb28oKS5fX2F3YWl0X18oKSwgY29ybykKKworICAgIGRlZiB0ZXN0X2R1Y2tfZ2VuKHNlbGYpOgorICAgICAgICBjbGFzcyBHZW5MaWtlOgorICAgICAgICAgICAgZGVmIHNlbmQoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0aHJvdyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKTogcGFzcworCisgICAgICAgICMgU2V0dXAgZ2VuZXJhdG9yIG1vY2sgb2JqZWN0CisgICAgICAgIGdlbiA9IHVuaXR0ZXN0Lm1vY2suTWFnaWNNb2NrKEdlbkxpa2UpCisgICAgICAgIGdlbi5fX2l0ZXJfXyA9IGxhbWJkYSBnZW46IGdlbgorICAgICAgICBnZW4uX19uYW1lX18gPSAnZ2VuJworICAgICAgICBnZW4uX19xdWFsbmFtZV9fID0gJ3Rlc3QuZ2VuJworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2VuLCBjb2xsZWN0aW9ucy5hYmMuR2VuZXJhdG9yKQorICAgICAgICBzZWxmLmFzc2VydElzKGdlbiwgaXRlcihnZW4pKQorCisgICAgICAgIEB0eXBlcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOiByZXR1cm4gZ2VuCisKKyAgICAgICAgd3JhcHBlciA9IGZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3cmFwcGVyLCB0eXBlcy5fR2VuZXJhdG9yV3JhcHBlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLl9fYXdhaXRfXygpLCB3cmFwcGVyKQorICAgICAgICAjIFdyYXBwZXIgcHJveGllcyBkdWNrIGdlbmVyYXRvcnMgY29tcGxldGVseToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpdGVyKHdyYXBwZXIpLCB3cmFwcGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3cmFwcGVyLCBjb2xsZWN0aW9ucy5hYmMuQ29yb3V0aW5lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod3JhcHBlciwgY29sbGVjdGlvbnMuYWJjLkF3YWl0YWJsZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZXIuX19xdWFsbmFtZV9fLCBnZW4uX19xdWFsbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZXIuX19uYW1lX18sIGdlbi5fX25hbWVfXykKKworICAgICAgICAjIFRlc3QgQXR0cmlidXRlRXJyb3JzCisgICAgICAgIGZvciBuYW1lIGluIHsnZ2lfcnVubmluZycsICdnaV9mcmFtZScsICdnaV9jb2RlJywgJ2dpX3lpZWxkZnJvbScsCisgICAgICAgICAgICAgICAgICAgICAnY3JfcnVubmluZycsICdjcl9mcmFtZScsICdjcl9jb2RlJywgJ2NyX2F3YWl0J306CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBnZXRhdHRyKHdyYXBwZXIsIG5hbWUpCisKKyAgICAgICAgIyBUZXN0IGF0dHJpYnV0ZXMgcGFzcy10aHJvdWdoCisgICAgICAgIGdlbi5naV9ydW5uaW5nID0gb2JqZWN0KCkKKyAgICAgICAgZ2VuLmdpX2ZyYW1lID0gb2JqZWN0KCkKKyAgICAgICAgZ2VuLmdpX2NvZGUgPSBvYmplY3QoKQorICAgICAgICBnZW4uZ2lfeWllbGRmcm9tID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLmdpX3J1bm5pbmcsIGdlbi5naV9ydW5uaW5nKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZXIuZ2lfZnJhbWUsIGdlbi5naV9mcmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLmdpX2NvZGUsIGdlbi5naV9jb2RlKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZXIuZ2lfeWllbGRmcm9tLCBnZW4uZ2lfeWllbGRmcm9tKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZXIuY3JfcnVubmluZywgZ2VuLmdpX3J1bm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3JhcHBlci5jcl9mcmFtZSwgZ2VuLmdpX2ZyYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZXIuY3JfY29kZSwgZ2VuLmdpX2NvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3JhcHBlci5jcl9hd2FpdCwgZ2VuLmdpX3lpZWxkZnJvbSkKKworICAgICAgICB3cmFwcGVyLmNsb3NlKCkKKyAgICAgICAgZ2VuLmNsb3NlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworICAgICAgICB3cmFwcGVyLnNlbmQoMSkKKyAgICAgICAgZ2VuLnNlbmQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSkKKyAgICAgICAgZ2VuLnJlc2V0X21vY2soKQorCisgICAgICAgIG5leHQod3JhcHBlcikKKyAgICAgICAgZ2VuLl9fbmV4dF9fLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKyAgICAgICAgZ2VuLnJlc2V0X21vY2soKQorCisgICAgICAgIHdyYXBwZXIudGhyb3coMSwgMiwgMykKKyAgICAgICAgZ2VuLnRocm93LmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDEsIDIsIDMpCisgICAgICAgIGdlbi5yZXNldF9tb2NrKCkKKworICAgICAgICB3cmFwcGVyLnRocm93KDEsIDIpCisgICAgICAgIGdlbi50aHJvdy5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxLCAyKQorICAgICAgICBnZW4ucmVzZXRfbW9jaygpCisKKyAgICAgICAgd3JhcHBlci50aHJvdygxKQorICAgICAgICBnZW4udGhyb3cuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSkKKyAgICAgICAgZ2VuLnJlc2V0X21vY2soKQorCisgICAgICAgICMgVGVzdCBleGNlcHRpb25zIHByb3BhZ2F0aW9uCisgICAgICAgIGVycm9yID0gRXhjZXB0aW9uKCkKKyAgICAgICAgZ2VuLnRocm93LnNpZGVfZWZmZWN0ID0gZXJyb3IKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JhcHBlci50aHJvdygxKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhleCwgZXJyb3IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3dyYXBwZXIgZGlkIG5vdCBwcm9wYWdhdGUgYW4gZXhjZXB0aW9uJykKKworICAgICAgICAjIFRlc3QgaW52YWxpZCBhcmdzCisgICAgICAgIGdlbi5yZXNldF9tb2NrKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgd3JhcHBlci50aHJvdygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2VuLnRocm93LmNhbGxlZCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgd3JhcHBlci5jbG9zZSgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdlbi5jbG9zZS5jYWxsZWQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHdyYXBwZXIuc2VuZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2VuLnNlbmQuY2FsbGVkKQorCisgICAgICAgICMgVGVzdCB0aGF0IHdlIGRvIG5vdCBkb3VibGUgd3JhcAorICAgICAgICBAdHlwZXMuY29yb3V0aW5lCisgICAgICAgIGRlZiBiYXIoKTogcmV0dXJuIHdyYXBwZXIKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLCBiYXIoKSkKKworICAgICAgICAjIFRlc3Qgd2Vha3JlZnMgc3VwcG9ydAorICAgICAgICByZWYgPSB3ZWFrcmVmLnJlZih3cmFwcGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlZigpLCB3cmFwcGVyKQorCisgICAgZGVmIHRlc3RfZHVja19mdW5jdGlvbmFsX2dlbihzZWxmKToKKyAgICAgICAgY2xhc3MgR2VuZXJhdG9yOgorICAgICAgICAgICAgIiIiRW11bGF0ZXMgdGhlIGZvbGxvd2luZyBnZW5lcmF0b3IgKHZlcnkgY2x1bXN5KToKKworICAgICAgICAgICAgICBkZWYgZ2VuKGZ1dCk6CisgICAgICAgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBmdXQKKyAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKiAyCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdXQpOgorICAgICAgICAgICAgICAgIHNlbGYuX2kgPSAwCisgICAgICAgICAgICAgICAgc2VsZi5fZnV0ID0gZnV0CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZW5kKE5vbmUpCisgICAgICAgICAgICBkZWYgc2VuZChzZWxmLCB2KToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2kgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCB2IGlzIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9mdXQKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbih2ICogMikKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faSA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faSArPSAxCisgICAgICAgICAgICBkZWYgdGhyb3coc2VsZiwgdHAsICpleGMpOgorICAgICAgICAgICAgICAgIHNlbGYuX2kgPSAxMDAKKyAgICAgICAgICAgICAgICBpZiB0cCBpcyBub3QgR2VuZXJhdG9yRXhpdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdHAKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnRocm93KEdlbmVyYXRvckV4aXQpCisKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6IHJldHVybiBHZW5lcmF0b3IoJ3NwYW0nKQorCisgICAgICAgIHdyYXBwZXIgPSBmb28oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod3JhcHBlciwgdHlwZXMuX0dlbmVyYXRvcldyYXBwZXIpCisKKyAgICAgICAgYXN5bmMgZGVmIGNvcm9mdW5jKCk6CisgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm9vKCkgKyAxMDAKKyAgICAgICAgY29ybyA9IGNvcm9mdW5jKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcm8uc2VuZChOb25lKSwgJ3NwYW0nKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb3JvLnNlbmQoMjApCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5hcmdzWzBdLCAxNDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1N0b3BJdGVyYXRpb24gd2FzIGV4cGVjdGVkJykKKworICAgIGRlZiB0ZXN0X2dlbihzZWxmKToKKyAgICAgICAgZGVmIGdlbl9mdW5jKCk6CisgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIDIpCisgICAgICAgIGdlbiA9IGdlbl9mdW5jKCkKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6IHJldHVybiBnZW4KKyAgICAgICAgd3JhcHBlciA9IGZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3cmFwcGVyLCB0eXBlcy5fR2VuZXJhdG9yV3JhcHBlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLl9fYXdhaXRfXygpLCBnZW4pCisKKyAgICAgICAgZm9yIG5hbWUgaW4gKCdfX25hbWVfXycsICdfX3F1YWxuYW1lX18nLCAnZ2lfY29kZScsCisgICAgICAgICAgICAgICAgICAgICAnZ2lfcnVubmluZycsICdnaV9mcmFtZScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKGZvbygpLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihnZW4sIG5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbygpLmNyX2NvZGUsIGdlbi5naV9jb2RlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dCh3cmFwcGVyKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLnNlbmQoTm9uZSksIDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTdG9wSXRlcmF0aW9uLCAnc3BhbScpOgorICAgICAgICAgICAgd3JhcHBlci5zZW5kKCdzcGFtJykKKworICAgICAgICBnZW4gPSBnZW5fZnVuYygpCisgICAgICAgIHdyYXBwZXIgPSBmb28oKQorICAgICAgICB3cmFwcGVyLnNlbmQoTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgJ2hhbScpOgorICAgICAgICAgICAgd3JhcHBlci50aHJvdyhFeGNlcHRpb24sIEV4Y2VwdGlvbignaGFtJykpCisKKyAgICAgICAgIyBkZWNvcmF0ZSBmb28gc2Vjb25kIHRpbWUKKyAgICAgICAgZm9vID0gdHlwZXMuY29yb3V0aW5lKGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb28oKS5fX2F3YWl0X18oKSwgZ2VuKQorCisgICAgZGVmIHRlc3RfcmV0dXJuaW5nX2l0ZXJjb3JvKHNlbGYpOgorICAgICAgICBAdHlwZXMuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgZ2VuY29ybyA9IGdlbigpCisKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICByZXR1cm4gZ2VuY29ybworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vKCksIGdlbmNvcm8pCisKKyAgICAgICAgIyBkZWNvcmF0ZSBmb28gc2Vjb25kIHRpbWUKKyAgICAgICAgZm9vID0gdHlwZXMuY29yb3V0aW5lKGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb28oKSwgZ2VuY29ybykKKworICAgIGRlZiB0ZXN0X2dlbmZ1bmMoc2VsZik6CisgICAgICAgIGRlZiBnZW4oKTogeWllbGQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlcy5jb3JvdXRpbmUoZ2VuKSwgZ2VuKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGVzLmNvcm91dGluZSh0eXBlcy5jb3JvdXRpbmUoZ2VuKSksIGdlbikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2VuLl9fY29kZV9fLmNvX2ZsYWdzICYgaW5zcGVjdC5DT19JVEVSQUJMRV9DT1JPVVRJTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2VuLl9fY29kZV9fLmNvX2ZsYWdzICYgaW5zcGVjdC5DT19DT1JPVVRJTkUpCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnLmdpX2NvZGUuY29fZmxhZ3MgJiBpbnNwZWN0LkNPX0lURVJBQkxFX0NPUk9VVElORSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnLmdpX2NvZGUuY29fZmxhZ3MgJiBpbnNwZWN0LkNPX0NPUk9VVElORSkKKworICAgICAgICBzZWxmLmFzc2VydElzKHR5cGVzLmNvcm91dGluZShnZW4pLCBnZW4pCisKKyAgICBkZWYgdGVzdF93cmFwcGVyX29iamVjdChzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgQHR5cGVzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcmV0dXJuIGdlbigpCisKKyAgICAgICAgd3JhcHBlciA9IGNvcm8oKQorICAgICAgICBzZWxmLmFzc2VydEluKCdHZW5lcmF0b3JXcmFwcGVyJywgcmVwcih3cmFwcGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHdyYXBwZXIpLCBzdHIod3JhcHBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoZGlyKHdyYXBwZXIpKS5pc3N1cGVyc2V0KHsKKyAgICAgICAgICAgICdfX2F3YWl0X18nLCAnX19pdGVyX18nLCAnX19uZXh0X18nLCAnY3JfY29kZScsICdjcl9ydW5uaW5nJywKKyAgICAgICAgICAgICdjcl9mcmFtZScsICdnaV9jb2RlJywgJ2dpX2ZyYW1lJywgJ2dpX3J1bm5pbmcnLCAnc2VuZCcsCisgICAgICAgICAgICAnY2xvc2UnLCAndGhyb3cnfSkpCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90eXBpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3R5cGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y4ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90eXBpbmcucHkKQEAgLTAsMCArMSwxNTkwIEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgcGlja2xlCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlLCBtYWluLCBza2lwVW5sZXNzLCBTa2lwVGVzdAorCitmcm9tIHR5cGluZyBpbXBvcnQgQW55Citmcm9tIHR5cGluZyBpbXBvcnQgVHlwZVZhciwgQW55U3RyCitmcm9tIHR5cGluZyBpbXBvcnQgVCwgS1QsIFZUICAjIE5vdCBpbiBfX2FsbF9fLgorZnJvbSB0eXBpbmcgaW1wb3J0IFVuaW9uLCBPcHRpb25hbAorZnJvbSB0eXBpbmcgaW1wb3J0IFR1cGxlCitmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKK2Zyb20gdHlwaW5nIGltcG9ydCBHZW5lcmljCitmcm9tIHR5cGluZyBpbXBvcnQgY2FzdAorZnJvbSB0eXBpbmcgaW1wb3J0IGdldF90eXBlX2hpbnRzCitmcm9tIHR5cGluZyBpbXBvcnQgbm9fdHlwZV9jaGVjaywgbm9fdHlwZV9jaGVja19kZWNvcmF0b3IKK2Zyb20gdHlwaW5nIGltcG9ydCBUeXBlCitmcm9tIHR5cGluZyBpbXBvcnQgTmV3VHlwZQorZnJvbSB0eXBpbmcgaW1wb3J0IE5hbWVkVHVwbGUKK2Zyb20gdHlwaW5nIGltcG9ydCBJTywgVGV4dElPLCBCaW5hcnlJTworZnJvbSB0eXBpbmcgaW1wb3J0IFBhdHRlcm4sIE1hdGNoCitpbXBvcnQgdHlwaW5nCisKKworY2xhc3MgQmFzZVRlc3RDYXNlKFRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRJc1N1YmNsYXNzKHNlbGYsIGNscywgY2xhc3Nfb3JfdHVwbGUsIG1zZz1Ob25lKToKKyAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoY2xzLCBjbGFzc19vcl90dXBsZSk6CisgICAgICAgICAgICBtZXNzYWdlID0gJyVyIGlzIG5vdCBhIHN1YmNsYXNzIG9mICVyJyAlIChjbHMsIGNsYXNzX29yX3R1cGxlKQorICAgICAgICAgICAgaWYgbXNnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gJyA6ICVzJyAlIG1zZworICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1lc3NhZ2UpCisKKyAgICBkZWYgYXNzZXJ0Tm90SXNTdWJjbGFzcyhzZWxmLCBjbHMsIGNsYXNzX29yX3R1cGxlLCBtc2c9Tm9uZSk6CisgICAgICAgIGlmIGlzc3ViY2xhc3MoY2xzLCBjbGFzc19vcl90dXBsZSk6CisgICAgICAgICAgICBtZXNzYWdlID0gJyVyIGlzIGEgc3ViY2xhc3Mgb2YgJXInICUgKGNscywgY2xhc3Nfb3JfdHVwbGUpCisgICAgICAgICAgICBpZiBtc2cgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSAnIDogJXMnICUgbXNnCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obWVzc2FnZSkKKworCitjbGFzcyBFbXBsb3llZToKKyAgICBwYXNzCisKKworY2xhc3MgTWFuYWdlcihFbXBsb3llZSk6CisgICAgcGFzcworCisKK2NsYXNzIEZvdW5kZXIoRW1wbG95ZWUpOgorICAgIHBhc3MKKworCitjbGFzcyBNYW5hZ2luZ0ZvdW5kZXIoTWFuYWdlciwgRm91bmRlcik6CisgICAgcGFzcworCisKK2NsYXNzIEFueVRlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hbnlfaW5zdGFuY2VfdHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaXNpbnN0YW5jZSg0MiwgQW55KQorCisgICAgZGVmIHRlc3RfYW55X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhFbXBsb3llZSwgQW55KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoaW50LCBBbnkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKE5vbmUpLCBBbnkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhvYmplY3QsIEFueSkpCisKKyAgICBkZWYgdGVzdF9vdGhlcnNfYW55KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQW55LCBFbXBsb3llZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhBbnksIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhBbnksIHR5cGUoTm9uZSkpKQorICAgICAgICAjIEhvd2V2ZXIsIEFueSBpcyBhIHN1YmNsYXNzIG9mIG9iamVjdCAodGhpcyBjYW4ndCBiZSBoZWxwZWQpLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhBbnksIG9iamVjdCkpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoQW55KSwgJ3R5cGluZy5BbnknKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpc3N1YmNsYXNzKDQyLCBBbnkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEFueVtpbnRdICAjIEFueSBpcyBub3QgYSBnZW5lcmljIHR5cGUuCisKKyAgICBkZWYgdGVzdF9jYW5ub3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEEoQW55KToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9jYW5ub3RfaW5zdGFudGlhdGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEFueSgpCisKKyAgICBkZWYgdGVzdF9jYW5ub3Rfc3Vic2NyaXB0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBBbnlbaW50XQorCisgICAgZGVmIHRlc3RfYW55X2lzX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIEFueSBzaG91bGQgYmUgY29uc2lkZXJlZCBhIHN1YmNsYXNzIG9mIGV2ZXJ5dGhpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhBbnksIEFueSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKEFueSwgdHlwaW5nLkxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhBbnksIHR5cGluZy5MaXN0W2ludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhBbnksIHR5cGluZy5MaXN0W1RdKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQW55LCB0eXBpbmcuTWFwcGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKEFueSwgdHlwaW5nLk1hcHBpbmdbc3RyLCBpbnRdKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQW55LCB0eXBpbmcuTWFwcGluZ1tLVCwgVlRdKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQW55LCBHZW5lcmljKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQW55LCBHZW5lcmljW1RdKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQW55LCBHZW5lcmljW0tULCBWVF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhBbnksIEFueVN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKEFueSwgVW5pb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhBbnksIFVuaW9uW2ludCwgc3RyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKEFueSwgdHlwaW5nLk1hdGNoKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQW55LCB0eXBpbmcuTWF0Y2hbc3RyXSkKKyAgICAgICAgIyBUaGVzZSBleHByZXNzaW9ucyBtdXN0IHNpbXBseSBub3QgZmFpbC4KKyAgICAgICAgdHlwaW5nLk1hdGNoW0FueV0KKyAgICAgICAgdHlwaW5nLlBhdHRlcm5bQW55XQorICAgICAgICB0eXBpbmcuSU9bQW55XQorCisKK2NsYXNzIFR5cGVWYXJUZXN0cyhCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWNfcGxhaW4oc2VsZik6CisgICAgICAgIFQgPSBUeXBlVmFyKCdUJykKKyAgICAgICAgIyBFdmVyeSBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIFQuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhpbnQsIFQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhzdHIsIFQpCisgICAgICAgICMgVCBlcXVhbHMgaXRzZWxmLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFQsIFQpCisgICAgICAgICMgVCBpcyBhIHN1YmNsYXNzIG9mIGl0c2VsZi4KKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKFQsIFQpCisgICAgICAgICMgVCBpcyBhbiBpbnN0YW5jZSBvZiBUeXBlVmFyCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShULCBUeXBlVmFyKQorCisgICAgZGVmIHRlc3RfdHlwZXZhcl9pbnN0YW5jZV90eXBlX2Vycm9yKHNlbGYpOgorICAgICAgICBUID0gVHlwZVZhcignVCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGlzaW5zdGFuY2UoNDIsIFQpCisKKyAgICBkZWYgdGVzdF9iYXNpY19jb25zdHJhaW5lZChzZWxmKToKKyAgICAgICAgQSA9IFR5cGVWYXIoJ0EnLCBzdHIsIGJ5dGVzKQorICAgICAgICAjIE9ubHkgc3RyIGFuZCBieXRlcyBhcmUgc3ViY2xhc3NlcyBvZiBBLgorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3Moc3RyLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoYnl0ZXMsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhpbnQsIEEpCisgICAgICAgICMgQSBlcXVhbHMgaXRzZWxmLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEEsIEEpCisgICAgICAgICMgQSBpcyBhIHN1YmNsYXNzIG9mIGl0c2VsZi4KKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKEEsIEEpCisKKyAgICBkZWYgdGVzdF9jb25zdHJhaW5lZF9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgWCA9IFR5cGVWYXIoJ1gnLCBpbnQpCisgICAgICAgICAgICBYCisKKyAgICBkZWYgdGVzdF91bmlvbl91bmlxdWUoc2VsZik6CisgICAgICAgIFggPSBUeXBlVmFyKCdYJykKKyAgICAgICAgWSA9IFR5cGVWYXIoJ1knKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFgsIFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVW5pb25bWF0sIFgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoVW5pb25bWF0sIFVuaW9uW1gsIFldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVuaW9uW1gsIFhdLCBYKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFVuaW9uW1gsIGludF0sIFVuaW9uW1hdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFVuaW9uW1gsIGludF0sIFVuaW9uW2ludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVW5pb25bWCwgaW50XS5fX3VuaW9uX3BhcmFtc19fLCAoWCwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVbmlvbltYLCBpbnRdLl9fdW5pb25fc2V0X3BhcmFtc19fLCB7WCwgaW50fSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX2NvbnN0cmFpbmVkKHNlbGYpOgorICAgICAgICBBID0gVHlwZVZhcignQScsIHN0ciwgYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoVW5pb25bQSwgc3RyXSwgVW5pb25bQV0pCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoVCksICd+VCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihLVCksICd+S1QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoVlQpLCAnflZUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKEFueVN0ciksICd+QW55U3RyJykKKyAgICAgICAgVF9jbyA9IFR5cGVWYXIoJ1RfY28nLCBjb3ZhcmlhbnQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKFRfY28pLCAnK1RfY28nKQorICAgICAgICBUX2NvbnRyYSA9IFR5cGVWYXIoJ1RfY29udHJhJywgY29udHJhdmFyaWFudD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoVF9jb250cmEpLCAnLVRfY29udHJhJykKKworICAgIGRlZiB0ZXN0X25vX3JlZGVmaW5pdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChUeXBlVmFyKCdUJyksIFR5cGVWYXIoJ1QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChUeXBlVmFyKCdUJywgaW50LCBzdHIpLCBUeXBlVmFyKCdUJywgaW50LCBzdHIpKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfYXNfdW5pb25zKHNlbGYpOgorICAgICAgICAjIE5vbmUgb2YgdGhlc2UgYXJlIHRydWUgLS0gZWFjaCB0eXBlIHZhciBpcyBpdHMgb3duIHdvcmxkLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoVHlwZVZhcignVCcsIGludCwgc3RyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVWYXIoJ1QnLCBpbnQsIHN0cikpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoVHlwZVZhcignVCcsIGludCwgZmxvYXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZVZhcignVCcsIGludCwgZmxvYXQsIHN0cikpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoVHlwZVZhcignVCcsIGludCwgc3RyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVWYXIoJ1QnLCBzdHIsIGludCkpKQorICAgICAgICBBID0gVHlwZVZhcignQScsIGludCwgc3RyKQorICAgICAgICBCID0gVHlwZVZhcignQicsIGludCwgc3RyLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEEsIEIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQiwgQSkpCisKKyAgICBkZWYgdGVzdF9jYW5ub3Rfc3ViY2xhc3NfdmFycyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgVihUeXBlVmFyKCdUJykpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Nhbm5vdF9zdWJjbGFzc192YXJfaXRzZWxmKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBWKFR5cGVWYXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Nhbm5vdF9pbnN0YW50aWF0ZV92YXJzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBUeXBlVmFyKCdBJykoKQorCisgICAgZGVmIHRlc3RfYm91bmQoc2VsZik6CisgICAgICAgIFggPSBUeXBlVmFyKCdYJywgYm91bmQ9RW1wbG95ZWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhFbXBsb3llZSwgWCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKE1hbmFnZXIsIFgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhpbnQsIFgpCisKKyAgICBkZWYgdGVzdF9ib3VuZF9lcnJvcnMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFR5cGVWYXIoJ1gnLCBib3VuZD00MikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgVHlwZVZhcignWCcsIHN0ciwgZmxvYXQsIGJvdW5kPUVtcGxveWVlKQorCisKK2NsYXNzIFVuaW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgdSA9IFVuaW9uW2ludCwgZmxvYXRdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodSwgVW5pb24pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGludCwgdSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGZsb2F0LCB1KSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX2FueShzZWxmKToKKyAgICAgICAgdSA9IFVuaW9uW0FueV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBBbnkpCisgICAgICAgIHUgPSBVbmlvbltpbnQsIEFueV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBBbnkpCisgICAgICAgIHUgPSBVbmlvbltBbnksIGludF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBBbnkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9vYmplY3Qoc2VsZik6CisgICAgICAgIHUgPSBVbmlvbltvYmplY3RdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgb2JqZWN0KQorICAgICAgICB1ID0gVW5pb25baW50LCBvYmplY3RdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgb2JqZWN0KQorICAgICAgICB1ID0gVW5pb25bb2JqZWN0LCBpbnRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgb2JqZWN0KQorCisgICAgZGVmIHRlc3RfdW5pb25fYW55X29iamVjdChzZWxmKToKKyAgICAgICAgdSA9IFVuaW9uW29iamVjdCwgQW55XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIEFueSkKKyAgICAgICAgdSA9IFVuaW9uW0FueSwgb2JqZWN0XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIEFueSkKKworICAgIGRlZiB0ZXN0X3Vub3JkZXJlZChzZWxmKToKKyAgICAgICAgdTEgPSBVbmlvbltpbnQsIGZsb2F0XQorICAgICAgICB1MiA9IFVuaW9uW2Zsb2F0LCBpbnRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTEsIHUyKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHUgPSBVbmlvbltpbnQsIEVtcGxveWVlXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhNYW5hZ2VyLCB1KSkKKworICAgIGRlZiB0ZXN0X3NlbGZfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKFVuaW9uW0tULCBWVF0sIFVuaW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKFVuaW9uLCBVbmlvbltLVCwgVlRdKSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICB1ID0gVW5pb25baW50LCBFbXBsb3llZV0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTWFuYWdpbmdGb3VuZGVyLCB1KSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9jbGFzc19kaXNhcHBlYXJzKHNlbGYpOgorICAgICAgICB0ID0gVW5pb25bRW1wbG95ZWVdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgRW1wbG95ZWUpCisKKyAgICBkZWYgdGVzdF9iYXNlX2NsYXNzX2Rpc2FwcGVhcnMoc2VsZik6CisgICAgICAgIHUgPSBVbmlvbltFbXBsb3llZSwgTWFuYWdlciwgaW50XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIFVuaW9uW2ludCwgRW1wbG95ZWVdKQorICAgICAgICB1ID0gVW5pb25bTWFuYWdlciwgaW50LCBFbXBsb3llZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBVbmlvbltpbnQsIEVtcGxveWVlXSkKKyAgICAgICAgdSA9IFVuaW9uW0VtcGxveWVlLCBNYW5hZ2VyXQorICAgICAgICBzZWxmLmFzc2VydElzKHUsIEVtcGxveWVlKQorCisgICAgZGVmIHRlc3Rfd2VpcmRfc3ViY2xhc3NlcyhzZWxmKToKKyAgICAgICAgdSA9IFVuaW9uW0VtcGxveWVlLCBpbnQsIGZsb2F0XQorICAgICAgICB2ID0gVW5pb25baW50LCBmbG9hdF0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModiwgdSkpCisgICAgICAgIHcgPSBVbmlvbltpbnQsIE1hbmFnZXJdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHcsIHUpKQorCisgICAgZGVmIHRlc3RfdW5pb25fdW5pb24oc2VsZik6CisgICAgICAgIHUgPSBVbmlvbltpbnQsIGZsb2F0XQorICAgICAgICB2ID0gVW5pb25bdSwgRW1wbG95ZWVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgVW5pb25baW50LCBmbG9hdCwgRW1wbG95ZWVdKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKFVuaW9uKSwgJ3R5cGluZy5VbmlvbicpCisgICAgICAgIHUgPSBVbmlvbltFbXBsb3llZSwgaW50XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSksICd0eXBpbmcuVW5pb25bJXMuRW1wbG95ZWUsIGludF0nICUgX19uYW1lX18pCisgICAgICAgIHUgPSBVbmlvbltpbnQsIEVtcGxveWVlXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSksICd0eXBpbmcuVW5pb25baW50LCAlcy5FbXBsb3llZV0nICUgX19uYW1lX18pCisKKyAgICBkZWYgdGVzdF9jYW5ub3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEMoVW5pb24pOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQyhVbmlvbltpbnQsIHN0cl0pOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Nhbm5vdF9pbnN0YW50aWF0ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgVW5pb24oKQorICAgICAgICB1ID0gVW5pb25baW50LCBmbG9hdF0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdSgpCisKKyAgICBkZWYgdGVzdF9vcHRpb25hbChzZWxmKToKKyAgICAgICAgbyA9IE9wdGlvbmFsW2ludF0KKyAgICAgICAgdSA9IFVuaW9uW2ludCwgTm9uZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLCB1KQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFVuaW9uWygpXQorCisgICAgZGVmIHRlc3RfaXNzdWJjbGFzc191bmlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKFVuaW9uW2ludCwgc3RyXSwgVW5pb24pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhpbnQsIFVuaW9uKQorCisgICAgZGVmIHRlc3RfdW5pb25faW5zdGFuY2VfdHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaXNpbnN0YW5jZSg0MiwgVW5pb25baW50LCBzdHJdKQorCisgICAgZGVmIHRlc3RfdW5pb25fc3RyX3BhdHRlcm4oc2VsZik6CisgICAgICAgICMgU2hvdWxkbid0IGNyYXNoOyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI1MzkwCisgICAgICAgIEEgPSBVbmlvbltzdHIsIFBhdHRlcm5dCisgICAgICAgIEEKKworICAgIGRlZiB0ZXN0X2V0cmVlKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHl0aG9uL3R5cGluZy9pc3N1ZXMvMjI5CisgICAgICAgICMgKE9ubHkgcmVsZXZhbnQgZm9yIFB5dGhvbiAyLikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlIGltcG9ydCBFbGVtZW50CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFNraXBUZXN0KCJjRWxlbWVudFRyZWUgbm90IGZvdW5kIikKKyAgICAgICAgVW5pb25bRWxlbWVudCwgc3RyXSAgIyBTaG91bGRuJ3QgY3Jhc2gKKworICAgICAgICBkZWYgRWxlbSgqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gRWxlbWVudCgqYXJncykKKworICAgICAgICBVbmlvbltFbGVtLCBzdHJdICAjIE5vciBzaG91bGQgdGhpcworCisKK2NsYXNzIFR5cGVWYXJVbmlvblRlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zaW1wbGVyKHNlbGYpOgorICAgICAgICBBID0gVHlwZVZhcignQScsIGludCwgc3RyLCBmbG9hdCkKKyAgICAgICAgQiA9IFR5cGVWYXIoJ0InLCBpbnQsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKEEsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhCLCBCKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3MoQiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKEEsIFVuaW9uW2ludCwgc3RyLCBmbG9hdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhVbmlvbltpbnQsIHN0ciwgZmxvYXRdLCBBKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3MoVW5pb25baW50LCBzdHJdLCBCKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQiwgVW5pb25baW50LCBzdHJdKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3MoQSwgQikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc1N1YmNsYXNzKFVuaW9uW2ludCwgc3RyLCBmbG9hdF0sIEIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhBLCBVbmlvbltpbnQsIHN0cl0pCisKKyAgICBkZWYgdGVzdF92YXJfdW5pb25fc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKFQsIFVuaW9uW2ludCwgVF0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhLVCwgVW5pb25bS1QsIFZUXSkpCisKKyAgICBkZWYgdGVzdF92YXJfdW5pb24oc2VsZik6CisgICAgICAgIFRVID0gVHlwZVZhcignVFUnLCBVbmlvbltpbnQsIGZsb2F0XSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKGludCwgVFUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhmbG9hdCwgVFUpCisKKworY2xhc3MgVHVwbGVUZXN0cyhCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhUdXBsZVtpbnQsIHN0cl0sIFR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoVHVwbGVbaW50LCBzdHJdLCBUdXBsZVtpbnQsIHN0cl0pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoaW50LCBUdXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhUdXBsZVtmbG9hdCwgc3RyXSwgVHVwbGVbaW50LCBzdHJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKFR1cGxlW2ludCwgc3RyLCBpbnRdLCBUdXBsZVtpbnQsIHN0cl0pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoVHVwbGVbaW50LCBzdHJdLCBUdXBsZVtpbnQsIHN0ciwgaW50XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR1cGxlLCBUdXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhUdXBsZSwgdHVwbGUpKSAgIyBDYW4ndCBoYXZlIGl0IGJvdGggd2F5cy4KKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFR1cGxlW2ludF0sIFR1cGxlW2ludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHVwbGVbaW50LCAuLi5dLCBUdXBsZVtpbnQsIC4uLl0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoVHVwbGVbaW50XSwgVHVwbGVbaW50LCBpbnRdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFR1cGxlW2ludF0sIFR1cGxlW2ludCwgLi4uXSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVR1cGxlKHR1cGxlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTXlUdXBsZSwgVHVwbGUpKQorCisgICAgZGVmIHRlc3RfdHVwbGVfaW5zdGFuY2VfdHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaXNpbnN0YW5jZSgoMCwgMCksIFR1cGxlW2ludCwgaW50XSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaXNpbnN0YW5jZSgoMCwgMCksIFR1cGxlKQorCisgICAgZGVmIHRlc3RfdHVwbGVfZWxsaXBzaXNfc3ViY2xhc3Moc2VsZik6CisKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDKEIpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhUdXBsZVtCXSwgVHVwbGVbQiwgLi4uXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKFR1cGxlW0MsIC4uLl0sIFR1cGxlW0IsIC4uLl0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhUdXBsZVtDLCAuLi5dLCBUdXBsZVtCXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc1N1YmNsYXNzKFR1cGxlW0NdLCBUdXBsZVtCLCAuLi5dKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKFR1cGxlKSwgJ3R5cGluZy5UdXBsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihUdXBsZVsoKV0pLCAndHlwaW5nLlR1cGxlWygpXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihUdXBsZVtpbnQsIGZsb2F0XSksICd0eXBpbmcuVHVwbGVbaW50LCBmbG9hdF0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoVHVwbGVbaW50LCAuLi5dKSwgJ3R5cGluZy5UdXBsZVtpbnQsIC4uLl0nKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpc3N1YmNsYXNzKDQyLCBUdXBsZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaXNzdWJjbGFzcyg0MiwgVHVwbGVbaW50XSkKKworCitjbGFzcyBDYWxsYWJsZVRlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zZWxmX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDYWxsYWJsZVtbaW50XSwgaW50XSwgQ2FsbGFibGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQ2FsbGFibGUsIENhbGxhYmxlW1tpbnRdLCBpbnRdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQ2FsbGFibGVbW2ludF0sIGludF0sIENhbGxhYmxlW1tpbnRdLCBpbnRdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKENhbGxhYmxlW1tFbXBsb3llZV0sIGludF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsYWJsZVtbTWFuYWdlcl0sIGludF0pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQ2FsbGFibGVbW01hbmFnZXJdLCBpbnRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGFibGVbW0VtcGxveWVlXSwgaW50XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDYWxsYWJsZVtbaW50XSwgRW1wbG95ZWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbGFibGVbW2ludF0sIE1hbmFnZXJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKENhbGxhYmxlW1tpbnRdLCBNYW5hZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxhYmxlW1tpbnRdLCBFbXBsb3llZV0pKQorCisgICAgZGVmIHRlc3RfZXFfaGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDYWxsYWJsZVtbaW50XSwgaW50XSwgQ2FsbGFibGVbW2ludF0sIGludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHtDYWxsYWJsZVtbaW50XSwgaW50XSwgQ2FsbGFibGVbW2ludF0sIGludF19KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChDYWxsYWJsZVtbaW50XSwgaW50XSwgQ2FsbGFibGVbW2ludF0sIHN0cl0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoQ2FsbGFibGVbW2ludF0sIGludF0sIENhbGxhYmxlW1tzdHJdLCBpbnRdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKENhbGxhYmxlW1tpbnRdLCBpbnRdLCBDYWxsYWJsZVtbaW50LCBpbnRdLCBpbnRdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKENhbGxhYmxlW1tpbnRdLCBpbnRdLCBDYWxsYWJsZVtbXSwgaW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChDYWxsYWJsZVtbaW50XSwgaW50XSwgQ2FsbGFibGUpCisKKyAgICBkZWYgdGVzdF9jYW5ub3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKworICAgICAgICAgICAgY2xhc3MgQyhDYWxsYWJsZSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKworICAgICAgICAgICAgY2xhc3MgQyhDYWxsYWJsZVtbaW50XSwgaW50XSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfY2Fubm90X2luc3RhbnRpYXRlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBDYWxsYWJsZSgpCisgICAgICAgIGMgPSBDYWxsYWJsZVtbaW50XSwgc3RyXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjKCkKKworICAgIGRlZiB0ZXN0X2NhbGxhYmxlX2luc3RhbmNlX3dvcmtzKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgQ2FsbGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShOb25lLCBDYWxsYWJsZSkKKworICAgIGRlZiB0ZXN0X2NhbGxhYmxlX2luc3RhbmNlX3R5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBDYWxsYWJsZVtbXSwgTm9uZV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBDYWxsYWJsZVtbXSwgQW55XSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKE5vbmUsIENhbGxhYmxlW1tdLCBOb25lXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKE5vbmUsIENhbGxhYmxlW1tdLCBBbnldKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgY3QwID0gQ2FsbGFibGVbW10sIGJvb2xdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjdDApLCAndHlwaW5nLkNhbGxhYmxlW1tdLCBib29sXScpCisgICAgICAgIGN0MiA9IENhbGxhYmxlW1tzdHIsIGZsb2F0XSwgaW50XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY3QyKSwgJ3R5cGluZy5DYWxsYWJsZVtbc3RyLCBmbG9hdF0sIGludF0nKQorICAgICAgICBjdHYgPSBDYWxsYWJsZVsuLi4sIHN0cl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGN0diksICd0eXBpbmcuQ2FsbGFibGVbLi4uLCBzdHJdJykKKworICAgIGRlZiB0ZXN0X2NhbGxhYmxlX3dpdGhfZWxsaXBzaXMoc2VsZik6CisKKyAgICAgICAgZGVmIGZvbyhhOiBDYWxsYWJsZVsuLi4sIFRdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF90eXBlX2hpbnRzKGZvbywgZ2xvYmFscygpLCBsb2NhbHMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogQ2FsbGFibGVbLi4uLCBUXX0pCisKKworWEsgPSBUeXBlVmFyKCdYSycsIHN0ciwgYnl0ZXMpCitYViA9IFR5cGVWYXIoJ1hWJykKKworCitjbGFzcyBTaW1wbGVNYXBwaW5nKEdlbmVyaWNbWEssIFhWXSk6CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5OiBYSykgLT4gWFY6CisgICAgICAgIC4uLgorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleTogWEssIHZhbHVlOiBYVik6CisgICAgICAgIC4uLgorCisgICAgZGVmIGdldChzZWxmLCBrZXk6IFhLLCBkZWZhdWx0OiBYViA9IE5vbmUpIC0+IFhWOgorICAgICAgICAuLi4KKworCitjbGFzcyBNeVNpbXBsZU1hcHBpbmcoU2ltcGxlTWFwcGluZ1tYSywgWFZdKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdG9yZSA9IHt9CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5OiBzdHIpOgorICAgICAgICByZXR1cm4gc2VsZi5zdG9yZVtrZXldCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5OiBzdHIsIHZhbHVlKToKKyAgICAgICAgc2VsZi5zdG9yZVtrZXldID0gdmFsdWUKKworICAgIGRlZiBnZXQoc2VsZiwga2V5OiBzdHIsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN0b3JlW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworCitjbGFzcyBQcm90b2NvbFRlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdXBwb3J0c19pbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhpbnQsIHR5cGluZy5TdXBwb3J0c0ludCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc1N1YmNsYXNzKHN0ciwgdHlwaW5nLlN1cHBvcnRzSW50KQorCisgICAgZGVmIHRlc3Rfc3VwcG9ydHNfZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhmbG9hdCwgdHlwaW5nLlN1cHBvcnRzRmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhzdHIsIHR5cGluZy5TdXBwb3J0c0Zsb2F0KQorCisgICAgZGVmIHRlc3Rfc3VwcG9ydHNfY29tcGxleChzZWxmKToKKworICAgICAgICAjIE5vdGU6IGNvbXBsZXggaXRzZWxmIGRvZXNuJ3QgaGF2ZSBfX2NvbXBsZXhfXy4KKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMGoKKworICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQywgdHlwaW5nLlN1cHBvcnRzQ29tcGxleCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc1N1YmNsYXNzKHN0ciwgdHlwaW5nLlN1cHBvcnRzQ29tcGxleCkKKworICAgIGRlZiB0ZXN0X3N1cHBvcnRzX2J5dGVzKHNlbGYpOgorCisgICAgICAgICMgTm90ZTogYnl0ZXMgaXRzZWxmIGRvZXNuJ3QgaGF2ZSBfX2J5dGVzX18uCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBiJycKKworICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoQiwgdHlwaW5nLlN1cHBvcnRzQnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhzdHIsIHR5cGluZy5TdXBwb3J0c0J5dGVzKQorCisgICAgZGVmIHRlc3Rfc3VwcG9ydHNfYWJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoZmxvYXQsIHR5cGluZy5TdXBwb3J0c0FicykKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKGludCwgdHlwaW5nLlN1cHBvcnRzQWJzKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3Moc3RyLCB0eXBpbmcuU3VwcG9ydHNBYnMpCisKKyAgICBkZWYgdGVzdF9zdXBwb3J0c19yb3VuZChzZWxmKToKKyAgICAgICAgaXNzdWJjbGFzcyhmbG9hdCwgdHlwaW5nLlN1cHBvcnRzUm91bmQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhmbG9hdCwgdHlwaW5nLlN1cHBvcnRzUm91bmQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhpbnQsIHR5cGluZy5TdXBwb3J0c1JvdW5kKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3Moc3RyLCB0eXBpbmcuU3VwcG9ydHNSb3VuZCkKKworICAgIGRlZiB0ZXN0X3JldmVyc2libGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhsaXN0LCB0eXBpbmcuUmV2ZXJzaWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc1N1YmNsYXNzKGludCwgdHlwaW5nLlJldmVyc2libGUpCisKKyAgICBkZWYgdGVzdF9wcm90b2NvbF9pbnN0YW5jZV90eXBlX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpc2luc3RhbmNlKDAsIHR5cGluZy5TdXBwb3J0c0FicykKKworCitjbGFzcyBHZW5lcmljVGVzdHMoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgWCA9IFNpbXBsZU1hcHBpbmdbc3RyLCBBbnldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5fX3BhcmFtZXRlcnNfXywgKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFhbc3RyXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBYW3N0ciwgc3RyXQorICAgICAgICBZID0gU2ltcGxlTWFwcGluZ1tYSywgc3RyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuX19wYXJhbWV0ZXJzX18sIChYSywpKQorICAgICAgICBZW3N0cl0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgWVtzdHIsIHN0cl0KKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIFQgPSBUeXBlVmFyKCdUJykKKyAgICAgICAgUyA9IFR5cGVWYXIoJ1MnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBHZW5lcmljW1QsIFRdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEdlbmVyaWNbVCwgUywgVF0KKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihTaW1wbGVNYXBwaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX25hbWVfXyArICcuJyArICdTaW1wbGVNYXBwaW5nPH5YSywgflhWPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihNeVNpbXBsZU1hcHBpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmFtZV9fICsgJy4nICsgJ015U2ltcGxlTWFwcGluZzx+WEssIH5YVj4nKQorCisgICAgZGVmIHRlc3RfY2hhaW5fcmVwcihzZWxmKToKKyAgICAgICAgVCA9IFR5cGVWYXIoJ1QnKQorICAgICAgICBTID0gVHlwZVZhcignUycpCisKKyAgICAgICAgY2xhc3MgQyhHZW5lcmljW1RdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBYID0gQ1tUdXBsZVtTLCBUXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLCBDW1R1cGxlW1MsIFRdXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChYLCBDW1R1cGxlW1QsIFNdXSkKKworICAgICAgICBZID0gWFtULCBpbnRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWSwgWFtULCBpbnRdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFksIFhbUywgaW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChZLCBYW1QsIHN0cl0pCisKKyAgICAgICAgWiA9IFlbc3RyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFosIFlbc3RyXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChaLCBZW2ludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoWiwgWVtUXSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKFopLmVuZHN3aXRoKAorICAgICAgICAgICAgJy5DPH5UPlt0eXBpbmcuVHVwbGVbflMsIH5UXV08flMsIH5UPlt+VCwgaW50XTx+VD5bc3RyXScpKQorCisgICAgZGVmIHRlc3RfZGljdChzZWxmKToKKyAgICAgICAgVCA9IFR5cGVWYXIoJ1QnKQorCisgICAgICAgIGNsYXNzIEIoR2VuZXJpY1tUXSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYiA9IEIoKQorICAgICAgICBiLmZvbyA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2RpY3RfXywgeydmb28nOiA0Mn0pCisKKyAgICAgICAgY2xhc3MgQyhCW2ludF0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgYy5iYXIgPSAnYWJjJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX19kaWN0X18sIHsnYmFyJzogJ2FiYyd9KQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBnbG9iYWwgQyAgIyBwaWNrbGUgd2FudHMgdG8gcmVmZXJlbmNlIHRoZSBjbGFzcyBieSBuYW1lCisgICAgICAgIFQgPSBUeXBlVmFyKCdUJykKKworICAgICAgICBjbGFzcyBCKEdlbmVyaWNbVF0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEMoQltpbnRdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjID0gQygpCisgICAgICAgIGMuZm9vID0gNDIKKyAgICAgICAgYy5iYXIgPSAnYWJjJworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHogPSBwaWNrbGUuZHVtcHMoYywgcHJvdG8pCisgICAgICAgICAgICB4ID0gcGlja2xlLmxvYWRzKHopCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vLCA0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5iYXIsICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB7J2Zvbyc6IDQyLCAnYmFyJzogJ2FiYyd9KQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBCID0gU2ltcGxlTWFwcGluZ1tYSywgQW55XQorCisgICAgICAgICAgICBjbGFzcyBDKEdlbmVyaWNbQl0pOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JlcHJfMihzZWxmKToKKyAgICAgICAgUFkzMiA9IHN5cy52ZXJzaW9uX2luZm9bOjJdIDwgKDMsIDMpCisKKyAgICAgICAgY2xhc3MgQyhHZW5lcmljW1RdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19tb2R1bGVfXywgX19uYW1lX18pCisgICAgICAgIGlmIG5vdCBQWTMyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlbmVyaWNUZXN0cy50ZXN0X3JlcHJfMi48bG9jYWxzPi5DJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKEMpLnNwbGl0KCcuJylbLTFdLCAnQzx+VD4nKQorICAgICAgICBYID0gQ1tpbnRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5fX21vZHVsZV9fLCBfX25hbWVfXykKKyAgICAgICAgaWYgbm90IFBZMzI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguX19xdWFsbmFtZV9fLCAnQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihYKS5zcGxpdCgnLicpWy0xXSwgJ0M8flQ+W2ludF0nKQorCisgICAgICAgIGNsYXNzIFkoQ1tpbnRdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuX19tb2R1bGVfXywgX19uYW1lX18pCisgICAgICAgIGlmIG5vdCBQWTMyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLl9fcXVhbG5hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlbmVyaWNUZXN0cy50ZXN0X3JlcHJfMi48bG9jYWxzPi5ZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKFkpLnNwbGl0KCcuJylbLTFdLCAnWScpCisKKyAgICBkZWYgdGVzdF9lcV8xKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdlbmVyaWMsIEdlbmVyaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoR2VuZXJpY1tUXSwgR2VuZXJpY1tUXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChHZW5lcmljW0tUXSwgR2VuZXJpY1tWVF0pCisKKyAgICBkZWYgdGVzdF9lcV8yKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEEoR2VuZXJpY1tUXSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQihHZW5lcmljW1RdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEEsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoQSwgQikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBW1RdLCBBW1RdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKEFbVF0sIEJbVF0pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9pbmhlcml0YW5jZShzZWxmKToKKworICAgICAgICBjbGFzcyBBKEdlbmVyaWNbVCwgVlRdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBCKEdlbmVyaWNbS1QsIFRdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDKEFbVCwgVlRdLCBHZW5lcmljW1ZULCBULCBLVF0sIEJbS1QsIFRdKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19wYXJhbWV0ZXJzX18sIChWVCwgVCwgS1QpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgorCisgICAgICAgIEcgPSBHZW5lcmljCisKKyAgICAgICAgY2xhc3MgVmlzaXRvcihHW1RdKToKKworICAgICAgICAgICAgYSA9IE5vbmUKKworICAgICAgICAgICAgZGVmIHNldChzZWxmLCBhOiBUKToKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisKKyAgICAgICAgICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYQorCisgICAgICAgICAgICBkZWYgdmlzaXQoc2VsZikgLT4gVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5hCisKKyAgICAgICAgViA9IFZpc2l0b3JbdHlwaW5nLkxpc3RbaW50XV0KKworICAgICAgICBjbGFzcyBJbnRMaXN0VmlzaXRvcihWKToKKworICAgICAgICAgICAgZGVmIGFwcGVuZChzZWxmLCB4OiBpbnQpOgorICAgICAgICAgICAgICAgIHNlbGYuYS5hcHBlbmQoeCkKKworICAgICAgICBhID0gSW50TGlzdFZpc2l0b3IoKQorICAgICAgICBhLnNldChbXSkKKyAgICAgICAgYS5hcHBlbmQoMSkKKyAgICAgICAgYS5hcHBlbmQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXQoKSwgWzEsIDQyXSkKKworICAgIGRlZiB0ZXN0X3R5cGVfZXJhc3VyZShzZWxmKToKKyAgICAgICAgVCA9IFR5cGVWYXIoJ1QnKQorCisgICAgICAgIGNsYXNzIE5vZGUoR2VuZXJpY1tUXSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbGFiZWw6IFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogJ05vZGVbVF0nID0gTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByaWdodDogJ05vZGVbVF0nID0gTm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbCA9IGxhYmVsICAjIHR5cGU6IFQKKyAgICAgICAgICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0ICAjIHR5cGU6IE9wdGlvbmFsW05vZGVbVF1dCisgICAgICAgICAgICAgICAgc2VsZi5yaWdodCA9IHJpZ2h0ICAjIHR5cGU6IE9wdGlvbmFsW05vZGVbVF1dCisKKyAgICAgICAgZGVmIGZvbyh4OiBUKToKKyAgICAgICAgICAgIGEgPSBOb2RlKHgpCisgICAgICAgICAgICBiID0gTm9kZVtUXSh4KQorICAgICAgICAgICAgYyA9IE5vZGVbQW55XSh4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGEpLCBOb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGIpLCBOb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGMpLCBOb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmxhYmVsLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmxhYmVsLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxhYmVsLCB4KQorCisgICAgICAgIGZvbyg0MikKKworICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2FueShzZWxmKToKKyAgICAgICAgVCA9IFR5cGVWYXIoJ1QnKQorCisgICAgICAgIGNsYXNzIEMoR2VuZXJpY1tUXSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuX19wYXJhbWV0ZXJzX18sICgpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIERbaW50XQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBEW0FueV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pOgorICAgICAgICAgICAgRFtUXQorCisKK2NsYXNzIFZhcmlhbmNlVGVzdHMoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ludmFyaWFuY2Uoc2VsZik6CisgICAgICAgICMgQmVjYXVzZSBvZiBpbnZhcmlhbmNlLCBMaXN0W3N1YmNsYXNzIG9mIFhdIGlzIG5vdCBhIHN1YmNsYXNzCisgICAgICAgICMgb2YgTGlzdFtYXSwgYW5kIGRpdHRvIGZvciBNdXRhYmxlU2VxdWVuY2UuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyh0eXBpbmcuTGlzdFtNYW5hZ2VyXSwgdHlwaW5nLkxpc3RbRW1wbG95ZWVdKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3ModHlwaW5nLk11dGFibGVTZXF1ZW5jZVtNYW5hZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGluZy5NdXRhYmxlU2VxdWVuY2VbRW1wbG95ZWVdKQorICAgICAgICAjIEl0J3Mgc3RpbGwgcmVmbGV4aXZlLgorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3ModHlwaW5nLkxpc3RbRW1wbG95ZWVdLCB0eXBpbmcuTGlzdFtFbXBsb3llZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyh0eXBpbmcuTXV0YWJsZVNlcXVlbmNlW0VtcGxveWVlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwaW5nLk11dGFibGVTZXF1ZW5jZVtFbXBsb3llZV0pCisKKyAgICBkZWYgdGVzdF9jb3ZhcmlhbmNlX3R1cGxlKHNlbGYpOgorICAgICAgICAjIENoZWNrIGNvdmFyaWFjZSBmb3IgVHVwbGUgKHdoaWNoIGFyZSByZWFsbHkgc3BlY2lhbCBjYXNlcykuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhUdXBsZVtNYW5hZ2VyXSwgVHVwbGVbRW1wbG95ZWVdKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3MoVHVwbGVbRW1wbG95ZWVdLCBUdXBsZVtNYW5hZ2VyXSkKKyAgICAgICAgIyBBbmQgcGFpcndpc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhUdXBsZVtNYW5hZ2VyLCBNYW5hZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1cGxlW0VtcGxveWVlLCBFbXBsb3llZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhUdXBsZVtFbXBsb3llZSwgRW1wbG95ZWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHVwbGVbTWFuYWdlciwgRW1wbG95ZWVdKQorICAgICAgICAjIEFuZCB1c2luZyBlbGxpcHNpcy4KKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKFR1cGxlW01hbmFnZXIsIC4uLl0sIFR1cGxlW0VtcGxveWVlLCAuLi5dKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3MoVHVwbGVbRW1wbG95ZWUsIC4uLl0sIFR1cGxlW01hbmFnZXIsIC4uLl0pCisKKyAgICBkZWYgdGVzdF9jb3ZhcmlhbmNlX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIENoZWNrIGNvdmFyaWFuY2UgZm9yIFNlcXVlbmNlICh3aGljaCBpcyBqdXN0IGEgZ2VuZXJpYyBjbGFzcworICAgICAgICAjIGZvciB0aGlzIHB1cnBvc2UsIGJ1dCB1c2luZyBhIGNvdmFyaWFudCB0eXBlIHZhcmlhYmxlKS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKHR5cGluZy5TZXF1ZW5jZVtNYW5hZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGluZy5TZXF1ZW5jZVtFbXBsb3llZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyh0eXBpbmcuU2VxdWVuY2VbRW1wbG95ZWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwaW5nLlNlcXVlbmNlW01hbmFnZXJdKQorCisgICAgZGVmIHRlc3RfY292YXJpYW5jZV9tYXBwaW5nKHNlbGYpOgorICAgICAgICAjIERpdHRvIGZvciBNYXBwaW5nIChjb3ZhcmlhbnQgaW4gdGhlIHZhbHVlLCBpbnZhcmlhbnQgaW4gdGhlIGtleSkuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyh0eXBpbmcuTWFwcGluZ1tFbXBsb3llZSwgTWFuYWdlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGluZy5NYXBwaW5nW0VtcGxveWVlLCBFbXBsb3llZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyh0eXBpbmcuTWFwcGluZ1tNYW5hZ2VyLCBFbXBsb3llZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBpbmcuTWFwcGluZ1tFbXBsb3llZSwgRW1wbG95ZWVdKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3ModHlwaW5nLk1hcHBpbmdbRW1wbG95ZWUsIE1hbmFnZXJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwaW5nLk1hcHBpbmdbTWFuYWdlciwgTWFuYWdlcl0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyh0eXBpbmcuTWFwcGluZ1tNYW5hZ2VyLCBFbXBsb3llZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBpbmcuTWFwcGluZ1tNYW5hZ2VyLCBNYW5hZ2VyXSkKKworCitjbGFzcyBDYXN0VGVzdHMoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGludCwgNDIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGZsb2F0LCA0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoY2FzdChmbG9hdCwgNDIpKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoQW55LCA0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QobGlzdCwgNDIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KFVuaW9uW3N0ciwgZmxvYXRdLCA0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoQW55U3RyLCA0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoTm9uZSwgNDIpLCA0MikKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBCb2d1cyBjYWxscyBhcmUgbm90IGV4cGVjdGVkIHRvIGZhaWwuCisgICAgICAgIGNhc3QoNDIsIDQyKQorICAgICAgICBjYXN0KCdoZWxsbycsIDQyKQorCisKK2NsYXNzIEZvcndhcmRSZWZUZXN0cyhCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE5vZGUoR2VuZXJpY1tUXSk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYWJlbDogVCk6CisgICAgICAgICAgICAgICAgc2VsZi5sYWJlbCA9IGxhYmVsCisgICAgICAgICAgICAgICAgc2VsZi5sZWZ0ID0gc2VsZi5yaWdodCA9IE5vbmUKKworICAgICAgICAgICAgZGVmIGFkZF9ib3RoKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogJ09wdGlvbmFsW05vZGVbVF1dJywKKyAgICAgICAgICAgICAgICAgICAgICAgICByaWdodDogJ05vZGVbVF0nID0gTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHVmZjogaW50ID0gTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBibGFoPU5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKKyAgICAgICAgICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKKworICAgICAgICAgICAgZGVmIGFkZF9sZWZ0KHNlbGYsIG5vZGU6IE9wdGlvbmFsWydOb2RlW1RdJ10pOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2JvdGgobm9kZSwgTm9uZSkKKworICAgICAgICAgICAgZGVmIGFkZF9yaWdodChzZWxmLCBub2RlOiAnTm9kZVtUXScgPSBOb25lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF9ib3RoKE5vbmUsIG5vZGUpCisKKyAgICAgICAgdCA9IE5vZGVbaW50XQorICAgICAgICBib3RoX2hpbnRzID0gZ2V0X3R5cGVfaGludHModC5hZGRfYm90aCwgZ2xvYmFscygpLCBsb2NhbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib3RoX2hpbnRzWydsZWZ0J10sIE9wdGlvbmFsW05vZGVbVF1dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvdGhfaGludHNbJ3JpZ2h0J10sIE9wdGlvbmFsW05vZGVbVF1dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvdGhfaGludHNbJ2xlZnQnXSwgYm90aF9oaW50c1sncmlnaHQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib3RoX2hpbnRzWydzdHVmZiddLCBPcHRpb25hbFtpbnRdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdibGFoJywgYm90aF9oaW50cykKKworICAgICAgICBsZWZ0X2hpbnRzID0gZ2V0X3R5cGVfaGludHModC5hZGRfbGVmdCwgZ2xvYmFscygpLCBsb2NhbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZWZ0X2hpbnRzWydub2RlJ10sIE9wdGlvbmFsW05vZGVbVF1dKQorCisgICAgICAgIHJpZ2h0X2hpbnRzID0gZ2V0X3R5cGVfaGludHModC5hZGRfcmlnaHQsIGdsb2JhbHMoKSwgbG9jYWxzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmlnaHRfaGludHNbJ25vZGUnXSwgT3B0aW9uYWxbTm9kZVtUXV0pCisKKyAgICBkZWYgdGVzdF9mb3J3YXJkcmVmX2luc3RhbmNlX3R5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIGZyID0gdHlwaW5nLl9Gb3J3YXJkUmVmKCdpbnQnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpc2luc3RhbmNlKDQyLCBmcikKKworICAgIGRlZiB0ZXN0X3VuaW9uX2ZvcndhcmQoc2VsZik6CisKKyAgICAgICAgZGVmIGZvbyhhOiBVbmlvblsnVCddKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF90eXBlX2hpbnRzKGZvbywgZ2xvYmFscygpLCBsb2NhbHMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogVW5pb25bVF19KQorCisgICAgZGVmIHRlc3RfdHVwbGVfZm9yd2FyZChzZWxmKToKKworICAgICAgICBkZWYgZm9vKGE6IFR1cGxlWydUJ10pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3R5cGVfaGludHMoZm9vLCBnbG9iYWxzKCksIGxvY2FscygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBUdXBsZVtUXX0pCisKKyAgICBkZWYgdGVzdF9jYWxsYWJsZV9mb3J3YXJkKHNlbGYpOgorCisgICAgICAgIGRlZiBmb28oYTogQ2FsbGFibGVbWydUJ10sICdUJ10pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3R5cGVfaGludHMoZm9vLCBnbG9iYWxzKCksIGxvY2FscygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBDYWxsYWJsZVtbVF0sIFRdfSkKKworICAgIGRlZiB0ZXN0X2NhbGxhYmxlX3dpdGhfZWxsaXBzaXNfZm9yd2FyZChzZWxmKToKKworICAgICAgICBkZWYgZm9vKGE6ICdDYWxsYWJsZVsuLi4sIFRdJyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfdHlwZV9oaW50cyhmb28sIGdsb2JhbHMoKSwgbG9jYWxzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IENhbGxhYmxlWy4uLiwgVF19KQorCisgICAgZGVmIHRlc3Rfc3ludGF4X2Vycm9yKHNlbGYpOgorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgorICAgICAgICAgICAgR2VuZXJpY1snL1QnXQorCisgICAgZGVmIHRlc3RfZGVsYXllZF9zeW50YXhfZXJyb3Ioc2VsZik6CisKKyAgICAgICAgZGVmIGZvbyhhOiAnTm9kZVtUJyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6CisgICAgICAgICAgICBnZXRfdHlwZV9oaW50cyhmb28pCisKKyAgICBkZWYgdGVzdF90eXBlX2Vycm9yKHNlbGYpOgorCisgICAgICAgIGRlZiBmb28oYTogVHVwbGVbJzQyJ10pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGdldF90eXBlX2hpbnRzKGZvbykKKworICAgIGRlZiB0ZXN0X25hbWVfZXJyb3Ioc2VsZik6CisKKyAgICAgICAgZGVmIGZvbyhhOiAnTm9vZGVbVF0nKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcik6CisgICAgICAgICAgICBnZXRfdHlwZV9oaW50cyhmb28sIGxvY2FscygpKQorCisgICAgZGVmIHRlc3Rfbm9fdHlwZV9jaGVjayhzZWxmKToKKworICAgICAgICBAbm9fdHlwZV9jaGVjaworICAgICAgICBkZWYgZm9vKGE6ICd3aGF0ZXZlcnMnKSAtPiB7fToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0aCA9IGdldF90eXBlX2hpbnRzKGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aCwge30pCisKKyAgICBkZWYgdGVzdF9ub190eXBlX2NoZWNrX2NsYXNzKHNlbGYpOgorCisgICAgICAgIEBub190eXBlX2NoZWNrCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgZm9vKGE6ICd3aGF0ZXZlcnMnKSAtPiB7fToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY3RoID0gZ2V0X3R5cGVfaGludHMoQy5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3RoLCB7fSkKKyAgICAgICAgaXRoID0gZ2V0X3R5cGVfaGludHMoQygpLmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGgsIHt9KQorCisgICAgZGVmIHRlc3RfbWV0YV9ub190eXBlX2NoZWNrKHNlbGYpOgorCisgICAgICAgIEBub190eXBlX2NoZWNrX2RlY29yYXRvcgorICAgICAgICBkZWYgbWFnaWNfZGVjb3JhdG9yKGRlY28pOgorICAgICAgICAgICAgcmV0dXJuIGRlY28KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljX2RlY29yYXRvci5fX25hbWVfXywgJ21hZ2ljX2RlY29yYXRvcicpCisKKyAgICAgICAgQG1hZ2ljX2RlY29yYXRvcgorICAgICAgICBkZWYgZm9vKGE6ICd3aGF0ZXZlcnMnKSAtPiB7fToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBAbWFnaWNfZGVjb3JhdG9yCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgZm9vKGE6ICd3aGF0ZXZlcnMnKSAtPiB7fToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICdmb28nKQorICAgICAgICB0aCA9IGdldF90eXBlX2hpbnRzKGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aCwge30pCisgICAgICAgIGN0aCA9IGdldF90eXBlX2hpbnRzKEMuZm9vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0aCwge30pCisgICAgICAgIGl0aCA9IGdldF90eXBlX2hpbnRzKEMoKS5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRoLCB7fSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfZ2xvYmFscyhzZWxmKToKKyAgICAgICAgY29kZSA9ICgiY2xhc3MgQzpcbiIKKyAgICAgICAgICAgICAgICAiICAgIGRlZiBmb28oc2VsZiwgYTogJ0MnKSAtPiAnRCc6IHBhc3NcbiIKKyAgICAgICAgICAgICAgICAiY2xhc3MgRDpcbiIKKyAgICAgICAgICAgICAgICAiICAgIGRlZiBiYXIoc2VsZiwgYjogJ0QnKSAtPiBDOiBwYXNzXG4iCisgICAgICAgICAgICAgICAgKQorICAgICAgICBucyA9IHt9CisgICAgICAgIGV4ZWMoY29kZSwgbnMpCisgICAgICAgIGhpbnRzID0gZ2V0X3R5cGVfaGludHMobnNbJ0MnXS5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGludHMsIHsnYSc6IG5zWydDJ10sICdyZXR1cm4nOiBuc1snRCddfSkKKworCitjbGFzcyBPdmVybG9hZFRlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9vdmVybG9hZF9leGlzdHMoc2VsZik6CisgICAgICAgIGZyb20gdHlwaW5nIGltcG9ydCBvdmVybG9hZAorCisgICAgZGVmIHRlc3Rfb3ZlcmxvYWRfZmFpbHMoc2VsZik6CisgICAgICAgIGZyb20gdHlwaW5nIGltcG9ydCBvdmVybG9hZAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKworICAgICAgICAgICAgQG92ZXJsb2FkCisgICAgICAgICAgICBkZWYgYmxhaCgpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgYmxhaCgpCisKKyAgICBkZWYgdGVzdF9vdmVybG9hZF9zdWNjZWVkcyhzZWxmKToKKyAgICAgICAgZnJvbSB0eXBpbmcgaW1wb3J0IG92ZXJsb2FkCisKKyAgICAgICAgQG92ZXJsb2FkCisgICAgICAgIGRlZiBibGFoKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIGJsYWgoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBibGFoKCkKKworCitQWTM1ID0gc3lzLnZlcnNpb25faW5mb1s6Ml0gPj0gKDMsIDUpCisKK1BZMzVfVEVTVFMgPSAiIiIKK2ltcG9ydCBhc3luY2lvCisKK1RfYSA9IFR5cGVWYXIoJ1QnKQorCitjbGFzcyBBd2FpdGFibGVXcmFwcGVyKHR5cGluZy5Bd2FpdGFibGVbVF9hXSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX2F3YWl0X18oc2VsZikgLT4gdHlwaW5nLkl0ZXJhdG9yW1RfYV06CisgICAgICAgIHlpZWxkCisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKK2NsYXNzIEFzeW5jSXRlcmF0b3JXcmFwcGVyKHR5cGluZy5Bc3luY0l0ZXJhdG9yW1RfYV0pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlOiB0eXBpbmcuSXRlcmFibGVbVF9hXSk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgZGVmIF9fYWl0ZXJfXyhzZWxmKSAtPiB0eXBpbmcuQXN5bmNJdGVyYXRvcltUX2FdOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIF9fYW5leHRfXyhzZWxmKSAtPiBUX2E6CisgICAgICAgIGRhdGEgPSB5aWVsZCBmcm9tIHNlbGYudmFsdWUKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBTdG9wQXN5bmNJdGVyYXRpb24KKyIiIgorCitpZiBQWTM1OgorICAgIGV4ZWMoUFkzNV9URVNUUykKKworCitjbGFzcyBDb2xsZWN0aW9uc0FiY1Rlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9oYXNoYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCB0eXBpbmcuSGFzaGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShbXSwgdHlwaW5nLkhhc2hhYmxlKQorCisgICAgZGVmIHRlc3RfaXRlcmFibGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShbXSwgdHlwaW5nLkl0ZXJhYmxlKQorICAgICAgICAjIER1ZSB0byBBQkMgY2FjaGluZywgdGhlIHNlY29uZCB0aW1lIHRha2VzIGEgc2VwYXJhdGUgY29kZQorICAgICAgICAjIHBhdGggYW5kIGNvdWxkIGZhaWwuICBTbyBjYWxsIHRoaXMgYSBmZXcgdGltZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShbXSwgdHlwaW5nLkl0ZXJhYmxlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoW10sIHR5cGluZy5JdGVyYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKFtdLCB0eXBpbmcuSXRlcmFibGVbaW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKDQyLCB0eXBpbmcuSXRlcmFibGUpCisgICAgICAgICMgSnVzdCBpbiBjYXNlLCBhbHNvIHRlc3QgaXNzdWJjbGFzcygpIGEgZmV3IHRpbWVzLgorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MobGlzdCwgdHlwaW5nLkl0ZXJhYmxlKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MobGlzdCwgdHlwaW5nLkl0ZXJhYmxlKQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgIGl0ID0gaXRlcihbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCB0eXBpbmcuSXRlcmF0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgdHlwaW5nLkl0ZXJhdG9yW2ludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSg0MiwgdHlwaW5nLkl0ZXJhdG9yKQorCisgICAgQHNraXBVbmxlc3MoUFkzNSwgJ1B5dGhvbiAzLjUgcmVxdWlyZWQnKQorICAgIGRlZiB0ZXN0X2F3YWl0YWJsZShzZWxmKToKKyAgICAgICAgbnMgPSB7fQorICAgICAgICBleGVjKAorICAgICAgICAgICAgImFzeW5jIGRlZiBmb28oKSAtPiB0eXBpbmcuQXdhaXRhYmxlW2ludF06XG4iCisgICAgICAgICAgICAiICAgIHJldHVybiBhd2FpdCBBd2FpdGFibGVXcmFwcGVyKDQyKVxuIiwKKyAgICAgICAgICAgIGdsb2JhbHMoKSwgbnMpCisgICAgICAgIGZvbyA9IG5zWydmb28nXQorICAgICAgICBnID0gZm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKHR5cGUoZyksIHR5cGluZy5Bd2FpdGFibGVbaW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGcsIHR5cGluZy5Bd2FpdGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmb28sIHR5cGluZy5Bd2FpdGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyh0eXBpbmcuQXdhaXRhYmxlW01hbmFnZXJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBpbmcuQXdhaXRhYmxlW0VtcGxveWVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc1N1YmNsYXNzKHR5cGluZy5Bd2FpdGFibGVbRW1wbG95ZWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwaW5nLkF3YWl0YWJsZVtNYW5hZ2VyXSkKKyAgICAgICAgZy5zZW5kKE5vbmUpICAjIFJ1biBmb28oKSB0aWxsIGNvbXBsZXRpb24sIHRvIGF2b2lkIHdhcm5pbmcuCisKKyAgICBAc2tpcFVubGVzcyhQWTM1LCAnUHl0aG9uIDMuNSByZXF1aXJlZCcpCisgICAgZGVmIHRlc3RfYXN5bmNfaXRlcmFibGUoc2VsZik6CisgICAgICAgIGJhc2VfaXQgPSByYW5nZSgxMCkgICMgdHlwZTogSXRlcmF0b3JbaW50XQorICAgICAgICBpdCA9IEFzeW5jSXRlcmF0b3JXcmFwcGVyKGJhc2VfaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgdHlwaW5nLkFzeW5jSXRlcmFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgdHlwaW5nLkFzeW5jSXRlcmFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyh0eXBpbmcuQXN5bmNJdGVyYWJsZVtNYW5hZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwaW5nLkFzeW5jSXRlcmFibGVbRW1wbG95ZWVdKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoNDIsIHR5cGluZy5Bc3luY0l0ZXJhYmxlKQorCisgICAgQHNraXBVbmxlc3MoUFkzNSwgJ1B5dGhvbiAzLjUgcmVxdWlyZWQnKQorICAgIGRlZiB0ZXN0X2FzeW5jX2l0ZXJhdG9yKHNlbGYpOgorICAgICAgICBiYXNlX2l0ID0gcmFuZ2UoMTApICAjIHR5cGU6IEl0ZXJhdG9yW2ludF0KKyAgICAgICAgaXQgPSBBc3luY0l0ZXJhdG9yV3JhcHBlcihiYXNlX2l0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXQsIHR5cGluZy5Bc3luY0l0ZXJhdG9yKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3ModHlwaW5nLkFzeW5jSXRlcmF0b3JbTWFuYWdlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGluZy5Bc3luY0l0ZXJhdG9yW0VtcGxveWVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKDQyLCB0eXBpbmcuQXN5bmNJdGVyYXRvcikKKworICAgIGRlZiB0ZXN0X3NpemVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoW10sIHR5cGluZy5TaXplZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKDQyLCB0eXBpbmcuU2l6ZWQpCisKKyAgICBkZWYgdGVzdF9jb250YWluZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShbXSwgdHlwaW5nLkNvbnRhaW5lcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKDQyLCB0eXBpbmcuQ29udGFpbmVyKQorCisgICAgZGVmIHRlc3RfYWJzdHJhY3RzZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZXQoKSwgdHlwaW5nLkFic3RyYWN0U2V0KQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoNDIsIHR5cGluZy5BYnN0cmFjdFNldCkKKworICAgIGRlZiB0ZXN0X211dGFibGVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZXQoKSwgdHlwaW5nLk11dGFibGVTZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmcm96ZW5zZXQoKSwgdHlwaW5nLk11dGFibGVTZXQpCisKKyAgICBkZWYgdGVzdF9tYXBwaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoe30sIHR5cGluZy5NYXBwaW5nKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoNDIsIHR5cGluZy5NYXBwaW5nKQorCisgICAgZGVmIHRlc3RfbXV0YWJsZW1hcHBpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh7fSwgdHlwaW5nLk11dGFibGVNYXBwaW5nKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoNDIsIHR5cGluZy5NdXRhYmxlTWFwcGluZykKKworICAgIGRlZiB0ZXN0X3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoW10sIHR5cGluZy5TZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKDQyLCB0eXBpbmcuU2VxdWVuY2UpCisKKyAgICBkZWYgdGVzdF9tdXRhYmxlc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShbXSwgdHlwaW5nLk11dGFibGVTZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKCgpLCB0eXBpbmcuTXV0YWJsZVNlcXVlbmNlKQorCisgICAgZGVmIHRlc3RfYnl0ZXN0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGInJywgdHlwaW5nLkJ5dGVTdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShieXRlYXJyYXkoYicnKSwgdHlwaW5nLkJ5dGVTdHJpbmcpCisKKyAgICBkZWYgdGVzdF9saXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MobGlzdCwgdHlwaW5nLkxpc3QpCisKKyAgICBkZWYgdGVzdF9zZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhzZXQsIHR5cGluZy5TZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhmcm96ZW5zZXQsIHR5cGluZy5TZXQpCisKKyAgICBkZWYgdGVzdF9mcm96ZW5zZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhmcm96ZW5zZXQsIHR5cGluZy5Gcm96ZW5TZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhzZXQsIHR5cGluZy5Gcm96ZW5TZXQpCisKKyAgICBkZWYgdGVzdF9kaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoZGljdCwgdHlwaW5nLkRpY3QpCisKKyAgICBkZWYgdGVzdF9ub19saXN0X2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGluZy5MaXN0KCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwaW5nLkxpc3RbVF0oKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBpbmcuTGlzdFtpbnRdKCkKKworICAgIGRlZiB0ZXN0X2xpc3Rfc3ViY2xhc3Moc2VsZik6CisKKyAgICAgICAgY2xhc3MgTXlMaXN0KHR5cGluZy5MaXN0W2ludF0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEgPSBNeUxpc3QoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgTXlMaXN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgdHlwaW5nLlNlcXVlbmNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhNeUxpc3QsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhsaXN0LCBNeUxpc3QpCisKKyAgICBkZWYgdGVzdF9ub19kaWN0X2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGluZy5EaWN0KCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwaW5nLkRpY3RbS1QsIFZUXSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGluZy5EaWN0W3N0ciwgaW50XSgpCisKKyAgICBkZWYgdGVzdF9kaWN0X3N1YmNsYXNzKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15RGljdCh0eXBpbmcuRGljdFtzdHIsIGludF0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGQgPSBNeURpY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgTXlEaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgdHlwaW5nLk11dGFibGVNYXBwaW5nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhNeURpY3QsIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhkaWN0LCBNeURpY3QpCisKKyAgICBkZWYgdGVzdF9ub19kZWZhdWx0ZGljdF9pbnN0YW50aWF0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBpbmcuRGVmYXVsdERpY3QoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBpbmcuRGVmYXVsdERpY3RbS1QsIFZUXSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGluZy5EZWZhdWx0RGljdFtzdHIsIGludF0oKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdGRpY3Rfc3ViY2xhc3Moc2VsZik6CisKKyAgICAgICAgY2xhc3MgTXlEZWZEaWN0KHR5cGluZy5EZWZhdWx0RGljdFtzdHIsIGludF0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRkID0gTXlEZWZEaWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRkLCBNeURlZkRpY3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKE15RGVmRGljdCwgY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNTdWJjbGFzcyhjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdCwgTXlEZWZEaWN0KQorCisgICAgZGVmIHRlc3Rfbm9fc2V0X2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGluZy5TZXQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBpbmcuU2V0W1RdKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwaW5nLlNldFtpbnRdKCkKKworICAgIGRlZiB0ZXN0X3NldF9zdWJjbGFzc19pbnN0YW50aWF0aW9uKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15U2V0KHR5cGluZy5TZXRbaW50XSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZCA9IE15U2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQsIE15U2V0KQorCisgICAgZGVmIHRlc3Rfbm9fZnJvemVuc2V0X2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGluZy5Gcm96ZW5TZXQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBpbmcuRnJvemVuU2V0W1RdKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwaW5nLkZyb3plblNldFtpbnRdKCkKKworICAgIGRlZiB0ZXN0X2Zyb3plbnNldF9zdWJjbGFzc19pbnN0YW50aWF0aW9uKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15RnJvemVuU2V0KHR5cGluZy5Gcm96ZW5TZXRbaW50XSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZCA9IE15RnJvemVuU2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQsIE15RnJvemVuU2V0KQorCisgICAgZGVmIHRlc3Rfbm9fdHVwbGVfaW5zdGFudGlhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgVHVwbGUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBUdXBsZVtUXSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFR1cGxlW2ludF0oKQorCisgICAgZGVmIHRlc3RfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB5aWVsZCA0MgorICAgICAgICBnID0gZm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKHR5cGUoZyksIHR5cGluZy5HZW5lcmF0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyh0eXBpbmcuR2VuZXJhdG9yW01hbmFnZXIsIEVtcGxveWVlLCBNYW5hZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwaW5nLkdlbmVyYXRvcltFbXBsb3llZSwgTWFuYWdlciwgRW1wbG95ZWVdKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzU3ViY2xhc3ModHlwaW5nLkdlbmVyYXRvcltNYW5hZ2VyLCBNYW5hZ2VyLCBNYW5hZ2VyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGluZy5HZW5lcmF0b3JbRW1wbG95ZWUsIEVtcGxveWVlLCBFbXBsb3llZV0pCisKKyAgICBkZWYgdGVzdF9ub19nZW5lcmF0b3JfaW5zdGFudGlhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwaW5nLkdlbmVyYXRvcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGluZy5HZW5lcmF0b3JbVCwgVCwgVF0oKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0eXBpbmcuR2VuZXJhdG9yW2ludCwgaW50LCBpbnRdKCkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE1NQSh0eXBpbmcuTXV0YWJsZU1hcHBpbmcpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKTogICMgSXQncyBhYnN0cmFjdAorICAgICAgICAgICAgTU1BKCkKKworICAgICAgICBjbGFzcyBNTUMoTU1BKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oTU1DKCkpLCAwKQorCisgICAgICAgIGNsYXNzIE1NQih0eXBpbmcuTXV0YWJsZU1hcHBpbmdbS1QsIFZUXSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKE1NQigpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oTU1CW3N0ciwgc3RyXSgpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oTU1CW0tULCBWVF0oKSksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc1N1YmNsYXNzKGRpY3QsIE1NQSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc1N1YmNsYXNzKGRpY3QsIE1NQikKKworICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoTU1BLCB0eXBpbmcuTWFwcGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKE1NQiwgdHlwaW5nLk1hcHBpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhNTUMsIHR5cGluZy5NYXBwaW5nKQorCisKK2NsYXNzIE90aGVyQUJDVGVzdHMoQmFzZVRlc3RDYXNlKToKKworICAgIEBza2lwVW5sZXNzKGhhc2F0dHIodHlwaW5nLCAnQ29udGV4dE1hbmFnZXInKSwKKyAgICAgICAgICAgICAgICAncmVxdWlyZXMgdHlwaW5nLkNvbnRleHRNYW5hZ2VyJykKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcihzZWxmKToKKyAgICAgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIG1hbmFnZXIoKToKKyAgICAgICAgICAgIHlpZWxkIDQyCisKKyAgICAgICAgY20gPSBtYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLCB0eXBpbmcuQ29udGV4dE1hbmFnZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbSwgdHlwaW5nLkNvbnRleHRNYW5hZ2VyW2ludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSg0MiwgdHlwaW5nLkNvbnRleHRNYW5hZ2VyKQorCisKK2NsYXNzIFR5cGVUZXN0cyhCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdHlwZV9iYXNpYyhzZWxmKToKKworICAgICAgICBjbGFzcyBVc2VyOiBwYXNzCisgICAgICAgIGNsYXNzIEJhc2ljVXNlcihVc2VyKTogcGFzcworICAgICAgICBjbGFzcyBQcm9Vc2VyKFVzZXIpOiBwYXNzCisKKyAgICAgICAgZGVmIG5ld191c2VyKHVzZXJfY2xhc3M6IFR5cGVbVXNlcl0pIC0+IFVzZXI6CisgICAgICAgICAgICByZXR1cm4gdXNlcl9jbGFzcygpCisKKyAgICAgICAgam9lID0gbmV3X3VzZXIoQmFzaWNVc2VyKQorCisgICAgZGVmIHRlc3RfdHlwZV90eXBldmFyKHNlbGYpOgorCisgICAgICAgIGNsYXNzIFVzZXI6IHBhc3MKKyAgICAgICAgY2xhc3MgQmFzaWNVc2VyKFVzZXIpOiBwYXNzCisgICAgICAgIGNsYXNzIFByb1VzZXIoVXNlcik6IHBhc3MKKworICAgICAgICBVID0gVHlwZVZhcignVScsIGJvdW5kPVVzZXIpCisKKyAgICAgICAgZGVmIG5ld191c2VyKHVzZXJfY2xhc3M6IFR5cGVbVV0pIC0+IFU6CisgICAgICAgICAgICByZXR1cm4gdXNlcl9jbGFzcygpCisKKyAgICAgICAgam9lID0gbmV3X3VzZXIoQmFzaWNVc2VyKQorCisKK2NsYXNzIE5ld1R5cGVUZXN0cyhCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIFVzZXJJZCA9IE5ld1R5cGUoJ1VzZXJJZCcsIGludCkKKyAgICAgICAgVXNlck5hbWUgPSBOZXdUeXBlKCdVc2VyTmFtZScsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKFVzZXJJZCg1KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoVXNlck5hbWUoJ0pvZScpLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlcklkKDUpICsgMSwgNikKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgVXNlcklkID0gTmV3VHlwZSgnVXNlcklkJywgaW50KQorICAgICAgICBVc2VyTmFtZSA9IE5ld1R5cGUoJ1VzZXJOYW1lJywgc3RyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpc3N1YmNsYXNzKFVzZXJJZCwgaW50KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBEKFVzZXJOYW1lKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgTmFtZWRUdXBsZVRlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIEVtcCA9IE5hbWVkVHVwbGUoJ0VtcCcsIFsoJ25hbWUnLCBzdHIpLCAoJ2lkJywgaW50KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhFbXAsIHR1cGxlKQorICAgICAgICBqb2UgPSBFbXAoJ0pvZScsIDQyKQorICAgICAgICBqaW0gPSBFbXAobmFtZT0nSmltJywgaWQ9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGpvZSwgRW1wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoam9lLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2UubmFtZSwgJ0pvZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9lLmlkLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqaW0ubmFtZSwgJ0ppbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoamltLmlkLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVtcC5fX25hbWVfXywgJ0VtcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRW1wLl9maWVsZHMsICgnbmFtZScsICdpZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVtcC5fZmllbGRfdHlwZXMsIGRpY3QobmFtZT1zdHIsIGlkPWludCkpCisKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIGdsb2JhbCBFbXAgICMgcGlja2xlIHdhbnRzIHRvIHJlZmVyZW5jZSB0aGUgY2xhc3MgYnkgbmFtZQorICAgICAgICBFbXAgPSBOYW1lZFR1cGxlKCdFbXAnLCBbKCduYW1lJywgc3RyKSwgKCdpZCcsIGludCldKQorICAgICAgICBqYW5lID0gRW1wKCdqYW5lJywgMzcpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgeiA9IHBpY2tsZS5kdW1wcyhqYW5lLCBwcm90bykKKyAgICAgICAgICAgIGphbmUyID0gcGlja2xlLmxvYWRzKHopCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGphbmUyLCBqYW5lKQorCisKK2NsYXNzIElPVGVzdHMoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2lvKHNlbGYpOgorCisgICAgICAgIGRlZiBzdHVmZihhOiBJTykgLT4gQW55U3RyOgorICAgICAgICAgICAgcmV0dXJuIGEucmVhZGxpbmUoKQorCisgICAgICAgIGEgPSBzdHVmZi5fX2Fubm90YXRpb25zX19bJ2EnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19wYXJhbWV0ZXJzX18sIChBbnlTdHIsKSkKKworICAgIGRlZiB0ZXN0X3RleHRpbyhzZWxmKToKKworICAgICAgICBkZWYgc3R1ZmYoYTogVGV4dElPKSAtPiBzdHI6CisgICAgICAgICAgICByZXR1cm4gYS5yZWFkbGluZSgpCisKKyAgICAgICAgYSA9IHN0dWZmLl9fYW5ub3RhdGlvbnNfX1snYSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX3BhcmFtZXRlcnNfXywgKCkpCisKKyAgICBkZWYgdGVzdF9iaW5hcnlpbyhzZWxmKToKKworICAgICAgICBkZWYgc3R1ZmYoYTogQmluYXJ5SU8pIC0+IGJ5dGVzOgorICAgICAgICAgICAgcmV0dXJuIGEucmVhZGxpbmUoKQorCisgICAgICAgIGEgPSBzdHVmZi5fX2Fubm90YXRpb25zX19bJ2EnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19wYXJhbWV0ZXJzX18sICgpKQorCisgICAgZGVmIHRlc3RfaW9fc3VibW9kdWxlKHNlbGYpOgorICAgICAgICBmcm9tIHR5cGluZy5pbyBpbXBvcnQgSU8sIFRleHRJTywgQmluYXJ5SU8sIF9fYWxsX18sIF9fbmFtZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoSU8sIHR5cGluZy5JTykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUZXh0SU8sIHR5cGluZy5UZXh0SU8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoQmluYXJ5SU8sIHR5cGluZy5CaW5hcnlJTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoX19hbGxfXyksIHNldChbJ0lPJywgJ1RleHRJTycsICdCaW5hcnlJTyddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX25hbWVfXywgJ3R5cGluZy5pbycpCisKKworY2xhc3MgUkVUZXN0cyhCYXNlVGVzdENhc2UpOgorICAgICMgTXVjaCBvZiB0aGlzIGlzIHJlYWxseSB0ZXN0aW5nIF9UeXBlQWxpYXMuCisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoJ1thLXpdKycsIHJlLkkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhwYXQuX19jbGFzc19fLCBQYXR0ZXJuKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3ModHlwZShwYXQpLCBQYXR0ZXJuKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3ModHlwZShwYXQpLCBQYXR0ZXJuW3N0cl0pCisKKyAgICAgICAgbWF0ID0gcGF0LnNlYXJjaCgnMTIzNDVhYmNkZS4uLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKG1hdC5fX2NsYXNzX18sIE1hdGNoKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MobWF0Ll9fY2xhc3NfXywgTWF0Y2hbc3RyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKG1hdC5fX2NsYXNzX18sIE1hdGNoW2J5dGVzXSkgICMgU2FkIGJ1dCB0cnVlLgorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3ModHlwZShtYXQpLCBNYXRjaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKHR5cGUobWF0KSwgTWF0Y2hbc3RyXSkKKworICAgICAgICBwID0gUGF0dGVybltVbmlvbltzdHIsIGJ5dGVzXV0KKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKFBhdHRlcm5bc3RyXSwgUGF0dGVybikKKyAgICAgICAgc2VsZi5hc3NlcnRJc1N1YmNsYXNzKFBhdHRlcm5bc3RyXSwgcCkKKworICAgICAgICBtID0gTWF0Y2hbVW5pb25bYnl0ZXMsIHN0cl1dCisgICAgICAgIHNlbGYuYXNzZXJ0SXNTdWJjbGFzcyhNYXRjaFtieXRlc10sIE1hdGNoKQorICAgICAgICBzZWxmLmFzc2VydElzU3ViY2xhc3MoTWF0Y2hbYnl0ZXNdLCBtKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAjIERvZXNuJ3QgZml0IEFueVN0ci4KKyAgICAgICAgICAgIFBhdHRlcm5baW50XQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAjIENhbid0IGNoYW5nZSB0eXBlIHZhcnM/CisgICAgICAgICAgICBNYXRjaFtUXQorICAgICAgICBtID0gTWF0Y2hbVW5pb25bc3RyLCBieXRlc11dCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICMgVG9vIGNvbXBsaWNhdGVkPworICAgICAgICAgICAgbVtzdHJdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICMgV2UgZG9uJ3Qgc3VwcG9ydCBpc2luc3RhbmNlKCkuCisgICAgICAgICAgICBpc2luc3RhbmNlKDQyLCBQYXR0ZXJuKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAjIFdlIGRvbid0IHN1cHBvcnQgaXNpbnN0YW5jZSgpLgorICAgICAgICAgICAgaXNpbnN0YW5jZSg0MiwgUGF0dGVybltzdHJdKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKFBhdHRlcm4pLCAnUGF0dGVyblt+QW55U3RyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihQYXR0ZXJuW3N0cl0pLCAnUGF0dGVybltzdHJdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKFBhdHRlcm5bYnl0ZXNdKSwgJ1BhdHRlcm5bYnl0ZXNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE1hdGNoKSwgJ01hdGNoW35BbnlTdHJdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE1hdGNoW3N0cl0pLCAnTWF0Y2hbc3RyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihNYXRjaFtieXRlc10pLCAnTWF0Y2hbYnl0ZXNdJykKKworICAgIGRlZiB0ZXN0X3JlX3N1Ym1vZHVsZShzZWxmKToKKyAgICAgICAgZnJvbSB0eXBpbmcucmUgaW1wb3J0IE1hdGNoLCBQYXR0ZXJuLCBfX2FsbF9fLCBfX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydElzKE1hdGNoLCB0eXBpbmcuTWF0Y2gpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGF0dGVybiwgdHlwaW5nLlBhdHRlcm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KF9fYWxsX18pLCBzZXQoWydNYXRjaCcsICdQYXR0ZXJuJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fbmFtZV9fLCAndHlwaW5nLnJlJykKKworICAgIGRlZiB0ZXN0X2Nhbm5vdF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGV4OgorCisgICAgICAgICAgICBjbGFzcyBBKHR5cGluZy5NYXRjaCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4LmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkEgdHlwZSBhbGlhcyBjYW5ub3QgYmUgc3ViY2xhc3NlZCIpCisKKworY2xhc3MgQWxsVGVzdHMoQmFzZVRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgX19hbGxfXy4iIiIKKworICAgIGRlZiB0ZXN0X2FsbChzZWxmKToKKyAgICAgICAgZnJvbSB0eXBpbmcgaW1wb3J0IF9fYWxsX18gYXMgYQorICAgICAgICAjIEp1c3Qgc3BvdC1jaGVjayB0aGUgZmlyc3QgYW5kIGxhc3Qgb2YgZXZlcnkgY2F0ZWdvcnkuCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0Fic3RyYWN0U2V0JywgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignVmFsdWVzVmlldycsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Nhc3QnLCBhKQorICAgICAgICBzZWxmLmFzc2VydEluKCdvdmVybG9hZCcsIGEpCisgICAgICAgIGlmIGhhc2F0dHIoY29udGV4dGxpYiwgJ0Fic3RyYWN0Q29udGV4dE1hbmFnZXInKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0NvbnRleHRNYW5hZ2VyJywgYSkKKyAgICAgICAgIyBDaGVjayB0aGF0IGlvIGFuZCByZSBhcmUgbm90IGV4cG9ydGVkLgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdpbycsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3JlJywgYSkKKyAgICAgICAgIyBTcG90LWNoZWNrIHRoYXQgc3RkbGliIG1vZHVsZXMgYXJlbid0IGV4cG9ydGVkLgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdvcycsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3N5cycsIGEpCisgICAgICAgICMgQ2hlY2sgdGhhdCBUZXh0IGlzIGRlZmluZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1RleHQnLCBhKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Vjbi5weSBiL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CmluZGV4IDFlMDdmNjYuLjhmZWJmMGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CkBAIC0yMzMsOCArMjMzLDUgQEAKICAgICAgICAgKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVbmljb2RlTmFtZXNUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuYXJ5LnB5IGIvTGliL3Rlc3QvdGVzdF91bmFyeS5weQppbmRleCBiODM1NTY0Li5jM2MxN2NjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuYXJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5hcnkucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0IGNvbXBpbGVyIGNoYW5nZXMgZm9yIHVuYXJ5IG9wcyAoKywgLSwgfikgaW50cm9kdWNlZCBpbiBQeXRob24gMi4yIiIiCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBjbGFzcyBVbmFyeU9wVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC01MCw5ICs0OSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgIn4yLjAiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVW5hcnlPcFRlc3RDYXNlKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQppbmRleCBmMDQ2OTM4Li5hMzhlN2IxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC04LDYgKzgsNyBAQAogaW1wb3J0IF9zdHJpbmcKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CkBAIC0zMTgsNiArMzE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29yZCgnYScpOiBOb25lLCBvcmQoJ2InKTogJyd9KQogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgneHl5eCcsICd4engnLCAndHJhbnNsYXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29yZCgneicpOiAneXknfSkKKwogICAgICAgICAjIHRoaXMgbmVlZHMgbWFrZXRyYW5zKCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoJ2FiYWJhYmMnLCAnYWJhYmFiYycsICd0cmFuc2xhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2InOiAnPGk+J30pCkBAIC0zMjcsNiArMzI5LDQzIEBACiAgICAgICAgIHRibCA9IHNlbGYudHlwZTJ0ZXN0Lm1ha2V0cmFucygnYWJjJywgJ3h5eicsICdkJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoJ3h5enp5JywgJ2FiZGNkY2JkZGRkJywgJ3RyYW5zbGF0ZScsIHRibCkKIAorICAgICAgICAjIHZhcmlvdXMgdGVzdHMgc3dpdGNoaW5nIGZyb20gQVNDSUkgdG8gbGF0aW4xIG9yIHRoZSBvcHBvc2l0ZTsKKyAgICAgICAgIyBzYW1lIGxlbmd0aCwgcmVtb3ZlIGEgbGV0dGVyLCBvciByZXBsYWNlIHdpdGggYSBsb25nZXIgc3RyaW5nLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbYV0iLnRyYW5zbGF0ZShzdHIubWFrZXRyYW5zKCdhJywgJ1gnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIltYXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlthXSIudHJhbnNsYXRlKHN0ci5tYWtldHJhbnMoeydhJzogJ1gnfSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbWF0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbYV0iLnRyYW5zbGF0ZShzdHIubWFrZXRyYW5zKHsnYSc6IE5vbmV9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIltdIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW2FdIi50cmFuc2xhdGUoc3RyLm1ha2V0cmFucyh7J2EnOiAnWFhYJ30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW1hYWF0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbYV0iLnRyYW5zbGF0ZShzdHIubWFrZXRyYW5zKHsnYSc6ICdceGU5J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW1x4ZTldIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXhiJy50cmFuc2xhdGUoc3RyLm1ha2V0cmFucyh7J2EnOiBOb25lLCAnYic6ICcxMjMnfSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ4MTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXhiJy50cmFuc2xhdGUoc3RyLm1ha2V0cmFucyh7J2EnOiBOb25lLCAnYic6ICdceGU5J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAieFx4ZTkiKQorCisgICAgICAgICMgdGVzdCBub24tQVNDSUkgKGRvbid0IHRha2UgdGhlIGZhc3QtcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW2FdIi50cmFuc2xhdGUoc3RyLm1ha2V0cmFucyh7J2EnOiAnPFx4ZTk+J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWzxceGU5Pl0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHhlOV0iLnRyYW5zbGF0ZShzdHIubWFrZXRyYW5zKHsnXHhlOSc6ICdhJ30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW2FdIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x4ZTldIi50cmFuc2xhdGUoc3RyLm1ha2V0cmFucyh7J1x4ZTknOiBOb25lfSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltceGU5XSIudHJhbnNsYXRlKHN0ci5tYWtldHJhbnMoeydceGU5JzogJzEyMyd9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlsxMjNdIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW2FceGU5XSIudHJhbnNsYXRlKHN0ci5tYWtldHJhbnMoeydhJzogJzxcdTIwYWM+J30pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWzxcdTIwYWM+XHhlOV0iKQorCisgICAgICAgICMgaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlcnMKKyAgICAgICAgaW52YWxpZF9jaGFyID0gMHgxMGZmZmYrMQorICAgICAgICBmb3IgYmVmb3JlIGluICJhXHhlOVx1MjBhY1xVMDAxMGZmZmYiOgorICAgICAgICAgICAgbWFwcGluZyA9IHN0ci5tYWtldHJhbnMoe2JlZm9yZTogaW52YWxpZF9jaGFyfSkKKyAgICAgICAgICAgIHRleHQgPSAiWyVzXSIgJSBiZWZvcmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRleHQudHJhbnNsYXRlLCBtYXBwaW5nKQorCisgICAgICAgICMgZXJyb3JzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QubWFrZXRyYW5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5tYWtldHJhbnMsICdhYmMnLCAnZGVmZycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QubWFrZXRyYW5zLCAyLCAnZGVmJykKQEAgLTM0MSwxMCArMzgwLDYgQEAKICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9zcGxpdChzZWxmKQogCi0gICAgICAgICMgTWl4ZWQgYXJndW1lbnRzCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFsnYScsICdiJywgJ2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFsnYScsICdiJywgJ2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFsnZW5kY2FzZSAnLCAnJ10sICdlbmRjYXNlIHRlc3QnLCAnc3BsaXQnLCAndGVzdCcpCiAgICAgICAgICMgdGVzdCBtaXhlZCBraW5kcwogICAgICAgICBmb3IgbGVmdCwgcmlnaHQgaW4gKCdiYScsICdcdTAxMDFcdTAxMDAnLCAnXFUwMDAxMDMwMVxVMDAwMTAzMDAnKToKICAgICAgICAgICAgIGxlZnQgKj0gOQpAQCAtNTI2LDcgKzU2MSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnXHVkODAwXHVkYzAyJyA8ICdcdWQ4NGRcdWRjNTYnKQogCiAgICAgZGVmIHRlc3RfaXNsb3dlcihzZWxmKToKLSAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXNsb3dlcihzZWxmKQorICAgICAgICBzdXBlcigpLnRlc3RfaXNsb3dlcigpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCAnXHUxRkZjJywgJ2lzbG93ZXInKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdcdTIxNjcnLmlzbG93ZXIoKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdcdTIxNzcnLmlzbG93ZXIoKSkKQEAgLTU0MSw3ICs1NzYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdcVTAwMDFGNDZGJy5pc2xvd2VyKCkpCiAKICAgICBkZWYgdGVzdF9pc3VwcGVyKHNlbGYpOgotICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc3VwcGVyKHNlbGYpCisgICAgICAgIHN1cGVyKCkudGVzdF9pc3VwcGVyKCkKICAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CiAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgJ1x1MUZGYycsICdpc3VwcGVyJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdcdTIxNjcnLmlzdXBwZXIoKSkKQEAgLTU1Nyw3ICs1OTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdcVTAwMDFGNDZGJy5pc3VwcGVyKCkpCiAKICAgICBkZWYgdGVzdF9pc3RpdGxlKHNlbGYpOgotICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc3RpdGxlKHNlbGYpCisgICAgICAgIHN1cGVyKCkudGVzdF9pc3RpdGxlKCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgJ1x1MUZGYycsICdpc3RpdGxlJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgJ0dyZWVrIFx1MUZGY2l0bGVjYXNlcyAuLi4nLCAnaXN0aXRsZScpCiAKQEAgLTU2OSw3ICs2MDQsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaC5pc3RpdGxlKCksICd7IWF9IGlzIG5vdCB0aXRsZScuZm9ybWF0KGNoKSkKIAogICAgIGRlZiB0ZXN0X2lzc3BhY2Uoc2VsZik6Ci0gICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2lzc3BhY2Uoc2VsZikKKyAgICAgICAgc3VwZXIoKS50ZXN0X2lzc3BhY2UoKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCAnXHUyMDAwJywgJ2lzc3BhY2UnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCAnXHUyMDBhJywgJ2lzc3BhY2UnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgJ1x1MjAxNCcsICdpc3NwYWNlJykKQEAgLTU3OSwxMyArNjE0LDEzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoLmlzc3BhY2UoKSwgJ3shYX0gaXMgbm90IHNwYWNlLicuZm9ybWF0KGNoKSkKIAogICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZik6Ci0gICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2lzYWxudW0oc2VsZikKKyAgICAgICAgc3VwZXIoKS50ZXN0X2lzYWxudW0oKQogICAgICAgICBmb3IgY2ggaW4gWydcVTAwMDEwNDAxJywgJ1xVMDAwMTA0MjcnLCAnXFUwMDAxMDQyOScsICdcVTAwMDEwNDRFJywKICAgICAgICAgICAgICAgICAgICAnXFUwMDAxRDdGNicsICdcVTAwMDExMDY2JywgJ1xVMDAwMTA0QTAnLCAnXFUwMDAxRjEwNyddOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoLmlzYWxudW0oKSwgJ3shYX0gaXMgYWxudW0uJy5mb3JtYXQoY2gpKQogCiAgICAgZGVmIHRlc3RfaXNhbHBoYShzZWxmKToKLSAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXNhbHBoYShzZWxmKQorICAgICAgICBzdXBlcigpLnRlc3RfaXNhbHBoYSgpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsICdcdTFGRmMnLCAnaXNhbHBoYScpCiAgICAgICAgICMgbm9uLUJNUCwgY2FzZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdcVTAwMDEwNDAxJy5pc2FscGhhKCkpCkBAIC02MTUsNyArNjUwLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaC5pc2RlY2ltYWwoKSwgJ3shYX0gaXMgZGVjaW1hbC4nLmZvcm1hdChjaCkpCiAKICAgICBkZWYgdGVzdF9pc2RpZ2l0KHNlbGYpOgotICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc2RpZ2l0KHNlbGYpCisgICAgICAgIHN1cGVyKCkudGVzdF9pc2RpZ2l0KCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgJ1x1MjQ2MCcsICdpc2RpZ2l0JykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsICdceGJjJywgJ2lzZGlnaXQnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCAnXHUwNjYwJywgJ2lzZGlnaXQnKQpAQCAtNzY4LDcgKzgwMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FcdTAzNDVcdTAzYTMnLmNhcGl0YWxpemUoKSwgJ0FcdTAzNDVcdTAzYzInKQogCiAgICAgZGVmIHRlc3RfdGl0bGUoc2VsZik6Ci0gICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X3RpdGxlKHNlbGYpCisgICAgICAgIHN1cGVyKCkudGVzdF90aXRsZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1xVMDAwMTA0NEYnLnRpdGxlKCksICdcVTAwMDEwNDI3JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXFUwMDAxMDQ0RlxVMDAwMTA0NEYnLnRpdGxlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xVMDAwMTA0MjdcVTAwMDEwNDRGJykKQEAgLTEzMTcsMjAgKzEzNTIsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJS4ycycgJSAiYVx4ZTlcdTIwYWMiLCAnYVx4ZTknKQogCiAgICAgICAgICNpc3N1ZSAxOTk5NQotICAgICAgICBjbGFzcyBQc3VlZG9JbnQ6CisgICAgICAgIGNsYXNzIFBzZXVkb0ludDoKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGludCh2YWx1ZSkKICAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCiAgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCi0gICAgICAgIGNsYXNzIFBzdWVkb0Zsb2F0OgorICAgICAgICBjbGFzcyBQc2V1ZG9GbG9hdDoKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGZsb2F0KHZhbHVlKQogICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLnZhbHVlKQotICAgICAgICBwaSA9IFBzdWVkb0Zsb2F0KDMuMTQxNSkKLSAgICAgICAgbGV0dGVyX20gPSBQc3VlZG9JbnQoMTA5KQorICAgICAgICBwaSA9IFBzZXVkb0Zsb2F0KDMuMTQxNSkKKyAgICAgICAgbGV0dGVyX20gPSBQc2V1ZG9JbnQoMTA5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcleCcgJSA0MiwgJzJhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJVgnICUgMTUsICdGJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJW8nICUgOSwgJzExJykKQEAgLTEzMzksMTEgKzEzNzQsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJVgnICUgbGV0dGVyX20sICc2RCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVvJyAlIGxldHRlcl9tLCAnMTU1JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWMnICUgbGV0dGVyX20sICdtJykKLSAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsICcleCcuX19tb2RfXywgcGkpLAotICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyV4Jy5fX21vZF9fLCAzLjE0KSwKLSAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsICclWCcuX19tb2RfXywgMi4xMSksCi0gICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJW8nLl9fbW9kX18sIDEuNzkpLAotICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyVjJy5fX21vZF9fLCBwaSksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnJXggZm9ybWF0OiBhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkLCBub3QgZmxvYXQnLCBvcGVyYXRvci5tb2QsICcleCcsIDMuMTQpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJyVYIGZvcm1hdDogYW4gaW50ZWdlciBpcyByZXF1aXJlZCwgbm90IGZsb2F0Jywgb3BlcmF0b3IubW9kLCAnJVgnLCAyLjExKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICclbyBmb3JtYXQ6IGFuIGludGVnZXIgaXMgcmVxdWlyZWQsIG5vdCBmbG9hdCcsIG9wZXJhdG9yLm1vZCwgJyVvJywgMS43OSksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnJXggZm9ybWF0OiBhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkLCBub3QgUHNldWRvRmxvYXQnLCBvcGVyYXRvci5tb2QsICcleCcsIHBpKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QsICclYycsIHBpKSwKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfd2l0aF9lbnVtKHNlbGYpOgogICAgICAgICAjIGlzc3VlMTg3ODAKQEAgLTE3MzksNyArMTc3NCw3IEBACiAKICAgICBkZWYgYXNzZXJ0Q29ycmVjdFVURjhEZWNvZGluZyhzZWxmLCBzZXEsIHJlcywgZXJyKToKICAgICAgICAgIiIiCi0gICAgICAgIENoZWNrIHRoYXQgYW4gaW52YWxpZCBVVEYtOCBzZXF1ZW5jZSByYWlzZXMgYW4gVW5pY29kZURlY29kZUVycm9yIHdoZW4KKyAgICAgICAgQ2hlY2sgdGhhdCBhbiBpbnZhbGlkIFVURi04IHNlcXVlbmNlIHJhaXNlcyBhIFVuaWNvZGVEZWNvZGVFcnJvciB3aGVuCiAgICAgICAgICdzdHJpY3QnIGlzIHVzZWQsIHJldHVybnMgcmVzIHdoZW4gJ3JlcGxhY2UnIGlzIHVzZWQsIGFuZCB0aGF0IGRvZXNuJ3QKICAgICAgICAgcmV0dXJuIGFueXRoaW5nIHdoZW4gJ2lnbm9yZScgaXMgdXNlZC4KICAgICAgICAgIiIiCkBAIC0yMDYxLDcgKzIwOTYsOCBAQAogICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwMTEyNScsCiAgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfMycsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywgJ2lzbzg4NTlfNicsCi0gICAgICAgICAgICAnaXNvODg1OV83JywgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCisgICAgICAgICAgICAnaXNvODg1OV83JywgJ2lzbzg4NTlfOScsCisgICAgICAgICAgICAna29pOF9yJywgJ2tvaThfdCcsICdrb2k4X3UnLCAna3oxMDQ4JywgJ2xhdGluXzEnLAogICAgICAgICAgICAgJ21hY19jeXJpbGxpYycsICdtYWNfbGF0aW4yJywKIAogICAgICAgICAgICAgJ2NwMTI1MCcsICdjcDEyNTEnLCAnY3AxMjUyJywgJ2NwMTI1MycsICdjcDEyNTQnLCAnY3AxMjU1JywKQEAgLTIwODksMTQgKzIxMjUsMTQgQEAKICAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDExMjUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMTAnLCAnaXNvODg1OV8xMycsICdpc284ODU5XzE0JywgJ2lzbzg4NTlfMTUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMicsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywKLSAgICAgICAgICAgICdpc284ODU5XzknLCAna29pOF9yJywgJ2xhdGluXzEnLAorICAgICAgICAgICAgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAna29pOF91JywgJ2xhdGluXzEnLAogICAgICAgICAgICAgJ21hY19jeXJpbGxpYycsICdtYWNfbGF0aW4yJywKIAogICAgICAgICAgICAgIyMjIFRoZXNlIGhhdmUgdW5kZWZpbmVkIG1hcHBpbmdzOgogICAgICAgICAgICAgIydjcDEyNTAnLCAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsCiAgICAgICAgICAgICAjJ2NwMTI1NicsICdjcDEyNTcnLCAnY3AxMjU4JywKICAgICAgICAgICAgICMnY3A0MjQnLCAnY3A4NTYnLCAnY3A4NTcnLCAnY3A4NjQnLCAnY3A4NjknLCAnY3A4NzQnLAotICAgICAgICAgICAgIydpc284ODU5XzMnLCAnaXNvODg1OV82JywgJ2lzbzg4NTlfNycsCisgICAgICAgICAgICAjJ2lzbzg4NTlfMycsICdpc284ODU5XzYnLCAnaXNvODg1OV83JywgJ2tvaThfdCcsICdrejEwNDgnLAogICAgICAgICAgICAgIydtYWNfZ3JlZWsnLCAnbWFjX2ljZWxhbmQnLCdtYWNfcm9tYW4nLCAnbWFjX3R1cmtpc2gnLAogCiAgICAgICAgICAgICAjIyMgVGhlc2UgZmFpbCB0aGUgcm91bmQtdHJpcDoKQEAgLTI2ODksNiArMjcyNSwxMCBAQAogICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgc2Vjb25kIGNhbGwgcmV0dXJucyB0aGUgc2FtZSByZXN1bHQKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19oYXNoKHMpLCBjaHIoaykuZW5jb2RlKCkgKiAoaSArIDEpKQogCisgICAgZGVmIHRlc3RfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZik6CisgICAgICAgIHN1cHBvcnQuY2hlY2tfZnJlZV9hZnRlcl9pdGVyYXRpbmcoc2VsZiwgaXRlciwgc3RyKQorICAgICAgICBzdXBwb3J0LmNoZWNrX2ZyZWVfYWZ0ZXJfaXRlcmF0aW5nKHNlbGYsIHJldmVyc2VkLCBzdHIpCisKIAogY2xhc3MgU3RyaW5nTW9kdWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZm9ybWF0dGVyX3BhcnNlcihzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CmluZGV4IDcwN2IzMGUuLjZlY2M5MTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQpAQCAtOSw4ICs5LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGhhc2hsaWIKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgdGVzdC5zdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogCiBlbmNvZGluZyA9ICd1dGYtOCcKIGVycm9ycyA9ICdzdXJyb2dhdGVwYXNzJwpAQCAtMjEsNyArMjAsNyBAQAogY2xhc3MgVW5pY29kZU1ldGhvZHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICdlNzRlODc4ZGU3MWI2ZTc4MGZmYWMyNzE3ODVjM2NiNThmNjI1MWYzJworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnNTk3MTc2MDg3MmIyZjk4YmI5YzcwMWU2YzBkYjMyNzNkNzU2YjNlYycKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jaGVja3N1bShzZWxmKToKICAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCkBAIC03OSw4ICs3OCw5IEBACiAKIGNsYXNzIFVuaWNvZGVGdW5jdGlvbnNUZXN0KFVuaWNvZGVEYXRhYmFzZVRlc3QpOgogCi0gICAgIyB1cGRhdGUgdGhpcywgaWYgdGhlIGRhdGFiYXNlIGNoYW5nZXMKLSAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2YwYjc0ZDI2Nzc2MzMxY2M3YmRjM2E0Njk4ZjAzN2Q3M2YyY2VlMmInCisgICAgIyBVcGRhdGUgdGhpcyBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcy4gTWFrZSBzdXJlIHRvIGRvIGEgZnVsbCByZWJ1aWxkCisgICAgIyAoZS5nLiAnbWFrZSBkaXN0Y2xlYW4gJiYgbWFrZScpIHRvIGdldCB0aGUgY29ycmVjdCBjaGVja3N1bS4KKyAgICBleHBlY3RlZGNoZWNrc3VtID0gJzVlNzQ4MjdjZDA3ZjllNTQ2YTMwZjM0YjdiY2Y2Y2MyZWFjMzhjOGMnCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25fY2hlY2tzdW0oc2VsZik6CiAgICAgICAgIGRhdGEgPSBbXQogICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKQEAgLTIzMywxNiArMjMzLDEyIEBACiAgICAgICAgIGNvZGUgPSAiaW1wb3J0IHN5czsiIFwKICAgICAgICAgICAgICJzeXMubW9kdWxlc1sndW5pY29kZWRhdGEnXSA9IE5vbmU7IiBcCiAgICAgICAgICAgICAiIiJldmFsKCInXFxcXE57U09GVCBIWVBIRU59JyIpIiIiCi0gICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGVdCi0gICAgICAgICMgV2UgdXNlIGEgc3VicHJvY2VzcyBiZWNhdXNlIHRoZSB1bmljb2RlZGF0YSBtb2R1bGUgbWF5IGFscmVhZHkgaGF2ZQotICAgICAgICAjIGJlZW4gbG9hZGVkIGluIHRoaXMgcHJvY2Vzcy4KLSAgICAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIHBvcGVuLndhaXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcGVuLnJldHVybmNvZGUsIDEpCisgICAgICAgICMgV2UgdXNlIGEgc2VwYXJhdGUgcHJvY2VzcyBiZWNhdXNlIHRoZSB1bmljb2RlZGF0YSBtb2R1bGUgbWF5IGFscmVhZHkKKyAgICAgICAgIyBoYXZlIGJlZW4gbG9hZGVkIGluIHRoaXMgcHJvY2Vzcy4KKyAgICAgICAgcmVzdWx0ID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoIi1jIiwgY29kZSkKICAgICAgICAgZXJyb3IgPSAiU3ludGF4RXJyb3I6ICh1bmljb2RlIGVycm9yKSBcXE4gZXNjYXBlcyBub3Qgc3VwcG9ydGVkICIgXAogICAgICAgICAgICAgIihjYW4ndCBsb2FkIHVuaWNvZGVkYXRhIG1vZHVsZSkiCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3IsIHBvcGVuLnN0ZGVyci5yZWFkKCkuZGVjb2RlKCJhc2NpaSIpKQotICAgICAgICBwb3Blbi5zdGRlcnIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEluKGVycm9yLCByZXN1bHQuZXJyLmRlY29kZSgiYXNjaWkiKSkKIAogICAgIGRlZiB0ZXN0X2RlY2ltYWxfbnVtZXJpY19jb25zaXN0ZW50KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBkZWNpbWFsIGFuZCBudW1lcmljIGFyZSBjb25zaXN0ZW50LApAQCAtMzEyLDEyICszMDgsNSBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXHUlLjR4IHNob3VsZCBub3QgYmUgYSBsaW5lYnJlYWsiICUgaSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIFVuaWNvZGVNaXNjVGVzdCwKLSAgICAgICAgVW5pY29kZU1ldGhvZHNUZXN0LAotICAgICAgICBVbmljb2RlRnVuY3Rpb25zVGVzdAotICAgICkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bnBhY2sucHkgYi9MaWIvdGVzdC90ZXN0X3VucGFjay5weQppbmRleCBiMWM0ODNkLi5kMWNjYjM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VucGFjay5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VucGFjay5weQpAQCAtNzYsNyArNzYsNyBAQAogICAgID4+PiBhLCBiLCBjLCBkID0gU2VxKCkKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAuLi4KLSAgICBWYWx1ZUVycm9yOiBuZWVkIG1vcmUgdGhhbiAzIHZhbHVlcyB0byB1bnBhY2sKKyAgICBWYWx1ZUVycm9yOiBub3QgZW5vdWdoIHZhbHVlcyB0byB1bnBhY2sgKGV4cGVjdGVkIDQsIGdvdCAzKQogCiBVbnBhY2tpbmcgc2VxdWVuY2UgdG9vIGxvbmcKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bnBhY2tfZXgucHkgYi9MaWIvdGVzdC90ZXN0X3VucGFja19leC5weQppbmRleCBhZTJkY2JkLi43NDM0NmI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VucGFja19leC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VucGFja19leC5weQpAQCAtNzEsOCArNzEsMTkzIEBACiAgICAgPj4+IGEgPT0gMCBhbmQgYiA9PSBbMSwgMiwgM10gYW5kIGMgPT0gNCBhbmQgZCA9PSBbMCwgMSwgMiwgM10gYW5kIGUgPT0gNAogICAgIFRydWUKIAorQXNzaWdubWVudCB1bnBhY2tpbmcKKworICAgID4+PiBhLCBiLCAqYyA9IHJhbmdlKDUpCisgICAgPj4+IGEsIGIsIGMKKyAgICAoMCwgMSwgWzIsIDMsIDRdKQorICAgID4+PiAqYSwgYiwgYyA9IGEsIGIsICpjCisgICAgPj4+IGEsIGIsIGMKKyAgICAoWzAsIDEsIDJdLCAzLCA0KQorCitTZXQgZGlzcGxheSBlbGVtZW50IHVucGFja2luZworCisgICAgPj4+IGEgPSBbMSwgMiwgM10KKyAgICA+Pj4gc29ydGVkKHsxLCAqYSwgMCwgNH0pCisgICAgWzAsIDEsIDIsIDMsIDRdCisKKyAgICA+Pj4gezEsICoxLCAwLCA0fQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogJ2ludCcgb2JqZWN0IGlzIG5vdCBpdGVyYWJsZQorCitEaWN0IGRpc3BsYXkgZWxlbWVudCB1bnBhY2tpbmcKKworICAgID4+PiBrd2RzID0geyd6JzogMCwgJ3cnOiAxMn0KKyAgICA+Pj4gc29ydGVkKHsneCc6IDEsICd5JzogMiwgKiprd2RzfS5pdGVtcygpKQorICAgIFsoJ3cnLCAxMiksICgneCcsIDEpLCAoJ3knLCAyKSwgKCd6JywgMCldCisKKyAgICA+Pj4gc29ydGVkKHsqKnsneCc6IDF9LCAneSc6IDIsICoqeyd6JzogM319Lml0ZW1zKCkpCisgICAgWygneCcsIDEpLCAoJ3knLCAyKSwgKCd6JywgMyldCisKKyAgICA+Pj4gc29ydGVkKHsqKnsneCc6IDF9LCAneSc6IDIsICoqeyd4JzogM319Lml0ZW1zKCkpCisgICAgWygneCcsIDMpLCAoJ3knLCAyKV0KKworICAgID4+PiBzb3J0ZWQoeyoqeyd4JzogMX0sICoqeyd4JzogM30sICd4JzogNH0uaXRlbXMoKSkKKyAgICBbKCd4JywgNCldCisKKyAgICA+Pj4geyoqe319CisgICAge30KKworICAgID4+PiBhID0ge30KKyAgICA+Pj4geyoqYX1bMF0gPSAxCisgICAgPj4+IGEKKyAgICB7fQorCisgICAgPj4+IHsqKjF9CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFR5cGVFcnJvcjogJ2ludCcgb2JqZWN0IGlzIG5vdCBhIG1hcHBpbmcKKworICAgID4+PiB7KipbXX0KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVHlwZUVycm9yOiAnbGlzdCcgb2JqZWN0IGlzIG5vdCBhIG1hcHBpbmcKKworICAgID4+PiBsZW4oZXZhbCgieyIgKyAiLCAiLmpvaW4oIioqe3t7fToge319fSIuZm9ybWF0KGksIGkpCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKSkgKyAifSIpKQorICAgIDEwMDAKKworICAgID4+PiB7MDoxLCAqKnswOjJ9LCAwOjMsIDA6NH0KKyAgICB7MDogNH0KKworTGlzdCBjb21wcmVoZW5zaW9uIGVsZW1lbnQgdW5wYWNraW5nCisKKyAgICA+Pj4gYSwgYiwgYyA9IFswLCAxLCAyXSwgMywgNAorICAgID4+PiBbKmEsIGIsIGNdCisgICAgWzAsIDEsIDIsIDMsIDRdCisKKyAgICA+Pj4gbCA9IFthLCAoMywgNCksIHs1fSwgezY6IE5vbmV9LCAoaSBmb3IgaSBpbiByYW5nZSg3LCAxMCkpXQorICAgID4+PiBbKml0ZW0gZm9yIGl0ZW0gaW4gbF0KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgU3ludGF4RXJyb3I6IGl0ZXJhYmxlIHVucGFja2luZyBjYW5ub3QgYmUgdXNlZCBpbiBjb21wcmVoZW5zaW9uCisKKyAgICA+Pj4gWypbMCwgMV0gZm9yIGkgaW4gcmFuZ2UoMTApXQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogaXRlcmFibGUgdW5wYWNraW5nIGNhbm5vdCBiZSB1c2VkIGluIGNvbXByZWhlbnNpb24KKworICAgID4+PiBbKidhJyBmb3IgaSBpbiByYW5nZSgxMCldCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFN5bnRheEVycm9yOiBpdGVyYWJsZSB1bnBhY2tpbmcgY2Fubm90IGJlIHVzZWQgaW4gY29tcHJlaGVuc2lvbgorCisgICAgPj4+IFsqW10gZm9yIGkgaW4gcmFuZ2UoMTApXQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogaXRlcmFibGUgdW5wYWNraW5nIGNhbm5vdCBiZSB1c2VkIGluIGNvbXByZWhlbnNpb24KKworR2VuZXJhdG9yIGV4cHJlc3Npb24gaW4gZnVuY3Rpb24gYXJndW1lbnRzCisKKyAgICA+Pj4gbGlzdCgqeCBmb3IgeCBpbiAocmFuZ2UoNSkgZm9yIGkgaW4gcmFuZ2UoMykpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICAgICAgbGlzdCgqeCBmb3IgeCBpbiAocmFuZ2UoNSkgZm9yIGkgaW4gcmFuZ2UoMykpKQorICAgICAgICAgICAgICAgICAgXgorICAgIFN5bnRheEVycm9yOiBpbnZhbGlkIHN5bnRheAorCisgICAgPj4+IGRpY3QoKip4IGZvciB4IGluIFt7MToyfV0pCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgICAgICBkaWN0KCoqeCBmb3IgeCBpbiBbezE6Mn1dKQorICAgICAgICAgICAgICAgICAgIF4KKyAgICBTeW50YXhFcnJvcjogaW52YWxpZCBzeW50YXgKKworSXRlcmFibGUgYXJndW1lbnQgdW5wYWNraW5nCisKKyAgICA+Pj4gcHJpbnQoKlsxXSwgKlsyXSwgMykKKyAgICAxIDIgMworCitNYWtlIHN1cmUgdGhhdCB0aGV5IGRvbid0IGNvcnJ1cHQgdGhlIHBhc3NlZC1pbiBkaWN0cy4KKworICAgID4+PiBkZWYgZih4LCB5KToKKyAgICAuLi4gICAgIHByaW50KHgsIHkpCisgICAgLi4uCisgICAgPj4+IG9yaWdpbmFsX2RpY3QgPSB7J3gnOiAxfQorICAgID4+PiBmKCoqb3JpZ2luYWxfZGljdCwgeT0yKQorICAgIDEgMgorICAgID4+PiBvcmlnaW5hbF9kaWN0CisgICAgeyd4JzogMX0KKwogTm93IGZvciBzb21lIGZhaWx1cmVzCiAKK01ha2Ugc3VyZSB0aGUgcmFpc2VkIGVycm9ycyBhcmUgcmlnaHQgZm9yIGtleXdvcmQgYXJndW1lbnQgdW5wYWNraW5ncworCisgICAgPj4+IGZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBNdXRhYmxlTWFwcGluZworICAgID4+PiBjbGFzcyBDcmF6eURpY3QoTXV0YWJsZU1hcHBpbmcpOgorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHNlbGYuZCA9IHt9CisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgLi4uICAgICAgICAgZm9yIHggaW4gc2VsZi5kLl9faXRlcl9fKCk6CisgICAgLi4uICAgICAgICAgICAgIGlmIHggPT0gJ2MnOgorICAgIC4uLiAgICAgICAgICAgICAgICAgc2VsZi5kWyd6J10gPSAxMAorICAgIC4uLiAgICAgICAgICAgICB5aWVsZCB4CisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgayk6CisgICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYuZFtrXQorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgLi4uICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmQpCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaywgdik6CisgICAgLi4uICAgICAgICAgc2VsZi5kW2tdID0gdgorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGspOgorICAgIC4uLiAgICAgICAgIGRlbCBzZWxmLmRba10KKyAgICAuLi4KKyAgICA+Pj4gZCA9IENyYXp5RGljdCgpCisgICAgPj4+IGQuZCA9IHtjaHIob3JkKCdhJykgKyB4KTogeCBmb3IgeCBpbiByYW5nZSg1KX0KKyAgICA+Pj4gZSA9IHsqKmR9CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFJ1bnRpbWVFcnJvcjogZGljdGlvbmFyeSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbgorCisgICAgPj4+IGQuZCA9IHtjaHIob3JkKCdhJykgKyB4KTogeCBmb3IgeCBpbiByYW5nZSg1KX0KKyAgICA+Pj4gZGVmIGYoKiprd2FyZ3MpOiBwcmludChrd2FyZ3MpCisgICAgPj4+IGYoKipkKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBSdW50aW1lRXJyb3I6IGRpY3Rpb25hcnkgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24KKworT3ZlcnJpZGRlbiBwYXJhbWV0ZXJzCisKKyAgICA+Pj4gZih4PTUsICoqeyd4JzogM30sIHk9MikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50ICd4JworCisgICAgPj4+IGYoKip7J3gnOiAzfSwgeD01LCB5PTIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCAneCcKKworICAgID4+PiBmKCoqeyd4JzogM30sICoqeyd4JzogNX0sIHk9MikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50ICd4JworCisgICAgPj4+IGYoeD01LCAqKnsneCc6IDN9LCAqKnsneCc6IDJ9KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJ3gnCisKKyAgICA+Pj4gZigqKnsxOiAzfSwgKip7MTogNX0pCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkga2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzCisKIFVucGFja2luZyBub24tc2VxdWVuY2UKIAogICAgID4+PiBhLCAqYiA9IDcKQEAgLTg1LDcgKzI3MCwxNCBAQAogICAgID4+PiBhLCAqYiwgYywgZCwgZSA9IFNlcSgpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgVmFsdWVFcnJvcjogbmVlZCBtb3JlIHRoYW4gMyB2YWx1ZXMgdG8gdW5wYWNrCisgICAgVmFsdWVFcnJvcjogbm90IGVub3VnaCB2YWx1ZXMgdG8gdW5wYWNrIChleHBlY3RlZCBhdCBsZWFzdCA0LCBnb3QgMykKKworVW5wYWNraW5nIHNlcXVlbmNlIHRvbyBzaG9ydCBhbmQgdGFyZ2V0IGFwcGVhcnMgbGFzdAorCisgICAgPj4+IGEsIGIsIGMsIGQsICplID0gU2VxKCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBub3QgZW5vdWdoIHZhbHVlcyB0byB1bnBhY2sgKGV4cGVjdGVkIGF0IGxlYXN0IDQsIGdvdCAzKQogCiBVbnBhY2tpbmcgYSBzZXF1ZW5jZSB3aGVyZSB0aGUgdGVzdCBmb3IgdG9vIGxvbmcgcmFpc2VzIGEgZGlmZmVyZW50IGtpbmQgb2YKIGVycm9yCkBAIC0xMzEsMTcgKzMyMywxNyBAQAogICAgID4+PiAqYSAjIGRvY3Rlc3Q6K0VMTElQU0lTCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6IGNhbiB1c2Ugc3RhcnJlZCBleHByZXNzaW9uIG9ubHkgYXMgYXNzaWdubWVudCB0YXJnZXQKKyAgICBTeW50YXhFcnJvcjogY2FuJ3QgdXNlIHN0YXJyZWQgZXhwcmVzc2lvbiBoZXJlCiAKICAgICA+Pj4gKjEgIyBkb2N0ZXN0OitFTExJUFNJUwogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgotICAgIFN5bnRheEVycm9yOiBjYW4gdXNlIHN0YXJyZWQgZXhwcmVzc2lvbiBvbmx5IGFzIGFzc2lnbm1lbnQgdGFyZ2V0CisgICAgU3ludGF4RXJyb3I6IGNhbid0IHVzZSBzdGFycmVkIGV4cHJlc3Npb24gaGVyZQogCiAgICAgPj4+IHggPSAqYSAjIGRvY3Rlc3Q6K0VMTElQU0lTCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgU3ludGF4RXJyb3I6IGNhbiB1c2Ugc3RhcnJlZCBleHByZXNzaW9uIG9ubHkgYXMgYXNzaWdubWVudCB0YXJnZXQKKyAgICBTeW50YXhFcnJvcjogY2FuJ3QgdXNlIHN0YXJyZWQgZXhwcmVzc2lvbiBoZXJlCiAKIFNvbWUgc2l6ZSBjb25zdHJhaW50cyAoYWxsIGZhaWwuKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CmluZGV4IDg3MTcxZTkuLmMyNmM1MmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CkBAIC0xLDQgKzEsNCBAQAotIiIiUmVncmVzc3Npb24gdGVzdHMgZm9yIHVybGxpYiIiIgorIiIiUmVncmVzc3Npb24gdGVzdHMgZm9yIHdoYXQgd2FzIGluIFB5dGhvbiAyJ3MgInVybGxpYiIgbW9kdWxlIiIiCiAKIGltcG9ydCB1cmxsaWIucGFyc2UKIGltcG9ydCB1cmxsaWIucmVxdWVzdApAQCAtMTAsNyArMTAsMTAgQEAKIGZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IG9zCi1pbXBvcnQgc3NsCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSBudHVybDJwYXRoIGltcG9ydCB1cmwycGF0aG5hbWUsIHBhdGhuYW1lMnVybApAQCAtMzYsMTAgKzM5LDcgQEAKICAgICBpZiBwcm94aWVzIGlzIG5vdCBOb25lOgogICAgICAgICBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcihwcm94aWVzPXByb3hpZXMpCiAgICAgZWxpZiBub3QgX3VybG9wZW5lcjoKLSAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKAotICAgICAgICAgICAgICAgICgnRmFuY3lVUkxvcGVuZXIgc3R5bGUgb2YgaW52b2tpbmcgcmVxdWVzdHMgaXMgZGVwcmVjYXRlZC4nLAotICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgotICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliLnJlcXVlc3QuRmFuY3lVUkxvcGVuZXIoKQorICAgICAgICBvcGVuZXIgPSBGYW5jeVVSTG9wZW5lcigpCiAgICAgICAgIF91cmxvcGVuZXIgPSBvcGVuZXIKICAgICBlbHNlOgogICAgICAgICBvcGVuZXIgPSBfdXJsb3BlbmVyCkBAIC00OSw2ICs0OSwxMyBAQAogICAgICAgICByZXR1cm4gb3BlbmVyLm9wZW4odXJsLCBkYXRhKQogCiAKK2RlZiBGYW5jeVVSTG9wZW5lcigpOgorICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygKKyAgICAgICAgICAgICgnRmFuY3lVUkxvcGVuZXIgc3R5bGUgb2YgaW52b2tpbmcgcmVxdWVzdHMgaXMgZGVwcmVjYXRlZC4nLAorICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJldHVybiB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcigpCisKKwogZGVmIGZha2VodHRwKGZha2VkYXRhKToKICAgICBjbGFzcyBGYWtlU29ja2V0KGlvLkJ5dGVzSU8pOgogICAgICAgICBpb19yZWZzID0gMQpAQCAtNzksMTAgKzg2LDExIEBACiAKICAgICAgICAgIyBidWZmZXIgdG8gc3RvcmUgZGF0YSBmb3IgdmVyaWZpY2F0aW9uIGluIHVybG9wZW4gdGVzdHMuCiAgICAgICAgIGJ1ZiA9IE5vbmUKLSAgICAgICAgZmFrZXNvY2sgPSBGYWtlU29ja2V0KGZha2VkYXRhKQogCiAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgotICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5mYWtlc29jaworICAgICAgICAgICAgc2VsZi5zb2NrID0gRmFrZVNvY2tldChzZWxmLmZha2VkYXRhKQorICAgICAgICAgICAgdHlwZShzZWxmKS5mYWtlc29jayA9IHNlbGYuc29jaworICAgIEZha2VIVFRQQ29ubmVjdGlvbi5mYWtlZGF0YSA9IGZha2VkYXRhCiAKICAgICByZXR1cm4gRmFrZUhUVFBDb25uZWN0aW9uCiAKQEAgLTIxOSw4ICsyMjcsMTAgQEAKICAgICAgICAgIyBnZXRwcm94aWVzX2Vudmlyb25tZW50IHVzZSBsb3dlcmVkIGNhc2UgdHJ1bmNhdGVkIChubyAnX3Byb3h5Jykga2V5cwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdsb2NhbGhvc3QnLCBwcm94aWVzWydubyddKQogICAgICAgICAjIExpc3Qgb2Ygbm9fcHJveGllcyB3aXRoIHNwYWNlLgotICAgICAgICBzZWxmLmVudi5zZXQoJ05PX1BST1hZJywgJ2xvY2FsaG9zdCwgYW5vdGhlcmRvbWFpbi5jb20sIG5ld2RvbWFpbi5jb20nKQorICAgICAgICBzZWxmLmVudi5zZXQoJ05PX1BST1hZJywgJ2xvY2FsaG9zdCwgYW5vdGhlcmRvbWFpbi5jb20sIG5ld2RvbWFpbi5jb206MTIzNCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmxsaWIucmVxdWVzdC5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoJ2Fub3RoZXJkb21haW4uY29tJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmxsaWIucmVxdWVzdC5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoJ2Fub3RoZXJkb21haW4uY29tOjg4ODgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudCgnbmV3ZG9tYWluLmNvbToxMjM0JykpCiAKICAgICBkZWYgdGVzdF9wcm94eV9jZ2lfaWdub3JlKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0yMzQsNiArMjQ0LDU0IEBACiAgICAgICAgICAgICBzZWxmLmVudi51bnNldCgnUkVRVUVTVF9NRVRIT0QnKQogICAgICAgICAgICAgc2VsZi5lbnYudW5zZXQoJ0hUVFBfUFJPWFknKQogCisgICAgZGVmIHRlc3RfcHJveHlfYnlwYXNzX2Vudmlyb25tZW50X2hvc3RfbWF0Y2goc2VsZik6CisgICAgICAgIGJ5cGFzcyA9IHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudAorICAgICAgICBzZWxmLmVudi5zZXQoJ05PX1BST1hZJywKKyAgICAgICAgICAgICdsb2NhbGhvc3QsIGFub3RoZXJkb21haW4uY29tLCBuZXdkb21haW4uY29tOjEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYnlwYXNzKCdsb2NhbGhvc3QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ5cGFzcygnTG9jYWxIb3N0JykpICAgICAgICAgICAgICAgICAjIE1peGVkQ2FzZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYnlwYXNzKCdMT0NBTEhPU1QnKSkgICAgICAgICAgICAgICAgICMgVVBQRVJDQVNFCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShieXBhc3MoJ25ld2RvbWFpbi5jb206MTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYnlwYXNzKCdhbm90aGVyZG9tYWluLmNvbTo4ODg4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShieXBhc3MoJ3d3dy5uZXdkb21haW4uY29tOjEyMzQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShieXBhc3MoJ3ByZWxvY2FsaG9zdCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ5cGFzcygnbmV3ZG9tYWluLmNvbScpKSAgICAgICAgICAgICMgbm8gcG9ydAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ5cGFzcygnbmV3ZG9tYWluLmNvbToxMjM1JykpICAgICAgICMgd3JvbmcgcG9ydAorCitjbGFzcyBQcm94eVRlc3RzX3dpdGhPcmRlcmVkRW52KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIHRlc3QgY29uZGl0aW9ucywgd2hlcmUgdmFyaWFibGUgb3JkZXIgX2lzXyBzaWduaWZpY2FudAorICAgICAgICBzZWxmLl9zYXZlZF9lbnYgPSBvcy5lbnZpcm9uCisgICAgICAgICMgTW9ua2V5IHBhdGNoIG9zLmVudmlyb24sIHN0YXJ0IHdpdGggZW1wdHkgZmFrZSBlbnZpcm9ubWVudAorICAgICAgICBvcy5lbnZpcm9uID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uID0gc2VsZi5fc2F2ZWRfZW52CisKKyAgICBkZWYgdGVzdF9nZXRwcm94aWVzX2Vudmlyb25tZW50X3ByZWZlcl9sb3dlcmNhc2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBsb3dlcmNhc2UgcHJlZmVyZW5jZSB3aXRoIHJlbW92YWwKKyAgICAgICAgb3MuZW52aXJvblsnbm9fcHJveHknXSA9ICcnCisgICAgICAgIG9zLmVudmlyb25bJ05vX1Byb3h5J10gPSAnbG9jYWxob3N0JworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudCgnbG9jYWxob3N0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodXJsbGliLnJlcXVlc3QucHJveHlfYnlwYXNzX2Vudmlyb25tZW50KCdhcmJpdHJhcnknKSkKKyAgICAgICAgb3MuZW52aXJvblsnaHR0cF9wcm94eSddID0gJycKKyAgICAgICAgb3MuZW52aXJvblsnSFRUUF9QUk9YWSddID0gJ2h0dHA6Ly9zb21ld2hlcmU6MzEyOCcKKyAgICAgICAgcHJveGllcyA9IHVybGxpYi5yZXF1ZXN0LmdldHByb3hpZXNfZW52aXJvbm1lbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt9LCBwcm94aWVzKQorICAgICAgICAjIFRlc3QgbG93ZXJjYXNlIHByZWZlcmVuY2Ugb2YgcHJveHkgYnlwYXNzIGFuZCBjb3JyZWN0IG1hdGNoaW5nIGluY2x1ZGluZyBwb3J0cworICAgICAgICBvcy5lbnZpcm9uWydub19wcm94eSddID0gJ2xvY2FsaG9zdCwgbm9wcm94eS5jb20sIG15LnByb3h5OjEyMzQnCisgICAgICAgIG9zLmVudmlyb25bJ05vX1Byb3h5J10gPSAneHl6LmNvbScKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudCgnbG9jYWxob3N0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmxsaWIucmVxdWVzdC5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoJ25vcHJveHkuY29tOjU2NzgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudCgnbXkucHJveHk6MTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudCgnbXkucHJveHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1cmxsaWIucmVxdWVzdC5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoJ2FyYml0cmFyeScpKQorICAgICAgICAjIFRlc3QgbG93ZXJjYXNlIHByZWZlcmVuY2Ugd2l0aCByZXBsYWNlbWVudAorICAgICAgICBvcy5lbnZpcm9uWydodHRwX3Byb3h5J10gPSAnaHR0cDovL3NvbWV3aGVyZTozMTI4JworICAgICAgICBvcy5lbnZpcm9uWydIdHRwX1Byb3h5J10gPSAnaHR0cDovL3NvbWV3aGVyZWVsc2U6MzEyOCcKKyAgICAgICAgcHJveGllcyA9IHVybGxpYi5yZXF1ZXN0LmdldHByb3hpZXNfZW52aXJvbm1lbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdodHRwOi8vc29tZXdoZXJlOjMxMjgnLCBwcm94aWVzWydodHRwJ10pCiAKIGNsYXNzIHVybG9wZW5fSHR0cFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBGYWtlSFRUUE1peGluLCBGYWtlRlRQTWl4aW4pOgogICAgICIiIlRlc3QgdXJsb3BlbigpIG9wZW5pbmcgYSBmYWtlIGh0dHAgY29ubmVjdGlvbi4iIiIKQEAgLTMwMSwxMSArMzU5LDI2IEBACiBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCiAnJycpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5IVFRQRXJyb3IsIHVybG9wZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3B5dGhvbi5vcmcvIikKKyAgICAgICAgICAgIG1zZyA9ICJSZWRpcmVjdGlvbiB0byB1cmwgJ2ZpbGU6IgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHVybGxpYi5lcnJvci5IVFRQRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAgICAgdXJsb3BlbigiaHR0cDovL3B5dGhvbi5vcmcvIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF9saW1pdF9pbmRlcGVuZGVudChzZWxmKToKKyAgICAgICAgIyBUaWNrZXQgIzEyOTIzOiBtYWtlIHN1cmUgaW5kZXBlbmRlbnQgcmVxdWVzdHMgZWFjaCB1c2UgdGhlaXIKKyAgICAgICAgIyBvd24gcmV0cnkgbGltaXQuCisgICAgICAgIGZvciBpIGluIHJhbmdlKEZhbmN5VVJMb3BlbmVyKCkubWF4dHJpZXMpOgorICAgICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycnSFRUUC8xLjEgMzAyIEZvdW5kCitMb2NhdGlvbjogZmlsZTovL2d1aWRvY29tcHV0ZXIuYXRob21lLmNvbTovcHl0aG9uL2xpY2Vuc2UKK0Nvbm5lY3Rpb246IGNsb3NlCisnJycpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLkhUVFBFcnJvciwgdXJsb3BlbiwKKyAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9zb21ldGhpbmciKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQorCiAgICAgZGVmIHRlc3RfZW1wdHlfc29ja2V0KHNlbGYpOgogICAgICAgICAjIHVybG9wZW4oKSByYWlzZXMgT1NFcnJvciBpZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgZG9lcyBub3Qgc2VuZCBhbnkKICAgICAgICAgIyBkYXRhLiAoIzE2ODAyMzApCkBAIC0zOTMsNiArNDY2LDcgQEAKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJyxEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lcigpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICJzc2wgbW9kdWxlIHJlcXVpcmVkIikKICAgICBkZWYgdGVzdF9jYWZpbGVfYW5kX2NvbnRleHQoc2VsZik6CiAgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CkBAIC0xMzQ0LDcgKzE0MTgsNyBAQAogIyAgICAgc2Vydi5zZXR0aW1lb3V0KDMpCiAjICAgICBzZXJ2LnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCiAjICAgICBzZXJ2LmJpbmQoKCIiLCA5MDkzKSkKLSMgICAgIHNlcnYubGlzdGVuKDUpCisjICAgICBzZXJ2Lmxpc3RlbigpCiAjICAgICB0cnk6CiAjICAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKICMgICAgICAgICBjb25uLnNlbmQoIjEgSG9sYSBtdW5kb1xuIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQppbmRleCA3ZDQxZWExLi5lZGE3Y2NjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0xMSw3ICsxMSwxMCBAQAogaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiAjIFRoZSBwcm94eSBieXBhc3MgbWV0aG9kIGltcG9ydGVkIGJlbG93IGhhcyBsb2dpYyBzcGVjaWZpYyB0byB0aGUgT1NYCiAjIHByb3h5IGNvbmZpZyBkYXRhIHN0cnVjdHVyZSBidXQgaXMgdGVzdGFibGUgb24gYWxsIHBsYXRmb3Jtcy4KLWZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IFJlcXVlc3QsIE9wZW5lckRpcmVjdG9yLCBfcGFyc2VfcHJveHksIF9wcm94eV9ieXBhc3NfbWFjb3N4X3N5c2NvbmYKK2Zyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IChSZXF1ZXN0LCBPcGVuZXJEaXJlY3RvciwgSFRUUEJhc2ljQXV0aEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFBhc3N3b3JkTWdyV2l0aFByaW9yQXV0aCwgX3BhcnNlX3Byb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wcm94eV9ieXBhc3NfbWFjb3N4X3N5c2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlcikKIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQogaW1wb3J0IHVybGxpYi5lcnJvcgogaW1wb3J0IGh0dHAuY2xpZW50CkBAIC0yMSw2ICsyNCw3IEBACiAjIENhY2hlRlRQSGFuZGxlciAoaGFyZCB0byB3cml0ZSkKICMgcGFyc2Vfa2Vxdl9saXN0LCBwYXJzZV9odHRwX2xpc3QsIEhUVFBEaWdlc3RBdXRoSGFuZGxlcgogCisKIGNsYXNzIFRyaXZpYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9fX2FsbF9fKHNlbGYpOgpAQCAtNzEsNiArNzUsNyBAQAogICAgICAgICBlcnIgPSB1cmxsaWIuZXJyb3IuVVJMRXJyb3IoJ3JlYXNvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyLnJlYXNvbiwgc3RyKGVycikpCiAKKwogY2xhc3MgUmVxdWVzdEhkcnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9yZXF1ZXN0X2hlYWRlcnNfZGljdChzZWxmKToKQEAgLTEzMCw3ICsxMzUsNiBAQAogICAgICAgICByZXEucmVtb3ZlX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5oYXNfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpKQogCi0KICAgICBkZWYgdGVzdF9wYXNzd29yZF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICBtZ3IgPSB1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3IoKQogICAgICAgICBhZGQgPSBtZ3IuYWRkX3Bhc3N3b3JkCkBAIC0yMzQsNDMgKzIzOCw2MCBAQAogCiBjbGFzcyBNb2NrT3BlbmVyOgogICAgIGFkZGhlYWRlcnMgPSBbXQorCiAgICAgZGVmIG9wZW4oc2VsZiwgcmVxLCBkYXRhPU5vbmUsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKICAgICAgICAgc2VsZi5yZXEsIHNlbGYuZGF0YSwgc2VsZi50aW1lb3V0ID0gcmVxLCBkYXRhLCB0aW1lb3V0CisKICAgICBkZWYgZXJyb3Ioc2VsZiwgcHJvdG8sICphcmdzKToKICAgICAgICAgc2VsZi5wcm90bywgc2VsZi5hcmdzID0gcHJvdG8sIGFyZ3MKIAorCiBjbGFzcyBNb2NrRmlsZToKLSAgICBkZWYgcmVhZChzZWxmLCBjb3VudD1Ob25lKTogcGFzcwotICAgIGRlZiByZWFkbGluZShzZWxmLCBjb3VudD1Ob25lKTogcGFzcwotICAgIGRlZiBjbG9zZShzZWxmKTogcGFzcworICAgIGRlZiByZWFkKHNlbGYsIGNvdW50PU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgY291bnQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcGFzcworCiAKIGNsYXNzIE1vY2tIZWFkZXJzKGRpY3QpOgogICAgIGRlZiBnZXRoZWFkZXJzKHNlbGYsIG5hbWUpOgogICAgICAgICByZXR1cm4gbGlzdChzZWxmLnZhbHVlcygpKQogCisKIGNsYXNzIE1vY2tSZXNwb25zZShpby5TdHJpbmdJTyk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGUsIG1zZywgaGVhZGVycywgZGF0YSwgdXJsPU5vbmUpOgogICAgICAgICBpby5TdHJpbmdJTy5fX2luaXRfXyhzZWxmLCBkYXRhKQogICAgICAgICBzZWxmLmNvZGUsIHNlbGYubXNnLCBzZWxmLmhlYWRlcnMsIHNlbGYudXJsID0gY29kZSwgbXNnLCBoZWFkZXJzLCB1cmwKKwogICAgIGRlZiBpbmZvKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXJzCisKICAgICBkZWYgZ2V0dXJsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi51cmwKIAorCiBjbGFzcyBNb2NrQ29va2llSmFyOgogICAgIGRlZiBhZGRfY29va2llX2hlYWRlcihzZWxmLCByZXF1ZXN0KToKICAgICAgICAgc2VsZi5hY2hfcmVxID0gcmVxdWVzdAorCiAgICAgZGVmIGV4dHJhY3RfY29va2llcyhzZWxmLCByZXNwb25zZSwgcmVxdWVzdCk6CiAgICAgICAgIHNlbGYuZWNfcmVxLCBzZWxmLmVjX3IgPSByZXF1ZXN0LCByZXNwb25zZQogCisKIGNsYXNzIEZha2VNZXRob2Q6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhfbmFtZSwgYWN0aW9uLCBoYW5kbGUpOgogICAgICAgICBzZWxmLm1ldGhfbmFtZSA9IG1ldGhfbmFtZQogICAgICAgICBzZWxmLmhhbmRsZSA9IGhhbmRsZQogICAgICAgICBzZWxmLmFjdGlvbiA9IGFjdGlvbgorCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlKHNlbGYubWV0aF9uYW1lLCBzZWxmLmFjdGlvbiwgKmFyZ3MpCiAKKwogY2xhc3MgTW9ja0hUVFBSZXNwb25zZShpby5JT0Jhc2UpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcCwgbXNnLCBzdGF0dXMsIHJlYXNvbik6CiAgICAgICAgIHNlbGYuZnAgPSBmcApAQCAtMzI0LDI0ICszNDUsMzEgQEAKICAgICAgICAgICAgIHNlbGYuZGF0YSA9IGJvZHkKICAgICAgICAgaWYgc2VsZi5yYWlzZV9vbl9lbmRoZWFkZXJzOgogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCisKICAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6CiAgICAgICAgIHJldHVybiBNb2NrSFRUUFJlc3BvbnNlKE1vY2tGaWxlKCksIHt9LCAyMDAsICJPSyIpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIHBhc3MKIAorCiBjbGFzcyBNb2NrSGFuZGxlcjoKICAgICAjIHVzZWZ1bCBmb3IgdGVzdGluZyBoYW5kbGVyIG1hY2hpbmVyeQogICAgICMgc2VlIGFkZF9vcmRlcmVkX21vY2tfaGFuZGxlcnMoKSBkb2NzdHJpbmcKICAgICBoYW5kbGVyX29yZGVyID0gNTAwCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kcyk6CiAgICAgICAgIHNlbGYuX2RlZmluZV9tZXRob2RzKG1ldGhvZHMpCisKICAgICBkZWYgX2RlZmluZV9tZXRob2RzKHNlbGYsIG1ldGhvZHMpOgogICAgICAgICBmb3Igc3BlYyBpbiBtZXRob2RzOgotICAgICAgICAgICAgaWYgbGVuKHNwZWMpID09IDI6IG5hbWUsIGFjdGlvbiA9IHNwZWMKLSAgICAgICAgICAgIGVsc2U6IG5hbWUsIGFjdGlvbiA9IHNwZWMsIE5vbmUKKyAgICAgICAgICAgIGlmIGxlbihzcGVjKSA9PSAyOgorICAgICAgICAgICAgICAgIG5hbWUsIGFjdGlvbiA9IHNwZWMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSwgYWN0aW9uID0gc3BlYywgTm9uZQogICAgICAgICAgICAgbWV0aCA9IEZha2VNZXRob2QobmFtZSwgYWN0aW9uLCBzZWxmLmhhbmRsZSkKICAgICAgICAgICAgIHNldGF0dHIoc2VsZi5fX2NsYXNzX18sIG5hbWUsIG1ldGgpCisKICAgICBkZWYgaGFuZGxlKHNlbGYsIGZuX25hbWUsIGFjdGlvbiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgIHNlbGYucGFyZW50LmNhbGxzLmFwcGVuZCgoc2VsZiwgZm5fbmFtZSwgYXJncywga3dkcykpCiAgICAgICAgIGlmIGFjdGlvbiBpcyBOb25lOgpAQCAtMzY0LDE2ICszOTIsMjEgQEAKICAgICAgICAgZWxpZiBhY3Rpb24gPT0gInJhaXNlIjoKICAgICAgICAgICAgIHJhaXNlIHVybGxpYi5lcnJvci5VUkxFcnJvcigiYmxhaCIpCiAgICAgICAgIGFzc2VydCBGYWxzZQotICAgIGRlZiBjbG9zZShzZWxmKTogcGFzcworCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKICAgICBkZWYgYWRkX3BhcmVudChzZWxmLCBwYXJlbnQpOgogICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAogICAgICAgICBzZWxmLnBhcmVudC5jYWxscyA9IFtdCisKICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3RoZXIsICJoYW5kbGVyX29yZGVyIik6CiAgICAgICAgICAgICAjIE5vIGhhbmRsZXJfb3JkZXIsIGxlYXZlIGluIG9yaWdpbmFsIG9yZGVyLiAgWXVjay4KICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZXJfb3JkZXIgPCBvdGhlci5oYW5kbGVyX29yZGVyCiAKKwogZGVmIGFkZF9vcmRlcmVkX21vY2tfaGFuZGxlcnMob3BlbmVyLCBtZXRoX3NwZWMpOgogICAgICIiIkNyZWF0ZSBNb2NrSGFuZGxlcnMgYW5kIGFkZCB0aGVtIHRvIGFuIE9wZW5lckRpcmVjdG9yLgogCkBAIC0zOTYsNyArNDI5LDkgQEAKICAgICBoYW5kbGVycyA9IFtdCiAgICAgY291bnQgPSAwCiAgICAgZm9yIG1ldGhzIGluIG1ldGhfc3BlYzoKLSAgICAgICAgY2xhc3MgTW9ja0hhbmRsZXJTdWJjbGFzcyhNb2NrSGFuZGxlcik6IHBhc3MKKyAgICAgICAgY2xhc3MgTW9ja0hhbmRsZXJTdWJjbGFzcyhNb2NrSGFuZGxlcik6CisgICAgICAgICAgICBwYXNzCisKICAgICAgICAgaCA9IE1vY2tIYW5kbGVyU3ViY2xhc3MobWV0aHMpCiAgICAgICAgIGguaGFuZGxlcl9vcmRlciArPSBjb3VudAogICAgICAgICBoLmFkZF9wYXJlbnQob3BlbmVyKQpAQCAtNDA1LDEyICs0NDAsMTQgQEAKICAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGgpCiAgICAgcmV0dXJuIGhhbmRsZXJzCiAKKwogZGVmIGJ1aWxkX3Rlc3Rfb3BlbmVyKCpoYW5kbGVyX2luc3RhbmNlcyk6CiAgICAgb3BlbmVyID0gT3BlbmVyRGlyZWN0b3IoKQogICAgIGZvciBoIGluIGhhbmRsZXJfaW5zdGFuY2VzOgogICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaCkKICAgICByZXR1cm4gb3BlbmVyCiAKKwogY2xhc3MgTW9ja0hUVFBIYW5kbGVyKHVybGxpYi5yZXF1ZXN0LkJhc2VIYW5kbGVyKToKICAgICAjIHVzZWZ1bCBmb3IgdGVzdGluZyByZWRpcmVjdGlvbnMgYW5kIGF1dGgKICAgICAjIHNlbmRzIHN1cHBsaWVkIGhlYWRlcnMgYW5kIGNvZGUgYXMgZmlyc3QgcmVzcG9uc2UKQEAgLTQxOSwxMSArNDU2LDEzIEBACiAgICAgICAgIHNlbGYuY29kZSA9IGNvZGUKICAgICAgICAgc2VsZi5oZWFkZXJzID0gaGVhZGVycwogICAgICAgICBzZWxmLnJlc2V0KCkKKwogICAgIGRlZiByZXNldChzZWxmKToKICAgICAgICAgc2VsZi5fY291bnQgPSAwCiAgICAgICAgIHNlbGYucmVxdWVzdHMgPSBbXQorCiAgICAgZGVmIGh0dHBfb3BlbihzZWxmLCByZXEpOgotICAgICAgICBpbXBvcnQgZW1haWwsIGh0dHAuY2xpZW50LCBjb3B5CisgICAgICAgIGltcG9ydCBlbWFpbCwgY29weQogICAgICAgICBzZWxmLnJlcXVlc3RzLmFwcGVuZChjb3B5LmRlZXBjb3B5KHJlcSkpCiAgICAgICAgIGlmIHNlbGYuX2NvdW50ID09IDA6CiAgICAgICAgICAgICBzZWxmLl9jb3VudCA9IHNlbGYuX2NvdW50ICsgMQpAQCAtNDM2LDIzICs0NzUsNDUgQEAKICAgICAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIlxyXG5cclxuIikKICAgICAgICAgICAgIHJldHVybiBNb2NrUmVzcG9uc2UoMjAwLCAiT0siLCBtc2csICIiLCByZXEuZ2V0X2Z1bGxfdXJsKCkpCiAKKwogY2xhc3MgTW9ja0hUVFBTSGFuZGxlcih1cmxsaWIucmVxdWVzdC5BYnN0cmFjdEhUVFBIYW5kbGVyKToKICAgICAjIFVzZWZ1bCBmb3IgdGVzdGluZyB0aGUgUHJveHktQXV0aG9yaXphdGlvbiByZXF1ZXN0IGJ5IHZlcmlmeWluZyB0aGUKICAgICAjIHByb3BlcnRpZXMgb2YgaHR0cGNvbgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICB1cmxsaWIucmVxdWVzdC5BYnN0cmFjdEhUVFBIYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlYnVnbGV2ZWw9MCk6CisgICAgICAgIHVybGxpYi5yZXF1ZXN0LkFic3RyYWN0SFRUUEhhbmRsZXIuX19pbml0X18oc2VsZiwgZGVidWdsZXZlbD1kZWJ1Z2xldmVsKQogICAgICAgICBzZWxmLmh0dHBjb25uID0gTW9ja0hUVFBDbGFzcygpCiAKICAgICBkZWYgaHR0cHNfb3BlbihzZWxmLCByZXEpOgogICAgICAgICByZXR1cm4gc2VsZi5kb19vcGVuKHNlbGYuaHR0cGNvbm4sIHJlcSkKIAorCitjbGFzcyBNb2NrSFRUUEhhbmRsZXJDaGVja0F1dGgodXJsbGliLnJlcXVlc3QuQmFzZUhhbmRsZXIpOgorICAgICMgdXNlZnVsIGZvciB0ZXN0aW5nIGF1dGgKKyAgICAjIHNlbmRzIHN1cHBsaWVkIGNvZGUgcmVzcG9uc2UKKyAgICAjIGNoZWNrcyBpZiBhdXRoIGhlYWRlciBpcyBzcGVjaWZpZWQgaW4gcmVxdWVzdAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb2RlKToKKyAgICAgICAgc2VsZi5jb2RlID0gY29kZQorICAgICAgICBzZWxmLmhhc19hdXRoX2hlYWRlciA9IEZhbHNlCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuaGFzX2F1dGhfaGVhZGVyID0gRmFsc2UKKworICAgIGRlZiBodHRwX29wZW4oc2VsZiwgcmVxKToKKyAgICAgICAgaWYgcmVxLmhhc19oZWFkZXIoJ0F1dGhvcml6YXRpb24nKToKKyAgICAgICAgICAgIHNlbGYuaGFzX2F1dGhfaGVhZGVyID0gVHJ1ZQorICAgICAgICBuYW1lID0gaHR0cC5jbGllbnQucmVzcG9uc2VzW3NlbGYuY29kZV0KKyAgICAgICAgcmV0dXJuIE1vY2tSZXNwb25zZShzZWxmLmNvZGUsIG5hbWUsIE1vY2tGaWxlKCksICIiLCByZXEuZ2V0X2Z1bGxfdXJsKCkpCisKKworCiBjbGFzcyBNb2NrUGFzc3dvcmRNYW5hZ2VyOgogICAgIGRlZiBhZGRfcGFzc3dvcmQoc2VsZiwgcmVhbG0sIHVyaSwgdXNlciwgcGFzc3dvcmQpOgogICAgICAgICBzZWxmLnJlYWxtID0gcmVhbG0KICAgICAgICAgc2VsZi51cmwgPSB1cmkKICAgICAgICAgc2VsZi51c2VyID0gdXNlcgogICAgICAgICBzZWxmLnBhc3N3b3JkID0gcGFzc3dvcmQKKwogICAgIGRlZiBmaW5kX3VzZXJfcGFzc3dvcmQoc2VsZiwgcmVhbG0sIGF1dGh1cmkpOgogICAgICAgICBzZWxmLnRhcmdldF9yZWFsbSA9IHJlYWxtCiAgICAgICAgIHNlbGYudGFyZ2V0X3VybCA9IGF1dGh1cmkKQEAgLTUxNywxMSArNTc4LDExIEBACiAgICAgZGVmIHRlc3RfaGFuZGxlcl9vcmRlcihzZWxmKToKICAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKICAgICAgICAgaGFuZGxlcnMgPSBbXQotICAgICAgICBmb3IgbWV0aHMsIGhhbmRsZXJfb3JkZXIgaW4gWwotICAgICAgICAgICAgKFsoImh0dHBfb3BlbiIsICJyZXR1cm4gc2VsZiIpXSwgNTAwKSwKLSAgICAgICAgICAgIChbImh0dHBfb3BlbiJdLCAwKSwKLSAgICAgICAgICAgIF06Ci0gICAgICAgICAgICBjbGFzcyBNb2NrSGFuZGxlclN1YmNsYXNzKE1vY2tIYW5kbGVyKTogcGFzcworICAgICAgICBmb3IgbWV0aHMsIGhhbmRsZXJfb3JkZXIgaW4gWyhbKCJodHRwX29wZW4iLCAicmV0dXJuIHNlbGYiKV0sIDUwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFsiaHR0cF9vcGVuIl0sIDApXToKKyAgICAgICAgICAgIGNsYXNzIE1vY2tIYW5kbGVyU3ViY2xhc3MoTW9ja0hhbmRsZXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKwogICAgICAgICAgICAgaCA9IE1vY2tIYW5kbGVyU3ViY2xhc3MobWV0aHMpCiAgICAgICAgICAgICBoLmhhbmRsZXJfb3JkZXIgPSBoYW5kbGVyX29yZGVyCiAgICAgICAgICAgICBoYW5kbGVycy5hcHBlbmQoaCkKQEAgLTU1OSw3ICs2MjAsOCBAQAogICAgICAgICBoYW5kbGVycyA9IGFkZF9vcmRlcmVkX21vY2tfaGFuZGxlcnMobywgbWV0aF9zcGVjKQogCiAgICAgICAgIGNsYXNzIFVua25vd246Ci0gICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIpCiAgICAgICAgIG8ub3BlbihyZXEpCkBAIC01NzIsNyArNjM0LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGhhbmRsZXIsIG1ldGhvZF9uYW1lKSwgZ290WzoyXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgZ290WzJdKQogCi0KICAgICBkZWYgdGVzdF9wcm9jZXNzb3JzKHNlbGYpOgogICAgICAgICAjICpfcmVxdWVzdCAvICpfcmVzcG9uc2UgbWV0aG9kcyBnZXQgY2FsbGVkIGFwcHJvcHJpYXRlbHkKICAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKQEAgLTYwOCw2ICs2NjksNyBAQAogICAgICAgICAgICAgICAgIGlmIGFyZ3NbMV0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhcmdzWzFdLCBNb2NrUmVzcG9uc2UpCiAKKwogZGVmIHNhbmVwYXRobmFtZTJ1cmwocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBwYXRoLmVuY29kZSgidXRmLTgiKQpAQCAtNjE5LDE4ICs2ODEsMjUgQEAKICAgICAjIFhYWCBkb24ndCBhc2sgbWUgYWJvdXQgdGhlIG1hYy4uLgogICAgIHJldHVybiB1cmxwYXRoCiAKKwogY2xhc3MgSGFuZGxlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Z0cChzZWxmKToKICAgICAgICAgY2xhc3MgTW9ja0ZUUFdyYXBwZXI6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6IHNlbGYuZGF0YSA9IGRhdGEKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKICAgICAgICAgICAgIGRlZiByZXRyZmlsZShzZWxmLCBmaWxlbmFtZSwgZmlsZXR5cGUpOgogICAgICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUsIHNlbGYuZmlsZXR5cGUgPSBmaWxlbmFtZSwgZmlsZXR5cGUKICAgICAgICAgICAgICAgICByZXR1cm4gaW8uU3RyaW5nSU8oc2VsZi5kYXRhKSwgbGVuKHNlbGYuZGF0YSkKLSAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKTogcGFzcworCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGNsYXNzIE51bGxGVFBIYW5kbGVyKHVybGxpYi5yZXF1ZXN0LkZUUEhhbmRsZXIpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOiBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorCiAgICAgICAgICAgICBkZWYgY29ubmVjdF9mdHAoc2VsZiwgdXNlciwgcGFzc3dkLCBob3N0LCBwb3J0LCBkaXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKICAgICAgICAgICAgICAgICBzZWxmLnVzZXIsIHNlbGYucGFzc3dkID0gdXNlciwgcGFzc3dkCkBAIC04NjgsNyArOTM3LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBoLmRvX3JlcXVlc3RfLCByZXEpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KG5ld3JlcS5nZXRfaGVhZGVyKCdDb250ZW50LWxlbmd0aCcpKSwzMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChuZXdyZXEuZ2V0X2hlYWRlcignQ29udGVudC1sZW5ndGgnKSksIDMwKQogCiAgICAgICAgIGZpbGVfb2JqLmNsb3NlKCkKIApAQCAtODgxLDYgKzk1MCwxMyBAQAogICAgICAgICAgICAgbmV3cmVxID0gaC5kb19yZXF1ZXN0XyhyZXEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChuZXdyZXEuZ2V0X2hlYWRlcignQ29udGVudC1sZW5ndGgnKSksMTYpCiAKKyAgICBkZWYgdGVzdF9odHRwX2hhbmRsZXJfZGVidWdsZXZlbChzZWxmKToKKyAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgaCA9IE1vY2tIVFRQU0hhbmRsZXIoZGVidWdsZXZlbD0xKQorICAgICAgICBvLmFkZF9oYW5kbGVyKGgpCisgICAgICAgIG8ub3BlbigiaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguX2RlYnVnbGV2ZWwsIDEpCisKICAgICBkZWYgdGVzdF9odHRwX2RvdWJsZXNsYXNoKHNlbGYpOgogICAgICAgICAjIENoZWNrcyB0aGUgcHJlc2VuY2Ugb2YgYW55IHVubmVjZXNzYXJ5IGRvdWJsZSBzbGFzaCBpbiB1cmwgZG9lcyBub3QKICAgICAgICAgIyBicmVhayBhbnl0aGluZy4gUHJldmlvdXNseSwgYSBkb3VibGUgc2xhc2ggZGlyZWN0bHkgYWZ0ZXIgdGhlIGhvc3QKQEAgLTkwMSwxMiArOTc3LDEyIEBACiAKICAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciBob3N0IGlzIGRldGVybWluZWQgY29ycmVjdGx5IGlmIHRoZXJlIGlzIG5vIHByb3h5CiAgICAgICAgICAgICBucF9kc19yZXEgPSBoLmRvX3JlcXVlc3RfKGRzX3JlcSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sImV4YW1wbGUuY29tIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sICJleGFtcGxlLmNvbSIpCiAKICAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciBob3N0IGlzIGRldGVybWluZWQgY29ycmVjdGx5IGlmIHRoZXJlIGlzIGEgcHJveHkKLSAgICAgICAgICAgIGRzX3JlcS5zZXRfcHJveHkoInNvbWVwcm94eTozMTI4IixOb25lKQorICAgICAgICAgICAgZHNfcmVxLnNldF9wcm94eSgic29tZXByb3h5OjMxMjgiLCBOb25lKQogICAgICAgICAgICAgcF9kc19yZXEgPSBoLmRvX3JlcXVlc3RfKGRzX3JlcSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocF9kc19yZXEudW5yZWRpcmVjdGVkX2hkcnNbIkhvc3QiXSwiZXhhbXBsZS5jb20iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwX2RzX3JlcS51bnJlZGlyZWN0ZWRfaGRyc1siSG9zdCJdLCAiZXhhbXBsZS5jb20iKQogCiAgICAgZGVmIHRlc3RfZnVsbF91cmxfc2V0dGVyKHNlbGYpOgogICAgICAgICAjIENoZWNrcyB0byBlbnN1cmUgdGhhdCBjb21wb25lbnRzIGFyZSBzZXQgY29ycmVjdGx5IGFmdGVyIHNldHRpbmcgdGhlCkBAIC05NDgsMTUgKzEwMjQsMTQgQEAKICAgICAgICAgd2VpcmRfdXJsID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZz9nZXRzcGFtJwogICAgICAgICByZXEgPSBSZXF1ZXN0KHdlaXJkX3VybCkKICAgICAgICAgbmV3cmVxID0gaC5kb19yZXF1ZXN0XyhyZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3cmVxLmhvc3QsJ3d3dy5weXRob24ub3JnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdyZXEuc2VsZWN0b3IsJy8/Z2V0c3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3cmVxLmhvc3QsICd3d3cucHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3cmVxLnNlbGVjdG9yLCAnLz9nZXRzcGFtJykKIAogICAgICAgICB1cmxfd2l0aG91dF9wYXRoID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZycKICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmxfd2l0aG91dF9wYXRoKQogICAgICAgICBuZXdyZXEgPSBoLmRvX3JlcXVlc3RfKHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdyZXEuaG9zdCwnd3d3LnB5dGhvbi5vcmcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5zZWxlY3RvciwnJykKLQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5ob3N0LCAnd3d3LnB5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5zZWxlY3RvciwgJycpCiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CiAgICAgICAgIGggPSB1cmxsaWIucmVxdWVzdC5IVFRQRXJyb3JQcm9jZXNzb3IoKQpAQCAtMTA0Myw2ICsxMTE4LDcgQEAKICAgICAgICAgIyBsb29wIGRldGVjdGlvbgogICAgICAgICByZXEgPSBSZXF1ZXN0KGZyb21fdXJsKQogICAgICAgICByZXEudGltZW91dCA9IHNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVAorCiAgICAgICAgIGRlZiByZWRpcmVjdChoLCByZXEsIHVybD10b191cmwpOgogICAgICAgICAgICAgaC5odHRwX2Vycm9yXzMwMihyZXEsIE1vY2tGaWxlKCksIDMwMiwgIkJsYWgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2NrSGVhZGVycyh7ImxvY2F0aW9uIjogdXJsfSkpCkBAIC0xMDczLDcgKzExNDksNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QuSFRUUFJlZGlyZWN0SGFuZGxlci5tYXhfcmVkaXJlY3Rpb25zKQogCi0KICAgICBkZWYgdGVzdF9pbnZhbGlkX3JlZGlyZWN0KHNlbGYpOgogICAgICAgICBmcm9tX3VybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vYS5odG1sIgogICAgICAgICB2YWxpZF9zY2hlbWVzID0gWydodHRwJywnaHR0cHMnLCdmdHAnXQpAQCAtMTEzMyw2ICsxMjA4LDU3IEBACiAgICAgICAgIGZwID0gby5vcGVuKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5nZXR1cmwoKSwgcmVkaXJlY3RlZF91cmwuc3RyaXAoKSkKIAorICAgIGRlZiB0ZXN0X3JlZGlyZWN0X25vX3BhdGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTQxMzI6IFJlbGF0aXZlIHJlZGlyZWN0IHN0cmlwcyBvcmlnaW5hbCBwYXRoCisgICAgICAgIHJlYWxfY2xhc3MgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbgorICAgICAgICByZXNwb25zZTEgPSBiIkhUVFAvMS4xIDMwMiBGb3VuZFxyXG5Mb2NhdGlvbjogP3F1ZXJ5XHJcblxyXG4iCisgICAgICAgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uID0gdGVzdF91cmxsaWIuZmFrZWh0dHAocmVzcG9uc2UxKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0YXR0ciwgaHR0cC5jbGllbnQsICJIVFRQQ29ubmVjdGlvbiIsIHJlYWxfY2xhc3MpCisgICAgICAgIHVybHMgPSBpdGVyKCgiL3BhdGgiLCAiL3BhdGg/cXVlcnkiKSkKKyAgICAgICAgZGVmIHJlcXVlc3QoY29ubiwgbWV0aG9kLCB1cmwsICpwb3MsICoqa3cpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmwsIG5leHQodXJscykpCisgICAgICAgICAgICByZWFsX2NsYXNzLnJlcXVlc3QoY29ubiwgbWV0aG9kLCB1cmwsICpwb3MsICoqa3cpCisgICAgICAgICAgICAjIENoYW5nZSByZXNwb25zZSBmb3Igc3Vic2VxdWVudCBjb25uZWN0aW9uCisgICAgICAgICAgICBjb25uLl9fY2xhc3NfXy5mYWtlZGF0YSA9IGIiSFRUUC8xLjEgMjAwIE9LXHJcblxyXG5IZWxsbyEiCisgICAgICAgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLnJlcXVlc3QgPSByZXF1ZXN0CisgICAgICAgIGZwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3B5dGhvbi5vcmcvcGF0aCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAuZ2V0dXJsKCksICJodHRwOi8vcHl0aG9uLm9yZy9wYXRoP3F1ZXJ5IikKKworICAgIGRlZiB0ZXN0X3JlZGlyZWN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIFNvbWUgY2hhcmFjdGVycyBpbiB0aGUgcmVkaXJlY3QgdGFyZ2V0IG1heSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcsCisgICAgICAgICMgYnV0IG1vc3QgQVNDSUkgY2hhcmFjdGVycyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbHJlYWR5IGVuY29kZWQKKyAgICAgICAgY2xhc3MgSGFuZGxlcih1cmxsaWIucmVxdWVzdC5IVFRQSGFuZGxlcik6CisgICAgICAgICAgICBkZWYgaHR0cF9vcGVuKHNlbGYsIHJlcSk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5kb19vcGVuKHNlbGYuY29ubmVjdGlvbiwgcmVxKQorICAgICAgICAgICAgICAgIHNlbGYubGFzdF9idWYgPSBzZWxmLmNvbm5lY3Rpb24uYnVmCisgICAgICAgICAgICAgICAgIyBTZXQgdXAgYSBub3JtYWwgcmVzcG9uc2UgZm9yIHRoZSBuZXh0IHJlcXVlc3QKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSB0ZXN0X3VybGxpYi5mYWtlaHR0cCgKKyAgICAgICAgICAgICAgICAgICAgYidIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAgICAgICAgICAgICBiJ0NvbnRlbnQtTGVuZ3RoOiAzXHJcbicKKyAgICAgICAgICAgICAgICAgICAgYidcclxuJworICAgICAgICAgICAgICAgICAgICBiJzEyMycKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBoYW5kbGVyID0gSGFuZGxlcigpCisgICAgICAgIG9wZW5lciA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcihoYW5kbGVyKQorICAgICAgICB0ZXN0cyA9ICgKKyAgICAgICAgICAgIChiJy9wXHhDM1x4QTUtZGFuc2svJywgYicvcCVDMyVBNS1kYW5zay8nKSwKKyAgICAgICAgICAgIChiJy9zcGFjZWQlMjBwYXRoLycsIGInL3NwYWNlZCUyMHBhdGgvJyksCisgICAgICAgICAgICAoYicvc3BhY2VkIHBhdGgvJywgYicvc3BhY2VkJTIwcGF0aC8nKSwKKyAgICAgICAgICAgIChiJy8/cFx4QzNceEE1LWRhbnNrJywgYicvP3AlQzMlQTUtZGFuc2snKSwKKyAgICAgICAgKQorICAgICAgICBmb3IgW2xvY2F0aW9uLCByZXN1bHRdIGluIHRlc3RzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocmVwcihsb2NhdGlvbikpOgorICAgICAgICAgICAgICAgIGhhbmRsZXIuY29ubmVjdGlvbiA9IHRlc3RfdXJsbGliLmZha2VodHRwKAorICAgICAgICAgICAgICAgICAgICBiJ0hUVFAvMS4xIDMwMiBSZWRpcmVjdFxyXG4nCisgICAgICAgICAgICAgICAgICAgIGInTG9jYXRpb246ICcgKyBsb2NhdGlvbiArIGInXHJcbicKKyAgICAgICAgICAgICAgICAgICAgYidcclxuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IG9wZW5lci5vcGVuKCdodHRwOi8vZXhhbXBsZS5jb20vJykKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGInR0VUICcgKyByZXN1bHQgKyBiJyAnCisgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGhhbmRsZXIubGFzdF9idWYKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVxdWVzdC5zdGFydHN3aXRoKGV4cGVjdGVkKSwgcmVwcihyZXF1ZXN0KSkKKwogICAgIGRlZiB0ZXN0X3Byb3h5KHNlbGYpOgogICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQogICAgICAgICBwaCA9IHVybGxpYi5yZXF1ZXN0LlByb3h5SGFuZGxlcihkaWN0KGh0dHA9InByb3h5LmV4YW1wbGUuY29tOjMxMjgiKSkKQEAgLTExNzYsNyArMTMwMiw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmhvc3QsICJ3d3cucHl0aG9uLm9yZyIpCiAgICAgICAgIGRlbCBvcy5lbnZpcm9uWydub19wcm94eSddCiAKLQogICAgIGRlZiB0ZXN0X3Byb3h5X2h0dHBzKHNlbGYpOgogICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQogICAgICAgICBwaCA9IHVybGxpYi5yZXF1ZXN0LlByb3h5SGFuZGxlcihkaWN0KGh0dHBzPSJwcm94eS5leGFtcGxlLmNvbTozMTI4IikpCkBAIC0xMjAwLDIxICsxMzI1LDIxIEBACiAgICAgICAgIGh0dHBzX2hhbmRsZXIgPSBNb2NrSFRUUFNIYW5kbGVyKCkKICAgICAgICAgby5hZGRfaGFuZGxlcihodHRwc19oYW5kbGVyKQogICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwczovL3d3dy5leGFtcGxlLmNvbS8iKQotICAgICAgICByZXEuYWRkX2hlYWRlcigiUHJveHktQXV0aG9yaXphdGlvbiIsIkZvb0JhciIpCi0gICAgICAgIHJlcS5hZGRfaGVhZGVyKCJVc2VyLUFnZW50IiwiR3JhaWwiKQorICAgICAgICByZXEuYWRkX2hlYWRlcigiUHJveHktQXV0aG9yaXphdGlvbiIsICJGb29CYXIiKQorICAgICAgICByZXEuYWRkX2hlYWRlcigiVXNlci1BZ2VudCIsICJHcmFpbCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmhvc3QsICJ3d3cuZXhhbXBsZS5jb20iKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXEuX3R1bm5lbF9ob3N0KQogICAgICAgICBvLm9wZW4ocmVxKQogICAgICAgICAjIFZlcmlmeSBQcm94eS1BdXRob3JpemF0aW9uIGdldHMgdHVubmVsZWQgdG8gcmVxdWVzdC4KICAgICAgICAgIyBodHRwc2Nvbm4gcmVxX2hlYWRlcnMgZG8gbm90IGhhdmUgdGhlIFByb3h5LUF1dGhvcml6YXRpb24gaGVhZGVyIGJ1dAogICAgICAgICAjIHRoZSByZXEgd2lsbCBoYXZlLgotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgiUHJveHktQXV0aG9yaXphdGlvbiIsIkZvb0JhciIpLAorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgiUHJveHktQXV0aG9yaXphdGlvbiIsICJGb29CYXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwc19oYW5kbGVyLmh0dHBjb25uLnJlcV9oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydEluKCgiVXNlci1BZ2VudCIsIkdyYWlsIiksCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCJVc2VyLUFnZW50IiwgIkdyYWlsIiksCiAgICAgICAgICAgICAgICAgICAgICAgaHR0cHNfaGFuZGxlci5odHRwY29ubi5yZXFfaGVhZGVycykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVxLl90dW5uZWxfaG9zdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuaG9zdCwgInByb3h5LmV4YW1wbGUuY29tOjMxMjgiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJQcm94eS1hdXRob3JpemF0aW9uIiksIkZvb0JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIlByb3h5LWF1dGhvcml6YXRpb24iKSwgIkZvb0JhciIpCiAKICAgICAjIFRPRE86IFRoaXMgc2hvdWxkIGJlIG9ubHkgZm9yIE9TWAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJywgIm9ubHkgcmVsZXZhbnQgZm9yIE9TWCIpCkBAIC0xMjQ2LDcgKzEzNzEsNyBAQAogICAgICAgICByZWFsbSA9ICJBQ01FIFdpZGdldCBTdG9yZSIKICAgICAgICAgaHR0cF9oYW5kbGVyID0gTW9ja0hUVFBIYW5kbGVyKAogICAgICAgICAgICAgNDAxLCAnV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09JXMlcyVzXHJcblxyXG4nICUKLSAgICAgICAgICAgIChxdW90ZV9jaGFyLCByZWFsbSwgcXVvdGVfY2hhcikgKQorICAgICAgICAgICAgKHF1b3RlX2NoYXIsIHJlYWxtLCBxdW90ZV9jaGFyKSkKICAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGF1dGhfaGFuZGxlcikKICAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGh0dHBfaGFuZGxlcikKICAgICAgICAgc2VsZi5fdGVzdF9iYXNpY19hdXRoKG9wZW5lciwgYXV0aF9oYW5kbGVyLCAiQXV0aG9yaXphdGlvbiIsCkBAIC0xMzA0LDEzICsxNDI5LDE2IEBACiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICAgICAgICAgT3BlbmVyRGlyZWN0b3IuX19pbml0X18oc2VsZikKICAgICAgICAgICAgICAgICBzZWxmLnJlY29yZGVkID0gW10KKwogICAgICAgICAgICAgZGVmIHJlY29yZChzZWxmLCBpbmZvKToKICAgICAgICAgICAgICAgICBzZWxmLnJlY29yZGVkLmFwcGVuZChpbmZvKQorCiAgICAgICAgIGNsYXNzIFRlc3REaWdlc3RBdXRoSGFuZGxlcih1cmxsaWIucmVxdWVzdC5IVFRQRGlnZXN0QXV0aEhhbmRsZXIpOgogICAgICAgICAgICAgZGVmIGh0dHBfZXJyb3JfNDAxKHNlbGYsICphcmdzLCAqKmt3ZHMpOgogICAgICAgICAgICAgICAgIHNlbGYucGFyZW50LnJlY29yZCgiZGlnZXN0IikKICAgICAgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC5IVFRQRGlnZXN0QXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDEoc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywgKiprd2RzKQorCiAgICAgICAgIGNsYXNzIFRlc3RCYXNpY0F1dGhIYW5kbGVyKHVybGxpYi5yZXF1ZXN0LkhUVFBCYXNpY0F1dGhIYW5kbGVyKToKICAgICAgICAgICAgIGRlZiBodHRwX2Vycm9yXzQwMShzZWxmLCAqYXJncywgKiprd2RzKToKICAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5yZWNvcmQoImJhc2ljIikKQEAgLTEzNDYsNyArMTQ3NCw3IEBACiAgICAgICAgICAgICA0MDEsICdXV1ctQXV0aGVudGljYXRlOiBLZXJiZXJvc1xyXG5cclxuJykKICAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGRpZ2VzdF9hdXRoX2hhbmRsZXIpCiAgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihodHRwX2hhbmRsZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3Isb3BlbmVyLm9wZW4sImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVuZXIub3BlbiwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKQogCiAgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfYXV0aF9iYXNpY19oYW5kbGVyKHNlbGYpOgogICAgICAgICAjIFdoaWxlIHVzaW5nIEJhc2ljQXV0aEhhbmRsZXIKQEAgLTEzNTYsNyArMTQ4NCw3IEBACiAgICAgICAgICAgICA0MDEsICdXV1ctQXV0aGVudGljYXRlOiBOVExNXHJcblxyXG4nKQogICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoYmFzaWNfYXV0aF9oYW5kbGVyKQogICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaHR0cF9oYW5kbGVyKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLG9wZW5lci5vcGVuLCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlbmVyLm9wZW4sICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIikKIAogICAgIGRlZiBfdGVzdF9iYXNpY19hdXRoKHNlbGYsIG9wZW5lciwgYXV0aF9oYW5kbGVyLCBhdXRoX2hlYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgaHR0cF9oYW5kbGVyLCBwYXNzd29yZF9tYW5hZ2VyLApAQCAtMTM5NSw2ICsxNTIzLDcyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGh0dHBfaGFuZGxlci5yZXF1ZXN0cyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaHR0cF9oYW5kbGVyLnJlcXVlc3RzWzBdLmhhc19oZWFkZXIoYXV0aF9oZWFkZXIpKQogCisgICAgZGVmIHRlc3RfYmFzaWNfcHJpb3JfYXV0aF9hdXRvX3NlbmQoc2VsZik6CisgICAgICAgICMgQXNzdW1lIGFscmVhZHkgYXV0aGVudGljYXRlZCBpZiBpc19hdXRoZW50aWNhdGVkPVRydWUKKyAgICAgICAgIyBmb3IgQVBJcyBsaWtlIEdpdGh1YiB0aGF0IGRvbid0IHJldHVybiA0MDEKKworICAgICAgICB1c2VyLCBwYXNzd29yZCA9ICJ3aWxlIiwgImNveW90ZSIKKyAgICAgICAgcmVxdWVzdF91cmwgPSAiaHR0cDovL2FjbWUuZXhhbXBsZS5jb20vcHJvdGVjdGVkIgorCisgICAgICAgIGh0dHBfaGFuZGxlciA9IE1vY2tIVFRQSGFuZGxlckNoZWNrQXV0aCgyMDApCisKKyAgICAgICAgcHdkX21hbmFnZXIgPSBIVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoKCkKKyAgICAgICAgYXV0aF9wcmlvcl9oYW5kbGVyID0gSFRUUEJhc2ljQXV0aEhhbmRsZXIocHdkX21hbmFnZXIpCisgICAgICAgIGF1dGhfcHJpb3JfaGFuZGxlci5hZGRfcGFzc3dvcmQoCisgICAgICAgICAgICBOb25lLCByZXF1ZXN0X3VybCwgdXNlciwgcGFzc3dvcmQsIGlzX2F1dGhlbnRpY2F0ZWQ9VHJ1ZSkKKworICAgICAgICBpc19hdXRoID0gcHdkX21hbmFnZXIuaXNfYXV0aGVudGljYXRlZChyZXF1ZXN0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX2F1dGgpCisKKyAgICAgICAgb3BlbmVyID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoYXV0aF9wcmlvcl9oYW5kbGVyKQorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaHR0cF9oYW5kbGVyKQorCisgICAgICAgIG9wZW5lci5vcGVuKHJlcXVlc3RfdXJsKQorCisgICAgICAgICMgZXhwZWN0IHJlcXVlc3QgdG8gYmUgc2VudCB3aXRoIGF1dGggaGVhZGVyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShodHRwX2hhbmRsZXIuaGFzX2F1dGhfaGVhZGVyKQorCisgICAgZGVmIHRlc3RfYmFzaWNfcHJpb3JfYXV0aF9zZW5kX2FmdGVyX2ZpcnN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgICMgQXV0byBzZW5kIGF1dGggaGVhZGVyIGFmdGVyIGF1dGhlbnRpY2F0aW9uIGlzIHN1Y2Nlc3NmdWwgb25jZQorCisgICAgICAgIHVzZXIsIHBhc3N3b3JkID0gJ3dpbGUnLCAnY295b3RlJworICAgICAgICByZXF1ZXN0X3VybCA9ICdodHRwOi8vYWNtZS5leGFtcGxlLmNvbS9wcm90ZWN0ZWQnCisgICAgICAgIHJlYWxtID0gJ0FDTUUnCisKKyAgICAgICAgcHdkX21hbmFnZXIgPSBIVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoKCkKKyAgICAgICAgYXV0aF9wcmlvcl9oYW5kbGVyID0gSFRUUEJhc2ljQXV0aEhhbmRsZXIocHdkX21hbmFnZXIpCisgICAgICAgIGF1dGhfcHJpb3JfaGFuZGxlci5hZGRfcGFzc3dvcmQocmVhbG0sIHJlcXVlc3RfdXJsLCB1c2VyLCBwYXNzd29yZCkKKworICAgICAgICBpc19hdXRoID0gcHdkX21hbmFnZXIuaXNfYXV0aGVudGljYXRlZChyZXF1ZXN0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc19hdXRoKQorCisgICAgICAgIG9wZW5lciA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGF1dGhfcHJpb3JfaGFuZGxlcikKKworICAgICAgICBodHRwX2hhbmRsZXIgPSBNb2NrSFRUUEhhbmRsZXIoCisgICAgICAgICAgICA0MDEsICdXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iJXMiXHJcblxyXG4nICUgTm9uZSkKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGh0dHBfaGFuZGxlcikKKworICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0X3VybCkKKworICAgICAgICBpc19hdXRoID0gcHdkX21hbmFnZXIuaXNfYXV0aGVudGljYXRlZChyZXF1ZXN0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX2F1dGgpCisKKyAgICAgICAgaHR0cF9oYW5kbGVyID0gTW9ja0hUVFBIYW5kbGVyQ2hlY2tBdXRoKDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShodHRwX2hhbmRsZXIuaGFzX2F1dGhfaGVhZGVyKQorCisgICAgICAgIG9wZW5lciA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGF1dGhfcHJpb3JfaGFuZGxlcikKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGh0dHBfaGFuZGxlcikKKworICAgICAgICAjIEFmdGVyIGdldHRpbmcgMjAwIGZyb20gTW9ja0hUVFBIYW5kbGVyCisgICAgICAgICMgTmV4dCByZXF1ZXN0IHNlbmRzIGhlYWRlciBpbiB0aGUgZmlyc3QgcmVxdWVzdAorICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0X3VybCkKKworICAgICAgICAjIGV4cGVjdCByZXF1ZXN0IHRvIGJlIHNlbnQgd2l0aCBhdXRoIGhlYWRlcgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaHR0cF9oYW5kbGVyLmhhc19hdXRoX2hlYWRlcikKKwogICAgIGRlZiB0ZXN0X2h0dHBfY2xvc2VkKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHRoZSBjb25uZWN0aW9uIGlzIGNsZWFuZWQgdXAgd2hlbiB0aGUgcmVzcG9uc2UgaXMgY2xvc2VkIiIiCiAgICAgICAgIGZvciAodHJhbnNmZXIsIGRhdGEpIGluICgKQEAgLTE0MjMsNiArMTYxNyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25uLmZha2Vzb2NrLmNsb3NlZCwgIkNvbm5lY3Rpb24gbm90IGNsb3NlZCIpCiAKIAorCiBjbGFzcyBNaXNjVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIG9wZW5lcl9oYXNfaGFuZGxlcihzZWxmLCBvcGVuZXIsIGhhbmRsZXJfY2xhc3MpOgpAQCAtMTQzMCwxMSArMTYyNSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBoIGluIG9wZW5lci5oYW5kbGVycykpCiAKICAgICBkZWYgdGVzdF9idWlsZF9vcGVuZXIoc2VsZik6Ci0gICAgICAgIGNsYXNzIE15SFRUUEhhbmRsZXIodXJsbGliLnJlcXVlc3QuSFRUUEhhbmRsZXIpOiBwYXNzCisgICAgICAgIGNsYXNzIE15SFRUUEhhbmRsZXIodXJsbGliLnJlcXVlc3QuSFRUUEhhbmRsZXIpOgorICAgICAgICAgICAgcGFzcworCiAgICAgICAgIGNsYXNzIEZvb0hhbmRsZXIodXJsbGliLnJlcXVlc3QuQmFzZUhhbmRsZXIpOgotICAgICAgICAgICAgZGVmIGZvb19vcGVuKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX29wZW4oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCiAgICAgICAgIGNsYXNzIEJhckhhbmRsZXIodXJsbGliLnJlcXVlc3QuQmFzZUhhbmRsZXIpOgotICAgICAgICAgICAgZGVmIGJhcl9vcGVuKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgYmFyX29wZW4oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGJ1aWxkX29wZW5lciA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcgogCkBAIC0xNDYxLDcgKzE2NjEsOSBAQAogICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCB1cmxsaWIucmVxdWVzdC5IVFRQSGFuZGxlcikKIAogICAgICAgICAjIElzc3VlMjY3MDogbXVsdGlwbGUgaGFuZGxlcnMgc2hhcmluZyB0aGUgc2FtZSBiYXNlIGNsYXNzCi0gICAgICAgIGNsYXNzIE15T3RoZXJIVFRQSGFuZGxlcih1cmxsaWIucmVxdWVzdC5IVFRQSGFuZGxlcik6IHBhc3MKKyAgICAgICAgY2xhc3MgTXlPdGhlckhUVFBIYW5kbGVyKHVybGxpYi5yZXF1ZXN0LkhUVFBIYW5kbGVyKToKKyAgICAgICAgICAgIHBhc3MKKwogICAgICAgICBvID0gYnVpbGRfb3BlbmVyKE15SFRUUEhhbmRsZXIsIE15T3RoZXJIVFRQSGFuZGxlcikKICAgICAgICAgc2VsZi5vcGVuZXJfaGFzX2hhbmRsZXIobywgTXlIVFRQSGFuZGxlcikKICAgICAgICAgc2VsZi5vcGVuZXJfaGFzX2hhbmRsZXIobywgTXlPdGhlckhUVFBIYW5kbGVyKQpAQCAtMTQ5Nyw2ICsxNjk5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuaGVhZGVycywgJ0NvbnRlbnQtTGVuZ3RoOiA0MicpCiAgICAgICAgIGV4cGVjdGVkX2Vycm1zZyA9ICdIVFRQIEVycm9yICVzOiAlcycgJSAoZXJyLmNvZGUsIGVyci5tc2cpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksIGV4cGVjdGVkX2Vycm1zZykKKyAgICAgICAgZXhwZWN0ZWRfZXJybXNnID0gJzxIVFRQRXJyb3IgJXM6ICVyPicgJSAoZXJyLmNvZGUsIGVyci5tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlcnIpLCBleHBlY3RlZF9lcnJtc2cpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9wcm94eShzZWxmKToKICAgICAgICAgcGFyc2VfcHJveHlfdGVzdF9jYXNlcyA9IFsKQEAgLTE1MzUsOSArMTczOSwxOSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9wYXJzZV9wcm94eSwgJ2ZpbGU6L2Z0cC5leGFtcGxlLmNvbScpLAogCisgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfYWxnb3JpdGhtKHNlbGYpOgorICAgICAgICBoYW5kbGVyID0gQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgZXhjOgorICAgICAgICAgICAgaGFuZGxlci5nZXRfYWxnb3JpdGhtX2ltcGxzKCdpbnZhbGlkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHN0cihleGMuZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICJVbnN1cHBvcnRlZCBkaWdlc3QgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtICdpbnZhbGlkJyIKKyAgICAgICAgKQorCisKIGNsYXNzIFJlcXVlc3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY2xhc3MgUHV0UmVxdWVzdChSZXF1ZXN0KToKLSAgICAgICAgbWV0aG9kPSdQVVQnCisgICAgICAgIG1ldGhvZCA9ICdQVVQnCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZ2V0ID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKQEAgLTE2MjYsNyArMTg0MCw3IEBACiAgICAgZGVmIHRlc3RfdXJsX2Z1bGx1cmxfZ2V0X2Z1bGxfdXJsKHNlbGYpOgogICAgICAgICB1cmxzID0gWydodHRwOi8vZG9jcy5weXRob24ub3JnJywKICAgICAgICAgICAgICAgICAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3VybGxpYjIuaHRtbCNPSycsCi0gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8/cXM9cXVlcnkjZnJhZ21lbnQ9dHJ1ZScgXQorICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvP3FzPXF1ZXJ5I2ZyYWdtZW50PXRydWUnXQogICAgICAgICBmb3IgdXJsIGluIHVybHM6CiAgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9mdWxsX3VybCgpLCByZXEuZnVsbF91cmwpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKaW5kZXggMDY1MGFhMi4uYzhiMzdlZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpAQCAtNjI2LDM1ICs2MjYsNiBAQAogICAgICAgICB1cmwgPSBvcGVuX3VybC5nZXR1cmwoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybCwgImh0dHA6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQogCi0gICAgZGVmIHRlc3RfYmFkX2FkZHJlc3Moc2VsZik6Ci0gICAgICAgICMgTWFrZSBzdXJlIHByb3BlciBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gY29ubmVjdGluZyB0byBhIGJvZ3VzCi0gICAgICAgICMgYWRkcmVzcy4KLQotICAgICAgICAjIGFzIGluZGljYXRlZCBieSB0aGUgY29tbWVudCBiZWxvdywgdGhpcyBtaWdodCBmYWlsIHdpdGggc29tZSBJU1AsCi0gICAgICAgICMgc28gd2UgcnVuIHRoZSB0ZXN0IG9ubHkgd2hlbiAtdW5ldHdvcmsvLXVhbGwgaXMgc3BlY2lmaWVkIHRvCi0gICAgICAgICMgbWl0aWdhdGUgdGhlIHByb2JsZW0gYSBiaXQgKHNlZSAjMTc1NjQpCi0gICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdpdmVuIHRoYXQgYm90aCBWZXJpU2lnbiBhbmQgdmFyaW91cyBJU1BzIGhhdmUgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgcGFzdCBvciBhcmUgcHJlc2VudGx5IGhpamFja2luZyB2YXJpb3VzIGludmFsaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb21haW4gbmFtZSByZXF1ZXN0cyBpbiBhbiBhdHRlbXB0IHRvIGJvb3N0IHRyYWZmaWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0byB0aGVpciBvd24gc2l0ZXMsIGZpbmRpbmcgYSBkb21haW4gbmFtZSB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3IgdGhpcyB0ZXN0IGlzIGRpZmZpY3VsdC4gIFJGQzI2MDYgbGVhZHMgb25lIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgYmVsaWV2ZSB0aGF0ICcuaW52YWxpZCcgc2hvdWxkIHdvcmssIGJ1dCBleHBlcmllbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VlbWVkIHRvIGluZGljYXRlIG90aGVyd2lzZS4gIFNpbmdsZSBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUTERzIGFyZSBsaWtlbHkgdG8gcmVtYWluIGludmFsaWQsIHNvIHRoaXMgc2VlbXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBiZSB0aGUgYmVzdCBjaG9pY2UuIFRoZSB0cmFpbGluZyAnLicgcHJldmVudHMgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlbGF0ZWQgcHJvYmxlbTogVGhlIG5vcm1hbCBETlMgcmVzb2x2ZXIgYXBwZW5kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBkb21haW4gbmFtZXMgZnJvbSB0aGUgc2VhcmNoIHBhdGggaWYgdGhlcmUgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyAnLicgdGhlIGVuZCBhbmQsIGFuZCBpZiBvbmUgb2YgdGhvc2UgZG9tYWlucwotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGltcGxlbWVudHMgYSAnKicgcnVsZSBhIHJlc3VsdCBpcyByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIb3dldmVyLCBub25lIG9mIHRoaXMgd2lsbCBwcmV2ZW50IHRoZSB0ZXN0IGZyb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmYWlsaW5nIGlmIHRoZSBJU1AgaGlqYWNrcyBhbGwgaW52YWxpZCBkb21haW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1ZXN0cy4gIFRoZSByZWFsIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGJlIGFibGUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXJpemUgdGhlIGZyYW1ld29yayB3aXRoIGEgbW9jayByZXNvbHZlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QudXJsb3BlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQuLyIpCi0KICAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CiAgICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gYiJweWNvbiAyMDA4Li4uIgogICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCBleHBlY3RlZF9yZXNwb25zZSldKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CmluZGV4IDE3ZjlkMWIuLmNhZDgzZmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKQEAgLTIwLDggKzIwLDYgQEAKICAgICAgICAgZXhjZXB0IGV4YyBhcyBlOgogICAgICAgICAgICAgbGFzdF9leGMgPSBlCiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByYWlzZQogICAgIHJhaXNlIGxhc3RfZXhjCiAKIGRlZiBfd3JhcF93aXRoX3JldHJ5X3RocmljZShmdW5jLCBleGMpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQppbmRleCA0MmViYjZlLi5iODExOTMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQpAQCAtMzgsMTIgKzM4LDE0IEBACiAgICAgZm9yIHRyYW5zcGFyZW50IHJlZGlyZWN0aW9uIGhhdmUgYmVlbiB3cml0dGVuLgogCiAgICAgc2V0VXAgaXMgbm90IHVzZWQgZm9yIGFsd2F5cyBjb25zdHJ1Y3RpbmcgYSBjb25uZWN0aW9uIHRvCi0gICAgaHR0cDovL3d3dy5leGFtcGxlLmNvbS8gc2luY2UgdGhlcmUgYSBmZXcgdGVzdHMgdGhhdCBkb24ndCB1c2UgdGhhdCBhZGRyZXNzCisgICAgaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC8gc2luY2UgdGhlcmUgYSBmZXcgdGVzdHMgdGhhdCBkb24ndCB1c2UgdGhhdCBhZGRyZXNzCiAgICAgYW5kIG1ha2luZyBhIGNvbm5lY3Rpb24gaXMgZXhwZW5zaXZlIGVub3VnaCB0byB3YXJyYW50IG1pbmltaXppbmcgdW5uZWVkZWQKICAgICBjb25uZWN0aW9ucy4KIAogICAgICIiIgogCisgICAgdXJsID0gJ2h0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvJworCiAgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKICAgICBkZWYgdXJsb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICByZXNvdXJjZSA9IGFyZ3NbMF0KQEAgLTU2LDcgKzU4LDcgQEAKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFNpbXBsZSB0ZXN0IGV4cGVjdGVkIHRvIHBhc3MuCi0gICAgICAgIHdpdGggc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpIGFzIG9wZW5fdXJsOgorICAgICAgICB3aXRoIHNlbGYudXJsb3BlbihzZWxmLnVybCkgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBmb3IgYXR0ciBpbiAoInJlYWQiLCAicmVhZGxpbmUiLCAicmVhZGxpbmVzIiwgImZpbGVubyIsICJjbG9zZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImluZm8iLCAiZ2V0dXJsIik6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob3Blbl91cmwsIGF0dHIpLCAib2JqZWN0IHJldHVybmVkIGZyb20gIgpAQCAtNjUsNyArNjcsNyBAQAogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgYm90aCByZWFkbGluZSBhbmQgcmVhZGxpbmVzLgotICAgICAgICB3aXRoIHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oc2VsZi51cmwpIGFzIG9wZW5fdXJsOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lKCksIGJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZSBkaWQgbm90IHJldHVybiBhIHN0cmluZyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3Blbl91cmwucmVhZGxpbmVzKCksIGxpc3QsCkBAIC03Myw3ICs3NSw3IEBACiAKICAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgogICAgICAgICAjIFRlc3QgJ2luZm8nLgotICAgICAgICB3aXRoIHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oc2VsZi51cmwpIGFzIG9wZW5fdXJsOgogICAgICAgICAgICAgaW5mb19vYmogPSBvcGVuX3VybC5pbmZvKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvX29iaiwgZW1haWwubWVzc2FnZS5NZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgJ2luZm8nIGlzIG5vdCBhbiAiCkBAIC04MiwxNCArODQsMTMgQEAKIAogICAgIGRlZiB0ZXN0X2dldHVybChzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgc2FtZSBVUkwgYXMgb3BlbmVkIGlzIHJldHVybmVkIGJ5IGdldHVybC4KLSAgICAgICAgVVJMID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIgotICAgICAgICB3aXRoIHNlbGYudXJsb3BlbihVUkwpIGFzIG9wZW5fdXJsOgorICAgICAgICB3aXRoIHNlbGYudXJsb3BlbihzZWxmLnVybCkgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBnb3R0ZW5fdXJsID0gb3Blbl91cmwuZ2V0dXJsKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290dGVuX3VybCwgVVJMKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3R0ZW5fdXJsLCBzZWxmLnVybCkKIAogICAgIGRlZiB0ZXN0X2dldGNvZGUoc2VsZik6CiAgICAgICAgICMgdGVzdCBnZXRjb2RlKCkgd2l0aCB0aGUgZmFuY3kgb3BlbmVyIHRvIGdldCA0MDQgZXJyb3IgY29kZXMKLSAgICAgICAgVVJMID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vWFhYaW52YWxpZFhYWCIKKyAgICAgICAgVVJMID0gc2VsZi51cmwgKyAiWFhYaW52YWxpZFhYWCIKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChVUkwpOgogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CiAgICAgICAgICAgICAgICAgb3Blbl91cmwgPSB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcigpLm9wZW4oVVJMKQpAQCAtOTksMjEgKzEwMCwyOCBAQAogICAgICAgICAgICAgICAgIG9wZW5fdXJsLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgNDA0KQogCi0gICAgIyBPbiBXaW5kb3dzLCBzb2NrZXQgaGFuZGxlcyBhcmUgbm90IGZpbGUgZGVzY3JpcHRvcnM7IHRoaXMKLSAgICAjIHRlc3QgY2FuJ3QgcGFzcyBvbiBXaW5kb3dzLgotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCksICdub3QgYXBwcm9wcmlhdGUgZm9yIFdpbmRvd3MnKQotICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKLSAgICAgICAgIyBNYWtlIHN1cmUgZmQgcmV0dXJuZWQgYnkgZmlsZW5vIGlzIHZhbGlkLgotICAgICAgICB3aXRoIHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIHRpbWVvdXQ9Tm9uZSkgYXMgb3Blbl91cmw6Ci0gICAgICAgICAgICBmZCA9IG9wZW5fdXJsLmZpbGVubygpCi0gICAgICAgICAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3JiJykgYXMgZjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5yZWFkKCksICJyZWFkaW5nIGZyb20gZmlsZSBjcmVhdGVkIHVzaW5nIGZkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBmaWxlbm8gZmFpbGVkIikKLQogICAgIGRlZiB0ZXN0X2JhZF9hZGRyZXNzKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBwcm9wZXIgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIGNvbm5lY3RpbmcgdG8gYSBib2d1cwogICAgICAgICAjIGFkZHJlc3MuCi0gICAgICAgIGJvZ3VzX2RvbWFpbiA9ICJzYWRmbGtqc2FzZi5pLm52YWxpLmQiCisKKyAgICAgICAgIyBHaXZlbiB0aGF0IGJvdGggVmVyaVNpZ24gYW5kIHZhcmlvdXMgSVNQcyBoYXZlIGluCisgICAgICAgICMgdGhlIHBhc3Qgb3IgYXJlIHByZXNlbnRseSBoaWphY2tpbmcgdmFyaW91cyBpbnZhbGlkCisgICAgICAgICMgZG9tYWluIG5hbWUgcmVxdWVzdHMgaW4gYW4gYXR0ZW1wdCB0byBib29zdCB0cmFmZmljCisgICAgICAgICMgdG8gdGhlaXIgb3duIHNpdGVzLCBmaW5kaW5nIGEgZG9tYWluIG5hbWUgdG8gdXNlCisgICAgICAgICMgZm9yIHRoaXMgdGVzdCBpcyBkaWZmaWN1bHQuICBSRkMyNjA2IGxlYWRzIG9uZSB0bworICAgICAgICAjIGJlbGlldmUgdGhhdCAnLmludmFsaWQnIHNob3VsZCB3b3JrLCBidXQgZXhwZXJpZW5jZQorICAgICAgICAjIHNlZW1lZCB0byBpbmRpY2F0ZSBvdGhlcndpc2UuICBTaW5nbGUgY2hhcmFjdGVyCisgICAgICAgICMgVExEcyBhcmUgbGlrZWx5IHRvIHJlbWFpbiBpbnZhbGlkLCBzbyB0aGlzIHNlZW1zIHRvCisgICAgICAgICMgYmUgdGhlIGJlc3QgY2hvaWNlLiBUaGUgdHJhaWxpbmcgJy4nIHByZXZlbnRzIGEKKyAgICAgICAgIyByZWxhdGVkIHByb2JsZW06IFRoZSBub3JtYWwgRE5TIHJlc29sdmVyIGFwcGVuZHMKKyAgICAgICAgIyB0aGUgZG9tYWluIG5hbWVzIGZyb20gdGhlIHNlYXJjaCBwYXRoIGlmIHRoZXJlIGlzCisgICAgICAgICMgbm8gJy4nIHRoZSBlbmQgYW5kLCBhbmQgaWYgb25lIG9mIHRob3NlIGRvbWFpbnMKKyAgICAgICAgIyBpbXBsZW1lbnRzIGEgJyonIHJ1bGUgYSByZXN1bHQgaXMgcmV0dXJuZWQuCisgICAgICAgICMgSG93ZXZlciwgbm9uZSBvZiB0aGlzIHdpbGwgcHJldmVudCB0aGUgdGVzdCBmcm9tCisgICAgICAgICMgZmFpbGluZyBpZiB0aGUgSVNQIGhpamFja3MgYWxsIGludmFsaWQgZG9tYWluCisgICAgICAgICMgcmVxdWVzdHMuICBUaGUgcmVhbCBzb2x1dGlvbiB3b3VsZCBiZSB0byBiZSBhYmxlIHRvCisgICAgICAgICMgcGFyYW1ldGVyaXplIHRoZSBmcmFtZXdvcmsgd2l0aCBhIG1vY2sgcmVzb2x2ZXIuCisgICAgICAgIGJvZ3VzX2RvbWFpbiA9ICJzYWRmbGtqc2FzZi5pLm52YWxpLmQuIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShib2d1c19kb21haW4pCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgpAQCAtMTI4LDExICsxMzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYW4gYmUgY2F1c2VkIGJ5IGEgYnJva2VuIEROUyBzZXJ2ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoZS5nLiByZXR1cm5zIDQwNCBvciBoaWphY2tzIHBhZ2UpJykKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtc2c9ZmFpbHVyZV9leHBsYW5hdGlvbik6Ci0gICAgICAgICAgICAjIFNGIHBhdGNoIDgwOTkxNTogIEluIFNlcCAyMDAzLCBWZXJpU2lnbiBzdGFydGVkIGhpZ2hqYWNraW5nCi0gICAgICAgICAgICAjIGludmFsaWQgLmNvbSBhbmQgLm5ldCBhZGRyZXNzZXMgdG8gYm9vc3QgdHJhZmZpYyB0byB0aGVpciBvd24KLSAgICAgICAgICAgICMgc2l0ZS4gIFRoaXMgdGVzdCBzdGFydGVkIGZhaWxpbmcgdGhlbi4gIE9uZSBob3BlcyB0aGUgLmludmFsaWQKLSAgICAgICAgICAgICMgZG9tYWluIHdpbGwgYmUgc3BhcmVkIHRvIHNlcnZlIGl0cyBkZWZpbmVkIHB1cnBvc2UuCi0gICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLyIpCisgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8ve30vIi5mb3JtYXQoYm9ndXNfZG9tYWluKSkKIAogCiBjbGFzcyB1cmxyZXRyaWV2ZU5ldHdvcmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNTAsNyArMTU0LDcgQEAKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFRlc3QgYmFzaWMgZnVuY3Rpb25hbGl0eS4KLSAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpIGFzIChmaWxlX2xvY2F0aW9uLCBpbmZvKToKKyAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKHNlbGYubG9nbykgYXMgKGZpbGVfbG9jYXRpb24sIGluZm8pOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pLCAiZmlsZSBsb2NhdGlvbiByZXR1cm5lZCBieSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHVybHJldHJpZXZlIGlzIG5vdCBhIHZhbGlkIHBhdGgiKQogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVfbG9jYXRpb24sICdyYicpIGFzIGY6CkBAIC0xNTksNyArMTYzLDcgQEAKIAogICAgIGRlZiB0ZXN0X3NwZWNpZmllZF9wYXRoKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHNwZWNpZnlpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHRvIHdyaXRlIHRvIHdvcmtzLgotICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIiwKKyAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKHNlbGYubG9nbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOKSBhcyAoZmlsZV9sb2NhdGlvbiwgaW5mbyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbG9jYXRpb24sIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pKQpAQCAtMTY4LDExICsxNzIsMTEgQEAKIAogICAgIGRlZiB0ZXN0X2hlYWRlcihzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgaGVhZGVyIHJldHVybmVkIGFzIDJuZCB2YWx1ZSBmcm9tIHVybHJldHJpZXZlIGlzIGdvb2QuCi0gICAgICAgIHdpdGggc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKSBhcyAoZmlsZV9sb2NhdGlvbiwgaW5mbyk6CisgICAgICAgIHdpdGggc2VsZi51cmxyZXRyaWV2ZShzZWxmLmxvZ28pIGFzIChmaWxlX2xvY2F0aW9uLCBpbmZvKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZm8gaXMgbm90IGFuIGluc3RhbmNlIG9mIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSIpCiAKLSAgICBsb2dvID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIgorICAgIGxvZ28gPSAiaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC8iCiAKICAgICBkZWYgdGVzdF9kYXRhX2hlYWRlcihzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKHNlbGYubG9nbykgYXMgKGZpbGVfbG9jYXRpb24sIGZpbGVoZWFkZXJzKToKQEAgLTE4MSw3ICsxODUsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRpbWUuc3RycHRpbWUoZGF0ZXZhbHVlLCBkYXRlZm9ybWF0KQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdEYXRlIHZhbHVlIG5vdCBpbiAlciBmb3JtYXQnLCBkYXRlZm9ybWF0KQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRGF0ZSB2YWx1ZSBub3QgaW4gJXIgZm9ybWF0JyAlIGRhdGVmb3JtYXQpCiAKICAgICBkZWYgdGVzdF9yZXBvcnRob29rKHNlbGYpOgogICAgICAgICByZWNvcmRzID0gW10KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CmluZGV4IDE3NzVlZjMuLjgyOTk5N2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQpAQCAtMTcsNyArMTcsNiBAQAogICAgICgiPWEiLCBbKCcnLCAnYScpXSksCiAgICAgKCJhIiwgWygnYScsICcnKV0pLAogICAgICgiYT0iLCBbKCdhJywgJycpXSksCi0gICAgKCJhPSIsIFsoJ2EnLCAnJyldKSwKICAgICAoIiZhPWIiLCBbKCdhJywgJ2InKV0pLAogICAgICgiYT1hK2ImYj1iK2MiLCBbKCdhJywgJ2EgYicpLCAoJ2InLCAnYiBjJyldKSwKICAgICAoImE9MSZhPTIiLCBbKCdhJywgJzEnKSwgKCdhJywgJzInKV0pLApAQCAtMjgsMTAgKzI3LDUyIEBACiAgICAgKGIiPWEiLCBbKGInJywgYidhJyldKSwKICAgICAoYiJhIiwgWyhiJ2EnLCBiJycpXSksCiAgICAgKGIiYT0iLCBbKGInYScsIGInJyldKSwKLSAgICAoYiJhPSIsIFsoYidhJywgYicnKV0pLAogICAgIChiIiZhPWIiLCBbKGInYScsIGInYicpXSksCiAgICAgKGIiYT1hK2ImYj1iK2MiLCBbKGInYScsIGInYSBiJyksIChiJ2InLCBiJ2IgYycpXSksCiAgICAgKGIiYT0xJmE9MiIsIFsoYidhJywgYicxJyksIChiJ2EnLCBiJzInKV0pLAorICAgICgiOyIsIFtdKSwKKyAgICAoIjs7IiwgW10pLAorICAgICgiO2E9YiIsIFsoJ2EnLCAnYicpXSksCisgICAgKCJhPWErYjtiPWIrYyIsIFsoJ2EnLCAnYSBiJyksICgnYicsICdiIGMnKV0pLAorICAgICgiYT0xO2E9MiIsIFsoJ2EnLCAnMScpLCAoJ2EnLCAnMicpXSksCisgICAgKGIiOyIsIFtdKSwKKyAgICAoYiI7OyIsIFtdKSwKKyAgICAoYiI7YT1iIiwgWyhiJ2EnLCBiJ2InKV0pLAorICAgIChiImE9YStiO2I9YitjIiwgWyhiJ2EnLCBiJ2EgYicpLCAoYidiJywgYidiIGMnKV0pLAorICAgIChiImE9MTthPTIiLCBbKGInYScsIGInMScpLCAoYidhJywgYicyJyldKSwKK10KKworcGFyc2VfcXNfdGVzdF9jYXNlcyA9IFsKKyAgICAoIiIsIHt9KSwKKyAgICAoIiYiLCB7fSksCisgICAgKCImJiIsIHt9KSwKKyAgICAoIj0iLCB7Jyc6IFsnJ119KSwKKyAgICAoIj1hIiwgeycnOiBbJ2EnXX0pLAorICAgICgiYSIsIHsnYSc6IFsnJ119KSwKKyAgICAoImE9IiwgeydhJzogWycnXX0pLAorICAgICgiJmE9YiIsIHsnYSc6IFsnYiddfSksCisgICAgKCJhPWErYiZiPWIrYyIsIHsnYSc6IFsnYSBiJ10sICdiJzogWydiIGMnXX0pLAorICAgICgiYT0xJmE9MiIsIHsnYSc6IFsnMScsICcyJ119KSwKKyAgICAoYiIiLCB7fSksCisgICAgKGIiJiIsIHt9KSwKKyAgICAoYiImJiIsIHt9KSwKKyAgICAoYiI9Iiwge2InJzogW2InJ119KSwKKyAgICAoYiI9YSIsIHtiJyc6IFtiJ2EnXX0pLAorICAgIChiImEiLCB7YidhJzogW2InJ119KSwKKyAgICAoYiJhPSIsIHtiJ2EnOiBbYicnXX0pLAorICAgIChiIiZhPWIiLCB7YidhJzogW2InYiddfSksCisgICAgKGIiYT1hK2ImYj1iK2MiLCB7YidhJzogW2InYSBiJ10sIGInYic6IFtiJ2IgYyddfSksCisgICAgKGIiYT0xJmE9MiIsIHtiJ2EnOiBbYicxJywgYicyJ119KSwKKyAgICAoIjsiLCB7fSksCisgICAgKCI7OyIsIHt9KSwKKyAgICAoIjthPWIiLCB7J2EnOiBbJ2InXX0pLAorICAgICgiYT1hK2I7Yj1iK2MiLCB7J2EnOiBbJ2EgYiddLCAnYic6IFsnYiBjJ119KSwKKyAgICAoImE9MTthPTIiLCB7J2EnOiBbJzEnLCAnMiddfSksCisgICAgKGIiOyIsIHt9KSwKKyAgICAoYiI7OyIsIHt9KSwKKyAgICAoYiI7YT1iIiwge2InYSc6IFtiJ2InXX0pLAorICAgIChiImE9YStiO2I9YitjIiwge2InYSc6IFtiJ2EgYiddLCBiJ2InOiBbYidiIGMnXX0pLAorICAgIChiImE9MTthPTIiLCB7YidhJzogW2InMScsIGInMiddfSksCiBdCiAKIGNsYXNzIFVybFBhcnNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTYsNiArMTM3LDE2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0X3dpdGhvdXRfYmxhbmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBwYXJzaW5nICVyIiAlIG9yaWcpCiAKKyAgICBkZWYgdGVzdF9xcyhzZWxmKToKKyAgICAgICAgZm9yIG9yaWcsIGV4cGVjdCBpbiBwYXJzZV9xc190ZXN0X2Nhc2VzOgorICAgICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzKG9yaWcsIGtlZXBfYmxhbmtfdmFsdWVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlciIgJSBvcmlnKQorICAgICAgICAgICAgZXhwZWN0X3dpdGhvdXRfYmxhbmtzID0ge3Y6IGV4cGVjdFt2XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB2IGluIGV4cGVjdCBpZiBsZW4oZXhwZWN0W3ZdWzBdKX0KKyAgICAgICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS5wYXJzZV9xcyhvcmlnLCBrZWVwX2JsYW5rX3ZhbHVlcz1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3Rfd2l0aG91dF9ibGFua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHBhcnNpbmcgJXIiICUgb3JpZykKKwogICAgIGRlZiB0ZXN0X3JvdW5kdHJpcHMoc2VsZik6CiAgICAgICAgIHN0cl9jYXNlcyA9IFsKICAgICAgICAgICAgICgnZmlsZTovLy90bXAvanVuay50eHQnLApAQCAtMjEwLDEwICsyNjEsNiBAQAogCiAgICAgICAgICMgImFibm9ybWFsIiBjYXNlcyBmcm9tIFJGQyAxODA4OgogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcnLCAnaHR0cDovL2EvYi9jL2Q7cD9xI2YnKQotICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uL2cnKQotICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8uLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uLy4uL2cnKQotICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcvLi9nJywgJ2h0dHA6Ly9hLy4vZycpCi0gICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy8uLi9nJywgJ2h0dHA6Ly9hLy4uL2cnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnLicsICdodHRwOi8vYS9iL2MvZy4nKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuZycsICdodHRwOi8vYS9iL2MvLmcnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnLi4nLCAnaHR0cDovL2EvYi9jL2cuLicpCkBAIC0yMjgsNiArMjc1LDEzIEBACiAgICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdodHRwOmcnLCAnaHR0cDpnJykKICAgICAgICAgI3NlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2h0dHA6JywgJ2h0dHA6JykKIAorICAgICAgICAjIFhYWDogVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgbm8gbG9uZ2VyIGNvbXBhdGlibGUgd2l0aCBSRkMzOTg2CisgICAgICAgICMgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi4vLi4vLi4vZycsICdodHRwOi8vYS8uLi9nJykKKyAgICAgICAgIyBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8uLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uLy4uL2cnKQorICAgICAgICAjIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy8uL2cnLCAnaHR0cDovL2EvLi9nJykKKyAgICAgICAgIyBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcvLi4vZycsICdodHRwOi8vYS8uLi9nJykKKworCiAgICAgZGVmIHRlc3RfUkZDMjM2OChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxMTQ2NzogcGF0aCB0aGF0IHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlzIG5vdCBwYXJzZWQgY29ycmVjdGx5CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHBhcnNlKCdtYWlsdG86MTMzN0BleGFtcGxlLm9yZycpLApAQCAtMjU4LDEwICszMTIsNiBAQAogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLi8nLCAnaHR0cDovL2EvJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi4vLi4vZycsICdodHRwOi8vYS9nJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnJywgUkZDMjM5Nl9CQVNFKQotICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uL2cnKQotICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uLy4uL2cnKQotICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcvLi9nJywgJ2h0dHA6Ly9hLy4vZycpCi0gICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy8uLi9nJywgJ2h0dHA6Ly9hLy4uL2cnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnLicsICdodHRwOi8vYS9iL2MvZy4nKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuZycsICdodHRwOi8vYS9iL2MvLmcnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnLi4nLCAnaHR0cDovL2EvYi9jL2cuLicpCkBAIC0yNzcsMTAgKzMyNywxNyBAQAogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnI3MvLi94JywgJ2h0dHA6Ly9hL2IvYy9nI3MvLi94JykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZyNzLy4uL3gnLCAnaHR0cDovL2EvYi9jL2cjcy8uLi94JykKIAorICAgICAgICAjIFhYWDogVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgbm8gbG9uZ2VyIGNvbXBhdGlibGUgd2l0aCBSRkMzOTg2CisgICAgICAgICMgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi4vLi4vLi4vZycsICdodHRwOi8vYS8uLi9nJykKKyAgICAgICAgIyBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uLy4uL2cnKQorICAgICAgICAjIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy8uL2cnLCAnaHR0cDovL2EvLi9nJykKKyAgICAgICAgIyBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcvLi4vZycsICdodHRwOi8vYS8uLi9nJykKKworCiAgICAgZGVmIHRlc3RfUkZDMzk4NihzZWxmKToKICAgICAgICAgIyBUZXN0IGNhc2VzIGZyb20gUkZDMzk4NgogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICc/eScsJ2h0dHA6Ly9hL2IvYy9kO3A/eScpCi0gICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJzt4JywgJ2h0dHA6Ly9hL2IvYy87eCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJzt4JywgJ2h0dHA6Ly9hL2IvYy87eCcpCiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2c6aCcsJ2c6aCcpCiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cnLCdodHRwOi8vYS9iL2MvZycpCiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4vZycsJ2h0dHA6Ly9hL2IvYy9nJykKQEAgLTMwNCwxNyArMzYxLDE3IEBACiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uLy4uJywnaHR0cDovL2EvJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4vLi4vJywnaHR0cDovL2EvJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4vLi4vZycsJ2h0dHA6Ly9hL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLi8uLi8uLi9nJywgJ2h0dHA6Ly9hL2cnKQogCiAgICAgICAgICNBYm5vcm1hbCBFeGFtcGxlcwogCiAgICAgICAgICMgVGhlICdhYm5vcm1hbCBzY2VuYXJpb3MnIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBSRkMyOTg2IHBhcnNpbmcKICAgICAgICAgIyBUZXN0cyBhcmUgaGVyZSBmb3IgcmVmZXJlbmNlLgogCi0gICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLi8uLi8uLi9nJywnaHR0cDovL2EvZycpCi0gICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLi8uLi8uLi8uLi9nJywnaHR0cDovL2EvZycpCi0gICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcvLi9nJywnaHR0cDovL2EvZycpCi0gICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcvLi4vZycsJ2h0dHA6Ly9hL2cnKQotCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uLy4uLy4uL2cnLCdodHRwOi8vYS9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4vLi4vLi4vLi4vZycsJ2h0dHA6Ly9hL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcvLi9nJywnaHR0cDovL2EvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy8uLi9nJywnaHR0cDovL2EvZycpCiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cuJywnaHR0cDovL2EvYi9jL2cuJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLmcnLCdodHRwOi8vYS9iL2MvLmcnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnLi4nLCdodHRwOi8vYS9iL2MvZy4uJykKQEAgLTM1NCwxMCArNDExLDggQEAKICAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuLi9nJywnaHR0cDovL2EvYi9nJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuLi8uLicsJ2h0dHA6Ly9hLycpCiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi4vLi4vZycsJ2h0dHA6Ly9hL2cnKQotICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy4uLy4uLy4uL2cnLCdodHRwOi8vYS8uLi9nJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuLy4uL2cnLCdodHRwOi8vYS9iL2cnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy4vZy8uJywnaHR0cDovL2EvYi9jL2cvJykKLSAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcvLi9nJywnaHR0cDovL2EvLi9nJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdnLy4vaCcsJ2h0dHA6Ly9hL2IvYy9nL2gnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2cvLi4vaCcsJ2h0dHA6Ly9hL2IvYy9oJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdodHRwOmcnLCdodHRwOi8vYS9iL2MvZycpCkBAIC0zNzEsNiArNDI2LDI1IEBACiAgICAgICAgIHNlbGYuY2hlY2tKb2luKCdzdm46Ly9wYXRodG9yZXBvL2RpcjEnLCAnZGlyMicsICdzdm46Ly9wYXRodG9yZXBvL2RpcjInKQogICAgICAgICBzZWxmLmNoZWNrSm9pbignc3ZuK3NzaDovL3BhdGh0b3JlcG8vZGlyMScsICdkaXIyJywgJ3N2bitzc2g6Ly9wYXRodG9yZXBvL2RpcjInKQogCisgICAgICAgICMgWFhYOiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBubyBsb25nZXIgY29tcGF0aWJsZSB3aXRoIFJGQzM5ODYKKyAgICAgICAgIyBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy4uLy4uLy4uL2cnLCdodHRwOi8vYS8uLi9nJykKKyAgICAgICAgIyBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy8uL2cnLCdodHRwOi8vYS8uL2cnKQorCisgICAgICAgICMgdGVzdCBmb3IgaXNzdWUyMjExOCBkdXBsaWNhdGUgc2xhc2hlcworICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSArICcvJywgJ2ZvbycsIFNJTVBMRV9CQVNFICsgJy9mb28nKQorCisgICAgICAgICMgTm9uLVJGQy1kZWZpbmVkIHRlc3RzLCBjb3ZlcmluZyB2YXJpYXRpb25zIG9mIGJhc2UgYW5kIHRyYWlsaW5nCisgICAgICAgICMgc2xhc2hlcworICAgICAgICBzZWxmLmNoZWNrSm9pbignaHR0cDovL2EvYi9jL2QvZS8nLCAnLi4vLi4vZi9nLycsICdodHRwOi8vYS9iL2MvZi9nLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKCdodHRwOi8vYS9iL2MvZC9lJywgJy4uLy4uL2YvZy8nLCAnaHR0cDovL2EvYi9mL2cvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oJ2h0dHA6Ly9hL2IvYy9kL2UvJywgJy8uLi8uLi9mL2cvJywgJ2h0dHA6Ly9hL2YvZy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbignaHR0cDovL2EvYi9jL2QvZScsICcvLi4vLi4vZi9nLycsICdodHRwOi8vYS9mL2cvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oJ2h0dHA6Ly9hL2IvYy9kL2UvJywgJy4uLy4uL2YvZycsICdodHRwOi8vYS9iL2MvZi9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oJ2h0dHA6Ly9hL2IvJywgJy4uLy4uL2YvZy8nLCAnaHR0cDovL2EvZi9nLycpCisKKyAgICAgICAgIyBpc3N1ZSAyMzcwMzogZG9uJ3QgZHVwbGljYXRlIGZpbGVuYW1lCisgICAgICAgIHNlbGYuY2hlY2tKb2luKCdhJywgJ2InLCAnYicpCisKICAgICBkZWYgdGVzdF9SRkMyNzMyKHNlbGYpOgogICAgICAgICBzdHJfY2FzZXMgPSBbCiAgICAgICAgICAgICAoJ2h0dHA6Ly9UZXN0LnB5dGhvbi5vcmc6NTQzMi9mb28vJywgJ3Rlc3QucHl0aG9uLm9yZycsIDU0MzIpLApAQCAtODAzLDYgKzg3NywxNiBAQAogICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2UudXJsZW5jb2RlKHsnYSc6IFRyaXZpYWwoKX0sIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnYT10cml2aWFsJykKIAorICAgIGRlZiB0ZXN0X3VybGVuY29kZV9xdW90ZV92aWEoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS51cmxlbmNvZGUoeydhJzogJ3NvbWUgdmFsdWUnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICJhPXNvbWUrdmFsdWUiKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2UudXJsZW5jb2RlKHsnYSc6ICdzb21lIHZhbHVlL2Fub3RoZXInfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZV92aWE9dXJsbGliLnBhcnNlLnF1b3RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgImE9c29tZSUyMHZhbHVlJTJGYW5vdGhlciIpCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS51cmxlbmNvZGUoeydhJzogJ3NvbWUgdmFsdWUvYW5vdGhlcid9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmU9Jy8nLCBxdW90ZV92aWE9dXJsbGliLnBhcnNlLnF1b3RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgImE9c29tZSUyMHZhbHVlL2Fub3RoZXIiKQorCiAgICAgZGVmIHRlc3RfcXVvdGVfZnJvbV9ieXRlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1cmxsaWIucGFyc2UucXVvdGVfZnJvbV9ieXRlcywgJ2ZvbycpCiAgICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS5xdW90ZV9mcm9tX2J5dGVzKGInYXJjaGFlb2xvZ2ljYWwgYXJjYW5hJykKQEAgLTg2MSw2ICs5NDUsMjIgQEAKICAgICAgICAgcXVvdGVyID0gdXJsbGliLnBhcnNlLlF1b3Rlcih1cmxsaWIucGFyc2UuX0FMV0FZU19TQUZFKQogICAgICAgICBzZWxmLmFzc2VydEluKCdRdW90ZXInLCByZXByKHF1b3RlcikpCiAKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gW10KKyAgICAgICAgdW5kb2N1bWVudGVkID0geworICAgICAgICAgICAgJ3NwbGl0YXR0cicsICdzcGxpdGhvc3QnLCAnc3BsaXRucG9ydCcsICdzcGxpdHBhc3N3ZCcsCisgICAgICAgICAgICAnc3BsaXRwb3J0JywgJ3NwbGl0cXVlcnknLCAnc3BsaXR0YWcnLCAnc3BsaXR0eXBlJywgJ3NwbGl0dXNlcicsCisgICAgICAgICAgICAnc3BsaXR2YWx1ZScsCisgICAgICAgICAgICAnUXVvdGVyJywgJ1Jlc3VsdEJhc2UnLCAnY2xlYXJfY2FjaGUnLCAndG9fYnl0ZXMnLCAndW53cmFwJywKKyAgICAgICAgfQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIodXJsbGliLnBhcnNlKToKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnXycpIG9yIG5hbWUgaW4gdW5kb2N1bWVudGVkOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvYmplY3QgPSBnZXRhdHRyKHVybGxpYi5wYXJzZSwgbmFtZSkKKyAgICAgICAgICAgIGlmIGdldGF0dHIob2JqZWN0LCAnX19tb2R1bGVfXycsIE5vbmUpID09ICd1cmxsaWIucGFyc2UnOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkLmFwcGVuZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwodXJsbGliLnBhcnNlLl9fYWxsX18sIGV4cGVjdGVkKQorCiAKIGNsYXNzIFV0aWxpdHlfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RjYXNlIHRvIHRlc3QgdGhlIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgaW4gdGhlIHVybGxpYi4iIiIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CmluZGV4IDNlYjg4MDEuLjgzNTdmOGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQpAQCAtMSw2ICsxLDcgQEAKICMgQ2hlY2sgZXZlcnkgcGF0aCB0aHJvdWdoIGV2ZXJ5IG1ldGhvZCBvZiBVc2VyRGljdAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIG1hcHBpbmdfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IGNvbGxlY3Rpb25zCiAKIGQwID0ge30KQEAgLTIxNSwxMCArMjE2LDUgQEAKIAogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgVXNlckRpY3RUZXN0LAotICAgICkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91c2VybGlzdC5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcmxpc3QucHkKaW5kZXggNjM4MTA3MC4uZjkyZTRkMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2VybGlzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJsaXN0LnB5CkBAIC0yLDYgKzIsNyBAQAogCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBVc2VyTGlzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBsaXN0X3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKIAogY2xhc3MgVXNlckxpc3RUZXN0KGxpc3RfdGVzdHMuQ29tbW9uVGVzdCk6CiAgICAgdHlwZTJ0ZXN0ID0gVXNlckxpc3QKQEAgLTU4LDggKzU5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCB2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodSksIHR5cGUodikpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVc2VyTGlzdFRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXVpZC5weSBiL0xpYi90ZXN0L3Rlc3RfdXVpZC5weQppbmRleCAxZThjYmEzLi5lMzRkOGU2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3V1aWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91dWlkLnB5CkBAIC0xLDkgKzEsMTAgQEAKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB1dWlkCiAKIGRlZiBpbXBvcnRhYmxlKG5hbWUpOgpAQCAtMzUzLDcgKzM1NCw2IEBACiAgICAgICAgICAgICBlcXVhbCh1LCB1dWlkLlVVSUQodikpCiAgICAgICAgICAgICBlcXVhbChzdHIodSksIHYpCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhpbXBvcnRhYmxlKCdjdHlwZXMnKSwgJ3JlcXVpcmVzIGN0eXBlcycpCiAgICAgZGVmIHRlc3RfdXVpZDQoc2VsZik6CiAgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAogCkBAIC00MTIsMjggKzQxMiwyNyBAQAogY2xhc3MgVGVzdEludGVybmFscyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQogICAgIGRlZiB0ZXN0X2ZpbmRfbWFjKHNlbGYpOgotICAgICAgICBkYXRhID0gJycnXAotCisgICAgICAgIGRhdGEgPSAnJycKIGZha2UgaHdhZGRyCiBjc2NvdHVuMCAgTGluayBlbmNhcDpVTlNQRUMgIEhXYWRkciAwMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMAogZXRoMCAgICAgIExpbmsgZW5jYXA6RXRoZXJuZXQgIEhXYWRkciAxMjozNDo1Njo3ODo5MDphYgogJycnCi0gICAgICAgIGRlZiBtb2NrX3BvcGVuKGNtZCk6Ci0gICAgICAgICAgICByZXR1cm4gaW8uU3RyaW5nSU8oZGF0YSkKIAotICAgICAgICBpZiBzaHV0aWwud2hpY2goJ2lmY29uZmlnJykgaXMgTm9uZToKLSAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoc2VwLmpvaW4oKCcvc2JpbicsICcvdXNyL3NiaW4nKSkKLSAgICAgICAgICAgIGlmIHNodXRpbC53aGljaCgnaWZjb25maWcnLCBwYXRoPXBhdGgpIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgncmVxdWlyZXMgaWZjb25maWcnKQorICAgICAgICBwb3BlbiA9IHVuaXR0ZXN0Lm1vY2suTWFnaWNNb2NrKCkKKyAgICAgICAgcG9wZW4uc3Rkb3V0ID0gaW8uQnl0ZXNJTyhkYXRhLmVuY29kZSgpKQogCi0gICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIob3MsICdwb3BlbicsIG1vY2tfcG9wZW4pOgotICAgICAgICAgICAgbWFjID0gdXVpZC5fZmluZF9tYWMoCi0gICAgICAgICAgICAgICAgY29tbWFuZD0naWZjb25maWcnLAotICAgICAgICAgICAgICAgIGFyZ3M9JycsCi0gICAgICAgICAgICAgICAgaHdfaWRlbnRpZmllcnM9Wydod2FkZHInXSwKLSAgICAgICAgICAgICAgICBnZXRfaW5kZXg9bGFtYmRhIHg6IHggKyAxLAotICAgICAgICAgICAgKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWMsIDB4MTIzNDU2Nzg5MGFiKQorICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KHNodXRpbCwgJ3doaWNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9Jy9zYmluL2lmY29uZmlnJyk6CisgICAgICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KHN1YnByb2Nlc3MsICdQb3BlbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1wb3Blbik6CisgICAgICAgICAgICAgICAgbWFjID0gdXVpZC5fZmluZF9tYWMoCisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9J2lmY29uZmlnJywKKyAgICAgICAgICAgICAgICAgICAgYXJncz0nJywKKyAgICAgICAgICAgICAgICAgICAgaHdfaWRlbnRpZmllcnM9W2InaHdhZGRyJ10sCisgICAgICAgICAgICAgICAgICAgIGdldF9pbmRleD1sYW1iZGEgeDogeCArIDEsCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjLCAweDEyMzQ1Njc4OTBhYikKIAogICAgIGRlZiBjaGVja19ub2RlKHNlbGYsIG5vZGUsIHJlcXVpcmVzPU5vbmUsIG5ldHdvcms9RmFsc2UpOgogICAgICAgICBpZiByZXF1aXJlcyBhbmQgbm9kZSBpcyBOb25lOgpAQCAtNDU0LDYgKzQ1MywxMSBAQAogICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSwgJ2lmY29uZmlnJywgVHJ1ZSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgJ3JlcXVpcmVzIFBvc2l4JykKKyAgICBkZWYgdGVzdF9pcF9nZXRub2RlKHNlbGYpOgorICAgICAgICBub2RlID0gdXVpZC5faXBfZ2V0bm9kZSgpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnaXAnLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQogICAgIGRlZiB0ZXN0X2FycF9nZXRub2RlKHNlbGYpOgogICAgICAgICBub2RlID0gdXVpZC5fYXJwX2dldG5vZGUoKQogICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSwgJ2FycCcsIFRydWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ZlbnYucHkgYi9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKaW5kZXggYjQ2MjU4OC4uZDJjOTg2ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF92ZW52LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdmVudi5weQpAQCAtOCwxMSArOCwxMiBAQAogaW1wb3J0IGVuc3VyZXBpcAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKGNhcHR1cmVkX3N0ZG91dCwgY2FwdHVyZWRfc3RkZXJyLCBydW5fdW5pdHRlc3QsCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKGNhcHR1cmVkX3N0ZG91dCwgY2FwdHVyZWRfc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5fc3ltbGluaywgRW52aXJvbm1lbnRWYXJHdWFyZCwgcm10cmVlKQogaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTI1LDYgKzI2LDExIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgc3NsID0gTm9uZQogCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKwogc2tpcEluVmVudiA9IHVuaXR0ZXN0LnNraXBJZihzeXMucHJlZml4ICE9IHN5cy5iYXNlX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3Qgbm90IGFwcHJvcHJpYXRlIGluIGEgdmVudicpCiAKQEAgLTMxOSw2ICszMjUsOCBAQAogCiAgICAgIyBSZXF1ZXN0aW5nIHBpcCBmYWlscyB3aXRob3V0IFNTTCAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzQ0KQogICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsIGVuc3VyZXBpcC5fTUlTU0lOR19TU0xfTUVTU0FHRSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdzb21lIGRlcGVuZGVuY2llcyBvZiBwaXAgaW1wb3J0IHRocmVhZGluZycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgbW9kdWxlIHVuY29uZGl0aW9uYWxseScpCiAgICAgZGVmIHRlc3Rfd2l0aF9waXAoc2VsZik6CiAgICAgICAgIHJtdHJlZShzZWxmLmVudl9kaXIpCiAgICAgICAgIHdpdGggRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudnZhcnM6CkBAIC0zODcsNyArMzk1LDE1IEBACiAgICAgICAgICMgV2UgZm9yY2UgZXZlcnl0aGluZyB0byB0ZXh0LCBzbyB1bml0dGVzdCBnaXZlcyB0aGUgZGV0YWlsZWQgZGlmZgogICAgICAgICAjIGlmIHdlIGdldCB1bmV4cGVjdGVkIHJlc3VsdHMKICAgICAgICAgZXJyID0gZXJyLmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsICIiKQorICAgICAgICAjIElnbm9yZSB0aGUgd2FybmluZzoKKyAgICAgICAgIyAgICJUaGUgZGlyZWN0b3J5ICckSE9NRS8uY2FjaGUvcGlwL2h0dHAnIG9yIGl0cyBwYXJlbnQgZGlyZWN0b3J5CisgICAgICAgICMgICAgaXMgbm90IG93bmVkIGJ5IHRoZSBjdXJyZW50IHVzZXIgYW5kIHRoZSBjYWNoZSBoYXMgYmVlbiBkaXNhYmxlZC4KKyAgICAgICAgIyAgICBQbGVhc2UgY2hlY2sgdGhlIHBlcm1pc3Npb25zIGFuZCBvd25lciBvZiB0aGF0IGRpcmVjdG9yeS4gSWYKKyAgICAgICAgIyAgICBleGVjdXRpbmcgcGlwIHdpdGggc3VkbywgeW91IG1heSB3YW50IHN1ZG8ncyAtSCBmbGFnLiIKKyAgICAgICAgIyB3aGVyZSAkSE9NRSBpcyByZXBsYWNlZCBieSB0aGUgSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICAgICAgZXJyID0gcmUuc3ViKCJeVGhlIGRpcmVjdG9yeSAuKiBvciBpdHMgcGFyZW50IGRpcmVjdG9yeSBpcyBub3Qgb3duZWQgIgorICAgICAgICAgICAgICAgICAgICAgImJ5IHRoZSBjdXJyZW50IHVzZXIgLiokIiwgIiIsIGVyciwgZmxhZ3M9cmUuTVVMVElMSU5FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5yc3RyaXAoKSwgIiIpCiAgICAgICAgICMgQmVpbmcgZmFpcmx5IHNwZWNpZmljIHJlZ2FyZGluZyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyIGZvciB0aGUKICAgICAgICAgIyBpbml0aWFsIGJ1bmRsaW5nIHBoYXNlIGluIFB5dGhvbiAzLjQuIElmIHRoZSBvdXRwdXQgY2hhbmdlcyBpbgogICAgICAgICAjIGZ1dHVyZSBwaXAgdmVyc2lvbnMsIHRoaXMgdGVzdCBjYW4gbGlrZWx5IGJlIHJlbGF4ZWQgZnVydGhlci4KQEAgLTM5OCw4ICs0MTQsNSBAQAogICAgICAgICBzZWxmLmFzc2VydF9waXBfbm90X2luc3RhbGxlZCgpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChCYXNpY1Rlc3QsIEVuc3VyZVBpcFRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkgYi9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CmluZGV4IGY2YTA2NWQuLmViNTFiMmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93YWl0My5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVhcF9jaGlsZHJlbgogCiBpZiBub3QgaGFzYXR0cihvcywgJ2ZvcmsnKToKICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3MuZm9yayBub3QgZGVmaW5lZCIpCkBAIC0xOCw3ICsxOCw4IEBACiAgICAgICAgICMgVGhpcyBtYW55IGl0ZXJhdGlvbnMgY2FuIGJlIHJlcXVpcmVkLCBzaW5jZSBzb21lIHByZXZpb3VzbHkgcnVuCiAgICAgICAgICMgdGVzdHMgKGUuZy4gdGVzdF9jdHlwZXMpIGNvdWxkIGhhdmUgc3Bhd25lZCBhIGxvdCBvZiBjaGlsZHJlbgogICAgICAgICAjIHZlcnkgcXVpY2tseS4KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMzApOgorICAgICAgICBkZWFkbGluZSA9IHRpbWUubW9ub3RvbmljKCkgKyAxMC4wCisgICAgICAgIHdoaWxlIHRpbWUubW9ub3RvbmljKCkgPD0gZGVhZGxpbmU6CiAgICAgICAgICAgICAjIHdhaXQzKCkgc2hvdWxkbid0IGhhbmcsIGJ1dCBzb21lIG9mIHRoZSBidWlsZGJvdHMgc2VlbSB0byBoYW5nCiAgICAgICAgICAgICAjIGluIHRoZSBmb3JraW5nIHRlc3RzLiAgVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGZpeCB0aGUgcHJvYmxlbS4KICAgICAgICAgICAgIHNwaWQsIHN0YXR1cywgcnVzYWdlID0gb3Mud2FpdDMob3MuV05PSEFORykKQEAgLTMwLDkgKzMxLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocnVzYWdlKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFdhaXQzVGVzdCkKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgogICAgIHJlYXBfY2hpbGRyZW4oKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhaXQ0LnB5IGIvTGliL3Rlc3QvdGVzdF93YWl0NC5weQppbmRleCAzNTJjMTFhLi4zZTZhNzlkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhaXQ0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDQucHkKQEAgLTQsOCArNCw5IEBACiBpbXBvcnQgb3MKIGltcG9ydCB0aW1lCiBpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuLCBnZXRfYXR0cmlidXRlCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVhcF9jaGlsZHJlbiwgZ2V0X2F0dHJpYnV0ZQogCiAjIElmIGVpdGhlciBvZiB0aGVzZSBkbyBub3QgZXhpc3QsIHNraXAgdGhpcyB0ZXN0LgogZ2V0X2F0dHJpYnV0ZShvcywgJ2ZvcmsnKQpAQCAtMTksMjAgKzIwLDIwIEBACiAgICAgICAgICAgICAjIElzc3VlICMxMTE4NTogd2FpdDQgaXMgYnJva2VuIG9uIEFJWCBhbmQgd2lsbCBhbHdheXMgcmV0dXJuIDAKICAgICAgICAgICAgICMgd2l0aCBXTk9IQU5HLgogICAgICAgICAgICAgb3B0aW9uID0gMAotICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgIGRlYWRsaW5lID0gdGltZS5tb25vdG9uaWMoKSArIDEwLjAKKyAgICAgICAgd2hpbGUgdGltZS5tb25vdG9uaWMoKSA8PSBkZWFkbGluZToKICAgICAgICAgICAgICMgd2FpdDQoKSBzaG91bGRuJ3QgaGFuZywgYnV0IHNvbWUgb2YgdGhlIGJ1aWxkYm90cyBzZWVtIHRvIGhhbmcKICAgICAgICAgICAgICMgaW4gdGhlIGZvcmtpbmcgdGVzdHMuICBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gZml4IHRoZSBwcm9ibGVtLgogICAgICAgICAgICAgc3BpZCwgc3RhdHVzLCBydXNhZ2UgPSBvcy53YWl0NChjcGlkLCBvcHRpb24pCiAgICAgICAgICAgICBpZiBzcGlkID09IGNwaWQ6CiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BpZCwgY3BpZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocnVzYWdlKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFdhaXQ0VGVzdCkKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgogICAgIHJlYXBfY2hpbGRyZW4oKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5IGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X3dhcm5pbmdzL19faW5pdF9fLnB5CmluZGV4IGI1MTlmMGEuLjg0YTZmYjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy9fX2luaXRfXy5weQpAQCAtNSw5ICs1LDkgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiAKLWZyb20gdGVzdCBpbXBvcnQgd2FybmluZ190ZXN0cworZnJvbSB0ZXN0LnRlc3Rfd2FybmluZ3MuZGF0YSBpbXBvcnQgc3RhY2tsZXZlbCBhcyB3YXJuaW5nX3Rlc3RzCiAKIGltcG9ydCB3YXJuaW5ncyBhcyBvcmlnaW5hbF93YXJuaW5ncwogCkBAIC0xMDQsNyArMTA0LDE1IEBACiAgICAgICAgICAgICBtZXNzYWdlID0gIkZpbHRlclRlc3RzLnRlc3RfaWdub3JlX2FmdGVyX2RlZmF1bHQiCiAgICAgICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4obWVzc2FnZSwgVXNlcldhcm5pbmcpCi0gICAgICAgICAgICBmKCkKKworICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIHN0ZGVyciA9IHN0ZGVyci5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJVc2VyV2FybmluZzogRmlsdGVyVGVzdHMudGVzdF9pZ25vcmVfYWZ0ZXJfZGVmYXVsdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInNlbGYubW9kdWxlLndhcm4obWVzc2FnZSwgVXNlcldhcm5pbmcpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyKQorCiAgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBmKQogCkBAIC0xOTQsMTEgKzIwMiwxMSBAQAogICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCiAgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygib25jZSIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQogICAgICAgICAgICAgbWVzc2FnZSA9IFVzZXJXYXJuaW5nKCJGaWx0ZXJUZXN0cy50ZXN0X29uY2UiKQotICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgInRlc3Rfd2FybmluZ3MucHkiLAorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgIl9faW5pdF9fLnB5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQogICAgICAgICAgICAgZGVsIHdbOl0KLSAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJ0ZXN0X3dhcm5pbmdzLnB5IiwKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJfX2luaXRfXy5weSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgInRlc3Rfd2FybmluZ3MyLnB5IiwKQEAgLTI1Myw2ICsyNjEsMTggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdbLTFdLm1lc3NhZ2UpLCB0ZXh0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQogCisgICAgZGVmIHRlc3RfbWVzc2FnZV9tYXRjaGluZyhzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgIm1hdGNoIiwgVXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgc2VsZi5tb2R1bGUud2FybiwgIm1hdGNoIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLCAibWF0Y2ggcHJlZml4IikKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oInN1ZmZpeCBtYXRjaCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcsIFtdKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybigic29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodywgW10pCisKICAgICBkZWYgdGVzdF9tdXRhdGVfZmlsdGVyX2xpc3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFg6CiAgICAgICAgICAgICBkZWYgbWF0Y2goc2VsZiwgYSk6CkBAIC0yNjUsNiArMjg1LDUzIEBACiAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KFVzZXJXYXJuaW5nKCJiIiksIE5vbmUsICJmLnB5IiwgNDIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwgImIiKQogCisgICAgZGVmIHRlc3RfZmlsdGVyd2FybmluZ3NfZHVwbGljYXRlX2ZpbHRlcnMoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLm1vZHVsZS5maWx0ZXJzKSwgMSkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5tb2R1bGUuZmlsdGVycyksIDIsCisgICAgICAgICAgICAgICAgImZpbHRlcndhcm5pbmdzIGluc2VydGVkIGR1cGxpY2F0ZSBmaWx0ZXIiCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcnNbMF1bMF0sICJlcnJvciIsCisgICAgICAgICAgICAgICAgImZpbHRlcndhcm5pbmdzIGRpZCBub3QgcHJvbW90ZSBmaWx0ZXIgdG8gIgorICAgICAgICAgICAgICAgICJ0aGUgYmVnaW5uaW5nIG9mIGxpc3QiCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zaW1wbGVmaWx0ZXJfZHVwbGljYXRlX2ZpbHRlcnMoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuc2ltcGxlZmlsdGVyKCJlcnJvciIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5tb2R1bGUuZmlsdGVycyksIDEpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuc2ltcGxlZmlsdGVyKCJlcnJvciIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsZW4oc2VsZi5tb2R1bGUuZmlsdGVycyksIDIsCisgICAgICAgICAgICAgICAgInNpbXBsZWZpbHRlciBpbnNlcnRlZCBkdXBsaWNhdGUgZmlsdGVyIgorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJzWzBdWzBdLCAiZXJyb3IiLAorICAgICAgICAgICAgICAgICJzaW1wbGVmaWx0ZXIgZGlkIG5vdCBwcm9tb3RlIGZpbHRlciB0byB0aGUgYmVnaW5uaW5nIG9mIGxpc3QiCisgICAgICAgICAgICApCisgICAgZGVmIHRlc3RfYXBwZW5kX2R1cGxpY2F0ZShzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUsCisgICAgICAgICAgICAgICAgcmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnNpbXBsZWZpbHRlcigiaWdub3JlIikKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnNpbXBsZWZpbHRlcigiZXJyb3IiLCBhcHBlbmQ9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgYXBwZW5kPVRydWUpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKCJ0ZXN0X2FwcGVuZF9kdXBsaWNhdGUiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubW9kdWxlLmZpbHRlcnMpLCAyLAorICAgICAgICAgICAgICAgICJzaW1wbGVmaWx0ZXIgaW5zZXJ0ZWQgZHVwbGljYXRlIGZpbHRlciIKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwLAorICAgICAgICAgICAgICAgICJhcHBlbmRlZCBkdXBsaWNhdGUgY2hhbmdlZCBvcmRlciBvZiBmaWx0ZXJzIgorICAgICAgICAgICAgKQorCiBjbGFzcyBDRmlsdGVyVGVzdHMoRmlsdGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCiAKQEAgLTMwNCwxMCArMzcxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKICAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLmlubmVyKCJzcGFtMSIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nX3Rlc3RzLnB5IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFja2xldmVsLnB5IikKICAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLm91dGVyKCJzcGFtMiIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nX3Rlc3RzLnB5IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFja2xldmVsLnB5IikKIAogICAgIGRlZiB0ZXN0X3N0YWNrbGV2ZWwoc2VsZik6CiAgICAgICAgICMgVGVzdCBzdGFja2xldmVsIGFyZ3VtZW50CkBAIC0zMTcsMjUgKzM4NCwzNiBAQAogICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CiAgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcigic3BhbTMiLCBzdGFja2xldmVsPTEpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nX3Rlc3RzLnB5IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFja2xldmVsLnB5IikKICAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLm91dGVyKCJzcGFtNCIsIHN0YWNrbGV2ZWw9MSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUod1stMV0uZmlsZW5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdfdGVzdHMucHkiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YWNrbGV2ZWwucHkiKQogCiAgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcigic3BhbTUiLCBzdGFja2xldmVsPTIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3dhcm5pbmdzLnB5IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2luaXRfXy5weSIpCiAgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5vdXRlcigic3BhbTYiLCBzdGFja2xldmVsPTIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nX3Rlc3RzLnB5IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFja2xldmVsLnB5IikKICAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLm91dGVyKCJzcGFtNi41Iiwgc3RhY2tsZXZlbD0zKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZSh3Wy0xXS5maWxlbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF93YXJuaW5ncy5weSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19pbml0X18ucHkiKQogCiAgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcigic3BhbTciLCBzdGFja2xldmVsPTk5OTkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMiKQogCisgICAgZGVmIHRlc3Rfc3RhY2tsZXZlbF9pbXBvcnQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI0MzA1OiBXaXRoIHN0YWNrbGV2ZWw9MiwgbW9kdWxlLWxldmVsIHdhcm5pbmdzIHNob3VsZCB3b3JrLgorICAgICAgICBzdXBwb3J0LnVubG9hZCgndGVzdC50ZXN0X3dhcm5pbmdzLmRhdGEuaW1wb3J0X3dhcm5pbmcnKQorICAgICAgICB3aXRoIHdhcm5pbmdzX3N0YXRlKHNlbGYubW9kdWxlKToKKyAgICAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCisgICAgICAgICAgICAgICAgaW1wb3J0IHRlc3QudGVzdF93YXJuaW5ncy5kYXRhLmltcG9ydF93YXJuaW5nCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3WzBdLmZpbGVuYW1lLCBfX2ZpbGVfXykKKwogICAgIGRlZiB0ZXN0X21pc3NpbmdfZmlsZW5hbWVfbm90X21haW4oc2VsZik6CiAgICAgICAgICMgSWYgX19maWxlX18gaXMgbm90IHNwZWNpZmllZCBhbmQgX19tYWluX18gaXMgbm90IHRoZSBtb2R1bGUgbmFtZSwKICAgICAgICAgIyB0aGVuIF9fZmlsZV9fIHNob3VsZCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBuYW1lLgpAQCAtNDUwLDYgKzUyOCw0NCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihCYWRTdHJXYXJuaW5nKCkpCiAKKyAgICBkZWYgdGVzdF93YXJuaW5nX2NsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIE15V2FybmluZ0NsYXNzKFdhcm5pbmcpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE5vbldhcm5pbmdTdWJjbGFzczoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIHBhc3NpbmcgYSBub24tc3ViY2xhc3Mgb2YgV2FybmluZyBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybignYmFkIHdhcm5pbmcgY2F0ZWdvcnknLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignY2F0ZWdvcnkgbXVzdCBiZSBhIFdhcm5pbmcgc3ViY2xhc3MsIG5vdCAnLAorICAgICAgICAgICAgICAgICAgICAgIHN0cihjbS5leGNlcHRpb24pKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oJ2JhZCB3YXJuaW5nIGNhdGVnb3J5JywgTm9uV2FybmluZ1N1YmNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEluKCdjYXRlZ29yeSBtdXN0IGJlIGEgV2FybmluZyBzdWJjbGFzcywgbm90ICcsCisgICAgICAgICAgICAgICAgICAgICAgc3RyKGNtLmV4Y2VwdGlvbikpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHdhcm5pbmcgaW5zdGFuY2VzIGFsc28gcmFpc2UgYSBUeXBlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybignYmFkIHdhcm5pbmcgY2F0ZWdvcnknLCBNeVdhcm5pbmdDbGFzcygpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdjYXRlZ29yeSBtdXN0IGJlIGEgV2FybmluZyBzdWJjbGFzcywgbm90ICcsCisgICAgICAgICAgICAgICAgICAgICAgc3RyKGNtLmV4Y2VwdGlvbikpCisKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygnZGVmYXVsdCcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoTXlXYXJuaW5nQ2xhc3MpIGFzIGNtOgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oJ2dvb2Qgd2FybmluZyBjYXRlZ29yeScsIE15V2FybmluZ0NsYXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZ29vZCB3YXJuaW5nIGNhdGVnb3J5Jywgc3RyKGNtLndhcm5pbmcpKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoVXNlcldhcm5pbmcpIGFzIGNtOgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oJ2dvb2Qgd2FybmluZyBjYXRlZ29yeScsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdnb29kIHdhcm5pbmcgY2F0ZWdvcnknLCBzdHIoY20ud2FybmluZykpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhNeVdhcm5pbmdDbGFzcykgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybignZ29vZCB3YXJuaW5nIGNhdGVnb3J5JywgTXlXYXJuaW5nQ2xhc3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20ud2FybmluZywgV2FybmluZykKIAogY2xhc3MgQ1dhcm5UZXN0cyhXYXJuVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCkBAIC00ODUsNiArNjAxLDE0IEBACiAgICAgICAgICAgICBzZWxmLm1vZHVsZS5fc2V0b3B0aW9uKCdlcnJvcjo6V2FybmluZzo6MCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgc2VsZi5tb2R1bGUud2FybiwgJ2NvbnZlcnQgdG8gZXJyb3InKQogCisKK2NsYXNzIENXQ21kTGluZVRlc3RzKFdDbWRMaW5lVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCisKKworY2xhc3MgUHlXQ21kTGluZVRlc3RzKFdDbWRMaW5lVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBweV93YXJuaW5ncworCiAgICAgZGVmIHRlc3RfaW1wcm9wZXJfb3B0aW9uKHNlbGYpOgogICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBjaGVjayB0aGF0IHRoZSBtZXNzYWdlIGlzIHByaW50ZWQgb3V0IHdoZW4KICAgICAgICAgIyB0aGUgaW50ZXJwcmV0ZXIgaXMgZXhlY3V0ZWQuIFRoaXMgYWxzbyBjaGVja3MgdGhhdCBvcHRpb25zIGFyZQpAQCAtNTAxLDEyICs2MjUsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5zdHJpcCgpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInUnVudGltZVdhcm5pbmcnLCBlcnIpCiAKLWNsYXNzIENXQ21kTGluZVRlc3RzKFdDbWRMaW5lVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCi0KLWNsYXNzIFB5V0NtZExpbmVUZXN0cyhXQ21kTGluZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgbW9kdWxlID0gcHlfd2FybmluZ3MKLQogCiBjbGFzcyBfV2FybmluZ3NUZXN0cyhCYXNlVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC04MzksNyArOTU3LDE5IEBACiAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSkiLAogICAgICAgICAgICAgUFlUSE9OV0FSTklOR1M9Imlnbm9yZTo6RGVwcmVjYXRpb25XYXJuaW5nIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsCi0gICAgICAgICAgICBiIlsnaWdub3JlOjpVbmljb2RlV2FybmluZycsICdpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyddIikKKyAgICAgICAgICAgIGIiWydpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZycsICdpZ25vcmU6OlVuaWNvZGVXYXJuaW5nJ10iKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RpbmdfZW52dmFyX2FuZF9jb21tYW5kX2xpbmUoc2VsZik6CisgICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgiLVdlcnJvcjo6RGVwcmVjYXRpb25XYXJuaW5nIiwgIi1jIiwKKyAgICAgICAgICAgICJpbXBvcnQgc3lzLCB3YXJuaW5nczsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSk7ICIKKyAgICAgICAgICAgICJ3YXJuaW5ncy53YXJuKCdNZXNzYWdlJywgRGVwcmVjYXRpb25XYXJuaW5nKSIsCisgICAgICAgICAgICBQWVRIT05XQVJOSU5HUz0iZGVmYXVsdDo6RGVwcmVjYXRpb25XYXJuaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsCisgICAgICAgICAgICBiIlsnZGVmYXVsdDo6RGVwcmVjYXRpb25XYXJuaW5nJywgJ2Vycm9yOjpEZXByZWNhdGlvbldhcm5pbmcnXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgIFtiIlRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToiLAorICAgICAgICAgICAgIGIiICBGaWxlIFwiPHN0cmluZz5cIiwgbGluZSAxLCBpbiA8bW9kdWxlPiIsCisgICAgICAgICAgICAgYiJEZXByZWNhdGlvbldhcm5pbmc6IE1lc3NhZ2UiXSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSAhPSAnYXNjaWknLAogICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBub24tYXNjaWkgZmlsZXN5c3RlbWVuY29kaW5nJykKQEAgLTg3MCw3ICsxMDAwLDkgQEAKICAgICAgICAgICAgICMgVXNlIC1XIHRvIGxvYWQgd2FybmluZ3MgbW9kdWxlIGF0IHN0YXJ0dXAKICAgICAgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgJ3Bhc3MnLCAnLVcnLCAnYWx3YXlzJywgUFlUSE9OUEFUSD1jd2QpCiAKKwogY2xhc3MgRmluYWxpemF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHN1cHBvcnQucmVxdWlyZXNfdHlwZV9jb2xsZWN0aW5nCiAgICAgZGVmIHRlc3RfZmluYWxpemF0aW9uKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxOTQyMTogd2FybmluZ3Mud2FybigpIHNob3VsZCBub3QgY3Jhc2gKICAgICAgICAgIyBkdXJpbmcgUHl0aG9uIGZpbmFsaXphdGlvbgpAQCAtODg5LDYgKzEwMjEsMjMgQEAKICAgICAgICAgIyBvZiB0aGUgc2NyaXB0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJ19fbWFpbl9fOjc6IFVzZXJXYXJuaW5nOiB0ZXN0JykKIAorICAgIGRlZiB0ZXN0X2xhdGVfcmVzb3VyY2Vfd2FybmluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjE5MjU6IEVtaXR0aW5nIGEgUmVzb3VyY2VXYXJuaW5nIGxhdGUgZHVyaW5nIHRoZSBQeXRob24KKyAgICAgICAgIyBzaHV0ZG93biBtdXN0IGJlIGxvZ2dlZC4KKworICAgICAgICBleHBlY3RlZCA9IGIic3lzOjE6IFJlc291cmNlV2FybmluZzogdW5jbG9zZWQgZmlsZSAiCisKKyAgICAgICAgIyBkb24ndCBpbXBvcnQgdGhlIHdhcm5pbmdzIG1vZHVsZQorICAgICAgICAjIChfd2FybmluZ3Mgd2lsbCB0cnkgdG8gaW1wb3J0IGl0KQorICAgICAgICBjb2RlID0gImYgPSBvcGVuKCVhKSIgJSBfX2ZpbGVfXworICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItV2QiLCAiLWMiLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpLCBhc2NpaShlcnIpKQorCisgICAgICAgICMgaW1wb3J0IHRoZSB3YXJuaW5ncyBtb2R1bGUKKyAgICAgICAgY29kZSA9ICJpbXBvcnQgd2FybmluZ3M7IGYgPSBvcGVuKCVhKSIgJSBfX2ZpbGVfXworICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItV2QiLCAiLWMiLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpLCBhc2NpaShlcnIpKQorCiAKIGRlZiBzZXRVcE1vZHVsZSgpOgogICAgIHB5X3dhcm5pbmdzLm9uY2VyZWdpc3RyeS5jbGVhcigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGU1MmVjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy9fX21haW5fXy5weQpAQCAtMCwwICsxLDMgQEAKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCd0ZXN0LnRlc3Rfd2FybmluZ3MnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy9kYXRhL2ltcG9ydF93YXJuaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy9kYXRhL2ltcG9ydF93YXJuaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZGFlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzL2RhdGEvaW1wb3J0X3dhcm5pbmcucHkKQEAgLTAsMCArMSwzIEBACitpbXBvcnQgd2FybmluZ3MKKword2FybmluZ3Mud2FybignbW9kdWxlLWxldmVsIHdhcm5pbmcnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3dhcm5pbmdfdGVzdHMucHkgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzL2RhdGEvc3RhY2tsZXZlbC5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3Qvd2FybmluZ190ZXN0cy5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF93YXJuaW5ncy9kYXRhL3N0YWNrbGV2ZWwucHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQppbmRleCA0MzEzYzFkLi42ZDUwYTY2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CkBAIC03LDcgKzcsOCBAQAogaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBjb3B5CiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogCiAjIFVzZWQgaW4gUmVmZXJlbmNlc1Rlc3RDYXNlLnRlc3RfcmVmX2NyZWF0ZWRfZHVyaW5nX2RlbCgpIC4KIHJlZl9mcm9tX2RlbCA9IE5vbmUKQEAgLTkyLDYgKzkzLDE4IEBACiAgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfY2FsbGJhY2soY3JlYXRlX2Z1bmN0aW9uKQogICAgICAgICBzZWxmLmNoZWNrX2Jhc2ljX2NhbGxiYWNrKGNyZWF0ZV9ib3VuZF9tZXRob2QpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgY3JlYXRlX2NmdW5jdGlvbiA9IF90ZXN0Y2FwaS5jcmVhdGVfY2Z1bmN0aW9uCisgICAgICAgIGYgPSBjcmVhdGVfY2Z1bmN0aW9uKCkKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIGYpCisgICAgICAgIGRlbCBmCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCisgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfcmVmKGNyZWF0ZV9jZnVuY3Rpb24pCisgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfY2FsbGJhY2soY3JlYXRlX2NmdW5jdGlvbikKKwogICAgIGRlZiB0ZXN0X211bHRpcGxlX2NhbGxiYWNrcyhzZWxmKToKICAgICAgICAgbyA9IEMoKQogICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKQEAgLTEyMCw2ICsxMzMsMTAgQEAKICAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKGMsIGNhbGxiYWNrKQogICAgICAgICBkZWwgYwogCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfa3dhcmdzKHNlbGYpOgorICAgICAgICBjID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2Vha3JlZi5yZWYsIGMsIGNhbGxiYWNrPU5vbmUpCisKICAgICBkZWYgdGVzdF9wcm94eV9yZWYoc2VsZik6CiAgICAgICAgIG8gPSBDKCkKICAgICAgICAgby5iYXIgPSAxCkBAIC01NzIsNiArNTg5LDcgQEAKICAgICAgICAgZGVsIGMxLCBjMiwgQywgRAogICAgICAgICBnYy5jb2xsZWN0KCkKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX3R5cGVfY29sbGVjdGluZwogICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2luX2N5Y2xlX3Jlc3VycmVjdGlvbihzZWxmKToKICAgICAgICAgaW1wb3J0IGdjCiAKQEAgLTE1OTksNiArMTYxNywxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgMikKIAorICAgIGRlZiB0ZXN0X21ha2Vfd2Vha192YWx1ZWRfZGljdF9yZXByKHNlbGYpOgorICAgICAgICBkaWN0ID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGRpY3QpLCAnPFdlYWtWYWx1ZURpY3Rpb25hcnkgYXQgMHguKj4nKQorCisgICAgZGVmIHRlc3RfbWFrZV93ZWFrX2tleWVkX2RpY3RfcmVwcihzZWxmKToKKyAgICAgICAgZGljdCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoZGljdCksICc8V2Vha0tleURpY3Rpb25hcnkgYXQgMHguKj4nKQorCiBmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKIAogY2xhc3MgV2Vha1ZhbHVlRGljdGlvbmFyeVRlc3RDYXNlKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weQppbmRleCBmYjIyODc5Li45Y2U2NzJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dlYWtzZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrc2V0LnB5CkBAIC0xLDUgKzEsNCBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHksIHJlZiwgV2Vha1NldAogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgY29weQpAQCAtNDQzLDggKzQ0Miw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChuMiwgbjEpCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RXZWFrU2V0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQppbmRleCA4MzYxOGI2Li4yYTc4Mzg4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfYWxpYXNfZmFsbGJhY2soc2VsZik6Ci0gICAgICAgICMgSW4gdGhlIGFic2Vuc2Ugb2YgdGhlIGFiaWxpdHkgdG8gdGVsbCBpZiBhIHNvdW5kIHdhcyBhY3R1YWxseQorICAgICAgICAjIEluIHRoZSBhYnNlbmNlIG9mIHRoZSBhYmlsaXR5IHRvIHRlbGwgaWYgYSBzb3VuZCB3YXMgYWN0dWFsbHkKICAgICAgICAgIyBwbGF5ZWQsIHRoaXMgdGVzdCBoYXMgdHdvIGFjY2VwdGFibGUgb3V0Y29tZXM6IHN1Y2Nlc3MgKG5vIGVycm9yLAogICAgICAgICAjIHNvdW5kIHdhcyB0aGVvcmV0aWNhbGx5IHBsYXllZDsgYWx0aG91Z2ggYXMgaXNzdWUgIzE5OTg3IHNob3dzCiAgICAgICAgICMgYSBib3ggd2l0aG91dCBhIHNvdW5kY2FyZCBjYW4gInN1Y2NlZWQiKSBvciBSdW50aW1lRXJyb3IuICBBbnkKQEAgLTI0Niw4ICsyNDYsNSBAQAogICAgIHJldHVybiBfX2hhdmVfc291bmRjYXJkX2NhY2hlCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEJlZXBUZXN0LCBNZXNzYWdlQmVlcFRlc3QsIFBsYXlTb3VuZFRlc3QpCi0KLWlmIF9fbmFtZV9fPT0iX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aXRoLnB5IGIvTGliL3Rlc3QvdGVzdF93aXRoLnB5CmluZGV4IGNiYWFmY2YuLmU4ZDc4OWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2l0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpdGgucHkKQEAgLTgsNyArOCw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IF9HZW5lcmF0b3JDb250ZXh0TWFuYWdlciwgY29udGV4dG1hbmFnZXIKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogCiBjbGFzcyBNb2NrQ29udGV4dE1hbmFnZXIoX0dlbmVyYXRvckNvbnRleHRNYW5hZ2VyKToKQEAgLTQ1NSw3ICs0NTQsOCBAQAogICAgICAgICAgICAgd2l0aCBjbSgpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oImZyb20gd2l0aCIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgc2hvdWxkVGhyb3cpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsICJTdG9wSXRlcmF0aW9uIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBzaG91bGRUaHJvdykKIAogICAgIGRlZiB0ZXN0UmFpc2VkU3RvcEl0ZXJhdGlvbjIoc2VsZik6CiAgICAgICAgICMgRnJvbSBidWcgMTQ2MjQ4NQpAQCAtNDgyLDcgKzQ4Miw4IEBACiAgICAgICAgICAgICB3aXRoIGNtKCk6CiAgICAgICAgICAgICAgICAgcmFpc2UgbmV4dChpdGVyKFtdKSkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBzaG91bGRUaHJvdykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgIlN0b3BJdGVyYXRpb24iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHNob3VsZFRocm93KQogCiAgICAgZGVmIHRlc3RSYWlzZWRHZW5lcmF0b3JFeGl0MShzZWxmKToKICAgICAgICAgIyBGcm9tIGJ1ZyAxNDYyNDg1CkBAIC03MzcsMTQgKzczOCw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCBiMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjAsIGIyKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEZhaWx1cmVUZXN0Q2FzZSwgTm9uZXhjZXB0aW9uYWxUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgTmVzdGVkTm9uZXhjZXB0aW9uYWxUZXN0Q2FzZSwgRXhjZXB0aW9uYWxUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgTm9uTG9jYWxGbG93Q29udHJvbFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICBBc3NpZ25tZW50VGFyZ2V0VGVzdENhc2UsCi0gICAgICAgICAgICAgICAgIEV4aXRTd2FsbG93c0V4Y2VwdGlvblRlc3RDYXNlLAotICAgICAgICAgICAgICAgICBOZXN0ZWRXaXRoKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weQppbmRleCA0MDc2YjY4Li42MWE3NTBjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dzZ2lyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5CkBAIC0xLDIyICsxLDI1IEBACitmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X2h0dHBzZXJ2ZXJzIGltcG9ydCBOb0xvZ1JlcXVlc3RIYW5kbGVyCiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQogZnJvbSB3c2dpcmVmLnV0aWwgaW1wb3J0IHNldHVwX3Rlc3RpbmdfZGVmYXVsdHMKIGZyb20gd3NnaXJlZi5oZWFkZXJzIGltcG9ydCBIZWFkZXJzCi1mcm9tIHdzZ2lyZWYuaGFuZGxlcnMgaW1wb3J0IEJhc2VIYW5kbGVyLCBCYXNlQ0dJSGFuZGxlcgorZnJvbSB3c2dpcmVmLmhhbmRsZXJzIGltcG9ydCBCYXNlSGFuZGxlciwgQmFzZUNHSUhhbmRsZXIsIFNpbXBsZUhhbmRsZXIKIGZyb20gd3NnaXJlZiBpbXBvcnQgdXRpbAogZnJvbSB3c2dpcmVmLnZhbGlkYXRlIGltcG9ydCB2YWxpZGF0b3IKIGZyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBXU0dJU2VydmVyLCBXU0dJUmVxdWVzdEhhbmRsZXIKIGZyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBtYWtlX3NlcnZlcgorZnJvbSBodHRwLmNsaWVudCBpbXBvcnQgSFRUUENvbm5lY3Rpb24KIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPLCBCdWZmZXJlZFJlYWRlcgogZnJvbSBzb2NrZXRzZXJ2ZXIgaW1wb3J0IEJhc2VTZXJ2ZXIKIGZyb20gcGxhdGZvcm0gaW1wb3J0IHB5dGhvbl9pbXBsZW1lbnRhdGlvbgogCiBpbXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotCiAKIGNsYXNzIE1vY2tTZXJ2ZXIoV1NHSVNlcnZlcik6CiAgICAgIiIiTm9uLXNvY2tldCBIVFRQIHNlcnZlciIiIgpAQCAtMTY4LDYgKzE3MSwyNyBAQAogICAgICAgICAgICAgIiBiZSBvZiB0eXBlIGxpc3Q6IDxjbGFzcyAndHVwbGUnPiIKICAgICAgICAgKQogCisgICAgZGVmIHRlc3Rfc3RhdHVzX3ZhbGlkYXRpb25fZXJyb3JzKHNlbGYpOgorICAgICAgICBkZWYgY3JlYXRlX2JhZF9hcHAoc3RhdHVzKToKKyAgICAgICAgICAgIGRlZiBiYWRfYXBwKGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKToKKyAgICAgICAgICAgICAgICBzdGFydF9yZXNwb25zZShzdGF0dXMsIFsoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IildKQorICAgICAgICAgICAgICAgIHJldHVybiBbYiJIZWxsbywgd29ybGQhIl0KKyAgICAgICAgICAgIHJldHVybiBiYWRfYXBwCisKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoJzIwMCcsICdBc3NlcnRpb25FcnJvcjogU3RhdHVzIG11c3QgYmUgYXQgbGVhc3QgNCBjaGFyYWN0ZXJzJyksCisgICAgICAgICAgICAoJzIwWCBPSycsICdBc3NlcnRpb25FcnJvcjogU3RhdHVzIG1lc3NhZ2UgbXVzdCBiZWdpbiB3LzMtZGlnaXQgY29kZScpLAorICAgICAgICAgICAgKCcyMDBPSycsICdBc3NlcnRpb25FcnJvcjogU3RhdHVzIG1lc3NhZ2UgbXVzdCBoYXZlIGEgc3BhY2UgYWZ0ZXIgY29kZScpLAorICAgICAgICBdCisKKyAgICAgICAgZm9yIHN0YXR1cywgZXhjX21lc3NhZ2UgaW4gdGVzdHM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdGF0dXM9c3RhdHVzKToKKyAgICAgICAgICAgICAgICBvdXQsIGVyciA9IHJ1bl9hbW9jayhjcmVhdGVfYmFkX2FwcChzdGF0dXMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW5kc3dpdGgoCisgICAgICAgICAgICAgICAgICAgIGIiQSBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuICBQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4iCisgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5zcGxpdGxpbmVzKClbLTJdLCBleGNfbWVzc2FnZSkKKwogICAgIGRlZiB0ZXN0X3dzZ2lfaW5wdXQoc2VsZik6CiAgICAgICAgIGRlZiBiYWRfYXBwKGUscyk6CiAgICAgICAgICAgICBlWyJ3c2dpLmlucHV0Il0ucmVhZCgpCkBAIC0yMDIsNiArMjI2LDc5IEBACiAgICAgICAgICAgICAgICAgYiJkYXRhIiwKICAgICAgICAgICAgICAgICBvdXQpCiAKKyAgICBkZWYgdGVzdF9jcDEyNTJfdXJsKHNlbGYpOgorICAgICAgICBkZWYgYXBwKGUsIHMpOgorICAgICAgICAgICAgcygiMjAwIE9LIiwgWworICAgICAgICAgICAgICAgICgiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW4iKSwKKyAgICAgICAgICAgICAgICAoIkRhdGUiLCAiV2VkLCAyNCBEZWMgMjAwOCAxMzoyOTozMiBHTVQiKSwKKyAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgIyBQRVAzMzMzIHNheXMgZW52aXJvbiB2YXJpYWJsZXMgYXJlIGRlY29kZWQgYXMgbGF0aW4xLgorICAgICAgICAgICAgIyBFbmNvZGUgYXMgbGF0aW4xIHRvIGdldCBvcmlnaW5hbCBieXRlcworICAgICAgICAgICAgcmV0dXJuIFtlWyJQQVRIX0lORk8iXS5lbmNvZGUoImxhdGluMSIpXQorCisgICAgICAgIG91dCwgZXJyID0gcnVuX2Ftb2NrKAorICAgICAgICAgICAgdmFsaWRhdG9yKGFwcCksIGRhdGE9YiJHRVQgL1x4ODAlODAgSFRUUC8xLjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIGIiSFRUUC8xLjAgMjAwIE9LIiwKKyAgICAgICAgICAgICAgICBtb2NrLkFOWSwKKyAgICAgICAgICAgICAgICBiIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIsCisgICAgICAgICAgICAgICAgYiJEYXRlOiBXZWQsIDI0IERlYyAyMDA4IDEzOjI5OjMyIEdNVCIsCisgICAgICAgICAgICAgICAgYiIiLAorICAgICAgICAgICAgICAgIGIiL1x4ODBceDgwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBvdXQuc3BsaXRsaW5lcygpKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZWRfd3JpdGUoc2VsZik6CisgICAgICAgICMgQmFzZUhhbmRsZXIuX3dyaXRlKCkgYW5kIF9mbHVzaCgpIGhhdmUgdG8gd3JpdGUgYWxsIGRhdGEsIGV2ZW4gaWYKKyAgICAgICAgIyBpdCB0YWtlcyBtdWx0aXBsZSBzZW5kKCkgY2FsbHMuICBUZXN0IHRoaXMgYnkgaW50ZXJydXB0aW5nIGEgc2VuZCgpCisgICAgICAgICMgY2FsbCB3aXRoIGEgVW5peCBzaWduYWwuCisgICAgICAgIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgidGhyZWFkaW5nIikKKyAgICAgICAgcHRocmVhZF9raWxsID0gc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNpZ25hbCwgInB0aHJlYWRfa2lsbCIpCisKKyAgICAgICAgZGVmIGFwcChlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6CisgICAgICAgICAgICBzdGFydF9yZXNwb25zZSgiMjAwIE9LIiwgW10pCisgICAgICAgICAgICByZXR1cm4gW2J5dGVzKHN1cHBvcnQuU09DS19NQVhfU0laRSldCisKKyAgICAgICAgY2xhc3MgV3NnaUhhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgV1NHSVJlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZXJ2ZXIgPSBtYWtlX3NlcnZlcihzdXBwb3J0LkhPU1QsIDAsIGFwcCwgaGFuZGxlcl9jbGFzcz1Xc2dpSGFuZGxlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlcnZlci5zZXJ2ZXJfY2xvc2UpCisgICAgICAgIGludGVycnVwdGVkID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgICAgICBkZWYgc2lnbmFsX2hhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICBpbnRlcnJ1cHRlZC5zZXQoKQorCisgICAgICAgIG9yaWdpbmFsID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgc2lnbmFsX2hhbmRsZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaWduYWwuc2lnbmFsLCBzaWduYWwuU0lHVVNSMSwgb3JpZ2luYWwpCisgICAgICAgIHJlY2VpdmVkID0gTm9uZQorICAgICAgICBtYWluX3RocmVhZCA9IHRocmVhZGluZy5nZXRfaWRlbnQoKQorCisgICAgICAgIGRlZiBydW5fY2xpZW50KCk6CisgICAgICAgICAgICBodHRwID0gSFRUUENvbm5lY3Rpb24oKnNlcnZlci5zZXJ2ZXJfYWRkcmVzcykKKyAgICAgICAgICAgIGh0dHAucmVxdWVzdCgiR0VUIiwgIi8iKQorICAgICAgICAgICAgd2l0aCBodHRwLmdldHJlc3BvbnNlKCkgYXMgcmVzcG9uc2U6CisgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVhZCgxMDApCisgICAgICAgICAgICAgICAgIyBUaGUgbWFpbiB0aHJlYWQgc2hvdWxkIG5vdyBiZSBibG9ja2luZyBpbiBhIHNlbmQoKSBzeXN0ZW0KKyAgICAgICAgICAgICAgICAjIGNhbGwuICBCdXQgaW4gdGhlb3J5LCBpdCBjb3VsZCBnZXQgaW50ZXJydXB0ZWQgYnkgb3RoZXIKKyAgICAgICAgICAgICAgICAjIHNpZ25hbHMsIGFuZCB0aGVuIHJldHJpZWQuICBTbyBrZWVwIHNlbmRpbmcgdGhlIHNpZ25hbCBpbiBhCisgICAgICAgICAgICAgICAgIyBsb29wLCBpbiBjYXNlIGFuIGVhcmxpZXIgc2lnbmFsIGhhcHBlbnMgdG8gYmUgZGVsaXZlcmVkIGF0CisgICAgICAgICAgICAgICAgIyBhbiBpbmNvbnZlbmllbnQgbW9tZW50LgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfa2lsbChtYWluX3RocmVhZCwgc2lnbmFsLlNJR1VTUjEpCisgICAgICAgICAgICAgICAgICAgIGlmIGludGVycnVwdGVkLndhaXQodGltZW91dD1mbG9hdCgxKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIG5vbmxvY2FsIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgcmVjZWl2ZWQgPSBsZW4ocmVzcG9uc2UucmVhZCgpKQorICAgICAgICAgICAgaHR0cC5jbG9zZSgpCisKKyAgICAgICAgYmFja2dyb3VuZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bl9jbGllbnQpCisgICAgICAgIGJhY2tncm91bmQuc3RhcnQoKQorICAgICAgICBzZXJ2ZXIuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICBiYWNrZ3JvdW5kLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY2VpdmVkLCBzdXBwb3J0LlNPQ0tfTUFYX1NJWkUgLSAxMDApCisKIAogY2xhc3MgVXRpbGl0eVRlc3RzKFRlc3RDYXNlKToKIApAQCAtMzY5LDYgKzQ2Niw3IEBACiAKICAgICBkZWYgdGVzdE1hcHBpbmdJbnRlcmZhY2Uoc2VsZik6CiAgICAgICAgIHRlc3QgPSBbKCd4JywneScpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihIZWFkZXJzKCkpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihIZWFkZXJzKFtdKSksMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oSGVhZGVycyh0ZXN0WzpdKSksMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIZWFkZXJzKHRlc3RbOl0pLmtleXMoKSwgWyd4J10pCkBAIC0zNzYsNyArNDc0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIZWFkZXJzKHRlc3RbOl0pLml0ZW1zKCksIHRlc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoSGVhZGVycyh0ZXN0KS5pdGVtcygpLCB0ZXN0KSAgIyBtdXN0IGJlIGNvcHkhCiAKLSAgICAgICAgaD1IZWFkZXJzKFtdKQorICAgICAgICBoID0gSGVhZGVycygpCiAgICAgICAgIGRlbCBoWydmb28nXSAgICMgc2hvdWxkIG5vdCByYWlzZSBhbiBlcnJvcgogCiAgICAgICAgIGhbJ0ZvbyddID0gJ2JhcicKQEAgLTQwMSw5ICs0OTksOCBAQAogICAgIGRlZiB0ZXN0UmVxdWlyZUxpc3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgSGVhZGVycywgImZvbyIpCiAKLQogICAgIGRlZiB0ZXN0RXh0cmFzKHNlbGYpOgotICAgICAgICBoID0gSGVhZGVycyhbXSkKKyAgICAgICAgaCA9IEhlYWRlcnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihoKSwnXHJcbicpCiAKICAgICAgICAgaC5hZGRfaGVhZGVyKCdmb28nLCdiYXInLGJhej0ic3BhbSIpCkBAIC02NTgsOSArNzU1LDMxIEBACiAgICAgICAgIGgucnVuKGVycm9yX2FwcCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWRlX2VmZmVjdHNbJ2Nsb3NlX2NhbGxlZCddLCBUcnVlKQogCisgICAgZGVmIHRlc3RQYXJ0aWFsV3JpdGUoc2VsZik6CisgICAgICAgIHdyaXR0ZW4gPSBieXRlYXJyYXkoKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgICAgIGNsYXNzIFBhcnRpYWxXcml0ZXI6CisgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CisgICAgICAgICAgICAgICAgcGFydGlhbCA9IGJbOjddCisgICAgICAgICAgICAgICAgd3JpdHRlbi5leHRlbmQocGFydGlhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVuKHBhcnRpYWwpCisKKyAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZW52aXJvbiA9IHsiU0VSVkVSX1BST1RPQ09MIjogIkhUVFAvMS4wIn0KKyAgICAgICAgaCA9IFNpbXBsZUhhbmRsZXIoQnl0ZXNJTygpLCBQYXJ0aWFsV3JpdGVyKCksIHN5cy5zdGRlcnIsIGVudmlyb24pCisgICAgICAgIG1zZyA9ICJzaG91bGQgbm90IGRvIHBhcnRpYWwgd3JpdGVzIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChEZXByZWNhdGlvbldhcm5pbmcsIG1zZyk6CisgICAgICAgICAgICBoLnJ1bihoZWxsb19hcHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJIVFRQLzEuMCAyMDAgT0tcclxuIgorICAgICAgICAgICAgYiJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cclxuIgorICAgICAgICAgICAgYiJEYXRlOiBNb24sIDA1IEp1biAyMDA2IDE4OjQ5OjU0IEdNVFxyXG4iCisgICAgICAgICAgICBiIkNvbnRlbnQtTGVuZ3RoOiAxM1xyXG4iCisgICAgICAgICAgICBiIlxyXG4iCisgICAgICAgICAgICBiIkhlbGxvLCB3b3JsZCEiLAorICAgICAgICAgICAgd3JpdHRlbikKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CmluZGV4IDcwNDk2ZDYuLjNkZjVmMjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CkBAIC0xLDQgKzEsMyBAQAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIAogaW1wb3J0IHhkcmxpYgpAQCAtNzQsOSArNzMsNSBAQAogICAgIGRlZiB0ZXN0X3VoeXBlcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNDb252ZXJzaW9uKHNlbGYucGFja2VyLnBhY2tfdWh5cGVyLCAnc3RyaW5nJykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFhEUlRlc3QpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29udmVyc2lvbkVycm9yVGVzdCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQppbmRleCA1YzJhMmFmLi5iYzFkZDE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQpAQCAtMTgsNyArMTgsNyBAQAogCiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcHJvZHVjdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBmaW5kZmlsZSwgaW1wb3J0X2ZyZXNoX21vZHVsZSwgZ2NfY29sbGVjdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgZmluZGZpbGUsIGltcG9ydF9mcmVzaF9tb2R1bGUsIGdjX2NvbGxlY3QsIHN3YXBfYXR0cgogCiAjIHB5RVQgaXMgdGhlIHB1cmUtUHl0aG9uIGltcGxlbWVudGF0aW9uLgogIwpAQCAtNTY3LDE0ICs1NjcsMTEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJ1bmtub3duIGV2ZW50ICdib2d1cyciKQogCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9UmVzb3VyY2VXYXJuaW5nKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfbm9fcmVzb3VyY2Vfd2FybmluZyhzZWxmKToKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAidW5rbm93biBldmVudCAnYm9ndXMnIikKICAgICAgICAgICAgIGRlbCBjbQotICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LCBbXSkKIAogICAgICAgICBzb3VyY2UgPSBpby5CeXRlc0lPKAogICAgICAgICAgICAgYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XG4iCkBAIC02MDEsMTUgKzU5OCwxMiBAQAogICAgICAgICBpdCA9IGl0ZXJwYXJzZShURVNURk4pCiAgICAgICAgIGFjdGlvbiwgZWxlbSA9IG5leHQoaXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGFjdGlvbiwgZWxlbS50YWcpLCAoJ2VuZCcsICdkb2N1bWVudCcpKQotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVJlc291cmNlV2FybmluZykKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX25vX3Jlc291cmNlX3dhcm5pbmcoc2VsZik6CiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVULlBhcnNlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgICAgIG5leHQoaXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAogICAgICAgICAgICAgICAgICAgICAnanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50OiBsaW5lIDEsIGNvbHVtbiAxMicpCiAgICAgICAgICAgICBkZWwgY20sIGl0Ci0gICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcsIFtdKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVmaWxlKHNlbGYpOgogICAgICAgICBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKQEAgLTc1OCw3ICs3NTIsNyBAQAogICAgICAgICAgICAgJ21hYy1yb21hbicsICdtYWMtdHVya2lzaCcsCiAgICAgICAgICAgICAnaXNvMjAyMi1qcCcsICdpc28yMDIyLWpwLTEnLCAnaXNvMjAyMi1qcC0yJywgJ2lzbzIwMjItanAtMjAwNCcsCiAgICAgICAgICAgICAnaXNvMjAyMi1qcC0zJywgJ2lzbzIwMjItanAtZXh0JywKLSAgICAgICAgICAgICdrb2k4LXInLCAna29pOC11JywKKyAgICAgICAgICAgICdrb2k4LXInLCAna29pOC10JywgJ2tvaTgtdScsICdrejEwNDgnLAogICAgICAgICAgICAgJ2h6JywgJ3B0Y3AxNTQnLAogICAgICAgICBdCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBzdXBwb3J0ZWRfZW5jb2RpbmdzOgpAQCAtMTY2Niw2ICsxNjYwLDU3IEBACiAgICAgICAgIEVULnJlZ2lzdGVyX25hbWVzcGFjZSgndGVzdDEwNzc3JywgJ2h0dHA6Ly9teXVyaS8nKQogICAgICAgICBFVC5yZWdpc3Rlcl9uYW1lc3BhY2UoJ3Rlc3QxMDc3NycsICdodHRwOi8vbXl1cmkvJykKIAorICAgIGRlZiB0ZXN0X2xvc3RfdGV4dChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjU5MDI6IEJvcnJvd2VkIHRleHQgY2FuIGRpc2FwcGVhcgorICAgICAgICBjbGFzcyBUZXh0OgorICAgICAgICAgICAgZGVmIF9fYm9vbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGUudGV4dCA9ICdjaGFuZ2VkJworICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ3RhZycpCisgICAgICAgIGUudGV4dCA9IFRleHQoKQorICAgICAgICBpID0gZS5pdGVydGV4dCgpCisgICAgICAgIHQgPSBuZXh0KGkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0LCBUZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS50ZXh0LCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS50ZXh0LCAnY2hhbmdlZCcpCisKKyAgICBkZWYgdGVzdF9sb3N0X3RhaWwoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI1OTAyOiBCb3Jyb3dlZCB0YWlsIGNhbiBkaXNhcHBlYXIKKyAgICAgICAgY2xhc3MgVGV4dDoKKyAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBlWzBdLnRhaWwgPSAnY2hhbmdlZCcKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdyb290JykKKyAgICAgICAgZS5hcHBlbmQoRVQuRWxlbWVudCgndGFnJykpCisgICAgICAgIGVbMF0udGFpbCA9IFRleHQoKQorICAgICAgICBpID0gZS5pdGVydGV4dCgpCisgICAgICAgIHQgPSBuZXh0KGkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0LCBUZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZVswXS50YWlsLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVswXS50YWlsLCAnY2hhbmdlZCcpCisKKyAgICBkZWYgdGVzdF9sb3N0X2VsZW0oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI1OTAyOiBCb3Jyb3dlZCBlbGVtZW50IGNhbiBkaXNhcHBlYXIKKyAgICAgICAgY2xhc3MgVGFnOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgZVswXSA9IEVULkVsZW1lbnQoJ2NoYW5nZWQnKQorICAgICAgICAgICAgICAgIG5leHQoaSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdyb290JykKKyAgICAgICAgZS5hcHBlbmQoRVQuRWxlbWVudChUYWcoKSkpCisgICAgICAgIGUuYXBwZW5kKEVULkVsZW1lbnQoJ3RhZycpKQorICAgICAgICBpID0gZS5pdGVyKCd0YWcnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ID0gbmV4dChpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2dlbmVyYXRvcnMgYXJlIG5vdCByZWVudHJhbnQnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodC50YWcsIFRhZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVbMF0udGFnLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVswXS50YWcsICdjaGFuZ2VkJykKKwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE4MTUsNiArMTg2MCwxMiBAQAogICAgICAgICBlLmV4dGVuZChbRVQuRWxlbWVudCgnYmFyJyldKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlLnJlbW92ZSwgWCgnYmF6JykpCiAKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfcmVwcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjU0NTUKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIHdpdGggc3dhcF9hdHRyKGUsICd0YWcnLCBlKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICByZXByKGUpICAjIFNob3VsZCBub3QgY3Jhc2gKIAogY2xhc3MgTXV0YXRpbmdFbGVtZW50UGF0aChzdHIpOgogICAgIGRlZiBfX25ld19fKGNscywgZWxlbSwgKmFyZ3MpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKaW5kZXggNDA5ZWM2YS4uOTZiNDQ2ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmVsZW1lbnRzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnNVAnKQogICAgICAgICAjIGV4dHJhCi0gICAgICAgIHNlbGYuZXh0cmEgPSBzdHJ1Y3QuY2FsY3NpemUoJ1BpaVA0UCcpCisgICAgICAgIHNlbGYuZXh0cmEgPSBzdHJ1Y3QuY2FsY3NpemUoJ1BublA0UCcpCiAKICAgICBjaGVja19zaXplb2YgPSBzdXBwb3J0LmNoZWNrX3NpemVvZgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbHJwYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CmluZGV4IDdhZTBkY2UuLjAyZDlmNWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CkBAIC03LDYgKzcsNyBAQAogaW1wb3J0IHhtbHJwYy5jbGllbnQgYXMgeG1scnBjbGliCiBpbXBvcnQgeG1scnBjLnNlcnZlcgogaW1wb3J0IGh0dHAuY2xpZW50CitpbXBvcnQgaHR0cCwgaHR0cC5zZXJ2ZXIKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBvcwogaW1wb3J0IHJlCkBAIC0xODMsNiArMTg0LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5sb2FkcyhzdHJnKVswXVswXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4bWxycGNsaWIuZHVtcHMsIChhcmcxLCkpCiAKKyAgICBkZWYgdGVzdF9kdW1wX2VuY29kaW5nKHNlbGYpOgorICAgICAgICB2YWx1ZSA9IHsna2V5XHUyMGFjXHhhNCc6CisgICAgICAgICAgICAgICAgICd2YWx1ZVx1MjBhY1x4YTQnfQorICAgICAgICBzdHJnID0geG1scnBjbGliLmR1bXBzKCh2YWx1ZSwpLCBlbmNvZGluZz0naXNvLTg4NTktMTUnKQorICAgICAgICBzdHJnID0gIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTE1Jz8+IiArIHN0cmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bWxycGNsaWIubG9hZHMoc3RyZylbMF1bMF0sIHZhbHVlKQorICAgICAgICBzdHJnID0gc3RyZy5lbmNvZGUoJ2lzby04ODU5LTE1JywgJ3htbGNoYXJyZWZyZXBsYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bWxycGNsaWIubG9hZHMoc3RyZylbMF1bMF0sIHZhbHVlKQorCisgICAgICAgIHN0cmcgPSB4bWxycGNsaWIuZHVtcHMoKHZhbHVlLCksIGVuY29kaW5nPSdpc28tODg1OS0xNScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcmVzcG9uc2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bWxycGNsaWIubG9hZHMoc3RyZylbMF1bMF0sIHZhbHVlKQorICAgICAgICBzdHJnID0gc3RyZy5lbmNvZGUoJ2lzby04ODU5LTE1JywgJ3htbGNoYXJyZWZyZXBsYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bWxycGNsaWIubG9hZHMoc3RyZylbMF1bMF0sIHZhbHVlKQorCisgICAgICAgIG1ldGhvZG5hbWUgPSAnbWV0aG9kXHUyMGFjXHhhNCcKKyAgICAgICAgc3RyZyA9IHhtbHJwY2xpYi5kdW1wcygodmFsdWUsKSwgZW5jb2Rpbmc9J2lzby04ODU5LTE1JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2RuYW1lPW1ldGhvZG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeG1scnBjbGliLmxvYWRzKHN0cmcpWzBdWzBdLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bWxycGNsaWIubG9hZHMoc3RyZylbMV0sIG1ldGhvZG5hbWUpCisKICAgICBkZWYgdGVzdF9kdW1wX2J5dGVzKHNlbGYpOgogICAgICAgICBzYW1wbGUgPSBiIm15IGRvZyBoYXMgZmxlYXMiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlLCB4bWxycGNsaWIuQmluYXJ5KHNhbXBsZSkpCkBAIC0yMDIsNiArMjI0LDIwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUobmV3dmFsdWUpLCB4bWxycGNsaWIuQmluYXJ5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobSkKIAorICAgIGRlZiB0ZXN0X2xvYWRzX3Vuc3VwcG9ydGVkKHNlbGYpOgorICAgICAgICBSZXNwb25zZUVycm9yID0geG1scnBjbGliLlJlc3BvbnNlRXJyb3IKKyAgICAgICAgZGF0YSA9ICc8cGFyYW1zPjxwYXJhbT48dmFsdWU+PHNwYW0vPjwvdmFsdWU+PC9wYXJhbT48L3BhcmFtcz4nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlc3BvbnNlRXJyb3IsIHhtbHJwY2xpYi5sb2FkcywgZGF0YSkKKyAgICAgICAgZGF0YSA9ICgnPHBhcmFtcz48cGFyYW0+PHZhbHVlPjxhcnJheT4nCisgICAgICAgICAgICAgICAgJzx2YWx1ZT48c3BhbS8+PC92YWx1ZT4nCisgICAgICAgICAgICAgICAgJzwvYXJyYXk+PC92YWx1ZT48L3BhcmFtPjwvcGFyYW1zPicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlc3BvbnNlRXJyb3IsIHhtbHJwY2xpYi5sb2FkcywgZGF0YSkKKyAgICAgICAgZGF0YSA9ICgnPHBhcmFtcz48cGFyYW0+PHZhbHVlPjxzdHJ1Y3Q+JworICAgICAgICAgICAgICAgICc8bWVtYmVyPjxuYW1lPmE8L25hbWU+PHZhbHVlPjxzcGFtLz48L3ZhbHVlPjwvbWVtYmVyPicKKyAgICAgICAgICAgICAgICAnPG1lbWJlcj48bmFtZT5iPC9uYW1lPjx2YWx1ZT48c3BhbS8+PC92YWx1ZT48L21lbWJlcj4nCisgICAgICAgICAgICAgICAgJzwvc3RydWN0PjwvdmFsdWU+PC9wYXJhbT48L3BhcmFtcz4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZXNwb25zZUVycm9yLCB4bWxycGNsaWIubG9hZHMsIGRhdGEpCisKICAgICBkZWYgdGVzdF9nZXRfaG9zdF9pbmZvKHNlbGYpOgogICAgICAgICAjIHNlZSBidWcgIzM2MTMsIHRoaXMgcmFpc2VkIGEgVHlwZUVycm9yCiAgICAgICAgIHRyYW5zcCA9IHhtbHJwYy5jbGllbnQuVHJhbnNwb3J0KCkKQEAgLTIyMyw2ICsyNTksNDIgQEAKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzX3NzbCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgIlRocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LiIpCisgICAgZGVmIHRlc3Rfa2VlcGFsaXZlX2Rpc2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGNsYXNzIFJlcXVlc3RIYW5kbGVyKGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICAgICAgcHJvdG9jb2xfdmVyc2lvbiA9ICJIVFRQLzEuMSIKKyAgICAgICAgICAgIGhhbmRsZWQgPSBGYWxzZQorCisgICAgICAgICAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpbnQoc2VsZi5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSkKKyAgICAgICAgICAgICAgICBzZWxmLnJmaWxlLnJlYWQobGVuZ3RoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuaGFuZGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHhtbHJwY2xpYi5kdW1wcygoNSwpLCBtZXRob2RyZXNwb25zZT1UcnVlKQorICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UuZW5jb2RlKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoaHR0cC5IVFRQU3RhdHVzLk9LKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgbGVuKHJlc3BvbnNlKSkKKyAgICAgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKHJlc3BvbnNlKQorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBGYWxzZQorCisgICAgICAgIGRlZiBydW5fc2VydmVyKCk6CisgICAgICAgICAgICBzZXJ2ZXIuc29ja2V0LnNldHRpbWVvdXQoZmxvYXQoMSkpICAjIERvbid0IGhhbmcgaWYgY2xpZW50IGZhaWxzCisgICAgICAgICAgICBzZXJ2ZXIuaGFuZGxlX3JlcXVlc3QoKSAgIyBGaXJzdCByZXF1ZXN0IGFuZCBhdHRlbXB0IGF0IHNlY29uZAorICAgICAgICAgICAgc2VydmVyLmhhbmRsZV9yZXF1ZXN0KCkgICMgUmV0cmllZCBzZWNvbmQgcmVxdWVzdAorCisgICAgICAgIHNlcnZlciA9IGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksIFJlcXVlc3RIYW5kbGVyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VydmVyLnNlcnZlcl9jbG9zZSkKKyAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuX3NlcnZlcikKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRocmVhZC5qb2luKQorICAgICAgICB1cmwgPSAiaHR0cDovL3t9Ont9LyIuZm9ybWF0KCpzZXJ2ZXIuc2VydmVyX2FkZHJlc3MpCisgICAgICAgIHdpdGggeG1scnBjbGliLlNlcnZlclByb3h5KHVybCkgYXMgcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5tZXRob2QoKSwgNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5tZXRob2QoKSwgNSkKKwogY2xhc3MgSGVscGVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bWxycGNsaWIuZXNjYXBlKCJhJmIiKSwgImEmYW1wO2IiKQpAQCAtMjg3LDcgKzM1OSw3IEBACiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDcsMSwyLDMsNCw1KQogICAgICAgICB0ID0geG1scnBjbGliLkRhdGVUaW1lKGQpCi0gICAgICAgIHZhbCA9IjxEYXRlVGltZSAnMjAwNzAxMDJUMDM6MDQ6MDUnIGF0ICV4PiIgJSBpZCh0KQorICAgICAgICB2YWwgPSI8RGF0ZVRpbWUgJzIwMDcwMTAyVDAzOjA0OjA1JyBhdCAlI3g+IiAlIGlkKHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwgdmFsKQogCiAgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgpAQCAtMzcxLDcgKzQ0Myw3IEBACiAjIFRoZSBldnQgaXMgc2V0IHR3aWNlLiAgRmlyc3Qgd2hlbiB0aGUgc2VydmVyIGlzIHJlYWR5IHRvIHNlcnZlLgogIyBTZWNvbmQgd2hlbiB0aGUgc2VydmVyIGhhcyBiZWVuIHNodXRkb3duLiAgVGhlIHVzZXIgbXVzdCBjbGVhcgogIyB0aGUgZXZlbnQgYWZ0ZXIgaXQgaGFzIGJlZW4gc2V0IHRoZSBmaXJzdCB0aW1lIHRvIGNhdGNoIHRoZSBzZWNvbmQgc2V0LgotZGVmIGh0dHBfc2VydmVyKGV2dCwgbnVtcmVxdWVzdHMsIHJlcXVlc3RIYW5kbGVyPU5vbmUpOgorZGVmIGh0dHBfc2VydmVyKGV2dCwgbnVtcmVxdWVzdHMsIHJlcXVlc3RIYW5kbGVyPU5vbmUsIGVuY29kaW5nPU5vbmUpOgogICAgIGNsYXNzIFRlc3RJbnN0YW5jZUNsYXNzOgogICAgICAgICBkZWYgZGl2KHNlbGYsIHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIHggLy8geQpAQCAtNDAwLDYgKzQ3Miw3IEBACiAgICAgaWYgbm90IHJlcXVlc3RIYW5kbGVyOgogICAgICAgICByZXF1ZXN0SGFuZGxlciA9IHhtbHJwYy5zZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKICAgICBzZXJ2ID0gTXlYTUxSUENTZXJ2ZXIoKCJsb2NhbGhvc3QiLCAwKSwgcmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dSZXF1ZXN0cz1GYWxzZSwgYmluZF9hbmRfYWN0aXZhdGU9RmFsc2UpCiAgICAgdHJ5OgogICAgICAgICBzZXJ2LnNlcnZlcl9iaW5kKCkKQEAgLTQxNSw2ICs0ODgsNyBAQAogICAgICAgICBzZXJ2LnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnMoKQogICAgICAgICBzZXJ2LnJlZ2lzdGVyX2Z1bmN0aW9uKHBvdykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihsYW1iZGEgeCx5OiB4K3ksICdhZGQnKQorICAgICAgICBzZXJ2LnJlZ2lzdGVyX2Z1bmN0aW9uKGxhbWJkYSB4OiB4LCAndMOqxaF0JykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihteV9mdW5jdGlvbikKICAgICAgICAgdGVzdEluc3RhbmNlID0gVGVzdEluc3RhbmNlQ2xhc3MoKQogICAgICAgICBzZXJ2LnJlZ2lzdGVyX2luc3RhbmNlKHRlc3RJbnN0YW5jZSwgYWxsb3dfZG90dGVkX25hbWVzPVRydWUpCkBAIC01ODIsNiArNjU2LDMwIEBACiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQogCisgICAgZGVmIHRlc3RfY2xpZW50X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzdGFydF9zdHJpbmcgPSAnXHUyMGFjJworICAgICAgICBlbmRfc3RyaW5nID0gJ1x4YTQnCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwsIGVuY29kaW5nPSdpc28tODg1OS0xNScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWRkKHN0YXJ0X3N0cmluZywgZW5kX3N0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3N0cmluZyArIGVuZF9zdHJpbmcpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0IHVuYXZhaWxhYmxlIGVycm9ycy4KKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCisgICAgZGVmIHRlc3Rfbm9uYXNjaWlfbWV0aG9kbmFtZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwsIGVuY29kaW5nPSdhc2NpaScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudMOqxaF0KDQyKSwgNDIpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0IHVuYXZhaWxhYmxlIGVycm9ycy4KKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCiAgICAgIyBbY2hdIFRoZSB0ZXN0IDQwNCBpcyBjYXVzaW5nIGxvdHMgb2YgZmFsc2UgYWxhcm1zLgogICAgIGRlZiBYWFh0ZXN0XzQwNChzZWxmKToKICAgICAgICAgIyBzZW5kIFBPU1Qgd2l0aCBodHRwLmNsaWVudCwgaXQgc2hvdWxkIHJldHVybiA0MDQgaGVhZGVyIGFuZApAQCAtNTk1LDcgKzY5Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2UucmVhc29uLCAnTm90IEZvdW5kJykKIAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24xKHNlbGYpOgotICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLAorICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLCAndMOqxaF0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5saXN0TWV0aG9kcycsICdzeXN0ZW0ubWV0aG9kSGVscCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlJywgJ3N5c3RlbS5tdWx0aWNhbGwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRml4dHVyZSddKQpAQCAtNzEzLDYgKzgxMSw0MyBAQAogICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnL1JQQzIgSFRUUC8xLjBcclxuQ29udGVudC1MZW5ndGg6IDEwMFxyXG5cclxuYnllJykKICAgICAgICAgY29ubi5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggeG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkgYXMgc2VydmVyOgorICAgICAgICAgICAgc2VydmVyLmFkZCgyLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZXJ2ZXIoJ3RyYW5zcG9ydCcpLl9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyKCd0cmFuc3BvcnQnKS5fY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbWV0aG9kX2Vycm9yKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuYWRkKDIsICJhIikKKyAgICAgICAgZXhjZXB0IHhtbHJwY2xpYi5GYXVsdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIoJ3RyYW5zcG9ydCcpLl9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCBOb25lKSkKKworCitjbGFzcyBTaW1wbGVTZXJ2ZXJFbmNvZGluZ1Rlc3RDYXNlKEJhc2VTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0aHJlYWRGdW5jKGV2dCwgbnVtcmVxdWVzdHMsIHJlcXVlc3RIYW5kbGVyPU5vbmUsIGVuY29kaW5nPU5vbmUpOgorICAgICAgICBodHRwX3NlcnZlcihldnQsIG51bXJlcXVlc3RzLCByZXF1ZXN0SGFuZGxlciwgJ2lzby04ODU5LTE1JykKKworICAgIGRlZiB0ZXN0X3NlcnZlcl9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc3RhcnRfc3RyaW5nID0gJ1x1MjBhYycKKyAgICAgICAgZW5kX3N0cmluZyA9ICdceGE0JworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFkZChzdGFydF9zdHJpbmcsIGVuZF9zdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9zdHJpbmcgKyBlbmRfc3RyaW5nKQorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCB1bmF2YWlsYWJsZSBlcnJvcnMuCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBnZXRhdHRyKGUsICJoZWFkZXJzIiwgIiIpKSkKKwogCiBjbGFzcyBNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgogICAgIHRocmVhZEZ1bmMgPSBzdGF0aWNtZXRob2QoaHR0cF9tdWx0aV9zZXJ2ZXIpCkBAIC05MTksNiArMTA1NCw3IEBACiAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoc2VsZi51cmwsIHRyYW5zcG9ydD10KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ3RyYW5zcG9ydCcpLCB0KQogCisKICMgVGhpcyBpcyBhIGNvbnRyaXZlZCB3YXkgdG8gbWFrZSBhIGZhaWx1cmUgb2NjdXIgb24gdGhlIHNlcnZlciBzaWRlCiAjIGluIG9yZGVyIHRvIHRlc3QgdGhlIF9zZW5kX3RyYWNlYmFja19oZWFkZXIgZmxhZyBvbiB0aGUgc2VydmVyCiBjbGFzcyBGYWlsaW5nTWVzc2FnZUNsYXNzKGh0dHAuY2xpZW50LkhUVFBNZXNzYWdlKToKQEAgLTExMjUsOCArMTI2MSw5IEBACiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAogICAgICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlLAotICAgICAgICAgICAgU2ltcGxlU2VydmVyVGVzdENhc2UsIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSwKLSAgICAgICAgICAgIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMiwgR3ppcFNlcnZlclRlc3RDYXNlLCBHemlwVXRpbFRlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlU2VydmVyVGVzdENhc2UsIFNpbXBsZVNlcnZlckVuY29kaW5nVGVzdENhc2UsCisgICAgICAgICAgICBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEsIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMiwKKyAgICAgICAgICAgIEd6aXBTZXJ2ZXJUZXN0Q2FzZSwgR3ppcFV0aWxUZXN0Q2FzZSwKICAgICAgICAgICAgIE11bHRpUGF0aFNlcnZlclRlc3RDYXNlLCBTZXJ2ZXJQcm94eVRlc3RDYXNlLCBGYWlsaW5nU2VydmVyVGVzdENhc2UsCiAgICAgICAgICAgICBDR0lIYW5kbGVyVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwYXBwLnB5IGIvTGliL3Rlc3QvdGVzdF96aXBhcHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhkNDQzNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwYXBwLnB5CkBAIC0wLDAgKzEsMzQ5IEBACisiIiJUZXN0IGhhcm5lc3MgZm9yIHRoZSB6aXBhcHAgbW9kdWxlLiIiIgorCitpbXBvcnQgaW8KK2ltcG9ydCBwYXRobGliCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB6aXBhcHAKK2ltcG9ydCB6aXBmaWxlCisKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKKworY2xhc3MgWmlwQXBwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHppcGFwcCBtb2R1bGUgZnVuY3Rpb25hbGl0eS4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRtcGRpci5jbGVhbnVwKQorICAgICAgICBzZWxmLnRtcGRpciA9IHBhdGhsaWIuUGF0aCh0bXBkaXIubmFtZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9hcmNoaXZlKHNlbGYpOgorICAgICAgICAjIFRlc3QgcGFja2luZyBhIGRpcmVjdG9yeS4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ19fbWFpbl9fLnB5JykudG91Y2goKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UucHl6JworICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc3RyKHNvdXJjZSksIHN0cih0YXJnZXQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0LmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9hcmNoaXZlX3dpdGhfcGF0aGxpYihzZWxmKToKKyAgICAgICAgIyBUZXN0IHBhY2tpbmcgYSBkaXJlY3RvcnkgdXNpbmcgUGF0aCBvYmplY3RzIGZvciBzb3VyY2UgYW5kIHRhcmdldC4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ19fbWFpbl9fLnB5JykudG91Y2goKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UucHl6JworICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc291cmNlLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJnZXQuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2FyY2hpdmVfd2l0aF9zdWJkaXJzKHNlbGYpOgorICAgICAgICAjIFRlc3QgcGFja2luZyBhIGRpcmVjdG9yeSBpbmNsdWRlcyBlbnRyaWVzIGZvciBzdWJkaXJlY3Rvcmllcy4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ19fbWFpbl9fLnB5JykudG91Y2goKQorICAgICAgICAoc291cmNlIC8gJ2ZvbycpLm1rZGlyKCkKKyAgICAgICAgKHNvdXJjZSAvICdiYXInKS5ta2RpcigpCisgICAgICAgIChzb3VyY2UgLyAnZm9vJyAvICdfX2luaXRfXy5weScpLnRvdWNoKCkKKyAgICAgICAgdGFyZ2V0ID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHppcGFwcC5jcmVhdGVfYXJjaGl2ZShzdHIoc291cmNlKSwgdGFyZ2V0KQorICAgICAgICB0YXJnZXQuc2VlaygwKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh0YXJnZXQsICdyJykgYXMgejoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Zvby8nLCB6Lm5hbWVsaXN0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdiYXIvJywgei5uYW1lbGlzdCgpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2FyY2hpdmVfZGVmYXVsdF90YXJnZXQoc2VsZik6CisgICAgICAgICMgVGVzdCBwYWNraW5nIGEgZGlyZWN0b3J5IHRvIHRoZSBkZWZhdWx0IG5hbWUuCisgICAgICAgIHNvdXJjZSA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZScKKyAgICAgICAgc291cmNlLm1rZGlyKCkKKyAgICAgICAgKHNvdXJjZSAvICdfX21haW5fXy5weScpLnRvdWNoKCkKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpKQorICAgICAgICBleHBlY3RlZF90YXJnZXQgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UucHl6JworICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWRfdGFyZ2V0LmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X25vX21haW4oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHBhY2tpbmcgYSBkaXJlY3Rvcnkgd2l0aCBubyBfX21haW5fXy5weSBmYWlscy4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ2Zvby5weScpLnRvdWNoKCkKKyAgICAgICAgdGFyZ2V0ID0gc2VsZi50bXBkaXIgLyAnc291cmNlLnB5eicKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh6aXBhcHAuWmlwQXBwRXJyb3IpOgorICAgICAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCBzdHIodGFyZ2V0KSkKKworICAgIGRlZiB0ZXN0X21haW5fYW5kX21haW5fcHkoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHN1cHBseWluZyBhIG1haW4gYXJndW1lbnQgd2l0aCBfX21haW5fXy5weSBmYWlscy4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ19fbWFpbl9fLnB5JykudG91Y2goKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UucHl6JworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGFwcC5aaXBBcHBFcnJvcik6CisgICAgICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc3RyKHNvdXJjZSksIHN0cih0YXJnZXQpLCBtYWluPSdwa2cubW9kOmZuJykKKworICAgIGRlZiB0ZXN0X21haW5fd3JpdHRlbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIF9fbWFpbl9fLnB5IGlzIHdyaXR0ZW4gY29ycmVjdGx5LgorICAgICAgICBzb3VyY2UgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UnCisgICAgICAgIHNvdXJjZS5ta2RpcigpCisgICAgICAgIChzb3VyY2UgLyAnZm9vLnB5JykudG91Y2goKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UucHl6JworICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc3RyKHNvdXJjZSksIHN0cih0YXJnZXQpLCBtYWluPSdwa2cubW9kOmZuJykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoc3RyKHRhcmdldCksICdyJykgYXMgejoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19fbWFpbl9fLnB5Jywgei5uYW1lbGlzdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3BrZy5tb2QuZm4oKScsIHoucmVhZCgnX19tYWluX18ucHknKSkKKworICAgIGRlZiB0ZXN0X21haW5fb25seV93cml0dGVuX29uY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGRvbid0IHdyaXRlIG11bHRpcGxlIF9fbWFpbl9fLnB5IGZpbGVzLgorICAgICAgICAjIFRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIGhhZCB0aGlzIGJ1ZzsgemlwIGZpbGVzIGFsbG93CisgICAgICAgICMgbXVsdGlwbGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAjIFdyaXRlIDIgZmlsZXMsIGFzIHRoZSBvcmlnaW5hbCBidWcgd3JvdGUgX19tYWluX18ucHkKKyAgICAgICAgIyBvbmNlIGZvciBlYWNoIGZpbGUgd3JpdHRlbiA6LSgKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9yZXZpZXcvMjM0OTEvZGlmZi8xMzk4Mi9MaWIvemlwYXBwLnB5I25ld2NvZGU2N0xpYi96aXBhcHAucHk6NjcKKyAgICAgICAgIyAobGluZSA2NykKKyAgICAgICAgKHNvdXJjZSAvICdmb28ucHknKS50b3VjaCgpCisgICAgICAgIChzb3VyY2UgLyAnYmFyLnB5JykudG91Y2goKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UucHl6JworICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc3RyKHNvdXJjZSksIHN0cih0YXJnZXQpLCBtYWluPSdwa2cubW9kOmZuJykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoc3RyKHRhcmdldCksICdyJykgYXMgejoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgei5uYW1lbGlzdCgpLmNvdW50KCdfX21haW5fXy5weScpKQorCisgICAgZGVmIHRlc3RfbWFpbl92YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpbnZhbGlkIHZhbHVlcyBmb3IgbWFpbiBhcmUgcmVqZWN0ZWQuCisgICAgICAgIHNvdXJjZSA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZScKKyAgICAgICAgc291cmNlLm1rZGlyKCkKKyAgICAgICAgdGFyZ2V0ID0gc2VsZi50bXBkaXIgLyAnc291cmNlLnB5eicKKyAgICAgICAgcHJvYmxlbXMgPSBbCisgICAgICAgICAgICAnJywgJ2ZvbycsICdmb286JywgJzpiYXInLCAnMTI6YmFyJywgJ2EuYi5jLjpkJywKKyAgICAgICAgICAgICcuYTpiJywgJ2E6Yi4nLCAnYTouYicsICdhOnNpbGx5IG5hbWUnCisgICAgICAgIF0KKyAgICAgICAgZm9yIG1haW4gaW4gcHJvYmxlbXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtYWluPW1haW4pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoemlwYXBwLlppcEFwcEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCBzdHIodGFyZ2V0KSwgbWFpbj1tYWluKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9ub19zaGViYW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBubyBzaGViYW5nIGxpbmUgaXMgd3JpdHRlbiB0byB0aGUgdGFyZ2V0IGJ5IGRlZmF1bHQuCisgICAgICAgIHNvdXJjZSA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZScKKyAgICAgICAgc291cmNlLm1rZGlyKCkKKyAgICAgICAgKHNvdXJjZSAvICdfX21haW5fXy5weScpLnRvdWNoKCkKKyAgICAgICAgdGFyZ2V0ID0gc2VsZi50bXBkaXIgLyAnc291cmNlLnB5eicKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCBzdHIodGFyZ2V0KSkKKyAgICAgICAgd2l0aCB0YXJnZXQub3BlbigncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLnJlYWQoMiksIGInIyEnKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX2ludGVycHJldGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhIHNoZWJhbmcgbGluZSB3aXRoIGEgY3VzdG9tIGludGVycHJldGVyIGlzIHdyaXR0ZW4KKyAgICAgICAgIyBjb3JyZWN0bHkuCisgICAgICAgIHNvdXJjZSA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZScKKyAgICAgICAgc291cmNlLm1rZGlyKCkKKyAgICAgICAgKHNvdXJjZSAvICdfX21haW5fXy5weScpLnRvdWNoKCkKKyAgICAgICAgdGFyZ2V0ID0gc2VsZi50bXBkaXIgLyAnc291cmNlLnB5eicKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCBzdHIodGFyZ2V0KSwgaW50ZXJwcmV0ZXI9J3B5dGhvbicpCisgICAgICAgIHdpdGggdGFyZ2V0Lm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDIpLCBiJyMhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidweXRob25cbicsIGYucmVhZGxpbmUoKSkKKworICAgIGRlZiB0ZXN0X3BhY2tfdG9fZmlsZW9iaihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgY2FuIHBhY2sgdG8gYSBmaWxlIG9iamVjdC4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ19fbWFpbl9fLnB5JykudG91Y2goKQorICAgICAgICB0YXJnZXQgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCB0YXJnZXQsIGludGVycHJldGVyPSdweXRob24nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0LmdldHZhbHVlKCkuc3RhcnRzd2l0aChiJyMhcHl0aG9uXG4nKSkKKworICAgIGRlZiB0ZXN0X3JlYWRfc2hlYmFuZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgY2FuIHJlYWQgdGhlIHNoZWJhbmcgbGluZSBjb3JyZWN0bHkuCisgICAgICAgIHNvdXJjZSA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZScKKyAgICAgICAgc291cmNlLm1rZGlyKCkKKyAgICAgICAgKHNvdXJjZSAvICdfX21haW5fXy5weScpLnRvdWNoKCkKKyAgICAgICAgdGFyZ2V0ID0gc2VsZi50bXBkaXIgLyAnc291cmNlLnB5eicKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCBzdHIodGFyZ2V0KSwgaW50ZXJwcmV0ZXI9J3B5dGhvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwYXBwLmdldF9pbnRlcnByZXRlcihzdHIodGFyZ2V0KSksICdweXRob24nKQorCisgICAgZGVmIHRlc3RfcmVhZF9taXNzaW5nX3NoZWJhbmcoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHJlYWRpbmcgdGhlIHNoZWJhbmcgbGluZSBvZiBhIGZpbGUgd2l0aG91dCBvbmUgcmV0dXJucyBOb25lLgorICAgICAgICBzb3VyY2UgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UnCisgICAgICAgIHNvdXJjZS5ta2RpcigpCisgICAgICAgIChzb3VyY2UgLyAnX19tYWluX18ucHknKS50b3VjaCgpCisgICAgICAgIHRhcmdldCA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZS5weXonCisgICAgICAgIHppcGFwcC5jcmVhdGVfYXJjaGl2ZShzdHIoc291cmNlKSwgc3RyKHRhcmdldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwYXBwLmdldF9pbnRlcnByZXRlcihzdHIodGFyZ2V0KSksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9tb2RpZnlfc2hlYmFuZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgY2FuIGNoYW5nZSB0aGUgc2hlYmFuZyBvZiBhIGZpbGUuCisgICAgICAgIHNvdXJjZSA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZScKKyAgICAgICAgc291cmNlLm1rZGlyKCkKKyAgICAgICAgKHNvdXJjZSAvICdfX21haW5fXy5weScpLnRvdWNoKCkKKyAgICAgICAgdGFyZ2V0ID0gc2VsZi50bXBkaXIgLyAnc291cmNlLnB5eicKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCBzdHIodGFyZ2V0KSwgaW50ZXJwcmV0ZXI9J3B5dGhvbicpCisgICAgICAgIG5ld190YXJnZXQgPSBzZWxmLnRtcGRpciAvICdjaGFuZ2VkLnB5eicKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cih0YXJnZXQpLCBzdHIobmV3X3RhcmdldCksIGludGVycHJldGVyPSdweXRob24yLjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGFwcC5nZXRfaW50ZXJwcmV0ZXIoc3RyKG5ld190YXJnZXQpKSwgJ3B5dGhvbjIuNycpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zaGViYW5nX3RvX2ZpbGVvYmooc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBjaGFuZ2UgdGhlIHNoZWJhbmcgb2YgYSBmaWxlLCB3cml0aW5nIHRoZSByZXN1bHQgdG8gYQorICAgICAgICAjIGZpbGUgb2JqZWN0LgorICAgICAgICBzb3VyY2UgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UnCisgICAgICAgIHNvdXJjZS5ta2RpcigpCisgICAgICAgIChzb3VyY2UgLyAnX19tYWluX18ucHknKS50b3VjaCgpCisgICAgICAgIHRhcmdldCA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZS5weXonCisgICAgICAgIHppcGFwcC5jcmVhdGVfYXJjaGl2ZShzdHIoc291cmNlKSwgc3RyKHRhcmdldCksIGludGVycHJldGVyPSdweXRob24nKQorICAgICAgICBuZXdfdGFyZ2V0ID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHppcGFwcC5jcmVhdGVfYXJjaGl2ZShzdHIodGFyZ2V0KSwgbmV3X3RhcmdldCwgaW50ZXJwcmV0ZXI9J3B5dGhvbjIuNycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdfdGFyZ2V0LmdldHZhbHVlKCkuc3RhcnRzd2l0aChiJyMhcHl0aG9uMi43XG4nKSkKKworICAgIGRlZiB0ZXN0X3JlYWRfZnJvbV9wYXRob2JqKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4gY29weSBhbiBhcmNoaXZlIHVzaW5nIGEgcGF0aGxpYi5QYXRoIG9iamVjdAorICAgICAgICAjIGZvciB0aGUgc291cmNlLgorICAgICAgICBzb3VyY2UgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UnCisgICAgICAgIHNvdXJjZS5ta2RpcigpCisgICAgICAgIChzb3VyY2UgLyAnX19tYWluX18ucHknKS50b3VjaCgpCisgICAgICAgIHRhcmdldDEgPSBzZWxmLnRtcGRpciAvICd0YXJnZXQxLnB5eicKKyAgICAgICAgdGFyZ2V0MiA9IHNlbGYudG1wZGlyIC8gJ3RhcmdldDIucHl6JworICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc291cmNlLCB0YXJnZXQxLCBpbnRlcnByZXRlcj0ncHl0aG9uJykKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHRhcmdldDEsIHRhcmdldDIsIGludGVycHJldGVyPSdweXRob24yLjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGFwcC5nZXRfaW50ZXJwcmV0ZXIodGFyZ2V0MiksICdweXRob24yLjcnKQorCisgICAgZGVmIHRlc3RfcmVhZF9mcm9tX2ZpbGVvYmooc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBjb3B5IGFuIGFyY2hpdmUgdXNpbmcgYW4gb3BlbiBmaWxlIG9iamVjdC4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ19fbWFpbl9fLnB5JykudG91Y2goKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UucHl6JworICAgICAgICB0ZW1wX2FyY2hpdmUgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCB0ZW1wX2FyY2hpdmUsIGludGVycHJldGVyPSdweXRob24nKQorICAgICAgICBuZXdfdGFyZ2V0ID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHRlbXBfYXJjaGl2ZS5zZWVrKDApCisgICAgICAgIHppcGFwcC5jcmVhdGVfYXJjaGl2ZSh0ZW1wX2FyY2hpdmUsIG5ld190YXJnZXQsIGludGVycHJldGVyPSdweXRob24yLjcnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3X3RhcmdldC5nZXR2YWx1ZSgpLnN0YXJ0c3dpdGgoYicjIXB5dGhvbjIuN1xuJykpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2hlYmFuZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2UgY2FuIHJlbW92ZSB0aGUgc2hlYmFuZyBmcm9tIGEgZmlsZS4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ19fbWFpbl9fLnB5JykudG91Y2goKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UucHl6JworICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc3RyKHNvdXJjZSksIHN0cih0YXJnZXQpLCBpbnRlcnByZXRlcj0ncHl0aG9uJykKKyAgICAgICAgbmV3X3RhcmdldCA9IHNlbGYudG1wZGlyIC8gJ2NoYW5nZWQucHl6JworICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc3RyKHRhcmdldCksIHN0cihuZXdfdGFyZ2V0KSwgaW50ZXJwcmV0ZXI9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBhcHAuZ2V0X2ludGVycHJldGVyKHN0cihuZXdfdGFyZ2V0KSksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jb250ZW50X29mX2NvcGllZF9hcmNoaXZlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBjb3B5aW5nIGFuIGFyY2hpdmUgZG9lc24ndCBjb3JydXB0IGl0LgorICAgICAgICBzb3VyY2UgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UnCisgICAgICAgIHNvdXJjZS5ta2RpcigpCisgICAgICAgIChzb3VyY2UgLyAnX19tYWluX18ucHknKS50b3VjaCgpCisgICAgICAgIHRhcmdldCA9IGlvLkJ5dGVzSU8oKQorICAgICAgICB6aXBhcHAuY3JlYXRlX2FyY2hpdmUoc3RyKHNvdXJjZSksIHRhcmdldCwgaW50ZXJwcmV0ZXI9J3B5dGhvbicpCisgICAgICAgIG5ld190YXJnZXQgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgdGFyZ2V0LnNlZWsoMCkKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHRhcmdldCwgbmV3X3RhcmdldCwgaW50ZXJwcmV0ZXI9Tm9uZSkKKyAgICAgICAgbmV3X3RhcmdldC5zZWVrKDApCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKG5ld190YXJnZXQsICdyJykgYXMgejoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHoubmFtZWxpc3QoKSksIHsnX19tYWluX18ucHknfSkKKworICAgICMgKFVuaXggb25seSkgdGVzdHMgdGhhdCBhcmNoaXZlcyB3aXRoIHNoZWJhbmcgbGluZXMgYXJlIG1hZGUgZXhlY3V0YWJsZQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAnV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IGFuIGV4ZWN1dGFibGUgYml0JykKKyAgICBkZWYgdGVzdF9zaGViYW5nX2lzX2V4ZWN1dGFibGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGFuIGFyY2hpdmUgd2l0aCBhIHNoZWJhbmcgbGluZSBpcyBtYWRlIGV4ZWN1dGFibGUuCisgICAgICAgIHNvdXJjZSA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZScKKyAgICAgICAgc291cmNlLm1rZGlyKCkKKyAgICAgICAgKHNvdXJjZSAvICdfX21haW5fXy5weScpLnRvdWNoKCkKKyAgICAgICAgdGFyZ2V0ID0gc2VsZi50bXBkaXIgLyAnc291cmNlLnB5eicKKyAgICAgICAgemlwYXBwLmNyZWF0ZV9hcmNoaXZlKHN0cihzb3VyY2UpLCBzdHIodGFyZ2V0KSwgaW50ZXJwcmV0ZXI9J3B5dGhvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJnZXQuc3RhdCgpLnN0X21vZGUgJiBzdGF0LlNfSUVYRUMpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgJ1dpbmRvd3MgZG9lcyBub3Qgc3VwcG9ydCBhbiBleGVjdXRhYmxlIGJpdCcpCisgICAgZGVmIHRlc3Rfbm9fc2hlYmFuZ19pc19ub3RfZXhlY3V0YWJsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYW4gYXJjaGl2ZSB3aXRoIG5vIHNoZWJhbmcgbGluZSBpcyBub3QgbWFkZSBleGVjdXRhYmxlLgorICAgICAgICBzb3VyY2UgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UnCisgICAgICAgIHNvdXJjZS5ta2RpcigpCisgICAgICAgIChzb3VyY2UgLyAnX19tYWluX18ucHknKS50b3VjaCgpCisgICAgICAgIHRhcmdldCA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZS5weXonCisgICAgICAgIHppcGFwcC5jcmVhdGVfYXJjaGl2ZShzdHIoc291cmNlKSwgc3RyKHRhcmdldCksIGludGVycHJldGVyPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGFyZ2V0LnN0YXQoKS5zdF9tb2RlICYgc3RhdC5TX0lFWEVDKQorCisKK2NsYXNzIFppcEFwcENtZGxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3QgemlwYXBwIG1vZHVsZSBjb21tYW5kIGxpbmUgQVBJLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodG1wZGlyLmNsZWFudXApCisgICAgICAgIHNlbGYudG1wZGlyID0gcGF0aGxpYi5QYXRoKHRtcGRpci5uYW1lKQorCisgICAgZGVmIG1ha2VfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYW4gYXJjaGl2ZSB3aXRoIG5vIHNoZWJhbmcgbGluZSBpcyBub3QgbWFkZSBleGVjdXRhYmxlLgorICAgICAgICBzb3VyY2UgPSBzZWxmLnRtcGRpciAvICdzb3VyY2UnCisgICAgICAgIHNvdXJjZS5ta2RpcigpCisgICAgICAgIChzb3VyY2UgLyAnX19tYWluX18ucHknKS50b3VjaCgpCisgICAgICAgIHRhcmdldCA9IHNlbGYudG1wZGlyIC8gJ3NvdXJjZS5weXonCisgICAgICAgIHppcGFwcC5jcmVhdGVfYXJjaGl2ZShzb3VyY2UsIHRhcmdldCkKKyAgICAgICAgcmV0dXJuIHRhcmdldAorCisgICAgZGVmIHRlc3RfY21kbGluZV9jcmVhdGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgYmFzaWMgY29tbWFuZCBsaW5lIEFQSS4KKyAgICAgICAgc291cmNlID0gc2VsZi50bXBkaXIgLyAnc291cmNlJworICAgICAgICBzb3VyY2UubWtkaXIoKQorICAgICAgICAoc291cmNlIC8gJ19fbWFpbl9fLnB5JykudG91Y2goKQorICAgICAgICBhcmdzID0gW3N0cihzb3VyY2UpXQorICAgICAgICB6aXBhcHAubWFpbihhcmdzKQorICAgICAgICB0YXJnZXQgPSBzb3VyY2Uud2l0aF9zdWZmaXgoJy5weXonKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0LmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X2NtZGxpbmVfY29weShzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvcHlpbmcgYW4gYXJjaGl2ZS4KKyAgICAgICAgb3JpZ2luYWwgPSBzZWxmLm1ha2VfYXJjaGl2ZSgpCisgICAgICAgIHRhcmdldCA9IHNlbGYudG1wZGlyIC8gJ3RhcmdldC5weXonCisgICAgICAgIGFyZ3MgPSBbc3RyKG9yaWdpbmFsKSwgJy1vJywgc3RyKHRhcmdldCldCisgICAgICAgIHppcGFwcC5tYWluKGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJnZXQuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfY21kbGluZV9jb3B5X2lucGxhY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBjb3B5aW5nIGFuIGFyY2hpdmUgaW4gcGxhY2UgZmFpbHMuCisgICAgICAgIG9yaWdpbmFsID0gc2VsZi5tYWtlX2FyY2hpdmUoKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRtcGRpciAvICd0YXJnZXQucHl6JworICAgICAgICBhcmdzID0gW3N0cihvcmlnaW5hbCksICctbycsIHN0cihvcmlnaW5hbCldCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgICAgICAgICB6aXBhcHAubWFpbihhcmdzKQorICAgICAgICAjIFByb2dyYW0gc2hvdWxkIGV4aXQgd2l0aCBhIG5vbi16ZXJvIHJldHVybSBjb2RlLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoY20uZXhjZXB0aW9uLmNvZGUpCisKKyAgICBkZWYgdGVzdF9jbWRsaW5lX2NvcHlfY2hhbmdlX21haW4oc2VsZik6CisgICAgICAgICMgVGVzdCBjb3B5aW5nIGFuIGFyY2hpdmUgZG9lc24ndCBhbGxvdyBjaGFuZ2luZyBfX21haW5fXy5weS4KKyAgICAgICAgb3JpZ2luYWwgPSBzZWxmLm1ha2VfYXJjaGl2ZSgpCisgICAgICAgIHRhcmdldCA9IHNlbGYudG1wZGlyIC8gJ3RhcmdldC5weXonCisgICAgICAgIGFyZ3MgPSBbc3RyKG9yaWdpbmFsKSwgJy1vJywgc3RyKHRhcmdldCksICctbScsICdmb286YmFyJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKKyAgICAgICAgICAgIHppcGFwcC5tYWluKGFyZ3MpCisgICAgICAgICMgUHJvZ3JhbSBzaG91bGQgZXhpdCB3aXRoIGEgbm9uLXplcm8gcmV0dXJtIGNvZGUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbS5leGNlcHRpb24uY29kZSkKKworICAgIEBwYXRjaCgnc3lzLnN0ZG91dCcsIG5ld19jYWxsYWJsZT1pby5TdHJpbmdJTykKKyAgICBkZWYgdGVzdF9pbmZvX2NvbW1hbmQoc2VsZiwgbW9ja19zdGRvdXQpOgorICAgICAgICAjIFRlc3QgdGhlIG91dHB1dCBvZiB0aGUgaW5mbyBjb21tYW5kLgorICAgICAgICB0YXJnZXQgPSBzZWxmLm1ha2VfYXJjaGl2ZSgpCisgICAgICAgIGFyZ3MgPSBbc3RyKHRhcmdldCksICctLWluZm8nXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgorICAgICAgICAgICAgemlwYXBwLm1haW4oYXJncykKKyAgICAgICAgIyBQcm9ncmFtIHNob3VsZCBleGl0IHdpdGggYSB6ZXJvIHJldHVybSBjb2RlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5jb2RlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfc3Rkb3V0LmdldHZhbHVlKCksICJJbnRlcnByZXRlcjogPG5vbmU+XG4iKQorCisgICAgZGVmIHRlc3RfaW5mb19lcnJvcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBpbmZvIGNvbW1hbmQgZmFpbHMgd2hlbiB0aGUgYXJjaGl2ZSBkb2VzIG5vdCBleGlzdC4KKyAgICAgICAgdGFyZ2V0ID0gc2VsZi50bXBkaXIgLyAnZHVtbXkucHl6JworICAgICAgICBhcmdzID0gW3N0cih0YXJnZXQpLCAnLS1pbmZvJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKKyAgICAgICAgICAgIHppcGFwcC5tYWluKGFyZ3MpCisgICAgICAgICMgUHJvZ3JhbSBzaG91bGQgZXhpdCB3aXRoIGEgbm9uLXplcm8gcmV0dXJtIGNvZGUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbS5leGNlcHRpb24uY29kZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CmluZGV4IDRiZGY3ZDQuLmQyNzhlMDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKQEAgLTMzMCw2ICszMzAsMzcgQEAKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgemlwb3Blbi5yZWFkMSgxMDApOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZm5hbWUgPSAnZmlsZS5uYW1lJworICAgICAgICBmb3IgZiBpbiBnZXRfZmlsZXMoc2VsZik6CisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAndycsIHNlbGYuY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgZm5hbWUpCisgICAgICAgICAgICAgICAgciA9IHJlcHIoemlwZnApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibW9kZT0ndyciLCByKQorCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAncicpIGFzIHppcGZwOgorICAgICAgICAgICAgICAgIHIgPSByZXByKHppcGZwKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZiwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmlsZW5hbWU9JXInICUgZiwgcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmaWxlPSVyJyAlIGYsIHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibW9kZT0nciciLCByKQorICAgICAgICAgICAgICAgIHIgPSByZXByKHppcGZwLmdldGluZm8oZm5hbWUpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGVuYW1lPSVyJyAlIGZuYW1lLCByKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGVtb2RlPScsIHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmlsZV9zaXplPScsIHIpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21wcmVzc2lvbiAhPSB6aXBmaWxlLlpJUF9TVE9SRUQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2NvbXByZXNzX3R5cGU9JywgcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignY29tcHJlc3Nfc2l6ZT0nLCByKQorICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbmFtZSkgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgciA9IHJlcHIoemlwb3BlbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignbmFtZT0lcicgJSBmbmFtZSwgcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibW9kZT0nciciLCByKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXByZXNzaW9uICE9IHppcGZpbGUuWklQX1NUT1JFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2NvbXByZXNzX3R5cGU9JywgcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdbY2xvc2VkXScsIHJlcHIoemlwb3BlbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdbY2xvc2VkXScsIHJlcHIoemlwZnApKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgICAgICB1bmxpbmsoVEVTVEZOMikKQEAgLTY2NSw3ICs2OTYsNyBAQAogICAgICAgICBzZWxmLnJlcXVpcmVzV3JpdGVBY2Nlc3Mob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZuID0gX19maWxlX18KLSAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHljJykgb3IgZm4uZW5kc3dpdGgoJy5weW8nKToKKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHljJyk6CiAgICAgICAgICAgICAgICAgcGF0aF9zcGxpdCA9IGZuLnNwbGl0KG9zLnNlcCkKICAgICAgICAgICAgICAgICBpZiBvcy5hbHRzZXAgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHBhdGhfc3BsaXQuZXh0ZW5kKGZuLnNwbGl0KG9zLmFsdHNlcCkpCkBAIC02ODIsNyArNzEzLDcgQEAKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm4gPSBfX2ZpbGVfXwotICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnB5YycpOgogICAgICAgICAgICAgICAgIGZuID0gZm5bOi0xXQogCiAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KGZuLCAidGVzdHBhY2thZ2UiKQpAQCAtNzM5LDEwICs3NzAsOCBAQAogICAgICAgICBpbXBvcnQgZW1haWwKICAgICAgICAgcGFja2FnZWRpciA9IG9zLnBhdGguZGlybmFtZShlbWFpbC5fX2ZpbGVfXykKICAgICAgICAgc2VsZi5yZXF1aXJlc1dyaXRlQWNjZXNzKHBhY2thZ2VkaXIpCi0gICAgICAgICMgdXNlIC5weWMgaWYgcnVubmluZyB0ZXN0IGluIG9wdGltaXphdGlvbiBtb2RlLAotICAgICAgICAjIHVzZSAucHlvIGlmIHJ1bm5pbmcgdGVzdCBpbiBkZWJ1ZyBtb2RlCiAgICAgICAgIG9wdGxldmVsID0gMSBpZiBfX2RlYnVnX18gZWxzZSAwCi0gICAgICAgIGV4dCA9ICcucHlvJyBpZiBvcHRsZXZlbCA9PSAxIGVsc2UgJy5weWMnCisgICAgICAgIGV4dCA9ICcucHljJwogCiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIFwKICAgICAgICAgICAgICB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIsIG9wdGltaXplPW9wdGxldmVsKSBhcyB6aXBmcDoKQEAgLTgxNiwxMSArODQ1LDEwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiU3ludGF4RXJyb3IiLCBzLmdldHZhbHVlKCkpCiAKICAgICAgICAgICAgICAgICAjIGFzIGl0IHdpbGwgbm90IGhhdmUgY29tcGlsZWQgdGhlIHB5dGhvbiBmaWxlLCBpdCB3aWxsCi0gICAgICAgICAgICAgICAgIyBpbmNsdWRlIHRoZSAucHkgZmlsZSBub3QgLnB5YyBvciAucHlvCisgICAgICAgICAgICAgICAgIyBpbmNsdWRlIHRoZSAucHkgZmlsZSBub3QgLnB5YwogICAgICAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21vZDEucHknLCBuYW1lcykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtb2QxLnB5YycsIG5hbWVzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21vZDEucHlvJywgbmFtZXMpCiAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJtdHJlZShURVNURk4yKQpAQCAtMTA4MSw2ICsxMTA5LDE5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLmZpbGVsaXN0WzBdLmZpbGVuYW1lLCAiZm9vLnR4dCIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLmZpbGVsaXN0WzFdLmZpbGVuYW1lLCAiXHhmNi50eHQiKQogCisgICAgZGVmIHRlc3RfZXhjbHVzaXZlX2NyZWF0ZV96aXBfZmlsZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBleGNsdXNpdmUgY3JlYXRpbmcgYSBuZXcgemlwZmlsZS4iIiIKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisgICAgICAgIGZpbGVuYW1lID0gJ3Rlc3RmaWxlLnR4dCcKKyAgICAgICAgY29udGVudCA9IGInaGVsbG8sIHdvcmxkLiB0aGlzIGlzIHNvbWUgY29udGVudC4nCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ4IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZpbGVuYW1lLCBjb250ZW50KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgIngiLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLm5hbWVsaXN0KCksIFtmaWxlbmFtZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoZmlsZW5hbWUpLCBjb250ZW50KQorCiAgICAgZGVmIHRlc3RfY3JlYXRlX25vbl9leGlzdGVudF9maWxlX2Zvcl9hcHBlbmQoc2VsZik6CiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CiAgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQpAQCAtMTY1NSw2ICsxNjk2LDcyIEBACiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAKIAorIyBQcml2aWRlIHRoZSB0ZWxsKCkgbWV0aG9kIGJ1dCBub3Qgc2VlaygpCitjbGFzcyBUZWxsYWJsZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnApOgorICAgICAgICBzZWxmLmZwID0gZnAKKyAgICAgICAgc2VsZi5vZmZzZXQgPSAwCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIG4gPSBzZWxmLmZwLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYub2Zmc2V0ICs9IG4KKyAgICAgICAgcmV0dXJuIG4KKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgc2VsZi5mcC5mbHVzaCgpCisKK2NsYXNzIFVuc2Vla2FibGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwKToKKyAgICAgICAgc2VsZi5mcCA9IGZwCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLmZwLndyaXRlKGRhdGEpCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYuZnAuZmx1c2goKQorCitjbGFzcyBVbnNlZWthYmxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3dyaXRlc3RyKHNlbGYpOgorICAgICAgICBmb3Igd3JhcHBlciBpbiAobGFtYmRhIGY6IGYpLCBUZWxsYWJsZSwgVW5zZWVrYWJsZToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHdyYXBwZXI9d3JhcHBlcik6CisgICAgICAgICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIGYud3JpdGUoYidhYmMnKQorICAgICAgICAgICAgICAgIGJmID0gaW8uQnVmZmVyZWRXcml0ZXIoZikKKyAgICAgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZSh3cmFwcGVyKGJmKSwgJ3cnLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cignb25lcycsIGInMTExJykKKyAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ3R3b3MnLCBiJzIyMicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHZhbHVlKClbOjVdLCBiJ2FiY1BLJykKKyAgICAgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCBtb2RlPSdyJykgYXMgemlwZjoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoem9wZW4ucmVhZCgpLCBiJzExMScpCisgICAgICAgICAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW46CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpvcGVuLnJlYWQoKSwgYicyMjInKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGZvciB3cmFwcGVyIGluIChsYW1iZGEgZjogZiksIFRlbGxhYmxlLCBVbnNlZWthYmxlOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qod3JhcHBlcj13cmFwcGVyKToKKyAgICAgICAgICAgICAgICBmID0gaW8uQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgZi53cml0ZShiJ2FiYycpCisgICAgICAgICAgICAgICAgYmYgPSBpby5CdWZmZXJlZFdyaXRlcihmKQorICAgICAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHdyYXBwZXIoYmYpLCAndycsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgZjI6CisgICAgICAgICAgICAgICAgICAgICAgICBmMi53cml0ZShiJzExMScpCisgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ29uZXMnKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyBmMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYyLndyaXRlKGInMjIyJykKKyAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAndHdvcycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHZhbHVlKClbOjVdLCBiJ2FiY1BLJykKKyAgICAgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCBtb2RlPSdyJykgYXMgemlwZjoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoem9wZW4ucmVhZCgpLCBiJzExMScpCisgICAgICAgICAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW46CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpvcGVuLnJlYWQoKSwgYicyMjInKQorCisKIEByZXF1aXJlc196bGliCiBjbGFzcyBUZXN0c1dpdGhNdWx0aXBsZU9wZW5zKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBAY2xhc3NtZXRob2QKQEAgLTE2NzEsMzUgKzE3NzgsNTMgQEAKICAgICBkZWYgdGVzdF9zYW1lX2ZpbGUoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCiAgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgotICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKFRFU1RGTjIpCi0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgotICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjEsIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMjoKLSAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCgpCi0gICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgZGF0YTIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExKQorICAgICAgICBmb3IgZiBpbiBnZXRfZmlsZXMoc2VsZik6CisgICAgICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYpCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMSwgemlwZi5vcGVuKCdvbmVzJykgYXMgem9wZW4yOgorICAgICAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIGRhdGEyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIHNlbGYuZGF0YTEpCiAKICAgICBkZWYgdGVzdF9kaWZmZXJlbnRfZmlsZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCAod2hlbiB0aGUgWmlwRmlsZSBpcyBpbiBjb250cm9sIG9mIGNyZWF0aW5nIGZpbGUgb2JqZWN0cykKICAgICAgICAgIyBtdWx0aXBsZSBvcGVuKCkgY2FsbHMgY2FuIGJlIG1hZGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuCi0gICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoVEVTVEZOMikKLSAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6Ci0gICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMSwgemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW4yOgotICAgICAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQotICAgICAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKCkKLSAgICAgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgc2VsZi5kYXRhMikKKyAgICAgICAgZm9yIGYgaW4gZ2V0X2ZpbGVzKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmKQorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjEsIHppcGYub3BlbigndHdvcycpIGFzIHpvcGVuMjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIHNlbGYuZGF0YTIpCiAKICAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZChzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCAod2hlbiB0aGUgWmlwRmlsZSBpcyBpbiBjb250cm9sIG9mIGNyZWF0aW5nIGZpbGUgb2JqZWN0cykKICAgICAgICAgIyBtdWx0aXBsZSBvcGVuKCkgY2FsbHMgY2FuIGJlIG1hZGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuCi0gICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoVEVTVEZOMikKLSAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6Ci0gICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMSwgemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW4yOgorICAgICAgICBmb3IgZiBpbiBnZXRfZmlsZXMoc2VsZik6CisgICAgICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYpCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMToKKyAgICAgICAgICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW4yOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCgpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCBzZWxmLmRhdGEyKQorCisgICAgZGVmIHRlc3RfcmVhZF9hZnRlcl9jbG9zZShzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gZ2V0X2ZpbGVzKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmKQorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgorICAgICAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICdyJykgYXMgemlwZjoKKyAgICAgICAgICAgICAgICAgICAgem9wZW4xID0gc3RhY2suZW50ZXJfY29udGV4dCh6aXBmLm9wZW4oJ29uZXMnKSkKKyAgICAgICAgICAgICAgICAgICAgem9wZW4yID0gc3RhY2suZW50ZXJfY29udGV4dCh6aXBmLm9wZW4oJ3R3b3MnKSkKICAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKICAgICAgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKICAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCgpCkBAIC0xNzA3LDQzICsxODMyLDMyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgc2VsZi5kYXRhMikKIAotICAgIGRlZiB0ZXN0X3JlYWRfYWZ0ZXJfY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoVEVTVEZOMikKLSAgICAgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgotICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmOgotICAgICAgICAgICAgICAgIHpvcGVuMSA9IHN0YWNrLmVudGVyX2NvbnRleHQoemlwZi5vcGVuKCdvbmVzJykpCi0gICAgICAgICAgICAgICAgem9wZW4yID0gc3RhY2suZW50ZXJfY29udGV4dCh6aXBmLm9wZW4oJ3R3b3MnKSkKLSAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQotICAgICAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCgpCi0gICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIHNlbGYuZGF0YTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIHNlbGYuZGF0YTIpCi0KICAgICBkZWYgdGVzdF9yZWFkX2FmdGVyX3dyaXRlKHNlbGYpOgotICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAndycsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6aXBmOgotICAgICAgICAgICAgemlwZi53cml0ZXN0cignb25lcycsIHNlbGYuZGF0YTEpCi0gICAgICAgICAgICB6aXBmLndyaXRlc3RyKCd0d29zJywgc2VsZi5kYXRhMikKLSAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdvbmVzJykgYXMgem9wZW4xOgotICAgICAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExWzo1MDBdKQotICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAncicpIGFzIHppcGY6Ci0gICAgICAgICAgICBkYXRhMSA9IHppcGYucmVhZCgnb25lcycpCi0gICAgICAgICAgICBkYXRhMiA9IHppcGYucmVhZCgndHdvcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIHNlbGYuZGF0YTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIHNlbGYuZGF0YTIpCisgICAgICAgIGZvciBmIGluIGdldF9maWxlcyhzZWxmKToKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICd3JywgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGY6CisgICAgICAgICAgICAgICAgemlwZi53cml0ZXN0cignb25lcycsIHNlbGYuZGF0YTEpCisgICAgICAgICAgICAgICAgemlwZi53cml0ZXN0cigndHdvcycsIHNlbGYuZGF0YTIpCisgICAgICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjE6CisgICAgICAgICAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMVs6NTAwXSkKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICdyJykgYXMgemlwZjoKKyAgICAgICAgICAgICAgICBkYXRhMSA9IHppcGYucmVhZCgnb25lcycpCisgICAgICAgICAgICAgICAgZGF0YTIgPSB6aXBmLnJlYWQoJ3R3b3MnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIHNlbGYuZGF0YTIpCiAKICAgICBkZWYgdGVzdF93cml0ZV9hZnRlcl9yZWFkKHNlbGYpOgotICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6aXBmOgotICAgICAgICAgICAgemlwZi53cml0ZXN0cignb25lcycsIHNlbGYuZGF0YTEpCi0gICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMToKLSAgICAgICAgICAgICAgICB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgICAgICAgICAgemlwZi53cml0ZXN0cigndHdvcycsIHNlbGYuZGF0YTIpCi0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICdyJykgYXMgemlwZjoKLSAgICAgICAgICAgIGRhdGExID0gemlwZi5yZWFkKCdvbmVzJykKLSAgICAgICAgICAgIGRhdGEyID0gemlwZi5yZWFkKCd0d29zJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgc2VsZi5kYXRhMikKKyAgICAgICAgZm9yIGYgaW4gZ2V0X2ZpbGVzKHNlbGYpOgorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZjoKKyAgICAgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCdvbmVzJywgc2VsZi5kYXRhMSkKKyAgICAgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMToKKyAgICAgICAgICAgICAgICAgICAgem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCd0d29zJywgc2VsZi5kYXRhMikKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICdyJykgYXMgemlwZjoKKyAgICAgICAgICAgICAgICBkYXRhMSA9IHppcGYucmVhZCgnb25lcycpCisgICAgICAgICAgICAgICAgZGF0YTIgPSB6aXBmLnJlYWQoJ3R3b3MnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIHNlbGYuZGF0YTIpCiAKICAgICBkZWYgdGVzdF9tYW55X29wZW5zKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0IHJlYWQoKSBhbmQgb3BlbigpIHByb21wdGx5IGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5CmluZGV4IDdkZWE4YTMuLmMyOWJkOGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5CkBAIC0zLDcgKzMsNyBAQAogIyBmcm9tIHRlc3RfemlwZmlsZQogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKLSMgWFhYKG5ub3J3aXR6KTogZGlzYWJsZSB0aGlzIHRlc3QgYnkgbG9va2luZyBmb3IgZXh0cmEgbGFyZ2ZpbGUgcmVzb3VyY2UKKyMgWFhYKG5ub3J3aXR6KTogZGlzYWJsZSB0aGlzIHRlc3QgYnkgbG9va2luZyBmb3IgZXh0cmFsYXJnZWZpbGUgcmVzb3VyY2UsCiAjIHdoaWNoIGRvZXNuJ3QgZXhpc3QuICBUaGlzIHRlc3QgdGFrZXMgb3ZlciAzMCBtaW51dGVzIHRvIHJ1biBpbiBnZW5lcmFsCiAjIGFuZCByZXF1aXJlcyBtb3JlIGRpc2sgc3BhY2UgdGhhbiBtb3N0IG9mIHRoZSBidWlsZGJvdHMuCiBzdXBwb3J0LnJlcXVpcmVzKApAQCAtNzIsMTUgKzcyLDE5IEBACiAgICAgZGVmIHRlc3RTdG9yZWQoc2VsZik6CiAgICAgICAgICMgVHJ5IHRoZSB0ZW1wIGZpbGUgZmlyc3QuICBJZiB3ZSBkbyBURVNURk4yIGZpcnN0LCB0aGVuIGl0IGhvZ3MKICAgICAgICAgIyBnaWdhYnl0ZXMgb2YgZGlzayBzcGFjZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0ZXN0LgotICAgICAgICBmb3IgZiBpbiBUZW1wb3JhcnlGaWxlKCksIFRFU1RGTjI6CisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLnppcFRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi56aXBUZXN0KFRFU1RGTjIsIHppcGZpbGUuWklQX1NUT1JFRCkKIAogICAgIEByZXF1aXJlc196bGliCiAgICAgZGVmIHRlc3REZWZsYXRlZChzZWxmKToKICAgICAgICAgIyBUcnkgdGhlIHRlbXAgZmlsZSBmaXJzdC4gIElmIHdlIGRvIFRFU1RGTjIgZmlyc3QsIHRoZW4gaXQgaG9ncwogICAgICAgICAjIGdpZ2FieXRlcyBvZiBkaXNrIHNwYWNlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRlc3QuCi0gICAgICAgIGZvciBmIGluIFRlbXBvcmFyeUZpbGUoKSwgVEVTVEZOMjoKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuemlwVGVzdChURVNURk4yLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgZm9yIGZuYW1lIGluIFRFU1RGTiwgVEVTVEZOMjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKaW5kZXggMWUzNTFjOC4uOGU1ZTEyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBtYXJzaGFsCitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCB0aW1lCkBAIC00OCwxMCArNDksMTEgQEAKIFRFU1RNT0QgPSAiemlwdGVzdG1vZHVsZSIKIFRFU1RQQUNLID0gInppcHRlc3RwYWNrYWdlIgogVEVTVFBBQ0syID0gInppcHRlc3RwYWNrYWdlMiIKK1RFTVBfRElSID0gb3MucGF0aC5hYnNwYXRoKCJqdW5rOTUxNDIiKQogVEVNUF9aSVAgPSBvcy5wYXRoLmFic3BhdGgoImp1bms5NTE0Mi56aXAiKQogCiBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKFRFU1RNT0QgKyAnLnB5JykKLXB5Y19leHQgPSAoJy5weWMnIGlmIF9fZGVidWdfXyBlbHNlICcucHlvJykKK3B5Y19leHQgPSAnLnB5YycKIAogCiBjbGFzcyBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC03Nyw0NSArNzksNjQgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyBXZSdyZSByZXVzaW5nIHRoZSB6aXAgYXJjaGl2ZSBwYXRoLCBzbyB3ZSBtdXN0IGNsZWFyIHRoZQotICAgICAgICAjIGNhY2hlZCBkaXJlY3RvcnkgaW5mbyBhbmQgbGluZWNhY2hlCisgICAgICAgICMgY2FjaGVkIGRpcmVjdG9yeSBpbmZvIGFuZCBsaW5lY2FjaGUuCiAgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKICAgICAgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNsZWFyKCkKICAgICAgICAgSW1wb3J0SG9va3NCYXNlVGVzdENhc2Uuc2V0VXAoc2VsZikKIAotICAgIGRlZiBkb1Rlc3Qoc2VsZiwgZXhwZWN0ZWRfZXh0LCBmaWxlcywgKm1vZHVsZXMsICoqa3cpOgotICAgICAgICB6ID0gWmlwRmlsZShURU1QX1pJUCwgInciKQotICAgICAgICB0cnk6CisgICAgZGVmIG1ha2VUcmVlKHNlbGYsIGZpbGVzLCBkaXJOYW1lPVRFTVBfRElSKToKKyAgICAgICAgIyBDcmVhdGUgYSBmaWxlc3lzdGVtIGJhc2VkIHNldCBvZiBtb2R1bGVzL3BhY2thZ2VzCisgICAgICAgICMgZGVmaW5lZCBieSBmaWxlcyB1bmRlciB0aGUgZGlyZWN0b3J5IGRpck5hbWUuCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnJtdHJlZSwgZGlyTmFtZSkKKworICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXJOYW1lLCBuYW1lKQorICAgICAgICAgICAgaWYgcGF0aFstMV0gPT0gb3Muc2VwOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkbmFtZSA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoZG5hbWUpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICBmcC53cml0ZShkYXRhKQorCisgICAgZGVmIG1ha2VaaXAoc2VsZiwgZmlsZXMsIHppcE5hbWU9VEVNUF9aSVAsICoqa3cpOgorICAgICAgICAjIENyZWF0ZSBhIHppcCBhcmNoaXZlIGJhc2VkIHNldCBvZiBtb2R1bGVzL3BhY2thZ2VzCisgICAgICAgICMgZGVmaW5lZCBieSBmaWxlcyBpbiB0aGUgemlwIGZpbGUgemlwTmFtZS4gIElmIHRoZQorICAgICAgICAjIGtleSAnc3R1ZmYnIGV4aXN0cyBpbiBrdyBpdCBpcyBwcmVwZW5kZWQgdG8gdGhlIGFyY2hpdmUuCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgemlwTmFtZSkKKworICAgICAgICB3aXRoIFppcEZpbGUoemlwTmFtZSwgInciKSBhcyB6OgogICAgICAgICAgICAgZm9yIG5hbWUsIChtdGltZSwgZGF0YSkgaW4gZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICB6aW5mbyA9IFppcEluZm8obmFtZSwgdGltZS5sb2NhbHRpbWUobXRpbWUpKQogICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBzZWxmLmNvbXByZXNzaW9uCiAgICAgICAgICAgICAgICAgei53cml0ZXN0cih6aW5mbywgZGF0YSkKLSAgICAgICAgICAgIHouY2xvc2UoKQogCi0gICAgICAgICAgICBzdHVmZiA9IGt3LmdldCgic3R1ZmYiLCBOb25lKQotICAgICAgICAgICAgaWYgc3R1ZmYgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBQcmVwZW5kICdzdHVmZicgdG8gdGhlIHN0YXJ0IG9mIHRoZSB6aXBmaWxlCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKFRFTVBfWklQLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oVEVNUF9aSVAsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc3R1ZmYpCi0gICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgc3R1ZmYgPSBrdy5nZXQoInN0dWZmIiwgTm9uZSkKKyAgICAgICAgaWYgc3R1ZmYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFByZXBlbmQgJ3N0dWZmJyB0byB0aGUgc3RhcnQgb2YgdGhlIHppcGZpbGUKKyAgICAgICAgICAgIHdpdGggb3Blbih6aXBOYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHppcE5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzdHVmZikKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCiAKLSAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBURU1QX1pJUCkKKyAgICBkZWYgZG9UZXN0KHNlbGYsIGV4cGVjdGVkX2V4dCwgZmlsZXMsICptb2R1bGVzLCAqKmt3KToKKyAgICAgICAgc2VsZi5tYWtlWmlwKGZpbGVzLCAqKmt3KQogCi0gICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKCIuIi5qb2luKG1vZHVsZXMpLCBnbG9iYWxzKCksIGxvY2FscygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl9fZHVtbXlfXyJdKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgVEVNUF9aSVApCiAKLSAgICAgICAgICAgIGNhbGwgPSBrdy5nZXQoJ2NhbGwnKQotICAgICAgICAgICAgaWYgY2FsbCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBjYWxsKG1vZCkKKyAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoIi4iLmpvaW4obW9kdWxlcykpCiAKLSAgICAgICAgICAgIGlmIGV4cGVjdGVkX2V4dDoKLSAgICAgICAgICAgICAgICBmaWxlID0gbW9kLmdldF9maWxlKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUsIG9zLnBhdGguam9pbihURU1QX1pJUCwKKyAgICAgICAgY2FsbCA9IGt3LmdldCgnY2FsbCcpCisgICAgICAgIGlmIGNhbGwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjYWxsKG1vZCkKKworICAgICAgICBpZiBleHBlY3RlZF9leHQ6CisgICAgICAgICAgICBmaWxlID0gbW9kLmdldF9maWxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZSwgb3MucGF0aC5qb2luKFRFTVBfWklQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZXMpICsgZXhwZWN0ZWRfZXh0KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgei5jbG9zZSgpCi0gICAgICAgICAgICBvcy5yZW1vdmUoVEVNUF9aSVApCiAKICAgICBkZWYgdGVzdEFGYWtlWmxpYihzZWxmKToKICAgICAgICAgIwpAQCAtMjAxLDcgKzIyMiw5IEBACiAgICAgICAgICAgICAgICAgIHBhY2tkaXIgKyBURVNUTU9EICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpfQogICAgICAgICBzZWxmLmRvVGVzdChweWNfZXh0LCBmaWxlcywgVEVTVFBBQ0ssIFRFU1RNT0QpCiAKLSAgICBkZWYgdGVzdERlZXBQYWNrYWdlKHNlbGYpOgorICAgIGRlZiB0ZXN0U3ViUGFja2FnZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc3VicGFja2FnZXMgZnVuY3Rpb24gd2hlbiBsb2FkZWQgZnJvbSB6aXAKKyAgICAgICAgIyBhcmNoaXZlcy4KICAgICAgICAgcGFja2RpciA9IFRFU1RQQUNLICsgb3Muc2VwCiAgICAgICAgIHBhY2tkaXIyID0gcGFja2RpciArIFRFU1RQQUNLMiArIG9zLnNlcAogICAgICAgICBmaWxlcyA9IHtwYWNrZGlyICsgIl9faW5pdF9fIiArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKSwKQEAgLTIwOSw2ICsyMzIsMTY3IEBACiAgICAgICAgICAgICAgICAgIHBhY2tkaXIyICsgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKX0KICAgICAgICAgc2VsZi5kb1Rlc3QocHljX2V4dCwgZmlsZXMsIFRFU1RQQUNLLCBURVNUUEFDSzIsIFRFU1RNT0QpCiAKKyAgICBkZWYgdGVzdFN1Yk5hbWVzcGFjZVBhY2thZ2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGltcGxpY2l0IG5hbWVzcGFjZSBzdWJwYWNrYWdlcyBmdW5jdGlvbgorICAgICAgICAjIHdoZW4gbG9hZGVkIGZyb20gemlwIGFyY2hpdmVzLgorICAgICAgICBwYWNrZGlyID0gVEVTVFBBQ0sgKyBvcy5zZXAKKyAgICAgICAgcGFja2RpcjIgPSBwYWNrZGlyICsgVEVTVFBBQ0syICsgb3Muc2VwCisgICAgICAgICMgVGhlIGZpcnN0IHR3byBmaWxlcyBhcmUganVzdCBkaXJlY3RvcnkgZW50cmllcyAoc28gaGF2ZSBubyBkYXRhKS4KKyAgICAgICAgZmlsZXMgPSB7cGFja2RpcjogKE5PVywgIiIpLAorICAgICAgICAgICAgICAgICBwYWNrZGlyMjogKE5PVywgIiIpLAorICAgICAgICAgICAgICAgICBwYWNrZGlyMiArIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5Yyl9CisgICAgICAgIHNlbGYuZG9UZXN0KHB5Y19leHQsIGZpbGVzLCBURVNUUEFDSywgVEVTVFBBQ0syLCBURVNUTU9EKQorCisgICAgZGVmIHRlc3RNaXhlZE5hbWVzcGFjZVBhY2thZ2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBsaWNpdCBuYW1lc3BhY2UgcGFja2FnZXMgc3ByZWFkIGJldHdlZW4gYQorICAgICAgICAjIHJlYWwgZmlsZXN5c3RlbSBhbmQgYSB6aXAgYXJjaGl2ZS4KKyAgICAgICAgcGFja2RpciA9IFRFU1RQQUNLICsgb3Muc2VwCisgICAgICAgIHBhY2tkaXIyID0gcGFja2RpciArIFRFU1RQQUNLMiArIG9zLnNlcAorICAgICAgICBwYWNrZGlyMyA9IHBhY2tkaXIyICsgVEVTVFBBQ0sgKyAnMycgKyBvcy5zZXAKKyAgICAgICAgZmlsZXMxID0ge3BhY2tkaXI6IChOT1csICIiKSwKKyAgICAgICAgICAgICAgICAgIHBhY2tkaXIgKyBURVNUTU9EICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpLAorICAgICAgICAgICAgICAgICAgcGFja2RpcjI6IChOT1csICIiKSwKKyAgICAgICAgICAgICAgICAgIHBhY2tkaXIzOiAoTk9XLCAiIiksCisgICAgICAgICAgICAgICAgICBwYWNrZGlyMyArIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgICBwYWNrZGlyMiArIFRFU1RNT0QgKyAnMycgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgICBwYWNrZGlyMiArIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5Yyl9CisgICAgICAgIGZpbGVzMiA9IHtwYWNrZGlyOiAoTk9XLCAiIiksCisgICAgICAgICAgICAgICAgICBwYWNrZGlyICsgVEVTVE1PRCArICcyJyArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKSwKKyAgICAgICAgICAgICAgICAgIHBhY2tkaXIyOiAoTk9XLCAiIiksCisgICAgICAgICAgICAgICAgICBwYWNrZGlyMiArIFRFU1RNT0QgKyAnMicgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgICBwYWNrZGlyMiArIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5Yyl9CisKKyAgICAgICAgemlwMSA9IG9zLnBhdGguYWJzcGF0aCgicGF0aDEuemlwIikKKyAgICAgICAgc2VsZi5tYWtlWmlwKGZpbGVzMSwgemlwMSkKKworICAgICAgICB6aXAyID0gVEVNUF9ESVIKKyAgICAgICAgc2VsZi5tYWtlVHJlZShmaWxlczIsIHppcDIpCisKKyAgICAgICAgIyB6aXAyIHNob3VsZCBvdmVycmlkZSB6aXAxLgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgemlwMSkKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHppcDIpCisKKyAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoVEVTVFBBQ0spCisKKyAgICAgICAgIyBpZiBURVNUUEFDSyBpcyBmdW5jdGlvbmluZyBhcyBhIG5hbWVzcGFjZSBwa2cgdGhlbgorICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSB0d28gZW50cmllcyBpbiB0aGUgX19wYXRoX18uCisgICAgICAgICMgRmlyc3Qgc2hvdWxkIGJlIHBhdGgyIGFuZCBzZWNvbmQgcGF0aDEuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKG1vZC5fX3BhdGhfXykpCisgICAgICAgIHAxLCBwMiA9IG1vZC5fX3BhdGhfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoVEVNUF9ESVIpLCBwMS5zcGxpdChvcy5zZXApWy0yXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicGF0aDEuemlwIiwgcDIuc3BsaXQob3Muc2VwKVstMl0pCisKKyAgICAgICAgIyBwYWNrZGlyMyBzaG91bGQgaW1wb3J0IGFzIGEgbmFtZXNwYWNlIHBhY2thZ2UuCisgICAgICAgICMgSXRzIF9fcGF0aF9fIGlzIGFuIGl0ZXJhYmxlIG9mIDEgZWxlbWVudCBmcm9tIHppcDEuCisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHBhY2tkaXIzLnJlcGxhY2Uob3Muc2VwLCAnLicpWzotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKG1vZC5fX3BhdGhfXykpCisgICAgICAgIG1wYXRoID0gbGlzdChtb2QuX19wYXRoX18pWzBdLnNwbGl0KCdwYXRoMS56aXAnICsgb3Muc2VwKVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2tkaXIzWzotMV0sIG1wYXRoKQorCisgICAgICAgICMgVEVTVFBBQ0svVEVTVE1PRCBvbmx5IGV4aXN0cyBpbiBwYXRoMS4KKyAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJy4nLmpvaW4oKFRFU1RQQUNLLCBURVNUTU9EKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInBhdGgxLnppcCIsIG1vZC5fX2ZpbGVfXy5zcGxpdChvcy5zZXApWy0zXSkKKworICAgICAgICAjIEFuZCBURVNUUEFDSy8oVEVTVE1PRCArICcyJykgb25seSBleGlzdHMgaW4gcGF0aDIuCisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuJy5qb2luKChURVNUUEFDSywgVEVTVE1PRCArICcyJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoVEVNUF9ESVIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5fX2ZpbGVfXy5zcGxpdChvcy5zZXApWy0zXSkKKworICAgICAgICAjIE9uZSBsZXZlbCBkZWVwZXIuLi4KKyAgICAgICAgc3VicGtnID0gJy4nLmpvaW4oKFRFU1RQQUNLLCBURVNUUEFDSzIpKQorICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShzdWJwa2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKG1vZC5fX3BhdGhfXykpCisgICAgICAgIHAxLCBwMiA9IG1vZC5fX3BhdGhfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoVEVNUF9ESVIpLCBwMS5zcGxpdChvcy5zZXApWy0zXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicGF0aDEuemlwIiwgcDIuc3BsaXQob3Muc2VwKVstM10pCisKKyAgICAgICAgIyBzdWJwa2cuVEVTVE1PRCBleGlzdHMgaW4gYm90aCB6aXBzIHNob3VsZCBsb2FkIGZyb20gemlwMi4KKyAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJy4nLmpvaW4oKHN1YnBrZywgVEVTVE1PRCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoVEVNUF9ESVIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5fX2ZpbGVfXy5zcGxpdChvcy5zZXApWy00XSkKKworICAgICAgICAjIHN1YnBrZy5URVNUTU9EICsgJzInIG9ubHkgZXhpc3RzIGluIHppcDIuCisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuJy5qb2luKChzdWJwa2csIFRFU1RNT0QgKyAnMicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKFRFTVBfRElSKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuX19maWxlX18uc3BsaXQob3Muc2VwKVstNF0pCisKKyAgICAgICAgIyBGaW5hbGx5IHN1YnBrZy5URVNUTU9EICsgJzMnIG9ubHkgZXhpc3RzIGluIHppcDEuCisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuJy5qb2luKChzdWJwa2csIFRFU1RNT0QgKyAnMycpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgncGF0aDEuemlwJywgbW9kLl9fZmlsZV9fLnNwbGl0KG9zLnNlcClbLTRdKQorCisgICAgZGVmIHRlc3ROYW1lc3BhY2VQYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wbGljaXQgbmFtZXNwYWNlIHBhY2thZ2VzIHNwcmVhZCBiZXR3ZWVuIG11bHRpcGxlIHppcAorICAgICAgICAjIGFyY2hpdmVzLgorICAgICAgICBwYWNrZGlyID0gVEVTVFBBQ0sgKyBvcy5zZXAKKyAgICAgICAgcGFja2RpcjIgPSBwYWNrZGlyICsgVEVTVFBBQ0syICsgb3Muc2VwCisgICAgICAgIHBhY2tkaXIzID0gcGFja2RpcjIgKyBURVNUUEFDSyArICczJyArIG9zLnNlcAorICAgICAgICBmaWxlczEgPSB7cGFja2RpcjogKE5PVywgIiIpLAorICAgICAgICAgICAgICAgICAgcGFja2RpciArIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgICBwYWNrZGlyMjogKE5PVywgIiIpLAorICAgICAgICAgICAgICAgICAgcGFja2RpcjM6IChOT1csICIiKSwKKyAgICAgICAgICAgICAgICAgIHBhY2tkaXIzICsgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKSwKKyAgICAgICAgICAgICAgICAgIHBhY2tkaXIyICsgVEVTVE1PRCArICczJyArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKSwKKyAgICAgICAgICAgICAgICAgIHBhY2tkaXIyICsgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKX0KKyAgICAgICAgemlwMSA9IG9zLnBhdGguYWJzcGF0aCgicGF0aDEuemlwIikKKyAgICAgICAgc2VsZi5tYWtlWmlwKGZpbGVzMSwgemlwMSkKKworICAgICAgICBmaWxlczIgPSB7cGFja2RpcjogKE5PVywgIiIpLAorICAgICAgICAgICAgICAgICAgcGFja2RpciArIFRFU1RNT0QgKyAnMicgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgICBwYWNrZGlyMjogKE5PVywgIiIpLAorICAgICAgICAgICAgICAgICAgcGFja2RpcjIgKyBURVNUTU9EICsgJzInICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpLAorICAgICAgICAgICAgICAgICAgcGFja2RpcjIgKyBURVNUTU9EICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpfQorICAgICAgICB6aXAyID0gb3MucGF0aC5hYnNwYXRoKCJwYXRoMi56aXAiKQorICAgICAgICBzZWxmLm1ha2VaaXAoZmlsZXMyLCB6aXAyKQorCisgICAgICAgICMgemlwMiBzaG91bGQgb3ZlcnJpZGUgemlwMS4KKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHppcDEpCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCB6aXAyKQorCisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKFRFU1RQQUNLKQorCisgICAgICAgICMgaWYgVEVTVFBBQ0sgaXMgZnVuY3Rpb25pbmcgYXMgYSBuYW1lc3BhY2UgcGtnIHRoZW4KKyAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgdHdvIGVudHJpZXMgaW4gdGhlIF9fcGF0aF9fLgorICAgICAgICAjIEZpcnN0IHNob3VsZCBiZSBwYXRoMiBhbmQgc2Vjb25kIHBhdGgxLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihtb2QuX19wYXRoX18pKQorICAgICAgICBwMSwgcDIgPSBtb2QuX19wYXRoX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicGF0aDIuemlwIiwgcDEuc3BsaXQob3Muc2VwKVstMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInBhdGgxLnppcCIsIHAyLnNwbGl0KG9zLnNlcClbLTJdKQorCisgICAgICAgICMgcGFja2RpcjMgc2hvdWxkIGltcG9ydCBhcyBhIG5hbWVzcGFjZSBwYWNrYWdlLgorICAgICAgICAjIFR0cyBfX3BhdGhfXyBpcyBhbiBpdGVyYWJsZSBvZiAxIGVsZW1lbnQgZnJvbSB6aXAxLgorICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShwYWNrZGlyMy5yZXBsYWNlKG9zLnNlcCwgJy4nKVs6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihtb2QuX19wYXRoX18pKQorICAgICAgICBtcGF0aCA9IGxpc3QobW9kLl9fcGF0aF9fKVswXS5zcGxpdCgncGF0aDEuemlwJyArIG9zLnNlcClbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrZGlyM1s6LTFdLCBtcGF0aCkKKworICAgICAgICAjIFRFU1RQQUNLL1RFU1RNT0Qgb25seSBleGlzdHMgaW4gcGF0aDEuCisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuJy5qb2luKChURVNUUEFDSywgVEVTVE1PRCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJwYXRoMS56aXAiLCBtb2QuX19maWxlX18uc3BsaXQob3Muc2VwKVstM10pCisKKyAgICAgICAgIyBBbmQgVEVTVFBBQ0svKFRFU1RNT0QgKyAnMicpIG9ubHkgZXhpc3RzIGluIHBhdGgyLgorICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLicuam9pbigoVEVTVFBBQ0ssIFRFU1RNT0QgKyAnMicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgicGF0aDIuemlwIiwgbW9kLl9fZmlsZV9fLnNwbGl0KG9zLnNlcClbLTNdKQorCisgICAgICAgICMgT25lIGxldmVsIGRlZXBlci4uLgorICAgICAgICBzdWJwa2cgPSAnLicuam9pbigoVEVTVFBBQ0ssIFRFU1RQQUNLMikpCisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHN1YnBrZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBsZW4obW9kLl9fcGF0aF9fKSkKKyAgICAgICAgcDEsIHAyID0gbW9kLl9fcGF0aF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInBhdGgyLnppcCIsIHAxLnNwbGl0KG9zLnNlcClbLTNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJwYXRoMS56aXAiLCBwMi5zcGxpdChvcy5zZXApWy0zXSkKKworICAgICAgICAjIHN1YnBrZy5URVNUTU9EIGV4aXN0cyBpbiBib3RoIHppcHMgc2hvdWxkIGxvYWQgZnJvbSB6aXAyLgorICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLicuam9pbigoc3VicGtnLCBURVNUTU9EKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BhdGgyLnppcCcsIG1vZC5fX2ZpbGVfXy5zcGxpdChvcy5zZXApWy00XSkKKworICAgICAgICAjIHN1YnBrZy5URVNUTU9EICsgJzInIG9ubHkgZXhpc3RzIGluIHppcDIuCisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuJy5qb2luKChzdWJwa2csIFRFU1RNT0QgKyAnMicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgncGF0aDIuemlwJywgbW9kLl9fZmlsZV9fLnNwbGl0KG9zLnNlcClbLTRdKQorCisgICAgICAgICMgRmluYWxseSBzdWJwa2cuVEVTVE1PRCArICczJyBvbmx5IGV4aXN0cyBpbiB6aXAxLgorICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLicuam9pbigoc3VicGtnLCBURVNUTU9EICsgJzMnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BhdGgxLnppcCcsIG1vZC5fX2ZpbGVfXy5zcGxpdChvcy5zZXApWy00XSkKKwogICAgIGRlZiB0ZXN0WmlwSW1wb3J0ZXJNZXRob2RzKHNlbGYpOgogICAgICAgICBwYWNrZGlyID0gVEVTVFBBQ0sgKyBvcy5zZXAKICAgICAgICAgcGFja2RpcjIgPSBwYWNrZGlyICsgVEVTVFBBQ0syICsgb3Muc2VwCkBAIC0yMzEsNyArNDE1LDcgQEAKICAgICAgICAgICAgIG1vZCA9IHppLmxvYWRfbW9kdWxlKFRFU1RQQUNLKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUoVEVTVFBBQ0spLCBtb2QuX19maWxlX18pCiAKLSAgICAgICAgICAgIGV4aXN0aW5nX3BhY2tfcGF0aCA9IF9faW1wb3J0X18oVEVTVFBBQ0spLl9fcGF0aF9fWzBdCisgICAgICAgICAgICBleGlzdGluZ19wYWNrX3BhdGggPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShURVNUUEFDSykuX19wYXRoX19bMF0KICAgICAgICAgICAgIGV4cGVjdGVkX3BhdGhfcGF0aCA9IG9zLnBhdGguam9pbihURU1QX1pJUCwgVEVTVFBBQ0spCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXN0aW5nX3BhY2tfcGF0aCwgZXhwZWN0ZWRfcGF0aF9wYXRoKQogCkBAIC0yNDEsOCArNDI1LDggQEAKIAogICAgICAgICAgICAgbW9kX3BhdGggPSBwYWNrZGlyMiArIFRFU1RNT0QKICAgICAgICAgICAgIG1vZF9uYW1lID0gbW9kdWxlX3BhdGhfdG9fZG90dGVkX25hbWUobW9kX3BhdGgpCi0gICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQotICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kX25hbWVdCisgICAgICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2RfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2RfbmFtZSBpbiBzeXMubW9kdWxlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShURVNUUEFDSyksIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9zb3VyY2UobW9kX3BhdGgpLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUobW9kX3BhdGgpLCBtb2QuX19maWxlX18pCkBAIC0yODksMTMgKzQ3MywxMyBAQAogCiAgICAgICAgICAgICBtb2RfcGF0aCA9IFRFU1RQQUNLMiArIG9zLnNlcCArIFRFU1RNT0QKICAgICAgICAgICAgIG1vZF9uYW1lID0gbW9kdWxlX3BhdGhfdG9fZG90dGVkX25hbWUobW9kX3BhdGgpCi0gICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQotICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kX25hbWVdCisgICAgICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2RfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2RfbmFtZSBpbiBzeXMubW9kdWxlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShURVNUUEFDSzIpLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfc291cmNlKG1vZF9wYXRoKSwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X2ZpbGVuYW1lKG1vZF9wYXRoKSwgbW9kLl9fZmlsZV9fKQogICAgICAgICAgICAgIyBUbyBwYXNzIGluIHRoZSBtb2R1bGUgbmFtZSBpbnN0ZWFkIG9mIHRoZSBwYXRoLCB3ZSBtdXN0IHVzZSB0aGUKLSAgICAgICAgICAgICMgcmlnaHQgaW1wb3J0ZXIKKyAgICAgICAgICAgICMgcmlnaHQgaW1wb3J0ZXIuCiAgICAgICAgICAgICBsb2FkZXIgPSBtb2QuX19sb2FkZXJfXwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0X3NvdXJjZShtb2RfbmFtZSksIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRfZmlsZW5hbWUobW9kX25hbWUpLCBtb2QuX19maWxlX18pCkBAIC00MTYsNiArNjAwLDE5IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCiAKKyAgICBkZWYgdGVzdEJ5dGVzUGF0aChzZWxmKToKKyAgICAgICAgZmlsZW5hbWUgPSBzdXBwb3J0LlRFU1RGTiArICIuemlwIgorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZpbGVuYW1lKQorICAgICAgICB3aXRoIFppcEZpbGUoZmlsZW5hbWUsICJ3IikgYXMgejoKKyAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhURVNUTU9EICsgIi5weSIsIHRpbWUubG9jYWx0aW1lKE5PVykpCisgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICAgICAgei53cml0ZXN0cih6aW5mbywgdGVzdF9zcmMpCisKKyAgICAgICAgemlwaW1wb3J0LnppcGltcG9ydGVyKGZpbGVuYW1lKQorICAgICAgICB6aXBpbXBvcnQuemlwaW1wb3J0ZXIob3MuZnNlbmNvZGUoZmlsZW5hbWUpKQorICAgICAgICB6aXBpbXBvcnQuemlwaW1wb3J0ZXIoYnl0ZWFycmF5KG9zLmZzZW5jb2RlKGZpbGVuYW1lKSkpCisgICAgICAgIHppcGltcG9ydC56aXBpbXBvcnRlcihtZW1vcnl2aWV3KG9zLmZzZW5jb2RlKGZpbGVuYW1lKSkpCisKIAogQHN1cHBvcnQucmVxdWlyZXNfemxpYgogY2xhc3MgQ29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKToKQEAgLTQzNiw2ICs2MzMsOCBAQAogICAgIGRlZiB0ZXN0QmFkQXJncyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6aXBpbXBvcnQuemlwaW1wb3J0ZXIsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwaW1wb3J0LnppcGltcG9ydGVyLCBURVNUTU9ELCBrd2Q9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6aXBpbXBvcnQuemlwaW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qob3MuZnNlbmNvZGUoVEVTVE1PRCkpKQogCiAgICAgZGVmIHRlc3RGaWxlbmFtZVRvb0xvbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0WmlwRmFpbHVyZSgnQScgKiAzMzAwMCkKQEAgLTQ1MCw3ICs2NDksOSBAQAogICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVE1PRCwgb3MuT19DUkVBVCwgMDAwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0WmlwRmFpbHVyZShURVNUTU9EKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGltcG9ydC5aaXBJbXBvcnRFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgemlwaW1wb3J0LnppcGltcG9ydGVyKFRFU1RNT0QpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIElmIHdlIGxlYXZlICJ0aGUgcmVhZC1vbmx5IGJpdCIgc2V0IG9uIFdpbmRvd3MsIG5vdGhpbmcgY2FuCiAgICAgICAgICAgICAjIGRlbGV0ZSBURVNUTU9ELCBhbmQgbGF0ZXIgdGVzdHMgc3VmZmVyIGJvZ3VzIGZhaWx1cmVzLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKaW5kZXggNjZjMzU1Ny4uNTkxMzYyMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CkBAIC0xNCw4ICsxNCw4IEBACiBpbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgcGRiCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAoc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwgYXNzZXJ0X3B5dGhvbl9vaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kaXIsIG1ha2Vfc2NyaXB0LCBtYWtlX3ppcF9zY3JpcHQpCitmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCAoc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwgYXNzZXJ0X3B5dGhvbl9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3NjcmlwdCwgbWFrZV96aXBfc2NyaXB0KQogCiB2ZXJib3NlID0gdGVzdC5zdXBwb3J0LnZlcmJvc2UKIApAQCAtMzksNyArMzksNyBAQAogICAgICMgVXNlIHRoZSBvYmplY3QncyBmdWxseSBxdWFsaWZpZWQgbmFtZSBpZiBpdCBoYXMgb25lCiAgICAgIyBPdGhlcndpc2UsIHVzZSB0aGUgbW9kdWxlJ3MgbmFtZQogICAgIHRyeToKLSAgICAgICAgbmFtZSA9ICIlcy4lcyIgJSAob2JqLl9fbW9kdWxlX18sIG9iai5fX25hbWVfXykKKyAgICAgICAgbmFtZSA9ICIlcy4lcyIgJSAob2JqLl9fbW9kdWxlX18sIG9iai5fX3F1YWxuYW1lX18pCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCiAgICAgZm9yIGV4YW1wbGUgaW4gZmluZGVyLmZpbmQob2JqLCBuYW1lLCBtb2R1bGUpOgpAQCAtNzgsNyArNzgsNyBAQAogCiAgICAgZGVmIHRlc3RfaW5zcGVjdF9nZXRzb3VyY2VfaXNzdWU0MjIzKHNlbGYpOgogICAgICAgICB0ZXN0X3NyYyA9ICJkZWYgZm9vKCk6IHBhc3NcbiIKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfZGlyKCkgYXMgZDoKICAgICAgICAgICAgIGluaXRfbmFtZSA9IG1ha2Vfc2NyaXB0KGQsICdfX2luaXRfXycsIHRlc3Rfc3JjKQogICAgICAgICAgICAgbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4oJ3ppcF9wa2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShpbml0X25hbWUpKQpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgICAgICAgICBtb2RfbmFtZSA9IG1vZF9uYW1lLnJlcGxhY2UoInNhbXBsZV8iLCAic2FtcGxlX3ppcHBlZF8iKQogICAgICAgICAgICAgc2FtcGxlX3NvdXJjZXNbbW9kX25hbWVdID0gc3JjCiAKLSAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfZGlyKCkgYXMgZDoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ3Rlc3RfemlwcGVkX2RvY3Rlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3NyYykKICAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAndGVzdF96aXAnLApAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRvY3Rlc3QudGVzdG1vZCgpCiAgICAgICAgICAgICAgICAgICAgICIiIikKICAgICAgICAgcGF0dGVybiA9ICdGaWxlICIlcyIsIGxpbmUgMiwgaW4gJXMnCi0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2RpcigpIGFzIGQ6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IG1ha2Vfc2NyaXB0KGQsICdzY3JpcHQnLCB0ZXN0X3NyYykKICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBleHBlY3RlZCA9IHBhdHRlcm4gJSAoc2NyaXB0X25hbWUsICJfX21haW5fXy5UZXN0IikKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgICAgICAgICAgICBpbXBvcnQgcGRiCiAgICAgICAgICAgICAgICAgICAgIHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkucnVuY2FsbChmKQogICAgICAgICAgICAgICAgICAgICAiIiIpCi0gICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2RpcigpIGFzIGQ6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IG1ha2Vfc2NyaXB0KGQsICdzY3JpcHQnLCB0ZXN0X3NyYykKICAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKGInbFxuJykKQEAgLTIzOCw5ICsyMzgsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoWmlwU3VwcG9ydFRlc3RzKQorZGVmIHRlYXJEb3duTW9kdWxlKCk6CiAgICAgdGVzdC5zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3psaWIucHkgYi9MaWIvdGVzdC90ZXN0X3psaWIucHkKaW5kZXggZTE1NzVjNC4uNmZlYTg5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemxpYi5weQpAQCAtNDcsMTYgKzQ3LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5hZGxlcjMyKGIiIiwgMSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5hZGxlcjMyKGIiIiwgNDMyKSwgNDMyKQogCi0gICAgZGVmIGFzc2VydEVxdWFsMzIoc2VsZiwgc2VlbiwgZXhwZWN0ZWQpOgotICAgICAgICAjIDMyLWJpdCB2YWx1ZXMgbWFza2VkIC0tIGNoZWNrc3VtcyBvbiAzMi0gdnMgNjQtIGJpdCBtYWNoaW5lcwotICAgICAgICAjIFRoaXMgaXMgaW1wb3J0YW50IGlmIGJpdCAzMSAoMHgwODAwMDAwMEwpIGlzIHNldC4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWVuICYgMHgwRkZGRkZGRkYsIGV4cGVjdGVkICYgMHgwRkZGRkZGRkYpCi0KICAgICBkZWYgdGVzdF9wZW5ndWlucyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbDMyKHpsaWIuY3JjMzIoYiJwZW5ndWluIiwgMCksIDB4MGU1YzFhMTIwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsMzIoemxpYi5jcmMzMihiInBlbmd1aW4iLCAxKSwgMHg0M2I2YWE5NCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbDMyKHpsaWIuYWRsZXIzMihiInBlbmd1aW4iLCAwKSwgMHgwYmNmMDJmNikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbDMyKHpsaWIuYWRsZXIzMihiInBlbmd1aW4iLCAxKSwgMHgwYmQ2MDJmNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKGIicGVuZ3VpbiIsIDApLCAweDBlNWMxYTEyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKGIicGVuZ3VpbiIsIDEpLCAweDQzYjZhYTk0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuYWRsZXIzMihiInBlbmd1aW4iLCAwKSwgMHgwYmNmMDJmNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoYiJwZW5ndWluIiwgMSksIDB4MGJkNjAyZjcpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKGIicGVuZ3VpbiIpLCB6bGliLmNyYzMyKGIicGVuZ3VpbiIsIDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuYWRsZXIzMihiInBlbmd1aW4iKSx6bGliLmFkbGVyMzIoYiJwZW5ndWluIiwxKSkKQEAgLTEyMiwxMSArMTE3LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB6bGliLmRlY29tcHJlc3NvYmooKS5mbHVzaCwgLTEpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE92ZXJmbG93RXJyb3IsICdpbnQgdG9vIGxhcmdlJyk6CisgICAgICAgICAgICB6bGliLmRlY29tcHJlc3MoYicnLCAxNSwgc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoT3ZlcmZsb3dFcnJvciwgJ2ludCB0b28gbGFyZ2UnKToKKyAgICAgICAgICAgIHpsaWIuZGVjb21wcmVzc29iaigpLmRlY29tcHJlc3MoYicnLCBzeXMubWF4c2l6ZSArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChPdmVyZmxvd0Vycm9yLCAnaW50IHRvbyBsYXJnZScpOgorICAgICAgICAgICAgemxpYi5kZWNvbXByZXNzb2JqKCkuZmx1c2goc3lzLm1heHNpemUgKyAxKQorCiAKIGNsYXNzIEJhc2VDb21wcmVzc1Rlc3RDYXNlKG9iamVjdCk6CiAgICAgZGVmIGNoZWNrX2JpZ19jb21wcmVzc19idWZmZXIoc2VsZiwgc2l6ZSwgY29tcHJlc3NfZnVuYyk6CiAgICAgICAgIF8xTSA9IDEwMjQgKiAxMDI0Ci0gICAgICAgIGZtdCA9ICIlJTAlZHgiICUgKDIgKiBfMU0pCiAgICAgICAgICMgR2VuZXJhdGUgMTBNQiB3b3J0aCBvZiByYW5kb20sIGFuZCBleHBhbmQgaXQgYnkgcmVwZWF0aW5nIGl0LgogICAgICAgICAjIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgemxpYidzIG1lbW9yeSBpcyBub3QgYmlnIGVub3VnaCB0byBleHBsb2l0CiAgICAgICAgICMgc3VjaCBzcHJlYWQgb3V0IHJlZHVuZGFuY3kuCkBAIC0xNzAsNyArMTczLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKG9iKSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X2luY29tcGxldGVfc3RyZWFtKHNlbGYpOgotICAgICAgICAjIEFuIHVzZWZ1bCBlcnJvciBtZXNzYWdlIGlzIGdpdmVuCisgICAgICAgICMgQSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBpcyBnaXZlbgogICAgICAgICB4ID0gemxpYi5jb21wcmVzcyhIQU1MRVRfU0NFTkUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoemxpYi5lcnJvciwKICAgICAgICAgICAgICJFcnJvciAtNSB3aGlsZSBkZWNvbXByZXNzaW5nIGRhdGE6IGluY29tcGxldGUgb3IgdHJ1bmNhdGVkIHN0cmVhbSIsCkBAIC0xODcsMTQgKzE5MCwyNyBAQAogICAgIGRlZiB0ZXN0X2JpZ19kZWNvbXByZXNzX2J1ZmZlcihzZWxmLCBzaXplKToKICAgICAgICAgc2VsZi5jaGVja19iaWdfZGVjb21wcmVzc19idWZmZXIoc2l6ZSwgemxpYi5kZWNvbXByZXNzKQogCi0gICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyAxMDAsIG1lbXVzZT0xLCBkcnlfcnVuPUZhbHNlKQotICAgIGRlZiB0ZXN0X2xlbmd0aF9vdmVyZmxvdyhzZWxmLCBzaXplKToKKyAgICBAYmlnbWVtdGVzdChzaXplPV80RywgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfbGFyZ2VfYnVmc2l6ZShzZWxmLCBzaXplKToKKyAgICAgICAgIyBUZXN0IGRlY29tcHJlc3MoYnVmc2l6ZSkgcGFyYW1ldGVyIGdyZWF0ZXIgdGhhbiB0aGUgaW50ZXJuYWwgbGltaXQKKyAgICAgICAgZGF0YSA9IEhBTUxFVF9TQ0VORSAqIDEwCisgICAgICAgIGNvbXByZXNzZWQgPSB6bGliLmNvbXByZXNzKGRhdGEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKGNvbXByZXNzZWQsIDE1LCBzaXplKSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9idWZzaXplKHNlbGYpOgorICAgICAgICBkYXRhID0gSEFNTEVUX1NDRU5FICogMTAKKyAgICAgICAgY29tcHJlc3NlZCA9IHpsaWIuY29tcHJlc3MoZGF0YSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoY29tcHJlc3NlZCwgMTUsIEN1c3RvbUludCgpKSwgZGF0YSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5tYXhzaXplID4gMioqMzIsICdyZXF1aXJlcyA2NGJpdCBwbGF0Zm9ybScpCisgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyAxMDAsIG1lbXVzZT00KQorICAgIGRlZiB0ZXN0XzY0Yml0X2NvbXByZXNzKHNlbGYsIHNpemUpOgogICAgICAgICBkYXRhID0gYid4JyAqIHNpemUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgemxpYi5jb21wcmVzcywgZGF0YSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHpsaWIuZGVjb21wcmVzcywgZGF0YSkKKyAgICAgICAgICAgIGNvbXAgPSB6bGliLmNvbXByZXNzKGRhdGEsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyhjb21wKSwgZGF0YSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgICAgICBjb21wID0gZGF0YSA9IE5vbmUKIAogCiBjbGFzcyBDb21wcmVzc09iamVjdFRlc3RDYXNlKEJhc2VDb21wcmVzc1Rlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNjQsNiArMzgwLDIxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRjby5kZWNvbXByZXNzLCBiIiIsIC0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgZGNvLnVuY29uc3VtZWRfdGFpbCkKIAorICAgIGRlZiB0ZXN0X21heGxlbl9sYXJnZShzZWxmKToKKyAgICAgICAgIyBTaXplcyB1cCB0byBzeXMubWF4c2l6ZSBzaG91bGQgYmUgYWNjZXB0ZWQsIGFsdGhvdWdoIHpsaWIgaXMKKyAgICAgICAgIyBpbnRlcm5hbGx5IGxpbWl0ZWQgdG8gZXhwcmVzc2luZyBzaXplcyB3aXRoIHVuc2lnbmVkIGludAorICAgICAgICBkYXRhID0gSEFNTEVUX1NDRU5FICogMTAKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihkYXRhKSwgemxpYi5ERUZfQlVGX1NJWkUpCisgICAgICAgIGNvbXByZXNzZWQgPSB6bGliLmNvbXByZXNzKGRhdGEsIDEpCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLmRlY29tcHJlc3MoY29tcHJlc3NlZCwgc3lzLm1heHNpemUpLCBkYXRhKQorCisgICAgZGVmIHRlc3RfbWF4bGVuX2N1c3RvbShzZWxmKToKKyAgICAgICAgZGF0YSA9IEhBTUxFVF9TQ0VORSAqIDEwCisgICAgICAgIGNvbXByZXNzZWQgPSB6bGliLmNvbXByZXNzKGRhdGEsIDEpCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLmRlY29tcHJlc3MoY29tcHJlc3NlZCwgQ3VzdG9tSW50KCkpLCBkYXRhWzoxMDBdKQorCiAgICAgZGVmIHRlc3RfY2xlYXJfdW5jb25zdW1lZF90YWlsKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxMjA1MDogY2FsbGluZyBkZWNvbXByZXNzKCkgd2l0aG91dCBwcm92aWRpbmcgbWF4X2xlbmd0aAogICAgICAgICAjIHNob3VsZCBjbGVhciB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS4KQEAgLTUyNSw2ICs1NTYsMTUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby51bmNvbnN1bWVkX3RhaWwsIGInJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby51bnVzZWRfZGF0YSwgcmVtYWluZGVyKQogCisgICAgIyBpc3N1ZTI3MTY0CisgICAgZGVmIHRlc3RfZGVjb21wcmVzc19yYXdfd2l0aF9kaWN0aW9uYXJ5KHNlbGYpOgorICAgICAgICB6ZGljdCA9IGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaih3Yml0cz0temxpYi5NQVhfV0JJVFMsIHpkaWN0PXpkaWN0KQorICAgICAgICBjb21wID0gY28uY29tcHJlc3MoemRpY3QpICsgY28uZmx1c2goKQorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmood2JpdHM9LXpsaWIuTUFYX1dCSVRTLCB6ZGljdD16ZGljdCkKKyAgICAgICAgdW5jb21wID0gZGNvLmRlY29tcHJlc3MoY29tcCkgKyBkY28uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpkaWN0LCB1bmNvbXApCisKICAgICBkZWYgdGVzdF9mbHVzaF93aXRoX2ZyZWVkX2lucHV0KHNlbGYpOgogICAgICAgICAjIElzc3VlICMxNjQxMTogZGVjb21wcmVzc29yIGFjY2Vzc2VzIGlucHV0IHRvIGxhc3QgZGVjb21wcmVzcygpIGNhbGwKICAgICAgICAgIyBpbiBmbHVzaCgpLCBldmVuIGlmIHRoaXMgb2JqZWN0IGhhcyBiZWVuIGZyZWVkIGluIHRoZSBtZWFud2hpbGUuCkBAIC01MzcsNiArNTc3LDIyIEBACiAgICAgICAgIGRhdGEgPSB6bGliLmNvbXByZXNzKGlucHV0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28uZmx1c2goKSwgaW5wdXQxWzE6XSkKIAorICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9mbHVzaF9sYXJnZV9sZW5ndGgoc2VsZiwgc2l6ZSk6CisgICAgICAgICMgVGVzdCBmbHVzaChsZW5ndGgpIHBhcmFtZXRlciBncmVhdGVyIHRoYW4gaW50ZXJuYWwgbGltaXQgVUlOVF9NQVgKKyAgICAgICAgaW5wdXQgPSBIQU1MRVRfU0NFTkUgKiAxMAorICAgICAgICBkYXRhID0gemxpYi5jb21wcmVzcyhpbnB1dCwgMSkKKyAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgZGNvLmRlY29tcHJlc3MoZGF0YSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28uZmx1c2goc2l6ZSksIGlucHV0WzE6XSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2N1c3RvbV9sZW5ndGgoc2VsZik6CisgICAgICAgIGlucHV0ID0gSEFNTEVUX1NDRU5FICogMTAKKyAgICAgICAgZGF0YSA9IHpsaWIuY29tcHJlc3MoaW5wdXQsIDEpCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIGRjby5kZWNvbXByZXNzKGRhdGEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLmZsdXNoKEN1c3RvbUludCgpKSwgaW5wdXRbMTpdKQorCiAgICAgQHJlcXVpcmVzX0NvbXByZXNzX2NvcHkKICAgICBkZWYgdGVzdF9jb21wcmVzc2NvcHkoc2VsZik6CiAgICAgICAgICMgVGVzdCBjb3B5aW5nIGEgY29tcHJlc3Npb24gb2JqZWN0CkBAIC02MjUsMTYgKzY4MSw5NyBAQAogICAgICAgICBkZWNvbXByZXNzID0gbGFtYmRhIHM6IGQuZGVjb21wcmVzcyhzKSArIGQuZmx1c2goKQogICAgICAgICBzZWxmLmNoZWNrX2JpZ19kZWNvbXByZXNzX2J1ZmZlcihzaXplLCBkZWNvbXByZXNzKQogCi0gICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyAxMDAsIG1lbXVzZT0xLCBkcnlfcnVuPUZhbHNlKQotICAgIGRlZiB0ZXN0X2xlbmd0aF9vdmVyZmxvdyhzZWxmLCBzaXplKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMubWF4c2l6ZSA+IDIqKjMyLCAncmVxdWlyZXMgNjRiaXQgcGxhdGZvcm0nKQorICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHICsgMTAwLCBtZW11c2U9NCkKKyAgICBkZWYgdGVzdF82NGJpdF9jb21wcmVzcyhzZWxmLCBzaXplKToKICAgICAgICAgZGF0YSA9IGIneCcgKiBzaXplCi0gICAgICAgIGMgPSB6bGliLmNvbXByZXNzb2JqKDEpCi0gICAgICAgIGQgPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICBjbyA9IHpsaWIuY29tcHJlc3NvYmooMCkKKyAgICAgICAgZG8gPSB6bGliLmRlY29tcHJlc3NvYmooKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBjLmNvbXByZXNzLCBkYXRhKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZC5kZWNvbXByZXNzLCBkYXRhKQorICAgICAgICAgICAgY29tcCA9IGNvLmNvbXByZXNzKGRhdGEpICsgY28uZmx1c2goKQorICAgICAgICAgICAgdW5jb21wID0gZG8uZGVjb21wcmVzcyhjb21wKSArIGRvLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jb21wLCBkYXRhKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZGF0YSA9IE5vbmUKKyAgICAgICAgICAgIGNvbXAgPSB1bmNvbXAgPSBkYXRhID0gTm9uZQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLm1heHNpemUgPiAyKiozMiwgJ3JlcXVpcmVzIDY0Yml0IHBsYXRmb3JtJykKKyAgICBAYmlnbWVtdGVzdChzaXplPV80RyArIDEwMCwgbWVtdXNlPTMpCisgICAgZGVmIHRlc3RfbGFyZ2VfdW51c2VkX2RhdGEoc2VsZiwgc2l6ZSk6CisgICAgICAgIGRhdGEgPSBiJ2FiY2RlZmdoaWprbG1ub3AnCisgICAgICAgIHVudXNlZCA9IGIneCcgKiBzaXplCisgICAgICAgIGNvbXAgPSB6bGliLmNvbXByZXNzKGRhdGEpICsgdW51c2VkCisgICAgICAgIGRvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdW5jb21wID0gZG8uZGVjb21wcmVzcyhjb21wKSArIGRvLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW51c2VkLCBkby51bnVzZWRfZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jb21wLCBkYXRhKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdW51c2VkID0gY29tcCA9IGRvID0gTm9uZQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLm1heHNpemUgPiAyKiozMiwgJ3JlcXVpcmVzIDY0Yml0IHBsYXRmb3JtJykKKyAgICBAYmlnbWVtdGVzdChzaXplPV80RyArIDEwMCwgbWVtdXNlPTUpCisgICAgZGVmIHRlc3RfbGFyZ2VfdW5jb25zdW1lZF90YWlsKHNlbGYsIHNpemUpOgorICAgICAgICBkYXRhID0gYid4JyAqIHNpemUKKyAgICAgICAgZG8gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21wID0gemxpYi5jb21wcmVzcyhkYXRhLCAwKQorICAgICAgICAgICAgdW5jb21wID0gZG8uZGVjb21wcmVzcyhjb21wLCAxKSArIGRvLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jb21wLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkby51bmNvbnN1bWVkX3RhaWwsIGInJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbXAgPSB1bmNvbXAgPSBkYXRhID0gTm9uZQorCisgICAgZGVmIHRlc3Rfd2JpdHMoc2VsZik6CisgICAgICAgICMgd2JpdHM9MCBvbmx5IHN1cHBvcnRlZCBzaW5jZSB6bGliIHYxLjIuMy41CisgICAgICAgICMgUmVnaXN0ZXIgIjEuMi4zIiBhcyAiMS4yLjMuMCIKKyAgICAgICAgdiA9ICh6bGliLlpMSUJfUlVOVElNRV9WRVJTSU9OICsgIi4wIikuc3BsaXQoIi4iLCA0KQorICAgICAgICBzdXBwb3J0c193Yml0c18wID0gaW50KHZbMF0pID4gMSBvciBpbnQodlswXSkgPT0gMSBcCisgICAgICAgICAgICBhbmQgKGludCh2WzFdKSA+IDIgb3IgaW50KHZbMV0pID09IDIKKyAgICAgICAgICAgIGFuZCAoaW50KHZbMl0pID4gMyBvciBpbnQodlsyXSkgPT0gMyBhbmQgaW50KHZbM10pID49IDUpKQorCisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaihsZXZlbD0xLCB3Yml0cz0xNSkKKyAgICAgICAgemxpYjE1ID0gY28uY29tcHJlc3MoSEFNTEVUX1NDRU5FKSArIGNvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoemxpYjE1LCAxNSksIEhBTUxFVF9TQ0VORSkKKyAgICAgICAgaWYgc3VwcG9ydHNfd2JpdHNfMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKHpsaWIxNSwgMCksIEhBTUxFVF9TQ0VORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoemxpYjE1LCAzMiArIDE1KSwgSEFNTEVUX1NDRU5FKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoemxpYi5lcnJvciwgJ2ludmFsaWQgd2luZG93IHNpemUnKToKKyAgICAgICAgICAgIHpsaWIuZGVjb21wcmVzcyh6bGliMTUsIDE0KQorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmood2JpdHM9MzIgKyAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28uZGVjb21wcmVzcyh6bGliMTUpLCBIQU1MRVRfU0NFTkUpCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaih3Yml0cz0xNCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHpsaWIuZXJyb3IsICdpbnZhbGlkIHdpbmRvdyBzaXplJyk6CisgICAgICAgICAgICBkY28uZGVjb21wcmVzcyh6bGliMTUpCisKKyAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKGxldmVsPTEsIHdiaXRzPTkpCisgICAgICAgIHpsaWI5ID0gY28uY29tcHJlc3MoSEFNTEVUX1NDRU5FKSArIGNvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoemxpYjksIDkpLCBIQU1MRVRfU0NFTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKHpsaWI5LCAxNSksIEhBTUxFVF9TQ0VORSkKKyAgICAgICAgaWYgc3VwcG9ydHNfd2JpdHNfMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKHpsaWI5LCAwKSwgSEFNTEVUX1NDRU5FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyh6bGliOSwgMzIgKyA5KSwgSEFNTEVUX1NDRU5FKQorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmood2JpdHM9MzIgKyA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby5kZWNvbXByZXNzKHpsaWI5KSwgSEFNTEVUX1NDRU5FKQorCisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaihsZXZlbD0xLCB3Yml0cz0tMTUpCisgICAgICAgIGRlZmxhdGUxNSA9IGNvLmNvbXByZXNzKEhBTUxFVF9TQ0VORSkgKyBjby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKGRlZmxhdGUxNSwgLTE1KSwgSEFNTEVUX1NDRU5FKQorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmood2JpdHM9LTE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby5kZWNvbXByZXNzKGRlZmxhdGUxNSksIEhBTUxFVF9TQ0VORSkKKworICAgICAgICBjbyA9IHpsaWIuY29tcHJlc3NvYmoobGV2ZWw9MSwgd2JpdHM9LTkpCisgICAgICAgIGRlZmxhdGU5ID0gY28uY29tcHJlc3MoSEFNTEVUX1NDRU5FKSArIGNvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoZGVmbGF0ZTksIC05KSwgSEFNTEVUX1NDRU5FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyhkZWZsYXRlOSwgLTE1KSwgSEFNTEVUX1NDRU5FKQorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmood2JpdHM9LTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLmRlY29tcHJlc3MoZGVmbGF0ZTkpLCBIQU1MRVRfU0NFTkUpCisKKyAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKGxldmVsPTEsIHdiaXRzPTE2ICsgMTUpCisgICAgICAgIGd6aXAgPSBjby5jb21wcmVzcyhIQU1MRVRfU0NFTkUpICsgY28uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyhnemlwLCAxNiArIDE1KSwgSEFNTEVUX1NDRU5FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyhnemlwLCAzMiArIDE1KSwgSEFNTEVUX1NDRU5FKQorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooMzIgKyAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28uZGVjb21wcmVzcyhnemlwKSwgSEFNTEVUX1NDRU5FKQogCiAKIGRlZiBnZW5ibG9jayhzZWVkLCBsZW5ndGgsIHN0ZXA9MTAyNCwgZ2VuZXJhdG9yPXJhbmRvbSk6CkBAIC03MjUsMTYgKzg2MiwxMCBAQAogIiIiCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBWZXJzaW9uVGVzdENhc2UsCi0gICAgICAgIENoZWNrc3VtVGVzdENhc2UsCi0gICAgICAgIENoZWNrc3VtQmlnQnVmZmVyVGVzdENhc2UsCi0gICAgICAgIEV4Y2VwdGlvblRlc3RDYXNlLAotICAgICAgICBDb21wcmVzc1Rlc3RDYXNlLAotICAgICAgICBDb21wcmVzc09iamVjdFRlc3RDYXNlCi0gICAgKQorY2xhc3MgQ3VzdG9tSW50OgorICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMTAwCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKCkgIyBYWFgKLSAgICAjIyN0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weSBiL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKaW5kZXggYWZlNTBkMi4uMTM4ZjI1YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQorKysgYi9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CkBAIC00LDIyICs0LDI0IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCBvcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFN1cHByZXNzQ3Jhc2hSZXBvcnQKIAotdmVyYm9zZSA9IChzeXMuYXJndlsxXSA9PSAndicpCi10cnk6Ci0gICAgZmQgPSBpbnQoc3lzLmFyZ3ZbMl0pCi0KK3dpdGggU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgIHZlcmJvc2UgPSAoc3lzLmFyZ3ZbMV0gPT0gJ3YnKQogICAgIHRyeToKLSAgICAgICAgb3Mud3JpdGUoZmQsIGIiYmxhdCIpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICMgU3VjY2VzcyAtLSBjb3VsZCBub3Qgd3JpdGUgdG8gZmQuCi0gICAgICAgIHN5cy5leGl0KDApCi0gICAgZWxzZToKLSAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImZkICVkIGlzIG9wZW4gaW4gY2hpbGQiICUgZmQpCi0gICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGZkID0gaW50KHN5cy5hcmd2WzJdKQogCi1leGNlcHQgRXhjZXB0aW9uOgotICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgIHJhaXNlCi0gICAgc3lzLmV4aXQoMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mud3JpdGUoZmQsIGIiYmxhdCIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBTdWNjZXNzIC0tIGNvdWxkIG5vdCB3cml0ZSB0byBmZC4KKyAgICAgICAgICAgIHN5cy5leGl0KDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImZkICVkIGlzIG9wZW4gaW4gY2hpbGQiICUgZmQpCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90b2tlbml6ZV90ZXN0cy1sYXRpbjEtY29kaW5nLWNvb2tpZS1hbmQtdXRmOC1ib20tc2lnLnR4dCBiL0xpYi90ZXN0L3Rva2VuaXplX3Rlc3RzLWxhdGluMS1jb2RpbmctY29va2llLWFuZC11dGY4LWJvbS1zaWcudHh0CmluZGV4IDJmNTM3MTguLmRjN2M1ZjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rva2VuaXplX3Rlc3RzLWxhdGluMS1jb2RpbmctY29va2llLWFuZC11dGY4LWJvbS1zaWcudHh0CisrKyBiL0xpYi90ZXN0L3Rva2VuaXplX3Rlc3RzLWxhdGluMS1jb2RpbmctY29va2llLWFuZC11dGY4LWJvbS1zaWcudHh0CkBAIC0yLDcgKzIsNyBAQAogIyBJTVBPUlRBTlQ6IHRoaXMgZmlsZSBoYXMgdGhlIHV0Zi04IEJPTSBzaWduYXR1cmUgJ1x4ZWZceGJiXHhiZicgCiAjIGF0IHRoZSBzdGFydCBvZiBpdC4gIE1ha2Ugc3VyZSB0aGlzIGlzIHByZXNlcnZlZCBpZiBhbnkgY2hhbmdlcwogIyBhcmUgbWFkZSEgIEFsc28gbm90ZSB0aGF0IHRoZSBjb2RpbmcgY29va2llIGFib3ZlIGNvbmZsaWN0cyB3aXRoCi0jIHRoZSBwcmVzZW5zZSBvZiBhIHV0Zi04IEJPTSBzaWduYXR1cmUgLS0gdGhpcyBpcyBpbnRlbmRlZC4KKyMgdGhlIHByZXNlbmNlIG9mIGEgdXRmLTggQk9NIHNpZ25hdHVyZSAtLSB0aGlzIGlzIGludGVuZGVkLgogCiAjIEFyYml0cmFyeSBlbmNvZGVkIHV0Zi04IHRleHQgKHN0b2xlbiBmcm9tIHRlc3RfZG9jdGVzdDIucHkpLgogeCA9ICfQidCK0IjQgdCCJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvd3JvbmdjZXJ0LnBlbSBiL0xpYi90ZXN0L3dyb25nY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY5MmY5YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3dyb25nY2VydC5wZW0KQEAgLTAsMCArMSwzMiBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hBSUJBQUtCZ1FDODlaTnhqVGdXZ3E3WjFnMHRKNjV3K2s3bE5BajVJZ2pMYjE1NVVrVXJ6MFhzSERuSAorRmxic1ZVZzJYdGs2K2JvMlVFWUl6TjdjSW01SW1wbXlXLzJ6MEoxSURWRGx2UjJ4SjY1OXhyRTB2NWMyY0I2VAorZjlsbk5Ud3BTb2VLMjROZDdKd3E0ajl2azk1ZkxyZHFzQnEwL0tWbHNDWGVpeFMvQ2FxcWR1WGZ2d0lEQVFBQgorQW9HQVFGa280dXlDZ3pmeHI0RXpiNE1wNXBOM05wcW55NStKZXkzcjhFalNBWDlPZ24rQ05ZZ29CY2R0RmdicQorMXlpZi8wc0s3b2hHQkpVOUZVQ0F3cnFOQkk5WkhCNnJjeTdkeCtnVUxPbVJCR2NrbG4xbzVTMStzbVZkbU9zVworN3pVVkxCVkJ5S3VOV3FUWUZsemZWZDZzNGlpWHRBRTJpSG4zR0N5WWRsSUN3ckVDUVFEaE1RVnhIZDNFRmJ6ZworU0ZtSkJUQVJsWjJHS0EzYzFnL2g5L1hia0VQUTkvUndJM3ZuakoyUmFTbmpsZm9MbDhUT2NmMHVPR2JPRXlGZQorMTlSdkNMWGpBa0VBMXMrVUU1emlGK1lWa1czV29sRENRMmtRNVdHOStjY2ZOZWJmaDZiNjdCN0xuNWlHMFNiZwora3k5Y2pzTzNqYk1KUXRsekFRbkgxODUwb1JENUdpNTFkUUpBSWJIQ0RMRFpVOU9rMVRJK0kyQmhWdUE2RjY2NgorbEVaN1RlWmFKU1lxMzRPYVVZVWRyd0c5T2Rxd1o5c3k5TFVhdjRFU3p1MmxoRVFjaENKcktNbjIzUUpBUmVxcworWkxIVWVUamZYa1ZrN2RIaFdQV1NsVVo2QWhtSWxBL0FRN1BheWcyLzh3TS9Ka1pFSkVQdkdWeWttczlpUFVydgorZnJBRFJyK2hBR2U0M0lld25RSkJBSldLWmxsUGdLdUVCUHdvRWxkSE5TOG5SdTYxRDdIenhFelEyeG5maitOaworMmZnZjFNQXp6VFJzaWtmR0VOaFZzVldlcU9jaWpXYjZnNWdzeUNtbFJwYz0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNzRENDQWhtZ0F3SUJBZ0lKQU9xWU9ZRkpmRUVvTUEwR0NTcUdTSWIzRFFFQkJRVUFNRVV4Q3pBSkJnTlYKK0JBWVRBa0ZWTVJNd0VRWURWUVFJRXdwVGIyMWxMVk4wWVhSbE1TRXdId1lEVlFRS0V4aEpiblJsY201bGRDQlgKK2FXUm5hWFJ6SUZCMGVTQk1kR1F3SGhjTk1EZ3dOakkyTVRneE5UVXlXaGNOTURrd05qSTJNVGd4TlRVeVdqQkYKK01Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2hNWVNXNTAKK1pYSnVaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0IKK2dRQzg5Wk54alRnV2dxN1oxZzB0SjY1dytrN2xOQWo1SWdqTGIxNTVVa1VyejBYc0hEbkhGbGJzVlVnMlh0azYKKytibzJVRVlJek43Y0ltNUltcG15Vy8yejBKMUlEVkRsdlIyeEo2NTl4ckUwdjVjMmNCNlRmOWxuTlR3cFNvZUsKKzI0TmQ3SndxNGo5dms5NWZMcmRxc0JxMC9LVmxzQ1hlaXhTL0NhcXFkdVhmdndJREFRQUJvNEduTUlHa01CMEcKK0ExVWREZ1FXQkJUY3RNdEkzRU85T2pMSTB4OVpvMmlma3dJaU5qQjFCZ05WSFNNRWJqQnNnQlRjdE10STNFTzkKK09qTEkweDlabzJpZmt3SWlOcUZKcEVjd1JURUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdUQ2xOdmJXVXQKK1UzUmhkR1V4SVRBZkJnTlZCQW9UR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaSUlKQU9xWU9ZRkoKK2ZFRW9NQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVF3YTdqeWEvRGZoYURuN0UKK3VzUGtwZ0lYOFdDTDJCMVNxblJUWEVaZkJQUFZxL2NVbUZHeUVWUlZBVHlTUnVNd2k4UFhiVmNPaFhYdW9jQSsKKzQzVytpSXNEOXBYYXBDWmhoT2VyQ3ExOFRDMWRXSzk4dkxVc29LOFBNakI2ZTVIL084YnFvanYwRWVDK2Z5Q3cKK2VTSGo1anBDOGlaS2pDSEJuK21BaTRjUTUxND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXh0d3JhcC5weSBiL0xpYi90ZXh0d3JhcC5weQppbmRleCAxNzU5YjBkLi4wNWUwMzA2IDEwMDY0NAotLS0gYS9MaWIvdGV4dHdyYXAucHkKKysrIGIvTGliL3RleHR3cmFwLnB5CkBAIC03OSwxMCArNzksMjUgQEAKICAgICAjIHNwbGl0cyBpbnRvCiAgICAgIyAgIEhlbGxvLyAvdGhlcmUvIC8tLS8gL3lvdS8gL2dvb2YtL2JhbGwsLyAvdXNlLyAvdGhlLyAvLWIvIC9vcHRpb24hCiAgICAgIyAoYWZ0ZXIgc3RyaXBwaW5nIG91dCBlbXB0eSBzdHJpbmdzKS4KLSAgICB3b3Jkc2VwX3JlID0gcmUuY29tcGlsZSgKLSAgICAgICAgcicoXHMrfCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbnkgd2hpdGVzcGFjZQotICAgICAgICByJ1teXHNcd10qXHcrW14wLTlcV10tKD89XHcrW14wLTlcV10pfCcgICAjIGh5cGhlbmF0ZWQgd29yZHMKLSAgICAgICAgcicoPzw9W1x3XCFcIlwnXCZcLlwsXD9dKS17Mix9KD89XHcpKScpICAgIyBlbS1kYXNoCisgICAgd29yZF9wdW5jdCA9IHInW1x3ISJcJyYuLD9dJworICAgIGxldHRlciA9IHInW15cZFxXXScKKyAgICB3b3Jkc2VwX3JlID0gcmUuY29tcGlsZShyJycnCisgICAgICAgICggIyBhbnkgd2hpdGVzcGFjZQorICAgICAgICAgIFxzKworICAgICAgICB8ICMgZW0tZGFzaCBiZXR3ZWVuIHdvcmRzCisgICAgICAgICAgKD88PSUod3ApcykgLXsyLH0gKD89XHcpCisgICAgICAgIHwgIyB3b3JkLCBwb3NzaWJseSBoeXBoZW5hdGVkCisgICAgICAgICAgXFMrPyAoPzoKKyAgICAgICAgICAgICMgaHlwaGVuYXRlZCB3b3JkCisgICAgICAgICAgICAgIC0oPzogKD88PSUobHQpc3syfS0pIHwgKD88PSUobHQpcy0lKGx0KXMtKSkKKyAgICAgICAgICAgICAgKD89ICUobHQpcyAtPyAlKGx0KXMpCisgICAgICAgICAgICB8ICMgZW5kIG9mIHdvcmQKKyAgICAgICAgICAgICAgKD89XHN8XFopCisgICAgICAgICAgICB8ICMgZW0tZGFzaAorICAgICAgICAgICAgICAoPzw9JSh3cClzKSAoPz0tezIsfVx3KQorICAgICAgICAgICAgKQorICAgICAgICApJycnICUgeyd3cCc6IHdvcmRfcHVuY3QsICdsdCc6IGxldHRlcn0sIHJlLlZFUkJPU0UpCisgICAgZGVsIHdvcmRfcHVuY3QsIGxldHRlcgogCiAgICAgIyBUaGlzIGxlc3MgZnVua3kgbGl0dGxlIHJlZ2V4IGp1c3Qgc3BsaXQgb24gcmVjb2duaXplZCBzcGFjZXMuIEUuZy4KICAgICAjICAgIkhlbGxvIHRoZXJlIC0tIHlvdSBnb29mLWJhbGwsIHVzZSB0aGUgLWIgb3B0aW9uISIKZGlmZiAtLWdpdCBhL0xpYi90aHJlYWRpbmcucHkgYi9MaWIvdGhyZWFkaW5nLnB5CmluZGV4IDU2YTQwNjAuLmM5ZjhjYjYgMTAwNjQ0Ci0tLSBhL0xpYi90aHJlYWRpbmcucHkKKysrIGIvTGliL3RocmVhZGluZy5weQpAQCAtMywxMCArMyw3IEBACiBpbXBvcnQgc3lzIGFzIF9zeXMKIGltcG9ydCBfdGhyZWFkCiAKLXRyeToKLSAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyBfdGltZQorZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgX3RpbWUKIGZyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjIGFzIF9mb3JtYXRfZXhjCiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlIGFzIF9pc2xpY2UsIGNvdW50IGFzIF9jb3VudApAQCAtMTA2LDggKzEwMywxNCBAQAogICAgICAgICAgICAgb3duZXIgPSBfYWN0aXZlW293bmVyXS5uYW1lCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgcmV0dXJuICI8JXMgb3duZXI9JXIgY291bnQ9JWQ+IiAlICgKLSAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgb3duZXIsIHNlbGYuX2NvdW50KQorICAgICAgICByZXR1cm4gIjwlcyAlcy4lcyBvYmplY3Qgb3duZXI9JXIgY291bnQ9JWQgYXQgJXM+IiAlICgKKyAgICAgICAgICAgICJsb2NrZWQiIGlmIHNlbGYuX2Jsb2NrLmxvY2tlZCgpIGVsc2UgInVubG9ja2VkIiwKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICBvd25lciwKKyAgICAgICAgICAgIHNlbGYuX2NvdW50LAorICAgICAgICAgICAgaGV4KGlkKHNlbGYpKQorICAgICAgICApCiAKICAgICBkZWYgYWNxdWlyZShzZWxmLCBibG9ja2luZz1UcnVlLCB0aW1lb3V0PS0xKToKICAgICAgICAgIiIiQWNxdWlyZSBhIGxvY2ssIGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZy4KQEAgLTkxOCw3ICs5MjEsNyBAQAogICAgICAgICAgICAgICAgICMgc2VsZi4KICAgICAgICAgICAgICAgICBpZiBfc3lzIGFuZCBfc3lzLnN0ZGVyciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiBpbiB0aHJlYWQgJXM6XG4lcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBfZm9ybWF0X2V4YygpKSwgZmlsZT1zZWxmLl9zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm5hbWUsIF9mb3JtYXRfZXhjKCkpLCBmaWxlPV9zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RkZXJyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAjIERvIHRoZSBiZXN0IGpvYiBwb3NzaWJsZSB3L28gYSBodWdlIGFtdC4gb2YgY29kZSB0bwogICAgICAgICAgICAgICAgICAgICAjIGFwcHJveGltYXRlIGEgdHJhY2ViYWNrIChjb2RlIGlkZWFzIGZyb20KQEAgLTEwNTgsNyArMTA2MSw3IEBACiAgICAgICAgICMgSXNzdWUgIzE4ODA4OiB3YWl0IGZvciB0aGUgdGhyZWFkIHN0YXRlIHRvIGJlIGdvbmUuCiAgICAgICAgICMgQXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZSwgYWZ0ZXIgYWxsIGtub3dsZWRnZSBvZiB0aGUgdGhyZWFkCiAgICAgICAgICMgaXMgcmVtb3ZlZCBmcm9tIEMgZGF0YSBzdHJ1Y3R1cmVzLCBDIGNvZGUgcmVsZWFzZXMgb3VyIF90c3RhdGVfbG9jay4KLSAgICAgICAgIyBUaGlzIG1ldGhvZCBwYXNzZXMgaXRzIGFyZ3VtZW50cyB0byBfdHN0YXRlX2xvY2suYXF1aXJlKCkuCisgICAgICAgICMgVGhpcyBtZXRob2QgcGFzc2VzIGl0cyBhcmd1bWVudHMgdG8gX3RzdGF0ZV9sb2NrLmFjcXVpcmUoKS4KICAgICAgICAgIyBJZiB0aGUgbG9jayBpcyBhY3F1aXJlZCwgdGhlIEMgY29kZSBpcyBkb25lLCBhbmQgc2VsZi5fc3RvcCgpIGlzCiAgICAgICAgICMgY2FsbGVkLiAgVGhhdCBzZXRzIC5faXNfc3RvcHBlZCB0byBUcnVlLCBhbmQgLl90c3RhdGVfbG9jayB0byBOb25lLgogICAgICAgICBsb2NrID0gc2VsZi5fdHN0YXRlX2xvY2sKZGlmZiAtLWdpdCBhL0xpYi90aW1laXQucHkgYi9MaWIvdGltZWl0LnB5CmluZGV4IDBiMWM2MDEuLjJkZTg4ZjcgMTAwNzU1Ci0tLSBhL0xpYi90aW1laXQucHkKKysrIGIvTGliL3RpbWVpdC5weQpAQCAtMjAsNiArMjAsNyBAQAogICAtdC8tLXRpbWU6IHVzZSB0aW1lLnRpbWUoKSAoZGVwcmVjYXRlZCkKICAgLWMvLS1jbG9jazogdXNlIHRpbWUuY2xvY2soKSAoZGVwcmVjYXRlZCkKICAgLXYvLS12ZXJib3NlOiBwcmludCByYXcgdGltaW5nIHJlc3VsdHM7IHJlcGVhdCBmb3IgbW9yZSBkaWdpdHMgcHJlY2lzaW9uCisgIC11Ly0tdW5pdDogc2V0IHRoZSBvdXRwdXQgdGltZSB1bml0ICh1c2VjLCBtc2VjLCBvciBzZWMpCiAgIC1oLy0taGVscDogcHJpbnQgdGhpcyB1c2FnZSBtZXNzYWdlIGFuZCBleGl0CiAgIC0tOiBzZXBhcmF0ZSBvcHRpb25zIGZyb20gc3RhdGVtZW50LCB1c2Ugd2hlbiBzdGF0ZW1lbnQgc3RhcnRzIHdpdGggLQogICBzdGF0ZW1lbnQ6IHN0YXRlbWVudCB0byBiZSB0aW1lZCAoZGVmYXVsdCAncGFzcycpCkBAIC02MSw2ICs2Miw4IEBACiBkZWZhdWx0X3JlcGVhdCA9IDMKIGRlZmF1bHRfdGltZXIgPSB0aW1lLnBlcmZfY291bnRlcgogCitfZ2xvYmFscyA9IGdsb2JhbHMKKwogIyBEb24ndCBjaGFuZ2UgdGhlIGluZGVudGF0aW9uIG9mIHRoZSB0ZW1wbGF0ZTsgdGhlIHJlaW5kZW50KCkgY2FsbHMKICMgaW4gVGltZXIuX19pbml0X18oKSBkZXBlbmQgb24gc2V0dXAgYmVpbmcgaW5kZW50ZWQgNCBzcGFjZXMgYW5kIHN0bXQKICMgYmVpbmcgaW5kZW50ZWQgOCBzcGFjZXMuCkBAIC03OCwyNCArODEsMTUgQEAKICAgICAiIiJIZWxwZXIgdG8gcmVpbmRlbnQgYSBtdWx0aS1saW5lIHN0YXRlbWVudC4iIiIKICAgICByZXR1cm4gc3JjLnJlcGxhY2UoIlxuIiwgIlxuIiArICIgIippbmRlbnQpCiAKLWRlZiBfdGVtcGxhdGVfZnVuYyhzZXR1cCwgZnVuYyk6Ci0gICAgIiIiQ3JlYXRlIGEgdGltZXIgZnVuY3Rpb24uIFVzZWQgaWYgdGhlICJzdGF0ZW1lbnQiIGlzIGEgY2FsbGFibGUuIiIiCi0gICAgZGVmIGlubmVyKF9pdCwgX3RpbWVyLCBfZnVuYz1mdW5jKToKLSAgICAgICAgc2V0dXAoKQotICAgICAgICBfdDAgPSBfdGltZXIoKQotICAgICAgICBmb3IgX2kgaW4gX2l0OgotICAgICAgICAgICAgX2Z1bmMoKQotICAgICAgICBfdDEgPSBfdGltZXIoKQotICAgICAgICByZXR1cm4gX3QxIC0gX3QwCi0gICAgcmV0dXJuIGlubmVyCi0KIGNsYXNzIFRpbWVyOgogICAgICIiIkNsYXNzIGZvciB0aW1pbmcgZXhlY3V0aW9uIHNwZWVkIG9mIHNtYWxsIGNvZGUgc25pcHBldHMuCiAKICAgICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBzdGF0ZW1lbnQgdG8gYmUgdGltZWQsIGFuIGFkZGl0aW9uYWwKICAgICBzdGF0ZW1lbnQgdXNlZCBmb3Igc2V0dXAsIGFuZCBhIHRpbWVyIGZ1bmN0aW9uLiAgQm90aCBzdGF0ZW1lbnRzCiAgICAgZGVmYXVsdCB0byAncGFzcyc7IHRoZSB0aW1lciBmdW5jdGlvbiBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgKHNlZQotICAgIG1vZHVsZSBkb2Mgc3RyaW5nKS4KKyAgICBtb2R1bGUgZG9jIHN0cmluZykuICBJZiAnZ2xvYmFscycgaXMgc3BlY2lmaWVkLCB0aGUgY29kZSB3aWxsIGJlCisgICAgZXhlY3V0ZWQgd2l0aGluIHRoYXQgbmFtZXNwYWNlIChhcyBvcHBvc2VkIHRvIGluc2lkZSB0aW1laXQncworICAgIG5hbWVzcGFjZSkuCiAKICAgICBUbyBtZWFzdXJlIHRoZSBleGVjdXRpb24gdGltZSBvZiB0aGUgZmlyc3Qgc3RhdGVtZW50LCB1c2UgdGhlCiAgICAgdGltZWl0KCkgbWV0aG9kLiAgVGhlIHJlcGVhdCgpIG1ldGhvZCBpcyBhIGNvbnZlbmllbmNlIHRvIGNhbGwKQEAgLTEwNSw0MiArOTksNDAgQEAKICAgICBtdWx0aS1saW5lIHN0cmluZyBsaXRlcmFscy4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdG10PSJwYXNzIiwgc2V0dXA9InBhc3MiLCB0aW1lcj1kZWZhdWx0X3RpbWVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RtdD0icGFzcyIsIHNldHVwPSJwYXNzIiwgdGltZXI9ZGVmYXVsdF90aW1lciwKKyAgICAgICAgICAgICAgICAgZ2xvYmFscz1Ob25lKToKICAgICAgICAgIiIiQ29uc3RydWN0b3IuICBTZWUgY2xhc3MgZG9jIHN0cmluZy4iIiIKICAgICAgICAgc2VsZi50aW1lciA9IHRpbWVyCi0gICAgICAgIG5zID0ge30KKyAgICAgICAgbG9jYWxfbnMgPSB7fQorICAgICAgICBnbG9iYWxfbnMgPSBfZ2xvYmFscygpIGlmIGdsb2JhbHMgaXMgTm9uZSBlbHNlIGdsb2JhbHMKKyAgICAgICAgaW5pdCA9ICcnCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2V0dXAsIHN0cik6CisgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGNvZGUgY2FuIGJlIGNvbXBpbGVkIG91dHNpZGUgYSBmdW5jdGlvbgorICAgICAgICAgICAgY29tcGlsZShzZXR1cCwgZHVtbXlfc3JjX25hbWUsICJleGVjIikKKyAgICAgICAgICAgIHN0bXRwcmVmaXggPSBzZXR1cCArICdcbicKKyAgICAgICAgICAgIHNldHVwID0gcmVpbmRlbnQoc2V0dXAsIDQpCisgICAgICAgIGVsaWYgY2FsbGFibGUoc2V0dXApOgorICAgICAgICAgICAgbG9jYWxfbnNbJ19zZXR1cCddID0gc2V0dXAKKyAgICAgICAgICAgIGluaXQgKz0gJywgX3NldHVwPV9zZXR1cCcKKyAgICAgICAgICAgIHN0bXRwcmVmaXggPSAnJworICAgICAgICAgICAgc2V0dXAgPSAnX3NldHVwKCknCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzZXR1cCBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBjYWxsYWJsZSIpCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3RtdCwgc3RyKToKICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgY29kZSBjYW4gYmUgY29tcGlsZWQgb3V0c2lkZSBhIGZ1bmN0aW9uCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNldHVwLCBzdHIpOgotICAgICAgICAgICAgICAgIGNvbXBpbGUoc2V0dXAsIGR1bW15X3NyY19uYW1lLCAiZXhlYyIpCi0gICAgICAgICAgICAgICAgY29tcGlsZShzZXR1cCArICdcbicgKyBzdG10LCBkdW1teV9zcmNfbmFtZSwgImV4ZWMiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb21waWxlKHN0bXQsIGR1bW15X3NyY19uYW1lLCAiZXhlYyIpCisgICAgICAgICAgICBjb21waWxlKHN0bXRwcmVmaXggKyBzdG10LCBkdW1teV9zcmNfbmFtZSwgImV4ZWMiKQogICAgICAgICAgICAgc3RtdCA9IHJlaW5kZW50KHN0bXQsIDgpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNldHVwLCBzdHIpOgotICAgICAgICAgICAgICAgIHNldHVwID0gcmVpbmRlbnQoc2V0dXAsIDQpCi0gICAgICAgICAgICAgICAgc3JjID0gdGVtcGxhdGUuZm9ybWF0KHN0bXQ9c3RtdCwgc2V0dXA9c2V0dXAsIGluaXQ9JycpCi0gICAgICAgICAgICBlbGlmIGNhbGxhYmxlKHNldHVwKToKLSAgICAgICAgICAgICAgICBzcmMgPSB0ZW1wbGF0ZS5mb3JtYXQoc3RtdD1zdG10LCBzZXR1cD0nX3NldHVwKCknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0PScsIF9zZXR1cD1fc2V0dXAnKQotICAgICAgICAgICAgICAgIG5zWydfc2V0dXAnXSA9IHNldHVwCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNldHVwIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGNhbGxhYmxlIikKLSAgICAgICAgICAgIHNlbGYuc3JjID0gc3JjICMgU2F2ZSBmb3IgdHJhY2ViYWNrIGRpc3BsYXkKLSAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKHNyYywgZHVtbXlfc3JjX25hbWUsICJleGVjIikKLSAgICAgICAgICAgIGV4ZWMoY29kZSwgZ2xvYmFscygpLCBucykKLSAgICAgICAgICAgIHNlbGYuaW5uZXIgPSBuc1siaW5uZXIiXQogICAgICAgICBlbGlmIGNhbGxhYmxlKHN0bXQpOgotICAgICAgICAgICAgc2VsZi5zcmMgPSBOb25lCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNldHVwLCBzdHIpOgotICAgICAgICAgICAgICAgIF9zZXR1cCA9IHNldHVwCi0gICAgICAgICAgICAgICAgZGVmIHNldHVwKCk6Ci0gICAgICAgICAgICAgICAgICAgIGV4ZWMoX3NldHVwLCBnbG9iYWxzKCksIG5zKQotICAgICAgICAgICAgZWxpZiBub3QgY2FsbGFibGUoc2V0dXApOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNldHVwIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGNhbGxhYmxlIikKLSAgICAgICAgICAgIHNlbGYuaW5uZXIgPSBfdGVtcGxhdGVfZnVuYyhzZXR1cCwgc3RtdCkKKyAgICAgICAgICAgIGxvY2FsX25zWydfc3RtdCddID0gc3RtdAorICAgICAgICAgICAgaW5pdCArPSAnLCBfc3RtdD1fc3RtdCcKKyAgICAgICAgICAgIHN0bXQgPSAnX3N0bXQoKScKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0bXQgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgY2FsbGFibGUiKQorICAgICAgICBzcmMgPSB0ZW1wbGF0ZS5mb3JtYXQoc3RtdD1zdG10LCBzZXR1cD1zZXR1cCwgaW5pdD1pbml0KQorICAgICAgICBzZWxmLnNyYyA9IHNyYyAgIyBTYXZlIGZvciB0cmFjZWJhY2sgZGlzcGxheQorICAgICAgICBjb2RlID0gY29tcGlsZShzcmMsIGR1bW15X3NyY19uYW1lLCAiZXhlYyIpCisgICAgICAgIGV4ZWMoY29kZSwgZ2xvYmFsX25zLCBsb2NhbF9ucykKKyAgICAgICAgc2VsZi5pbm5lciA9IGxvY2FsX25zWyJpbm5lciJdCiAKICAgICBkZWYgcHJpbnRfZXhjKHNlbGYsIGZpbGU9Tm9uZSk6CiAgICAgICAgICIiIkhlbHBlciB0byBwcmludCBhIHRyYWNlYmFjayBmcm9tIHRoZSB0aW1lZCBjb2RlLgpAQCAtMjE2LDE0ICsyMDgsMTQgQEAKICAgICAgICAgcmV0dXJuIHIKIAogZGVmIHRpbWVpdChzdG10PSJwYXNzIiwgc2V0dXA9InBhc3MiLCB0aW1lcj1kZWZhdWx0X3RpbWVyLAotICAgICAgICAgICBudW1iZXI9ZGVmYXVsdF9udW1iZXIpOgorICAgICAgICAgICBudW1iZXI9ZGVmYXVsdF9udW1iZXIsIGdsb2JhbHM9Tm9uZSk6CiAgICAgIiIiQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY3JlYXRlIFRpbWVyIG9iamVjdCBhbmQgY2FsbCB0aW1laXQgbWV0aG9kLiIiIgotICAgIHJldHVybiBUaW1lcihzdG10LCBzZXR1cCwgdGltZXIpLnRpbWVpdChudW1iZXIpCisgICAgcmV0dXJuIFRpbWVyKHN0bXQsIHNldHVwLCB0aW1lciwgZ2xvYmFscykudGltZWl0KG51bWJlcikKIAogZGVmIHJlcGVhdChzdG10PSJwYXNzIiwgc2V0dXA9InBhc3MiLCB0aW1lcj1kZWZhdWx0X3RpbWVyLAotICAgICAgICAgICByZXBlYXQ9ZGVmYXVsdF9yZXBlYXQsIG51bWJlcj1kZWZhdWx0X251bWJlcik6CisgICAgICAgICAgIHJlcGVhdD1kZWZhdWx0X3JlcGVhdCwgbnVtYmVyPWRlZmF1bHRfbnVtYmVyLCBnbG9iYWxzPU5vbmUpOgogICAgICIiIkNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNyZWF0ZSBUaW1lciBvYmplY3QgYW5kIGNhbGwgcmVwZWF0IG1ldGhvZC4iIiIKLSAgICByZXR1cm4gVGltZXIoc3RtdCwgc2V0dXAsIHRpbWVyKS5yZXBlYXQocmVwZWF0LCBudW1iZXIpCisgICAgcmV0dXJuIFRpbWVyKHN0bXQsIHNldHVwLCB0aW1lciwgZ2xvYmFscykucmVwZWF0KHJlcGVhdCwgbnVtYmVyKQogCiBkZWYgbWFpbihhcmdzPU5vbmUsICosIF93cmFwX3RpbWVyPU5vbmUpOgogICAgICIiIk1haW4gcHJvZ3JhbSwgdXNlZCB3aGVuIHJ1biBhcyBhIHNjcmlwdC4KQEAgLTI0NiwxMCArMjM4LDEwIEBACiAgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KICAgICBpbXBvcnQgZ2V0b3B0CiAgICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAibjpzOnI6dGNwdmgiLAorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAibjp1OnM6cjp0Y3B2aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsibnVtYmVyPSIsICJzZXR1cD0iLCAicmVwZWF0PSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZSIsICJjbG9jayIsICJwcm9jZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJib3NlIiwgImhlbHAiXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJib3NlIiwgInVuaXQ9IiwgImhlbHAiXSkKICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIGVycjoKICAgICAgICAgcHJpbnQoZXJyKQogICAgICAgICBwcmludCgidXNlIC1oLy0taGVscCBmb3IgY29tbWFuZCBsaW5lIGhlbHAiKQpAQCAtMjYwLDEyICsyNTIsMjEgQEAKICAgICBzZXR1cCA9IFtdCiAgICAgcmVwZWF0ID0gZGVmYXVsdF9yZXBlYXQKICAgICB2ZXJib3NlID0gMAorICAgIHRpbWVfdW5pdCA9IE5vbmUKKyAgICB1bml0cyA9IHsidXNlYyI6IDEsICJtc2VjIjogMWUzLCAic2VjIjogMWU2fQogICAgIHByZWNpc2lvbiA9IDMKICAgICBmb3IgbywgYSBpbiBvcHRzOgogICAgICAgICBpZiBvIGluICgiLW4iLCAiLS1udW1iZXIiKToKICAgICAgICAgICAgIG51bWJlciA9IGludChhKQogICAgICAgICBpZiBvIGluICgiLXMiLCAiLS1zZXR1cCIpOgogICAgICAgICAgICAgc2V0dXAuYXBwZW5kKGEpCisgICAgICAgIGlmIG8gaW4gKCItdSIsICItLXVuaXQiKToKKyAgICAgICAgICAgIGlmIGEgaW4gdW5pdHM6CisgICAgICAgICAgICAgICAgdGltZV91bml0ID0gYQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgiVW5yZWNvZ25pemVkIHVuaXQuIFBsZWFzZSBzZWxlY3QgdXNlYywgbXNlYywgb3Igc2VjLiIsCisgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICByZXR1cm4gMgogICAgICAgICBpZiBvIGluICgiLXIiLCAiLS1yZXBlYXQiKToKICAgICAgICAgICAgIHJlcGVhdCA9IGludChhKQogICAgICAgICAgICAgaWYgcmVwZWF0IDw9IDA6CkBAIC0zMTUsMTUgKzMxNiwyMSBAQAogICAgICAgICBwcmludCgicmF3IHRpbWVzOiIsICIgIi5qb2luKFsiJS4qZyIgJSAocHJlY2lzaW9uLCB4KSBmb3IgeCBpbiByXSkpCiAgICAgcHJpbnQoIiVkIGxvb3BzLCIgJSBudW1iZXIsIGVuZD0nICcpCiAgICAgdXNlYyA9IGJlc3QgKiAxZTYgLyBudW1iZXIKLSAgICBpZiB1c2VjIDwgMTAwMDoKLSAgICAgICAgcHJpbnQoImJlc3Qgb2YgJWQ6ICUuKmcgdXNlYyBwZXIgbG9vcCIgJSAocmVwZWF0LCBwcmVjaXNpb24sIHVzZWMpKQorICAgIGlmIHRpbWVfdW5pdCBpcyBub3QgTm9uZToKKyAgICAgICAgcHJpbnQoImJlc3Qgb2YgJWQ6ICUuKmcgJXMgcGVyIGxvb3AiICUgKHJlcGVhdCwgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlYy91bml0c1t0aW1lX3VuaXRdLCB0aW1lX3VuaXQpKQogICAgIGVsc2U6Ci0gICAgICAgIG1zZWMgPSB1c2VjIC8gMTAwMAotICAgICAgICBpZiBtc2VjIDwgMTAwMDoKLSAgICAgICAgICAgIHByaW50KCJiZXN0IG9mICVkOiAlLipnIG1zZWMgcGVyIGxvb3AiICUgKHJlcGVhdCwgcHJlY2lzaW9uLCBtc2VjKSkKKyAgICAgICAgaWYgdXNlYyA8IDEwMDA6CisgICAgICAgICAgICBwcmludCgiYmVzdCBvZiAlZDogJS4qZyB1c2VjIHBlciBsb29wIiAlIChyZXBlYXQsIHByZWNpc2lvbiwgdXNlYykpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWMgPSBtc2VjIC8gMTAwMAotICAgICAgICAgICAgcHJpbnQoImJlc3Qgb2YgJWQ6ICUuKmcgc2VjIHBlciBsb29wIiAlIChyZXBlYXQsIHByZWNpc2lvbiwgc2VjKSkKKyAgICAgICAgICAgIG1zZWMgPSB1c2VjIC8gMTAwMAorICAgICAgICAgICAgaWYgbXNlYyA8IDEwMDA6CisgICAgICAgICAgICAgICAgcHJpbnQoImJlc3Qgb2YgJWQ6ICUuKmcgbXNlYyBwZXIgbG9vcCIgJSAocmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiwgbXNlYykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlYyA9IG1zZWMgLyAxMDAwCisgICAgICAgICAgICAgICAgcHJpbnQoImJlc3Qgb2YgJWQ6ICUuKmcgc2VjIHBlciBsb29wIiAlIChyZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sIHNlYykpCiAgICAgcmV0dXJuIE5vbmUKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5IGIvTGliL3RraW50ZXIvX19pbml0X18ucHkKaW5kZXggNzVjNDBlNTYuLjU1YmZiN2YgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5CisrKyBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CkBAIC0zMSw5ICszMSw2IEBACiAiIiIKIAogaW1wb3J0IHN5cwotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgIyBBdHRlbXB0IHRvIGNvbmZpZ3VyZSBUY2wvVGsgd2l0aG91dCByZXF1aXJpbmcgUEFUSAotICAgIGZyb20gdGtpbnRlciBpbXBvcnQgX2ZpeAogCiBpbXBvcnQgX3RraW50ZXIgIyBJZiB0aGlzIGZhaWxzIHlvdXIgUHl0aG9uIG1heSBub3QgYmUgY29uZmlndXJlZCBmb3IgVGsKIFRjbEVycm9yID0gX3RraW50ZXIuVGNsRXJyb3IKQEAgLTI3NCw3ICsyNzEsNyBAQAogCiAgICAgICAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2suCiAgICAgICAgICIiIgotICAgICAgICBmID0gQ2FsbFdyYXBwZXIoY2FsbGJhY2ssIE5vbmUsIHNlbGYpLl9fY2FsbF9fCisgICAgICAgIGYgPSBDYWxsV3JhcHBlcihjYWxsYmFjaywgTm9uZSwgc2VsZi5fcm9vdCkuX19jYWxsX18KICAgICAgICAgY2JuYW1lID0gcmVwcihpZChmKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjay5fX2Z1bmNfXwpAQCAtMjk4LDE0ICsyOTUsMTkgQEAKICAgICAgICAgQ0JOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBjYWxsYmFjayByZXR1cm5lZCBmcm9tIHRyYWNlX3ZhcmlhYmxlIG9yIHRyYWNlLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdGsuY2FsbCgidHJhY2UiLCAidmRlbGV0ZSIsIHNlbGYuX25hbWUsIG1vZGUsIGNibmFtZSkKLSAgICAgICAgc2VsZi5fdGsuZGVsZXRlY29tbWFuZChjYm5hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzLnJlbW92ZShjYm5hbWUpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICBjYm5hbWUgPSBzZWxmLl90ay5zcGxpdGxpc3QoY2JuYW1lKVswXQorICAgICAgICBmb3IgbSwgY2EgaW4gc2VsZi50cmFjZV92aW5mbygpOgorICAgICAgICAgICAgaWYgc2VsZi5fdGsuc3BsaXRsaXN0KGNhKVswXSA9PSBjYm5hbWU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3RrLmRlbGV0ZWNvbW1hbmQoY2JuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzLnJlbW92ZShjYm5hbWUpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgZGVmIHRyYWNlX3ZpbmZvKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYWxsIHRyYWNlIGNhbGxiYWNrIGluZm9ybWF0aW9uLiIiIgotICAgICAgICByZXR1cm4gW3NlbGYuX3RrLnNwbGl0KHgpIGZvciB4IGluIHNlbGYuX3RrLnNwbGl0bGlzdCgKKyAgICAgICAgcmV0dXJuIFtzZWxmLl90ay5zcGxpdGxpc3QoeCkgZm9yIHggaW4gc2VsZi5fdGsuc3BsaXRsaXN0KAogICAgICAgICAgICAgc2VsZi5fdGsuY2FsbCgidHJhY2UiLCAidmluZm8iLCBzZWxmLl9uYW1lKSldCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICIiIkNvbXBhcmlzb24gZm9yIGVxdWFsaXR5ICg9PSkuCkBAIC0zNTUsNyArMzU3LDcgQEAKIAogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGFzIGFuIGludGVnZXIuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoc2VsZi5fdGsuZ2xvYmFsZ2V0dmFyKHNlbGYuX25hbWUpKQorICAgICAgICByZXR1cm4gc2VsZi5fdGsuZ2V0aW50KHNlbGYuX3RrLmdsb2JhbGdldHZhcihzZWxmLl9uYW1lKSkKIAogY2xhc3MgRG91YmxlVmFyKFZhcmlhYmxlKToKICAgICAiIiJWYWx1ZSBob2xkZXIgZm9yIGZsb2F0IHZhcmlhYmxlcy4iIiIKQEAgLTM3NCw3ICszNzYsNyBAQAogCiAgICAgZGVmIGdldChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYXMgYSBmbG9hdC4iIiIKLSAgICAgICAgcmV0dXJuIGdldGRvdWJsZShzZWxmLl90ay5nbG9iYWxnZXR2YXIoc2VsZi5fbmFtZSkpCisgICAgICAgIHJldHVybiBzZWxmLl90ay5nZXRkb3VibGUoc2VsZi5fdGsuZ2xvYmFsZ2V0dmFyKHNlbGYuX25hbWUpKQogCiBjbGFzcyBCb29sZWFuVmFyKFZhcmlhYmxlKToKICAgICAiIiJWYWx1ZSBob2xkZXIgZm9yIGJvb2xlYW4gdmFyaWFibGVzLiIiIgpAQCAtNTA1LDE0ICs1MDcsMjYgQEAKICAgICBkZWYgZ2V0dmFyKHNlbGYsIG5hbWU9J1BZX1ZBUicpOgogICAgICAgICAiIiJSZXR1cm4gdmFsdWUgb2YgVGNsIHZhcmlhYmxlIE5BTUUuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmdldHZhcihuYW1lKQotICAgIGdldGludCA9IGludAotICAgIGdldGRvdWJsZSA9IGZsb2F0CisKKyAgICBkZWYgZ2V0aW50KHNlbGYsIHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQocykKKyAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Ioc3RyKGV4YykpCisKKyAgICBkZWYgZ2V0ZG91YmxlKHNlbGYsIHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRkb3VibGUocykKKyAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Ioc3RyKGV4YykpCisKICAgICBkZWYgZ2V0Ym9vbGVhbihzZWxmLCBzKToKICAgICAgICAgIiIiUmV0dXJuIGEgYm9vbGVhbiB2YWx1ZSBmb3IgVGNsIGJvb2xlYW4gdmFsdWVzIHRydWUgYW5kIGZhbHNlIGdpdmVuIGFzIHBhcmFtZXRlci4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0Ym9vbGVhbihzKQogICAgICAgICBleGNlcHQgVGNsRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGxpdGVyYWwgZm9yIGdldGJvb2xlYW4oKSIpCisKICAgICBkZWYgZm9jdXNfc2V0KHNlbGYpOgogICAgICAgICAiIiJEaXJlY3QgaW5wdXQgZm9jdXMgdG8gdGhpcyB3aWRnZXQuCiAKQEAgLTc3NSwxMyArNzg5LDEwIEBACiAgICAgICAgICIiIlJhaXNlIHRoaXMgd2lkZ2V0IGluIHRoZSBzdGFja2luZyBvcmRlci4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKCdyYWlzZScsIHNlbGYuX3csIGFib3ZlVGhpcykKICAgICBsaWZ0ID0gdGtyYWlzZQotICAgIGRlZiBjb2xvcm1vZGVsKHNlbGYsIHZhbHVlPU5vbmUpOgotICAgICAgICAiIiJVc2VsZXNzLiBOb3QgaW1wbGVtZW50ZWQgaW4gVGsuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoJ3RrJywgJ2NvbG9ybW9kZWwnLCBzZWxmLl93LCB2YWx1ZSkKICAgICBkZWYgd2luZm9fYXRvbShzZWxmLCBuYW1lLCBkaXNwbGF5b2Y9MCk6CiAgICAgICAgICIiIlJldHVybiBpbnRlZ2VyIHdoaWNoIHJlcHJlc2VudHMgYXRvbSBOQU1FLiIiIgogICAgICAgICBhcmdzID0gKCd3aW5mbycsICdhdG9tJykgKyBzZWxmLl9kaXNwbGF5b2YoZGlzcGxheW9mKSArIChuYW1lLCkKLSAgICAgICAgcmV0dXJuIGdldGludChzZWxmLnRrLmNhbGwoYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludChzZWxmLnRrLmNhbGwoYXJncykpCiAgICAgZGVmIHdpbmZvX2F0b21uYW1lKHNlbGYsIGlkLCBkaXNwbGF5b2Y9MCk6CiAgICAgICAgICIiIlJldHVybiBuYW1lIG9mIGF0b20gd2l0aCBpZGVudGlmaWVyIElELiIiIgogICAgICAgICBhcmdzID0gKCd3aW5mbycsICdhdG9tbmFtZScpIFwKQEAgLTc4OSw3ICs4MDAsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKGFyZ3MpCiAgICAgZGVmIHdpbmZvX2NlbGxzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gbnVtYmVyIG9mIGNlbGxzIGluIHRoZSBjb2xvcm1hcCBmb3IgdGhpcyB3aWRnZXQuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAnY2VsbHMnLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9fY2hpbGRyZW4oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWxsIHdpZGdldHMgd2hpY2ggYXJlIGNoaWxkcmVuIG9mIHRoaXMgd2lkZ2V0LiIiIgpAQCAtODIwLDIyICs4MzEsMjIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWV0b3dpZGdldChuYW1lKQogICAgIGRlZiB3aW5mb19kZXB0aChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoc2VsZi50ay5jYWxsKCd3aW5mbycsICdkZXB0aCcsIHNlbGYuX3cpKQorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoc2VsZi50ay5jYWxsKCd3aW5mbycsICdkZXB0aCcsIHNlbGYuX3cpKQogICAgIGRlZiB3aW5mb19leGlzdHMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0cnVlIGlmIHRoaXMgd2lkZ2V0IGV4aXN0cy4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICdleGlzdHMnLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9fZnBpeGVscyhzZWxmLCBudW1iZXIpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBwaXhlbHMgZm9yIHRoZSBnaXZlbiBkaXN0YW5jZSBOVU1CRVIKICAgICAgICAgKGUuZy4gIjNjIikgYXMgZmxvYXQuIiIiCi0gICAgICAgIHJldHVybiBnZXRkb3VibGUoc2VsZi50ay5jYWxsKAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRkb3VibGUoc2VsZi50ay5jYWxsKAogICAgICAgICAgICAgJ3dpbmZvJywgJ2ZwaXhlbHMnLCBzZWxmLl93LCBudW1iZXIpKQogICAgIGRlZiB3aW5mb19nZW9tZXRyeShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGdlb21ldHJ5IHN0cmluZyBmb3IgdGhpcyB3aWRnZXQgaW4gdGhlIGZvcm0gIndpZHRoeGhlaWdodCtYK1kiLiIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKCd3aW5mbycsICdnZW9tZXRyeScsIHNlbGYuX3cpCiAgICAgZGVmIHdpbmZvX2hlaWdodChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGhlaWdodCBvZiB0aGlzIHdpZGdldC4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICdoZWlnaHQnLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9faWQoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBpZGVudGlmaWVyIElEIGZvciB0aGlzIHdpZGdldC4iIiIKQEAgLTg0Nyw3ICs4NTgsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdGxpc3Qoc2VsZi50ay5jYWxsKGFyZ3MpKQogICAgIGRlZiB3aW5mb19pc21hcHBlZChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhpcyB3aWRnZXQgaXMgbWFwcGVkLiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ3dpbmZvJywgJ2lzbWFwcGVkJywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX21hbmFnZXIoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgd2luZG93IG1hbmFuZ2VyIG5hbWUgZm9yIHRoaXMgd2lkZ2V0LiIiIgpAQCAtODY1LDExICs4NzYsMTEgQEAKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChhcmdzKQogICAgIGRlZiB3aW5mb19waXhlbHMoc2VsZiwgbnVtYmVyKToKICAgICAgICAgIiIiUm91bmRlZCBpbnRlZ2VyIHZhbHVlIG9mIHdpbmZvX2ZwaXhlbHMuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAncGl4ZWxzJywgc2VsZi5fdywgbnVtYmVyKSkKICAgICBkZWYgd2luZm9fcG9pbnRlcngoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludGVyIG9uIHRoZSByb290IHdpbmRvdy4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICdwb2ludGVyeCcsIHNlbGYuX3cpKQogICAgIGRlZiB3aW5mb19wb2ludGVyeHkoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHR1cGxlIG9mIHggYW5kIHkgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50ZXIgb24gdGhlIHJvb3Qgd2luZG93LiIiIgpAQCAtODc3LDE1ICs4ODgsMTUgQEAKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAncG9pbnRlcnh5Jywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3BvaW50ZXJ5KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnRlciBvbiB0aGUgcm9vdCB3aW5kb3cuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAncG9pbnRlcnknLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9fcmVxaGVpZ2h0KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gcmVxdWVzdGVkIGhlaWdodCBvZiB0aGlzIHdpZGdldC4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICdyZXFoZWlnaHQnLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9fcmVxd2lkdGgoc2VsZik6CiAgICAgICAgICIiIlJldHVybiByZXF1ZXN0ZWQgd2lkdGggb2YgdGhpcyB3aWRnZXQuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAncmVxd2lkdGgnLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9fcmdiKHNlbGYsIGNvbG9yKToKICAgICAgICAgIiIiUmV0dXJuIHR1cGxlIG9mIGRlY2ltYWwgdmFsdWVzIGZvciByZWQsIGdyZWVuLCBibHVlIGZvcgpAQCAtODk1LDEyICs5MDYsMTIgQEAKICAgICBkZWYgd2luZm9fcm9vdHgoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB4IGNvb3JkaW5hdGUgb2YgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhpcyB3aWRnZXQgb24gdGhlCiAgICAgICAgIHJvb3Qgd2luZG93LiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ3dpbmZvJywgJ3Jvb3R4Jywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3Jvb3R5KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4geSBjb29yZGluYXRlIG9mIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoaXMgd2lkZ2V0IG9uIHRoZQogICAgICAgICByb290IHdpbmRvdy4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICdyb290eScsIHNlbGYuX3cpKQogICAgIGRlZiB3aW5mb19zY3JlZW4oc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgc2NyZWVuIG5hbWUgb2YgdGhpcyB3aWRnZXQuIiIiCkBAIC05MDgsMjcgKzkxOSwyNyBAQAogICAgIGRlZiB3aW5mb19zY3JlZW5jZWxscyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGNlbGxzIGluIHRoZSBjb2xvcm1hcCBvZiB0aGUgc2NyZWVuCiAgICAgICAgIG9mIHRoaXMgd2lkZ2V0LiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ3dpbmZvJywgJ3NjcmVlbmNlbGxzJywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3NjcmVlbmRlcHRoKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCBvZiB0aGUgcm9vdCB3aW5kb3cgb2YgdGhlCiAgICAgICAgIHNjcmVlbiBvZiB0aGlzIHdpZGdldC4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICdzY3JlZW5kZXB0aCcsIHNlbGYuX3cpKQogICAgIGRlZiB3aW5mb19zY3JlZW5oZWlnaHQoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIHBpeGVscyBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBzY3JlZW4gb2YgdGhpcyB3aWRnZXQKICAgICAgICAgaW4gcGl4ZWwuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAnc2NyZWVuaGVpZ2h0Jywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3NjcmVlbm1taGVpZ2h0KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBwaXhlbHMgb2YgdGhlIGhlaWdodCBvZiB0aGUgc2NyZWVuIG9mCiAgICAgICAgIHRoaXMgd2lkZ2V0IGluIG1tLiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ3dpbmZvJywgJ3NjcmVlbm1taGVpZ2h0Jywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3NjcmVlbm1td2lkdGgoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIHBpeGVscyBvZiB0aGUgd2lkdGggb2YgdGhlIHNjcmVlbiBvZgogICAgICAgICB0aGlzIHdpZGdldCBpbiBtbS4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICdzY3JlZW5tbXdpZHRoJywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3NjcmVlbnZpc3VhbChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIG9uZSBvZiB0aGUgc3RyaW5ncyBkaXJlY3Rjb2xvciwgZ3JheXNjYWxlLCBwc2V1ZG9jb2xvciwKQEAgLTkzOCw3ICs5NDksNyBAQAogICAgIGRlZiB3aW5mb19zY3JlZW53aWR0aChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgcGl4ZWxzIG9mIHRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuIG9mCiAgICAgICAgIHRoaXMgd2lkZ2V0IGluIHBpeGVsLiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ3dpbmZvJywgJ3NjcmVlbndpZHRoJywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3NlcnZlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGluZm9ybWF0aW9uIG9mIHRoZSBYLVNlcnZlciBvZiB0aGUgc2NyZWVuIG9mIHRoaXMgd2lkZ2V0IGluCkBAIC05NTAsNyArOTYxLDcgQEAKICAgICAgICAgICAgICd3aW5mbycsICd0b3BsZXZlbCcsIHNlbGYuX3cpKQogICAgIGRlZiB3aW5mb192aWV3YWJsZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIHdpZGdldCBhbmQgYWxsIGl0cyBoaWdoZXIgYW5jZXN0b3JzIGFyZSBtYXBwZWQuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAndmlld2FibGUnLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9fdmlzdWFsKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gb25lIG9mIHRoZSBzdHJpbmdzIGRpcmVjdGNvbG9yLCBncmF5c2NhbGUsIHBzZXVkb2NvbG9yLApAQCAtOTgyLDM3ICs5OTMsMzcgQEAKICAgICAgICAgIiIiUmV0dXJuIHRoZSBoZWlnaHQgb2YgdGhlIHZpcnR1YWwgcm9vdCB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoaXMKICAgICAgICAgd2lkZ2V0IGluIHBpeGVscy4gSWYgdGhlcmUgaXMgbm8gdmlydHVhbCByb290IHdpbmRvdyByZXR1cm4gdGhlCiAgICAgICAgIGhlaWdodCBvZiB0aGUgc2NyZWVuLiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ3dpbmZvJywgJ3Zyb290aGVpZ2h0Jywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3Zyb290d2lkdGgoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgd2lkdGggb2YgdGhlIHZpcnR1YWwgcm9vdCB3aW5kb3cgYXNzb2NpYXRlZCB3aXRoIHRoaXMKICAgICAgICAgd2lkZ2V0IGluIHBpeGVsLiBJZiB0aGVyZSBpcyBubyB2aXJ0dWFsIHJvb3Qgd2luZG93IHJldHVybiB0aGUKICAgICAgICAgd2lkdGggb2YgdGhlIHNjcmVlbi4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICd2cm9vdHdpZHRoJywgc2VsZi5fdykpCiAgICAgZGVmIHdpbmZvX3Zyb290eChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSB4IG9mZnNldCBvZiB0aGUgdmlydHVhbCByb290IHJlbGF0aXZlIHRvIHRoZSByb290CiAgICAgICAgIHdpbmRvdyBvZiB0aGUgc2NyZWVuIG9mIHRoaXMgd2lkZ2V0LiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ3dpbmZvJywgJ3Zyb290eCcsIHNlbGYuX3cpKQogICAgIGRlZiB3aW5mb192cm9vdHkoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgeSBvZmZzZXQgb2YgdGhlIHZpcnR1YWwgcm9vdCByZWxhdGl2ZSB0byB0aGUgcm9vdAogICAgICAgICB3aW5kb3cgb2YgdGhlIHNjcmVlbiBvZiB0aGlzIHdpZGdldC4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICd2cm9vdHknLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9fd2lkdGgoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgd2lkdGggb2YgdGhpcyB3aWRnZXQuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAnd2lkdGgnLCBzZWxmLl93KSkKICAgICBkZWYgd2luZm9feChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoaXMgd2lkZ2V0CiAgICAgICAgIGluIHRoZSBwYXJlbnQuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnd2luZm8nLCAneCcsIHNlbGYuX3cpKQogICAgIGRlZiB3aW5mb195KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhpcyB3aWRnZXQKICAgICAgICAgaW4gdGhlIHBhcmVudC4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCd3aW5mbycsICd5Jywgc2VsZi5fdykpCiAgICAgZGVmIHVwZGF0ZShzZWxmKToKICAgICAgICAgIiIiRW50ZXIgZXZlbnQgbG9vcCB1bnRpbCBhbGwgcGVuZGluZyBldmVudHMgaGF2ZSBiZWVuIHByb2Nlc3NlZCBieSBUY2wuIiIiCkBAIC0xMTI5LDExICsxMTQwLDExIEBACiAgICAgZGVmIF9nZXRpbnRzKHNlbGYsIHN0cmluZyk6CiAgICAgICAgICIiIkludGVybmFsIGZ1bmN0aW9uLiIiIgogICAgICAgICBpZiBzdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gdHVwbGUobWFwKGdldGludCwgc2VsZi50ay5zcGxpdGxpc3Qoc3RyaW5nKSkpCisgICAgICAgICAgICByZXR1cm4gdHVwbGUobWFwKHNlbGYudGsuZ2V0aW50LCBzZWxmLnRrLnNwbGl0bGlzdChzdHJpbmcpKSkKICAgICBkZWYgX2dldGRvdWJsZXMoc2VsZiwgc3RyaW5nKToKICAgICAgICAgIiIiSW50ZXJuYWwgZnVuY3Rpb24uIiIiCiAgICAgICAgIGlmIHN0cmluZzoKLSAgICAgICAgICAgIHJldHVybiB0dXBsZShtYXAoZ2V0ZG91YmxlLCBzZWxmLnRrLnNwbGl0bGlzdChzdHJpbmcpKSkKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShtYXAoc2VsZi50ay5nZXRkb3VibGUsIHNlbGYudGsuc3BsaXRsaXN0KHN0cmluZykpKQogICAgIGRlZiBfZ2V0Ym9vbGVhbihzZWxmLCBzdHJpbmcpOgogICAgICAgICAiIiJJbnRlcm5hbCBmdW5jdGlvbi4iIiIKICAgICAgICAgaWYgc3RyaW5nOgpAQCAtMTIzMiwxOCArMTI0MywxOCBAQAogICAgICAgICBpZiBsZW4oYXJncykgIT0gbGVuKHNlbGYuX3N1YnN0X2Zvcm1hdCk6IHJldHVybiBhcmdzCiAgICAgICAgIGdldGJvb2xlYW4gPSBzZWxmLnRrLmdldGJvb2xlYW4KIAotICAgICAgICBnZXRpbnQgPSBpbnQKKyAgICAgICAgZ2V0aW50ID0gc2VsZi50ay5nZXRpbnQKICAgICAgICAgZGVmIGdldGludF9ldmVudChzKToKICAgICAgICAgICAgICIiIlRrIGNoYW5nZWQgYmVoYXZpb3IgaW4gOC40LjIsIHJldHVybmluZyAiPz8iIHJhdGhlciBtb3JlIG9mdGVuLiIiIgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBpbnQocykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBnZXRpbnQocykKKyAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgVGNsRXJyb3IpOgogICAgICAgICAgICAgICAgIHJldHVybiBzCiAKICAgICAgICAgbnNpZ24sIGIsIGYsIGgsIGssIHMsIHQsIHcsIHgsIHksIEEsIEUsIEssIE4sIFcsIFQsIFgsIFksIEQgPSBhcmdzCiAgICAgICAgICMgTWlzc2luZzogKGEsIGMsIGQsIG0sIG8sIHYsIEIsIFIpCiAgICAgICAgIGUgPSBFdmVudCgpCi0gICAgICAgICMgc2VyaWFsIGZpZWxkOiB2YWxpZCB2b3IgYWxsIGV2ZW50cworICAgICAgICAjIHNlcmlhbCBmaWVsZDogdmFsaWQgZm9yIGFsbCBldmVudHMKICAgICAgICAgIyBudW1iZXIgb2YgYnV0dG9uOiBCdXR0b25QcmVzcyBhbmQgQnV0dG9uUmVsZWFzZSBldmVudHMgb25seQogICAgICAgICAjIGhlaWdodCBmaWVsZDogQ29uZmlndXJlLCBDb25maWd1cmVSZXF1ZXN0LCBDcmVhdGUsCiAgICAgICAgICMgUmVzaXplUmVxdWVzdCwgYW5kIEV4cG9zZSBldmVudHMgb25seQpAQCAtMTI1MSwxMSArMTI2MiwxMSBAQAogICAgICAgICAjIHRpbWUgZmllbGQ6ICJ2YWxpZCBmb3IgZXZlbnRzIHRoYXQgY29udGFpbiBhIHRpbWUgZmllbGQiCiAgICAgICAgICMgd2lkdGggZmllbGQ6IENvbmZpZ3VyZSwgQ29uZmlndXJlUmVxdWVzdCwgQ3JlYXRlLCBSZXNpemVSZXF1ZXN0LAogICAgICAgICAjIGFuZCBFeHBvc2UgZXZlbnRzIG9ubHkKLSAgICAgICAgIyB4IGZpZWxkOiAidmFsaWQgZm9yIGV2ZW50cyB0aGF0IGNvbnRhaW4gYSB4IGZpZWxkIgorICAgICAgICAjIHggZmllbGQ6ICJ2YWxpZCBmb3IgZXZlbnRzIHRoYXQgY29udGFpbiBhbiB4IGZpZWxkIgogICAgICAgICAjIHkgZmllbGQ6ICJ2YWxpZCBmb3IgZXZlbnRzIHRoYXQgY29udGFpbiBhIHkgZmllbGQiCiAgICAgICAgICMga2V5c3ltIGFzIGRlY2ltYWw6IEtleVByZXNzIGFuZCBLZXlSZWxlYXNlIGV2ZW50cyBvbmx5CiAgICAgICAgICMgeF9yb290LCB5X3Jvb3QgZmllbGRzOiBCdXR0b25QcmVzcywgQnV0dG9uUmVsZWFzZSwgS2V5UHJlc3MsCi0gICAgICAgICMgS2V5UmVsZWFzZSxhbmQgTW90aW9uIGV2ZW50cworICAgICAgICAjIEtleVJlbGVhc2UsIGFuZCBNb3Rpb24gZXZlbnRzCiAgICAgICAgIGUuc2VyaWFsID0gZ2V0aW50KG5zaWduKQogICAgICAgICBlLm51bSA9IGdldGludF9ldmVudChiKQogICAgICAgICB0cnk6IGUuZm9jdXMgPSBnZXRib29sZWFuKGYpCkBAIC0xMjgxLDcgKzEyOTIsNyBAQAogICAgICAgICBlLnlfcm9vdCA9IGdldGludF9ldmVudChZKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlLmRlbHRhID0gZ2V0aW50KEQpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFRjbEVycm9yKToKICAgICAgICAgICAgIGUuZGVsdGEgPSAwCiAgICAgICAgIHJldHVybiAoZSwpCiAgICAgZGVmIF9yZXBvcnRfZXhjZXB0aW9uKHNlbGYpOgpAQCAtMTMzMSwxMSArMTM0MiwxNyBAQAogICAgICAgICBzZWxmLmNvbmZpZ3VyZSh7a2V5OiB2YWx1ZX0pCiAgICAgZGVmIGtleXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWxsIHJlc291cmNlIG5hbWVzIG9mIHRoaXMgd2lkZ2V0LiIiIgotICAgICAgICByZXR1cm4gW3hbMF1bMTpdIGZvciB4IGluCi0gICAgICAgICAgICAgICAgc2VsZi50ay5zcGxpdGxpc3Qoc2VsZi50ay5jYWxsKHNlbGYuX3csICdjb25maWd1cmUnKSldCisgICAgICAgIHNwbGl0bGlzdCA9IHNlbGYudGsuc3BsaXRsaXN0CisgICAgICAgIHJldHVybiBbc3BsaXRsaXN0KHgpWzBdWzE6XSBmb3IgeCBpbgorICAgICAgICAgICAgICAgIHNwbGl0bGlzdChzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2NvbmZpZ3VyZScpKV0KICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSB3aW5kb3cgcGF0aCBuYW1lIG9mIHRoaXMgd2lkZ2V0LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fdworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwlcy4lcyBvYmplY3QgJXM+JyAlICgKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sIHNlbGYuX19jbGFzc19fLl9fcXVhbG5hbWVfXywgc2VsZi5fdykKKwogICAgICMgUGFjayBtZXRob2RzIHRoYXQgYXBwbHkgdG8gdGhlIG1hc3RlcgogICAgIF9ub2FyZ18gPSBbJ19ub2FyZ18nXQogICAgIGRlZiBwYWNrX3Byb3BhZ2F0ZShzZWxmLCBmbGFnPV9ub2FyZ18pOgpAQCAtMTQwMSwxMCArMTQxOCwxMCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBzdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICAgICAgZWxpZiAnLicgaW4gc3ZhbHVlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0ZG91YmxlKHN2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0ZG91YmxlKHN2YWx1ZSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0aW50KHN2YWx1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoc3ZhbHVlKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUY2xFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gdmFsdWUKIApAQCAtMTg1MCw3ICsxODY3LDcgQEAKICAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICAgYmFzZU5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQogICAgICAgICAgICAgYmFzZU5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoYmFzZU5hbWUpCi0gICAgICAgICAgICBpZiBleHQgbm90IGluICgnLnB5JywgJy5weWMnLCAnLnB5bycpOgorICAgICAgICAgICAgaWYgZXh0IG5vdCBpbiAoJy5weScsICcucHljJyk6CiAgICAgICAgICAgICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZSArIGV4dAogICAgICAgICBpbnRlcmFjdGl2ZSA9IDAKICAgICAgICAgc2VsZi50ayA9IF90a2ludGVyLmNyZWF0ZShzY3JlZW5OYW1lLCBiYXNlTmFtZSwgY2xhc3NOYW1lLCBpbnRlcmFjdGl2ZSwgd2FudG9iamVjdHMsIHVzZVRrLCBzeW5jLCB1c2UpCkBAIC0yMTk2LDIxICsyMjEzLDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICdidXR0b24nLCBjbmYsIGt3KQogCi0gICAgZGVmIHRrQnV0dG9uRW50ZXIoc2VsZiwgKmR1bW15KToKLSAgICAgICAgc2VsZi50ay5jYWxsKCd0a0J1dHRvbkVudGVyJywgc2VsZi5fdykKLQotICAgIGRlZiB0a0J1dHRvbkxlYXZlKHNlbGYsICpkdW1teSk6Ci0gICAgICAgIHNlbGYudGsuY2FsbCgndGtCdXR0b25MZWF2ZScsIHNlbGYuX3cpCi0KLSAgICBkZWYgdGtCdXR0b25Eb3duKHNlbGYsICpkdW1teSk6Ci0gICAgICAgIHNlbGYudGsuY2FsbCgndGtCdXR0b25Eb3duJywgc2VsZi5fdykKLQotICAgIGRlZiB0a0J1dHRvblVwKHNlbGYsICpkdW1teSk6Ci0gICAgICAgIHNlbGYudGsuY2FsbCgndGtCdXR0b25VcCcsIHNlbGYuX3cpCi0KLSAgICBkZWYgdGtCdXR0b25JbnZva2Uoc2VsZiwgKmR1bW15KToKLSAgICAgICAgc2VsZi50ay5jYWxsKCd0a0J1dHRvbkludm9rZScsIHNlbGYuX3cpCi0KICAgICBkZWYgZmxhc2goc2VsZik6CiAgICAgICAgICIiIkZsYXNoIHRoZSBidXR0b24uCiAKQEAgLTIyOTcsMTcgKzIyOTksMTcgQEAKICAgICBkZWYgY2FudmFzeChzZWxmLCBzY3JlZW54LCBncmlkc3BhY2luZz1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjYW52YXMgeCBjb29yZGluYXRlIG9mIHBpeGVsIHBvc2l0aW9uIFNDUkVFTlggcm91bmRlZAogICAgICAgICB0byBuZWFyZXN0IG11bHRpcGxlIG9mIEdSSURTUEFDSU5HIHVuaXRzLiIiIgotICAgICAgICByZXR1cm4gZ2V0ZG91YmxlKHNlbGYudGsuY2FsbCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0ZG91YmxlKHNlbGYudGsuY2FsbCgKICAgICAgICAgICAgIHNlbGYuX3csICdjYW52YXN4Jywgc2NyZWVueCwgZ3JpZHNwYWNpbmcpKQogICAgIGRlZiBjYW52YXN5KHNlbGYsIHNjcmVlbnksIGdyaWRzcGFjaW5nPU5vbmUpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGNhbnZhcyB5IGNvb3JkaW5hdGUgb2YgcGl4ZWwgcG9zaXRpb24gU0NSRUVOWSByb3VuZGVkCiAgICAgICAgIHRvIG5lYXJlc3QgbXVsdGlwbGUgb2YgR1JJRFNQQUNJTkcgdW5pdHMuIiIiCi0gICAgICAgIHJldHVybiBnZXRkb3VibGUoc2VsZi50ay5jYWxsKAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRkb3VibGUoc2VsZi50ay5jYWxsKAogICAgICAgICAgICAgc2VsZi5fdywgJ2NhbnZhc3knLCBzY3JlZW55LCBncmlkc3BhY2luZykpCiAgICAgZGVmIGNvb3JkcyhzZWxmLCAqYXJncyk6CiAgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgY29vcmRpbmF0ZXMgZm9yIHRoZSBpdGVtIGdpdmVuIGluIEFSR1MuIiIiCiAgICAgICAgICMgWFhYIFNob3VsZCB1c2UgX2ZsYXR0ZW4gb24gYXJncwotICAgICAgICByZXR1cm4gW2dldGRvdWJsZSh4KSBmb3IgeCBpbgorICAgICAgICByZXR1cm4gW3NlbGYudGsuZ2V0ZG91YmxlKHgpIGZvciB4IGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRrLnNwbGl0bGlzdCgKICAgICAgICAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICdjb29yZHMnKSArIGFyZ3MpKV0KICAgICBkZWYgX2NyZWF0ZShzZWxmLCBpdGVtVHlwZSwgYXJncywga3cpOiAjIEFyZ3M6ICh2YWwsIHZhbCwgLi4uLCBjbmY9e30pCkBAIC0yMzE4LDcgKzIzMjAsNyBAQAogICAgICAgICAgICAgYXJncyA9IGFyZ3NbOi0xXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY25mID0ge30KLSAgICAgICAgcmV0dXJuIGdldGludChzZWxmLnRrLmNhbGwoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludChzZWxmLnRrLmNhbGwoCiAgICAgICAgICAgICBzZWxmLl93LCAnY3JlYXRlJywgaXRlbVR5cGUsCiAgICAgICAgICAgICAqKGFyZ3MgKyBzZWxmLl9vcHRpb25zKGNuZiwga3cpKSkpCiAgICAgZGVmIGNyZWF0ZV9hcmMoc2VsZiwgKmFyZ3MsICoqa3cpOgpAQCAtMjQwMiw3ICsyNDA0LDcgQEAKICAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAnaWN1cnNvcicpICsgYXJncykKICAgICBkZWYgaW5kZXgoc2VsZiwgKmFyZ3MpOgogICAgICAgICAiIiJSZXR1cm4gcG9zaXRpb24gb2YgY3Vyc29yIGFzIGludGVnZXIgaW4gaXRlbSBzcGVjaWZpZWQgaW4gQVJHUy4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludChzZWxmLnRrLmNhbGwoKHNlbGYuX3csICdpbmRleCcpICsgYXJncykpCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludChzZWxmLnRrLmNhbGwoKHNlbGYuX3csICdpbmRleCcpICsgYXJncykpCiAgICAgZGVmIGluc2VydChzZWxmLCAqYXJncyk6CiAgICAgICAgICIiIkluc2VydCBURVhUIGluIGl0ZW0gVEFHT1JJRCBhdCBwb3NpdGlvbiBQT1MuIEFSR1MgbXVzdAogICAgICAgICBiZSBUQUdPUklEIFBPUyBURVhULiIiIgpAQCAtMjUwNCw3ICsyNTA2LDcgQEAKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd0b2dnbGUnKQogCiBjbGFzcyBFbnRyeShXaWRnZXQsIFhWaWV3KToKLSAgICAiIiJFbnRyeSB3aWRnZXQgd2hpY2ggYWxsb3dzIHRvIGRpc3BsYXkgc2ltcGxlIHRleHQuIiIiCisgICAgIiIiRW50cnkgd2lkZ2V0IHdoaWNoIGFsbG93cyBkaXNwbGF5aW5nIHNpbXBsZSB0ZXh0LiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgIiIiQ29uc3RydWN0IGFuIGVudHJ5IHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgTUFTVEVSLgogCkBAIC0yNTI4LDcgKzI1MzAsNyBAQAogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2ljdXJzb3InLCBpbmRleCkKICAgICBkZWYgaW5kZXgoc2VsZiwgaW5kZXgpOgogICAgICAgICAiIiJSZXR1cm4gcG9zaXRpb24gb2YgY3Vyc29yLiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KHNlbGYudGsuY2FsbCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KHNlbGYudGsuY2FsbCgKICAgICAgICAgICAgIHNlbGYuX3csICdpbmRleCcsIGluZGV4KSkKICAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCBzdHJpbmcpOgogICAgICAgICAiIiJJbnNlcnQgU1RSSU5HIGF0IElOREVYLiIiIgpAQCAtMjY0MywxMyArMjY0NSwxMyBAQAogICAgICAgICAiIiJSZXR1cm4gaW5kZXggb2YgaXRlbSBpZGVudGlmaWVkIHdpdGggSU5ERVguIiIiCiAgICAgICAgIGkgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZGV4JywgaW5kZXgpCiAgICAgICAgIGlmIGkgPT0gJ25vbmUnOiByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gZ2V0aW50KGkpCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludChpKQogICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsICplbGVtZW50cyk6CiAgICAgICAgICIiIkluc2VydCBFTEVNRU5UUyBhdCBJTkRFWC4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAnaW5zZXJ0JywgaW5kZXgpICsgZWxlbWVudHMpCiAgICAgZGVmIG5lYXJlc3Qoc2VsZiwgeSk6CiAgICAgICAgICIiIkdldCBpbmRleCBvZiBpdGVtIHdoaWNoIGlzIG5lYXJlc3QgdG8geSBjb29yZGluYXRlIFkuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoc2VsZi50ay5jYWxsKAorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoc2VsZi50ay5jYWxsKAogICAgICAgICAgICAgc2VsZi5fdywgJ25lYXJlc3QnLCB5KSkKICAgICBkZWYgc2Nhbl9tYXJrKHNlbGYsIHgsIHkpOgogICAgICAgICAiIiJSZW1lbWJlciB0aGUgY3VycmVudCBYLCBZIGNvb3JkaW5hdGVzLiIiIgpAQCAtMjY4Myw3ICsyNjg1LDcgQEAKICAgICBzZWxlY3Rfc2V0ID0gc2VsZWN0aW9uX3NldAogICAgIGRlZiBzaXplKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdGJveC4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludChzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NpemUnKSkKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2l6ZScpKQogICAgIGRlZiBpdGVtY2dldChzZWxmLCBpbmRleCwgb3B0aW9uKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSByZXNvdXJjZSB2YWx1ZSBmb3IgYW4gSVRFTSBhbmQgYW4gT1BUSU9OLiIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKApAQCAtMjcwMCw3ICsyNzAyLDcgQEAKICAgICBpdGVtY29uZmlnID0gaXRlbWNvbmZpZ3VyZQogCiBjbGFzcyBNZW51KFdpZGdldCk6Ci0gICAgIiIiTWVudSB3aWRnZXQgd2hpY2ggYWxsb3dzIHRvIGRpc3BsYXkgbWVudSBiYXJzLCBwdWxsLWRvd24gbWVudXMgYW5kIHBvcC11cCBtZW51cy4iIiIKKyAgICAiIiJNZW51IHdpZGdldCB3aGljaCBhbGxvd3MgZGlzcGxheWluZyBtZW51IGJhcnMsIHB1bGwtZG93biBtZW51cyBhbmQgcG9wLXVwIG1lbnVzLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgIiIiQ29uc3RydWN0IG1lbnUgd2lkZ2V0IHdpdGggdGhlIHBhcmVudCBNQVNURVIuCiAKQEAgLTI3MDksMzUgKzI3MTEsMTUgQEAKICAgICAgICAgZGlzYWJsZWRmb3JlZ3JvdW5kLCBmZywgZm9udCwgZm9yZWdyb3VuZCwgcG9zdGNvbW1hbmQsIHJlbGllZiwKICAgICAgICAgc2VsZWN0Y29sb3IsIHRha2Vmb2N1cywgdGVhcm9mZiwgdGVhcm9mZmNvbW1hbmQsIHRpdGxlLCB0eXBlLiIiIgogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAnbWVudScsIGNuZiwga3cpCisgICAgZGVmIHRrX3BvcHVwKHNlbGYsIHgsIHksIGVudHJ5PSIiKToKKyAgICAgICAgIiIiUG9zdCB0aGUgbWVudSBhdCBwb3NpdGlvbiBYLFkgd2l0aCBlbnRyeSBFTlRSWS4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKCd0a19wb3B1cCcsIHNlbGYuX3csIHgsIHksIGVudHJ5KQogICAgIGRlZiB0a19iaW5kRm9yVHJhdmVyc2FsKHNlbGYpOgogICAgICAgICAjIG9ic29sZXRlIHNpbmNlIFRrIDQuMAogICAgICAgICBpbXBvcnQgd2FybmluZ3MKICAgICAgICAgd2FybmluZ3Mud2FybigndGtfYmluZEZvclRyYXZlcnNhbCgpIGRvZXMgbm90aGluZyBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICd3aWxsIGJlIHJlbW92ZWQgaW4gMy42JywKICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICBkZWYgdGtfbWJQb3N0KHNlbGYpOgotICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX21iUG9zdCcsIHNlbGYuX3cpCi0gICAgZGVmIHRrX21iVW5wb3N0KHNlbGYpOgotICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX21iVW5wb3N0JykKLSAgICBkZWYgdGtfdHJhdmVyc2VUb01lbnUoc2VsZiwgY2hhcik6Ci0gICAgICAgIHNlbGYudGsuY2FsbCgndGtfdHJhdmVyc2VUb01lbnUnLCBzZWxmLl93LCBjaGFyKQotICAgIGRlZiB0a190cmF2ZXJzZVdpdGhpbk1lbnUoc2VsZiwgY2hhcik6Ci0gICAgICAgIHNlbGYudGsuY2FsbCgndGtfdHJhdmVyc2VXaXRoaW5NZW51Jywgc2VsZi5fdywgY2hhcikKLSAgICBkZWYgdGtfZ2V0TWVudUJ1dHRvbnMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoJ3RrX2dldE1lbnVCdXR0b25zJywgc2VsZi5fdykKLSAgICBkZWYgdGtfbmV4dE1lbnUoc2VsZiwgY291bnQpOgotICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX25leHRNZW51JywgY291bnQpCi0gICAgZGVmIHRrX25leHRNZW51RW50cnkoc2VsZiwgY291bnQpOgotICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX25leHRNZW51RW50cnknLCBjb3VudCkKLSAgICBkZWYgdGtfaW52b2tlTWVudShzZWxmKToKLSAgICAgICAgc2VsZi50ay5jYWxsKCd0a19pbnZva2VNZW51Jywgc2VsZi5fdykKLSAgICBkZWYgdGtfZmlyc3RNZW51KHNlbGYpOgotICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX2ZpcnN0TWVudScsIHNlbGYuX3cpCi0gICAgZGVmIHRrX21iQnV0dG9uRG93bihzZWxmKToKLSAgICAgICAgc2VsZi50ay5jYWxsKCd0a19tYkJ1dHRvbkRvd24nLCBzZWxmLl93KQotICAgIGRlZiB0a19wb3B1cChzZWxmLCB4LCB5LCBlbnRyeT0iIik6Ci0gICAgICAgICIiIlBvc3QgdGhlIG1lbnUgYXQgcG9zaXRpb24gWCxZIHdpdGggZW50cnkgRU5UUlkuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbCgndGtfcG9wdXAnLCBzZWxmLl93LCB4LCB5LCBlbnRyeSkKICAgICBkZWYgYWN0aXZhdGUoc2VsZiwgaW5kZXgpOgogICAgICAgICAiIiJBY3RpdmF0ZSBlbnRyeSBhdCBJTkRFWC4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdhY3RpdmF0ZScsIGluZGV4KQpAQCAtMjc5NSw3ICsyNzc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVjb21tYW5kKGMpCiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnZGVsZXRlJywgaW5kZXgxLCBpbmRleDIpCiAgICAgZGVmIGVudHJ5Y2dldChzZWxmLCBpbmRleCwgb3B0aW9uKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSByZXNvdXJjZSB2YWx1ZSBvZiBhbiBtZW51IGl0ZW0gZm9yIE9QVElPTiBhdCBJTkRFWC4iIiIKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZXNvdXJjZSB2YWx1ZSBvZiBhIG1lbnUgaXRlbSBmb3IgT1BUSU9OIGF0IElOREVYLiIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdlbnRyeWNnZXQnLCBpbmRleCwgJy0nICsgb3B0aW9uKQogICAgIGRlZiBlbnRyeWNvbmZpZ3VyZShzZWxmLCBpbmRleCwgY25mPU5vbmUsICoqa3cpOgogICAgICAgICAiIiJDb25maWd1cmUgYSBtZW51IGl0ZW0gYXQgSU5ERVguIiIiCkBAIC0yODA1LDcgKzI3ODcsNyBAQAogICAgICAgICAiIiJSZXR1cm4gdGhlIGluZGV4IG9mIGEgbWVudSBpdGVtIGlkZW50aWZpZWQgYnkgSU5ERVguIiIiCiAgICAgICAgIGkgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZGV4JywgaW5kZXgpCiAgICAgICAgIGlmIGkgPT0gJ25vbmUnOiByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gZ2V0aW50KGkpCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludChpKQogICAgIGRlZiBpbnZva2Uoc2VsZiwgaW5kZXgpOgogICAgICAgICAiIiJJbnZva2UgYSBtZW51IGl0ZW0gaWRlbnRpZmllZCBieSBJTkRFWCBhbmQgZXhlY3V0ZQogICAgICAgICB0aGUgYXNzb2NpYXRlZCBjb21tYW5kLiIiIgpAQCAtMjgyMiwxMCArMjgwNCwxMCBAQAogICAgIGRlZiB4cG9zaXRpb24oc2VsZiwgaW5kZXgpOiAjIG5ldyBpbiBUayA4LjUKICAgICAgICAgIiIiUmV0dXJuIHRoZSB4LXBvc2l0aW9uIG9mIHRoZSBsZWZ0bW9zdCBwaXhlbCBvZiB0aGUgbWVudSBpdGVtCiAgICAgICAgIGF0IElOREVYLiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KHNlbGYudGsuY2FsbChzZWxmLl93LCAneHBvc2l0aW9uJywgaW5kZXgpKQorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRpbnQoc2VsZi50ay5jYWxsKHNlbGYuX3csICd4cG9zaXRpb24nLCBpbmRleCkpCiAgICAgZGVmIHlwb3NpdGlvbihzZWxmLCBpbmRleCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgeS1wb3NpdGlvbiBvZiB0aGUgdG9wbW9zdCBwaXhlbCBvZiB0aGUgbWVudSBpdGVtIGF0IElOREVYLiIiIgotICAgICAgICByZXR1cm4gZ2V0aW50KHNlbGYudGsuY2FsbCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KHNlbGYudGsuY2FsbCgKICAgICAgICAgICAgIHNlbGYuX3csICd5cG9zaXRpb24nLCBpbmRleCkpCiAKIGNsYXNzIE1lbnVidXR0b24oV2lkZ2V0KToKQEAgLTI4ODEsOSArMjg2Myw5IEBACiAgICAgICAgICIiIkdldCB0aGUgY3VycmVudCB2YWx1ZSBhcyBpbnRlZ2VyIG9yIGZsb2F0LiIiIgogICAgICAgICB2YWx1ZSA9IHNlbGYudGsuY2FsbChzZWxmLl93LCAnZ2V0JykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGdldGludCh2YWx1ZSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0ZG91YmxlKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KHZhbHVlKQorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFRjbEVycm9yKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGRvdWJsZSh2YWx1ZSkKICAgICBkZWYgc2V0KHNlbGYsIHZhbHVlKToKICAgICAgICAgIiIiU2V0IHRoZSB2YWx1ZSB0byBWQUxVRS4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdzZXQnLCB2YWx1ZSkKQEAgLTI5MTAsMTkgKzI4OTIsMjMgQEAKICAgICAgICAgcmVsaWVmLCByZXBlYXRkZWxheSwgcmVwZWF0aW50ZXJ2YWwsIHRha2Vmb2N1cywKICAgICAgICAgdHJvdWdoY29sb3IsIHdpZHRoLiIiIgogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAnc2Nyb2xsYmFyJywgY25mLCBrdykKLSAgICBkZWYgYWN0aXZhdGUoc2VsZiwgaW5kZXgpOgotICAgICAgICAiIiJEaXNwbGF5IHRoZSBlbGVtZW50IGF0IElOREVYIHdpdGggYWN0aXZlYmFja2dyb3VuZCBhbmQgYWN0aXZlcmVsaWVmLgotICAgICAgICBJTkRFWCBjYW4gYmUgImFycm93MSIsInNsaWRlciIgb3IgImFycm93MiIuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnYWN0aXZhdGUnLCBpbmRleCkKKyAgICBkZWYgYWN0aXZhdGUoc2VsZiwgaW5kZXg9Tm9uZSk6CisgICAgICAgICIiIk1hcmtzIHRoZSBlbGVtZW50IGluZGljYXRlZCBieSBpbmRleCBhcyBhY3RpdmUuCisgICAgICAgIFRoZSBvbmx5IGluZGV4IHZhbHVlcyB1bmRlcnN0b29kIGJ5IHRoaXMgbWV0aG9kIGFyZSAiYXJyb3cxIiwKKyAgICAgICAgInNsaWRlciIsIG9yICJhcnJvdzIiLiAgSWYgYW55IG90aGVyIHZhbHVlIGlzIHNwZWNpZmllZCB0aGVuIG5vCisgICAgICAgIGVsZW1lbnQgb2YgdGhlIHNjcm9sbGJhciB3aWxsIGJlIGFjdGl2ZS4gIElmIGluZGV4IGlzIG5vdCBzcGVjaWZpZWQsCisgICAgICAgIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBhY3RpdmUsCisgICAgICAgIG9yIE5vbmUgaWYgbm8gZWxlbWVudCBpcyBhY3RpdmUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2FjdGl2YXRlJywgaW5kZXgpIG9yIE5vbmUKICAgICBkZWYgZGVsdGEoc2VsZiwgZGVsdGF4LCBkZWx0YXkpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGZyYWN0aW9uYWwgY2hhbmdlIG9mIHRoZSBzY3JvbGxiYXIgc2V0dGluZyBpZiBpdAogICAgICAgICB3b3VsZCBiZSBtb3ZlZCBieSBERUxUQVggb3IgREVMVEFZIHBpeGVscy4iIiIKLSAgICAgICAgcmV0dXJuIGdldGRvdWJsZSgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0ZG91YmxlKAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdkZWx0YScsIGRlbHRheCwgZGVsdGF5KSkKICAgICBkZWYgZnJhY3Rpb24oc2VsZiwgeCwgeSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgZnJhY3Rpb25hbCB2YWx1ZSB3aGljaCBjb3JyZXNwb25kcyB0byBhIHNsaWRlcgogICAgICAgICBwb3NpdGlvbiBvZiBYLFkuIiIiCi0gICAgICAgIHJldHVybiBnZXRkb3VibGUoc2VsZi50ay5jYWxsKHNlbGYuX3csICdmcmFjdGlvbicsIHgsIHkpKQorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRkb3VibGUoc2VsZi50ay5jYWxsKHNlbGYuX3csICdmcmFjdGlvbicsIHgsIHkpKQogICAgIGRlZiBpZGVudGlmeShzZWxmLCB4LCB5KToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBlbGVtZW50IHVuZGVyIHBvc2l0aW9uIFgsWSBhcyBvbmUgb2YKICAgICAgICAgImFycm93MSIsInNsaWRlciIsImFycm93MiIgb3IgIiIuIiIiCkBAIC0yOTMxLDEwICsyOTE3LDEwIEBACiAgICAgICAgICIiIlJldHVybiB0aGUgY3VycmVudCBmcmFjdGlvbmFsIHZhbHVlcyAodXBwZXIgYW5kIGxvd2VyIGVuZCkKICAgICAgICAgb2YgdGhlIHNsaWRlciBwb3NpdGlvbi4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYuX3csICdnZXQnKSkKLSAgICBkZWYgc2V0KHNlbGYsICphcmdzKToKKyAgICBkZWYgc2V0KHNlbGYsIGZpcnN0LCBsYXN0KToKICAgICAgICAgIiIiU2V0IHRoZSBmcmFjdGlvbmFsIHZhbHVlcyBvZiB0aGUgc2xpZGVyIHBvc2l0aW9uICh1cHBlciBhbmQKICAgICAgICAgbG93ZXIgZW5kcyBhcyB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEpLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICdzZXQnKSArIGFyZ3MpCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2V0JywgZmlyc3QsIGxhc3QpCiAKIAogCkBAIC0yOTY5LDE0ICsyOTU1LDYgQEAKICAgICAgICAgYm94IG9mIHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIGNoYXJhY3RlciBhdCB0aGUgZ2l2ZW4gaW5kZXguIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKAogICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnYmJveCcsIGluZGV4KSkgb3IgTm9uZQotICAgIGRlZiB0a190ZXh0U2VsZWN0VG8oc2VsZiwgaW5kZXgpOgotICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX3RleHRTZWxlY3RUbycsIHNlbGYuX3csIGluZGV4KQotICAgIGRlZiB0a190ZXh0QmFja3NwYWNlKHNlbGYpOgotICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX3RleHRCYWNrc3BhY2UnLCBzZWxmLl93KQotICAgIGRlZiB0a190ZXh0SW5kZXhDbG9zZXIoc2VsZiwgYSwgYiwgYyk6Ci0gICAgICAgIHNlbGYudGsuY2FsbCgndGtfdGV4dEluZGV4Q2xvc2VyJywgc2VsZi5fdywgYSwgYiwgYykKLSAgICBkZWYgdGtfdGV4dFJlc2V0QW5jaG9yKHNlbGYsIGluZGV4KToKLSAgICAgICAgc2VsZi50ay5jYWxsKCd0a190ZXh0UmVzZXRBbmNob3InLCBzZWxmLl93LCBpbmRleCkKICAgICBkZWYgY29tcGFyZShzZWxmLCBpbmRleDEsIG9wLCBpbmRleDIpOgogICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBiZXR3ZWVuIGluZGV4IElOREVYMSBhbmQgaW5kZXggSU5ERVgyIHRoZQogICAgICAgICByZWxhdGlvbiBPUCBpcyBzYXRpc2ZpZWQuIE9QIGlzIG9uZSBvZiA8LCA8PSwgPT0sID49LCA+LCBvciAhPS4iIiIKQEAgLTMxNjgsNyArMzE0Niw3IEBACiAgICAgICAgICIiIkNyZWF0ZXMgYSBwZWVyIHRleHQgd2lkZ2V0IHdpdGggdGhlIGdpdmVuIG5ld1BhdGhOYW1lLCBhbmQgYW55CiAgICAgICAgIG9wdGlvbmFsIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQnkgZGVmYXVsdCB0aGUgcGVlciB3aWxsCiAgICAgICAgIGhhdmUgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBsaW5lIGFzIHRoZSBwYXJlbnQgd2lkZ2V0LCBidXQKLSAgICAgICAgdGhlc2UgY2FuIGJlIG92ZXJyaWRlbiB3aXRoIHRoZSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIiIiCisgICAgICAgIHRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdwZWVyJywgJ2NyZWF0ZScsIG5ld1BhdGhOYW1lLAogICAgICAgICAgICAgKnNlbGYuX29wdGlvbnMoY25mLCBrdykpCiAgICAgZGVmIHBlZXJfbmFtZXMoc2VsZik6ICMgbmV3IGluIFRrIDguNQpAQCAtMzQwMSwxNCArMzM3OSwxNCBAQAogICAgIGNvbmZpZyA9IGNvbmZpZ3VyZQogICAgIGRlZiBoZWlnaHQoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSBpbWFnZS4iIiIKLSAgICAgICAgcmV0dXJuIGdldGludCgKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0aW50KAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKCdpbWFnZScsICdoZWlnaHQnLCBzZWxmLm5hbWUpKQogICAgIGRlZiB0eXBlKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGltZ2FnZSwgZS5nLiAicGhvdG8iIG9yICJiaXRtYXAiLiIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKCdpbWFnZScsICd0eXBlJywgc2VsZi5uYW1lKQogICAgIGRlZiB3aWR0aChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgaW1hZ2UuIiIiCi0gICAgICAgIHJldHVybiBnZXRpbnQoCisgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGludCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnaW1hZ2UnLCAnd2lkdGgnLCBzZWxmLm5hbWUpKQogCiBjbGFzcyBQaG90b0ltYWdlKEltYWdlKToKQEAgLTM0MzQsMTYgKzM0MTIsMjAgQEAKICAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZShtYXN0ZXI9c2VsZi50aykKICAgICAgICAgc2VsZi50ay5jYWxsKGRlc3RJbWFnZSwgJ2NvcHknLCBzZWxmLm5hbWUpCiAgICAgICAgIHJldHVybiBkZXN0SW1hZ2UKLSAgICBkZWYgem9vbShzZWxmLHgseT0nJyk6CisgICAgZGVmIHpvb20oc2VsZiwgeCwgeT0nJyk6CiAgICAgICAgICIiIlJldHVybiBhIG5ldyBQaG90b0ltYWdlIHdpdGggdGhlIHNhbWUgaW1hZ2UgYXMgdGhpcyB3aWRnZXQKLSAgICAgICAgYnV0IHpvb20gaXQgd2l0aCBYIGFuZCBZLiIiIgorICAgICAgICBidXQgem9vbSBpdCB3aXRoIGEgZmFjdG9yIG9mIHggaW4gdGhlIFggZGlyZWN0aW9uIGFuZCB5IGluIHRoZSBZCisgICAgICAgIGRpcmVjdGlvbi4gIElmIHkgaXMgbm90IGdpdmVuLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB4LgorICAgICAgICAiIiIKICAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZShtYXN0ZXI9c2VsZi50aykKICAgICAgICAgaWYgeT09Jyc6IHk9eAogICAgICAgICBzZWxmLnRrLmNhbGwoZGVzdEltYWdlLCAnY29weScsIHNlbGYubmFtZSwgJy16b29tJyx4LHkpCiAgICAgICAgIHJldHVybiBkZXN0SW1hZ2UKLSAgICBkZWYgc3Vic2FtcGxlKHNlbGYseCx5PScnKToKKyAgICBkZWYgc3Vic2FtcGxlKHNlbGYsIHgsIHk9JycpOgogICAgICAgICAiIiJSZXR1cm4gYSBuZXcgUGhvdG9JbWFnZSBiYXNlZCBvbiB0aGUgc2FtZSBpbWFnZSBhcyB0aGlzIHdpZGdldAotICAgICAgICBidXQgdXNlIG9ubHkgZXZlcnkgWHRoIG9yIFl0aCBwaXhlbC4iIiIKKyAgICAgICAgYnV0IHVzZSBvbmx5IGV2ZXJ5IFh0aCBvciBZdGggcGl4ZWwuICBJZiB5IGlzIG5vdCBnaXZlbiwgdGhlCisgICAgICAgIGRlZmF1bHQgdmFsdWUgaXMgdGhlIHNhbWUgYXMgeC4KKyAgICAgICAgIiIiCiAgICAgICAgIGRlc3RJbWFnZSA9IFBob3RvSW1hZ2UobWFzdGVyPXNlbGYudGspCiAgICAgICAgIGlmIHk9PScnOiB5PXgKICAgICAgICAgc2VsZi50ay5jYWxsKGRlc3RJbWFnZSwgJ2NvcHknLCBzZWxmLm5hbWUsICctc3Vic2FtcGxlJyx4LHkpCkBAIC0zODU0LDM1ICszODM2LDEyIEBACiAgICAgICAgICIiIlJldHVybnMgYW4gb3JkZXJlZCBsaXN0IG9mIHRoZSBjaGlsZCBwYW5lcy4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXRsaXN0KHNlbGYudGsuY2FsbChzZWxmLl93LCAncGFuZXMnKSkKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBFeHRlbnNpb25zOgotCi1jbGFzcyBTdHVkYnV0dG9uKEJ1dHRvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgotICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAnc3R1ZGJ1dHRvbicsIGNuZiwga3cpCi0gICAgICAgIHNlbGYuYmluZCgnPEFueS1FbnRlcj4nLCAgICAgICBzZWxmLnRrQnV0dG9uRW50ZXIpCi0gICAgICAgIHNlbGYuYmluZCgnPEFueS1MZWF2ZT4nLCAgICAgICBzZWxmLnRrQnV0dG9uTGVhdmUpCi0gICAgICAgIHNlbGYuYmluZCgnPDE+JywgICAgICAgICAgICAgICBzZWxmLnRrQnV0dG9uRG93bikKLSAgICAgICAgc2VsZi5iaW5kKCc8QnV0dG9uUmVsZWFzZS0xPicsIHNlbGYudGtCdXR0b25VcCkKLQotY2xhc3MgVHJpYnV0dG9uKEJ1dHRvbik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgotICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAndHJpYnV0dG9uJywgY25mLCBrdykKLSAgICAgICAgc2VsZi5iaW5kKCc8QW55LUVudGVyPicsICAgICAgIHNlbGYudGtCdXR0b25FbnRlcikKLSAgICAgICAgc2VsZi5iaW5kKCc8QW55LUxlYXZlPicsICAgICAgIHNlbGYudGtCdXR0b25MZWF2ZSkKLSAgICAgICAgc2VsZi5iaW5kKCc8MT4nLCAgICAgICAgICAgICAgIHNlbGYudGtCdXR0b25Eb3duKQotICAgICAgICBzZWxmLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+Jywgc2VsZi50a0J1dHRvblVwKQotICAgICAgICBzZWxmWydmZyddICAgICAgICAgICAgICAgPSBzZWxmWydiZyddCi0gICAgICAgIHNlbGZbJ2FjdGl2ZWJhY2tncm91bmQnXSA9IHNlbGZbJ2JnJ10KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBUZXN0OgogCiBkZWYgX3Rlc3QoKToKICAgICByb290ID0gVGsoKQogICAgIHRleHQgPSAiVGhpcyBpcyBUY2wvVGsgdmVyc2lvbiAlcyIgJSBUY2xWZXJzaW9uCi0gICAgaWYgVGNsVmVyc2lvbiA+PSA4LjE6Ci0gICAgICAgIHRleHQgKz0gIlxuVGhpcyBzaG91bGQgYmUgYSBjZWRpbGxhOiBceGU3IgorICAgIHRleHQgKz0gIlxuVGhpcyBzaG91bGQgYmUgYSBjZWRpbGxhOiBceGU3IgogICAgIGxhYmVsID0gTGFiZWwocm9vdCwgdGV4dD10ZXh0KQogICAgIGxhYmVsLnBhY2soKQogICAgIHRlc3QgPSBCdXR0b24ocm9vdCwgdGV4dD0iQ2xpY2sgbWUhIiwKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL19maXgucHkgYi9MaWIvdGtpbnRlci9fZml4LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTg4NzM0Li4wMDAwMDAwCi0tLSBhL0xpYi90a2ludGVyL19maXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi1pbXBvcnQgc3lzLCBvcwotCi0jIERlbGF5IGltcG9ydCBfdGtpbnRlciB1bnRpbCB3ZSBoYXZlIHNldCBUQ0xfTElCUkFSWSwKLSMgc28gdGhhdCBUY2xfRmluZEV4ZWN1dGFibGUgaGFzIGEgY2hhbmNlIHRvIGxvY2F0ZSBpdHMKLSMgZW5jb2RpbmcgZGlyZWN0b3J5LgotCi0jIFVuZm9ydHVuYXRlbHksIHdlIGNhbm5vdCBrbm93IHRoZSBUQ0xfTElCUkFSWSBkaXJlY3RvcnkKLSMgaWYgd2UgZG9uJ3Qga25vdyB0aGUgdGNsIHZlcnNpb24sIHdoaWNoIHdlIGNhbm5vdCBmaW5kIG91dAotIyB3aXRob3V0IGltcG9ydCBUY2wuIEZvcnR1bmF0ZWx5LCBUY2wgd2lsbCBpdHNlbGYgbG9vayBpbgotIyA8VENMX0xJQlJBUlk+XC4uXHRjbDxUQ0xfVkVSU0lPTj4sIHNvIGFueXRoaW5nIGNsb3NlIHRvCi0jIHRoZSByZWFsIFRjbCBsaWJyYXJ5IHdpbGwgZG8uCi0KLSMgRXhwYW5kIHN5bWJvbGljIGxpbmtzIG9uIFZpc3RhCi10cnk6Ci0gICAgaW1wb3J0IGN0eXBlcwotICAgIGN0eXBlcy53aW5kbGwua2VybmVsMzIuR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlVwotZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgIGRlZiBjb252ZXJ0X3BhdGgocyk6Ci0gICAgICAgIHJldHVybiBzCi1lbHNlOgotICAgIGRlZiBjb252ZXJ0X3BhdGgocyk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgotICAgICAgICAgICAgcyA9IHMuZGVjb2RlKCJtYmNzIikKLSAgICAgICAgaGRpciA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuXAotICAgICAgICAgICAgQ3JlYXRlRmlsZVcocywgMHg4MCwgICAgIyBGSUxFX1JFQURfQVRUUklCVVRFUwotICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgIyBGSUxFX1NIQVJFX1JFQUQKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIDMsICAgICMgT1BFTl9FWElTVElORwotICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMCwgIyBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUwotICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkKLSAgICAgICAgaWYgaGRpciA9PSAtMToKLSAgICAgICAgICAgICMgQ2Fubm90IG9wZW4gZGlyZWN0b3J5LCBnaXZlIHVwCi0gICAgICAgICAgICByZXR1cm4gcwotICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCIiLCAzMjc2OCkKLSAgICAgICAgcmVzID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5cCi0gICAgICAgICAgICBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKGhkaXIsIGJ1ZiwgbGVuKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApICMgVk9MVU1FX05BTUVfRE9TCi0gICAgICAgIGN0eXBlcy53aW5kbGwua2VybmVsMzIuQ2xvc2VIYW5kbGUoaGRpcikKLSAgICAgICAgaWYgcmVzID09IDA6Ci0gICAgICAgICAgICAjIENvbnZlcnNpb24gZmFpbGVkIChlLmcuIG5ldHdvcmsgbG9jYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gcwotICAgICAgICBzID0gYnVmWzpyZXNdCi0gICAgICAgICMgSWdub3JlIGxlYWRpbmcgXFw/XAotICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoIlxcXFw/XFwiKToKLSAgICAgICAgICAgIHMgPSBzWzQ6XQotICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoIlVOQyIpOgotICAgICAgICAgICAgcyA9ICJcXCIgKyBzWzM6XQotICAgICAgICByZXR1cm4gcwotCi1wcmVmaXggPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LCJ0Y2wiKQotaWYgbm90IG9zLnBhdGguZXhpc3RzKHByZWZpeCk6Ci0gICAgIyBkZXZkaXIvZXh0ZXJuYWxzL3RjbHRrL2xpYgotICAgIHByZWZpeCA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsICJleHRlcm5hbHMiLCAidGNsdGsiLCAibGliIikKLSAgICBwcmVmaXggPSBvcy5wYXRoLmFic3BhdGgocHJlZml4KQotIyBpZiB0aGlzIGRvZXMgbm90IGV4aXN0LCBubyBmdXJ0aGVyIHNlYXJjaCBpcyBuZWVkZWQKLWlmIG9zLnBhdGguZXhpc3RzKHByZWZpeCk6Ci0gICAgcHJlZml4ID0gY29udmVydF9wYXRoKHByZWZpeCkKLSAgICBpZiAiVENMX0xJQlJBUlkiIG5vdCBpbiBvcy5lbnZpcm9uOgotICAgICAgICBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKHByZWZpeCk6Ci0gICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoInRjbCIpOgotICAgICAgICAgICAgICAgIHRjbGRpciA9IG9zLnBhdGguam9pbihwcmVmaXgsbmFtZSkKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHRjbGRpcik6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlRDTF9MSUJSQVJZIl0gPSB0Y2xkaXIKLSAgICAjIENvbXB1dGUgVEtfTElCUkFSWSwga25vd2luZyB0aGF0IGl0IGhhcyB0aGUgc2FtZSB2ZXJzaW9uCi0gICAgIyBhcyBUY2wKLSAgICBpbXBvcnQgX3RraW50ZXIKLSAgICB2ZXIgPSBzdHIoX3RraW50ZXIuVENMX1ZFUlNJT04pCi0gICAgaWYgIlRLX0xJQlJBUlkiIG5vdCBpbiBvcy5lbnZpcm9uOgotICAgICAgICB2ID0gb3MucGF0aC5qb2luKHByZWZpeCwgJ3RrJyt2ZXIpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih2LCAidGNsSW5kZXgiKSk6Ci0gICAgICAgICAgICBvcy5lbnZpcm9uWydUS19MSUJSQVJZJ10gPSB2Ci0gICAgIyBXZSBkb24ndCBrbm93IHRoZSBUaXggdmVyc2lvbiwgc28gd2UgbXVzdCBzZWFyY2ggdGhlIGVudGlyZQotICAgICMgZGlyZWN0b3J5Ci0gICAgaWYgIlRJWF9MSUJSQVJZIiBub3QgaW4gb3MuZW52aXJvbjoKLSAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwcmVmaXgpOgotICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJ0aXgiKToKLSAgICAgICAgICAgICAgICB0aXhkaXIgPSBvcy5wYXRoLmpvaW4ocHJlZml4LG5hbWUpCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcih0aXhkaXIpOgotICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJUSVhfTElCUkFSWSJdID0gdGl4ZGlyCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9kbmQucHkgYi9MaWIvdGtpbnRlci9kbmQucHkKaW5kZXggNTVmMDc3Ni4uZTA5NzFhMiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvZG5kLnB5CisrKyBiL0xpYi90a2ludGVyL2RuZC5weQpAQCAtMyw3ICszLDcgQEAKIFRoaXMgaXMgdmVyeSBwcmVsaW1pbmFyeS4gIEkgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBkbmQgKndpdGhpbiogb25lCiBhcHBsaWNhdGlvbiwgYmV0d2VlbiBkaWZmZXJlbnQgd2luZG93cyAob3Igd2l0aGluIHRoZSBzYW1lIHdpbmRvdykuCiAKLUkgYW4gdHJ5aW5nIHRvIG1ha2UgdGhpcyBhcyBnZW5lcmljIGFzIHBvc3NpYmxlIC0tIG5vdCBkZXBlbmRlbnQgb24KK0kgYW0gdHJ5aW5nIHRvIG1ha2UgdGhpcyBhcyBnZW5lcmljIGFzIHBvc3NpYmxlIC0tIG5vdCBkZXBlbmRlbnQgb24KIHRoZSB1c2Ugb2YgYSBwYXJ0aWN1bGFyIHdpZGdldCBvciBpY29uIHR5cGUsIGV0Yy4gIEkgYWxzbyBob3BlIHRoYXQKIHRoaXMgd2lsbCB3b3JrIHdpdGggUG13LgogCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9mb250LnB5IGIvTGliL3RraW50ZXIvZm9udC5weQppbmRleCBiOTY2NzMyLi4xMzY0MjU3IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci9mb250LnB5CisrKyBiL0xpYi90a2ludGVyL2ZvbnQucHkKQEAgLTExMiw4ICsxMTIsNiBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzZWxmLmRlbGV0ZV9mb250OgogICAgICAgICAgICAgICAgIHNlbGYuX2NhbGwoImZvbnQiLCAiZGVsZXRlIiwgc2VsZi5uYW1lKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KToKLSAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBwYXNzCiAKQEAgLTE1Myw3ICsxNTEsNyBAQAogICAgICAgICBhcmdzID0gKHRleHQsKQogICAgICAgICBpZiBkaXNwbGF5b2Y6CiAgICAgICAgICAgICBhcmdzID0gKCctZGlzcGxheW9mJywgZGlzcGxheW9mLCB0ZXh0KQotICAgICAgICByZXR1cm4gaW50KHNlbGYuX2NhbGwoImZvbnQiLCAibWVhc3VyZSIsIHNlbGYubmFtZSwgKmFyZ3MpKQorICAgICAgICByZXR1cm4gc2VsZi5fdGsuZ2V0aW50KHNlbGYuX2NhbGwoImZvbnQiLCAibWVhc3VyZSIsIHNlbGYubmFtZSwgKmFyZ3MpKQogCiAgICAgZGVmIG1ldHJpY3Moc2VsZiwgKm9wdGlvbnMsICoqa3cpOgogICAgICAgICAiIiJSZXR1cm4gZm9udCBtZXRyaWNzLgpAQCAtMTY2LDEzICsxNjQsMTMgQEAKICAgICAgICAgICAgIGFyZ3MgPSAoJy1kaXNwbGF5b2YnLCBkaXNwbGF5b2YpCiAgICAgICAgIGlmIG9wdGlvbnM6CiAgICAgICAgICAgICBhcmdzID0gYXJncyArIHNlbGYuX2dldChvcHRpb25zKQotICAgICAgICAgICAgcmV0dXJuIGludCgKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl90ay5nZXRpbnQoCiAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbCgiZm9udCIsICJtZXRyaWNzIiwgc2VsZi5uYW1lLCAqYXJncykpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXMgPSBzZWxmLl9zcGxpdChzZWxmLl9jYWxsKCJmb250IiwgIm1ldHJpY3MiLCBzZWxmLm5hbWUsICphcmdzKSkKICAgICAgICAgICAgIG9wdGlvbnMgPSB7fQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHJlcyksIDIpOgotICAgICAgICAgICAgICAgIG9wdGlvbnNbcmVzW2ldWzE6XV0gPSBpbnQocmVzW2krMV0pCisgICAgICAgICAgICAgICAgb3B0aW9uc1tyZXNbaV1bMTpdXSA9IHNlbGYuX3RrLmdldGludChyZXNbaSsxXSkKICAgICAgICAgICAgIHJldHVybiBvcHRpb25zCiAKIApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvc2ltcGxlZGlhbG9nLnB5IGIvTGliL3RraW50ZXIvc2ltcGxlZGlhbG9nLnB5CmluZGV4IDQ1MzAyYjQuLmE5NWY1NTEgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3NpbXBsZWRpYWxvZy5weQorKysgYi9MaWIvdGtpbnRlci9zaW1wbGVkaWFsb2cucHkKQEAgLTMyNSw3ICszMjUsNyBAQAogY2xhc3MgX1F1ZXJ5SW50ZWdlcihfUXVlcnlEaWFsb2cpOgogICAgIGVycm9ybWVzc2FnZSA9ICJOb3QgYW4gaW50ZWdlci4iCiAgICAgZGVmIGdldHJlc3VsdChzZWxmKToKLSAgICAgICAgcmV0dXJuIGludChzZWxmLmVudHJ5LmdldCgpKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRpbnQoc2VsZi5lbnRyeS5nZXQoKSkKIAogZGVmIGFza2ludGVnZXIodGl0bGUsIHByb21wdCwgKiprdyk6CiAgICAgJycnZ2V0IGFuIGludGVnZXIgZnJvbSB0aGUgdXNlcgpAQCAtMzQ0LDcgKzM0NCw3IEBACiBjbGFzcyBfUXVlcnlGbG9hdChfUXVlcnlEaWFsb2cpOgogICAgIGVycm9ybWVzc2FnZSA9ICJOb3QgYSBmbG9hdGluZyBwb2ludCB2YWx1ZS4iCiAgICAgZGVmIGdldHJlc3VsdChzZWxmKToKLSAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYuZW50cnkuZ2V0KCkpCisgICAgICAgIHJldHVybiBzZWxmLmdldGRvdWJsZShzZWxmLmVudHJ5LmdldCgpKQogCiBkZWYgYXNrZmxvYXQodGl0bGUsIHByb21wdCwgKiprdyk6CiAgICAgJycnZ2V0IGEgZmxvYXQgZnJvbSB0aGUgdXNlcgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC9ydW50a3Rlc3RzLnB5IGIvTGliL3RraW50ZXIvdGVzdC9ydW50a3Rlc3RzLnB5CmluZGV4IGNjYjM3NTUuLmRiZTVlODggMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvcnVudGt0ZXN0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3J1bnRrdGVzdHMucHkKQEAgLTE2LDcgKzE2LDcgQEAKIAogZGVmIGlzX3BhY2thZ2UocGF0aCk6CiAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwYXRoKToKLSAgICAgICAgaWYgbmFtZSBpbiAoJ19faW5pdF9fLnB5JywgJ19faW5pdF9fLnB5YycsICdfX2luaXQucHlvJyk6CisgICAgICAgIGlmIG5hbWUgaW4gKCdfX2luaXRfXy5weScsICdfX2luaXRfXy5weWMnKToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgcmV0dXJuIEZhbHNlCiAKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZ2VvbWV0cnlfbWFuYWdlcnMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2dlb21ldHJ5X21hbmFnZXJzLnB5CmluZGV4IGU0MmIxYmUuLmM2NDVkNDMgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZ2VvbWV0cnlfbWFuYWdlcnMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9nZW9tZXRyeV9tYW5hZ2Vycy5weQpAQCAtMTIsNiArMTIsOCBAQAogCiBjbGFzcyBQYWNrVGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIHRlc3Rfa2V5cyA9IE5vbmUKKwogICAgIGRlZiBjcmVhdGUyKHNlbGYpOgogICAgICAgICBwYWNrID0gdGtpbnRlci5Ub3BsZXZlbChzZWxmLnJvb3QsIG5hbWU9J3BhY2snKQogICAgICAgICBwYWNrLndtX2dlb21ldHJ5KCczMDB4MjAwKzArMCcpCkBAIC0yNzYsNiArMjc4LDggQEAKIAogY2xhc3MgUGxhY2VUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgdGVzdF9rZXlzID0gTm9uZQorCiAgICAgZGVmIGNyZWF0ZTIoc2VsZik6CiAgICAgICAgIHQgPSB0a2ludGVyLlRvcGxldmVsKHNlbGYucm9vdCwgd2lkdGg9MzAwLCBoZWlnaHQ9MjAwLCBiZD0wKQogICAgICAgICB0LndtX2dlb21ldHJ5KCczMDB4MjAwKzArMCcpCkBAIC00NzgsNiArNDgyLDggQEAKIAogY2xhc3MgR3JpZFRlc3QoQWJzdHJhY3RXaWRnZXRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICB0ZXN0X2tleXMgPSBOb25lCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGNvbHMsIHJvd3MgPSBzZWxmLnJvb3QuZ3JpZF9zaXplKCkKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY29scyArIDEpOgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9taXNjLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9taXNjLnB5CmluZGV4IGQ4ZGU5NDkuLjg1ZWUyYzcgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbWlzYy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X21pc2MucHkKQEAgLTcsNiArNywxMSBAQAogCiBjbGFzcyBNaXNjVGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgdCA9IHRraW50ZXIuVG9wbGV2ZWwoc2VsZi5yb290LCBuYW1lPSd0b3AnKQorICAgICAgICBmID0gdGtpbnRlci5GcmFtZSh0LCBuYW1lPSdjaGlsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmKSwgJzx0a2ludGVyLkZyYW1lIG9iamVjdCAudG9wLmNoaWxkPicpCisKICAgICBkZWYgdGVzdF90a19zZXRQYWxldHRlKHNlbGYpOgogICAgICAgICByb290ID0gc2VsZi5yb290CiAgICAgICAgIHJvb3QudGtfc2V0UGFsZXR0ZSgnYmxhY2snKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF92YXJpYWJsZXMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQppbmRleCA0YjcyOTQzLi4xZjc0NDUzIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQpAQCAtMSw1ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAotCitpbXBvcnQgZ2MKIGZyb20gdGtpbnRlciBpbXBvcnQgKFZhcmlhYmxlLCBTdHJpbmdWYXIsIEludFZhciwgRG91YmxlVmFyLCBCb29sZWFuVmFyLCBUY2wsCiAgICAgICAgICAgICAgICAgICAgICBUY2xFcnJvcikKIApAQCAtODcsNiArODcsNTUgQEAKICAgICAgICAgdi5zZXQoInZhbHVlIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYuc2lkZV9lZmZlY3QpCiAKKyAgICBkZWYgdGVzdF90cmFjZShzZWxmKToKKyAgICAgICAgdiA9IFZhcmlhYmxlKHNlbGYucm9vdCkKKyAgICAgICAgdm5hbWUgPSBzdHIodikKKyAgICAgICAgdHJhY2UgPSBbXQorICAgICAgICBkZWYgcmVhZF90cmFjZXIoKmFyZ3MpOgorICAgICAgICAgICAgdHJhY2UuYXBwZW5kKCgncmVhZCcsKSArIGFyZ3MpCisgICAgICAgIGRlZiB3cml0ZV90cmFjZXIoKmFyZ3MpOgorICAgICAgICAgICAgdHJhY2UuYXBwZW5kKCgnd3JpdGUnLCkgKyBhcmdzKQorICAgICAgICBjYjEgPSB2LnRyYWNlX3ZhcmlhYmxlKCdyJywgcmVhZF90cmFjZXIpCisgICAgICAgIGNiMiA9IHYudHJhY2VfdmFyaWFibGUoJ3d1Jywgd3JpdGVfdHJhY2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh2LnRyYWNlX3ZpbmZvKCkpLCBbKCdyJywgY2IxKSwgKCd3dScsIGNiMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLCBbXSkKKworICAgICAgICB2LnNldCgnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UsIFsoJ3dyaXRlJywgdm5hbWUsICcnLCAndycpXSkKKworICAgICAgICB0cmFjZSA9IFtdCisgICAgICAgIHYuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZSwgWygncmVhZCcsIHZuYW1lLCAnJywgJ3InKV0pCisKKyAgICAgICAgdHJhY2UgPSBbXQorICAgICAgICBpbmZvID0gc29ydGVkKHYudHJhY2VfdmluZm8oKSkKKyAgICAgICAgdi50cmFjZV92ZGVsZXRlKCd3JywgY2IxKSAgIyBXcm9uZyBtb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHYudHJhY2VfdmluZm8oKSksIGluZm8pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IpOgorICAgICAgICAgICAgdi50cmFjZV92ZGVsZXRlKCdyJywgJ3NwYW0nKSAgIyBXcm9uZyBjb21tYW5kIG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodi50cmFjZV92aW5mbygpKSwgaW5mbykKKyAgICAgICAgdi50cmFjZV92ZGVsZXRlKCdyJywgKGNiMSwgNDMpKSAjIFdyb25nIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh2LnRyYWNlX3ZpbmZvKCkpLCBpbmZvKQorICAgICAgICB2LmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UsIFsoJ3JlYWQnLCB2bmFtZSwgJycsICdyJyldKQorCisgICAgICAgIHRyYWNlID0gW10KKyAgICAgICAgdi50cmFjZV92ZGVsZXRlKCdyJywgY2IxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudHJhY2VfdmluZm8oKSwgWygnd3UnLCBjYjIpXSkKKyAgICAgICAgdi5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLCBbXSkKKworICAgICAgICB0cmFjZSA9IFtdCisgICAgICAgIGRlbCB3cml0ZV90cmFjZXIKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHYuc2V0KCdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZSwgWygnd3JpdGUnLCB2bmFtZSwgJycsICd3JyldKQorCisgICAgICAgIHRyYWNlID0gW10KKyAgICAgICAgZGVsIHYKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UsIFsoJ3dyaXRlJywgdm5hbWUsICcnLCAndScpXSkKKwogCiBjbGFzcyBUZXN0U3RyaW5nVmFyKFRlc3RCYXNlKToKIApAQCAtMTIyLDEwICsxNzEsMTAgQEAKICAgICBkZWYgdGVzdF9pbnZhbGlkX3ZhbHVlKHNlbGYpOgogICAgICAgICB2ID0gSW50VmFyKHNlbGYucm9vdCwgbmFtZT0ibmFtZSIpCiAgICAgICAgIHNlbGYucm9vdC5nbG9iYWxzZXR2YXIoIm5hbWUiLCAidmFsdWUiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBUY2xFcnJvcikpOgogICAgICAgICAgICAgdi5nZXQoKQogICAgICAgICBzZWxmLnJvb3QuZ2xvYmFsc2V0dmFyKCJuYW1lIiwgIjM0NS4wIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgVGNsRXJyb3IpKToKICAgICAgICAgICAgIHYuZ2V0KCkKIAogCkBAIC0xNTIsNyArMjAxLDcgQEAKICAgICBkZWYgdGVzdF9pbnZhbGlkX3ZhbHVlKHNlbGYpOgogICAgICAgICB2ID0gRG91YmxlVmFyKHNlbGYucm9vdCwgbmFtZT0ibmFtZSIpCiAgICAgICAgIHNlbGYucm9vdC5nbG9iYWxzZXR2YXIoIm5hbWUiLCAidmFsdWUiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBUY2xFcnJvcikpOgogICAgICAgICAgICAgdi5nZXQoKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weQppbmRleCA4YmUwMzcxLi5jOTI0ZDU1IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgJ2JhY2tncm91bmQnLCAnYm9yZGVyd2lkdGgnLAogICAgICAgICAnY2xhc3MnLCAnY29sb3JtYXAnLCAnY29udGFpbmVyJywgJ2N1cnNvcicsICdoZWlnaHQnLAogICAgICAgICAnaGlnaGxpZ2h0YmFja2dyb3VuZCcsICdoaWdobGlnaHRjb2xvcicsICdoaWdobGlnaHR0aGlja25lc3MnLAotICAgICAgICAncmVsaWVmJywgJ3Rha2Vmb2N1cycsICd2aXN1YWwnLCAnd2lkdGgnLAorICAgICAgICAncGFkeCcsICdwYWR5JywgJ3JlbGllZicsICd0YWtlZm9jdXMnLCAndmlzdWFsJywgJ3dpZHRoJywKICAgICApCiAKICAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKQEAgLTYzNiw3ICs2MzYsNyBAQAogICAgICAgICAnaGlnaGxpZ2h0YmFja2dyb3VuZCcsICdoaWdobGlnaHRjb2xvcicsICdoaWdobGlnaHR0aGlja25lc3MnLAogICAgICAgICAnaW5zZXJ0YmFja2dyb3VuZCcsICdpbnNlcnRib3JkZXJ3aWR0aCcsCiAgICAgICAgICdpbnNlcnRvZmZ0aW1lJywgJ2luc2VydG9udGltZScsICdpbnNlcnR3aWR0aCcsCi0gICAgICAgICdyZWxpZWYnLCAnc2Nyb2xscmVnaW9uJywKKyAgICAgICAgJ29mZnNldCcsICdyZWxpZWYnLCAnc2Nyb2xscmVnaW9uJywKICAgICAgICAgJ3NlbGVjdGJhY2tncm91bmQnLCAnc2VsZWN0Ym9yZGVyd2lkdGgnLCAnc2VsZWN0Zm9yZWdyb3VuZCcsCiAgICAgICAgICdzdGF0ZScsICd0YWtlZm9jdXMnLAogICAgICAgICAneHNjcm9sbGNvbW1hbmQnLCAneHNjcm9sbGluY3JlbWVudCcsCkBAIC02NTgsNiArNjU4LDE1IEBACiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKICAgICAgICAgc2VsZi5jaGVja0Jvb2xlYW5QYXJhbSh3aWRnZXQsICdjb25maW5lJykKIAorICAgIGRlZiB0ZXN0X29mZnNldChzZWxmKToKKyAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpZGdldFsnb2Zmc2V0J10sICcwLDAnKQorICAgICAgICBzZWxmLmNoZWNrUGFyYW1zKHdpZGdldCwgJ29mZnNldCcsCisgICAgICAgICAgICAgICAgJ24nLCAnbmUnLCAnZScsICdzZScsICdzJywgJ3N3JywgJ3cnLCAnbncnLCAnY2VudGVyJykKKyAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgJ29mZnNldCcsICcxMCwyMCcpCisgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsICdvZmZzZXQnLCAnIzUsNicpCisgICAgICAgIHNlbGYuY2hlY2tJbnZhbGlkUGFyYW0od2lkZ2V0LCAnb2Zmc2V0JywgJ3NwYW0nKQorCiAgICAgZGVmIHRlc3Rfc2Nyb2xscmVnaW9uKHNlbGYpOgogICAgICAgICB3aWRnZXQgPSBzZWxmLmNyZWF0ZSgpCiAgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsICdzY3JvbGxyZWdpb24nLCAnMCAwIDIwMCAxNTAnKQpAQCAtOTIwLDggKzkyOSw5IEBACiAgICAgICAgIHNiID0gc2VsZi5jcmVhdGUoKQogICAgICAgICBmb3IgZSBpbiAoJ2Fycm93MScsICdzbGlkZXInLCAnYXJyb3cyJyk6CiAgICAgICAgICAgICBzYi5hY3RpdmF0ZShlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYi5hY3RpdmF0ZSgpLCBlKQogICAgICAgICBzYi5hY3RpdmF0ZSgnJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzYi5hY3RpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2IuYWN0aXZhdGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzYi5hY3RpdmF0ZSwgJ2Fycm93MScsICdhcnJvdzInKQogCiAgICAgZGVmIHRlc3Rfc2V0KHNlbGYpOgpAQCAtOTMxLDggKzk0MSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzYi5zZXQsICdhYmMnLCAnZGVmJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHNiLnNldCwgMC42LCAnZGVmJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHNiLnNldCwgMC42LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgc2Iuc2V0LCAwLjYpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzYi5zZXQsIDAuNiwgMC43LCAwLjgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2Iuc2V0LCAwLjYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2Iuc2V0LCAwLjYsIDAuNywgMC44KQogCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhTdGFuZGFyZE9wdGlvbnNUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKaW5kZXggYzNhZjA2Yy4uZjMzOTQ1YyAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKQEAgLTcwLDE3ICs3MCwxNSBAQAogICAgICAgICAjIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uL3Bhc3NpbmcKICAgICAgICAgcGFzc2VkX2V4cGVjdGVkID0gKCgnMCcsIDApLCAoMCwgMCksICgxMCwgMTApLAogICAgICAgICAgICAgKC0xLCAtMSksIChzeXMubWF4c2l6ZSArIDEsIHN5cy5tYXhzaXplICsgMSkpCi0gICAgICAgIGlmIHNlbGYud2FudG9iamVjdHM6Ci0gICAgICAgICAgICBwYXNzZWRfZXhwZWN0ZWQgKz0gKCgyLjUsIDIpLCkKICAgICAgICAgZm9yIHBhaXIgaW4gcGFzc2VkX2V4cGVjdGVkOgogICAgICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBmcm9tXz1wYWlyWzBdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCBwYWlyWzFdKQogICAgICAgICAgICAgeC5kZXN0cm95KCkKICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBmcm9tXz0nMi41JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgeC5fdmFyaWFibGUuZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgdGtpbnRlci5UY2xFcnJvciksIHguX3ZhcmlhYmxlLmdldCkKICAgICAgICAgeC5kZXN0cm95KCkKICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBmcm9tXz1Ob25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB4Ll92YXJpYWJsZS5nZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCB0a2ludGVyLlRjbEVycm9yKSwgeC5fdmFyaWFibGUuZ2V0KQogICAgICAgICB4LmRlc3Ryb3koKQogICAgICAgICAjIHZhcmlhYmxlIHNob3VsZCBoYXZlIGl0cyBkZWZhdWx0IHZhbHVlIHNldCB0byB0aGUgZnJvbV8gdmFsdWUKICAgICAgICAgbXl2YXIgPSB0a2ludGVyLkRvdWJsZVZhcihzZWxmLnJvb3QsIHZhbHVlPTIwKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkKaW5kZXggYzlkY2Y5Ny4uYzY4YTY1MCAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3RfZnVuY3Rpb25zLnB5CkBAIC0xOTMsNyArMTkzLDcgQEAKIAogICAgICAgICAjIyBUZXN0aW5nIHR5cGUgPSB2c2FwaQogICAgICAgICAjIHZzYXBpIHR5cGUgZXhwZWN0cyBhdCBsZWFzdCBhIGNsYXNzIG5hbWUgYW5kIGEgcGFydF9pZCwgc28gdGhpcwotICAgICAgICAjIHNob3VsZCByYWlzZSBhbiBWYWx1ZUVycm9yIHNpbmNlIGl0IHRyaWVzIHRvIGdldCB0d28gZWxlbWVudHMgZnJvbQorICAgICAgICAjIHNob3VsZCByYWlzZSBhIFZhbHVlRXJyb3Igc2luY2UgaXQgdHJpZXMgdG8gZ2V0IHR3byBlbGVtZW50cyBmcm9tCiAgICAgICAgICMgYW4gZW1wdHkgdHVwbGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSwgJ3ZzYXBpJykKIApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQppbmRleCBhZmQzMjMwLi44YmQyMmQwIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtMTg3LDcgKzE4Nyw3IEBACiBAYWRkX3N0YW5kYXJkX29wdGlvbnMoU3RhbmRhcmRUdGtPcHRpb25zVGVzdHMpCiBjbGFzcyBMYWJlbFRlc3QoQWJzdHJhY3RMYWJlbFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBPUFRJT05TID0gKAotICAgICAgICAnYW5jaG9yJywgJ2JhY2tncm91bmQnLAorICAgICAgICAnYW5jaG9yJywgJ2JhY2tncm91bmQnLCAnYm9yZGVyd2lkdGgnLAogICAgICAgICAnY2xhc3MnLCAnY29tcG91bmQnLCAnY3Vyc29yJywgJ2ZvbnQnLCAnZm9yZWdyb3VuZCcsCiAgICAgICAgICdpbWFnZScsICdqdXN0aWZ5JywgJ3BhZGRpbmcnLCAncmVsaWVmJywgJ3N0YXRlJywgJ3N0eWxlJywKICAgICAgICAgJ3Rha2Vmb2N1cycsICd0ZXh0JywgJ3RleHR2YXJpYWJsZScsCkBAIC0yMDgsNyArMjA4LDggQEAKIGNsYXNzIEJ1dHRvblRlc3QoQWJzdHJhY3RMYWJlbFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBPUFRJT05TID0gKAogICAgICAgICAnY2xhc3MnLCAnY29tbWFuZCcsICdjb21wb3VuZCcsICdjdXJzb3InLCAnZGVmYXVsdCcsCi0gICAgICAgICdpbWFnZScsICdzdGF0ZScsICdzdHlsZScsICd0YWtlZm9jdXMnLCAndGV4dCcsICd0ZXh0dmFyaWFibGUnLAorICAgICAgICAnaW1hZ2UnLCAncGFkZGluZycsICdzdGF0ZScsICdzdHlsZScsCisgICAgICAgICd0YWtlZm9jdXMnLCAndGV4dCcsICd0ZXh0dmFyaWFibGUnLAogICAgICAgICAndW5kZXJsaW5lJywgJ3dpZHRoJywKICAgICApCiAKQEAgLTIzMiw3ICsyMzMsNyBAQAogICAgICAgICAnY2xhc3MnLCAnY29tbWFuZCcsICdjb21wb3VuZCcsICdjdXJzb3InLAogICAgICAgICAnaW1hZ2UnLAogICAgICAgICAnb2ZmdmFsdWUnLCAnb252YWx1ZScsCi0gICAgICAgICdzdGF0ZScsICdzdHlsZScsCisgICAgICAgICdwYWRkaW5nJywgJ3N0YXRlJywgJ3N0eWxlJywKICAgICAgICAgJ3Rha2Vmb2N1cycsICd0ZXh0JywgJ3RleHR2YXJpYWJsZScsCiAgICAgICAgICd1bmRlcmxpbmUnLCAndmFyaWFibGUnLCAnd2lkdGgnLAogICAgICkKQEAgLTI3NiwxMzcgKzI3NywxMCBAQAogCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhJbnRlZ2VyU2l6ZVRlc3RzLCBTdGFuZGFyZFR0a09wdGlvbnNUZXN0cykKLWNsYXNzIENvbWJvYm94VGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBPUFRJT05TID0gKAotICAgICAgICAnY2xhc3MnLCAnY3Vyc29yJywgJ2V4cG9ydHNlbGVjdGlvbicsICdoZWlnaHQnLAotICAgICAgICAnanVzdGlmeScsICdwb3N0Y29tbWFuZCcsICdzdGF0ZScsICdzdHlsZScsCi0gICAgICAgICd0YWtlZm9jdXMnLCAndGV4dHZhcmlhYmxlJywgJ3ZhbHVlcycsICd3aWR0aCcsCi0gICAgKQotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc2VsZi5jb21ibyA9IHNlbGYuY3JlYXRlKCkKLQotICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICByZXR1cm4gdHRrLkNvbWJvYm94KHNlbGYucm9vdCwgKiprd2FyZ3MpCi0KLSAgICBkZWYgdGVzdF9oZWlnaHQoc2VsZik6Ci0gICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKLSAgICAgICAgc2VsZi5jaGVja1BhcmFtcyh3aWRnZXQsICdoZWlnaHQnLCAxMDAsIDEwMS4yLCAxMDIuNiwgLTEwMCwgMCwgJzFpJykKLQotICAgIGRlZiB0ZXN0X3N0YXRlKHNlbGYpOgotICAgICAgICB3aWRnZXQgPSBzZWxmLmNyZWF0ZSgpCi0gICAgICAgIHNlbGYuY2hlY2tQYXJhbXMod2lkZ2V0LCAnc3RhdGUnLCAnYWN0aXZlJywgJ2Rpc2FibGVkJywgJ25vcm1hbCcpCi0KLSAgICBkZWYgX3Nob3dfZHJvcF9kb3duX2xpc3Rib3goc2VsZik6Ci0gICAgICAgIHdpZHRoID0gc2VsZi5jb21iby53aW5mb193aWR0aCgpCi0gICAgICAgIHNlbGYuY29tYm8uZXZlbnRfZ2VuZXJhdGUoJzxCdXR0b25QcmVzcy0xPicsIHg9d2lkdGggLSA1LCB5PTUpCi0gICAgICAgIHNlbGYuY29tYm8uZXZlbnRfZ2VuZXJhdGUoJzxCdXR0b25SZWxlYXNlLTE+JywgeD13aWR0aCAtIDUsIHk9NSkKLSAgICAgICAgc2VsZi5jb21iby51cGRhdGVfaWRsZXRhc2tzKCkKLQotCi0gICAgZGVmIHRlc3RfdmlydHVhbF9ldmVudChzZWxmKToKLSAgICAgICAgc3VjY2VzcyA9IFtdCi0KLSAgICAgICAgc2VsZi5jb21ib1sndmFsdWVzJ10gPSBbMV0KLSAgICAgICAgc2VsZi5jb21iby5iaW5kKCc8PENvbWJvYm94U2VsZWN0ZWQ+PicsCi0gICAgICAgICAgICBsYW1iZGEgZXZ0OiBzdWNjZXNzLmFwcGVuZChUcnVlKSkKLSAgICAgICAgc2VsZi5jb21iby5wYWNrKCkKLSAgICAgICAgc2VsZi5jb21iby53YWl0X3Zpc2liaWxpdHkoKQotCi0gICAgICAgIGhlaWdodCA9IHNlbGYuY29tYm8ud2luZm9faGVpZ2h0KCkKLSAgICAgICAgc2VsZi5fc2hvd19kcm9wX2Rvd25fbGlzdGJveCgpCi0gICAgICAgIHNlbGYuY29tYm8udXBkYXRlKCkKLSAgICAgICAgc2VsZi5jb21iby5ldmVudF9nZW5lcmF0ZSgnPFJldHVybj4nKQotICAgICAgICBzZWxmLmNvbWJvLnVwZGF0ZSgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCi0KLQotICAgIGRlZiB0ZXN0X3Bvc3Rjb21tYW5kKHNlbGYpOgotICAgICAgICBzdWNjZXNzID0gW10KLQotICAgICAgICBzZWxmLmNvbWJvWydwb3N0Y29tbWFuZCddID0gbGFtYmRhOiBzdWNjZXNzLmFwcGVuZChUcnVlKQotICAgICAgICBzZWxmLmNvbWJvLnBhY2soKQotICAgICAgICBzZWxmLmNvbWJvLndhaXRfdmlzaWJpbGl0eSgpCi0KLSAgICAgICAgc2VsZi5fc2hvd19kcm9wX2Rvd25fbGlzdGJveCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQotCi0gICAgICAgICMgdGVzdGluZyBwb3N0Y29tbWFuZCByZW1vdmFsCi0gICAgICAgIHNlbGYuY29tYm9bJ3Bvc3Rjb21tYW5kJ10gPSAnJwotICAgICAgICBzZWxmLl9zaG93X2Ryb3BfZG93bl9saXN0Ym94KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCi0KLQotICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKLSAgICAgICAgZGVmIGNoZWNrX2dldF9jdXJyZW50KGdldHZhbCwgY3VycnZhbCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tYm8uZ2V0KCksIGdldHZhbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21iby5jdXJyZW50KCksIGN1cnJ2YWwpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbWJvWyd2YWx1ZXMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKSBpZiB0Y2xfdmVyc2lvbiA8ICg4LCA1KSBlbHNlICcnKQotICAgICAgICBjaGVja19nZXRfY3VycmVudCgnJywgLTEpCi0KLSAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAnbW9uIHR1ZSB3ZWQgdGh1cicsCi0gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD0oJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodXInKSkKLSAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAoJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodXInKSkKLSAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAoNDIsIDMuMTQsICcnLCAnYW55IHN0cmluZycpKQotICAgICAgICBzZWxmLmNoZWNrUGFyYW0oc2VsZi5jb21ibywgJ3ZhbHVlcycsICcnLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9JycgaWYgZ2V0X3RrX3BhdGNobGV2ZWwoKSA8ICg4LCA1LCAxMCkgZWxzZSAoKSkKLQotICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9IFsnYScsIDEsICdjJ10KLQotICAgICAgICBzZWxmLmNvbWJvLnNldCgnYycpCi0gICAgICAgIGNoZWNrX2dldF9jdXJyZW50KCdjJywgMikKLQotICAgICAgICBzZWxmLmNvbWJvLmN1cnJlbnQoMCkKLSAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2EnLCAwKQotCi0gICAgICAgIHNlbGYuY29tYm8uc2V0KCdkJykKLSAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2QnLCAtMSkKLQotICAgICAgICAjIHRlc3RpbmcgdmFsdWVzIHdpdGggZW1wdHkgc3RyaW5nCi0gICAgICAgIHNlbGYuY29tYm8uc2V0KCcnKQotICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9ICgxLCAyLCAnJywgMykKLSAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJycsIDIpCi0KLSAgICAgICAgIyB0ZXN0aW5nIHZhbHVlcyB3aXRoIGVtcHR5IHN0cmluZyBzZXQgdGhyb3VnaCBjb25maWd1cmUKLSAgICAgICAgc2VsZi5jb21iby5jb25maWd1cmUodmFsdWVzPVsxLCAnJywgMl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21ib1sndmFsdWVzJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJycsICcyJykgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgJzEge30gMicpCi0KLSAgICAgICAgIyB0ZXN0aW5nIHZhbHVlcyB3aXRoIHNwYWNlcwotICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9IFsnYSBiJywgJ2FcdGInLCAnYVxuYiddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21ib1sndmFsdWVzJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCdhIGInLCAnYVx0YicsICdhXG5iJykgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3thIGJ9IHthXHRifSB7YVxuYn0nKQotCi0gICAgICAgICMgdGVzdGluZyB2YWx1ZXMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMKLSAgICAgICAgc2VsZi5jb21ib1sndmFsdWVzJ10gPSBbcidhXHRiJywgJyJhIicsICd9IHsnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tYm9bJ3ZhbHVlcyddLAotICAgICAgICAgICAgICAgICAgICAgICAgIChyJ2FcdGInLCAnImEiJywgJ30geycpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgIHInYVxcdGIgeyJhIn0gXH1cIFx7JykKLQotICAgICAgICAjIG91dCBvZiByYW5nZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLmNvbWJvLmN1cnJlbnQsCi0gICAgICAgICAgICBsZW4oc2VsZi5jb21ib1sndmFsdWVzJ10pKQotICAgICAgICAjIGl0IGV4cGVjdHMgYW4gaW50ZWdlciAob3Igc29tZXRoaW5nIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBpbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYuY29tYm8uY3VycmVudCwgJycpCi0KLSAgICAgICAgIyB0ZXN0aW5nIGNyZWF0aW5nIGNvbWJvYm94IHdpdGggZW1wdHkgc3RyaW5nIGluIHZhbHVlcwotICAgICAgICBjb21ibzIgPSB0dGsuQ29tYm9ib3goc2VsZi5yb290LCB2YWx1ZXM9WzEsIDIsICcnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21ibzJbJ3ZhbHVlcyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICgnMScsICcyJywgJycpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSAnMSAyIHt9JykKLSAgICAgICAgY29tYm8yLmRlc3Ryb3koKQotCi0KLUBhZGRfc3RhbmRhcmRfb3B0aW9ucyhJbnRlZ2VyU2l6ZVRlc3RzLCBTdGFuZGFyZFR0a09wdGlvbnNUZXN0cykKIGNsYXNzIEVudHJ5VGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBPUFRJT05TID0gKAogICAgICAgICAnYmFja2dyb3VuZCcsICdjbGFzcycsICdjdXJzb3InLAotICAgICAgICAnZXhwb3J0c2VsZWN0aW9uJywgJ2ZvbnQnLAorICAgICAgICAnZXhwb3J0c2VsZWN0aW9uJywgJ2ZvbnQnLCAnZm9yZWdyb3VuZCcsCiAgICAgICAgICdpbnZhbGlkY29tbWFuZCcsICdqdXN0aWZ5JywKICAgICAgICAgJ3Nob3cnLCAnc3RhdGUnLCAnc3R5bGUnLCAndGFrZWZvY3VzJywgJ3RleHR2YXJpYWJsZScsCiAgICAgICAgICd2YWxpZGF0ZScsICd2YWxpZGF0ZWNvbW1hbmQnLCAnd2lkdGgnLCAneHNjcm9sbGNvbW1hbmQnLApAQCAtNTM1LDYgKzQwOSwxMzIgQEAKIAogCiBAYWRkX3N0YW5kYXJkX29wdGlvbnMoSW50ZWdlclNpemVUZXN0cywgU3RhbmRhcmRUdGtPcHRpb25zVGVzdHMpCitjbGFzcyBDb21ib2JveFRlc3QoRW50cnlUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgT1BUSU9OUyA9ICgKKyAgICAgICAgJ2JhY2tncm91bmQnLCAnY2xhc3MnLCAnY3Vyc29yJywgJ2V4cG9ydHNlbGVjdGlvbicsCisgICAgICAgICdmb250JywgJ2ZvcmVncm91bmQnLCAnaGVpZ2h0JywgJ2ludmFsaWRjb21tYW5kJywKKyAgICAgICAgJ2p1c3RpZnknLCAncG9zdGNvbW1hbmQnLCAnc2hvdycsICdzdGF0ZScsICdzdHlsZScsCisgICAgICAgICd0YWtlZm9jdXMnLCAndGV4dHZhcmlhYmxlJywKKyAgICAgICAgJ3ZhbGlkYXRlJywgJ3ZhbGlkYXRlY29tbWFuZCcsICd2YWx1ZXMnLAorICAgICAgICAnd2lkdGgnLCAneHNjcm9sbGNvbW1hbmQnLAorICAgICkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIHNlbGYuY29tYm8gPSBzZWxmLmNyZWF0ZSgpCisKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHR0ay5Db21ib2JveChzZWxmLnJvb3QsICoqa3dhcmdzKQorCisgICAgZGVmIHRlc3RfaGVpZ2h0KHNlbGYpOgorICAgICAgICB3aWRnZXQgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIHNlbGYuY2hlY2tQYXJhbXMod2lkZ2V0LCAnaGVpZ2h0JywgMTAwLCAxMDEuMiwgMTAyLjYsIC0xMDAsIDAsICcxaScpCisKKyAgICBkZWYgX3Nob3dfZHJvcF9kb3duX2xpc3Rib3goc2VsZik6CisgICAgICAgIHdpZHRoID0gc2VsZi5jb21iby53aW5mb193aWR0aCgpCisgICAgICAgIHNlbGYuY29tYm8uZXZlbnRfZ2VuZXJhdGUoJzxCdXR0b25QcmVzcy0xPicsIHg9d2lkdGggLSA1LCB5PTUpCisgICAgICAgIHNlbGYuY29tYm8uZXZlbnRfZ2VuZXJhdGUoJzxCdXR0b25SZWxlYXNlLTE+JywgeD13aWR0aCAtIDUsIHk9NSkKKyAgICAgICAgc2VsZi5jb21iby51cGRhdGVfaWRsZXRhc2tzKCkKKworCisgICAgZGVmIHRlc3RfdmlydHVhbF9ldmVudChzZWxmKToKKyAgICAgICAgc3VjY2VzcyA9IFtdCisKKyAgICAgICAgc2VsZi5jb21ib1sndmFsdWVzJ10gPSBbMV0KKyAgICAgICAgc2VsZi5jb21iby5iaW5kKCc8PENvbWJvYm94U2VsZWN0ZWQ+PicsCisgICAgICAgICAgICBsYW1iZGEgZXZ0OiBzdWNjZXNzLmFwcGVuZChUcnVlKSkKKyAgICAgICAgc2VsZi5jb21iby5wYWNrKCkKKyAgICAgICAgc2VsZi5jb21iby53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgICAgIGhlaWdodCA9IHNlbGYuY29tYm8ud2luZm9faGVpZ2h0KCkKKyAgICAgICAgc2VsZi5fc2hvd19kcm9wX2Rvd25fbGlzdGJveCgpCisgICAgICAgIHNlbGYuY29tYm8udXBkYXRlKCkKKyAgICAgICAgc2VsZi5jb21iby5ldmVudF9nZW5lcmF0ZSgnPFJldHVybj4nKQorICAgICAgICBzZWxmLmNvbWJvLnVwZGF0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCisKKworICAgIGRlZiB0ZXN0X3Bvc3Rjb21tYW5kKHNlbGYpOgorICAgICAgICBzdWNjZXNzID0gW10KKworICAgICAgICBzZWxmLmNvbWJvWydwb3N0Y29tbWFuZCddID0gbGFtYmRhOiBzdWNjZXNzLmFwcGVuZChUcnVlKQorICAgICAgICBzZWxmLmNvbWJvLnBhY2soKQorICAgICAgICBzZWxmLmNvbWJvLndhaXRfdmlzaWJpbGl0eSgpCisKKyAgICAgICAgc2VsZi5fc2hvd19kcm9wX2Rvd25fbGlzdGJveCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorCisgICAgICAgICMgdGVzdGluZyBwb3N0Y29tbWFuZCByZW1vdmFsCisgICAgICAgIHNlbGYuY29tYm9bJ3Bvc3Rjb21tYW5kJ10gPSAnJworICAgICAgICBzZWxmLl9zaG93X2Ryb3BfZG93bl9saXN0Ym94KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCisKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrX2dldF9jdXJyZW50KGdldHZhbCwgY3VycnZhbCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tYm8uZ2V0KCksIGdldHZhbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21iby5jdXJyZW50KCksIGN1cnJ2YWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbWJvWyd2YWx1ZXMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKSBpZiB0Y2xfdmVyc2lvbiA8ICg4LCA1KSBlbHNlICcnKQorICAgICAgICBjaGVja19nZXRfY3VycmVudCgnJywgLTEpCisKKyAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAnbW9uIHR1ZSB3ZWQgdGh1cicsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD0oJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodXInKSkKKyAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAoJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodXInKSkKKyAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAoNDIsIDMuMTQsICcnLCAnYW55IHN0cmluZycpKQorICAgICAgICBzZWxmLmNoZWNrUGFyYW0oc2VsZi5jb21ibywgJ3ZhbHVlcycsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9JycgaWYgZ2V0X3RrX3BhdGNobGV2ZWwoKSA8ICg4LCA1LCAxMCkgZWxzZSAoKSkKKworICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9IFsnYScsIDEsICdjJ10KKworICAgICAgICBzZWxmLmNvbWJvLnNldCgnYycpCisgICAgICAgIGNoZWNrX2dldF9jdXJyZW50KCdjJywgMikKKworICAgICAgICBzZWxmLmNvbWJvLmN1cnJlbnQoMCkKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2EnLCAwKQorCisgICAgICAgIHNlbGYuY29tYm8uc2V0KCdkJykKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2QnLCAtMSkKKworICAgICAgICAjIHRlc3RpbmcgdmFsdWVzIHdpdGggZW1wdHkgc3RyaW5nCisgICAgICAgIHNlbGYuY29tYm8uc2V0KCcnKQorICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9ICgxLCAyLCAnJywgMykKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJycsIDIpCisKKyAgICAgICAgIyB0ZXN0aW5nIHZhbHVlcyB3aXRoIGVtcHR5IHN0cmluZyBzZXQgdGhyb3VnaCBjb25maWd1cmUKKyAgICAgICAgc2VsZi5jb21iby5jb25maWd1cmUodmFsdWVzPVsxLCAnJywgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21ib1sndmFsdWVzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJycsICcyJykgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgJzEge30gMicpCisKKyAgICAgICAgIyB0ZXN0aW5nIHZhbHVlcyB3aXRoIHNwYWNlcworICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9IFsnYSBiJywgJ2FcdGInLCAnYVxuYiddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21ib1sndmFsdWVzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdhIGInLCAnYVx0YicsICdhXG5iJykgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3thIGJ9IHthXHRifSB7YVxuYn0nKQorCisgICAgICAgICMgdGVzdGluZyB2YWx1ZXMgd2l0aCBzcGVjaWFsIGNoYXJhY3RlcnMKKyAgICAgICAgc2VsZi5jb21ib1sndmFsdWVzJ10gPSBbcidhXHRiJywgJyJhIicsICd9IHsnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tYm9bJ3ZhbHVlcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgIChyJ2FcdGInLCAnImEiJywgJ30geycpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIHInYVxcdGIgeyJhIn0gXH1cIFx7JykKKworICAgICAgICAjIG91dCBvZiByYW5nZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLmNvbWJvLmN1cnJlbnQsCisgICAgICAgICAgICBsZW4oc2VsZi5jb21ib1sndmFsdWVzJ10pKQorICAgICAgICAjIGl0IGV4cGVjdHMgYW4gaW50ZWdlciAob3Igc29tZXRoaW5nIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYuY29tYm8uY3VycmVudCwgJycpCisKKyAgICAgICAgIyB0ZXN0aW5nIGNyZWF0aW5nIGNvbWJvYm94IHdpdGggZW1wdHkgc3RyaW5nIGluIHZhbHVlcworICAgICAgICBjb21ibzIgPSB0dGsuQ29tYm9ib3goc2VsZi5yb290LCB2YWx1ZXM9WzEsIDIsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21ibzJbJ3ZhbHVlcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnMScsICcyJywgJycpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSAnMSAyIHt9JykKKyAgICAgICAgY29tYm8yLmRlc3Ryb3koKQorCisKK0BhZGRfc3RhbmRhcmRfb3B0aW9ucyhJbnRlZ2VyU2l6ZVRlc3RzLCBTdGFuZGFyZFR0a09wdGlvbnNUZXN0cykKIGNsYXNzIFBhbmVkV2luZG93VGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBPUFRJT05TID0gKAogICAgICAgICAnY2xhc3MnLCAnY3Vyc29yJywgJ2hlaWdodCcsCkBAIC02NzQsNyArNjc0LDcgQEAKICAgICBPUFRJT05TID0gKAogICAgICAgICAnY2xhc3MnLCAnY29tbWFuZCcsICdjb21wb3VuZCcsICdjdXJzb3InLAogICAgICAgICAnaW1hZ2UnLAotICAgICAgICAnc3RhdGUnLCAnc3R5bGUnLAorICAgICAgICAncGFkZGluZycsICdzdGF0ZScsICdzdHlsZScsCiAgICAgICAgICd0YWtlZm9jdXMnLCAndGV4dCcsICd0ZXh0dmFyaWFibGUnLAogICAgICAgICAndW5kZXJsaW5lJywgJ3ZhbHVlJywgJ3ZhcmlhYmxlJywgJ3dpZHRoJywKICAgICApCkBAIC03MjQsNyArNzI0LDcgQEAKIGNsYXNzIE1lbnVidXR0b25UZXN0KEFic3RyYWN0TGFiZWxUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgT1BUSU9OUyA9ICgKICAgICAgICAgJ2NsYXNzJywgJ2NvbXBvdW5kJywgJ2N1cnNvcicsICdkaXJlY3Rpb24nLAotICAgICAgICAnaW1hZ2UnLCAnbWVudScsICdzdGF0ZScsICdzdHlsZScsCisgICAgICAgICdpbWFnZScsICdtZW51JywgJ3BhZGRpbmcnLCAnc3RhdGUnLCAnc3R5bGUnLAogICAgICAgICAndGFrZWZvY3VzJywgJ3RleHQnLCAndGV4dHZhcmlhYmxlJywKICAgICAgICAgJ3VuZGVybGluZScsICd3aWR0aCcsCiAgICAgKQpAQCAtOTAyLDcgKzkwMiw3IEBACiBAYWRkX3N0YW5kYXJkX29wdGlvbnMoSW50ZWdlclNpemVUZXN0cywgU3RhbmRhcmRUdGtPcHRpb25zVGVzdHMpCiBjbGFzcyBOb3RlYm9va1Rlc3QoQWJzdHJhY3RXaWRnZXRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgT1BUSU9OUyA9ICgKLSAgICAgICAgJ2NsYXNzJywgJ2N1cnNvcicsICdoZWlnaHQnLCAncGFkZGluZycsICdzdHlsZScsICd0YWtlZm9jdXMnLAorICAgICAgICAnY2xhc3MnLCAnY3Vyc29yJywgJ2hlaWdodCcsICdwYWRkaW5nJywgJ3N0eWxlJywgJ3Rha2Vmb2N1cycsICd3aWR0aCcsCiAgICAgKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTQ4Niw2ICsxNDg2LDU3IEBACiAgICAgICAgICAgICB2YWx1ZSkKIAogCisgICAgZGVmIHRlc3Rfc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIGl0ZW0gJ25vbmUnIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5zZWxlY3Rpb25fc2V0LCAnbm9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuc2VsZWN0aW9uX2FkZCwgJ25vbmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LnNlbGVjdGlvbl9yZW1vdmUsICdub25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5zZWxlY3Rpb25fdG9nZ2xlLCAnbm9uZScpCisKKyAgICAgICAgaXRlbTEgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBjMSA9IHNlbGYudHYuaW5zZXJ0KGl0ZW0xLCAnZW5kJykKKyAgICAgICAgYzIgPSBzZWxmLnR2Lmluc2VydChpdGVtMSwgJ2VuZCcpCisgICAgICAgIGMzID0gc2VsZi50di5pbnNlcnQoaXRlbTEsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksICgpKQorCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3NldCgoYzEsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzEsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi50di5zZWxlY3Rpb25fc2V0KGMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksIChjMiwpKQorCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX2FkZCgoYzEsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzEsIGMyLCBpdGVtMikpCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX2FkZChpdGVtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoaXRlbTEsIGMxLCBjMiwgaXRlbTIpKQorCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3JlbW92ZSgoaXRlbTEsIGMzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzEsIGMyLCBpdGVtMikpCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3JlbW92ZShjMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzEsIGl0ZW0yKSkKKworICAgICAgICBzZWxmLnR2LnNlbGVjdGlvbl90b2dnbGUoKGMxLCBjMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZWxlY3Rpb24oKSwgKGMzLCBpdGVtMikpCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3RvZ2dsZShpdGVtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzMsKSkKKworICAgICAgICBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIGlkPSd3aXRoIHNwYWNlcycpCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3NldCgnd2l0aCBzcGFjZXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksICgnd2l0aCBzcGFjZXMnLCkpCisKKyAgICAgICAgc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCBpZD0ne2JyYWNlJykKKyAgICAgICAgc2VsZi50di5zZWxlY3Rpb25fc2V0KCd7YnJhY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksICgne2JyYWNlJywpKQorCisgICAgICAgIHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgaWQ9J3VuaWNvZGVcdTIwYWMnKQorICAgICAgICBzZWxmLnR2LnNlbGVjdGlvbl9zZXQoJ3VuaWNvZGVcdTIwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksICgndW5pY29kZVx1MjBhYycsKSkKKworICAgICAgICBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIGlkPWInYnl0ZXNceGUyXHg4Mlx4YWMnKQorICAgICAgICBzZWxmLnR2LnNlbGVjdGlvbl9zZXQoYidieXRlc1x4ZTJceDgyXHhhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZWxlY3Rpb24oKSwgKCdieXRlc1x4ZTJceDgyXHhhYycsKSkKKworCiAgICAgZGVmIHRlc3Rfc2V0KHNlbGYpOgogICAgICAgICBzZWxmLnR2Wydjb2x1bW5zJ10gPSBbJ0EnLCAnQiddCiAgICAgICAgIGl0ZW0gPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz1bJ2EnLCAnYiddKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC93aWRnZXRfdGVzdHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3dpZGdldF90ZXN0cy5weQppbmRleCA3Nzk1MzhkLi43NWEwNjhmIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3dpZGdldF90ZXN0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3dpZGdldF90ZXN0cy5weQpAQCAtMjA2LDYgKzIwNiwzMyBAQAogICAgICAgICAgICAgICAgIGJyZWFrCiAKIAorICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAga2V5cyA9IHdpZGdldC5rZXlzKCkKKyAgICAgICAgIyBYWFgKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uod2lkZ2V0LCBTY2FsZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChrZXlzKSwgc29ydGVkKHdpZGdldC5jb25maWd1cmUoKSkpCisgICAgICAgIGZvciBrIGluIGtleXM6CisgICAgICAgICAgICB3aWRnZXRba10KKyAgICAgICAgIyBUZXN0IGlmIE9QVElPTlMgY29udGFpbnMgYWxsIGtleXMKKyAgICAgICAgaWYgdGVzdC5zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBhbGlhc2VzID0geworICAgICAgICAgICAgICAgICdiZCc6ICdib3JkZXJ3aWR0aCcsCisgICAgICAgICAgICAgICAgJ2JnJzogJ2JhY2tncm91bmQnLAorICAgICAgICAgICAgICAgICdmZyc6ICdmb3JlZ3JvdW5kJywKKyAgICAgICAgICAgICAgICAnaW52Y21kJzogJ2ludmFsaWRjb21tYW5kJywKKyAgICAgICAgICAgICAgICAndmNtZCc6ICd2YWxpZGF0ZWNvbW1hbmQnLAorICAgICAgICAgICAgfQorICAgICAgICAgICAga2V5cyA9IHNldChrZXlzKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZXQoc2VsZi5PUFRJT05TKQorICAgICAgICAgICAgZm9yIGsgaW4gc29ydGVkKGtleXMgLSBleHBlY3RlZCk6CisgICAgICAgICAgICAgICAgaWYgbm90IChrIGluIGFsaWFzZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzW2tdIGluIGtleXMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBhbGlhc2VzW2tdIGluIGV4cGVjdGVkKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyVzLk9QVElPTlMgZG9lc25cJ3QgY29udGFpbiAiJXMiJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgaykpCisKKwogY2xhc3MgU3RhbmRhcmRPcHRpb25zVGVzdHM6CiAgICAgU1RBTkRBUkRfT1BUSU9OUyA9ICgKICAgICAgICAgJ2FjdGl2ZWJhY2tncm91bmQnLCAnYWN0aXZlYm9yZGVyd2lkdGgnLCAnYWN0aXZlZm9yZWdyb3VuZCcsICdhbmNob3InLApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGl4LnB5IGIvTGliL3RraW50ZXIvdGl4LnB5CmluZGV4IGMxY2RmYTcuLmY2Njc5MzMgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3RpeC5weQorKysgYi9MaWIvdGtpbnRlci90aXgucHkKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgICAgICBzZWxmLnRrLmV2YWwoJ3BhY2thZ2UgcmVxdWlyZSBUaXgnKQogCiAgICAgZGVmIGRlc3Ryb3koc2VsZik6Ci0gICAgICAgICMgRm9yIHNhZmV0eSwgcmVtb3ZlIGFuIGRlbGV0ZV93aW5kb3cgYmluZGluZyBiZWZvcmUgZGVzdHJveQorICAgICAgICAjIEZvciBzYWZldHksIHJlbW92ZSB0aGUgZGVsZXRlX3dpbmRvdyBiaW5kaW5nIGJlZm9yZSBkZXN0cm95CiAgICAgICAgIHNlbGYucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCAiIikKICAgICAgICAgdGtpbnRlci5Uay5kZXN0cm95KHNlbGYpCiAKQEAgLTcwMiw3ICs3MDIsNyBAQAogCiBjbGFzcyBFeEZpbGVTZWxlY3RCb3goVGl4V2lkZ2V0KToKICAgICAiIiJFeEZpbGVTZWxlY3RCb3ggLSBNUyBXaW5kb3dzIHN0eWxlIGZpbGUgc2VsZWN0IGJveC4KLSAgICBJdCBwcm92aWRlcyBhbiBjb252ZW5pZW50IG1ldGhvZCBmb3IgdGhlIHVzZXIgdG8gc2VsZWN0IGZpbGVzLgorICAgIEl0IHByb3ZpZGVzIGEgY29udmVuaWVudCBtZXRob2QgZm9yIHRoZSB1c2VyIHRvIHNlbGVjdCBmaWxlcy4KIAogICAgIFN1YndpZGdldCAgICAgICBDbGFzcwogICAgIC0tLS0tLS0tLSAgICAgICAtLS0tLQpAQCAtNzYwLDcgKzc2MCw3IEBACiAjIFNob3VsZCBpbmhlcml0IGZyb20gYSBEaWFsb2cgY2xhc3MKIGNsYXNzIEV4RmlsZVNlbGVjdERpYWxvZyhUaXhXaWRnZXQpOgogICAgICIiIkV4RmlsZVNlbGVjdERpYWxvZyAtIE1TIFdpbmRvd3Mgc3R5bGUgZmlsZSBzZWxlY3QgZGlhbG9nLgotICAgIEl0IHByb3ZpZGVzIGFuIGNvbnZlbmllbnQgbWV0aG9kIGZvciB0aGUgdXNlciB0byBzZWxlY3QgZmlsZXMuCisgICAgSXQgcHJvdmlkZXMgYSBjb252ZW5pZW50IG1ldGhvZCBmb3IgdGhlIHVzZXIgdG8gc2VsZWN0IGZpbGVzLgogCiAgICAgU3Vid2lkZ2V0cyAgICAgICBDbGFzcwogICAgIC0tLS0tLS0tLS0gICAgICAgLS0tLS0KQEAgLTEwNTIsOCArMTA1Miw4IEBACiAKIGNsYXNzIExhYmVsRW50cnkoVGl4V2lkZ2V0KToKICAgICAiIiJMYWJlbEVudHJ5IC0gRW50cnkgZmllbGQgd2l0aCBsYWJlbC4gUGFja2FnZXMgYW4gZW50cnkgd2lkZ2V0Ci0gICAgYW5kIGEgbGFiZWwgaW50byBvbmUgbWVnYSB3aWRnZXQuIEl0IGNhbiBiZXVzZWQgYmUgdXNlZCB0byBzaW1wbGlmeQotICAgIHRoZSBjcmVhdGlvbiBvZiBgYGVudHJ5LWZvcm0nJyB0eXBlIG9mIGludGVyZmFjZS4KKyAgICBhbmQgYSBsYWJlbCBpbnRvIG9uZSBtZWdhIHdpZGdldC4gSXQgY2FuIGJlIHVzZWQgdG8gc2ltcGxpZnkgdGhlIGNyZWF0aW9uCisgICAgb2YgYGBlbnRyeS1mb3JtJycgdHlwZSBvZiBpbnRlcmZhY2UuCiAKICAgICBTdWJ3aWRnZXRzICAgICAgIENsYXNzCiAgICAgLS0tLS0tLS0tLSAgICAgICAtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdHRrLnB5IGIvTGliL3RraW50ZXIvdHRrLnB5CmluZGV4IDI0NGZiM2QuLjBlNTc1OWQgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3R0ay5weQorKysgYi9MaWIvdGtpbnRlci90dGsucHkKQEAgLTEwMTIsNyArMTAxMiw3IEBACiAgICAgICAgICIiIkJlZ2luIGF1dG9pbmNyZW1lbnQgbW9kZTogc2NoZWR1bGVzIGEgcmVjdXJyaW5nIHRpbWVyIGV2ZW50CiAgICAgICAgIHRoYXQgY2FsbHMgbWV0aG9kIHN0ZXAgZXZlcnkgaW50ZXJ2YWwgbWlsbGlzZWNvbmRzLgogCi0gICAgICAgIGludGVydmFsIGRlZmF1bHRzIHRvIDUwIG1pbGxpc2Vjb25kcyAoMjAgc3RlcHMvc2Vjb25kKSBpZiBvbW1pdGVkLiIiIgorICAgICAgICBpbnRlcnZhbCBkZWZhdWx0cyB0byA1MCBtaWxsaXNlY29uZHMgKDIwIHN0ZXBzL3NlY29uZCkgaWYgb21pdHRlZC4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJzdGFydCIsIGludGVydmFsKQogCiAKQEAgLTEzOTIsNyArMTM5Miw5IEBACiAKICAgICBkZWYgc2VsZWN0aW9uKHNlbGYsIHNlbG9wPU5vbmUsIGl0ZW1zPU5vbmUpOgogICAgICAgICAiIiJJZiBzZWxvcCBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIHNlbGVjdGVkIGl0ZW1zLiIiIgotICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJzZWxlY3Rpb24iLCBzZWxvcCwgaXRlbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbXMsIChzdHIsIGJ5dGVzKSk6CisgICAgICAgICAgICBpdGVtcyA9IChpdGVtcywpCisgICAgICAgIHJldHVybiBzZWxmLnRrLnNwbGl0bGlzdChzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNlbGVjdGlvbiIsIHNlbG9wLCBpdGVtcykpCiAKIAogICAgIGRlZiBzZWxlY3Rpb25fc2V0KHNlbGYsIGl0ZW1zKToKQEAgLTE0NzQsNyArMTQ3Niw3IEBACiAgICAgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggaW5zdGFuY2UubGFiZWwiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgdmFyaWFibGU9Tm9uZSwgZnJvbV89MCwgdG89MTAsICoqa3cpOgotICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gaG9yaXpvbnRhbCBMYWJlbGVkU2NhbGUgd2l0aCBwYXJlbnQgbWFzdGVyLCBhCisgICAgICAgICIiIkNvbnN0cnVjdCBhIGhvcml6b250YWwgTGFiZWxlZFNjYWxlIHdpdGggcGFyZW50IG1hc3RlciwgYQogICAgICAgICB2YXJpYWJsZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFR0ayBTY2FsZSB3aWRnZXQgYW5kIGl0cyByYW5nZS4KICAgICAgICAgSWYgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgYSB0a2ludGVyLkludFZhciBpcyBjcmVhdGVkLgogCmRpZmYgLS1naXQgYS9MaWIvdG9rZW4ucHkgYi9MaWIvdG9rZW4ucHkKaW5kZXggNzQ3MGM4Yy4uNWZkYjIyMiAxMDA2NDQKLS0tIGEvTGliL3Rva2VuLnB5CisrKyBiL0xpYi90b2tlbi5weQpAQCAtNjAsMTEgKzYwLDE0IEBACiBET1VCTEVTTEFTSCA9IDQ3CiBET1VCTEVTTEFTSEVRVUFMID0gNDgKIEFUID0gNDkKLVJBUlJPVyA9IDUwCi1FTExJUFNJUyA9IDUxCi1PUCA9IDUyCi1FUlJPUlRPS0VOID0gNTMKLU5fVE9LRU5TID0gNTQKK0FURVFVQUwgPSA1MAorUkFSUk9XID0gNTEKK0VMTElQU0lTID0gNTIKK09QID0gNTMKK0FXQUlUID0gNTQKK0FTWU5DID0gNTUKK0VSUk9SVE9LRU4gPSA1NgorTl9UT0tFTlMgPSA1NwogTlRfT0ZGU0VUID0gMjU2CiAjLS1lbmQgY29uc3RhbnRzLS0KIApAQCAtOTYsOCArOTksOCBAQAogICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiSS9PIGVycm9yOiAlc1xuIiAlIHN0cihlcnIpKQogICAgICAgICBzeXMuZXhpdCgxKQotICAgIGxpbmVzID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCi0gICAgZnAuY2xvc2UoKQorICAgIHdpdGggZnA6CisgICAgICAgIGxpbmVzID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCiAgICAgcHJvZyA9IHJlLmNvbXBpbGUoCiAgICAgICAgICIjZGVmaW5lWyBcdF1bIFx0XSooW0EtWjAtOV1bQS1aMC05X10qKVsgXHRdWyBcdF0qKFswLTldWzAtOV0qKSIsCiAgICAgICAgIHJlLklHTk9SRUNBU0UpCkBAIC0xMTUsOCArMTE4LDggQEAKICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoMikKLSAgICBmb3JtYXQgPSBmcC5yZWFkKCkuc3BsaXQoIlxuIikKLSAgICBmcC5jbG9zZSgpCisgICAgd2l0aCBmcDoKKyAgICAgICAgZm9ybWF0ID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCiAgICAgdHJ5OgogICAgICAgICBzdGFydCA9IGZvcm1hdC5pbmRleCgiIy0tc3RhcnQgY29uc3RhbnRzLS0iKSArIDEKICAgICAgICAgZW5kID0gZm9ybWF0LmluZGV4KCIjLS1lbmQgY29uc3RhbnRzLS0iKQpAQCAtMTMyLDggKzEzNSw4IEBACiAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDQpCi0gICAgZnAud3JpdGUoIlxuIi5qb2luKGZvcm1hdCkpCi0gICAgZnAuY2xvc2UoKQorICAgIHdpdGggZnA6CisgICAgICAgIGZwLndyaXRlKCJcbiIuam9pbihmb3JtYXQpKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdG9rZW5pemUucHkgYi9MaWIvdG9rZW5pemUucHkKaW5kZXggNGQ5M2E4My4uYjFkMGM4MyAxMDA2NDQKLS0tIGEvTGliL3Rva2VuaXplLnB5CisrKyBiL0xpYi90b2tlbml6ZS5weQpAQCAtMzMsNyArMzMsNyBAQAogaW1wb3J0IHN5cwogZnJvbSB0b2tlbiBpbXBvcnQgKgogCi1jb29raWVfcmUgPSByZS5jb21waWxlKHInXlsgXHRcZl0qIy4qY29kaW5nWzo9XVsgXHRdKihbLVx3Ll0rKScsIHJlLkFTQ0lJKQorY29va2llX3JlID0gcmUuY29tcGlsZShyJ15bIFx0XGZdKiMuKj9jb2RpbmdbOj1dWyBcdF0qKFstXHcuXSspJywgcmUuQVNDSUkpCiBibGFua19yZSA9IHJlLmNvbXBpbGUoYnInXlsgXHRcZl0qKD86WyNcclxuXXwkKScsIHJlLkFTQ0lJKQogCiBpbXBvcnQgdG9rZW4KQEAgLTkxLDcgKzkxLDggQEAKICAgICAnKio9JzogRE9VQkxFU1RBUkVRVUFMLAogICAgICcvLyc6ICBET1VCTEVTTEFTSCwKICAgICAnLy89JzogRE9VQkxFU0xBU0hFUVVBTCwKLSAgICAnQCc6ICAgQVQKKyAgICAnQCc6ICAgQVQsCisgICAgJ0A9JzogIEFURVFVQUwsCiB9CiAKIGNsYXNzIFRva2VuSW5mbyhjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCdUb2tlbkluZm8nLCAndHlwZSBzdHJpbmcgc3RhcnQgZW5kIGxpbmUnKSk6CkBAIC0xNTAsNyArMTUxLDcgQEAKICMgcmVjb2duaXplZCBhcyB0d28gaW5zdGFuY2VzIG9mID0pLgogT3BlcmF0b3IgPSBncm91cChyIlwqXCo9PyIsIHIiPj49PyIsIHIiPDw9PyIsIHIiIT0iLAogICAgICAgICAgICAgICAgICByIi8vPT8iLCByIi0+IiwKLSAgICAgICAgICAgICAgICAgciJbK1wtKi8lJnxePTw+XT0/IiwKKyAgICAgICAgICAgICAgICAgciJbK1wtKi8lJkB8Xj08Pl09PyIsCiAgICAgICAgICAgICAgICAgIHIifiIpCiAKIEJyYWNrZXQgPSAnW11bKCl7fV0nCkBAIC0xODYsNyArMTg3LDYgQEAKICAgICAgICAgICAgInJCJycnIjogU2luZ2xlMywgJ3JCIiIiJzogRG91YmxlMywKICAgICAgICAgICAgIlJCJycnIjogU2luZ2xlMywgJ1JCIiIiJzogRG91YmxlMywKICAgICAgICAgICAgInUnJyciOiBTaW5nbGUzLCAndSIiIic6IERvdWJsZTMsCi0gICAgICAgICAgICJSJycnIjogU2luZ2xlMywgJ1IiIiInOiBEb3VibGUzLAogICAgICAgICAgICAiVScnJyI6IFNpbmdsZTMsICdVIiIiJzogRG91YmxlMywKICAgICAgICAgICAgJ3InOiBOb25lLCAnUic6IE5vbmUsICdiJzogTm9uZSwgJ0InOiBOb25lLAogICAgICAgICAgICAndSc6IE5vbmUsICdVJzogTm9uZX0KQEAgLTI5MSw3ICsyOTEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSB0b2t2YWwKICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAgICAgICAgICBpZiB0b2tudW0gaW4gKE5BTUUsIE5VTUJFUik6CisgICAgICAgICAgICBpZiB0b2tudW0gaW4gKE5BTUUsIE5VTUJFUiwgQVNZTkMsIEFXQUlUKToKICAgICAgICAgICAgICAgICB0b2t2YWwgKz0gJyAnCiAKICAgICAgICAgICAgICMgSW5zZXJ0IGEgc3BhY2UgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgc3RyaW5ncwpAQCAtMzI4LDggKzMyOCw4IEBACiAgICAgUm91bmQtdHJpcCBpbnZhcmlhbnQgZm9yIGZ1bGwgaW5wdXQ6CiAgICAgICAgIFVudG9rZW5pemVkIHNvdXJjZSB3aWxsIG1hdGNoIGlucHV0IHNvdXJjZSBleGFjdGx5CiAKLSAgICBSb3VuZC10cmlwIGludmFyaWFudCBmb3IgbGltaXRlZCBpbnRwdXQ6Ci0gICAgICAgICMgT3V0cHV0IGJ5dGVzIHdpbGwgdG9rZW5pemUgdGhlIGJhY2sgdG8gdGhlIGlucHV0CisgICAgUm91bmQtdHJpcCBpbnZhcmlhbnQgZm9yIGxpbWl0ZWQgaW5wdXQ6CisgICAgICAgICMgT3V0cHV0IGJ5dGVzIHdpbGwgdG9rZW5pemUgYmFjayB0byB0aGUgaW5wdXQKICAgICAgICAgdDEgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKGYucmVhZGxpbmUpXQogICAgICAgICBuZXdjb2RlID0gdW50b2tlbml6ZSh0MSkKICAgICAgICAgcmVhZGxpbmUgPSBCeXRlc0lPKG5ld2NvZGUpLnJlYWRsaW5lCkBAIC00NjUsMTAgKzQ2NSwxMCBAQAogCiBkZWYgdG9rZW5pemUocmVhZGxpbmUpOgogICAgICIiIgotICAgIFRoZSB0b2tlbml6ZSgpIGdlbmVyYXRvciByZXF1aXJlcyBvbmUgYXJnbWVudCwgcmVhZGxpbmUsIHdoaWNoCisgICAgVGhlIHRva2VuaXplKCkgZ2VuZXJhdG9yIHJlcXVpcmVzIG9uZSBhcmd1bWVudCwgcmVhZGxpbmUsIHdoaWNoCiAgICAgbXVzdCBiZSBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCBwcm92aWRlcyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlCiAgICAgcmVhZGxpbmUoKSBtZXRob2Qgb2YgYnVpbHQtaW4gZmlsZSBvYmplY3RzLiAgRWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbgotICAgIHNob3VsZCByZXR1cm4gb25lIGxpbmUgb2YgaW5wdXQgYXMgYnl0ZXMuICBBbHRlcm5hdGVseSwgcmVhZGxpbmUKKyAgICBzaG91bGQgcmV0dXJuIG9uZSBsaW5lIG9mIGlucHV0IGFzIGJ5dGVzLiAgQWx0ZXJuYXRpdmVseSwgcmVhZGxpbmUKICAgICBjYW4gYmUgYSBjYWxsYWJsZSBmdW5jdGlvbiB0ZXJtaW5hdGluZyB3aXRoIFN0b3BJdGVyYXRpb246CiAgICAgICAgIHJlYWRsaW5lID0gb3BlbihteWZpbGUsICdyYicpLl9fbmV4dF9fICAjIEV4YW1wbGUgb2YgYWx0ZXJuYXRlIHJlYWRsaW5lCiAKQEAgLTQ5OCw2ICs0OTgsMTIgQEAKICAgICBjb250bGluZSA9IE5vbmUKICAgICBpbmRlbnRzID0gWzBdCiAKKyAgICAjICdzdGFzaGVkJyBhbmQgJ2FzeW5jXyonIGFyZSB1c2VkIGZvciBhc3luYy9hd2FpdCBwYXJzaW5nCisgICAgc3Rhc2hlZCA9IE5vbmUKKyAgICBhc3luY19kZWYgPSBGYWxzZQorICAgIGFzeW5jX2RlZl9pbmRlbnQgPSAwCisgICAgYXN5bmNfZGVmX25sID0gRmFsc2UKKwogICAgIGlmIGVuY29kaW5nIGlzIG5vdCBOb25lOgogICAgICAgICBpZiBlbmNvZGluZyA9PSAidXRmLTgtc2lnIjoKICAgICAgICAgICAgICMgQk9NIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc3RyaXBwZWQuCkBAIC01NzMsOCArNTc5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidW5pbmRlbnQgZG9lcyBub3QgbWF0Y2ggYW55IG91dGVyIGluZGVudGF0aW9uIGxldmVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICgiPHRva2VuaXplPiIsIGxudW0sIHBvcywgbGluZSkpCiAgICAgICAgICAgICAgICAgaW5kZW50cyA9IGluZGVudHNbOi0xXQorCisgICAgICAgICAgICAgICAgaWYgYXN5bmNfZGVmIGFuZCBhc3luY19kZWZfaW5kZW50ID49IGluZGVudHNbLTFdOgorICAgICAgICAgICAgICAgICAgICBhc3luY19kZWYgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBhc3luY19kZWZfbmwgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBhc3luY19kZWZfaW5kZW50ID0gMAorCiAgICAgICAgICAgICAgICAgeWllbGQgVG9rZW5JbmZvKERFREVOVCwgJycsIChsbnVtLCBwb3MpLCAobG51bSwgcG9zKSwgbGluZSkKIAorICAgICAgICAgICAgaWYgYXN5bmNfZGVmIGFuZCBhc3luY19kZWZfbmwgYW5kIGFzeW5jX2RlZl9pbmRlbnQgPj0gaW5kZW50c1stMV06CisgICAgICAgICAgICAgICAgYXN5bmNfZGVmID0gRmFsc2UKKyAgICAgICAgICAgICAgICBhc3luY19kZWZfbmwgPSBGYWxzZQorICAgICAgICAgICAgICAgIGFzeW5jX2RlZl9pbmRlbnQgPSAwCisKICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb250aW51ZWQgc3RhdGVtZW50CiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICByYWlzZSBUb2tlbkVycm9yKCJFT0YgaW4gbXVsdGktbGluZSBzdGF0ZW1lbnQiLCAobG51bSwgMCkpCkBAIC01OTMsMTAgKzYxMCwyMSBAQAogICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbCA9PSAnLicgYW5kIHRva2VuICE9ICcuJyBhbmQgdG9rZW4gIT0gJy4uLicpKToKICAgICAgICAgICAgICAgICAgICAgeWllbGQgVG9rZW5JbmZvKE5VTUJFUiwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCiAgICAgICAgICAgICAgICAgZWxpZiBpbml0aWFsIGluICdcclxuJzoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgVG9rZW5JbmZvKE5MIGlmIHBhcmVubGV2ID4gMCBlbHNlIE5FV0xJTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgc3BvcywgZXBvcywgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3Rhc2hlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN0YXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXNoZWQgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHBhcmVubGV2ID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIFRva2VuSW5mbyhOTCwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbkluZm8oTkVXTElORSwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhc3luY19kZWY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNfZGVmX25sID0gVHJ1ZQorCiAgICAgICAgICAgICAgICAgZWxpZiBpbml0aWFsID09ICcjJzoKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCB0b2tlbi5lbmRzd2l0aCgiXG4iKQorICAgICAgICAgICAgICAgICAgICBpZiBzdGFzaGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgc3Rhc2hlZAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rhc2hlZCA9IE5vbmUKICAgICAgICAgICAgICAgICAgICAgeWllbGQgVG9rZW5JbmZvKENPTU1FTlQsIHRva2VuLCBzcG9zLCBlcG9zLCBsaW5lKQogICAgICAgICAgICAgICAgIGVsaWYgdG9rZW4gaW4gdHJpcGxlX3F1b3RlZDoKICAgICAgICAgICAgICAgICAgICAgZW5kcHJvZyA9IF9jb21waWxlKGVuZHBhdHNbdG9rZW5dKQpAQCAtNjI0LDcgKzY1MiwzNiBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yZGluYXJ5IHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgVG9rZW5JbmZvKFNUUklORywgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCiAgICAgICAgICAgICAgICAgZWxpZiBpbml0aWFsLmlzaWRlbnRpZmllcigpOiAgICAgICAgICAgICAgICMgb3JkaW5hcnkgbmFtZQotICAgICAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbkluZm8oTkFNRSwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuIGluICgnYXN5bmMnLCAnYXdhaXQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFzeW5jX2RlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbkluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTWU5DIGlmIHRva2VuID09ICdhc3luYycgZWxzZSBBV0FJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICB0b2sgPSBUb2tlbkluZm8oTkFNRSwgdG9rZW4sIHNwb3MsIGVwb3MsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICdhc3luYycgYW5kIG5vdCBzdGFzaGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgc3Rhc2hlZCA9IHRvaworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAnZGVmJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFzaGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzdGFzaGVkLnR5cGUgPT0gTkFNRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc3Rhc2hlZC5zdHJpbmcgPT0gJ2FzeW5jJyk6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY19kZWYgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNfZGVmX2luZGVudCA9IGluZGVudHNbLTFdCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbkluZm8oQVNZTkMsIHN0YXNoZWQuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkLnN0YXJ0LCBzdGFzaGVkLmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rhc2hlZC5saW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXNoZWQgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgaWYgc3Rhc2hlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN0YXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXNoZWQgPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgdG9rCiAgICAgICAgICAgICAgICAgZWxpZiBpbml0aWFsID09ICdcXCc6ICAgICAgICAgICAgICAgICAgICAgICMgY29udGludWVkIHN0bXQKICAgICAgICAgICAgICAgICAgICAgY29udGludWVkID0gMQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC02MzIsMTIgKzY4OSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW5sZXYgKz0gMQogICAgICAgICAgICAgICAgICAgICBlbGlmIGluaXRpYWwgaW4gJyldfSc6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbmxldiAtPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIHN0YXNoZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdGFzaGVkCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFzaGVkID0gTm9uZQogICAgICAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbkluZm8oT1AsIHRva2VuLCBzcG9zLCBlcG9zLCBsaW5lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbkluZm8oRVJST1JUT0tFTiwgbGluZVtwb3NdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxudW0sIHBvcyksIChsbnVtLCBwb3MrMSksIGxpbmUpCiAgICAgICAgICAgICAgICAgcG9zICs9IDEKIAorICAgIGlmIHN0YXNoZWQ6CisgICAgICAgIHlpZWxkIHN0YXNoZWQKKyAgICAgICAgc3Rhc2hlZCA9IE5vbmUKKwogICAgIGZvciBpbmRlbnQgaW4gaW5kZW50c1sxOl06ICAgICAgICAgICAgICAgICAjIHBvcCByZW1haW5pbmcgaW5kZW50IGxldmVscwogICAgICAgICB5aWVsZCBUb2tlbkluZm8oREVERU5ULCAnJywgKGxudW0sIDApLCAobG51bSwgMCksICcnKQogICAgIHlpZWxkIFRva2VuSW5mbyhFTkRNQVJLRVIsICcnLCAobG51bSwgMCksIChsbnVtLCAwKSwgJycpCmRpZmYgLS1naXQgYS9MaWIvdHJhY2UucHkgYi9MaWIvdHJhY2UucHkKaW5kZXggMDlmZTllZS4uZjEwODI2NiAxMDA3NTUKLS0tIGEvTGliL3RyYWNlLnB5CisrKyBiL0xpYi90cmFjZS5weQpAQCAtNTksMTAgKzU5LDcgQEAKIGltcG9ydCBkaXMKIGltcG9ydCBwaWNrbGUKIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4gYXMgX3dhcm4KLXRyeToKLSAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyBfdGltZQorZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgX3RpbWUKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTIzNSw4ICsyMzIsOCBAQAogICAgICAgICBpZiBzZWxmLmluZmlsZToKICAgICAgICAgICAgICMgVHJ5IHRvIG1lcmdlIGV4aXN0aW5nIGNvdW50cyBmaWxlLgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMgPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZChvcGVuKHNlbGYuaW5maWxlLCAncmInKSkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5pbmZpbGUsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMgPSBwaWNrbGUubG9hZChmKQogICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlKHNlbGYuX19jbGFzc19fKGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMpKQogICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvciwgVmFsdWVFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCgiU2tpcHBpbmcgY291bnRzIGZpbGUgJXI6ICVzIgpAQCAtMzA4LDcgKzMwNSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLmlzX2lnbm9yZWRfZmlsZW5hbWUoZmlsZW5hbWUpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCgiLnB5YyIsICIucHlvIikpOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weWMiKToKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lWzotMV0KIAogICAgICAgICAgICAgaWYgY292ZXJkaXIgaXMgTm9uZToKQEAgLTMyNiwxNiArMzIzLDE3IEBACiAgICAgICAgICAgICAgICAgbG5vdGFiID0gX2ZpbmRfZXhlY3V0YWJsZV9saW5lbm9zKGZpbGVuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBsbm90YWIgPSB7fQorICAgICAgICAgICAgaWYgbG5vdGFiOgorICAgICAgICAgICAgICAgIHNvdXJjZSA9IGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBjb3ZlcnBhdGggPSBvcy5wYXRoLmpvaW4oZGlyLCBtb2R1bGVuYW1lICsgIi5jb3ZlciIpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIF8gPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcoZnAucmVhZGxpbmUpCisgICAgICAgICAgICAgICAgbl9oaXRzLCBuX2xpbmVzID0gc2VsZi53cml0ZV9yZXN1bHRzX2ZpbGUoY292ZXJwYXRoLCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5vdGFiLCBjb3VudCwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgaWYgc3VtbWFyeSBhbmQgbl9saW5lczoKKyAgICAgICAgICAgICAgICAgICAgcGVyY2VudCA9IGludCgxMDAgKiBuX2hpdHMgLyBuX2xpbmVzKQorICAgICAgICAgICAgICAgICAgICBzdW1zW21vZHVsZW5hbWVdID0gbl9saW5lcywgcGVyY2VudCwgbW9kdWxlbmFtZSwgZmlsZW5hbWUKIAotICAgICAgICAgICAgc291cmNlID0gbGluZWNhY2hlLmdldGxpbmVzKGZpbGVuYW1lKQotICAgICAgICAgICAgY292ZXJwYXRoID0gb3MucGF0aC5qb2luKGRpciwgbW9kdWxlbmFtZSArICIuY292ZXIiKQotICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmcDoKLSAgICAgICAgICAgICAgICBlbmNvZGluZywgXyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhmcC5yZWFkbGluZSkKLSAgICAgICAgICAgIG5faGl0cywgbl9saW5lcyA9IHNlbGYud3JpdGVfcmVzdWx0c19maWxlKGNvdmVycGF0aCwgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5vdGFiLCBjb3VudCwgZW5jb2RpbmcpCi0gICAgICAgICAgICBpZiBzdW1tYXJ5IGFuZCBuX2xpbmVzOgotICAgICAgICAgICAgICAgIHBlcmNlbnQgPSBpbnQoMTAwICogbl9oaXRzIC8gbl9saW5lcykKLSAgICAgICAgICAgICAgICBzdW1zW21vZHVsZW5hbWVdID0gbl9saW5lcywgcGVyY2VudCwgbW9kdWxlbmFtZSwgZmlsZW5hbWUKIAogICAgICAgICBpZiBzdW1tYXJ5IGFuZCBzdW1zOgogICAgICAgICAgICAgcHJpbnQoImxpbmVzICAgY292JSAgIG1vZHVsZSAgIChwYXRoKSIpCkBAIC0zNjMsMjYgKzM2MSwyNiBAQAogCiAgICAgICAgIG5fbGluZXMgPSAwCiAgICAgICAgIG5faGl0cyA9IDAKLSAgICAgICAgZm9yIGxpbmVubywgbGluZSBpbiBlbnVtZXJhdGUobGluZXMsIDEpOgotICAgICAgICAgICAgIyBkbyB0aGUgYmxhbmsvY29tbWVudCBtYXRjaCB0byB0cnkgdG8gbWFyayBtb3JlIGxpbmVzCi0gICAgICAgICAgICAjIChoZWxwIHRoZSByZWFkZXIgZmluZCBzdHVmZiB0aGF0IGhhc24ndCBiZWVuIGNvdmVyZWQpCi0gICAgICAgICAgICBpZiBsaW5lbm8gaW4gbGluZXNfaGl0OgotICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoIiU1ZDogIiAlIGxpbmVzX2hpdFtsaW5lbm9dKQotICAgICAgICAgICAgICAgIG5faGl0cyArPSAxCi0gICAgICAgICAgICAgICAgbl9saW5lcyArPSAxCi0gICAgICAgICAgICBlbGlmIHJ4X2JsYW5rLm1hdGNoKGxpbmUpOgotICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoIiAgICAgICAiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIGxpbmVzIHByZWNlZGVkIGJ5IG5vIG1hcmtzIHdlcmVuJ3QgaGl0Ci0gICAgICAgICAgICAgICAgIyBIaWdobGlnaHQgdGhlbSBpZiBzbyBpbmRpY2F0ZWQsIHVubGVzcyB0aGUgbGluZSBjb250YWlucwotICAgICAgICAgICAgICAgICMgI3ByYWdtYTogTk8gQ09WRVIKLSAgICAgICAgICAgICAgICBpZiBsaW5lbm8gaW4gbG5vdGFiIGFuZCBub3QgUFJBR01BX05PQ09WRVIgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSgiPj4+Pj4+ICIpCisgICAgICAgIHdpdGggb3V0ZmlsZToKKyAgICAgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzLCAxKToKKyAgICAgICAgICAgICAgICAjIGRvIHRoZSBibGFuay9jb21tZW50IG1hdGNoIHRvIHRyeSB0byBtYXJrIG1vcmUgbGluZXMKKyAgICAgICAgICAgICAgICAjIChoZWxwIHRoZSByZWFkZXIgZmluZCBzdHVmZiB0aGF0IGhhc24ndCBiZWVuIGNvdmVyZWQpCisgICAgICAgICAgICAgICAgaWYgbGluZW5vIGluIGxpbmVzX2hpdDoKKyAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSgiJTVkOiAiICUgbGluZXNfaGl0W2xpbmVub10pCisgICAgICAgICAgICAgICAgICAgIG5faGl0cyArPSAxCiAgICAgICAgICAgICAgICAgICAgIG5fbGluZXMgKz0gMQotICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZWxpZiByeF9ibGFuay5tYXRjaChsaW5lKToKICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSgiICAgICAgICIpCi0gICAgICAgICAgICBvdXRmaWxlLndyaXRlKGxpbmUuZXhwYW5kdGFicyg4KSkKLSAgICAgICAgb3V0ZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBsaW5lcyBwcmVjZWRlZCBieSBubyBtYXJrcyB3ZXJlbid0IGhpdAorICAgICAgICAgICAgICAgICAgICAjIEhpZ2hsaWdodCB0aGVtIGlmIHNvIGluZGljYXRlZCwgdW5sZXNzIHRoZSBsaW5lIGNvbnRhaW5zCisgICAgICAgICAgICAgICAgICAgICMgI3ByYWdtYTogTk8gQ09WRVIKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZW5vIGluIGxub3RhYiBhbmQgbm90IFBSQUdNQV9OT0NPVkVSIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKCI+Pj4+Pj4gIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG5fbGluZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSgiICAgICAgICIpCisgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZShsaW5lLmV4cGFuZHRhYnMoOCkpCiAKICAgICAgICAgcmV0dXJuIG5faGl0cywgbl9saW5lcwogCmRpZmYgLS1naXQgYS9MaWIvdHJhY2ViYWNrLnB5IGIvTGliL3RyYWNlYmFjay5weQppbmRleCBmYWY1OTNhLi5hMmViNTM5IDEwMDY0NAotLS0gYS9MaWIvdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90cmFjZWJhY2sucHkKQEAgLTEsMzIgKzEsMjcgQEAKICIiIkV4dHJhY3QsIGZvcm1hdCBhbmQgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgUHl0aG9uIHN0YWNrIHRyYWNlcy4iIiIKIAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgc3lzCi1pbXBvcnQgb3BlcmF0b3IKIAogX19hbGxfXyA9IFsnZXh0cmFjdF9zdGFjaycsICdleHRyYWN0X3RiJywgJ2Zvcm1hdF9leGNlcHRpb24nLAogICAgICAgICAgICAnZm9ybWF0X2V4Y2VwdGlvbl9vbmx5JywgJ2Zvcm1hdF9saXN0JywgJ2Zvcm1hdF9zdGFjaycsCiAgICAgICAgICAgICdmb3JtYXRfdGInLCAncHJpbnRfZXhjJywgJ2Zvcm1hdF9leGMnLCAncHJpbnRfZXhjZXB0aW9uJywKLSAgICAgICAgICAgJ3ByaW50X2xhc3QnLCAncHJpbnRfc3RhY2snLCAncHJpbnRfdGInLAotICAgICAgICAgICAnY2xlYXJfZnJhbWVzJ10KKyAgICAgICAgICAgJ3ByaW50X2xhc3QnLCAncHJpbnRfc3RhY2snLCAncHJpbnRfdGInLCAnY2xlYXJfZnJhbWVzJywKKyAgICAgICAgICAgJ0ZyYW1lU3VtbWFyeScsICdTdGFja1N1bW1hcnknLCAnVHJhY2ViYWNrRXhjZXB0aW9uJywKKyAgICAgICAgICAgJ3dhbGtfc3RhY2snLCAnd2Fsa190YiddCiAKICMKICMgRm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgbGlzdHMgb2YgdHJhY2ViYWNrIGxpbmVzLgogIwogCi1kZWYgX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpOgotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgotICAgICAgICBpdGVtID0gJyAgRmlsZSAie30iLCBsaW5lIHt9LCBpbiB7fVxuJy5mb3JtYXQoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIGl0ZW0gPSBpdGVtICsgJyAgICB7fVxuJy5mb3JtYXQobGluZS5zdHJpcCgpKQotICAgICAgICB5aWVsZCBpdGVtCi0KIGRlZiBwcmludF9saXN0KGV4dHJhY3RlZF9saXN0LCBmaWxlPU5vbmUpOgogICAgICIiIlByaW50IHRoZSBsaXN0IG9mIHR1cGxlcyBhcyByZXR1cm5lZCBieSBleHRyYWN0X3RiKCkgb3IKICAgICBleHRyYWN0X3N0YWNrKCkgYXMgYSBmb3JtYXR0ZWQgc3RhY2sgdHJhY2UgdG8gdGhlIGdpdmVuIGZpbGUuIiIiCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGZvciBpdGVtIGluIF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KToKKyAgICBmb3IgaXRlbSBpbiBTdGFja1N1bW1hcnkuZnJvbV9saXN0KGV4dHJhY3RlZF9saXN0KS5mb3JtYXQoKToKICAgICAgICAgcHJpbnQoaXRlbSwgZmlsZT1maWxlLCBlbmQ9IiIpCiAKIGRlZiBmb3JtYXRfbGlzdChleHRyYWN0ZWRfbGlzdCk6CkBAIC0zOSw0NSArMzQsMTIgQEAKICAgICB0aGUgc3RyaW5ncyBtYXkgY29udGFpbiBpbnRlcm5hbCBuZXdsaW5lcyBhcyB3ZWxsLCBmb3IgdGhvc2UgaXRlbXMKICAgICB3aG9zZSBzb3VyY2UgdGV4dCBsaW5lIGlzIG5vdCBOb25lLgogICAgICIiIgotICAgIHJldHVybiBsaXN0KF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KSkKKyAgICByZXR1cm4gU3RhY2tTdW1tYXJ5LmZyb21fbGlzdChleHRyYWN0ZWRfbGlzdCkuZm9ybWF0KCkKIAogIwogIyBQcmludGluZyBhbmQgRXh0cmFjdGluZyBUcmFjZWJhY2tzLgogIwogCi0jIGV4dHJhY3RvciB0YWtlcyBjdXJyIGFuZCBuZWVkcyB0byByZXR1cm4gYSB0dXBsZSBvZjoKLSMgLSBGcmFtZSBvYmplY3QKLSMgLSBMaW5lIG51bWJlcgotIyAtIE5leHQgaXRlbSAoc2FtZSB0eXBlIGFzIGN1cnIpCi0jIEluIHByYWN0aWNlLCBjdXJyIGlzIGVpdGhlciBhIHRyYWNlYmFjayBvciBhIGZyYW1lLgotZGVmIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoY3VyciwgbGltaXQsIGV4dHJhY3Rvcik6Ci0gICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgbGltaXQgPSBnZXRhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0JywgTm9uZSkKLQotICAgIG4gPSAwCi0gICAgd2hpbGUgY3VyciBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgZiwgbGluZW5vLCBuZXh0X2l0ZW0gPSBleHRyYWN0b3IoY3VycikKLSAgICAgICAgY28gPSBmLmZfY29kZQotICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCi0gICAgICAgIG5hbWUgPSBjby5jb19uYW1lCi0KLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZSA9IE5vbmUKLQotICAgICAgICB5aWVsZCAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkKLSAgICAgICAgY3VyciA9IG5leHRfaXRlbQotICAgICAgICBuICs9IDEKLQotZGVmIF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0KToKLSAgICByZXR1cm4gX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcigKLSAgICAgICAgICAgICAgICB0YiwgbGltaXQsCi0gICAgICAgICAgICAgICAgb3BlcmF0b3IuYXR0cmdldHRlcigidGJfZnJhbWUiLCAidGJfbGluZW5vIiwgInRiX25leHQiKSkKLQogZGVmIHByaW50X3RiKHRiLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpOgogICAgICIiIlByaW50IHVwIHRvICdsaW1pdCcgc3RhY2sgdHJhY2UgZW50cmllcyBmcm9tIHRoZSB0cmFjZWJhY2sgJ3RiJy4KIApAQCAtOTAsNyArNTIsNyBAQAogCiBkZWYgZm9ybWF0X3RiKHRiLCBsaW1pdD1Ob25lKToKICAgICAiIiJBIHNob3J0aGFuZCBmb3IgJ2Zvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0KSknLiIiIgotICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdD1saW1pdCkpCisgICAgcmV0dXJuIGV4dHJhY3RfdGIodGIsIGxpbWl0PWxpbWl0KS5mb3JtYXQoKQogCiBkZWYgZXh0cmFjdF90Yih0YiwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIGxpc3Qgb2YgdXAgdG8gbGltaXQgcHJlLXByb2Nlc3NlZCBlbnRyaWVzIGZyb20gdHJhY2ViYWNrLgpAQCAtMTAzLDcgKzY1LDcgQEAKICAgICBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHN0cmlwcGVkOyBpZiB0aGUgc291cmNlIGlzIG5vdAogICAgIGF2YWlsYWJsZSBpdCBpcyBOb25lLgogICAgICIiIgotICAgIHJldHVybiBsaXN0KF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0PWxpbWl0KSkKKyAgICByZXR1cm4gU3RhY2tTdW1tYXJ5LmV4dHJhY3Qod2Fsa190Yih0YiksIGxpbWl0PWxpbWl0KQogCiAjCiAjIEV4Y2VwdGlvbiBmb3JtYXR0aW5nIGFuZCBvdXRwdXQuCkBAIC0xMTEsNDcgKzczLDEyIEBACiAKIF9jYXVzZV9tZXNzYWdlID0gKAogICAgICJcblRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2UgIgotICAgICJvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcbiIpCisgICAgIm9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOlxuXG4iKQogCiBfY29udGV4dF9tZXNzYWdlID0gKAogICAgICJcbkR1cmluZyBoYW5kbGluZyBvZiB0aGUgYWJvdmUgZXhjZXB0aW9uLCAiCi0gICAgImFub3RoZXIgZXhjZXB0aW9uIG9jY3VycmVkOlxuIikKKyAgICAiYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG5cbiIpCiAKLWRlZiBfaXRlcl9jaGFpbihleGMsIGN1c3RvbV90Yj1Ob25lLCBzZWVuPU5vbmUpOgotICAgIGlmIHNlZW4gaXMgTm9uZToKLSAgICAgICAgc2VlbiA9IHNldCgpCi0gICAgc2Vlbi5hZGQoZXhjKQotICAgIGl0cyA9IFtdCi0gICAgY29udGV4dCA9IGV4Yy5fX2NvbnRleHRfXwotICAgIGNhdXNlID0gZXhjLl9fY2F1c2VfXwotICAgIGlmIGNhdXNlIGlzIG5vdCBOb25lIGFuZCBjYXVzZSBub3QgaW4gc2VlbjoKLSAgICAgICAgaXRzLmFwcGVuZChfaXRlcl9jaGFpbihjYXVzZSwgRmFsc2UsIHNlZW4pKQotICAgICAgICBpdHMuYXBwZW5kKFsoX2NhdXNlX21lc3NhZ2UsIE5vbmUpXSkKLSAgICBlbGlmIChjb250ZXh0IGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgIG5vdCBleGMuX19zdXBwcmVzc19jb250ZXh0X18gYW5kCi0gICAgICAgICAgY29udGV4dCBub3QgaW4gc2Vlbik6Ci0gICAgICAgIGl0cy5hcHBlbmQoX2l0ZXJfY2hhaW4oY29udGV4dCwgTm9uZSwgc2VlbikpCi0gICAgICAgIGl0cy5hcHBlbmQoWyhfY29udGV4dF9tZXNzYWdlLCBOb25lKV0pCi0gICAgaXRzLmFwcGVuZChbKGV4YywgY3VzdG9tX3RiIG9yIGV4Yy5fX3RyYWNlYmFja19fKV0pCi0gICAgIyBpdGVydG9vbHMuY2hhaW4gaXMgaW4gYW4gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgbWF5IGJlIHVuYXZhaWxhYmxlCi0gICAgZm9yIGl0IGluIGl0czoKLSAgICAgICAgeWllbGQgZnJvbSBpdAotCi1kZWYgX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pOgotICAgIGlmIGNoYWluOgotICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCi0gICAgZWxzZToKLSAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQotCi0gICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYSBjYXVzZS9jb250ZXh0IG1lc3NhZ2UgbGluZQotICAgICAgICAgICAgeWllbGQgdmFsdWUgKyAnXG4nCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiB0YjoKLSAgICAgICAgICAgIHlpZWxkICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nCi0gICAgICAgICAgICB5aWVsZCBmcm9tIF9mb3JtYXRfbGlzdF9pdGVyKF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0PWxpbWl0KSkKLSAgICAgICAgeWllbGQgZnJvbSBfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIodHlwZSh2YWx1ZSksIHZhbHVlKQogCiBkZWYgcHJpbnRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiUHJpbnQgZXhjZXB0aW9uIHVwIHRvICdsaW1pdCcgc3RhY2sgdHJhY2UgZW50cmllcyBmcm9tICd0YicgdG8gJ2ZpbGUnLgpAQCAtMTY0LDExICs5MSwxNiBAQAogICAgIG9jY3VycmVkIHdpdGggYSBjYXJldCBvbiB0aGUgbmV4dCBsaW5lIGluZGljYXRpbmcgdGhlIGFwcHJveGltYXRlCiAgICAgcG9zaXRpb24gb2YgdGhlIGVycm9yLgogICAgICIiIgorICAgICMgZm9ybWF0X2V4Y2VwdGlvbiBoYXMgaWdub3JlZCBldHlwZSBmb3Igc29tZSB0aW1lLCBhbmQgY29kZSBzdWNoIGFzIGNnaXRiCisgICAgIyBwYXNzZXMgaW4gYm9ndXMgdmFsdWVzIGFzIGEgcmVzdWx0LiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHN1Y2ggY29kZSB3ZQorICAgICMgaWdub3JlIGl0IGhlcmUgKHJhdGhlciB0aGFuIGluIHRoZSBuZXcgVHJhY2ViYWNrRXhjZXB0aW9uIEFQSSkuCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGZvciBsaW5lIGluIF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKToKKyAgICBmb3IgbGluZSBpbiBUcmFjZWJhY2tFeGNlcHRpb24oCisgICAgICAgICAgICB0eXBlKHZhbHVlKSwgdmFsdWUsIHRiLCBsaW1pdD1saW1pdCkuZm9ybWF0KGNoYWluPWNoYWluKToKICAgICAgICAgcHJpbnQobGluZSwgZmlsZT1maWxlLCBlbmQ9IiIpCiAKKwogZGVmIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiRm9ybWF0IGEgc3RhY2sgdHJhY2UgYW5kIHRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24uCiAKQEAgLTE3OCw3ICsxMTAsMTIgQEAKICAgICB0aGVzZSBsaW5lcyBhcmUgY29uY2F0ZW5hdGVkIGFuZCBwcmludGVkLCBleGFjdGx5IHRoZSBzYW1lIHRleHQgaXMKICAgICBwcmludGVkIGFzIGRvZXMgcHJpbnRfZXhjZXB0aW9uKCkuCiAgICAgIiIiCi0gICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pKQorICAgICMgZm9ybWF0X2V4Y2VwdGlvbiBoYXMgaWdub3JlZCBldHlwZSBmb3Igc29tZSB0aW1lLCBhbmQgY29kZSBzdWNoIGFzIGNnaXRiCisgICAgIyBwYXNzZXMgaW4gYm9ndXMgdmFsdWVzIGFzIGEgcmVzdWx0LiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHN1Y2ggY29kZSB3ZQorICAgICMgaWdub3JlIGl0IGhlcmUgKHJhdGhlciB0aGFuIGluIHRoZSBuZXcgVHJhY2ViYWNrRXhjZXB0aW9uIEFQSSkuCisgICAgcmV0dXJuIGxpc3QoVHJhY2ViYWNrRXhjZXB0aW9uKAorICAgICAgICB0eXBlKHZhbHVlKSwgdmFsdWUsIHRiLCBsaW1pdD1saW1pdCkuZm9ybWF0KGNoYWluPWNoYWluKSkKKwogCiBkZWYgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV0eXBlLCB2YWx1ZSk6CiAgICAgIiIiRm9ybWF0IHRoZSBleGNlcHRpb24gcGFydCBvZiBhIHRyYWNlYmFjay4KQEAgLTE5Niw0NiArMTMzLDE0IEBACiAgICAgc3RyaW5nIGluIHRoZSBsaXN0LgogCiAgICAgIiIiCi0gICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKGV0eXBlLCB2YWx1ZSkpCisgICAgcmV0dXJuIGxpc3QoVHJhY2ViYWNrRXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgTm9uZSkuZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KCkpCiAKLWRlZiBfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIoZXR5cGUsIHZhbHVlKToKLSAgICAjIEdyYWNlZnVsbHkgaGFuZGxlICh0aGUgd2F5IFB5dGhvbiAyLjQgYW5kIGVhcmxpZXIgZGlkKSB0aGUgY2FzZSBvZgotICAgICMgYmVpbmcgY2FsbGVkIHdpdGggKE5vbmUsIE5vbmUpLgotICAgIGlmIGV0eXBlIGlzIE5vbmU6Ci0gICAgICAgIHlpZWxkIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKQotICAgICAgICByZXR1cm4KIAotICAgIHN0eXBlID0gZXR5cGUuX19uYW1lX18KLSAgICBzbW9kID0gZXR5cGUuX19tb2R1bGVfXwotICAgIGlmIHNtb2Qgbm90IGluICgiX19tYWluX18iLCAiYnVpbHRpbnMiKToKLSAgICAgICAgc3R5cGUgPSBzbW9kICsgJy4nICsgc3R5cGUKLQotICAgIGlmIG5vdCBpc3N1YmNsYXNzKGV0eXBlLCBTeW50YXhFcnJvcik6Ci0gICAgICAgIHlpZWxkIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKQotICAgICAgICByZXR1cm4KLQotICAgICMgSXQgd2FzIGEgc3ludGF4IGVycm9yOyBzaG93IGV4YWN0bHkgd2hlcmUgdGhlIHByb2JsZW0gd2FzIGZvdW5kLgotICAgIGZpbGVuYW1lID0gdmFsdWUuZmlsZW5hbWUgb3IgIjxzdHJpbmc+IgotICAgIGxpbmVubyA9IHN0cih2YWx1ZS5saW5lbm8pIG9yICc/JwotICAgIHlpZWxkICcgIEZpbGUgInt9IiwgbGluZSB7fVxuJy5mb3JtYXQoZmlsZW5hbWUsIGxpbmVubykKLQotICAgIGJhZGxpbmUgPSB2YWx1ZS50ZXh0Ci0gICAgb2Zmc2V0ID0gdmFsdWUub2Zmc2V0Ci0gICAgaWYgYmFkbGluZSBpcyBub3QgTm9uZToKLSAgICAgICAgeWllbGQgJyAgICB7fVxuJy5mb3JtYXQoYmFkbGluZS5zdHJpcCgpKQotICAgICAgICBpZiBvZmZzZXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBjYXJldHNwYWNlID0gYmFkbGluZS5yc3RyaXAoJ1xuJykKLSAgICAgICAgICAgIG9mZnNldCA9IG1pbihsZW4oY2FyZXRzcGFjZSksIG9mZnNldCkgLSAxCi0gICAgICAgICAgICBjYXJldHNwYWNlID0gY2FyZXRzcGFjZVs6b2Zmc2V0XS5sc3RyaXAoKQotICAgICAgICAgICAgIyBub24tc3BhY2Ugd2hpdGVzcGFjZSAobGlrZXMgdGFicykgbXVzdCBiZSBrZXB0IGZvciBhbGlnbm1lbnQKLSAgICAgICAgICAgIGNhcmV0c3BhY2UgPSAoKGMuaXNzcGFjZSgpIGFuZCBjIG9yICcgJykgZm9yIGMgaW4gY2FyZXRzcGFjZSkKLSAgICAgICAgICAgIHlpZWxkICcgICAge31eXG4nLmZvcm1hdCgnJy5qb2luKGNhcmV0c3BhY2UpKQotICAgIG1zZyA9IHZhbHVlLm1zZyBvciAiPG5vIGRldGFpbCBhdmFpbGFibGU+IgotICAgIHlpZWxkICJ7fToge31cbiIuZm9ybWF0KHN0eXBlLCBtc2cpCisjIC0tIG5vdCBvZmZpY2lhbCBBUEkgYnV0IGZvbGsgcHJvYmFibHkgdXNlIHRoZXNlIHR3byBmdW5jdGlvbnMuCiAKIGRlZiBfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKGV0eXBlLCB2YWx1ZSk6CiAgICAgdmFsdWVzdHIgPSBfc29tZV9zdHIodmFsdWUpCi0gICAgaWYgdmFsdWUgaXMgTm9uZSBvciBub3QgdmFsdWVzdHI6CisgICAgaWYgdmFsdWUgPT0gJ05vbmUnIG9yIHZhbHVlIGlzIE5vbmUgb3Igbm90IHZhbHVlc3RyOgogICAgICAgICBsaW5lID0gIiVzXG4iICUgZXR5cGUKICAgICBlbHNlOgogICAgICAgICBsaW5lID0gIiVzOiAlc1xuIiAlIChldHlwZSwgdmFsdWVzdHIpCkBAIC0yNDcsNiArMTUyLDggQEAKICAgICBleGNlcHQ6CiAgICAgICAgIHJldHVybiAnPHVucHJpbnRhYmxlICVzIG9iamVjdD4nICUgdHlwZSh2YWx1ZSkuX19uYW1lX18KIAorIyAtLQorCiBkZWYgcHJpbnRfZXhjKGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQsIGZpbGUpJy4iIiIKICAgICBwcmludF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpLCBsaW1pdD1saW1pdCwgZmlsZT1maWxlLCBjaGFpbj1jaGFpbikKQEAgLTI2NywxNSArMTc0LDYgQEAKICMgUHJpbnRpbmcgYW5kIEV4dHJhY3RpbmcgU3RhY2tzLgogIwogCi1kZWYgX2V4dHJhY3Rfc3RhY2tfaXRlcihmLCBsaW1pdD1Ob25lKToKLSAgICByZXR1cm4gX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcigKLSAgICAgICAgICAgICAgICBmLCBsaW1pdCwgbGFtYmRhIGY6IChmLCBmLmZfbGluZW5vLCBmLmZfYmFjaykpCi0KLWRlZiBfZ2V0X3N0YWNrKGYpOgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgZiA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl9iYWNrCi0gICAgcmV0dXJuIGYKLQogZGVmIHByaW50X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCBhIHN0YWNrIHRyYWNlIGZyb20gaXRzIGludm9jYXRpb24gcG9pbnQuCiAKQEAgLTI4MywxMSArMTgxLDE3IEBACiAgICAgc3RhY2sgZnJhbWUgYXQgd2hpY2ggdG8gc3RhcnQuIFRoZSBvcHRpb25hbCAnbGltaXQnIGFuZCAnZmlsZScKICAgICBhcmd1bWVudHMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciBwcmludF9leGNlcHRpb24oKS4KICAgICAiIiIKLSAgICBwcmludF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpLCBmaWxlPWZpbGUpCisgICAgaWYgZiBpcyBOb25lOgorICAgICAgICBmID0gc3lzLl9nZXRmcmFtZSgpLmZfYmFjaworICAgIHByaW50X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdD1saW1pdCksIGZpbGU9ZmlsZSkKKwogCiBkZWYgZm9ybWF0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpJy4iIiIKLSAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCisgICAgaWYgZiBpcyBOb25lOgorICAgICAgICBmID0gc3lzLl9nZXRmcmFtZSgpLmZfYmFjaworICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0PWxpbWl0KSkKKwogCiBkZWYgZXh0cmFjdF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUpOgogICAgICIiIkV4dHJhY3QgdGhlIHJhdyB0cmFjZWJhY2sgZnJvbSB0aGUgY3VycmVudCBzdGFjayBmcmFtZS4KQEAgLTI5OCwxMCArMjAyLDEzIEBACiAgICAgbGluZSBudW1iZXIsIGZ1bmN0aW9uIG5hbWUsIHRleHQpLCBhbmQgdGhlIGVudHJpZXMgYXJlIGluIG9yZGVyCiAgICAgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0IHN0YWNrIGZyYW1lLgogICAgICIiIgotICAgIHN0YWNrID0gbGlzdChfZXh0cmFjdF9zdGFja19pdGVyKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSkKKyAgICBpZiBmIGlzIE5vbmU6CisgICAgICAgIGYgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrCisgICAgc3RhY2sgPSBTdGFja1N1bW1hcnkuZXh0cmFjdCh3YWxrX3N0YWNrKGYpLCBsaW1pdD1saW1pdCkKICAgICBzdGFjay5yZXZlcnNlKCkKICAgICByZXR1cm4gc3RhY2sKIAorCiBkZWYgY2xlYXJfZnJhbWVzKHRiKToKICAgICAiQ2xlYXIgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGluIHRoZSBmcmFtZXMgb2YgYSB0cmFjZWJhY2suIgogICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lOgpAQCAtMzExLDMgKzIxOCwzNjEgQEAKICAgICAgICAgICAgICMgSWdub3JlIHRoZSBleGNlcHRpb24gcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBzdGlsbCBleGVjdXRpbmcuCiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRiID0gdGIudGJfbmV4dAorCisKK2NsYXNzIEZyYW1lU3VtbWFyeToKKyAgICAiIiJBIHNpbmdsZSBmcmFtZSBmcm9tIGEgdHJhY2ViYWNrLgorCisgICAgLSA6YXR0cjpgZmlsZW5hbWVgIFRoZSBmaWxlbmFtZSBmb3IgdGhlIGZyYW1lLgorICAgIC0gOmF0dHI6YGxpbmVub2AgVGhlIGxpbmUgd2l0aGluIGZpbGVuYW1lIGZvciB0aGUgZnJhbWUgdGhhdCB3YXMKKyAgICAgIGFjdGl2ZSB3aGVuIHRoZSBmcmFtZSB3YXMgY2FwdHVyZWQuCisgICAgLSA6YXR0cjpgbmFtZWAgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCB0aGF0IHdhcyBleGVjdXRpbmcKKyAgICAgIHdoZW4gdGhlIGZyYW1lIHdhcyBjYXB0dXJlZC4KKyAgICAtIDphdHRyOmBsaW5lYCBUaGUgdGV4dCBmcm9tIHRoZSBsaW5lY2FjaGUgbW9kdWxlIGZvciB0aGUKKyAgICAgIG9mIGNvZGUgdGhhdCB3YXMgcnVubmluZyB3aGVuIHRoZSBmcmFtZSB3YXMgY2FwdHVyZWQuCisgICAgLSA6YXR0cjpgbG9jYWxzYCBFaXRoZXIgTm9uZSBpZiBsb2NhbHMgd2VyZSBub3Qgc3VwcGxpZWQsIG9yIGEgZGljdAorICAgICAgbWFwcGluZyB0aGUgbmFtZSB0byB0aGUgcmVwcigpIG9mIHRoZSB2YXJpYWJsZS4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgnZmlsZW5hbWUnLCAnbGluZW5vJywgJ25hbWUnLCAnX2xpbmUnLCAnbG9jYWxzJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCAqLCBsb29rdXBfbGluZT1UcnVlLAorICAgICAgICAgICAgbG9jYWxzPU5vbmUsIGxpbmU9Tm9uZSk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIEZyYW1lU3VtbWFyeS4KKworICAgICAgICA6cGFyYW0gbG9va3VwX2xpbmU6IElmIFRydWUsIGBsaW5lY2FjaGVgIGlzIGNvbnN1bHRlZCBmb3IgdGhlIHNvdXJjZQorICAgICAgICAgICAgY29kZSBsaW5lLiBPdGhlcndpc2UsIHRoZSBsaW5lIHdpbGwgYmUgbG9va2VkIHVwIHdoZW4gZmlyc3QgbmVlZGVkLgorICAgICAgICA6cGFyYW0gbG9jYWxzOiBJZiBzdXBwbGllZCB0aGUgZnJhbWUgbG9jYWxzLCB3aGljaCB3aWxsIGJlIGNhcHR1cmVkIGFzCisgICAgICAgICAgICBvYmplY3QgcmVwcmVzZW50YXRpb25zLgorICAgICAgICA6cGFyYW0gbGluZTogSWYgcHJvdmlkZWQsIHVzZSB0aGlzIGluc3RlYWQgb2YgbG9va2luZyB1cCB0aGUgbGluZSBpbgorICAgICAgICAgICAgdGhlIGxpbmVjYWNoZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2xpbmUgPSBsaW5lCisgICAgICAgIGlmIGxvb2t1cF9saW5lOgorICAgICAgICAgICAgc2VsZi5saW5lCisgICAgICAgIHNlbGYubG9jYWxzID0gXAorICAgICAgICAgICAgZGljdCgoaywgcmVwcih2KSkgZm9yIGssIHYgaW4gbG9jYWxzLml0ZW1zKCkpIGlmIGxvY2FscyBlbHNlIE5vbmUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBGcmFtZVN1bW1hcnkpOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLmZpbGVuYW1lID09IG90aGVyLmZpbGVuYW1lIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVubyA9PSBvdGhlci5saW5lbm8gYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvY2FscyA9PSBvdGhlci5sb2NhbHMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHR1cGxlKToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8sIHNlbGYubmFtZSwgc2VsZi5saW5lKSA9PSBvdGhlcgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBwb3MpOgorICAgICAgICByZXR1cm4gKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vLCBzZWxmLm5hbWUsIHNlbGYubGluZSlbcG9zXQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihbc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8sIHNlbGYubmFtZSwgc2VsZi5saW5lXSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8RnJhbWVTdW1tYXJ5IGZpbGUge2ZpbGVuYW1lfSwgbGluZSB7bGluZW5vfSBpbiB7bmFtZX0+Ii5mb3JtYXQoCisgICAgICAgICAgICBmaWxlbmFtZT1zZWxmLmZpbGVuYW1lLCBsaW5lbm89c2VsZi5saW5lbm8sIG5hbWU9c2VsZi5uYW1lKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpbmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2xpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubykuc3RyaXAoKQorICAgICAgICByZXR1cm4gc2VsZi5fbGluZQorCisKK2RlZiB3YWxrX3N0YWNrKGYpOgorICAgICIiIldhbGsgYSBzdGFjayB5aWVsZGluZyB0aGUgZnJhbWUgYW5kIGxpbmUgbnVtYmVyIGZvciBlYWNoIGZyYW1lLgorCisgICAgVGhpcyB3aWxsIGZvbGxvdyBmLmZfYmFjayBmcm9tIHRoZSBnaXZlbiBmcmFtZS4gSWYgbm8gZnJhbWUgaXMgZ2l2ZW4sIHRoZQorICAgIGN1cnJlbnQgc3RhY2sgaXMgdXNlZC4gVXN1YWxseSB1c2VkIHdpdGggU3RhY2tTdW1tYXJ5LmV4dHJhY3QuCisgICAgIiIiCisgICAgaWYgZiBpcyBOb25lOgorICAgICAgICBmID0gc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX2JhY2sKKyAgICB3aGlsZSBmIGlzIG5vdCBOb25lOgorICAgICAgICB5aWVsZCBmLCBmLmZfbGluZW5vCisgICAgICAgIGYgPSBmLmZfYmFjaworCisKK2RlZiB3YWxrX3RiKHRiKToKKyAgICAiIiJXYWxrIGEgdHJhY2ViYWNrIHlpZWxkaW5nIHRoZSBmcmFtZSBhbmQgbGluZSBudW1iZXIgZm9yIGVhY2ggZnJhbWUuCisKKyAgICBUaGlzIHdpbGwgZm9sbG93IHRiLnRiX25leHQgKGFuZCB0aHVzIGlzIGluIHRoZSBvcHBvc2l0ZSBvcmRlciB0bworICAgIHdhbGtfc3RhY2spLiBVc3VhbGx5IHVzZWQgd2l0aCBTdGFja1N1bW1hcnkuZXh0cmFjdC4KKyAgICAiIiIKKyAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgeWllbGQgdGIudGJfZnJhbWUsIHRiLnRiX2xpbmVubworICAgICAgICB0YiA9IHRiLnRiX25leHQKKworCitjbGFzcyBTdGFja1N1bW1hcnkobGlzdCk6CisgICAgIiIiQSBzdGFjayBvZiBmcmFtZXMuIiIiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZXh0cmFjdChrbGFzcywgZnJhbWVfZ2VuLCAqLCBsaW1pdD1Ob25lLCBsb29rdXBfbGluZXM9VHJ1ZSwKKyAgICAgICAgICAgIGNhcHR1cmVfbG9jYWxzPUZhbHNlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgU3RhY2tTdW1tYXJ5IGZyb20gYSB0cmFjZWJhY2sgb3Igc3RhY2sgb2JqZWN0LgorCisgICAgICAgIDpwYXJhbSBmcmFtZV9nZW46IEEgZ2VuZXJhdG9yIHRoYXQgeWllbGRzIChmcmFtZSwgbGluZW5vKSB0dXBsZXMgdG8KKyAgICAgICAgICAgIGluY2x1ZGUgaW4gdGhlIHN0YWNrLgorICAgICAgICA6cGFyYW0gbGltaXQ6IE5vbmUgdG8gaW5jbHVkZSBhbGwgZnJhbWVzIG9yIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRvCisgICAgICAgICAgICBpbmNsdWRlLgorICAgICAgICA6cGFyYW0gbG9va3VwX2xpbmVzOiBJZiBUcnVlLCBsb29rdXAgbGluZXMgZm9yIGVhY2ggZnJhbWUgaW1tZWRpYXRlbHksCisgICAgICAgICAgICBvdGhlcndpc2UgbG9va3VwIGlzIGRlZmVycmVkIHVudGlsIHRoZSBmcmFtZSBpcyByZW5kZXJlZC4KKyAgICAgICAgOnBhcmFtIGNhcHR1cmVfbG9jYWxzOiBJZiBUcnVlLCB0aGUgbG9jYWwgdmFyaWFibGVzIGZyb20gZWFjaCBmcmFtZSB3aWxsCisgICAgICAgICAgICBiZSBjYXB0dXJlZCBhcyBvYmplY3QgcmVwcmVzZW50YXRpb25zIGludG8gdGhlIEZyYW1lU3VtbWFyeS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxpbWl0IGlzIE5vbmU6CisgICAgICAgICAgICBsaW1pdCA9IGdldGF0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnLCBOb25lKQorICAgICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmUgYW5kIGxpbWl0IDwgMDoKKyAgICAgICAgICAgICAgICBsaW1pdCA9IDAKKyAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBsaW1pdCA+PSAwOgorICAgICAgICAgICAgICAgIGZyYW1lX2dlbiA9IGl0ZXJ0b29scy5pc2xpY2UoZnJhbWVfZ2VuLCBsaW1pdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnJhbWVfZ2VuID0gY29sbGVjdGlvbnMuZGVxdWUoZnJhbWVfZ2VuLCBtYXhsZW49LWxpbWl0KQorCisgICAgICAgIHJlc3VsdCA9IGtsYXNzKCkKKyAgICAgICAgZm5hbWVzID0gc2V0KCkKKyAgICAgICAgZm9yIGYsIGxpbmVubyBpbiBmcmFtZV9nZW46CisgICAgICAgICAgICBjbyA9IGYuZl9jb2RlCisgICAgICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICBuYW1lID0gY28uY29fbmFtZQorCisgICAgICAgICAgICBmbmFtZXMuYWRkKGZpbGVuYW1lKQorICAgICAgICAgICAgbGluZWNhY2hlLmxhenljYWNoZShmaWxlbmFtZSwgZi5mX2dsb2JhbHMpCisgICAgICAgICAgICAjIE11c3QgZGVmZXIgbGluZSBsb29rdXBzIHVudGlsIHdlIGhhdmUgY2FsbGVkIGNoZWNrY2FjaGUuCisgICAgICAgICAgICBpZiBjYXB0dXJlX2xvY2FsczoKKyAgICAgICAgICAgICAgICBmX2xvY2FscyA9IGYuZl9sb2NhbHMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZl9sb2NhbHMgPSBOb25lCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKEZyYW1lU3VtbWFyeSgKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsb29rdXBfbGluZT1GYWxzZSwgbG9jYWxzPWZfbG9jYWxzKSkKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZuYW1lczoKKyAgICAgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQorICAgICAgICAjIElmIGltbWVkaWF0ZSBsb29rdXAgd2FzIGRlc2lyZWQsIHRyaWdnZXIgbG9va3VwcyBub3cuCisgICAgICAgIGlmIGxvb2t1cF9saW5lczoKKyAgICAgICAgICAgIGZvciBmIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBmLmxpbmUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fbGlzdChrbGFzcywgYV9saXN0KToKKyAgICAgICAgIiIiQ3JlYXRlIGEgU3RhY2tTdW1tYXJ5IGZyb20gYSBzaW1wbGUgbGlzdCBvZiB0dXBsZXMuCisKKyAgICAgICAgVGhpcyBtZXRob2Qgc3VwcG9ydHMgdGhlIG9sZGVyIFB5dGhvbiBBUEkuIEVhY2ggdHVwbGUgc2hvdWxkIGJlIGEKKyAgICAgICAgNC10dXBsZSB3aXRoIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSBlbGVtZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgICMgV2hpbGUgZG9pbmcgYSBmYXN0LXBhdGggY2hlY2sgZm9yIGlzaW5zdGFuY2UoYV9saXN0LCBTdGFja1N1bW1hcnkpIGlzCisgICAgICAgICMgYXBwZWFsaW5nLCBpZGxlbGliLnJ1bi5jbGVhbnVwX3RyYWNlYmFjayBhbmQgb3RoZXIgc2ltaWxhciBjb2RlIG1heQorICAgICAgICAjIGJyZWFrIHRoaXMgYnkgbWFraW5nIGFyYml0cmFyeSBmcmFtZXMgcGxhaW4gdHVwbGVzLCBzbyB3ZSBuZWVkIHRvCisgICAgICAgICMgY2hlY2sgb24gYSBmcmFtZSBieSBmcmFtZSBiYXNpcy4KKyAgICAgICAgcmVzdWx0ID0gU3RhY2tTdW1tYXJ5KCkKKyAgICAgICAgZm9yIGZyYW1lIGluIGFfbGlzdDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZnJhbWUsIEZyYW1lU3VtbWFyeSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmcmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSA9IGZyYW1lCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChGcmFtZVN1bW1hcnkoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZT1saW5lKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGZvcm1hdChzZWxmKToKKyAgICAgICAgIiIiRm9ybWF0IHRoZSBzdGFjayByZWFkeSBmb3IgcHJpbnRpbmcuCisKKyAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2Ygc3RyaW5ncyByZWFkeSBmb3IgcHJpbnRpbmcuICBFYWNoIHN0cmluZyBpbiB0aGUKKyAgICAgICAgcmVzdWx0aW5nIGxpc3QgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgZnJhbWUgZnJvbSB0aGUgc3RhY2suCisgICAgICAgIEVhY2ggc3RyaW5nIGVuZHMgaW4gYSBuZXdsaW5lOyB0aGUgc3RyaW5ncyBtYXkgY29udGFpbiBpbnRlcm5hbAorICAgICAgICBuZXdsaW5lcyBhcyB3ZWxsLCBmb3IgdGhvc2UgaXRlbXMgd2l0aCBzb3VyY2UgdGV4dCBsaW5lcy4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciBmcmFtZSBpbiBzZWxmOgorICAgICAgICAgICAgcm93ID0gW10KKyAgICAgICAgICAgIHJvdy5hcHBlbmQoJyAgRmlsZSAie30iLCBsaW5lIHt9LCBpbiB7fVxuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgZnJhbWUuZmlsZW5hbWUsIGZyYW1lLmxpbmVubywgZnJhbWUubmFtZSkpCisgICAgICAgICAgICBpZiBmcmFtZS5saW5lOgorICAgICAgICAgICAgICAgIHJvdy5hcHBlbmQoJyAgICB7fVxuJy5mb3JtYXQoZnJhbWUubGluZS5zdHJpcCgpKSkKKyAgICAgICAgICAgIGlmIGZyYW1lLmxvY2FsczoKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc29ydGVkKGZyYW1lLmxvY2Fscy5pdGVtcygpKToKKyAgICAgICAgICAgICAgICAgICAgcm93LmFwcGVuZCgnICAgIHtuYW1lfSA9IHt2YWx1ZX1cbicuZm9ybWF0KG5hbWU9bmFtZSwgdmFsdWU9dmFsdWUpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnJy5qb2luKHJvdykpCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitjbGFzcyBUcmFjZWJhY2tFeGNlcHRpb246CisgICAgIiIiQW4gZXhjZXB0aW9uIHJlYWR5IGZvciByZW5kZXJpbmcuCisKKyAgICBUaGUgdHJhY2ViYWNrIG1vZHVsZSBjYXB0dXJlcyBlbm91Z2ggYXR0cmlidXRlcyBmcm9tIHRoZSBvcmlnaW5hbCBleGNlcHRpb24KKyAgICB0byB0aGlzIGludGVybWVkaWFyeSBmb3JtIHRvIGVuc3VyZSB0aGF0IG5vIHJlZmVyZW5jZXMgYXJlIGhlbGQsIHdoaWxlCisgICAgc3RpbGwgYmVpbmcgYWJsZSB0byBmdWxseSBwcmludCBvciBmb3JtYXQgaXQuCisKKyAgICBVc2UgYGZyb21fZXhjZXB0aW9uYCB0byBjcmVhdGUgVHJhY2ViYWNrRXhjZXB0aW9uIGluc3RhbmNlcyBmcm9tIGV4Y2VwdGlvbgorICAgIG9iamVjdHMsIG9yIHRoZSBjb25zdHJ1Y3RvciB0byBjcmVhdGUgVHJhY2ViYWNrRXhjZXB0aW9uIGluc3RhbmNlcyBmcm9tCisgICAgaW5kaXZpZHVhbCBjb21wb25lbnRzLgorCisgICAgLSA6YXR0cjpgX19jYXVzZV9fYCBBIFRyYWNlYmFja0V4Y2VwdGlvbiBvZiB0aGUgb3JpZ2luYWwgKl9fY2F1c2VfXyouCisgICAgLSA6YXR0cjpgX19jb250ZXh0X19gIEEgVHJhY2ViYWNrRXhjZXB0aW9uIG9mIHRoZSBvcmlnaW5hbCAqX19jb250ZXh0X18qLgorICAgIC0gOmF0dHI6YF9fc3VwcHJlc3NfY29udGV4dF9fYCBUaGUgKl9fc3VwcHJlc3NfY29udGV4dF9fKiB2YWx1ZSBmcm9tIHRoZQorICAgICAgb3JpZ2luYWwgZXhjZXB0aW9uLgorICAgIC0gOmF0dHI6YHN0YWNrYCBBIGBTdGFja1N1bW1hcnlgIHJlcHJlc2VudGluZyB0aGUgdHJhY2ViYWNrLgorICAgIC0gOmF0dHI6YGV4Y190eXBlYCBUaGUgY2xhc3Mgb2YgdGhlIG9yaWdpbmFsIHRyYWNlYmFjay4KKyAgICAtIDphdHRyOmBmaWxlbmFtZWAgRm9yIHN5bnRheCBlcnJvcnMgLSB0aGUgZmlsZW5hbWUgd2hlcmUgdGhlIGVycm9yCisgICAgICBvY2N1cnJlZC4KKyAgICAtIDphdHRyOmBsaW5lbm9gIEZvciBzeW50YXggZXJyb3JzIC0gdGhlIGxpbmVudW1iZXIgd2hlcmUgdGhlIGVycm9yCisgICAgICBvY2N1cnJlZC4KKyAgICAtIDphdHRyOmB0ZXh0YCBGb3Igc3ludGF4IGVycm9ycyAtIHRoZSB0ZXh0IHdoZXJlIHRoZSBlcnJvcgorICAgICAgb2NjdXJyZWQuCisgICAgLSA6YXR0cjpgb2Zmc2V0YCBGb3Igc3ludGF4IGVycm9ycyAtIHRoZSBvZmZzZXQgaW50byB0aGUgdGV4dCB3aGVyZSB0aGUKKyAgICAgIGVycm9yIG9jY3VycmVkLgorICAgIC0gOmF0dHI6YG1zZ2AgRm9yIHN5bnRheCBlcnJvcnMgLSB0aGUgY29tcGlsZXIgZXJyb3IgbWVzc2FnZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdHJhY2ViYWNrLCAqLCBsaW1pdD1Ob25lLAorICAgICAgICAgICAgbG9va3VwX2xpbmVzPVRydWUsIGNhcHR1cmVfbG9jYWxzPUZhbHNlLCBfc2Vlbj1Ob25lKToKKyAgICAgICAgIyBOQjogd2UgbmVlZCB0byBhY2NlcHQgZXhjX3RyYWNlYmFjaywgZXhjX3ZhbHVlLCBleGNfdHJhY2ViYWNrIHRvCisgICAgICAgICMgcGVybWl0IGJhY2t3YXJkcyBjb21wYXQgd2l0aCB0aGUgZXhpc3RpbmcgQVBJLCBvdGhlcndpc2Ugd2UKKyAgICAgICAgIyBuZWVkIHN0dWIgdGh1bmsgb2JqZWN0cyBqdXN0IHRvIGdsdWUgaXQgdG9nZXRoZXIuCisgICAgICAgICMgSGFuZGxlIGxvb3BzIGluIF9fY2F1c2VfXyBvciBfX2NvbnRleHRfXy4KKyAgICAgICAgaWYgX3NlZW4gaXMgTm9uZToKKyAgICAgICAgICAgIF9zZWVuID0gc2V0KCkKKyAgICAgICAgX3NlZW4uYWRkKGV4Y192YWx1ZSkKKyAgICAgICAgIyBHcmFjZWZ1bGx5IGhhbmRsZSAodGhlIHdheSBQeXRob24gMi40IGFuZCBlYXJsaWVyIGRpZCkgdGhlIGNhc2Ugb2YKKyAgICAgICAgIyBiZWluZyBjYWxsZWQgd2l0aCBubyB0eXBlIG9yIHZhbHVlIChOb25lLCBOb25lLCBOb25lKS4KKyAgICAgICAgaWYgKGV4Y192YWx1ZSBhbmQgZXhjX3ZhbHVlLl9fY2F1c2VfXyBpcyBub3QgTm9uZQorICAgICAgICAgICAgYW5kIGV4Y192YWx1ZS5fX2NhdXNlX18gbm90IGluIF9zZWVuKToKKyAgICAgICAgICAgIGNhdXNlID0gVHJhY2ViYWNrRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgIHR5cGUoZXhjX3ZhbHVlLl9fY2F1c2VfXyksCisgICAgICAgICAgICAgICAgZXhjX3ZhbHVlLl9fY2F1c2VfXywKKyAgICAgICAgICAgICAgICBleGNfdmFsdWUuX19jYXVzZV9fLl9fdHJhY2ViYWNrX18sCisgICAgICAgICAgICAgICAgbGltaXQ9bGltaXQsCisgICAgICAgICAgICAgICAgbG9va3VwX2xpbmVzPUZhbHNlLAorICAgICAgICAgICAgICAgIGNhcHR1cmVfbG9jYWxzPWNhcHR1cmVfbG9jYWxzLAorICAgICAgICAgICAgICAgIF9zZWVuPV9zZWVuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2F1c2UgPSBOb25lCisgICAgICAgIGlmIChleGNfdmFsdWUgYW5kIGV4Y192YWx1ZS5fX2NvbnRleHRfXyBpcyBub3QgTm9uZQorICAgICAgICAgICAgYW5kIGV4Y192YWx1ZS5fX2NvbnRleHRfXyBub3QgaW4gX3NlZW4pOgorICAgICAgICAgICAgY29udGV4dCA9IFRyYWNlYmFja0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICB0eXBlKGV4Y192YWx1ZS5fX2NvbnRleHRfXyksCisgICAgICAgICAgICAgICAgZXhjX3ZhbHVlLl9fY29udGV4dF9fLAorICAgICAgICAgICAgICAgIGV4Y192YWx1ZS5fX2NvbnRleHRfXy5fX3RyYWNlYmFja19fLAorICAgICAgICAgICAgICAgIGxpbWl0PWxpbWl0LAorICAgICAgICAgICAgICAgIGxvb2t1cF9saW5lcz1GYWxzZSwKKyAgICAgICAgICAgICAgICBjYXB0dXJlX2xvY2Fscz1jYXB0dXJlX2xvY2FscywKKyAgICAgICAgICAgICAgICBfc2Vlbj1fc2VlbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBOb25lCisgICAgICAgIHNlbGYuZXhjX3RyYWNlYmFjayA9IGV4Y190cmFjZWJhY2sKKyAgICAgICAgc2VsZi5fX2NhdXNlX18gPSBjYXVzZQorICAgICAgICBzZWxmLl9fY29udGV4dF9fID0gY29udGV4dAorICAgICAgICBzZWxmLl9fc3VwcHJlc3NfY29udGV4dF9fID0gXAorICAgICAgICAgICAgZXhjX3ZhbHVlLl9fc3VwcHJlc3NfY29udGV4dF9fIGlmIGV4Y192YWx1ZSBlbHNlIEZhbHNlCisgICAgICAgICMgVE9ETzogbG9jYWxzLgorICAgICAgICBzZWxmLnN0YWNrID0gU3RhY2tTdW1tYXJ5LmV4dHJhY3QoCisgICAgICAgICAgICB3YWxrX3RiKGV4Y190cmFjZWJhY2spLCBsaW1pdD1saW1pdCwgbG9va3VwX2xpbmVzPWxvb2t1cF9saW5lcywKKyAgICAgICAgICAgIGNhcHR1cmVfbG9jYWxzPWNhcHR1cmVfbG9jYWxzKQorICAgICAgICBzZWxmLmV4Y190eXBlID0gZXhjX3R5cGUKKyAgICAgICAgIyBDYXB0dXJlIG5vdyB0byBwZXJtaXQgZnJlZWluZyByZXNvdXJjZXM6IG9ubHkgY29tcGxpY2F0aW9uIGlzIGluIHRoZQorICAgICAgICAjIHVub2ZmaWNpYWwgQVBJIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUKKyAgICAgICAgc2VsZi5fc3RyID0gX3NvbWVfc3RyKGV4Y192YWx1ZSkKKyAgICAgICAgaWYgZXhjX3R5cGUgYW5kIGlzc3ViY2xhc3MoZXhjX3R5cGUsIFN5bnRheEVycm9yKToKKyAgICAgICAgICAgICMgSGFuZGxlIFN5bnRheEVycm9yJ3Mgc3BlY2lhbGx5CisgICAgICAgICAgICBzZWxmLmZpbGVuYW1lID0gZXhjX3ZhbHVlLmZpbGVuYW1lCisgICAgICAgICAgICBzZWxmLmxpbmVubyA9IHN0cihleGNfdmFsdWUubGluZW5vKQorICAgICAgICAgICAgc2VsZi50ZXh0ID0gZXhjX3ZhbHVlLnRleHQKKyAgICAgICAgICAgIHNlbGYub2Zmc2V0ID0gZXhjX3ZhbHVlLm9mZnNldAorICAgICAgICAgICAgc2VsZi5tc2cgPSBleGNfdmFsdWUubXNnCisgICAgICAgIGlmIGxvb2t1cF9saW5lczoKKyAgICAgICAgICAgIHNlbGYuX2xvYWRfbGluZXMoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fZXhjZXB0aW9uKHNlbGYsIGV4YywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgVHJhY2ViYWNrRXhjZXB0aW9uIGZyb20gYW4gZXhjZXB0aW9uLiIiIgorICAgICAgICByZXR1cm4gVHJhY2ViYWNrRXhjZXB0aW9uKAorICAgICAgICAgICAgdHlwZShleGMpLCBleGMsIGV4Yy5fX3RyYWNlYmFja19fLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgX2xvYWRfbGluZXMoc2VsZik6CisgICAgICAgICIiIlByaXZhdGUgQVBJLiBmb3JjZSBhbGwgbGluZXMgaW4gdGhlIHN0YWNrIHRvIGJlIGxvYWRlZC4iIiIKKyAgICAgICAgZm9yIGZyYW1lIGluIHNlbGYuc3RhY2s6CisgICAgICAgICAgICBmcmFtZS5saW5lCisgICAgICAgIGlmIHNlbGYuX19jb250ZXh0X186CisgICAgICAgICAgICBzZWxmLl9fY29udGV4dF9fLl9sb2FkX2xpbmVzKCkKKyAgICAgICAgaWYgc2VsZi5fX2NhdXNlX186CisgICAgICAgICAgICBzZWxmLl9fY2F1c2VfXy5fbG9hZF9saW5lcygpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisKKyAgICBkZWYgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHNlbGYpOgorICAgICAgICAiIiJGb3JtYXQgdGhlIGV4Y2VwdGlvbiBwYXJ0IG9mIHRoZSB0cmFjZWJhY2suCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGdlbmVyYXRvciBvZiBzdHJpbmdzLCBlYWNoIGVuZGluZyBpbiBhIG5ld2xpbmUuCisKKyAgICAgICAgTm9ybWFsbHksIHRoZSBnZW5lcmF0b3IgZW1pdHMgYSBzaW5nbGUgc3RyaW5nOyBob3dldmVyLCBmb3IKKyAgICAgICAgU3ludGF4RXJyb3IgZXhjZXB0aW9ucywgaXQgZW1pdGVzIHNldmVyYWwgbGluZXMgdGhhdCAod2hlbgorICAgICAgICBwcmludGVkKSBkaXNwbGF5IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRoZSBzeW50YXgKKyAgICAgICAgZXJyb3Igb2NjdXJyZWQuCisKKyAgICAgICAgVGhlIG1lc3NhZ2UgaW5kaWNhdGluZyB3aGljaCBleGNlcHRpb24gb2NjdXJyZWQgaXMgYWx3YXlzIHRoZSBsYXN0CisgICAgICAgIHN0cmluZyBpbiB0aGUgb3V0cHV0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5leGNfdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgeWllbGQgX2Zvcm1hdF9maW5hbF9leGNfbGluZShOb25lLCBzZWxmLl9zdHIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzdHlwZSA9IHNlbGYuZXhjX3R5cGUuX19xdWFsbmFtZV9fCisgICAgICAgIHNtb2QgPSBzZWxmLmV4Y190eXBlLl9fbW9kdWxlX18KKyAgICAgICAgaWYgc21vZCBub3QgaW4gKCJfX21haW5fXyIsICJidWlsdGlucyIpOgorICAgICAgICAgICAgc3R5cGUgPSBzbW9kICsgJy4nICsgc3R5cGUKKworICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhzZWxmLmV4Y190eXBlLCBTeW50YXhFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCBzZWxmLl9zdHIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEl0IHdhcyBhIHN5bnRheCBlcnJvcjsgc2hvdyBleGFjdGx5IHdoZXJlIHRoZSBwcm9ibGVtIHdhcyBmb3VuZC4KKyAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmZpbGVuYW1lIG9yICI8c3RyaW5nPiIKKyAgICAgICAgbGluZW5vID0gc3RyKHNlbGYubGluZW5vKSBvciAnPycKKyAgICAgICAgeWllbGQgJyAgRmlsZSAie30iLCBsaW5lIHt9XG4nLmZvcm1hdChmaWxlbmFtZSwgbGluZW5vKQorCisgICAgICAgIGJhZGxpbmUgPSBzZWxmLnRleHQKKyAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQKKyAgICAgICAgaWYgYmFkbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkICcgICAge31cbicuZm9ybWF0KGJhZGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgIGlmIG9mZnNldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjYXJldHNwYWNlID0gYmFkbGluZS5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBtaW4obGVuKGNhcmV0c3BhY2UpLCBvZmZzZXQpIC0gMQorICAgICAgICAgICAgICAgIGNhcmV0c3BhY2UgPSBjYXJldHNwYWNlWzpvZmZzZXRdLmxzdHJpcCgpCisgICAgICAgICAgICAgICAgIyBub24tc3BhY2Ugd2hpdGVzcGFjZSAobGlrZXMgdGFicykgbXVzdCBiZSBrZXB0IGZvciBhbGlnbm1lbnQKKyAgICAgICAgICAgICAgICBjYXJldHNwYWNlID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAnICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCisgICAgICAgICAgICAgICAgeWllbGQgJyAgICB7fV5cbicuZm9ybWF0KCcnLmpvaW4oY2FyZXRzcGFjZSkpCisgICAgICAgIG1zZyA9IHNlbGYubXNnIG9yICI8bm8gZGV0YWlsIGF2YWlsYWJsZT4iCisgICAgICAgIHlpZWxkICJ7fToge31cbiIuZm9ybWF0KHN0eXBlLCBtc2cpCisKKyAgICBkZWYgZm9ybWF0KHNlbGYsICosIGNoYWluPVRydWUpOgorICAgICAgICAiIiJGb3JtYXQgdGhlIGV4Y2VwdGlvbi4KKworICAgICAgICBJZiBjaGFpbiBpcyBub3QgKlRydWUqLCAqX19jYXVzZV9fKiBhbmQgKl9fY29udGV4dF9fKiB3aWxsIG5vdCBiZSBmb3JtYXR0ZWQuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGdlbmVyYXRvciBvZiBzdHJpbmdzLCBlYWNoIGVuZGluZyBpbiBhIG5ld2xpbmUgYW5kCisgICAgICAgIHNvbWUgY29udGFpbmluZyBpbnRlcm5hbCBuZXdsaW5lcy4gYHByaW50X2V4Y2VwdGlvbmAgaXMgYSB3cmFwcGVyIGFyb3VuZAorICAgICAgICB0aGlzIG1ldGhvZCB3aGljaCBqdXN0IHByaW50cyB0aGUgbGluZXMgdG8gYSBmaWxlLgorCisgICAgICAgIFRoZSBtZXNzYWdlIGluZGljYXRpbmcgd2hpY2ggZXhjZXB0aW9uIG9jY3VycmVkIGlzIGFsd2F5cyB0aGUgbGFzdAorICAgICAgICBzdHJpbmcgaW4gdGhlIG91dHB1dC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNoYWluOgorICAgICAgICAgICAgaWYgc2VsZi5fX2NhdXNlX18gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9fY2F1c2VfXy5mb3JtYXQoY2hhaW49Y2hhaW4pCisgICAgICAgICAgICAgICAgeWllbGQgX2NhdXNlX21lc3NhZ2UKKyAgICAgICAgICAgIGVsaWYgKHNlbGYuX19jb250ZXh0X18gaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgbm90IHNlbGYuX19zdXBwcmVzc19jb250ZXh0X18pOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fX2NvbnRleHRfXy5mb3JtYXQoY2hhaW49Y2hhaW4pCisgICAgICAgICAgICAgICAgeWllbGQgX2NvbnRleHRfbWVzc2FnZQorICAgICAgICBpZiBzZWxmLmV4Y190cmFjZWJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB5aWVsZCAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJworICAgICAgICB5aWVsZCBmcm9tIHNlbGYuc3RhY2suZm9ybWF0KCkKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmZvcm1hdF9leGNlcHRpb25fb25seSgpCmRpZmYgLS1naXQgYS9MaWIvdHJhY2VtYWxsb2MucHkgYi9MaWIvdHJhY2VtYWxsb2MucHkKaW5kZXggYWRlZGZjNS4uNjI4OGRhOCAxMDA2NDQKLS0tIGEvTGliL3RyYWNlbWFsbG9jLnB5CisrKyBiL0xpYi90cmFjZW1hbGxvYy5weQpAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIGRlZiBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lKToKICAgICBmaWxlbmFtZSA9IG9zLnBhdGgubm9ybWNhc2UoZmlsZW5hbWUpCi0gICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJy5weWMnKToKICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVs6LTFdCiAgICAgcmV0dXJuIGZpbGVuYW1lCiAKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGUucHkgYi9MaWIvdHVydGxlLnB5CmluZGV4IGNiZDRmNDcuLjU3Y2YzZDkgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGUucHkKKysrIGIvTGliL3R1cnRsZS5weQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBrZXksIHZhbHVlID0gbGluZS5zcGxpdCgiPSIpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBwcmludCgiQmFkIGxpbmUgaW4gY29uZmlnLWZpbGUgJXM6XG4lcyIgJSAoZmlsZW5hbWUsbGluZSkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBrZXkgPSBrZXkuc3RyaXAoKQpAQCAtMTkyLDcgKzE5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmxvYXQodmFsdWUpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnQodmFsdWUpCi0gICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzICMgdmFsdWUgbmVlZCBub3QgYmUgY29udmVydGVkCiAgICAgICAgIGNmZ2RpY3Rba2V5XSA9IHZhbHVlCiAgICAgcmV0dXJuIGNmZ2RpY3QKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgIHRyeToKICAgICAgICAgaGVhZCwgdGFpbCA9IHNwbGl0KF9fZmlsZV9fKQogICAgICAgICBjZmdfZmlsZTIgPSBqb2luKGhlYWQsIGRlZmF1bHRfY2ZnKQotICAgIGV4Y2VwdDoKKyAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICBjZmdfZmlsZTIgPSAiIgogICAgIGlmIGlzZmlsZShjZmdfZmlsZTIpOgogICAgICAgICBjZmdkaWN0MiA9IGNvbmZpZ19kaWN0KGNmZ19maWxlMikKQEAgLTIyOSw3ICsyMjksNyBAQAogCiB0cnk6CiAgICAgcmVhZGNvbmZpZyhfQ0ZHKQotZXhjZXB0OgorZXhjZXB0IEV4Y2VwdGlvbjoKICAgICBwcmludCAoIk5vIGNvbmZpZ2ZpbGUgcmVhZCwgcmVhc29uIHVua25vd24iKQogCiAKQEAgLTY1Myw3ICs2NTMsNyBAQAogICAgICAgICAgICAgICAgICAgICB4LCB5ID0gKHNlbGYuY3YuY2FudmFzeChldmVudC54KS9zZWxmLnhzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zZWxmLmN2LmNhbnZhc3koZXZlbnQueSkvc2VsZi55c2NhbGUpCiAgICAgICAgICAgICAgICAgICAgIGZ1bih4LCB5KQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBzZWxmLmN2LnRhZ19iaW5kKGl0ZW0sICI8QnV0dG9uJXMtTW90aW9uPiIgJSBudW0sIGV2ZW50ZnVuLCBhZGQpCiAKQEAgLTExNTgsNyArMTE1OCw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVHVydGxlR3JhcGhpY3NFcnJvcigiYmFkIGNvbG9yIHN0cmluZzogJXMiICUgc3RyKGNvbG9yKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgciwgZywgYiA9IGNvbG9yCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgVHVydGxlR3JhcGhpY3NFcnJvcigiYmFkIGNvbG9yIGFyZ3VtZW50czogJXMiICUgc3RyKGNvbG9yKSkKICAgICAgICAgaWYgc2VsZi5fY29sb3Jtb2RlID09IDEuMDoKICAgICAgICAgICAgIHIsIGcsIGIgPSBbcm91bmQoMjU1LjAqeCkgZm9yIHggaW4gKHIsIGcsIGIpXQpAQCAtMjcwMiw3ICsyNzAyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBhcmdzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHIsIGcsIGIgPSBhcmdzCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgVHVydGxlR3JhcGhpY3NFcnJvcigiYmFkIGNvbG9yIGFyZ3VtZW50czogJXMiICUgc3RyKGFyZ3MpKQogICAgICAgICBpZiBzZWxmLnNjcmVlbi5fY29sb3Jtb2RlID09IDEuMDoKICAgICAgICAgICAgIHIsIGcsIGIgPSBbcm91bmQoMjU1LjAqeCkgZm9yIHggaW4gKHIsIGcsIGIpXQpAQCAtMzg2NSw3ICszODY1LDcgQEAKICAgICAgICAgdHJ5OgogIyAgICAgICAgICAgIGV2YWwoa2V5KS5pbV9mdW5jLl9fZG9jX18gPSBkb2NzZGljdFtrZXldCiAgICAgICAgICAgICBldmFsKGtleSkuX19kb2NfXyA9IGRvY3NkaWN0W2tleV0KLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcHJpbnQoIkJhZCBkb2NzdHJpbmctZW50cnk6ICVzIiAlIGtleSkKIAogX0xBTkdVQUdFID0gX0NGR1sibGFuZ3VhZ2UiXQpAQCAtMzg3NSw3ICszODc1LDcgQEAKICAgICAgICAgcmVhZF9kb2NzdHJpbmdzKF9MQU5HVUFHRSkKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwcmludCgiQ2Fubm90IGZpbmQgZG9jc2RpY3QgZm9yIiwgX0xBTkdVQUdFKQotZXhjZXB0OgorZXhjZXB0IEV4Y2VwdGlvbjoKICAgICBwcmludCAoIlVua25vd24gRXJyb3Igd2hlbiB0cnlpbmcgdG8gaW1wb3J0ICVzLWRvY3N0cmluZy1kaWN0aW9uYXJ5IiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTEFOR1VBR0UpCiAKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5IGIvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCAxMDZkMDU4Li43MTFkMGFiCi0tLSBhL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CkBAIC04OSw4ICs4OSw4IEBACiBpbXBvcnQgb3MKIAogZnJvbSB0a2ludGVyIGltcG9ydCAqCitmcm9tIGlkbGVsaWIuQ29sb3JEZWxlZ2F0b3IgaW1wb3J0IENvbG9yRGVsZWdhdG9yLCBjb2xvcl9jb25maWcKIGZyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCi1mcm9tIGlkbGVsaWIuQ29sb3JEZWxlZ2F0b3IgaW1wb3J0IENvbG9yRGVsZWdhdG9yCiBmcm9tIGlkbGVsaWIudGV4dFZpZXcgaW1wb3J0IHZpZXdfdGV4dAogZnJvbSB0dXJ0bGVkZW1vIGltcG9ydCBfX2RvY19fIGFzIGFib3V0X3R1cnRsZWRlbW8KIApAQCAtMTI0LDYgKzEyNCw4IEBACiAgICAgKCdBYm91dCB0dXJ0bGUgbW9kdWxlJywgdHVydGxlLl9fZG9jX18pLAogICAgICkKIAorCisKIGNsYXNzIERlbW9XaW5kb3cob2JqZWN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT1Ob25lKToKQEAgLTIwNCw2ICsyMDYsNyBAQAogICAgICAgICBzZWxmLnRleHRfZnJhbWUgPSB0ZXh0X2ZyYW1lID0gRnJhbWUocm9vdCkKICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dCA9IFRleHQodGV4dF9mcmFtZSwgbmFtZT0ndGV4dCcsIHBhZHg9NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD0nbm9uZScsIHdpZHRoPTQ1KQorICAgICAgICBjb2xvcl9jb25maWcodGV4dCkKIAogICAgICAgICBzZWxmLnZiYXIgPSB2YmFyID0gU2Nyb2xsYmFyKHRleHRfZnJhbWUsIG5hbWU9J3ZiYXInKQogICAgICAgICB2YmFyWydjb21tYW5kJ10gPSB0ZXh0Lnl2aWV3CmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9zb3J0aW5nX2FuaW1hdGUucHkgYi9MaWIvdHVydGxlZGVtby9zb3J0aW5nX2FuaW1hdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1YTBhYgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90dXJ0bGVkZW1vL3NvcnRpbmdfYW5pbWF0ZS5weQpAQCAtMCwwICsxLDIwNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiCisKKyAgICAgICAgIHNvcnRpbmdfYW5pbWF0aW9uLnB5CisKK0EgbWluaW1hbCBzb3J0aW5nIGFsZ29yaXRobSBhbmltYXRpb246CitTb3J0cyBhIHNoZWxmIG9mIDEwIGJsb2NrcyB1c2luZyBpbnNlcnRpb24KK3NvcnQsIHNlbGVjdGlvbiBzb3J0IGFuZCBxdWlja3NvcnQuCisKK1NoZWxmcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYnVpbHRpbiBsaXN0cy4KKworQmxvY2tzIGFyZSB0dXJ0bGVzIHdpdGggc2hhcGUgInNxdWFyZSIsIGJ1dAorc3RyZXRjaGVkIHRvIHJlY3RhbmdsZXMgYnkgc2hhcGVzaXplKCkKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBUbyBleGl0IHByZXNzIHNwYWNlIGJ1dHRvbgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiIiCitmcm9tIHR1cnRsZSBpbXBvcnQgKgoraW1wb3J0IHJhbmRvbQorCisKK2NsYXNzIEJsb2NrKFR1cnRsZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKKyAgICAgICAgVHVydGxlLl9faW5pdF9fKHNlbGYsIHNoYXBlPSJzcXVhcmUiLCB2aXNpYmxlPUZhbHNlKQorICAgICAgICBzZWxmLnB1KCkKKyAgICAgICAgc2VsZi5zaGFwZXNpemUoc2l6ZSAqIDEuNSwgMS41LCAyKSAjIHNxdWFyZS0tPnJlY3RhbmdsZQorICAgICAgICBzZWxmLmZpbGxjb2xvcigiYmxhY2siKQorICAgICAgICBzZWxmLnN0KCkKKworICAgIGRlZiBnbG93KHNlbGYpOgorICAgICAgICBzZWxmLmZpbGxjb2xvcigicmVkIikKKworICAgIGRlZiB1bmdsb3coc2VsZik6CisgICAgICAgIHNlbGYuZmlsbGNvbG9yKCJibGFjayIpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQmxvY2sgc2l6ZTogezB9Ii5mb3JtYXQoc2VsZi5zaXplKQorCisKK2NsYXNzIFNoZWxmKGxpc3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHkpOgorICAgICAgICAiY3JlYXRlIGEgc2hlbGYuIHkgaXMgeS1wb3NpdGlvbiBvZiBmaXJzdCBibG9jayIKKyAgICAgICAgc2VsZi55ID0geQorICAgICAgICBzZWxmLnggPSAtMTUwCisKKyAgICBkZWYgcHVzaChzZWxmLCBkKToKKyAgICAgICAgd2lkdGgsIF8sIF8gPSBkLnNoYXBlc2l6ZSgpCisgICAgICAgICMgYWxpZ24gYmxvY2tzIGJ5IHRoZSBib3R0b20gZWRnZQorICAgICAgICB5X29mZnNldCA9IHdpZHRoIC8gMiAqIDIwCisgICAgICAgIGQuc2V0eShzZWxmLnkgKyB5X29mZnNldCkKKyAgICAgICAgZC5zZXR4KHNlbGYueCArIDM0ICogbGVuKHNlbGYpKQorICAgICAgICBzZWxmLmFwcGVuZChkKQorCisgICAgZGVmIF9jbG9zZV9nYXBfZnJvbV9pKHNlbGYsIGkpOgorICAgICAgICBmb3IgYiBpbiBzZWxmW2k6XToKKyAgICAgICAgICAgIHhwb3MsIF8gPSBiLnBvcygpCisgICAgICAgICAgICBiLnNldHgoeHBvcyAtIDM0KQorCisgICAgZGVmIF9vcGVuX2dhcF9mcm9tX2koc2VsZiwgaSk6CisgICAgICAgIGZvciBiIGluIHNlbGZbaTpdOgorICAgICAgICAgICAgeHBvcywgXyA9IGIucG9zKCkKKyAgICAgICAgICAgIGIuc2V0eCh4cG9zICsgMzQpCisKKyAgICBkZWYgcG9wKHNlbGYsIGtleSk6CisgICAgICAgIGIgPSBsaXN0LnBvcChzZWxmLCBrZXkpCisgICAgICAgIGIuZ2xvdygpCisgICAgICAgIGIuc2V0eSgyMDApCisgICAgICAgIHNlbGYuX2Nsb3NlX2dhcF9mcm9tX2koa2V5KQorICAgICAgICByZXR1cm4gYgorCisgICAgZGVmIGluc2VydChzZWxmLCBrZXksIGIpOgorICAgICAgICBzZWxmLl9vcGVuX2dhcF9mcm9tX2koa2V5KQorICAgICAgICBsaXN0Lmluc2VydChzZWxmLCBrZXksIGIpCisgICAgICAgIGIuc2V0eChzZWxmLnggKyAzNCAqIGtleSkKKyAgICAgICAgd2lkdGgsIF8sIF8gPSBiLnNoYXBlc2l6ZSgpCisgICAgICAgICMgYWxpZ24gYmxvY2tzIGJ5IHRoZSBib3R0b20gZWRnZQorICAgICAgICB5X29mZnNldCA9IHdpZHRoIC8gMiAqIDIwCisgICAgICAgIGIuc2V0eShzZWxmLnkgKyB5X29mZnNldCkKKyAgICAgICAgYi51bmdsb3coKQorCitkZWYgaXNvcnQoc2hlbGYpOgorICAgIGxlbmd0aCA9IGxlbihzaGVsZikKKyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW5ndGgpOgorICAgICAgICBob2xlID0gaQorICAgICAgICB3aGlsZSBob2xlID4gMCBhbmQgc2hlbGZbaV0uc2l6ZSA8IHNoZWxmW2hvbGUgLSAxXS5zaXplOgorICAgICAgICAgICAgaG9sZSA9IGhvbGUgLSAxCisgICAgICAgIHNoZWxmLmluc2VydChob2xlLCBzaGVsZi5wb3AoaSkpCisgICAgcmV0dXJuCisKK2RlZiBzc29ydChzaGVsZik6CisgICAgbGVuZ3RoID0gbGVuKHNoZWxmKQorICAgIGZvciBqIGluIHJhbmdlKDAsIGxlbmd0aCAtIDEpOgorICAgICAgICBpbWluID0gagorICAgICAgICBmb3IgaSBpbiByYW5nZShqICsgMSwgbGVuZ3RoKToKKyAgICAgICAgICAgIGlmIHNoZWxmW2ldLnNpemUgPCBzaGVsZltpbWluXS5zaXplOgorICAgICAgICAgICAgICAgIGltaW4gPSBpCisgICAgICAgIGlmIGltaW4gIT0gajoKKyAgICAgICAgICAgIHNoZWxmLmluc2VydChqLCBzaGVsZi5wb3AoaW1pbikpCisKK2RlZiBwYXJ0aXRpb24oc2hlbGYsIGxlZnQsIHJpZ2h0LCBwaXZvdF9pbmRleCk6CisgICAgcGl2b3QgPSBzaGVsZltwaXZvdF9pbmRleF0KKyAgICBzaGVsZi5pbnNlcnQocmlnaHQsIHNoZWxmLnBvcChwaXZvdF9pbmRleCkpCisgICAgc3RvcmVfaW5kZXggPSBsZWZ0CisgICAgZm9yIGkgaW4gcmFuZ2UobGVmdCwgcmlnaHQpOiAjIHJhbmdlIGlzIG5vbi1pbmNsdXNpdmUgb2YgZW5kaW5nIHZhbHVlCisgICAgICAgIGlmIHNoZWxmW2ldLnNpemUgPCBwaXZvdC5zaXplOgorICAgICAgICAgICAgc2hlbGYuaW5zZXJ0KHN0b3JlX2luZGV4LCBzaGVsZi5wb3AoaSkpCisgICAgICAgICAgICBzdG9yZV9pbmRleCA9IHN0b3JlX2luZGV4ICsgMQorICAgIHNoZWxmLmluc2VydChzdG9yZV9pbmRleCwgc2hlbGYucG9wKHJpZ2h0KSkgIyBtb3ZlIHBpdm90IHRvIGNvcnJlY3QgcG9zaXRpb24KKyAgICByZXR1cm4gc3RvcmVfaW5kZXgKKworZGVmIHFzb3J0KHNoZWxmLCBsZWZ0LCByaWdodCk6CisgICAgaWYgbGVmdCA8IHJpZ2h0OgorICAgICAgICBwaXZvdF9pbmRleCA9IGxlZnQKKyAgICAgICAgcGl2b3RfbmV3X2luZGV4ID0gcGFydGl0aW9uKHNoZWxmLCBsZWZ0LCByaWdodCwgcGl2b3RfaW5kZXgpCisgICAgICAgIHFzb3J0KHNoZWxmLCBsZWZ0LCBwaXZvdF9uZXdfaW5kZXggLSAxKQorICAgICAgICBxc29ydChzaGVsZiwgcGl2b3RfbmV3X2luZGV4ICsgMSwgcmlnaHQpCisKK2RlZiByYW5kb21pemUoKToKKyAgICBkaXNhYmxlX2tleXMoKQorICAgIGNsZWFyKCkKKyAgICB0YXJnZXQgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICByYW5kb20uc2h1ZmZsZSh0YXJnZXQpCisgICAgZm9yIGksIHQgaW4gZW51bWVyYXRlKHRhcmdldCk6CisgICAgICAgIGZvciBqIGluIHJhbmdlKGksIGxlbihzKSk6CisgICAgICAgICAgICBpZiBzW2pdLnNpemUgPT0gdCArIDE6CisgICAgICAgICAgICAgICAgcy5pbnNlcnQoaSwgcy5wb3AoaikpCisgICAgc2hvd190ZXh0KGluc3RydWN0aW9uczEpCisgICAgc2hvd190ZXh0KGluc3RydWN0aW9uczIsIGxpbmU9MSkKKyAgICBlbmFibGVfa2V5cygpCisKK2RlZiBzaG93X3RleHQodGV4dCwgbGluZT0wKToKKyAgICBsaW5lID0gMjAgKiBsaW5lCisgICAgZ290bygwLC0yNTAgLSBsaW5lKQorICAgIHdyaXRlKHRleHQsIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE2LCAiYm9sZCIpKQorCitkZWYgc3RhcnRfc3NvcnQoKToKKyAgICBkaXNhYmxlX2tleXMoKQorICAgIGNsZWFyKCkKKyAgICBzaG93X3RleHQoIlNlbGVjdGlvbiBTb3J0IikKKyAgICBzc29ydChzKQorICAgIGNsZWFyKCkKKyAgICBzaG93X3RleHQoaW5zdHJ1Y3Rpb25zMSkKKyAgICBzaG93X3RleHQoaW5zdHJ1Y3Rpb25zMiwgbGluZT0xKQorICAgIGVuYWJsZV9rZXlzKCkKKworZGVmIHN0YXJ0X2lzb3J0KCk6CisgICAgZGlzYWJsZV9rZXlzKCkKKyAgICBjbGVhcigpCisgICAgc2hvd190ZXh0KCJJbnNlcnRpb24gU29ydCIpCisgICAgaXNvcnQocykKKyAgICBjbGVhcigpCisgICAgc2hvd190ZXh0KGluc3RydWN0aW9uczEpCisgICAgc2hvd190ZXh0KGluc3RydWN0aW9uczIsIGxpbmU9MSkKKyAgICBlbmFibGVfa2V5cygpCisKK2RlZiBzdGFydF9xc29ydCgpOgorICAgIGRpc2FibGVfa2V5cygpCisgICAgY2xlYXIoKQorICAgIHNob3dfdGV4dCgiUXVpY2tzb3J0IikKKyAgICBxc29ydChzLCAwLCBsZW4ocykgLSAxKQorICAgIGNsZWFyKCkKKyAgICBzaG93X3RleHQoaW5zdHJ1Y3Rpb25zMSkKKyAgICBzaG93X3RleHQoaW5zdHJ1Y3Rpb25zMiwgbGluZT0xKQorICAgIGVuYWJsZV9rZXlzKCkKKworZGVmIGluaXRfc2hlbGYoKToKKyAgICBnbG9iYWwgcworICAgIHMgPSBTaGVsZigtMjAwKQorICAgIHZhbHMgPSAoNCwgMiwgOCwgOSwgMSwgNSwgMTAsIDMsIDcsIDYpCisgICAgZm9yIGkgaW4gdmFsczoKKyAgICAgICAgcy5wdXNoKEJsb2NrKGkpKQorCitkZWYgZGlzYWJsZV9rZXlzKCk6CisgICAgb25rZXkoTm9uZSwgInMiKQorICAgIG9ua2V5KE5vbmUsICJpIikKKyAgICBvbmtleShOb25lLCAicSIpCisgICAgb25rZXkoTm9uZSwgInIiKQorCitkZWYgZW5hYmxlX2tleXMoKToKKyAgICBvbmtleShzdGFydF9pc29ydCwgImkiKQorICAgIG9ua2V5KHN0YXJ0X3Nzb3J0LCAicyIpCisgICAgb25rZXkoc3RhcnRfcXNvcnQsICJxIikKKyAgICBvbmtleShyYW5kb21pemUsICJyIikKKyAgICBvbmtleShieWUsICJzcGFjZSIpCisKK2RlZiBtYWluKCk6CisgICAgZ2V0c2NyZWVuKCkuY2xlYXJzY3JlZW4oKQorICAgIGh0KCk7IHBlbnVwKCkKKyAgICBpbml0X3NoZWxmKCkKKyAgICBzaG93X3RleHQoaW5zdHJ1Y3Rpb25zMSkKKyAgICBzaG93X3RleHQoaW5zdHJ1Y3Rpb25zMiwgbGluZT0xKQorICAgIGVuYWJsZV9rZXlzKCkKKyAgICBsaXN0ZW4oKQorICAgIHJldHVybiAiRVZFTlRMT09QIgorCitpbnN0cnVjdGlvbnMxID0gInByZXNzIGkgZm9yIGluc2VydGlvbiBzb3J0LCBzIGZvciBzZWxlY3Rpb24gc29ydCwgcSBmb3IgcXVpY2tzb3J0IgoraW5zdHJ1Y3Rpb25zMiA9ICJzcGFjZWJhciB0byBxdWl0LCByIHRvIHJhbmRvbWl6ZSIKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgbXNnID0gbWFpbigpCisgICAgbWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvTGliL3R5cGVzLnB5IGIvTGliL3R5cGVzLnB5CmluZGV4IDRmYjJkZWYuLjQ4ODkxY2QgMTAwNjQ0Ci0tLSBhL0xpYi90eXBlcy5weQorKysgYi9MaWIvdHlwZXMucHkKQEAgLTE5LDYgKzE5LDExIEBACiAgICAgeWllbGQgMQogR2VuZXJhdG9yVHlwZSA9IHR5cGUoX2coKSkKIAorYXN5bmMgZGVmIF9jKCk6IHBhc3MKK19jID0gX2MoKQorQ29yb3V0aW5lVHlwZSA9IHR5cGUoX2MpCitfYy5jbG9zZSgpICAjIFByZXZlbnQgUmVzb3VyY2VXYXJuaW5nCisKIGNsYXNzIF9DOgogICAgIGRlZiBfbShzZWxmKTogcGFzcwogTWV0aG9kVHlwZSA9IHR5cGUoX0MoKS5fbSkKQEAgLTQwLDcgKzQ1LDcgQEAKIEdldFNldERlc2NyaXB0b3JUeXBlID0gdHlwZShGdW5jdGlvblR5cGUuX19jb2RlX18pCiBNZW1iZXJEZXNjcmlwdG9yVHlwZSA9IHR5cGUoRnVuY3Rpb25UeXBlLl9fZ2xvYmFsc19fKQogCi1kZWwgc3lzLCBfZiwgX2csIF9DLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90IGZvciBleHBvcnQKK2RlbCBzeXMsIF9mLCBfZywgX0MsIF9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTm90IGZvciBleHBvcnQKIAogCiAjIFByb3ZpZGUgYSBQRVAgMzExNSBjb21wbGlhbnQgbWVjaGFuaXNtIGZvciBjbGFzcyBjcmVhdGlvbgpAQCAtMTU4LDQgKzE2Myw5OSBAQAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKIAoraW1wb3J0IGZ1bmN0b29scyBhcyBfZnVuY3Rvb2xzCitpbXBvcnQgY29sbGVjdGlvbnMuYWJjIGFzIF9jb2xsZWN0aW9uc19hYmMKKworY2xhc3MgX0dlbmVyYXRvcldyYXBwZXI6CisgICAgIyBUT0RPOiBJbXBsZW1lbnQgdGhpcyBpbiBDLgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW4pOgorICAgICAgICBzZWxmLl9fd3JhcHBlZCA9IGdlbgorICAgICAgICBzZWxmLl9faXNnZW4gPSBnZW4uX19jbGFzc19fIGlzIEdlbmVyYXRvclR5cGUKKyAgICAgICAgc2VsZi5fX25hbWVfXyA9IGdldGF0dHIoZ2VuLCAnX19uYW1lX18nLCBOb25lKQorICAgICAgICBzZWxmLl9fcXVhbG5hbWVfXyA9IGdldGF0dHIoZ2VuLCAnX19xdWFsbmFtZV9fJywgTm9uZSkKKyAgICBkZWYgc2VuZChzZWxmLCB2YWwpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3dyYXBwZWQuc2VuZCh2YWwpCisgICAgZGVmIHRocm93KHNlbGYsIHRwLCAqcmVzdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9fd3JhcHBlZC50aHJvdyh0cCwgKnJlc3QpCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3dyYXBwZWQuY2xvc2UoKQorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBnaV9jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3dyYXBwZWQuZ2lfY29kZQorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBnaV9mcmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX193cmFwcGVkLmdpX2ZyYW1lCisgICAgQHByb3BlcnR5CisgICAgZGVmIGdpX3J1bm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fd3JhcHBlZC5naV9ydW5uaW5nCisgICAgQHByb3BlcnR5CisgICAgZGVmIGdpX3lpZWxkZnJvbShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX193cmFwcGVkLmdpX3lpZWxkZnJvbQorICAgIGNyX2NvZGUgPSBnaV9jb2RlCisgICAgY3JfZnJhbWUgPSBnaV9mcmFtZQorICAgIGNyX3J1bm5pbmcgPSBnaV9ydW5uaW5nCisgICAgY3JfYXdhaXQgPSBnaV95aWVsZGZyb20KKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgIHJldHVybiBuZXh0KHNlbGYuX193cmFwcGVkKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX2lzZ2VuOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX193cmFwcGVkCisgICAgICAgIHJldHVybiBzZWxmCisgICAgX19hd2FpdF9fID0gX19pdGVyX18KKworZGVmIGNvcm91dGluZShmdW5jKToKKyAgICAiIiJDb252ZXJ0IHJlZ3VsYXIgZ2VuZXJhdG9yIGZ1bmN0aW9uIHRvIGEgY29yb3V0aW5lLiIiIgorCisgICAgaWYgbm90IGNhbGxhYmxlKGZ1bmMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3R5cGVzLmNvcm91dGluZSgpIGV4cGVjdHMgYSBjYWxsYWJsZScpCisKKyAgICBpZiAoZnVuYy5fX2NsYXNzX18gaXMgRnVuY3Rpb25UeXBlIGFuZAorICAgICAgICBnZXRhdHRyKGZ1bmMsICdfX2NvZGVfXycsIE5vbmUpLl9fY2xhc3NfXyBpcyBDb2RlVHlwZSk6CisKKyAgICAgICAgY29fZmxhZ3MgPSBmdW5jLl9fY29kZV9fLmNvX2ZsYWdzCisKKyAgICAgICAgIyBDaGVjayBpZiAnZnVuYycgaXMgYSBjb3JvdXRpbmUgZnVuY3Rpb24uCisgICAgICAgICMgKDB4MTgwID09IENPX0NPUk9VVElORSB8IENPX0lURVJBQkxFX0NPUk9VVElORSkKKyAgICAgICAgaWYgY29fZmxhZ3MgJiAweDE4MDoKKyAgICAgICAgICAgIHJldHVybiBmdW5jCisKKyAgICAgICAgIyBDaGVjayBpZiAnZnVuYycgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb24uCisgICAgICAgICMgKDB4MjAgPT0gQ09fR0VORVJBVE9SKQorICAgICAgICBpZiBjb19mbGFncyAmIDB4MjA6CisgICAgICAgICAgICAjIFRPRE86IEltcGxlbWVudCB0aGlzIGluIEMuCisgICAgICAgICAgICBjbyA9IGZ1bmMuX19jb2RlX18KKyAgICAgICAgICAgIGZ1bmMuX19jb2RlX18gPSBDb2RlVHlwZSgKKyAgICAgICAgICAgICAgICBjby5jb19hcmdjb3VudCwgY28uY29fa3dvbmx5YXJnY291bnQsIGNvLmNvX25sb2NhbHMsCisgICAgICAgICAgICAgICAgY28uY29fc3RhY2tzaXplLAorICAgICAgICAgICAgICAgIGNvLmNvX2ZsYWdzIHwgMHgxMDAsICAjIDB4MTAwID09IENPX0lURVJBQkxFX0NPUk9VVElORQorICAgICAgICAgICAgICAgIGNvLmNvX2NvZGUsCisgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBjby5jb19uYW1lcywgY28uY29fdmFybmFtZXMsIGNvLmNvX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgIGNvLmNvX25hbWUsIGNvLmNvX2ZpcnN0bGluZW5vLCBjby5jb19sbm90YWIsIGNvLmNvX2ZyZWV2YXJzLAorICAgICAgICAgICAgICAgIGNvLmNvX2NlbGx2YXJzKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKworICAgICMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIHByaW1hcmlseSB0byBzdXBwb3J0IGZ1bmN0aW9ucyB0aGF0CisgICAgIyByZXR1cm4gZ2VuZXJhdG9yLWxpa2Ugb2JqZWN0cyAoZm9yIGluc3RhbmNlIGdlbmVyYXRvcnMKKyAgICAjIGNvbXBpbGVkIHdpdGggQ3l0aG9uKS4KKworICAgIEBfZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgZGVmIHdyYXBwZWQoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgY29ybyA9IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiAoY29yby5fX2NsYXNzX18gaXMgQ29yb3V0aW5lVHlwZSBvcgorICAgICAgICAgICAgY29yby5fX2NsYXNzX18gaXMgR2VuZXJhdG9yVHlwZSBhbmQgY29yby5naV9jb2RlLmNvX2ZsYWdzICYgMHgxMDApOgorICAgICAgICAgICAgIyAnY29ybycgaXMgYSBuYXRpdmUgY29yb3V0aW5lIG9iamVjdCBvciBhbiBpdGVyYWJsZSBjb3JvdXRpbmUKKyAgICAgICAgICAgIHJldHVybiBjb3JvCisgICAgICAgIGlmIChpc2luc3RhbmNlKGNvcm8sIF9jb2xsZWN0aW9uc19hYmMuR2VuZXJhdG9yKSBhbmQKKyAgICAgICAgICAgIG5vdCBpc2luc3RhbmNlKGNvcm8sIF9jb2xsZWN0aW9uc19hYmMuQ29yb3V0aW5lKSk6CisgICAgICAgICAgICAjICdjb3JvJyBpcyBlaXRoZXIgYSBwdXJlIFB5dGhvbiBnZW5lcmF0b3IgaXRlcmF0b3IsIG9yIGl0CisgICAgICAgICAgICAjIGltcGxlbWVudHMgY29sbGVjdGlvbnMuYWJjLkdlbmVyYXRvciAoYW5kIGRvZXMgbm90IGltcGxlbWVudAorICAgICAgICAgICAgIyBjb2xsZWN0aW9ucy5hYmMuQ29yb3V0aW5lKS4KKyAgICAgICAgICAgIHJldHVybiBfR2VuZXJhdG9yV3JhcHBlcihjb3JvKQorICAgICAgICAjICdjb3JvJyBpcyBlaXRoZXIgYW4gaW5zdGFuY2Ugb2YgY29sbGVjdGlvbnMuYWJjLkNvcm91dGluZSBvcgorICAgICAgICAjIHNvbWUgb3RoZXIgb2JqZWN0IC0tIHBhc3MgaXQgdGhyb3VnaC4KKyAgICAgICAgcmV0dXJuIGNvcm8KKworICAgIHJldHVybiB3cmFwcGVkCisKKwogX19hbGxfXyA9IFtuIGZvciBuIGluIGdsb2JhbHMoKSBpZiBuWzoxXSAhPSAnXyddCmRpZmYgLS1naXQgYS9MaWIvdHlwaW5nLnB5IGIvTGliL3R5cGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2FjNjZjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3R5cGluZy5weQpAQCAtMCwwICsxLDE4NDMgQEAKK2ltcG9ydCBhYmMKK2Zyb20gYWJjIGltcG9ydCBhYnN0cmFjdG1ldGhvZCwgYWJzdHJhY3Rwcm9wZXJ0eQoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHJlIGFzIHN0ZGxpYl9yZSAgIyBBdm9pZCBjb25mdXNpb24gd2l0aCB0aGUgcmUgd2UgZXhwb3J0LgoraW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCit0cnk6CisgICAgaW1wb3J0IGNvbGxlY3Rpb25zLmFiYyBhcyBjb2xsZWN0aW9uc19hYmMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMgYXMgY29sbGVjdGlvbnNfYWJjICAjIEZhbGxiYWNrIGZvciBQWTMuMi4KKworCisjIFBsZWFzZSBrZWVwIF9fYWxsX18gYWxwaGFiZXRpemVkIHdpdGhpbiBlYWNoIGNhdGVnb3J5LgorX19hbGxfXyA9IFsKKyAgICAjIFN1cGVyLXNwZWNpYWwgdHlwaW5nIHByaW1pdGl2ZXMuCisgICAgJ0FueScsCisgICAgJ0NhbGxhYmxlJywKKyAgICAnR2VuZXJpYycsCisgICAgJ09wdGlvbmFsJywKKyAgICAnVHVwbGUnLAorICAgICdUeXBlJywKKyAgICAnVHlwZVZhcicsCisgICAgJ1VuaW9uJywKKworICAgICMgQUJDcyAoZnJvbSBjb2xsZWN0aW9ucy5hYmMpLgorICAgICdBYnN0cmFjdFNldCcsICAjIGNvbGxlY3Rpb25zLmFiYy5TZXQuCisgICAgJ0F3YWl0YWJsZScsCisgICAgJ0FzeW5jSXRlcmF0b3InLAorICAgICdBc3luY0l0ZXJhYmxlJywKKyAgICAnQnl0ZVN0cmluZycsCisgICAgJ0NvbnRhaW5lcicsCisgICAgJ0hhc2hhYmxlJywKKyAgICAnSXRlbXNWaWV3JywKKyAgICAnSXRlcmFibGUnLAorICAgICdJdGVyYXRvcicsCisgICAgJ0tleXNWaWV3JywKKyAgICAnTWFwcGluZycsCisgICAgJ01hcHBpbmdWaWV3JywKKyAgICAnTXV0YWJsZU1hcHBpbmcnLAorICAgICdNdXRhYmxlU2VxdWVuY2UnLAorICAgICdNdXRhYmxlU2V0JywKKyAgICAnU2VxdWVuY2UnLAorICAgICdTaXplZCcsCisgICAgJ1ZhbHVlc1ZpZXcnLAorCisgICAgIyBTdHJ1Y3R1cmFsIGNoZWNrcywgYS5rLmEuIHByb3RvY29scy4KKyAgICAnUmV2ZXJzaWJsZScsCisgICAgJ1N1cHBvcnRzQWJzJywKKyAgICAnU3VwcG9ydHNGbG9hdCcsCisgICAgJ1N1cHBvcnRzSW50JywKKyAgICAnU3VwcG9ydHNSb3VuZCcsCisKKyAgICAjIENvbmNyZXRlIGNvbGxlY3Rpb24gdHlwZXMuCisgICAgJ0RpY3QnLAorICAgICdEZWZhdWx0RGljdCcsCisgICAgJ0xpc3QnLAorICAgICdTZXQnLAorICAgICdOYW1lZFR1cGxlJywgICMgTm90IHJlYWxseSBhIHR5cGUuCisgICAgJ0dlbmVyYXRvcicsCisKKyAgICAjIE9uZS1vZmYgdGhpbmdzLgorICAgICdBbnlTdHInLAorICAgICdjYXN0JywKKyAgICAnZ2V0X3R5cGVfaGludHMnLAorICAgICdOZXdUeXBlJywKKyAgICAnbm9fdHlwZV9jaGVjaycsCisgICAgJ25vX3R5cGVfY2hlY2tfZGVjb3JhdG9yJywKKyAgICAnb3ZlcmxvYWQnLAorICAgICdUZXh0JywKKyAgICAnVFlQRV9DSEVDS0lORycsCitdCisKKyMgVGhlIHBzZXVkby1zdWJtb2R1bGVzICdyZScgYW5kICdpbycgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYworIyBuYW1lc3BhY2UsIGJ1dCBleGNsdWRlZCBmcm9tIF9fYWxsX18gYmVjYXVzZSB0aGV5IG1pZ2h0IHN0b21wIG9uCisjIGxlZ2l0aW1hdGUgaW1wb3J0cyBvZiB0aG9zZSBtb2R1bGVzLgorCisKK2RlZiBfcXVhbG5hbWUoeCk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mb1s6Ml0gPj0gKDMsIDMpOgorICAgICAgICByZXR1cm4geC5fX3F1YWxuYW1lX18KKyAgICBlbHNlOgorICAgICAgICAjIEZhbGwgYmFjayB0byBqdXN0IG5hbWUuCisgICAgICAgIHJldHVybiB4Ll9fbmFtZV9fCisKKworY2xhc3MgVHlwaW5nTWV0YSh0eXBlKToKKyAgICAiIiJNZXRhY2xhc3MgZm9yIGV2ZXJ5IHR5cGUgZGVmaW5lZCBiZWxvdy4KKworICAgIFRoaXMgb3ZlcnJpZGVzIF9fbmV3X18oKSB0byByZXF1aXJlIGFuIGV4dHJhIGtleXdvcmQgcGFyYW1ldGVyCisgICAgJ19yb290Jywgd2hpY2ggc2VydmVzIGFzIGEgZ3VhcmQgYWdhaW5zdCBuYWl2ZSBzdWJjbGFzc2luZyBvZiB0aGUKKyAgICB0eXBpbmcgY2xhc3Nlcy4gIEFueSBsZWdpdGltYXRlIGNsYXNzIGRlZmluZWQgdXNpbmcgYSBtZXRhY2xhc3MKKyAgICBkZXJpdmVkIGZyb20gVHlwaW5nTWV0YSAoaW5jbHVkaW5nIGludGVybmFsIHN1YmNsYXNzZXMgY3JlYXRlZCBieQorICAgIGUuZy4gIFVuaW9uW1gsIFldKSBtdXN0IHBhc3MgX3Jvb3Q9VHJ1ZS4KKworICAgIFRoaXMgYWxzbyBkZWZpbmVzIGEgZHVtbXkgY29uc3RydWN0b3IgKGFsbCB0aGUgd29yayBpcyBkb25lIGluCisgICAgX19uZXdfXykgYW5kIGEgbmljZXIgcmVwcigpLgorICAgICIiIgorCisgICAgX2lzX3Byb3RvY29sID0gRmFsc2UKKworICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiwgX3Jvb3Q9RmFsc2UpOgorICAgICAgICBpZiBub3QgX3Jvb3Q6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBzdWJjbGFzcyAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLCAnLmpvaW4obWFwKF90eXBlX3JlcHIsIGJhc2VzKSkgb3IgJygpJykpCisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2V2YWxfdHlwZShzZWxmLCBnbG9iYWxucywgbG9jYWxucyk6CisgICAgICAgICIiIk92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0byBpbnRlcnByZXQgZm9yd2FyZCByZWZlcmVuY2VzLgorCisgICAgICAgIEZvciBleGFtcGxlLCBVbmlvblsnQyddIGlzIGludGVybmFsbHkgc3RvcmVkIGFzCisgICAgICAgIFVuaW9uW19Gb3J3YXJkUmVmKCdDJyldLCB3aGljaCBzaG91bGQgZXZhbHVhdGUgdG8gX1VuaW9uW0NdLAorICAgICAgICB3aGVyZSBDIGlzIGFuIG9iamVjdCBmb3VuZCBpbiBnbG9iYWxucyBvciBsb2NhbG5zIChzZWFyY2hpbmcKKyAgICAgICAgbG9jYWxucyBmaXJzdCwgb2YgY291cnNlKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX2dldF90eXBlX3ZhcnMoc2VsZiwgdHZhcnMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnJXMuJXMnICUgKHNlbGYuX19tb2R1bGVfXywgX3F1YWxuYW1lKHNlbGYpKQorCisKK2NsYXNzIEZpbmFsOgorICAgICIiIk1peC1pbiBjbGFzcyB0byBwcmV2ZW50IGluc3RhbnRpYXRpb24uIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIF9fbmV3X18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGluc3RhbnRpYXRlICVyIiAlIHNlbGYuX19jbGFzc19fKQorCisKK2NsYXNzIF9Gb3J3YXJkUmVmKFR5cGluZ01ldGEpOgorICAgICIiIldyYXBwZXIgdG8gaG9sZCBhIGZvcndhcmQgcmVmZXJlbmNlLiIiIgorCisgICAgZGVmIF9fbmV3X18oY2xzLCBhcmcpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmcsIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0ZvcndhcmRSZWYgbXVzdCBiZSBhIHN0cmluZyAtLSBnb3QgJXInICUgKGFyZywpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShhcmcsICc8c3RyaW5nPicsICdldmFsJykKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoJ0ZvcndhcmRSZWYgbXVzdCBiZSBhbiBleHByZXNzaW9uIC0tIGdvdCAlcicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZywpKQorICAgICAgICBzZWxmID0gc3VwZXIoKS5fX25ld19fKGNscywgYXJnLCAoKSwge30sIF9yb290PVRydWUpCisgICAgICAgIHNlbGYuX19mb3J3YXJkX2FyZ19fID0gYXJnCisgICAgICAgIHNlbGYuX19mb3J3YXJkX2NvZGVfXyA9IGNvZGUKKyAgICAgICAgc2VsZi5fX2ZvcndhcmRfZXZhbHVhdGVkX18gPSBGYWxzZQorICAgICAgICBzZWxmLl9fZm9yd2FyZF92YWx1ZV9fID0gTm9uZQorICAgICAgICB0eXBpbmdfZ2xvYmFscyA9IGdsb2JhbHMoKQorICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkKKyAgICAgICAgd2hpbGUgZnJhbWUgaXMgbm90IE5vbmUgYW5kIGZyYW1lLmZfZ2xvYmFscyBpcyB0eXBpbmdfZ2xvYmFsczoKKyAgICAgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgIGFzc2VydCBmcmFtZSBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLl9fZm9yd2FyZF9mcmFtZV9fID0gZnJhbWUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfZXZhbF90eXBlKHNlbGYsIGdsb2JhbG5zLCBsb2NhbG5zKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9jYWxucywgZGljdCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0ZvcndhcmRSZWYgbG9jYWxucyBtdXN0IGJlIGEgZGljdCAtLSBnb3QgJXInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWxucywpKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShnbG9iYWxucywgZGljdCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0ZvcndhcmRSZWYgZ2xvYmFsbnMgbXVzdCBiZSBhIGRpY3QgLS0gZ290ICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsb2JhbG5zLCkpCisgICAgICAgIGlmIG5vdCBzZWxmLl9fZm9yd2FyZF9ldmFsdWF0ZWRfXzoKKyAgICAgICAgICAgIGlmIGdsb2JhbG5zIGlzIE5vbmUgYW5kIGxvY2FsbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBnbG9iYWxucyA9IGxvY2FsbnMgPSB7fQorICAgICAgICAgICAgZWxpZiBnbG9iYWxucyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGdsb2JhbG5zID0gbG9jYWxucworICAgICAgICAgICAgZWxpZiBsb2NhbG5zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9jYWxucyA9IGdsb2JhbG5zCisgICAgICAgICAgICBzZWxmLl9fZm9yd2FyZF92YWx1ZV9fID0gX3R5cGVfY2hlY2soCisgICAgICAgICAgICAgICAgZXZhbChzZWxmLl9fZm9yd2FyZF9jb2RlX18sIGdsb2JhbG5zLCBsb2NhbG5zKSwKKyAgICAgICAgICAgICAgICAiRm9yd2FyZCByZWZlcmVuY2VzIG11c3QgZXZhbHVhdGUgdG8gdHlwZXMuIikKKyAgICAgICAgICAgIHNlbGYuX19mb3J3YXJkX2V2YWx1YXRlZF9fID0gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5fX2ZvcndhcmRfdmFsdWVfXworCisgICAgZGVmIF9faW5zdGFuY2VjaGVja19fKHNlbGYsIG9iaik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRm9yd2FyZCByZWZlcmVuY2VzIGNhbm5vdCBiZSB1c2VkIHdpdGggaXNpbnN0YW5jZSgpLiIpCisKKyAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgY2xzKToKKyAgICAgICAgaWYgbm90IHNlbGYuX19mb3J3YXJkX2V2YWx1YXRlZF9fOgorICAgICAgICAgICAgZ2xvYmFsbnMgPSBzZWxmLl9fZm9yd2FyZF9mcmFtZV9fLmZfZ2xvYmFscworICAgICAgICAgICAgbG9jYWxucyA9IHNlbGYuX19mb3J3YXJkX2ZyYW1lX18uZl9sb2NhbHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9ldmFsX3R5cGUoZ2xvYmFsbnMsIGxvY2FsbnMpCisgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZSAgIyBUb28gZWFybHkuCisgICAgICAgIHJldHVybiBpc3N1YmNsYXNzKGNscywgc2VsZi5fX2ZvcndhcmRfdmFsdWVfXykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdfRm9yd2FyZFJlZiglciknICUgKHNlbGYuX19mb3J3YXJkX2FyZ19fLCkKKworCitjbGFzcyBfVHlwZUFsaWFzOgorICAgICIiIkludGVybmFsIGhlbHBlciBjbGFzcyBmb3IgZGVmaW5pbmcgZ2VuZXJpYyB2YXJpYW50cyBvZiBjb25jcmV0ZSB0eXBlcy4KKworICAgIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIHR5cGU7IGxldCdzIGNhbGwgaXQgYSBwc2V1ZG8tdHlwZS4gIEl0IGNhbgorICAgIGJlIHVzZWQgaW4gaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrcywgZS5nLiBpc2luc3RhbmNlKG0sIE1hdGNoKQorICAgIG9yIGlzc3ViY2xhc3ModHlwZShtKSwgTWF0Y2gpLiAgSG93ZXZlciwgaXQgY2Fubm90IGJlIGl0c2VsZiB0aGUKKyAgICB0YXJnZXQgb2YgYW4gaXNzdWJjbGFzcygpIGNhbGw7IGUuZy4gaXNzdWJjbGFzcyhNYXRjaCwgQykgKGZvcgorICAgIHNvbWUgYXJiaXRyYXJ5IGNsYXNzIEMpIHJhaXNlcyBUeXBlRXJyb3IgcmF0aGVyIHRoYW4gcmV0dXJuaW5nCisgICAgRmFsc2UuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ25hbWUnLCAndHlwZV92YXInLCAnaW1wbF90eXBlJywgJ3R5cGVfY2hlY2tlcicpCisKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAiIiJDb25zdHJ1Y3Rvci4KKworICAgICAgICBUaGlzIG9ubHkgZXhpc3RzIHRvIGdpdmUgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBpbiBjYXNlCisgICAgICAgIHNvbWVvbmUgdHJpZXMgdG8gc3ViY2xhc3MgYSB0eXBlIGFsaWFzIChub3QgYSBnb29kIGlkZWEpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKGxlbihhcmdzKSA9PSAzIGFuZAorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoYXJnc1swXSwgc3RyKSBhbmQKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGFyZ3NbMV0sIHR1cGxlKSk6CisgICAgICAgICAgICAjIENsb3NlIGVub3VnaC4KKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQSB0eXBlIGFsaWFzIGNhbm5vdCBiZSBzdWJjbGFzc2VkIikKKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX25ld19fKGNscykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0eXBlX3ZhciwgaW1wbF90eXBlLCB0eXBlX2NoZWNrZXIpOgorICAgICAgICAiIiJJbml0aWFsaXplci4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgbmFtZTogVGhlIG5hbWUsIGUuZy4gJ1BhdHRlcm4nLgorICAgICAgICAgICAgdHlwZV92YXI6IFRoZSB0eXBlIHBhcmFtZXRlciwgZS5nLiBBbnlTdHIsIG9yIHRoZQorICAgICAgICAgICAgICAgIHNwZWNpZmljIHR5cGUsIGUuZy4gc3RyLgorICAgICAgICAgICAgaW1wbF90eXBlOiBUaGUgaW1wbGVtZW50YXRpb24gdHlwZS4KKyAgICAgICAgICAgIHR5cGVfY2hlY2tlcjogRnVuY3Rpb24gdGhhdCB0YWtlcyBhbiBpbXBsX3R5cGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgYW5kIHJldHVybnMgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBhIHR5cGVfdmFyIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobmFtZSwgc3RyKSwgcmVwcihuYW1lKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0eXBlX3ZhciwgdHlwZSksIHJlcHIodHlwZV92YXIpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGltcGxfdHlwZSwgdHlwZSksIHJlcHIoaW1wbF90eXBlKQorICAgICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UoaW1wbF90eXBlLCBUeXBpbmdNZXRhKSwgcmVwcihpbXBsX3R5cGUpCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi50eXBlX3ZhciA9IHR5cGVfdmFyCisgICAgICAgIHNlbGYuaW1wbF90eXBlID0gaW1wbF90eXBlCisgICAgICAgIHNlbGYudHlwZV9jaGVja2VyID0gdHlwZV9jaGVja2VyCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXNbJXNdIiAlIChzZWxmLm5hbWUsIF90eXBlX3JlcHIoc2VsZi50eXBlX3ZhcikpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgcGFyYW1ldGVyKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGFyYW1ldGVyLCB0eXBlKSwgcmVwcihwYXJhbWV0ZXIpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYudHlwZV92YXIsIFR5cGVWYXIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCIlcyBjYW5ub3QgYmUgZnVydGhlciBwYXJhbWV0ZXJpemVkLiIgJSBzZWxmKQorICAgICAgICBpZiBzZWxmLnR5cGVfdmFyLl9fY29uc3RyYWludHNfXzoKKyAgICAgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKHBhcmFtZXRlciwgVW5pb25bc2VsZi50eXBlX3Zhci5fX2NvbnN0cmFpbnRzX19dKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkIHN1YnN0aXR1dGlvbiBmb3IgJXMuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJhbWV0ZXIsIHNlbGYudHlwZV92YXIpKQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5uYW1lLCBwYXJhbWV0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmltcGxfdHlwZSwgc2VsZi50eXBlX2NoZWNrZXIpCisKKyAgICBkZWYgX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgb2JqKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUeXBlIGFsaWFzZXMgY2Fubm90IGJlIHVzZWQgd2l0aCBpc2luc3RhbmNlKCkuIikKKworICAgIGRlZiBfX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBjbHMpOgorICAgICAgICBpZiBjbHMgaXMgQW55OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjbHMsIF9UeXBlQWxpYXMpOgorICAgICAgICAgICAgIyBDb3ZhcmlhbmNlLiAgRm9yIG5vdywgd2UgY29tcGFyZSBieSBuYW1lLgorICAgICAgICAgICAgcmV0dXJuIChjbHMubmFtZSA9PSBzZWxmLm5hbWUgYW5kCisgICAgICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoY2xzLnR5cGVfdmFyLCBzZWxmLnR5cGVfdmFyKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgaXMgdG9vIGxlbmllbnQsIGJlY2F1c2UgdGhlCisgICAgICAgICAgICAjIGltcGxlbWVudGF0aW9uIHR5cGUgZG9lc24ndCBjYXJyeSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICAgICAgIyB3aGV0aGVyIGl0IGlzIGFib3V0IGJ5dGVzIG9yIHN0ciAoZm9yIGV4YW1wbGUpLgorICAgICAgICAgICAgcmV0dXJuIGlzc3ViY2xhc3MoY2xzLCBzZWxmLmltcGxfdHlwZSkKKworCitkZWYgX2dldF90eXBlX3ZhcnModHlwZXMsIHR2YXJzKToKKyAgICBmb3IgdCBpbiB0eXBlczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0LCBUeXBpbmdNZXRhKToKKyAgICAgICAgICAgIHQuX2dldF90eXBlX3ZhcnModHZhcnMpCisKKworZGVmIF90eXBlX3ZhcnModHlwZXMpOgorICAgIHR2YXJzID0gW10KKyAgICBfZ2V0X3R5cGVfdmFycyh0eXBlcywgdHZhcnMpCisgICAgcmV0dXJuIHR1cGxlKHR2YXJzKQorCisKK2RlZiBfZXZhbF90eXBlKHQsIGdsb2JhbG5zLCBsb2NhbG5zKToKKyAgICBpZiBpc2luc3RhbmNlKHQsIFR5cGluZ01ldGEpOgorICAgICAgICByZXR1cm4gdC5fZXZhbF90eXBlKGdsb2JhbG5zLCBsb2NhbG5zKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiB0CisKKworZGVmIF90eXBlX2NoZWNrKGFyZywgbXNnKToKKyAgICAiIiJDaGVjayB0aGF0IHRoZSBhcmd1bWVudCBpcyBhIHR5cGUsIGFuZCByZXR1cm4gaXQuCisKKyAgICBBcyBhIHNwZWNpYWwgY2FzZSwgYWNjZXB0IE5vbmUgYW5kIHJldHVybiB0eXBlKE5vbmUpIGluc3RlYWQuCisgICAgQWxzbywgX1R5cGVBbGlhcyBpbnN0YW5jZXMgKGUuZy4gTWF0Y2gsIFBhdHRlcm4pIGFyZSBhY2NlcHRhYmxlLgorCisgICAgVGhlIG1zZyBhcmd1bWVudCBpcyBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UsIGUuZy4KKworICAgICAgICAiVW5pb25bYXJnLCAuLi5dOiBhcmcgc2hvdWxkIGJlIGEgdHlwZS4iCisKKyAgICBXZSBhcHBlbmQgdGhlIHJlcHIoKSBvZiB0aGUgYWN0dWFsIHZhbHVlICh0cnVuY2F0ZWQgdG8gMTAwIGNoYXJzKS4KKyAgICAiIiIKKyAgICBpZiBhcmcgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIHR5cGUoTm9uZSkKKyAgICBpZiBpc2luc3RhbmNlKGFyZywgc3RyKToKKyAgICAgICAgYXJnID0gX0ZvcndhcmRSZWYoYXJnKQorICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZywgKHR5cGUsIF9UeXBlQWxpYXMpKSBhbmQgbm90IGNhbGxhYmxlKGFyZyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cgKyAiIEdvdCAlLjEwMHIuIiAlIChhcmcsKSkKKyAgICByZXR1cm4gYXJnCisKKworZGVmIF90eXBlX3JlcHIob2JqKToKKyAgICAiIiJSZXR1cm4gdGhlIHJlcHIoKSBvZiBhbiBvYmplY3QsIHNwZWNpYWwtY2FzaW5nIHR5cGVzLgorCisgICAgSWYgb2JqIGlzIGEgdHlwZSwgd2UgcmV0dXJuIGEgc2hvcnRlciB2ZXJzaW9uIHRoYW4gdGhlIGRlZmF1bHQKKyAgICB0eXBlLl9fcmVwcl9fLCBiYXNlZCBvbiB0aGUgbW9kdWxlIGFuZCBxdWFsaWZpZWQgbmFtZSwgd2hpY2ggaXMKKyAgICB0eXBpY2FsbHkgZW5vdWdoIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgdHlwZS4gIEZvciBldmVyeXRoaW5nCisgICAgZWxzZSwgd2UgZmFsbCBiYWNrIG9uIHJlcHIob2JqKS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSkgYW5kIG5vdCBpc2luc3RhbmNlKG9iaiwgVHlwaW5nTWV0YSk6CisgICAgICAgIGlmIG9iai5fX21vZHVsZV9fID09ICdidWlsdGlucyc6CisgICAgICAgICAgICByZXR1cm4gX3F1YWxuYW1lKG9iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJXMuJXMnICUgKG9iai5fX21vZHVsZV9fLCBfcXVhbG5hbWUob2JqKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gcmVwcihvYmopCisKKworY2xhc3MgQW55TWV0YShUeXBpbmdNZXRhKToKKyAgICAiIiJNZXRhY2xhc3MgZm9yIEFueS4iIiIKKworICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgX3Jvb3Q9RmFsc2UpOgorICAgICAgICBzZWxmID0gc3VwZXIoKS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgX3Jvb3Q9X3Jvb3QpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgb2JqKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJBbnkgY2Fubm90IGJlIHVzZWQgd2l0aCBpc2luc3RhbmNlKCkuIikKKworICAgIGRlZiBfX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBjbHMpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjbHMsIHR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19zdWJjbGFzc2NoZWNrX18oY2xzKSAgIyBUbyBUeXBlRXJyb3IuCisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgQW55KEZpbmFsLCBtZXRhY2xhc3M9QW55TWV0YSwgX3Jvb3Q9VHJ1ZSk6CisgICAgIiIiU3BlY2lhbCB0eXBlIGluZGljYXRpbmcgYW4gdW5jb25zdHJhaW5lZCB0eXBlLgorCisgICAgLSBBbnkgb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIEFueS4KKyAgICAtIEFueSBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIEFueS4KKyAgICAtIEFzIGEgc3BlY2lhbCBjYXNlLCBBbnkgYW5kIG9iamVjdCBhcmUgc3ViY2xhc3NlcyBvZiBlYWNoIG90aGVyLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworCitjbGFzcyBUeXBlVmFyKFR5cGluZ01ldGEsIG1ldGFjbGFzcz1UeXBpbmdNZXRhLCBfcm9vdD1UcnVlKToKKyAgICAiIiJUeXBlIHZhcmlhYmxlLgorCisgICAgVXNhZ2U6OgorCisgICAgICBUID0gVHlwZVZhcignVCcpICAjIENhbiBiZSBhbnl0aGluZworICAgICAgQSA9IFR5cGVWYXIoJ0EnLCBzdHIsIGJ5dGVzKSAgIyBNdXN0IGJlIHN0ciBvciBieXRlcworCisgICAgVHlwZSB2YXJpYWJsZXMgZXhpc3QgcHJpbWFyaWx5IGZvciB0aGUgYmVuZWZpdCBvZiBzdGF0aWMgdHlwZQorICAgIGNoZWNrZXJzLiAgVGhleSBzZXJ2ZSBhcyB0aGUgcGFyYW1ldGVycyBmb3IgZ2VuZXJpYyB0eXBlcyBhcyB3ZWxsCisgICAgYXMgZm9yIGdlbmVyaWMgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBTZWUgY2xhc3MgR2VuZXJpYyBmb3IgbW9yZQorICAgIGluZm9ybWF0aW9uIG9uIGdlbmVyaWMgdHlwZXMuICBHZW5lcmljIGZ1bmN0aW9ucyB3b3JrIGFzIGZvbGxvd3M6CisKKyAgICAgIGRlZiByZXBlYXQoeDogVCwgbjogaW50KSAtPiBTZXF1ZW5jZVtUXToKKyAgICAgICAgICAnJydSZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmcgbiByZWZlcmVuY2VzIHRvIHguJycnCisgICAgICAgICAgcmV0dXJuIFt4XSpuCisKKyAgICAgIGRlZiBsb25nZXN0KHg6IEEsIHk6IEEpIC0+IEE6CisgICAgICAgICAgJycnUmV0dXJuIHRoZSBsb25nZXN0IG9mIHR3byBzdHJpbmdzLicnJworICAgICAgICAgIHJldHVybiB4IGlmIGxlbih4KSA+PSBsZW4oeSkgZWxzZSB5CisKKyAgICBUaGUgbGF0dGVyIGV4YW1wbGUncyBzaWduYXR1cmUgaXMgZXNzZW50aWFsbHkgdGhlIG92ZXJsb2FkaW5nCisgICAgb2YgKHN0ciwgc3RyKSAtPiBzdHIgYW5kIChieXRlcywgYnl0ZXMpIC0+IGJ5dGVzLiAgQWxzbyBub3RlCisgICAgdGhhdCBpZiB0aGUgYXJndW1lbnRzIGFyZSBpbnN0YW5jZXMgb2Ygc29tZSBzdWJjbGFzcyBvZiBzdHIsCisgICAgdGhlIHJldHVybiB0eXBlIGlzIHN0aWxsIHBsYWluIHN0ci4KKworICAgIEF0IHJ1bnRpbWUsIGlzaW5zdGFuY2UoeCwgVCkgd2lsbCByYWlzZSBUeXBlRXJyb3IuICBIb3dldmVyLAorICAgIGlzc3ViY2xhc3MoQywgVCkgaXMgdHJ1ZSBmb3IgYW55IGNsYXNzIEMsIGFuZCBpc3N1YmNsYXNzKHN0ciwgQSkKKyAgICBhbmQgaXNzdWJjbGFzcyhieXRlcywgQSkgYXJlIHRydWUsIGFuZCBpc3N1YmNsYXNzKGludCwgQSkgaXMKKyAgICBmYWxzZS4gIChUT0RPOiBXaHkgaXMgdGhpcyBuZWVkZWQ/ICBUaGlzIG1heSBjaGFuZ2UuICBTZWUgIzEzNi4pCisKKyAgICBUeXBlIHZhcmlhYmxlcyBtYXkgYmUgbWFya2VkIGNvdmFyaWFudCBvciBjb250cmF2YXJpYW50IGJ5IHBhc3NpbmcKKyAgICBjb3ZhcmlhbnQ9VHJ1ZSBvciBjb250cmF2YXJpYW50PVRydWUuICBTZWUgUEVQIDQ4NCBmb3IgbW9yZQorICAgIGRldGFpbHMuICBCeSBkZWZhdWx0IHR5cGUgdmFyaWFibGVzIGFyZSBpbnZhcmlhbnQuCisKKyAgICBUeXBlIHZhcmlhYmxlcyBjYW4gYmUgaW50cm9zcGVjdGVkLiBlLmcuOgorCisgICAgICBULl9fbmFtZV9fID09ICdUJworICAgICAgVC5fX2NvbnN0cmFpbnRzX18gPT0gKCkKKyAgICAgIFQuX19jb3ZhcmlhbnRfXyA9PSBGYWxzZQorICAgICAgVC5fX2NvbnRyYXZhcmlhbnRfXyA9IEZhbHNlCisgICAgICBBLl9fY29uc3RyYWludHNfXyA9PSAoc3RyLCBieXRlcykKKyAgICAiIiIKKworICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgKmNvbnN0cmFpbnRzLCBib3VuZD1Ob25lLAorICAgICAgICAgICAgICAgIGNvdmFyaWFudD1GYWxzZSwgY29udHJhdmFyaWFudD1GYWxzZSk6CisgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCBuYW1lLCAoRmluYWwsKSwge30sIF9yb290PVRydWUpCisgICAgICAgIGlmIGNvdmFyaWFudCBhbmQgY29udHJhdmFyaWFudDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkJpdmFyaWFudCB0eXBlIHZhcmlhYmxlcyBhcmUgbm90IHN1cHBvcnRlZC4iKQorICAgICAgICBzZWxmLl9fY292YXJpYW50X18gPSBib29sKGNvdmFyaWFudCkKKyAgICAgICAgc2VsZi5fX2NvbnRyYXZhcmlhbnRfXyA9IGJvb2woY29udHJhdmFyaWFudCkKKyAgICAgICAgaWYgY29uc3RyYWludHMgYW5kIGJvdW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDb25zdHJhaW50cyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBib3VuZD0uLi4iKQorICAgICAgICBpZiBjb25zdHJhaW50cyBhbmQgbGVuKGNvbnN0cmFpbnRzKSA9PSAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJBIHNpbmdsZSBjb25zdHJhaW50IGlzIG5vdCBhbGxvd2VkIikKKyAgICAgICAgbXNnID0gIlR5cGVWYXIobmFtZSwgY29uc3RyYWludCwgLi4uKTogY29uc3RyYWludHMgbXVzdCBiZSB0eXBlcy4iCisgICAgICAgIHNlbGYuX19jb25zdHJhaW50c19fID0gdHVwbGUoX3R5cGVfY2hlY2sodCwgbXNnKSBmb3IgdCBpbiBjb25zdHJhaW50cykKKyAgICAgICAgaWYgYm91bmQ6CisgICAgICAgICAgICBzZWxmLl9fYm91bmRfXyA9IF90eXBlX2NoZWNrKGJvdW5kLCAiQm91bmQgbXVzdCBiZSBhIHR5cGUuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX19ib3VuZF9fID0gTm9uZQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9nZXRfdHlwZV92YXJzKHNlbGYsIHR2YXJzKToKKyAgICAgICAgaWYgc2VsZiBub3QgaW4gdHZhcnM6CisgICAgICAgICAgICB0dmFycy5hcHBlbmQoc2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX2NvdmFyaWFudF9fOgorICAgICAgICAgICAgcHJlZml4ID0gJysnCisgICAgICAgIGVsaWYgc2VsZi5fX2NvbnRyYXZhcmlhbnRfXzoKKyAgICAgICAgICAgIHByZWZpeCA9ICctJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gJ34nCisgICAgICAgIHJldHVybiBwcmVmaXggKyBzZWxmLl9fbmFtZV9fCisKKyAgICBkZWYgX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlR5cGUgdmFyaWFibGVzIGNhbm5vdCBiZSB1c2VkIHdpdGggaXNpbnN0YW5jZSgpLiIpCisKKyAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgY2xzKToKKyAgICAgICAgIyBUT0RPOiBNYWtlIHRoaXMgcmFpc2UgVHlwZUVycm9yIHRvbz8KKyAgICAgICAgaWYgY2xzIGlzIHNlbGY6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBjbHMgaXMgQW55OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgc2VsZi5fX2JvdW5kX18gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gaXNzdWJjbGFzcyhjbHMsIHNlbGYuX19ib3VuZF9fKQorICAgICAgICBpZiBzZWxmLl9fY29uc3RyYWludHNfXzoKKyAgICAgICAgICAgIHJldHVybiBhbnkoaXNzdWJjbGFzcyhjbHMsIGMpIGZvciBjIGluIHNlbGYuX19jb25zdHJhaW50c19fKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKKyMgU29tZSB1bmNvbnN0cmFpbmVkIHR5cGUgdmFyaWFibGVzLiAgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIGNvbnRhaW5lciB0eXBlcy4KKyMgKFRoZXNlIGFyZSBub3QgZm9yIGV4cG9ydC4pCitUID0gVHlwZVZhcignVCcpICAjIEFueSB0eXBlLgorS1QgPSBUeXBlVmFyKCdLVCcpICAjIEtleSB0eXBlLgorVlQgPSBUeXBlVmFyKCdWVCcpICAjIFZhbHVlIHR5cGUuCitUX2NvID0gVHlwZVZhcignVF9jbycsIGNvdmFyaWFudD1UcnVlKSAgIyBBbnkgdHlwZSBjb3ZhcmlhbnQgY29udGFpbmVycy4KK1ZfY28gPSBUeXBlVmFyKCdWX2NvJywgY292YXJpYW50PVRydWUpICAjIEFueSB0eXBlIGNvdmFyaWFudCBjb250YWluZXJzLgorVlRfY28gPSBUeXBlVmFyKCdWVF9jbycsIGNvdmFyaWFudD1UcnVlKSAgIyBWYWx1ZSB0eXBlIGNvdmFyaWFudCBjb250YWluZXJzLgorVF9jb250cmEgPSBUeXBlVmFyKCdUX2NvbnRyYScsIGNvbnRyYXZhcmlhbnQ9VHJ1ZSkgICMgRGl0dG8gY29udHJhdmFyaWFudC4KKworIyBBIHVzZWZ1bCB0eXBlIHZhcmlhYmxlIHdpdGggY29uc3RyYWludHMuICBUaGlzIHJlcHJlc2VudHMgc3RyaW5nIHR5cGVzLgorIyAoVGhpcyBvbmUgKmlzKiBmb3IgZXhwb3J0ISkKK0FueVN0ciA9IFR5cGVWYXIoJ0FueVN0cicsIGJ5dGVzLCBzdHIpCisKKworY2xhc3MgVW5pb25NZXRhKFR5cGluZ01ldGEpOgorICAgICIiIk1ldGFjbGFzcyBmb3IgVW5pb24uIiIiCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsIHBhcmFtZXRlcnM9Tm9uZSwgX3Jvb3Q9RmFsc2UpOgorICAgICAgICBpZiBwYXJhbWV0ZXJzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgX3Jvb3Q9X3Jvb3QpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcmFtZXRlcnMsIHR1cGxlKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgcGFyYW1ldGVycz08dHVwbGU+IikKKyAgICAgICAgIyBGbGF0dGVuIG91dCBVbmlvbltVbmlvblsuLi5dLCAuLi5dIGFuZCB0eXBlLWNoZWNrIG5vbi1VbmlvbiBhcmdzLgorICAgICAgICBwYXJhbXMgPSBbXQorICAgICAgICBtc2cgPSAiVW5pb25bYXJnLCAuLi5dOiBlYWNoIGFyZyBtdXN0IGJlIGEgdHlwZS4iCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHAsIFVuaW9uTWV0YSk6CisgICAgICAgICAgICAgICAgcGFyYW1zLmV4dGVuZChwLl9fdW5pb25fcGFyYW1zX18pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoX3R5cGVfY2hlY2socCwgbXNnKSkKKyAgICAgICAgIyBXZWVkIG91dCBzdHJpY3QgZHVwbGljYXRlcywgcHJlc2VydmluZyB0aGUgZmlyc3Qgb2YgZWFjaCBvY2N1cnJlbmNlLgorICAgICAgICBhbGxfcGFyYW1zID0gc2V0KHBhcmFtcykKKyAgICAgICAgaWYgbGVuKGFsbF9wYXJhbXMpIDwgbGVuKHBhcmFtcyk6CisgICAgICAgICAgICBuZXdfcGFyYW1zID0gW10KKyAgICAgICAgICAgIGZvciB0IGluIHBhcmFtczoKKyAgICAgICAgICAgICAgICBpZiB0IGluIGFsbF9wYXJhbXM6CisgICAgICAgICAgICAgICAgICAgIG5ld19wYXJhbXMuYXBwZW5kKHQpCisgICAgICAgICAgICAgICAgICAgIGFsbF9wYXJhbXMucmVtb3ZlKHQpCisgICAgICAgICAgICBwYXJhbXMgPSBuZXdfcGFyYW1zCisgICAgICAgICAgICBhc3NlcnQgbm90IGFsbF9wYXJhbXMsIGFsbF9wYXJhbXMKKyAgICAgICAgIyBXZWVkIG91dCBzdWJjbGFzc2VzLgorICAgICAgICAjIEUuZy4gVW5pb25baW50LCBFbXBsb3llZSwgTWFuYWdlcl0gPT0gVW5pb25baW50LCBFbXBsb3llZV0uCisgICAgICAgICMgSWYgQW55IG9yIG9iamVjdCBpcyBwcmVzZW50IGl0IHdpbGwgYmUgdGhlIHNvbGUgc3Vydml2b3IuCisgICAgICAgICMgSWYgYm90aCBBbnkgYW5kIG9iamVjdCBhcmUgcHJlc2VudCwgQW55IHdpbnMuCisgICAgICAgICMgTmV2ZXIgZGlzY2FyZCB0eXBlIHZhcmlhYmxlcywgZXhjZXB0IGFnYWluc3QgQW55LgorICAgICAgICAjIChJbiBwYXJ0aWN1bGFyLCBVbmlvbltzdHIsIEFueVN0cl0gIT0gQW55U3RyLikKKyAgICAgICAgYWxsX3BhcmFtcyA9IHNldChwYXJhbXMpCisgICAgICAgIGZvciB0MSBpbiBwYXJhbXM6CisgICAgICAgICAgICBpZiB0MSBpcyBBbnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEFueQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0MSwgVHlwZVZhcik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodDEsIF9UeXBlQWxpYXMpOgorICAgICAgICAgICAgICAgICMgX1R5cGVBbGlhcyBpcyBub3QgYSByZWFsIGNsYXNzLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0MSwgdHlwZSk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGNhbGxhYmxlKHQxKSAgIyBBIGNhbGxhYmxlIG1pZ2h0IHNuZWFrIHRocm91Z2guCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGFueShpc2luc3RhbmNlKHQyLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyh0MSwgdDIpCisgICAgICAgICAgICAgICAgICAgZm9yIHQyIGluIGFsbF9wYXJhbXMgLSB7dDF9IGlmIG5vdCBpc2luc3RhbmNlKHQyLCBUeXBlVmFyKSk6CisgICAgICAgICAgICAgICAgYWxsX3BhcmFtcy5yZW1vdmUodDEpCisgICAgICAgICMgSXQncyBub3QgYSB1bmlvbiBpZiB0aGVyZSdzIG9ubHkgb25lIHR5cGUgbGVmdC4KKyAgICAgICAgaWYgbGVuKGFsbF9wYXJhbXMpID09IDE6CisgICAgICAgICAgICByZXR1cm4gYWxsX3BhcmFtcy5wb3AoKQorICAgICAgICAjIENyZWF0ZSBhIG5ldyBjbGFzcyB3aXRoIHRoZXNlIHBhcmFtcy4KKyAgICAgICAgc2VsZiA9IHN1cGVyKCkuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCB7fSwgX3Jvb3Q9VHJ1ZSkKKyAgICAgICAgc2VsZi5fX3VuaW9uX3BhcmFtc19fID0gdHVwbGUodCBmb3IgdCBpbiBwYXJhbXMgaWYgdCBpbiBhbGxfcGFyYW1zKQorICAgICAgICBzZWxmLl9fdW5pb25fc2V0X3BhcmFtc19fID0gZnJvemVuc2V0KHNlbGYuX191bmlvbl9wYXJhbXNfXykKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfZXZhbF90eXBlKHNlbGYsIGdsb2JhbG5zLCBsb2NhbG5zKToKKyAgICAgICAgcCA9IHR1cGxlKF9ldmFsX3R5cGUodCwgZ2xvYmFsbnMsIGxvY2FsbnMpCisgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLl9fdW5pb25fcGFyYW1zX18pCisgICAgICAgIGlmIHAgPT0gc2VsZi5fX3VuaW9uX3BhcmFtc19fOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmLl9fbmFtZV9fLCBzZWxmLl9fYmFzZXNfXywge30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgX3Jvb3Q9VHJ1ZSkKKworICAgIGRlZiBfZ2V0X3R5cGVfdmFycyhzZWxmLCB0dmFycyk6CisgICAgICAgIGlmIHNlbGYuX191bmlvbl9wYXJhbXNfXzoKKyAgICAgICAgICAgIF9nZXRfdHlwZV92YXJzKHNlbGYuX191bmlvbl9wYXJhbXNfXywgdHZhcnMpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHIgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgaWYgc2VsZi5fX3VuaW9uX3BhcmFtc19fOgorICAgICAgICAgICAgciArPSAnWyVzXScgJSAoJywgJy5qb2luKF90eXBlX3JlcHIodCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLl9fdW5pb25fcGFyYW1zX18pKQorICAgICAgICByZXR1cm4gcgorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHBhcmFtZXRlcnMpOgorICAgICAgICBpZiBzZWxmLl9fdW5pb25fcGFyYW1zX18gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgIkNhbm5vdCBzdWJzY3JpcHQgYW4gZXhpc3RpbmcgVW5pb24uIFVzZSBVbmlvblt1LCB0XSBpbnN0ZWFkLiIpCisgICAgICAgIGlmIHBhcmFtZXRlcnMgPT0gKCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCB0YWtlIGEgVW5pb24gb2Ygbm8gdHlwZXMuIikKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGFyYW1ldGVycywgdHVwbGUpOgorICAgICAgICAgICAgcGFyYW1ldGVycyA9IChwYXJhbWV0ZXJzLCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuX19uYW1lX18sIHNlbGYuX19iYXNlc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdChzZWxmLl9fZGljdF9fKSwgcGFyYW1ldGVycywgX3Jvb3Q9VHJ1ZSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgVW5pb25NZXRhKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fX3VuaW9uX3NldF9wYXJhbXNfXyA9PSBvdGhlci5fX3VuaW9uX3NldF9wYXJhbXNfXworCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9fdW5pb25fc2V0X3BhcmFtc19fKQorCisgICAgZGVmIF9faW5zdGFuY2VjaGVja19fKHNlbGYsIG9iaik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5pb25zIGNhbm5vdCBiZSB1c2VkIHdpdGggaXNpbnN0YW5jZSgpLiIpCisKKyAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgY2xzKToKKyAgICAgICAgaWYgY2xzIGlzIEFueToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIHNlbGYuX191bmlvbl9wYXJhbXNfXyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoY2xzLCBVbmlvbk1ldGEpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShjbHMsIFVuaW9uTWV0YSk6CisgICAgICAgICAgICBpZiBjbHMuX191bmlvbl9wYXJhbXNfXyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIGFsbChpc3N1YmNsYXNzKGMsIHNlbGYpIGZvciBjIGluIChjbHMuX191bmlvbl9wYXJhbXNfXykpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShjbHMsIFR5cGVWYXIpOgorICAgICAgICAgICAgaWYgY2xzIGluIHNlbGYuX191bmlvbl9wYXJhbXNfXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgaWYgY2xzLl9fY29uc3RyYWludHNfXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gaXNzdWJjbGFzcyhVbmlvbltjbHMuX19jb25zdHJhaW50c19fXSwgc2VsZikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGFueShpc3N1YmNsYXNzKGNscywgdCkgZm9yIHQgaW4gc2VsZi5fX3VuaW9uX3BhcmFtc19fKQorCisKK2NsYXNzIFVuaW9uKEZpbmFsLCBtZXRhY2xhc3M9VW5pb25NZXRhLCBfcm9vdD1UcnVlKToKKyAgICAiIiJVbmlvbiB0eXBlOyBVbmlvbltYLCBZXSBtZWFucyBlaXRoZXIgWCBvciBZLgorCisgICAgVG8gZGVmaW5lIGEgdW5pb24sIHVzZSBlLmcuIFVuaW9uW2ludCwgc3RyXS4gIERldGFpbHM6CisKKyAgICAtIFRoZSBhcmd1bWVudHMgbXVzdCBiZSB0eXBlcyBhbmQgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUuCisKKyAgICAtIE5vbmUgYXMgYW4gYXJndW1lbnQgaXMgYSBzcGVjaWFsIGNhc2UgYW5kIGlzIHJlcGxhY2VkIGJ5CisgICAgICB0eXBlKE5vbmUpLgorCisgICAgLSBVbmlvbnMgb2YgdW5pb25zIGFyZSBmbGF0dGVuZWQsIGUuZy46OgorCisgICAgICAgIFVuaW9uW1VuaW9uW2ludCwgc3RyXSwgZmxvYXRdID09IFVuaW9uW2ludCwgc3RyLCBmbG9hdF0KKworICAgIC0gVW5pb25zIG9mIGEgc2luZ2xlIGFyZ3VtZW50IHZhbmlzaCwgZS5nLjo6CisKKyAgICAgICAgVW5pb25baW50XSA9PSBpbnQgICMgVGhlIGNvbnN0cnVjdG9yIGFjdHVhbGx5IHJldHVybnMgaW50CisKKyAgICAtIFJlZHVuZGFudCBhcmd1bWVudHMgYXJlIHNraXBwZWQsIGUuZy46OgorCisgICAgICAgIFVuaW9uW2ludCwgc3RyLCBpbnRdID09IFVuaW9uW2ludCwgc3RyXQorCisgICAgLSBXaGVuIGNvbXBhcmluZyB1bmlvbnMsIHRoZSBhcmd1bWVudCBvcmRlciBpcyBpZ25vcmVkLCBlLmcuOjoKKworICAgICAgICBVbmlvbltpbnQsIHN0cl0gPT0gVW5pb25bc3RyLCBpbnRdCisKKyAgICAtIFdoZW4gdHdvIGFyZ3VtZW50cyBoYXZlIGEgc3ViY2xhc3MgcmVsYXRpb25zaGlwLCB0aGUgbGVhc3QKKyAgICAgIGRlcml2ZWQgYXJndW1lbnQgaXMga2VwdCwgZS5nLjo6CisKKyAgICAgICAgY2xhc3MgRW1wbG95ZWU6IHBhc3MKKyAgICAgICAgY2xhc3MgTWFuYWdlcihFbXBsb3llZSk6IHBhc3MKKyAgICAgICAgVW5pb25baW50LCBFbXBsb3llZSwgTWFuYWdlcl0gPT0gVW5pb25baW50LCBFbXBsb3llZV0KKyAgICAgICAgVW5pb25bTWFuYWdlciwgaW50LCBFbXBsb3llZV0gPT0gVW5pb25baW50LCBFbXBsb3llZV0KKyAgICAgICAgVW5pb25bRW1wbG95ZWUsIE1hbmFnZXJdID09IEVtcGxveWVlCisKKyAgICAtIENvcm9sbGFyeTogaWYgQW55IGlzIHByZXNlbnQgaXQgaXMgdGhlIHNvbGUgc3Vydml2b3IsIGUuZy46OgorCisgICAgICAgIFVuaW9uW2ludCwgQW55XSA9PSBBbnkKKworICAgIC0gU2ltaWxhciBmb3Igb2JqZWN0OjoKKworICAgICAgICBVbmlvbltpbnQsIG9iamVjdF0gPT0gb2JqZWN0CisKKyAgICAtIFRvIGN1dCBhIHRpZTogVW5pb25bb2JqZWN0LCBBbnldID09IFVuaW9uW0FueSwgb2JqZWN0XSA9PSBBbnkuCisKKyAgICAtIFlvdSBjYW5ub3Qgc3ViY2xhc3Mgb3IgaW5zdGFudGlhdGUgYSB1bmlvbi4KKworICAgIC0gWW91IGNhbm5vdCB3cml0ZSBVbmlvbltYXVtZXSAod2hhdCB3b3VsZCBpdCBtZWFuPykuCisKKyAgICAtIFlvdSBjYW4gdXNlIE9wdGlvbmFsW1hdIGFzIGEgc2hvcnRoYW5kIGZvciBVbmlvbltYLCBOb25lXS4KKyAgICAiIiIKKworICAgICMgVW5zdWJzY3JpcHRlZCBVbmlvbiB0eXBlIGhhcyBwYXJhbXMgc2V0IHRvIE5vbmUuCisgICAgX191bmlvbl9wYXJhbXNfXyA9IE5vbmUKKyAgICBfX3VuaW9uX3NldF9wYXJhbXNfXyA9IE5vbmUKKworCitjbGFzcyBPcHRpb25hbE1ldGEoVHlwaW5nTWV0YSk6CisgICAgIiIiTWV0YWNsYXNzIGZvciBPcHRpb25hbC4iIiIKKworICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgX3Jvb3Q9RmFsc2UpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgX3Jvb3Q9X3Jvb3QpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgYXJnKToKKyAgICAgICAgYXJnID0gX3R5cGVfY2hlY2soYXJnLCAiT3B0aW9uYWxbdF0gcmVxdWlyZXMgYSBzaW5nbGUgdHlwZS4iKQorICAgICAgICByZXR1cm4gVW5pb25bYXJnLCB0eXBlKE5vbmUpXQorCisKK2NsYXNzIE9wdGlvbmFsKEZpbmFsLCBtZXRhY2xhc3M9T3B0aW9uYWxNZXRhLCBfcm9vdD1UcnVlKToKKyAgICAiIiJPcHRpb25hbCB0eXBlLgorCisgICAgT3B0aW9uYWxbWF0gaXMgZXF1aXZhbGVudCB0byBVbmlvbltYLCB0eXBlKE5vbmUpXS4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKworY2xhc3MgVHVwbGVNZXRhKFR5cGluZ01ldGEpOgorICAgICIiIk1ldGFjbGFzcyBmb3IgVHVwbGUuIiIiCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsIHBhcmFtZXRlcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICB1c2VfZWxsaXBzaXM9RmFsc2UsIF9yb290PUZhbHNlKToKKyAgICAgICAgc2VsZiA9IHN1cGVyKCkuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsIF9yb290PV9yb290KQorICAgICAgICBzZWxmLl9fdHVwbGVfcGFyYW1zX18gPSBwYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuX190dXBsZV91c2VfZWxsaXBzaXNfXyA9IHVzZV9lbGxpcHNpcworICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9nZXRfdHlwZV92YXJzKHNlbGYsIHR2YXJzKToKKyAgICAgICAgaWYgc2VsZi5fX3R1cGxlX3BhcmFtc19fOgorICAgICAgICAgICAgX2dldF90eXBlX3ZhcnMoc2VsZi5fX3R1cGxlX3BhcmFtc19fLCB0dmFycykKKworICAgIGRlZiBfZXZhbF90eXBlKHNlbGYsIGdsb2JhbG5zLCBsb2NhbG5zKToKKyAgICAgICAgdHAgPSBzZWxmLl9fdHVwbGVfcGFyYW1zX18KKyAgICAgICAgaWYgdHAgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHAgPSB0dXBsZShfZXZhbF90eXBlKHQsIGdsb2JhbG5zLCBsb2NhbG5zKSBmb3IgdCBpbiB0cCkKKyAgICAgICAgaWYgcCA9PSBzZWxmLl9fdHVwbGVfcGFyYW1zX186CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuX19uYW1lX18sIHNlbGYuX19iYXNlc19fLCB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBfcm9vdD1UcnVlKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGlmIHNlbGYuX190dXBsZV9wYXJhbXNfXyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBhcmFtcyA9IFtfdHlwZV9yZXByKHApIGZvciBwIGluIHNlbGYuX190dXBsZV9wYXJhbXNfX10KKyAgICAgICAgICAgIGlmIHNlbGYuX190dXBsZV91c2VfZWxsaXBzaXNfXzoKKyAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCcuLi4nKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtczoKKyAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCcoKScpCisgICAgICAgICAgICByICs9ICdbJXNdJyAlICgKKyAgICAgICAgICAgICAgICAnLCAnLmpvaW4ocGFyYW1zKSkKKyAgICAgICAgcmV0dXJuIHIKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBwYXJhbWV0ZXJzKToKKyAgICAgICAgaWYgc2VsZi5fX3R1cGxlX3BhcmFtc19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgcmUtcGFyYW1ldGVyaXplICVyIiAlIChzZWxmLCkpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcmFtZXRlcnMsIHR1cGxlKToKKyAgICAgICAgICAgIHBhcmFtZXRlcnMgPSAocGFyYW1ldGVycywpCisgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJzKSA9PSAyIGFuZCBwYXJhbWV0ZXJzWzFdID09IEVsbGlwc2lzOgorICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNbOjFdCisgICAgICAgICAgICB1c2VfZWxsaXBzaXMgPSBUcnVlCisgICAgICAgICAgICBtc2cgPSAiVHVwbGVbdCwgLi4uXTogdCBtdXN0IGJlIGEgdHlwZS4iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VfZWxsaXBzaXMgPSBGYWxzZQorICAgICAgICAgICAgbXNnID0gIlR1cGxlW3QwLCB0MSwgLi4uXTogZWFjaCB0IG11c3QgYmUgYSB0eXBlLiIKKyAgICAgICAgcGFyYW1ldGVycyA9IHR1cGxlKF90eXBlX2NoZWNrKHAsIG1zZykgZm9yIHAgaW4gcGFyYW1ldGVycykKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuX19uYW1lX18sIHNlbGYuX19iYXNlc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdChzZWxmLl9fZGljdF9fKSwgcGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9lbGxpcHNpcz11c2VfZWxsaXBzaXMsIF9yb290PVRydWUpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFR1cGxlTWV0YSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fdHVwbGVfcGFyYW1zX18gPT0gb3RoZXIuX190dXBsZV9wYXJhbXNfXyBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9fdHVwbGVfdXNlX2VsbGlwc2lzX18gPT0gb3RoZXIuX190dXBsZV91c2VfZWxsaXBzaXNfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fX3R1cGxlX3BhcmFtc19fKQorCisgICAgZGVmIF9faW5zdGFuY2VjaGVja19fKHNlbGYsIG9iaik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVHVwbGVzIGNhbm5vdCBiZSB1c2VkIHdpdGggaXNpbnN0YW5jZSgpLiIpCisKKyAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgY2xzKToKKyAgICAgICAgaWYgY2xzIGlzIEFueToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGNscywgdHlwZSk6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX3N1YmNsYXNzY2hlY2tfXyhjbHMpICAjIFRvIFR5cGVFcnJvci4KKyAgICAgICAgaWYgaXNzdWJjbGFzcyhjbHMsIHR1cGxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlICAjIFNwZWNpYWwgY2FzZS4KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2xzLCBUdXBsZU1ldGEpOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19zdWJjbGFzc2NoZWNrX18oY2xzKSAgIyBGYWxzZS4KKyAgICAgICAgaWYgc2VsZi5fX3R1cGxlX3BhcmFtc19fIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBjbHMuX190dXBsZV9wYXJhbXNfXyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlICAjID8/PworICAgICAgICBpZiBjbHMuX190dXBsZV91c2VfZWxsaXBzaXNfXyAhPSBzZWxmLl9fdHVwbGVfdXNlX2VsbGlwc2lzX186CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIyBDb3ZhcmlhbmNlLgorICAgICAgICByZXR1cm4gKGxlbihzZWxmLl9fdHVwbGVfcGFyYW1zX18pID09IGxlbihjbHMuX190dXBsZV9wYXJhbXNfXykgYW5kCisgICAgICAgICAgICAgICAgYWxsKGlzc3ViY2xhc3MoeCwgcCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHgsIHAgaW4gemlwKGNscy5fX3R1cGxlX3BhcmFtc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3R1cGxlX3BhcmFtc19fKSkpCisKKworY2xhc3MgVHVwbGUoRmluYWwsIG1ldGFjbGFzcz1UdXBsZU1ldGEsIF9yb290PVRydWUpOgorICAgICIiIlR1cGxlIHR5cGU7IFR1cGxlW1gsIFldIGlzIHRoZSBjcm9zcy1wcm9kdWN0IHR5cGUgb2YgWCBhbmQgWS4KKworICAgIEV4YW1wbGU6IFR1cGxlW1QxLCBUMl0gaXMgYSB0dXBsZSBvZiB0d28gZWxlbWVudHMgY29ycmVzcG9uZGluZworICAgIHRvIHR5cGUgdmFyaWFibGVzIFQxIGFuZCBUMi4gIFR1cGxlW2ludCwgZmxvYXQsIHN0cl0gaXMgYSB0dXBsZQorICAgIG9mIGFuIGludCwgYSBmbG9hdCBhbmQgYSBzdHJpbmcuCisKKyAgICBUbyBzcGVjaWZ5IGEgdmFyaWFibGUtbGVuZ3RoIHR1cGxlIG9mIGhvbW9nZW5lb3VzIHR5cGUsIHVzZSBTZXF1ZW5jZVtUXS4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKworY2xhc3MgQ2FsbGFibGVNZXRhKFR5cGluZ01ldGEpOgorICAgICIiIk1ldGFjbGFzcyBmb3IgQ2FsbGFibGUuIiIiCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsIF9yb290PUZhbHNlLAorICAgICAgICAgICAgICAgIGFyZ3M9Tm9uZSwgcmVzdWx0PU5vbmUpOgorICAgICAgICBpZiBhcmdzIGlzIE5vbmUgYW5kIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgcGFzcyAgIyBNdXN0IGJlICdjbGFzcyBDYWxsYWJsZScuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBhcmdzIGlzIG5vdCBFbGxpcHNpczoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmdzLCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYWxsYWJsZVthcmdzLCByZXN1bHRdOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJncyBtdXN0IGJlIGEgbGlzdC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIEdvdCAlLjEwMHIuIiAlIChhcmdzLCkpCisgICAgICAgICAgICAgICAgbXNnID0gIkNhbGxhYmxlW1thcmcsIC4uLl0sIHJlc3VsdF06IGVhY2ggYXJnIG11c3QgYmUgYSB0eXBlLiIKKyAgICAgICAgICAgICAgICBhcmdzID0gdHVwbGUoX3R5cGVfY2hlY2soYXJnLCBtc2cpIGZvciBhcmcgaW4gYXJncykKKyAgICAgICAgICAgIG1zZyA9ICJDYWxsYWJsZVthcmdzLCByZXN1bHRdOiByZXN1bHQgbXVzdCBiZSBhIHR5cGUuIgorICAgICAgICAgICAgcmVzdWx0ID0gX3R5cGVfY2hlY2socmVzdWx0LCBtc2cpCisgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCBfcm9vdD1fcm9vdCkKKyAgICAgICAgc2VsZi5fX2FyZ3NfXyA9IGFyZ3MKKyAgICAgICAgc2VsZi5fX3Jlc3VsdF9fID0gcmVzdWx0CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX2dldF90eXBlX3ZhcnMoc2VsZiwgdHZhcnMpOgorICAgICAgICBpZiBzZWxmLl9fYXJnc19fOgorICAgICAgICAgICAgX2dldF90eXBlX3ZhcnMoc2VsZi5fX2FyZ3NfXywgdHZhcnMpCisKKyAgICBkZWYgX2V2YWxfdHlwZShzZWxmLCBnbG9iYWxucywgbG9jYWxucyk6CisgICAgICAgIGlmIHNlbGYuX19hcmdzX18gaXMgTm9uZSBhbmQgc2VsZi5fX3Jlc3VsdF9fIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBpZiBzZWxmLl9fYXJnc19fIGlzIEVsbGlwc2lzOgorICAgICAgICAgICAgYXJncyA9IHNlbGYuX19hcmdzX18KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3MgPSBbX2V2YWxfdHlwZSh0LCBnbG9iYWxucywgbG9jYWxucykgZm9yIHQgaW4gc2VsZi5fX2FyZ3NfX10KKyAgICAgICAgcmVzdWx0ID0gX2V2YWxfdHlwZShzZWxmLl9fcmVzdWx0X18sIGdsb2JhbG5zLCBsb2NhbG5zKQorICAgICAgICBpZiBhcmdzID09IHNlbGYuX19hcmdzX18gYW5kIHJlc3VsdCA9PSBzZWxmLl9fcmVzdWx0X186CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuX19uYW1lX18sIHNlbGYuX19iYXNlc19fLCB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPWFyZ3MsIHJlc3VsdD1yZXN1bHQsIF9yb290PVRydWUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHIgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgaWYgc2VsZi5fX2FyZ3NfXyBpcyBub3QgTm9uZSBvciBzZWxmLl9fcmVzdWx0X18gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9fYXJnc19fIGlzIEVsbGlwc2lzOgorICAgICAgICAgICAgICAgIGFyZ3NfciA9ICcuLi4nCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ3NfciA9ICdbJXNdJyAlICcsICcuam9pbihfdHlwZV9yZXByKHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIHNlbGYuX19hcmdzX18pCisgICAgICAgICAgICByICs9ICdbJXMsICVzXScgJSAoYXJnc19yLCBfdHlwZV9yZXByKHNlbGYuX19yZXN1bHRfXykpCisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgcGFyYW1ldGVycyk6CisgICAgICAgIGlmIHNlbGYuX19hcmdzX18gaXMgbm90IE5vbmUgb3Igc2VsZi5fX3Jlc3VsdF9fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUaGlzIENhbGxhYmxlIHR5cGUgaXMgYWxyZWFkeSBwYXJhbWV0ZXJpemVkLiIpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcmFtZXRlcnMsIHR1cGxlKSBvciBsZW4ocGFyYW1ldGVycykgIT0gMjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAiQ2FsbGFibGUgbXVzdCBiZSB1c2VkIGFzIENhbGxhYmxlW1thcmcsIC4uLl0sIHJlc3VsdF0uIikKKyAgICAgICAgYXJncywgcmVzdWx0ID0gcGFyYW1ldGVycworICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5fX25hbWVfXywgc2VsZi5fX2Jhc2VzX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KHNlbGYuX19kaWN0X18pLCBfcm9vdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz1hcmdzLCByZXN1bHQ9cmVzdWx0KQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBDYWxsYWJsZU1ldGEpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiAoc2VsZi5fX2FyZ3NfXyA9PSBvdGhlci5fX2FyZ3NfXyBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9fcmVzdWx0X18gPT0gb3RoZXIuX19yZXN1bHRfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fX2FyZ3NfXykgXiBoYXNoKHNlbGYuX19yZXN1bHRfXykKKworICAgIGRlZiBfX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBvYmopOgorICAgICAgICAjIEZvciB1bnBhcmFtZXRyaXplZCBDYWxsYWJsZSB3ZSBhbGxvdyB0aGlzLCBiZWNhdXNlCisgICAgICAgICMgdHlwaW5nLkNhbGxhYmxlIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvCisgICAgICAgICMgY29sbGVjdGlvbnMuYWJjLkNhbGxhYmxlLgorICAgICAgICBpZiBzZWxmLl9fYXJnc19fIGlzIE5vbmUgYW5kIHNlbGYuX19yZXN1bHRfXyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9uc19hYmMuQ2FsbGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbGxhYmxlW10gY2Fubm90IGJlIHVzZWQgd2l0aCBpc2luc3RhbmNlKCkuIikKKworICAgIGRlZiBfX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBjbHMpOgorICAgICAgICBpZiBjbHMgaXMgQW55OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2xzLCBDYWxsYWJsZU1ldGEpOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19zdWJjbGFzc2NoZWNrX18oY2xzKQorICAgICAgICBpZiBzZWxmLl9fYXJnc19fIGlzIE5vbmUgYW5kIHNlbGYuX19yZXN1bHRfXyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBXZSdyZSBub3QgZG9pbmcgY292YXJpYW5jZSBvciBjb250cmF2YXJpYW5jZSAtLSB0aGlzIGlzICppbnZhcmlhbmNlKi4KKyAgICAgICAgcmV0dXJuIHNlbGYgPT0gY2xzCisKKworY2xhc3MgQ2FsbGFibGUoRmluYWwsIG1ldGFjbGFzcz1DYWxsYWJsZU1ldGEsIF9yb290PVRydWUpOgorICAgICIiIkNhbGxhYmxlIHR5cGU7IENhbGxhYmxlW1tpbnRdLCBzdHJdIGlzIGEgZnVuY3Rpb24gb2YgKGludCkgLT4gc3RyLgorCisgICAgVGhlIHN1YnNjcmlwdGlvbiBzeW50YXggbXVzdCBhbHdheXMgYmUgdXNlZCB3aXRoIGV4YWN0bHkgdHdvCisgICAgdmFsdWVzOiB0aGUgYXJndW1lbnQgbGlzdCBhbmQgdGhlIHJldHVybiB0eXBlLiAgVGhlIGFyZ3VtZW50IGxpc3QKKyAgICBtdXN0IGJlIGEgbGlzdCBvZiB0eXBlczsgdGhlIHJldHVybiB0eXBlIG11c3QgYmUgYSBzaW5nbGUgdHlwZS4KKworICAgIFRoZXJlIGlzIG5vIHN5bnRheCB0byBpbmRpY2F0ZSBvcHRpb25hbCBvciBrZXl3b3JkIGFyZ3VtZW50cywKKyAgICBzdWNoIGZ1bmN0aW9uIHR5cGVzIGFyZSByYXJlbHkgdXNlZCBhcyBjYWxsYmFjayB0eXBlcy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKworZGVmIF9nb3JnKGEpOgorICAgICIiIlJldHVybiB0aGUgZmFydGhlc3Qgb3JpZ2luIG9mIGEgZ2VuZXJpYyBjbGFzcy4iIiIKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShhLCBHZW5lcmljTWV0YSkKKyAgICB3aGlsZSBhLl9fb3JpZ2luX18gaXMgbm90IE5vbmU6CisgICAgICAgIGEgPSBhLl9fb3JpZ2luX18KKyAgICByZXR1cm4gYQorCisKK2RlZiBfZ2VxdihhLCBiKToKKyAgICAiIiJSZXR1cm4gd2hldGhlciB0d28gZ2VuZXJpYyBjbGFzc2VzIGFyZSBlcXVpdmFsZW50LgorCisgICAgVGhlIGludGVudGlvbiBpcyB0byBjb25zaWRlciBnZW5lcmljIGNsYXNzIFggYW5kIGFueSBvZiBpdHMKKyAgICBwYXJhbWV0ZXJpemVkIGZvcm1zIChYW1RdLCBYW2ludF0sIGV0Yy4pICBhcyBlcXVpdmFsZW50LgorCisgICAgSG93ZXZlciwgWCBpcyBub3QgZXF1aXZhbGVudCB0byBhIHN1YmNsYXNzIG9mIFguCisKKyAgICBUaGUgcmVsYXRpb24gaXMgcmVmbGV4aXZlLCBzeW1tZXRyaWMgYW5kIHRyYW5zaXRpdmUuCisgICAgIiIiCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYSwgR2VuZXJpY01ldGEpIGFuZCBpc2luc3RhbmNlKGIsIEdlbmVyaWNNZXRhKQorICAgICMgUmVkdWNlIGVhY2ggdG8gaXRzIG9yaWdpbi4KKyAgICByZXR1cm4gX2dvcmcoYSkgaXMgX2dvcmcoYikKKworCitkZWYgX25leHRfaW5fbXJvKGNscyk6CisgICAgIiIiSGVscGVyIGZvciBHZW5lcmljLl9fbmV3X18uCisKKyAgICBSZXR1cm5zIHRoZSBjbGFzcyBhZnRlciB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIEdlbmVyaWMgb3IKKyAgICBHZW5lcmljWy4uLl0gaW4gY2xzLl9fbXJvX18uCisgICAgIiIiCisgICAgbmV4dF9pbl9tcm8gPSBvYmplY3QKKyAgICAjIExvb2sgZm9yIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgR2VuZXJpYyBvciBHZW5lcmljWy4uLl0uCisgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKGNscy5fX21yb19fWzotMV0pOgorICAgICAgICBpZiBpc2luc3RhbmNlKGMsIEdlbmVyaWNNZXRhKSBhbmQgX2dvcmcoYykgaXMgR2VuZXJpYzoKKyAgICAgICAgICAgIG5leHRfaW5fbXJvID0gY2xzLl9fbXJvX19baSsxXQorICAgIHJldHVybiBuZXh0X2luX21ybworCisKK2NsYXNzIEdlbmVyaWNNZXRhKFR5cGluZ01ldGEsIGFiYy5BQkNNZXRhKToKKyAgICAiIiJNZXRhY2xhc3MgZm9yIGdlbmVyaWMgdHlwZXMuIiIiCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsCisgICAgICAgICAgICAgICAgdHZhcnM9Tm9uZSwgYXJncz1Ob25lLCBvcmlnaW49Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCBfcm9vdD1UcnVlKQorCisgICAgICAgIGlmIHR2YXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBDYWxsZWQgZnJvbSBfX2dldGl0ZW1fXygpIGJlbG93LgorICAgICAgICAgICAgYXNzZXJ0IG9yaWdpbiBpcyBub3QgTm9uZQorICAgICAgICAgICAgYXNzZXJ0IGFsbChpc2luc3RhbmNlKHQsIFR5cGVWYXIpIGZvciB0IGluIHR2YXJzKSwgdHZhcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQ2FsbGVkIGZyb20gY2xhc3Mgc3RhdGVtZW50LgorICAgICAgICAgICAgYXNzZXJ0IHR2YXJzIGlzIE5vbmUsIHR2YXJzCisgICAgICAgICAgICBhc3NlcnQgYXJncyBpcyBOb25lLCBhcmdzCisgICAgICAgICAgICBhc3NlcnQgb3JpZ2luIGlzIE5vbmUsIG9yaWdpbgorCisgICAgICAgICAgICAjIEdldCB0aGUgZnVsbCBzZXQgb2YgdHZhcnMgZnJvbSB0aGUgYmFzZXMuCisgICAgICAgICAgICB0dmFycyA9IF90eXBlX3ZhcnMoYmFzZXMpCisgICAgICAgICAgICAjIExvb2sgZm9yIEdlbmVyaWNbVDEsIC4uLiwgVG5dLgorICAgICAgICAgICAgIyBJZiBmb3VuZCwgdHZhcnMgbXVzdCBiZSBhIHN1YnNldCBvZiBpdC4KKyAgICAgICAgICAgICMgSWYgbm90IGZvdW5kLCB0dmFycyBpcyBpdC4KKyAgICAgICAgICAgICMgQWxzbyBjaGVjayBmb3IgYW5kIHJlamVjdCBwbGFpbiBHZW5lcmljLAorICAgICAgICAgICAgIyBhbmQgcmVqZWN0IG11bHRpcGxlIEdlbmVyaWNbLi4uXS4KKyAgICAgICAgICAgIGd2YXJzID0gTm9uZQorICAgICAgICAgICAgZm9yIGJhc2UgaW4gYmFzZXM6CisgICAgICAgICAgICAgICAgaWYgYmFzZSBpcyBHZW5lcmljOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBpbmhlcml0IGZyb20gcGxhaW4gR2VuZXJpYyIpCisgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UoYmFzZSwgR2VuZXJpY01ldGEpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS5fX29yaWdpbl9fIGlzIEdlbmVyaWMpOgorICAgICAgICAgICAgICAgICAgICBpZiBndmFycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGluaGVyaXQgZnJvbSBHZW5lcmljWy4uLl0gbXVsdGlwbGUgdHlwZXMuIikKKyAgICAgICAgICAgICAgICAgICAgZ3ZhcnMgPSBiYXNlLl9fcGFyYW1ldGVyc19fCisgICAgICAgICAgICBpZiBndmFycyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGd2YXJzID0gdHZhcnMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHZhcnNldCA9IHNldCh0dmFycykKKyAgICAgICAgICAgICAgICBndmFyc2V0ID0gc2V0KGd2YXJzKQorICAgICAgICAgICAgICAgIGlmIG5vdCB0dmFyc2V0IDw9IGd2YXJzZXQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJTb21lIHR5cGUgdmFyaWFibGVzICglcykgIgorICAgICAgICAgICAgICAgICAgICAgICAgImFyZSBub3QgbGlzdGVkIGluIEdlbmVyaWNbJXNdIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoIiwgIi5qb2luKHN0cih0KSBmb3IgdCBpbiB0dmFycyBpZiB0IG5vdCBpbiBndmFyc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiLCAiLmpvaW4oc3RyKGcpIGZvciBnIGluIGd2YXJzKSkpCisgICAgICAgICAgICAgICAgdHZhcnMgPSBndmFycworCisgICAgICAgIHNlbGYuX19wYXJhbWV0ZXJzX18gPSB0dmFycworICAgICAgICBzZWxmLl9fYXJnc19fID0gYXJncworICAgICAgICBzZWxmLl9fb3JpZ2luX18gPSBvcmlnaW4KKyAgICAgICAgc2VsZi5fX2V4dHJhX18gPSBleHRyYQorICAgICAgICAjIFNwZWVkIGhhY2sgKGh0dHBzOi8vZ2l0aHViLmNvbS9weXRob24vdHlwaW5nL2lzc3Vlcy8xOTYpLgorICAgICAgICBzZWxmLl9fbmV4dF9pbl9tcm9fXyA9IF9uZXh0X2luX21ybyhzZWxmKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9nZXRfdHlwZV92YXJzKHNlbGYsIHR2YXJzKToKKyAgICAgICAgaWYgc2VsZi5fX29yaWdpbl9fIGFuZCBzZWxmLl9fcGFyYW1ldGVyc19fOgorICAgICAgICAgICAgX2dldF90eXBlX3ZhcnMoc2VsZi5fX3BhcmFtZXRlcnNfXywgdHZhcnMpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX19vcmlnaW5fXyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHIgPSByZXByKHNlbGYuX19vcmlnaW5fXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHIgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgaWYgc2VsZi5fX2FyZ3NfXzoKKyAgICAgICAgICAgIHIgKz0gJ1slc10nICUgKAorICAgICAgICAgICAgICAgICcsICcuam9pbihfdHlwZV9yZXByKHApIGZvciBwIGluIHNlbGYuX19hcmdzX18pKQorICAgICAgICBpZiBzZWxmLl9fcGFyYW1ldGVyc19fOgorICAgICAgICAgICAgciArPSAnPCVzPicgJSAoCisgICAgICAgICAgICAgICAgJywgJy5qb2luKF90eXBlX3JlcHIocCkgZm9yIHAgaW4gc2VsZi5fX3BhcmFtZXRlcnNfXykpCisgICAgICAgIHJldHVybiByCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEdlbmVyaWNNZXRhKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBpZiBzZWxmLl9fb3JpZ2luX18gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuX19vcmlnaW5fXyBpcyBvdGhlci5fX29yaWdpbl9fIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9fYXJnc19fID09IG90aGVyLl9fYXJnc19fIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9fcGFyYW1ldGVyc19fID09IG90aGVyLl9fcGFyYW1ldGVyc19fKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHNlbGYuX19uYW1lX18sIHNlbGYuX19wYXJhbWV0ZXJzX18pKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHBhcmFtcyk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcmFtcywgdHVwbGUpOgorICAgICAgICAgICAgcGFyYW1zID0gKHBhcmFtcywpCisgICAgICAgIGlmIG5vdCBwYXJhbXM6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgIlBhcmFtZXRlciBsaXN0IHRvICVzWy4uLl0gY2Fubm90IGJlIGVtcHR5IiAlIF9xdWFsbmFtZShzZWxmKSkKKyAgICAgICAgbXNnID0gIlBhcmFtZXRlcnMgdG8gZ2VuZXJpYyB0eXBlcyBtdXN0IGJlIHR5cGVzLiIKKyAgICAgICAgcGFyYW1zID0gdHVwbGUoX3R5cGVfY2hlY2socCwgbXNnKSBmb3IgcCBpbiBwYXJhbXMpCisgICAgICAgIGlmIHNlbGYgaXMgR2VuZXJpYzoKKyAgICAgICAgICAgICMgR2VuZXJpYyBjYW4gb25seSBiZSBzdWJzY3JpcHRlZCB3aXRoIHVuaXF1ZSB0eXBlIHZhcmlhYmxlcy4KKyAgICAgICAgICAgIGlmIG5vdCBhbGwoaXNpbnN0YW5jZShwLCBUeXBlVmFyKSBmb3IgcCBpbiBwYXJhbXMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIlBhcmFtZXRlcnMgdG8gR2VuZXJpY1suLi5dIG11c3QgYWxsIGJlIHR5cGUgdmFyaWFibGVzIikKKyAgICAgICAgICAgIGlmIGxlbihzZXQocGFyYW1zKSkgIT0gbGVuKHBhcmFtcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAiUGFyYW1ldGVycyB0byBHZW5lcmljWy4uLl0gbXVzdCBhbGwgYmUgdW5pcXVlIikKKyAgICAgICAgICAgIHR2YXJzID0gcGFyYW1zCisgICAgICAgICAgICBhcmdzID0gTm9uZQorICAgICAgICBlbGlmIHNlbGYgaXMgX1Byb3RvY29sOgorICAgICAgICAgICAgIyBfUHJvdG9jb2wgaXMgaW50ZXJuYWwsIGRvbid0IGNoZWNrIGFueXRoaW5nLgorICAgICAgICAgICAgdHZhcnMgPSBwYXJhbXMKKyAgICAgICAgICAgIGFyZ3MgPSBOb25lCisgICAgICAgIGVsaWYgc2VsZi5fX29yaWdpbl9fIGluIChHZW5lcmljLCBfUHJvdG9jb2wpOgorICAgICAgICAgICAgIyBDYW4ndCBzdWJzY3JpcHQgR2VuZXJpY1suLi5dIG9yIF9Qcm90b2NvbFsuLi5dLgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3Qgc3Vic2NyaXB0IGFscmVhZHktc3Vic2NyaXB0ZWQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHNlbGYpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTdWJzY3JpcHRpbmcgYSByZWd1bGFyIEdlbmVyaWMgc3ViY2xhc3MuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fX3BhcmFtZXRlcnNfXzoKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzIGlzIG5vdCBhIGdlbmVyaWMgY2xhc3MiICUgcmVwcihzZWxmKSkKKyAgICAgICAgICAgIGFsZW4gPSBsZW4ocGFyYW1zKQorICAgICAgICAgICAgZWxlbiA9IGxlbihzZWxmLl9fcGFyYW1ldGVyc19fKQorICAgICAgICAgICAgaWYgYWxlbiAhPSBlbGVuOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIlRvbyAlcyBwYXJhbWV0ZXJzIGZvciAlczsgYWN0dWFsICVzLCBleHBlY3RlZCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAoIm1hbnkiIGlmIGFsZW4gPiBlbGVuIGVsc2UgImZldyIsIHJlcHIoc2VsZiksIGFsZW4sIGVsZW4pKQorICAgICAgICAgICAgdHZhcnMgPSBfdHlwZV92YXJzKHBhcmFtcykKKyAgICAgICAgICAgIGFyZ3MgPSBwYXJhbXMKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZiwpICsgc2VsZi5fX2Jhc2VzX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KHNlbGYuX19kaWN0X18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZhcnM9dHZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPWFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPXNlbGYuX19leHRyYV9fKQorCisgICAgZGVmIF9faW5zdGFuY2VjaGVja19fKHNlbGYsIGluc3RhbmNlKToKKyAgICAgICAgIyBTaW5jZSB3ZSBleHRlbmQgQUJDLl9fc3ViY2xhc3NjaGVja19fIGFuZAorICAgICAgICAjIEFCQy5fX2luc3RhbmNlY2hlY2tfXyBpbmxpbmVzIHRoZSBjYWNoZSBjaGVja2luZyBkb25lIGJ5IHRoZQorICAgICAgICAjIGxhdHRlciwgd2UgbXVzdCBleHRlbmQgX19pbnN0YW5jZWNoZWNrX18gdG9vLiBGb3Igc2ltcGxpY2l0eQorICAgICAgICAjIHdlIGp1c3Qgc2tpcCB0aGUgY2FjaGUgY2hlY2sgLS0gaW5zdGFuY2UgY2hlY2tzIGZvciBnZW5lcmljCisgICAgICAgICMgY2xhc3NlcyBhcmUgc3VwcG9zZWQgdG8gYmUgcmFyZSBhbnl3YXlzLgorICAgICAgICByZXR1cm4gc2VsZi5fX3N1YmNsYXNzY2hlY2tfXyhpbnN0YW5jZS5fX2NsYXNzX18pCisKKyAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgY2xzKToKKyAgICAgICAgaWYgY2xzIGlzIEFueToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY2xzLCBHZW5lcmljTWV0YSk6CisgICAgICAgICAgICAjIEZvciBhIGNsYXNzIEMoR2VuZXJpY1tUXSkgd2hlcmUgVCBpcyBjby12YXJpYW50LAorICAgICAgICAgICAgIyBDW1hdIGlzIGEgc3ViY2xhc3Mgb2YgQ1tZXSBpZmYgWCBpcyBhIHN1YmNsYXNzIG9mIFkuCisgICAgICAgICAgICBvcmlnaW4gPSBzZWxmLl9fb3JpZ2luX18KKyAgICAgICAgICAgIGlmIG9yaWdpbiBpcyBub3QgTm9uZSBhbmQgb3JpZ2luIGlzIGNscy5fX29yaWdpbl9fOgorICAgICAgICAgICAgICAgIGFzc2VydCBsZW4oc2VsZi5fX2FyZ3NfXykgPT0gbGVuKG9yaWdpbi5fX3BhcmFtZXRlcnNfXykKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGNscy5fX2FyZ3NfXykgPT0gbGVuKG9yaWdpbi5fX3BhcmFtZXRlcnNfXykKKyAgICAgICAgICAgICAgICBmb3IgcF9zZWxmLCBwX2NscywgcF9vcmlnaW4gaW4gemlwKHNlbGYuX19hcmdzX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMuX19hcmdzX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4uX19wYXJhbWV0ZXJzX18pOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBfb3JpZ2luLCBUeXBlVmFyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBfb3JpZ2luLl9fY292YXJpYW50X186CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDb3ZhcmlhbnQgLS0gcF9jbHMgbXVzdCBiZSBhIHN1YmNsYXNzIG9mIHBfc2VsZi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhwX2NscywgcF9zZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgcF9vcmlnaW4uX19jb250cmF2YXJpYW50X186CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDb250cmF2YXJpYW50LiAgSSB0aGluayBpdCdzIHRoZSBvcHBvc2l0ZS4gOi0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MocF9zZWxmLCBwX2Nscyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW52YXJpYW50IC0tIHBfY2xzIGFuZCBwX3NlbGYgbXVzdCBlcXVhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwX3NlbGYgIT0gcF9jbHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAjIElmIHRoZSBvcmlnaW4ncyBwYXJhbWV0ZXIgaXMgbm90IGEgdHlwZXZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW5zaXN0IG9uIGludmFyaWFuY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwX3NlbGYgIT0gcF9jbHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICMgSWYgd2UgYnJlYWsgb3V0IG9mIHRoZSBsb29wLCB0aGUgc3VwZXJjbGFzcyBnZXRzIGEgY2hhbmNlLgorICAgICAgICBpZiBzdXBlcigpLl9fc3ViY2xhc3NjaGVja19fKGNscyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9fZXh0cmFfXyBpcyBOb25lIG9yIGlzaW5zdGFuY2UoY2xzLCBHZW5lcmljTWV0YSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzc3ViY2xhc3MoY2xzLCBzZWxmLl9fZXh0cmFfXykKKworCisjIFByZXZlbnQgY2hlY2tzIGZvciBHZW5lcmljIHRvIGNyYXNoIHdoZW4gZGVmaW5pbmcgR2VuZXJpYy4KK0dlbmVyaWMgPSBOb25lCisKKworY2xhc3MgR2VuZXJpYyhtZXRhY2xhc3M9R2VuZXJpY01ldGEpOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGdlbmVyaWMgdHlwZXMuCisKKyAgICBBIGdlbmVyaWMgdHlwZSBpcyB0eXBpY2FsbHkgZGVjbGFyZWQgYnkgaW5oZXJpdGluZyBmcm9tIGFuCisgICAgaW5zdGFudGlhdGlvbiBvZiB0aGlzIGNsYXNzIHdpdGggb25lIG9yIG1vcmUgdHlwZSB2YXJpYWJsZXMuCisgICAgRm9yIGV4YW1wbGUsIGEgZ2VuZXJpYyBtYXBwaW5nIHR5cGUgbWlnaHQgYmUgZGVmaW5lZCBhczo6CisKKyAgICAgIGNsYXNzIE1hcHBpbmcoR2VuZXJpY1tLVCwgVlRdKToKKyAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5OiBLVCkgLT4gVlQ6CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICMgRXRjLgorCisgICAgVGhpcyBjbGFzcyBjYW4gdGhlbiBiZSB1c2VkIGFzIGZvbGxvd3M6OgorCisgICAgICBkZWYgbG9va3VwX25hbWUobWFwcGluZzogTWFwcGluZ1tLVCwgVlRdLCBrZXk6IEtULCBkZWZhdWx0OiBWVCkgLT4gVlQ6CisgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICByZXR1cm4gbWFwcGluZ1trZXldCisgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGlmIGNscy5fX29yaWdpbl9fIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gY2xzLl9fbmV4dF9pbl9tcm9fXy5fX25ld19fKGNscykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9yaWdpbiA9IF9nb3JnKGNscykKKyAgICAgICAgICAgIG9iaiA9IGNscy5fX25leHRfaW5fbXJvX18uX19uZXdfXyhvcmlnaW4pCisgICAgICAgICAgICBvYmouX19pbml0X18oKmFyZ3MsICoqa3dkcykKKyAgICAgICAgICAgIHJldHVybiBvYmoKKworCitkZWYgY2FzdCh0eXAsIHZhbCk6CisgICAgIiIiQ2FzdCBhIHZhbHVlIHRvIGEgdHlwZS4KKworICAgIFRoaXMgcmV0dXJucyB0aGUgdmFsdWUgdW5jaGFuZ2VkLiAgVG8gdGhlIHR5cGUgY2hlY2tlciB0aGlzCisgICAgc2lnbmFscyB0aGF0IHRoZSByZXR1cm4gdmFsdWUgaGFzIHRoZSBkZXNpZ25hdGVkIHR5cGUsIGJ1dCBhdAorICAgIHJ1bnRpbWUgd2UgaW50ZW50aW9uYWxseSBkb24ndCBjaGVjayBhbnl0aGluZyAod2Ugd2FudCB0aGlzCisgICAgdG8gYmUgYXMgZmFzdCBhcyBwb3NzaWJsZSkuCisgICAgIiIiCisgICAgcmV0dXJuIHZhbAorCisKK2RlZiBfZ2V0X2RlZmF1bHRzKGZ1bmMpOgorICAgICIiIkludGVybmFsIGhlbHBlciB0byBleHRyYWN0IHRoZSBkZWZhdWx0IGFyZ3VtZW50cywgYnkgbmFtZS4iIiIKKyAgICBjb2RlID0gZnVuYy5fX2NvZGVfXworICAgIHBvc19jb3VudCA9IGNvZGUuY29fYXJnY291bnQKKyAgICBhcmdfbmFtZXMgPSBjb2RlLmNvX3Zhcm5hbWVzCisgICAgYXJnX25hbWVzID0gYXJnX25hbWVzWzpwb3NfY291bnRdCisgICAgZGVmYXVsdHMgPSBmdW5jLl9fZGVmYXVsdHNfXyBvciAoKQorICAgIGt3ZGVmYXVsdHMgPSBmdW5jLl9fa3dkZWZhdWx0c19fCisgICAgcmVzID0gZGljdChrd2RlZmF1bHRzKSBpZiBrd2RlZmF1bHRzIGVsc2Uge30KKyAgICBwb3Nfb2Zmc2V0ID0gcG9zX2NvdW50IC0gbGVuKGRlZmF1bHRzKQorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB6aXAoYXJnX25hbWVzW3Bvc19vZmZzZXQ6XSwgZGVmYXVsdHMpOgorICAgICAgICBhc3NlcnQgbmFtZSBub3QgaW4gcmVzCisgICAgICAgIHJlc1tuYW1lXSA9IHZhbHVlCisgICAgcmV0dXJuIHJlcworCisKK2RlZiBnZXRfdHlwZV9oaW50cyhvYmosIGdsb2JhbG5zPU5vbmUsIGxvY2FsbnM9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHR5cGUgaGludHMgZm9yIGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdC4KKworICAgIFRoaXMgaXMgb2Z0ZW4gdGhlIHNhbWUgYXMgb2JqLl9fYW5ub3RhdGlvbnNfXywgYnV0IGl0IGhhbmRsZXMKKyAgICBmb3J3YXJkIHJlZmVyZW5jZXMgZW5jb2RlZCBhcyBzdHJpbmcgbGl0ZXJhbHMsIGFuZCBpZiBuZWNlc3NhcnkKKyAgICBhZGRzIE9wdGlvbmFsW3RdIGlmIGEgZGVmYXVsdCB2YWx1ZSBlcXVhbCB0byBOb25lIGlzIHNldC4KKworICAgIEJFV0FSRSAtLSB0aGUgYmVoYXZpb3Igb2YgZ2xvYmFsbnMgYW5kIGxvY2FsbnMgaXMgY291bnRlcmludHVpdGl2ZQorICAgICh1bmxlc3MgeW91IGFyZSBmYW1pbGlhciB3aXRoIGhvdyBldmFsKCkgYW5kIGV4ZWMoKSB3b3JrKS4gIFRoZQorICAgIHNlYXJjaCBvcmRlciBpcyBsb2NhbHMgZmlyc3QsIHRoZW4gZ2xvYmFscy4KKworICAgIC0gSWYgbm8gZGljdCBhcmd1bWVudHMgYXJlIHBhc3NlZCwgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHVzZSB0aGUKKyAgICAgIGdsb2JhbHMgZnJvbSBvYmosIGFuZCB0aGVzZSBhcmUgYWxzbyB1c2VkIGFzIHRoZSBsb2NhbHMuICBJZiB0aGUKKyAgICAgIG9iamVjdCBkb2VzIG5vdCBhcHBlYXIgdG8gaGF2ZSBnbG9iYWxzLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLgorCisgICAgLSBJZiBvbmUgZGljdCBhcmd1bWVudCBpcyBwYXNzZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGggZ2xvYmFscyBhbmQKKyAgICAgIGxvY2Fscy4KKworICAgIC0gSWYgdHdvIGRpY3QgYXJndW1lbnRzIGFyZSBwYXNzZWQsIHRoZXkgc3BlY2lmeSBnbG9iYWxzIGFuZAorICAgICAgbG9jYWxzLCByZXNwZWN0aXZlbHkuCisgICAgIiIiCisgICAgaWYgZ2V0YXR0cihvYmosICdfX25vX3R5cGVfY2hlY2tfXycsIE5vbmUpOgorICAgICAgICByZXR1cm4ge30KKyAgICBpZiBnbG9iYWxucyBpcyBOb25lOgorICAgICAgICBnbG9iYWxucyA9IGdldGF0dHIob2JqLCAnX19nbG9iYWxzX18nLCB7fSkKKyAgICAgICAgaWYgbG9jYWxucyBpcyBOb25lOgorICAgICAgICAgICAgbG9jYWxucyA9IGdsb2JhbG5zCisgICAgZWxpZiBsb2NhbG5zIGlzIE5vbmU6CisgICAgICAgIGxvY2FsbnMgPSBnbG9iYWxucworICAgIGRlZmF1bHRzID0gX2dldF9kZWZhdWx0cyhvYmopCisgICAgaGludHMgPSBkaWN0KG9iai5fX2Fubm90YXRpb25zX18pCisgICAgZm9yIG5hbWUsIHZhbHVlIGluIGhpbnRzLml0ZW1zKCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICB2YWx1ZSA9IF9Gb3J3YXJkUmVmKHZhbHVlKQorICAgICAgICB2YWx1ZSA9IF9ldmFsX3R5cGUodmFsdWUsIGdsb2JhbG5zLCBsb2NhbG5zKQorICAgICAgICBpZiBuYW1lIGluIGRlZmF1bHRzIGFuZCBkZWZhdWx0c1tuYW1lXSBpcyBOb25lOgorICAgICAgICAgICAgdmFsdWUgPSBPcHRpb25hbFt2YWx1ZV0KKyAgICAgICAgaGludHNbbmFtZV0gPSB2YWx1ZQorICAgIHJldHVybiBoaW50cworCisKK2RlZiBub190eXBlX2NoZWNrKGFyZyk6CisgICAgIiIiRGVjb3JhdG9yIHRvIGluZGljYXRlIHRoYXQgYW5ub3RhdGlvbnMgYXJlIG5vdCB0eXBlIGhpbnRzLgorCisgICAgVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBjbGFzcyBvciBmdW5jdGlvbjsgaWYgaXQgaXMgYSBjbGFzcywgaXQKKyAgICBhcHBsaWVzIHJlY3Vyc2l2ZWx5IHRvIGFsbCBtZXRob2RzIGRlZmluZWQgaW4gdGhhdCBjbGFzcyAoYnV0IG5vdAorICAgIHRvIG1ldGhvZHMgZGVmaW5lZCBpbiBpdHMgc3VwZXJjbGFzc2VzIG9yIHN1YmNsYXNzZXMpLgorCisgICAgVGhpcyBtdXRhdGVzIHRoZSBmdW5jdGlvbihzKSBpbiBwbGFjZS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGFyZywgdHlwZSk6CisgICAgICAgIGZvciBvYmogaW4gYXJnLl9fZGljdF9fLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICAgICAgb2JqLl9fbm9fdHlwZV9jaGVja19fID0gVHJ1ZQorICAgIGVsc2U6CisgICAgICAgIGFyZy5fX25vX3R5cGVfY2hlY2tfXyA9IFRydWUKKyAgICByZXR1cm4gYXJnCisKKworZGVmIG5vX3R5cGVfY2hlY2tfZGVjb3JhdG9yKGRlY29yYXRvcik6CisgICAgIiIiRGVjb3JhdG9yIHRvIGdpdmUgYW5vdGhlciBkZWNvcmF0b3IgdGhlIEBub190eXBlX2NoZWNrIGVmZmVjdC4KKworICAgIFRoaXMgd3JhcHMgdGhlIGRlY29yYXRvciB3aXRoIHNvbWV0aGluZyB0aGF0IHdyYXBzIHRoZSBkZWNvcmF0ZWQKKyAgICBmdW5jdGlvbiBpbiBAbm9fdHlwZV9jaGVjay4KKyAgICAiIiIKKworICAgIEBmdW5jdG9vbHMud3JhcHMoZGVjb3JhdG9yKQorICAgIGRlZiB3cmFwcGVkX2RlY29yYXRvcigqYXJncywgKiprd2RzKToKKyAgICAgICAgZnVuYyA9IGRlY29yYXRvcigqYXJncywgKiprd2RzKQorICAgICAgICBmdW5jID0gbm9fdHlwZV9jaGVjayhmdW5jKQorICAgICAgICByZXR1cm4gZnVuYworCisgICAgcmV0dXJuIHdyYXBwZWRfZGVjb3JhdG9yCisKKworZGVmIF9vdmVybG9hZF9kdW1teSgqYXJncywgKiprd2RzKToKKyAgICAiIiJIZWxwZXIgZm9yIEBvdmVybG9hZCB0byByYWlzZSB3aGVuIGNhbGxlZC4iIiIKKyAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAiWW91IHNob3VsZCBub3QgY2FsbCBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uLiAiCisgICAgICAgICJBIHNlcmllcyBvZiBAb3ZlcmxvYWQtZGVjb3JhdGVkIGZ1bmN0aW9ucyAiCisgICAgICAgICJvdXRzaWRlIGEgc3R1YiBtb2R1bGUgc2hvdWxkIGFsd2F5cyBiZSBmb2xsb3dlZCAiCisgICAgICAgICJieSBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG5vdCBAb3ZlcmxvYWQtZWQuIikKKworCitkZWYgb3ZlcmxvYWQoZnVuYyk6CisgICAgIiIiRGVjb3JhdG9yIGZvciBvdmVybG9hZGVkIGZ1bmN0aW9ucy9tZXRob2RzLgorCisgICAgSW4gYSBzdHViIGZpbGUsIHBsYWNlIHR3byBvciBtb3JlIHN0dWIgZGVmaW5pdGlvbnMgZm9yIHRoZSBzYW1lCisgICAgZnVuY3Rpb24gaW4gYSByb3csIGVhY2ggZGVjb3JhdGVkIHdpdGggQG92ZXJsb2FkLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgIEBvdmVybG9hZAorICAgICAgZGVmIHV0ZjgodmFsdWU6IE5vbmUpIC0+IE5vbmU6IC4uLgorICAgICAgQG92ZXJsb2FkCisgICAgICBkZWYgdXRmOCh2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOiAuLi4KKyAgICAgIEBvdmVybG9hZAorICAgICAgZGVmIHV0ZjgodmFsdWU6IHN0cikgLT4gYnl0ZXM6IC4uLgorCisgICAgSW4gYSBub24tc3R1YiBmaWxlIChpLmUuIGEgcmVndWxhciAucHkgZmlsZSksIGRvIHRoZSBzYW1lIGJ1dAorICAgIGZvbGxvdyBpdCB3aXRoIGFuIGltcGxlbWVudGF0aW9uLiAgVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCAqbm90KgorICAgIGJlIGRlY29yYXRlZCB3aXRoIEBvdmVybG9hZC4gIEZvciBleGFtcGxlOgorCisgICAgICBAb3ZlcmxvYWQKKyAgICAgIGRlZiB1dGY4KHZhbHVlOiBOb25lKSAtPiBOb25lOiAuLi4KKyAgICAgIEBvdmVybG9hZAorICAgICAgZGVmIHV0ZjgodmFsdWU6IGJ5dGVzKSAtPiBieXRlczogLi4uCisgICAgICBAb3ZlcmxvYWQKKyAgICAgIGRlZiB1dGY4KHZhbHVlOiBzdHIpIC0+IGJ5dGVzOiAuLi4KKyAgICAgIGRlZiB1dGY4KHZhbHVlKToKKyAgICAgICAgICAjIGltcGxlbWVudGF0aW9uIGdvZXMgaGVyZQorICAgICIiIgorICAgIHJldHVybiBfb3ZlcmxvYWRfZHVtbXkKKworCitjbGFzcyBfUHJvdG9jb2xNZXRhKEdlbmVyaWNNZXRhKToKKyAgICAiIiJJbnRlcm5hbCBtZXRhY2xhc3MgZm9yIF9Qcm90b2NvbC4KKworICAgIFRoaXMgZXhpc3RzIHNvIF9Qcm90b2NvbCBjbGFzc2VzIGNhbiBiZSBnZW5lcmljIHdpdGhvdXQgZGVyaXZpbmcKKyAgICBmcm9tIEdlbmVyaWMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgb2JqKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJQcm90b2NvbHMgY2Fubm90IGJlIHVzZWQgd2l0aCBpc2luc3RhbmNlKCkuIikKKworICAgIGRlZiBfX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBjbHMpOgorICAgICAgICBpZiBub3Qgc2VsZi5faXNfcHJvdG9jb2w6CisgICAgICAgICAgICAjIE5vIHN0cnVjdHVyYWwgY2hlY2tzIHNpbmNlIHRoaXMgaXNuJ3QgYSBwcm90b2NvbC4KKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIGlmIHNlbGYgaXMgX1Byb3RvY29sOgorICAgICAgICAgICAgIyBFdmVyeSBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIHRoZSBlbXB0eSBwcm90b2NvbC4KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBGaW5kIGFsbCBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlIHByb3RvY29sLgorICAgICAgICBhdHRycyA9IHNlbGYuX2dldF9wcm90b2NvbF9hdHRycygpCisKKyAgICAgICAgZm9yIGF0dHIgaW4gYXR0cnM6CisgICAgICAgICAgICBpZiBub3QgYW55KGF0dHIgaW4gZC5fX2RpY3RfXyBmb3IgZCBpbiBjbHMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2dldF9wcm90b2NvbF9hdHRycyhzZWxmKToKKyAgICAgICAgIyBHZXQgYWxsIFByb3RvY29sIGJhc2UgY2xhc3Nlcy4KKyAgICAgICAgcHJvdG9jb2xfYmFzZXMgPSBbXQorICAgICAgICBmb3IgYyBpbiBzZWxmLl9fbXJvX186CisgICAgICAgICAgICBpZiBnZXRhdHRyKGMsICdfaXNfcHJvdG9jb2wnLCBGYWxzZSkgYW5kIGMuX19uYW1lX18gIT0gJ19Qcm90b2NvbCc6CisgICAgICAgICAgICAgICAgcHJvdG9jb2xfYmFzZXMuYXBwZW5kKGMpCisKKyAgICAgICAgIyBHZXQgYXR0cmlidXRlcyBpbmNsdWRlZCBpbiBwcm90b2NvbC4KKyAgICAgICAgYXR0cnMgPSBzZXQoKQorICAgICAgICBmb3IgYmFzZSBpbiBwcm90b2NvbF9iYXNlczoKKyAgICAgICAgICAgIGZvciBhdHRyIGluIGJhc2UuX19kaWN0X18ua2V5cygpOgorICAgICAgICAgICAgICAgICMgSW5jbHVkZSBhdHRyaWJ1dGVzIG5vdCBkZWZpbmVkIGluIGFueSBub24tcHJvdG9jb2wgYmFzZXMuCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gc2VsZi5fX21yb19fOgorICAgICAgICAgICAgICAgICAgICBpZiAoYyBpcyBub3QgYmFzZSBhbmQgYXR0ciBpbiBjLl9fZGljdF9fIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBnZXRhdHRyKGMsICdfaXNfcHJvdG9jb2wnLCBGYWxzZSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiAobm90IGF0dHIuc3RhcnRzd2l0aCgnX2FiY18nKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyICE9ICdfX2Fic3RyYWN0bWV0aG9kc19fJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyICE9ICdfaXNfcHJvdG9jb2wnIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgIT0gJ19fZGljdF9fJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyICE9ICdfX2FyZ3NfXycgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciAhPSAnX19zbG90c19fJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyICE9ICdfZ2V0X3Byb3RvY29sX2F0dHJzJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyICE9ICdfX25leHRfaW5fbXJvX18nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgIT0gJ19fcGFyYW1ldGVyc19fJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyICE9ICdfX29yaWdpbl9fJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyICE9ICdfX2V4dHJhX18nIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgIT0gJ19fbW9kdWxlX18nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLmFkZChhdHRyKQorCisgICAgICAgIHJldHVybiBhdHRycworCisKK2NsYXNzIF9Qcm90b2NvbChtZXRhY2xhc3M9X1Byb3RvY29sTWV0YSk6CisgICAgIiIiSW50ZXJuYWwgYmFzZSBjbGFzcyBmb3IgcHJvdG9jb2wgY2xhc3Nlcy4KKworICAgIFRoaXMgaW1wbGVtZW50cyBhIHNpbXBsZS1taW5kZWQgc3RydWN0dXJhbCBpc2luc3RhbmNlIGNoZWNrCisgICAgKHNpbWlsYXIgYnV0IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUtb2ZmcyBpbiBjb2xsZWN0aW9ucy5hYmMKKyAgICBzdWNoIGFzIEhhc2hhYmxlKS4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBfaXNfcHJvdG9jb2wgPSBUcnVlCisKKworIyBWYXJpb3VzIEFCQ3MgbWltaWNraW5nIHRob3NlIGluIGNvbGxlY3Rpb25zLmFiYy4KKyMgQSBmZXcgYXJlIHNpbXBseSByZS1leHBvcnRlZCBmb3IgY29tcGxldGVuZXNzLgorCitIYXNoYWJsZSA9IGNvbGxlY3Rpb25zX2FiYy5IYXNoYWJsZSAgIyBOb3QgZ2VuZXJpYy4KKworCitpZiBoYXNhdHRyKGNvbGxlY3Rpb25zX2FiYywgJ0F3YWl0YWJsZScpOgorICAgIGNsYXNzIEF3YWl0YWJsZShHZW5lcmljW1RfY29dLCBleHRyYT1jb2xsZWN0aW9uc19hYmMuQXdhaXRhYmxlKToKKyAgICAgICAgX19zbG90c19fID0gKCkKK2Vsc2U6CisgICAgQXdhaXRhYmxlID0gTm9uZQorCisKK2lmIGhhc2F0dHIoY29sbGVjdGlvbnNfYWJjLCAnQXN5bmNJdGVyYWJsZScpOgorCisgICAgY2xhc3MgQXN5bmNJdGVyYWJsZShHZW5lcmljW1RfY29dLCBleHRyYT1jb2xsZWN0aW9uc19hYmMuQXN5bmNJdGVyYWJsZSk6CisgICAgICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBjbGFzcyBBc3luY0l0ZXJhdG9yKEFzeW5jSXRlcmFibGVbVF9jb10sCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1jb2xsZWN0aW9uc19hYmMuQXN5bmNJdGVyYXRvcik6CisgICAgICAgIF9fc2xvdHNfXyA9ICgpCisKK2Vsc2U6CisgICAgQXN5bmNJdGVyYWJsZSA9IE5vbmUKKyAgICBBc3luY0l0ZXJhdG9yID0gTm9uZQorCisKK2NsYXNzIEl0ZXJhYmxlKEdlbmVyaWNbVF9jb10sIGV4dHJhPWNvbGxlY3Rpb25zX2FiYy5JdGVyYWJsZSk6CisgICAgX19zbG90c19fID0gKCkKKworCitjbGFzcyBJdGVyYXRvcihJdGVyYWJsZVtUX2NvXSwgZXh0cmE9Y29sbGVjdGlvbnNfYWJjLkl0ZXJhdG9yKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisKK2NsYXNzIFN1cHBvcnRzSW50KF9Qcm90b2NvbCk6CisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2ludF9fKHNlbGYpIC0+IGludDoKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFN1cHBvcnRzRmxvYXQoX1Byb3RvY29sKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZmxvYXRfXyhzZWxmKSAtPiBmbG9hdDoKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFN1cHBvcnRzQ29tcGxleChfUHJvdG9jb2wpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jb21wbGV4X18oc2VsZikgLT4gY29tcGxleDoKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFN1cHBvcnRzQnl0ZXMoX1Byb3RvY29sKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fYnl0ZXNfXyhzZWxmKSAtPiBieXRlczoKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFN1cHBvcnRzQWJzKF9Qcm90b2NvbFtUX2NvXSk6CisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2Fic19fKHNlbGYpIC0+IFRfY286CisgICAgICAgIHBhc3MKKworCitjbGFzcyBTdXBwb3J0c1JvdW5kKF9Qcm90b2NvbFtUX2NvXSk6CisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3JvdW5kX18oc2VsZiwgbmRpZ2l0czogaW50ID0gMCkgLT4gVF9jbzoKKyAgICAgICAgcGFzcworCisKK2lmIGhhc2F0dHIoY29sbGVjdGlvbnNfYWJjLCAnUmV2ZXJzaWJsZScpOgorICAgIGNsYXNzIFJldmVyc2libGUoSXRlcmFibGVbVF9jb10sIGV4dHJhPWNvbGxlY3Rpb25zX2FiYy5SZXZlcnNpYmxlKToKKyAgICAgICAgX19zbG90c19fID0gKCkKK2Vsc2U6CisgICAgY2xhc3MgUmV2ZXJzaWJsZShfUHJvdG9jb2xbVF9jb10pOgorICAgICAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgICAgIEBhYnN0cmFjdG1ldGhvZAorICAgICAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYpIC0+ICdJdGVyYXRvcltUX2NvXSc6CisgICAgICAgICAgICBwYXNzCisKKworU2l6ZWQgPSBjb2xsZWN0aW9uc19hYmMuU2l6ZWQgICMgTm90IGdlbmVyaWMuCisKKworY2xhc3MgQ29udGFpbmVyKEdlbmVyaWNbVF9jb10sIGV4dHJhPWNvbGxlY3Rpb25zX2FiYy5Db250YWluZXIpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKKworIyBDYWxsYWJsZSB3YXMgZGVmaW5lZCBlYXJsaWVyLgorCisKK2NsYXNzIEFic3RyYWN0U2V0KFNpemVkLCBJdGVyYWJsZVtUX2NvXSwgQ29udGFpbmVyW1RfY29dLAorICAgICAgICAgICAgICAgICAgZXh0cmE9Y29sbGVjdGlvbnNfYWJjLlNldCk6CisgICAgcGFzcworCisKK2NsYXNzIE11dGFibGVTZXQoQWJzdHJhY3RTZXRbVF0sIGV4dHJhPWNvbGxlY3Rpb25zX2FiYy5NdXRhYmxlU2V0KToKKyAgICBwYXNzCisKKworIyBOT1RFOiBPbmx5IHRoZSB2YWx1ZSB0eXBlIGlzIGNvdmFyaWFudC4KK2NsYXNzIE1hcHBpbmcoU2l6ZWQsIEl0ZXJhYmxlW0tUXSwgQ29udGFpbmVyW0tUXSwgR2VuZXJpY1tLVCwgVlRfY29dLAorICAgICAgICAgICAgICBleHRyYT1jb2xsZWN0aW9uc19hYmMuTWFwcGluZyk6CisgICAgcGFzcworCisKK2NsYXNzIE11dGFibGVNYXBwaW5nKE1hcHBpbmdbS1QsIFZUXSwgZXh0cmE9Y29sbGVjdGlvbnNfYWJjLk11dGFibGVNYXBwaW5nKToKKyAgICBwYXNzCisKK2lmIGhhc2F0dHIoY29sbGVjdGlvbnNfYWJjLCAnUmV2ZXJzaWJsZScpOgorICAgIGNsYXNzIFNlcXVlbmNlKFNpemVkLCBSZXZlcnNpYmxlW1RfY29dLCBDb250YWluZXJbVF9jb10sCisgICAgICAgICAgICAgICBleHRyYT1jb2xsZWN0aW9uc19hYmMuU2VxdWVuY2UpOgorICAgICAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIFNlcXVlbmNlKFNpemVkLCBJdGVyYWJsZVtUX2NvXSwgQ29udGFpbmVyW1RfY29dLAorICAgICAgICAgICAgICAgICAgIGV4dHJhPWNvbGxlY3Rpb25zX2FiYy5TZXF1ZW5jZSk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2VbVF0sIGV4dHJhPWNvbGxlY3Rpb25zX2FiYy5NdXRhYmxlU2VxdWVuY2UpOgorICAgIHBhc3MKKworCitjbGFzcyBCeXRlU3RyaW5nKFNlcXVlbmNlW2ludF0sIGV4dHJhPWNvbGxlY3Rpb25zX2FiYy5CeXRlU3RyaW5nKToKKyAgICBwYXNzCisKKworQnl0ZVN0cmluZy5yZWdpc3Rlcih0eXBlKG1lbW9yeXZpZXcoYicnKSkpCisKKworY2xhc3MgTGlzdChsaXN0LCBNdXRhYmxlU2VxdWVuY2VbVF0sIGV4dHJhPWxpc3QpOgorCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgaWYgX2dlcXYoY2xzLCBMaXN0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVHlwZSBMaXN0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQ7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGxpc3QoKSBpbnN0ZWFkIikKKyAgICAgICAgcmV0dXJuIGxpc3QuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3ZHMpCisKKworY2xhc3MgU2V0KHNldCwgTXV0YWJsZVNldFtUXSwgZXh0cmE9c2V0KToKKworICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGlmIF9nZXF2KGNscywgU2V0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVHlwZSBTZXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2Ugc2V0KCkgaW5zdGVhZCIpCisgICAgICAgIHJldHVybiBzZXQuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3ZHMpCisKKworY2xhc3MgX0Zyb3plblNldE1ldGEoR2VuZXJpY01ldGEpOgorICAgICIiIlRoaXMgbWV0YWNsYXNzIGVuc3VyZXMgc2V0IGlzIG5vdCBhIHN1YmNsYXNzIG9mIEZyb3plblNldC4KKworICAgIFdpdGhvdXQgdGhpcyBtZXRhY2xhc3MsIHNldCB3b3VsZCBiZSBjb25zaWRlcmVkIGEgc3ViY2xhc3Mgb2YKKyAgICBGcm96ZW5TZXQsIGJlY2F1c2UgRnJvemVuU2V0Ll9fZXh0cmFfXyBpcyBjb2xsZWN0aW9ucy5hYmMuU2V0LCBhbmQKKyAgICBzZXQgaXMgYSBzdWJjbGFzcyBvZiB0aGF0LgorICAgICIiIgorCisgICAgZGVmIF9fc3ViY2xhc3NjaGVja19fKHNlbGYsIGNscyk6CisgICAgICAgIGlmIGlzc3ViY2xhc3MoY2xzLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzdXBlcigpLl9fc3ViY2xhc3NjaGVja19fKGNscykKKworCitjbGFzcyBGcm96ZW5TZXQoZnJvemVuc2V0LCBBYnN0cmFjdFNldFtUX2NvXSwgbWV0YWNsYXNzPV9Gcm96ZW5TZXRNZXRhLAorICAgICAgICAgICAgICAgIGV4dHJhPWZyb3plbnNldCk6CisgICAgX19zbG90c19fID0gKCkKKworICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGlmIF9nZXF2KGNscywgRnJvemVuU2V0KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVHlwZSBGcm96ZW5TZXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgZnJvemVuc2V0KCkgaW5zdGVhZCIpCisgICAgICAgIHJldHVybiBmcm96ZW5zZXQuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3ZHMpCisKKworY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQsIEl0ZXJhYmxlW1RfY29dLCBleHRyYT1jb2xsZWN0aW9uc19hYmMuTWFwcGluZ1ZpZXcpOgorICAgIHBhc3MKKworCitjbGFzcyBLZXlzVmlldyhNYXBwaW5nVmlld1tLVF0sIEFic3RyYWN0U2V0W0tUXSwKKyAgICAgICAgICAgICAgIGV4dHJhPWNvbGxlY3Rpb25zX2FiYy5LZXlzVmlldyk6CisgICAgcGFzcworCisKK2NsYXNzIEl0ZW1zVmlldyhNYXBwaW5nVmlld1tUdXBsZVtLVCwgVlRfY29dXSwKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFNldFtUdXBsZVtLVCwgVlRfY29dXSwKKyAgICAgICAgICAgICAgICBHZW5lcmljW0tULCBWVF9jb10sCisgICAgICAgICAgICAgICAgZXh0cmE9Y29sbGVjdGlvbnNfYWJjLkl0ZW1zVmlldyk6CisgICAgcGFzcworCisKK2NsYXNzIFZhbHVlc1ZpZXcoTWFwcGluZ1ZpZXdbVlRfY29dLCBleHRyYT1jb2xsZWN0aW9uc19hYmMuVmFsdWVzVmlldyk6CisgICAgcGFzcworCisKK2lmIGhhc2F0dHIoY29udGV4dGxpYiwgJ0Fic3RyYWN0Q29udGV4dE1hbmFnZXInKToKKyAgICBjbGFzcyBDb250ZXh0TWFuYWdlcihHZW5lcmljW1RfY29dLCBleHRyYT1jb250ZXh0bGliLkFic3RyYWN0Q29udGV4dE1hbmFnZXIpOgorICAgICAgICBfX3Nsb3RzX18gPSAoKQorICAgIF9fYWxsX18uYXBwZW5kKCdDb250ZXh0TWFuYWdlcicpCisKKworY2xhc3MgRGljdChkaWN0LCBNdXRhYmxlTWFwcGluZ1tLVCwgVlRdLCBleHRyYT1kaWN0KToKKworICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGlmIF9nZXF2KGNscywgRGljdCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlR5cGUgRGljdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBkaWN0KCkgaW5zdGVhZCIpCisgICAgICAgIHJldHVybiBkaWN0Ll9fbmV3X18oY2xzLCAqYXJncywgKiprd2RzKQorCitjbGFzcyBEZWZhdWx0RGljdChjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdCwgTXV0YWJsZU1hcHBpbmdbS1QsIFZUXSwKKyAgICAgICAgICAgICAgICAgIGV4dHJhPWNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KToKKworICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGlmIF9nZXF2KGNscywgRGVmYXVsdERpY3QpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUeXBlIERlZmF1bHREaWN0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQ7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KCkgaW5zdGVhZCIpCisgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdC5fX25ld19fKGNscywgKmFyZ3MsICoqa3dkcykKKworIyBEZXRlcm1pbmUgd2hhdCBiYXNlIGNsYXNzIHRvIHVzZSBmb3IgR2VuZXJhdG9yLgoraWYgaGFzYXR0cihjb2xsZWN0aW9uc19hYmMsICdHZW5lcmF0b3InKToKKyAgICAjIFN1ZmZpY2llbnRseSByZWNlbnQgdmVyc2lvbnMgb2YgMy41IGhhdmUgYSBHZW5lcmF0b3IgQUJDLgorICAgIF9HX2Jhc2UgPSBjb2xsZWN0aW9uc19hYmMuR2VuZXJhdG9yCitlbHNlOgorICAgICMgRmFsbCBiYWNrIG9uIHRoZSBleGFjdCB0eXBlLgorICAgIF9HX2Jhc2UgPSB0eXBlcy5HZW5lcmF0b3JUeXBlCisKKworY2xhc3MgR2VuZXJhdG9yKEl0ZXJhdG9yW1RfY29dLCBHZW5lcmljW1RfY28sIFRfY29udHJhLCBWX2NvXSwKKyAgICAgICAgICAgICAgICBleHRyYT1fR19iYXNlKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgaWYgX2dlcXYoY2xzLCBHZW5lcmF0b3IpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUeXBlIEdlbmVyYXRvciBjYW5ub3QgYmUgaW5zdGFudGlhdGVkOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZSBhIHN1YmNsYXNzIGluc3RlYWQiKQorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgKmFyZ3MsICoqa3dkcykKKworCisjIEludGVybmFsIHR5cGUgdmFyaWFibGUgdXNlZCBmb3IgVHlwZVtdLgorQ1QgPSBUeXBlVmFyKCdDVCcsIGNvdmFyaWFudD1UcnVlLCBib3VuZD10eXBlKQorCisKKyMgVGhpcyBpcyBub3QgYSByZWFsIGdlbmVyaWMgY2xhc3MuICBEb24ndCB1c2Ugb3V0c2lkZSBhbm5vdGF0aW9ucy4KK2NsYXNzIFR5cGUodHlwZSwgR2VuZXJpY1tDVF0sIGV4dHJhPXR5cGUpOgorICAgICIiIkEgc3BlY2lhbCBjb25zdHJ1Y3QgdXNhYmxlIHRvIGFubm90YXRlIGNsYXNzIG9iamVjdHMuCisKKyAgICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY2xhc3Nlczo6CisKKyAgICAgIGNsYXNzIFVzZXI6IC4uLiAgIyBBYnN0cmFjdCBiYXNlIGZvciBVc2VyIGNsYXNzZXMKKyAgICAgIGNsYXNzIEJhc2ljVXNlcihVc2VyKTogLi4uCisgICAgICBjbGFzcyBQcm9Vc2VyKFVzZXIpOiAuLi4KKyAgICAgIGNsYXNzIFRlYW1Vc2VyKFVzZXIpOiAuLi4KKworICAgIEFuZCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjbGFzcyBhcmd1bWVudCB0aGF0J3MgYSBzdWJjbGFzcyBvZgorICAgIFVzZXIgYW5kIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2xhc3M6OgorCisgICAgICBVID0gVHlwZVZhcignVScsIGJvdW5kPVVzZXIpCisgICAgICBkZWYgbmV3X3VzZXIodXNlcl9jbGFzczogVHlwZVtVXSkgLT4gVToKKyAgICAgICAgICB1c2VyID0gdXNlcl9jbGFzcygpCisgICAgICAgICAgIyAoSGVyZSB3ZSBjb3VsZCB3cml0ZSB0aGUgdXNlciBvYmplY3QgdG8gYSBkYXRhYmFzZSkKKyAgICAgICAgICByZXR1cm4gdXNlcgorCisgICAgICBqb2UgPSBuZXdfdXNlcihCYXNpY1VzZXIpCisKKyAgICBBdCB0aGlzIHBvaW50IHRoZSB0eXBlIGNoZWNrZXIga25vd3MgdGhhdCBqb2UgaGFzIHR5cGUgQmFzaWNVc2VyLgorICAgICIiIgorCisKK2RlZiBOYW1lZFR1cGxlKHR5cGVuYW1lLCBmaWVsZHMpOgorICAgICIiIlR5cGVkIHZlcnNpb24gb2YgbmFtZWR0dXBsZS4KKworICAgIFVzYWdlOjoKKworICAgICAgICBFbXBsb3llZSA9IHR5cGluZy5OYW1lZFR1cGxlKCdFbXBsb3llZScsIFsoJ25hbWUnLCBzdHIpLCAnaWQnLCBpbnQpXSkKKworICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgICAgRW1wbG95ZWUgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCdFbXBsb3llZScsIFsnbmFtZScsICdpZCddKQorCisgICAgVGhlIHJlc3VsdGluZyBjbGFzcyBoYXMgb25lIGV4dHJhIGF0dHJpYnV0ZTogX2ZpZWxkX3R5cGVzLAorICAgIGdpdmluZyBhIGRpY3QgbWFwcGluZyBmaWVsZCBuYW1lcyB0byB0eXBlcy4gIChUaGUgZmllbGQgbmFtZXMKKyAgICBhcmUgaW4gdGhlIF9maWVsZHMgYXR0cmlidXRlLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBuYW1lZHR1cGxlCisgICAgQVBJLikKKyAgICAiIiIKKyAgICBmaWVsZHMgPSBbKG4sIHQpIGZvciBuLCB0IGluIGZpZWxkc10KKyAgICBjbHMgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKHR5cGVuYW1lLCBbbiBmb3IgbiwgdCBpbiBmaWVsZHNdKQorICAgIGNscy5fZmllbGRfdHlwZXMgPSBkaWN0KGZpZWxkcykKKyAgICAjIFNldCB0aGUgbW9kdWxlIHRvIHRoZSBjYWxsZXIncyBtb2R1bGUgKG90aGVyd2lzZSBpdCdkIGJlICd0eXBpbmcnKS4KKyAgICB0cnk6CisgICAgICAgIGNscy5fX21vZHVsZV9fID0gc3lzLl9nZXRmcmFtZSgxKS5mX2dsb2JhbHMuZ2V0KCdfX25hbWVfXycsICdfX21haW5fXycpCisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gY2xzCisKKworZGVmIE5ld1R5cGUobmFtZSwgdHApOgorICAgICIiIk5ld1R5cGUgY3JlYXRlcyBzaW1wbGUgdW5pcXVlIHR5cGVzIHdpdGggYWxtb3N0IHplcm8KKyAgICBydW50aW1lIG92ZXJoZWFkLiBOZXdUeXBlKG5hbWUsIHRwKSBpcyBjb25zaWRlcmVkIGEgc3VidHlwZSBvZiB0cAorICAgIGJ5IHN0YXRpYyB0eXBlIGNoZWNrZXJzLiBBdCBydW50aW1lLCBOZXdUeXBlKG5hbWUsIHRwKSByZXR1cm5zCisgICAgYSBkdW1teSBmdW5jdGlvbiB0aGF0IHNpbXBseSByZXR1cm5zIGl0cyBhcmd1bWVudC4gVXNhZ2U6OgorCisgICAgICAgIFVzZXJJZCA9IE5ld1R5cGUoJ1VzZXJJZCcsIGludCkKKworICAgICAgICBkZWYgbmFtZV9ieV9pZCh1c2VyX2lkOiBVc2VySWQpIC0+IHN0cjoKKyAgICAgICAgICAgIC4uLgorCisgICAgICAgIFVzZXJJZCgndXNlcicpICAgICAgICAgICMgRmFpbHMgdHlwZSBjaGVjaworCisgICAgICAgIG5hbWVfYnlfaWQoNDIpICAgICAgICAgICMgRmFpbHMgdHlwZSBjaGVjaworICAgICAgICBuYW1lX2J5X2lkKFVzZXJJZCg0MikpICAjIE9LCisKKyAgICAgICAgbnVtID0gVXNlcklkKDUpICsgMSAgICAgIyB0eXBlOiBpbnQKKyAgICAiIiIKKworICAgIGRlZiBuZXdfdHlwZSh4KToKKyAgICAgICAgcmV0dXJuIHgKKworICAgIG5ld190eXBlLl9fbmFtZV9fID0gbmFtZQorICAgIG5ld190eXBlLl9fc3VwZXJ0eXBlX18gPSB0cAorICAgIHJldHVybiBuZXdfdHlwZQorCisKKyMgUHl0aG9uLXZlcnNpb24tc3BlY2lmaWMgYWxpYXMgKFB5dGhvbiAyOiB1bmljb2RlOyBQeXRob24gMzogc3RyKQorVGV4dCA9IHN0cgorCisKKyMgQ29uc3RhbnQgdGhhdCdzIFRydWUgd2hlbiB0eXBlIGNoZWNraW5nLCBidXQgRmFsc2UgaGVyZS4KK1RZUEVfQ0hFQ0tJTkcgPSBGYWxzZQorCisKK2NsYXNzIElPKEdlbmVyaWNbQW55U3RyXSk6CisgICAgIiIiR2VuZXJpYyBiYXNlIGNsYXNzIGZvciBUZXh0SU8gYW5kIEJpbmFyeUlPLgorCisgICAgVGhpcyBpcyBhbiBhYnN0cmFjdCwgZ2VuZXJpYyB2ZXJzaW9uIG9mIHRoZSByZXR1cm4gb2Ygb3BlbigpLgorCisgICAgTk9URTogVGhpcyBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgcG9zc2libGUKKyAgICBjbGFzc2VzICh0ZXh0IHZzLiBiaW5hcnksIHJlYWQgdnMuIHdyaXRlIHZzLiByZWFkL3dyaXRlLAorICAgIGFwcGVuZC1vbmx5LCB1bmJ1ZmZlcmVkKS4gIFRoZSBUZXh0SU8gYW5kIEJpbmFyeUlPIHN1YmNsYXNzZXMKKyAgICBiZWxvdyBjYXB0dXJlIHRoZSBkaXN0aW5jdGlvbnMgYmV0d2VlbiB0ZXh0IHZzLiBiaW5hcnksIHdoaWNoIGlzCisgICAgcGVydmFzaXZlIGluIHRoZSBpbnRlcmZhY2U7IGhvd2V2ZXIgd2UgY3VycmVudGx5IGRvIG5vdCBvZmZlciBhCisgICAgd2F5IHRvIHRyYWNrIHRoZSBvdGhlciBkaXN0aW5jdGlvbnMgaW4gdGhlIHR5cGUgc3lzdGVtLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdHByb3BlcnR5CisgICAgZGVmIG1vZGUoc2VsZikgLT4gc3RyOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3Rwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpIC0+IHN0cjoKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNsb3NlKHNlbGYpIC0+IE5vbmU6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjbG9zZWQoc2VsZikgLT4gYm9vbDoKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGZpbGVubyhzZWxmKSAtPiBpbnQ6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBmbHVzaChzZWxmKSAtPiBOb25lOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaXNhdHR5KHNlbGYpIC0+IGJvb2w6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiByZWFkKHNlbGYsIG46IGludCA9IC0xKSAtPiBBbnlTdHI6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiByZWFkYWJsZShzZWxmKSAtPiBib29sOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ6IGludCA9IC0xKSAtPiBBbnlTdHI6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiByZWFkbGluZXMoc2VsZiwgaGludDogaW50ID0gLTEpIC0+IExpc3RbQW55U3RyXToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0OiBpbnQsIHdoZW5jZTogaW50ID0gMCkgLT4gaW50OgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc2Vla2FibGUoc2VsZikgLT4gYm9vbDoKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHRlbGwoc2VsZikgLT4gaW50OgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgc2l6ZTogaW50ID0gTm9uZSkgLT4gaW50OgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgd3JpdGFibGUoc2VsZikgLT4gYm9vbDoKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHdyaXRlKHNlbGYsIHM6IEFueVN0cikgLT4gaW50OgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBsaW5lczogTGlzdFtBbnlTdHJdKSAtPiBOb25lOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpIC0+ICdJT1tBbnlTdHJdJzoKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIC0+IE5vbmU6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBCaW5hcnlJTyhJT1tieXRlc10pOgorICAgICIiIlR5cGVkIHZlcnNpb24gb2YgdGhlIHJldHVybiBvZiBvcGVuKCkgaW4gYmluYXJ5IG1vZGUuIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHdyaXRlKHNlbGYsIHM6IFVuaW9uW2J5dGVzLCBieXRlYXJyYXldKSAtPiBpbnQ6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2VudGVyX18oc2VsZikgLT4gJ0JpbmFyeUlPJzoKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFRleHRJTyhJT1tzdHJdKToKKyAgICAiIiJUeXBlZCB2ZXJzaW9uIG9mIHRoZSByZXR1cm4gb2Ygb3BlbigpIGluIHRleHQgbW9kZS4iIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3Rwcm9wZXJ0eQorICAgIGRlZiBidWZmZXIoc2VsZikgLT4gQmluYXJ5SU86CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdHByb3BlcnR5CisgICAgZGVmIGVuY29kaW5nKHNlbGYpIC0+IHN0cjoKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0cHJvcGVydHkKKyAgICBkZWYgZXJyb3JzKHNlbGYpIC0+IHN0cjoKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0cHJvcGVydHkKKyAgICBkZWYgbGluZV9idWZmZXJpbmcoc2VsZikgLT4gYm9vbDoKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0cHJvcGVydHkKKyAgICBkZWYgbmV3bGluZXMoc2VsZikgLT4gQW55OgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpIC0+ICdUZXh0SU8nOgorICAgICAgICBwYXNzCisKKworY2xhc3MgaW86CisgICAgIiIiV3JhcHBlciBuYW1lc3BhY2UgZm9yIElPIGdlbmVyaWMgY2xhc3Nlcy4iIiIKKworICAgIF9fYWxsX18gPSBbJ0lPJywgJ1RleHRJTycsICdCaW5hcnlJTyddCisgICAgSU8gPSBJTworICAgIFRleHRJTyA9IFRleHRJTworICAgIEJpbmFyeUlPID0gQmluYXJ5SU8KKworaW8uX19uYW1lX18gPSBfX25hbWVfXyArICcuaW8nCitzeXMubW9kdWxlc1tpby5fX25hbWVfX10gPSBpbworCisKK1BhdHRlcm4gPSBfVHlwZUFsaWFzKCdQYXR0ZXJuJywgQW55U3RyLCB0eXBlKHN0ZGxpYl9yZS5jb21waWxlKCcnKSksCisgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgcDogcC5wYXR0ZXJuKQorTWF0Y2ggPSBfVHlwZUFsaWFzKCdNYXRjaCcsIEFueVN0ciwgdHlwZShzdGRsaWJfcmUubWF0Y2goJycsICcnKSksCisgICAgICAgICAgICAgICAgICAgbGFtYmRhIG06IG0ucmUucGF0dGVybikKKworCitjbGFzcyByZToKKyAgICAiIiJXcmFwcGVyIG5hbWVzcGFjZSBmb3IgcmUgdHlwZSBhbGlhc2VzLiIiIgorCisgICAgX19hbGxfXyA9IFsnUGF0dGVybicsICdNYXRjaCddCisgICAgUGF0dGVybiA9IFBhdHRlcm4KKyAgICBNYXRjaCA9IE1hdGNoCisKK3JlLl9fbmFtZV9fID0gX19uYW1lX18gKyAnLnJlJworc3lzLm1vZHVsZXNbcmUuX19uYW1lX19dID0gcmUKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9fX2luaXRfXy5weSBiL0xpYi91bml0dGVzdC9fX2luaXRfXy5weQppbmRleCBhNWQ1MGFmLi43ZjYxYTgwIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvX19pbml0X18ucHkKKysrIGIvTGliL3VuaXR0ZXN0L19faW5pdF9fLnB5CkBAIC0xLDYgKzEsNiBAQAogIiIiCiBQeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yaywgYmFzZWQgb24gRXJpY2ggR2FtbWEncyBKVW5pdCBhbmQgS2VudCBCZWNrJ3MKLVNtYWxsdGFsayB0ZXN0aW5nIGZyYW1ld29yay4KK1NtYWxsdGFsayB0ZXN0aW5nIGZyYW1ld29yayAodXNlZCB3aXRoIHBlcm1pc3Npb24pLgogCiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgY29yZSBmcmFtZXdvcmsgY2xhc3NlcyB0aGF0IGZvcm0gdGhlIGJhc2lzIG9mCiBzcGVjaWZpYyB0ZXN0IGNhc2VzIGFuZCBzdWl0ZXMgKFRlc3RDYXNlLCBUZXN0U3VpdGUgZXRjLiksIGFuZCBhbHNvIGEKQEAgLTY3LDMgKzY3LDEyIEBACiAKICMgZGVwcmVjYXRlZAogX1RleHRUZXN0UmVzdWx0ID0gVGV4dFRlc3RSZXN1bHQKKworIyBUaGVyZSBhcmUgbm8gdGVzdHMgaGVyZSwgc28gZG9uJ3QgdHJ5IHRvIHJ1biBhbnl0aGluZyBkaXNjb3ZlcmVkIGZyb20KKyMgaW50cm9zcGVjdGluZyB0aGUgc3ltYm9scyAoZS5nLiBGdW5jdGlvblRlc3RDYXNlKS4gSW5zdGVhZCwgYWxsIG91cgorIyB0ZXN0cyBjb21lIGZyb20gd2l0aGluIHVuaXR0ZXN0LnRlc3QuCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICBpbXBvcnQgb3MucGF0aAorICAgICMgdG9wIGxldmVsIGRpcmVjdG9yeSBjYWNoZWQgb24gbG9hZGVyIGluc3RhbmNlCisgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcmV0dXJuIGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybikKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9jYXNlLnB5IGIvTGliL3VuaXR0ZXN0L2Nhc2UucHkKaW5kZXggOGE5ZjFjMC4uMWU0MDkwYyAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L2Nhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L2Nhc2UucHkKQEAgLTExOSw2ICsxMTksMTAgQEAKICAgICB0ZXN0X2l0ZW0uX191bml0dGVzdF9leHBlY3RpbmdfZmFpbHVyZV9fID0gVHJ1ZQogICAgIHJldHVybiB0ZXN0X2l0ZW0KIAorZGVmIF9pc19zdWJ0eXBlKGV4cGVjdGVkLCBiYXNldHlwZSk6CisgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgdHVwbGUpOgorICAgICAgICByZXR1cm4gYWxsKF9pc19zdWJ0eXBlKGUsIGJhc2V0eXBlKSBmb3IgZSBpbiBleHBlY3RlZCkKKyAgICByZXR1cm4gaXNpbnN0YW5jZShleHBlY3RlZCwgdHlwZSkgYW5kIGlzc3ViY2xhc3MoZXhwZWN0ZWQsIGJhc2V0eXBlKQogCiBjbGFzcyBfQmFzZVRlc3RDYXNlQ29udGV4dDoKIApAQCAtMTI5LDM1ICsxMzMsNDUgQEAKICAgICAgICAgbXNnID0gc2VsZi50ZXN0X2Nhc2UuX2Zvcm1hdE1lc3NhZ2Uoc2VsZi5tc2csIHN0YW5kYXJkTXNnKQogICAgICAgICByYWlzZSBzZWxmLnRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uKG1zZykKIAotCiBjbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkLCB0ZXN0X2Nhc2UsIGNhbGxhYmxlX29iaj1Ob25lLAotICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhwZWN0ZWQsIHRlc3RfY2FzZSwgZXhwZWN0ZWRfcmVnZXg9Tm9uZSk6CiAgICAgICAgIF9CYXNlVGVzdENhc2VDb250ZXh0Ll9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSkKICAgICAgICAgc2VsZi5leHBlY3RlZCA9IGV4cGVjdGVkCiAgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCi0gICAgICAgIGlmIGNhbGxhYmxlX29iaiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gY2FsbGFibGVfb2JqLl9fbmFtZV9fCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5vYmpfbmFtZSA9IHN0cihjYWxsYWJsZV9vYmopCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gTm9uZQogICAgICAgICBpZiBleHBlY3RlZF9yZWdleCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4ID0gcmUuY29tcGlsZShleHBlY3RlZF9yZWdleCkKICAgICAgICAgc2VsZi5leHBlY3RlZF9yZWdleCA9IGV4cGVjdGVkX3JlZ2V4CisgICAgICAgIHNlbGYub2JqX25hbWUgPSBOb25lCiAgICAgICAgIHNlbGYubXNnID0gTm9uZQogCi0gICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBjYWxsYWJsZV9vYmosIGFyZ3MsIGt3YXJncyk6CisgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBhcmdzLCBrd2FyZ3MpOgogICAgICAgICAiIiIKLSAgICAgICAgSWYgY2FsbGFibGVfb2JqIGlzIE5vbmUsIGFzc2VydFJhaXNlcy9XYXJucyBpcyBiZWluZyB1c2VkIGFzIGEKKyAgICAgICAgSWYgYXJncyBpcyBlbXB0eSwgYXNzZXJ0UmFpc2VzL1dhcm5zIGlzIGJlaW5nIHVzZWQgYXMgYQogICAgICAgICBjb250ZXh0IG1hbmFnZXIsIHNvIGNoZWNrIGZvciBhICdtc2cnIGt3YXJnIGFuZCByZXR1cm4gc2VsZi4KLSAgICAgICAgSWYgY2FsbGFibGVfb2JqIGlzIG5vdCBOb25lLCBjYWxsIGl0IHBhc3NpbmcgYXJncyBhbmQga3dhcmdzLgorICAgICAgICBJZiBhcmdzIGlzIG5vdCBlbXB0eSwgY2FsbCBhIGNhbGxhYmxlIHBhc3NpbmcgcG9zaXRpb25hbCBhbmQga2V5d29yZAorICAgICAgICBhcmd1bWVudHMuCiAgICAgICAgICIiIgotICAgICAgICBpZiBjYWxsYWJsZV9vYmogaXMgTm9uZToKKyAgICAgICAgaWYgbm90IF9pc19zdWJ0eXBlKHNlbGYuZXhwZWN0ZWQsIHNlbGYuX2Jhc2VfdHlwZSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVzKCkgYXJnIDEgbXVzdCBiZSAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBzZWxmLl9iYXNlX3R5cGVfc3RyKSkKKyAgICAgICAgaWYgYXJncyBhbmQgYXJnc1swXSBpcyBOb25lOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiY2FsbGFibGUgaXMgTm9uZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMykKKyAgICAgICAgICAgIGFyZ3MgPSAoKQorICAgICAgICBpZiBub3QgYXJnczoKICAgICAgICAgICAgIHNlbGYubXNnID0ga3dhcmdzLnBvcCgnbXNnJywgTm9uZSkKKyAgICAgICAgICAgIGlmIGt3YXJnczoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCclciBpcyBhbiBpbnZhbGlkIGtleXdvcmQgYXJndW1lbnQgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGlzIGZ1bmN0aW9uJyAlIG5leHQoaXRlcihrd2FyZ3MpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMykKICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2FsbGFibGVfb2JqLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5vYmpfbmFtZSA9IGNhbGxhYmxlX29iai5fX25hbWVfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gc3RyKGNhbGxhYmxlX29iaikKICAgICAgICAgd2l0aCBzZWxmOgogICAgICAgICAgICAgY2FsbGFibGVfb2JqKCphcmdzLCAqKmt3YXJncykKIApAQCAtMTY1LDYgKzE3OSw5IEBACiBjbGFzcyBfQXNzZXJ0UmFpc2VzQ29udGV4dChfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQpOgogICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydFJhaXNlcyogbWV0aG9kcy4iIiIKIAorICAgIF9iYXNlX3R5cGUgPSBCYXNlRXhjZXB0aW9uCisgICAgX2Jhc2VfdHlwZV9zdHIgPSAnYW4gZXhjZXB0aW9uIHR5cGUgb3IgdHVwbGUgb2YgZXhjZXB0aW9uIHR5cGVzJworCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKIApAQCAtMTk5LDYgKzIxNiw5IEBACiBjbGFzcyBfQXNzZXJ0V2FybnNDb250ZXh0KF9Bc3NlcnRSYWlzZXNCYXNlQ29udGV4dCk6CiAgICAgIiIiQSBjb250ZXh0IG1hbmFnZXIgdXNlZCB0byBpbXBsZW1lbnQgVGVzdENhc2UuYXNzZXJ0V2FybnMqIG1ldGhvZHMuIiIiCiAKKyAgICBfYmFzZV90eXBlID0gV2FybmluZworICAgIF9iYXNlX3R5cGVfc3RyID0gJ2Egd2FybmluZyB0eXBlIG9yIHR1cGxlIG9mIHdhcm5pbmcgdHlwZXMnCisKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICAjIFRoZSBfX3dhcm5pbmdyZWdpc3RyeV9fJ3MgbmVlZCB0byBiZSBpbiBhIHByaXN0aW5lIHN0YXRlIGZvciB0ZXN0cwogICAgICAgICAjIHRvIHdvcmsgcHJvcGVybHkuCkBAIC02NzcsMTUgKzY5NywxNSBAQAogICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgogICAgICAgICAgICAgcmV0dXJuICAnJXMgOiAlcycgJSAoc2FmZV9yZXByKHN0YW5kYXJkTXNnKSwgc2FmZV9yZXByKG1zZykpCiAKLSAgICBkZWYgYXNzZXJ0UmFpc2VzKHNlbGYsIGV4Y0NsYXNzLCBjYWxsYWJsZU9iaj1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAiIiJGYWlsIHVubGVzcyBhbiBleGNlcHRpb24gb2YgY2xhc3MgZXhjQ2xhc3MgaXMgcmFpc2VkCi0gICAgICAgICAgIGJ5IGNhbGxhYmxlT2JqIHdoZW4gaW52b2tlZCB3aXRoIGFyZ3VtZW50cyBhcmdzIGFuZCBrZXl3b3JkCi0gICAgICAgICAgIGFyZ3VtZW50cyBrd2FyZ3MuIElmIGEgZGlmZmVyZW50IHR5cGUgb2YgZXhjZXB0aW9uIGlzCisgICAgZGVmIGFzc2VydFJhaXNlcyhzZWxmLCBleHBlY3RlZF9leGNlcHRpb24sICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkZhaWwgdW5sZXNzIGFuIGV4Y2VwdGlvbiBvZiBjbGFzcyBleHBlY3RlZF9leGNlcHRpb24gaXMgcmFpc2VkCisgICAgICAgICAgIGJ5IHRoZSBjYWxsYWJsZSB3aGVuIGludm9rZWQgd2l0aCBzcGVjaWZpZWQgcG9zaXRpb25hbCBhbmQKKyAgICAgICAgICAga2V5d29yZCBhcmd1bWVudHMuIElmIGEgZGlmZmVyZW50IHR5cGUgb2YgZXhjZXB0aW9uIGlzCiAgICAgICAgICAgIHJhaXNlZCwgaXQgd2lsbCBub3QgYmUgY2F1Z2h0LCBhbmQgdGhlIHRlc3QgY2FzZSB3aWxsIGJlCiAgICAgICAgICAgIGRlZW1lZCB0byBoYXZlIHN1ZmZlcmVkIGFuIGVycm9yLCBleGFjdGx5IGFzIGZvciBhbgogICAgICAgICAgICB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4KIAotICAgICAgICAgICBJZiBjYWxsZWQgd2l0aCBjYWxsYWJsZU9iaiBvbWl0dGVkIG9yIE5vbmUsIHdpbGwgcmV0dXJuIGEKKyAgICAgICAgICAgSWYgY2FsbGVkIHdpdGggdGhlIGNhbGxhYmxlIGFuZCBhcmd1bWVudHMgb21pdHRlZCwgd2lsbCByZXR1cm4gYQogICAgICAgICAgICBjb250ZXh0IG9iamVjdCB1c2VkIGxpa2UgdGhpczo6CiAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNlcHRpb24pOgpAQCAtNzAzLDE4ICs3MjMsMTggQEAKICAgICAgICAgICAgICAgIHRoZV9leGNlcHRpb24gPSBjbS5leGNlcHRpb24KICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlX2V4Y2VwdGlvbi5lcnJvcl9jb2RlLCAzKQogICAgICAgICAiIiIKLSAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRSYWlzZXNDb250ZXh0KGV4Y0NsYXNzLCBzZWxmLCBjYWxsYWJsZU9iaikKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRSYWlzZXMnLCBjYWxsYWJsZU9iaiwgYXJncywga3dhcmdzKQorICAgICAgICBjb250ZXh0ID0gX0Fzc2VydFJhaXNlc0NvbnRleHQoZXhwZWN0ZWRfZXhjZXB0aW9uLCBzZWxmKQorICAgICAgICByZXR1cm4gY29udGV4dC5oYW5kbGUoJ2Fzc2VydFJhaXNlcycsIGFyZ3MsIGt3YXJncykKIAotICAgIGRlZiBhc3NlcnRXYXJucyhzZWxmLCBleHBlY3RlZF93YXJuaW5nLCBjYWxsYWJsZV9vYmo9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICBkZWYgYXNzZXJ0V2FybnMoc2VsZiwgZXhwZWN0ZWRfd2FybmluZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIiIiRmFpbCB1bmxlc3MgYSB3YXJuaW5nIG9mIGNsYXNzIHdhcm5DbGFzcyBpcyB0cmlnZ2VyZWQKLSAgICAgICAgICAgYnkgY2FsbGFibGVfb2JqIHdoZW4gaW52b2tlZCB3aXRoIGFyZ3VtZW50cyBhcmdzIGFuZCBrZXl3b3JkCi0gICAgICAgICAgIGFyZ3VtZW50cyBrd2FyZ3MuICBJZiBhIGRpZmZlcmVudCB0eXBlIG9mIHdhcm5pbmcgaXMKKyAgICAgICAgICAgYnkgdGhlIGNhbGxhYmxlIHdoZW4gaW52b2tlZCB3aXRoIHNwZWNpZmllZCBwb3NpdGlvbmFsIGFuZAorICAgICAgICAgICBrZXl3b3JkIGFyZ3VtZW50cy4gIElmIGEgZGlmZmVyZW50IHR5cGUgb2Ygd2FybmluZyBpcwogICAgICAgICAgICB0cmlnZ2VyZWQsIGl0IHdpbGwgbm90IGJlIGhhbmRsZWQ6IGRlcGVuZGluZyBvbiB0aGUgb3RoZXIKICAgICAgICAgICAgd2FybmluZyBmaWx0ZXJpbmcgcnVsZXMgaW4gZWZmZWN0LCBpdCBtaWdodCBiZSBzaWxlbmNlZCwgcHJpbnRlZAogICAgICAgICAgICBvdXQsIG9yIHJhaXNlZCBhcyBhbiBleGNlcHRpb24uCiAKLSAgICAgICAgICAgSWYgY2FsbGVkIHdpdGggY2FsbGFibGVfb2JqIG9taXR0ZWQgb3IgTm9uZSwgd2lsbCByZXR1cm4gYQorICAgICAgICAgICBJZiBjYWxsZWQgd2l0aCB0aGUgY2FsbGFibGUgYW5kIGFyZ3VtZW50cyBvbWl0dGVkLCB3aWxsIHJldHVybiBhCiAgICAgICAgICAgIGNvbnRleHQgb2JqZWN0IHVzZWQgbGlrZSB0aGlzOjoKIAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhTb21lV2FybmluZyk6CkBAIC03MzQsOCArNzU0LDggQEAKICAgICAgICAgICAgICAgIHRoZV93YXJuaW5nID0gY20ud2FybmluZwogICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVfd2FybmluZy5zb21lX2F0dHJpYnV0ZSwgMTQ3KQogICAgICAgICAiIiIKLSAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRXYXJuc0NvbnRleHQoZXhwZWN0ZWRfd2FybmluZywgc2VsZiwgY2FsbGFibGVfb2JqKQotICAgICAgICByZXR1cm4gY29udGV4dC5oYW5kbGUoJ2Fzc2VydFdhcm5zJywgY2FsbGFibGVfb2JqLCBhcmdzLCBrd2FyZ3MpCisgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0V2FybnNDb250ZXh0KGV4cGVjdGVkX3dhcm5pbmcsIHNlbGYpCisgICAgICAgIHJldHVybiBjb250ZXh0LmhhbmRsZSgnYXNzZXJ0V2FybnMnLCBhcmdzLCBrd2FyZ3MpCiAKICAgICBkZWYgYXNzZXJ0TG9ncyhzZWxmLCBsb2dnZXI9Tm9uZSwgbGV2ZWw9Tm9uZSk6CiAgICAgICAgICIiIkZhaWwgdW5sZXNzIGEgbG9nIG1lc3NhZ2Ugb2YgbGV2ZWwgKmxldmVsKiBvciBoaWdoZXIgaXMgZW1pdHRlZApAQCAtODE2LDcgKzgzNiw3IEBACiAgICAgICAgICAgIGJldHdlZW4gdGhlIHR3byBvYmplY3RzIGlzIG1vcmUgdGhhbiB0aGUgZ2l2ZW4gZGVsdGEuCiAKICAgICAgICAgICAgTm90ZSB0aGF0IGRlY2ltYWwgcGxhY2VzIChmcm9tIHplcm8pIGFyZSB1c3VhbGx5IG5vdCB0aGUgc2FtZQotICAgICAgICAgICBhcyBzaWduaWZpY2FudCBkaWdpdHMgKG1lYXN1cmVkIGZyb20gdGhlIG1vc3Qgc2lnbmZpY2FudCBkaWdpdCkuCisgICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWdpdCkuCiAKICAgICAgICAgICAgSWYgdGhlIHR3byBvYmplY3RzIGNvbXBhcmUgZXF1YWwgdGhlbiB0aGV5IHdpbGwgYXV0b21hdGljYWxseQogICAgICAgICAgICBjb21wYXJlIGFsbW9zdCBlcXVhbC4KQEAgLTg1NSw3ICs4NzUsNyBAQAogICAgICAgICAgICBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cyBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIGRlbHRhLgogCiAgICAgICAgICAgIE5vdGUgdGhhdCBkZWNpbWFsIHBsYWNlcyAoZnJvbSB6ZXJvKSBhcmUgdXN1YWxseSBub3QgdGhlIHNhbWUKLSAgICAgICAgICAgYXMgc2lnbmlmaWNhbnQgZGlnaXRzIChtZWFzdXJlZCBmcm9tIHRoZSBtb3N0IHNpZ25maWNhbnQgZGlnaXQpLgorICAgICAgICAgICBhcyBzaWduaWZpY2FudCBkaWdpdHMgKG1lYXN1cmVkIGZyb20gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQpLgogCiAgICAgICAgICAgIE9iamVjdHMgdGhhdCBhcmUgZXF1YWwgYXV0b21hdGljYWxseSBmYWlsLgogICAgICAgICAiIiIKQEAgLTk0NCw3ICs5NjQsNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgaXRlbTEgIT0gaXRlbTI6CiAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuRmlyc3QgZGlmZmVyaW5nIGVsZW1lbnQgJWQ6XG4lc1xuJXNcbicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGksIGl0ZW0xLCBpdGVtMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGksKSArIF9jb21tb25fc2hvcnRlbl9yZXByKGl0ZW0xLCBpdGVtMikpKQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiAobGVuMSA9PSBsZW4yIGFuZCBzZXFfdHlwZSBpcyBOb25lIGFuZApAQCAtOTU3LDcgKzk3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbGVtZW50cy5cbicgJSAoc2VxX3R5cGVfbmFtZSwgbGVuMSAtIGxlbjIpKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnRmlyc3QgZXh0cmEgZWxlbWVudCAlZDpcbiVzXG4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVuMiwgc2VxMVtsZW4yXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbjIsIHNhZmVfcmVwcihzZXExW2xlbjJdKSkpCiAgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEluZGV4RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdVbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIGZpcnN0ICVzXG4nICUgKGxlbjIsIHNlcV90eXBlX25hbWUpKQpAQCAtOTY2LDcgKzk4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbGVtZW50cy5cbicgJSAoc2VxX3R5cGVfbmFtZSwgbGVuMiAtIGxlbjEpKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnRmlyc3QgZXh0cmEgZWxlbWVudCAlZDpcbiVzXG4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVuMSwgc2VxMltsZW4xXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbjEsIHNhZmVfcmVwcihzZXEyW2xlbjFdKSkpCiAgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEluZGV4RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdVbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIHNlY29uZCAlc1xuJyAlIChsZW4xLCBzZXFfdHlwZV9uYW1lKSkKQEAgLTEyMjIsMjYgKzEyNDIsMjMgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQogCiAgICAgZGVmIGFzc2VydFJhaXNlc1JlZ2V4KHNlbGYsIGV4cGVjdGVkX2V4Y2VwdGlvbiwgZXhwZWN0ZWRfcmVnZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlX29iaj1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiJBc3NlcnRzIHRoYXQgdGhlIG1lc3NhZ2UgaW4gYSByYWlzZWQgZXhjZXB0aW9uIG1hdGNoZXMgYSByZWdleC4KIAogICAgICAgICBBcmdzOgogICAgICAgICAgICAgZXhwZWN0ZWRfZXhjZXB0aW9uOiBFeGNlcHRpb24gY2xhc3MgZXhwZWN0ZWQgdG8gYmUgcmFpc2VkLgogICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXg6IFJlZ2V4IChyZSBwYXR0ZXJuIG9iamVjdCBvciBzdHJpbmcpIGV4cGVjdGVkCiAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGZvdW5kIGluIGVycm9yIG1lc3NhZ2UuCi0gICAgICAgICAgICBjYWxsYWJsZV9vYmo6IEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4KKyAgICAgICAgICAgIGFyZ3M6IEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhbmQgZXh0cmEgcG9zaXRpb25hbCBhcmdzLgorICAgICAgICAgICAga3dhcmdzOiBFeHRyYSBrd2FyZ3MuCiAgICAgICAgICAgICBtc2c6IE9wdGlvbmFsIG1lc3NhZ2UgdXNlZCBpbiBjYXNlIG9mIGZhaWx1cmUuIENhbiBvbmx5IGJlIHVzZWQKICAgICAgICAgICAgICAgICAgICAgd2hlbiBhc3NlcnRSYWlzZXNSZWdleCBpcyB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgotICAgICAgICAgICAgYXJnczogRXh0cmEgYXJncy4KLSAgICAgICAgICAgIGt3YXJnczogRXh0cmEga3dhcmdzLgogICAgICAgICAiIiIKLSAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRSYWlzZXNDb250ZXh0KGV4cGVjdGVkX2V4Y2VwdGlvbiwgc2VsZiwgY2FsbGFibGVfb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXgpCi0KLSAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRSYWlzZXNSZWdleCcsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKQorICAgICAgICBjb250ZXh0ID0gX0Fzc2VydFJhaXNlc0NvbnRleHQoZXhwZWN0ZWRfZXhjZXB0aW9uLCBzZWxmLCBleHBlY3RlZF9yZWdleCkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRSYWlzZXNSZWdleCcsIGFyZ3MsIGt3YXJncykKIAogICAgIGRlZiBhc3NlcnRXYXJuc1JlZ2V4KHNlbGYsIGV4cGVjdGVkX3dhcm5pbmcsIGV4cGVjdGVkX3JlZ2V4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlX29iaj1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiIkFzc2VydHMgdGhhdCB0aGUgbWVzc2FnZSBpbiBhIHRyaWdnZXJlZCB3YXJuaW5nIG1hdGNoZXMgYSByZWdleHAuCiAgICAgICAgIEJhc2ljIGZ1bmN0aW9uaW5nIGlzIHNpbWlsYXIgdG8gYXNzZXJ0V2FybnMoKSB3aXRoIHRoZSBhZGRpdGlvbgogICAgICAgICB0aGF0IG9ubHkgd2FybmluZ3Mgd2hvc2UgbWVzc2FnZXMgYWxzbyBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uCkBAIC0xMjUxLDE1ICsxMjY4LDEzIEBACiAgICAgICAgICAgICBleHBlY3RlZF93YXJuaW5nOiBXYXJuaW5nIGNsYXNzIGV4cGVjdGVkIHRvIGJlIHRyaWdnZXJlZC4KICAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4OiBSZWdleCAocmUgcGF0dGVybiBvYmplY3Qgb3Igc3RyaW5nKSBleHBlY3RlZAogICAgICAgICAgICAgICAgICAgICB0byBiZSBmb3VuZCBpbiBlcnJvciBtZXNzYWdlLgotICAgICAgICAgICAgY2FsbGFibGVfb2JqOiBGdW5jdGlvbiB0byBiZSBjYWxsZWQuCisgICAgICAgICAgICBhcmdzOiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYW5kIGV4dHJhIHBvc2l0aW9uYWwgYXJncy4KKyAgICAgICAgICAgIGt3YXJnczogRXh0cmEga3dhcmdzLgogICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHVzZWQgaW4gY2FzZSBvZiBmYWlsdXJlLiBDYW4gb25seSBiZSB1c2VkCiAgICAgICAgICAgICAgICAgICAgIHdoZW4gYXNzZXJ0V2FybnNSZWdleCBpcyB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgotICAgICAgICAgICAgYXJnczogRXh0cmEgYXJncy4KLSAgICAgICAgICAgIGt3YXJnczogRXh0cmEga3dhcmdzLgogICAgICAgICAiIiIKLSAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRXYXJuc0NvbnRleHQoZXhwZWN0ZWRfd2FybmluZywgc2VsZiwgY2FsbGFibGVfb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleCkKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRXYXJuc1JlZ2V4JywgY2FsbGFibGVfb2JqLCBhcmdzLCBrd2FyZ3MpCisgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0V2FybnNDb250ZXh0KGV4cGVjdGVkX3dhcm5pbmcsIHNlbGYsIGV4cGVjdGVkX3JlZ2V4KQorICAgICAgICByZXR1cm4gY29udGV4dC5oYW5kbGUoJ2Fzc2VydFdhcm5zUmVnZXgnLCBhcmdzLCBrd2FyZ3MpCiAKICAgICBkZWYgYXNzZXJ0UmVnZXgoc2VsZiwgdGV4dCwgZXhwZWN0ZWRfcmVnZXgsIG1zZz1Ob25lKToKICAgICAgICAgIiIiRmFpbCB0aGUgdGVzdCB1bmxlc3MgdGhlIHRleHQgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uLiIiIgpAQCAtMTI2Nyw4ICsxMjgyLDEwIEBACiAgICAgICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfcmVnZXgsICJleHBlY3RlZF9yZWdleCBtdXN0IG5vdCBiZSBlbXB0eS4iCiAgICAgICAgICAgICBleHBlY3RlZF9yZWdleCA9IHJlLmNvbXBpbGUoZXhwZWN0ZWRfcmVnZXgpCiAgICAgICAgIGlmIG5vdCBleHBlY3RlZF9yZWdleC5zZWFyY2godGV4dCk6Ci0gICAgICAgICAgICBtc2cgPSBtc2cgb3IgIlJlZ2V4IGRpZG4ndCBtYXRjaCIKLSAgICAgICAgICAgIG1zZyA9ICclczogJXIgbm90IGZvdW5kIGluICVyJyAlIChtc2csIGV4cGVjdGVkX3JlZ2V4LnBhdHRlcm4sIHRleHQpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICJSZWdleCBkaWRuJ3QgbWF0Y2g6ICVyIG5vdCBmb3VuZCBpbiAlciIgJSAoCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXgucGF0dGVybiwgdGV4dCkKKyAgICAgICAgICAgICMgX2Zvcm1hdE1lc3NhZ2UgZW5zdXJlcyB0aGUgbG9uZ01lc3NhZ2Ugb3B0aW9uIGlzIHJlc3BlY3RlZAorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQogICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKIAogICAgIGRlZiBhc3NlcnROb3RSZWdleChzZWxmLCB0ZXh0LCB1bmV4cGVjdGVkX3JlZ2V4LCBtc2c9Tm9uZSk6CkBAIC0xMjc3LDExICsxMjk0LDEyIEBACiAgICAgICAgICAgICB1bmV4cGVjdGVkX3JlZ2V4ID0gcmUuY29tcGlsZSh1bmV4cGVjdGVkX3JlZ2V4KQogICAgICAgICBtYXRjaCA9IHVuZXhwZWN0ZWRfcmVnZXguc2VhcmNoKHRleHQpCiAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgbXNnID0gbXNnIG9yICJSZWdleCBtYXRjaGVkIgotICAgICAgICAgICAgbXNnID0gJyVzOiAlciBtYXRjaGVzICVyIGluICVyJyAlIChtc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRbbWF0Y2guc3RhcnQoKTptYXRjaC5lbmQoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWRfcmVnZXgucGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ1JlZ2V4IG1hdGNoZWQ6ICVyIG1hdGNoZXMgJXIgaW4gJXInICUgKAorICAgICAgICAgICAgICAgIHRleHRbbWF0Y2guc3RhcnQoKSA6IG1hdGNoLmVuZCgpXSwKKyAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3JlZ2V4LnBhdHRlcm4sCisgICAgICAgICAgICAgICAgdGV4dCkKKyAgICAgICAgICAgICMgX2Zvcm1hdE1lc3NhZ2UgZW5zdXJlcyB0aGUgbG9uZ01lc3NhZ2Ugb3B0aW9uIGlzIHJlc3BlY3RlZAorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQogICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKIAogCkBAIC0xMzAzLDYgKzEzMjEsNyBAQAogICAgIGZhaWxJZiA9IF9kZXByZWNhdGUoYXNzZXJ0RmFsc2UpCiAgICAgYXNzZXJ0UmFpc2VzUmVnZXhwID0gX2RlcHJlY2F0ZShhc3NlcnRSYWlzZXNSZWdleCkKICAgICBhc3NlcnRSZWdleHBNYXRjaGVzID0gX2RlcHJlY2F0ZShhc3NlcnRSZWdleCkKKyAgICBhc3NlcnROb3RSZWdleHBNYXRjaGVzID0gX2RlcHJlY2F0ZShhc3NlcnROb3RSZWdleCkKIAogCiAKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CmluZGV4IGFmMzkyMTYuLmViNDQ3ZDcgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpAQCAtNiw2ICs2LDcgQEAKIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCB0eXBlcwogaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHdhcm5pbmdzCiAKIGZyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaAogCkBAIC0xMyw5ICsxNCw5IEBACiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKLSMgd2hhdCBhYm91dCAucHljIG9yIC5weW8gKGV0YykKKyMgd2hhdCBhYm91dCAucHljIChldGMpCiAjIHdlIHdvdWxkIG5lZWQgdG8gYXZvaWQgbG9hZGluZyB0aGUgc2FtZSB0ZXN0cyBtdWx0aXBsZSB0aW1lcwotIyBmcm9tICcucHknLCAnLnB5YycgKmFuZCogJy5weW8nCisjIGZyb20gJy5weScsICphbmQqICcucHljJwogVkFMSURfTU9EVUxFX05BTUUgPSByZS5jb21waWxlKHInW19hLXpdXHcqXC5weSQnLCByZS5JR05PUkVDQVNFKQogCiAKQEAgLTM1LDE1ICszNiwxOCBAQAogCiAKIGRlZiBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc3VpdGVDbGFzcyk6Ci0gICAgbWVzc2FnZSA9ICdGYWlsZWQgdG8gaW1wb3J0IHRlc3QgbW9kdWxlOiAlc1xuJXMnICUgKG5hbWUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCi0gICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF90ZXN0KG5hbWUsIEltcG9ydEVycm9yKG1lc3NhZ2UpLCBzdWl0ZUNsYXNzKQorICAgIG1lc3NhZ2UgPSAnRmFpbGVkIHRvIGltcG9ydCB0ZXN0IG1vZHVsZTogJXNcbiVzJyAlICgKKyAgICAgICAgbmFtZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICByZXR1cm4gX21ha2VfZmFpbGVkX3Rlc3QobmFtZSwgSW1wb3J0RXJyb3IobWVzc2FnZSksIHN1aXRlQ2xhc3MsIG1lc3NhZ2UpCiAKIGRlZiBfbWFrZV9mYWlsZWRfbG9hZF90ZXN0cyhuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgotICAgIHJldHVybiBfbWFrZV9mYWlsZWRfdGVzdChuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpCisgICAgbWVzc2FnZSA9ICdGYWlsZWQgdG8gY2FsbCBsb2FkX3Rlc3RzOlxuJXMnICUgKHRyYWNlYmFjay5mb3JtYXRfZXhjKCksKQorICAgIHJldHVybiBfbWFrZV9mYWlsZWRfdGVzdCgKKyAgICAgICAgbmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzLCBtZXNzYWdlKQogCi1kZWYgX21ha2VfZmFpbGVkX3Rlc3QobWV0aG9kbmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKToKK2RlZiBfbWFrZV9mYWlsZWRfdGVzdChtZXRob2RuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MsIG1lc3NhZ2UpOgogICAgIHRlc3QgPSBfRmFpbGVkVGVzdChtZXRob2RuYW1lLCBleGNlcHRpb24pCi0gICAgcmV0dXJuIHN1aXRlQ2xhc3MoKHRlc3QsKSkKKyAgICByZXR1cm4gc3VpdGVDbGFzcygodGVzdCwpKSwgbWVzc2FnZQogCiBkZWYgX21ha2Vfc2tpcHBlZF90ZXN0KG1ldGhvZG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcyk6CiAgICAgQGNhc2Uuc2tpcChzdHIoZXhjZXB0aW9uKSkKQEAgLTY5LDYgKzczLDEzIEBACiAgICAgc3VpdGVDbGFzcyA9IHN1aXRlLlRlc3RTdWl0ZQogICAgIF90b3BfbGV2ZWxfZGlyID0gTm9uZQogCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0TG9hZGVyLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuZXJyb3JzID0gW10KKyAgICAgICAgIyBUcmFja3MgcGFja2FnZXMgd2hpY2ggd2UgaGF2ZSBjYWxsZWQgaW50byB2aWEgbG9hZF90ZXN0cywgdG8KKyAgICAgICAgIyBhdm9pZCBpbmZpbml0ZSByZS1lbnRyYW5jeS4KKyAgICAgICAgc2VsZi5fbG9hZGluZ19wYWNrYWdlcyA9IHNldCgpCisKICAgICBkZWYgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgogICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRlc3RDYXNlQ2xhc3MiIiIKICAgICAgICAgaWYgaXNzdWJjbGFzcyh0ZXN0Q2FzZUNsYXNzLCBzdWl0ZS5UZXN0U3VpdGUpOgpAQCAtODEsOCArOTIsMzAgQEAKICAgICAgICAgbG9hZGVkX3N1aXRlID0gc2VsZi5zdWl0ZUNsYXNzKG1hcCh0ZXN0Q2FzZUNsYXNzLCB0ZXN0Q2FzZU5hbWVzKSkKICAgICAgICAgcmV0dXJuIGxvYWRlZF9zdWl0ZQogCi0gICAgZGVmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZiwgbW9kdWxlLCB1c2VfbG9hZF90ZXN0cz1UcnVlKToKKyAgICAjIFhYWCBBZnRlciBQeXRob24gMy41LCByZW1vdmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrcyBmb3IKKyAgICAjIHVzZV9sb2FkX3Rlc3RzIGRlcHJlY2F0aW9uIHZpYSAqYXJncyBhbmQgKiprd3MuICBTZWUgaXNzdWUgMTY2NjIuCisgICAgZGVmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZiwgbW9kdWxlLCAqYXJncywgcGF0dGVybj1Ob25lLCAqKmt3cyk6CiAgICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIGdpdmVuIG1vZHVsZSIiIgorICAgICAgICAjIFRoaXMgbWV0aG9kIHVzZWQgdG8gdGFrZSBhbiB1bmRvY3VtZW50ZWQgYW5kIHVub2ZmaWNpYWwKKyAgICAgICAgIyB1c2VfbG9hZF90ZXN0cyBhcmd1bWVudC4gIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZSBzdGlsbAorICAgICAgICAjIGFjY2VwdCB0aGUgYXJndW1lbnQgKHdoaWNoIGNhbiBhbHNvIGJlIHRoZSBmaXJzdCBwb3NpdGlvbikgYnV0IHdlCisgICAgICAgICMgaWdub3JlIGl0IGFuZCBpc3N1ZSBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgaWYgaXQncyBwcmVzZW50LgorICAgICAgICBpZiBsZW4oYXJncykgPiAwIG9yICd1c2VfbG9hZF90ZXN0cycgaW4ga3dzOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigndXNlX2xvYWRfdGVzdHMgaXMgZGVwcmVjYXRlZCBhbmQgaWdub3JlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIGt3cy5wb3AoJ3VzZV9sb2FkX3Rlc3RzJywgTm9uZSkKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAgICAgICAgICAgICMgQ29tcGxhaW4gYWJvdXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMsIGJ1dCBkb24ndCBmb3JnZXQgdGhlCisgICAgICAgICAgICAjIHJlcXVpcmVkIGBtb2R1bGVgIGFyZ3VtZW50LgorICAgICAgICAgICAgY29tcGxhaW50ID0gbGVuKGFyZ3MpICsgMQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdsb2FkVGVzdHNGcm9tTW9kdWxlKCkgdGFrZXMgMSBwb3NpdGlvbmFsIGFyZ3VtZW50IGJ1dCB7fSB3ZXJlIGdpdmVuJy5mb3JtYXQoY29tcGxhaW50KSkKKyAgICAgICAgaWYgbGVuKGt3cykgIT0gMDoKKyAgICAgICAgICAgICMgU2luY2UgdGhlIGtleXdvcmQgYXJndW1lbnRzIGFyZSB1bnNvcnRlZCAoc2VlIFBFUCA0NjgpLCBqdXN0CisgICAgICAgICAgICAjIHBpY2sgdGhlIGFscGhhYmV0aWNhbGx5IHNvcnRlZCBmaXJzdCBhcmd1bWVudCB0byBjb21wbGFpbiBhYm91dCwKKyAgICAgICAgICAgICMgaWYgbXVsdGlwbGUgd2VyZSBnaXZlbi4gIEF0IGxlYXN0IHRoZSBlcnJvciBtZXNzYWdlIHdpbGwgYmUKKyAgICAgICAgICAgICMgcHJlZGljdGFibGUuCisgICAgICAgICAgICBjb21wbGFpbnQgPSBzb3J0ZWQoa3dzKVswXQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsb2FkVGVzdHNGcm9tTW9kdWxlKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAne30nIi5mb3JtYXQoY29tcGxhaW50KSkKICAgICAgICAgdGVzdHMgPSBbXQogICAgICAgICBmb3IgbmFtZSBpbiBkaXIobW9kdWxlKToKICAgICAgICAgICAgIG9iaiA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQpAQCAtOTEsMTIgKzEyNCwxNCBAQAogCiAgICAgICAgIGxvYWRfdGVzdHMgPSBnZXRhdHRyKG1vZHVsZSwgJ2xvYWRfdGVzdHMnLCBOb25lKQogICAgICAgICB0ZXN0cyA9IHNlbGYuc3VpdGVDbGFzcyh0ZXN0cykKLSAgICAgICAgaWYgdXNlX2xvYWRfdGVzdHMgYW5kIGxvYWRfdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGxvYWRfdGVzdHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRfdGVzdHMoc2VsZiwgdGVzdHMsIE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRfdGVzdHMoc2VsZiwgdGVzdHMsIHBhdHRlcm4pCiAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF9sb2FkX3Rlc3RzKG1vZHVsZS5fX25hbWVfXywgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdWl0ZUNsYXNzKQorICAgICAgICAgICAgICAgIGVycm9yX2Nhc2UsIGVycm9yX21lc3NhZ2UgPSBfbWFrZV9mYWlsZWRfbG9hZF90ZXN0cygKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbmFtZV9fLCBlLCBzZWxmLnN1aXRlQ2xhc3MpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGVycm9yX21lc3NhZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX2Nhc2UKICAgICAgICAgcmV0dXJuIHRlc3RzCiAKICAgICBkZWYgbG9hZFRlc3RzRnJvbU5hbWUoc2VsZiwgbmFtZSwgbW9kdWxlPU5vbmUpOgpAQCAtMTA5LDIwICsxNDQsNDcgQEAKICAgICAgICAgVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIHRoZSBuYW1lcyByZWxhdGl2ZSB0byBhIGdpdmVuIG1vZHVsZS4KICAgICAgICAgIiIiCiAgICAgICAgIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpCisgICAgICAgIGVycm9yX2Nhc2UsIGVycm9yX21lc3NhZ2UgPSBOb25lLCBOb25lCiAgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgogICAgICAgICAgICAgcGFydHNfY29weSA9IHBhcnRzWzpdCiAgICAgICAgICAgICB3aGlsZSBwYXJ0c19jb3B5OgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXygnLicuam9pbihwYXJ0c19jb3B5KSkKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnLicuam9pbihwYXJ0c19jb3B5KQorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lKQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZGVsIHBhcnRzX2NvcHlbLTFdCisgICAgICAgICAgICAgICAgICAgIG5leHRfYXR0cmlidXRlID0gcGFydHNfY29weS5wb3AoKQorICAgICAgICAgICAgICAgICAgICAjIExhc3QgZXJyb3Igc28gd2UgY2FuIGdpdmUgaXQgdG8gdGhlIHVzZXIgaWYgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9jYXNlLCBlcnJvcl9tZXNzYWdlID0gX21ha2VfZmFpbGVkX2ltcG9ydF90ZXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9hdHRyaWJ1dGUsIHNlbGYuc3VpdGVDbGFzcykKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhcnRzX2NvcHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBFdmVuIHRoZSB0b3AgbGV2ZWwgaW1wb3J0IGZhaWxlZDogcmVwb3J0IHRoYXQgZXJyb3IuCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcl9jYXNlCiAgICAgICAgICAgICBwYXJ0cyA9IHBhcnRzWzE6XQogICAgICAgICBvYmogPSBtb2R1bGUKICAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6Ci0gICAgICAgICAgICBwYXJlbnQsIG9iaiA9IG9iaiwgZ2V0YXR0cihvYmosIHBhcnQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFyZW50LCBvYmogPSBvYmosIGdldGF0dHIob2JqLCBwYXJ0KQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgIyBXZSBjYW4ndCB0cmF2ZXJzZSBzb21lIHBhcnQgb2YgdGhlIG5hbWUuCisgICAgICAgICAgICAgICAgaWYgKGdldGF0dHIob2JqLCAnX19wYXRoX18nLCBOb25lKSBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgICAgICBhbmQgZXJyb3JfY2FzZSBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIHBhY2thZ2UgKG5vIF9fcGF0aF9fIHBlciBpbXBvcnRsaWIgZG9jcyksIGFuZCB3ZQorICAgICAgICAgICAgICAgICAgICAjIGVuY291bnRlcmVkIGFuIGVycm9yIGltcG9ydGluZyBzb21ldGhpbmcuIFdlIGNhbm5vdCB0ZWxsCisgICAgICAgICAgICAgICAgICAgICMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwYWNrYWdlLldyb25nTmFtZVRlc3RDbGFzcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgIyBwYWNrYWdlLndyb25nX21vZHVsZV9uYW1lIHNvIHdlIGp1c3QgcmVwb3J0IHRoZQorICAgICAgICAgICAgICAgICAgICAjIEltcG9ydEVycm9yIC0gaXQgaXMgbW9yZSBpbmZvcm1hdGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGVycm9yX21lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcl9jYXNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIHdlIHNpZ25hbCB0aGF0IGFuIEF0dHJpYnV0ZUVycm9yIGhhcyBvY2N1cnJlZC4KKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfY2FzZSwgZXJyb3JfbWVzc2FnZSA9IF9tYWtlX2ZhaWxlZF90ZXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgcGFydCwgZSwgc2VsZi5zdWl0ZUNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBhY2Nlc3MgYXR0cmlidXRlOlxuJXMnICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5mb3JtYXRfZXhjKCksKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGVycm9yX21lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcl9jYXNlCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLk1vZHVsZVR5cGUpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZFRlc3RzRnJvbU1vZHVsZShvYmopCkBAIC0xODEsOSArMjQzLDEzIEBACiAKICAgICAgICAgSWYgYSB0ZXN0IHBhY2thZ2UgbmFtZSAoZGlyZWN0b3J5IHdpdGggJ19faW5pdF9fLnB5JykgbWF0Y2hlcyB0aGUKICAgICAgICAgcGF0dGVybiB0aGVuIHRoZSBwYWNrYWdlIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSAnbG9hZF90ZXN0cycgZnVuY3Rpb24uIElmCi0gICAgICAgIHRoaXMgZXhpc3RzIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuLgorICAgICAgICB0aGlzIGV4aXN0cyB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pIHVubGVzcworICAgICAgICB0aGUgcGFja2FnZSBoYXMgYWxyZWFkeSBoYWQgbG9hZF90ZXN0cyBjYWxsZWQgZnJvbSB0aGUgc2FtZSBkaXNjb3ZlcnkKKyAgICAgICAgaW52b2NhdGlvbiwgaW4gd2hpY2ggY2FzZSB0aGUgcGFja2FnZSBtb2R1bGUgb2JqZWN0IGlzIG5vdCBzY2FubmVkIGZvcgorICAgICAgICB0ZXN0cyAtIHRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYSBwYWNrYWdlIHVzZXMgZGlzY292ZXIgdG8gZnVydGhlcgorICAgICAgICBkaXNjb3ZlciBjaGlsZCB0ZXN0cyB0aGF0IGluZmluaXRlIHJlY3Vyc2lvbiBkb2VzIG5vdCBoYXBwZW4uCiAKLSAgICAgICAgSWYgbG9hZF90ZXN0cyBleGlzdHMgdGhlbiBkaXNjb3ZlcnkgZG9lcyAgKm5vdCogcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlLAorICAgICAgICBJZiBsb2FkX3Rlc3RzIGV4aXN0cyB0aGVuIGRpc2NvdmVyeSBkb2VzICpub3QqIHJlY3Vyc2UgaW50byB0aGUgcGFja2FnZSwKICAgICAgICAgbG9hZF90ZXN0cyBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyBhbGwgdGVzdHMgaW4gdGhlIHBhY2thZ2UuCiAKICAgICAgICAgVGhlIHBhdHRlcm4gaXMgZGVsaWJlcmF0ZWx5IG5vdCBzdG9yZWQgYXMgYSBsb2FkZXIgYXR0cmlidXRlIHNvIHRoYXQKQEAgLTI4OCw2ICszNTQsOCBAQAogICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShmdWxsX3BhdGgpCiAKICAgICBkZWYgX2dldF9uYW1lX2Zyb21fcGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCA9PSBzZWxmLl90b3BfbGV2ZWxfZGlyOgorICAgICAgICAgICAgcmV0dXJuICcuJwogICAgICAgICBwYXRoID0gX2p5dGhvbl9hd2FyZV9zcGxpdGV4dChvcy5wYXRoLm5vcm1wYXRoKHBhdGgpKQogCiAgICAgICAgIF9yZWxwYXRoID0gb3MucGF0aC5yZWxwYXRoKHBhdGgsIHNlbGYuX3RvcF9sZXZlbF9kaXIpCkBAIC0zMDcsNjMgKzM3NSwxMTMgQEAKIAogICAgIGRlZiBfZmluZF90ZXN0cyhzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1GYWxzZSk6CiAgICAgICAgICIiIlVzZWQgYnkgZGlzY292ZXJ5LiBZaWVsZHMgdGVzdCBzdWl0ZXMgaXQgbG9hZHMuIiIiCisgICAgICAgICMgSGFuZGxlIHRoZSBfX2luaXRfXyBpbiB0aGlzIHBhY2thZ2UKKyAgICAgICAgbmFtZSA9IHNlbGYuX2dldF9uYW1lX2Zyb21fcGF0aChzdGFydF9kaXIpCisgICAgICAgICMgbmFtZSBpcyAnLicgd2hlbiBzdGFydF9kaXIgPT0gdG9wX2xldmVsX2RpciAoYW5kIHRvcF9sZXZlbF9kaXIgaXMgYnkKKyAgICAgICAgIyBkZWZpbml0aW9uIG5vdCBhIHBhY2thZ2UpLgorICAgICAgICBpZiBuYW1lICE9ICcuJyBhbmQgbmFtZSBub3QgaW4gc2VsZi5fbG9hZGluZ19wYWNrYWdlczoKKyAgICAgICAgICAgICMgbmFtZSBpcyBpbiBzZWxmLl9sb2FkaW5nX3BhY2thZ2VzIHdoaWxlIHdlIGhhdmUgY2FsbGVkIGludG8KKyAgICAgICAgICAgICMgbG9hZFRlc3RzRnJvbU1vZHVsZSB3aXRoIG5hbWUuCisgICAgICAgICAgICB0ZXN0cywgc2hvdWxkX3JlY3Vyc2UgPSBzZWxmLl9maW5kX3Rlc3RfcGF0aCgKKyAgICAgICAgICAgICAgICBzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZSkKKyAgICAgICAgICAgIGlmIHRlc3RzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RzCisgICAgICAgICAgICBpZiBub3Qgc2hvdWxkX3JlY3Vyc2U6CisgICAgICAgICAgICAgICAgIyBFaXRoZXIgYW4gZXJyb3Igb2NjdXJyZWQsIG9yIGxvYWRfdGVzdHMgd2FzIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgIyBwYWNrYWdlLgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIEhhbmRsZSB0aGUgY29udGVudHMuCiAgICAgICAgIHBhdGhzID0gc29ydGVkKG9zLmxpc3RkaXIoc3RhcnRfZGlyKSkKLQogICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzdGFydF9kaXIsIHBhdGgpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBWQUxJRF9NT0RVTEVfTkFNRS5tYXRjaChwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgIyB2YWxpZCBQeXRob24gaWRlbnRpZmllcnMgb25seQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9tYXRjaF9wYXRoKHBhdGgsIGZ1bGxfcGF0aCwgcGF0dGVybik6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgIyBpZiB0aGUgdGVzdCBmaWxlIG1hdGNoZXMsIGxvYWQgaXQKKyAgICAgICAgICAgIHRlc3RzLCBzaG91bGRfcmVjdXJzZSA9IHNlbGYuX2ZpbmRfdGVzdF9wYXRoKAorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCwgcGF0dGVybiwgbmFtZXNwYWNlKQorICAgICAgICAgICAgaWYgdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgeWllbGQgdGVzdHMKKyAgICAgICAgICAgIGlmIHNob3VsZF9yZWN1cnNlOgorICAgICAgICAgICAgICAgICMgd2UgZm91bmQgYSBwYWNrYWdlIHRoYXQgZGlkbid0IHVzZSBsb2FkX3Rlc3RzLgogICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLl9nZXRfbmFtZV9mcm9tX3BhdGgoZnVsbF9wYXRoKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRpbmdfcGFja2FnZXMuYWRkKG5hbWUpCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBjYXNlLlNraXBUZXN0IGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX3NraXBwZWRfdGVzdChuYW1lLCBlLCBzZWxmLnN1aXRlQ2xhc3MpCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc2VsZi5zdWl0ZUNsYXNzKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1vZF9maWxlID0gb3MucGF0aC5hYnNwYXRoKGdldGF0dHIobW9kdWxlLCAnX19maWxlX18nLCBmdWxsX3BhdGgpKQotICAgICAgICAgICAgICAgICAgICByZWFscGF0aCA9IF9qeXRob25fYXdhcmVfc3BsaXRleHQob3MucGF0aC5yZWFscGF0aChtb2RfZmlsZSkpCi0gICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoX25vZXh0ID0gX2p5dGhvbl9hd2FyZV9zcGxpdGV4dChvcy5wYXRoLnJlYWxwYXRoKGZ1bGxfcGF0aCkpCi0gICAgICAgICAgICAgICAgICAgIGlmIHJlYWxwYXRoLmxvd2VyKCkgIT0gZnVsbHBhdGhfbm9leHQubG93ZXIoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9kaXIgPSBvcy5wYXRoLmRpcm5hbWUocmVhbHBhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZSA9IF9qeXRob25fYXdhcmVfc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmdWxsX3BhdGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZGlyID0gb3MucGF0aC5kaXJuYW1lKGZ1bGxfcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiJXIgbW9kdWxlIGluY29ycmVjdGx5IGltcG9ydGVkIGZyb20gJXIuIEV4cGVjdGVkICVyLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklzIHRoaXMgbW9kdWxlIGdsb2JhbGx5IGluc3RhbGxlZD8iKQotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnICUgKG1vZF9uYW1lLCBtb2R1bGVfZGlyLCBleHBlY3RlZF9kaXIpKQotICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZ1bGxfcGF0aCk6Ci0gICAgICAgICAgICAgICAgaWYgKG5vdCBuYW1lc3BhY2UgYW5kCi0gICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSkpOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuLCBuYW1lc3BhY2UpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9hZGluZ19wYWNrYWdlcy5kaXNjYXJkKG5hbWUpCiAKLSAgICAgICAgICAgICAgICBsb2FkX3Rlc3RzID0gTm9uZQotICAgICAgICAgICAgICAgIHRlc3RzID0gTm9uZQotICAgICAgICAgICAgICAgIGlmIGZubWF0Y2gocGF0aCwgcGF0dGVybik6Ci0gICAgICAgICAgICAgICAgICAgICMgb25seSBjaGVjayBsb2FkX3Rlc3RzIGlmIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSBpdHNlbGYgbWF0Y2hlcyB0aGUgZmlsdGVyCi0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLl9nZXRfbmFtZV9mcm9tX3BhdGgoZnVsbF9wYXRoKQotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlID0gc2VsZi5fZ2V0X21vZHVsZV9mcm9tX25hbWUobmFtZSkKLSAgICAgICAgICAgICAgICAgICAgbG9hZF90ZXN0cyA9IGdldGF0dHIocGFja2FnZSwgJ2xvYWRfdGVzdHMnLCBOb25lKQotICAgICAgICAgICAgICAgICAgICB0ZXN0cyA9IHNlbGYubG9hZFRlc3RzRnJvbU1vZHVsZShwYWNrYWdlLCB1c2VfbG9hZF90ZXN0cz1GYWxzZSkKKyAgICBkZWYgX2ZpbmRfdGVzdF9wYXRoKHNlbGYsIGZ1bGxfcGF0aCwgcGF0dGVybiwgbmFtZXNwYWNlPUZhbHNlKToKKyAgICAgICAgIiIiVXNlZCBieSBkaXNjb3ZlcnkuCiAKLSAgICAgICAgICAgICAgICBpZiBsb2FkX3Rlc3RzIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHRlc3RzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0cyBsb2FkZWQgZnJvbSBwYWNrYWdlIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RzCi0gICAgICAgICAgICAgICAgICAgICMgcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF90ZXN0cyhmdWxsX3BhdGgsIHBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9bmFtZXNwYWNlKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxvYWRfdGVzdHMoc2VsZiwgdGVzdHMsIHBhdHRlcm4pCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX2ZhaWxlZF9sb2FkX3Rlc3RzKHBhY2thZ2UuX19uYW1lX18sIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN1aXRlQ2xhc3MpCisgICAgICAgIExvYWRzIHRlc3RzIGZyb20gYSBzaW5nbGUgZmlsZSwgb3IgYSBkaXJlY3RvcmllcycgX19pbml0X18ucHkgd2hlbgorICAgICAgICBwYXNzZWQgdGhlIGRpcmVjdG9yeS4KKworICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKE5vbmVfb3JfdGVzdHNfZnJvbV9maWxlLCBzaG91bGRfcmVjdXJzZSkuCisgICAgICAgICIiIgorICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZnVsbF9wYXRoKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsX3BhdGgpOgorICAgICAgICAgICAgaWYgbm90IFZBTElEX01PRFVMRV9OQU1FLm1hdGNoKGJhc2VuYW1lKToKKyAgICAgICAgICAgICAgICAjIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycyBvbmx5CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIEZhbHNlCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWF0Y2hfcGF0aChiYXNlbmFtZSwgZnVsbF9wYXRoLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgRmFsc2UKKyAgICAgICAgICAgICMgaWYgdGhlIHRlc3QgZmlsZSBtYXRjaGVzLCBsb2FkIGl0CisgICAgICAgICAgICBuYW1lID0gc2VsZi5fZ2V0X25hbWVfZnJvbV9wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQorICAgICAgICAgICAgZXhjZXB0IGNhc2UuU2tpcFRlc3QgYXMgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gX21ha2Vfc2tpcHBlZF90ZXN0KG5hbWUsIGUsIHNlbGYuc3VpdGVDbGFzcyksIEZhbHNlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZXJyb3JfY2FzZSwgZXJyb3JfbWVzc2FnZSA9IFwKKyAgICAgICAgICAgICAgICAgICAgX21ha2VfZmFpbGVkX2ltcG9ydF90ZXN0KG5hbWUsIHNlbGYuc3VpdGVDbGFzcykKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JfY2FzZSwgRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9kX2ZpbGUgPSBvcy5wYXRoLmFic3BhdGgoCisgICAgICAgICAgICAgICAgICAgIGdldGF0dHIobW9kdWxlLCAnX19maWxlX18nLCBmdWxsX3BhdGgpKQorICAgICAgICAgICAgICAgIHJlYWxwYXRoID0gX2p5dGhvbl9hd2FyZV9zcGxpdGV4dCgKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5yZWFscGF0aChtb2RfZmlsZSkpCisgICAgICAgICAgICAgICAgZnVsbHBhdGhfbm9leHQgPSBfanl0aG9uX2F3YXJlX3NwbGl0ZXh0KAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnJlYWxwYXRoKGZ1bGxfcGF0aCkpCisgICAgICAgICAgICAgICAgaWYgcmVhbHBhdGgubG93ZXIoKSAhPSBmdWxscGF0aF9ub2V4dC5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKHJlYWxwYXRoKQorICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZSA9IF9qeXRob25fYXdhcmVfc3BsaXRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGZ1bGxfcGF0aCkpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2RpciA9IG9zLnBhdGguZGlybmFtZShmdWxsX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiJXIgbW9kdWxlIGluY29ycmVjdGx5IGltcG9ydGVkIGZyb20gJXIuIEV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlci4gSXMgdGhpcyBtb2R1bGUgZ2xvYmFsbHkgaW5zdGFsbGVkPyIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnICUgKG1vZF9uYW1lLCBtb2R1bGVfZGlyLCBleHBlY3RlZF9kaXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlLCBwYXR0ZXJuPXBhdHRlcm4pLCBGYWxzZQorICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToKKyAgICAgICAgICAgIGlmIChub3QgbmFtZXNwYWNlIGFuZAorICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSkpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBGYWxzZQorCisgICAgICAgICAgICBsb2FkX3Rlc3RzID0gTm9uZQorICAgICAgICAgICAgdGVzdHMgPSBOb25lCisgICAgICAgICAgICBuYW1lID0gc2VsZi5fZ2V0X25hbWVfZnJvbV9wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYWNrYWdlID0gc2VsZi5fZ2V0X21vZHVsZV9mcm9tX25hbWUobmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBjYXNlLlNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9tYWtlX3NraXBwZWRfdGVzdChuYW1lLCBlLCBzZWxmLnN1aXRlQ2xhc3MpLCBGYWxzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGVycm9yX2Nhc2UsIGVycm9yX21lc3NhZ2UgPSBcCisgICAgICAgICAgICAgICAgICAgIF9tYWtlX2ZhaWxlZF9pbXBvcnRfdGVzdChuYW1lLCBzZWxmLnN1aXRlQ2xhc3MpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGVycm9yX21lc3NhZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yX2Nhc2UsIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvYWRfdGVzdHMgPSBnZXRhdHRyKHBhY2thZ2UsICdsb2FkX3Rlc3RzJywgTm9uZSkKKyAgICAgICAgICAgICAgICAjIE1hcmsgdGhpcyBwYWNrYWdlIGFzIGJlaW5nIGluIGxvYWRfdGVzdHMgKHBvc3NpYmx5IDspKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRpbmdfcGFja2FnZXMuYWRkKG5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXN0cyA9IHNlbGYubG9hZFRlc3RzRnJvbU1vZHVsZShwYWNrYWdlLCBwYXR0ZXJuPXBhdHRlcm4pCisgICAgICAgICAgICAgICAgICAgIGlmIGxvYWRfdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGxvYWRUZXN0c0Zyb21Nb2R1bGUocGFja2FnZSkgaGFzIGxvYWRlZCB0ZXN0cyBmb3IgdXMuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdHMsIEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0cywgVHJ1ZQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRpbmdfcGFja2FnZXMuZGlzY2FyZChuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIEZhbHNlCisKIAogZGVmYXVsdFRlc3RMb2FkZXIgPSBUZXN0TG9hZGVyKCkKIApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21haW4ucHkgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQppbmRleCBlNzUwY2E1Li4wOWZlZmUxIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbWFpbi5weQorKysgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQpAQCAtNTgsNyArNTgsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwgYXJndj1Ob25lLAogICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyPU5vbmUsIHRlc3RMb2FkZXI9bG9hZGVyLmRlZmF1bHRUZXN0TG9hZGVyLAogICAgICAgICAgICAgICAgICAgICBleGl0PVRydWUsIHZlcmJvc2l0eT0xLCBmYWlsZmFzdD1Ob25lLCBjYXRjaGJyZWFrPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcj1Ob25lLCB3YXJuaW5ncz1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyPU5vbmUsIHdhcm5pbmdzPU5vbmUsICosIHRiX2xvY2Fscz1GYWxzZSk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCBzdHIpOgogICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZSkKICAgICAgICAgICAgIGZvciBwYXJ0IGluIG1vZHVsZS5zcGxpdCgnLicpWzE6XToKQEAgLTczLDggKzczLDkgQEAKICAgICAgICAgc2VsZi5jYXRjaGJyZWFrID0gY2F0Y2hicmVhawogICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IHZlcmJvc2l0eQogICAgICAgICBzZWxmLmJ1ZmZlciA9IGJ1ZmZlcgorICAgICAgICBzZWxmLnRiX2xvY2FscyA9IHRiX2xvY2FscwogICAgICAgICBpZiB3YXJuaW5ncyBpcyBOb25lIGFuZCBub3Qgc3lzLndhcm5vcHRpb25zOgotICAgICAgICAgICAgIyBldmVuIGlmIERyZXByZWNhdGlvbldhcm5pbmdzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgICMgZXZlbiBpZiBEZXByZWNhdGlvbldhcm5pbmdzIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQKICAgICAgICAgICAgICMgcHJpbnQgdGhlbSBhbnl3YXkgdW5sZXNzIG90aGVyIHdhcm5pbmdzIHNldHRpbmdzIGFyZQogICAgICAgICAgICAgIyBzcGVjaWZpZWQgYnkgdGhlIHdhcm5pbmdzIGFyZyBvciB0aGUgLVcgcHl0aG9uIGZsYWcKICAgICAgICAgICAgIHNlbGYud2FybmluZ3MgPSAnZGVmYXVsdCcKQEAgLTE1OSw3ICsxNjAsOSBAQAogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgZGVzdD0ndmVyYm9zaXR5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWlldCBvdXRwdXQnKQotCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbG9jYWxzJywgZGVzdD0ndGJfbG9jYWxzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Nob3cgbG9jYWwgdmFyaWFibGVzIGluIHRyYWNlYmFja3MnKQogICAgICAgICBpZiBzZWxmLmZhaWxmYXN0IGlzIE5vbmU6CiAgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZhaWxmYXN0JywgZGVzdD0nZmFpbGZhc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLApAQCAtMjMxLDEwICsyMzQsMTggQEAKICAgICAgICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IHJ1bm5lci5UZXh0VGVzdFJ1bm5lcgogICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYudGVzdFJ1bm5lciwgdHlwZSk6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcih2ZXJib3NpdHk9c2VsZi52ZXJib3NpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZmFzdD1zZWxmLmZhaWxmYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyPXNlbGYuYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3M9c2VsZi53YXJuaW5ncykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIodmVyYm9zaXR5PXNlbGYudmVyYm9zaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxmYXN0PXNlbGYuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyPXNlbGYuYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzPXNlbGYud2FybmluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJfbG9jYWxzPXNlbGYudGJfbG9jYWxzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgZGlkbid0IGFjY2VwdCB0aGUgdGJfbG9jYWxzIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIodmVyYm9zaXR5PXNlbGYudmVyYm9zaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxmYXN0PXNlbGYuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyPXNlbGYuYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzPXNlbGYud2FybmluZ3MpCiAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgICAgICMgZGlkbid0IGFjY2VwdCB0aGUgdmVyYm9zaXR5LCBidWZmZXIgb3IgZmFpbGZhc3QgYXJndW1lbnRzCiAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbW9jay5weSBiL0xpYi91bml0dGVzdC9tb2NrLnB5CmluZGV4IDU3M2M3OTkuLjdmMzBiMjggMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9tb2NrLnB5CisrKyBiL0xpYi91bml0dGVzdC9tb2NrLnB5CkBAIC0yNyw5ICsyNywxMyBAQAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBzeXMKK2ltcG9ydCBidWlsdGlucworZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQogZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzLCBwYXJ0aWFsCiAKIAorX2J1aWx0aW5zID0ge25hbWUgZm9yIG5hbWUgaW4gZGlyKGJ1aWx0aW5zKSBpZiBub3QgbmFtZS5zdGFydHN3aXRoKCdfJyl9CisKIEJhc2VFeGNlcHRpb25zID0gKEJhc2VFeGNlcHRpb24sKQogaWYgJ2phdmEnIGluIHN5cy5wbGF0Zm9ybToKICAgICAjIGp5dGhvbgpAQCAtMjcxLDEzICsyNzUsMTEgQEAKICAgICByZXR1cm4gdmFsdWUKIAogCi1fYWxsb3dlZF9uYW1lcyA9IHNldCgKLSAgICBbCi0gICAgICAgICdyZXR1cm5fdmFsdWUnLCAnX21vY2tfcmV0dXJuX3ZhbHVlJywgJ3NpZGVfZWZmZWN0JywKLSAgICAgICAgJ19tb2NrX3NpZGVfZWZmZWN0JywgJ19tb2NrX3BhcmVudCcsICdfbW9ja19uZXdfcGFyZW50JywKLSAgICAgICAgJ19tb2NrX25hbWUnLCAnX21vY2tfbmV3X25hbWUnCi0gICAgXQotKQorX2FsbG93ZWRfbmFtZXMgPSB7CisgICAgJ3JldHVybl92YWx1ZScsICdfbW9ja19yZXR1cm5fdmFsdWUnLCAnc2lkZV9lZmZlY3QnLAorICAgICdfbW9ja19zaWRlX2VmZmVjdCcsICdfbW9ja19wYXJlbnQnLCAnX21vY2tfbmV3X3BhcmVudCcsCisgICAgJ19tb2NrX25hbWUnLCAnX21vY2tfbmV3X25hbWUnCit9CiAKIAogZGVmIF9kZWxlZ2F0aW5nX3Byb3BlcnR5KG5hbWUpOgpAQCAtMzc1LDcgKzM3Nyw3IEBACiAgICAgZGVmIF9faW5pdF9fKAogICAgICAgICAgICAgc2VsZiwgc3BlYz1Ob25lLCB3cmFwcz1Ob25lLCBuYW1lPU5vbmUsIHNwZWNfc2V0PU5vbmUsCiAgICAgICAgICAgICBwYXJlbnQ9Tm9uZSwgX3NwZWNfc3RhdGU9Tm9uZSwgX25ld19uYW1lPScnLCBfbmV3X3BhcmVudD1Ob25lLAotICAgICAgICAgICAgX3NwZWNfYXNfaW5zdGFuY2U9RmFsc2UsIF9lYXRfc2VsZj1Ob25lLCAqKmt3YXJncworICAgICAgICAgICAgX3NwZWNfYXNfaW5zdGFuY2U9RmFsc2UsIF9lYXRfc2VsZj1Ob25lLCB1bnNhZmU9RmFsc2UsICoqa3dhcmdzCiAgICAgICAgICk6CiAgICAgICAgIGlmIF9uZXdfcGFyZW50IGlzIE5vbmU6CiAgICAgICAgICAgICBfbmV3X3BhcmVudCA9IHBhcmVudApAQCAtNDA1LDYgKzQwNyw3IEBACiAgICAgICAgIF9fZGljdF9fWydfbW9ja19tb2NrX2NhbGxzJ10gPSBfQ2FsbExpc3QoKQogCiAgICAgICAgIF9fZGljdF9fWydtZXRob2RfY2FsbHMnXSA9IF9DYWxsTGlzdCgpCisgICAgICAgIF9fZGljdF9fWydfbW9ja191bnNhZmUnXSA9IHVuc2FmZQogCiAgICAgICAgIGlmIGt3YXJnczoKICAgICAgICAgICAgIHNlbGYuY29uZmlndXJlX21vY2soKiprd2FyZ3MpCkBAIC01MDMsNyArNTA2LDggQEAKICAgICAgICAgaWYgZGVsZWdhdGVkIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fbW9ja19zaWRlX2VmZmVjdAogICAgICAgICBzZiA9IGRlbGVnYXRlZC5zaWRlX2VmZmVjdAotICAgICAgICBpZiBzZiBpcyBub3QgTm9uZSBhbmQgbm90IGNhbGxhYmxlKHNmKSBhbmQgbm90IGlzaW5zdGFuY2Uoc2YsIF9Nb2NrSXRlcik6CisgICAgICAgIGlmIChzZiBpcyBub3QgTm9uZSBhbmQgbm90IGNhbGxhYmxlKHNmKQorICAgICAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShzZiwgX01vY2tJdGVyKSBhbmQgbm90IF9pc19leGNlcHRpb24oc2YpKToKICAgICAgICAgICAgIHNmID0gX01vY2tJdGVyKHNmKQogICAgICAgICAgICAgZGVsZWdhdGVkLnNpZGVfZWZmZWN0ID0gc2YKICAgICAgICAgcmV0dXJuIHNmCkBAIC01NjcsMTMgKzU3MSwxNiBAQAogCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG5hbWUgPT0gJ19tb2NrX21ldGhvZHMnOgorICAgICAgICBpZiBuYW1lIGluIHsnX21vY2tfbWV0aG9kcycsICdfbW9ja191bnNhZmUnfToKICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCiAgICAgICAgIGVsaWYgc2VsZi5fbW9ja19tZXRob2RzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5fbW9ja19tZXRob2RzIG9yIG5hbWUgaW4gX2FsbF9tYWdpY3M6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIk1vY2sgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJXIiICUgbmFtZSkKICAgICAgICAgZWxpZiBfaXNfbWFnaWMobmFtZSk6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorICAgICAgICBpZiBub3Qgc2VsZi5fbW9ja191bnNhZmU6CisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoKCdhc3NlcnQnLCAnYXNzcmV0JykpOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCiAKICAgICAgICAgcmVzdWx0ID0gc2VsZi5fbW9ja19jaGlsZHJlbi5nZXQobmFtZSkKICAgICAgICAgaWYgcmVzdWx0IGlzIF9kZWxldGVkOgpAQCAtNzM3LDcgKzc0NCw3IEBACiAKICAgICBkZWYgX2NhbGxfbWF0Y2hlcihzZWxmLCBfY2FsbCk6CiAgICAgICAgICIiIgotICAgICAgICBHaXZlbiBhIGNhbGwgKG9yIHNpbXBseSBhIChhcmdzLCBrd2FyZ3MpIHR1cGxlKSwgcmV0dXJuIGEKKyAgICAgICAgR2l2ZW4gYSBjYWxsIChvciBzaW1wbHkgYW4gKGFyZ3MsIGt3YXJncykgdHVwbGUpLCByZXR1cm4gYQogICAgICAgICBjb21wYXJpc29uIGtleSBzdWl0YWJsZSBmb3IgbWF0Y2hpbmcgd2l0aCBvdGhlciBjYWxscy4KICAgICAgICAgVGhpcyBpcyBhIGJlc3QgZWZmb3J0IG1ldGhvZCB3aGljaCByZWxpZXMgb24gdGhlIHNwZWMncyBzaWduYXR1cmUsCiAgICAgICAgIGlmIGF2YWlsYWJsZSwgb3IgZmFsbHMgYmFjayBvbiB0aGUgYXJndW1lbnRzIHRoZW1zZWx2ZXMuCkBAIC03NTYsNiArNzYzLDE0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gX2NhbGwKIAorICAgIGRlZiBhc3NlcnRfbm90X2NhbGxlZChfbW9ja19zZWxmKToKKyAgICAgICAgIiIiYXNzZXJ0IHRoYXQgdGhlIG1vY2sgd2FzIG5ldmVyIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYgPSBfbW9ja19zZWxmCisgICAgICAgIGlmIHNlbGYuY2FsbF9jb3VudCAhPSAwOgorICAgICAgICAgICAgbXNnID0gKCJFeHBlY3RlZCAnJXMnIHRvIG5vdCBoYXZlIGJlZW4gY2FsbGVkLiBDYWxsZWQgJXMgdGltZXMuIiAlCisgICAgICAgICAgICAgICAgICAgKHNlbGYuX21vY2tfbmFtZSBvciAnbW9jaycsIHNlbGYuY2FsbF9jb3VudCkpCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihtc2cpCiAKICAgICBkZWYgYXNzZXJ0X2NhbGxlZF93aXRoKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiImFzc2VydCB0aGF0IHRoZSBtb2NrIHdhcyBjYWxsZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy4KQEAgLTExNzIsNiArMTE4Nyw5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsb2NhbCA9IFRydWUKIAorICAgICAgICBpZiBuYW1lIGluIF9idWlsdGlucyBhbmQgaXNpbnN0YW5jZSh0YXJnZXQsIE1vZHVsZVR5cGUpOgorICAgICAgICAgICAgc2VsZi5jcmVhdGUgPSBUcnVlCisKICAgICAgICAgaWYgbm90IHNlbGYuY3JlYXRlIGFuZCBvcmlnaW5hbCBpcyBERUZBVUxUOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoCiAgICAgICAgICAgICAgICAgIiVzIGRvZXMgbm90IGhhdmUgdGhlIGF0dHJpYnV0ZSAlciIgJSAodGFyZ2V0LCBuYW1lKQpAQCAtMTMxNCw3ICsxMzMyLDEwIEBACiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYudGFyZ2V0LCBzZWxmLmF0dHJpYnV0ZSwgc2VsZi50ZW1wX29yaWdpbmFsKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGVsYXR0cihzZWxmLnRhcmdldCwgc2VsZi5hdHRyaWJ1dGUpCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5jcmVhdGUgYW5kIG5vdCBoYXNhdHRyKHNlbGYudGFyZ2V0LCBzZWxmLmF0dHJpYnV0ZSk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jcmVhdGUgYW5kIChub3QgaGFzYXR0cihzZWxmLnRhcmdldCwgc2VsZi5hdHRyaWJ1dGUpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dHJpYnV0ZSBpbiAoJ19fZG9jX18nLCAnX19tb2R1bGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZGVmYXVsdHNfXycsICdfX2Fubm90YXRpb25zX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2t3ZGVmYXVsdHNfXycpKToKICAgICAgICAgICAgICAgICAjIG5lZWRlZCBmb3IgcHJveHkgb2JqZWN0cyBsaWtlIGRqYW5nbyBzZXR0aW5ncwogICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZi50YXJnZXQsIHNlbGYuYXR0cmlidXRlLCBzZWxmLnRlbXBfb3JpZ2luYWwpCiAKQEAgLTE2NTksNyArMTY4MCw3IEBACiApCiAKIG51bWVyaWNzID0gKAotICAgICJhZGQgc3ViIG11bCBkaXYgZmxvb3JkaXYgbW9kIGxzaGlmdCByc2hpZnQgYW5kIHhvciBvciBwb3cgdHJ1ZWRpdiIKKyAgICAiYWRkIHN1YiBtdWwgbWF0bXVsIGRpdiBmbG9vcmRpdiBtb2QgbHNoaWZ0IHJzaGlmdCBhbmQgeG9yIG9yIHBvdyB0cnVlZGl2IgogKQogaW5wbGFjZSA9ICcgJy5qb2luKCdpJXMnICUgbiBmb3IgbiBpbiBudW1lcmljcy5zcGxpdCgpKQogcmlnaHQgPSAnICcuam9pbignciVzJyAlIG4gZm9yIG4gaW4gbnVtZXJpY3Muc3BsaXQoKSkKQEAgLTE2NjgsMTEgKzE2ODksMTMgQEAKICMgKGFzIHRoZXkgYXJlIG1ldGFjbGFzcyBtZXRob2RzKQogIyBfX2RlbF9fIGlzIG5vdCBzdXBwb3J0ZWQgYXQgYWxsIGFzIGl0IGNhdXNlcyBwcm9ibGVtcyBpZiBpdCBleGlzdHMKIAotX25vbl9kZWZhdWx0cyA9IHNldCgnX18lc19fJyAlIG1ldGhvZCBmb3IgbWV0aG9kIGluIFsKLSAgICAnZ2V0JywgJ3NldCcsICdkZWxldGUnLCAncmV2ZXJzZWQnLCAnbWlzc2luZycsICdyZWR1Y2UnLCAncmVkdWNlX2V4JywKLSAgICAnZ2V0aW5pdGFyZ3MnLCAnZ2V0bmV3YXJncycsICdnZXRzdGF0ZScsICdzZXRzdGF0ZScsICdnZXRmb3JtYXQnLAotICAgICdzZXRmb3JtYXQnLCAncmVwcicsICdkaXInLCAnc3ViY2xhc3NlcycsICdmb3JtYXQnLAotXSkKK19ub25fZGVmYXVsdHMgPSB7CisgICAgJ19fZ2V0X18nLCAnX19zZXRfXycsICdfX2RlbGV0ZV9fJywgJ19fcmV2ZXJzZWRfXycsICdfX21pc3NpbmdfXycsCisgICAgJ19fcmVkdWNlX18nLCAnX19yZWR1Y2VfZXhfXycsICdfX2dldGluaXRhcmdzX18nLCAnX19nZXRuZXdhcmdzX18nLAorICAgICdfX2dldHN0YXRlX18nLCAnX19zZXRzdGF0ZV9fJywgJ19fZ2V0Zm9ybWF0X18nLCAnX19zZXRmb3JtYXRfXycsCisgICAgJ19fcmVwcl9fJywgJ19fZGlyX18nLCAnX19zdWJjbGFzc2VzX18nLCAnX19mb3JtYXRfXycsCisgICAgJ19fZ2V0bmV3YXJnc19leF9fJywKK30KIAogCiBkZWYgX2dldF9tZXRob2QobmFtZSwgZnVuYyk6CkBAIC0xNjgzLDE5ICsxNzA2LDE5IEBACiAgICAgcmV0dXJuIG1ldGhvZAogCiAKLV9tYWdpY3MgPSBzZXQoCitfbWFnaWNzID0gewogICAgICdfXyVzX18nICUgbWV0aG9kIGZvciBtZXRob2QgaW4KICAgICAnICcuam9pbihbbWFnaWNfbWV0aG9kcywgbnVtZXJpY3MsIGlucGxhY2UsIHJpZ2h0XSkuc3BsaXQoKQotKQorfQogCiBfYWxsX21hZ2ljcyA9IF9tYWdpY3MgfCBfbm9uX2RlZmF1bHRzCiAKLV91bnN1cHBvcnRlZF9tYWdpY3MgPSBzZXQoWworX3Vuc3VwcG9ydGVkX21hZ2ljcyA9IHsKICAgICAnX19nZXRhdHRyX18nLCAnX19zZXRhdHRyX18nLAogICAgICdfX2luaXRfXycsICdfX25ld19fJywgJ19fcHJlcGFyZV9fJwogICAgICdfX2luc3RhbmNlY2hlY2tfXycsICdfX3N1YmNsYXNzY2hlY2tfXycsCiAgICAgJ19fZGVsX18nCi1dKQorfQogCiBfY2FsY3VsYXRlX3JldHVybl92YWx1ZSA9IHsKICAgICAnX19oYXNoX18nOiBsYW1iZGEgc2VsZjogb2JqZWN0Ll9faGFzaF9fKHNlbGYpLApAQCAtMTg4NCw3ICsxOTA3LDcgQEAKICAgICBmb3JtYXR0ZWRfYXJncyA9ICcnCiAgICAgYXJnc19zdHJpbmcgPSAnLCAnLmpvaW4oW3JlcHIoYXJnKSBmb3IgYXJnIGluIGFyZ3NdKQogICAgIGt3YXJnc19zdHJpbmcgPSAnLCAnLmpvaW4oWwotICAgICAgICAnJXM9JXInICUgKGtleSwgdmFsdWUpIGZvciBrZXksIHZhbHVlIGluIGt3YXJncy5pdGVtcygpCisgICAgICAgICclcz0lcicgJSAoa2V5LCB2YWx1ZSkgZm9yIGtleSwgdmFsdWUgaW4gc29ydGVkKGt3YXJncy5pdGVtcygpKQogICAgIF0pCiAgICAgaWYgYXJnc19zdHJpbmc6CiAgICAgICAgIGZvcm1hdHRlZF9hcmdzID0gYXJnc19zdHJpbmcKQEAgLTIwMDcsOCArMjAzMCw3IEBACiAgICAgICAgIHJldHVybiAob3RoZXJfYXJncywgb3RoZXJfa3dhcmdzKSA9PSAoc2VsZl9hcmdzLCBzZWxmX2t3YXJncykKIAogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCisgICAgX19uZV9fID0gb2JqZWN0Ll9fbmVfXwogCiAKICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTIwMjYsNiArMjA0OCwxMiBAQAogICAgICAgICByZXR1cm4gX0NhbGwobmFtZT1uYW1lLCBwYXJlbnQ9c2VsZiwgZnJvbV9rYWxsPUZhbHNlKQogCiAKKyAgICBkZWYgY291bnQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19nZXRhdHRyX18oJ2NvdW50JykoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGluZGV4KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9fZ2V0YXR0cl9fKCdpbmRleCcpKCphcmdzLCAqKmt3YXJncykKKwogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuZnJvbV9rYWxsOgogICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZSBvciAnY2FsbCcKQEAgLTIyOTYsNiArMjMyNCw4IEBACiAgICAgICAgICAgICAgICAgeWllbGQgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZQogICAgICAgICBmb3IgbGluZSBpbiBfc3RhdGVbMF06CiAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB5aWVsZCB0eXBlKHJlYWRfZGF0YSkoKQogCiAKICAgICBnbG9iYWwgZmlsZV9zcGVjCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5IGIvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQppbmRleCA4ZTBhNjQzLi5jN2UzMjA2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CisrKyBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzID0gW10KICAgICAgICAgc2VsZi5zaG91bGRTdG9wID0gRmFsc2UKICAgICAgICAgc2VsZi5idWZmZXIgPSBGYWxzZQorICAgICAgICBzZWxmLnRiX2xvY2FscyA9IEZhbHNlCiAgICAgICAgIHNlbGYuX3N0ZG91dF9idWZmZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX29yaWdpbmFsX3N0ZG91dCA9IHN5cy5zdGRvdXQKQEAgLTE0Nyw3ICsxNDgsNyBAQAogICAgICAgICBzZWxmLnNraXBwZWQuYXBwZW5kKCh0ZXN0LCByZWFzb24pKQogCiAgICAgZGVmIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgotICAgICAgICAiIiJDYWxsZWQgd2hlbiBhbiBleHBlY3RlZCBmYWlsdXJlL2Vycm9yIG9jY3VyZWQuIiIiCisgICAgICAgICIiIkNhbGxlZCB3aGVuIGFuIGV4cGVjdGVkIGZhaWx1cmUvZXJyb3Igb2NjdXJyZWQuIiIiCiAgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlcy5hcHBlbmQoCiAgICAgICAgICAgICAodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQogCkBAIC0xNzksOSArMTgwLDExIEBACiAgICAgICAgIGlmIGV4Y3R5cGUgaXMgdGVzdC5mYWlsdXJlRXhjZXB0aW9uOgogICAgICAgICAgICAgIyBTa2lwIGFzc2VydCooKSB0cmFjZWJhY2sgbGV2ZWxzCiAgICAgICAgICAgICBsZW5ndGggPSBzZWxmLl9jb3VudF9yZWxldmFudF90Yl9sZXZlbHModGIpCi0gICAgICAgICAgICBtc2dMaW5lcyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Y3R5cGUsIHZhbHVlLCB0YiwgbGVuZ3RoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnTGluZXMgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGN0eXBlLCB2YWx1ZSwgdGIpCisgICAgICAgICAgICBsZW5ndGggPSBOb25lCisgICAgICAgIHRiX2UgPSB0cmFjZWJhY2suVHJhY2ViYWNrRXhjZXB0aW9uKAorICAgICAgICAgICAgZXhjdHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1sZW5ndGgsIGNhcHR1cmVfbG9jYWxzPXNlbGYudGJfbG9jYWxzKQorICAgICAgICBtc2dMaW5lcyA9IGxpc3QodGJfZS5mb3JtYXQoKSkKIAogICAgICAgICBpZiBzZWxmLmJ1ZmZlcjoKICAgICAgICAgICAgIG91dHB1dCA9IHN5cy5zdGRvdXQuZ2V0dmFsdWUoKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3J1bm5lci5weSBiL0xpYi91bml0dGVzdC9ydW5uZXIucHkKaW5kZXggMjhiODg2NS4uMjExMjI2MiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3J1bm5lci5weQorKysgYi9MaWIvdW5pdHRlc3QvcnVubmVyLnB5CkBAIC0xMjYsNyArMTI2LDEzIEBACiAgICAgcmVzdWx0Y2xhc3MgPSBUZXh0VGVzdFJlc3VsdAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbT1Ob25lLCBkZXNjcmlwdGlvbnM9VHJ1ZSwgdmVyYm9zaXR5PTEsCi0gICAgICAgICAgICAgICAgIGZhaWxmYXN0PUZhbHNlLCBidWZmZXI9RmFsc2UsIHJlc3VsdGNsYXNzPU5vbmUsIHdhcm5pbmdzPU5vbmUpOgorICAgICAgICAgICAgICAgICBmYWlsZmFzdD1GYWxzZSwgYnVmZmVyPUZhbHNlLCByZXN1bHRjbGFzcz1Ob25lLCB3YXJuaW5ncz1Ob25lLAorICAgICAgICAgICAgICAgICAqLCB0Yl9sb2NhbHM9RmFsc2UpOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUZXh0VGVzdFJ1bm5lci4KKworICAgICAgICBTdWJjbGFzc2VzIHNob3VsZCBhY2NlcHQgKiprd2FyZ3MgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYXMgdGhlCisgICAgICAgIGludGVyZmFjZSBjaGFuZ2VzLgorICAgICAgICAiIiIKICAgICAgICAgaWYgc3RyZWFtIGlzIE5vbmU6CiAgICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCiAgICAgICAgIHNlbGYuc3RyZWFtID0gX1dyaXRlbG5EZWNvcmF0b3Ioc3RyZWFtKQpAQCAtMTM0LDYgKzE0MCw3IEBACiAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5CiAgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBmYWlsZmFzdAogICAgICAgICBzZWxmLmJ1ZmZlciA9IGJ1ZmZlcgorICAgICAgICBzZWxmLnRiX2xvY2FscyA9IHRiX2xvY2FscwogICAgICAgICBzZWxmLndhcm5pbmdzID0gd2FybmluZ3MKICAgICAgICAgaWYgcmVzdWx0Y2xhc3MgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnJlc3VsdGNsYXNzID0gcmVzdWx0Y2xhc3MKQEAgLTE0Nyw2ICsxNTQsNyBAQAogICAgICAgICByZWdpc3RlclJlc3VsdChyZXN1bHQpCiAgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IHNlbGYuZmFpbGZhc3QKICAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IHNlbGYuYnVmZmVyCisgICAgICAgIHJlc3VsdC50Yl9sb2NhbHMgPSBzZWxmLnRiX2xvY2FscwogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICBpZiBzZWxmLndhcm5pbmdzOgogICAgICAgICAgICAgICAgICMgaWYgc2VsZi53YXJuaW5ncyBpcyBzZXQsIHVzZSBpdCB0byBmaWx0ZXIgYWxsIHRoZSB3YXJuaW5ncwpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CmluZGV4IDc2YzQ3MjUuLjM1M2Q0YTEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9zdWl0ZS5weQorKysgYi9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdCA9IHNlbGYuX3Rlc3RzW2luZGV4XQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgIyBzdXBwb3J0IGZvciBzdWl0ZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIG92ZXJyaWRlbiBzZWxmLl90ZXN0cworICAgICAgICAgICAgIyBzdXBwb3J0IGZvciBzdWl0ZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIG92ZXJyaWRkZW4gc2VsZi5fdGVzdHMKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgU29tZSB1bml0dGVzdCB0ZXN0cyBhZGQgbm9uIFRlc3RDYXNlL1Rlc3RTdWl0ZSBvYmplY3RzIHRvCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQppbmRleCAwMmU4ZjNhLi41MjkyNjUzIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKQEAgLTI1LDggKzI1LDYgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpZiBub3QgaGFzaChvYmpfMSkgPT0gaGFzaChvYmpfMik6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIgYW5kICVyIGRvIG5vdCBoYXNoIGVxdWFsIiAlIChvYmpfMSwgb2JqXzIpKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9ibGVtIGhhc2hpbmcgJXIgYW5kICVyOiAlcyIgJSAob2JqXzEsIG9ial8yLCBlKSkKIApAQCAtMzUsOCArMzMsNiBAQAogICAgICAgICAgICAgICAgIGlmIGhhc2gob2JqXzEpID09IGhhc2gob2JqXzIpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzIGFuZCAlcyBoYXNoIGVxdWFsLCBidXQgc2hvdWxkbid0IiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqXzEsIG9ial8yKSkKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUHJvYmxlbSBoYXNoaW5nICVzIGFuZCAlczogJXMiICUgKG9ial8xLCBvYmpfMiwgZSkpCiAKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQppbmRleCBjMzQ5YTk1Li5lNmUyYmMyIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CkBAIC0xMzMsNyArMTMzLDYgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RSZWdleCgnQWxhIG1hIGtvdGEnLCByJ2sudCcsICdNZXNzYWdlJykKICAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiJ2tvdCciLCBlLmFyZ3NbMF0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdNZXNzYWdlJywgZS5hcmdzWzBdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnROb3RSZWdleCBzaG91bGQgaGF2ZSBmYWlsZWQuJykKQEAgLTMyOSw2ICszMjgsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl51bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiBOb25lJCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IGlkZW50aWNhbDogTm9uZSA6IG9vcHMkIl0pCiAKKyAgICBkZWYgdGVzdEFzc2VydFJlZ2V4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRSZWdleCcsICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXlJlZ2V4IGRpZG4ndCBtYXRjaDoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5SZWdleCBkaWRuJ3QgbWF0Y2g6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5SZWdleCBkaWRuJ3QgbWF0Y2g6ICguKikgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnROb3RSZWdleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0Tm90UmVnZXgnLCAoJ2ZvbycsICdmb28nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl5SZWdleCBtYXRjaGVkOiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXlJlZ2V4IG1hdGNoZWQ6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5SZWdleCBtYXRjaGVkOiAoLiopIDogb29wcyQiXSkKKwogCiAgICAgZGVmIGFzc2VydE1lc3NhZ2VzQ00oc2VsZiwgbWV0aG9kTmFtZSwgYXJncywgZnVuYywgZXJyb3JzKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQppbmRleCAwYmYxYTIyLi4yYzc1MDE5IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKQEAgLTIxMSw2ICsyMTEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IGZhaWxmYXN0CiAgICAgICAgICAgICAgICAgc2VsZi5jYXRjaGJyZWFrID0gY2F0Y2hicmVhaworICAgICAgICAgICAgICAgIHNlbGYudGJfbG9jYWxzID0gRmFsc2UKICAgICAgICAgICAgICAgICBzZWxmLnRlc3RSdW5uZXIgPSBGYWtlUnVubmVyCiAgICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAogICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gTm9uZQpAQCAtMjIxLDYgKzIyMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5pbml0QXJncywgWygoKSwgeydidWZmZXInOiBOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyYm9zaXR5JzogdmVyYm9zaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbGZhc3QnOiBmYWlsZmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RiX2xvY2Fscyc6IEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FybmluZ3MnOiBOb25lfSldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIucnVuQXJncywgW3Rlc3RdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVzdWx0LCByZXN1bHQpCkBAIC0yMzUsNiArMjM3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCBbKCgpLCB7J2J1ZmZlcic6IE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJib3NpdHknOiB2ZXJib3NpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsZmFzdCc6IGZhaWxmYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGJfbG9jYWxzJzogRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5ncyc6IE5vbmV9KV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5ydW5BcmdzLCBbdGVzdF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXN1bHQsIHJlc3VsdCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQppbmRleCAzMjFkNjdhLi44Zjc1MmI4IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CkBAIC0zMzksNyArMzM5LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX2xlZ2FjeShzZWxmKToKLSAgICAgICAgIyBXaXRoIGEgbGVnYWN5IHJlc3VsdCBvYmplY3QgKHdpdGhvdXQgYSBhZGRTdWJUZXN0IG1ldGhvZCksCisgICAgICAgICMgV2l0aCBhIGxlZ2FjeSByZXN1bHQgb2JqZWN0ICh3aXRob3V0IGFuIGFkZFN1YlRlc3QgbWV0aG9kKSwKICAgICAgICAgIyB0ZXh0IGV4ZWN1dGlvbiBzdG9wcyBhZnRlciB0aGUgZmlyc3Qgc3VidGVzdCBmYWlsdXJlLgogICAgICAgICBldmVudHMgPSBbXQogICAgICAgICByZXN1bHQgPSBMZWdhY3lMb2dnaW5nUmVzdWx0KGV2ZW50cykKQEAgLTExMDMsMTIgKzExMDMsOSBAQAogICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAjIG5lZWQgdG8gcmVtb3ZlIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgICBlcnJvciA9IHN0cihlKS5zcGxpdCgnXG4nLCAxKVsxXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYW1wbGVfdGV4dF9lcnJvciwgZXJyb3IpCiAKLSAgICAgICAgICAgICMgbm8gZmFpciB0ZXN0aW5nIG91cnNlbGYgd2l0aCBvdXJzZWxmLCBhbmQgYXNzZXJ0RXF1YWwgaXMgdXNlZCBmb3Igc3RyaW5ncwotICAgICAgICAgICAgIyBzbyBjYW4ndCB1c2UgYXNzZXJ0RXF1YWwgZWl0aGVyLiBKdXN0IHVzZSBhc3NlcnRUcnVlLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNhbXBsZV90ZXh0X2Vycm9yID09IGVycm9yKQotCi0gICAgZGVmIHRlc3RBc2VydEVxdWFsU2luZ2xlTGluZShzZWxmKToKKyAgICBkZWYgdGVzdEFzc2VydEVxdWFsU2luZ2xlTGluZShzZWxmKToKICAgICAgICAgc2FtcGxlX3RleHQgPSAibGFkZW4gc3dhbGxvd3MgZmx5IHNsb3dseSIKICAgICAgICAgcmV2aXNlZF9zYW1wbGVfdGV4dCA9ICJ1bmxhZGVuIHN3YWxsb3dzIGZseSBxdWlja2x5IgogICAgICAgICBzYW1wbGVfdGV4dF9lcnJvciA9ICIiIlwKQEAgLTExMjAsOCArMTExNyw4NSBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhbXBsZV90ZXh0LCByZXZpc2VkX3NhbXBsZV90ZXh0KQogICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAjIG5lZWQgdG8gcmVtb3ZlIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgICBlcnJvciA9IHN0cihlKS5zcGxpdCgnXG4nLCAxKVsxXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNhbXBsZV90ZXh0X2Vycm9yID09IGVycm9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYW1wbGVfdGV4dF9lcnJvciwgZXJyb3IpCisKKyAgICBkZWYgdGVzdEVxdWFsaXR5Qnl0ZXNXYXJuaW5nKHNlbGYpOgorICAgICAgICBpZiBzeXMuZmxhZ3MuYnl0ZXNfd2FybmluZzoKKyAgICAgICAgICAgIGRlZiBieXRlc193YXJuaW5nKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0V2FybnNSZWdleChCeXRlc1dhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbXBhcmlzb24gYmV0d2VlbiBieXRlcyBhbmQgc3RyaW5nJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBieXRlc193YXJuaW5nKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkKKworICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKSwgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2EnLCBiJ2EnKQorICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoJ2EnLCBiJ2EnKQorCisgICAgICAgIGEgPSBbMCwgJ2EnXQorICAgICAgICBiID0gWzAsIGInYSddCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpLCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoYSwgYikKKyAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCksIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodHVwbGUoYSksIHR1cGxlKGIpKQorICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKSwgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChhLCB0dXBsZShiKSkKKyAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCksIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwodHVwbGUoYSksIGIpCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpLCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKCdhJywgYidhJykKKyAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCksIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHNldChhKSwgc2V0KGIpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGEsIHR1cGxlKGIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodHVwbGUoYSksIGIpCisKKyAgICAgICAgYSA9IFswLCBiJ2EnXQorICAgICAgICBiID0gWzBdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGEsIGIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCh0dXBsZShhKSwgdHVwbGUoYikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChhLCB0dXBsZShiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHR1cGxlKGEpLCBiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHNldChhKSwgc2V0KGIpKQorCisgICAgICAgIGEgPSBbMF0KKyAgICAgICAgYiA9IFswLCBiJ2EnXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChhLCBiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodHVwbGUoYSksIHR1cGxlKGIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoYSwgdHVwbGUoYikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbCh0dXBsZShhKSwgYikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQoYSksIHNldChiKSkKKworICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKSwgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHsnYSc6IDB9LCB7YidhJzogMH0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHt9LCB7YidhJzogMH0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHtiJ2EnOiAwfSwge30pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKFtiJ2EnLCBiJ2EnXSwgW2InYScsIGInYScsIGInYSddKQorICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChbJ2EnLCBiJ2EnXSwgWydhJywgYidhJ10pCisgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpLCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKFsnYScsICdhJ10sIFtiJ2EnLCBiJ2EnXSkKKyAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCksIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWydhJywgJ2EnLCBbXV0sIFtiJ2EnLCBiJ2EnLCBbXV0pCiAKICAgICBkZWYgdGVzdEFzc2VydElzTm9uZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoTm9uZSkKQEAgLTExNDcsNiArMTIyMSw5IEBACiAgICAgICAgICMgRmFpbHVyZSB3aGVuIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uTW9jaywgbGFtYmRhOiAwKQorICAgICAgICAjIEZhaWx1cmUgd2hlbiB0aGUgZnVuY3Rpb24gaXMgTm9uZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbk1vY2ssIE5vbmUpCiAgICAgICAgICMgRmFpbHVyZSB3aGVuIGFub3RoZXIgZXhjZXB0aW9uIGlzIHJhaXNlZAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbk1vY2spOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgU3R1YikKQEAgLTExNzEsMTAgKzEyNDgsMzEgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb25Nb2NrKToKICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgQ3VzdG9tIG1lc3NhZ2UKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgJ2Zvb2JhcicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb25Nb2NrLCBtc2c9J2Zvb2JhcicpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBJbnZhbGlkIGtleXdvcmQgYXJndW1lbnQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoRGVwcmVjYXRpb25XYXJuaW5nLCAnZm9vYmFyJyksIFwKKyAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbk1vY2ssIGZvb2Jhcj00Mik6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAjIEZhaWx1cmUgd2hlbiBhbm90aGVyIGV4Y2VwdGlvbiBpcyByYWlzZWQKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb25Nb2NrKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFN0dWIpCiAKKyAgICBkZWYgdGVzdEFzc2VydFJhaXNlc05vRXhjZXB0aW9uVHlwZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvYmplY3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCAxKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIG9iamVjdCkpCisKICAgICBkZWYgdGVzdEFzc2VydFJhaXNlc1JlZ2V4KHNlbGYpOgogICAgICAgICBjbGFzcyBFeGNlcHRpb25Nb2NrKEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBwYXNzCkBAIC0xMTg0LDYgKzEyODIsOCBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uTW9jaywgcmUuY29tcGlsZSgnZXhwZWN0JCcpLCBTdHViKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbk1vY2ssICdleHBlY3QkJywgU3R1YikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbk1vY2ssICdleHBlY3QkJywgTm9uZSkKIAogICAgIGRlZiB0ZXN0QXNzZXJ0Tm90UmFpc2VzUmVnZXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCkBAIC0xMTk0LDYgKzEyOTQsMTUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICdeRXhjZXB0aW9uIG5vdCByYWlzZWQgYnkgPGxhbWJkYT4kJywKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4LCBFeGNlcHRpb24sICd4JywKICAgICAgICAgICAgICAgICBsYW1iZGE6IE5vbmUpCisgICAgICAgICMgQ3VzdG9tIG1lc3NhZ2UKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgJ2Zvb2JhcicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgJ2V4cGVjdCcsIG1zZz0nZm9vYmFyJyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAjIEludmFsaWQga2V5d29yZCBhcmd1bWVudAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChEZXByZWNhdGlvbldhcm5pbmcsICdmb29iYXInKSwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sICdleHBlY3QnLCBmb29iYXI9NDIpOgorICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhJbnZhbGlkUmVnZXgoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMjAxNDUuCkBAIC0xMjM3LDYgKzEzNDYsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUsIEV4Y2VwdGlvbk1vY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCB2KQogCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNSZWdleE5vRXhjZXB0aW9uVHlwZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvcikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgxLCAnZXhwZWN0JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChvYmplY3QsICdleHBlY3QnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KChWYWx1ZUVycm9yLCAxKSwgJ2V4cGVjdCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoKFZhbHVlRXJyb3IsIG9iamVjdCksICdleHBlY3QnKQorCiAgICAgZGVmIHRlc3RBc3NlcnRXYXJuc0NhbGxhYmxlKHNlbGYpOgogICAgICAgICBkZWYgX3J1bnRpbWVfd2FybigpOgogICAgICAgICAgICAgd2FybmluZ3Mud2FybigiZm9vIiwgUnVudGltZVdhcm5pbmcpCkBAIC0xMjUxLDYgKzEzNzQsOSBAQAogICAgICAgICAjIEZhaWx1cmUgd2hlbiBubyB3YXJuaW5nIGlzIHRyaWdnZXJlZAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nLCBsYW1iZGE6IDApCisgICAgICAgICMgRmFpbHVyZSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBOb25lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgTm9uZSkKICAgICAgICAgIyBGYWlsdXJlIHdoZW4gYW5vdGhlciB3YXJuaW5nIGlzIHRyaWdnZXJlZAogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAjIEZvcmNlIGRlZmF1bHQgZmlsdGVyIChpbiBjYXNlIHRlc3RzIGFyZSBydW4gd2l0aCAtV2UpCkBAIC0xMjg5LDYgKzE0MTUsMTUgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nKToKICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgQ3VzdG9tIG1lc3NhZ2UKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgJ2Zvb2JhcicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nLCBtc2c9J2Zvb2JhcicpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBJbnZhbGlkIGtleXdvcmQgYXJndW1lbnQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoRGVwcmVjYXRpb25XYXJuaW5nLCAnZm9vYmFyJyksIFwKKyAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoUnVudGltZVdhcm5pbmcsIGZvb2Jhcj00Mik6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAjIEZhaWx1cmUgd2hlbiBhbm90aGVyIHdhcm5pbmcgaXMgdHJpZ2dlcmVkCiAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKICAgICAgICAgICAgICMgRm9yY2UgZGVmYXVsdCBmaWx0ZXIgKGluIGNhc2UgdGVzdHMgYXJlIHJ1biB3aXRoIC1XZSkKQEAgLTEzMDMsNiArMTQzOCwyMCBAQAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgogICAgICAgICAgICAgICAgICAgICBfcnVudGltZV93YXJuKCkKIAorICAgIGRlZiB0ZXN0QXNzZXJ0V2FybnNOb0V4Y2VwdGlvblR5cGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zKDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMob2JqZWN0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zKChVc2VyV2FybmluZywgMSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoKFVzZXJXYXJuaW5nLCBvYmplY3QpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zKChVc2VyV2FybmluZywgRXhjZXB0aW9uKSkKKwogICAgIGRlZiB0ZXN0QXNzZXJ0V2FybnNSZWdleENhbGxhYmxlKHNlbGYpOgogICAgICAgICBkZWYgX3J1bnRpbWVfd2Fybihtc2cpOgogICAgICAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIFJ1bnRpbWVXYXJuaW5nKQpAQCAtMTMxMiw2ICsxNDYxLDkgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAibysiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogMCkKKyAgICAgICAgIyBGYWlsdXJlIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIE5vbmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUnVudGltZVdhcm5pbmcsICJvKyIsIE5vbmUpCiAgICAgICAgICMgRmFpbHVyZSB3aGVuIGFub3RoZXIgd2FybmluZyBpcyB0cmlnZ2VyZWQKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgIyBGb3JjZSBkZWZhdWx0IGZpbHRlciAoaW4gY2FzZSB0ZXN0cyBhcmUgcnVuIHdpdGggLVdlKQpAQCAtMTM0OCw2ICsxNTAwLDE1IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAibysiKToKICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgQ3VzdG9tIG1lc3NhZ2UKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgJ2Zvb2JhcicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUnVudGltZVdhcm5pbmcsICdvKycsIG1zZz0nZm9vYmFyJyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAjIEludmFsaWQga2V5d29yZCBhcmd1bWVudAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChEZXByZWNhdGlvbldhcm5pbmcsICdmb29iYXInKSwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAnbysnLCBmb29iYXI9NDIpOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBGYWlsdXJlIHdoZW4gYW5vdGhlciB3YXJuaW5nIGlzIHRyaWdnZXJlZAogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICAjIEZvcmNlIGRlZmF1bHQgZmlsdGVyIChpbiBjYXNlIHRlc3RzIGFyZSBydW4gd2l0aCAtV2UpCkBAIC0xMzY5LDYgKzE1MzAsMjIgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChSdW50aW1lV2FybmluZywgIm8rIik6CiAgICAgICAgICAgICAgICAgICAgIF9ydW50aW1lX3dhcm4oImJhcnoiKQogCisgICAgZGVmIHRlc3RBc3NlcnRXYXJuc1JlZ2V4Tm9FeGNlcHRpb25UeXBlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zUmVnZXgoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zUmVnZXgoVXNlcldhcm5pbmcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnNSZWdleCgxLCAnZXhwZWN0JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KG9iamVjdCwgJ2V4cGVjdCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnNSZWdleCgoVXNlcldhcm5pbmcsIDEpLCAnZXhwZWN0JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KChVc2VyV2FybmluZywgb2JqZWN0KSwgJ2V4cGVjdCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnNSZWdleCgoVXNlcldhcm5pbmcsIEV4Y2VwdGlvbiksICdleHBlY3QnKQorCiAgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKICAgICBkZWYgYXNzZXJ0Tm9TdGRlcnIoc2VsZik6CiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgYnVmOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQppbmRleCBmMTJlODk4Li5iYjE5NmU2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQpAQCAtMSw0ICsxLDUgQEAKLWltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2Zyb20gb3MucGF0aCBpbXBvcnQgYWJzcGF0aAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKQEAgLTY5LDcgKzcwLDEzIEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZmlsZSkKIAogICAgICAgICBsb2FkZXIuX2dldF9tb2R1bGVfZnJvbV9uYW1lID0gbGFtYmRhIHBhdGg6IHBhdGggKyAnIG1vZHVsZScKLSAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUgPSBsYW1iZGEgbW9kdWxlOiBtb2R1bGUgKyAnIHRlc3RzJworICAgICAgICBvcmlnX2xvYWRfdGVzdHMgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZQorICAgICAgICBkZWYgbG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUsIHBhdHRlcm49Tm9uZSk6CisgICAgICAgICAgICAjIFRoaXMgaXMgd2hlcmUgbG9hZF90ZXN0cyBpcyBjYWxsZWQuCisgICAgICAgICAgICBiYXNlID0gb3JpZ19sb2FkX3Rlc3RzKG1vZHVsZSwgcGF0dGVybj1wYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGJhc2UgKyBbbW9kdWxlICsgJyB0ZXN0cyddCisgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlID0gbG9hZFRlc3RzRnJvbU1vZHVsZQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxhbWJkYSB0aGluZzogdGhpbmcKIAogICAgICAgICB0b3BfbGV2ZWwgPSBvcy5wYXRoLmFic3BhdGgoJy9mb28nKQogICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSB0b3BfbGV2ZWwKQEAgLTc3LDEyICs4NCw1MiBAQAogCiAgICAgICAgICMgVGhlIHRlc3Qgc3VpdGVzIGZvdW5kIHNob3VsZCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgZm9yIHJlbGlhYmxlCiAgICAgICAgICMgZXhlY3V0aW9uIG9yZGVyLgotICAgICAgICBleHBlY3RlZCA9IFtuYW1lICsgJyBtb2R1bGUgdGVzdHMnIGZvciBuYW1lIGluCi0gICAgICAgICAgICAgICAgICAgICgndGVzdDEnLCAndGVzdDInKV0KLSAgICAgICAgZXhwZWN0ZWQuZXh0ZW5kKFsoJ3Rlc3RfZGlyLiVzJyAlIG5hbWUpICsgJyBtb2R1bGUgdGVzdHMnIGZvciBuYW1lIGluCisgICAgICAgIGV4cGVjdGVkID0gW1tuYW1lICsgJyBtb2R1bGUgdGVzdHMnXSBmb3IgbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QxJywgJ3Rlc3QyJywgJ3Rlc3RfZGlyJyldCisgICAgICAgIGV4cGVjdGVkLmV4dGVuZChbWygndGVzdF9kaXIuJXMnICUgbmFtZSkgKyAnIG1vZHVsZSB0ZXN0cyddIGZvciBuYW1lIGluCiAgICAgICAgICAgICAgICAgICAgICgndGVzdDMnLCAndGVzdDQnKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsIGV4cGVjdGVkKQogCisgICAgZGVmIHRlc3RfZmluZF90ZXN0c19zb2NrZXQoc2VsZik6CisgICAgICAgICMgQSBzb2NrZXQgaXMgbmVpdGhlciBhIGRpcmVjdG9yeSBub3IgYSByZWd1bGFyIGZpbGUuCisgICAgICAgICMgaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTMyMAorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnaW5hbF9saXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBkZWYgcmVzdG9yZV9saXN0ZGlyKCk6CisgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2luYWxfbGlzdGRpcgorICAgICAgICBvcmlnaW5hbF9pc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBkZWYgcmVzdG9yZV9pc2ZpbGUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gb3JpZ2luYWxfaXNmaWxlCisgICAgICAgIG9yaWdpbmFsX2lzZGlyID0gb3MucGF0aC5pc2RpcgorICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCisKKyAgICAgICAgcGF0aF9saXN0cyA9IFtbJ3NvY2tldCddXQorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIHBhdGg6IHBhdGhfbGlzdHMucG9wKDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2xpc3RkaXIpCisKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGxhbWJkYSBwYXRoOiBGYWxzZQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2RpcikKKworICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBwYXRoOiBGYWxzZQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2ZpbGUpCisKKyAgICAgICAgbG9hZGVyLl9nZXRfbW9kdWxlX2Zyb21fbmFtZSA9IGxhbWJkYSBwYXRoOiBwYXRoICsgJyBtb2R1bGUnCisgICAgICAgIG9yaWdfbG9hZF90ZXN0cyA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSwgcGF0dGVybj1Ob25lKToKKyAgICAgICAgICAgICMgVGhpcyBpcyB3aGVyZSBsb2FkX3Rlc3RzIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIGJhc2UgPSBvcmlnX2xvYWRfdGVzdHMobW9kdWxlLCBwYXR0ZXJuPXBhdHRlcm4pCisgICAgICAgICAgICByZXR1cm4gYmFzZSArIFttb2R1bGUgKyAnIHRlc3RzJ10KKyAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUgPSBsb2FkVGVzdHNGcm9tTW9kdWxlCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGFtYmRhIHRoaW5nOiB0aGluZworCisgICAgICAgIHRvcF9sZXZlbCA9IG9zLnBhdGguYWJzcGF0aCgnL2ZvbycpCisgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbAorICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKHRvcF9sZXZlbCwgJ3Rlc3QqLnB5JykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwgW10pCisKICAgICBkZWYgdGVzdF9maW5kX3Rlc3RzX3dpdGhfcGFja2FnZShzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAKQEAgLTExNywzNCArMTY0LDIwNCBAQAogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0aCkgPT0gJ3Rlc3RfZGlyZWN0b3J5JzoKICAgICAgICAgICAgICAgICAgICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHNfYXJncy5hcHBlbmQoKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdsb2FkX3Rlc3RzJworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGggKyAnIGxvYWRfdGVzdHMnXQogICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCiAKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhdGggPT0gb3RoZXIucGF0aAogCiAgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBsYW1iZGEgbmFtZTogTW9kdWxlKG5hbWUpCi0gICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSwgdXNlX2xvYWRfdGVzdHMpOgotICAgICAgICAgICAgaWYgdXNlX2xvYWRfdGVzdHM6Ci0gICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCd1c2VfbG9hZF90ZXN0cyBzaG91bGQgYmUgRmFsc2UgZm9yIHBhY2thZ2VzJykKLSAgICAgICAgICAgIHJldHVybiBtb2R1bGUucGF0aCArICcgbW9kdWxlIHRlc3RzJworICAgICAgICBvcmlnX2xvYWRfdGVzdHMgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZQorICAgICAgICBkZWYgbG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUsIHBhdHRlcm49Tm9uZSk6CisgICAgICAgICAgICAjIFRoaXMgaXMgd2hlcmUgbG9hZF90ZXN0cyBpcyBjYWxsZWQuCisgICAgICAgICAgICBiYXNlID0gb3JpZ19sb2FkX3Rlc3RzKG1vZHVsZSwgcGF0dGVybj1wYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGJhc2UgKyBbbW9kdWxlLnBhdGggKyAnIG1vZHVsZSB0ZXN0cyddCiAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlID0gbG9hZFRlc3RzRnJvbU1vZHVsZQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxhbWJkYSB0aGluZzogdGhpbmcKIAogICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSAnL2ZvbycKICAgICAgICAgIyB0aGlzIHRpbWUgbm8gJy5weScgb24gdGhlIHBhdHRlcm4gc28gdGhhdCBpdCBjYW4gbWF0Y2gKICAgICAgICAgIyBhIHRlc3QgcGFja2FnZQogICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKCcvZm9vJywgJ3Rlc3QqJykpCiAKLSAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSBsb2FkZWQgdGVzdHMgZnJvbSB0aGUgdGVzdF9kaXJlY3RvcnkgcGFja2FnZSBieSBjYWxsaW5nIGxvYWRfdGVzdHMKLSAgICAgICAgIyBhbmQgZGlyZWN0bHkgZnJvbSB0aGUgdGVzdF9kaXJlY3RvcnkyIHBhY2thZ2UKKyAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSBsb2FkZWQgdGVzdHMgZnJvbSB0aGUgYV9kaXJlY3RvcnkgYW5kIHRlc3RfZGlyZWN0b3J5MgorICAgICAgICAjIGRpcmVjdGx5IGFuZCB2aWEgbG9hZF90ZXN0cyBmb3IgdGhlIHRlc3RfZGlyZWN0b3J5IHBhY2thZ2UsIHdoaWNoCisgICAgICAgICMgc3RpbGwgY2FsbHMgdGhlIGJhc2VsaW5lIG1vZHVsZSBsb2FkZXIuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWydsb2FkX3Rlc3RzJywgJ3Rlc3RfZGlyZWN0b3J5MicgKyAnIG1vZHVsZSB0ZXN0cyddKQorICAgICAgICAgICAgICAgICAgICAgICAgIFtbJ2FfZGlyZWN0b3J5IG1vZHVsZSB0ZXN0cyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3RfZGlyZWN0b3J5IGxvYWRfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZGlyZWN0b3J5IG1vZHVsZSB0ZXN0cyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3RfZGlyZWN0b3J5MiBtb2R1bGUgdGVzdHMnXV0pCisKKwogICAgICAgICAjIFRoZSB0ZXN0IG1vZHVsZSBwYXRocyBzaG91bGQgYmUgc29ydGVkIGZvciByZWxpYWJsZSBleGVjdXRpb24gb3JkZXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUucGF0aHMsIFsndGVzdF9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnkyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLnBhdGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYV9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnkyJ10pCisKKyAgICAgICAgIyBsb2FkX3Rlc3RzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2Ugd2l0aCBsb2FkZXIsIHRlc3RzIGFuZCBwYXR0ZXJuCisgICAgICAgICMgKGJ1dCB0aGVyZSBhcmUgbm8gdGVzdHMgaW4gb3VyIHN0dWIgbW9kdWxlIGl0c2VsZiwgc28gdGhhdHMgW10gYXQgdGhlCisgICAgICAgICMgdGltZSBvZiBjYWxsLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5sb2FkX3Rlc3RzX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyhsb2FkZXIsIFtdLCAndGVzdConKV0pCisKKyAgICBkZWYgdGVzdF9maW5kX3Rlc3RzX2RlZmF1bHRfY2FsbHNfcGFja2FnZV9sb2FkX3Rlc3RzKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnaW5hbF9saXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBkZWYgcmVzdG9yZV9saXN0ZGlyKCk6CisgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2luYWxfbGlzdGRpcgorICAgICAgICBvcmlnaW5hbF9pc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBkZWYgcmVzdG9yZV9pc2ZpbGUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gb3JpZ2luYWxfaXNmaWxlCisgICAgICAgIG9yaWdpbmFsX2lzZGlyID0gb3MucGF0aC5pc2RpcgorICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCisKKyAgICAgICAgZGlyZWN0b3JpZXMgPSBbJ2FfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5MiddCisgICAgICAgIHBhdGhfbGlzdHMgPSBbZGlyZWN0b3JpZXMsIFtdLCBbXSwgW11dCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgcGF0aDogcGF0aF9saXN0cy5wb3AoMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfbGlzdGRpcikKKworICAgICAgICBvcy5wYXRoLmlzZGlyID0gbGFtYmRhIHBhdGg6IFRydWUKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCisKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgcGF0aDogb3MucGF0aC5iYXNlbmFtZShwYXRoKSBub3QgaW4gZGlyZWN0b3JpZXMKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNmaWxlKQorCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICAgICAgbG9hZF90ZXN0c19hcmdzID0gW10KKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICAgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0aCkgPT0gJ3Rlc3RfZGlyZWN0b3J5JzoKKyAgICAgICAgICAgICAgICAgICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHNfYXJncy5hcHBlbmQoKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGggKyAnIGxvYWRfdGVzdHMnXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhdGggPT0gb3RoZXIucGF0aAorCisgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBsYW1iZGEgbmFtZTogTW9kdWxlKG5hbWUpCisgICAgICAgIG9yaWdfbG9hZF90ZXN0cyA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSwgcGF0dGVybj1Ob25lKToKKyAgICAgICAgICAgICMgVGhpcyBpcyB3aGVyZSBsb2FkX3Rlc3RzIGlzIGNhbGxlZC4KKyAgICAgICAgICAgIGJhc2UgPSBvcmlnX2xvYWRfdGVzdHMobW9kdWxlLCBwYXR0ZXJuPXBhdHRlcm4pCisgICAgICAgICAgICByZXR1cm4gYmFzZSArIFttb2R1bGUucGF0aCArICcgbW9kdWxlIHRlc3RzJ10KKyAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUgPSBsb2FkVGVzdHNGcm9tTW9kdWxlCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGFtYmRhIHRoaW5nOiB0aGluZworCisgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9ICcvZm9vJworICAgICAgICAjIHRoaXMgdGltZSBubyAnLnB5JyBvbiB0aGUgcGF0dGVybiBzbyB0aGF0IGl0IGNhbiBtYXRjaAorICAgICAgICAjIGEgdGVzdCBwYWNrYWdlCisgICAgICAgIHN1aXRlID0gbGlzdChsb2FkZXIuX2ZpbmRfdGVzdHMoJy9mb28nLCAndGVzdCoucHknKSkKKworICAgICAgICAjIFdlIHNob3VsZCBoYXZlIGxvYWRlZCB0ZXN0cyBmcm9tIHRoZSBhX2RpcmVjdG9yeSBhbmQgdGVzdF9kaXJlY3RvcnkyCisgICAgICAgICMgZGlyZWN0bHkgYW5kIHZpYSBsb2FkX3Rlc3RzIGZvciB0aGUgdGVzdF9kaXJlY3RvcnkgcGFja2FnZSwgd2hpY2gKKyAgICAgICAgIyBzdGlsbCBjYWxscyB0aGUgYmFzZWxpbmUgbW9kdWxlIGxvYWRlci4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbWydhX2RpcmVjdG9yeSBtb2R1bGUgdGVzdHMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyd0ZXN0X2RpcmVjdG9yeSBsb2FkX3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RpcmVjdG9yeSBtb2R1bGUgdGVzdHMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyd0ZXN0X2RpcmVjdG9yeTIgbW9kdWxlIHRlc3RzJ11dKQorICAgICAgICAjIFRoZSB0ZXN0IG1vZHVsZSBwYXRocyBzaG91bGQgYmUgc29ydGVkIGZvciByZWxpYWJsZSBleGVjdXRpb24gb3JkZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUucGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydhX2RpcmVjdG9yeScsICd0ZXN0X2RpcmVjdG9yeScsICd0ZXN0X2RpcmVjdG9yeTInXSkKKwogCiAgICAgICAgICMgbG9hZF90ZXN0cyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIHdpdGggbG9hZGVyLCB0ZXN0cyBhbmQgcGF0dGVybgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5sb2FkX3Rlc3RzX2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWyhsb2FkZXIsICd0ZXN0X2RpcmVjdG9yeScgKyAnIG1vZHVsZSB0ZXN0cycsICd0ZXN0KicpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKGxvYWRlciwgW10sICd0ZXN0Ki5weScpXSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfdGVzdHNfY3VzdG9taXNlX3ZpYV9wYWNrYWdlX3BhdHRlcm4oc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHVzZXMgdGhlIGV4YW1wbGUgJ2RvLW5vdGhpbmcnIGxvYWRfdGVzdHMgZnJvbQorICAgICAgICAjIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS91bml0dGVzdC5odG1sI2xvYWQtdGVzdHMtcHJvdG9jb2wKKyAgICAgICAgIyB0byBtYWtlIHN1cmUgdGhhdCB0aGF0IGFjdHVhbGx5IHdvcmtzLgorICAgICAgICAjIEhvdXNla2VlcGluZworICAgICAgICBvcmlnaW5hbF9saXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBkZWYgcmVzdG9yZV9saXN0ZGlyKCk6CisgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2luYWxfbGlzdGRpcgorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9saXN0ZGlyKQorICAgICAgICBvcmlnaW5hbF9pc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBkZWYgcmVzdG9yZV9pc2ZpbGUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gb3JpZ2luYWxfaXNmaWxlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZmlsZSkKKyAgICAgICAgb3JpZ2luYWxfaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisgICAgICAgIGRlZiByZXN0b3JlX2lzZGlyKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZGlyID0gb3JpZ2luYWxfaXNkaXIKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzeXMucGF0aC5yZW1vdmUsIGFic3BhdGgoJy9mb28nKSkKKworICAgICAgICAjIFRlc3QgZGF0YTogd2UgZXhwZWN0IHRoZSBmb2xsb3dpbmc6CisgICAgICAgICMgYSBsaXN0ZGlyIHRvIGZpbmQgb3VyIHBhY2thZ2UsIGFuZCBpc2ZpbGUgYW5kIGlzZGlyIGNoZWNrcyBvbiBpdC4KKyAgICAgICAgIyBhIG1vZHVsZS1mcm9tLW5hbWUgY2FsbCB0byB0dXJuIHRoYXQgaW50byBhIG1vZHVsZQorICAgICAgICAjIGZvbGxvd2VkIGJ5IGxvYWRfdGVzdHMuCisgICAgICAgICMgdGhlbiBvdXIgbG9hZF90ZXN0cyB3aWxsIGNhbGwgZGlzY292ZXIoKSB3aGljaCBpcyBtZXNzeQorICAgICAgICAjIGJ1dCB0aGF0IGZpbmFsbHkgY2hhaW5zIGludG8gZmluZF90ZXN0cyBhZ2FpbiBmb3IgdGhlIGNoaWxkIGRpciAtCisgICAgICAgICMgd2hpY2ggaXMgd2h5IHdlIGRvbid0IGhhdmUgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgIyBXZSBleHBlY3QgdG8gc2VlOgorICAgICAgICAjIHRoZSBtb2R1bGUgbG9hZCB0ZXN0cyBmb3IgYm90aCBwYWNrYWdlIGFuZCBwbGFpbiBtb2R1bGUgY2FsbGVkLAorICAgICAgICAjIGFuZCB0aGUgcGxhaW4gbW9kdWxlIHJlc3VsdCBuZXN0ZWQgYnkgdGhlIHBhY2thZ2UgbW9kdWxlIGxvYWRfdGVzdHMKKyAgICAgICAgIyBpbmRpY2F0aW5nIHRoYXQgaXQgd2FzIHByb2Nlc3NlZCBhbmQgY291bGQgaGF2ZSBiZWVuIG11dGF0ZWQuCisgICAgICAgIHZmcyA9IHthYnNwYXRoKCcvZm9vJyk6IFsnbXlfcGFja2FnZSddLAorICAgICAgICAgICAgICAgYWJzcGF0aCgnL2Zvby9teV9wYWNrYWdlJyk6IFsnX19pbml0X18ucHknLCAndGVzdF9tb2R1bGUucHknXX0KKyAgICAgICAgZGVmIGxpc3RfZGlyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIGxpc3QodmZzW3BhdGhdKQorICAgICAgICBvcy5saXN0ZGlyID0gbGlzdF9kaXIKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGxhbWJkYSBwYXRoOiBub3QgcGF0aC5lbmRzd2l0aCgnLnB5JykKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgcGF0aDogcGF0aC5lbmRzd2l0aCgnLnB5JykKKworICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgICAgICAgICAgc2VsZi5wYXRocy5hcHBlbmQocGF0aCkKKyAgICAgICAgICAgICAgICBpZiBwYXRoLmVuZHN3aXRoKCd0ZXN0X21vZHVsZScpOgorICAgICAgICAgICAgICAgICAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZF90ZXN0c19hcmdzLmFwcGVuZCgobG9hZGVyLCB0ZXN0cywgcGF0dGVybikpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NlbGYucGF0aCArICcgbG9hZF90ZXN0cyddCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHNfYXJncy5hcHBlbmQoKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICAgICAgIyB0b3AgbGV2ZWwgZGlyZWN0b3J5IGNhY2hlZCBvbiBsb2FkZXIgaW5zdGFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlsZV9fID0gJy9mb28vbXlfcGFja2FnZS9fX2luaXRfXy5weScKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICAgICAgICAgICAgICAgICAgcGtnX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGggKyAnIGxvYWRfdGVzdHMnLCB0ZXN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gKyBwa2dfdGVzdHMKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhdGggPT0gb3RoZXIucGF0aAorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuX2dldF9tb2R1bGVfZnJvbV9uYW1lID0gbGFtYmRhIG5hbWU6IE1vZHVsZShuYW1lKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxhbWJkYSB0aGluZzogdGhpbmcKKworICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSBhYnNwYXRoKCcvZm9vJykKKyAgICAgICAgIyB0aGlzIHRpbWUgbm8gJy5weScgb24gdGhlIHBhdHRlcm4gc28gdGhhdCBpdCBjYW4gbWF0Y2gKKyAgICAgICAgIyBhIHRlc3QgcGFja2FnZQorICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKGFic3BhdGgoJy9mb28nKSwgJ3Rlc3QqLnB5JykpCisKKyAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSBsb2FkZWQgdGVzdHMgZnJvbSBib3RoIG15X3BhY2thZ2UgYW5kCisgICAgICAgICMgbXlfcGFjYWtnZS50ZXN0X21vZHVsZSwgYW5kIGFsc28gcnVuIHRoZSBsb2FkX3Rlc3RzIGhvb2sgaW4gYm90aC4KKyAgICAgICAgIyAobm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBuZXN0ZWQgVGVzdFN1aXRlcy4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgW1snbXlfcGFja2FnZSBsb2FkX3Rlc3RzJywgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbXlfcGFja2FnZS50ZXN0X21vZHVsZSBsb2FkX3Rlc3RzJ11dXSkKKyAgICAgICAgIyBQYXJlbnRzIGJlZm9yZSBjaGlsZHJlbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUucGF0aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydteV9wYWNrYWdlJywgJ215X3BhY2thZ2UudGVzdF9tb2R1bGUnXSkKKworICAgICAgICAjIGxvYWRfdGVzdHMgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgdHdpY2Ugd2l0aCBsb2FkZXIsIHRlc3RzIGFuZCBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLmxvYWRfdGVzdHNfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKGxvYWRlciwgW10sICd0ZXN0Ki5weScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobG9hZGVyLCBbXSwgJ3Rlc3QqLnB5JyldKQogCiAgICAgZGVmIHRlc3RfZGlzY292ZXIoc2VsZik6CiAgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQpAQCAtMTkyLDYgKzQwOSw1MSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9maW5kX3Rlc3RzX2FyZ3MsIFsoc3RhcnRfZGlyLCAncGF0dGVybicpXSkKICAgICAgICAgc2VsZi5hc3NlcnRJbih0b3BfbGV2ZWxfZGlyLCBzeXMucGF0aCkKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyX3N0YXJ0X2Rpcl9pc19wYWNrYWdlX2NhbGxzX3BhY2thZ2VfbG9hZF90ZXN0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB0aGUgcGFja2FnZSBsb2FkX3Rlc3RzIGluIGEgcGFja2FnZSBpcyBpbmRlZWQKKyAgICAgICAgIyBpbnZva2VkIHdoZW4gdGhlIHN0YXJ0X2RpciBpcyBhIHBhY2thZ2UgKGFuZCBub3QgdGhlIHRvcCBsZXZlbCkuCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIyNDU3CisKKyAgICAgICAgIyBUZXN0IGRhdGE6IHdlIGV4cGVjdCB0aGUgZm9sbG93aW5nOgorICAgICAgICAjIGFuIGlzZmlsZSB0byB2ZXJpZnkgdGhlIHBhY2thZ2UsIHRoZW4gaW1wb3J0aW5nIGFuZCBzY2FubmluZworICAgICAgICAjIGFzIHBlciBfZmluZF90ZXN0cycgbm9ybWFsIGJlaGF2aW91ci4KKyAgICAgICAgIyBXZSBleHBlY3QgdG8gc2VlIG91ciBsb2FkX3Rlc3RzIGhvb2sgY2FsbGVkIG9uY2UuCisgICAgICAgIHZmcyA9IHthYnNwYXRoKCcvdG9wbGV2ZWwnKTogWydzdGFydGRpciddLAorICAgICAgICAgICAgICAgYWJzcGF0aCgnL3RvcGxldmVsL3N0YXJ0ZGlyJyk6IFsnX19pbml0X18ucHknXX0KKyAgICAgICAgZGVmIGxpc3RfZGlyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIGxpc3QodmZzW3BhdGhdKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0YXR0ciwgb3MsICdsaXN0ZGlyJywgb3MubGlzdGRpcikKKyAgICAgICAgb3MubGlzdGRpciA9IGxpc3RfZGlyCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXRhdHRyLCBvcy5wYXRoLCAnaXNmaWxlJywgb3MucGF0aC5pc2ZpbGUpCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gbGFtYmRhIHBhdGg6IHBhdGguZW5kc3dpdGgoJy5weScpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXRhdHRyLCBvcy5wYXRoLCAnaXNkaXInLCBvcy5wYXRoLmlzZGlyKQorICAgICAgICBvcy5wYXRoLmlzZGlyID0gbGFtYmRhIHBhdGg6IG5vdCBwYXRoLmVuZHN3aXRoKCcucHknKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3lzLnBhdGgucmVtb3ZlLCBhYnNwYXRoKCcvdG9wbGV2ZWwnKSkKKworICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIHBhdGhzID0gW10KKyAgICAgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICAgICAgICAgIGRlZiBsb2FkX3Rlc3RzKHNlbGYsIGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ2xvYWRfdGVzdHMgY2FsbGVkICcgKyBzZWxmLnBhdGhdCisKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhdGggPT0gb3RoZXIucGF0aAorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuX2dldF9tb2R1bGVfZnJvbV9uYW1lID0gbGFtYmRhIG5hbWU6IE1vZHVsZShuYW1lKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxhbWJkYSB0aGluZzogdGhpbmcKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignL3RvcGxldmVsL3N0YXJ0ZGlyJywgdG9wX2xldmVsX2Rpcj0nL3RvcGxldmVsJykKKworICAgICAgICAjIFdlIHNob3VsZCBoYXZlIGxvYWRlZCB0ZXN0cyBmcm9tIHRoZSBwYWNrYWdlIF9faW5pdF9fLgorICAgICAgICAjIChub3JtYWxseSB0aGlzIHdvdWxkIGJlIG5lc3RlZCBUZXN0U3VpdGVzLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbWydsb2FkX3Rlc3RzIGNhbGxlZCBzdGFydGRpciddXSkKKwogICAgIGRlZiBzZXR1cF9pbXBvcnRfaXNzdWVfdGVzdHMoc2VsZiwgZmFrZWZpbGUpOgogICAgICAgICBsaXN0ZGlyID0gb3MubGlzdGRpcgogICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFtmYWtlZmlsZV0KQEAgLTIwNCw2ICs0NjYsMTcgQEAKICAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gb3JpZ19zeXNfcGF0aAogICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKIAorICAgIGRlZiBzZXR1cF9pbXBvcnRfaXNzdWVfcGFja2FnZV90ZXN0cyhzZWxmLCB2ZnMpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0YXR0ciwgb3MsICdsaXN0ZGlyJywgb3MubGlzdGRpcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNldGF0dHIsIG9zLnBhdGgsICdpc2ZpbGUnLCBvcy5wYXRoLmlzZmlsZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNldGF0dHIsIG9zLnBhdGgsICdpc2RpcicsIG9zLnBhdGguaXNkaXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzeXMucGF0aC5fX3NldGl0ZW1fXywgc2xpY2UoTm9uZSksIGxpc3Qoc3lzLnBhdGgpKQorICAgICAgICBkZWYgbGlzdF9kaXIocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gbGlzdCh2ZnNbcGF0aF0pCisgICAgICAgIG9zLmxpc3RkaXIgPSBsaXN0X2RpcgorICAgICAgICBvcy5wYXRoLmlzZGlyID0gbGFtYmRhIHBhdGg6IG5vdCBwYXRoLmVuZHN3aXRoKCcucHknKQorICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBwYXRoOiBwYXRoLmVuZHN3aXRoKCcucHknKQorCiAgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6CiAgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQogCkBAIC0yMTIsMTEgKzQ4NSw0NCBAQAogICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuZ2V0Y3dkKCksIHN5cy5wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisgICAgICAgICMgRXJyb3JzIGxvYWRpbmcgdGhlIHN1aXRlIGFyZSBhbHNvIGNhcHR1cmVkIGZvciBpbnRyb3NwZWN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFtdLCBsb2FkZXIuZXJyb3JzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihsb2FkZXIuZXJyb3JzKSkKKyAgICAgICAgZXJyb3IgPSBsb2FkZXIuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICdGYWlsZWQgdG8gaW1wb3J0IHRlc3QgbW9kdWxlOiB0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QnIGluIGVycm9yLAorICAgICAgICAgICAgJ21pc3NpbmcgZXJyb3Igc3RyaW5nIGluICVyJyAlIGVycm9yKQogICAgICAgICB0ZXN0ID0gbGlzdChsaXN0KHN1aXRlKVswXSlbMF0gIyBleHRyYWN0IHRlc3QgZnJvbSBzdWl0ZQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgdGVzdC50ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QoKQogCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9pbml0X21vZHVsZXNfdGhhdF9mYWlsX3RvX2ltcG9ydChzZWxmKToKKyAgICAgICAgdmZzID0ge2Fic3BhdGgoJy9mb28nKTogWydteV9wYWNrYWdlJ10sCisgICAgICAgICAgICAgICBhYnNwYXRoKCcvZm9vL215X3BhY2thZ2UnKTogWydfX2luaXRfXy5weScsICd0ZXN0X21vZHVsZS5weSddfQorICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV9wYWNrYWdlX3Rlc3RzKHZmcykKKyAgICAgICAgaW1wb3J0X2NhbGxzID0gW10KKyAgICAgICAgZGVmIF9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKToKKyAgICAgICAgICAgIGltcG9ydF9jYWxscy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJDYW5ub3QgaW1wb3J0IE5hbWUiKQorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLl9nZXRfbW9kdWxlX2Zyb21fbmFtZSA9IF9nZXRfbW9kdWxlX2Zyb21fbmFtZQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcihhYnNwYXRoKCcvZm9vJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihhYnNwYXRoKCcvZm9vJyksIHN5cy5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisgICAgICAgICMgRXJyb3JzIGxvYWRpbmcgdGhlIHN1aXRlIGFyZSBhbHNvIGNhcHR1cmVkIGZvciBpbnRyb3NwZWN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFtdLCBsb2FkZXIuZXJyb3JzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihsb2FkZXIuZXJyb3JzKSkKKyAgICAgICAgZXJyb3IgPSBsb2FkZXIuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICdGYWlsZWQgdG8gaW1wb3J0IHRlc3QgbW9kdWxlOiBteV9wYWNrYWdlJyBpbiBlcnJvciwKKyAgICAgICAgICAgICdtaXNzaW5nIGVycm9yIHN0cmluZyBpbiAlcicgJSBlcnJvcikKKyAgICAgICAgdGVzdCA9IGxpc3QobGlzdChzdWl0ZSlbMF0pWzBdICMgZXh0cmFjdCB0ZXN0IGZyb20gc3VpdGUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICB0ZXN0Lm15X3BhY2thZ2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydF9jYWxscywgWydteV9wYWNrYWdlJ10pCisKICAgICAgICAgIyBDaGVjayBwaWNrbGFiaWxpdHkKICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CiAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHRlc3QsIHByb3RvKSkKQEAgLTI0MSw2ICs1NDcsMzAgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CiAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHN1aXRlLCBwcm90bykpCiAKKyAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX2luaXRfbW9kdWxlX3RoYXRfcmFpc2VzX1NraXBUZXN0X29uX2ltcG9ydChzZWxmKToKKyAgICAgICAgdmZzID0ge2Fic3BhdGgoJy9mb28nKTogWydteV9wYWNrYWdlJ10sCisgICAgICAgICAgICAgICBhYnNwYXRoKCcvZm9vL215X3BhY2thZ2UnKTogWydfX2luaXRfXy5weScsICd0ZXN0X21vZHVsZS5weSddfQorICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV9wYWNrYWdlX3Rlc3RzKHZmcykKKyAgICAgICAgaW1wb3J0X2NhbGxzID0gW10KKyAgICAgICAgZGVmIF9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKToKKyAgICAgICAgICAgIGltcG9ydF9jYWxscy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdza2lwcGVyb28nKQorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLl9nZXRfbW9kdWxlX2Zyb21fbmFtZSA9IF9nZXRfbW9kdWxlX2Zyb21fbmFtZQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcihhYnNwYXRoKCcvZm9vJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihhYnNwYXRoKCcvZm9vJyksIHN5cy5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydF9jYWxscywgWydteV9wYWNrYWdlJ10pCisKKyAgICAgICAgIyBDaGVjayBwaWNrbGFiaWxpdHkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHN1aXRlLCBwcm90bykpCisKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfcGFyc2VBcmdzKHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCiAKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKaW5kZXggYjYyYTFiNS4uNGI5Nzg4MiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKQEAgLTEsMTIgKzEsMzcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwotCitpbXBvcnQgd2FybmluZ3MKIAogaW1wb3J0IHVuaXR0ZXN0CiAKKyMgRGVjb3JhdG9yIHVzZWQgaW4gdGhlIGRlcHJlY2F0aW9uIHRlc3RzIHRvIHJlc2V0IHRoZSB3YXJuaW5nIHJlZ2lzdHJ5IGZvcgorIyB0ZXN0IGlzb2xhdGlvbiBhbmQgcmVwcm9kdWNpYmlsaXR5LgorZGVmIHdhcm5pbmdyZWdpc3RyeShmdW5jKToKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd3MpOgorICAgICAgICBtaXNzaW5nID0gW10KKyAgICAgICAgc2F2ZWQgPSBnZXRhdHRyKHdhcm5pbmdzLCAnX193YXJuaW5ncmVnaXN0cnlfXycsIG1pc3NpbmcpLmNvcHkoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzYXZlZCBpcyBtaXNzaW5nOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHdhcm5pbmdzLl9fd2FybmluZ3JlZ2lzdHJ5X18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2FybmluZ3MuX193YXJuaW5ncmVnaXN0cnlfXyA9IHNhdmVkCisgICAgcmV0dXJuIHdyYXBwZXIKKwogCiBjbGFzcyBUZXN0X1Rlc3RMb2FkZXIodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgIyMjIEJhc2ljIG9iamVjdCB0ZXN0cworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGRlZiB0ZXN0X19faW5pdF9fKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgbG9hZGVyLmVycm9ycykKKwogICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTE1MCw2ICsxNzUsNyBAQAogCiAgICAgIyBDaGVjayB0aGF0IGxvYWRUZXN0c0Zyb21Nb2R1bGUgaG9ub3JzIChvciBub3QpIGEgbW9kdWxlCiAgICAgIyB3aXRoIGEgbG9hZF90ZXN0cyBmdW5jdGlvbi4KKyAgICBAd2FybmluZ3JlZ2lzdHJ5CiAgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbG9hZF90ZXN0cyhzZWxmKToKICAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQogICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE2OCwxMCArMTk0LDE0NSBAQAogICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgdW5pdHRlc3QuVGVzdFN1aXRlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRfdGVzdHNfYXJncywgW2xvYWRlciwgc3VpdGUsIE5vbmVdKQorICAgICAgICAjIFdpdGggUHl0aG9uIDMuNSwgdGhlIHVuZG9jdW1lbnRlZCBhbmQgdW5vZmZpY2lhbCB1c2VfbG9hZF90ZXN0cyBpcworICAgICAgICAjIGlnbm9yZWQgKGFuZCBkZXByZWNhdGVkKS4KKyAgICAgICAgbG9hZF90ZXN0c19hcmdzID0gW10KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9RmFsc2UpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQorICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtLCB1c2VfbG9hZF90ZXN0cz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkX3Rlc3RzX2FyZ3MsIFtsb2FkZXIsIHN1aXRlLCBOb25lXSkKKworICAgIEB3YXJuaW5ncmVnaXN0cnkKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX191c2VfbG9hZF90ZXN0c19kZXByZWNhdGVkX3Bvc2l0aW9uYWwoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKIAogICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MgPSBbXQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0sIHVzZV9sb2FkX3Rlc3RzPUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRfdGVzdHNfYXJncywgW10pCisgICAgICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3RzLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MuZXh0ZW5kKChsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBtLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisgICAgICAgICMgVGhlIG1ldGhvZCBzdGlsbCB3b3Jrcy4KKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgICMgdXNlX2xvYWRfdGVzdHM9VHJ1ZSBhcyBhIHBvc2l0aW9uYWwgYXJndW1lbnQuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCisgICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0sIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKyAgICAgICAgIyBsb2FkX3Rlc3RzIHdhcyBzdGlsbCBjYWxsZWQgYmVjYXVzZSB1c2VfbG9hZF90ZXN0cyBpcyBkZXByZWNhdGVkCisgICAgICAgICMgYW5kIGlnbm9yZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZF90ZXN0c19hcmdzLCBbbG9hZGVyLCBzdWl0ZSwgTm9uZV0pCisgICAgICAgICMgV2UgZ290IGEgd2FybmluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3Wy0xXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZV9sb2FkX3Rlc3RzIGlzIGRlcHJlY2F0ZWQgYW5kIGlnbm9yZWQnKQorCisgICAgQHdhcm5pbmdyZWdpc3RyeQorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX3VzZV9sb2FkX3Rlc3RzX2RlcHJlY2F0ZWRfa2V5d29yZChzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3RzLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MuZXh0ZW5kKChsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBtLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisgICAgICAgICMgVGhlIG1ldGhvZCBzdGlsbCB3b3Jrcy4KKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCisgICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0sIHVzZV9sb2FkX3Rlc3RzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKyAgICAgICAgIyBsb2FkX3Rlc3RzIHdhcyBzdGlsbCBjYWxsZWQgYmVjYXVzZSB1c2VfbG9hZF90ZXN0cyBpcyBkZXByZWNhdGVkCisgICAgICAgICMgYW5kIGlnbm9yZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZF90ZXN0c19hcmdzLCBbbG9hZGVyLCBzdWl0ZSwgTm9uZV0pCisgICAgICAgICMgV2UgZ290IGEgd2FybmluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3Wy0xXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZV9sb2FkX3Rlc3RzIGlzIGRlcHJlY2F0ZWQgYW5kIGlnbm9yZWQnKQorCisgICAgQHdhcm5pbmdyZWdpc3RyeQorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX3Rvb19tYW55X3Bvc2l0aW9uYWxfYXJncyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3RzLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MuZXh0ZW5kKChsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBtLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY20sIFwKKyAgICAgICAgICAgICB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignYWx3YXlzJykKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0sIEZhbHNlLCAndGVzdG1lLionKQorICAgICAgICAjIFdlIHN0aWxsIGdvdCB0aGUgZGVwcmVjYXRpb24gd2FybmluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3Wy0xXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZV9sb2FkX3Rlc3RzIGlzIGRlcHJlY2F0ZWQgYW5kIGlnbm9yZWQnKQorICAgICAgICAjIFdlIGFsc28gZ290IGEgVHlwZUVycm9yIGZvciB0b28gbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGNtLmV4Y2VwdGlvbiksIFR5cGVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgJ2xvYWRUZXN0c0Zyb21Nb2R1bGUoKSB0YWtlcyAxIHBvc2l0aW9uYWwgYXJndW1lbnQgYnV0IDMgd2VyZSBnaXZlbicpCisKKyAgICBAd2FybmluZ3JlZ2lzdHJ5CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fdXNlX2xvYWRfdGVzdHNfb3RoZXJfYmFkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MgPSBbXQorICAgICAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ZXN0cywgdW5pdHRlc3QuVGVzdFN1aXRlKQorICAgICAgICAgICAgbG9hZF90ZXN0c19hcmdzLmV4dGVuZCgobG9hZGVyLCB0ZXN0cywgcGF0dGVybikpCisgICAgICAgICAgICByZXR1cm4gdGVzdHMKKyAgICAgICAgbS5sb2FkX3Rlc3RzID0gbG9hZF90ZXN0cworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKAorICAgICAgICAgICAgICAgICAgICBtLCB1c2VfbG9hZF90ZXN0cz1GYWxzZSwgdmVyeV9iYWQ9VHJ1ZSwgd29yc2U9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjbS5leGNlcHRpb24pLCBUeXBlRXJyb3IpCisgICAgICAgICMgVGhlIGVycm9yIG1lc3NhZ2UgbmFtZXMgdGhlIGZpcnN0IGJhZCBhcmd1bWVudCBhbHBoYWJldGljYWxseSwKKyAgICAgICAgIyBob3dldmVyIHVzZV9sb2FkX3Rlc3RzICh3aGljaCBzb3J0cyBmaXJzdCkgaXMgaWdub3JlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgImxvYWRUZXN0c0Zyb21Nb2R1bGUoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICd2ZXJ5X2JhZCciKQorCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fcGF0dGVybihzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3RzLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MuZXh0ZW5kKChsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBtLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSwgcGF0dGVybj0ndGVzdG1lLionKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkX3Rlc3RzX2FyZ3MsIFtsb2FkZXIsIHN1aXRlLCAndGVzdG1lLionXSkKIAogICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX2ZhdWx0eV9sb2FkX3Rlc3RzKHNlbGYpOgogICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCkBAIC0xODQsNiArMzQ1LDEzIEBACiAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCB1bml0dGVzdC5UZXN0U3VpdGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKyAgICAgICAgIyBFcnJvcnMgbG9hZGluZyB0aGUgc3VpdGUgYXJlIGFsc28gY2FwdHVyZWQgZm9yIGludHJvc3BlY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoW10sIGxvYWRlci5lcnJvcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGxvYWRlci5lcnJvcnMpKQorICAgICAgICBlcnJvciA9IGxvYWRlci5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgJ0ZhaWxlZCB0byBjYWxsIGxvYWRfdGVzdHM6JyBpbiBlcnJvciwKKyAgICAgICAgICAgICdtaXNzaW5nIGVycm9yIHN0cmluZyBpbiAlcicgJSBlcnJvcikKICAgICAgICAgdGVzdCA9IGxpc3Qoc3VpdGUpWzBdCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJzb21lIGZhaWx1cmUiLCB0ZXN0Lm0pCkBAIC0yMTksMTUgKzM4NywxNSBAQAogICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19tYWxmb3JtZWRfbmFtZShzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAKLSAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgVmFsdWVFcnJvciBvciBJbXBvcnRFcnJvcj8KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ2FiYyAoKSAvLycpCisgICAgICAgIGVycm9yLCB0ZXN0ID0gc2VsZi5jaGVja19kZWZlcnJlZF9lcnJvcihsb2FkZXIsIHN1aXRlKQorICAgICAgICBleHBlY3RlZCA9ICJGYWlsZWQgdG8gaW1wb3J0IHRlc3QgbW9kdWxlOiBhYmMgKCkgLy8iCisgICAgICAgIGV4cGVjdGVkX3JlZ2V4ID0gIkZhaWxlZCB0byBpbXBvcnQgdGVzdCBtb2R1bGU6IGFiYyBcKFwpIC8vIgorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgZXhwZWN0ZWQsIGVycm9yLAorICAgICAgICAgICAgJ21pc3NpbmcgZXJyb3Igc3RyaW5nIGluICVyJyAlIGVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgSW1wb3J0RXJyb3IsIGV4cGVjdGVkX3JlZ2V4LCBnZXRhdHRyKHRlc3QsICdhYmMgKCkgLy8nKSkKIAogICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0byBhCiAgICAgIyBtb2R1bGUiCkBAIC0yMzYsMjggKzQwNCw0NyBAQAogICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX21vZHVsZV9uYW1lKHNlbGYpOgogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3NkYXNmYXNmYXNkZicpCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgJ3NkYXNmYXNmYXNkZiciKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBJbXBvcnRFcnJvciIpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdzZGFzZmFzZmFzZGYnKQorICAgICAgICBleHBlY3RlZCA9ICJObyBtb2R1bGUgbmFtZWQgJ3NkYXNmYXNmYXNkZiciCisgICAgICAgIGVycm9yLCB0ZXN0ID0gc2VsZi5jaGVja19kZWZlcnJlZF9lcnJvcihsb2FkZXIsIHN1aXRlKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgZXhwZWN0ZWQsIGVycm9yLAorICAgICAgICAgICAgJ21pc3NpbmcgZXJyb3Igc3RyaW5nIGluICVyJyAlIGVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCBleHBlY3RlZCwgdGVzdC5zZGFzZmFzZmFzZGYpCiAKICAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KICAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKICAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCiAgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgogICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgaXMgZm91bmQsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX2F0dHJfbmFtZShzZWxmKToKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgaXMgZm91bmQsIGJ1dCB0aGUgYXR0cmlidXRlIGlzbid0PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX2F0dHJfbmFtZV9vbl9tb2R1bGUoc2VsZik6CiAgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJykKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndW5pdHRlc3QubG9hZGVyLnNkYXNmYXNmYXNkZicpCisgICAgICAgIGV4cGVjdGVkID0gIm1vZHVsZSAndW5pdHRlc3QubG9hZGVyJyBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIgorICAgICAgICBlcnJvciwgdGVzdCA9IHNlbGYuY2hlY2tfZGVmZXJyZWRfZXJyb3IobG9hZGVyLCBzdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIGV4cGVjdGVkLCBlcnJvciwKKyAgICAgICAgICAgICdtaXNzaW5nIGVycm9yIHN0cmluZyBpbiAlcicgJSBlcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChBdHRyaWJ1dGVFcnJvciwgZXhwZWN0ZWQsIHRlc3Quc2Rhc2Zhc2Zhc2RmKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgbW9kdWxlIGlzIGZvdW5kLCBidXQgdGhlIGF0dHJpYnV0ZSBpc24ndD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fdW5rbm93bl9hdHRyX25hbWVfb25fcGFja2FnZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3VuaXR0ZXN0LnNkYXNmYXNmYXNkZicpCisgICAgICAgIGV4cGVjdGVkID0gIk5vIG1vZHVsZSBuYW1lZCAndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJyIKKyAgICAgICAgZXJyb3IsIHRlc3QgPSBzZWxmLmNoZWNrX2RlZmVycmVkX2Vycm9yKGxvYWRlciwgc3VpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICBleHBlY3RlZCwgZXJyb3IsCisgICAgICAgICAgICAnbWlzc2luZyBlcnJvciBzdHJpbmcgaW4gJXInICUgZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsIGV4cGVjdGVkLCB0ZXN0LnNkYXNmYXNmYXNkZikKIAogICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwogICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZApAQCAtMjY5LDEyICs0NTYsMTMgQEAKICAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfdW5rbm93bl9uYW1lKHNlbGYpOgogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3NkYXNmYXNmYXNkZicsIHVuaXR0ZXN0KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdzZGFzZmFzZmFzZGYnLCB1bml0dGVzdCkKKyAgICAgICAgZXhwZWN0ZWQgPSAibW9kdWxlICd1bml0dGVzdCcgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIKKyAgICAgICAgZXJyb3IsIHRlc3QgPSBzZWxmLmNoZWNrX2RlZmVycmVkX2Vycm9yKGxvYWRlciwgc3VpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICBleHBlY3RlZCwgZXJyb3IsCisgICAgICAgICAgICAnbWlzc2luZyBlcnJvciBzdHJpbmcgaW4gJXInICUgZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoQXR0cmlidXRlRXJyb3IsIGV4cGVjdGVkLCB0ZXN0LnNkYXNmYXNmYXNkZikKIAogICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwogICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZApAQCAtMjkwLDEyICs0NzgsMTMgQEAKICAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfZW1wdHlfbmFtZShzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCcnLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCcnLCB1bml0dGVzdCkKKyAgICAgICAgZXJyb3IsIHRlc3QgPSBzZWxmLmNoZWNrX2RlZmVycmVkX2Vycm9yKGxvYWRlciwgc3VpdGUpCisgICAgICAgIGV4cGVjdGVkID0gImhhcyBubyBhdHRyaWJ1dGUgJyciCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICBleHBlY3RlZCwgZXJyb3IsCisgICAgICAgICAgICAnbWlzc2luZyBlcnJvciBzdHJpbmcgaW4gJXInICUgZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoQXR0cmlidXRlRXJyb3IsIGV4cGVjdGVkLCBnZXRhdHRyKHRlc3QsICcnKSkKIAogICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwogICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZApAQCAtMzEwLDE0ICs0OTksMTUgQEAKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAKICAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nLCB1bml0dGVzdCkKKyAgICAgICAgZXJyb3IsIHRlc3QgPSBzZWxmLmNoZWNrX2RlZmVycmVkX2Vycm9yKGxvYWRlciwgc3VpdGUpCisgICAgICAgIGV4cGVjdGVkID0gIm1vZHVsZSAndW5pdHRlc3QnIGhhcyBubyBhdHRyaWJ1dGUgJ2FiYyAoKSAvLyciCisgICAgICAgIGV4cGVjdGVkX3JlZ2V4ID0gIm1vZHVsZSAndW5pdHRlc3QnIGhhcyBubyBhdHRyaWJ1dGUgJ2FiYyBcKFwpIC8vJyIKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIGV4cGVjdGVkLCBlcnJvciwKKyAgICAgICAgICAgICdtaXNzaW5nIGVycm9yIHN0cmluZyBpbiAlcicgJSBlcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIEF0dHJpYnV0ZUVycm9yLCBleHBlY3RlZF9yZWdleCwgZ2V0YXR0cih0ZXN0LCAnYWJjICgpIC8vJykpCiAKICAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgogICAgICMKQEAgLTQyMywxMiArNjEzLDEzIEBACiAgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKIAogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3Rmb28nLCBtKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAidHlwZSBvYmplY3QgJ015VGVzdENhc2UnIGhhcyBubyBhdHRyaWJ1dGUgJ3Rlc3Rmb28nIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RjYXNlXzEudGVzdGZvbycsIG0pCisgICAgICAgIGV4cGVjdGVkID0gInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIKKyAgICAgICAgZXJyb3IsIHRlc3QgPSBzZWxmLmNoZWNrX2RlZmVycmVkX2Vycm9yKGxvYWRlciwgc3VpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICBleHBlY3RlZCwgZXJyb3IsCisgICAgICAgICAgICAnbWlzc2luZyBlcnJvciBzdHJpbmcgaW4gJXInICUgZXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoQXR0cmlidXRlRXJyb3IsIGV4cGVjdGVkLCB0ZXN0LnRlc3Rmb28pCiAKICAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KICAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgLi4uIFRlc3RTdWl0ZSBpbnN0YW5jZSIKQEAgLTU0Niw2ICs3MzcsMjMgQEAKICAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKCkKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKKyAgICBkZWYgY2hlY2tfZGVmZXJyZWRfZXJyb3Ioc2VsZiwgbG9hZGVyLCBzdWl0ZSk6CisgICAgICAgICIiIkhlbHBlciBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgdGhhdCBlcnJvcnMgaW4gbG9hZGluZyBhcmUgcmVwb3J0ZWQuCisKKyAgICAgICAgOnBhcmFtIGxvYWRlcjogQSBsb2FkZXIgd2l0aCBzb21lIGVycm9ycy4KKyAgICAgICAgOnBhcmFtIHN1aXRlOiBBIHN1aXRlIHRoYXQgc2hvdWxkIGhhdmUgYSBsYXRlIGJvdW5kIGVycm9yLgorICAgICAgICA6cmV0dXJuOiBUaGUgZmlyc3QgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBsb2FkZXIgYW5kIHRoZSB0ZXN0IG9iamVjdAorICAgICAgICAgICAgZnJvbSB0aGUgc3VpdGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorICAgICAgICAjIEVycm9ycyBsb2FkaW5nIHRoZSBzdWl0ZSBhcmUgYWxzbyBjYXB0dXJlZCBmb3IgaW50cm9zcGVjdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChbXSwgbG9hZGVyLmVycm9ycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4obG9hZGVyLmVycm9ycykpCisgICAgICAgIGVycm9yID0gbG9hZGVyLmVycm9yc1swXQorICAgICAgICB0ZXN0ID0gbGlzdChzdWl0ZSlbMF0KKyAgICAgICAgcmV0dXJuIGVycm9yLCB0ZXN0CisKICAgICAjICJTaW1pbGFyIHRvIGxvYWRUZXN0c0Zyb21OYW1lKCksIGJ1dCB0YWtlcyBhIHNlcXVlbmNlIG9mIG5hbWVzIHJhdGhlcgogICAgICMgdGhhbiBhIHNpbmdsZSBuYW1lLiIKICAgICAjCkBAIC01OTgsMTQgKzgwNiwxNSBAQAogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKIAogICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBWYWx1ZUVycm9yIG9yIEltcG9ydEVycm9yPwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnYWJjICgpIC8vJ10pCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnYWJjICgpIC8vJ10pCisgICAgICAgIGVycm9yLCB0ZXN0ID0gc2VsZi5jaGVja19kZWZlcnJlZF9lcnJvcihsb2FkZXIsIGxpc3Qoc3VpdGUpWzBdKQorICAgICAgICBleHBlY3RlZCA9ICJGYWlsZWQgdG8gaW1wb3J0IHRlc3QgbW9kdWxlOiBhYmMgKCkgLy8iCisgICAgICAgIGV4cGVjdGVkX3JlZ2V4ID0gIkZhaWxlZCB0byBpbXBvcnQgdGVzdCBtb2R1bGU6IGFiYyBcKFwpIC8vIgorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgZXhwZWN0ZWQsICBlcnJvciwKKyAgICAgICAgICAgICdtaXNzaW5nIGVycm9yIHN0cmluZyBpbiAlcicgJSBlcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIEltcG9ydEVycm9yLCBleHBlY3RlZF9yZWdleCwgZ2V0YXR0cih0ZXN0LCAnYWJjICgpIC8vJykpCiAKICAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KICAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKQEAgLTYxNiwxMiArODI1LDEzIEBACiAgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX21vZHVsZV9uYW1lKHNlbGYpOgogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnc2Rhc2Zhc2Zhc2RmJ10pCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgJ3NkYXNmYXNmYXNkZiciKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgSW1wb3J0RXJyb3IiKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydzZGFzZmFzZmFzZGYnXSkKKyAgICAgICAgZXJyb3IsIHRlc3QgPSBzZWxmLmNoZWNrX2RlZmVycmVkX2Vycm9yKGxvYWRlciwgbGlzdChzdWl0ZSlbMF0pCisgICAgICAgIGV4cGVjdGVkID0gIkZhaWxlZCB0byBpbXBvcnQgdGVzdCBtb2R1bGU6IHNkYXNmYXNmYXNkZiIKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIGV4cGVjdGVkLCBlcnJvciwKKyAgICAgICAgICAgICdtaXNzaW5nIGVycm9yIHN0cmluZyBpbiAlcicgJSBlcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgZXhwZWN0ZWQsIHRlc3Quc2Rhc2Zhc2Zhc2RmKQogCiAgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCiAgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCkBAIC02MzIsMTIgKzg0MiwxNCBAQAogICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fdW5rbm93bl9hdHRyX25hbWUoc2VsZik6CiAgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd1bml0dGVzdC5zZGFzZmFzZmFzZGYnLCAndW5pdHRlc3QnXSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKAorICAgICAgICAgICAgWyd1bml0dGVzdC5sb2FkZXIuc2Rhc2Zhc2Zhc2RmJywgJ3VuaXR0ZXN0LnRlc3QuZHVtbXknXSkKKyAgICAgICAgZXJyb3IsIHRlc3QgPSBzZWxmLmNoZWNrX2RlZmVycmVkX2Vycm9yKGxvYWRlciwgbGlzdChzdWl0ZSlbMF0pCisgICAgICAgIGV4cGVjdGVkID0gIm1vZHVsZSAndW5pdHRlc3QubG9hZGVyJyBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIgorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgZXhwZWN0ZWQsIGVycm9yLAorICAgICAgICAgICAgJ21pc3NpbmcgZXJyb3Igc3RyaW5nIGluICVyJyAlIGVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEF0dHJpYnV0ZUVycm9yLCBleHBlY3RlZCwgdGVzdC5zZGFzZmFzZmFzZGYpCiAKICAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KICAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKQEAgLTY1MSwxMiArODYzLDEzIEBACiAgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX25hbWVfcmVsYXRpdmVfMShzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3NkYXNmYXNmYXNkZiddLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydzZGFzZmFzZmFzZGYnXSwgdW5pdHRlc3QpCisgICAgICAgIGVycm9yLCB0ZXN0ID0gc2VsZi5jaGVja19kZWZlcnJlZF9lcnJvcihsb2FkZXIsIGxpc3Qoc3VpdGUpWzBdKQorICAgICAgICBleHBlY3RlZCA9ICJtb2R1bGUgJ3VuaXR0ZXN0JyBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIgorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgZXhwZWN0ZWQsIGVycm9yLAorICAgICAgICAgICAgJ21pc3NpbmcgZXJyb3Igc3RyaW5nIGluICVyJyAlIGVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEF0dHJpYnV0ZUVycm9yLCBleHBlY3RlZCwgdGVzdC5zZGFzZmFzZmFzZGYpCiAKICAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KICAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKQEAgLTY3MCwxMiArODgzLDEzIEBACiAgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX25hbWVfcmVsYXRpdmVfMihzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ1Rlc3RDYXNlJywgJ3NkYXNmYXNmYXNkZiddLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydUZXN0Q2FzZScsICdzZGFzZmFzZmFzZGYnXSwgdW5pdHRlc3QpCisgICAgICAgIGVycm9yLCB0ZXN0ID0gc2VsZi5jaGVja19kZWZlcnJlZF9lcnJvcihsb2FkZXIsIGxpc3Qoc3VpdGUpWzFdKQorICAgICAgICBleHBlY3RlZCA9ICJtb2R1bGUgJ3VuaXR0ZXN0JyBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIgorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgZXhwZWN0ZWQsIGVycm9yLAorICAgICAgICAgICAgJ21pc3NpbmcgZXJyb3Igc3RyaW5nIGluICVyJyAlIGVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEF0dHJpYnV0ZUVycm9yLCBleHBlY3RlZCwgdGVzdC5zZGFzZmFzZmFzZGYpCiAKICAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KICAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKQEAgLTY5MSwxMiArOTA1LDEzIEBACiAgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lKHNlbGYpOgogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnJ10sIHVuaXR0ZXN0KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnJ10sIHVuaXR0ZXN0KQorICAgICAgICBlcnJvciwgdGVzdCA9IHNlbGYuY2hlY2tfZGVmZXJyZWRfZXJyb3IobG9hZGVyLCBsaXN0KHN1aXRlKVswXSkKKyAgICAgICAgZXhwZWN0ZWQgPSAiaGFzIG5vIGF0dHJpYnV0ZSAnJyIKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIGV4cGVjdGVkLCBlcnJvciwKKyAgICAgICAgICAgICdtaXNzaW5nIGVycm9yIHN0cmluZyBpbiAlcicgJSBlcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChBdHRyaWJ1dGVFcnJvciwgZXhwZWN0ZWQsIGdldGF0dHIodGVzdCwgJycpKQogCiAgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCiAgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCkBAIC03MTAsMTQgKzkyNSwxNSBAQAogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKIAogICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBBdHRyaWJ1dGVFcnJvciBvciBWYWx1ZUVycm9yPwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnYWJjICgpIC8vJ10sIHVuaXR0ZXN0KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ2FiYyAoKSAvLyddLCB1bml0dGVzdCkKKyAgICAgICAgZXJyb3IsIHRlc3QgPSBzZWxmLmNoZWNrX2RlZmVycmVkX2Vycm9yKGxvYWRlciwgbGlzdChzdWl0ZSlbMF0pCisgICAgICAgIGV4cGVjdGVkID0gIm1vZHVsZSAndW5pdHRlc3QnIGhhcyBubyBhdHRyaWJ1dGUgJ2FiYyAoKSAvLyciCisgICAgICAgIGV4cGVjdGVkX3JlZ2V4ID0gIm1vZHVsZSAndW5pdHRlc3QnIGhhcyBubyBhdHRyaWJ1dGUgJ2FiYyBcKFwpIC8vJyIKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIGV4cGVjdGVkLCBlcnJvciwKKyAgICAgICAgICAgICdtaXNzaW5nIGVycm9yIHN0cmluZyBpbiAlcicgJSBlcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIEF0dHJpYnV0ZUVycm9yLCBleHBlY3RlZF9yZWdleCwgZ2V0YXR0cih0ZXN0LCAnYWJjICgpIC8vJykpCiAKICAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgogICAgICMKQEAgLTgzNSwxMiArMTA1MSwxMyBAQAogICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCiAKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0Y2FzZV8xLnRlc3Rmb28nXSwgbSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdGZvbyddLCBtKQorICAgICAgICBlcnJvciwgdGVzdCA9IHNlbGYuY2hlY2tfZGVmZXJyZWRfZXJyb3IobG9hZGVyLCBsaXN0KHN1aXRlKVswXSkKKyAgICAgICAgZXhwZWN0ZWQgPSAidHlwZSBvYmplY3QgJ015VGVzdENhc2UnIGhhcyBubyBhdHRyaWJ1dGUgJ3Rlc3Rmb28nIgorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgZXhwZWN0ZWQsIGVycm9yLAorICAgICAgICAgICAgJ21pc3NpbmcgZXJyb3Igc3RyaW5nIGluICVyJyAlIGVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEF0dHJpYnV0ZUVycm9yLCBleHBlY3RlZCwgdGVzdC50ZXN0Zm9vKQogCiAgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCiAgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIC4uLiBUZXN0U3VpdGUgaW5zdGFuY2UiCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKaW5kZXggNzI1ZDY3Zi4uMWNmYzE3OSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQpAQCAtMTM0LDYgKzEzNCw3IEBACiAgICAgcmVzdWx0ID0gTm9uZQogICAgIHZlcmJvc2l0eSA9IDEKICAgICBkZWZhdWx0VGVzdCA9IE5vbmUKKyAgICB0Yl9sb2NhbHMgPSBGYWxzZQogICAgIHRlc3RSdW5uZXIgPSBOb25lCiAgICAgdGVzdExvYWRlciA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyCiAgICAgbW9kdWxlID0gJ19fbWFpbl9fJwpAQCAtMTQ3LDE4ICsxNDgsMTkgQEAKIGNsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKICAgICBpbml0QXJncyA9IE5vbmUKICAgICB0ZXN0ID0gTm9uZQotICAgIHJhaXNlRXJyb3IgPSBGYWxzZQorICAgIHJhaXNlRXJyb3IgPSAwCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICBGYWtlUnVubmVyLmluaXRBcmdzID0ga3dhcmdzCiAgICAgICAgIGlmIEZha2VSdW5uZXIucmFpc2VFcnJvcjoKLSAgICAgICAgICAgIEZha2VSdW5uZXIucmFpc2VFcnJvciA9IEZhbHNlCisgICAgICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgLT0gMQogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCiAKICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgogICAgICAgICBGYWtlUnVubmVyLnRlc3QgPSB0ZXN0CiAgICAgICAgIHJldHVybiBSRVNVTFQKIAorCiBjbGFzcyBUZXN0Q29tbWFuZExpbmVBcmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE2Niw3ICsxNjgsNyBAQAogICAgICAgICBzZWxmLnByb2dyYW0uY3JlYXRlVGVzdHMgPSBsYW1iZGE6IE5vbmUKICAgICAgICAgRmFrZVJ1bm5lci5pbml0QXJncyA9IE5vbmUKICAgICAgICAgRmFrZVJ1bm5lci50ZXN0ID0gTm9uZQotICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgPSBGYWxzZQorICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgPSAwCiAKICAgICBkZWYgdGVzdFZlcmJvc2l0eShzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQpAQCAtMjU2LDYgKzI1OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5pbml0QXJncywgeyd2ZXJib3NpdHknOiAndmVyYm9zaXR5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsZmFzdCc6ICdmYWlsZmFzdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnVmZmVyJzogJ2J1ZmZlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGJfbG9jYWxzJzogRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FybmluZ3MnOiAnd2FybmluZ3MnfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnRlc3QsICd0ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLnJlc3VsdCwgUkVTVUxUKQpAQCAtMjc0LDEwICsyNzcsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnRlc3QsICd0ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLnJlc3VsdCwgUkVTVUxUKQogCisgICAgZGVmIHRlc3RfbG9jYWxzKHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisKKyAgICAgICAgcHJvZ3JhbS50ZXN0UnVubmVyID0gRmFrZVJ1bm5lcgorICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgJy0tbG9jYWxzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcHJvZ3JhbS50Yl9sb2NhbHMpCisgICAgICAgIHByb2dyYW0ucnVuVGVzdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIuaW5pdEFyZ3MsIHsnYnVmZmVyJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsZmFzdCc6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGJfbG9jYWxzJzogVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcmJvc2l0eSc6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5ncyc6IE5vbmV9KQorCiAgICAgZGVmIHRlc3RSdW5UZXN0c09sZFJ1bm5lckNsYXNzKHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCiAKLSAgICAgICAgRmFrZVJ1bm5lci5yYWlzZUVycm9yID0gVHJ1ZQorICAgICAgICAjIFR3byBUeXBlRXJyb3JzIGFyZSBuZWVkZWQgdG8gZmFsbCBhbGwgdGhlIHdheSBiYWNrIHRvIG9sZC1zdHlsZQorICAgICAgICAjIHJ1bm5lcnMgLSBvbmUgdG8gZmFpbCB0Yl9sb2NhbHMsIG9uZSB0byBmYWlsIGJ1ZmZlciBldGMuCisgICAgICAgIEZha2VSdW5uZXIucmFpc2VFcnJvciA9IDIKICAgICAgICAgcHJvZ3JhbS50ZXN0UnVubmVyID0gRmFrZVJ1bm5lcgogICAgICAgICBwcm9ncmFtLnZlcmJvc2l0eSA9ICd2ZXJib3NpdHknCiAgICAgICAgIHByb2dyYW0uZmFpbGZhc3QgPSAnZmFpbGZhc3QnCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CmluZGV4IDQ4OWZlMTcuLmUzOWUyZWEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CkBAIC04LDYgKzgsMjAgQEAKIGltcG9ydCB1bml0dGVzdAogCiAKK2NsYXNzIE1vY2tUcmFjZWJhY2sob2JqZWN0KToKKyAgICBjbGFzcyBUcmFjZWJhY2tFeGNlcHRpb246CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc2VsZi5jYXB0dXJlX2xvY2FscyA9IGt3YXJncy5nZXQoJ2NhcHR1cmVfbG9jYWxzJywgRmFsc2UpCisgICAgICAgIGRlZiBmb3JtYXQoc2VsZik6CisgICAgICAgICAgICByZXN1bHQgPSBbJ0EgdHJhY2ViYWNrJ10KKyAgICAgICAgICAgIGlmIHNlbGYuY2FwdHVyZV9sb2NhbHM6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnbG9jYWxzJykKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworZGVmIHJlc3RvcmVfdHJhY2ViYWNrKCk6CisgICAgdW5pdHRlc3QucmVzdWx0LnRyYWNlYmFjayA9IHRyYWNlYmFjaworCisKIGNsYXNzIFRlc3RfVGVzdFJlc3VsdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBOb3RlOiB0aGVyZSBhcmUgbm90IHNlcGFyYXRlIHRlc3RzIGZvciBUZXN0UmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSwKICAgICAjIFRlc3RSZXN1bHQuZXJyb3JzLCBUZXN0UmVzdWx0LmZhaWx1cmVzLCBUZXN0UmVzdWx0LnRlc3RzUnVuIG9yCkBAIC0yMjcsNiArMjQxLDI1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCB0ZXN0KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm9ybWF0dGVkX2V4Yywgc3RyKQogCisgICAgZGVmIHRlc3RfYWRkRXJyb3JfbG9jYWxzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0LnRiX2xvY2FscyA9IFRydWUKKworICAgICAgICB1bml0dGVzdC5yZXN1bHQudHJhY2ViYWNrID0gTW9ja1RyYWNlYmFjaworICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV90cmFjZWJhY2spCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3RSdW4oKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHJlc3VsdC5zdG9wVGVzdFJ1bigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQSB0cmFjZWJhY2tsb2NhbHMnLCBmb3JtYXR0ZWRfZXhjKQorCiAgICAgZGVmIHRlc3RfYWRkU3ViVGVzdChzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CkBAIC0zOTgsNiArNDMxLDcgQEAKICAgICBzZWxmLnRlc3RzUnVuID0gMAogICAgIHNlbGYuc2hvdWxkU3RvcCA9IEZhbHNlCiAgICAgc2VsZi5idWZmZXIgPSBGYWxzZQorICAgIHNlbGYudGJfbG9jYWxzID0gRmFsc2UKIAogY2xhc3NEaWN0WydfX2luaXRfXyddID0gX19pbml0X18KIE9sZFJlc3VsdCA9IHR5cGUoJ09sZFJlc3VsdCcsIChvYmplY3QsKSwgY2xhc3NEaWN0KQpAQCAtNDU0LDE1ICs0ODgsNiBAQAogICAgICAgICBydW5uZXIucnVuKFRlc3QoJ3Rlc3RGb28nKSkKIAogCi1jbGFzcyBNb2NrVHJhY2ViYWNrKG9iamVjdCk6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBmb3JtYXRfZXhjZXB0aW9uKCpfKToKLSAgICAgICAgcmV0dXJuIFsnQSB0cmFjZWJhY2snXQotCi1kZWYgcmVzdG9yZV90cmFjZWJhY2soKToKLSAgICB1bml0dGVzdC5yZXN1bHQudHJhY2ViYWNrID0gdHJhY2ViYWNrCi0KLQogY2xhc3MgVGVzdE91dHB1dEJ1ZmZlcmluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CmluZGV4IDdjMGJkNTEuLmRkYzQ5OGMgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIud2FybmluZ3MsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuZGVzY3JpcHRpb25zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5yZXN1bHRjbGFzcywgdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQpCi0KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShydW5uZXIudGJfbG9jYWxzKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfaW5oZXJpdGFuY2Uoc2VsZik6CiAgICAgICAgIGNsYXNzIEFSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CkBAIC0xNzIsMTQgKzE3MiwxMyBAQAogICAgICAgICAjIG9uIGFyZ3VtZW50cyBpbiBpdHMgX19pbml0X18gc3VwZXIgY2FsbAogICAgICAgICBBVGV4dFJlc3VsdChOb25lLCBOb25lLCAxKQogCi0KICAgICBkZWYgdGVzdEJ1ZmZlckFuZEZhaWxmYXN0KHNlbGYpOgogICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCiAgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1pby5TdHJpbmdJTygpLCBmYWlsZmFzdD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcj1UcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI9VHJ1ZSkKICAgICAgICAgIyBVc2Ugb3VyIHJlc3VsdCBvYmplY3QKICAgICAgICAgcnVubmVyLl9tYWtlUmVzdWx0ID0gbGFtYmRhOiByZXN1bHQKICAgICAgICAgcnVubmVyLnJ1bihUZXN0KCd0ZXN0Rm9vJykpCkBAIC0xODcsNiArMTg2LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuZmFpbGZhc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuYnVmZmVyKQogCisgICAgZGVmIHRlc3RfbG9jYWxzKHNlbGYpOgorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09aW8uU3RyaW5nSU8oKSwgdGJfbG9jYWxzPVRydWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4odW5pdHRlc3QuVGVzdFN1aXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgcmVzdWx0LnRiX2xvY2FscykKKwogICAgIGRlZiB0ZXN0UnVubmVyUmVnaXN0ZXJzUmVzdWx0KHNlbGYpOgogICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgpAQCAtMjg2LDcgKzI5MCw4IEBACiAKICAgICAgICAgIyBubyBhcmdzIC0+IGFsbCB0aGUgd2FybmluZ3MgYXJlIHByaW50ZWQsIHVuaXR0ZXN0IHdhcm5pbmdzIG9ubHkgb25jZQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICdfdGVzdF93YXJuaW5ncy5weSddLCAqKm9wdHMpCi0gICAgICAgIG91dCwgZXJyID0gZ2V0X3BhcnNlX291dF9lcnIocCkKKyAgICAgICAgd2l0aCBwOgorICAgICAgICAgICAgb3V0LCBlcnIgPSBnZXRfcGFyc2Vfb3V0X2VycihwKQogICAgICAgICBzZWxmLmFzc2VydEluKGInT0snLCBlcnIpCiAgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgdG90YWwgbnVtYmVyIG9mIHdhcm5pbmdzIGluIHRoZSBvdXRwdXQgaXMgY29ycmVjdAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQpLCAxMikKQEAgLTMwNyw3ICszMTIsOCBAQAogICAgICAgICAjIGluIGFsbCB0aGVzZSBjYXNlcyBubyB3YXJuaW5ncyBhcmUgcHJpbnRlZAogICAgICAgICBmb3IgYXJncyBpbiBhcmdzX2xpc3Q6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCAqKm9wdHMpCi0gICAgICAgICAgICBvdXQsIGVyciA9IGdldF9wYXJzZV9vdXRfZXJyKHApCisgICAgICAgICAgICB3aXRoIHA6CisgICAgICAgICAgICAgICAgb3V0LCBlcnIgPSBnZXRfcGFyc2Vfb3V0X2VycihwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ09LJywgZXJyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3V0KSwgMCkKIApAQCAtMzE2LDcgKzMyMiw4IEBACiAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Qgd2FybmluZ3Mgb25seSBvbmNlCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJ190ZXN0X3dhcm5pbmdzLnB5JywgJ2Fsd2F5cyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm9wdHMpCi0gICAgICAgIG91dCwgZXJyID0gZ2V0X3BhcnNlX291dF9lcnIocCkKKyAgICAgICAgd2l0aCBwOgorICAgICAgICAgICAgb3V0LCBlcnIgPSBnZXRfcGFyc2Vfb3V0X2VycihwKQogICAgICAgICBzZWxmLmFzc2VydEluKGInT0snLCBlcnIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91dCksIDE0KQogICAgICAgICBmb3IgbXNnIGluIFtiJ2R3JywgYidpdycsIGIndXcnLCBiJ3J3J106CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CmluZGV4IDM5MmY5NWUuLjJkZjcwM2UgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCiAgICAgICAgIGVycm9yLCBfID0gcmVzdWx0LmVycm9yc1swXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksCi0gICAgICAgICAgICAgICAgICAgICdzZXRVcENsYXNzICglcy5Ccm9rZW5UZXN0KScgJSBfX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgJ3NldFVwQ2xhc3MgKCVzLiVzKScgJSAoX19uYW1lX18sIEJyb2tlblRlc3QuX19xdWFsbmFtZV9fKSkKIAogICAgIGRlZiB0ZXN0X2Vycm9yX2luX3RlYXJkb3duX2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAgICAgICAgIGVycm9yLCBfID0gcmVzdWx0LmVycm9yc1swXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksCi0gICAgICAgICAgICAgICAgICAgICd0ZWFyRG93bkNsYXNzICglcy5UZXN0KScgJSBfX25hbWVfXykKKyAgICAgICAgICAgICAgICAgICAgJ3RlYXJEb3duQ2xhc3MgKCVzLiVzKScgJSAoX19uYW1lX18sIFRlc3QuX19xdWFsbmFtZV9fKSkKIAogICAgIGRlZiB0ZXN0X2NsYXNzX25vdF90b3JuZG93bl93aGVuX3NldHVwX2ZhaWxzKHNlbGYpOgogICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQxNCw3ICs0MTQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAxKQogICAgICAgICBza2lwcGVkID0gcmVzdWx0LnNraXBwZWRbMF1bMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2tpcHBlZCksICdzZXRVcENsYXNzICglcy5UZXN0KScgJSBfX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2tpcHBlZCksCisgICAgICAgICAgICAgICAgICAgICdzZXRVcENsYXNzICglcy4lcyknICUgKF9fbmFtZV9fLCBUZXN0Ll9fcXVhbG5hbWVfXykpCiAKICAgICBkZWYgdGVzdF9za2lwdGVzdF9pbl9zZXR1cG1vZHVsZShzZWxmKToKICAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bWFnaWNtZXRob2RzLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1hZ2ljbWV0aG9kcy5weQppbmRleCBlMDVjNmUwLi5iYjliOTU2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bWFnaWNtZXRob2RzLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RtYWdpY21ldGhvZHMucHkKQEAgLTQyNCw2ICs0MjQsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0pLCBbXSkKIAogCisgICAgZGVmIHRlc3RfbWF0bXVsKHNlbGYpOgorICAgICAgICBtID0gTWFnaWNNb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0gQCAxLCBNYWdpY01vY2spCisgICAgICAgIG0uX19tYXRtdWxfXy5yZXR1cm5fdmFsdWUgPSA0MgorICAgICAgICBtLl9fcm1hdG11bF9fLnJldHVybl92YWx1ZSA9IDY2NgorICAgICAgICBtLl9faW1hdG11bF9fLnJldHVybl92YWx1ZSA9IDI0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSBAIDEsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgQCBtLCA2NjYpCisgICAgICAgIG0gQD0gMjQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCAyNCkKKwogICAgIGRlZiB0ZXN0X2Rpdm1vZF9hbmRfcmRpdm1vZChzZWxmKToKICAgICAgICAgbSA9IE1hZ2ljTW9jaygpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkaXZtb2QoNSwgbSksIE1hZ2ljTW9jaykKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKaW5kZXggY2YxNjczYy4uNWY4MmI4MiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKQEAgLTE3NCw2ICsxNzQsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbbW9jaygpLCBtb2NrKCksIG1vY2soKV0sIFszLCAyLCAxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbGxhYmxlIHNpZGUgZWZmZWN0IG5vdCB1c2VkIGNvcnJlY3RseSIpCiAKKyAgICBkZWYgdGVzdF9hdXRvc3BlY19zaWRlX2VmZmVjdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgaXNzdWUgMjM2NjEKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKGYpCisgICAgICAgIG1vY2suc2lkZV9lZmZlY3QgPSBWYWx1ZUVycm9yKCdCYXppbmdhIScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0JhemluZ2EhJywgbW9jaykKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKCdqYXZhJyBpbiBzeXMucGxhdGZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIHRlc3Qgb25seSBhcHBsaWVzIHRvIEp5dGhvbicpCiAgICAgZGVmIHRlc3RfamF2YV9leGNlcHRpb25fc2lkZV9lZmZlY3Qoc2VsZik6CkBAIC0yOTUsNiArMzA0LDE3IEBACiAgICAgICAgICMgYW4gZXhjZXB0aW9uLiBTZWUgaXNzdWUgMjQ4NTcuCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9jay5jYWxsX2FyZ3MgPT0gImEgbG9uZyBzZXF1ZW5jZSIpCiAKKworICAgIGRlZiB0ZXN0X2NhbGxzX2VxdWFsX3dpdGhfYW55KHNlbGYpOgorICAgICAgICBjYWxsMSA9IG1vY2suY2FsbChtb2NrLk1hZ2ljTW9jaygpKQorICAgICAgICBjYWxsMiA9IG1vY2suY2FsbChtb2NrLkFOWSkKKworICAgICAgICAjIENoZWNrIHRoYXQgZXF1YWxpdHkgYW5kIG5vbi1lcXVhbGl0eSBpcyBjb25zaXN0ZW50IGV2ZW4gd2hlbgorICAgICAgICAjIGNvbXBhcmluZyB3aXRoIG1vY2suQU5ZCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsMSA9PSBjYWxsMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsMSAhPSBjYWxsMikKKworCiAgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIG1vY2soKQpAQCAtMzEwLDYgKzMzMCwxMiBAQAogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzLCBhPSdmaXNoJywgYj0nbm90aGluZycpCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfd2l0aF9hbnkoc2VsZik6CisgICAgICAgIG0gPSBNYWdpY01vY2soKQorICAgICAgICBtKE1hZ2ljTW9jaygpKQorICAgICAgICBtLmFzc2VydF9jYWxsZWRfd2l0aChtb2NrLkFOWSkKKworCiAgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CiAgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CiAgICAgICAgICAgICBwYXNzCkBAIC0xMTk0LDYgKzEyMjAsNDIgQEAKICAgICAgICAgbSA9IG1vY2suY3JlYXRlX2F1dG9zcGVjKG9iamVjdCgpLCBuYW1lPSdzd2VldF9mdW5jJykKICAgICAgICAgc2VsZi5hc3NlcnRJbignc3dlZXRfZnVuYycsIHJlcHIobSkpCiAKKyAgICAjSXNzdWUyMTIzOAorICAgIGRlZiB0ZXN0X21vY2tfdW5zYWZlKHNlbGYpOgorICAgICAgICBtID0gTW9jaygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgbS5hc3NlcnRfZm9vX2NhbGwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIG0uYXNzcmV0X2Zvb19jYWxsKCkKKyAgICAgICAgbSA9IE1vY2sodW5zYWZlPVRydWUpCisgICAgICAgIG0uYXNzZXJ0X2Zvb19jYWxsKCkKKyAgICAgICAgbS5hc3NyZXRfZm9vX2NhbGwoKQorCisgICAgI0lzc3VlMjEyNjIKKyAgICBkZWYgdGVzdF9hc3NlcnRfbm90X2NhbGxlZChzZWxmKToKKyAgICAgICAgbSA9IE1vY2soKQorICAgICAgICBtLmhlbGxvLmFzc2VydF9ub3RfY2FsbGVkKCkKKyAgICAgICAgbS5oZWxsbygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgbS5oZWxsby5hc3NlcnRfbm90X2NhbGxlZCgpCisKKyAgICAjSXNzdWUyMTI1NiBwcmludG91dCBvZiBrZXl3b3JkIGFyZ3Mgc2hvdWxkIGJlIGluIGRldGVybWluaXN0aWMgb3JkZXIKKyAgICBkZWYgdGVzdF9zb3J0ZWRfY2FsbF9zaWduYXR1cmUoc2VsZik6CisgICAgICAgIG0gPSBNb2NrKCkKKyAgICAgICAgbS5oZWxsbyhuYW1lPSdoZWxsbycsIGRhZGR5PSdoZXJvJykKKyAgICAgICAgdGV4dCA9ICJjYWxsKGRhZGR5PSdoZXJvJywgbmFtZT0naGVsbG8nKSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0uaGVsbG8uY2FsbF9hcmdzKSwgdGV4dCkKKworICAgICNJc3N1ZTIxMjcwIG92ZXJyaWRlcyB0dXBsZSBtZXRob2RzIGZvciBtb2NrLmNhbGwgb2JqZWN0cworICAgIGRlZiB0ZXN0X292ZXJyaWRlX3R1cGxlX21ldGhvZHMoc2VsZik6CisgICAgICAgIGMgPSBjYWxsLmNvdW50KCkKKyAgICAgICAgaSA9IGNhbGwuaW5kZXgoMTMyLCdoZWxsbycpCisgICAgICAgIG0gPSBNb2NrKCkKKyAgICAgICAgbS5jb3VudCgpCisgICAgICAgIG0uaW5kZXgoMTMyLCJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tZXRob2RfY2FsbHNbMF0sIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tZXRob2RfY2FsbHNbMV0sIGkpCisKICAgICBkZWYgdGVzdF9tb2NrX2FkZF9zcGVjKHNlbGYpOgogICAgICAgICBjbGFzcyBfT25lKG9iamVjdCk6CiAgICAgICAgICAgICBvbmUgPSAxCkBAIC0xMzU3LDYgKzE0MTksMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgZmlyc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycsIHNlY29uZCkKIAorICAgIGRlZiB0ZXN0X21vY2tfb3Blbl9hZnRlcl9lb2Yoc2VsZik6CisgICAgICAgICMgcmVhZCwgcmVhZGxpbmUgYW5kIHJlYWRsaW5lcyBzaG91bGQgd29yayBhZnRlciBlbmQgb2YgZmlsZS4KKyAgICAgICAgX29wZW4gPSBtb2NrLm1vY2tfb3BlbihyZWFkX2RhdGE9J2ZvbycpCisgICAgICAgIGggPSBfb3BlbignYmFyJykKKyAgICAgICAgaC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgaC5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGgucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBoLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGgucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgaC5yZWFkbGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgaC5yZWFkbGluZXMoKSkKKwogICAgIGRlZiB0ZXN0X21vY2tfcGFyZW50cyhzZWxmKToKICAgICAgICAgZm9yIEtsYXNzIGluIE1vY2ssIE1hZ2ljTW9jazoKICAgICAgICAgICAgIG0gPSBLbGFzcygpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKaW5kZXggYjUxNmY0Mi4uZGZjZTM2OSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQpAQCAtMzc3LDcgKzM3Nyw3IEBACiAKICAgICBkZWYgdGVzdF9wYXRjaG9iamVjdF93b250X2NyZWF0ZV9ieV9kZWZhdWx0KHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBAcGF0Y2gub2JqZWN0KFNvbWVDbGFzcywgJ2Zyb29ibGUnLCBzZW50aW5lbC5Gcm9vYmxlKQorICAgICAgICAgICAgQHBhdGNoLm9iamVjdChTb21lQ2xhc3MsICdvcmQnLCBzZW50aW5lbC5Gcm9vYmxlKQogICAgICAgICAgICAgZGVmIHRlc3QoKToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1BhdGNoaW5nIG5vbiBleGlzdGVudCBhdHRyaWJ1dGVzIHNob3VsZCBmYWlsJykKIApAQCAtMzg2LDcgKzM4NiwyNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdQYXRjaGluZyBub24gZXhpc3RlbnQgYXR0cmlidXRlcyBzaG91bGQgZmFpbCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihTb21lQ2xhc3MsICdmcm9vYmxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihTb21lQ2xhc3MsICdvcmQnKSkKKworCisgICAgZGVmIHRlc3RfcGF0Y2hfYnVpbHRpbnNfd2l0aG91dF9jcmVhdGUoc2VsZik6CisgICAgICAgIEBwYXRjaChfX25hbWVfXysnLm9yZCcpCisgICAgICAgIGRlZiB0ZXN0X29yZChtb2NrX29yZCk6CisgICAgICAgICAgICBtb2NrX29yZC5yZXR1cm5fdmFsdWUgPSAxMDEKKyAgICAgICAgICAgIHJldHVybiBvcmQoJ2MnKQorCisgICAgICAgIEBwYXRjaChfX25hbWVfXysnLm9wZW4nKQorICAgICAgICBkZWYgdGVzdF9vcGVuKG1vY2tfb3Blbik6CisgICAgICAgICAgICBtID0gbW9ja19vcGVuLnJldHVybl92YWx1ZQorICAgICAgICAgICAgbS5yZWFkLnJldHVybl92YWx1ZSA9ICdhYmNkJworCisgICAgICAgICAgICBmb2JqID0gb3BlbignZG9lc25vdGV4aXN0cy50eHQnKQorICAgICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCisgICAgICAgICAgICBmb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X29yZCgpLCAxMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9vcGVuKCksICdhYmNkJykKIAogCiAgICAgZGVmIHRlc3RfcGF0Y2hfd2l0aF9zdGF0aWNfbWV0aG9kcyhzZWxmKToKQEAgLTE3OTcsNSArMTgxNywzMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0b3BwZWQsIFsidGhyZWUiLCAidHdvIiwgIm9uZSJdKQogCiAKKyAgICBkZWYgdGVzdF9zcGVjaWFsX2F0dHJzKHNlbGYpOgorICAgICAgICBkZWYgZm9vKHg9MCk6CisgICAgICAgICAgICAiIiJURVNUIiIiCisgICAgICAgICAgICByZXR1cm4geAorICAgICAgICB3aXRoIHBhdGNoLm9iamVjdChmb28sICdfX2RlZmF1bHRzX18nLCAoMSwgKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCAwKQorCisgICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KGZvbywgJ19fZG9jX18nLCAiRlVOIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiRlVOIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgIlRFU1QiKQorCisgICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KGZvbywgJ19fbW9kdWxlX18nLCAidGVzdHBhdGNoMiIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19tb2R1bGVfXywgInRlc3RwYXRjaDIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX21vZHVsZV9fLCAndW5pdHRlc3QudGVzdC50ZXN0bW9jay50ZXN0cGF0Y2gnKQorCisgICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KGZvbywgJ19fYW5ub3RhdGlvbnNfXycsIGRpY3QoWygncycsIDEsICldKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2Fubm90YXRpb25zX18sIGRpY3QoWygncycsIDEsICldKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19hbm5vdGF0aW9uc19fLCBkaWN0KCkpCisKKyAgICAgICAgZGVmIGZvbygqYSwgeD0wKToKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIHdpdGggcGF0Y2gub2JqZWN0KGZvbywgJ19fa3dkZWZhdWx0c19fJywgZGljdChbKCd4JywgMSwgKV0pKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKCksIDApCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdXRpbC5weSBiL0xpYi91bml0dGVzdC91dGlsLnB5CmluZGV4IGFlZTQ5OGYuLjQ1NDg1ZGMgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC91dGlsLnB5CisrKyBiL0xpYi91bml0dGVzdC91dGlsLnB5CkBAIC01Miw3ICs1Miw3IEBACiAgICAgcmV0dXJuIHJlc3VsdFs6X01BWF9MRU5HVEhdICsgJyBbdHJ1bmNhdGVkXS4uLicKIAogZGVmIHN0cmNsYXNzKGNscyk6Ci0gICAgcmV0dXJuICIlcy4lcyIgJSAoY2xzLl9fbW9kdWxlX18sIGNscy5fX25hbWVfXykKKyAgICByZXR1cm4gIiVzLiVzIiAlIChjbHMuX19tb2R1bGVfXywgY2xzLl9fcXVhbG5hbWVfXykKIAogZGVmIHNvcnRlZF9saXN0X2RpZmZlcmVuY2UoZXhwZWN0ZWQsIGFjdHVhbCk6CiAgICAgIiIiRmluZHMgZWxlbWVudHMgaW4gb25seSBvbmUgb3IgdGhlIG90aGVyIG9mIHR3bywgc29ydGVkIGlucHV0IGxpc3RzLgpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9lcnJvci5weSBiL0xpYi91cmxsaWIvZXJyb3IucHkKaW5kZXggNDViNzE2OS4uYzViNjc1ZCAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9lcnJvci5weQorKysgYi9MaWIvdXJsbGliL2Vycm9yLnB5CkBAIC0zNSw2ICszNSw3IEBACiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiAnPHVybG9wZW4gZXJyb3IgJXM+JyAlIHNlbGYucmVhc29uCiAKKwogY2xhc3MgSFRUUEVycm9yKFVSTEVycm9yLCB1cmxsaWIucmVzcG9uc2UuYWRkaW5mb3VybCk6CiAgICAgIiIiUmFpc2VkIHdoZW4gSFRUUCBlcnJvciBvY2N1cnMsIGJ1dCBhbHNvIGFjdHMgbGlrZSBub24tZXJyb3IgcmV0dXJuIiIiCiAgICAgX19zdXBlcl9pbml0ID0gdXJsbGliLnJlc3BvbnNlLmFkZGluZm91cmwuX19pbml0X18KQEAgLTU1LDYgKzU2LDkgQEAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICdIVFRQIEVycm9yICVzOiAlcycgJSAoc2VsZi5jb2RlLCBzZWxmLm1zZykKIAorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8SFRUUEVycm9yICVzOiAlcj4nICUgKHNlbGYuY29kZSwgc2VsZi5tc2cpCisKICAgICAjIHNpbmNlIFVSTEVycm9yIHNwZWNpZmllcyBhIC5yZWFzb24gYXR0cmlidXRlLCBIVFRQRXJyb3Igc2hvdWxkIGFsc28KICAgICAjICBwcm92aWRlIHRoaXMgYXR0cmlidXRlLiBTZWUgaXNzdWUxMzIxMSBmb3IgZGlzY3Vzc2lvbi4KICAgICBAcHJvcGVydHkKQEAgLTY5LDggKzczLDkgQEAKICAgICBkZWYgaGVhZGVycyhzZWxmLCBoZWFkZXJzKToKICAgICAgICAgc2VsZi5oZHJzID0gaGVhZGVycwogCi0jIGV4Y2VwdGlvbiByYWlzZWQgd2hlbiBkb3dubG9hZGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGgKKwogY2xhc3MgQ29udGVudFRvb1Nob3J0RXJyb3IoVVJMRXJyb3IpOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBkb3dubG9hZGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGguIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIGNvbnRlbnQpOgogICAgICAgICBVUkxFcnJvci5fX2luaXRfXyhzZWxmLCBtZXNzYWdlKQogICAgICAgICBzZWxmLmNvbnRlbnQgPSBjb250ZW50CmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL3BhcnNlLnB5IGIvTGliL3VybGxpYi9wYXJzZS5weQppbmRleCBkMzY4MzMxLi40ZDdmY2VjIDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL3BhcnNlLnB5CisrKyBiL0xpYi91cmxsaWIvcGFyc2UucHkKQEAgLTM0LDcgKzM0LDkgQEAKIF9fYWxsX18gPSBbInVybHBhcnNlIiwgInVybHVucGFyc2UiLCAidXJsam9pbiIsICJ1cmxkZWZyYWciLAogICAgICAgICAgICAidXJsc3BsaXQiLCAidXJsdW5zcGxpdCIsICJ1cmxlbmNvZGUiLCAicGFyc2VfcXMiLAogICAgICAgICAgICAicGFyc2VfcXNsIiwgInF1b3RlIiwgInF1b3RlX3BsdXMiLCAicXVvdGVfZnJvbV9ieXRlcyIsCi0gICAgICAgICAgICJ1bnF1b3RlIiwgInVucXVvdGVfcGx1cyIsICJ1bnF1b3RlX3RvX2J5dGVzIl0KKyAgICAgICAgICAgInVucXVvdGUiLCAidW5xdW90ZV9wbHVzIiwgInVucXVvdGVfdG9fYnl0ZXMiLAorICAgICAgICAgICAiRGVmcmFnUmVzdWx0IiwgIlBhcnNlUmVzdWx0IiwgIlNwbGl0UmVzdWx0IiwKKyAgICAgICAgICAgIkRlZnJhZ1Jlc3VsdEJ5dGVzIiwgIlBhcnNlUmVzdWx0Qnl0ZXMiLCAiU3BsaXRSZXN1bHRCeXRlcyJdCiAKICMgQSBjbGFzc2lmaWNhdGlvbiBvZiBzY2hlbWVzICgnJyBtZWFucyBhcHBseSBieSBkZWZhdWx0KQogdXNlc19yZWxhdGl2ZSA9IFsnZnRwJywgJ2h0dHAnLCAnZ29waGVyJywgJ25udHAnLCAnaW1hcCcsCkBAIC00MDksMTEgKzQxMSwxMyBAQAogICAgICAgICByZXR1cm4gdXJsCiAgICAgaWYgbm90IHVybDoKICAgICAgICAgcmV0dXJuIGJhc2UKKwogICAgIGJhc2UsIHVybCwgX2NvZXJjZV9yZXN1bHQgPSBfY29lcmNlX2FyZ3MoYmFzZSwgdXJsKQogICAgIGJzY2hlbWUsIGJuZXRsb2MsIGJwYXRoLCBicGFyYW1zLCBicXVlcnksIGJmcmFnbWVudCA9IFwKICAgICAgICAgICAgIHVybHBhcnNlKGJhc2UsICcnLCBhbGxvd19mcmFnbWVudHMpCiAgICAgc2NoZW1lLCBuZXRsb2MsIHBhdGgsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50ID0gXAogICAgICAgICAgICAgdXJscGFyc2UodXJsLCBic2NoZW1lLCBhbGxvd19mcmFnbWVudHMpCisKICAgICBpZiBzY2hlbWUgIT0gYnNjaGVtZSBvciBzY2hlbWUgbm90IGluIHVzZXNfcmVsYXRpdmU6CiAgICAgICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdCh1cmwpCiAgICAgaWYgc2NoZW1lIGluIHVzZXNfbmV0bG9jOgpAQCAtNDIxLDkgKzQyNSw3IEBACiAgICAgICAgICAgICByZXR1cm4gX2NvZXJjZV9yZXN1bHQodXJsdW5wYXJzZSgoc2NoZW1lLCBuZXRsb2MsIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKSkKICAgICAgICAgbmV0bG9jID0gYm5ldGxvYwotICAgIGlmIHBhdGhbOjFdID09ICcvJzoKLSAgICAgICAgcmV0dXJuIF9jb2VyY2VfcmVzdWx0KHVybHVucGFyc2UoKHNjaGVtZSwgbmV0bG9jLCBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKSkKKwogICAgIGlmIG5vdCBwYXRoIGFuZCBub3QgcGFyYW1zOgogICAgICAgICBwYXRoID0gYnBhdGgKICAgICAgICAgcGFyYW1zID0gYnBhcmFtcwpAQCAtNDMxLDI5ICs0MzMsNDUgQEAKICAgICAgICAgICAgIHF1ZXJ5ID0gYnF1ZXJ5CiAgICAgICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdCh1cmx1bnBhcnNlKChzY2hlbWUsIG5ldGxvYywgcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcywgcXVlcnksIGZyYWdtZW50KSkpCi0gICAgc2VnbWVudHMgPSBicGF0aC5zcGxpdCgnLycpWzotMV0gKyBwYXRoLnNwbGl0KCcvJykKLSAgICAjIFhYWCBUaGUgc3R1ZmYgYmVsb3cgaXMgYm9ndXMgaW4gdmFyaW91cyB3YXlzLi4uCi0gICAgaWYgc2VnbWVudHNbLTFdID09ICcuJzoKLSAgICAgICAgc2VnbWVudHNbLTFdID0gJycKLSAgICB3aGlsZSAnLicgaW4gc2VnbWVudHM6Ci0gICAgICAgIHNlZ21lbnRzLnJlbW92ZSgnLicpCi0gICAgd2hpbGUgMToKLSAgICAgICAgaSA9IDEKLSAgICAgICAgbiA9IGxlbihzZWdtZW50cykgLSAxCi0gICAgICAgIHdoaWxlIGkgPCBuOgotICAgICAgICAgICAgaWYgKHNlZ21lbnRzW2ldID09ICcuLicKLSAgICAgICAgICAgICAgICBhbmQgc2VnbWVudHNbaS0xXSBub3QgaW4gKCcnLCAnLi4nKSk6Ci0gICAgICAgICAgICAgICAgZGVsIHNlZ21lbnRzW2ktMTppKzFdCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGkgPSBpKzEKKworICAgIGJhc2VfcGFydHMgPSBicGF0aC5zcGxpdCgnLycpCisgICAgaWYgYmFzZV9wYXJ0c1stMV0gIT0gJyc6CisgICAgICAgICMgdGhlIGxhc3QgaXRlbSBpcyBub3QgYSBkaXJlY3RvcnksIHNvIHdpbGwgbm90IGJlIHRha2VuIGludG8gYWNjb3VudAorICAgICAgICAjIGluIHJlc29sdmluZyB0aGUgcmVsYXRpdmUgcGF0aAorICAgICAgICBkZWwgYmFzZV9wYXJ0c1stMV0KKworICAgICMgZm9yIHJmYzM5ODYsIGlnbm9yZSBhbGwgYmFzZSBwYXRoIHNob3VsZCB0aGUgZmlyc3QgY2hhcmFjdGVyIGJlIHJvb3QuCisgICAgaWYgcGF0aFs6MV0gPT0gJy8nOgorICAgICAgICBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKQorICAgIGVsc2U6CisgICAgICAgIHNlZ21lbnRzID0gYmFzZV9wYXJ0cyArIHBhdGguc3BsaXQoJy8nKQorICAgICAgICAjIGZpbHRlciBvdXQgZWxlbWVudHMgdGhhdCB3b3VsZCBjYXVzZSByZWR1bmRhbnQgc2xhc2hlcyBvbiByZS1qb2luaW5nCisgICAgICAgICMgdGhlIHJlc29sdmVkX3BhdGgKKyAgICAgICAgc2VnbWVudHNbMTotMV0gPSBmaWx0ZXIoTm9uZSwgc2VnbWVudHNbMTotMV0pCisKKyAgICByZXNvbHZlZF9wYXRoID0gW10KKworICAgIGZvciBzZWcgaW4gc2VnbWVudHM6CisgICAgICAgIGlmIHNlZyA9PSAnLi4nOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc29sdmVkX3BhdGgucG9wKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICMgaWdub3JlIGFueSAuLiBzZWdtZW50cyB0aGF0IHdvdWxkIG90aGVyd2lzZSBjYXVzZSBhbiBJbmRleEVycm9yCisgICAgICAgICAgICAgICAgIyB3aGVuIHBvcHBlZCBmcm9tIHJlc29sdmVkX3BhdGggaWYgcmVzb2x2aW5nIGZvciByZmMzOTg2CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbGlmIHNlZyA9PSAnLic6CisgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBzZWdtZW50cyA9PSBbJycsICcuLiddOgotICAgICAgICBzZWdtZW50c1stMV0gPSAnJwotICAgIGVsaWYgbGVuKHNlZ21lbnRzKSA+PSAyIGFuZCBzZWdtZW50c1stMV0gPT0gJy4uJzoKLSAgICAgICAgc2VnbWVudHNbLTI6XSA9IFsnJ10KLSAgICByZXR1cm4gX2NvZXJjZV9yZXN1bHQodXJsdW5wYXJzZSgoc2NoZW1lLCBuZXRsb2MsICcvJy5qb2luKHNlZ21lbnRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKSkKKyAgICAgICAgICAgIHJlc29sdmVkX3BhdGguYXBwZW5kKHNlZykKKworICAgIGlmIHNlZ21lbnRzWy0xXSBpbiAoJy4nLCAnLi4nKToKKyAgICAgICAgIyBkbyBzb21lIHBvc3QtcHJvY2Vzc2luZyBoZXJlLiBpZiB0aGUgbGFzdCBzZWdtZW50IHdhcyBhIHJlbGF0aXZlIGRpciwKKyAgICAgICAgIyB0aGVuIHdlIG5lZWQgdG8gYXBwZW5kIHRoZSB0cmFpbGluZyAnLycKKyAgICAgICAgcmVzb2x2ZWRfcGF0aC5hcHBlbmQoJycpCisKKyAgICByZXR1cm4gX2NvZXJjZV9yZXN1bHQodXJsdW5wYXJzZSgoc2NoZW1lLCBuZXRsb2MsICcvJy5qb2luKAorICAgICAgICByZXNvbHZlZF9wYXRoKSBvciAnLycsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50KSkpCisKIAogZGVmIHVybGRlZnJhZyh1cmwpOgogICAgICIiIlJlbW92ZXMgYW55IGV4aXN0aW5nIGZyYWdtZW50IGZyb20gVVJMLgpAQCAtNjQxLDcgKzY1OSw3IEBACiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICMgV2l0aG91dCB0aGlzLCB3aWxsIGp1c3QgZGlzcGxheSBhcyBhIGRlZmF1bHRkaWN0Ci0gICAgICAgIHJldHVybiAiPFF1b3RlciAlcj4iICUgZGljdChzZWxmKQorICAgICAgICByZXR1cm4gIjwlcyAlcj4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBkaWN0KHNlbGYpKQogCiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGIpOgogICAgICAgICAjIEhhbmRsZSBhIGNhY2hlIG1pc3MuIFN0b3JlIHF1b3RlZCBzdHJpbmcgaW4gY2FjaGUgYW5kIHJldHVybi4KQEAgLTczMiw3ICs3NTAsOCBAQAogICAgICAgICBfc2FmZV9xdW90ZXJzW3NhZmVdID0gcXVvdGVyID0gUXVvdGVyKHNhZmUpLl9fZ2V0aXRlbV9fCiAgICAgcmV0dXJuICcnLmpvaW4oW3F1b3RlcihjaGFyKSBmb3IgY2hhciBpbiBic10pCiAKLWRlZiB1cmxlbmNvZGUocXVlcnksIGRvc2VxPUZhbHNlLCBzYWZlPScnLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSk6CitkZWYgdXJsZW5jb2RlKHF1ZXJ5LCBkb3NlcT1GYWxzZSwgc2FmZT0nJywgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsCisgICAgICAgICAgICAgIHF1b3RlX3ZpYT1xdW90ZV9wbHVzKToKICAgICAiIiJFbmNvZGUgYSBkaWN0IG9yIHNlcXVlbmNlIG9mIHR3by1lbGVtZW50IHR1cGxlcyBpbnRvIGEgVVJMIHF1ZXJ5IHN0cmluZy4KIAogICAgIElmIGFueSB2YWx1ZXMgaW4gdGhlIHF1ZXJ5IGFyZyBhcmUgc2VxdWVuY2VzIGFuZCBkb3NlcSBpcyB0cnVlLCBlYWNoCkBAIC03NDQsOCArNzYzLDggQEAKIAogICAgIFRoZSBjb21wb25lbnRzIG9mIGEgcXVlcnkgYXJnIG1heSBlYWNoIGJlIGVpdGhlciBhIHN0cmluZyBvciBhIGJ5dGVzIHR5cGUuCiAKLSAgICBUaGUgc2FmZSwgZW5jb2RpbmcsIGFuZCBlcnJvcnMgcGFyYW1ldGVycyBhcmUgcGFzc2VkIGRvd24gdG8gcXVvdGVfcGx1cygpCi0gICAgKGVuY29kaW5nIGFuZCBlcnJvcnMgb25seSBpZiBhIGNvbXBvbmVudCBpcyBhIHN0cikuCisgICAgVGhlIHNhZmUsIGVuY29kaW5nLCBhbmQgZXJyb3JzIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkb3duIHRvIHRoZSBmdW5jdGlvbgorICAgIHNwZWNpZmllZCBieSBxdW90ZV92aWEgKGVuY29kaW5nIGFuZCBlcnJvcnMgb25seSBpZiBhIGNvbXBvbmVudCBpcyBhIHN0cikuCiAgICAgIiIiCiAKICAgICBpZiBoYXNhdHRyKHF1ZXJ5LCAiaXRlbXMiKToKQEAgLTc3MSwyNyArNzkwLDI3IEBACiAgICAgaWYgbm90IGRvc2VxOgogICAgICAgICBmb3IgaywgdiBpbiBxdWVyeToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaywgYnl0ZXMpOgotICAgICAgICAgICAgICAgIGsgPSBxdW90ZV9wbHVzKGssIHNhZmUpCisgICAgICAgICAgICAgICAgayA9IHF1b3RlX3ZpYShrLCBzYWZlKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBrID0gcXVvdGVfcGx1cyhzdHIoayksIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCisgICAgICAgICAgICAgICAgayA9IHF1b3RlX3ZpYShzdHIoayksIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgYnl0ZXMpOgotICAgICAgICAgICAgICAgIHYgPSBxdW90ZV9wbHVzKHYsIHNhZmUpCisgICAgICAgICAgICAgICAgdiA9IHF1b3RlX3ZpYSh2LCBzYWZlKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB2ID0gcXVvdGVfcGx1cyhzdHIodiksIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCisgICAgICAgICAgICAgICAgdiA9IHF1b3RlX3ZpYShzdHIodiksIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCiAgICAgICAgICAgICBsLmFwcGVuZChrICsgJz0nICsgdikKICAgICBlbHNlOgogICAgICAgICBmb3IgaywgdiBpbiBxdWVyeToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaywgYnl0ZXMpOgotICAgICAgICAgICAgICAgIGsgPSBxdW90ZV9wbHVzKGssIHNhZmUpCisgICAgICAgICAgICAgICAgayA9IHF1b3RlX3ZpYShrLCBzYWZlKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBrID0gcXVvdGVfcGx1cyhzdHIoayksIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCisgICAgICAgICAgICAgICAgayA9IHF1b3RlX3ZpYShzdHIoayksIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCiAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgYnl0ZXMpOgotICAgICAgICAgICAgICAgIHYgPSBxdW90ZV9wbHVzKHYsIHNhZmUpCisgICAgICAgICAgICAgICAgdiA9IHF1b3RlX3ZpYSh2LCBzYWZlKQogICAgICAgICAgICAgICAgIGwuYXBwZW5kKGsgKyAnPScgKyB2KQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHYsIHN0cik6Ci0gICAgICAgICAgICAgICAgdiA9IHF1b3RlX3BsdXModiwgc2FmZSwgZW5jb2RpbmcsIGVycm9ycykKKyAgICAgICAgICAgICAgICB2ID0gcXVvdGVfdmlhKHYsIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCiAgICAgICAgICAgICAgICAgbC5hcHBlbmQoayArICc9JyArIHYpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKQEAgLTc5OSwzMyArODE4LDE4IEBACiAgICAgICAgICAgICAgICAgICAgIHggPSBsZW4odikKICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgICAgICAgICAjIG5vdCBhIHNlcXVlbmNlCi0gICAgICAgICAgICAgICAgICAgIHYgPSBxdW90ZV9wbHVzKHN0cih2KSwgc2FmZSwgZW5jb2RpbmcsIGVycm9ycykKKyAgICAgICAgICAgICAgICAgICAgdiA9IHF1b3RlX3ZpYShzdHIodiksIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCiAgICAgICAgICAgICAgICAgICAgIGwuYXBwZW5kKGsgKyAnPScgKyB2KQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICMgbG9vcCBvdmVyIHRoZSBzZXF1ZW5jZQogICAgICAgICAgICAgICAgICAgICBmb3IgZWx0IGluIHY6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsdCwgYnl0ZXMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsdCA9IHF1b3RlX3BsdXMoZWx0LCBzYWZlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsdCA9IHF1b3RlX3ZpYShlbHQsIHNhZmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsdCA9IHF1b3RlX3BsdXMoc3RyKGVsdCksIHNhZmUsIGVuY29kaW5nLCBlcnJvcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWx0ID0gcXVvdGVfdmlhKHN0cihlbHQpLCBzYWZlLCBlbmNvZGluZywgZXJyb3JzKQogICAgICAgICAgICAgICAgICAgICAgICAgbC5hcHBlbmQoayArICc9JyArIGVsdCkKICAgICByZXR1cm4gJyYnLmpvaW4obCkKIAotIyBVdGlsaXRpZXMgdG8gcGFyc2UgVVJMcyAobW9zdCBvZiB0aGVzZSByZXR1cm4gTm9uZSBmb3IgbWlzc2luZyBwYXJ0cyk6Ci0jIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKLSMgc3BsaXR0eXBlKCd0eXBlOm9wYXF1ZXN0cmluZycpIC0tPiAndHlwZScsICdvcGFxdWVzdHJpbmcnCi0jIHNwbGl0aG9zdCgnLy9ob3N0Wzpwb3J0XS9wYXRoJykgLS0+ICdob3N0Wzpwb3J0XScsICcvcGF0aCcKLSMgc3BsaXR1c2VyKCd1c2VyWzpwYXNzd2RdQGhvc3RbOnBvcnRdJykgLS0+ICd1c2VyWzpwYXNzd2RdJywgJ2hvc3RbOnBvcnRdJwotIyBzcGxpdHBhc3N3ZCgndXNlcjpwYXNzd2QnKSAtPiAndXNlcicsICdwYXNzd2QnCi0jIHNwbGl0cG9ydCgnaG9zdDpwb3J0JykgLS0+ICdob3N0JywgJ3BvcnQnCi0jIHNwbGl0cXVlcnkoJy9wYXRoP3F1ZXJ5JykgLS0+ICcvcGF0aCcsICdxdWVyeScKLSMgc3BsaXR0YWcoJy9wYXRoI3RhZycpIC0tPiAnL3BhdGgnLCAndGFnJwotIyBzcGxpdGF0dHIoJy9wYXRoO2F0dHIxPXZhbHVlMTthdHRyMj12YWx1ZTI7Li4uJykgLT4KLSMgICAnL3BhdGgnLCBbJ2F0dHIxPXZhbHVlMScsICdhdHRyMj12YWx1ZTInLCAuLi5dCi0jIHNwbGl0dmFsdWUoJ2F0dHI9dmFsdWUnKSAtLT4gJ2F0dHInLCAndmFsdWUnCi0jIHVybGxpYi5wYXJzZS51bnF1b3RlKCdhYmMlMjBkZWYnKSAtPiAnYWJjIGRlZicKLSMgcXVvdGUoJ2FiYyBkZWYnKSAtPiAnYWJjJTIwZGVmJykKLQogZGVmIHRvX2J5dGVzKHVybCk6CiAgICAgIiIidG9fYnl0ZXModSJVUkwiKSAtLT4gJ1VSTCcuIiIiCiAgICAgIyBNb3N0IFVSTCBzY2hlbWVzIHJlcXVpcmUgQVNDSUkuIElmIHRoYXQgY2hhbmdlcywgdGhlIGNvbnZlcnNpb24KQEAgLTg1MiwxMiArODU2LDEyIEBACiAgICAgIiIic3BsaXR0eXBlKCd0eXBlOm9wYXF1ZXN0cmluZycpIC0tPiAndHlwZScsICdvcGFxdWVzdHJpbmcnLiIiIgogICAgIGdsb2JhbCBfdHlwZXByb2cKICAgICBpZiBfdHlwZXByb2cgaXMgTm9uZToKLSAgICAgICAgX3R5cGVwcm9nID0gcmUuY29tcGlsZSgnXihbXi86XSspOicpCisgICAgICAgIF90eXBlcHJvZyA9IHJlLmNvbXBpbGUoJyhbXi86XSspOiguKiknLCByZS5ET1RBTEwpCiAKICAgICBtYXRjaCA9IF90eXBlcHJvZy5tYXRjaCh1cmwpCiAgICAgaWYgbWF0Y2g6Ci0gICAgICAgIHNjaGVtZSA9IG1hdGNoLmdyb3VwKDEpCi0gICAgICAgIHJldHVybiBzY2hlbWUubG93ZXIoKSwgdXJsW2xlbihzY2hlbWUpICsgMTpdCisgICAgICAgIHNjaGVtZSwgZGF0YSA9IG1hdGNoLmdyb3VwcygpCisgICAgICAgIHJldHVybiBzY2hlbWUubG93ZXIoKSwgZGF0YQogICAgIHJldHVybiBOb25lLCB1cmwKIAogX2hvc3Rwcm9nID0gTm9uZQpAQCAtODY1LDM4ICs4NjksMjUgQEAKICAgICAiIiJzcGxpdGhvc3QoJy8vaG9zdFs6cG9ydF0vcGF0aCcpIC0tPiAnaG9zdFs6cG9ydF0nLCAnL3BhdGgnLiIiIgogICAgIGdsb2JhbCBfaG9zdHByb2cKICAgICBpZiBfaG9zdHByb2cgaXMgTm9uZToKLSAgICAgICAgX2hvc3Rwcm9nID0gcmUuY29tcGlsZSgnXi8vKFteLz9dKikoLiopJCcpCisgICAgICAgIF9ob3N0cHJvZyA9IHJlLmNvbXBpbGUoJy8vKFteLz9dKikoLiopJywgcmUuRE9UQUxMKQogCiAgICAgbWF0Y2ggPSBfaG9zdHByb2cubWF0Y2godXJsKQogICAgIGlmIG1hdGNoOgotICAgICAgICBob3N0X3BvcnQgPSBtYXRjaC5ncm91cCgxKQotICAgICAgICBwYXRoID0gbWF0Y2guZ3JvdXAoMikKLSAgICAgICAgaWYgcGF0aCBhbmQgbm90IHBhdGguc3RhcnRzd2l0aCgnLycpOgorICAgICAgICBob3N0X3BvcnQsIHBhdGggPSBtYXRjaC5ncm91cHMoKQorICAgICAgICBpZiBwYXRoIGFuZCBwYXRoWzBdICE9ICcvJzoKICAgICAgICAgICAgIHBhdGggPSAnLycgKyBwYXRoCiAgICAgICAgIHJldHVybiBob3N0X3BvcnQsIHBhdGgKICAgICByZXR1cm4gTm9uZSwgdXJsCiAKLV91c2VycHJvZyA9IE5vbmUKIGRlZiBzcGxpdHVzZXIoaG9zdCk6CiAgICAgIiIic3BsaXR1c2VyKCd1c2VyWzpwYXNzd2RdQGhvc3RbOnBvcnRdJykgLS0+ICd1c2VyWzpwYXNzd2RdJywgJ2hvc3RbOnBvcnRdJy4iIiIKLSAgICBnbG9iYWwgX3VzZXJwcm9nCi0gICAgaWYgX3VzZXJwcm9nIGlzIE5vbmU6Ci0gICAgICAgIF91c2VycHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopQCguKikkJykKKyAgICB1c2VyLCBkZWxpbSwgaG9zdCA9IGhvc3QucnBhcnRpdGlvbignQCcpCisgICAgcmV0dXJuICh1c2VyIGlmIGRlbGltIGVsc2UgTm9uZSksIGhvc3QKIAotICAgIG1hdGNoID0gX3VzZXJwcm9nLm1hdGNoKGhvc3QpCi0gICAgaWYgbWF0Y2g6IHJldHVybiBtYXRjaC5ncm91cCgxLCAyKQotICAgIHJldHVybiBOb25lLCBob3N0Ci0KLV9wYXNzd2Rwcm9nID0gTm9uZQogZGVmIHNwbGl0cGFzc3dkKHVzZXIpOgogICAgICIiInNwbGl0cGFzc3dkKCd1c2VyOnBhc3N3ZCcpIC0+ICd1c2VyJywgJ3Bhc3N3ZCcuIiIiCi0gICAgZ2xvYmFsIF9wYXNzd2Rwcm9nCi0gICAgaWYgX3Bhc3N3ZHByb2cgaXMgTm9uZToKLSAgICAgICAgX3Bhc3N3ZHByb2cgPSByZS5jb21waWxlKCdeKFteOl0qKTooLiopJCcscmUuUykKLQotICAgIG1hdGNoID0gX3Bhc3N3ZHByb2cubWF0Y2godXNlcikKLSAgICBpZiBtYXRjaDogcmV0dXJuIG1hdGNoLmdyb3VwKDEsIDIpCi0gICAgcmV0dXJuIHVzZXIsIE5vbmUKKyAgICB1c2VyLCBkZWxpbSwgcGFzc3dkID0gdXNlci5wYXJ0aXRpb24oJzonKQorICAgIHJldHVybiB1c2VyLCAocGFzc3dkIGlmIGRlbGltIGVsc2UgTm9uZSkKIAogIyBzcGxpdHRhZygnL3BhdGgjdGFnJykgLS0+ICcvcGF0aCcsICd0YWcnCiBfcG9ydHByb2cgPSBOb25lCkBAIC05MDQsNyArODk1LDcgQEAKICAgICAiIiJzcGxpdHBvcnQoJ2hvc3Q6cG9ydCcpIC0tPiAnaG9zdCcsICdwb3J0Jy4iIiIKICAgICBnbG9iYWwgX3BvcnRwcm9nCiAgICAgaWYgX3BvcnRwcm9nIGlzIE5vbmU6Ci0gICAgICAgIF9wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopOihbMC05XSopJCcpCisgICAgICAgIF9wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJyguKik6KFswLTldKikkJywgcmUuRE9UQUxMKQogCiAgICAgbWF0Y2ggPSBfcG9ydHByb2cubWF0Y2goaG9zdCkKICAgICBpZiBtYXRjaDoKQEAgLTkxMyw0NyArOTA0LDM0IEBACiAgICAgICAgICAgICByZXR1cm4gaG9zdCwgcG9ydAogICAgIHJldHVybiBob3N0LCBOb25lCiAKLV9ucG9ydHByb2cgPSBOb25lCiBkZWYgc3BsaXRucG9ydChob3N0LCBkZWZwb3J0PS0xKToKICAgICAiIiJTcGxpdCBob3N0IGFuZCBwb3J0LCByZXR1cm5pbmcgbnVtZXJpYyBwb3J0LgogICAgIFJldHVybiBnaXZlbiBkZWZhdWx0IHBvcnQgaWYgbm8gJzonIGZvdW5kOyBkZWZhdWx0cyB0byAtMS4KICAgICBSZXR1cm4gbnVtZXJpY2FsIHBvcnQgaWYgYSB2YWxpZCBudW1iZXIgYXJlIGZvdW5kIGFmdGVyICc6Jy4KICAgICBSZXR1cm4gTm9uZSBpZiAnOicgYnV0IG5vdCBhIHZhbGlkIG51bWJlci4iIiIKLSAgICBnbG9iYWwgX25wb3J0cHJvZwotICAgIGlmIF9ucG9ydHByb2cgaXMgTm9uZToKLSAgICAgICAgX25wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopOiguKikkJykKLQotICAgIG1hdGNoID0gX25wb3J0cHJvZy5tYXRjaChob3N0KQotICAgIGlmIG1hdGNoOgotICAgICAgICBob3N0LCBwb3J0ID0gbWF0Y2guZ3JvdXAoMSwgMikKLSAgICAgICAgaWYgcG9ydDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBucG9ydCA9IGludChwb3J0KQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgbnBvcnQgPSBOb25lCi0gICAgICAgICAgICByZXR1cm4gaG9zdCwgbnBvcnQKKyAgICBob3N0LCBkZWxpbSwgcG9ydCA9IGhvc3QucnBhcnRpdGlvbignOicpCisgICAgaWYgbm90IGRlbGltOgorICAgICAgICBob3N0ID0gcG9ydAorICAgIGVsaWYgcG9ydDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbnBvcnQgPSBpbnQocG9ydCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBucG9ydCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIGhvc3QsIG5wb3J0CiAgICAgcmV0dXJuIGhvc3QsIGRlZnBvcnQKIAotX3F1ZXJ5cHJvZyA9IE5vbmUKIGRlZiBzcGxpdHF1ZXJ5KHVybCk6CiAgICAgIiIic3BsaXRxdWVyeSgnL3BhdGg/cXVlcnknKSAtLT4gJy9wYXRoJywgJ3F1ZXJ5Jy4iIiIKLSAgICBnbG9iYWwgX3F1ZXJ5cHJvZwotICAgIGlmIF9xdWVyeXByb2cgaXMgTm9uZToKLSAgICAgICAgX3F1ZXJ5cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopXD8oW14/XSopJCcpCi0KLSAgICBtYXRjaCA9IF9xdWVyeXByb2cubWF0Y2godXJsKQotICAgIGlmIG1hdGNoOiByZXR1cm4gbWF0Y2guZ3JvdXAoMSwgMikKKyAgICBwYXRoLCBkZWxpbSwgcXVlcnkgPSB1cmwucnBhcnRpdGlvbignPycpCisgICAgaWYgZGVsaW06CisgICAgICAgIHJldHVybiBwYXRoLCBxdWVyeQogICAgIHJldHVybiB1cmwsIE5vbmUKIAotX3RhZ3Byb2cgPSBOb25lCiBkZWYgc3BsaXR0YWcodXJsKToKICAgICAiIiJzcGxpdHRhZygnL3BhdGgjdGFnJykgLS0+ICcvcGF0aCcsICd0YWcnLiIiIgotICAgIGdsb2JhbCBfdGFncHJvZwotICAgIGlmIF90YWdwcm9nIGlzIE5vbmU6Ci0gICAgICAgIF90YWdwcm9nID0gcmUuY29tcGlsZSgnXiguKikjKFteI10qKSQnKQotCi0gICAgbWF0Y2ggPSBfdGFncHJvZy5tYXRjaCh1cmwpCi0gICAgaWYgbWF0Y2g6IHJldHVybiBtYXRjaC5ncm91cCgxLCAyKQorICAgIHBhdGgsIGRlbGltLCB0YWcgPSB1cmwucnBhcnRpdGlvbignIycpCisgICAgaWYgZGVsaW06CisgICAgICAgIHJldHVybiBwYXRoLCB0YWcKICAgICByZXR1cm4gdXJsLCBOb25lCiAKIGRlZiBzcGxpdGF0dHIodXJsKToKQEAgLTk2MiwxMyArOTQwLDcgQEAKICAgICB3b3JkcyA9IHVybC5zcGxpdCgnOycpCiAgICAgcmV0dXJuIHdvcmRzWzBdLCB3b3Jkc1sxOl0KIAotX3ZhbHVlcHJvZyA9IE5vbmUKIGRlZiBzcGxpdHZhbHVlKGF0dHIpOgogICAgICIiInNwbGl0dmFsdWUoJ2F0dHI9dmFsdWUnKSAtLT4gJ2F0dHInLCAndmFsdWUnLiIiIgotICAgIGdsb2JhbCBfdmFsdWVwcm9nCi0gICAgaWYgX3ZhbHVlcHJvZyBpcyBOb25lOgotICAgICAgICBfdmFsdWVwcm9nID0gcmUuY29tcGlsZSgnXihbXj1dKik9KC4qKSQnKQotCi0gICAgbWF0Y2ggPSBfdmFsdWVwcm9nLm1hdGNoKGF0dHIpCi0gICAgaWYgbWF0Y2g6IHJldHVybiBtYXRjaC5ncm91cCgxLCAyKQotICAgIHJldHVybiBhdHRyLCBOb25lCisgICAgYXR0ciwgZGVsaW0sIHZhbHVlID0gYXR0ci5wYXJ0aXRpb24oJz0nKQorICAgIHJldHVybiBhdHRyLCAodmFsdWUgaWYgZGVsaW0gZWxzZSBOb25lKQpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5IGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CmluZGV4IGY3NjkzODYuLjNiZTMyN2QgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcmVxdWVzdC5weQorKysgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKQEAgLTkxLDYgKzkxLDcgQEAKIGltcG9ydCBwb3NpeHBhdGgKIGltcG9ydCByZQogaW1wb3J0IHNvY2tldAoraW1wb3J0IHN0cmluZwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBjb2xsZWN0aW9ucwpAQCAtMTIwLDkgKzEyMSwxMCBAQAogICAgICdSZXF1ZXN0JywgJ09wZW5lckRpcmVjdG9yJywgJ0Jhc2VIYW5kbGVyJywgJ0hUVFBEZWZhdWx0RXJyb3JIYW5kbGVyJywKICAgICAnSFRUUFJlZGlyZWN0SGFuZGxlcicsICdIVFRQQ29va2llUHJvY2Vzc29yJywgJ1Byb3h5SGFuZGxlcicsCiAgICAgJ0hUVFBQYXNzd29yZE1ncicsICdIVFRQUGFzc3dvcmRNZ3JXaXRoRGVmYXVsdFJlYWxtJywKLSAgICAnQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyJywgJ0hUVFBCYXNpY0F1dGhIYW5kbGVyJywgJ1Byb3h5QmFzaWNBdXRoSGFuZGxlcicsCi0gICAgJ0Fic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXInLCAnSFRUUERpZ2VzdEF1dGhIYW5kbGVyJywgJ1Byb3h5RGlnZXN0QXV0aEhhbmRsZXInLAotICAgICdIVFRQSGFuZGxlcicsICdGaWxlSGFuZGxlcicsICdGVFBIYW5kbGVyJywgJ0NhY2hlRlRQSGFuZGxlcicsICdEYXRhSGFuZGxlcicsCisgICAgJ0hUVFBQYXNzd29yZE1ncldpdGhQcmlvckF1dGgnLCAnQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyJywKKyAgICAnSFRUUEJhc2ljQXV0aEhhbmRsZXInLCAnUHJveHlCYXNpY0F1dGhIYW5kbGVyJywgJ0Fic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXInLAorICAgICdIVFRQRGlnZXN0QXV0aEhhbmRsZXInLCAnUHJveHlEaWdlc3RBdXRoSGFuZGxlcicsICdIVFRQSGFuZGxlcicsCisgICAgJ0ZpbGVIYW5kbGVyJywgJ0ZUUEhhbmRsZXInLCAnQ2FjaGVGVFBIYW5kbGVyJywgJ0RhdGFIYW5kbGVyJywKICAgICAnVW5rbm93bkhhbmRsZXInLCAnSFRUUEVycm9yUHJvY2Vzc29yJywKICAgICAjIEZ1bmN0aW9ucwogICAgICd1cmxvcGVuJywgJ2luc3RhbGxfb3BlbmVyJywgJ2J1aWxkX29wZW5lcicsCkBAIC02MTUsOCArNjE3LDEyIEBACiAgICAgICAgICMgZnJvbSB0aGUgdXNlciAob2YgdXJsbGliLnJlcXVlc3QsIGluIHRoaXMgY2FzZSkuICBJbiBwcmFjdGljZSwKICAgICAgICAgIyBlc3NlbnRpYWxseSBhbGwgY2xpZW50cyBkbyByZWRpcmVjdCBpbiB0aGlzIGNhc2UsIHNvIHdlIGRvCiAgICAgICAgICMgdGhlIHNhbWUuCi0gICAgICAgICMgYmUgY29uY2lsaWFudCB3aXRoIFVSSXMgY29udGFpbmluZyBhIHNwYWNlCisKKyAgICAgICAgIyBCZSBjb25jaWxpYW50IHdpdGggVVJJcyBjb250YWluaW5nIGEgc3BhY2UuICBUaGlzIGlzIG1haW5seQorICAgICAgICAjIHJlZHVuZGFudCB3aXRoIHRoZSBtb3JlIGNvbXBsZXRlIGVuY29kaW5nIGRvbmUgaW4gaHR0cF9lcnJvcl8zMDIoKSwKKyAgICAgICAgIyBidXQgaXQgaXMga2VwdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGNhbGxlcnMuCiAgICAgICAgIG5ld3VybCA9IG5ld3VybC5yZXBsYWNlKCcgJywgJyUyMCcpCisKICAgICAgICAgQ09OVEVOVF9IRUFERVJTID0gKCJjb250ZW50LWxlbmd0aCIsICJjb250ZW50LXR5cGUiKQogICAgICAgICBuZXdoZWFkZXJzID0gZGljdCgoaywgdikgZm9yIGssIHYgaW4gcmVxLmhlYWRlcnMuaXRlbXMoKQogICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBrLmxvd2VyKCkgbm90IGluIENPTlRFTlRfSEVBREVSUykKQEAgLTY1MSwxMSArNjU3LDE2IEBACiAgICAgICAgICAgICAgICAgIiVzIC0gUmVkaXJlY3Rpb24gdG8gdXJsICclcycgaXMgbm90IGFsbG93ZWQiICUgKG1zZywgbmV3dXJsKSwKICAgICAgICAgICAgICAgICBoZWFkZXJzLCBmcCkKIAotICAgICAgICBpZiBub3QgdXJscGFydHMucGF0aDoKKyAgICAgICAgaWYgbm90IHVybHBhcnRzLnBhdGggYW5kIHVybHBhcnRzLm5ldGxvYzoKICAgICAgICAgICAgIHVybHBhcnRzID0gbGlzdCh1cmxwYXJ0cykKICAgICAgICAgICAgIHVybHBhcnRzWzJdID0gIi8iCiAgICAgICAgIG5ld3VybCA9IHVybHVucGFyc2UodXJscGFydHMpCiAKKyAgICAgICAgIyBodHRwLmNsaWVudC5wYXJzZV9oZWFkZXJzKCkgZGVjb2RlcyBhcyBJU08tODg1OS0xLiAgUmVjb3ZlciB0aGUKKyAgICAgICAgIyBvcmlnaW5hbCBieXRlcyBhbmQgcGVyY2VudC1lbmNvZGUgbm9uLUFTQ0lJIGJ5dGVzLCBhbmQgYW55IHNwZWNpYWwKKyAgICAgICAgIyBjaGFyYWN0ZXJzIHN1Y2ggYXMgdGhlIHNwYWNlLgorICAgICAgICBuZXd1cmwgPSBxdW90ZSgKKyAgICAgICAgICAgIG5ld3VybCwgZW5jb2Rpbmc9Imlzby04ODU5LTEiLCBzYWZlPXN0cmluZy5wdW5jdHVhdGlvbikKICAgICAgICAgbmV3dXJsID0gdXJsam9pbihyZXEuZnVsbF91cmwsIG5ld3VybCkKIAogICAgICAgICAjIFhYWCBQcm9iYWJseSB3YW50IHRvIGZvcmdldCBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQKQEAgLTgzNiw2ICs4NDcsMzcgQEAKICAgICAgICAgcmV0dXJuIEhUVFBQYXNzd29yZE1nci5maW5kX3VzZXJfcGFzc3dvcmQoc2VsZiwgTm9uZSwgYXV0aHVyaSkKIAogCitjbGFzcyBIVFRQUGFzc3dvcmRNZ3JXaXRoUHJpb3JBdXRoKEhUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG0pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXV0aGVudGljYXRlZCA9IHt9CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFkZF9wYXNzd29yZChzZWxmLCByZWFsbSwgdXJpLCB1c2VyLCBwYXNzd2QsIGlzX2F1dGhlbnRpY2F0ZWQ9RmFsc2UpOgorICAgICAgICBzZWxmLnVwZGF0ZV9hdXRoZW50aWNhdGVkKHVyaSwgaXNfYXV0aGVudGljYXRlZCkKKyAgICAgICAgIyBBZGQgYSBkZWZhdWx0IGZvciBwcmlvciBhdXRoIHJlcXVlc3RzCisgICAgICAgIGlmIHJlYWxtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3VwZXIoKS5hZGRfcGFzc3dvcmQoTm9uZSwgdXJpLCB1c2VyLCBwYXNzd2QpCisgICAgICAgIHN1cGVyKCkuYWRkX3Bhc3N3b3JkKHJlYWxtLCB1cmksIHVzZXIsIHBhc3N3ZCkKKworICAgIGRlZiB1cGRhdGVfYXV0aGVudGljYXRlZChzZWxmLCB1cmksIGlzX2F1dGhlbnRpY2F0ZWQ9RmFsc2UpOgorICAgICAgICAjIHVyaSBjb3VsZCBiZSBhIHNpbmdsZSBVUkkgb3IgYSBzZXF1ZW5jZQorICAgICAgICBpZiBpc2luc3RhbmNlKHVyaSwgc3RyKToKKyAgICAgICAgICAgIHVyaSA9IFt1cmldCisKKyAgICAgICAgZm9yIGRlZmF1bHRfcG9ydCBpbiBUcnVlLCBGYWxzZToKKyAgICAgICAgICAgIGZvciB1IGluIHVyaToKKyAgICAgICAgICAgICAgICByZWR1Y2VkX3VyaSA9IHNlbGYucmVkdWNlX3VyaSh1LCBkZWZhdWx0X3BvcnQpCisgICAgICAgICAgICAgICAgc2VsZi5hdXRoZW50aWNhdGVkW3JlZHVjZWRfdXJpXSA9IGlzX2F1dGhlbnRpY2F0ZWQKKworICAgIGRlZiBpc19hdXRoZW50aWNhdGVkKHNlbGYsIGF1dGh1cmkpOgorICAgICAgICBmb3IgZGVmYXVsdF9wb3J0IGluIFRydWUsIEZhbHNlOgorICAgICAgICAgICAgcmVkdWNlZF9hdXRodXJpID0gc2VsZi5yZWR1Y2VfdXJpKGF1dGh1cmksIGRlZmF1bHRfcG9ydCkKKyAgICAgICAgICAgIGZvciB1cmkgaW4gc2VsZi5hdXRoZW50aWNhdGVkOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuaXNfc3VidXJpKHVyaSwgcmVkdWNlZF9hdXRodXJpKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXV0aGVudGljYXRlZFt1cmldCisKKwogY2xhc3MgQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyOgogCiAgICAgIyBYWFggdGhpcyBhbGxvd3MgZm9yIG11bHRpcGxlIGF1dGgtc2NoZW1lcywgYnV0IHdpbGwgc3R1cGlkbHkgcGljawpAQCAtODkwLDYgKzkzMiwzMSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAorICAgIGRlZiBodHRwX3JlcXVlc3Qoc2VsZiwgcmVxKToKKyAgICAgICAgaWYgKG5vdCBoYXNhdHRyKHNlbGYucGFzc3dkLCAnaXNfYXV0aGVudGljYXRlZCcpIG9yCisgICAgICAgICAgIG5vdCBzZWxmLnBhc3N3ZC5pc19hdXRoZW50aWNhdGVkKHJlcS5mdWxsX3VybCkpOgorICAgICAgICAgICAgcmV0dXJuIHJlcQorCisgICAgICAgIGlmIG5vdCByZXEuaGFzX2hlYWRlcignQXV0aG9yaXphdGlvbicpOgorICAgICAgICAgICAgdXNlciwgcGFzc3dkID0gc2VsZi5wYXNzd2QuZmluZF91c2VyX3Bhc3N3b3JkKE5vbmUsIHJlcS5mdWxsX3VybCkKKyAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gJ3swfTp7MX0nLmZvcm1hdCh1c2VyLCBwYXNzd2QpLmVuY29kZSgpCisgICAgICAgICAgICBhdXRoX3N0ciA9IGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoY3JlZGVudGlhbHMpLmRlY29kZSgpCisgICAgICAgICAgICByZXEuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoJ0F1dGhvcml6YXRpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCYXNpYyB7fScuZm9ybWF0KGF1dGhfc3RyLnN0cmlwKCkpKQorICAgICAgICByZXR1cm4gcmVxCisKKyAgICBkZWYgaHR0cF9yZXNwb25zZShzZWxmLCByZXEsIHJlc3BvbnNlKToKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBhc3N3ZCwgJ2lzX2F1dGhlbnRpY2F0ZWQnKToKKyAgICAgICAgICAgIGlmIDIwMCA8PSByZXNwb25zZS5jb2RlIDwgMzAwOgorICAgICAgICAgICAgICAgIHNlbGYucGFzc3dkLnVwZGF0ZV9hdXRoZW50aWNhdGVkKHJlcS5mdWxsX3VybCwgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wYXNzd2QudXBkYXRlX2F1dGhlbnRpY2F0ZWQocmVxLmZ1bGxfdXJsLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlCisKKyAgICBodHRwc19yZXF1ZXN0ID0gaHR0cF9yZXF1ZXN0CisgICAgaHR0cHNfcmVzcG9uc2UgPSBodHRwX3Jlc3BvbnNlCisKKwogCiBjbGFzcyBIVFRQQmFzaWNBdXRoSGFuZGxlcihBYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXIsIEJhc2VIYW5kbGVyKToKIApAQCAtMTA1NCw2ICsxMTIxLDkgQEAKICAgICAgICAgZWxpZiBhbGdvcml0aG0gPT0gJ1NIQSc6CiAgICAgICAgICAgICBIID0gbGFtYmRhIHg6IGhhc2hsaWIuc2hhMSh4LmVuY29kZSgiYXNjaWkiKSkuaGV4ZGlnZXN0KCkKICAgICAgICAgIyBYWFggTUQ1LXNlc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGRpZ2VzdCBhdXRoZW50aWNhdGlvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGdvcml0aG0gJXIiICUgYWxnb3JpdGhtKQogICAgICAgICBLRCA9IGxhbWJkYSBzLCBkOiBIKCIlczolcyIgJSAocywgZCkpCiAgICAgICAgIHJldHVybiBILCBLRAogCkBAIC0xMTUxLDYgKzEyMjEsNyBAQAogCiAgICAgICAgICMgd2lsbCBwYXJzZSBob3N0OnBvcnQKICAgICAgICAgaCA9IGh0dHBfY2xhc3MoaG9zdCwgdGltZW91dD1yZXEudGltZW91dCwgKipodHRwX2Nvbm5fYXJncykKKyAgICAgICAgaC5zZXRfZGVidWdsZXZlbChzZWxmLl9kZWJ1Z2xldmVsKQogCiAgICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS51bnJlZGlyZWN0ZWRfaGRycykKICAgICAgICAgaGVhZGVycy51cGRhdGUoZGljdCgoaywgdikgZm9yIGssIHYgaW4gcmVxLmhlYWRlcnMuaXRlbXMoKQpAQCAtMTk5MywxOCArMjA2NCwyMCBAQAogICAgIGRlZiBodHRwX2Vycm9yXzMwMihzZWxmLCB1cmwsIGZwLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIGRhdGE9Tm9uZSk6CiAgICAgICAgICIiIkVycm9yIDMwMiAtLSByZWxvY2F0ZWQgKHRlbXBvcmFyaWx5KS4iIiIKICAgICAgICAgc2VsZi50cmllcyArPSAxCi0gICAgICAgIGlmIHNlbGYubWF4dHJpZXMgYW5kIHNlbGYudHJpZXMgPj0gc2VsZi5tYXh0cmllczoKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgImh0dHBfZXJyb3JfNTAwIik6Ci0gICAgICAgICAgICAgICAgbWV0aCA9IHNlbGYuaHR0cF9lcnJvcl81MDAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbWV0aCA9IHNlbGYuaHR0cF9lcnJvcl9kZWZhdWx0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYubWF4dHJpZXMgYW5kIHNlbGYudHJpZXMgPj0gc2VsZi5tYXh0cmllczoKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICJodHRwX2Vycm9yXzUwMCIpOgorICAgICAgICAgICAgICAgICAgICBtZXRoID0gc2VsZi5odHRwX2Vycm9yXzUwMAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1ldGggPSBzZWxmLmh0dHBfZXJyb3JfZGVmYXVsdAorICAgICAgICAgICAgICAgIHJldHVybiBtZXRoKHVybCwgZnAsIDUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJuYWwgU2VydmVyIEVycm9yOiBSZWRpcmVjdCBSZWN1cnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnJlZGlyZWN0X2ludGVybmFsKHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycywgZGF0YSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudHJpZXMgPSAwCi0gICAgICAgICAgICByZXR1cm4gbWV0aCh1cmwsIGZwLCA1MDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJuYWwgU2VydmVyIEVycm9yOiBSZWRpcmVjdCBSZWN1cnNpb24iLCBoZWFkZXJzKQotICAgICAgICByZXN1bHQgPSBzZWxmLnJlZGlyZWN0X2ludGVybmFsKHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKQotICAgICAgICBzZWxmLnRyaWVzID0gMAotICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgcmVkaXJlY3RfaW50ZXJuYWwoc2VsZiwgdXJsLCBmcCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBkYXRhKToKICAgICAgICAgaWYgJ2xvY2F0aW9uJyBpbiBoZWFkZXJzOgpAQCAtMjMzMywyNiArMjQwNiw0MSBAQAogCiAgICAgIiIiCiAgICAgcHJveGllcyA9IHt9CisgICAgIyBpbiBvcmRlciB0byBwcmVmZXIgbG93ZXJjYXNlIHZhcmlhYmxlcywgcHJvY2VzcyBlbnZpcm9ubWVudCBpbgorICAgICMgdHdvIHBhc3NlczogZmlyc3QgbWF0Y2hlcyBhbnksIHNlY29uZCBwYXNzIG1hdGNoZXMgbG93ZXJjYXNlIG9ubHkKICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gb3MuZW52aXJvbi5pdGVtcygpOgogICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCiAgICAgICAgIGlmIHZhbHVlIGFuZCBuYW1lWy02Ol0gPT0gJ19wcm94eSc6CiAgICAgICAgICAgICBwcm94aWVzW25hbWVbOi02XV0gPSB2YWx1ZQotCiAgICAgIyBDVkUtMjAxNi0xMDAwMTEwIC0gSWYgd2UgYXJlIHJ1bm5pbmcgYXMgQ0dJIHNjcmlwdCwgZm9yZ2V0IEhUVFBfUFJPWFkKICAgICAjIChub24tYWxsLWxvd2VyY2FzZSkgYXMgaXQgbWF5IGJlIHNldCBmcm9tIHRoZSB3ZWIgc2VydmVyIGJ5IGEgIlByb3h5OiIKICAgICAjIGhlYWRlciBmcm9tIHRoZSBjbGllbnQKKyAgICAjIElmICJwcm94eSIgaXMgbG93ZXJjYXNlLCBpdCB3aWxsIHN0aWxsIGJlIHVzZWQgdGhhbmtzIHRvIHRoZSBuZXh0IGJsb2NrCiAgICAgaWYgJ1JFUVVFU1RfTUVUSE9EJyBpbiBvcy5lbnZpcm9uOgogICAgICAgICBwcm94aWVzLnBvcCgnaHR0cCcsIE5vbmUpCi0KKyAgICBmb3IgbmFtZSwgdmFsdWUgaW4gb3MuZW52aXJvbi5pdGVtcygpOgorICAgICAgICBpZiBuYW1lWy02Ol0gPT0gJ19wcm94eSc6CisgICAgICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCisgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICBwcm94aWVzW25hbWVbOi02XV0gPSB2YWx1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm94aWVzLnBvcChuYW1lWzotNl0sIE5vbmUpCiAgICAgcmV0dXJuIHByb3hpZXMKIAotZGVmIHByb3h5X2J5cGFzc19lbnZpcm9ubWVudChob3N0KToKK2RlZiBwcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoaG9zdCwgcHJveGllcz1Ob25lKToKICAgICAiIiJUZXN0IGlmIHByb3hpZXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBhIHBhcnRpY3VsYXIgaG9zdC4KIAotICAgIENoZWNrcyB0aGUgZW52aXJvbm1lbnQgZm9yIGEgdmFyaWFibGUgbmFtZWQgbm9fcHJveHksIHdoaWNoIHNob3VsZAotICAgIGJlIGEgbGlzdCBvZiBETlMgc3VmZml4ZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcywgb3IgJyonIGZvciBhbGwgaG9zdHMuCisgICAgQ2hlY2tzIHRoZSBwcm94eSBkaWN0IGZvciB0aGUgdmFsdWUgb2Ygbm9fcHJveHksIHdoaWNoIHNob3VsZAorICAgIGJlIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgRE5TIHN1ZmZpeGVzLCBvciAnKicgZm9yIGFsbCBob3N0cy4KKwogICAgICIiIgotICAgIG5vX3Byb3h5ID0gb3MuZW52aXJvbi5nZXQoJ25vX3Byb3h5JywgJycpIG9yIG9zLmVudmlyb24uZ2V0KCdOT19QUk9YWScsICcnKQorICAgIGlmIHByb3hpZXMgaXMgTm9uZToKKyAgICAgICAgcHJveGllcyA9IGdldHByb3hpZXNfZW52aXJvbm1lbnQoKQorICAgICMgZG9uJ3QgYnlwYXNzLCBpZiBub19wcm94eSBpc24ndCBzcGVjaWZpZWQKKyAgICB0cnk6CisgICAgICAgIG5vX3Byb3h5ID0gcHJveGllc1snbm8nXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmV0dXJuIDAKICAgICAjICcqJyBpcyBzcGVjaWFsIGNhc2UgZm9yIGFsd2F5cyBieXBhc3MKICAgICBpZiBub19wcm94eSA9PSAnKic6CiAgICAgICAgIHJldHVybiAxCkBAIC0yMzYxLDggKzI0NDksMTIgQEAKICAgICAjIGNoZWNrIGlmIHRoZSBob3N0IGVuZHMgd2l0aCBhbnkgb2YgdGhlIEROUyBzdWZmaXhlcwogICAgIG5vX3Byb3h5X2xpc3QgPSBbcHJveHkuc3RyaXAoKSBmb3IgcHJveHkgaW4gbm9fcHJveHkuc3BsaXQoJywnKV0KICAgICBmb3IgbmFtZSBpbiBub19wcm94eV9saXN0OgotICAgICAgICBpZiBuYW1lIGFuZCAoaG9zdG9ubHkuZW5kc3dpdGgobmFtZSkgb3IgaG9zdC5lbmRzd2l0aChuYW1lKSk6Ci0gICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBpZiBuYW1lOgorICAgICAgICAgICAgbmFtZSA9IHJlLmVzY2FwZShuYW1lKQorICAgICAgICAgICAgcGF0dGVybiA9IHInKC4rXC4pPyVzJCcgJSBuYW1lCisgICAgICAgICAgICBpZiAocmUubWF0Y2gocGF0dGVybiwgaG9zdG9ubHksIHJlLkkpCisgICAgICAgICAgICAgICAgICAgIG9yIHJlLm1hdGNoKHBhdHRlcm4sIGhvc3QsIHJlLkkpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMQogICAgICMgb3RoZXJ3aXNlLCBkb24ndCBieXBhc3MKICAgICByZXR1cm4gMAogCkBAIC0yNDQ3LDggKzI1MzksMTUgQEAKIAogCiAgICAgZGVmIHByb3h5X2J5cGFzcyhob3N0KToKLSAgICAgICAgaWYgZ2V0cHJveGllc19lbnZpcm9ubWVudCgpOgotICAgICAgICAgICAgcmV0dXJuIHByb3h5X2J5cGFzc19lbnZpcm9ubWVudChob3N0KQorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSwgaWYgaG9zdCBzaG91bGQgYmUgYnlwYXNzZWQuCisKKyAgICAgICAgQ2hlY2tzIHByb3h5IHNldHRpbmdzIGdhdGhlcmVkIGZyb20gdGhlIGVudmlyb25tZW50LCBpZiBzcGVjaWZpZWQsCisgICAgICAgIG9yIGZyb20gdGhlIE1hY09TWCBmcmFtZXdvcmsgU3lzdGVtQ29uZmlndXJhdGlvbi4KKworICAgICAgICAiIiIKKyAgICAgICAgcHJveGllcyA9IGdldHByb3hpZXNfZW52aXJvbm1lbnQoKQorICAgICAgICBpZiBwcm94aWVzOgorICAgICAgICAgICAgcmV0dXJuIHByb3h5X2J5cGFzc19lbnZpcm9ubWVudChob3N0LCBwcm94aWVzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHByb3h5X2J5cGFzc19tYWNvc3hfc3lzY29uZihob3N0KQogCkBAIC0yNTYyLDE0ICsyNjYxLDE1IEBACiAgICAgICAgIHJldHVybiAwCiAKICAgICBkZWYgcHJveHlfYnlwYXNzKGhvc3QpOgotICAgICAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIHNjaGVtZSAtPiBwcm94eSBzZXJ2ZXIgVVJMIG1hcHBpbmdzLgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSwgaWYgaG9zdCBzaG91bGQgYmUgYnlwYXNzZWQuCiAKLSAgICAgICAgUmV0dXJucyBzZXR0aW5ncyBnYXRoZXJlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCwgaWYgc3BlY2lmaWVkLAorICAgICAgICBDaGVja3MgcHJveHkgc2V0dGluZ3MgZ2F0aGVyZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQsIGlmIHNwZWNpZmllZCwKICAgICAgICAgb3IgdGhlIHJlZ2lzdHJ5LgogCiAgICAgICAgICIiIgotICAgICAgICBpZiBnZXRwcm94aWVzX2Vudmlyb25tZW50KCk6Ci0gICAgICAgICAgICByZXR1cm4gcHJveHlfYnlwYXNzX2Vudmlyb25tZW50KGhvc3QpCisgICAgICAgIHByb3hpZXMgPSBnZXRwcm94aWVzX2Vudmlyb25tZW50KCkKKyAgICAgICAgaWYgcHJveGllczoKKyAgICAgICAgICAgIHJldHVybiBwcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoaG9zdCwgcHJveGllcykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBwcm94eV9ieXBhc3NfcmVnaXN0cnkoaG9zdCkKIApkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yb2JvdHBhcnNlci5weSBiL0xpYi91cmxsaWIvcm9ib3RwYXJzZXIucHkKaW5kZXggMWQ3Yjc1MS4uOGI2OWZkOSAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9yb2JvdHBhcnNlci5weQorKysgYi9MaWIvdXJsbGliL3JvYm90cGFyc2VyLnB5CkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICMgVW50aWwgdGhlIHJvYm90cy50eHQgZmlsZSBoYXMgYmVlbiByZWFkIG9yIGZvdW5kIG5vdAogICAgICAgICAjIHRvIGV4aXN0LCB3ZSBtdXN0IGFzc3VtZSB0aGF0IG5vIHVybCBpcyBhbGxvd2FibGUuCi0gICAgICAgICMgVGhpcyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgd2hlbiBhIHVzZXIgZXJyb25lbm91c2x5CisgICAgICAgICMgVGhpcyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgd2hlbiBhIHVzZXIgZXJyb25lb3VzbHkKICAgICAgICAgIyBjYWxscyBjYW5fZmV0Y2goKSBiZWZvcmUgY2FsbGluZyByZWFkKCkuCiAgICAgICAgIGlmIG5vdCBzZWxmLmxhc3RfY2hlY2tlZDoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLnBhdGggPT0gIioiIG9yIGZpbGVuYW1lLnN0YXJ0c3dpdGgoc2VsZi5wYXRoKQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAoc2VsZi5hbGxvd2FuY2UgYW5kICJBbGxvdyIgb3IgIkRpc2FsbG93IikgKyAiOiAiICsgc2VsZi5wYXRoCisgICAgICAgIHJldHVybiAoIkFsbG93IiBpZiBzZWxmLmFsbG93YW5jZSBlbHNlICJEaXNhbGxvdyIpICsgIjogIiArIHNlbGYucGF0aAogCiAKIGNsYXNzIEVudHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3V1aWQucHkgYi9MaWIvdXVpZC5weQppbmRleCAxMDYxYmZmLi5lOTZlN2UwIDEwMDY0NAotLS0gYS9MaWIvdXVpZC5weQorKysgYi9MaWIvdXVpZC5weQpAQCAtNDQsNiArNDQsOCBAQAogICAgIFVVSUQoJzAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBhMGIwYzBkMGUwZicpCiAiIiIKIAoraW1wb3J0IG9zCisKIF9fYXV0aG9yX18gPSAnS2EtUGluZyBZZWUgPHBpbmdAemVzdHkuY2E+JwogCiBSRVNFUlZFRF9OQ1MsIFJGQ180MTIyLCBSRVNFUlZFRF9NSUNST1NPRlQsIFJFU0VSVkVEX0ZVVFVSRSA9IFsKQEAgLTEyOSw3ICsxMzEsOCBAQAogICAgICAgICAiIiIKIAogICAgICAgICBpZiBbaGV4LCBieXRlcywgYnl0ZXNfbGUsIGZpZWxkcywgaW50XS5jb3VudChOb25lKSAhPSA0OgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCduZWVkIG9uZSBvZiBoZXgsIGJ5dGVzLCBieXRlc19sZSwgZmllbGRzLCBvciBpbnQnKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdvbmUgb2YgdGhlIGhleCwgYnl0ZXMsIGJ5dGVzX2xlLCBmaWVsZHMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3IgaW50IGFyZ3VtZW50cyBtdXN0IGJlIGdpdmVuJykKICAgICAgICAgaWYgaGV4IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaGV4ID0gaGV4LnJlcGxhY2UoJ3VybjonLCAnJykucmVwbGFjZSgndXVpZDonLCAnJykKICAgICAgICAgICAgIGhleCA9IGhleC5zdHJpcCgne30nKS5yZXBsYWNlKCctJywgJycpCkBAIC0xMzksMTAgKzE0Miw4IEBACiAgICAgICAgIGlmIGJ5dGVzX2xlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbGVuKGJ5dGVzX2xlKSAhPSAxNjoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdieXRlc19sZSBpcyBub3QgYSAxNi1jaGFyIHN0cmluZycpCi0gICAgICAgICAgICBieXRlcyA9IChieXRlc18ocmV2ZXJzZWQoYnl0ZXNfbGVbMDo0XSkpICsKLSAgICAgICAgICAgICAgICAgICAgIGJ5dGVzXyhyZXZlcnNlZChieXRlc19sZVs0OjZdKSkgKwotICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfKHJldmVyc2VkKGJ5dGVzX2xlWzY6OF0pKSArCi0gICAgICAgICAgICAgICAgICAgICBieXRlc19sZVs4Ol0pCisgICAgICAgICAgICBieXRlcyA9IChieXRlc19sZVs0LTE6Oi0xXSArIGJ5dGVzX2xlWzYtMTo0LTE6LTFdICsKKyAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2xlWzgtMTo2LTE6LTFdICsgYnl0ZXNfbGVbODpdKQogICAgICAgICBpZiBieXRlcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGlmIGxlbihieXRlcykgIT0gMTY6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYnl0ZXMgaXMgbm90IGEgMTYtY2hhciBzdHJpbmcnKQpAQCAtMTg3LDExICsxODgsNiBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW50ID09IG90aGVyLmludAogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBVVUlEKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmludCAhPSBvdGhlci5pbnQKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KICAgICAjIFEuIFdoYXQncyB0aGUgdmFsdWUgb2YgYmVpbmcgYWJsZSB0byBzb3J0IFVVSURzPwogICAgICMgQS4gVXNlIHRoZW0gYXMga2V5cyBpbiBhIEItVHJlZSBvciBzaW1pbGFyIG1hcHBpbmcuCiAKQEAgLTIyMiw3ICsyMTgsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5pbnQKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICdVVUlEKCVyKScgJSBzdHIoc2VsZikKKyAgICAgICAgcmV0dXJuICclcyglciknICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoc2VsZikpCiAKICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ1VVSUQgb2JqZWN0cyBhcmUgaW1tdXRhYmxlJykKQEAgLTIzNCwxNyArMjMwLDEyIEBACiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgYnl0ZXMoc2VsZik6Ci0gICAgICAgIGJ5dGVzID0gYnl0ZWFycmF5KCkKLSAgICAgICAgZm9yIHNoaWZ0IGluIHJhbmdlKDAsIDEyOCwgOCk6Ci0gICAgICAgICAgICBieXRlcy5pbnNlcnQoMCwgKHNlbGYuaW50ID4+IHNoaWZ0KSAmIDB4ZmYpCi0gICAgICAgIHJldHVybiBieXRlc18oYnl0ZXMpCisgICAgICAgIHJldHVybiBzZWxmLmludC50b19ieXRlcygxNiwgJ2JpZycpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgYnl0ZXNfbGUoc2VsZik6CiAgICAgICAgIGJ5dGVzID0gc2VsZi5ieXRlcwotICAgICAgICByZXR1cm4gKGJ5dGVzXyhyZXZlcnNlZChieXRlc1swOjRdKSkgKwotICAgICAgICAgICAgICAgIGJ5dGVzXyhyZXZlcnNlZChieXRlc1s0OjZdKSkgKwotICAgICAgICAgICAgICAgIGJ5dGVzXyhyZXZlcnNlZChieXRlc1s2OjhdKSkgKworICAgICAgICByZXR1cm4gKGJ5dGVzWzQtMTo6LTFdICsgYnl0ZXNbNi0xOjQtMTotMV0gKyBieXRlc1s4LTE6Ni0xOi0xXSArCiAgICAgICAgICAgICAgICAgYnl0ZXNbODpdKQogCiAgICAgQHByb3BlcnR5CkBAIC0zMTEsMzMgKzMwMiwzOCBAQAogICAgICAgICBpZiBzZWxmLnZhcmlhbnQgPT0gUkZDXzQxMjI6CiAgICAgICAgICAgICByZXR1cm4gaW50KChzZWxmLmludCA+PiA3NikgJiAweGYpCiAKLWRlZiBfcG9wZW4oY29tbWFuZCwgYXJncyk6Ci0gICAgaW1wb3J0IG9zLCBzaHV0aWwKK2RlZiBfcG9wZW4oY29tbWFuZCwgKmFyZ3MpOgorICAgIGltcG9ydCBvcywgc2h1dGlsLCBzdWJwcm9jZXNzCiAgICAgZXhlY3V0YWJsZSA9IHNodXRpbC53aGljaChjb21tYW5kKQogICAgIGlmIGV4ZWN1dGFibGUgaXMgTm9uZToKICAgICAgICAgcGF0aCA9IG9zLnBhdGhzZXAuam9pbigoJy9zYmluJywgJy91c3Ivc2JpbicpKQogICAgICAgICBleGVjdXRhYmxlID0gc2h1dGlsLndoaWNoKGNvbW1hbmQsIHBhdGg9cGF0aCkKICAgICAgICAgaWYgZXhlY3V0YWJsZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAjIExDX0FMTCB0byBlbnN1cmUgRW5nbGlzaCBvdXRwdXQsIDI+L2Rldi9udWxsIHRvIHByZXZlbnQgb3V0cHV0IG9uCi0gICAgIyBzdGRlcnIgKE5vdGU6IHdlIGRvbid0IGhhdmUgYW4gZXhhbXBsZSB3aGVyZSB0aGUgd29yZHMgd2Ugc2VhcmNoIGZvcgotICAgICMgYXJlIGFjdHVhbGx5IGxvY2FsaXplZCwgYnV0IGluIHRoZW9yeSBzb21lIHN5c3RlbSBjb3VsZCBkbyBzby4pCi0gICAgY21kID0gJ0xDX0FMTD1DICVzICVzIDI+L2Rldi9udWxsJyAlIChleGVjdXRhYmxlLCBhcmdzKQotICAgIHJldHVybiBvcy5wb3BlbihjbWQpCisgICAgIyBMQ19BTEw9QyB0byBlbnN1cmUgRW5nbGlzaCBvdXRwdXQsIHN0ZGVycj1ERVZOVUxMIHRvIHByZXZlbnQgb3V0cHV0CisgICAgIyBvbiBzdGRlcnIgKE5vdGU6IHdlIGRvbid0IGhhdmUgYW4gZXhhbXBsZSB3aGVyZSB0aGUgd29yZHMgd2Ugc2VhcmNoCisgICAgIyBmb3IgYXJlIGFjdHVhbGx5IGxvY2FsaXplZCwgYnV0IGluIHRoZW9yeSBzb21lIHN5c3RlbSBjb3VsZCBkbyBzby4pCisgICAgZW52ID0gZGljdChvcy5lbnZpcm9uKQorICAgIGVudlsnTENfQUxMJ10gPSAnQycKKyAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigoZXhlY3V0YWJsZSwpICsgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICByZXR1cm4gcHJvYwogCiBkZWYgX2ZpbmRfbWFjKGNvbW1hbmQsIGFyZ3MsIGh3X2lkZW50aWZpZXJzLCBnZXRfaW5kZXgpOgogICAgIHRyeToKLSAgICAgICAgcGlwZSA9IF9wb3Blbihjb21tYW5kLCBhcmdzKQotICAgICAgICBpZiBub3QgcGlwZToKKyAgICAgICAgcHJvYyA9IF9wb3Blbihjb21tYW5kLCAqYXJncy5zcGxpdCgpKQorICAgICAgICBpZiBub3QgcHJvYzoKICAgICAgICAgICAgIHJldHVybgotICAgICAgICB3aXRoIHBpcGU6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgorICAgICAgICB3aXRoIHByb2M6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBwcm9jLnN0ZG91dDoKICAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmUubG93ZXIoKS5yc3RyaXAoKS5zcGxpdCgpCiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHdvcmRzKSk6CiAgICAgICAgICAgICAgICAgICAgIGlmIHdvcmRzW2ldIGluIGh3X2lkZW50aWZpZXJzOgogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgPSB3b3Jkc1tnZXRfaW5kZXgoaSldCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjID0gaW50KHdvcmQucmVwbGFjZSgnOicsICcnKSwgMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjID0gaW50KHdvcmQucmVwbGFjZShiJzonLCBiJycpLCAxNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWMKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CkBAIC0zNTQsMTAgKzM1MCwxNyBAQAogICAgICIiIkdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvbiBVbml4IGJ5IHJ1bm5pbmcgaWZjb25maWcuIiIiCiAgICAgIyBUaGlzIHdvcmtzIG9uIExpbnV4ICgnJyBvciAnLWEnKSwgVHJ1NjQgKCctYXYnKSwgYnV0IG5vdCBhbGwgVW5peGVzLgogICAgIGZvciBhcmdzIGluICgnJywgJy1hJywgJy1hdicpOgotICAgICAgICBtYWMgPSBfZmluZF9tYWMoJ2lmY29uZmlnJywgYXJncywgWydod2FkZHInLCAnZXRoZXInXSwgbGFtYmRhIGk6IGkrMSkKKyAgICAgICAgbWFjID0gX2ZpbmRfbWFjKCdpZmNvbmZpZycsIGFyZ3MsIFtiJ2h3YWRkcicsIGInZXRoZXInXSwgbGFtYmRhIGk6IGkrMSkKICAgICAgICAgaWYgbWFjOgogICAgICAgICAgICAgcmV0dXJuIG1hYwogCitkZWYgX2lwX2dldG5vZGUoKToKKyAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gVW5peCBieSBydW5uaW5nIGlwLiIiIgorICAgICMgVGhpcyB3b3JrcyBvbiBMaW51eCB3aXRoIGlwcm91dGUyLgorICAgIG1hYyA9IF9maW5kX21hYygnaXAnLCAnbGluayBsaXN0JywgW2InbGluay9ldGhlciddLCBsYW1iZGEgaTogaSsxKQorICAgIGlmIG1hYzoKKyAgICAgICAgcmV0dXJuIG1hYworCiBkZWYgX2FycF9nZXRub2RlKCk6CiAgICAgIiIiR2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9uIFVuaXggYnkgcnVubmluZyBhcnAuIiIiCiAgICAgaW1wb3J0IG9zLCBzb2NrZXQKQEAgLTM2NywzMiArMzcwLDMyIEBACiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAjIFRyeSBnZXR0aW5nIHRoZSBNQUMgYWRkciBmcm9tIGFycCBiYXNlZCBvbiBvdXIgSVAgYWRkcmVzcyAoU29sYXJpcykuCi0gICAgcmV0dXJuIF9maW5kX21hYygnYXJwJywgJy1hbicsIFtpcF9hZGRyXSwgbGFtYmRhIGk6IC0xKQorICAgIHJldHVybiBfZmluZF9tYWMoJ2FycCcsICctYW4nLCBbb3MuZnNlbmNvZGUoaXBfYWRkcildLCBsYW1iZGEgaTogLTEpCiAKIGRlZiBfbGFuc2Nhbl9nZXRub2RlKCk6CiAgICAgIiIiR2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9uIFVuaXggYnkgcnVubmluZyBsYW5zY2FuLiIiIgogICAgICMgVGhpcyBtaWdodCB3b3JrIG9uIEhQLVVYLgotICAgIHJldHVybiBfZmluZF9tYWMoJ2xhbnNjYW4nLCAnLWFpJywgWydsYW4wJ10sIGxhbWJkYSBpOiAwKQorICAgIHJldHVybiBfZmluZF9tYWMoJ2xhbnNjYW4nLCAnLWFpJywgW2InbGFuMCddLCBsYW1iZGEgaTogMCkKIAogZGVmIF9uZXRzdGF0X2dldG5vZGUoKToKICAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gVW5peCBieSBydW5uaW5nIG5ldHN0YXQuIiIiCiAgICAgIyBUaGlzIG1pZ2h0IHdvcmsgb24gQUlYLCBUcnU2NCBVTklYIGFuZCBwcmVzdW1hYmx5IG9uIElSSVguCiAgICAgdHJ5OgotICAgICAgICBwaXBlID0gX3BvcGVuKCduZXRzdGF0JywgJy1pYScpCi0gICAgICAgIGlmIG5vdCBwaXBlOgorICAgICAgICBwcm9jID0gX3BvcGVuKCduZXRzdGF0JywgJy1pYScpCisgICAgICAgIGlmIG5vdCBwcm9jOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHdpdGggcGlwZToKLSAgICAgICAgICAgIHdvcmRzID0gcGlwZS5yZWFkbGluZSgpLnJzdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgd2l0aCBwcm9jOgorICAgICAgICAgICAgd29yZHMgPSBwcm9jLnN0ZG91dC5yZWFkbGluZSgpLnJzdHJpcCgpLnNwbGl0KCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpID0gd29yZHMuaW5kZXgoJ0FkZHJlc3MnKQorICAgICAgICAgICAgICAgIGkgPSB3b3Jkcy5pbmRleChiJ0FkZHJlc3MnKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gcHJvYy5zdGRvdXQ6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmUucnN0cmlwKCkuc3BsaXQoKQogICAgICAgICAgICAgICAgICAgICB3b3JkID0gd29yZHNbaV0KLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHdvcmQpID09IDE3IGFuZCB3b3JkLmNvdW50KCc6JykgPT0gNToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hYyA9IGludCh3b3JkLnJlcGxhY2UoJzonLCAnJyksIDE2KQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4od29yZCkgPT0gMTcgYW5kIHdvcmQuY291bnQoYic6JykgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hYyA9IGludCh3b3JkLnJlcGxhY2UoYic6JywgYicnKSwgMTYpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hYwogICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CkBAIC00NDcsMzEgKzQ1MCwzNCBAQAogICAgICAgICBpZiB3aW4zMnduZXQuTmV0YmlvcyhuY2IpICE9IDA6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBzdGF0dXMuX3VucGFjaygpCi0gICAgICAgIGJ5dGVzID0gc3RhdHVzLmFkYXB0ZXJfYWRkcmVzcwotICAgICAgICByZXR1cm4gKChieXRlc1swXTw8NDApICsgKGJ5dGVzWzFdPDwzMikgKyAoYnl0ZXNbMl08PDI0KSArCi0gICAgICAgICAgICAgICAgKGJ5dGVzWzNdPDwxNikgKyAoYnl0ZXNbNF08PDgpICsgYnl0ZXNbNV0pCisgICAgICAgIGJ5dGVzID0gc3RhdHVzLmFkYXB0ZXJfYWRkcmVzc1s6Nl0KKyAgICAgICAgaWYgbGVuKGJ5dGVzKSAhPSA2OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKGJ5dGVzLCAnYmlnJykKIAogIyBUaGFua3MgdG8gVGhvbWFzIEhlbGxlciBmb3IgY3R5cGVzIGFuZCBmb3IgaGlzIGhlbHAgd2l0aCBpdHMgdXNlIGhlcmUuCiAKICMgSWYgY3R5cGVzIGlzIGF2YWlsYWJsZSwgdXNlIGl0IHRvIGZpbmQgc3lzdGVtIHJvdXRpbmVzIGZvciBVVUlEIGdlbmVyYXRpb24uCiAjIFhYWCBUaGlzIG1ha2VzIHRoZSBtb2R1bGUgbm9uLXRocmVhZC1zYWZlIQotX3V1aWRfZ2VuZXJhdGVfcmFuZG9tID0gX3V1aWRfZ2VuZXJhdGVfdGltZSA9IF9VdWlkQ3JlYXRlID0gTm9uZQorX3V1aWRfZ2VuZXJhdGVfdGltZSA9IF9VdWlkQ3JlYXRlID0gTm9uZQogdHJ5OgogICAgIGltcG9ydCBjdHlwZXMsIGN0eXBlcy51dGlsCisgICAgaW1wb3J0IHN5cwogCiAgICAgIyBUaGUgdXVpZF9nZW5lcmF0ZV8qIHJvdXRpbmVzIGFyZSBwcm92aWRlZCBieSBsaWJ1dWlkIG9uIGF0IGxlYXN0CiAgICAgIyBMaW51eCBhbmQgRnJlZUJTRCwgYW5kIHByb3ZpZGVkIGJ5IGxpYmMgb24gTWFjIE9TIFguCi0gICAgZm9yIGxpYm5hbWUgaW4gWyd1dWlkJywgJ2MnXToKKyAgICBfbGlibmFtZXMgPSBbJ3V1aWQnXQorICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgIF9saWJuYW1lcy5hcHBlbmQoJ2MnKQorICAgIGZvciBsaWJuYW1lIGluIF9saWJuYW1lczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGliID0gY3R5cGVzLkNETEwoY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KGxpYm5hbWUpKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBoYXNhdHRyKGxpYiwgJ3V1aWRfZ2VuZXJhdGVfcmFuZG9tJyk6Ci0gICAgICAgICAgICBfdXVpZF9nZW5lcmF0ZV9yYW5kb20gPSBsaWIudXVpZF9nZW5lcmF0ZV9yYW5kb20KICAgICAgICAgaWYgaGFzYXR0cihsaWIsICd1dWlkX2dlbmVyYXRlX3RpbWUnKToKICAgICAgICAgICAgIF91dWlkX2dlbmVyYXRlX3RpbWUgPSBsaWIudXVpZF9nZW5lcmF0ZV90aW1lCi0gICAgICAgICAgICBpZiBfdXVpZF9nZW5lcmF0ZV9yYW5kb20gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsgICMgZm91bmQgZXZlcnl0aGluZyB3ZSB3ZXJlIGxvb2tpbmcgZm9yCisgICAgICAgICAgICBicmVhaworICAgIGRlbCBfbGlibmFtZXMKIAogICAgICMgVGhlIHV1aWRfZ2VuZXJhdGVfKiBmdW5jdGlvbnMgYXJlIGJyb2tlbiBvbiBNYWNPUyBYIDEwLjUsIGFzIG5vdGVkCiAgICAgIyBpbiBpc3N1ZSAjODYyMSB0aGUgZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcwpAQCAtNDgwLDExICs0ODYsMTAgQEAKICAgICAjCiAgICAgIyBBc3N1bWUgdGhhdCB0aGUgdXVpZF9nZW5lcmF0ZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiBmcm9tIDEwLjUgb253YXJkLAogICAgICMgdGhlIHRlc3QgY2FuIGJlIGFkanVzdGVkIHdoZW4gYSBsYXRlciB2ZXJzaW9uIGlzIGZpeGVkLgotICAgIGltcG9ydCBzeXMKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgIGltcG9ydCBvcwogICAgICAgICBpZiBpbnQob3MudW5hbWUoKS5yZWxlYXNlLnNwbGl0KCcuJylbMF0pID49IDk6Ci0gICAgICAgICAgICBfdXVpZF9nZW5lcmF0ZV9yYW5kb20gPSBfdXVpZF9nZW5lcmF0ZV90aW1lID0gTm9uZQorICAgICAgICAgICAgX3V1aWRfZ2VuZXJhdGVfdGltZSA9IE5vbmUKIAogICAgICMgT24gV2luZG93cyBwcmlvciB0byAyMDAwLCBVdWlkQ3JlYXRlIGdpdmVzIGEgVVVJRCBjb250YWluaW5nIHRoZQogICAgICMgaGFyZHdhcmUgYWRkcmVzcy4gIE9uIFdpbmRvd3MgMjAwMCBhbmQgbGF0ZXIsIFV1aWRDcmVhdGUgbWFrZXMgYQpAQCAtNTE4LDcgKzUyMyw3IEBACiBkZWYgX3JhbmRvbV9nZXRub2RlKCk6CiAgICAgIiIiR2V0IGEgcmFuZG9tIG5vZGUgSUQsIHdpdGggZWlnaHRoIGJpdCBzZXQgYXMgc3VnZ2VzdGVkIGJ5IFJGQyA0MTIyLiIiIgogICAgIGltcG9ydCByYW5kb20KLSAgICByZXR1cm4gcmFuZG9tLnJhbmRyYW5nZSgwLCAxPDw0OCkgfCAweDAxMDAwMDAwMDAwMAorICAgIHJldHVybiByYW5kb20uZ2V0cmFuZGJpdHMoNDgpIHwgMHgwMTAwMDAwMDAwMDAKIAogX25vZGUgPSBOb25lCiAKQEAgLTUzOSw4ICs1NDQsOCBAQAogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICBnZXR0ZXJzID0gW193aW5kbGxfZ2V0bm9kZSwgX25ldGJpb3NfZ2V0bm9kZSwgX2lwY29uZmlnX2dldG5vZGVdCiAgICAgZWxzZToKLSAgICAgICAgZ2V0dGVycyA9IFtfdW5peGRsbF9nZXRub2RlLCBfaWZjb25maWdfZ2V0bm9kZSwgX2FycF9nZXRub2RlLAotICAgICAgICAgICAgICAgICAgIF9sYW5zY2FuX2dldG5vZGUsIF9uZXRzdGF0X2dldG5vZGVdCisgICAgICAgIGdldHRlcnMgPSBbX3VuaXhkbGxfZ2V0bm9kZSwgX2lmY29uZmlnX2dldG5vZGUsIF9pcF9nZXRub2RlLAorICAgICAgICAgICAgICAgICAgIF9hcnBfZ2V0bm9kZSwgX2xhbnNjYW5fZ2V0bm9kZSwgX25ldHN0YXRfZ2V0bm9kZV0KIAogICAgIGZvciBnZXR0ZXIgaW4gZ2V0dGVycyArIFtfcmFuZG9tX2dldG5vZGVdOgogICAgICAgICB0cnk6CkBAIC01NzYsNyArNTgxLDcgQEAKICAgICBfbGFzdF90aW1lc3RhbXAgPSB0aW1lc3RhbXAKICAgICBpZiBjbG9ja19zZXEgaXMgTm9uZToKICAgICAgICAgaW1wb3J0IHJhbmRvbQotICAgICAgICBjbG9ja19zZXEgPSByYW5kb20ucmFuZHJhbmdlKDE8PDE0KSAjIGluc3RlYWQgb2Ygc3RhYmxlIHN0b3JhZ2UKKyAgICAgICAgY2xvY2tfc2VxID0gcmFuZG9tLmdldHJhbmRiaXRzKDE0KSAjIGluc3RlYWQgb2Ygc3RhYmxlIHN0b3JhZ2UKICAgICB0aW1lX2xvdyA9IHRpbWVzdGFtcCAmIDB4ZmZmZmZmZmYKICAgICB0aW1lX21pZCA9ICh0aW1lc3RhbXAgPj4gMzIpICYgMHhmZmZmCiAgICAgdGltZV9oaV92ZXJzaW9uID0gKHRpbWVzdGFtcCA+PiA0OCkgJiAweDBmZmYKQEAgLTU5NSwyMSArNjAwLDcgQEAKIAogZGVmIHV1aWQ0KCk6CiAgICAgIiIiR2VuZXJhdGUgYSByYW5kb20gVVVJRC4iIiIKLQotICAgICMgV2hlbiB0aGUgc3lzdGVtIHByb3ZpZGVzIGEgdmVyc2lvbi00IFVVSUQgZ2VuZXJhdG9yLCB1c2UgaXQuCi0gICAgaWYgX3V1aWRfZ2VuZXJhdGVfcmFuZG9tOgotICAgICAgICBfYnVmZmVyID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKDE2KQotICAgICAgICBfdXVpZF9nZW5lcmF0ZV9yYW5kb20oX2J1ZmZlcikKLSAgICAgICAgcmV0dXJuIFVVSUQoYnl0ZXM9Ynl0ZXNfKF9idWZmZXIucmF3KSkKLQotICAgICMgT3RoZXJ3aXNlLCBnZXQgcmFuZG9tbmVzcyBmcm9tIHVyYW5kb20gb3IgdGhlICdyYW5kb20nIG1vZHVsZS4KLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBvcwotICAgICAgICByZXR1cm4gVVVJRChieXRlcz1vcy51cmFuZG9tKDE2KSwgdmVyc2lvbj00KQotICAgIGV4Y2VwdDoKLSAgICAgICAgaW1wb3J0IHJhbmRvbQotICAgICAgICBieXRlcyA9IGJ5dGVzXyhyYW5kb20ucmFuZHJhbmdlKDI1NikgZm9yIGkgaW4gcmFuZ2UoMTYpKQotICAgICAgICByZXR1cm4gVVVJRChieXRlcz1ieXRlcywgdmVyc2lvbj00KQorICAgIHJldHVybiBVVUlEKGJ5dGVzPW9zLnVyYW5kb20oMTYpLCB2ZXJzaW9uPTQpCiAKIGRlZiB1dWlkNShuYW1lc3BhY2UsIG5hbWUpOgogICAgICIiIkdlbmVyYXRlIGEgVVVJRCBmcm9tIHRoZSBTSEEtMSBoYXNoIG9mIGEgbmFtZXNwYWNlIFVVSUQgYW5kIGEgbmFtZS4iIiIKZGlmZiAtLWdpdCBhL0xpYi92ZW52L19faW5pdF9fLnB5IGIvTGliL3ZlbnYvX19pbml0X18ucHkKaW5kZXggM2Q2MDZlZi4uNzQyNDVhYiAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvX19pbml0X18ucHkKKysrIGIvTGliL3ZlbnYvX19pbml0X18ucHkKQEAgLTE5LDkgKzE5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIEdpdmUgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgYWNjZXNzIHRvIHRoZSBzeXN0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgIHNpdGUtcGFja2FnZXMgZGlyLgogICAtLXN5bWxpbmtzICAgICAgICAgICAgQXR0ZW1wdCB0byBzeW1saW5rIHJhdGhlciB0aGFuIGNvcHkuCi0gIC0tY2xlYXIgICAgICAgICAgICAgICBEZWxldGUgdGhlIGVudmlyb25tZW50IGRpcmVjdG9yeSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLCBhbiBlcnJvciBpcwotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkLgorICAtLWNsZWFyICAgICAgICAgICAgICAgRGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IGlmIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5IGV4aXN0cywgYmVmb3JlIGVudmlyb25tZW50IGNyZWF0aW9uLgogICAtLXVwZ3JhZGUgICAgICAgICAgICAgVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uIGhhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLgogICAtLXdpdGhvdXQtcGlwICAgICAgICAgU2tpcHMgaW5zdGFsbGluZyBvciB1cGdyYWRpbmcgcGlwIGluIHRoZSB2aXJ0dWFsCkBAIC01Miw5ICs1MSw4IEBACiAKICAgICA6cGFyYW0gc3lzdGVtX3NpdGVfcGFja2FnZXM6IElmIFRydWUsIHRoZSBzeXN0ZW0gKGdsb2JhbCkgc2l0ZS1wYWNrYWdlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyIGlzIGF2YWlsYWJsZSB0byBjcmVhdGVkIGVudmlyb25tZW50cy4KLSAgICA6cGFyYW0gY2xlYXI6IElmIFRydWUgYW5kIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGV4aXN0cywgaXQgaXMgZGVsZXRlZC4KLSAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgaWYgdGhlIHRhcmdldCBkaXJlY3RvcnkgZXhpc3RzLCBhbiBlcnJvciBpcwotICAgICAgICAgICAgICAgICAgcmFpc2VkLgorICAgIDpwYXJhbSBjbGVhcjogSWYgVHJ1ZSwgZGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IGlmCisgICAgICAgICAgICAgICAgICBpdCBhbHJlYWR5IGV4aXN0cywgYmVmb3JlIGVudmlyb25tZW50IGNyZWF0aW9uLgogICAgIDpwYXJhbSBzeW1saW5rczogSWYgVHJ1ZSwgYXR0ZW1wdCB0byBzeW1saW5rIHJhdGhlciB0aGFuIGNvcHkgZmlsZXMgaW50bwogICAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBlbnZpcm9ubWVudC4KICAgICA6cGFyYW0gdXBncmFkZTogSWYgVHJ1ZSwgdXBncmFkZSBhbiBleGlzdGluZyB2aXJ0dWFsIGVudmlyb25tZW50LgpAQCAtMzYxLDkgKzM1OSw4IEBACiAgICAgOnBhcmFtIGVudl9kaXI6IFRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIGNyZWF0ZSBhbiBlbnZpcm9ubWVudCBpbi4KICAgICA6cGFyYW0gc3lzdGVtX3NpdGVfcGFja2FnZXM6IElmIFRydWUsIHRoZSBzeXN0ZW0gKGdsb2JhbCkgc2l0ZS1wYWNrYWdlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyIGlzIGF2YWlsYWJsZSB0byB0aGUgZW52aXJvbm1lbnQuCi0gICAgOnBhcmFtIGNsZWFyOiBJZiBUcnVlIGFuZCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMsIGl0IGlzIGRlbGV0ZWQuCi0gICAgICAgICAgICAgICAgICBPdGhlcndpc2UsIGlmIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGV4aXN0cywgYW4gZXJyb3IgaXMKLSAgICAgICAgICAgICAgICAgIHJhaXNlZC4KKyAgICA6cGFyYW0gY2xlYXI6IElmIFRydWUsIGRlbGV0ZSB0aGUgY29udGVudHMgb2YgdGhlIGVudmlyb25tZW50IGRpcmVjdG9yeSBpZgorICAgICAgICAgICAgICAgICAgaXQgYWxyZWFkeSBleGlzdHMsIGJlZm9yZSBlbnZpcm9ubWVudCBjcmVhdGlvbi4KICAgICA6cGFyYW0gc3ltbGlua3M6IElmIFRydWUsIGF0dGVtcHQgdG8gc3ltbGluayByYXRoZXIgdGhhbiBjb3B5IGZpbGVzIGludG8KICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCiAgICAgOnBhcmFtIHdpdGhfcGlwOiBJZiBUcnVlLCBlbnN1cmUgcGlwIGlzIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbApkaWZmIC0tZ2l0IGEvTGliL3dhcm5pbmdzLnB5IGIvTGliL3dhcm5pbmdzLnB5CmluZGV4IDcwZDA4N2UuLmM2NjMxZmMgMTAwNjQ0Ci0tLSBhL0xpYi93YXJuaW5ncy5weQorKysgYi9MaWIvd2FybmluZ3MucHkKQEAgLTIxLDkgKzIxLDE1IEBACiAKIGRlZiBmb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lPU5vbmUpOgogICAgICIiIkZ1bmN0aW9uIHRvIGZvcm1hdCBhIHdhcm5pbmcgdGhlIHN0YW5kYXJkIHdheS4iIiIKLSAgICBpbXBvcnQgbGluZWNhY2hlCiAgICAgcyA9ICAiJXM6JXM6ICVzOiAlc1xuIiAlIChmaWxlbmFtZSwgbGluZW5vLCBjYXRlZ29yeS5fX25hbWVfXywgbWVzc2FnZSkKLSAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubykgaWYgbGluZSBpcyBOb25lIGVsc2UgbGluZQorICAgIGlmIGxpbmUgaXMgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGxpbmVjYWNoZQorICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAjIFdoZW4gYSB3YXJuaW5nIGlzIGxvZ2dlZCBkdXJpbmcgUHl0aG9uIHNodXRkb3duLCBsaW5lY2FjaGUKKyAgICAgICAgICAgICMgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvbid0IHdvcmsgYW55bW9yZQorICAgICAgICAgICAgbGluZSA9IE5vbmUKICAgICBpZiBsaW5lOgogICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgIHMgKz0gIiAgJXNcbiIgJSBsaW5lCkBAIC01MCwxMyArNTYsOCBAQAogICAgIGFzc2VydCBpc2luc3RhbmNlKG1vZHVsZSwgc3RyKSwgIm1vZHVsZSBtdXN0IGJlIGEgc3RyaW5nIgogICAgIGFzc2VydCBpc2luc3RhbmNlKGxpbmVubywgaW50KSBhbmQgbGluZW5vID49IDAsIFwKICAgICAgICAgICAgImxpbmVubyBtdXN0IGJlIGFuIGludCA+PSAwIgotICAgIGl0ZW0gPSAoYWN0aW9uLCByZS5jb21waWxlKG1lc3NhZ2UsIHJlLkkpLCBjYXRlZ29yeSwKLSAgICAgICAgICAgIHJlLmNvbXBpbGUobW9kdWxlKSwgbGluZW5vKQotICAgIGlmIGFwcGVuZDoKLSAgICAgICAgZmlsdGVycy5hcHBlbmQoaXRlbSkKLSAgICBlbHNlOgotICAgICAgICBmaWx0ZXJzLmluc2VydCgwLCBpdGVtKQotICAgIF9maWx0ZXJzX211dGF0ZWQoKQorICAgIF9hZGRfZmlsdGVyKGFjdGlvbiwgcmUuY29tcGlsZShtZXNzYWdlLCByZS5JKSwgY2F0ZWdvcnksCisgICAgICAgICAgICByZS5jb21waWxlKG1vZHVsZSksIGxpbmVubywgYXBwZW5kPWFwcGVuZCkKIAogZGVmIHNpbXBsZWZpbHRlcihhY3Rpb24sIGNhdGVnb3J5PVdhcm5pbmcsIGxpbmVubz0wLCBhcHBlbmQ9RmFsc2UpOgogICAgICIiIkluc2VydCBhIHNpbXBsZSBlbnRyeSBpbnRvIHRoZSBsaXN0IG9mIHdhcm5pbmdzIGZpbHRlcnMgKGF0IHRoZSBmcm9udCkuCkBAIC03MiwxMSArNzMsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAib25jZSIpLCAiaW52YWxpZCBhY3Rpb246ICVyIiAlIChhY3Rpb24sKQogICAgIGFzc2VydCBpc2luc3RhbmNlKGxpbmVubywgaW50KSBhbmQgbGluZW5vID49IDAsIFwKICAgICAgICAgICAgImxpbmVubyBtdXN0IGJlIGFuIGludCA+PSAwIgotICAgIGl0ZW0gPSAoYWN0aW9uLCBOb25lLCBjYXRlZ29yeSwgTm9uZSwgbGluZW5vKQotICAgIGlmIGFwcGVuZDoKLSAgICAgICAgZmlsdGVycy5hcHBlbmQoaXRlbSkKLSAgICBlbHNlOgorICAgIF9hZGRfZmlsdGVyKGFjdGlvbiwgTm9uZSwgY2F0ZWdvcnksIE5vbmUsIGxpbmVubywgYXBwZW5kPWFwcGVuZCkKKworZGVmIF9hZGRfZmlsdGVyKCppdGVtLCBhcHBlbmQpOgorICAgICMgUmVtb3ZlIHBvc3NpYmxlIGR1cGxpY2F0ZSBmaWx0ZXJzLCBzbyBuZXcgb25lIHdpbGwgYmUgcGxhY2VkCisgICAgIyBpbiBjb3JyZWN0IHBsYWNlLiBJZiBhcHBlbmQ9VHJ1ZSBhbmQgZHVwbGljYXRlIGV4aXN0cywgZG8gbm90aGluZy4KKyAgICBpZiBub3QgYXBwZW5kOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWx0ZXJzLnJlbW92ZShpdGVtKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmlsdGVycy5pbnNlcnQoMCwgaXRlbSkKKyAgICBlbHNlOgorICAgICAgICBpZiBpdGVtIG5vdCBpbiBmaWx0ZXJzOgorICAgICAgICAgICAgZmlsdGVycy5hcHBlbmQoaXRlbSkKICAgICBfZmlsdGVyc19tdXRhdGVkKCkKIAogZGVmIHJlc2V0d2FybmluZ3MoKToKQEAgLTE2MCw2ICsxNzAsMjAgQEAKICAgICByZXR1cm4gY2F0CiAKIAorZGVmIF9pc19pbnRlcm5hbF9mcmFtZShmcmFtZSk6CisgICAgIiIiU2lnbmFsIHdoZXRoZXIgdGhlIGZyYW1lIGlzIGFuIGludGVybmFsIENQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsLiIiIgorICAgIGZpbGVuYW1lID0gZnJhbWUuZl9jb2RlLmNvX2ZpbGVuYW1lCisgICAgcmV0dXJuICdpbXBvcnRsaWInIGluIGZpbGVuYW1lIGFuZCAnX2Jvb3RzdHJhcCcgaW4gZmlsZW5hbWUKKworCitkZWYgX25leHRfZXh0ZXJuYWxfZnJhbWUoZnJhbWUpOgorICAgICIiIkZpbmQgdGhlIG5leHQgZnJhbWUgdGhhdCBkb2Vzbid0IGludm9sdmUgQ1B5dGhvbiBpbnRlcm5hbHMuIiIiCisgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICB3aGlsZSBmcmFtZSBpcyBub3QgTm9uZSBhbmQgX2lzX2ludGVybmFsX2ZyYW1lKGZyYW1lKToKKyAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICByZXR1cm4gZnJhbWUKKworCiAjIENvZGUgdHlwaWNhbGx5IHJlcGxhY2VkIGJ5IF93YXJuaW5ncwogZGVmIHdhcm4obWVzc2FnZSwgY2F0ZWdvcnk9Tm9uZSwgc3RhY2tsZXZlbD0xKToKICAgICAiIiJJc3N1ZSBhIHdhcm5pbmcsIG9yIG1heWJlIGlnbm9yZSBpdCBvciByYWlzZSBhbiBleGNlcHRpb24uIiIiCkBAIC0xNjksMTYgKzE5MywyOCBAQAogICAgICMgQ2hlY2sgY2F0ZWdvcnkgYXJndW1lbnQKICAgICBpZiBjYXRlZ29yeSBpcyBOb25lOgogICAgICAgICBjYXRlZ29yeSA9IFVzZXJXYXJuaW5nCi0gICAgYXNzZXJ0IGlzc3ViY2xhc3MoY2F0ZWdvcnksIFdhcm5pbmcpCisgICAgaWYgbm90IChpc2luc3RhbmNlKGNhdGVnb3J5LCB0eXBlKSBhbmQgaXNzdWJjbGFzcyhjYXRlZ29yeSwgV2FybmluZykpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNhdGVnb3J5IG11c3QgYmUgYSBXYXJuaW5nIHN1YmNsYXNzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAibm90ICd7OnN9JyIuZm9ybWF0KHR5cGUoY2F0ZWdvcnkpLl9fbmFtZV9fKSkKICAgICAjIEdldCBjb250ZXh0IGluZm9ybWF0aW9uCiAgICAgdHJ5OgotICAgICAgICBjYWxsZXIgPSBzeXMuX2dldGZyYW1lKHN0YWNrbGV2ZWwpCisgICAgICAgIGlmIHN0YWNrbGV2ZWwgPD0gMSBvciBfaXNfaW50ZXJuYWxfZnJhbWUoc3lzLl9nZXRmcmFtZSgxKSk6CisgICAgICAgICAgICAjIElmIGZyYW1lIGlzIHRvbyBzbWFsbCB0byBjYXJlIG9yIGlmIHRoZSB3YXJuaW5nIG9yaWdpbmF0ZWQgaW4KKyAgICAgICAgICAgICMgaW50ZXJuYWwgY29kZSwgdGhlbiBkbyBub3QgdHJ5IHRvIGhpZGUgYW55IGZyYW1lcy4KKyAgICAgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZShzdGFja2xldmVsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKDEpCisgICAgICAgICAgICAjIExvb2sgZm9yIG9uZSBmcmFtZSBsZXNzIHNpbmNlIHRoZSBhYm92ZSBsaW5lIHN0YXJ0cyB1cyBvZmYuCisgICAgICAgICAgICBmb3IgeCBpbiByYW5nZShzdGFja2xldmVsLTEpOgorICAgICAgICAgICAgICAgIGZyYW1lID0gX25leHRfZXh0ZXJuYWxfZnJhbWUoZnJhbWUpCisgICAgICAgICAgICAgICAgaWYgZnJhbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICBnbG9iYWxzID0gc3lzLl9fZGljdF9fCiAgICAgICAgIGxpbmVubyA9IDEKICAgICBlbHNlOgotICAgICAgICBnbG9iYWxzID0gY2FsbGVyLmZfZ2xvYmFscwotICAgICAgICBsaW5lbm8gPSBjYWxsZXIuZl9saW5lbm8KKyAgICAgICAgZ2xvYmFscyA9IGZyYW1lLmZfZ2xvYmFscworICAgICAgICBsaW5lbm8gPSBmcmFtZS5mX2xpbmVubwogICAgIGlmICdfX25hbWVfXycgaW4gZ2xvYmFsczoKICAgICAgICAgbW9kdWxlID0gZ2xvYmFsc1snX19uYW1lX18nXQogICAgIGVsc2U6CkBAIC0xODYsNyArMjIyLDcgQEAKICAgICBmaWxlbmFtZSA9IGdsb2JhbHMuZ2V0KCdfX2ZpbGVfXycpCiAgICAgaWYgZmlsZW5hbWU6CiAgICAgICAgIGZubCA9IGZpbGVuYW1lLmxvd2VyKCkKLSAgICAgICAgaWYgZm5sLmVuZHN3aXRoKCgiLnB5YyIsICIucHlvIikpOgorICAgICAgICBpZiBmbmwuZW5kc3dpdGgoIi5weWMiKToKICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi0xXQogICAgIGVsc2U6CiAgICAgICAgIGlmIG1vZHVsZSA9PSAiX19tYWluX18iOgpAQCAtMzcyLDcgKzQwOCw2IEBACiAgICAgZGVmYXVsdGFjdGlvbiA9IF9kZWZhdWx0YWN0aW9uCiAgICAgb25jZXJlZ2lzdHJ5ID0gX29uY2VyZWdpc3RyeQogICAgIF93YXJuaW5nc19kZWZhdWx0cyA9IFRydWUKLQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGZpbHRlcnMgPSBbXQogICAgIGRlZmF1bHRhY3Rpb24gPSAiZGVmYXVsdCIKZGlmZiAtLWdpdCBhL0xpYi93ZWFrcmVmLnB5IGIvTGliL3dlYWtyZWYucHkKaW5kZXggNWQwOTQ5Ny4uMjk2OGZiOSAxMDA2NDQKLS0tIGEvTGliL3dlYWtyZWYucHkKKysrIGIvTGliL3dlYWtyZWYucHkKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICByZXR1cm4gbyBpcyBub3QgTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjxXZWFrVmFsdWVEaWN0aW9uYXJ5IGF0ICVzPiIgJSBpZChzZWxmKQorICAgICAgICByZXR1cm4gIjwlcyBhdCAlI3g+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgaWQoc2VsZikpCiAKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CkBAIC0zNzIsNyArMzcyLDcgQEAKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpIC0gbGVuKHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHMpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPFdlYWtLZXlEaWN0aW9uYXJ5IGF0ICVzPiIgJSBpZChzZWxmKQorICAgICAgICByZXR1cm4gIjwlcyBhdCAlI3g+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgaWQoc2VsZikpCiAKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CiAgICAgICAgIHNlbGYuZGF0YVtyZWYoa2V5LCBzZWxmLl9yZW1vdmUpXSA9IHZhbHVlCmRpZmYgLS1naXQgYS9MaWIvd3NnaXJlZi9oYW5kbGVycy5weSBiL0xpYi93c2dpcmVmL2hhbmRsZXJzLnB5CmluZGV4IDYzZDU5OTMuLmY0MzAwYjggMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL2hhbmRsZXJzLnB5CisrKyBiL0xpYi93c2dpcmVmL2hhbmRsZXJzLnB5CkBAIC0yMjYsNyArMjI2LDcgQEAKICAgICAgICAgc2VsZi5oZWFkZXJzID0gc2VsZi5oZWFkZXJzX2NsYXNzKGhlYWRlcnMpCiAgICAgICAgIHN0YXR1cyA9IHNlbGYuX2NvbnZlcnRfc3RyaW5nX3R5cGUoc3RhdHVzLCAiU3RhdHVzIikKICAgICAgICAgYXNzZXJ0IGxlbihzdGF0dXMpPj00LCJTdGF0dXMgbXVzdCBiZSBhdCBsZWFzdCA0IGNoYXJhY3RlcnMiCi0gICAgICAgIGFzc2VydCBpbnQoc3RhdHVzWzozXSksIlN0YXR1cyBtZXNzYWdlIG11c3QgYmVnaW4gdy8zLWRpZ2l0IGNvZGUiCisgICAgICAgIGFzc2VydCBzdGF0dXNbOjNdLmlzZGlnaXQoKSwgIlN0YXR1cyBtZXNzYWdlIG11c3QgYmVnaW4gdy8zLWRpZ2l0IGNvZGUiCiAgICAgICAgIGFzc2VydCBzdGF0dXNbM109PSIgIiwgIlN0YXR1cyBtZXNzYWdlIG11c3QgaGF2ZSBhIHNwYWNlIGFmdGVyIGNvZGUiCiAKICAgICAgICAgaWYgX19kZWJ1Z19fOgpAQCAtNDUwLDcgKzQ1MCwxNyBAQAogICAgICAgICBzZWxmLmVudmlyb24udXBkYXRlKHNlbGYuYmFzZV9lbnYpCiAKICAgICBkZWYgX3dyaXRlKHNlbGYsZGF0YSk6Ci0gICAgICAgIHNlbGYuc3Rkb3V0LndyaXRlKGRhdGEpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuc3Rkb3V0LndyaXRlKGRhdGEpCisgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lIG9yIHJlc3VsdCA9PSBsZW4oZGF0YSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgorICAgICAgICB3YXJuKCJTaW1wbGVIYW5kbGVyLnN0ZG91dC53cml0ZSgpIHNob3VsZCBub3QgZG8gcGFydGlhbCB3cml0ZXMiLAorICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbcmVzdWx0Ol0KKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnN0ZG91dC53cml0ZShkYXRhKQogCiAgICAgZGVmIF9mbHVzaChzZWxmKToKICAgICAgICAgc2VsZi5zdGRvdXQuZmx1c2goKQpkaWZmIC0tZ2l0IGEvTGliL3dzZ2lyZWYvaGVhZGVycy5weSBiL0xpYi93c2dpcmVmL2hlYWRlcnMucHkKaW5kZXggZDkzOTYyOC4uZmFiODUxYyAxMDA2NDQKLS0tIGEvTGliL3dzZ2lyZWYvaGVhZGVycy5weQorKysgYi9MaWIvd3NnaXJlZi9oZWFkZXJzLnB5CkBAIC0yNiwxMCArMjYsMTAgQEAKIAogCiBjbGFzcyBIZWFkZXJzOgotCiAgICAgIiIiTWFuYWdlIGEgY29sbGVjdGlvbiBvZiBIVFRQIHJlc3BvbnNlIGhlYWRlcnMiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLGhlYWRlcnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICBoZWFkZXJzID0gaGVhZGVycyBpZiBoZWFkZXJzIGlzIG5vdCBOb25lIGVsc2UgW10KICAgICAgICAgaWYgdHlwZShoZWFkZXJzKSBpcyBub3QgbGlzdDoKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiSGVhZGVycyBtdXN0IGJlIGEgbGlzdCBvZiBuYW1lL3ZhbHVlIHR1cGxlcyIpCiAgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBoZWFkZXJzCkBAIC02OSw3ICs2OSw3IEBACiAgICAgICAgIFJldHVybiBOb25lIGlmIHRoZSBoZWFkZXIgaXMgbWlzc2luZyBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXhjZXB0aW9uLgogCiAgICAgICAgIE5vdGUgdGhhdCBpZiB0aGUgaGVhZGVyIGFwcGVhcmVkIG11bHRpcGxlIHRpbWVzLCB0aGUgZmlyc3QgZXhhY3RseSB3aGljaAotICAgICAgICBvY2N1cnJhbmNlIGdldHMgcmV0dXJuZWQgaXMgdW5kZWZpbmVkLiAgVXNlIGdldGFsbCgpIHRvIGdldCBhbGwKKyAgICAgICAgb2NjdXJyZW5jZSBnZXRzIHJldHVybmVkIGlzIHVuZGVmaW5lZC4gIFVzZSBnZXRhbGwoKSB0byBnZXQgYWxsCiAgICAgICAgIHRoZSB2YWx1ZXMgbWF0Y2hpbmcgYSBoZWFkZXIgZmllbGQgbmFtZS4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmdldChuYW1lKQpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJzWzpdCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiSGVhZGVycyglcikiICUgc2VsZi5faGVhZGVycworICAgICAgICByZXR1cm4gIiVzKCVyKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX2hlYWRlcnMpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgIiIic3RyKCkgcmV0dXJucyB0aGUgZm9ybWF0dGVkIGhlYWRlcnMsIGNvbXBsZXRlIHdpdGggZW5kIGxpbmUsCmRpZmYgLS1naXQgYS9MaWIvd3NnaXJlZi9zaW1wbGVfc2VydmVyLnB5IGIvTGliL3dzZ2lyZWYvc2ltcGxlX3NlcnZlci5weQppbmRleCAzNzhiMzE2Li43ZmRkYmU4IDEwMDY0NAotLS0gYS9MaWIvd3NnaXJlZi9zaW1wbGVfc2VydmVyLnB5CisrKyBiL0xpYi93c2dpcmVmL3NpbXBsZV9zZXJ2ZXIucHkKQEAgLTExLDYgKzExLDcgQEAKICIiIgogCiBmcm9tIGh0dHAuc2VydmVyIGltcG9ydCBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLCBIVFRQU2VydmVyCitmcm9tIGlvIGltcG9ydCBCdWZmZXJlZFdyaXRlcgogaW1wb3J0IHN5cwogaW1wb3J0IHVybGxpYi5wYXJzZQogZnJvbSB3c2dpcmVmLmhhbmRsZXJzIGltcG9ydCBTaW1wbGVIYW5kbGVyCkBAIC04Miw3ICs4Myw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwYXRoLHF1ZXJ5ID0gc2VsZi5wYXRoLCcnCiAKLSAgICAgICAgZW52WydQQVRIX0lORk8nXSA9IHVybGxpYi5wYXJzZS51bnF1b3RlX3RvX2J5dGVzKHBhdGgpLmRlY29kZSgnaXNvLTg4NTktMScpCisgICAgICAgIGVudlsnUEFUSF9JTkZPJ10gPSB1cmxsaWIucGFyc2UudW5xdW90ZShwYXRoLCAnaXNvLTg4NTktMScpCiAgICAgICAgIGVudlsnUVVFUllfU1RSSU5HJ10gPSBxdWVyeQogCiAgICAgICAgIGhvc3QgPSBzZWxmLmFkZHJlc3Nfc3RyaW5nKCkKQEAgLTEyNiwxMSArMTI3LDE3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLnBhcnNlX3JlcXVlc3QoKTogIyBBbiBlcnJvciBjb2RlIGhhcyBiZWVuIHNlbnQsIGp1c3QgZXhpdAogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaGFuZGxlciA9IFNlcnZlckhhbmRsZXIoCi0gICAgICAgICAgICBzZWxmLnJmaWxlLCBzZWxmLndmaWxlLCBzZWxmLmdldF9zdGRlcnIoKSwgc2VsZi5nZXRfZW52aXJvbigpCi0gICAgICAgICkKLSAgICAgICAgaGFuZGxlci5yZXF1ZXN0X2hhbmRsZXIgPSBzZWxmICAgICAgIyBiYWNrcG9pbnRlciBmb3IgbG9nZ2luZwotICAgICAgICBoYW5kbGVyLnJ1bihzZWxmLnNlcnZlci5nZXRfYXBwKCkpCisgICAgICAgICMgQXZvaWQgcGFzc2luZyB0aGUgcmF3IGZpbGUgb2JqZWN0IHdmaWxlLCB3aGljaCBjYW4gZG8gcGFydGlhbAorICAgICAgICAjIHdyaXRlcyAoSXNzdWUgMjQyOTEpCisgICAgICAgIHN0ZG91dCA9IEJ1ZmZlcmVkV3JpdGVyKHNlbGYud2ZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhhbmRsZXIgPSBTZXJ2ZXJIYW5kbGVyKAorICAgICAgICAgICAgICAgIHNlbGYucmZpbGUsIHN0ZG91dCwgc2VsZi5nZXRfc3RkZXJyKCksIHNlbGYuZ2V0X2Vudmlyb24oKQorICAgICAgICAgICAgKQorICAgICAgICAgICAgaGFuZGxlci5yZXF1ZXN0X2hhbmRsZXIgPSBzZWxmICAgICAgIyBiYWNrcG9pbnRlciBmb3IgbG9nZ2luZworICAgICAgICAgICAgaGFuZGxlci5ydW4oc2VsZi5zZXJ2ZXIuZ2V0X2FwcCgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3Rkb3V0LmRldGFjaCgpCiAKIAogCmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKaW5kZXggODk3NjE0NC4uMmJkODM1YiAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CisrKyBiL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQpAQCAtMTAsNyArMTAsNyBAQAogIyBtaW5pZG9tIERPTSBhbmQgY2FuJ3QgYmUgdXNlZCB3aXRoIG90aGVyIERPTSBpbXBsZW1lbnRhdGlvbnMuICBUaGlzCiAjIGlzIGR1ZSwgaW4gcGFydCwgdG8gYSBsYWNrIG9mIGFwcHJvcHJpYXRlIG1ldGhvZHMgaW4gdGhlIERPTSAodGhlcmUgaXMKICMgbm8gd2F5IHRvIGNyZWF0ZSBFbnRpdHkgYW5kIE5vdGF0aW9uIG5vZGVzIHZpYSB0aGUgRE9NIExldmVsIDIKLSMgaW50ZXJmYWNlKSwgYW5kIGZvciBwZXJmb3JtYW5jZS4gIFRoZSBsYXRlciBpcyB0aGUgY2F1c2Ugb2Ygc29tZSBmYWlybHkKKyMgaW50ZXJmYWNlKSwgYW5kIGZvciBwZXJmb3JtYW5jZS4gIFRoZSBsYXR0ZXIgaXMgdGhlIGNhdXNlIG9mIHNvbWUgZmFpcmx5CiAjIGNyeXB0aWMgY29kZS4KICMKICMgUGVyZm9ybWFuY2UgaGFja3M6CmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS9taW5pZG9tLnB5IGIvTGliL3htbC9kb20vbWluaWRvbS5weQppbmRleCBjMzc5YTMzLi5hNWQ4MTNmIDEwMDY0NAotLS0gYS9MaWIveG1sL2RvbS9taW5pZG9tLnB5CisrKyBiL0xpYi94bWwvZG9tL21pbmlkb20ucHkKQEAgLTU0NSw5ICs1NDUsNiBAQAogICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8IDAKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSAhPSAwCi0KICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgYXR0bmFtZV9vcl90dXBsZSk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXR0bmFtZV9vcl90dXBsZSwgdHVwbGUpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2F0dHJzTlNbYXR0bmFtZV9vcl90dXBsZV0KQEAgLTY0OCw5ICs2NDUsMTAgQEAKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5uYW1lc3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gIjxUeXBlSW5mbyAlciAoZnJvbSAlcik+IiAlIChzZWxmLm5hbWUsIHNlbGYubmFtZXNwYWNlKQorICAgICAgICAgICAgcmV0dXJuICI8JXMgJXIgKGZyb20gJXIpPiIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZXNwYWNlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICI8VHlwZUluZm8gJXI+IiAlIHNlbGYubmFtZQorICAgICAgICAgICAgcmV0dXJuICI8JXMgJXI+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5uYW1lKQogCiAgICAgZGVmIF9nZXRfbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQpkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20veG1sYnVpbGRlci5weSBiL0xpYi94bWwvZG9tL3htbGJ1aWxkZXIucHkKaW5kZXggZDc5ODYyNC4uNDQ0ZjBiMiAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20veG1sYnVpbGRlci5weQorKysgYi9MaWIveG1sL2RvbS94bWxidWlsZGVyLnB5CkBAIC0xLDYgKzEsNyBAQAogIiIiSW1wbGVtZW50YXRpb24gb2YgdGhlIERPTSBMZXZlbCAzICdMUy1Mb2FkJyBmZWF0dXJlLiIiIgogCiBpbXBvcnQgY29weQoraW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgeG1sLmRvbQogCiBmcm9tIHhtbC5kb20uTm9kZUZpbHRlciBpbXBvcnQgTm9kZUZpbHRlcgpAQCAtMzMxLDEzICszMzIsMzMgQEAKIGRlbCBOb2RlRmlsdGVyCiAKIAorY2xhc3MgX0FzeW5jRGVwcmVjYXRlZFByb3BlcnR5OgorICAgIGRlZiB3YXJuKHNlbGYsIGNscyk6CisgICAgICAgIGNsc25hbWUgPSBjbHMuX19uYW1lX18KKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICJ7Y2xzfS5hc3luYyBpcyBkZXByZWNhdGVkOyB1c2Uge2Nsc30uYXN5bmNfIi5mb3JtYXQoY2xzPWNsc25hbWUpLAorICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgZGVmIF9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIGNscyk6CisgICAgICAgIHNlbGYud2FybihjbHMpCisgICAgICAgIGlmIGluc3RhbmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmFzeW5jXworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSk6CisgICAgICAgIHNlbGYud2Fybih0eXBlKGluc3RhbmNlKSkKKyAgICAgICAgc2V0YXR0cihpbnN0YW5jZSwgJ2FzeW5jXycsIHZhbHVlKQorCisKIGNsYXNzIERvY3VtZW50TFM6CiAgICAgIiIiTWl4aW4gdG8gY3JlYXRlIGRvY3VtZW50cyB0aGF0IGNvbmZvcm0gdG8gdGhlIGxvYWQvc2F2ZSBzcGVjLiIiIgogCi0gICAgYXN5bmMgPSBGYWxzZQorICAgIGFzeW5jID0gX0FzeW5jRGVwcmVjYXRlZFByb3BlcnR5KCkKKyAgICBhc3luY18gPSBGYWxzZQogCiAgICAgZGVmIF9nZXRfYXN5bmMoc2VsZik6CiAgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgZGVmIF9zZXRfYXN5bmMoc2VsZiwgYXN5bmMpOgogICAgICAgICBpZiBhc3luYzoKICAgICAgICAgICAgIHJhaXNlIHhtbC5kb20uTm90U3VwcG9ydGVkRXJyKApAQCAtMzYzLDYgKzM4NCw5IEBACiAgICAgICAgIHJldHVybiBzbm9kZS50b3htbCgpCiAKIAorZGVsIF9Bc3luY0RlcHJlY2F0ZWRQcm9wZXJ0eQorCisKIGNsYXNzIERPTUltcGxlbWVudGF0aW9uTFM6CiAgICAgTU9ERV9TWU5DSFJPTk9VUyA9IDEKICAgICBNT0RFX0FTWU5DSFJPTk9VUyA9IDIKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CmluZGV4IGQ5MTRkZGIuLjVkZTQyMzIgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQpAQCAtMTE0LDcgKzExNCwxMCBAQAogICAgIHJldHVybiBzZWxlY3QKIAogZGVmIHByZXBhcmVfZGVzY2VuZGFudChuZXh0LCB0b2tlbik6Ci0gICAgdG9rZW4gPSBuZXh0KCkKKyAgICB0cnk6CisgICAgICAgIHRva2VuID0gbmV4dCgpCisgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgIHJldHVybgogICAgIGlmIHRva2VuWzBdID09ICIqIjoKICAgICAgICAgdGFnID0gIioiCiAgICAgZWxpZiBub3QgdG9rZW5bMF06CkBAIC0xNDgsNyArMTUxLDEwIEBACiAgICAgc2lnbmF0dXJlID0gW10KICAgICBwcmVkaWNhdGUgPSBbXQogICAgIHdoaWxlIDE6Ci0gICAgICAgIHRva2VuID0gbmV4dCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRva2VuID0gbmV4dCgpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHRva2VuWzBdID09ICJdIjoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIHRva2VuWzBdIGFuZCB0b2tlblswXVs6MV0gaW4gIidcIiI6CkBAIC0yNjEsNyArMjY3LDEwIEBACiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJjYW5ub3QgdXNlIGFic29sdXRlIHBhdGggb24gZWxlbWVudCIpCiAgICAgICAgIG5leHQgPSBpdGVyKHhwYXRoX3Rva2VuaXplcihwYXRoLCBuYW1lc3BhY2VzKSkuX19uZXh0X18KLSAgICAgICAgdG9rZW4gPSBuZXh0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG9rZW4gPSBuZXh0KCkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZWN0b3IgPSBbXQogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgdHJ5OgpAQCAtMjg2LDEwICsyOTUsNyBAQAogIyBGaW5kIGZpcnN0IG1hdGNoaW5nIG9iamVjdC4KIAogZGVmIGZpbmQoZWxlbSwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBuZXh0KGl0ZXJmaW5kKGVsZW0sIHBhdGgsIG5hbWVzcGFjZXMpKQotICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBuZXh0KGl0ZXJmaW5kKGVsZW0sIHBhdGgsIG5hbWVzcGFjZXMpLCBOb25lKQogCiAjIwogIyBGaW5kIGFsbCBtYXRjaGluZyBvYmplY3RzLgpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKaW5kZXggNWEwOWIzNS4uNmQxYjBhYiAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBbXQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjxFbGVtZW50ICVzIGF0IDB4JXg+IiAlIChyZXByKHNlbGYudGFnKSwgaWQoc2VsZikpCisgICAgICAgIHJldHVybiAiPCVzICVyIGF0ICUjeD4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLnRhZywgaWQoc2VsZikpCiAKICAgICBkZWYgbWFrZWVsZW1lbnQoc2VsZiwgdGFnLCBhdHRyaWIpOgogICAgICAgICAiIiJDcmVhdGUgYSBuZXcgZWxlbWVudCB3aXRoIHRoZSBzYW1lIHR5cGUuCkBAIC00MjgsMTIgKzQyOCwxNCBAQAogICAgICAgICB0YWcgPSBzZWxmLnRhZwogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YWcsIHN0cikgYW5kIHRhZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBzZWxmLnRleHQ6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmLnRleHQKKyAgICAgICAgdCA9IHNlbGYudGV4dAorICAgICAgICBpZiB0OgorICAgICAgICAgICAgeWllbGQgdAogICAgICAgICBmb3IgZSBpbiBzZWxmOgogICAgICAgICAgICAgeWllbGQgZnJvbSBlLml0ZXJ0ZXh0KCkKLSAgICAgICAgICAgIGlmIGUudGFpbDoKLSAgICAgICAgICAgICAgICB5aWVsZCBlLnRhaWwKKyAgICAgICAgICAgIHQgPSBlLnRhaWwKKyAgICAgICAgICAgIGlmIHQ6CisgICAgICAgICAgICAgICAgeWllbGQgdAogCiAKIGRlZiBTdWJFbGVtZW50KHBhcmVudCwgdGFnLCBhdHRyaWI9e30sICoqZXh0cmEpOgpAQCAtNTA5LDcgKzUxMSw3IEBACiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnRleHQKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnPFFOYW1lICVyPicgJSAoc2VsZi50ZXh0LCkKKyAgICAgICAgcmV0dXJuICc8JXMgJXI+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi50ZXh0KQogICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi50ZXh0KQogICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgpAQCAtNTMyLDEwICs1MzQsNiBAQAogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBRTmFtZSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi50ZXh0ID09IG90aGVyLnRleHQKICAgICAgICAgcmV0dXJuIHNlbGYudGV4dCA9PSBvdGhlcgotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBRTmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi50ZXh0ICE9IG90aGVyLnRleHQKLSAgICAgICAgcmV0dXJuIHNlbGYudGV4dCAhPSBvdGhlcgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE0NTYsNyArMTQ1NCw3IEBACiBjbGFzcyBYTUxQYXJzZXI6CiAgICAgIiIiRWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhIGJhc2VkIG9uIHRoZSBleHBhdCBwYXJzZXIuCiAKLSAgICAqaHRtbCogYXJlIHByZWRlZmluZWQgSFRNTCBlbnRpdGllcyAobm90IHN1cHBvcnRlZCBjdXJyZW50bHkpLAorICAgICpodG1sKiBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzIChkZXByZWNhdGVkIGFuZCBub3Qgc3VwcG9ydGVkKSwKICAgICAqdGFyZ2V0KiBpcyBhbiBvcHRpb25hbCB0YXJnZXQgb2JqZWN0IHdoaWNoIGRlZmF1bHRzIHRvIGFuIGluc3RhbmNlIG9mIHRoZQogICAgIHN0YW5kYXJkIFRyZWVCdWlsZGVyIGNsYXNzLCAqZW5jb2RpbmcqIGlzIGFuIG9wdGlvbmFsIGVuY29kaW5nIHN0cmluZwogICAgIHdoaWNoIGlmIGdpdmVuLCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGU6CmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC9fX2luaXRfXy5weSBiL0xpYi94bWwvc2F4L19faW5pdF9fLnB5CmluZGV4IGIxNjFiMWYuLmVmNjdhZTYgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvc2F4L19faW5pdF9fLnB5CisrKyBiL0xpYi94bWwvc2F4L19faW5pdF9fLnB5CkBAIC0zMyw4ICszMyw3IEBACiAgICAgcGFyc2VyLnBhcnNlKHNvdXJjZSkKIAogZGVmIHBhcnNlU3RyaW5nKHN0cmluZywgaGFuZGxlciwgZXJyb3JIYW5kbGVyPUVycm9ySGFuZGxlcigpKToKLSAgICBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCi0KKyAgICBpbXBvcnQgaW8KICAgICBpZiBlcnJvckhhbmRsZXIgaXMgTm9uZToKICAgICAgICAgZXJyb3JIYW5kbGVyID0gRXJyb3JIYW5kbGVyKCkKICAgICBwYXJzZXIgPSBtYWtlX3BhcnNlcigpCkBAIC00Miw3ICs0MSwxMCBAQAogICAgIHBhcnNlci5zZXRFcnJvckhhbmRsZXIoZXJyb3JIYW5kbGVyKQogCiAgICAgaW5wc3JjID0gSW5wdXRTb3VyY2UoKQotICAgIGlucHNyYy5zZXRCeXRlU3RyZWFtKEJ5dGVzSU8oc3RyaW5nKSkKKyAgICBpZiBpc2luc3RhbmNlKHN0cmluZywgc3RyKToKKyAgICAgICAgaW5wc3JjLnNldENoYXJhY3RlclN0cmVhbShpby5TdHJpbmdJTyhzdHJpbmcpKQorICAgIGVsc2U6CisgICAgICAgIGlucHNyYy5zZXRCeXRlU3RyZWFtKGlvLkJ5dGVzSU8oc3RyaW5nKSkKICAgICBwYXJzZXIucGFyc2UoaW5wc3JjKQogCiAjIHRoaXMgaXMgdGhlIHBhcnNlciBsaXN0IHVzZWQgYnkgdGhlIG1ha2VfcGFyc2VyIGZ1bmN0aW9uIGlmIG5vCmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weSBiL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CmluZGV4IDNiNjM3MzcuLjk4YjVjYTkgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CisrKyBiL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CkBAIC0yMzIsOSArMjMyLDE0IEBACiAgICAgICAgICAgICAgICAgcGFyc2VyLkVycm9yQ29sdW1uTnVtYmVyID0gc2VsZi5fcGFyc2VyLkVycm9yQ29sdW1uTnVtYmVyCiAgICAgICAgICAgICAgICAgcGFyc2VyLkVycm9yTGluZU51bWJlciA9IHNlbGYuX3BhcnNlci5FcnJvckxpbmVOdW1iZXIKICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKLSAgICAgICAgICAgIGJzID0gc2VsZi5fc291cmNlLmdldEJ5dGVTdHJlYW0oKQotICAgICAgICAgICAgaWYgYnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgYnMuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9zb3VyY2UuZ2V0Q2hhcmFjdGVyU3RyZWFtKCkKKyAgICAgICAgICAgICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZmlsZSA9IHNlbGYuX3NvdXJjZS5nZXRCeXRlU3RyZWFtKCkKKyAgICAgICAgICAgICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKIAogICAgIGRlZiBfcmVzZXRfY29udF9oYW5kbGVyKHNlbGYpOgogICAgICAgICBzZWxmLl9wYXJzZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciA9IFwKZGlmZiAtLWdpdCBhL0xpYi94bWwvc2F4L3NheHV0aWxzLnB5IGIvTGliL3htbC9zYXgvc2F4dXRpbHMucHkKaW5kZXggMWQzZDBlYy4uYTY5YzdmNyAxMDA2NDQKLS0tIGEvTGliL3htbC9zYXgvc2F4dXRpbHMucHkKKysrIGIvTGliL3htbC9zYXgvc2F4dXRpbHMucHkKQEAgLTM0NSwxMSArMzQ1LDE0IEBACiAgICAgZWxpZiBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKICAgICAgICAgZiA9IHNvdXJjZQogICAgICAgICBzb3VyY2UgPSB4bWxyZWFkZXIuSW5wdXRTb3VyY2UoKQotICAgICAgICBzb3VyY2Uuc2V0Qnl0ZVN0cmVhbShmKQorICAgICAgICBpZiBpc2luc3RhbmNlKGYucmVhZCgwKSwgc3RyKToKKyAgICAgICAgICAgIHNvdXJjZS5zZXRDaGFyYWN0ZXJTdHJlYW0oZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvdXJjZS5zZXRCeXRlU3RyZWFtKGYpCiAgICAgICAgIGlmIGhhc2F0dHIoZiwgIm5hbWUiKSBhbmQgaXNpbnN0YW5jZShmLm5hbWUsIHN0cik6CiAgICAgICAgICAgICBzb3VyY2Uuc2V0U3lzdGVtSWQoZi5uYW1lKQogCi0gICAgaWYgc291cmNlLmdldEJ5dGVTdHJlYW0oKSBpcyBOb25lOgorICAgIGlmIHNvdXJjZS5nZXRDaGFyYWN0ZXJTdHJlYW0oKSBpcyBOb25lIGFuZCBzb3VyY2UuZ2V0Qnl0ZVN0cmVhbSgpIGlzIE5vbmU6CiAgICAgICAgIHN5c2lkID0gc291cmNlLmdldFN5c3RlbUlkKCkKICAgICAgICAgYmFzZWhlYWQgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5ub3JtcGF0aChiYXNlKSkKICAgICAgICAgc3lzaWRmaWxlbmFtZSA9IG9zLnBhdGguam9pbihiYXNlaGVhZCwgc3lzaWQpCmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC94bWxyZWFkZXIucHkgYi9MaWIveG1sL3NheC94bWxyZWFkZXIucHkKaW5kZXggN2VmNDk3Zi4uNzE2ZjIyOCAxMDA2NDQKLS0tIGEvTGliL3htbC9zYXgveG1scmVhZGVyLnB5CisrKyBiL0xpYi94bWwvc2F4L3htbHJlYWRlci5weQpAQCAtMTE3LDcgKzExNyw5IEBACiAgICAgICAgIHNvdXJjZSA9IHNheHV0aWxzLnByZXBhcmVfaW5wdXRfc291cmNlKHNvdXJjZSkKIAogICAgICAgICBzZWxmLnByZXBhcmVQYXJzZXIoc291cmNlKQotICAgICAgICBmaWxlID0gc291cmNlLmdldEJ5dGVTdHJlYW0oKQorICAgICAgICBmaWxlID0gc291cmNlLmdldENoYXJhY3RlclN0cmVhbSgpCisgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIGZpbGUgPSBzb3VyY2UuZ2V0Qnl0ZVN0cmVhbSgpCiAgICAgICAgIGJ1ZmZlciA9IGZpbGUucmVhZChzZWxmLl9idWZzaXplKQogICAgICAgICB3aGlsZSBidWZmZXI6CiAgICAgICAgICAgICBzZWxmLmZlZWQoYnVmZmVyKQpkaWZmIC0tZ2l0IGEvTGliL3htbHJwYy9jbGllbnQucHkgYi9MaWIveG1scnBjL2NsaWVudC5weQppbmRleCA5ZGU1MTExLi5iYmY5ZWU2IDEwMDY0NAotLS0gYS9MaWIveG1scnBjL2NsaWVudC5weQorKysgYi9MaWIveG1scnBjL2NsaWVudC5weQpAQCAtMjA4LDggKzIwOCw4IEBACiAgICAgICAgIHNlbGYuaGVhZGVycyA9IGhlYWRlcnMKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAoCi0gICAgICAgICAgICAiPFByb3RvY29sRXJyb3IgZm9yICVzOiAlcyAlcz4iICUKLSAgICAgICAgICAgIChzZWxmLnVybCwgc2VsZi5lcnJjb2RlLCBzZWxmLmVycm1zZykKKyAgICAgICAgICAgICI8JXMgZm9yICVzOiAlcyAlcz4iICUKKyAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi51cmwsIHNlbGYuZXJyY29kZSwgc2VsZi5lcnJtc2cpCiAgICAgICAgICAgICApCiAKICMjCkBAIC0yMzcsNyArMjM3LDggQEAKICAgICAgICAgc2VsZi5mYXVsdENvZGUgPSBmYXVsdENvZGUKICAgICAgICAgc2VsZi5mYXVsdFN0cmluZyA9IGZhdWx0U3RyaW5nCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjxGYXVsdCAlczogJXI+IiAlIChzZWxmLmZhdWx0Q29kZSwgc2VsZi5mYXVsdFN0cmluZykKKyAgICAgICAgcmV0dXJuICI8JXMgJXM6ICVyPiIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmF1bHRDb2RlLCBzZWxmLmZhdWx0U3RyaW5nKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFNwZWNpYWwgdmFsdWVzCkBAIC0zMzksMTAgKzM0MCw2IEBACiAgICAgICAgIHMsIG8gPSBzZWxmLm1ha2VfY29tcGFyYWJsZShvdGhlcikKICAgICAgICAgcmV0dXJuIHMgPT0gbwogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHMsIG8gPSBzZWxmLm1ha2VfY29tcGFyYWJsZShvdGhlcikKLSAgICAgICAgcmV0dXJuIHMgIT0gbwotCiAgICAgZGVmIHRpbWV0dXBsZShzZWxmKToKICAgICAgICAgcmV0dXJuIHRpbWUuc3RycHRpbWUoc2VsZi52YWx1ZSwgIiVZJW0lZFQlSDolTTolUyIpCiAKQEAgLTM1NSw3ICszNTIsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjxEYXRlVGltZSAlciBhdCAleD4iICUgKHNlbGYudmFsdWUsIGlkKHNlbGYpKQorICAgICAgICByZXR1cm4gIjwlcyAlciBhdCAlI3g+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi52YWx1ZSwgaWQoc2VsZikpCiAKICAgICBkZWYgZGVjb2RlKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLnZhbHVlID0gc3RyKGRhdGEpLnN0cmlwKCkKQEAgLTQwNiwxMSArNDAzLDYgQEAKICAgICAgICAgICAgIG90aGVyID0gb3RoZXIuZGF0YQogICAgICAgICByZXR1cm4gc2VsZi5kYXRhID09IG90aGVyCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQmluYXJ5KToKLSAgICAgICAgICAgIG90aGVyID0gb3RoZXIuZGF0YQotICAgICAgICByZXR1cm4gc2VsZi5kYXRhICE9IG90aGVyCi0KICAgICBkZWYgZGVjb2RlKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmRhdGEgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoZGF0YSkKIApAQCAtNjQ4LDYgKzY0MCw3IEBACiAgICAgICAgIHNlbGYuX3N0YWNrID0gW10KICAgICAgICAgc2VsZi5fbWFya3MgPSBbXQogICAgICAgICBzZWxmLl9kYXRhID0gW10KKyAgICAgICAgc2VsZi5fdmFsdWUgPSBGYWxzZQogICAgICAgICBzZWxmLl9tZXRob2RuYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9lbmNvZGluZyA9ICJ1dGYtOCIKICAgICAgICAgc2VsZi5hcHBlbmQgPSBzZWxmLl9zdGFjay5hcHBlbmQKQEAgLTY3Nyw2ICs2NzAsOCBAQAogICAgICAgICBpZiB0YWcgPT0gImFycmF5IiBvciB0YWcgPT0gInN0cnVjdCI6CiAgICAgICAgICAgICBzZWxmLl9tYXJrcy5hcHBlbmQobGVuKHNlbGYuX3N0YWNrKSkKICAgICAgICAgc2VsZi5fZGF0YSA9IFtdCisgICAgICAgIGlmIHNlbGYuX3ZhbHVlIGFuZCB0YWcgbm90IGluIHNlbGYuZGlzcGF0Y2g6CisgICAgICAgICAgICByYWlzZSBSZXNwb25zZUVycm9yKCJ1bmtub3duIHRhZyAlciIgJSB0YWcpCiAgICAgICAgIHNlbGYuX3ZhbHVlID0gKHRhZyA9PSAidmFsdWUiKQogCiAgICAgZGVmIGRhdGEoc2VsZiwgdGV4dCk6CkBAIC04NTIsNyArODQ3LDcgQEAKICAgICAgICAgc2VsZi5fX2NhbGxfbGlzdCA9IFtdCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPE11bHRpQ2FsbCBhdCAleD4iICUgaWQoc2VsZikKKyAgICAgICAgcmV0dXJuICI8JXMgYXQgJSN4PiIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGlkKHNlbGYpKQogCiAgICAgX19zdHJfXyA9IF9fcmVwcl9fCiAKQEAgLTk2Myw4ICs5NTgsNiBAQAogICAgICMgc3RhbmRhcmQgWE1MLVJQQyB3cmFwcGluZ3MKICAgICBpZiBtZXRob2RuYW1lOgogICAgICAgICAjIGEgbWV0aG9kIGNhbGwKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobWV0aG9kbmFtZSwgc3RyKToKLSAgICAgICAgICAgIG1ldGhvZG5hbWUgPSBtZXRob2RuYW1lLmVuY29kZShlbmNvZGluZykKICAgICAgICAgZGF0YSA9ICgKICAgICAgICAgICAgIHhtbGhlYWRlciwKICAgICAgICAgICAgICI8bWV0aG9kQ2FsbD5cbiIKQEAgLTEwMjMsMTIgKzEwMTYsOSBAQAogICAgIGlmIG5vdCBnemlwOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAgICAgZiA9IEJ5dGVzSU8oKQotICAgIGd6ZiA9IGd6aXAuR3ppcEZpbGUobW9kZT0id2IiLCBmaWxlb2JqPWYsIGNvbXByZXNzbGV2ZWw9MSkKLSAgICBnemYud3JpdGUoZGF0YSkKLSAgICBnemYuY2xvc2UoKQotICAgIGVuY29kZWQgPSBmLmdldHZhbHVlKCkKLSAgICBmLmNsb3NlKCkKLSAgICByZXR1cm4gZW5jb2RlZAorICAgIHdpdGggZ3ppcC5HemlwRmlsZShtb2RlPSJ3YiIsIGZpbGVvYmo9ZiwgY29tcHJlc3NsZXZlbD0xKSBhcyBnemY6CisgICAgICAgIGd6Zi53cml0ZShkYXRhKQorICAgIHJldHVybiBmLmdldHZhbHVlKCkKIAogIyMKICMgRGVjb2RlIGEgc3RyaW5nIHVzaW5nIHRoZSBnemlwIGNvbnRlbnQgZW5jb2Rpbmcgc3VjaCBhcyBzcGVjaWZpZWQgYnkgdGhlCkBAIC0xMDQ5LDE3ICsxMDM5LDE0IEBACiAgICAgIiIiCiAgICAgaWYgbm90IGd6aXA6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLSAgICBmID0gQnl0ZXNJTyhkYXRhKQotICAgIGd6ZiA9IGd6aXAuR3ppcEZpbGUobW9kZT0icmIiLCBmaWxlb2JqPWYpCi0gICAgdHJ5OgotICAgICAgICBpZiBtYXhfZGVjb2RlIDwgMDogIyBubyBsaW1pdAotICAgICAgICAgICAgZGVjb2RlZCA9IGd6Zi5yZWFkKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRlY29kZWQgPSBnemYucmVhZChtYXhfZGVjb2RlICsgMSkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBkYXRhIikKLSAgICBmLmNsb3NlKCkKLSAgICBnemYuY2xvc2UoKQorICAgIHdpdGggZ3ppcC5HemlwRmlsZShtb2RlPSJyYiIsIGZpbGVvYmo9Qnl0ZXNJTyhkYXRhKSkgYXMgZ3pmOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBtYXhfZGVjb2RlIDwgMDogIyBubyBsaW1pdAorICAgICAgICAgICAgICAgIGRlY29kZWQgPSBnemYucmVhZCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlY29kZWQgPSBnemYucmVhZChtYXhfZGVjb2RlICsgMSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGRhdGEiKQogICAgIGlmIG1heF9kZWNvZGUgPj0gMCBhbmQgbGVuKGRlY29kZWQpID4gbWF4X2RlY29kZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWF4IGd6aXBwZWQgcGF5bG9hZCBsZW5ndGggZXhjZWVkZWQiKQogICAgIHJldHVybiBkZWNvZGVkCkBAIC0xMTQ1LDEzICsxMTMyLDEzIEBACiAgICAgICAgIGZvciBpIGluICgwLCAxKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zaW5nbGVfcmVxdWVzdChob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2UpCisgICAgICAgICAgICBleGNlcHQgaHR0cC5jbGllbnQuUmVtb3RlRGlzY29ubmVjdGVkOgorICAgICAgICAgICAgICAgIGlmIGk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGkgb3IgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVTRVQsIGVycm5vLkVDT05OQUJPUlRFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FUElQRSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgaHR0cC5jbGllbnQuQmFkU3RhdHVzTGluZTogI2Nsb3NlIGFmdGVyIHdlIHNlbnQgcmVxdWVzdAotICAgICAgICAgICAgICAgIGlmIGk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgc2luZ2xlX3JlcXVlc3Qoc2VsZiwgaG9zdCwgaGFuZGxlciwgcmVxdWVzdF9ib2R5LCB2ZXJib3NlPUZhbHNlKToKICAgICAgICAgIyBpc3N1ZSBYTUwtUlBDIHJlcXVlc3QKQEAgLTE0MzYsNyArMTQyMyw3IEBACiAgICAgICAgICMgY2FsbCBhIG1ldGhvZCBvbiB0aGUgcmVtb3RlIHNlcnZlcgogCiAgICAgICAgIHJlcXVlc3QgPSBkdW1wcyhwYXJhbXMsIG1ldGhvZG5hbWUsIGVuY29kaW5nPXNlbGYuX19lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X25vbmU9c2VsZi5fX2FsbG93X25vbmUpLmVuY29kZShzZWxmLl9fZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19ub25lPXNlbGYuX19hbGxvd19ub25lKS5lbmNvZGUoc2VsZi5fX2VuY29kaW5nLCAneG1sY2hhcnJlZnJlcGxhY2UnKQogCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5fX3RyYW5zcG9ydC5yZXF1ZXN0KAogICAgICAgICAgICAgc2VsZi5fX2hvc3QsCkBAIC0xNDUyLDggKzE0MzksOCBAQAogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gKAotICAgICAgICAgICAgIjxTZXJ2ZXJQcm94eSBmb3IgJXMlcz4iICUKLSAgICAgICAgICAgIChzZWxmLl9faG9zdCwgc2VsZi5fX2hhbmRsZXIpCisgICAgICAgICAgICAiPCVzIGZvciAlcyVzPiIgJQorICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLl9faG9zdCwgc2VsZi5fX2hhbmRsZXIpCiAgICAgICAgICAgICApCiAKICAgICBfX3N0cl9fID0gX19yZXByX18KQEAgLTE0NjIsNyArMTQ0OSw3IEBACiAgICAgICAgICMgbWFnaWMgbWV0aG9kIGRpc3BhdGNoZXIKICAgICAgICAgcmV0dXJuIF9NZXRob2Qoc2VsZi5fX3JlcXVlc3QsIG5hbWUpCiAKLSAgICAjIG5vdGU6IHRvIGNhbGwgYSByZW1vdGUgb2JqZWN0IHdpdGggYW4gbm9uLXN0YW5kYXJkIG5hbWUsIHVzZQorICAgICMgbm90ZTogdG8gY2FsbCBhIHJlbW90ZSBvYmplY3Qgd2l0aCBhIG5vbi1zdGFuZGFyZCBuYW1lLCB1c2UKICAgICAjIHJlc3VsdCBnZXRhdHRyKHNlcnZlciwgInN0cmFuZ2UtcHl0aG9uLW5hbWUiKShhcmdzKQogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGF0dHIpOgpAQCAtMTQ3NSw2ICsxNDYyLDEyIEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3RyYW5zcG9ydAogICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQXR0cmlidXRlICVyIG5vdCBmb3VuZCIgJSAoYXR0ciwpKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX19jbG9zZSgpCisKICMgY29tcGF0aWJpbGl0eQogCiBTZXJ2ZXIgPSBTZXJ2ZXJQcm94eQpkaWZmIC0tZ2l0IGEvTGliL3htbHJwYy9zZXJ2ZXIucHkgYi9MaWIveG1scnBjL3NlcnZlci5weQppbmRleCAzMDRlMjE4Li43ODE3NjkzIDEwMDY0NAotLS0gYS9MaWIveG1scnBjL3NlcnZlci5weQorKysgYi9MaWIveG1scnBjL3NlcnZlci5weQpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgICAgIGFyZSBjb25zaWRlcmVkIHByaXZhdGUgYW5kIHdpbGwgbm90IGJlIGNhbGxlZCBieQogICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuCiAKLSAgICAgICAgSWYgYSByZWdpc3RlcmVkIGZ1bmN0aW9uIG1hdGNoZXMgYSBYTUwtUlBDIHJlcXVlc3QsIHRoZW4gaXQKKyAgICAgICAgSWYgYSByZWdpc3RlcmVkIGZ1bmN0aW9uIG1hdGNoZXMgYW4gWE1MLVJQQyByZXF1ZXN0LCB0aGVuIGl0CiAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyZWQgaW5zdGFuY2UuCiAKICAgICAgICAgSWYgdGhlIG9wdGlvbmFsIGFsbG93X2RvdHRlZF9uYW1lcyBhcmd1bWVudCBpcyB0cnVlIGFuZCB0aGUKQEAgLTI2OSw3ICsyNjksNyBAQAogICAgICAgICAgICAgICAgIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcsIGFsbG93X25vbmU9c2VsZi5hbGxvd19ub25lLAogICAgICAgICAgICAgICAgICkKIAotICAgICAgICByZXR1cm4gcmVzcG9uc2UuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHJldHVybiByZXNwb25zZS5lbmNvZGUoc2VsZi5lbmNvZGluZywgJ3htbGNoYXJyZWZyZXBsYWNlJykKIAogICAgIGRlZiBzeXN0ZW1fbGlzdE1ldGhvZHMoc2VsZik6CiAgICAgICAgICIiInN5c3RlbS5saXN0TWV0aG9kcygpID0+IFsnYWRkJywgJ3N1YnRyYWN0JywgJ211bHRpcGxlJ10KQEAgLTYyMiw3ICs2MjIsNyBAQAogICAgICAgICAgICAgcmVzcG9uc2UgPSBkdW1wcygKICAgICAgICAgICAgICAgICBGYXVsdCgxLCAiJXM6JXMiICUgKGV4Y190eXBlLCBleGNfdmFsdWUpKSwKICAgICAgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nLCBhbGxvd19ub25lPXNlbGYuYWxsb3dfbm9uZSkKLSAgICAgICAgICAgIHJlc3BvbnNlID0gcmVzcG9uc2UuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLmVuY29kZShzZWxmLmVuY29kaW5nLCAneG1sY2hhcnJlZnJlcGxhY2UnKQogICAgICAgICByZXR1cm4gcmVzcG9uc2UKIAogY2xhc3MgQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIoU2ltcGxlWE1MUlBDRGlzcGF0Y2hlcik6CmRpZmYgLS1naXQgYS9MaWIvemlwYXBwLnB5IGIvTGliL3ppcGFwcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ViOTFkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3ppcGFwcC5weQpAQCAtMCwwICsxLDIwMSBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBvcworaW1wb3J0IHBhdGhsaWIKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgemlwZmlsZQorCitfX2FsbF9fID0gWydaaXBBcHBFcnJvcicsICdjcmVhdGVfYXJjaGl2ZScsICdnZXRfaW50ZXJwcmV0ZXInXQorCisKKyMgVGhlIF9fbWFpbl9fLnB5IHVzZWQgaWYgdGhlIHVzZXJzIHNwZWNpZmllcyAiLW0gbW9kdWxlOmZuIi4KKyMgTm90ZSB0aGF0IHRoaXMgd2lsbCBhbHdheXMgYmUgd3JpdHRlbiBhcyBVVEYtOCAobW9kdWxlIGFuZAorIyBmdW5jdGlvbiBuYW1lcyBjYW4gYmUgbm9uLUFTQ0lJIGluIFB5dGhvbiAzKS4KKyMgV2UgYWRkIGEgY29kaW5nIGNvb2tpZSBldmVuIHRob3VnaCBVVEYtOCBpcyB0aGUgZGVmYXVsdCBpbiBQeXRob24gMworIyBiZWNhdXNlIHRoZSByZXN1bHRpbmcgYXJjaGl2ZSBtYXkgYmUgaW50ZW5kZWQgdG8gYmUgcnVuIHVuZGVyIFB5dGhvbiAyLgorTUFJTl9URU1QTEFURSA9ICIiIlwKKyMgLSotIGNvZGluZzogdXRmLTggLSotCitpbXBvcnQge21vZHVsZX0KK3ttb2R1bGV9Lntmbn0oKQorIiIiCisKKworIyBUaGUgV2luZG93cyBsYXVuY2hlciBkZWZhdWx0cyB0byBVVEYtOCB3aGVuIHBhcnNpbmcgc2hlYmFuZyBsaW5lcyBpZiB0aGUKKyMgZmlsZSBoYXMgbm8gQk9NLiBTbyB1c2UgVVRGLTggb24gV2luZG93cy4KKyMgT24gVW5peCwgdXNlIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nLgoraWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgIHNoZWJhbmdfZW5jb2RpbmcgPSAndXRmLTgnCitlbHNlOgorICAgIHNoZWJhbmdfZW5jb2RpbmcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKKworCitjbGFzcyBaaXBBcHBFcnJvcihWYWx1ZUVycm9yKToKKyAgICBwYXNzCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBfbWF5YmVfb3BlbihhcmNoaXZlLCBtb2RlKToKKyAgICBpZiBpc2luc3RhbmNlKGFyY2hpdmUsIHBhdGhsaWIuUGF0aCk6CisgICAgICAgIGFyY2hpdmUgPSBzdHIoYXJjaGl2ZSkKKyAgICBpZiBpc2luc3RhbmNlKGFyY2hpdmUsIHN0cik6CisgICAgICAgIHdpdGggb3BlbihhcmNoaXZlLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgeWllbGQgZgorICAgIGVsc2U6CisgICAgICAgIHlpZWxkIGFyY2hpdmUKKworCitkZWYgX3dyaXRlX2ZpbGVfcHJlZml4KGYsIGludGVycHJldGVyKToKKyAgICAiIiJXcml0ZSBhIHNoZWJhbmcgbGluZS4iIiIKKyAgICBpZiBpbnRlcnByZXRlcjoKKyAgICAgICAgc2hlYmFuZyA9IGInIyEnICsgaW50ZXJwcmV0ZXIuZW5jb2RlKHNoZWJhbmdfZW5jb2RpbmcpICsgYidcbicKKyAgICAgICAgZi53cml0ZShzaGViYW5nKQorCisKK2RlZiBfY29weV9hcmNoaXZlKGFyY2hpdmUsIG5ld19hcmNoaXZlLCBpbnRlcnByZXRlcj1Ob25lKToKKyAgICAiIiJDb3B5IGFuIGFwcGxpY2F0aW9uIGFyY2hpdmUsIG1vZGlmeWluZyB0aGUgc2hlYmFuZyBsaW5lLiIiIgorICAgIHdpdGggX21heWJlX29wZW4oYXJjaGl2ZSwgJ3JiJykgYXMgc3JjOgorICAgICAgICAjIFNraXAgdGhlIHNoZWJhbmcgbGluZSBmcm9tIHRoZSBzb3VyY2UuCisgICAgICAgICMgUmVhZCAyIGJ5dGVzIG9mIHRoZSBzb3VyY2UgYW5kIGNoZWNrIGlmIHRoZXkgYXJlICMhLgorICAgICAgICBmaXJzdF8yID0gc3JjLnJlYWQoMikKKyAgICAgICAgaWYgZmlyc3RfMiA9PSBiJyMhJzoKKyAgICAgICAgICAgICMgRGlzY2FyZCB0aGUgaW5pdGlhbCAyIGJ5dGVzIGFuZCB0aGUgcmVzdCBvZiB0aGUgc2hlYmFuZyBsaW5lLgorICAgICAgICAgICAgZmlyc3RfMiA9IGInJworICAgICAgICAgICAgc3JjLnJlYWRsaW5lKCkKKworICAgICAgICB3aXRoIF9tYXliZV9vcGVuKG5ld19hcmNoaXZlLCAnd2InKSBhcyBkc3Q6CisgICAgICAgICAgICBfd3JpdGVfZmlsZV9wcmVmaXgoZHN0LCBpbnRlcnByZXRlcikKKyAgICAgICAgICAgICMgSWYgdGhlcmUgd2FzIG5vIHNoZWJhbmcsICJmaXJzdF8yIiBjb250YWlucyB0aGUgZmlyc3QgMiBieXRlcworICAgICAgICAgICAgIyBvZiB0aGUgc291cmNlIGZpbGUsIHNvIHdyaXRlIHRoZW0gYmVmb3JlIGNvcHlpbmcgdGhlIHJlc3QKKyAgICAgICAgICAgICMgb2YgdGhlIGZpbGUuCisgICAgICAgICAgICBkc3Qud3JpdGUoZmlyc3RfMikKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihzcmMsIGRzdCkKKworICAgIGlmIGludGVycHJldGVyIGFuZCBpc2luc3RhbmNlKG5ld19hcmNoaXZlLCBzdHIpOgorICAgICAgICBvcy5jaG1vZChuZXdfYXJjaGl2ZSwgb3Muc3RhdChuZXdfYXJjaGl2ZSkuc3RfbW9kZSB8IHN0YXQuU19JRVhFQykKKworCitkZWYgY3JlYXRlX2FyY2hpdmUoc291cmNlLCB0YXJnZXQ9Tm9uZSwgaW50ZXJwcmV0ZXI9Tm9uZSwgbWFpbj1Ob25lKToKKyAgICAiIiJDcmVhdGUgYW4gYXBwbGljYXRpb24gYXJjaGl2ZSBmcm9tIFNPVVJDRS4KKworICAgIFRoZSBTT1VSQ0UgY2FuIGJlIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5LCBvciBhIGZpbGVuYW1lIG9yIGEgZmlsZS1saWtlCisgICAgb2JqZWN0IHJlZmVycmluZyB0byBhbiBleGlzdGluZyBhcmNoaXZlLgorCisgICAgVGhlIGNvbnRlbnQgb2YgU09VUkNFIGlzIHBhY2tlZCBpbnRvIGFuIGFwcGxpY2F0aW9uIGFyY2hpdmUgaW4gVEFSR0VULAorICAgIHdoaWNoIGNhbiBiZSBhIGZpbGVuYW1lIG9yIGEgZmlsZS1saWtlIG9iamVjdC4gIElmIFNPVVJDRSBpcyBhIGRpcmVjdG9yeSwKKyAgICBUQVJHRVQgY2FuIGJlIG9taXR0ZWQgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiBTT1VSQ0Ugd2l0aCAucHl6CisgICAgYXBwZW5kZWQuCisKKyAgICBUaGUgY3JlYXRlZCBhcHBsaWNhdGlvbiBhcmNoaXZlIHdpbGwgaGF2ZSBhIHNoZWJhbmcgbGluZSBzcGVjaWZ5aW5nCisgICAgdGhhdCBpdCBzaG91bGQgcnVuIHdpdGggSU5URVJQUkVURVIgKHRoZXJlIHdpbGwgYmUgbm8gc2hlYmFuZyBsaW5lIGlmCisgICAgSU5URVJQUkVURVIgaXMgTm9uZSksIGFuZCBhIF9fbWFpbl9fLnB5IHdoaWNoIHJ1bnMgTUFJTiAoaWYgTUFJTiBpcworICAgIG5vdCBzcGVjaWZpZWQsIGFuIGV4aXN0aW5nIF9fbWFpbl9fLnB5IHdpbGwgYmUgdXNlZCkuICBJdCBpcyBhbiBlcnJvcgorICAgIHRvIHNwZWNpZnkgTUFJTiBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiBhIGRpcmVjdG9yeSBzb3VyY2Ugd2l0aCBubworICAgIF9fbWFpbl9fLnB5LCBhbmQgaXQgaXMgYW4gZXJyb3IgdG8gb21pdCBNQUlOIGlmIHRoZSBkaXJlY3RvcnkgaGFzIG5vCisgICAgX19tYWluX18ucHkuCisgICAgIiIiCisgICAgIyBBcmUgd2UgY29weWluZyBhbiBleGlzdGluZyBhcmNoaXZlPworICAgIHNvdXJjZV9pc19maWxlID0gRmFsc2UKKyAgICBpZiBoYXNhdHRyKHNvdXJjZSwgJ3JlYWQnKSBhbmQgaGFzYXR0cihzb3VyY2UsICdyZWFkbGluZScpOgorICAgICAgICBzb3VyY2VfaXNfZmlsZSA9IFRydWUKKyAgICBlbHNlOgorICAgICAgICBzb3VyY2UgPSBwYXRobGliLlBhdGgoc291cmNlKQorICAgICAgICBpZiBzb3VyY2UuaXNfZmlsZSgpOgorICAgICAgICAgICAgc291cmNlX2lzX2ZpbGUgPSBUcnVlCisKKyAgICBpZiBzb3VyY2VfaXNfZmlsZToKKyAgICAgICAgX2NvcHlfYXJjaGl2ZShzb3VyY2UsIHRhcmdldCwgaW50ZXJwcmV0ZXIpCisgICAgICAgIHJldHVybgorCisgICAgIyBXZSBhcmUgY3JlYXRpbmcgYSBuZXcgYXJjaGl2ZSBmcm9tIGEgZGlyZWN0b3J5LgorICAgIGlmIG5vdCBzb3VyY2UuZXhpc3RzKCk6CisgICAgICAgIHJhaXNlIFppcEFwcEVycm9yKCJTb3VyY2UgZG9lcyBub3QgZXhpc3QiKQorICAgIGhhc19tYWluID0gKHNvdXJjZSAvICdfX21haW5fXy5weScpLmlzX2ZpbGUoKQorICAgIGlmIG1haW4gYW5kIGhhc19tYWluOgorICAgICAgICByYWlzZSBaaXBBcHBFcnJvcigKKyAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSBlbnRyeSBwb2ludCBpZiB0aGUgc291cmNlIGhhcyBfX21haW5fXy5weSIpCisgICAgaWYgbm90IChtYWluIG9yIGhhc19tYWluKToKKyAgICAgICAgcmFpc2UgWmlwQXBwRXJyb3IoIkFyY2hpdmUgaGFzIG5vIGVudHJ5IHBvaW50IikKKworICAgIG1haW5fcHkgPSBOb25lCisgICAgaWYgbWFpbjoKKyAgICAgICAgIyBDaGVjayB0aGF0IG1haW4gaGFzIHRoZSByaWdodCBmb3JtYXQuCisgICAgICAgIG1vZCwgc2VwLCBmbiA9IG1haW4ucGFydGl0aW9uKCc6JykKKyAgICAgICAgbW9kX29rID0gYWxsKHBhcnQuaXNpZGVudGlmaWVyKCkgZm9yIHBhcnQgaW4gbW9kLnNwbGl0KCcuJykpCisgICAgICAgIGZuX29rID0gYWxsKHBhcnQuaXNpZGVudGlmaWVyKCkgZm9yIHBhcnQgaW4gZm4uc3BsaXQoJy4nKSkKKyAgICAgICAgaWYgbm90IChzZXAgPT0gJzonIGFuZCBtb2Rfb2sgYW5kIGZuX29rKToKKyAgICAgICAgICAgIHJhaXNlIFppcEFwcEVycm9yKCJJbnZhbGlkIGVudHJ5IHBvaW50OiAiICsgbWFpbikKKyAgICAgICAgbWFpbl9weSA9IE1BSU5fVEVNUExBVEUuZm9ybWF0KG1vZHVsZT1tb2QsIGZuPWZuKQorCisgICAgaWYgdGFyZ2V0IGlzIE5vbmU6CisgICAgICAgIHRhcmdldCA9IHNvdXJjZS53aXRoX3N1ZmZpeCgnLnB5eicpCisgICAgZWxpZiBub3QgaGFzYXR0cih0YXJnZXQsICd3cml0ZScpOgorICAgICAgICB0YXJnZXQgPSBwYXRobGliLlBhdGgodGFyZ2V0KQorCisgICAgd2l0aCBfbWF5YmVfb3Blbih0YXJnZXQsICd3YicpIGFzIGZkOgorICAgICAgICBfd3JpdGVfZmlsZV9wcmVmaXgoZmQsIGludGVycHJldGVyKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmZCwgJ3cnKSBhcyB6OgorICAgICAgICAgICAgcm9vdCA9IHBhdGhsaWIuUGF0aChzb3VyY2UpCisgICAgICAgICAgICBmb3IgY2hpbGQgaW4gcm9vdC5yZ2xvYignKicpOgorICAgICAgICAgICAgICAgIGFyY25hbWUgPSBzdHIoY2hpbGQucmVsYXRpdmVfdG8ocm9vdCkpCisgICAgICAgICAgICAgICAgei53cml0ZShzdHIoY2hpbGQpLCBhcmNuYW1lKQorICAgICAgICAgICAgaWYgbWFpbl9weToKKyAgICAgICAgICAgICAgICB6LndyaXRlc3RyKCdfX21haW5fXy5weScsIG1haW5fcHkuZW5jb2RlKCd1dGYtOCcpKQorCisgICAgaWYgaW50ZXJwcmV0ZXIgYW5kIG5vdCBoYXNhdHRyKHRhcmdldCwgJ3dyaXRlJyk6CisgICAgICAgIHRhcmdldC5jaG1vZCh0YXJnZXQuc3RhdCgpLnN0X21vZGUgfCBzdGF0LlNfSUVYRUMpCisKKworZGVmIGdldF9pbnRlcnByZXRlcihhcmNoaXZlKToKKyAgICB3aXRoIF9tYXliZV9vcGVuKGFyY2hpdmUsICdyYicpIGFzIGY6CisgICAgICAgIGlmIGYucmVhZCgyKSA9PSBiJyMhJzoKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWRsaW5lKCkuc3RyaXAoKS5kZWNvZGUoc2hlYmFuZ19lbmNvZGluZykKKworCitkZWYgbWFpbihhcmdzPU5vbmUpOgorICAgICIiIlJ1biB0aGUgemlwYXBwIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UuCisKKyAgICBUaGUgQVJHUyBwYXJhbWV0ZXIgbGV0cyB5b3Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgbGlzdCBkaXJlY3RseS4KKyAgICBPbWl0dGluZyBBUkdTIChvciBzZXR0aW5nIGl0IHRvIE5vbmUpIHdvcmtzIGFzIGZvciBhcmdwYXJzZSwgdXNpbmcKKyAgICBzeXMuYXJndlsxOl0gYXMgdGhlIGFyZ3VtZW50IGxpc3QuCisgICAgIiIiCisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXQnLCAnLW8nLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICBoZWxwPSJUaGUgbmFtZSBvZiB0aGUgb3V0cHV0IGFyY2hpdmUuICIKKyAgICAgICAgICAgICAgICAgIlJlcXVpcmVkIGlmIFNPVVJDRSBpcyBhbiBhcmNoaXZlLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1weXRob24nLCAnLXAnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICBoZWxwPSJUaGUgbmFtZSBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyIHRvIHVzZSAiCisgICAgICAgICAgICAgICAgICIoZGVmYXVsdDogbm8gc2hlYmFuZyBsaW5lKS4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbWFpbicsICctbScsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgIGhlbHA9IlRoZSBtYWluIGZ1bmN0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbiAiCisgICAgICAgICAgICAgICAgICIoZGVmYXVsdDogdXNlIGFuIGV4aXN0aW5nIF9fbWFpbl9fLnB5KS4iKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW5mbycsIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICBoZWxwPSJEaXNwbGF5IHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZSBhcmNoaXZlLiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnc291cmNlJywKKyAgICAgICAgICAgIGhlbHA9IlNvdXJjZSBkaXJlY3RvcnkgKG9yIGV4aXN0aW5nIGFyY2hpdmUpLiIpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgICMgSGFuZGxlIGBweXRob24gLW0gemlwYXBwIGFyY2hpdmUucHl6IC0taW5mb2AuCisgICAgaWYgYXJncy5pbmZvOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoYXJncy5zb3VyY2UpOgorICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiQ2FuIG9ubHkgZ2V0IGluZm8gZm9yIGFuIGFyY2hpdmUgZmlsZSIpCisgICAgICAgIGludGVycHJldGVyID0gZ2V0X2ludGVycHJldGVyKGFyZ3Muc291cmNlKQorICAgICAgICBwcmludCgiSW50ZXJwcmV0ZXI6IHt9Ii5mb3JtYXQoaW50ZXJwcmV0ZXIgb3IgIjxub25lPiIpKQorICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgaWYgb3MucGF0aC5pc2ZpbGUoYXJncy5zb3VyY2UpOgorICAgICAgICBpZiBhcmdzLm91dHB1dCBpcyBOb25lIG9yIChvcy5wYXRoLmV4aXN0cyhhcmdzLm91dHB1dCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguc2FtZWZpbGUoYXJncy5zb3VyY2UsIGFyZ3Mub3V0cHV0KSk6CisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJJbi1wbGFjZSBlZGl0aW5nIG9mIGFyY2hpdmVzIGlzIG5vdCBzdXBwb3J0ZWQiKQorICAgICAgICBpZiBhcmdzLm1haW46CisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJDYW5ub3QgY2hhbmdlIHRoZSBtYWluIGZ1bmN0aW9uIHdoZW4gY29weWluZyIpCisKKyAgICBjcmVhdGVfYXJjaGl2ZShhcmdzLnNvdXJjZSwgYXJncy5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0ZXI9YXJncy5weXRob24sIG1haW49YXJncy5tYWluKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvemlwZmlsZS5weSBiL0xpYi96aXBmaWxlLnB5CmluZGV4IDExZDdjZjkuLjU2YTI0NzkgMTAwNjQ0Ci0tLSBhL0xpYi96aXBmaWxlLnB5CisrKyBiL0xpYi96aXBmaWxlLnB5CkBAIC0xNCw2ICsxNCwxMCBAQAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IGJpbmFzY2lpCiAKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IGR1bW15X3RocmVhZGluZyBhcyB0aHJlYWRpbmcKIAogdHJ5OgogICAgIGltcG9ydCB6bGliICMgV2UgbWF5IG5lZWQgaXRzIGNvbXByZXNzaW9uIG1ldGhvZApAQCAtMzU1LDYgKzM1OSwyOCBAQAogICAgICAgICAjIGNvbXByZXNzX3NpemUgICAgICAgICBTaXplIG9mIHRoZSBjb21wcmVzc2VkIGZpbGUKICAgICAgICAgIyBmaWxlX3NpemUgICAgICAgICAgICAgU2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGZpbGUKIAorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gWyc8JXMgZmlsZW5hbWU9JXInICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLmZpbGVuYW1lKV0KKyAgICAgICAgaWYgc2VsZi5jb21wcmVzc190eXBlICE9IFpJUF9TVE9SRUQ6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgY29tcHJlc3NfdHlwZT0lcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29yX25hbWVzLmdldChzZWxmLmNvbXByZXNzX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSkpCisgICAgICAgIGhpID0gc2VsZi5leHRlcm5hbF9hdHRyID4+IDE2CisgICAgICAgIGxvID0gc2VsZi5leHRlcm5hbF9hdHRyICYgMHhGRkZGCisgICAgICAgIGlmIGhpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIGZpbGVtb2RlPSVyJyAlIHN0YXQuZmlsZW1vZGUoaGkpKQorICAgICAgICBpZiBsbzoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyBleHRlcm5hbF9hdHRyPSUjeCcgJSBsbykKKyAgICAgICAgaXNkaXIgPSBzZWxmLmZpbGVuYW1lWy0xOl0gPT0gJy8nCisgICAgICAgIGlmIG5vdCBpc2RpciBvciBzZWxmLmZpbGVfc2l6ZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyBmaWxlX3NpemU9JXInICUgc2VsZi5maWxlX3NpemUpCisgICAgICAgIGlmICgobm90IGlzZGlyIG9yIHNlbGYuY29tcHJlc3Nfc2l6ZSkgYW5kCisgICAgICAgICAgICAoc2VsZi5jb21wcmVzc190eXBlICE9IFpJUF9TVE9SRUQgb3IKKyAgICAgICAgICAgICBzZWxmLmZpbGVfc2l6ZSAhPSBzZWxmLmNvbXByZXNzX3NpemUpKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyBjb21wcmVzc19zaXplPSVyJyAlIHNlbGYuY29tcHJlc3Nfc2l6ZSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnPicpCisgICAgICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKKwogICAgIGRlZiBGaWxlSGVhZGVyKHNlbGYsIHppcDY0PU5vbmUpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIHBlci1maWxlIGhlYWRlciBhcyBhIHN0cmluZy4iIiIKICAgICAgICAgZHQgPSBzZWxmLmRhdGVfdGltZQpAQCAtNjI0LDYgKzY1MCw0NyBAQAogICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiY29tcHJlc3Npb24gdHlwZSAlZCIgJSAoY29tcHJlc3NfdHlwZSwpKQogCiAKK2NsYXNzIF9TaGFyZWRGaWxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBwb3MsIGNsb3NlLCBsb2NrKToKKyAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKKyAgICAgICAgc2VsZi5fcG9zID0gcG9zCisgICAgICAgIHNlbGYuX2Nsb3NlID0gY2xvc2UKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sKKworICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9maWxlLnNlZWsoc2VsZi5fcG9zKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZChuKQorICAgICAgICAgICAgc2VsZi5fcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2ZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmaWxlb2JqID0gc2VsZi5fZmlsZQorICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlKGZpbGVvYmopCisKKyMgUHJvdmlkZSB0aGUgdGVsbCBtZXRob2QgZm9yIHVuc2Vla2FibGUgc3RyZWFtCitjbGFzcyBfVGVsbGFibGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwKToKKyAgICAgICAgc2VsZi5mcCA9IGZwCisgICAgICAgIHNlbGYub2Zmc2V0ID0gMAorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBuID0gc2VsZi5mcC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLm9mZnNldCArPSBuCisgICAgICAgIHJldHVybiBuCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub2Zmc2V0CisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYuZnAuZmx1c2goKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmZwLmNsb3NlKCkKKworCiBjbGFzcyBaaXBFeHRGaWxlKGlvLkJ1ZmZlcmVkSU9CYXNlKToKICAgICAiIiJGaWxlLWxpa2Ugb2JqZWN0IGZvciByZWFkaW5nIGFuIGFyY2hpdmUgbWVtYmVyLgogICAgICAgIElzIHJldHVybmVkIGJ5IFppcEZpbGUub3BlbigpLgpAQCAtNjY3LDEwICs3MzQsMjQgQEAKIAogICAgICAgICBpZiBoYXNhdHRyKHppcGluZm8sICdDUkMnKToKICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2NyYyA9IHppcGluZm8uQ1JDCi0gICAgICAgICAgICBzZWxmLl9ydW5uaW5nX2NyYyA9IGNyYzMyKGInJykgJiAweGZmZmZmZmZmCisgICAgICAgICAgICBzZWxmLl9ydW5uaW5nX2NyYyA9IGNyYzMyKGInJykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2NyYyA9IE5vbmUKIAorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gWyc8JXMuJXMnICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX3F1YWxuYW1lX18pXQorICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgbmFtZT0lciBtb2RlPSVyJyAlIChzZWxmLm5hbWUsIHNlbGYubW9kZSkpCisgICAgICAgICAgICBpZiBzZWxmLl9jb21wcmVzc190eXBlICE9IFpJUF9TVE9SRUQ6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIGNvbXByZXNzX3R5cGU9JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb3JfbmFtZXMuZ2V0KHNlbGYuX2NvbXByZXNzX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc190eXBlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyBbY2xvc2VkXScpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoJz4nKQorICAgICAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCisKICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGltaXQ9LTEpOgogICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gYSBsaW5lIGZyb20gdGhlIHN0cmVhbS4KIApAQCAtNzc1LDcgKzg1Niw3IEBACiAgICAgICAgIGlmIHNlbGYuX2V4cGVjdGVkX2NyYyBpcyBOb25lOgogICAgICAgICAgICAgIyBObyBuZWVkIHRvIGNvbXB1dGUgdGhlIENSQyBpZiB3ZSBkb24ndCBoYXZlIGEgcmVmZXJlbmNlIHZhbHVlCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fcnVubmluZ19jcmMgPSBjcmMzMihuZXdkYXRhLCBzZWxmLl9ydW5uaW5nX2NyYykgJiAweGZmZmZmZmZmCisgICAgICAgIHNlbGYuX3J1bm5pbmdfY3JjID0gY3JjMzIobmV3ZGF0YSwgc2VsZi5fcnVubmluZ19jcmMpCiAgICAgICAgICMgQ2hlY2sgdGhlIENSQyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCiAgICAgICAgIGlmIHNlbGYuX2VvZiBhbmQgc2VsZi5fcnVubmluZ19jcmMgIT0gc2VsZi5fZXhwZWN0ZWRfY3JjOgogICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiQmFkIENSQy0zMiBmb3IgZmlsZSAlciIgJSBzZWxmLm5hbWUpCkBAIC04ODQsNyArOTY1LDggQEAKIAogICAgIGZpbGU6IEVpdGhlciB0aGUgcGF0aCB0byB0aGUgZmlsZSwgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0LgogICAgICAgICAgIElmIGl0IGlzIGEgcGF0aCwgdGhlIGZpbGUgd2lsbCBiZSBvcGVuZWQgYW5kIGNsb3NlZCBieSBaaXBGaWxlLgotICAgIG1vZGU6IFRoZSBtb2RlIGNhbiBiZSBlaXRoZXIgcmVhZCAiciIsIHdyaXRlICJ3IiBvciBhcHBlbmQgImEiLgorICAgIG1vZGU6IFRoZSBtb2RlIGNhbiBiZSBlaXRoZXIgcmVhZCAncicsIHdyaXRlICd3JywgZXhjbHVzaXZlIGNyZWF0ZSAneCcsCisgICAgICAgICAgb3IgYXBwZW5kICdhJy4KICAgICBjb21wcmVzc2lvbjogWklQX1NUT1JFRCAobm8gY29tcHJlc3Npb24pLCBaSVBfREVGTEFURUQgKHJlcXVpcmVzIHpsaWIpLAogICAgICAgICAgICAgICAgICBaSVBfQlpJUDIgKHJlcXVpcmVzIGJ6Mikgb3IgWklQX0xaTUEgKHJlcXVpcmVzIGx6bWEpLgogICAgIGFsbG93WmlwNjQ6IGlmIFRydWUgWmlwRmlsZSB3aWxsIGNyZWF0ZSBmaWxlcyB3aXRoIFpJUDY0IGV4dGVuc2lvbnMgd2hlbgpAQCAtODk3LDkgKzk3OSwxMCBAQAogICAgIF93aW5kb3dzX2lsbGVnYWxfbmFtZV90cmFuc190YWJsZSA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlKToKLSAgICAgICAgIiIiT3BlbiB0aGUgWklQIGZpbGUgd2l0aCBtb2RlIHJlYWQgInIiLCB3cml0ZSAidyIgb3IgYXBwZW5kICJhIi4iIiIKLSAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJyIiwgInciLCAiYSIpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdaaXBGaWxlKCkgcmVxdWlyZXMgbW9kZSAiciIsICJ3Iiwgb3IgImEiJykKKyAgICAgICAgIiIiT3BlbiB0aGUgWklQIGZpbGUgd2l0aCBtb2RlIHJlYWQgJ3InLCB3cml0ZSAndycsIGV4Y2x1c2l2ZSBjcmVhdGUgJ3gnLAorICAgICAgICBvciBhcHBlbmQgJ2EnLiIiIgorICAgICAgICBpZiBtb2RlIG5vdCBpbiAoJ3InLCAndycsICd4JywgJ2EnKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiWmlwRmlsZSByZXF1aXJlcyBtb2RlICdyJywgJ3cnLCAneCcsIG9yICdhJyIpCiAKICAgICAgICAgX2NoZWNrX2NvbXByZXNzaW9uKGNvbXByZXNzaW9uKQogCkBAIC05MDksNyArOTkyLDcgQEAKICAgICAgICAgc2VsZi5OYW1lVG9JbmZvID0ge30gICAgIyBGaW5kIGZpbGUgaW5mbyBnaXZlbiBuYW1lCiAgICAgICAgIHNlbGYuZmlsZWxpc3QgPSBbXSAgICAgICMgTGlzdCBvZiBaaXBJbmZvIGluc3RhbmNlcyBmb3IgYXJjaGl2ZQogICAgICAgICBzZWxmLmNvbXByZXNzaW9uID0gY29tcHJlc3Npb24gICMgTWV0aG9kIG9mIGNvbXByZXNzaW9uCi0gICAgICAgIHNlbGYubW9kZSA9IGtleSA9IG1vZGUucmVwbGFjZSgnYicsICcnKVswXQorICAgICAgICBzZWxmLm1vZGUgPSBtb2RlCiAgICAgICAgIHNlbGYucHdkID0gTm9uZQogICAgICAgICBzZWxmLl9jb21tZW50ID0gYicnCiAKQEAgLTkxOCwzMyArMTAwMSw1MSBAQAogICAgICAgICAgICAgIyBObywgaXQncyBhIGZpbGVuYW1lCiAgICAgICAgICAgICBzZWxmLl9maWxlUGFzc2VkID0gMAogICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGUKLSAgICAgICAgICAgIG1vZGVEaWN0ID0geydyJyA6ICdyYicsICd3JzogJ3diJywgJ2EnIDogJ3IrYid9Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mcCA9IGlvLm9wZW4oZmlsZSwgbW9kZURpY3RbbW9kZV0pCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBtb2RlID09ICdhJzoKLSAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGtleSA9ICd3JwotICAgICAgICAgICAgICAgICAgICBzZWxmLmZwID0gaW8ub3BlbihmaWxlLCBtb2RlRGljdFttb2RlXSkKLSAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kZURpY3QgPSB7J3InIDogJ3JiJywgJ3cnOiAndytiJywgJ3gnOiAneCtiJywgJ2EnIDogJ3IrYicsCisgICAgICAgICAgICAgICAgICAgICAgICAncitiJzogJ3crYicsICd3K2InOiAnd2InLCAneCtiJzogJ3hiJ30KKyAgICAgICAgICAgIGZpbGVtb2RlID0gbW9kZURpY3RbbW9kZV0KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZwID0gaW8ub3BlbihmaWxlLCBmaWxlbW9kZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZW1vZGUgaW4gbW9kZURpY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZSA9IG1vZGVEaWN0W2ZpbGVtb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fZmlsZVBhc3NlZCA9IDEKICAgICAgICAgICAgIHNlbGYuZnAgPSBmaWxlCiAgICAgICAgICAgICBzZWxmLmZpbGVuYW1lID0gZ2V0YXR0cihmaWxlLCAnbmFtZScsIE5vbmUpCisgICAgICAgIHNlbGYuX2ZpbGVSZWZDbnQgPSAxCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuUkxvY2soKQorICAgICAgICBzZWxmLl9zZWVrYWJsZSA9IFRydWUKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBrZXkgPT0gJ3InOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAncic6CiAgICAgICAgICAgICAgICAgc2VsZi5fUmVhbEdldENvbnRlbnRzKCkKLSAgICAgICAgICAgIGVsaWYga2V5ID09ICd3JzoKKyAgICAgICAgICAgIGVsaWYgbW9kZSBpbiAoJ3cnLCAneCcpOgogICAgICAgICAgICAgICAgICMgc2V0IHRoZSBtb2RpZmllZCBmbGFnIHNvIGNlbnRyYWwgZGlyZWN0b3J5IGdldHMgd3JpdHRlbgogICAgICAgICAgICAgICAgICMgZXZlbiBpZiBubyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIGFyY2hpdmUKICAgICAgICAgICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCi0gICAgICAgICAgICBlbGlmIGtleSA9PSAnYSc6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X2RpciA9IHNlbGYuZnAudGVsbCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAgPSBfVGVsbGFibGUoc2VsZi5mcCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGFydF9kaXIgPSAwCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlZWthYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFNvbWUgZmlsZS1saWtlIG9iamVjdHMgY2FuIHByb3ZpZGUgdGVsbCgpIGJ1dCBub3Qgc2VlaygpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAuc2VlayhzZWxmLnN0YXJ0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWVrYWJsZSA9IEZhbHNlCisgICAgICAgICAgICBlbGlmIG1vZGUgPT0gJ2EnOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBTZWUgaWYgZmlsZSBpcyBhIHppcCBmaWxlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX1JlYWxHZXRDb250ZW50cygpCiAgICAgICAgICAgICAgICAgICAgICMgc2VlayB0byBzdGFydCBvZiBkaXJlY3RvcnkgYW5kIG92ZXJ3cml0ZQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLnNlZWsoc2VsZi5zdGFydF9kaXIsIDApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAuc2VlayhzZWxmLnN0YXJ0X2RpcikKICAgICAgICAgICAgICAgICBleGNlcHQgQmFkWmlwRmlsZToKICAgICAgICAgICAgICAgICAgICAgIyBmaWxlIGlzIG5vdCBhIHppcCBmaWxlLCBqdXN0IGFwcGVuZAogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLnNlZWsoMCwgMikKQEAgLTk1MiwxMyArMTA1MywxMyBAQAogICAgICAgICAgICAgICAgICAgICAjIHNldCB0aGUgbW9kaWZpZWQgZmxhZyBzbyBjZW50cmFsIGRpcmVjdG9yeSBnZXRzIHdyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgIyBldmVuIGlmIG5vIGZpbGVzIGFyZSBhZGRlZCB0byB0aGUgYXJjaGl2ZQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhcnRfZGlyID0gc2VsZi5mcC50ZWxsKCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdNb2RlIG11c3QgYmUgInIiLCAidyIgb3IgImEiJykKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIk1vZGUgbXVzdCBiZSAncicsICd3JywgJ3gnLCBvciAnYSciKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBmcCA9IHNlbGYuZnAKICAgICAgICAgICAgIHNlbGYuZnAgPSBOb25lCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZVBhc3NlZDoKLSAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9mcGNsb3NlKGZwKQogICAgICAgICAgICAgcmFpc2UKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CkBAIC05NjcsNiArMTA2OCwyMCBAQAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICAgc2VsZi5jbG9zZSgpCiAKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFsnPCVzLiVzJyAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19xdWFsbmFtZV9fKV0KKyAgICAgICAgaWYgc2VsZi5mcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVQYXNzZWQ6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIGZpbGU9JXInICUgc2VsZi5mcCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5maWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgZmlsZW5hbWU9JXInICUgc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyBtb2RlPSVyJyAlIHNlbGYubW9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyBbY2xvc2VkXScpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoJz4nKQorICAgICAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCisKICAgICBkZWYgX1JlYWxHZXRDb250ZW50cyhzZWxmKToKICAgICAgICAgIiIiUmVhZCBpbiB0aGUgdGFibGUgb2YgY29udGVudHMgZm9yIHRoZSBaSVAgZmlsZS4iIiIKICAgICAgICAgZnAgPSBzZWxmLmZwCkBAIC0xMTMxLDIzICsxMjQ2LDE3IEBACiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCiAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKLSAgICAgICAgIyBPbmx5IG9wZW4gYSBuZXcgZmlsZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHdlIHdlcmUgbm90Ci0gICAgICAgICMgZ2l2ZW4gYSBmaWxlIG9iamVjdCBpbiB0aGUgY29uc3RydWN0b3IKLSAgICAgICAgaWYgc2VsZi5fZmlsZVBhc3NlZDoKLSAgICAgICAgICAgIHplZl9maWxlID0gc2VsZi5mcAorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGluZm8gb2JqZWN0CisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgWmlwSW5mbyk6CisgICAgICAgICAgICAjICduYW1lJyBpcyBhbHJlYWR5IGFuIGluZm8gb2JqZWN0CisgICAgICAgICAgICB6aW5mbyA9IG5hbWUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHplZl9maWxlID0gaW8ub3BlbihzZWxmLmZpbGVuYW1lLCAncmInKQorICAgICAgICAgICAgIyBHZXQgaW5mbyBvYmplY3QgZm9yIG5hbWUKKyAgICAgICAgICAgIHppbmZvID0gc2VsZi5nZXRpbmZvKG5hbWUpCiAKKyAgICAgICAgc2VsZi5fZmlsZVJlZkNudCArPSAxCisgICAgICAgIHplZl9maWxlID0gX1NoYXJlZEZpbGUoc2VsZi5mcCwgemluZm8uaGVhZGVyX29mZnNldCwgc2VsZi5fZnBjbG9zZSwgc2VsZi5fbG9jaykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBpbmZvIG9iamVjdAotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lLCBaaXBJbmZvKToKLSAgICAgICAgICAgICAgICAjICduYW1lJyBpcyBhbHJlYWR5IGFuIGluZm8gb2JqZWN0Ci0gICAgICAgICAgICAgICAgemluZm8gPSBuYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgR2V0IGluZm8gb2JqZWN0IGZvciBuYW1lCi0gICAgICAgICAgICAgICAgemluZm8gPSBzZWxmLmdldGluZm8obmFtZSkKLSAgICAgICAgICAgIHplZl9maWxlLnNlZWsoemluZm8uaGVhZGVyX29mZnNldCwgMCkKLQogICAgICAgICAgICAgIyBTa2lwIHRoZSBmaWxlIGhlYWRlcjoKICAgICAgICAgICAgIGZoZWFkZXIgPSB6ZWZfZmlsZS5yZWFkKHNpemVGaWxlSGVhZGVyKQogICAgICAgICAgICAgaWYgbGVuKGZoZWFkZXIpICE9IHNpemVGaWxlSGVhZGVyOgpAQCAtMTIwNiwxMSArMTMxNSw5IEBACiAgICAgICAgICAgICAgICAgaWYgaFsxMV0gIT0gY2hlY2tfYnl0ZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJCYWQgcGFzc3dvcmQgZm9yIGZpbGUiLCBuYW1lKQogCi0gICAgICAgICAgICByZXR1cm4gWmlwRXh0RmlsZSh6ZWZfZmlsZSwgbW9kZSwgemluZm8sIHpkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmlsZW9iaj1ub3Qgc2VsZi5fZmlsZVBhc3NlZCkKKyAgICAgICAgICAgIHJldHVybiBaaXBFeHRGaWxlKHplZl9maWxlLCBtb2RlLCB6aW5mbywgemQsIFRydWUpCiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlUGFzc2VkOgotICAgICAgICAgICAgICAgIHplZl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHplZl9maWxlLmNsb3NlKCkKICAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgZXh0cmFjdChzZWxmLCBtZW1iZXIsIHBhdGg9Tm9uZSwgcHdkPU5vbmUpOgpAQCAtMTI5OCw4ICsxNDA1LDggQEAKICAgICAgICAgaWYgemluZm8uZmlsZW5hbWUgaW4gc2VsZi5OYW1lVG9JbmZvOgogICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCiAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCdEdXBsaWNhdGUgbmFtZTogJXInICUgemluZm8uZmlsZW5hbWUsIHN0YWNrbGV2ZWw9MykKLSAgICAgICAgaWYgc2VsZi5tb2RlIG5vdCBpbiAoInciLCAiYSIpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd3cml0ZSgpIHJlcXVpcmVzIG1vZGUgInciIG9yICJhIicpCisgICAgICAgIGlmIHNlbGYubW9kZSBub3QgaW4gKCd3JywgJ3gnLCAnYScpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ3cml0ZSgpIHJlcXVpcmVzIG1vZGUgJ3cnLCAneCcsIG9yICdhJyIpCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAogICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKQEAgLTEzNDYsNjYgKzE0NTMsNzkgQEAKIAogICAgICAgICB6aW5mby5maWxlX3NpemUgPSBzdC5zdF9zaXplCiAgICAgICAgIHppbmZvLmZsYWdfYml0cyA9IDB4MDAKLSAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGJ5dGVzCi0gICAgICAgIGlmIHppbmZvLmNvbXByZXNzX3R5cGUgPT0gWklQX0xaTUE6Ci0gICAgICAgICAgICAjIENvbXByZXNzZWQgZGF0YSBpbmNsdWRlcyBhbiBlbmQtb2Ytc3RyZWFtIChFT1MpIG1hcmtlcgotICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzIHw9IDB4MDIKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fc2Vla2FibGU6CisgICAgICAgICAgICAgICAgc2VsZi5mcC5zZWVrKHNlbGYuc3RhcnRfZGlyKQorICAgICAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGJ5dGVzCisgICAgICAgICAgICBpZiB6aW5mby5jb21wcmVzc190eXBlID09IFpJUF9MWk1BOgorICAgICAgICAgICAgICAgICMgQ29tcHJlc3NlZCBkYXRhIGluY2x1ZGVzIGFuIGVuZC1vZi1zdHJlYW0gKEVPUykgbWFya2VyCisgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzIHw9IDB4MDIKIAotICAgICAgICBzZWxmLl93cml0ZWNoZWNrKHppbmZvKQotICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl93cml0ZWNoZWNrKHppbmZvKQorICAgICAgICAgICAgc2VsZi5fZGlkTW9kaWZ5ID0gVHJ1ZQogCi0gICAgICAgIGlmIGlzZGlyOgotICAgICAgICAgICAgemluZm8uZmlsZV9zaXplID0gMAotICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IDAKLSAgICAgICAgICAgIHppbmZvLkNSQyA9IDAKLSAgICAgICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgfD0gMHgxMCAgIyBNUy1ET1MgZGlyZWN0b3J5IGZsYWcKKyAgICAgICAgICAgIGlmIGlzZGlyOgorICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSA9IDAKKyAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gMAorICAgICAgICAgICAgICAgIHppbmZvLkNSQyA9IDAKKyAgICAgICAgICAgICAgICB6aW5mby5leHRlcm5hbF9hdHRyIHw9IDB4MTAgICMgTVMtRE9TIGRpcmVjdG9yeSBmbGFnCisgICAgICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoemluZm8pCisgICAgICAgICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCisgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKEZhbHNlKSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X2RpciA9IHNlbGYuZnAudGVsbCgpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGNtcHIgPSBfZ2V0X2NvbXByZXNzb3IoemluZm8uY29tcHJlc3NfdHlwZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKKyAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMgfD0gMHgwOAorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAjIE11c3Qgb3ZlcndyaXRlIENSQyBhbmQgc2l6ZXMgd2l0aCBjb3JyZWN0IGRhdGEgbGF0ZXIKKyAgICAgICAgICAgICAgICB6aW5mby5DUkMgPSBDUkMgPSAwCisgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgPSAwCisgICAgICAgICAgICAgICAgIyBDb21wcmVzc2VkIHNpemUgY2FuIGJlIGxhcmdlciB0aGFuIHVuY29tcHJlc3NlZCBzaXplCisgICAgICAgICAgICAgICAgemlwNjQgPSBzZWxmLl9hbGxvd1ppcDY0IGFuZCBcCisgICAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSAqIDEuMDUgPiBaSVA2NF9MSU1JVAorICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCisgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gMAorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoMTAyNCAqIDgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUgPSBmaWxlX3NpemUgKyBsZW4oYnVmKQorICAgICAgICAgICAgICAgICAgICBDUkMgPSBjcmMzMihidWYsIENSQykKKyAgICAgICAgICAgICAgICAgICAgaWYgY21wcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGNtcHIuY29tcHJlc3MoYnVmKQorICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgKyBsZW4oYnVmKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGJ1ZikKKyAgICAgICAgICAgIGlmIGNtcHI6CisgICAgICAgICAgICAgICAgYnVmID0gY21wci5mbHVzaCgpCisgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgKyBsZW4oYnVmKQorICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoYnVmKQorICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBmaWxlX3NpemUKKyAgICAgICAgICAgIHppbmZvLkNSQyA9IENSQworICAgICAgICAgICAgemluZm8uZmlsZV9zaXplID0gZmlsZV9zaXplCisgICAgICAgICAgICBpZiB6aW5mby5mbGFnX2JpdHMgJiAweDA4OgorICAgICAgICAgICAgICAgICMgV3JpdGUgQ1JDIGFuZCBmaWxlIHNpemVzIGFmdGVyIHRoZSBmaWxlIGRhdGEKKyAgICAgICAgICAgICAgICBmbXQgPSAnPExRUScgaWYgemlwNjQgZWxzZSAnPExMTCcKKyAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHN0cnVjdC5wYWNrKGZtdCwgemluZm8uQ1JDLCB6aW5mby5jb21wcmVzc19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplKSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X2RpciA9IHNlbGYuZnAudGVsbCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCB6aXA2NCBhbmQgc2VsZi5fYWxsb3daaXA2NDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlsZV9zaXplID4gWklQNjRfTElNSVQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0ZpbGUgc2l6ZSBoYXMgaW5jcmVhc2VkIGR1cmluZyBjb21wcmVzc2luZycpCisgICAgICAgICAgICAgICAgICAgIGlmIGNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ29tcHJlc3NlZCBzaXplIGxhcmdlciB0aGFuIHVuY29tcHJlc3NlZCBzaXplJykKKyAgICAgICAgICAgICAgICAjIFNlZWsgYmFja3dhcmRzIGFuZCB3cml0ZSBmaWxlIGhlYWRlciAod2hpY2ggd2lsbCBub3cgaW5jbHVkZQorICAgICAgICAgICAgICAgICMgY29ycmVjdCBDUkMgYW5kIGZpbGUgc2l6ZXMpCisgICAgICAgICAgICAgICAgc2VsZi5zdGFydF9kaXIgPSBzZWxmLmZwLnRlbGwoKSAjIFByZXNlcnZlIGN1cnJlbnQgcG9zaXRpb24gaW4gZmlsZQorICAgICAgICAgICAgICAgIHNlbGYuZnAuc2Vlayh6aW5mby5oZWFkZXJfb2Zmc2V0KQorICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCisgICAgICAgICAgICAgICAgc2VsZi5mcC5zZWVrKHNlbGYuc3RhcnRfZGlyKQogICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoemluZm8pCiAgICAgICAgICAgICBzZWxmLk5hbWVUb0luZm9bemluZm8uZmlsZW5hbWVdID0gemluZm8KLSAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcihGYWxzZSkpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBjbXByID0gX2dldF9jb21wcmVzc29yKHppbmZvLmNvbXByZXNzX3R5cGUpCi0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6Ci0gICAgICAgICAgICAjIE11c3Qgb3ZlcndyaXRlIENSQyBhbmQgc2l6ZXMgd2l0aCBjb3JyZWN0IGRhdGEgbGF0ZXIKLSAgICAgICAgICAgIHppbmZvLkNSQyA9IENSQyA9IDAKLSAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplID0gMAotICAgICAgICAgICAgIyBDb21wcmVzc2VkIHNpemUgY2FuIGJlIGxhcmdlciB0aGFuIHVuY29tcHJlc3NlZCBzaXplCi0gICAgICAgICAgICB6aXA2NCA9IHNlbGYuX2FsbG93WmlwNjQgYW5kIFwKLSAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKLSAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCi0gICAgICAgICAgICBmaWxlX3NpemUgPSAwCi0gICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoMTAyNCAqIDgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBmaWxlX3NpemUgPSBmaWxlX3NpemUgKyBsZW4oYnVmKQotICAgICAgICAgICAgICAgIENSQyA9IGNyYzMyKGJ1ZiwgQ1JDKSAmIDB4ZmZmZmZmZmYKLSAgICAgICAgICAgICAgICBpZiBjbXByOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBjbXByLmNvbXByZXNzKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgKyBsZW4oYnVmKQotICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoYnVmKQotICAgICAgICBpZiBjbXByOgotICAgICAgICAgICAgYnVmID0gY21wci5mbHVzaCgpCi0gICAgICAgICAgICBjb21wcmVzc19zaXplID0gY29tcHJlc3Nfc2l6ZSArIGxlbihidWYpCi0gICAgICAgICAgICBzZWxmLmZwLndyaXRlKGJ1ZikKLSAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gZmlsZV9zaXplCi0gICAgICAgIHppbmZvLkNSQyA9IENSQwotICAgICAgICB6aW5mby5maWxlX3NpemUgPSBmaWxlX3NpemUKLSAgICAgICAgaWYgbm90IHppcDY0IGFuZCBzZWxmLl9hbGxvd1ppcDY0OgotICAgICAgICAgICAgaWYgZmlsZV9zaXplID4gWklQNjRfTElNSVQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGaWxlIHNpemUgaGFzIGluY3JlYXNlZCBkdXJpbmcgY29tcHJlc3NpbmcnKQotICAgICAgICAgICAgaWYgY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ29tcHJlc3NlZCBzaXplIGxhcmdlciB0aGFuIHVuY29tcHJlc3NlZCBzaXplJykKLSAgICAgICAgIyBTZWVrIGJhY2t3YXJkcyBhbmQgd3JpdGUgZmlsZSBoZWFkZXIgKHdoaWNoIHdpbGwgbm93IGluY2x1ZGUKLSAgICAgICAgIyBjb3JyZWN0IENSQyBhbmQgZmlsZSBzaXplcykKLSAgICAgICAgcG9zaXRpb24gPSBzZWxmLmZwLnRlbGwoKSAgICAgICAjIFByZXNlcnZlIGN1cnJlbnQgcG9zaXRpb24gaW4gZmlsZQotICAgICAgICBzZWxmLmZwLnNlZWsoemluZm8uaGVhZGVyX29mZnNldCwgMCkKLSAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKHppcDY0KSkKLSAgICAgICAgc2VsZi5mcC5zZWVrKHBvc2l0aW9uLCAwKQotICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZCh6aW5mbykKLSAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCiAKICAgICBkZWYgd3JpdGVzdHIoc2VsZiwgemluZm9fb3JfYXJjbmFtZSwgZGF0YSwgY29tcHJlc3NfdHlwZT1Ob25lKToKICAgICAgICAgIiIiV3JpdGUgYSBmaWxlIGludG8gdGhlIGFyY2hpdmUuICBUaGUgY29udGVudHMgaXMgJ2RhdGEnLCB3aGljaApAQCAtMTQzMiwxNTQgKzE1NTIsMTcxIEBACiAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogCiAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSA9IGxlbihkYXRhKSAgICAgICAgICAgICMgVW5jb21wcmVzc2VkIHNpemUKLSAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGRhdGEKLSAgICAgICAgaWYgY29tcHJlc3NfdHlwZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBjb21wcmVzc190eXBlCi0gICAgICAgIGlmIHppbmZvLmNvbXByZXNzX3R5cGUgPT0gWklQX0xaTUE6Ci0gICAgICAgICAgICAjIENvbXByZXNzZWQgZGF0YSBpbmNsdWRlcyBhbiBlbmQtb2Ytc3RyZWFtIChFT1MpIG1hcmtlcgotICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzIHw9IDB4MDIKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fc2Vla2FibGU6CisgICAgICAgICAgICAgICAgc2VsZi5mcC5zZWVrKHNlbGYuc3RhcnRfZGlyKQorICAgICAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGRhdGEKKyAgICAgICAgICAgIGlmIGNvbXByZXNzX3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IGNvbXByZXNzX3R5cGUKKyAgICAgICAgICAgIHppbmZvLmhlYWRlcl9vZmZzZXQgPSBzZWxmLmZwLnRlbGwoKSAgICAjIFN0YXJ0IG9mIGhlYWRlciBkYXRhCisgICAgICAgICAgICBpZiBjb21wcmVzc190eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBjb21wcmVzc190eXBlCisgICAgICAgICAgICBpZiB6aW5mby5jb21wcmVzc190eXBlID09IFpJUF9MWk1BOgorICAgICAgICAgICAgICAgICMgQ29tcHJlc3NlZCBkYXRhIGluY2x1ZGVzIGFuIGVuZC1vZi1zdHJlYW0gKEVPUykgbWFya2VyCisgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzIHw9IDB4MDIKIAotICAgICAgICBzZWxmLl93cml0ZWNoZWNrKHppbmZvKQotICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCi0gICAgICAgIHppbmZvLkNSQyA9IGNyYzMyKGRhdGEpICYgMHhmZmZmZmZmZiAgICAgICAjIENSQy0zMiBjaGVja3N1bQotICAgICAgICBjbyA9IF9nZXRfY29tcHJlc3Nvcih6aW5mby5jb21wcmVzc190eXBlKQotICAgICAgICBpZiBjbzoKLSAgICAgICAgICAgIGRhdGEgPSBjby5jb21wcmVzcyhkYXRhKSArIGNvLmZsdXNoKCkKLSAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBsZW4oZGF0YSkgICAgIyBDb21wcmVzc2VkIHNpemUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSB6aW5mby5maWxlX3NpemUKLSAgICAgICAgemlwNjQgPSB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVCBvciBcCi0gICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKLSAgICAgICAgaWYgemlwNjQgYW5kIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgotICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKCJGaWxlc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQotICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQotICAgICAgICBzZWxmLmZwLndyaXRlKGRhdGEpCi0gICAgICAgIGlmIHppbmZvLmZsYWdfYml0cyAmIDB4MDg6Ci0gICAgICAgICAgICAjIFdyaXRlIENSQyBhbmQgZmlsZSBzaXplcyBhZnRlciB0aGUgZmlsZSBkYXRhCi0gICAgICAgICAgICBmbXQgPSAnPExRUScgaWYgemlwNjQgZWxzZSAnPExMTCcKLSAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoc3RydWN0LnBhY2soZm10LCB6aW5mby5DUkMsIHppbmZvLmNvbXByZXNzX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSkpCi0gICAgICAgIHNlbGYuZnAuZmx1c2goKQotICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZCh6aW5mbykKLSAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCisgICAgICAgICAgICBzZWxmLl93cml0ZWNoZWNrKHppbmZvKQorICAgICAgICAgICAgc2VsZi5fZGlkTW9kaWZ5ID0gVHJ1ZQorICAgICAgICAgICAgemluZm8uQ1JDID0gY3JjMzIoZGF0YSkgICAgICAgIyBDUkMtMzIgY2hlY2tzdW0KKyAgICAgICAgICAgIGNvID0gX2dldF9jb21wcmVzc29yKHppbmZvLmNvbXByZXNzX3R5cGUpCisgICAgICAgICAgICBpZiBjbzoKKyAgICAgICAgICAgICAgICBkYXRhID0gY28uY29tcHJlc3MoZGF0YSkgKyBjby5mbHVzaCgpCisgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGxlbihkYXRhKSAgICAjIENvbXByZXNzZWQgc2l6ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gemluZm8uZmlsZV9zaXplCisgICAgICAgICAgICB6aXA2NCA9IHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIFwKKyAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKKyAgICAgICAgICAgIGlmIHppcDY0IGFuZCBub3Qgc2VsZi5fYWxsb3daaXA2NDoKKyAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoIkZpbGVzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCisgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQorICAgICAgICAgICAgc2VsZi5mcC53cml0ZShkYXRhKQorICAgICAgICAgICAgaWYgemluZm8uZmxhZ19iaXRzICYgMHgwODoKKyAgICAgICAgICAgICAgICAjIFdyaXRlIENSQyBhbmQgZmlsZSBzaXplcyBhZnRlciB0aGUgZmlsZSBkYXRhCisgICAgICAgICAgICAgICAgZm10ID0gJzxMUVEnIGlmIHppcDY0IGVsc2UgJzxMTEwnCisgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShzdHJ1Y3QucGFjayhmbXQsIHppbmZvLkNSQywgemluZm8uY29tcHJlc3Nfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSkpCisgICAgICAgICAgICBzZWxmLmZwLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuc3RhcnRfZGlyID0gc2VsZi5mcC50ZWxsKCkKKyAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKHppbmZvKQorICAgICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgIiIiQ2FsbCB0aGUgImNsb3NlKCkiIG1ldGhvZCBpbiBjYXNlIHRoZSB1c2VyIGZvcmdvdC4iIiIKICAgICAgICAgc2VsZi5jbG9zZSgpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgICIiIkNsb3NlIHRoZSBmaWxlLCBhbmQgZm9yIG1vZGUgInciIGFuZCAiYSIgd3JpdGUgdGhlIGVuZGluZworICAgICAgICAiIiJDbG9zZSB0aGUgZmlsZSwgYW5kIGZvciBtb2RlICd3JywgJ3gnIGFuZCAnYScgd3JpdGUgdGhlIGVuZGluZwogICAgICAgICByZWNvcmRzLiIiIgogICAgICAgICBpZiBzZWxmLmZwIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBzZWxmLm1vZGUgaW4gKCJ3IiwgImEiKSBhbmQgc2VsZi5fZGlkTW9kaWZ5OiAjIHdyaXRlIGVuZGluZyByZWNvcmRzCi0gICAgICAgICAgICAgICAgcG9zMSA9IHNlbGYuZnAudGVsbCgpCi0gICAgICAgICAgICAgICAgZm9yIHppbmZvIGluIHNlbGYuZmlsZWxpc3Q6ICAgICAgICAgIyB3cml0ZSBjZW50cmFsIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICBkdCA9IHppbmZvLmRhdGVfdGltZQotICAgICAgICAgICAgICAgICAgICBkb3NkYXRlID0gKGR0WzBdIC0gMTk4MCkgPDwgOSB8IGR0WzFdIDw8IDUgfCBkdFsyXQotICAgICAgICAgICAgICAgICAgICBkb3N0aW1lID0gZHRbM10gPDwgMTEgfCBkdFs0XSA8PCA1IHwgKGR0WzVdIC8vIDIpCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhID0gW10KLSAgICAgICAgICAgICAgICAgICAgaWYgemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQgXAotICAgICAgICAgICAgICAgICAgICAgICBvciB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5hcHBlbmQoemluZm8uZmlsZV9zaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmNvbXByZXNzX3NpemUpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUgPSAweGZmZmZmZmZmCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplID0gMHhmZmZmZmZmZgotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gemluZm8uZmlsZV9zaXplCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplID0gemluZm8uY29tcHJlc3Nfc2l6ZQotCi0gICAgICAgICAgICAgICAgICAgIGlmIHppbmZvLmhlYWRlcl9vZmZzZXQgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmFwcGVuZCh6aW5mby5oZWFkZXJfb2Zmc2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCA9IDB4ZmZmZmZmZmYKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQgPSB6aW5mby5oZWFkZXJfb2Zmc2V0Ci0KLSAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGF0YSA9IHppbmZvLmV4dHJhCi0gICAgICAgICAgICAgICAgICAgIG1pbl92ZXJzaW9uID0gMAotICAgICAgICAgICAgICAgICAgICBpZiBleHRyYToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgQXBwZW5kIGEgWklQNjQgZmllbGQgdG8gdGhlIGV4dHJhJ3MKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RhdGEgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEhIJyArICdRJypsZW4oZXh0cmEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKLQotICAgICAgICAgICAgICAgICAgICAgICAgbWluX3ZlcnNpb24gPSBaSVA2NF9WRVJTSU9OCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgemluZm8uY29tcHJlc3NfdHlwZSA9PSBaSVBfQlpJUDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW5fdmVyc2lvbiA9IG1heChCWklQMl9WRVJTSU9OLCBtaW5fdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgZWxpZiB6aW5mby5jb21wcmVzc190eXBlID09IFpJUF9MWk1BOgotICAgICAgICAgICAgICAgICAgICAgICAgbWluX3ZlcnNpb24gPSBtYXgoTFpNQV9WRVJTSU9OLCBtaW5fdmVyc2lvbikKLQotICAgICAgICAgICAgICAgICAgICBleHRyYWN0X3ZlcnNpb24gPSBtYXgobWluX3ZlcnNpb24sIHppbmZvLmV4dHJhY3RfdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlX3ZlcnNpb24gPSBtYXgobWluX3ZlcnNpb24sIHppbmZvLmNyZWF0ZV92ZXJzaW9uKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gemluZm8uX2VuY29kZUZpbGVuYW1lRmxhZ3MoKQotICAgICAgICAgICAgICAgICAgICAgICAgY2VudGRpciA9IHN0cnVjdC5wYWNrKHN0cnVjdENlbnRyYWxEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoKHN0cnVjdENlbnRyYWxEaXIsIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih6aW5mby5maWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCksIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoY2VudGRpcikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShleHRyYV9kYXRhKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLmNvbW1lbnQpCi0KLSAgICAgICAgICAgICAgICBwb3MyID0gc2VsZi5mcC50ZWxsKCkKLSAgICAgICAgICAgICAgICAjIFdyaXRlIGVuZC1vZi16aXAtYXJjaGl2ZSByZWNvcmQKLSAgICAgICAgICAgICAgICBjZW50RGlyQ291bnQgPSBsZW4oc2VsZi5maWxlbGlzdCkKLSAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSA9IHBvczIgLSBwb3MxCi0gICAgICAgICAgICAgICAgY2VudERpck9mZnNldCA9IHBvczEKLSAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBjZW50RGlyQ291bnQgPiBaSVBfRklMRUNPVU5UX0xJTUlUOgotICAgICAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9ICJGaWxlcyBjb3VudCIKLSAgICAgICAgICAgICAgICBlbGlmIGNlbnREaXJPZmZzZXQgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiQ2VudHJhbCBkaXJlY3Rvcnkgb2Zmc2V0IgotICAgICAgICAgICAgICAgIGVsaWYgY2VudERpclNpemUgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiQ2VudHJhbCBkaXJlY3Rvcnkgc2l6ZSIKLSAgICAgICAgICAgICAgICBpZiByZXF1aXJlc196aXA2NDoKLSAgICAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHdyaXRlIHRoZSBaSVA2NCBlbmQtb2YtYXJjaGl2ZSByZWNvcmRzCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKHJlcXVpcmVzX3ppcDY0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCi0gICAgICAgICAgICAgICAgICAgIHppcDY0ZW5kcmVjID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjQsIHN0cmluZ0VuZEFyY2hpdmU2NCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDQ0LCA0NSwgNDUsIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRlbmRyZWMpCi0KLSAgICAgICAgICAgICAgICAgICAgemlwNjRsb2NyZWMgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NExvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdFbmRBcmNoaXZlNjRMb2NhdG9yLCAwLCBwb3MyLCAxKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppcDY0bG9jcmVjKQotICAgICAgICAgICAgICAgICAgICBjZW50RGlyQ291bnQgPSBtaW4oY2VudERpckNvdW50LCAweEZGRkYpCi0gICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplID0gbWluKGNlbnREaXJTaXplLCAweEZGRkZGRkZGKQotICAgICAgICAgICAgICAgICAgICBjZW50RGlyT2Zmc2V0ID0gbWluKGNlbnREaXJPZmZzZXQsIDB4RkZGRkZGRkYpCi0KLSAgICAgICAgICAgICAgICBlbmRyZWMgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RFbmRBcmNoaXZlLCBzdHJpbmdFbmRBcmNoaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0LCBsZW4oc2VsZi5fY29tbWVudCkpCi0gICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShlbmRyZWMpCi0gICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShzZWxmLl9jb21tZW50KQotICAgICAgICAgICAgICAgIHNlbGYuZnAuZmx1c2goKQorICAgICAgICAgICAgaWYgc2VsZi5tb2RlIGluICgndycsICd4JywgJ2EnKSBhbmQgc2VsZi5fZGlkTW9kaWZ5OiAjIHdyaXRlIGVuZGluZyByZWNvcmRzCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9zZWVrYWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAuc2VlayhzZWxmLnN0YXJ0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfZW5kX3JlY29yZCgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmcCA9IHNlbGYuZnAKICAgICAgICAgICAgIHNlbGYuZnAgPSBOb25lCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZVBhc3NlZDoKLSAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9mcGNsb3NlKGZwKQorCisgICAgZGVmIF93cml0ZV9lbmRfcmVjb3JkKHNlbGYpOgorICAgICAgICBmb3IgemluZm8gaW4gc2VsZi5maWxlbGlzdDogICAgICAgICAjIHdyaXRlIGNlbnRyYWwgZGlyZWN0b3J5CisgICAgICAgICAgICBkdCA9IHppbmZvLmRhdGVfdGltZQorICAgICAgICAgICAgZG9zZGF0ZSA9IChkdFswXSAtIDE5ODApIDw8IDkgfCBkdFsxXSA8PCA1IHwgZHRbMl0KKyAgICAgICAgICAgIGRvc3RpbWUgPSBkdFszXSA8PCAxMSB8IGR0WzRdIDw8IDUgfCAoZHRbNV0gLy8gMikKKyAgICAgICAgICAgIGV4dHJhID0gW10KKyAgICAgICAgICAgIGlmIHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIFwKKyAgICAgICAgICAgICAgIG9yIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICBleHRyYS5hcHBlbmQoemluZm8uZmlsZV9zaXplKQorICAgICAgICAgICAgICAgIGV4dHJhLmFwcGVuZCh6aW5mby5jb21wcmVzc19zaXplKQorICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IDB4ZmZmZmZmZmYKKyAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplID0gMHhmZmZmZmZmZgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlX3NpemUgPSB6aW5mby5maWxlX3NpemUKKyAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplID0gemluZm8uY29tcHJlc3Nfc2l6ZQorCisgICAgICAgICAgICBpZiB6aW5mby5oZWFkZXJfb2Zmc2V0ID4gWklQNjRfTElNSVQ6CisgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmhlYWRlcl9vZmZzZXQpCisgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCA9IDB4ZmZmZmZmZmYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCA9IHppbmZvLmhlYWRlcl9vZmZzZXQKKworICAgICAgICAgICAgZXh0cmFfZGF0YSA9IHppbmZvLmV4dHJhCisgICAgICAgICAgICBtaW5fdmVyc2lvbiA9IDAKKyAgICAgICAgICAgIGlmIGV4dHJhOgorICAgICAgICAgICAgICAgICMgQXBwZW5kIGEgWklQNjQgZmllbGQgdG8gdGhlIGV4dHJhJ3MKKyAgICAgICAgICAgICAgICBleHRyYV9kYXRhID0gc3RydWN0LnBhY2soCisgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCisgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKKworICAgICAgICAgICAgICAgIG1pbl92ZXJzaW9uID0gWklQNjRfVkVSU0lPTgorCisgICAgICAgICAgICBpZiB6aW5mby5jb21wcmVzc190eXBlID09IFpJUF9CWklQMjoKKyAgICAgICAgICAgICAgICBtaW5fdmVyc2lvbiA9IG1heChCWklQMl9WRVJTSU9OLCBtaW5fdmVyc2lvbikKKyAgICAgICAgICAgIGVsaWYgemluZm8uY29tcHJlc3NfdHlwZSA9PSBaSVBfTFpNQToKKyAgICAgICAgICAgICAgICBtaW5fdmVyc2lvbiA9IG1heChMWk1BX1ZFUlNJT04sIG1pbl92ZXJzaW9uKQorCisgICAgICAgICAgICBleHRyYWN0X3ZlcnNpb24gPSBtYXgobWluX3ZlcnNpb24sIHppbmZvLmV4dHJhY3RfdmVyc2lvbikKKyAgICAgICAgICAgIGNyZWF0ZV92ZXJzaW9uID0gbWF4KG1pbl92ZXJzaW9uLCB6aW5mby5jcmVhdGVfdmVyc2lvbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gemluZm8uX2VuY29kZUZpbGVuYW1lRmxhZ3MoKQorICAgICAgICAgICAgICAgIGNlbnRkaXIgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RDZW50cmFsRGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpCisgICAgICAgICAgICBleGNlcHQgRGVwcmVjYXRpb25XYXJuaW5nOgorICAgICAgICAgICAgICAgIHByaW50KChzdHJ1Y3RDZW50cmFsRGlyLCBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgbGVuKHppbmZvLmZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoY2VudGRpcikKKyAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoZmlsZW5hbWUpCisgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGV4dHJhX2RhdGEpCisgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLmNvbW1lbnQpCisKKyAgICAgICAgcG9zMiA9IHNlbGYuZnAudGVsbCgpCisgICAgICAgICMgV3JpdGUgZW5kLW9mLXppcC1hcmNoaXZlIHJlY29yZAorICAgICAgICBjZW50RGlyQ291bnQgPSBsZW4oc2VsZi5maWxlbGlzdCkKKyAgICAgICAgY2VudERpclNpemUgPSBwb3MyIC0gc2VsZi5zdGFydF9kaXIKKyAgICAgICAgY2VudERpck9mZnNldCA9IHNlbGYuc3RhcnRfZGlyCisgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gTm9uZQorICAgICAgICBpZiBjZW50RGlyQ291bnQgPiBaSVBfRklMRUNPVU5UX0xJTUlUOgorICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiRmlsZXMgY291bnQiCisgICAgICAgIGVsaWYgY2VudERpck9mZnNldCA+IFpJUDY0X0xJTUlUOgorICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiQ2VudHJhbCBkaXJlY3Rvcnkgb2Zmc2V0IgorICAgICAgICBlbGlmIGNlbnREaXJTaXplID4gWklQNjRfTElNSVQ6CisgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9ICJDZW50cmFsIGRpcmVjdG9yeSBzaXplIgorICAgICAgICBpZiByZXF1aXJlc196aXA2NDoKKyAgICAgICAgICAgICMgTmVlZCB0byB3cml0ZSB0aGUgWklQNjQgZW5kLW9mLWFyY2hpdmUgcmVjb3JkcworICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6CisgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKHJlcXVpcmVzX3ppcDY0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQorICAgICAgICAgICAgemlwNjRlbmRyZWMgPSBzdHJ1Y3QucGFjaygKKyAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjQsIHN0cmluZ0VuZEFyY2hpdmU2NCwKKyAgICAgICAgICAgICAgICA0NCwgNDUsIDQ1LCAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKKyAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCkKKyAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRlbmRyZWMpCisKKyAgICAgICAgICAgIHppcDY0bG9jcmVjID0gc3RydWN0LnBhY2soCisgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0TG9jYXRvciwKKyAgICAgICAgICAgICAgICBzdHJpbmdFbmRBcmNoaXZlNjRMb2NhdG9yLCAwLCBwb3MyLCAxKQorICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aXA2NGxvY3JlYykKKyAgICAgICAgICAgIGNlbnREaXJDb3VudCA9IG1pbihjZW50RGlyQ291bnQsIDB4RkZGRikKKyAgICAgICAgICAgIGNlbnREaXJTaXplID0gbWluKGNlbnREaXJTaXplLCAweEZGRkZGRkZGKQorICAgICAgICAgICAgY2VudERpck9mZnNldCA9IG1pbihjZW50RGlyT2Zmc2V0LCAweEZGRkZGRkZGKQorCisgICAgICAgIGVuZHJlYyA9IHN0cnVjdC5wYWNrKHN0cnVjdEVuZEFyY2hpdmUsIHN0cmluZ0VuZEFyY2hpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCwgbGVuKHNlbGYuX2NvbW1lbnQpKQorICAgICAgICBzZWxmLmZwLndyaXRlKGVuZHJlYykKKyAgICAgICAgc2VsZi5mcC53cml0ZShzZWxmLl9jb21tZW50KQorICAgICAgICBzZWxmLmZwLmZsdXNoKCkKKworICAgIGRlZiBfZnBjbG9zZShzZWxmLCBmcCk6CisgICAgICAgIGFzc2VydCBzZWxmLl9maWxlUmVmQ250ID4gMAorICAgICAgICBzZWxmLl9maWxlUmVmQ250IC09IDEKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVSZWZDbnQgYW5kIG5vdCBzZWxmLl9maWxlUGFzc2VkOgorICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAKIGNsYXNzIFB5WmlwRmlsZShaaXBGaWxlKToKQEAgLTE1OTksNyArMTczNiw3IEBACiAgICAgICAgIHRoZSBtb2R1bGVzIGludG8gdGhlIGFyY2hpdmUuICBJZiBwYXRobmFtZSBpcyBhIHBsYWluCiAgICAgICAgIGRpcmVjdG9yeSwgbGlzdGRpciAqLnB5IGFuZCBlbnRlciBhbGwgbW9kdWxlcy4gIEVsc2UsIHBhdGhuYW1lCiAgICAgICAgIG11c3QgYmUgYSBQeXRob24gKi5weSBmaWxlIGFuZCB0aGUgbW9kdWxlIHdpbGwgYmUgcHV0IGludG8gdGhlCi0gICAgICAgIGFyY2hpdmUuICBBZGRlZCBtb2R1bGVzIGFyZSBhbHdheXMgbW9kdWxlLnB5byBvciBtb2R1bGUucHljLgorICAgICAgICBhcmNoaXZlLiAgQWRkZWQgbW9kdWxlcyBhcmUgYWx3YXlzIG1vZHVsZS5weWMuCiAgICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgY29tcGlsZSB0aGUgbW9kdWxlLnB5IGludG8gbW9kdWxlLnB5YyBpZgogICAgICAgICBuZWNlc3NhcnkuCiAgICAgICAgIElmIGZpbHRlcmZ1bmMocGF0aG5hbWUpIGlzIGdpdmVuLCBpdCBpcyBjYWxsZWQgd2l0aCBldmVyeSBhcmd1bWVudC4KQEAgLTE2OTIsNDYgKzE4MjksNTkgQEAKIAogICAgICAgICBmaWxlX3B5ICA9IHBhdGhuYW1lICsgIi5weSIKICAgICAgICAgZmlsZV9weWMgPSBwYXRobmFtZSArICIucHljIgotICAgICAgICBmaWxlX3B5byA9IHBhdGhuYW1lICsgIi5weW8iCi0gICAgICAgIHB5Y2FjaGVfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgVHJ1ZSkKLSAgICAgICAgcHljYWNoZV9weW8gPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBGYWxzZSkKKyAgICAgICAgcHljYWNoZV9vcHQwID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgb3B0aW1pemF0aW9uPScnKQorICAgICAgICBweWNhY2hlX29wdDEgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBvcHRpbWl6YXRpb249MSkKKyAgICAgICAgcHljYWNoZV9vcHQyID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgb3B0aW1pemF0aW9uPTIpCiAgICAgICAgIGlmIHNlbGYuX29wdGltaXplID09IC0xOgogICAgICAgICAgICAgIyBsZWdhY3kgbW9kZTogdXNlIHdoYXRldmVyIGZpbGUgaXMgcHJlc2VudAotICAgICAgICAgICAgaWYgKG9zLnBhdGguaXNmaWxlKGZpbGVfcHlvKSBhbmQKLSAgICAgICAgICAgICAgICBvcy5zdGF0KGZpbGVfcHlvKS5zdF9tdGltZSA+PSBvcy5zdGF0KGZpbGVfcHkpLnN0X210aW1lKToKLSAgICAgICAgICAgICAgICAjIFVzZSAucHlvIGZpbGUuCi0gICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZuYW1lID0gZmlsZV9weW8KLSAgICAgICAgICAgIGVsaWYgKG9zLnBhdGguaXNmaWxlKGZpbGVfcHljKSBhbmQKKyAgICAgICAgICAgIGlmIChvcy5wYXRoLmlzZmlsZShmaWxlX3B5YykgYW5kCiAgICAgICAgICAgICAgICAgICBvcy5zdGF0KGZpbGVfcHljKS5zdF9tdGltZSA+PSBvcy5zdGF0KGZpbGVfcHkpLnN0X210aW1lKToKICAgICAgICAgICAgICAgICAjIFVzZSAucHljIGZpbGUuCiAgICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZuYW1lID0gZmlsZV9weWMKLSAgICAgICAgICAgIGVsaWYgKG9zLnBhdGguaXNmaWxlKHB5Y2FjaGVfcHljKSBhbmQKLSAgICAgICAgICAgICAgICAgIG9zLnN0YXQocHljYWNoZV9weWMpLnN0X210aW1lID49IG9zLnN0YXQoZmlsZV9weSkuc3RfbXRpbWUpOgorICAgICAgICAgICAgZWxpZiAob3MucGF0aC5pc2ZpbGUocHljYWNoZV9vcHQwKSBhbmQKKyAgICAgICAgICAgICAgICAgIG9zLnN0YXQocHljYWNoZV9vcHQwKS5zdF9tdGltZSA+PSBvcy5zdGF0KGZpbGVfcHkpLnN0X210aW1lKToKICAgICAgICAgICAgICAgICAjIFVzZSB0aGUgX19weWNhY2hlX18vKi5weWMgZmlsZSwgYnV0IHdyaXRlIGl0IHRvIHRoZSBsZWdhY3kgcHljCiAgICAgICAgICAgICAgICAgIyBmaWxlIG5hbWUgaW4gdGhlIGFyY2hpdmUuCi0gICAgICAgICAgICAgICAgZm5hbWUgPSBweWNhY2hlX3B5YworICAgICAgICAgICAgICAgIGZuYW1lID0gcHljYWNoZV9vcHQwCiAgICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZpbGVfcHljCi0gICAgICAgICAgICBlbGlmIChvcy5wYXRoLmlzZmlsZShweWNhY2hlX3B5bykgYW5kCi0gICAgICAgICAgICAgICAgICBvcy5zdGF0KHB5Y2FjaGVfcHlvKS5zdF9tdGltZSA+PSBvcy5zdGF0KGZpbGVfcHkpLnN0X210aW1lKToKLSAgICAgICAgICAgICAgICAjIFVzZSB0aGUgX19weWNhY2hlX18vKi5weW8gZmlsZSwgYnV0IHdyaXRlIGl0IHRvIHRoZSBsZWdhY3kgcHlvCisgICAgICAgICAgICBlbGlmIChvcy5wYXRoLmlzZmlsZShweWNhY2hlX29wdDEpIGFuZAorICAgICAgICAgICAgICAgICAgb3Muc3RhdChweWNhY2hlX29wdDEpLnN0X210aW1lID49IG9zLnN0YXQoZmlsZV9weSkuc3RfbXRpbWUpOgorICAgICAgICAgICAgICAgICMgVXNlIHRoZSBfX3B5Y2FjaGVfXy8qLnB5YyBmaWxlLCBidXQgd3JpdGUgaXQgdG8gdGhlIGxlZ2FjeSBweWMKICAgICAgICAgICAgICAgICAjIGZpbGUgbmFtZSBpbiB0aGUgYXJjaGl2ZS4KLSAgICAgICAgICAgICAgICBmbmFtZSA9IHB5Y2FjaGVfcHlvCi0gICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZpbGVfcHlvCisgICAgICAgICAgICAgICAgZm5hbWUgPSBweWNhY2hlX29wdDEKKyAgICAgICAgICAgICAgICBhcmNuYW1lID0gZmlsZV9weWMKKyAgICAgICAgICAgIGVsaWYgKG9zLnBhdGguaXNmaWxlKHB5Y2FjaGVfb3B0MikgYW5kCisgICAgICAgICAgICAgICAgICBvcy5zdGF0KHB5Y2FjaGVfb3B0Mikuc3RfbXRpbWUgPj0gb3Muc3RhdChmaWxlX3B5KS5zdF9tdGltZSk6CisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIF9fcHljYWNoZV9fLyoucHljIGZpbGUsIGJ1dCB3cml0ZSBpdCB0byB0aGUgbGVnYWN5IHB5YworICAgICAgICAgICAgICAgICMgZmlsZSBuYW1lIGluIHRoZSBhcmNoaXZlLgorICAgICAgICAgICAgICAgIGZuYW1lID0gcHljYWNoZV9vcHQyCisgICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZpbGVfcHljCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgQ29tcGlsZSBweSBpbnRvIFBFUCAzMTQ3IHB5YyBmaWxlLgogICAgICAgICAgICAgICAgIGlmIF9jb21waWxlKGZpbGVfcHkpOgotICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IChweWNhY2hlX3B5YyBpZiBfX2RlYnVnX18gZWxzZSBweWNhY2hlX3B5bykKLSAgICAgICAgICAgICAgICAgICAgYXJjbmFtZSA9IChmaWxlX3B5YyBpZiBfX2RlYnVnX18gZWxzZSBmaWxlX3B5bykKKyAgICAgICAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IHB5Y2FjaGVfb3B0MAorICAgICAgICAgICAgICAgICAgICBlbGlmIHN5cy5mbGFncy5vcHRpbWl6ZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUgPSBweWNhY2hlX29wdDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lID0gcHljYWNoZV9vcHQyCisgICAgICAgICAgICAgICAgICAgIGFyY25hbWUgPSBmaWxlX3B5YwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGZuYW1lID0gYXJjbmFtZSA9IGZpbGVfcHkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgbmV3IG1vZGU6IHVzZSBnaXZlbiBvcHRpbWl6YXRpb24gbGV2ZWwKICAgICAgICAgICAgIGlmIHNlbGYuX29wdGltaXplID09IDA6Ci0gICAgICAgICAgICAgICAgZm5hbWUgPSBweWNhY2hlX3B5YworICAgICAgICAgICAgICAgIGZuYW1lID0gcHljYWNoZV9vcHQwCiAgICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZpbGVfcHljCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZuYW1lID0gcHljYWNoZV9weW8KLSAgICAgICAgICAgICAgICBhcmNuYW1lID0gZmlsZV9weW8KKyAgICAgICAgICAgICAgICBhcmNuYW1lID0gZmlsZV9weWMKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcHRpbWl6ZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IHB5Y2FjaGVfb3B0MQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fb3B0aW1pemUgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgZm5hbWUgPSBweWNhY2hlX29wdDIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiaW52YWxpZCB2YWx1ZSBmb3IgJ29wdGltaXplJzogeyFyfSIuZm9ybWF0KHNlbGYuX29wdGltaXplKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKICAgICAgICAgICAgIGlmIG5vdCAob3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZAogICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KGZuYW1lKS5zdF9tdGltZSA+PSBvcy5zdGF0KGZpbGVfcHkpLnN0X210aW1lKToKICAgICAgICAgICAgICAgICBpZiBub3QgX2NvbXBpbGUoZmlsZV9weSwgb3B0aW1pemU9c2VsZi5fb3B0aW1pemUpOgpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQgYi9NYWMvQnVpbGRTY3JpcHQvUkVBRE1FLnR4dAppbmRleCBkYjY4N2JlLi5mOGIyNWZhIDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvUkVBRE1FLnR4dAorKysgYi9NYWMvQnVpbGRTY3JpcHQvUkVBRE1FLnR4dApAQCAtMSwyNSArMSwxNSBAQAogQnVpbGRpbmcgYSBQeXRob24gTWFjIE9TIFggZGlzdHJpYnV0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGBgYnVpbGQtaW5zdGFsbGVyLnB5YGAgc2NyaXB0IGNyZWF0ZXMgUHl0aG9uIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZwotY2VydGFpbiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMgYXMgbmVjZXNzYXJ5LiAgSXQgYnVpbGRzIGEgY29tcGxldGUgCi1mcmFtZXdvcmstYmFzZWQgUHl0aG9uIG91dC1vZi10cmVlLCBpbnN0YWxscyBpdCBpbiBhIGZ1bm55IHBsYWNlIHdpdGggCi0kREVTVFJPT1QsIG1hc3NhZ2VzIHRoYXQgaW5zdGFsbGF0aW9uIHRvIHJlbW92ZSAucHljIGZpbGVzIGFuZCBzdWNoLCBjcmVhdGVzIAotYW4gSW5zdGFsbGVyIHBhY2thZ2UgZnJvbSB0aGUgaW5zdGFsbGF0aW9uIHBsdXMgb3RoZXIgZmlsZXMgaW4gYGByZXNvdXJjZXNgYCAKK1RoZSBgYGJ1aWxkLWluc3RhbGwucHlgYCBzY3JpcHQgY3JlYXRlcyBQeXRob24gZGlzdHJpYnV0aW9ucywgaW5jbHVkaW5nCitjZXJ0YWluIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBhcyBuZWNlc3NhcnkuICBJdCBidWlsZHMgYSBjb21wbGV0ZQorZnJhbWV3b3JrLWJhc2VkIFB5dGhvbiBvdXQtb2YtdHJlZSwgaW5zdGFsbHMgaXQgaW4gYSBmdW5ueSBwbGFjZSB3aXRoCiskREVTVFJPT1QsIG1hc3NhZ2VzIHRoYXQgaW5zdGFsbGF0aW9uIHRvIHJlbW92ZSAucHljIGZpbGVzIGFuZCBzdWNoLCBjcmVhdGVzCithbiBJbnN0YWxsZXIgcGFja2FnZSBmcm9tIHRoZSBpbnN0YWxsYXRpb24gcGx1cyBvdGhlciBmaWxlcyBpbiBgYHJlc291cmNlc2BgCiBhbmQgYGBzY3JpcHRzYGAgYW5kIHBsYWNlZCB0aGF0IG9uIGEgYGAuZG1nYGAgZGlzayBpbWFnZS4KIAotVGhpcyBpbnN0YWxsZXJzIGJ1aWx0IGJ5IHRoaXMgc2NyaXB0IGFyZSBsZWdhY3kgYnVuZGxlIGluc3RhbGxlcnMgdGhhdCBoYXZlCi1iZWVuIHN1cHBvcnRlZCBmcm9tIHRoZSBlYXJseSBkYXlzIG9mIE9TIFguICBJbiBwYXJ0aWN1bGFyLCB0aGV5IGFyZSBzdXBwb3J0ZWQKLW9uIE9TIFggMTAuMy45LCB0aGUgZWFybGllc3Qgc3VwcG9ydGVkIHJlbGVhc2UgZm9yIGJ1aWxkcyBmcm9tIHRoaXMgc2NyaXB0LgotCi1CZWdpbm5pbmcgd2l0aCBQeXRob24gMy40LjIsIFBTRiBwcmFjdGljZSBpcyB0byBidWlsZCB0d28gaW5zdGFsbGVyIHZhcmlhbnRzCi11c2luZyB0aGUgbmV3ZXIgZmxhdCBwYWNrYWdlIGZvcm1hdCwgc3VwcG9ydGVkIG9uIDEwLjUrLCBhbmQgc2lnbmVkIHdpdGggdGhlCi1idWlsZGVyJ3MgQXBwbGUgZGV2ZWxvcGVyIGtleSwgYWxsb3dpbmcgZG93bmxvYWRlZCBwYWNrYWdlcyB0byBzYXRpc2Z5IEFwcGxlJ3MKLWRlZmF1bHQgR2F0ZWtlZXBlciBwb2xpY3kgKGUuZy4gc3RhcnRpbmcgd2l0aCAxMC44LCBBcHBsZSBzdG9yZSBkb3dubG9hZHMgYW5kCi1BcHBsZSBkZXZlbG9wZXIgSUQgc2lnbmVkIGFwcHMgYW5kIGluc3RhbGxlciBwYWNrYWdlcykuICBUaGUgcHJvY2VzcyBmb3IKLXRyYW5zZm9ybWluZyB0aGUgb3V0cHV0IGJ1aWxkIGFydGlmYWN0cyBpbnRvIHNpZ25lZCBmbGF0IHBhY2thZ2VzIGlzIG5vdAoteWV0IGludGVncmF0ZWQgaW50byBgYGJ1aWxkLWluc3RhbGxlci5weWBgLiAgVGhlIHN0ZXBzIHByaW9yIHRvIHRoZSBmbGF0Ci1wYWNrYWdlIGNyZWF0aW9uIGFyZSB0aGUgc2FtZSBhcyBmb3IgMy40LjEgYmVsb3cuCitGb3IgUHl0aG9uIDMuNC4wLCBQU0YgcHJhY3RpY2UgaXMgdG8gYnVpbGQgdHdvIGluc3RhbGxlciB2YXJpYW50cworZm9yIGVhY2ggcmVsZWFzZS4KIAogMS4gIDMyLWJpdC1vbmx5LCBpMzg2IGFuZCBQUEMgdW5pdmVyc2FsLCBjYXBhYmxlIG9uIHJ1bm5pbmcgb24gYWxsIG1hY2hpbmVzCiAgICAgc3VwcG9ydGVkIGJ5IE1hYyBPUyBYIDEwLjUgdGhyb3VnaCAoYXQgbGVhc3QpIDEwLjk6OgpAQCAtMzEsNyArMjEsNiBAQAogCiAgICAgLSBidWlsZHMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAotICAgICAgICAqIGxpYmNyeXB0byBhbmQgbGlic3NsIGZyb20gT3BlblNTTCAxLjAuMSAobmV3LCBhcyBvZiAzLjQuMykKICAgICAgICAgKiBOQ3Vyc2VzIDUuOSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1MDM3KQogICAgICAgICAqIFNRTGl0ZSAzLjguMTEKICAgICAgICAgKiBYWiA1LjAuNQpAQCAtNzMsNyArNjIsNiBAQAogCiAgICAgLSB1c2VzIHN5c3RlbS1zdXBwbGllZCB2ZXJzaW9ucyBvZiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAotICAgICAgICAqIGxpYmNyeXB0byBhbmQgbGlic3NsIGZyb20gQXBwbGUgT3BlblNTTCAwLjkuOAogICAgICAgICAqIHJlYWRsaW5lIG1vZHVsZSBsaW5rcyB3aXRoIEFwcGxlIEJTRCBlZGl0bGluZSAobGliZWRpdCkKIAogICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgVGNsL1RrIDguNS4xNS4xIChvciBsYXRlcikgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZwpAQCAtMTAyLDYgKzkwLDQ3IEBACiAgICAgICAgICAgdGhhdCB0aGUgWGNvZGUgMyBnY2MtNC4yIGNvbXBpbGVyIGhhcyBoYWQuCiAKIAorKiAgIEZvciBQeXRob24gMi43LnggYW5kIDMuMi54LCB0aGUgMzItYml0LW9ubHkgaW5zdGFsbGVyIHdhcyBjb25maWd1cmVkIHRvCisgICAgc3VwcG9ydCBNYWMgT1MgWCAxMC4zLjkgdGhyb3VnaCAoYXQgbGVhc3QpIDEwLjYuICBCZWNhdXNlIGl0IGlzCisgICAgYmVsaWV2ZWQgdGhhdCB0aGVyZSBhcmUgZmV3IHN5c3RlbXMgc3RpbGwgcnVubmluZyBPUyBYIDEwLjMgb3IgMTAuNAorICAgIGFuZCBiZWNhdXNlIGl0IGhhcyBiZWNvbWUgaW5jcmVhc2luZ2x5IGRpZmZpY3VsdCB0byB0ZXN0IGFuZAorICAgIHN1cHBvcnQgdGhlIGRpZmZlcmVuY2VzIGluIHRoZXNlIGVhcmxpZXIgc3lzdGVtcywgYXMgb2YgUHl0aG9uIDMuMy4wIHRoZSBQU0YKKyAgICAzMi1iaXQgaW5zdGFsbGVyIG5vIGxvbmdlciBzdXBwb3J0cyB0aGVtLiAgRm9yIHJlZmVyZW5jZSBpbiBidWlsZGluZyBzdWNoCisgICAgYW4gaW5zdGFsbGVyIHlvdXJzZWxmLCB0aGUgZGV0YWlscyBhcmU6OgorCisgICAgICAgIC91c3IvYmluL3B5dGhvbiBidWlsZC1pbnN0YWxsZXIucHkgXAorICAgICAgICAgICAgLS1zZGstcGF0aD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrIFwKKyAgICAgICAgICAgIC0tdW5pdmVyc2FsLWFyY2hzPTMyLWJpdCBcCisgICAgICAgICAgICAtLWRlcC10YXJnZXQ9MTAuMworCisgICAgLSBidWlsZHMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKKworICAgICAgICAqIEJ6aXAyCisgICAgICAgICogTkN1cnNlcworICAgICAgICAqIEdOVSBSZWFkbGluZSAoR1BMKQorICAgICAgICAqIFNRTGl0ZSAzCisgICAgICAgICogWFoKKyAgICAgICAgKiBabGliIDEuMi4zCisgICAgICAgICogT3JhY2xlIFNsZWVweWNhdCBEQiA0LjggKFB5dGhvbiAyLnggb25seSkKKworICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgYGBUY2wvVGsgOC40YGAgKGN1cnJlbnRseSA4LjQuMjApIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKworICAgIC0gcmVjb21tZW5kZWQgYnVpbGQgZW52aXJvbm1lbnQ6CisKKyAgICAgICAgKiBNYWMgT1MgWCAxMC41LjggUFBDIG9yIEludGVsCisgICAgICAgICogWGNvZGUgMy4xLjQgKG9yIGxhdGVyKQorICAgICAgICAqIGBgTWFjT1NYMTAuNHVgYCBTREsgKGxhdGVyIFNES3MgZG8gbm90IHN1cHBvcnQgUFBDIEczIHByb2Nlc3NvcnMpCisgICAgICAgICogYGBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9MTAuM2BgCisgICAgICAgICogQXBwbGUgYGBnY2MtNC4wYGAKKyAgICAgICAgKiBzeXN0ZW0gUHl0aG9uIDIuNSBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAorCisgICAgLSBhbHRlcm5hdGUgYnVpbGQgZW52aXJvbm1lbnRzOgorCisgICAgICAgICogTWFjIE9TIFggMTAuNi44IHdpdGggWGNvZGUgMy4yLjYKKyAgICAgICAgICAgIC0gbmVlZCB0byBjaGFuZ2UgYGAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNsLFRrfS5mcmFtZXdvcmsvVmVyc2lvbi9DdXJyZW50YGAgdG8gYGA4LjRgYAorCisKKwogR2VuZXJhbCBQcmVyZXF1aXNpdGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTQ1LDcgKzE3NCw3IEBACiBCdWlsZGluZyBvdGhlciB1bml2ZXJzYWwgaW5zdGFsbGVycwogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBidWlsZCBhIDQtd2F5IHVuaXZlcnNhbCBpbnN0YWxsZXIgdGhhdCBydW5zIG9uIAorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBidWlsZCBhIDQtd2F5IHVuaXZlcnNhbCBpbnN0YWxsZXIgdGhhdCBydW5zIG9uCiBPUyBYIDEwLjUgTGVvcGFyZCBvciBsYXRlcjo6CiAKICAgICAvdXNyL2Jpbi9weXRob24gL2J1aWxkLWluc3RhbGxlci5weSBcCkBAIC0xNzksNyArMjA4LDcgQEAKIAogICAgIC91c3IvbG9jYWwvYmluL3B5dGhvbm4ubiAtbSB0ZXN0IC13IC11IGFsbCwtbGFyZ2VmaWxlCiAgICAgL3Vzci9sb2NhbC9iaW4vcHl0aG9ubi5uLTMyIC1tIHRlc3QgLXcgLXUgYWxsCi0gICAgCisKIENlcnRhaW4gdGVzdHMgd2lsbCBiZSBza2lwcGVkIGFuZCBzb21lIGNhdXNlIHRoZSBpbnRlcnByZXRlciB0byBmYWlsCiB3aGljaCB3aWxsIGxpa2VseSBnZW5lcmF0ZSBgYFB5dGhvbiBxdWl0IHVuZXhwZWN0ZWRseWBgIGFsZXJ0IG1lc3NhZ2VzCiB0byBiZSBnZW5lcmF0ZWQgYXQgc2V2ZXJhbCBwb2ludHMgZHVyaW5nIGEgdGVzdCBydW4uICBUaGVzZSBhcmUgbm9ybWFsCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5IGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQppbmRleCAxZDQ2OWJiLi5kMDlkYTJmIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CisrKyBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKQEAgLTIwNiw3ICsyMDYsNyBAQAogCiAgICAgTFRfMTBfNSA9IGJvb2woZ2V0RGVwdGFyZ2V0VHVwbGUoKSA8ICgxMCwgNSkpCiAKLSAgICBpZiBnZXREZXB0YXJnZXRUdXBsZSgpIDwgKDEwLCA2KToKKyAgICBpZiBub3QgKDEwLCA1KSA8IGdldERlcHRhcmdldFR1cGxlKCkgPCAoMTAsIDEwKToKICAgICAgICAgIyBUaGUgT3BlblNTTCBsaWJzIHNoaXBwZWQgd2l0aCBPUyBYIDEwLjUgYW5kIGVhcmxpZXIgYXJlCiAgICAgICAgICMgaG9wZWxlc3NseSBvdXQtb2YtZGF0ZSBhbmQgZG8gbm90IGluY2x1ZGUgQXBwbGUncyB0aWUtaW4gdG8KICAgICAgICAgIyB0aGUgcm9vdCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHVzZXIgYW5kIHN5c3RlbSBrZXljaGFpbnMgdmlhIFRFQQpAQCAtMjI2LDcgKzIyNiw4IEBACiAgICAgICAgICMgbm93IG1vcmUgb2J2aW91cyB3aXRoIGNlcnQgY2hlY2tpbmcgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoZQogICAgICAgICAjIHN0YW5kYXJkIGxpYnJhcnkuCiAgICAgICAgICMKLSAgICAgICAgIyBGb3IgYnVpbGRzIHdpdGggMTAuNisgU0RLcywgY29udGludWUgdG8gdXNlIHRoZSBkZXByZWNhdGVkIGJ1dAorICAgICAgICAjIEZvciBidWlsZHMgd2l0aCAxMC42IHRocm91Z2ggMTAuOSBTREtzLAorICAgICAgICAjIGNvbnRpbnVlIHRvIHVzZSB0aGUgZGVwcmVjYXRlZCBidXQKICAgICAgICAgIyBsZXNzIG91dC1vZi1kYXRlIEFwcGxlIDAuOS44IGxpYnMgZm9yIG5vdy4gIFdoaWxlIHRoZXkgYXJlIGxlc3MKICAgICAgICAgIyBzZWN1cmUgdGhhbiB1c2luZyBhbiB1cC10by1kYXRlIDEuMC4xIHZlcnNpb24sIGRvaW5nIHNvCiAgICAgICAgICMgYXZvaWRzIHRoZSBiaWcgcHJvYmxlbXMgb2YgZm9yY2luZyB1c2VycyB0byBoYXZlIHRvIG1hbmFnZQpAQCAtMjM0LDEyICsyMzUsMTYgQEAKICAgICAgICAgIyBBUElzIGZvciBjZXJ0IHZhbGlkYXRpb24gZnJvbSBrZXljaGFpbnMgaWYgdmFsaWRhdGlvbiB1c2luZyB0aGUKICAgICAgICAgIyBzdGFuZGFyZCBPcGVuU1NMIGxvY2F0aW9ucyAoL1N5c3RlbS9MaWJyYXJ5L09wZW5TU0wsIG5vcm1hbGx5IGVtcHR5KQogICAgICAgICAjIGZhaWxzLgorICAgICAgICAjCisgICAgICAgICMgU2luY2UgQXBwbGUgcmVtb3ZlZCB0aGUgaGVhZGVyIGZpbGVzIGZvciB0aGUgZGVwcmVjYXRlZCBzeXN0ZW0KKyAgICAgICAgIyBPcGVuU1NMIGFzIG9mIHRoZSBYY29kZSA3IHJlbGVhc2UgKGZvciBPUyBYIDEwLjEwKyksIHdlIGRvIG5vdAorICAgICAgICAjIGhhdmUgbXVjaCBjaG9pY2UgYnV0IHRvIGJ1aWxkIG91ciBvd24gY29weSBoZXJlLCB0b28uCiAKICAgICAgICAgcmVzdWx0LmV4dGVuZChbCiAgICAgICAgICAgZGljdCgKLSAgICAgICAgICAgICAgbmFtZT0iT3BlblNTTCAxLjAuMmUiLAotICAgICAgICAgICAgICB1cmw9Imh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLTEuMC4yZS50YXIuZ3oiLAotICAgICAgICAgICAgICBjaGVja3N1bT0nNTI2MmJmYTI1YjYwZWQ5ZGU5ZjI4ZDVkNTJkNzdmYzUnLAorICAgICAgICAgICAgICBuYW1lPSJPcGVuU1NMIDEuMC4yaCIsCisgICAgICAgICAgICAgIHVybD0iaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL29wZW5zc2wtMS4wLjJoLnRhci5neiIsCisgICAgICAgICAgICAgIGNoZWNrc3VtPSc5MzkyZTY1MDcyY2U0YjYxNGMxMzkyZWVmYzFmMjNkMCcsCiAgICAgICAgICAgICAgIHBhdGNoZXM9WwogICAgICAgICAgICAgICAgICAgIm9wZW5zc2xfc2RrX21ha2VkZXBlbmQucGF0Y2giLAogICAgICAgICAgICAgICAgICAgIF0sCkBAIC01NzIsNyArNTc3LDcgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGNvbmZpZ2ZpbGUsICJyIikKLSAgICBleGNlcHQ6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGZhdGFsKCJGcmFtZXdvcmsgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZDogJXMiICUgY29uZmlnZmlsZSkKIAogICAgIGZvciBsIGluIGY6CkBAIC04MTQsNyArODE5LDcgQEAKICAgICBleGNlcHQ6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmbmFtZSkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogZGVmIHZlcmlmeVRoaXJkUGFydHlGaWxlKHVybCwgY2hlY2tzdW0sIGZuYW1lKToKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9vcGVuc3NsX3Nka19tYWtlZGVwZW5kLnBhdGNoIGIvTWFjL0J1aWxkU2NyaXB0L29wZW5zc2xfc2RrX21ha2VkZXBlbmQucGF0Y2gKaW5kZXggODViZDY5Yi4uOTZhODg0MSAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L29wZW5zc2xfc2RrX21ha2VkZXBlbmQucGF0Y2gKKysrIGIvTWFjL0J1aWxkU2NyaXB0L29wZW5zc2xfc2RrX21ha2VkZXBlbmQucGF0Y2gKQEAgLTEsMTggKzEsMTcgQEAKICMgSEcgY2hhbmdlc2V0IHBhdGNoCi0jIFBhcmVudCAgZmY4YTc1NTc2MDdjZmZkNjI2OTk3ZTU3ZWQzMWMxMDEyYTMwMThhYQorIyBQYXJlbnQgIGQzNzczOTBmNzg3YzA3MzlhM2U4OWY2NjlkZWY3MmQ3MTY3ZTUxMDgKICMgb3BlbnNzbF9zZGtfbWFrZWRlcGVuZC5wYXRjaAogIwotIyAJdXNpbmcgb3BlbnNzbCAxLjAuMmUKKyMgCXVzaW5nIG9wZW5zc2wgMS4wLjJmCiAjCiAjIC0gc3VwcG9ydCBidWlsZGluZyB3aXRoIGFuIE9TIFggU0RLCi0jIC0gYWxsb3cgIm1ha2UgZGVwZW5kIiB0byB1c2UgY29tcGlsZXJzIHdpdGggbmFtZXMgb3RoZXIgdGhhbiAiZ2NjIgogCiBkaWZmIENvbmZpZ3VyZQogCiBkaWZmIC0tZ2l0IGEvQ29uZmlndXJlIGIvQ29uZmlndXJlCiAtLS0gYS9Db25maWd1cmUKICsrKyBiL0NvbmZpZ3VyZQotQEAgLTYzNSwxMiArNjM1LDEyIEBACitAQCAtNjM4LDEyICs2MzgsMTIgQEAKICAKICAjIyMjIyBNYWNPUyBYIChhLmsuYS4gUmhhcHNvZHkgb3IgRGFyd2luKSBzZXR1cAogICJyaGFwc29keS1wcGMtY2MiLCJjYzotTzMgLURCX0VORElBTjo6KHVua25vd24pOk1BQ09TWF9SSEFQU09EWTo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTo6IiwKQEAgLTMxLDcgKzMwLDcgQEAKICAiZGVidWctZGFyd2luLXBwYy1jYyIsImNjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtREJfRU5ESUFOIC1nIC1XYWxsIC1POjotRF9SRUVOVFJBTlQ6TUFDT1NYOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGMzMl9hc219Om9zeDMyOmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUM6LWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAogICMgaVBob25lT1MvaU9TCiAgImlwaG9uZW9zLWNyb3NzIiwibGx2bS1nY2M6LU8zIC1pc3lzcm9vdCBcJChDUk9TU19UT1ApL1NES3MvXCQoQ1JPU1NfU0RLKSAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLWNvbW1vbjo6LURfUkVFTlRSQU5UOmlPUzotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKLUBAIC0xNzE0LDggKzE3MTQsNyBAQAorQEAgLTE3MTcsOCArMTcxNyw3IEBACiAgCQlzL15DQz0uKiQvQ0M9ICRjYy87CiAgCQlzL15BUj1ccyphci9BUj0gJGFyLzsKICAJCXMvXlJBTkxJQj0uKi9SQU5MSUI9ICRyYW5saWIvOwpAQCAtNDEsMTYgKzQwLDMgQEAKICAJCX0KICAJcy9eQ0ZMQUc9LiokL0NGTEFHPSAkY2ZsYWdzLzsKICAJcy9eREVQRkxBRz0uKiQvREVQRkxBRz0kZGVwZmxhZ3MvOwotZGlmZiAtLWdpdCBhL3V0aWwvZG9tZCBiL3V0aWwvZG9tZAotLS0tIGEvdXRpbC9kb21kCi0rKysgYi91dGlsL2RvbWQKLUBAIC0xNCw4ICsxNCw3IEBACi0gY3AgTWFrZWZpbGUgTWFrZWZpbGUuc2F2ZQotICMgZmFrZSB0aGUgcHJlc2VuY2Ugb2YgS2VyYmVyb3MKLSB0b3VjaCAkVE9QL2tyYjUuaAotLWlmICR7TUFLRURFUEVORH0gLS12ZXJzaW9uIDI+JjEgfCBncmVwIC1xICJjbGFuZyIgfHwKLS0gICBlY2hvICRNQUtFREVQRU5EIHwgZ3JlcCAtcSAiZ2NjIjsgdGhlbgotK2lmIHRydWUgOyB0aGVuCi0gICAgIGFyZ3M9IiIKLSAgICAgd2hpbGUgWyAkIyAtZ3QgMCBdOyBkbwotIAlpZiBbICIkMSIgIT0gIi0tIiBdOyB0aGVuIGFyZ3M9IiRhcmdzICQxIjsgZmkKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnJ0ZgppbmRleCA1MmQ4YjgwLi42NWUzZjE0IDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS5ydGYKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUucnRmCkBAIC0xLDQgKzEsNCBAQAote1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMzQ3XGNvY29hc3VicnRmNTcwCit7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjEzNDhcY29jb2FzdWJydGYxNzAKIHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTtcZjFcZm1vZGVyblxmY2hhcnNldDAgQ291cmllck5ld1BTTVQ7fQoge1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQogXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3cxMzM4MFx2aWV3aDE0NjAwXHZpZXdraW5kMApAQCAtMjQsNyArMjQsNyBAQAogXGkwICB2YXJpYW50LiAgVW5sZXNzIHlvdSBhcmUgaW5zdGFsbGluZyB0byBhbiAxMC41IHN5c3RlbSBvciB5b3UgbmVlZCB0byBidWlsZCBhcHBsaWNhdGlvbnMgdGhhdCBjYW4gcnVuIG9uIDEwLjUgc3lzdGVtcywgdXNlIHRoZSAxMC42IHZhcmlhbnQgaWYgcG9zc2libGUuICBUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIG9wZXJhdGluZyBzeXN0ZW0gZnVuY3Rpb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBzdGFydGluZyB3aXRoIDEwLjYgYW5kIHlvdSBtYXkgc2VlIGJldHRlciBwZXJmb3JtYW5jZSB1c2luZyA2NC1iaXQgbW9kZS4gIEJ5IGRlZmF1bHQsIFB5dGhvbiB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIGluIDY0LWJpdCBtb2RlIGlmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIGl0LiAgQWxzbyBzZWUgCiBcaSBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gYW5kIE9wZW5TU0wKIFxpMCAgYmVsb3cuICBUaGUgUHl0aG9ucyBpbnN0YWxsZWQgYnkgdGhlc2UgaW5zdGFsbGVycyBhcmUgYnVpbHQgd2l0aCBwcml2YXRlIGNvcGllcyBvZiBzb21lIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBub3QgaW5jbHVkZWQgd2l0aCBvciBuZXdlciB0aGFuIHRob3NlIGluIE9TIFggaXRzZWxmLiAgVGhlIGxpc3Qgb2YgdGhlc2UgbGlicmFyaWVzIHZhcmllcyBieSBpbnN0YWxsZXIgdmFyaWFudCBhbmQgaXMgaW5jbHVkZWQgYXQgdGhlIGVuZCBvZiB0aGUgTGljZW5zZS5ydGYgZmlsZS4KLVxiIFx1bCBcdWxjMCBcCitcYiBcdWwgXAogXAogVXBkYXRlIHlvdXIgdmVyc2lvbiBvZiBUY2wvVGsgdG8gdXNlIElETEUgb3Igb3RoZXIgVGsgYXBwbGljYXRpb25zCiBcYjAgXHVsbm9uZSBcCkBAIC0zNiw3NSArMzYsMTYgQEAKIFxpMCAgZm9yIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gYW5kIG9mIE1hYyBPUyBYLlwKIAogXGIgXHVsIFwKLUluc3RhbGxpbmcgb24gT1MgWCAxMC44IChNb3VudGFpbiBMaW9uKSBvciBsYXRlciBzeXN0ZW1zXAotXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCi1cY2YwIFx1bG5vbmUgW0NIQU5HRUQgZm9yIFB5dGhvbiAzLjQuMl0KLVxiMCBcCi1cCi1BcyBvZiBQeXRob24gMy40LjIsIGluc3RhbGxlciBwYWNrYWdlcyBmcm9tIHB5dGhvbi5vcmcgYXJlIG5vdyBjb21wYXRpYmxlIHdpdGggdGhlIEdhdGVrZWVwZXIgc2VjdXJpdHkgZmVhdHVyZSBpbnRyb2R1Y2VkIGluIE9TIFggMTAuOC4gICBEb3dubG9hZGVkIHBhY2thZ2VzIGNhbiBub3cgYmUgZGlyZWN0bHkgaW5zdGFsbGVkIGJ5IGRvdWJsZS1jbGlja2luZyB3aXRoIHRoZSBkZWZhdWx0IHN5c3RlbSBzZWN1cml0eSBzZXR0aW5ncy4gIFB5dGhvbi5vcmcgaW5zdGFsbGVyIHBhY2thZ2VzIGZvciBPUyBYIGFyZSBzaWduZWQgd2l0aCB0aGUgRGV2ZWxvcGVyIElEIG9mIHRoZSBidWlsZGVyLCBhcyBpZGVudGlmaWVkIG9uIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLyJ9fXtcZmxkcnNsdCB0aGUgZG93bmxvYWQgcGFnZX19IGZvciB0aGlzIHJlbGVhc2UuICBUbyBpbnNwZWN0IHRoZSBkaWdpdGFsIHNpZ25hdHVyZSBvZiB0aGUgcGFja2FnZSwgY2xpY2sgb24gdGhlIGxvY2sgaWNvbiBpbiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyIG9mIHRoZSAKLVxpIEluc3RhbGwgUHl0aG9uCi1caTAgIGluc3RhbGxlciB3aW5kb3cuICBSZWZlciB0byBBcHBsZVwnOTJzIHN1cHBvcnQgcGFnZXMgZm9yIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHA6Ly9zdXBwb3J0LmFwcGxlLmNvbS9rYi9odDUyOTAifX17XGZsZHJzbHQgbW9yZSBpbmZvcm1hdGlvbiBvbiBHYXRla2VlcGVyfX0uXAotXAotXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCitDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gYW5kIE9wZW5TU0xcCiAKLVxiIFxjZjAgXHVsIFNpbXBsaWZpZWQgd2ViLWJhc2VkIGluc3RhbGxzXAotXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCi1cY2YwIFx1bG5vbmUgW05FVyBmb3IgUHl0aG9uIDMuNC4yXQotXGIwIFwKLVwKLVdpdGggdGhlIGNoYW5nZSB0byB0aGUgbmV3ZXIgZmxhdCBmb3JtYXQgaW5zdGFsbGVyIHBhY2thZ2UsIHRoZSBkb3dubG9hZCBmaWxlIG5vdyBoYXMgYSAKLVxmMSAucGtnCi1cZjAgIGV4dGVuc2lvbiBhcyBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGVtYmVkIHRoZSBpbnN0YWxsZXIgd2l0aGluIGEgZGlzayBpbWFnZSAoCi1cZjEgLmRtZwotXGYwICkgY29udGFpbmVyLiAgIElmIHlvdSBkb3dubG9hZCB0aGUgUHl0aG9uIGluc3RhbGxlciB0aHJvdWdoIGEgd2ViIGJyb3dzZXIsIHRoZSBPUyBYIGluc3RhbGxlciBhcHBsaWNhdGlvbiBtYXkgb3BlbiBhdXRvbWF0aWNhbGx5IHRvIGFsbG93IHlvdSB0byBwZXJmb3JtIHRoZSBpbnN0YWxsLiAgSWYgeW91ciBicm93c2VyIHNldHRpbmdzIGRvIG5vdCBhbGxvdyBhdXRvbWF0aWMgb3BlbiwgZG91YmxlIGNsaWNrIG9uIHRoZSBkb3dubG9hZGVkIGluc3RhbGxlciBmaWxlLlwKLVwKLVxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAotCi1cYiBcY2YwIFx1bCBOZXcgSW5zdGFsbGF0aW9uIE9wdGlvbnMgYW5kIERlZmF1bHRzXAotXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCi1cY2YwIFx1bG5vbmUgW05FVyBmb3IgUHl0aG9uIDMuNC4wXQotXGIwIFwKLVwKLVRoZSBQeXRob24gaW5zdGFsbGVyIG5vdyBpbmNsdWRlcyBhbiBvcHRpb24gdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIG9yIHVwZ3JhZGUgCi1cZjEgcGlwCi1cZjAgLCBhIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgbm8gSW50ZXJuZXQgYWNjZXNzIGlzIHJlcXVpcmVkLiAgSWYgeW91IGRvIG5vdCB3YW50IHRoZSBpbnN0YWxsZXIgdG8gZG8gdGhpcywgc2VsZWN0IHRoZSAKLVxpIEN1c3RvbWl6ZQotXGkwICBvcHRpb24gYXQgdGhlIAotXGkgSW5zdGFsbGF0aW9uIFR5cGUKLVxpMCAgc3RlcCBhbmQgdW5jaGVjayB0aGUgCi1caSBJbnN0YWxsIG9yIHVncHJhZGUgcGlwCi1caTAgIG9wdGlvbi5cCi1cCi1UbyBtYWtlIGl0IGVhc2llciB0byB1c2Ugc2NyaXB0cyBpbnN0YWxsZWQgYnkgdGhpcmQtcGFydHkgUHl0aG9uIHBhY2thZ2VzLCB3aXRoIAotXGYxIHBpcAotXGYwICBvciBieSBvdGhlciBtZWFucywgdGhlIAotXGkgU2hlbGwgcHJvZmlsZSB1cGRhdGVyCi1caTAgIG9wdGlvbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyBoYXMgYmVlbiB0aGUgY2FzZSB3aXRoIFB5dGhvbiAyLjcueCBpbnN0YWxsZXJzLiBZb3UgY2FuIGFsc28gdHVybiB0aGlzIG9wdGlvbiBvZmYgYnkgc2VsZWN0aW5nIAotXGkgQ3VzdG9taXplCi1caTAgIGFuZCB1bmNoZWNraW5nIHRoZSAKLVxpIFNoZWxsIHByb2ZpbGUgdXBkYXRlcgotXGkwICBvcHRpb24uIFlvdSBjYW4gYWxzbyB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIGxhdGVyIGJ5IGxhdW5jaGluZyB0aGUgCi1caSBVcGRhdGUgU2hlbGwgUHJvZmlsZQotXGkwICBjb21tYW5kIGZvdW5kIGluIHRoZSAKLVxmMSAvQXBwbGljYXRpb25zL1B5dGhvbiAkVkVSU0lPTiAKLVxmMCBmb2xkZXIuICBZb3UgbWF5IG5lZWQgdG8gc3RhcnQgYSBuZXcgdGVybWluYWwgd2luZG93IGZvciB0aGUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdC5cCi1cCi1Gb3Igb3RoZXIgY2hhbmdlcyBpbiB0aGlzIHJlbGVhc2UsIHNlZSB0aGUgUmVsZWFzZSBOb3RlcyBsaW5rIGZvciB0aGlzIHJlbGVhc2UgYXQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvIn19e1xmbGRyc2x0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzL319LlwKLVwKLVxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAotCi1cYiBcY2YwIFx1bCBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gYW5kIE9wZW5TU0xcCi1ccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHBhcmRpcm5hdHVyYWwKLVxjZjAgXHVsbm9uZSBbQ0hBTkdFRCBmb3IgUHl0aG9uIDMuNC4zXQotXGIwIFwKLVwKLVB5dGhvbiAzLjQuMyBpbmNsdWRlcyBhIG51bWJlciBvZiBuZXR3b3JrIHNlY3VyaXR5IGVuaGFuY2VtZW50cyB0aGF0IGhhdmUgYmVlbiBhcHByb3ZlZCBmb3IgaW5jbHVzaW9uIGluIFB5dGhvbiAzLjQgbWFpbnRlbmFuY2UgcmVsZWFzZXMuICB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDc2LyJ9fXtcZmxkcnNsdCBQRVAgNDc2fX0gY2hhbmdlcyBzZXZlcmFsIHN0YW5kYXJkIGxpYnJhcnkgbW9kdWxlcywgbGlrZSAKK1xiMCBcdWxub25lIFwKK1B5dGhvbiAzLjUgaW5jbHVkZXMgYSBudW1iZXIgb2YgbmV0d29yayBzZWN1cml0eSBlbmhhbmNlbWVudHMgdGhhdCB3ZXJlIHJlbGVhc2VkIGluIFB5dGhvbiAzLjQuMyBhbmQgUHl0aG9uIDIuNy4xMC4gIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTA0NzYvIn19e1xmbGRyc2x0IFBFUCA0NzZ9fSBjaGFuZ2VzIHNldmVyYWwgc3RhbmRhcmQgbGlicmFyeSBtb2R1bGVzLCBsaWtlIAogXGkgaHR0cGxpYgogXGkwICwgCiBcaSB1cmxsaWIKIFxpMCAsIGFuZCAKIFxpIHhtbHJwY2xpYgotXGkwICwgdG8gYnkgZGVmYXVsdCB2ZXJpZnkgY2VydGlmaWNhdGVzIHByZXNlbnRlZCBieSBzZXJ2ZXJzIG92ZXIgc2VjdXJlIChUTFMpIGNvbm5lY3Rpb25zLiAgVGhlIHZlcmlmaWNhdGlvbiBpcyBwZXJmb3JtZWQgYnkgdGhlIE9wZW5TU0wgbGlicmFyaWVzIHRoYXQgUHl0aG9uIGlzIGxpbmtlZCB0by4gIFByaW9yIHRvIDMuNC4zLCB0aGUgcHl0aG9uLm9yZyBpbnN0YWxsZXJzIGR5bmFtaWNhbGx5IGxpbmtlZCB3aXRoIEFwcGxlLXN1cHBsaWVkIE9wZW5TU0wgbGlicmFyaWVzIHNoaXBwZWQgd2l0aCBPUyBYLiAgT1MgWCBwcm92aWRlcyBhIG11bHRpcGxlIGxldmVsIHNlY3VyaXR5IGZyYW1ld29yayB0aGF0IHN0b3JlcyB0cnVzdCBjZXJ0aWZpY2F0ZXMgaW4gc3lzdGVtIGFuZCB1c2VyIGtleWNoYWlucyBtYW5hZ2VkIGJ5IHRoZSAKK1xpMCAsIHRvIGJ5IGRlZmF1bHQgdmVyaWZ5IGNlcnRpZmljYXRlcyBwcmVzZW50ZWQgYnkgc2VydmVycyBvdmVyIHNlY3VyZSAoVExTKSBjb25uZWN0aW9ucy4gIFRoZSB2ZXJpZmljYXRpb24gaXMgcGVyZm9ybWVkIGJ5IHRoZSBPcGVuU1NMIGxpYnJhcmllcyB0aGF0IFB5dGhvbiBpcyBsaW5rZWQgdG8uICBQcmlvciB0byAzLjQuMywgYm90aCBweXRob24ub3JnIGluc3RhbGxlcnMgZHluYW1pY2FsbHkgbGlua2VkIHdpdGggQXBwbGUtc3VwcGxpZWQgT3BlblNTTCBsaWJyYXJpZXMgc2hpcHBlZCB3aXRoIE9TIFguICBPUyBYIHByb3ZpZGVzIGEgbXVsdGlwbGUgbGV2ZWwgc2VjdXJpdHkgZnJhbWV3b3JrIHRoYXQgc3RvcmVzIHRydXN0IGNlcnRpZmljYXRlcyBpbiBzeXN0ZW0gYW5kIHVzZXIga2V5Y2hhaW5zIG1hbmFnZWQgYnkgdGhlIAogXGkgS2V5Y2hhaW4gQWNjZXNzIAogXGkwIGFwcGxpY2F0aW9uIGFuZCB0aGUgCiBcaSBzZWN1cml0eQpAQCAtMTIyLDEwICs2MywxMCBAQAogXGYxIC9TeXN0ZW0vTGlicmFyeS9PcGVuU1NMCiBcZjAgLiAgVGhlc2UgZGlyZWN0b3JpZXMgYXJlIHR5cGljYWxseSBlbXB0eSBhbmQgbm90IG1hbmFnZWQgYnkgT1MgWDsgeW91IG11c3QgbWFuYWdlIHRoZW0geW91cnNlbGYgb3Igc3VwcGx5IHlvdXIgb3duIFNTTCBjb250ZXh0cy4gIE9wZW5TU0wgMC45LjcgaXMgb2Jzb2xldGUgYnkgY3VycmVudCBzZWN1cml0eSBzdGFuZGFyZHMsIGxhY2tpbmcgYSBudW1iZXIgb2YgaW1wb3J0YW50IGZlYXR1cmVzIGZvdW5kIGluIGxhdGVyIHZlcnNpb25zLiAgQW1vbmcgdGhlIHByb2JsZW1zIHRoaXMgY2F1c2VzIGlzIHRoZSBpbmFiaWxpdHkgdG8gdmVyaWZ5IGhpZ2hlci1zZWN1cml0eSBjZXJ0aWZpY2F0ZXMgbm93IHVzZWQgYnkgcHl0aG9uLm9yZyBzZXJ2aWNlcywgaW5jbHVkaW5nIAogXGkgdHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkifX17XGZsZHJzbHQgaGUgUHl0aG9uIFBhY2thZ2UgSW5kZXgsIFB5UEl9fQotXGkwIC4gIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYXMgb2YgMy40LjMgdGhlIAorXGkwIC4gIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgdGhlIAogXGkgMTAuNSsgMzItYml0LW9ubHkgcHl0aG9uLm9yZyB2YXJpYW50CiBcaTAgIGlzIGxpbmtlZCB3aXRoIGEgcHJpdmF0ZSBjb3B5IG9mIAotXGkgT3BlblNTTCAxLjAKK1xpIE9wZW5TU0wgMS4wLjIKIFxpMCA7IGl0IGNvbnN1bHRzIHRoZSBzYW1lIGRlZmF1bHQgY2VydGlmaWNhdGUgZGlyZWN0b3J5LCAKIFxmMSAvU3lzdGVtL0xpYnJhcnkvT3BlblNTTAogXGYwIC4gICBBcyBiZWZvcmUsIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byBtYW5hZ2UgY2VydGlmaWNhdGVzIHlvdXJzZWxmIHdoZW4geW91IHVzZSB0aGlzIFB5dGhvbiB2YXJpYW50IGFuZCwgd2l0aCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gbm93IGVuYWJsZWQgYnkgZGVmYXVsdCwgeW91IG1heSBub3cgbmVlZCB0byB0YWtlIGFkZGl0aW9uYWwgc3RlcHMgdG8gZW5zdXJlIHlvdXIgUHl0aG9uIHByb2dyYW1zIGhhdmUgYWNjZXNzIHRvIENBIGNlcnRpZmljYXRlcyB5b3UgdHJ1c3QuICBJZiB5b3UgdXNlIHRoaXMgUHl0aG9uIHZhcmlhbnQgdG8gYnVpbGQgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgd2l0aCB0aGlyZC1wYXJ0eSB0b29scyBsaWtlIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcHkyYXBwLyJ9fXtcZmxkcnNsdCAKQEAgLTEzNyw3ICs3OCw3IEBACiBcaSAwLjkuOCBsaWJyYXJpZXMKIFxpMCAuICBBcHBsZSdzIDAuOS44IHZlcnNpb24gaW5jbHVkZXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uYWwgZmVhdHVyZTogaWYgYSBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgdmVyaWZpZWQgdXNpbmcgdGhlIG1hbnVhbGx5IGFkbWluaXN0ZXJlZCBjZXJ0aWZpY2F0ZXMgaW4gCiBcZjEgL1N5c3RlbS9MaWJyYXJ5L09wZW5TU0wKLVxmMCAsIHRoZSBjZXJ0aWZpY2F0ZXMgbWFuYWdlZCBieSB0aGUgc3lzdGVtIHNlY3VyaXR5IGZyYW1ld29yayBJbiB0aGUgdXNlciBhbmQgc3lzdGVtIGtleWNoYWlucyBhcmUgYWxzbyBjb25zdWx0ZWQgKHVzaW5nIEFwcGxlIHByaXZhdGUgQVBJcykuICBGb3IgdGhpcyByZWFzb24sIGZvciAzLjQuMyB0aGUgCitcZjAgLCB0aGUgY2VydGlmaWNhdGVzIG1hbmFnZWQgYnkgdGhlIHN5c3RlbSBzZWN1cml0eSBmcmFtZXdvcmsgSW4gdGhlIHVzZXIgYW5kIHN5c3RlbSBrZXljaGFpbnMgYXJlIGFsc28gY29uc3VsdGVkICh1c2luZyBBcHBsZSBwcml2YXRlIEFQSXMpLiAgRm9yIHRoaXMgcmVhc29uLCB0aGUgCiBcaSA2NC1iaXQvMzItYml0IDEwLjYrIHB5dGhvbi5vcmcgdmFyaWFudAogXGkwICBjb250aW51ZXMgdG8gYmUgZHluYW1pY2FsbHkgbGlua2VkIHdpdGggQXBwbGUncyBPcGVuU1NMIDAuOS44IHNpbmNlIGl0IHdhcyBmZWx0IHRoYXQgdGhlIGxvc3Mgb2YgdGhlIHN5c3RlbS1wcm92aWRlZCBjZXJ0aWZpY2F0ZXMgYW5kIG1hbmFnZW1lbnQgdG9vbHMgb3V0d2VpZ2hzIHRoZSBhZGRpdGlvbmFsIHNlY3VyaXR5IGZlYXR1cmVzIHByb3ZpZGVkIGJ5IG5ld2VyIHZlcnNpb25zIG9mIE9wZW5TU0wuICBUaGlzIHdpbGwgbGlrZWx5IGNoYW5nZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIHB5dGhvbi5vcmcgaW5zdGFsbGVycyBhcyBBcHBsZSBoYXMgZGVwcmVjYXRlZCB1c2Ugb2YgdGhlIHN5c3RlbS1zdXBwbGllZCBPcGVuU1NMIGxpYnJhcmllcy4gIElmIHlvdSBkbyBuZWVkIGZlYXR1cmVzIGZyb20gbmV3ZXIgdmVyc2lvbnMgb2YgT3BlblNTTCwgdGhlcmUgYXJlIHRoaXJkLXBhcnR5IE9wZW5TU0wgd3JhcHBlciBwYWNrYWdlcyBhdmFpbGFibGUgdGhyb3VnaCAKIFxpIFB5UEkKQEAgLTE0NSw3ICs4NiwxOCBAQAogXAogVGhlIGJ1bmRsZWQgCiBcZjEgcGlwCi1cZjAgIGluY2x1ZGVkIHdpdGggMy40LjMgaGFzIGl0cyBvd24gZGVmYXVsdCBjZXJ0aWZpY2F0ZSBzdG9yZSBmb3IgdmVyaWZ5aW5nIGRvd25sb2FkIGNvbm5lY3Rpb25zLlwKK1xmMCAgaW5jbHVkZWQgd2l0aCB0aGUgUHl0aG9uIDMuNSBpbnN0YWxsZXJzIGhhcyBpdHMgb3duIGRlZmF1bHQgY2VydGlmaWNhdGUgc3RvcmUgZm9yIHZlcmlmeWluZyBkb3dubG9hZCBjb25uZWN0aW9ucy5cCitcCisKK1xiIFx1bCBPdGhlciBjaGFuZ2VzXAorCitcYjAgXHVsbm9uZSBcCitccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHBhcmRpcm5hdHVyYWwKK1xjZjAgRm9yIG90aGVyIGNoYW5nZXMgaW4gdGhpcyByZWxlYXNlLCBzZWUgdGhlIAorXGkgV2hhdCdzIG5ldworXGkwICBzZWN0aW9uIGluIHRoZSB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwczovL3d3dy5weXRob24ub3JnL2RvYy8ifX17XGZsZHJzbHQgRG9jdW1lbnRhdGlvbiBTZXR9fSBmb3IgdGhpcyByZWxlYXNlIGFuZCBpdHMgCitcaSBSZWxlYXNlIE5vdGVzCitcaTAgIGxpbmsgYXQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvIn19e1xmbGRyc2x0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzL319LlwKIFxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAogCiBcYiBcY2YwIFx1bCBcCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgppbmRleCAyNTI3Nzg3Li5kZmI3NWQ4IDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKQEAgLTEsNSArMSw1IEBACiB7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjEzNDNcY29jb2FzdWJydGYxNjAKLVxjb2NvYXNjcmVlbmZvbnRzMXtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTtcZjFcZm1vZGVyblxmY2hhcnNldDAgQ291cmllck5ld1BTTVQ7fQorXGNvY29hc2NyZWVuZm9udHMxe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30KIHtcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KIFxwYXBlcncxMTkwNVxwYXBlcmgxNjgzN1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3MTIyMDBcdmlld2gxMDg4MFx2aWV3a2luZDAKIFxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDAKQEAgLTE3LDEyICsxNyw2IEBACiBcYjAgLlwKIFwKIAotXGIgTkVXIGZvciBQeXRob24gMy40LjM6IAotXGIwICAzLjQuMyBpbmNsdWRlcyBuZXR3b3JrIHNlY3VyaXR5IGVuaGFuY2VtZW50cyB0aGF0IG1heSByZXF1aXJlIGNoYW5nZXMgdG8geW91ciBQeXRob24gYXBwbGljYXRpb25zLiAgU2VlIHRoZSAKLVxmMSBSZWFkTWUKLVxmMCAgZmlsZSBhbmQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCNjaGFuZ2VkLWluLTMtNC0zIn19e1xmbGRyc2x0IHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbn19IGZvciBtb3JlIGluZm9ybWF0aW9uLlwKLVwKLQogXGIgSU1QT1JUQU5UOgogXGIwICAKIFxiIElETEUKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAKaW5kZXggYmY4OTNkMS4uMzA3NGZhMyAxMDA3NTUKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAKQEAgLTEwLDE1ICsxMCwxNSBAQAogCiB1bWFzayAwMjIKIAotIiR7RldLfS9iaW4vcHl0aG9uJHtQWVZFUn0iIC1tIGVuc3VyZXBpcCAtLXVwZ3JhZGUKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtRSAtcyAtbSBlbnN1cmVwaXAgLS11cGdyYWRlCiAKLSIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgXAotICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtRSAtcyAtV2kgXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIC1xIC1qMCBcCiAgICAgLWYgLXggYmFkc3ludGF4IFwKICAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9zaXRlLXBhY2thZ2VzIgogCi0iJHtGV0t9L2Jpbi9weXRob24ke1BZVkVSfSIgLVdpIC1PIFwKLSAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9jb21waWxlYWxsLnB5IiBcCisiJHtGV0t9L2Jpbi9weXRob24ke1BZVkVSfSIgLUUgLXMgLVdpIC1PIFwKKyAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9jb21waWxlYWxsLnB5IiAtcSAtajAgXAogICAgIC1mIC14IGJhZHN5bnRheCBcCiAgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIKIApkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5mcmFtZXdvcmsgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmZyYW1ld29yawppbmRleCBlYjA4Mjk3Li4wZjJlNTJjIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmZyYW1ld29yaworKysgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmZyYW1ld29yawpAQCAtNiwyMyArNiwyMyBAQAogUFlWRVI9IkBQWVZFUkAiCiBGV0s9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy9AUFlWRVJAIgogCi0iJHtGV0t9L2Jpbi9weXRob25AUFlWRVJAIiAtV2kgXAotICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyIke0ZXS30vYmluL3B5dGhvbkBQWVZFUkAiIC1FIC1zIC1XaSBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vY29tcGlsZWFsbC5weSIgLXEgLWowIFwKICAgICAtZiAteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKICAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfSIKIAotIiR7RldLfS9iaW4vcHl0aG9uQFBZVkVSQCIgLVdpIC1PIFwKLSAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9jb21waWxlYWxsLnB5IiBcCisiJHtGV0t9L2Jpbi9weXRob25AUFlWRVJAIiAtRSAtcyAtV2kgLU8gXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIC1xIC1qMCBcCiAgICAgLWYgLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCiAgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0iCiAKLSIke0ZXS30vYmluL3B5dGhvbkBQWVZFUkAiIC1XaSBcCi0gICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vY29tcGlsZWFsbC5weSIgXAorIiR7RldLfS9iaW4vcHl0aG9uQFBZVkVSQCIgLUUgLXMgLVdpIFwKKyAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9jb21waWxlYWxsLnB5IiAtcSAtajAgXAogICAgIC1mIC14IGJhZHN5bnRheCBcCiAgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIKIAotIiR7RldLfS9iaW4vcHl0aG9uQFBZVkVSQCIgLVdpIC1PIFwKLSAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9jb21waWxlYWxsLnB5IiBcCisiJHtGV0t9L2Jpbi9weXRob25AUFlWRVJAIiAtRSAtcyAtV2kgLU8gXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIC1xIC1qMCBcCiAgICAgLWYgLXggYmFkc3ludGF4IFwKICAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9zaXRlLXBhY2thZ2VzIgogCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LnBhdGNoLXByb2ZpbGUgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LnBhdGNoLXByb2ZpbGUKaW5kZXggMzZkMGEzZS4uMGE2MmUzMiAxMDA3NTUKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5wYXRjaC1wcm9maWxlCisrKyBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQucGF0Y2gtcHJvZmlsZQpAQCAtNTgsNyArNTgsNyBAQAogCWZpCiAJZWNobyAiIiA+PiAiJHtSQ30iCiAJZWNobyAiIyBTZXR0aW5nIFBBVEggZm9yIFB5dGhvbiAke1BZVkVSfSIgPj4gIiR7UkN9IgotCWVjaG8gIiMgVGhlIG9yZ2luYWwgdmVyc2lvbiBpcyBzYXZlZCBpbiAuY3NocmMucHlzYXZlIiA+PiAiJHtSQ30iCisJZWNobyAiIyBUaGUgb3JpZ2luYWwgdmVyc2lvbiBpcyBzYXZlZCBpbiAuY3NocmMucHlzYXZlIiA+PiAiJHtSQ30iCiAJZWNobyAic2V0IHBhdGg9KCR7UFlUSE9OX1JPT1R9L2JpbiAiJyRwYXRoJyIpIiA+PiAiJHtSQ30iCiAJaWYgWyBgaWQgLXVyYCA9IDAgXTsgdGhlbgogCQljaG93biAiJHtVU0VSfSIgIiR7UkN9IgpAQCAtOTAsNyArOTAsNyBAQAogZmkKIGVjaG8gIiIgPj4gIiR7UFJ9IgogZWNobyAiIyBTZXR0aW5nIFBBVEggZm9yIFB5dGhvbiAke1BZVkVSfSIgPj4gIiR7UFJ9IgotZWNobyAiIyBUaGUgb3JnaW5hbCB2ZXJzaW9uIGlzIHNhdmVkIGluIGBiYXNlbmFtZSAke1BSfWAucHlzYXZlIiA+PiAiJHtQUn0iCitlY2hvICIjIFRoZSBvcmlnaW5hbCB2ZXJzaW9uIGlzIHNhdmVkIGluIGBiYXNlbmFtZSAke1BSfWAucHlzYXZlIiA+PiAiJHtQUn0iCiBlY2hvICdQQVRIPSInIiR7UFlUSE9OX1JPT1R9L2JpbiInOiR7UEFUSH0iJyA+PiAiJHtQUn0iCiBlY2hvICdleHBvcnQgUEFUSCcgPj4gIiR7UFJ9IgogaWYgWyBgaWQgLXVyYCA9IDAgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvTWFjL0lETEUvSURMRS5hcHAvQ29udGVudHMvUmVzb3VyY2VzL2lkbGVtYWluLnB5IGIvTWFjL0lETEUvSURMRS5hcHAvQ29udGVudHMvUmVzb3VyY2VzL2lkbGVtYWluLnB5CmluZGV4IDhiOGJlYjkuLjk4Njc2MGQgMTAwNjQ0Ci0tLSBhL01hYy9JRExFL0lETEUuYXBwL0NvbnRlbnRzL1Jlc291cmNlcy9pZGxlbWFpbi5weQorKysgYi9NYWMvSURMRS9JRExFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvaWRsZW1haW4ucHkKQEAgLTY4LDggKzY4LDYgQEAKICAgICAgICAgYnJlYWsKIAogIyBOb3cgaXQgaXMgc2FmZSB0byBpbXBvcnQgaWRsZWxpYi4KLWZyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAotbWFjb3N4U3VwcG9ydC5fYXBwYnVuZGxlID0gVHJ1ZQogZnJvbSBpZGxlbGliLlB5U2hlbGwgaW1wb3J0IG1haW4KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvTWFrZWZpbGUuaW4gYi9NYWMvTWFrZWZpbGUuaW4KaW5kZXggMDNlYzczOC4uMTI1NWIxMyAxMDA2NDQKLS0tIGEvTWFjL01ha2VmaWxlLmluCisrKyBiL01hYy9NYWtlZmlsZS5pbgpAQCAtMSw1ICsxLDUgQEAKLSMgVGhpcyBmaWxlIGNhbiBiZSBpbnZva2VkIGZyb20gdGhlIHZhcmlvdXMgZnJhbWV3b3JraW5zdGFsbC4uLiB0YXJnZXRzIGluIHRoZSAKLSMgbWFpbiBNYWtlZmlsZS4gVGhlIG5leHQgY291cGxlIG9mIHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBvbiB0aGUgCisjIFRoaXMgZmlsZSBjYW4gYmUgaW52b2tlZCBmcm9tIHRoZSB2YXJpb3VzIGZyYW1ld29ya2luc3RhbGwuLi4gdGFyZ2V0cyBpbiB0aGUKKyMgbWFpbiBNYWtlZmlsZS4gVGhlIG5leHQgY291cGxlIG9mIHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBvbiB0aGUKICMgY29tbWFuZGxpbmUgaW4gdGhhdCBjYXNlLgogCiBWRVJTSU9OPUBWRVJTSU9OQApAQCAtNTMsNyArNTMsNyBAQAogaW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFCiAKICMKLSMgSW5zdGFsbCB1bml4IHRvb2xzIGluIC91c3IvbG9jYWwvYmluLiBUaGVzZSBhcmUganVzdCBhbGlhc2VzIGZvciB0aGUgCisjIEluc3RhbGwgdW5peCB0b29scyBpbiAvdXNyL2xvY2FsL2Jpbi4gVGhlc2UgYXJlIGp1c3QgYWxpYXNlcyBmb3IgdGhlCiAjIGFjdHVhbCBpbnN0YWxsYXRpb24gaW5zaWRlIHRoZSBmcmFtZXdvcmsuCiAjCiBpbnN0YWxsdW5peHRvb2xzOgpkaWZmIC0tZ2l0IGEvTWFjL1B5dGhvbkxhdW5jaGVyL0luZm8ucGxpc3QuaW4gYi9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgppbmRleCA2YzRiZmU4Li40YTVlZWI1IDEwMDY0NAotLS0gYS9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgorKysgYi9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgpAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEuMCI+CiA8ZGljdD4KIAk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tleT4KQEAgLTM4LDcgKzM4LDcgQEAKIAkJPC9kaWN0PgogCTwvYXJyYXk+CiAJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KLQk8c3RyaW5nPlB5dGhvbkxhdW5jaGVyPC9zdHJpbmc+CisJPHN0cmluZz5QeXRob24gTGF1bmNoZXI8L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlR2V0SW5mb1N0cmluZzwva2V5PgogCTxzdHJpbmc+JVZFUlNJT04lLCDCqSAyMDAxLTIwMTYgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSWNvbkZpbGU8L2tleT4KZGlmZiAtLWdpdCBhL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbiBiL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbgppbmRleCBmMDVlZmRmLi40YzA1ZjI2IDEwMDY0NAotLS0gYS9NYWMvUHl0aG9uTGF1bmNoZXIvTWFrZWZpbGUuaW4KKysrIGIvTWFjL1B5dGhvbkxhdW5jaGVyL01ha2VmaWxlLmluCkBAIC0xNSwxMiArMTUsMTAgQEAKIFBZVEhPTkZSQU1FV09SSz1AUFlUSE9ORlJBTUVXT1JLQAogCiAjIERlcGxveW1lbnQgdGFyZ2V0IHNlbGVjdGVkIGR1cmluZyBjb25maWd1cmUsIHRvIGJlIGNoZWNrZWQKLSMgYnkgZGlzdHV0aWxzICAKKyMgYnkgZGlzdHV0aWxzCiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9QENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRACiBARVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVEBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAKLUJVTkRMRUJVTERFUj0kKHNyY2RpcikvLi4vVG9vbHMvYnVuZGxlYnVpbGRlci5weQotCiBQWVRIT05BUFBTRElSPUBGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWEAvJChQWVRIT05GUkFNRVdPUkspICQoVkVSU0lPTikKIE9CSkVDVFM9RmlsZVNldHRpbmdzLm8gTXlBcHBEZWxlZ2F0ZS5vIE15RG9jdW1lbnQubyBQcmVmZXJlbmNlc1dpbmRvd0NvbnRyb2xsZXIubyBkb3NjcmlwdC5vIG1haW4ubwogCkBAIC0zMCwxMCArMjgsMTAgQEAKIAkvYmluL2NwIC1yICJQeXRob24gTGF1bmNoZXIuYXBwIiAiJChERVNURElSKSQoUFlUSE9OQVBQU0RJUikiCiAJdG91Y2ggIiQoREVTVERJUikkKFBZVEhPTkFQUFNESVIpL1B5dGhvbiBMYXVuY2hlci5hcHAiCiAKLQogY2xlYW46CiAJcm0gLWYgKi5vICJQeXRob24gTGF1bmNoZXIiCiAJcm0gLXJmICJQeXRob24gTGF1bmNoZXIuYXBwIgorCXJtIC1mIEluZm8ucGxpc3QKIAogUHl0aG9uXCBMYXVuY2hlci5hcHA6ICBJbmZvLnBsaXN0IFwKIAkJUHl0aG9uXCBMYXVuY2hlciAkKHNyY2RpcikvLi4vSWNvbnMvUHl0aG9uTGF1bmNoZXIuaWNucyBcCkBAIC00MSwxOCArMzksMTcgQEAKIAkJJChzcmNkaXIpLy4uL0ljb25zL1B5dGhvbkNvbXBpbGVkLmljbnMgXAogCQkkKHNyY2RpcikvZmFjdG9yeVNldHRpbmdzLnBsaXN0CiAJcm0gLWZyICJQeXRob24gTGF1bmNoZXIuYXBwIgotCSQoUlVOU0hBUkVEKSAkKEJVSUxEUFlUSE9OKSAkKEJVTkRMRUJVTERFUikgXAotCQktLWJ1aWxkZGlyPS4gXAotCQktLW5hbWU9IlB5dGhvbiBMYXVuY2hlciIgXAotCQktLWV4ZWN1dGFibGU9IlB5dGhvbiBMYXVuY2hlciIgXAotCQktLWljb25maWxlPSQoc3JjZGlyKS8uLi9JY29ucy9QeXRob25MYXVuY2hlci5pY25zIFwKLQkJLS1idW5kbGUtaWQ9b3JnLnB5dGhvbi5QeXRob25MYXVuY2hlciBcCi0JCS0tcmVzb3VyY2U9JChzcmNkaXIpLy4uL0ljb25zL1B5dGhvblNvdXJjZS5pY25zIFwKLQkJLS1yZXNvdXJjZT0kKHNyY2RpcikvLi4vSWNvbnMvUHl0aG9uQ29tcGlsZWQuaWNucyBcCi0JCS0tcmVzb3VyY2U9JChzcmNkaXIpL0VuZ2xpc2gubHByb2ogXAotCQktLXJlc291cmNlPSQoc3JjZGlyKS9mYWN0b3J5U2V0dGluZ3MucGxpc3QgXAotCQktLXBsaXN0IEluZm8ucGxpc3QgXAotCQlidWlsZAorCW1rZGlyICJQeXRob24gTGF1bmNoZXIuYXBwIgorCW1rZGlyICJQeXRob24gTGF1bmNoZXIuYXBwL0NvbnRlbnRzIgorCW1rZGlyICJQeXRob24gTGF1bmNoZXIuYXBwL0NvbnRlbnRzL01hY09TIgorCW1rZGlyICJQeXRob24gTGF1bmNoZXIuYXBwL0NvbnRlbnRzL1Jlc291cmNlcyIKKwljcCAiUHl0aG9uIExhdW5jaGVyIiAiUHl0aG9uIExhdW5jaGVyLmFwcC9Db250ZW50cy9NYWNPUyIKKwljcCBJbmZvLnBsaXN0ICAiUHl0aG9uIExhdW5jaGVyLmFwcC9Db250ZW50cyIKKwljcCAkKHNyY2RpcikvLi4vSWNvbnMvUHl0aG9uTGF1bmNoZXIuaWNucyAgIlB5dGhvbiBMYXVuY2hlci5hcHAvQ29udGVudHMvUmVzb3VyY2VzIgorCWNwICQoc3JjZGlyKS8uLi9JY29ucy9QeXRob25Tb3VyY2UuaWNucyAgIlB5dGhvbiBMYXVuY2hlci5hcHAvQ29udGVudHMvUmVzb3VyY2VzIgorCWNwICQoc3JjZGlyKS8uLi9JY29ucy9QeXRob25Db21waWxlZC5pY25zICAiUHl0aG9uIExhdW5jaGVyLmFwcC9Db250ZW50cy9SZXNvdXJjZXMiCisJY3AgJChzcmNkaXIpL2ZhY3RvcnlTZXR0aW5ncy5wbGlzdCAgIlB5dGhvbiBMYXVuY2hlci5hcHAvQ29udGVudHMvUmVzb3VyY2VzIgorCWNwIC1SICQoc3JjZGlyKS9FbmdsaXNoLmxwcm9qICJQeXRob24gTGF1bmNoZXIuYXBwL0NvbnRlbnRzL1Jlc291cmNlcyIKIAogRmlsZVNldHRpbmdzLm86ICQoc3JjZGlyKS9GaWxlU2V0dGluZ3MubQogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAtYyAkKHNyY2RpcikvRmlsZVNldHRpbmdzLm0KZGlmZiAtLWdpdCBhL01hYy9SRUFETUUgYi9NYWMvUkVBRE1FCmluZGV4IDBhMzEzZDEuLjA3ZjA5ZmEgMTAwNjQ0Ci0tLSBhL01hYy9SRUFETUUKKysrIGIvTWFjL1JFQURNRQpAQCAtMTksNyArMTksNyBAQAogCiAgIElmIHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIHRoZSBidWlsZCB3aWxsIGNyZWF0ZSBhIFB5dGhvbi5mcmFtZXdvcmsgcmF0aGVyCiAgIHRoYW4gYSB0cmFkaXRpb25hbCBVbml4IGluc3RhbGwuIFNlZSB0aGUgc2VjdGlvbgotICBfYEJ1aWxkaW5nIGFuZCB1c2luZyBhIGZyYW1ld29yay1iYXNlZCBQeXRob24gb24gTWFjIE9TIFhgIGZvciBtb3JlIAorICBfYEJ1aWxkaW5nIGFuZCB1c2luZyBhIGZyYW1ld29yay1iYXNlZCBQeXRob24gb24gTWFjIE9TIFhgIGZvciBtb3JlCiAgIGluZm9ybWF0aW9uIG9uIGZyYW1ld29ya3MuCiAKICAgSWYgdGhlIG9wdGlvbmFsIGRpcmVjdG9yeSBhcmd1bWVudCBpcyBzcGVjaWZpZWQgdGhlIGZyYW1ld29yayBpcyBpbnN0YWxsZWQKQEAgLTQ2LDE0ICs0NiwxOSBAQAogICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVzIHdoaWNoIE9TIFggU0RLIHNob3VsZCBiZSB1c2VkIHRvIHBlcmZvcm0gdGhlCiAgIGJ1aWxkLiAgSWYgeGNvZGVidWlsZCBpcyBhdmFpbGFibGUgYW5kIGNvbmZpZ3VyZWQsIHRoaXMgZGVmYXVsdHMgdG8KICAgdGhlIFhjb2RlIGRlZmF1bHQgTWFjT1MgWCBTREssIG90aGVyd2lzZSBgYC9EZXZlbG9wZXIvU0RLcy9NYWNPU1guMTAuNHUuc2RrYGAKLSAgaWYgYXZhaWxhYmxlIG9yIGBgL2BgIGlmIG5vdC4KKyAgaWYgYXZhaWxhYmxlIG9yIGBgL2BgIGlmIG5vdC4gIFdoZW4gYnVpbGRpbmcgb24gT1MgWCAxMC41IG9yIGxhdGVyLCB5b3UgY2FuCisgIHNwZWNpZnkgYGAvYGAgdG8gdXNlIHRoZSBpbnN0YWxsZWQgc3lzdGVtIGhlYWRlcnMgcmF0aGVyIHRoYW4gYW4gU0RLLiAgQXMgb2YKKyAgT1MgWCAxMC45LCB5b3Ugc2hvdWxkIGluc3RhbGwgdGhlIG9wdGlvbmFsIHN5c3RlbSBoZWFkZXJzIGZyb20gdGhlIENvbW1hbmQKKyAgTGluZSBUb29scyBjb21wb25lbnQgdXNpbmcgYGB4Y29kZS1zZWxlY3RgYDo6CisKKyAgICAgJCBzdWRvIHhjb2RlLXNlbGVjdCAtLWluc3RhbGwKIAogICBTZWUgdGhlIHNlY3Rpb24gX2BCdWlsZGluZyBhbmQgdXNpbmcgYSB1bml2ZXJzYWwgYmluYXJ5IG9mIFB5dGhvbiBvbiBNYWMgT1MgWGAKICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLSogYGAtLXdpdGgtdW5pdmVyYWwtYXJjaHM9VkFMVUVgYAorKiBgYC0td2l0aC11bml2ZXJzYWwtYXJjaHM9VkFMVUVgYAogCi0gIFNwZWNpZnkgdGhlIGtpbmQgb2YgdW5pdmVyc2FsIGJpbmFyeSB0aGF0IHNob3VsZCBiZSBjcmVhdGVkLiBUaGlzIG9wdGlvbiBpcyAKKyAgU3BlY2lmeSB0aGUga2luZCBvZiB1bml2ZXJzYWwgYmluYXJ5IHRoYXQgc2hvdWxkIGJlIGNyZWF0ZWQuIFRoaXMgb3B0aW9uIGlzCiAgIG9ubHkgdmFsaWQgd2hlbiBgYC0tZW5hYmxlLXVuaXZlcnNhbHNka2BgIGlzIHNwZWNpZmllZC4gIFRoZSBkZWZhdWx0IGlzCiAgIGBgMzItYml0YGAgaWYgYSBidWlsZGluZyB3aXRoIGEgU0RLIHRoYXQgc3VwcG9ydHMgUFBDLCBvdGhlcndpc2UgZGVmYXVsdHMKICAgdG8gYGBpbnRlbGBgLgpAQCAtMTIxLDcgKzEyNiw3IEBACiAKIFRvIGJ1aWxkIGEgdW5pdmVyc2FsIGJpbmFyeSB0aGF0IGluY2x1ZGVzIGEgNjQtYml0IGFyY2hpdGVjdHVyZSwgeW91IG11c3QgYnVpbGQKIG9uIGEgc3lzdGVtIHJ1bm5pbmcgT1MgWCAxMC41IG9yIGxhdGVyLiAgVGhlIGBgYWxsYGAgYW5kIGBgNjQtYml0YGAgZmxhdm9ycyBjYW4KLW9ubHkgYmUgYnVpbHQgd2l0aCBhbiAxMC41IFNESyBiZWNhdXNlIGBgcHBjNjRgYCBzdXBwb3J0IHdhcyBvbmx5IGluY2x1ZGVkIHdpdGgKK29ubHkgYmUgYnVpbHQgd2l0aCBhIDEwLjUgU0RLIGJlY2F1c2UgYGBwcGM2NGBgIHN1cHBvcnQgd2FzIG9ubHkgaW5jbHVkZWQgd2l0aAogT1MgWCAxMC41LiAgQWx0aG91Z2ggbGVnYWN5IGBgcHBjYGAgc3VwcG9ydCB3YXMgaW5jbHVkZWQgd2l0aCBYY29kZSAzIG9uIE9TIFgKIDEwLjYsIGl0IHdhcyByZW1vdmVkIGluIFhjb2RlIDQsIHZlcnNpb25zIG9mIHdoaWNoIHdlcmUgcmVsZWFzZWQgb24gT1MgWCAxMC42CiBhbmQgd2hpY2ggaXMgdGhlIHN0YW5kYXJkIGZvciBPUyBYIDEwLjcuICBUbyBzdW1tYXJpemUsIHRoZQpAQCAtMTc0LDE0ICsxNzksMTQgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBtYWluIHJlYXNvbiBpcyBiZWNhdXNlIHlvdSB3YW50IHRvIGNyZWF0ZSBHVUkgcHJvZ3JhbXMgaW4gUHl0aG9uLiBXaXRoIHRoZQotZXhjZXB0aW9uIG9mIFgxMS9YRGFyd2luLWJhc2VkIEdVSSB0b29sa2l0cyBhbGwgR1VJIHByb2dyYW1zIG5lZWQgdG8gYmUgcnVuIAorZXhjZXB0aW9uIG9mIFgxMS9YRGFyd2luLWJhc2VkIEdVSSB0b29sa2l0cyBhbGwgR1VJIHByb2dyYW1zIG5lZWQgdG8gYmUgcnVuCiBmcm9tIGEgTWFjIE9TIFggYXBwbGljYXRpb24gYnVuZGxlICgiLmFwcCIpLgogCiBXaGlsZSBpdCBpcyB0ZWNobmljYWxseSBwb3NzaWJsZSB0byBjcmVhdGUgYSAuYXBwIHdpdGhvdXQgdXNpbmcgZnJhbWV3b3JrcyB5b3UKIHdpbGwgaGF2ZSB0byBkbyB0aGUgd29yayB5b3Vyc2VsZiBpZiB5b3UgcmVhbGx5IHdhbnQgdGhpcy4KIAogQSBzZWNvbmQgcmVhc29uIGZvciB1c2luZyBmcmFtZXdvcmtzIGlzIHRoYXQgdGhleSBwdXQgUHl0aG9uLXJlbGF0ZWQgaXRlbXMgaW4KLW9ubHkgdHdvIHBsYWNlczogIi9MaWJyYXJ5L0ZyYW1ld29yay9QeXRob24uZnJhbWV3b3JrIiBhbmQgCitvbmx5IHR3byBwbGFjZXM6ICIvTGlicmFyeS9GcmFtZXdvcmsvUHl0aG9uLmZyYW1ld29yayIgYW5kCiAiL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIzLjQiLAogIjIuNyIsIGV0Yy4gIFRoaXMgc2ltcGxpZmllcyBtYXR0ZXJzIGZvciB1c2VycyBpbnN0YWxsaW5nCiBQeXRob24gZnJvbSBhIGJpbmFyeSBkaXN0cmlidXRpb24gaWYgdGhleSB3YW50IHRvIGdldCByaWQgb2YgaXQgYWdhaW4uIE1vcmVvdmVyLApAQCAtMjI4LDExICsyMzMsMTEgQEAKICAxLiAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1mcmFtZXdvcmsKIAogIDIuIG1ha2UKLSAKKwogIDMuIG1ha2UgaW5zdGFsbAogCiBUaGlzIHNlcXVlbmNlIHdpbGwgcHV0IHRoZSBmcmFtZXdvcmsgaW4gYGAvTGlicmFyeS9GcmFtZXdvcmsvUHl0aG9uLmZyYW1ld29ya2BgLAotdGhlIGFwcGxpY2F0aW9ucyBpbiBgYC9BcHBsaWNhdGlvbnMvUHl0aG9uIDxWRVJTSU9OPmBgIGFuZCB0aGUgdW5peCB0b29scyBpbiAKK3RoZSBhcHBsaWNhdGlvbnMgaW4gYGAvQXBwbGljYXRpb25zL1B5dGhvbiA8VkVSU0lPTj5gYCBhbmQgdGhlIHVuaXggdG9vbHMgaW4KIGBgL3Vzci9sb2NhbC9iaW5gYC4KIAogSW5zdGFsbGluZyBpbiBhbm90aGVyIHBsYWNlLCBmb3IgaW5zdGFuY2UgYGAkSE9NRS9MaWJyYXJ5L0ZyYW1ld29ya3NgYCBpZiB5b3UKQEAgLTMwMCw3ICszMDUsNyBAQAogdXNlIHlvdXIgbm9ybWFsIGJ1aWxkIGRpcmVjdG9yeSBub3IgZG9lcyBpdCBpbnN0YWxsIGludG8gLy4KIAogQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBzY3JpcHQgbG9jYXRlcyB0aGUgZmlsZXMgaXQgbmVlZHMgeW91IGhhdmUgdG8gcnVuIGl0Ci1mcm9tIHdpdGhpbiB0aGUgQnVpbGRTY3JpcHQgZGlyZWN0b3J5LiBUaGUgc2NyaXB0IGFjY2VwdHMgYSBudW1iZXIgb2YgCitmcm9tIHdpdGhpbiB0aGUgQnVpbGRTY3JpcHQgZGlyZWN0b3J5LiBUaGUgc2NyaXB0IGFjY2VwdHMgYSBudW1iZXIgb2YKIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIHJ1biBpdCB3aXRoIC0taGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogQ29uZmlndXJlIHdhcm5pbmdzCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weSBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmNTY3OWQzLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTM0ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIiIiXAotYnVuZGxlYnVpbGRlci5weSAtLSBUb29scyB0byBhc3NlbWJsZSBNYWNPUyBYIChhcHBsaWNhdGlvbikgYnVuZGxlcy4KLQotVGhpcyBtb2R1bGUgY29udGFpbnMgdHdvIGNsYXNzZXMgdG8gYnVpbGQgc28gY2FsbGVkICJidW5kbGVzIiBmb3IKLU1hY09TIFguIEJ1bmRsZUJ1aWxkZXIgaXMgYSBnZW5lcmFsIHRvb2wsIEFwcEJ1aWxkZXIgaXMgYSBzdWJjbGFzcwotc3BlY2lhbGl6ZWQgaW4gYnVpbGRpbmcgYXBwbGljYXRpb24gYnVuZGxlcy4KLQotW0J1bmRsZXxBcHBdQnVpbGRlciBvYmplY3RzIGFyZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGJ1bmNoIG9mIGtleXdvcmQKLWFyZ3VtZW50cywgYW5kIGhhdmUgYSBidWlsZCgpIG1ldGhvZCB0aGF0IHdpbGwgZG8gYWxsIHRoZSB3b3JrLiBTZWUKLXRoZSBjbGFzcyBkb2Mgc3RyaW5ncyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzLgotCi1UaGUgbW9kdWxlIGNvbnRhaW5zIGEgbWFpbiBwcm9ncmFtIHRoYXQgY2FuIGJlIHVzZWQgaW4gdHdvIHdheXM6Ci0KLSAgJSBweXRob24gYnVuZGxlYnVpbGRlci5weSBbb3B0aW9uc10gYnVpbGQKLSAgJSBweXRob24gYnVpbGRhcHAucHkgW29wdGlvbnNdIGJ1aWxkCi0KLVdoZXJlICJidWlsZGFwcC5weSIgaXMgYSB1c2VyLXN1cHBsaWVkIHNldHVwLnB5LWxpa2Ugc2NyaXB0IGZvbGxvd2luZwotdGhpcyBtb2RlbDoKLQotICBmcm9tIGJ1bmRsZWJ1aWxkZXIgaW1wb3J0IGJ1aWxkYXBwCi0gIGJ1aWxkYXBwKDxsb3RzLW9mLWtleXdvcmQtYXJncz4pCi0KLSIiIgotCi0KLV9fYWxsX18gPSBbIkJ1bmRsZUJ1aWxkZXIiLCAiQnVuZGxlQnVpbGRlckVycm9yIiwgIkFwcEJ1aWxkZXIiLCAiYnVpbGRhcHAiXQotCi0KLWltcG9ydCBzeXMKLWltcG9ydCBvcywgZXJybm8sIHNodXRpbAotaW1wb3J0IGltcCwgbWFyc2hhbAotaW1wb3J0IHJlCi1mcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5Ci1pbXBvcnQgZ2V0b3B0Ci1mcm9tIHBsaXN0bGliIGltcG9ydCBQbGlzdAotZnJvbSB0eXBlcyBpbXBvcnQgRnVuY3Rpb25UeXBlIGFzIGZ1bmN0aW9uCi0KLWNsYXNzIEJ1bmRsZUJ1aWxkZXJFcnJvcihFeGNlcHRpb24pOiBwYXNzCi0KLQotY2xhc3MgRGVmYXVsdHM6Ci0KLSAgICAiIiJDbGFzcyBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlIGFuZCBhcmUKLSAgICBub3QgZnVuY3Rpb25zIG9yIGNsYXNzbWV0aG9kcyBhcmUgKGRlZXApY29waWVkIHRvIHNlbGYuX19kaWN0X18uCi0gICAgVGhpcyBhbGxvd3MgZm9yIG11dGFibGUgZGVmYXVsdCB2YWx1ZXMuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBkZWZhdWx0cyA9IHNlbGYuX2dldERlZmF1bHRzKCkKLSAgICAgICAgZGVmYXVsdHMudXBkYXRlKGt3YXJncykKLSAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoZGVmYXVsdHMpCi0KLSAgICBkZWYgX2dldERlZmF1bHRzKGNscyk6Ci0gICAgICAgIGRlZmF1bHRzID0ge30KLSAgICAgICAgZm9yIGJhc2UgaW4gY2xzLl9fYmFzZXNfXzoKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoYmFzZSwgIl9nZXREZWZhdWx0cyIpOgotICAgICAgICAgICAgICAgIGRlZmF1bHRzLnVwZGF0ZShiYXNlLl9nZXREZWZhdWx0cygpKQotICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbGlzdChjbHMuX19kaWN0X18uaXRlbXMoKSk6Ci0gICAgICAgICAgICBpZiBuYW1lWzBdICE9ICJfIiBhbmQgbm90IGlzaW5zdGFuY2UodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiwgY2xhc3NtZXRob2QpKToKLSAgICAgICAgICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IGRlZXBjb3B5KHZhbHVlKQotICAgICAgICByZXR1cm4gZGVmYXVsdHMKLSAgICBfZ2V0RGVmYXVsdHMgPSBjbGFzc21ldGhvZChfZ2V0RGVmYXVsdHMpCi0KLQotY2xhc3MgQnVuZGxlQnVpbGRlcihEZWZhdWx0cyk6Ci0KLSAgICAiIiJCdW5kbGVCdWlsZGVyIGlzIGEgYmFyZWJvbmVzIGNsYXNzIGZvciBhc3NlbWJsaW5nIGJ1bmRsZXMuIEl0Ci0gICAga25vd3Mgbm90aGluZyBhYm91dCBleGVjdXRhYmxlcyBvciBpY29ucywgaXQgb25seSBjb3BpZXMgZmlsZXMKLSAgICBhbmQgY3JlYXRlcyB0aGUgUGtnSW5mbyBhbmQgSW5mby5wbGlzdCBmaWxlcy4KLSAgICAiIiIKLQotICAgICMgKE5vdGUgdGhhdCBEZWZhdWx0cy5fX2luaXRfXyAoZGVlcCljb3BpZXMgdGhlc2UgdmFsdWVzIHRvCi0gICAgIyBpbnN0YW5jZSB2YXJpYWJsZXMuIE11dGFibGUgZGVmYXVsdHMgYXJlIHRoZXJlZm9yZSBzYWZlLikKLQotICAgICMgTmFtZSBvZiB0aGUgYnVuZGxlLCB3aXRoIG9yIHdpdGhvdXQgZXh0ZW5zaW9uLgotICAgIG5hbWUgPSBOb25lCi0KLSAgICAjIFRoZSBwcm9wZXJ0eSBsaXN0ICgicGxpc3QiKQotICAgIHBsaXN0ID0gUGxpc3QoQ0ZCdW5kbGVEZXZlbG9wbWVudFJlZ2lvbiA9ICJFbmdsaXNoIiwKLSAgICAgICAgICAgICAgICAgIENGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uID0gIjYuMCIpCi0KLSAgICAjIFRoZSB0eXBlIG9mIHRoZSBidW5kbGUuCi0gICAgdHlwZSA9ICJCTkRMIgotICAgICMgVGhlIGNyZWF0b3IgY29kZSBvZiB0aGUgYnVuZGxlLgotICAgIGNyZWF0b3IgPSBOb25lCi0KLSAgICAjIHRoZSBDRkJ1bmRsZUlkZW50aWZpZXIgKHRoaXMgaXMgdXNlZCBmb3IgdGhlIHByZWZlcmVuY2VzIGZpbGUgbmFtZSkKLSAgICBidW5kbGVfaWQgPSBOb25lCi0KLSAgICAjIExpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIHRvIGJlIGNvcGllZCB0byA8YnVuZGxlPi9Db250ZW50cy9SZXNvdXJjZXMuCi0gICAgcmVzb3VyY2VzID0gW10KLQotICAgICMgTGlzdCBvZiAoc3JjLCBkZXN0KSB0dXBsZXM7IGRlc3Qgc2hvdWxkIGJlIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgYnVuZGxlCi0gICAgIyAoZWcuICJDb250ZW50cy9SZXNvdXJjZXMvTXlTdHVmZi9Tb21lRmlsZS5leHQpLgotICAgIGZpbGVzID0gW10KLQotICAgICMgTGlzdCBvZiBzaGFyZWQgbGlicmFyaWVzIChkeWxpYnMsIEZyYW1ld29ya3MpIHRvIGJ1bmRsZSB3aXRoIHRoZSBhcHAKLSAgICAjIHdpbGwgYmUgcGxhY2VkIGluIENvbnRlbnRzL0ZyYW1ld29ya3MKLSAgICBsaWJzID0gW10KLQotICAgICMgRGlyZWN0b3J5IHdoZXJlIHRoZSBidW5kbGUgd2lsbCBiZSBhc3NlbWJsZWQuCi0gICAgYnVpbGRkaXIgPSAiYnVpbGQiCi0KLSAgICAjIE1ha2Ugc3ltbGlua3MgaW5zdGVhZCBjb3B5aW5nIGZpbGVzLiBUaGlzIGlzIGhhbmR5IGR1cmluZyBkZWJ1Z2dpbmcsIGJ1dAotICAgICMgbWFrZXMgdGhlIGJ1bmRsZSBub24tZGlzdHJpYnV0YWJsZS4KLSAgICBzeW1saW5rID0gMAotCi0gICAgIyBWZXJib3NpdHkgbGV2ZWwuCi0gICAgdmVyYm9zaXR5ID0gMQotCi0gICAgIyBEZXN0aW5hdGlvbiByb290IGRpcmVjdG9yeQotICAgIGRlc3Ryb290ID0gIiIKLQotICAgIGRlZiBzZXR1cChzZWxmKToKLSAgICAgICAgIyBYWFggcmV0aGluayBzZWxmLm5hbWUgbXVuZ2luZywgdGhpcyBpcyBicml0dGxlLgotICAgICAgICBzZWxmLm5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoc2VsZi5uYW1lKQotICAgICAgICBpZiBub3QgZXh0OgotICAgICAgICAgICAgZXh0ID0gIi5idW5kbGUiCi0gICAgICAgIGJ1bmRsZWV4dGVuc2lvbiA9IGV4dAotICAgICAgICAjIG1pc2MgKGRlcml2ZWQpIGF0dHJpYnV0ZXMKLSAgICAgICAgc2VsZi5idW5kbGVwYXRoID0gcGF0aGpvaW4oc2VsZi5idWlsZGRpciwgc2VsZi5uYW1lICsgYnVuZGxlZXh0ZW5zaW9uKQotCi0gICAgICAgIHBsaXN0ID0gc2VsZi5wbGlzdAotICAgICAgICBwbGlzdC5DRkJ1bmRsZU5hbWUgPSBzZWxmLm5hbWUKLSAgICAgICAgcGxpc3QuQ0ZCdW5kbGVQYWNrYWdlVHlwZSA9IHNlbGYudHlwZQotICAgICAgICBpZiBzZWxmLmNyZWF0b3IgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIGhhc2F0dHIocGxpc3QsICJDRkJ1bmRsZVNpZ25hdHVyZSIpOgotICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRvciA9IHBsaXN0LkNGQnVuZGxlU2lnbmF0dXJlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRvciA9ICI/Pz8/IgotICAgICAgICBwbGlzdC5DRkJ1bmRsZVNpZ25hdHVyZSA9IHNlbGYuY3JlYXRvcgotICAgICAgICBpZiBzZWxmLmJ1bmRsZV9pZDoKLSAgICAgICAgICAgIHBsaXN0LkNGQnVuZGxlSWRlbnRpZmllciA9IHNlbGYuYnVuZGxlX2lkCi0gICAgICAgIGVsaWYgbm90IGhhc2F0dHIocGxpc3QsICJDRkJ1bmRsZUlkZW50aWZpZXIiKToKLSAgICAgICAgICAgIHBsaXN0LkNGQnVuZGxlSWRlbnRpZmllciA9IHNlbGYubmFtZQotCi0gICAgZGVmIGJ1aWxkKHNlbGYpOgotICAgICAgICAiIiJCdWlsZCB0aGUgYnVuZGxlLiIiIgotICAgICAgICBidWlsZGRpciA9IHNlbGYuYnVpbGRkaXIKLSAgICAgICAgaWYgYnVpbGRkaXIgYW5kIG5vdCBvcy5wYXRoLmV4aXN0cyhidWlsZGRpcik6Ci0gICAgICAgICAgICBvcy5ta2RpcihidWlsZGRpcikKLSAgICAgICAgc2VsZi5tZXNzYWdlKCJCdWlsZGluZyAlcyIgJSByZXByKHNlbGYuYnVuZGxlcGF0aCksIDEpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYnVuZGxlcGF0aCk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuYnVuZGxlcGF0aCkKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5idW5kbGVwYXRoICsgJ34nKToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5idW5kbGVwYXRoICsgJ34nKQotICAgICAgICBicCA9IHNlbGYuYnVuZGxlcGF0aAotCi0gICAgICAgICMgQ3JlYXRlIHRoZSBhcHAgYnVuZGxlIGluIGEgdGVtcG9yYXJ5IGxvY2F0aW9uIGFuZCB0aGVuCi0gICAgICAgICMgcmVuYW1lIHRoZSBjb21wbGV0ZWQgYnVuZGxlLiBUaGlzIHdheSB0aGUgRmluZGVyIHdpbGwKLSAgICAgICAgIyBuZXZlciBzZWUgYW4gaW5jb21wbGV0ZSBidW5kbGUgKHdoZXJlIGl0IG1pZ2h0IHBpY2sgdXAKLSAgICAgICAgIyBhbmQgY2FjaGUgdGhlIHdyb25nIG1ldGEgZGF0YSkKLSAgICAgICAgc2VsZi5idW5kbGVwYXRoID0gYnAgKyAnficKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MubWtkaXIoc2VsZi5idW5kbGVwYXRoKQotICAgICAgICAgICAgc2VsZi5wcmVQcm9jZXNzKCkKLSAgICAgICAgICAgIHNlbGYuX2NvcHlGaWxlcygpCi0gICAgICAgICAgICBzZWxmLl9hZGRNZXRhRmlsZXMoKQotICAgICAgICAgICAgc2VsZi5wb3N0UHJvY2VzcygpCi0gICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5idW5kbGVwYXRoLCBicCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuYnVuZGxlcGF0aCA9IGJwCi0gICAgICAgIHNlbGYubWVzc2FnZSgiRG9uZS4iLCAxKQotCi0gICAgZGVmIHByZVByb2Nlc3Moc2VsZik6Ci0gICAgICAgICIiIkhvb2sgZm9yIHN1YmNsYXNzZXMuIiIiCi0gICAgICAgIHBhc3MKLSAgICBkZWYgcG9zdFByb2Nlc3Moc2VsZik6Ci0gICAgICAgICIiIkhvb2sgZm9yIHN1YmNsYXNzZXMuIiIiCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBfYWRkTWV0YUZpbGVzKHNlbGYpOgotICAgICAgICBjb250ZW50cyA9IHBhdGhqb2luKHNlbGYuYnVuZGxlcGF0aCwgIkNvbnRlbnRzIikKLSAgICAgICAgbWFrZWRpcnMoY29udGVudHMpCi0gICAgICAgICMKLSAgICAgICAgIyBXcml0ZSBDb250ZW50cy9Qa2dJbmZvCi0gICAgICAgIGFzc2VydCBsZW4oc2VsZi50eXBlKSA9PSBsZW4oc2VsZi5jcmVhdG9yKSA9PSA0LCBcCi0gICAgICAgICAgICAgICAgInR5cGUgYW5kIGNyZWF0b3IgbXVzdCBiZSA0LWJ5dGUgc3RyaW5ncy4iCi0gICAgICAgIHBrZ2luZm8gPSBwYXRoam9pbihjb250ZW50cywgIlBrZ0luZm8iKQotICAgICAgICBmID0gb3Blbihwa2dpbmZvLCAid2IiKQotICAgICAgICBmLndyaXRlKChzZWxmLnR5cGUgKyBzZWxmLmNyZWF0b3IpLmVuY29kZSgnbGF0aW4xJykpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICAjCi0gICAgICAgICMgV3JpdGUgQ29udGVudHMvSW5mby5wbGlzdAotICAgICAgICBpbmZvcGxpc3QgPSBwYXRoam9pbihjb250ZW50cywgIkluZm8ucGxpc3QiKQotICAgICAgICBzZWxmLnBsaXN0LndyaXRlKGluZm9wbGlzdCkKLQotICAgIGRlZiBfY29weUZpbGVzKHNlbGYpOgotICAgICAgICBmaWxlcyA9IHNlbGYuZmlsZXNbOl0KLSAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5yZXNvdXJjZXM6Ci0gICAgICAgICAgICBmaWxlcy5hcHBlbmQoKHBhdGgsIHBhdGhqb2luKCJDb250ZW50cyIsICJSZXNvdXJjZXMiLAotICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUocGF0aCkpKSkKLSAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5saWJzOgotICAgICAgICAgICAgZmlsZXMuYXBwZW5kKChwYXRoLCBwYXRoam9pbigiQ29udGVudHMiLCAiRnJhbWV3b3JrcyIsCi0gICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShwYXRoKSkpKQotICAgICAgICBpZiBzZWxmLnN5bWxpbms6Ci0gICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIk1ha2luZyBzeW1ib2xpYyBsaW5rcyIsIDEpCi0gICAgICAgICAgICBtc2cgPSAiTWFraW5nIHN5bWxpbmsgZnJvbSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiQ29weWluZyBmaWxlcyIsIDEpCi0gICAgICAgICAgICBtc2cgPSAiQ29weWluZyIKLSAgICAgICAgZmlsZXMuc29ydCgpCi0gICAgICAgIGZvciBzcmMsIGRzdCBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3JjKToKLSAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIiVzICVzLyB0byAlcy8iICUgKG1zZywgc3JjLCBkc3QpLCAyKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIiVzICVzIHRvICVzIiAlIChtc2csIHNyYywgZHN0KSwgMikKLSAgICAgICAgICAgIGRzdCA9IHBhdGhqb2luKHNlbGYuYnVuZGxlcGF0aCwgZHN0KQotICAgICAgICAgICAgaWYgc2VsZi5zeW1saW5rOgotICAgICAgICAgICAgICAgIHN5bWxpbmsoc3JjLCBkc3QsIG1rZGlycz0xKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb3B5KHNyYywgZHN0LCBta2RpcnM9MSkKLQotICAgIGRlZiBtZXNzYWdlKHNlbGYsIG1zZywgbGV2ZWw9MCk6Ci0gICAgICAgIGlmIGxldmVsIDw9IHNlbGYudmVyYm9zaXR5OgotICAgICAgICAgICAgaW5kZW50ID0gIiIKLSAgICAgICAgICAgIGlmIGxldmVsID4gMToKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAobGV2ZWwgLSAxKSAqICIgICIKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoaW5kZW50ICsgbXNnICsgIlxuIikKLQotICAgIGRlZiByZXBvcnQoc2VsZik6Ci0gICAgICAgICMgWFhYIHNvbWV0aGluZyBkZWNlbnQKLSAgICAgICAgcGFzcwotCi0KLWlmIF9fZGVidWdfXzoKLSAgICBQWUNfRVhUID0gIi5weWMiCi1lbHNlOgotICAgIFBZQ19FWFQgPSAiLnB5byIKLQotTUFHSUMgPSBpbXAuZ2V0X21hZ2ljKCkKLVVTRV9aSVBJTVBPUlQgPSAiemlwaW1wb3J0IiBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKLQotIyBGb3Igc3RhbmRhbG9uZSBhcHBzLCB3ZSBoYXZlIG91ciBvd24gbWluaW1hbCBzaXRlLnB5LiBXZSBkb24ndCBuZWVkCi0jIGFsbCB0aGUgY3J1ZnQgb2YgdGhlIHJlYWwgc2l0ZS5weS4KLVNJVEVfUFkgPSAiIiJcCi1pbXBvcnQgc3lzCi1pZiBub3QgJShzZW1pX3N0YW5kYWxvbmUpczoKLSAgICBkZWwgc3lzLnBhdGhbMTpdICAjIHN5cy5wYXRoWzBdIGlzIENvbnRlbnRzL1Jlc291cmNlcy8KLSIiIgotCi1pZiBVU0VfWklQSU1QT1JUOgotICAgIFpJUF9BUkNISVZFID0gIk1vZHVsZXMuemlwIgotICAgIFNJVEVfUFkgKz0gInN5cy5wYXRoLmFwcGVuZChzeXMucGF0aFswXSArICcvJXMnKVxuIiAlIFpJUF9BUkNISVZFCi0gICAgZGVmIGdldFB5Y0RhdGEoZnVsbG5hbWUsIGNvZGUsIGlzcGtnKToKLSAgICAgICAgaWYgaXNwa2c6Ci0gICAgICAgICAgICBmdWxsbmFtZSArPSAiLl9faW5pdF9fIgotICAgICAgICBwYXRoID0gZnVsbG5hbWUucmVwbGFjZSgiLiIsIG9zLnNlcCkgKyBQWUNfRVhUCi0gICAgICAgIHJldHVybiBwYXRoLCBNQUdJQyArICdcMFwwXDBcMCcgKyBtYXJzaGFsLmR1bXBzKGNvZGUpCi0KLSMKLSMgRXh0ZW5zaW9uIG1vZHVsZXMgY2FuJ3QgYmUgaW4gdGhlIG1vZHVsZXMgemlwIGFyY2hpdmUsIHNvIGEgcGxhY2Vob2xkZXIKLSMgaXMgYWRkZWQgaW5zdGVhZCwgdGhhdCBsb2FkcyB0aGUgZXh0ZW5zaW9uIGZyb20gYSBzcGVjaWZpZWQgbG9jYXRpb24uCi0jCi1FWFRfTE9BREVSID0gIiIiXAotZGVmIF9fbG9hZCgpOgotICAgIGltcG9ydCBpbXAsIHN5cywgb3MKLSAgICBmb3IgcCBpbiBzeXMucGF0aDoKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwLCAiJShmaWxlbmFtZSlzIikKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgICAgICBicmVhawotICAgIGVsc2U6Ci0gICAgICAgIGFzc2VydCAwLCAiZmlsZSBub3QgZm91bmQ6ICUoZmlsZW5hbWUpcyIKLSAgICBtb2QgPSBpbXAubG9hZF9keW5hbWljKCIlKG5hbWUpcyIsIHBhdGgpCi0KLV9fbG9hZCgpCi1kZWwgX19sb2FkCi0iIiIKLQotTUFZTUlTU19NT0RVTEVTID0gWydtYWMnLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKLSAgICAnd2luMzJhcGknLCAnY2UnLCAnX3dpbnJlZycsICdudHVybDJwYXRoJywgJ3NpdGVjdXN0b21pemUnLAotICAgICdvcmcucHl0aG9uLmNvcmUnLCAncmlzY29zJywgJ3Jpc2Nvc2Vudmlyb24nLCAncmlzY29zcGF0aCcKLV0KLQotU1RSSVBfRVhFQyA9ICIvdXNyL2Jpbi9zdHJpcCIKLQotIwotIyBXZSdyZSB1c2luZyBhIHN0b2NrIGludGVycHJldGVyIHRvIHJ1biB0aGUgYXBwLCB5ZXQgd2UgbmVlZAotIyBhIHdheSB0byBwYXNzIHRoZSBQeXRob24gbWFpbiBwcm9ncmFtIHRvIHRoZSBpbnRlcnByZXRlci4gVGhlCi0jIGJvb3RzdHJhcHBpbmcgc2NyaXB0IGZpcmVzIHVwIHRoZSBpbnRlcnByZXRlciB3aXRoIHRoZSByaWdodAotIyBhcmd1bWVudHMuIG9zLmV4ZWN2ZSgpIGlzIHVzZWQgYXMgT1NYIGRvZXNuJ3QgbGlrZSB1cyB0bwotIyBzdGFydCBhIHJlYWwgbmV3IHByb2Nlc3MuIEFsc28sIHRoZSBleGVjdXRhYmxlIG5hbWUgbXVzdCBtYXRjaAotIyB0aGUgQ0ZCdW5kbGVFeGVjdXRhYmxlIHZhbHVlIGluIHRoZSBJbmZvLnBsaXN0LCBzbyB3ZSBsaWUKLSMgZGVsaWJlcmF0ZWx5IHdpdGggYXJndlswXS4gVGhlIGFjdHVhbCBQeXRob24gZXhlY3V0YWJsZSBpcwotIyBwYXNzZWQgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgc28gd2UgY2FuICJyZXBhaXIiCi0jIHN5cy5leGVjdXRhYmxlIGxhdGVyLgotIwotQk9PVFNUUkFQX1NDUklQVCA9ICIiIlwKLSMhJShoYXNoYmFuZylzCi0KLWltcG9ydCBzeXMsIG9zCi1leGVjZGlyID0gb3MucGF0aC5kaXJuYW1lKHN5cy5hcmd2WzBdKQotZXhlY3V0YWJsZSA9IG9zLnBhdGguam9pbihleGVjZGlyLCAiJShleGVjdXRhYmxlKXMiKQotcmVzZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShleGVjZGlyKSwgIlJlc291cmNlcyIpCi1saWJkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGV4ZWNkaXIpLCAiRnJhbWV3b3JrcyIpCi1tYWlucHJvZ3JhbSA9IG9zLnBhdGguam9pbihyZXNkaXIsICIlKG1haW5wcm9ncmFtKXMiKQotCi1zeXMuYXJndi5pbnNlcnQoMSwgbWFpbnByb2dyYW0pCi1pZiAlKHN0YW5kYWxvbmUpcyBvciAlKHNlbWlfc3RhbmRhbG9uZSlzOgotICAgIG9zLmVudmlyb25bIlBZVEhPTlBBVEgiXSA9IHJlc2RpcgotICAgIGlmICUoc3RhbmRhbG9uZSlzOgotICAgICAgICBvcy5lbnZpcm9uWyJQWVRIT05IT01FIl0gPSByZXNkaXIKLWVsc2U6Ci0gICAgcHlwYXRoID0gb3MuZ2V0ZW52KCJQWVRIT05QQVRIIiwgIiIpCi0gICAgaWYgcHlwYXRoOgotICAgICAgICBweXBhdGggPSAiOiIgKyBweXBhdGgKLSAgICBvcy5lbnZpcm9uWyJQWVRIT05QQVRIIl0gPSByZXNkaXIgKyBweXBhdGgKLW9zLmVudmlyb25bIlBZVEhPTkVYRUNVVEFCTEUiXSA9IGV4ZWN1dGFibGUKLW9zLmVudmlyb25bIkRZTERfTElCUkFSWV9QQVRIIl0gPSBsaWJkaXIKLW9zLmVudmlyb25bIkRZTERfRlJBTUVXT1JLX1BBVEgiXSA9IGxpYmRpcgotb3MuZXhlY3ZlKGV4ZWN1dGFibGUsIHN5cy5hcmd2LCBvcy5lbnZpcm9uKQotIiIiCi0KLQotIwotIyBPcHRpb25hbCB3cmFwcGVyIHRoYXQgY29udmVydHMgImRyb3BwZWQgZmlsZXMiIGludG8gc3lzLmFyZ3YgdmFsdWVzLgotIwotQVJHVl9FTVVMQVRPUiA9ICIiIlwKLWltcG9ydCBhcmd2ZW11bGF0b3IsIG9zCi0KLWFyZ3ZlbXVsYXRvci5Bcmd2Q29sbGVjdG9yKCkubWFpbmxvb3AoKQotZXhlY2ZpbGUob3MucGF0aC5qb2luKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdLCAiJShyZWFsbWFpbnByb2dyYW0pcyIpKQotIiIiCi0KLSMKLSMgV2hlbiBidWlsZGluZyBhIHN0YW5kYWxvbmUgYXBwIHdpdGggUHl0aG9uLmZyYW1ld29yaywgd2UgbmVlZCB0byBjb3B5Ci0jIGEgc3Vic2V0IGZyb20gUHl0aG9uLmZyYW1ld29yayB0byB0aGUgYnVuZGxlLiBUaGUgZm9sbG93aW5nIGxpc3QKLSMgc3BlY2lmaWVzIGV4YWN0bHkgd2hhdCBpdGVtcyB3ZSdsbCBjb3B5LgotIwotUFlUSE9ORlJBTUVXT1JLR09PRElFUyA9IFsKLSAgICAiUHl0aG9uIiwgICMgdGhlIFB5dGhvbiBjb3JlIGxpYnJhcnkKLSAgICAiUmVzb3VyY2VzL0VuZ2xpc2gubHByb2oiLAotICAgICJSZXNvdXJjZXMvSW5mby5wbGlzdCIsCi0gICAgIlJlc291cmNlcy92ZXJzaW9uLnBsaXN0IiwKLV0KLQotZGVmIGlzRnJhbWV3b3JrKCk6Ci0gICAgcmV0dXJuIHN5cy5leGVjX3ByZWZpeC5maW5kKCJQeXRob24uZnJhbWV3b3JrIikgPiAwCi0KLQotTElCID0gb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJsaWIiLCAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkKLVNJVEVfUEFDS0FHRVMgPSBvcy5wYXRoLmpvaW4oTElCLCAic2l0ZS1wYWNrYWdlcyIpCi0KLQotY2xhc3MgQXBwQnVpbGRlcihCdW5kbGVCdWlsZGVyKToKLQotICAgICMgT3ZlcnJpZGUgdHlwZSBvZiB0aGUgYnVuZGxlLgotICAgIHR5cGUgPSAiQVBQTCIKLQotICAgICMgcGxhdGZvcm0sIG5hbWUgb2YgdGhlIHN1YmZvbGRlciBvZiBDb250ZW50cyB0aGF0IGNvbnRhaW5zIHRoZSBleGVjdXRhYmxlLgotICAgIHBsYXRmb3JtID0gIk1hY09TIgotCi0gICAgIyBBIFB5dGhvbiBtYWluIHByb2dyYW0uIElmIHRoaXMgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBtYWluCi0gICAgIyBleGVjdXRhYmxlIGluIHRoZSBidW5kbGUgd2lsbCBiZSBhIHNtYWxsIHdyYXBwZXIgdGhhdCBpbnZva2VzCi0gICAgIyB0aGUgbWFpbiBwcm9ncmFtLiAoWFhYIERpc2N1c3Mgd2h5LikKLSAgICBtYWlucHJvZ3JhbSA9IE5vbmUKLQotICAgICMgVGhlIG1haW4gZXhlY3V0YWJsZS4gSWYgYSBQeXRob24gbWFpbiBwcm9ncmFtIGlzIHNwZWNpZmllZAotICAgICMgdGhlIGV4ZWN1dGFibGUgd2lsbCBiZSBjb3BpZWQgdG8gUmVzb3VyY2VzIGFuZCBiZSBpbnZva2VkCi0gICAgIyBieSB0aGUgd3JhcHBlciBwcm9ncmFtIG1lbnRpb25lZCBhYm92ZS4gT3RoZXJ3aXNlIGl0IHdpbGwKLSAgICAjIHNpbXBseSBiZSB1c2VkIGFzIHRoZSBtYWluIGV4ZWN1dGFibGUuCi0gICAgZXhlY3V0YWJsZSA9IE5vbmUKLQotICAgICMgVGhlIG5hbWUgb2YgdGhlIG1haW4gbmliLCBmb3IgQ29jb2EgYXBwcy4gKk11c3QqIGJlIHNwZWNpZmllZAotICAgICMgd2hlbiBidWlsZGluZyBhIENvY29hIGFwcC4KLSAgICBuaWJuYW1lID0gTm9uZQotCi0gICAgIyBUaGUgbmFtZSBvZiB0aGUgaWNvbiBmaWxlIHRvIGJlIGNvcGllZCB0byBSZXNvdXJjZXMgYW5kIHVzZWQgZm9yCi0gICAgIyB0aGUgRmluZGVyIGljb24uCi0gICAgaWNvbmZpbGUgPSBOb25lCi0KLSAgICAjIFN5bWxpbmsgdGhlIGV4ZWN1dGFibGUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0LgotICAgIHN5bWxpbmtfZXhlYyA9IDAKLQotICAgICMgSWYgVHJ1ZSwgYnVpbGQgc3RhbmRhbG9uZSBhcHAuCi0gICAgc3RhbmRhbG9uZSA9IDAKLQotICAgICMgSWYgVHJ1ZSwgYnVpbGQgc2VtaS1zdGFuZGFsb25lIGFwcCAob25seSBpbmNsdWRlcyB0aGlyZC1wYXJ0eSBtb2R1bGVzKS4KLSAgICBzZW1pX3N0YW5kYWxvbmUgPSAwCi0KLSAgICAjIElmIHNldCwgdXNlIHRoaXMgZm9yICMhIGxpbmVzIGluIHN0ZWFkIG9mIHN5cy5leGVjdXRhYmxlCi0gICAgcHl0aG9uID0gTm9uZQotCi0gICAgIyBJZiBUcnVlLCBhZGQgYSByZWFsIG1haW4gcHJvZ3JhbSB0aGF0IGVtdWxhdGVzIHN5cy5hcmd2IGJlZm9yZSBjYWxsaW5nCi0gICAgIyBtYWlucHJvZ3JhbQotICAgIGFyZ3ZfZW11bGF0aW9uID0gMAotCi0gICAgIyBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIG9ubHkgdXNlZCB3aGVuIGJ1aWxkaW5nIGEgc3RhbmRhbG9uZSBhcHAuCi0KLSAgICAjIEV4Y2x1ZGUgdGhlc2UgbW9kdWxlcy4KLSAgICBleGNsdWRlTW9kdWxlcyA9IFtdCi0KLSAgICAjIEluY2x1ZGUgdGhlc2UgbW9kdWxlcy4KLSAgICBpbmNsdWRlTW9kdWxlcyA9IFtdCi0KLSAgICAjIEluY2x1ZGUgdGhlc2UgcGFja2FnZXMuCi0gICAgaW5jbHVkZVBhY2thZ2VzID0gW10KLQotICAgICMgU3RyaXAgYmluYXJpZXMgZnJvbSBkZWJ1ZyBpbmZvLgotICAgIHN0cmlwID0gMAotCi0gICAgIyBGb3VuZCBQeXRob24gbW9kdWxlczogWyhuYW1lLCBjb2Rlb2JqZWN0LCBpc3BrZyksIC4uLl0KLSAgICBweW1vZHVsZXMgPSBbXQotCi0gICAgIyBNb2R1bGVzIHRoYXQgbW9kdWxlZmluZGVyIGNvdWxkbid0IGZpbmQ6Ci0gICAgbWlzc2luZ01vZHVsZXMgPSBbXQotICAgIG1heWJlTWlzc2luZ01vZHVsZXMgPSBbXQotCi0gICAgZGVmIHNldHVwKHNlbGYpOgotICAgICAgICBpZiAoKHNlbGYuc3RhbmRhbG9uZSBvciBzZWxmLnNlbWlfc3RhbmRhbG9uZSkKLSAgICAgICAgICAgIGFuZCBzZWxmLm1haW5wcm9ncmFtIGlzIE5vbmUpOgotICAgICAgICAgICAgcmFpc2UgQnVuZGxlQnVpbGRlckVycm9yKCJtdXN0IHNwZWNpZnkgJ21haW5wcm9ncmFtJyB3aGVuICIKLSAgICAgICAgICAgICAgICAgICAgImJ1aWxkaW5nIGEgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbi4iKQotICAgICAgICBpZiBzZWxmLm1haW5wcm9ncmFtIGlzIE5vbmUgYW5kIHNlbGYuZXhlY3V0YWJsZSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgQnVuZGxlQnVpbGRlckVycm9yKCJtdXN0IHNwZWNpZnkgZWl0aGVyIG9yIGJvdGggb2YgIgotICAgICAgICAgICAgICAgICAgICAiJ2V4ZWN1dGFibGUnIGFuZCAnbWFpbnByb2dyYW0nIikKLQotICAgICAgICBzZWxmLmV4ZWNkaXIgPSBwYXRoam9pbigiQ29udGVudHMiLCBzZWxmLnBsYXRmb3JtKQotCi0gICAgICAgIGlmIHNlbGYubmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxpZiBzZWxmLm1haW5wcm9ncmFtIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5uYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHNlbGYubWFpbnByb2dyYW0pKVswXQotICAgICAgICBlbGlmIGV4ZWN1dGFibGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLm5hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoc2VsZi5leGVjdXRhYmxlKSlbMF0KLSAgICAgICAgaWYgc2VsZi5uYW1lWy00Ol0gIT0gIi5hcHAiOgotICAgICAgICAgICAgc2VsZi5uYW1lICs9ICIuYXBwIgotCi0gICAgICAgIGlmIHNlbGYuZXhlY3V0YWJsZSBpcyBOb25lOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuc3RhbmRhbG9uZSBhbmQgbm90IGlzRnJhbWV3b3JrKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zeW1saW5rX2V4ZWMgPSAxCi0gICAgICAgICAgICBpZiBzZWxmLnB5dGhvbjoKLSAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFibGUgPSBzZWxmLnB5dGhvbgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGFibGUgPSBzeXMuZXhlY3V0YWJsZQotCi0gICAgICAgIGlmIHNlbGYubmlibmFtZToKLSAgICAgICAgICAgIHNlbGYucGxpc3QuTlNNYWluTmliRmlsZSA9IHNlbGYubmlibmFtZQotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5wbGlzdCwgIk5TUHJpbmNpcGFsQ2xhc3MiKToKLSAgICAgICAgICAgICAgICBzZWxmLnBsaXN0Lk5TUHJpbmNpcGFsQ2xhc3MgPSAiTlNBcHBsaWNhdGlvbiIKLQotICAgICAgICBpZiBzZWxmLnN0YW5kYWxvbmUgYW5kIGlzRnJhbWV3b3JrKCk6Ci0gICAgICAgICAgICBzZWxmLmFkZFB5dGhvbkZyYW1ld29yaygpCi0KLSAgICAgICAgQnVuZGxlQnVpbGRlci5zZXR1cChzZWxmKQotCi0gICAgICAgIHNlbGYucGxpc3QuQ0ZCdW5kbGVFeGVjdXRhYmxlID0gc2VsZi5uYW1lCi0KLSAgICAgICAgaWYgc2VsZi5zdGFuZGFsb25lIG9yIHNlbGYuc2VtaV9zdGFuZGFsb25lOgotICAgICAgICAgICAgc2VsZi5maW5kRGVwZW5kZW5jaWVzKCkKLQotICAgIGRlZiBwcmVQcm9jZXNzKHNlbGYpOgotICAgICAgICByZXNkaXIgPSAiQ29udGVudHMvUmVzb3VyY2VzIgotICAgICAgICBpZiBzZWxmLmV4ZWN1dGFibGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiBzZWxmLm1haW5wcm9ncmFtIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZXhlY25hbWUgPSBzZWxmLm5hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZXhlY25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIGV4ZWNwYXRoID0gcGF0aGpvaW4oc2VsZi5leGVjZGlyLCBleGVjbmFtZSkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnN5bWxpbmtfZXhlYzoKLSAgICAgICAgICAgICAgICBzZWxmLmZpbGVzLmFwcGVuZCgoc2VsZi5kZXN0cm9vdCArIHNlbGYuZXhlY3V0YWJsZSwgZXhlY3BhdGgpKQotICAgICAgICAgICAgc2VsZi5leGVjcGF0aCA9IGV4ZWNwYXRoCi0KLSAgICAgICAgaWYgc2VsZi5tYWlucHJvZ3JhbSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIG1haW5wcm9ncmFtID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLm1haW5wcm9ncmFtKQotICAgICAgICAgICAgc2VsZi5maWxlcy5hcHBlbmQoKHNlbGYubWFpbnByb2dyYW0sIHBhdGhqb2luKHJlc2RpciwgbWFpbnByb2dyYW0pKSkKLSAgICAgICAgICAgIGlmIHNlbGYuYXJndl9lbXVsYXRpb246Ci0gICAgICAgICAgICAgICAgIyBDaGFuZ2UgdGhlIG1haW4gcHJvZ3JhbSwgYW5kIGNyZWF0ZSB0aGUgaGVscGVyIG1haW4gcHJvZ3JhbSAod2hpY2gKLSAgICAgICAgICAgICAgICAjIGRvZXMgYXJndiBjb2xsZWN0aW9uIGFuZCB0aGVuIGNhbGxzIHRoZSByZWFsIG1haW4pLgotICAgICAgICAgICAgICAgICMgQWxzbyB1cGRhdGUgdGhlIGluY2x1ZGVkIG1vZHVsZXMgKGlmIHdlJ3JlIGNyZWF0aW5nIGEgc3RhbmRhbG9uZQotICAgICAgICAgICAgICAgICMgcHJvZ3JhbSkgYW5kIHRoZSBwbGlzdAotICAgICAgICAgICAgICAgIHJlYWxtYWlucHJvZ3JhbSA9IG1haW5wcm9ncmFtCi0gICAgICAgICAgICAgICAgbWFpbnByb2dyYW0gPSAnX19hcmd2ZW11bGF0b3JfJyArIG1haW5wcm9ncmFtCi0gICAgICAgICAgICAgICAgcmVzZGlycGF0aCA9IHBhdGhqb2luKHNlbGYuYnVuZGxlcGF0aCwgcmVzZGlyKQotICAgICAgICAgICAgICAgIG1haW5wcm9ncmFtcGF0aCA9IHBhdGhqb2luKHJlc2RpcnBhdGgsIG1haW5wcm9ncmFtKQotICAgICAgICAgICAgICAgIG1ha2VkaXJzKHJlc2RpcnBhdGgpCi0gICAgICAgICAgICAgICAgb3BlbihtYWlucHJvZ3JhbXBhdGgsICJ3Iikud3JpdGUoQVJHVl9FTVVMQVRPUiAlIGxvY2FscygpKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RhbmRhbG9uZSBvciBzZWxmLnNlbWlfc3RhbmRhbG9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNsdWRlTW9kdWxlcy5hcHBlbmQoImFyZ3ZlbXVsYXRvciIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5jbHVkZU1vZHVsZXMuYXBwZW5kKCJvcyIpCi0gICAgICAgICAgICAgICAgaWYgIkNGQnVuZGxlRG9jdW1lbnRUeXBlcyIgbm90IGluIHNlbGYucGxpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucGxpc3RbIkNGQnVuZGxlRG9jdW1lbnRUeXBlcyJdID0gWwotICAgICAgICAgICAgICAgICAgICAgICAgeyAiQ0ZCdW5kbGVUeXBlT1NUeXBlcyIgOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIioqKioiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlzayJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiQ0ZCdW5kbGVUeXBlUm9sZSI6ICJWaWV3ZXIifV0KLSAgICAgICAgICAgICMgV3JpdGUgYm9vdHN0cmFwIHNjcmlwdAotICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5leGVjdXRhYmxlKQotICAgICAgICAgICAgZXhlY2RpciA9IHBhdGhqb2luKHNlbGYuYnVuZGxlcGF0aCwgc2VsZi5leGVjZGlyKQotICAgICAgICAgICAgYm9vdHN0cmFwcGF0aCA9IHBhdGhqb2luKGV4ZWNkaXIsIHNlbGYubmFtZSkKLSAgICAgICAgICAgIG1ha2VkaXJzKGV4ZWNkaXIpCi0gICAgICAgICAgICBpZiBzZWxmLnN0YW5kYWxvbmUgb3Igc2VsZi5zZW1pX3N0YW5kYWxvbmU6Ci0gICAgICAgICAgICAgICAgIyBYWFggd2UncmUgc2NyZXdlZCB3aGVuIHRoZSBlbmQgdXNlciBoYXMgZGVsZXRlZAotICAgICAgICAgICAgICAgICMgL3Vzci9iaW4vcHl0aG9uCi0gICAgICAgICAgICAgICAgaGFzaGJhbmcgPSAiL3Vzci9iaW4vcHl0aG9uIgotICAgICAgICAgICAgZWxpZiBzZWxmLnB5dGhvbjoKLSAgICAgICAgICAgICAgICBoYXNoYmFuZyA9IHNlbGYucHl0aG9uCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGhhc2hiYW5nID0gb3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIHN0YW5kYWxvbmUgPSBzZWxmLnN0YW5kYWxvbmUKLSAgICAgICAgICAgIHNlbWlfc3RhbmRhbG9uZSA9IHNlbGYuc2VtaV9zdGFuZGFsb25lCi0gICAgICAgICAgICBvcGVuKGJvb3RzdHJhcHBhdGgsICJ3Iikud3JpdGUoQk9PVFNUUkFQX1NDUklQVCAlIGxvY2FscygpKQotICAgICAgICAgICAgb3MuY2htb2QoYm9vdHN0cmFwcGF0aCwgMG83NzUpCi0KLSAgICAgICAgaWYgc2VsZi5pY29uZmlsZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGljb25iYXNlID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmljb25maWxlKQotICAgICAgICAgICAgc2VsZi5wbGlzdC5DRkJ1bmRsZUljb25GaWxlID0gaWNvbmJhc2UKLSAgICAgICAgICAgIHNlbGYuZmlsZXMuYXBwZW5kKChzZWxmLmljb25maWxlLCBwYXRoam9pbihyZXNkaXIsIGljb25iYXNlKSkpCi0KLSAgICBkZWYgcG9zdFByb2Nlc3Moc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuc3RhbmRhbG9uZSBvciBzZWxmLnNlbWlfc3RhbmRhbG9uZToKLSAgICAgICAgICAgIHNlbGYuYWRkUHl0aG9uTW9kdWxlcygpCi0gICAgICAgIGlmIHNlbGYuc3RyaXAgYW5kIG5vdCBzZWxmLnN5bWxpbms6Ci0gICAgICAgICAgICBzZWxmLnN0cmlwQmluYXJpZXMoKQotCi0gICAgICAgIGlmIHNlbGYuc3ltbGlua19leGVjIGFuZCBzZWxmLmV4ZWN1dGFibGU6Ci0gICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIlN5bWxpbmtpbmcgZXhlY3V0YWJsZSAlcyB0byAlcyIgJSAoc2VsZi5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICBzZWxmLmV4ZWNwYXRoKSwgMikKLSAgICAgICAgICAgIGRzdCA9IHBhdGhqb2luKHNlbGYuYnVuZGxlcGF0aCwgc2VsZi5leGVjcGF0aCkKLSAgICAgICAgICAgIG1ha2VkaXJzKG9zLnBhdGguZGlybmFtZShkc3QpKQotICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmFic3BhdGgoc2VsZi5leGVjdXRhYmxlKSwgZHN0KQotCi0gICAgICAgIGlmIHNlbGYubWlzc2luZ01vZHVsZXMgb3Igc2VsZi5tYXliZU1pc3NpbmdNb2R1bGVzOgotICAgICAgICAgICAgc2VsZi5yZXBvcnRNaXNzaW5nKCkKLQotICAgIGRlZiBhZGRQeXRob25GcmFtZXdvcmsoc2VsZik6Ci0gICAgICAgICMgSWYgd2UncmUgYnVpbGRpbmcgYSBzdGFuZGFsb25lIGFwcCB3aXRoIFB5dGhvbi5mcmFtZXdvcmssCi0gICAgICAgICMgaW5jbHVkZSBhIG1pbmltYWwgc3Vic2V0IG9mIFB5dGhvbi5mcmFtZXdvcmssICp1bmxlc3MqCi0gICAgICAgICMgUHl0aG9uLmZyYW1ld29yayB3YXMgc3BlY2lmaWVkIG1hbnVhbGx5IGluIHNlbGYubGlicy4KLSAgICAgICAgZm9yIGxpYiBpbiBzZWxmLmxpYnM6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKGxpYikgPT0gIlB5dGhvbi5mcmFtZXdvcmsiOgotICAgICAgICAgICAgICAgICMgYSBQeXRob24uZnJhbWV3b3JrIHdhcyBzcGVjaWZpZWQgYXMgYSBsaWJyYXJ5Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgZnJhbWV3b3JrcGF0aCA9IHN5cy5leGVjX3ByZWZpeFs6c3lzLmV4ZWNfcHJlZml4LmZpbmQoCi0gICAgICAgICAgICAiUHl0aG9uLmZyYW1ld29yayIpICsgbGVuKCJQeXRob24uZnJhbWV3b3JrIildCi0KLSAgICAgICAgdmVyc2lvbiA9IHN5cy52ZXJzaW9uWzozXQotICAgICAgICBmcmFtZXdvcmtwYXRoID0gcGF0aGpvaW4oZnJhbWV3b3JrcGF0aCwgIlZlcnNpb25zIiwgdmVyc2lvbikKLSAgICAgICAgZGVzdGJhc2UgPSBwYXRoam9pbigiQ29udGVudHMiLCAiRnJhbWV3b3JrcyIsICJQeXRob24uZnJhbWV3b3JrIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmVyc2lvbnMiLCB2ZXJzaW9uKQotICAgICAgICBmb3IgaXRlbSBpbiBQWVRIT05GUkFNRVdPUktHT09ESUVTOgotICAgICAgICAgICAgc3JjID0gcGF0aGpvaW4oZnJhbWV3b3JrcGF0aCwgaXRlbSkKLSAgICAgICAgICAgIGRzdCA9IHBhdGhqb2luKGRlc3RiYXNlLCBpdGVtKQotICAgICAgICAgICAgc2VsZi5maWxlcy5hcHBlbmQoKHNyYywgZHN0KSkKLQotICAgIGRlZiBfZ2V0U2l0ZUNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBjb21waWxlKFNJVEVfUFkgJSB7InNlbWlfc3RhbmRhbG9uZSI6IHNlbGYuc2VtaV9zdGFuZGFsb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICI8LWJ1bmRsZWJ1aWxkZXIucHktPiIsICJleGVjIikKLQotICAgIGRlZiBhZGRQeXRob25Nb2R1bGVzKHNlbGYpOgotICAgICAgICBzZWxmLm1lc3NhZ2UoIkFkZGluZyBQeXRob24gbW9kdWxlcyIsIDEpCi0KLSAgICAgICAgaWYgVVNFX1pJUElNUE9SVDoKLSAgICAgICAgICAgICMgQ3JlYXRlIGEgemlwIGZpbGUgY29udGFpbmluZyBhbGwgbW9kdWxlcyBhcyBweWMuCi0gICAgICAgICAgICBpbXBvcnQgemlwZmlsZQotICAgICAgICAgICAgcmVscGF0aCA9IHBhdGhqb2luKCJDb250ZW50cyIsICJSZXNvdXJjZXMiLCBaSVBfQVJDSElWRSkKLSAgICAgICAgICAgIGFic3BhdGggPSBwYXRoam9pbihzZWxmLmJ1bmRsZXBhdGgsIHJlbHBhdGgpCi0gICAgICAgICAgICB6ZiA9IHppcGZpbGUuWmlwRmlsZShhYnNwYXRoLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKQotICAgICAgICAgICAgZm9yIG5hbWUsIGNvZGUsIGlzcGtnIGluIHNlbGYucHltb2R1bGVzOgotICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiQWRkaW5nIFB5dGhvbiBtb2R1bGUgJXMiICUgbmFtZSwgMikKLSAgICAgICAgICAgICAgICBwYXRoLCBweWMgPSBnZXRQeWNEYXRhKG5hbWUsIGNvZGUsIGlzcGtnKQotICAgICAgICAgICAgICAgIHpmLndyaXRlc3RyKHBhdGgsIHB5YykKLSAgICAgICAgICAgIHpmLmNsb3NlKCkKLSAgICAgICAgICAgICMgYWRkIHNpdGUucHljCi0gICAgICAgICAgICBzaXRlcGF0aCA9IHBhdGhqb2luKHNlbGYuYnVuZGxlcGF0aCwgIkNvbnRlbnRzIiwgIlJlc291cmNlcyIsCi0gICAgICAgICAgICAgICAgICAgICJzaXRlIiArIFBZQ19FWFQpCi0gICAgICAgICAgICB3cml0ZVB5YyhzZWxmLl9nZXRTaXRlQ29kZSgpLCBzaXRlcGF0aCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgQ3JlYXRlIGluZGl2aWR1YWwgLnB5YyBmaWxlcy4KLSAgICAgICAgICAgIGZvciBuYW1lLCBjb2RlLCBpc3BrZyBpbiBzZWxmLnB5bW9kdWxlczoKLSAgICAgICAgICAgICAgICBpZiBpc3BrZzoKLSAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAiLl9faW5pdF9fIgotICAgICAgICAgICAgICAgIHBhdGggPSBuYW1lLnNwbGl0KCIuIikKLSAgICAgICAgICAgICAgICBwYXRoID0gcGF0aGpvaW4oIkNvbnRlbnRzIiwgIlJlc291cmNlcyIsICpwYXRoKSArIFBZQ19FWFQKLQotICAgICAgICAgICAgICAgIGlmIGlzcGtnOgotICAgICAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIkFkZGluZyBQeXRob24gcGFja2FnZSAlcyIgJSBwYXRoLCAyKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiQWRkaW5nIFB5dGhvbiBtb2R1bGUgJXMiICUgcGF0aCwgMikKLQotICAgICAgICAgICAgICAgIGFic3BhdGggPSBwYXRoam9pbihzZWxmLmJ1bmRsZXBhdGgsIHBhdGgpCi0gICAgICAgICAgICAgICAgbWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKGFic3BhdGgpKQotICAgICAgICAgICAgICAgIHdyaXRlUHljKGNvZGUsIGFic3BhdGgpCi0KLSAgICBkZWYgc3RyaXBCaW5hcmllcyhzZWxmKToKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKFNUUklQX0VYRUMpOgotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJFcnJvcjogY2FuJ3Qgc3RyaXAgYmluYXJpZXM6IG5vIHN0cmlwIHByb2dyYW0gYXQgIgotICAgICAgICAgICAgICAgICIlcyIgJSBTVFJJUF9FWEVDLCAwKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaW1wb3J0IHN0YXQKLSAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiU3RyaXBwaW5nIGJpbmFyaWVzIiwgMSkKLSAgICAgICAgICAgIGRlZiB3YWxrKHRvcCk6Ci0gICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcih0b3ApOgotICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aGpvaW4odG9wLCBuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YWxrKHBhdGgpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBvcy5zdGF0KHBhdGgpW3N0YXQuU1RfTU9ERV0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAobW9kICYgMG8xMDApOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgICAgICByZWxwYXRoID0gcGF0aFtsZW4oc2VsZi5idW5kbGVwYXRoKTpdCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIlN0cmlwcGluZyAlcyIgJSByZWxwYXRoLCAyKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5mLCBvdXRmID0gb3MucG9wZW40KCIlcyAtUyBcIiVzXCIiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1RSSVBfRVhFQywgcGF0aCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRmLnJlYWQoKS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c3VhbGx5IG5vdCBhIHJlYWwgcHJvYmxlbSwgbGlrZSB3aGVuIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cnlpbmcgdG8gc3RyaXAgYSBzY3JpcHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIlByb2JsZW0gc3RyaXBwaW5nICVzOiIgJSByZWxwYXRoLCAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZShvdXRwdXQsIDMpCi0gICAgICAgICAgICB3YWxrKHNlbGYuYnVuZGxlcGF0aCkKLQotICAgIGRlZiBmaW5kRGVwZW5kZW5jaWVzKHNlbGYpOgotICAgICAgICBzZWxmLm1lc3NhZ2UoIkZpbmRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcyIsIDEpCi0gICAgICAgIGltcG9ydCBtb2R1bGVmaW5kZXIKLSAgICAgICAgbWYgPSBtb2R1bGVmaW5kZXIuTW9kdWxlRmluZGVyKGV4Y2x1ZGVzPXNlbGYuZXhjbHVkZU1vZHVsZXMpCi0gICAgICAgIGlmIFVTRV9aSVBJTVBPUlQ6Ci0gICAgICAgICAgICAjIHppcGltcG9ydCBpbXBvcnRzIHpsaWIsIG11c3QgYWRkIGl0IG1hbnVhbGx5Ci0gICAgICAgICAgICBtZi5pbXBvcnRfaG9vaygiemxpYiIpCi0gICAgICAgICMgbWFudWFsbHkgYWRkIG91ciBvd24gc2l0ZS5weQotICAgICAgICBzaXRlID0gbWYuYWRkX21vZHVsZSgic2l0ZSIpCi0gICAgICAgIHNpdGUuX19jb2RlX18gPSBzZWxmLl9nZXRTaXRlQ29kZSgpCi0gICAgICAgIG1mLnNjYW5fY29kZShzaXRlLl9fY29kZV9fLCBzaXRlKQotCi0gICAgICAgICMgd2FybmluZ3MucHkgZ2V0cyBpbXBvcnRlZCBpbXBsaWNpdGx5IGZyb20gQwotICAgICAgICBtZi5pbXBvcnRfaG9vaygid2FybmluZ3MiKQotCi0gICAgICAgIGluY2x1ZGVNb2R1bGVzID0gc2VsZi5pbmNsdWRlTW9kdWxlc1s6XQotICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmluY2x1ZGVQYWNrYWdlczoKLSAgICAgICAgICAgIGluY2x1ZGVNb2R1bGVzLmV4dGVuZChsaXN0KGZpbmRQYWNrYWdlQ29udGVudHMobmFtZSkua2V5cygpKSkKLSAgICAgICAgZm9yIG5hbWUgaW4gaW5jbHVkZU1vZHVsZXM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWYuaW1wb3J0X2hvb2sobmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLm1pc3NpbmdNb2R1bGVzLmFwcGVuZChuYW1lKQotCi0gICAgICAgIG1mLnJ1bl9zY3JpcHQoc2VsZi5tYWlucHJvZ3JhbSkKLSAgICAgICAgbW9kdWxlcyA9IGxpc3QobWYubW9kdWxlcy5pdGVtcygpKQotICAgICAgICBtb2R1bGVzLnNvcnQoKQotICAgICAgICBmb3IgbmFtZSwgbW9kIGluIG1vZHVsZXM6Ci0gICAgICAgICAgICBwYXRoID0gbW9kLl9fZmlsZV9fCi0gICAgICAgICAgICBpZiBwYXRoIGFuZCBzZWxmLnNlbWlfc3RhbmRhbG9uZToKLSAgICAgICAgICAgICAgICAjIHNraXAgdGhlIHN0YW5kYXJkIGxpYnJhcnkKLSAgICAgICAgICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoTElCKSBhbmQgbm90IHBhdGguc3RhcnRzd2l0aChTSVRFX1BBQ0tBR0VTKToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIHBhdGggYW5kIG1vZC5fX2NvZGVfXyBpcyBOb25lOgotICAgICAgICAgICAgICAgICMgQyBleHRlbnNpb24KLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKLSAgICAgICAgICAgICAgICBwYXRoaXRlbXMgPSBuYW1lLnNwbGl0KCIuIilbOi0xXSArIFtmaWxlbmFtZV0KLSAgICAgICAgICAgICAgICBkc3RwYXRoID0gcGF0aGpvaW4oKnBhdGhpdGVtcykKLSAgICAgICAgICAgICAgICBpZiBVU0VfWklQSU1QT1JUOgotICAgICAgICAgICAgICAgICAgICBpZiBuYW1lICE9ICJ6bGliIjoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgbmVhdGx5IHBhY2sgYWxsIGV4dGVuc2lvbiBtb2R1bGVzIGluIGEgc3ViZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgIyBleGNlcHQgemxpYiwgc2luY2UgaXQncyBuZWNlc3NhcnkgZm9yIGJvb3RzdHJhcHBpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBkc3RwYXRoID0gcGF0aGpvaW4oIkV4dGVuc2lvbk1vZHVsZXMiLCBkc3RwYXRoKQotICAgICAgICAgICAgICAgICAgICAjIFB5dGhvbiBtb2R1bGVzIGFyZSBzdG9yZWQgaW4gYSBaaXAgYXJjaGl2ZSwgYnV0IHB1dAotICAgICAgICAgICAgICAgICAgICAjIGV4dGVuc2lvbnMgaW4gQ29udGVudHMvUmVzb3VyY2VzLy4gQWRkIGEgdGlueSAibG9hZGVyIgotICAgICAgICAgICAgICAgICAgICAjIHByb2dyYW0gaW4gdGhlIFppcCBhcmNoaXZlLiBEdWUgdG8gVGhvbWFzIEhlbGxlci4KLSAgICAgICAgICAgICAgICAgICAgc291cmNlID0gRVhUX0xPQURFUiAlIHsibmFtZSI6IG5hbWUsICJmaWxlbmFtZSI6IGRzdHBhdGh9Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKHNvdXJjZSwgIjxkeW5sb2FkZXIgZm9yICVzPiIgJSBuYW1lLCAiZXhlYyIpCi0gICAgICAgICAgICAgICAgICAgIG1vZC5fX2NvZGVfXyA9IGNvZGUKLSAgICAgICAgICAgICAgICBzZWxmLmZpbGVzLmFwcGVuZCgocGF0aCwgcGF0aGpvaW4oIkNvbnRlbnRzIiwgIlJlc291cmNlcyIsIGRzdHBhdGgpKSkKLSAgICAgICAgICAgIGlmIG1vZC5fX2NvZGVfXyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpc3BrZyA9IG1vZC5fX3BhdGhfXyBpcyBub3QgTm9uZQotICAgICAgICAgICAgICAgIGlmIG5vdCBVU0VfWklQSU1QT1JUIG9yIG5hbWUgIT0gInNpdGUiOgotICAgICAgICAgICAgICAgICAgICAjIE91ciBzaXRlLnB5IGlzIGRvaW5nIHRoZSBib290c3RyYXBwaW5nLCBzbyB3ZSBtdXN0Ci0gICAgICAgICAgICAgICAgICAgICMgaW5jbHVkZSBhIHJlYWwgLnB5YyBmaWxlIGlmIFVTRV9aSVBJTVBPUlQgaXMgVHJ1ZS4KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5weW1vZHVsZXMuYXBwZW5kKChuYW1lLCBtb2QuX19jb2RlX18sIGlzcGtnKSkKLQotICAgICAgICBpZiBoYXNhdHRyKG1mLCAiYW55X21pc3NpbmdfbWF5YmUiKToKLSAgICAgICAgICAgIG1pc3NpbmcsIG1heWJlID0gbWYuYW55X21pc3NpbmdfbWF5YmUoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWlzc2luZyA9IG1mLmFueV9taXNzaW5nKCkKLSAgICAgICAgICAgIG1heWJlID0gW10KLSAgICAgICAgc2VsZi5taXNzaW5nTW9kdWxlcy5leHRlbmQobWlzc2luZykKLSAgICAgICAgc2VsZi5tYXliZU1pc3NpbmdNb2R1bGVzLmV4dGVuZChtYXliZSkKLQotICAgIGRlZiByZXBvcnRNaXNzaW5nKHNlbGYpOgotICAgICAgICBtaXNzaW5nID0gW25hbWUgZm9yIG5hbWUgaW4gc2VsZi5taXNzaW5nTW9kdWxlcwotICAgICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIE1BWU1JU1NfTU9EVUxFU10KLSAgICAgICAgaWYgc2VsZi5tYXliZU1pc3NpbmdNb2R1bGVzOgotICAgICAgICAgICAgbWF5YmUgPSBzZWxmLm1heWJlTWlzc2luZ01vZHVsZXMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1heWJlID0gW25hbWUgZm9yIG5hbWUgaW4gbWlzc2luZyBpZiAiLiIgaW4gbmFtZV0KLSAgICAgICAgICAgIG1pc3NpbmcgPSBbbmFtZSBmb3IgbmFtZSBpbiBtaXNzaW5nIGlmICIuIiBub3QgaW4gbmFtZV0KLSAgICAgICAgbWlzc2luZy5zb3J0KCkKLSAgICAgICAgbWF5YmUuc29ydCgpCi0gICAgICAgIGlmIG1heWJlOgotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJXYXJuaW5nOiBjb3VsZG4ndCBmaW5kIHRoZSBmb2xsb3dpbmcgc3VibW9kdWxlczoiLCAxKQotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCIgICAgKE5vdGUgdGhhdCB0aGVzZSBjb3VsZCBiZSBmYWxzZSBhbGFybXMgLS0gIgotICAgICAgICAgICAgICAgICAgICAgICAgICJpdCdzIG5vdCBhbHdheXMiLCAxKQotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCIgICAgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBcImZyb20gcGFja2FnZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzdWJtb2R1bGVcIiAiLCAxKQotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCIgICAgYW5kIFwiZnJvbSBwYWNrYWdlIGltcG9ydCBuYW1lXCIpIiwgMSkKLSAgICAgICAgICAgIGZvciBuYW1lIGluIG1heWJlOgotICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiICA/ICIgKyBuYW1lLCAxKQotICAgICAgICBpZiBtaXNzaW5nOgotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJXYXJuaW5nOiBjb3VsZG4ndCBmaW5kIHRoZSBmb2xsb3dpbmcgbW9kdWxlczoiLCAxKQotICAgICAgICAgICAgZm9yIG5hbWUgaW4gbWlzc2luZzoKLSAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIiAgPyAiICsgbmFtZSwgMSkKLQotICAgIGRlZiByZXBvcnQoc2VsZik6Ci0gICAgICAgICMgWFhYIHNvbWV0aGluZyBkZWNlbnQKLSAgICAgICAgaW1wb3J0IHBwcmludAotICAgICAgICBwcHJpbnQucHByaW50KHNlbGYuX19kaWN0X18pCi0gICAgICAgIGlmIHNlbGYuc3RhbmRhbG9uZSBvciBzZWxmLnNlbWlfc3RhbmRhbG9uZToKLSAgICAgICAgICAgIHNlbGYucmVwb3J0TWlzc2luZygpCi0KLSMKLSMgVXRpbGl0aWVzLgotIwotCi1TVUZGSVhFUyA9IFtfc3VmIGZvciBfc3VmLCBfbW9kZSwgX3RwIGluIGltcC5nZXRfc3VmZml4ZXMoKV0KLWlkZW50aWZpZXJSRSA9IHJlLmNvbXBpbGUociJbX2EtekEtel1bX2EtekEtWjAtOV0qJCIpCi0KLWRlZiBmaW5kUGFja2FnZUNvbnRlbnRzKG5hbWUsIHNlYXJjaHBhdGg9Tm9uZSk6Ci0gICAgaGVhZCA9IG5hbWUuc3BsaXQoIi4iKVstMV0KLSAgICBpZiBpZGVudGlmaWVyUkUubWF0Y2goaGVhZCkgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIHt9Ci0gICAgdHJ5OgotICAgICAgICBmcCwgcGF0aCwgKGV4dCwgbW9kZSwgdHApID0gaW1wLmZpbmRfbW9kdWxlKGhlYWQsIHNlYXJjaHBhdGgpCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICByZXR1cm4ge30KLSAgICBtb2R1bGVzID0ge25hbWU6IE5vbmV9Ci0gICAgaWYgdHAgPT0gaW1wLlBLR19ESVJFQ1RPUlkgYW5kIHBhdGg6Ci0gICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihwYXRoKQotICAgICAgICBmb3Igc3ViIGluIGZpbGVzOgotICAgICAgICAgICAgc3ViLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KHN1YikKLSAgICAgICAgICAgIGZ1bGxuYW1lID0gbmFtZSArICIuIiArIHN1YgotICAgICAgICAgICAgaWYgc3ViICE9ICJfX2luaXRfXyIgYW5kIGZ1bGxuYW1lIG5vdCBpbiBtb2R1bGVzOgotICAgICAgICAgICAgICAgIG1vZHVsZXMudXBkYXRlKGZpbmRQYWNrYWdlQ29udGVudHMoZnVsbG5hbWUsIFtwYXRoXSkpCi0gICAgcmV0dXJuIG1vZHVsZXMKLQotZGVmIHdyaXRlUHljKGNvZGUsIHBhdGgpOgotICAgIGYgPSBvcGVuKHBhdGgsICJ3YiIpCi0gICAgZi53cml0ZShNQUdJQykKLSAgICBmLndyaXRlKCJcMCIgKiA0KSAgIyBkb24ndCBib3RoZXIgYWJvdXQgYSB0aW1lIHN0YW1wCi0gICAgbWFyc2hhbC5kdW1wKGNvZGUsIGYpCi0gICAgZi5jbG9zZSgpCi0KLWRlZiBjb3B5KHNyYywgZHN0LCBta2RpcnM9MCk6Ci0gICAgIiIiQ29weSBhIGZpbGUgb3IgYSBkaXJlY3RvcnkuIiIiCi0gICAgaWYgbWtkaXJzOgotICAgICAgICBtYWtlZGlycyhvcy5wYXRoLmRpcm5hbWUoZHN0KSkKLSAgICBpZiBvcy5wYXRoLmlzZGlyKHNyYyk6Ci0gICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmMsIGRzdCwgc3ltbGlua3M9MSkKLSAgICBlbHNlOgotICAgICAgICBzaHV0aWwuY29weTIoc3JjLCBkc3QpCi0KLWRlZiBjb3B5dG9kaXIoc3JjLCBkc3RkaXIpOgotICAgICIiIkNvcHkgYSBmaWxlIG9yIGEgZGlyZWN0b3J5IHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKLSAgICBkc3QgPSBwYXRoam9pbihkc3RkaXIsIG9zLnBhdGguYmFzZW5hbWUoc3JjKSkKLSAgICBjb3B5KHNyYywgZHN0KQotCi1kZWYgbWFrZWRpcnMoZGlyKToKLSAgICAiIiJNYWtlIGFsbCBkaXJlY3RvcmllcyBsZWFkaW5nIHVwIHRvICdkaXInIGluY2x1ZGluZyB0aGUgbGVhZgotICAgIGRpcmVjdG9yeS4gRG9uJ3QgbW9hbiBpZiBhbnkgcGF0aCBlbGVtZW50IGFscmVhZHkgZXhpc3RzLiIiIgotICAgIHRyeToKLSAgICAgICAgb3MubWFrZWRpcnMoZGlyKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgaWYgd2h5LmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0KLWRlZiBzeW1saW5rKHNyYywgZHN0LCBta2RpcnM9MCk6Ci0gICAgIiIiQ29weSBhIGZpbGUgb3IgYSBkaXJlY3RvcnkuIiIiCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNyYyk6Ci0gICAgICAgIHJhaXNlIElPRXJyb3IoIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICclcyciICUgc3JjKQotICAgIGlmIG1rZGlyczoKLSAgICAgICAgbWFrZWRpcnMob3MucGF0aC5kaXJuYW1lKGRzdCkpCi0gICAgb3Muc3ltbGluayhvcy5wYXRoLmFic3BhdGgoc3JjKSwgZHN0KQotCi1kZWYgcGF0aGpvaW4oKmFyZ3MpOgotICAgICIiIlNhZmUgd3JhcHBlciBmb3Igb3MucGF0aC5qb2luOiBhc3NlcnRzIHRoYXQgYWxsIGJ1dCB0aGUgZmlyc3QKLSAgICBhcmd1bWVudCBhcmUgcmVsYXRpdmUgcGF0aHMuIiIiCi0gICAgZm9yIHNlZyBpbiBhcmdzWzE6XToKLSAgICAgICAgYXNzZXJ0IHNlZ1swXSAhPSAiLyIKLSAgICByZXR1cm4gb3MucGF0aC5qb2luKCphcmdzKQotCi0KLWNtZGxpbmVfZG9jID0gIiIiXAotVXNhZ2U6Ci0gIHB5dGhvbiBidW5kbGVidWlsZGVyLnB5IFtvcHRpb25zXSBjb21tYW5kCi0gIHB5dGhvbiBteWJ1aWxkc2NyaXB0LnB5IFtvcHRpb25zXSBjb21tYW5kCi0KLUNvbW1hbmRzOgotICBidWlsZCAgICAgIGJ1aWxkIHRoZSBhcHBsaWNhdGlvbgotICByZXBvcnQgICAgIHByaW50IGEgcmVwb3J0Ci0KLU9wdGlvbnM6Ci0gIC1iLCAtLWJ1aWxkZGlyPURJUiAgICAgdGhlIGJ1aWxkIGRpcmVjdG9yeTsgZGVmYXVsdHMgdG8gImJ1aWxkIgotICAtbiwgLS1uYW1lPU5BTUUgICAgICAgIGFwcGxpY2F0aW9uIG5hbWUKLSAgLXIsIC0tcmVzb3VyY2U9RklMRSAgICBleHRyYSBmaWxlIG9yIGZvbGRlciB0byBiZSBjb3BpZWQgdG8gUmVzb3VyY2VzCi0gIC1mLCAtLWZpbGU9U1JDOkRTVCAgICAgZXh0cmEgZmlsZSBvciBmb2xkZXIgdG8gYmUgY29waWVkIGludG8gdGhlIGJ1bmRsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICBEU1QgbXVzdCBiZSBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJ1bmRsZSByb290Ci0gIC1lLCAtLWV4ZWN1dGFibGU9RklMRSAgdGhlIGV4ZWN1dGFibGUgdG8gYmUgdXNlZAotICAtbSwgLS1tYWlucHJvZ3JhbT1GSUxFIHRoZSBQeXRob24gbWFpbiBwcm9ncmFtCi0gIC1hLCAtLWFyZ3YgICAgICAgICAgICAgYWRkIGEgd3JhcHBlciBtYWluIHByb2dyYW0gdG8gY3JlYXRlIHN5cy5hcmd2Ci0gIC1wLCAtLXBsaXN0PUZJTEUgICAgICAgLnBsaXN0IGZpbGUgKGRlZmF1bHQ6IGdlbmVyYXRlIG9uZSkKLSAgICAgIC0tbmliPU5BTUUgICAgICAgICBtYWluIG5pYiBuYW1lCi0gIC1jLCAtLWNyZWF0b3I9Q0NDQyAgICAgNC1jaGFyIGNyZWF0b3IgY29kZSAoZGVmYXVsdDogJz8/Pz8nKQotICAgICAgLS1pY29uZmlsZT1GSUxFICAgIGZpbGVuYW1lIG9mIHRoZSBpY29uIChhbiAuaWNucyBmaWxlKSB0byBiZSB1c2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXMgdGhlIEZpbmRlciBpY29uCi0gICAgICAtLWJ1bmRsZS1pZD1JRCAgICAgdGhlIENGQnVuZGxlSWRlbnRpZmllciwgaW4gcmV2ZXJzZS1kbnMgZm9ybWF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKGVnLiBvcmcucHl0aG9uLkJ1aWxkQXBwbGV0OyB0aGlzIGlzIHVzZWQgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByZWZlcmVuY2VzIGZpbGUgbmFtZSkKLSAgLWwsIC0tbGluayAgICAgICAgICAgICBzeW1saW5rIGZpbGVzL2ZvbGRlciBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlbQotICAgICAgLS1saW5rLWV4ZWMgICAgICAgIHN5bWxpbmsgdGhlIGV4ZWN1dGFibGUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0Ci0gICAgICAtLXN0YW5kYWxvbmUgICAgICAgYnVpbGQgYSBzdGFuZGFsb25lIGFwcGxpY2F0aW9uLCB3aGljaCBpcyBmdWxseQotICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVwZW5kZW50IG9mIGEgUHl0aG9uIGluc3RhbGxhdGlvbgotICAgICAgLS1zZW1pLXN0YW5kYWxvbmUgIGJ1aWxkIGEgc3RhbmRhbG9uZSBhcHBsaWNhdGlvbiwgd2hpY2ggZGVwZW5kcyBvbgotICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGluc3RhbGxlZCBQeXRob24sIHlldCBpbmNsdWRlcyBhbGwgdGhpcmQtcGFydHkKLSAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzLgotICAgICAgLS1weXRob249RklMRSAgICAgIFB5dGhvbiB0byB1c2UgaW4gIyEgbGluZSBpbiBzdGVhZCBvZiBjdXJyZW50IFB5dGhvbgotICAgICAgLS1saWI9RklMRSAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IG9yIGZyYW1ld29yayB0byBiZSBjb3BpZWQgaW50bwotICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBidW5kbGUKLSAgLXgsIC0tZXhjbHVkZT1NT0RVTEUgICBleGNsdWRlIG1vZHVsZSAod2l0aCAtLShzZW1pLSlzdGFuZGFsb25lKQotICAtaSwgLS1pbmNsdWRlPU1PRFVMRSAgIGluY2x1ZGUgbW9kdWxlICh3aXRoIC0tKHNlbWktKXN0YW5kYWxvbmUpCi0gICAgICAtLXBhY2thZ2U9UEFDS0FHRSAgaW5jbHVkZSBhIHdob2xlIHBhY2thZ2UgKHdpdGggLS0oc2VtaS0pc3RhbmRhbG9uZSkKLSAgICAgIC0tc3RyaXAgICAgICAgICAgICBzdHJpcCBiaW5hcmllcyAocmVtb3ZlIGRlYnVnIGluZm8pCi0gIC12LCAtLXZlcmJvc2UgICAgICAgICAgaW5jcmVhc2UgdmVyYm9zaXR5IGxldmVsCi0gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgZGVjcmVhc2UgdmVyYm9zaXR5IGxldmVsCi0gIC1oLCAtLWhlbHAgICAgICAgICAgICAgcHJpbnQgdGhpcyBtZXNzYWdlCi0iIiIKLQotZGVmIHVzYWdlKG1zZz1Ob25lKToKLSAgICBpZiBtc2c6Ci0gICAgICAgIHByaW50KG1zZykKLSAgICBwcmludChjbWRsaW5lX2RvYykKLSAgICBzeXMuZXhpdCgxKQotCi1kZWYgbWFpbihidWlsZGVyPU5vbmUpOgotICAgIGlmIGJ1aWxkZXIgaXMgTm9uZToKLSAgICAgICAgYnVpbGRlciA9IEFwcEJ1aWxkZXIodmVyYm9zaXR5PTEpCi0KLSAgICBzaG9ydG9wdHMgPSAiYjpuOnI6ZjplOm06YzpwOmx4Omk6aHZxYSIKLSAgICBsb25nb3B0cyA9ICgiYnVpbGRkaXI9IiwgIm5hbWU9IiwgInJlc291cmNlPSIsICJmaWxlPSIsICJleGVjdXRhYmxlPSIsCi0gICAgICAgICJtYWlucHJvZ3JhbT0iLCAiY3JlYXRvcj0iLCAibmliPSIsICJwbGlzdD0iLCAibGluayIsCi0gICAgICAgICJsaW5rLWV4ZWMiLCAiaGVscCIsICJ2ZXJib3NlIiwgInF1aWV0IiwgImFyZ3YiLCAic3RhbmRhbG9uZSIsCi0gICAgICAgICJleGNsdWRlPSIsICJpbmNsdWRlPSIsICJwYWNrYWdlPSIsICJzdHJpcCIsICJpY29uZmlsZT0iLAotICAgICAgICAibGliPSIsICJweXRob249IiwgInNlbWktc3RhbmRhbG9uZSIsICJidW5kbGUtaWQ9IiwgImRlc3Ryb290PSIpCi0KLSAgICB0cnk6Ci0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgc2hvcnRvcHRzLCBsb25nb3B0cykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yOgotICAgICAgICB1c2FnZSgpCi0KLSAgICBmb3Igb3B0LCBhcmcgaW4gb3B0aW9uczoKLSAgICAgICAgaWYgb3B0IGluICgnLWInLCAnLS1idWlsZGRpcicpOgotICAgICAgICAgICAgYnVpbGRlci5idWlsZGRpciA9IGFyZwotICAgICAgICBlbGlmIG9wdCBpbiAoJy1uJywgJy0tbmFtZScpOgotICAgICAgICAgICAgYnVpbGRlci5uYW1lID0gYXJnCi0gICAgICAgIGVsaWYgb3B0IGluICgnLXInLCAnLS1yZXNvdXJjZScpOgotICAgICAgICAgICAgYnVpbGRlci5yZXNvdXJjZXMuYXBwZW5kKG9zLnBhdGgubm9ybXBhdGgoYXJnKSkKLSAgICAgICAgZWxpZiBvcHQgaW4gKCctZicsICctLWZpbGUnKToKLSAgICAgICAgICAgIHNyY2RzdCA9IGFyZy5zcGxpdCgnOicpCi0gICAgICAgICAgICBpZiBsZW4oc3JjZHN0KSAhPSAyOgotICAgICAgICAgICAgICAgIHVzYWdlKCItZiBvciAtLWZpbGUgYXJndW1lbnQgbXVzdCBiZSB0d28gcGF0aHMsICIKLSAgICAgICAgICAgICAgICAgICAgICAic2VwYXJhdGVkIGJ5IGEgY29sb24iKQotICAgICAgICAgICAgYnVpbGRlci5maWxlcy5hcHBlbmQoc3JjZHN0KQotICAgICAgICBlbGlmIG9wdCBpbiAoJy1lJywgJy0tZXhlY3V0YWJsZScpOgotICAgICAgICAgICAgYnVpbGRlci5leGVjdXRhYmxlID0gYXJnCi0gICAgICAgIGVsaWYgb3B0IGluICgnLW0nLCAnLS1tYWlucHJvZ3JhbScpOgotICAgICAgICAgICAgYnVpbGRlci5tYWlucHJvZ3JhbSA9IGFyZwotICAgICAgICBlbGlmIG9wdCBpbiAoJy1hJywgJy0tYXJndicpOgotICAgICAgICAgICAgYnVpbGRlci5hcmd2X2VtdWxhdGlvbiA9IDEKLSAgICAgICAgZWxpZiBvcHQgaW4gKCctYycsICctLWNyZWF0b3InKToKLSAgICAgICAgICAgIGJ1aWxkZXIuY3JlYXRvciA9IGFyZwotICAgICAgICBlbGlmIG9wdCA9PSAnLS1idW5kbGUtaWQnOgotICAgICAgICAgICAgYnVpbGRlci5idW5kbGVfaWQgPSBhcmcKLSAgICAgICAgZWxpZiBvcHQgPT0gJy0taWNvbmZpbGUnOgotICAgICAgICAgICAgYnVpbGRlci5pY29uZmlsZSA9IGFyZwotICAgICAgICBlbGlmIG9wdCA9PSAiLS1saWIiOgotICAgICAgICAgICAgYnVpbGRlci5saWJzLmFwcGVuZChvcy5wYXRoLm5vcm1wYXRoKGFyZykpCi0gICAgICAgIGVsaWYgb3B0ID09ICItLW5pYiI6Ci0gICAgICAgICAgICBidWlsZGVyLm5pYm5hbWUgPSBhcmcKLSAgICAgICAgZWxpZiBvcHQgaW4gKCctcCcsICctLXBsaXN0Jyk6Ci0gICAgICAgICAgICBidWlsZGVyLnBsaXN0ID0gUGxpc3QuZnJvbUZpbGUoYXJnKQotICAgICAgICBlbGlmIG9wdCBpbiAoJy1sJywgJy0tbGluaycpOgotICAgICAgICAgICAgYnVpbGRlci5zeW1saW5rID0gMQotICAgICAgICBlbGlmIG9wdCA9PSAnLS1saW5rLWV4ZWMnOgotICAgICAgICAgICAgYnVpbGRlci5zeW1saW5rX2V4ZWMgPSAxCi0gICAgICAgIGVsaWYgb3B0IGluICgnLWgnLCAnLS1oZWxwJyk6Ci0gICAgICAgICAgICB1c2FnZSgpCi0gICAgICAgIGVsaWYgb3B0IGluICgnLXYnLCAnLS12ZXJib3NlJyk6Ci0gICAgICAgICAgICBidWlsZGVyLnZlcmJvc2l0eSArPSAxCi0gICAgICAgIGVsaWYgb3B0IGluICgnLXEnLCAnLS1xdWlldCcpOgotICAgICAgICAgICAgYnVpbGRlci52ZXJib3NpdHkgLT0gMQotICAgICAgICBlbGlmIG9wdCA9PSAnLS1zdGFuZGFsb25lJzoKLSAgICAgICAgICAgIGJ1aWxkZXIuc3RhbmRhbG9uZSA9IDEKLSAgICAgICAgZWxpZiBvcHQgPT0gJy0tc2VtaS1zdGFuZGFsb25lJzoKLSAgICAgICAgICAgIGJ1aWxkZXIuc2VtaV9zdGFuZGFsb25lID0gMQotICAgICAgICBlbGlmIG9wdCA9PSAnLS1weXRob24nOgotICAgICAgICAgICAgYnVpbGRlci5weXRob24gPSBhcmcKLSAgICAgICAgZWxpZiBvcHQgaW4gKCcteCcsICctLWV4Y2x1ZGUnKToKLSAgICAgICAgICAgIGJ1aWxkZXIuZXhjbHVkZU1vZHVsZXMuYXBwZW5kKGFyZykKLSAgICAgICAgZWxpZiBvcHQgaW4gKCctaScsICctLWluY2x1ZGUnKToKLSAgICAgICAgICAgIGJ1aWxkZXIuaW5jbHVkZU1vZHVsZXMuYXBwZW5kKGFyZykKLSAgICAgICAgZWxpZiBvcHQgPT0gJy0tcGFja2FnZSc6Ci0gICAgICAgICAgICBidWlsZGVyLmluY2x1ZGVQYWNrYWdlcy5hcHBlbmQoYXJnKQotICAgICAgICBlbGlmIG9wdCA9PSAnLS1zdHJpcCc6Ci0gICAgICAgICAgICBidWlsZGVyLnN0cmlwID0gMQotICAgICAgICBlbGlmIG9wdCA9PSAnLS1kZXN0cm9vdCc6Ci0gICAgICAgICAgICBidWlsZGVyLmRlc3Ryb290ID0gYXJnCi0KLSAgICBpZiBsZW4oYXJncykgIT0gMToKLSAgICAgICAgdXNhZ2UoIk11c3Qgc3BlY2lmeSBvbmUgY29tbWFuZCAoJ2J1aWxkJywgJ3JlcG9ydCcgb3IgJ2hlbHAnKSIpCi0gICAgY29tbWFuZCA9IGFyZ3NbMF0KLQotICAgIGlmIGNvbW1hbmQgPT0gImJ1aWxkIjoKLSAgICAgICAgYnVpbGRlci5zZXR1cCgpCi0gICAgICAgIGJ1aWxkZXIuYnVpbGQoKQotICAgIGVsaWYgY29tbWFuZCA9PSAicmVwb3J0IjoKLSAgICAgICAgYnVpbGRlci5zZXR1cCgpCi0gICAgICAgIGJ1aWxkZXIucmVwb3J0KCkKLSAgICBlbGlmIGNvbW1hbmQgPT0gImhlbHAiOgotICAgICAgICB1c2FnZSgpCi0gICAgZWxzZToKLSAgICAgICAgdXNhZ2UoIlVua25vd24gY29tbWFuZCAnJXMnIiAlIGNvbW1hbmQpCi0KLQotZGVmIGJ1aWxkYXBwKCoqa3dhcmdzKToKLSAgICBidWlsZGVyID0gQXBwQnVpbGRlcigqKmt3YXJncykKLSAgICBtYWluKGJ1aWxkZXIpCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnByZS5pbiBiL01ha2VmaWxlLnByZS5pbgppbmRleCBlMTlmYzAwLi5kMzBlNTY1IDEwMDY0NAotLS0gYS9NYWtlZmlsZS5wcmUuaW4KKysrIGIvTWFrZWZpbGUucHJlLmluCkBAIC00Myw2ICs0MywxMSBAQAogSEdWRVJTSU9OPQlASEdWRVJTSU9OQAogSEdUQUc9CQlASEdUQUdACiBIR0JSQU5DSD0JQEhHQlJBTkNIQAorUEdPX1BST0ZfR0VOX0ZMQUc9QFBHT19QUk9GX0dFTl9GTEFHQAorUEdPX1BST0ZfVVNFX0ZMQUc9QFBHT19QUk9GX1VTRV9GTEFHQAorTExWTV9QUk9GX01FUkdFUj1ATExWTV9QUk9GX01FUkdFUkAKK0xMVk1fUFJPRl9GSUxFPUBMTFZNX1BST0ZfRklMRUAKK0xMVk1fUFJPRl9FUlI9QExMVk1fUFJPRl9FUlJACiAKIEdOVUxEPQkJQEdOVUxEQAogCkBAIC0yMTYsNiArMjIxLDggQEAKIFBZVEhPTj0JCXB5dGhvbiQoRVhFKQogQlVJTERQWVRIT049CXB5dGhvbiQoQlVJTERFWEUpCiAKK2Nyb3NzX2NvbXBpbGluZz1AY3Jvc3NfY29tcGlsaW5nQAorUFlUSE9OX0ZPUl9HRU49QFBZVEhPTl9GT1JfR0VOQAogUFlUSE9OX0ZPUl9CVUlMRD1AUFlUSE9OX0ZPUl9CVUlMREAKIF9QWVRIT05fSE9TVF9QTEFURk9STT1AX1BZVEhPTl9IT1NUX1BMQVRGT1JNQAogQlVJTERfR05VX1RZUEU9CUBidWlsZEAKQEAgLTIyNSw5ICsyMzIsMTAgQEAKIFRDTFRLX0lOQ0xVREVTPQlAVENMVEtfSU5DTFVERVNACiBUQ0xUS19MSUJTPQlAVENMVEtfTElCU0AKIAotIyBUaGUgdGFzayB0byBydW4gd2hpbGUgaW5zdHJ1bWVudCB3aGVuIGJ1aWxkaW5nIHRoZSBwcm9maWxlLW9wdCB0YXJnZXQKLVBST0ZJTEVfVEFTSz0JJChzcmNkaXIpL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weSAtbiAyIC0td2l0aC1nYyAtLXdpdGgtc3lzY2hlY2sKLSNQUk9GSUxFX1RBU0s9CSQoc3JjZGlyKS9MaWIvdGVzdC9yZWdydGVzdC5weQorIyBUaGUgdGFzayB0byBydW4gd2hpbGUgaW5zdHJ1bWVudGVkIHdoZW4gYnVpbGRpbmcgdGhlIHByb2ZpbGUtb3B0IHRhcmdldC4KKyMgV2UgZXhjbHVkZSB1bml0dGVzdHMgd2l0aCAteCB0aGF0IHRha2UgYSByZWRpY3VsaW91cyBhbW91bnQgb2YgdGltZSB0bworIyBydW4gaW4gdGhlIGluc3RydW1lbnRlZCB0cmFpbmluZyBidWlsZCBvciBkbyBub3QgcHJvdmlkZSBtdWNoIHZhbHVlLgorUFJPRklMRV9UQVNLPS1tIHRlc3QucmVncnRlc3QgLS1wZ28gLXggdGVzdF9hc3luY29yZSB0ZXN0X2dkYiB0ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrIHRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIgdGVzdF9tdWx0aXByb2Nlc3NpbmdfbWFpbl9oYW5kbGluZyB0ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3biB0ZXN0X3N1YnByb2Nlc3MKIAogIyByZXBvcnQgZmlsZXMgZm9yIGdjb3YgLyBsY292IGNvdmVyYWdlIHJlcG9ydAogQ09WRVJBR0VfSU5GTz0JJChhYnNfYnVpbGRkaXIpL2NvdmVyYWdlLmluZm8KQEAgLTMyOCw2ICszMzYsMTMgQEAKIFBHRU5PQkpTPQkkKFBPQkpTKSAkKFBHT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgb3Bjb2RlLmggZ2VuZXJhdGlvbgorT1BDT0RFX0hfRElSPSAJJChzcmNkaXIpL0luY2x1ZGUKK09QQ09ERV9IX1NDUklQVD0gJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvZ2VuZXJhdGVfb3Bjb2RlX2gucHkKK09QQ09ERV9IPQkkKE9QQ09ERV9IX0RJUikvb3Bjb2RlLmgKK09QQ09ERV9IX0dFTj0JJChQWVRIT05fRk9SX0dFTikgJChPUENPREVfSF9TQ1JJUFQpICQoc3JjZGlyKS9MaWIvb3Bjb2RlLnB5ICQoT1BDT0RFX0gpCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBU1QKIEFTVF9IX0RJUj0JSW5jbHVkZQogQVNUX0g9CQkkKEFTVF9IX0RJUikvUHl0aG9uLWFzdC5oCkBAIC0zMzgsNyArMzUzLDcgQEAKIEFTRExHRU5fRklMRVM9CSQoc3JjZGlyKS9QYXJzZXIvYXNkbC5weSAkKHNyY2RpcikvUGFyc2VyL2FzZGxfYy5weQogIyBOb3RlIHRoYXQgYSBidWlsZCBub3cgcmVxdWlyZXMgUHl0aG9uIHRvIGV4aXN0IGJlZm9yZSB0aGUgYnVpbGQgc3RhcnRzLgogIyBVc2UgImhnIHRvdWNoIiB0byBmaXggdXAgc2NyZXdlZCB1cCBmaWxlIG10aW1lcyBpbiBhIGNoZWNrb3V0LgotQVNETEdFTj0JQEFTRExHRU5AICQoc3JjZGlyKS9QYXJzZXIvYXNkbF9jLnB5CitBU0RMR0VOPQkkKFBZVEhPTl9GT1JfR0VOKSAkKHNyY2RpcikvUGFyc2VyL2FzZGxfYy5weQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBQeXRob24KQEAgLTM4Miw2ICszOTcsNyBAQAogCQlQeXRob24vcHljdHlwZS5vIFwKIAkJUHl0aG9uL3B5ZnBlLm8gXAogCQlQeXRob24vcHloYXNoLm8gXAorCQlQeXRob24vcHlsaWZlY3ljbGUubyBcCiAJCVB5dGhvbi9weW1hdGgubyBcCiAJCVB5dGhvbi9weXN0YXRlLm8gXAogCQlQeXRob24vcHl0aG9ucnVuLm8gXApAQCAtMzk0LDYgKzQxMCw3IEBACiAJCVB5dGhvbi9nZXRvcHQubyBcCiAJCVB5dGhvbi9weXN0cmNtcC5vIFwKIAkJUHl0aG9uL3B5c3RydG9kLm8gXAorCQlQeXRob24vcHlzdHJoZXgubyBcCiAJCVB5dGhvbi9kdG9hLm8gXAogCQlQeXRob24vZm9ybWF0dGVyX3VuaWNvZGUubyBcCiAJCVB5dGhvbi9maWxldXRpbHMubyBcCkBAIC00MjgsNiArNDQ1LDcgQEAKIAkJT2JqZWN0cy9saXN0b2JqZWN0Lm8gXAogCQlPYmplY3RzL2xvbmdvYmplY3QubyBcCiAJCU9iamVjdHMvZGljdG9iamVjdC5vIFwKKwkJT2JqZWN0cy9vZGljdG9iamVjdC5vIFwKIAkJT2JqZWN0cy9tZW1vcnlvYmplY3QubyBcCiAJCU9iamVjdHMvbWV0aG9kb2JqZWN0Lm8gXAogCQlPYmplY3RzL21vZHVsZW9iamVjdC5vIFwKQEAgLTQ2NSwyOSArNDgzLDQwIEBACiAKICMgRGVmYXVsdCB0YXJnZXQKIGFsbDoJCWJ1aWxkX2FsbAotYnVpbGRfYWxsOgkkKEJVSUxEUFlUSE9OKSBvbGRzaGFyZWRtb2RzIHNoYXJlZG1vZHMgZ2RiaG9va3MgTW9kdWxlcy9fdGVzdGVtYmVkIHB5dGhvbi1jb25maWcKK2J1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIFByb2dyYW1zL190ZXN0ZW1iZWQgcHl0aG9uLWNvbmZpZwogCi0jIENvbXBpbGUgYSBiaW5hcnkgd2l0aCBnY2MgcHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uLgorIyBDb21waWxlIGEgYmluYXJ5IHdpdGggcHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uLgogcHJvZmlsZS1vcHQ6CisJQGlmIFsgJChMTFZNX1BST0ZfRVJSKSA9IHllcyBdOyB0aGVuIFwKKwkJZWNobyAiRXJyb3I6IENhbm5vdCBwZXJmb3JtIFBHTyBidWlsZCBiZWNhdXNlIGxsdm0tcHJvZmRhdGEgd2FzIG5vdCBmb3VuZCBpbiBQQVRIIiA7XAorCQllY2hvICJQbGVhc2UgYWRkIGl0IHRvIFBBVEggYW5kIHJ1biAuL2NvbmZpZ3VyZSBhZ2FpbiIgO1wKKwkJZXhpdCAxO1wKKwlmaQogCUBlY2hvICJCdWlsZGluZyB3aXRoIHN1cHBvcnQgZm9yIHByb2ZpbGUgZ2VuZXJhdGlvbjoiCiAJJChNQUtFKSBjbGVhbgotCSQoTUFLRSkgYnVpbGRfYWxsX2dlbmVyYXRlX3Byb2ZpbGUKLQlAZWNobyAiUnVubmluZyBiZW5jaG1hcmsgdG8gZ2VuZXJhdGUgcHJvZmlsZSBkYXRhOiIKIAkkKE1BS0UpIHByb2ZpbGUtcmVtb3ZhbAorCSQoTUFLRSkgYnVpbGRfYWxsX2dlbmVyYXRlX3Byb2ZpbGUKKwkkKE1BS0UpIHByb2ZpbGUtcmVtb3ZhbAorCUBlY2hvICJSdW5uaW5nIGNvZGUgdG8gZ2VuZXJhdGUgcHJvZmlsZSBkYXRhICh0aGlzIGNhbiB0YWtlIGEgd2hpbGUpOiIKIAkkKE1BS0UpIHJ1bl9wcm9maWxlX3Rhc2sKKwkkKE1BS0UpIGJ1aWxkX2FsbF9tZXJnZV9wcm9maWxlCiAJQGVjaG8gIlJlYnVpbGRpbmcgd2l0aCBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb25zOiIKIAkkKE1BS0UpIGNsZWFuCiAJJChNQUtFKSBidWlsZF9hbGxfdXNlX3Byb2ZpbGUKKwkkKE1BS0UpIHByb2ZpbGUtcmVtb3ZhbAogCiBidWlsZF9hbGxfZ2VuZXJhdGVfcHJvZmlsZToKLQkkKE1BS0UpIGFsbCBDRkxBR1NfTk9ESVNUPSIkKENGTEFHUykgLWZwcm9maWxlLWdlbmVyYXRlIiBMREZMQUdTPSItZnByb2ZpbGUtZ2VuZXJhdGUiIExJQlM9IiQoTElCUykgLWxnY292IgorCSQoTUFLRSkgYWxsIENGTEFHU19OT0RJU1Q9IiQoQ0ZMQUdTKSAkKFBHT19QUk9GX0dFTl9GTEFHKSBATFRPRkxBR1NAIiBMREZMQUdTPSIkKExERkxBR1MpICQoUEdPX1BST0ZfR0VOX0ZMQUcpIEBMVE9GTEFHU0AiIExJQlM9IiQoTElCUykiCiAKIHJ1bl9wcm9maWxlX3Rhc2s6CiAJOiAjIEZJWE1FOiBjYW4ndCBydW4gZm9yIGEgY3Jvc3MgYnVpbGQKLQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKFBST0ZJTEVfVEFTSykKKwkkKExMVk1fUFJPRl9GSUxFKSAkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKFBST0ZJTEVfVEFTSykgfHwgdHJ1ZQorCitidWlsZF9hbGxfbWVyZ2VfcHJvZmlsZToKKwkkKExMVk1fUFJPRl9NRVJHRVIpCiAKIGJ1aWxkX2FsbF91c2VfcHJvZmlsZToKLQkkKE1BS0UpIGFsbCBDRkxBR1NfTk9ESVNUPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKKwkkKE1BS0UpIGFsbCBDRkxBR1NfTk9ESVNUPSIkKENGTEFHUykgJChQR09fUFJPRl9VU0VfRkxBRykgQExUT0ZMQUdTQCIgTERGTEFHUz0iJChMREZMQUdTKSBATFRPRkxBR1NAIgogCiAjIENvbXBpbGUgYW5kIHJ1biB3aXRoIGdjb3YKIC5QSE9OWT1jb3ZlcmFnZSBjb3ZlcmFnZS1sY292IGNvdmVyYWdlLXJlcG9ydApAQCAtNTI0LDYgKzU1Myw3IEBACiAJOiAjIGZvcmNlIHJlYnVpbGRpbmcgb2YgcGFyc2VyIGFuZCBpbXBvcnRsaWIKIAlAdG91Y2ggJChHUkFNTUFSX0lOUFVUKQogCUB0b3VjaCAkKHNyY2RpcikvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisJQHRvdWNoICQoc3JjZGlyKS9MaWIvaW1wb3J0bGliL19ib290c3RyYXBfZXh0ZXJuYWwucHkKIAk6ICMgYnVpbGQgd2l0aCBjb3ZlcmFnZSBpbmZvCiAJJChNQUtFKSBjb3ZlcmFnZQogCTogIyBydW4gdGVzdHMsIGlnbm9yZSBmYWlsdXJlcwpAQCAtNTM4LDggKzU2OCw4IEBACiAJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLi9Ub29scy9jbGluaWMvY2xpbmljLnB5IC0tbWFrZQogCiAjIEJ1aWxkIHRoZSBpbnRlcnByZXRlcgotJChCVUlMRFBZVEhPTik6CU1vZHVsZXMvcHl0aG9uLm8gJChMSUJSQVJZKSAkKExETElCUkFSWSkgJChQWTNMSUJSQVJZKQotCSQoTElOS0NDKSAkKFBZX0xERkxBR1MpICQoTElOS0ZPUlNIQVJFRCkgLW8gJEAgTW9kdWxlcy9weXRob24ubyAkKEJMRExJQlJBUlkpICQoTElCUykgJChNT0RMSUJTKSAkKFNZU0xJQlMpICQoTERMQVNUKQorJChCVUlMRFBZVEhPTik6CVByb2dyYW1zL3B5dGhvbi5vICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoUFkzTElCUkFSWSkKKwkkKExJTktDQykgJChQWV9MREZMQUdTKSAkKExJTktGT1JTSEFSRUQpIC1vICRAIFByb2dyYW1zL3B5dGhvbi5vICQoQkxETElCUkFSWSkgJChMSUJTKSAkKE1PRExJQlMpICQoU1lTTElCUykgJChMRExBU1QpCiAKIHBsYXRmb3JtOiAkKEJVSUxEUFlUSE9OKSBweWJ1aWxkZGlyLnR4dAogCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1jICdpbXBvcnQgc3lzIDsgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9wbGF0Zm9ybSA7IHByaW50KGdldF9wbGF0Zm9ybSgpKyItIitzeXMudmVyc2lvblswOjNdKScgPnBsYXRmb3JtCkBAIC01NjAsMTEgKzU5MCwxNSBAQAogCQlleGl0IDEgOyBcCiAJZmkKIAorIyBUaGlzIGlzIHNoYXJlZCBieSB0aGUgbWF0aCBhbmQgY21hdGggbW9kdWxlcworTW9kdWxlcy9fbWF0aC5vOiBNb2R1bGVzL19tYXRoLmMgTW9kdWxlcy9fbWF0aC5oCisJJChDQykgLWMgJChDQ1NIQVJFRCkgJChQWV9DT1JFX0NGTEFHUykgLW8gJEAgJDwKKwogIyBCdWlsZCB0aGUgc2hhcmVkIG1vZHVsZXMKICMgVW5kZXIgR05VIG1ha2UsIE1BS0VGTEFHUyBhcmUgc29ydGVkIGFuZCBub3JtYWxpemVkOyB0aGUgJ3MnIGZvcgogIyAtcywgLS1zaWxlbnQgb3IgLS1xdWlldCBpcyBhbHdheXMgdGhlIGZpcnN0IGNoYXIuCiAjIFVuZGVyIEJTRCBtYWtlLCBNQUtFRkxBR1MgbWlnaHQgYmUgIiAtcyAtdiB4PXkiLgotc2hhcmVkbW9kczogJChCVUlMRFBZVEhPTikgcHlidWlsZGRpci50eHQKK3NoYXJlZG1vZHM6ICQoQlVJTERQWVRIT04pIHB5YnVpbGRkaXIudHh0IE1vZHVsZXMvX21hdGgubwogCUBjYXNlICIkJE1BS0VGTEFHUyIgaW4gXAogCSAgICAqXCAtcyp8cyopIHF1aWV0PSItcSI7OyBcCiAJICAgICopIHF1aWV0PSIiOzsgXApAQCAtNjc0LDE5ICs3MDgsMjggQEAKIAkJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iOyBcCiAJZmkKIAotTW9kdWxlcy9fdGVzdGVtYmVkOiBNb2R1bGVzL190ZXN0ZW1iZWQubyAkKExJQlJBUlkpICQoTERMSUJSQVJZKSAkKFBZM0xJQlJBUlkpCi0JJChMSU5LQ0MpICQoUFlfTERGTEFHUykgJChMSU5LRk9SU0hBUkVEKSAtbyAkQCBNb2R1bGVzL190ZXN0ZW1iZWQubyAkKEJMRExJQlJBUlkpICQoTElCUykgJChNT0RMSUJTKSAkKFNZU0xJQlMpICQoTERMQVNUKQorUHJvZ3JhbXMvX3Rlc3RlbWJlZDogUHJvZ3JhbXMvX3Rlc3RlbWJlZC5vICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoUFkzTElCUkFSWSkKKwkkKExJTktDQykgJChQWV9MREZMQUdTKSAkKExJTktGT1JTSEFSRUQpIC1vICRAIFByb2dyYW1zL190ZXN0ZW1iZWQubyAkKEJMRExJQlJBUlkpICQoTElCUykgJChNT0RMSUJTKSAkKFNZU0xJQlMpICQoTERMQVNUKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEltcG9ydGxpYgogCi1Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliOiBNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLm8gJChMSUJSQVJZX09CSlNfT01JVF9GUk9aRU4pCi0JJChMSU5LQ0MpICQoUFlfTERGTEFHUykgLW8gJEAgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5vICQoTElCUkFSWV9PQkpTX09NSVRfRlJPWkVOKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKK1Byb2dyYW1zL19mcmVlemVfaW1wb3J0bGliLm86IFByb2dyYW1zL19mcmVlemVfaW1wb3J0bGliLmMgTWFrZWZpbGUKIAotUHl0aG9uL2ltcG9ydGxpYi5oOiAkKHNyY2RpcikvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwotCSQoTUFLRSkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYgotCS4vTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYiBcCi0JCSQoc3JjZGlyKS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgUHl0aG9uL2ltcG9ydGxpYi5oCitQcm9ncmFtcy9fZnJlZXplX2ltcG9ydGxpYjogUHJvZ3JhbXMvX2ZyZWV6ZV9pbXBvcnRsaWIubyAkKExJQlJBUllfT0JKU19PTUlUX0ZST1pFTikKKwkkKExJTktDQykgJChQWV9MREZMQUdTKSAtbyAkQCBQcm9ncmFtcy9fZnJlZXplX2ltcG9ydGxpYi5vICQoTElCUkFSWV9PQkpTX09NSVRfRlJPWkVOKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKKworUHl0aG9uL2ltcG9ydGxpYl9leHRlcm5hbC5oOiAkKHNyY2RpcikvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwX2V4dGVybmFsLnB5IFByb2dyYW1zL19mcmVlemVfaW1wb3J0bGliCisJaWYgdGVzdCAiJChjcm9zc19jb21waWxpbmcpIiAhPSAieWVzIjsgdGhlbiBcCisJICAgIC4vUHJvZ3JhbXMvX2ZyZWV6ZV9pbXBvcnRsaWIgXAorCSAgICAgICAgJChzcmNkaXIpL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcF9leHRlcm5hbC5weSBQeXRob24vaW1wb3J0bGliX2V4dGVybmFsLmg7IFwKKwlmaQorCitQeXRob24vaW1wb3J0bGliLmg6ICQoc3JjZGlyKS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgUHJvZ3JhbXMvX2ZyZWV6ZV9pbXBvcnRsaWIKKwlpZiB0ZXN0ICIkKGNyb3NzX2NvbXBpbGluZykiICE9ICJ5ZXMiOyB0aGVuIFwKKwkgICAgLi9Qcm9ncmFtcy9fZnJlZXplX2ltcG9ydGxpYiBcCisJICAgICAgICAkKHNyY2RpcikvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5IFB5dGhvbi9pbXBvcnRsaWIuaDsgXAorCWZpCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNzEzLDExICs3NTYsMTEgQEAKIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXAogCQktbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRwYXRoLmMKIAotTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKLQkkKE1BSU5DQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKK1Byb2dyYW1zL3B5dGhvbi5vOiAkKHNyY2RpcikvUHJvZ3JhbXMvcHl0aG9uLmMKKwkkKE1BSU5DQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLW8gJEAgJChzcmNkaXIpL1Byb2dyYW1zL3B5dGhvbi5jCiAKLU1vZHVsZXMvX3Rlc3RlbWJlZC5vOiAkKHNyY2RpcikvTW9kdWxlcy9fdGVzdGVtYmVkLmMKLQkkKE1BSU5DQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvX3Rlc3RlbWJlZC5jCitQcm9ncmFtcy9fdGVzdGVtYmVkLm86ICQoc3JjZGlyKS9Qcm9ncmFtcy9fdGVzdGVtYmVkLmMKKwkkKE1BSU5DQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLW8gJEAgJChzcmNkaXIpL1Byb2dyYW1zL190ZXN0ZW1iZWQuYwogCiBNb2R1bGVzL19zcmUubzogJChzcmNkaXIpL01vZHVsZXMvX3NyZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3NyZS5oICQoc3JjZGlyKS9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaCAkKHNyY2RpcikvTW9kdWxlcy9zcmVfbGliLmgKIApAQCAtNzQ2LDE1ICs3ODksMjQgQEAKIAogJChJT19PQkpTKTogJChJT19IKQogCi0kKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKLQkJQCQoTUtESVJfUCkgSW5jbHVkZQotCQkkKE1BS0UpICQoUEdFTikKLQkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKLSQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKLQkJJChNQUtFKSAkKEdSQU1NQVJfSCkKLQkJdG91Y2ggJChHUkFNTUFSX0MpCiskKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgQFBHRU5fREVQRU5ERU5DWUAKKwlAJChNS0RJUl9QKSBJbmNsdWRlCisJIyBBdm9pZCBjb3B5aW5nIHRoZSBmaWxlIG9udG8gaXRzZWxmIGZvciBhbiBpbi10cmVlIGJ1aWxkCisJaWYgdGVzdCAiJChjcm9zc19jb21waWxpbmcpIiAhPSAieWVzIjsgdGhlbiBcCisJCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpOyBcCisJZWxzZSBcCisJCWNwICQoc3JjZGlyKS9JbmNsdWRlL2dyYW1pbml0LmggJChHUkFNTUFSX0gpLnRtcDsgXAorCQltdiAkKEdSQU1NQVJfSCkudG1wICQoR1JBTU1BUl9IKTsgXAorCWZpCiskKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKQorCWlmIHRlc3QgIiQoY3Jvc3NfY29tcGlsaW5nKSIgIT0gInllcyI7IHRoZW4gXAorCQl0b3VjaCAkKEdSQU1NQVJfQyk7IFwKKwllbHNlIFwKKwkJY3AgJChzcmNkaXIpL1B5dGhvbi9ncmFtaW5pdC5jICQoR1JBTU1BUl9DKS50bXA7IFwKKwkJbXYgJChHUkFNTUFSX0MpLnRtcCAkKEdSQU1NQVJfQyk7IFwKKwlmaQogCi0kKFBHRU4pOgkkKFBHRU5PQkpTKQorJChQR0VOKTogJChQR0VOT0JKUykKIAkJJChDQykgJChPUFQpICQoUFlfTERGTEFHUykgJChQR0VOT0JKUykgJChMSUJTKSAtbyAkKFBHRU4pCiAKIFBhcnNlci9ncmFtbWFyLm86CSQoc3JjZGlyKS9QYXJzZXIvZ3JhbW1hci5jIFwKQEAgLTc3Niw2ICs4MjgsOSBAQAogCSQoTUtESVJfUCkgJChBU1RfQ19ESVIpCiAJJChBU0RMR0VOKSAtYyAkKEFTVF9DX0RJUikgJChBU1RfQVNETCkKIAorJChPUENPREVfSCk6ICQoc3JjZGlyKS9MaWIvb3Bjb2RlLnB5ICQoT1BDT0RFX0hfU0NSSVBUKQorCSQoT1BDT0RFX0hfR0VOKQorCiBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCiAKIFB5dGhvbi9nZXRwbGF0Zm9ybS5vOiAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKQEAgLTgyNiwxNSArODgxLDE1IEBACiBPYmplY3RzL3NldG9iamVjdC5vOiAkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaAogCiAkKE9QQ09ERVRBUkdFVFNfSCk6ICQoT1BDT0RFVEFSR0VUR0VOX0ZJTEVTKQotCSQoT1BDT0RFVEFSR0VUR0VOKSAkKE9QQ09ERVRBUkdFVFNfSCkKKwkkKFBZVEhPTl9GT1JfR0VOKSAkKE9QQ09ERVRBUkdFVEdFTikgJChPUENPREVUQVJHRVRTX0gpCiAKIFB5dGhvbi9jZXZhbC5vOiAkKE9QQ09ERVRBUkdFVFNfSCkgJChzcmNkaXIpL1B5dGhvbi9jZXZhbF9naWwuaAogCi1QeXRob24vZnJvemVuLm86IFB5dGhvbi9pbXBvcnRsaWIuaAorUHl0aG9uL2Zyb3plbi5vOiBQeXRob24vaW1wb3J0bGliLmggUHl0aG9uL2ltcG9ydGxpYl9leHRlcm5hbC5oCiAKIE9iamVjdHMvdHlwZW9iamVjdC5vOiBPYmplY3RzL3R5cGVzbG90cy5pbmMKIE9iamVjdHMvdHlwZXNsb3RzLmluYzogJChzcmNkaXIpL0luY2x1ZGUvdHlwZXNsb3RzLmggJChzcmNkaXIpL09iamVjdHMvdHlwZXNsb3RzLnB5Ci0JJChQWVRIT04pICQoc3JjZGlyKS9PYmplY3RzL3R5cGVzbG90cy5weSA8ICQoc3JjZGlyKS9JbmNsdWRlL3R5cGVzbG90cy5oID4gT2JqZWN0cy90eXBlc2xvdHMuaW5jCisJJChQWVRIT05fRk9SX0dFTikgJChzcmNkaXIpL09iamVjdHMvdHlwZXNsb3RzLnB5IDwgJChzcmNkaXIpL0luY2x1ZGUvdHlwZXNsb3RzLmggT2JqZWN0cy90eXBlc2xvdHMuaW5jCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgSGVhZGVyIGZpbGVzCkBAIC04ODcsNyArOTQyLDcgQEAKIAkJJChzcmNkaXIpL0luY2x1ZGUvbm9kZS5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvb2JqZWN0LmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9vYmppbXBsLmggXAotCQkkKHNyY2RpcikvSW5jbHVkZS9vcGNvZGUuaCBcCisJCSQoT1BDT0RFX0gpIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvb3NkZWZzLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9wYXRjaGxldmVsLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9wZ2VuLmggXApAQCAtOTAwLDYgKzk1NSw3IEBACiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZXJyb3JzLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWZwZS5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHloYXNoLmggXAorCQkkKHNyY2RpcikvSW5jbHVkZS9weWxpZmVjeWNsZS5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHltYXRoLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWdldG9wdC5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHltYWNyby5oIFwKQEAgLTkwOCw2ICs5NjQsNyBAQAogCQkkKHNyY2RpcikvSW5jbHVkZS9weXN0YXRlLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weXN0cmNtcC5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHlzdHJ0b2QuaCBcCisJCSQoc3JjZGlyKS9JbmNsdWRlL3B5c3RyaGV4LmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weXRob25ydW4uaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5dGhyZWFkLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weXRpbWUuaCBcCkBAIC05MjgsNyArOTg1LDcgQEAKIAkJJChQQVJTRVJfSEVBREVSUykgXAogCQkkKEFTVF9IKQogCi0kKExJQlJBUllfT0JKUykgJChNT0RPQkpTKSBNb2R1bGVzL3B5dGhvbi5vOiAkKFBZVEhPTl9IRUFERVJTKQorJChMSUJSQVJZX09CSlMpICQoTU9ET0JKUykgUHJvZ3JhbXMvcHl0aG9uLm86ICQoUFlUSE9OX0hFQURFUlMpCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTA3Niw2ICsxMTMzLDEwIEBACiAJZmkKIAogYmluaW5zdGFsbDogYWx0YmluaW5zdGFsbAorCWlmIHRlc3QgISAtZCAkKERFU1RESVIpJChMSUJQQyk7IHRoZW4gXAorCQllY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgJChMSUJQQykiOyBcCisJCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAkKERFU1RESVIpJChMSUJQQyk7IFwKKwlmaQogCS1pZiB0ZXN0IC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMyQoRVhFKSAtbyAtaCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMkKEVYRSk7IFwKIAl0aGVuIHJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMyQoRVhFKTsgXAogCWVsc2UgdHJ1ZTsgXApAQCAtMTEzMSw5ICsxMTkyLDE0IEBACiAJCXRlc3QvYXVkaW9kYXRhIFwKIAkJdGVzdC9jYXBhdGggdGVzdC9kYXRhIFwKIAkJdGVzdC9jamtlbmNvZGluZ3MgdGVzdC9kZWNpbWFsdGVzdGRhdGEgdGVzdC94bWx0ZXN0ZGF0YSBcCisJCXRlc3QvZWludHJkYXRhIFwKIAkJdGVzdC9pbWdoZHJkYXRhIFwKIAkJdGVzdC9zdWJwcm9jZXNzZGF0YSB0ZXN0L3NuZGhkcmRhdGEgdGVzdC9zdXBwb3J0IFwKIAkJdGVzdC90cmFjZWRtb2R1bGVzIHRlc3QvZW5jb2RlZF9tb2R1bGVzIFwKKwkJdGVzdC90ZXN0X2ltcG9ydCBcCisJCXRlc3QvdGVzdF9pbXBvcnQvZGF0YSBcCisJCXRlc3QvdGVzdF9pbXBvcnQvZGF0YS9jaXJjdWxhcl9pbXBvcnRzIFwKKwkJdGVzdC90ZXN0X2ltcG9ydC9kYXRhL2NpcmN1bGFyX2ltcG9ydHMvc3VicGtnIFwKIAkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncyBcCiAJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucyBcCiAJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28gXApAQCAtMTI0Niw3ICsxMzEyLDEyIEBACiAJCS1kICQoTElCREVTVCkgLWYgXAogCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKIAkJJChERVNURElSKSQoTElCREVTVCkKLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtT08gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisJCS1kICQoTElCREVTVCkgLWYgXAorCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKwkJJChERVNURElSKSQoTElCREVTVCkKKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAogCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKIAkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKQEAgLTEyNTUsNiArMTMyNiwxMCBAQAogCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAogCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcwogCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisJCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC1PTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKwkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKwkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKwktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAogCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAogCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CkBAIC0xMzM3LDcgKzE0MTIsNyBAQAogCQlmaTsgXAogCWZpCiAJJChJTlNUQUxMX0RBVEEpIE1vZHVsZXMvY29uZmlnLmMgJChERVNURElSKSQoTElCUEwpL2NvbmZpZy5jCi0JJChJTlNUQUxMX0RBVEEpIE1vZHVsZXMvcHl0aG9uLm8gJChERVNURElSKSQoTElCUEwpL3B5dGhvbi5vCisJJChJTlNUQUxMX0RBVEEpIFByb2dyYW1zL3B5dGhvbi5vICQoREVTVERJUikkKExJQlBMKS9weXRob24ubwogCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvTW9kdWxlcy9jb25maWcuYy5pbiAkKERFU1RESVIpJChMSUJQTCkvY29uZmlnLmMuaW4KIAkkKElOU1RBTExfREFUQSkgTWFrZWZpbGUgJChERVNURElSKSQoTElCUEwpL01ha2VmaWxlCiAJJChJTlNUQUxMX0RBVEEpIE1vZHVsZXMvU2V0dXAgJChERVNURElSKSQoTElCUEwpL1NldHVwCkBAIC0xMzQ4LDEwICsxNDIzLDEwIEBACiAJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL2luc3RhbGwtc2ggJChERVNURElSKSQoTElCUEwpL2luc3RhbGwtc2gKIAkkKElOU1RBTExfU0NSSVBUKSBweXRob24tY29uZmlnLnB5ICQoREVTVERJUikkKExJQlBMKS9weXRob24tY29uZmlnLnB5CiAJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKS1jb25maWcKLQlAaWYgWyAtcyBNb2R1bGVzL3B5dGhvbi5leHAgLWEgXAorCUBpZiBbIC1zIFByb2dyYW1zL3B5dGhvbi5leHAgLWEgXAogCQkiYGVjaG8gJChNQUNIREVQKSB8IHNlZCAncy9eXCguLi5cKS4qL1wxLydgIiA9ICJhaXgiIF07IHRoZW4gXAogCQllY2hvOyBlY2hvICJJbnN0YWxsaW5nIHN1cHBvcnQgZmlsZXMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBleHRlbnNpb24gbW9kdWxlcyBvbiBBSVg6IjsgXAotCQkkKElOU1RBTExfREFUQSkgTW9kdWxlcy9weXRob24uZXhwCQlcCisJCSQoSU5TVEFMTF9EQVRBKSBQcm9ncmFtcy9weXRob24uZXhwCQlcCiAJCQkJJChERVNURElSKSQoTElCUEwpL3B5dGhvbi5leHA7CQlcCiAJCWVjaG87IGVjaG8gIiQoTElCUEwpL3B5dGhvbi5leHAiOwkJXAogCQkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2RpcikvTW9kdWxlcy9tYWtleHBfYWl4CVwKQEAgLTEzODEsNyArMTQ1Niw3IEBACiAjIHRoZSBNYWtlZmlsZSBpbiBNYWMKICMKICMKLSMgVGhpcyB0YXJnZXQgaXMgaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJsaXR5LCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24KKyMgVGhpcyB0YXJnZXQgaXMgaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uCiAjIGhhZG4ndCBpbnRlZ3JhdGVkIGZyYW1ld29yayBpbnN0YWxsYXRpb24gaW4gdGhlIG5vcm1hbCBpbnN0YWxsIHByb2Nlc3MuCiBmcmFtZXdvcmtpbnN0YWxsOiBpbnN0YWxsCiAKQEAgLTE1MzQsMTAgKzE2MDksMTMgQEAKIAlmaW5kIGJ1aWxkIC1uYW1lICcqLnB5W2NvXScgLWV4ZWMgcm0gLWYge30gJzsnIHx8IHRydWUKIAktcm0gLWYgcHlidWlsZGRpci50eHQKIAktcm0gLWYgTGliL2xpYjJ0bzMvKkdyYW1tYXIqLnBpY2tsZQotCS1ybSAtZiBNb2R1bGVzL190ZXN0ZW1iZWQgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYgorCS1ybSAtZiBQcm9ncmFtcy9fdGVzdGVtYmVkIFByb2dyYW1zL19mcmVlemVfaW1wb3J0bGliCisJLXJtIC1yZiBidWlsZAogCiBwcm9maWxlLXJlbW92YWw6CiAJZmluZCAuIC1uYW1lICcqLmdjPz8nIC1leGVjIHJtIC1mIHt9ICc7JworCWZpbmQgLiAtbmFtZSAnKi5wcm9mY2xhbmc/JyAtZXhlYyBybSAtZiB7fSAnOycKKwlmaW5kIC4gLW5hbWUgJyouZHluJyAtZXhlYyBybSAtZiB7fSAnOycKIAlybSAtZiAkKENPVkVSQUdFX0lORk8pCiAJcm0gLXJmICQoQ09WRVJBR0VfUkVQT1JUKQogCkBAIC0xNTU4LDcgKzE2MzYsNyBAQAogCWRvbmUKIAktcm0gLWYgY29yZSBNYWtlZmlsZSBNYWtlZmlsZS5wcmUgY29uZmlnLnN0YXR1cyBcCiAJCU1vZHVsZXMvU2V0dXAgTW9kdWxlcy9TZXR1cC5sb2NhbCBNb2R1bGVzL1NldHVwLmNvbmZpZyBcCi0JCU1vZHVsZXMvbGRfc29fYWl4IE1vZHVsZXMvcHl0aG9uLmV4cCBNaXNjL3B5dGhvbi5wYworCQlNb2R1bGVzL2xkX3NvX2FpeCBQcm9ncmFtcy9weXRob24uZXhwIE1pc2MvcHl0aG9uLnBjCiAJLXJtIC1mIHB5dGhvbiotZ2RiLnB5CiAJZmluZCAkKHNyY2RpcikvW2EtekEtWl0qICcoJyAtbmFtZSAnKi5mZGMnIC1vIC1uYW1lICcqficgXAogCQkJCSAgICAgLW8gLW5hbWUgJ1tALCNdKicgLW8gLW5hbWUgJyoub2xkJyBcCkBAIC0xNjA1LDcgKzE2ODMsNyBAQAogCQktbyAtcHJpbnQKIAogIyBQZXJmb3JtIHNvbWUgdmVyaWZpY2F0aW9uIGNoZWNrcyBvbiBhbnkgbW9kaWZpZWQgZmlsZXMuCi1wYXRjaGNoZWNrOgorcGF0Y2hjaGVjazogYWxsCiAJJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQogCiAjIERlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IDY4MjQ1NTQuLjE1MGQzN2EgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTQ2LDYgKzQ2LDcgQEAKIEVyaWsgQW5kZXJzw6luCiBPbGl2ZXIgQW5kcmljaAogUm9zcyBBbmRydXMKK0ZhYnJpY2UgQW5lY2hlCiBKdWFuY2FybG8gQcOxZXoKIENocmlzIEFuZ2VsaWNvCiBKw6lyw6lteSBBbmdlcgpAQCAtNzEsNiArNzIsNyBAQAogU3RpZyBCYWtrZW4KIEdyZWcgQmFsbAogTHVpZ2kgQmFsbGFiaW8KK1Rob21hcyBCYWxsaW5nZXIKIEplZmYgQmFsb2doCiBNYW51ZWwgQmFsc2VyYQogTWF0dCBCYW5keQpAQCAtODgsNyArOTAsOSBAQAogUmljaGFyZCBCYXJyYW4KIENlc2FyIEVkdWFyZG8gQmFycm9zCiBEZXMgQmFycnkKK0VtYW51ZWwgQmFycnkKIFVsZiBCYXJ0ZWx0CitDYW1wYmVsbCBCYXJ0b24KIERvbiBCYXNoZm9yZAogUGlvciBCYXN0aWRhCiBOaWNrIEJhc3RpbgpAQCAtOTgsMTMgKzEwMiwxNiBAQAogQW50aG9ueSBCYXh0ZXIKIE1pa2UgQmF5ZXIKIFNhbXVlbCBMLiBCYXllcgorVG9tbXkgQmVhZGxlCiBEb25hbGQgQmVhdWRyeQogRGF2aWQgQmVhemxleQogSm9obiBCZWNrCitJbmdvbGYgQmVja2VyCiBOZWFsIEJlY2tlcgogUm9iaW4gQmVja2VyCiBUb3JzdGVuIEJlY2tlcgogQmlsbCBCZWRmb3JkCitNaWNoYcWCIEJlZG5hcnNraQogSWFuIEJlZXIKIFN0ZWZhbiBCZWhuZWwKIFJlaW1lciBCZWhyZW5kcwpAQCAtMTUyLDYgKzE1OSw3IEBACiBHYXdhaW4gQm9sdG9uCiBGb3Jlc3QgQm9uZAogR3JlZ29yeSBCb25kCitNw6lkw6lyaWMgQm9xdWllbgogTWF0aWFzIEJvcmRlc2UKIEpvbmFzIEJvcmdzdHLDtm0KIEp1cmplbiBCb3MKQEAgLTE2Nyw2ICsxNzUsNyBAQAogR2VvcmcgQnJhbmRsCiBDaHJpc3RvcGhlciBCcmFubm9uCiBUZXJyZW5jZSBCcmFubm9uCitFcmluIEJyYXN3ZWxsCiBTdmVuIEJyYXVjaAogR2VybcOhbiBNLiBCcmF2bwogRXJpayBCcmF5CkBAIC0xOTEsNiArMjAwLDcgQEAKIEZsb3JpcyBCcnV5bm9vZ2hlCiBNYXR0IEJyeWFudAogU3RhbiBCdWJyb3Vza2kKK0NvbG0gQnVja2xleQogRXJpayBkZSBCdWVnZXIKIEphbi1IZWluIELDvGhybWFuCiBMYXJzIEJ1aXRpbmNrCkBAIC0yMzIsMTAgKzI0MiwxMiBAQAogSm9obiBDaGFuZGxlcgogSHllLVNoaWsgQ2hhbmcKIEplZmZyZXkgQ2hhbmcKK0dhdmluIENoYXBwZWxsCiBHb2RlZnJvaWQgQ2hhcGVsbGUKIEJyYWQgQ2hhcG1hbgogR3JlZyBDaGFwbWFuCiBNaXRjaCBDaGFwbWFuCitNYXR0IENoYXB1dAogWW9nZXNoIENoYXVkaGFyaQogRGF2aWQgQ2hhdW0KIE5pY29sYXMgQ2hhdXZhdApAQCAtMzQzLDcgKzM1NSw2IEBACiBZdmVzIERpb25uZQogRGFuaWVsIERpdHRtYXIKIEpvc2lwIERqb2xvbmdhCi1XYWx0ZXIgRMO2cndhbGQKIEphcm9taXIgRG9sZWNlawogSXNtYWlsIERvbm1legogUm9iZXJ0IERvbm9odWUKQEAgLTM3MSw2ICszODIsNyBAQAogS2FybWVuIER5a3N0cmEKIEpvc2lwIER6b2xvbmdhCiBNYXhpbSBEenVtYW5lbmtvCitXYWx0ZXIgRMO2cndhbGQKIEhhbnMgRWNrYXJkdAogUm9kb2xwaG8gRWNraGFyZHQKIFVscmljaCBFY2toYXJkdApAQCAtMzg2LDYgKzM5OCw3IEBACiBEYW5pZWwgRWxsaXMKIFBoaWwgRWxzb24KIERhdmlkIEVseQorVmljdG9yIHZhbiBkZW4gRWx6ZW4KIEplZmYgRXBsZXIKIFRvbSBFcHBlcmx5CiBHw7ZrY2VuIEVyYXNsYW4KQEAgLTQ0NSw2ICs0NTgsNyBAQAogTWFydGluIEZyYW5rbGluCiBLZW50IEZyYXppZXIKIEJydWNlIEZyZWRlcmlrc2VuCitKYXNvbiBGcmllZAogUm9iaW4gRnJpZWRyaWNoCiBCcmFkbGV5IEZyb2VobGUKIEl2YW4gRnJvaG5lCkBAIC00NzcsNyArNDkxLDkgQEAKIFN0ZXBoZW4gTS4gR2F2YQogWGF2aWVyIGRlIEdheWUKIEhhcnJ5IEhlbnJ5IEdlYmVsCitUYW3DoXMgQmVuY2UgR2VkYWkKIE1hcml1cyBHZWRtaW5hcworSmFuLVBoaWxpcCBHZWhyY2tlCiBUaG9tYXMgR2VsbGVrdW0KIEdhYnJpZWwgR2VuZWxsaW5hCiBDaHJpc3RvcyBHZW9yZ2lvdQpAQCAtNDkwLDYgKzUwNiw3IEBACiBNaWNoYWVsIEdpbGZpeAogSnVsaWFuIEdpbmRpCiBZYW5uaWNrIEdpbmdyYXMKK05laWwgR2lyZGhhcgogTWF0dCBHaXVjYQogV2ltIEdsZW5uCiBNaWNoYWVsIEdvZGVyYmF1ZXIKQEAgLTUwNCw2ICs1MjEsNyBAQAogRGF2aWQgR29vZGdlcgogSGFucyBkZSBHcmFhZmYKIFRpbSBHcmFoYW0KK0tpbSBHcsOkc21hbgogTmF0aGFuaWVsIEdyYXkKIEVkZHkgRGUgR3JlZWYKIEdyYW50IEdyaWZmaW4KQEAgLTU3OCw2ICs1OTYsNyBAQAogV291dGVyIHZhbiBIZXlzdAogS2Vsc2V5IEhpZ2h0b3dlcgogSmFzb24gSGlsZGVicmFuZAorQWFyb24gSGlsbAogUmljaGllIEhpbmRsZQogS29ucmFkIEhpbnNlbgogRGF2aWQgSG9ibGV5CkBAIC02MTUsNiArNjM0LDcgQEAKIEtlbiBIb3dhcmQKIEJyYWQgSG93ZXMKIE1pa2UgSG95CitCZW4gSG95dAogQ2hpdS1Ic2lhbmcgSHN1CiBDaGloLUhhbyBIdWFuZwogQ2hyaXN0aWFuIEh1ZG9uCkBAIC02MzMsOCArNjUzLDEwIEBACiBNaWhhaSBJYmFuZXNjdQogQWxpIElraW5jaQogQWFyb24gSWxlcworVGhvbWFzIElsc2NoZQogTGFycyBJbW1pc2NoCiBCb2JieSBJbXBvbGxvbmlhCitOYW9raSBJbmFkYQogTWVhZG9yIEluZ2UKIFBldGVyIEluZ2VicmV0c29uCiBUb255IEluZ3JhbGRpCkBAIC02NTMsMTggKzY3NSwyMiBAQAogQmVydHJhbmQgSmFuaW4KIEdlZXJ0IEphbnNlbgogSmFjayBKYW5zZW4KK0hhbnMtUGV0ZXIgSmFuc2VuCiBCaWxsIEphbnNzZW4KIFRob21hcyBKYXJvc2NoCiBKdWhhbmEgSmF1aGlhaW5lbgogUmFqYWdvcGFsYXNhcm1hIEpheWFrcmlzaG5hbgorRGV2aW4gSmVhbnBpZXJyZQogWmJpZ25pZXcgSsSZZHJ6ZWpld3NraS1Tem1lawogSnVsaWVuIEplaGFubmV0CitNdWhhbW1hZCBKZWhhbnplYgogRHJldyBKZW5raW5zCiBGbGVtbWluZyBLasOmciBKZW5zZW4KIFBoaWxpcCBILiBKZW5zZW4KIFBoaWxpcCBKZW52ZXkKIE11blNpYyBKZW9uZwogQ2hyaXMgSmVyZG9uZWsKK0pvZSBKZXZuaWsKIEppbSBKZXdldHQKIFBlZHJvIERpYXogSmltZW5legogT3JqYW4gSm9oYW5zZW4KQEAgLTY3OCw2ICs3MDQsNyBAQAogTmljb2xhcyBKb2x5CiBCcmlhbiBLLiBKb25lcwogRXZhbiBKb25lcworR2xlbm4gSm9uZXMKIEplcmVteSBKb25lcwogUmljaGFyZCBKb25lcwogSXJtZW4gZGUgSm9uZwpAQCAtNzAwLDEyICs3MjcsMTUgQEAKIEphbiBLYW5pcwogUmFmZSBLYXBsYW4KIEphY29iIEthcGxhbi1Nb3NzCitBbGxpc29uIEthcHR1cgogSmFubmUgS2FyaWxhCiBQZXIgw5h5dmluZCBLYXJsc2VuCiBBbnRvbiBLYXN5YW5vdgogTG91IEthdGVzCiBNYWtvdG8gS2F0bwogSGlyb2FraSBLYXdhaQorRG1pdHJ5IEthemFrb3YKK0JyaWFuIEtlYXJucwogU2ViYXN0aWVuIEtlaW0KIFJ5YW4gS2VsbHkKIERhbiBLZW5pZ3NiZXJnCkBAIC03MTYsMTEgKzc0NiwxMyBAQAogTGF3cmVuY2UgS2VzdGVsb290CiBWaXZlayBLaGVyYQogRGhpcnUgS2hvbGlhCitBa3NoaXQgS2h1cmFuYQogTWFkcyBLaWlsZXJpY2gKIEphc29uIEtpbGxlbgogSmFuIEtpbQogVGFlayBKb28gS2ltCiBTYW0gS2ltYnJlbAorSmFtZXMgS2luZwogVy4gVHJldm9yIEtpbmcKIFBhdWwgS2lwcGVzCiBTdGV2ZSBLaXJzY2gKQEAgLTc0MCw2ICs3NzIsNyBAQAogSmVmZiBLbnVwcAogS3ViaWxheSBLb2NhawogR3JlZyBLb2NoYW5za2kKK01hbnZpc2hhIEtvZGFsaQogRGFtb24gS29obGVyCiBNYXJrbyBLb2h0YWxhCiBWYWpyYXNreSBLb2sKQEAgLTc0OSw2ICs3ODIsNyBAQAogUGV0ZXIgQS4gS29yZW4KINCc0LDRgNC6INCa0L7RgNC10L3QsdC10YDQswogVmxhZCBLb3JvbGV2CitTdXN1bXUgS29zaGliYQogSm9zZXBoIEtvc2h5CiBEYW5pZWwgS296YW4KIEplcnp5IEtvemVyYQpAQCAtNzY4LDcgKzgwMiw5IEBACiBBbmRyZXcgS3VjaGxpbmcKIERhdmUgS3VobG1hbgogSm9uIEt1aG4KK1VwZW5kcmEgS3VtYXIKIFRvc2hpbyBLdXJhdG9taQorSWxpYSBLdXJlbmtvdgogVmxhZGltaXIgS3VzaG5pcgogRXJubyBLdXVzZWxhCiBSb3NzIExhZ2Vyd2FsbApAQCAtNzg5LDkgKzgyNSwxMSBAQAogQW1vcyBMYXR0ZWllcgogUGllcnMgTGF1ZGVyCiBCZW4gTGF1cmllCitZb25pIExhdmkKIFNpbW9uIExhdwogSnVsaWEgTGF3YWxsCiBDaHJpcyBMYXdyZW5jZQorTWFyayBMYXdyZW5jZQogQ2hyaXMgTGF3cwogQnJpYW4gTGVhaXIKIE1hdGhpZXUgTGVkdWMtSGFtZWwKQEAgLTgzMyw2ICs4NzEsNyBAQAogU2hhd24gTGlnb2NraQogTWFydGluIExpZ3IKIEdlZGltaW5hcyBMaWt0YXJhcworVml0b3IgZGUgTGltYQogR3JhbnQgTGltYmVyZwogQ2hyaXN0b3BoZXIgTGluZGJsYWQKIFVsZiBBLiBMaW5kZ3JlbgpAQCAtODQ0LDcgKzg4Myw2IEBACiBNaXJrbyBMaXNzCiBOaWNrIExvY2t3b29kCiBTdGVwaGFuaWUgTG9ja3dvb2QKLU1hcnRpbiB2b24gTMO2d2lzCiBIdWdvIExvcGVzIFRhdmFyZXMKIEd1aWxsZXJtbyBMw7NwZXotQW5nbGFkYQogQW5uZSBMb3JkCkBAIC04NTIsNyArODkwLDkgQEAKIEp1c3RpbiBMb3ZlCiBOZWQgSmFja3NvbiBMb3ZlbHkKIFBldGVyIExvdmV0dAorQ2hhbG1lciBMb3dlCiBKYXNvbiBMb3dlCitNYXJ0aW4gdm9uIEzDtndpcwogVG9ueSBMb3duZHMKIFJheSBMb3l6YWdhCiBLYW5nLUhhbyAoS2VubnkpIEx1CkBAIC04OTksMTUgKzkzOSwxOCBAQAogbWF0dGlwCiBNYXJ0aW4gTWF0dXNpYWsKIERpZXRlciBNYXVyZXIKK0xldiBNYXhpbW92CiBEYW5pZWwgTWF5CiBNYWRpc29uIE1heQogTHVjYXMgTWF5c3RyZQogQXJuYXVkIE1hemluCiBQYW0gTWNBJ051bHR5CiBNYXR0IE1jQ2x1cmUKK0phY2sgTWNDcmFja2VuCiBSZWJlY2NhIE1jQ3JlYXJ5CiBLaXJrIE1jRG9uYWxkCiBDaHJpcyBNY0Rvbm91Z2gKK01pY2hhZWwgTWNGYWRkZW4KIEdyZWcgTWNGYXJsYW5lCiBBbGFuIE1jSW50eXJlCiBKZXNzaWNhIE1jS2VsbGFyCkBAIC05NjEsNiArMTAwNCw3IEBACiBQYXVsIE1vb3JlCiBSb3NzIE1vb3JlCiBCZW4gTW9yZ2FuCitFbWlseSBNb3JlaG91c2UKIERlcmVrIE1vcnIKIEphbWVzIEEgTW9ycmlzb24KIE1hcnRpbiBNb3JyaXNvbgpAQCAtOTc5LDYgKzEwMjMsNyBAQAogUi4gRGF2aWQgTXVycmF5CiBNYXR0aSBNw6RraQogSsO2cmcgTcO8bGxlcgorS2F1c2hpayBOCiBEYWxlIE5hZ2F0YQogSm9obiBOYWdsZQogVGFrYWhpcm8gTmFrYXlhbWEKQEAgLTEwMDksMTAgKzEwNTQsMTIgQEAKIE1pa2hhaWwgTm92aWtvdgogTWljaGFsIE5vd2lrb3dza2kKIFN0ZWZmZW4gRGFvZGUgTnVycG1lc28KK1Rob21hcyBOeWJlcmcKIE5pZ2VsIE8nQnJpYW4KIEpvaG4gTydDb25ub3IKIEtldmluIE8nQ29ubm9yCiBUaW0gTydNYWxsZXkKK0RhbiBPJ1JlaWxseQogWm9va28gTydXaGllbGFjcm9ueAogQWFyb24gT2FrbGV5CiBKYW1lcyBPYWtsZXkKQEAgLTEwMzksNiArMTA4Niw4IEBACiBKb29uYXMgUGFhbGFzbWFhCiBNYXJ0aW4gUGFja21hbgogU2hyaXBoYW5pIFBhbGFrb2RldHkKK0p1bGllbiBQYWxhcmQKK0F2aXYgUGFsaXZvZGEKIE9uZHJlaiBQYWxrb3Zza3kKIE1pa2UgUGFsbAogVG9kZCBSLiBQYWxtZXIKQEAgLTEwNTMsMTEgKzExMDIsMTQgQEAKIFBldGVyIFBhcmVudGUKIEFsZXhhbmRyZSBQYXJlbnRlYXUKIERhbiBQYXJpc2llbgorSHllU29vIFBhcmsKIFdpbGxpYW0gUGFyaworQ2xhdWRlIFBhcm96CiBIZWlra2kgUGFydGFuZW4KIEhhcnJpIFBhc2FuZW4KIEdhw6tsIFBhc2dyaW1hdWQKIEFzaGlzaCBOaXRpbiBQYXRpbAorQWxlY3NhbmRydSBQYXRyYXNjdQogUmFuZHkgUGF1c2NoCiBTYW11ZWxlIFBlZHJvbmkKIEp1c3RpbiBQZWVsCkBAIC0xMDY4LDYgKzExMjAsNyBAQAogQm8gUGVuZwogU2FudGlhZ28gUGVyZXPDs24KIEdlb3JnZSBQZXJpc3RlcmFraXMKK1Rob21hcyBQZXJsCiBNYXRoaWV1IFBlcnJlYXVsdAogTWFyayBQZXJyZWdvCiBUcmV2b3IgUGVycmluCkBAIC0xMDg2LDYgKzExMzksNyBAQAogR2F2cmllIFBoaWxpcHNvbgogQWRyaWFuIFBoaWxsaXBzCiBDaHJpc3RvcGhlciBKLiBQaG9lbml4CitKYW1lcyBQaWNrZXJpbmcKIE5lYWxlIFBpY2tldHQKIEppbSBTdC4gUGllcnJlCiBEYW4gUGllcnNvbgpAQCAtMTExNiw2ICsxMTcwLDcgQEAKIEFtcml0IFByZW0KIFBhdWwgUHJlc2NvZAogRG9ub3ZhbiBQcmVzdG9uCitFcmljIFByaWNlCiBQYXVsIFByaWNlCiBJdWxpaWEgUHJvc2t1cm5pYQogRG9yaWFuIFB1bGEKQEAgLTExMzEsNyArMTE4NiwxMCBAQAogUmFtIFJhY2h1bQogSsOpcsO0bWUgUmFkaXgKIEJ1cnRvbiBSYWRvbnMKK0FiaGlsYXNoIFJhagorU2hvcnlhIFJhagogSmVmZiBSYW1uYW5pCitWYXJwdSBSYW50YWxhCiBCcm9kaWUgUmFvCiBTZW5rbyBSYXNpYwogQW50dGkgUmFzaW5lbgpAQCAtMTE3Myw5ICsxMjMxLDEyIEBACiBEYXZpZGUgUml6em8KIEFudGhvbnkgUm9hY2gKIENhcmwgUm9iYmVuCitCZW4gUm9iZXJ0cwogTWFyayBSb2JlcnRzCiBBbmR5IFJvYmluc29uCiBKaW0gUm9iaW5zb24KK1lvbGFuZGEgUm9ibGEKK0RhbmllbCBSb2NjbwogTWFyayBSb2RkeQogS2V2aW4gUm9kZ2VycwogU2VhbiBSb2RtYW4KQEAgLTExODksOCArMTI1MCwxMCBAQAogVGltb3RoeSBSb3Njb2UKIEVyaWsgUm9zZQogTWFyayBSb3NlbWFuCitKb3NoIFJvc2VuYmVyZwogSmltIFJvc2tpbmQKIEJyaWFuIFJvc25lcgorSWduYWNpbyBSb3NzaQogR3VpZG8gdmFuIFJvc3N1bQogSnVzdCB2YW4gUm9zc3VtCiBIdWdvIHZhbiBSb3NzdW0KQEAgLTEyMDcsNiArMTI3MCw3IEBACiBBdWR1biBTLiBSdW5kZQogRXJhbiBSdW5kc3RlaW4KIFJhdWxpIFJ1b2hvbmVuCitMYXVyYSBSdXBwcmVjaHQKIEplZmYgUnVzaAogU2FtIFJ1c2hpbmcKIE1hcmsgUnVzc2VsbApAQCAtMTIyMSw2ICsxMjg1LDcgQEAKIFN1bWFuIFNhaGEKIEhhamltZSBTYWl0b3UKIEdlb3JnZSBTYWtraXMKK1ZpY3RvciBTYWxnYWRvCiBSaWNoIFNhbHoKIEtldmluIFNhbWJvcm4KIEFkcmlhbiBTYW1wc29uCkBAIC0xMjQ5LDYgKzEzMTQsNyBAQAogTWljaGFlbCBTY2huZWlkZXIKIFBldGVyIFNjaG5laWRlci1LYW1wCiBBcnZpbiBTY2huZWxsCitOb2ZhciBTY2huaWRlcgogU2NvdHQgU2NocmFtCiBSb2JpbiBTY2hyZWliZXIKIENoYWQgSi4gU2Nocm9lZGVyCkBAIC0xMjczLDExICsxMzM5LDEzIEBACiBEZW5pcyBTZXZlcnNvbgogSWFuIFNleWVyCiBEbWl0cnkgU2hhY2huZXYKK0FuaXNoIFNoYWgKIERhbmllbCBTaGFoYWYKIE1hcmsgU2hhbm5vbgogSGEgU2hhbwogUmljaGFyZCBTaGFwaXJvCiBWYXJ1biBTaGFybWEKK0RhbmllbCBTaGF1bG92CiBWbGFkIFNoY2hlcmJpbmEKIEp1c3RpbiBTaGVlaHkKIENoYXJsaWUgU2hlcGhlcmQKQEAgLTEzMjUsNyArMTM5Myw5IEBACiBQYXVsIFNva29sb3Zza3kKIEV2Z2VueSBTb2xvZ3Vib3YKIENvZHkgU29tZXJ2aWxsZQorQW50aG9ueSBTb3R0aWxlCiBFZG9hcmRvIFNwYWRvbGluaQorR2VvZmZyZXkgU3BlYXIKIENsYXkgU3BlbmNlCiBTdGVmYW4gU3BlcmxpbmcKIE5pY2hvbGFzIFNwaWVzCkBAIC0xMzcyLDYgKzE0NDIsNyBAQAogUMOpdGVyIFN6YWLDswogSm9obiBTemFrbWVpc3RlcgogQW1pciBTemVrZWx5CitNYWNpZWogU3p1bGlrCiBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpcwogSGlkZWFraSBUYWthaGFzaGkKIFRha2FzZSBBcmloaXJvCkBAIC0xMzg1LDYgKzE0NTYsNyBAQAogQW15IFRheWxvcgogTW9udHkgVGF5bG9yCiBBbmF0b2x5IFRlY2h0b25paworR3VzdGF2byBUZW1wbGUKIE1pa2hhaWwgVGVyZWtob3YKIFZpY3RvciBUZXJyw7NuCiBSaWNoYXJkIE0uIFRldwpAQCAtMTQxOCw2ICsxNDkwLDcgQEAKIE5hdGhhbiBUcmFwdXp6YW5vCiBMYXVyZW5jZSBUcmF0dAogQWxiZXJ0byBUcmV2aW5vCitNYXlhbmsgVHJpcGF0aGkKIE1hdHRoaWFzIFRyb2ZmYWVzCiBUb20gVHJvbWV5CiBKb2huIFRyb21wCkBAIC0xNDQwLDkgKzE1MTMsMTEgQEAKIERhbmllbCBVcmJhbgogTWljaGFlbCBVcm1hbgogSGVjdG9yIFVydHViaWEKK0x1a2FzIFZhY2VrCiBWaWxsZSBWYWluaW8KIEFuZGkgVmFqZGEKIENhc2UgVmFuIEhvcnNlbgorSm9obiBNYXJrIFZhbmRlbmJlcmcKIEt5bGUgVmFuZGVyQmVlawogQW5kcmV3IFZhbnQKIEF0dWwgVmFybWEKQEAgLTE0NTAsMTEgKzE1MjUsMTMgQEAKIFNlYmFzdGlhbiBPcnRpeiBWYXNxdWV6CiBBbGV4YW5kcmUgVmFzc2Fsb3R0aQogTmFkZWVtIFZhd2RhCitTeWUgdmFuIGRlciBWZWVuCiBGcmFuayBWZXJjcnVlc3NlCiBNaWtlIFZlcmRvbmUKIEphYXAgVmVybWV1bGVuCiBOaWtpdGEgVmV0b3Noa2luCiBBbCBWZXp6YQorUGV0ciBWaWN0b3JpbgogSmFjcXVlcyBBLiBWaWRyaW5lCiBKb2huIFZpZWdhCiBEaW5vIFZpZWhsYW5kCkBAIC0xNDY0LDExICsxNTQxLDE0IEBACiBQYXVsaSBWaXJ0YW5lbgogRnJhbmsgVmlzc2VyCiBKb2hhbm5lcyBWb2dlbAorTWljaGFlbCBWb2d0CitSYWR1IFZvaWNpbGFzCiBBbGV4IFZvbGtvdgogR3VpZG8gVnJhbmtlbgogTWFydGlqbiBWcmllcwogU2pvZXJkIGRlIFZyaWVzCiBKb25hcyBXYWduZXIKK0RhbmllbCBXYWduZXItSGFsbAogTmlraSBXLiBXYWliZWwKIFdvanRlayBXYWxjemFrCiBDaGFybGVzIFdhbGRtYW4KQEAgLTE0ODgsNiArMTU2OCw3IEBACiBEYXZpZCBXYXRzb24KIEFhcm9uIFdhdHRlcnMKIEhlbnJpayBXZWJlcgorTGVvbiBXZWJlcgogQ29ycmFuIFdlYnN0ZXIKIEdseW4gV2Vic3RlcgogUGhpbCBXZWJzdGVyCkBAIC0xNTA3LDYgKzE1ODgsNyBAQAogR2VycnkgV2llbmVyCiBGcmFuayBXaWVyemJpY2tpCiBTYW50b3NvIFdpamF5YQorQ2hyaXMgV2lsY294CiBCcnljZSAiWm9va28iIFdpbGNveC1PJ0hlYXJuCiBUaW1vdGh5IFdpbGQKIEpha3ViIFdpbGsKQEAgLTE1MTcsNiArMTU5OSw4IEBACiBDYXJvbCBXaWxsaW5nCiBTdGV2ZW4gV2lsbGlzCiBGcmFuayBXaWxsaXNvbgorQWxleCBXaWxsbWVyCitEYXZpZCBXaWxzb24KIEdlb2ZmIFdpbHNvbgogR3JlZyBWLiBXaWxzb24KIEogRGVyZWsgV2lsc29uCkBAIC0xNTQyLDExICsxNjI2LDE0IEBACiBEYXJyZW4gV29ycmFsbAogVGhvbWFzIFdvdXRlcnMKIERhbmllbCBXb3puaWFrCitXZWkgV3UKIEhlaWtvIFd1bmRyYW0KIERvdWcgV3lhdHQKIFhpYW5nIFpoYW5nCiBSb2JlcnQgWGlhbwogRmxvcmVudCBYaWNsdW5hCitBcm5vbiBZYWFyaQorQWxha3NoZW5kcmEgWWFkYXYKIEhpcm9rYXp1IFlhbWFtb3RvCiBLYS1QaW5nIFllZQogSmFzb24gWWVvCkBAIC0xNTcxLDcgKzE2NTgsOSBAQAogQ2hlbmcgWmhhbmcKIEthaSBaaHUKIFRhcmVrIFppYWTDqQorSmVsbGUgWmlqbHN0cmEKIEdlbm5hZGl5IFpsb2JpbgogRG91ZyBab25na2VyCiBQZXRlciDDhXN0cmFuZAogZXZpbHplcm8KK0NoaSBIc3VhbiBZZW4KZGlmZiAtLWdpdCBhL01pc2MvSElTVE9SWSBiL01pc2MvSElTVE9SWQppbmRleCBhOWUyOTEwLi4wNmViOTc5IDEwMDY0NAotLS0gYS9NaXNjL0hJU1RPUlkKKysrIGIvTWlzYy9ISVNUT1JZCkBAIC0xOCwxMyArMTgsMTMgQEAKIAogLSBJc3N1ZSAjMTYwNDY6IEZpeCBsb2FkaW5nIHNvdXJjZWxlc3MgbGVnYWN5IC5weW8gZmlsZXMuCiAKLS0gSXNzdWUgIzE2MDYwOiBGaXggcmVmY291bnRpbmcgYnVnIHdoZW4gX190cnVuY19fIHJldHVybnMgYW4gb2JqZWN0Ci0gIHdob3NlIF9faW50X18gZ2l2ZXMgYSBub24taW50ZWdlci4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCistIElzc3VlICMxNjA2MDogRml4IHJlZmNvdW50aW5nIGJ1ZyB3aGVuIGBfX3RydW5jX18oKWAgcmV0dXJucyBhbiBvYmplY3Qgd2hvc2UKKyAgYF9faW50X18oKWAgZ2l2ZXMgYSBub24taW50ZWdlci4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKIEV4dGVuc2lvbiBNb2R1bGVzCiAtLS0tLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICMxNjAxMjogRml4IGEgcmVncmVzc2lvbiBpbiBweWV4cGF0LiBUaGUgcGFyc2VyJ3MgVXNlRm9yZWlnbkRURCgpCistIElzc3VlICMxNjAxMjogRml4IGEgcmVncmVzc2lvbiBpbiBweWV4cGF0LiBUaGUgcGFyc2VyJ3MgYFVzZUZvcmVpZ25EVEQoKWAKICAgbWV0aG9kIGRvZXNuJ3QgcmVxdWlyZSBhbiBhcmd1bWVudCBhZ2Fpbi4KIAogCkBAIC0zNiwyNiArMzYsMjYgQEAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICMxNTkwMDogRml4IHJlZmVyZW5jZSBsZWFrIGluIFB5VW5pY29kZV9UcmFuc2xhdGVDaGFybWFwKCkuCistIElzc3VlICMxNTkwMDogRml4IHJlZmVyZW5jZSBsZWFrIGluIGBQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcCgpYC4KIAogLSBJc3N1ZSAjMTU5MjY6IEZpeCBjcmFzaCBhZnRlciBtdWx0aXBsZSByZWluaXRpYWxpemF0aW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuCiAKIC0gSXNzdWUgIzE1ODk1OiBGaXggRklMRSBwb2ludGVyIGxlYWsgaW4gb25lIGVycm9yIGJyYW5jaCBvZgotICBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncygpIHdoZW4gZmlsZW5hbWUgcG9pbnRzIHRvIGEgcHljL3B5byBmaWxlLCBjbG9zZWl0Ci0gIGlzIGZhbHNlIGFuIGFuZCBzZXRfbWFpbl9sb2FkZXIoKSBmYWlscy4KKyAgYFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKClgIHdoZW4gZmlsZW5hbWUgcG9pbnRzIHRvIGEgcHljL3B5byBmaWxlLCBjbG9zZWl0IGlzCisgIGZhbHNlIGFuIGFuZCBzZXRfbWFpbl9sb2FkZXIoKSBmYWlscy4KIAogLSBGaXhlcyBmb3IgYSBmZXcgY3Jhc2ggYW5kIG1lbW9yeSBsZWFrIHJlZ3Jlc3Npb25zIGZvdW5kIGJ5IENvdmVyaXR5LgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE1ODgyOiBDaGFuZ2UgX2RlY2ltYWwgdG8gYWNjZXB0IGFueSBjb2VmZmljaWVudCB0dXBsZSB3aGVuCi0gIGNvbnN0cnVjdGluZyBpbmZpbml0aWVzLiBUaGlzIGlzIGRvbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0gIHdpdGggZGVjaW1hbC5weTogSW5maW5pdHkgY29lZmZpY2llbnRzIGFyZSB1bmRlZmluZWQgaW4gX2RlY2ltYWwKLSAgKGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWNhdGlvbikuCistIElzc3VlICMxNTg4MjogQ2hhbmdlIGBfZGVjaW1hbGAgdG8gYWNjZXB0IGFueSBjb2VmZmljaWVudCB0dXBsZSB3aGVuCisgIGNvbnN0cnVjdGluZyBpbmZpbml0aWVzLiBUaGlzIGlzIGRvbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGgKKyAgZGVjaW1hbC5weTogSW5maW5pdHkgY29lZmZpY2llbnRzIGFyZSB1bmRlZmluZWQgaW4gX2RlY2ltYWwgKGluIGFjY29yZGFuY2UKKyAgd2l0aCB0aGUgc3BlY2lmaWNhdGlvbikuCiAKLS0gSXNzdWUgIzE1OTI1OiBGaXggYSByZWdyZXNzaW9uIGluIGVtYWlsLnV0aWwgd2hlcmUgdGhlIHBhcnNlZGF0ZSgpIGFuZAotICBwYXJzZWRhdGVfdHooKSBmdW5jdGlvbnMgZGlkIG5vdCByZXR1cm4gTm9uZSBhbnltb3JlIHdoZW4gdGhlIGFyZ3VtZW50IGNvdWxkCistIElzc3VlICMxNTkyNTogRml4IGEgcmVncmVzc2lvbiBpbiBgZW1haWwudXRpbGAgd2hlcmUgdGhlIGBwYXJzZWRhdGUoKWAgYW5kCisgIGBwYXJzZWRhdGVfdHooKWAgZnVuY3Rpb25zIGRpZCBub3QgcmV0dXJuIE5vbmUgYW55bW9yZSB3aGVuIHRoZSBhcmd1bWVudCBjb3VsZAogICBub3QgYmUgcGFyc2VkLgogCiBFeHRlbnNpb24gTW9kdWxlcwpAQCAtNjcsNyArNjcsNyBAQAogLSBJc3N1ZSAjMTU5Nzc6IEZpeCBtZW1vcnkgbGVhayBpbiBNb2R1bGVzL19zc2wuYyB3aGVuIHRoZSBmdW5jdGlvbgogICBfc2V0X25wbl9wcm90b2NvbHMoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRoYW5rcyB0byBEYW5pZWwgU29tbWVybWFubi4KIAotLSBJc3N1ZSAjMTU5Njk6IGZhdWx0aGFuZGxlciBtb2R1bGU6IHJlbmFtZSBkdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bworLSBJc3N1ZSAjMTU5Njk6IGBmYXVsdGhhbmRsZXJgIG1vZHVsZTogcmVuYW1lIGR1bXBfdHJhY2ViYWNrc19sYXRlcigpIHRvCiAgIGR1bXBfdHJhY2ViYWNrX2xhdGVyKCkgYW5kIGNhbmNlbF9kdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bwogICBjYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKS4KIApAQCAtODMsMzUgKzgzLDM3IEBACiAtLS0tLS0tLS0tLS0tLS0tLQogCiAtIElzc3VlICMxMzk5MjogVGhlIHRyYXNoY2FuIG1lY2hhbmlzbSBpcyBub3cgdGhyZWFkLXNhZmUuICBUaGlzIGVsaW1pbmF0ZXMKLSAgc3BvcmFkaWMgY3Jhc2hlcyBpbiBtdWx0aS10aHJlYWQgcHJvZ3JhbXMgd2hlbiBzZXZlcmFsIGxvbmcgZGVhbGxvY2F0b3IKLSAgY2hhaW5zIHJhbiBjb25jdXJyZW50bHkgYW5kIGludm9sdmVkIHN1YmNsYXNzZXMgb2YgYnVpbHQtaW4gY29udGFpbmVyCi0gIHR5cGVzLgorICBzcG9yYWRpYyBjcmFzaGVzIGluIG11bHRpLXRocmVhZCBwcm9ncmFtcyB3aGVuIHNldmVyYWwgbG9uZyBkZWFsbG9jYXRvciBjaGFpbnMKKyAgcmFuIGNvbmN1cnJlbnRseSBhbmQgaW52b2x2ZWQgc3ViY2xhc3NlcyBvZiBidWlsdC1pbiBjb250YWluZXIgdHlwZXMuCiAKLS0gSXNzdWUgIzE1Nzg0OiBNb2RpZnkgT1NFcnJvci5fX3N0cl9fKCkgdG8gYmV0dGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAgZXJybm8gZXJyb3IgbnVtYmVycyBhbmQgV2luZG93cyBlcnJvciBudW1iZXJzLgorLSBJc3N1ZSAjMTU3ODQ6IE1vZGlmeSBgT1NFcnJvcmAuX19zdHJfXygpIHRvIGJldHRlciBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVycm5vCisgIGVycm9yIG51bWJlcnMgYW5kIFdpbmRvd3MgZXJyb3IgbnVtYmVycy4KIAogLSBJc3N1ZSAjMTU3ODE6IEZpeCB0d28gc21hbGwgcmFjZSBjb25kaXRpb25zIGluIGltcG9ydCdzIG1vZHVsZSBsb2NraW5nLgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE1ODQ3OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlLCB3aGljaCBkaWQgbm90IGFjY2VwdCB0dXBsZXMKLSAgYXMgYXJndW1lbnQgbGlzdHMgYW55bW9yZS4KKy0gSXNzdWUgIzE3MTU4OiBBZGQgJ3N5bWJvbHMnIHRvIGhlbHAoKSB3ZWxjb21lIG1lc3NhZ2U7IGNsYXJpZnkKKyAgJ21vZHVsZXMgc3BhbScgbWVzc2FnZXMuCiAKLS0gSXNzdWUgIzE1ODI4OiBSZXN0b3JlIHN1cHBvcnQgZm9yIEMgZXh0ZW5zaW9ucyBpbiBpbXAubG9hZF9tb2R1bGUoKS4KKy0gSXNzdWUgIzE1ODQ3OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlLCB3aGljaCBkaWQgbm90IGFjY2VwdCB0dXBsZXMgYXMKKyAgYXJndW1lbnQgbGlzdHMgYW55bW9yZS4KIAotLSBJc3N1ZSAjMTUzNDA6IEZpeCBpbXBvcnRpbmcgdGhlIHJhbmRvbSBtb2R1bGUgd2hlbiAvZGV2L3VyYW5kb20gY2Fubm90Ci0gIGJlIG9wZW5lZC4gIFRoaXMgd2FzIGEgcmVncmVzc2lvbiBjYXVzZWQgYnkgdGhlIGhhc2ggcmFuZG9taXphdGlvbiBwYXRjaC4KKy0gSXNzdWUgIzE1ODI4OiBSZXN0b3JlIHN1cHBvcnQgZm9yIEMgZXh0ZW5zaW9ucyBpbiBgaW1wLmxvYWRfbW9kdWxlKClgLgogCi0tIElzc3VlICMxMDY1MDogRGVwcmVjYXRlIHRoZSB3YXRjaGV4cCBwYXJhbWV0ZXIgb2YgdGhlIERlY2ltYWwucXVhbnRpemUoKQorLSBJc3N1ZSAjMTUzNDA6IEZpeCBpbXBvcnRpbmcgdGhlIHJhbmRvbSBtb2R1bGUgd2hlbiBgYC9kZXYvdXJhbmRvbWBgIGNhbm5vdCBiZQorICBvcGVuZWQuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IHRoZSBoYXNoIHJhbmRvbWl6YXRpb24gcGF0Y2guCisKKy0gSXNzdWUgIzEwNjUwOiBEZXByZWNhdGUgdGhlIHdhdGNoZXhwIHBhcmFtZXRlciBvZiB0aGUgYERlY2ltYWwucXVhbnRpemUoKWAKICAgbWV0aG9kLgogCi0tIElzc3VlICMxNTc4NTogTW9kaWZ5IHdpbmRvdy5nZXRfd2NoKCkgQVBJIG9mIHRoZSBjdXJzZXMgbW9kdWxlOiByZXR1cm4KLSAgYSBjaGFyYWN0ZXIgZm9yIG1vc3Qga2V5cywgYW5kIGFuIGludGVnZXIgZm9yIHNwZWNpYWwga2V5cywgaW5zdGVhZCBvZgotICBhbHdheXMgcmV0dXJuaW5nIGFuIGludGVnZXIuIFNvIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBzcGVjaWFsCi0gIGtleXMgbGlrZSBrZXlwYWQga2V5cy4KKy0gSXNzdWUgIzE1Nzg1OiBNb2RpZnkgYHdpbmRvdy5nZXRfd2NoKClgIEFQSSBvZiB0aGUgY3Vyc2VzIG1vZHVsZTogcmV0dXJuIGEKKyAgY2hhcmFjdGVyIGZvciBtb3N0IGtleXMsIGFuZCBhbiBpbnRlZ2VyIGZvciBzcGVjaWFsIGtleXMsIGluc3RlYWQgb2YgYWx3YXlzCisgIHJldHVybmluZyBhbiBpbnRlZ2VyLiBTbyBpdCBpcyBub3cgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbCBrZXlzIGxpa2UKKyAga2V5cGFkIGtleXMuCiAKLS0gSXNzdWUgIzE0MjIzOiBGaXggd2luZG93LmFkZGNoKCkgb2YgdGhlIGN1cnNlcyBtb2R1bGUgZm9yIHNwZWNpYWwgY2hhcmFjdGVycworLSBJc3N1ZSAjMTQyMjM6IEZpeCBgd2luZG93LmFkZGNoKClgIG9mIHRoZSBjdXJzZXMgbW9kdWxlIGZvciBzcGVjaWFsIGNoYXJhY3RlcnMKICAgbGlrZSBjdXJzZXMuQUNTX0hMSU5FOiB0aGUgUHl0aG9uIGZ1bmN0aW9uIGFkZGNoKGludCkgYW5kIGFkZGNoKGJ5dGVzKSBpcyBub3cKICAgY2FsbGluZyB0aGUgQyBmdW5jdGlvbiB3YWRkY2goKS9tdndhZGRjaCgpIChhcyBpdCB3YXMgZG9uZSBpbiBQeXRob24gMy4yKSwKICAgaW5zdGVhZCBvZiB3YWRkX3djaCgpL212d2FkZF93Y2goKS4gVGhlIFB5dGhvbiBmdW5jdGlvbiBhZGRjaChzdHIpIGlzIHN0aWxsCkBAIC0xMjcsMTAgKzEyOSwxMCBAQAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICMxNTgxNDogVGhlIG1lbW9yeXZpZXcgZW5oYW5jZW1lbnRzIGluIDMuMy4wIGFjY2lkZW50YWxseSBwZXJtaXR0ZWQKLSAgdGhlIGhhc2hpbmcgb2YgbXVsdGktZGltZW5zaW9uYWwgbWVtb3J2aWV3cyBhbmQgbWVtb3J5dmlld3Mgd2l0aCBtdWx0aS1ieXRlCi0gIGl0ZW0gZm9ybWF0cy4gVGhlIGludGVuZGVkIHJlc3RyaWN0aW9ucyBoYXZlIG5vdyBiZWVuIGRvY3VtZW50ZWQgLSB0aGV5Ci0gIHdpbGwgYmUgY29ycmVjdGx5IGVuZm9yY2VkIGluIDMuMy4xCistIElzc3VlICMxNTgxNDogVGhlIG1lbW9yeXZpZXcgZW5oYW5jZW1lbnRzIGluIDMuMy4wIGFjY2lkZW50YWxseSBwZXJtaXR0ZWQgdGhlCisgIGhhc2hpbmcgb2YgbXVsdGktZGltZW5zaW9uYWwgbWVtb3J2aWV3cyBhbmQgbWVtb3J5dmlld3Mgd2l0aCBtdWx0aS1ieXRlIGl0ZW0KKyAgZm9ybWF0cy4gVGhlIGludGVuZGVkIHJlc3RyaWN0aW9ucyBoYXZlIG5vdyBiZWVuIGRvY3VtZW50ZWQgLSB0aGV5IHdpbGwgYmUKKyAgY29ycmVjdGx5IGVuZm9yY2VkIGluIDMuMy4xLgogCiAKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIFJlbGVhc2UgQ2FuZGlkYXRlIDE/CkBAIC0xNDQsMTMxICsxNDYsMTIzIEBACiAtIElzc3VlICMxNTU3MzogbWVtb3J5dmlldyBjb21wYXJpc29ucyBhcmUgbm93IHBlcmZvcm1lZCBieSB2YWx1ZSB3aXRoIGZ1bGwKICAgc3VwcG9ydCBmb3IgYW55IHZhbGlkIHN0cnVjdCBtb2R1bGUgZm9ybWF0IGRlZmluaXRpb24uCiAKLS0gSXNzdWUgIzE1MzE2OiBXaGVuIGFuIGl0ZW0gaW4gdGhlIGZyb21saXN0IGZvciBfX2ltcG9ydF9fIGRvZXNuJ3QgZXhpc3QsCistIElzc3VlICMxNTMxNjogV2hlbiBhbiBpdGVtIGluIHRoZSBmcm9tbGlzdCBmb3IgYF9faW1wb3J0X18oKWAgZG9lc24ndCBleGlzdCwKICAgZG9uJ3QgcmFpc2UgYW4gZXJyb3IsIGJ1dCBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGFzIHBhcnQgb2YgYW4gaW1wb3J0IGRvCiAgIGxldCB0aGF0IHByb3BhZ2F0ZS4KIAotLSBJc3N1ZSAjMTU3Nzg6IGVuc3VyZSB0aGF0IHN0cihJbXBvcnRFcnJvcihtc2cpKSByZXR1cm5zIGEgc3RyCi0gIGV2ZW4gd2hlbiBtc2cgaXNuJ3QgYSBzdHIuCistIElzc3VlICMxNTc3ODogRW5zdXJlIHRoYXQgYGBzdHIoSW1wb3J0RXJyb3IobXNnKSlgYCByZXR1cm5zIGEgc3RyIGV2ZW4gd2hlbgorICBtc2cgaXNuJ3QgYSBzdHIuCiAKLS0gSXNzdWUgIzIwNTE6IFNvdXJjZSBmaWxlIHBlcm1pc3Npb24gYml0cyBhcmUgb25jZSBhZ2FpbiBjb3JyZWN0bHkKLSAgY29waWVkIHRvIHRoZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZS4gKFRoZSBtaWdyYXRpb24gdG8gaW1wb3J0bGliCi0gIHJlaW50cm9kdWNlZCB0aGlzIHByb2JsZW0gYmVjYXVzZSB0aGVzZSB3YXMgbm8gcmVncmVzc2lvbiB0ZXN0LiBBIHRlc3QKLSAgaGFzIGJlZW4gYWRkZWQgYXMgcGFydCBvZiB0aGlzIHBhdGNoKQorLSBJc3N1ZSAjMjA1MTogU291cmNlIGZpbGUgcGVybWlzc2lvbiBiaXRzIGFyZSBvbmNlIGFnYWluIGNvcnJlY3RseSBjb3BpZWQgdG8KKyAgdGhlIGNhY2hlZCBieXRlY29kZSBmaWxlLiAoVGhlIG1pZ3JhdGlvbiB0byBpbXBvcnRsaWIgcmVpbnRyb2R1Y2VkIHRoaXMKKyAgcHJvYmxlbSBiZWNhdXNlIHRoZXNlIHdhcyBubyByZWdyZXNzaW9uIHRlc3QuIEEgdGVzdCBoYXMgYmVlbiBhZGRlZCBhcyBwYXJ0IG9mCisgIHRoaXMgcGF0Y2gpCiAKLS0gSXNzdWUgIzE1NzYxOiBGaXggY3Jhc2ggd2hlbiBQWVRIT05FWEVDVVRBQkxFIGlzIHNldCBvbiBNYWMgT1MgWC4KKy0gSXNzdWUgIzE1NzYxOiBGaXggY3Jhc2ggd2hlbiBgYFBZVEhPTkVYRUNVVEFCTEVgYCBpcyBzZXQgb24gTWFjIE9TIFguCiAKLS0gSXNzdWUgIzE1NzI2OiBGaXggaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZyBpbiBQeVN0YXRlX0ZpbmRNb2R1bGUuCi0gIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKy0gSXNzdWUgIzE1NzI2OiBGaXggaW5jb3JyZWN0IGJvdW5kcyBjaGVja2luZyBpbiBQeVN0YXRlX0ZpbmRNb2R1bGUuICBQYXRjaCBieQorICBSb2JpbiBTY2hyZWliZXIuCiAKLS0gSXNzdWUgIzE1NjA0OiBVcGRhdGUgdXNlcyBvZiBQeU9iamVjdF9Jc1RydWUoKSB0byBjaGVjayBmb3IgYW5kIGhhbmRsZQorLSBJc3N1ZSAjMTU2MDQ6IFVwZGF0ZSB1c2VzIG9mIGBQeU9iamVjdF9Jc1RydWUoKWAgdG8gY2hlY2sgZm9yIGFuZCBoYW5kbGUKICAgZXJyb3JzIGNvcnJlY3RseS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKLS0gSXNzdWUgIzE0ODQ2OiBpbXBvcnRsaWIuRmlsZUZpbmRlciBub3cgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUKLSAgZGlyZWN0b3J5IGJlaW5nIHNlYXJjaGVkIGlzIHJlbW92ZWQgYWZ0ZXIgYSBwcmV2aW91cyBpbXBvcnQgYXR0ZW1wdAorLSBJc3N1ZSAjMTQ4NDY6IGBpbXBvcnRsaWIuRmlsZUZpbmRlcmAgbm93IGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIGRpcmVjdG9yeQorICBiZWluZyBzZWFyY2hlZCBpcyByZW1vdmVkIGFmdGVyIGEgcHJldmlvdXMgaW1wb3J0IGF0dGVtcHQuCiAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMTMzNzA6IEVuc3VyZSB0aGF0IGN0eXBlcyB3b3JrcyBvbiBNYWMgT1MgWCB3aGVuIFB5dGhvbiBpcwotICBjb21waWxlZCB1c2luZyB0aGUgY2xhbmcgY29tcGlsZXIKKy0gSXNzdWUgIzEzMzcwOiBFbnN1cmUgdGhhdCBjdHlwZXMgd29ya3Mgb24gTWFjIE9TIFggd2hlbiBQeXRob24gaXMgY29tcGlsZWQKKyAgdXNpbmcgdGhlIGNsYW5nIGNvbXBpbGVyLgogCi0tIElzc3VlICMxMzA3MjogVGhlIGFycmF5IG1vZHVsZSdzICd1JyBmb3JtYXQgY29kZSBpcyBub3cgZGVwcmVjYXRlZCBhbmQKLSAgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiA0LjAuCistIElzc3VlICMxMzA3MjogVGhlIGFycmF5IG1vZHVsZSdzICd1JyBmb3JtYXQgY29kZSBpcyBub3cgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQorICByZW1vdmVkIGluIFB5dGhvbiA0LjAuCiAKIC0gSXNzdWUgIzE1NTQ0OiBGaXggRGVjaW1hbC5fX2Zsb2F0X18gdG8gd29yayB3aXRoIHBheWxvYWQtY2FycnlpbmcgTmFOcy4KIAotLSBJc3N1ZSAjMTUyNDk6IEJ5dGVzR2VuZXJhdG9yIG5vdyBjb3JyZWN0bHkgbWFuZ2xlcyBGcm9tIGxpbmVzICh3aGVuCistIElzc3VlICMxNTc3NjogQWxsb3cgcHl2ZW52IHRvIHdvcmsgaW4gZXhpc3RpbmcgZGlyZWN0b3J5IHdpdGggLS1jbGVhbi4KKworLSBJc3N1ZSAjMTUyNDk6IGVtYWlsJ3MgQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBtYW5nbGVzIEZyb20gbGluZXMgKHdoZW4KICAgcmVxdWVzdGVkKSBldmVuIGlmIHRoZSBib2R5IGNvbnRhaW5zIHVuZGVjb2RhYmxlIGJ5dGVzLgogCiAtIElzc3VlICMxNTc3NzogRml4IGEgcmVmbGVhayBpbiBfcG9zaXhzdWJwcm9jZXNzLgogCi0tIElzc3VlICMjNjY1MTk0OiBVcGRhdGUgZW1haWwudXRpbHMubG9jYWx0aW1lIHRvIHVzZSBkYXRldGltZS5hc3RpbWV6b25lIGFuZAorLSBJc3N1ZSAjNjY1MTk0OiBVcGRhdGUgYGVtYWlsLnV0aWxzLmxvY2FsdGltZWAgdG8gdXNlIGRhdGV0aW1lLmFzdGltZXpvbmUgYW5kCiAgIGNvcnJlY3RseSBoYW5kbGUgaGlzdG9yaWMgY2hhbmdlcyBpbiBVVEMgb2Zmc2V0cy4KIAogLSBJc3N1ZSAjMTUxOTk6IEZpeCBKYXZhU2NyaXB0J3MgZGVmYXVsdCBNSU1FIHR5cGUgdG8gYXBwbGljYXRpb24vamF2YXNjcmlwdC4KICAgUGF0Y2ggYnkgQm9odXNsYXYgS2FicmRhLgogCi0tIElzc3VlICMxMjY0MzogY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUgbm93IHJlc3BlY3RzIHN5cy5leGNlcHRob29rIHdoZW4KLSAgZGlzcGxheWluZyBleGNlcHRpb25zIChQYXRjaCBieSBBYXJvbiBJbGVzKQorLSBJc3N1ZSAjMTI2NDM6IGBjb2RlLkludGVyYWN0aXZlQ29uc29sZWAgbm93IHJlc3BlY3RzIGBzeXMuZXhjZXB0aG9va2Agd2hlbgorICBkaXNwbGF5aW5nIGV4Y2VwdGlvbnMuICBQYXRjaCBieSBBYXJvbiBJbGVzLgogCi0tIElzc3VlICMxMzU3OTogc3RyaW5nLkZvcm1hdHRlciBub3cgdW5kZXJzdGFuZHMgdGhlICdhJyBjb252ZXJzaW9uIHNwZWNpZmllci4KKy0gSXNzdWUgIzEzNTc5OiBgc3RyaW5nLkZvcm1hdHRlcmAgbm93IHVuZGVyc3RhbmRzIHRoZSAnYScgY29udmVyc2lvbiBzcGVjaWZpZXIuCiAKLS0gSXNzdWUgIzE1NzkzOiBTdGFjayBjb3JydXB0aW9uIGluIHNzbC5SQU5EX2VnZCgpLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTU5NTogRml4IHN1YnByb2Nlc3MuUG9wZW4odW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCi0gIGZvciBjZXJ0YWluIGxvY2FsZXMgKHV0Zi0xNiBhbmQgdXRmLTMyIGZhbWlseSkuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorLSBJc3N1ZSAjMTU1OTU6IEZpeCBgYHN1YnByb2Nlc3MuUG9wZW4odW5pdmVyc2FsX25ld2xpbmVzPVRydWUpYGAgZm9yIGNlcnRhaW4KKyAgbG9jYWxlcyAodXRmLTE2IGFuZCB1dGYtMzIgZmFtaWx5KS4gUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCiAKIC0gSXNzdWUgIzE1NDc3OiBJbiBjbWF0aCBhbmQgbWF0aCBtb2R1bGVzLCBhZGQgd29ya2Fyb3VuZCBmb3IgcGxhdGZvcm1zIHdob3NlCiAgIHN5c3RlbS1zdXBwbGllZCBsb2cxcCBmdW5jdGlvbiBkb2Vzbid0IHJlc3BlY3Qgc2lnbnMgb2YgemVyb3MuCiAKLS0gSXNzdWUgIzE1NzE1OiBpbXBvcnRsaWIuX19pbXBvcnRfXygpIHdpbGwgc2lsZW5jZSBhbiBJbXBvcnRFcnJvciB3aGVuIHRoZSB1c2UKLSAgb2YgZnJvbWxpc3QgbGVhZHMgdG8gYSBmYWlsZWQgaW1wb3J0LgorLSBJc3N1ZSAjMTU3MTU6IGBpbXBvcnRsaWIuX19pbXBvcnRfXygpYCB3aWxsIHNpbGVuY2UgYW4gSW1wb3J0RXJyb3Igd2hlbiB0aGUKKyAgdXNlIG9mIGZyb21saXN0IGxlYWRzIHRvIGEgZmFpbGVkIGltcG9ydC4KIAotLSBJc3N1ZSAjMTQ2Njk6IEZpeCBwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBhbmQgc29ja2V0cyBvbiBNYWNPU1gKLSAgYnkgc2VuZGluZy9yZWNlaXZpbmcgYW4gYWNrbm93bGVkZ21lbnQgYWZ0ZXIgZmlsZSBkZXNjcmlwdG9yIHRyYW5zZmVyLgotICBUZXN0UGlja2xpbmdDb25uZWN0aW9uIGhhcyBiZWVuIHJlZW5hYmxlZCBmb3IgTWFjT1NYLgorLSBJc3N1ZSAjMTQ2Njk6IEZpeCBwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBhbmQgc29ja2V0cyBvbiBNYWMgT1MgWCBieQorICBzZW5kaW5nL3JlY2VpdmluZyBhbiBhY2tub3dsZWRnbWVudCBhZnRlciBmaWxlIGRlc2NyaXB0b3IgdHJhbnNmZXIuCisgIFRlc3RQaWNrbGluZ0Nvbm5lY3Rpb24gaGFzIGJlZW4gcmVlbmFibGVkIGZvciBNYWMgT1MgWC4KIAogLSBJc3N1ZSAjMTEwNjI6IEZpeCBhZGRpbmcgYSBtZXNzYWdlIGZyb20gZmlsZSB0byBCYWJ5bCBtYWlsYm94LgogCi0tIElzc3VlICMxNTY0NjogUHJldmVudCBlcXVpdmFsZW50IG9mIGEgZm9yayBib21iIHdoZW4gdXNpbmcKLSAgbXVsdGlwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgd2l0aG91dCB0aGUgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyciCi0gIGlkaW9tLgorLSBJc3N1ZSAjMTU2NDY6IFByZXZlbnQgZXF1aXZhbGVudCBvZiBhIGZvcmsgYm9tYiB3aGVuIHVzaW5nIGBtdWx0aXByb2Nlc3NpbmdgCisgIG9uIFdpbmRvd3Mgd2l0aG91dCB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgaWRpb20uCiAKLS0gSXNzdWUgIzE1Njc4OiBGaXggSURMRSBtZW51cyB3aGVuIHN0YXJ0ZWQgZnJvbSBPUyBYIGNvbW1hbmQgbGluZQotICAoMy4zLjBiMiByZWdyZXNzaW9uKS4KK0lETEUKKy0tLS0KIAotQyBBUEkKLS0tLS0tCi0KLUV4dGVuc2lvbiBNb2R1bGVzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KKy0gSXNzdWUgIzE1Njc4OiBGaXggSURMRSBtZW51cyB3aGVuIHN0YXJ0ZWQgZnJvbSBPUyBYIGNvbW1hbmQgbGluZSAoMy4zLjBiMgorICByZWdyZXNzaW9uKS4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICMxNDY3NDogQWRkIGEgZGlzY3Vzc2lvbiBvZiB0aGUganNvbiBtb2R1bGUncyBzdGFuZGFyZCBjb21wbGlhbmNlLgorLSBUb3VjaGVkIHVwIHRoZSBQeXRob24gMiB0byAzIHBvcnRpbmcgZ3VpZGUuCisKKy0gSXNzdWUgIzE0Njc0OiBBZGQgYSBkaXNjdXNzaW9uIG9mIHRoZSBganNvbmAgbW9kdWxlJ3Mgc3RhbmRhcmQgY29tcGxpYW5jZS4KICAgUGF0Y2ggYnkgQ2hyaXMgUmViZXJ0LgogCiAtIENyZWF0ZSBhICdDb25jdXJyZW50IEV4ZWN1dGlvbicgc2VjdGlvbiBpbiB0aGUgZG9jcywgYW5kIHNwbGl0IHVwIHRoZQogICAnT3B0aW9uYWwgT3BlcmF0aW5nIFN5c3RlbSBTZXJ2aWNlcycgc2VjdGlvbiB0byB1c2UgYSBtb3JlIHVzZXItY2VudHJpYwotICBjbGFzc2lmaWNhdGlvbiBzY2hlbWUgKHNwbGl0dGluZyB0aGVtIGFjcm9zcyB0aGUgbmV3IENFIHNlY3Rpb24sIElQQyBhbmQKLSAgdGV4dCBwcm9jZXNzaW5nKS4gT3BlcmF0aW5nIHN5c3RlbSBsaW1pdGF0b25zIGNhbiBiZSByZWZsZWN0ZWQgd2l0aAotICB0aGUgU3BoaW54IGBgOnBsYXRmb3JtOmBgIHRhZywgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGFzIHBhcnQgb2YgdGhlIFRhYmxlIG9mCi0gIENvbnRlbnRzLgorICBjbGFzc2lmaWNhdGlvbiBzY2hlbWUgKHNwbGl0dGluZyB0aGVtIGFjcm9zcyB0aGUgbmV3IENFIHNlY3Rpb24sIElQQyBhbmQgdGV4dAorICBwcm9jZXNzaW5nKS4gT3BlcmF0aW5nIHN5c3RlbSBsaW1pdGF0aW9ucyBjYW4gYmUgcmVmbGVjdGVkIHdpdGggdGhlIFNwaGlueAorICBgYDpwbGF0Zm9ybTpgYCB0YWcsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBhcyBwYXJ0IG9mIHRoZSBUYWJsZSBvZiBDb250ZW50cy4KIAotLSBJc3N1ZSAjNDk2NjogQnJpbmcgdGhlIHNlcXVlbmNlIGRvY3MgdXAgdG8gZGF0ZSBmb3IgdGhlIFB5M2sgdHJhbnNpdGlvbgotICBhbmQgdGhlIG1hbnkgbGFuZ3VhZ2UgZW5oYW5jZW1lbnRzIHNpbmNlIHRoZXkgd2VyZSBvcmlnaW5hbCB3cml0dGVuCistIElzc3VlICM0OTY2OiBCcmluZyB0aGUgc2VxdWVuY2UgZG9jcyB1cCB0byBkYXRlIGZvciB0aGUgUHkzayB0cmFuc2l0aW9uIGFuZAorICB0aGUgbWFueSBsYW5ndWFnZSBlbmhhbmNlbWVudHMgc2luY2UgdGhleSB3ZXJlIG9yaWdpbmFsIHdyaXR0ZW4uCiAKIC0gVGhlICJwYXRoIGltcG9ydGVyIiBtaXNub21lciBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIEVyaWMgU25vdydzCi0gIG1vcmUtYXdrd2FyZC1idXQtYXQtbGVhc3Qtbm90LXdyb25nIHN1Z2dlc3Rpb24gb2YgInBhdGggYmFzZWQgZmluZGVyIiBpbgotICB0aGUgaW1wb3J0IHN5c3RlbSByZWZlcmVuY2UgZG9jcworICBtb3JlLWF3a3dhcmQtYnV0LWF0LWxlYXN0LW5vdC13cm9uZyBzdWdnZXN0aW9uIG9mICJwYXRoIGJhc2VkIGZpbmRlciIgaW4gdGhlCisgIGltcG9ydCBzeXN0ZW0gcmVmZXJlbmNlIGRvY3MuCiAKLS0gSXNzdWUgIzE1NjQwOiBEb2N1bWVudCBpbXBvcnRsaWIuYWJjLkZpbmRlciBhcyBkZXByZWNhdGVkLgorLSBJc3N1ZSAjMTU2NDA6IERvY3VtZW50IGBpbXBvcnRsaWIuYWJjLkZpbmRlcmAgYXMgZGVwcmVjYXRlZC4KIAotLSBJc3N1ZSAjMTU2MzA6IEFkZCBhbiBleGFtcGxlIGZvciAiY29udGludWUiIHN0bXQgaW4gdGhlIHR1dG9yaWFsLiBQYXRjaCBieQorLSBJc3N1ZSAjMTU2MzA6IEFkZCBhbiBleGFtcGxlIGZvciAiY29udGludWUiIHN0bXQgaW4gdGhlIHR1dG9yaWFsLiAgUGF0Y2ggYnkKICAgRGFuaWVsIEVsbGlzLgogCiBUZXN0cwogLS0tLS0KIAogLSBJc3N1ZSAjMTU3NDc6IFpGUyBhbHdheXMgcmV0dXJucyBFT1BOT1RTVVBQIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlCi0gIFVGX0lNTVVUQUJMRSBmbGFnICh2aWEgZWl0aGVyIGNoZmxhZ3Mgb3IgbGNoZmxhZ3MpOyByZWZhY3RvciBhZmZlY3RlZAotICB0ZXN0cyBpbiB0ZXN0X3Bvc2l4LnB5IHRvIGFjY291bnQgZm9yIHRoaXMuCisgIFVGX0lNTVVUQUJMRSBmbGFnICh2aWEgZWl0aGVyIGNoZmxhZ3Mgb3IgbGNoZmxhZ3MpOyByZWZhY3RvciBhZmZlY3RlZCB0ZXN0cyBpbgorICB0ZXN0X3Bvc2l4LnB5IHRvIGFjY291bnQgZm9yIHRoaXMuCiAKLS0gSXNzdWUgIzE1Mjg1OiBSZWZhY3RvciB0aGUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgY29ubmVjdCB0aW1lb3V0cyB1c2luZwotICB0d28gZXh0ZXJuYWwgaG9zdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZQotICBvZiB0ZXN0LgorLSBJc3N1ZSAjMTUyODU6IFJlZmFjdG9yIHRoZSBhcHByb2FjaCBmb3IgdGVzdGluZyBjb25uZWN0IHRpbWVvdXRzIHVzaW5nIHR3bworICBleHRlcm5hbCBob3N0cyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHNwZWNpZmljYWxseSBmb3IgdGhpcyB0eXBlIG9mIHRlc3QuCiAKLS0gSXNzdWUgIzE1NzQzOiBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kIHVzYWdlIGluIHVybGxpYiB0ZXN0cy4gUGF0Y2ggYnkKKy0gSXNzdWUgIzE1NzQzOiBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kIHVzYWdlIGluIGB1cmxsaWJgIHRlc3RzLiBQYXRjaCBieQogICBKZWZmIEtudXBwLgogCi0tIElzc3VlICMxNTYxNTogQWRkIHNvbWUgdGVzdHMgZm9yIHRoZSBqc29uIG1vZHVsZSdzIGhhbmRsaW5nIG9mIGludmFsaWQKLSAgaW5wdXQgZGF0YS4gIFBhdGNoIGJ5IEt1c2hhbCBEYXMuCistIElzc3VlICMxNTYxNTogQWRkIHNvbWUgdGVzdHMgZm9yIHRoZSBganNvbmAgbW9kdWxlJ3MgaGFuZGxpbmcgb2YgaW52YWxpZCBpbnB1dAorICBkYXRhLiAgUGF0Y2ggYnkgS3VzaGFsIERhcy4KIAogQnVpbGQKIC0tLS0tCkBAIC0yNzcsMTEgKzI3MSwxMSBAQAogCiAtIFBpY2sgdXAgMzItYml0IGxhdW5jaGVyIGZyb20gUEdPIGRpcmVjdG9yeSBvbiA2NC1iaXQgUEdPIGJ1aWxkLgogCi0tIERyb3AgUENccHl0aG9uX250LmggYXMgaXQncyBub3QgdXNlZC4gQWRkIGlucHV0IGRlcGVuZGVuY3kgb24gY3VzdG9tCistIERyb3AgYGBQQ1xweXRob25fbnQuaGBgIGFzIGl0J3Mgbm90IHVzZWQuICBBZGQgaW5wdXQgZGVwZW5kZW5jeSBvbiBjdXN0b20KICAgYnVpbGQgc3RlcC4KIAotLSBJc3N1ZSAjMTU1MTE6IERyb3AgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBweXRob254eS5saWIgZnJvbSBfZGVjaW1hbAotICBhbWQ2NCBjb25maWd1cmF0aW9uLgorLSBJc3N1ZSAjMTU1MTE6IERyb3AgZXhwbGljaXQgZGVwZW5kZW5jeSBvbiBweXRob254eS5saWIgZnJvbSBfZGVjaW1hbCBhbWQ2NAorICBjb25maWd1cmF0aW9uLgogCiAtIEFkZCBtaXNzaW5nIFBHSS9QR08gY29uZmlndXJhdGlvbnMgZm9yIHB5d2xhdW5jaGVyLgogCkBAIC0yOTYsMTUgKzI5MCwxNSBAQAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzE1NTY4OiBGaXggdGhlIHJldHVybiB2YWx1ZSBvZiAieWllbGQgZnJvbSIgd2hlbiBTdG9wSXRlcmF0aW9uIGlzCistIElzc3VlICMxNTU2ODogRml4IHRoZSByZXR1cm4gdmFsdWUgb2YgYGB5aWVsZCBmcm9tYGAgd2hlbiBTdG9wSXRlcmF0aW9uIGlzCiAgIHJhaXNlZCBieSBhIGN1c3RvbSBpdGVyYXRvci4KIAotLSBJc3N1ZSAjMTMxMTk6IHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnIgYXJlIG5vdyB1c2luZyAiXHJcbiIgbmV3bGluZSBvbgorLSBJc3N1ZSAjMTMxMTk6IGBzeXMuc3Rkb3V0YCBhbmQgYHN5cy5zdGRlcnJgIGFyZSBub3cgdXNpbmcgIlxyXG4iIG5ld2xpbmUgb24KICAgV2luZG93cywgYXMgUHl0aG9uIDIuCiAKIC0gSXNzdWUgIzE1NTM0OiBGaXggdGhlIGZhc3Qtc2VhcmNoIGZ1bmN0aW9uIGZvciBub24tQVNDSUkgVW5pY29kZSBzdHJpbmdzLgogCi0tIElzc3VlICMxNTUwODogRml4IHRoZSBkb2NzdHJpbmcgZm9yIF9faW1wb3J0X18gdG8gaGF2ZSB0aGUgcHJvcGVyIGRlZmF1bHQKKy0gSXNzdWUgIzE1NTA4OiBGaXggdGhlIGRvY3N0cmluZyBmb3IgYF9faW1wb3J0X18oKWAgdG8gaGF2ZSB0aGUgcHJvcGVyIGRlZmF1bHQKICAgdmFsdWUgb2YgMCBmb3IgJ2xldmVsJyBhbmQgdG8gbm90IG1lbnRpb24gbmVnYXRpdmUgbGV2ZWxzIHNpbmNlIHRoZXkgYXJlIG5vdAogICBzdXBwb3J0ZWQuCiAKQEAgLTMxNywxNyArMzExLDE3IEBACiAgIGJ5dGUgY29kZSBmaWxlcykgZXF1YWwgYmV0d2VlbiAzMi1iaXQgYW5kIDY0LWJpdCBzeXN0ZW1zLgogCiAtIElzc3VlICMxNjkyMzM1OiBNb3ZlIGluaXRpYWwgZXhjZXB0aW9uIGFyZ3MgYXNzaWdubWVudCB0bwotICAiQmFzZUV4Y2VwdGlvbi5fX25ld19fIiB0byBoZWxwIHBpY2tsaW5nIG9mIG5haXZlIHN1YmNsYXNzZXMuCisgIGBCYXNlRXhjZXB0aW9uLl9fbmV3X18oKWAgdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgogCi0tIElzc3VlICMxMjgzNDogRml4IFB5QnVmZmVyX1RvQ29udGlndW91cygpIGZvciBub24tY29udGlndW91cyBhcnJheXMuCistIElzc3VlICMxMjgzNDogRml4IGBQeUJ1ZmZlcl9Ub0NvbnRpZ3VvdXMoKWAgZm9yIG5vbi1jb250aWd1b3VzIGFycmF5cy4KIAotLSBJc3N1ZSAjMTU0NTY6IEZpeCBjb2RlIF9fc2l6ZW9mX18gYWZ0ZXIgIzEyMzk5IGNoYW5nZS4gIFBhdGNoIGJ5IFNlcmhpeQorLSBJc3N1ZSAjMTU0NTY6IEZpeCBjb2RlIGBfX3NpemVvZl9fKClgIGFmdGVyICMxMjM5OSBjaGFuZ2UuICBQYXRjaCBieSBTZXJoaXkKICAgU3RvcmNoYWthLgogCiAtIElzc3VlICMxNTQwNDogUmVmbGVhayBpbiBQeU1ldGhvZE9iamVjdCByZXByLgogCi0tIElzc3VlICMxNTM5NDogQW4gaXNzdWUgaW4gUHlNb2R1bGVfQ3JlYXRlIHRoYXQgY2F1c2VkIHJlZmVyZW5jZXMgdG8gYmUgbGVha2VkCi0gIG9uIHNvbWUgZXJyb3IgcGF0aHMgaGFzIGJlZW4gZml4ZWQuICBQYXRjaCBieSBKdWxpYSBMYXdhbGwuCistIElzc3VlICMxNTM5NDogQW4gaXNzdWUgaW4gYFB5TW9kdWxlX0NyZWF0ZSgpYCB0aGF0IGNhdXNlZCByZWZlcmVuY2VzIHRvIGJlCisgIGxlYWtlZCBvbiBzb21lIGVycm9yIHBhdGhzIGhhcyBiZWVuIGZpeGVkLiAgUGF0Y2ggYnkgSnVsaWEgTGF3YWxsLgogCiAtIElzc3VlICMxNTM2ODogQW4gaXNzdWUgdGhhdCBjYXVzZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbiB0byBiZSBub24tZGV0ZXJtaW5pc3RpYwogICBoYXMgYmVlbiBmaXhlZC4KQEAgLTMzNSw3ICszMjksNyBAQAogLSBJc3N1ZSAjMTUyMDI6IENvbnNpc3RlbnRseSB1c2UgdGhlIG5hbWUgImZvbGxvd19zeW1saW5rcyIgZm9yIG5ldyBwYXJhbWV0ZXJzCiAgIGluIG9zIGFuZCBzaHV0aWwgZnVuY3Rpb25zLgogCi0tIElzc3VlICMxNTMxNDogX19tYWluX18uX19sb2FkZXJfXyBpcyBub3cgc2V0IGNvcnJlY3RseSBkdXJpbmcgaW50ZXJwcmV0ZXIKKy0gSXNzdWUgIzE1MzE0OiBgYF9fbWFpbl9fLl9fbG9hZGVyX19gYCBpcyBub3cgc2V0IGNvcnJlY3RseSBkdXJpbmcgaW50ZXJwcmV0ZXIKICAgc3RhcnR1cC4KIAogLSBJc3N1ZSAjMTUxMTE6IFdoZW4gYSBtb2R1bGUgaW1wb3J0ZWQgdXNpbmcgJ2Zyb20gaW1wb3J0JyBoYXMgYW4gSW1wb3J0RXJyb3IKQEAgLTM1MCw1NyArMzQ0LDYyIEBACiAtIElzc3VlICMxNTExMDogRml4IHRoZSB0cmFjZWJhY2tzIGdlbmVyYXRlZCBieSAiaW1wb3J0IHh4eCIgdG8gbm90IHNob3cgdGhlCiAgIGltcG9ydGxpYiBzdGFjayBmcmFtZXMuCiAKKy0gSXNzdWUgIzE2MzY5OiBHbG9iYWwgUHlUeXBlT2JqZWN0cyBub3QgaW5pdGlhbGl6ZWQgd2l0aCBQeVR5cGVfUmVhZHkoLi4uKS4KKwogLSBJc3N1ZSAjMTUwMjA6IFRoZSBwcm9ncmFtIG5hbWUgdXNlZCB0byBzZWFyY2ggZm9yIFB5dGhvbidzIHBhdGggaXMgbm93CiAgICJweXRob24zIiB1bmRlciBVbml4LCBub3QgInB5dGhvbiIuCiAKLS0gSXNzdWUgIzE1MDMzOiBGaXggdGhlIGV4aXQgc3RhdHVzIGJ1ZyB3aGVuIG1vZHVsZXMgaW52b2tlZCB1c2luZyAtbSBzd2l0aCwKKy0gSXNzdWUgIzE1ODk3OiB6aXBpbXBvcnQuYyBkb2Vzbid0IGNoZWNrIHJldHVybiB2YWx1ZSBvZiBmc2VlaygpLgorICBQYXRjaCBieSBGZWxpcGUgQ3J1ei4KKworLSBJc3N1ZSAjMTUwMzM6IEZpeCB0aGUgZXhpdCBzdGF0dXMgYnVnIHdoZW4gbW9kdWxlcyBpbnZva2VkIHVzaW5nIC1tIHN3aXRjaCwKICAgcmV0dXJuIHRoZSBwcm9wZXIgZmFpbHVyZSByZXR1cm4gdmFsdWUgKDEpLiBQYXRjaCBjb250cmlidXRlZCBieSBKZWZmIEtudXBwLgogCi0tIElzc3VlICMxNTIyOTogQW4gT1NFcnJvciBzdWJjbGFzcyB3aG9zZSBfX2luaXRfXyBkb2Vzbid0IGNhbGwgYmFjaworLSBJc3N1ZSAjMTUyMjk6IEFuIGBPU0Vycm9yYCBzdWJjbGFzcyB3aG9zZSBfX2luaXRfXyBkb2Vzbid0IGNhbGwgYmFjawogICBPU0Vycm9yLl9faW5pdF9fIGNvdWxkIHByb2R1Y2UgaW5jb21wbGV0ZSBpbnN0YW5jZXMsIGxlYWRpbmcgdG8gY3Jhc2hlcyB3aGVuCiAgIGNhbGxpbmcgc3RyKCkgb24gdGhlbS4KIAotLSBJc3N1ZSAxNTMwNzogVmlydHVhbCBlbnZpcm9ubWVudHMgbm93IHVzZSBzeW1saW5rcyB3aXRoIGZyYW1ld29yayBidWlsZHMgb24KKy0gSXNzdWUgIzE1MzA3OiBWaXJ0dWFsIGVudmlyb25tZW50cyBub3cgdXNlIHN5bWxpbmtzIHdpdGggZnJhbWV3b3JrIGJ1aWxkcyBvbgogICBNYWMgT1MgWCwgbGlrZSBvdGhlciBQT1NJWCBidWlsZHMuCiAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMTU0MjQ6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGFycmF5IG9iamVjdHMuICBQYXRjaCBieQorLSBJc3N1ZSAjMTQ1OTA6IGNvbmZpZ3BhcnNlciBub3cgY29ycmVjdGx5IHN0cmlwcyBpbmxpbmUgY29tbWVudHMgd2hlbiBkZWxpbWl0ZXIKKyAgb2NjdXJzIGVhcmxpZXIgd2l0aG91dCBwcmVjZWRpbmcgc3BhY2UuCisKKy0gSXNzdWUgIzE1NDI0OiBBZGQgYSBgX19zaXplb2ZfXygpYCBpbXBsZW1lbnRhdGlvbiBmb3IgYXJyYXkgb2JqZWN0cy4gIFBhdGNoIGJ5CiAgIEx1ZHdpZyBIw6RobmUuCiAKIC0gSXNzdWUgIzE1NTc2OiBBbGxvdyBleHRlbnNpb24gbW9kdWxlcyB0byBhY3QgYXMgYSBwYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlLgogCi0tIElzc3VlICMxNTUwMjogSGF2ZSBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSB3b3JrIG9uIHN5cy5tZXRhX3BhdGggaW5zdGVhZAotICBvZiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKy0gSXNzdWUgIzE1NTAyOiBIYXZlIGBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKWAgd29yayBvbiBgc3lzLm1ldGFfcGF0aGAKKyAgaW5zdGVhZCBvZiBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLgogCiAtIElzc3VlICMxNTE2MzogUHlkb2Mgc2hvdWxkbid0IGxpc3QgX19sb2FkZXJfXyBhcyBtb2R1bGUgZGF0YS4KIAogLSBJc3N1ZSAjMTU0NzE6IERvIG5vdCB1c2UgbXV0YWJsZSBvYmplY3RzIGFzIGRlZmF1bHRzIGZvcgotICBpbXBvcnRsaWIuX19pbXBvcnRfXygpLgorICBgaW1wb3J0bGliLl9faW1wb3J0X18oKWAuCiAKIC0gSXNzdWUgIzE1NTU5OiBUbyBhdm9pZCBhIHByb2JsZW1hdGljIGZhaWx1cmUgbW9kZSB3aGVuIHBhc3NlZCB0byB0aGUgYnl0ZXMKLSAgY29uc3RydWN0b3IsIG9iamVjdHMgaW4gdGhlIGlwYWRkcmVzcyBtb2R1bGUgbm8gbG9uZ2VyIGltcGxlbWVudCBfX2luZGV4X18KLSAgKHRoZXkgc3RpbGwgaW1wbGVtZW50IF9faW50X18gYXMgYXBwcm9wcmlhdGUpCisgIGNvbnN0cnVjdG9yLCBvYmplY3RzIGluIHRoZSBpcGFkZHJlc3MgbW9kdWxlIG5vIGxvbmdlciBpbXBsZW1lbnQgYF9faW5kZXhfXygpYAorICAodGhleSBzdGlsbCBpbXBsZW1lbnQgYF9faW50X18oKWAgYXMgYXBwcm9wcmlhdGUpLgogCiAtIElzc3VlICMxNTU0NjogRml4IGhhbmRsaW5nIG9mIHBhdGhvbG9naWNhbCBpbnB1dCBkYXRhIGluIHRoZSBwZWVrKCkgYW5kCiAgIHJlYWQxKCkgbWV0aG9kcyBvZiB0aGUgQloyRmlsZSwgR3ppcEZpbGUgYW5kIExaTUFGaWxlIGNsYXNzZXMuCiAKLS0gSXNzdWUgIzEzMDUyOiBGaXggSURMRSBjcmFzaGluZyB3aGVuIHJlcGxhY2Ugc3RyaW5nIGluIFNlYXJjaC9SZXBsYWNlIGRpYWxvZwotICBlbmRlZCB3aXRoICdcJy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCistIElzc3VlICMxMjY1NTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjdXN0b20gdHlwZSwgYG9zLnNjaGVkX2dldGFmZmluaXR5KClgIGFuZAorICBgb3Muc2NoZWRfc2V0YWZmaW5pdHkoKWAgbm93IHVzZSByZWd1bGFyIHNldHMgb2YgaW50ZWdlcnMgdG8gcmVwcmVzZW50IHRoZQorICBDUFVzIGEgcHJvY2VzcyBpcyByZXN0cmljdGVkIHRvLgogCi0tIElzc3VlICMxMjY1NTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjdXN0b20gdHlwZSwgb3Muc2NoZWRfZ2V0YWZmaW5pdHkgYW5kCi0gIG9zLnNjaGVkX3NldGFmZmluaXR5IG5vdyB1c2UgcmVndWxhciBzZXRzIG9mIGludGVnZXJzIHRvIHJlcHJlc2VudCB0aGUgQ1BVcyBhCi0gIHByb2Nlc3MgaXMgcmVzdHJpY3RlZCB0by4KLQotLSBJc3N1ZSAjMTU1Mzg6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgZ2V0bmFtZWluZm8oKSAvIGdldGFkZHJpbmZvKCkgZW11bGF0aW9uCi0gIGNvZGUuICBQYXRjaCBieSBQaGlsaXBwIEhhZ2VtZWlzdGVyLgorLSBJc3N1ZSAjMTU1Mzg6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgYHNvY2tldC5nZXRuYW1laW5mbygpYCAvCisgIGBzb2NrZXQuZ2V0YWRkcmluZm8oKWAgZW11bGF0aW9uIGNvZGUuICBQYXRjaCBieSBQaGlsaXBwIEhhZ2VtZWlzdGVyLgogCiAtIElzc3VlICMxNTUxOTogUHJvcGVybHkgZXhwb3NlIFdpbmRvd3NSZWdpc3RyeUZpbmRlciBpbiBpbXBvcnRsaWIgKGFuZCB1c2UgdGhlCi0gIGNvcnJlY3QgdGVybSBmb3IgaXQpLiBPcmlnaW5hbCBwYXRjaCBieSBFcmljIFNub3cuCisgIGNvcnJlY3QgdGVybSBmb3IgaXQpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgogCiAtIElzc3VlICMxNTUwMjogQnJpbmcgdGhlIGltcG9ydGxpYiBBQkNzIGludG8gbGluZSB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQotICBpbXBvcnQgcHJvdG9jb2xzIGdpdmVuIFBFUCA0MjAuIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWMgU25vdy4KKyAgaW1wb3J0IHByb3RvY29scyBnaXZlbiBQRVAgNDIwLiAgT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgogCiAtIElzc3VlICMxNTQ5OTogTGF1bmNoaW5nIGEgd2ViYnJvd3NlciBpbiBVbml4IHVzZWQgdG8gc2xlZXAgZm9yIGEgZmV3IHNlY29uZHMuCiAgIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9uIEJhcmtvdnNreS4KQEAgLTQwOCwzNyArNDA3LDM2IEBACiAtIElzc3VlICMxNTQ2MzogVGhlIGZhdWx0aGFuZGxlciBtb2R1bGUgdHJ1bmNhdGVzIHN0cmluZ3MgdG8gNTAwIGNoYXJhY3RlcnMsCiAgIGluc3RlYWQgb2YgMTAwLCB0byBiZSBhYmxlIHRvIGRpc3BsYXkgbG9uZyBmaWxlIHBhdGhzLgogCi0tIElzc3VlICM2MDU2OiBNYWtlIG11bHRpcHJvY2Vzc2luZyB1c2Ugc2V0YmxvY2tpbmcoVHJ1ZSkgb24gdGhlIHNvY2tldHMgaXQKKy0gSXNzdWUgIzYwNTY6IE1ha2UgYG11bHRpcHJvY2Vzc2luZ2AgdXNlIHNldGJsb2NraW5nKFRydWUpIG9uIHRoZSBzb2NrZXRzIGl0CiAgIHVzZXMuICBPcmlnaW5hbCBwYXRjaCBieSBKIERlcmVrIFdpbHNvbi4KIAogLSBJc3N1ZSAjMTUzNjQ6IEZpeCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpIHRvIGJlIGFuIGFic29sdXRlIHBhdGguCiAKLS0gSXNzdWUgIzE1MDQxOiBVcGRhdGUgInNlZSBhbHNvIiBsaXN0IGluIHRraW50ZXIgZG9jdW1lbnRhdGlvbi4KKy0gSXNzdWUgIzE1NDEzOiBgb3MudGltZXMoKWAgaGFkIGRpc2FwcGVhcmVkIHVuZGVyIFdpbmRvd3MuCiAKLS0gSXNzdWUgIzE1NDEzOiBvcy50aW1lcygpIGhhZCBkaXNhcHBlYXJlZCB1bmRlciBXaW5kb3dzLgotCi0tIElzc3VlICMxNTQwMjogQW4gaXNzdWUgaW4gdGhlIHN0cnVjdCBtb2R1bGUgdGhhdCBjYXVzZWQgc3lzLmdldHNpemVvZiB0bworLSBJc3N1ZSAjMTU0MDI6IEFuIGlzc3VlIGluIHRoZSBzdHJ1Y3QgbW9kdWxlIHRoYXQgY2F1c2VkIGBzeXMuZ2V0c2l6ZW9mKClgIHRvCiAgIHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc3RydWN0LlN0cnVjdCBpbnN0YW5jZXMgaGFzIGJlZW4gZml4ZWQuICBJbml0aWFsCiAgIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKLS0gSXNzdWUgIzE1MjMyOiBXaGVuIG1hbmdsZV9mcm9tIGlzIFRydWUsIGVtYWlsLkdlbmVyYXRvciBub3cgY29ycmVjdGx5IG1hbmdsZXMKLSAgbGluZXMgdGhhdCBzdGFydCB3aXRoICdGcm9tICcgdGhhdCBvY2N1ciBpbiBhIE1JTUUgcHJlYW1ibGUgb3IgZXBpbG9ndWUuCistIElzc3VlICMxNTIzMjogV2hlbiBtYW5nbGVfZnJvbSBpcyBUcnVlLCBgZW1haWwuR2VuZXJhdG9yYCBub3cgY29ycmVjdGx5CisgIG1hbmdsZXMgbGluZXMgdGhhdCBzdGFydCB3aXRoICdGcm9tICcgdGhhdCBvY2N1ciBpbiBhIE1JTUUgcHJlYW1ibGUgb3IKKyAgZXBpbG9ndWUuCiAKIC0gSXNzdWUgIzE1MDk0OiBJbmNvcnJlY3RseSBwbGFjZWQgI2VuZGlmIGluIF90a2ludGVyLmMuICBQYXRjaCBieSBTZXJoaXkKICAgU3RvcmNoYWthLgogCi0tIElzc3VlICMxMzkyMjogYXJncGFyc2Ugbm8gbG9uZ2VyIGluY29ycmVjdGx5IHN0cmlwcyAnLS0ncyB0aGF0IGFwcGVhciBhZnRlcgorLSBJc3N1ZSAjMTM5MjI6IGBhcmdwYXJzZWAgbm8gbG9uZ2VyIGluY29ycmVjdGx5IHN0cmlwcyAnLS0ncyB0aGF0IGFwcGVhciBhZnRlcgogICB0aGUgZmlyc3Qgb25lLgogCi0tIElzc3VlICMxMjM1MzogYXJncGFyc2Ugbm93IGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXJndW1lbnQgdmFsdWVzLgorLSBJc3N1ZSAjMTIzNTM6IGBhcmdwYXJzZWAgbm93IGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXJndW1lbnQgdmFsdWVzLgogCiAtIElzc3VlICMxMDAxNywgaXNzdWUgIzE0OTk4OiBGaXggVHlwZUVycm9yIHVzaW5nIHBwcmludCBvbiBkaWN0aW9uYXJpZXMgd2l0aAogICB1c2VyLWRlZmluZWQgdHlwZXMgYXMga2V5cyBvciBvdGhlciB1bm9yZGVyYWJsZSBrZXlzLgogCi0tIElzc3VlICMxNTM5NzogaW5zcGVjdC5nZXRtb2R1bGVuYW1lKCkgaXMgbm93IGJhc2VkIGRpcmVjdGx5IG9uIGltcG9ydGxpYiB2aWEgYQotICBuZXcgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXMoKSBBUEkuCistIElzc3VlICMxNTM5NzogYGluc3BlY3QuZ2V0bW9kdWxlbmFtZSgpYCBpcyBub3cgYmFzZWQgZGlyZWN0bHkgb24gaW1wb3J0bGliIHZpYQorICBhIG5ldyBgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXMoKWAgQVBJLgogCi0tIElzc3VlICMxNDYzNTogdGVsbmV0bGliIHdpbGwgdXNlIHBvbGwoKSByYXRoZXIgdGhhbiBzZWxlY3QoKSB3aGVuIHBvc3NpYmxlIHRvCistIElzc3VlICMxNDYzNTogYHRlbG5ldGxpYmAgd2lsbCB1c2UgcG9sbCgpIHJhdGhlciB0aGFuIHNlbGVjdCgpIHdoZW4gcG9zc2libGUgdG8KICAgYXZvaWQgZmFpbGluZyBkdWUgdG8gdGhlIHNlbGVjdCgpIGZpbGUgZGVzY3JpcHRvciBsaW1pdC4KIAogLSBJc3N1ZSAjMTUxODA6IENsYXJpZnkgcG9zaXhwYXRoLmpvaW4oKSBlcnJvciBtZXNzYWdlIHdoZW4gbWl4aW5nIHN0ciAmIGJ5dGVzLgpAQCAtNDU1LDcgKzQ1Myw3IEBACiAtIElzc3VlICMxNTIzMzogUHl0aG9uIG5vdyBndWFyYW50ZWVzIHRoYXQgY2FsbGFibGVzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYXRleGl0CiAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbiBhIGRldGVybWluaXN0aWMgb3JkZXIuCiAKLS0gSXNzdWUgIzE1MjM4OiBzaHV0aWwuY29weXN0YXQgbm93IGNvcGllcyBMaW51eCAiZXh0ZW5kZWQgYXR0cmlidXRlcyIuCistIElzc3VlICMxNTIzODogYHNodXRpbC5jb3B5c3RhdCgpYCBub3cgY29waWVzIExpbnV4ICJleHRlbmRlZCBhdHRyaWJ1dGVzIi4KIAogLSBJc3N1ZSAjMTUyMzA6IHJ1bnB5LnJ1bl9wYXRoIG5vdyBjb3JyZWN0bHkgc2V0cyBfX3BhY2thZ2VfXyBhcyBkZXNjcmliZWQgaW4KICAgdGhlIGRvY3VtZW50YXRpb24uCkBAIC00NjUsNDIgKzQ2Myw0MiBAQAogLSBJc3N1ZSAjMTUyOTQ6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gcGtndXRpbC5leHRlbmRfcGF0aCgpJ3MgaGFuZGxpbmcgb2YgbmVzdGVkCiAgIG5hbWVzcGFjZSBwYWNrYWdlcy4KIAotLSBJc3N1ZSAjMTUwNTY6IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgpIGFuZCBzb3VyY2VfZnJvbV9jYWNoZSgpIHJhaXNlCi0gIE5vdEltcGxlbWVudGVkRXJyb3Igd2hlbiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIHNldCB0byBOb25lLgorLSBJc3N1ZSAjMTUwNTY6IGBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoKWAgYW5kIGBpbXAuc291cmNlX2Zyb21fY2FjaGUoKWAgcmFpc2UKKyAgTm90SW1wbGVtZW50ZWRFcnJvciB3aGVuIGBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBzZXQgdG8gTm9uZS4KIAotLSBJc3N1ZSAjMTUyNTY6IEdyYW1tYXRpY2FsIG1pc3Rha2UgaW4gZXhjZXB0aW9uIHJhaXNlZCBieSBpbXAuZmluZF9tb2R1bGUoKS4KKy0gSXNzdWUgIzE1MjU2OiBHcmFtbWF0aWNhbCBtaXN0YWtlIGluIGV4Y2VwdGlvbiByYWlzZWQgYnkgYGltcC5maW5kX21vZHVsZSgpYC4KIAotLSBJc3N1ZSAjNTkzMTogd3NnaXJlZiBlbnZpcm9uIHZhcmlhYmxlIFNFUlZFUl9TT0ZUV0FSRSB3aWxsIHNwZWNpZnkgYW4KKy0gSXNzdWUgIzU5MzE6IGB3c2dpcmVmYCBlbnZpcm9uIHZhcmlhYmxlIFNFUlZFUl9TT0ZUV0FSRSB3aWxsIHNwZWNpZnkgYW4KICAgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdGVybSBsaWtlIENQeXRob24sIEp5dGhvbiBpbnN0ZWFkIG9mIGdlbmVyaWMgIlB5dGhvbiIuCiAKIC0gSXNzdWUgIzEzMjQ4OiBSZW1vdmUgb2Jzb2xldGUgYXJndW1lbnQgIm1heF9idWZmZXJfc2l6ZSIgb2YgQnVmZmVyZWRXcml0ZXIgYW5kCiAgIEJ1ZmZlcmVkUldQYWlyLCBmcm9tIHRoZSBpbyBtb2R1bGUuCiAKLS0gSXNzdWUgIzEzMjQ4OiBSZW1vdmUgb2Jzb2xldGUgYXJndW1lbnQgInZlcnNpb24iIG9mIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLgorLSBJc3N1ZSAjMTMyNDg6IFJlbW92ZSBvYnNvbGV0ZSBhcmd1bWVudCAidmVyc2lvbiIgb2YgYGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyYC4KIAogLSBJc3N1ZSAjMTQ4MTQ6IEltcGxlbWVudCBtb3JlIGNvbnNpc3RlbnQgb3JkZXJpbmcgYW5kIHNvcnRpbmcgYmVoYXZpb3VyIGZvcgogICBpcGFkZHJlc3Mgb2JqZWN0cy4KIAotLSBJc3N1ZSAjMTQ4MTQ6IGlwYWRkcmVzcyBuZXR3b3JrIG9iamVjdHMgY29ycmVjdGx5IHJldHVybiBOb3RJbXBsZW1lbnRlZCB3aGVuCistIElzc3VlICMxNDgxNDogYGlwYWRkcmVzc2AgbmV0d29yayBvYmplY3RzIGNvcnJlY3RseSByZXR1cm4gTm90SW1wbGVtZW50ZWQgd2hlbgogICBjb21wYXJlZCB0byBhcmJpdHJhcnkgb2JqZWN0cyBpbnN0ZWFkIG9mIHJhaXNpbmcgVHlwZUVycm9yLgogCiAtIElzc3VlICMxNDk5MDogQ29ycmVjdGx5IGZhaWwgd2l0aCBTeW50YXhFcnJvciBvbiBpbnZhbGlkIGVuY29kaW5nIGRlY2xhcmF0aW9uLgogCi0tIElzc3VlICMxNDgxNDogaXBhZGRyZXNzIG5vdyBwcm92aWRlcyBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VzIHdoZW4KKy0gSXNzdWUgIzE0ODE0OiBgaXBhZGRyZXNzYCBub3cgcHJvdmlkZXMgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlcyB3aGVuCiAgIGNvbnN0cnVjdGluZyBpbnN0YW5jZXMgZGlyZWN0bHkgKGNoYW5nZXMgcGVybWl0dGVkIGR1cmluZyBiZXRhIGR1ZSB0bwogICBwcm92aXNpb25hbCBBUEkgc3RhdHVzKS4KIAotLSBJc3N1ZSAjMTUyNDc6IEZpbGVJTyBub3cgcmFpc2VzIGFuIGVycm9yIHdoZW4gZ2l2ZW4gYSBmaWxlIGRlc2NyaXB0b3IgcG9pbnRpbmcKLSAgdG8gYSBkaXJlY3RvcnkuCistIElzc3VlICMxNTI0NzogYGlvLkZpbGVJT2Agbm93IHJhaXNlcyBhbiBlcnJvciB3aGVuIGdpdmVuIGEgZmlsZSBkZXNjcmlwdG9yCisgIHBvaW50aW5nIHRvIGEgZGlyZWN0b3J5LgogCiAtIElzc3VlICMxNTI2MTogU3RvcCBvcy5zdGF0KGZkKSBjcmFzaGluZyBvbiBXaW5kb3dzIHdoZW4gZmQgbm90IG9wZW4uCiAKLS0gSXNzdWUgIzE1MTY2OiBJbXBsZW1lbnQgaW1wLmdldF90YWcoKSB1c2luZyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLgorLSBJc3N1ZSAjMTUxNjY6IEltcGxlbWVudCBgaW1wLmdldF90YWcoKWAgdXNpbmcgYHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgLgogCi0tIElzc3VlICMxNTIxMDogQ2F0Y2ggS2V5RXJyb3Igd2hlbiBpbXBvcnRsaWIuX19pbml0X18gY2FuJ3QgZmluZAorLSBJc3N1ZSAjMTUyMTA6IENhdGNoIEtleUVycm9yIHdoZW4gYGltcG9ydGxpYi5fX2luaXRfXygpYCBjYW4ndCBmaW5kCiAgIF9mcm96ZW5faW1wb3J0bGliIGluIHN5cy5tb2R1bGVzLCBub3QgSW1wb3J0RXJyb3IuCiAKLS0gSXNzdWUgIzE1MDMwOiBpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyIG5vdyBzdXBwb3J0cyB0aGUgbmV3IHNvdXJjZSBzaXplCistIElzc3VlICMxNTAzMDogYGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXJgIG5vdyBzdXBwb3J0cyB0aGUgbmV3IHNvdXJjZSBzaXplCiAgIGhlYWRlciBmaWVsZCBpbiAucHljIGZpbGVzLgogCiAtIElzc3VlICM1MzQ2OiBQcmVzZXJ2ZSBwZXJtaXNzaW9ucyBvZiBtYm94LCBNTURGIGFuZCBCYWJ5bCBtYWlsYm94IGZpbGVzIG9uCkBAIC01MTMsNyArNTExLDcgQEAKICAgcmVuYW1lZCBvdmVyIHRoZSBvbGQgZmlsZSB3aGVuIGZsdXNoKCkgaXMgY2FsbGVkIG9uIGFuIG1ib3gsIE1NREYgb3IgQmFieWwKICAgbWFpbGJveC4KIAotLSBJc3N1ZSAxMDkyNDogRml4ZWQgY3J5cHQubWtzYWx0KCkgdG8gdXNlIGEgUk5HIHRoYXQgaXMgc3VpdGFibGUgZm9yCistIElzc3VlICMxMDkyNDogRml4ZWQgYGNyeXB0Lm1rc2FsdCgpYCB0byB1c2UgYSBSTkcgdGhhdCBpcyBzdWl0YWJsZSBmb3IKICAgY3J5cHRvZ3JhcGhpYyBwdXJwb3NlLgogCiAtIElzc3VlICMxNTE4NDogRW5zdXJlIGNvbnNpc3RlbnQgcmVzdWx0cyBvZiBPUyBYIGNvbmZpZ3VyYXRpb24gdGFpbG9yaW5nIGZvcgpAQCAtNTI0LDEwICs1MjIsMTAgQEAKIEMgQVBJCiAtLS0tLQogCi0tIElzc3VlICMxNTYxMDogUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgoKSBub3cgdXNlcyBhICdsZXZlbCcgb2YgMCBpbnN0ZWFkIG9mIC0xLgorLSBJc3N1ZSAjMTU2MTA6IGBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeCgpYCBub3cgdXNlcyBhICdsZXZlbCcgb2YgMCBpbnN0ZWFkIG9mIC0xLgogCi0tIElzc3VlcyAjMTUxNjksICMxNDU5OTogU3RyaXAgb3V0IHRoZSBDIGltcGxlbWVudGF0aW9uIG9mCi0gIGltcC5zb3VyY2VfZnJvbV9jYWNoZSgpIHVzZWQgYnkgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKCkgYW5kCistIElzc3VlICMxNTE2OSwgaXNzdWUgIzE0NTk5OiBTdHJpcCBvdXQgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgYGltcC5zb3VyY2VfZnJvbV9jYWNoZSgpYCB1c2VkIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGFuZAogICB1c2VkIHRoZSBQeXRob24gY29kZSBpbnN0ZWFkLiBMZWFkcyB0byBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdCgpIHRvIG5vdAogICB0cnkgdG8gaW5mZXIgdGhlIHNvdXJjZSBwYXRoIGZyb20gdGhlIGJ5dGVjb2RlIHBhdGggYXMKICAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKCkgZG9lcy4KQEAgLTUzNSwxNCArNTMzLDE3IEBACiBFeHRlbnNpb24gTW9kdWxlcwogLS0tLS0tLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAjMTU2NzY6IE5vdyAibW1hcCIgY2hlY2sgZm9yIGVtcHR5IGZpbGVzIGJlZm9yZSBkb2luZyB0aGUKLSAgb2Zmc2V0IGNoZWNrLiAgUGF0Y2ggYnkgU3RldmVuIFdpbGxpcy4KLQotLSBJc3N1ZSAjNjQ5MzogQW4gaXNzdWUgaW4gY3R5cGVzIG9uIFdpbmRvd3MgdGhhdCBjYXVzZWQgc3RydWN0dXJlIGJpdGZpZWxkcwotICBvZiB0eXBlIGN0eXBlcy5jX3VpbnQzMiBhbmQgd2lkdGggMzIgdG8gaW5jb3JyZWN0bHkgYmUgc2V0IGhhcyBiZWVuIGZpeGVkLgorLSBJc3N1ZSAjNjQ5MzogQW4gaXNzdWUgaW4gY3R5cGVzIG9uIFdpbmRvd3MgdGhhdCBjYXVzZWQgc3RydWN0dXJlIGJpdGZpZWxkcyBvZgorICB0eXBlIGBjdHlwZXMuY191aW50MzJgIGFuZCB3aWR0aCAzMiB0byBpbmNvcnJlY3RseSBiZSBzZXQgaGFzIGJlZW4gZml4ZWQuCiAKIC0gSXNzdWUgIzE1MTk0OiBVcGRhdGUgbGliZmZpIHRvIHRoZSAzLjAuMTEgcmVsZWFzZS4KIAorSURMRQorLS0tLQorCistIElzc3VlICMxMzA1MjogRml4IElETEUgY3Jhc2hpbmcgd2hlbiByZXBsYWNlIHN0cmluZyBpbiBTZWFyY2gvUmVwbGFjZSBkaWFsb2cKKyAgZW5kZWQgd2l0aCBgYFxgYC4gIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCiBUb29scy9EZW1vcwogLS0tLS0tLS0tLS0KIApAQCAtNTYyLDggKzU2MywxMCBAQAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICMxNTQ0NDogVXNlIHByb3BlciBzcGVsbGluZyBmb3Igbm9uLUFTQ0lJIGNvbnRyaWJ1dG9yIG5hbWVzLiAgUGF0Y2gKLSAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKy0gSXNzdWUgIzE1MDQxOiBVcGRhdGUgInNlZSBhbHNvIiBsaXN0IGluIHRraW50ZXIgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTU0NDQ6IFVzZSBwcm9wZXIgc3BlbGxpbmcgZm9yIG5vbi1BU0NJSSBjb250cmlidXRvciBuYW1lcy4gIFBhdGNoIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EuCiAKIC0gSXNzdWUgIzE1Mjk1OiBSZW9yZ2FuaXplIGFuZCByZXdyaXRlIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBpbXBvcnQgc3lzdGVtLgogCkBAIC01NzgsMjUgKzU4MSwyOSBAQAogICAiY2hhbmdlZCIgc2luY2UgdGhleSB3aWxsIG5vIGxvbmdlciB3b3JrIHdpdGggbW9kdWxlcyBkaXJlY3RseSBpbXBvcnRlZCBieQogICBpbXBvcnQgaXRzZWxmLgogCi0tIElzc3VlICMxMzU1NzogQ2xhcmlmeSBlZmZlY3Qgb2YgZ2l2aW5nIHR3byBkaWZmZXJlbnQgbmFtZXNwYWNlcyB0byBleGVjIG9yCi0gIGV4ZWNmaWxlKCkuCistIElzc3VlICMxMzU1NzogQ2xhcmlmeSBlZmZlY3Qgb2YgZ2l2aW5nIHR3byBkaWZmZXJlbnQgbmFtZXNwYWNlcyB0byBgZXhlYygpYCBvcgorICBgZXhlY2ZpbGUoKWAuCiAKLS0gSXNzdWUgIzE1MjUwOiBEb2N1bWVudCB0aGF0IGZpbGVjbXAuZGlyY21wIGNvbXBhcmVzIGZpbGVzIHNoYWxsb3dseS4gUGF0Y2gKKy0gSXNzdWUgIzE1MjUwOiBEb2N1bWVudCB0aGF0IGBmaWxlY21wLmRpcmNtcCgpYCBjb21wYXJlcyBmaWxlcyBzaGFsbG93bHkuIFBhdGNoCiAgIGNvbnRyaWJ1dGVkIGJ5IENocmlzIEplcmRvbmVrLgogCistIElzc3VlICMxNTQ0MjogRXhwb3NlIHRoZSBkZWZhdWx0IGxpc3Qgb2YgZGlyZWN0b3JpZXMgaWdub3JlZCBieQorICBgZmlsZWNtcC5kaXJjbXAoKWAgYXMgYSBtb2R1bGUgYXR0cmlidXRlLCBhbmQgZXhwYW5kIHRoZSBsaXN0IHRvIG1vcmUgbW9kZXJuCisgIHZhbHVlcy4KKwogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzE1NDY3OiBNb3ZlIGhlbHBlcnMgZm9yIF9fc2l6ZW9mX18gdGVzdHMgaW50byB0ZXN0X3N1cHBvcnQuICBQYXRjaCBieQotICBTZXJoaXkgU3RvcmNoYWthLgorLSBJc3N1ZSAjMTU0Njc6IE1vdmUgaGVscGVycyBmb3IgYF9fc2l6ZW9mX18oKWAgdGVzdHMgaW50byB0ZXN0X3N1cHBvcnQuICBQYXRjaAorICBieSBTZXJoaXkgU3RvcmNoYWthLgogCiAtIElzc3VlICMxNTMyMDogTWFrZSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2YgdGVzdHMgdGhyZWFkLXNhZmUgd2hlbiBydW5uaW5nIHRlc3RzCiAgIGluIG11bHRpcHJvY2VzcyBtb2RlLiBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KIAotLSBJc3N1ZSAjMTUxNjg6IE1vdmUgaW1wb3J0bGliLnRlc3QgdG8gdGVzdC50ZXN0X2ltcG9ydGxpYi4KKy0gSXNzdWUgIzE1MTY4OiBNb3ZlIGBpbXBvcnRsaWIudGVzdGAgdG8gYHRlc3QudGVzdF9pbXBvcnRsaWJgLgogCiAtIElzc3VlICMxNTA5MTogUmVhY3RpdmF0ZSBhIHRlc3Qgb24gVU5JWCB3aGljaCB3YXMgZmFpbGluZyB0aGFua3MgdG8gYQotICBmb3Jnb3R0ZW4gaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgY2FsbC4KKyAgZm9yZ290dGVuIGBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKWAgY2FsbC4KIAogLSBJc3N1ZSAjMTUyMzA6IEFkb3B0ZWQgYSBtb3JlIHN5c3RlbWF0aWMgYXBwcm9hY2ggaW4gdGhlIHJ1bnB5IHRlc3RzLgogCkBAIC02MjksNiArNjM2LDggQEAKIAogLSBJc3N1ZSAjMTQwMTg6IEZpeCBPUyBYIFRjbC9UayBmcmFtZXdvcmsgY2hlY2tpbmcgd2hlbiB1c2luZyBPUyBYIFNES3MuCiAKKy0gSXNzdWUgIzE2MjU2OiBPUyBYIGluc3RhbGxlciBub3cgc2V0cyBjb3JyZWN0IHBlcm1pc3Npb25zIGZvciBkb2MgZGlyZWN0b3J5LgorCiAtIElzc3VlICMxNTQzMTogQWRkIF9mcmVlemVfaW1wb3J0bGliIHByb2plY3QgdG8gcmVnZW5lcmF0ZSBpbXBvcnRsaWIuaCBvbgogICBXaW5kb3dzLiBQYXRjaCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb24uCiAKQEAgLTY2NCwxNCArNjczLDkgQEAKIAogLSBJc3N1ZSAjMTE2MjY6IEFkZCBfU2l6ZVQgZnVuY3Rpb25zIHRvIHN0YWJsZSBBQkkuCiAKLS0gSXNzdWUgIzE1MTQ2OiBBZGQgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCi0KIC0gSXNzdWUgIzE1MTQyOiBGaXggcmVmZXJlbmNlIGxlYWsgd2hlbiBkZWFsbG9jYXRpbmcgaW5zdGFuY2VzIG9mIHR5cGVzCiAgIGNyZWF0ZWQgdXNpbmcgUHlUeXBlX0Zyb21TcGVjKCkuCiAKLS0gSXNzdWUgIzE1MDQyOiBBZGQgUHlTdGF0ZV9BZGRNb2R1bGUgYW5kIFB5U3RhdGVfUmVtb3ZlTW9kdWxlLiBBZGQgdmVyc2lvbgotICBndWFyZCBmb3IgUHlfTElNSVRFRF9BUEkgYWRkaXRpb25zLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCi0KIC0gSXNzdWUgIzEwMDUzOiBEb24ndCBjbG9zZSBGRHMgd2hlbiBGaWxlSU8uX19pbml0X18gZmFpbHMuIExvb3NlbHkgYmFzZWQgb24KICAgdGhlIHdvcmsgYnkgSGlyb2thenUgWWFtYW1vdG8uCiAKQEAgLTY5OSw5ICs3MDMsNiBAQAogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICM5ODAzOiBEb24ndCBjbG9zZSBJRExFIG9uIHNhdmluZyBpZiBicmVha3BvaW50IGlzIG9wZW4uCi0gIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgotCiAtIElzc3VlICMxMjI4ODogQ29uc2lkZXIgJzAnIGFuZCAnMC4wJyBhcyB2YWxpZCBpbml0aWFsdmFsdWUKICAgZm9yIHRraW50ZXIgU2ltcGxlRGlhbG9nLgogCkBAIC03MjAsMTQgKzcyMSw4IEBACiAtIElzc3VlICMxNTUxNDogQ29ycmVjdCBfX3NpemVvZl9fIHN1cHBvcnQgZm9yIGNwdV9zZXQuCiAgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKLS0gSXNzdWUgIzE1MTg3OiBCdWdmaXg6IHJlbW92ZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgdGVzdF9zaHV0aWwgd2FzIGxlYXZpbmcKLSAgYmVoaW5kLgotCiAtIElzc3VlICMxNTE3NzogQWRkZWQgZGlyX2ZkIHBhcmFtZXRlciB0byBvcy5md2FsaygpLgogCi0tIElzc3VlICMxNTE3NjogQ2xhcmlmaWVkIGJlaGF2aW9yLCBkb2N1bWVudGF0aW9uLCBhbmQgaW1wbGVtZW50YXRpb24KLSAgb2Ygb3MubGlzdGRpcigpLgotCiAtIElzc3VlICMxNTA2MTogUmUtaW1wbGVtZW50ZWQgaG1hYy5jb21wYXJlX2RpZ2VzdCgpIGluIEMgdG8gcHJldmVudCBmdXJ0aGVyCiAgIHRpbWluZyBhbmFseXNpcyBhbmQgdG8gc3VwcG9ydCBhbGwgYnVmZmVyIHByb3RvY29sIGF3YXJlIG9iamVjdHMgYXMgd2VsbCBhcwogICBBU0NJSSBvbmx5IHN0ciBpbnN0YW5jZXMgc2FmZWx5LgpAQCAtNzg3LDcgKzc4Miw3IEBACiAtIElzc3VlICMxNTAwODogSW1wbGVtZW50IFBFUCAzNjIgIlNpZ25hdHVyZSBPYmplY3RzIi4KICAgUGF0Y2ggYnkgWXVyeSBTZWxpdmFub3YuCiAKLS0gSXNzdWU6ICMxNTEzODogYmFzZTY0LnVybHNhZmVfe2VuLGRlfWNvZGUoKSBhcmUgbm93IDMtNHggZmFzdGVyLgorLSBJc3N1ZSAjMTUxMzg6IGJhc2U2NC51cmxzYWZlX3tlbixkZX1jb2RlKCkgYXJlIG5vdyAzLTR4IGZhc3Rlci4KIAogLSBJc3N1ZSAjNDQ0NTgyOiBBZGQgc2h1dGlsLndoaWNoLCBmb3IgZmluZGluZyBwcm9ncmFtcyBvbiB0aGUgc3lzdGVtIHBhdGguCiAgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgRGVtYWluZSwgd2l0aCBsYXRlciBpdGVyYXRpb25zIGJ5IEphbiBLaWxsaWFuCkBAIC04MjcsMTAgKzgyMiw2IEBACiAtIElzc3VlICMxNTAwNjogQWxsb3cgZXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIG5haXZlIGFuZCBhd2FyZQogICB0aW1lIG9yIGRhdGV0aW1lIG9iamVjdHMuCiAKLS0gSXNzdWUgIzE0OTgyOiBEb2N1bWVudCB0aGF0IHBrZ3V0aWwncyBpdGVyYXRpb24gZnVuY3Rpb25zIHJlcXVpcmUgdGhlCi0gIG5vbi1zdGFuZGFyZCBpdGVyX21vZHVsZXMoKSBtZXRob2QgdG8gYmUgZGVmaW5lZCBieSBhbiBpbXBvcnRlciAoc29tZXRoaW5nCi0gIHRoZSBpbXBvcnRsaWIgaW1wb3J0ZXJzIGRvIG5vdCBkZWZpbmUpLgotCiAtIElzc3VlICMxNTAzNjogTWFpbGJveCBubyBsb25nZXIgdGhyb3dzIGFuIGVycm9yIGlmIGEgZmx1c2ggaXMgZG9uZQogICBiZXR3ZWVuIG9wZXJhdGlvbnMgd2hlbiByZW1vdmluZyBvciBjaGFuZ2luZyBtdWx0aXBsZSBpdGVtcyBpbiBtYm94LAogICBNTURGLCBvciBCYWJ5bCBtYWlsYm94ZXMuCkBAIC04OTgsOSArODg5LDYgQEAKIAogLSBJc3N1ZSAjMTQ5Njk6IEJldHRlciBoYW5kbGluZyBvZiBleGNlcHRpb24gY2hhaW5pbmcgaW4gY29udGV4dGxpYi5FeGl0U3RhY2sKIAotLSBJc3N1ZSAjMTQ5NjI6IFVwZGF0ZSB0ZXh0IGNvbG9yaW5nIGluIElETEUgc2hlbGwgd2luZG93IGFmdGVyIGNoYW5naW5nCi0gIG9wdGlvbnMuICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KLQogLSBJc3N1ZSAjMTQ5NjM6IENvbnZlcnQgY29udGV4dGxpYi5FeGl0U3RhY2suX19leGl0X18gdG8gdXNlIGFuIGl0ZXJhdGl2ZQogICBhbGdvcml0aG0gKFBhdGNoIGJ5IEFsb24gSG9yZXYpCiAKQEAgLTkxMyw2ICs5MDEsMTEgQEAKIEMtQVBJCiAtLS0tLQogCistIElzc3VlICMxNTE0NjogQWRkIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcy4gUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNTA0MjogQWRkIFB5U3RhdGVfQWRkTW9kdWxlIGFuZCBQeVN0YXRlX1JlbW92ZU1vZHVsZS4gQWRkIHZlcnNpb24KKyAgZ3VhcmQgZm9yIFB5X0xJTUlURURfQVBJIGFkZGl0aW9ucy4gUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCiAtIElzc3VlICMxMzc4MzogSW5hZHZlcnRlbnQgYWRkaXRpb25zIHRvIHRoZSBwdWJsaWMgQyBBUEkgaW4gdGhlIFBFUCAzODAKICAgaW1wbGVtZW50YXRpb24gaGF2ZSBlaXRoZXIgYmVlbiByZW1vdmVkIG9yIG1hcmtlZCBhcyBwcml2YXRlIGludGVyZmFjZXMuCiAKQEAgLTkyMSw5ICs5MTQsMjUgQEAKIAogLSBJc3N1ZSAjMTUwMDA6IFN1cHBvcnQgdGhlICJ1bmlxdWUiIHgzMiBhcmNoaXRlY3R1cmUgaW4gX3Bvc2l4c3VicHJvY2Vzcy5jLgogCitJRExFCistLS0tCisKKy0gSXNzdWUgIzk4MDM6IERvbid0IGNsb3NlIElETEUgb24gc2F2aW5nIGlmIGJyZWFrcG9pbnQgaXMgb3Blbi4KKyAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzE0OTYyOiBVcGRhdGUgdGV4dCBjb2xvcmluZyBpbiBJRExFIHNoZWxsIHdpbmRvdyBhZnRlciBjaGFuZ2luZworICBvcHRpb25zLiAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMTUxNzY6IENsYXJpZmllZCBiZWhhdmlvciwgZG9jdW1lbnRhdGlvbiwgYW5kIGltcGxlbWVudGF0aW9uCisgIG9mIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTQ5ODI6IERvY3VtZW50IHRoYXQgcGtndXRpbCdzIGl0ZXJhdGlvbiBmdW5jdGlvbnMgcmVxdWlyZSB0aGUKKyAgbm9uLXN0YW5kYXJkIGl0ZXJfbW9kdWxlcygpIG1ldGhvZCB0byBiZSBkZWZpbmVkIGJ5IGFuIGltcG9ydGVyIChzb21ldGhpbmcKKyAgdGhlIGltcG9ydGxpYiBpbXBvcnRlcnMgZG8gbm90IGRlZmluZSkuCisKIC0gSXNzdWUgIzE1MDgxOiBEb2N1bWVudCBQeVN0YXRlX0ZpbmRNb2R1bGUuCiAgIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KIApAQCAtOTMyLDYgKzk0MSw5IEBACiBUZXN0cwogLS0tLS0KIAorLSBJc3N1ZSAjMTUxODc6IEJ1Z2ZpeDogcmVtb3ZlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyB0ZXN0X3NodXRpbCB3YXMgbGVhdmluZworICBiZWhpbmQuCisKIC0gSXNzdWUgIzE0NzY5OiB0ZXN0X2NhcGkgbm93IGhhcyBTa2lwaXRlbVRlc3QsIHdoaWNoIGNsZXZlcmx5IGNoZWNrcwogICBmb3IgInBhcml0eSIgYmV0d2VlbiBQeUFyZ19QYXJzZVR1cGxlKCkgYW5kIHRoZSBQeXRob24vZ2V0YXJncy5jIHN0YXRpYwogICBmdW5jdGlvbiBza2lwaXRlbSgpIGZvciBhbGwgcG9zc2libGUgImZvcm1hdCB1bml0cyIuCkBAIC0xMDIwLDM0ICsxMDMyLDE4IEBACiAtIElzc3VlICMxNDcwMDogRml4IHR3byBicm9rZW4gYW5kIHVuZGVmaW5lZC1iZWhhdmlvdXItaW5kdWNpbmcgb3ZlcmZsb3cgY2hlY2tzCiAgIGluIG9sZC1zdHlsZSBzdHJpbmcgZm9ybWF0dGluZy4KIAotLSBJc3N1ZSAjMTQ3MDU6IFRoZSBQeUFyZ19QYXJzZSgpIGZhbWlseSBvZiBmdW5jdGlvbnMgbm93IHN1cHBvcnQgdGhlICdwJyBmb3JtYXQKLSAgdW5pdCwgd2hpY2ggYWNjZXB0cyBhICJib29sZWFuIHByZWRpY2F0ZSIgYXJndW1lbnQuICBJdCBjb252ZXJ0cyBhbnkgUHl0aG9uCi0gIHZhbHVlIGludG8gYW4gaW50ZWdlci0tMCBpZiBpdCBpcyAiZmFsc2UiLCBhbmQgMSBvdGhlcndpc2UuCi0KIExpYnJhcnkKIC0tLS0tLS0KIAogLSBJc3N1ZSAjMTQ2OTA6IFVzZSBtb25vdG9uaWMgY2xvY2sgaW5zdGVhZCBvZiBzeXN0ZW0gY2xvY2sgaW4gdGhlIHNjaGVkLAogICBzdWJwcm9jZXNzIGFuZCB0cmFjZSBtb2R1bGVzLgogCi0tIElzc3VlICMxNDk1ODogQ2hhbmdlIElETEUgc3lzdGF4IGhpZ2hsaWdodGluZyB0byByZWNvZ25pemUgYWxsIHN0cmluZyBhbmQKLSAgYnl0ZSBsaXRlcmFscyBzdXBwb3J0ZWQgaW4gUHl0aG9uIDMuMy4KLQotLSBJc3N1ZSAjMTA5OTc6IFByZXZlbnQgYSBkdXBsaWNhdGUgZW50cnkgaW4gSURMRSdzICJSZWNlbnQgRmlsZXMiIG1lbnUuCi0KIC0gSXNzdWUgIzE0NDQzOiBUZWxsIHJwbWJ1aWxkIHRvIHVzZSB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIFB5dGhvbiBpbgogICBiZGlzdF9ycG0uIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCiAKLS0gSXNzdWUgIzE0OTI5OiBTdG9wIElkbGUgMy54IGZyb20gY2xvc2luZyBvbiBVbmljb2RlIGRlY29kZSBlcnJvcnMgd2hlbgotICBncmVwcGluZy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCi0KIC0gSXNzdWUgIzEyNTE1OiBlbWFpbCBub3cgcmVnaXN0ZXJzIGEgZGVmZWN0IGlmIGl0IGdldHMgdG8gRU9GIHdoaWxlIHBhcnNpbmcKICAgYSBNSU1FIHBhcnQgd2l0aG91dCBzZWVpbmcgdGhlIGNsb3NpbmcgTUlNRSBib3VuZGFyeS4KIAotLSBJc3N1ZSAjMTI1MTA6IEF0dGVtcHRpbmcgdG8gZ2V0IGludmFsaWQgdG9vbHRpcCBubyBsb25nZXIgY2xvc2VzIElkbGUuCi0gIE90aGVyIHRvb2x0aXBzcyBoYXZlIGJlZW4gY29ycmVjdGVkIG9yIGltcHJvdmVkIGFuZCB0aGUgbnVtYmVyIG9mIHRlc3RzCi0gIGhhcyBiZWVuIHRyaXBsZWQuIE9yaWdpbmFsIHBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgotCiAtIElzc3VlICMxNjcyNTY4OiBlbWFpbCBub3cgYWx3YXlzIGRlY29kZXMgYmFzZTY0IHBheWxvYWRzLCBhZGRpbmcgcGFkZGluZyBhbmQKICAgaWdub3Jpbmcgbm9uLWJhc2U2NC1hbHBoYWJldCBjaGFyYWN0ZXJzIGlmIG5lZWRlZCwgYW5kIHJlZ2lzdGVyaW5nIGRlZmVjdHMKICAgZm9yIGFueSBzdWNoIHByb2JsZW1zLgpAQCAtMTA4MSw5ICsxMDc3LDYgQEAKIC0gSXNzdWUgIzE0NTQ4OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBmaW5hbGl6ZXJzIGNoZWNrIHBpZCBiZWZvcmUKICAgcnVubmluZyB0byBjb3BlIHdpdGggcG9zc2liaWxpdHkgb2YgZ2MgcnVubmluZyBqdXN0IGFmdGVyIGZvcmsuCiAKLS0gSXNzdWUgIzE0ODYzOiBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gb2Ygb3MuZmRvcGVuKCkgdG8gcmVmbGVjdCB0aGUKLSAgZmFjdCB0aGF0IGl0J3Mgb25seSBhIHRoaW4gd3JhcHBlciBhcm91bmQgb3BlbigpIGFueW1vcmUuCi0KIC0gSXNzdWUgIzE0MDM2OiBBZGQgYW4gYWRkaXRpb25hbCBjaGVjayB0byB2YWxpZGF0ZSB0aGF0IHBvcnQgaW4gdXJscGFyc2UgZG9lcwogICBub3QgZ28gaW4gaWxsZWdhbCByYW5nZSBhbmQgcmV0dXJucyBOb25lLgogCkBAIC0xMTAyLDcgKzEwOTUsNyBAQAogICBmdW5jdGlvbnMgdG8gc3VwcG9ydCBQRVAgMzExNSBjb21wbGlhbnQgZHluYW1pYyBjbGFzcyBjcmVhdGlvbi4gUGF0Y2ggYnkKICAgRGFuaWVsIFVyYmFuIGFuZCBOaWNrIENvZ2hsYW4uCiAKLS0gSXNzdWUgIzEzMTUyOiBBbGxvdyB0byBzcGVjaWZ5IGEgY3VzdG9tIHRhYnNpemUgZm9yIGV4cGFuZGluZyB0YWJzIGluCistIElzc3VlICMxMzE1MjogQWxsb3cgc3BlY2lmeWluZyBhIGN1c3RvbSB0YWJzaXplIGZvciBleHBhbmRpbmcgdGFicyBpbgogICB0ZXh0d3JhcC4gUGF0Y2ggYnkgSm9obiBGZXVlcnN0ZWluLgogCiAtIElzc3VlICMxNDcyMTogU2VuZCB0aGUgY29ycmVjdCAnQ29udGVudC1sZW5ndGg6IDAnIGhlYWRlciB3aGVuIHRoZSBib2R5IGlzIGFuCkBAIC0xMjEwLDYgKzEyMDMsMjEgQEAKIC0gSXNzdWUgIzE0MTI3IGFuZCAjMTAxNDg6IHNodXRpbC5jb3B5c3RhdCBub3cgcHJlc2VydmVzIGV4YWN0IG10aW1lIGFuZCBhdGltZQogICBvbiBmaWxlc3lzdGVtcyBwcm92aWRpbmcgbmFub3NlY29uZCByZXNvbHV0aW9uLgogCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE0OTU4OiBDaGFuZ2UgSURMRSBzeXN0YXggaGlnaGxpZ2h0aW5nIHRvIHJlY29nbml6ZSBhbGwgc3RyaW5nIGFuZAorICBieXRlIGxpdGVyYWxzIHN1cHBvcnRlZCBpbiBQeXRob24gMy4zLgorCistIElzc3VlICMxMDk5NzogUHJldmVudCBhIGR1cGxpY2F0ZSBlbnRyeSBpbiBJRExFJ3MgIlJlY2VudCBGaWxlcyIgbWVudS4KKworLSBJc3N1ZSAjMTQ5Mjk6IFN0b3AgSURMRSAzLnggZnJvbSBjbG9zaW5nIG9uIFVuaWNvZGUgZGVjb2RlIGVycm9ycyB3aGVuCisgIGdyZXBwaW5nLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTI1MTA6IEF0dGVtcHRpbmcgdG8gZ2V0IGludmFsaWQgdG9vbHRpcCBubyBsb25nZXIgY2xvc2VzIElETEUuCisgIE90aGVyIHRvb2x0aXBzcyBoYXZlIGJlZW4gY29ycmVjdGVkIG9yIGltcHJvdmVkIGFuZCB0aGUgbnVtYmVyIG9mIHRlc3RzCisgIGhhcyBiZWVuIHRyaXBsZWQuIE9yaWdpbmFsIHBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCiBUb29scy9EZW1vcwogLS0tLS0tLS0tLS0KIApAQCAtMTIyOCw5ICsxMjM2LDE5IEBACiAKIC0gSXNzdWUgIzEzMjEwOiBXaW5kb3dzIGJ1aWxkIG5vdyB1c2VzIFZTMjAxMCwgcG9ydGVkIGZyb20gVlMyMDA4LgogCitDLUFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTQ3MDU6IFRoZSBQeUFyZ19QYXJzZSgpIGZhbWlseSBvZiBmdW5jdGlvbnMgbm93IHN1cHBvcnQgdGhlICdwJyBmb3JtYXQKKyAgdW5pdCwgd2hpY2ggYWNjZXB0cyBhICJib29sZWFuIHByZWRpY2F0ZSIgYXJndW1lbnQuICBJdCBjb252ZXJ0cyBhbnkgUHl0aG9uCisgIHZhbHVlIGludG8gYW4gaW50ZWdlci0tMCBpZiBpdCBpcyAiZmFsc2UiLCBhbmQgMSBvdGhlcndpc2UuCisKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMTQ4NjM6IFVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBvcy5mZG9wZW4oKSB0byByZWZsZWN0IHRoZQorICBmYWN0IHRoYXQgaXQncyBvbmx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBvcGVuKCkgYW55bW9yZS4KKwogLSBJc3N1ZSAjMTQ1ODg6IFRoZSBsYW5ndWFnZSByZWZlcmVuY2Ugbm93IGFjY3VyYXRlbHkgZG9jdW1lbnRzIHRoZSBQeXRob24gMwogICBjbGFzcyBkZWZpbml0aW9uIHByb2Nlc3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbi4KIApAQCAtMTI3OSw5ICsxMjk3LDYgQEAKIC0gSXNzdWUgIzE0MzM5OiBTcGVlZCBpbXByb3ZlbWVudHMgdG8gYmluLCBvY3QgYW5kIGhleCBmdW5jdGlvbnMuICBQYXRjaCBieQogICBTZXJoaXkgU3RvcmNoYWthLgogCi0tIElzc3VlICMxNDA5ODogTmV3IGZ1bmN0aW9ucyBQeUVycl9HZXRFeGNJbmZvIGFuZCBQeUVycl9TZXRFeGNJbmZvLgotICBQYXRjaCBieSBTdGVmYW4gQmVobmVsLgotCiAtIElzc3VlICMxNDM4NTogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHVzZSBhIGN1c3RvbSB0eXBlIGZvciB0aGUgX19idWlsdGluc19fCiAgIG5hbWVzcGFjZSwgaW5zdGVhZCBvZiBhIGRpY3QuIEl0IGNhbiBiZSB1c2VkIGZvciBzYW5kYm94aW5nIGZvciBleGFtcGxlLgogICBSYWlzZSBhbHNvIGEgTmFtZUVycm9yIGluc3RlYWQgb2YgSW1wb3J0RXJyb3IgaWYgX19idWlsZF9jbGFzc19fIG5hbWUgaWYgbm90CkBAIC0xNDMxLDEyICsxNDQ2LDYgQEAKIAogLSBEb24ndCBQeV9ERUNSRUYgTlVMTCB2YXJpYWJsZSBpbiBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyLgogCi0tIElzc3VlICM4NTE1OiBTZXQgX19maWxlX18gd2hlbiBydW4gZmlsZSBpbiBJRExFLgotICBJbml0aWFsIHBhdGNoIGJ5IEJydWNlIEZyZWRlcmlrc2VuLgotCi0tIElzc3VlICMxNDQ5NjogRml4IHdyb25nIG5hbWUgaW4gaWRsZWxpYi90YWJiZWRwYWdlcy5weS4KLSAgUGF0Y2ggYnkgUG9wYSBDbGF1ZGl1LgotCiAtIElzc3VlICMzMDMzOiBBZGQgZGlzcGxheW9mIHBhcmFtZXRlciB0byB0a2ludGVyIGZvbnQuIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgogCiAtIElzc3VlICMxNDQ4MjogUmFpc2UgYSBWYWx1ZUVycm9yLCBub3QgYSBOYW1lRXJyb3IsIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZQpAQCAtMTQ3Miw2ICsxNDgxLDE1IEBACiAtIElzc3VlICMxNDM1NTogUmVncnRlc3Qgbm93IHN1cHBvcnRzIHRoZSBzdGFuZGFyZCB1bml0dGVzdCB0ZXN0IGxvYWRpbmcsIGFuZAogICB3aWxsIHVzZSBpdCBpZiBhIHRlc3QgZmlsZSBjb250YWlucyBubyBgdGVzdF9tYWluYCBtZXRob2QuCiAKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjODUxNTogU2V0IF9fZmlsZV9fIHdoZW4gcnVuIGZpbGUgaW4gSURMRS4KKyAgSW5pdGlhbCBwYXRjaCBieSBCcnVjZSBGcmVkZXJpa3Nlbi4KKworLSBJc3N1ZSAjMTQ0OTY6IEZpeCB3cm9uZyBuYW1lIGluIGlkbGVsaWIvdGFiYmVkcGFnZXMucHkuCisgIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKwogVG9vbHMgLyBEZW1vcwogLS0tLS0tLS0tLS0tLQogCkBAIC0xNDgxLDYgKzE0OTksMTIgQEAKIC0gSXNzdWUgIzEzMTY1OiBzdHJpbmdiZW5jaCBpcyBub3cgYXZhaWxhYmxlIGluIHRoZSBUb29scy9zdHJpbmdiZW5jaCBmb2xkZXIuCiAgIEl0IHVzZWQgdG8gbGl2ZSBpbiBpdHMgb3duIFNWTiBwcm9qZWN0LgogCitDLUFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTQwOTg6IE5ldyBmdW5jdGlvbnMgUHlFcnJfR2V0RXhjSW5mbyBhbmQgUHlFcnJfU2V0RXhjSW5mby4KKyAgUGF0Y2ggYnkgU3RlZmFuIEJlaG5lbC4KKwogCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAyPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1MzIsMTYgKzE1NTYsOSBAQAogCiAtIElzc3VlICM1MTM2OiBkZXByZWNhdGUgb2xkLCB1bnVzZWQgZnVuY3Rpb25zIGZyb20gdGtpbnRlci4KIAotLSBJc3N1ZSAjMTQ0MDk6IElETEUgbm93IHByb3Blcmx5IGV4ZWN1dGVzIGNvbW1hbmRzIGluIHRoZSBTaGVsbCB3aW5kb3cKLSAgd2hlbiBpdCBjYW5ub3QgcmVhZCB0aGUgbm9ybWFsIGNvbmZpZyBmaWxlcyBvbiBzdGFydHVwIGFuZAotICBoYXMgdG8gdXNlIHRoZSBidWlsdC1pbiBkZWZhdWx0IGtleSBiaW5kaW5ncy4KLSAgVGhlcmUgd2FzIHByZXZpb3VzbHkgYSBidWcgaW4gb25lIG9mIHRoZSBkZWZhdWx0cy4KLQogLSBJc3N1ZSAjMTQ0MTY6IHN5c2xvZyBub3cgZGVmaW5lcyB0aGUgTE9HX09ERUxBWSBhbmQgTE9HX0FVVEhQUklWIGNvbnN0YW50cwogICBpZiB0aGV5IGFyZSBkZWZpbmVkIGluIDxzeXNsb2cuaD4uCiAKLS0gSURMRSBjYW4gYmUgbGF1bmNoZWQgYXMgcHl0aG9uIC1tIGlkbGVsaWIKLQogLSBJc3N1ZSAjMTQyOTU6IEFkZCB1bml0dGVzdC5tb2NrCiAKIC0gSXNzdWUgIzc2NTI6IEFkZCAtLXdpdGgtc3lzdGVtLWxpYm1wZGVjIG9wdGlvbiB0byBjb25maWd1cmUgZm9yIGxpbmtpbmcKQEAgLTE1NjcsOSArMTU4NCw2IEBACiAgIHVwIHRoZSBkZWNpbWFsIG1vZHVsZS4gUGVyZm9ybWFuY2UgZ2FpbnMgb2YgdGhlIG5ldyBDIGltcGxlbWVudGF0aW9uIGFyZQogICBiZXR3ZWVuIDEweCBhbmQgMTAweCwgZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbi4KIAotLSBJc3N1ZSAjMzU3MzogSURMRSBoYW5ncyB3aGVuIHBhc3NpbmcgaW52YWxpZCBjb21tYW5kIGxpbmUgYXJncwotICAoZGlyZWN0b3J5KGllcykgaW5zdGVhZCBvZiBmaWxlKHMpKSAoUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8pCi0KIC0gSXNzdWUgIzE0MjY5OiBTTVRQRCBub3cgY29uZm9ybXMgdG8gdGhlIFJGQyBhbmQgcmVxdWlyZXMgYSBIRUxPIGNvbW1hbmQKICAgYmVmb3JlIE1BSUwsIFJDUFQsIG9yIERBVEEuCiAKQEAgLTE2MDEsOCArMTYxNSw2IEBACiAgIGRlbmlhbCBvZiBzZXJ2aWNlIGR1ZSB0byBoYXNoIGNvbGxpc2lvbnMuICBQYXRjaCBieSBEYXZpZCBNYWxjb2xtIHdpdGggc29tZQogICBtb2RpZmljYXRpb25zIGJ5IHRoZSBleHBhdCBwcm9qZWN0LgogCi0tIElzc3VlICMxNDIwMDogSWRsZSBzaGVsbCBjcmFzaCBvbiBwcmludGluZyBub24tQk1QIHVuaWNvZGUgY2hhcmFjdGVyLgotCiAtIElzc3VlICMxMjgxODogZm9ybWF0IGFkZHJlc3Mgbm8gbG9uZ2VyIG5lZWRsZXNzbHkgXCBlc2NhcGVzICgpcyBpbiBuYW1lcyB3aGVuCiAgIHRoZSBuYW1lIGVuZHMgdXAgYmVpbmcgcXVvdGVkLgogCkBAIC0xNjE4LDggKzE2MzAsNiBAQAogCiAtIElzc3VlICM5ODk3MTI6IFN1cHBvcnQgdXNpbmcgVGsgd2l0aG91dCBhIG1haW5sb29wLgogCi0tIElzc3VlICM1MjE5OiBQcmV2ZW50IGV2ZW50IGhhbmRsZXIgY2FzY2FkZSBpbiBJRExFLgotCiAtIElzc3VlICMzODM1OiBSZWZ1c2UgdG8gdXNlIHVudGhyZWFkZWQgVGNsIGluIHRocmVhZGVkIFB5dGhvbi4KIAogLSBJc3N1ZSAjMjg0MzogQWRkIG5ldyBUayBBUEkgdG8gVGtpbnRlci4KQEAgLTE4MjQsNyArMTgzNCw3IEBACiAgIG9iamVjdHMuICBJbml0aWFsIHBhdGNoIGJ5IE1hdHRoaWFzIFRyb2ZmYWVzLgogCiAtIEZpeCBPU0Vycm9yLl9faW5pdF9fIGFuZCBPU0Vycm9yLl9fbmV3X18gc28gdGhhdCBlYWNoIG9mIHRoZW0gY2FuIGJlCi0gIG92ZXJyaWRlbiBhbmQgdGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoZm9sbG93dXAgdG8gaXNzdWUgIzEyNTU1KS4KKyAgb3ZlcnJpZGRlbiBhbmQgdGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoZm9sbG93dXAgdG8gaXNzdWUgIzEyNTU1KS4KIAogLSBGaXggdGhlIGZpeCBmb3IgaXNzdWUgIzEyMTQ5OiBpdCB3YXMgaW5jb3JyZWN0LCBhbHRob3VnaCBpdCBoYWQgdGhlIHNpZGUKICAgZWZmZWN0IG9mIGFwcGVhcmluZyB0byByZXNvbHZlIHRoZSBpc3N1ZS4gIFRoYW5rcyB0byBNYXJrIFNoYW5ub24gZm9yCkBAIC0xODQ4LDEwICsxODU4LDYgQEAKICAgb24gUE9TSVggc3lzdGVtcyBzdXBwb3J0aW5nIGFub255bW91cyBtZW1vcnkgbWFwcGluZ3MuICBQYXRjaCBieQogICBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCiAKLS0gSXNzdWUgIzEzNDUyOiBQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbCgpIGRvZXNuJ3Qgc3VwcG9ydCBlcnJvciBoYW5kbGVycwotICBkaWZmZXJlbnQgdGhhbiAic3RyaWN0IiBhbnltb3JlLiBUaGUgY2FsbGVyIHdhcyB1bmFibGUgdG8gY29tcHV0ZSB0aGUKLSAgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcjogaXQgZGVwZW5kcyBvbiB0aGUgZXJyb3IgaGFuZGxlci4KLQogLSBQRVAgMzE1NSAvIGlzc3VlICMxMzQ0ODogUXVhbGlmaWVkIG5hbWUgZm9yIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KIAogLSBJc3N1ZSAjMTM0MzY6IEZpeCBhIGJvZ3VzIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBBU1Qgb2JqZWN0IHdhcyBwYXNzZWQKQEAgLTE5NDIsMTAgKzE5NDgsNiBAQAogCiAtIFBFUCAzMTUxIC8gaXNzdWUgIzEyNTU1OiByZXdvcmtpbmcgdGhlIE9TIGFuZCBJTyBleGNlcHRpb24gaGllcmFyY2h5LgogCi0tIElzc3VlICMxMzU2MDogQWRkIFB5VW5pY29kZV9EZWNvZGVMb2NhbGUoKSwgUHlVbmljb2RlX0RlY29kZUxvY2FsZUFuZFNpemUoKQotICBhbmQgUHlVbmljb2RlX0VuY29kZUxvY2FsZSgpIGZ1bmN0aW9ucyB0byB0aGUgQyBBUEkgdG8gZGVjb2RlL2VuY29kZSBmcm9tL3RvCi0gIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZy4KLQogLSBBZGQgaW50ZXJuYWwgQVBJIGZvciBzdGF0aWMgc3RyaW5ncyAoX1B5X2lkZW50aWZpZXIgZXQgYWwuKS4KIAogLSBJc3N1ZSAjMTMwNjM6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX05PX0RBVEEgKG51bWJlcmVkIDIzMiBhbmQgZGVzY3JpYmVkCkBAIC0yMDI4LDcgKzIwMzAsNyBAQAogICBkZWFsbG9jYXRvciBjYWxscyBvbmUgb2YgdGhlIG1ldGhvZHMgb24gdGhlIHR5cGUgKGUuZy4gd2hlbiBzdWJjbGFzc2luZwogICBJT0Jhc2UpLiAgRGlhZ25vc2lzIGFuZCBwYXRjaCBieSBEYXZpZGUgUml6em8uCiAKLS0gSXNzdWUgIzk2MTEsICM5MDE1OiBGaWxlSU8ucmVhZCgpIGNsYW1wcyB0aGUgbGVuZ3RoIHRvIElOVF9NQVggb24gV2luZG93cy4KKy0gSXNzdWUgIzk2MTEsIElzc3VlICM5MDE1OiBGaWxlSU8ucmVhZCgpIGNsYW1wcyB0aGUgbGVuZ3RoIHRvIElOVF9NQVggb24gV2luZG93cy4KIAogLSBJc3N1ZSAjOTY0MjogVW5pZm9ybWl6ZSB0aGUgdGVzdHMgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgbWJjcyBjb2RlYywgYWRkCiAgIGEgbmV3IEhBVkVfTUJDUyBkZWZpbmUuCkBAIC0yMDUxLDcgKzIwNTMsNyBAQAogICBnaXZlbiwgcHJvZHVjZSBhbiBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIHdoaWNoIGluY2x1ZGVzIHRoZSBuYW1lKHMpIG9mIHRoZQogICBtaXNzaW5nIGFyZ3VtZW50cy4KIAotLSBJc3N1ZSAjMTIzNzA6IEZpeCBzdXBlciB3aXRoIG5vIGFyZ3VtZW50cyB3aGVuIF9fY2xhc3NfXyBpcyBvdmVycmlkZW4gaW4gdGhlCistIElzc3VlICMxMjM3MDogRml4IHN1cGVyIHdpdGggbm8gYXJndW1lbnRzIHdoZW4gX19jbGFzc19fIGlzIG92ZXJyaWRkZW4gaW4gdGhlCiAgIGNsYXNzIGJvZHkuCiAKIC0gSXNzdWUgIzEyMDg0OiBvcy5zdGF0IG9uIFdpbmRvd3Mgbm93IHdvcmtzIHByb3Blcmx5IHdpdGggcmVsYXRpdmUgc3ltYm9saWMKQEAgLTIxOTEsMTcgKzIxOTMsMTEgQEAKICAgUHlVbmljb2RlX0FzVVRGOFN0cmluZygpIGFuZCBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHVuaWNvZGUsICJ1dGYtOCIsCiAgIE5VTEwpLgogCi0tIElzc3VlICMxMDgzMTogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBzdXBwb3J0cyAlbGksICVsbGkgYW5kICV6aSBmb3JtYXRzLgotCiAtIElzc3VlICMxMDgyOTogUmVmYWN0b3IgUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSwgdXNlIHRoZSBzYW1lIGZ1bmN0aW9uIHRvIHBhcnNlCiAgIHRoZSBmb3JtYXQgc3RyaW5nIGluIHRoZSAzIHN0ZXBzLCBmaXggY3Jhc2hzIG9uIGludmFsaWQgZm9ybWF0IHN0cmluZ3MuCiAKIC0gSXNzdWUgIzEzMDA3OiB3aGljaGRiIHNob3VsZCByZWNvZ25pemUgZ2RibSAxLjkgbWFnaWMgbnVtYmVycy4KIAotLSBJc3N1ZSAjMTEyNDY6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVYiKSB0byBkZWNvZGUgdGhlIGJ5dGUgc3RyaW5nIGZyb20KLSAgVVRGLTggKHdpdGggcmVwbGFjZSBlcnJvciBoYW5kbGVyKSBpbnN0ZWFkIG9mIElTTy04ODU5LTEgKGluIHN0cmljdCBtb2RlKS4KLSAgUGF0Y2ggd3JpdHRlbiBieSBSYXkgQWxsZW4uCi0KIC0gSXNzdWUgIzExMjg2OiBSYWlzZSBhIFZhbHVlRXJyb3IgZnJvbSBjYWxsaW5nIFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyIHdpdGgKICAgYSBidWZmZXIgc3RydWN0IGhhdmluZyBhIE5VTEwgZGF0YSBwb2ludGVyLgogCkBAIC0yMjExLDkgKzIyMDcsNiBAQAogLSBJc3N1ZSAjMTE4Mjg6IHN0YXJ0c3dpdGggYW5kIGVuZHN3aXRoIG5vdyBhY2NlcHQgTm9uZSBhcyBzbGljZSBpbmRleC4KICAgUGF0Y2ggYnkgVG9yc3RlbiBCZWNrZXIuCiAKLS0gSXNzdWUgIzEwODMwOiBGaXggUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCIlYyIpIGZvciBub24tQk1QIGNoYXJhY3RlcnMgb24KLSAgbmFycm93IGJ1aWxkLgotCiAtIElzc3VlICMxMTE2ODogUmVtb3ZlIGZpbGVuYW1lIGRlYnVnIHZhcmlhYmxlIGZyb20gUHlFdmFsX0V2YWxGcmFtZUV4KCkuCiAgIEl0IGVuY29kZWQgdGhlIFVuaWNvZGUgZmlsZW5hbWUgdG8gVVRGLTgsIGJ1dCB0aGUgZW5jb2RpbmcgZmFpbHMgb24KICAgdW5kZWNvZGFibGUgZmlsZW5hbWUgKG9uIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzKSB3aGljaCByYWlzZXMgYW4gdW5leHBlY3RlZApAQCAtMjI0MSwxMCArMjIzNCwxMCBAQAogICBmaXhlZC4KIAogLSBJc3N1ZSAjMTQxNjY6IFBpY2tsZXIgb2JqZWN0cyBub3cgaGF2ZSBhbiBvcHRpb25hbCBgYGRpc3BhdGNoX3RhYmxlYGAKLSAgYXR0cmlidXRlIHdoaWNoIGFsbG93cyB0byBzZXQgY3VzdG9tIHBlci1waWNrbGVyIHJlZHVjdGlvbiBmdW5jdGlvbnMuCisgIGF0dHJpYnV0ZSB3aGljaCBhbGxvd3Mgc2V0dGluZyBjdXN0b20gcGVyLXBpY2tsZXIgcmVkdWN0aW9uIGZ1bmN0aW9ucy4KICAgUGF0Y2ggYnkgc2J0LgogCi0tIElzc3VlICMxNDE3NzogbWFyc2hhbC5sb2FkcygpIG5vdyByYWlzZXMgVHlwZUVycm9yIHdoZW4gZ2l2ZW4gYW4gdW5pY29kZQorLSBJc3N1ZSAjMTQxNzc6IG1hcnNoYWwubG9hZHMoKSBub3cgcmFpc2VzIFR5cGVFcnJvciB3aGVuIGdpdmVuIGEgdW5pY29kZQogICBzdHJpbmcuICBQYXRjaCBieSBHdWlsaGVybWUgR29uw6dhbHZlcy4KIAogLSBJc3N1ZSAjMTM1NTA6IFJlbW92ZSB0aGUgZGVidWcgbWFjaGluZXJ5IGZyb20gdGhlIHRocmVhZGluZyBtb2R1bGU6IHJlbW92ZQpAQCAtMjI1NSwxNSArMjI0OCw5IEBACiAgIGFyZSBkZWFkIG9yIGR5aW5nLiAgTW9yZW92ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3cgTygxKSByYXRoZXIgdGhhbgogICBPKG4pLgogCi0tIElzc3VlICMxMzEyNTogU2lsZW5jZSBzcHVyaW91cyB0ZXN0X2xpYjJ0bzMgb3V0cHV0IHdoZW4gaW4gbm9uLXZlcmJvc2UgbW9kZS4KLSAgUGF0Y2ggYnkgTWlraGFpbCBOb3Zpa292LgotCiAtIElzc3VlICMxMTg0MTogRml4IGNvbXBhcmlzb24gYnVnIHdpdGggJ3JjJyB2ZXJzaW9ucyBpbiBwYWNrYWdpbmcudmVyc2lvbi4KICAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KIAotLSBJc3N1ZSAjMTM0NDc6IEFkZCBhIHRlc3QgZmlsZSB0byBob3N0IHJlZ3Jlc3Npb24gdGVzdHMgZm9yIGJ1Z3MgaW4gdGhlCi0gIHNjcmlwdHMgZm91bmQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4KLQogLSBJc3N1ZSAjNjg4NDogRml4IGxvbmctc3RhbmRpbmcgYnVncyB3aXRoIE1BTklGRVNULmluIHBhcnNpbmcgaW4gZGlzdHV0aWxzCiAgIG9uIFdpbmRvd3MuICBBbHNvIGZpeGVkIGluIHBhY2thZ2luZy4KIApAQCAtMjMxOSw5ICsyMzA2LDYgQEAKICAgYXV0aGVudGljYXRpbmcgKHNpbmNlIHRoZSByZXN1bHQgbWF5IGNoYW5nZSwgYWNjb3JkaW5nIHRvIFJGQyA0NjQzKS4KICAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgogCi0tIElzc3VlICMxMzk4OTogRG9jdW1lbnQgdGhhdCBHemlwRmlsZSBkb2VzIG5vdCBzdXBwb3J0IHRleHQgbW9kZSwgYW5kIGdpdmUgYQotICBtb3JlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSB3aGVuIG9wZW5lZCB3aXRoIGFuIGludmFsaWQgbW9kZSBzdHJpbmcuCi0KIC0gSXNzdWUgIzEzNTkwOiBPbiBPUyBYIDEwLjcgYW5kIDEwLjYgd2l0aCBYY29kZSA0LjIsIGJ1aWxkaW5nCiAgIERpc3R1dGlscy1iYXNlZCBwYWNrYWdlcyB3aXRoIEMgZXh0ZW5zaW9uIG1vZHVsZXMgbWF5IGZhaWwgYmVjYXVzZQogICBBcHBsZSBoYXMgcmVtb3ZlZCBnY2MtNC4yLCB0aGUgdmVyc2lvbiB1c2VkIHRvIGJ1aWxkIHB5dGhvbi5vcmcKQEAgLTIzMzgsMTAgKzIzMjIsNiBAQAogLSBJc3N1ZSAjMTM5NjA6IEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIGJyb2tlbiBjb21tZW50cyB3aGVuCiAgIHN0cmljdD1GYWxzZS4KIAotLSBJc3N1ZSAjMTM5MjE6IFVuZG9jdW1lbnQgYW5kIGNsZWFuIHVwIHNxbGl0ZTMuT3B0aW1pemVkVW5pY29kZSwKLSAgd2hpY2ggaXMgb2Jzb2xldGUgaW4gUHl0aG9uIDMueC4gSXQncyBub3cgYWxpYXNlZCB0byBzdHIgZm9yCi0gIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCiAtIFdoZW4gJycgaXMgYSBwYXRoIChlLmcuIGluIHN5cy5wYXRoKSwgbWFrZSBzdXJlIF9fZmlsZV9fIHVzZXMgdGhlIGN1cnJlbnQKICAgd29ya2luZyBkaXJlY3RvcnkgaW5zdGVhZCBvZiAnJyBpbiBpbXBvcnRsaWIuCiAKQEAgLTIzNjMsMTEgKzIzNDMsNiBAQAogLSBJc3N1ZSAjMTA4MTE6IEZpeCByZWN1cnNpdmUgdXNhZ2Ugb2YgY3Vyc29ycy4gSW5zdGVhZCBvZiBjcmFzaGluZywKICAgcmFpc2UgYSBQcm9ncmFtbWluZ0Vycm9yIG5vdy4KIAotLSBJc3N1ZSAjMTA4ODE6IEZpeCB0ZXN0X3NpdGUgZmFpbHVyZSB3aXRoIE9TIFggZnJhbWV3b3JrIGJ1aWxkcy4KLQotLSBJc3N1ZSAjOTY0NDM3OiBNYWtlIElETEUgaGVscCB3aW5kb3cgbm9uLW1vZGFsLgotICBQYXRjaCBieSBHdWlsaGVybWUgUG9sbyBhbmQgUm9nZXIgU2Vyd3kuCi0KIC0gSXNzdWUgIzEzNzM0OiBBZGQgb3MuZndhbGsoKSwgYSBkaXJlY3Rvcnkgd2Fsa2luZyBmdW5jdGlvbiB5aWVsZGluZyBmaWxlCiAgIGRlc2NyaXB0b3JzLgogCkBAIC0yMzc3LDE2ICsyMzUyLDggQEAKIAogLSBJc3N1ZSAjMTE4MDU6IHBhY2thZ2VfZGF0YSBpbiBzZXR1cC5jZmcgc2hvdWxkIGFsbG93IG1vcmUgdGhhbiBvbmUgdmFsdWUuCiAKLS0gSXNzdWUgIzEzOTMzOiBJRExFIGF1dG8tY29tcGxldGUgZGlkIG5vdCB3b3JrIHdpdGggc29tZSBpbXBvcnRlZAotICBtb2R1bGUsIGxpa2UgaGFzaGxpYi4gIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKLQotLSBJc3N1ZSAjMTM5MDE6IFByZXZlbnQgdGVzdF9kaXN0dXRpbHMgZmFpbHVyZXMgb24gT1MgWCB3aXRoIC0tZW5hYmxlLXNoYXJlZC4KLQogLSBJc3N1ZSAjMTM2NzY6IEhhbmRsZSBzdHJpbmdzIHdpdGggZW1iZWRkZWQgemVyb3MgY29ycmVjdGx5IGluIHNxbGl0ZTMuCiAKLS0gSXNzdWUgIzEzNTA2OiBBZGQgJycgdG8gcGF0aCBmb3IgSURMRSBTaGVsbCB3aGVuIHN0YXJ0ZWQgYW5kIHJlc3RhcnRlZCB3aXRoIFJlc3RhcnQgU2hlbGwuCi0gIE9yaWdpbmFsIHBhdGNoZXMgYnkgTWFyY28gU2NhdGFnbGluaSBhbmQgUm9nZXIgU2Vyd3kuCi0KIC0gSXNzdWUgIzg4Mjg6IEFkZCBuZXcgZnVuY3Rpb24gb3MucmVwbGFjZSgpLCBmb3IgY3Jvc3MtcGxhdGZvcm0gcmVuYW1pbmcKICAgd2l0aCBvdmVyd3JpdGluZy4KIApAQCAtMjQwNywxMiArMjM3NCw2IEBACiAgIE9TRXJyb3IgaWYgbG9jYWx0aW1lKCkgZmFpbGVkLiB0aW1lLmNsb2NrKCkgbm93IHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiB0aGUKICAgcHJvY2Vzc29yIHRpbWUgdXNlZCBpcyBub3QgYXZhaWxhYmxlIG9yIGl0cyB2YWx1ZSBjYW5ub3QgYmUgcmVwcmVzZW50ZWQKIAotLSBJc3N1ZSAjMTM4NjI6IEZpeCBzcHVyaW91cyBmYWlsdXJlIGluIHRlc3RfemxpYiBkdWUgdG8gcnVudGltZS9jb21waWxlIHRpbWUKLSAgbWlub3IgdmVyc2lvbnMgbm90IG1hdGNoaW5nLgotCi0tIElzc3VlICMxMjgwNDogRml4IHRlc3Rfc29ja2V0IGFuZCB0ZXN0X3VybGxpYjJuZXQgZmFpbHVyZXMgd2hlbiBydW5uaW5nIHRlc3RzCi0gIG9uIGEgc3lzdGVtIHdpdGhvdXQgaW50ZXJuZXQgYWNjZXNzLgotCiAtIElzc3VlICMxMzc3MjogSW4gb3Muc3ltbGluaygpIHVuZGVyIFdpbmRvd3MsIGRvIG5vdCB0cnkgdG8gZ3Vlc3MgdGhlIGxpbmsKICAgdGFyZ2V0J3MgdHlwZSAoZmlsZSBvciBkaXJlY3RvcnkpLiAgVGhlIGRldGVjdGlvbiB3YXMgYnVnZ3kgYW5kIG1hZGUgdGhlCiAgIGNhbGwgbm9uLWF0b21pYyAodGhlcmVmb3JlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucykuCkBAIC0yNDM5LDkgKzI0MDAsNiBAQAogLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIHVzZXI6cGFzc3dvcmQgZHVyaW5nIEJhc2ljCiAgIEF1dGhlbnRpY2F0aW9uLiBQYXRjaCBjb250cmlidXRlZCBieSBKb29uYXMgS3VvcmlsZWh0by4KIAotLSBJc3N1ZSAjMTM3MjY6IEZpeCB0aGUgYW1iaWd1b3VzIC1TIGZsYWcgaW4gcmVncnRlc3QuIEl0IGlzIC1vLy0tc2xvdyBmb3Igc2xvdwotICB0ZXN0cy4KLQogLSBJc3N1ZSAjMTIzNjQ6IEZpeCBhIGhhbmcgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCiAgIFRoZSBoYW5nIHdvdWxkIG9jY3VyIHdoZW4gcmV0cmlldmluZyB0aGUgcmVzdWx0IG9mIGEgc2NoZWR1bGVkIGZ1dHVyZSBhZnRlcgogICB0aGUgZXhlY3V0b3IgaGFkIGJlZW4gc2h1dCBkb3duLgpAQCAtMjUyNCwxNSArMjQ4MiwxMSBAQAogLSBJc3N1ZSAjMTM1OTE6IEEgYnVnIGluIGltcG9ydGxpYiBoYXMgYmVlbiBmaXhlZCB0aGF0IGNhdXNlZCBpbXBvcnRfbW9kdWxlCiAgIHRvIGxvYWQgYSBtb2R1bGUgdHdpY2UuCiAKLS0gSXNzdWUgIzQ2MjU6IElmIElETEUgY2Fubm90IHdyaXRlIHRvIGl0cyByZWNlbnQgZmlsZSBvciBicmVha3BvaW50IGZpbGVzLAotICBkaXNwbGF5IGEgbWVzc2FnZSBwb3B1cCBhbmQgY29udGludWUgcmF0aGVyIHRoYW4gY3Jhc2guICBPcmlnaW5hbCBwYXRjaCBieQotICBSb2dlciBTZXJ3eS4KLQotLSBJc3N1ZSAjMTM0NDkgc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG1ldGhvZCBoYXMgYSBuZXcgImJsb2NraW5nIiBwYXJhbWV0ZXIgd2hpY2gKKy0gSXNzdWUgIzEzNDQ5OiBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbWV0aG9kIGhhcyBhIG5ldyAiYmxvY2tpbmciIHBhcmFtZXRlciB3aGljaAogICB3aGVuIHNldCB0byBGYWxzZSBtYWtlcyBydW4oKSBleGVjdXRlIHRoZSBzY2hlZHVsZWQgZXZlbnRzIGR1ZSB0byBleHBpcmUKICAgc29vbmVzdCAoaWYgYW55KSBhbmQgdGhlbiByZXR1cm4uICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2zDoC4KIAotLSBJc3N1ZSAjODY4NCBzY2hlZC5zY2hlZHVsZXIgY2xhc3MgY2FuIGJlIHNhZmVseSB1c2VkIGluIG11bHRpLXRocmVhZGVkCistIElzc3VlICM4Njg0OiBzY2hlZC5zY2hlZHVsZXIgY2xhc3MgY2FuIGJlIHNhZmVseSB1c2VkIGluIG11bHRpLXRocmVhZGVkCiAgIGVudmlyb25tZW50cy4gIFBhdGNoIGJ5IEpvc2lhaCBDYXJsc29uIGFuZCBHaWFtcGFvbG8gUm9kb2zDoC4KIAogLSBBbGlhcyByZXNvdXJjZS5lcnJvciB0byBPU0Vycm9yIGFsYSBQRVAgMzE1MS4KQEAgLTI1NDQsMTIgKzI0OTgsOSBAQAogICAnaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlcicsICdubnRwbGliLk5OVFAueGd0aXRsZScsICdubnRwbGliLk5OVFAueHBhdGgnLAogICBhbmQgcHJpdmF0ZSBhdHRyaWJ1dGVzIG9mICdzbXRwZC5TTVRQQ2hhbm5lbCcuCiAKLS0gSXNzdWUgIzU5MDUsICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKKy0gSXNzdWUgIzU5MDUsIElzc3VlICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKICAgZW5jb2RpbmcsIGluc3RlYWQgb2YgVVRGLTgsIGlmIHRoZSB3Y3NmdGltZSgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCiAKLS0gSXNzdWUgIzg2NDE6IFVwZGF0ZSBJRExFIDMgc3ludGF4IGNvbG9yaW5nIHRvIHJlY29nbml6ZSBiIi4uIiBhbmQgbm90IHUiLi4iLgotICBQYXRjaCBieSBUYWwgRWluYXQuCi0KIC0gSXNzdWUgIzEzNDY0OiBBZGQgYSByZWFkaW50bygpIG1ldGhvZCB0byBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuICBQYXRjaAogICBieSBKb24gS3Vobi4KIApAQCAtMjY2MSw5ICsyNjEyLDYgQEAKIC0gSXNzdWUgIzEwODE3OiBGaXggdXJscmV0cmlldmUgZnVuY3Rpb24gdG8gcmFpc2UgQ29udGVudFRvb1Nob3J0RXJyb3IgZXZlbgogICB3aGVuIHJlcG9ydGhvb2sgaXMgTm9uZS4gUGF0Y2ggYnkgSnlya2kgUHVsbGlhaW5lbi4KIAotLSBJc3N1ZSAjMTMyOTY6IEZpeCBJRExFIHRvIGNsZWFyIGNvbXBpbGUgX19mdXR1cmVfXyBmbGFncyBvbiBzaGVsbCByZXN0YXJ0LgotICAoUGF0Y2ggYnkgUm9nZXIgU2Vyd3kpCi0KIC0gRml4IHRoZSB4bWxycGMuY2xpZW50IHVzZXIgYWdlbnQgdG8gcmV0dXJuIHNvbWV0aGluZyBzaW1pbGFyIHRvCiAgIHVybGxpYi5yZXF1ZXN0IHVzZXIgYWdlbnQ6ICJQeXRob24teG1scnBjLzMuMyIuCiAKQEAgLTI3NjYsMTAgKzI3MTQsNiBAQAogLSBJc3N1ZSAjMTMwMzQ6IFdoZW4gZGVjb2Rpbmcgc29tZSBTU0wgY2VydGlmaWNhdGVzLCB0aGUgc3ViamVjdEFsdE5hbWUKICAgZXh0ZW5zaW9uIGNvdWxkIGJlIHVucmVwb3J0ZWQuCiAKLS0gSXNzdWUgIzk4NzE6IFByZXZlbnQgSURMRSAzIGNyYXNoIHdoZW4gZ2l2ZW4gYnl0ZSBzdGluZ3MKLSAgd2l0aCBpbnZhbGlkIGhleCBlc2NhcGUgc2VxdWVuY2VzLCBsaWtlIGInXHgwJy4KLSAgKE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4pCi0KIC0gSXNzdWUgIzEyMzA2OiBFeHBvc2UgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgemxpYiBDIGxpYnJhcnkgYXMgYSBjb25zdGFudCwKICAgWkxJQl9SVU5USU1FX1ZFUlNJT04sIGluIHRoZSB6bGliIG1vZHVsZS4gUGF0Y2ggYnkgVG9yc3RlbiBMYW5kc2Nob2ZmLgogCkBAIC0yNzk4LDggKzI3NDIsNiBAQAogCiAtIElzc3VlICMxMjg3ODogRXhwb3NlIGEgX19kaWN0X18gYXR0cmlidXRlIG9uIGlvLklPQmFzZSBhbmQgaXRzIHN1YmNsYXNzZXMuCiAKLS0gSXNzdWUgIzEyNjM2OiBJRExFIHJlYWRzIHRoZSBjb2RpbmcgY29va2llIHdoZW4gZXhlY3V0aW5nIGEgUHl0aG9uIHNjcmlwdC4KLQogLSBJc3N1ZSAjMTI0OTQ6IE9uIGVycm9yLCBjYWxsKCksIGNoZWNrX2NhbGwoKSwgY2hlY2tfb3V0cHV0KCkgYW5kCiAgIGdldHN0YXR1c291dHB1dCgpIGZ1bmN0aW9ucyBvZiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgbm93IGtpbGwgdGhlIHByb2Nlc3MsCiAgIHJlYWQgaXRzIHN0YXR1cyAodG8gYXZvaWQgem9tYmlzKSBhbmQgY2xvc2UgcGlwZXMuCkBAIC0yODY5LDkgKzI4MTEsNiBAQAogCiAtIElzc3VlICMxMDA4NzogRml4IHRoZSBodG1sIG91dHB1dCBmb3JtYXQgb2YgdGhlIGNhbGVuZGFyIG1vZHVsZS4KIAotLSBJc3N1ZSAjMTI1NDA6IFByZXZlbnQgem9tYmllIElETEUgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgZHVlIHRvIGNoYW5nZXMKLSAgaW4gb3Mua2lsbCgpLgotCiAtIElzc3VlICMxMzEyMTogYWRkIHN1cHBvcnQgZm9yIGlucGxhY2UgbWF0aCBvcGVyYXRvcnMgdG8gY29sbGVjdGlvbnMuQ291bnRlci4KIAogLSBBZGQgc3VwcG9ydCBmb3IgdW5hcnkgcGx1cyBhbmQgdW5hcnkgbWludXMgdG8gY29sbGVjdGlvbnMuQ291bnRlci4KQEAgLTI5MDMsNyArMjg0Miw3IEBACiAgIENvbmRpdGlvbiwgZXRjLikgdXNlZCB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5pbmcgaW5zdGFuY2VzIG9mIGhpZGRlbgogICBjbGFzc2VzIChfRXZlbnQsIF9Db25kaXRpb24sIGV0Yy4pLCBiZWNhdXNlIChpZiBHdWlkbyByZWNhbGxzIGNvcnJlY3RseSkgdGhpcwogICBjb2RlIHByZS1kYXRlcyB0aGUgYWJpbGl0eSB0byBzdWJjbGFzcyBleHRlbnNpb24gdHlwZXMuICBJdCBpcyBub3cgcG9zc2libGUKLSAgdG8gaW5oZXJpdCBmcm9tIHRoZXNlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgdG8gaW1wb3J0IHRoZSBwcml2YXRlCisgIHRvIGluaGVyaXQgZnJvbSB0aGVzZSBjbGFzc2VzLCB3aXRob3V0IGhhdmluZyB0byBpbXBvcnQgdGhlIHByaXZhdGUKICAgdW5kZXJzY29yZWQgbmFtZXMgbGlrZSBtdWx0aXByb2Nlc3NpbmcgZGlkLgogCiAtIElzc3VlICM5NzIzOiBBZGQgc2hsZXgucXVvdGUgZnVuY3Rpb25zLCB0byBlc2NhcGUgZmlsZW5hbWVzIGFuZCBjb21tYW5kCkBAIC0yOTE3LDE0ICsyODU2LDggQEAKIC0gSXNzdWUgIzEyNjA3OiBJbiBzdWJwcm9jZXNzLCBmaXggaXNzdWUgd2hlcmUgaWYgc3RkaW4sIHN0ZG91dCBvciBzdGRlcnIgaXMKICAgZ2l2ZW4gYXMgYSBsb3cgZmQsIGl0IGdldHMgb3ZlcndyaXR0ZW4uCiAKLS0gSXNzdWUgIzEyNTkwOiBJRExFIGVkaXRvciB3aW5kb3cgbm93IGFsd2F5cyBkaXNwbGF5cyB0aGUgZmlyc3QgbGluZQotICB3aGVuIG9wZW5pbmcgYSBsb25nIGZpbGUuICBXaXRoIFRrIDguNSwgdGhlIGZpcnN0IGxpbmUgd2FzIGhpZGRlbi4KLQogLSBJc3N1ZSAjMTI1NzY6IEZpeCB1cmxvcGVuIGJlaGF2aW9yIG9uIHNpdGVzIHdoaWNoIGRvIG5vdCBzZW5kIChvciBvYmZ1c2NhdGVzKQotICBDb25uZWN0aW9uOmNsb3NlIGhlYWRlci4KLQotLSBJc3N1ZSAjMTIxMDI6IERvY3VtZW50IHRoYXQgYnVmZmVyZWQgZmlsZXMgbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSBiZWluZyB1c2VkCi0gIHdpdGggbW1hcC4gUGF0Y2ggYnkgU3RlZmZlbiBEYW9kZSBOdXJwbWVzby4KKyAgYGBDb25uZWN0aW9uOiBjbG9zZWBgIGhlYWRlci4KIAogLSBJc3N1ZSAjMTI1NjA6IEJ1aWxkIGxpYnB5dGhvbi5zbyBvbiBPcGVuQlNELiBQYXRjaCBieSBTdGVmYW4gU3BlcmxpbmcuCiAKQEAgLTMxNzksNyArMzExMiw3IEBACiAtIElzc3VlICMxMjE3NTogRmlsZUlPLnJlYWRhbGwoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpbnN0ZWFkIG9mIGFuIElPRXJyb3IKICAgaWYgdGhlIGZpbGUgaXMgY2xvc2VkLgogCi0tIElzc3VlICMxMTEwOTogTmV3IHNlcnZpY2VfYWN0aW9uIG1ldGhvZCBmb3IgQmFzZVNlcnZlciwgdXNlZCBieSBGb3JraW5nTWl4SW4KKy0gSXNzdWUgIzExMTA5OiBOZXcgc2VydmljZV9hY3Rpb24gbWV0aG9kIGZvciBCYXNlU2VydmVyLCB1c2VkIGJ5IEZvcmtpbmdNaXhpbgogICBjbGFzcyBmb3IgY2xlYW51cC4gSW5pdGlhbCBQYXRjaCBieSBKdXN0aW4gV2Fya2VudGluLgogCiAtIElzc3VlICMxMjA0NTogQXZvaWQgZHVwbGljYXRlIGV4ZWN1dGlvbiBvZiBjb21tYW5kIGluCkBAIC0zMjI0LDkgKzMxNTcsNiBAQAogICBwYXNzaW5nIGEgYGBjb250ZXh0YGAgYXJndW1lbnQgcG9pbnRpbmcgdG8gYW4gc3NsLlNTTENvbnRleHQgaW5zdGFuY2UuCiAgIFBhdGNoIGJ5IEthc3VuIEhlcmF0aC4KIAotLSBJc3N1ZSAjMTEwODg6IGRvbid0IGNyYXNoIHdoZW4gdXNpbmcgRjUgdG8gcnVuIGEgc2NyaXB0IGluIElETEUgb24gTWFjT1NYCi0gIHdpdGggVGsgOC41LgotCiAtIElzc3VlICM5NTE2OiBJc3N1ZSAjOTUxNjogYXZvaWQgZXJyb3JzIGluIHN5c2NvbmZpZyB3aGVuIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAogICBpcyBzZXQgaW4gc2hlbGwuCiAKQEAgLTMyNDYsMTAgKzMxNzYsNiBAQAogLSBJc3N1ZSAjOTk3MTogV3JpdGUgYW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlcmVkUmVhZGVyLnJlYWRpbnRvKCkuCiAgIFBhdGNoIGJ5IEpvaG4gTydDb25ub3IuCiAKLS0gSXNzdWUgIzEwMjg6IFRrIHJldHVybnMgaW52YWxpZCBVbmljb2RlIG51bGwgaW4gJUE6IFVuaWNvZGVEZWNvZGVFcnJvci4KLSAgV2l0aCBUayA8IDguNSBfdGtpbnRlci5jOlB5dGhvbkNtZCgpIHJhaXNlZCBVbmljb2RlRGVjb2RlRXJyb3IsIGNhdXNlZAotICBJRExFIHRvIGV4aXQuICBDb252ZXJ0ZWQgdG8gdmFsaWQgVW5pY29kZSBudWxsIGluIFB5dGhvbkNtZCgpLgotCiAtIElzc3VlICMxMTc5OTogdXJsbGliLnJlcXVlc3QgQXV0aGVudGljYXRpb24gSGFuZGxlcnMgd2lsbCByYWlzZSBhIFZhbHVlRXJyb3IKICAgd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiB1bnN1cHBvcnRlZCBBdXRoZW50aWNhdGlvbiBTY2hlbWUuIFBhdGNoIGNvbnRyaWJ1dGVkCiAgIGJ5IFl1dmFsIEdyZWVuZmllbGQuCkBAIC0zMjU5LDcgKzMxODUsNyBAQAogICBiaW5hcnkgbW9kZSwgYnV0IGVuc3VyZSB0aGF0IHRoZSBzaGViYW5nIGlzIGRlY29kYWJsZSBmcm9tIFVURi04IGFuZCBmcm9tIHRoZQogICBlbmNvZGluZyBvZiB0aGUgc2NyaXB0LgogCi0tIElzc3VlICM4NDk4OiBJbiBzb2NrZXQuYWNjZXB0KCksIGFsbG93IHRvIHNwZWNpZnkgMCBhcyBhIGJhY2tsb2cgdmFsdWUgaW4KKy0gSXNzdWUgIzg0OTg6IEluIHNvY2tldC5hY2NlcHQoKSwgYWxsb3cgc3BlY2lmeWluZyAwIGFzIGEgYmFja2xvZyB2YWx1ZSBpbgogICBvcmRlciB0byBhY2NlcHQgZXhhY3RseSBvbmUgY29ubmVjdGlvbi4gIFBhdGNoIGJ5IERhbmllbCBFdmVycy4KIAogLSBJc3N1ZSAjMTIwMTE6IHNpZ25hbC5zaWduYWwoKSBhbmQgc2lnbmFsLnNpZ2ludGVycnVwdCgpIHJhaXNlIGFuIE9TRXJyb3IsCkBAIC0zNDg2LDEyICszNDEyLDEyIEBACiAKIC0gSXNzdWUgIzc2Mzk6IEZpeCBzaG9ydCBmaWxlIG5hbWUgZ2VuZXJhdGlvbiBpbiBiZGlzdF9tc2kKIAotLSBJc3N1ZSAjMTE2NTk6IEZpeCBSZXNvdXJjZVdhcm5pbmcgaW4gdGVzdF9zdWJwcm9jZXNzIGludHJvZHVjZWQgYnkgIzExNDU5LgotICBQYXRjaCBieSBCZW4gSGF5ZGVuLgotCiAtIElzc3VlICMxMTYzNTogRG9uJ3QgdXNlIHBvbGxpbmcgaW4gd29ya2VyIHRocmVhZHMgYW5kIHByb2Nlc3NlcyBsYXVuY2hlZCBieQogICBjb25jdXJyZW50LmZ1dHVyZXMuCiAKKy0gSXNzdWUgIzU4NDU6IEF1dG9tYXRpY2FsbHkgcmVhZCByZWFkbGluZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBjb21wbGV0aW9uCisgIGluIGludGVyYWN0aXZlIG1vZGUuCisKIC0gSXNzdWUgIzY4MTE6IEFsbG93IGltcG9ydGxpYiB0byBjaGFuZ2UgYSBjb2RlIG9iamVjdCdzIGNvX2ZpbGVuYW1lIGF0dHJpYnV0ZQogICB0byBtYXRjaCB0aGUgcGF0aCB0byB3aGVyZSB0aGUgc291cmNlIGNvZGUgY3VycmVudGx5IGlzLCBub3Qgd2hlcmUgdGhlIGNvZGUKICAgb2JqZWN0IG9yaWdpbmFsbHkgY2FtZSBmcm9tLgpAQCAtMzUyNiw3ICszNDUyLDcgQEAKIAogLSBJc3N1ZSAjMTExMjc6IFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdHJ5aW5nIHRvIHBpY2tsZSBhIHNvY2tldCBvYmplY3QuCiAKLS0gSXNzdWUgIzExNTYzOiBDb25uZWN0aW9uOmNsb3NlIGhlYWRlciBpcyBzZW50IGJ5IHJlcXVlc3RzIHVzaW5nIFVSTE9wZW5lcgorLSBJc3N1ZSAjMTE1NjM6IGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIgaXMgc2VudCBieSByZXF1ZXN0cyB1c2luZyBVUkxPcGVuZXIKICAgY2xhc3Mgd2hpY2ggaGVscHMgaW4gY2xvc2luZyBvZiBzb2NrZXRzIGFmdGVyIGNvbm5lY3Rpb24gaXMgb3Zlci4gUGF0Y2gKICAgY29udHJpYnV0aW9ucyBieSBKZWZmIE1jTmVpbCBhbmQgTmFkZWVtIFZhd2RhLgogCkBAIC0zNTQxLDggKzM0NjcsNiBAQAogLSBJc3N1ZSAjMTA5Nzk6IHVuaXR0ZXN0IHN0ZG91dCBidWZmZXJpbmcgbm93IHdvcmtzIHdpdGggY2xhc3MgYW5kIG1vZHVsZQogICBzZXR1cCBhbmQgdGVhcmRvd24uCiAKLS0gSXNzdWUgIzExNTc3OiBmaXggUmVzb3VyY2VXYXJuaW5nIHRyaWdnZXJlZCBieSBpbXByb3ZlZCBiaW5oZXggdGVzdCBjb3ZlcmFnZQotCiAtIElzc3VlICMxMTI0MzogZml4IHRoZSBwYXJhbWV0ZXIgcXVlcnlpbmcgbWV0aG9kcyBvZiBNZXNzYWdlIHRvIHdvcmsgaWYKICAgdGhlIGhlYWRlcnMgY29udGFpbiB1bi1lbmNvZGVkIG5vbi1BU0NJSSBkYXRhLgogCkBAIC0zNTc1LDkgKzM0OTksNiBAQAogLSBJc3N1ZSAjMTE1NTQ6IEZpeGVkIHN1cHBvcnQgZm9yIEphcGFuZXNlIGNvZGVjczsgcHJldmlvdXNseSB0aGUgYm9keSBvdXRwdXQKICAgZW5jb2Rpbmcgd2FzIG5vdCBkb25lIGlmIGV1Yy1qcCBvciBzaGlmdC1qaXMgd2FzIHNwZWNpZmllZCBhcyB0aGUgY2hhcnNldC4KIAotLSBJc3N1ZSAjMTE1MDk6IFNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBmaWxlaW5wdXQuCi0gIFBhdGNoIGJ5IERlbnZlciBDb25leWJlYXJlIGF0IFB5Q29uIDIwMTEgU3ByaW50cy4KLQogLSBJc3N1ZSAjMTE0MDc6IGBUZXN0Q2FzZS5ydW5gIHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3QgdXNlZCBvciBjcmVhdGVkLgogICBDb250cmlidXRlZCBieSBKYW5hdGhhbiBIYXJ0bGV5LgogCkBAIC0zNzAwLDExICszNjIxLDYgQEAKIAogLSBJc3N1ZSAjOTM0ODogUmFpc2UgYW4gZWFybHkgZXJyb3IgaWYgYXJncGFyc2UgbmFyZ3MgYW5kIG1ldGF2YXIgZG9uJ3QgbWF0Y2guCiAKLS0gSXNzdWUgIzg5ODI6IEltcHJvdmUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBhcmdwYXJzZSBOYW1lc3BhY2Ugb2JqZWN0LgotCi0tIElzc3VlICM5MzQzOiBEb2N1bWVudCB0aGF0IGFyZ3BhcnNlIHBhcmVudCBwYXJzZXJzIG11c3QgYmUgY29uZmlndXJlZCBiZWZvcmUKLSAgdGhlaXIgY2hpbGRyZW4uCi0KIC0gSXNzdWUgIzkwMjY6IEZpeCBvcmRlciBvZiBhcmdwYXJzZSBzdWItY29tbWFuZHMgaW4gaGVscCBtZXNzYWdlcy4KIAogLSBJc3N1ZSAjOTM0NzogRml4IGZvcm1hdHRpbmcgZm9yIHR1cGxlcyBpbiBhcmdwYXJzZSB0eXBlPSBlcnJvciBtZXNzYWdlcy4KQEAgLTM3NTcsMTAgKzM2NzMsNjEgQEAKIAogLSBJc3N1ZSAjMTE0OTU6IE9TRiBzdXBwb3J0IGlzIGVsaW1pbmF0ZWQuIEl0IHdhcyBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIuCiAKLQogSURMRQogLS0tLQogCistIElzc3VlICMxNDQwOTogSURMRSBub3cgcHJvcGVybHkgZXhlY3V0ZXMgY29tbWFuZHMgaW4gdGhlIFNoZWxsIHdpbmRvdworICB3aGVuIGl0IGNhbm5vdCByZWFkIHRoZSBub3JtYWwgY29uZmlnIGZpbGVzIG9uIHN0YXJ0dXAgYW5kCisgIGhhcyB0byB1c2UgdGhlIGJ1aWx0LWluIGRlZmF1bHQga2V5IGJpbmRpbmdzLgorICBUaGVyZSB3YXMgcHJldmlvdXNseSBhIGJ1ZyBpbiBvbmUgb2YgdGhlIGRlZmF1bHRzLgorCistIElETEUgY2FuIGJlIGxhdW5jaGVkIGFzIHB5dGhvbiAtbSBpZGxlbGliCisKKy0gSXNzdWUgIzM1NzM6IElETEUgaGFuZ3Mgd2hlbiBwYXNzaW5nIGludmFsaWQgY29tbWFuZCBsaW5lIGFyZ3MKKyAgKGRpcmVjdG9yeShpZXMpIGluc3RlYWQgb2YgZmlsZShzKSkgKFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvKQorCistIElzc3VlICMxNDIwMDogSURMRSBzaGVsbCBjcmFzaCBvbiBwcmludGluZyBub24tQk1QIHVuaWNvZGUgY2hhcmFjdGVyLgorCistIElzc3VlICM1MjE5OiBQcmV2ZW50IGV2ZW50IGhhbmRsZXIgY2FzY2FkZSBpbiBJRExFLgorCistIElzc3VlICM5NjQ0Mzc6IE1ha2UgSURMRSBoZWxwIHdpbmRvdyBub24tbW9kYWwuCisgIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTM5MzM6IElETEUgYXV0by1jb21wbGV0ZSBkaWQgbm90IHdvcmsgd2l0aCBzb21lIGltcG9ydGVkCisgIG1vZHVsZSwgbGlrZSBoYXNobGliLiAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIElzc3VlICMxMzUwNjogQWRkICcnIHRvIHBhdGggZm9yIElETEUgU2hlbGwgd2hlbiBzdGFydGVkIGFuZCByZXN0YXJ0ZWQgd2l0aCBSZXN0YXJ0IFNoZWxsLgorICBPcmlnaW5hbCBwYXRjaGVzIGJ5IE1hcmNvIFNjYXRhZ2xpbmkgYW5kIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICM0NjI1OiBJZiBJRExFIGNhbm5vdCB3cml0ZSB0byBpdHMgcmVjZW50IGZpbGUgb3IgYnJlYWtwb2ludCBmaWxlcywKKyAgZGlzcGxheSBhIG1lc3NhZ2UgcG9wdXAgYW5kIGNvbnRpbnVlIHJhdGhlciB0aGFuIGNyYXNoLiAgT3JpZ2luYWwgcGF0Y2ggYnkKKyAgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzg2NDE6IFVwZGF0ZSBJRExFIDMgc3ludGF4IGNvbG9yaW5nIHRvIHJlY29nbml6ZSBiIi4uIiBhbmQgbm90IHUiLi4iLgorICBQYXRjaCBieSBUYWwgRWluYXQuCisKKy0gSXNzdWUgIzEzMjk2OiBGaXggSURMRSB0byBjbGVhciBjb21waWxlIF9fZnV0dXJlX18gZmxhZ3Mgb24gc2hlbGwgcmVzdGFydC4KKyAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIElzc3VlICM5ODcxOiBQcmV2ZW50IElETEUgMyBjcmFzaCB3aGVuIGdpdmVuIGJ5dGUgc3RpbmdzCisgIHdpdGggaW52YWxpZCBoZXggZXNjYXBlIHNlcXVlbmNlcywgbGlrZSBiJ1x4MCcuCisgIChPcmlnaW5hbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuKQorCistIElzc3VlICMxMjYzNjogSURMRSByZWFkcyB0aGUgY29kaW5nIGNvb2tpZSB3aGVuIGV4ZWN1dGluZyBhIFB5dGhvbiBzY3JpcHQuCisKKy0gSXNzdWUgIzEyNTQwOiBQcmV2ZW50IHpvbWJpZSBJRExFIHByb2Nlc3NlcyBvbiBXaW5kb3dzIGR1ZSB0byBjaGFuZ2VzCisgIGluIG9zLmtpbGwoKS4KKworLSBJc3N1ZSAjMTI1OTA6IElETEUgZWRpdG9yIHdpbmRvdyBub3cgYWx3YXlzIGRpc3BsYXlzIHRoZSBmaXJzdCBsaW5lCisgIHdoZW4gb3BlbmluZyBhIGxvbmcgZmlsZS4gIFdpdGggVGsgOC41LCB0aGUgZmlyc3QgbGluZSB3YXMgaGlkZGVuLgorCistIElzc3VlICMxMTA4ODogZG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBGNSB0byBydW4gYSBzY3JpcHQgaW4gSURMRSBvbiBNYWNPU1gKKyAgd2l0aCBUayA4LjUuCisKKy0gSXNzdWUgIzEwMjg6IFRrIHJldHVybnMgaW52YWxpZCBVbmljb2RlIG51bGwgaW4gJUE6IFVuaWNvZGVEZWNvZGVFcnJvci4KKyAgV2l0aCBUayA8IDguNSBfdGtpbnRlci5jOlB5dGhvbkNtZCgpIHJhaXNlZCBVbmljb2RlRGVjb2RlRXJyb3IsIGNhdXNlZAorICBJRExFIHRvIGV4aXQuICBDb252ZXJ0ZWQgdG8gdmFsaWQgVW5pY29kZSBudWxsIGluIFB5dGhvbkNtZCgpLgorCiAtIElzc3VlICMxMTcxODogSURMRSdzIG9wZW4gbW9kdWxlIGRpYWxvZyBjb3VsZG4ndCBmaW5kIHRoZSBfX2luaXRfXy5weQogICBmaWxlIGluIGEgcGFja2FnZS4KIApAQCAtMzc5MCw2ICszNzU3LDEwIEBACiBFeHRlbnNpb24gTW9kdWxlcwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMTY4NDc6IEZpeGVkIGltcHJvcGVyIHVzZSBvZiBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koKSBpbgorICBub24tcHlkZWJ1ZyBidWlsZHMuIFNldmVyYWwgZXh0ZW5zaW9uIG1vZHVsZXMgbm93IGNvbXBpbGUgY2xlYW5seSB3aGVuCisgIGFzc2VydCgpcyBhcmUgZW5hYmxlZCBpbiBzdGFuZGFyZCBidWlsZHMgKC1EREVCVUcgZmxhZykuCisKIC0gSXNzdWUgIzEzODQwOiBUaGUgZXJyb3IgbWVzc2FnZSBwcm9kdWNlZCBieSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIKICAgd2hlbiBnaXZlbiBhIFVuaWNvZGUgc3RyaW5nIGhhcyBiZWVuIGZpeGVkLgogCkBAIC0zODUyLDYgKzM4MjMsMzMgQEAKIFRlc3RzCiAtLS0tLQogCistIElzc3VlICMxMzEyNTogU2lsZW5jZSBzcHVyaW91cyB0ZXN0X2xpYjJ0bzMgb3V0cHV0IHdoZW4gaW4gbm9uLXZlcmJvc2UgbW9kZS4KKyAgUGF0Y2ggYnkgTWlraGFpbCBOb3Zpa292LgorCistIElzc3VlICMxMzQ0NzogQWRkIGEgdGVzdCBmaWxlIHRvIGhvc3QgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYnVncyBpbiB0aGUKKyAgc2NyaXB0cyBmb3VuZCBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCistIElzc3VlICMxMDg4MTogRml4IHRlc3Rfc2l0ZSBmYWlsdXJlIHdpdGggT1MgWCBmcmFtZXdvcmsgYnVpbGRzLgorCistIElzc3VlICMxMzkwMTogUHJldmVudCB0ZXN0X2Rpc3R1dGlscyBmYWlsdXJlcyBvbiBPUyBYIHdpdGggLS1lbmFibGUtc2hhcmVkLgorCistIElzc3VlICMxMzg2MjogRml4IHNwdXJpb3VzIGZhaWx1cmUgaW4gdGVzdF96bGliIGR1ZSB0byBydW50aW1lL2NvbXBpbGUgdGltZQorICBtaW5vciB2ZXJzaW9ucyBub3QgbWF0Y2hpbmcuCisKKy0gSXNzdWUgIzEyODA0OiBGaXggdGVzdF9zb2NrZXQgYW5kIHRlc3RfdXJsbGliMm5ldCBmYWlsdXJlcyB3aGVuIHJ1bm5pbmcgdGVzdHMKKyAgb24gYSBzeXN0ZW0gd2l0aG91dCBpbnRlcm5ldCBhY2Nlc3MuCisKKy0gSXNzdWUgIzEzNzI2OiBGaXggdGhlIGFtYmlndW91cyAtUyBmbGFnIGluIHJlZ3J0ZXN0LiBJdCBpcyAtby8tLXNsb3cgZm9yIHNsb3cKKyAgdGVzdHMuCisKKy0gSXNzdWUgIzExNjU5OiBGaXggUmVzb3VyY2VXYXJuaW5nIGluIHRlc3Rfc3VicHJvY2VzcyBpbnRyb2R1Y2VkIGJ5ICMxMTQ1OS4KKyAgUGF0Y2ggYnkgQmVuIEhheWRlbi4KKworLSBJc3N1ZSAjMTE1Nzc6IGZpeCBSZXNvdXJjZVdhcm5pbmcgdHJpZ2dlcmVkIGJ5IGltcHJvdmVkIGJpbmhleCB0ZXN0IGNvdmVyYWdlCisKKy0gSXNzdWUgIzExNTA5OiBTaWduaWZpY2FudGx5IGluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2YgZmlsZWlucHV0LgorICBQYXRjaCBieSBEZW52ZXIgQ29uZXliZWFyZSBhdCBQeUNvbiAyMDExIFNwcmludHMuCisKIC0gSXNzdWUgIzExNjg5OiBGaXggYSB2YXJpYWJsZSBzY29waW5nIGVycm9yIGluIGFuIHNxbGl0ZTMgdGVzdAogCiAtIElzc3VlICMxMzc4NjogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgJ3RyYWNlJyBsb25nIG9wdGlvbiBmcm9tIHJlZ3J0ZXN0LnB5LgpAQCAtMzg4Nyw3ICszODg1LDcgQEAKIC0gSXNzdWUgIzEyMzMxOiBUaGUgdGVzdCBzdWl0ZSBmb3IgbGliMnRvMyBjYW4gbm93IHJ1biBmcm9tIGFuIGluc3RhbGxlZAogICBQeXRob24uCiAKLS0gSXNzdWUgIzEyNjI2OiBJbiByZWdydGVzdCwgYWxsb3cgdG8gZmlsdGVyIHRlc3RzIHVzaW5nIGEgZ2xvYiBmaWx0ZXIKKy0gSXNzdWUgIzEyNjI2OiBJbiByZWdydGVzdCwgYWxsb3cgZmlsdGVyaW5nIHRlc3RzIHVzaW5nIGEgZ2xvYiBmaWx0ZXIKICAgd2l0aCB0aGUgYGAtbWBgIChvciBgYC0tbWF0Y2hgYCkgb3B0aW9uLiAgVGhpcyB3b3JrcyB3aXRoIGFsbCB0ZXN0IGNhc2VzCiAgIHVzaW5nIHRoZSB1bml0dGVzdCBtb2R1bGUuICBUaGlzIGlzIHVzZWZ1bCB3aXRoIGxvbmcgdGVzdCBzdWl0ZXMKICAgc3VjaCBhcyB0ZXN0X2lvIG9yIHRlc3Rfc3VicHJvY2Vzcy4KQEAgLTQwMzAsNyArNDAyOCw3IEBACiAtIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHkuIFBhdGNoIGJ5IEFsaWNpYQogICBBcmxlbgogCi0tIElzc3VlICMxMTQ5MDogdGVzdF9zdWJwcm9jZXNzOnRlc3RfbGVha2luZ19mZHNfb25fZXJyb3Igbm8gbG9uZ2VyIGdpdmVzIGEKKy0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3MudGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQogICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgogCiAtIElzc3VlICMxMTIyMzogRml4IHRlc3RfdGhyZWFkc2lnbmFscyB0byBmYWlsLCBub3QgaGFuZywgd2hlbiB0aGUKQEAgLTQwNTQsNiArNDA1MiwyMyBAQAogQy1BUEkKIC0tLS0tCiAKKy0gSXNzdWUgIzEzNDUyOiBQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbCgpIGRvZXNuJ3Qgc3VwcG9ydCBlcnJvciBoYW5kbGVycworICBkaWZmZXJlbnQgdGhhbiAic3RyaWN0IiBhbnltb3JlLiBUaGUgY2FsbGVyIHdhcyB1bmFibGUgdG8gY29tcHV0ZSB0aGUKKyAgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcjogaXQgZGVwZW5kcyBvbiB0aGUgZXJyb3IgaGFuZGxlci4KKworLSBJc3N1ZSAjMTM1NjA6IEFkZCBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKCksIFB5VW5pY29kZV9EZWNvZGVMb2NhbGVBbmRTaXplKCkKKyAgYW5kIFB5VW5pY29kZV9FbmNvZGVMb2NhbGUoKSBmdW5jdGlvbnMgdG8gdGhlIEMgQVBJIHRvIGRlY29kZS9lbmNvZGUgZnJvbS90bworICB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzEwODMxOiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIHN1cHBvcnRzICVsaSwgJWxsaSBhbmQgJXppIGZvcm1hdHMuCisKKy0gSXNzdWUgIzExMjQ2OiBGaXggUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVWIikgdG8gZGVjb2RlIHRoZSBieXRlIHN0cmluZyBmcm9tCisgIFVURi04ICh3aXRoIHJlcGxhY2UgZXJyb3IgaGFuZGxlcikgaW5zdGVhZCBvZiBJU08tODg1OS0xIChpbiBzdHJpY3QgbW9kZSkuCisgIFBhdGNoIHdyaXR0ZW4gYnkgUmF5IEFsbGVuLgorCistIElzc3VlICMxMDgzMDogRml4IFB5VW5pY29kZV9Gcm9tRm9ybWF0VigiJWMiKSBmb3Igbm9uLUJNUCBjaGFyYWN0ZXJzIG9uCisgIG5hcnJvdyBidWlsZC4KKwogLSBBZGQgUHlPYmplY3RfR2VuZXJpY0dldERpY3QgYW5kIFB5T2JqZWN0X0dlbmVyaVNldERpY3QuIFRoZXkgYXJlIGdlbmVyaWMKICAgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgZ2V0dGVyIGFuZCBzZXR0ZXIgb2YgYSBgYF9fZGljdF9fYGAgZGVzY3JpcHRvciBvZiBDCiAgIHR5cGVzLgpAQCAtNDA3OSw2ICs0MDk0LDI0IEBACiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzEzOTg5OiBEb2N1bWVudCB0aGF0IEd6aXBGaWxlIGRvZXMgbm90IHN1cHBvcnQgdGV4dCBtb2RlLCBhbmQgZ2l2ZSBhCisgIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIHdoZW4gb3BlbmVkIHdpdGggYW4gaW52YWxpZCBtb2RlIHN0cmluZy4KKworLSBJc3N1ZSAjMTM5MjE6IFVuZG9jdW1lbnQgYW5kIGNsZWFuIHVwIHNxbGl0ZTMuT3B0aW1pemVkVW5pY29kZSwKKyAgd2hpY2ggaXMgb2Jzb2xldGUgaW4gUHl0aG9uIDMueC4gSXQncyBub3cgYWxpYXNlZCB0byBzdHIgZm9yCisgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCistIElzc3VlICMxMjEwMjogRG9jdW1lbnQgdGhhdCBidWZmZXJlZCBmaWxlcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIGJlaW5nIHVzZWQKKyAgd2l0aCBtbWFwLiBQYXRjaCBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICM4OTgyOiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYXJncGFyc2UgTmFtZXNwYWNlIG9iamVjdC4KKworLSBJc3N1ZSAjOTM0MzogRG9jdW1lbnQgdGhhdCBhcmdwYXJzZSBwYXJlbnQgcGFyc2VycyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlCisgIHRoZWlyIGNoaWxkcmVuLgorCistIElzc3VlICMxMzQ5ODogQ2xhcmlmeSBkb2NzIG9mIG9zLm1ha2VkaXJzKCkncyBleGlzdF9vayBhcmd1bWVudC4gIERvbmUgd2l0aAorICBncmVhdCBuYXRpdmUtc3BlYWtlciBoZWxwIGZyb20gUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlcyAjMTM0OTEgYW5kICMxMzk5NTogRml4IG1hbnkgZXJyb3JzIGluIHNxbGl0ZTMgZG9jdW1lbnRhdGlvbi4KICAgSW5pdGlhbCBwYXRjaCBmb3IgIzEzNDkxIGJ5IEpvaGFubmVzIFZvZ2VsLgogCkBAIC00MTg4LDcgKzQyMjEsNyBAQAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzEwNDUxOiBtZW1vcnl2aWV3IG9iamVjdHMgY291bGQgYWxsb3cgdG8gbXV0YXRlIGEgcmVhZGFibGUgYnVmZmVyLgorLSBJc3N1ZSAjMTA0NTE6IG1lbW9yeXZpZXcgb2JqZWN0cyBjb3VsZCBhbGxvdyBtdXRhdGluZyBhIHJlYWRhYmxlIGJ1ZmZlci4KICAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KIAogTGlicmFyeQpAQCAtNDczMiw3ICs0NzY1LDcgQEAKIAogLSBBZGQgdGhlICJkaXNwbGF5IiBhbmQgInVuZGlzcGxheSIgcGRiIGNvbW1hbmRzLgogCi0tIElzc3VlICM3MjQ1OiBBZGQgYSBTSUdJTlQgaGFuZGxlciBpbiBwZGIgdGhhdCBhbGxvd3MgdG8gYnJlYWsgYSBwcm9ncmFtIGFnYWluCistIElzc3VlICM3MjQ1OiBBZGQgYSBTSUdJTlQgaGFuZGxlciBpbiBwZGIgdGhhdCBhbGxvd3MgYnJlYWtpbmcgYSBwcm9ncmFtIGFnYWluCiAgIGFmdGVyIGEgImNvbnRpbnVlIiBjb21tYW5kLgogCiAtIEFkZCB0aGUgImludGVyYWN0IiBwZGIgY29tbWFuZC4KQEAgLTY2MDAsNyArNjYzMyw3IEBACiAgIFB5RXJyX0Zvcm1hdCwgb24gbWFjaGluZXMgd2l0aCBIQVZFX0xPTkdfTE9ORyBkZWZpbmVkLgogCiAtIElzc3VlICM2MTUxOiBNYWRlIFB5RGVzY3JfQ09NTU9OIGNvbmZvcm0gdG8gc3RhbmRhcmQgQyAobGlrZSBQeU9iamVjdF9IRUFEIGluCi0gIFBFUCAzMTIzKS4gIFRoZSBQeURlc2NyX1RZUEUgYW5kIFB5RGVzY3JfTkFNRSBtYWNyb3Mgc2hvdWxkIGJlIHNob3VsZCB1c2VkIGZvcgorICBQRVAgMzEyMykuICBUaGUgUHlEZXNjcl9UWVBFIGFuZCBQeURlc2NyX05BTUUgbWFjcm9zIHNob3VsZCBiZSB1c2VkIGZvcgogICBhY2Nlc3NpbmcgdGhlIGRfdHlwZSBhbmQgZF9uYW1lIG1lbWJlcnMgb2Ygc3RydWN0dXJlcyB1c2luZyBQeURlc2NyX0NPTU1PTi4KIAogLSBJc3N1ZSAjNjQwNTogUmVtb3ZlIGR1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9ucyBpbiBkZXNjcm9iamVjdC5oLgpAQCAtNjg4Myw3ICs2OTE2LDcgQEAKICAgY29ycmVjdCBlbmNvZGluZy4KIAogLSBJc3N1ZSAjNDg3MDogQWRkIGFuIGBvcHRpb25zYCBhdHRyaWJ1dGUgdG8gU1NMIGNvbnRleHRzLCBhcyB3ZWxsIGFzIHNldmVyYWwKLSAgYGBPUF8qYGAgY29uc3RhbnRzIHRvIHRoZSBgc3NsYCBtb2R1bGUuICBUaGlzIGFsbG93cyB0byBzZWxlY3RpdmVseSBkaXNhYmxlCisgIGBgT1BfKmBgIGNvbnN0YW50cyB0byB0aGUgYHNzbGAgbW9kdWxlLiAgVGhpcyBhbGxvd3Mgc2VsZWN0aXZlbHkgZGlzYWJsaW5nCiAgIHByb3RvY29sIHZlcnNpb25zLCB3aGVuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgUFJPVE9DT0xfU1NMdjIzYC4KIAogLSBJc3N1ZSAjODc1OTogRml4ZWQgdXNlciBwYXRocyBpbiBzeXNjb25maWcgZm9yIHBvc2l4IGFuZCBvczIgc2NoZW1lcy4KQEAgLTcxODcsNyArNzIyMCw3IEBACiAgIGNFbGVtZW50VHJlZSBtb2R1bGUgaXMgdXBkYXRlZCB0b28uCiAKIC0gSXNzdWUgIzc3NzQ6IFNldCBzeXMuZXhlY3V0YWJsZSB0byBhbiBlbXB0eSBzdHJpbmcgaWYgYXJndlswXSBoYXMgYmVlbiBzZXQgdG8KLSAgYW4gbm9uIGV4aXN0ZW50IHByb2dyYW0gbmFtZSBhbmQgUHl0aG9uIGlzIHVuYWJsZSB0byByZXRyaWV2ZSB0aGUgcmVhbCBwcm9ncmFtCisgIGEgbm9uIGV4aXN0ZW50IHByb2dyYW0gbmFtZSBhbmQgUHl0aG9uIGlzIHVuYWJsZSB0byByZXRyaWV2ZSB0aGUgcmVhbCBwcm9ncmFtCiAgIG5hbWUuCiAKIC0gSXNzdWUgIzc4ODA6IEZpeCBzeXNjb25maWcgd2hlbiB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgaXMgYSBzeW1ib2xpYyBsaW5rLgpAQCAtNzI0MCw3ICs3MjczLDcgQEAKICAgbWVzc2FnZXMgcGFyc2VkIGJ5IGVtYWlsLlBhcnNlci5IZWFkZXJQYXJzZXIuCiAKIC0gSXNzdWUgIzczNjE6IEltcG9ydGxpYiB3YXMgbm90IHByb3Blcmx5IGNoZWNraW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4KLSAgYnl0ZWNvZGUgZmlsZSB3aGVuIGl0IHdhcyBsZXNzIHRoZW4gOCBieXRlcy4KKyAgYnl0ZWNvZGUgZmlsZSB3aGVuIGl0IHdhcyBsZXNzIHRoYW4gOCBieXRlcy4KIAogLSBJc3N1ZSAjNzYzMzogSW4gdGhlIGRlY2ltYWwgbW9kdWxlLCBDb250ZXh0IGNsYXNzIG1ldGhvZHMgKHdpdGggdGhlIGV4Y2VwdGlvbgogICBvZiBjYW5vbmljYWwgYW5kIGlzX2Nhbm9uaWNhbCkgbm93IGFjY2VwdCBpbnN0YW5jZXMgb2YgaW50IGFuZCBsb25nIHdoZXJldmVyIGEKQEAgLTc2NzYsNyArNzcwOSw3IEBACiAKIC0gSXNzdWUgIzc5MDA6IFRoZSBnZXRncm91cHMoMikgc3lzdGVtIGNhbGwgb24gTWFjT1NYIGJlaGF2ZXMgcmF0aGVyIG9kZGx5CiAgIGNvbXBhcmVkIHRvIG90aGVyIHVuaXggc3lzdGVtcy4gSW4gcGFydGljdWxhciwgb3MuZ2V0Z3JvdXBzKCkgZG9lcyBub3QgcmVmbGVjdAotICBhbnkgY2hhbmdlcyBtYWRlIHVzaW5nIG9zLnNldGdyb3VwcygpIGJ1dCBiYXNpY2x5IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lCisgIGFueSBjaGFuZ2VzIG1hZGUgdXNpbmcgb3Muc2V0Z3JvdXBzKCkgYnV0IGJhc2ljYWxseSBhbHdheXMgcmV0dXJucyB0aGUgc2FtZQogICBpbmZvcm1hdGlvbiBhcyB0aGUgaWQgY29tbWFuZC4gb3MuZ2V0Z3JvdXBzKCkgY2FuIG5vdyByZXR1cm4gbW9yZSB0aGFuIDE2CiAgIGdyb3VwcyBvbiBNYWNPU1guCiAKQEAgLTc2OTUsNyArNzcyOCw3IEBACiAtIElzc3VlICMxNTc4MjY5OiBJbXBsZW1lbnQgb3Muc3ltbGluayBmb3IgV2luZG93cyA2LjArLiAgUGF0Y2ggYnkgSmFzb24KICAgUi4gQ29vbWJzLgogCi0tIEluIHN0cnVjdC5wYWNrLCBjb3JyZWN0bHkgcHJvcG9nYXRlIGV4Y2VwdGlvbnMgZnJvbSBjb21wdXRpbmcgdGhlIHRydXRoIG9mIGFuCistIEluIHN0cnVjdC5wYWNrLCBjb3JyZWN0bHkgcHJvcGFnYXRlIGV4Y2VwdGlvbnMgZnJvbSBjb21wdXRpbmcgdGhlIHRydXRoIG9mIGFuCiAgIG9iamVjdCBpbiB0aGUgJz8nIGZvcm1hdC4KIAogLSBJc3N1ZSAjOTAwMDogZGF0ZXRpbWUudGltZXpvbmUgb2JqZWN0cyBub3cgaGF2ZSBldmFsLWZyaWVuZGx5IHJlcHIuCkBAIC04MTgyLDcgKzgyMTUsNyBAQAogICBhZGRlZCBMSUJTIHRvIE9TIFggZnJhbWV3b3JrIGJ1aWxkcy4KIAogLSBJc3N1ZSAjNTgwOTogU3BlY2lmeWluZyBib3RoIC0tZW5hYmxlLWZyYW1ld29yayBhbmQgLS1lbmFibGUtc2hhcmVkIGlzCi0gIGFuIGVycm9yLiBDb25maWd1cmUgbm93IGV4cGxpY2l0eSB0ZWxscyB5b3UgYWJvdXQgdGhpcy4KKyAgYW4gZXJyb3IuIENvbmZpZ3VyZSBub3cgZXhwbGljaXRseSB0ZWxscyB5b3UgYWJvdXQgdGhpcy4KIAogCiAKQEAgLTgyNzEsNyArODMwNCw3IEBACiAtIElzc3VlICMxNjY0OiBNYWtlIG5udHBsaWIgSVB2Ni1jYXBhYmxlLiBQYXRjaCBieSBEZXJlayBNb3JyLgogCiAtIElzc3VlICM1MDA2OiBCZXR0ZXIgaGFuZGxpbmcgb2YgdW5pY29kZSBieXRlLW9yZGVyIG1hcmtzIChCT00pIGluIHRoZSBpbwotICBsaWJyYXJ5LiBUaGlzIG1lYW5zLCBmb3IgZXhhbXBsZSwgdGhhdCBvcGVuaW5nIGFuIFVURi0xNiB0ZXh0IGZpbGUgaW4KKyAgbGlicmFyeS4gVGhpcyBtZWFucywgZm9yIGV4YW1wbGUsIHRoYXQgb3BlbmluZyBhIFVURi0xNiB0ZXh0IGZpbGUgaW4KICAgYXBwZW5kIG1vZGUgZG9lc24ndCBhZGQgYSBCT00gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBpZiB0aGUgZmlsZSBpc24ndAogICBlbXB0eS4KIApAQCAtOTE3Niw3ICs5MjA5LDcgQEAKICAgYmVlbiBiYWNrcG9ydGVkIHRvIGhlbHAgZmFjaWxpdGF0ZSB0cmFuc2l0aW9ucyBmcm9tIDIuNyB0byAzLjEuCiAKIC0gSXNzdWUgIzE4ODU6IGRpc3R1dGlscy4gV2hlbiBydW5uaW5nIHNkaXN0IHdpdGggLS1mb3JtYXRzPXRhcixnenRhcgotICB0aGUgdGFyIGZpbGUgd2FzIG92ZXJyaWRlbiBieSB0aGUgZ3p0YXIgb25lLgorICB0aGUgdGFyIGZpbGUgd2FzIG92ZXJyaWRkZW4gYnkgdGhlIGd6dGFyIG9uZS4KIAogLSBJc3N1ZSAjNDg2MzogZGlzdHV0aWxzLm13ZXJrc2NvbXBpbGVyIGhhcyBiZWVuIHJlbW92ZWQuCiAKQEAgLTkyOTUsNyArOTMyOCw3IEBACiAtIElzc3VlICM0NzU2OiB6aXBmaWxlLmlzX3ppcGZpbGUoKSBub3cgc3VwcG9ydHMgZmlsZS1saWtlIG9iamVjdHMuIFBhdGNoIGJ5CiAgIEdhYnJpZWwgR2VuZWxsaW5hLgogCi0tIElzc3VlICM0NTc0OiByZWFkaW5nIGFuIFVURjE2LWVuY29kZWQgdGV4dCBmaWxlIGNyYXNoZXMgaWYgXHIgb24gNjQtY2hhcgorLSBJc3N1ZSAjNDU3NDogcmVhZGluZyBhIFVURjE2LWVuY29kZWQgdGV4dCBmaWxlIGNyYXNoZXMgaWYgXHIgb24gNjQtY2hhcgogICBib3VuZGFyeS4KIAogLSBJc3N1ZSAjNDIyMzogaW5zcGVjdC5nZXRzb3VyY2UoKSB3aWxsIG5vdyBjb3JyZWN0bHkgZGlzcGxheSBzb3VyY2UgY29kZQpAQCAtOTQ2NCw4ICs5NDk3LDggQEAKIAogLSBJc3N1ZSAjNDA1MTogUHJldmVudCBjb25mbGljdCBvZiBVTklDT0RFIG1hY3JvcyBpbiBjUGlja2xlLgogCi0tIElzc3VlICM0NzM4OiBFYWNoIHpsaWIgb2JqZWN0IG5vdyBoYXMgYSBzZXBhcmF0ZSBsb2NrLCBhbGxvd2luZyB0byBjb21wcmVzcwotICBvciBkZWNvbXByZXNzIHNldmVyYWwgc3RyZWFtcyBhdCBvbmNlIG9uIG11bHRpLUNQVSBzeXN0ZW1zLiBBbHNvLCB0aGUgR0lMCistIElzc3VlICM0NzM4OiBFYWNoIHpsaWIgb2JqZWN0IG5vdyBoYXMgYSBzZXBhcmF0ZSBsb2NrLCBhbGxvd2luZyBzZXZlcmFsIHN0cmVhbXMKKyAgdG8gYmUgY29tcHJlc3NlZCBvciBkZWNvbXByZXNzZWQgYXQgb25jZSBvbiBtdWx0aS1DUFUgc3lzdGVtcy4gQWxzbywgdGhlIEdJTAogICBpcyBub3cgcmVsZWFzZWQgd2hlbiBjb21wdXRpbmcgdGhlIENSQyBvZiBhIGxhcmdlIGJ1ZmZlci4gUGF0Y2ggYnkgZWJmZS4KIAogLSBJc3N1ZSAjNDIyODogUGFjayBuZWdhdGl2ZSB2YWx1ZXMgdGhlIHNhbWUgd2F5IGFzIDIuNCBpbiBzdHJ1Y3QncyBMIGZvcm1hdC4KQEAgLTk2NTIsNyArOTY4NSw3IEBACiAKIC0gSXNzdWUgIzEyMTA6IEZpeGVkIGltYXBsaWIgYW5kIGl0cyBkb2N1bWVudGF0aW9uLgogCi0tIElzc3VlICM0MjMzOiBDaGFuZ2VkIHNlbWFudGljIG9mIGBgX2ZpbGVpby5GaWxlSU9gYCdzIGBgY2xvc2UoKWBgIAorLSBJc3N1ZSAjNDIzMzogQ2hhbmdlZCBzZW1hbnRpYyBvZiBgYF9maWxlaW8uRmlsZUlPYGAncyBgYGNsb3NlKClgYAogICBtZXRob2Qgb24gZmlsZSBvYmplY3RzIHdpdGggY2xvc2VmZD1GYWxzZS4gVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBzdGlsbAogICBrZXB0IG9wZW4gYnV0IHRoZSBmaWxlIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBjbG9zZWQgZmlsZS4gVGhlIGBgRmlsZUlPYGAKICAgb2JqZWN0IGFsc28gZ290IGEgbmV3IHJlYWRvbmx5IGF0dHJpYnV0ZSBgYGNsb3NlZmRgYC4KQEAgLTk3ODksMjAgKzk4MjIsMjAgQEAKICAgdGhlIHJlY3Vyc2lvbiBsaW1pdCBjaGVja2luZyBjb2RlLCBkdWUgdG8gYm9ndXMgaGFuZGxpbmcgb2YgcmVjdXJzaW9uCiAgIGxpbWl0IHdoZW4gVVNFX1NUQUNLQ0hFSyB3YXMgZW5hYmxlZC4KIAotLSBJc3N1ZSAzNjM5OiBUaGUgX3dhcm5pbmdzIG1vZHVsZSBjb3VsZCBzZWdmYXVsdCB0aGUgaW50ZXJwcmV0ZXIgd2hlbgorLSBJc3N1ZSAjMzYzOTogVGhlIF93YXJuaW5ncyBtb2R1bGUgY291bGQgc2VnZmF1bHQgdGhlIGludGVycHJldGVyIHdoZW4KICAgdW5leHBlY3RlZCB0eXBlcyB3ZXJlIHBhc3NlZCBpbiBhcyBhcmd1bWVudHMuCiAKIC0gSXNzdWUgIzM3MTI6IFRoZSBtZW1vcnl2aWV3IG9iamVjdCBoYWQgYSByZWZlcmVuY2UgbGVhayBhbmQgZGlkbid0IHN1cHBvcnQKICAgY3ljbGljIGdhcmJhZ2UgY29sbGVjdGlvbi4KIAogLSBJc3N1ZSAjMzY2ODogRml4IGEgbWVtb3J5IGxlYWsgd2l0aCB0aGUgInMqIiBhcmd1bWVudCBwYXJzZXIgaW4KLSAgUHlBcmdfUGFyc2VUdXBsZSBhbmQgZnJpZW5kcywgd2hpY2ggb2NjdXJyZWQgd2hlbiB0aGUgYXJndW1lbnQgZm9yICJzKiIgCisgIFB5QXJnX1BhcnNlVHVwbGUgYW5kIGZyaWVuZHMsIHdoaWNoIG9jY3VycmVkIHdoZW4gdGhlIGFyZ3VtZW50IGZvciAicyoiCiAgIHdhcyBjb3JyZWN0bHkgcGFyc2VkIGJ1dCBwYXJzaW5nIG9mIHN1YnNlcXVlbnQgYXJndW1lbnRzIGZhaWxlZC4KIAogLSBJc3N1ZSAjMzYxMTogQW4gZXhjZXB0aW9uIF9fY29udGV4dF9fIGNvdWxkIGJlIGNsZWFyZWQgaW4gYSBjb21wbGV4IHBhdHRlcm4KICAgaW52b2x2aW5nIGEgX19kZWxfXyBtZXRob2QgcmUtcmFpc2luZyBhbiBleGNlcHRpb24uCiAKLS0gSXNzdWUgIzI1MzQ6IHNwZWVkIHVwIGlzaW5zdGFuY2UoKSBhbmQgaXNzdWJjbGFzcygpIGJ5IDUwLTcwJSwgc28gYXMgdG8gCistIElzc3VlICMyNTM0OiBzcGVlZCB1cCBpc2luc3RhbmNlKCkgYW5kIGlzc3ViY2xhc3MoKSBieSA1MC03MCUsIHNvIGFzIHRvCiAgIG1hdGNoIFB5dGhvbiAyLjUgc3BlZWQgZGVzcGl0ZSB0aGUgX19pbnN0YW5jZWNoZWNrX18gLyBfX3N1YmNsYXNzY2hlY2tfXwogICBtZWNoYW5pc20uIEluIHRoZSBwcm9jZXNzLCBmaXggYSBidWcgd2hlcmUgaXNpbnN0YW5jZSgpIGFuZCBpc3N1YmNsYXNzKCksCiAgIHdoZW4gZ2l2ZW4gYSB0dXBsZSBvZiBjbGFzc2VzIGFzIHNlY29uZCBhcmd1bWVudCwgd2VyZSBsb29raW5nIHVwCkBAIC05ODY4LDE5ICs5OTAxLDE5IEBACiAgIEl0IGlzIG5vdyBtYWludGFpbmVkIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgYXQKICAgaHR0cDovL3d3dy5qY2VhLmVzL3Byb2dyYW1hY2lvbi9weWJzZGRiLmh0bS4KIAotLSBJc3N1ZSA2MDAzNjI6ICBSZWxvY2F0ZWQgcGFyc2VfcXMoKSBhbmQgcGFyc2VfcXNsKCksIGZyb20gdGhlIGNnaSBtb2R1bGUKKy0gSXNzdWUgIzYwMDM2MjogIFJlbG9jYXRlZCBwYXJzZV9xcygpIGFuZCBwYXJzZV9xc2woKSwgZnJvbSB0aGUgY2dpIG1vZHVsZQogICB0byB0aGUgdXJscGFyc2Ugb25lLiAgQWRkZWQgYSBEZXByZWNhdGlvbldhcm5pbmcgaW4gdGhlIG9sZCBtb2R1bGUsIGl0CiAgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLgogCiAtIElzc3VlICMzNzE5OiBwbGF0Zm9ybS5hcmNoaXRlY3R1cmUoKSBmYWlscyBpZiB0aGVyZSBhcmUgc3BhY2VzIGluIHRoZQogICBwYXRoIHRvIHRoZSBQeXRob24gYmluYXJ5LgogCi0tIElzc3VlIDM2MDI6IEFzIHBhcnQgb2YgdGhlIG1lcmdlIG9mIHI2NjEzNSwgbWFrZSB0aGUgcGFyYW1ldGVycyBvbgorLSBJc3N1ZSAjMzYwMjogQXMgcGFydCBvZiB0aGUgbWVyZ2Ugb2YgcjY2MTM1LCBtYWtlIHRoZSBwYXJhbWV0ZXJzIG9uCiAgIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCkga2V5d29yZC1vbmx5LiBBbHNvIHJlbW92ZSBhIERlcHJlY2F0aW9uV2FybmluZy4KIAogLSBUaGUgZGVwcmVjYXRpb24gd2FybmluZ3MgZm9yIHRoZSBjYW1lbENhc2UgdGhyZWFkaW5nIEFQSSBuYW1lcyB3ZXJlIHJlbW92ZWQuCiAKLS0gSXNzdWUgIzMxMTA6IG11bHRpcHJvY2Vzc2luZyBmYWlscyB0byBjb21waWVsIG9uIHNvbGFyaXMgMTAgZHVlIHRvIG1pc3NpbmcgCistIElzc3VlICMzMTEwOiBtdWx0aXByb2Nlc3NpbmcgZmFpbHMgdG8gY29tcGllbCBvbiBzb2xhcmlzIDEwIGR1ZSB0byBtaXNzaW5nCiAgIFNFTV9WQUxVRV9NQVguCiAKIEV4dGVuc2lvbiBNb2R1bGVzCkBAIC05ODk2LDcgKzk5MjksNyBAQAogICBleHBsb2l0YXRpb24gb2YgcG9vciBhcmd1bWVudCBjaGVja2luZy4KIAogLSBic2RkYiBjb2RlIHVwZGF0ZWQgdG8gdmVyc2lvbiA0LjcuM3ByZTIuIFRoaXMgY29kZSBpcyB0aGUgc2FtZSB0aGFuCi0gIFB5dGhvbiAyLjYgb25lLCBzaW5jZSB0aGUgaW50ZW50aW9uIGlzIHRvIGtlZXAgYW4gdW5pZmllZCAyLngvMy54IGNvZGViYXNlLgorICBQeXRob24gMi42IG9uZSwgc2luY2UgdGhlIGludGVudGlvbiBpcyB0byBrZWVwIGEgdW5pZmllZCAyLngvMy54IGNvZGViYXNlLgogICBUaGUgUHl0aG9uIGNvZGUgaXMgYXV0b21hdGljYWxseSB0cmFuc2xhdGVkIHVzaW5nICIydG8zIi4gUGxlYXNlLCBkbyBub3QKICAgdXBkYXRlIHRoaXMgY29kZSBpbiBQeXRob24gMy4wIGJ5IGhhbmQuIFVwZGF0ZSB0aGUgMi42IG9uZSBhbmQgdGhlbgogICBkbyAiMnRvMyIuCkBAIC05OTYzLDcgKzk5OTYsNyBAQAogICBhcyBieXRlcyBzdHJpbmcsIHBsZWFzZSB1c2UgUHlVbmljb2RlX0FzVVRGOFN0cmluZygpIGluc3RlYWQuCiAKIC0gSXNzdWUgIzM0NjA6IFB5VW5pY29kZV9Kb2luKCkgaW1wbGVtZW50YXRpb24gaXMgMTAlIHRvIDgwJSBmYXN0ZXIgdGhhbmtzCi0gIHRvIFB5dGhvbiAzLjAncyBzdHJpY3RlciBzZW1hbnRpY3Mgd2hpY2ggYWxsb3cgdG8gYXZvaWQgc3VjY2Vzc2l2ZQorICB0byBQeXRob24gMy4wJ3Mgc3RyaWN0ZXIgc2VtYW50aWNzIHdoaWNoIGFsbG93IGF2b2lkaW5nIHN1Y2Nlc3NpdmUKICAgcmVhbGxvY2F0aW9ucyBvZiB0aGUgcmVzdWx0IHN0cmluZyAodGhpcyBhbHNvIGFmZmVjdHMgc3RyLmpvaW4oKSkuCiAKIApAQCAtMTA2MDYsOCArMTA2MzksOCBAQAogICBjZXJ0YWluIG9wZXJhdGlvbnMgYmV0d2VlbiBieXRlcy9idWZmZXIgYW5kIHN0ciBsaWtlIHN0cihiJycpIGFuZAogICBjb21wYXJpc29uLgogCi0tIFRoZSBzdGFuZGFyZHMgc3RyZWFtcyBzeXMuc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIG1heSBiZSBOb25lIHdoZW4KLSAgdGhlIHdoZW4gdGhlIEMgcnVudGltZSBsaWJyYXJ5IHJldHVybnMgYW4gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IKKy0gVGhlIHN0YW5kYXJkIHN0cmVhbXMgc3lzLnN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciBtYXkgYmUgTm9uZQorICB3aGVuIHRoZSBDIHJ1bnRpbWUgbGlicmFyeSByZXR1cm5zIGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yCiAgIGZvciB0aGUgc3RyZWFtcyAoZmlsZW5vKHN0ZGluKSA8IDApLiBGb3Igbm93IHRoaXMgaGFwcGVucyBvbmx5IGZvcgogICBXaW5kb3dzIEdVSSBhcHBzIGFuZCBzY3JpcHRzIHN0YXJ0ZWQgd2l0aCBgcHl0aG9udy5leGVgLgogCkBAIC0xMDY0Niw3ICsxMDY3OSw3IEBACiAKIC0gUmVtb3ZlZCB0aGUgJ25ldycgbW9kdWxlLgogCi0tIFJlbW92ZWQgYWxsIHR5cGVzIGZyb20gdGhlICd0eXBlcycgbW9kdWxlIHRoYXQgYXJlIGVhc2lseSBhY2Nlc3NhYmxlCistIFJlbW92ZWQgYWxsIHR5cGVzIGZyb20gdGhlICd0eXBlcycgbW9kdWxlIHRoYXQgYXJlIGVhc2lseSBhY2Nlc3NpYmxlCiAgIHRocm91Z2ggYnVpbHRpbnMuCiAKIApAQCAtMTI3MjksNyArMTI3NjIsNyBAQAogCiAtIFBhdGNoICMxMTEwMjQ4OiBTWU5DX0ZMVVNIIHRoZSB6bGliIGJ1ZmZlciBmb3IgR1ppcEZpbGUuZmx1c2guCiAKLS0gUGF0Y2ggIzExMDc5NzM6IEFsbG93IHRvIGl0ZXJhdGUgb3ZlciB0aGUgbGluZXMgb2YgYSB0YXJmaWxlLkV4RmlsZU9iamVjdC4KKy0gUGF0Y2ggIzExMDc5NzM6IEFsbG93IGl0ZXJhdGluZyBvdmVyIHRoZSBsaW5lcyBvZiBhIHRhcmZpbGUuRXhGaWxlT2JqZWN0LgogCiAtIFBhdGNoICMxMTA0MTExOiBBbHRlciBzZXR1cC5weSAtLWhlbHAgYW5kIC0taGVscC1jb21tYW5kcy4KIApAQCAtMTM3MDYsNyArMTM3MzksNyBAQAogICBzYW1lIGFzIHdoZW4gdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQpLgogICBbU0YgYnVnIDY1ODI1NCwgcGF0Y2ggNjYzNDgyXQogCi0tIG5udHBsaWIgZG9lcyBub3cgYWxsb3cgdG8gaWdub3JlIGEgLm5ldHJjIGZpbGUuCistIG5udHBsaWIgZG9lcyBub3cgYWxsb3cgaWdub3JpbmcgYSAubmV0cmMgZmlsZS4KIAogLSB1cmxsaWIyIG5vdyByZWNvZ25pemVzIEJhc2ljIGF1dGhlbnRpY2F0aW9uIGV2ZW4gaWYgb3RoZXIgYXV0aGVudGljYXRpb24KICAgc2NoZW1lcyBhcmUgb2ZmZXJlZC4KQEAgLTEzOTgwLDcgKzE0MDEzLDcgQEAKICAgd291bGQgbm90IGJlIHJlbW92ZWQgd2hpbGUgYWxsb2NhdGluZyBhIG5ldyB3ZWFrcmVmIG9iamVjdC4gIFNpbmNlCiAgIEdDIGNvdWxkIGJlIGludm9rZWQgYXQgdGhhdCB0aW1lLCBob3dldmVyLCB0aGF0IGFzc3VtcHRpb24gd2FzCiAgIGludmFsaWQuICBJbiBhIHRydWx5IG9ic2N1cmUgY2FzZSBvZiBHQyBiZWluZyB0cmlnZ2VyZWQgZHVyaW5nCi0gIGNyZWF0aW9uIGZvciBhIG5ldyB3ZWFrcmVmIG9iamVjdCBmb3IgYW4gcmVmZXJlbnQgd2hpY2ggYWxyZWFkeQorICBjcmVhdGlvbiBmb3IgYSBuZXcgd2Vha3JlZiBvYmplY3QgZm9yIGEgcmVmZXJlbnQgd2hpY2ggYWxyZWFkeQogICBoYXMgYSB3ZWFrcmVmIHdpdGhvdXQgYSBjYWxsYmFjayB3aGljaCBpcyBvbmx5IHJlZmVyZW5jZWQgZnJvbQogICBjeWNsaWMgdHJhc2gsIGEgbWVtb3J5IGVycm9yIGNhbiBvY2N1ci4gIFRoaXMgY29uc2lzdGVudGx5IGNyZWF0ZWQgYQogICBzZWdmYXVsdCBpbiBhIGRlYnVnIGJ1aWxkLCBidXQgcHJvdmlkZWQgbGVzcyBwcmVkaWN0YWJsZSBiZWhhdmlvciBpbgpAQCAtMTQxMjQsNyArMTQxNTcsNyBAQAogCiAtIGZjbnRsLmlvY3RsIG5vdyB3YXJucyBpZiB0aGUgbXV0YXRlIGZsYWcgaXMgbm90IHNwZWNpZmllZC4KIAotLSBudCBub3cgcHJvcGVybHkgYWxsb3dzIHRvIHJlZmVyIHRvIFVOQyByb290cywgZS5nLiBpbiBudC5zdGF0KCkuCistIG50IG5vdyBwcm9wZXJseSBhbGxvd3MgcmVmZXJyaW5nIHRvIFVOQyByb290cywgZS5nLiBpbiBudC5zdGF0KCkuCiAKIC0gdGhlIHdlYWtyZWYgbW9kdWxlIG5vdyBzdXBwb3J0cyBhZGRpdGlvbmFsIG9iamVjdHM6ICBhcnJheS5hcnJheSwKICAgc3JlLnBhdHRlcm5fb2JqZWN0cywgZmlsZSBvYmplY3RzLCBhbmQgc29ja2V0cy4KQEAgLTE2MDMyLDcgKzE2MDY1LDcgQEAKIC0gQWxsIHN0YW5kYXJkIGl0ZXJhdG9ycyBub3cgZW5zdXJlIHRoYXQsIG9uY2UgU3RvcEl0ZXJhdGlvbiBoYXMgYmVlbgogICByYWlzZWQsIGFsbCBmdXR1cmUgY2FsbHMgdG8gbmV4dCgpIG9uIHRoZSBzYW1lIGl0ZXJhdG9yIHdpbGwgYWxzbwogICByYWlzZSBTdG9wSXRlcmF0aW9uLiAgVGhlcmUgdXNlZCB0byBiZSB2YXJpb3VzIGNvdW50ZXJleGFtcGxlcyB0bwotICB0aGlzIGJlaGF2aW9yLCB3aGljaCBjb3VsZCBjYXVzZWQgY29uZnVzaW9uIG9yIHN1YnRsZSBwcm9ncmFtCisgIHRoaXMgYmVoYXZpb3IsIHdoaWNoIGNvdWxkIGhhdmUgY2F1c2VkIGNvbmZ1c2lvbiBvciBzdWJ0bGUgcHJvZ3JhbQogICBicmVha2FnZSwgd2l0aG91dCBhbnkgYmVuZWZpdHMuICAoTm90ZSB0aGF0IHRoaXMgaXMgc3RpbGwgYW4KICAgaXRlcmF0b3IncyByZXNwb25zaWJpbGl0eTsgdGhlIGl0ZXJhdG9yIGZyYW1ld29yayBkb2VzIG5vdCBlbmZvcmNlCiAgIHRoaXMuKQpAQCAtMTY2ODIsNyArMTY3MTUsNyBAQAogLSBOZXcgZnVuY3Rpb25zIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKCkgYW5kCiAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKCkuIFNpbWlsYXIgdG8KICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoKSBhbmQKLSAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoKSwgYnV0IHRoZXkgYWxsb3cgdG8gc3BlY2lmeQorICBQeUVycl9TZXRGcm9tV2luZG93c0VycigpLCBidXQgdGhleSBhbGxvdyBzcGVjaWZ5aW5nCiAgIHRoZSBleGNlcHRpb24gdHlwZSB0byByYWlzZS4gQXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAKIC0gUHlfRmF0YWxFcnJvcigpIGlzIG5vdyBkZWNsYXJlZCBhcyB0YWtpbmcgYSBjb25zdCBjaGFyKiBhcmd1bWVudC4gIEl0CkBAIC0xNzU1Nyw4ICsxNzU5MCw4IEBACiAtIHByb3BlcnR5KCkgbm93IHRha2VzIDQga2V5d29yZCBhcmd1bWVudHM6ICBmZ2V0LCBmc2V0LCBmZGVsIGFuZCBkb2MuCiAgIFRoZXNlIG1hcCB0byByZWFkLW9ubHkgYXR0cmlidXRlcyAnZmdldCcsICdmc2V0JywgJ2ZkZWwnLCBhbmQgJ19fZG9jX18nCiAgIGluIHRoZSBjb25zdHJ1Y3RlZCBwcm9wZXJ0eSBvYmplY3QuICBmZ2V0LCBmc2V0IGFuZCBmZGVsIHdlcmVuJ3QKLSAgZGlzY292ZXJhYmxlIGZyb20gUHl0aG9uIGluIDIuMmEzLiAgX19kb2NfXyBpcyBuZXcsIGFuZCBhbGxvd3MgdG8KLSAgYXNzb2NpYXRlIGEgZG9jc3RyaW5nIHdpdGggYSBwcm9wZXJ0eS4KKyAgZGlzY292ZXJhYmxlIGZyb20gUHl0aG9uIGluIDIuMmEzLiAgX19kb2NfXyBpcyBuZXcsIGFuZCBhbGxvd3MKKyAgYXNzb2NpYXRpbmcgYSBkb2NzdHJpbmcgd2l0aCBhIHByb3BlcnR5LgogCiAtIENvbXBhcmlzb24gb3ZlcmxvYWRpbmcgaXMgbm93IG1vcmUgY29tcGxldGVseSBpbXBsZW1lbnRlZC4gIEZvcgogICBleGFtcGxlLCBhIHN0ciBzdWJjbGFzcyBpbnN0YW5jZSBjYW4gcHJvcGVybHkgYmUgY29tcGFyZWQgdG8gYSBzdHIKQEAgLTE3OTczLDcgKzE4MDA2LDcgQEAKIC0tLS0tCiAKIC0gcmVncnRlc3QucHkgbm93IGtub3dzIHdoaWNoIHRlc3RzIGFyZSBleHBlY3RlZCB0byBiZSBza2lwcGVkIG9uIHNvbWUKLSAgcGxhdGZvcm1zLCBhbGxvd2luZyB0byBnaXZlIGNsZWFyZXIgdGVzdCByZXN1bHQgb3V0cHV0LiAgcmVncnRlc3QKKyAgcGxhdGZvcm1zLCBhbGxvd2luZyBjbGVhcmVyIHRlc3QgcmVzdWx0IG91dHB1dCB0byBiZSBnaXZlbi4gIHJlZ3J0ZXN0CiAgIGFsc28gaGFzIG9wdGlvbmFsIC0tdXNlLy11IHN3aXRjaCB0byBydW4gbm9ybWFsbHkgZGlzYWJsZWQgdGVzdHMKICAgd2hpY2ggcmVxdWlyZSBuZXR3b3JrIGFjY2VzcyBvciBjb25zdW1lIHNpZ25pZmljYW50IGRpc2sgcmVzb3VyY2VzLgogCkBAIC0xODcwNCw3ICsxODczNyw3IEBACiAKIC0geG1sLmRvbS5taW5pZG9tIG9mZmVycyBhIHRvcHJldHR5eG1sIG1ldGhvZC4gQSBudW1iZXIgb2YgRE9NCiAgIGNvbmZvcm1hbmNlIGlzc3VlcyBoYXZlIGJlZW4gcmVzb2x2ZWQuIEluIHBhcnRpY3VsYXIsIEVsZW1lbnQgbm93Ci0gIGhhcyBhbiBoYXNBdHRyaWJ1dGVzIG1ldGhvZCwgYW5kIHRoZSBoYW5kbGluZyBvZiBuYW1lc3BhY2VzIHdhcworICBoYXMgYSBoYXNBdHRyaWJ1dGVzIG1ldGhvZCwgYW5kIHRoZSBoYW5kbGluZyBvZiBuYW1lc3BhY2VzIHdhcwogICBpbXByb3ZlZC4KIAogLSBLYS1QaW5nIFllZSBjb250cmlidXRlZCB0d28gbmV3IG1vZHVsZXM6IGluc3BlY3QucHksIGEgbW9kdWxlIGZvcgpAQCAtMTg5MDMsNyArMTg5MzYsNyBAQAogCiAtIFRoZXJlIGlzIGEgbmV3IFVuaWNvZGUgY29tcGFuaW9uIHRvIHRoZSBQeU9iamVjdF9TdHIoKSBBUEkKICAgY2FsbGVkIFB5T2JqZWN0X1VuaWNvZGUoKS4gSXQgYmVoYXZlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlCi0gIGZvcm1lciwgYnV0IGFzc3VyZXMgdGhhdCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgYW4gVW5pY29kZSBvYmplY3QKKyAgZm9ybWVyLCBidXQgYXNzdXJlcyB0aGF0IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIFVuaWNvZGUgb2JqZWN0CiAgIChhcHBseWluZyB0aGUgdXN1YWwgY29lcmNpb24gaWYgbmVjZXNzYXJ5KS4KIAogLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgc3VwcG9ydCAicmljaCBjb21wYXJpc29uIG92ZXJsb2FkaW5nIiAoUEVQCkBAIC0yMDE5NCw3ICsyMDIyNyw3IEBACiAKIFByb2JhYmx5IHRoZSBtb3N0IHBlcnZhc2l2ZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIFVuaWNvZGUgc3VwcG9ydC4KIFdlJ3ZlIGFkZGVkIGEgbmV3IGZ1bmRhbWVudGFsIGRhdGF0eXBlLCB0aGUgVW5pY29kZSBzdHJpbmcsIGEgbmV3Ci1idWlsZC1pbiBmdW5jdGlvbiB1bmljb2RlKCksIGFuIG51bWVyb3VzIEMgQVBJcyB0byBkZWFsIHdpdGggVW5pY29kZQorYnVpbHQtaW4gZnVuY3Rpb24gdW5pY29kZSgpLCBhbmQgbnVtZXJvdXMgQyBBUElzIHRvIGRlYWwgd2l0aCBVbmljb2RlCiBhbmQgZW5jb2RpbmdzLiAgU2VlIHRoZSBmaWxlIE1pc2MvdW5pY29kZS50eHQgZm9yIGRldGFpbHMsIG9yCiBodHRwOi8vc3RhcnNoaXAucHl0aG9uLm5ldC9jcmV3L2xlbWJ1cmcvdW5pY29kZS1wcm9wb3NhbC50eHQuCiAKQEAgLTIwODg4LDcgKzIwOTIxLDcgQEAKIAogCSogVG9vbHMvc2NyaXB0cy9kdXRyZWUucHk6CiAJRHVyaW5nIGRpc3BsYXksIGlmIEVQSVBFIGlzIHJhaXNlZCwgaXQncyBwcm9iYWJseSBiZWNhdXNlIGEgcGFnZXIgd2FzCi0Ja2lsbGVkLiAgRGlzY2FyZCB0aGUgZXJyb3IgaW4gdGhhdCBjYXNlLCBidXQgcHJvcG9nYXRlIGl0IG90aGVyd2lzZS4KKwlraWxsZWQuICBEaXNjYXJkIHRoZSBlcnJvciBpbiB0aGF0IGNhc2UsIGJ1dCBwcm9wYWdhdGUgaXQgb3RoZXJ3aXNlLgogCiBGcmkgTWFyIDI2IDE2OjIwOjQ1IDE5OTkgIEd1aWRvIHZhbiBSb3NzdW0gIDxndWlkb0BlcmljLmNucmkucmVzdG9uLnZhLnVzPgogCkBAIC0yMTU5Myw3ICsyMTYyNiw3IEBACiAKIC0gSW1wcm92ZWQgQmVPUyBzdXBwb3J0LgogCi0tIFN1cHBvcnQgZHluYW1pYyBsb2FkaW5nIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gTmV0QlNEIHBsYXRmb3JtcyB0aGF0IAorLSBTdXBwb3J0IGR5bmFtaWMgbG9hZGluZyBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIE5ldEJTRCBwbGF0Zm9ybXMgdGhhdAogdXNlIEVMRiAoaS5lLiwgTUlQUyBhbmQgQWxwaGEgc3lzdGVtcykuCiAKIENvbmZpZ3VyYXRpb24vYnVpbGQgY2hhbmdlcwpAQCAtMjE2NzksNyArMjE3MTIsNyBAQAogLSBUaGUgdXUgbW9kdWxlIG5vdyBkZWFscyBiZXR0ZXIgd2l0aCB0cmFpbGluZyBnYXJiYWdlIGdlbmVyYXRlZCBieQogc29tZSBicm9rZSB1dWVuY29kZXJzLgogCi0tIFRoZSB0ZWxuZXQgbW9kdWxlIG5vdyBoYXMgYW4gbXlfaW50ZXJhY3QoKSBtZXRob2Qgd2hpY2ggdXNlcyB0aHJlYWRzCistIFRoZSB0ZWxuZXQgbW9kdWxlIG5vdyBoYXMgYSBteV9pbnRlcmFjdCgpIG1ldGhvZCB3aGljaCB1c2VzIHRocmVhZHMKIGluc3RlYWQgb2Ygc2VsZWN0LiAgVGhlIGludGVyYWN0KCkgbWV0aG9kIHVzZXMgdGhpcyBieSBkZWZhdWx0IG9uCiBXaW5kb3dzICh3aGVyZSB0aGUgc2luZ2xlLXRocmVhZGVkIHZlcnNpb24gZG9lc24ndCB3b3JrKS4KIApAQCAtMjE4MTAsNyArMjE4NDMsNyBAQAogaGlnaGVyLWxldmVsIGNsYXNzZXMgaW4gY29kZS5weS4KIAogLSB0dXJ0bGUucHkgaXMgYSBuZXcgbW9kdWxlIGZvciBzaW1wbGUgdHVydGxlIGdyYXBoaWNzLiAgSSdtIHN0aWxsCi13b3JraW5nIG9uIGl0OyBsZXQgbWUga25vdyBpZiB5b3UgdXNlIHRoaXMgdG8gdGVhY2ggUHl0aG9uIHRvIGNoaWxkcmVuIAord29ya2luZyBvbiBpdDsgbGV0IG1lIGtub3cgaWYgeW91IHVzZSB0aGlzIHRvIHRlYWNoIFB5dGhvbiB0byBjaGlsZHJlbgogb3Igb3RoZXIgbm92aWNlcyB3aXRob3V0IHByaW9yIHByb2dyYW1taW5nIGV4cGVyaWVuY2UuCiAKIE9ic29sZXRlZCBsaWJyYXJ5IG1vZHVsZXMKQEAgLTIxOTQyLDcgKzIxOTc1LDcgQEAKIENoYW5nZXMgdG8gdG9vbHMKIC0tLS0tLS0tLS0tLS0tLS0KIAotLSBOZXcsIGltcHJvdmVkIHZlcnNpb24gb2YgQmFycnkgV2Fyc2F3J3MgTWlzYy9weXRob24tbW9kZS5lbCAoZWRpdGluZyAKKy0gTmV3LCBpbXByb3ZlZCB2ZXJzaW9uIG9mIEJhcnJ5IFdhcnNhdydzIE1pc2MvcHl0aG9uLW1vZGUuZWwgKGVkaXRpbmcKIHN1cHBvcnQgZm9yIEVtYWNzKS4KIAogLSB0YWJuYW5ueS5weTogYWRkZWQgYSAtcSAoJ3F1aWV0Jykgb3B0aW9uIHRvIHRhYm5hbm55LCB3aGljaCBjYXVzZXMKQEAgLTIyMjE3LDcgKzIyMjUwLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tCiAKIC0gSW5zdGFsbCB6bGliLmRsbCBpbiB0aGUgRExMcyBkaXJlY3RvcnkgaW5zdGVhZCBvZiBpbiB0aGUgd2luMzIKLXN5c3RlbSBkaXJlY3RvcnksIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGFwcGxpY2F0aW9ucyB0aGF0IGhhdmUgCitzeXN0ZW0gZGlyZWN0b3J5LCB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBhcHBsaWNhdGlvbnMgdGhhdCBoYXZlCiB0aGVpciBvd24gemxpYi5kbGwuCiAKIFRlc3QgU3VpdGUKQEAgLTIyMjk3LDcgKzIyMzMwLDcgQEAKIHNvIHRoYXQgYSBzeW1saW5rIHRvIGEgc3ltbGluayBjYW4gd29yay4KIAogLSBBZGRlZCBhIGhhY2sgc28gdGhhdCB3aGVuIHlvdSB0eXBlICdxdWl0JyBvciAnZXhpdCcgYXQgdGhlCi1pbnRlcnByZXRlciwgeW91IGdldCBhIGZyaWVuZGx5IGV4cGxhbmF0aW9uIG9mIGhvdyB0byBwcmVzcyBDdHJsLUQgKG9yIAoraW50ZXJwcmV0ZXIsIHlvdSBnZXQgYSBmcmllbmRseSBleHBsYW5hdGlvbiBvZiBob3cgdG8gcHJlc3MgQ3RybC1EIChvcgogQ3RybC1aKSB0byBleGl0LgogCiAtIE5ldyBhbmQgaW1wcm92ZWQgTWlzYy9weXRob24tbW9kZS5lbCAoUHl0aG9uIG1vZGUgZm9yIEVtYWNzKS4KQEAgLTIyNDcwLDEzICsyMjUwMywxMyBAQAogcmFuZ2UuICBBbHNvLCByYW5kaW50KGEsIGIpIGlzIG5vdyByZWRlZmluZWQgYXMgcmFuZHJhbmdlKGEsIGIrMSksCiBhZGRpbmcgZXh0cmEgcmFuZ2UgYW5kIHR5cGUgY2hlY2tpbmcgdG8gaXRzIGFyZ3VtZW50cyEKIAotLSBBZGQgc29tZSBzZW1pLXRocmVhZC1zYWZldHkgdG8gcmFuZG9tLmdhdXNzKCkgKGl0IHVzZWQgdG8gYmUgYWJsZSB0byAKKy0gQWRkIHNvbWUgc2VtaS10aHJlYWQtc2FmZXR5IHRvIHJhbmRvbS5nYXVzcygpIChpdCB1c2VkIHRvIGJlIGFibGUgdG8KIGNyYXNoIHdoZW4gaW52b2tlZCBmcm9tIHNlcGFyYXRlIHRocmVhZHM7IG5vdyB0aGUgd29yc3QgaXQgY2FuIGRvIGlzCiBnaXZlIGEgZHVwbGljYXRlIHJlc3VsdCBvY2Nhc2lvbmFsbHkpLgogCiAtIFNvbWUgcmVzdHJ1Y3R1cmluZyBhbmQgZ2VuZXJhbGl6YXRpb24gZG9uZSB0byBjbWQucHkuCiAKLS0gTWFqb3IgdXBncmFkZSB0byBDb25maWdQYXJzZXIucHk7IGNvbnZlcnRlZCB0byB1c2luZyAncmUnLCBhZGRlZCBuZXcgCistIE1ham9yIHVwZ3JhZGUgdG8gQ29uZmlnUGFyc2VyLnB5OyBjb252ZXJ0ZWQgdG8gdXNpbmcgJ3JlJywgYWRkZWQgbmV3CiBleGNlcHRpb25zLCBzdXBwb3J0IHVuZGVyc2NvcmUgaW4gc2VjdGlvbiBoZWFkZXIgYW5kIG9wdGlvbiBuYW1lLiAgTm8KIGxvbmdlciBhZGQgJ25hbWUnIG9wdGlvbiB0byBldmVyeSBzZWN0aW9uOyBpbnN0ZWFkLCBhZGQgJ19fbmFtZV9fJy4KIApAQCAtMjI2NzMsNyArMjI3MDYsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogLSBUaGUgcmVnaXN0cnkga2V5IHVzZWQgaXMgbm93ICIxLjUiIGluc3RlYWQgb2YgIjEuNS54IiAtLSBzbyBmdXR1cmUKLXZlcnNpb25zIG9mIDEuNSBhbmQgTWFyayBIYW1tb25kJ3Mgd2luMzJhbGwgaW5zdGFsbGVyIGRvbid0IG5lZWQgdG8gYmUgCit2ZXJzaW9ucyBvZiAxLjUgYW5kIE1hcmsgSGFtbW9uZCdzIHdpbjMyYWxsIGluc3RhbGxlciBkb24ndCBuZWVkIHRvIGJlCiByZXN5bmNocm9uaXplZC4KIAogV2luZG93cyBUb29scwpAQCAtMjI3MzYsMTEgKzIyNzY5LDExIEBACiAtIE5ldyBtYWNyb3MgdG8gYWNjZXNzIG9iamVjdCBtZW1iZXJzIGZvciBQeUZ1bmN0aW9uLCBQeUNGdW5jdGlvbgogb2JqZWN0cy4KIAotLSBOZXcgQVBJcyBQeUltcG9ydF9BcHBlbmRJbml0dGFiKCkgYW4gUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYigpIHRvCistIE5ldyBBUElzIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoKSBhbmQgUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYigpIHRvCiBkeW5hbWljYWxseSBhZGQgb25lIG9yIG1hbnkgZW50cmllcyB0byB0aGUgdGFibGUgb2YgYnVpbHQtaW4gbW9kdWxlcy4KIAogLSBOZXcgbWFjcm8gUHlfSW5pdE1vZHVsZTMobmFtZSwgbWV0aG9kcywgZG9jKSB3aGljaCBjYWxscwotUHlfSW5pdE1vZHVsZTQoKSB3aXRoIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy4gIChUaGUgLTQgdmFyaWFudCByZXF1aXJlcyAKK1B5X0luaXRNb2R1bGU0KCkgd2l0aCBhcHByb3ByaWF0ZSBhcmd1bWVudHMuICAoVGhlIC00IHZhcmlhbnQgcmVxdWlyZXMKIHlvdSB0byBwYXNzIGFuIG9ic2N1cmUgdmVyc2lvbiBudW1iZXIgY29uc3RhbnQgd2hpY2ggaXMgYWx3YXlzIHRoZSBzYW1lLikKIAogLSBOZXcgQVBJcyBQeVN5c19Xcml0ZVN0ZG91dCgpIGFuZCBQeVN5c19Xcml0ZVN0ZGVycigpIHRvIHdyaXRlIHRvCkBAIC0yMjgxMiw3ICsyMjg0NSw3IEBACiBTeW50YXggY2hhbmdlCiAtLS0tLS0tLS0tLS0tCiAKLS0gVGhlIHJhaXNlIHN0YXRlbWVudCBjYW4gbm93IGJlIHVzZWQgd2l0aG91dCBhcmd1bWVudHMsIHRvIHJlLXJhaXNlIAorLSBUaGUgcmFpc2Ugc3RhdGVtZW50IGNhbiBub3cgYmUgdXNlZCB3aXRob3V0IGFyZ3VtZW50cywgdG8gcmUtcmFpc2UKIGEgcHJldmlvdXNseSBzZXQgZXhjZXB0aW9uLiAgVGhpcyBzaG91bGQgYmUgdXNlZCBhZnRlciBjYXRjaGluZyBhbgogZXhjZXB0aW9uIHdpdGggYW4gZXhjZXB0IGNsYXVzZSBvbmx5LCBlaXRoZXIgaW4gdGhlIGV4Y2VwdCBjbGF1c2Ugb3IKIGxhdGVyIGluIHRoZSBzYW1lIGZ1bmN0aW9uLgpAQCAtMjI4NzEsNyArMjI5MDQsNyBAQAogCiAJRGVtby90a2ludGVyL2d1aWRvL3BhaW50LnB5IC0tIERhdmUgTWl0Y2hlbGwKIAlEZW1vL3NvY2tldHMvdW5peHNlcnZlci5weSAtLSBQaWV0IHZhbiBPb3N0cnVtCi0JCisKIAogLSBNdWNoIGJldHRlciBmcmVlemUgc3VwcG9ydC4gIFRoZSBmcmVlemUgc2NyaXB0IGNhbiBub3cgZnJlZXplCiBoaWVyYXJjaGljYWwgbW9kdWxlIG5hbWVzICh3aXRoIGEgY29ycmVzcG9uZGluZyBjaGFuZ2UgdG8gaW1wb3J0LmMpLApAQCAtMjMwMTAsNyArMjMwNDMsNyBAQAogLSBOZXcgY29tbWFuZCBzdXBwb3J0ZWQgYnkgdGhlIGZ0cGxpYiBtb2R1bGU6IHJtZCgpOyBhbHNvIGZpeGVkIHNvbWUKIG1pbm9yIGJ1Z3MuCiAKLS0gVGhlIHByb2ZpbGUgbW9kdWxlIG5vdyB1c2VzIGEgZGlmZmVyZW50IHRpbWVyIGZ1bmN0aW9uIGJ5IGRlZmF1bHQgLS0gCistIFRoZSBwcm9maWxlIG1vZHVsZSBub3cgdXNlcyBhIGRpZmZlcmVudCB0aW1lciBmdW5jdGlvbiBieSBkZWZhdWx0IC0tCiB0aW1lLmNsb2NrKCkgaXMgZ2VuZXJhbGx5IGJldHRlciB0aGFuIG9zLnRpbWVzKCkuICBUaGlzIG1ha2VzIGl0IHdvcmsKIGJldHRlciBvbiBXaW5kb3dzIE5ULCB0b28uCiAKQEAgLTIzMDQ5LDE0ICsyMzA4MiwxNCBAQAogLSBJbiB0aGUgbXVsdGlmaWxlIG1vZHVsZSwgc3VwcG9ydCB0aGUgb3B0aW9uYWwgc2Vjb25kIHBhcmFtZXRlciB0bwogc2VlaygpIHdoZW4gcG9zc2libGUuCiAKLS0gU2V2ZXJhbCBmaXhlcyB0byB0aGUgZ29waGVybGliIG1vZHVsZSBieSBMYXJzIE1hcml1cyBHYXJzaG9sLiAgQWxzbywgCistIFNldmVyYWwgZml4ZXMgdG8gdGhlIGdvcGhlcmxpYiBtb2R1bGUgYnkgTGFycyBNYXJpdXMgR2Fyc2hvbC4gIEFsc28sCiB1cmxwYXJzZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgR29waGVyIFVSTHMgd2l0aCBxdWVyeSBzdHJpbmdzLgogCiAtIEZpeGVkIGEgdGlueSBidWcgaW4gZm9ybWF0X2V4Y2VwdGlvbigpIGluIHRoZSB0cmFjZWJhY2sgbW9kdWxlLgogQWxzbyByZXdyaXRlIHRiX2xpbmVubygpIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBKUHl0aG9uIChhbmQgbm90CiBkaXN0dXJiIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiEpOyBieSBKaW0gSHVndW5pbi4KIAotLSBUaGUgaHR0cGxpYiBtb2R1bGUgaXMgbW9yZSByb2J1c3Qgd2hlbiBzZXJ2ZXJzIHNlbmQgYSBzaG9ydCByZXNwb25zZSAKKy0gVGhlIGh0dHBsaWIgbW9kdWxlIGlzIG1vcmUgcm9idXN0IHdoZW4gc2VydmVycyBzZW5kIGEgc2hvcnQgcmVzcG9uc2UKIC0tIGNvdXJ0ZXN5IFRpbSBPJ01hbGxleS4KIAogVGtpbnRlciBhbmQgZnJpZW5kcwpAQCAtMjMwNzEsNyArMjMxMDQsNyBAQAogbm8gbG9uZ2VyIHVzZSB0aGUgZGVmYXVsdCByb290LgogCiAtIFRoZSBpbnRlcmZhY2VzIGZvciB0aGUgYmluZCooKSBhbmQgdW5iaW5kKCkgd2lkZ2V0IG1ldGhvZHMgaGF2ZSBiZWVuCi1yZWRlc2lnbmVkOyB0aGUgYmluZCooKSBtZXRob2RzIG5vdyByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIFRjbCBjb21tYW5kIAorcmVkZXNpZ25lZDsgdGhlIGJpbmQqKCkgbWV0aG9kcyBub3cgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBUY2wgY29tbWFuZAogY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNrLCBhbmQgdGhpcyBjYW4gYmUgcGFzc2VkIGFzIGFuIG9wdGlvbmFsCiBhcmd1bWVudCB0byB1bmJpbmQoKSBpbiBvcmRlciB0byBkZWxldGUgdGhlIGNvbW1hbmQgKG5vcm1hbGx5LCBzdWNoCiBjb21tYW5kcyBhcmUgYXV0b21hdGljYWxseSB1bmJvdW5kIHdoZW4gdGhlIHdpZGdldCBpcyBkZXN0cm95ZWQsIGJ1dApAQCAtMjMxMDcsNyArMjMxNDAsNyBAQAogZGljdGlvbmFyeSB0byBhbGxvdyByZWN1cnNpdmUgY29udGFpbmVyIHR5cGVzIHRvIGRldGVjdCByZWN1cnNpb24gaW4KIHRoZWlyIHJlcHIoKSwgc3RyKCkgYW5kIHByaW50IGltcGxlbWVudGF0aW9ucy4KIAotLSBOZXcgZnVuY3Rpb24gUHlPYmplY3RfTm90KHgpIGNhbGN1bGF0ZXMgKG5vdCB4KSBhY2NvcmRpbmcgdG8gUHl0aG9uJ3MgCistIE5ldyBmdW5jdGlvbiBQeU9iamVjdF9Ob3QoeCkgY2FsY3VsYXRlcyAobm90IHgpIGFjY29yZGluZyB0byBQeXRob24ncwogc3RhbmRhcmQgcnVsZXMgKGJhc2ljYWxseSwgaXQgbmVnYXRlcyB0aGUgb3V0Y29tZSBQeU9iamVjdF9Jc1RydWUoeCkuCiAKIC0gTmV3IGZ1bmN0aW9uIF9QeU1vZHVsZV9DbGVhcigpLCB3aGljaCBjbGVhcnMgYSBtb2R1bGUncyBkaWN0aW9uYXJ5CkBAIC0yMzI2OCw3ICsyMzMwMSw3IEBACiBpbnN0YW5jZXMgd2l0aCBjb3B5LnB5LiAgVGhlIGNQaWNrbGUuYyBjaGFuZ2VzIGFuZCBzb21lIHBpY2tsZS5weQogY2hhbmdlcyBhcmUgY291cnRlc3kgSmltIEZ1bHRvbi4KIAotLSBMb2NhbGUgc3VwcG9ydCBpbiBoZSAicmUiIChQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbnMpIG1vZHVsZS4gIFVzZSAKKy0gTG9jYWxlIHN1cHBvcnQgaW4gaGUgInJlIiAoUGVybCByZWd1bGFyIGV4cHJlc3Npb25zKSBtb2R1bGUuICBVc2UKIHRoZSBmbGFnIHJlLkwgKG9yIHJlLkxPQ0FMRSkgdG8gZW5hYmxlIGxvY2FsZS1zcGVjaWZpYyBtYXRjaGluZwogcnVsZXMgZm9yIFx3IGFuZCBcYi4gIFRoZSBpbi1saW5lIHN5bnRheCBmb3IgdGhpcyBmbGFnIGlzICg/TCkuCiAKQEAgLTIzMzM0LDcgKzIzMzY3LDcgQEAKIAogLSBTb21lIGltcHJvdmVtZW50cyB0byB0aGUgX3RraW50ZXIgYnVpbGQgbGluZSBzdWdnZXN0ZWQgYnkgQ2FzZSBSb29sZS4KIAotLSBBIGZ1bGwgc3VpdGUgb2YgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZXMgZm9yIE5ldEJTRCAxLngsIHN1Ym1pdHRlZCBieSAKKy0gQSBmdWxsIHN1aXRlIG9mIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzIGZvciBOZXRCU0QgMS54LCBzdWJtaXR0ZWQgYnkKIEFuZGVycyBBbmRlcnNlbi4KIAogLSBOZXcgU29sYXJpcyBzcGVjaWZpYyBoZWFkZXIgU1RST1BUUy5weS4KQEAgLTIzNDA0LDcgKzIzNDM3LDcgQEAKIGlmIHRoZXJlIGFyZSBsb3RzIG9mIGR1cGxpY2F0ZXMsIGFuZCBvdGhlcndpc2UgYXQgbGVhc3QgYXMgZ29vZC4KIAogLSBBZGRlZCAidXVlIiBhcyBhbiBhbGlhcyBmb3IgInV1ZW5jb2RlIiB0byBtaW1ldG9vbHMucHkuICAoSG0sIHRoZQotdXVkZWNvZGUgYnVnIHdoZXJlIGl0IGNvbXBsYWludHMgYWJvdXQgdHJhaWxpbmcgZ2FyYmFnZSBpcyBzdGlsbCB0aGVyZSAKK3V1ZGVjb2RlIGJ1ZyB3aGVyZSBpdCBjb21wbGFpbnRzIGFib3V0IHRyYWlsaW5nIGdhcmJhZ2UgaXMgc3RpbGwgdGhlcmUKIDotKCApLgogCiAtIHBpY2tsZS5weSByZXF1aXJlcyBpbnRlZ2VycyBpbiB0ZXh0IG1vZGUgdG8gYmUgaW4gZGVjaW1hbCBub3RhdGlvbgpAQCAtMjM3MTAsNyArMjM3NDMsNyBAQAogLSBDaGFuZ2VkIHRoZSBjaGVja3MgbWFkZSBpbiBQeV9Jbml0aWFsaXplKCkgYW5kIFB5X0ZpbmFsaXplKCkuICBJdCBpcwogbm93IGxlZ2FsIHRvIGNhbGwgdGhlc2UgbW9yZSB0aGFuIG9uY2UuICBUaGUgZmlyc3QgY2FsbCB0bwogUHlfSW5pdGlhbGl6ZSgpIGluaXRpYWxpemVzLCB0aGUgZmlyc3QgY2FsbCB0byBQeV9GaW5hbGl6ZSgpCi1maW5hbGl6ZXMuICBUaGVyZSdzIGFsc28gYSBuZXcgQVBJLCBQeV9Jc0luaXRhbGl6ZWQoKSB3aGljaCBjaGVja3MKK2ZpbmFsaXplcy4gIFRoZXJlJ3MgYWxzbyBhIG5ldyBBUEksIFB5X0lzSW5pdGlhbGl6ZWQoKSB3aGljaCBjaGVja3MKIHdoZXRoZXIgd2UgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgKGluIGNhc2UgeW91IHdhbnQgdG8gbGVhdmUgdGhpbmdzCiBhcyB0aGV5IHdlcmUpLgogCkBAIC0yNDE4MCw3ICsyNDIxMyw3IEBACiBUaGUgUHl0aG9uL0MgQVBJIGZvciBmcmFtZXMgaXMgY2hhbmdlZCAoeW91IHNob3VsZG4ndCBiZSB1c2luZyB0aGlzCiBhbnl3YXkpLgogCi0tIFNpZ25pZmljYW50IHNwZWVkdXAgYnkgaW5saW5pbmcgc29tZSBjb21tb24gb3Bjb2RlcyBmb3IgY29tbW9uIG9wZXJhbmQgCistIFNpZ25pZmljYW50IHNwZWVkdXAgYnkgaW5saW5pbmcgc29tZSBjb21tb24gb3Bjb2RlcyBmb3IgY29tbW9uIG9wZXJhbmQKIHR5cGVzIChlLmcuICBpK2ksIGktaSwgYW5kIGxpc3RbaV0pLiAgRnJlZHJpayBMdW5kaC4KIAogLSBTbWFsbCBzcGVlZHVwIGJ5IHJlb3JkZXJpbmcgdGhlIG1ldGhvZCB0YWJsZXMgb2Ygc29tZSBjb21tb24KQEAgLTI0MjA2LDM0ICsyNDIzOSwzNCBAQAogcHJpbnRpbmcgdGhlIGRvY3VtZW50YXRpb24gbm93IGtpbGxzIGZld2VyIHRyZWVzIC0tIHRoZSBtYXJnaW5zIGhhdmUKIGJlZW4gcmVkdWNlZC4KIAotLSBJIGhhdmUgc3RhcnRlZCBkb2N1bWVudGluZyB0aGUgUHl0aG9uL0MgQVBJLiBVbmZvcnR1bmF0ZWx5IHRoaXMgcHJvamVjdCAKLWhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQuICBJdCB3aWxsIGJlIGNvbXBsZXRlIGJlZm9yZSB0aGUgZmluYWwgcmVsZWFzZSBvZiAKLVB5dGhvbiAxLjUsIHRob3VnaC4gIEF0IHRoZSBtb21lbnQsIGl0J3MgYmV0dGVyIHRvIHJlYWQgdGhlIExhVGVYIHNvdXJjZSAKKy0gSSBoYXZlIHN0YXJ0ZWQgZG9jdW1lbnRpbmcgdGhlIFB5dGhvbi9DIEFQSS4gVW5mb3J0dW5hdGVseSB0aGlzIHByb2plY3QKK2hhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQuICBJdCB3aWxsIGJlIGNvbXBsZXRlIGJlZm9yZSB0aGUgZmluYWwgcmVsZWFzZSBvZgorUHl0aG9uIDEuNSwgdGhvdWdoLiAgQXQgdGhlIG1vbWVudCwgaXQncyBiZXR0ZXIgdG8gcmVhZCB0aGUgTGFUZVggc291cmNlCiB0aGFuIHRvIGF0dGVtcHQgdG8gcnVuIGl0IHRocm91Z2ggTGFUZVggYW5kIHByaW50IHRoZSByZXN1bHRpbmcgZHZpIGZpbGUuCiAKLS0gVGhlIHBvc2l4IG1vZHVsZSAoYW5kIGhlbmNlIG9zLnB5KSBub3cgaGFzIGRvYyBzdHJpbmdzISAgVGhhbmtzIHRvIE5laWwgCi1TY2hlbWVuYXVlci4gIEkgcmVjZWl2ZWQgYSBmZXcgb3RoZXIgY29udHJpYnV0aW9ucyBvZiBkb2Mgc3RyaW5ncy4gIEluIG1vc3QgCistIFRoZSBwb3NpeCBtb2R1bGUgKGFuZCBoZW5jZSBvcy5weSkgbm93IGhhcyBkb2Mgc3RyaW5ncyEgIFRoYW5rcyB0byBOZWlsCitTY2hlbWVuYXVlci4gIEkgcmVjZWl2ZWQgYSBmZXcgb3RoZXIgY29udHJpYnV0aW9ucyBvZiBkb2Mgc3RyaW5ncy4gIEluIG1vc3QKIG90aGVyIHBsYWNlcywgZG9jIHN0cmluZ3MgYXJlIHN0aWxsIHdpc2hmdWwgdGhpbmtpbmcuLi4KIAogCiBMYW5ndWFnZSBjaGFuZ2VzCiAtLS0tLS0tLS0tLS0tLS0tCiAKLS0gUHJpdmF0ZSB2YXJpYWJsZXMgd2l0aCBsZWFkaW5nIGRvdWJsZSB1bmRlcnNjb3JlIGFyZSBub3cgYSBwZXJtYW5lbnQgCi1mZWF0dXJlIG9mIHRoZSBsYW5ndWFnZS4gIChUaGVzZSB3ZXJlIGV4cGVyaW1lbnRhbCBpbiByZWxlYXNlIDEuNC4gIEkgaGF2ZSAKLWZhdm9yYWJsZSBleHBlcmllbmNlIHVzaW5nIHRoZW07IEkgY2FuJ3QgbGFiZWwgdGhlbSAiZXhwZXJpbWVudGFsIiAKKy0gUHJpdmF0ZSB2YXJpYWJsZXMgd2l0aCBsZWFkaW5nIGRvdWJsZSB1bmRlcnNjb3JlIGFyZSBub3cgYSBwZXJtYW5lbnQKK2ZlYXR1cmUgb2YgdGhlIGxhbmd1YWdlLiAgKFRoZXNlIHdlcmUgZXhwZXJpbWVudGFsIGluIHJlbGVhc2UgMS40LiAgSSBoYXZlCitmYXZvcmFibGUgZXhwZXJpZW5jZSB1c2luZyB0aGVtOyBJIGNhbid0IGxhYmVsIHRoZW0gImV4cGVyaW1lbnRhbCIKIGZvcmV2ZXIuKQogCi0tIFRoZXJlJ3MgbmV3IHN0cmluZyBsaXRlcmFsIHN5bnRheCBmb3IgInJhdyBzdHJpbmdzIi4gIFByZWZpeGluZyBhIHN0cmluZyAKLWxpdGVyYWwgd2l0aCB0aGUgbGV0dGVyIHIgKG9yIFIpIGRpc2FibGVzIGFsbCBlc2NhcGUgcHJvY2Vzc2luZyBpbiB0aGUgCi1zdHJpbmc7IGZvciBleGFtcGxlLCByJ1xuJyBpcyBhIHR3by1jaGFyYWN0ZXIgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgYSAKLWJhY2tzbGFzaCBmb2xsb3dlZCBieSB0aGUgbGV0dGVyIG4uICBUaGlzIGNvbWJpbmVzIHdpdGggYWxsIGZvcm1zIG9mIHN0cmluZyAKLXF1b3RlczsgaXQgaXMgYWN0dWFsbHkgdXNlZnVsIGZvciB0cmlwbGUgcXVvdGVkIGRvYyBzdHJpbmdzIHdoaWNoIG1pZ2h0IAotY29udGFpbiByZWZlcmVuY2VzIHRvIFxuIG9yIFx0LiAgQW4gZW1iZWRkZWQgcXVvdGUgcHJlZml4ZWQgd2l0aCBhIAotYmFja3NsYXNoIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUgc3RyaW5nLCBidXQgdGhlIGJhY2tzbGFzaCBpcyBzdGlsbCAKLWluY2x1ZGVkIGluIHRoZSBzdHJpbmc7IGZvciBleGFtcGxlLCByJ1wnJyBpcyBhIHR3by1jaGFyYWN0ZXIgc3RyaW5nIAotY29uc2lzdGluZyBvZiBhIGJhY2tzbGFzaCBhbmQgYSBxdW90ZS4gIChSYXcgc3RyaW5ncyBhcmUgYWxzbyAKLWFmZmVjdGlvbmF0ZWx5IGtub3duIGFzIFJvYmluIHN0cmluZ3MsIGFmdGVyIHRoZWlyIGludmVudG9yLCBSb2JpbiAKKy0gVGhlcmUncyBuZXcgc3RyaW5nIGxpdGVyYWwgc3ludGF4IGZvciAicmF3IHN0cmluZ3MiLiAgUHJlZml4aW5nIGEgc3RyaW5nCitsaXRlcmFsIHdpdGggdGhlIGxldHRlciByIChvciBSKSBkaXNhYmxlcyBhbGwgZXNjYXBlIHByb2Nlc3NpbmcgaW4gdGhlCitzdHJpbmc7IGZvciBleGFtcGxlLCByJ1xuJyBpcyBhIHR3by1jaGFyYWN0ZXIgc3RyaW5nIGNvbnNpc3Rpbmcgb2YgYQorYmFja3NsYXNoIGZvbGxvd2VkIGJ5IHRoZSBsZXR0ZXIgbi4gIFRoaXMgY29tYmluZXMgd2l0aCBhbGwgZm9ybXMgb2Ygc3RyaW5nCitxdW90ZXM7IGl0IGlzIGFjdHVhbGx5IHVzZWZ1bCBmb3IgdHJpcGxlIHF1b3RlZCBkb2Mgc3RyaW5ncyB3aGljaCBtaWdodAorY29udGFpbiByZWZlcmVuY2VzIHRvIFxuIG9yIFx0LiAgQW4gZW1iZWRkZWQgcXVvdGUgcHJlZml4ZWQgd2l0aCBhCitiYWNrc2xhc2ggZG9lcyBub3QgdGVybWluYXRlIHRoZSBzdHJpbmcsIGJ1dCB0aGUgYmFja3NsYXNoIGlzIHN0aWxsCitpbmNsdWRlZCBpbiB0aGUgc3RyaW5nOyBmb3IgZXhhbXBsZSwgcidcJycgaXMgYSB0d28tY2hhcmFjdGVyIHN0cmluZworY29uc2lzdGluZyBvZiBhIGJhY2tzbGFzaCBhbmQgYSBxdW90ZS4gIChSYXcgc3RyaW5ncyBhcmUgYWxzbworYWZmZWN0aW9uYXRlbHkga25vd24gYXMgUm9iaW4gc3RyaW5ncywgYWZ0ZXIgdGhlaXIgaW52ZW50b3IsIFJvYmluCiBGcmllZHJpY2guKQogCiAtIFRoZXJlJ3MgYSBzaW1wbGUgYXNzZXJ0IHN0YXRlbWVudCwgYW5kIGEgbmV3IGV4Y2VwdGlvbgpAQCAtMjQyNjIsMTAgKzI0Mjk1LDEwIEBACiAtIFRoZSBvYnNvbGV0ZSBleGNlcHRpb24gQ29uZmxpY3RFcnJvciAocHJlc3VtYWJseSB1c2VkIGJ5IHRoZSBsb25nCiBvYnNvbGV0ZSBhY2Nlc3Mgc3RhdGVtZW50KSBoYXMgYmVlbiBkZWxldGVkLgogCi0tIFRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24gc3lzLmV4Y19pbmZvKCkgd2hpY2ggcmV0dXJucyB0aGUgdHVwbGUgCistIFRoZXJlJ3MgYSBuZXcgZnVuY3Rpb24gc3lzLmV4Y19pbmZvKCkgd2hpY2ggcmV0dXJucyB0aGUgdHVwbGUKIChzeXMuZXhjX3R5cGUsIHN5cy5leGNfdmFsdWUsIHN5cy5leGNfdHJhY2ViYWNrKSBpbiBhIHRocmVhZC1zYWZlIHdheS4KIAotLSBUaGVyZSdzIGEgbmV3IHZhcmlhYmxlIHN5cy5leGVjdXRhYmxlLCBwb2ludGluZyB0byB0aGUgZXhlY3V0YWJsZSBmaWxlIAorLSBUaGVyZSdzIGEgbmV3IHZhcmlhYmxlIHN5cy5leGVjdXRhYmxlLCBwb2ludGluZyB0byB0aGUgZXhlY3V0YWJsZSBmaWxlCiBmb3IgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KIAogLSBUaGUgc29ydCgpIG1ldGhvZHMgZm9yIGxpc3RzIG5vIGxvbmdlciB1c2VzIHRoZSBDIGxpYnJhcnkgcXNvcnQoKTsgSQpAQCAtMjQyOTEsMTEgKzI0MzI0LDExIEBACiByZXR1cm5pbmcgZnJvbSBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbi4KIAogLSBUaGVyZSdzIGEgbmV3ICJidWZmZXIiIGludGVyZmFjZS4gIENlcnRhaW4gb2JqZWN0cyAoZS5nLiBzdHJpbmdzIGFuZAotYXJyYXlzKSBub3cgc3VwcG9ydCB0aGUgImJ1ZmZlciIgcHJvdG9jb2wuICBCdWZmZXIgb2JqZWN0cyBhcmUgYWNjZXB0YWJsZSAKLXdoZW5ldmVyIGZvcm1lcmx5IGEgc3RyaW5nIHdhcyByZXF1aXJlZCBmb3IgYSB3cml0ZSBvcGVyYXRpb247IG11dGFibGUgCithcnJheXMpIG5vdyBzdXBwb3J0IHRoZSAiYnVmZmVyIiBwcm90b2NvbC4gIEJ1ZmZlciBvYmplY3RzIGFyZSBhY2NlcHRhYmxlCit3aGVuZXZlciBmb3JtZXJseSBhIHN0cmluZyB3YXMgcmVxdWlyZWQgZm9yIGEgd3JpdGUgb3BlcmF0aW9uOyBtdXRhYmxlCiBidWZmZXIgb2JqZWN0cyBjYW4gYmUgdGhlIHRhcmdldCBvZiBhIHJlYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSBjYWxsCi1mLnJlYWRpbnRvKGJ1ZmZlcikuICBBIGNvb2wgZmVhdHVyZSBpcyB0aGF0IHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBub3cgCi1hbHNvIHdvcmsgb24gYXJyYXkgb2JqZWN0cy4gIENvbnRyaWJ1dGlvbiBieSBKYWNrIEphbnNlbi4gIChOZWVkcyAKK2YucmVhZGludG8oYnVmZmVyKS4gIEEgY29vbCBmZWF0dXJlIGlzIHRoYXQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIG5vdworYWxzbyB3b3JrIG9uIGFycmF5IG9iamVjdHMuICBDb250cmlidXRpb24gYnkgSmFjayBKYW5zZW4uICAoTmVlZHMKIGRvY3VtZW50YXRpb24uKQogCiAtIFN0cmluZyBpbnRlcm5pbmc6IGRpY3Rpb25hcnkgbG9va3VwcyBhcmUgZmFzdGVyIHdoZW4gdGhlIGxvb2t1cApAQCAtMjQ1ODcsNyArMjQ2MjAsNyBAQAogb2YgbWVzc2FnZSBzZXF1ZW5jZSBzcGVjaWZpZXJzIHdpdGhvdXQgaW52b2tpbmcgYSBzdWJwcm9jZXNzLiAgQWxzbwogYWRkZWQgYSBjcmVhdGVtZXNzYWdlKCkgbWV0aG9kIGJ5IExhcnMgV2lyemVuaXVzLgogCi0tIFRoZSBTdHJpbmdJTy5TdHJpbmdJTyBjbGFzcyBub3cgc3VwcG9ydHMgcmVhZGxpbmUobmJ5dGVzKS4gIChMYXJzIAorLSBUaGUgU3RyaW5nSU8uU3RyaW5nSU8gY2xhc3Mgbm93IHN1cHBvcnRzIHJlYWRsaW5lKG5ieXRlcykuICAoTGFycwogV2lyemVuaXVzLikgIChPZiBjb3Vyc2UsIHlvdSBzaG91bGQgYmUgdXNpbmcgY1N0cmluZ0lPIGZvciBwZXJmb3JtYW5jZS4pCiAKIC0gVXNlckRpY3QucHkgc3VwcG9ydHMgdGhlIG5ldyBkaWN0aW9uYXJ5IG1ldGhvZHMgYXMgd2VsbC4KQEAgLTI0NjM1LDggKzI0NjY4LDggQEAKIC0gVmFyaW91cyBzbWFsbCBmaXhlcyB0byB0aGUgbm50cGxpYi5weSBtb2R1bGUgdGhhdCBJIGNhbid0IGJvdGhlciB0bwogZG9jdW1lbnQgaW4gZGV0YWlsLgogCi0tIFNqb2VyZCBNdWxsZW5kZXIncyBtaW1pZnkucHkgbW9kdWxlIG5vdyBzdXBwb3J0cyBiYXNlNjQgZW5jb2RpbmcgYW5kIAotaW5jbHVkZXMgZnVuY3Rpb25zIHRvIGhhbmRsZSB0aGUgZnVubnkgZW5jb2RpbmcgeW91IHNvbWV0aW1lcyBzZWUgaW4gbWFpbCAKKy0gU2pvZXJkIE11bGxlbmRlcidzIG1pbWlmeS5weSBtb2R1bGUgbm93IHN1cHBvcnRzIGJhc2U2NCBlbmNvZGluZyBhbmQKK2luY2x1ZGVzIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGZ1bm55IGVuY29kaW5nIHlvdSBzb21ldGltZXMgc2VlIGluIG1haWwKIGhlYWRlcnMuICBJdCBpcyBub3cgZG9jdW1lbnRlZC4KIAogLSBtYWlsYm94LnB5OiBBZGRlZCBCYWJ5bE1haWxib3guICBJbXByb3ZlZCB0aGUgd2F5IHRoZSBtYWlsYm94IGlzCkBAIC0yNDk4NywyMyArMjUwMjAsMjMgQEAKIE5UICh0aGUgb2xkIFZDKysgNC4yIE1ha2VmaWxlIGlzIGFsc28gc3RpbGwgc3VwcG9ydGVkLCBidXQgd2lsbAogZXZlbnR1YWxseSBiZSB3aXRoZHJhd24gZHVlIHRvIGl0cyBidWxraW5lc3MpLgogCi0tIFNlZSB0aGUgbm90ZSBvbiB0aGUgbmV3IG1vZHVsZSBzZWFyY2ggcGF0aCBpbiB0aGUgIk1pc2NlbGxhbmVvdXMiIHNlY3Rpb24gCistIFNlZSB0aGUgbm90ZSBvbiB0aGUgbmV3IG1vZHVsZSBzZWFyY2ggcGF0aCBpbiB0aGUgIk1pc2NlbGxhbmVvdXMiIHNlY3Rpb24KIGFib3ZlLgogCiAtIFN1cHBvcnQgZm9yIFdpbjMycyAodGhlIDMyLWJpdCBXaW5kb3dzIEFQSSB1bmRlciBXaW5kb3dzIDMuMSkgaXMKIGJhc2ljYWxseSB3aXRoZHJhd24uICBJZiBpdCBzdGlsbCB3b3JrcyBmb3IgeW91LCB5b3UncmUgbHVja3kuCiAKLS0gVGhlcmUncyBhIG5ldyBleHRlbnNpb24gbW9kdWxlLCBtc3ZjcnQuYywgd2hpY2ggcHJvdmlkZXMgdmFyaW91cyAKLWxvdy1sZXZlbCBvcGVyYXRpb25zIGRlZmluZWQgaW4gdGhlIE1pY3Jvc29mdCBWaXN1YWwgQysrIFJ1bnRpbWUgTGlicmFyeS4gIAotVGhlc2UgaW5jbHVkZSBsb2NraW5nKCksIHNldG1vZGUoKSwgZ2V0X29zZmhhbmRsZSgpLCBzZXRfb3NmaGFuZGxlKCksIGFuZCAKKy0gVGhlcmUncyBhIG5ldyBleHRlbnNpb24gbW9kdWxlLCBtc3ZjcnQuYywgd2hpY2ggcHJvdmlkZXMgdmFyaW91cworbG93LWxldmVsIG9wZXJhdGlvbnMgZGVmaW5lZCBpbiB0aGUgTWljcm9zb2Z0IFZpc3VhbCBDKysgUnVudGltZSBMaWJyYXJ5LgorVGhlc2UgaW5jbHVkZSBsb2NraW5nKCksIHNldG1vZGUoKSwgZ2V0X29zZmhhbmRsZSgpLCBzZXRfb3NmaGFuZGxlKCksIGFuZAogY29uc29sZSBJL08gZnVuY3Rpb25zIGxpa2Uga2JoaXQoKSwgZ2V0Y2goKSBhbmQgcHV0Y2goKS4KIAogLSBUaGUgLXUgb3B0aW9uIG5vdCBvbmx5IHNldHMgdGhlIHN0YW5kYXJkIEkvTyBzdHJlYW1zIHRvIHVuYnVmZmVyZWQKIHN0YXR1cywgYnV0IGFsc28gc2V0cyB0aGVtIGluIGJpbmFyeSBtb2RlLiAgKFRoaXMgY2FuIGFsc28gYmUgZG9uZQogdXNpbmcgbXN2Y3J0LnNldG1vZGUoKSwgYnkgdGhlIHdheS4pCiAKLS0gVGhlLCBzeXMucHJlZml4IGFuZCBzeXMuZXhlY19wcmVmaXggdmFyaWFibGVzIHBvaW50IHRvIHRoZSBkaXJlY3RvcnkgCi13aGVyZSBQeXRob24gaXMgaW5zdGFsbGVkLCBvciB0byB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwgaWYgaXQgd2FzIHJ1biAKKy0gVGhlLCBzeXMucHJlZml4IGFuZCBzeXMuZXhlY19wcmVmaXggdmFyaWFibGVzIHBvaW50IHRvIHRoZSBkaXJlY3RvcnkKK3doZXJlIFB5dGhvbiBpcyBpbnN0YWxsZWQsIG9yIHRvIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLCBpZiBpdCB3YXMgcnVuCiBmcm9tIHRoZXJlLgogCiAtIFRoZSB2YXJpb3VzIG9zLnBhdGggbW9kdWxlcyAocG9zaXhwYXRoLCBudHBhdGgsIG1hY3BhdGgpIG5vdyBzdXBwb3J0CkBAIC0yNTAxMSw3ICsyNTA0NCw3IEBACiBvcy5wYXRoLmpvaW4oYSwgYiwgYykgaXMgdGhlIHNhbWUgYXMgb3MucGF0aC5qb2luKGEsIG9zLnBhdGguam9pbihiLAogYykpLgogCi0tIFRoZSBudHBhdGggbW9kdWxlIChub3JtYWxseSB1c2VkIGFzIG9zLnBhdGgpIHN1cHBvcnRzIH4gdG8gJEhPTUUgCistIFRoZSBudHBhdGggbW9kdWxlIChub3JtYWxseSB1c2VkIGFzIG9zLnBhdGgpIHN1cHBvcnRzIH4gdG8gJEhPTUUKIGV4cGFuc2lvbiBpbiBleHBhbmR1c2VyKCkuCiAKIC0gVGhlIGZyZWV6ZSB0b29sIG5vdyB3b3JrcyBvbiBXaW5kb3dzLgpAQCAtMjUzMDksNDcgKzI1MzQyLDQ3IEBACiAKIC0gTmV3IG1vZHVsZSB3aGljaGRiIHJlY29nbml6ZXMgZGJtLCBnZGJtIGFuZCBic2RkYi9kYmhhc2ggZmlsZXMuCiAKLS0gVGhlIERvYy9NYWtlZmlsZSB0YXJnZXRzIGhhdmUgYmVlbiByZW9yZ2FuaXplZCBzb21ld2hhdCB0byByZW1vdmUgdGhlIAorLSBUaGUgRG9jL01ha2VmaWxlIHRhcmdldHMgaGF2ZSBiZWVuIHJlb3JnYW5pemVkIHNvbWV3aGF0IHRvIHJlbW92ZSB0aGUKIGluc2lzdGVuY2Ugb24gYWx3YXlzIGdlbmVyYXRpbmcgUG9zdFNjcmlwdC4KIAogLSBUaGUgdGV4aW5mbyB0byBodG1sIGZpbHRlciAoRG9jL3RleGkyaHRtbC5weSkgaGFzIGJlZW4gaW1wcm92ZWQgc29tZXdoYXQuCiAKLS0gImVycm9ycy5oIiBoYXMgYmVlbiByZW5hbWVkIHRvICJweWVycm9ycy5oIiB0byByZXNvbHZlIGEgbG9uZy1zdGFuZGluZyAKKy0gImVycm9ycy5oIiBoYXMgYmVlbiByZW5hbWVkIHRvICJweWVycm9ycy5oIiB0byByZXNvbHZlIGEgbG9uZy1zdGFuZGluZwogbmFtZSBjb25mbGljdCBvbiB0aGUgTWFjLgogCi0tIExpbmtpbmcgYSBtb2R1bGUgY29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudCBzZXR0aW5nIGZvciBQeV9UUkFDRV9SRUZTIG5vdyAKKy0gTGlua2luZyBhIG1vZHVsZSBjb21waWxlZCB3aXRoIGEgZGlmZmVyZW50IHNldHRpbmcgZm9yIFB5X1RSQUNFX1JFRlMgbm93CiBnZW5lcmF0ZXMgYSBsaW5rZXIgZXJyb3IgcmF0aGVyIHRoYW4gYSBjb3JlIGR1bXAuCiAKLS0gVGhlIGNnaSBtb2R1bGUgaGFzIGEgbmV3IGNvbnZlbmllbmNlIGZ1bmN0aW9uIHByaW50X2V4Y2VwdGlvbigpLCB3aGljaCAKLWZvcm1hdHMgYSBweXRob24gZXhjZXB0aW9uIHVzaW5nIEhUTUwuICBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSAKLWNvbXBhdGliaWxpdHkgY29kZSBhbmQgYWRkcyBhIGR1YmlvdXMgZmVhdHVyZSB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byAKKy0gVGhlIGNnaSBtb2R1bGUgaGFzIGEgbmV3IGNvbnZlbmllbmNlIGZ1bmN0aW9uIHByaW50X2V4Y2VwdGlvbigpLCB3aGljaAorZm9ybWF0cyBhIHB5dGhvbiBleGNlcHRpb24gdXNpbmcgSFRNTC4gIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlCitjb21wYXRpYmlsaXR5IGNvZGUgYW5kIGFkZHMgYSBkdWJpb3VzIGZlYXR1cmUgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8KIGhhdmUgdHdvIHF1ZXJ5IHN0cmluZ3MsIG9uZSBpbiB0aGUgVVJMIGFuZCBvbmUgaW4gdGhlIFBPU1QgZGF0YS4KIAotLSBBIHN1YnRsZSBjaGFuZ2UgaW4gdGhlIHVucGlja2xpbmcgb2YgY2xhc3MgaW5zdGFuY2VzIG1ha2VzIGl0IHBvc3NpYmxlIAotdG8gdW5waWNrbGUgaW4gcmVzdHJpY3RlZCBleGVjdXRpb24gbW9kZSwgd2hlcmUgdGhlIF9fZGljdF9fIGF0dHJpYnV0ZSBpcyAKKy0gQSBzdWJ0bGUgY2hhbmdlIGluIHRoZSB1bnBpY2tsaW5nIG9mIGNsYXNzIGluc3RhbmNlcyBtYWtlcyBpdCBwb3NzaWJsZQordG8gdW5waWNrbGUgaW4gcmVzdHJpY3RlZCBleGVjdXRpb24gbW9kZSwgd2hlcmUgdGhlIF9fZGljdF9fIGF0dHJpYnV0ZSBpcwogbm90IGF2YWlsYWJsZSAoYnV0IHNldGF0dHIoKSBpcykuCiAKLS0gRG9jdW1lbnRhdGlvbiBmb3Igb3MucGF0aC5zcGxpdGV4dCgpICg9PSBwb3NpeHBhdGguc3BsaXRleHQoKSkgaGFzIGJlZW4gCistIERvY3VtZW50YXRpb24gZm9yIG9zLnBhdGguc3BsaXRleHQoKSAoPT0gcG9zaXhwYXRoLnNwbGl0ZXh0KCkpIGhhcyBiZWVuCiBjbGVhcmVkIHVwLiAgSXQgc3BsaXRzIGF0IHRoZSAqbGFzdCogZG90LgogCiAtIHBvc2l4ZmlsZSBsb2NraW5nIGlzIG5vdyBhbHNvIGNvcnJlY3RseSBzdXBwb3J0ZWQgb24gQUlYLgogCi0tIFRoZSB0ZW1wZmlsZSBtb2R1bGUgb25jZSBhZ2FpbiBob25vcnMgYW4gaW5pdGlhbCBzZXR0aW5nIG9mIHRtcGRpci4gIEl0IAorLSBUaGUgdGVtcGZpbGUgbW9kdWxlIG9uY2UgYWdhaW4gaG9ub3JzIGFuIGluaXRpYWwgc2V0dGluZyBvZiB0bXBkaXIuICBJdAogbm93IHdvcmtzIG9uIFdpbmRvd3MsIHRvby4KIAotLSBUaGUgdHJhY2ViYWNrIG1vZHVsZSBoYXMgc29tZSBuZXcgZnVuY3Rpb25zIHRvIGV4dHJhY3QsIGZvcm1hdCBhbmQgcHJpbnQgCistIFRoZSB0cmFjZWJhY2sgbW9kdWxlIGhhcyBzb21lIG5ldyBmdW5jdGlvbnMgdG8gZXh0cmFjdCwgZm9ybWF0IGFuZCBwcmludAogdGhlIGFjdGl2ZSBzdGFjay4KIAotLSBTb21lIHRyYW5zbGF0aW9uIGZ1bmN0aW9ucyBpbiB0aGUgdXJsbGliIG1vZHVsZSBoYXZlIGJlZW4gbWFkZSBhIGxpdHRsZSAKKy0gU29tZSB0cmFuc2xhdGlvbiBmdW5jdGlvbnMgaW4gdGhlIHVybGxpYiBtb2R1bGUgaGF2ZSBiZWVuIG1hZGUgYSBsaXR0bGUKIGxlc3Mgc2x1Z2dpc2guCiAKLS0gVGhlIGFkZHRhZ18qIG1ldGhvZHMgZm9yIENhbnZhcyB3aWRnZXRzIGluIFRraW50ZXIgYXMgd2VsbCBhcyBpbiB0aGUgCi1zZXBhcmF0ZSBDYW52YXMgY2xhc3MgaGF2ZSBiZWVuIGZpeGVkIHNvIHRoZXkgYWN0dWFsbHkgZG8gc29tZXRoaW5nIAorLSBUaGUgYWRkdGFnXyogbWV0aG9kcyBmb3IgQ2FudmFzIHdpZGdldHMgaW4gVGtpbnRlciBhcyB3ZWxsIGFzIGluIHRoZQorc2VwYXJhdGUgQ2FudmFzIGNsYXNzIGhhdmUgYmVlbiBmaXhlZCBzbyB0aGV5IGFjdHVhbGx5IGRvIHNvbWV0aGluZwogbWVhbmluZ2Z1bC4KIAogLSBBIHRpbnkgX3Rlc3QoKSBmdW5jdGlvbiBoYXMgYmVlbiBhZGRlZCB0byBUa2ludGVyLnB5LgogCi0tIEEgZ2VuZXJpYyBNYWtlZmlsZSBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgaXMgcHJvdmlkZWQgaW4gdGhlIE1pc2MgCistIEEgZ2VuZXJpYyBNYWtlZmlsZSBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgaXMgcHJvdmlkZWQgaW4gdGhlIE1pc2MKIHN1YmRpcmVjdG9yeSAoTWlzYy9nTWFrZWZpbGUpLgogCiAtIEEgbmV3IHZlcnNpb24gb2YgcHl0aG9uLW1vZGUuZWwgZm9yIEVtYWNzIGlzIHByb3ZpZGVkLiAgU2VlCkBAIC0yNTM1NywyNSArMjUzOTAsMjUgQEAKIHNlcGFyYXRlIGZpbGUgcHlpbWVudS5lbCBpcyBubyBsb25nZXIgbmVlZGVkLCBpbWVudSBzdXBwb3J0IGlzIGZvbGRlZAogaW50byBweXRob24tbW9kZS5lbC4KIAotLSBUaGUgY29uZmlndXJlIHNjcmlwdCBjYW4gZmluYWxseSBjb3JyZWN0bHkgZmluZCB0aGUgcmVhZGxpbmUgbGlicmFyeSBpbiBhIAotbm9uLXN0YW5kYXJkIGxvY2F0aW9uLiAgVGhlIExERkxBR1MgdmFyaWFibGUgaXMgcGFzc2VkIG9uIHRoZSBNYWtlZmlsZXMgCistIFRoZSBjb25maWd1cmUgc2NyaXB0IGNhbiBmaW5hbGx5IGNvcnJlY3RseSBmaW5kIHRoZSByZWFkbGluZSBsaWJyYXJ5IGluIGEKK25vbi1zdGFuZGFyZCBsb2NhdGlvbi4gIFRoZSBMREZMQUdTIHZhcmlhYmxlIGlzIHBhc3NlZCBvbiB0aGUgTWFrZWZpbGVzCiBmcm9tIHRoZSBjb25maWd1cmUgc2NyaXB0LgogCi0tIFNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdyBpbnN0YWxsZWQgYXMgcHJvZ3JhbXMgKGkuZS4gd2l0aCBleGVjdXRhYmxlIAorLSBTaGFyZWQgbGlicmFyaWVzIGFyZSBub3cgaW5zdGFsbGVkIGFzIHByb2dyYW1zIChpLmUuIHdpdGggZXhlY3V0YWJsZQogcGVybWlzc2lvbikuICBUaGlzIGlzIHJlcXVpcmVkIG9uIEhQLVVYIGFuZCB3b24ndCBodXJ0IG9uIG90aGVyIHN5c3RlbXMuCiAKLS0gVGhlIG9iamMuYyBtb2R1bGUgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gIE9iamVjdGl2ZS1DIAorLSBUaGUgb2JqYy5jIG1vZHVsZSBpcyBubyBsb25nZXIgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uLiAgT2JqZWN0aXZlLUMKIHN1cHBvcnQgbWF5IGJlY29tZSBhdmFpbGFibGUgYXMgY29udHJpYnV0ZWQgc29mdHdhcmUgb24gdGhlIGZ0cCBzaXRlLgogCiAtIFRoZSBzeWJhc2UgbW9kdWxlIGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24uICBBIG11Y2gKIGltcHJvdmVkIHN5YmFzZSBtb2R1bGUgaXMgYXZhaWxhYmxlIGFzIGNvbnRyaWJ1dGVkIHNvZnR3YXJlIGZyb20gdGhlCiBmdHAgc2l0ZS4KIAotLSBfdGtpbnRlciBpcyBub3cgY29tcGF0aWJsZSB3aXRoIFRjbCA3LjUgLyBUayA0LjEgcGF0Y2gxIG9uIFdpbmRvd3MgYW5kIAotTWFjIChkb24ndCB1c2UgdW5wYXRjaGVkIFRjbC9UayEpLiAgVGhlIGRlZmF1bHQgbGluZSBpbiB0aGUgU2V0dXAuaW4gZmlsZSAKKy0gX3RraW50ZXIgaXMgbm93IGNvbXBhdGlibGUgd2l0aCBUY2wgNy41IC8gVGsgNC4xIHBhdGNoMSBvbiBXaW5kb3dzIGFuZAorTWFjIChkb24ndCB1c2UgdW5wYXRjaGVkIFRjbC9UayEpLiAgVGhlIGRlZmF1bHQgbGluZSBpbiB0aGUgU2V0dXAuaW4gZmlsZQogbm93IGxpbmtzIHdpdGggVGNsIDcuNSAvIFRrIDQuMSByYXRoZXIgdGhhbiA3LjQvNC4wLgogCi0tIEluIFNldHVwLCB5b3UgY2FuIG5vdyB3cml0ZSAiKnNoYXJlZCoiIGluc3RlYWQgb2YgIipub2NvbmZpZyoiLCBhbmQgeW91IAorLSBJbiBTZXR1cCwgeW91IGNhbiBub3cgd3JpdGUgIipzaGFyZWQqIiBpbnN0ZWFkIG9mICIqbm9jb25maWcqIiwgYW5kIHlvdQogY2FuIHVzZSAqLnNvIGFuZCAqLnNsIGFzIHNoYXJlZCBsaWJyYXJpZXMuCiAKIC0gU29tZSBtb3JlIGZpZGdldGluZyBmb3IgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCkBAIC0yNTM4NCw4MSArMjU0MTcsODEgQEAKIChOb3RlIC0tIGEgY29tcGxldGUgcmVwbGFjZW1lbnQgYnkgTmllbHMgTW8ibGxlciwgY2FsbGVkIGdwbW9kdWxlLCBpcwogYXZhaWxhYmxlIGZyb20gdGhlIGNvbnRyaWIgZGlyZWN0b3J5IG9uIHRoZSBmdHAgc2l0ZS4pCiAKLS0gQSB3YXJuaW5nIGlzIHdyaXR0ZW4gdG8gc3lzLnN0ZGVyciB3aGVuIGEgX19kZWxfXyBtZXRob2QgcmFpc2VzIGFuIAorLSBBIHdhcm5pbmcgaXMgd3JpdHRlbiB0byBzeXMuc3RkZXJyIHdoZW4gYSBfX2RlbF9fIG1ldGhvZCByYWlzZXMgYW4KIGV4Y2VwdGlvbiAoZm9ybWVybHksIHN1Y2ggZXhjZXB0aW9ucyB3ZXJlIGNvbXBsZXRlbHkgaWdub3JlZCkuCiAKLS0gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IGRlZmluZXMgSEFWRV9PTERfQ1BQIGlmIHRoZSBDIHByZXByb2Nlc3NvciBpcyAKKy0gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IGRlZmluZXMgSEFWRV9PTERfQ1BQIGlmIHRoZSBDIHByZXByb2Nlc3NvciBpcwogaW5jYXBhYmxlIG9mIEFOU0kgc3R5bGUgdG9rZW4gY29uY2F0ZW5hdGlvbiBhbmQgc3RyaW5naWZpY2F0aW9uLgogCi0tIEFsbCBzb3VyY2UgZmlsZXMgKGV4Y2VwdCBhIGZldyBwbGF0Zm9ybSBzcGVjaWZpYyBtb2R1bGVzKSBhcmUgb25jZSBhZ2FpbiAKKy0gQWxsIHNvdXJjZSBmaWxlcyAoZXhjZXB0IGEgZmV3IHBsYXRmb3JtIHNwZWNpZmljIG1vZHVsZXMpIGFyZSBvbmNlIGFnYWluCiBjb21wYXRpYmxlIHdpdGggSyZSIEMgY29tcGlsZXJzIGFzIHdlbGwgYXMgQU5TSSBjb21waWxlcnMuICBJbiBwYXJ0aWN1bGFyLAotQU5TSS1pc21zIGhhdmUgYmVlbiByZW1vdmVkIG9yIG1hZGUgY29uZGl0aW9uYWwgaW4gY29tcGxleG9iamVjdC5jLCAKK0FOU0ktaXNtcyBoYXZlIGJlZW4gcmVtb3ZlZCBvciBtYWRlIGNvbmRpdGlvbmFsIGluIGNvbXBsZXhvYmplY3QuYywKIGdldGFyZ3MuYyBhbmQgb3BlcmF0b3IuYy4KIAotLSBUaGUgYWJzdHJhY3Qgb2JqZWN0IEFQSSBoYXMgdGhyZWUgbmV3IGZ1bmN0aW9ucywgUHlPYmplY3RfRGVsSXRlbSwgCistIFRoZSBhYnN0cmFjdCBvYmplY3QgQVBJIGhhcyB0aHJlZSBuZXcgZnVuY3Rpb25zLCBQeU9iamVjdF9EZWxJdGVtLAogUHlTZXF1ZW5jZV9EZWxJdGVtLCBhbmQgUHlTZXF1ZW5jZV9EZWxTbGljZS4KIAotLSBUaGUgb3BlcmF0b3IgbW9kdWxlIGhhcyBuZXcgZnVuY3Rpb25zIGRlbGl0ZW0gYW5kIGRlbHNsaWNlLCBhbmQgdGhlIAotZnVuY3Rpb25zICJvciIgYW5kICJhbmQiIGFyZSByZW5hbWVkIHRvICJvcl8iIGFuZCAiYW5kXyIgKHNpbmNlICJvciIgYW5kIAorLSBUaGUgb3BlcmF0b3IgbW9kdWxlIGhhcyBuZXcgZnVuY3Rpb25zIGRlbGl0ZW0gYW5kIGRlbHNsaWNlLCBhbmQgdGhlCitmdW5jdGlvbnMgIm9yIiBhbmQgImFuZCIgYXJlIHJlbmFtZWQgdG8gIm9yXyIgYW5kICJhbmRfIiAoc2luY2UgIm9yIiBhbmQKICJhbmQiIGFyZSByZXNlcnZlZCB3b3JkcykuICAoIl9fb3JfXyIgYW5kICJfX2FuZF9fIiBhcmUgdW5jaGFuZ2VkLikKIAotLSBUaGUgZW52aXJvbm1lbnQgbW9kdWxlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHB1dGVudigpIGlzIG5vdyBhIGZ1bmN0aW9uIAorLSBUaGUgZW52aXJvbm1lbnQgbW9kdWxlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHB1dGVudigpIGlzIG5vdyBhIGZ1bmN0aW9uCiBpbiBwb3NpeG1vZHVsZSAoYWxzbyB1bmRlciBOVCkuCiAKIC0gRXJyb3IgaW4gZmlsdGVyKDxmdW5jdGlvbj4sICIiKSBoYXMgYmVlbiBmaXhlZC4KIAogLSBVbnJlY29nbml6ZWQga2V5d29yZCBhcmd1bWVudHMgcmFpc2UgVHlwZUVycm9yLCBub3QgS2V5RXJyb3IuCiAKLS0gQmV0dGVyIHBvcnRhYmlsaXR5LCBmZXdlciBidWdzIGFuZCBtZW1vcnkgbGVha3MsIGZld2VyIGNvbXBpbGVyIHdhcm5pbmdzLCAKKy0gQmV0dGVyIHBvcnRhYmlsaXR5LCBmZXdlciBidWdzIGFuZCBtZW1vcnkgbGVha3MsIGZld2VyIGNvbXBpbGVyIHdhcm5pbmdzLAogc29tZSBtb3JlIGRvY3VtZW50YXRpb24uCiAKLS0gQnVnIGluIGZsb2F0IHBvd2VyIGJvdW5kYXJ5IGNhc2UgKDAuMCB0byB0aGUgbmVnYXRpdmUgaW50ZWdlciBwb3dlcikgCistIEJ1ZyBpbiBmbG9hdCBwb3dlciBib3VuZGFyeSBjYXNlICgwLjAgdG8gdGhlIG5lZ2F0aXZlIGludGVnZXIgcG93ZXIpCiBmaXhlZC4KIAotLSBUaGUgdGVzdCBvZiBuZWdhdGl2ZSBudW1iZXIgdG8gdGhlIGZsb2F0IHBvd2VyIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlIAorLSBUaGUgdGVzdCBvZiBuZWdhdGl2ZSBudW1iZXIgdG8gdGhlIGZsb2F0IHBvd2VyIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlCiBidWlsdC1pbiBwb3coKSBmdW5jdGlvbiB0byBmbG9hdG9iamVjdC5jIChzbyBjb21wbGV4IG51bWJlcnMgY2FuIHlpZWxkIHRoZQogY29ycmVjdCByZXN1bHQpLgogCi0tIFRoZSBidWcgaW50cm9kdWNlZCBpbiBiZXRhMiB3aGVyZSBzaGFyZWQgbGlicmFyaWVzIGxvYWRlZCAodXNpbmcgCistIFRoZSBidWcgaW50cm9kdWNlZCBpbiBiZXRhMiB3aGVyZSBzaGFyZWQgbGlicmFyaWVzIGxvYWRlZCAodXNpbmcKIGRsb3BlbigpKSBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3b3VsZCBmYWlsLCBoYXMgYmVlbiBmaXhlZC4KIAotLSBNb2R1bGVzIGltcG9ydGVkIGFzIHNoYXJlZCBsaWJyYXJpZXMgbm93IGFsc28gaGF2ZSBhIF9fZmlsZV9fIGF0dHJpYnV0ZSwgCi1naXZpbmcgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhleSB3ZXJlIGxvYWRlZC4gIFRoZSBvbmx5IG1vZHVsZXMgd2l0aG91dCAKKy0gTW9kdWxlcyBpbXBvcnRlZCBhcyBzaGFyZWQgbGlicmFyaWVzIG5vdyBhbHNvIGhhdmUgYSBfX2ZpbGVfXyBhdHRyaWJ1dGUsCitnaXZpbmcgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhleSB3ZXJlIGxvYWRlZC4gIFRoZSBvbmx5IG1vZHVsZXMgd2l0aG91dAogYSBfX2ZpbGVfXyBhdHRyaWJ1dGUgbm93IGFyZSBidWlsdC1pbiBtb2R1bGVzLgogCi0tIE9uIHRoZSBNYWMsIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzIGNhbiBlbmQgaW4gZWl0aGVyICIuc2xiIiBvciAKLSIuPHBsYXRmb3JtPi5zbGIiIHdoZXJlIDxwbGF0Zm9ybT4gaXMgZWl0aGVyICJDRk02OEsiIG9yICJwcGMiLiAgVGhlICIuc2xiIiAKKy0gT24gdGhlIE1hYywgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgY2FuIGVuZCBpbiBlaXRoZXIgIi5zbGIiIG9yCisiLjxwbGF0Zm9ybT4uc2xiIiB3aGVyZSA8cGxhdGZvcm0+IGlzIGVpdGhlciAiQ0ZNNjhLIiBvciAicHBjIi4gIFRoZSAiLnNsYiIKIGV4dGVuc2lvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciAiZmF0IiBiaW5hcmllcy4KIAotLSBDIEFQSSBhZGRpdGlvbjogbWFyc2hhbC5jIG5vdyBzdXBwb3J0cyAKKy0gQyBBUEkgYWRkaXRpb246IG1hcnNoYWwuYyBub3cgc3VwcG9ydHMKIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nKG9iamVjdCkuCiAKIC0gQyBBUEkgYWRkaXRpb246IGdldGFyZ3MuYyBub3cgc3VwcG9ydHMKIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsIGZvcm1hdCwga3duYW1lcywgLi4uKQogdG8gcGFyc2Uga2V5d29yZCBhcmd1bWVudHMuCiAKLS0gVGhlIFBDIHZlcnNpb25pbmcgc2NoZW1lIChzeXMud2ludmVyKSBoYXMgY2hhbmdlZCBvbmNlIGFnYWluLiAgdGhlIAotdmVyc2lvbiBudW1iZXIgaXMgbm93ICI8ZGlnaXQ+LjxkaWdpdD4uPGRpZ2l0Pi48YXBpdmVyc2lvbj4iLCB3aGVyZSB0aGUgCi1maXJzdCB0aHJlZSA8ZGlnaXQ+cyBhcmUgdGhlIFB5dGhvbiB2ZXJzaW9uIChlLmcuICIxLjQuMCIgZm9yIFB5dGhvbiAxLjQsIAotIjEuNC4xIiBmb3IgUHl0aG9uIDEuNC4xIC0tIHRoZSBiZXRhIGxldmVsIGlzIG5vdCBpbmNsdWRlZCkgYW5kIAorLSBUaGUgUEMgdmVyc2lvbmluZyBzY2hlbWUgKHN5cy53aW52ZXIpIGhhcyBjaGFuZ2VkIG9uY2UgYWdhaW4uICB0aGUKK3ZlcnNpb24gbnVtYmVyIGlzIG5vdyAiPGRpZ2l0Pi48ZGlnaXQ+LjxkaWdpdD4uPGFwaXZlcnNpb24+Iiwgd2hlcmUgdGhlCitmaXJzdCB0aHJlZSA8ZGlnaXQ+cyBhcmUgdGhlIFB5dGhvbiB2ZXJzaW9uIChlLmcuICIxLjQuMCIgZm9yIFB5dGhvbiAxLjQsCisiMS40LjEiIGZvciBQeXRob24gMS40LjEgLS0gdGhlIGJldGEgbGV2ZWwgaXMgbm90IGluY2x1ZGVkKSBhbmQKIDxhcGl2ZXJzaW9uPiBpcyB0aGUgZm91ci1kaWdpdCBQWVRIT05fQVBJX1ZFUlNJT04gKGN1cnJlbnRseSAxMDA1KS4KIAogLSBoMnB5LnB5IGFjY2VwdHMgd2hpdGVzcGFjZSBiZWZvcmUgdGhlICMgaW4gQ1BQIGRpcmVjdGl2ZXMKIAotLSBPbiBTb2xhcmlzIDIuNSwgaXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byB1c2UgZWl0aGVyIFBvc2l4IHRocmVhZHMgb3IgCi1Tb2xhcmlzIHRocmVhZHMgKFhYWDogaG93IGRvIHlvdSBzZWxlY3Qgd2hpY2ggaXMgdXNlZD8/PykuICAoTm90ZTogdGhlIAotUHl0aG9uIHB0aHJlYWRzIGludGVyZmFjZSBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgc2VtYXBob3JlcyB5ZXQgLS0gYW55b25lIAorLSBPbiBTb2xhcmlzIDIuNSwgaXQgc2hvdWxkIG5vdyBiZSBwb3NzaWJsZSB0byB1c2UgZWl0aGVyIFBvc2l4IHRocmVhZHMgb3IKK1NvbGFyaXMgdGhyZWFkcyAoWFhYOiBob3cgZG8geW91IHNlbGVjdCB3aGljaCBpcyB1c2VkPz8/KS4gIChOb3RlOiB0aGUKK1B5dGhvbiBwdGhyZWFkcyBpbnRlcmZhY2UgZG9lc24ndCBmdWxseSBzdXBwb3J0IHNlbWFwaG9yZXMgeWV0IC0tIGFueW9uZQogY2FyZSB0byBmaXggdGhpcz8pCiAKLS0gVGhyZWFkIHN1cHBvcnQgc2hvdWxkIG5vdyB3b3JrIG9uIEFJWCwgdXNpbmcgZWl0aGVyIERDRSB0aHJlYWRzIG9yIAorLSBUaHJlYWQgc3VwcG9ydCBzaG91bGQgbm93IHdvcmsgb24gQUlYLCB1c2luZyBlaXRoZXIgRENFIHRocmVhZHMgb3IKIHB0aHJlYWRzLgogCiAtIE5ldyBmaWxlIERlbW8vc29ja2V0cy91bmljYXN0LnB5CiAKLS0gV29ya2luZyBNYWMgcG9ydCwgd2l0aCBDRk02OEsgc3VwcG9ydCwgd2l0aCBUayA0LjEgc3VwcG9ydCAodGhvdWdoIG5vdCAKKy0gV29ya2luZyBNYWMgcG9ydCwgd2l0aCBDRk02OEsgc3VwcG9ydCwgd2l0aCBUayA0LjEgc3VwcG9ydCAodGhvdWdoIG5vdAogYm90aCkgKFhYWCkKIAotLSBOZXcgcHJvamVjdCBzZXR1cCBmb3IgUEMgcG9ydCwgbm93IGNvbXBhdGlibGUgd2l0aCBQeXRob25XaW4sIHdpdGggCistIE5ldyBwcm9qZWN0IHNldHVwIGZvciBQQyBwb3J0LCBub3cgY29tcGF0aWJsZSB3aXRoIFB5dGhvbldpbiwgd2l0aAogX3RraW50ZXIgYW5kIE51bVB5IHN1cHBvcnQgKFhYWCkKIAogLSBOZXcgbW9kdWxlIHNpdGUucHkgKFhYWCkKQEAgLTI1NDc1LDcgKzI1NTA4LDcgQEAKIAogLSBzdHJpbmcuYXRvaSBjLnMuIG5vdyByYWlzZSBhbiBleGNlcHRpb24gZm9yIGFuIGVtcHR5IGlucHV0IHN0cmluZy4KIAotLSBBdCBsYXN0LCBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGRlZmluZSBIQVZFX0NPTkZJR19IIGluIG9yZGVyIHRvIAorLSBBdCBsYXN0LCBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGRlZmluZSBIQVZFX0NPTkZJR19IIGluIG9yZGVyIHRvCiBoYXZlIGNvbmZpZy5oIGluY2x1ZGVkIGF0IHZhcmlvdXMgcGxhY2VzLgogCiAtIFVucmVjb2duaXplZCBrZXl3b3JkIGFyZ3VtZW50cyBub3cgcmFpc2UgVHlwZUVycm9yIHJhdGhlciB0aGFuIEtleUVycm9yLgpAQCAtMjU0ODMsMjUgKzI1NTE2LDI1IEBACiAtIFRoZSBtYWtlc2V0dXAgc2NyaXB0IHJlY29nbml6ZXMgZmlsZXMgd2l0aCBleHRlbnNpb24gLnNvIG9yIC5zbCBhcwogKHNoYXJlZCkgbGlicmFyaWVzLgogCi0tICdhY2Nlc3MnIGlzIG5vIGxvbmdlciBhIHJlc2VydmVkIHdvcmQsIGFuZCBhbGwgY29kZSByZWxhdGVkIHRvIGl0cyAKLWltcGxlbWVudGF0aW9uIGlzIGdvbmUgKG9yIGF0IGxlYXN0ICNpZmRlZidlZCBvdXQpLiAgVGhpcyBzaG91bGQgbWFrZSAKKy0gJ2FjY2VzcycgaXMgbm8gbG9uZ2VyIGEgcmVzZXJ2ZWQgd29yZCwgYW5kIGFsbCBjb2RlIHJlbGF0ZWQgdG8gaXRzCitpbXBsZW1lbnRhdGlvbiBpcyBnb25lIChvciBhdCBsZWFzdCAjaWZkZWYnZWQgb3V0KS4gIFRoaXMgc2hvdWxkIG1ha2UKIFB5dGhvbiBhIGxpdHRsZSBzcGVlZGllciB0b28hCiAKLS0gUGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIHN1Z2dlc3RlZCBieSBTam9lcmQgTXVsbGVuZGVyLiAgVGhpcyBpbmNsdWRlcyAKLXRoZSBpbnRyb2R1Y3Rpb24gb2YgdHdvIG5ldyBvcHRpb25hbCBmdW5jdGlvbiBwb2ludGVycyBpbiB0eXBlIG9iamVjdCwgCi1nZXRhdHRybyBhbmQgc2V0YXR0cm8sIHdoaWNoIGFyZSBsaWtlIGdldGF0dHIgYW5kIHNldGF0dHIgYnV0IHRha2UgYSAKKy0gUGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzIHN1Z2dlc3RlZCBieSBTam9lcmQgTXVsbGVuZGVyLiAgVGhpcyBpbmNsdWRlcwordGhlIGludHJvZHVjdGlvbiBvZiB0d28gbmV3IG9wdGlvbmFsIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHR5cGUgb2JqZWN0LAorZ2V0YXR0cm8gYW5kIHNldGF0dHJvLCB3aGljaCBhcmUgbGlrZSBnZXRhdHRyIGFuZCBzZXRhdHRyIGJ1dCB0YWtlIGEKIHN0cmluZyBvYmplY3QgaW5zdGVhZCBvZiBhIEMgc3RyaW5nIHBvaW50ZXIuCiAKLS0gTmV3IG9wZXJhdGlvbnMgaW4gc3RyaW5nIG1vZHVsZTogbHN0cmlwKHMpIGFuZCByc3RyaXAocykgc3RyaXAgd2hpdGVzcGFjZSAKLW9ubHkgb24gdGhlIGxlZnQgb3Igb25seSBvbiB0aGUgcmlnaHQsIEEgbmV3IG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IHRvIAotc3BsaXQoKSBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlcGFyYXRvcnMgaG9ub3JlZCAoc28gCi1zcGxpdGZpZWxkcyhzLCBzZXAsIG4pIHJldHVybnMgYSBsaXN0IG9mIGF0IG1vc3QgbisxIGVsZW1lbnRzKS4gIChTaW5jZSAKKy0gTmV3IG9wZXJhdGlvbnMgaW4gc3RyaW5nIG1vZHVsZTogbHN0cmlwKHMpIGFuZCByc3RyaXAocykgc3RyaXAgd2hpdGVzcGFjZQorb25seSBvbiB0aGUgbGVmdCBvciBvbmx5IG9uIHRoZSByaWdodCwgQSBuZXcgb3B0aW9uYWwgdGhpcmQgYXJndW1lbnQgdG8KK3NwbGl0KCkgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZXBhcmF0b3JzIGhvbm9yZWQgKHNvCitzcGxpdGZpZWxkcyhzLCBzZXAsIG4pIHJldHVybnMgYSBsaXN0IG9mIGF0IG1vc3QgbisxIGVsZW1lbnRzKS4gIChTaW5jZQogMS4zLCBzcGxpdGZpZWxkcyhzLCBOb25lKSBpcyB0b3RhbGx5IGVxdWl2YWxlbnQgdG8gc3BsaXQocykuKQotc3RyaW5nLmNhcHdvcmRzKCkgaGFzIGFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSAKK3N0cmluZy5jYXB3b3JkcygpIGhhcyBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgc3BlY2lmeWluZyB0aGUKIHNlcGFyYXRvciAod2hpY2ggaXMgcGFzc2VkIHRvIHNwbGl0KCkpLgogCi0tIHJlZ3N1Yi5zcGxpdCgpIGhhcyB0aGUgc2FtZSBhZGRpdGlvbiBhcyBzdHJpbmcuc3BsaXQoKS4gIHJlZ3N1Yi5zcGxpdHgocywgCi1zZXAsIG1heHNlcCkgaW1wbGVtZW50cyB0aGUgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcyByZWdzdWIuc3BsaXQocywgMSkgaW4gCistIHJlZ3N1Yi5zcGxpdCgpIGhhcyB0aGUgc2FtZSBhZGRpdGlvbiBhcyBzdHJpbmcuc3BsaXQoKS4gIHJlZ3N1Yi5zcGxpdHgocywKK3NlcCwgbWF4c2VwKSBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgd2FzIHJlZ3N1Yi5zcGxpdChzLCAxKSBpbgogMS40YmV0YTIgKHJldHVybiBhIGxpc3QgY29udGFpbmluZyB0aGUgZGVsaW1pdGVycyBhcyB3ZWxsIGFzIHRoZSB3b3JkcykuCiAKIC0gRmluYWwgdG91Y2ggZm9yIEFJWCBsb2FkaW5nLCByZXdyaXR0ZW4gTWlzYy9BSVgtTk9URVMuCkBAIC0yNTU0NSwxMSArMjU1NzgsMTEgQEAKIG1lYW5pbmdmdWwgdmFsdWUgKGEgZmV3IHRoaW5ncyB3ZXJlIGJvdGNoZWQgaW4gYmV0YSAxKS4gIExpYi9kb3NfOHgzCiBpcyBub3cgYSBzdGFuZGFyZCBwYXJ0IG9mIHRoZSBkaXN0cmlidXRpb24gKGFsYXMpLgogCi0tIE1vcmUgaW1wcm92ZW1lbnRzIHRvIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VkdXJlLiAgVHlwaW5nICJtYWtlIGluc3RhbGwiIAotbm93IGluc2VydHMgdGhlIHZlcnNpb24gbnVtYmVyIGluIHRoZSBwYXRobmFtZXMgb2YgYWxtb3N0IGV2ZXJ5dGhpbmcgCi1pbnN0YWxsZWQsIGFuZCBjcmVhdGVzIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBtb2R1bGVzIChGQ05UTC5weSBldGMuKSBpZiBub3QgCi1zdXBwbGllZCBieSB0aGUgZGlzdHJpYnV0aW9uLiAgKFhYWCBUaGVyZSdzIHN0aWxsIGEgcHJvYmxlbSB3aXRoIHRoZSBsYXR0ZXIgCi1iZWNhdXNlIHRoZSAicmVnZW4iIHNjcmlwdCByZXF1aXJlcyB0aGF0IFB5dGhvbiBpcyBpbnN0YWxsZWQuICBTb21lIG1hbnVhbCAKKy0gTW9yZSBpbXByb3ZlbWVudHMgdG8gdGhlIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUuICBUeXBpbmcgIm1ha2UgaW5zdGFsbCIKK25vdyBpbnNlcnRzIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgcGF0aG5hbWVzIG9mIGFsbW9zdCBldmVyeXRoaW5nCitpbnN0YWxsZWQsIGFuZCBjcmVhdGVzIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBtb2R1bGVzIChGQ05UTC5weSBldGMuKSBpZiBub3QKK3N1cHBsaWVkIGJ5IHRoZSBkaXN0cmlidXRpb24uICAoWFhYIFRoZXJlJ3Mgc3RpbGwgYSBwcm9ibGVtIHdpdGggdGhlIGxhdHRlcgorYmVjYXVzZSB0aGUgInJlZ2VuIiBzY3JpcHQgcmVxdWlyZXMgdGhhdCBQeXRob24gaXMgaW5zdGFsbGVkLiAgU29tZSBtYW51YWwKIGludGVydmVudGlvbiBtYXkgc3RpbGwgYmUgcmVxdWlyZWQuKSAoVGhpcyBoYXMgYmVlbiBmaXhlZCBpbiAxLjRiZXRhMy4pCiAKIC0gTmV3IG1vZHVsZXM6IGVycm5vLCBvcGVyYXRvciAoWFhYKS4KQEAgLTI1NjEyLDggKzI1NjQ1LDggQEAKIAogLSBBZGRlZCBzeXMucGxhdGZvcm0gYW5kIHN5cy5leGVjX3BsYXRmb3JtIGZvciBCaWxsIEphbnNzZW4uCiAKLS0gSW5zdGFsbGF0aW9uIGhhcyBiZWVuIGNvbXBsZXRlbHkgb3ZlcmhhdWxlZC4gICJtYWtlIGluc3RhbGwiIG5vdyBpbnN0YWxscyAKLWV2ZXJ5dGhpbmcsIG5vdCBqdXN0IHRoZSBweXRob24gYmluYXJ5LiAgSW5zdGFsbGF0aW9uIHVzZXMgdGhlIGluc3RhbGwtc2ggCistIEluc3RhbGxhdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWx5IG92ZXJoYXVsZWQuICAibWFrZSBpbnN0YWxsIiBub3cgaW5zdGFsbHMKK2V2ZXJ5dGhpbmcsIG5vdCBqdXN0IHRoZSBweXRob24gYmluYXJ5LiAgSW5zdGFsbGF0aW9uIHVzZXMgdGhlIGluc3RhbGwtc2gKIHNjcmlwdCAoYm9ycm93ZWQgZnJvbSBYMTEpIHRvIGluc3RhbGwgZWFjaCBmaWxlLgogCiAtIE5ldyBmdW5jdGlvbnMgaW4gdGhlIHBvc2l4IG1vZHVsZTogbWtmaWZvLCBwbG9jaywgcmVtb3ZlICg9PSB1bmxpbmspLApAQCAtMjU2MjMsNTkgKzI1NjU2LDU5IEBACiAKIC0gU2hhcmVkIGxpYnJhcnkgc3VwcG9ydCBmb3IgRnJlZUJTRC4KIAotLSBUaGUgLS13aXRoLXJlYWRsaW5lIG9wdGlvbiBjYW4gbm93IGJlIHVzZWQgd2l0aG91dCBhIERJUkVDVE9SWSBhcmd1bWVudCwgCi1mb3Igc3lzdGVtcyB3aGVyZSBsaWJyZWFkbGluZS4qIGlzIGluIG9uZSBvZiB0aGUgc3RhbmRhcmQgcGxhY2VzLiAgSXQgaXMgCistIFRoZSAtLXdpdGgtcmVhZGxpbmUgb3B0aW9uIGNhbiBub3cgYmUgdXNlZCB3aXRob3V0IGEgRElSRUNUT1JZIGFyZ3VtZW50LAorZm9yIHN5c3RlbXMgd2hlcmUgbGlicmVhZGxpbmUuKiBpcyBpbiBvbmUgb2YgdGhlIHN0YW5kYXJkIHBsYWNlcy4gIEl0IGlzCiBhbHNvIHBvc3NpYmxlIGZvciBpdCB0byBiZSBhIHNoYXJlZCBsaWJyYXJ5LgogCi0tIFRoZSBleHRlbnNpb24gdGtpbnRlciBoYXMgYmVlbiByZW5hbWVkIHRvIF90a2ludGVyLCB0byBhdm9pZCBjb25mdXNpb24gCi13aXRoIFRraW50ZXIucHkgb25jYXNlIGluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcy4gIEl0IG5vdyBzdXBwb3J0cyBUayA0LjEgYXMgCistIFRoZSBleHRlbnNpb24gdGtpbnRlciBoYXMgYmVlbiByZW5hbWVkIHRvIF90a2ludGVyLCB0byBhdm9pZCBjb25mdXNpb24KK3dpdGggVGtpbnRlci5weSBvbmNhc2UgaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLiAgSXQgbm93IHN1cHBvcnRzIFRrIDQuMSBhcwogd2VsbCBhcyA0LjAuCiAKLS0gQXV0aG9yJ3MgY2hhbmdlIG9mIGFkZHJlc3MgZnJvbSBDV0kgaW4gQW1zdGVyZGFtLCBUaGUgTmV0aGVybGFuZHMsIHRvIAorLSBBdXRob3IncyBjaGFuZ2Ugb2YgYWRkcmVzcyBmcm9tIENXSSBpbiBBbXN0ZXJkYW0sIFRoZSBOZXRoZXJsYW5kcywgdG8KIENOUkkgaW4gUmVzdG9uLCBWQSwgVVNBLgogCi0tIFRoZSBtYXRoLmh5cG90KCkgZnVuY3Rpb24gaXMgbm93IGFsd2F5cyBhdmFpbGFibGUgKGlmIGl0IGlzbid0IGZvdW5kIGluIAorLSBUaGUgbWF0aC5oeXBvdCgpIGZ1bmN0aW9uIGlzIG5vdyBhbHdheXMgYXZhaWxhYmxlIChpZiBpdCBpc24ndCBmb3VuZCBpbgogdGhlIEMgbWF0aCBsaWJyYXJ5LCBQeXRob24gcHJvdmlkZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbikuCiAKLS0gVGhlIGxhdGV4IGRvY3VtZW50YXRpb24gaXMgbm93IGNvbXBhdGlibGUgd2l0aCBsYXRleDJlLCB0aGFua3MgdG8gRGF2aWQgCistIFRoZSBsYXRleCBkb2N1bWVudGF0aW9uIGlzIG5vdyBjb21wYXRpYmxlIHdpdGggbGF0ZXgyZSwgdGhhbmtzIHRvIERhdmlkCiBBc2NoZXIuCiAKIC0gVGhlIGV4cHJlc3Npb24geCoqeSBpcyBub3cgZXF1aXZhbGVudCB0byBwb3coeCwgeSkuCiAKIC0gVGhlIGluZGV4aW5nIGV4cHJlc3Npb24geFthLCBiLCBjXSBpcyBub3cgZXF1aXZhbGVudCB0byB4WyhhLCBiLCBjKV0uCiAKLS0gQ29tcGxleCBudW1iZXJzIGFyZSBub3cgc3VwcG9ydGVkLiAgSW1hZ2luYXJ5IGNvbnN0YW50cyBhcmUgd3JpdHRlbiB3aXRoIAotYSAnaicgb3IgJ0onIHByZWZpeCwgZ2VuZXJhbCBjb21wbGV4IG51bWJlcnMgY2FuIGJlIGZvcm1lZCBieSBhZGRpbmcgYSByZWFsIAotcGFydCB0byBhbiBpbWFnaW5hcnkgcGFydCwgbGlrZSAzKzRqLiAgQ29tcGxleCBudW1iZXJzIGFyZSBhbHdheXMgc3RvcmVkIGluIAotZmxvYXRpbmcgcG9pbnQgZm9ybSwgc28gdGhpcyBpcyBlcXVpdmFsZW50IHRvIDMuMCs0LjBqLiAgSXQgaXMgYWxzbyAKLXBvc3NpYmxlIHRvIGNyZWF0ZSBjb21wbGV4IG51bWJlcnMgd2l0aCB0aGUgbmV3IGJ1aWx0LWluIGZ1bmN0aW9uIAotY29tcGxleChyZSwgW2ltXSkuICBGb3IgdGhlIGZvb3RwcmludC1jb25zY2lvdXMsIGNvbXBsZXggbnVtYmVyIHN1cHBvcnQgY2FuIAorLSBDb21wbGV4IG51bWJlcnMgYXJlIG5vdyBzdXBwb3J0ZWQuICBJbWFnaW5hcnkgY29uc3RhbnRzIGFyZSB3cml0dGVuIHdpdGgKK2EgJ2onIG9yICdKJyBwcmVmaXgsIGdlbmVyYWwgY29tcGxleCBudW1iZXJzIGNhbiBiZSBmb3JtZWQgYnkgYWRkaW5nIGEgcmVhbAorcGFydCB0byBhbiBpbWFnaW5hcnkgcGFydCwgbGlrZSAzKzRqLiAgQ29tcGxleCBudW1iZXJzIGFyZSBhbHdheXMgc3RvcmVkIGluCitmbG9hdGluZyBwb2ludCBmb3JtLCBzbyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gMy4wKzQuMGouICBJdCBpcyBhbHNvCitwb3NzaWJsZSB0byBjcmVhdGUgY29tcGxleCBudW1iZXJzIHdpdGggdGhlIG5ldyBidWlsdC1pbiBmdW5jdGlvbgorY29tcGxleChyZSwgW2ltXSkuICBGb3IgdGhlIGZvb3RwcmludC1jb25zY2lvdXMsIGNvbXBsZXggbnVtYmVyIHN1cHBvcnQgY2FuCiBiZSBkaXNhYmxlZCBieSBkZWZpbmluZyB0aGUgc3ltYm9sIFdJVEhPVVRfQ09NUExFWC4KIAogLSBOZXcgYnVpbHQtaW4gZnVuY3Rpb24gbGlzdCgpIGlzIHRoZSBsb25nLWF3YWl0ZWQgY291bnRlcnBhcnQgb2YgdHVwbGUoKS4KIAotLSBUaGVyZSdzIGEgbmV3ICJjbWF0aCIgbW9kdWxlIHdoaWNoIHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9ucyBhcyB0aGUgCi0ibWF0aCIgbGlicmFyeSBidXQgd2l0aCBjb21wbGV4IGFyZ3VtZW50cyBhbmQgcmVzdWx0cy4gIChUaGVyZSBhcmUgdmVyeSAKLWdvb2QgcmVhc29ucyB3aHkgbWF0aC5zcXJ0KC0xKSBzdGlsbCByYWlzZXMgYW4gZXhjZXB0aW9uIC0tIHlvdSBoYXZlIHRvIHVzZSAKKy0gVGhlcmUncyBhIG5ldyAiY21hdGgiIG1vZHVsZSB3aGljaCBwcm92aWRlcyB0aGUgc2FtZSBmdW5jdGlvbnMgYXMgdGhlCisibWF0aCIgbGlicmFyeSBidXQgd2l0aCBjb21wbGV4IGFyZ3VtZW50cyBhbmQgcmVzdWx0cy4gIChUaGVyZSBhcmUgdmVyeQorZ29vZCByZWFzb25zIHdoeSBtYXRoLnNxcnQoLTEpIHN0aWxsIHJhaXNlcyBhbiBleGNlcHRpb24gLS0geW91IGhhdmUgdG8gdXNlCiBjbWF0aC5zcXJ0KC0xKSB0byBnZXQgMWogZm9yIGFuIGFuc3dlci4pCiAKLS0gVGhlIFB5dGhvbi5oIGhlYWRlciBmaWxlICh3aGljaCBpcyByZWFsbHkgdGhlIHNhbWUgYXMgYWxsb2JqZWN0cy5oIGV4Y2VwdCAKLWl0IGRpc2FibGVzIHN1cHBvcnQgZm9yIG9sZCBzdHlsZSBuYW1lcykgbm93IGluY2x1ZGVzIHNldmVyYWwgbW9yZSBmaWxlcywgCistIFRoZSBQeXRob24uaCBoZWFkZXIgZmlsZSAod2hpY2ggaXMgcmVhbGx5IHRoZSBzYW1lIGFzIGFsbG9iamVjdHMuaCBleGNlcHQKK2l0IGRpc2FibGVzIHN1cHBvcnQgZm9yIG9sZCBzdHlsZSBuYW1lcykgbm93IGluY2x1ZGVzIHNldmVyYWwgbW9yZSBmaWxlcywKIHNvIHlvdSBoYXZlIHRvIGhhdmUgZmV3ZXIgI2luY2x1ZGUgc3RhdGVtZW50cyBpbiB0aGUgYXZlcmFnZSBleHRlbnNpb24uCiAKLS0gVGhlIE5ERUJVRyBzeW1ib2wgaXMgbm8gbG9uZ2VyIHVzZWQuICBDb2RlIHRoYXQgdXNlZCB0byBiZSBkZXBlbmRlbnQgb24gCi10aGUgcHJlc2VuY2Ugb2YgTkRFQlVHIGlzIG5vdyBwcmVzZW50IG9uIHRoZSBhYnNlbmNlIG9mIERFQlVHLiAgVFJBQ0VfUkVGUyAKLWFuZCBSRUZfREVCVUcgaGF2ZSBiZWVuIHJlbmFtZWQgdG8gUHlfVFJBQ0VfUkVGUyBhbmQgUHlfUkVGX0RFQlVHLCAKLXJlc3BlY3RpdmVseS4gIEF0IGxvbmcgbGFzdCwgdGhlIHNvdXJjZSBhY3R1YWxseSBjb21waWxlcyBhbmQgbGlua3Mgd2l0aG91dCAKKy0gVGhlIE5ERUJVRyBzeW1ib2wgaXMgbm8gbG9uZ2VyIHVzZWQuICBDb2RlIHRoYXQgdXNlZCB0byBiZSBkZXBlbmRlbnQgb24KK3RoZSBwcmVzZW5jZSBvZiBOREVCVUcgaXMgbm93IHByZXNlbnQgb24gdGhlIGFic2VuY2Ugb2YgREVCVUcuICBUUkFDRV9SRUZTCithbmQgUkVGX0RFQlVHIGhhdmUgYmVlbiByZW5hbWVkIHRvIFB5X1RSQUNFX1JFRlMgYW5kIFB5X1JFRl9ERUJVRywKK3Jlc3BlY3RpdmVseS4gIEF0IGxvbmcgbGFzdCwgdGhlIHNvdXJjZSBhY3R1YWxseSBjb21waWxlcyBhbmQgbGlua3Mgd2l0aG91dAogZXJyb3JzIHdoZW4gdGhpcyBzeW1ib2wgaXMgZGVmaW5lZC4KIAotLSBTZXZlcmFsIHN5bWJvbHMgdGhhdCBkaWRuJ3QgZm9sbG93IHRoZSBuZXcgbmFtaW5nIHNjaGVtZSBoYXZlIGJlZW4gCi1yZW5hbWVkICh1c3VhbGx5IGJ5IGFkZGluZyB0byByZW5hbWUyLmgpIHRvIHVzZSBhIFB5IG9yIF9QeSBwcmVmaXguICBUaGVyZSAKLWFyZSBubyBleHRlcm5hbCBzeW1ib2xzIGxlZnQgd2l0aG91dCBhIFB5IG9yIF9QeSBwcmVmaXgsIG5vdCBldmVuIHRob3NlIAotZGVmaW5lZCBieSBzb3VyY2VzIHRoYXQgd2VyZSBpbmNvcnBvcmF0ZWQgZnJvbSBlbHNld2hlcmUgKHJlZ2V4cHIuYywgCistIFNldmVyYWwgc3ltYm9scyB0aGF0IGRpZG4ndCBmb2xsb3cgdGhlIG5ldyBuYW1pbmcgc2NoZW1lIGhhdmUgYmVlbgorcmVuYW1lZCAodXN1YWxseSBieSBhZGRpbmcgdG8gcmVuYW1lMi5oKSB0byB1c2UgYSBQeSBvciBfUHkgcHJlZml4LiAgVGhlcmUKK2FyZSBubyBleHRlcm5hbCBzeW1ib2xzIGxlZnQgd2l0aG91dCBhIFB5IG9yIF9QeSBwcmVmaXgsIG5vdCBldmVuIHRob3NlCitkZWZpbmVkIGJ5IHNvdXJjZXMgdGhhdCB3ZXJlIGluY29ycG9yYXRlZCBmcm9tIGVsc2V3aGVyZSAocmVnZXhwci5jLAogbWQ1Yy5jKS4gIChNYWNyb3MgYXJlIGEgZGlmZmVyZW50IHN0b3J5Li4uKQogCi0tIFRoZXJlIGFyZSBub3cgdHlwZWRlZnMgZm9yIHRoZSBzdHJ1Y3R1cmVzIGRlZmluZWQgaW4gY29uZmlnLmMgYW5kIAorLSBUaGVyZSBhcmUgbm93IHR5cGVkZWZzIGZvciB0aGUgc3RydWN0dXJlcyBkZWZpbmVkIGluIGNvbmZpZy5jIGFuZAogZnJvemVuLmMuCiAKIC0gTmV3IFBZVEhPTl9BUElfVkVSU0lPTiB2YWx1ZSBhbmQgLnB5YyBmaWxlIG1hZ2ljIG51bWJlci4KQEAgLTI1Njg5LDEyNSArMjU3MjIsMTI1IEBACiAtIFRoZSBiaW5oZXggYW5kIGJpbmFzY2lpIG1vZHVsZXMgbm93IGFjdHVhbGx5IHdvcmsuCiAKIC0gVGhlIGNnaSBtb2R1bGUgaGFzIGJlZW4gYWxtb3N0IHRvdGFsbHkgcmV3cml0dGVuIGFuZCBkb2N1bWVudGVkLgotSXQgbm93IHN1cHBvcnRzIGZpbGUgdXBsb2FkIGFuZCBhIG5ldyBkYXRhIHR5cGUgdG8gaGFuZGxlIGZvcm1zIG1vcmUgCitJdCBub3cgc3VwcG9ydHMgZmlsZSB1cGxvYWQgYW5kIGEgbmV3IGRhdGEgdHlwZSB0byBoYW5kbGUgZm9ybXMgbW9yZQogZmxleGlibHkuCiAKIC0gVGhlIGZvcm1hdHRlciBtb2R1bGUgKGZvciB1c2Ugd2l0aCBodG1sbGliKSBoYXMgYmVlbiBvdmVyaGF1bGVkIChhZ2FpbikuCiAKIC0gVGhlIGZ0cGxpYiBtb2R1bGUgbm93IHN1cHBvcnRzIHBhc3NpdmUgbW9kZSBhbmQgaGFzIGRvYyBzdHJpbmdzLgogCi0tIEluIChpZGVhbGx5KSBhbGwgcGxhY2VzIHdoZXJlIGJpbmFyeSBmaWxlcyBhcmUgcmVhZCBvciB3cml0dGVuLCB0aGUgZmlsZSAKLWlzIG5vdyBjb3JyZWN0bHkgb3BlbmVkIGluIGJpbmFyeSBtb2RlICgncmInIG9yICd3YicpIHNvIHRoZSBjb2RlIHdpbGwgd29yayAKKy0gSW4gKGlkZWFsbHkpIGFsbCBwbGFjZXMgd2hlcmUgYmluYXJ5IGZpbGVzIGFyZSByZWFkIG9yIHdyaXR0ZW4sIHRoZSBmaWxlCitpcyBub3cgY29ycmVjdGx5IG9wZW5lZCBpbiBiaW5hcnkgbW9kZSAoJ3JiJyBvciAnd2InKSBzbyB0aGUgY29kZSB3aWxsIHdvcmsKIG9uIE1hYyBvciBQQy4KIAotLSBEdW1teSB2ZXJzaW9ucyBvZiBvcy5wYXRoLmV4cGFuZHZhcnMoKSBhbmQgZXhwYW5kdXNlcigpIGFyZSBub3cgcHJvdmlkZWQgCistIER1bW15IHZlcnNpb25zIG9mIG9zLnBhdGguZXhwYW5kdmFycygpIGFuZCBleHBhbmR1c2VyKCkgYXJlIG5vdyBwcm92aWRlZAogb24gbm9uLVVuaXggcGxhdGZvcm1zLgogCi0tIE1vZHVsZSB1cmxsaWIgbm93IGhhcyB0d28gbmV3IGZ1bmN0aW9ucyB1cmwycGF0aG5hbWUgYW5kIHBhdGhuYW1lMnVybCAKLXdoaWNoIHR1cm4gbG9jYWwgZmlsZW5hbWVzIGludG8gImZpbGU6Li4uIiBVUkxzIHVzaW5nIHRoZSBzYW1lIHJ1bGVzIGFzIAotTmV0c2NhcGUgKHdoeSBiZSBkaWZmZXJlbnQpLiAgaXQgYWxzbyBzdXBwb3J0cyB1cmxyZXRyaWV2ZSgpIHdpdGggYSAKLXBhdGhuYW1lIHBhcmFtZXRlciwgYW5kIGhvbm9ycyB0aGUgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIChodHRwX3Byb3h5IAorLSBNb2R1bGUgdXJsbGliIG5vdyBoYXMgdHdvIG5ldyBmdW5jdGlvbnMgdXJsMnBhdGhuYW1lIGFuZCBwYXRobmFtZTJ1cmwKK3doaWNoIHR1cm4gbG9jYWwgZmlsZW5hbWVzIGludG8gImZpbGU6Li4uIiBVUkxzIHVzaW5nIHRoZSBzYW1lIHJ1bGVzIGFzCitOZXRzY2FwZSAod2h5IGJlIGRpZmZlcmVudCkuICBpdCBhbHNvIHN1cHBvcnRzIHVybHJldHJpZXZlKCkgd2l0aCBhCitwYXRobmFtZSBwYXJhbWV0ZXIsIGFuZCBob25vcnMgdGhlIHByb3h5IGVudmlyb25tZW50IHZhcmlhYmxlcyAoaHR0cF9wcm94eQogZXRjLikuICBUaGUgVVJMIHBhcnNpbmcgaGFzIGJlZW4gaW1wcm92ZWQgc29tZXdoYXQsIHRvby4KIAotLSBNaWNybyBpbXByb3ZlbWVudHMgdG8gdXJscGFyc2UuICBBZGRlZCB1cmxwYXJzZS51cmxkZWZyYWcoKSB3aGljaCAKKy0gTWljcm8gaW1wcm92ZW1lbnRzIHRvIHVybHBhcnNlLiAgQWRkZWQgdXJscGFyc2UudXJsZGVmcmFnKCkgd2hpY2gKIHJlbW92ZXMgYSB0cmFpbGluZyBgYCNmcmFnbWVudCcnIGlmIGFueS4KIAogLSBUaGUgbWFpbGJveCBtb2R1bGUgbm93IHN1cHBvcnRzIE1IIHN0eWxlIG1lc3NhZ2UgZGVsaW1pdGVycyBhcyB3ZWxsLgogCi0tIFRoZSBtaGxpYiBtb2R1bGUgY29udGFpbnMgc29tZSBuZXcgZnVuY3Rpb25hbGl0eTogc2V0Y29udGV4dCgpIHRvIHNldCB0aGUgCi1jdXJyZW50IGZvbGRlciBhbmQgcGFyc2VzZXF1ZW5jZSgpIHRvIHBhcnNlIGEgc2VxdWVuY2UgYXMgY29tbW9ubHkgcGFzc2VkIAorLSBUaGUgbWhsaWIgbW9kdWxlIGNvbnRhaW5zIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHk6IHNldGNvbnRleHQoKSB0byBzZXQgdGhlCitjdXJyZW50IGZvbGRlciBhbmQgcGFyc2VzZXF1ZW5jZSgpIHRvIHBhcnNlIGEgc2VxdWVuY2UgYXMgY29tbW9ubHkgcGFzc2VkCiB0byBNSCBjb21tYW5kcyAoZS5nLiAxLTEwIG9yIGxhc3Q6NSkuCiAKLS0gTmV3IG1vZHVsZSBtaW1pZnkgZm9yIGNvbnZlcnNpb24gdG8gYW5kIGZyb20gTUlNRSBmb3JtYXQgb2YgZW1haWwgCistIE5ldyBtb2R1bGUgbWltaWZ5IGZvciBjb252ZXJzaW9uIHRvIGFuZCBmcm9tIE1JTUUgZm9ybWF0IG9mIGVtYWlsCiBtZXNzYWdlcy4KIAotLSBNb2R1bGUgbmkgbm93IGF1dG9tYXRpY2FsbHkgaW5zdGFsbHMgaXRzZWxmIHdoZW4gZmlyc3QgaW1wb3J0ZWQgLS0gdGhpcyAKLWlzIGFnYWluc3QgdGhlIG5vcm1hbCBydWxlIHRoYXQgbW9kdWxlcyBzaG91bGQgZGVmaW5lIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyAKLWJ1dCBub3QgaW52b2tlIHRoZW0sIGJ1dCBhcHBlYXJzIG1vcmUgdXNlZnVsIGluIHRoZSBjYXNlIHRoYXQgdHdvIAorLSBNb2R1bGUgbmkgbm93IGF1dG9tYXRpY2FsbHkgaW5zdGFsbHMgaXRzZWxmIHdoZW4gZmlyc3QgaW1wb3J0ZWQgLS0gdGhpcworaXMgYWdhaW5zdCB0aGUgbm9ybWFsIHJ1bGUgdGhhdCBtb2R1bGVzIHNob3VsZCBkZWZpbmUgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCitidXQgbm90IGludm9rZSB0aGVtLCBidXQgYXBwZWFycyBtb3JlIHVzZWZ1bCBpbiB0aGUgY2FzZSB0aGF0IHR3bwogZGlmZmVyZW50LCBpbmRlcGVuZGVudCBtb2R1bGVzIHdhbnQgdG8gdXNlIG5pJ3MgZmVhdHVyZXMuCiAKIC0gU29tZSBzbWFsbCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMgaW4gbW9kdWxlIHBpY2tsZS4KIAotLSBTbWFsbCBpbnRlcmZhY2UgY2hhbmdlIHRvIHRoZSBwcm9maWxlLnJ1biooKSBmYW1pbHkgb2YgZnVuY3Rpb25zIC0tIG1vcmUgCistIFNtYWxsIGludGVyZmFjZSBjaGFuZ2UgdG8gdGhlIHByb2ZpbGUucnVuKigpIGZhbWlseSBvZiBmdW5jdGlvbnMgLS0gbW9yZQogc2Vuc2libGUgaGFuZGxpbmcgb2YgcmV0dXJuIHZhbHVlcy4KIAotLSBUaGUgb2ZmaWNpYWxseSByZWdpc3RlcmVkIE1hYyBjcmVhdG9yIGZvciBQeXRob24gZmlsZXMgaXMgJ1B5dGgnLiAgVGhpcyAKKy0gVGhlIG9mZmljaWFsbHkgcmVnaXN0ZXJlZCBNYWMgY3JlYXRvciBmb3IgUHl0aG9uIGZpbGVzIGlzICdQeXRoJy4gIFRoaXMKIHJlcGxhY2VzICdQWVRIJyB3aGljaCB3YXMgdXNlZCBiZWZvcmUgYnV0IG5ldmVyIHJlZ2lzdGVyZWQuCiAKIC0gQWRkZWQgcmVnc3ViLmNhcHdvcmRzKCkuICAoWFhYKQogCi0tIEFkZGVkIHN0cmluZy5jYXB3b3JkcygpLCBzdHJpbmcuY2FwaXRhbGl6ZSgpIGFuZCBzdHJpbmcudHJhbnNsYXRlKCkuICAKKy0gQWRkZWQgc3RyaW5nLmNhcHdvcmRzKCksIHN0cmluZy5jYXBpdGFsaXplKCkgYW5kIHN0cmluZy50cmFuc2xhdGUoKS4KIChYWFgpCiAKLS0gRml4ZWQgYW4gaW50ZXJmYWNlIGJ1ZyBpbiB0aGUgcmV4ZWMgbW9kdWxlOiBpdCB3YXMgaW1wb3NzaWJsZSB0byBwYXNzIGEgCi1ob29rcyBpbnN0YW5jZSB0byB0aGUgUkV4ZWMgY2xhc3MuICByZXhlYyBub3cgYWxzbyBzdXBwb3J0cyB0aGUgZHluYW1pYyAKLWxvYWRpbmcgb2YgbW9kdWxlcyBmcm9tIHNoYXJlZCBsaWJyYXJpZXMuICBTb21lIG90aGVyIGludGVyZmFjZXMgaGF2ZSBiZWVuIAorLSBGaXhlZCBhbiBpbnRlcmZhY2UgYnVnIGluIHRoZSByZXhlYyBtb2R1bGU6IGl0IHdhcyBpbXBvc3NpYmxlIHRvIHBhc3MgYQoraG9va3MgaW5zdGFuY2UgdG8gdGhlIFJFeGVjIGNsYXNzLiAgcmV4ZWMgbm93IGFsc28gc3VwcG9ydHMgdGhlIGR5bmFtaWMKK2xvYWRpbmcgb2YgbW9kdWxlcyBmcm9tIHNoYXJlZCBsaWJyYXJpZXMuICBTb21lIG90aGVyIGludGVyZmFjZXMgaGF2ZSBiZWVuCiBhZGRlZCB0b28uCiAKLS0gTW9kdWxlIHJmYzgyMiBub3cgY2FjaGVzIHRoZSBoZWFkZXJzIGluIGEgZGljdGlvbmFyeSBmb3IgbW9yZSBlZmZpY2llbnQgCistIE1vZHVsZSByZmM4MjIgbm93IGNhY2hlcyB0aGUgaGVhZGVycyBpbiBhIGRpY3Rpb25hcnkgZm9yIG1vcmUgZWZmaWNpZW50CiBsb29rdXAuCiAKLS0gVGhlIHNnbWxsaWIgbW9kdWxlIG5vdyB1bmRlcnN0YW5kcyBhIGxpbWl0ZWQgbnVtYmVyIG9mIFNHTUwgInNob3J0aGFuZHMiIAorLSBUaGUgc2dtbGxpYiBtb2R1bGUgbm93IHVuZGVyc3RhbmRzIGEgbGltaXRlZCBudW1iZXIgb2YgU0dNTCAic2hvcnRoYW5kcyIKIGxpa2UgPEEvLi4uLyBmb3IgPEE+Li4uPC9BPi4gIChJdCdzIG5vdCBjbGVhciB0aGF0IHRoaXMgd2FzIGEgZ29vZCBpZGVhLi4uKQogCi0tIFRoZSB0ZW1wZmlsZSBtb2R1bGUgYWN0dWFsbHkgdHJpZXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IHBsYWNlcyB0byBmaW5kIGEgCi11c2FibGUgdGVtcG9yYXJ5IGRpcmVjdG9yeS4gIChUaGlzIHdhcyBwcm9tcHRlZCBieSBjZXJ0YWluIExpbnV4IAotaW5zdGFsbGF0aW9ucyB0aGF0IGFwcGVhciB0byBiZSBtaXNzaW5nIGEgL3Vzci90bXAgZGlyZWN0b3J5LikgW0EgYnVnIGluIAotdGhlIGltcGxlbWVudGF0aW9uIHRoYXQgd291bGQgaWdub3JlIGEgcHJlLWV4aXN0aW5nIHRtcGRpciBnbG9iYWwgaGFzIGJlZW4gCistIFRoZSB0ZW1wZmlsZSBtb2R1bGUgYWN0dWFsbHkgdHJpZXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IHBsYWNlcyB0byBmaW5kIGEKK3VzYWJsZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiAgKFRoaXMgd2FzIHByb21wdGVkIGJ5IGNlcnRhaW4gTGludXgKK2luc3RhbGxhdGlvbnMgdGhhdCBhcHBlYXIgdG8gYmUgbWlzc2luZyBhIC91c3IvdG1wIGRpcmVjdG9yeS4pIFtBIGJ1ZyBpbgordGhlIGltcGxlbWVudGF0aW9uIHRoYXQgd291bGQgaWdub3JlIGEgcHJlLWV4aXN0aW5nIHRtcGRpciBnbG9iYWwgaGFzIGJlZW4KIGZpeGVkIGluIGJldGEzLl0KIAogLSBNdWNoIGltcHJvdmVkIGFuZCBlbmhhbnZlZCBGaWxlRGlhbG9nIG1vZHVsZSBmb3IgVGtpbnRlci4KIAotLSBNYW55IHNtYWxsIGNoYW5nZXMgdG8gVGtpbnRlciwgdG8gYnJpbmcgaXQgbW9yZSBpbiBsaW5lIHdpdGggVGsgNC4wIChhcyAKKy0gTWFueSBzbWFsbCBjaGFuZ2VzIHRvIFRraW50ZXIsIHRvIGJyaW5nIGl0IG1vcmUgaW4gbGluZSB3aXRoIFRrIDQuMCAoYXMKIHdlbGwgYXMgVGsgNC4xKS4KIAotLSBOZXcgc29ja2V0IGludGVyZmFjZXMgaW5jbHVkZSBudG9ocygpLCBudG9obCgpLCBodG9ucygpLCBodG9ubCgpLCBhbmQgCi1zLmR1cCgpLiAgU29ja2V0cyBub3cgd29yayBjb3JyZWN0bHkgb24gV2luZG93cy4gIE9uIFdpbmRvd3MsIHRoZSBidWlsdC1pbiAKLWV4dGVuc2lvbiBpcyBjYWxsZWQgX3NvY2tldCBhbmQgYSB3cmFwcGVyIG1vZHVsZSB3aW4vc29ja2V0LnB5IHByb3ZpZGVzIAotIm1ha2VmaWxlKCkiIGFuZCAiZHVwKCkiIGZ1bmN0aW9uYWxpdHkuICBPbiBXaW5kb3dzLCB0aGUgc2VsZWN0IG1vZHVsZSAKKy0gTmV3IHNvY2tldCBpbnRlcmZhY2VzIGluY2x1ZGUgbnRvaHMoKSwgbnRvaGwoKSwgaHRvbnMoKSwgaHRvbmwoKSwgYW5kCitzLmR1cCgpLiAgU29ja2V0cyBub3cgd29yayBjb3JyZWN0bHkgb24gV2luZG93cy4gIE9uIFdpbmRvd3MsIHRoZSBidWlsdC1pbgorZXh0ZW5zaW9uIGlzIGNhbGxlZCBfc29ja2V0IGFuZCBhIHdyYXBwZXIgbW9kdWxlIHdpbi9zb2NrZXQucHkgcHJvdmlkZXMKKyJtYWtlZmlsZSgpIiBhbmQgImR1cCgpIiBmdW5jdGlvbmFsaXR5LiAgT24gV2luZG93cywgdGhlIHNlbGVjdCBtb2R1bGUKIHdvcmtzIG9ubHkgd2l0aCBzb2NrZXQgb2JqZWN0cy4KIAogLSBCdWdzIGluIGJzZGRiIG1vZHVsZSBmaXhlZCAoZS5nLiBtaXNzaW5nIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzKS4KIAogLSBUaGUgY3Vyc2VzIGV4dGVuc2lvbiBub3cgaW5jbHVkZXMgPG5jdXJzZXMuaD4gd2hlbiBhdmFpbGFibGUuCiAKLS0gVGhlIGdkYm0gbW9kdWxlIG5vdyBzdXBwb3J0cyBvcGVuaW5nIGRhdGFiYXNlcyBpbiAiZmFzdCIgbW9kZSBieSAKKy0gVGhlIGdkYm0gbW9kdWxlIG5vdyBzdXBwb3J0cyBvcGVuaW5nIGRhdGFiYXNlcyBpbiAiZmFzdCIgbW9kZSBieQogc3BlY2lmeWluZyAnZicgYXMgdGhlIHNlY29uZCBjaGFyYWN0ZXIgb3IgdGhlIG1vZGUgc3RyaW5nLgogCi0tIG5ldyB2YXJpYWJsZXMgc3lzLnByZWZpeCBhbmQgc3lzLmV4ZWNfcHJlZml4IHBhc3MgY29ycmVzcG9uZGluZyAKKy0gbmV3IHZhcmlhYmxlcyBzeXMucHJlZml4IGFuZCBzeXMuZXhlY19wcmVmaXggcGFzcyBjb3JyZXNwb25kaW5nCiBjb25maWd1cmF0aW9uIG9wdGlvbnMgLyBNYWtlZmlsZSB2YXJpYWJsZXMgdG8gdGhlIFB5dGhvbiBwcm9ncmFtbWVyLgogCi0tIFRoZSBgYG5ldycnIG1vZHVsZSBub3cgc3VwcG9ydHMgY3JlYXRpbmcgbmV3IHVzZXItZGVmaW5lZCBjbGFzc2VzIGFzIHdlbGwgCistIFRoZSBgYG5ldycnIG1vZHVsZSBub3cgc3VwcG9ydHMgY3JlYXRpbmcgbmV3IHVzZXItZGVmaW5lZCBjbGFzc2VzIGFzIHdlbGwKIGFzIGluc3RhbmNlcyB0aGVyZW9mLgogCi0tIFRoZSBzb3VuZGV4IG1vZHVsZSBub3cgc3BvcnRzIGdldF9zb3VuZGV4KCkgdG8gZ2V0IHRoZSBzb3VuZGV4IHZhbHVlIGZvciBhbiAKLWFyYml0cmFyeSBzdHJpbmcgKGZvcm1lcmx5IGl0IHdvdWxkIG9ubHkgZG8gc291bmRleC1iYXNlZCBzdHJpbmcgCistIFRoZSBzb3VuZGV4IG1vZHVsZSBub3cgc3BvcnRzIGdldF9zb3VuZGV4KCkgdG8gZ2V0IHRoZSBzb3VuZGV4IHZhbHVlIGZvciBhbgorYXJiaXRyYXJ5IHN0cmluZyAoZm9ybWVybHkgaXQgd291bGQgb25seSBkbyBzb3VuZGV4LWJhc2VkIHN0cmluZwogY29tcGFyaXNvbikgYXMgd2VsbCBhcyBkb2Mgc3RyaW5ncy4KIAotLSBOZXcgb2JqZWN0IHR5cGUgImNvYmplY3QiIHRvIHNhZmVseSB3cmFwIHZvaWQgcG9pbnRlcnMgZm9yIHBhc3NpbmcgdGhlbSAKKy0gTmV3IG9iamVjdCB0eXBlICJjb2JqZWN0IiB0byBzYWZlbHkgd3JhcCB2b2lkIHBvaW50ZXJzIGZvciBwYXNzaW5nIHRoZW0KIGJldHdlZW4gdmFyaW91cyBleHRlbnNpb24gbW9kdWxlcy4KIAogLSBNb3JlIGVmZmljaWVudCBjb21wdXRhdGlvbiBvZiBmbG9hdCoqc21hbGxpbnQuCiAKLS0gVGhlIG15c3RlcmlvdXMgYnVnIHdoZXJlYnkgIngueCIgKHR3byBvY2N1cnJlbmNlcyBvZiB0aGUgc2FtZSAKLW9uZS1jaGFyYWN0ZXIgbmFtZSkgdHlwZWQgZnJvbSB0aGUgY29tbWFuZGxpbmUgd291bGQgc29tZXRpbWVzIGZhaWwgCistIFRoZSBteXN0ZXJpb3VzIGJ1ZyB3aGVyZWJ5ICJ4LngiICh0d28gb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUKK29uZS1jaGFyYWN0ZXIgbmFtZSkgdHlwZWQgZnJvbSB0aGUgY29tbWFuZGxpbmUgd291bGQgc29tZXRpbWVzIGZhaWwKIG15c3RlcmlvdXNseS4KIAotLSBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJlYWRsaW5lIGZ1bmN0aW9uIGNhbiBub3cgYmUgaW52b2tlZCBieSBhIEMgCistIFRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcmVhZGxpbmUgZnVuY3Rpb24gY2FuIG5vdyBiZSBpbnZva2VkIGJ5IGEgQwogZXh0ZW5zaW9uIHRocm91Z2ggUHlPU19SZWFkbGluZUluaXQoKS4KIAotLSBUaGVyZSdzIG5vdyBhbiBleHRlcm5hbGx5IHZpc2libGUgcG9pbnRlciBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIHdoaWNoIAorLSBUaGVyZSdzIG5vdyBhbiBleHRlcm5hbGx5IHZpc2libGUgcG9pbnRlciBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIHdoaWNoCiBjYW4gYmUgY2hhbmdlZCBieSBhbiBlbWJlZGRpbmcgYXBwbGljYXRpb24uCiAKLS0gVGhlIGFyZ3VtZW50IHBhcnNpbmcgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IGEgbmV3IGZvcm1hdCBjaGFyYWN0ZXIgJ0QnIHRvIAorLSBUaGUgYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbnMgbm93IHN1cHBvcnQgYSBuZXcgZm9ybWF0IGNoYXJhY3RlciAnRCcgdG8KIHNwZWNpZnkgY29tcGxleCBudW1iZXJzLgogCiAtIFZhcmlvdXMgbWVtb3J5IGxlYWtzIHBsdWdnZWQgYW5kIGJ1Z3MgZml4ZWQuCiAKLS0gSW1wcm92ZWQgc3VwcG9ydCBmb3IgcG9zaXggdGhyZWFkcyAobm93IHRoYXQgcmVhbCBpbXBsZW1lbnRhdGlvbnMgYXJlIAorLSBJbXByb3ZlZCBzdXBwb3J0IGZvciBwb3NpeCB0aHJlYWRzIChub3cgdGhhdCByZWFsIGltcGxlbWVudGF0aW9ucyBhcmUKIGJlZ2lubmluZyB0byBhcGVwYXIpLiAgU3RpbGwgbm8gZnVsbHkgZnVuY3Rpb25pbmcgc2VtYXBob3Jlcy4KIAotLSBTb21lIHZhcmlvdXMgYW5kIHN1bmRyeSBpbXByb3ZlbWVudHMgYW5kIG5ldyBlbnRyaWVzIGluIHRoZSBUb29scyAKKy0gU29tZSB2YXJpb3VzIGFuZCBzdW5kcnkgaW1wcm92ZW1lbnRzIGFuZCBuZXcgZW50cmllcyBpbiB0aGUgVG9vbHMKIGRpcmVjdG9yeS4KIAogCkBAIC0yNjc2Niw3ICsyNjc5OSw3IEBACiBweXRob24gcGFyc2VyLiAgQ29ycmVzcG9uZGluZyBzdGFuZGFyZCBsaWJyYXJ5IG1vZHVsZXMgdG9rZW4gYW5kIHN5bWJvbAogZGVmaW5lcyB0aGUgbnVtZXJpYyB2YWx1ZXMgb2YgdG9rZW5zIGFuZCBub24tdGVybWluYWwgc3ltYm9scy4KIAotKiBUaGUgcG9zaXggbW9kdWxlIGhhcyBhcXVpcmVkIG5ldyBmdW5jdGlvbnMgc2V0dWlkKCksIHNldGdpZCgpLAorKiBUaGUgcG9zaXggbW9kdWxlIGhhcyBhY3F1aXJlZCBuZXcgZnVuY3Rpb25zIHNldHVpZCgpLCBzZXRnaWQoKSwKIGV4ZWN2ZSgpLCBhbmQgZXhlYygpIGhhcyBiZWVuIHJlbmFtZWQgdG8gZXhlY3YoKS4KIAogKiBUaGUgYXJyYXkgbW9kdWxlIGlzIGV4dGVuZGVkIHdpdGggOC1ieXRlIG9iamVjdCBzd2FwcywgdGhlICdpJwpAQCAtMjY3ODAsNyArMjY4MTMsNyBAQAogKiBGb3Igc2VsZWN0LnNlbGVjdCgpLCBhIHRpbWVvdXQgKDR0aCkgYXJndW1lbnQgb2YgTm9uZSBtZWFucyB0aGUgc2FtZQogYXMgbGVhdmluZyB0aGUgdGltZW91dCBhcmd1bWVudCBvdXQuCiAKLSogTW9kdWxlIHN0cm9wIChhbmQgaGVuY2Ugc3RhbmRhcmQgbGlicmFyeSBtb2R1bGUgc3RyaW5nKSBoYXMgYXF1aXJlZAorKiBNb2R1bGUgc3Ryb3AgKGFuZCBoZW5jZSBzdGFuZGFyZCBsaWJyYXJ5IG1vZHVsZSBzdHJpbmcpIGhhcyBhY3F1aXJlZAogYSBuZXcgZnVuY3Rpb246IHJpbmRleCgpLiAgVGhhbmtzIHRvIEFtcml0IFByZW0hCiAKICogTW9kdWxlIHJlZ2V4IGRlZmluZXMgYSBuZXcgZnVuY3Rpb24gc3ltY29tcCgpIHdoaWNoIHVzZXMgYW4gZXh0ZW5kZWQKQEAgLTI3MTQ2LDcgKzI3MTc5LDcgQEAKICogcmVwcih4KSByZXR1cm5zIHRoZSBzYW1lIGFzIGB4YC4gIChTb21lIHVzZXJzIGZvdW5kIGl0IGVhc2llciB0bwogaGF2ZSB0aGlzIGFzIGEgZnVuY3Rpb24uKQogCi0qIHJvdW5kKHgpIHJldHVybnMgdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlciB4IHJvdW5kZWQgdG8gYW4gd2hvbGUKKyogcm91bmQoeCkgcmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHggcm91bmRlZCB0byBhIHdob2xlCiBudW1iZXIsIHJlcHJlc2VudGVkIGFzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLiAgcm91bmQoeCwgbikgcmV0dXJucyB4CiByb3VuZGVkIHRvIG4gZGlnaXRzLgogCkBAIC0yNzQxNyw3ICsyNzQ1MCw3IEBACiBUaGUgbGltaXQgb24gdGhlIHNpemUgb2YgdGhlICpydW4tdGltZSogc3RhY2sgaGFzIGNvbXBsZXRlbHkgYmVlbgogcmVtb3ZlZCAtLSB0aGlzIG1lYW5zIHRoYXQgdHVwbGUgb3IgbGlzdCBkaXNwbGF5cyBjYW4gY29udGFpbiBhbnkKIG51bWJlciBvZiBlbGVtZW50cyAoZm9ybWVybHkgbW9yZSB0aGFuIDUwIHdvdWxkIGNyYXNoIHRoZQotaW50ZXJwcmV0ZXIpLiAKK2ludGVycHJldGVyKS4KIAogCiBDaGFuZ2VzIHRvIGV4aXN0aW5nIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcwpAQCAtMjc5MjYsNyArMjc5NTksNyBAQAogICB0byBnaXZlIG1vcmUgdXNlZnVsIHJlc3VsdHMgZm9yIG5lZ2F0aXZlIG9wZXJhbmRzCiAtIENoYW5nZWQvYWRkZWQgcmFuZ2UgY2hlY2tzIGZvciBsb25nL3BsYWluIGludGVnZXIgc2hpZnRzCiAtIE9wdGlvbnMgZm91bmQgYWZ0ZXIgIi1jIGNvbW1hbmQiIGFyZSBub3cgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGluIHN5cy5hcmd2Ci0gIChub3RlIHN1YnRsZSBpbmNvbXBhdGlibGl0eSB3aXRoICJweXRob24gLWMgY29tbWFuZCAtLSAtb3B0aW9ucyIhKQorICAobm90ZSBzdWJ0bGUgaW5jb21wYXRpYmlsaXR5IHdpdGggInB5dGhvbiAtYyBjb21tYW5kIC0tIC1vcHRpb25zIiEpCiAtIE1vZHVsZSBzdGR3aW4gaXMgYmV0dGVyIHByb3RlY3RlZCBhZ2FpbnN0IHRvdWNoaW5nIG9iamVjdHMgYWZ0ZXIgdGhleSd2ZQogICBiZWVuIGNsb3NlZDsgbWVudXMgY2FuIG5vdyBhbHNvIGJlIGNsb3NlZCBleHBsaWNpdGx5CiAtIFN0ZHdpbiBub3cgdXNlcyBpdHMgb3duIGV4Y2VwdGlvbiAoc3Rkd2luLmVycm9yKQpkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IDM2MmI2YmEuLmZmZDY0NzEgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTEsMTUgKzEsMzYgQEAKLe+7vysrKysrKysrKysrCisrKysrKysrKysrKwogUHl0aG9uIE5ld3MKICsrKysrKysrKysrCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuNC42cmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjUuMyByZWxlYXNlIGNhbmRpZGF0ZSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogUmVsZWFzZSBkYXRlOiBUQkEKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzI3NDE5OiBTdGFuZGFyZCBfX2ltcG9ydF9fKCkgbm8gbG9uZ2VyIGxvb2sgdXAgIl9faW1wb3J0X18iIGluIGdsb2JhbHMKKyAgb3IgYnVpbHRpbnMgZm9yIGltcG9ydGluZyBzdWJtb2R1bGVzIG9yICJmcm9tIGltcG9ydCIuICBGaXhlZCBoYW5kbGluZyBhbgorICBlcnJvciBvZiBub24tc3RyaW5nIHBhY2thZ2UgbmFtZS4KKworLSBJc3N1ZSAjMjcwODM6IFJlc3BlY3QgdGhlIFBZVEhPTkNBU0VPSyBlbnZpcm9ubWVudCB2YXJpYWJsZSB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMyNzUxNDogTWFrZSBoYXZpbmcgdG9vIG1hbnkgc3RhdGljYWxseSBuZXN0ZWQgYmxvY2tzIGEgU3ludGF4RXJyb3IKKyAgaW5zdGVhZCBvZiBTeXN0ZW1FcnJvci4KKworLSBJc3N1ZSAjMjc0NzM6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4gYnl0ZXMgYW5kIGJ5dGVhcnJheQorICBjb25jYXRlbmF0aW9ucy4gIFBhdGNoIGJ5IFhpYW5nIFpoYW5nLgorCistIElzc3VlICMyNzUwNzogQWRkIGludGVnZXIgb3ZlcmZsb3cgY2hlY2sgaW4gYnl0ZWFycmF5LmV4dGVuZCgpLiAgUGF0Y2ggYnkKKyAgWGlhbmcgWmhhbmcuCisKKy0gSXNzdWUgIzI3NTgxOiBEb24ndCByZWx5IG9uIHdyYXBwaW5nIGZvciBvdmVyZmxvdyBjaGVjayBpbgorICBQeVNlcXVlbmNlX1R1cGxlKCkuICBQYXRjaCBieSBYaWFuZyBaaGFuZy4KKworLSBJc3N1ZSAjMjc0NDM6IF9fbGVuZ3RoX2hpbnRfXygpIG9mIGJ5dGVhcnJheSBpdGVyYXRvcnMgbm8gbG9uZ2VyIHJldHVybiBhCisgIG5lZ2F0aXZlIGludGVnZXIgZm9yIGEgcmVzaXplZCBieXRlYXJyYXkuCisKIExpYnJhcnkKIC0tLS0tLS0KIApAQCAtMTcsOTAgKzM4LDI1OCBAQAogICBIVFRQX1BST1hZIHZhcmlhYmxlIHdoZW4gUkVRVUVTVF9NRVRIT0QgZW52aXJvbm1lbnQgaXMgc2V0LCB3aGljaCBpbmRpY2F0ZXMKICAgdGhhdCB0aGUgc2NyaXB0IGlzIGluIENHSSBtb2RlLgogCistIElzc3VlICMyNzY1NjogRG8gbm90IGFzc3VtZSBzY2hlZC5oIGRlZmluZXMgYW55IFNDSEVEXyogY29uc3RhbnRzLgorCistIElzc3VlICMyNzEzMDogSW4gdGhlICJ6bGliIiBtb2R1bGUsIGZpeCBoYW5kbGluZyBvZiBsYXJnZSBidWZmZXJzCisgICh0eXBpY2FsbHkgNCBHaUIpIHdoZW4gY29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcuICBQcmV2aW91c2x5LCBpbnB1dHMKKyAgd2VyZSBsaW1pdGVkIHRvIDQgR2lCLCBhbmQgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gb3BlcmF0aW9ucyBkaWQgbm90CisgIHByb3Blcmx5IGhhbmRsZSByZXN1bHRzIG9mIDQgR2lCLgorCistIElzc3VlICMyNzUzMzogUmVsZWFzZSBHSUwgaW4gbnQuX2lzZGlyCisKKy0gSXNzdWUgIzE3NzExOiBGaXhlZCB1bnBpY2tsaW5nIGJ5IHRoZSBwZXJzaXN0ZW50IElEIHdpdGggcHJvdG9jb2wgMC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQWxleGFuZHJlIFZhc3NhbG90dGkuCisKKy0gSXNzdWUgIzI3NTIyOiBBdm9pZCBhbiB1bmludGVudGlvbmFsIHJlZmVyZW5jZSBjeWNsZSBpbiBlbWFpbC5mZWVkcGFyc2VyLgorCistIElzc3VlICMyNjg0NDogRml4IGVycm9yIG1lc3NhZ2UgZm9yIGltcC5maW5kX21vZHVsZSgpIHRvIHJlZmVyIHRvICdwYXRoJworICBpbnN0ZWFkIG9mICduYW1lJy4gUGF0Y2ggYnkgTGV2IE1heGltb3YuCisKKy0gSXNzdWUgIzIzODA0OiBGaXggU1NMIHplcm8tbGVuZ3RoIHJlY3YoKSBjYWxscyB0byBub3QgYmxvY2sgYW5kIG5vdCByYWlzZQorICBhbiBlcnJvciBhYm91dCB1bmNsZWFuIEVPRi4KKworLSBJc3N1ZSAjMjc0NjY6IENoYW5nZSB0aW1lIGZvcm1hdCByZXR1cm5lZCBieSBodHRwLmNvb2tpZS50aW1lMm5ldHNjYXBlLAorICBjb25maXJtaW5nIHRoZSBuZXRzY2FwZSBjb29raWUgZm9ybWF0IGFuZCBtYWtpbmcgaXQgY29uc2lzdGVudCB3aXRoCisgIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzI2NjY0OiBGaXggYWN0aXZhdGUuZmlzaCBieSByZW1vdmluZyBtaXMtdXNlIG9mIGBgJGBgLgorCistIElzc3VlICMyMjExNTogRml4ZWQgdHJhY2luZyBUa2ludGVyIHZhcmlhYmxlczogdHJhY2VfdmRlbGV0ZSgpIHdpdGggd3JvbmcKKyAgbW9kZSBubyBsb25nZXIgYnJlYWsgdHJhY2luZywgdHJhY2VfdmluZm8oKSBub3cgYWx3YXlzIHJldHVybnMgYSBsaXN0IG9mCisgIHBhaXJzIG9mIHN0cmluZ3MsIHRyYWNpbmcgaW4gdGhlICJ1IiBtb2RlIG5vdyB3b3Jrcy4KKworLSBGaXggYSBzY29waW5nIGlzc3VlIGluIGltcG9ydGxpYi51dGlsLkxhenlMb2FkZXIgd2hpY2ggdHJpZ2dlcmVkIGFuCisgIFVuYm91bmRMb2NhbEVycm9yIHdoZW4gbGF6eS1sb2FkaW5nIGEgbW9kdWxlIHRoYXQgd2FzIGFscmVhZHkgcHV0IGludG8KKyAgc3lzLm1vZHVsZXMuCisKKy0gSXNzdWUgIzI3MDc5OiBGaXhlZCBjdXJzZXMuYXNjaWkgZnVuY3Rpb25zIGlzYmxhbmsoKSwgaXNjbnRybCgpIGFuZCBpc3B1bmN0KCkuCisKKy0gSXNzdWUgIzI2NzU0OiBTb21lIGZ1bmN0aW9ucyAoY29tcGlsZSgpIGV0YykgYWNjZXB0ZWQgYSBmaWxlbmFtZSBhcmd1bWVudAorICBlbmNvZGVkIGFzIGFuIGl0ZXJhYmxlIG9mIGludGVnZXJzLiBOb3cgb25seSBzdHJpbmdzIGFuZCBieXRlLWxpa2Ugb2JqZWN0cworICBhcmUgYWNjZXB0ZWQuCisKKy0gSXNzdWUgIzI3MDQ4OiBQcmV2ZW50cyBkaXN0dXRpbHMgZmFpbGluZyBvbiBXaW5kb3dzIHdoZW4gZW52aXJvbm1lbnQKKyAgdmFyaWFibGVzIGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMKKworLSBJc3N1ZSAjMjczMzA6IEZpeGVkIHBvc3NpYmxlIGxlYWtzIGluIHRoZSBjdHlwZXMgbW9kdWxlLgorCistIElzc3VlICMyNzIzODogR290IHJpZCBvZiBiYXJlIGV4Y2VwdHMgaW4gdGhlIHR1cnRsZSBtb2R1bGUuICBPcmlnaW5hbCBwYXRjaAorICBieSBKZWxsZSBaaWpsc3RyYS4KKworLSBJc3N1ZSAjMjcxMjI6IFdoZW4gYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgYmVpbmcgbWFuYWdlZAorICBieSBhIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkgYW5kIG9uZSBvZiB0aGUgZXhpdCBzdGFjayBnZW5lcmF0b3JzCisgIGNhdGNoZXMgYW5kIHJhaXNlcyBpdCBpbiBhIGNoYWluLCBkbyBub3QgcmUtcmFpc2UgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbgorICB3aGVuIGV4aXRpbmcsIGxldCB0aGUgbmV3IGNoYWluZWQgb25lIHRocm91Z2guICBUaGlzIGF2b2lkcyB0aGUgUEVQIDQ3OQorICBidWcgZGVzY3JpYmVkIGluIGlzc3VlMjU3ODIuCisKKy0gW1NlY3VyaXR5XSBJc3N1ZSAjMjcyNzg6IEZpeCBvcy51cmFuZG9tKCkgaW1wbGVtZW50YXRpb24gdXNpbmcgZ2V0cmFuZG9tKCkgb24gTGludXguCisgIFRydW5jYXRlIHNpemUgdG8gSU5UX01BWCBhbmQgbG9vcCB1bnRpbCB3ZSBjb2xsZWN0ZWQgZW5vdWdoIHJhbmRvbSBieXRlcywKKyAgaW5zdGVhZCBvZiBjYXN0aW5nIGEgZGlyZWN0bHkgUHlfc3NpemVfdCB0byBpbnQuCisKKy0gSXNzdWUgIzI2Mzg2OiBGaXhlZCB0dGsuVHJlZVZpZXcgc2VsZWN0aW9uIG9wZXJhdGlvbnMgd2l0aCBpdGVtIGlkJ3MKKyAgY29udGFpbmluZyBzcGFjZXMuCisKKy0gW1NlY3VyaXR5XSBJc3N1ZSAjMjI2MzY6IEF2b2lkIHNoZWxsIGluamVjdGlvbiBwcm9ibGVtcyB3aXRoCisgIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpLgorCistIElzc3VlICMxNjE4MjogRml4IHZhcmlvdXMgZnVuY3Rpb25zIGluIHRoZSAicmVhZGxpbmUiIG1vZHVsZSB0byB1c2UgdGhlCisgIGxvY2FsZSBlbmNvZGluZywgYW5kIGZpeCBnZXRfYmVnaWR4KCkgYW5kIGdldF9lbmRpZHgoKSB0byByZXR1cm4gY29kZSBwb2ludAorICBpbmRleGVzLgorCistIElzc3VlICMyNjkzMDogVXBkYXRlIFdpbmRvd3MgYnVpbGRzIHRvIHVzZSBPcGVuU1NMIDEuMC4yaC4KKworLSBJc3N1ZSAjMjczOTI6IEFkZCBsb29wLmNvbm5lY3RfYWNjZXB0ZWRfc29ja2V0KCkuCisgIFBhdGNoIGJ5IEppbSBGdWx0b24uCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMjczNjU6IEFsbG93IG5vbi1hc2NpaSBjaGFycyBpbiBJRExFIE5FV1MudHh0LCBmb3IgY29udHJpYnV0b3IgbmFtZXMuCisKKy0gSXNzdWUgIzI3MjQ1OiBJRExFOiBDbGVhbmx5IGRlbGV0ZSBjdXN0b20gdGhlbWVzIGFuZCBrZXkgYmluZGluZ3MuCisgIFByZXZpb3VzbHksIHdoZW4gSURMRSB3YXMgc3RhcnRlZCBmcm9tIGEgY29uc29sZSBvciBieSBpbXBvcnQsIGEgY2FzY2FkZQorICBvZiB3YXJuaW5ncyB3YXMgZW1pdHRlZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKK0MgQVBJCistLS0tLQorCistIElzc3VlICMyNjc1NDogUHlVbmljb2RlX0ZTRGVjb2RlcigpIGFjY2VwdGVkIGEgZmlsZW5hbWUgYXJndW1lbnQgZW5jb2RlZCBhcworICBhbiBpdGVyYWJsZSBvZiBpbnRlZ2Vycy4gTm93IG9ubHkgc3RyaW5ncyBhbmQgYnl0ZXMtbGlrZSBvYmplY3RzIGFyZSBhY2NlcHRlZC4KKwogVGVzdHMKIC0tLS0tCiAKIC0gSXNzdWUgIzI3MzY5OiBJbiB0ZXN0X3B5ZXhwYXQsIGF2b2lkIHRlc3RpbmcgYW4gZXJyb3IgbWVzc2FnZSBkZXRhaWwgdGhhdAogICBjaGFuZ2VkIGluIEV4cGF0IDIuMi4wLgogCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjU/CistIElzc3VlICMyNzMzMjogRml4ZWQgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIG1vZHVsZS1sZXZlbCBmdW5jdGlvbnMKKyAgZ2VuZXJhdGVkIGJ5IEFyZ3VtZW50IENsaW5pYy4gIFBhdGNoIGJ5IFBldHIgVmlrdG9yaW4uCisKKy0gSXNzdWUgIzI3NDE4OiBGaXhlZCBUb29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weS4KKworV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMyNzQ2OTogQWRkcyBhIHNoZWxsIGV4dGVuc2lvbiB0byB0aGUgbGF1bmNoZXIgc28gdGhhdCBkcmFnIGFuZCBkcm9wCisgIHdvcmtzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMjczMDk6IEVuYWJsZWQgcHJvcGVyIFdpbmRvd3Mgc3R5bGVzIGluIHB5dGhvblt3XS5leGUgbWFuaWZlc3QuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMyNzQ1MzogQ1BQIGludm9jYXRpb24gaW4gY29uZmlndXJlIG11c3QgdXNlIENQUEZMQUdTLiBQYXRjaCBieQorICBDaGkgSHN1YW4gWWVuLgorCistIElzc3VlICMyNzQ5MDogRG8gbm90IGJ1aWxkIHBnZW4gd2hlbiBjcm9zcy1jb21waWxpbmcuICBQYXRjaCBieSBUaG9tYXMKKyAgUGVybC4KKworLSBJc3N1ZSAjMjY2NjI6IFNldCBQWVRIT05fRk9SX0dFTiBpbiBjb25maWd1cmUgYXMgdGhlIFB5dGhvbiBwcm9ncmFtIHRvIGJlCisgIHVzZWQgZm9yIGZpbGUgZ2VuZXJhdGlvbiBkdXJpbmcgdGhlIGJ1aWxkLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjUuMj8KID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBSZWxlYXNlIGRhdGU6IDIwMTYtMDYtMjYKIAorQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzI2OTMwOiBVcGRhdGUgV2luZG93cyBidWlsZHMgdG8gdXNlIE9wZW5TU0wgMS4wLjJoLgorCiBUZXN0cwogLS0tLS0KIAogLSBJc3N1ZSAjMjY4Njc6IFVidW50dSdzIG9wZW5zc2wgT1BfTk9fU1NMdjMgaXMgZm9yY2VkIG9uIGJ5IGRlZmF1bHQ7IGZpeCB0ZXN0LgogCitJRExFCistLS0tCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuNC41cmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICMyNzM2NTogQWxsb3cgbm9uLWFzY2lpIGluIGlkbGVsaWIvTkVXUy50eHQgLSBtaW5pbWFsIHBhcnQgZm9yIDMuNS4yLgogCi1SZWxlYXNlIGRhdGU6IDIwMTYtMDYtMTEKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy41LjIgcmVsZWFzZSBjYW5kaWRhdGUgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNi0wNi0xMgogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAjMjY0Nzg6IEZpeCBzZW1hbnRpYyBidWdzIHdoZW4gdXNpbmcgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIGRpY3Rpb25hcnkKLSAgdmlld3MgYW5kIHR1cGxlcy4KKy0gSXNzdWUgIzI3MDY2OiBGaXhlZCBTeXN0ZW1FcnJvciBpZiBhIGN1c3RvbSBvcGVuZXIgKGZvciBvcGVuKCkpIHJldHVybnMgYQorICBuZWdhdGl2ZSBudW1iZXIgd2l0aG91dCBzZXR0aW5nIGFuIGV4Y2VwdGlvbi4KIAotLSBJc3N1ZSAjMjYxNzE6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IGFuZCBoZWFwIGNvcnJ1cHRpb24gaW4KLSAgemlwaW1wb3J0ZXIuZ2V0X2RhdGEoKS4KKy0gSXNzdWUgIzIwMDQxOiBGaXhlZCBUeXBlRXJyb3Igd2hlbiBmcmFtZS5mX3RyYWNlIGlzIHNldCB0byBOb25lLgorICBQYXRjaCBieSBYYXZpZXIgZGUgR2F5ZS4KIAotTGlicmFyeQotLS0tLS0tLQorLSBJc3N1ZSAjMjYxNjg6IEZpeGVkIHBvc3NpYmxlIHJlZmxlYWtzIGluIGZhaWxpbmcgUHlfQnVpbGRWYWx1ZSgpIHdpdGggdGhlICJOIgorICBmb3JtYXQgdW5pdC4KIAotLSBJc3N1ZSAjMjY1NTY6IFVwZGF0ZSBleHBhdCB0byAyLjEuMSwgZml4ZXMgQ1ZFLTIwMTUtMTI4My4KKy0gSXNzdWUgIzI2OTkxOiBGaXggcG9zc2libGUgcmVmbGVhayB3aGVuIGNyZWF0aW5nIGEgZnVuY3Rpb24gd2l0aCBhbm5vdGF0aW9ucy4KIAotLSBGaXggVExTIHN0cmlwcGluZyB2dWxuZXJhYmlsaXR5IGluIHNtcHRsaWIsIENWRS0yMDE2LTA3NzIuICBSZXBvcnRlZCBieSBUZWFtCi0gIE9zdHN0cm9tCistIElzc3VlICMyNzAzOTogRml4ZWQgYnl0ZWFycmF5LnJlbW92ZSgpIGZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEyNy4gIFBhdGNoIGJ5CisgIEpvZSBKZXZuaWsuCiAKLS0gSXNzdWUgIzI1OTM5OiBPbiBXaW5kb3dzIG9wZW4gdGhlIGNlcnQgc3RvcmUgcmVhZG9ubHkgaW4gc3NsLmVudW1fY2VydGlmaWNhdGVzLgorLSBJc3N1ZSAjMjM2NDA6IGludC5mcm9tX2J5dGVzKCkgbm8gbG9uZ2VyIGJ5cGFzc2VzIGNvbnN0cnVjdG9ycyBmb3Igc3ViY2xhc3Nlcy4KIAotLSBJc3N1ZSAjMjYwMTI6IERvbid0IHRyYXZlcnNlIGludG8gc3ltbGlua3MgZm9yICoqIHBhdHRlcm4gaW4KLSAgcGF0aGxpYi5QYXRoLltyXWdsb2IoKS4KKy0gSXNzdWUgIzI2ODExOiBnYy5nZXRfb2JqZWN0cygpIG5vIGxvbmdlciBjb250YWlucyBhIGJyb2tlbiB0dXBsZSB3aXRoIE5VTEwKKyAgcG9pbnRlci4KIAotLSBJc3N1ZSAjMjQxMjA6IElnbm9yZSBQZXJtaXNzaW9uRXJyb3Igd2hlbiB0cmF2ZXJzaW5nIGEgdHJlZSB3aXRoCi0gIHBhdGhsaWIuUGF0aC5bcl1nbG9iKCkuICBQYXRjaCBieSBVbHJpY2ggUGV0cmkuCistIElzc3VlICMyMDEyMDogVXNlIFJhd0NvbmZpZ1BhcnNlciBmb3IgLnB5cGlyYyBwYXJzaW5nLAorICByZW1vdmluZyBzdXBwb3J0IGZvciBpbnRlcnBvbGF0aW9uIHVuaW50ZW50aW9uYWxseSBhZGRlZAorICB3aXRoIG1vdmUgdG8gUHl0aG9uIDMuIEJlaGF2aW9yIG5vIGxvbmdlciBkb2VzIGFueQorICBpbnRlcnBvbGF0aW9uIGluIC5weXBpcmMgZmlsZXMsIG1hdGNoaW5nIGJlaGF2aW9yIGluIFB5dGhvbgorICAyLjcgYW5kIFNldHVwdG9vbHMgMTkuMC4KIAotLSBTa2lwIGdldGFkZHJpbmZvIGlmIGhvc3QgaXMgYWxyZWFkeSByZXNvbHZlZC4KLSAgUGF0Y2ggYnkgQS4gSmVzc2UgSmlyeXUgRGF2aXMuCistIElzc3VlICMyNjY1OTogTWFrZSB0aGUgYnVpbHRpbiBzbGljZSB0eXBlIHN1cHBvcnQgY3ljbGUgY29sbGVjdGlvbi4KIAotLSBBZGQgYXN5bmNpby50aW1lb3V0KCkgY29udGV4dCBtYW5hZ2VyLgorLSBJc3N1ZSAjMjY3MTg6IHN1cGVyLl9faW5pdF9fIG5vIGxvbmdlciBsZWFrcyBtZW1vcnkgaWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzLgorICBOT1RFOiBBIGRpcmVjdCBjYWxsIG9mIHN1cGVyLl9faW5pdF9fIGlzIG5vdCBlbmRvcnNlZCEKIAotLSBJc3N1ZSAjMjYwNTA6IEFkZCBhc3luY2lvLlN0cmVhbVJlYWRlci5yZWFkdW50aWwoKSBtZXRob2QuCi0gIFBhdGNoIGJ5INCc0LDRgNC6INCa0L7RgNC10L3QsdC10YDQsy4KKy0gSXNzdWUgIzI1MzM5OiBQWVRIT05JT0VOQ09ESU5HIG5vdyBoYXMgcHJpb3JpdHkgb3ZlciBsb2NhbGUgaW4gc2V0dGluZyB0aGUKKyAgZXJyb3IgaGFuZGxlciBmb3Igc3RkaW4gYW5kIHN0ZG91dC4KIAotVGVzdHMKLS0tLS0tCistIElzc3VlICMyNjQ5NDogRml4ZWQgY3Jhc2ggb24gaXRlcmF0aW5nIGV4aGF1c3RpbmcgaXRlcmF0b3JzLgorICBBZmZlY3RlZCBjbGFzc2VzIGFyZSBnZW5lcmljIHNlcXVlbmNlIGl0ZXJhdG9ycywgaXRlcmF0b3JzIG9mIHN0ciwgYnl0ZXMsCisgIGJ5dGVhcnJheSwgbGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0LCBkaWN0LCBPcmRlcmVkRGljdCwgY29ycmVzcG9uZGluZworICB2aWV3cyBhbmQgb3Muc2NhbmRpcigpIGl0ZXJhdG9yLgogCi0tIElzc3VlICMyNTk0MDogQ2hhbmdlZCB0ZXN0X3NzbCB0byB1c2Ugc2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQuICBUaGlzCi0gIGF2b2lkcyByZWx5aW5nIG9uIHN2bi5weXRob24ub3JnLCB3aGljaCByZWNlbnRseSBjaGFuZ2VkIHJvb3QgY2VydGlmaWNhdGUuCistIElzc3VlICMyNjU4MTogSWYgY29kaW5nIGNvb2tpZSBpcyBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgb24gYSBsaW5lIGluCisgIFB5dGhvbiBzb3VyY2UgY29kZSBmaWxlLCBvbmx5IHRoZSBmaXJzdCBvbmUgaXMgdGFrZW4gdG8gYWNjb3VudC4KIAorLSBJc3N1ZSAjMjY0NjQ6IEZpeCBzdHIudHJhbnNsYXRlKCkgd2hlbiBzdHJpbmcgaXMgQVNDSUkgYW5kIGZpcnN0IHJlcGxhY2VtZW50cworICByZW1vdmVzIGNoYXJhY3RlciwgYnV0IG5leHQgcmVwbGFjZW1lbnQgdXNlcyBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIgb3IgYQorICBzdHJpbmcgbG9uZ2VyIHRoYW4gMSBjaGFyYWN0ZXIuIFJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiBQeXRob24gMy41LjAuCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuNC40PwotPT09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICMyMjgzNjogRW5zdXJlIGV4Y2VwdGlvbiByZXBvcnRzIGZyb20gUHlFcnJfRGlzcGxheSgpIGFuZAorICBQeUVycl9Xcml0ZVVucmFpc2FibGUoKSBhcmUgc2Vuc2libGUgZXZlbiB3aGVuIGZvcm1hdHRpbmcgdGhlbSBwcm9kdWNlcworICBzZWNvbmRhcnkgZXJyb3JzLiAgVGhpcyBhZmZlY3RzIHRoZSByZXBvcnRzIHByb2R1Y2VkIGJ5CisgIHN5cy5fX2V4Y2VwdGhvb2tfXygpIGFuZCB3aGVuIF9fZGVsX18oKSByYWlzZXMgYW4gZXhjZXB0aW9uLgogCi1SZWxlYXNlIGRhdGU6IDIwMTUvMTIvMjAKKy0gSXNzdWUgIzI2MzAyOiBDb3JyZWN0IGJlaGF2aW9yIHRvIHJlamVjdCBjb21tYSBhcyBhIGxlZ2FsIGNoYXJhY3RlciBmb3IKKyAgY29va2llIG5hbWVzLgogCi1XaW5kb3dzCi0tLS0tLS0tCistIElzc3VlICM0ODA2OiBBdm9pZCBtYXNraW5nIHRoZSBvcmlnaW5hbCBUeXBlRXJyb3IgZXhjZXB0aW9uIHdoZW4gdXNpbmcgc3RhcgorICAoKikgdW5wYWNraW5nIGluIGZ1bmN0aW9uIGNhbGxzLiAgQmFzZWQgb24gcGF0Y2ggYnkgSGFnZW4gRsO8cnN0ZW5hdSBhbmQKKyAgRGFuaWVsIFVyYmFuLgogCi0tIElzc3VlICMyNTg0NDogQ29ycmVjdGVkID0vPT0gdHlwbyBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGNyYXNoIGluIGxhdW5jaGVyLgorLSBJc3N1ZSAjMjcxMzg6IEZpeCB0aGUgZG9jIGNvbW1lbnQgZm9yIEZpbGVGaW5kZXIuZmluZF9zcGVjKCkuCiAKKy0gSXNzdWUgIzI2MTU0OiBBZGQgYSBuZXcgcHJpdmF0ZSBfUHlUaHJlYWRTdGF0ZV9VbmNoZWNrZWRHZXQoKSBmdW5jdGlvbiB0byBnZXQKKyAgdGhlIGN1cnJlbnQgUHl0aG9uIHRocmVhZCBzdGF0ZSwgYnV0IGRvbid0IGlzc3VlIGEgZmF0YWwgZXJyb3IgaWYgaXQgaXMgTlVMTC4KKyAgVGhpcyBuZXcgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgYWNjZXNzaW5nIGRpcmVjdGx5IHRoZQorICBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50IHZhcmlhYmxlLiAgVGhlIHZhcmlhYmxlIGlzIG5vIG1vcmUgZXhwb3NlZCBzaW5jZQorICBQeXRob24gMy41LjEgdG8gaGlkZSB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gb2YgYXRvbWljIEMgdHlwZXMsIHRvIGF2b2lkCisgIGNvbXBpbGVyIGlzc3Vlcy4KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjRyYzE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gSXNzdWUgIzI2MTk0OiAgRGVxdWUuaW5zZXJ0KCkgZ2F2ZSBvZGQgcmVzdWx0cyBmb3IgYm91bmRlZCBkZXF1ZXMgdGhhdCBoYWQKKyAgcmVhY2hlZCB0aGVpciBtYXhpbXVtIHNpemUuICBOb3cgYW4gSW5kZXhFcnJvciB3aWxsIGJlIHJhaXNlZCB3aGVuIGF0dGVtcHRpbmcKKyAgdG8gaW5zZXJ0IGludG8gYSBmdWxsIGRlcXVlLgogCi1SZWxlYXNlIGRhdGU6IDIwMTUvMTIvMDYKKy0gSXNzdWUgIzI1ODQzOiBXaGVuIGNvbXBpbGluZyBjb2RlLCBkb24ndCBtZXJnZSBjb25zdGFudHMgaWYgdGhleSBhcmUgZXF1YWwKKyAgYnV0IGhhdmUgYSBkaWZmZXJlbnQgdHlwZXMuIEZvciBleGFtcGxlLCBgYGYxLCBmMiA9IGxhbWJkYTogMSwgbGFtYmRhOiAxLjBgYAorICBpcyBub3cgY29ycmVjdGx5IGNvbXBpbGVkIHRvIHR3byBkaWZmZXJlbnQgZnVuY3Rpb25zOiBgYGYxKClgYCByZXR1cm5zIGBgMWBgCisgIChgYGludGBgKSBhbmQgYGBmMigpYGAgcmV0dXJucyBgYDEuMGBgIChgYGludGBgKSwgZXZlbiBpZiBgYDFgYCBhbmQgYGAxLjBgYAorICBhcmUgZXF1YWwuCiAKLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQorLSBJc3N1ZSAjMjI5OTU6IFtVUERBVEVdIENvbW1lbnQgb3V0IHRoZSBvbmUgb2YgdGhlIHBpY2tsZWFiaWxpdHkgdGVzdHMgaW4KKyAgX1B5T2JqZWN0X0dldFN0YXRlKCkgZHVlIHRvIHJlZ3Jlc3Npb25zIG9ic2VydmVkIGluIEN5dGhvbi1iYXNlZCBwcm9qZWN0cy4KIAotLSBJc3N1ZSAjMjU3MDk6IEZpeGVkIHByb2JsZW0gd2l0aCBpbi1wbGFjZSBzdHJpbmcgY29uY2F0ZW5hdGlvbiBhbmQgdXRmLTgKLSAgY2FjaGUuCistIElzc3VlICMyNTk2MTogRGlzYWxsb3dlZCBudWxsIGNoYXJhY3RlcnMgaW4gdGhlIHR5cGUgbmFtZS4KKworLSBJc3N1ZSAjMjU5NzM6IEZpeCBzZWdmYXVsdCB3aGVuIGFuIGludmFsaWQgbm9ubG9jYWwgc3RhdGVtZW50IGJpbmRzIGEgbmFtZQorICBzdGFydGluZyB3aXRoIHR3byB1bmRlcnNjb3Jlcy4KKworLSBJc3N1ZSAjMjI5OTU6IEluc3RhbmNlcyBvZiBleHRlbnNpb24gdHlwZXMgd2l0aCBhIHN0YXRlIHRoYXQgYXJlbid0CisgIHN1YmNsYXNzZXMgb2YgbGlzdCBvciBkaWN0IGFuZCBoYXZlbid0IGltcGxlbWVudGVkIGFueSBwaWNrbGUtcmVsYXRlZAorICBtZXRob2RzIChfX3JlZHVjZV9fLCBfX3JlZHVjZV9leF9fLCBfX2dldG5ld2FyZ3NfXywgX19nZXRuZXdhcmdzX2V4X18sCisgIG9yIF9fZ2V0c3RhdGVfXyksIGNhbiBubyBsb25nZXIgYmUgcGlja2xlZC4gIEluY2x1ZGluZyBtZW1vcnl2aWV3LgorCistIElzc3VlICMyMDQ0MDogTWFzc2l2ZSByZXBsYWNpbmcgdW5zYWZlIGF0dHJpYnV0ZSBzZXR0aW5nIGNvZGUgd2l0aCBzcGVjaWFsCisgIG1hY3JvIFB5X1NFVFJFRi4KKworLSBJc3N1ZSAjMjU3NjY6IFNwZWNpYWwgbWV0aG9kIF9fYnl0ZXNfXygpIG5vdyB3b3JrcyBpbiBzdHIgc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMjU0MjE6IF9fc2l6ZW9mX18gbWV0aG9kcyBvZiBidWlsdGluIHR5cGVzIG5vdyB1c2UgZHluYW1pYyBiYXNpYyBzaXplLgorICBUaGlzIGFsbG93cyBzeXMuZ2V0c2l6ZSgpIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggdGhlaXIgc3ViY2xhc3NlcyB3aXRoCisgIF9fc2xvdHNfXyBkZWZpbmVkLgorCistIElzc3VlICMyNTcwOTogRml4ZWQgcHJvYmxlbSB3aXRoIGluLXBsYWNlIHN0cmluZyBjb25jYXRlbmF0aW9uIGFuZCB1dGYtOCBjYWNoZS4KKworLSBJc3N1ZSAjMjcxNDc6IE1lbnRpb24gUEVQIDQyMCBpbiB0aGUgaW1wb3J0bGliIGRvY3MuCiAKIC0gSXNzdWUgIzI0MDk3OiBGaXhlZCBjcmFzaCBpbiBvYmplY3QuX19yZWR1Y2VfXygpIGlmIHNsb3QgbmFtZSBpcyBmcmVlZCBpbnNpZGUKICAgX19nZXRhdHRyX18uCkBAIC0xMDksMTAyICsyOTgsMzUzIEBACiAgIF9fYnl0ZXNfXywgX190cnVuY19fLCBhbmQgX19mbG9hdF9fIHJldHVybmluZyBpbnN0YW5jZXMgb2Ygc3ViY2xhc3NlcyBvZgogICBieXRlcywgaW50LCBhbmQgZmxvYXQgdG8gc3ViY2xhc3NlcyBvZiBieXRlcywgaW50LCBhbmQgZmxvYXQgY29ycmVzcG9uZGluZ2x5LgogCi0tIElzc3VlICMyNTM4ODogRml4ZWQgdG9rZW5pemVyIGNyYXNoIHdoZW4gcHJvY2Vzc2luZyB1bmRlY29kYWJsZSBzb3VyY2UgY29kZQotICB3aXRoIGEgbnVsbCBieXRlLgorLSBJc3N1ZSAjMjY0Nzg6IEZpeCBzZW1hbnRpYyBidWdzIHdoZW4gdXNpbmcgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIGRpY3Rpb25hcnkKKyAgdmlld3MgYW5kIHR1cGxlcy4KIAotLSBJc3N1ZSAjMjI5OTU6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgX19yZWR1Y2VfXyBhbmQgX19yZWR1Y2VfZXhfXyBub3cKLSAgcmVqZWN0cyBidWlsdGluIHR5cGVzIHdpdGggbm90IGRlZmluZWQgX19uZXdfXy4KKy0gSXNzdWUgIzI2MTcxOiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBhbmQgaGVhcCBjb3JydXB0aW9uIGluCisgIHppcGltcG9ydGVyLmdldF9kYXRhKCkuCiAKLS0gSXNzdWUgIzI0ODAyOiBBdm9pZCBidWZmZXIgb3ZlcnJlYWRzIHdoZW4gaW50KCksIGZsb2F0KCksIGNvbXBpbGUoKSwgZXhlYygpCi0gIGFuZCBldmFsKCkgYXJlIHBhc3NlZCBieXRlcy1saWtlIG9iamVjdHMuICBUaGVzZSBvYmplY3RzIGFyZSBub3QKLSAgbmVjZXNzYXJpbHkgdGVybWluYXRlZCBieSBhIG51bGwgYnl0ZSwgYnV0IHRoZSBmdW5jdGlvbnMgYXNzdW1lZCB0aGV5IHdlcmUuCistIElzc3VlICMyNTY2MDogRml4IFRBQiBrZXkgYmVoYXZpb3VyIGluIFJFUEwgd2l0aCByZWFkbGluZS4KIAotLSBJc3N1ZSAjMjQ0MDI6IEZpeCBpbnB1dCgpIHRvIHByb21wdCB0byB0aGUgcmVkaXJlY3RlZCBzdGRvdXQgd2hlbgotICBzeXMuc3Rkb3V0LmZpbGVubygpIGZhaWxzLgorLSBJc3N1ZSAjMjU4ODc6IFJhaXNlIGEgUnVudGltZUVycm9yIHdoZW4gYSBjb3JvdXRpbmUgb2JqZWN0IGlzIGF3YWl0ZWQKKyAgbW9yZSB0aGFuIG9uY2UuCiAKLS0gSXNzdWUgIzI0ODA2OiBQcmV2ZW50IGJ1aWx0aW4gdHlwZXMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gYmUgc3ViY2xhc3NlZCBmcm9tCi0gIGJlaW5nIHN1YmNsYXNzZWQgdGhyb3VnaCBtdWx0aXBsZSBpbmhlcml0YW5jZS4KKy0gSXNzdWUgIzI3MjQzOiBVcGRhdGUgdGhlIF9fYWl0ZXJfXyBwcm90b2NvbDogaW5zdGVhZCBvZiByZXR1cm5pbmcKKyAgYW4gYXdhaXRhYmxlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXN5bmNocm9ub3VzIGl0ZXJhdG9yLCB0aGUgYXN5bmNocm9ub3VzCisgIGl0ZXJhdG9yIHNob3VsZCBiZSByZXR1cm5lZCBkaXJlY3RseS4gIERvaW5nIHRoZSBmb3JtZXIgd2lsbCB0cmlnZ2VyIGEKKyAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZy4KIAotLSBJc3N1ZSAjMjQ4NDg6IEZpeGVkIGEgbnVtYmVyIG9mIGJ1Z3MgaW4gVVRGLTcgZGVjb2Rpbmcgb2YgbWlzZm9ybWVkIGRhdGEuCi0KLS0gSXNzdWUgIzI1MjgwOiBJbXBvcnQgdHJhY2UgbWVzc2FnZXMgZW1pdHRlZCBpbiB2ZXJib3NlICgtdikgbW9kZSBhcmUgbm8KLSAgbG9uZ2VyIGZvcm1hdHRlZCB0d2ljZS4KLQotLSBJc3N1ZSAjMjUwMDM6IG9zLnVyYW5kb20oKSBkb2Vzbid0IHVzZSBnZXRlbnRyb3B5KCkgb24gU29sYXJpcyBiZWNhdXNlCi0gIGdldGVudHJvcHkoKSBpcyBibG9ja2luZywgd2hlcmVhcyBvcy51cmFuZG9tKCkgc2hvdWxkIG5vdCBibG9jay4gZ2V0ZW50cm9weSgpCi0gIGlzIHN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDExLjMuCi0KLS0gSXNzdWUgIzI1MTgyOiBUaGUgc3RkcHJpbnRlciAodXNlZCBhcyBzeXMuc3RkZXJyIGJlZm9yZSB0aGUgaW8gbW9kdWxlIGlzCi0gIGltcG9ydGVkIGF0IHN0YXJ0dXApIG5vdyB1c2VzIHRoZSBiYWNrc2xhc2hyZXBsYWNlIGVycm9yIGhhbmRsZXIuCi0KLS0gSXNzdWUgIzI0ODkxOiBGaXggYSByYWNlIGNvbmRpdGlvbiBhdCBQeXRob24gc3RhcnR1cCBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yCi0gIG9mIHN0ZGluICgwKSwgc3Rkb3V0ICgxKSBvciBzdGRlcnIgKDIpIGlzIGNsb3NlZCB3aGlsZSBQeXRob24gaXMgY3JlYXRpbmcKLSAgc3lzLnN0ZGluLCBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyIG9iamVjdHMuIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIG5vdyBzZXQKLSAgdG8gTm9uZSBpZiB0aGUgY3JlYXRpb24gb2YgdGhlIG9iamVjdCBmYWlsZWQsIGluc3RlYWQgb2YgcmFpc2luZyBhbiBPU0Vycm9yCi0gIGV4Y2VwdGlvbi4gSW5pdGlhbCBwYXRjaCB3cml0dGVuIGJ5IE1hcmNvIFBhb2xpbmkuCi0KLS0gSXNzdWUgIzIxMTY3OiBOQU4gb3BlcmF0aW9ucyBhcmUgbm93IGhhbmRsZWQgY29ycmVjdGx5IHdoZW4gcHl0aG9uIGlzCi0gIGNvbXBpbGVkIHdpdGggSUNDIGV2ZW4gaWYgLWZwLW1vZGVsIHN0cmljdCBpcyBub3Qgc3BlY2lmaWVkLgotCi0tIElzc3VlICM0Mzk1OiBCZXR0ZXIgdGVzdGluZyBhbmQgZG9jdW1lbnRhdGlvbiBvZiBiaW5hcnkgb3BlcmF0b3JzLgotICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgotCi0tIElzc3VlICMyNDQ2NzogRml4ZWQgcG9zc2libGUgYnVmZmVyIG92ZXItcmVhZCBpbiBieXRlYXJyYXkuIFRoZSBieXRlYXJyYXkKLSAgb2JqZWN0IG5vdyBhbHdheXMgYWxsb2NhdGVzIHBsYWNlIGZvciB0cmFpbGluZyBudWxsIGJ5dGUgYW5kIGl0J3MgYnVmZmVyIG5vdwotICBpcyBhbHdheXMgbnVsbC10ZXJtaW5hdGVkLgotCi0tIElzc3VlICMyNDExNTogVXBkYXRlIHVzZXMgb2YgUHlPYmplY3RfSXNUcnVlKCksIFB5T2JqZWN0X05vdCgpLAotICBQeU9iamVjdF9Jc0luc3RhbmNlKCksIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgpIGFuZCBfUHlEaWN0X0NvbnRhaW5zKCkKLSAgdG8gY2hlY2sgZm9yIGFuZCBoYW5kbGUgZXJyb3JzIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjMjQyNTc6IEZpeGVkIHN5c3RlbSBlcnJvciBpbiB0aGUgY29tcGFyaXNvbiBvZiBmYWtlZAotICB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCi0KLS0gSXNzdWUgIzIyOTM5OiBGaXhlZCBpbnRlZ2VyIG92ZXJmbG93IGluIGl0ZXJhdG9yIG9iamVjdC4gIFBhdGNoIGJ5Ci0gIENsZW1lbnQgUm91YXVsdC4KLQotLSBJc3N1ZSAjMjM5ODU6IEZpeCBhIHBvc3NpYmxlIGJ1ZmZlciBvdmVycnVuIHdoZW4gZGVsZXRpbmcgYSBzbGljZSBmcm9tCi0gIHRoZSBmcm9udCBvZiBhIGJ5dGVhcnJheSBhbmQgdGhlbiBhcHBlbmRpbmcgc29tZSBvdGhlciBieXRlcyBkYXRhLgotCi0tIElzc3VlICMyNDEwMjogRml4ZWQgZXhjZXB0aW9uIHR5cGUgY2hlY2tpbmcgaW4gc3RhbmRhcmQgZXJyb3IgaGFuZGxlcnMuCi0KLS0gSXNzdWUgIzIzNzU3OiBQeVNlcXVlbmNlX1R1cGxlKCkgaW5jb3JyZWN0bHkgY2FsbGVkIHRoZSBjb25jcmV0ZSBsaXN0IEFQSQotICB3aGVuIHRoZSBkYXRhIHdhcyBhIGxpc3Qgc3ViY2xhc3MuCi0KLS0gSXNzdWUgIzI0NDA3OiBGaXggY3Jhc2ggd2hlbiBkaWN0IGlzIG11dGF0ZWQgd2hpbGUgYmVpbmcgdXBkYXRlZC4KLQotLSBJc3N1ZSAjMjQwOTY6IE1ha2Ugd2FybmluZ3Mud2Fybl9leHBsaWNpdCBtb3JlIHJvYnVzdCBhZ2FpbnN0IG11dGF0aW9uIG9mIHRoZQotICB3YXJuaW5ncy5maWx0ZXJzIGxpc3QuCi0KLS0gSXNzdWUgIzIzOTk2OiBBdm9pZCBhIGNyYXNoIHdoZW4gYSBkZWxlZ2F0ZWQgZ2VuZXJhdG9yIHJhaXNlcyBhbgotICB1bm5vcm1hbGl6ZWQgU3RvcEl0ZXJhdGlvbiBleGNlcHRpb24uICBQYXRjaCBieSBTdGVmYW4gQmVobmVsLgotCi0tIElzc3VlICMyNDAyMjogRml4IHRva2VuaXplciBjcmFzaCB3aGVuIHByb2Nlc3NpbmcgdW5kZWNvZGFibGUgc291cmNlIGNvZGUuCi0KLS0gSXNzdWUgIzIzMzA5OiBBdm9pZCBhIGRlYWRsb2NrIGF0IHNodXRkb3duIGlmIGEgZGFlbW9uIHRocmVhZCBpcyBhYm9ydGVkCi0gIHdoaWxlIGl0IGlzIGhvbGRpbmcgYSBsb2NrIHRvIGEgYnVmZmVyZWQgSS9PIG9iamVjdCwgYW5kIHRoZSBtYWluIHRocmVhZAotICB0cmllcyB0byB1c2UgdGhlIHNhbWUgSS9PIG9iamVjdCAodHlwaWNhbGx5IHN0ZG91dCBvciBzdGRlcnIpLiAgQSBmYXRhbAotICBlcnJvciBpcyBlbWl0dGVkIGluc3RlYWQuCi0KLS0gSXNzdWUgIzIyOTc3OiBGaXhlZCBmb3JtYXR0aW5nIFdpbmRvd3MgZXJyb3IgbWVzc2FnZXMgb24gV2luZS4KLSAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KLQotLSBJc3N1ZSAjMjM4MDM6IEZpeGVkIHN0ci5wYXJ0aXRpb24oKSBhbmQgc3RyLnJwYXJ0aXRpb24oKSB3aGVuIGEgc2VwYXJhdG9yCi0gIGlzIHdpZGVyIHRoZW4gcGFydGl0aW9uZWQgc3RyaW5nLgotCi0tIElzc3VlICMyMzE5MjogRml4ZWQgZ2VuZXJhdG9yIGxhbWJkYXMuICBQYXRjaCBieSBCcnVubyBDYXVldC4KLQotLSBJc3N1ZSAjMjM2Mjk6IEZpeCB0aGUgZGVmYXVsdCBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciB2YXJpYWJsZS1zaXplZAotICBvYmplY3RzLgotCi0tIElzc3VlICMyNDA0NDogRml4IHBvc3NpYmxlIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBsaXN0LnNvcnQgaW4gb3V0IG9mCi0gIG1lbW9yeSBjb25kaXRpb25zLgotCi0tIElzc3VlICMyMTM1NDogUHlDRnVuY3Rpb25fTmV3IGZ1bmN0aW9uIGlzIGV4cG9zZWQgYnkgcHl0aG9uIERMTCBhZ2Fpbi4KIAogTGlicmFyeQogLS0tLS0tLQogCistIFtTZWN1cml0eV0gSXNzdWUgIzI2NTU2OiBVcGRhdGUgZXhwYXQgdG8gMi4xLjEsIGZpeGVzIENWRS0yMDE1LTEyODMuCisKKy0gW1NlY3VyaXR5XSBGaXggVExTIHN0cmlwcGluZyB2dWxuZXJhYmlsaXR5IGluIHNtdHBsaWIsIENWRS0yMDE2LTA3NzIuCisgIFJlcG9ydGVkIGJ5IFRlYW0gT3N0c3Ryb20KKworLSBJc3N1ZSAjMjEzODY6IEltcGxlbWVudCBtaXNzaW5nIElQdjRBZGRyZXNzLmlzX2dsb2JhbCBwcm9wZXJ0eS4gIEl0IHdhcworICBkb2N1bWVudGVkIHNpbmNlIDA3YTU2MTBiYWU5ZC4gIEluaXRpYWwgcGF0Y2ggYnkgUm9nZXIgTHVldGhpLgorCistIElzc3VlICMyMDkwMDogZGlzdHV0aWxzIHJlZ2lzdGVyIGNvbW1hbmQgbm93IGRlY29kZXMgSFRUUCByZXNwb25zZXMKKyAgY29ycmVjdGx5LiAgSW5pdGlhbCBwYXRjaCBieSBpbmdyaWQuCisKKy0gQSBuZXcgdmVyc2lvbiBvZiB0eXBpbmcucHkgcHJvdmlkZXMgc2V2ZXJhbCBuZXcgY2xhc3NlcyBhbmQKKyAgZmVhdHVyZXM6IEBvdmVybG9hZCBvdXRzaWRlIHN0dWJzLCBSZXZlcnNpYmxlLCBEZWZhdWx0RGljdCwgVGV4dCwKKyAgQ29udGV4dE1hbmFnZXIsIFR5cGVbXSwgTmV3VHlwZSgpLCBUWVBFX0NIRUNLSU5HLCBhbmQgbnVtZXJvdXMgYnVnCisgIGZpeGVzIChub3RlIHRoYXQgc29tZSBvZiB0aGUgbmV3IGZlYXR1cmVzIGFyZSBub3QgeWV0IGltcGxlbWVudGVkIGluCisgIG15cHkgb3Igb3RoZXIgc3RhdGljIGFuYWx5emVycykuICBBbHNvIGNsYXNzZXMgZm9yIFBFUCA0OTIKKyAgKEF3YWl0YWJsZSwgQXN5bmNJdGVyYWJsZSwgQXN5bmNJdGVyYXRvcikgaGF2ZSBiZWVuIGFkZGVkIChpbiBmYWN0CisgIHRoZXkgbWFkZSBpdCBpbnRvIDMuNS4xIGJ1dCB3ZXJlIG5ldmVyIG1lbnRpb25lZCkuCisKKy0gSXNzdWUgIzI1NzM4OiBTdG9wIGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvcigpIGZyb20KKyAgc2VuZGluZyBhIG1lc3NhZ2UgYm9keSBmb3IgMjA1IFJlc2V0IENvbnRlbnQuICBBbHNvLCBkb24ndCBzZW5kIENvbnRlbnQKKyAgaGVhZGVyIGZpZWxkcyBpbiByZXNwb25zZXMgdGhhdCBkb24ndCBoYXZlIGEgYm9keS4gIFBhdGNoIGJ5IFN1c3VtdQorICBLb3NoaWJhLgorCistIElzc3VlICMyMTMxMzogRml4IHRoZSAicGxhdGZvcm0iIG1vZHVsZSB0byB0b2xlcmF0ZSB3aGVuIHN5cy52ZXJzaW9uCisgIGNvbnRhaW5zIHRydW5jYXRlZCBidWlsZCBpbmZvcm1hdGlvbi4KKworLSBbU2VjdXJpdHldIElzc3VlICMyNjgzOTogT24gTGludXgsIDpmdW5jOmBvcy51cmFuZG9tYCBub3cgY2FsbHMgYGBnZXRyYW5kb20oKWBgIHdpdGgKKyAgYGBHUk5EX05PTkJMT0NLYGAgdG8gZmFsbCBiYWNrIG9uIHJlYWRpbmcgYGAvZGV2L3VyYW5kb21gYCBpZiB0aGUgdXJhbmRvbQorICBlbnRyb3B5IHBvb2wgaXMgbm90IGluaXRpYWxpemVkIHlldC4gUGF0Y2ggd3JpdHRlbiBieSBDb2xtIEJ1Y2tsZXkuCisKKy0gSXNzdWUgIzI3MTY0OiBJbiB0aGUgemxpYiBtb2R1bGUsIGFsbG93IGRlY29tcHJlc3NpbmcgcmF3IERlZmxhdGUgc3RyZWFtcworICB3aXRoIGEgcHJlZGVmaW5lZCB6ZGljdC4gIEJhc2VkIG9uIHBhdGNoIGJ5IFhpYW5nIFpoYW5nLgorCistIElzc3VlICMyNDI5MTogRml4IHdzZ2lyZWYuc2ltcGxlX3NlcnZlci5XU0dJUmVxdWVzdEhhbmRsZXIgdG8gY29tcGxldGVseQorICB3cml0ZSBkYXRhIHRvIHRoZSBjbGllbnQuICBQcmV2aW91c2x5IGl0IGNvdWxkIGRvIHBhcnRpYWwgd3JpdGVzIGFuZAorICB0cnVuY2F0ZSBkYXRhLiAgQWxzbywgd3NnaXJlZi5oYW5kbGVyLlNlcnZlckhhbmRsZXIgY2FuIG5vdyBoYW5kbGUgc3Rkb3V0CisgIGRvaW5nIHBhcnRpYWwgd3JpdGVzLCBidXQgdGhpcyBpcyBkZXByZWNhdGVkLgorCistIElzc3VlICMyNjgwOTogQWRkIGBgX19hbGxfX2BgIHRvIDptb2Q6YHN0cmluZ2AuICBQYXRjaCBieSBFbWFudWVsIEJhcnJ5LgorCistIElzc3VlICMyNjM3Mzogc3VicHJvY2Vzcy5Qb3Blbi5jb21tdW5pY2F0ZSBub3cgY29ycmVjdGx5IGlnbm9yZXMKKyAgQnJva2VuUGlwZUVycm9yIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgZGllcyBiZWZvcmUgLmNvbW11bmljYXRlKCkKKyAgaXMgY2FsbGVkIGluIG1vcmUvYWxsIGNpcmN1bXN0YW5jZXMuCisKKy0gSXNzdWUgIzIxNzc2OiBkaXN0dXRpbHMudXBsb2FkIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBIVFRQRXJyb3IuCisgIEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMyNzExNDogRml4IFNTTENvbnRleHQuX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyBmYWlscyB3aXRoCisgIFBlcm1pc3Npb25FcnJvcgorCistIElzc3VlICMxODM4MzogQXZvaWQgY3JlYXRpbmcgZHVwbGljYXRlIGZpbHRlcnMgd2hlbiB1c2luZyBmaWx0ZXJ3YXJuaW5ncworICBhbmQgc2ltcGxlZmlsdGVyLiAgQmFzZWQgb24gcGF0Y2ggYnkgQWxleCBTaGtvcC4KKworLSBJc3N1ZSAjMjcwNTc6IEZpeCBvcy5zZXRfaW5oZXJpdGFibGUoKSBvbiBBbmRyb2lkLCBpb2N0bCgpIGlzIGJsb2NrZWQgYnkKKyAgU0VMaW51eCBhbmQgZmFpbHMgd2l0aCBFQUNDRVNTLiBUaGUgZnVuY3Rpb24gbm93IGZhbGxzIGJhY2sgdG8gZmNudGwoKS4KKyAgUGF0Y2ggd3JpdHRlbiBieSBNaWNoYcWCIEJlZG5hcnNraS4KKworLSBJc3N1ZSAjMjcwMTQ6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gdXNpbmcgdHlwaW5nLnB5LiAgVGhhbmtzIHRvIEthbGxlIFR1dXJlIQorCistIElzc3VlICMxNDEzMjogRml4IHVybGxpYi5yZXF1ZXN0IHJlZGlyZWN0IGhhbmRsaW5nIHdoZW4gdGhlIHRhcmdldCBvbmx5IGhhcworICBhIHF1ZXJ5IHN0cmluZy4gIE9yaWdpbmFsIGZpeCBieSBKw6FuIEphbmVjaC4KKworLSBJc3N1ZSAjMTcyMTQ6IFRoZSAidXJsbGliLnJlcXVlc3QiIG1vZHVsZSBub3cgcGVyY2VudC1lbmNvZGVzIG5vbi1BU0NJSQorICBieXRlcyBmb3VuZCBpbiByZWRpcmVjdCB0YXJnZXQgVVJMcy4gIFNvbWUgc2VydmVycyBzZW5kIExvY2F0aW9uIGhlYWRlcgorICBmaWVsZHMgd2l0aCBub24tQVNDSUkgYnl0ZXMsIGJ1dCAiaHR0cC5jbGllbnQiIHJlcXVpcmVzIHRoZSByZXF1ZXN0IHRhcmdldAorICB0byBiZSBBU0NJSS1lbmNvZGFibGUsIG90aGVyd2lzZSBhIFVuaWNvZGVFbmNvZGVFcnJvciBpcyByYWlzZWQuICBCYXNlZCBvbgorICBwYXRjaCBieSBDaHJpc3RpYW4gSGVpbWVzLgorCistIElzc3VlICMyNjg5MjogSG9ub3IgZGVidWdsZXZlbCBmbGFnIGluIHVybGxpYi5yZXF1ZXN0LkhUVFBIYW5kbGVyLiBQYXRjaAorICBjb250cmlidXRlZCBieSBDaGkgSHN1YW4gWWVuLgorCistIElzc3VlICMyMjI3NDogSW4gdGhlIHN1YnByb2Nlc3MgbW9kdWxlLCBhbGxvdyBzdGRlcnIgdG8gYmUgcmVkaXJlY3RlZCB0bworICBzdGRvdXQgZXZlbiB3aGVuIHN0ZG91dCBpcyBub3QgcmVkaXJlY3RlZC4gIFBhdGNoIGJ5IEFraXJhIExpLgorCistIElzc3VlICMyNjgwNzogbW9ja19vcGVuICdmaWxlcycgbm8gbG9uZ2VyIGVycm9yIG9uIHJlYWRsaW5lIGF0IGVuZCBvZiBmaWxlLgorICBQYXRjaCBmcm9tIFlvbGFuZGEgUm9ibGEuCisKKy0gSXNzdWUgIzI1NzQ1OiBGaXhlZCBsZWFraW5nIGEgdXNlcnB0ciBpbiBjdXJzZXMgcGFuZWwgZGVzdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMjY5Nzc6IFJlbW92ZWQgdW5uZWNlc3NhcnksIGFuZCBpZ25vcmVkLCBjYWxsIHRvIHN1bSBvZiBzcXVhcmVzIGhlbHBlcgorICBpbiBzdGF0aXN0aWNzLnB2YXJpYW5jZS4KKworLSBJc3N1ZSAjMjY4ODE6IFRoZSBtb2R1bGVmaW5kZXIgbW9kdWxlIG5vdyBzdXBwb3J0cyBleHRlbmRlZCBvcGNvZGUgYXJndW1lbnRzLgorCistIElzc3VlICMyMzgxNTogRml4ZWQgY3Jhc2hlcyByZWxhdGVkIHRvIGRpcmVjdGx5IGNyZWF0ZWQgaW5zdGFuY2VzIG9mIHR5cGVzIGluCisgIF90a2ludGVyIGFuZCBjdXJzZXMucGFuZWwgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTc3NjU6IHdlYWtyZWYucmVmKCkgbm8gbG9uZ2VyIHNpbGVudGx5IGlnbm9yZXMga2V5d29yZCBhcmd1bWVudHMuCisgIFBhdGNoIGJ5IEdlb3JnIEJyYW5kbC4KKworLSBJc3N1ZSAjMjY4NzM6IHhtbHJwYyBub3cgcmFpc2VzIFJlc3BvbnNlRXJyb3Igb24gdW5zdXBwb3J0ZWQgdHlwZSB0YWdzCisgIGluc3RlYWQgb2Ygc2lsZW50bHkgcmV0dXJuIGluY29ycmVjdCByZXN1bHQuCisKKy0gSXNzdWUgIzI2NzExOiBGaXhlZCB0aGUgY29tcGFyaXNvbiBvZiBwbGlzdGxpYi5EYXRhIHdpdGggb3RoZXIgdHlwZXMuCisKKy0gSXNzdWUgIzI0MTE0OiBGaXggYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpbiBgY3R5cGVzLnV0aWxgLgorCisgIFRoZSBidWcgb25seSBvY2N1cnMgb24gU3VuT1Mgd2hlbiB0aGUgY3R5cGVzIGltcGxlbWVudGF0aW9uIHNlYXJjaGVzCisgIGZvciB0aGUgYGNybGVgIHByb2dyYW0uICBQYXRjaCBieSBYaWFuZyBaaGFuZy4gIFRlc3RlZCBvbiBTdW5PUyBieQorICBLZWVzIEJvcy4KKworLSBJc3N1ZSAjMjY4NjQ6IEluIHVybGxpYi5yZXF1ZXN0LCBjaGFuZ2UgdGhlIHByb3h5IGJ5cGFzcyBob3N0IGNoZWNraW5nCisgIGFnYWluc3Qgbm9fcHJveHkgdG8gYmUgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIHRvIG5vdCBtYXRjaCB1bnJlbGF0ZWQgaG9zdAorICBuYW1lcyB0aGF0IGhhcHBlbiB0byBoYXZlIGEgYnlwYXNzZWQgaG9zdG5hbWUgYXMgYSBzdWZmaXguICBQYXRjaCBieSBYaWFuZworICBaaGFuZy4KKworLSBJc3N1ZSAjMjY2MzQ6IHJlY3Vyc2l2ZV9yZXByKCkgbm93IHNldHMgX19xdWFsbmFtZV9fIG9mIHdyYXBwZXIuICBQYXRjaCBieQorICBYaWFuZyBaaGFuZy4KKworLSBJc3N1ZSAjMjY4MDQ6IHVybGxpYi5yZXF1ZXN0IHdpbGwgcHJlZmVyIGxvd2VyX2Nhc2UgcHJveHkgZW52aXJvbm1lbnQKKyAgdmFyaWFibGVzIG92ZXIgVVBQRVJfQ0FTRSBvciBNaXhlZF9DYXNlIG9uZXMuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEhhbnMtUGV0ZXIKKyAgSmFuc2VuLgorCistIElzc3VlICMyNjgzNzogYXNzZXJ0U2VxdWVuY2VFcXVhbCgpIG5vdyBjb3JyZWN0bHkgb3V0cHV0cyBub24tc3RyaW5naWZpZWQKKyAgZGlmZmVyaW5nIGl0ZW1zIChsaWtlIGJ5dGVzIGluIHRoZSAtYiBtb2RlKS4gIFRoaXMgYWZmZWN0cyBhc3NlcnRMaXN0RXF1YWwoKQorICBhbmQgYXNzZXJ0VHVwbGVFcXVhbCgpLgorCistIElzc3VlICMyNjA0MTogUmVtb3ZlICJ3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNyIgZnJvbSBkZXByZWNhdGlvbgorICBtZXNzYWdlcyBvZiBwbGF0Zm9ybS5kaXN0KCkgYW5kIHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpLgorICBQYXRjaCBieSBLdW1hcmlwYWJhIE1peXVydXNhcmEgQXRodWtvcmFsYS4KKworLSBJc3N1ZSAjMjY4MjI6IGl0ZW1nZXR0ZXIsIGF0dHJnZXR0ZXIgYW5kIG1ldGhvZGNhbGxlciBvYmplY3RzIG5vIGxvbmdlcgorICBzaWxlbnRseSBpZ25vcmUga2V5d29yZCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzI2NzMzOiBEaXNhc3NlbWJsaW5nIGEgY2xhc3Mgbm93IGRpc2Fzc2VtYmxlcyBjbGFzcyBhbmQgc3RhdGljIG1ldGhvZHMuCisgIFBhdGNoIGJ5IFhpYW5nIFpoYW5nLgorCistIElzc3VlICMyNjgwMTogRml4IGVycm9yIGhhbmRsaW5nIGluIDpmdW5jOmBzaHV0aWwuZ2V0X3Rlcm1pbmFsX3NpemVgLCBjYXRjaAorICA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOYW1lRXJyb3JgLiBQYXRjaCB3cml0dGVuIGJ5IEVtYW51ZWwKKyAgQmFycnkuCisKKy0gSXNzdWUgIzI0ODM4OiB0YXJmaWxlJ3MgdXN0YXIgYW5kIGdudSBmb3JtYXRzIG5vdyBjb3JyZWN0bHkgY2FsY3VsYXRlIG5hbWUKKyAgYW5kIGxpbmsgZmllbGQgbGltaXRzIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVyIGVuY29kaW5ncyBsaWtlIHV0Zi04LgorCistIFtTZWN1cml0eV0gSXNzdWUgIzI2NjU3OiBGaXggZGlyZWN0b3J5IHRyYXZlcnNhbCB2dWxuZXJhYmlsaXR5IHdpdGggaHR0cC5zZXJ2ZXIgb24KKyAgV2luZG93cy4gIFRoaXMgZml4ZXMgYSByZWdyZXNzaW9uIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gMy4zLjRyYzEgYW5kCisgIDMuNC4wcmMxLiAgQmFzZWQgb24gcGF0Y2ggYnkgUGhpbGlwcCBIYWdlbWVpc3Rlci4KKworLSBJc3N1ZSAjMjY3MTc6IFN0b3AgZW5jb2RpbmcgTGF0aW4tMS1pemVkIFdTR0kgcGF0aHMgd2l0aCBVVEYtOC4gIFBhdGNoIGJ5CisgIEFudGhvbnkgU290dGlsZS4KKworLSBJc3N1ZSAjMjY3MzU6IEZpeCA6ZnVuYzpgb3MudXJhbmRvbWAgb24gU29sYXJpcyAxMS4zIGFuZCBuZXdlciB3aGVuIHJlYWRpbmcKKyAgbW9yZSB0aGFuIDEsMDI0IGJ5dGVzOiBjYWxsIGBgZ2V0cmFuZG9tKClgYCBtdWx0aXBsZSB0aW1lcyB3aXRoIGEgbGltaXQgb2YKKyAgMTAyNCBieXRlcyBwZXIgY2FsbC4KKworLSBJc3N1ZSAjMTYzMjk6IEFkZCAud2VibSB0byBtaW1ldHlwZXMudHlwZXNfbWFwLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCisKKy0gSXNzdWUgIzEzOTUyOiBBZGQgLmNzdiB0byBtaW1ldHlwZXMudHlwZXNfbWFwLiAgUGF0Y2ggYnkgR2VvZmYgV2lsc29uLgorCistIElzc3VlICMyNjcwOTogRml4ZWQgWTIwMzggcHJvYmxlbSBpbiBsb2FkaW5nIGJpbmFyeSBQTGlzdHMuCisKKy0gSXNzdWUgIzIzNzM1OiBIYW5kbGUgdGVybWluYWwgcmVzaXppbmcgd2l0aCBSZWFkbGluZSA2LjMrIGJ5IGluc3RhbGxpbmcgb3VyCisgIG93biBTSUdXSU5DSCBoYW5kbGVyLiAgUGF0Y2ggYnkgRXJpYyBQcmljZS4KKworLSBJc3N1ZSAjMjY1ODY6IEluIGh0dHAuc2VydmVyLCByZXNwb25kIHdpdGggIjQxMyBSZXF1ZXN0IGhlYWRlciBmaWVsZHMgdG9vCisgIGxhcmdlIiBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaGVhZGVyIGZpZWxkcyB0byBwYXJzZSwgcmF0aGVyIHRoYW4ga2lsbGluZworICB0aGUgY29ubmVjdGlvbiBhbmQgcmFpc2luZyBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLiAgUGF0Y2ggYnkgWGlhbmcgWmhhbmcuCisKKy0gSXNzdWUgIzIyODU0OiBDaGFuZ2UgQnVmZmVyZWRSZWFkZXIud3JpdGFibGUoKSBhbmQKKyAgQnVmZmVyZWRXcml0ZXIucmVhZGFibGUoKSB0byBhbHdheXMgcmV0dXJuIEZhbHNlLgorCistIElzc3VlICMyNTE5NTogRml4IGEgcmVncmVzc2lvbiBpbiBtb2NrLk1hZ2ljTW9jay4gX0NhbGwgaXMgYSBzdWJjbGFzcyBvZgorICB0dXBsZSAoY2hhbmdlc2V0IDM2MDNiYWU2M2MxMyBvbmx5IHdvcmtzIGZvciBjbGFzc2VzKSBzbyB3ZSBuZWVkIHRvCisgIGltcGxlbWVudCBfX25lX18gb3Vyc2VsdmVzLiAgUGF0Y2ggYnkgQW5kcmV3IFBsdW1tZXIuCisKKy0gSXNzdWUgIzI2NjQ0OiBSYWlzZSBWYWx1ZUVycm9yIHJhdGhlciB0aGFuIFN5c3RlbUVycm9yIHdoZW4gYSBuZWdhdGl2ZQorICBsZW5ndGggaXMgcGFzc2VkIHRvIFNTTFNvY2tldC5yZWN2KCkgb3IgcmVhZCgpLgorCistIElzc3VlICMyMzgwNDogRml4IFNTTCByZWN2KDApIGFuZCByZWFkKDApIG1ldGhvZHMgdG8gcmV0dXJuIHplcm8gYnl0ZXMKKyAgaW5zdGVhZCBvZiB1cCB0byAxMDI0LgorCistIElzc3VlICMyNjYxNjogRml4ZWQgYSBidWcgaW4gZGF0ZXRpbWUuYXN0aW1lem9uZSgpIG1ldGhvZC4KKworLSBJc3N1ZSAjMjE5MjU6IDpmdW5jOmB3YXJuaW5ncy5mb3JtYXR3YXJuaW5nYCBub3cgY2F0Y2hlcyBleGNlcHRpb25zIG9uCisgIGBgbGluZWNhY2hlLmdldGxpbmUoLi4uKWBgIHRvIGJlIGFibGUgdG8gbG9nIDpleGM6YFJlc291cmNlV2FybmluZ2AgZW1pdHRlZAorICBsYXRlIGR1cmluZyB0aGUgUHl0aG9uIHNodXRkb3duIHByb2Nlc3MuCisKKy0gSXNzdWUgIzI0MjY2OiBDdHJsK0MgZHVyaW5nIFJlYWRsaW5lIGhpc3Rvcnkgc2VhcmNoIG5vdyBjYW5jZWxzIHRoZSBzZWFyY2gKKyAgbW9kZSB3aGVuIGNvbXBpbGVkIHdpdGggUmVhZGxpbmUgNy4KKworLSBJc3N1ZSAjMjY1NjA6IEF2b2lkIHBvdGVudGlhbCBWYWx1ZUVycm9yIGluIEJhc2VIYW5kbGVyLnN0YXJ0X3Jlc3BvbnNlLgorICBJbml0aWFsIHBhdGNoIGJ5IFBldGVyIEluZ2xlc2J5LgorCistIFtTZWN1cml0eV0gSXNzdWUgIzI2MzEzOiBzc2wucHkgX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyBmYWlscyBpZiB3aW5kb3dzIGNlcnQgc3RvcmUKKyAgaXMgZW1wdHkuIFBhdGNoIGJ5IEJhamkuCisKKy0gSXNzdWUgIzI2NTY5OiBGaXggOmZ1bmM6YHB5Y2xici5yZWFkbW9kdWxlYCBhbmQgOmZ1bmM6YHB5Y2xici5yZWFkbW9kdWxlX2V4YAorICB0byBzdXBwb3J0IGltcG9ydGluZyBwYWNrYWdlcy4KKworLSBJc3N1ZSAjMjY0OTk6IEFjY291bnQgZm9yIHJlbWFpbmluZyBDb250ZW50LUxlbmd0aCBpbgorICBIVFRQUmVzcG9uc2UucmVhZGxpbmUoKSBhbmQgcmVhZDEoKS4gIEJhc2VkIG9uIHBhdGNoIGJ5IFNpbGVudCBHaG9zdC4KKyAgQWxzbyBkb2N1bWVudCB0aGF0IEhUVFBSZXNwb25zZSBub3cgc3VwcG9ydHMgdGhlc2UgbWV0aG9kcy4KKworLSBJc3N1ZSAjMjUzMjA6IEhhbmRsZSBzb2NrZXRzIGluIGRpcmVjdG9yaWVzIHVuaXR0ZXN0IGRpc2NvdmVyeSBpcyBzY2FubmluZy4KKyAgUGF0Y2ggZnJvbSBWaWN0b3IgdmFuIGRlbiBFbHplbi4KKworLSBJc3N1ZSAjMTYxODE6IGNvb2tpZWphci5odHRwMnRpbWUoKSBub3cgcmV0dXJucyBOb25lIGlmIHllYXIgaXMgaGlnaGVyIHRoYW4KKyAgZGF0ZXRpbWUuTUFYWUVBUi4KKworLSBJc3N1ZSAjMjY1MTM6IEZpeGVzIHBsYXRmb3JtIG1vZHVsZSBkZXRlY3Rpb24gb2YgV2luZG93cyBTZXJ2ZXIKKworLSBJc3N1ZSAjMjM3MTg6IEZpeGVkIHBhcnNpbmcgdGltZSBpbiB3ZWVrIDAgYmVmb3JlIEphbiAxLiAgT3JpZ2luYWwgcGF0Y2ggYnkKKyAgVGFtw6FzIEJlbmNlIEdlZGFpLgorCistIElzc3VlICMyMDU4OTogSW52b2tpbmcgUGF0aC5vd25lcigpIGFuZCBQYXRoLmdyb3VwKCkgb24gV2luZG93cyBub3cgcmFpc2UKKyAgTm90SW1wbGVtZW50ZWRFcnJvciBpbnN0ZWFkIG9mIEltcG9ydEVycm9yLgorCistIElzc3VlICMyNjE3NzogRml4ZWQgdGhlIGtleXMoKSBtZXRob2QgZm9yIENhbnZhcyBhbmQgU2Nyb2xsYmFyIHdpZGdldHMuCisKKy0gSXNzdWUgIzE1MDY4OiBHb3QgcmlkIG9mIGV4Y2Vzc2l2ZSBidWZmZXJpbmcgaW4gdGhlIGZpbGVpbnB1dCBtb2R1bGUuCisgIFRoZSBidWZzaXplIHBhcmFtZXRlciBpcyBubyBsb25nZXIgdXNlZC4KKworLSBJc3N1ZSAjMjIwMjogRml4IFVuYm91bmRMb2NhbEVycm9yIGluCisgIEFic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXIuZ2V0X2FsZ29yaXRobV9pbXBscy4gIEluaXRpYWwgcGF0Y2ggYnkgTWF0aGlldSBEdXB1eS4KKworLSBJc3N1ZSAjMjU3MTg6IEZpeGVkIHBpY2tsaW5nIGFuZCBjb3B5aW5nIHRoZSBhY2N1bXVsYXRlKCkgaXRlcmF0b3Igd2l0aAorICB0b3RhbCBpcyBOb25lLgorCistIElzc3VlICMyNjQ3NTogRml4ZWQgZGVidWdnaW5nIG91dHB1dCBmb3IgcmVndWxhciBleHByZXNzaW9ucyB3aXRoIHRoZSAoP3gpCisgIGZsYWcuCisKKy0gSXNzdWUgIzI2NDU3OiBGaXhlZCB0aGUgc3VibmV0cygpIG1ldGhvZHMgaW4gSVAgbmV0d29yayBjbGFzc2VzIGZvciB0aGUgY2FzZQorICB3aGVuIHJlc3VsdGluZyBwcmVmaXggbGVuZ3RoIGlzIGVxdWFsIHRvIG1heGltYWwgcHJlZml4IGxlbmd0aC4KKyAgQmFzZWQgb24gcGF0Y2ggYnkgWGlhbmcgWmhhbmcuCisKKy0gSXNzdWUgIzI2Mzg1OiBSZW1vdmUgdGhlIGZpbGUgaWYgdGhlIGludGVybmFsIG9wZW4oKSBjYWxsIGluCisgIE5hbWVkVGVtcG9yYXJ5RmlsZSgpIGZhaWxzLiAgUGF0Y2ggYnkgU2lsZW50IEdob3N0LgorCistIElzc3VlICMyNjQwMjogRml4IFhNTC1SUEMgY2xpZW50IHRvIHJldHJ5IHdoZW4gdGhlIHNlcnZlciBzaHV0cyBkb3duIGEKKyAgcGVyc2lzdGVudCBjb25uZWN0aW9uLiAgVGhpcyB3YXMgYSByZWdyZXNzaW9uIHJlbGF0ZWQgdG8gdGhlIG5ldworICBodHRwLmNsaWVudC5SZW1vdGVEaXNjb25uZWN0ZWQgZXhjZXB0aW9uIGluIDMuNS4wYTQuCisKKy0gSXNzdWUgIzI1OTEzOiBMZWFkaW5nIGBgPH5gYCBpcyBvcHRpb25hbCBub3cgaW4gYmFzZTY0LmE4NWRlY29kZSgpIHdpdGgKKyAgYWRvYmU9VHJ1ZS4gIFBhdGNoIGJ5IFN3YXRpIEphaXN3YWwuCisKKy0gSXNzdWUgIzI2MTg2OiBSZW1vdmUgYW4gaW52YWxpZCB0eXBlIGNoZWNrIGluIGltcG9ydGxpYi51dGlsLkxhenlMb2FkZXIuCisKKy0gSXNzdWUgIzI2MzY3OiBpbXBvcnRsaWIuX19pbXBvcnRfXygpIHJhaXNlcyBTeXN0ZW1FcnJvciBsaWtlCisgIGJ1aWx0aW5zLl9faW1wb3J0X18oKSB3aGVuIGBgbGV2ZWxgYCBpcyBzcGVjaWZpZWQgYnV0IHdpdGhvdXQgYW4gYWNjb21wYW55aW5nCisgIHBhY2thZ2Ugc3BlY2lmaWVkLgorCistIElzc3VlICMyNjMwOTogSW4gdGhlICJzb2NrZXRzZXJ2ZXIiIG1vZHVsZSwgc2h1dCBkb3duIHRoZSByZXF1ZXN0IChjbG9zaW5nCisgIHRoZSBjb25uZWN0ZWQgc29ja2V0KSB3aGVuIHZlcmlmeV9yZXF1ZXN0KCkgcmV0dXJucyBmYWxzZS4gIFBhdGNoIGJ5IEF2aXYKKyAgUGFsaXZvZGEuCisKKy0gW1NlY3VyaXR5XSBJc3N1ZSAjMjU5Mzk6IE9uIFdpbmRvd3Mgb3BlbiB0aGUgY2VydCBzdG9yZSByZWFkb25seSBpbiBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMuCisKKy0gSXNzdWUgIzI1OTk1OiBvcy53YWxrKCkgbm8gbG9uZ2VyIHVzZXMgRkRzIHByb3BvcnRpb25hbCB0byB0aGUgdHJlZSBkZXB0aC4KKworLSBJc3N1ZSAjMjYxMTc6IFRoZSBvcy5zY2FuZGlyKCkgaXRlcmF0b3Igbm93IGNsb3NlcyBmaWxlIGRlc2NyaXB0b3Igbm90IG9ubHkKKyAgd2hlbiB0aGUgaXRlcmF0aW9uIGlzIGZpbmlzaGVkLCBidXQgd2hlbiBpdCB3YXMgZmFpbGVkIHdpdGggZXJyb3IuCisKKy0gSXNzdWUgIzI1OTExOiBSZXN0b3JlZCBzdXBwb3J0IG9mIGJ5dGVzIHBhdGhzIGluIG9zLndhbGsoKSBvbiBXaW5kb3dzLgorCistIElzc3VlICMyNjA0NTogQWRkIFVURi04IHN1Z2dlc3Rpb24gdG8gZXJyb3IgbWVzc2FnZSB3aGVuIHBvc3RpbmcgYQorICBub24tTGF0aW4tMSBzdHJpbmcgd2l0aCBodHRwLmNsaWVudC4KKworLSBJc3N1ZSAjMTI5MjM6IFJlc2V0IEZhbmN5VVJMb3BlbmVyJ3MgcmVkaXJlY3QgY291bnRlciBldmVuIGlmIHRoZXJlIGlzIGFuCisgIGV4Y2VwdGlvbi4gIEJhc2VkIG9uIHBhdGNoZXMgYnkgQnJpYW4gQnJhemlsIGFuZCBEYW5pZWwgUm9jY28uCisKKy0gSXNzdWUgIzI1OTQ1OiBGaXhlZCBhIGNyYXNoIHdoZW4gdW5waWNrbGUgdGhlIGZ1bmN0b29scy5wYXJ0aWFsIG9iamVjdCB3aXRoCisgIHdyb25nIHN0YXRlLiAgRml4ZWQgYSBsZWFrIGluIGZhaWxlZCBmdW5jdG9vbHMucGFydGlhbCBjb25zdHJ1Y3Rvci4KKyAgImFyZ3MiIGFuZCAia2V5d29yZHMiIGF0dHJpYnV0ZXMgb2YgZnVuY3Rvb2xzLnBhcnRpYWwgaGF2ZSBub3cgYWx3YXlzIHR5cGVzCisgIHR1cGxlIGFuZCBkaWN0IGNvcnJlc3BvbmRpbmdseS4KKworLSBJc3N1ZSAjMjYyMDI6IGNvcHkuZGVlcGNvcHkoKSBub3cgY29ycmVjdGx5IGNvcGllcyByYW5nZSgpIG9iamVjdHMgd2l0aAorICBub24tYXRvbWljIGF0dHJpYnV0ZXMuCisKKy0gSXNzdWUgIzIzMDc2OiBQYXRoLmdsb2IoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiBpdCdzIGNhbGxlZCB3aXRoIGFuCisgIGludmFsaWQgcGF0dGVybi4gIFBhdGNoIGJ5IFRob21hcyBOeWJlcmcuCisKKy0gSXNzdWUgIzE5ODgzOiBGaXhlZCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiB6aXBpbXBvcnQuCisKKy0gSXNzdWUgIzI2MjI3OiBPbiBXaW5kb3dzLCBnZXRuYW1laW5mbygpLCBnZXRob3N0YnlhZGRyKCkgYW5kCisgIGdldGhvc3RieW5hbWVfZXgoKSBmdW5jdGlvbnMgb2YgdGhlIHNvY2tldCBtb2R1bGUgbm93IGRlY29kZSB0aGUgaG9zdG5hbWUKKyAgZnJvbSB0aGUgQU5TSSBjb2RlIHBhZ2UgcmF0aGVyIHRoYW4gVVRGLTguCisKKy0gSXNzdWUgIzI2MTQ3OiB4bWxycGMgbm93IHdvcmtzIHdpdGggc3RyaW5ncyBub3QgZW5jb2RhYmxlIHdpdGggdXNlZAorICBub24tVVRGLTggZW5jb2RpbmcuCisKKy0gSXNzdWUgIzI1OTM1OiBHYXJiYWdlIGNvbGxlY3RvciBub3cgYnJlYWtzIHJlZmVyZW5jZSBsb29wcyB3aXRoIE9yZGVyZWREaWN0LgorCistIElzc3VlICMxNjYyMDogRml4ZWQgQXR0cmlidXRlRXJyb3IgaW4gbXNpbGliLkRpcmVjdG9yeS5nbG9iKCkuCisKKy0gSXNzdWUgIzI2MDEzOiBBZGRlZCBjb21wYXRpYmlsaXR5IHdpdGggYnJva2VuIHByb3RvY29sIDIgcGlja2xlcyBjcmVhdGVkCisgIGluIG9sZCBQeXRob24gMyB2ZXJzaW9ucyAoMy40LjMgYW5kIGxvd2VyKS4KKworLSBJc3N1ZSAjMjU4NTA6IFVzZSBjcm9zcy1jb21waWxhdGlvbiBieSBkZWZhdWx0IGZvciA2NC1iaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTc2MzM6IEltcHJvdmUgemlwaW1wb3J0J3Mgc3VwcG9ydCBmb3IgbmFtZXNwYWNlIHBhY2thZ2VzLgorCistIElzc3VlICMyNDcwNTogRml4IHN5c2NvbmZpZy5fcGFyc2VfbWFrZWZpbGUgbm90IGV4cGFuZGluZyAke30gdmFycworICBhcHBlYXJpbmcgYmVmb3JlICQoKSB2YXJzLgorCistIElzc3VlICMyMjEzODogRml4IG1vY2sucGF0Y2ggYmVoYXZpb3Igd2hlbiBwYXRjaGluZyBkZXNjcmlwdG9ycy4gUmVzdG9yZQorICBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIgcGF0Y2hpbmcuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IFNlYW4gTWNDdWxseS4KKworLSBJc3N1ZSAjMjU2NzI6IEluIHRoZSBzc2wgbW9kdWxlLCBlbmFibGUgdGhlIFNTTF9NT0RFX1JFTEVBU0VfQlVGRkVSUyBtb2RlCisgIG9wdGlvbiBpZiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorCistIElzc3VlICMyNjAxMjogRG9uJ3QgdHJhdmVyc2UgaW50byBzeW1saW5rcyBmb3IgKiogcGF0dGVybiBpbgorICBwYXRobGliLlBhdGguW3JdZ2xvYigpLgorCistIElzc3VlICMyNDEyMDogSWdub3JlIFBlcm1pc3Npb25FcnJvciB3aGVuIHRyYXZlcnNpbmcgYSB0cmVlIHdpdGgKKyAgcGF0aGxpYi5QYXRoLltyXWdsb2IoKS4gIFBhdGNoIGJ5IFVscmljaCBQZXRyaS4KKworLSBJc3N1ZSAjMjU0NDc6IGZpbGVpbnB1dCBub3cgdXNlcyBzeXMuc3RkaW4gYXMtaXMgaWYgaXQgZG9lcyBub3QgaGF2ZSBhCisgIGJ1ZmZlciBhdHRyaWJ1dGUgKHJlc3RvcmVzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgorCistIElzc3VlICMyNTQ0NzogQ29weWluZyB0aGUgbHJ1X2NhY2hlKCkgd3JhcHBlciBvYmplY3Qgbm93IGFsd2F5cyB3b3JrcywKKyAgaW5kZXBlbmRlZGx5IGZyb20gdGhlIHR5cGUgb2YgdGhlIHdyYXBwZWQgb2JqZWN0IChieSByZXR1cm5pbmcgdGhlIG9yaWdpbmFsCisgIG9iamVjdCB1bmNoYW5nZWQpLgorCistIElzc3VlICMyNDEwMzogRml4ZWQgcG9zc2libGUgdXNlIGFmdGVyIGZyZWUgaW4gRWxlbWVudFRyZWUuWE1MUHVsbFBhcnNlci4KKworLSBJc3N1ZSAjMjU4NjA6IG9zLmZ3YWxrKCkgbm8gbG9uZ2VyIHNraXBzIHJlbWFpbmluZyBkaXJlY3RvcmllcyB3aGVuIGVycm9yCisgIG9jY3Vycy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFNhbXNvbiBMZWUuCisKKy0gSXNzdWUgIzI1OTE0OiBGaXhlZCBhbmQgc2ltcGxpZmllZCBPcmRlcmVkRGljdC5fX3NpemVvZl9fLgorCistIElzc3VlICMyNTkwMjogRml4ZWQgdmFyaW91cyByZWZjb3VudCBpc3N1ZXMgaW4gRWxlbWVudFRyZWUgaXRlcmF0aW9uLgorCistIElzc3VlICMyNTcxNzogUmVzdG9yZSB0aGUgcHJldmlvdXMgYmVoYXZpb3VyIG9mIHRvbGVyYXRpbmcgbW9zdCBmc3RhdCgpCisgIGVycm9ycyB3aGVuIG9wZW5pbmcgZmlsZXMuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gaW4gMy41YTEsIGFuZCBzdG9wcGVkCisgIGFub255bW91cyB0ZW1wb3JhcnkgZmlsZXMgZnJvbSB3b3JraW5nIGluIHNwZWNpYWwgY2FzZXMuCisKIC0gSXNzdWUgIzI0OTAzOiBGaXggcmVncmVzc2lvbiBpbiBudW1iZXIgb2YgYXJndW1lbnRzIGNvbXBpbGVhbGwgYWNjZXB0cyB3aGVuCiAgICctZCcgaXMgc3BlY2lmaWVkLiAgVGhlIGNoZWNrIG9uIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGhhcyBiZWVuIGRyb3BwZWQKICAgY29tcGxldGVseSBhcyBpdCBuZXZlciB3b3JrZWQgY29ycmVjdGx5IGFueXdheS4KQEAgLTIxNSw2ICs2NTUsMTUgQEAKIC0gSXNzdWUgIzY0Nzg6IF9zdHJwdGltZSdzIHJlZ2V4cCBjYWNoZSBub3cgaXMgcmVzZXQgYWZ0ZXIgY2hhbmdpbmcgdGltZXpvbmUKICAgd2l0aCB0aW1lLnR6c2V0KCkuCiAKKy0gSXNzdWUgIzE0Mjg1OiBXaGVuIGV4ZWN1dGluZyBhIHBhY2thZ2Ugd2l0aCB0aGUgInB5dGhvbiAtbSBwYWNrYWdlIiBvcHRpb24sCisgIGFuZCBwYWNrYWdlIGluaXRpYWxpemF0aW9uIGZhaWxzLCBhIHByb3BlciB0cmFjZWJhY2sgaXMgbm93IHJlcG9ydGVkLiAgVGhlCisgICJydW5weSIgbW9kdWxlIG5vdyBsZXRzIGV4Y2VwdGlvbnMgZnJvbSBwYWNrYWdlIGluaXRpYWxpemF0aW9uIHBhc3MgYmFjayB0bworICB0aGUgY2FsbGVyLCByYXRoZXIgdGhhbiByYWlzaW5nIEltcG9ydEVycm9yLgorCistIElzc3VlICMxOTc3MTogQWxzbyBpbiBydW5weSBhbmQgdGhlICItbSIgb3B0aW9uLCBvbWl0IHRoZSBpcnJlbGV2YW50CisgIG1lc3NhZ2UgIi4gLiAuIGlzIGEgcGFja2FnZSBhbmQgY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIiBpZiB0aGUgcGFja2FnZQorICBjb3VsZCBub3QgZXZlbiBiZSBpbml0aWFsaXplZCAoZS5nLiBkdWUgdG8gYSBiYWQgYGAqLnB5Y2BgIGZpbGUpLgorCiAtIElzc3VlICMyNTE3NzogRml4ZWQgcHJvYmxlbSB3aXRoIHRoZSBtZWFuIG9mIHZlcnkgc21hbGwgYW5kIHZlcnkgbGFyZ2UKICAgbnVtYmVycy4gQXMgYSBzaWRlIGVmZmVjdCwgc3RhdGlzdGljcy5tZWFuIGFuZCBzdGF0aXN0aWNzLnZhcmlhbmNlIHNob3VsZAogICBiZSBzaWduaWZpY2FudGx5IGZhc3Rlci4KQEAgLTIzOSw2ICs2ODgsMzI2IEBACiAtIElzc3VlICMyNTYyNDogWmlwRmlsZSBub3cgYWx3YXlzIHdyaXRlcyBhIFpJUF9TVE9SRUQgaGVhZGVyIGZvciBkaXJlY3RvcnkKICAgZW50cmllcy4gIFBhdGNoIGJ5IERpbmd5dWFuIFdhbmcuCiAKKy0gU2tpcCBnZXRhZGRyaW5mbyBpZiBob3N0IGlzIGFscmVhZHkgcmVzb2x2ZWQuCisgIFBhdGNoIGJ5IEEuIEplc3NlIEppcnl1IERhdmlzLgorCistIElzc3VlICMyNjA1MDogQWRkIGFzeW5jaW8uU3RyZWFtUmVhZGVyLnJlYWR1bnRpbCgpIG1ldGhvZC4KKyAgUGF0Y2ggYnkg0JzQsNGA0Log0JrQvtGA0LXQvdCx0LXRgNCzLgorCistIElzc3VlICMyNTkyNDogQXZvaWQgdW5uZWNlc3Nhcnkgc2VyaWFsaXphdGlvbiBvZiBnZXRhZGRyaW5mbygzKSBjYWxscyBvbgorICBPUyBYIHZlcnNpb25zIDEwLjUgb3IgaGlnaGVyLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQS4gSmVzc2UgSmlyeXUgRGF2aXMuCisKKy0gSXNzdWUgIzI2NDA2OiBBdm9pZCB1bm5lY2Vzc2FyeSBzZXJpYWxpemF0aW9uIG9mIGdldGFkZHJpbmZvKDMpIGNhbGxzIG9uCisgIGN1cnJlbnQgdmVyc2lvbnMgb2YgT3BlbkJTRCBhbmQgTmV0QlNELiAgUGF0Y2ggYnkgQS4gSmVzc2UgSmlyeXUgRGF2aXMuCisKKy0gSXNzdWUgIzI2ODQ4OiBGaXggYXN5bmNpby9zdWJwcm9jZXNzLmNvbW11bmljYXRlKCkgdG8gaGFuZGxlIGVtcHR5IGlucHV0LgorICBQYXRjaCBieSBKYWNrIE8nQ29ubm9yLgorCistIElzc3VlICMyNzA0MDogQWRkIGxvb3AuZ2V0X2V4Y2VwdGlvbl9oYW5kbGVyIG1ldGhvZAorCistIElzc3VlICMyNzA0MTogYXN5bmNpbzogQWRkIGxvb3AuY3JlYXRlX2Z1dHVyZSBtZXRob2QKKworLSBJc3N1ZSAjMjcyMjM6IGFzeW5jaW86IEZpeCBfcmVhZF9yZWFkeSBhbmQgX3dyaXRlX3JlYWR5IHRvIHJlc3BlY3QKKyAgX2Nvbm5fbG9zdC4KKyAgUGF0Y2ggYnkgxYF1a2FzeiBMYW5nYS4KKworLSBJc3N1ZSAjMjI5NzA6IGFzeW5jaW86IEZpeCBpbmNvbnNpc3RlbmN5IGNhbmNlbGxpbmcgQ29uZGl0aW9uLndhaXQuCisgIFBhdGNoIGJ5IERhdmlkIENvbGVzLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzUxMjQ6IFBhc3RlIHdpdGggdGV4dCBzZWxlY3RlZCBub3cgcmVwbGFjZXMgdGhlIHNlbGVjdGlvbiBvbiBYMTEuCisgIFRoaXMgbWF0Y2hlcyBob3cgcGFzdGUgd29ya3Mgb24gV2luZG93cywgTWFjLCBtb3N0IG1vZGVybiBMaW51eCBhcHBzLAorICBhbmQgdHRrIHdpZGdldHMuICBPcmlnaW5hbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMyNDc1OTogTWFrZSBjbGVhciBpbiBpZGxlbGliLmlkbGVfdGVzdC5fX2luaXRfXyB0aGF0IHRoZSBkaXJlY3RvcnkKKyAgaXMgYSBwcml2YXRlIGltcGxlbWVudGF0aW9uIG9mIHRlc3QudGVzdF9pZGxlIGFuZCB0b29sIGZvciBtYWludGFpbmVycy4KKworLSBJc3N1ZSAjMjcxOTY6IFN0b3AgJ1RoZW1lQ2hhbmdlZCcgd2FybmluZ3Mgd2hlbiBydW5uaW5nIElETEUgdGVzdHMuCisgIFRoZXNlIHBlcnNpc3RlZCBhZnRlciBvdGhlciB3YXJuaW5ncyB3ZXJlIHN1cHByZXNzZWQgaW4gIzIwNTY3LgorICBBcHBseSBTZXJoaXkgU3RvcmNoYWthJ3MgdXBkYXRlX2lkbGV0YXNrcyBzb2x1dGlvbiB0byBmb3VyIHRlc3QgZmlsZXMuCisgIFJlY29yZCB0aGlzIGFkZGl0aW9uYWwgYWR2aWNlIGluIGlkbGVfdGVzdC9SRUFETUUudHh0CisKKy0gSXNzdWUgIzIwNTY3OiBSZXZpc2UgaWRsZV90ZXN0L1JFQURNRS50eHQgd2l0aCBhZHZpY2UgYWJvdXQgYXZvaWRpbmcKKyAgdGsgd2FybmluZyBtZXNzYWdlcyBmcm9tIHRlc3RzLiAgQXBwbHkgYWR2aWNlIHRvIHNldmVyYWwgSURMRSB0ZXN0cy4KKworLSBJc3N1ZSAjMjcxMTc6IE1ha2UgY29sb3JpemVyIGh0ZXN0IGFuZCB0dXJ0bGVkZW1vIHdvcmsgd2l0aCBkYXJrIHRoZW1lcy4KKyAgTW92ZSBjb2RlIGZvciBjb25maWd1cmluZyB0ZXh0IHdpZGdldCBjb2xvcnMgdG8gYSBuZXcgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzI2NjczOiBXaGVuIHRrIHJlcG9ydHMgZm9udCBzaXplIGFzIDAsIGNoYW5nZSB0byBzaXplIDEwLgorICBTdWNoIGZvbnRzIG9uIExpbnV4IHByZXZlbnRlZCB0aGUgY29uZmlndXJhdGlvbiBkaWFsb2cgZnJvbSBvcGVuaW5nLgorCistIElzc3VlICMyMTkzOTogQWRkIHRlc3QgZm9yIElETEUncyBwZXJjb2xhdG9yLgorICBPcmlnaW5hbCBwYXRjaCBieSBTYWltYWRoYXYgSGVibGlrYXIuCisKKy0gSXNzdWUgIzIxNjc2OiBBZGQgdGVzdCBmb3IgSURMRSdzIHJlcGxhY2UgZGlhbG9nLgorICBPcmlnaW5hbCBwYXRjaCBieSBTYWltYWRoYXYgSGVibGlrYXIuCisKKy0gSXNzdWUgIzE4NDEwOiBBZGQgdGVzdCBmb3IgSURMRSdzIHNlYXJjaCBkaWFsb2cuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFdlc3RsZXkgTWFydMOtbmV6LgorCistIElzc3VlICMyMTcwMzogQWRkIHRlc3QgZm9yIElETEUncyB1bmRvIGRlbGVnYXRvci4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgU2FpbWFkaGF2IEhlYmxpa2FyIC4KKworLSBJc3N1ZSAjMjcwNDQ6IEFkZCBDb25maWdEaWFsb2cucmVtb3ZlX3Zhcl9jYWxsYmFja3MgdG8gc3RvcCBtZW1vcnkgbGVha3MuCisKKy0gSXNzdWUgIzIzOTc3OiBBZGQgbW9yZSBhc3NlcnRzIHRvIHRlc3RfZGVsZWdhdG9yLgorCistIElzc3VlICMyMDY0MDogQWRkIHRlc3RzIGZvciBpZGxlbGliLmNvbmZpZ0hlbHBTb3VyY2VFZGl0LgorICBQYXRjaCBieSBTYWltYWRoYXYgSGVibGlrYXIuCisKKy0gSW4gdGhlICdJRExFLWNvbnNvbGUgZGlmZmVyZW5jZXMnIHNlY3Rpb24gb2YgdGhlIElETEUgZG9jLCBjbGFyaWZ5CisgIGhvdyBydW5uaW5nIHdpdGggSURMRSBhZmZlY3RzIHN5cy5tb2R1bGVzIGFuZCB0aGUgc3RhbmRhcmQgc3RyZWFtcy4KKworLSBJc3N1ZSAjMjU1MDc6IGZpeCBpbmNvcnJlY3QgY2hhbmdlIGluIElPQmluZGluZyB0aGF0IHByZXZlbnRlZCBwcmludGluZy4KKyAgQXVnbWVudCBJT0JpbmRpbmcgaHRlc3QgdG8gaW5jbHVkZSBhbGwgbWFqb3IgSU9CaW5kaW5nIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMjU5MDU6IFJldmVydCB1bndhbnRlZCBjb252ZXJzaW9uIG9mICcgdG8g4oCZIFJJR0hUIFNJTkdMRSBRVU9UQVRJT04KKyAgTUFSSyBpbiBSRUFETUUudHh0IGFuZCBvcGVuIHRoaXMgYW5kIE5FV1MudHh0IHdpdGggJ2FzY2lpJy4KKyAgUmUtZW5jb2RlIENSRURJVFMudHh0IHRvIHV0Zi04IGFuZCBvcGVuIGl0IHdpdGggJ3V0Zi04Jy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyNDEzNjogRG9jdW1lbnQgdGhlIG5ldyBQRVAgNDQ4IHVucGFja2luZyBzeW50YXggb2YgMy41LgorCistIElzc3VlICMyNjczNjogVXNlZCBIVFRQUyBmb3IgZXh0ZXJuYWwgbGlua3MgaW4gdGhlIGRvY3VtZW50YXRpb24gaWYgcG9zc2libGUuCisKKy0gSXNzdWUgIzY5NTM6IFJld29yayB0aGUgUmVhZGxpbmUgbW9kdWxlIGRvY3VtZW50YXRpb24gdG8gZ3JvdXAgcmVsYXRlZAorICBmdW5jdGlvbnMgdG9nZXRoZXIsIGFuZCBhZGQgbW9yZSBkZXRhaWxzIHN1Y2ggYXMgd2hhdCB1bmRlcmx5aW5nIFJlYWRsaW5lCisgIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGFyZSBhY2Nlc3NlZC4KKworLSBJc3N1ZSAjMjM2MDY6IEFkZHMgbm90ZSB0byBjdHlwZXMgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgY2RsbC5tc3ZjcnQuCisKKy0gSXNzdWUgIzI1NTAwOiBGaXggZG9jdW1lbnRhdGlvbiB0byBub3QgY2xhaW0gdGhhdCBfX2ltcG9ydF9fIGlzIHNlYXJjaGVkIGZvcgorICBpbiB0aGUgZ2xvYmFsIHNjb3BlLgorCistIElzc3VlICMyNjAxNDogVXBkYXRlIDMueCBwYWNrYWdpbmcgZG9jdW1lbnRhdGlvbjoKKyAgKiAiU2VlIGFsc28iIGxpbmtzIHRvIHRoZSBuZXcgZG9jcyBhcmUgbm93IHByb3ZpZGVkIGluIHRoZSBsZWdhY3kgcGFnZXMKKyAgKiBsaW5rcyB0byBzZXR1cHRvb2xzIGRvY3VtZW50YXRpb24gaGF2ZSBiZWVuIHVwZGF0ZWQKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzIxOTE2OiBBZGRlZCB0ZXN0cyBmb3IgdGhlIHR1cnRsZSBtb2R1bGUuICBQYXRjaCBieSBpbmdyaWQsCisgIEdyZWdvcnkgTG95c2UgYW5kIEplbGxlIFppamxzdHJhLgorCistIElzc3VlICMyNjUyMzogVGhlIG11bHRpcHJvY2Vzc2luZyB0aHJlYWQgcG9vbCAobXVsdGlwcm9jZXNzaW5nLmR1bW15LlBvb2wpCisgIHdhcyB1bnRlc3RlZC4KKworLSBJc3N1ZSAjMjYwMTU6IEFkZGVkIG5ldyB0ZXN0cyBmb3IgcGlja2xpbmcgaXRlcmF0b3JzIG9mIG11dGFibGUgc2VxdWVuY2VzLgorCistIElzc3VlICMyNjMyNTogQWRkZWQgdGVzdC5zdXBwb3J0LmNoZWNrX25vX3Jlc291cmNlX3dhcm5pbmcoKSB0byBjaGVjayB0aGF0CisgIG5vIFJlc291cmNlV2FybmluZyBpcyBlbWl0dGVkLgorCistIElzc3VlICMyNTk0MDogQ2hhbmdlZCB0ZXN0X3NzbCB0byB1c2Ugc2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQuICBUaGlzCisgIGF2b2lkcyByZWx5aW5nIG9uIHN2bi5weXRob24ub3JnLCB3aGljaCByZWNlbnRseSBjaGFuZ2VkIHJvb3QgY2VydGlmaWNhdGUuCisKKy0gSXNzdWUgIzI1NjE2OiBUZXN0cyBmb3IgT3JkZXJlZERpY3QgYXJlIGV4dHJhY3RlZCBmcm9tIHRlc3RfY29sbGVjdGlvbnMKKyAgaW50byBzZXBhcmF0ZSBmaWxlIHRlc3Rfb3JkZXJlZF9kaWN0LgorCistIElzc3VlICMyNjU4MzogU2tpcCB0ZXN0X3RpbWVzdGFtcF9vdmVyZmxvdyBpbiB0ZXN0X2ltcG9ydCBpZiBieXRlY29kZQorICBmaWxlcyBjYW5ub3QgYmUgd3JpdHRlbi4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzI2ODg0OiBGaXggbGlua2luZyBleHRlbnNpb24gbW9kdWxlcyBmb3IgY3Jvc3MgYnVpbGRzLgorICBQYXRjaCBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMjIzNTk6IERpc2FibGUgdGhlIHJ1bGVzIGZvciBydW5uaW5nIF9mcmVlemVfaW1wb3J0bGliIGFuZCBwZ2VuIHdoZW4KKyAgY3Jvc3MtY29tcGlsaW5nLiAgVGhlIG91dHB1dCBvZiB0aGVzZSBwcm9ncmFtcyBpcyBub3JtYWxseSBzYXZlZCB3aXRoIHRoZQorICBzb3VyY2UgY29kZSBhbnl3YXksIGFuZCBpcyBzdGlsbCByZWdlbmVyYXRlZCB3aGVuIGRvaW5nIGEgbmF0aXZlIGJ1aWxkLgorICBQYXRjaCBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMjcyMjk6IEZpeCB0aGUgY3Jvc3MtY29tcGlsaW5nIHBnZW4gcnVsZSBmb3IgaW4tdHJlZSBidWlsZHMuICBQYXRjaAorICBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMjE2Njg6IExpbmsgYXVkaW9vcCwgX2RhdGV0aW1lLCBfY3R5cGVzX3Rlc3QgbW9kdWxlcyB0byBsaWJtLAorICBleGNlcHQgb24gTWFjIE9TIFguIFBhdGNoIHdyaXR0ZW4gYnkgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzI1NzAyOiBBIC0td2l0aC1sdG8gY29uZmlndXJlIG9wdGlvbiBoYXMgYmVlbiBhZGRlZCB0aGF0IHdpbGwKKyAgZW5hYmxlIGxpbmsgdGltZSBvcHRpbWl6YXRpb25zIGF0IGJ1aWxkIHRpbWUgZHVyaW5nIGEgbWFrZSBwcm9maWxlLW9wdC4KKyAgU29tZSBjb21waWxlcnMgYW5kIHRvb2xjaGFpbnMgYXJlIGtub3duIHRvIG5vdCBwcm9kdWNlIHN0YWJsZSBjb2RlIHdoZW4KKyAgdXNpbmcgTFRPLCBiZSBzdXJlIHRvIHRlc3QgdGhpbmdzIHRob3JvdWdobHkgYmVmb3JlIHJlbHlpbmcgb24gaXQuCisgIEl0IGNhbiBwcm92aWRlIGEgZmV3ICUgc3BlZWQgdXAgb3ZlciBwcm9maWxlLW9wdCBhbG9uZS4KKworLSBJc3N1ZSAjMjY2MjQ6IEFkZHMgdmFsaWRhdGlvbiBvZiB1Y3J0YmFzZVtkXS5kbGwgdmVyc2lvbiB3aXRoIHdhcm5pbmcKKyAgZm9yIG9sZCB2ZXJzaW9ucy4KKworLSBJc3N1ZSAjMTc2MDM6IEF2b2lkIGVycm9yIGFib3V0IG5vbmV4aXN0YW50IGZpbGVibG9ja3MubyBmaWxlIGJ5IHVzaW5nIGEKKyAgbG93ZXItbGV2ZWwgY2hlY2sgZm9yIHN0X2Jsb2NrcyBpbiBzdHJ1Y3Qgc3RhdC4KKworLSBJc3N1ZSAjMjYwNzk6IEZpeGluZyB0aGUgYnVpbGQgb3V0cHV0IGZvbGRlciBmb3IgdGl4LTguNC4zLjYuIFBhdGNoIGJ5CisgIEJqb2VybiBUaGllbC4KKworLSBJc3N1ZSAjMjY0NjU6IFVwZGF0ZSBXaW5kb3dzIGJ1aWxkcyB0byB1c2UgT3BlblNTTCAxLjAuMmcuCisKKy0gSXNzdWUgIzI0NDIxOiBDb21waWxlIE1vZHVsZXMvX21hdGguYyBvbmNlLCBiZWZvcmUgYnVpbGRpbmcgZXh0ZW5zaW9ucy4KKyAgUHJldmlvdXNseSBpdCBjb3VsZCBmYWlsIHRvIGNvbXBpbGUgcHJvcGVybHkgaWYgdGhlIG1hdGggYW5kIGNtYXRoIGJ1aWxkcworICB3ZXJlIGNvbmN1cnJlbnQuCisKKy0gSXNzdWUgIzI1MzQ4OiBBZGRlZCBgYC0tcGdvYGAgYW5kIGBgLS1wZ28tam9iYGAgYXJndW1lbnRzIHRvCisgIGBgUENidWlsZFxidWlsZC5iYXRgYCBmb3IgYnVpbGRpbmcgd2l0aCBQcm9maWxlLUd1aWRlZCBPcHRpbWl6YXRpb24uICBUaGUKKyAgb2xkIGBgUENidWlsZFxidWlsZF9wZ28uYmF0YGAgc2NyaXB0IGlzIG5vdyBkZXByZWNhdGVkLCBhbmQgc2ltcGx5IGNhbGxzCisgIGBgUENidWlsZFxidWlsZC5iYXQgLS1wZ28gJSpgYC4KKworLSBJc3N1ZSAjMjU4Mjc6IEFkZCBzdXBwb3J0IGZvciBidWlsZGluZyB3aXRoIElDQyB0byBgYGNvbmZpZ3VyZWBgLCBpbmNsdWRpbmcKKyAgYSBuZXcgYGAtLXdpdGgtaWNjYGAgZmxhZy4KKworLSBJc3N1ZSAjMjU2OTY6IEZpeCBpbnN0YWxsYXRpb24gb2YgUHl0aG9uIG9uIFVOSVggd2l0aCBtYWtlIC1qOS4KKworLSBJc3N1ZSAjMjY5MzA6IFVwZGF0ZSBPUyBYIDEwLjUrIDMyLWJpdC1vbmx5IGluc3RhbGxlciB0byBidWlsZAorICBhbmQgbGluayB3aXRoIE9wZW5TU0wgMS4wLjJoLgorCistIElzc3VlICMyNjI2ODogVXBkYXRlIFdpbmRvd3MgYnVpbGRzIHRvIHVzZSBPcGVuU1NMIDEuMC4yZi4KKworLSBJc3N1ZSAjMjUxMzY6IFN1cHBvcnQgQXBwbGUgWGNvZGUgNydzIG5ldyB0ZXh0dWFsIFNESyBzdHViIGxpYnJhcmllcy4KKworLSBJc3N1ZSAjMjQzMjQ6IERvIG5vdCBlbmFibGUgdW5yZWFjaGFibGUgY29kZSB3YXJuaW5ncyB3aGVuIHVzaW5nCisgIGdjYyBhcyB0aGUgb3B0aW9uIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIG9sZGVyIHZlcnNpb25zIG9mIGdjYworICBhbmQgaGFzIGJlZW4gc2lsZW50bHkgcmVtb3ZlZCBhcyBvZiBnY2MtNC41LgorCitXaW5kb3dzCistLS0tLS0tCisKKy0gSXNzdWUgIzI3MDUzOiBVcGRhdGVzIG1ha2VfemlwLnB5IHRvIGNvcnJlY3RseSBnZW5lcmF0ZSBsaWJyYXJ5IFpJUCBmaWxlLgorCistIElzc3VlICMyNjI2ODogVXBkYXRlIHRoZSBwcmVwYXJlX3NzbC5weSBzY3JpcHQgdG8gaGFuZGxlIE9wZW5TU0wgcmVsZWFzZXMKKyAgdGhhdCBkb24ndCBpbmNsdWRlIHRoZSBjb250ZW50cyBvZiB0aGUgaW5jbHVkZSBkaXJlY3RvcnkgKHRoYXQgaXMsIDEuMC4yZQorICBhbmQgbGF0ZXIpLgorCistIElzc3VlICMyNjA3MTogYmRpc3Rfd2luaW5zdCBjcmVhdGVkIGJpbmFyaWVzIGZhaWwgdG8gc3RhcnQgYW5kIGZpbmQKKyAgMzJiaXQgUHl0aG9uCisKKy0gSXNzdWUgIzI2MDczOiBVcGRhdGUgdGhlIGxpc3Qgb2YgbWFnaWMgbnVtYmVycyBpbiBsYXVuY2hlcgorCistIElzc3VlICMyNjA2NTogRXhjbHVkZXMgdmVudiBmcm9tIGxpYnJhcnkgd2hlbiBnZW5lcmF0aW5nIGVtYmVkZGFibGUKKyAgZGlzdHJvLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjY3OTk6IEZpeCBweXRob24tZ2RiLnB5OiBkb24ndCBnZXQgQyB0eXBlcyBvbmNlIHdoZW4gdGhlIFB5dGhvbiBjb2RlCisgIGlzIGxvYWRlZCwgYnV0IGdldCBDIHR5cGVzIG9uIGRlbWFuZC4gVGhlIEMgdHlwZXMgY2FuIGNoYW5nZSBpZgorICBweXRob24tZ2RiLnB5IGlzIGxvYWRlZCBiZWZvcmUgdGhlIFB5dGhvbiBleGVjdXRhYmxlLiBQYXRjaCB3cml0dGVuIGJ5IFRob21hcworICBJbHNjaGUuCisKKy0gSXNzdWUgIzI2MjcxOiBGaXggdGhlIEZyZWV6ZSB0b29sIHRvIHByb3Blcmx5IHVzZSBmbGFncyBwYXNzZWQgdGhyb3VnaAorICBjb25maWd1cmUuIFBhdGNoIGJ5IERhbmllbCBTaGF1bG92LgorCistIElzc3VlICMyNjQ4OTogQWRkIGRpY3Rpb25hcnkgdW5wYWNraW5nIHN1cHBvcnQgdG8gVG9vbHMvcGFyc2VyL3VucGFyc2UucHkuCisgIFBhdGNoIGJ5IEd1byBDaSBUZW8uCisKKy0gSXNzdWUgIzI2MzE2OiBGaXggdmFyaWFibGUgbmFtZSB0eXBvIGluIEFyZ3VtZW50IENsaW5pYy4KKworTWlzYworLS0tLQorCistIElzc3VlICMxNzUwMCwgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9weXRob24vcHl0aG9uZG90b3JnL2lzc3Vlcy85NDU6IFJlbW92ZQorICB1bnVzZWQgYW5kIG91dGRhdGVkIGljb25zLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNS4xIGZpbmFsPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNS0xMi0wNgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjU3MDk6IEZpeGVkIHByb2JsZW0gd2l0aCBpbi1wbGFjZSBzdHJpbmcgY29uY2F0ZW5hdGlvbiBhbmQKKyAgdXRmLTggY2FjaGUuCisKK1dpbmRvd3MKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjU3MTU6IFB5dGhvbiAzLjUuMSBpbnN0YWxsZXIgc2hvd3Mgd3JvbmcgdXBncmFkZSBwYXRoIGFuZCBpbmNvcnJlY3QKKyAgbG9naWMgZm9yIGxhdW5jaGVyIGRldGVjdGlvbi4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjUuMSByZWxlYXNlIGNhbmRpZGF0ZSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE1LTExLTIyCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyNTYzMDogRml4IGEgcG9zc2libGUgc2VnZmF1bHQgZHVyaW5nIGFyZ3VtZW50IHBhcnNpbmcgaW4gZnVuY3Rpb25zCisgIHRoYXQgYWNjZXB0IGZpbGVzeXN0ZW0gcGF0aHMuCisKKy0gSXNzdWUgIzIzNTY0OiBGaXhlZCBhIHBhcnRpYWxseSBicm9rZW4gc2FuaXR5IGNoZWNrIGluIHRoZSBfcG9zaXhzdWJwcm9jZXNzCisgIGludGVybmFscyByZWdhcmRpbmcgaG93IGZkc190b19wYXNzIHdlcmUgcGFzc2VkIHRvIHRoZSBjaGlsZC4gIFRoZSBidWcgaGFkCisgIG5vIGFjdHVhbCBpbXBhY3QgYXMgc3VicHJvY2Vzcy5weSBhbHJlYWR5IGF2b2lkZWQgaXQuCisKKy0gSXNzdWUgIzI1Mzg4OiBGaXhlZCB0b2tlbml6ZXIgY3Jhc2ggd2hlbiBwcm9jZXNzaW5nIHVuZGVjb2RhYmxlIHNvdXJjZSBjb2RlCisgIHdpdGggYSBudWxsIGJ5dGUuCisKKy0gSXNzdWUgIzI1NDYyOiBUaGUgaGFzaCBvZiB0aGUga2V5IG5vdyBpcyBjYWxjdWxhdGVkIG9ubHkgb25jZSBpbiBtb3N0CisgIG9wZXJhdGlvbnMgaW4gQyBpbXBsZW1lbnRhdGlvbiBvZiBPcmRlcmVkRGljdC4KKworLSBJc3N1ZSAjMjI5OTU6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgX19yZWR1Y2VfXyBhbmQgX19yZWR1Y2VfZXhfXyBub3cKKyAgcmVqZWN0cyBidWlsdGluIHR5cGVzIHdpdGggbm90IGRlZmluZWQgX19uZXdfXy4KKworLSBJc3N1ZSAjMjU1NTU6IEZpeCBwYXJzZXIgYW5kIEFTVDogZmlsbCBsaW5lbm8gYW5kIGNvbF9vZmZzZXQgb2YgImFyZyIgbm9kZQorICB3aGVuIGNvbXBpbGluZyBBU1QgZnJvbSBQeXRob24gb2JqZWN0cy4KKworLSBJc3N1ZSAjMjQ4MDI6IEF2b2lkIGJ1ZmZlciBvdmVycmVhZHMgd2hlbiBpbnQoKSwgZmxvYXQoKSwgY29tcGlsZSgpLCBleGVjKCkKKyAgYW5kIGV2YWwoKSBhcmUgcGFzc2VkIGJ5dGVzLWxpa2Ugb2JqZWN0cy4gIFRoZXNlIG9iamVjdHMgYXJlIG5vdAorICBuZWNlc3NhcmlseSB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBieXRlLCBidXQgdGhlIGZ1bmN0aW9ucyBhc3N1bWVkIHRoZXkgd2VyZS4KKworLSBJc3N1ZSAjMjQ3MjY6IEZpeGVkIGEgY3Jhc2ggYW5kIGxlYWtpbmcgTlVMTCBpbiByZXByKCkgb2YgT3JkZXJlZERpY3QgdGhhdAorICB3YXMgbXV0YXRlZCBieSBkaXJlY3QgY2FsbHMgb2YgZGljdCBtZXRob2RzLgorCistIElzc3VlICMyNTQ0OTogSXRlcmF0aW5nIE9yZGVyZWREaWN0IHdpdGgga2V5cyB3aXRoIHVuc3RhYmxlIGhhc2ggbm93IHJhaXNlcworICBLZXlFcnJvciBpbiBDIGltcGxlbWVudGF0aW9ucyBhcyB3ZWxsIGFzIGluIFB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMjUzOTU6IEZpeGVkIGNyYXNoIHdoZW4gaGlnaGx5IG5lc3RlZCBPcmRlcmVkRGljdCBzdHJ1Y3R1cmVzIHdlcmUKKyAgZ2FyYmFnZSBjb2xsZWN0ZWQuCisKKy0gSXNzdWUgIzI1Mjc0OiBzeXMuc2V0cmVjdXJzaW9ubGltaXQoKSBub3cgcmFpc2VzIGEgUmVjdXJzaW9uRXJyb3IgaWYgdGhlIG5ldworICByZWN1cnNpb24gbGltaXQgaXMgdG9vIGxvdyBkZXBlbmRpbmcgYXQgdGhlIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoLiBNb2RpZnkKKyAgYWxzbyB0aGUgImxvd2VyLXdhdGVyIG1hcmsiIGZvcm11bGEgdG8gbWFrZSBpdCBtb25vdG9uaWMuIFRoaXMgbWFyayBpcyB1c2VkCisgIHRvIGRlY2lkZSB3aGVuIHRoZSBvdmVyZmxvd2VkIGZsYWcgb2YgdGhlIHRocmVhZCBzdGF0ZSBpcyByZXNldC4KKworLSBJc3N1ZSAjMjQ0MDI6IEZpeCBpbnB1dCgpIHRvIHByb21wdCB0byB0aGUgcmVkaXJlY3RlZCBzdGRvdXQgd2hlbgorICBzeXMuc3Rkb3V0LmZpbGVubygpIGZhaWxzLgorCistIElzc3VlICMyNDgwNjogUHJldmVudCBidWlsdGluIHR5cGVzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHN1YmNsYXNzZWQgZnJvbQorICBiZWluZyBzdWJjbGFzc2VkIHRocm91Z2ggbXVsdGlwbGUgaW5oZXJpdGFuY2UuCisKKy0gSXNzdWUgIzI0ODQ4OiBGaXhlZCBhIG51bWJlciBvZiBidWdzIGluIFVURi03IGRlY29kaW5nIG9mIG1pc2Zvcm1lZCBkYXRhLgorCistIElzc3VlICMyNTI4MDogSW1wb3J0IHRyYWNlIG1lc3NhZ2VzIGVtaXR0ZWQgaW4gdmVyYm9zZSAoLXYpIG1vZGUgYXJlIG5vCisgIGxvbmdlciBmb3JtYXR0ZWQgdHdpY2UuCisKKy0gSXNzdWUgIzI1MDAzOiBPbiBTb2xhcmlzIDExLjMgb3IgbmV3ZXIsIG9zLnVyYW5kb20oKSBub3cgdXNlcyB0aGUKKyAgZ2V0cmFuZG9tKCkgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgZ2V0ZW50cm9weSgpIGZ1bmN0aW9uLiBUaGUgZ2V0ZW50cm9weSgpCisgIGZ1bmN0aW9uIGlzIGJsb2NraW5nIHRvIGdlbmVyYXRlIHZlcnkgZ29vZCBxdWFsaXR5IGVudHJvcHksIG9zLnVyYW5kb20oKQorICBkb2Vzbid0IG5lZWQgc3VjaCBoaWdoLXF1YWxpdHkgZW50cm9weS4KKworLSBJc3N1ZSAjMjUxODI6IFRoZSBzdGRwcmludGVyICh1c2VkIGFzIHN5cy5zdGRlcnIgYmVmb3JlIHRoZSBpbyBtb2R1bGUgaXMKKyAgaW1wb3J0ZWQgYXQgc3RhcnR1cCkgbm93IHVzZXMgdGhlIGJhY2tzbGFzaHJlcGxhY2UgZXJyb3IgaGFuZGxlci4KKworLSBJc3N1ZSAjMjUxMzE6IE1ha2UgdGhlIGxpbmUgbnVtYmVyIGFuZCBjb2x1bW4gb2Zmc2V0IG9mIHNldC9kaWN0IGxpdGVyYWxzIGFuZAorICBjb21wcmVoZW5zaW9ucyBjb3JyZXNwb25kIHRvIHRoZSBvcGVuaW5nIGJyYWNlLgorCistIElzc3VlICMyNTE1MDogSGlkZSB0aGUgcHJpdmF0ZSBfUHlfYXRvbWljX3h4eCBzeW1ib2xzIGZyb20gdGhlIHB1YmxpYworICBQeXRob24uaCBoZWFkZXIgdG8gZml4IGEgY29tcGlsYXRpb24gZXJyb3Igd2l0aCBPcGVuTVAuIFB5VGhyZWFkU3RhdGVfR0VUKCkKKyAgYmVjb21lcyBhbiBhbGlhcyB0byBQeVRocmVhZFN0YXRlX0dldCgpIHRvIGF2b2lkIEFCSSBpbmNvbXBhdGliaWxpZXMuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjU2MjY6IENoYW5nZSB0aHJlZSB6bGliIGZ1bmN0aW9ucyB0byBhY2NlcHQgc2l6ZXMgdGhhdCBmaXQgaW4KKyAgUHlfc3NpemVfdCwgYnV0IGludGVybmFsbHkgY2FwIHRob3NlIHNpemVzIHRvIFVJTlRfTUFYLiAgVGhpcyByZXNvbHZlcyBhCisgIHJlZ3Jlc3Npb24gaW4gMy41IHdoZXJlIEd6aXBGaWxlLnJlYWQoKSBmYWlsZWQgdG8gcmVhZCBjaHVua3MgbGFyZ2VyIHRoYW4gMgorICBvciA0IEdpQi4gIFRoZSBjaGFuZ2UgYWZmZWN0cyB0aGUgemxpYi5EZWNvbXByZXNzLmRlY29tcHJlc3MoKSBtYXhfbGVuZ3RoCisgIHBhcmFtZXRlciwgdGhlIHpsaWIuZGVjb21wcmVzcygpIGJ1ZnNpemUgcGFyYW1ldGVyLCBhbmQgdGhlCisgIHpsaWIuRGVjb21wcmVzcy5mbHVzaCgpIGxlbmd0aCBwYXJhbWV0ZXIuCisKIC0gSXNzdWUgIzI1NTgzOiBBdm9pZCBpbmNvcnJlY3QgZXJyb3JzIHJhaXNlZCBieSBvcy5tYWtlZGlycyhleGlzdF9vaz1UcnVlKQogICB3aGVuIHRoZSBPUyBnaXZlcyBwcmlvcml0eSB0byBlcnJvcnMgc3VjaCBhcyBFQUNDRVMgb3ZlciBFRVhJU1QuCiAKQEAgLTI0OCwzOSArMTAxNyw2NSBAQAogICBub3QgYWxsb3cgdGhlIHNlbmRfc2lnbmFsKCksIHRlcm1pbmF0ZSgpLCBvciBraWxsKCkgbWV0aG9kcyB0byBkbwogICBhbnl0aGluZyBhcyB0aGV5IGNvdWxkIHBvdGVudGlhbGx5IHNpZ25hbCBhIGRpZmZlcmVudCBwcm9jZXNzLgogCi0tIElzc3VlICMyNTU3ODogRml4IChhbm90aGVyKSBtZW1vcnkgbGVhayBpbiBTU0xTb2NrZXQuZ2V0cGVlcmNlcigpLgotCiAtIElzc3VlICMyNTU5MDogSW4gdGhlIFJlYWRsaW5lIGNvbXBsZXRlciwgb25seSBjYWxsIGdldGF0dHIoKSBvbmNlIHBlcgogICBhdHRyaWJ1dGUuCiAKIC0gSXNzdWUgIzI1NDk4OiBGaXggYSBjcmFzaCB3aGVuIGdhcmJhZ2UtY29sbGVjdGluZyBjdHlwZXMgb2JqZWN0cyBjcmVhdGVkCi0gIGJ5IHdyYXBwaW5nIGEgbWVtb3J5dmlldy4gIFRoaXMgd2FzIGEgcmVncmVzc2lvbiBtYWRlIGluIDMuNC4zLiAgQmFzZWQKKyAgYnkgd3JhcHBpbmcgYSBtZW1vcnl2aWV3LiAgVGhpcyB3YXMgYSByZWdyZXNzaW9uIG1hZGUgaW4gMy41YTEuICBCYXNlZAogICBvbiBwYXRjaCBieSBFcnlrc3VuLgogCistIElzc3VlICMyNTU4NDogQWRkZWQgImVzY2FwZSIgdG8gdGhlIF9fYWxsX18gbGlzdCBpbiB0aGUgZ2xvYiBtb2R1bGUuCisKKy0gSXNzdWUgIzI1NTg0OiBGaXhlZCByZWN1cnNpdmUgZ2xvYigpIHdpdGggcGF0dGVybnMgc3RhcnRpbmcgd2l0aCAnXCpcKicuCisKKy0gSXNzdWUgIzI1NDQ2OiBGaXggcmVncmVzc2lvbiBpbiBzbXRwbGliJ3MgQVVUSCBMT0dJTiBzdXBwb3J0LgorCiAtIElzc3VlICMxODAxMDogRml4IHRoZSBweWRvYyB3ZWIgc2VydmVyJ3MgbW9kdWxlIHNlYXJjaCBmdW5jdGlvbiB0byBoYW5kbGUKICAgZXhjZXB0aW9ucyBmcm9tIGltcG9ydGluZyBwYWNrYWdlcy4KIAorLSBJc3N1ZSAjMjU1NTQ6IEdvdCByaWQgb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2luZy4KKwogLSBJc3N1ZSAjMjU1MTA6IGZpbGVpbnB1dC5GaWxlSW5wdXQucmVhZGxpbmUoKSBub3cgcmV0dXJucyBiJycgaW5zdGVhZCBvZiAnJwogICBhdCB0aGUgZW5kIGlmIHRoZSBGaWxlSW5wdXQgd2FzIG9wZW5lZCB3aXRoIGJpbmFyeSBtb2RlLgogICBQYXRjaCBieSBSeW9zdWtlIEl0by4KIAotLSBJc3N1ZSAjMjU1MzA6IERpc2FibGUgdGhlIHZ1bG5lcmFibGUgU1NMdjMgcHJvdG9jb2wgYnkgZGVmYXVsdCB3aGVuIGNyZWF0aW5nCi0gIHNzbC5TU0xDb250ZXh0LgorLSBJc3N1ZSAjMjU1MDM6IEZpeGVkIGluc3BlY3QuZ2V0ZG9jKCkgZm9yIGluaGVyaXRlZCBkb2NzdHJpbmdzIG9mIHByb3BlcnRpZXMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEpvaG4gTWFyayBWYW5kZW5iZXJnLgogCi0tIElzc3VlICMyNTU2OTogRml4IG1lbW9yeSBsZWFrIGluIFNTTFNvY2tldC5nZXRwZWVyY2VydCgpLgorLSBJc3N1ZSAjMjU1MTU6IEFsd2F5cyB1c2Ugb3MudXJhbmRvbSBhcyBhIHNvdXJjZSBvZiByYW5kb21uZXNzIGluIHV1aWQudXVpZDQuCiAKIC0gSXNzdWUgIzIxODI3OiBGaXhlZCB0ZXh0d3JhcC5kZWRlbnQoKSBmb3IgdGhlIGNhc2Ugd2hlbiBsYXJnZXN0IGNvbW1vbgogICB3aGl0ZXNwYWNlIGlzIGEgc3Vic3RyaW5nIG9mIHNtYWxsZXN0IGxlYWRpbmcgd2hpdGVzcGFjZS4KICAgQmFzZWQgb24gcGF0Y2ggYnkgUm9iZXJ0IExpLgogCi0tIElzc3VlICMyNTQ3MTogU29ja2V0cyByZXR1cm5lZCBmcm9tIGFjY2VwdCgpIHNob3VsZG4ndCBhcHBlYXIgdG8gYmUKLSAgbm9uYmxvY2tpbmcuCistIElzc3VlICMyNTQ0NzogVGhlIGxydV9jYWNoZSgpIHdyYXBwZXIgb2JqZWN0cyBub3cgY2FuIGJlIGNvcGllZCBhbmQgcGlja2xlZAorICAoYnkgcmV0dXJuaW5nIHRoZSBvcmlnaW5hbCBvYmplY3QgdW5jaGFuZ2VkKS4KKworLSBJc3N1ZSAjMjUzOTA6IHR5cGluZzogRG9uJ3QgY3Jhc2ggb24gVW5pb25bc3RyLCBQYXR0ZXJuXS4KIAogLSBJc3N1ZSAjMjU0NDE6IGFzeW5jaW86IFJhaXNlIGVycm9yIGZyb20gZHJhaW4oKSB3aGVuIHNvY2tldCBpcyBjbG9zZWQuCiAKKy0gSXNzdWUgIzI1NDEwOiBDbGVhbmVkIHVwIGFuZCBmaXhlZCBtaW5vciBidWdzIGluIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgT3JkZXJlZERpY3QuCisKIC0gSXNzdWUgIzI1NDExOiBJbXByb3ZlZCBVbmljb2RlIHN1cHBvcnQgaW4gU01UUEhhbmRsZXIgdGhyb3VnaCBiZXR0ZXIgdXNlIG9mCiAgIHRoZSBlbWFpbCBwYWNrYWdlLiBUaGFua3MgdG8gdXNlciBzaW1vbjA0IGZvciB0aGUgcGF0Y2guCiAKKy0gSXNzdWUgIzI1NDA3OiBSZW1vdmUgbWVudGlvbnMgb2YgdGhlIGZvcm1hdHRlciBtb2R1bGUgYmVpbmcgcmVtb3ZlZCBpbgorICBQeXRob24gMy42LgorCistIElzc3VlICMyNTQwNjogRml4ZWQgYSBidWcgaW4gQyBpbXBsZW1lbnRhdGlvbiBvZiBPcmRlcmVkRGljdC5tb3ZlX3RvX2VuZCgpCisgIHRoYXQgY2F1c2VkIHNlZ21lbnRhdGlvbiBmYXVsdCBvciBoYW5nIGluIGl0ZXJhdGluZyBhZnRlciBtb3Zpbmcgc2V2ZXJhbAorICBpdGVtcyB0byB0aGUgc3RhcnQgb2Ygb3JkZXJlZCBkaWN0LgorCistIElzc3VlICMyNTM2NDogemlwZmlsZSBub3cgd29ya3MgaW4gdGhyZWFkcyBkaXNhYmxlZCBidWlsZHMuCisKKy0gSXNzdWUgIzI1MzI4OiBzbXRwZCdzIFNNVFBDaGFubmVsIG5vdyBjb3JyZWN0bHkgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiBib3RoCisgIGRlY29kZV9kYXRhIGFuZCBlbmFibGVfU01UUFVURjggYXJlIHNldCB0byB0cnVlLgorCistIElzc3VlICMyNTMxNjogZGlzdHV0aWxzIHJhaXNlcyBPU0Vycm9yIGluc3RlYWQgb2YgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgorICB3aGVuIE1TVkMgaXMgbm90IGluc3RhbGxlZC4KKwogLSBJc3N1ZSAjMjUzODA6IEZpeGVkIHByb3RvY29sIGZvciB0aGUgU1RBQ0tfR0xPQkFMIG9wY29kZSBpbgogICBwaWNrbGV0b29scy5vcGNvZGVzLgogCkBAIC0yOTQsMjIgKzEwODksMjQgQEAKICAgc3VibWl0IGEgY29yb3V0aW5lIHRvIGEgbG9vcCBmcm9tIGFub3RoZXIgdGhyZWFkLCByZXR1cm5pbmcgYQogICBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLiAgQnkgVmluY2VudCBNaWNoZWwuCiAKLS0gSXNzdWUgIzI1MzE5OiBXaGVuIHRocmVhZGluZy5FdmVudCBpcyByZWluaXRpYWxpemVkLCB0aGUgdW5kZXJseWluZyBjb25kaXRpb24KLSAgc2hvdWxkIHVzZSBhIHJlZ3VsYXIgbG9jayByYXRoZXIgdGhhbiBhIHJlY3Vyc2l2ZSBsb2NrLgotCiAtIElzc3VlICMyNTIzMjogRml4IENHSVJlcXVlc3RIYW5kbGVyIHRvIHNwbGl0IHRoZSBxdWVyeSBmcm9tIHRoZSBVUkwgYXQgdGhlCiAgIGZpcnN0IHF1ZXN0aW9uIG1hcmsgKD8pIHJhdGhlciB0aGFuIHRoZSBsYXN0LiBQYXRjaCBmcm9tIFhpYW5nIFpoYW5nLgogCiAtIElzc3VlICMyNDY1NzogUHJldmVudCBDR0lSZXF1ZXN0SGFuZGxlciBmcm9tIGNvbGxhcHNpbmcgc2xhc2hlcyBpbiB0aGUKICAgcXVlcnkgcGFydCBvZiB0aGUgVVJMIGFzIGlmIGl0IHdlcmUgYSBwYXRoLiBQYXRjaCBmcm9tIFhpYW5nIFpoYW5nLgogCistIElzc3VlICMyNDQ4MzogQyBpbXBsZW1lbnRhdGlvbiBvZiBmdW5jdG9vbHMubHJ1X2NhY2hlKCkgbm93IGNhbGN1bGF0ZXMga2V5J3MKKyAgaGFzaCBvbmx5IG9uY2UuCisKIC0gSXNzdWUgIzIyOTU4OiBDb25zdHJ1Y3RvciBhbmQgdXBkYXRlIG1ldGhvZCBvZiB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkKICAgbm93IGFjY2VwdCB0aGUgc2VsZiBhbmQgdGhlIGRpY3Qga2V5d29yZCBhcmd1bWVudHMuCiAKIC0gSXNzdWUgIzIyNjA5OiBDb25zdHJ1Y3RvciBvZiBjb2xsZWN0aW9ucy5Vc2VyRGljdCBub3cgYWNjZXB0cyB0aGUgc2VsZiBrZXl3b3JkCiAgIGFyZ3VtZW50LgogCi0tIElzc3VlICMyNTI2Mi4gQWRkZWQgc3VwcG9ydCBmb3IgQklOQllURVM4IG9wY29kZSBpbiBQeXRob24gaW1wbGVtZW50YXRpb24gb2YKKy0gSXNzdWUgIzI1MTExOiBGaXhlZCBjb21wYXJpc29uIG9mIHRyYWNlYmFjay5GcmFtZVN1bW1hcnkuCisKKy0gSXNzdWUgIzI1MjYyOiBBZGRlZCBzdXBwb3J0IGZvciBCSU5CWVRFUzggb3Bjb2RlIGluIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZgogICB1bnBpY2tsZXIuICBIaWdoZXN0IDMyIGJpdHMgb2YgNjQtYml0IHNpemUgZm9yIEJJTlVOSUNPREU4IGFuZCBCSU5CWVRFUzgKICAgb3Bjb2RlcyBubyBsb25nZXIgc2lsZW50bHkgaWdub3JlZCBvbiAzMi1iaXQgcGxhdGZvcm1zIGluIEMgaW1wbGVtZW50YXRpb24uCiAKQEAgLTMxOSwxMSArMTExNiwxNCBAQAogLSBJc3N1ZSAjMjUyMzM6IFJld3JpdGUgdGhlIGd1dHMgb2YgYXN5bmNpby5RdWV1ZSBhbmQKICAgYXN5bmNpby5TZW1hcGhvcmUgdG8gYmUgbW9yZSB1bmRlcnN0YW5kYWJsZSBhbmQgY29ycmVjdC4KIAorLSBJc3N1ZSAjMjUyMDM6IEZhaWxlZCByZWFkbGluZS5zZXRfY29tcGxldGVyX2RlbGltcygpIG5vIGxvbmdlciBsZWZ0IHRoZQorICBtb2R1bGUgaW4gaW5jb25zaXN0ZW50IHN0YXRlLgorCiAtIElzc3VlICMyMzYwMDogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0emluZm8uZnJvbXV0YygpIHdhcyByZXR1cm5pbmcKICAgd3JvbmcgcmVzdWx0cyBpbiBzb21lIGNhc2VzLgogCi0tIElzc3VlICMyNTIwMzogRmFpbGVkIHJlYWRsaW5lLnNldF9jb21wbGV0ZXJfZGVsaW1zKCkgbm8gbG9uZ2VyIGxlZnQgdGhlCi0gIG1vZHVsZSBpbiBpbmNvbnNpc3RlbnQgc3RhdGUuCistIElzc3VlICMyMzMyOTogQWxsb3cgdGhlIHNzbCBtb2R1bGUgdG8gYmUgYnVpbHQgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZgorICBMaWJyZVNTTC4KIAogLSBQcmV2ZW50IG92ZXJmbG93IGluIF9VbnBpY2tsZXJfUmVhZC4KIApAQCAtMzMxLDM3MSArMTEzMSwxMDcgQEAKICAgcmVzcGVjdHMgdGhlIGxldHRlciBjYXNlIGdpdmVuIGJ5IHRoZSB1c2VyLiBUaGlzIHJlc3RvcmVzIHRoZSBhYmlsaXR5IHRvCiAgIHdyaXRlIGVuY29kaW5nIG5hbWVzIGluIHVwcGVyY2FzZSBsaWtlICJVVEYtOCIsIHdoaWNoIHdvcmtlZCBpbiBQeXRob24gMi4KIAorLSBJc3N1ZSAjMjUxMzU6IE1ha2UgZGVxdWVfY2xlYXIoKSBzYWZlciBieSBlbXB0eWluZyB0aGUgZGVxdWUgYmVmb3JlIGNsZWFyaW5nLgorICBUaGlzIGhlbHBzIGF2b2lkIHBvc3NpYmxlIHJlZW50cmFuY3kgaXNzdWVzLgorCiAtIElzc3VlICMxOTE0MzogcGxhdGZvcm0gbW9kdWxlIG5vdyByZWFkcyBXaW5kb3dzIHZlcnNpb24gZnJvbSBrZXJuZWwzMi5kbGwgdG8KICAgYXZvaWQgY29tcGF0aWJpbGl0eSBzaGltcy4KIAorLSBJc3N1ZSAjMjUwOTI6IEZpeCBkYXRldGltZS5zdHJmdGltZSgpIGZhaWx1cmUgd2hlbiBlcnJubyB3YXMgYWxyZWFkeSBzZXQgdG8KKyAgRUlOVkFMLgorCiAtIElzc3VlICMyMzUxNzogRml4IHJvdW5kaW5nIGluIGZyb210aW1lc3RhbXAoKSBhbmQgdXRjZnJvbXRpbWVzdGFtcCgpIG1ldGhvZHMKICAgb2YgZGF0ZXRpbWUuZGF0ZXRpbWU6IG1pY3Jvc2Vjb25kcyBhcmUgbm93IHJvdW5kZWQgdG8gbmVhcmVzdCB3aXRoIHRpZXMKICAgZ29pbmcgdG8gbmVhcmVzdCBldmVuIGludGVnZXIgKFJPVU5EX0hBTEZfRVZFTiksIGluc3RlYWQgb2YgYmVpbmcgcm91bmRpbmcKLSAgdG93YXJkcyB6ZXJvIChST1VORF9ET1dOKS4gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGVzZSBtZXRob2RzIHVzZSB0aGUgc2FtZQotICByb3VuZGluZyBtb2RlIHRoYW4gZGF0ZXRpbWUudGltZWRlbHRhIHRvIGtlZXAgdGhlIHByb3BlcnR5OgorICB0b3dhcmRzIG1pbnVzIGluZmluaXR5IChST1VORF9GTE9PUikuIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlc2UgbWV0aG9kcyB1c2UKKyAgdGhlIHNhbWUgcm91bmRpbmcgbW9kZSB0aGFuIGRhdGV0aW1lLnRpbWVkZWx0YSB0byBrZWVwIHRoZSBwcm9wZXJ0eToKICAgKGRhdGV0aW1lKDE5NzAsMSwxKSArIHRpbWVkZWx0YShzZWNvbmRzPXQpKSA9PSBkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHQpLgogICBJdCBhbHNvIHRoZSByb3VuZGluZyBtb2RlIHVzZWQgYnkgcm91bmQoZmxvYXQpIGZvciBleGFtcGxlLgogCistIElzc3VlICMyNTE1NTogRml4IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpIGFuZCBkYXRldGltZS5kYXRldGltZS51dGNub3coKSBvbgorICBXaW5kb3dzIHRvIHN1cHBvcnQgZGF0ZSBhZnRlciB5ZWFyIDIwMzguIEl0IHdhcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbgorICBQeXRob24gMy41LjAuCisKKy0gSXNzdWUgIzI1MTA4OiBPbWl0dGVkIGludGVybmFsIGZyYW1lcyBpbiB0cmFjZWJhY2sgZnVuY3Rpb25zIHByaW50X3N0YWNrKCksCisgIGZvcm1hdF9zdGFjaygpLCBhbmQgZXh0cmFjdF9zdGFjaygpIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMjUxMTg6IEZpeCBhIHJlZ3Jlc3Npb24gb2YgUHl0aG9uIDMuNS4wIGluIG9zLndhaXRwaWQoKSBvbiBXaW5kb3dzLgorCiAtIElzc3VlICMyNDY4NDogc29ja2V0LnNvY2tldC5nZXRhZGRyaW5mbygpIG5vdyBjYWxscwogICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKCkgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBlbmNvZGUoKSBtZXRob2Qgb2YgdGhlCiAgIGhvc3QsIHRvIGhhbmRsZSBjb3JyZWN0bHkgY3VzdG9tIHN0cmluZyB3aXRoIGFuIGVuY29kZSgpIG1ldGhvZCB3aGljaCBkb2Vzbid0CiAgIHJldHVybiBhIGJ5dGUgc3RyaW5nLiBUaGUgZW5jb2RlciBvZiB0aGUgSUROQSBjb2RlYyBpcyBub3cgY2FsbGVkIGRpcmVjdGx5CiAgIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgZW5jb2RlKCkgbWV0aG9kIG9mIHRoZSBzdHJpbmcuCiAKLS0gSXNzdWUgIzI0OTgyOiBzaHV0aWwubWFrZV9hcmNoaXZlKCkgd2l0aCB0aGUgInppcCIgZm9ybWF0IG5vdyBhZGRzIGVudHJpZXMKLSAgZm9yIGRpcmVjdG9yaWVzIChpbmNsdWRpbmcgZW1wdHkgZGlyZWN0b3JpZXMpIGluIFpJUCBmaWxlLgorLSBJc3N1ZSAjMjUwNjA6IENvcnJlY3RseSBjb21wdXRlIHN0YWNrIHVzYWdlIG9mIHRoZSBCVUlMRF9NQVAgb3Bjb2RlLgogCiAtIElzc3VlICMyNDg1NzogQ29tcGFyaW5nIGNhbGxfYXJncyB0byBhIGxvbmcgc2VxdWVuY2Ugbm93IGNvcnJlY3RseSByZXR1cm5zIGEKICAgYm9vbGVhbiByZXN1bHQgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGV4Y2VwdGlvbi4gIFBhdGNoIGJ5IEEgS2FwdHVyLgogCi0tIElzc3VlICMyNTAxOTogRml4ZWQgYSBjcmFzaCBjYXVzZWQgYnkgc2V0dGluZyBub24tc3RyaW5nIGtleSBvZiBleHBhdCBwYXJzZXIuCi0gIEJhc2VkIG9uIHBhdGNoIGJ5IEpvaG4gTGVpdGNoLgotCi0tIElzc3VlICMyNDkxNzogdGltZV9zdHJmdGltZSgpIGJ1ZmZlciBvdmVyLXJlYWQuCi0KIC0gSXNzdWUgIzIzMTQ0OiBNYWtlIHN1cmUgdGhhdCBIVE1MUGFyc2VyLmZlZWQoKSByZXR1cm5zIGFsbCB0aGUgZGF0YSwgZXZlbgogICB3aGVuIGNvbnZlcnRfY2hhcnJlZnMgaXMgVHJ1ZS4KIAorLSBJc3N1ZSAjMjQ5ODI6IHNodXRpbC5tYWtlX2FyY2hpdmUoKSB3aXRoIHRoZSAiemlwIiBmb3JtYXQgbm93IGFkZHMgZW50cmllcworICBmb3IgZGlyZWN0b3JpZXMgKGluY2x1ZGluZyBlbXB0eSBkaXJlY3RvcmllcykgaW4gWklQIGZpbGUuCisKKy0gSXNzdWUgIzI1MDE5OiBGaXhlZCBhIGNyYXNoIGNhdXNlZCBieSBzZXR0aW5nIG5vbi1zdHJpbmcga2V5IG9mIGV4cGF0IHBhcnNlci4KKyAgQmFzZWQgb24gcGF0Y2ggYnkgSm9obiBMZWl0Y2guCisKIC0gSXNzdWUgIzE2MTgwOiBFeGl0IHBkYiBpZiBmaWxlIGhhcyBzeW50YXggZXJyb3IsIGluc3RlYWQgb2YgdHJhcHBpbmcgdXNlcgogICBpbiBhbiBpbmZpbml0ZSBsb29wLiAgUGF0Y2ggYnkgWGF2aWVyIGRlIEdheWUuCiAKKy0gSXNzdWUgIzI0ODkxOiBGaXggYSByYWNlIGNvbmRpdGlvbiBhdCBQeXRob24gc3RhcnR1cCBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yCisgIG9mIHN0ZGluICgwKSwgc3Rkb3V0ICgxKSBvciBzdGRlcnIgKDIpIGlzIGNsb3NlZCB3aGlsZSBQeXRob24gaXMgY3JlYXRpbmcKKyAgc3lzLnN0ZGluLCBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyIG9iamVjdHMuIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIG5vdyBzZXQKKyAgdG8gTm9uZSBpZiB0aGUgY3JlYXRpb24gb2YgdGhlIG9iamVjdCBmYWlsZWQsIGluc3RlYWQgb2YgcmFpc2luZyBhbiBPU0Vycm9yCisgIGV4Y2VwdGlvbi4gSW5pdGlhbCBwYXRjaCB3cml0dGVuIGJ5IE1hcmNvIFBhb2xpbmkuCisKKy0gSXNzdWUgIzI0OTkyOiBGaXggZXJyb3IgaGFuZGxpbmcgYW5kIGEgcmFjZSBjb25kaXRpb24gKHJlbGF0ZWQgdG8gZ2FyYmFnZQorICBjb2xsZWN0aW9uKSBpbiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMjQ4ODE6IEZpeGVkIHNldHRpbmcgYmluYXJ5IG1vZGUgaW4gUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIEZpbGVJTworICBvbiBXaW5kb3dzIGFuZCBDeWd3aW4uICBQYXRjaCBmcm9tIEFraXJhIExpLgorCistIElzc3VlICMyNTU3ODogRml4IChhbm90aGVyKSBtZW1vcnkgbGVhayBpbiBTU0xTb2NrZXQuZ2V0cGVlcmNlcigpLgorCistIElzc3VlICMyNTUzMDogRGlzYWJsZSB0aGUgdnVsbmVyYWJsZSBTU0x2MyBwcm90b2NvbCBieSBkZWZhdWx0IHdoZW4gY3JlYXRpbmcKKyAgc3NsLlNTTENvbnRleHQuCisKKy0gSXNzdWUgIzI1NTY5OiBGaXggbWVtb3J5IGxlYWsgaW4gU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkuCisKKy0gSXNzdWUgIzI1NDcxOiBTb2NrZXRzIHJldHVybmVkIGZyb20gYWNjZXB0KCkgc2hvdWxkbid0IGFwcGVhciB0byBiZQorICBub25ibG9ja2luZy4KKworLSBJc3N1ZSAjMjUzMTk6IFdoZW4gdGhyZWFkaW5nLkV2ZW50IGlzIHJlaW5pdGlhbGl6ZWQsIHRoZSB1bmRlcmx5aW5nIGNvbmRpdGlvbgorICBzaG91bGQgdXNlIGEgcmVndWxhciBsb2NrIHJhdGhlciB0aGFuIGEgcmVjdXJzaXZlIGxvY2suCisKIC0gSXNzdWUgIzIxMTEyOiBGaXggcmVncmVzc2lvbiBpbiB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUgb24gc3ViY2xhc3Nlcy4KICAgUGF0Y2ggZnJvbSBCZXJrZXIgUGVrc2FnLgogCi0tIElzc3VlICMyNDkzMTogSW5zdGFuY2VzIG9mIHN1YmNsYXNzZXMgb2YgbmFtZWR0dXBsZXMgaGF2ZSB0aGVpciBvd24gX19kaWN0X18KLSAgd2hpY2ggYnJlYWtzIHRoZSBpbmhlcml0ZWQgX19kaWN0X18gcHJvcGVydHkgYW5kIGJyZWFrcyB0aGUgX2FzZGljdCgpIG1ldGhvZC4KLSAgUmVtb3ZlZCB0aGUgX19kaWN0X18gcHJvcGVydHkgdG8gcHJldmVudCB0aGUgY29uZmxpY3QgYW5kIGZpeGVkIF9hc2RpY3QoKS4KLQogLSBJc3N1ZSAjMjQ3NjQ6IGNnaS5GaWVsZFN0b3JhZ2UucmVhZF9tdWx0aSgpIG5vdyBpZ25vcmVzIHRoZSBDb250ZW50LUxlbmd0aAogICBoZWFkZXIgaW4gcGFydCBoZWFkZXJzLiBQYXRjaCB3cml0dGVuIGJ5IFBldGVyIExhbmRyeSBhbmQgcmV2aWV3ZWQgYnkgUGllcnJlCiAgIFF1ZW50ZWwuCiAKKy0gSXNzdWUgIzI0OTEzOiBGaXggb3ZlcnJ1biBlcnJvciBpbiBkZXF1ZS5pbmRleCgpLgorICBGb3VuZCBieSBKb2huIExlaXRjaCBhbmQgQnJ5Y2UgRGFybGluZy4KKwogLSBJc3N1ZSAjMjQ3NzQ6IEZpeCBkb2NzdHJpbmcgaW4gaHR0cC5zZXJ2ZXIudGVzdC4gUGF0Y2ggZnJvbSBDaGl1LUhzaWFuZyBIc3UuCiAKIC0gSXNzdWUgIzIxMTU5OiBJbXByb3ZlIG1lc3NhZ2UgaW4gY29uZmlncGFyc2VyLkludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IuCiAgIFBhdGNoIGZyb20gxYF1a2FzeiBMYW5nYS4KIAotLSBJc3N1ZSAjMjM4ODg6IEhhbmRsZSBmcmFjdGlvbmFsIHRpbWUgaW4gY29va2llIGV4cGlyeS4gUGF0Y2ggYnkgc3NoLgotCi0tIElzc3VlICMyMzAwNDogbW9ja19vcGVuKCkgbm93IHJlYWRzIGJpbmFyeSBkYXRhIGNvcnJlY3RseSB3aGVuIHRoZSB0eXBlIG9mCi0gIHJlYWRfZGF0YSBpcyBieXRlcy4gIEluaXRpYWwgcGF0Y2ggYnkgQWFyb24gSGlsbC4KLQotLSBJc3N1ZSAjMjM2NTI6IE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB0aGUgc2VsZWN0IG1vZHVsZSBhZ2FpbnN0IHRoZQotICBsaWJjIGhlYWRlcnMgZnJvbSB0aGUgTGludXggU3RhbmRhcmQgQmFzZSwgd2hpY2ggZG8gbm90IGluY2x1ZGUgc29tZQotICBFUE9MTCBtYWNyb3MuICBQYXRjaCBieSBNYXR0IEZyYW5rLgotCi0tIElzc3VlICMyMjkzMjogRml4IHRpbWV6b25lcyBpbiBlbWFpbC51dGlscy5mb3JtYXRkYXRlLgotICBQYXRjaCBmcm9tIERtaXRyeSBTaGFjaG5ldi4KLQotLSBJc3N1ZSAjMjM3Nzk6IGltYXBsaWIgcmFpc2VzIFR5cGVFcnJvciBpZiBhdXRoZW50aWNhdG9yIHRyaWVzIHRvIGFib3J0LgotICBQYXRjaCBmcm9tIENyYWlnIEhvbG1xdWlzdC4KLQotLSBJc3N1ZSAjMjMzMTk6IEZpeCBjdHlwZXMuQmlnRW5kaWFuU3RydWN0dXJlLCBzd2FwIGNvcnJlY3RseSBieXRlcy4gUGF0Y2gKLSAgd3JpdHRlbiBieSBNYXR0aGlldSBHYXV0aWVyLgotCi0tIElzc3VlICMyMzI1NDogRG9jdW1lbnQgaG93IHRvIGNsb3NlIHRoZSBUQ1BTZXJ2ZXIgbGlzdGVuaW5nIHNvY2tldC4KLSAgUGF0Y2ggZnJvbSBNYXJ0aW4gUGFudGVyLgotCi0tIElzc3VlICMxOTQ1MDogVXBkYXRlIFdpbmRvd3MgYW5kIE9TIFggaW5zdGFsbGVyIGJ1aWxkcyB0byB1c2UgU1FMaXRlIDMuOC4xMS4KLQotLSBJc3N1ZSAjMjM0NDE6IHJjb21wbGV0ZXIgbm93IHByaW50cyBhIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBkaXNwbGF5aW5nCi0gIHBvc3NpYmxlIGNvbXBsZXRpb25zIGZvciBhbiBlbXB0eSB3b3JkLiAgSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gU2VrZXJhLgotCi0tIElzc3VlICMyNDczNTogRml4IGludmFsaWQgbWVtb3J5IGFjY2VzcyBpbgotICBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoKS4KLQotLSBJc3N1ZSAjMTc1Mjc6IEFkZCBQQVRDSCB0byB3c2dpcmVmLnZhbGlkYXRvci4gUGF0Y2ggZnJvbSBMdWNhIFNiYXJkZWxsYS4KLQotLSBJc3N1ZSAjMjQ2ODM6IEZpeGVkIGNyYXNoZXMgaW4gX2pzb24gZnVuY3Rpb25zIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyBvZgotICBpbmFwcHJvcHJpYXRlIHR5cGUuCi0KLS0gSXNzdWUgIzIxNjk3OiBzaHV0aWwuY29weXRyZWUoKSBub3cgY29ycmVjdGx5IGhhbmRsZXMgc3ltYm9saWMgbGlua3MgdGhhdAotICBwb2ludCB0byBkaXJlY3Rvcmllcy4gIFBhdGNoIGJ5IEVkdWFyZG8gU2VhYnJhIGFuZCBUaG9tYXMgS2x1eXZlci4KLQotLSBJc3N1ZSAjMjQ2MjA6IFJhbmRvbS5zZXRzdGF0ZSgpIG5vdyB2YWxpZGF0ZXMgdGhlIHZhbHVlIG9mIHN0YXRlIGxhc3QgZWxlbWVudC4KLQotLSBJc3N1ZSAjMjIxNTM6IEltcHJvdmUgdW5pdHRlc3QgZG9jcy4gUGF0Y2ggZnJvbSBNYXJ0aW4gUGFudGVyIGFuZCBldmlsemVyby4KLQotLSBJc3N1ZSAjMjQyMDY6IEZpeGVkIF9fZXFfXyBhbmQgX19uZV9fIG1ldGhvZHMgb2YgaW5zcGVjdCBjbGFzc2VzLgotCi0tIElzc3VlICMyMTc1MDogbW9ja19vcGVuLnJlYWRfZGF0YSBjYW4gbm93IGJlIHJlYWQgZnJvbSBlYWNoIGluc3RhbmNlLCBhcyBpdAotICBjb3VsZCBpbiBQeXRob24gMy4zLgotCi0tIElzc3VlICMyMzI0NzogRml4IGEgY3Jhc2ggaW4gdGhlIFN0cmVhbVdyaXRlci5yZXNldCgpIG9mIENKSyBjb2RlY3MuCi0KLS0gSXNzdWUgIzE4NjIyOiB1bml0dGVzdC5tb2NrLm1vY2tfb3BlbigpLnJlc2V0X21vY2sgd291bGQgcmVjdXJzZSBpbmZpbml0ZWx5LgotICBQYXRjaCBmcm9tIE5pY29sYSBQYWx1bWJvIGFuZCBMYXVyZW50IERlIEJ1eXN0LgotCi0tIElzc3VlICMyNDYwODogY2h1bmsuQ2h1bmsucmVhZCgpIG5vdyBhbHdheXMgcmV0dXJucyBieXRlcywgbm90IHN0ci4KLQotLSBJc3N1ZSAjMTg2ODQ6IEZpeGVkIHJlYWRpbmcgb3V0IG9mIHRoZSBidWZmZXIgaW4gdGhlIHJlIG1vZHVsZS4KLQotLSBJc3N1ZSAjMjQyNTk6IHRhcmZpbGUgbm93IHJhaXNlcyBhIFJlYWRFcnJvciBpZiBhbiBhcmNoaXZlIGlzIHRydW5jYXRlZAotICBpbnNpZGUgYSBkYXRhIHNlZ21lbnQuCi0KLS0gSXNzdWUgIzI0NTUyOiBGaXggdXNlIGFmdGVyIGZyZWUgaW4gYW4gZXJyb3IgY2FzZSBvZiB0aGUgX3BpY2tsZSBtb2R1bGUuCi0KLS0gSXNzdWUgIzI0NTE0OiB0YXJmaWxlIG5vdyB0b2xlcmF0ZXMgbnVtYmVyIGZpZWxkcyBjb25zaXN0aW5nIG9mIG9ubHkKLSAgd2hpdGVzcGFjZS4KLQotLSBJc3N1ZSAjMTkxNzY6IEZpeGVkIGRvY3R5cGUoKSByZWxhdGVkIGJ1Z3MgaW4gQyBpbXBsZW1lbnRhdGlvbiBvZiBFbGVtZW50VHJlZS4KLSAgQSBkZXByZWNhdGlvbiB3YXJuaW5nIG5vIGxvbmdlciBpc3N1ZWQgYnkgWE1MUGFyc2VyIHN1YmNsYXNzIHdpdGggZGVmYXVsdAotICBkb2N0eXBlKCkgbWV0aG9kLiAgRGlyZWN0IGNhbGwgb2YgZG9jdHlwZSgpIG5vdyBpc3N1ZXMgYSB3YXJuaW5nLiAgUGFyc2VyJ3MKLSAgZG9jdHlwZSgpIG5vdyBpcyBub3QgY2FsbGVkIGlmIHRhcmdldCdzIGRvY3R5cGUoKSBpcyBjYWxsZWQuICBCYXNlZCBvbiBwYXRjaAotICBieSBNYXJ0aW4gUGFudGVyLgotCi0tIElzc3VlICMyMDM4NzogUmVzdG9yZSBzZW1hbnRpYyByb3VuZC10cmlwIGNvcnJlY3RuZXNzIGluIHRva2VuaXplL3VudG9rZW5pemUKLSAgZm9yIHRhYi1pbmRlbnRlZCBibG9ja3MuCi0KLS0gSXNzdWUgIzI0NDU2OiBGaXhlZCBwb3NzaWJsZSBidWZmZXIgb3Zlci1yZWFkIGluIGFkcGNtMmxpbigpIGFuZCBsaW4yYWRwY20oKQotICBmdW5jdGlvbnMgb2YgdGhlIGF1ZGlvb3AgbW9kdWxlLgotCi0tIElzc3VlICMyNDMzNjogVGhlIGNvbnRleHRtYW5hZ2VyIGRlY29yYXRvciBub3cgd29ya3Mgd2l0aCBmdW5jdGlvbnMgd2l0aAotICBrZXl3b3JkIGFyZ3VtZW50cyBjYWxsZWQgImZ1bmMiIGFuZCAic2VsZiIuICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgotCi0tIElzc3VlICMyNDQ4OTogZW5zdXJlIGEgcHJldmlvdXNseSBzZXQgQyBlcnJubyBkb2Vzbid0IGRpc3R1cmIgY21hdGgucG9sYXIoKS4KLQotLSBJc3N1ZSAjNTYzMzogRml4ZWQgdGltZWl0IHdoZW4gdGhlIHN0YXRlbWVudCBpcyBhIHN0cmluZyBhbmQgdGhlIHNldHVwIGlzIG5vdC4KLQotLSBJc3N1ZSAjMjQzMjY6IEZpeGVkIGF1ZGlvb3AucmF0ZWN2KCkgd2l0aCBub24tZGVmYXVsdCB3ZWlnaHRCIGFyZ3VtZW50LgotICBPcmlnaW5hbCBwYXRjaCBieSBEYXZpZCBNb29yZS4KLQotLSBJc3N1ZSAjMjM4NDA6IHRva2VuaXplLm9wZW4oKSBub3cgY2xvc2VzIHRoZSB0ZW1wb3JhcnkgYmluYXJ5IGZpbGUgb24gZXJyb3IKLSAgdG8gZml4IGEgcmVzb3VyY2Ugd2FybmluZy4KLQotLSBJc3N1ZSAjMjQyNTc6IEZpeGVkIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiBzcWxpdGUzLlJvdyBjb25zdHJ1Y3RvciB3aXRoIGZha2VkCi0gIGN1cnNvciB0eXBlLgotCi0tIElzc3VlICMyMjEwNzogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIGFuZCB0ZW1wZmlsZS5ta2R0ZW1wKCkgbm93IHRyeSBhZ2FpbgotICB3aGVuIGEgZGlyZWN0b3J5IHdpdGggdGhlIGNob3NlbiBuYW1lIGFscmVhZHkgZXhpc3RzIG9uIFdpbmRvd3MgYXMgd2VsbCBhcwotICBvbiBVbml4LiAgdGVtcGZpbGUubWtzdGVtcCgpIG5vdyBmYWlscyBlYXJseSBpZiBwYXJlbnQgZGlyZWN0b3J5IGlzIG5vdAotICB2YWxpZCAobm90IGV4aXN0cyBvciBpcyBhIGZpbGUpIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzY1OTg6IEluY3JlYXNlZCB0aW1lIHByZWNpc2lvbiBhbmQgcmFuZG9tIG51bWJlciByYW5nZSBpbgotICBlbWFpbC51dGlscy5tYWtlX21zZ2lkKCkgdG8gc3RyZW5ndGhlbiB0aGUgdW5pcXVlbmVzcyBvZiB0aGUgbWVzc2FnZSBJRC4KLQotLSBJc3N1ZSAjMjQwOTE6IEZpeGVkIHZhcmlvdXMgY3Jhc2hlcyBpbiBjb3JuZXIgY2FzZXMgaW4gQyBpbXBsZW1lbnRhdGlvbiBvZgotICBFbGVtZW50VHJlZS4KLQotLSBJc3N1ZSAjMjE5MzE6IG1zaWxpYi5GQ0lDcmVhdGUoKSBub3cgcmFpc2VzIFR5cGVFcnJvciBpbiB0aGUgY2FzZSBvZiBhIGJhZAotICBhcmd1bWVudCBpbnN0ZWFkIG9mIGEgVmFsdWVFcnJvciB3aXRoIGEgYm9ndXMgRkNJIGVycm9yIG51bWJlci4KLSAgUGF0Y2ggYnkgSmVmZnJleSBBcm1zdHJvbmcuCi0KLS0gSXNzdWUgIzIzNzk2OiBwZWVrIGFuZCByZWFkMSBtZXRob2RzIG9mIEJ1ZmZlcmVkUmVhZGVyIG5vdyByYWlzZSBWYWx1ZUVycm9yCi0gIGlmIHRoZXkgY2FsbGVkIG9uIGEgY2xvc2VkIG9iamVjdC4gUGF0Y2ggYnkgSm9obiBIZXJnZW5yb2VkZXIuCi0KLS0gSXNzdWUgIzI0NTIxOiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvd3MgaW4gdGhlIHBpY2tsZSBtb2R1bGUuCi0KLS0gSXNzdWUgIzIyOTMxOiBBbGxvdyAnWycgYW5kICddJyBpbiBjb29raWUgdmFsdWVzLgotCi0tIElzc3VlICMyMDI3NDogUmVtb3ZlIGlnbm9yZWQgYW5kIGVycm9uZW91cyAia3dhcmdzIiBwYXJhbWV0ZXJzIGZyb20gdGhyZWUKLSAgTUVUSF9WQVJBUkdTIG1ldGhvZHMgb24gX3NxbGl0ZS5Db25uZWN0aW9uLgotCi0tIElzc3VlICMyNDA5NDogRml4IHBvc3NpYmxlIGNyYXNoIGluIGpzb24uZW5jb2RlIHdpdGggcG9vcmx5IGJlaGF2ZWQgZGljdAotICBzdWJjbGFzc2VzLgotCi0tIEFzeW5jaW8gaXNzdWUgMjIyIC8gUFIgMjMxIChWaWN0b3IgU3Rpbm5lcikgLS0gZml4IEBjb3JvdXRpbmUKLSAgZnVuY3Rpb25zIHdpdGhvdXQgX19uYW1lX18uCi0KLS0gSXNzdWUgIzkyNDY6IE9uIFBPU0lYLCBvcy5nZXRjd2QoKSBub3cgc3VwcG9ydHMgcGF0aHMgbG9uZ2VyIHRoYW4gMTAyNSBieXRlcy4KLSAgUGF0Y2ggd3JpdHRlbiBieSBXaWxsaWFtIE9yci4KLQotLSBUaGUga2V5d29yZHMgYXR0cmlidXRlIG9mIGZ1bmN0b29scy5wYXJ0aWFsIGlzIG5vdyBhbHdheXMgYSBkaWN0aW9uYXJ5LgotCi0tIElzc3VlcyAjMjQwOTksICMyNDEwMCwgYW5kICMyNDEwMTogRml4IGZyZWUtYWZ0ZXItdXNlIGJ1ZyBpbiBoZWFwcSdzIHNpZnR1cAotICBhbmQgc2lmdGRvd24gZnVuY3Rpb25zLgotCi0tIEJhY2twb3J0IGNvbGxlY3Rpb25zLmRlcXVlIGZpeGVzIGZyb20gUHl0aG9uIDMuNS4gIFByZXZlbnRzIHJlZW50cmFudCBiYWRuZXNzCi0gIGR1cmluZyBkZWxldGlvbiBieSBkZWZlcnJpbmcgdGhlIGRlY3JlZiB1bnRpbCB0aGUgY29udGFpbmVyIGhhcyBiZWVuIHJlc3RvcmVkCi0gIHRvIGEgY29uc2lzdGVudCBzdGF0ZS4KLQotLSBJc3N1ZSAjMjMwMDg6IEZpeGVkIHJlc29sdmluZyBhdHRyaWJ1dGVzIHdpdGggYm9vbGVhbiB2YWx1ZSBpcyBGYWxzZSBpbiBweWRvYy4KLQotLSBGaXggYXN5bmNpbyBpc3N1ZSAyMzU6IExpZm9RdWV1ZSBhbmQgUHJpb3JpdHlRdWV1ZSdzIHB1dCBkaWRuJ3QKLSAgaW5jcmVtZW50IHVuZmluaXNoZWQgdGFza3MgKHRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIDMuNC4zIHdoZW4KLSAgSm9pbmFibGVRdWV1ZSB3YXMgbWVyZ2VkIHdpdGggUXVldWUpLgotCi0tIElzc3VlICMyMzkwODogb3MgZnVuY3Rpb25zIG5vdyByZWplY3QgcGF0aHMgd2l0aCBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcgotICBvbiBXaW5kb3dzIGluc3RlYWQgb2Ygc2lsZW50bHkgdHJ1bmNhdGUgdGhlbS4KLQotLSBJc3N1ZSAjMjM3Mjg6IGJpbmFzY2lpLmNyY19ocXgoKSBjb3VsZCByZXR1cm4gYW4gaW50ZWdlciBvdXRzaWRlIG9mIHRoZSByYW5nZQotICAwLTB4ZmZmZiBmb3IgZW1wdHkgZGF0YS4KLQotLSBJc3N1ZSAjMjM4MTE6IEFkZCBtaXNzaW5nIG5ld2xpbmUgdG8gdGhlIFB5Q29tcGlsZUVycm9yIGVycm9yIG1lc3NhZ2UuCi0gIFBhdGNoIGJ5IEFsZXggU2hrb3AuCi0KLS0gSXNzdWUgIzE3ODk4OiBGaXggZXhjZXB0aW9uIGluIGdldHRleHQucHkgd2hlbiBwYXJzaW5nIGNlcnRhaW4gcGx1cmFsIGZvcm1zLgotCi0tIElzc3VlICMyMjk4MjogSW1wcm92ZSBCT00gaGFuZGxpbmcgd2hlbiBzZWVraW5nIHRvIG11bHRpcGxlIHBvc2l0aW9ucyBvZgotICBhIHdyaXRhYmxlIHRleHQgZmlsZS4KLQotLSBJc3N1ZSAjMjM4NjU6IGNsb3NlKCkgbWV0aG9kcyBpbiBtdWx0aXBsZSBtb2R1bGVzIG5vdyBhcmUgaWRlbXBvdGVudCBhbmQgbW9yZQotICByb2J1c3QgYXQgc2h1dGRvd24uIElmIHRoZXkgbmVlZCB0byByZWxlYXNlIG11bHRpcGxlIHJlc291cmNlcywgYWxsIGFyZQotICByZWxlYXNlZCBldmVuIGlmIGVycm9ycyBvY2N1ci4KLQotLSBJc3N1ZSAjMjM4ODE6IHVybGxpYi5yZXF1ZXN0LmZ0cHdyYXBwZXIgY29uc3RydWN0b3Igbm93IGNsb3NlcyB0aGUgc29ja2V0IGlmCi0gIHRoZSBGVFAgY29ubmVjdGlvbiBmYWlsZWQgdG8gZml4IGEgUmVzb3VyY2VXYXJuaW5nLgotCi0tIElzc3VlICMyMzQwMDogUmFpc2Ugc2FtZSBleGNlcHRpb24gb24gYm90aCBQeXRob24gMiBhbmQgMyBpZiBzZW1fb3BlbiBpcyBub3QKLSAgYXZhaWxhYmxlLiAgUGF0Y2ggYnkgRGF2aW4gUG90dHMuCi0KLS0gSXNzdWUgIzE1MTMzOiBfdGtpbnRlci50a2FwcC5nZXRib29sZWFuKCkgbm93IHN1cHBvcnRzIFRjbF9PYmogYW5kIGFsd2F5cwotICByZXR1cm5zIGJvb2wuICB0a2ludGVyLkJvb2xlYW5WYXIgbm93IHZhbGlkYXRlcyBpbnB1dCB2YWx1ZXMgKGFjY2VwdGVkIGJvb2wsCi0gIGludCwgc3RyLCBhbmQgVGNsX09iaikuICB0a2ludGVyLkJvb2xlYW5WYXIuZ2V0KCkgbm93IGFsd2F5cyByZXR1cm5zIGJvb2wuCi0KLS0gSXNzdWUgIzIzMzM4OiBGaXhlZCBmb3JtYXR0aW5nIGN0eXBlcyBlcnJvciBtZXNzYWdlcyBvbiBDeWd3aW4uCi0gIFBhdGNoIGJ5IE1ha290byBLYXRvLgotCi0tIElzc3VlICMxNjg0MDogVGtpbnRlciBub3cgc3VwcG9ydHMgNjQtYml0IGludGVnZXJzIGFkZGVkIGluIFRjbCA4LjQgYW5kCi0gIGFyYml0cmFyeSBwcmVjaXNpb24gaW50ZWdlcnMgYWRkZWQgaW4gVGNsIDguNS4KLQotLSBJc3N1ZSAjMjM4MzQ6IEZpeCBzb2NrZXQuc2VuZHRvKCksIHVzZSB0aGUgQyBQeV9zc2l6ZV90IHR5cGUgdG8gc3RvcmUgdGhlCi0gIHJlc3VsdCBvZiBzZW5kdG8oKSBpbnN0ZWFkIG9mIHRoZSBDIGludCB0eXBlLgotCi0tIElzc3VlICMyMTUyNjogVGtpbnRlciBub3cgc3VwcG9ydHMgbmV3IGJvb2xlYW4gdHlwZSBpbiBUY2wgOC41LgotCi0tIElzc3VlICMyMzgzODogbGluZWNhY2hlIG5vdyBjbGVhcnMgdGhlIGNhY2hlIGFuZCByZXR1cm5zIGFuIGVtcHR5IHJlc3VsdCBvbgotICBNZW1vcnlFcnJvci4KLQotLSBJc3N1ZSAjMTg0NzM6IEZpeGVkIDJ0bzMgYW5kIDN0bzIgY29tcGF0aWJsZSBwaWNrbGUgbWFwcGluZ3MuICBGaXhlZAotICBhbWJpZ2lvdXMgcmV2ZXJzZSBtYXBwaW5ncy4gIEFkZGVkIG1hbnkgbmV3IG1hcHBpbmdzLiAgSW1wb3J0IG1hcHBpbmcgaXMgbm8KLSAgbG9uZ2VyIGFwcGxpZWQgdG8gbW9kdWxlcyBhbHJlYWR5IG1hcHBlZCB3aXRoIGZ1bGwgbmFtZSBtYXBwaW5nLgotCi0tIElzc3VlICMyMzc0NTogVGhlIG5ldyBlbWFpbCBoZWFkZXIgcGFyc2VyIG5vdyBoYW5kbGVzIGR1cGxpY2F0ZSBNSU1FCi0gIHBhcmFtZXRlciBuYW1lcyB3aXRob3V0IGVycm9yLCBzaW1pbGFyIHRvIGhvdyBnZXRfcGFyYW0gYmVoYXZlcy4KLQotLSBJc3N1ZSAjMjM3OTI6IElnbm9yZSBLZXlib2FyZEludGVycnVwdCB3aGVuIHRoZSBweWRvYyBwYWdlciBpcyBhY3RpdmUuCi0gIFRoaXMgbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgc3RhbmRhcmQgdW5peCBwYWdlcnMsIGFuZCBwcmV2ZW50cwotICBwaXBlcGFnZXIgZnJvbSBzaHV0dGluZyBkb3duIHdoaWxlIHRoZSBwYWdlciBpdHNlbGYgaXMgc3RpbGwgcnVubmluZy4KLQotLSBJc3N1ZSAjMjM3NDI6IG50cGF0aC5leHBhbmR2YXJzKCkgbm8gbG9uZ2VyIGxvc2VzIHVuYmFsYW5jZWQgc2luZ2xlIHF1b3Rlcy4KLQotLSBJc3N1ZSAjMjE4MDI6IFRoZSByZWFkZXIgaW4gQnVmZmVyZWRSV1BhaXIgbm93IGlzIGNsb3NlZCBldmVuIHdoZW4gY2xvc2luZwotICB3cml0ZXIgZmFpbGVkIGluIEJ1ZmZlcmVkUldQYWlyLmNsb3NlKCkuCi0KLS0gSXNzdWUgIzIzNjcxOiBzdHJpbmcuVGVtcGxhdGUgbm93IGFsbG93cyB0byBzcGVjaWZ5IHRoZSAic2VsZiIgcGFyYW1ldGVyIGFzCi0gIGtleXdvcmQgYXJndW1lbnQuICBzdHJpbmcuRm9ybWF0dGVyIG5vdyBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgInNlbGYiIGFuZAotICB0aGUgImZvcm1hdF9zdHJpbmciIHBhcmFtZXRlcnMgYXMga2V5d29yZCBhcmd1bWVudHMuCi0KLS0gSXNzdWUgIzIxNTYwOiBBbiBhdHRlbXB0IHRvIHdyaXRlIGEgZGF0YSBvZiB3cm9uZyB0eXBlIG5vIGxvbmdlciBjYXVzZQotICBHemlwRmlsZSBjb3JydXB0aW9uLiAgT3JpZ2luYWwgcGF0Y2ggYnkgV29sZmdhbmcgTWFpZXIuCi0KLS0gSXNzdWUgIzIzNjQ3OiBJbmNyZWFzZSBpbXBhbGliJ3MgTUFYTElORSB0byBhY2NvbW1vZGF0ZSBtb2Rlcm4gbWFpbGJveCBzaXplcy4KLQotLSBJc3N1ZSAjMjM1Mzk6IElmIGJvZHkgaXMgTm9uZSwgaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ucmVxdWVzdCBub3cgc2V0cwotICBDb250ZW50LUxlbmd0aCB0byAwIGZvciBQVVQsIFBPU1QsIGFuZCBQQVRDSCBoZWFkZXJzIHRvIGF2b2lkIDQxMSBlcnJvcnMgZnJvbQotICBzb21lIHdlYiBzZXJ2ZXJzLgotCi0tIElzc3VlICMyMjM1MTogVGhlIG5udHBsaWIuTk5UUCBjb25zdHJ1Y3RvciBubyBsb25nZXIgbGVhdmVzIHRoZSBjb25uZWN0aW9uCi0gIGFuZCBzb2NrZXQgb3BlbiB1bnRpbCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgY2xlYW5zIHRoZW0gdXAuICBQYXRjaCBieQotICBNYXJ0aW4gUGFudGVyLgotCi0tIElzc3VlICMyMzEzNjogX3N0cnB0aW1lIG5vdyB1bmlmb3JtbHkgaGFuZGxlcyBhbGwgZGF5cyBpbiB3ZWVrIDAsIGluY2x1ZGluZwotICBEZWMgMzAgb2YgcHJldmlvdXMgeWVhci4gIEJhc2VkIG9uIHBhdGNoIGJ5IEppbSBDYXJyb2xsLgotCi0tIElzc3VlICMyMzcwMDogSXRlcmF0b3Igb2YgTmFtZWRUZW1wb3JhcnlGaWxlIG5vdyBrZWVwcyBhIHJlZmVyZW5jZSB0bwotICBOYW1lZFRlbXBvcmFyeUZpbGUgaW5zdGFuY2UuICBQYXRjaCBieSBCb2h1c2xhdiBLYWJyZGEuCi0KLS0gSXNzdWUgIzIyOTAzOiBUaGUgZmFrZSB0ZXN0IGNhc2UgY3JlYXRlZCBieSB1bml0dGVzdC5sb2FkZXIgd2hlbiBpdCBmYWlscwotICBpbXBvcnRpbmcgYSB0ZXN0IG1vZHVsZSBpcyBub3cgcGlja2xhYmxlLgotCi0tIElzc3VlICMyMzU2ODogQWRkIHJkaXZtb2Qgc3VwcG9ydCB0byBNYWdpY01vY2soKSBvYmplY3RzLgotICBQYXRjaCBieSBIw6VrYW4gTMO2dmRhaGwuCi0KLS0gSXNzdWUgIzIzMTM4OiBGaXhlZCBwYXJzaW5nIGNvb2tpZXMgd2l0aCBhYnNlbnQga2V5cyBvciB2YWx1ZXMgaW4gY29va2llamFyLgotICBQYXRjaCBieSBEZW1pYW4gQnJlY2h0LgotCi0tIElzc3VlICMyMzA1MTogbXVsdGlwcm9jZXNzaW5nLlBvb2wgbWV0aG9kcyBpbWFwKCkgYW5kIGltYXBfdW5vcmRlcmVkKCkgbm93Ci0gIGhhbmRsZSBleGNlcHRpb25zIHJhaXNlZCBieSBhbiBpdGVyYXRvci4gIFBhdGNoIGJ5IEFsb24gRGlhbWFudCBhbmQgRGF2aW4KLSAgUG90dHMuCi0KLS0gSXNzdWUgIzIyOTI4OiBEaXNhYmxlZCBIVFRQIGhlYWRlciBpbmplY3Rpb25zIGluIGh0dHAuY2xpZW50LgotICBPcmlnaW5hbCBwYXRjaCBieSBEZW1pYW4gQnJlY2h0LgotCi0tIElzc3VlICMyMzYxNTogTW9kdWxlcyBiejIsIHRhcmZpbGUgYW5kIHRva2VuaXplIG5vdyBjYW4gYmUgcmVsb2FkZWQgd2l0aAotICBpbXAucmVsb2FkKCkuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KLQotLSBJc3N1ZSAjMjM0NzY6IEluIHRoZSBzc2wgbW9kdWxlLCBlbmFibGUgT3BlblNTTCdzIFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QKLSAgZmxhZyBvbiBjZXJ0aWZpY2F0ZSBzdG9yZXMgd2hlbiBpdCBpcyBhdmFpbGFibGUuCi0KLS0gSXNzdWUgIzIzNTc2OiBBdm9pZCBzdGFsbGluZyBpbiBTU0wgcmVhZHMgd2hlbiBFT0YgaGFzIGJlZW4gcmVhY2hlZCBpbiB0aGUKLSAgU1NMIGxheWVyIGJ1dCB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGhhc24ndCBiZWVuIGNsb3NlZC4KLQotLSBJc3N1ZSAjMjM1MDQ6IEFkZGVkIGFuIF9fYWxsX18gdG8gdGhlIHR5cGVzIG1vZHVsZS4KLQotLSBJc3N1ZSAjMjAyMDQ6IEFkZGVkIHRoZSBfX21vZHVsZV9fIGF0dHJpYnV0ZSB0byBfdGtpbnRlciBjbGFzc2VzLgotCi0tIElzc3VlICMyMzUyMTogQ29ycmVjdGVkIHB1cmUgcHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRpbWVkZWx0YSBkaXZpc2lvbi4KLQotICogRWxpbWluYXRlZCBPdmVyZmxvd0Vycm9yIGZyb20gdGltZWRlbHRhICogZmxvYXQgZm9yIHNvbWUgZmxvYXRzOwotICogQ29ycmVjdGVkIHJvdW5kaW5nIGluIHRpbWVkbHRhIHRydWUgZGl2aXNpb24uCi0KLS0gSXNzdWUgIzIxNjE5OiBQb3BlbiBvYmplY3RzIG5vIGxvbmdlciBsZWF2ZSBhIHpvbWJpZSBhZnRlciBleGl0IGluIHRoZSB3aXRoCi0gIHN0YXRlbWVudCBpZiB0aGUgcGlwZSB3YXMgYnJva2VuLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KLQotLSBJc3N1ZSAjNjYzOTogTW9kdWxlLWxldmVsIHR1cnRsZSBmdW5jdGlvbnMgbm8gbG9uZ2VyIHJhaXNlIFRjbEVycm9yIGFmdGVyCi0gIGNsb3NpbmcgdGhlIHdpbmRvdy4KLQotLSBJc3N1ZXMgIzgxNDI1MywgIzkxNzk6IFdhcm5pbmdzIG5vdyBhcmUgcmFpc2VkIHdoZW4gZ3JvdXAgcmVmZXJlbmNlcyBhbmQKLSAgY29uZGl0aW9uYWwgZ3JvdXAgcmVmZXJlbmNlcyBhcmUgdXNlZCBpbiBsb29rYmVoaW5kIGFzc2VydGlvbnMgaW4gcmVndWxhcgotICBleHByZXNzaW9ucy4KLQotLSBJc3N1ZSAjMjMyMTU6IE11bHRpYnl0ZSBjb2RlY3Mgd2l0aCBjdXN0b20gZXJyb3IgaGFuZGxlcnMgdGhhdCBpZ25vcmVzIGVycm9ycwotICBjb25zdW1lZCB0b28gbXVjaCBtZW1vcnkgYW5kIHJhaXNlZCBTeXN0ZW1FcnJvciBvciBNZW1vcnlFcnJvci4KLSAgT3JpZ2luYWwgcGF0Y2ggYnkgQWxla3NpIFRvcmhhbW8uCi0KLS0gSXNzdWUgIzU3MDA6IGlvLkZpbGVJTygpIGNhbGxlZCBmbHVzaCgpIGFmdGVyIGNsb3NpbmcgdGhlIGZpbGUuCi0gIGZsdXNoKCkgd2FzIG5vdCBjYWxsZWQgaW4gY2xvc2UoKSBpZiBjbG9zZWZkPUZhbHNlLgotCi0tIElzc3VlICMyMzM3NDogRml4ZWQgcHlkb2MgZmFpbHVyZSB3aXRoIG5vbi1BU0NJSSBmaWxlcyB3aGVuIHN0ZG91dCBlbmNvZGluZwotICBkaWZmZXJzIGZyb20gZmlsZSBzeXN0ZW0gZW5jb2RpbmcgKGUuZy4gb24gTWFjIE9TKS4KLQotLSBJc3N1ZSAjMjM0ODE6IFJlbW92ZSBSQzQgZnJvbSB0aGUgU1NMIG1vZHVsZSdzIGRlZmF1bHQgY2lwaGVyIGxpc3QuCi0KLS0gSXNzdWUgIzIxNTQ4OiBGaXggcHlkb2Muc3lub3BzaXMoKSBhbmQgcHlkb2MuYXByb3BvcygpIG9uIG1vZHVsZXMgd2l0aCBlbXB0eQotICBkb2NzdHJpbmdzLgotCi0tIElzc3VlICMyMjg4NTogRml4ZWQgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGRibS5kdW1iCi0gIG1vZHVsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KLQotLSBJc3N1ZSAjMjMxNDY6IEZpeCBtaXNoYW5kbGluZyBvZiBhYnNvbHV0ZSBXaW5kb3dzIHBhdGhzIHdpdGggZm9yd2FyZAotICBzbGFzaGVzIGluIHBhdGhsaWIuCi0KLS0gSXNzdWUgIzIzNDIxOiBGaXhlZCBjb21wcmVzc2lvbiBpbiB0YXJmaWxlIENMSS4gIFBhdGNoIGJ5IHdkdjQ3NThoLgotCi0tIElzc3VlICMyMzM2NzogRml4IHBvc3NpYmxlIG92ZXJmbG93cyBpbiB0aGUgdW5pY29kZWRhdGEgbW9kdWxlLgotCi0tIElzc3VlICMyMzM2MTogRml4IHBvc3NpYmxlIG92ZXJmbG93IGluIFdpbmRvd3Mgc3VicHJvY2VzcyBjcmVhdGlvbiBjb2RlLgotCi0tIElzc3VlICMyMzgwMTogRml4IGlzc3VlIHdoZXJlIGNnaS5GaWVsZFN0b3JhZ2UgZGlkIG5vdCBhbHdheXMgaWdub3JlIHRoZQotICBlbnRpcmUgcHJlYW1ibGUgdG8gYSBtdWx0aXBhcnQgYm9keS4KLQotLSBJc3N1ZSAjMjMzMTA6IEZpeCBNYWdpY01vY2sncyBpbml0aWFsaXplciB0byB3b3JrIHdpdGggX19tZXRob2RzX18sIGp1c3QKLSAgbGlrZSBjb25maWd1cmVfbW9jaygpLiAgUGF0Y2ggYnkgS2FzaWEgSmFjaGltLgotCi0tIGFzeW5jaW86IE5ldyBldmVudCBsb29wIEFQSXM6IHNldF90YXNrX2ZhY3RvcnkoKSBhbmQgZ2V0X3Rhc2tfZmFjdG9yeSgpLgotCi0tIGFzeW5jaW86IGFzeW5jKCkgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgZW5zdXJlX2Z1dHVyZSgpLgotCi0tIElzc3VlICMyMzg5ODogRml4IGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoKSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMKLSAgd2l0aCBvdmVybG9hZGVkIF9fZXFfXyBhbmQgX19ib29sX18uICBQYXRjaCBieSBNaWtlIEJheWVyLgotCi0tIElzc3VlICMyNDI5ODogRml4IGluc3BlY3Quc2lnbmF0dXJlKCkgdG8gY29ycmVjdGx5IHVud3JhcCB3cmFwcGVycwotICBhcm91bmQgYm91bmQgbWV0aG9kcy4KKy0gSXNzdWUgIzIwMzYyOiBIb25vdXIgVGVzdENhc2UubG9uZ01lc3NhZ2UgY29ycmVjdGx5IGluIGFzc2VydFJlZ2V4LgorICBQYXRjaCBmcm9tIElsaWEgS3VyZW5rb3YuCiAKIC0gSXNzdWUgIzIzNTcyOiBGaXhlZCBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2ggb24gY2xhc3NlcyB3aXRoIGZhbHN5CiAgIG1ldGFjbGFzc2VzLiAgUGF0Y2ggYnkgRXRoYW4gRnVybWFuLgogCistIGFzeW5jaW86IGVuc3VyZV9mdXR1cmUoKSBub3cgYWNjZXB0cyBhd2FpdGFibGUgb2JqZWN0cy4KKwogSURMRQogLS0tLQogCi0tIElzc3VlIDE1MzQ4OiBTdG9wIHRoZSBkZWJ1Z2dlciBlbmdpbmUgKG5vcm1hbGx5IGluIGEgdXNlciBwcm9jZXNzKQorLSBJc3N1ZSAjMTUzNDg6IFN0b3AgdGhlIGRlYnVnZ2VyIGVuZ2luZSAobm9ybWFsbHkgaW4gYSB1c2VyIHByb2Nlc3MpCiAgIGJlZm9yZSBjbG9zaW5nIHRoZSBkZWJ1Z2dlciB3aW5kb3cgKHJ1bm5pbmcgaW4gdGhlIElETEUgcHJvY2VzcykuCiAgIFRoaXMgcHJldmVudHMgdGhlIFJ1bnRpbWVFcnJvcnMgdGhhdCB3ZXJlIGJlaW5nIGNhdWdodCBhbmQgaWdub3JlZC4KIApAQCAtNzE5LDcgKzEyNTUsNyBAQAogICBDb25zaXN0ZW50bHkgdXNlIHRoZSByZXZpc2VkIGlkbGVDb25mLkN1cnJlbnRUaGVtZSBldmVyeXdoZXJlIGluIGlkbGVsaWIuCiAKIC0gSXNzdWUgIzI0NzgyOiBFeHRlbnNpb24gY29uZmlndXJhdGlvbiBpcyBub3cgYSB0YWIgaW4gdGhlIElETEUgUHJlZmVyZW5jZXMKLSAgZGlhbG9nIHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgZGlhbG9nLiAgIFRoZSBmb3JtZXIgdGFicyBhcmUgbm93IGEgc29ydGVkCisgIGRpYWxvZyByYXRoZXIgdGhhbiBhIHNlcGFyYXRlIGRpYWxvZy4gIFRoZSBmb3JtZXIgdGFicyBhcmUgbm93IGEgc29ydGVkCiAgIGxpc3QuICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCiAKIC0gSXNzdWUgIzIyNzI2OiBSZS1hY3RpdmF0ZSB0aGUgY29uZmlnIGRpYWxvZyBoZWxwIGJ1dHRvbiB3aXRoIHNvbWUgY29udGVudApAQCAtNzg5LDYzICsxMzI1LDEyIEBACiAKIC0gSXNzdWUgIzI0NzkwOiBSZW1vdmUgZXh0cmFuZW91cyBjb2RlICh3aGljaCBhbHNvIGNyZWF0ZSAyICYgMyBjb25mbGljdHMpLgogCi0tIElzc3VlICMyMzY3MjogQWxsb3cgSWRsZSB0byBlZGl0IGFuZCBydW4gZmlsZXMgd2l0aCBhc3RyYWwgY2hhcnMgaW4gbmFtZS4KLSAgUGF0Y2ggYnkgTW9oZCBTYW5hZCBaYWtpIFJpenZpLgotCi0tIElzc3VlIDI0NzQ1OiBJZGxlIGVkaXRvciBkZWZhdWx0IGZvbnQuIFN3aXRjaCBmcm9tIENvdXJpZXIgdG8KLSAgcGxhdGZvcm0tc2Vuc2l0aXZlIFRrRml4ZWRGb250LiAgVGhpcyBzaG91bGQgbm90IGFmZmVjdCBjdXJyZW50IGN1c3RvbWl6ZWQKLSAgZm9udCBzZWxlY3Rpb25zLiAgSWYgdGhlcmUgaXMgYSBwcm9ibGVtLCBlZGl0ICRIT01FLy5pZGxlcmMvY29uZmlnLW1haW4uY2ZnCi0gIGFuZCByZW1vdmUgJ2ZvbnR4eHgnIGVudHJpZXMgZnJvbSBbRWRpdG9yIFdpbmRvd10uICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCi0KLS0gSXNzdWUgIzIxMTkyOiBJZGxlIGVkaXRvci4gV2hlbiBhIGZpbGUgaXMgcnVuLCBwdXQgaXRzIG5hbWUgaW4gdGhlIHJlc3RhcnQgYmFyLgotICBEbyBub3QgcHJpbnQgZmFsc2UgcHJvbXB0cy4gT3JpZ2luYWwgcGF0Y2ggYnkgQWRuYW4gVW1lci4KLQotLSBJc3N1ZSAjMTM4ODQ6IElkbGUgbWVudXMuIFJlbW92ZSB0ZWFyb2ZmIGxpbmVzLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KLQotLSBJc3N1ZSAjMjMxODQ6IHJlbW92ZSB1bnVzZWQgbmFtZXMgYW5kIGltcG9ydHMgaW4gaWRsZWxpYi4KLSAgSW5pdGlhbCBwYXRjaCBieSBBbCBTd2VpZ2FydC4KLQotVGVzdHMKLS0tLS0tCi0KLS0gSXNzdWUgIzI1NjE2OiBUZXN0cyBmb3IgT3JkZXJlZERpY3QgYXJlIGV4dHJhY3RlZCBmcm9tIHRlc3RfY29sbGVjdGlvbnMKLSAgaW50byBzZXBhcmF0ZSBmaWxlIHRlc3Rfb3JkZXJlZF9kaWN0LgotCi0tIElzc3VlICMyNTA5OTogTWFrZSB0ZXN0X2NvbXBpbGVhbGwgbm90IGZhaWwgd2hlbiBhbiBlbnRyeSBvbiBzeXMucGF0aCBjYW5ub3QKLSAgYmUgd3JpdHRlbiB0byAoY29tbW9ubHkgc2VlbiBpbiBhZG1pbmlzdHJhdGl2ZSBpbnN0YWxscyBvbiBXaW5kb3dzKS4KLQotLSBJc3N1ZSAjMjQ3NTE6IFdoZW4gcnVubmluZyByZWdydGVzdCB3aXRoIHRoZSBgYC13YGAgY29tbWFuZCBsaW5lIG9wdGlvbiwKLSAgYSB0ZXN0IHJ1biBpcyBubyBsb25nZXIgbWFya2VkIGFzIGEgZmFpbHVyZSBpZiBhbGwgdGVzdHMgc3VjY2VlZCB3aGVuCi0gIHJlLXJ1bi4KLQotLSBJc3N1ZSAjMjE1MjA6IHRlc3RfemlwZmlsZSBubyBsb25nZXIgZmFpbHMgaWYgdGhlIHdvcmQgJ2JhZCcgYXBwZWFycwotICBhbnl3aGVyZSBpbiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi0KLS0gSXNzdWUgIzIzNzk5OiBBZGRlZCB0ZXN0LnN1cHBvcnQuc3RhcnRfdGhyZWFkcygpIGZvciBydW5uaW5nIGFuZAotICBjbGVhbmluZyB1cCBtdWx0aXBsZSB0aHJlYWRzLgotCi0tIElzc3VlICMyMjM5MDogdGVzdC5yZWdydGVzdCBub3cgZW1pdHMgYSB3YXJuaW5nIGlmIHRlbXBvcmFyeSBmaWxlcyBvcgotICBkaXJlY3RvcmllcyBhcmUgbGVmdCBhZnRlciBydW5uaW5nIGEgdGVzdC4KLQotLSBJc3N1ZSAjMjM1ODM6IEFkZGVkIHRlc3RzIGZvciBzdGFuZGFyZCBJTyBzdHJlYW1zIGluIElETEUuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMyMzQ0NTogcHlkZWJ1ZyBidWlsZHMgbm93IHVzZSAiZ2NjIC1PZyIgd2hlcmUgcG9zc2libGUsIHRvIG1ha2UKLSAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGZhc3Rlci4KLQotLSBJc3N1ZSAjMjQ2MDM6IFVwZGF0ZSBXaW5kb3dzIGJ1aWxkcyB0byB1c2UgT3BlblNTTDEuMC4yZAotICBhbmQgT1MgWCAxMC41IGluc3RhbGxlciB0byB1c2UgT3BlblNTTCAxLjAuMmUuCi0KLUMgQVBJCi0tLS0tLQotCi0tIElzc3VlICMyMzk5ODogUHlJbXBvcnRfUmVJbml0TG9jaygpIG5vdyBjaGVja3MgZm9yIGxvY2sgYWxsb2NhdGlvbiBlcnJvcgotCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzIyNTU4OiBBZGQgcmVtYWluaW5nIGRvYyBsaW5rcyB0byBzb3VyY2UgY29kZSBmb3IgUHl0aG9uLWNvZGVkIG1vZHVsZXMuCisgIFBhdGNoIGJ5IFlvbmkgTGF2aS4KKwogLSBJc3N1ZSAjMTIwNjc6IFJld3JpdGUgQ29tcGFyaXNvbnMgc2VjdGlvbiBpbiB0aGUgRXhwcmVzc2lvbnMgY2hhcHRlciBvZiB0aGUKICAgbGFuZ3VhZ2UgcmVmZXJlbmNlLiBTb21lIG9mIHRoZSBkZXRhaWxzIG9mIGNvbXBhcmluZyBtaXhlZCB0eXBlcyB3ZXJlCiAgIGluY29ycmVjdCBvciBhbWJpZ3VvdXMuIE5vdEltcGxlbWVudGVkIGlzIG9ubHkgcmVsZXZhbnQgYXQgYSBsb3dlciBsZXZlbApAQCAtODU2LDEyICsxMzQxLDI0NiBAQAogLSBJc3N1ZSAjMjQ5NTI6IENsYXJpZnkgdGhlIGRlZmF1bHQgc2l6ZSBhcmd1bWVudCBvZiBzdGFja19zaXplKCkgaW4KICAgdGhlICJ0aHJlYWRpbmciIGFuZCAiX3RocmVhZCIgbW9kdWxlcy4gUGF0Y2ggZnJvbSBNYXR0aXAuCiAKLS0gSXNzdWUgIzI0ODA4OiBVcGRhdGUgdGhlIHR5cGVzIG9mIHNvbWUgUHlUeXBlT2JqZWN0IGZpZWxkcy4gUGF0Y2ggYnkKKy0gSXNzdWUgIzIzNzI1OiBPdmVyaGF1bCB0ZW1wZmlsZSBkb2NzLiBOb3RlIGRlcHJlY2F0ZWQgc3RhdHVzIG9mIG1rdGVtcC4KKyAgUGF0Y2ggZnJvbSBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrLgorCistIElzc3VlICMyNDgwODogVXBkYXRlIHRoZSB0eXBlcyBvZiBzb21lIFB5VHlwZU9iamVjdCBmaWVsZHMuICBQYXRjaCBieQogICBKb3NlcGggV2VzdG9uLgogCiAtIElzc3VlICMyMjgxMjogRml4IHVuaXR0ZXN0IGRpc2NvdmVyeSBleGFtcGxlcy4KICAgUGF0Y2ggZnJvbSBQYW0gTWNBJ051bHR5LgogCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjU0NDk6IEFkZGVkIHRlc3RzIGZvciBPcmRlcmVkRGljdCBzdWJjbGFzc2VzLgorCistIElzc3VlICMyNTA5OTogTWFrZSB0ZXN0X2NvbXBpbGVhbGwgbm90IGZhaWwgd2hlbiBhbiBlbnRyeSBvbiBzeXMucGF0aCBjYW5ub3QKKyAgYmUgd3JpdHRlbiB0byAoY29tbW9ubHkgc2VlbiBpbiBhZG1pbmlzdHJhdGl2ZSBpbnN0YWxscyBvbiBXaW5kb3dzKS4KKworLSBJc3N1ZSAjMjM5MTk6IFByZXZlbnRzIGFzc2VydCBkaWFsb2dzIGFwcGVhcmluZyBpbiB0aGUgdGVzdCBzdWl0ZS4KKworLSBgYFBDYnVpbGRccnQuYmF0YGAgbm93IGFjY2VwdHMgYW4gdW5saW1pdGVkIG51bWJlciBvZiBhcmd1bWVudHMgdG8gcGFzcyBhbG9uZworICB0byByZWdydGVzdC5weS4gIFByZXZpb3VzbHkgdGhlcmUgd2FzIGEgbGltaXQgb2YgOS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzI0OTE1OiBBZGQgTExWTSBzdXBwb3J0IGZvciBQR08gYnVpbGRzIGFuZCB1c2UgdGhlIHRlc3Qgc3VpdGUgdG8KKyAgZ2VuZXJhdGUgdGhlIHByb2ZpbGUgZGF0YS4gSW5pdGlhbCBwYXRjaCBieSBBbGVjc2FuZHJ1IFBhdHJhc2N1IG9mIEludGVsLgorCistIElzc3VlICMyNDkxMDogV2luZG93cyBNU0lzIG5vdyBoYXZlIHVuaXF1ZSBkaXNwbGF5IG5hbWVzLgorCistIElzc3VlICMyNDk4NjogSXQgaXMgbm93IHBvc3NpYmxlIHRvIGJ1aWxkIFB5dGhvbiBvbiBXaW5kb3dzIHdpdGhvdXQgZXJyb3JzCisgIHdoZW4gZXh0ZXJuYWwgbGlicmFyaWVzIGFyZSBub3QgYXZhaWxhYmxlLgorCitXaW5kb3dzCistLS0tLS0tCisKKy0gSXNzdWUgIzI1NDUwOiBVcGRhdGVzIHNob3J0Y3V0cyB0byBzdGFydCBQeXRob24gaW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMjUxNjQ6IENoYW5nZXMgZGVmYXVsdCBhbGwtdXNlcnMgaW5zdGFsbCBkaXJlY3RvcnkgdG8gbWF0Y2ggcGVyLXVzZXIKKyAgZGlyZWN0b3J5LgorCistIElzc3VlICMyNTE0MzogSW1wcm92ZXMgaW5zdGFsbGVyIGVycm9yIG1lc3NhZ2VzIGZvciB1bnN1cHBvcnRlZCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzI1MTYzOiBEaXNwbGF5IGNvcnJlY3QgZGlyZWN0b3J5IGluIGluc3RhbGxlciB3aGVuIHVzaW5nIG5vbi1kZWZhdWx0CisgIHNldHRpbmdzLgorCistIElzc3VlICMyNTM2MTogRGlzYWJsZXMgdXNlIG9mIFNTRTIgaW5zdHJ1Y3Rpb25zIGluIFdpbmRvd3MgMzItYml0IGJ1aWxkCisKKy0gSXNzdWUgIzI1MDg5OiBBZGRzIGxvZ2dpbmcgdG8gaW5zdGFsbGVyIGZvciBjYXNlIHdoZXJlIGxhdW5jaGVyIGlzIG5vdAorICBzZWxlY3RlZCBvbiB1cGdyYWRlLgorCistIElzc3VlICMyNTE2NTogV2luZG93cyB1bmluc3RhbGxhdGlvbiBzaG91bGQgbm90IHJlbW92ZSBsYXVuY2hlciBpZiBvdGhlcgorICB2ZXJzaW9ucyByZW1haW4KKworLSBJc3N1ZSAjMjUxMTI6IHB5LmV4ZSBsYXVuY2hlciBpcyBtaXNzaW5nIGljb25zCisKKy0gSXNzdWUgIzI1MTAyOiBXaW5kb3dzIGluc3RhbGxlciBkb2VzIG5vdCBwcmVjb21waWxlIGZvciAtTyBvciAtT08uCisKKy0gSXNzdWUgIzI1MDgxOiBNYWtlcyBCYWNrIGJ1dHRvbiBpbiBpbnN0YWxsZXIgZ28gYmFjayB0byB1cGdyYWRlIHBhZ2Ugd2hlbgorICB1cGdyYWRpbmcuCisKKy0gSXNzdWUgIzI1MDkxOiBJbmNyZWFzZXMgZm9udCBzaXplIG9mIHRoZSBpbnN0YWxsZXIuCisKKy0gSXNzdWUgIzI1MTI2OiBDbGFyaWZpZXMgdGhhdCB0aGUgbm9uLXdlYiBpbnN0YWxsZXIgd2lsbCBkb3dubG9hZCBzb21lCisgIGNvbXBvbmVudHMuCisKKy0gSXNzdWUgIzI1MjEzOiBSZXN0b3JlcyByZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbCB0byBtYW5pZmVzdCB0byBkaXNhYmxlCisgIFVBQyB2aXJ0dWFsaXphdGlvbi4KKworLSBJc3N1ZSAjMjUwMjI6IFJlbW92ZWQgdmVyeSBvdXRkYXRlZCBQQy9leGFtcGxlX250LyBkaXJlY3RvcnkuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMyNTQ0MDogRml4IG91dHB1dCBvZiBweXRob24tY29uZmlnIC0tZXh0ZW5zaW9uLXN1ZmZpeC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjUuMCBmaW5hbD8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTUtMDktMTMKKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzI1MDcxOiBXaW5kb3dzIGluc3RhbGxlciBzaG91bGQgbm90IHJlcXVpcmUgVGFyZ2V0RGlyCisgIHBhcmFtZXRlciB3aGVuIGluc3RhbGxpbmcgcXVpZXRseS4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjUuMCByZWxlYXNlIGNhbmRpZGF0ZSA0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE1LTA5LTA5CisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjUwMjk6IEZpeGVzIE1lbW9yeUVycm9yIGluIHRlc3Rfc3RycHRpbWUuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMyNTAyNzogUmV2ZXJ0cyBwYXJ0aWFsLXN0YXRpYyBidWlsZCBvcHRpb25zIGFuZCBhZGRzCisgIHZjcnVudGltZTE0MC5kbGwgdG8gV2luZG93cyBpbnN0YWxsYXRpb24uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy41LjAgcmVsZWFzZSBjYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNS0wOS0wNworCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjQzMDU6IFByZXZlbnQgaW1wb3J0IHN1YnN5c3RlbSBzdGFjayBmcmFtZXMgZnJvbSBiZWluZyBjb3VudGVkCisgIGJ5IHRoZSB3YXJuaW5ncy53YXJuKHN0YWNrbGV2ZWw9KSBwYXJhbWV0ZXIuCisKKy0gSXNzdWUgIzI0OTEyOiBQcmV2ZW50IF9fY2xhc3NfXyBhc3NpZ25tZW50IHRvIGltbXV0YWJsZSBidWlsdC1pbiBvYmplY3RzLgorCistIElzc3VlICMyNDk3NTogRml4IEFTVCBjb21waWxhdGlvbiBmb3IgUEVQIDQ0OCBzeW50YXguCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjQ5MTc6IHRpbWVfc3RyZnRpbWUoKSBidWZmZXIgb3Zlci1yZWFkLgorCistIElzc3VlICMyNDc0ODogVG8gcmVzb2x2ZSBhIGNvbXBhdGliaWxpdHkgcHJvYmxlbSBmb3VuZCB3aXRoIHB5MmV4ZSBhbmQKKyAgcHl3aW4zMiwgaW1wLmxvYWRfZHluYW1pYygpIG9uY2UgYWdhaW4gaWdub3JlcyBwcmV2aW91c2x5IGxvYWRlZCBtb2R1bGVzCisgIHRvIHN1cHBvcnQgUHl0aG9uIG1vZHVsZXMgcmVwbGFjaW5nIHRoZW1zZWx2ZXMgd2l0aCBleHRlbnNpb24gbW9kdWxlcy4KKyAgUGF0Y2ggYnkgUGV0ciBWaWt0b3Jpbi4KKworLSBJc3N1ZSAjMjQ2MzU6IEZpeGVkIGEgYnVnIGluIHR5cGluZy5weSB3aGVyZSBpc2luc3RhbmNlKFtdLCB0eXBpbmcuSXRlcmFibGUpCisgIHdvdWxkIHJldHVybiBUcnVlIG9uY2UsIHRoZW4gRmFsc2Ugb24gc3Vic2VxdWVudCBjYWxscy4KKworLSBJc3N1ZSAjMjQ5ODk6IEZpeGVkIGJ1ZmZlciBvdmVycmVhZCBpbiBCeXRlc0lPLnJlYWRsaW5lKCkgaWYgYSBwb3NpdGlvbiBpcworICBzZXQgYmV5b25kIHNpemUuICBCYXNlZCBvbiBwYXRjaCBieSBKb2huIExlaXRjaC4KKworLSBJc3N1ZSAjMjQ5MTM6IEZpeCBvdmVycnVuIGVycm9yIGluIGRlcXVlLmluZGV4KCkuCisgIEZvdW5kIGJ5IEpvaG4gTGVpdGNoIGFuZCBCcnljZSBEYXJsaW5nLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNS4wIHJlbGVhc2UgY2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTUtMDgtMjUKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzI0NzY5OiBJbnRlcnByZXRlciBub3cgc3RhcnRzIHByb3Blcmx5IHdoZW4gZHluYW1pYyBsb2FkaW5nCisgIGlzIGRpc2FibGVkLiAgUGF0Y2ggYnkgUGV0ciBWaWt0b3Jpbi4KKworLSBJc3N1ZSAjMjExNjc6IE5BTiBvcGVyYXRpb25zIGFyZSBub3cgaGFuZGxlZCBjb3JyZWN0bHkgd2hlbiBweXRob24gaXMKKyAgY29tcGlsZWQgd2l0aCBJQ0MgZXZlbiBpZiAtZnAtbW9kZWwgc3RyaWN0IGlzIG5vdCBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzI0NDkyOiBBICJwYWNrYWdlIiBsYWNraW5nIGEgX19uYW1lX18gYXR0cmlidXRlIHdoZW4gdHJ5aW5nIHRvIHBlcmZvcm0KKyAgYSBgYGZyb20gLi4gaW1wb3J0IC4uLmBgIHN0YXRlbWVudCB3aWxsIHRyaWdnZXIgYW4gSW1wb3J0RXJyb3IgaW5zdGVhZCBvZiBhbgorICBBdHRyaWJ1dGVFcnJvci4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMyNDg0NzogUmVtb3ZlcyB2Y3J1bnRpbWUxNDAuZGxsIGRlcGVuZGVuY3kgZnJvbSBUY2wvVGsuCisKKy0gSXNzdWUgIzI0ODM5OiBwbGF0Zm9ybS5fc3lzY21kX3ZlciByYWlzZXMgRGVwcmVjYXRpb25XYXJuaW5nCisKKy0gSXNzdWUgIzI0ODY3OiBGaXggVGFzay5nZXRfc3RhY2soKSBmb3IgJ2FzeW5jIGRlZicgY29yb3V0aW5lcworCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNS4wIHJlbGVhc2UgY2FuZGlkYXRlIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTUtMDgtMDkKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzI0NjY3OiBSZXNpemUgb2RpY3QgaW4gYWxsIGNhc2VzIHRoYXQgdGhlIHVuZGVybHlpbmcgZGljdCByZXNpemVzLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzI0ODI0OiBTaWduYXR1cmVzIG9mIGNvZGVjcy5lbmNvZGUoKSBhbmQgY29kZWNzLmRlY29kZSgpIG5vdyBhcmUKKyAgY29tcGF0aWJsZSB3aXRoIHB5ZG9jLgorCistIElzc3VlICMyNDYzNDogSW1wb3J0aW5nIHV1aWQgc2hvdWxkIG5vdCB0cnkgdG8gbG9hZCBsaWJjIG9uIFdpbmRvd3MKKworLSBJc3N1ZSAjMjQ3OTg6IF9tc3ZjY29tcGlsZXIucHkgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IG1hbmlmZXN0cworCistIElzc3VlICM0Mzk1OiBCZXR0ZXIgdGVzdGluZyBhbmQgZG9jdW1lbnRhdGlvbiBvZiBiaW5hcnkgb3BlcmF0b3JzLgorICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMzk3MzogVXBkYXRlIHR5cGluZy5weSBmcm9tIEdpdEh1YiByZXBvLgorCistIElzc3VlICMyMzAwNDogbW9ja19vcGVuKCkgbm93IHJlYWRzIGJpbmFyeSBkYXRhIGNvcnJlY3RseSB3aGVuIHRoZSB0eXBlIG9mCisgIHJlYWRfZGF0YSBpcyBieXRlcy4gIEluaXRpYWwgcGF0Y2ggYnkgQWFyb24gSGlsbC4KKworLSBJc3N1ZSAjMjM4ODg6IEhhbmRsZSBmcmFjdGlvbmFsIHRpbWUgaW4gY29va2llIGV4cGlyeS4gUGF0Y2ggYnkgc3NoLgorCistIElzc3VlICMyMzY1MjogTWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIHRoZSBzZWxlY3QgbW9kdWxlIGFnYWluc3QgdGhlCisgIGxpYmMgaGVhZGVycyBmcm9tIHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlLCB3aGljaCBkbyBub3QgaW5jbHVkZSBzb21lCisgIEVQT0xMIG1hY3Jvcy4gIFBhdGNoIGJ5IE1hdHQgRnJhbmsuCisKKy0gSXNzdWUgIzIyOTMyOiBGaXggdGltZXpvbmVzIGluIGVtYWlsLnV0aWxzLmZvcm1hdGRhdGUuCisgIFBhdGNoIGZyb20gRG1pdHJ5IFNoYWNobmV2LgorCistIElzc3VlICMyMzc3OTogaW1hcGxpYiByYWlzZXMgVHlwZUVycm9yIGlmIGF1dGhlbnRpY2F0b3IgdHJpZXMgdG8gYWJvcnQuCisgIFBhdGNoIGZyb20gQ3JhaWcgSG9sbXF1aXN0LgorCistIElzc3VlICMyMzMxOTogRml4IGN0eXBlcy5CaWdFbmRpYW5TdHJ1Y3R1cmUsIHN3YXAgY29ycmVjdGx5IGJ5dGVzLiBQYXRjaAorICB3cml0dGVuIGJ5IE1hdHRoaWV1IEdhdXRpZXIuCisKKy0gSXNzdWUgIzIzMjU0OiBEb2N1bWVudCBob3cgdG8gY2xvc2UgdGhlIFRDUFNlcnZlciBsaXN0ZW5pbmcgc29ja2V0LgorICBQYXRjaCBmcm9tIE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzE5NDUwOiBVcGRhdGUgV2luZG93cyBhbmQgT1MgWCBpbnN0YWxsZXIgYnVpbGRzIHRvIHVzZSBTUUxpdGUgMy44LjExLgorCistIElzc3VlICMxNzUyNzogQWRkIFBBVENIIHRvIHdzZ2lyZWYudmFsaWRhdG9yLiBQYXRjaCBmcm9tIEx1Y2EgU2JhcmRlbGxhLgorCistIElzc3VlICMyNDc5MTogRml4IGdyYW1tYXIgcmVncmVzc2lvbiBmb3IgY2FsbCBzeW50YXg6ICdnKFwqYSBvciBiKScuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMjM2NzI6IEFsbG93IElkbGUgdG8gZWRpdCBhbmQgcnVuIGZpbGVzIHdpdGggYXN0cmFsIGNoYXJzIGluIG5hbWUuCisgIFBhdGNoIGJ5IE1vaGQgU2FuYWQgWmFraSBSaXp2aS4KKworLSBJc3N1ZSAjMjQ3NDU6IElkbGUgZWRpdG9yIGRlZmF1bHQgZm9udC4gU3dpdGNoIGZyb20gQ291cmllciB0bworICBwbGF0Zm9ybS1zZW5zaXRpdmUgVGtGaXhlZEZvbnQuICBUaGlzIHNob3VsZCBub3QgYWZmZWN0IGN1cnJlbnQgY3VzdG9taXplZAorICBmb250IHNlbGVjdGlvbnMuICBJZiB0aGVyZSBpcyBhIHByb2JsZW0sIGVkaXQgJEhPTUUvLmlkbGVyYy9jb25maWctbWFpbi5jZmcKKyAgYW5kIHJlbW92ZSAnZm9udHh4eCcgZW50cmllcyBmcm9tIFtFZGl0b3IgV2luZG93XS4gIFBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjExOTI6IElkbGUgZWRpdG9yLiBXaGVuIGEgZmlsZSBpcyBydW4sIHB1dCBpdHMgbmFtZSBpbiB0aGUgcmVzdGFydCBiYXIuCisgIERvIG5vdCBwcmludCBmYWxzZSBwcm9tcHRzLiBPcmlnaW5hbCBwYXRjaCBieSBBZG5hbiBVbWVyLgorCistIElzc3VlICMxMzg4NDogSWRsZSBtZW51cy4gUmVtb3ZlIHRlYXJvZmYgbGluZXMuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKIC0gSXNzdWUgIzI0MTI5OiBDbGFyaWZ5IHRoZSByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbmFtZSByZXNvbHV0aW9uLgogICBUaGlzIGluY2x1ZGVzIHJlbW92aW5nIHRoZSBhc3N1bXB0aW9uIHRoYXQgcmVhZGVycyB3aWxsIGJlIGZhbWlsaWFyIHdpdGggdGhlCiAgIG5hbWUgcmVzb2x1dGlvbiBzY2hlbWUgUHl0aG9uIHVzZWQgcHJpb3IgdG8gdGhlIGludHJvZHVjdGlvbiBvZiBsZXhpY2FsCkBAIC04NzQsNDIgKzE1OTMsMTA4OCBAQAogLSBJc3N1ZSAjMjQ3Mjk6IENvcnJlY3QgSU8gdHV0b3JpYWwgdG8gbWF0Y2ggaW1wbGVtZW50YXRpb24gcmVnYXJkaW5nCiAgIGVuY29kaW5nIHBhcmFtZXRlciB0byBvcGVuIGZ1bmN0aW9uLgogCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjQ3NTE6IFdoZW4gcnVubmluZyByZWdydGVzdCB3aXRoIHRoZSBgYC13YGAgY29tbWFuZCBsaW5lIG9wdGlvbiwKKyAgYSB0ZXN0IHJ1biBpcyBubyBsb25nZXIgbWFya2VkIGFzIGEgZmFpbHVyZSBpZiBhbGwgdGVzdHMgc3VjY2VlZCB3aGVuCisgIHJlLXJ1bi4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjUuMCBiZXRhIDQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNS0wNy0yNgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjM1NzM6IFJlc3RvcmVkIG9wdGltaXphdGlvbiBvZiBieXRlcy5yZmluZCgpIGFuZCBieXRlYXJyYXkucmZpbmQoKQorICBmb3Igc2luZ2xlLWJ5dGUgYXJndW1lbnQgb24gTGludXguCisKKy0gSXNzdWUgIzI0NTY5OiBNYWtlIFBFUCA0NDggZGljdGlvbmFyeSBldmFsdWF0aW9uIG1vcmUgY29uc2lzdGVudC4KKworLSBJc3N1ZSAjMjQ1ODM6IEZpeCBjcmFzaCB3aGVuIHNldCBpcyBtdXRhdGVkIHdoaWxlIGJlaW5nIHVwZGF0ZWQuCisKKy0gSXNzdWUgIzI0NDA3OiBGaXggY3Jhc2ggd2hlbiBkaWN0IGlzIG11dGF0ZWQgd2hpbGUgYmVpbmcgdXBkYXRlZC4KKworLSBJc3N1ZSAjMjQ2MTk6IE5ldyBhcHByb2FjaCBmb3IgdG9rZW5pemluZyBhc3luYy9hd2FpdC4gQXMgYSBjb25zZXF1ZW5jZSwKKyAgaXQgaXMgbm93IHBvc3NpYmxlIHRvIGhhdmUgb25lLWxpbmUgJ2FzeW5jIGRlZiBmb28oKTogYXdhaXQgLi4nIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMjQ2ODc6IFBsdWcgcmVmbGVhayBvbiBTeW50YXhFcnJvciBpbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCisgIGFubm90YXRpb25zLgorCistIElzc3VlICMxNTk0NDogbWVtb3J5dmlldzogQWxsb3cgYXJiaXRyYXJ5IGZvcm1hdHMgd2hlbiBjYXN0aW5nIHRvIGJ5dGVzLgorICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIzNDQxOiByY29tcGxldGVyIG5vdyBwcmludHMgYSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2YgZGlzcGxheWluZworICBwb3NzaWJsZSBjb21wbGV0aW9ucyBmb3IgYW4gZW1wdHkgd29yZC4gIEluaXRpYWwgcGF0Y2ggYnkgTWFydGluIFNla2VyYS4KKworLSBJc3N1ZSAjMjQ2ODM6IEZpeGVkIGNyYXNoZXMgaW4gX2pzb24gZnVuY3Rpb25zIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyBvZgorICBpbmFwcHJvcHJpYXRlIHR5cGUuCisKKy0gSXNzdWUgIzIxNjk3OiBzaHV0aWwuY29weXRyZWUoKSBub3cgY29ycmVjdGx5IGhhbmRsZXMgc3ltYm9saWMgbGlua3MgdGhhdAorICBwb2ludCB0byBkaXJlY3Rvcmllcy4gIFBhdGNoIGJ5IEVkdWFyZG8gU2VhYnJhIGFuZCBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTQzNzM6IEZpeGVkIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIGdjLmNvbGxlY3QoKSBpcyBjYWxsZWQgZHVyaW5nCisgIGNvbnN0cnVjdGluZyBscnVfY2FjaGUgKEMgaW1wbGVtZW50YXRpb24pLgorCistIElzc3VlICMyNDY5NTogRml4IGEgcmVncmVzc2lvbiBpbiB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKCkuICBJZgorICBleGNfdHJhY2ViYWNrIGlzIE5vbmUgd2Ugc2hvdWxkbid0IHByaW50IGEgdHJhY2ViYWNrIGhlYWRlciBsaWtlIGRlc2NyaWJlZAorICBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMjQ2MjA6IFJhbmRvbS5zZXRzdGF0ZSgpIG5vdyB2YWxpZGF0ZXMgdGhlIHZhbHVlIG9mIHN0YXRlIGxhc3QgZWxlbWVudC4KKworLSBJc3N1ZSAjMjI0ODU6IEZpeGVkIGFuIGlzc3VlIHRoYXQgY2F1c2VkIGBpbnNwZWN0LmdldHNvdXJjZWAgdG8gcmV0dXJuCisgIGluY29ycmVjdCByZXN1bHRzIG9uIG5lc3RlZCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzIyMTUzOiBJbXByb3ZlIHVuaXR0ZXN0IGRvY3MuIFBhdGNoIGZyb20gTWFydGluIFBhbnRlciBhbmQgZXZpbHplcm8uCisKKy0gSXNzdWUgIzI0NTgwOiBTeW1ib2xpYyBncm91cCByZWZlcmVuY2VzIHRvIG9wZW4gZ3JvdXAgaW4gcmUgcGF0dGVybnMgbm93IGFyZQorICBleHBsaWNpdGx5IGZvcmJpZGRlbiBhcyB3ZWxsIGFzIG51bWVyaWMgZ3JvdXAgcmVmZXJlbmNlcy4KKworLSBJc3N1ZSAjMjQyMDY6IEZpeGVkIF9fZXFfXyBhbmQgX19uZV9fIG1ldGhvZHMgb2YgaW5zcGVjdCBjbGFzc2VzLgorCistIElzc3VlICMyNDYzMTogRml4ZWQgcmVncmVzc2lvbiBpbiB0aGUgdGltZWl0IG1vZHVsZSB3aXRoIG11bHRpbGluZSBzZXR1cC4KKworLSBJc3N1ZSAjMTg2MjI6IHVuaXR0ZXN0Lm1vY2subW9ja19vcGVuKCkucmVzZXRfbW9jayB3b3VsZCByZWN1cnNlIGluZmluaXRlbHkuCisgIFBhdGNoIGZyb20gTmljb2xhIFBhbHVtYm8gYW5kIExhdXJlbnQgRGUgQnV5c3QuCisKKy0gSXNzdWUgIzIzNjYxOiB1bml0dGVzdC5tb2NrIHNpZGVfZWZmZWN0cyBjYW4gbm93IGJlIGV4Y2VwdGlvbnMgYWdhaW4uIFRoaXMKKyAgd2FzIGEgcmVncmVzc2lvbiB2cyBQeXRob24gMy40LiBQYXRjaCBmcm9tIElnbmFjaW8gUm9zc2kKKworLSBJc3N1ZSAjMjQ2MDg6IGNodW5rLkNodW5rLnJlYWQoKSBub3cgYWx3YXlzIHJldHVybnMgYnl0ZXMsIG5vdCBzdHIuCisKKy0gSXNzdWUgIzE4Njg0OiBGaXhlZCByZWFkaW5nIG91dCBvZiB0aGUgYnVmZmVyIGluIHRoZSByZSBtb2R1bGUuCisKKy0gSXNzdWUgIzI0MjU5OiB0YXJmaWxlIG5vdyByYWlzZXMgYSBSZWFkRXJyb3IgaWYgYW4gYXJjaGl2ZSBpcyB0cnVuY2F0ZWQKKyAgaW5zaWRlIGEgZGF0YSBzZWdtZW50LgorCistIElzc3VlICMxNTAxNDogU01UUC5hdXRoKCkgYW5kIFNNVFAubG9naW4oKSBub3cgc3VwcG9ydCBSRkMgNDk1NCdzIG9wdGlvbmFsCisgIGluaXRpYWwtcmVzcG9uc2UgYXJndW1lbnQgdG8gdGhlIFNNVFAgQVVUSCBjb21tYW5kLgorCistIElzc3VlICMyNDY2OTogRml4IGluc3BlY3QuZ2V0c291cmNlKCkgZm9yICdhc3luYyBkZWYnIGZ1bmN0aW9ucy4KKyAgUGF0Y2ggYnkgS2FpIEdyb25lci4KKworLSBJc3N1ZSAjMjQ2ODg6IGFzdC5nZXRfZG9jc3RyaW5nKCkgZm9yICdhc3luYyBkZWYnIGZ1bmN0aW9ucy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzI0NjAzOiBVcGRhdGUgV2luZG93cyBidWlsZHMgYW5kIE9TIFggMTAuNSBpbnN0YWxsZXIgdG8gdXNlIE9wZW5TU0wKKyAgMS4wLjJkLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNS4wIGJldGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE1LTA3LTA1CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyNDQ2NzogRml4ZWQgcG9zc2libGUgYnVmZmVyIG92ZXItcmVhZCBpbiBieXRlYXJyYXkuIFRoZSBieXRlYXJyYXkKKyAgb2JqZWN0IG5vdyBhbHdheXMgYWxsb2NhdGVzIHBsYWNlIGZvciB0cmFpbGluZyBudWxsIGJ5dGUgYW5kIGl0J3MgYnVmZmVyIG5vdworICBpcyBhbHdheXMgbnVsbC10ZXJtaW5hdGVkLgorCistIFVwZ3JhZGUgdG8gVW5pY29kZSA4LjAuMC4KKworLSBJc3N1ZSAjMjQzNDU6IEFkZCBQeV90cF9maW5hbGl6ZSBzbG90IGZvciB0aGUgc3RhYmxlIEFCSS4KKworLSBJc3N1ZSAjMjQ0MDA6IEludHJvZHVjZSBhIGRpc3RpbmN0IHR5cGUgZm9yIFBFUCA0OTIgY29yb3V0aW5lczsgYWRkCisgIHR5cGVzLkNvcm91dGluZVR5cGUsIGluc3BlY3QuZ2V0Y29yb3V0aW5lc3RhdGUsIGluc3BlY3QuZ2V0Y29yb3V0aW5lbG9jYWxzOworICBjb3JvdXRpbmVzIG5vIGxvbmdlciB1c2UgQ09fR0VORVJBVE9SIGZsYWc7IHN5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXIKKyAgd29ya3Mgb25seSBmb3IgJ2FzeW5jIGRlZicgY29yb3V0aW5lczsgaW5zcGVjdC5pc2Nvcm91dGluZSBubyBsb25nZXIKKyAgdXNlcyBjb2xsZWN0aW9ucy5hYmMuQ29yb3V0aW5lLCBpdCdzIGludGVuZGVkIHRvIHRlc3QgZm9yIHB1cmUgJ2FzeW5jIGRlZicKKyAgY29yb3V0aW5lcyBvbmx5OyBhZGQgbmV3IG9wY29kZTogR0VUX1lJRUxEX0ZST01fSVRFUjsgZml4IGdlbmVyYXRvcnMgd3JhcHBlcgorICB1c2VkIGluIHR5cGVzLmNvcm91dGluZSB0byBiZSBpbnN0YW5jZSBvZiBjb2xsZWN0aW9ucy5hYmMuR2VuZXJhdG9yOworICBjb2xsZWN0aW9ucy5hYmMuQXdhaXRhYmxlIGFuZCBjb2xsZWN0aW9ucy5hYmMuQ29yb3V0aW5lIGNhbiBubyBsb25nZXIKKyAgYmUgdXNlZCB0byBkZXRlY3QgZ2VuZXJhdG9yLWJhc2VkIGNvcm91dGluZXMtLXVzZSBpbnNwZWN0LmlzYXdhaXRhYmxlCisgIGluc3RlYWQuCisKKy0gSXNzdWUgIzI0NDUwOiBBZGQgZ2lfeWllbGRmcm9tIHRvIGdlbmVyYXRvcnMgYW5kIGNyX2F3YWl0IHRvIGNvcm91dGluZXMuCisgIENvbnRyaWJ1dGVkIGJ5IEJlbm5vIExlc2xpZSBhbmQgWXVyeSBTZWxpdmFub3YuCisKKy0gSXNzdWUgIzE5MjM1OiBBZGQgbmV3IFJlY3Vyc2lvbkVycm9yIGV4Y2VwdGlvbi4gUGF0Y2ggYnkgR2VvcmcgQnJhbmRsLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIxNzUwOiBtb2NrX29wZW4ucmVhZF9kYXRhIGNhbiBub3cgYmUgcmVhZCBmcm9tIGVhY2ggaW5zdGFuY2UsIGFzIGl0CisgIGNvdWxkIGluIFB5dGhvbiAzLjMuCisKKy0gSXNzdWUgIzI0NTUyOiBGaXggdXNlIGFmdGVyIGZyZWUgaW4gYW4gZXJyb3IgY2FzZSBvZiB0aGUgX3BpY2tsZSBtb2R1bGUuCisKKy0gSXNzdWUgIzI0NTE0OiB0YXJmaWxlIG5vdyB0b2xlcmF0ZXMgbnVtYmVyIGZpZWxkcyBjb25zaXN0aW5nIG9mIG9ubHkKKyAgd2hpdGVzcGFjZS4KKworLSBJc3N1ZSAjMTkxNzY6IEZpeGVkIGRvY3R5cGUoKSByZWxhdGVkIGJ1Z3MgaW4gQyBpbXBsZW1lbnRhdGlvbiBvZiBFbGVtZW50VHJlZS4KKyAgQSBkZXByZWNhdGlvbiB3YXJuaW5nIG5vIGxvbmdlciBpc3N1ZWQgYnkgWE1MUGFyc2VyIHN1YmNsYXNzIHdpdGggZGVmYXVsdAorICBkb2N0eXBlKCkgbWV0aG9kLiAgRGlyZWN0IGNhbGwgb2YgZG9jdHlwZSgpIG5vdyBpc3N1ZXMgYSB3YXJuaW5nLiAgUGFyc2VyJ3MKKyAgZG9jdHlwZSgpIG5vdyBpcyBub3QgY2FsbGVkIGlmIHRhcmdldCdzIGRvY3R5cGUoKSBpcyBjYWxsZWQuICBCYXNlZCBvbiBwYXRjaAorICBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMDM4NzogUmVzdG9yZSBzZW1hbnRpYyByb3VuZC10cmlwIGNvcnJlY3RuZXNzIGluIHRva2VuaXplL3VudG9rZW5pemUKKyAgZm9yIHRhYi1pbmRlbnRlZCBibG9ja3MuCisKKy0gSXNzdWUgIzI0NDU2OiBGaXhlZCBwb3NzaWJsZSBidWZmZXIgb3Zlci1yZWFkIGluIGFkcGNtMmxpbigpIGFuZCBsaW4yYWRwY20oKQorICBmdW5jdGlvbnMgb2YgdGhlIGF1ZGlvb3AgbW9kdWxlLgorCistIElzc3VlICMyNDMzNjogVGhlIGNvbnRleHRtYW5hZ2VyIGRlY29yYXRvciBub3cgd29ya3Mgd2l0aCBmdW5jdGlvbnMgd2l0aAorICBrZXl3b3JkIGFyZ3VtZW50cyBjYWxsZWQgImZ1bmMiIGFuZCAic2VsZiIuICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyNDUyMjogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4ganNvbiBhY2NlbGVyYXRvciBtb2R1bGUuCisKKy0gSXNzdWUgIzI0NDg5OiBlbnN1cmUgYSBwcmV2aW91c2x5IHNldCBDIGVycm5vIGRvZXNuJ3QgZGlzdHVyYiBjbWF0aC5wb2xhcigpLgorCistIElzc3VlICMyNDQwODogRml4ZWQgQXR0cmlidXRlRXJyb3IgaW4gbWVhc3VyZSgpIGFuZCBtZXRyaWNzKCkgbWV0aG9kcyBvZgorICB0a2ludGVyLkZvbnQuCisKKy0gSXNzdWUgIzE0MzczOiBDIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0b29scy5scnVfY2FjaGUoKSBub3cgY2FuIGJlIHVzZWQgd2l0aAorICBtZXRob2RzLgorCistIElzc3VlICMyNDM0NzogU2V0IEtleUVycm9yIGlmIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yIHJldHVybnMgTlVMTC4KKworLSBJc3N1ZSAjMjQzNDg6IERyb3Agc3VwZXJmbHVvdXMgaW5jcmVmL2RlY3JlZi4KKworLSBJc3N1ZSAjMjQzNTk6IENoZWNrIGZvciBjaGFuZ2VkIE9yZGVyZWREaWN0IHNpemUgZHVyaW5nIGl0ZXJhdGlvbi4KKworLSBJc3N1ZSAjMjQzNjg6IFN1cHBvcnQga2V5d29yZCBhcmd1bWVudHMgaW4gT3JkZXJlZERpY3QgbWV0aG9kcy4KKworLSBJc3N1ZSAjMjQzNjI6IFNpbXBsaWZ5IHRoZSBDIE9yZGVyZWREaWN0IGZhc3Qgbm9kZXMgcmVzaXplIGxvZ2ljLgorCistIElzc3VlICMyNDM3NzogRml4IGEgcmVmIGxlYWsgaW4gT3JkZXJlZERpY3QuX19yZXByX18uCisKKy0gSXNzdWUgIzI0MzY5OiBEZWZlbmQgYWdhaW5zdCBrZXktY2hhbmdlcyBkdXJpbmcgaXRlcmF0aW9uLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjQzNzM6IF90ZXN0bXVsdGlwaGFzZSBhbmQgeHhsaW1pdGVkIG5vdyB1c2UgdHBfdHJhdmVyc2UgYW5kCisgIHRwX2ZpbmFsaXplIHRvIGF2b2lkIHJlZmVyZW5jZSBsZWFrcyBlbmNvdW50ZXJlZCB3aGVuIGNvbWJpbmluZyB0cF9kZWFsbG9jCisgIHdpdGggUHlUeXBlX0Zyb21TcGVjIChzZWUgaXNzdWUgIzE2NjkwIGZvciBkZXRhaWxzKQorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzI0NDU4OiBVcGRhdGUgZG9jdW1lbnRhdGlvbiB0byBjb3ZlciBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiBmb3IKKyAgZXh0ZW5zaW9uIG1vZHVsZXMgKFBFUCA0ODkpLiBQYXRjaCBieSBQZXRyIFZpa3RvcmluLgorCiAtIElzc3VlICMyNDM1MTogQ2xhcmlmeSB3aGF0IGlzIG1lYW50IGJ5ICJpZGVudGlmaWVyIiBpbiB0aGUgY29udGV4dCBvZgogICBzdHJpbmcuVGVtcGxhdGUgaW5zdGFuY2VzLgogCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMjQ0MzI6IFVwZGF0ZSBXaW5kb3dzIGJ1aWxkcyBhbmQgT1MgWCAxMC41IGluc3RhbGxlciB0byB1c2UgT3BlblNTTAorICAxLjAuMmMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy41LjAgYmV0YSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTUtMDUtMzEKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzI0Mjg0OiBUaGUgc3RhcnRzd2l0aCBhbmQgZW5kc3dpdGggbWV0aG9kcyBvZiB0aGUgc3RyIGNsYXNzIG5vIGxvbmdlcgorICByZXR1cm4gVHJ1ZSB3aGVuIGZpbmRpbmcgdGhlIGVtcHR5IHN0cmluZyBhbmQgdGhlIGluZGV4ZXMgYXJlIGNvbXBsZXRlbHkgb3V0CisgIG9mIHJhbmdlLgorCistIElzc3VlICMyNDExNTogVXBkYXRlIHVzZXMgb2YgUHlPYmplY3RfSXNUcnVlKCksIFB5T2JqZWN0X05vdCgpLAorICBQeU9iamVjdF9Jc0luc3RhbmNlKCksIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgpIGFuZCBfUHlEaWN0X0NvbnRhaW5zKCkKKyAgdG8gY2hlY2sgZm9yIGFuZCBoYW5kbGUgZXJyb3JzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMjQzMjg6IEZpeCBpbXBvcnRpbmcgb25lIGNoYXJhY3RlciBleHRlbnNpb24gbW9kdWxlcy4KKworLSBJc3N1ZSAjMTEyMDU6IEluIGRpY3Rpb25hcnkgZGlzcGxheXMsIGV2YWx1YXRlIHRoZSBrZXkgYmVmb3JlIHRoZSB2YWx1ZS4KKworLSBJc3N1ZSAjMjQyODU6IEZpeGVkIHJlZ3Jlc3Npb24gdGhhdCBwcmV2ZW50ZWQgaW1wb3J0aW5nIGV4dGVuc2lvbiBtb2R1bGVzCisgIGZyb20gaW5zaWRlIHBhY2thZ2VzLiBQYXRjaCBieSBQZXRyIFZpa3RvcmluLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIzMjQ3OiBGaXggYSBjcmFzaCBpbiB0aGUgU3RyZWFtV3JpdGVyLnJlc2V0KCkgb2YgQ0pLIGNvZGVjcy4KKworLSBJc3N1ZSAjMjQyNzA6IEFkZCBtYXRoLmlzY2xvc2UoKSBhbmQgY21hdGguaXNjbG9zZSgpIGZ1bmN0aW9ucyBhcyBwZXIgUEVQIDQ4NS4KKyAgQ29udHJpYnV0ZWQgYnkgQ2hyaXMgQmFya2VyIGFuZCBUYWwgRWluYXQuCisKKy0gSXNzdWUgIzU2MzM6IEZpeGVkIHRpbWVpdCB3aGVuIHRoZSBzdGF0ZW1lbnQgaXMgYSBzdHJpbmcgYW5kIHRoZSBzZXR1cCBpcyBub3QuCisKKy0gSXNzdWUgIzI0MzI2OiBGaXhlZCBhdWRpb29wLnJhdGVjdigpIHdpdGggbm9uLWRlZmF1bHQgd2VpZ2h0QiBhcmd1bWVudC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRGF2aWQgTW9vcmUuCisKKy0gSXNzdWUgIzE2OTkxOiBBZGQgYSBDIGltcGxlbWVudGF0aW9uIG9mIE9yZGVyZWREaWN0LgorCistIElzc3VlICMyMzkzNDogRml4IGluc3BlY3Quc2lnbmF0dXJlIHRvIGZhaWwgY29ycmVjdGx5IGZvciBidWlsdGluIHR5cGVzCisgIGxhY2tpbmcgc2lnbmF0dXJlIGluZm9ybWF0aW9uLiAgSW5pdGlhbCBwYXRjaCBieSBKYW1lcyBQb3dlbGwuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy41LjAgYmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTUtMDUtMjQKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzI0Mjc2OiBGaXhlZCBvcHRpbWl6YXRpb24gb2YgcHJvcGVydHkgZGVzY3JpcHRvciBnZXR0ZXIuCisKKy0gSXNzdWUgIzI0MjY4OiBQRVAgNDg5OiBNdWx0aS1waGFzZSBleHRlbnNpb24gbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICBQYXRjaCBieSBQZXRyIFZpa3RvcmluLgorCistIElzc3VlICMyMzk1NTogQWRkIHB5dmVudi5jZmcgb3B0aW9uIHRvIHN1cHByZXNzIHJlZ2lzdHJ5L2Vudmlyb25tZW50CisgIGxvb2t1cCBmb3IgZ2VuZXJhdGluZyBzeXMucGF0aCBvbiBXaW5kb3dzLgorCistIElzc3VlICMyNDI1NzogRml4ZWQgc3lzdGVtIGVycm9yIGluIHRoZSBjb21wYXJpc29uIG9mIGZha2VkCisgIHR5cGVzLlNpbXBsZU5hbWVzcGFjZS4KKworLSBJc3N1ZSAjMjI5Mzk6IEZpeGVkIGludGVnZXIgb3ZlcmZsb3cgaW4gaXRlcmF0b3Igb2JqZWN0LiAgUGF0Y2ggYnkKKyAgQ2xlbWVudCBSb3VhdWx0LgorCistIElzc3VlICMyMzk4NTogRml4IGEgcG9zc2libGUgYnVmZmVyIG92ZXJydW4gd2hlbiBkZWxldGluZyBhIHNsaWNlIGZyb20KKyAgdGhlIGZyb250IG9mIGEgYnl0ZWFycmF5IGFuZCB0aGVuIGFwcGVuZGluZyBzb21lIG90aGVyIGJ5dGVzIGRhdGEuCisKKy0gSXNzdWUgIzI0MTAyOiBGaXhlZCBleGNlcHRpb24gdHlwZSBjaGVja2luZyBpbiBzdGFuZGFyZCBlcnJvciBoYW5kbGVycy4KKworLSBJc3N1ZSAjMTUwMjc6IFRoZSBVVEYtMzIgZW5jb2RlciBpcyBub3cgM3ggdG8gN3ggZmFzdGVyLgorCistIElzc3VlICMyMzI5MDogT3B0aW1pemUgc2V0X21lcmdlKCkgZm9yIGNhc2VzIHdoZXJlIHRoZSB0YXJnZXQgaXMgZW1wdHkuCisgIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthLikKKworLSBJc3N1ZSAjMjI5MjogUEVQIDQ0ODogQWRkaXRpb25hbCBVbnBhY2tpbmcgR2VuZXJhbGl6YXRpb25zLgorCistIElzc3VlICMyNDA5NjogTWFrZSB3YXJuaW5ncy53YXJuX2V4cGxpY2l0IG1vcmUgcm9idXN0IGFnYWluc3QgbXV0YXRpb24gb2YgdGhlCisgIHdhcm5pbmdzLmZpbHRlcnMgbGlzdC4KKworLSBJc3N1ZSAjMjM5OTY6IEF2b2lkIGEgY3Jhc2ggd2hlbiBhIGRlbGVnYXRlZCBnZW5lcmF0b3IgcmFpc2VzIGFuCisgIHVubm9ybWFsaXplZCBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbi4gIFBhdGNoIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzIzOTEwOiBPcHRpbWl6ZSBwcm9wZXJ0eSgpIGdldHRlciBjYWxscy4gIFBhdGNoIGJ5IEpvZSBKZXZuaWsuCisKKy0gSXNzdWUgIzIzOTExOiBNb3ZlIHBhdGgtYmFzZWQgaW1wb3J0bGliIGJvb3RzdHJhcCBjb2RlIHRvIGEgc2VwYXJhdGUKKyAgZnJvemVuIG1vZHVsZS4KKworLSBJc3N1ZSAjMjQxOTI6IEZpeCBuYW1lc3BhY2UgcGFja2FnZSBpbXBvcnRzLgorCistIElzc3VlICMyNDAyMjogRml4IHRva2VuaXplciBjcmFzaCB3aGVuIHByb2Nlc3NpbmcgdW5kZWNvZGFibGUgc291cmNlIGNvZGUuCisKKy0gSXNzdWUgIzk5NTE6IEFkZGVkIGEgaGV4KCkgbWV0aG9kIHRvIGJ5dGVzLCBieXRlYXJyYXksIGFuZCBtZW1vcnl2aWV3LgorCistIElzc3VlICMyMjkwNjogUEVQIDQ3OTogQ2hhbmdlIFN0b3BJdGVyYXRpb24gaGFuZGxpbmcgaW5zaWRlIGdlbmVyYXRvcnMuCisKKy0gSXNzdWUgIzI0MDE3OiBQRVAgNDkyOiBDb3JvdXRpbmVzIHdpdGggYXN5bmMgYW5kIGF3YWl0IHN5bnRheC4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDM3MzogQWRkZWQgQyBpbXBsZW1lbnRhdGlvbiBvZiBmdW5jdG9vbHMubHJ1X2NhY2hlKCkuICBCYXNlZCBvbgorICBwYXRjaGVzIGJ5IE1hdHQgSm9pbmVyIGFuZCBBbGV4ZXkgS2FjaGF5ZXYuCisKKy0gSXNzdWUgIzI0MjMwOiBUaGUgdGVtcGZpbGUgbW9kdWxlIG5vdyBhY2NlcHRzIGJ5dGVzIGZvciBwcmVmaXgsIHN1ZmZpeCBhbmQgZGlyCisgIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgYnl0ZXMgaW4gc3VjaCBzaXR1YXRpb25zIChtYXRjaGluZyB0aGUgb3MgbW9kdWxlIEFQSXMpLgorCistIElzc3VlICMyMjE4OTogY29sbGVjdGlvbnMuVXNlclN0cmluZyBub3cgc3VwcG9ydHMgX19nZXRuZXdhcmdzX18oKSwKKyAgX19ybW9kX18oKSwgY2FzZWZvbGQoKSwgZm9ybWF0X21hcCgpLCBpc3ByaW50YWJsZSgpLCBhbmQgbWFrZXRyYW5zKCkuCisgIFBhdGNoIGJ5IEpvZSBKZXZuaWsuCisKKy0gSXNzdWUgIzI0MjQ0OiBQcmV2ZW50cyB0ZXJtaW5hdGlvbiB3aGVuIGFuIGludmFsaWQgZm9ybWF0IHN0cmluZyBpcworICBlbmNvdW50ZXJlZCBvbiBXaW5kb3dzIGluIHN0cmZ0aW1lLgorCistIElzc3VlICMyMzk3MzogUEVQIDQ4NDogQWRkIHRoZSB0eXBpbmcgbW9kdWxlLgorCistIElzc3VlICMyMzA4NjogVGhlIGNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZSgpIGFic3RyYWN0IGJhc2UgY2xhc3MgYWRkZWQKKyAgKnN0YXJ0KiBhbmQgKnN0b3AqIHBhcmFtZXRlcnMgdG8gdGhlIGluZGV4KCkgbWl4aW4uCisgIFBhdGNoIGJ5IERldmluIEplYW5waWVycmUuCisKKy0gSXNzdWUgIzIwMDM1OiBSZXBsYWNlZCB0aGUgYGB0a2ludGVyLl9maXhgYCBtb2R1bGUgdXNlZCBmb3Igc2V0dGluZyB1cCB0aGUKKyAgVGNsL1RrIGVudmlyb25tZW50IG9uIFdpbmRvd3Mgd2l0aCBhIHByaXZhdGUgZnVuY3Rpb24gaW4gdGhlIGBgX3RraW50ZXJgYAorICBtb2R1bGUgdGhhdCBtYWtlcyBubyBwZXJtYW5lbnQgY2hhbmdlcyB0byB0aGUgZW52aXJvbm1lbnQuCisKKy0gSXNzdWUgIzI0MjU3OiBGaXhlZCBzZWdtZW50YXRpb24gZmF1bHQgaW4gc3FsaXRlMy5Sb3cgY29uc3RydWN0b3Igd2l0aCBmYWtlZAorICBjdXJzb3IgdHlwZS4KKworLSBJc3N1ZSAjMTU4MzY6IGFzc2VydFJhaXNlcygpLCBhc3NlcnRSYWlzZXNSZWdleCgpLCBhc3NlcnRXYXJucygpIGFuZAorICBhc3NlcnRXYXJuc1JlZ2V4KCkgYXNzZXJ0bWVudHMgbm93IGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBhcmd1bWVudAorICB0byBwcmV2ZW50IHBvc3NpYmxlIHVzZXIgZXJyb3IuICBCYXNlZCBvbiBwYXRjaCBieSBEYW5pZWwgV2FnbmVyLUhhbGwuCisKKy0gSXNzdWUgIzk4NTg6IEFkZCBtaXNzaW5nIG1ldGhvZCBzdHVicyB0byBfaW8uUmF3SU9CYXNlLiAgUGF0Y2ggYnkgTGF1cmEKKyAgUnVwcHJlY2h0LgorCistIElzc3VlICMyMjk1NTogYXR0cmdldHRlciwgaXRlbWdldHRlciBhbmQgbWV0aG9kY2FsbGVyIG9iamVjdHMgaW4gdGhlIG9wZXJhdG9yCisgIG1vZHVsZSBub3cgc3VwcG9ydCBwaWNrbGluZy4gIEFkZGVkIHJlYWRhYmxlIGFuZCBldmFsdWFibGUgcmVwciBmb3IgdGhlc2UKKyAgb2JqZWN0cy4gIEJhc2VkIG9uIHBhdGNoIGJ5IEpvc2ggUm9zZW5iZXJnLgorCistIElzc3VlICMyMjEwNzogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIGFuZCB0ZW1wZmlsZS5ta2R0ZW1wKCkgbm93IHRyeSBhZ2FpbgorICB3aGVuIGEgZGlyZWN0b3J5IHdpdGggdGhlIGNob3NlbiBuYW1lIGFscmVhZHkgZXhpc3RzIG9uIFdpbmRvd3MgYXMgd2VsbCBhcworICBvbiBVbml4LiAgdGVtcGZpbGUubWtzdGVtcCgpIG5vdyBmYWlscyBlYXJseSBpZiBwYXJlbnQgZGlyZWN0b3J5IGlzIG5vdAorICB2YWxpZCAobm90IGV4aXN0cyBvciBpcyBhIGZpbGUpIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzIzNzgwOiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlIGluIG9zLnBhdGguam9pbigpIHdpdGggc2luZ2xlIGFyZ3VtZW50LgorCistIElzc3VlICM2NTk4OiBJbmNyZWFzZWQgdGltZSBwcmVjaXNpb24gYW5kIHJhbmRvbSBudW1iZXIgcmFuZ2UgaW4KKyAgZW1haWwudXRpbHMubWFrZV9tc2dpZCgpIHRvIHN0cmVuZ3RoZW4gdGhlIHVuaXF1ZW5lc3Mgb2YgdGhlIG1lc3NhZ2UgSUQuCisKKy0gSXNzdWUgIzI0MDkxOiBGaXhlZCB2YXJpb3VzIGNyYXNoZXMgaW4gY29ybmVyIGNhc2VzIGluIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgRWxlbWVudFRyZWUuCisKKy0gSXNzdWUgIzIxOTMxOiBtc2lsaWIuRkNJQ3JlYXRlKCkgbm93IHJhaXNlcyBUeXBlRXJyb3IgaW4gdGhlIGNhc2Ugb2YgYSBiYWQKKyAgYXJndW1lbnQgaW5zdGVhZCBvZiBhIFZhbHVlRXJyb3Igd2l0aCBhIGJvZ3VzIEZDSSBlcnJvciBudW1iZXIuCisgIFBhdGNoIGJ5IEplZmZyZXkgQXJtc3Ryb25nLgorCistIElzc3VlICMxMzg2NjogKnF1b3RlX3ZpYSogYXJndW1lbnQgYWRkZWQgdG8gdXJsbGliLnBhcnNlLnVybGVuY29kZS4KKworLSBJc3N1ZSAjMjAwOTg6IE5ldyBtYW5nbGVfZnJvbSBwb2xpY3kgb3B0aW9uIGZvciBlbWFpbCwgZGVmYXVsdCBUcnVlCisgIGZvciBjb21wYXQzMiwgYnV0IEZhbHNlIGZvciBhbGwgb3RoZXIgcG9saWNpZXMuCisKKy0gSXNzdWUgIzI0MjExOiBUaGUgZW1haWwgbGlicmFyeSBub3cgc3VwcG9ydHMgUkZDIDY1MzI6IGl0IGNhbiBnZW5lcmF0ZQorICBoZWFkZXJzIHVzaW5nIHV0Zi04IGluc3RlYWQgb2YgZW5jb2RlZCB3b3Jkcy4KKworLSBJc3N1ZSAjMTYzMTQ6IEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBMWk1BIGNvbXByZXNzaW9uIGluIGRpc3R1dGlscy4KKworLSBJc3N1ZSAjMjE4MDQ6IHBvcGxpYiBub3cgc3VwcG9ydHMgUkZDIDY4NTYgKFVURjgpLgorCistIElzc3VlICMxODY4MjogT3B0aW1pemVkIHBwcmludCBmdW5jdGlvbnMgZm9yIGJ1aWx0aW4gc2NhbGFyIHR5cGVzLgorCistIElzc3VlICMyMjAyNzogc210cGxpYiBub3cgc3VwcG9ydHMgUkZDIDY1MzEgKFNNVFBVVEY4KS4KKworLSBJc3N1ZSAjMjM0ODg6IFJhbmRvbSBnZW5lcmF0b3Igb2JqZWN0cyBub3cgY29uc3VtZSAyeCBsZXNzIG1lbW9yeSBvbiA2NC1iaXQuCisKKy0gSXNzdWUgIzEzMjI6IHBsYXRmb3JtLmRpc3QoKSBhbmQgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uKCkgZnVuY3Rpb25zIGFyZQorICBub3cgZGVwcmVjYXRlZC4gIEluaXRpYWwgcGF0Y2ggYnkgVmFqcmFza3kgS29rLgorCistIElzc3VlICMyMjQ4NjogQWRkZWQgdGhlIG1hdGguZ2NkKCkgZnVuY3Rpb24uICBUaGUgZnJhY3Rpb25zLmdjZCgpIGZ1bmN0aW9uIG5vdyBpcworICBkZXByZWNhdGVkLiAgQmFzZWQgb24gcGF0Y2ggYnkgTWFyayBEaWNraW5zb24uCisKKy0gSXNzdWUgIzI0MDY0OiBQcm9wZXJ0eSgpIGRvY3N0cmluZ3MgYXJlIG5vdyB3cml0ZWFibGUuCisgIChQYXRjaCBieSBCZXJrZXIgUGVrc2FnLikKKworLSBJc3N1ZSAjMjI2ODE6IEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBrb2k4X3QgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzIyNjgyOiBBZGRlZCBzdXBwb3J0IGZvciB0aGUga3oxMDQ4IGVuY29kaW5nLgorCistIElzc3VlICMyMzc5NjogcGVlayBhbmQgcmVhZDEgbWV0aG9kcyBvZiBCdWZmZXJlZFJlYWRlciBub3cgcmFpc2UgVmFsdWVFcnJvcgorICBpZiB0aGV5IGNhbGxlZCBvbiBhIGNsb3NlZCBvYmplY3QuIFBhdGNoIGJ5IEpvaG4gSGVyZ2Vucm9lZGVyLgorCistIElzc3VlICMyMTc5NTogc210cGQgbm93IHN1cHBvcnRzIHRoZSA4QklUTUlNRSBleHRlbnNpb24gd2hlbmV2ZXIKKyAgdGhlIG5ldyAqZGVjb2RlX2RhdGEqIGNvbnN0cnVjdG9yIGFyZ3VtZW50IGlzIHNldCB0byBGYWxzZS4KKworLSBJc3N1ZSAjMjQxNTU6IG9wdGltaXplIGhlYXBxLmhlYXBpZnkoKSBmb3IgYmV0dGVyIGNhY2hlIHBlcmZvcm1hbmNlCisgIHdoZW4gaGVhcGlmeWluZyBsYXJnZSBsaXN0cy4KKworLSBJc3N1ZSAjMjE4MDA6IGltYXBsaWIgbm93IHN1cHBvcnRzIFJGQyA1MTYxIChlbmFibGUpLCBSRkMgNjg1NQorICAodXRmOC9pbnRlcm5hdGlvbmFsaXplZCBlbWFpbCkgYW5kIGF1dG9tYXRpY2FsbHkgZW5jb2RlcyBub24tQVNDSUkKKyAgdXNlcm5hbWVzIGFuZCBwYXNzd29yZHMgdG8gVVRGOC4KKworLSBJc3N1ZSAjMjAyNzQ6IFdoZW4gY2FsbGluZyBhIF9zcWxpdGUuQ29ubmVjdGlvbiwgaXQgbm93IGNvbXBsYWlucyBpZiBwYXNzZWQKKyAgYW55IGtleXdvcmQgYXJndW1lbnRzLiAgUHJldmlvdXNseSBpdCBzaWxlbnRseSBpZ25vcmVkIHRoZW0uCisKKy0gSXNzdWUgIzIwMjc0OiBSZW1vdmUgaWdub3JlZCBhbmQgZXJyb25lb3VzICJrd2FyZ3MiIHBhcmFtZXRlcnMgZnJvbSB0aHJlZQorICBNRVRIX1ZBUkFSR1MgbWV0aG9kcyBvbiBfc3FsaXRlLkNvbm5lY3Rpb24uCisKKy0gSXNzdWUgIzI0MTM0OiBhc3NlcnRSYWlzZXMoKSwgYXNzZXJ0UmFpc2VzUmVnZXgoKSwgYXNzZXJ0V2FybnMoKSBhbmQKKyAgYXNzZXJ0V2FybnNSZWdleCgpIGNoZWNrcyBub3cgZW1pdHMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gY2FsbGFibGUgaXMKKyAgTm9uZSBvciBrZXl3b3JkIGFyZ3VtZW50cyBleGNlcHQgbXNnIGlzIHBhc3NlZCBpbiB0aGUgY29udGV4dCBtYW5hZ2VyIG1vZGUuCisKKy0gSXNzdWUgIzI0MDE4OiBBZGQgYSBjb2xsZWN0aW9ucy5hYmMuR2VuZXJhdG9yIGFic3RyYWN0IGJhc2UgY2xhc3MuCisgIENvbnRyaWJ1dGVkIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzIzODgwOiBUa2ludGVyJ3MgZ2V0aW50KCkgYW5kIGdldGRvdWJsZSgpIG5vdyBzdXBwb3J0IFRjbF9PYmouCisgIFRraW50ZXIncyBnZXRkb3VibGUoKSBub3cgc3VwcG9ydHMgYW55IG51bWJlcnMgKGluIHBhcnRpY3VsYXIgaW50KS4KKworLSBJc3N1ZSAjMjI2MTk6IEFkZGVkIG5lZ2F0aXZlIGxpbWl0IHN1cHBvcnQgaW4gdGhlIHRyYWNlYmFjayBtb2R1bGUuCisgIEJhc2VkIG9uIHBhdGNoIGJ5IERtaXRyeSBLYXpha292LgorCistIElzc3VlICMyNDA5NDogRml4IHBvc3NpYmxlIGNyYXNoIGluIGpzb24uZW5jb2RlIHdpdGggcG9vcmx5IGJlaGF2ZWQgZGljdAorICBzdWJjbGFzc2VzLgorCistIElzc3VlICM5MjQ2OiBPbiBQT1NJWCwgb3MuZ2V0Y3dkKCkgbm93IHN1cHBvcnRzIHBhdGhzIGxvbmdlciB0aGFuIDEwMjUgYnl0ZXMuCisgIFBhdGNoIHdyaXR0ZW4gYnkgV2lsbGlhbSBPcnIuCisKKy0gSXNzdWUgIzE3NDQ1OiBhZGQgZGlmZmxpYi5kaWZmX2J5dGVzKCkgdG8gc3VwcG9ydCBjb21wYXJpc29uIG9mCisgIGJ5dGUgc3RyaW5ncyAoZml4ZXMgYSByZWdyZXNzaW9uIGZyb20gUHl0aG9uIDIpLgorCistIElzc3VlICMyMzkxNzogRmFsbCBiYWNrIHRvIHNlcXVlbnRpYWwgY29tcGlsYXRpb24gd2hlbiBQcm9jZXNzUG9vbEV4ZWN1dG9yCisgIGRvZXNuJ3QgZXhpc3QuICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzIzMDA4OiBGaXhlZCByZXNvbHZpbmcgYXR0cmlidXRlcyB3aXRoIGJvb2xlYW4gdmFsdWUgaXMgRmFsc2UgaW4gcHlkb2MuCisKKy0gRml4IGFzeW5jaW8gaXNzdWUgMjM1OiBMaWZvUXVldWUgYW5kIFByaW9yaXR5UXVldWUncyBwdXQgZGlkbid0CisgIGluY3JlbWVudCB1bmZpbmlzaGVkIHRhc2tzICh0aGlzIGJ1ZyB3YXMgaW50cm9kdWNlZCB3aGVuCisgIEpvaW5hYmxlUXVldWUgd2FzIG1lcmdlZCB3aXRoIFF1ZXVlKS4KKworLSBJc3N1ZSAjMjM5MDg6IG9zIGZ1bmN0aW9ucyBub3cgcmVqZWN0IHBhdGhzIHdpdGggZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXIKKyAgb24gV2luZG93cyBpbnN0ZWFkIG9mIHNpbGVudGx5IHRydW5jYXRpbmcgdGhlbS4KKworLSBJc3N1ZSAjMjM3Mjg6IGJpbmFzY2lpLmNyY19ocXgoKSBjb3VsZCByZXR1cm4gYW4gaW50ZWdlciBvdXRzaWRlIG9mIHRoZSByYW5nZQorICAwLTB4ZmZmZiBmb3IgZW1wdHkgZGF0YS4KKworLSBJc3N1ZSAjMjM4ODc6IHVybGxpYi5lcnJvci5IVFRQRXJyb3Igbm93IGhhcyBhIHByb3BlciByZXByKCkgcmVwcmVzZW50YXRpb24uCisgIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gYXN5bmNpbzogTmV3IGV2ZW50IGxvb3AgQVBJczogc2V0X3Rhc2tfZmFjdG9yeSgpIGFuZCBnZXRfdGFza19mYWN0b3J5KCkuCisKKy0gYXN5bmNpbzogYXN5bmMoKSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBlbnN1cmVfZnV0dXJlKCkuCisKKy0gSXNzdWUgIzI0MTc4OiBhc3luY2lvLkxvY2ssIENvbmRpdGlvbiwgU2VtYXBob3JlLCBhbmQgQm91bmRlZFNlbWFwaG9yZQorICBzdXBwb3J0IG5ldyAnYXN5bmMgd2l0aCcgc3ludGF4LiAgQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YuCisKKy0gSXNzdWUgIzI0MTc5OiBTdXBwb3J0ICdhc3luYyBmb3InIGZvciBhc3luY2lvLlN0cmVhbVJlYWRlci4KKyAgQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YuCisKKy0gSXNzdWUgIzI0MTg0OiBBZGQgQXN5bmNJdGVyYXRvciBhbmQgQXN5bmNJdGVyYWJsZSBBQkNzIHRvCisgIGNvbGxlY3Rpb25zLmFiYy4gIENvbnRyaWJ1dGVkIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlICMyMjU0NzogSW1wbGVtZW50IGluZm9ybWF0aXZlIF9fcmVwcl9fIGZvciBpbnNwZWN0LkJvdW5kQXJndW1lbnRzLgorICBDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdi4KKworLSBJc3N1ZSAjMjQxOTA6IEltcGxlbWVudCBpbnNwZWN0LkJvdW5kQXJndW1lbnQuYXBwbHlfZGVmYXVsdHMoKSBtZXRob2QuCisgIENvbnRyaWJ1dGVkIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlICMyMDY5MTogQWRkICdmb2xsb3dfd3JhcHBlZCcgYXJndW1lbnQgdG8KKyAgaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9jYWxsYWJsZSgpIGFuZCBpbnNwZWN0LnNpZ25hdHVyZSgpLgorICBDb250cmlidXRlZCBieSBZdXJ5IFNlbGl2YW5vdi4KKworLSBJc3N1ZSAjMjQyNDg6IERlcHJlY2F0ZSBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKCkgYW5kCisgIGluc3BlY3QuU2lnbmF0dXJlLmZyb21fYnVpbHRpbigpLgorCistIElzc3VlICMyMzg5ODogRml4IGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoKSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMKKyAgd2l0aCBvdmVybG9hZGVkIF9fZXFfXyBhbmQgX19ib29sX18uICBQYXRjaCBieSBNaWtlIEJheWVyLgorCistIElzc3VlICMyNDI5ODogRml4IGluc3BlY3Quc2lnbmF0dXJlKCkgdG8gY29ycmVjdGx5IHVud3JhcCB3cmFwcGVycworICBhcm91bmQgYm91bmQgbWV0aG9kcy4KKworSURMRQorLS0tLQorCistIElzc3VlICMyMzE4NDogcmVtb3ZlIHVudXNlZCBuYW1lcyBhbmQgaW1wb3J0cyBpbiBpZGxlbGliLgorICBJbml0aWFsIHBhdGNoIGJ5IEFsIFN3ZWlnYXJ0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjE1MjA6IHRlc3RfemlwZmlsZSBubyBsb25nZXIgZmFpbHMgaWYgdGhlIHdvcmQgJ2JhZCcgYXBwZWFycworICBhbnl3aGVyZSBpbiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzk1MTc6IE1vdmUgc2NyaXB0X2hlbHBlciBpbnRvIHRoZSBzdXBwb3J0IHBhY2thZ2UuCisgIFBhdGNoIGJ5IENocmlzdGllIFdpbHNvbi4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCiAtIElzc3VlICMyMjE1NTogQWRkIEZpbGUgSGFuZGxlcnMgc3Vic2VjdGlvbiB3aXRoIGNyZWF0ZWZpbGVoYW5kbGVyIHRvIHRraW50ZXIKICAgZG9jLiAgUmVtb3ZlIG9ic29sZXRlIGV4YW1wbGUgZnJvbSBGQVEuICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgogCiAtIElzc3VlICMyNDAyOTogRG9jdW1lbnQgdGhlIG5hbWUgYmluZGluZyBiZWhhdmlvciBmb3Igc3VibW9kdWxlIGltcG9ydHMuCiAKLS0gSXNzdWUgIzI0MDc3OiBGaXggdHlwbyBpbiBtYW4gcGFnZSBmb3IgLUkgY29tbWFuZCBvcHRpb246IC1zLCBub3QgLVMuCistIElzc3VlICMyNDA3NzogRml4IHR5cG8gaW4gbWFuIHBhZ2UgZm9yIC1JIGNvbW1hbmQgb3B0aW9uOiAtcywgbm90IC1TCiAKIFRvb2xzL0RlbW9zCiAtLS0tLS0tLS0tLQogCi0tIElzc3VlICMyNTQ0MDogRml4IG91dHB1dCBvZiBweXRob24tY29uZmlnIC0tZXh0ZW5zaW9uLXN1ZmZpeC4KKy0gSXNzdWUgIzI0MDAwOiBJbXByb3ZlZCBBcmd1bWVudCBDbGluaWMncyBtYXBwaW5nIG9mIGNvbnZlcnRlcnMgdG8gbGVnYWN5CisgICJmb3JtYXQgdW5pdHMiLiAgVXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiB0byBtYXRjaC4KKworLSBJc3N1ZSAjMjQwMDE6IEFyZ3VtZW50IENsaW5pYyBjb252ZXJ0ZXJzIG5vdyB1c2UgYWNjZXB0PXt0eXBlfQorICBpbnN0ZWFkIG9mIHR5cGVzPXsndHlwZSd9IHRvIHNwZWNpZnkgdGhlIHR5cGVzIHRoZSBjb252ZXJ0ZXIgYWNjZXB0cy4KIAogLSBJc3N1ZSAjMjMzMzA6IGgycHkgbm93IHN1cHBvcnRzIGFyYml0cmFyeSBmaWxlbmFtZXMgaW4gI2luY2x1ZGUuCiAKIC0gSXNzdWUgIzI0MDMxOiBtYWtlIHBhdGNoY2hlY2sgbm93IHN1cHBvcnRzIGdpdCBjaGVja291dHMsIHRvby4KIAotV2luZG93cwotLS0tLS0tLQogCi0tIElzc3VlICMyNDMwNjogU2V0cyBjb21wb25lbnQgSUQgZm9yIGxhdW5jaGVyIHRvIG1hdGNoIDMuNSBhbmQgbGF0ZXIKLSAgdG8gYXZvaWQgZG93bmdyYWRpbmcuCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjUuMCBhbHBoYSA0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotLSBJc3N1ZSAjMjUwMjI6IFJlbW92ZWQgdmVyeSBvdXRkYXRlZCBQQy9leGFtcGxlX250LyBkaXJlY3RvcnkuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjM/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVsZWFzZSBkYXRlOiAyMDE1LTAyLTIzCitSZWxlYXNlIGRhdGU6IDIwMTUtMDQtMTkKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzIyOTgwOiBVbmRlciBMaW51eCwgR05VL0tGcmVlQlNEIGFuZCB0aGUgSHVyZCwgQyBleHRlbnNpb25zIG5vdyBpbmNsdWRlCisgIHRoZSBhcmNoaXRlY3R1cmUgdHJpcGxldCBpbiB0aGUgZXh0ZW5zaW9uIG5hbWUsIHRvIG1ha2UgaXQgZWFzeSB0byB0ZXN0IGJ1aWxkcworICBmb3IgZGlmZmVyZW50IEFCSXMgaW4gdGhlIHNhbWUgd29ya2luZyB0cmVlLiAgVW5kZXIgT1MgWCwgdGhlIGV4dGVuc2lvbiBuYW1lCisgIG5vdyBpbmNsdWRlcyBQRVAgMzE0OS1zdHlsZSBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMjI2MzE6IEFkZGVkIExpbnV4LXNwZWNpZmljIHNvY2tldCBjb25zdGFudCBDQU5fUkFXX0ZEX0ZSQU1FUy4KKyAgUGF0Y2ggY291cnRlc3kgb2YgSm9lIEpldm5pay4KKworLSBJc3N1ZSAjMjM3MzE6IEltcGxlbWVudCBQRVAgNDg4OiByZW1vdmFsIG9mIC5weW8gZmlsZXMuCisKKy0gSXNzdWUgIzIzNzI2OiBEb24ndCBlbmFibGUgR0MgZm9yIHVzZXIgc3ViY2xhc3NlcyBvZiBub24tR0MgdHlwZXMgdGhhdAorICBkb24ndCBhZGQgYW55IG5ldyBmaWVsZHMuICBQYXRjaCBieSBFdWdlbmUgVG9kZXIuCisKKy0gSXNzdWUgIzIzMzA5OiBBdm9pZCBhIGRlYWRsb2NrIGF0IHNodXRkb3duIGlmIGEgZGFlbW9uIHRocmVhZCBpcyBhYm9ydGVkCisgIHdoaWxlIGl0IGlzIGhvbGRpbmcgYSBsb2NrIHRvIGEgYnVmZmVyZWQgSS9PIG9iamVjdCwgYW5kIHRoZSBtYWluIHRocmVhZAorICB0cmllcyB0byB1c2UgdGhlIHNhbWUgSS9PIG9iamVjdCAodHlwaWNhbGx5IHN0ZG91dCBvciBzdGRlcnIpLiAgQSBmYXRhbAorICBlcnJvciBpcyBlbWl0dGVkIGluc3RlYWQuCisKKy0gSXNzdWUgIzIyOTc3OiBGaXhlZCBmb3JtYXR0aW5nIFdpbmRvd3MgZXJyb3IgbWVzc2FnZXMgb24gV2luZS4KKyAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjM0NjY6ICVjLCAlbywgJXgsIGFuZCAlWCBpbiBieXRlcyBmb3JtYXR0aW5nIG5vdyByYWlzZSBUeXBlRXJyb3Igb24KKyAgbm9uLWludGVnZXIgaW5wdXQuCisKKy0gSXNzdWUgIzI0MDQ0OiBGaXggcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGxpc3Quc29ydCBpbiBvdXQgb2YKKyAgbWVtb3J5IGNvbmRpdGlvbnMuCisKKy0gSXNzdWUgIzIxMzU0OiBQeUNGdW5jdGlvbl9OZXcgZnVuY3Rpb24gaXMgZXhwb3NlZCBieSBweXRob24gRExMIGFnYWluLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIzODQwOiB0b2tlbml6ZS5vcGVuKCkgbm93IGNsb3NlcyB0aGUgdGVtcG9yYXJ5IGJpbmFyeSBmaWxlIG9uIGVycm9yCisgIHRvIGZpeCBhIHJlc291cmNlIHdhcm5pbmcuCisKKy0gSXNzdWUgIzE2OTE0OiBuZXcgZGVidWdsZXZlbCAyIGluIHNtdHBsaWIgYWRkcyB0aW1lc3RhbXBzIHRvIGRlYnVnIG91dHB1dC4KKworLSBJc3N1ZSAjNzE1OTogdXJsbGliLnJlcXVlc3Qgbm93IHN1cHBvcnRzIHNlbmRpbmcgYXV0aCBjcmVkZW50aWFscworICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBmaXJzdCA0MDEuICBUaGlzIGVuaGFuY2VtZW50IGlzIGEgc3VwZXJzZXQgb2YgdGhlCisgIGVuaGFuY2VtZW50IGZyb20gaXNzdWUgIzE5NDk0IGFuZCBzdXBlcnNlZGVzIHRoYXQgY2hhbmdlLgorCistIElzc3VlICMyMzcwMzogRml4IGEgcmVncmVzc2lvbiBpbiB1cmxqb2luKCkgaW50cm9kdWNlZCBpbiA5MDFlNGU1MmIyMGEuCisgIFBhdGNoIGJ5IERlbWlhbiBCcmVjaHQuCisKKy0gSXNzdWUgIzQyNTQ6IEFkZHMgX2N1cnNlcy51cGRhdGVfbGluZXNfY29scygpLiAgUGF0Y2ggYnkgQXJub24gWWFhcmkKKworLSBJc3N1ZSAjMTk5MzM6IFByb3ZpZGUgZGVmYXVsdCBhcmd1bWVudCBmb3IgbmRpZ2l0cyBpbiByb3VuZC4gUGF0Y2ggYnkKKyAgVmFqcmFza3kgS29rLgorCistIElzc3VlICMyMzE5MzogQWRkIGEgbnVtZXJpY19vd25lciBwYXJhbWV0ZXIgdG8KKyAgdGFyZmlsZS5UYXJGaWxlLmV4dHJhY3QgYW5kIHRhcmZpbGUuVGFyRmlsZS5leHRyYWN0YWxsLiBQYXRjaCBieQorICBNaWNoYWVsIFZvZ3QgYW5kIEVyaWMgU21pdGguCisKKy0gSXNzdWUgIzIzMzQyOiBBZGQgYSBzdWJwcm9jZXNzLnJ1bigpIGZ1bmN0aW9uIHRoYW4gcmV0dXJucyBhIENhbGxlZFByb2Nlc3MKKyAgaW5zdGFuY2UgZm9yIGEgbW9yZSBjb25zaXN0ZW50IEFQSSB0aGFuIHRoZSBleGlzdGluZyBjYWxsKiBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzIxMjE3OiBpbnNwZWN0LmdldHNvdXJjZWxpbmVzKCkgbm93IHRyaWVzIHRvIGNvbXB1dGUgdGhlIHN0YXJ0IGFuZCBlbmQKKyAgbGluZXMgZnJvbSB0aGUgY29kZSBvYmplY3QsIGZpeGluZyBhbiBpc3N1ZSB3aGVuIGEgbGFtYmRhIGZ1bmN0aW9uIGlzIHVzZWQgYXMKKyAgZGVjb3JhdG9yIGFyZ3VtZW50LiBQYXRjaCBieSBUaG9tYXMgQmFsbGluZ2VyIGFuZCBBbGxpc29uIEthcHR1ci4KKworLSBJc3N1ZSAjMjQ1MjE6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiB0aGUgcGlja2xlIG1vZHVsZS4KKworLSBJc3N1ZSAjMjI5MzE6IEFsbG93ICdbJyBhbmQgJ10nIGluIGNvb2tpZSB2YWx1ZXMuCisKKy0gVGhlIGtleXdvcmRzIGF0dHJpYnV0ZSBvZiBmdW5jdG9vbHMucGFydGlhbCBpcyBub3cgYWx3YXlzIGEgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjMjM4MTE6IEFkZCBtaXNzaW5nIG5ld2xpbmUgdG8gdGhlIFB5Q29tcGlsZUVycm9yIGVycm9yIG1lc3NhZ2UuCisgIFBhdGNoIGJ5IEFsZXggU2hrb3AuCisKKy0gSXNzdWUgIzIxMTE2OiBBdm9pZCBibG93aW5nIG1lbW9yeSB3aGVuIGFsbG9jYXRpbmcgYSBtdWx0aXByb2Nlc3Npbmcgc2hhcmVkCisgIGFycmF5IHRoYXQncyBsYXJnZXIgdGhhbiA1MCUgb2YgdGhlIGF2YWlsYWJsZSBSQU0uICBQYXRjaCBieSBNw6lkw6lyaWMgQm9xdWllbi4KKworLSBJc3N1ZSAjMjI5ODI6IEltcHJvdmUgQk9NIGhhbmRsaW5nIHdoZW4gc2Vla2luZyB0byBtdWx0aXBsZSBwb3NpdGlvbnMgb2YKKyAgYSB3cml0YWJsZSB0ZXh0IGZpbGUuCisKKy0gSXNzdWUgIzIzNDY0OiBSZW1vdmVkIGRlcHJlY2F0ZWQgYXN5bmNpbyBKb2luYWJsZVF1ZXVlLgorCistIElzc3VlICMyMzUyOTogTGltaXQgdGhlIHNpemUgb2YgZGVjb21wcmVzc2VkIGRhdGEgd2hlbiByZWFkaW5nIGZyb20KKyAgR3ppcEZpbGUsIEJaMkZpbGUgb3IgTFpNQUZpbGUuICBUaGlzIGRlZmVhdHMgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrcworICB1c2luZyBjb21wcmVzc2VkIGJvbWJzIChpLmUuIGNvbXByZXNzZWQgcGF5bG9hZHMgd2hpY2ggZGVjb21wcmVzcyB0byBhIGh1Z2UKKyAgc2l6ZSkuICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyIGFuZCBOaWtvbGF1cyBSYXRoLgorCistIElzc3VlICMyMTg1OTogQWRkZWQgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGlvLkZpbGVJTy4KKworLSBJc3N1ZSAjMjM4NjU6IGNsb3NlKCkgbWV0aG9kcyBpbiBtdWx0aXBsZSBtb2R1bGVzIG5vdyBhcmUgaWRlbXBvdGVudCBhbmQgbW9yZQorICByb2J1c3QgYXQgc2h1dGRvd24uIElmIHRoZXkgbmVlZCB0byByZWxlYXNlIG11bHRpcGxlIHJlc291cmNlcywgYWxsIGFyZQorICByZWxlYXNlZCBldmVuIGlmIGVycm9ycyBvY2N1ci4KKworLSBJc3N1ZSAjMjM0MDA6IFJhaXNlIHNhbWUgZXhjZXB0aW9uIG9uIGJvdGggUHl0aG9uIDIgYW5kIDMgaWYgc2VtX29wZW4gaXMgbm90CisgIGF2YWlsYWJsZS4gIFBhdGNoIGJ5IERhdmluIFBvdHRzLgorCistIElzc3VlICMxMDgzODogVGhlIHN1YnByb2Nlc3Mgbm93IG1vZHVsZSBpbmNsdWRlcyBTdWJwcm9jZXNzRXJyb3IgYW5kCisgIFRpbWVvdXRFcnJvciBpbiBpdHMgbGlzdCBvZiBleHBvcnRlZCBuYW1lcyBmb3IgdGhlIHVzZXJzIHdpbGQgZW5vdWdoCisgIHRvIHVzZSBgYGZyb20gc3VicHJvY2VzcyBpbXBvcnQgKmBgLgorCistIElzc3VlICMyMzQxMTogQWRkZWQgRGVmcmFnUmVzdWx0LCBQYXJzZVJlc3VsdCwgU3BsaXRSZXN1bHQsIERlZnJhZ1Jlc3VsdEJ5dGVzLAorICBQYXJzZVJlc3VsdEJ5dGVzLCBhbmQgU3BsaXRSZXN1bHRCeXRlcyB0byB1cmxsaWIucGFyc2UuX19hbGxfXy4KKyAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjM4ODE6IHVybGxpYi5yZXF1ZXN0LmZ0cHdyYXBwZXIgY29uc3RydWN0b3Igbm93IGNsb3NlcyB0aGUgc29ja2V0IGlmCisgIHRoZSBGVFAgY29ubmVjdGlvbiBmYWlsZWQgdG8gZml4IGEgUmVzb3VyY2VXYXJuaW5nLgorCistIElzc3VlICMyMzg1MzogOm1ldGg6YHNvY2tldC5zb2NrZXQuc2VuZGFsbGAgZG9lcyBubyBtb3JlIHJlc2V0IHRoZSBzb2NrZXQKKyAgdGltZW91dCBlYWNoIHRpbWUgZGF0YSBpcyBzZW50IHN1Y2Nlc3NmdWxseS4gVGhlIHNvY2tldCB0aW1lb3V0IGlzIG5vdyB0aGUKKyAgbWF4aW11bSB0b3RhbCBkdXJhdGlvbiB0byBzZW5kIGFsbCBkYXRhLgorCistIElzc3VlICMyMjcyMTogQW4gb3JkZXIgb2YgbXVsdGlsaW5lIHBwcmludCBvdXRwdXQgb2Ygc2V0IG9yIGRpY3QgY29udGFpbmluZworICBvcmRlcmFibGUgYW5kIG5vbi1vcmRlcmFibGUgZWxlbWVudHMgbm8gbG9uZ2VyIGRlcGVuZHMgb24gaXRlcmF0aW9uIG9yZGVyIG9mCisgIHNldCBvciBkaWN0LgorCistIElzc3VlICMxNTEzMzogX3RraW50ZXIudGthcHAuZ2V0Ym9vbGVhbigpIG5vdyBzdXBwb3J0cyBUY2xfT2JqIGFuZCBhbHdheXMKKyAgcmV0dXJucyBib29sLiAgdGtpbnRlci5Cb29sZWFuVmFyIG5vdyB2YWxpZGF0ZXMgaW5wdXQgdmFsdWVzIChhY2NlcHRlZCBib29sLAorICBpbnQsIHN0ciwgYW5kIFRjbF9PYmopLiAgdGtpbnRlci5Cb29sZWFuVmFyLmdldCgpIG5vdyBhbHdheXMgcmV0dXJucyBib29sLgorCistIElzc3VlICMxMDU5MDogeG1sLnNheC5wYXJzZVN0cmluZygpIG5vdyBzdXBwb3J0cyBzdHJpbmcgYXJndW1lbnQuCisKKy0gSXNzdWUgIzIzMzM4OiBGaXhlZCBmb3JtYXR0aW5nIGN0eXBlcyBlcnJvciBtZXNzYWdlcyBvbiBDeWd3aW4uCisgIFBhdGNoIGJ5IE1ha290byBLYXRvLgorCistIElzc3VlICMxNTU4MjogaW5zcGVjdC5nZXRkb2MoKSBub3cgZm9sbG93cyBpbmhlcml0YW5jZSBjaGFpbnMuCisKKy0gSXNzdWUgIzIxNzU6IFNBWCBwYXJzZXJzIG5vdyBzdXBwb3J0IGEgY2hhcmFjdGVyIHN0cmVhbSBvZiBJbnB1dFNvdXJjZSBvYmplY3QuCisKKy0gSXNzdWUgIzE2ODQwOiBUa2ludGVyIG5vdyBzdXBwb3J0cyA2NC1iaXQgaW50ZWdlcnMgYWRkZWQgaW4gVGNsIDguNCBhbmQKKyAgYXJiaXRyYXJ5IHByZWNpc2lvbiBpbnRlZ2VycyBhZGRlZCBpbiBUY2wgOC41LgorCistIElzc3VlICMyMzgzNDogRml4IHNvY2tldC5zZW5kdG8oKSwgdXNlIHRoZSBDIFB5X3NzaXplX3QgdHlwZSB0byBzdG9yZSB0aGUKKyAgcmVzdWx0IG9mIHNlbmR0bygpIGluc3RlYWQgb2YgdGhlIEMgaW50IHR5cGUuCisKKy0gSXNzdWUgIzIzNjE4OiA6bWV0aDpgc29ja2V0LnNvY2tldC5jb25uZWN0YCBub3cgd2FpdHMgdW50aWwgdGhlIGNvbm5lY3Rpb24KKyAgY29tcGxldGVzIGluc3RlYWQgb2YgcmFpc2luZyA6ZXhjOmBJbnRlcnJ1cHRlZEVycm9yYCBpZiB0aGUgY29ubmVjdGlvbiBpcworICBpbnRlcnJ1cHRlZCBieSBzaWduYWxzLCBzaWduYWwgaGFuZGxlcnMgZG9uJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCB0aGUKKyAgc29ja2V0IGlzIGJsb2NraW5nIG9yIGhhcyBhIHRpbWVvdXQuIDptZXRoOmBzb2NrZXQuc29ja2V0LmNvbm5lY3RgIHN0aWxsCisgIHJhaXNlIDpleGM6YEludGVycnVwdGVkRXJyb3JgIGZvciBub24tYmxvY2tpbmcgc29ja2V0cy4KKworLSBJc3N1ZSAjMjE1MjY6IFRraW50ZXIgbm93IHN1cHBvcnRzIG5ldyBib29sZWFuIHR5cGUgaW4gVGNsIDguNS4KKworLSBJc3N1ZSAjMjM4MzY6IEZpeCB0aGUgZmF1bHRoYW5kbGVyIG1vZHVsZSB0byBoYW5kbGUgcmVlbnRyYW50IGNhbGxzIHRvCisgIGl0cyBzaWduYWwgaGFuZGxlcnMuCisKKy0gSXNzdWUgIzIzODM4OiBsaW5lY2FjaGUgbm93IGNsZWFycyB0aGUgY2FjaGUgYW5kIHJldHVybnMgYW4gZW1wdHkgcmVzdWx0IG9uCisgIE1lbW9yeUVycm9yLgorCistIElzc3VlICMxMDM5NTogQWRkZWQgb3MucGF0aC5jb21tb25wYXRoKCkuIEltcGxlbWVudGVkIGluIHBvc2l4cGF0aCBhbmQgbnRwYXRoLgorICBCYXNlZCBvbiBwYXRjaCBieSBSYWZpayBEcmFvdWkuCisKKy0gSXNzdWUgIzIzNjExOiBTZXJpYWxpemluZyBtb3JlICJsb29rdXBhYmxlIiBvYmplY3RzIChzdWNoIGFzIHVuYm91bmQgbWV0aG9kcworICBvciBuZXN0ZWQgY2xhc3Nlcykgbm93IGFyZSBzdXBwb3J0ZWQgd2l0aCBwaWNrbGUgcHJvdG9jb2xzIDwgNC4KKworLSBJc3N1ZSAjMTM1ODM6IHNxbGl0ZTMuUm93IG5vdyBzdXBwb3J0cyBzbGljZSBpbmRleGluZy4KKworLSBJc3N1ZSAjMTg0NzM6IEZpeGVkIDJ0bzMgYW5kIDN0bzIgY29tcGF0aWJsZSBwaWNrbGUgbWFwcGluZ3MuICBGaXhlZAorICBhbWJpZ2lvdXMgcmV2ZXJzZSBtYXBwaW5ncy4gIEFkZGVkIG1hbnkgbmV3IG1hcHBpbmdzLiAgSW1wb3J0IG1hcHBpbmcgaXMgbm8KKyAgbG9uZ2VyIGFwcGxpZWQgdG8gbW9kdWxlcyBhbHJlYWR5IG1hcHBlZCB3aXRoIGZ1bGwgbmFtZSBtYXBwaW5nLgorCistIElzc3VlICMyMzQ4NTogc2VsZWN0LnNlbGVjdCgpIGlzIG5vdyByZXRyaWVkIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUKKyAgcmVjb21wdXRlZCB0aW1lb3V0IHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIGV4Y2VwdCBpZiB0aGUgc2lnbmFsIGhhbmRsZXIKKyAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gVGhpcyBjaGFuZ2UgaXMgcGFydCBvZiB0aGUgUEVQIDQ3NS4KKworLSBJc3N1ZSAjMjM3NTI6IFdoZW4gYnVpbHQgZnJvbSBhbiBleGlzdGluZyBmaWxlIGRlc2NyaXB0b3IsIGlvLkZpbGVJTygpIG5vdworICBvbmx5IGNhbGxzIGZzdGF0KCkgb25jZS4gQmVmb3JlIGZzdGF0KCkgd2FzIGNhbGxlZCB0d2ljZSwgd2hpY2ggd2FzIG5vdAorICBuZWNlc3NhcnkuCisKKy0gSXNzdWUgIzIzNzA0OiBjb2xsZWN0aW9ucy5kZXF1ZSgpIG9iamVjdHMgbm93IHN1cHBvcnQgX19hZGRfXywgX19tdWxfXywgYW5kCisgIF9faW11bF9fKCkuCisKKy0gSXNzdWUgIzIzMTcxOiBjc3YuV3JpdGVyLndyaXRlcm93KCkgbm93IHN1cHBvcnRzIGFyYml0cmFyeSBpdGVyYWJsZXMuCisKKy0gSXNzdWUgIzIzNzQ1OiBUaGUgbmV3IGVtYWlsIGhlYWRlciBwYXJzZXIgbm93IGhhbmRsZXMgZHVwbGljYXRlIE1JTUUKKyAgcGFyYW1ldGVyIG5hbWVzIHdpdGhvdXQgZXJyb3IsIHNpbWlsYXIgdG8gaG93IGdldF9wYXJhbSBiZWhhdmVzLgorCistIElzc3VlICMyMjExNzogRml4IG9zLnV0aW1lKCksIGl0IG5vdyByb3VuZHMgdGhlIHRpbWVzdGFtcCB0b3dhcmRzIG1pbnVzCisgIGluZmluaXR5ICgtaW5mKSBpbnN0ZWFkIG9mIHJvdW5kaW5nIHRvd2FyZHMgemVyby4KKworLSBJc3N1ZSAjMjMzMTA6IEZpeCBNYWdpY01vY2sncyBpbml0aWFsaXplciB0byB3b3JrIHdpdGggX19tZXRob2RzX18sIGp1c3QKKyAgbGlrZSBjb25maWd1cmVfbW9jaygpLiAgUGF0Y2ggYnkgS2FzaWEgSmFjaGltLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMjM4MTc6IEZyZWVCU0Qgbm93IHVzZXMgIjEuMCIgaW4gdGhlIFNPVkVSU0lPTiBhcyBvdGhlciBvcGVyYXRpbmcKKyAgc3lzdGVtcywgaW5zdGVhZCBvZiBqdXN0ICIxIi4KKworLSBJc3N1ZSAjMjM1MDE6IEFyZ3VtZW50IENsaW5pYyBub3cgZ2VuZXJhdGVzIGNvZGUgaW50byBzZXBhcmF0ZSBmaWxlcyBieSBkZWZhdWx0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjM3OTk6IEFkZGVkIHRlc3Quc3VwcG9ydC5zdGFydF90aHJlYWRzKCkgZm9yIHJ1bm5pbmcgYW5kCisgIGNsZWFuaW5nIHVwIG11bHRpcGxlIHRocmVhZHMuCisKKy0gSXNzdWUgIzIyMzkwOiB0ZXN0LnJlZ3J0ZXN0IG5vdyBlbWl0cyBhIHdhcm5pbmcgaWYgdGVtcG9yYXJ5IGZpbGVzIG9yCisgIGRpcmVjdG9yaWVzIGFyZSBsZWZ0IGFmdGVyIHJ1bm5pbmcgYSB0ZXN0LgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTgxMjg6IHB5Z2V0dGV4dCBub3cgdXNlcyBzdGFuZGFyZCArTk5OTiBmb3JtYXQgaW4gdGhlCisgIFBPVC1DcmVhdGlvbi1EYXRlIGhlYWRlci4KKworLSBJc3N1ZSAjMjM5MzU6IEFyZ3VtZW50IENsaW5pYydzIHVuZGVyc3RhbmRpbmcgb2YgZm9ybWF0IHVuaXRzCisgIGFjY2VwdGluZyBieXRlcywgYnl0ZWFycmF5cywgYW5kIGJ1ZmZlcnMgaXMgbm93IGNvbnNpc3RlbnQgd2l0aAorICBib3RoIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzIzOTQ0OiBBcmd1bWVudCBDbGluaWMgbm93IHdyYXBzIGxvbmcgaW1wbCBwcm90b3R5cGVzIGF0IGNvbHVtbiA3OC4KKworLSBJc3N1ZSAjMjA1ODY6IEFyZ3VtZW50IENsaW5pYyBub3cgZW5zdXJlcyB0aGF0IGZ1bmN0aW9ucyB3aXRob3V0IGRvY3N0cmluZ3MKKyAgaGF2ZSBzaWduYXR1cmVzLgorCistIElzc3VlICMyMzQ5MjogQXJndW1lbnQgQ2xpbmljIG5vdyBnZW5lcmF0ZXMgYXJndW1lbnQgcGFyc2luZyBjb2RlIHdpdGgKKyAgUHlBcmdfUGFyc2UgaW5zdGVhZCBvZiBQeUFyZ19QYXJzZVR1cGxlIGlmIHBvc3NpYmxlLgorCistIElzc3VlICMyMzUwMDogQXJndW1lbnQgQ2xpbmljIGlzIG5vdyBzbWFydGVyIGFib3V0IGdlbmVyYXRpbmcgdGhlICIjaWZuZGVmIgorICAoZW1wdHkpIGRlZmluaXRpb24gb2YgdGhlIG1ldGhvZGRlZiBtYWNybzogaXQncyBvbmx5IGdlbmVyYXRlZCBvbmNlLCBldmVuCisgIGlmIEFyZ3VtZW50IENsaW5pYyBwcm9jZXNzZXMgdGhlIHNhbWUgc3ltYm9sIG11bHRpcGxlIHRpbWVzLCBhbmQgaXQncyBlbWl0dGVkCisgIGF0IHRoZSBlbmQgb2YgYWxsIHByb2Nlc3NpbmcgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGZpcnN0IHVzZS4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzIzOTk4OiBQeUltcG9ydF9SZUluaXRMb2NrKCkgbm93IGNoZWNrcyBmb3IgbG9jayBhbGxvY2F0aW9uIGVycm9yCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy41LjAgYWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNS0wMy0yOAorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjM1NzM6IEluY3JlYXNlZCBwZXJmb3JtYW5jZSBvZiBzdHJpbmcgc2VhcmNoIG9wZXJhdGlvbnMgKHN0ci5maW5kLAorICBzdHIuaW5kZXgsIHN0ci5jb3VudCwgdGhlIGluIG9wZXJhdG9yLCBzdHIuc3BsaXQsIHN0ci5wYXJ0aXRpb24pIHdpdGgKKyAgYXJndW1lbnRzIG9mIGRpZmZlcmVudCBraW5kcyAoVUNTMSwgVUNTMiwgVUNTNCkuCisKKy0gSXNzdWUgIzIzNzUzOiBQeXRob24gZG9lc24ndCBzdXBwb3J0IGFueW1vcmUgcGxhdGZvcm1zIHdpdGhvdXQgc3RhdCgpIG9yCisgIGZzdGF0KCksIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIHJlcXVpcmVkLgorCistIElzc3VlICMyMzY4MTogVGhlIC1iIG9wdGlvbiBub3cgYWZmZWN0cyBjb21wYXJpc29ucyBvZiBieXRlcyB3aXRoIGludC4KKworLSBJc3N1ZSAjMjM2MzI6IE1lbW9yeXZpZXdzIG5vdyBhbGxvdyB0dXBsZSBpbmRleGluZyAoaW5jbHVkaW5nIGZvcgorICBtdWx0aS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cykuCisKKy0gSXNzdWUgIzIzMTkyOiBGaXhlZCBnZW5lcmF0b3IgbGFtYmRhcy4gIFBhdGNoIGJ5IEJydW5vIENhdWV0LgorCistIElzc3VlICMyMzYyOTogRml4IHRoZSBkZWZhdWx0IF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIHZhcmlhYmxlLXNpemVkCisgIG9iamVjdHMuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQyNjA6IFRoZSBncm91cGluZGV4IGF0dHJpYnV0ZSBvZiByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBvYmplY3QKKyAgbm93IGlzIG5vbi1tb2RpZmlhYmxlIG1hcHBpbmcuCisKKy0gSXNzdWUgIzIzNzkyOiBJZ25vcmUgS2V5Ym9hcmRJbnRlcnJ1cHQgd2hlbiB0aGUgcHlkb2MgcGFnZXIgaXMgYWN0aXZlLgorICBUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN0YW5kYXJkIHVuaXggcGFnZXJzLCBhbmQgcHJldmVudHMKKyAgcGlwZXBhZ2VyIGZyb20gc2h1dHRpbmcgZG93biB3aGlsZSB0aGUgcGFnZXIgaXRzZWxmIGlzIHN0aWxsIHJ1bm5pbmcuCisKKy0gSXNzdWUgIzIzNzc1OiBwcHJpbnQoKSBvZiBPcmRlcmVkRGljdCBub3cgb3V0cHV0cyB0aGUgc2FtZSByZXByZXNlbnRhdGlvbgorICBhcyByZXByKCkuCisKKy0gSXNzdWUgIzIzNzY1OiBSZW1vdmVkIElzQmFkU3RyaW5nUHRyIGNhbGxzIGluIGN0eXBlcworCistIElzc3VlICMyMjM2NDogSW1wcm92ZWQgc29tZSByZSBlcnJvciBtZXNzYWdlcyB1c2luZyByZWdleCBmb3IgaGludHMuCisKKy0gSXNzdWUgIzIzNzQyOiBudHBhdGguZXhwYW5kdmFycygpIG5vIGxvbmdlciBsb3NlcyB1bmJhbGFuY2VkIHNpbmdsZSBxdW90ZXMuCisKKy0gSXNzdWUgIzIxNzE3OiBUaGUgemlwZmlsZS5aaXBGaWxlLm9wZW4gZnVuY3Rpb24gbm93IHN1cHBvcnRzICd4JyAoZXhjbHVzaXZlCisgIGNyZWF0aW9uKSBtb2RlLgorCistIElzc3VlICMyMTgwMjogVGhlIHJlYWRlciBpbiBCdWZmZXJlZFJXUGFpciBub3cgaXMgY2xvc2VkIGV2ZW4gd2hlbiBjbG9zaW5nCisgIHdyaXRlciBmYWlsZWQgaW4gQnVmZmVyZWRSV1BhaXIuY2xvc2UoKS4KKworLSBJc3N1ZSAjMjM2MjI6IFVua25vd24gZXNjYXBlcyBpbiByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgY29uc2lzdCBvZiBgYCdcJ2BgCisgIGFuZCBBU0NJSSBsZXR0ZXIgbm93IHJhaXNlIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgd2lsbCBiZSBmb3JiaWRkZW4gaW4KKyAgUHl0aG9uIDMuNi4KKworLSBJc3N1ZSAjMjM2NzE6IHN0cmluZy5UZW1wbGF0ZSBub3cgYWxsb3dzIHNwZWNpZnlpbmcgdGhlICJzZWxmIiBwYXJhbWV0ZXIgYXMKKyAgYSBrZXl3b3JkIGFyZ3VtZW50LiAgc3RyaW5nLkZvcm1hdHRlciBub3cgYWxsb3dzIHNwZWNpZnlpbmcgdGhlICJzZWxmIiBhbmQKKyAgdGhlICJmb3JtYXRfc3RyaW5nIiBwYXJhbWV0ZXJzIGFzIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMyMzUwMjogVGhlIHBwcmludCBtb2R1bGUgbm93IHN1cHBvcnRzIG1hcHBpbmcgcHJveGllcy4KKworLSBJc3N1ZSAjMTc1MzA6IHBwcmludCBub3cgd3JhcHMgbG9uZyBieXRlcyBvYmplY3RzIGFuZCBieXRlYXJyYXlzLgorCistIElzc3VlICMyMjY4NzogRml4ZWQgc29tZSBjb3JuZXIgY2FzZXMgaW4gYnJlYWtpbmcgd29yZHMgaW4gdGV0eHR3cmFwLgorICBHb3QgcmlkIG9mIHF1YWRyYXRpYyBjb21wbGV4aXR5IGluIGJyZWFraW5nIGxvbmcgd29yZHMuCisKKy0gSXNzdWUgIzQ3Mjc6IFRoZSBjb3B5IG1vZHVsZSBub3cgdXNlcyBwaWNrbGUgcHJvdG9jb2wgNCAoUEVQIDMxNTQpIGFuZAorICBzdXBwb3J0cyBjb3B5aW5nIG9mIGluc3RhbmNlcyBvZiBjbGFzc2VzIHdob3NlIF9fbmV3X18gbWV0aG9kIHRha2VzCisgIGtleXdvcmQtb25seSBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzIzNDkxOiBBZGRlZCBhIHppcGFwcCBtb2R1bGUgdG8gc3VwcG9ydCBjcmVhdGluZyBleGVjdXRhYmxlIHppcAorICBmaWxlIGFyY2hpdmVzIG9mIFB5dGhvbiBjb2RlLiBSZWdpc3RlcmVkICIucHl6IiBhbmQgIi5weXp3IiBleHRlbnNpb25zCisgIG9uIFdpbmRvd3MgZm9yIHRoZXNlIGFyY2hpdmVzIChQRVAgNDQxKS4KKworLSBJc3N1ZSAjMjM2NTc6IEF2b2lkIGV4cGxpY2l0IGNoZWNrcyBmb3Igc3RyIGluIHppcGFwcCwgYWRkaW5nIHN1cHBvcnQKKyAgZm9yIHBhdGhsaWIuUGF0aCBvYmplY3RzIGFzIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMjM2ODg6IEFkZGVkIHN1cHBvcnQgb2YgYXJiaXRyYXJ5IGJ5dGVzLWxpa2Ugb2JqZWN0cyBhbmQgYXZvaWRlZAorICB1bm5lY2Vzc2FyeSBjb3B5aW5nIG9mIG1lbW9yeXZpZXcgaW4gZ3ppcC5HemlwRmlsZS53cml0ZSgpLgorICBPcmlnaW5hbCBwYXRjaCBieSBXb2xmZ2FuZyBNYWllci4KKworLSBJc3N1ZSAjMjMyNTI6IEFkZGVkIHN1cHBvcnQgZm9yIHdyaXRpbmcgWklQIGZpbGVzIHRvIHVuc2Vla2FibGUgc3RyZWFtcy4KKworLSBJc3N1ZSAjMjM2NDc6IEluY3JlYXNlIGltcGFsaWIncyBNQVhMSU5FIHRvIGFjY29tbW9kYXRlIG1vZGVybiBtYWlsYm94IHNpemVzLgorCistIElzc3VlICMyMzUzOTogSWYgYm9keSBpcyBOb25lLCBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5yZXF1ZXN0IG5vdyBzZXRzCisgIENvbnRlbnQtTGVuZ3RoIHRvIDAgZm9yIFBVVCwgUE9TVCwgYW5kIFBBVENIIGhlYWRlcnMgdG8gYXZvaWQgNDExIGVycm9ycyBmcm9tCisgIHNvbWUgd2ViIHNlcnZlcnMuCisKKy0gSXNzdWUgIzIyMzUxOiBUaGUgbm50cGxpYi5OTlRQIGNvbnN0cnVjdG9yIG5vIGxvbmdlciBsZWF2ZXMgdGhlIGNvbm5lY3Rpb24KKyAgYW5kIHNvY2tldCBvcGVuIHVudGlsIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBjbGVhbnMgdGhlbSB1cC4gIFBhdGNoIGJ5CisgIE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzIzNzA0OiBjb2xsZWN0aW9ucy5kZXF1ZSgpIG9iamVjdHMgbm93IHN1cHBvcnQgbWV0aG9kcyBmb3IgaW5kZXgoKSwKKyAgaW5zZXJ0KCksIGFuZCBjb3B5KCkuICBUaGlzIGFsbG93cyBkZXF1ZXMgdG8gYmUgcmVnaXN0ZXJlZCBhcyBhCisgIE11dGFibGVTZXF1ZW5jZSBhbmQgaXQgaW1wcm92ZXMgdGhlaXIgc3Vic3RpdHV0YWJpbGl0eSBmb3IgbGlzdHMuCisKKy0gSXNzdWUgIzIzNzE1OiA6ZnVuYzpgc2lnbmFsLnNpZ3dhaXRpbmZvYCBhbmQgOmZ1bmM6YHNpZ25hbC5zaWd0aW1lZHdhaXRgIGFyZQorICBub3cgcmV0cmllZCB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIG5vdCBpbiB0aGUgKnNpZ3NldCogcGFyYW1ldGVyLCBpZgorICB0aGUgc2lnbmFsIGhhbmRsZXIgZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uLiBzaWduYWwuc2lndGltZWR3YWl0KCkKKyAgcmVjb21wdXRlcyB0aGUgdGltZW91dCB3aXRoIGEgbW9ub3RvbmljIGNsb2NrIHdoZW4gaXQgaXMgcmV0cmllZC4KKworLSBJc3N1ZSAjMjMwMDE6IEZldyBmdW5jdGlvbnMgaW4gbW9kdWxlcyBtbWFwLCBvc3NhdWRpb2Rldiwgc29ja2V0LCBzc2wsIGFuZAorICBjb2RlY3MsIHRoYXQgYWNjZXB0ZWQgb25seSByZWFkLW9ubHkgYnl0ZXMtbGlrZSBvYmplY3Qgbm93IGFjY2VwdCB3cml0YWJsZQorICBieXRlcy1saWtlIG9iamVjdCB0b28uCisKKy0gSXNzdWUgIzIzNjQ2OiBJZiB0aW1lLnNsZWVwKCkgaXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIHRoZSBzbGVlcCBpcyBub3cKKyAgcmV0cmllZCB3aXRoIHRoZSByZWNvbXB1dGVkIGRlbGF5LCBleGNlcHQgaWYgdGhlIHNpZ25hbCBoYW5kbGVyIHJhaXNlcyBhbgorICBleGNlcHRpb24gKFBFUCA0NzUpLgorCistIElzc3VlICMyMzEzNjogX3N0cnB0aW1lIG5vdyB1bmlmb3JtbHkgaGFuZGxlcyBhbGwgZGF5cyBpbiB3ZWVrIDAsIGluY2x1ZGluZworICBEZWMgMzAgb2YgcHJldmlvdXMgeWVhci4gIEJhc2VkIG9uIHBhdGNoIGJ5IEppbSBDYXJyb2xsLgorCistIElzc3VlICMyMzcwMDogSXRlcmF0b3Igb2YgTmFtZWRUZW1wb3JhcnlGaWxlIG5vdyBrZWVwcyBhIHJlZmVyZW5jZSB0bworICBOYW1lZFRlbXBvcmFyeUZpbGUgaW5zdGFuY2UuICBQYXRjaCBieSBCb2h1c2xhdiBLYWJyZGEuCisKKy0gSXNzdWUgIzIyOTAzOiBUaGUgZmFrZSB0ZXN0IGNhc2UgY3JlYXRlZCBieSB1bml0dGVzdC5sb2FkZXIgd2hlbiBpdCBmYWlscworICBpbXBvcnRpbmcgYSB0ZXN0IG1vZHVsZSBpcyBub3cgcGlja2xhYmxlLgorCistIElzc3VlICMyMjE4MTogT24gTGludXgsIG9zLnVyYW5kb20oKSBub3cgdXNlcyB0aGUgbmV3IGdldHJhbmRvbSgpIHN5c2NhbGwgaWYKKyAgYXZhaWxhYmxlLCBzeXNjYWxsIGludHJvZHVjZWQgaW4gdGhlIExpbnV4IGtlcm5lbCAzLjE3LiBJdCBpcyBtb3JlIHJlbGlhYmxlCisgIGFuZCBtb3JlIHNlY3VyZSwgYmVjYXVzZSBpdCBhdm9pZHMgdGhlIG5lZWQgb2YgYSBmaWxlIGRlc2NyaXB0b3IgYW5kIHdhaXRzCisgIHVudGlsIHRoZSBrZXJuZWwgaGFzIGVub3VnaCBlbnRyb3B5LgorCistIElzc3VlICMyMjExOiBVcGRhdGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaHR0cC5jb29raWVzLk1vcnNlbCBjbGFzcy4KKyAgU2V0dGluZyBhdHRyaWJ1dGVzIGtleSwgdmFsdWUgYW5kIGNvZGVkX3ZhbHVlIGRpcmVjdGx5IG5vdyBpcyBkZXByZWNhdGVkLgorICB1cGRhdGUoKSBhbmQgc2V0ZGVmYXVsdCgpIG5vdyB0cmFuc2Zvcm0gYW5kIGNoZWNrIGtleXMuICBDb21wYXJpbmcgZm9yCisgIGVxdWFsaXR5IG5vdyB0YWtlcyBpbnRvIGFjY291bnQgYXR0cmlidXRlcyBrZXksIHZhbHVlIGFuZCBjb2RlZF92YWx1ZS4KKyAgY29weSgpIG5vdyByZXR1cm5zIGEgTW9yc2VsLCBub3QgYSBkaWN0LiAgcmVwcigpIG5vdyBjb250YWlucyBhbGwgYXR0cmlidXRlcy4KKyAgT3B0aW1pemVkIGNoZWNraW5nIGtleXMgYW5kIHF1b3RpbmcgdmFsdWVzLiAgQWRkZWQgbmV3IHRlc3RzLgorICBPcmlnaW5hbCBwYXRjaCBieSBEZW1pYW4gQnJlY2h0LgorCistIElzc3VlICMxODk4MzogQWxsb3cgc2VsZWN0aW9uIG9mIG91dHB1dCB1bml0cyBpbiB0aW1laXQuCisgIFBhdGNoIGJ5IEp1bGlhbiBHaW5kaS4KKworLSBJc3N1ZSAjMjM2MzE6IEZpeCB0cmFjZWJhY2suZm9ybWF0X2xpc3Qgd2hlbiBhIHRyYWNlYmFjayBoYXMgYmVlbiBtdXRhdGVkLgorCistIElzc3VlICMyMzU2ODogQWRkIHJkaXZtb2Qgc3VwcG9ydCB0byBNYWdpY01vY2soKSBvYmplY3RzLgorICBQYXRjaCBieSBIw6VrYW4gTMO2dmRhaGwuCisKKy0gSXNzdWUgIzIwNTI6IEFkZCBjaGFyc2V0IHBhcmFtZXRlciB0byBIdG1sRGlmZi5tYWtlX2ZpbGUoKS4KKworLSBJc3N1ZSAjMjM2Njg6IFN1cHBvcnQgb3MudHJ1bmNhdGUgYW5kIG9zLmZ0cnVuY2F0ZSBvbiBXaW5kb3dzLgorCistIElzc3VlICMyMzEzODogRml4ZWQgcGFyc2luZyBjb29raWVzIHdpdGggYWJzZW50IGtleXMgb3IgdmFsdWVzIGluIGNvb2tpZWphci4KKyAgUGF0Y2ggYnkgRGVtaWFuIEJyZWNodC4KKworLSBJc3N1ZSAjMjMwNTE6IG11bHRpcHJvY2Vzc2luZy5Qb29sIG1ldGhvZHMgaW1hcCgpIGFuZCBpbWFwX3Vub3JkZXJlZCgpIG5vdworICBoYW5kbGUgZXhjZXB0aW9ucyByYWlzZWQgYnkgYW4gaXRlcmF0b3IuICBQYXRjaCBieSBBbG9uIERpYW1hbnQgYW5kIERhdmluCisgIFBvdHRzLgorCistIElzc3VlICMyMzU4MTogQWRkIG1hdG11bCBzdXBwb3J0IHRvIE1hZ2ljTW9jay4gUGF0Y2ggYnkgSMOla2FuIEzDtnZkYWhsLgorCistIElzc3VlICMyMzU2NjogZW5hYmxlKCksIHJlZ2lzdGVyKCksIGR1bXBfdHJhY2ViYWNrKCkgYW5kCisgIGR1bXBfdHJhY2ViYWNrX2xhdGVyKCkgZnVuY3Rpb25zIG9mIGZhdWx0aGFuZGxlciBub3cgYWNjZXB0IGZpbGUKKyAgZGVzY3JpcHRvcnMuIFBhdGNoIGJ5IFdlaSBXdS4KKworLSBJc3N1ZSAjMjI5Mjg6IERpc2FibGVkIEhUVFAgaGVhZGVyIGluamVjdGlvbnMgaW4gaHR0cC5jbGllbnQuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IERlbWlhbiBCcmVjaHQuCisKKy0gSXNzdWUgIzIzNjE1OiBNb2R1bGVzIGJ6MiwgdGFyZmlsZSBhbmQgdG9rZW5pemUgbm93IGNhbiBiZSByZWxvYWRlZCB3aXRoCisgIGltcC5yZWxvYWQoKS4gIFBhdGNoIGJ5IFRob21hcyBLbHV5dmVyLgorCistIElzc3VlICMyMzYwNTogb3Mud2FsaygpIG5vdyBjYWxscyBvcy5zY2FuZGlyKCkgaW5zdGVhZCBvZiBvcy5saXN0ZGlyKCkuCisgIFRoZSB1c2FnZSBvZiBvcy5zY2FuZGlyKCkgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIG9zLnN0YXQoKS4KKyAgSW5pdGlhbCBwYXRjaCB3cml0dGVuIGJ5IEJlbiBIb3l0LgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMjM1ODU6IG1ha2UgcGF0Y2hjaGVjayB3aWxsIGVuc3VyZSB0aGUgaW50ZXJwcmV0ZXIgaXMgYnVpbHQuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMyMzU4MzogQWRkZWQgdGVzdHMgZm9yIHN0YW5kYXJkIElPIHN0cmVhbXMgaW4gSURMRS4KKworLSBJc3N1ZSAjMjIyODk6IFByZXZlbnQgdGVzdF91cmxsaWIybmV0IGZhaWx1cmVzIGR1ZSB0byBmdHAgY29ubmVjdGlvbiB0aW1lb3V0LgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjI4MjY6IFRoZSByZXN1bHQgb2Ygb3BlbigpIGluIFRvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkgaXMgbm93IGJldHRlcgorICBjb21wYXRpYmxlIHdpdGggcmVndWxhciBmaWxlcyAoaW4gcGFydGljdWxhciBpdCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQKKyAgbWFuYWdlbWVudCBwcm90b2NvbCkuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy41IGFscGhhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE1LTAzLTA5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMzU3MTogUHlPYmplY3RfQ2FsbCgpIGFuZCBQeUNGdW5jdGlvbl9DYWxsKCkgbm93IHJhaXNlIGEgU3lzdGVtRXJyb3IKKyAgaWYgYSBmdW5jdGlvbiByZXR1cm5zIGEgcmVzdWx0IGFuZCByYWlzZXMgYW4gZXhjZXB0aW9uLiBUaGUgU3lzdGVtRXJyb3IgaXMKKyAgY2hhaW5lZCB0byB0aGUgcHJldmlvdXMgZXhjZXB0aW9uLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIyNTI0OiBOZXcgb3Muc2NhbmRpcigpIGZ1bmN0aW9uLCBwYXJ0IG9mIHRoZSBQRVAgNDcxOiAib3Muc2NhbmRpcigpCisgIGZ1bmN0aW9uIC0tIGEgYmV0dGVyIGFuZCBmYXN0ZXIgZGlyZWN0b3J5IGl0ZXJhdG9yIi4gUGF0Y2ggd3JpdHRlbiBieSBCZW4KKyAgSG95dC4KKworLSBJc3N1ZSAjMjMxMDM6IFJlZHVjZWQgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBJUHY0QWRkcmVzcyBhbmQgSVB2NkFkZHJlc3MuCisKKy0gSXNzdWUgIzIxNzkzOiBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyIGFnYWluIGxvZ3MgcmVzcG9uc2UgY29kZSBhcyBudW1lcmljLAorICBub3QgYXMgc3RyaW5naWZpZWQgZW51bS4gIFBhdGNoIGJ5IERlbWlhbiBCcmVjaHQuCisKKy0gSXNzdWUgIzIzNDc2OiBJbiB0aGUgc3NsIG1vZHVsZSwgZW5hYmxlIE9wZW5TU0wncyBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNUCisgIGZsYWcgb24gY2VydGlmaWNhdGUgc3RvcmVzIHdoZW4gaXQgaXMgYXZhaWxhYmxlLgorCistIElzc3VlICMyMzU3NjogQXZvaWQgc3RhbGxpbmcgaW4gU1NMIHJlYWRzIHdoZW4gRU9GIGhhcyBiZWVuIHJlYWNoZWQgaW4gdGhlCisgIFNTTCBsYXllciBidXQgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiBoYXNuJ3QgYmVlbiBjbG9zZWQuCisKKy0gSXNzdWUgIzIzNTA0OiBBZGRlZCBhbiBfX2FsbF9fIHRvIHRoZSB0eXBlcyBtb2R1bGUuCisKKy0gSXNzdWUgIzIzNTYzOiBPcHRpbWl6ZWQgdXRpbGl0eSBmdW5jdGlvbnMgaW4gdXJsbGliLnBhcnNlLgorCistIElzc3VlICM3ODMwOiBGbGF0dGVuIG5lc3RlZCBmdW5jdG9vbHMucGFydGlhbC4KKworLSBJc3N1ZSAjMjAyMDQ6IEFkZGVkIHRoZSBfX21vZHVsZV9fIGF0dHJpYnV0ZSB0byBfdGtpbnRlciBjbGFzc2VzLgorCistIElzc3VlICMxOTk4MDogSW1wcm92ZWQgaGVscCgpIGZvciBub24tcmVjb2duaXplZCBzdHJpbmdzLiAgaGVscCgnJykgbm93CisgIHNob3dzIHRoZSBoZWxwIG9uIHN0ci4gIGhlbHAoJ2hlbHAnKSBub3cgc2hvd3MgdGhlIGhlbHAgb24gaGVscCgpLgorICBPcmlnaW5hbCBwYXRjaCBieSBNYXJrIExhd3JlbmNlLgorCistIElzc3VlICMyMzUyMTogQ29ycmVjdGVkIHB1cmUgcHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRpbWVkZWx0YSBkaXZpc2lvbi4KKworICogRWxpbWluYXRlZCBPdmVyZmxvd0Vycm9yIGZyb20gdGltZWRlbHRhICogZmxvYXQgZm9yIHNvbWUgZmxvYXRzOworICogQ29ycmVjdGVkIHJvdW5kaW5nIGluIHRpbWVkbHRhIHRydWUgZGl2aXNpb24uCisKKy0gSXNzdWUgIzIxNjE5OiBQb3BlbiBvYmplY3RzIG5vIGxvbmdlciBsZWF2ZSBhIHpvbWJpZSBhZnRlciBleGl0IGluIHRoZSB3aXRoCisgIHN0YXRlbWVudCBpZiB0aGUgcGlwZSB3YXMgYnJva2VuLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjI5MzY6IE1ha2UgaXQgcG9zc2libGUgdG8gc2hvdyBsb2NhbCB2YXJpYWJsZXMgaW4gdHJhY2ViYWNrcyBmb3IKKyAgYm90aCB0aGUgdHJhY2ViYWNrIG1vZHVsZSBhbmQgdW5pdHRlc3QuCisKKy0gSXNzdWUgIzE1OTU1OiBBZGQgYW4gb3B0aW9uIHRvIGxpbWl0IHRoZSBvdXRwdXQgc2l6ZSBpbiBiejIuZGVjb21wcmVzcygpLgorICBQYXRjaCBieSBOaWtvbGF1cyBSYXRoLgorCistIElzc3VlICM2NjM5OiBNb2R1bGUtbGV2ZWwgdHVydGxlIGZ1bmN0aW9ucyBubyBsb25nZXIgcmFpc2UgVGNsRXJyb3IgYWZ0ZXIKKyAgY2xvc2luZyB0aGUgd2luZG93LgorCistIElzc3VlcyAjODE0MjUzLCAjOTE3OTogR3JvdXAgcmVmZXJlbmNlcyBhbmQgY29uZGl0aW9uYWwgZ3JvdXAgcmVmZXJlbmNlcyBub3cKKyAgd29yayBpbiBsb29rYmVoaW5kIGFzc2VydGlvbnMgaW4gcmVndWxhciBleHByZXNzaW9ucy4KKworLSBJc3N1ZSAjMjMyMTU6IE11bHRpYnl0ZSBjb2RlY3Mgd2l0aCBjdXN0b20gZXJyb3IgaGFuZGxlcnMgdGhhdCBpZ25vcmVzIGVycm9ycworICBjb25zdW1lZCB0b28gbXVjaCBtZW1vcnkgYW5kIHJhaXNlZCBTeXN0ZW1FcnJvciBvciBNZW1vcnlFcnJvci4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQWxla3NpIFRvcmhhbW8uCisKKy0gSXNzdWUgIzU3MDA6IGlvLkZpbGVJTygpIGNhbGxlZCBmbHVzaCgpIGFmdGVyIGNsb3NpbmcgdGhlIGZpbGUuCisgIGZsdXNoKCkgd2FzIG5vdCBjYWxsZWQgaW4gY2xvc2UoKSBpZiBjbG9zZWZkPUZhbHNlLgorCistIElzc3VlICMyMzM3NDogRml4ZWQgcHlkb2MgZmFpbHVyZSB3aXRoIG5vbi1BU0NJSSBmaWxlcyB3aGVuIHN0ZG91dCBlbmNvZGluZworICBkaWZmZXJzIGZyb20gZmlsZSBzeXN0ZW0gZW5jb2RpbmcgKGUuZy4gb24gTWFjIE9TKS4KKworLSBJc3N1ZSAjMjM0ODE6IFJlbW92ZSBSQzQgZnJvbSB0aGUgU1NMIG1vZHVsZSdzIGRlZmF1bHQgY2lwaGVyIGxpc3QuCisKKy0gSXNzdWUgIzIxNTQ4OiBGaXggcHlkb2Muc3lub3BzaXMoKSBhbmQgcHlkb2MuYXByb3BvcygpIG9uIG1vZHVsZXMgd2l0aCBlbXB0eQorICBkb2NzdHJpbmdzLgorCistIElzc3VlICMyMjg4NTogRml4ZWQgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGRibS5kdW1iCisgIG1vZHVsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMjMyMzk6IHNzbC5tYXRjaF9ob3N0bmFtZSgpIG5vdyBzdXBwb3J0cyBtYXRjaGluZyBvZiBJUCBhZGRyZXNzZXMuCisKKy0gSXNzdWUgIzIzMTQ2OiBGaXggbWlzaGFuZGxpbmcgb2YgYWJzb2x1dGUgV2luZG93cyBwYXRocyB3aXRoIGZvcndhcmQKKyAgc2xhc2hlcyBpbiBwYXRobGliLgorCistIElzc3VlICMyMzA5NjogUGlja2xlIHJlcHJlc2VudGF0aW9uIG9mIGZsb2F0cyB3aXRoIHByb3RvY29sIDAgbm93IGlzIHRoZSBzYW1lCisgIGZvciBib3RoIFB5dGhvbiBhbmQgQyBpbXBsZW1lbnRhdGlvbnMuCisKKy0gSXNzdWUgIzE5MTA1OiBwcHJpbnQgbm93IG1vcmUgZWZmaWNpZW50bHkgdXNlcyBmcmVlIHNwYWNlIGF0IHRoZSByaWdodC4KKworLSBJc3N1ZSAjMTQ5MTA6IEFkZCBhbGxvd19hYmJyZXYgcGFyYW1ldGVyIHRvIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLiBQYXRjaCBieQorICBKb25hdGhhbiBQYXVnaCwgU3RldmVuIEJldGhhcmQsIHBhdWwgajMgYW5kIERhbmllbCBFcmlrc3Nvbi4KKworLSBJc3N1ZSAjMjE3MTc6IHRhcmZpbGUub3BlbigpIG5vdyBzdXBwb3J0cyAneCcgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZS4KKworLSBJc3N1ZSAjMjMzNDQ6IG1hcnNoYWwuZHVtcHMoKSBpcyBub3cgMjAtMjUlIGZhc3RlciBvbiBhdmVyYWdlLgorCistIElzc3VlICMyMDQxNjogbWFyc2hhbC5kdW1wcygpIHdpdGggcHJvdG9jb2xzIDMgYW5kIDQgaXMgbm93IDQwLTUwJSBmYXN0ZXIgb24KKyAgYXZlcmFnZS4KKworLSBJc3N1ZSAjMjM0MjE6IEZpeGVkIGNvbXByZXNzaW9uIGluIHRhcmZpbGUgQ0xJLiAgUGF0Y2ggYnkgd2R2NDc1OGguCisKKy0gSXNzdWUgIzIzMzY3OiBGaXggcG9zc2libGUgb3ZlcmZsb3dzIGluIHRoZSB1bmljb2RlZGF0YSBtb2R1bGUuCisKKy0gSXNzdWUgIzIzMzYxOiBGaXggcG9zc2libGUgb3ZlcmZsb3cgaW4gV2luZG93cyBzdWJwcm9jZXNzIGNyZWF0aW9uIGNvZGUuCisKKy0gbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyIG5vdyB0YWtlcyBhIHJlc3BlY3RfaGFuZGxlcl9sZXZlbCBrZXl3b3JkCisgIGFyZ3VtZW50IHdoaWNoLCBpZiBzZXQgdG8gVHJ1ZSwgd2lsbCBwYXNzIG1lc3NhZ2VzIHRvIGhhbmRsZXJzIHRha2luZyBoYW5kbGVyCisgIGxldmVscyBpbnRvIGFjY291bnQuCisKKy0gSXNzdWUgIzE5NzA1OiB0dXJ0bGVkZW1vIG5vdyBoYXMgYSB2aXN1YWwgc29ydGluZyBhbGdvcml0aG0gZGVtby4gIE9yaWdpbmFsCisgIHBhdGNoIGZyb20gSmFzb24gWWVvLgorCistIElzc3VlICMyMzgwMTogRml4IGlzc3VlIHdoZXJlIGNnaS5GaWVsZFN0b3JhZ2UgZGlkIG5vdCBhbHdheXMgaWdub3JlIHRoZQorICBlbnRpcmUgcHJlYW1ibGUgdG8gYSBtdWx0aXBhcnQgYm9keS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzIzNDQ1OiBweWRlYnVnIGJ1aWxkcyBub3cgdXNlICJnY2MgLU9nIiB3aGVyZSBwb3NzaWJsZSwgdG8gbWFrZQorICB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgZmFzdGVyLgorCistIElzc3VlICMyMzY4NjogVXBkYXRlIE9TIFggMTAuNSBpbnN0YWxsZXIgYnVpbGQgdG8gdXNlIE9wZW5TU0wgMS4wLjJhLgorCitDIEFQSQorLS0tLS0KKworLSBJc3N1ZSAjMjAyMDQ6IERlcHJlY2F0aW9uIHdhcm5pbmcgaXMgbm93IHJhaXNlZCBmb3IgYnVpbHRpbiB0eXBlcyB3aXRob3V0IHRoZQorICBfX21vZHVsZV9fIGF0dHJpYnV0ZS4KKworV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMyMzQ2NTogSW1wbGVtZW50IFBFUCA0ODYgLSBNYWtlIHRoZSBQeXRob24gTGF1bmNoZXIgYXdhcmUgb2YgdmlydHVhbAorICBlbnZpcm9ubWVudHMuIFBhdGNoIGJ5IFBhdWwgTW9vcmUuCisKKy0gSXNzdWUgIzIzNDM3OiBNYWtlIHVzZXIgc2NyaXB0cyBkaXJlY3RvcnkgdmVyc2lvbmVkIG9uIFdpbmRvd3MuIFBhdGNoIGJ5IFBhdWwKKyAgTW9vcmUuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy41IGFscGhhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE1LTAyLTA4CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMzI4NTogUEVQIDQ3NSAtIEVJTlRSIGhhbmRsaW5nLgorCiAtIElzc3VlICMyMjczNTogRml4IG1hbnkgZWRnZSBjYXNlcyAoaW5jbHVkaW5nIGNyYXNoZXMpIGludm9sdmluZyBjdXN0b20gbXJvKCkKICAgaW1wbGVtZW50YXRpb25zLgogCkBAIC05MTksMTcgKzI2ODQsNDYgQEAKIC0gSXNzdWUgIzIxMjk1OiBSZXZlcnQgc29tZSBjaGFuZ2VzIChpc3N1ZSAjMTY3OTUpIHRvIEFTVCBsaW5lIG51bWJlcnMgYW5kCiAgIGNvbHVtbiBvZmZzZXRzIHRoYXQgY29uc3RpdHV0ZWQgYSByZWdyZXNzaW9uLgogCistIElzc3VlICMyMjk4NjogQWxsb3cgY2hhbmdpbmcgYW4gb2JqZWN0J3MgX19jbGFzc19fIGJldHdlZW4gYSBkeW5hbWljIHR5cGUgYW5kCisgIHN0YXRpYyB0eXBlIGluIHNvbWUgY2FzZXMuCisKKy0gSXNzdWUgIzE1ODU5OiBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KCksIFB5VW5pY29kZV9FbmNvZGVNQkNTKCkgYW5kCisgIFB5VW5pY29kZV9FbmNvZGVDb2RlUGFnZSgpIG5vdyByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIG9iamVjdCBpcyBub3QgYQorICBVbmljb2RlIG9iamVjdC4gRm9yIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoKSwgaXQgd2FzIGFscmVhZHkgdGhlIGNhc2Ugb24KKyAgcGxhdGZvcm1zIG90aGVyIHRoYW4gV2luZG93cy4gUGF0Y2ggd3JpdHRlbiBieSBDYW1wYmVsbCBCYXJ0b24uCisKIC0gSXNzdWUgIzIxNDA4OiBUaGUgZGVmYXVsdCBfX25lX18oKSBub3cgcmV0dXJucyBOb3RJbXBsZW1lbnRlZCBpZiBfX2VxX18oKQogICByZXR1cm5lZCBOb3RJbXBsZW1lbnRlZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCiAKIC0gSXNzdWUgIzIzMzIxOiBGaXhlZCBhIGNyYXNoIGluIHN0ci5kZWNvZGUoKSB3aGVuIGVycm9yIGhhbmRsZXIgcmV0dXJuZWQKICAgcmVwbGFjbWVudCBzdHJpbmcgbG9uZ2VyIHRoYW4gbWFpbGZvcm1lZCBpbnB1dCBkYXRhLgogCistIElzc3VlICMyMjI4NjogVGhlICJiYWNrc2xhc2hyZXBsYWNlIiBlcnJvciBoYW5kbGVycyBub3cgd29ya3Mgd2l0aAorICBkZWNvZGluZyBhbmQgdHJhbnNsYXRpbmcuCisKKy0gSXNzdWUgIzIzMjUzOiBEZWxheS1sb2FkIFNoZWxsRXhlY3V0ZVtBV10gaW4gb3Muc3RhcnRmaWxlIGZvciByZWR1Y2VkCisgIHN0YXJ0dXAgb3ZlcmhlYWQgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMjIwMzg6IHB5YXRvbWljLmggbm93IHVzZXMgc3RkYXRvbWljLmggb3IgR0NDIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IKKyAgYXRvbWljIG1lbW9yeSBhY2Nlc3MgaWYgYXZhaWxhYmxlLiBQYXRjaCB3cml0dGVuIGJ5IFZpdG9yIGRlIExpbWEgYW5kIEd1c3Rhdm8KKyAgVGVtcGxlLgorCistIElzc3VlICMyMDI4NDogJS1pbnRlcnBvbGF0aW9uIChha2EgcHJpbnRmKSBmb3JtYXR0aW5nIGFkZGVkIGZvciBieXRlcyBhbmQKKyAgYnl0ZWFycmF5LgorCiAtIElzc3VlICMyMzA0ODogRml4IGp1bXBpbmcgb3V0IG9mIGFuIGluZmluaXRlIHdoaWxlIGxvb3AgaW4gdGhlIHBkYi4KIAogLSBJc3N1ZSAjMjAzMzU6IGJ5dGVzIGNvbnN0cnVjdG9yIG5vdyByYWlzZXMgVHlwZUVycm9yIHdoZW4gZW5jb2Rpbmcgb3IgZXJyb3JzCiAgIGlzIHNwZWNpZmllZCB3aXRoIG5vbi1zdHJpbmcgYXJndW1lbnQuICBCYXNlZCBvbiBwYXRjaCBieSBSZW5hdWQgQmxhbmNoLgogCistIElzc3VlICMyMjgzNDogSWYgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZW5kcyB1cCBiZWluZyBzZXQgdG8gYQorICBub24tZXhpc3RlbnQgZGlyZWN0b3J5IHRoZW4gaW1wb3J0IHdpbGwgbm8gbG9uZ2VyIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yLgorCistIElzc3VlICMyMjg2OTogTW92ZSB0aGUgaW50ZXJwcmV0ZXIgc3RhcnR1cCAmIHNodXRkb3duIGNvZGUgdG8gYSBuZXcKKyAgZGVkaWNhdGVkIHB5bGlmZWN5Y2xlLmMgbW9kdWxlCisKKy0gSXNzdWUgIzIyODQ3OiBJbXByb3ZlIG1ldGhvZCBjYWNoZSBlZmZpY2llbmN5LgorCiAtIElzc3VlICMyMjMzNTogRml4IGNyYXNoIHdoZW4gdHJ5aW5nIHRvIGVubGFyZ2UgYSBieXRlYXJyYXkgdG8gMHg3ZmZmZmZmZgogICBieXRlcyBvbiBhIDMyLWJpdCBwbGF0Zm9ybS4KIApAQCAtOTM5LDEyICsyNzMzLDI4IEBACiAtIElzc3VlICMyMjY0MzogRml4IGludGVnZXIgb3ZlcmZsb3cgaW4gVW5pY29kZSBjYXNlIG9wZXJhdGlvbnMgKHVwcGVyLCBsb3dlciwKICAgdGl0bGUsIHN3YXBjYXNlLCBjYXNlZm9sZCkuCiAKKy0gSXNzdWUgIzE3NjM2OiBDaXJjdWxhciBpbXBvcnRzIGludm9sdmluZyByZWxhdGl2ZSBpbXBvcnRzIGFyZSBub3cKKyAgc3VwcG9ydGVkLgorCiAtIElzc3VlICMyMjYwNDogRml4IGFzc2VydGlvbiBlcnJvciBpbiBkZWJ1ZyBtb2RlIHdoZW4gZGl2aWRpbmcgYSBjb21wbGV4CiAgIG51bWJlciBieSAobmFuKzBqKS4KIAorLSBJc3N1ZSAjMjEwNTI6IERvIG5vdCByYWlzZSBJbXBvcnRXYXJuaW5nIHdoZW4gc3lzLnBhdGhfaG9va3Mgb3Igc3lzLm1ldGFfcGF0aAorICBhcmUgc2V0IHRvIE5vbmUuCisKKy0gSXNzdWUgIzE2NTE4OiBVc2UgJ2J5dGVzLWxpa2Ugb2JqZWN0IHJlcXVpcmVkJyBpbiBlcnJvciBtZXNzYWdlcyB0aGF0CisgIHByZXZpb3VzbHkgdXNlZCB0aGUgZmFyIG1vcmUgY3J5cHRpYyAiJ3gnIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJ1ZmZlcgorICBwcm90b2NvbC4KKwogLSBJc3N1ZSAjMjI0NzA6IEZpeGVkIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGluICJiYWNrc2xhc2hyZXBsYWNlIiwKICAgInhtbGNoYXJyZWZyZXBsYWNlIiwgYW5kICJzdXJyb2dhdGVwYXNzIiBlcnJvciBoYW5kbGVycy4KIAorLSBJc3N1ZSAjMjI1NDA6IHNwZWVkIHVwIGBQeU9iamVjdF9Jc0luc3RhbmNlYCBhbmQgYFB5T2JqZWN0X0lzU3ViY2xhc3NgIGluIHRoZQorICBjb21tb24gY2FzZSB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQgaGFzIG1ldGFjbGFzcyBgdHlwZWAuCisKKy0gSXNzdWUgIzE4NzExOiBBZGQgYSBuZXcgYFB5RXJyX0Zvcm1hdFZgIGZ1bmN0aW9uLCBzaW1pbGFyIHRvIGBQeUVycl9Gb3JtYXRgCisgIGJ1dCBhY2NlcHRpbmcgYSBgdmFfbGlzdGAgYXJndW1lbnQuCisKIC0gSXNzdWUgIzIyNTIwOiBGaXggb3ZlcmZsb3cgY2hlY2tpbmcgd2hlbiBnZW5lcmF0aW5nIHRoZSByZXByIG9mIGEgdW5pY29kZQogICBvYmplY3QuCiAKQEAgLTk1Miw2ICsyNzYyLDEzOCBAQAogCiAtIElzc3VlICMyMjUxODogRml4IGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGluIGxhdGluLTEgZW5jb2RpbmcuCiAKKy0gSXNzdWUgIzE2MzI0OiBfY2hhcnNldCBwYXJhbWV0ZXIgb2YgTUlNRVRleHQgbm93IGFsc28gYWNjZXB0cworICBlbWFpbC5jaGFyc2V0LkNoYXJzZXQgaW5zdGFuY2VzLiBJbml0aWFsIHBhdGNoIGJ5IENsYXVkZSBQYXJvei4KKworLSBJc3N1ZSAjMTc2NDI4NjogRml4IGluc3BlY3QuZ2V0c291cmNlKCkgdG8gc3VwcG9ydCBkZWNvcmF0ZWQgZnVuY3Rpb25zLgorICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE4NTU0OiBvcy5fX2FsbF9fIGluY2x1ZGVzIHBvc2l4IGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMjEzOTE6IFVzZSBvcy5wYXRoLmFic3BhdGggaW4gdGhlIHNodXRpbCBtb2R1bGUuCisKKy0gSXNzdWUgIzExNDcxOiBhdm9pZCBnZW5lcmF0aW5nIGEgSlVNUF9GT1JXQVJEIGluc3RydWN0aW9uIGF0IHRoZSBlbmQgb2YKKyAgYW4gaWYtYmxvY2sgaWYgdGhlcmUgaXMgbm8gZWxzZS1jbGF1c2UuICBPcmlnaW5hbCBwYXRjaCBieSBFdWdlbmUgVG9kZXIuCisKKy0gSXNzdWUgIzIyMjE1OiBOb3cgVmFsdWVFcnJvciBpcyByYWlzZWQgaW5zdGVhZCBvZiBUeXBlRXJyb3Igd2hlbiBzdHIgb3IgYnl0ZXMKKyAgYXJndW1lbnQgY29udGFpbnMgbm90IHBlcm1pdHRlZCBudWxsIGNoYXJhY3RlciBvciBieXRlLgorCistIElzc3VlICMyMjI1ODogRml4IHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBzZXRfaW5oZXJpdGFibGUoKSBvbiBJbGx1bW9zLgorICBUaGlzIHBsYXRmb3JtIGV4cG9zZXMgdGhlIGZ1bmN0aW9uIGBgaW9jdGwoRklPQ0xFWClgYCwgYnV0IGNhbGxpbmcgaXQgZmFpbHMKKyAgd2l0aCBlcnJubyBpcyBFTk9UVFk6ICJJbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2UiLiBzZXRfaW5oZXJpdGFibGUoKQorICBub3cgZmFsbHMgYmFjayB0byB0aGUgc2xvd2VyIGBgZmNudGwoKWBgIChgYEZfR0VURkRgYCBhbmQgdGhlbiBgYEZfU0VURkRgYCkuCisKKy0gSXNzdWUgIzIxMzg5OiBEaXNwbGF5aW5nIHRoZSBfX3F1YWxuYW1lX18gb2YgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gaW4gdGhlCisgIHJlcHIgb2YgYSBib3VuZCBtZXRob2QuCisKKy0gSXNzdWUgIzIyMjA2OiBVc2luZyBwdGhyZWFkLCBQeVRocmVhZF9jcmVhdGVfa2V5KCkgbm93IHNldHMgZXJybm8gdG8gRU5PTUVNCisgIGFuZCByZXR1cm5zIC0xIChlcnJvcikgb24gaW50ZWdlciBvdmVyZmxvdy4KKworLSBJc3N1ZSAjMjAxODQ6IEFyZ3VtZW50IENsaW5pYyBiYXNlZCBzaWduYXR1cmUgaW50cm9zcGVjdGlvbiBhZGRlZCBmb3IKKyAgMzAgb2YgdGhlIGJ1aWx0aW4gZnVuY3Rpb25zLgorCistIElzc3VlICMyMjExNjogQyBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgKG9mIHRoZSAnYnVpbHRpbl9mdW5jdGlvbl9vcl9tZXRob2QnCisgIHR5cGUpIGNhbiBub3cgYmUgd2Vha3JlZidlZC4gIFBhdGNoIGJ5IFdlaSBXdS4KKworLSBJc3N1ZSAjMjIwNzc6IEltcHJvdmUgaW5kZXggZXJyb3IgbWVzc2FnZXMgZm9yIGJ5dGVhcnJheXMsIGJ5dGVzLCBsaXN0cywKKyAgYW5kIHR1cGxlcyBieSBhZGRpbmcgJ29yIHNsaWNlcycuIEFkZGVkICcsIG5vdCA8dHlwZW5hbWU+JyBmb3IgYnl0ZWFycmF5cy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMyMDE3OTogQXBwbHkgQXJndW1lbnQgQ2xpbmljIHRvIGJ5dGVzIGFuZCBieXRlYXJyYXkuCisgIFBhdGNoIGJ5IFRhbCBFaW5hdC4KKworLSBJc3N1ZSAjMjIwODI6IENsZWFyIGludGVybmVkIHN0cmluZ3MgaW4gc2xvdGRlZnMuCisKKy0gVXBncmFkZSBVbmljb2RlIGRhdGFiYXNlIHRvIFVuaWNvZGUgNy4wLjAuCisKKy0gSXNzdWUgIzIxODk3OiBGaXggYSBjcmFzaCB3aXRoIHRoZSBmX2xvY2FscyBhdHRyaWJ1dGUgd2l0aCBjbG9zdXJlCisgIHZhcmlhYmxlcyB3aGVuIGZyYW1lLmNsZWFyKCkgaGFzIGJlZW4gY2FsbGVkLgorCistIElzc3VlICMyMTIwNTogQWRkIGEgbmV3IGBgX19xdWFsbmFtZV9fYGAgYXR0cmlidXRlIHRvIGdlbmVyYXRvciwgdGhlCisgIHF1YWxpZmllZCBuYW1lLCBhbmQgdXNlIGl0IGluIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhIGdlbmVyYXRvcgorICAoYGByZXByKGdlbilgYCkuIFRoZSBkZWZhdWx0IG5hbWUgb2YgdGhlIGdlbmVyYXRvciAoYGBfX25hbWVfX2BgIGF0dHJpYnV0ZSkKKyAgaXMgbm93IGdldCBmcm9tIHRoZSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBjb2RlLiBVc2UgYGBnZW4uZ2lfY29kZS5jb19uYW1lYGAKKyAgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBjb2RlLgorCistIElzc3VlICMyMTY2OTogV2l0aCB0aGUgYWlkIG9mIGhldXJpc3RpY3MgaW4gU3ludGF4RXJyb3IuX19pbml0X18sIHRoZQorICBwYXJzZXIgbm93IGF0dGVtcHRzIHRvIGdlbmVyYXRlIG1vcmUgbWVhbmluZ2Z1bCAob3IgYXQgbGVhc3QgbW9yZSBzZWFyY2gKKyAgZW5naW5lIGZyaWVuZGx5KSBlcnJvciBtZXNzYWdlcyB3aGVuICJleGVjIiBhbmQgInByaW50IiBhcmUgdXNlZCBhcworICBzdGF0ZW1lbnRzLgorCistIElzc3VlICMyMTY0MjogSW4gdGhlIGNvbmRpdGlvbmFsIGlmLWVsc2UgZXhwcmVzc2lvbiwgYWxsb3cgYW4gaW50ZWdlciB3cml0dGVuCisgIHdpdGggbm8gc3BhY2UgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSBgYGVsc2VgYCBrZXl3b3JkIChlLmcuIGBgVHJ1ZSBpZiA0MmVsc2UKKyAgRmFsc2VgYCkgdG8gYmUgdmFsaWQgc3ludGF4LgorCistIElzc3VlICMyMTUyMzogRml4IG92ZXItcGVzc2ltaXN0aWMgY29tcHV0YXRpb24gb2YgdGhlIHN0YWNrIGVmZmVjdCBvZgorICBzb21lIG9wY29kZXMgaW4gdGhlIGNvbXBpbGVyLiAgVGhpcyBhbHNvIGZpeGVzIGEgcXVhZHJhdGljIGNvbXBpbGF0aW9uCisgIHRpbWUgaXNzdWUgbm90aWNlYWJsZSB3aGVuIGNvbXBpbGluZyBjb2RlIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgImFuZCIKKyAgYW5kICJvciIgb3BlcmF0b3JzLgorCistIElzc3VlICMyMTQxODogRml4IGEgY3Jhc2ggaW4gdGhlIGJ1aWx0aW4gZnVuY3Rpb24gc3VwZXIoKSB3aGVuIGNhbGxlZCB3aXRob3V0CisgIGFyZ3VtZW50IGFuZCB3aXRob3V0IGN1cnJlbnQgZnJhbWUgKGV4OiBlbWJlZGRlZCBQeXRob24pLgorCistIElzc3VlICMyMTQyNTogRml4IGZsdXNoaW5nIG9mIHN0YW5kYXJkIHN0cmVhbXMgaW4gdGhlIGludGVyYWN0aXZlCisgIGludGVycHJldGVyLgorCistIElzc3VlICMyMTQzNTogSW4gcmFyZSBjYXNlcywgd2hlbiBydW5uaW5nIGZpbmFsaXplcnMgb24gb2JqZWN0cyBpbiBjeWNsaWMKKyAgdHJhc2ggYSBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZSBjb3VsZCBvY2N1ciBkdWUgdG8gYSBzdWJ0bGUgZmxhdyBpbgorICBpbnRlcm5hbCBpdGVyYXRpb24gbG9naWMuCisKKy0gSXNzdWUgIzIxMzc3OiBQeUJ5dGVzX0NvbmNhdCgpIG5vdyB0cmllcyB0byBjb25jYXRlbmF0ZSBpbi1wbGFjZSB3aGVuIHRoZQorICBmaXJzdCBhcmd1bWVudCBoYXMgYSByZWZlcmVuY2UgY291bnQgb2YgMS4gIFBhdGNoIGJ5IE5pa29sYXVzIFJhdGguCisKKy0gSXNzdWUgIzIwMzU1OiAtVyBjb21tYW5kIGxpbmUgb3B0aW9ucyBub3cgaGF2ZSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUKKyAgUFlUSE9OV0FSTklOR1MgZW52aXJvbm1lbnQgdmFyaWFibGUuICBQYXRjaCBieSBBcmZyZXZlci4KKworLSBJc3N1ZSAjMjEyNzQ6IERlZmluZSBQQVRIX01BWCBmb3IgR05VL0h1cmQgaW4gUHl0aG9uL3B5dGhvbnJ1bi5jLgorCistIElzc3VlICMyMDkwNDogU3VwcG9ydCBzZXR0aW5nIEZQVSBwcmVjaXNpb24gb24gbTY4ay4KKworLSBJc3N1ZSAjMjEyMDk6IEZpeCBzZW5kaW5nIHR1cGxlcyB0byBjdXN0b20gZ2VuZXJhdG9yIG9iamVjdHMgd2l0aCB0aGUgeWllbGQKKyAgZnJvbSBzeW50YXguCisKKy0gSXNzdWUgIzIxMTkzOiBwb3coYSwgYiwgYykgbm93IHJhaXNlcyBWYWx1ZUVycm9yIHJhdGhlciB0aGFuIFR5cGVFcnJvciB3aGVuIGIKKyAgaXMgbmVnYXRpdmUuICBQYXRjaCBieSBKb3NoIFJvc2VuYmVyZy4KKworLSBQRVAgNDY1IGFuZCBJc3N1ZSAjMjExNzY6IEFkZCB0aGUgJ0AnIG9wZXJhdG9yIGZvciBtYXRyaXggbXVsdGlwbGljYXRpb24uCisKKy0gSXNzdWUgIzIxMTM0OiBGaXggc2VnZmF1bHQgd2hlbiBzdHIgaXMgY2FsbGVkIG9uIGFuIHVuaW5pdGlhbGl6ZWQKKyAgVW5pY29kZUVuY29kZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IsIG9yIFVuaWNvZGVUcmFuc2xhdGVFcnJvciBvYmplY3QuCisKKy0gSXNzdWUgIzE5NTM3OiBGaXggUHlVbmljb2RlX0RBVEEoKSBhbGlnbm1lbnQgdW5kZXIgbTY4ay4gIFBhdGNoIGJ5CisgIEFuZHJlYXMgU2Nod2FiLgorCistIElzc3VlICMyMDkyOTogQWRkIGEgdHlwZSBjYXN0IHRvIGF2b2lkIHNoaWZ0aW5nIGEgbmVnYXRpdmUgbnVtYmVyLgorCistIElzc3VlICMyMDczMTogUHJvcGVybHkgcG9zaXRpb24gaW4gc291cmNlIGNvZGUgZmlsZXMgZXZlbiBpZiB0aGV5CisgIGFyZSBvcGVuZWQgaW4gdGV4dCBtb2RlLiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMyMDYzNzogS2V5LXNoYXJpbmcgbm93IGFsc28gd29ya3MgZm9yIGluc3RhbmNlIGRpY3Rpb25hcmllcyBvZgorICBzdWJjbGFzc2VzLiAgUGF0Y2ggYnkgUGV0ZXIgSW5nZWJyZXRzb24uCisKKy0gSXNzdWUgIzgyOTc6IEF0dHJpYnV0ZXMgbWlzc2luZyBmcm9tIG1vZHVsZXMgbm93IGluY2x1ZGUgdGhlIG1vZHVsZSBuYW1lCisgIGluIHRoZSBlcnJvciB0ZXh0LiAgT3JpZ2luYWwgcGF0Y2ggYnkgeXNqLnJheS4KKworLSBJc3N1ZSAjMTk5OTU6ICVjLCAlbywgJXgsIGFuZCAlWCBub3cgcmFpc2UgVHlwZUVycm9yIG9uIG5vbi1pbnRlZ2VyIGlucHV0LgorCistIElzc3VlICMxOTY1NTogVGhlIEFTREwgcGFyc2VyIC0gdXNlZCBieSB0aGUgYnVpbGQgcHJvY2VzcyB0byBnZW5lcmF0ZSBjb2RlIGZvcgorICBtYW5hZ2luZyB0aGUgUHl0aG9uIEFTVCBpbiBDIC0gd2FzIHJld3JpdHRlbi4gVGhlIG5ldyBwYXJzZXIgaXMgc2VsZiBjb250YWluZWQKKyAgYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gY2FycnkgbG9uZyB0aGUgc3BhcmsucHkgcGFyc2VyLWdlbmVyYXRvciBsaWJyYXJ5OworICBzcGFyay5weSB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UgYmFzZS4KKworLSBJc3N1ZSAjMTI1NDY6IEFsbG93IGBgXHgwMGBgIHRvIGJlIHVzZWQgYXMgYSBmaWxsIGNoYXJhY3RlciB3aGVuIHVzaW5nIHN0ciwgaW50LAorICBmbG9hdCwgYW5kIGNvbXBsZXggX19mb3JtYXRfXyBtZXRob2RzLgorCistIElzc3VlICMyMDQ4MDogQWRkIGlwYWRkcmVzcy5yZXZlcnNlX3BvaW50ZXIuIFBhdGNoIGJ5IExlb24gV2ViZXIuCisKKy0gSXNzdWUgIzEzNTk4OiBNb2RpZnkgc3RyaW5nLkZvcm1hdHRlciB0byBzdXBwb3J0IGF1dG8tbnVtYmVyaW5nIG9mCisgIHJlcGxhY2VtZW50IGZpZWxkcy4gSXQgbm93IG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIHN0ci5mb3JtYXQoKSBpbgorICB0aGlzIHJlZ2FyZC4gUGF0Y2hlcyBieSBQaGlsIEVsc29uIGFuZCBSYW1jaGFuZHJhIEFwdGUuCisKKy0gSXNzdWUgIzg5MzE6IE1ha2UgYWx0ZXJuYXRlIGZvcm1hdHRpbmcgKCcjJykgZm9yIHR5cGUgJ2MnIHJhaXNlIGFuCisgIGV4Y2VwdGlvbi4gSW4gdmVyc2lvbnMgcHJpb3IgdG8gMy41LCAnIycgd2l0aCAnYycgaGFkIG5vIGVmZmVjdC4gTm93CisgIHNwZWNpZnlpbmcgaXQgaXMgYW4gZXJyb3IuICBQYXRjaCBieSBUb3JzdGVuIExhbmRzY2hvZmYuCisKIC0gSXNzdWUgIzIzMTY1OiBQZXJmb3JtIG92ZXJmbG93IGNoZWNrcyBiZWZvcmUgYWxsb2NhdGluZyBtZW1vcnkgaW4gdGhlCiAgIF9QeV9jaGFyMndjaGFyIGZ1bmN0aW9uLgogCkBAIC05NjAsOSArMjkwMiwyNCBAQAogCiAtIElzc3VlICMyMzM5OTogcHl2ZW52IGNyZWF0ZXMgcmVsYXRpdmUgc3ltbGlua3Mgd2hlcmUgcG9zc2libGUuCiAKKy0gSXNzdWUgIzIwMjg5OiBjZ2kuRmllbGRTdG9yYWdlKCkgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQKKyAgcHJvdG9jb2wuCisKKy0gSXNzdWUgIzEzMTI4OiBQcmludCByZXNwb25zZSBoZWFkZXJzIGZvciBDT05ORUNUIHJlcXVlc3RzIHdoZW4gZGVidWdsZXZlbAorICA+IDAuIFBhdGNoIGJ5IERlbWlhbiBCcmVjaHQuCisKKy0gSXNzdWUgIzE1MzgxOiBPcHRpbWl6ZWQgaW8uQnl0ZXNJTyB0byBtYWtlIGxlc3MgYWxsb2NhdGlvbnMgYW5kIGNvcHlpbmdzLgorCistIElzc3VlICMyMjgxODogU3BsaXR0aW5nIG9uIGEgcGF0dGVybiB0aGF0IGNvdWxkIG1hdGNoIGFuIGVtcHR5IHN0cmluZyBub3cKKyAgcmFpc2VzIGEgd2FybmluZy4gIFBhdHRlcm5zIHRoYXQgY2FuIG9ubHkgbWF0Y2ggZW1wdHkgc3RyaW5ncyBhcmUgbm93CisgIHJlamVjdGVkLgorCiAtIElzc3VlICMyMzA5OTogQ2xvc2luZyBpby5CeXRlc0lPIHdpdGggZXhwb3J0ZWQgYnVmZmVyIGlzIHJlamVjdGVkIG5vdyB0bwogICBwcmV2ZW50IGNvcnJ1cHRpbmcgZXhwb3J0ZWQgYnVmZmVyLgogCistIElzc3VlICMyMzMyNjogUmVtb3ZlZCBfX25lX18gaW1wbGVtZW50YXRpb25zLiAgU2luY2UgZml4aW5nIGRlZmF1bHQgX19uZV9fCisgIGltcGxlbWVudGF0aW9uIGluIGlzc3VlICMyMTQwOCB0aGV5IGFyZSByZWR1bmRhbnQuCisKIC0gSXNzdWUgIzIzMzYzOiBGaXggcG9zc2libGUgb3ZlcmZsb3cgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucy4KIAogLSBJc3N1ZSAjMjMzNjQ6IEZpeCBwb3NzaWJsZSBvdmVyZmxvdyBpbiBpdGVydG9vbHMucHJvZHVjdC4KQEAgLTk3OCw2ICsyOTM1LDE0IEBACiAgIGlzIG5vdyBhbHdheXMgcmVzdG9yZWQgb3Igc3dhcHBlZCwgbm90IG9ubHkgaWYgd2h5IGlzIFdIWV9ZSUVMRCBvcgogICBXSFlfUkVUVVJOLiBQYXRjaCBjby13cml0dGVuIHdpdGggQW50b2luZSBQaXRyb3UuCiAKKy0gSXNzdWUgIzE0MDk5OiBSZXN0b3JlZCBzdXBwb3J0IG9mIHdyaXRpbmcgWklQIGZpbGVzIHRvIHRlbGxhYmxlIGJ1dAorICBub24tc2Vla2FibGUgc3RyZWFtcy4KKworLSBJc3N1ZSAjMTQwOTk6IFdyaXRpbmcgdG8gWmlwRmlsZSBhbmQgcmVhZGluZyBtdWx0aXBsZSBaaXBFeHRGaWxlcyBpcworICB0aHJlYWRzYWZlIG5vdy4KKworLSBJc3N1ZSAjMTkzNjE6IEpTT04gZGVjb2RlciBub3cgcmFpc2VzIEpTT05EZWNvZGVFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3IuCisKIC0gSXNzdWUgIzE4NTE4OiB0aW1laXQgbm93IHJlamVjdHMgc3RhdGVtZW50cyB3aGljaCBjYW4ndCBiZSBjb21waWxlZCBvdXRzaWRlCiAgIGEgZnVuY3Rpb24gb3IgYSBsb29wIChlLmcuICJyZXR1cm4iIG9yICJicmVhayIpLgogCkBAIC05OTIsNDcgKzI5NTcsODUgQEAKIC0gSXNzdWUgIzE5OTk2OiA6Y2xhc3M6YGVtYWlsLmZlZWRwYXJzZXIuRmVlZFBhcnNlcmAgbm93IGhhbmRsZXMgKG1hbGZvcm1lZCkKICAgaGVhZGVycyB3aXRoIG5vIGtleSByYXRoZXIgdGhhbiBhc3N1bWluZyB0aGUgYm9keSBoYXMgc3RhcnRlZC4KIAorLSBJc3N1ZSAjMjAxODg6IFN1cHBvcnQgQXBwbGljYXRpb24tTGF5ZXIgUHJvdG9jb2wgTmVnb3RpYXRpb24gKEFMUE4pIGluIHRoZSBzc2wKKyAgbW9kdWxlLgorCistIElzc3VlICMyMzEzMzogUGlja2xpbmcgb2YgaXBhZGRyZXNzIG9iamVjdHMgbm93IHByb2R1Y2VzIG1vcmUgY29tcGFjdCBhbmQKKyAgcG9ydGFibGUgcmVwcmVzZW50YXRpb24uCisKIC0gSXNzdWUgIzIzMjQ4OiBVcGRhdGUgc3NsIGVycm9yIGNvZGVzIGZyb20gbGF0ZXN0IE9wZW5TU0wgZ2l0IG1hc3Rlci4KIAorLSBJc3N1ZSAjMjMyNjY6IE11Y2ggZmFzdGVyIGltcGxlbWVudGF0aW9uIG9mIGlwYWRkcmVzcy5jb2xsYXBzZV9hZGRyZXNzZXMoKQorICB3aGVuIHRoZXJlIGFyZSBtYW55IG5vbi1jb25zZWN1dGl2ZSBhZGRyZXNzZXMuCisKIC0gSXNzdWUgIzIzMDk4OiA2NC1iaXQgZGV2X3QgaXMgbm93IHN1cHBvcnRlZCBpbiB0aGUgb3MgbW9kdWxlLgogCistIElzc3VlICMyMTgxNzogV2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIGEgdGFzayBzdWJtaXR0ZWQgdG8gYQorICBQcm9jZXNzUG9vbEV4ZWN1dG9yLCB0aGUgcmVtb3RlIHRyYWNlYmFjayBpcyBub3cgZGlzcGxheWVkIGluIHRoZQorICBwYXJlbnQgcHJvY2Vzcy4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTU5NTU6IEFkZCBhbiBvcHRpb24gdG8gbGltaXQgb3V0cHV0IHNpemUgd2hlbiBkZWNvbXByZXNzaW5nIExaTUEKKyAgZGF0YS4gIFBhdGNoIGJ5IE5pa29sYXVzIFJhdGggYW5kIE1hcnRpbiBQYW50ZXIuCisKIC0gSXNzdWUgIzIzMjUwOiBJbiB0aGUgaHR0cC5jb29raWVzIG1vZHVsZSwgY2FwaXRhbGl6ZSAiSHR0cE9ubHkiIGFuZCAiU2VjdXJlIgogICBhcyB0aGV5IGFyZSB3cml0dGVuIGluIHRoZSBzdGFuZGFyZC4KIAogLSBJc3N1ZSAjMjMwNjM6IEluIHRoZSBkaXN1dGlscycgY2hlY2sgY29tbWFuZCwgZml4IHBhcnNpbmcgb2YgcmVTVCB3aXRoIGNvZGUgb3IKICAgY29kZS1ibG9jayBkaXJlY3RpdmVzLgogCi0tIElzc3VlICMyMzIwOSwgIzIzMjI1OiBzZWxlY3RvcnMuQmFzZVNlbGVjdG9yLmNsb3NlKCkgbm93IGNsZWFycyBpdHMgaW50ZXJuYWwKLSAgcmVmZXJlbmNlIHRvIHRoZSBzZWxlY3RvciBtYXBwaW5nIHRvIGJyZWFrIGEgcmVmZXJlbmNlIGN5Y2xlLiBJbml0aWFsIHBhdGNoCi0gIHdyaXR0ZW4gYnkgTWFydGluIFJpY2hhcmQuCistIElzc3VlICMyMzIwOSwgIzIzMjI1OiBzZWxlY3RvcnMuQmFzZVNlbGVjdG9yLmdldF9rZXkoKSBub3cgcmFpc2VzIGEKKyAgUnVudGltZUVycm9yIGlmIHRoZSBzZWxlY3RvciBpcyBjbG9zZWQuIEFuZCBzZWxlY3RvcnMuQmFzZVNlbGVjdG9yLmNsb3NlKCkKKyAgbm93IGNsZWFycyBpdHMgaW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBzZWxlY3RvciBtYXBwaW5nIHRvIGJyZWFrIGEKKyAgcmVmZXJlbmNlIGN5Y2xlLiBJbml0aWFsIHBhdGNoIHdyaXR0ZW4gYnkgTWFydGluIFJpY2hhcmQuCiAKLS0gSXNzdWUgIzIxMzU2OiBNYWtlIHNzbC5SQU5EX2VnZCgpIG9wdGlvbmFsIHRvIHN1cHBvcnQgTGlicmVTU0wuIFRoZQotICBhdmFpbGFiaWxpdHkgb2YgdGhlIGZ1bmN0aW9uIGlzIGNoZWNrZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbi4gUGF0Y2ggd3JpdHRlbgotICBieSBCZXJuYXJkIFNwaWwuCistIElzc3VlICMxNzkxMTogUHJvdmlkZSBhIHdheSB0byBzZWVkIHRoZSBsaW5lY2FjaGUgZm9yIGEgUEVQLTMwMiBtb2R1bGUKKyAgd2l0aG91dCBhY3R1YWxseSBsb2FkaW5nIHRoZSBjb2RlLgogCi0tIElzc3VlICMyMDg5NiwgIzIyOTM1OiBUaGUgOmZ1bmM6YHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlYCBmdW5jdGlvbiBub3cKLSAgdXNlcyB0aGUgOmRhdGE6YH5zc2wuUFJPVE9DT0xfU1NMdjIzYCBwcm90b2NvbCBieSBkZWZhdWx0LCBub3QKLSAgOmRhdGE6YH5zc2wuUFJPVE9DT0xfU1NMdjNgLCBmb3IgbWF4aW11bSBjb21wYXRpYmlsaXR5IGFuZCBzdXBwb3J0IHBsYXRmb3JtcwotICB3aGVyZSA6ZGF0YTpgfnNzbC5QUk9UT0NPTF9TU0x2M2Agc3VwcG9ydCBpcyBkaXNhYmxlZC4KKy0gSXNzdWUgIzE3OTExOiBQcm92aWRlIGEgbmV3IG9iamVjdCBBUEkgZm9yIHRyYWNlYmFjaywgaW5jbHVkaW5nIHRoZSBhYmlsaXR5CisgIHRvIG5vdCBsb29rdXAgbGluZXMgYXQgYWxsIHVudGlsIHRoZSB0cmFjZWJhY2sgaXMgYWN0dWFsbHkgcmVuZGVyZWQsIHdpdGhvdXQKKyAgYW55IHRyYWNlIG9mIHRoZSBvcmlnaW5hbCBvYmplY3RzIGJlaW5nIGtlcHQgYWxpdmUuCiAKLS0gSXNzdWUgIzIzMTExOiBJbiB0aGUgZnRwbGliLCBtYWtlIHNzbC5QUk9UT0NPTF9TU0x2MjMgdGhlIGRlZmF1bHQgcHJvdG9jb2wKLSAgdmVyc2lvbi4KKy0gSXNzdWUgIzE5Nzc3OiBQcm92aWRlIGEgaG9tZSgpIGNsYXNzbWV0aG9kIG9uIFBhdGggb2JqZWN0cy4gIENvbnRyaWJ1dGVkCisgIGJ5IFZpY3RvciBTYWxnYWRvIGFuZCBNYXlhbmsgVHJpcGF0aGkuCiAKLS0gSXNzdWUgIzIzMTMyOiBNaXRpZ2F0ZSByZWdyZXNzaW9uIGluIHNwZWVkIGFuZCBjbGFyaXR5IGluIGZ1bmN0b29scy50b3RhbF9vcmRlcmluZy4KKy0gSXNzdWUgIzIzMjA2OiBNYWtlIGBganNvbi5kdW1wcyguLi4sIGVuc3VyZV9hc2NpaT1GYWxzZSlgYCBhcyBmYXN0IGFzIHRoZQorICBkZWZhdWx0IGNhc2Ugb2YgYGBlbnN1cmVfYXNjaWk9VHJ1ZWBgLiAgUGF0Y2ggYnkgTmFva2kgSW5hZGEuCiAKLS0gSXNzdWUgIzIyNTg1OiBPbiBPcGVuQlNEIDUuNiBhbmQgbmV3ZXIsIG9zLnVyYW5kb20oKSBub3cgY2FsbHMgZ2V0ZW50cm9weSgpLAotICBpbnN0ZWFkIG9mIHJlYWRpbmcgL2Rldi91cmFuZG9tLCB0byBnZXQgcHNldWRvLXJhbmRvbSBieXRlcy4KKy0gSXNzdWUgIzIzMTg1OiBBZGQgbWF0aC5pbmYgYW5kIG1hdGgubmFuIGNvbnN0YW50cy4KKworLSBJc3N1ZSAjMjMxODY6IEFkZCBzc2wuU1NMT2JqZWN0LnNoYXJlZF9jaXBoZXJzKCkgYW5kCisgIHNzbC5TU0xTb2NrZXQuc2hhcmVkX2NpcGhlcnMoKSB0byBmZXRjaCB0aGUgY2xpZW50J3MgbGlzdCBjaXBoZXJzIHNlbnQgYXQKKyAgaGFuZHNoYWtlLgorCistIElzc3VlICMyMzE0MzogUmVtb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCBPcGVuU1NMcyBvbGRlciB0aGFuIDAuOS44LgorCistIElzc3VlICMyMzEzMjogSW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgaW50cm9zcGVjdGlvbiBzdXBwb3J0IG9mIGNvbXBhcmlzb24KKyAgbWV0aG9kcyBjcmVhdGVkIGJ5IGZ1bmN0b29sLnRvdGFsX29yZGVyaW5nLgorCistIElzc3VlICMxOTc3NjogQWRkIGFuIGV4cGFuZHVzZXIoKSBtZXRob2Qgb24gUGF0aCBvYmplY3RzLgogCiAtIElzc3VlICMyMzExMjogRml4IFNpbXBsZUhUVFBTZXJ2ZXIgdG8gY29ycmVjdGx5IGNhcnJ5IHRoZSBxdWVyeSBzdHJpbmcgYW5kCiAgIGZyYWdtZW50IHdoZW4gaXQgcmVkaXJlY3RzIHRvIGFkZCBhIHRyYWlsaW5nIHNsYXNoLgogCistIElzc3VlICMyMTc5MzogQWRkZWQgaHR0cC5IVFRQU3RhdHVzIGVudW1zIChpLmUuIEhUVFBTdGF0dXMuT0ssCisgIEhUVFBTdGF0dXMuTk9UX0ZPVU5EKS4gIFBhdGNoIGJ5IERlbWlhbiBCcmVjaHQuCisKIC0gSXNzdWUgIzIzMDkzOiBJbiB0aGUgaW8sIG1vZHVsZSBhbGxvdyBtb3JlIG9wZXJhdGlvbnMgdG8gd29yayBvbiBkZXRhY2hlZAogICBzdHJlYW1zLgogCistIElzc3VlICMyMzExMTogSW4gdGhlIGZ0cGxpYiwgbWFrZSBzc2wuUFJPVE9DT0xfU1NMdjIzIHRoZSBkZWZhdWx0IHByb3RvY29sCisgIHZlcnNpb24uCisKKy0gSXNzdWUgIzIyNTg1OiBPbiBPcGVuQlNEIDUuNiBhbmQgbmV3ZXIsIG9zLnVyYW5kb20oKSBub3cgY2FsbHMgZ2V0ZW50cm9weSgpLAorICBpbnN0ZWFkIG9mIHJlYWRpbmcgL2Rldi91cmFuZG9tLCB0byBnZXQgcHNldWRvLXJhbmRvbSBieXRlcy4KKwogLSBJc3N1ZSAjMTkxMDQ6IHBwcmludCBub3cgcHJvZHVjZXMgZXZhbHVhYmxlIG91dHB1dCBmb3Igd3JhcHBlZCBzdHJpbmdzLgogCiAtIElzc3VlICMyMzA3MTogQWRkZWQgbWlzc2luZyBuYW1lcyB0byBjb2RlY3MuX19hbGxfXy4gIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCiAKKy0gSXNzdWUgIzIyNzgzOiBQaWNrbGluZyBub3cgdXNlcyB0aGUgTkVXT0JKIG9wY29kZSBpbnN0ZWFkIG9mIHRoZSBORVdPQkpfRVgKKyAgb3Bjb2RlIGlmIHBvc3NpYmxlLgorCiAtIElzc3VlICMxNTUxMzogQWRkZWQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBwaWNrbGUgY2xhc3Nlcy4KIAogLSBJc3N1ZSAjMTk4NTg6IHBpY2tsZXRvb2xzLm9wdGltaXplKCkgbm93IGF3YXJlIG9mIHRoZSBNRU1PSVpFIG9wY29kZSwgY2FuCkBAIC0xMDQ2LDcgKzMwNDksNyBAQAogICBpcyBydW4gd2l0aCBweXRob253LmV4ZS4KIAogLSBJc3N1ZSAjMjE3NzU6IHNodXRpbC5jb3B5dHJlZSgpOiBmaXggY3Jhc2ggd2hlbiBjb3B5aW5nIHRvIFZGQVQuIEFuIGV4Y2VwdGlvbgotICBoYW5kbGVyIGFzc3VtZWQgdGhhdCB0aGF0IE9TRXJyb3Igb2JqZWN0cyBhbHdheXMgaGF2ZSBhICd3aW5lcnJvcicgYXR0cmlidXRlLgorICBoYW5kbGVyIGFzc3VtZWQgdGhhdCBPU0Vycm9yIG9iamVjdHMgYWx3YXlzIGhhdmUgYSAnd2luZXJyb3InIGF0dHJpYnV0ZS4KICAgVGhhdCBpcyBub3QgdGhlIGNhc2UsIHNvIHRoZSBleGNlcHRpb24gaGFuZGxlciBpdHNlbGYgcmFpc2VkIEF0dHJpYnV0ZUVycm9yCiAgIHdoZW4gcnVuIG9uIExpbnV4IChhbmQsIHByZXN1bWFibHksIGFueSBvdGhlciBub24tV2luZG93cyBPUykuCiAgIFBhdGNoIGJ5IEdyZWcgV2FyZC4KQEAgLTEwNTQsMjkgKzMwNTcsNTggQEAKIC0gSXNzdWUgIzEyMTgyMzQ6IEZpeCBpbnNwZWN0LmdldHNvdXJjZSgpIHRvIGxvYWQgdXBkYXRlZCBzb3VyY2Ugb2YKICAgcmVsb2FkZWQgbW9kdWxlLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCiAKKy0gSXNzdWUgIzIxNzQwOiBTdXBwb3J0IHdyYXBwZWQgY2FsbGFibGVzIGluIGRvY3Rlc3QuIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMjMwMDk6IE1ha2Ugc3VyZSBzZWxlY3RvcnMuRXBvbGxTZWxlY3J0b3Iuc2VsZWN0KCkgd29ya3Mgd2hlbiBubworICBGRCBpcyByZWdpc3RlcmVkLgorCiAtIElzc3VlICMyMjk1OTogSW4gdGhlIGNvbnN0cnVjdG9yIG9mIGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbiwgcHJlZmVyIHRoZQogICBjb250ZXh0J3MgY2hlY2tfaG9zdG5hbWUgYXR0cmlidXRlIG92ZXIgdGhlICpjaGVja19ob3N0bmFtZSogcGFyYW1ldGVyLgogCistIElzc3VlICMyMjY5NjogQWRkIGZ1bmN0aW9uIDpmdW5jOmBzeXMuaXNfZmluYWxpemluZ2AgdG8ga25vdyBhYm91dAorICBpbnRlcnByZXRlciBzaHV0ZG93bi4KKwogLSBJc3N1ZSAjMTYwNDM6IEFkZCBhIGRlZmF1bHQgbGltaXQgZm9yIHRoZSBhbW91bnQgb2YgZGF0YSB4bWxycGNsaWIuZ3ppcF9kZWNvZGUKICAgd2lsbCByZXR1cm4uIFRoaXMgcmVzb2x2ZXMgQ1ZFLTIwMTMtMTc1My4KIAorLSBJc3N1ZSAjMTQwOTk6IFppcEZpbGUub3BlbigpIG5vIGxvbmdlciByZW9wZW4gdGhlIHVuZGVybHlpbmcgZmlsZS4gIE9iamVjdHMKKyAgcmV0dXJuZWQgYnkgWmlwRmlsZS5vcGVuKCkgY2FuIG5vdyBvcGVyYXRlIGluZGVwZW5kZW50bHkgb2YgdGhlIFppcEZpbGUgZXZlbgorICBpZiB0aGUgWmlwRmlsZSB3YXMgY3JlYXRlZCBieSBwYXNzaW5nIGluIGEgZmlsZS1saWtlIG9iamVjdCBhcyB0aGUgZmlyc3QKKyAgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLgorCiAtIElzc3VlICMyMjk2NjogRml4IF9fcHljYWNoZV9fIHB5YyBmaWxlIG5hbWUgY2xvYmJlciB3aGVuIHB5Y19jb21waWxlIGlzCiAgIGFza2VkIHRvIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBjb250YWluaW5nIG11bHRpcGxlIGRvdHMgaW4gdGhlIHNvdXJjZSBmaWxlCiAgIG5hbWUuCiAKIC0gSXNzdWUgIzIxOTcxOiBVcGRhdGUgdHVydGxlZGVtbyBkb2MgYW5kIGFkZCBtb2R1bGUgdG8gdGhlIGluZGV4LgogCi0tIElzc3VlICMyMTAzMi4gRml4ZWQgc29ja2V0IGxlYWsgaWYgSFRUUENvbm5lY3Rpb24uZ2V0cmVzcG9uc2UoKSBmYWlscy4KKy0gSXNzdWUgIzIxMDMyOiBGaXhlZCBzb2NrZXQgbGVhayBpZiBIVFRQQ29ubmVjdGlvbi5nZXRyZXNwb25zZSgpIGZhaWxzLgogICBPcmlnaW5hbCBwYXRjaCBieSBNYXJ0aW4gUGFudGVyLgogCistIElzc3VlICMyMjQwNzogRGVwcmVjYXRlZCB0aGUgdXNlIG9mIHJlLkxPQ0FMRSBmbGFnIHdpdGggc3RyIHBhdHRlcm5zIG9yCisgIHJlLkFTQ0lJLiBJdCB3YXMgbmV3ZXIgd29ya2VkLgorCistIElzc3VlICMyMjkwMjogVGhlICJpcCIgY29tbWFuZCBpcyBub3cgdXNlZCBvbiBMaW51eCB0byBkZXRlcm1pbmUgTUFDIGFkZHJlc3MKKyAgaW4gdXVpZC5nZXRub2RlKCkuICBQYWNoIGJ5IEJydW5vIENhdWV0LgorCiAtIElzc3VlICMyMjk2MDogQWRkIGEgY29udGV4dCBhcmd1bWVudCB0byB4bWxycGNsaWIuU2VydmVyUHJveHkgY29uc3RydWN0b3IuCiAKKy0gSXNzdWUgIzIyMzg5OiBBZGQgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRlcnIoKS4KKworLSBJc3N1ZSAjMjEzNTY6IE1ha2Ugc3NsLlJBTkRfZWdkKCkgb3B0aW9uYWwgdG8gc3VwcG9ydCBMaWJyZVNTTC4gVGhlCisgIGF2YWlsYWJpbGl0eSBvZiB0aGUgZnVuY3Rpb24gaXMgY2hlY2tlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uLiBQYXRjaCB3cml0dGVuCisgIGJ5IEJlcm5hcmQgU3BpbC4KKwogLSBJc3N1ZSAjMjI5MTU6IFNBWCBwYXJzZXIgbm93IHN1cHBvcnRzIGZpbGVzIG9wZW5lZCB3aXRoIGZpbGUgZGVzY3JpcHRvciBvcgogICBieXRlcyBwYXRoLgogCiAtIElzc3VlICMyMjYwOTogQ29uc3RydWN0b3JzIGFuZCB1cGRhdGUgbWV0aG9kcyBvZiBtYXBwaW5nIGNsYXNzZXMgaW4gdGhlCiAgIGNvbGxlY3Rpb25zIG1vZHVsZSBub3cgYWNjZXB0IHRoZSBzZWxmIGtleXdvcmQgYXJndW1lbnQuCiAKKy0gSXNzdWUgIzIyOTQwOiBBZGQgcmVhZGxpbmUuYXBwZW5kX2hpc3RvcnlfZmlsZS4KKworLSBJc3N1ZSAjMTk2NzY6IEFkZGVkIHRoZSAibmFtZXJlcGxhY2UiIGVycm9yIGhhbmRsZXIuCisKIC0gSXNzdWUgIzIyNzg4OiBBZGQgKmNvbnRleHQqIHBhcmFtZXRlciB0byBsb2dnaW5nLmhhbmRsZXJzLkhUVFBIYW5kbGVyLgogCiAtIElzc3VlICMyMjkyMTogQWxsb3cgU1NMQ29udGV4dCB0byB0YWtlIHRoZSAqaG9zdG5hbWUqIHBhcmFtZXRlciBldmVuIGlmCkBAIC0xMDg1LDE0ICszMTE3LDE5IEBACiAtIElzc3VlICMyMjg5NDogVGVzdENhc2Uuc3ViVGVzdCgpIHdvdWxkIGNhdXNlIHRoZSB0ZXN0IHN1aXRlIHRvIGJlIHN0b3BwZWQKICAgd2hlbiBpbiBmYWlsZmFzdCBtb2RlLCBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGZhaWx1cmVzLgogCi0tIElzc3VlICMyMjYzODogU1NMdjMgaXMgbm93IGRpc2FibGVkIHRocm91Z2hvdXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCi0gIEl0IGNhbiBzdGlsbCBiZSBlbmFibGVkIGJ5IGluc3RhbnRpYXRpbmcgYSBTU0xDb250ZXh0IG1hbnVhbGx5LgorLSBJc3N1ZSAjMjI3OTY6IEhUVFAgY29va2llIHBhcnNpbmcgaXMgbm93IHN0cmljdGVyLCBpbiBvcmRlciB0byBwcm90ZWN0CisgIGFnYWluc3QgcG90ZW50aWFsIGluamVjdGlvbiBhdHRhY2tzLgogCiAtIElzc3VlICMyMjM3MDogV2luZG93cyBkZXRlY3Rpb24gaW4gcGF0aGxpYiBpcyBub3cgbW9yZSByb2J1c3QuCiAKIC0gSXNzdWUgIzIyODQxOiBSZWplY3QgY29yb3V0aW5lcyBpbiBhc3luY2lvIGFkZF9zaWduYWxfaGFuZGxlcigpLgogICBQYXRjaCBieSBMdWRvdmljLkdhc2MuCiAKKy0gSXNzdWUgIzE5NDk0OiBBZGRlZCB1cmxsaWIucmVxdWVzdC5IVFRQQmFzaWNQcmlvckF1dGhIYW5kbGVyLiBQYXRjaCBieQorICBNYXRlaiBDZXBsLgorCistIElzc3VlICMyMjU3ODogQWRkZWQgYXR0cmlidXRlcyB0byB0aGUgcmUuZXJyb3IgY2xhc3MuCisKIC0gSXNzdWUgIzIyODQ5OiBGaXggcG9zc2libGUgZG91YmxlIGZyZWUgaW4gdGhlIGlvLlRleHRJT1dyYXBwZXIgY29uc3RydWN0b3IuCiAKIC0gSXNzdWUgIzEyNzI4OiBEaWZmZXJlbnQgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgc2FtZSB1cHBlcmNhc2UgYnV0CkBAIC0xMTAxLDYgKzMxMzgsMTQgQEAKIC0gSXNzdWUgIzIyODIxOiBGaXhlZCBmY250bCgpIHdpdGggaW50ZWdlciBhcmd1bWVudCBvbiA2NC1iaXQgYmlnLWVuZGlhbgogICBwbGF0Zm9ybXMuCiAKKy0gSXNzdWUgIzIxNjUwOiBBZGQgYW4gYC0tc29ydC1rZXlzYCBvcHRpb24gdG8ganNvbi50b29sIENMSS4KKworLSBJc3N1ZSAjMjI4MjQ6IFVwZGF0ZWQgcmVwcmxpYiBvdXRwdXQgZm9ybWF0IGZvciBzZXRzIHRvIHVzZSBzZXQgbGl0ZXJhbHMuCisgIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzIyODI0OiBVcGRhdGVkIHJlcHJsaWIgb3V0cHV0IGZvcm1hdCBmb3IgYXJyYXlzIHRvIGRpc3BsYXkgZW1wdHkKKyAgYXJyYXlzIHdpdGhvdXQgYW4gdW5uZWNlc3NhcnkgZW1wdHkgbGlzdC4gIFN1Z2dlc3RlZCBieSBTZXJoaXkgU3RvcmNoYWthLgorCiAtIElzc3VlICMyMjQwNjogRml4ZWQgdGhlIHV1X2NvZGVjIGNvZGVjIGluY29ycmVjdGx5IHBvcnRlZCB0byAzLnguCiAgIEJhc2VkIG9uIHBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCiAKQEAgLTExMTQsMTYgKzMxNTksMTUgQEAKIC0gSXNzdWUgIzIyNzc1OiBGaXhlZCB1bnBpY2tsaW5nIG9mIGh0dHAuY29va2llcy5TaW1wbGVDb29raWUgd2l0aCBwcm90b2NvbCAyCiAgIGFuZCBhYm92ZS4gIFBhdGNoIGJ5IFRpbSBHcmFoYW0uCiAKLS0gSXNzdWUgIzIyMzY2OiB1cmxsaWIucmVxdWVzdC51cmxvcGVuIHdpbGwgYWNjZXB0IGEgY29udGV4dCBvYmplY3QKLSAgKFNTTENvbnRleHQpIGFzIGFuIGFyZ3VtZW50IHdoaWNoIHdpbGwgdGhlbiB1c2VkIGJlIGZvciBIVFRQUyBjb25uZWN0aW9uLgotICBQYXRjaCBieSBBbGV4IEdheW5vci4KLQogLSBJc3N1ZSAjMjI3NzY6IEJyb3VnaHQgZXhjbHVkZWQgY29kZSBpbnRvIHRoZSBzY29wZSBvZiBhIHRyeSBibG9jayBpbgogICBTeXNMb2dIYW5kbGVyLmVtaXQoKS4KIAogLSBJc3N1ZSAjMjI2NjU6IEFkZCBtaXNzaW5nIGdldF90ZXJtaW5hbF9zaXplIGFuZCBTYW1lRmlsZUVycm9yIHRvCiAgIHNodXRpbC5fX2FsbF9fLgogCistIElzc3VlICM2NjIzOiBSZW1vdmUgZGVwcmVjYXRlZCBOZXRyYyBjbGFzcyBpbiB0aGUgZnRwbGliIG1vZHVsZS4gUGF0Y2ggYnkKKyAgTWF0dCBDaGFwdXQuCisKIC0gSXNzdWUgIzE3MzgxOiBGaXhlZCBoYW5kbGluZyBvZiBjYXNlLWluc2Vuc2l0aXZlIHJhbmdlcyBpbiByZWd1bGFyCiAgIGV4cHJlc3Npb25zLgogCkBAIC0xMTM3LDE4ICszMTgxLDUzIEBACiAgIGRvZXNuJ3Qgd29yay4gIFRoaXMgYWxsb3dzIHVzZSB3aXRoIHNwZWNpYWwgZmlsZXN5c3RlbXMgc3VjaCBhcyBWaXJ0dWFsQm94CiAgIHNoYXJlZCBmb2xkZXJzLgogCistIElzc3VlICMyMjIxNzogSW1wbGVtZW50ZWQgcmVwcnMgb2YgY2xhc3NlcyBpbiB0aGUgemlwZmlsZSBtb2R1bGUuCisKKy0gSXNzdWUgIzIyNDU3OiBIb25vdXIgbG9hZF90ZXN0cyBpbiB0aGUgc3RhcnRfZGlyIG9mIGRpc2NvdmVyeS4KKworLSBJc3N1ZSAjMTgyMTY6IGdldHRleHQgbm93IHJhaXNlcyBhbiBlcnJvciB3aGVuIGEgLm1vIGZpbGUgaGFzIGFuCisgIHVuc3VwcG9ydGVkIG1ham9yIHZlcnNpb24gbnVtYmVyLiAgUGF0Y2ggYnkgQWFyb24gSGlsbC4KKworLSBJc3N1ZSAjMTM5MTg6IFByb3ZpZGUgYSBsb2NhbGUuZGVsb2NhbGl6ZSgpIGZ1bmN0aW9uIHdoaWNoIGNhbiByZW1vdmUKKyAgbG9jYWxlLXNwZWNpZmljIG51bWJlciBmb3JtYXR0aW5nIGZyb20gYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbnVtYmVyLAorICB3aXRob3V0IHRoZW4gY29udmVydGluZyBpdCB0byBhIHNwZWNpZmljIHR5cGUuICBQYXRjaCBieSBDw6lkcmljIEtyaWVyLgorCistIElzc3VlICMyMjY3NjogTWFrZSB0aGUgcGlja2xpbmcgb2YgZ2xvYmFsIG9iamVjdHMgd2hpY2ggZG9uJ3QgaGF2ZSBhCisgIF9fbW9kdWxlX18gYXR0cmlidXRlIGxlc3Mgc2xvdy4KKwogLSBJc3N1ZSAjMTg4NTM6IEZpeGVkIFJlc291cmNlV2FybmluZyBpbiBzaGxleC5fX25haW5fXy4KIAogLSBJc3N1ZSAjOTM1MTogRGVmYXVsdHMgc2V0IHdpdGggc2V0X2RlZmF1bHRzIG9uIGFuIGFyZ3BhcnNlIHN1YnBhcnNlcgogICBhcmUgbm8gbG9uZ2VyIGlnbm9yZWQgd2hlbiBhbHNvIHNldCBvbiB0aGUgcGFyZW50IHBhcnNlci4KIAorLSBJc3N1ZSAjNzU1OTogdW5pdHRlc3QgdGVzdCBsb2FkaW5nIEltcG9ydEVycm9ycyBhcmUgcmVwb3J0ZWQgYXMgaW1wb3J0IGVycm9ycworICB3aXRoIHRoZWlyIGltcG9ydCBleGNlcHRpb24gcmF0aGVyIHRoYW4gYXMgYXR0cmlidXRlIGVycm9ycyBhZnRlciB0aGUgaW1wb3J0CisgIGhhcyBhbHJlYWR5IGZhaWxlZC4KKworLSBJc3N1ZSAjMTk3NDY6IE1ha2UgaXQgcG9zc2libGUgdG8gZXhhbWluZSB0aGUgZXJyb3JzIGZyb20gdW5pdHRlc3QKKyAgZGlzY292ZXJ5IHdpdGhvdXQgZXhlY3V0aW5nIHRoZSB0ZXN0IHN1aXRlLiBUaGUgbmV3IGBlcnJvcnNgIGF0dHJpYnV0ZQorICBvbiBUZXN0TG9hZGVyIGV4cG9zZXMgdGhlc2Ugbm9uLWZhdGFsIGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgZGlzY292ZXJ5LgorCiAtIElzc3VlICMyMTk5MTogTWFrZSBlbWFpbC5oZWFkZXJyZWdpc3RyeSdzIGhlYWRlciAncGFyYW1zJyBhdHRyaWJ1dGVzCiAgIGJlIHJlYWQtb25seSAoTWFwcGluZ1Byb3h5VHlwZSkuICBQcmV2aW91c2x5IHRoZSBkaWN0aW9uYXJ5IHdhcyBtb2RpZmlhYmxlCiAgIGJ1dCBhIG5ldyBvbmUgd2FzIGNyZWF0ZWQgb24gZWFjaCBhY2Nlc3Mgb2YgdGhlIGF0dHJpYnV0ZS4KIAorLSBJc3N1ZSAjMjI2Mzg6IFNTTHYzIGlzIG5vdyBkaXNhYmxlZCB0aHJvdWdob3V0IHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgorICBJdCBjYW4gc3RpbGwgYmUgZW5hYmxlZCBieSBpbnN0YW50aWF0aW5nIGEgU1NMQ29udGV4dCBtYW51YWxseS4KKwogLSBJc3N1ZSAjMjI2NDE6IEluIGFzeW5jaW8sIHRoZSBkZWZhdWx0IFNTTCBjb250ZXh0IGZvciBjbGllbnQgY29ubmVjdGlvbnMKICAgaXMgbm93IGNyZWF0ZWQgdXNpbmcgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSwgZm9yIHN0cm9uZ2VyIHNlY3VyaXR5LgogCistIElzc3VlICMxNzQwMTogSW5jbHVkZSBjbG9zZWZkIGluIGlvLkZpbGVJTyByZXByLgorCistIElzc3VlICMyMTMzODogQWRkIHNpbGVudCBtb2RlIGZvciBjb21waWxlYWxsLiBxdWlldCBwYXJhbWV0ZXJzIG9mCisgIGNvbXBpbGVfe2RpciwgZmlsZSwgcGF0aH0gZnVuY3Rpb25zIG5vdyBoYXZlIGEgbXVsdGlsZXZlbCB2YWx1ZS4gQWxzbywKKyAgLXEgb3B0aW9uIG9mIHRoZSBDTEkgbm93IGhhdmUgYSBtdWx0aWxldmVsIHZhbHVlLiBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMjAxNTI6IENvbnZlcnQgdGhlIGFycmF5IGFuZCBjbWF0aCBtb2R1bGVzIHRvIEFyZ3VtZW50IENsaW5pYy4KKworLSBJc3N1ZSAjMTg2NDM6IEFkZCBzb2NrZXQuc29ja2V0cGFpcigpIG9uIFdpbmRvd3MuCisKIC0gSXNzdWUgIzIyNDM1OiBGaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayB3aGVuIFNvY2tldFNlcnZlciBiaW5kIGZhaWxzLgogCiAtIElzc3VlICMxMzA5NjogRml4ZWQgc2VnZmF1bHQgaW4gQ1R5cGVzIFBPSU5URVIgaGFuZGxpbmcgb2YgbGFyZ2UKQEAgLTExNTcsOSArMzIzNiwxOSBAQAogLSBJc3N1ZSAjMTE2OTQ6IFJhaXNlIENvbnZlcnNpb25FcnJvciBpbiB4ZHJsaWIgYXMgZG9jdW1lbnRlZC4gIFBhdGNoCiAgIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kgYW5kIENsYXVkaXUgUG9wYS4KIAorLSBJc3N1ZSAjMTkzODA6IE9wdGltaXplZCBwYXJzaW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKKy0gSXNzdWUgIzE1MTk2Mzg6IE5vdyB1bm1hdGNoZWQgZ3JvdXBzIGFyZSByZXBsYWNlZCB3aXRoIGVtcHR5IHN0cmluZ3MgaW4gcmUuc3ViKCkKKyAgYW5kIHJlLnN1Ym4oKS4KKworLSBJc3N1ZSAjMTg2MTU6IHNuZGhkci53aGF0L3doYXRoZHIgbm93IHJldHVybiBhIG5hbWVkdHVwbGUuCisKIC0gSXNzdWUgIzIyNDYyOiBGaXggcHlleHBhdCdzIGNyZWF0aW9uIG9mIGEgZHVtbXkgZnJhbWUgdG8gbWFrZSBpdAogICBhcHBlYXIgaW4gZXhjZXB0aW9uIHRyYWNlYmFja3MuCiAKKy0gSXNzdWUgIzIxOTY1OiBBZGQgc3VwcG9ydCBmb3IgaW4tbWVtb3J5IFNTTCB0byB0aGUgc3NsIG1vZHVsZS4gIFBhdGNoCisgIGJ5IEdlZXJ0IEphbnNlbi4KKwogLSBJc3N1ZSAjMjExNzM6IEZpeCBsZW4oKSBvbiBhIFdlYWtLZXlEaWN0aW9uYXJ5IHdoZW4gLmNsZWFyKCkgd2FzIGNhbGxlZAogICB3aXRoIGFuIGl0ZXJhdG9yIGFsaXZlLgogCkBAIC0xMTY5LDE0OSArMzI1OCw0NCBAQAogLSBJc3N1ZSAjMjE5MDU6IEF2b2lkIFJ1bnRpbWVFcnJvciBpbiBwaWNrbGUud2hpY2htb2R1bGUoKSB3aGVuIHN5cy5tb2R1bGVzCiAgIGlzIG11dGF0ZWQgd2hpbGUgaXRlcmF0aW5nLiAgUGF0Y2ggYnkgT2xpdmllciBHcmlzZWwuCiAKKy0gSXNzdWUgIzExMjcxOiBjb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3IubWFwKCkgbm93IHRha2VzIGEgKmNodW5rc2l6ZSoKKyAgYXJndW1lbnQgdG8gYWxsb3cgYmF0Y2hpbmcgb2YgdGFza3MgaW4gY2hpbGQgcHJvY2Vzc2VzIGFuZCBpbXByb3ZlCisgIHBlcmZvcm1hbmNlIG9mIFByb2Nlc3NQb29sRXhlY3V0b3IuICBQYXRjaCBieSBEYW4gTydSZWlsbHkuCisKKy0gSXNzdWUgIzIxODgzOiBvcy5wYXRoLmpvaW4oKSBhbmQgb3MucGF0aC5yZWxwYXRoKCkgbm93IHJhaXNlIGEgVHlwZUVycm9yIHdpdGgKKyAgbW9yZSBoZWxwZnVsIGVycm9yIG1lc3NhZ2UgZm9yIHVuc3VwcG9ydGVkIG9yIG1pc21hdGNoZWQgdHlwZXMgb2YgYXJndW1lbnRzLgorCiAtIElzc3VlICMyMjIxOTogVGhlIHppcGZpbGUgbW9kdWxlIENMSSBub3cgYWRkcyBlbnRyaWVzIGZvciBkaXJlY3RvcmllcwogICAoaW5jbHVkaW5nIGVtcHR5IGRpcmVjdG9yaWVzKSBpbiBaSVAgZmlsZS4KIAogLSBJc3N1ZSAjMjI0NDk6IEluIHRoZSBzc2wuU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMsIGNvbnN1bHQgdGhlCiAgIGVudmlyb25tZW50YWwgdmFyaWFibGVzIFNTTF9DRVJUX0RJUiBhbmQgU1NMX0NFUlRfRklMRSBvbiBXaW5kb3dzLgogCistIElzc3VlICMyMjUwODogVGhlIGVtYWlsLl9fdmVyc2lvbl9fIHZhcmlhYmxlIGhhcyBiZWVuIHJlbW92ZWQ7IHRoZSBlbWFpbAorICBjb2RlIGlzIG5vIGxvbmdlciBzaGlwcGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgc3RkbGliLCBhbmQgX192ZXJzaW9uX18KKyAgaGFzbid0IGJlZW4gdXBkYXRlZCBpbiBzZXZlcmFsIHJlbGVhc2VzLgorCiAtIElzc3VlICMyMDA3NjogQWRkZWQgbm9uIGRlcml2ZWQgVVRGLTggYWxpYXNlcyB0byBsb2NhbGUgYWxpYXNlcyB0YWJsZS4KIAogLSBJc3N1ZSAjMjAwNzk6IEFkZGVkIGxvY2FsZXMgc3VwcG9ydGVkIGluIGdsaWJjIDIuMTggdG8gbG9jYWxlIGFsaWFzIHRhYmxlLgogCistIElzc3VlICMyMDIxODogQWRkZWQgY29udmVuaWVuY2UgbWV0aG9kcyByZWFkX3RleHQvd3JpdGVfdGV4dCBhbmQgcmVhZF9ieXRlcy8KKyAgd3JpdGVfYnl0ZXMgdG8gcGF0aGxpYi5QYXRoIG9iamVjdHMuCisKIC0gSXNzdWUgIzIyMzk2OiBPbiAzMi1iaXQgQUlYIHBsYXRmb3JtLCBkb24ndCBleHBvc2Ugb3MucG9zaXhfZmFkdmlzZSgpIG5vcgogICBvcy5wb3NpeF9mYWxsb2NhdGUoKSBiZWNhdXNlIHRoZWlyIHByb3RvdHlwZXMgaW4gc3lzdGVtIGhlYWRlcnMgYXJlIHdyb25nLgogCi0tIElzc3VlICMyMjUxNzogV2hlbiBhIGlvLkJ1ZmZlcmVkUldQYWlyIG9iamVjdCBpcyBkZWFsbG9jYXRlZCwgY2xlYXIgaXRzCistIElzc3VlICMyMjUxNzogV2hlbiBhbiBpby5CdWZmZXJlZFJXUGFpciBvYmplY3QgaXMgZGVhbGxvY2F0ZWQsIGNsZWFyIGl0cwogICB3ZWFrcmVmcy4KIAotLSBJc3N1ZSAjMjI0NDg6IEltcHJvdmUgY2FuY2VsZWQgdGltZXIgaGFuZGxlcyBjbGVhbnVwIHRvIHByZXZlbnQKLSAgdW5ib3VuZCBtZW1vcnkgdXNhZ2UuIFBhdGNoIGJ5IEpvc2h1YSBNb29yZS1PbGl2YS4KKy0gSXNzdWUgIzIyNDM3OiBOdW1iZXIgb2YgY2FwdHVyaW5nIGdyb3VwcyBpbiByZWd1bGFyIGV4cHJlc3Npb24gaXMgbm8gbG9uZ2VyCisgIGxpbWl0ZWQgYnkgMTAwLgogCi0tIElzc3VlICMyMzAwOTogTWFrZSBzdXJlIHNlbGVjdG9ycy5FcG9sbFNlbGVjcnRvci5zZWxlY3QoKSB3b3JrcyB3aGVuIG5vCi0gIEZEIGlzIHJlZ2lzdGVyZWQuCi0KLUlETEUKLS0tLS0KLQotLSBJc3N1ZSAjMjA1Nzc6IENvbmZpZ3VyYXRpb24gb2YgdGhlIG1heCBsaW5lIGxlbmd0aCBmb3IgdGhlIEZvcm1hdFBhcmFncmFwaAotICBleHRlbnNpb24gaGFzIGJlZW4gbW92ZWQgZnJvbSB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIElkbGUgcHJlZmVyZW5jZXMgZGlhbG9nCi0gIHRvIHRoZSBGb3JtYXRQYXJhZ3JhcGggdGFiIG9mIHRoZSBDb25maWcgRXh0ZW5zaW9ucyBkaWFsb2cuCi0gIFBhdGNoIGJ5IFRhbCBFaW5hdC4KLQotLSBJc3N1ZSAjMTY4OTM6IFVwZGF0ZSBJZGxlIGRvYyBjaGFwdGVyIHRvIG1hdGNoIGN1cnJlbnQgSWRsZSBhbmQgYWRkIG5ldwotICBpbmZvcm1hdGlvbi4KLQotLSBJc3N1ZSAjMzA2ODogQWRkIElkbGUgZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb24gZGlhbG9nIHRvIE9wdGlvbnMgbWVudS4KLSAgQ2hhbmdlcyBhcmUgd3JpdHRlbiB0byBIT01FLy5pZGxlcmMvY29uZmlnLWV4dGVuc2lvbnMuY2ZnLgotICBPcmlnaW5hbCBwYXRjaCBieSBUYWwgRWluYXQuCi0KLS0gSXNzdWUgIzE2MjMzOiBBIG1vZHVsZSBicm93c2VyIChGaWxlIDogQ2xhc3MgQnJvd3NlciwgQWx0K0MpIHJlcXVpcmVzIGFuCi0gIGVkaXRvciB3aW5kb3cgd2l0aCBhIGZpbGVuYW1lLiAgV2hlbiBDbGFzcyBCcm93c2VyIGlzIHJlcXVlc3RlZCBvdGhlcndpc2UsCi0gIGZyb20gYSBzaGVsbCwgb3V0cHV0IHdpbmRvdywgb3IgJ1VudGl0bGVkJyBlZGl0b3IsIElkbGUgbm8gbG9uZ2VyIGRpc3BsYXlzCi0gIGFuIGVycm9yIGJveC4gIEl0IG5vdyBwb3BzIHVwIGFuIE9wZW4gTW9kdWxlIGJveCAoQWx0K00pLiBJZiBhIHZhbGlkIG5hbWUKLSAgaXMgZW50ZXJlZCBhbmQgYSBtb2R1bGUgaXMgb3BlbmVkLCBhIGNvcnJlc3BvbmRpbmcgYnJvd3NlciBpcyBhbHNvIG9wZW5lZC4KLQotLSBJc3N1ZSAjNDgzMjogU2F2ZSBBcyB0byB0eXBlIFB5dGhvbiBmaWxlcyBhdXRvbWF0aWNhbGx5IGFkZHMgLnB5IHRvIHRoZQotICBuYW1lIHlvdSBlbnRlciAoZXZlbiBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBkaXNwbGF5IGl0KS4gIFNvbWUgc3lzdGVtcwotICBhdXRvbWF0aWNhbGx5IGFkZCAudHh0IHdoZW4gdHlwZSBpcyBUZXh0IGZpbGVzLgotCi0tIElzc3VlICMyMTk4NjogQ29kZSBvYmplY3RzIGFyZSBub3Qgbm9ybWFsbHkgcGlja2xlZCBieSB0aGUgcGlja2xlIG1vZHVsZS4KLSAgVG8gbWF0Y2ggdGhpcywgdGhleSBhcmUgbm8gbG9uZ2VyIHBpY2tsZWQgd2hlbiBydW5uaW5nIHVuZGVyIElkbGUuCi0KLS0gSXNzdWUgIzIzMTgwOiBSZW5hbWUgSURMRSAiV2luZG93cyIgbWVudSBpdGVtIHRvICJXaW5kb3ciLgotICBQYXRjaCBieSBBbCBTd2VpZ2FydC4KLQotVGVzdHMKLS0tLS0tCistIElzc3VlICMxNzQ0MjogSW50ZXJhY3RpdmVJbnRlcnByZXRlciBub3cgZGlzcGxheXMgdGhlIGZ1bGwgY2hhaW5lZCB0cmFjZWJhY2sKKyAgaW4gaXRzIHNob3d0cmFjZWJhY2sgbWV0aG9kLCB0byBtYXRjaCB0aGUgYnVpbHQgaW4gaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCiAKIC0gSXNzdWUgIzIzMzkyOiBBZGRlZCB0ZXN0cyBmb3IgbWFyc2hhbCBDIEFQSSB0aGF0IHdvcmtzIHdpdGggRklMRSouCiAKLS0gSXNzdWUgIzE4OTgyOiBBZGQgdGVzdHMgZm9yIENMSSBvZiB0aGUgY2FsZW5kYXIgbW9kdWxlLgotCi0tIElzc3VlICMxOTU0ODogQWRkZWQgc29tZSBhZGRpdGlvbmFsIGNoZWNrcyB0byB0ZXN0X2NvZGVjcyB0byBlbnN1cmUgdGhhdAotICBzdGF0ZW1lbnRzIGluIHRoZSB1cGRhdGVkIGRvY3VtZW50YXRpb24gcmVtYWluIGFjY3VyYXRlLiBQYXRjaCBieSBNYXJ0aW4KLSAgUGFudGVyLgotCi0tIElzc3VlICMyMjgzODogQWxsIHRlc3RfcmUgdGVzdHMgbm93IHdvcmsgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KLQotLSBJc3N1ZSAjMjIxNzM6IFVwZGF0ZSBsaWIydG8zIHRlc3RzIHRvIHVzZSB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KLQotLSBJc3N1ZSAjMTYwMDA6IENvbnZlcnQgdGVzdF9jdXJzZXMgdG8gdXNlIHVuaXR0ZXN0LgotCi0tIElzc3VlICMyMTQ1NjogU2tpcCB0d28gdGVzdHMgaW4gdGVzdF91cmxsaWIybmV0LnB5IGlmIF9zc2wgbW9kdWxlIG5vdAotICBwcmVzZW50LiBQYXRjaCBieSBSZW1pIFBvaW50ZWwuCi0KLS0gSXNzdWUgIzIyNzcwOiBQcmV2ZW50IHNvbWUgVGsgc2VnZmF1bHRzIG9uIE9TIFggd2hlbiBydW5uaW5nIGd1aSB0ZXN0cy4KLQotLSBJc3N1ZSAjMjMyMTE6IFdvcmthcm91bmQgdGVzdF9sb2dnaW5nIGZhaWx1cmUgb24gc29tZSBPUyBYIDEwLjYgc3lzdGVtcy4KLQotLSBJc3N1ZSAjMjMzNDU6IFByZXZlbnQgdGVzdF9zc2wgZmFpbHVyZXMgd2l0aCBsYXJnZSBPcGVuU1NMIHBhdGNoIGxldmVsCi0gIHZhbHVlcyAobGlrZSAwLjkuOHpjKS4KLQotLSBJc3N1ZSAjMjIyODk6IFByZXZlbnQgdGVzdF91cmxsaWIybmV0IGZhaWx1cmVzIGR1ZSB0byBmdHAgY29ubmVjdGlvbiB0aW1lb3V0LgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTU1MDY6IFVzZSBzdGFuZGFyZCBQS0dfUFJPR19QS0dfQ09ORklHIGF1dG9jb25mIG1hY3JvIGluIHRoZSBjb25maWd1cmUKLSAgc2NyaXB0LgotCi0tIElzc3VlICMyMjkzNTogQWxsb3cgdGhlIHNzbCBtb2R1bGUgdG8gYmUgY29tcGlsZWQgaWYgb3BlbnNzbCBkb2Vzbid0IHN1cHBvcnQKLSAgU1NMIDMuCi0KLS0gSXNzdWUgIzE2NTM3OiBDaGVjayB3aGV0aGVyIHNlbGYuZXh0ZW5zaW9ucyBpcyBlbXB0eSBpbiBzZXR1cC5weS4gUGF0Y2ggYnkKLSAgSm9uYXRoYW4gSG9zbWVyLgotCi0tIElzc3VlICMxODA5NjogRml4IGxpYnJhcnkgb3JkZXIgcmV0dXJuZWQgYnkgcHl0aG9uLWNvbmZpZy4KLQotLSBJc3N1ZSAjMTcyMTk6IEFkZCBsaWJyYXJ5IGJ1aWxkIGRpciBmb3IgUHl0aG9uIGV4dGVuc2lvbiBjcm9zcy1idWlsZHMuCi0KLS0gSXNzdWUgIzE3MTI4OiBVc2UgcHJpdmF0ZSB2ZXJzaW9uIG9mIE9wZW5TU0wgZm9yIDMuNC4zIE9TIFggMTAuNSsgaW5zdGFsbGVyLgotCi1DIEFQSQotLS0tLS0KLQotLSBJc3N1ZSAjMjIwNzk6IFB5VHlwZV9SZWFkeSgpIG5vdyBjaGVja3MgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0eXBlIGhhcwotICBubyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmFzZXMuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTk1NDg6IFVwZGF0ZSB0aGUgY29kZWNzIG1vZHVsZSBkb2N1bWVudGF0aW9uIHRvIGJldHRlciBjb3ZlciB0aGUKLSAgZGlzdGluY3Rpb24gYmV0d2VlbiB0ZXh0IGVuY29kaW5ncyBhbmQgb3RoZXIgY29kZWNzLCB0b2dldGhlciB3aXRoIG90aGVyCi0gIGNsYXJpZmljYXRpb25zLiBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgotCi0tIElzc3VlICMyMjkxNDogVXBkYXRlIHRoZSBQeXRob24gMi8zIHBvcnRpbmcgSE9XVE8gdG8gZGVzY3JpYmUgYSBtb3JlIGF1dG9tYXRlZAotICBhcHByb2FjaC4KLQotLSBJc3N1ZSAjMjE1MTQ6IFRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBqc29uIG1vZHVsZSBub3cgcmVmZXJzIHRvIG5ldyBKU09OIFJGQwotICA3MTU5IGluc3RlYWQgb2Ygb2Jzb2xldGVkIFJGQyA0NjI3LgotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMjIzMTQ6IHB5ZG9jIG5vdyB3b3JrcyB3aGVuIHRoZSBMSU5FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuCi0KLVdpbmRvd3MKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc4OTY6IFRoZSBXaW5kb3dzIGJ1aWxkIHNjcmlwdHMgbm93IGV4cGVjdCBleHRlcm5hbCBsaWJyYXJ5IHNvdXJjZXMKLSAgdG8gYmUgaW4gYGBQQ2J1aWxkXC4uXGV4dGVybmFsc2BgIHJhdGhlciB0aGFuIGBgUENidWlsZFwuLlwuLmBgLgotCi0tIElzc3VlICMxNzcxNzogVGhlIFdpbmRvd3MgYnVpbGQgc2NyaXB0cyBub3cgdXNlIGEgY29weSBvZiBOQVNNIHB1bGxlZCBmcm9tCi0gIHN2bi5weXRob24ub3JnIHRvIGJ1aWxkIE9wZW5TU0wuCi0KLS0gSXNzdWUgIzIyNjQ0OiBUaGUgYnVuZGxlZCB2ZXJzaW9uIG9mIE9wZW5TU0wgaGFzIGJlZW4gdXBkYXRlZCB0byAxLjAuMWouCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVsZWFzZSBkYXRlOiAyMDE0LTEwLTA2Ci0KLUxpYnJhcnkKLS0tLS0tLS0KIAogLSBJc3N1ZSAjMTA1MTA6IGRpc3R1dGlscyByZWdpc3RlciBhbmQgdXBsb2FkIG1ldGhvZHMgbm93IHVzZSBIVE1MIHN0YW5kYXJkcwogICBjb21wbGlhbnQgQ1JMRiBsaW5lIGVuZGluZ3MuCkBAIC0xMzE5LDE1ICszMzAzLDI3IEBACiAtIElzc3VlICM5ODUwOiBGaXhlZCBtYWNwYXRoLmpvaW4oKSBmb3IgZW1wdHkgZmlyc3QgY29tcG9uZW50LiAgUGF0Y2ggYnkKICAgT2xlZyBPc2hteWFuLgogCistIElzc3VlICM1MzA5OiBkaXN0dXRpbHMnIGJ1aWxkIGFuZCBidWlsZF9leHQgY29tbWFuZHMgbm93IGFjY2VwdCBhIGBgLWpgYAorICBvcHRpb24gdG8gZW5hYmxlIHBhcmFsbGVsIGJ1aWxkaW5nIG9mIGV4dGVuc2lvbiBtb2R1bGVzLgorCistIElzc3VlICMyMjQ0ODogSW1wcm92ZSBjYW5jZWxlZCB0aW1lciBoYW5kbGVzIGNsZWFudXAgdG8gcHJldmVudAorICB1bmJvdW5kIG1lbW9yeSB1c2FnZS4gUGF0Y2ggYnkgSm9zaHVhIE1vb3JlLU9saXZhLgorCiAtIElzc3VlICMyMjQyNzogVGVtcG9yYXJ5RGlyZWN0b3J5IG5vIGxvbmdlciBhdHRlbXB0cyB0byBjbGVhbiB1cCB0d2ljZSB3aGVuCiAgIHVzZWQgaW4gdGhlIHdpdGggc3RhdGVtZW50IGluIGdlbmVyYXRvci4KIAorLSBJc3N1ZSAjMjIzNjI6IEZvcmJpZGRlbiBhbWJpZ3VvdXMgb2N0YWwgZXNjYXBlcyBvdXQgb2YgcmFuZ2UgMC0wbzM3NyBpbgorICByZWd1bGFyIGV4cHJlc3Npb25zLgorCiAtIElzc3VlICMyMDkxMjogTm93IGRpcmVjdG9yaWVzIGFkZGVkIHRvIFpJUCBmaWxlIGhhdmUgY29ycmVjdCBVbml4IGFuZCBNUy1ET1MKICAgZGlyZWN0b3J5IGF0dHJpYnV0ZXMuCiAKIC0gSXNzdWUgIzIxODY2OiBaaXBGaWxlLmNsb3NlKCkgbm8gbG9uZ2VyIHdyaXRlcyBaSVA2NCBjZW50cmFsIGRpcmVjdG9yeQogICByZWNvcmRzIGlmIGFsbG93WmlwNjQgaXMgZmFsc2UuCiAKKy0gSXNzdWUgIzIyMjc4OiBGaXggdXJsam9pbiBwcm9ibGVtIHdpdGggcmVsYXRpdmUgdXJscywgYSByZWdyZXNzaW9uIG9ic2VydmVkCisgIGFmdGVyIGNoYW5nZXMgdG8gaXNzdWUyMjExOCB3ZXJlIHN1Ym1pdHRlZC4KKwogLSBJc3N1ZSAjMjI0MTU6IEZpeGVkIGRlYnVnZ2luZyBvdXRwdXQgb2YgdGhlIEdST1VQUkVGX0VYSVNUUyBvcGNvZGUgaW4gdGhlIHJlCiAgIG1vZHVsZS4gIFJlbW92ZWQgdHJhaWxpbmcgc3BhY2VzIGluIGRlYnVnZ2luZyBvdXRwdXQuCiAKQEAgLTEzMzcsNDcgKzMzMzMsMTggQEAKIC0gSXNzdWUgIzIxMzMyOiBFbnN1cmUgdGhhdCBgYGJ1ZnNpemU9MWBgIGluIHN1YnByb2Nlc3MuUG9wZW4oKSBzZWxlY3RzCiAgIGxpbmUgYnVmZmVyaW5nLCByYXRoZXIgdGhhbiBibG9jayBidWZmZXJpbmcuICBQYXRjaCBieSBBa2lyYSBMaS4KIAotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMnJjMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1SZWxlYXNlIGRhdGU6IDIwMTQtMDktMjIKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzIyMjU4OiBGaXggdGhlIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBzZXRfaW5oZXJpdGFibGUoKSBvbiBJbGx1bW9zLgotICBUaGlzIHBsYXRmb3JtIGV4cG9zZXMgdGhlIGZ1bmN0aW9uIGBgaW9jdGwoRklPQ0xFWClgYCwgYnV0IGNhbGxpbmcgaXQgZmFpbHMKLSAgd2l0aCBlcnJubyBpcyBFTk9UVFk6ICJJbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2UiLiBzZXRfaW5oZXJpdGFibGUoKQotICBub3cgZmFsbHMgYmFjayB0byB0aGUgc2xvd2VyIGBgZmNudGwoKWBgIChgYEZfR0VURkRgYCBhbmQgdGhlbiBgYEZfU0VURkRgYCkuCi0KLS0gSXNzdWUgIzIxNjY5OiBXaXRoIHRoZSBhaWQgb2YgaGV1cmlzdGljcyBpbiBTeW50YXhFcnJvci5fX2luaXRfXywgdGhlCi0gIHBhcnNlciBub3cgYXR0ZW1wdHMgdG8gZ2VuZXJhdGUgbW9yZSBtZWFuaW5nZnVsIChvciBhdCBsZWFzdCBtb3JlIHNlYXJjaAotICBlbmdpbmUgZnJpZW5kbHkpIGVycm9yIG1lc3NhZ2VzIHdoZW4gImV4ZWMiIGFuZCAicHJpbnQiIGFyZSB1c2VkIGFzCi0gIHN0YXRlbWVudHMuCi0KLS0gSXNzdWUgIzIxNjQyOiBJbiB0aGUgY29uZGl0aW9uYWwgaWYtZWxzZSBleHByZXNzaW9uLCBhbGxvdyBhbiBpbnRlZ2VyIHdyaXR0ZW4KLSAgd2l0aCBubyBzcGFjZSBiZXR3ZWVuIGl0c2VsZiBhbmQgdGhlIGBgZWxzZWBgIGtleXdvcmQgKGUuZy4gYGBUcnVlIGlmIDQyZWxzZQotICBGYWxzZWBgKSB0byBiZSB2YWxpZCBzeW50YXguCi0KLS0gSXNzdWUgIzIxNTIzOiBGaXggb3Zlci1wZXNzaW1pc3RpYyBjb21wdXRhdGlvbiBvZiB0aGUgc3RhY2sgZWZmZWN0IG9mCi0gIHNvbWUgb3Bjb2RlcyBpbiB0aGUgY29tcGlsZXIuICBUaGlzIGFsc28gZml4ZXMgYSBxdWFkcmF0aWMgY29tcGlsYXRpb24KLSAgdGltZSBpc3N1ZSBub3RpY2VhYmxlIHdoZW4gY29tcGlsaW5nIGNvZGUgd2l0aCBhIGxhcmdlIG51bWJlciBvZiAiYW5kIgotICBhbmQgIm9yIiBvcGVyYXRvcnMuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQogLSBJc3N1ZSAjMjEwOTE6IEZpeCBBUEkgYnVnOiBlbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZS5pc19hdHRhY2htZW50IGlzIG5vdwotICBhIG1ldGhvZC4gIFNpbmNlIEVtYWlsTWVzc2FnZSBpcyBwcm92aXNpb25hbCwgd2UgY2FuIGNoYW5nZSB0aGUgQVBJIGluIGEKLSAgbWFpbnRlbmFuY2UgcmVsZWFzZSwgYnV0IHdlIHVzZSBhIHRyaWNrIHRvIHJlbWFpbiBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGgKLSAgMy40LjAvMS4KKyAgYSBtZXRob2QuCiAKIC0gSXNzdWUgIzIxMDc5OiBGaXggZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuaXNfYXR0YWNobWVudCB0byByZXR1cm4gdGhlCiAgIGNvcnJlY3QgcmVzdWx0IHdoZW4gdGhlIGhlYWRlciBoYXMgcGFyYW1ldGVycyBhcyB3ZWxsIGFzIGEgdmFsdWUuCiAKIC0gSXNzdWUgIzIyMjQ3OiBBZGQgTk5UUEVycm9yIHRvIG5udHBsaWIuX19hbGxfXy4KIAorLSBJc3N1ZSAjMjIzNjY6IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4gd2lsbCBhY2NlcHQgYSBjb250ZXh0IG9iamVjdAorICAoU1NMQ29udGV4dCkgYXMgYW4gYXJndW1lbnQgd2hpY2ggd2lsbCB0aGVuIGJlIHVzZWQgZm9yIEhUVFBTIGNvbm5lY3Rpb24uCisgIFBhdGNoIGJ5IEFsZXggR2F5bm9yLgorCiAtIElzc3VlICM0MTgwOiBUaGUgd2FybmluZ3MgcmVnaXN0cmllcyBhcmUgbm93IHJlc2V0IHdoZW4gdGhlIGZpbHRlcnMKICAgYXJlIG1vZGlmaWVkLgogCkBAIC0xMzg5LDEzICszMzU2LDE5IEBACiAgIHdpdGggbm9uLXN0YW5kYXJkIGNvb2tpZSBoYW5kbGluZyBpbiBzb21lIFdlYiBicm93c2Vycy4gIFJlcG9ydGVkIGJ5CiAgIFNlcmdleSBCb2Jyb3YuCiAKKy0gSXNzdWUgIzIwNTM3OiBsb2dnaW5nIG1ldGhvZHMgbm93IGFjY2VwdCBhbiBleGNlcHRpb24gaW5zdGFuY2UgYXMgd2VsbCBhcyBhCisgIEJvb2xlYW4gdmFsdWUgb3IgZXhjZXB0aW9uIHR1cGxlLiBUaGFua3MgdG8gWXVyeSBTZWxpdmFub3YgZm9yIHRoZSBwYXRjaC4KKwogLSBJc3N1ZSAjMjIzODQ6IEFuIGV4Y2VwdGlvbiBpbiBUa2ludGVyIGNhbGxiYWNrIG5vIGxvbmdlciBjcmFzaGVzIHRoZSBwcm9ncmFtCiAgIHdoZW4gaXQgaXMgcnVuIHdpdGggcHl0aG9udy5leGUuCiAKIC0gSXNzdWUgIzIyMTY4OiBQcmV2ZW50IHR1cnRsZSBBdHRyaWJ1dGVFcnJvciB3aXRoIG5vbi1kZWZhdWx0IENhbnZhcyBvbiBPUyBYLgogCiAtIElzc3VlICMyMTE0Nzogc3FsaXRlMyBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcmVxdWVzdCBjb250YWlucyBhIG51bGwKLSAgY2hhcmFjdGVyIGluc3RlYWQgb2YgdHJ1bmNhdGUgaXQuICBCYXNlZCBvbiBwYXRjaCBieSBWaWN0b3IgU3Rpbm5lci4KKyAgY2hhcmFjdGVyIGluc3RlYWQgb2YgdHJ1bmNhdGluZyBpdC4gIEJhc2VkIG9uIHBhdGNoIGJ5IFZpY3RvciBTdGlubmVyLgorCistIElzc3VlICMxMzk2ODogVGhlIGdsb2IgbW9kdWxlIG5vdyBzdXBwb3J0cyByZWN1cnNpdmUgc2VhcmNoIGluCisgIHN1YmRpcmVjdG9yaWVzIHVzaW5nIHRoZSAiKioiIHBhdHRlcm4uCiAKIC0gSXNzdWUgIzIxOTUxOiBGaXhlZCBhIGNyYXNoIGluIFRraW50ZXIgb24gQUlYIHdoZW4gY2FsbGVkIFRjbCBjb21tYW5kIHdpdGgKICAgZW1wdHkgc3RyaW5nIG9yIHR1cGxlIGFyZ3VtZW50LgpAQCAtMTQwNSwxMiArMzM3OCwzMSBAQAogCiAtIElzc3VlICMyMjMzODogRml4IGEgY3Jhc2ggaW4gdGhlIGpzb24gbW9kdWxlIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCiAKKy0gSXNzdWUgIzEyNDEwOiBpbWFwbGliLklNQVA0IG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgorICBPcmlnaW5hbCBwYXRjaCBieSBUYXJlayBaaWFkw6kuCisKKy0gSXNzdWUgIzIxMjcwOiBXZSBub3cgb3ZlcnJpZGUgdHVwbGUgbWV0aG9kcyBpbiBtb2NrLmNhbGwgb2JqZWN0cyBzbyB0aGF0CisgIHRoZXkgY2FuIGJlIHVzZWQgYXMgbm9ybWFsIGNhbGwgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMTY2NjI6IGxvYWRfdGVzdHMoKSBpcyBub3cgdW5jb25kaXRpb25hbGx5IHJ1biB3aGVuIGl0IGlzIHByZXNlbnQgaW4KKyAgYSBwYWNrYWdlJ3MgX19pbml0X18ucHkuICBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoKSBzdGlsbCBhY2NlcHRzCisgIHVzZV9sb2FkX3Rlc3RzLCBidXQgaXQgaXMgZGVwcmVjYXRlZCBhbmQgaWdub3JlZC4gIEEgbmV3IGtleXdvcmQtb25seQorICBhdHRyaWJ1dGUgYHBhdHRlcm5gIGlzIGFkZGVkIGFuZCBkb2N1bWVudGVkLiAgUGF0Y2ggZ2l2ZW4gYnkgUm9iZXJ0IENvbGxpbnMsCisgIHR3ZWFrZWQgYnkgQmFycnkgV2Fyc2F3LgorCiAtIElzc3VlICMyMjIyNjogRmlyc3QgbGV0dGVyIG5vIGxvbmdlciBpcyBzdHJpcHBlZCBmcm9tIHRoZSAic3RhdHVzIiBrZXkgaW4KICAgdGhlIHJlc3VsdCBvZiBUcmVldmlldy5oZWFkaW5nKCkuCiAKIC0gSXNzdWUgIzE5NTI0OiBGaXhlZCByZXNvdXJjZSBsZWFrIGluIHRoZSBIVFRQIGNvbm5lY3Rpb24gd2hlbiBhbiBpbnZhbGlkCiAgIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KIAorLSBJc3N1ZSAjMjA0MjE6IEFkZCBhIC52ZXJzaW9uKCkgbWV0aG9kIHRvIFNTTCBzb2NrZXRzIGV4cG9zaW5nIHRoZSBhY3R1YWwKKyAgcHJvdG9jb2wgdmVyc2lvbiBpbiB1c2UuCisKKy0gSXNzdWUgIzE5NTQ2OiBjb25maWdwYXJzZXIgZXhjZXB0aW9ucyBubyBsb25nZXIgZXhwb3NlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCisgIENoYWluZWQgS2V5RXJyb3JzIGFyZSByZW1vdmVkLCB3aGljaCBsZWFkcyB0byBjbGVhbmVyIHRyYWNlYmFja3MuICBQYXRjaCBieQorICBDbGF1ZGl1IFBvcGEuCisKIC0gSXNzdWUgIzIyMDUxOiB0dXJ0bGVkZW1vIG5vIGxvbmdlciByZWxvYWRzIGV4YW1wbGVzIHRvIHJlLXJ1biB0aGVtLgogICBJbml0aWFsaXphdGlvbiBvZiB2YXJpYWJsZXMgYW5kIGd1aSBzZXR1cCBzaG91bGQgYmUgZG9uZSBpbiBtYWluKCksCiAgIHdoaWNoIGlzIGNhbGxlZCBlYWNoIHRpbWUgYSBkZW1vIGlzIHJ1biwgYnV0IG5vdCBvbiBpbXBvcnQuCkBAIC0xNDI3LDIzICszNDE5LDU3IEBACiAtIElzc3VlICMxODEzMjogVHVydGxlZGVtbyBidXR0b25zIG5vIGxvbmdlciBkaXNhcHBlYXIgd2hlbiB0aGUgd2luZG93IGlzCiAgIHNocnVuay4gIE9yaWdpbmFsIHBhdGNoZXMgYnkgSmFuIEthbmlzIGFuZCBMaXRhIENoby4KIAorLSBJc3N1ZSAjMjIwNDM6IHRpbWUubW9ub3RvbmljKCkgaXMgbm93IGFsd2F5cyBhdmFpbGFibGUuCisgIGBgdGhyZWFkaW5nLkxvY2suYWNxdWlyZSgpYGAsIGBgdGhyZWFkaW5nLlJMb2NrLmFjcXVpcmUoKWBgIGFuZCBzb2NrZXQKKyAgb3BlcmF0aW9ucyBub3cgdXNlIGEgbW9ub3RvbmljIGNsb2NrLCBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0gY2xvY2ssIHdoZW4gYQorICB0aW1lb3V0IGlzIHVzZWQuCisKKy0gSXNzdWUgIzIxNTI3OiBBZGQgYSBkZWZhdWx0IG51bWJlciBvZiB3b3JrZXJzIHRvIFRocmVhZFBvb2xFeGVjdXRvciBlcXVhbAorICB0byA1IHRpbWVzIHRoZSBudW1iZXIgb2YgQ1BVcy4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKwogLSBJc3N1ZSAjMjIyMTY6IHNtdHBsaWIgbm93IHJlc2V0cyBpdHMgc3RhdGUgbW9yZSBjb21wbGV0ZWx5IGFmdGVyIGEgcXVpdC4gIFRoZQogICBtb3N0IG9idmlvdXMgY29uc2VxdWVuY2Ugb2YgdGhlIHByZXZpb3VzIGJlaGF2aW9yIHdhcyBhIFNUQVJUVExTIGZhaWx1cmUKICAgZHVyaW5nIGEgY29ubmVjdC9zdGFydHRscy9xdWl0L2Nvbm5lY3Qvc3RhcnR0bHMgc2VxdWVuY2UuCiAKKy0gSXNzdWUgIzIyMDk4OiBjdHlwZXMnIEJpZ0VuZGlhblN0cnVjdHVyZSBhbmQgTGl0dGxlRW5kaWFuU3RydWN0dXJlIG5vdworICBkZWZpbmUgYW4gZW1wdHkgX19zbG90c19fIHNvIHRoYXQgc3ViY2xhc3NlcyBkb24ndCBhbHdheXMgZ2V0IGFuIGluc3RhbmNlCisgIGRpY3QuICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKIC0gSXNzdWUgIzIyMTg1OiBGaXggYW4gb2NjYXNpb25hbCBSdW50aW1lRXJyb3IgaW4gdGhyZWFkaW5nLkNvbmRpdGlvbi53YWl0KCkKICAgY2F1c2VkIGJ5IG11dGF0aW9uIG9mIHRoZSB3YWl0ZXJzIHF1ZXVlIHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4gIFBhdGNoCiAgIGJ5IERvdWcgWm9uZ2tlci4KIAorLSBJc3N1ZSAjMjIyODc6IE9uIFVOSVgsIF9QeVRpbWVfZ2V0dGltZW9mZGF5KCkgbm93IHVzZXMKKyAgY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSkgaWYgYXZhaWxhYmxlLiBBcyBhIHNpZGUgZWZmZWN0LCBQeXRob24gbm93CisgIGRlcGVuZHMgb24gdGhlIGxpYnJ0IGxpYnJhcnkgb24gU29sYXJpcyBhbmQgb24gTGludXggKG9ubHkgd2l0aCBnbGliYyBvbGRlcgorICB0aGFuIDIuMTcpLgorCiAtIElzc3VlICMyMjE4MjogVXNlIGUuYXJncyB0byB1bnBhY2sgZXhjZXB0aW9ucyBjb3JyZWN0bHkgaW4KICAgZGlzdHV0aWxzLmZpbGVfdXRpbC5tb3ZlX2ZpbGUuIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KIAogLSBUaGUgd2ViYnJvd3NlciBtb2R1bGUgbm93IHVzZXMgc3VicHJvY2VzcydzIHN0YXJ0X25ld19zZXNzaW9uPVRydWUgcmF0aGVyCiAgIHRoYW4gYSBwb3RlbnRpYWxseSByaXNreSBwcmVleGVjX2ZuPW9zLnNldHNpZCBjYWxsLgogCistIElzc3VlICMyMjA0Mjogc2lnbmFsLnNldF93YWtldXBfZmQoZmQpIG5vdyByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZSBmaWxlCisgIGRlc2NyaXB0b3IgaXMgaW4gYmxvY2tpbmcgbW9kZS4KKworLSBJc3N1ZSAjMTY4MDg6IGluc3BlY3Quc3RhY2soKSBub3cgcmV0dXJucyBhIG5hbWVkIHR1cGxlIGluc3RlYWQgb2YgYSB0dXBsZS4KKyAgUGF0Y2ggYnkgRGFuaWVsIFNoYWhhZi4KKwogLSBJc3N1ZSAjMjIyMzY6IEZpeGVkIFRraW50ZXIgaW1hZ2VzIGNvcHlpbmcgb3BlcmF0aW9ucyBpbiBOb0RlZmF1bHRSb290IG1vZGUuCiAKLS0gSXNzdWUgIzIyMTkxOiBGaXggd2FybmluZ3MuX19hbGxfXy4KKy0gSXNzdWUgIzI1Mjc6IEFkZCBhICpnbG9iYWxzKiBhcmd1bWVudCB0byB0aW1laXQgZnVuY3Rpb25zLCBpbiBvcmRlciB0bworICBvdmVycmlkZSB0aGUgZ2xvYmFscyBuYW1lc3BhY2UgaW4gd2hpY2ggdGhlIHRpbWVkIGNvZGUgaXMgZXhlY3V0ZWQuCisgIFBhdGNoIGJ5IEJlbiBSb2JlcnRzLgorCistIElzc3VlICMyMjExODogU3dpdGNoIHVybGxpYi5wYXJzZSB0byB1c2UgUkZDIDM5ODYgc2VtYW50aWNzIGZvciB0aGUKKyAgcmVzb2x1dGlvbiBvZiByZWxhdGl2ZSBVUkxzLCByYXRoZXIgdGhhbiBSRkNzIDE4MDggYW5kIDIzOTYuCisgIFBhdGNoIGJ5IERlbWlhbiBCcmVjaHQuCisKKy0gSXNzdWUgIzIxNTQ5OiBBZGRlZCB0aGUgIm1lbWJlcnMiIHBhcmFtZXRlciB0byBUYXJGaWxlLmxpc3QoKS4KKworLSBJc3N1ZSAjMTk2Mjg6IEFsbG93IGNvbXBpbGVhbGwgcmVjdXJzaW9uIGRlcHRoIHRvIGJlIHNwZWNpZmllZCB3aXRoIGEgLXIKKyAgb3B0aW9uLgogCiAtIElzc3VlICMxNTY5NjogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgbW1hcCBvYmplY3RzIG9uIFdpbmRvd3MuCiAKQEAgLTE0NTEsNiArMzQ3Nyw4IEBACiAKIC0gSXNzdWUgIzIyMTY1OiBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIgbm93IHN1cHBvcnRzIHVuZGVjb2RhYmxlIGZpbGUgbmFtZXMuCiAKKy0gSXNzdWUgIzE1MzgxOiBPcHRpbWl6ZWQgbGluZSByZWFkaW5nIGluIGlvLkJ5dGVzSU8uCisKIC0gSXNzdWUgIzg3OTc6IFJhaXNlIEhUVFBFcnJvciBvbiBmYWlsZWQgQmFzaWMgQXV0aGVudGljYXRpb24gaW1tZWRpYXRlbHkuCiAgIEluaXRpYWwgcGF0Y2ggYnkgU2FtIEJ1bGwuCiAKQEAgLTE0NjYsNiArMzQ5NCwxNCBAQAogLSBJc3N1ZSAjMTc5MjM6IGdsb2IoKSBwYXR0ZXJucyBlbmRpbmcgd2l0aCBhIHNsYXNoIG5vIGxvbmdlciBtYXRjaCBub24tZGlycyBvbgogICBBSVguICBCYXNlZCBvbiBwYXRjaCBieSBEZWxoYWxsdC4KIAorLSBJc3N1ZSAjMjE3MjU6IEFkZGVkIHN1cHBvcnQgZm9yIFJGQyA2NTMxIChTTVRQVVRGOCkgaW4gc210cGQuCisKKy0gSXNzdWUgIzIyMTc2OiBVcGRhdGUgdGhlIGN0eXBlcyBtb2R1bGUncyBsaWJmZmkgdG8gdjMuMS4gIFRoaXMgcmVsZWFzZQorICBhZGRzIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBBQXJjaDY0IGFuZCBQT1dFUlBDIEVMRiBBQkl2MiBsaXR0bGUgZW5kaWFuCisgIGFyY2hpdGVjdHVyZXMuCisKKy0gSXNzdWUgIzU0MTE6IEFkZGVkIHN1cHBvcnQgZm9yIHRoZSAieHp0YXIiIGZvcm1hdCBpbiB0aGUgc2h1dGlsIG1vZHVsZS4KKwogLSBJc3N1ZSAjMjExMjE6IERvbid0IGZvcmNlIDNyZCBwYXJ0eSBDIGV4dGVuc2lvbnMgdG8gYmUgYnVpbHQgd2l0aAogICAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudC4KIApAQCAtMTQ3Myw4ICszNTA5LDM4IEBACiAgIHdoZW4gdW5waWNrbGluZyBwaWNrbGVkIHNxbGl0ZTMuUm93KS4gIHNxbGl0ZTMuUm93IGlzIG5vdyBpbml0aWFsaXplZCBpbiB0aGUKICAgX19uZXdfXygpIG1ldGhvZC4KIAorLSBJc3N1ZSAjMjAxNzA6IENvbnZlcnQgcG9zaXhtb2R1bGUgdG8gdXNlIEFyZ3VtZW50IENsaW5pYy4KKworLSBJc3N1ZSAjMjE1Mzk6IEFkZCBhbiAqZXhpc3RzX29rKiBhcmd1bWVudCB0byBgUGF0aGxpYi5ta2RpcigpYCB0byBtaW1pYworICBgbWtkaXIgLXBgIGFuZCBgb3MubWFrZWRpcnMoKWAgZnVuY3Rpb25hbGl0eS4gIFdoZW4gdHJ1ZSwgaWdub3JlCisgIEZpbGVFeGlzdHNFcnJvcnMuICBQYXRjaCBieSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMyMjEyNzogQnlwYXNzIElETkEgZm9yIHB1cmUtQVNDSUkgaG9zdCBuYW1lcyBpbiB0aGUgc29ja2V0IG1vZHVsZQorICAoaW4gcGFydGljdWxhciBmb3IgbnVtZXJpYyBJUHMpLgorCistIElzc3VlICMyMTA0Nzogc2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgKmNvbnZlcnRfY2hhcnJlZnMqIGFyZ3VtZW50CisgIG9mIEhUTUxQYXJzZXIgdG8gVHJ1ZS4gIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gQWRkIGFuIF9fYWxsX18gdG8gaHRtbC5lbnRpdGllcy4KKworLSBJc3N1ZSAjMTUxMTQ6IHRoZSBzdHJpY3QgbW9kZSBhbmQgYXJndW1lbnQgb2YgSFRNTFBhcnNlciwgSFRNTFBhcnNlci5lcnJvciwKKyAgYW5kIHRoZSBIVE1MUGFyc2VyRXJyb3IgZXhjZXB0aW9uIGhhdmUgYmVlbiByZW1vdmVkLgorCistIElzc3VlICMyMjA4NTogRHJvcHBlZCBzdXBwb3J0IG9mIFRrIDguMyBpbiBUa2ludGVyLgorCiAtIElzc3VlICMyMTU4MDogTm93IFRraW50ZXIgY29ycmVjdGx5IGhhbmRsZXMgYnl0ZXMgYXJndW1lbnRzIHBhc3NlZCB0byBUay4KLSAgSW4gcGFydGljdWxhciB0aGlzIGFsbG93cyB0byBpbml0aWFsaXplIGltYWdlcyBmcm9tIGJpbmFyeSBkYXRhLgorICBJbiBwYXJ0aWN1bGFyIHRoaXMgYWxsb3dzIGluaXRpYWxpemluZyBpbWFnZXMgZnJvbSBiaW5hcnkgZGF0YS4KKworLSBJc3N1ZSAjMjIwMDM6IFdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBhIGJ5dGVzIG9iamVjdCwgaW8uQnl0ZXNJTygpIG5vdworICBkZWZlcnMgbWFraW5nIGEgY29weSB1bnRpbCBpdCBpcyBtdXRhdGVkLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgYW5kCisgIG1lbW9yeSB1c2Ugb24gc29tZSB1c2UgY2FzZXMuICBQYXRjaCBieSBEYXZpZCBXaWxzb24uCisKKy0gSXNzdWUgIzIyMDE4OiBPbiBXaW5kb3dzLCBzaWduYWwuc2V0X3dha2V1cF9mZCgpIG5vdyBhbHNvIHN1cHBvcnRzIHNvY2tldHMuCisgIEEgc2lkZSBlZmZlY3QgaXMgdGhhdCBQeXRob24gZGVwZW5kcyB0byB0aGUgV2luU29jayBsaWJyYXJ5LgorCistIElzc3VlICMyMjA1NDogQWRkIG9zLmdldF9ibG9ja2luZygpIGFuZCBvcy5zZXRfYmxvY2tpbmcoKSBmdW5jdGlvbnMgdG8gZ2V0CisgIGFuZCBzZXQgdGhlIGJsb2NraW5nIG1vZGUgb2YgYSBmaWxlIGRlc2NyaXB0b3IgKEZhbHNlIGlmIHRoZSBPX05PTkJMT0NLIGZsYWcKKyAgaXMgc2V0LCBUcnVlIG90aGVyd2lzZSkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogCiAtIElzc3VlICMxNzE3MjogTWFrZSB0dXJ0bGVkZW1vIHN0YXJ0IGFzIGFjdGl2ZSBvbiBPUyBYIGV2ZW4gd2hlbiBydW4gd2l0aAogICBzdWJwcm9jZXNzLiAgUGF0Y2ggYnkgTGl0YSBDaG8uCkBAIC0xNDgyLDkgKzM1NDgsMTggQEAKIC0gSXNzdWUgIzIxNzA0OiBGaXggYnVpbGQgZXJyb3IgZm9yIF9tdWx0aXByb2Nlc3Npbmcgd2hlbiBzZW1hcGhvcmVzCiAgIGFyZSBub3QgYXZhaWxhYmxlLiAgUGF0Y2ggYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMuCiAKKy0gSXNzdWUgIzIwMTczOiBDb252ZXJ0IHNoYTEsIHNoYTI1Niwgc2hhNTEyIGFuZCBtZDUgdG8gQXJndW1lbnRDbGluaWMuCisgIFBhdGNoIGJ5IFZhanJhc2t5IEtvay4KKwogLSBGaXggcmVwcihfc29ja2V0LnNvY2tldCkgb24gV2luZG93cyA2NC1iaXQ6IGRvbid0IGZhaWwgd2l0aCBPdmVyZmxvd0Vycm9yCiAgIG9uIGNsb3NlZCBzb2NrZXQuIHJlcHIoc29ja2V0LnNvY2tldCkgYWxyZWFkeSB3b3JrcyBmaW5lLgogCistIElzc3VlICMyMjAzMzogUmVwcnMgb2YgbW9zdCBQeXRob24gaW1wbGVtZW5lZCBjbGFzc2VzIG5vdyBjb250YWluIGFjdHVhbAorICBjbGFzcyBuYW1lIGluc3RlYWQgb2YgaGFyZGNvZGVkIG9uZS4KKworLSBJc3N1ZSAjMjE5NDc6IFRoZSBkaXMgbW9kdWxlIGNhbiBub3cgZGlzYXNzZW1ibGUgZ2VuZXJhdG9yLWl0ZXJhdG9yCisgIG9iamVjdHMgYmFzZWQgb24gdGhlaXIgZ2lfY29kZSBhdHRyaWJ1dGUuIFBhdGNoIGJ5IENsZW1lbnQgUm91YXVsdC4KKwogLSBJc3N1ZSAjMTYxMzM6IFRoZSBhc3luY2hhdC5hc3luY19jaGF0LmhhbmRsZV9yZWFkKCkgbWV0aG9kIG5vdyBpZ25vcmVzCiAgIEJsb2NraW5nSU9FcnJvciBleGNlcHRpb25zLgogCkBAIC0xNDkyLDIwICszNTY3LDQ2IEBACiAgIFBhdGNoIGJ5IFRvbSBGbGFuYWdhbi4KIAogLSBJc3N1ZSAjMTk4ODQ6IHJlYWRsaW5lOiBEaXNhYmxlIHRoZSBtZXRhIG1vZGlmaWVyIGtleSBpZiBzdGRvdXQgaXMgbm90Ci0gIGEgdGVybWluYWwgdG8gbm90IHdyaXRlIHRoZSBBTlNJIHNlcXVlbmNlICJcMDMzWzEwMzRoIiBpbnRvIHN0ZG91dC4gVGhpcworICBhIHRlcm1pbmFsIHRvIG5vdCB3cml0ZSB0aGUgQU5TSSBzZXF1ZW5jZSBgYCJcMDMzWzEwMzRoImBgIGludG8gc3Rkb3V0LiBUaGlzCiAgIHNlcXVlbmNlIGlzIHVzZWQgb24gc29tZSB0ZXJtaW5hbCAoZXg6IFRFUk09eHRlcm0tMjU2Y29sb3IiKSB0byBlbmFibGUKICAgc3VwcG9ydCBvZiA4IGJpdCBjaGFyYWN0ZXJzLgogCistIElzc3VlICM0MzUwOiBSZW1vdmVkIGEgbnVtYmVyIG9mIG91dC1vZi1kYXRlZCBhbmQgbm9uLXdvcmtpbmcgZm9yIGEgbG9uZyB0aW1lCisgIFRraW50ZXIgbWV0aG9kcy4KKworLSBJc3N1ZSAjNjE2NzogU2Nyb2xsYmFyLmFjdGl2YXRlKCkgbm93IHJldHVybnMgdGhlIG5hbWUgb2YgYWN0aXZlIGVsZW1lbnQgaWYKKyAgdGhlIGFyZ3VtZW50IGlzIG5vdCBzcGVjaWZpZWQuICBTY3JvbGxiYXIuc2V0KCkgbm93IGFsd2F5cyBhY2NlcHRzIG9ubHkgMgorICBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzE1Mjc1OiBDbGVhbiB1cCBhbmQgc3BlZWQgdXAgdGhlIG50cGF0aCBtb2R1bGUuCisKIC0gSXNzdWUgIzIxODg4OiBwbGlzdGxpYidzIGxvYWQoKSBhbmQgbG9hZHMoKSBub3cgd29yayBpZiB0aGUgZm10IHBhcmFtZXRlciBpcwogICBzcGVjaWZpZWQuCiAKKy0gSXNzdWUgIzIyMDMyOiBfX3F1YWxuYW1lX18gaW5zdGVhZCBvZiBfX25hbWVfXyBpcyBub3cgYWx3YXlzIHVzZWQgdG8gZm9ybWF0CisgIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lcyBvZiBQeXRob24gaW1wbGVtZW50ZWQgY2xhc3Nlcy4KKworLSBJc3N1ZSAjMjIwMzE6IFJlcHJzIG5vdyBhbHdheXMgdXNlIGhleGFkZWNpbWFsIGZvcm1hdCB3aXRoIHRoZSAiMHgiIHByZWZpeAorICB3aGVuIGNvbnRhaW4gYW4gaWQgaW4gZm9ybSAiIGF0IDB4Li4uIi4KKworLSBJc3N1ZSAjMjIwMTg6IHNpZ25hbC5zZXRfd2FrZXVwX2ZkKCkgbm93IHJhaXNlcyBhbiBPU0Vycm9yIGluc3RlYWQgb2YgYQorICBWYWx1ZUVycm9yIG9uIGBgZnN0YXQoKWBgIGZhaWx1cmUuCisKIC0gSXNzdWUgIzIxMDQ0OiB0YXJmaWxlLm9wZW4oKSBub3cgaGFuZGxlcyBmaWxlb2JqIHdpdGggYW4gaW50ZWdlciAnbmFtZScKICAgYXR0cmlidXRlLiAgQmFzZWQgb24gcGF0Y2ggYnkgQW50b2luZSBQaWV0cmkuCiAKLS0gSXNzdWUgIzIxODY3OiBQcmV2ZW50IHR1cnRsZSBjcmFzaCBkdWUgdG8gaW52YWxpZCB1bmRvIGJ1ZmZlciBzaXplLgorLSBJc3N1ZSAjMjE5NjY6IFJlc3BlY3QgLXEgY29tbWFuZC1saW5lIG9wdGlvbiB3aGVuIGNvZGUgbW9kdWxlIGlzIHJhbi4KIAogLSBJc3N1ZSAjMTkwNzY6IERvbid0IHBhc3MgdGhlIHJlZHVuZGFudCAnZmlsZScgYXJndW1lbnQgdG8gc2VsZi5lcnJvcigpLgogCistIElzc3VlICMxNjM4MjogSW1wcm92ZSBleGNlcHRpb24gbWVzc2FnZSBvZiB3YXJuaW5ncy53YXJuKCkgZm9yIGJhZAorICBjYXRlZ29yeS4gSW5pdGlhbCBwYXRjaCBieSBQaGlsIEVsc29uLgorCistIElzc3VlICMyMTkzMjogb3MucmVhZCgpIG5vdyB1c2VzIGEgOmM6ZnVuYzpgUHlfc3NpemVfdGAgdHlwZSBpbnN0ZWFkIG9mCisgIDpjOnR5cGU6YGludGAgZm9yIHRoZSBzaXplIHRvIHN1cHBvcnQgcmVhZGluZyBtb3JlIHRoYW4gMiBHQiBhdCBvbmNlLiBPbgorICBXaW5kb3dzLCB0aGUgc2l6ZSBpcyB0cnVuY3RlZCB0byBJTlRfTUFYLiBBcyBhbnkgY2FsbCB0byBvcy5yZWFkKCksIHRoZSBPUworICBtYXkgcmVhZCBsZXNzIGJ5dGVzIHRoYW4gdGhlIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMuCisKIC0gSXNzdWUgIzIxOTQyOiBGaXhlZCBzb3VyY2UgZmlsZSB2aWV3aW5nIGluIHB5ZG9jJ3Mgc2VydmVyIG1vZGUgb24gV2luZG93cy4KIAogLSBJc3N1ZSAjMTEyNTk6IGFzeW5jaGF0LmFzeW5jX2NoYXQoKS5zZXRfdGVybWluYXRvcigpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yCkBAIC0xNTIzLDggKzM2MjQsOCBAQAogLSBJc3N1ZSAjMjE3MTQ6IERpc2FsbG93IHRoZSBjb25zdHJ1Y3Rpb24gb2YgaW52YWxpZCBwYXRocyB1c2luZwogICBQYXRoLndpdGhfbmFtZSgpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQW50b255IExlZS4KIAotLSBJc3N1ZSAjMjE4OTc6IEZpeCBhIGNyYXNoIHdpdGggdGhlIGZfbG9jYWxzIGF0dHJpYnV0ZSB3aXRoIGNsb3N1cmUKLSAgdmFyaWFibGVzIHdoZW4gZnJhbWUuY2xlYXIoKSBoYXMgYmVlbiBjYWxsZWQuCistIElzc3VlICMxNTAxNDogQWRkZWQgJ2F1dGgnIG1ldGhvZCB0byBzbXRwbGliIHRvIG1ha2UgaW1wbGVtZW50aW5nIGF1dGgKKyAgbWVjaGFuaXNtcyBzaW1wbGVyLCBhbmQgdXNlZCBpdCBpbnRlcm5hbGx5IGluIHRoZSBsb2dpbiBtZXRob2QuCiAKIC0gSXNzdWUgIzIxMTUxOiBGaXhlZCBhIHNlZ2ZhdWx0IGluIHRoZSB3aW5yZWcgbW9kdWxlIHdoZW4gYGBOb25lYGAgaXMgcGFzc2VkCiAgIGFzIGEgYGBSRUdfQklOQVJZYGAgdmFsdWUgdG8gU2V0VmFsdWVFeC4gIFBhdGNoIGJ5IEpvaG4gRWhyZXNtYW4uCkBAIC0xNTMyLDggKzM2MzMsMTcgQEAKIC0gSXNzdWUgIzIxMDkwOiBpby5GaWxlSU8ucmVhZGFsbCgpIGRvZXMgbm90IGlnbm9yZSBJL08gZXJyb3JzIGFueW1vcmUuIEJlZm9yZSwKICAgaXQgaWdub3JlZCBJL08gZXJyb3JzIGlmIGF0IGxlYXN0IHRoZSBmaXJzdCBDIGNhbGwgcmVhZCgpIHN1Y2NlZWQuCiAKKy0gSXNzdWUgIzU4MDA6IGhlYWRlcnMgcGFyYW1ldGVyIG9mIHdzZ2lyZWYuaGVhZGVycy5IZWFkZXJzIGlzIG5vdyBvcHRpb25hbC4KKyAgSW5pdGlhbCBwYXRjaCBieSBQYWJsbyBUb3JyZXMgTmF2YXJyZXRlIGFuZCBTaWxlbnRHaG9zdC4KKwogLSBJc3N1ZSAjMjE3ODE6IHNzbC5SQU5EX2FkZCgpIG5vdyBzdXBwb3J0cyBzdHJpbmdzIGxvbmdlciB0aGFuIDIgR0IuCiAKKy0gSXNzdWUgIzIxNjc5OiBQcmV2ZW50IGV4dHJhbmVvdXMgZnN0YXQoKSBjYWxscyBkdXJpbmcgb3BlbigpLiAgUGF0Y2ggYnkKKyAgQm9odXNsYXYgS2FicmRhLgorCistIElzc3VlICMyMTg2MzogY1Byb2ZpbGUgbm93IGRpc3BsYXlzIHRoZSBtb2R1bGUgbmFtZSBvZiBDIGV4dGVuc2lvbiBmdW5jdGlvbnMsCisgIGluIGFkZGl0aW9uIHRvIHRoZWlyIG93biBuYW1lLgorCiAtIElzc3VlICMxMTQ1MzogYXN5bmNvcmU6IGVtaXQgYSBSZXNvdXJjZVdhcm5pbmcgd2hlbiBhbiB1bmNsb3NlZCBmaWxlX3dyYXBwZXIKICAgb2JqZWN0IGlzIGRlc3Ryb3llZC4gVGhlIGRlc3RydWN0b3Igbm93IGNsb3NlcyB0aGUgZmlsZSBpZiBuZWVkZWQuIFRoZQogICBjbG9zZSgpIG1ldGhvZCBjYW4gbm93IGJlIGNhbGxlZCB0d2ljZTogdGhlIHNlY29uZCBjYWxsIGRvZXMgbm90aGluZy4KQEAgLTE1NDMsNDggKzM2NTMsNTMgQEAKIC0gSXNzdWUgIzIxNDc2OiBNYWtlIHN1cmUgdGhlIGVtYWlsLnBhcnNlci5CeXRlc1BhcnNlciBUZXh0SU9XcmFwcGVyIGlzCiAgIGRpc2NhcmRlZCBhZnRlciBwYXJzaW5nLCBzbyB0aGUgaW5wdXQgZmlsZSBpc24ndCB1bmV4cGVjdGVkbHkgY2xvc2VkLgogCistIElzc3VlICMyMDI5NTogaW1naGRyIG5vdyByZWNvZ25pemVzIE9wZW5FWFIgZm9ybWF0IGltYWdlcy4KKwogLSBJc3N1ZSAjMjE3Mjk6IFVzZWQgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgaW4gdGhlIGRibS5kdW1iIG1vZHVsZSB0byBlbnN1cmUKICAgZmlsZXMgY2xvc2luZy4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KIAogLSBJc3N1ZSAjMjE0OTE6IHNvY2tldHNlcnZlcjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gY2hpbGQgcHJvY2Vzc2VzIHJlYXBpbmcuCiAKKy0gSXNzdWUgIzIxNzE5OiBBZGRlZCB0aGUgYGBzdF9maWxlX2F0dHJpYnV0ZXNgYCBmaWVsZCB0byBvcy5zdGF0X3Jlc3VsdCBvbgorICBXaW5kb3dzLgorCiAtIElzc3VlICMyMTgzMjogUmVxdWlyZSBuYW1lZCB0dXBsZSBpbnB1dHMgdG8gYmUgZXhhY3Qgc3RyaW5ncy4KIAotLSBJc3N1ZSAjMTkxNDU6IFRoZSB0aW1lcyBhcmd1bWVudCBmb3IgaXRlcnRvb2xzLnJlcGVhdCBub3cgaGFuZGxlcwotICBuZWdhdGl2ZSB2YWx1ZXMgdGhlIHNhbWUgd2F5IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhcyBpdCBkb2VzIGZvcgotICBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjMjE4MTI6IHR1cnRsZS5zaGFwZXRyYW5zZm9ybSBkaWQgbm90IHRyYW5mb3JtIHRoZSB0dXJ0bGUgb24gdGhlCi0gIGZpcnN0IGNhbGwuICAoSXNzdWUgaWRlbnRpZmllZCBhbmQgZml4ZWQgYnkgTGl0YSBDaG8uKQotCi0tIElzc3VlICMyMTYzNTogVGhlIGRpZmZsaWIgU2VxdWVuY2VNYXRjaGVyLmdldF9tYXRjaGluZ19ibG9ja3MoKSBtZXRob2QKLSAgY2FjaGUgZGlkbid0IG1hdGNoIHRoZSBhY3R1YWwgcmVzdWx0LiAgVGhlIGZvcm1lciB3YXMgYSBsaXN0IG9mIHR1cGxlcwotICBhbmQgdGhlIGxhdHRlciB3YXMgYSBsaXN0IG9mIG5hbWVkIHR1cGxlcy4KLQogLSBJc3N1ZSAjMjE3MjI6IFRoZSBkaXN0dXRpbHMgInVwbG9hZCIgY29tbWFuZCBub3cgZXhpdHMgd2l0aCBhIG5vbi16ZXJvCiAgIHJldHVybiBjb2RlIHdoZW4gdXBsb2FkaW5nIGZhaWxzLiAgUGF0Y2ggYnkgTWFydGluIERlbmdsZXIuCiAKIC0gSXNzdWUgIzIxNzIzOiBhc3luY2lvLlF1ZXVlOiBzdXBwb3J0IGFueSB0eXBlIG9mIG51bWJlciAoZXg6IGZsb2F0KSBmb3IgdGhlCiAgIG1heGltdW0gc2l6ZS4gUGF0Y2ggd3JpdHRlbiBieSBWYWpyYXNreSBLb2suCiAKKy0gSXNzdWUgIzIxNzExOiBzdXBwb3J0IGZvciAic2l0ZS1weXRob24iIGRpcmVjdG9yaWVzIGhhcyBub3cgYmVlbiByZW1vdmVkCisgIGZyb20gdGhlIHNpdGUgbW9kdWxlIChpdCB3YXMgZGVwcmVjYXRlZCBpbiAzLjQpLgorCistIElzc3VlICMxNzU1MjogbmV3IHNvY2tldC5zZW5kZmlsZSgpIG1ldGhvZCBhbGxvd2luZyBhIGZpbGUgdG8gYmUgc2VudCBvdmVyIGEKKyAgc29ja2V0IGJ5IHVzaW5nIGhpZ2gtcGVyZm9ybWFuY2Ugb3Muc2VuZGZpbGUoKSBvbiBVTklYLgorICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJy4KKworLSBJc3N1ZSAjMTgwMzk6IGRibS5kdW1wLm9wZW4oKSBub3cgYWx3YXlzIGNyZWF0ZXMgYSBuZXcgZGF0YWJhc2Ugd2hlbiB0aGUKKyAgZmxhZyBoYXMgdGhlIHZhbHVlICduJy4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKwogLSBJc3N1ZSAjMjEzMjY6IEFkZCBhIG5ldyBpc19jbG9zZWQoKSBtZXRob2QgdG8gYXN5bmNpby5CYXNlRXZlbnRMb29wLgogICBydW5fZm9yZXZlcigpIGFuZCBydW5fdW50aWxfY29tcGxldGUoKSBtZXRob2RzIG9mIGFzeW5jaW8uQmFzZUV2ZW50TG9vcCBub3cKICAgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBldmVudCBsb29wIHdhcyBjbG9zZWQuCiAKLS0gSXNzdWUgIzIxNzc0OiBGaXhlZCBOYW1lRXJyb3IgZm9yIGFuIGluY29ycmVjdCB2YXJpYWJsZSByZWZlcmVuY2UgaW4gdGhlCi0gIFhNTCBNaW5pZG9tIGNvZGUgZm9yIGNyZWF0aW5nIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLgotICAoRm91bmQgYW5kIGZpeGVkIGJ5IENsYXVkaXUgUG9wYS4pCi0KIC0gSXNzdWUgIzIxNzY2OiBQcmV2ZW50IGEgc2VjdXJpdHkgaG9sZSBpbiBDR0lIVFRQU2VydmVyIGJ5IFVSTCB1bnF1b3RpbmcgcGF0aHMKICAgYmVmb3JlIGNoZWNraW5nIGZvciBhIENHSSBzY3JpcHQgYXQgdGhhdCBwYXRoLgogCiAtIElzc3VlICMyMTMxMDogRml4ZWQgcG9zc2libGUgcmVzb3VyY2UgbGVhayBpbiBmYWlsZWQgb3BlbigpLgogCistIElzc3VlICMyMTI1NjogUHJpbnRvdXQgb2Yga2V5d29yZCBhcmdzIHNob3VsZCBiZSBpbiBkZXRlcm1pbmlzdGljIG9yZGVyIGluCisgIGEgbW9jayBmdW5jdGlvbiBjYWxsLiBUaGlzIHdpbGwgaGVscCB0byB3cml0ZSBiZXR0ZXIgZG9jdGVzdHMuCisKIC0gSXNzdWUgIzIxNjc3OiBGaXhlZCBjaGFpbmluZyBub25ub3JtYWxpemVkIGV4Y2VwdGlvbnMgaW4gaW8gY2xvc2UoKSBtZXRob2RzLgogCiAtIElzc3VlICMxMTcwOTogRml4IHRoZSBweWRvYy5oZWxwIGZ1bmN0aW9uIHRvIG5vdCBmYWlsIHdoZW4gc3lzLnN0ZGluIGlzIG5vdCBhCiAgIHZhbGlkIGZpbGUuCiAKKy0gSXNzdWUgIzIxNTE1OiB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlIG5vdyB1c2VzIG9zLk9fVE1QRklMRSBmbGFnIGlzIGF2YWlsYWJsZS4KKwogLSBJc3N1ZSAjMTMyMjM6IEZpeCBweWRvYy53cml0ZWRvYyBzbyB0aGF0IHRoZSBIVE1MIGRvY3VtZW50YXRpb24gZm9yIG1ldGhvZHMKICAgdGhhdCB1c2UgJ3NlbGYnIGluIHRoZSBleGFtcGxlIGNvZGUgaXMgZ2VuZXJhdGVkIGNvcnJlY3RseS4KIApAQCAtMTU5NSw2ICszNzEwLDkgQEAKICAgbGltaXRzIHdvdWxkIG90aGVyd2lzZSBhbGxvdy4gIE9uIHN5c3RlbXMgd2l0aCBhIGZ1bmN0aW9uaW5nIC9wcm9jL3NlbGYvZmQKICAgb3IgL2Rldi9mZCBpbnRlcmZhY2UgdGhlIG1heCBpcyBub3cgaWdub3JlZCBhbmQgYWxsIGZkcyBhcmUgY2xvc2VkLgogCistIElzc3VlICMyMDM4MzogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mcm9tX3NwZWMoKSBhcyB0aGUgcHJlZmVycmVkIHdheQorICB0byBjcmVhdGUgYSBuZXcgbW9kdWxlLgorCiAtIElzc3VlICMyMTU1MjogRml4ZWQgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBvZiB0b28gbG9uZyBzdHJpbmcgbGVuZ3RocyBpbgogICB0aGUgdGtpbnRlciBtb2R1bGUgb24gNjQtYml0IHBsYXRmb3Jtcy4KIApAQCAtMTYwMyw4ICszNzIxLDE0IEBACiAgIGVycm9yIGJ1YmJsZSB1cCBhcyB0aGlzICJiYWQgZGF0YSIgYXBwZWFycyBpbiBtYW55IHJlYWwgd29ybGQgemlwIGZpbGVzIGluCiAgIHRoZSB3aWxkIGFuZCBpcyBpZ25vcmVkIGJ5IG90aGVyIHppcCB0b29scy4KIAorLSBJc3N1ZSAjMTM3NDI6IEFkZGVkICJrZXkiIGFuZCAicmV2ZXJzZSIgcGFyYW1ldGVycyB0byBoZWFwcS5tZXJnZSgpLgorICAoRmlyc3QgZHJhZnQgb2YgcGF0Y2ggY29udHJpYnV0ZWQgYnkgU2ltb24gU2FwaW4uKQorCiAtIElzc3VlICMyMTQwMjogdGtpbnRlci50dGsgbm93IHdvcmtzIHdoZW4gZGVmYXVsdCByb290IHdpbmRvdyBpcyBub3Qgc2V0LgogCistIElzc3VlICMzMDE1OiBfdGtpbnRlci5jcmVhdGUoKSBub3cgY3JlYXRlcyB0a2FwcCBvYmplY3Qgd2l0aCB3YW50b2JqZWN0PTEgYnkKKyAgZGVmYXVsdC4KKwogLSBJc3N1ZSAjMTAyMDM6IHNxbGl0ZTMuUm93IG5vdyB0cnVseSBzdXBwb3J0cyBzZXF1ZW5jZSBwcm90b2NvbC4gIEluIHBhcnRpY3VsYXIKICAgaXQgc3VwcG9ydHMgcmV2ZXJzZSgpIGFuZCBuZWdhdGl2ZSBpbmRpY2VzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgogCkBAIC0xNjEyLDk3ICszNzM2LDIxIEBACiAgIGludGVycHJldGVyIGFsaWFzZXMgKHB5dGhvbiwgcHl0aG9uMykgYXJlIG5vdyBjcmVhdGVkIGJ5IGNvcHlpbmcgcmF0aGVyIHRoYW4KICAgc3ltbGlua2luZy4KIAotLSBJc3N1ZSAjMTQ3MTA6IHBrZ3V0aWwuZ2V0X2xvYWRlcigpIG5vIGxvbmdlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gTm9uZSBpcwotICBmb3VuZCBpbiBzeXMubW9kdWxlcy4KKy0gSXNzdWUgIzIwMTk3OiBBZGRlZCBzdXBwb3J0IGZvciB0aGUgV2ViUCBpbWFnZSB0eXBlIGluIHRoZSBpbWdoZHIgbW9kdWxlLgorICBQYXRjaCBieSBGYWJyaWNlIEFuZWNoZSBhbmQgQ2xhdWRpdSBQb3BhLgogCi0tIElzc3VlICMxNDcxMDogcGtndXRpbC5maW5kX2xvYWRlcigpIG5vIGxvbmdlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gYQotICBtb2R1bGUgZG9lc24ndCBleGlzdC4KKy0gSXNzdWUgIzIxNTEzOiBTcGVlZHVwIHNvbWUgcHJvcGVydGllcyBvZiBJUCBhZGRyZXNzZXMgKElQdjRBZGRyZXNzLAorICBJUHY2QWRkcmVzcykgc3VjaCBhcyAuaXNfcHJpdmF0ZSBvciAuaXNfbXVsdGljYXN0LgogCi0tIElzc3VlICMyMTQ4MTogQXJncGFyc2UgZXF1YWxpdHkgYW5kIGluZXF1YWxpdHkgdGVzdHMgbm93IHJldHVybgotICBOb3RJbXBsZW1lbnRlZCB3aGVuIGNvbXBhcmluZyB0byBhbiB1bmtub3duIHR5cGUuCi0KLS0gSXNzdWUgIzg3NDM6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IGJldHdlZW4gc2V0IG9iamVjdHMgYW5kIHRoZQotICBjb2xsZWN0aW9ucy5TZXQoKSBhYnN0cmFjdCBiYXNlIGNsYXNzLgotCi0tIElzc3VlICMxMzM1NTogcmFuZG9tLnRyaWFuZ3VsYXIoKSBubyBsb25nZXIgZmFpbHMgd2l0aCBhIFplcm9EaXZpc2lvbkVycm9yCi0gIHdoZW4gbG93IGVxdWFscyBoaWdoLgorLSBJc3N1ZSAjMjExMzc6IEltcHJvdmUgdGhlIHJlcHIgZm9yIHRocmVhZGluZy5Mb2NrKCkgYW5kIGl0cyB2YXJpYW50cworICBieSBzaG93aW5nIHRoZSAibG9ja2VkIiBvciAidW5sb2NrZWQiIHN0YXR1cy4gIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCiAKIC0gSXNzdWUgIzIxNTM4OiBUaGUgcGxpc3RsaWIgbW9kdWxlIG5vdyBzdXBwb3J0cyBsb2FkaW5nIG9mIGJpbmFyeSBwbGlzdCBmaWxlcwogICB3aGVuIHJlZmVyZW5jZSBvciBvZmZzZXQgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uCiAKLS0gSXNzdWUgIzIxODAxOiBWYWxpZGF0ZSB0aGF0IF9fc2lnbmF0dXJlX18gaXMgTm9uZSBvciBhbiBpbnN0YW5jZSBvZiBTaWduYXR1cmUuCistIElzc3VlICMyMTQ1NTogQWRkIGEgZGVmYXVsdCBiYWNrbG9nIHRvIHNvY2tldC5saXN0ZW4oKS4KIAotLSBJc3N1ZSAjMjE5MjM6IFByZXZlbnQgQXR0cmlidXRlRXJyb3IgaW4gZGlzdHV0aWxzLnN5c2NvbmZpZy5jdXN0b21pemVfY29tcGlsZXIKLSAgZHVlIHRvIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgX2NvbmZpZ192YXJzLgotCi0tIElzc3VlICMyMTMyMzogRml4IGh0dHAuc2VydmVyIHRvIGFnYWluIGhhbmRsZSBzY3JpcHRzIGluIENHSSBzdWJkaXJlY3RvcmllcywKLSAgYnJva2VuIGJ5IHRoZSBmaXggZm9yIHNlY3VyaXR5IGlzc3VlICMxOTQzNS4gIFBhdGNoIGJ5IFphY2ggQnlybmUuCi0KLUV4dGVuc2lvbiBNb2R1bGVzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMyMjE3NjogVXBkYXRlIHRoZSBjdHlwZXMgbW9kdWxlJ3MgbGliZmZpIHRvIHYzLjEuICBUaGlzIHJlbGVhc2UKLSAgYWRkcyBzdXBwb3J0IGZvciB0aGUgTGludXggQUFyY2g2NCBhbmQgUE9XRVJQQyBFTEYgQUJJdjIgbGl0dGxlIGVuZGlhbgotICBhcmNoaXRlY3R1cmVzLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTU2NjE6IHB5dGhvbi5vcmcgT1MgWCBpbnN0YWxsZXJzIGFyZSBub3cgZGlzdHJpYnV0ZWQgYXMgc2lnbmVkCi0gIGluc3RhbGxlciBwYWNrYWdlcyBjb21wYXRpYmxlIHdpdGggdGhlIEdhdGVrZWVwZXIgc2VjdXJpdHkgZmVhdHVyZS4KLQotLSBJc3N1ZSAjMjE5NTg6IERlZmluZSBIQVZFX1JPVU5EIHdoZW4gYnVpbGRpbmcgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMTMgYW5kCi0gIGFib3ZlLiAgUGF0Y2ggYnkgWmFjaGFyeSBUdXJuZXIuCi0KLS0gSXNzdWUgIzE1NzU5OiAibWFrZSBzdXNwaWNpb3VzIiwgIm1ha2UgbGlua2NoZWNrIiBhbmQgIm1ha2UgZG9jdGVzdCIgaW4gRG9jLwotICBub3cgZGlzcGxheSBzcGVjaWFsIG1lc3NhZ2Ugd2hlbiBhbmQgb25seSB3aGVuIHRoZXJlIGFyZSBmYWlsdXJlcy4KLQotLSBJc3N1ZSAjMTcwOTU6IEZpeCBNb2R1bGVzL1NldHVwICpzaGFyZWQqIHN1cHBvcnQuCi0KLS0gSXNzdWUgIzIxODExOiBBbnRpY2lwYXRlZCBmaXhlcyB0byBzdXBwb3J0IE9TIFggdmVyc2lvbnMgPiAxMC45LgotCi0tIElzc3VlICMyMTE2NjogUHJldmVudCBwb3NzaWJsZSBzZWdmYXVsdHMgYW5kIG90aGVyIHJhbmRvbSBmYWlsdXJlcyBvZgotICBweXRob24gLS1nZW5lcmF0ZS1wb3NpeC12YXJzIGluIHB5YnVpbGRkaXIudHh0IGJ1aWxkIHRhcmdldC4KLQotSURMRQotLS0tLQotCi0tIElzc3VlICMxNzM5MDogQWRqdXN0IEVkaXRvciB3aW5kb3cgdGl0bGU7IHJlbW92ZSAnUHl0aG9uJywKLSAgbW92ZSB2ZXJzaW9uIHRvIGVuZC4KLQotLSBJc3N1ZSAjMTQxMDU6IElkbGUgZGVidWdnZXIgYnJlYWtwb2ludHMgbm8gbG9uZ2VyIGRpc2FwcGVhcgotICB3aGVuIGluc2V0aW5nIG9yIGRlbGV0aW5nIGxpbmVzLgotCi0tIElzc3VlICMxNzE3MjogVHVydGxlZGVtbyBjYW4gbm93IGJlIHJ1biBmcm9tIElkbGUuCi0gIEN1cnJlbnRseSwgdGhlIGVudHJ5IGlzIG9uIHRoZSBIZWxwIG1lbnUsIGJ1dCBpdCBtYXkgbW92ZSB0byBSdW4uCi0gIFBhdGNoIGJ5IFJhbWNoYW5kcmEgQXB0IGFuZCBMaXRhIENoby4KLQotLSBJc3N1ZSAjMjE3NjU6IEFkZCBzdXBwb3J0IGZvciBub24tYXNjaWkgaWRlbnRpZmllcnMgdG8gSHlwZXJQYXJzZXIuCi0KLS0gSXNzdWUgIzIxOTQwOiBBZGQgdW5pdHRlc3QgZm9yIFdpZGdldFJlZGlyZWN0b3IuIEluaXRpYWwgcGF0Y2ggYnkgU2FpbWFkaGF2Ci0gIEhlYmxpa2FyLgotCi0tIElzc3VlICMxODU5MjogQWRkIHVuaXR0ZXN0IGZvciBTZWFyY2hEaWFsb2dCYXNlLiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCi0KLS0gSXNzdWUgIzIxNjk0OiBBZGQgdW5pdHRlc3QgZm9yIFBhcmVuTWF0Y2guIFBhdGNoIGJ5IFNhaW1hZGhhdiBIZWJsaWthci4KLQotLSBJc3N1ZSAjMjE2ODY6IGFkZCB1bml0dGVzdCBmb3IgSHlwZXJQYXJzZXIuIE9yaWdpbmFsIHBhdGNoIGJ5IFNhaW1hZGhhdgotICBIZWJsaWthci4KLQotLSBJc3N1ZSAjMTIzODc6IEFkZCBtaXNzaW5nIHVwcGVyKGxvd2VyKWNhc2UgdmVyc2lvbnMgb2YgZGVmYXVsdCBXaW5kb3dzIGtleQotICBiaW5kaW5ncyBmb3IgSWRsZSBzbyBDYXBzIExvY2sgZG9lcyBub3QgZGlzYWJsZSB0aGVtLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KLQotLSBJc3N1ZSAjMjE2OTU6IENsb3NpbmcgYSBGaW5kLWluLWZpbGVzIG91dHB1dCB3aW5kb3cgd2hpbGUgdGhlIHNlYXJjaCBpcwotICBzdGlsbCBpbiBwcm9ncmVzcyBubyBsb25nZXIgY2xvc2VzIElkbGUuCi0KLS0gSXNzdWUgIzE4OTEwOiBBZGQgdW5pdHRlc3QgZm9yIHRleHRWaWV3LiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCi0KLS0gSXNzdWUgIzE4MjkyOiBBZGQgdW5pdHRlc3QgZm9yIEF1dG9FeHBhbmQuIFBhdGNoIGJ5IFNhaWhhZGhhdiBIZWJsaWthci4KLQotLSBJc3N1ZSAjMTg0MDk6IEFkZCB1bml0dGVzdCBmb3IgQXV0b0NvbXBsZXRlLiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCi0KLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjMjE1MjU6IE1vc3QgVGtpbnRlciBtZXRob2RzIHdoaWNoIGFjY2VwdGVkIHR1cGxlcyBub3cgYWNjZXB0IGxpc3RzIHRvby4KIAogLSBJc3N1ZSAjMjIxNjY6IFdpdGggdGhlIGFzc2lzdGFuY2Ugb2YgYSBuZXcgaW50ZXJuYWwgX2NvZGVjcy5fZm9yZ2V0X2NvZGVjCiAgIGhlbHBpbmcgZnVuY3Rpb24sIHRlc3RfY29kZWNzIG5vdyBjbGVhcnMgdGhlIGVuY29kaW5nIGNhY2hlcyB0byBhdm9pZCB0aGUKQEAgLTE3MTEsMTgxICszNzU5LDkzIEBACiAtIElzc3VlICMyMjIzNjogVGtpbnRlciB0ZXN0cyBub3cgZG9uJ3QgcmV1c2UgZGVmYXVsdCByb290IHdpbmRvdy4gIE5ldyByb290CiAgIHdpbmRvdyBpcyBjcmVhdGVkIGZvciBldmVyeSB0ZXN0IGNsYXNzLgogCi0tIElzc3VlICMyMDc0NjogRml4IHRlc3RfcGRiIHRvIHJ1biBpbiByZWZsZWFrIG1vZGUgKC1SKS4gIFBhdGNoIGJ5IFhhdmllcgotICBkZSBHYXllLgotCi0tIElzc3VlICMyMjA2MDogdGVzdF9jdHlwZXMgaGFzIGJlZW4gc29tZXdoYXQgY2xlYW5lZCB1cCBhbmQgc2ltcGxpZmllZDsgaXQKLSAgbm93IHVzZXMgdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgdG8gZmluZCBpdHMgdGVzdHMuCi0KLS0gSXNzdWUgIzIyMTA0OiByZWdydGVzdC5weSBubyBsb25nZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIHN1aXRlIG9mIHRlc3RzCi0gIGxvYWRlZCBmcm9tIHRlc3QgbW9kdWxlcyB0aGF0IGRvbid0IGRlZmluZSB0ZXN0X21haW4oKS4KLQotLSBJc3N1ZSAjMjIwMDI6IEFkZGVkIGBgbG9hZF9wYWNrYWdlX3Rlc3RzYGAgZnVuY3Rpb24gdG8gdGVzdC5zdXBwb3J0IGFuZCB1c2VkCi0gIGl0IHRvIGltcGxlbWVudC9hdWdtZW50IHRlc3QgZGlzY292ZXJ5IGluIHRlc3RfYXN5bmNpbywgdGVzdF9lbWFpbCwKLSAgdGVzdF9pbXBvcnRsaWIsIHRlc3RfanNvbiwgYW5kIHRlc3RfdG9vbHMuCi0KLS0gSXNzdWUgIzIxOTc2OiBGaXggdGVzdF9zc2wgdG8gYWNjZXB0IExpYnJlU1NMIHZlcnNpb24gc3RyaW5ncy4gIFRoYW5rcwotICB0byBXaWxsaWFtIE9yci4KLQotLSBJc3N1ZSAjMjE5MTg6IENvbnZlcnRlZCB0ZXN0X3Rvb2xzIGZyb20gYSBtb2R1bGUgdG8gYSBwYWNrYWdlIGNvbnRhaW5pbmcKLSAgc2VwYXJhdGUgdGVzdCBmaWxlcyBmb3IgZWFjaCB0ZXN0ZWQgc2NyaXB0LgotCi0tIElzc3VlICMyMDE1NTogQ2hhbmdlZCBIVFRQIG1ldGhvZCBuYW1lcyBpbiBmYWlsaW5nIHRlc3RzIGluIHRlc3RfaHR0cHNlcnZlcnMKLSAgc28gdGhhdCBwYWNrZXQgZmlsdGVyaW5nIHNvZnR3YXJlIChzcGVjaWZpY2FsbHkgV2luZG93cyBCYXNlIEZpbHRlcmluZyBFbmdpbmUpCi0gIGRvZXMgbm90IGludGVyZmVyZSB3aXRoIHRoZSB0cmFuc2FjdGlvbiBzZW1hbnRpY3MgZXhwZWN0ZWQgYnkgdGhlIHRlc3RzLgotCi0tIElzc3VlICMxOTQ5MzogUmVmYWN0b3JlZCB0aGUgY3R5cGVzIHRlc3QgcGFja2FnZSB0byBza2lwIHRlc3RzIGV4cGxpY2l0bHkKLSAgcmF0aGVyIHRoYW4gc2lsZW50bHkuCi0KLS0gSXNzdWUgIzE4NDkyOiBBbGwgcmVzb3VyY2VzIGFyZSBub3cgYWxsb3dlZCB3aGVuIHRlc3RzIGFyZSBub3QgcnVuIGJ5Ci0gIHJlZ3J0ZXN0LnB5LgotCi0tIElzc3VlICMyMTYzNDogRml4IHB5c3RvbmUgbWljcm8tYmVuY2htYXJrOiB1c2UgZmxvb3IgZGl2aXNpb24gaW5zdGVhZCBvZiB0cnVlCi0gIGRpdmlzaW9uIHRvIGJlbmNobWFyayBpbnRlZ2VycyBpbnN0ZWFkIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFNldCBweXN0b25lCi0gIHZlcnNpb24gdG8gMS4yLiBQYXRjaCB3cml0dGVuIGJ5IExlbm5hcnQgUmVnZWJyby4KLQotLSBJc3N1ZSAjMjE2MDU6IEFkZGVkIHRlc3RzIGZvciBUa2ludGVyIGltYWdlcy4KLQotLSBJc3N1ZSAjMjE0OTM6IEFkZGVkIHRlc3QgZm9yIG50cGF0aC5leHBhbmR1c2VyKCkuICBPcmlnaW5hbCBwYXRjaCBieQotICBDbGF1ZGl1IFBvcGEuCi0KLS0gSXNzdWUgIzE5OTI1OiBBZGRlZCB0ZXN0cyBmb3IgdGhlIHNwd2QgbW9kdWxlLiBPcmlnaW5hbCBwYXRjaCBieSBWYWpyYXNreSBLb2suCi0KLS0gSXNzdWUgIzIxNTIyOiBBZGRlZCBUa2ludGVyIHRlc3RzIGZvciBMaXN0Ym94Lml0ZW1jb25maWd1cmUoKSwKLSAgUGFuZWRXaW5kb3cucGFuZWNvbmZpZ3VyZSgpLCBhbmQgTWVudS5lbnRyeWNvbmZpZ3VyZSgpLgotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzIxNzc3OiBUaGUgYmluYXJ5IHNlcXVlbmNlIG1ldGhvZHMgb24gYnl0ZXMgYW5kIGJ5dGVhcnJheSBhcmUgbm93Ci0gIGRvY3VtZW50ZWQgZXhwbGljaXRseSwgcmF0aGVyIHRoYW4gYXNzdW1pbmcgdXNlcnMgd2lsbCBiZSBhYmxlIHRvIGRlcml2ZQotICB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyIGZyb20gdGhlIGJlaGF2aW91ciBvZiB0aGUgY29ycmVzcG9uZGluZyBzdHIgbWV0aG9kcy4KLQotV2luZG93cwotLS0tLS0tLQotCi0tIElzc3VlICMyMTY3MSwgIzIyMTYwLCBDVkUtMjAxNC0wMjI0OiBUaGUgYnVuZGxlZCB2ZXJzaW9uIG9mIE9wZW5TU0wgaGFzIGJlZW4KLSAgdXBkYXRlZCB0byAxLjAuMWkuCi0KLS0gSXNzdWUgIzEwNzQ3OiBVc2UgdmVyc2lvbmVkIGxhYmVscyBpbiB0aGUgV2luZG93cyBzdGFydCBtZW51LgotICBQYXRjaCBieSBPbGl2ZSBLaWxidXJuLgotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMjIyMDE6IENvbW1hbmQtbGluZSBpbnRlcmZhY2Ugb2YgdGhlIHppcGZpbGUgbW9kdWxlIG5vdyBjb3JyZWN0bHkKLSAgZXh0cmFjdHMgWklQIGZpbGVzIHdpdGggZGlyZWN0b3J5IGVudHJpZXMuICBQYXRjaCBieSBSeWFuIFdpbHNvbi4KLQotLSBJc3N1ZSAjMjE5MDY6IE1ha2UgVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkgd29yayBpbiBQeXRob24gMy4KLSAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgotCi0tIElzc3VlICMyMTYyOTogRml4IEFyZ3VtZW50IENsaW5pYydzICItLWNvbnZlcnRlcnMiIGZlYXR1cmUuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVsZWFzZSBkYXRlOiAyMDE0LTA1LTE4Ci0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMyMTQxODogRml4IGEgY3Jhc2ggaW4gdGhlIGJ1aWx0aW4gZnVuY3Rpb24gc3VwZXIoKSB3aGVuIGNhbGxlZCB3aXRob3V0Ci0gIGFyZ3VtZW50IGFuZCB3aXRob3V0IGN1cnJlbnQgZnJhbWUgKGV4OiBlbWJlZGRlZCBQeXRob24pLgotCi0tIElzc3VlICMyMTQyNTogRml4IGZsdXNoaW5nIG9mIHN0YW5kYXJkIHN0cmVhbXMgaW4gdGhlIGludGVyYWN0aXZlCi0gIGludGVycHJldGVyLgotCi0tIElzc3VlICMyMTQzNTogSW4gcmFyZSBjYXNlcywgd2hlbiBydW5uaW5nIGZpbmFsaXplcnMgb24gb2JqZWN0cyBpbiBjeWNsaWMKLSAgdHJhc2ggYSBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZSBjb3VsZCBvY2N1ciBkdWUgdG8gYSBzdWJ0bGUgZmxhdyBpbgotICBpbnRlcm5hbCBpdGVyYXRpb24gbG9naWMuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQogLSBJc3N1ZSAjMTA3NDQ6IEZpeCBQRVAgMzExOCBmb3JtYXQgc3RyaW5ncyBvbiBjdHlwZXMgb2JqZWN0cyB3aXRoIGEgbm9udHJpdmlhbAogICBzaGFwZS4KIAorLSBJc3N1ZSAjMjA4MjY6IE9wdGltaXplIGlwYWRkcmVzcy5jb2xsYXBzZV9hZGRyZXNzZXMoKS4KKworLSBJc3N1ZSAjMjE0ODc6IE9wdGltaXplIGlwYWRkcmVzcy5zdW1tYXJpemVfYWRkcmVzc19yYW5nZSgpIGFuZAorICBpcGFkZHJlc3Mue0lQdjROZXR3b3JrLElQdjZOZXR3b3JrfS5zdWJuZXRzKCkuCisKKy0gSXNzdWUgIzIxNDg2OiBPcHRpbWl6ZSBwYXJzaW5nIG9mIG5ldG1hc2tzIGluIGlwYWRkcmVzcy5JUHY0TmV0d29yayBhbmQKKyAgaXBhZGRyZXNzLklQdjZOZXR3b3JrLgorCistIElzc3VlICMxMzkxNjogRGlzYWxsb3dlZCB0aGUgc3Vycm9nYXRlcGFzcyBlcnJvciBoYW5kbGVyIGZvciBub24gVVRGLVwqCisgIGVuY29kaW5ncy4KKwogLSBJc3N1ZSAjMjA5OTg6IEZpeGVkIHJlLmZ1bGxtYXRjaCgpIG9mIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybgogICB3aXRoIGlnbm9yZSBjYXNlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgogCiAtIElzc3VlICMyMTA3NTogZmlsZWlucHV0LkZpbGVJbnB1dCBub3cgcmVhZHMgYnl0ZXMgZnJvbSBzdGFuZGFyZCBzdHJlYW0gaWYKICAgYmluYXJ5IG1vZGUgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2FtIEtpbWJyZWwuCiAKKy0gSXNzdWUgIzE5Nzc1OiBBZGQgYSBzYW1lZmlsZSgpIG1ldGhvZCB0byBwYXRobGliIFBhdGggb2JqZWN0cy4gIEluaXRpYWwKKyAgcGF0Y2ggYnkgVmFqcmFza3kgS29rLgorCistIElzc3VlICMyMTIyNjogU2V0IHVwIG1vZHVsZXMgcHJvcGVybHkgaW4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QKKyAgKGFuZCBmcmllbmRzKS4KKworLSBJc3N1ZSAjMjEzOTg6IEZpeCBhIHVuaWNvZGUgZXJyb3IgaW4gdGhlIHB5ZG9jIHBhZ2VyIHdoZW4gdGhlIGRvY3VtZW50YXRpb24KKyAgY29udGFpbnMgY2hhcmFjdGVycyBub3QgZW5jb2RhYmxlIHRvIHRoZSBzdGRvdXQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE2NTMxOiBpcGFkZHJlc3MuSVB2NE5ldHdvcmsgYW5kIGlwYWRkcmVzcy5JUHY2TmV0d29yayBub3cgYWNjZXB0CisgIGFuIChhZGRyZXNzLCBuZXRtYXNrKSB0dXBsZSBhcmd1bWVudCwgc28gYXMgdG8gZWFzaWx5IGNvbnN0cnVjdCBuZXR3b3JrCisgIG9iamVjdHMgZnJvbSBleGlzdGluZyBhZGRyZXNzZXMuCisKKy0gSXNzdWUgIzIxMTU2OiBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuc291cmNlX3RvX2NvZGUoKSBpcyBub3cgYQorICBzdGF0aWNtZXRob2QuCisKKy0gSXNzdWUgIzIxNDI0OiBTaW1wbGlmaWVkIGFuZCBvcHRpbWl6ZWQgaGVhcXAubmxhcmdlc3QoKSBhbmQgbm1zbWFsbGVzdCgpCisgIHRvIG1ha2UgZmV3ZXIgdHVwbGUgY29tcGFyaXNvbnMuCisKIC0gSXNzdWUgIzIxMzk2OiBGaXggVGV4dElPV3JhcHBlciguLi4sIHdyaXRlX3Rocm91Z2g9VHJ1ZSkgdG8gbm90IGZvcmNlIGEKICAgZmx1c2goKSBvbiB0aGUgdW5kZXJseWluZyBiaW5hcnkgc3RyZWFtLiAgUGF0Y2ggYnkgYWtpcmEuCiAKLS0gSXNzdWUgIzIxNDcwOiBEbyBhIGJldHRlciBqb2Igc2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYnkKLSAgdXNpbmcgZW5vdWdoIGJ5dGVzIHRvIHNwYW4gdGhlIGZ1bGwgc3RhdGUgc3BhY2Ugb2YgdGhlIE1lcnNlbm5lIFR3aXN0ZXIuCi0KLS0gSXNzdWUgIzIxMzk4OiBGaXggYW4gdW5pY29kZSBlcnJvciBpbiB0aGUgcHlkb2MgcGFnZXIgd2hlbiB0aGUgZG9jdW1lbnRhdGlvbgotICBjb250YWlucyBjaGFyYWN0ZXJzIG5vdCBlbmNvZGFibGUgdG8gdGhlIHN0ZG91dCBlbmNvZGluZy4KLQotVGVzdHMKLS0tLS0tCi0KLS0gSXNzdWUgIzE3NzU2OiBGaXggdGVzdF9jb2RlIHRlc3Qgd2hlbiBydW4gZnJvbSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uLgotCi0tIElzc3VlICMxNzc1MjogRml4IGRpc3R1dGlscyB0ZXN0cyB3aGVuIHJ1biBmcm9tIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24uCi0KLUlETEUKLS0tLS0KLQotLSBJc3N1ZSAjMTgxMDQ6IEFkZCBpZGxlbGliL2lkbGVfdGVzdC9odGVzdC5weSB3aXRoIGEgZmV3IHNhbXBsZSB0ZXN0cyB0byBiZWdpbgotICBjb25zb2xpZGF0aW5nIGFuZCBpbXByb3ZpbmcgaHVtYW4tdmFsaWRhdGVkIHRlc3RzIG9mIElkbGUuIENoYW5nZSBvdGhlciBmaWxlcwotICBhcyBuZWVkZWQgdG8gd29yayB3aXRoIGh0ZXN0LiAgUnVubmluZyB0aGUgbW9kdWxlIGFzIF9fbWFpbl9fIHJ1bnMgYWxsIHRlc3RzLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4xcmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVJlbGVhc2UgZGF0ZTogMjAxNC0wNS0wNQotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMjEyNzQ6IERlZmluZSBQQVRIX01BWCBmb3IgR05VL0h1cmQgaW4gUHl0aG9uL3B5dGhvbnJ1bi5jLgotCi0tIElzc3VlICMyMTIwOTogRml4IHNlbmRpbmcgdHVwbGVzIHRvIGN1c3RvbSBnZW5lcmF0b3Igb2JqZWN0cyB3aXRoIHRoZSB5aWVsZAotICBmcm9tIHN5bnRheC4KLQotLSBJc3N1ZSAjMjExMzQ6IEZpeCBzZWdmYXVsdCB3aGVuIHN0ciBpcyBjYWxsZWQgb24gYW4gdW5pbml0aWFsaXplZAotICBVbmljb2RlRW5jb2RlRXJyb3IsIFVuaWNvZGVEZWNvZGVFcnJvciwgb3IgVW5pY29kZVRyYW5zbGF0ZUVycm9yIG9iamVjdC4KLQotLSBJc3N1ZSAjMTk1Mzc6IEZpeCBQeVVuaWNvZGVfREFUQSgpIGFsaWdubWVudCB1bmRlciBtNjhrLiAgUGF0Y2ggYnkKLSAgQW5kcmVhcyBTY2h3YWIuCi0KLS0gSXNzdWUgIzIwOTI5OiBBZGQgYSB0eXBlIGNhc3QgdG8gYXZvaWQgc2hpZnRpbmcgYSBuZWdhdGl2ZSBudW1iZXIuCi0KLS0gSXNzdWUgIzIwNzMxOiBQcm9wZXJseSBwb3NpdGlvbiBpbiBzb3VyY2UgY29kZSBmaWxlcyBldmVuIGlmIHRoZXkKLSAgYXJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzIwNjM3OiBLZXktc2hhcmluZyBub3cgYWxzbyB3b3JrcyBmb3IgaW5zdGFuY2UgZGljdGlvbmFyaWVzIG9mCi0gIHN1YmNsYXNzZXMuICBQYXRjaCBieSBQZXRlciBJbmdlYnJldHNvbi4KLQotLSBJc3N1ZSAjMTI1NDY6IEFsbG93IGBgXHgwMGBgIHRvIGJlIHVzZWQgYXMgYSBmaWxsIGNoYXJhY3RlciB3aGVuIHVzaW5nIHN0ciwgaW50LAotICBmbG9hdCwgYW5kIGNvbXBsZXggX19mb3JtYXRfXyBtZXRob2RzLgotCi0tIElzc3VlICMxMzU5ODogTW9kaWZ5IHN0cmluZy5Gb3JtYXR0ZXIgdG8gc3VwcG9ydCBhdXRvLW51bWJlcmluZyBvZgotICByZXBsYWNlbWVudCBmaWVsZHMuIEl0IG5vdyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiBzdHIuZm9ybWF0KCkgaW4KLSAgdGhpcyByZWdhcmQuIFBhdGNoZXMgYnkgUGhpbCBFbHNvbiBhbmQgUmFtY2hhbmRyYSBBcHRlLgotCi1MaWJyYXJ5Ci0tLS0tLS0tCistIElzc3VlICMxODMxNDogVW5saW5rIG5vdyByZW1vdmVzIGp1bmN0aW9ucyBvbiBXaW5kb3dzLiBQYXRjaCBieSBLaW0gR3LDpHNtYW4KIAogLSBJc3N1ZSAjMjEwODg6IEJ1Z2ZpeCBmb3IgY3Vyc2VzLndpbmRvdy5hZGRjaCgpIHJlZ3Jlc3Npb24gaW4gMy40LjAuCiAgIEluIHBvcnRpbmcgdG8gQXJndW1lbnQgQ2xpbmljLCB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyB3ZXJlIHJldmVyc2VkLgogCistIElzc3VlICMyMTQwNzogX2RlY2ltYWw6IFRoZSBtb2R1bGUgbm93IHN1cHBvcnRzIGZ1bmN0aW9uIHNpZ25hdHVyZXMuCisKKy0gSXNzdWUgIzEwNjUwOiBSZW1vdmUgdGhlIG5vbi1zdGFuZGFyZCAnd2F0Y2hleHAnIHBhcmFtZXRlciBmcm9tIHRoZQorICBEZWNpbWFsLnF1YW50aXplKCkgbWV0aG9kIGluIHRoZSBQeXRob24gdmVyc2lvbi4gIEl0IGhhZCBuZXZlciBiZWVuCisgIHByZXNlbnQgaW4gdGhlIEMgdmVyc2lvbi4KKwogLSBJc3N1ZSAjMjE0Njk6IFJlZHVjZWQgdGhlIHJpc2sgb2YgZmFsc2UgcG9zaXRpdmVzIGluIHJvYm90cGFyc2VyIGJ5CiAgIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHJvYm90cy50eHQgaGFzIGJlZW4gcmVhZCBvciBkb2VzIG5vdCBleGlzdAogICBwcmlvciB0byByZXR1cm5pbmcgVHJ1ZSBpbiBjYW5fZmV0Y2goKS4KIAorLSBJc3N1ZSAjMTk0MTQ6IEhhdmUgdGhlIE9yZGVyZWREaWN0IG1hcmsgZGVsZXRlZCBsaW5rcyBhcyB1bnVzYWJsZS4KKyAgVGhpcyBnaXZlcyBhbiBlYXJseSBmYWlsdXJlIGlmIHRoZSBsaW5rIGlzIGRlbGV0ZWQgZHVyaW5nIGl0ZXJhdGlvbi4KKworLSBJc3N1ZSAjMjE0MjE6IEFkZCBfX3Nsb3RzX18gdG8gdGhlIE1hcHBpbmdWaWV3cyBBQkMuCisgIFBhdGNoIGJ5IEpvc2ggUm9zZW5iZXJnLgorCistIElzc3VlICMyMTEwMTogRWxpbWluYXRlIGRvdWJsZSBoYXNoaW5nIGluIHRoZSBDIHNwZWVkLXVwIGNvZGUgZm9yCisgIGNvbGxlY3Rpb25zLkNvdW50ZXIoKS4KKwogLSBJc3N1ZSAjMjEzMjE6IGl0ZXJ0b29scy5pc2xpY2UoKSBub3cgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSB0byB0aGUgc291cmNlCiAgIGl0ZXJhdG9yIHdoZW4gdGhlIHNsaWNlIGlzIGV4aGF1c3RlZC4gIFBhdGNoIGJ5IEFudG9uIEFmYW5hc3lldi4KIAorLSBJc3N1ZSAjMjEwNTc6IFRleHRJT1dyYXBwZXIgbm93IGFsbG93cyB0aGUgdW5kZXJseWluZyBiaW5hcnkgc3RyZWFtJ3MKKyAgcmVhZCgpIG9yIHJlYWQxKCkgbWV0aG9kIHRvIHJldHVybiBhbiBhcmJpdHJhcnkgYnl0ZXMtbGlrZSBvYmplY3QKKyAgKHN1Y2ggYXMgYSBtZW1vcnl2aWV3KS4gIFBhdGNoIGJ5IE5pa29sYXVzIFJhdGguCisKKy0gSXNzdWUgIzIwOTUxOiBTU0xTb2NrZXQuc2VuZCgpIG5vdyByYWlzZXMgZWl0aGVyIFNTTFdhbnRSZWFkRXJyb3Igb3IKKyAgU1NMV2FudFdyaXRlRXJyb3Igb24gYSBub24tYmxvY2tpbmcgc29ja2V0IGlmIHRoZSBvcGVyYXRpb24gd291bGQgYmxvY2suCisgIFByZXZpb3VzbHksIGl0IHdvdWxkIHJldHVybiAwLiAgUGF0Y2ggYnkgTmlrb2xhdXMgUmF0aC4KKworLSBJc3N1ZSAjMTMyNDg6IHJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGFzeW5jb3JlLmRpc3BhdGNoZXIgX19nZXRhdHRyX18KKyAgY2hlYXAgaW5oZXJpdGFuY2UgaGFjay4KKwogLSBJc3N1ZSAjOTgxNTogYXNzZXJ0UmFpc2VzIG5vdyB0cmllcyB0byBjbGVhciByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcwogICBpbiB0aGUgZXhjZXB0aW9uJ3MgdHJhY2ViYWNrLgogCistIElzc3VlICMxOTk0MDogc3NsLmNlcnRfdGltZV90b19zZWNvbmRzKCkgbm93IGludGVycHJldHMgdGhlIGdpdmVuIHRpbWUKKyAgc3RyaW5nIGluIHRoZSBVVEMgdGltZXpvbmUgKGFzIHNwZWNpZmllZCBpbiBSRkMgNTI4MCksIG5vdCB0aGUgbG9jYWwKKyAgdGltZXpvbmUuCisKIC0gSXNzdWUgIzEzMjA0OiBDYWxsaW5nIHN5cy5mbGFncy5fX25ld19fIHdvdWxkIGNyYXNoIHRoZSBpbnRlcnByZXRlciwKICAgbm93IGl0IHJhaXNlcyBhIFR5cGVFcnJvci4KIApAQCAtMTkwOSw5ICszODY5LDI1IEBACiAtIElzc3VlICMxMjIyMDogbWluZG9tIG5vdyByYWlzZXMgYSBjdXN0b20gVmFsdWVFcnJvciBpbmRpY2F0aW5nIGl0IGRvZXNuJ3QKICAgc3VwcG9ydCBzcGFjZXMgaW4gVVJJcyBpbnN0ZWFkIG9mIGxldHRpbmcgYSAnc3BsaXQnIFZhbHVlRXJyb3IgYnViYmxlIHVwLgogCistIElzc3VlICMyMTA2ODogVGhlIHNzbC5QUk9UT0NPTCogY29uc3RhbnRzIGFyZSBub3cgZW51bSBtZW1iZXJzLgorCistIElzc3VlICMyMTI3NjogcG9zaXhtb2R1bGU6IERvbid0IGRlZmluZSBVU0VfWEFUVFJTIG9uIEtGcmVlQlNEIGFuZCB0aGUgSHVyZC4KKworLSBJc3N1ZSAjMjEyNjI6IE5ldyBtZXRob2QgYXNzZXJ0X25vdF9jYWxsZWQgZm9yIE1vY2suCisgIEl0IHJhaXNlcyBBc3NlcnRpb25FcnJvciBpZiB0aGUgbW9jayBoYXMgYmVlbiBjYWxsZWQuCisKKy0gSXNzdWUgIzIxMjM4OiBOZXcga2V5d29yZCBhcmd1bWVudCBgdW5zYWZlYCB0byBNb2NrLiBJdCByYWlzZXMKKyAgYEF0dHJpYnV0ZUVycm9yYCBpbmNhc2Ugb2YgYW4gYXR0cmlidXRlIHN0YXJ0c3dpdGggYXNzZXJ0IG9yIGFzc3JldC4KKworLSBJc3N1ZSAjMjA4OTY6IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCkgbm93IHVzZXMgUFJPVE9DT0xfU1NMdjIzLCBub3QKKyAgUFJPVE9DT0xfU1NMdjMsIGZvciBtYXhpbXVtIGNvbXBhdGliaWxpdHkuCisKIC0gSXNzdWUgIzIxMjM5OiBwYXRjaC5zdG9wYWxsKCkgZGlkbid0IHdvcmsgZGV0ZXJtaW5pc3RpY2FsbHkgd2hlbiB0aGUgc2FtZQogICBuYW1lIHdhcyBwYXRjaGVkIG1vcmUgdGhhbiBvbmNlLgogCistIElzc3VlICMyMTIwMzogVXBkYXRlZCBmaWxlQ29uZmlnIGFuZCBkaWN0Q29uZmlnIHRvIHJlbW92ZSBpbmNvbnNpc3RlbmNpZXMuCisgIFRoYW5rcyB0byBKdXJlIEtvcmVuIGZvciB0aGUgcGF0Y2guCisKIC0gSXNzdWUgIzIxMjIyOiBQYXNzaW5nIG5hbWUga2V5d29yZCBhcmd1bWVudCB0byBtb2NrLmNyZWF0ZV9hdXRvc3BlYyBub3cKICAgd29ya3MuCiAKQEAgLTE5NDIsMTcgKzM5MTgsMzEgQEAKIC0gSXNzdWUgIzIxMTcxOiBGaXhlZCB1bmRvY3VtZW50ZWQgZmlsdGVyIEFQSSBvZiB0aGUgcm90MTMgY29kZWMuCiAgIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCiAKKy0gSXNzdWUgIzIwNTM5OiBJbXByb3ZlZCBtYXRoLmZhY3RvcmlhbCBlcnJvciBtZXNzYWdlIGZvciBsYXJnZSBwb3NpdGl2ZSBpbnB1dHMKKyAgYW5kIGNoYW5nZWQgZXhjZXB0aW9uIHR5cGUgKE92ZXJmbG93RXJyb3IgLT4gVmFsdWVFcnJvcikgZm9yIGxhcmdlIG5lZ2F0aXZlCisgIGlucHV0cy4KKwogLSBJc3N1ZSAjMjExNzI6IGlzaW5zdGFuY2UgY2hlY2sgcmVsYXhlZCBmcm9tIGRpY3QgdG8gY29sbGVjdGlvbnMuTWFwcGluZy4KIAogLSBJc3N1ZSAjMjExNTU6IGFzeW5jaW8uRXZlbnRMb29wLmNyZWF0ZV91bml4X3NlcnZlcigpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yCiAgIGlmIHBhdGggYW5kIHNvY2sgYXJlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lLgogCistIElzc3VlICMyMTEzNjogQXZvaWQgdW5uZWNlc3Nhcnkgbm9ybWFsaXphdGlvbiBvZiBGcmFjdGlvbnMgcmVzdWx0aW5nIGZyb20KKyAgcG93ZXIgYW5kIG90aGVyIG9wZXJhdGlvbnMuICBQYXRjaCBieSBSYXltb25kIEhldHRpbmdlci4KKworLSBJc3N1ZSAjMTc2MjE6IEludHJvZHVjZSBpbXBvcnRsaWIudXRpbC5MYXp5TG9hZGVyLgorCistIElzc3VlICMyMTA3Njogc2lnbmFsIG1vZHVsZSBjb25zdGFudHMgd2VyZSB0dXJuZWQgaW50byBlbnVtcy4KKyAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCisKKy0gSXNzdWUgIzIwNjM2OiBJbXByb3ZlZCB0aGUgcmVwciBvZiBUa2ludGVyIHdpZGdldHMuCisKKy0gSXNzdWUgIzE5NTA1OiBUaGUgaXRlbXMsIGtleXMsIGFuZCB2YWx1ZXMgdmlld3Mgb2YgT3JkZXJlZERpY3Qgbm93IHN1cHBvcnQKKyAgcmV2ZXJzZSBpdGVyYXRpb24gdXNpbmcgcmV2ZXJzZWQoKS4KKwogLSBJc3N1ZSAjMjExNDk6IEltcHJvdmVkIHRocmVhZC1zYWZldHkgaW4gbG9nZ2luZyBjbGVhbnVwIGR1cmluZyBpbnRlcnByZXRlcgogICBzaHV0ZG93bi4gVGhhbmtzIHRvIERldmluIEplYW5waWVycmUgZm9yIHRoZSBwYXRjaC4KIAotLSBJc3N1ZSAjMjAxNDU6IGBhc3NlcnRSYWlzZXNSZWdleGAgYW5kIGBhc3NlcnRXYXJuc1JlZ2V4YCBub3cgcmFpc2UgYQotICBUeXBlRXJyb3IgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBub3QgYSBzdHJpbmcgb3IgY29tcGlsZWQgcmVnZXguCi0KIC0gSXNzdWUgIzIxMDU4OiBGaXggYSBsZWFrIG9mIGZpbGUgZGVzY3JpcHRvciBpbgogICA6ZnVuYzpgdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlYCwgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpZgogICA6ZnVuYzpgaW8ub3BlbmAgZmFpbHMKQEAgLTE5NjIsNiArMzk1Miw5IEBACiAtIElzc3VlICMyMTAxMzogRW5oYW5jZSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpIHdoZW4gdXNlZCBmb3Igc2VydmVyIHNpZGUKICAgc29ja2V0cyB0byBwcm92aWRlIGJldHRlciBzZWN1cml0eSBieSBkZWZhdWx0LgogCistIElzc3VlICMyMDE0NTogYGFzc2VydFJhaXNlc1JlZ2V4YCBhbmQgYGFzc2VydFdhcm5zUmVnZXhgIG5vdyByYWlzZSBhCisgIFR5cGVFcnJvciBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBhIHN0cmluZyBvciBjb21waWxlZCByZWdleC4KKwogLSBJc3N1ZSAjMjA2MzM6IFJlcGxhY2UgcmVsYXRpdmUgaW1wb3J0IGJ5IGFic29sdXRlIGltcG9ydC4KIAogLSBJc3N1ZSAjMjA5ODA6IFN0b3Agd3JhcHBpbmcgZXhjZXB0aW9uIHdoZW4gdXNpbmcgVGhyZWFkUG9vbC4KQEAgLTE5NzUsMTMgKzM5NjgsMzMgQEAKICAgY3VydmUgZm9yIEVDREgga2V5IGV4Y2hhbmdlIG9uIE9wZW5TU0wgMS4wLjIgYW5kIGxhdGVyLCBhbmQgb3RoZXJ3aXNlCiAgIGRlZmF1bHQgdG8gInByaW1lMjU2djEiLgogCistIElzc3VlICMyMTAwMDogSW1wcm92ZSB0aGUgY29tbWFuZC1saW5lIGludGVyZmFjZSBvZiBqc29uLnRvb2wuCisKIC0gSXNzdWUgIzIwOTk1OiBFbmhhbmNlIGRlZmF1bHQgY2lwaGVycyB1c2VkIGJ5IHRoZSBzc2wgbW9kdWxlIHRvIGVuYWJsZQotICBiZXR0ZXIgc2VjdXJpdHkgYW4gcHJpb3JpdGl6ZSBwZXJmZWN0IGZvcndhcmQgc2VjcmVjeS4KKyAgYmV0dGVyIHNlY3VyaXR5IGFuZCBwcmlvcml0aXplIHBlcmZlY3QgZm9yd2FyZCBzZWNyZWN5LgogCiAtIElzc3VlICMyMDg4NDogRG9uJ3QgYXNzdW1lIHRoYXQgX19maWxlX18gaXMgZGVmaW5lZCBvbiBpbXBvcnRsaWIuX19pbml0X18uCiAKIC0gSXNzdWUgIzIxNDk5OiBJZ25vcmUgX19idWlsdGluc19fIGluIHNldmVyYWwgdGVzdF9pbXBvcnRsaWIudGVzdF9hcGkgdGVzdHMuCiAKKy0gSXNzdWUgIzIwNjI3OiB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5IGlzIG5vdyBhIGNvbnRleHQgbWFuYWdlci4KKworLSBJc3N1ZSAjMTkxNjU6IFRoZSBmb3JtYXR0ZXIgbW9kdWxlIG5vdyByYWlzZXMgRGVwcmVjYXRpb25XYXJuaW5nIGluc3RlYWQgb2YKKyAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZy4KKworLSBJc3N1ZSAjMTM5MzY6IFJlbW92ZSB0aGUgYWJpbGl0eSBvZiBkYXRldGltZS50aW1lIGluc3RhbmNlcyB0byBiZSBjb25zaWRlcmVkCisgIGZhbHNlIGluIGJvb2xlYW4gY29udGV4dHMuCisKKy0gSXNzdWUgIzE4OTMxOiBzZWxlY3RvcnMgbW9kdWxlIG5vdyBzdXBwb3J0cyAvZGV2L3BvbGwgb24gU29sYXJpcy4KKyAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCisKKy0gSXNzdWUgIzE5OTc3OiBXaGVuIHRoZSBgYExDX1RZUEVgYCBsb2NhbGUgaXMgdGhlIFBPU0lYIGxvY2FsZSAoYGBDYGAgbG9jYWxlKSwKKyAgOnB5OmRhdGE6YHN5cy5zdGRpbmAgYW5kIDpweTpkYXRhOmBzeXMuc3Rkb3V0YCBhcmUgbm93IHVzaW5nIHRoZQorICBgYHN1cnJvZ2F0ZWVzY2FwZWBgIGVycm9yIGhhbmRsZXIsIGluc3RlYWQgb2YgdGhlIGBgc3RyaWN0YGAgZXJyb3IgaGFuZGxlci4KKworLSBJc3N1ZSAjMjA1NzQ6IEltcGxlbWVudCBpbmNyZW1lbnRhbCBkZWNvZGVyIGZvciBjcDY1MDAxIGNvZGUgKFdpbmRvd3MgY29kZQorICBwYWdlIDY1MDAxLCBNaWNyb3NvZnQgVVRGLTgpLgorCiAtIElzc3VlICMyMDg3OTogRGVsYXkgdGhlIGluaXRpYWxpemF0aW9uIG9mIGVuY29kaW5nIGFuZCBkZWNvZGluZyB0YWJsZXMgZm9yCiAgIGJhc2UzMiwgYXNjaWk4NSBhbmQgYmFzZTg1IGNvZGVjcyBpbiB0aGUgYmFzZTY0IG1vZHVsZSwgYW5kIGRlbGF5IHRoZQogICBpbml0aWFsaXphdGlvbiBvZiB0aGUgdW5xdW90ZV90b19ieXRlcygpIHRhYmxlIG9mIHRoZSB1cmxsaWIucGFyc2UgbW9kdWxlLCB0bwpAQCAtMjAxNiw2ICs0MDI5LDE0IEBACiAtIElzc3VlICMxOTc0ODogT24gQUlYLCB0aW1lLm1rdGltZSgpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciBmb3IgeWVhcgogICBvdXRzaXplIHJhbmdlIFsxOTAyOyAyMDM3XS4KIAorLSBJc3N1ZSAjMTk1NzM6IGluc3BlY3Quc2lnbmF0dXJlOiBVc2UgZW51bSBmb3IgcGFyYW1ldGVyIGtpbmQgY29uc3RhbnRzLgorCistIElzc3VlICMyMDcyNjogaW5zcGVjdC5zaWduYXR1cmU6IE1ha2UgU2lnbmF0dXJlIGFuZCBQYXJhbWV0ZXIgcGlja2xhYmxlLgorCistIElzc3VlICMxNzM3MzogQWRkIGluc3BlY3QuU2lnbmF0dXJlLmZyb21fY2FsbGFibGUgbWV0aG9kLgorCistIElzc3VlICMyMDM3ODogSW1wcm92ZSByZXByIG9mIGluc3BlY3QuU2lnbmF0dXJlIGFuZCBpbnNwZWN0LlBhcmFtZXRlci4KKwogLSBJc3N1ZSAjMjA4MTY6IEZpeCBpbnNwZWN0LmdldGNhbGxhcmdzKCkgdG8gcmFpc2UgY29ycmVjdCBUeXBlRXJyb3IgZm9yCiAgIG1pc3Npbmcga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gUGF0Y2ggYnkgSmVyZW1pYWggTG93aW4uCiAKQEAgLTIwMzIsNiArNDA1MywxMiBAQAogICBwb3NpdGlvbmFsLW9yLWtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cyBiZWNvbWUKICAga2V5d29yZC1vbmx5LgogCistIElzc3VlICMyMDMzNDogaW5zcGVjdC5TaWduYXR1cmUgYW5kIGluc3BlY3QuUGFyYW1ldGVyIGFyZSBub3cgaGFzaGFibGUuCisgIFRoYW5rcyB0byBBbnRvbnkgTGVlIGZvciBidWcgcmVwb3J0cyBhbmQgc3VnZ2VzdGlvbnMuCisKKy0gSXNzdWUgIzE1OTE2OiBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSByZXR1cm5zIGFuIGVtcHR5IHVuaXR0ZXN0LlRlc3RTdWl0ZSBpbnN0ZWFkCisgIG9mIHJhaXNpbmcgVmFsdWVFcnJvciBpZiBpdCBmaW5kcyBubyB0ZXN0cworCiAtIElzc3VlICMyMTIwOTogRml4IGFzeW5jaW8udGFza3MuQ29yb1dyYXBwZXIgdG8gd29ya2Fyb3VuZCBhIGJ1ZwogICBpbiB5aWVsZC1mcm9tIGltcGxlbWVudGF0aW9uIGluIENQeXRob25zIHByaW9yIHRvIDMuNC4xLgogCkBAIC0yMDQ0LDE3ICs0MDcxLDkwIEBACiAtIElzc3VlICMxMTU3MTogRW5zdXJlIHRoYXQgdGhlIHR1cnRsZSB3aW5kb3cgYmVjb21lcyB0aGUgdG9wbW9zdCB3aW5kb3cKICAgd2hlbiBsYXVuY2hlZCBvbiBPUyBYLgogCi1FeHRlbnNpb24gTW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLS0KKy0gSXNzdWUgIzIxODAxOiBWYWxpZGF0ZSB0aGF0IF9fc2lnbmF0dXJlX18gaXMgTm9uZSBvciBhbiBpbnN0YW5jZSBvZiBTaWduYXR1cmUuCiAKLS0gSXNzdWUgIzIxMjc2OiBwb3NpeG1vZHVsZTogRG9uJ3QgZGVmaW5lIFVTRV9YQVRUUlMgb24gS0ZyZWVCU0QgYW5kIHRoZSBIdXJkLgorLSBJc3N1ZSAjMjE5MjM6IFByZXZlbnQgQXR0cmlidXRlRXJyb3IgaW4gZGlzdHV0aWxzLnN5c2NvbmZpZy5jdXN0b21pemVfY29tcGlsZXIKKyAgZHVlIHRvIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgX2NvbmZpZ192YXJzLgogCi0tIElzc3VlICMyMTIyNjogU2V0IHVwIG1vZHVsZXMgcHJvcGVybHkgaW4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QKLSAgKGFuZCBmcmllbmRzKS4KKy0gSXNzdWUgIzIxMzIzOiBGaXggaHR0cC5zZXJ2ZXIgdG8gYWdhaW4gaGFuZGxlIHNjcmlwdHMgaW4gQ0dJIHN1YmRpcmVjdG9yaWVzLAorICBicm9rZW4gYnkgdGhlIGZpeCBmb3Igc2VjdXJpdHkgaXNzdWUgIzE5NDM1LiAgUGF0Y2ggYnkgWmFjaCBCeXJuZS4KKworLSBJc3N1ZSAjMjI3MzM6IEZpeCBmZmlfcHJlcF9hcmdzIG5vdCB6ZXJvLWV4dGVuZGluZyBhcmd1bWVudCB2YWx1ZXMgY29ycmVjdGx5CisgIG9uIDY0LWJpdCBXaW5kb3dzLgorCistIElzc3VlICMyMzMwMjogRGVmYXVsdCB0byBUQ1BfTk9ERUxBWT0xIHVwb24gZXN0YWJsaXNoaW5nIGFuIEhUVFBDb25uZWN0aW9uLgorICBSZW1vdmVkIHVzZSBvZiBoYXJkLWNvZGVkIE1TUyBhcyBpdCdzIGFuIG9wdGltaXphdGlvbiB0aGF0J3Mgbm8gbG9uZ2VyIG5lZWRlZAorICB3aXRoIE5hZ2xlIGRpc2FibGVkLgogCiBJRExFCiAtLS0tCiAKKy0gSXNzdWUgIzIwNTc3OiBDb25maWd1cmF0aW9uIG9mIHRoZSBtYXggbGluZSBsZW5ndGggZm9yIHRoZSBGb3JtYXRQYXJhZ3JhcGgKKyAgZXh0ZW5zaW9uIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlIEdlbmVyYWwgdGFiIG9mIHRoZSBJZGxlIHByZWZlcmVuY2VzIGRpYWxvZworICB0byB0aGUgRm9ybWF0UGFyYWdyYXBoIHRhYiBvZiB0aGUgQ29uZmlnIEV4dGVuc2lvbnMgZGlhbG9nLgorICBQYXRjaCBieSBUYWwgRWluYXQuCisKKy0gSXNzdWUgIzE2ODkzOiBVcGRhdGUgSWRsZSBkb2MgY2hhcHRlciB0byBtYXRjaCBjdXJyZW50IElkbGUgYW5kIGFkZCBuZXcKKyAgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzMwNjg6IEFkZCBJZGxlIGV4dGVuc2lvbiBjb25maWd1cmF0aW9uIGRpYWxvZyB0byBPcHRpb25zIG1lbnUuCisgIENoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gSE9NRS8uaWRsZXJjL2NvbmZpZy1leHRlbnNpb25zLmNmZy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgVGFsIEVpbmF0LgorCistIElzc3VlICMxNjIzMzogQSBtb2R1bGUgYnJvd3NlciAoRmlsZSA6IENsYXNzIEJyb3dzZXIsIEFsdCtDKSByZXF1aXJlcyBhbgorICBlZGl0b3Igd2luZG93IHdpdGggYSBmaWxlbmFtZS4gIFdoZW4gQ2xhc3MgQnJvd3NlciBpcyByZXF1ZXN0ZWQgb3RoZXJ3aXNlLAorICBmcm9tIGEgc2hlbGwsIG91dHB1dCB3aW5kb3csIG9yICdVbnRpdGxlZCcgZWRpdG9yLCBJZGxlIG5vIGxvbmdlciBkaXNwbGF5cworICBhbiBlcnJvciBib3guICBJdCBub3cgcG9wcyB1cCBhbiBPcGVuIE1vZHVsZSBib3ggKEFsdCtNKS4gSWYgYSB2YWxpZCBuYW1lCisgIGlzIGVudGVyZWQgYW5kIGEgbW9kdWxlIGlzIG9wZW5lZCwgYSBjb3JyZXNwb25kaW5nIGJyb3dzZXIgaXMgYWxzbyBvcGVuZWQuCisKKy0gSXNzdWUgIzQ4MzI6IFNhdmUgQXMgdG8gdHlwZSBQeXRob24gZmlsZXMgYXV0b21hdGljYWxseSBhZGRzIC5weSB0byB0aGUKKyAgbmFtZSB5b3UgZW50ZXIgKGV2ZW4gaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgZGlzcGxheSBpdCkuICBTb21lIHN5c3RlbXMKKyAgYXV0b21hdGljYWxseSBhZGQgLnR4dCB3aGVuIHR5cGUgaXMgVGV4dCBmaWxlcy4KKworLSBJc3N1ZSAjMjE5ODY6IENvZGUgb2JqZWN0cyBhcmUgbm90IG5vcm1hbGx5IHBpY2tsZWQgYnkgdGhlIHBpY2tsZSBtb2R1bGUuCisgIFRvIG1hdGNoIHRoaXMsIHRoZXkgYXJlIG5vIGxvbmdlciBwaWNrbGVkIHdoZW4gcnVubmluZyB1bmRlciBJZGxlLgorCistIElzc3VlICMxNzM5MDogQWRqdXN0IEVkaXRvciB3aW5kb3cgdGl0bGU7IHJlbW92ZSAnUHl0aG9uJywKKyAgbW92ZSB2ZXJzaW9uIHRvIGVuZC4KKworLSBJc3N1ZSAjMTQxMDU6IElkbGUgZGVidWdnZXIgYnJlYWtwb2ludHMgbm8gbG9uZ2VyIGRpc2FwcGVhcgorICB3aGVuIGluc2VydGluZyBvciBkZWxldGluZyBsaW5lcy4KKworLSBJc3N1ZSAjMTcxNzI6IFR1cnRsZWRlbW8gY2FuIG5vdyBiZSBydW4gZnJvbSBJZGxlLgorICBDdXJyZW50bHksIHRoZSBlbnRyeSBpcyBvbiB0aGUgSGVscCBtZW51LCBidXQgaXQgbWF5IG1vdmUgdG8gUnVuLgorICBQYXRjaCBieSBSYW1jaGFuZHJhIEFwdCBhbmQgTGl0YSBDaG8uCisKKy0gSXNzdWUgIzIxNzY1OiBBZGQgc3VwcG9ydCBmb3Igbm9uLWFzY2lpIGlkZW50aWZpZXJzIHRvIEh5cGVyUGFyc2VyLgorCistIElzc3VlICMyMTk0MDogQWRkIHVuaXR0ZXN0IGZvciBXaWRnZXRSZWRpcmVjdG9yLiBJbml0aWFsIHBhdGNoIGJ5IFNhaW1hZGhhdgorICBIZWJsaWthci4KKworLSBJc3N1ZSAjMTg1OTI6IEFkZCB1bml0dGVzdCBmb3IgU2VhcmNoRGlhbG9nQmFzZS4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCistIElzc3VlICMyMTY5NDogQWRkIHVuaXR0ZXN0IGZvciBQYXJlbk1hdGNoLiBQYXRjaCBieSBTYWltYWRoYXYgSGVibGlrYXIuCisKKy0gSXNzdWUgIzIxNjg2OiBhZGQgdW5pdHRlc3QgZm9yIEh5cGVyUGFyc2VyLiBPcmlnaW5hbCBwYXRjaCBieSBTYWltYWRoYXYKKyAgSGVibGlrYXIuCisKKy0gSXNzdWUgIzEyMzg3OiBBZGQgbWlzc2luZyB1cHBlcihsb3dlciljYXNlIHZlcnNpb25zIG9mIGRlZmF1bHQgV2luZG93cyBrZXkKKyAgYmluZGluZ3MgZm9yIElkbGUgc28gQ2FwcyBMb2NrIGRvZXMgbm90IGRpc2FibGUgdGhlbS4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzIxNjk1OiBDbG9zaW5nIGEgRmluZC1pbi1maWxlcyBvdXRwdXQgd2luZG93IHdoaWxlIHRoZSBzZWFyY2ggaXMKKyAgc3RpbGwgaW4gcHJvZ3Jlc3Mgbm8gbG9uZ2VyIGNsb3NlcyBJZGxlLgorCistIElzc3VlICMxODkxMDogQWRkIHVuaXR0ZXN0IGZvciB0ZXh0Vmlldy4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCistIElzc3VlICMxODI5MjogQWRkIHVuaXR0ZXN0IGZvciBBdXRvRXhwYW5kLiBQYXRjaCBieSBTYWloYWRoYXYgSGVibGlrYXIuCisKKy0gSXNzdWUgIzE4NDA5OiBBZGQgdW5pdHRlc3QgZm9yIEF1dG9Db21wbGV0ZS4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCistIElzc3VlICMyMTQ3NzogaHRlc3QucHkgLSBJbXByb3ZlIGZyYW1ld29yaywgY29tcGxldGUgc2V0IG9mIHRlc3RzLgorICBQYXRjaGVzIGJ5IFNhaW1hZGhhdiBIZWJsaWthcgorCistIElzc3VlICMxODEwNDogQWRkIGlkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5IHdpdGggYSBmZXcgc2FtcGxlIHRlc3RzIHRvIGJlZ2luCisgIGNvbnNvbGlkYXRpbmcgYW5kIGltcHJvdmluZyBodW1hbi12YWxpZGF0ZWQgdGVzdHMgb2YgSWRsZS4gQ2hhbmdlIG90aGVyIGZpbGVzCisgIGFzIG5lZWRlZCB0byB3b3JrIHdpdGggaHRlc3QuICBSdW5uaW5nIHRoZSBtb2R1bGUgYXMgX19tYWluX18gcnVucyBhbGwgdGVzdHMuCisKIC0gSXNzdWUgIzIxMTM5OiBDaGFuZ2UgZGVmYXVsdCBwYXJhZ3JhcGggd2lkdGggdG8gNzIsIHRoZSBQRVAgOCByZWNvbW1lbmRhdGlvbi4KIAogLSBJc3N1ZSAjMjEyODQ6IFBhcmFncmFwaCByZWZvcm1hdCB0ZXN0IHBhc3NlcyBhZnRlciB1c2VyIGNoYW5nZXMgcmVmb3JtYXQgd2lkdGguCkBAIC0yMDYyLDEwICs0MTYyLDUyIEBACiAtIElzc3VlICMxNzY1NDogRW5zdXJlIElETEUgbWVudXMgYXJlIGN1c3RvbWl6ZWQgcHJvcGVybHkgb24gT1MgWCBmb3IKICAgbm9uLWZyYW1ld29yayBidWlsZHMgYW5kIGZvciBhbGwgdmFyaWFudHMgb2YgVGsuCiAKKy0gSXNzdWUgIzIzMTgwOiBSZW5hbWUgSURMRSAiV2luZG93cyIgbWVudSBpdGVtIHRvICJXaW5kb3ciLgorICBQYXRjaCBieSBBbCBTd2VpZ2FydC4KKwogQnVpbGQKIC0tLS0tCiAKLS0gVGhlIFdpbmRvd3MgYnVpbGQgbm93IGluY2x1ZGVzIE9wZW5TU0wgMS4wLjFnCistIElzc3VlICMxNTUwNjogVXNlIHN0YW5kYXJkIFBLR19QUk9HX1BLR19DT05GSUcgYXV0b2NvbmYgbWFjcm8gaW4gdGhlIGNvbmZpZ3VyZQorICBzY3JpcHQuCisKKy0gSXNzdWUgIzIyOTM1OiBBbGxvdyB0aGUgc3NsIG1vZHVsZSB0byBiZSBjb21waWxlZCBpZiBvcGVuc3NsIGRvZXNuJ3Qgc3VwcG9ydAorICBTU0wgMy4KKworLSBJc3N1ZSAjMjI1OTI6IERyb3Agc3VwcG9ydCBvZiB0aGUgQm9ybGFuZCBDIGNvbXBpbGVyIHRvIGJ1aWxkIFB5dGhvbi4gVGhlCisgIGRpc3R1dGlscyBtb2R1bGUgc3RpbGwgc3VwcG9ydHMgaXQgdG8gYnVpbGQgZXh0ZW5zaW9ucy4KKworLSBJc3N1ZSAjMjI1OTE6IERyb3Agc3VwcG9ydCBvZiBNUy1ET1MsIGVzcGVjaWFsbHkgb2YgdGhlIERKR1BQIGNvbXBpbGVyCisgIChNUy1ET1MgcG9ydCBvZiBHQ0MpLgorCistIElzc3VlICMxNjUzNzogQ2hlY2sgd2hldGhlciBzZWxmLmV4dGVuc2lvbnMgaXMgZW1wdHkgaW4gc2V0dXAucHkuIFBhdGNoIGJ5CisgIEpvbmF0aGFuIEhvc21lci4KKworLSBJc3N1ZSAjMjIzNTk6IFJlbW92ZSBpbmNvcnJlY3QgdXNlcyBvZiByZWN1cnNpdmUgbWFrZS4gIFBhdGNoIGJ5IEpvbmFzCisgIFdhZ25lci4KKworLSBJc3N1ZSAjMjE5NTg6IERlZmluZSBIQVZFX1JPVU5EIHdoZW4gYnVpbGRpbmcgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMTMgYW5kCisgIGFib3ZlLiAgUGF0Y2ggYnkgWmFjaGFyeSBUdXJuZXIuCisKKy0gSXNzdWUgIzE4MDkzOiB0aGUgcHJvZ3JhbXMgdGhhdCBlbWJlZCB0aGUgQ1B5dGhvbiBydW50aW1lIGFyZSBub3cgaW4gYQorICBzZXBhcmF0ZSAiUHJvZ3JhbXMiIGRpcmVjdG9yeSwgcmF0aGVyIHRoYW4gYmVpbmcga2VwdCBpbiB0aGUgTW9kdWxlcworICBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE1NzU5OiAibWFrZSBzdXNwaWNpb3VzIiwgIm1ha2UgbGlua2NoZWNrIiBhbmQgIm1ha2UgZG9jdGVzdCIgaW4gRG9jLworICBub3cgZGlzcGxheSBzcGVjaWFsIG1lc3NhZ2Ugd2hlbiBhbmQgb25seSB3aGVuIHRoZXJlIGFyZSBmYWlsdXJlcy4KKworLSBJc3N1ZSAjMjExNDE6IFRoZSBXaW5kb3dzIGJ1aWxkIHByb2Nlc3Mgbm8gbG9uZ2VyIGF0dGVtcHRzIHRvIGZpbmQgUGVybCwKKyAgaW5zdGVhZCByZWx5aW5nIG9uIE9wZW5TU0wgc291cmNlIGJlaW5nIGNvbmZpZ3VyZWQgYW5kIHJlYWR5IHRvIGJ1aWxkLiAgVGhlCisgIGBgUENidWlsZFxidWlsZF9zc2wucHlgYCBzY3JpcHQgaGFzIGJlZW4gcmUtd3JpdHRlbiBhbmQgcmUtbmFtZWQgdG8KKyAgYGBQQ2J1aWxkXHByZXBhcmVfc3NsLnB5YGAsIGFuZCB0YWtlcyBjYXJlIG9mIGNvbmZpZ3VyaW5nIE9wZW5TU0wgc291cmNlCisgIGZvciBib3RoIDMyIGFuZCA2NCBiaXQgcGxhdGZvcm1zLiAgT3BlblNTTCBzb3VyY2VzIG9idGFpbmVkIGZyb20KKyAgc3ZuLnB5dGhvbi5vcmcgd2lsbCBhbHdheXMgYmUgcHJlLWNvbmZpZ3VyZWQgYW5kIHJlYWR5IHRvIGJ1aWxkLgorCistIElzc3VlICMyMTAzNzogQWRkIGEgYnVpbGQgb3B0aW9uIHRvIGVuYWJsZSBBZGRyZXNzU2FuaXRpemVyIHN1cHBvcnQuCisKKy0gSXNzdWUgIzE5OTYyOiBUaGUgV2luZG93cyBidWlsZCBwcm9jZXNzIG5vdyBjcmVhdGVzICJweXRob24uYmF0IiBpbiB0aGUKKyAgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUsIHdoaWNoIHBhc3NlcyBhbGwgYXJndW1lbnRzIHRocm91Z2ggdG8gdGhlIG1vc3QKKyAgcmVjZW50bHkgYnVpbHQgaW50ZXJwcmV0ZXIuCiAKIC0gSXNzdWUgIzIxMjg1OiBSZWZhY3RvciBhbmQgZml4IGN1cnNlcyBjb25maWd1cmUgY2hlY2sgdG8gYWx3YXlzIHNlYXJjaAogICBpbiBhIG5jdXJzZXN3IGRpcmVjdG9yeS4KQEAgLTIwNzQsMTIgKzQyMTYsNjAgQEAKICAgaW5jbHVkZSBkaXJlY3RvcmllcyBpZiB0aGV5IGFyZW4ndCBhbHJlYWR5IGJlaW5nIHNlYXJjaGVkLiBUaGlzIGF2b2lkcwogICBhbiBleHBsaWNpdCBydW50aW1lIGxpYnJhcnkgZGVwZW5kZW5jeS4KIAorLSBJc3N1ZSAjMTc4NjE6IFRvb2xzL3NjcmlwdHMvZ2VuZXJhdGVfb3Bjb2RlX2gucHkgYXV0b21hdGljYWxseSByZWdlbmVyYXRlcworICBJbmNsdWRlL29wY29kZS5oIGZyb20gTGliL29wY29kZS5weSBpZiB0aGUgbGF0dGVyIGdldHMgYW55IGNoYW5nZS4KKwogLSBJc3N1ZSAjMjA2NDQ6IE9TIFggaW5zdGFsbGVyIGJ1aWxkIHN1cHBvcnQgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgY2hhbmdlcwogICBpbiAzLjQuMTogYXNzdW1lIGV4dGVybmFsbHkgc3VwcGxpZWQgc3BoaW54LWJ1aWxkIGlzIGF2YWlsYWJsZSBpbiAvdXNyL2Jpbi4KIAorLSBJc3N1ZSAjMjAwMjI6IEVsaW1pbmF0ZSB1c2Ugb2YgZGVwcmVjYXRlZCBidW5kbGVidWlsZGVyIGluIE9TIFggYnVpbGRzLgorCistIElzc3VlICMxNTk2ODogSW5jb3Jwb3JhdGVkIFRjbCwgVGssIGFuZCBUaXggYnVpbGRzIGludG8gdGhlIFdpbmRvd3MgYnVpbGQKKyAgc29sdXRpb24uCisKKy0gSXNzdWUgIzE3MDk1OiBGaXggTW9kdWxlcy9TZXR1cCAqc2hhcmVkKiBzdXBwb3J0LgorCistIElzc3VlICMyMTgxMTogQW50aWNpcGF0ZWQgZml4ZXMgdG8gc3VwcG9ydCBPUyBYIHZlcnNpb25zID4gMTAuOS4KKworLSBJc3N1ZSAjMjExNjY6IFByZXZlbnQgcG9zc2libGUgc2VnZmF1bHRzIGFuZCBvdGhlciByYW5kb20gZmFpbHVyZXMgb2YKKyAgcHl0aG9uIC0tZ2VuZXJhdGUtcG9zaXgtdmFycyBpbiBweWJ1aWxkZGlyLnR4dCBidWlsZCB0YXJnZXQuCisKKy0gSXNzdWUgIzE4MDk2OiBGaXggbGlicmFyeSBvcmRlciByZXR1cm5lZCBieSBweXRob24tY29uZmlnLgorCistIElzc3VlICMxNzIxOTogQWRkIGxpYnJhcnkgYnVpbGQgZGlyIGZvciBQeXRob24gZXh0ZW5zaW9uIGNyb3NzLWJ1aWxkcy4KKworLSBJc3N1ZSAjMjI5MTk6IFdpbmRvd3MgYnVpbGQgdXBkYXRlZCB0byBzdXBwb3J0IFZDIDE0LjAgKFZpc3VhbCBTdHVkaW8gMjAxNSksCisgIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgdGhlIG9mZmljaWFsIHJlbGVhc2UuCisKKy0gSXNzdWUgIzIxMjM2OiBCdWlsZCBfbXNpLnB5ZCB3aXRoIGNhYmluZXQubGliIGluc3RlYWQgb2YgZmNpLmxpYgorCistIElzc3VlICMxNzEyODogVXNlIHByaXZhdGUgdmVyc2lvbiBvZiBPcGVuU1NMIGZvciBPUyBYIDEwLjUrIGluc3RhbGxlci4KKwogQyBBUEkKIC0tLS0tCiAKKy0gSXNzdWUgIzE0MjAzOiBSZW1vdmUgb2Jzb2xldGUgc3VwcG9ydCBmb3Igdmlldz09TlVMTCBpbiBQeUJ1ZmZlcl9GaWxsSW5mbygpLAorICBieXRlYXJyYXlfZ2V0YnVmZmVyKCksIGJ5dGVzaW9idWZfZ2V0YnVmZmVyKCkgYW5kIGFycmF5X2J1ZmZlcl9nZXRidWYoKS4KKyAgQWxsIGZ1bmN0aW9ucyBub3cgcmFpc2UgQnVmZmVyRXJyb3IgaW4gdGhhdCBjYXNlLgorCistIElzc3VlICMyMjQ0NTogUHlCdWZmZXJfSXNDb250aWd1b3VzKCkgbm93IGltcGxlbWVudHMgcHJlY2lzZSBjb250aWd1aXR5CisgIHRlc3RzLCBjb21wYXRpYmxlIHdpdGggTnVtUHkncyBOUFlfUkVMQVhFRF9TVFJJREVTX0NIRUNLSU5HIGNvbXBpbGF0aW9uCisgIGZsYWcuICBQcmV2aW91c2x5IHRoZSBmdW5jdGlvbiByZXBvcnRlZCBmYWxzZSBuZWdhdGl2ZXMgZm9yIGNvcm5lciBjYXNlcy4KKworLSBJc3N1ZSAjMjIwNzk6IFB5VHlwZV9SZWFkeSgpIG5vdyBjaGVja3MgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0eXBlIGhhcworICBubyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmFzZXMuCisKKy0gSXNzdWUgIzIyNDUzOiBSZW1vdmVkIG5vbi1kb2N1bWVudGVkIG1hY3JvIFB5T2JqZWN0X1JFUFIoKS4KKworLSBJc3N1ZSAjMTgzOTU6IFJlbmFtZSBgYF9QeV9jaGFyMndjaGFyKClgYCB0byA6YzpmdW5jOmBQeV9EZWNvZGVMb2NhbGVgLAorICByZW5hbWUgYGBfUHlfd2NoYXIyY2hhcigpYGAgdG8gOmM6ZnVuYzpgUHlfRW5jb2RlTG9jYWxlYCwgYW5kIGRvY3VtZW50CisgIHRoZXNlIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMjEyMzM6IEFkZCBuZXcgQyBmdW5jdGlvbnM6IFB5TWVtX1Jhd0NhbGxvYygpLCBQeU1lbV9DYWxsb2MoKSwKKyAgUHlPYmplY3RfQ2FsbG9jKCksIF9QeU9iamVjdF9HQ19DYWxsb2MoKS4gYnl0ZXMoaW50KSBpcyBub3cgdXNpbmcKKyAgYGBjYWxsb2MoKWBgIGluc3RlYWQgb2YgYGBtYWxsb2MoKWBgIGZvciBsYXJnZSBvYmplY3RzIHdoaWNoIGlzIGZhc3RlciBhbmQKKyAgdXNlIGxlc3MgbWVtb3J5LgorCiAtIElzc3VlICMyMDk0MjogUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KCkgbm8gbG9uZ2VyIHNldHMgX19maWxlX18gdG8KICAgbWF0Y2ggd2hhdCBpbXBvcnRsaWIgZG9lczsgdGhpcyBhZmZlY3RzIF9mcm96ZW5faW1wb3J0bGliIGFzIHdlbGwgYXMgYW55CiAgIG1vZHVsZSBsb2FkZWQgdXNpbmcgaW1wLmluaXRfZnJvemVuKCkuCkBAIC0yMDg3LDkgKzQyNzcsMjkgQEAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMTk1NDg6IFVwZGF0ZSB0aGUgY29kZWNzIG1vZHVsZSBkb2N1bWVudGF0aW9uIHRvIGJldHRlciBjb3ZlciB0aGUKKyAgZGlzdGluY3Rpb24gYmV0d2VlbiB0ZXh0IGVuY29kaW5ncyBhbmQgb3RoZXIgY29kZWNzLCB0b2dldGhlciB3aXRoIG90aGVyCisgIGNsYXJpZmljYXRpb25zLiBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMjM5NDogRG9jL01ha2VmaWxlIG5vdyBzdXBwb3J0cyBgYG1ha2UgdmVudiBQWVRIT049Li4vcHl0aG9uYGAgdG8KKyAgY3JlYXRlIGEgdmVudiBmb3IgZ2VuZXJhdGluZyB0aGUgZG9jdW1lbnRhdGlvbiwgZS5nLiwKKyAgYGBtYWtlIGh0bWwgUFlUSE9OPXZlbnYvYmluL3B5dGhvbjNgYC4KKworLSBJc3N1ZSAjMjE1MTQ6IFRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBqc29uIG1vZHVsZSBub3cgcmVmZXJzIHRvIG5ldyBKU09OIFJGQworICA3MTU5IGluc3RlYWQgb2Ygb2Jzb2xldGVkIFJGQyA0NjI3LgorCistIElzc3VlICMyMTc3NzogVGhlIGJpbmFyeSBzZXF1ZW5jZSBtZXRob2RzIG9uIGJ5dGVzIGFuZCBieXRlYXJyYXkgYXJlIG5vdworICBkb2N1bWVudGVkIGV4cGxpY2l0bHksIHJhdGhlciB0aGFuIGFzc3VtaW5nIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBkZXJpdmUKKyAgdGhlIGV4cGVjdGVkIGJlaGF2aW91ciBmcm9tIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc3RyIG1ldGhvZHMuCisKKy0gSXNzdWUgIzY5MTY6IHVuZG9jdW1lbnQgZGVwcmVjYXRlZCBhc3luY2hhdC5maWZvIGNsYXNzLgorCiAtIElzc3VlICMxNzM4NjogRXhwYW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYGBEb2MvbWFrZS5iYXRgYCBzY3JpcHQgdG8gbWFrZQogICBpdCBtdWNoIG1vcmUgY29tcGFyYWJsZSB0byBgYERvYy9NYWtlZmlsZWBgLgogCistIElzc3VlICMyMTMxMjogVXBkYXRlIHRoZSB0aHJlYWRfZm9vYmFyLmggdGVtcGxhdGUgZmlsZSB0byBpbmNsdWRlIG5ld2VyCisgIHRocmVhZGluZyBBUElzLiAgUGF0Y2ggYnkgSmFjayBNY0NyYWNrZW4uCisKIC0gSXNzdWUgIzIxMDQzOiBSZW1vdmUgdGhlIHJlY29tbWVuZGF0aW9uIGZvciBzcGVjaWZpYyBDQSBvcmdhbml6YXRpb25zIGFuZCB0bwogICBtZW50aW9uIHRoZSBhYmlsaXR5IHRvIGxvYWQgdGhlIE9TIGNlcnRpZmljYXRlcy4KIApAQCAtMjEwNyw2ICs0MzE3LDczIEBACiBUZXN0cwogLS0tLS0KIAorLSBJc3N1ZSAjMTg5ODI6IEFkZCB0ZXN0cyBmb3IgQ0xJIG9mIHRoZSBjYWxlbmRhciBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NTQ4OiBBZGRlZCBzb21lIGFkZGl0aW9uYWwgY2hlY2tzIHRvIHRlc3RfY29kZWNzIHRvIGVuc3VyZSB0aGF0CisgIHN0YXRlbWVudHMgaW4gdGhlIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZW1haW4gYWNjdXJhdGUuIFBhdGNoIGJ5IE1hcnRpbgorICBQYW50ZXIuCisKKy0gSXNzdWUgIzIyODM4OiBBbGwgdGVzdF9yZSB0ZXN0cyBub3cgd29yayB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorCistIElzc3VlICMyMjE3MzogVXBkYXRlIGxpYjJ0bzMgdGVzdHMgdG8gdXNlIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorCistIElzc3VlICMxNjAwMDogQ29udmVydCB0ZXN0X2N1cnNlcyB0byB1c2UgdW5pdHRlc3QuCisKKy0gSXNzdWUgIzIxNDU2OiBTa2lwIHR3byB0ZXN0cyBpbiB0ZXN0X3VybGxpYjJuZXQucHkgaWYgX3NzbCBtb2R1bGUgbm90CisgIHByZXNlbnQuIFBhdGNoIGJ5IFJlbWkgUG9pbnRlbC4KKworLSBJc3N1ZSAjMjA3NDY6IEZpeCB0ZXN0X3BkYiB0byBydW4gaW4gcmVmbGVhayBtb2RlICgtUikuICBQYXRjaCBieSBYYXZpZXIKKyAgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMjIwNjA6IHRlc3RfY3R5cGVzIGhhcyBiZWVuIHNvbWV3aGF0IGNsZWFuZWQgdXAgYW5kIHNpbXBsaWZpZWQ7IGl0CisgIG5vdyB1c2VzIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IHRvIGZpbmQgaXRzIHRlc3RzLgorCistIElzc3VlICMyMjEwNDogcmVncnRlc3QucHkgbm8gbG9uZ2VyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBzdWl0ZSBvZiB0ZXN0cworICBsb2FkZWQgZnJvbSB0ZXN0IG1vZHVsZXMgdGhhdCBkb24ndCBkZWZpbmUgdGVzdF9tYWluKCkuCisKKy0gSXNzdWUgIzIyMTExOiBBc3NvcnRlZCBjbGVhbnVwcyBpbiB0ZXN0X2ltYXBsaWIuICBQYXRjaCBieSBNaWxhbiBPYmVya2lyY2guCisKKy0gSXNzdWUgIzIyMDAyOiBBZGRlZCBgYGxvYWRfcGFja2FnZV90ZXN0c2BgIGZ1bmN0aW9uIHRvIHRlc3Quc3VwcG9ydCBhbmQgdXNlZAorICBpdCB0byBpbXBsZW1lbnQvYXVnbWVudCB0ZXN0IGRpc2NvdmVyeSBpbiB0ZXN0X2FzeW5jaW8sIHRlc3RfZW1haWwsCisgIHRlc3RfaW1wb3J0bGliLCB0ZXN0X2pzb24sIGFuZCB0ZXN0X3Rvb2xzLgorCistIElzc3VlICMyMTk3NjogRml4IHRlc3Rfc3NsIHRvIGFjY2VwdCBMaWJyZVNTTCB2ZXJzaW9uIHN0cmluZ3MuICBUaGFua3MKKyAgdG8gV2lsbGlhbSBPcnIuCisKKy0gSXNzdWUgIzIxOTE4OiBDb252ZXJ0ZWQgdGVzdF90b29scyBmcm9tIGEgbW9kdWxlIHRvIGEgcGFja2FnZSBjb250YWluaW5nCisgIHNlcGFyYXRlIHRlc3QgZmlsZXMgZm9yIGVhY2ggdGVzdGVkIHNjcmlwdC4KKworLSBJc3N1ZSAjOTU1NDogVXNlIG1vZGVybiB1bml0dGVzdCBmZWF0dXJlcyBpbiB0ZXN0X2FyZ3BhcnNlLiBJbml0aWFsIHBhdGNoIGJ5CisgIERlbnZlciBDb25leWJlYXJlIGFuZCBSYWR1IFZvaWNpbGFzLgorCistIElzc3VlICMyMDE1NTogQ2hhbmdlZCBIVFRQIG1ldGhvZCBuYW1lcyBpbiBmYWlsaW5nIHRlc3RzIGluIHRlc3RfaHR0cHNlcnZlcnMKKyAgc28gdGhhdCBwYWNrZXQgZmlsdGVyaW5nIHNvZnR3YXJlIChzcGVjaWZpY2FsbHkgV2luZG93cyBCYXNlIEZpbHRlcmluZyBFbmdpbmUpCisgIGRvZXMgbm90IGludGVyZmVyZSB3aXRoIHRoZSB0cmFuc2FjdGlvbiBzZW1hbnRpY3MgZXhwZWN0ZWQgYnkgdGhlIHRlc3RzLgorCistIElzc3VlICMxOTQ5MzogUmVmYWN0b3JlZCB0aGUgY3R5cGVzIHRlc3QgcGFja2FnZSB0byBza2lwIHRlc3RzIGV4cGxpY2l0bHkKKyAgcmF0aGVyIHRoYW4gc2lsZW50bHkuCisKKy0gSXNzdWUgIzE4NDkyOiBBbGwgcmVzb3VyY2VzIGFyZSBub3cgYWxsb3dlZCB3aGVuIHRlc3RzIGFyZSBub3QgcnVuIGJ5CisgIHJlZ3J0ZXN0LnB5LgorCistIElzc3VlICMyMTYzNDogRml4IHB5c3RvbmUgbWljcm8tYmVuY2htYXJrOiB1c2UgZmxvb3IgZGl2aXNpb24gaW5zdGVhZCBvZiB0cnVlCisgIGRpdmlzaW9uIHRvIGJlbmNobWFyayBpbnRlZ2VycyBpbnN0ZWFkIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFNldCBweXN0b25lCisgIHZlcnNpb24gdG8gMS4yLiBQYXRjaCB3cml0dGVuIGJ5IExlbm5hcnQgUmVnZWJyby4KKworLSBJc3N1ZSAjMjE2MDU6IEFkZGVkIHRlc3RzIGZvciBUa2ludGVyIGltYWdlcy4KKworLSBJc3N1ZSAjMjE0OTM6IEFkZGVkIHRlc3QgZm9yIG50cGF0aC5leHBhbmR1c2VyKCkuICBPcmlnaW5hbCBwYXRjaCBieQorICBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE5OTI1OiBBZGRlZCB0ZXN0cyBmb3IgdGhlIHNwd2QgbW9kdWxlLiBPcmlnaW5hbCBwYXRjaCBieSBWYWpyYXNreSBLb2suCisKKy0gSXNzdWUgIzIxNTIyOiBBZGRlZCBUa2ludGVyIHRlc3RzIGZvciBMaXN0Ym94Lml0ZW1jb25maWd1cmUoKSwKKyAgUGFuZWRXaW5kb3cucGFuZWNvbmZpZ3VyZSgpLCBhbmQgTWVudS5lbnRyeWNvbmZpZ3VyZSgpLgorCistIElzc3VlICMxNzc1NjogRml4IHRlc3RfY29kZSB0ZXN0IHdoZW4gcnVuIGZyb20gdGhlIGluc3RhbGxlZCBsb2NhdGlvbi4KKworLSBJc3N1ZSAjMTc3NTI6IEZpeCBkaXN0dXRpbHMgdGVzdHMgd2hlbiBydW4gZnJvbSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uLgorCiAtIElzc3VlICMxODYwNDogQ29uc29saWRhdGVkIGNoZWNrcyBmb3IgR1VJIGF2YWlsYWJpbGl0eS4gIEFsbCBwbGF0Zm9ybXMgbm93CiAgIGF0IGxlYXN0IGNoZWNrIHdoZXRoZXIgVGsgY2FuIGJlIGluc3RhbnRpYXRlZCB3aGVuIHRoZSBHVUkgcmVzb3VyY2UgaXMKICAgcmVxdWVzdGVkLgpAQCAtMjEyNCw2ICs0NDAxLDggQEAKIAogLSBJc3N1ZSAjMjEwOTc6IE1vdmUgdGVzdF9uYW1lc3BhY2VfcGtncyBpbnRvIHRlc3RfaW1wb3J0bGliLgogCistIElzc3VlICMyMTUwMzogVXNlIHRlc3RfYm90aCgpIGNvbnNpc3RlbnRseSBpbiB0ZXN0X2ltcG9ydGxpYi4KKwogLSBJc3N1ZSAjMjA5Mzk6IEF2b2lkIHZhcmlvdXMgbmV0d29yayB0ZXN0IGZhaWx1cmVzIGR1ZSB0byBuZXcKICAgcmVkaXJlY3Qgb2YgaHR0cDovL3d3dy5weXRob24ub3JnLyB0byBodHRwczovL3d3dy5weXRob24ub3JnOgogICB1c2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbSBpbnN0ZWFkLgpAQCAtMjEzNCw5ICs0NDEzLDQxIEBACiAtIElzc3VlICMyMTA5MzogUHJldmVudCBmYWlsdXJlcyBvZiBjdHlwZXMgdGVzdF9tYWNob2xpYiBvbiBPUyBYIGlmIGEKICAgY29weSBvZiBsaWJ6IGV4aXN0cyBpbiAkSE9NRS9saWIgb3IgL3Vzci9sb2NhbC9saWIuCiAKKy0gSXNzdWUgIzIyNzcwOiBQcmV2ZW50IHNvbWUgVGsgc2VnZmF1bHRzIG9uIE9TIFggd2hlbiBydW5uaW5nIGd1aSB0ZXN0cy4KKworLSBJc3N1ZSAjMjMyMTE6IFdvcmthcm91bmQgdGVzdF9sb2dnaW5nIGZhaWx1cmUgb24gc29tZSBPUyBYIDEwLjYgc3lzdGVtcy4KKworLSBJc3N1ZSAjMjMzNDU6IFByZXZlbnQgdGVzdF9zc2wgZmFpbHVyZXMgd2l0aCBsYXJnZSBPcGVuU1NMIHBhdGNoIGxldmVsCisgIHZhbHVlcyAobGlrZSAwLjkuOHpjKS4KKwogVG9vbHMvRGVtb3MKIC0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzIyMzE0OiBweWRvYyBub3cgd29ya3Mgd2hlbiB0aGUgTElORVMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LgorCistIElzc3VlICMyMjYxNTogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwb3J0cyB0aGUgInR5cGUiIGFyZ3VtZW50IGZvciB0aGUKKyAgaW50IGNvbnZlcnRlci4gIFRoaXMgcGVybWl0cyB1c2luZyB0aGUgaW50IGNvbnZlcnRlciB3aXRoIGVudW1zIGFuZAorICB0eXBlZGVmcy4KKworLSBJc3N1ZSAjMjAwNzY6IFRoZSBtYWtlbG9jYWxlYWxpYXMucHkgc2NyaXB0IG5vIGxvbmdlciBpZ25vcmVzIFVURi04IG1hcHBpbmcuCisKKy0gSXNzdWUgIzIwMDc5OiBUaGUgbWFrZWxvY2FsZWFsaWFzLnB5IHNjcmlwdCBub3cgY2FuIHBhcnNlIHRoZSBTVVBQT1JURUQgZmlsZQorICBmcm9tIGdsaWJjIHNvdXJjZXMgYW5kIHN1cHBvcnRzIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBzb3VyY2UgcGF0aHMuCisKKy0gSXNzdWUgIzIyMjAxOiBDb21tYW5kLWxpbmUgaW50ZXJmYWNlIG9mIHRoZSB6aXBmaWxlIG1vZHVsZSBub3cgY29ycmVjdGx5CisgIGV4dHJhY3RzIFpJUCBmaWxlcyB3aXRoIGRpcmVjdG9yeSBlbnRyaWVzLiAgUGF0Y2ggYnkgUnlhbiBXaWxzb24uCisKKy0gSXNzdWUgIzIyMTIwOiBGb3IgZnVuY3Rpb25zIHVzaW5nIGFuIHVuc2lnbmVkIGludGVnZXIgcmV0dXJuIGNvbnZlcnRlciwKKyAgQXJndW1lbnQgQ2xpbmljIG5vdyBnZW5lcmF0ZXMgYSBjYXN0IHRvIHRoYXQgdHlwZSBmb3IgdGhlIGNvbXBhcmlzb24KKyAgdG8gLTEgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLiAgKFRoaXMgc3VwcmVzc2VzIGEgY29tcGlsYXRpb24gd2FybmluZy4pCisKKy0gSXNzdWUgIzE4OTc0OiBUb29scy9zY3JpcHRzL2RpZmYucHkgbm93IHVzZXMgYXJncGFyc2UgaW5zdGVhZCBvZiBvcHRwYXJzZS4KKworLSBJc3N1ZSAjMjE5MDY6IE1ha2UgVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkgd29yayBpbiBQeXRob24gMy4KKyAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCistIElzc3VlICMyMTYyOTogRml4IEFyZ3VtZW50IENsaW5pYydzICItLWNvbnZlcnRlcnMiIGZlYXR1cmUuCisKIC0gQWRkIHN1cHBvcnQgZm9yIGBgeWllbGQgZnJvbWBgIHRvIDJ0bzMuCiAKIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBQRVAgNDY1IG1hdHJpeCBtdWx0aXBsaWNhdGlvbiBvcGVyYXRvciB0byAydG8zLgpAQCAtMjE0OSw2ICs0NDYwLDMyIEBACiAtIElzc3VlICMyMDUzNTogUFlUSE9OV0FSTklORyBubyBsb25nZXIgYWZmZWN0cyB0aGUgcnVuX3Rlc3RzLnB5IHNjcmlwdC4KICAgUGF0Y2ggYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMuCiAKK1dpbmRvd3MKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjMyNjA6IFVwZGF0ZSBXaW5kb3dzIGluc3RhbGxlcgorCistIFRoZSBidW5kbGVkIHZlcnNpb24gb2YgVGNsL1RrIGhhcyBiZWVuIHVwZGF0ZWQgdG8gOC42LjMuICBUaGUgbW9zdCB2aXNpYmxlCisgIHJlc3VsdCBvZiB0aGlzIGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgbmV3IG5hdGl2ZSBmaWxlIGRpYWxvZ3Mgd2hlbgorICBydW5uaW5nIG9uIFdpbmRvd3MgVmlzdGEgb3IgbmV3ZXIuICBTZWUgVGNsL1RrJ3MgVElQIDQzMiBmb3IgbW9yZQorICBpbmZvcm1hdGlvbi4gIEFsc28sIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsgaW5jbHVkZXMgc3VwcG9ydCBmb3IgV2luZG93cyAxMC4KKworLSBJc3N1ZSAjMTc4OTY6IFRoZSBXaW5kb3dzIGJ1aWxkIHNjcmlwdHMgbm93IGV4cGVjdCBleHRlcm5hbCBsaWJyYXJ5IHNvdXJjZXMKKyAgdG8gYmUgaW4gYGBQQ2J1aWxkXC4uXGV4dGVybmFsc2BgIHJhdGhlciB0aGFuIGBgUENidWlsZFwuLlwuLmBgLgorCistIElzc3VlICMxNzcxNzogVGhlIFdpbmRvd3MgYnVpbGQgc2NyaXB0cyBub3cgdXNlIGEgY29weSBvZiBOQVNNIHB1bGxlZCBmcm9tCisgIHN2bi5weXRob24ub3JnIHRvIGJ1aWxkIE9wZW5TU0wuCisKKy0gSXNzdWUgIzIxOTA3OiBJbXByb3ZlZCB0aGUgYmF0Y2ggc2NyaXB0cyBwcm92aWRlZCBmb3IgYnVpbGRpbmcgUHl0aG9uLgorCistIElzc3VlICMyMjY0NDogVGhlIGJ1bmRsZWQgdmVyc2lvbiBvZiBPcGVuU1NMIGhhcyBiZWVuIHVwZGF0ZWQgdG8gMS4wLjFqLgorCistIElzc3VlICMxMDc0NzogVXNlIHZlcnNpb25lZCBsYWJlbHMgaW4gdGhlIFdpbmRvd3Mgc3RhcnQgbWVudS4KKyAgUGF0Y2ggYnkgT2xpdmUgS2lsYnVybi4KKworLSBJc3N1ZSAjMjI5ODA6IC5weWQgZmlsZXMgd2l0aCBhIHZlcnNpb24gYW5kIHBsYXRmb3JtIHRhZyAoZm9yIGV4YW1wbGUsCisgICIuY3AzNS13aW4zMi5weWQiKSB3aWxsIG5vdyBiZSBsb2FkZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZSB3aXRob3V0IHRhZ3MuCisKIAogV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjA/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMzNDMsOCArNTY4MCw4IEBACiAtIElzc3VlICMxOTQ0ODogQWRkIHByaXZhdGUgQVBJIHRvIFNTTCBtb2R1bGUgdG8gbG9va3VwIEFTTi4xIG9iamVjdHMgYnkgT0lELAogICBOSUQsIHNob3J0IG5hbWUgYW5kIGxvbmcgbmFtZS4KIAotLSBJc3N1ZSAjMTkyODI6IGRibS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAoSW5pdGFsCi0gIHBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKKy0gSXNzdWUgIzE5MjgyOiBkYm0ub3BlbiBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4KKyAgKEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKQogCiAtIElzc3VlICM4MzExOiBBZGRlZCBzdXBwb3J0IGZvciB3cml0aW5nIGFueSBieXRlcy1saWtlIG9iamVjdHMgaW4gdGhlIGFpZmMsCiAgIHN1bmF1LCBhbmQgd2F2ZSBtb2R1bGVzLgpAQCAtMzQzOCw3ICs1Nzc1LDcgQEAKIC0gSXNzdWUgIzE5MjI3OiBSZW1vdmUgcHRocmVhZF9hdGZvcmsoKSBoYW5kbGVyLiBUaGUgaGFuZGxlciB3YXMgYWRkZWQgdG8KICAgc29sdmUgIzE4NzQ3IGJ1dCBoYXMgY2F1c2VkIGlzc3Vlcy4KIAotLSBJc3N1ZSAjMTk0MjA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBtb2R1bGUgaW5pdGFsaXphdGlvbiBjb2RlIG9mCistIElzc3VlICMxOTQyMDogRml4IHJlZmVyZW5jZSBsZWFrIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiBjb2RlIG9mCiAgIF9oYXNob3BlbnNzbC5jCiAKIC0gSXNzdWUgIzE5MzI5OiBPcHRpbWl6ZWQgY29tcGlsaW5nIGNoYXJzZXRzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCkBAIC00NDUyLDcgKzY3ODksNyBAQAogLSBJc3N1ZSAjMTcxNzM6IFJlbW92ZSB1c2VzIG9mIGxvY2FsZS1kZXBlbmRlbnQgQyBmdW5jdGlvbnMgKGlzYWxwaGEoKSBldGMuKQogICBpbiB0aGUgaW50ZXJwcmV0ZXIuCiAKLS0gSXNzdWUgIzE3MTM3OiBXaGVuIGFuIFVuaWNvZGUgc3RyaW5nIGlzIHJlc2l6ZWQsIHRoZSBpbnRlcm5hbCB3aWRlIGNoYXJhY3RlcgorLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYSBVbmljb2RlIHN0cmluZyBpcyByZXNpemVkLCB0aGUgaW50ZXJuYWwgd2lkZSBjaGFyYWN0ZXIKICAgc3RyaW5nICh3c3RyKSBmb3JtYXQgaXMgbm93IGNsZWFyZWQuCiAKIC0gSXNzdWUgIzE3MDQzOiBUaGUgdW5pY29kZS1pbnRlcm5hbCBkZWNvZGVyIG5vIGxvbmdlciByZWFkIHBhc3QgdGhlIGVuZCBvZgpAQCAtNDk3OSw3ICs3MzE2LDcgQEAKICAgVGhvbWFzIEJhcmxvdy4KIAogLSBJc3N1ZSAjMTczNTg6IE1vZHVsZXMgbG9hZGVkIGJ5IGltcC5sb2FkX3NvdXJjZSgpIGFuZCBsb2FkX2NvbXBpbGVkKCkgKGFuZCBieQotICBleHRlbnRpb24gbG9hZF9tb2R1bGUoKSkgbm93IGhhdmUgYSBiZXR0ZXIgY2hhbmNlIG9mIHdvcmtpbmcgd2hlbiByZWxvYWRlZC4KKyAgZXh0ZW5zaW9uIGxvYWRfbW9kdWxlKCkpIG5vdyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiB3b3JraW5nIHdoZW4gcmVsb2FkZWQuCiAKIC0gSXNzdWUgIzE3ODA0OiBOZXcgZnVuY3Rpb24gYGBzdHJ1Y3QuaXRlcl91bnBhY2tgYCBhbGxvd3MgZm9yIHN0cmVhbWluZwogICBzdHJ1Y3QgdW5wYWNraW5nLgpAQCAtNTA5Miw4ICs3NDI5LDggQEAKICAgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiByZW1vdmVkLiAgUGF0Y2ggYnkgUmFtIFJhY2h1bS4KIAogLSBJc3N1ZSAjMTgwODA6IFdoZW4gYnVpbGRpbmcgYSBDIGV4dGVuc2lvbiBtb2R1bGUgb24gT1MgWCwgaWYgdGhlIGNvbXBpbGVyCi0gIGlzIG92ZXJyaWRlbiB3aXRoIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdXNlIHRoZSBuZXcgY29tcGlsZXIgYXMKLSAgdGhlIGRlZmF1bHQgZm9yIGxpbmtpbmcgaWYgTERTSEFSRUQgaXMgbm90IGFsc28gb3ZlcnJpZGVuLiAgVGhpcyByZXN0b3JlcworICBpcyBvdmVycmlkZGVuIHdpdGggdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlLCB1c2UgdGhlIG5ldyBjb21waWxlciBhcworICB0aGUgZGVmYXVsdCBmb3IgbGlua2luZyBpZiBMRFNIQVJFRCBpcyBub3QgYWxzbyBvdmVycmlkZGVuLiAgVGhpcyByZXN0b3JlcwogICBEaXN0dXRpbHMgYmVoYXZpb3IgaW50cm9kdWNlZCBpbiAzLjIuMyBhbmQgaW5hZHZlcnRlbnRseSBkcm9wcGVkIGluIDMuMy4wLgogCiAtIElzc3VlICMxODExMzogRml4ZWQgYSByZWZjb3VudCBsZWFrIGluIHRoZSBjdXJzZXMucGFuZWwgbW9kdWxlJ3MKQEAgLTUzMDAsNyArNzYzNyw3IEBACiAgIHN5bWxpbmtzIG9uIFBPU0lYIHBsYXRmb3Jtcy4KIAogLSBJc3N1ZSAjMTM3NzM6IHNxbGl0ZTMuY29ubmVjdCgpIGdldHMgYSBuZXcgYHVyaWAgcGFyYW1ldGVyIHRvIHBhc3MgdGhlCi0gIGZpbGVuYW1lIGFzIGEgVVJJLCBhbGxvd2luZyB0byBwYXNzIGN1c3RvbSBvcHRpb25zLgorICBmaWxlbmFtZSBhcyBhIFVSSSwgYWxsb3dpbmcgY3VzdG9tIG9wdGlvbnMgdG8gYmUgcGFzc2VkLgogCiAtIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKICAgZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3Agd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCkBAIC01MzM5LDcgKzc2NzYsNyBAQAogICBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgbm90IFVURi04IG9yIFVTLUFTQ0lJLiAgSXQgYWxzbyBub3cgYWNjZXB0cyBieXRlcwogICBhbmQgc3RyaW5ncyBsYXJnZXIgdGhhbiAyIEdpQi4KIAotLSBJc3N1ZSAjNjA4MzogRml4IG11bHRpcGxlIHNlZ21lbnRhdGlvbiBmYXVsdHMgb2NjdXJlZCB3aGVuIFB5QXJnX1BhcnNlVHVwbGUKKy0gSXNzdWUgIzYwODM6IEZpeCBtdWx0aXBsZSBzZWdtZW50YXRpb24gZmF1bHRzIG9jY3VycmVkIHdoZW4gUHlBcmdfUGFyc2VUdXBsZQogICBwYXJzZXMgbmVzdGVkIG11dGF0aW5nIHNlcXVlbmNlLgogCiAtIElzc3VlICM1Mjg5OiBGaXggY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5IG9uIFNvbGFyaXMuCkBAIC01NTYxLDcgKzc4OTgsNyBAQAogLSBJc3N1ZSAjNzcxOTogTWFrZSBkaXN0dXRpbHMgaWdub3JlIGBgLm5mcypgYCBmaWxlcyBpbnN0ZWFkIG9mIGNob2tpbmcgbGF0ZXIKICAgb24uICBJbml0aWFsIHBhdGNoIGJ5IFNpbGVudEdob3N0IGFuZCBKZWZmIFJhbW5hbmkuCiAKLS0gSXNzdWUgIzEzMTIwOiBBbGxvdyB0byBjYWxsIHBkYi5zZXRfdHJhY2UoKSBmcm9tIHRocmVhZC4KKy0gSXNzdWUgIzEzMTIwOiBBbGxvdyBjYWxsaW5nIHBkYi5zZXRfdHJhY2UoKSBmcm9tIHRocmVhZC4KICAgUGF0Y2ggYnkgSWx5YSBTYW5kbGVyLgogCiAtIElzc3VlICMxNjU4NTogTWFrZSBDSksgZW5jb2RlcnMgc3VwcG9ydCBlcnJvciBoYW5kbGVycyB0aGF0IHJldHVybiBieXRlcyBwZXIKQEAgLTU2NjIsNyArNzk5OSw3IEBACiAtIElzc3VlICMxNjI4NDogUHJldmVudCBrZWVwaW5nIHVubmVjZXNzYXJ5IHJlZmVyZW5jZXMgdG8gd29ya2VyIGZ1bmN0aW9ucwogICBpbiBjb25jdXJyZW50LmZ1dHVyZXMgVGhyZWFkUG9vbEV4ZWN1dG9yLgogCi0tIElzc3VlICMxNjIzMDogRml4IGEgY3Jhc2ggaW4gc2VsZWN0LnNlbGVjdCgpIHdoZW4gb25lIHRoZSBsaXN0cyBjaGFuZ2VzCistIElzc3VlICMxNjIzMDogRml4IGEgY3Jhc2ggaW4gc2VsZWN0LnNlbGVjdCgpIHdoZW4gb25lIG9mIHRoZSBsaXN0cyBjaGFuZ2VzCiAgIHNpemUgd2hpbGUgaXRlcmF0ZWQgb24uICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgogCiAtIElzc3VlICMxNjIyODogRml4IGEgY3Jhc2ggaW4gdGhlIGpzb24gbW9kdWxlIHdoZXJlIGEgbGlzdCBjaGFuZ2VzIHNpemUKQEAgLTU2OTEsNyArODAyOCw3IEBACiAKIC0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCiAKLS0gSXNzdWUgIzE2MzAxOiBGaXggdGhlIGxvY2FsaG9zdCB2ZXJpZmljYXRpb24gaW4gdXJsbGliL3JlcXVlc3QucHkgZm9yIGZpbGU6Ly8KKy0gSXNzdWUgIzE2MzAxOiBGaXggdGhlIGxvY2FsaG9zdCB2ZXJpZmljYXRpb24gaW4gdXJsbGliL3JlcXVlc3QucHkgZm9yIGBgZmlsZTovL2BgCiAgIHVybHMuCiAKIC0gSXNzdWUgIzE2MjUwOiBGaXggdGhlIGludm9jYXRpb25zIG9mIFVSTEVycm9yIHdoaWNoIGhhZCBtaXNwbGFjZWQgZmlsZW5hbWUKQEAgLTU3MjIsNyArODA1OSw3IEBACiAtIElzc3VlICMxNjE3NjogUHJvcGVybHkgaWRlbnRpZnkgV2luZG93cyA4IHZpYSBwbGF0Zm9ybS5wbGF0Zm9ybSgpCiAKIC0gSXNzdWUgIzE2MDg4OiBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyJ3Mgc2VuZF9lcnJvciBtZXRob2QgaW5jbHVkZXMgYQotICBDb250ZW50LUxlbmd0aCBoZWFkZXIgaW4gaXQncyByZXNwb25zZSBub3cuIFBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LgorICBDb250ZW50LUxlbmd0aCBoZWFkZXIgaW4gaXRzIHJlc3BvbnNlIG5vdy4gUGF0Y2ggYnkgQW50b2luZSBQaXRyb3UuCiAKIC0gSXNzdWUgIzE2MTE0OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIHByb3ZpZGVzIGEgbWlzbGVhZGluZyBlcnJvcgogICBtZXNzYWdlIHN0YXRpbmcgdGhhdCBhcmdzWzBdIGRpZCBub3QgZXhpc3Qgd2hlbiBlaXRoZXIgdGhlIGN3ZCBvciBleGVjdXRhYmxlCkBAIC02MjY5LDYgKzg2MDYsMTAgQEAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMjMwMDY6IEltcHJvdmUgdGhlIGRvY3VtZW50YXRpb24gYW5kIGluZGV4aW5nIG9mIGRpY3QuX19taXNzaW5nX18uCisgIEFkZCBhbiBlbnRyeSBpbiB0aGUgbGFuZ3VhZ2UgZGF0YW1vZGVsIHNwZWNpYWwgbWV0aG9kcyBzZWN0aW9uLgorICBSZXZpc2UgYW5kIGluZGV4IGl0cyBkaXNjdXNzaW9uIGluIHRoZSBzdGR0eXBlcyBtYXBwaW5nL2RpY3Qgc2VjdGlvbi4KKwogLSBJc3N1ZSAjMTc3MDE6IEltcHJvdmluZyBzdHJmdGltZSBkb2N1bWVudGF0aW9uLgogCiAtIElzc3VlICMxODQ0MDogQ2xhcmlmeSB0aGF0IGBoYXNoKClgIGNhbiB0cnVuY2F0ZSB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbgpAQCAtNjQzMSw0MTQxICs4NzcyLDQgQEAKIC0gSXNzdWUgIzE4NTY5OiBUaGUgaW5zdGFsbGVyIG5vdyBhZGRzIC5weSB0byB0aGUgUEFUSEVYVCB2YXJpYWJsZSB3aGVuIGV4dGVuc2lvbnMKICAgYXJlIHJlZ2lzdGVyZWQuIFBhdGNoIGJ5IFBhdWwgTW9vcmUuCiAKLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjA/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjktU2VwLTIwMTIqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNjA0NjogRml4IGxvYWRpbmcgc291cmNlbGVzcyBsZWdhY3kgLnB5byBmaWxlcy4KLQotLSBJc3N1ZSAjMTYwNjA6IEZpeCByZWZjb3VudGluZyBidWcgd2hlbiBgX190cnVuY19fKClgIHJldHVybnMgYW4gb2JqZWN0IHdob3NlCi0gIGBfX2ludF9fKClgIGdpdmVzIGEgbm9uLWludGVnZXIuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi1FeHRlbnNpb24gTW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTYwMTI6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gcHlleHBhdC4gVGhlIHBhcnNlcidzIGBVc2VGb3JlaWduRFREKClgCi0gIG1ldGhvZCBkb2Vzbid0IHJlcXVpcmUgYW4gYXJndW1lbnQgYWdhaW4uCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDIzLVNlcC0yMDEyKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTU5MDA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBgUHlVbmljb2RlX1RyYW5zbGF0ZUNoYXJtYXAoKWAuCi0KLS0gSXNzdWUgIzE1OTI2OiBGaXggY3Jhc2ggYWZ0ZXIgbXVsdGlwbGUgcmVpbml0aWFsaXphdGlvbnMgb2YgdGhlIGludGVycHJldGVyLgotCi0tIElzc3VlICMxNTg5NTogRml4IEZJTEUgcG9pbnRlciBsZWFrIGluIG9uZSBlcnJvciBicmFuY2ggb2YKLSAgYFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKClgIHdoZW4gZmlsZW5hbWUgcG9pbnRzIHRvIGEgcHljL3B5byBmaWxlLCBjbG9zZWl0IGlzCi0gIGZhbHNlIGFuIGFuZCBzZXRfbWFpbl9sb2FkZXIoKSBmYWlscy4KLQotLSBGaXhlcyBmb3IgYSBmZXcgY3Jhc2ggYW5kIG1lbW9yeSBsZWFrIHJlZ3Jlc3Npb25zIGZvdW5kIGJ5IENvdmVyaXR5LgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzE1ODgyOiBDaGFuZ2UgYF9kZWNpbWFsYCB0byBhY2NlcHQgYW55IGNvZWZmaWNpZW50IHR1cGxlIHdoZW4KLSAgY29uc3RydWN0aW5nIGluZmluaXRpZXMuIFRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAotICBkZWNpbWFsLnB5OiBJbmZpbml0eSBjb2VmZmljaWVudHMgYXJlIHVuZGVmaW5lZCBpbiBfZGVjaW1hbCAoaW4gYWNjb3JkYW5jZQotICB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uKS4KLQotLSBJc3N1ZSAjMTU5MjU6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYGVtYWlsLnV0aWxgIHdoZXJlIHRoZSBgcGFyc2VkYXRlKClgIGFuZAotICBgcGFyc2VkYXRlX3R6KClgIGZ1bmN0aW9ucyBkaWQgbm90IHJldHVybiBOb25lIGFueW1vcmUgd2hlbiB0aGUgYXJndW1lbnQgY291bGQKLSAgbm90IGJlIHBhcnNlZC4KLQotRXh0ZW5zaW9uIE1vZHVsZXMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE1OTczOiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBjb21wYXJpbmcgZGF0ZXRpbWUgdGltZXpvbmUKLSAgb2JqZWN0cy4KLQotLSBJc3N1ZSAjMTU5Nzc6IEZpeCBtZW1vcnkgbGVhayBpbiBNb2R1bGVzL19zc2wuYyB3aGVuIHRoZSBmdW5jdGlvbgotICBfc2V0X25wbl9wcm90b2NvbHMoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRoYW5rcyB0byBEYW5pZWwgU29tbWVybWFubi4KLQotLSBJc3N1ZSAjMTU5Njk6IGBmYXVsdGhhbmRsZXJgIG1vZHVsZTogcmVuYW1lIGR1bXBfdHJhY2ViYWNrc19sYXRlcigpIHRvCi0gIGR1bXBfdHJhY2ViYWNrX2xhdGVyKCkgYW5kIGNhbmNlbF9kdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bwotICBjYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKS4KLQotLSBfZGVjaW1hbCBtb2R1bGU6IHVzZSBvbmx5IEMgODkgc3R5bGUgY29tbWVudHMuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA5LVNlcC0yMDEyKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTM5OTI6IFRoZSB0cmFzaGNhbiBtZWNoYW5pc20gaXMgbm93IHRocmVhZC1zYWZlLiAgVGhpcyBlbGltaW5hdGVzCi0gIHNwb3JhZGljIGNyYXNoZXMgaW4gbXVsdGktdGhyZWFkIHByb2dyYW1zIHdoZW4gc2V2ZXJhbCBsb25nIGRlYWxsb2NhdG9yIGNoYWlucwotICByYW4gY29uY3VycmVudGx5IGFuZCBpbnZvbHZlZCBzdWJjbGFzc2VzIG9mIGJ1aWx0LWluIGNvbnRhaW5lciB0eXBlcy4KLQotLSBJc3N1ZSAjMTU3ODQ6IE1vZGlmeSBgT1NFcnJvcmAuX19zdHJfXygpIHRvIGJldHRlciBkaXN0aW5ndWlzaCBiZXR3ZWVuIGVycm5vCi0gIGVycm9yIG51bWJlcnMgYW5kIFdpbmRvd3MgZXJyb3IgbnVtYmVycy4KLQotLSBJc3N1ZSAjMTU3ODE6IEZpeCB0d28gc21hbGwgcmFjZSBjb25kaXRpb25zIGluIGltcG9ydCdzIG1vZHVsZSBsb2NraW5nLgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3MTU4OiBBZGQgJ3N5bWJvbHMnIHRvIGhlbHAoKSB3ZWxjb21lIG1lc3NhZ2U7IGNsYXJpZnkKLSAgJ21vZHVsZXMgc3BhbScgbWVzc2FnZXMuCi0KLS0gSXNzdWUgIzE1ODQ3OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlLCB3aGljaCBkaWQgbm90IGFjY2VwdCB0dXBsZXMgYXMKLSAgYXJndW1lbnQgbGlzdHMgYW55bW9yZS4KLQotLSBJc3N1ZSAjMTU4Mjg6IFJlc3RvcmUgc3VwcG9ydCBmb3IgQyBleHRlbnNpb25zIGluIGBpbXAubG9hZF9tb2R1bGUoKWAuCi0KLS0gSXNzdWUgIzE1MzQwOiBGaXggaW1wb3J0aW5nIHRoZSByYW5kb20gbW9kdWxlIHdoZW4gYGAvZGV2L3VyYW5kb21gYCBjYW5ub3QgYmUKLSAgb3BlbmVkLiAgVGhpcyB3YXMgYSByZWdyZXNzaW9uIGNhdXNlZCBieSB0aGUgaGFzaCByYW5kb21pemF0aW9uIHBhdGNoLgotCi0tIElzc3VlICMxMDY1MDogRGVwcmVjYXRlIHRoZSB3YXRjaGV4cCBwYXJhbWV0ZXIgb2YgdGhlIGBEZWNpbWFsLnF1YW50aXplKClgCi0gIG1ldGhvZC4KLQotLSBJc3N1ZSAjMTU3ODU6IE1vZGlmeSBgd2luZG93LmdldF93Y2goKWAgQVBJIG9mIHRoZSBjdXJzZXMgbW9kdWxlOiByZXR1cm4gYQotICBjaGFyYWN0ZXIgZm9yIG1vc3Qga2V5cywgYW5kIGFuIGludGVnZXIgZm9yIHNwZWNpYWwga2V5cywgaW5zdGVhZCBvZiBhbHdheXMKLSAgcmV0dXJuaW5nIGFuIGludGVnZXIuIFNvIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBzcGVjaWFsIGtleXMgbGlrZQotICBrZXlwYWQga2V5cy4KLQotLSBJc3N1ZSAjMTQyMjM6IEZpeCBgd2luZG93LmFkZGNoKClgIG9mIHRoZSBjdXJzZXMgbW9kdWxlIGZvciBzcGVjaWFsIGNoYXJhY3RlcnMKLSAgbGlrZSBjdXJzZXMuQUNTX0hMSU5FOiB0aGUgUHl0aG9uIGZ1bmN0aW9uIGFkZGNoKGludCkgYW5kIGFkZGNoKGJ5dGVzKSBpcyBub3cKLSAgY2FsbGluZyB0aGUgQyBmdW5jdGlvbiB3YWRkY2goKS9tdndhZGRjaCgpIChhcyBpdCB3YXMgZG9uZSBpbiBQeXRob24gMy4yKSwKLSAgaW5zdGVhZCBvZiB3YWRkX3djaCgpL212d2FkZF93Y2goKS4gVGhlIFB5dGhvbiBmdW5jdGlvbiBhZGRjaChzdHIpIGlzIHN0aWxsCi0gIGNhbGxpbmcgdGhlIEMgZnVuY3Rpb24gd2FkZF93Y2goKS9tdndhZGRfd2NoKCkgaWYgdGhlIFB5dGhvbiBjdXJzZXMgaXMgbGlua2VkCi0gIHRvIGxpYm5jdXJzZXN3LgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTU4MjI6IFJlYWxseSBlbnN1cmUgMnRvMyBncmFtbWFyIHBpY2tsZXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZAotICAocmVwbGFjZXMgZml4ZXMgZm9yIElzc3VlICMxNTY0NSkuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTU4MTQ6IFRoZSBtZW1vcnl2aWV3IGVuaGFuY2VtZW50cyBpbiAzLjMuMCBhY2NpZGVudGFsbHkgcGVybWl0dGVkIHRoZQotICBoYXNoaW5nIG9mIG11bHRpLWRpbWVuc2lvbmFsIG1lbW9ydmlld3MgYW5kIG1lbW9yeXZpZXdzIHdpdGggbXVsdGktYnl0ZSBpdGVtCi0gIGZvcm1hdHMuIFRoZSBpbnRlbmRlZCByZXN0cmljdGlvbnMgaGF2ZSBub3cgYmVlbiBkb2N1bWVudGVkIC0gdGhleSB3aWxsIGJlCi0gIGNvcnJlY3RseSBlbmZvcmNlZCBpbiAzLjMuMS4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBSZWxlYXNlIENhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjUtQXVnLTIwMTIqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNTU3MzogbWVtb3J5dmlldyBjb21wYXJpc29ucyBhcmUgbm93IHBlcmZvcm1lZCBieSB2YWx1ZSB3aXRoIGZ1bGwKLSAgc3VwcG9ydCBmb3IgYW55IHZhbGlkIHN0cnVjdCBtb2R1bGUgZm9ybWF0IGRlZmluaXRpb24uCi0KLS0gSXNzdWUgIzE1MzE2OiBXaGVuIGFuIGl0ZW0gaW4gdGhlIGZyb21saXN0IGZvciBgX19pbXBvcnRfXygpYCBkb2Vzbid0IGV4aXN0LAotICBkb24ndCByYWlzZSBhbiBlcnJvciwgYnV0IGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYXMgcGFydCBvZiBhbiBpbXBvcnQgZG8KLSAgbGV0IHRoYXQgcHJvcGFnYXRlLgotCi0tIElzc3VlICMxNTc3ODogRW5zdXJlIHRoYXQgYGBzdHIoSW1wb3J0RXJyb3IobXNnKSlgYCByZXR1cm5zIGEgc3RyIGV2ZW4gd2hlbgotICBtc2cgaXNuJ3QgYSBzdHIuCi0KLS0gSXNzdWUgIzIwNTE6IFNvdXJjZSBmaWxlIHBlcm1pc3Npb24gYml0cyBhcmUgb25jZSBhZ2FpbiBjb3JyZWN0bHkgY29waWVkIHRvCi0gIHRoZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZS4gKFRoZSBtaWdyYXRpb24gdG8gaW1wb3J0bGliIHJlaW50cm9kdWNlZCB0aGlzCi0gIHByb2JsZW0gYmVjYXVzZSB0aGVzZSB3YXMgbm8gcmVncmVzc2lvbiB0ZXN0LiBBIHRlc3QgaGFzIGJlZW4gYWRkZWQgYXMgcGFydCBvZgotICB0aGlzIHBhdGNoKQotCi0tIElzc3VlICMxNTc2MTogRml4IGNyYXNoIHdoZW4gYGBQWVRIT05FWEVDVVRBQkxFYGAgaXMgc2V0IG9uIE1hYyBPUyBYLgotCi0tIElzc3VlICMxNTcyNjogRml4IGluY29ycmVjdCBib3VuZHMgY2hlY2tpbmcgaW4gUHlTdGF0ZV9GaW5kTW9kdWxlLiAgUGF0Y2ggYnkKLSAgUm9iaW4gU2NocmVpYmVyLgotCi0tIElzc3VlICMxNTYwNDogVXBkYXRlIHVzZXMgb2YgYFB5T2JqZWN0X0lzVHJ1ZSgpYCB0byBjaGVjayBmb3IgYW5kIGhhbmRsZQotICBlcnJvcnMgY29ycmVjdGx5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTQ4NDY6IGBpbXBvcnRsaWIuRmlsZUZpbmRlcmAgbm93IGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIGRpcmVjdG9yeQotICBiZWluZyBzZWFyY2hlZCBpcyByZW1vdmVkIGFmdGVyIGEgcHJldmlvdXMgaW1wb3J0IGF0dGVtcHQuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTMzNzA6IEVuc3VyZSB0aGF0IGN0eXBlcyB3b3JrcyBvbiBNYWMgT1MgWCB3aGVuIFB5dGhvbiBpcyBjb21waWxlZAotICB1c2luZyB0aGUgY2xhbmcgY29tcGlsZXIuCi0KLS0gSXNzdWUgIzEzMDcyOiBUaGUgYXJyYXkgbW9kdWxlJ3MgJ3UnIGZvcm1hdCBjb2RlIGlzIG5vdyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCi0gIHJlbW92ZWQgaW4gUHl0aG9uIDQuMC4KLQotLSBJc3N1ZSAjMTU1NDQ6IEZpeCBEZWNpbWFsLl9fZmxvYXRfXyB0byB3b3JrIHdpdGggcGF5bG9hZC1jYXJyeWluZyBOYU5zLgotCi0tIElzc3VlICMxNTc3NjogQWxsb3cgcHl2ZW52IHRvIHdvcmsgaW4gZXhpc3RpbmcgZGlyZWN0b3J5IHdpdGggLS1jbGVhbi4KLQotLSBJc3N1ZSAjMTUyNDk6IGVtYWlsJ3MgQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBtYW5nbGVzIEZyb20gbGluZXMgKHdoZW4KLSAgcmVxdWVzdGVkKSBldmVuIGlmIHRoZSBib2R5IGNvbnRhaW5zIHVuZGVjb2RhYmxlIGJ5dGVzLgotCi0tIElzc3VlICMxNTc3NzogRml4IGEgcmVmbGVhayBpbiBfcG9zaXhzdWJwcm9jZXNzLgotCi0tIElzc3VlICMjNjY1MTk0OiBVcGRhdGUgYGVtYWlsLnV0aWxzLmxvY2FsdGltZWAgdG8gdXNlIGRhdGV0aW1lLmFzdGltZXpvbmUgYW5kCi0gIGNvcnJlY3RseSBoYW5kbGUgaGlzdG9yaWMgY2hhbmdlcyBpbiBVVEMgb2Zmc2V0cy4KLQotLSBJc3N1ZSAjMTUxOTk6IEZpeCBKYXZhU2NyaXB0J3MgZGVmYXVsdCBNSU1FIHR5cGUgdG8gYXBwbGljYXRpb24vamF2YXNjcmlwdC4KLSAgUGF0Y2ggYnkgQm9odXNsYXYgS2FicmRhLgotCi0tIElzc3VlICMxMjY0MzogYGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlYCBub3cgcmVzcGVjdHMgYHN5cy5leGNlcHRob29rYCB3aGVuCi0gIGRpc3BsYXlpbmcgZXhjZXB0aW9ucy4gIFBhdGNoIGJ5IEFhcm9uIElsZXMuCi0KLS0gSXNzdWUgIzEzNTc5OiBgc3RyaW5nLkZvcm1hdHRlcmAgbm93IHVuZGVyc3RhbmRzIHRoZSAnYScgY29udmVyc2lvbiBzcGVjaWZpZXIuCi0KLS0gSXNzdWUgIzE1NTk1OiBGaXggYGBzdWJwcm9jZXNzLlBvcGVuKHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKWBgIGZvciBjZXJ0YWluCi0gIGxvY2FsZXMgKHV0Zi0xNiBhbmQgdXRmLTMyIGZhbWlseSkuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgotCi0tIElzc3VlICMxNTQ3NzogSW4gY21hdGggYW5kIG1hdGggbW9kdWxlcywgYWRkIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aG9zZQotICBzeXN0ZW0tc3VwcGxpZWQgbG9nMXAgZnVuY3Rpb24gZG9lc24ndCByZXNwZWN0IHNpZ25zIG9mIHplcm9zLgotCi0tIElzc3VlICMxNTcxNTogYGltcG9ydGxpYi5fX2ltcG9ydF9fKClgIHdpbGwgc2lsZW5jZSBhbiBJbXBvcnRFcnJvciB3aGVuIHRoZQotICB1c2Ugb2YgZnJvbWxpc3QgbGVhZHMgdG8gYSBmYWlsZWQgaW1wb3J0LgotCi0tIElzc3VlICMxNDY2OTogRml4IHBpY2tsaW5nIG9mIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzIG9uIE1hYyBPUyBYIGJ5Ci0gIHNlbmRpbmcvcmVjZWl2aW5nIGFuIGFja25vd2xlZGdtZW50IGFmdGVyIGZpbGUgZGVzY3JpcHRvciB0cmFuc2Zlci4KLSAgVGVzdFBpY2tsaW5nQ29ubmVjdGlvbiBoYXMgYmVlbiByZWVuYWJsZWQgZm9yIE1hYyBPUyBYLgotCi0tIElzc3VlICMxMTA2MjogRml4IGFkZGluZyBhIG1lc3NhZ2UgZnJvbSBmaWxlIHRvIEJhYnlsIG1haWxib3guCi0KLS0gSXNzdWUgIzE1NjQ2OiBQcmV2ZW50IGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIgd2hlbiB1c2luZyBgbXVsdGlwcm9jZXNzaW5nYAotICBvbiBXaW5kb3dzIHdpdGhvdXQgdGhlIGBgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJ2BgIGlkaW9tLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzE1Njc4OiBGaXggSURMRSBtZW51cyB3aGVuIHN0YXJ0ZWQgZnJvbSBPUyBYIGNvbW1hbmQgbGluZSAoMy4zLjBiMgotICByZWdyZXNzaW9uKS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIFRvdWNoZWQgdXAgdGhlIFB5dGhvbiAyIHRvIDMgcG9ydGluZyBndWlkZS4KLQotLSBJc3N1ZSAjMTQ2NzQ6IEFkZCBhIGRpc2N1c3Npb24gb2YgdGhlIGBqc29uYCBtb2R1bGUncyBzdGFuZGFyZCBjb21wbGlhbmNlLgotICBQYXRjaCBieSBDaHJpcyBSZWJlcnQuCi0KLS0gQ3JlYXRlIGEgJ0NvbmN1cnJlbnQgRXhlY3V0aW9uJyBzZWN0aW9uIGluIHRoZSBkb2NzLCBhbmQgc3BsaXQgdXAgdGhlCi0gICdPcHRpb25hbCBPcGVyYXRpbmcgU3lzdGVtIFNlcnZpY2VzJyBzZWN0aW9uIHRvIHVzZSBhIG1vcmUgdXNlci1jZW50cmljCi0gIGNsYXNzaWZpY2F0aW9uIHNjaGVtZSAoc3BsaXR0aW5nIHRoZW0gYWNyb3NzIHRoZSBuZXcgQ0Ugc2VjdGlvbiwgSVBDIGFuZCB0ZXh0Ci0gIHByb2Nlc3NpbmcpLiBPcGVyYXRpbmcgc3lzdGVtIGxpbWl0YXRpb25zIGNhbiBiZSByZWZsZWN0ZWQgd2l0aCB0aGUgU3BoaW54Ci0gIGBgOnBsYXRmb3JtOmBgIHRhZywgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGFzIHBhcnQgb2YgdGhlIFRhYmxlIG9mIENvbnRlbnRzLgotCi0tIElzc3VlICM0OTY2OiBCcmluZyB0aGUgc2VxdWVuY2UgZG9jcyB1cCB0byBkYXRlIGZvciB0aGUgUHkzayB0cmFuc2l0aW9uIGFuZAotICB0aGUgbWFueSBsYW5ndWFnZSBlbmhhbmNlbWVudHMgc2luY2UgdGhleSB3ZXJlIG9yaWdpbmFsIHdyaXR0ZW4uCi0KLS0gVGhlICJwYXRoIGltcG9ydGVyIiBtaXNub21lciBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIEVyaWMgU25vdydzCi0gIG1vcmUtYXdrd2FyZC1idXQtYXQtbGVhc3Qtbm90LXdyb25nIHN1Z2dlc3Rpb24gb2YgInBhdGggYmFzZWQgZmluZGVyIiBpbiB0aGUKLSAgaW1wb3J0IHN5c3RlbSByZWZlcmVuY2UgZG9jcy4KLQotLSBJc3N1ZSAjMTU2NDA6IERvY3VtZW50IGBpbXBvcnRsaWIuYWJjLkZpbmRlcmAgYXMgZGVwcmVjYXRlZC4KLQotLSBJc3N1ZSAjMTU2MzA6IEFkZCBhbiBleGFtcGxlIGZvciAiY29udGludWUiIHN0bXQgaW4gdGhlIHR1dG9yaWFsLiAgUGF0Y2ggYnkKLSAgRGFuaWVsIEVsbGlzLgotCi1UZXN0cwotLS0tLS0KLQotLSBJc3N1ZSAjMTU3NDc6IFpGUyBhbHdheXMgcmV0dXJucyBFT1BOT1RTVVBQIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlCi0gIFVGX0lNTVVUQUJMRSBmbGFnICh2aWEgZWl0aGVyIGNoZmxhZ3Mgb3IgbGNoZmxhZ3MpOyByZWZhY3RvciBhZmZlY3RlZCB0ZXN0cyBpbgotICB0ZXN0X3Bvc2l4LnB5IHRvIGFjY291bnQgZm9yIHRoaXMuCi0KLS0gSXNzdWUgIzE1Mjg1OiBSZWZhY3RvciB0aGUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgY29ubmVjdCB0aW1lb3V0cyB1c2luZyB0d28KLSAgZXh0ZXJuYWwgaG9zdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZSBvZiB0ZXN0LgotCi0tIElzc3VlICMxNTc0MzogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZCB1c2FnZSBpbiBgdXJsbGliYCB0ZXN0cy4gUGF0Y2ggYnkKLSAgSmVmZiBLbnVwcC4KLQotLSBJc3N1ZSAjMTU2MTU6IEFkZCBzb21lIHRlc3RzIGZvciB0aGUgYGpzb25gIG1vZHVsZSdzIGhhbmRsaW5nIG9mIGludmFsaWQgaW5wdXQKLSAgZGF0YS4gIFBhdGNoIGJ5IEt1c2hhbCBEYXMuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIE91dHB1dCBsaWIgZmlsZXMgZm9yIFBHTyBidWlsZCBpbnRvIFBHTyBkaXJlY3RvcnkuCi0KLS0gUGljayB1cCAzMi1iaXQgbGF1bmNoZXIgZnJvbSBQR08gZGlyZWN0b3J5IG9uIDY0LWJpdCBQR08gYnVpbGQuCi0KLS0gRHJvcCBgYFBDXHB5dGhvbl9udC5oYGAgYXMgaXQncyBub3QgdXNlZC4gIEFkZCBpbnB1dCBkZXBlbmRlbmN5IG9uIGN1c3RvbQotICBidWlsZCBzdGVwLgotCi0tIElzc3VlICMxNTUxMTogRHJvcCBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHB5dGhvbnh5LmxpYiBmcm9tIF9kZWNpbWFsIGFtZDY0Ci0gIGNvbmZpZ3VyYXRpb24uCi0KLS0gQWRkIG1pc3NpbmcgUEdJL1BHTyBjb25maWd1cmF0aW9ucyBmb3IgcHl3bGF1bmNoZXIuCi0KLS0gSXNzdWUgIzE1NjQ1OiBFbnN1cmUgMnRvMyBncmFtbWFyIHBpY2tsZXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZC4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBCZXRhIDI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDEyLUF1Zy0yMDEyKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTU1Njg6IEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBgeWllbGQgZnJvbWBgIHdoZW4gU3RvcEl0ZXJhdGlvbiBpcwotICByYWlzZWQgYnkgYSBjdXN0b20gaXRlcmF0b3IuCi0KLS0gSXNzdWUgIzEzMTE5OiBgc3lzLnN0ZG91dGAgYW5kIGBzeXMuc3RkZXJyYCBhcmUgbm93IHVzaW5nICJcclxuIiBuZXdsaW5lIG9uCi0gIFdpbmRvd3MsIGFzIFB5dGhvbiAyLgotCi0tIElzc3VlICMxNTUzNDogRml4IHRoZSBmYXN0LXNlYXJjaCBmdW5jdGlvbiBmb3Igbm9uLUFTQ0lJIFVuaWNvZGUgc3RyaW5ncy4KLQotLSBJc3N1ZSAjMTU1MDg6IEZpeCB0aGUgZG9jc3RyaW5nIGZvciBgX19pbXBvcnRfXygpYCB0byBoYXZlIHRoZSBwcm9wZXIgZGVmYXVsdAotICB2YWx1ZSBvZiAwIGZvciAnbGV2ZWwnIGFuZCB0byBub3QgbWVudGlvbiBuZWdhdGl2ZSBsZXZlbHMgc2luY2UgdGhleSBhcmUgbm90Ci0gIHN1cHBvcnRlZC4KLQotLSBJc3N1ZSAjMTU0MjU6IEVsaW1pbmF0ZWQgdHJhY2ViYWNrIG5vaXNlIGZyb20gbW9yZSBzaXR1YXRpb25zIGludm9sdmluZwotICBpbXBvcnRsaWIuCi0KLS0gSXNzdWUgIzE0NTc4OiBTdXBwb3J0IG1vZHVsZXMgcmVnaXN0ZXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeSBhZ2Fpbi4KLQotLSBJc3N1ZSAjMTU0NjY6IFN0b3AgdXNpbmcgVFlQRV9JTlQ2NCBpbiBtYXJzaGFsLCB0byBtYWtlIGltcG9ydGxpYi5oIChhbmQgb3RoZXIKLSAgYnl0ZSBjb2RlIGZpbGVzKSBlcXVhbCBiZXR3ZWVuIDMyLWJpdCBhbmQgNjQtYml0IHN5c3RlbXMuCi0KLS0gSXNzdWUgIzE2OTIzMzU6IE1vdmUgaW5pdGlhbCBleGNlcHRpb24gYXJncyBhc3NpZ25tZW50IHRvCi0gIGBCYXNlRXhjZXB0aW9uLl9fbmV3X18oKWAgdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgotCi0tIElzc3VlICMxMjgzNDogRml4IGBQeUJ1ZmZlcl9Ub0NvbnRpZ3VvdXMoKWAgZm9yIG5vbi1jb250aWd1b3VzIGFycmF5cy4KLQotLSBJc3N1ZSAjMTU0NTY6IEZpeCBjb2RlIGBfX3NpemVvZl9fKClgIGFmdGVyICMxMjM5OSBjaGFuZ2UuICBQYXRjaCBieSBTZXJoaXkKLSAgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTQwNDogUmVmbGVhayBpbiBQeU1ldGhvZE9iamVjdCByZXByLgotCi0tIElzc3VlICMxNTM5NDogQW4gaXNzdWUgaW4gYFB5TW9kdWxlX0NyZWF0ZSgpYCB0aGF0IGNhdXNlZCByZWZlcmVuY2VzIHRvIGJlCi0gIGxlYWtlZCBvbiBzb21lIGVycm9yIHBhdGhzIGhhcyBiZWVuIGZpeGVkLiAgUGF0Y2ggYnkgSnVsaWEgTGF3YWxsLgotCi0tIElzc3VlICMxNTM2ODogQW4gaXNzdWUgdGhhdCBjYXVzZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbiB0byBiZSBub24tZGV0ZXJtaW5pc3RpYwotICBoYXMgYmVlbiBmaXhlZC4KLQotLSBJc3N1ZSAjMTUyMDI6IENvbnNpc3RlbnRseSB1c2UgdGhlIG5hbWUgImZvbGxvd19zeW1saW5rcyIgZm9yIG5ldyBwYXJhbWV0ZXJzCi0gIGluIG9zIGFuZCBzaHV0aWwgZnVuY3Rpb25zLgotCi0tIElzc3VlICMxNTMxNDogYGBfX21haW5fXy5fX2xvYWRlcl9fYGAgaXMgbm93IHNldCBjb3JyZWN0bHkgZHVyaW5nIGludGVycHJldGVyCi0gIHN0YXJ0dXAuCi0KLS0gSXNzdWUgIzE1MTExOiBXaGVuIGEgbW9kdWxlIGltcG9ydGVkIHVzaW5nICdmcm9tIGltcG9ydCcgaGFzIGFuIEltcG9ydEVycm9yCi0gIGluc2lkZSBpdHNlbGYsIGRvbid0IG1hc2sgdGhhdCBmYWN0IGJlaGluZCBhIGdlbmVyaWMgSW1wb3J0RXJyb3IgZm9yIHRoZQotICBtb2R1bGUgaXRzZWxmLgotCi0tIElzc3VlICMxNTI5MzogQWRkIEdDIHN1cHBvcnQgdG8gdGhlIEFTVCBiYXNlIG5vZGUgdHlwZS4KLQotLSBJc3N1ZSAjMTUyOTE6IEZpeCBhIG1lbW9yeSBsZWFrIHdoZXJlIEFTVCBub2RlcyB3aGVyZSBub3QgcHJvcGVybHkKLSAgZGVhbGxvY2F0ZWQuCi0KLS0gSXNzdWUgIzE1MTEwOiBGaXggdGhlIHRyYWNlYmFja3MgZ2VuZXJhdGVkIGJ5ICJpbXBvcnQgeHh4IiB0byBub3Qgc2hvdyB0aGUKLSAgaW1wb3J0bGliIHN0YWNrIGZyYW1lcy4KLQotLSBJc3N1ZSAjMTYzNjk6IEdsb2JhbCBQeVR5cGVPYmplY3RzIG5vdCBpbml0aWFsaXplZCB3aXRoIFB5VHlwZV9SZWFkeSguLi4pLgotCi0tIElzc3VlICMxNTAyMDogVGhlIHByb2dyYW0gbmFtZSB1c2VkIHRvIHNlYXJjaCBmb3IgUHl0aG9uJ3MgcGF0aCBpcyBub3cKLSAgInB5dGhvbjMiIHVuZGVyIFVuaXgsIG5vdCAicHl0aG9uIi4KLQotLSBJc3N1ZSAjMTU4OTc6IHppcGltcG9ydC5jIGRvZXNuJ3QgY2hlY2sgcmV0dXJuIHZhbHVlIG9mIGZzZWVrKCkuCi0gIFBhdGNoIGJ5IEZlbGlwZSBDcnV6LgotCi0tIElzc3VlICMxNTAzMzogRml4IHRoZSBleGl0IHN0YXR1cyBidWcgd2hlbiBtb2R1bGVzIGludm9rZWQgdXNpbmcgLW0gc3dpdGNoLAotICByZXR1cm4gdGhlIHByb3BlciBmYWlsdXJlIHJldHVybiB2YWx1ZSAoMSkuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEplZmYgS251cHAuCi0KLS0gSXNzdWUgIzE1MjI5OiBBbiBgT1NFcnJvcmAgc3ViY2xhc3Mgd2hvc2UgX19pbml0X18gZG9lc24ndCBjYWxsIGJhY2sKLSAgT1NFcnJvci5fX2luaXRfXyBjb3VsZCBwcm9kdWNlIGluY29tcGxldGUgaW5zdGFuY2VzLCBsZWFkaW5nIHRvIGNyYXNoZXMgd2hlbgotICBjYWxsaW5nIHN0cigpIG9uIHRoZW0uCi0KLS0gSXNzdWUgIzE1MzA3OiBWaXJ0dWFsIGVudmlyb25tZW50cyBub3cgdXNlIHN5bWxpbmtzIHdpdGggZnJhbWV3b3JrIGJ1aWxkcyBvbgotICBNYWMgT1MgWCwgbGlrZSBvdGhlciBQT1NJWCBidWlsZHMuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTQ1OTA6IGNvbmZpZ3BhcnNlciBub3cgY29ycmVjdGx5IHN0cmlwcyBpbmxpbmUgY29tbWVudHMgd2hlbiBkZWxpbWl0ZXIKLSAgb2NjdXJzIGVhcmxpZXIgd2l0aG91dCBwcmVjZWRpbmcgc3BhY2UuCi0KLS0gSXNzdWUgIzE1NDI0OiBBZGQgYSBgX19zaXplb2ZfXygpYCBpbXBsZW1lbnRhdGlvbiBmb3IgYXJyYXkgb2JqZWN0cy4gIFBhdGNoIGJ5Ci0gIEx1ZHdpZyBIw6RobmUuCi0KLS0gSXNzdWUgIzE1NTc2OiBBbGxvdyBleHRlbnNpb24gbW9kdWxlcyB0byBhY3QgYXMgYSBwYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlLgotCi0tIElzc3VlICMxNTUwMjogSGF2ZSBgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKClgIHdvcmsgb24gYHN5cy5tZXRhX3BhdGhgCi0gIGluc3RlYWQgb2YgYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYC4KLQotLSBJc3N1ZSAjMTUxNjM6IFB5ZG9jIHNob3VsZG4ndCBsaXN0IF9fbG9hZGVyX18gYXMgbW9kdWxlIGRhdGEuCi0KLS0gSXNzdWUgIzE1NDcxOiBEbyBub3QgdXNlIG11dGFibGUgb2JqZWN0cyBhcyBkZWZhdWx0cyBmb3IKLSAgYGltcG9ydGxpYi5fX2ltcG9ydF9fKClgLgotCi0tIElzc3VlICMxNTU1OTogVG8gYXZvaWQgYSBwcm9ibGVtYXRpYyBmYWlsdXJlIG1vZGUgd2hlbiBwYXNzZWQgdG8gdGhlIGJ5dGVzCi0gIGNvbnN0cnVjdG9yLCBvYmplY3RzIGluIHRoZSBpcGFkZHJlc3MgbW9kdWxlIG5vIGxvbmdlciBpbXBsZW1lbnQgYF9faW5kZXhfXygpYAotICAodGhleSBzdGlsbCBpbXBsZW1lbnQgYF9faW50X18oKWAgYXMgYXBwcm9wcmlhdGUpLgotCi0tIElzc3VlICMxNTU0NjogRml4IGhhbmRsaW5nIG9mIHBhdGhvbG9naWNhbCBpbnB1dCBkYXRhIGluIHRoZSBwZWVrKCkgYW5kCi0gIHJlYWQxKCkgbWV0aG9kcyBvZiB0aGUgQloyRmlsZSwgR3ppcEZpbGUgYW5kIExaTUFGaWxlIGNsYXNzZXMuCi0KLS0gSXNzdWUgIzEyNjU1OiBJbnN0ZWFkIG9mIHJlcXVpcmluZyBhIGN1c3RvbSB0eXBlLCBgb3Muc2NoZWRfZ2V0YWZmaW5pdHkoKWAgYW5kCi0gIGBvcy5zY2hlZF9zZXRhZmZpbml0eSgpYCBub3cgdXNlIHJlZ3VsYXIgc2V0cyBvZiBpbnRlZ2VycyB0byByZXByZXNlbnQgdGhlCi0gIENQVXMgYSBwcm9jZXNzIGlzIHJlc3RyaWN0ZWQgdG8uCi0KLS0gSXNzdWUgIzE1NTM4OiBGaXggY29tcGlsYXRpb24gb2YgdGhlIGBzb2NrZXQuZ2V0bmFtZWluZm8oKWAgLwotICBgc29ja2V0LmdldGFkZHJpbmZvKClgIGVtdWxhdGlvbiBjb2RlLiAgUGF0Y2ggYnkgUGhpbGlwcCBIYWdlbWVpc3Rlci4KLQotLSBJc3N1ZSAjMTU1MTk6IFByb3Blcmx5IGV4cG9zZSBXaW5kb3dzUmVnaXN0cnlGaW5kZXIgaW4gaW1wb3J0bGliIChhbmQgdXNlIHRoZQotICBjb3JyZWN0IHRlcm0gZm9yIGl0KS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWMgU25vdy4KLQotLSBJc3N1ZSAjMTU1MDI6IEJyaW5nIHRoZSBpbXBvcnRsaWIgQUJDcyBpbnRvIGxpbmUgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKLSAgaW1wb3J0IHByb3RvY29scyBnaXZlbiBQRVAgNDIwLiAgT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgotCi0tIElzc3VlICMxNTQ5OTogTGF1bmNoaW5nIGEgd2ViYnJvd3NlciBpbiBVbml4IHVzZWQgdG8gc2xlZXAgZm9yIGEgZmV3IHNlY29uZHMuCi0gIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9uIEJhcmtvdnNreS4KLQotLSBJc3N1ZSAjMTU0NjM6IFRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlIHRydW5jYXRlcyBzdHJpbmdzIHRvIDUwMCBjaGFyYWN0ZXJzLAotICBpbnN0ZWFkIG9mIDEwMCwgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGxvbmcgZmlsZSBwYXRocy4KLQotLSBJc3N1ZSAjNjA1NjogTWFrZSBgbXVsdGlwcm9jZXNzaW5nYCB1c2Ugc2V0YmxvY2tpbmcoVHJ1ZSkgb24gdGhlIHNvY2tldHMgaXQKLSAgdXNlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IEogRGVyZWsgV2lsc29uLgotCi0tIElzc3VlICMxNTM2NDogRml4IHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJykgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aC4KLQotLSBJc3N1ZSAjMTU0MTM6IGBvcy50aW1lcygpYCBoYWQgZGlzYXBwZWFyZWQgdW5kZXIgV2luZG93cy4KLQotLSBJc3N1ZSAjMTU0MDI6IEFuIGlzc3VlIGluIHRoZSBzdHJ1Y3QgbW9kdWxlIHRoYXQgY2F1c2VkIGBzeXMuZ2V0c2l6ZW9mKClgIHRvCi0gIHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc3RydWN0LlN0cnVjdCBpbnN0YW5jZXMgaGFzIGJlZW4gZml4ZWQuICBJbml0aWFsCi0gIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1MjMyOiBXaGVuIG1hbmdsZV9mcm9tIGlzIFRydWUsIGBlbWFpbC5HZW5lcmF0b3JgIG5vdyBjb3JyZWN0bHkKLSAgbWFuZ2xlcyBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggJ0Zyb20gJyB0aGF0IG9jY3VyIGluIGEgTUlNRSBwcmVhbWJsZSBvcgotICBlcGlsb2d1ZS4KLQotLSBJc3N1ZSAjMTUwOTQ6IEluY29ycmVjdGx5IHBsYWNlZCAjZW5kaWYgaW4gX3RraW50ZXIuYy4gIFBhdGNoIGJ5IFNlcmhpeQotICBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzEzOTIyOiBgYXJncGFyc2VgIG5vIGxvbmdlciBpbmNvcnJlY3RseSBzdHJpcHMgJy0tJ3MgdGhhdCBhcHBlYXIgYWZ0ZXIKLSAgdGhlIGZpcnN0IG9uZS4KLQotLSBJc3N1ZSAjMTIzNTM6IGBhcmdwYXJzZWAgbm93IGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXJndW1lbnQgdmFsdWVzLgotCi0tIElzc3VlICMxMDAxNywgaXNzdWUgIzE0OTk4OiBGaXggVHlwZUVycm9yIHVzaW5nIHBwcmludCBvbiBkaWN0aW9uYXJpZXMgd2l0aAotICB1c2VyLWRlZmluZWQgdHlwZXMgYXMga2V5cyBvciBvdGhlciB1bm9yZGVyYWJsZSBrZXlzLgotCi0tIElzc3VlICMxNTM5NzogYGluc3BlY3QuZ2V0bW9kdWxlbmFtZSgpYCBpcyBub3cgYmFzZWQgZGlyZWN0bHkgb24gaW1wb3J0bGliIHZpYQotICBhIG5ldyBgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXMoKWAgQVBJLgotCi0tIElzc3VlICMxNDYzNTogYHRlbG5ldGxpYmAgd2lsbCB1c2UgcG9sbCgpIHJhdGhlciB0aGFuIHNlbGVjdCgpIHdoZW4gcG9zc2libGUgdG8KLSAgYXZvaWQgZmFpbGluZyBkdWUgdG8gdGhlIHNlbGVjdCgpIGZpbGUgZGVzY3JpcHRvciBsaW1pdC4KLQotLSBJc3N1ZSAjMTUxODA6IENsYXJpZnkgcG9zaXhwYXRoLmpvaW4oKSBlcnJvciBtZXNzYWdlIHdoZW4gbWl4aW5nIHN0ciAmIGJ5dGVzLgotCi0tIElzc3VlICMxNTM0MzogcGtndXRpbCBub3cgaW5jbHVkZXMgYW4gaXRlcl9pbXBvcnRlcl9tb2R1bGVzIGltcGxlbWVudGF0aW9uIGZvcgotICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgKHNpbWlsYXIgdG8gdGhlIHdheSBpdCBhbHJlYWR5IGhhbmRsZWQKLSAgemlwaW1wb3J0LnppcGltcG9ydGVyKS4KLQotLSBJc3N1ZSAjMTUzMTQ6IHJ1bnB5IG5vdyBzZXRzIF9fbWFpbl9fLl9fbG9hZGVyX18gY29ycmVjdGx5LgotCi0tIElzc3VlICMxNTM1NzogVGhlIGltcG9ydCBlbXVsYXRpb24gaW4gcGtndXRpbCBpcyBub3cgZGVwcmVjYXRlZC4gcGtndXRpbCB1c2VzCi0gIGltcG9ydGxpYiBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHRoZSBlbXVsYXRpb24uCi0KLS0gSXNzdWUgIzE1MjMzOiBQeXRob24gbm93IGd1YXJhbnRlZXMgdGhhdCBjYWxsYWJsZXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBhdGV4aXQKLSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGluIGEgZGV0ZXJtaW5pc3RpYyBvcmRlci4KLQotLSBJc3N1ZSAjMTUyMzg6IGBzaHV0aWwuY29weXN0YXQoKWAgbm93IGNvcGllcyBMaW51eCAiZXh0ZW5kZWQgYXR0cmlidXRlcyIuCi0KLS0gSXNzdWUgIzE1MjMwOiBydW5weS5ydW5fcGF0aCBub3cgY29ycmVjdGx5IHNldHMgX19wYWNrYWdlX18gYXMgZGVzY3JpYmVkIGluCi0gIHRoZSBkb2N1bWVudGF0aW9uLgotCi0tIElzc3VlICMxNTMxNTogU3VwcG9ydCBWUyAyMDEwIGluIGRpc3R1dGlscyBjeWd3aW5jb21waWxlci4KLQotLSBJc3N1ZSAjMTUyOTQ6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gcGtndXRpbC5leHRlbmRfcGF0aCgpJ3MgaGFuZGxpbmcgb2YgbmVzdGVkCi0gIG5hbWVzcGFjZSBwYWNrYWdlcy4KLQotLSBJc3N1ZSAjMTUwNTY6IGBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoKWAgYW5kIGBpbXAuc291cmNlX2Zyb21fY2FjaGUoKWAgcmFpc2UKLSAgTm90SW1wbGVtZW50ZWRFcnJvciB3aGVuIGBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBzZXQgdG8gTm9uZS4KLQotLSBJc3N1ZSAjMTUyNTY6IEdyYW1tYXRpY2FsIG1pc3Rha2UgaW4gZXhjZXB0aW9uIHJhaXNlZCBieSBgaW1wLmZpbmRfbW9kdWxlKClgLgotCi0tIElzc3VlICM1OTMxOiBgd3NnaXJlZmAgZW52aXJvbiB2YXJpYWJsZSBTRVJWRVJfU09GVFdBUkUgd2lsbCBzcGVjaWZ5IGFuCi0gIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRlcm0gbGlrZSBDUHl0aG9uLCBKeXRob24gaW5zdGVhZCBvZiBnZW5lcmljICJQeXRob24iLgotCi0tIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJtYXhfYnVmZmVyX3NpemUiIG9mIEJ1ZmZlcmVkV3JpdGVyIGFuZAotICBCdWZmZXJlZFJXUGFpciwgZnJvbSB0aGUgaW8gbW9kdWxlLgotCi0tIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJ2ZXJzaW9uIiBvZiBgYXJncGFyc2UuQXJndW1lbnRQYXJzZXJgLgotCi0tIElzc3VlICMxNDgxNDogSW1wbGVtZW50IG1vcmUgY29uc2lzdGVudCBvcmRlcmluZyBhbmQgc29ydGluZyBiZWhhdmlvdXIgZm9yCi0gIGlwYWRkcmVzcyBvYmplY3RzLgotCi0tIElzc3VlICMxNDgxNDogYGlwYWRkcmVzc2AgbmV0d29yayBvYmplY3RzIGNvcnJlY3RseSByZXR1cm4gTm90SW1wbGVtZW50ZWQgd2hlbgotICBjb21wYXJlZCB0byBhcmJpdHJhcnkgb2JqZWN0cyBpbnN0ZWFkIG9mIHJhaXNpbmcgVHlwZUVycm9yLgotCi0tIElzc3VlICMxNDk5MDogQ29ycmVjdGx5IGZhaWwgd2l0aCBTeW50YXhFcnJvciBvbiBpbnZhbGlkIGVuY29kaW5nIGRlY2xhcmF0aW9uLgotCi0tIElzc3VlICMxNDgxNDogYGlwYWRkcmVzc2Agbm93IHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgd2hlbgotICBjb25zdHJ1Y3RpbmcgaW5zdGFuY2VzIGRpcmVjdGx5IChjaGFuZ2VzIHBlcm1pdHRlZCBkdXJpbmcgYmV0YSBkdWUgdG8KLSAgcHJvdmlzaW9uYWwgQVBJIHN0YXR1cykuCi0KLS0gSXNzdWUgIzE1MjQ3OiBgaW8uRmlsZUlPYCBub3cgcmFpc2VzIGFuIGVycm9yIHdoZW4gZ2l2ZW4gYSBmaWxlIGRlc2NyaXB0b3IKLSAgcG9pbnRpbmcgdG8gYSBkaXJlY3RvcnkuCi0KLS0gSXNzdWUgIzE1MjYxOiBTdG9wIG9zLnN0YXQoZmQpIGNyYXNoaW5nIG9uIFdpbmRvd3Mgd2hlbiBmZCBub3Qgb3Blbi4KLQotLSBJc3N1ZSAjMTUxNjY6IEltcGxlbWVudCBgaW1wLmdldF90YWcoKWAgdXNpbmcgYHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgLgotCi0tIElzc3VlICMxNTIxMDogQ2F0Y2ggS2V5RXJyb3Igd2hlbiBgaW1wb3J0bGliLl9faW5pdF9fKClgIGNhbid0IGZpbmQKLSAgX2Zyb3plbl9pbXBvcnRsaWIgaW4gc3lzLm1vZHVsZXMsIG5vdCBJbXBvcnRFcnJvci4KLQotLSBJc3N1ZSAjMTUwMzA6IGBpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyYCBub3cgc3VwcG9ydHMgdGhlIG5ldyBzb3VyY2Ugc2l6ZQotICBoZWFkZXIgZmllbGQgaW4gLnB5YyBmaWxlcy4KLQotLSBJc3N1ZSAjNTM0NjogUHJlc2VydmUgcGVybWlzc2lvbnMgb2YgbWJveCwgTU1ERiBhbmQgQmFieWwgbWFpbGJveCBmaWxlcyBvbgotICBmbHVzaCgpLgotCi0tIElzc3VlICMxMDU3MTogRml4IHRoZSAiLS1zaWduIiBvcHRpb24gb2YgZGlzdHV0aWxzJyB1cGxvYWQgY29tbWFuZC4gIFBhdGNoIGJ5Ci0gIEpha3ViIFdpbGsuCi0KLS0gSXNzdWUgIzk1NTk6IElmIG1lc3NhZ2VzIHdlcmUgb25seSBhZGRlZCwgYSBuZXcgZmlsZSBpcyBubyBsb25nZXIgY3JlYXRlZCBhbmQKLSAgcmVuYW1lZCBvdmVyIHRoZSBvbGQgZmlsZSB3aGVuIGZsdXNoKCkgaXMgY2FsbGVkIG9uIGFuIG1ib3gsIE1NREYgb3IgQmFieWwKLSAgbWFpbGJveC4KLQotLSBJc3N1ZSAjMTA5MjQ6IEZpeGVkIGBjcnlwdC5ta3NhbHQoKWAgdG8gdXNlIGEgUk5HIHRoYXQgaXMgc3VpdGFibGUgZm9yCi0gIGNyeXB0b2dyYXBoaWMgcHVycG9zZS4KLQotLSBJc3N1ZSAjMTUxODQ6IEVuc3VyZSBjb25zaXN0ZW50IHJlc3VsdHMgb2YgT1MgWCBjb25maWd1cmF0aW9uIHRhaWxvcmluZyBmb3IKLSAgdW5pdmVyc2FsIGJ1aWxkcyBieSBmYWN0b3Jpbmcgb3V0IGNvbW1vbiBPUyBYLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zIGZyb20KLSAgc3lzY29uZmlnLCBkaXN0dXRpbHMuc3lzY29uZmlnLCBkaXN0dXRpbHMudXRpbCwgYW5kIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyCi0gIGludG8gYSBuZXcgbW9kdWxlIF9vc3hfc3VwcG9ydC4KLQotQyBBUEkKLS0tLS0tCi0KLS0gSXNzdWUgIzE1NjEwOiBgUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgoKWAgbm93IHVzZXMgYSAnbGV2ZWwnIG9mIDAgaW5zdGVhZCBvZiAtMS4KLQotLSBJc3N1ZSAjMTUxNjksIGlzc3VlICMxNDU5OTogU3RyaXAgb3V0IHRoZSBDIGltcGxlbWVudGF0aW9uIG9mCi0gIGBpbXAuc291cmNlX2Zyb21fY2FjaGUoKWAgdXNlZCBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSBhbmQKLSAgdXNlZCB0aGUgUHl0aG9uIGNvZGUgaW5zdGVhZC4gTGVhZHMgdG8gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoKSB0byBub3QKLSAgdHJ5IHRvIGluZmVyIHRoZSBzb3VyY2UgcGF0aCBmcm9tIHRoZSBieXRlY29kZSBwYXRoIGFzCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGRvZXMuCi0KLUV4dGVuc2lvbiBNb2R1bGVzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICM2NDkzOiBBbiBpc3N1ZSBpbiBjdHlwZXMgb24gV2luZG93cyB0aGF0IGNhdXNlZCBzdHJ1Y3R1cmUgYml0ZmllbGRzIG9mCi0gIHR5cGUgYGN0eXBlcy5jX3VpbnQzMmAgYW5kIHdpZHRoIDMyIHRvIGluY29ycmVjdGx5IGJlIHNldCBoYXMgYmVlbiBmaXhlZC4KLQotLSBJc3N1ZSAjMTUxOTQ6IFVwZGF0ZSBsaWJmZmkgdG8gdGhlIDMuMC4xMSByZWxlYXNlLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzEzMDUyOiBGaXggSURMRSBjcmFzaGluZyB3aGVuIHJlcGxhY2Ugc3RyaW5nIGluIFNlYXJjaC9SZXBsYWNlIGRpYWxvZwotICBlbmRlZCB3aXRoIGBgXGBgLiAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCi0KLVRvb2xzL0RlbW9zCi0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNTQ1ODogcHl0aG9uLWNvbmZpZyBnZXRzIGEgbmV3IG9wdGlvbiAtLWNvbmZpZ2RpciB0byBwcmludCB0aGUgJExJQlBMCi0gIHZhbHVlLgotCi0tIE1vdmUgaW1wb3J0bGliLnRlc3QuYmVuY2htYXJrIHRvIFRvb2xzL2ltcG9ydGJlbmNoLgotCi0tIElzc3VlICMxMjYwNTogVGhlIGdkYiBob29rcyBmb3IgZGVidWdnaW5nIENQeXRob24gKHdpdGhpbiBUb29scy9nZGIpIGhhdmUgYmVlbgotICBlbmhhbmNlZCB0byBzaG93IGluZm9ybWF0aW9uIG9uIG1vcmUgQyBmcmFtZXMgcmVsZXZhbnQgdG8gQ1B5dGhvbiB3aXRoaW4gdGhlCi0gICJweS1idCIgYW5kICJweS1idC1mdWxsIiBjb21tYW5kczoKLQotICAqIEMgZnJhbWVzIHRoYXQgYXJlIHdhaXRpbmcgb24gdGhlIEdJTAotICAqIEMgZnJhbWVzIHRoYXQgYXJlIGdhcmJhZ2UtY29sbGVjdGluZwotICAqIEMgZnJhbWVzIHRoYXQgYXJlIGR1ZSB0byB0aGUgaW52b2NhdGlvbiBvZiBhIFB5Q0Z1bmN0aW9uCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTUwNDE6IFVwZGF0ZSAic2VlIGFsc28iIGxpc3QgaW4gdGtpbnRlciBkb2N1bWVudGF0aW9uLgotCi0tIElzc3VlICMxNTQ0NDogVXNlIHByb3BlciBzcGVsbGluZyBmb3Igbm9uLUFTQ0lJIGNvbnRyaWJ1dG9yIG5hbWVzLiAgUGF0Y2ggYnkKLSAgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTUyOTU6IFJlb3JnYW5pemUgYW5kIHJld3JpdGUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGltcG9ydCBzeXN0ZW0uCi0KLS0gSXNzdWUgIzE1MjMwOiBDbGVhcmx5IGRvY3VtZW50IHNvbWUgb2YgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBydW5weSBtb2R1bGUgYW5kCi0gIG51ZGdlIHJlYWRlcnMgdG93YXJkcyBpbXBvcnRsaWIgd2hlbiBhcHByb3ByaWF0ZS4KLQotLSBJc3N1ZSAjMTUwNTM6IENvcHkgUHl0aG9uIDMuMyBpbXBvcnQgbG9jayBjaGFuZ2Ugbm90aWNlIHRvIGFsbCByZWxldmFudAotICBmdW5jdGlvbnMgaW4gaW1wIGluc3RlYWQgb2YganVzdCBhdCB0aGUgdG9wIG9mIHRoZSByZWxldmFudCBzZWN0aW9uLgotCi0tIElzc3VlICMxNTI4ODogTGluayB0byB0aGUgdGVybSAibG9hZGVyIiBpbiBub3RlcyBpbiBwa2d1dGlsIGFib3V0IGhvdyB0aGluZ3MKLSAgd29uJ3Qgd29yayBhcyBleHBlY3RlZCBpbiBQeXRob24gMy4zIGFuZCBtYXJrIHRoZSByZXF1aXNpdGUgZnVuY3Rpb25zIGFzCi0gICJjaGFuZ2VkIiBzaW5jZSB0aGV5IHdpbGwgbm8gbG9uZ2VyIHdvcmsgd2l0aCBtb2R1bGVzIGRpcmVjdGx5IGltcG9ydGVkIGJ5Ci0gIGltcG9ydCBpdHNlbGYuCi0KLS0gSXNzdWUgIzEzNTU3OiBDbGFyaWZ5IGVmZmVjdCBvZiBnaXZpbmcgdHdvIGRpZmZlcmVudCBuYW1lc3BhY2VzIHRvIGBleGVjKClgIG9yCi0gIGBleGVjZmlsZSgpYC4KLQotLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgYGZpbGVjbXAuZGlyY21wKClgIGNvbXBhcmVzIGZpbGVzIHNoYWxsb3dseS4gUGF0Y2gKLSAgY29udHJpYnV0ZWQgYnkgQ2hyaXMgSmVyZG9uZWsuCi0KLS0gSXNzdWUgIzE1NDQyOiBFeHBvc2UgdGhlIGRlZmF1bHQgbGlzdCBvZiBkaXJlY3RvcmllcyBpZ25vcmVkIGJ5Ci0gIGBmaWxlY21wLmRpcmNtcCgpYCBhcyBhIG1vZHVsZSBhdHRyaWJ1dGUsIGFuZCBleHBhbmQgdGhlIGxpc3QgdG8gbW9yZSBtb2Rlcm4KLSAgdmFsdWVzLgotCi1UZXN0cwotLS0tLS0KLQotLSBJc3N1ZSAjMTU0Njc6IE1vdmUgaGVscGVycyBmb3IgYF9fc2l6ZW9mX18oKWAgdGVzdHMgaW50byB0ZXN0X3N1cHBvcnQuICBQYXRjaAotICBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTMyMDogTWFrZSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2YgdGVzdHMgdGhyZWFkLXNhZmUgd2hlbiBydW5uaW5nIHRlc3RzCi0gIGluIG11bHRpcHJvY2VzcyBtb2RlLiBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KLQotLSBJc3N1ZSAjMTUxNjg6IE1vdmUgYGltcG9ydGxpYi50ZXN0YCB0byBgdGVzdC50ZXN0X2ltcG9ydGxpYmAuCi0KLS0gSXNzdWUgIzE1MDkxOiBSZWFjdGl2YXRlIGEgdGVzdCBvbiBVTklYIHdoaWNoIHdhcyBmYWlsaW5nIHRoYW5rcyB0byBhCi0gIGZvcmdvdHRlbiBgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKClgIGNhbGwuCi0KLS0gSXNzdWUgIzE1MjMwOiBBZG9wdGVkIGEgbW9yZSBzeXN0ZW1hdGljIGFwcHJvYWNoIGluIHRoZSBydW5weSB0ZXN0cy4KLQotLSBJc3N1ZSAjMTUzMDA6IEVuc3VyZSB0aGUgdGVtcG9yYXJ5IHRlc3Qgd29ya2luZyBkaXJlY3RvcmllcyBhcmUgaW4gdGhlIHNhbWUKLSAgcGFyZW50IGZvbGRlciB3aGVuIHJ1bm5pbmcgdGVzdHMgaW4gbXVsdGlwcm9jZXNzIG1vZGUgZnJvbSBhIFB5dGhvbiBidWlsZC4KLSAgUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCi0KLS0gSXNzdWUgIzE1Mjg0OiBTa2lwIHtzZW5kLHJlY3Z9bXNnIHRlc3RzIGluIHRlc3Rfc29ja2V0IHdoZW4gSVB2NiBpcyBub3QKLSAgZW5hYmxlZC4gUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgotCi0tIElzc3VlICMxNTI3NzogRml4IGEgcmVzb3VyY2UgbGVhayBpbiBzdXBwb3J0LnB5IHdoZW4gSVB2NiBpcyBkaXNhYmxlZC4gIFBhdGNoCi0gIGJ5IEJyaWFuIEJyYXppbC4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzExNzE1OiBGaXggbXVsdGlhcmNoIGRldGVjdGlvbiB3aXRob3V0IGhhdmluZyBEZWJpYW4gZGV2ZWxvcG1lbnQgdG9vbHMKLSAgKGRwa2ctZGV2KSBpbnN0YWxsZWQuCi0KLS0gSXNzdWUgIzE1MDM3OiBCdWlsZCBPUyBYIGluc3RhbGxlcnMgd2l0aCBsb2NhbCBjb3B5IG9mIG5jdXJzZXMgNS45IGxpYnJhcmllcwotICB0byBhdm9pZCBjdXJzZXMudW5nZXRfd2NoIGJ1ZyBwcmVzZW50IGluIG9sZGVyIHZlcnNpb25zIG9mIG5jdXJzZXMgc3VjaCBhcwotICB0aG9zZSBzaGlwcGVkIHdpdGggT1MgWC4KLQotLSBJc3N1ZSAjMTU1NjA6IEZpeCBidWlsZGluZyBfc3FsaXRlMyBleHRlbnNpb24gb24gT1MgWCB3aXRoIGFuIFNESy4gIEFsc28sIGZvcgotICBPUyBYIGluc3RhbGxlcnMsIGVuc3VyZSBjb25zaXN0ZW50IHNxbGl0ZTMgYmVoYXZpb3IgYW5kIGZlYXR1cmUgYXZhaWxhYmlsaXR5Ci0gIGJ5IGJ1aWxkaW5nIGEgbG9jYWwgY29weSBvZiBsaWJzcWxpdGUzIHJhdGhlciB0aGFuIGRlcGVuZGluZyBvbiB0aGUgd2lkZSByYW5nZQotICBvZiB2ZXJzaW9ucyBzdXBwbGllZCB3aXRoIHZhcmlvdXMgT1MgWCByZWxlYXNlcy4KLQotLSBJc3N1ZSAjODg0NzogRGlzYWJsZSBDT01EQVQgZm9sZGluZyBpbiBXaW5kb3dzIFBHTyBidWlsZHMuCi0KLS0gSXNzdWUgIzE0MDE4OiBGaXggT1MgWCBUY2wvVGsgZnJhbWV3b3JrIGNoZWNraW5nIHdoZW4gdXNpbmcgT1MgWCBTREtzLgotCi0tIElzc3VlICMxNjI1NjogT1MgWCBpbnN0YWxsZXIgbm93IHNldHMgY29ycmVjdCBwZXJtaXNzaW9ucyBmb3IgZG9jIGRpcmVjdG9yeS4KLQotLSBJc3N1ZSAjMTU0MzE6IEFkZCBfZnJlZXplX2ltcG9ydGxpYiBwcm9qZWN0IHRvIHJlZ2VuZXJhdGUgaW1wb3J0bGliLmggb24KLSAgV2luZG93cy4gUGF0Y2ggYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uLgotCi0tIElzc3VlICMxNDE5NzogRm9yIE9TIFggZnJhbWV3b3JrIGJ1aWxkcywgZW5zdXJlIGxpbmtzIHRvIHRoZSBzaGFyZWQgbGlicmFyeQotICBhcmUgY3JlYXRlZCB3aXRoIHRoZSBwcm9wZXIgQUJJIHN1ZmZpeC4KLQotLSBJc3N1ZSAjMTQzMzA6IEZvciBjcm9zcyBidWlsZHMsIGRvbid0IHVzZSBob3N0IHB5dGhvbiwgdXNlIGhvc3Qgc2VhcmNoIHBhdGhzCi0gIGZvciBob3N0IGNvbXBpbGVyLgotCi0tIElzc3VlICMxNTIzNTogQWxsb3cgQmVya2xleSBEQiB2ZXJzaW9ucyB1cCB0byA1LjMgdG8gYnVpbGQgdGhlIGRibSBtb2R1bGUuCi0KLS0gSXNzdWUgIzE1MjY4OiBTZWFyY2ggY3Vyc2VzLmggaW4gL3Vzci9pbmNsdWRlL25jdXJzZXN3LgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEJldGEgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjctSnVuLTIwMTIqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIEZpeCBhIChtb3N0IGxpa2VseSkgdmVyeSByYXJlIG1lbW9yeSBsZWFrIHdoZW4gY2FsbGluZyBtYWluKCkgYW5kIG5vdCBiZWluZwotICBhYmxlIHRvIGRlY29kZSBhIGNvbW1hbmQtbGluZSBhcmd1bWVudC4KLQotLSBJc3N1ZSAjMTQ4MTU6IFVzZSBQeV9zc2l6ZV90IGluc3RlYWQgb2YgbG9uZyBmb3IgdGhlIG9iamVjdCBoYXNoLCB0bwotICBwcmVzZXJ2ZSBhbGwgNjQgYml0cyBvZiBoYXNoIG9uIFdpbjY0LgotCi0tIElzc3VlICMxMjI2ODogRmlsZSByZWFkbGluZSwgcmVhZGxpbmVzIGFuZCByZWFkKCkgb3IgcmVhZGFsbCgpIG1ldGhvZHMKLSAgbm8gbG9uZ2VyIGxvc2UgZGF0YSB3aGVuIGFuIHVuZGVybHlpbmcgcmVhZCBzeXN0ZW0gY2FsbCBpcyBpbnRlcnJ1cHRlZC4KLSAgSU9FcnJvciBpcyBubyBsb25nZXIgcmFpc2VkIGR1ZSB0byBhIHJlYWQgc3lzdGVtIGNhbGwgcmV0dXJuaW5nIEVJTlRSCi0gIGZyb20gd2l0aGluIHRoZXNlIG1ldGhvZHMuCi0KLS0gSXNzdWUgIzExNjI2OiBBZGQgX1NpemVUIGZ1bmN0aW9ucyB0byBzdGFibGUgQUJJLgotCi0tIElzc3VlICMxNTE0MjogRml4IHJlZmVyZW5jZSBsZWFrIHdoZW4gZGVhbGxvY2F0aW5nIGluc3RhbmNlcyBvZiB0eXBlcwotICBjcmVhdGVkIHVzaW5nIFB5VHlwZV9Gcm9tU3BlYygpLgotCi0tIElzc3VlICMxMDA1MzogRG9uJ3QgY2xvc2UgRkRzIHdoZW4gRmlsZUlPLl9faW5pdF9fIGZhaWxzLiBMb29zZWx5IGJhc2VkIG9uCi0gIHRoZSB3b3JrIGJ5IEhpcm9rYXp1IFlhbWFtb3RvLgotCi0tIElzc3VlICMxNTA5NjogUmVtb3ZlZCBzdXBwb3J0IGZvciB1cicnIGFzIHRoZSByYXcgbm90YXRpb24gaXNuJ3QKLSAgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLngncyByYXcgdW5pY29kZSBzdHJpbmdzLgotCi0tIElzc3VlICMxMzc4MzogR2VuZXJhdG9yIG9iamVjdHMgbm93IHVzZSB0aGUgaWRlbnRpZmllciBBUElzIGludGVybmFsbHkKLQotLSBJc3N1ZSAjMTQ4NzQ6IFJlc3RvcmUgY2hhcm1hcCBkZWNvZGluZyBzcGVlZCB0byBwcmUtUEVQIDM5MyBsZXZlbHMuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1MDI2OiB1dGYtMTYgZW5jb2RpbmcgaXMgbm93IHNpZ25pZmljYW50bHkgZmFzdGVyICh1cCB0byAxMHgpLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxMTAyMjogb3BlbigpIGFuZCBpby5UZXh0SU9XcmFwcGVyIGFyZSBub3cgY2FsbGluZwotICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpIGluc3RlYWQgb2YgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKLSAgaW4gdGV4dCBtb2RlIGlmIHRoZSBlbmNvZGluZyBpcyBub3Qgc3BlY2lmaWVkLiBEb24ndCBjaGFuZ2UgdGVtcG9yYXJ5IHRoZQotICBsb2NhbGUgZW5jb2RpbmcgdXNpbmcgbG9jYWxlLnNldGxvY2FsZSgpLCB1c2UgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nCi0gIGluc3RlYWQgb2YgdGhlIHVzZXIgcHJlZmVycmVkIGVuY29kaW5nLgotCi0tIElzc3VlICMxNDY3MzogQWRkIEVyaWMgU25vdydzIHN5cy5pbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjMTUwMzg6IE9wdGltaXplIHB5dGhvbiBMb2NrcyBvbiBXaW5kb3dzLgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzEyMjg4OiBDb25zaWRlciAnMCcgYW5kICcwLjAnIGFzIHZhbGlkIGluaXRpYWx2YWx1ZQotICBmb3IgdGtpbnRlciBTaW1wbGVEaWFsb2cuCi0KLS0gSXNzdWUgIzE1NTEyOiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBwYXJzZXIuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1NDY5OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBkZXF1ZSBvYmplY3RzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTQ4OTogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgQnl0ZXNJTyBvYmplY3RzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTQ4NzogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgYnVmZmVyZWQgSS9PIG9iamVjdHMuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1NTE0OiBDb3JyZWN0IF9fc2l6ZW9mX18gc3VwcG9ydCBmb3IgY3B1X3NldC4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTUxNzc6IEFkZGVkIGRpcl9mZCBwYXJhbWV0ZXIgdG8gb3MuZndhbGsoKS4KLQotLSBJc3N1ZSAjMTUwNjE6IFJlLWltcGxlbWVudGVkIGhtYWMuY29tcGFyZV9kaWdlc3QoKSBpbiBDIHRvIHByZXZlbnQgZnVydGhlcgotICB0aW1pbmcgYW5hbHlzaXMgYW5kIHRvIHN1cHBvcnQgYWxsIGJ1ZmZlciBwcm90b2NvbCBhd2FyZSBvYmplY3RzIGFzIHdlbGwgYXMKLSAgQVNDSUkgb25seSBzdHIgaW5zdGFuY2VzIHNhZmVseS4KLQotLSBJc3N1ZSAjMTUxNjQ6IENoYW5nZSByZXR1cm4gdmFsdWUgb2YgcGxhdGZvcm0udW5hbWUoKSBmcm9tIGEKLSAgcGxhaW4gdHVwbGUgdG8gYSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlLgotCi0tIFN1cHBvcnQgTWFnZWlhIExpbnV4IGluIHRoZSBwbGF0Zm9ybSBtb2R1bGUuCi0KLS0gSXNzdWUgIzExNjc4OiBTdXBwb3J0IEFyY2ggbGludXggaW4gdGhlIHBsYXRmb3JtIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTUxMTg6IENoYW5nZSByZXR1cm4gdmFsdWUgb2Ygb3MudW5hbWUoKSBhbmQgb3MudGltZXMoKSBmcm9tCi0gIHBsYWluIHR1cGxlcyB0byBpbW11dGFibGUgaXRlcmFibGUgb2JqZWN0cyB3aXRoIG5hbWVkIGF0dHJpYnV0ZXMKLSAgKHN0cnVjdHNlcSBvYmplY3RzKS4KLQotLSBTcGVlZCB1cCBfZGVjaW1hbCBieSBhbm90aGVyIDEwLTE1JSBieSBjYWNoaW5nIHRoZSB0aHJlYWQgbG9jYWwgY29udGV4dAotICB0aGF0IHdhcyBsYXN0IGFjY2Vzc2VkLiBJbiB0aGUgcGkgYmVuY2htYXJrICg2NC1iaXQgcGxhdGZvcm0sIHByZWM9OSksCi0gIF9kZWNpbWFsIGlzIG5vdyBvbmx5IDEuNXggc2xvd2VyIHRoYW4gZmxvYXQuCi0KLS0gUmVtb3ZlIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCB3aGljaCBpcyBub3QgcmVhZHkgZm9yIHByaW1lIHRpbWUuCi0KLS0gSXNzdWUgIzE1MTU0OiBBZGQgImRpcl9mZCIgcGFyYW1ldGVyIHRvIG9zLnJtZGlyLCByZW1vdmUgInJtZGlyIgotICBwYXJhbWV0ZXIgZnJvbSBvcy5yZW1vdmUgLyBvcy51bmxpbmsuCi0KLS0gSXNzdWUgIzQ0ODk6IEFkZCBhIHNodXRpbC5ybXRyZWUgdGhhdCBpc24ndCBzdXNjZXB0aWJsZSB0byBzeW1saW5rIGF0dGFja3MuCi0gIEl0IGlzIHVzZWQgYXV0b21hdGljYWxseSBvbiBwbGF0Zm9ybXMgc3VwcG9ydGluZyB0aGUgbmVjZXNzYXJ5IG9zLm9wZW5hdCgpCi0gIGFuZCBvcy51bmxpbmthdCgpIGZ1bmN0aW9ucy4gTWFpbiBjb2RlIGJ5IE1hcnRpbiB2b24gTMO2d2lzLgotCi0tIElzc3VlICMxNTE1NjogSFRNTFBhcnNlciBub3cgdXNlcyB0aGUgbmV3ICJodG1sLmVudGl0aWVzLmh0bWw1IiBkaWN0aW9uYXJ5LgotCi0tIElzc3VlICMxMTExMzogYWRkIGEgbmV3ICJodG1sNSIgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBuYW1lZCBjaGFyYWN0ZXIKLSAgcmVmZXJlbmNlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZCBhbmQgdGhlIGVxdWl2YWxlbnQgVW5pY29kZQotICBjaGFyYWN0ZXIocykgdG8gdGhlIGh0bWwuZW50aXRpZXMgbW9kdWxlLgotCi0tIElzc3VlICMxNTExNDogdGhlIHN0cmljdCBtb2RlIG9mIEhUTUxQYXJzZXIgYW5kIHRoZSBIVE1MUGFyc2VFcnJvciBleGNlcHRpb24KLSAgYXJlIGRlcHJlY2F0ZWQgbm93IHRoYXQgdGhlIHBhcnNlciBpcyBhYmxlIHRvIHBhcnNlIGludmFsaWQgbWFya3VwLgotCi0tIElzc3VlICMzNjY1OiBcdSBhbmQgXFUgZXNjYXBlcyBhcmUgbm93IHN1cHBvcnRlZCBpbiB1bmljb2RlIHJlZ3VsYXIKLSAgZXhwcmVzc2lvbnMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTE1MzogQWRkZWQgaW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHMgdG8gc2ltcGxpZnkgd2hpdGUgYm94Ci0gIHRlc3Rpbmcgb2YgZ2VuZXJhdG9yIHN0YXRlIHVwZGF0ZXMKLQotLSBJc3N1ZSAjMTMwNjI6IEFkZGVkIGluc3BlY3QuZ2V0Y2xvc3VyZXZhcnMgdG8gc2ltcGxpZnkgdGVzdGluZyBzdGF0ZWZ1bAotICBjbG9zdXJlcwotCi0tIElzc3VlICMxMTAyNDogRml4ZXMgYW5kIGFkZGl0aW9uYWwgdGVzdHMgZm9yIFRpbWUySW50ZXJuYWxkYXRlLgotCi0tIElzc3VlICMxNDYyNjogTGFyZ2UgcmVmYWN0b3Jpbmcgb2YgZnVuY3Rpb25zIC8gcGFyYW1ldGVycyBpbiB0aGUgb3MgbW9kdWxlLgotICBNYW55IGZ1bmN0aW9ucyBub3cgc3VwcG9ydCAiZGlyX2ZkIiBhbmQgImZvbGxvd19zeW1saW5rcyIgcGFyYW1ldGVyczsKLSAgc29tZSBhbHNvIHN1cHBvcnQgYWNjZXB0aW5nIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGluIHBsYWNlIG9mIGEgcGF0aAotICBzdHJpbmcuICBBZGRlZCBvcy5zdXBwb3J0XyogY29sbGVjdGlvbnMgYXMgTEJZTCBoZWxwZXJzLiAgUmVtb3ZlZCBtYW55Ci0gIGZ1bmN0aW9ucyBvbmx5IHByZXZpb3VzbHkgc2VlbiBpbiAzLjMgYWxwaGEgcmVsZWFzZXMgKG9mdGVuIHN0YXJ0aW5nIHdpdGgKLSAgImYiIG9yICJsIiwgb3IgZW5kaW5nIHdpdGggImF0IikuICBPcmlnaW5hbGx5IHN1Z2dlc3RlZCBieSBTZXJoaXkgU3RvcmNoYWthOwotICBpbXBsZW1lbnRlZCBieSBMYXJyeSBIYXN0aW5ncy4KLQotLSBJc3N1ZSAjMTUwMDg6IEltcGxlbWVudCBQRVAgMzYyICJTaWduYXR1cmUgT2JqZWN0cyIuCi0gIFBhdGNoIGJ5IFl1cnkgU2VsaXZhbm92LgotCi0tIElzc3VlOiAjMTUxMzg6IGJhc2U2NC51cmxzYWZlX3tlbixkZX1jb2RlKCkgYXJlIG5vdyAzLTR4IGZhc3Rlci4KLQotLSBJc3N1ZSAjNDQ0NTgyOiBBZGQgc2h1dGlsLndoaWNoLCBmb3IgZmluZGluZyBwcm9ncmFtcyBvbiB0aGUgc3lzdGVtIHBhdGguCi0gIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgRGVtYWluZSwgd2l0aCBsYXRlciBpdGVyYXRpb25zIGJ5IEphbiBLaWxsaWFuCi0gIGFuZCBCcmlhbiBDdXJ0aW4uCi0KLS0gSXNzdWUgIzE0ODM3OiBTU0wgZXJyb3JzIG5vdyBoYXZlIGBgbGlicmFyeWBgIGFuZCBgYHJlYXNvbmBgIGF0dHJpYnV0ZXMKLSAgZGVzY3JpYmluZyBwcmVjaXNlbHkgd2hhdCBoYXBwZW5lZCBhbmQgaW4gd2hpY2ggT3BlblNTTCBzdWJtb2R1bGUuICBUaGUKLSAgc3RyKCkgb2YgYSBTU0xFcnJvciBpcyBhbHNvIGVuaGFuY2VkIGFjY29yZGluZ2x5LgotCi0tIElzc3VlICM5NTI3OiBkYXRldGltZS5hc3RpbWV6b25lKCkgbWV0aG9kIHdpbGwgbm93IHN1cHBseSBhIGNsYXNzCi0gIHRpbWV6b25lIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5c3RlbSBsb2NhbCB0aW1lem9uZSB3aGVuCi0gIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjMTQ2NTM6IGVtYWlsLnV0aWxzLm1rdGltZV90eigpIG5vIGxvbmdlciByZWxpZXMgb24gc3lzdGVtCi0gIG1rdGltZSgpIHdoZW4gdGltZXpvbmUgb2ZmZXN0IGlzIHN1cHBsaWVkLgotCi0tIElzc3VlICMxNDY4NDogemxpYi5jb21wcmVzc29iaigpIGFuZCB6bGliLmRlY29tcHJlc3NvYmooKSBub3cgc3VwcG9ydCB0aGUgdXNlCi0gIG9mIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyaWVzLiBPcmlnaW5hbCBwYXRjaCBieSBTYW0gUnVzaGluZy4KLQotLSBGaXggR3ppcEZpbGUncyBoYW5kbGluZyBvZiBmaWxlbmFtZXMgZ2l2ZW4gYXMgYnl0ZXMgb2JqZWN0cy4KLQotLSBJc3N1ZSAjMTQ3NzI6IFJldHVybiBkZXN0aW5hdGlvbiB2YWx1ZXMgZnJvbSBzb21lIHNodXRpbCBmdW5jdGlvbnMuCi0KLS0gSXNzdWUgIzE1MDY0OiBJbXBsZW1lbnQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIGZvciBtdWx0aXByb2Nlc3NpbmcgdHlwZXMKLQotLSBJc3N1ZSAjMTUxMDE6IE1ha2UgcG9vbCBmaW5hbGl6ZXIgYXZvaWQgam9pbmluZyBjdXJyZW50IHRocmVhZC4KLQotLSBJc3N1ZSAjMTQ2NTc6IFRoZSBmcm96ZW4gaW5zdGFuY2Ugb2YgaW1wb3J0bGliIHVzZWQgZm9yIGJvb3RzdHJhcCBpcyBub3cKLSAgYWxzbyB0aGUgbW9kdWxlIGltcG9ydGVkIGFzIGltcG9ydGxpYi5fYm9vdHN0cmFwLgotCi0tIElzc3VlICMxNDA1NTogQWRkIF9fc2l6ZW9mX18gc3VwcG9ydCB0byBfZWxlbWVudHRyZWUuCi0KLS0gSXNzdWUgIzE1MDU0OiBBIGJ1ZyBpbiB0b2tlbml6ZS50b2tlbml6ZSB0aGF0IGNhdXNlZCBzdHJpbmcgbGl0ZXJhbHMKLSAgd2l0aCAnYicgcHJlZml4ZXMgdG8gYmUgaW5jb3JyZWN0bHkgdG9rZW5pemVkIGhhcyBiZWVuIGZpeGVkLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTAwNjogQWxsb3cgZXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIG5haXZlIGFuZCBhd2FyZQotICB0aW1lIG9yIGRhdGV0aW1lIG9iamVjdHMuCi0KLS0gSXNzdWUgIzE1MDM2OiBNYWlsYm94IG5vIGxvbmdlciB0aHJvd3MgYW4gZXJyb3IgaWYgYSBmbHVzaCBpcyBkb25lCi0gIGJldHdlZW4gb3BlcmF0aW9ucyB3aGVuIHJlbW92aW5nIG9yIGNoYW5naW5nIG11bHRpcGxlIGl0ZW1zIGluIG1ib3gsCi0gIE1NREYsIG9yIEJhYnlsIG1haWxib3hlcy4KLQotLSBJc3N1ZSAjMTQwNTk6IEltcGxlbWVudCBtdWx0aXByb2Nlc3NpbmcuQmFycmllci4KLQotLSBJc3N1ZSAjMTUwNjE6IFRoZSBpbmFwcHJvcHJpYXRlbHkgbmFtZWQgaG1hYy5zZWN1cmVfY29tcGFyZSBoYXMgYmVlbgotICByZW5hbWVkIHRvIGhtYWMuY29tcGFyZV9kaWdlc3QsIHJlc3RyaWN0ZWQgdG8gb3BlcmF0aW5nIG9uIGJ5dGVzIGlucHV0cwotICBvbmx5IGFuZCBoYWQgaXRzIGRvY3VtZW50YXRpb24gdXBkYXRlZCB0byBtb3JlIGFjY3VyYXRlbHkgcmVmbGVjdCBib3RoIGl0cwotICBpbnRlbnQgYW5kIGl0cyBsaW1pdGF0aW9ucwotCi0tIElzc3VlICMxMzg0MTogTWFrZSBjaGlsZCBwcm9jZXNzZXMgZXhpdCB1c2luZyBzeXMuZXhpdCgpIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE0OTM2OiBjdXJzZXNfcGFuZWwgd2FzIGNvbnZlcnRlZCB0byBQRVAgMzEyMSBhbmQgUEVQIDM4NCBBUEkuCi0gIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KLQotLSBJc3N1ZSAjMTY2NzU0NjogT24gcGxhdGZvcm1zIHN1cHBvcnRpbmcgdG1fem9uZSBhbmQgdG1fZ210b2ZmIGZpZWxkcwotICBpbiBzdHJ1Y3QgdG0sIHRpbWUuc3RydWN0X3RpbWUgb2JqZWN0cyByZXR1cm5lZCBieSB0aW1lLmdtdGltZSgpLAotICB0aW1lLmxvY2FsdGltZSgpIGFuZCB0aW1lLnN0cnB0aW1lKCkgZnVuY3Rpb25zIG5vdyBoYXZlIHRtX3pvbmUgYW5kCi0gIHRtX2dtdG9mZiBhdHRyaWJ1dGVzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUGF1bCBCb2RkaWUuCi0KLS0gUmVuYW1lIGFkanVzdGVkIGF0dHJpYnV0ZSB0byBhZGp1c3RhYmxlIGluIHRpbWUuZ2V0X2Nsb2NrX2luZm8oKSByZXN1bHQuCi0KLS0gSXNzdWUgIzM1MTg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCBCYXNlTWFuYWdlci5mcm9tX2FkZHJlc3MoKQotICBtZXRob2QuCi0KLS0gSXNzdWUgIzEzODU3OiBBZGRlZCB0ZXh0d3JhcC5pbmRlbnQoKSBmdW5jdGlvbiAoaW5pdGlhbCBwYXRjaCBieSBFenJhCi0gIEJlcmNoKQotCi0tIElzc3VlICMyNzM2OiBBZGRlZCBkYXRldGltZS50aW1lc3RhbXAoKSBtZXRob2QuCi0KLS0gSXNzdWUgIzEzODU0OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBwcm9wZXJseSBoYW5kbGUgbm9uLWludGVnZXIKLSAgbm9uLXN0cmluZyBhcmd1bWVudCB0byBTeXN0ZW1FeGl0LgotCi0tIElzc3VlICMxMjE1NzogTWFrZSBwb29sLm1hcCgpIGVtcHR5IGl0ZXJhYmxlcyBjb3JyZWN0bHkuICBJbml0aWFsCi0gIHBhdGNoIGJ5IG1vdWFkLgotCi0tIElzc3VlICMxMTgyMzogZGlzYXNzZW1ibHkgbm93IHNob3dzIGFyZ3VtZW50IGNvdW50cyBvbiBjYWxscyB3aXRoIGtleXdvcmQgYXJncy4KLQotLSBJc3N1ZSAjMTQ3MTE6IG9zLnN0YXRfZmxvYXRfdGltZXMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLgotCi0tIExaTUFGaWxlIG5vdyBhY2NlcHRzIHRoZSBtb2RlcyAicmIiLyJ3YiIvImFiIiBhcyBzeW5vbnltcyBvZiAiciIvInciLyJhIi4KLQotLSBUaGUgYnoyIGFuZCBsem1hIG1vZHVsZXMgbm93IGVhY2ggY29udGFpbiBhbiBvcGVuKCkgZnVuY3Rpb24sIGFsbG93aW5nCi0gIGNvbXByZXNzZWQgZmlsZXMgdG8gcmVhZGlseSBiZSBvcGVuZWQgaW4gdGV4dCBtb2RlIGFzIHdlbGwgYXMgYmluYXJ5IG1vZGUuCi0KLS0gQloyRmlsZS5fX2luaXRfXygpIGFuZCBMWk1BRmlsZS5fX2luaXRfXygpIG5vdyBhY2NlcHQgYSBmaWxlIG9iamVjdCBhcyB0aGVpcgotICBmaXJzdCBhcmd1bWVudCwgcmF0aGVyIHRoYW4gcmVxdWlyaW5nIGEgc2VwYXJhdGUgImZpbGVvYmoiIGFyZ3VtZW50LgotCi0tIGd6aXAub3BlbigpIG5vdyBhY2NlcHRzIGZpbGUgb2JqZWN0cyBhcyB3ZWxsIGFzIGZpbGVuYW1lcy4KLQotLSBJc3N1ZSAjMTQ5OTI6IG9zLm1ha2VkaXJzKHBhdGgsIGV4aXN0X29rPVRydWUpIHdvdWxkIHJhaXNlIGFuIE9TRXJyb3IKLSAgd2hlbiB0aGUgcGF0aCBleGlzdGVkIGFuZCBoYWQgdGhlIFNfSVNHSUQgbW9kZSBiaXQgc2V0IHdoZW4gaXQgd2FzCi0gIG5vdCBleHBsaWNpdGx5IGFza2VkIGZvci4gIFRoaXMgaXMgbm8gbG9uZ2VyIGFuIGV4Y2VwdGlvbiBhcyBta2RpcgotICBjYW5ub3QgY29udHJvbCBpZiB0aGUgT1Mgc2V0cyB0aGF0IGJpdCBmb3IgaXQgb3Igbm90LgotCi0tIElzc3VlICMxNDk4OTogTWFrZSB0aGUgQ0dJIGVuYWJsZSBvcHRpb24gdG8gaHR0cC5zZXJ2ZXIgYXZhaWxhYmxlIHZpYSBjb21tYW5kCi0gIGxpbmUuCi0KLS0gSXNzdWUgIzE0OTg3OiBBZGQgYSBtaXNzaW5nIGltcG9ydCBzdGF0ZW1lbnQgdG8gaW5zcGVjdC4KLQotLSBJc3N1ZSAjMTA3OTogZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXIgbm93IGNvcnJlY3RseSBwYXJzZXMgYWxsIHRoZSBleGFtcGxlcwotICBpbiBSRkMyMDQ3LiAgVGhlcmUgaXMgYSBuZWNlc3NhcnkgdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2U6IHRoZSBsZWFkaW5nIGFuZC9vcgotICB0cmFpbGluZyB3aGl0ZXNwYWNlIG9uIEFTQ0lJIHBhcnRzIGlzIG5vdyBwcmVzZXJ2ZWQuCi0KLS0gSXNzdWUgIzE0OTY5OiBCZXR0ZXIgaGFuZGxpbmcgb2YgZXhjZXB0aW9uIGNoYWluaW5nIGluIGNvbnRleHRsaWIuRXhpdFN0YWNrCi0KLS0gSXNzdWUgIzE0OTYzOiBDb252ZXJ0IGNvbnRleHRsaWIuRXhpdFN0YWNrLl9fZXhpdF9fIHRvIHVzZSBhbiBpdGVyYXRpdmUKLSAgYWxnb3JpdGhtIChQYXRjaCBieSBBbG9uIEhvcmV2KQotCi0tIElzc3VlICMxNDc4NTogQWRkIHN5cy5fZGVidWdtYWxsb2NzdGF0cygpIHRvIGhlbHAgZGVidWcgbG93LWxldmVsIG1lbW9yeQotICBhbGxvY2F0aW9uIGlzc3VlcwotCi0tIElzc3VlICMxNDQ0MzogRW5zdXJlIHRoYXQgLnB5IGZpbGVzIGFyZSBieXRlLWNvbXBpbGVkIHdpdGggdGhlIGNvcnJlY3QgUHl0aG9uCi0gIGV4ZWN1dGFibGUgd2l0aGluIGJkaXN0X3JwbSBldmVuIG9uIG9sZGVyIHZlcnNpb25zIG9mIFJQTQotCi1DLUFQSQotLS0tLS0KLQotLSBJc3N1ZSAjMTUxNDY6IEFkZCBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMuIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KLQotLSBJc3N1ZSAjMTUwNDI6IEFkZCBQeVN0YXRlX0FkZE1vZHVsZSBhbmQgUHlTdGF0ZV9SZW1vdmVNb2R1bGUuIEFkZCB2ZXJzaW9uCi0gIGd1YXJkIGZvciBQeV9MSU1JVEVEX0FQSSBhZGRpdGlvbnMuIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KLQotLSBJc3N1ZSAjMTM3ODM6IEluYWR2ZXJ0ZW50IGFkZGl0aW9ucyB0byB0aGUgcHVibGljIEMgQVBJIGluIHRoZSBQRVAgMzgwCi0gIGltcGxlbWVudGF0aW9uIGhhdmUgZWl0aGVyIGJlZW4gcmVtb3ZlZCBvciBtYXJrZWQgYXMgcHJpdmF0ZSBpbnRlcmZhY2VzLgotCi1FeHRlbnNpb24gTW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTUwMDA6IFN1cHBvcnQgdGhlICJ1bmlxdWUiIHgzMiBhcmNoaXRlY3R1cmUgaW4gX3Bvc2l4c3VicHJvY2Vzcy5jLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzk4MDM6IERvbid0IGNsb3NlIElETEUgb24gc2F2aW5nIGlmIGJyZWFrcG9pbnQgaXMgb3Blbi4KLSAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCi0KLS0gSXNzdWUgIzE0OTYyOiBVcGRhdGUgdGV4dCBjb2xvcmluZyBpbiBJRExFIHNoZWxsIHdpbmRvdyBhZnRlciBjaGFuZ2luZwotICBvcHRpb25zLiAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTUxNzY6IENsYXJpZmllZCBiZWhhdmlvciwgZG9jdW1lbnRhdGlvbiwgYW5kIGltcGxlbWVudGF0aW9uCi0gIG9mIG9zLmxpc3RkaXIoKS4KLQotLSBJc3N1ZSAjMTQ5ODI6IERvY3VtZW50IHRoYXQgcGtndXRpbCdzIGl0ZXJhdGlvbiBmdW5jdGlvbnMgcmVxdWlyZSB0aGUKLSAgbm9uLXN0YW5kYXJkIGl0ZXJfbW9kdWxlcygpIG1ldGhvZCB0byBiZSBkZWZpbmVkIGJ5IGFuIGltcG9ydGVyIChzb21ldGhpbmcKLSAgdGhlIGltcG9ydGxpYiBpbXBvcnRlcnMgZG8gbm90IGRlZmluZSkuCi0KLS0gSXNzdWUgIzE1MDgxOiBEb2N1bWVudCBQeVN0YXRlX0ZpbmRNb2R1bGUuCi0gIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KLQotLSBJc3N1ZSAjMTQ4MTQ6IEFkZGVkIGZpcnN0IGRyYWZ0IG9mIGlwYWRkcmVzcyBtb2R1bGUgQVBJIHJlZmVyZW5jZQotCi1UZXN0cwotLS0tLS0KLQotLSBJc3N1ZSAjMTUxODc6IEJ1Z2ZpeDogcmVtb3ZlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyB0ZXN0X3NodXRpbCB3YXMgbGVhdmluZwotICBiZWhpbmQuCi0KLS0gSXNzdWUgIzE0NzY5OiB0ZXN0X2NhcGkgbm93IGhhcyBTa2lwaXRlbVRlc3QsIHdoaWNoIGNsZXZlcmx5IGNoZWNrcwotICBmb3IgInBhcml0eSIgYmV0d2VlbiBQeUFyZ19QYXJzZVR1cGxlKCkgYW5kIHRoZSBQeXRob24vZ2V0YXJncy5jIHN0YXRpYwotICBmdW5jdGlvbiBza2lwaXRlbSgpIGZvciBhbGwgcG9zc2libGUgImZvcm1hdCB1bml0cyIuCi0KLS0gdGVzdF9ubnRwbGliIG5vdyB0b2xlcmF0ZXMgYmVpbmcgcnVuIGZyb20gYmVoaW5kIE5OVFAgZ2F0ZXdheXMgdGhhdCBhZGQKLSAgIlgtQW50aXZpcnVzIiBoZWFkZXJzIHRvIGFydGljbGVzCi0KLS0gSXNzdWUgIzE1MDQzOiB0ZXN0X2dkYiBpcyBub3cgc2tpcHBlZCBlbnRpcmVseSBpZiBnZGIgc2VjdXJpdHkgc2V0dGluZ3MKLSAgYmxvY2sgbG9hZGluZyBvZiB0aGUgZ2RiIGhvb2tzCi0KLS0gSXNzdWUgIzE0OTYzOiBBZGQgdGVzdCBjYXNlcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIGJlaGF2aW91cgotICBpbiBjb250ZXh0bGliLkV4aXRTdGFjayAoSW5pdGlhbCBwYXRjaCBieSBBbG9uIEhvcmV2KQotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTM1OTA6IEltcHJvdmUgc3VwcG9ydCBmb3IgT1MgWCBYY29kZSA0OgotICAgICogVHJ5IHRvIGF2b2lkIGJ1aWxkaW5nIFB5dGhvbiBvciBleHRlbnNpb24gbW9kdWxlcyB3aXRoIHByb2JsZW1hdGljCi0gICAgICBsbHZtLWdjYyBjb21waWxlci4KLSAgICAqIFNpbmNlIFhjb2RlIDQgcmVtb3ZlcyBwcGMgc3VwcG9ydCwgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgbm93Ci0gICAgICBjaGVjayBmb3IgcHBjIGNvbXBpbGVyIHN1cHBvcnQgYW5kIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBwYyBhbmQKLSAgICAgIHBwYzY0IGFyY2hzIHdoZW4gbm90IGF2YWlsYWJsZS4KLSAgICAqIFNpbmNlIFhjb2RlIDQgbm8gbG9uZ2VyIGluc3RhbGwgU0RLcyBpbiBkZWZhdWx0IGxvY2F0aW9ucywKLSAgICAgIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIG5vdyByZXZlcnQgdG8gdXNpbmcgaW5zdGFsbGVkIGhlYWRlcnMKLSAgICAgIGFuZCBsaWJzIGlmIHRoZSBTREsgdXNlZCB0byBidWlsZCB0aGUgaW50ZXJwcmV0ZXIgaXMgbm90Ci0gICAgICBhdmFpbGFibGUuCi0gICAgKiBVcGRhdGUgLi9jb25maWd1cmUgdG8gdXNlIGJldHRlciBkZWZhdWx0cyBmb3IgdW5pdmVyc2FsIGJ1aWxkczsKLSAgICAgIGluIHBhcnRpY3VsYXIsIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz15ZXMgdXNlcyB0aGUgWGNvZGUgZGVmYXVsdAotICAgICAgU0RLIGFuZCAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIG5vdyBkZWZhdWx0cyB0byAiaW50ZWwiIGlmIHBwYwotICAgICAgbm90IGF2YWlsYWJsZS4KLQotLSBJc3N1ZSAjMTQyMjU6IEZpeCBVbmljb2RlIHN1cHBvcnQgZm9yIGN1cnNlcyAoIzEyNTY3KSBvbiBPUyBYCi0KLS0gSXNzdWUgIzE0OTI4OiBGaXggaW1wb3J0bGliIGJvb3RzdHJhcCBpc3N1ZXMgYnkgdXNpbmcgYSBjdXN0b20gZXhlY3V0YWJsZQotICAoTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYikgdG8gYnVpbGQgUHl0aG9uL2ltcG9ydGxpYi5oLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDQ/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAzMS1NYXktMjAxMioKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE0ODM1OiBNYWtlIHBsaXN0bGliIG91dHB1dCBlbXB0eSBhcnJheXMgJiBkaWN0cyBsaWtlIE9TIFguCi0gIFBhdGNoIGJ5IFNpZG5leSBTYW4gTWFydMOtbi4KLQotLSBJc3N1ZSAjMTQ3NDQ6IFVzZSB0aGUgbmV3IF9QeVVuaWNvZGVXcml0ZXIgaW50ZXJuYWwgQVBJIHRvIHNwZWVkIHVwCi0gIHN0ciVhcmdzIGFuZCBzdHIuZm9ybWF0KGFyZ3MpLgotCi0tIElzc3VlICMxNDkzMDogTWFrZSBtZW1vcnl2aWV3IG9iamVjdHMgd2Vha3JlZmFibGUuCi0KLS0gSXNzdWUgIzE0Nzc1OiBGaXggYSBwb3RlbnRpYWwgcXVhZHJhdGljIGRpY3QgYnVpbGQtdXAgZHVlIHRvIHRoZSBnYXJiYWdlCi0gIGNvbGxlY3RvciByZXBlYXRlZGx5IHRyeWluZyB0byB1bnRyYWNrIGRpY3RzLgotCi0tIElzc3VlICMxNDg1NzogZml4IHJlZ3Jlc3Npb24gaW4gcmVmZXJlbmNlcyB0byBQRVAgMzEzNSBpbXBsaWNpdCBfX2NsYXNzX18KLSAgY2xvc3VyZSB2YXJpYWJsZSAoUmVvcGVucyBpc3N1ZSAjMTIzNzApCi0KLS0gSXNzdWUgIzE0NzEyIChQRVAgNDA1KTogVmlydHVhbCBlbnZpcm9ubWVudHMuIEltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLgotCi0tIElzc3VlICMxNDY2MCAoUEVQIDQyMCk6IE5hbWVzcGFjZSBwYWNrYWdlcy4gSW1wbGVtZW50ZWQgYnkgRXJpYyBTbWl0aC4KLQotLSBJc3N1ZSAjMTQ0OTQ6IEZpeCBfX2Z1dHVyZV9fLnB5IGFuZCBpdHMgZG9jdW1lbnRhdGlvbiB0byBub3RlIHRoYXQKLSAgYWJzb2x1dGUgaW1wb3J0cyBhcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaW4gMy4wIGluc3RlYWQgb2YgMi43LgotICBQYXRjaCBieSBTdmVuIE1hcm5hY2guCi0KLS0gSXNzdWUgIzkyNjA6IEEgZmluZXItZ3JhaW5lZCBpbXBvcnQgbG9jay4gIE1vc3Qgb2YgdGhlIGltcG9ydCBzZXF1ZW5jZQotICBub3cgdXNlcyBwZXItbW9kdWxlIGxvY2tzIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgaW1wb3J0IGxvY2ssIGVsaW1pbmF0aW5nCi0gIHdlbGwta25vd24gaXNzdWVzIHdpdGggdGhyZWFkcyBhbmQgaW1wb3J0cy4KLQotLSBJc3N1ZSAjMTQ2MjQ6IFVURi0xNiBkZWNvZGluZyBpcyBub3cgM3ggdG8gNHggZmFzdGVyIG9uIHZhcmlvdXMgaW5wdXRzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIGFzZGxfc2VxIGFuZCBhc2RsX2ludF9zZXEgYXJlIG5vdyBQeV9zc2l6ZV90IHNpemVkLgotCi0tIElzc3VlICMxNDEzMyAoUEVQIDQxNSk6IEltcGxlbWVudCBzdXBwcmVzc2lvbiBvZiBfX2NvbnRleHRfXyBkaXNwbGF5IHdpdGggYW4KLSAgYXR0cmlidXRlIG9uIEJhc2VFeGNlcHRpb24uIFRoaXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsIG1lY2hhbmlzbSBvZiBQRVAgNDA5LgotCi0tIElzc3VlICMxNDQxNzogTXV0YXRpbmcgYSBkaWN0IGR1cmluZyBsb29rdXAgbm93IHJlc3RhcnRzIHRoZSBsb29rdXAgaW5zdGVhZAotICBvZiByYWlzaW5nIGEgUnVudGltZUVycm9yICh1bmRvZXMgaXNzdWUgIzE0MjA1KS4KLQotLSBJc3N1ZSAjMTQ3Mzg6IFNwZWVkLXVwIFVURi04IGRlY29kaW5nIG9uIG5vbi1BU0NJSSBkYXRhLiAgUGF0Y2ggYnkgU2VyaGl5Ci0gIFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTQ3MDA6IEZpeCB0d28gYnJva2VuIGFuZCB1bmRlZmluZWQtYmVoYXZpb3VyLWluZHVjaW5nIG92ZXJmbG93IGNoZWNrcwotICBpbiBvbGQtc3R5bGUgc3RyaW5nIGZvcm1hdHRpbmcuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTQ2OTA6IFVzZSBtb25vdG9uaWMgY2xvY2sgaW5zdGVhZCBvZiBzeXN0ZW0gY2xvY2sgaW4gdGhlIHNjaGVkLAotICBzdWJwcm9jZXNzIGFuZCB0cmFjZSBtb2R1bGVzLgotCi0tIElzc3VlICMxNDQ0MzogVGVsbCBycG1idWlsZCB0byB1c2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBQeXRob24gaW4KLSAgYmRpc3RfcnBtLiBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgotCi0tIElzc3VlICMxMjUxNTogZW1haWwgbm93IHJlZ2lzdGVycyBhIGRlZmVjdCBpZiBpdCBnZXRzIHRvIEVPRiB3aGlsZSBwYXJzaW5nCi0gIGEgTUlNRSBwYXJ0IHdpdGhvdXQgc2VlaW5nIHRoZSBjbG9zaW5nIE1JTUUgYm91bmRhcnkuCi0KLS0gSXNzdWUgIzE2NzI1Njg6IGVtYWlsIG5vdyBhbHdheXMgZGVjb2RlcyBiYXNlNjQgcGF5bG9hZHMsIGFkZGluZyBwYWRkaW5nIGFuZAotICBpZ25vcmluZyBub24tYmFzZTY0LWFscGhhYmV0IGNoYXJhY3RlcnMgaWYgbmVlZGVkLCBhbmQgcmVnaXN0ZXJpbmcgZGVmZWN0cwotICBmb3IgYW55IHN1Y2ggcHJvYmxlbXMuCi0KLS0gSXNzdWUgIzE0OTI1OiBlbWFpbCBub3cgcmVnaXN0ZXJzIGEgZGVmZWN0IHdoZW4gdGhlIHBhcnNlciBkZWNpZGVzIHRoYXQgdGhlcmUKLSAgaXMgYSBtaXNzaW5nIGhlYWRlci9ib2R5IHNlcGFyYXRvciBsaW5lLiAgTWFsZm9ybWVkSGVhZGVyRGVmZWN0LCB3aGljaCB0aGUKLSAgZXhpc3RpbmcgY29kZSB3b3VsZCBuZXZlciBhY3R1YWxseSBnZW5lcmF0ZSwgaXMgZGVwcmVjYXRlZC4KLQotLSBJc3N1ZSAjMTAzNjU6IEZpbGUgb3BlbiBkaWFsb2cgbm93IHdvcmtzIGluc3RlYWQgb2YgY3Jhc2hpbmcgZXZlbiB3aGVuCi0gIHRoZSBwYXJlbnQgd2luZG93IGlzIGNsb3NlZCBiZWZvcmUgdGhlIGRpYWxvZy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCi0KLS0gSXNzdWUgIzg3Mzk6IFVwZGF0ZWQgc210cGQgdG8gc3VwcG9ydCBSRkMgNTMyMSwgYW5kIGFkZGVkIHN1cHBvcnQgZm9yIHRoZQotICBSRkMgMTg3MCBTSVpFIGV4dGVuc2lvbi4KLQotLSBJc3N1ZSAjNjY1MTk0OiBBZGRlZCBhIGxvY2FsdGltZSBmdW5jdGlvbiB0byBlbWFpbC51dGlscyB0byBwcm92aWRlIGFuCi0gIGF3YXJlIGxvY2FsIGRhdGV0aW1lIGZvciB1c2UgaW4gc2V0dGluZyBEYXRlIGhlYWRlcnMuCi0KLS0gSXNzdWUgIzEyNTg2OiBBZGRlZCBuZXcgcHJvdmlzaW9uYWwgcG9saWNpZXMgdGhhdCBpbXBsZW1lbnQgY29udmVuaWVudAotICB1bmljb2RlIHN1cHBvcnQgZm9yIGVtYWlsIGhlYWRlcnMuICBTZWUgV2hhdCdzIE5ldyBmb3IgZGV0YWlscy4KLQotLSBJc3N1ZSAjMTQ3MzE6IFJlZmFjdG9yZWQgZW1haWwgUG9saWN5IGZyYW1ld29yayB0byBzdXBwb3J0IGZ1bGwgYmFja3dhcmQKLSAgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjIgYnkgZGVmYXVsdCB5ZXQgYWxsb3cgZm9yIHRoZSBpbnRyb2R1Y3Rpb24gb2YKLSAgbmV3IGZlYXR1cmVzIHRocm91Z2ggbmV3IHBvbGljaWVzLiAgTm90ZSB0aGF0IFBvbGljeS5tdXN0X2JlXzdiaXQgaXMgcmVuYW1lZAotICB0byBjdGVfdHlwZS4KLQotLSBJc3N1ZSAjMTQ4NzY6IFVzZSB1c2VyLXNlbGVjdGVkIGZvbnQgZm9yIGhpZ2hsaWdodCBjb25maWd1cmF0aW9uLgotCi0tIElzc3VlICMxNDkyMDogRml4IHRoZSBoZWxwKHVybGxpYi5wYXJzZSkgZmFpbHVyZSBvbiBsb2NhbGUgQyBvbiB0ZXJtaW5hbHMuCi0gIEhhdmUgYXNjaWkgY2hhcmFjdGVycyBpbiBoZWxwLgotCi0tIElzc3VlICMxNDU0ODogTWFrZSBtdWx0aXByb2Nlc3NpbmcgZmluYWxpemVycyBjaGVjayBwaWQgYmVmb3JlCi0gIHJ1bm5pbmcgdG8gY29wZSB3aXRoIHBvc3NpYmlsaXR5IG9mIGdjIHJ1bm5pbmcganVzdCBhZnRlciBmb3JrLgotCi0tIElzc3VlICMxNDAzNjogQWRkIGFuIGFkZGl0aW9uYWwgY2hlY2sgdG8gdmFsaWRhdGUgdGhhdCBwb3J0IGluIHVybHBhcnNlIGRvZXMKLSAgbm90IGdvIGluIGlsbGVnYWwgcmFuZ2UgYW5kIHJldHVybnMgTm9uZS4KLQotLSBJc3N1ZSAjMTQ4NjI6IEFkZCBtaXNzaW5nIG5hbWVzIHRvIG9zLl9fYWxsX18KLQotLSBJc3N1ZSAjMTQ4NzU6IFVzZSBmbG9hdCgnaW5mJykgaW5zdGVhZCBvZiBmbG9hdCgnMWU2NjY2NicpIGluIHRoZSBqc29uIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTM1ODU6IEFkZGVkIGNvbnRleHRsaWIuRXhpdFN0YWNrCi0KLS0gUEVQIDMxNDQsIElzc3VlICMxNDgxNDogQWRkZWQgdGhlIGlwYWRkcmVzcyBtb2R1bGUKLQotLSBJc3N1ZSAjMTQ0MjY6IENvcnJlY3QgdGhlIERhdGUgZm9ybWF0IGluIEV4cGlyZXMgYXR0cmlidXRlIG9mIFNldC1Db29raWUKLSAgSGVhZGVyIGluIENvb2tpZS5weS4KLQotLSBJc3N1ZSAjMTQ1ODg6IFRoZSB0eXBlcyBtb2R1bGUgbm93IHByb3ZpZGUgbmV3X2NsYXNzKCkgYW5kIHByZXBhcmVfY2xhc3MoKQotICBmdW5jdGlvbnMgdG8gc3VwcG9ydCBQRVAgMzExNSBjb21wbGlhbnQgZHluYW1pYyBjbGFzcyBjcmVhdGlvbi4gUGF0Y2ggYnkKLSAgRGFuaWVsIFVyYmFuIGFuZCBOaWNrIENvZ2hsYW4uCi0KLS0gSXNzdWUgIzEzMTUyOiBBbGxvdyB0byBzcGVjaWZ5IGEgY3VzdG9tIHRhYnNpemUgZm9yIGV4cGFuZGluZyB0YWJzIGluCi0gIHRleHR3cmFwLiBQYXRjaCBieSBKb2huIEZldWVyc3RlaW4uCi0KLS0gSXNzdWUgIzE0NzIxOiBTZW5kIHRoZSBjb3JyZWN0ICdDb250ZW50LWxlbmd0aDogMCcgaGVhZGVyIHdoZW4gdGhlIGJvZHkgaXMgYW4KLSAgZW1wdHkgc3RyaW5nICcnLiBJbml0aWFsIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEFydmUgS251ZHNlbi4KLQotLSBJc3N1ZSAjMTQwNzI6IEZpeCBwYXJzaW5nIG9mICd0ZWwnIFVSSXMgaW4gdXJscGFyc2UgYnkgbWFraW5nIHRoZSBjaGVjayBmb3IKLSAgcG9ydHMgc3RyaWN0ZXIuCi0KLS0gSXNzdWUgIzkzNzQ6IEdlbmVyaWMgcGFyc2luZyBvZiBxdWVyeSBhbmQgZnJhZ21lbnQgcG9ydGlvbnMgb2YgdXJsIGZvciBhbnkKLSAgc2NoZW1lLiBTdXBwb3J0ZWQgYm90aCBieSBSRkMzOTg2IGFuZCBSRkMyMzk2LgotCi0tIElzc3VlICMxNDc5ODogRml4IHRoZSBmdW5jdGlvbnMgaW4gcHljbGJyIHRvIHJhaXNlIGFuIEltcG9ydEVycm9yCi0gIHdoZW4gdGhlIGZpcnN0IHBhcnQgb2YgYSBkb3R0ZWQgbmFtZSBpcyBub3QgYSBwYWNrYWdlLiBQYXRjaCBieQotICBYYXZpZXIgZGUgR2F5ZS4KLQotLSBJc3N1ZSAjMTIwOTg6IG11bHRpcHJvY2Vzc2luZyBvbiBXaW5kb3dzIG5vdyBzdGFydHMgY2hpbGQgcHJvY2Vzc2VzCi0gIHVzaW5nIHRoZSBzYW1lIHN5cy5mbGFncyBhcyB0aGUgY3VycmVudCBwcm9jZXNzLiAgSW5pdGlhbCBwYXRjaCBieQotICBTZXJnZXkgTWV6ZW50c2V2LgotCi0tIElzc3VlICMxMzAzMTogU21hbGwgc3BlZWQtdXAgZm9yIHRhcmZpbGUgd2hlbiB1bnppcHBpbmcgdGFyZmlsZXMuCi0gIFBhdGNoIGJ5IEp1c3RpbiBQZWVsLgotCi0tIElzc3VlICMxNDc4MDogdXJsbGliLnJlcXVlc3QudXJsb3BlbigpIG5vdyBoYXMgYSBgYGNhZGVmYXVsdGBgIGFyZ3VtZW50Ci0gIHRvIHVzZSB0aGUgZGVmYXVsdCBjZXJ0aWZpY2F0ZSBzdG9yZS4gIEluaXRpYWwgcGF0Y2ggYnkgSmFtZXMgT2FrbGV5LgotCi0tIElzc3VlICMxNDgyOTogRml4IGJpc2VjdCBhbmQgcmFuZ2UoKSBpbmRleGluZyB3aXRoIGxhcmdlIGluZGljZXMKLSAgKD49IDIgKiogMzIpIHVuZGVyIDY0LWJpdCBXaW5kb3dzLgotCi0tIElzc3VlICMxNDczMjogVGhlIF9jc3YgbW9kdWxlIG5vdyB1c2VzIFBFUCAzMTIxIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KLSAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgotCi0tIElzc3VlICMxNDgwOTogQWRkIEhUVFAgc3RhdHVzIGNvZGVzIGludHJvZHVjZWQgYnkgUkZDIDY1ODUgdG8gaHR0cC5zZXJ2ZXIKLSAgYW5kIGh0dHAuY2xpZW50LiBQYXRjaCBieSBFdW5nSnVuIFlpLgotCi0tIElzc3VlICMxNDc3NzogdGtpbnRlciBtYXkgcmV0dXJuIHVuZGVjb2RlZCBVVEYtOCBieXRlcyBhcyBhIHN0cmluZyB3aGVuCi0gIGFjY2Vzc2luZyB0aGUgVGsgY2xpcGJvYXJkLiAgTW9kaWZ5IGNsaXBib2FkX2dldCgpIHRvIGZpcnN0IHJlcXVlc3QgdHlwZQotICBVVEY4X1NUUklORyB3aGVuIG5vIHNwZWNpZmljIHR5cGUgaXMgcmVxdWVzdGVkIGluIGFuIFgxMSB3aW5kb3dpbmcKLSAgZW52aXJvbm1lbnQsIGZhbGxpbmcgYmFjayB0byB0aGUgY3VycmVudCBkZWZhdWx0IHR5cGUgU1RSSU5HIGlmIHRoYXQgZmFpbHMuCi0gIE9yaWdpbmFsIHBhdGNoIGJ5IFRob21hcyBLbHV5dmVyLgotCi0tIElzc3VlICMxNDc3MzogRml4IG9zLmZ3YWxrKCkgZmFpbGluZyBvbiBkYW5nbGluZyBzeW1saW5rcy4KLQotLSBJc3N1ZSAjMTI1NDE6IEJlIGxlbmllbnQgd2l0aCBxdW90ZXMgYXJvdW5kIFJlYWxtIGZpZWxkIG9mIEhUVFAgQmFzaWMKLSAgQXV0aGVudGF0aW9uIGluIHVybGxpYjIuCi0KLS0gSXNzdWUgIzE0ODA3OiBtb3ZlIHVuZG9jdW1lbnRlZCB0YXJmaWxlLmZpbGVtb2RlKCkgdG8gc3RhdC5maWxlbW9kZSgpIGFuZCBhZGQKLSAgZG9jIGVudHJ5LiBBZGQgdGFyZmlsZS5maWxlbW9kZSBhbGlhcyB3aXRoIGRlcHJlY2F0aW9uIHdhcm5pbmcuCi0KLS0gSXNzdWUgIzEzODE1OiBUYXJGaWxlLmV4dHJhY3RmaWxlKCkgbm93IHJldHVybnMgaW8uQnVmZmVyZWRSZWFkZXIgb2JqZWN0cy4KLQotLSBJc3N1ZSAjMTQ1MzI6IEFkZCBhIHNlY3VyZV9jb21wYXJlKCkgaGVscGVyIHRvIHRoZSBobWFjIG1vZHVsZSwgdG8gbWl0aWdhdGUKLSAgdGltaW5nIGF0dGFja3MuIFBhdGNoIGJ5IEpvbiBPYmVyaGVpZGUuCi0KLS0gQWRkIGltcG9ydGxpYi51dGlsLnJlc29sdmVfbmFtZSgpLgotCi0tIElzc3VlICMxNDM2NjogU3VwcG9ydCBsem1hIGNvbXByZXNzaW9uIGluIHppcCBmaWxlcy4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTM5NTk6IEludHJvZHVjZSBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSBhbmQgZG9jdW1lbnQKLSAgaW1wLmZpbmRfbW9kdWxlL2xvYWRfbW9kdWxlIGFzIGRlcHJlY2F0ZWQuCi0KLS0gSXNzdWUgIzE0MDgyOiBzaHV0aWwuY29weTIoKSBub3cgY29waWVzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGlmIHBvc3NpYmxlLgotICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCi0KLS0gSXNzdWUgIzEzOTU5OiBNYWtlIGltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5sb2FkX21vZHVsZSgpL2dldF9maWxlbmFtZSgpIGFuZAotICBpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIubG9hZF9tb2R1bGUoKSBoYXZlIHRoZWlyIHNpbmdsZQotICBhcmd1bWVudCBiZSBvcHRpb25hbC4gQWxsb3dzIGZvciB0aGUgcmVwbGFjZW1lbnQgKGFuZCB0aHVzIGRlcHJlY2F0aW9uKSBvZgotICBpbXAubG9hZF9zb3VyY2UoKS9sb2FkX3BhY2thZ2UoKS9sb2FkX2NvbXBpbGVkKCkuCi0KLS0gSXNzdWUgIzEzOTU5OiBpbXAuZ2V0X3N1ZmZpeGVzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgdGhlIG5ldwotICBhdHRyaWJ1dGVzIG9uIGltcG9ydGxpYi5tYWNoaW5lcnk6IFNPVVJDRV9TVUZGSVhFUywgREVCVUdfQllURUNPREVfU1VGRklYRVMsCi0gIE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUywgQllURUNPREVfU1VGRklYRVMsIGFuZCBFWFRFTlNJT05fU1VGRklYRVMuIFRoaXMKLSAgbGVkIHRvIGFuIGluZGlyZWN0IGRlcHJlY2F0aW9uIG9mIGluc3BlY3QuZ2V0bW9kdWxlaW5mbygpLgotCi0tIElzc3VlICMxNDY2MjogUHJldmVudCBzaHV0aWwgZmFpbHVyZXMgb24gT1MgWCB3aGVuIGRlc3RpbmF0aW9uIGRvZXMgbm90Ci0gIHN1cHBvcnQgY2hmbGFnIG9wZXJhdGlvbnMuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCi0KLS0gSXNzdWUgIzE0MTU3OiBGaXggdGltZS5zdHJwdGltZSBmYWlsaW5nIHdpdGhvdXQgYSB5ZWFyIG9uIEZlYnJ1YXJ5IDI5dGguCi0gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KLQotLSBJc3N1ZSAjMTQ3NTM6IE1ha2UgbXVsdGlwcm9jZXNzaW5nJ3MgaGFuZGxpbmcgb2YgbmVnYXRpdmUgdGltZW91dHMKLSAgdGhlIHNhbWUgYXMgaXQgd2FzIGluIFB5dGhvbiAzLjIuCi0KLS0gSXNzdWUgIzE0NTgzOiBGaXggaW1wb3J0bGliIGJ1ZyB3aGVuIGEgcGFja2FnZSdzIF9faW5pdF9fLnB5IHdvdWxkIGZpcnN0Ci0gIGltcG9ydCBvbmUgb2YgaXRzIG1vZHVsZXMgdGhlbiByYWlzZSBhbiBlcnJvci4KLQotLSBJc3N1ZSAjMTQ3NDE6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yIEVsbGlwc2lzICgnLi4uJykgaW4gcGFyc2VyIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTQ2OTc6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yIHNldCBkaXNwbGF5cyBhbmQgc2V0IGNvbXByZWhlbnNpb25zIGluCi0gIHBhcnNlciBtb2R1bGUuCi0KLS0gSXNzdWUgIzE0NzAxOiBGaXggbWlzc2luZyBzdXBwb3J0IGZvciAncmFpc2UgLi4uIGZyb20nIGluIHBhcnNlciBtb2R1bGUuCi0KLS0gQWRkIHN1cHBvcnQgZm9yIHRpbWVvdXRzIHRvIHRoZSBhY3F1aXJlKCkgbWV0aG9kcyBvZgotICBtdWx0aXByb2Nlc3NpbmcncyBsb2NrL3NlbWFwaG9yZS9jb25kaXRpb24gcHJveGllcy4KLQotLSBJc3N1ZSAjMTM5ODk6IEFkZCBzdXBwb3J0IGZvciB0ZXh0IG1vZGUgdG8gZ3ppcC5vcGVuKCkuCi0KLS0gSXNzdWUgIzE0MTI3OiBUaGUgb3Muc3RhdCgpIHJlc3VsdCBvYmplY3Qgbm93IHByb3ZpZGVzIHRocmVlIGFkZGl0aW9uYWwKLSAgZmllbGRzOiBzdF9jdGltZV9ucywgc3RfbXRpbWVfbnMsIGFuZCBzdF9hdGltZV9ucywgcHJvdmlkaW5nIHRob3NlIHRpbWVzIGFzIGFuCi0gIGludGVnZXIgd2l0aCBuYW5vc2Vjb25kIHJlc29sdXRpb24uICBUaGUgZnVuY3Rpb25zIG9zLnV0aW1lKCksIG9zLmx1dGltZXMoKSwKLSAgYW5kIG9zLmZ1dGltZXMoKSBub3cgYWNjZXB0IGEgbmV3IHBhcmFtZXRlciwgbnMsIHdoaWNoIGFjY2VwdHMgbXRpbWUgYW5kIGF0aW1lCi0gIGFzIGludGVnZXJzIHdpdGggbmFub3NlY29uZCByZXNvbHV0aW9uLgotCi0tIElzc3VlICMxNDEyNyBhbmQgIzEwMTQ4OiBzaHV0aWwuY29weXN0YXQgbm93IHByZXNlcnZlcyBleGFjdCBtdGltZSBhbmQgYXRpbWUKLSAgb24gZmlsZXN5c3RlbXMgcHJvdmlkaW5nIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4KLQotSURMRQotLS0tLQotCi0tIElzc3VlICMxNDk1ODogQ2hhbmdlIElETEUgc3lzdGF4IGhpZ2hsaWdodGluZyB0byByZWNvZ25pemUgYWxsIHN0cmluZyBhbmQKLSAgYnl0ZSBsaXRlcmFscyBzdXBwb3J0ZWQgaW4gUHl0aG9uIDMuMy4KLQotLSBJc3N1ZSAjMTA5OTc6IFByZXZlbnQgYSBkdXBsaWNhdGUgZW50cnkgaW4gSURMRSdzICJSZWNlbnQgRmlsZXMiIG1lbnUuCi0KLS0gSXNzdWUgIzE0OTI5OiBTdG9wIElETEUgMy54IGZyb20gY2xvc2luZyBvbiBVbmljb2RlIGRlY29kZSBlcnJvcnMgd2hlbgotICBncmVwcGluZy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCi0KLS0gSXNzdWUgIzEyNTEwOiBBdHRlbXB0aW5nIHRvIGdldCBpbnZhbGlkIHRvb2x0aXAgbm8gbG9uZ2VyIGNsb3NlcyBJRExFLgotICBPdGhlciB0b29sdGlwc3MgaGF2ZSBiZWVuIGNvcnJlY3RlZCBvciBpbXByb3ZlZCBhbmQgdGhlIG51bWJlciBvZiB0ZXN0cwotICBoYXMgYmVlbiB0cmlwbGVkLiBPcmlnaW5hbCBwYXRjaCBieSBSb2dlciBTZXJ3eS4KLQotVG9vbHMvRGVtb3MKLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE0Njk1OiBCcmluZyBUb29scy9wYXJzZXIvdW5wYXJzZS5weSBzdXBwb3J0IHVwIHRvIGRhdGUgd2l0aAotICB0aGUgUHl0aG9uIDMuMyBHcmFtbWFyLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTQ0NzI6IFVwZGF0ZSAuZ2l0aWdub3JlLiBQYXRjaCBieSBNYXRlaiBDZXBsLgotCi0tIFVwZ3JhZGUgV2luZG93cyBsaWJyYXJ5IHZlcnNpb25zOiBiemlwIDEuMC42LCBPcGVuU1NMIDEuMC4xYy4KLQotLSBJc3N1ZSAjMTQ2OTM6IFVuZGVyIG5vbi1XaW5kb3dzIHBsYXRmb3JtcywgaGFzaGxpYidzIGZhbGxiYWNrIG1vZHVsZXMgYXJlCi0gIGFsd2F5cyBjb21waWxlZCwgZXZlbiBpZiBPcGVuU1NMIGlzIHByZXNlbnQgYXQgYnVpbGQgdGltZS4KLQotLSBJc3N1ZSAjMTMyMTA6IFdpbmRvd3MgYnVpbGQgbm93IHVzZXMgVlMyMDEwLCBwb3J0ZWQgZnJvbSBWUzIwMDguCi0KLUMtQVBJCi0tLS0tLQotCi0tIElzc3VlICMxNDcwNTogVGhlIFB5QXJnX1BhcnNlKCkgZmFtaWx5IG9mIGZ1bmN0aW9ucyBub3cgc3VwcG9ydCB0aGUgJ3AnIGZvcm1hdAotICB1bml0LCB3aGljaCBhY2NlcHRzIGEgImJvb2xlYW4gcHJlZGljYXRlIiBhcmd1bWVudC4gIEl0IGNvbnZlcnRzIGFueSBQeXRob24KLSAgdmFsdWUgaW50byBhbiBpbnRlZ2VyLS0wIGlmIGl0IGlzICJmYWxzZSIsIGFuZCAxIG90aGVyd2lzZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNDg2MzogVXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uIG9mIG9zLmZkb3BlbigpIHRvIHJlZmxlY3QgdGhlCi0gIGZhY3QgdGhhdCBpdCdzIG9ubHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIG9wZW4oKSBhbnltb3JlLgotCi0tIElzc3VlICMxNDU4ODogVGhlIGxhbmd1YWdlIHJlZmVyZW5jZSBub3cgYWNjdXJhdGVseSBkb2N1bWVudHMgdGhlIFB5dGhvbiAzCi0gIGNsYXNzIGRlZmluaXRpb24gcHJvY2Vzcy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLgotCi0tIElzc3VlICMxNDk0MzogQ29ycmVjdCBhIGRlZmF1bHQgYXJndW1lbnQgdmFsdWUgZm9yIHdpbnJlZy5PcGVuS2V5Ci0gIGFuZCBjb3JyZWN0bHkgbGlzdCB0aGUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgZXhwbGFuYXRpb24uCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDAxLU1heS0yMDEyKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTQ2OTk6IEZpeCBjYWxsaW5nIHRoZSBjbGFzc21ldGhvZCBkZXNjcmlwdG9yIGRpcmVjdGx5LgotCi0tIElzc3VlICMxNDQzMzogUHJldmVudCBtc3ZjcnQgY3Jhc2ggaW4gaW50ZXJhY3RpdmUgcHJvbXB0IHdoZW4gc3RkaW4gaXMgY2xvc2VkLgotCi0tIElzc3VlICMxNDUyMTogTWFrZSByZXN1bHQgb2YgZmxvYXQoJ25hbicpIGFuZCBmbG9hdCgnLW5hbicpIG1vcmUgY29uc2lzdGVudAotICBhY3Jvc3MgcGxhdGZvcm1zLgotCi0tIElzc3VlICMxNDY0NjogX19pbXBvcnRfXygpIHNldHMgX19sb2FkZXJfXyBpZiB0aGUgbG9hZGVyIGRpZCBub3QuCi0KLS0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5tZXRhX3BhdGguIElmCi0gIHN5cy5tZXRhX3BhdGggaXMgZm91bmQgdG8gYmUgZW1wdHksIHJhaXNlIEltcG9ydFdhcm5pbmcuCi0KLS0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5wYXRoX2hvb2tzLiBJZgotICBzeXMucGF0aF9ob29rcyBpcyBmb3VuZCB0byBiZSBlbXB0eSwgYSB3YXJuaW5nIHdpbGwgYmUgcmFpc2VkLiBOb25lIGlzIG5vdwotICBpbnNlcnRlZCBpbnRvIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlmIG5vIGZpbmRlciB3YXMgZGlzY292ZXJlZC4gVGhpcyBhbHNvCi0gIG1lYW5zIGltcC5OdWxsSW1wb3J0ZXIgaXMgbm8gbG9uZ2VyIGltcGxpY2l0bHkgdXNlZC4KLQotLSBJc3N1ZSAjMTM5MDM6IEltcGxlbWVudCBQRVAgNDEyLiBJbmRpdmlkdWFsIGRpY3Rpb25hcnkgaW5zdGFuY2VzIGNhbiBub3cgc2hhcmUKLSAgdGhlaXIga2V5cyB3aXRoIG90aGVyIGRpY3Rpb25hcmllcy4gQ2xhc3NlcyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIHRvIHNoYXJlCi0gIHRoZWlyIGluc3RhbmNlIGRpY3Rpb25hcnkga2V5cyBmb3IgaW1wcm92ZWQgbWVtb3J5IGFuZCBwZXJmb3JtYW5jZS4KLQotLSBJc3N1ZSAjMTE2MDMgKGFnYWluKTogU2V0dGluZyBfX3JlcHJfXyB0byBfX3N0cl9fIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IKLSAgd2hlbiByZXByKCkgb3Igc3RyKCkgaXMgY2FsbGVkIG9uIHN1Y2ggYW4gb2JqZWN0LgotCi0tIElzc3VlICMxNDY1ODogRml4IGJpbmRpbmcgYSBzcGVjaWFsIG1ldGhvZCB0byBhIGJ1aWx0aW4gaW1wbGVtZW50YXRpb24gb2YgYQotICBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCi0KLS0gSXNzdWUgIzE0NjMwOiBGaXggYSBtZW1vcnkgYWNjZXNzIGJ1ZyBmb3IgaW5zdGFuY2VzIG9mIGEgc3ViY2xhc3Mgb2YgaW50Ci0gIHdpdGggdmFsdWUgMC4KLQotLSBJc3N1ZSAjMTQzMzk6IFNwZWVkIGltcHJvdmVtZW50cyB0byBiaW4sIG9jdCBhbmQgaGV4IGZ1bmN0aW9ucy4gIFBhdGNoIGJ5Ci0gIFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE0Mzg1OiBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIHR5cGUgZm9yIHRoZSBfX2J1aWx0aW5zX18KLSAgbmFtZXNwYWNlLCBpbnN0ZWFkIG9mIGEgZGljdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHNhbmRib3hpbmcgZm9yIGV4YW1wbGUuCi0gIFJhaXNlIGFsc28gYSBOYW1lRXJyb3IgaW5zdGVhZCBvZiBJbXBvcnRFcnJvciBpZiBfX2J1aWxkX2NsYXNzX18gbmFtZSBpZiBub3QKLSAgZm91bmQgaW4gX19idWlsdGluc19fLgotCi0tIElzc3VlICMxMjU5OTogQmUgbW9yZSBzdHJpY3QgaW4gYWNjZXB0aW5nIE5vbmUgY29tcGFyZWQgdG8gYSBmYWxzZS1saWtlCi0gIG9iamVjdCBmb3IgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIgYW5kCi0gIGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci4KLQotLSBJc3N1ZSAjMTQ2MTI6IEZpeCBqdW1waW5nIGFyb3VuZCB3aXRoIGJsb2NrcyBieSBzZXR0aW5nIGZfbGluZW5vLgotCi0tIElzc3VlICMxNDU5MjogQXR0ZW1wdGluZyBhIHJlbGF0aXZlIGltcG9ydCB3L28gX19wYWNrYWdlX18gb3IgX19uYW1lX18gc2V0IGluCi0gIGdsb2JhbHMgcmFpc2VzIGEgS2V5RXJyb3IuCi0KLS0gSXNzdWUgIzE0NjA3OiBGaXgga2V5d29yZC1vbmx5IGFyZ3VtZW50cyB3aGljaCBzdGFydGVkIHdpdGggYGBfX2BgLgotCi0tIElzc3VlICMxMDg1NDogVGhlIEltcG9ydEVycm9yIHJhaXNlZCB3aGVuIGFuIGV4dGVuc2lvbiBtb2R1bGUgb24gV2luZG93cwotICBmYWlscyB0byBpbXBvcnQgbm93IHVzZXMgdGhlIG5ldyBwYXRoIGFuZCBuYW1lIGF0dHJpYnV0ZXMgZnJvbQotICBJc3N1ZSAjMTU1OTU0OS4KLQotLSBJc3N1ZSAjMTM4ODk6IENoZWNrIGFuZCAoaWYgbmVjZXNzYXJ5KSBzZXQgRlBVIGNvbnRyb2wgd29yZCBiZWZvcmUgY2FsbGluZwotICBhbnkgb2YgdGhlIGR0b2EuYyBzdHJpbmcgPC0+IGZsb2F0IGNvbnZlcnNpb24gZnVuY3Rpb25zLCBvbiBNU1ZDIGJ1aWxkcyBvZgotICBQeXRob24uICBUaGlzIGZpeGVzIGlzc3VlcyB3aGVuIGVtYmVkZGluZyBQeXRob24gaW4gYSBEZWxwaGkgYXBwLgotCi0tIF9faW1wb3J0X18oKSBub3cgbWF0Y2hlcyBQRVAgMzI4IGFuZCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHRpbmcgJ2luZGV4JyB0byAwCi0gIGluc3RlYWQgb2YgLTEgYW5kIHJlbW92aW5nIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KLQotLSBJc3N1ZSAjMjM3NzogTWFrZSBpbXBvcnRsaWIgdGhlIGltcGxlbWVudGF0aW9uIG9mIF9faW1wb3J0X18oKS4KLQotLSBJc3N1ZSAjMTU1OTU0OTogSW1wb3J0RXJyb3Igbm93IGhhcyAnbmFtZScgYW5kICdwYXRoJyBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNldAotICB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cyB0byBpdHMgY29uc3RydWN0b3IuIFRoZXkgYXJlIGN1cnJlbnRseSBub3Qgc2V0IGJ5Ci0gIGltcG9ydCBhcyB0aGV5IGFyZSBtZWFudCBmb3IgdXNlIGJ5IGltcG9ydGxpYi4KLQotLSBJc3N1ZSAjMTQ0NzQ6IFNhdmUgYW5kIHJlc3RvcmUgZXhjZXB0aW9uIHN0YXRlIGluIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKCkKLSAgd2hpbGUgd3JpdGluZyBlcnJvciBtZXNzYWdlIGlmIHRoZSB0aHJlYWQgbGVhdmVzIGEgdW5oYW5kbGVkIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjMTMwMTk6IEZpeCBwb3RlbnRpYWwgcmVmZXJlbmNlIGxlYWtzIGluIGJ5dGVhcnJheS5leHRlbmQoKS4gIFBhdGNoCi0gIGJ5IFN1bWFuIFNhaGEuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTQ3Njg6IG9zLnBhdGguZXhwYW5kdXNlcignfi9hJykgZG9lc24ndCB3b3JrcyBjb3JyZWN0bHkgd2hlbiBIT01FIGlzICcvJy4KLQotLSBJc3N1ZSAjMTQzNzE6IFN1cHBvcnQgYnppcDIgaW4gemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxMzE4MzogRml4IHBkYiBza2lwcGluZyBmcmFtZXMgYWZ0ZXIgaGl0dGluZyBhIGJyZWFrcG9pbnQgYW5kIHJ1bm5pbmcKLSAgc3RlcC4gIFBhdGNoIGJ5IFhhdmllciBkZSBHYXllLgotCi0tIElzc3VlICMxNDY5NjogRml4IHBhcnNlciBtb2R1bGUgdG8gdW5kZXJzdGFuZCAnbm9ubG9jYWwnIGRlY2xhcmF0aW9ucy4KLQotLSBJc3N1ZSAjMTA5NDE6IEZpeCBpbWFwbGliLkludGVybmFsZGF0ZTJ0dXBsZSB0byBwcm9kdWNlIGNvcnJlY3QgcmVzdWx0IG5lYXIKLSAgdGhlIERTVCB0cmFuc2l0aW9uLiAgUGF0Y2ggYnkgSm9lIFBldGVyc29uLgotCi0tIElzc3VlICM5MTU0OiBGaXggcGFyc2VyIG1vZHVsZSB0byB1bmRlcnN0YW5kIGZ1bmN0aW9uIGFubm90YXRpb25zLgotCi0tIElzc3VlICM2MDg1OiBJbiBodHRwLnNlcnZlci5weSBTaW1wbGVIVFRQU2VydmVyLmFkZHJlc3Nfc3RyaW5nIHJldHVybnMgdGhlCi0gIGNsaWVudCBpcCBhZGRyZXNzIGluc3RlYWQgY2xpZW50IGhvc3RuYW1lLiBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCi0KLS0gSXNzdWUgIzE0MzA5OiBEZXByZWNhdGUgdGltZS5jbG9jaygpLCB1c2UgdGltZS5wZXJmX2NvdW50ZXIoKSBvcgotICB0aW1lLnByb2Nlc3NfdGltZSgpIGluc3RlYWQuCi0KLS0gSXNzdWUgIzE0NDI4OiBJbXBsZW1lbnQgdGhlIFBFUCA0MTguIEFkZCB0aW1lLmdldF9jbG9ja19pbmZvKCksCi0gIHRpbWUucGVyZl9jb3VudGVyKCkgYW5kIHRpbWUucHJvY2Vzc190aW1lKCkgZnVuY3Rpb25zLCBhbmQgcmVuYW1lCi0gIHRpbWUuc3RlYWR5KCkgdG8gdGltZS5tb25vdG9uaWMoKS4KLQotLSBJc3N1ZSAjMTQ2NDY6IGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyKCkgbm93IHNldHMgX19sb2FkZXJfXyBhbmQKLSAgX19wYWNrYWdlX18gKHdoZW4gcG9zc2libGUpLgotCi0tIElzc3VlICMxNDY2NDogSXQgaXMgbm93IHBvc3NpYmxlIHRvIHVzZSBAdW5pdHRlc3Quc2tpcHtJZixVbmxlc3N9IG9uIGEKLSAgdGVzdCBjbGFzcyB0aGF0IGRvZXNuJ3QgaW5oZXJpdCBmcm9tIFRlc3RDYXNlIChpLmUuIGEgbWl4aW4pLgotCi0tIElzc3VlICM0ODkyOiBtdWx0aXByb2Nlc3NpbmcgQ29ubmVjdGlvbnMgY2FuIG5vdyBiZSB0cmFuc2ZlcnJlZCBvdmVyCi0gIG11bHRpcHJvY2Vzc2luZyBDb25uZWN0aW9ucy4gIFBhdGNoIGJ5IFJpY2hhcmQgT3Vka2VyayAoc2J0KS4KLQotLSBJc3N1ZSAjMTQxNjA6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBmYWlsZWQgdG8gcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyB3aGVuCi0gIHRoZSBsaW5rcyB3ZXJlIG5vdCBsb2NhdGVkIGluIGFuIGFyY2hpdmUgc3ViZGlyZWN0b3J5LgotCi0tIElzc3VlICMxNDYzODogcHlkb2Mgbm93IHRyZWF0cyBub24tc3RyaW5nIF9fbmFtZV9fIHZhbHVlcyBhcyBpZiB0aGV5Ci0gIHdlcmUgbWlzc2luZywgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLgotCi0tIElzc3VlICMxMzY4NDogRml4IGh0dHBsaWIgdHVubmVsIGlzc3VlIG9mIGluZmluaXRlIGxvb3BzIGZvciBjZXJ0YWluIHNpdGVzCi0gIHdoaWNoIHNlbmQgRU9GIHdpdGhvdXQgdHJhaWxpbmcgXHJcbi4KLQotLSBJc3N1ZSAjMTQ2MDU6IEFkZCBpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIsIGltcG9ydGxpYi5tYWNoaW5lcnkuKEZpbGVGaW5kZXIsCi0gIFNvdXJjZUZpbGVMb2FkZXIsIFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBFeHRlbnNpb25GaWxlTG9hZGVyKS4KLQotLSBJc3N1ZSAjMTM5NTk6IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgpL3NvdXJjZV9mcm9tX2NhY2hlKCkgbm93IGZvbGxvdwotICBvcy5wYXRoLmpvaW4oKS9zcGxpdCgpIHNlbWFudGljcyBmb3IgcGF0aCBtYW5pcHVsYXRpb24gaW5zdGVhZCBvZiBpdHMgcHJpb3IsCi0gIGN1c3RvbSBzZW1hbnRpY3Mgb2YgY2FyaW5nIHRoZSByaWdodC1tb3N0IHBhdGggc2VwYXJhdG9yIGZvcndhcmQgaW4gcGF0aAotICBqb2luaW5nLgotCi0tIElzc3VlICMyMTkzOiBBbGxvdyAiOiIgY2hhcmFjdGVyIGluIENvb2tpZSBOQU1FIHZhbHVlcy4KLQotLSBJc3N1ZSAjMTQ2Mjk6IHRva2VuaXplci5kZXRlY3RfZW5jb2Rpbmcgd2lsbCBzcGVjaWZ5IHRoZSBmaWxlbmFtZSBpbiB0aGUKLSAgU3ludGF4RXJyb3IgZXhjZXB0aW9uIGlmIGZvdW5kIGF0IHJlYWRsaW5lLl9fc2VsZl9fLm5hbWUuCi0KLS0gSXNzdWUgIzE0NjI5OiBSYWlzZSBTeW50YXhFcnJvciBpbiB0b2tlbml6ZXIuZGV0ZWN0X2VuY29kaW5nIGlmIHRoZQotICBmaXJzdCB0d28gbGluZXMgaGF2ZSBub24tVVRGLTggY2hhcmFjdGVycyB3aXRob3V0IGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uLgotCi0tIElzc3VlICMxNDMwODogRml4IGFuIGV4Y2VwdGlvbiB3aGVuIGEgImR1bW15IiB0aHJlYWQgaXMgaW4gdGhlIHRocmVhZGluZwotICBtb2R1bGUncyBhY3RpdmUgbGlzdCBhZnRlciBhIGZvcmsoKS4KLQotLSBJc3N1ZSAjMTE3NTA6IFRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgc2NhdHRlcmVkIGluIHRoZSBfc3VicHJvY2VzcyBhbmQKLSAgX211bHRpcHJvY2Vzc2luZy53aW4zMiBtb2R1bGVzIG5vdyBsaXZlIGluIGEgc2luZ2xlIG1vZHVsZSAiX3dpbmFwaSIuCi0gIFBhdGNoIGJ5IHNidC4KLQotLSBJc3N1ZSAjMTQwODc6IG11bHRpcHJvY2Vzc2luZzogYWRkIENvbmRpdGlvbi53YWl0X2ZvcigpLiBQYXRjaCBieSBzYnQuCi0KLS0gSXNzdWUgIzE0NTM4OiBIVE1MUGFyc2VyIGNhbiBub3cgcGFyc2UgY29ycmVjdGx5IHN0YXJ0IHRhZ3MgdGhhdCBjb250YWluCi0gIGEgYmFyZSAnLycuCi0KLS0gSXNzdWUgIzE0NDUyOiBTeXNMb2dIYW5kbGVyIG5vIGxvbmdlciBpbnNlcnRzIGEgVVRGLTggQk9NIGludG8gdGhlIG1lc3NhZ2UuCi0KLS0gSXNzdWUgIzE0Mzg2OiBFeHBvc2UgdGhlIGRpY3RfcHJveHkgaW50ZXJuYWwgdHlwZSBhcyB0eXBlcy5NYXBwaW5nUHJveHlUeXBlLgotCi0tIElzc3VlICMxMzk1OTogTWFrZSBpbXAucmVsb2FkKCkgYWx3YXlzIHVzZSBhIG1vZHVsZSdzIF9fbG9hZGVyX18gdG8gcGVyZm9ybQotICB0aGUgcmVsb2FkLgotCi0tIElzc3VlICMxMzk1OTogQWRkIGltcC5weSBhbmQgcmVuYW1lIHRoZSBidWlsdC1pbiBtb2R1bGUgdG8gX2ltcCwgYWxsb3dpbmcgZm9yCi0gIHJlLWltcGxlbWVudGluZyBwYXJ0cyBvZiB0aGUgbW9kdWxlIGluIHB1cmUgUHl0aG9uLgotCi0tIElzc3VlICMxMzQ5NjogRml4IHBvdGVudGlhbCBvdmVyZmxvdyBpbiBiaXNlY3QuYmlzZWN0IGFsZ29yaXRobSB3aGVuIGFwcGxpZWQKLSAgdG8gYSBjb2xsZWN0aW9uIG9mIHNpemUgPiBzeXMubWF4c2l6ZSAvIDIuCi0KLS0gSGF2ZSBpbXBvcnRsaWIgdGFrZSBhZHZhbnRhZ2Ugb2YgSW1wb3J0RXJyb3IncyBuZXcgJ25hbWUnIGFuZCAncGF0aCcKLSAgYXR0cmlidXRlcy4KLQotLSBJc3N1ZSAjMTQzOTk6IHppcGZpbGUgbm93IHJlY29nbml6ZXMgdGhhdCB0aGUgYXJjaGl2ZSBoYXMgYmVlbiBtb2RpZmllZCBldmVuCi0gIGlmIG9ubHkgdGhlIGNvbW1lbnQgaXMgY2hhbmdlZC4gIEluIGFkZGl0aW9uLCB0aGUgVHlwZUVycm9yIHRoYXQgcmVzdWx0cyBmcm9tCi0gIHRyeWluZyB0byBzZXQgYSBub24tYmluYXJ5IHZhbHVlIGFzIGEgY29tbWVudCBpcyBub3cgcmFpc2VkIGF0IHRoZSB0aW1lCi0gIHRoZSBjb21tZW50IGlzIHNldCByYXRoZXIgdGhhbiBhdCB0aGUgdGltZSB0aGUgemlwZmlsZSBpcyB3cml0dGVuLgotCi0tIHRyYWNlLkNvdmVyYWdlUmVzdWx0cy5pc19pZ25vcmVkX2ZpbGVuYW1lKCkgbm93IGlnbm9yZXMgYW55IG5hbWUgdGhhdCBzdGFydHMKLSAgd2l0aCAiPCIgYW5kIGVuZHMgd2l0aCAiPiIgaW5zdGVhZCBvZiBzcGVjaWFsLWNhc2luZyAiPHN0cmluZz4iIGFuZAotICAiPGRvY3Rlc3QgIi4KLQotLSBJc3N1ZSAjMTI1Mzc6IFRoZSBtYWlsYm94IG1vZHVsZSBubyBsb25nZXIgZGVwZW5kcyBvbiBrbm93bGVkZ2Ugb2YgaW50ZXJuYWwKLSAgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgZW1haWwgcGFja2FnZSBNZXNzYWdlIG9iamVjdC4KLQotLSBJc3N1ZSAjNzk3ODogc29ja2V0c2VydmVyIG5vdyByZXN0YXJ0cyB0aGUgc2VsZWN0KCkgY2FsbCB3aGVuIEVJTlRSIGlzCi0gIHJldHVybmVkLiAgVGhpcyBhdm9pZHMgY3Jhc2hpbmcgdGhlIHNlcnZlciBsb29wIHdoZW4gYSBzaWduYWwgaXMgcmVjZWl2ZWQuCi0gIFBhdGNoIGJ5IEplcnp5IEtvemVyYS4KLQotLSBJc3N1ZSAjMTQ1MjI6IEF2b2lkIGR1cGxpY2F0aW5nIHNvY2tldCBoYW5kbGVzIGluIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLgotICBQYXRjaCBieSBzYnQuCi0KLS0gRG9uJ3QgUHlfREVDUkVGIE5VTEwgdmFyaWFibGUgaW4gaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlci4KLQotLSBJc3N1ZSAjMzAzMzogQWRkIGRpc3BsYXlvZiBwYXJhbWV0ZXIgdG8gdGtpbnRlciBmb250LiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotLSBJc3N1ZSAjMTQ0ODI6IFJhaXNlIGEgVmFsdWVFcnJvciwgbm90IGEgTmFtZUVycm9yLCB3aGVuIHRyeWluZyB0byBjcmVhdGUKLSAgYSBtdWx0aXByb2Nlc3NpbmcgQ2xpZW50IG9yIExpc3RlbmVyIHdpdGggYW4gQUZfVU5JWCB0eXBlIGFkZHJlc3MgdW5kZXIKLSAgV2luZG93cy4gIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KLQotLSBJc3N1ZSAjODAyMzEwOiBHZW5lcmF0ZSBhbHdheXMgdW5pcXVlIHRraW50ZXIgZm9udCBuYW1lcyBpZiBub3QgZGlyZWN0bHkgcGFzc2VkLgotCi0tIElzc3VlICMxNDE1MTogUmFpc2UgYSBWYWx1ZUVycm9yLCBub3QgYSBOYW1lRXJyb3IsIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZQotICBhIG11bHRpcHJvY2Vzc2luZyBDbGllbnQgb3IgTGlzdGVuZXIgd2l0aCBhbiBBRl9QSVBFIHR5cGUgYWRkcmVzcyB1bmRlcgotICBub24tV2luZG93cyBwbGF0Zm9ybXMuICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCi0KLS0gSXNzdWUgIzE0NDkzOiBVc2UgZ3Zmcy1vcGVuIG9yIHhkZy1vcGVuIGluIHdlYmJyb3dzZXIuCi0KLUJ1aWxkCi0tLS0tLQotCi0tICJtYWtlIHRvdWNoIiB3aWxsIG5vdyB0b3VjaCBnZW5lcmF0ZWQgZmlsZXMgdGhhdCBhcmUgY2hlY2tlZCBpbnRvIE1lcmN1cmlhbCwKLSAgYWZ0ZXIgYSAiaGcgdXBkYXRlIiB3aGljaCBmYWlsZWQgdG8gYnJpbmcgdGhlIHRpbWVzdGFtcHMgaW50byB0aGUgcmlnaHQgb3JkZXIuCi0KLVRlc3RzCi0tLS0tLQotCi0tIElzc3VlICMxNDAyNjogSW4gdGVzdF9jbWRfbGluZV9zY3JpcHQsIGNoZWNrIHRoYXQgc3lzLmFyZ3YgaXMgcG9wdWxhdGVkCi0gIGNvcnJlY3RseSBmb3IgdGhlIHZhcmlvdXMgaW52b2NhdGlvbiBhcHByb2FjaGVzIChQYXRjaCBieSBKYXNvbiBZZW8pCi0KLS0gSXNzdWUgIzE0MDMyOiBGaXggaW5jb3JyZWN0IHZhcmlhYmxlIG5hbWUgaW4gdGVzdF9jbWRfbGluZV9zY3JpcHQgZGVidWdnaW5nCi0gIG1lc3NhZ2UgKFBhdGNoIGJ5IEphc29uIFllbykKLQotLSBJc3N1ZSAjMTQ1ODk6IFVwZGF0ZSBjZXJ0aWZpY2F0ZSBjaGFpbiBmb3Igc2hhMjU2LnRicy1pbnRlcm5ldC5jb20sIGZpeGluZwotICBhIHRlc3QgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KLQotLSBJc3N1ZSAjMTQzNTU6IFJlZ3J0ZXN0IG5vdyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgdW5pdHRlc3QgdGVzdCBsb2FkaW5nLCBhbmQKLSAgd2lsbCB1c2UgaXQgaWYgYSB0ZXN0IGZpbGUgY29udGFpbnMgbm8gYHRlc3RfbWFpbmAgbWV0aG9kLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzg1MTU6IFNldCBfX2ZpbGVfXyB3aGVuIHJ1biBmaWxlIGluIElETEUuCi0gIEluaXRpYWwgcGF0Y2ggYnkgQnJ1Y2UgRnJlZGVyaWtzZW4uCi0KLS0gSXNzdWUgIzE0NDk2OiBGaXggd3JvbmcgbmFtZSBpbiBpZGxlbGliL3RhYmJlZHBhZ2VzLnB5LgotICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCi0KLVRvb2xzIC8gRGVtb3MKLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMzU2MTogVGhlIFdpbmRvd3MgaW5zdGFsbGVyIG5vdyBoYXMgYW4gb3B0aW9uLCBvZmYgYnkgZGVmYXVsdCwgZm9yCi0gIHBsYWNpbmcgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gaW50byB0aGUgc3lzdGVtICJQYXRoIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQotLSBJc3N1ZSAjMTMxNjU6IHN0cmluZ2JlbmNoIGlzIG5vdyBhdmFpbGFibGUgaW4gdGhlIFRvb2xzL3N0cmluZ2JlbmNoIGZvbGRlci4KLSAgSXQgdXNlZCB0byBsaXZlIGluIGl0cyBvd24gU1ZOIHByb2plY3QuCi0KLUMtQVBJCi0tLS0tLQotCi0tIElzc3VlICMxNDA5ODogTmV3IGZ1bmN0aW9ucyBQeUVycl9HZXRFeGNJbmZvIGFuZCBQeUVycl9TZXRFeGNJbmZvLgotICBQYXRjaCBieSBTdGVmYW4gQmVobmVsLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwMS1BcHItMjAxMioKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE2ODMzNjg6IG9iamVjdC5fX25ld19fIGFuZCBvYmplY3QuX19pbml0X18gcmFpc2UgYSBUeXBlRXJyb3IgaWYgdGhleQotICBhcmUgcGFzc2VkIGFyZ3VtZW50cyBhbmQgdGhlaXIgY29tcGxlbWVudGFyeSBtZXRob2QgaXMgbm90IG92ZXJyaWRkZW4uCi0KLS0gSXNzdWUgIzE0Mzc4OiBGaXggY29tcGlsaW5nIGFzdC5JbXBvcnRGcm9tIG5vZGVzIHdpdGggYSAiX19mdXR1cmVfXyIgc3RyaW5nIGFzCi0gIHRoZSBtb2R1bGUgbmFtZSB0aGF0IHdhcyBub3QgaW50ZXJuZWQuCi0KLS0gSXNzdWUgIzE0MzMxOiBVc2Ugc2lnbmlmaWNhbnRseSBsZXNzIHN0YWNrIHNwYWNlIHdoZW4gaW1wb3J0aW5nIG1vZHVsZXMgYnkKLSAgYWxsb2NhdGluZyBwYXRoIGJ1ZmZlcnMgb24gdGhlIGhlYXAgaW5zdGVhZCBvZiB0aGUgc3RhY2suCi0KLS0gSXNzdWUgIzE0MzM0OiBQcmV2ZW50IGluIGEgc2VnZmF1bHQgaW4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fIHdoZW4gaXQgd2FzIG5vdAotICBwYXNzZWQgc3RyaW5ncy4KLQotLSBJc3N1ZSAjMTQ2OTYyOTogQWxsb3cgY3ljbGVzIHRocm91Z2ggYW4gb2JqZWN0J3MgX19kaWN0X18gc2xvdCB0byBiZQotICBjb2xsZWN0ZWQuIChGb3IgZXhhbXBsZSBpZiBgYHguX19kaWN0X18gaXMgeGBgKS4KLQotLSBJc3N1ZSAjMTQyMDU6IGRpY3QgbG9va3VwIHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiB0aGUgZGljdCBpcyBtb2RpZmllZAotICBkdXJpbmcgYSBsb29rdXAuCi0KLS0gSXNzdWUgIzE0MjIwOiBXaGVuIGEgZ2VuZXJhdG9yIGlzIGRlbGVnYXRpbmcgdG8gYW5vdGhlciBpdGVyYXRvciB3aXRoIHRoZQotICB5aWVsZCBmcm9tIHN5bnRheCwgaXQgbmVlZHMgdG8gaGF2ZSBpdHMgYGBnaV9ydW5uaW5nYGAgZmxhZyBzZXQgdG8gVHJ1ZS4KLQotLSBJc3N1ZSAjMTQ0MzU6IFJlbW92ZSBkZWRpY2F0ZWQgYmxvY2sgYWxsb2NhdG9yIGZyb20gZmxvYXRvYmplY3QuYyBhbmQgcmVseQotICBvbiB0aGUgUHlPYmplY3RfTWFsbG9jKCkgYXBpIGxpa2UgYWxsIG90aGVyIG9iamVjdHMuCi0KLS0gSXNzdWUgIzE0NDcxOiBGaXggYSBwb3NzaWJsZSBidWZmZXIgb3ZlcnJ1biBpbiB0aGUgd2lucmVnIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTQyODg6IEFsbG93IHRoZSBzZXJpYWxpemF0aW9uIG9mIGJ1aWx0aW4gaXRlcmF0b3JzCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTQzMDA6IFVuZGVyIFdpbmRvd3MsIHNvY2tldHMgY3JlYXRlZCB1c2luZyBzb2NrZXQuZHVwKCkgbm93IGFsbG93Ci0gIG92ZXJsYXBwZWQgSS9PLiAgUGF0Y2ggYnkgc2J0LgotCi0tIElzc3VlICMxMzg3Mjogc29ja2V0LmRldGFjaCgpIG5vdyBtYXJrcyB0aGUgc29ja2V0IGNsb3NlZCAoYXMgbWlycm9yZWQKLSAgaW4gdGhlIHNvY2tldCByZXByKCkpLiAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCi0KLS0gSXNzdWUgIzE0NDA2OiBGaXggYSByYWNlIGNvbmRpdGlvbiB3aGVuIHVzaW5nIGBgY29uY3VycmVudC5mdXR1cmVzLndhaXQoCi0gIHJldHVybl93aGVuPUFMTF9DT01QTEVURUQpYGAuICBQYXRjaCBieSBNYXR0IEpvaW5lci4KLQotLSBJc3N1ZSAjNTEzNjogZGVwcmVjYXRlIG9sZCwgdW51c2VkIGZ1bmN0aW9ucyBmcm9tIHRraW50ZXIuCi0KLS0gSXNzdWUgIzE0NDE2OiBzeXNsb2cgbm93IGRlZmluZXMgdGhlIExPR19PREVMQVkgYW5kIExPR19BVVRIUFJJViBjb25zdGFudHMKLSAgaWYgdGhleSBhcmUgZGVmaW5lZCBpbiA8c3lzbG9nLmg+LgotCi0tIElzc3VlICMxNDI5NTogQWRkIHVuaXR0ZXN0Lm1vY2sKLQotLSBJc3N1ZSAjNzY1MjogQWRkIC0td2l0aC1zeXN0ZW0tbGlibXBkZWMgb3B0aW9uIHRvIGNvbmZpZ3VyZSBmb3IgbGlua2luZwotICB0aGUgX2RlY2ltYWwgbW9kdWxlIGFnYWluc3QgYW4gaW5zdGFsbGVkIGxpYm1wZGVjLgotCi0tIElzc3VlICMxNDM4MDogTUlNRVRleHQgbm93IGRlZmF1bHRzIHRvIHV0Zi04IHdoZW4gcGFzc2VkIG5vbi1BU0NJSSB1bmljb2RlCi0gIHdpdGggbm8gY2hhcnNldCBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzEwMzQwOiBhc3luY29yZSAtIHByb3Blcmx5IGhhbmRsZSBFSU5WQUwgaW4gZGlzcGF0Y2hlciBjb25zdHJ1Y3RvciBvbgotICBPU1g7IGF2b2lkIHRvIGNhbGwgaGFuZGxlX2Nvbm5lY3QgaW4gY2FzZSBvZiBhIGRpc2Nvbm5lY3RlZCBzb2NrZXQgd2hpY2gKLSAgd2FzIG5vdCBtZWFudCB0byBjb25uZWN0LgotCi0tIElzc3VlICMxNDIwNDogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciB0aGUgTmV4dCBQcm90b2NvbAotICBOZWdvdGlhdGlvbiBleHRlbnNpb24sIGlmIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBPcGVuU1NMIGxpYnJhcnkuCi0gIFBhdGNoIGJ5IENvbGluIE1hcmMuCi0KLS0gSXNzdWUgIzMwMzU6IFVudXNlZCBmdW5jdGlvbnMgZnJvbSB0a2ludGVyIGFyZSBtYXJrZWQgYXMgcGVuZGluZyBkZXByZWNhdGVkLgotCi0tIElzc3VlICMxMjc1NzogRml4IHRoZSBza2lwcGluZyBvZiBkb2N0ZXN0cyB3aGVuIHB5dGhvbiBpcyBydW4gd2l0aCAtT08gc28KLSAgdGhhdCBpdCB3b3JrcyBpbiB1bml0dGVzdCdzIHZlcmJvc2UgbW9kZSBhcyB3ZWxsIGFzIG5vbi12ZXJib3NlIG1vZGUuCi0KLS0gSXNzdWUgIzc2NTI6IEludGVncmF0ZSB0aGUgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBsaWJtcGRlYyBsaWJyYXJ5IHRvIHNwZWVkCi0gIHVwIHRoZSBkZWNpbWFsIG1vZHVsZS4gUGVyZm9ybWFuY2UgZ2FpbnMgb2YgdGhlIG5ldyBDIGltcGxlbWVudGF0aW9uIGFyZQotICBiZXR3ZWVuIDEweCBhbmQgMTAweCwgZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbi4KLQotLSBJc3N1ZSAjMTQyNjk6IFNNVFBEIG5vdyBjb25mb3JtcyB0byB0aGUgUkZDIGFuZCByZXF1aXJlcyBhIEhFTE8gY29tbWFuZAotICBiZWZvcmUgTUFJTCwgUkNQVCwgb3IgREFUQS4KLQotLSBJc3N1ZSAjMTM2OTQ6IGFzeW5jaHJvbm91cyBjb25uZWN0IGluIGFzeW5jb3JlLmRpc3BhdGNoZXIgZG9lcyBub3Qgc2V0IGFkZHIKLSAgYXR0cmlidXRlLgotCi0tIElzc3VlICMxNDM0NDogZml4ZWQgdGhlIHJlcHIgb2YgZW1haWwucG9saWN5IG9iamVjdHMuCi0KLS0gSXNzdWUgIzExNjg2OiBBZGRlZCBtaXNzaW5nIGVudHJpZXMgdG8gZW1haWwgcGFja2FnZSBfX2FsbF9fIGxpc3RzCi0gIChtb3N0bHkgdGhlIG5ldyBCeXRlcyBjbGFzc2VzKS4KLQotLSBJc3N1ZSAjMTQzMzU6IG11bHRpcHJvY2Vzc2luZydzIGN1c3RvbSBQaWNrbGVyIHN1YmNsYXNzIG5vdyBpbmhlcml0cyBmcm9tCi0gIHRoZSBDLWFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uLiAgUGF0Y2ggYnkgc2J0LgotCi0tIElzc3VlICMxMDQ4NDogRml4IHRoZSBDR0lIVFRQU2VydmVyJ3MgUEFUSF9JTkZPIGhhbmRsaW5nIHByb2JsZW0uCi0KLS0gSXNzdWUgIzExMTk5OiBGaXggdGhlIHdpdGggdXJsbGliIHdoaWNoIGhhbmdzIG9uIHBhcnRpY3VsYXIgZnRwIHVybHMuCi0KLS0gSW1wcm92ZSB0aGUgbWVtb3J5IHV0aWxpemF0aW9uIGFuZCBzcGVlZCBvZiBmdW5jdG9vbHMubHJ1X2NhY2hlLgotCi0tIElzc3VlICMxNDIyMjogVXNlIHRoZSBuZXcgdGltZS5zdGVhZHkoKSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRpbWUudGltZSgpIGZvcgotICB0aW1lb3V0IGluIHF1ZXVlIGFuZCB0aHJlYWRpbmcgbW9kdWxlcyB0byBub3QgYmUgYWZmZWN0ZWQgb2Ygc3lzdGVtIHRpbWUKLSAgdXBkYXRlLgotCi0tIElzc3VlICMxMzI0ODogUmVtb3ZlIGxpYjJ0bzMucHl0cmVlLkJhc2UuZ2V0X3ByZWZpeC9zZXRfcHJlZml4LgotCi0tIElzc3VlICMxNDIzNDogQ1ZFLTIwMTItMDg3NjogUmFuZG9taXplIGhhc2hlcyBvZiB4bWwgYXR0cmlidXRlcyBpbiB0aGUgaGFzaAotICB0YWJsZSBpbnRlcm5hbCB0byB0aGUgcHlleHBhdCBtb2R1bGUncyBjb3B5IG9mIHRoZSBleHBhdCBsaWJyYXJ5IHRvIGF2b2lkIGEKLSAgZGVuaWFsIG9mIHNlcnZpY2UgZHVlIHRvIGhhc2ggY29sbGlzaW9ucy4gIFBhdGNoIGJ5IERhdmlkIE1hbGNvbG0gd2l0aCBzb21lCi0gIG1vZGlmaWNhdGlvbnMgYnkgdGhlIGV4cGF0IHByb2plY3QuCi0KLS0gSXNzdWUgIzEyODE4OiBmb3JtYXQgYWRkcmVzcyBubyBsb25nZXIgbmVlZGxlc3NseSBcIGVzY2FwZXMgKClzIGluIG5hbWVzIHdoZW4KLSAgdGhlIG5hbWUgZW5kcyB1cCBiZWluZyBxdW90ZWQuCi0KLS0gSXNzdWUgIzE0MDYyOiBCeXRlc0dlbmVyYXRvciBub3cgY29ycmVjdGx5IGZvbGRzIEhlYWRlciBvYmplY3RzLAotICBpbmNsdWRpbmcgdXNpbmcgbGluZXNlcCB3aGVuIGZvbGRpbmcuCi0KLS0gSXNzdWUgIzEzODM5OiBXaGVuIGludm9rZWQgb24gdGhlIGNvbW1hbmQtbGluZSwgdGhlIHBzdGF0cyBtb2R1bGUgbm93Ci0gIGFjY2VwdHMgc2V2ZXJhbCBmaWxlbmFtZXMgb2YgcHJvZmlsZSBzdGF0IGZpbGVzIGFuZCBtZXJnZXMgdGhlbSBhbGwuCi0gIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgotCi0tIElzc3VlICMxNDI5MTogRW1haWwgbm93IGRlZmF1bHRzIHRvIHV0Zi04IGZvciBub24tQVNDSUkgdW5pY29kZSBoZWFkZXJzCi0gIGluc3RlYWQgb2YgcmFpc2luZyBhbiBlcnJvci4gIFRoaXMgZml4ZXMgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIDIuNy4KLQotLSBJc3N1ZSAjOTg5NzEyOiBTdXBwb3J0IHVzaW5nIFRrIHdpdGhvdXQgYSBtYWlubG9vcC4KLQotLSBJc3N1ZSAjMzgzNTogUmVmdXNlIHRvIHVzZSB1bnRocmVhZGVkIFRjbCBpbiB0aHJlYWRlZCBQeXRob24uCi0KLS0gSXNzdWUgIzI4NDM6IEFkZCBuZXcgVGsgQVBJIHRvIFRraW50ZXIuCi0KLS0gSXNzdWUgIzE0MTg0OiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgotICBNYWMgT1MgWCB0byBhdm9pZCBpbnRlcnByZXRlciBjcmFzaGVzIHdoZW4gdXNpbmcgdGhyZWFkcyBvbiAxMC43LgotCi0tIElzc3VlICMxNDE4MDogZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wKCksCi0gIGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpCi0gIG5vdyByYWlzZSBhbiBPU0Vycm9yIGluc3RlYWQgb2YgVmFsdWVFcnJvciBpZiBsb2NhbHRpbWUoKSBvciBnbXRpbWUoKSBmYWlsZWQuCi0KLS0gSXNzdWUgIzE0MTgwOiB0aW1lLmN0aW1lKCksIGdtdGltZSgpLCB0aW1lLmxvY2FsdGltZSgpLAotICBkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXAoKSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZAotICBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkgbm93IHJhaXNlcyBhbiBPdmVyZmxvd0Vycm9yLCBpbnN0ZWFkIG9mCi0gIGEgVmFsdWVFcnJvciwgaWYgdGhlIHRpbWVzdGFtcCBkb2VzIG5vdCBmaXQgaW4gdGltZV90LgotCi0tIElzc3VlICMxNDE4MDogZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZAotICBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkgbm93IHJvdW5kIG1pY3Jvc2Vjb25kcyB0b3dhcmRzIHplcm8KLSAgaW5zdGVhZCBvZiByb3VuZGluZyB0byBuZWFyZXN0IHdpdGggdGllcyBnb2luZyBhd2F5IGZyb20gemVyby4KLQotLSBJc3N1ZSAjMTA1NDM6IEZpeCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSB3aXRoIEp5dGhvbiBieXRlY29kZSBmaWxlcy4KLQotLSBJc3N1ZSAjMTE3ODg2MzogU2VwYXJhdGUgaW5pdGlhbGlzYXRpb24gZnJvbSBzZXR0aW5nIHdoZW4gaW5pdGlhbGl6aW5nCi0gIFRraW50ZXIuVmFyaWFibGVzOyBoYXJtb25pemUgZXhjZXB0aW9ucyB0byBWYWx1ZUVycm9yOyBvbmx5IGRlbGV0ZSB2YXJpYWJsZXMKLSAgdGhhdCBoYXZlIG5vdCBiZWVuIGRlbGV0ZWQ7IGFzc2VydCB0aGF0IHZhcmlhYmxlIG5hbWVzIGFyZSBzdHJpbmdzLgotCi0tIElzc3VlICMxNDEwNDogSW1wbGVtZW50IHRpbWUubW9ub3RvbmljKCkgb24gTWFjIE9TIFgsIHBhdGNoIHdyaXR0ZW4gYnkKLSAgTmljaG9sYXMgUmlsZXkuCi0KLS0gSXNzdWUgIzEzMzk0OiB0aGUgYWlmYyBtb2R1bGUgbm93IHVzZXMgd2FybmluZ3Mud2FybigpIHRvIHNpZ25hbCB3YXJuaW5ncy4KLQotLSBJc3N1ZSAjMTQyNTI6IEZpeCBzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZSgpIHRvIG5vdCByYWlzZSBhbiBlcnJvciB1bmRlcgotICBXaW5kb3dzIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGFscmVhZHkgZXhpdGVkLgotCi0tIElzc3VlICMxNDIyMzogY3Vyc2VzLmFkZGNoKCkgaXMgbm8gbW9yZSBsaW1pdGVkIHRvIHRoZSByYW5nZSAwLTI1NSB3aGVuIHRoZQotICBQeXRob24gY3Vyc2VzIGlzIG5vdCBsaW5rZWQgdG8gbGlibmN1cnNlc3cuIEl0IHdhcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZAotICBpbiBQeXRob24gMy4zYTEuCi0KLS0gSXNzdWUgIzE0MTY4OiBDaGVjayBmb3IgcHJlc2VuY2Ugb2YgRWxlbWVudC5fYXR0cnMgaW4gbWluaWRvbSBiZWZvcmUKLSAgYWNjZXNzaW5nIGl0LgotCi0tIElzc3VlICMxMjMyODogRml4IG11bHRpcHJvY2Vzc2luZydzIHVzZSBvZiBvdmVybGFwcGVkIEkvTyBvbiBXaW5kb3dzLgotICBBbHNvLCBhZGQgYSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi53YWl0KHJsaXN0LCB0aW1lb3V0PU5vbmUpIGZ1bmN0aW9uCi0gIGZvciBwb2xsaW5nIG11bHRpcGxlIG9iamVjdHMgYXQgb25jZS4gIFBhdGNoIGJ5IHNidC4KLQotLSBJc3N1ZSAjMTQwMDc6IEFjY2VwdCBpbmNvbXBsZXRlIFRyZWVCdWlsZGVyIG9iamVjdHMgKG1pc3Npbmcgc3RhcnQsIGVuZCwKLSAgZGF0YSBvciBjbG9zZSBtZXRob2QpIGZvciB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGFzIHdlbGwuCi0gIERyb3AgdGhlIG5vLW9wIFRyZWVCdWlsZGVyKCkueG1sKCkgbWV0aG9kIGZyb20gdGhlIEMgaW1wbGVtZW50YXRpb24uCi0KLS0gSXNzdWUgIzE0MjEwOiBwZGIgbm93IGhhcyB0YWItY29tcGxldGlvbiBub3Qgb25seSBmb3IgY29tbWFuZCBuYW1lcywgYnV0Ci0gIGFsc28gZm9yIHRoZWlyIGFyZ3VtZW50cywgd2hlcmV2ZXIgcG9zc2libGUuCi0KLS0gSXNzdWUgIzE0MzEwOiBTb2NrZXRzIGNhbiBub3cgYmUgd2l0aCBvdGhlciBwcm9jZXNzZXMgb24gV2luZG93cyB1c2luZwotICB0aGUgYXBpIHNvY2tldC5zb2NrZXQuc2hhcmUoKSBhbmQgc29ja2V0LmZyb21zaGFyZSgpLgotCi0tIElzc3VlICMxMDU3NjogVGhlIGdjIG1vZHVsZSBub3cgaGFzIGEgJ2NhbGxiYWNrcycgbWVtYmVyIHRoYXQgd2lsbCBnZXQKLSAgY2FsbGVkIHdoZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHRha2VzIHBsYWNlLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTQ1NTc6IEZpeCBleHRlbnNpb25zIGJ1aWxkIG9uIEhQLVVYLiBQYXRjaCBieSBBZGkgUm9pYmFuLgotCi0tIElzc3VlICMxNDM4NzogRG8gbm90IGluY2x1ZGUgYWNjdS5oIGZyb20gUHl0aG9uLmguCi0KLS0gSXNzdWUgIzE0MzU5OiBPbmx5IHVzZSBPX0NMT0VYRUMgaW4gX3Bvc2l4bW9kdWxlLmMgaWYgaXQgaXMgZGVmaW5lZC4KLSAgQmFzZWQgb24gcGF0Y2ggZnJvbSBIZXJ2w6kgQ29hdGFuaGF5LgotCi0tIElzc3VlICMxNDMyMTogRG8gbm90IHJ1biBwZ2VuIGR1cmluZyB0aGUgYnVpbGQgaWYgZmlsZXMgYXJlIHVwIHRvIGRhdGUuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTQwMzQ6IGFkZGVkIHRoZSBhcmdwYXJzZSB0dXRvcmlhbC4KLQotLSBJc3N1ZSAjMTQzMjQ6IEZpeCBjb25maWd1cmUgdGVzdHMgZm9yIGNyb3NzIGJ1aWxkcy4KLQotLSBJc3N1ZSAjMTQzMjc6IENhbGwgQUNfQ0FOT05JQ0FMX0hPU1QgaW4gY29uZmlndXJlLmFjIGFuZCBjaGVjayBpbgotICBjb25maWcue2d1ZXNzLHN1Yn0uIERvbid0IHVzZSB1bmFtZSBjYWxscyBmb3IgY3Jvc3MgYnVpbGRzLgotCi1FeHRlbnNpb24gTW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjOTA0MTogQW4gaXNzdWUgaW4gY3R5cGVzLmNfbG9uZ2RvdWJsZSwgY3R5cGVzLmNfZG91YmxlLCBhbmQKLSAgY3R5cGVzLmNfZmxvYXQgdGhhdCBjYXVzZWQgYW4gaW5jb3JyZWN0IGV4Y2VwdGlvbiB0byBiZSByZXR1cm5lZCBpbiB0aGUKLSAgY2FzZSBvZiBvdmVyZmxvdyBoYXMgYmVlbiBmaXhlZC4KLQotLSBJc3N1ZSAjMTQyMTI6IFRoZSByZSBtb2R1bGUgZGlkbid0IHJldGFpbiBhIHJlZmVyZW5jZSB0byBidWZmZXJzIGl0IHdhcwotICBzY2FubmluZywgcmVzdWx0aW5nIGluIHNlZ2ZhdWx0cy4KLQotLSBJc3N1ZSAjMTQyNTk6IFRoZSBmaW5kaXRlcigpIG1ldGhvZCBvZiByZSBvYmplY3RzIGRpZCBub3QgdGFrZSBhbnkKLSAga2V5d29yZCBhcmd1bWVudHMsIGNvbnRyYXJ5IHRvIHRoZSBkb2N1bWVudGF0aW9uLgotCi0tIElzc3VlICMxMDE0MjogU3VwcG9ydCBmb3IgU0VFS19IT0xFL1NFRUtfREFUQSAoZm9yIGV4YW1wbGUsIHVuZGVyIFpGUykuCi0KLVRlc3RzCi0tLS0tLQotCi0tIElzc3VlICMxNDQ0MjogQWRkIG1pc3NpbmcgZXJybm8gaW1wb3J0IGluIHRlc3Rfc210cGxpYi4KLQotLSBJc3N1ZSAjODMxNTogKHBhcnRpYWwgZml4KSBweXRob24gLW0gdW5pdHRlc3QgdGVzdC50ZXN0X2VtYWlsIG5vdyB3b3Jrcy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDUtTWFyLTIwMTIqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNDE3MjogRml4IHJlZmVyZW5jZSBsZWFrIHdoZW4gbWFyc2hhbGxpbmcgYSBidWZmZXItbGlrZSBvYmplY3QKLSAgKG90aGVyIHRoYW4gYSBieXRlcyBvYmplY3QpLgotCi0tIElzc3VlICMxMzUyMTogZGljdC5zZXRkZWZhdWx0KCkgbm93IGRvZXMgb25seSBvbmUgbG9va3VwIGZvciB0aGUgZ2l2ZW4ga2V5LAotICBtYWtpbmcgaXQgImF0b21pYyIgZm9yIG1hbnkgcHVycG9zZXMuICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgotCi0tIFBFUCA0MDksIElzc3VlICM2MjEwOiAicmFpc2UgWCBmcm9tIE5vbmUiIGlzIG5vdyBzdXBwb3J0ZWQgYXMgYSBtZWFucyBvZgotICBzdXBwcmVzc2luZyB0aGUgZGlzcGxheSBvZiB0aGUgY2hhaW5lZCBleGNlcHRpb24gY29udGV4dC4gVGhlIGNoYWluZWQKLSAgY29udGV4dCBzdGlsbCByZW1haW5zIGF2YWlsYWJsZSBhcyB0aGUgX19jb250ZXh0X18gYXR0cmlidXRlLgotCi0tIElzc3VlICMxMDE4MTogTmV3IG1lbW9yeXZpZXcgaW1wbGVtZW50YXRpb24gZml4ZXMgbXVsdGlwbGUgb3duZXJzaGlwCi0gIGFuZCBsaWZldGltZSBpc3N1ZXMgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFB5X2J1ZmZlciBtZW1iZXJzICgjOTk5MCkKLSAgYXMgd2VsbCBhcyBjcmFzaGVzICgjODMwNSwgIzc0MzMpLiBNYW55IG5ldyBmZWF0dXJlcyBoYXZlIGJlZW4gYWRkZWQKLSAgKFNlZSB3aGF0c25ldy8zLjMpLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZCBleHRlbnNpdmVseS4KLSAgVGhlIG5kYXJyYXkgdGVzdCBvYmplY3QgZnJvbSBfdGVzdGJ1ZmZlci5jIGltcGxlbWVudHMgYWxsIGFzcGVjdHMgb2YKLSAgUEVQLTMxMTgsIHNvIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgdG93YXJkcyB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24KLSAgb2YgdGhlIFBFUCBjYW4gcHJvY2VlZCBpbiBhIHRlc3QtZHJpdmVuIG1hbm5lci4KLQotICBUaGFua3MgdG8gTmljayBDb2dobGFuLCBBbnRvaW5lIFBpdHJvdSBhbmQgUGF1bGkgVmlydGFuZW4gZm9yIHJldmlldwotICBhbmQgbWFueSBpZGVhcy4KLQotLSBJc3N1ZSAjMTI4MzQ6IEZpeCBpbmNvcnJlY3QgcmVzdWx0cyBvZiBtZW1vcnl2aWV3LnRvYnl0ZXMoKSBmb3IKLSAgbm9uLWNvbnRpZ3VvdXMgYXJyYXlzLgotCi0tIElzc3VlICM1MjMxOiBJbnRyb2R1Y2UgbWVtb3J5dmlldy5jYXN0KCkgbWV0aG9kIHRoYXQgYWxsb3dzIGNoYW5naW5nCi0gIGZvcm1hdCBhbmQgc2hhcGUgd2l0aG91dCBtYWtpbmcgYSBjb3B5IG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KLQotLSBJc3N1ZSAjMTQwODQ6IEZpeCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlIHdpdGggYQotICBiYWQgZW5jb2RpbmcuCi0KLS0gVXBncmFkZSBVbmljb2RlIGRhdGEgdG8gVW5pY29kZSA2LjEuCi0KLS0gSXNzdWUgIzE0MDQwOiBSZW1vdmUgcmFyZWx5IHVzZWQgZmlsZSBuYW1lIHN1ZmZpeGVzIGZvciBDIGV4dGVuc2lvbnMKLSAgKHVuZGVyIFBPU0lYIG1haW5seSkuCi0KLS0gSXNzdWUgIzE0MDUxOiBBbGxvdyBhcmJpdHJhcnkgYXR0cmlidXRlcyB0byBiZSBzZXQgb2YgY2xhc3NtZXRob2QgYW5kCi0gIHN0YXRpY21ldGhvZC4KLQotLSBJc3N1ZSAjMTM3MDM6IG9DRVJULTIwMTEtMDAzOiBSYW5kb21pemUgaGFzaGVzIG9mIHN0ciBhbmQgYnl0ZXMgdG8gcHJvdGVjdAotICBhZ2FpbnN0IGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFja3MgZHVlIHRvIGhhc2ggY29sbGlzaW9ucyB3aXRoaW4gdGhlIGRpY3QgYW5kCi0gIHNldCB0eXBlcy4gIFBhdGNoIGJ5IERhdmlkIE1hbGNvbG0sIGJhc2VkIG9uIHdvcmsgYnkgVmljdG9yIFN0aW5uZXIuCi0KLS0gSXNzdWUgIzEzMDIwOiBGaXggYSByZWZlcmVuY2UgbGVhayB3aGVuIGFsbG9jYXRpbmcgYSBzdHJ1Y3RzZXF1ZW5jZSBvYmplY3QKLSAgZmFpbHMuICBQYXRjaCBieSBTdW1hbiBTYWhhLgotCi0tIElzc3VlICMxMzkwODogUmVhZHkgdHlwZXMgcmV0dXJuZWQgZnJvbSBQeVR5cGVfRnJvbVNwZWMuCi0KLS0gSXNzdWUgIzExMjM1OiBGaXggT3ZlcmZsb3dFcnJvciB3aGVuIHRyeWluZyB0byBpbXBvcnQgYSBzb3VyY2UgZmlsZSB3aG9zZQotICBtb2RpZmljYXRpb24gdGltZSBkb2Vzbid0IGZpdCBpbiBhIDMyLWJpdCB0aW1lc3RhbXAuCi0KLS0gSXNzdWUgIzEyNzA1OiBBIFN5bnRheEVycm9yIGV4Y2VwdGlvbiBpcyBub3cgcmFpc2VkIHdoZW4gYXR0ZW1wdGluZyB0bwotICBjb21waWxlIG11bHRpcGxlIHN0YXRlbWVudHMgYXMgYSBzaW5nbGUgaW50ZXJhY3RpdmUgc3RhdGVtZW50LgotCi0tIEZpeCB0aGUgYnVpbHRpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY29kZSB0byBzdG9yZSB0aGUgaW5pdCBmdW5jdGlvbiBmb3IKLSAgZnV0dXJlIHJlaW5pdGlhbGl6YXRpb24uCi0KLS0gSXNzdWUgIzgwNTI6IFRoZSBwb3NpeCBzdWJwcm9jZXNzIG1vZHVsZSB3b3VsZCB0YWtlIGEgbG9uZyB0aW1lIGNsb3NpbmcKLSAgYWxsIHBvc3NpYmxlIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIGNoaWxkIHByb2Nlc3MgcmF0aGVyIHRoYW4ganVzdCBvcGVuCi0gIGZpbGUgZGVzY3JpcHRvcnMuICBJdCBub3cgY2xvc2VzIG9ubHkgdGhlIG9wZW4gZmRzIGlmIHBvc3NpYmxlIGZvciB0aGUKLSAgZGVmYXVsdCBjbG9zZV9mZHM9VHJ1ZSBiZWhhdmlvci4KLQotLSBJc3N1ZSAjMTM2Mjk6IFJlbnVtYmVyIHRoZSB0b2tlbnMgaW4gdG9rZW4uaCBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIGluZGV4ZXMKLSAgaW50byBfUHlQYXJzZXJfVG9rZW5OYW1lcy4KLQotLSBJc3N1ZSAjMTM3NTI6IEFkZCBhIGNhc2Vmb2xkKCkgbWV0aG9kIHRvIHN0ci4KLQotLSBJc3N1ZSAjMTM3NjE6IEFkZCBhICJmbHVzaCIga2V5d29yZCBhcmd1bWVudCB0byB0aGUgcHJpbnQoKSBmdW5jdGlvbiwKLSAgdXNlZCB0byBlbnN1cmUgZmx1c2hpbmcgdGhlIG91dHB1dCBzdHJlYW0uCi0KLS0gSXNzdWUgIzEzNjQ1OiBweWMgZmlsZXMgbm93IGNvbnRhaW4gdGhlIHNpemUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlCi0gIGNvZGUsIHRvIGF2b2lkIHRpbWVzdGFtcCBjb2xsaXNpb25zIChlc3BlY2lhbGx5IG9uIGZpbGVzeXN0ZW1zIHdpdGggYSBsb3cKLSAgdGltZXN0YW1wIHJlc29sdXRpb24pIHdoZW4gY2hlY2tpbmcgZm9yIGZyZXNobmVzcyBvZiB0aGUgYnl0ZWNvZGUuCi0KLS0gUEVQIDM4MCwgSXNzdWUgIzExNjgyOiBBZGQgInlpZWxkIGZyb20gPHg+IiB0byBzdXBwb3J0IGVhc3kgZGVsZWdhdGlvbiB0bwotICBzdWJnZW5lcmF0b3JzIChpbml0aWFsIHBhdGNoIGJ5IEdyZWcgRXdpbmcsIGludGVncmF0aW9uIGludG8gMy4zIGJ5Ci0gIFJlbmF1ZCBCbGFuY2gsIFJ5YW4gS2VsbHksIFpiaWduaWV3IErEmWRyemVqZXdza2ktU3ptZWsgYW5kIE5pY2sgQ29naGxhbikKLQotLSBJc3N1ZSAjMTM3NDg6IFJhdyBieXRlcyBsaXRlcmFscyBjYW4gbm93IGJlIHdyaXR0ZW4gd2l0aCB0aGUgYGByYmBgIHByZWZpeAotICBhcyB3ZWxsIGFzIGBgYnJgYC4KLQotLSBJc3N1ZSAjMTI3MzY6IFVzZSBmdWxsIHVuaWNvZGUgY2FzZSBtYXBwaW5ncyBmb3IgdXBwZXIsIGxvd2VyLCBhbmQgdGl0bGUgY2FzZS4KLQotLSBJc3N1ZSAjMTI3NjA6IEFkZCBhIGNyZWF0ZSBtb2RlIHRvIG9wZW4oKS4gUGF0Y2ggYnkgRGF2aWQgVG93bnNoZW5kLgotCi0tIElzc3VlICMxMzczODogU2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgYnl0ZXMubG93ZXIoKSBhbmQgYnl0ZXMudXBwZXIoKS4KLQotLSBJc3N1ZSAjMTM1Nzc6IEJ1aWx0LWluIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBub3cgaGF2ZSBhIF9fcXVhbG5hbWVfXy4KLSAgUGF0Y2ggYnkgc2J0LgotCi0tIElzc3VlICM2Njk1OiBGdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBydW5zIG5vdyBjbGVhciB0aGUgZnJlZWxpc3Qgb2Ygc2V0Ci0gIG9iamVjdHMuICBJbml0aWFsIHBhdGNoIGJ5IE1hdHRoaWFzIFRyb2ZmYWVzLgotCi0tIEZpeCBPU0Vycm9yLl9faW5pdF9fIGFuZCBPU0Vycm9yLl9fbmV3X18gc28gdGhhdCBlYWNoIG9mIHRoZW0gY2FuIGJlCi0gIG92ZXJyaWRlbiBhbmQgdGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoZm9sbG93dXAgdG8gaXNzdWUgIzEyNTU1KS4KLQotLSBGaXggdGhlIGZpeCBmb3IgaXNzdWUgIzEyMTQ5OiBpdCB3YXMgaW5jb3JyZWN0LCBhbHRob3VnaCBpdCBoYWQgdGhlIHNpZGUKLSAgZWZmZWN0IG9mIGFwcGVhcmluZyB0byByZXNvbHZlIHRoZSBpc3N1ZS4gIFRoYW5rcyB0byBNYXJrIFNoYW5ub24gZm9yCi0gIG5vdGljaW5nLgotCi0tIElzc3VlICMxMzUwNTogUGlja2xlIGJ5dGVzIG9iamVjdHMgaW4gYSB3YXkgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKLSAgUHl0aG9uIDIgd2hlbiB1c2luZyBwcm90b2NvbHMgPD0gMi4KLQotLSBJc3N1ZSAjMTExNDc6IEZpeCBhbiB1bnVzZWQgYXJndW1lbnQgaW4gX1B5X0FOTk9UQVRFX01FTU9SWV9PUkRFUi4gIChGaXgKLSAgZ2l2ZW4gYnkgQ2FtcGJlbGwgQmFydG9uKS4KLQotLSBJc3N1ZSAjMTM1MDM6IFVzZSBhIG1vcmUgZWZmaWNpZW50IHJlZHVjdGlvbiBmb3JtYXQgZm9yIGJ5dGVhcnJheXMgd2l0aAotICBwaWNrbGUgcHJvdG9jb2wgPj0gMy4gIFRoZSBvbGQgcmVkdWN0aW9uIGZvcm1hdCBpcyBrZXB0IHdpdGggb2xkZXIgcHJvdG9jb2xzCi0gIGluIG9yZGVyIHRvIGFsbG93IHVucGlja2xpbmcgdW5kZXIgUHl0aG9uIDIuICBQYXRjaCBieSBJcm1lbiBkZSBKb25nLgotCi0tIElzc3VlICM3MTExOiBQeXRob24gY2FuIG5vdyBiZSBydW4gd2l0aG91dCBhIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyCi0gIHN0cmVhbS4gIEl0IHdhcyBhbHJlYWR5IHRoZSBjYXNlIHdpdGggUHl0aG9uIDIuICBIb3dldmVyLCB0aGUgY29ycmVzcG9uZGluZwotICBzeXMgbW9kdWxlIGVudHJpZXMgYXJlIG5vdyBzZXQgdG8gTm9uZSAoaW5zdGVhZCBvZiBhbiB1bnVzYWJsZSBmaWxlIG9iamVjdCkuCi0KLS0gSXNzdWUgIzExODQ5OiBFbnN1cmUgdGhhdCBmcmVlKClkIG1lbW9yeSBhcmVuYXMgYXJlIHJlYWxseSByZWxlYXNlZAotICBvbiBQT1NJWCBzeXN0ZW1zIHN1cHBvcnRpbmcgYW5vbnltb3VzIG1lbW9yeSBtYXBwaW5ncy4gIFBhdGNoIGJ5Ci0gIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KLQotLSBQRVAgMzE1NSAvIGlzc3VlICMxMzQ0ODogUXVhbGlmaWVkIG5hbWUgZm9yIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KLQotLSBJc3N1ZSAjMTM0MzY6IEZpeCBhIGJvZ3VzIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBBU1Qgb2JqZWN0IHdhcyBwYXNzZWQKLSAgYW4gaW52YWxpZCBpbnRlZ2VyIHZhbHVlLgotCi0tIElzc3VlICMxMzQxMTogbWVtb3J5dmlldyBvYmplY3RzIGFyZSBub3cgaGFzaGFibGUgd2hlbiB0aGUgdW5kZXJseWluZwotICBvYmplY3QgaXMgaGFzaGFibGUuCi0KLS0gSXNzdWUgIzEzMzM4OiBIYW5kbGUgYWxsIGVudW1lcmF0aW9ucyBpbiBfUHlfQU5OT1RBVEVfTUVNT1JZX09SREVSCi0gIHRvIGFsbG93IGNvbXBpbGluZyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIC1Xc3dpdGNoLWVudW0gb24gZ2NjLgotICBJbml0aWFsIHBhdGNoIGJ5IEZsb3JpcyBCcnV5bm9vZ2hlLgotCi0tIElzc3VlICMxMDIyNzogQWRkIGFuIGFsbG9jYXRpb24gY2FjaGUgZm9yIGEgc2luZ2xlIHNsaWNlIG9iamVjdC4gIFBhdGNoIGJ5Ci0gIFN0ZWZhbiBCZWhuZWwuCi0KLS0gSXNzdWUgIzEzMzkzOiBCdWZmZXJlZFJlYWRlci5yZWFkMSgpIG5vdyBhc2tzIHRoZSBmdWxsIHJlcXVlc3RlZCBzaXplIHRvCi0gIHRoZSByYXcgc3RyZWFtIGluc3RlYWQgb2YgbGltaXRpbmcgaXRzZWxmIHRvIHRoZSBidWZmZXIgc2l6ZS4KLQotLSBJc3N1ZSAjMTMzOTI6IFdyaXRpbmcgYSBweWMgZmlsZSBzaG91bGQgbm93IGJlIGF0b21pYyB1bmRlciBXaW5kb3dzIGFzIHdlbGwuCi0KLS0gSXNzdWUgIzEzMzMzOiBUaGUgVVRGLTcgZGVjb2RlciBub3cgYWNjZXB0cyBsb25lIHN1cnJvZ2F0ZXMgKHRoZSBlbmNvZGVyCi0gIGFscmVhZHkgYWNjZXB0cyB0aGVtKS4KLQotLSBJc3N1ZSAjMTMzODk6IEZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3NlcyBub3cgY2xlYXIgdGhlIGZyZWVsaXN0cyBmb3IKLSAgbGlzdCBhbmQgZGljdCBvYmplY3RzLiAgVGhleSBhbHJlYWR5IGNsZWFyZWQgb3RoZXIgZnJlZWxpc3RzIGluIHRoZQotICBpbnRlcnByZXRlci4KLQotLSBJc3N1ZSAjMTMzMjc6IFJlbW92ZSB0aGUgbmVlZCBmb3IgYW4gZXhwbGljaXQgTm9uZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50Ci0gIHRvIG9zLnV0aW1lLCBvcy5sdXRpbWVzLCBvcy5mdXRpbWVzLCBvcy5mdXRpbWVucywgb3MuZnV0aW1lc2F0LCBpbgotICBvcmRlciB0byB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgdGltZS4gQWxzbyBhZGRlZCBrZXl3b3JkIGFyZ3VtZW50Ci0gIGhhbmRsaW5nIHRvIG9zLnV0aW1lbnNhdCBpbiBvcmRlciB0byByZW1vdmUgdGhlIG5lZWQgZm9yIGV4cGxpY2l0IE5vbmUuCi0KLS0gSXNzdWUgIzEzMzUwOiBTaW1wbGlmeSBzb21lIEMgY29kZSBieSByZXBsYWNpbmcgbW9zdCB1c2FnZXMgb2YKLSAgUHlVbmljb2RlX0Zvcm1hdCBieSBQeVVuaWNvZGVfRnJvbUZvcm1hdC4KLQotLSBJc3N1ZSAjMTMzNDI6IGlucHV0KCkgdXNlZCB0byBpZ25vcmUgc3lzLnN0ZGluJ3MgYW5kIHN5cy5zdGRvdXQncyB1bmljb2RlCi0gIGVycm9yIGhhbmRsZXIgaW4gaW50ZXJhY3RpdmUgbW9kZSAod2hlbiBjYWxsaW5nIGludG8gUHlPU19SZWFkbGluZSgpKS4KLQotLSBJc3N1ZSAjOTg5NjogQWRkIHN0YXJ0LCBzdG9wLCBhbmQgc3RlcCBhdHRyaWJ1dGVzIHRvIHJhbmdlIG9iamVjdHMuCi0KLS0gSXNzdWUgIzEzMzQzOiBGaXggYSBTeXN0ZW1FcnJvciB3aGVuIGEgbGFtYmRhIGV4cHJlc3Npb24gdXNlcyBhIGdsb2JhbAotICB2YXJpYWJsZSBpbiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGtleXdvcmQtb25seSBhcmd1bWVudDogYGBsYW1iZGEgKiwKLSAgYXJnPUdMT0JBTF9OQU1FOiBOb25lYGAKLQotLSBJc3N1ZSAjMTI3OTc6IEFkZGVkIGN1c3RvbSBvcGVuZXIgcGFyYW1ldGVyIHRvIGJ1aWx0aW4gb3BlbigpIGFuZAotICBGaWxlSU8ub3BlbigpLgotCi0tIElzc3VlICMxMDUxOTogQXZvaWQgdW5uZWNlc3NhcnkgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGluCi0gIHNldG9iamVjdC5jLgotCi0tIElzc3VlICMxMDM2MzogRGVhbGxvY2F0ZSBnbG9iYWwgbG9ja3MgaW4gUHlfRmluYWxpemUoKS4KLQotLSBJc3N1ZSAjMTMwMTg6IEZpeCByZWZlcmVuY2UgbGVha3MgaW4gZXJyb3IgcGF0aHMgaW4gZGljdG9iamVjdC5jLgotICBQYXRjaCBieSBTdW1hbiBTYWhhLgotCi0tIElzc3VlICMxMzIwMTogRGVmaW5lICc9PScgYW5kICchPScgdG8gY29tcGFyZSByYW5nZSBvYmplY3RzIGJhc2VkIG9uCi0gIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nIGJhc2VkIG9uCi0gIG9iamVjdCBpZGVudGl0eSkuCi0KLS0gSXNzdWUgIzEyOTQyMzI6IEluIGEgZmV3IGNhc2VzIGludm9sdmluZyBtZXRhY2xhc3MgaW5oZXJpdGFuY2UsIHRoZQotICBpbnRlcnByZXRlciB3b3VsZCBzb21ldGltZXMgaW52b2tlIHRoZSB3cm9uZyBtZXRhY2xhc3Mgd2hlbiBidWlsZGluZyBhIG5ldwotICBjbGFzcyBvYmplY3QuIFRoZXNlIGNhc2VzIG5vdyBiZWhhdmUgY29ycmVjdGx5LiBQYXRjaCBieSBEYW5pZWwgVXJiYW4uCi0KLS0gSXNzdWUgIzEyNzUzOiBBZGQgc3VwcG9ydCBmb3IgVW5pY29kZSBuYW1lIGFsaWFzZXMgYW5kIG5hbWVkIHNlcXVlbmNlcy4KLSAgQm90aCBgYHVuaWNvZGVkYXRhLmxvb2t1cCgpYGAgYW5kICdcTnsuLi59JyBub3cgcmVzb2x2ZSBhbGlhc2VzLAotICBhbmQgYGB1bmljb2RlZGF0YS5sb29rdXAoKWBgIHJlc29sdmVzIG5hbWVkIHNlcXVlbmNlcyB0b28uCi0KLS0gSXNzdWUgIzEyMTcwOiBUaGUgY291bnQoKSwgZmluZCgpLCByZmluZCgpLCBpbmRleCgpIGFuZCByaW5kZXgoKSBtZXRob2RzCi0gIG9mIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBub3cgYWNjZXB0IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyNTUKLSAgYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuICBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KLQotLSBJc3N1ZSAjMTI2MDQ6IFZUUkFDRSBtYWNybyBleHBhbmRlZCB0byBuby1vcCBpbiBfc3JlLmMgdG8gYXZvaWQgY29tcGlsZXIKLSAgd2FybmluZ3MuIFBhdGNoIGJ5IEpvc2ggVHJpcGxldHQgYW5kIFBldHJpIExlaHRpbmVuLgotCi0tIElzc3VlICMxMjI4MTogUmV3cml0ZSB0aGUgTUJDUyBjb2RlYyB0byBoYW5kbGUgY29ycmVjdGx5IHJlcGxhY2UgYW5kIGlnbm9yZQotICBlcnJvciBoYW5kbGVycyBvbiBhbGwgV2luZG93cyB2ZXJzaW9ucy4gVGhlIE1CQ1MgY29kZWMgaXMgbm93IHN1cHBvcnRpbmcgYWxsCi0gIGVycm9yIGhhbmRsZXJzLCBpbnN0ZWFkIG9mIG9ubHkgcmVwbGFjZSB0byBlbmNvZGUgYW5kIGlnbm9yZSB0byBkZWNvZGUuCi0KLS0gSXNzdWUgIzEzMTg4OiBXaGVuIGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IHRyYWNlYmFjayBhcmd1bWVudCwKLSAgZ2VuZXJhdG9yLnRocm93KCkgbm93IGdldHMgdGhlIHRyYWNlYmFjayBmcm9tIHRoZSBwYXNzZWQgZXhjZXB0aW9uJ3MKLSAgYGBfX3RyYWNlYmFja19fYGAgYXR0cmlidXRlLiAgUGF0Y2ggYnkgUGV0cmkgTGVodGluZW4uCi0KLS0gSXNzdWUgIzEzMTQ2OiBXcml0aW5nIGEgcHljIGZpbGUgaXMgbm93IGF0b21pYyB1bmRlciBQT1NJWC4KLQotLSBJc3N1ZSAjNzgzMzogRXh0ZW5zaW9uIG1vZHVsZXMgYnVpbHQgdXNpbmcgZGlzdHV0aWxzIG9uIFdpbmRvd3Mgd2lsbCBubwotICBsb25nZXIgaW5jbHVkZSBhICJtYW5pZmVzdCIgdG8gcHJldmVudCB0aGVtIGZhaWxpbmcgYXQgaW1wb3J0IHRpbWUgaW4gc29tZQotICBlbWJlZGRlZCBzaXR1YXRpb25zLgotCi0tIFBFUCAzMTUxIC8gaXNzdWUgIzEyNTU1OiByZXdvcmtpbmcgdGhlIE9TIGFuZCBJTyBleGNlcHRpb24gaGllcmFyY2h5LgotCi0tIEFkZCBpbnRlcm5hbCBBUEkgZm9yIHN0YXRpYyBzdHJpbmdzIChfUHlfaWRlbnRpZmllciBldCBhbC4pLgotCi0tIElzc3VlICMxMzA2MzogdGhlIFdpbmRvd3MgZXJyb3IgRVJST1JfTk9fREFUQSAobnVtYmVyZWQgMjMyIGFuZCBkZXNjcmliZWQKLSAgYXMgIlRoZSBwaXBlIGlzIGJlaW5nIGNsb3NlZCIpIGlzIG5vdyBtYXBwZWQgdG8gUE9TSVggZXJybm8gRVBJUEUKLSAgKHByZXZpb3VzbHkgRUlOVkFMKS4KLQotLSBJc3N1ZSAjMTI5MTE6IEZpeCBtZW1vcnkgY29uc3VtcHRpb24gd2hlbiBjYWxjdWxhdGluZyB0aGUgcmVwcigpIG9mIGh1Z2UKLSAgdHVwbGVzIG9yIGxpc3RzLgotCi0tIFBFUCAzOTM6IGZsZXhpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbi4gVGhhbmtzIHRvIFRvcnN0ZW4gQmVja2VyIGZvciB0aGUKLSAgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwgYW5kIFZpY3RvciBTdGlubmVyIGZvciB2YXJpb3VzIGJ1ZyBmaXhlcy4KLQotLSBJc3N1ZSAjMTQwODE6IFRoZSAnc2VwJyBhbmQgJ21heHNwbGl0JyBwYXJhbWV0ZXIgdG8gc3RyLnNwbGl0LCBieXRlcy5zcGxpdCwKLSAgYW5kIGJ5dGVhcnJheS5zcGxpdCBtYXkgbm93IGJlIHBhc3NlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjMTMwMTI6IFRoZSAna2VlcGVuZHMnIHBhcmFtZXRlciB0byBzdHIuc3BsaXRsaW5lcyBtYXkgbm93IGJlIHBhc3NlZAotICBhcyBhIGtleXdvcmQgYXJndW1lbnQ6ICJteV9zdHJpbmcuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSIuICBUaGUgc2FtZQotICBjaGFuZ2UgYWxzbyBhcHBsaWVzIHRvIGJ5dGVzLnNwbGl0bGluZXMgYW5kIGJ5dGVhcnJheS5zcGxpdGxpbmVzLgotCi0tIElzc3VlICM3NzMyOiBEb24ndCBvcGVuIGEgZGlyZWN0b3J5IGFzIGEgZmlsZSBhbnltb3JlIHdoaWxlIGltcG9ydGluZyBhCi0gIG1vZHVsZS4gSWdub3JlIHRoZSBkaXJlY290cnkgaWYgaXRzIG5hbWUgbWF0Y2hzIHRoZSBtb2R1bGUgbmFtZSAoZS5nLgotICAiX19pbml0X18ucHkiKSBhbmQgcmFpc2UgYSBJbXBvcnRFcnJvciBpbnN0ZWFkLgotCi0tIElzc3VlICMxMzAyMTogTWlzc2luZyBkZWNyZWYgb24gYW4gZXJyb3IgcGF0aC4gIFRoYW5rcyB0byBTdW1hbiBTYWhhIGZvcgotICBmaW5kaW5nIHRoZSBidWcgYW5kIHByb3ZpZGluZyBhIHBhdGNoLgotCi0tIElzc3VlICMxMjk3MzogRml4IG92ZXJmbG93IGNoZWNrcyB0aGF0IHJlbGllZCBvbiB1bmRlZmluZWQgYmVoYXZpb3VyIGluCi0gIGxpc3RfcmVwZWF0IChsaXN0b2JqZWN0LmMpIGFuZCBpc2xpY2VfbmV4dCAoaXRlcnRvb2xzbW9kdWxlLmMpLiAgVGhlc2UgYnVncwotICBjYXVzZWQgdGVzdCBmYWlsdXJlcyB3aXRoIHJlY2VudCB2ZXJzaW9ucyBvZiBDbGFuZy4KLQotLSBJc3N1ZSAjMTI5MDQ6IG9zLnV0aW1lLCBvcy5mdXRpbWVzLCBvcy5sdXRpbWVzLCBhbmQgb3MuZnV0aW1lc2F0IG5vdyB3cml0ZQotICBhdGltZSBhbmQgbXRpbWUgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbiBvbiBtb2Rlcm4gUE9TSVggcGxhdGZvcm1zLgotCi0tIElzc3VlICMxMjgwMjogdGhlIFdpbmRvd3MgZXJyb3IgRVJST1JfRElSRUNUT1JZIChudW1iZXJlZCAyNjcpIGlzIG5vdwotICBtYXBwZWQgdG8gUE9TSVggZXJybm8gRU5PVERJUiAocHJldmlvdXNseSBFSU5WQUwpLgotCi0tIElzc3VlICM5MjAwOiBUaGUgc3RyLmlzKiBtZXRob2RzIG5vdyB3b3JrIHdpdGggc3RyaW5ncyB0aGF0IGNvbnRhaW4gbm9uLUJNUAotICBjaGFyYWN0ZXJzIGV2ZW4gaW4gbmFycm93IFVuaWNvZGUgYnVpbGRzLgotCi0tIElzc3VlICMxMjc5MTogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBlYXJseSB3aGVuIGEgZ2VuZXJhdG9yIGV4aXRzIHdpdGgKLSAgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICMxMjc3MzogTWFrZSBfX2RvY19fIG11dGFibGUgb24gdXNlci1kZWZpbmVkIGNsYXNzZXMuCi0KLS0gSXNzdWUgIzEyNzY2OiBSYWlzZSBhIFZhbHVlRXJyb3Igd2hlbiBjcmVhdGluZyBhIGNsYXNzIHdpdGggYSBjbGFzcyB2YXJpYWJsZQotICB0aGF0IGNvbmZsaWN0cyB3aXRoIGEgbmFtZSBpbiBfX3Nsb3RzX18uCi0KLS0gSXNzdWUgIzEyMjY2OiBGaXggc3RyLmNhcGl0YWxpemUoKSB0byBjb3JyZWN0bHkgdXBwZXJjYXNlL2xvd2VyY2FzZQotICB0aXRsZWNhc2VkIGFuZCBjYXNlZCBub24tbGV0dGVyIGNoYXJhY3RlcnMuCi0KLS0gSXNzdWUgIzEyNzMyOiBJbiBuYXJyb3cgdW5pY29kZSBidWlsZHMsIGFsbG93IFVuaWNvZGUgaWRlbnRpZmllcnMgd2hpY2ggZmFsbAotICBvdXRzaWRlIHRoZSBCTVAuCi0KLS0gSXNzdWUgIzEyNTc1OiBWYWxpZGF0ZSB1c2VyLWdlbmVyYXRlZCBBU1QgYmVmb3JlIGl0IGlzIGNvbXBpbGVkLgotCi0tIE1ha2UgdHlwZShOb25lKSwgdHlwZShFbGxpcHNpcyksIGFuZCB0eXBlKE5vdEltcGxlbWVudGVkKSBjYWxsYWJsZS4gVGhleQotICByZXR1cm4gdGhlIHJlc3BlY3RpdmUgc2luZ2xldG9uIGluc3RhbmNlcy4KLQotLSBGb3JiaWQgc3VtbWluZyBieXRlcyB3aXRoIHN1bSgpLgotCi0tIFZlcmlmeSB0aGUgdHlwZXMgb2YgQVNUIHN0cmluZ3MgYW5kIGlkZW50aWZpZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGJlZm9yZQotICBjb21waWxpbmcgdGhlbS4KLQotLSBJc3N1ZSAjMTI2NDc6IFRoZSBOb25lIG9iamVjdCBub3cgaGFzIGEgX19ib29sX18oKSBtZXRob2QgdGhhdCByZXR1cm5zIEZhbHNlLgotICBGb3JtZXJseSwgYm9vbChOb25lKSByZXR1cm5lZCBGYWxzZSBvbmx5IGJlY2F1c2Ugb2Ygc3BlY2lhbCBjYXNlIGxvZ2ljCi0gIGluIFB5T2JqZWN0X0lzVHJ1ZSgpLgotCi0tIElzc3VlICMxMjU3OTogc3RyLmZvcm1hdF9tYXAoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiB1c2VkIG9uIGEKLSAgZm9ybWF0IHN0cmluZyB0aGF0IGNvbnRhaW5zIHBvc2l0aW9uYWwgZmllbGRzLiBJbml0aWFsIHBhdGNoIGJ5Ci0gIEp1bGlhbiBCZXJtYW4uCi0KLS0gSXNzdWUgIzEwMjcxOiBBbGxvdyB3YXJuaW5ncy5zaG93d2FybmluZygpIGJlIGFueSBjYWxsYWJsZS4KLQotLSBJc3N1ZSAjMTE2Mjc6IEZpeCBzZWdmYXVsdCB3aGVuIF9fbmV3X18gb24gYSBleGNlcHRpb24gcmV0dXJucyBhCi0gIG5vbi1leGNlcHRpb24gY2xhc3MuCi0KLS0gSXNzdWUgIzEyMTQ5OiBVcGRhdGUgdGhlIG1ldGhvZCBjYWNoZSBhZnRlciBhIHR5cGUncyBkaWN0aW9uYXJ5IGdldHMKLSAgY2xlYXJlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuICBUaGlzIGZpeGVzIGEgc2VnZmF1bHQgd2hlbiBhbiBpbnN0YW5jZQotICBhbmQgaXRzIHR5cGUgZ2V0IGNhdWdodCBpbiBhIHJlZmVyZW5jZSBjeWNsZSwgYW5kIHRoZSBpbnN0YW5jZSdzCi0gIGRlYWxsb2NhdG9yIGNhbGxzIG9uZSBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgdHlwZSAoZS5nLiB3aGVuIHN1YmNsYXNzaW5nCi0gIElPQmFzZSkuICBEaWFnbm9zaXMgYW5kIHBhdGNoIGJ5IERhdmlkZSBSaXp6by4KLQotLSBJc3N1ZSAjOTYxMSwgSXNzdWUgIzkwMTU6IEZpbGVJTy5yZWFkKCkgY2xhbXBzIHRoZSBsZW5ndGggdG8gSU5UX01BWCBvbiBXaW5kb3dzLgotCi0tIElzc3VlICM5NjQyOiBVbmlmb3JtaXplIHRoZSB0ZXN0cyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBtYmNzIGNvZGVjLCBhZGQKLSAgYSBuZXcgSEFWRV9NQkNTIGRlZmluZS4KLQotLSBJc3N1ZSAjOTY0MjogRml4IGZpbGVzeXN0ZW0gZW5jb2RpbmcgaW5pdGlhbGl6YXRpb246IHVzZSB0aGUgQU5TSSBjb2RlIHBhZ2UKLSAgb24gV2luZG93cyBpZiB0aGUgbWJjcyBjb2RlYyBpcyBub3QgYXZhaWxhYmxlLCBhbmQgZmFpbCB3aXRoIGEgZmF0YWwgZXJyb3IgaWYKLSAgd2UgY2Fubm90IGdldCB0aGUgbG9jYWxlIGVuY29kaW5nIChpZiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub3QgYXZhaWxhYmxlKQotICBpbnN0ZWFkIG9mIHVzaW5nIFVURi04LgotCi0tIFdoZW4gYSBnZW5lcmF0b3IgeWllbGRzLCBkbyBub3QgcmV0YWluIHRoZSBjYWxsZXIncyBleGNlcHRpb24gc3RhdGUgb24gdGhlCi0gIGdlbmVyYXRvci4KLQotLSBJc3N1ZSAjMTI0NzU6IFByZXZlbnQgZ2VuZXJhdG9ycyBmcm9tIGxlYWtpbmcgdGhlaXIgZXhjZXB0aW9uIHN0YXRlIGludG8gdGhlCi0gIGNhbGxlcidzIGZyYW1lIGFzIHRoZXkgcmV0dXJuIGZvciB0aGUgbGFzdCB0aW1lLgotCi0tIElzc3VlICMxMjI5MTogWW91IGNhbiBub3cgbG9hZCBtdWx0aXBsZSBtYXJzaGFsbGVkIG9iamVjdHMgZnJvbSBhIHN0cmVhbSwKLSAgd2l0aCBvdGhlciBkYXRhIGludGVybGVhdmVkIGJldHdlZW4gbWFyc2hhbGxlZCBvYmplY3RzLgotCi0tIElzc3VlICMxMjM1NjogV2hlbiByZXF1aXJlZCBwb3NpdGlvbmFsIG9yIGtleXdvcmQtb25seSBhcmd1bWVudHMgYXJlIG5vdAotICBnaXZlbiwgcHJvZHVjZSBhIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIG5hbWUocykgb2YgdGhlCi0gIG1pc3NpbmcgYXJndW1lbnRzLgotCi0tIElzc3VlICMxMjM3MDogRml4IHN1cGVyIHdpdGggbm8gYXJndW1lbnRzIHdoZW4gX19jbGFzc19fIGlzIG92ZXJyaWRlbiBpbiB0aGUKLSAgY2xhc3MgYm9keS4KLQotLSBJc3N1ZSAjMTIwODQ6IG9zLnN0YXQgb24gV2luZG93cyBub3cgd29ya3MgcHJvcGVybHkgd2l0aCByZWxhdGl2ZSBzeW1ib2xpYwotICBsaW5rcyB3aGVuIGNhbGxlZCBmcm9tIGFueSBkaXJlY3RvcnkuCi0KLS0gTG9vc2VuIHR5cGUgcmVzdHJpY3Rpb25zIG9uIHRoZSBfX2Rpcl9fIG1ldGhvZC4gX19kaXJfXyBjYW4gbm93IHJldHVybiBhbnkKLSAgc2VxdWVuY2UsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgbGlzdCBhbmQgc29ydGVkIGJ5IGRpcigpLgotCi0tIElzc3VlICMxMjI2NTogTWFrZSBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCBieSBwYXNzaW5nIGFuIGludmFsaWQgc2V0IG9mCi0gIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uIG1vcmUgaW5mb3JtYXRpdmUuCi0KLS0gSXNzdWUgIzEyMjI1OiBTdGlsbCBhbGxvdyBQeXRob24gdG8gYnVpbGQgaWYgUHl0aG9uIGlzIG5vdCBpbiBpdHMgaGcgcmVwbyBvcgotICBtZXJjdXJpYWwgaXMgbm90IGluc3RhbGxlZC4KLQotLSBJc3N1ZSAjMTE5NTogbXlfZmdldHMoKSBub3cgYWx3YXlzIGNsZWFycyBlcnJvcnMgYmVmb3JlIGNhbGxpbmcgZmdldHMoKS4gRml4Ci0gIHRoZSBmb2xsb3dpbmcgY2FzZTogc3lzLnN0ZGluLnJlYWQoKSBzdG9wcGVkIHdpdGggQ1RSTCtkIChlbmQgb2YgZmlsZSksCi0gIHJhd19pbnB1dCgpIGludGVycnVwdGVkIGJ5IENUUkwrYy4KLQotLSBJc3N1ZSAjMTIyMTY6IEFsbG93IHVuZXhwZWN0ZWQgRU9GIGVycm9ycyB0byBoYXBwZW4gb24gYW55IGxpbmUgb2YgdGhlIGZpbGUuCi0KLS0gSXNzdWUgIzEyMTk5OiBUaGUgVHJ5RXhjZXB0IGFuZCBUcnlGaW5hbGx5IGFuZCBBU1Qgbm9kZXMgaGF2ZSBiZWVuIHVuaWZpZWQKLSAgaW50byBhIFRyeSBub2RlLgotCi0tIElzc3VlICM5NjcwOiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgotICBNYWMgT1MgWCBhbmQgRnJlZUJTRCB0byByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgYSBjcmFzaCBpbnN0ZWFkIG9mIGEKLSAgIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIiBSdW50aW1lRXJyb3IgZXhjZXB0aW9uLgotICAocGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQotCi0tIElzc3VlICMxMjEwNjogVGhlIHVzZSBvZiB0aGUgbXVsdGlwbGUtd2l0aCBzaG9ydGhhbmQgc3ludGF4IGlzIG5vdyByZWZsZWN0ZWQKLSAgaW4gdGhlIEFTVC4KLQotLSBJc3N1ZSAjMTIxOTA6IFRyeSB0byB1c2UgdGhlIHNhbWUgZmlsZW5hbWUgb2JqZWN0IHdoZW4gY29tcGlsaW5nIHVubWFyc2hhbGxpbmcKLSAgYSBjb2RlIG9iamVjdHMgaW4gdGhlIHNhbWUgZmlsZS4KLQotLSBJc3N1ZSAjMTIxNjY6IE1vdmUgaW1wbGVtZW50YXRpb25zIG9mIGRpcigpIHNwZWNpYWxpemVkIGZvciB2YXJpb3VzIHR5cGVzIGludG8KLSAgdGhlIF9fZGlyX18oKSBtZXRob2RzIG9mIHRob3NlIHR5cGVzLgotCi0tIElzc3VlICM1NzE1OiBJbiBzb2NrZXRzZXJ2ZXIsIGNsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzLgotCi0tIENvcnJlY3QgbG9va3VwIG9mIF9fZGlyX18gb24gb2JqZWN0cy4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNhdXNlcyBlcnJvcnMKLSAgYmVzaWRlcyBBdHRyaWJ1dGVFcnJvciBmb3VuZCBvbiBsb29rdXAgdG8gYmUgcHJvcGFnYXRlZC4KLQotLSBJc3N1ZSAjMTIwNjA6IFVzZSBzaWdfYXRvbWljX3QgdHlwZSBhbmQgdm9sYXRpbGUga2V5d29yZCBpbiB0aGUgc2lnbmFsCi0gIG1vZHVsZS4gUGF0Y2ggd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCi0KLS0gSXNzdWUgIzE3NDY2NTY6IEFkZGVkIHRoZSBpZl9uYW1laW5kZXgsIGlmX2luZGV4dG9uYW1lLCBpZl9uYW1ldG9pbmRleAotICBtZXRob2RzIHRvIHRoZSBzb2NrZXQgbW9kdWxlLgotCi0tIElzc3VlICMxMjA0NDogRml4ZWQgc3VicHJvY2Vzcy5Qb3BlbiB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgdG8KLSAgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gZW5kIHdoZW4gZXhpdGluZyB0aGUgY29udGV4dCB0byBhdm9pZCB1bmludGVudGlvbmFsbHkKLSAgbGVhdmluZyB6b21iaWUgcHJvY2Vzc2VzIGFyb3VuZC4KLQotLSBJc3N1ZSAjMTE5NTogRml4IGlucHV0KCkgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgQ1RSTCtkIGFuZCB0aGVuIENUUkwrYywKLSAgY2xlYXIgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBhZnRlciBDVFJMK2QuCi0KLS0gSXNzdWUgIzE4NTY6IEF2b2lkIGNyYXNoZXMgYW5kIGxvY2t1cHMgd2hlbiBkYWVtb24gdGhyZWFkcyBydW4gd2hpbGUgdGhlCi0gIGludGVycHJldGVyIGlzIHNodXR0aW5nIGRvd247IGluc3RlYWQsIHRoZXNlIHRocmVhZHMgYXJlIG5vdyBraWxsZWQgd2hlbgotICB0aGV5IHRyeSB0byB0YWtlIHRoZSBHSUwuCi0KLS0gSXNzdWUgIzk3NTY6IFdoZW4gY2FsbGluZyBhIG1ldGhvZCBkZXNjcmlwdG9yIG9yIGEgc2xvdCB3cmFwcGVyIGRlc2NyaXB0b3IsCi0gIHRoZSBjaGVjayBvZiB0aGUgb2JqZWN0IHR5cGUgZG9lc24ndCByZWFkIHRoZSBfX2NsYXNzX18gYXR0cmlidXRlIGFueW1vcmUuCi0gIEZpeCBhIGNyYXNoIGlmIGEgY2xhc3Mgb3ZlcnJpZGUgaXRzIF9fY2xhc3NfXyBhdHRyaWJ1dGUgKGUuZy4gYSBwcm94eSBvZiB0aGUKLSAgc3RyIHR5cGUpLiBQYXRjaCB3cml0dGVuIGJ5IEFuZHJlYXMgU3TDvGhyay4KLQotLSBJc3N1ZSAjMTA1MTc6IEFmdGVyIGZvcmsoKSwgcmVpbml0aWFsaXplIHRoZSBUTFMgdXNlZCBieSB0aGUgUHlHSUxTdGF0ZV8qCi0gIEFQSXMsIHRvIGF2b2lkIGEgY3Jhc2ggd2l0aCB0aGUgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiBpbiBSSEVMIDUuICBQYXRjaAotICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCi0KLS0gSXNzdWUgIzEwOTE0OiBJbml0aWFsaXplIGNvcnJlY3RseSB0aGUgZmlsZXN5c3RlbSBjb2RlYyB3aGVuIGNyZWF0aW5nIGEgbmV3Ci0gIHN1YmludGVycHJldGVyIHRvIGZpeCBhIGJvb3RzdHJhcCBpc3N1ZSB3aXRoIGNvZGVjcyBpbXBsZW1lbnRlZCBpbiBQeXRob24sIGFzCi0gIHRoZSBJU08tODg1OS0xNSBjb2RlYy4KLQotLSBJc3N1ZSAjMTE5MTg6IE9TLzIgYW5kIFZNUyBhcmUgbm8gbW9yZSBzdXBwb3J0ZWQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZgotICBtYWludGFpbmVyLgotCi0tIElzc3VlICM2NzgwOiBmaXggc3RhcnRzL2VuZHN3aXRoIGVycm9yIG1lc3NhZ2UgdG8gbWVudGlvbiB0aGF0IHR1cGxlcyBhcmUKLSAgYWNjZXB0ZWQgdG9vLgotCi0tIElzc3VlICM1MDU3OiBmaXggYSBidWcgaW4gdGhlIHBlZXBob2xlciB0aGF0IGxlZCB0byBub24tcG9ydGFibGUgcHljIGZpbGVzCi0gIGJldHdlZW4gbmFycm93IGFuZCB3aWRlIGJ1aWxkcyB3aGlsZSBvcHRpbWl6aW5nIEJJTkFSWV9TVUJTQ1Igb24gbm9uLUJNUAotICBjaGFycyAoZS5nLiAiXFUwMDAxMjM0NSJbMF0pLgotCi0tIElzc3VlICMxMTg0NTogRml4IHR5cG8gaW4gcmFuZ2VvYmplY3QuYyB0aGF0IGNhdXNlZCBhIGNyYXNoIGluCi0gIGNvbXB1dGVfc2xpY2VfaW5kaWNlcy4gIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KLQotLSBJc3N1ZSAjNTY3MzogQWRkZWQgYSBgdGltZW91dGAga2V5d29yZCBhcmd1bWVudCB0byBzdWJwcm9jZXNzLlBvcGVuLndhaXQsCi0gIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGVkLCBzdWJwcm9jZXNzLmNhbGwsIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCwgYW5kCi0gIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LiAgSWYgdGhlIGJsb2NraW5nIG9wZXJhdGlvbiB0YWtlcyBtb3JlIHRoYW4gYHRpbWVvdXRgCi0gIHNlY29uZHMsIHRoZSBgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KLQotLSBJc3N1ZSAjMTE2NTA6IFB5T1NfU3RkaW9SZWFkbGluZSgpIHJldHJpZXMgZmdldHMoKSBpZiBpdCB3YXMgaW50ZXJydXB0ZWQKLSAgKEVJTlRSKSwgZm9yIGV4YW1wbGUgaWYgdGhlIHByb2dyYW0gaXMgc3RvcHBlZCB3aXRoIENUUkwreiBvbiBNYWMgT1MgWC4gUGF0Y2gKLSAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaS4KLQotLSBJc3N1ZSAjOTMxOTogSW5jbHVkZSB0aGUgZmlsZW5hbWUgaW4gIk5vbi1VVEY4IGNvZGUgLi4uIiBzeW50YXggZXJyb3IuCi0KLS0gSXNzdWUgIzEwNzg1OiBTdG9yZSB0aGUgZmlsZW5hbWUgYXMgVW5pY29kZSBpbiB0aGUgUHl0aG9uIHBhcnNlci4KLQotLSBJc3N1ZSAjMTE2MTk6IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZSgpIGRvZXNuJ3QgZW5jb2RlIHRoZSBwYXRoIHRvIGJ5dGVzCi0gIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzEwOTk4OiBSZW1vdmUgbWVudGlvbnMgb2YgLVEsIHN5cy5mbGFncy5kaXZpc2lvbl93YXJuaW5nIGFuZAotICBQeV9EaXZpc2lvbldhcm5pbmdGbGFnIGxlZnQgb3ZlciBmcm9tIFB5dGhvbiAyLgotCi0tIElzc3VlICMxMTI0NDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5IHBlZXBob2xlciBjaGVjayB0aGF0IHdhcyBwcmV2ZW50aW5nCi0gIG5lZ2F0aXZlIHplcm9zIGZyb20gYmVpbmcgY29uc3RhbnQtZm9sZGVkIHByb3Blcmx5LgotCi0tIElzc3VlICMxMTM5NTogaW8uRmlsZUlPKCkud3JpdGUoKSBjbGFtcHMgdGhlIGRhdGEgbGVuZ3RoIHRvIDMyLDc2NyBieXRlcyBvbgotICBXaW5kb3dzIGlmIHRoZSBmaWxlIGlzIGEgVFRZIHRvIHdvcmthcm91bmQgYSBXaW5kb3dzIGJ1Zy4gVGhlIFdpbmRvd3MgY29uc29sZQotICByZXR1cm5zIGFuIGVycm9yICgxMjogbm90IGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZgotICBzdGRvdXQgbW9kZSBpcyBiaW5hcnkgYW5kIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywKLSAgZGVwZW5kaW5nIG9uIGhlYXAgdXNhZ2UpLgotCi0tIElzc3VlICMxMTMyMDogZml4IGJvZ3VzIG1lbW9yeSBtYW5hZ2VtZW50IGluIE1vZHVsZXMvZ2V0cGF0aC5jLCBsZWFkaW5nIHRvCi0gIGEgcG9zc2libGUgY3Jhc2ggd2hlbiBjYWxsaW5nIFB5X1NldFBhdGgoKS4KLQotLSBJc3N1ZSAjMTE0MzI6IEEgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIHN1YnByb2Nlc3MuUG9wZW4gb24gcG9zaXggc3lzdGVtcyB3aXRoCi0gIDMuMi4wIHdoZXJlIHRoZSBzdGRvdXQgb3Igc3RkZXJyIGZpbGUgZGVzY3JpcHRvciBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc3RkaW4KLSAgZmlsZSBkZXNjcmlwdG9yIHdvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4gd2ViYnJvd3Nlci5vcGVuIHdvdWxkIGZhaWwuIGZpeGVkLgotCi0tIElzc3VlICM5ODU2OiBDaGFuZ2Ugb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nCi0gIHRvIGJlIGEgRGVwcmVjYXRpb25XYXJuaW5nLiBJbiAzLjIgaXQgd2FzIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZy4KLSAgSW4gMy40IGl0IHdpbGwgYmUgYSBUeXBlRXJyb3IuCi0KLS0gSXNzdWUgIzExMjQ0OiBUaGUgcGVlcGhvbGUgb3B0aW1pemVyIGlzIG5vdyBhYmxlIHRvIGNvbnN0YW50LWZvbGQKLSAgYXJiaXRyYXJpbHkgY29tcGxleCBleHByZXNzaW9ucy4gIFRoaXMgYWxzbyBmaXhlcyBhIDMuMiByZWdyZXNzaW9uIHdoZXJlCi0gIG9wZXJhdGlvbnMgaW52b2x2aW5nIG5lZ2F0aXZlIG51bWJlcnMgd2VyZSBub3QgY29uc3RhbnQtZm9sZGVkLgotCi0tIElzc3VlICMxMTQ1MDogRG9uJ3QgdHJ1bmNhdGUgaGcgdmVyc2lvbiBpbmZvIGluIFB5X0dldEJ1aWxkSW5mbygpIHdoZW4KLSAgdGhlcmUgYXJlIG1hbnkgdGFncyAoZS5nLiB3aGVuIHVzaW5nIG1xKS4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KLQotLSBJc3N1ZSAjMTEzMzU6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gbGlzdC5zb3J0IHdoZW4gdGhlIGtleSBmdW5jdGlvbgotICB0aHJvd3MgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICM4OTIzOiBXaGVuIGEgc3RyaW5nIGlzIGVuY29kZWQgdG8gVVRGLTggaW4gc3RyaWN0IG1vZGUsIHRoZSByZXN1bHQgaXMKLSAgY2FjaGVkIGludG8gdGhlIG9iamVjdC4gRXhhbXBsZXM6IHN0ci5lbmNvZGUoKSwgc3RyLmVuY29kZSgndXRmLTgnKSwKLSAgUHlVbmljb2RlX0FzVVRGOFN0cmluZygpIGFuZCBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHVuaWNvZGUsICJ1dGYtOCIsCi0gIE5VTEwpLgotCi0tIElzc3VlICMxMDgyOTogUmVmYWN0b3IgUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSwgdXNlIHRoZSBzYW1lIGZ1bmN0aW9uIHRvIHBhcnNlCi0gIHRoZSBmb3JtYXQgc3RyaW5nIGluIHRoZSAzIHN0ZXBzLCBmaXggY3Jhc2hzIG9uIGludmFsaWQgZm9ybWF0IHN0cmluZ3MuCi0KLS0gSXNzdWUgIzEzMDA3OiB3aGljaGRiIHNob3VsZCByZWNvZ25pemUgZ2RibSAxLjkgbWFnaWMgbnVtYmVycy4KLQotLSBJc3N1ZSAjMTEyODY6IFJhaXNlIGEgVmFsdWVFcnJvciBmcm9tIGNhbGxpbmcgUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIgd2l0aAotICBhIGJ1ZmZlciBzdHJ1Y3QgaGF2aW5nIGEgTlVMTCBkYXRhIHBvaW50ZXIuCi0KLS0gSXNzdWUgIzExMjcyOiBPbiBXaW5kb3dzLCBpbnB1dCgpIHN0cmlwcyAnXHInIChhbmQgbm90IG9ubHkgJ1xuJyksIGFuZAotICBzeXMuc3RkaW4gdXNlcyB1bml2ZXJzYWwgbmV3bGluZSAocmVwbGFjZSAnXHJcbicgYnkgJ1xuJykuCi0KLS0gSXNzdWUgIzExODI4OiBzdGFydHN3aXRoIGFuZCBlbmRzd2l0aCBub3cgYWNjZXB0IE5vbmUgYXMgc2xpY2UgaW5kZXguCi0gIFBhdGNoIGJ5IFRvcnN0ZW4gQmVja2VyLgotCi0tIElzc3VlICMxMTE2ODogUmVtb3ZlIGZpbGVuYW1lIGRlYnVnIHZhcmlhYmxlIGZyb20gUHlFdmFsX0V2YWxGcmFtZUV4KCkuCi0gIEl0IGVuY29kZWQgdGhlIFVuaWNvZGUgZmlsZW5hbWUgdG8gVVRGLTgsIGJ1dCB0aGUgZW5jb2RpbmcgZmFpbHMgb24KLSAgdW5kZWNvZGFibGUgZmlsZW5hbWUgKG9uIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzKSB3aGljaCByYWlzZXMgYW4gdW5leHBlY3RlZAotICBVbmljb2RlRW5jb2RlRXJyb3Igb24gcmVjdXJzaW9uIGxpbWl0LgotCi0tIElzc3VlICMxMTE4NzogUmVtb3ZlIGJvb3RzdHJhcCBjb2RlICh1c2UgQVNDSUkpIG9mCi0gIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoKSwgaXQgd2FzIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIGZhbGxiYWNrICh1c2UgdGhlCi0gIGxvY2FsZSBlbmNvZGluZykgaW4gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdCgpLgotCi0tIENoZWNrIGZvciBOVUxMIHJlc3VsdCBpbiBQeVR5cGVfRnJvbVNwZWMuCi0KLS0gSXNzdWUgIzEwNTE2OiBOZXcgY29weSgpIGFuZCBjbGVhcigpIG1ldGhvZHMgZm9yIGxpc3RzIGFuZCBieXRlYXJyYXlzLgotCi0tIElzc3VlICMxMTM4NjogYnl0ZWFycmF5LnBvcCgpIG5vdyB0aHJvd3MgSW5kZXhFcnJvciB3aGVuIHRoZSBieXRlYXJyYXkgaXMKLSAgZW1wdHksIGluc3RlYWQgb2YgT3ZlcmZsb3dFcnJvci4KLQotLSBJc3N1ZSAjMTIzODA6IFRoZSByanVzdCwgbGp1c3QgYW5kIGNlbnRlciBtZXRob2RzIG9mIGJ5dGVzIGFuZCBieXRlYXJyYXkKLSAgbm93IGFjY2VwdCBhIGJ5dGVhcnJheSBhcmd1bWVudC4KLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICMxNDE5NTogQW4gaXNzdWUgdGhhdCBjYXVzZWQgd2Vha3JlZi5XZWFrU2V0IGluc3RhbmNlcyB0byBpbmNvcnJlY3RseQotICByZXR1cm4gVHJ1ZSBmb3IgYSBXZWFrU2V0IGluc3RhbmNlICdhJyBpbiBib3RoICdhIDwgYScgYW5kICdhID4gYScgaGFzIGJlZW4KLSAgZml4ZWQuCi0KLS0gSXNzdWUgIzE0MTY2OiBQaWNrbGVyIG9iamVjdHMgbm93IGhhdmUgYW4gb3B0aW9uYWwgYGBkaXNwYXRjaF90YWJsZWBgCi0gIGF0dHJpYnV0ZSB3aGljaCBhbGxvd3MgdG8gc2V0IGN1c3RvbSBwZXItcGlja2xlciByZWR1Y3Rpb24gZnVuY3Rpb25zLgotICBQYXRjaCBieSBzYnQuCi0KLS0gSXNzdWUgIzE0MTc3OiBtYXJzaGFsLmxvYWRzKCkgbm93IHJhaXNlcyBUeXBlRXJyb3Igd2hlbiBnaXZlbiBhbiB1bmljb2RlCi0gIHN0cmluZy4gIFBhdGNoIGJ5IEd1aWxoZXJtZSBHb27Dp2FsdmVzLgotCi0tIElzc3VlICMxMzU1MDogUmVtb3ZlIHRoZSBkZWJ1ZyBtYWNoaW5lcnkgZnJvbSB0aGUgdGhyZWFkaW5nIG1vZHVsZTogcmVtb3ZlCi0gIHZlcmJvc2UgYXJndW1lbnRzIGZyb20gYWxsIHRocmVhZGluZyBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCi0KLS0gSXNzdWUgIzE0MTU5OiBGaXggdGhlIGxlbigpIG9mIHdlYWsgY29udGFpbmVycyAoV2Vha1NldCwgV2Vha0tleURpY3Rpb25hcnksCi0gIFdlYWtWYWx1ZURpY3Rpb25hcnkpIHRvIHJldHVybiBhIGJldHRlciBhcHByb3hpbWF0aW9uIHdoZW4gc29tZSBvYmplY3RzCi0gIGFyZSBkZWFkIG9yIGR5aW5nLiAgTW9yZW92ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3cgTygxKSByYXRoZXIgdGhhbgotICBPKG4pLgotCi0tIElzc3VlICMxMTg0MTogRml4IGNvbXBhcmlzb24gYnVnIHdpdGggJ3JjJyB2ZXJzaW9ucyBpbiBwYWNrYWdpbmcudmVyc2lvbi4KLSAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KLQotLSBJc3N1ZSAjNjg4NDogRml4IGxvbmctc3RhbmRpbmcgYnVncyB3aXRoIE1BTklGRVNULmluIHBhcnNpbmcgaW4gZGlzdHV0aWxzCi0gIG9uIFdpbmRvd3MuICBBbHNvIGZpeGVkIGluIHBhY2thZ2luZy4KLQotLSBJc3N1ZSAjODAzMzogc3FsaXRlMzogRml4IDY0LWJpdCBpbnRlZ2VyIGhhbmRsaW5nIGluIHVzZXIgZnVuY3Rpb25zCi0gIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiBJbml0aWFsIHBhdGNoIGJ5IFBoaWxpcHBlIERldmFsa2VuZWVyLgotCi0tIEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIHNsYXNoZXMgaW4gdGhlIHN0YXJ0IHRhZy4KLQotLSBJc3N1ZSAjMTM2NDE6IERlY29kaW5nIGZ1bmN0aW9ucyBpbiB0aGUgYmFzZTY0IG1vZHVsZSBub3cgYWNjZXB0IEFTQ0lJLW9ubHkKLSAgdW5pY29kZSBzdHJpbmdzLiAgUGF0Y2ggYnkgQ2F0YWxpbiBJYWNvYi4KLQotLSBJc3N1ZSAjMTQwNDM6IFNwZWVkIHVwIGltcG9ydGxpYidzIF9GaWxlRmluZGVyIGJ5IGF0IGxlYXN0IDh4LCBhbmQgYWRkIGEKLSAgbmV3IGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGZ1bmN0aW9uLgotCi0tIElzc3VlICMxNDAwMTogQ1ZFLTIwMTItMDg0NTogeG1scnBjOiBGaXggYW4gZW5kbGVzcyBsb29wIGluCi0gIFNpbXBsZVhNTFJQQ1NlcnZlciB1cG9uIG1hbGZvcm1lZCBQT1NUIHJlcXVlc3QuCi0KLS0gSXNzdWUgIzEzOTYxOiBNb3ZlIGltcG9ydGxpYiBvdmVyIHRvIHVzaW5nIG9zLnJlcGxhY2UoKSBmb3IgYXRvbWljIHJlbmFtaW5nLgotCi0tIERvIGF3YXkgd2l0aCBhbWJpZ3VvdXMgbGV2ZWwgdmFsdWVzIChhcyBzdWdnZXN0ZWQgYnkgUEVQIDMyOCkgaW4KLSAgaW1wb3J0bGliLl9faW1wb3J0X18oKSBieSByYWlzaW5nIFZhbHVlRXJyb3Igd2hlbiBsZXZlbCA8IDAuCi0KLS0gSXNzdWUgIzI0ODk6IHB0eS5zcGF3biBjb3VsZCBjb25zdW1lIDEwMCUgY3B1IHdoZW4gaXQgZW5jb3VudGVyZWQgYW4gRU9GLgotCi0tIElzc3VlICMxMzAxNDogRml4IGEgcG9zc2libGUgcmVmZXJlbmNlIGxlYWsgaW4gU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkuCi0KLS0gSXNzdWUgIzEzNzc3OiBBZGQgUEZfU1lTVEVNIHNvY2tldHMgb24gT1MgWC4KLSAgUGF0Y2ggYnkgTWljaGFlbCBHb2RlcmJhdWVyLgotCi0tIElzc3VlICMxMzAxNTogRml4IGEgcG9zc2libGUgcmVmZXJlbmNlIGxlYWsgaW4gZGVmYXVsdGRpY3QuX19yZXByX18uCi0gIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCi0KLS0gSXNzdWUgIzEzMjYxMTM6IGRpc3R1dGlscycgYW5kIHBhY2thZ2luZydzIGJ1aWxkX2V4dCBjb21tYW5kcyBvcHRpb24gbm93Ci0gIGNvcnJlY3RseSBwYXJzZXMgbXVsdGlwbGUgdmFsdWVzIChzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSBvciBjb21tYXMpIGdpdmVuCi0gIHRvIHRoZWlyIC0tbGlicmFyaWVzIG9wdGlvbi4KLQotLSBJc3N1ZSAjMTAyODc6IG5udHBsaWIgbm93IHF1ZXJpZXMgdGhlIHNlcnZlcidzIENBUEFCSUxJVElFUyBmaXJzdCBiZWZvcmUKLSAgc2VuZGluZyBNT0RFIFJFQURFUiwgYW5kIG9ubHkgc2VuZHMgaXQgaWYgbm90IGFscmVhZHkgaW4gUkVBREVSIG1vZGUuCi0gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KLQotLSBJc3N1ZSAjMTM5OTM6IEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIGJyb2tlbiBlbmQgdGFncyB3aGVuCi0gIHN0cmljdD1GYWxzZS4KLQotLSBJc3N1ZSAjMTM5MzA6IGxpYjJ0bzMgbm93IHN1cHBvcnRzIHdyaXRpbmcgY29udmVydGVkIG91dHB1dCBmaWxlcyB0byBhbm90aGVyCi0gIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgY29weWluZyB1bmNoYW5nZWQgZmlsZXMgYW5kIGFsdGVyaW5nIHRoZSBmaWxlCi0gIHN1ZmZpeC4KLQotLSBJc3N1ZSAjOTc1MDogRml4IHNxbGl0ZTMuQ29ubmVjdGlvbi5pdGVyZHVtcCBvbiB0YWJsZXMgYW5kIGZpZWxkcwotICB3aXRoIGEgbmFtZSB0aGF0IGlzIGEga2V5d29yZCBvciBjb250YWlucyBxdW90ZXMuIFBhdGNoIGJ5IE1hcmtvCi0gIEtvaHRhbGEuCi0KLS0gSXNzdWUgIzEwMjg3OiBubnRwbGliIG5vdyBxdWVyaWVzIHRoZSBzZXJ2ZXIncyBDQVBBQklMSVRJRVMgYWdhaW4gYWZ0ZXIKLSAgYXV0aGVudGljYXRpbmcgKHNpbmNlIHRoZSByZXN1bHQgbWF5IGNoYW5nZSwgYWNjb3JkaW5nIHRvIFJGQyA0NjQzKS4KLSAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgotCi0tIElzc3VlICMxMzU5MDogT24gT1MgWCAxMC43IGFuZCAxMC42IHdpdGggWGNvZGUgNC4yLCBidWlsZGluZwotICBEaXN0dXRpbHMtYmFzZWQgcGFja2FnZXMgd2l0aCBDIGV4dGVuc2lvbiBtb2R1bGVzIG1heSBmYWlsIGJlY2F1c2UKLSAgQXBwbGUgaGFzIHJlbW92ZWQgZ2NjLTQuMiwgdGhlIHZlcnNpb24gdXNlZCB0byBidWlsZCBweXRob24ub3JnCi0gIDY0LWJpdC8zMi1iaXQgUHl0aG9ucy4gIElmIHRoZSB1c2VyIGRvZXMgbm90IGV4cGxpY2l0bHkgb3ZlcnJpZGUKLSAgdGhlIGRlZmF1bHQgQyBjb21waWxlciBieSBzZXR0aW5nIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwKLSAgRGlzdHV0aWxzIHdpbGwgbm93IGF0dGVtcHQgdG8gY29tcGlsZSBleHRlbnNpb24gbW9kdWxlcyB3aXRoIGNsYW5nCi0gIGlmIGdjYy00LjIgaXMgcmVxdWlyZWQgYnV0IG5vdCBmb3VuZC4gQWxzbyBhcyBhIGNvbnZlbmllbmNlLCBpZgotICB0aGUgdXNlciBkb2VzIGV4cGxpY2l0bHkgc2V0IENDLCBzdWJzdGl0dXRlIGl0cyB2YWx1ZSBhcyB0aGUgZGVmYXVsdAotICBjb21waWxlciBpbiB0aGUgRGlzdHV0aWxzIExEU0hBUkVEIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIE9TIFguCi0gIChOb3RlLCB0aGUgcHl0aG9uLm9yZyAzMi1iaXQtb25seSBQeXRob25zIHVzZSBnY2MtNC4wIGFuZCB0aGUgMTAuNHUKLSAgU0RLLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBhdmFpbGFibGUgaW4gWGNvZGUgNC4gIFRoaXMgY2hhbmdlIGRvZXMgbm90Ci0gIGF0dGVtcHQgdG8gb3ZlcnJpZGUgc2V0dGluZ3MgdG8gc3VwcG9ydCB0aGVpciB1c2Ugd2l0aCBYY29kZSA0LikKLQotLSBJc3N1ZSAjMTM5NjA6IEhUTUxQYXJzZXIgaXMgbm93IGFibGUgdG8gaGFuZGxlIGJyb2tlbiBjb21tZW50cyB3aGVuCi0gIHN0cmljdD1GYWxzZS4KLQotLSBXaGVuICcnIGlzIGEgcGF0aCAoZS5nLiBpbiBzeXMucGF0aCksIG1ha2Ugc3VyZSBfX2ZpbGVfXyB1c2VzIHRoZSBjdXJyZW50Ci0gIHdvcmtpbmcgZGlyZWN0b3J5IGluc3RlYWQgb2YgJycgaW4gaW1wb3J0bGliLgotCi0tIElzc3VlICMxMzYwOTogQWRkIHR3byBmdW5jdGlvbnMgdG8gcXVlcnkgdGhlIHRlcm1pbmFsIHNpemU6Ci0gIG9zLmdldF90ZXJtaW5hbF9zaXplIChsb3cgbGV2ZWwpIGFuZCBzaHV0aWwuZ2V0X3Rlcm1pbmFsX3NpemUgKGhpZ2ggbGV2ZWwpLgotICBQYXRjaCBieSBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrLgotCi0tIElzc3VlICMxMzg0NTogT24gV2luZG93cywgdGltZS50aW1lKCkgbm93IHVzZXMgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKQotICBpbnN0ZWFkIG9mIGZ0aW1lKCkgdG8gaGF2ZSBhIHJlc29sdXRpb24gb2YgMTAwIG5zIGluc3RlYWQgb2YgMSBtcyAodGhlIGNsb2NrCi0gIGFjY3VyYWN5IGlzIGJldHdlZW4gMC41IG1zIGFuZCAxNSBtcykuCi0KLS0gSXNzdWUgIzEzODQ2OiBBZGQgdGltZS5tb25vdG9uaWMoKSwgbW9ub3RvbmljIGNsb2NrLgotCi0tIElzc3VlICM4MTg0OiBtdWx0aXByb2Nlc3Npbmc6IE9uIFdpbmRvd3MsIGRvbid0IHNldCBTT19SRVVTRUFERFIgb24KLSAgQ29ubmVjdGlvbiBzb2NrZXRzLCBhbmQgc2V0IEZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFIG9uIG5hbWVkIHBpcGVzLCB0bwotICBtYWtlIHN1cmUgdHdvIGxpc3RlbmVycyBjYW4ndCBiaW5kIHRvIHRoZSBzYW1lIHNvY2tldC9waXBlIChvciBhbnkgZXhpc3RpbmcKLSAgc29ja2V0L3BpcGUpLgotCi0tIElzc3VlICMxMDgxMTogRml4IHJlY3Vyc2l2ZSB1c2FnZSBvZiBjdXJzb3JzLiBJbnN0ZWFkIG9mIGNyYXNoaW5nLAotICByYWlzZSBhIFByb2dyYW1taW5nRXJyb3Igbm93LgotCi0tIElzc3VlICMxMzczNDogQWRkIG9zLmZ3YWxrKCksIGEgZGlyZWN0b3J5IHdhbGtpbmcgZnVuY3Rpb24geWllbGRpbmcgZmlsZQotICBkZXNjcmlwdG9ycy4KLQotLSBJc3N1ZSAjMjk0NTogTWFrZSB0aGUgZGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kIGF3YXJlIG9mIGJkaXN0X3JwbSBwcm9kdWN0cy4KLQotLSBJc3N1ZSAjMTM3MTI6IHB5c2V0dXAgY3JlYXRlIHNob3VsZCBub3QgY29udmVydCBwYWNrYWdlX2RhdGEgdG8gZXh0cmFfZmlsZXMuCi0KLS0gSXNzdWUgIzExODA1OiBwYWNrYWdlX2RhdGEgaW4gc2V0dXAuY2ZnIHNob3VsZCBhbGxvdyBtb3JlIHRoYW4gb25lIHZhbHVlLgotCi0tIElzc3VlICMxMzY3NjogSGFuZGxlIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB6ZXJvcyBjb3JyZWN0bHkgaW4gc3FsaXRlMy4KLQotLSBJc3N1ZSAjODgyODogQWRkIG5ldyBmdW5jdGlvbiBvcy5yZXBsYWNlKCksIGZvciBjcm9zcy1wbGF0Zm9ybSByZW5hbWluZwotICB3aXRoIG92ZXJ3cml0aW5nLgotCi0tIElzc3VlICMxMzg0ODogb3BlbigpIGFuZCB0aGUgRmlsZUlPIGNvbnN0cnVjdG9yIG5vdyBjaGVjayBmb3IgTlVMCi0gIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgbmFtZS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KLQotLSBJc3N1ZSAjMTM4MDY6IFRoZSBzaXplIGNoZWNrIGluIGF1ZGlvb3AgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMgd2FzIHRvbwotICBzdHJpY3QgYW5kIGNvdWxkIHJlamVjdCB2YWxpZCBjb21wcmVzc2VkIGRhdGEuICBQYXRjaCBieSBPbGVnIFBsYWtob3RueXVrLgotCi0tIElzc3VlICMxMzgxMjogV2hlbiBhIG11bHRpcHJvY2Vzc2luZyBQcm9jZXNzIGNoaWxkIHJhaXNlcyBhbiBleGNlcHRpb24sCi0gIGZsdXNoIHN0ZGVyciBhZnRlciBwcmludGluZyB0aGUgZXhjZXB0aW9uIHRyYWNlYmFjay4KLQotLSBJc3N1ZSAjMTM4ODU6IENWRS0yMDExLTMzODk6IHRoZSBfc3NsIG1vZHVsZSB3b3VsZCBhbHdheXMgZGlzYWJsZSB0aGUgQ0JDCi0gIElWIGF0dGFjayBjb3VudGVybWVhc3VyZS4KLQotLSBJc3N1ZSAjMTM4NDc6IHRpbWUubG9jYWx0aW1lKCkgYW5kIHRpbWUuZ210aW1lKCkgbm93IHJhaXNlIGFuIE9TRXJyb3IgaW5zdGVhZAotICBvZiBWYWx1ZUVycm9yIG9uIGZhaWx1cmUuIHRpbWUuY3RpbWUoKSBhbmQgdGltZS5hc2N0aW1lKCkgbm93IHJhaXNlcyBhbgotICBPU0Vycm9yIGlmIGxvY2FsdGltZSgpIGZhaWxlZC4gdGltZS5jbG9jaygpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCi0gIHByb2Nlc3NvciB0aW1lIHVzZWQgaXMgbm90IGF2YWlsYWJsZSBvciBpdHMgdmFsdWUgY2Fubm90IGJlIHJlcHJlc2VudGVkCi0KLS0gSXNzdWUgIzEzNzcyOiBJbiBvcy5zeW1saW5rKCkgdW5kZXIgV2luZG93cywgZG8gbm90IHRyeSB0byBndWVzcyB0aGUgbGluawotICB0YXJnZXQncyB0eXBlIChmaWxlIG9yIGRpcmVjdG9yeSkuICBUaGUgZGV0ZWN0aW9uIHdhcyBidWdneSBhbmQgbWFkZSB0aGUKLSAgY2FsbCBub24tYXRvbWljICh0aGVyZWZvcmUgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zKS4KLQotLSBJc3N1ZSAjNjYzMTogRGlzYWxsb3cgcmVsYXRpdmUgZmlsZSBwYXRocyBpbiB1cmxsaWIgdXJsb3BlbiBtZXRob2RzLgotCi0tIElzc3VlICMxMzcyMjogQXZvaWQgc2lsZW5jaW5nIEltcG9ydEVycm9ycyB3aGVuIGluaXRpYWxpemluZyB0aGUgY29kZWNzCi0gIHJlZ2lzdHJ5LgotCi0tIElzc3VlICMxMzc4MTogRml4IEd6aXBGaWxlIGJ1ZyB0aGF0IGNhdXNlZCBhbiBleGNlcHRpb24gdG8gYmUgcmFpc2VkIHdoZW4KLSAgb3BlbmluZyBmb3Igd3JpdGluZyB1c2luZyBhIGZpbGVvYmogcmV0dXJuZWQgYnkgb3MuZmRvcGVuKCkuCi0KLS0gSXNzdWUgIzEzODAzOiBVbmRlciBTb2xhcmlzLCBkaXN0dXRpbHMgZG9lc24ndCBpbmNsdWRlIGJpdG5lc3MKLSAgaW4gdGhlIGRpcmVjdG9yeSBuYW1lLgotCi0tIElzc3VlICMxMDI3ODogQWRkIHRpbWUud2FsbGNsb2NrKCkgZnVuY3Rpb24sIG1vbm90b25pYyBjbG9jay4KLQotLSBJc3N1ZSAjMTM4MDk6IEZpeCByZWdyZXNzaW9uIHdoZXJlIGJ6MiBtb2R1bGUgd291bGRuJ3Qgd29yayB3aGVuIHRocmVhZHMgYXJlCi0gIGRpc2FibGVkLiBPcmlnaW5hbCBwYXRjaCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KLQotLSBJc3N1ZSAjMTM1ODk6IEZpeCBzb21lIHNlcmlhbGl6YXRpb24gcHJpbWl0aXZlcyBpbiB0aGUgYWlmYyBtb2R1bGUuCi0gIFBhdGNoIGJ5IE9sZWcgUGxha2hvdG55dWsuCi0KLS0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyB1c2VyOnBhc3N3b3JkIGR1cmluZyBCYXNpYwotICBBdXRoZW50aWNhdGlvbi4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSm9vbmFzIEt1b3JpbGVodG8uCi0KLS0gSXNzdWUgIzEyMzY0OiBGaXggYSBoYW5nIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgotICBUaGUgaGFuZyB3b3VsZCBvY2N1ciB3aGVuIHJldHJpZXZpbmcgdGhlIHJlc3VsdCBvZiBhIHNjaGVkdWxlZCBmdXR1cmUgYWZ0ZXIKLSAgdGhlIGV4ZWN1dG9yIGhhZCBiZWVuIHNodXQgZG93bi4KLQotLSBJc3N1ZSAjMTM1MDI6IHRocmVhZGluZzogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gRXZlbnQud2FpdCgpIHRoYXQgbWFkZSBpdAotICByZXR1cm4gRmFsc2Ugd2hlbiB0aGUgZXZlbnQgd2FzIHNldCBhbmQgY2xlYXJlZCByaWdodCBhZnRlci4KLQotLSBJc3N1ZSAjOTk5MzogV2hlbiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgb24gZGlmZmVyZW50IGZpbGVzeXN0ZW1zLAotICBhbmQgdGhlIHNvdXJjZSBpcyBhIHN5bWxpbmssIHNodXRpbC5tb3ZlKCkgbm93IHJlY3JlYXRlcyBhIHN5bWxpbmsgb24gdGhlCi0gIGRlc3RpbmF0aW9uIGluc3RlYWQgb2YgY29weWluZyB0aGUgZmlsZSBjb250ZW50cy4gIFBhdGNoIGJ5IEpvbmF0aGFuIE5pZWhvZgotICBhbmQgSHluZWsgU2NobGF3YWNrLgotCi0tIElzc3VlICMxMjkyNjogRml4IGEgYnVnIGluIHRhcmZpbGUncyBsaW5rIGV4dHJhY3Rpb24uCi0KLS0gSXNzdWUgIzEzNjk2OiBGaXggdGhlIDMwMiBSZWxhdGl2ZSBVUkwgUmVkaXJlY3Rpb24gcHJvYmxlbS4KLQotLSBJc3N1ZSAjMTM2MzY6IFdlYWsgY2lwaGVycyBhcmUgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIHNzbCBtb2R1bGUKLSAgKGV4Y2VwdCB3aGVuIFNTTHYyIGlzIGV4cGxpY2l0bHkgYXNrZWQgZm9yKS4KLQotLSBJc3N1ZSAjMTI3MTU6IEFkZCBhbiBvcHRpb25hbCBzeW1saW5rcyBhcmd1bWVudCB0byBzaHV0aWwgZnVuY3Rpb25zCi0gIChjb3B5ZmlsZSwgY29weW1vZGUsIGNvcHlzdGF0LCBjb3B5LCBjb3B5MikuICBXaGVuIHRoYXQgcGFyYW1ldGVyIGlzCi0gIHRydWUsIHN5bWxpbmtzIGFyZW4ndCBkZXJlZmVyZW5jZWQgYW5kIHRoZSBvcGVyYXRpb24gaW5zdGVhZCBhY3RzIG9uIHRoZQotICBzeW1saW5rIGl0c2VsZiAob3IgY3JlYXRlcyBvbmUsIGlmIHJlbGV2YW50KS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KLQotLSBBZGQgYSBmbGFncyBwYXJhbWV0ZXIgdG8gc2VsZWN0LmVwb2xsLgotCi0tIElzc3VlICMxMzYyNjogQWRkIHN1cHBvcnQgZm9yIFNTTCBEaWZmaWUtSGVsbG1hbiBrZXkgZXhjaGFuZ2UsIHRocm91Z2ggdGhlCi0gIFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoKSBtZXRob2QgYW5kIHRoZSBzc2wuT1BfU0lOR0xFX0RIX1VTRSBvcHRpb24uCi0KLS0gSXNzdWUgIzExMDA2OiBEb24ndCBpc3N1ZSBsb3cgbGV2ZWwgd2FybmluZyBpbiBzdWJwcm9jZXNzIHdoZW4gcGlwZTIoKSBmYWlscy4KLQotLSBJc3N1ZSAjMTM2MjA6IFN1cHBvcnQgZm9yIENocm9tZSBicm93c2VyIGluIHdlYmJyb3dzZXIuICBQYXRjaCBjb250cmlidXRlZAotICBieSBBcm5hdWQgQ2FsbWV0dGVzLgotCi0tIElzc3VlICMxMTgyOTogRml4IGNvZGUgZXhlY3V0aW9uIGhvbGVzIGluIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgZm9yCi0gIG1ldGFjbGFzc2VzIHdpdGggbWV0YWNsYXNzZXMuIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KLQotLSBJc3N1ZSAjMTI3MDg6IEFkZCBzdGFybWFwKCkgYW5kIHN0YXJtYXBfYXN5bmMoKSBtZXRob2RzIChzaW1pbGFyIHRvCi0gIGl0ZXJ0b29scy5zdGFybWFwKCkpIHRvIG11bHRpcHJvY2Vzc2luZy5Qb29sLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgotCi0tIElzc3VlICMxNzg1OiBGaXggaW5zcGVjdCBhbmQgcHlkb2Mgd2l0aCBtaXNiZWhhdmluZyBkZXNjcmlwdG9ycy4KLQotLSBJc3N1ZSAjMTM2Mzc6ICJhMmIiIGZ1bmN0aW9ucyBpbiB0aGUgYmluYXNjaWkgbW9kdWxlIG5vdyBhY2NlcHQgQVNDSUktb25seQotICB1bmljb2RlIHN0cmluZ3MuCi0KLS0gSXNzdWUgIzEzNjM0OiBBZGQgc3VwcG9ydCBmb3IgcXVlcnlpbmcgYW5kIGRpc2FibGluZyBTU0wgY29tcHJlc3Npb24uCi0KLS0gSXNzdWUgIzEzNjI3OiBBZGQgc3VwcG9ydCBmb3IgU1NMIEVsbGlwdGljIEN1cnZlLWJhc2VkIERpZmZpZS1IZWxsbWFuCi0gIGtleSBleGNoYW5nZSwgdGhyb3VnaCB0aGUgU1NMQ29udGV4dC5zZXRfZWNkaF9jdXJ2ZSgpIG1ldGhvZCBhbmQgdGhlCi0gIHNzbC5PUF9TSU5HTEVfRUNESF9VU0Ugb3B0aW9uLgotCi0tIElzc3VlICMxMzYzNTogQWRkIHNzbC5PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UsIHNvIHRoYXQgU1NMIHNlcnZlcnMKLSAgY2hvb3NlIHRoZSBjaXBoZXIgYmFzZWQgb24gdGhlaXIgb3duIHByZWZlcmVuY2VzLCByYXRoZXIgdGhhbiBvbiB0aGUKLSAgY2xpZW50J3MuCi0KLS0gSXNzdWUgIzExODEzOiBGaXggaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBmb3IgbW9kdWxlcy4gUGF0Y2ggYnkgQW5kcmVhcwotICBTdMO8aHJrLgotCi0tIElzc3VlICM3NTAyOiBGaXggZXF1YWxpdHkgY29tcGFyaXNvbiBmb3IgRG9jVGVzdENhc2UgaW5zdGFuY2VzLiAgUGF0Y2ggYnkKLSAgQ8OpZHJpYyBLcmllci4KLQotLSBJc3N1ZSAjMTE4NzA6IHRocmVhZGluZzogUHJvcGVybHkgcmVpbml0aWFsaXplIHRocmVhZHMgaW50ZXJuYWwgbG9ja3MgYW5kCi0gIGNvbmRpdGlvbiB2YXJpYWJsZXMgdG8gYXZvaWQgZGVhZGxvY2tzIGluIGNoaWxkIHByb2Nlc3Nlcy4KLQotLSBJc3N1ZSAjODAzNTogdXJsbGliOiBGaXggYSBidWcgd2hlcmUgdGhlIGNsaWVudCBjb3VsZCByZW1haW4gc3R1Y2sgYWZ0ZXIgYQotICByZWRpcmVjdGlvbiBvciBhbiBlcnJvci4KLQotLSBJc3N1ZSAjMTM1NjA6IG9zLnN0cmVycm9yKCkgbm93IHVzZXMgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nIGluc3RlYWQgb2YKLSAgVVRGLTguCi0KLS0gSXNzdWUgIzgzNzM6IFRoZSBmaWxlc3lzdGVtIHBhdGggb2YgQUZfVU5JWCBzb2NrZXRzIG5vdyB1c2VzIHRoZSBmaWxlc3lzdGVtCi0gIGVuY29kaW5nIGFuZCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIsIHJhdGhlciB0aGFuIFVURi04LiAgUGF0Y2gKLSAgYnkgRGF2aWQgV2F0c29uLgotCi0tIElzc3VlICMxMDM1MDogUmVhZCBhbmQgc2F2ZSBlcnJubyBiZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0Ci0gIG92ZXJ3cml0ZSBpdC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCi0KLS0gSXNzdWUgIzExNjEwOiBJbnRyb2R1Y2UgYSBtb3JlIGdlbmVyYWwgd2F5IHRvIGRlY2xhcmUgYWJzdHJhY3QgcHJvcGVydGllcy4KLQotLSBJc3N1ZSAjMTM1OTE6IEEgYnVnIGluIGltcG9ydGxpYiBoYXMgYmVlbiBmaXhlZCB0aGF0IGNhdXNlZCBpbXBvcnRfbW9kdWxlCi0gIHRvIGxvYWQgYSBtb2R1bGUgdHdpY2UuCi0KLS0gSXNzdWUgIzEzNDQ5IHNjaGVkLnNjaGVkdWxlci5ydW4oKSBtZXRob2QgaGFzIGEgbmV3ICJibG9ja2luZyIgcGFyYW1ldGVyIHdoaWNoCi0gIHdoZW4gc2V0IHRvIEZhbHNlIG1ha2VzIHJ1bigpIGV4ZWN1dGUgdGhlIHNjaGVkdWxlZCBldmVudHMgZHVlIHRvIGV4cGlyZQotICBzb29uZXN0IChpZiBhbnkpIGFuZCB0aGVuIHJldHVybi4gIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbMOgLgotCi0tIElzc3VlICM4Njg0IHNjaGVkLnNjaGVkdWxlciBjbGFzcyBjYW4gYmUgc2FmZWx5IHVzZWQgaW4gbXVsdGktdGhyZWFkZWQKLSAgZW52aXJvbm1lbnRzLiAgUGF0Y2ggYnkgSm9zaWFoIENhcmxzb24gYW5kIEdpYW1wYW9sbyBSb2RvbMOgLgotCi0tIEFsaWFzIHJlc291cmNlLmVycm9yIHRvIE9TRXJyb3IgYWxhIFBFUCAzMTUxLgotCi0tIElzc3VlICM1Njg5OiBBZGQgc3VwcG9ydCBmb3IgbHptYSBjb21wcmVzc2lvbiB0byB0aGUgdGFyZmlsZSBtb2R1bGUuCi0KLS0gSXNzdWUgIzEzMjQ4OiBUdXJuIDMuMidzIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgaW50byAzLjMncwotICBEZXByZWNhdGlvbldhcm5pbmcuICBJdCBjb3ZlcnMgJ2NnaS5lc2NhcGUnLCAnaW1wb3J0bGliLmFiYy5QeUxvYWRlcicsCi0gICdpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyJywgJ25udHBsaWIuTk5UUC54Z3RpdGxlJywgJ25udHBsaWIuTk5UUC54cGF0aCcsCi0gIGFuZCBwcml2YXRlIGF0dHJpYnV0ZXMgb2YgJ3NtdHBkLlNNVFBDaGFubmVsJy4KLQotLSBJc3N1ZSAjNTkwNSwgSXNzdWUgIzEzNTYwOiB0aW1lLnN0cmZ0aW1lKCkgaXMgbm93IHVzaW5nIHRoZSBjdXJyZW50IGxvY2FsZQotICBlbmNvZGluZywgaW5zdGVhZCBvZiBVVEYtOCwgaWYgdGhlIHdjc2Z0aW1lKCkgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KLQotLSBJc3N1ZSAjMTM0NjQ6IEFkZCBhIHJlYWRpbnRvKCkgbWV0aG9kIHRvIGh0dHAuY2xpZW50LkhUVFBSZXNwb25zZS4gIFBhdGNoCi0gIGJ5IEpvbiBLdWhuLgotCi0tIHRhcmZpbGUucHk6IENvcnJlY3RseSBkZXRlY3QgYnppcDIgY29tcHJlc3NlZCBzdHJlYW1zIHdpdGggYmxvY2tzaXplcwotICBvdGhlciB0aGFuIDkwMGsuCi0KLS0gSXNzdWUgIzEzNDM5OiBGaXggbWFueSBlcnJvcnMgaW4gdHVydGxlIGRvY3N0cmluZ3MuCi0KLS0gSXNzdWUgIzY3MTU6IEFkZCBhIG1vZHVsZSAnbHptYScgZm9yIGNvbXByZXNzaW9uIHVzaW5nIHRoZSBMWk1BIGFsZ29yaXRobS4KLSAgVGhhbmtzIHRvIFBlciDDmHl2aW5kIEthcmxzZW4gZm9yIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uLgotCi0tIElzc3VlICMxMzQ4NzogTWFrZSBpbnNwZWN0LmdldG1vZHVsZSByb2J1c3QgYWdhaW5zdCBjaGFuZ2VzIGRvbmUgdG8KLSAgc3lzLm1vZHVsZXMgd2hpbGUgaXQgaXMgaXRlcmF0aW5nIG92ZXIgaXQuCi0KLS0gSXNzdWUgIzEyNjE4OiBGaXggYSBidWcgdGhhdCBwcmV2ZW50ZWQgcHlfY29tcGlsZSBmcm9tIGNyZWF0aW5nIGJ5dGUKLSAgY29tcGlsZWQgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgSW5pdGlhbCBwYXRjaCBieSBTam9lcmQgZGUgVnJpZXMuCi0KLS0gSXNzdWUgIzEzNDQ0OiBXaGVuIHN0ZG91dCBoYXMgYmVlbiBjbG9zZWQgZXhwbGljaXRseSwgd2Ugc2hvdWxkIG5vdCBhdHRlbXB0Ci0gIHRvIGZsdXNoIGl0IGF0IHNodXRkb3duIGFuZCBwcmludCBhbiBlcnJvci4KLQotLSBJc3N1ZSAjMTI1Njc6IFRoZSBjdXJzZXMgbW9kdWxlIHVzZXMgVW5pY29kZSBmdW5jdGlvbnMgZm9yIFVuaWNvZGUgYXJndW1lbnRzCi0gIHdoZW4gaXQgaXMgbGlua2VkIHRvIHRoZSBuY3Vyc2VzIGxpYnJhcnkuIEl0IGVuY29kZXMgYWxzbyBVbmljb2RlIHN0cmluZ3MgdG8KLSAgdGhlIGxvY2FsZSBlbmNvZGluZyBpbnN0ZWFkIG9mIFVURi04LgotCi0tIElzc3VlICMxMjg1NjogRW5zdXJlIGNoaWxkIHByb2Nlc3NlcyBkbyBub3QgaW5oZXJpdCB0aGUgcGFyZW50J3MgcmFuZG9tCi0gIHNlZWQgZm9yIGZpbGVuYW1lIGdlbmVyYXRpb24gaW4gdGhlIHRlbXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IEJyaWFuCi0gIEhhcnJpbmcuCi0KLS0gSXNzdWUgIzk5NTc6IFNwb29sZWRUZW1wb3JhcnlGaWxlLnRydW5jYXRlKCkgbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwgc2l6ZQotICBwYXJhbWV0ZXIsIGFzIG90aGVyIGZpbGUtbGlrZSBvYmplY3RzLiAgUGF0Y2ggYnkgUnlhbiBLZWxseS4KLQotLSBJc3N1ZSAjMTM0NTg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIHRoZSBzc2wgbW9kdWxlIHdoZW4gZGVjb2RpbmcgYQotICBjZXJ0aWZpY2F0ZSB3aXRoIGEgc3ViamVjdEFsdE5hbWUuICBQYXRjaCBieSBSb2JlcnQgWGlhby4KLQotLSBJc3N1ZSAjMTM0MTU6IG9zLnVuc2V0ZW52KCkgZG9lc24ndCBpZ25vcmUgZXJyb3JzIGFueW1vcmUuCi0KLS0gSXNzdWUgIzEzMjQ1OiBzY2hlZC5zY2hlZHVsZXIgY2xhc3MgY29uc3RydWN0b3IncyB0aW1lZnVuYyBhbmQKLSAgZGVsYXlmdW5jdCBwYXJhbWV0ZXJzIGFyZSBub3cgb3B0aW9uYWwuCi0gIHNjaGVkdWxlci5lbnRlciBhbmQgc2NoZWR1bGVyLmVudGVyYWJzIG1ldGhvZHMgZ2FpbmVkIGEgbmV3IGt3YXJncyBwYXJhbWV0ZXIuCi0gIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IENocmlzIENsYXJrLgotCi0tIElzc3VlICMxMjMyODogVW5kZXIgV2luZG93cywgcmVmYWN0b3IgaGFuZGxpbmcgb2YgQ3RybC1DIGV2ZW50cyBhbmQKLSAgbWFrZSBfbXVsdGlwcm9jZXNzaW5nLndpbjMyLldhaXRGb3JNdWx0aXBsZU9iamVjdHMgaW50ZXJydXB0aWJsZSB3aGVuCi0gIHRoZSB3YWl0X2ZsYWcgcGFyYW1ldGVyIGlzIGZhbHNlLiAgUGF0Y2ggYnkgc2J0LgotCi0tIElzc3VlICMxMzMyMjogRml4IEJ1ZmZlcmVkV3JpdGVyLndyaXRlKCkgdG8gZW5zdXJlIHRoYXQgQmxvY2tpbmdJT0Vycm9yIGlzCi0gIHJhaXNlZCB3aGVuIHRoZSB3cmFwcGVkIHJhdyBmaWxlIGlzIG5vbi1ibG9ja2luZyBhbmQgdGhlIHdyaXRlIHdvdWxkIGJsb2NrLgotICBQcmV2aW91cyBjb2RlIGFzc3VtZWQgdGhhdCB0aGUgcmF3IHdyaXRlKCkgd291bGQgcmFpc2UgQmxvY2tpbmdJT0Vycm9yLCBidXQKLSAgUmF3SU9CYXNlLndyaXRlKCkgaXMgZGVmaW5lZCB0byByZXR1cm5lZCBOb25lIHdoZW4gdGhlIGNhbGwgd291bGQgYmxvY2suCi0gIFBhdGNoIGJ5IHNidC4KLQotLSBJc3N1ZSAjMTMzNTg6IEhUTUxQYXJzZXIgbm93IGNhbGxzIGhhbmRsZV9kYXRhIG9ubHkgb25jZSBmb3IgZWFjaCBDREFUQS4KLQotLSBJc3N1ZSAjNDE0NzogbWluaWRvbSdzIHRvcHJldHR5eG1sIG5vIGxvbmdlciBhZGRzIHdoaXRlc3BhY2UgYXJvdW5kIGEgdGV4dAotICBub2RlIHdoZW4gaXQgaXMgdGhlIG9ubHkgY2hpbGQgb2YgYW4gZWxlbWVudC4gIEluaXRpYWwgcGF0Y2ggYnkgRGFuCi0gIEtlbmlnc2JlcmcuCi0KLS0gSXNzdWUgIzEzMzc0OiBUaGUgV2luZG93cyBieXRlcyBBUEkgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiB0aGUgb3MgbW9kdWxlLiBVc2UKLSAgVW5pY29kZSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBieXRlcyBmaWxlbmFtZXMgdG8gbm90IGRlcGVuZCBvbiB0aGUgQU5TSSBjb2RlCi0gIHBhZ2UgYW55bW9yZSBhbmQgdG8gc3VwcG9ydCBhbnkgZmlsZW5hbWUuCi0KLS0gSXNzdWUgIzEzMjk3OiBVc2UgYnl0ZXMgdHlwZSB0byBzZW5kIGFuZCByZWNlaXZlIGJpbmFyeSBkYXRhIHRocm91Z2ggWE1MUlBDLgotCi0tIElzc3VlICM2Mzk3OiBTdXBwb3J0ICIvZGV2L3BvbGwiIHBvbGxpbmcgb2JqZWN0cyBpbiBzZWxlY3QgbW9kdWxlLAotICB1bmRlciBTb2xhcmlzICYgZGVyaXZhdGl2ZXMuCi0KLS0gSXNzdWVzICMxNzQ1NzYxLCAjNzU1NjcwLCAjMTMzNTcsICMxMjYyOSwgIzEyMDAzMTM6IEhUTUxQYXJzZXIgbm93IGNvcnJlY3RseQotICBoYW5kbGVzIG5vbi12YWxpZCBhdHRyaWJ1dGVzLCBpbmNsdWRpbmcgYWRqYWNlbnQgYW5kIHVucXVvdGVkIGF0dHJpYnV0ZXMuCi0KLS0gSXNzdWUgIzEzMTkzOiBGaXggZGlzdHV0aWxzLmZpbGVsaXN0LkZpbGVMaXN0IGFuZCBwYWNrYWdpbmcubWFuaWZlc3QuTWFuaWZlc3QKLSAgdW5kZXIgV2luZG93cy4KLQotLSBJc3N1ZSAjMTMzODQ6IFJlbW92ZSB1bm5lY2Vzc2FyeSBfX2Z1dHVyZV9fIGltcG9ydCBpbiBMaWIvcmFuZG9tLnB5Ci0KLS0gSXNzdWUgIzEzMTQ5OiBTcGVlZCB1cCBhcHBlbmQtb25seSBTdHJpbmdJTyBvYmplY3RzLgotCi0tIElzc3VlICMxMzM3MzogbXVsdGlwcm9jZXNzaW5nLlF1ZXVlLmdldCgpIGNvdWxkIHNvbWV0aW1lcyBibG9jayBpbmRlZmluaXRlbHkKLSAgd2hlbiBjYWxsZWQgd2l0aCBhIHRpbWVvdXQuICBQYXRjaCBieSBBcm5hdWQgWXNtYWwuCi0KLS0gSXNzdWUgIzEzMjU0OiBGaXggTWFpbGRpciBpbml0aWFsaXphdGlvbiBzbyB0aGF0IG1haWxkaXIgY29udGVudHMKLSAgYXJlIHJlYWQgY29ycmVjdGx5LgotCi0tIElzc3VlICMzMDY3OiBsb2NhbGUuc2V0bG9jYWxlKCkgbm93IHJhaXNlcyBUeXBlRXJyb3IgaWYgdGhlIHNlY29uZAotICBhcmd1bWVudCBpcyBhbiBpbnZhbGlkIGl0ZXJhYmxlLiBJdHMgZG9jdW1lbnRhdGlvbiBhbmQgZG9jc3RyaW5nCi0gIHdlcmUgYWxzbyB1cGRhdGVkLiBJbml0aWFsIHBhdGNoIGJ5IEp5cmtpIFB1bGxpYWluZW4uCi0KLS0gSXNzdWUgIzEzMTQwOiBGaXggdGhlIGRhZW1vbl90aHJlYWRzIGF0dHJpYnV0ZSBvZiBUaHJlYWRpbmdNaXhJbi4KLQotLSBJc3N1ZSAjMTMzMzk6IEZpeCBjb21waWxlIGVycm9yIGluIHBvc2l4bW9kdWxlLmMgZHVlIHRvIG1pc3Npbmcgc2VtaWNvbG9uLgotICBUaGFua3MgdG8gUm9iZXJ0IFhpYW8uCi0KLS0gQnl0ZSBjb21waWxhdGlvbiBpbiBwYWNrYWdpbmcgaXMgbm93IGlzb2xhdGVkIGZyb20gdGhlIGNhbGxpbmcgUHl0aG9uIC1CIG9yCi0gIC1PIG9wdGlvbnMsIGluc3RlYWQgb2YgYmVpbmcgZGlzYWxsb3dlZCB1bmRlciAtQiBvciBidWdneSB1bmRlciAtTy4KLQotLSBJc3N1ZSAjMTA1NzA6IGN1cnNlcy5wdXRwKCkgYW5kIGN1cnNlcy50cGFybSgpIGFyZSBub3cgZXhwZWN0aW5nIGEgYnl0ZQotICBzdHJpbmcsIGluc3RlYWQgb2YgYSBVbmljb2RlIHN0cmluZy4KLQotLSBJc3N1ZSAjMTMyOTU6IGh0dHAuc2VydmVyIG5vdyBwcm9kdWNlcyB2YWxpZCBIVE1MIDQuMDEgc3RyaWN0LgotCi0tIElzc3VlICMyODkyOiBwcmVzZXJ2ZSBpdGVycGFyc2UgZXZlbnRzIGluIGNhc2Ugb2YgU3ludGF4RXJyb3IuCi0KLS0gSXNzdWUgIzEzMjg3OiB1cmxsaWIucmVxdWVzdCBhbmQgdXJsbGliLmVycm9yIG5vdyBjb250YWlucyBhbiBfX2FsbF9fCi0gIGF0dHJpYnV0ZSB0byBleHBvc2Ugb25seSByZWxldmFudCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuICBQYXRjaCBieSBGbG9yZW50Ci0gIFhpY2x1bmEuCi0KLS0gSXNzdWUgIzY3MDY2NDogRml4IEhUTUxQYXJzZXIgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgY29udGVudCBvZgotICBgYDxzY3JpcHQ+Li4uPC9zY3JpcHQ+YGAgYW5kIGBgPHN0eWxlPi4uLjwvc3R5bGU+YGAuCi0KLS0gSXNzdWUgIzEwODE3OiBGaXggdXJscmV0cmlldmUgZnVuY3Rpb24gdG8gcmFpc2UgQ29udGVudFRvb1Nob3J0RXJyb3IgZXZlbgotICB3aGVuIHJlcG9ydGhvb2sgaXMgTm9uZS4gUGF0Y2ggYnkgSnlya2kgUHVsbGlhaW5lbi4KLQotLSBGaXggdGhlIHhtbHJwYy5jbGllbnQgdXNlciBhZ2VudCB0byByZXR1cm4gc29tZXRoaW5nIHNpbWlsYXIgdG8KLSAgdXJsbGliLnJlcXVlc3QgdXNlciBhZ2VudDogIlB5dGhvbi14bWxycGMvMy4zIi4KLQotLSBJc3N1ZSAjMTMyOTM6IEJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gdHJ5aW5nIHRvIG1hcnNoYWwgYnl0ZXMgdXNpbmcKLSAgeG1scnBjLmNsaWVudC4KLQotLSBJc3N1ZSAjMTMyOTE6IE5hbWVFcnJvciBpbiB4bWxycGMgcGFja2FnZS4KLQotLSBJc3N1ZSAjMTMyNTg6IFVzZSBjYWxsYWJsZSgpIGJ1aWx0LWluIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgotCi0tIElzc3VlICMxMzI3MzogZml4IGEgYnVnIHRoYXQgcHJldmVudGVkIEhUTUxQYXJzZXIgdG8gcHJvcGVybHkgZGV0ZWN0IHNvbWUKLSAgdGFncyB3aGVuIHN0cmljdD1GYWxzZS4KLQotLSBJc3N1ZSAjMTExODM6IEFkZCBmaW5lci1ncmFpbmVkIGV4Y2VwdGlvbnMgdG8gdGhlIHNzbCBtb2R1bGUsIHNvIHRoYXQKLSAgeW91IGRvbid0IGhhdmUgdG8gaW5zcGVjdCB0aGUgZXhjZXB0aW9uJ3MgYXR0cmlidXRlcyBpbiB0aGUgY29tbW9uIGNhc2UuCi0KLS0gSXNzdWUgIzEzMjE2OiBBZGQgY3A2NTAwMSBjb2RlYywgdGhlIFdpbmRvd3MgVVRGLTggKENQX1VURjgpLgotCi0tIElzc3VlICMxMzIyNjogQWRkIFJUTERfeHh4IGNvbnN0YW50cyB0byB0aGUgb3MgbW9kdWxlLiBUaGVzZSBjb25zdGFudHMgY2FuIGJlCi0gIHVzZWQgd2l0aCBzeXMuc2V0ZGxvcGVuZmxhZ3MoKS4KLQotLSBJc3N1ZSAjMTAyNzg6IEFkZCBjbG9ja19nZXRyZXMoKSwgY2xvY2tfZ2V0dGltZSgpIGFuZCBDTE9DS194eHggY29uc3RhbnRzIHRvCi0gIHRoZSB0aW1lIG1vZHVsZS4gdGltZS5jbG9ja19nZXR0aW1lKHRpbWUuQ0xPQ0tfTU9OT1RPTklDKSBwcm92aWRlcyBhCi0gIG1vbm90b25pYyBjbG9jawotCi0tIElzc3VlICMxMDMzMjogbXVsdGlwcm9jZXNzaW5nOiBmaXggYSByYWNlIGNvbmRpdGlvbiB3aGVuIGEgUG9vbCBpcyBjbG9zZWQKLSAgYmVmb3JlIGFsbCB0YXNrcyBoYXZlIGNvbXBsZXRlZC4KLQotLSBJc3N1ZSAjMTMyNTU6IHdyb25nIGRvY3N0cmluZ3MgaW4gYXJyYXkgbW9kdWxlLgotCi0tIElzc3VlICM4NTQwOiBSZW1vdmUgZGVwcmVjYXRlZCBDb250ZXh0Ll9jbGFtcCBhdHRyaWJ1dGUgaW4gRGVjaW1hbCBtb2R1bGUuCi0KLS0gSXNzdWUgIzEzMjM1OiBBZGRlZCBEZXByZWNhdGlvbldhcm5pbmcgdG8gbG9nZ2luZy53YXJuKCkgbWV0aG9kIGFuZCBmdW5jdGlvbi4KLQotLSBJc3N1ZSAjOTE2ODogbm93IHNtdHBkIGlzIGFibGUgdG8gYmluZCBwcml2aWxlZ2VkIHBvcnQuCi0KLS0gSXNzdWUgIzEyNTI5OiBmaXggY2dpLnBhcnNlX2hlYWRlciBpc3N1ZSBvbiBzdHJpbmdzIHdpdGggZG91YmxlLXF1b3RlcyBhbmQKLSAgc2VtaWNvbG9ucyB0b2dldGhlci4gUGF0Y2ggYnkgQmVuIERhcm5lbGwgYW5kIFBldHJpIExlaHRpbmVuLgotCi0tIElzc3VlICMxMzIyNzogZnVuY3Rvb2xzLmxydV9jYWNoZSgpIG5vdyBoYXMgYSBvcHRpb24gdG8gZGlzdGluZ3Vpc2gKLSAgY2FsbHMgd2l0aCBkaWZmZXJlbnQgYXJndW1lbnQgdHlwZXMuCi0KLS0gSXNzdWUgIzYwOTA6IHppcGZpbGUgcmFpc2VzIGEgVmFsdWVFcnJvciB3aGVuIGEgZG9jdW1lbnQgd2l0aCBhIHRpbWVzdGFtcAotICBlYXJsaWVyIHRoYW4gMTk4MCBpcyBwcm92aWRlZC4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgUGV0cmkgTGVodGluZW4uCi0KLS0gSXNzdWUgIzEzMTUwOiBzeXNjb25maWcgbm8gbG9uZ2VyIHBhcnNlcyB0aGUgTWFrZWZpbGUgYW5kIGNvbmZpZy5oIGZpbGVzCi0gIHdoZW4gaW1wb3J0ZWQsIGluc3RlYWQgZG9pbmcgaXQgYXQgYnVpbGQgdGltZS4gIFRoaXMgbWFrZXMgaW1wb3J0aW5nCi0gIHN5c2NvbmZpZyBmYXN0ZXIgYW5kIHJlZHVjZXMgUHl0aG9uIHN0YXJ0dXAgdGltZSBieSAyMCUuCi0KLS0gSXNzdWUgIzEyNDQ4OiBzbXRwbGliIG5vdyBmbHVzaGVzIHN0ZG91dCB3aGlsZSBydW5uaW5nIGBgcHl0aG9uIC1tIHNtdHBsaWJgYAotICBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBwcm9tcHQgY29ycmVjdGx5LgotCi0tIElzc3VlICMxMjQ1NDogVGhlIG1haWxib3ggbW9kdWxlIGlzIG5vdyB1c2luZyBBU0NJSSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlCi0gIGVuY29kaW5nLCB0byByZWFkIGFuZCB3cml0ZSAubWhfc2VxdWVuY2VzIGZpbGVzLgotCi0tIElzc3VlICMxMzE5NDogemxpYi5jb21wcmVzc29iaigpLmNvcHkoKSBhbmQgemxpYi5kZWNvbXByZXNzb2JqKCkuY29weSgpIGFyZQotICBub3cgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2NzMwMDc6IHVybGxpYi5yZXF1ZXN0IG5vdyBzdXBwb3J0cyBIRUFEIHJlcXVlc3QgdmlhIG5ldyBtZXRob2QgYXJndW1lbnQuCi0gIFBhdGNoIGNvbnRyaWJ1dGlvbnMgYnkgRGF2aWQgU3RhbmVrLCBQYXRyaWNrIFdlc3RlcmhvZmYgYW5kIEV6aW8gTWVsb3R0aS4KLQotLSBJc3N1ZSAjMTIzODY6IHBhY2thZ2luZyBkb2VzIG5vdCBmYWlsIGFueW1vcmUgd2hlbiB3cml0aW5nIHRoZSBSRVNPVVJDRVMKLSAgZmlsZS4KLQotLSBJc3N1ZSAjMTMxNTg6IEZpeCBkZWNvZGluZyBhbmQgZW5jb2Rpbmcgb2YgR05VIHRhciBzcGVjaWZpYyBiYXNlLTI1NiBudW1iZXIKLSAgZmllbGRzIGluIHRhcmZpbGUuCi0KLS0gSXNzdWUgIzEzMDI1OiBtaW1ldHlwZXMgaXMgbm93IHJlYWRpbmcgTUlNRSB0eXBlcyB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcsCi0gIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZy4KLQotLSBJc3N1ZSAjMTA2NTM6IE9uIFdpbmRvd3MsIHVzZSBzdHJmdGltZSgpIGluc3RlYWQgb2Ygd2NzZnRpbWUoKSBiZWNhdXNlCi0gIHdjc2Z0aW1lKCkgZG9lc24ndCBmb3JtYXQgdGltZSB6b25lIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjMTMxNTA6IFRoZSB0b2tlbml6ZSBtb2R1bGUgZG9lc24ndCBjb21waWxlIGxhcmdlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKLSAgYXQgc3RhcnR1cCBhbnltb3JlLgotCi0tIElzc3VlICMxMTE3MTogRml4IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lIHdoZW4gUHl0aG9uIHdhcwotICBjb25maWd1cmVkIHdpdGggZGlmZmVyZW50IHByZWZpeCBhbmQgZXhlYy1wcmVmaXguCi0KLS0gSXNzdWUgIzExMjU0OiBUZWFjaCBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyB0byBjb21waWxlIC5weWMgYW5kIC5weW8gZmlsZXMgaW4KLSAgUEVQIDMxNDctY29tcGxpYW50IF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLgotCi0tIElzc3VlICM3MzY3OiBGaXggcGtndXRpbC53YWxrX3BhdGhzIHRvIHNraXAgZGlyZWN0b3JpZXMgd2hvc2UKLSAgY29udGVudHMgY2Fubm90IGJlIHJlYWQuCi0KLS0gSXNzdWUgIzMxNjM6IFRoZSBzdHJ1Y3QgbW9kdWxlIGdldHMgbmV3IGZvcm1hdCBjaGFyYWN0ZXJzICduJyBhbmQgJ04nCi0gIHN1cHBvcnRpbmcgQyBpbnRlZ2VyIHR5cGVzIGBgc3NpemVfdGBgIGFuZCBgYHNpemVfdGBgLCByZXNwZWN0aXZlbHkuCi0KLS0gSXNzdWUgIzEzMDk5OiBGaXggc3FsaXRlMy5DdXJzb3IubGFzdHJvd2lkIHVuZGVyIGEgVHVya2lzaCBsb2NhbGUuCi0gIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkgVGhvbWFzIEtsdXl2ZXIuCi0KLS0gSXNzdWUgIzEzMDg3OiBCdWZmZXJlZFJlYWRlci5zZWVrKCkgbm93IGFsd2F5cyByYWlzZXMgVW5zdXBwb3J0ZWRPcGVyYXRpb24KLSAgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyB1bnNlZWthYmxlLCBldmVuIGlmIHRoZSBzZWVrIGNvdWxkIGJlCi0gIHNhdGlzZmllZCB1c2luZyB0aGUgaW50ZXJuYWwgYnVmZmVyLiAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KLQotLSBJc3N1ZSAjNzY4OTogQWxsb3cgcGlja2xpbmcgb2YgZHluYW1pY2FsbHkgY3JlYXRlZCBjbGFzc2VzIHdoZW4gdGhlaXIKLSAgbWV0YWNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCBjb3B5cmVnLiAgUGF0Y2ggYnkgTmljb2xhcyBNLiBUaGnDqXJ5IGFuZCBDcmFpZwotICBDaXRyby4KLQotLSBJc3N1ZSAjMTMwMzQ6IFdoZW4gZGVjb2Rpbmcgc29tZSBTU0wgY2VydGlmaWNhdGVzLCB0aGUgc3ViamVjdEFsdE5hbWUKLSAgZXh0ZW5zaW9uIGNvdWxkIGJlIHVucmVwb3J0ZWQuCi0KLS0gSXNzdWUgIzEyMzA2OiBFeHBvc2UgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgemxpYiBDIGxpYnJhcnkgYXMgYSBjb25zdGFudCwKLSAgWkxJQl9SVU5USU1FX1ZFUlNJT04sIGluIHRoZSB6bGliIG1vZHVsZS4gUGF0Y2ggYnkgVG9yc3RlbiBMYW5kc2Nob2ZmLgotCi0tIElzc3VlICMxMjk1OTogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwIHRvIGNvbGxlY3Rpb25zLl9fYWxsX18uCi0KLS0gSXNzdWUgIzg5MzM6IGRpc3R1dGlscycgUEtHLUlORk8gZmlsZXMgYW5kIHBhY2thZ2luZydzIE1FVEFEQVRBIGZpbGVzIHdpbGwKLSAgbm93IGNvcnJlY3RseSByZXBvcnQgTWV0YWRhdGEtVmVyc2lvbjogMS4xIGluc3RlYWQgb2YgMS4wIGlmIGEgQ2xhc3NpZmllciBvcgotICBEb3dubG9hZC1VUkwgZmllbGQgaXMgcHJlc2VudC4KLQotLSBJc3N1ZSAjMTI1Njc6IEFkZCBjdXJzZXMudW5nZXRfd2NoKCkgZnVuY3Rpb24uIFB1c2ggYSBjaGFyYWN0ZXIgc28gdGhlIG5leHQKLSAgZ2V0X3djaCgpIHdpbGwgcmV0dXJuIGl0LgotCi0tIElzc3VlICM5NTYxOiBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyBub3cgd3JpdGVzIGVnZy1pbmZvIGZpbGVzIHVzaW5nIFVURi04LAotICBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcuCi0KLS0gSXNzdWUgIzgyODY6IFRoZSBkaXN0dXRpbHMgY29tbWFuZCBzZGlzdCB3aWxsIHByaW50IGEgd2FybmluZyBtZXNzYWdlIGluc3RlYWQKLSAgb2YgY3Jhc2hpbmcgd2hlbiBhbiBpbnZhbGlkIHBhdGggaXMgZ2l2ZW4gaW4gdGhlIG1hbmlmZXN0IHRlbXBsYXRlLgotCi0tIElzc3VlICMxMjg0MTogdGFyZmlsZSB1bm5lY2Vzc2FyaWx5IGNoZWNrZWQgdGhlIGV4aXN0ZW5jZSBvZiBudW1lcmljYWwgdXNlcgotICBhbmQgZ3JvdXAgaWRzIG9uIGV4dHJhY3Rpb24uIElmIG9uZSBvZiB0aGVtIGRpZCBub3QgZXhpc3QgdGhlIHJlc3BlY3RpdmUgaWQKLSAgb2YgdGhlIGN1cnJlbnQgdXNlciAoaS5lLiByb290KSB3YXMgdXNlZCBmb3IgdGhlIGZpbGUgYW5kIG93bmVyc2hpcAotICBpbmZvcm1hdGlvbiB3YXMgbG9zdC4KLQotLSBJc3N1ZSAjMTI4ODg6IEZpeCBhIGJ1ZyBpbiBIVE1MUGFyc2VyLnVuZXNjYXBlIHRoYXQgcHJldmVudGVkIGl0IHRvIGVzY2FwZQotICBtb3JlIHRoYW4gMTI4IGVudGl0aWVzLiAgUGF0Y2ggYnkgUGV0ZXIgT3R0ZW4uCi0KLS0gSXNzdWUgIzEyODc4OiBFeHBvc2UgYSBfX2RpY3RfXyBhdHRyaWJ1dGUgb24gaW8uSU9CYXNlIGFuZCBpdHMgc3ViY2xhc3Nlcy4KLQotLSBJc3N1ZSAjMTI0OTQ6IE9uIGVycm9yLCBjYWxsKCksIGNoZWNrX2NhbGwoKSwgY2hlY2tfb3V0cHV0KCkgYW5kCi0gIGdldHN0YXR1c291dHB1dCgpIGZ1bmN0aW9ucyBvZiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgbm93IGtpbGwgdGhlIHByb2Nlc3MsCi0gIHJlYWQgaXRzIHN0YXR1cyAodG8gYXZvaWQgem9tYmlzKSBhbmQgY2xvc2UgcGlwZXMuCi0KLS0gSXNzdWUgIzEyNzIwOiBFeHBvc2UgbG93LWxldmVsIExpbnV4IGV4dGVuZGVkIGZpbGUgYXR0cmlidXRlIGZ1bmN0aW9ucyBpbiBvcy4KLQotLSBJc3N1ZSAjMTA5NDY6IFRoZSBkaXN0dXRpbHMgY29tbWFuZHMgYmRpc3RfZHVtYiwgYmRpc3Rfd2luaW5zdCBhbmQgYmRpc3RfbXNpCi0gIG5vdyByZXNwZWN0IGEgLS1za2lwLWJ1aWxkIG9wdGlvbiBnaXZlbiB0byBiZGlzdC4gIFRoZSBwYWNrYWdpbmcgY29tbWFuZHMKLSAgd2VyZSBmaXhlZCB0b28uCi0KLS0gSXNzdWUgIzEyODQ3OiBGaXggYSBjcmFzaCB3aXRoIG5lZ2F0aXZlIFBVVCBhbmQgTE9OR19CSU5QVVQgYXJndW1lbnRzIGluCi0gIHRoZSBDIHBpY2tsZSBpbXBsZW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjMTE1NjQ6IEF2b2lkIGNyYXNoZXMgd2hlbiB0cnlpbmcgdG8gcGlja2xlIGh1Z2Ugb2JqZWN0cyBvciBjb250YWluZXJzCi0gIChtb3JlIHRoYW4gMioqMzEgaXRlbXMpLiAgSW5zdGVhZCwgaW4gbW9zdCBjYXNlcywgYW4gT3ZlcmZsb3dFcnJvciBpcyByYWlzZWQuCi0KLS0gSXNzdWUgIzEyMjg3OiBGaXggYSBzdGFjayBjb3JydXB0aW9uIGluIG9zc2F1ZGlvZGV2IG1vZHVsZSB3aGVuIHRoZSBGRCBpcwotICBncmVhdGVyIHRoYW4gRkRfU0VUU0laRS4KLQotLSBJc3N1ZSAjMTI4Mzk6IEZpeCBjcmFzaCBpbiB6bGliIG1vZHVsZSBkdWUgdG8gdmVyc2lvbiBtaXNtYXRjaC4KLSAgRml4IGJ5IFJpY2hhcmQgTS4gVGV3LgotCi0tIElzc3VlICM5OTIzOiBUaGUgbWFpbGNhcCBtb2R1bGUgbm93IGNvcnJlY3RseSB1c2VzIHRoZSBwbGF0Zm9ybSBwYXRoCi0gIHNlcGFyYXRvciBmb3IgdGhlIE1BSUxDQVAgZW52aXJvbm1lbnQgdmFyaWFibGUgb24gbm9uLVBPU0lYIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTI4MzU6IEZvbGxvdyB1cCB0byAjNjU2MCB0aGF0IHVuY29uZGl0aW9uYWxseSBwcmV2ZW50cyB1c2Ugb2YgdGhlCi0gIHVuZW5jcnlwdGVkIHNlbmRtc2cvcmVjdm1zZyBBUElzIG9uIFNTTCB3cmFwcGVkIHNvY2tldHMuIFBhdGNoIGJ5IERhdmlkCi0gIFdhdHNvbi4KLQotLSBJc3N1ZSAjMTI4MDM6IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKCkgbm93IGFjY2VwdHMgYSBwYXNzd29yZCBhcmd1bWVudAotICB0byBiZSB1c2VkIGlmIHRoZSBwcml2YXRlIGtleSBpcyBlbmNyeXB0ZWQuICBQYXRjaCBieSBBZGFtIFNpbXBraW5zLgotCi0tIElzc3VlICMxMTY1NzogRml4IHNlbmRpbmcgZmlsZSBkZXNjcmlwdG9ycyBvdmVyIDI1NSBvdmVyIGEgbXVsdGlwcm9jZXNzaW5nCi0gIFBpcGUuCi0KLS0gSXNzdWUgIzEyODExOiB0YWJuYW5ueS5jaGVjaygpIG5vdyBwcm9tcHRseSBjbG9zZXMgY2hlY2tlZCBmaWxlcy4gUGF0Y2ggYnkKLSAgQW50aG9ueSBCcmlnZ3MuCi0KLS0gSXNzdWUgIzY1NjA6IFRoZSBzZW5kbXNnL3JlY3Ztc2cgQVBJIGlzIG5vdyBleHBvc2VkIGJ5IHRoZSBzb2NrZXQgbW9kdWxlCi0gIHdoZW4gcHJvdmlkZWQgYnkgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0sIHN1cHBvcnRpbmcgcHJvY2Vzc2luZyBvZgotICBhbmNpbGxhcnkgZGF0YSBpbiBwdXJlIFB5dGhvbiBjb2RlLiBQYXRjaCBieSBEYXZpZCBXYXRzb24gYW5kIEhlaWtvIFd1bmRyYW0uCi0KLS0gSXNzdWUgIzEyMzI2OiBPbiBMaW51eCwgc3lzLnBsYXRmb3JtIGRvZXNuJ3QgY29udGFpbiB0aGUgbWFqb3IgdmVyc2lvbgotICBhbnltb3JlLiBJdCBpcyBub3cgYWx3YXlzICdsaW51eCcsIGluc3RlYWQgb2YgJ2xpbnV4Micgb3IgJ2xpbnV4MycgZGVwZW5kaW5nCi0gIG9uIHRoZSBMaW51eCB2ZXJzaW9uIHVzZWQgdG8gYnVpbGQgUHl0aG9uLgotCi0tIElzc3VlICMxMjIxMzogRml4IGEgYnVmZmVyaW5nIGJ1ZyB3aXRoIGludGVybGVhdmVkIHJlYWRzIGFuZCB3cml0ZXMgdGhhdAotICBjb3VsZCBhcHBlYXIgb24gQnVmZmVyZWRSYW5kb20gc3RyZWFtcy4KLQotLSBJc3N1ZSAjMTI3Nzg6IFJlZHVjZSBtZW1vcnkgY29uc3VtcHRpb24gd2hlbiBKU09OLWVuY29kaW5nIGEgbGFyZ2UKLSAgY29udGFpbmVyIG9mIG1hbnkgc21hbGwgb2JqZWN0cy4KLQotLSBJc3N1ZSAjMTI2NTA6IEZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgc3VicHJvY2Vzcy5Qb3BlbiBjb3VsZCBsZWFrCi0gIHJlc291cmNlcyAoRkQvem9tYmllKSB3aGVuIGtpbGxlZCBhdCB0aGUgd3JvbmcgdGltZS4KLQotLSBJc3N1ZSAjMTI3NDQ6IEZpeCBpbmVmZmljaWVudCByZXByZXNlbnRhdGlvbiBvZiBpbnRlZ2VycyBiZXR3ZWVuIDIqKjMxIGFuZAotICAyKio2MyBvbiBzeXN0ZW1zIHdpdGggYSA2NC1iaXQgQyAibG9uZyIuCi0KLS0gSXNzdWUgIzEyNjQ2OiBBZGQgYW4gJ2VvZicgYXR0cmlidXRlIHRvIHpsaWIuRGVjb21wcmVzcywgdG8gbWFrZSBpdCBlYXNpZXIgdG8KLSAgZGV0ZWN0IHRydW5jYXRlZCBpbnB1dCBzdHJlYW1zLgotCi0tIElzc3VlICMxMTUxMzogRml4IGV4Y2VwdGlvbiBoYW5kbGluZyBgYHRhcmZpbGUuVGFyRmlsZS5nem9wZW4oKWBgIHdoZW4KLSAgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW5lZC4KLQotLSBJc3N1ZSAjMTI2ODc6IEZpeCBhIHBvc3NpYmxlIGJ1ZmZlcmluZyBidWcgd2hlbiB1bnBpY2tsaW5nIHRleHQgbW9kZQotICAocHJvdG9jb2wgMCwgbW9zdGx5KSBwaWNrbGVzLgotCi0tIElzc3VlICMxMDA4NzogRml4IHRoZSBodG1sIG91dHB1dCBmb3JtYXQgb2YgdGhlIGNhbGVuZGFyIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTMxMjE6IGFkZCBzdXBwb3J0IGZvciBpbnBsYWNlIG1hdGggb3BlcmF0b3JzIHRvIGNvbGxlY3Rpb25zLkNvdW50ZXIuCi0KLS0gQWRkIHN1cHBvcnQgZm9yIHVuYXJ5IHBsdXMgYW5kIHVuYXJ5IG1pbnVzIHRvIGNvbGxlY3Rpb25zLkNvdW50ZXIuCi0KLS0gSXNzdWUgIzEyNjgzOiB1cmxwYXJzZSB1cGRhdGVkIHRvIGluY2x1ZGUgc3ZuIGFzIHNjaGVtZXMgdGhhdCB1c2VzIHJlbGF0aXZlCi0gIHBhdGhzLiAoc3ZuIGZyb20gMS41IG9ud2FyZHMgc3VwcG9ydCByZWxhdGl2ZSBwYXRoKS4KLQotLSBJc3N1ZSAjMTI2NTU6IEV4cG9zZSBmdW5jdGlvbnMgZnJvbSBzY2hlZC5oIGluIHRoZSBvcyBtb2R1bGU6IHNjaGVkX3lpZWxkKCksCi0gIHNjaGVkX3NldHNjaGVkdWxlcigpLCBzY2hlZF9nZXRzY2hlZHVsZXIoKSwgc2NoZWRfc2V0cGFyYW0oKSwKLSAgc2NoZWRfZ2V0X21pbl9wcmlvcml0eSgpLCBzY2hlZF9nZXRfbWF4X3ByaW9yaXR5KCksIHNjaGVkX3JyX2dldF9pbnRlcnZhbCgpLAotICBzY2hlZF9nZXRhZmZpbml0eSgpLCBzY2hlZF9zZXRhZmZpbml0eSgpLgotCi0tIEFkZCBUaHJlYWRFcnJvciB0byB0aHJlYWRpbmcuX19hbGxfXy4KLQotLSBJc3N1ZXMgIzExMTA0LCAjODY4ODogRml4IHRoZSBiZWhhdmlvciBvZiBkaXN0dXRpbHMnIHNkaXN0IGNvbW1hbmQgd2l0aAotICBtYW51YWxseS1tYWludGFpbmVkIE1BTklGRVNUIGZpbGVzLgotCi0tIElzc3VlICMxMTI4MTogc210cGxpYi5TVE1QIGdldHMgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyLCB3aGljaCBhZGRzIHRoZQotICBhYmlsaXR5IHRvIGJpbmQgdG8gc3BlY2lmaWMgc291cmNlIGFkZHJlc3Mgb24gYSBtYWNoaW5lIHdpdGggbXVsdGlwbGUKLSAgaW50ZXJmYWNlcy4gUGF0Y2ggYnkgUGF1bG8gU2NhcmRpbmUuCi0KLS0gSXNzdWUgIzEyNDY0OiB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkuY2xlYW51cCgpIHNob3VsZCBub3QgZm9sbG93Ci0gIHN5bWxpbmtzOiBmaXggaXQuIFBhdGNoIGJ5IFBldHJpIExlaHRpbmVuLgotCi0tIElzc3VlICM4ODg3OiAicHlkb2Mgc29tZWJ1aWx0aW4uc29tZW1ldGhvZCIgKG9yIGhlbHAoJ3NvbWVidWlsdGluLnNvbWVtZXRob2QnKQotICBpbiBQeXRob24gY29kZSkgbm93IGZpbmRzIHRoZSBkb2Mgb2YgdGhlIG1ldGhvZC4KLQotLSBJc3N1ZSAjMTA5Njg6IFJlbW92ZSBpbmRpcmVjdGlvbiBpbiB0aHJlYWRpbmcuICBUaGUgcHVibGljIG5hbWVzIChFdmVudCwKLSAgQ29uZGl0aW9uLCBldGMuKSB1c2VkIHRvIGJlIGZhY3RvcnkgZnVuY3Rpb25zIHJldHVybmluZyBpbnN0YW5jZXMgb2YgaGlkZGVuCi0gIGNsYXNzZXMgKF9FdmVudCwgX0NvbmRpdGlvbiwgZXRjLiksIGJlY2F1c2UgKGlmIEd1aWRvIHJlY2FsbHMgY29ycmVjdGx5KSB0aGlzCi0gIGNvZGUgcHJlLWRhdGVzIHRoZSBhYmlsaXR5IHRvIHN1YmNsYXNzIGV4dGVuc2lvbiB0eXBlcy4gIEl0IGlzIG5vdyBwb3NzaWJsZQotICB0byBpbmhlcml0IGZyb20gdGhlc2UgY2xhc3Nlcywgd2l0aG91dCBoYXZpbmcgdG8gaW1wb3J0IHRoZSBwcml2YXRlCi0gIHVuZGVyc2NvcmVkIG5hbWVzIGxpa2UgbXVsdGlwcm9jZXNzaW5nIGRpZC4KLQotLSBJc3N1ZSAjOTcyMzogQWRkIHNobGV4LnF1b3RlIGZ1bmN0aW9ucywgdG8gZXNjYXBlIGZpbGVuYW1lcyBhbmQgY29tbWFuZAotICBsaW5lcy4KLQotLSBJc3N1ZSAjMTI2MDM6IEZpeCBweWRvYy5zeW5vcHNpcygpIG9uIGZpbGVzIHdpdGggbm9uLW5lZ2F0aXZlIHN0X210aW1lLgotCi0tIElzc3VlICMxMjUxNDogVXNlIHRyeS9maW5hbGx5IHRvIGFzc3VyZSB0aGUgdGltZWl0IG1vZHVsZSByZXN0b3JlcyBnYXJiYWdlCi0gIGNvbGxlY3Rpb25zIHdoZW4gaXQgaXMgZG9uZS4KLQotLSBJc3N1ZSAjMTI2MDc6IEluIHN1YnByb2Nlc3MsIGZpeCBpc3N1ZSB3aGVyZSBpZiBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVyciBpcwotICBnaXZlbiBhcyBhIGxvdyBmZCwgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KLQotLSBJc3N1ZSAjMTI1NzY6IEZpeCB1cmxvcGVuIGJlaGF2aW9yIG9uIHNpdGVzIHdoaWNoIGRvIG5vdCBzZW5kIChvciBvYmZ1c2NhdGVzKQotICBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyLgotCi0tIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KLQotLSBJc3N1ZSAjMTgxMzogRml4IGNvZGVjIGxvb2t1cCB1bmRlciBUdXJraXNoIGxvY2FsZXMuCi0KLS0gSXNzdWUgIzEyNTkxOiBJbXByb3ZlIHN1cHBvcnQgb2YgInVuaXZlcnNhbCBuZXdsaW5lcyIgaW4gdGhlIHN1YnByb2Nlc3MKLSAgbW9kdWxlOiB0aGUgcGlwZWQgc3RyZWFtcyBjYW4gbm93IGJlIHByb3Blcmx5IHJlYWQgZnJvbSBvciB3cml0dGVuIHRvLgotCi0tIElzc3VlICMxMjU5MTogQWxsb3cgaW8uVGV4dElPV3JhcHBlciB0byB3b3JrIHdpdGggcmF3IElPIG9iamVjdHMgKHdpdGhvdXQKLSAgYSByZWFkMSgpIG1ldGhvZCksIGFuZCBhZGQgYSAqd3JpdGVfdGhyb3VnaCogcGFyYW1ldGVyIHRvIG1hbmRhdGUKLSAgdW5idWZmZXJlZCB3cml0ZXMuCi0KLS0gSXNzdWUgIzEwODgzOiBGaXggc29ja2V0IGxlYWtzIGluIHVybGxpYi5yZXF1ZXN0IHdoZW4gdXNpbmcgRlRQLgotCi0tIElzc3VlICMxMjU5MjogTWFrZSBQeXRob24gYnVpbGQgb24gT3BlbkJTRCA1IChhbmQgZnV0dXJlIG1ham9yIHJlbGVhc2VzKS4KLQotLSBJc3N1ZSAjMTIzNzI6IFBPU0lYIHNlbWFwaG9yZXMgYXJlIGJyb2tlbiBvbiBBSVg6IGRvbid0IHVzZSB0aGVtLgotCi0tIElzc3VlICMxMjU1MTogUHJvdmlkZSBhIGdldF9jaGFubmVsX2JpbmRpbmcoKSBtZXRob2Qgb24gU1NMIHNvY2tldHMgc28gYXMKLSAgdG8gZ2V0IGNoYW5uZWwgYmluZGluZyBkYXRhIGZvciB0aGUgY3VycmVudCBTU0wgc2Vzc2lvbiAob25seSB0aGUKLSAgInRscy11bmlxdWUiIGNoYW5uZWwgYmluZGluZyBpcyBpbXBsZW1lbnRlZCkuICBUaGlzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24KLSAgb2YgY2VydGFpbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgU0NSQU0tU0hBLTEtUExVUy4gIFBhdGNoIGJ5Ci0gIEphY2VrIEtvbmllY3pueS4KLQotLSBJc3N1ZSAjNjY1MTk0OiBlbWFpbC51dGlscyBub3cgaGFzIGZvcm1hdF9kYXRldGltZSBhbmQgcGFyc2VkYXRlX3RvX2RhdGV0aW1lCi0gIGZ1bmN0aW9ucywgYWxsb3dpbmcgZm9yIHJvdW5kIHRyaXBwaW5nIG9mIFJGQzI4MjIgZm9ybWF0IGRhdGVzLgotCi0tIElzc3VlICMxMjU3MTogQWRkIGEgcGxhdC1saW51eDMgZGlyZWN0b3J5IG1pcnJvcmluZyB0aGUgcGxhdC1saW51eDIKLSAgZGlyZWN0b3J5LCBzbyB0aGF0ICJpbXBvcnQgRExGQ04iIGFuZCBvdGhlciBzaW1pbGFyIGltcG9ydHMgd29yayBvbgotICBMaW51eCAzLjAuCi0KLS0gSXNzdWUgIzc0ODQ6IHNtdHBsaWIgbm8gbG9uZ2VyIHB1dHMgPD4gYXJvdW5kIGFkZHJlc3NlcyBpbiBWUkZZIGFuZCBFWFBOCi0gIGNvbW1hbmRzOyB0aGV5IGFyZW4ndCByZXF1aXJlZCBhbmQgaW4gZmFjdCBwb3N0Zml4IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IGZvcm0uCi0KLS0gSXNzdWUgIzEyMjczOiBSZW1vdmUgYXN0Ll9fdmVyc2lvbl9fLiBBU1QgY2hhbmdlcyBjYW4gYmUgYWNjb3VudGVkIGZvciBieQotICBjaGVja2luZyBzeXMudmVyc2lvbl9pbmZvIG9yIHN5cy5fbWVyY3VyaWFsLgotCi0tIFNpbGVuY2Ugc3B1cmlvdXMgImJyb2tlbiBwaXBlIiB0cmFjZWJhY2tzIHdoZW4gc2h1dHRpbmcgZG93biBhCi0gIFByb2Nlc3NQb29sRXhlY3V0b3IuCi0KLS0gRml4IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcgotICBieSBqb2luaW5nIGFsbCBxdWV1ZXMgYW5kIHByb2Nlc3NlcyB3aGVuIHNodXRkb3duKCkgaXMgY2FsbGVkLgotCi0tIElzc3VlICMxMTYwMzogRml4IGEgY3Jhc2ggd2hlbiBfX3N0cl9fIGlzIHJlYm91bmQgYXMgX19yZXByX18uICBQYXRjaCBieQotICBBbmRyZWFzIFN0w7xocmsuCi0KLS0gSXNzdWUgIzExMzIxOiBGaXggYSBjcmFzaCB3aXRoIG11bHRpcGxlIGltcG9ydHMgb2YgdGhlIF9waWNrbGUgbW9kdWxlIHdoZW4KLSAgZW1iZWRkaW5nIFB5dGhvbi4gIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KLQotLSBJc3N1ZSAjNjc1NTogQWRkIGdldF93Y2goKSBtZXRob2QgdG8gY3Vyc2VzLndpbmRvdyBjbGFzcy4gUGF0Y2ggYnkgScOxaWdvCi0gIFNlcm5hLgotCi0tIEFkZCBjZ2kuY2xvc2Vsb2coKSBmdW5jdGlvbiB0byBjbG9zZSB0aGUgbG9nIGZpbGUuCi0KLS0gSXNzdWUgIzEyNTAyOiBhc3luY29yZTogZml4IHBvbGxpbmcgbG9vcCB3aXRoIEFGX1VOSVggc29ja2V0cy4KLQotLSBJc3N1ZSAjNDM3NjogY3R5cGVzIG5vdyBzdXBwb3J0cyBuZXN0ZWQgc3RydWN0dXJlcyBpbiBhIGVuZGlhbiBkaWZmZXJlbnQgdGhhbgotICB0aGUgcGFyZW50IHN0cnVjdHVyZS4gUGF0Y2ggYnkgVmxhZCBSaXNjdXRpYS4KLQotLSBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlIF9DSFVOS19TSVpFIGF0dHJpYnV0ZSBvZiBhCi0gIFRleHRJT1dyYXBwZXIgdG8gYSBodWdlIHZhbHVlLCBub3QgVHlwZUVycm9yLgotCi0tIElzc3VlICMxMjUwNDogQ2xvc2UgZmlsZSBoYW5kbGVzIGluIGEgdGltZWx5IG1hbm5lciBpbiBwYWNrYWdpbmcuZGF0YWJhc2UuCi0gIFRoaXMgZml4ZXMgYSBidWcgd2l0aCB0aGUgcmVtb3ZlICh1bmluc3RhbGwpIGZlYXR1cmUgb24gV2luZG93cy4KLQotLSBJc3N1ZXMgIzEyMTY5IGFuZCAjMTA1MTA6IEZhY3RvciBvdXQgY29kZSB1c2VkIGJ5IHZhcmlvdXMgcGFja2FnaW5nIGNvbW1hbmRzCi0gIHRvIG1ha2UgSFRUUCBQT1NUIHJlcXVlc3RzLCBhbmQgbWFrZSBzdXJlIGl0IHVzZXMgQ1JMRi4KLQotLSBJc3N1ZSAjMTIwMTY6IE11bHRpYnl0ZSBDSksgZGVjb2RlcnMgbm93IHJlc3luY2hyb25pemUgZmFzdGVyLiBUaGV5IG9ubHkKLSAgaWdub3JlIHRoZSBmaXJzdCBieXRlIG9mIGFuIGludmFsaWQgYnl0ZSBzZXF1ZW5jZS4gRm9yIGV4YW1wbGUsCi0gIGInXHhmZlxuJy5kZWNvZGUoJ2diMjMxMicsICdyZXBsYWNlJykgZ2l2ZXMgJ1x1ZmZmZFxuJyBpbnN0ZWFkIG9mICdcdWZmZmQnLgotCi0tIElzc3VlICMxMjQ1OTogdGltZS5zbGVlcCgpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSBzbGVlcCBsZW5ndGggaXMKLSAgbmVnYXRpdmUsIGluc3RlYWQgb2YgYW4gaW5maW5pdGUgc2xlZXAgb24gV2luZG93cyBvciByYWlzaW5nIGFuIElPRXJyb3Igb24KLSAgTGludXggZm9yIGV4YW1wbGUsIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3VyIG9uIGFsbCBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzEyNDUxOiBweWRvYzogaHRtbF9nZXRmaWxlKCkgbm93IHVzZXMgdG9rZW5pemUub3BlbigpIHRvIHN1cHBvcnQKLSAgUHl0aG9uIHNjcmlwdHMgdXNpbmcgYSBlbmNvZGluZyBkaWZmZXJlbnQgdGhhbiBVVEYtOCAocmVhZCB0aGUgY29kaW5nIGNvb2tpZQotICBvZiB0aGUgc2NyaXB0KS4KLQotLSBJc3N1ZSAjMTI0OTM6IHN1YnByb2Nlc3M6IFBvcGVuLmNvbW11bmljYXRlKCkgbm93IGFsc28gaGFuZGxlcyBFSU5UUiBlcnJvcnMKLSAgaWYgdGhlIHByb2Nlc3MgaGFzIG9ubHkgb25lIHBpcGUuCi0KLS0gSXNzdWUgIzEyNDY3OiB3YXJuaW5nczogZml4IGEgcmFjZSBjb25kaXRpb24gaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgYXQKLSAgc2h1dGRvd24sIGlmIGdsb2JhbHMoKVsnX19maWxlX18nXSBpcyBOb25lLgotCi0tIElzc3VlICMxMjQ1MTogcHlkb2M6IGltcG9ydGZpbGUoKSBub3cgb3BlbnMgdGhlIFB5dGhvbiBzY3JpcHQgaW4gYmluYXJ5IG1vZGUsCi0gIGluc3RlYWQgb2YgdGV4dCBtb2RlIHVzaW5nIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvIGF2b2lkIGVuY29kaW5nIGlzc3Vlcy4KLQotLSBJc3N1ZSAjMTI0NTE6IHJ1bnB5OiBydW5fcGF0aCgpIG5vdyBvcGVucyB0aGUgUHl0aG9uIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSwKLSAgaW5zdGVhZCBvZiB0ZXh0IG1vZGUgdXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8gc3VwcG9ydCBvdGhlciBlbmNvZGluZ3MKLSAgdGhhbiBVVEYtOCAoc2NyaXB0cyB1c2luZyB0aGUgY29kaW5nIGNvb2tpZSkuCi0KLS0gSXNzdWUgIzEyNDUxOiB4bWwuZG9tLnB1bGxkb206IHBhcnNlKCkgbm93IG9wZW5zIGZpbGVzIGluIGJpbmFyeSBtb2RlIGluc3RlYWQKLSAgb2YgdGhlIHRleHQgbW9kZSAodXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZykgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgotCi0tIElzc3VlICMxMjE0NzogQWRqdXN0IHRoZSBuZXctaW4tMy4yIHNtdHBsaWIuc2VuZF9tZXNzYWdlIG1ldGhvZCBmb3IgYmV0dGVyCi0gIGNvbmZvcm1hbmNlIHRvIHRoZSBSRkNzOiBjb3JyZWN0bHkgaGFuZGxlIFNlbmRlciBhbmQgUmVzZW50LSBoZWFkZXJzLgotCi0tIElzc3VlICMxMjM1MjogRml4IGEgZGVhZGxvY2sgaW4gbXVsdGlwcm9jZXNzaW5nLkhlYXAgd2hlbiBhIGJsb2NrIGlzIGZyZWVkIGJ5Ci0gIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGlsZSB0aGUgSGVhcCBsb2NrIGlzIGhlbGQuCi0KLS0gSXNzdWUgIzEyNDYyOiB0aW1lLnNsZWVwKCkgbm93IGltbWVkaWF0ZWx5IGNhbGxzIHRoZSAoUHl0aG9uKSBzaWduYWwgaGFuZGxlcgotICBpZiBpdCBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gd2FpdCB1bnRpbCB0aGUgbmV4dAotICBpbnN0cnVjdGlvbi4KLQotLSBJc3N1ZSAjMTI0NDI6IG5ldyBzaHV0aWwuZGlza191c2FnZSBmdW5jdGlvbiwgcHJvdmlkaW5nIHRvdGFsLCB1c2VkIGFuZCBmcmVlCi0gIGRpc2sgc3BhY2Ugc3RhdGlzdGljcy4KLQotLSBJc3N1ZSAjMTI0NTE6IFRoZSBYSW5jbHVkZSBkZWZhdWx0IGxvYWRlciBvZiB4bWwuZXRyZWUgbm93IGRlY29kZXMgZmlsZXMgZnJvbQotICBVVEYtOCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIEl0IG5vdwotICBhbHNvIG9wZW5zIFhNTCBmaWxlcyBmb3IgdGhlIHBhcnNlciBpbiBiaW5hcnkgbW9kZSBpbnN0ZWFkIG9mIHRoZSB0ZXh0IG1vZGUKLSAgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgotCi0tIElzc3VlICMxMjQ1MTogZG9jdGVzdC5kZWJ1Z19zY3JpcHQoKSBkb2Vzbid0IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlCi0gIGFueW1vcmUgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgotCi0tIElzc3VlICMxMjQ1MTogcHlkb2Muc3lub3BzaXMoKSBub3cgcmVhZHMgdGhlIGVuY29kaW5nIGNvb2tpZSBpZiBhdmFpbGFibGUsCi0gIHRvIHJlYWQgdGhlIFB5dGhvbiBzY3JpcHQgZnJvbSB0aGUgcmlnaHQgZW5jb2RpbmcuCi0KLS0gSXNzdWUgIzEyNDUxOiBkaXN0dXRpbHMgbm93IG9wZW5zIHRoZSBzZXR1cCBzY3JpcHQgaW4gYmluYXJ5IG1vZGUgdG8gcmVhZCB0aGUKLSAgZW5jb2RpbmcgY29va2llLCBpbnN0ZWFkIG9mIG9wZW5pbmcgaXQgaW4gVVRGLTguCi0KLS0gSXNzdWUgIzk1MTY6IE9uIE1hYyBPUyBYLCBjaGFuZ2UgRGlzdHV0aWxzIHRvIG5vIGxvbmdlciBnbG9iYWxseSBhdHRlbXB0IHRvCi0gIGNoZWNrIG9yIHNldCB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUKLSAgaW50ZXJwcmV0ZXIgcHJvY2Vzcy4gIFRoaXMgY291bGQgY2F1c2UgZmFpbHVyZXMgaW4gbm9uLURpc3R1dGlscyBzdWJwcm9jZXNzZXMKLSAgYW5kIHdhcyB1bnJlbGlhYmxlIHNpbmNlIHRlc3RzIG9yIHVzZXIgcHJvZ3JhbXMgY291bGQgbW9kaWZ5IHRoZSBpbnRlcnByZXRlcgotICBlbnZpcm9ubWVudCBhZnRlciBEaXN0dXRpbHMgc2V0IGl0LiAgSW5zdGVhZCwgaGF2ZSBEaXN0dXRpbHMgc2V0IHRoZQotICBkZXBsb3ltZW50IHRhcmdldCBvbmx5IGluIHRoZSBlbnZpcm9ubWVudCBvZiBlYWNoIGJ1aWxkIHN1YnByb2Nlc3MuICBJdCBpcwotICBzdGlsbCBwb3NzaWJsZSB0byBnbG9iYWxseSBvdmVycmlkZSB0aGUgZGVmYXVsdCBieSBzZXR0aW5nCi0gIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBiZWZvcmUgbGF1bmNoaW5nIHRoZSBpbnRlcnByZXRlcjsgaXRzIHZhbHVlIG11c3QgYmUKLSAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIHZhbHVlIHdpdGggd2hpY2ggdGhlIGludGVycHJldGVyCi0gIHdhcyBidWlsdC4gIEFsc28sIGltcGxlbWVudCB0aGUgc2FtZSBoYW5kbGluZyBpbiBwYWNrYWdpbmcuCi0KLS0gSXNzdWUgIzEyNDIyOiBJbiB0aGUgY29weSBtb2R1bGUsIGRvbid0IHN0b3JlIG9iamVjdHMgdGhhdCBhcmUgdGhlaXIgb3duIGNvcHkKLSAgaW4gdGhlIG1lbW8gZGljdC4KLQotLSBJc3N1ZSAjMTIzMDM6IEFkZCBzaWd3YWl0aW5mbygpIGFuZCBzaWd0aW1lZHdhaXQoKSB0byB0aGUgc2lnbmFsIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTI0MDQ6IFJlbW92ZSBDODkgaW5jb21wYXRpYmxlIGNvZGUgZnJvbSBtbWFwIG1vZHVsZS4gUGF0Y2ggYnkgQWtpcmEKLSAgS2l0YWRhLgotCi0tIElzc3VlICMxODc0OiBlbWFpbCBub3cgZGV0ZWN0cyBhbmQgcmVwb3J0cyBhcyBhIGRlZmVjdCB0aGUgcHJlc2VuY2Ugb2YKLSAgYW55IENURSBvdGhlciB0aGFuIDdiaXQsIDhiaXQsIG9yIGJpbmFyeSBvbiBhIG11bHRpcGFydC4KLQotLSBJc3N1ZSAjMTIzODM6IEZpeCBzdWJwcm9jZXNzIG1vZHVsZSB3aXRoIGVudj17fTogZG9uJ3QgY29weSB0aGUgZW52aXJvbm1lbnQKLSAgdmFyaWFibGVzLCBzdGFydCB3aXRoIGFuIGVtcHR5IGVudmlyb25tZW50LgotCi0tIElzc3VlICMxMTYzNzogRml4IHN1cHBvcnQgZm9yIGltcG9ydGluZyBwYWNrYWdpbmcgc2V0dXAgaG9va3MgZnJvbSB0aGUKLSAgcHJvamVjdCBkaXJlY3RvcnkuCi0KLS0gSXNzdWUgIzY3NzE6IE1vdmVkIHRoZSBjdXJzZXMud3JhcHBlciBmdW5jdGlvbiBmcm9tIHRoZSBzaW5nbGUtZnVuY3Rpb24KLSAgd3JhcHBlciBtb2R1bGUgaW50byBfX2luaXRfXywgZWxpbWluYXRpbmcgdGhlIG1vZHVsZS4gIFNpbmNlIF9faW5pdF9fIHdhcwotICBhbHJlYWR5IGltcG9ydGluZyB0aGUgZnVuY3Rpb24gdG8gY3Vyc2VzLndyYXBwZXIsIHRoZXJlIGlzIG5vIEFQSSBjaGFuZ2UuCi0KLS0gSXNzdWUgIzExNTg0OiBlbWFpbC5oZWFkZXIuZGVjb2RlX2hlYWRlciBubyBsb25nZXIgZmFpbHMgaWYgdGhlIGhlYWRlcgotICBwYXNzZWQgdG8gaXQgaXMgYSBIZWFkZXIgb2JqZWN0LCBhbmQgSGVhZGVyL21ha2VfaGVhZGVyIG5vIGxvbmdlciBmYWlsCi0gIGlmIGdpdmVuIGJpbmFyeSB1bmtub3duLThiaXQgaW5wdXQuCi0KLS0gSXNzdWUgIzExNzAwOiBtYWlsYm94IHByb3h5IG9iamVjdCBjbG9zZSBtZXRob2RzIGNhbiBub3cgYmUgY2FsbGVkIG11bHRpcGxlCi0gIHRpbWVzIHdpdGhvdXQgZXJyb3IuCi0KLS0gSXNzdWUgIzExNzY3OiBDb3JyZWN0IGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG1haWxib3gncyBfX2dldGl0ZW1fXyBtZXRob2QuCi0KLS0gSXNzdWUgIzEyMTMzOiBBYnN0cmFjdEhUVFBIYW5kbGVyLmRvX29wZW4oKSBvZiB1cmxsaWIucmVxdWVzdCBjbG9zZXMgdGhlIEhUVFAKLSAgY29ubmVjdGlvbiBpZiBpdHMgZ2V0cmVzcG9uc2UoKSBtZXRob2QgZmFpbHMgd2l0aCBhIHNvY2tldCBlcnJvci4gUGF0Y2gKLSAgd3JpdHRlbiBieSBFemlvIE1lbG90dGkuCi0KLS0gSXNzdWUgIzEyMjQwOiBBbGxvdyBtdWx0aXBsZSBzZXR1cCBob29rcyBpbiBwYWNrYWdpbmcncyBzZXR1cC5jZmcgZmlsZXMuCi0gIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgQnJheS4KLQotLSBJc3N1ZSAjOTI4NDogQWxsb3cgaW5zcGVjdC5maW5kc291cmNlKCkgdG8gZmluZCB0aGUgc291cmNlIG9mIGRvY3Rlc3QKLSAgZnVuY3Rpb25zLgotCi0tIElzc3VlICMxMTU5NTogRml4IGFzc29ydGVkIGJ1Z3MgaW4gcGFja2FnaW5nLnV0aWwuY2ZnX3RvX2FyZ3MsIGEKLSAgY29tcGF0aWJpbGl0eSBoZWxwZXIgZm9yIHRoZSBkaXN0dXRpbHMtcGFja2FnaW5nIHRyYW5zaXRpb24uICBPcmlnaW5hbCBwYXRjaAotICBieSBFcmlrIEJyYXkuCi0KLS0gSXNzdWUgIzEyMjg3OiBJbiBvc3NhdWRpb2RldiwgY2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlzbid0IGNsb3NlZCBpbiBzZXZlcmFsCi0gIG1ldGhvZHMuCi0KLS0gSXNzdWUgIzEyMDA5OiBGaXhlZCByZWdyZXNzaW9uIGluIG5ldHJjIGZpbGUgY29tbWVudCBoYW5kbGluZy4KLQotLSBJc3N1ZSAjMTIyNDY6IFdhcm4gYW5kIGZhaWwgd2hlbiB0cnlpbmcgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHByb2plY3QgZnJvbQotICBhbiB1bmluc3RhbGxlZCBQeXRob24gKGJ1aWx0IGluIGEgc291cmNlIGNoZWNrb3V0KS4gIE9yaWdpbmFsIHBhdGNoIGJ5Ci0gIFRzaGVwYW5nIExla2hvbmtob2JlLgotCi0tIElzc3VlICMxMDY5NDogemlwZmlsZSBub3cgaWdub3JlcyBnYXJiYWdlIGF0IHRoZSBlbmQgb2YgYSB6aXBmaWxlLgotCi0tIElzc3VlICMxMjI4MzogRml4ZWQgcmVncmVzc2lvbiBpbiBzbXRwbGliIHF1b3Rpbmcgb2YgbGVhZGluZyBkb3RzIGluIERBVEEuCi0KLS0gSXNzdWUgIzEwNDI0OiBBcmdwYXJzZSBub3cgaW5jbHVkZXMgdGhlIG5hbWVzIG9mIHRoZSBtaXNzaW5nIHJlcXVpcmVkCi0gIGFyZ3VtZW50cyBpbiB0aGUgbWlzc2luZyBhcmd1bWVudHMgZXJyb3IgbWVzc2FnZS4KLQotLSBJc3N1ZSAjMTIxNjg6IFN5c0xvZ0hhbmRsZXIgbm93IGFsbG93cyBOVUwgdGVybWluYXRpb24gdG8gYmUgY29udHJvbGxlZCB1c2luZwotICBhIG5ldyAnYXBwZW5kX251bCcgYXR0cmlidXRlIG9uIHRoZSBoYW5kbGVyLgotCi0tIElzc3VlICMxMTU4MzogU3BlZWQgdXAgb3MucGF0aC5pc2RpciBvbiBXaW5kb3dzIGJ5IHVzaW5nIEdldEZpbGVBdHRyaWJ1dGVzCi0gIGluc3RlYWQgb2Ygb3Muc3RhdC4KLQotLSBJc3N1ZSAjMTIwMjE6IE1ha2UgbW1hcCdzIHJlYWQoKSBtZXRob2QgYXJndW1lbnQgb3B0aW9uYWwuIFBhdGNoIGJ5IFBldHJpCi0gIExlaHRpbmVuLgotCi0tIElzc3VlICM5MjA1OiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvciBub3cgZGV0ZWN0cyBraWxsZWQKLSAgY2hpbGRyZW4gYW5kIHJhaXNlcyBCcm9rZW5Qcm9jZXNzUG9vbCBpbiBzdWNoIGEgc2l0dWF0aW9uLiAgUHJldmlvdXNseSBpdAotICB3b3VsZCByZWxpYWJseSBmcmVlemUvZGVhZGxvY2suCi0KLS0gSXNzdWUgIzEyMDQwOiBFeHBvc2UgYSBuZXcgYXR0cmlidXRlIGBgc2VudGluZWxgYCBvbiBpbnN0YW5jZXMgb2YKLSAgYGBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2BgLiAgQWxzbywgZml4IFByb2Nlc3Muam9pbigpIHRvIG5vdCB1c2UgcG9sbGluZwotICBhbnltb3JlLCB3aGVuIGdpdmVuIGEgdGltZW91dC4KLQotLSBJc3N1ZSAjMTE4OTM6IFJlbW92ZSBvYnNvbGV0ZSBpbnRlcm5hbCB3cmFwcGVyIGNsYXNzIGBgU1NMRmFrZUZpbGVgYCBpbiB0aGUKLSAgc210cGxpYiBtb2R1bGUuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgotCi0tIElzc3VlICMxMjA4MDogRml4IGEgRGVjaW1hbC5wb3dlcigpIGNhc2UgdGhhdCB0b29rIGFuIHVucmVhc29uYWJseSBsb25nIHRpbWUKLSAgdG8gY29tcHV0ZS4KLQotLSBJc3N1ZSAjMTIyMjE6IFJlbW92ZSBfX3ZlcnNpb25fXyBhdHRyaWJ1dGVzIGZyb20gcHlleHBhdCwgcGlja2xlLCB0YXJmaWxlLAotICBweWRvYywgdGtpbnRlciwgYW5kIHhtbC5wYXJzZXJzLmV4cGF0LiBUaGlzIHdlcmUgdXNlbGVzcyB2ZXJzaW9uIGNvbnN0YW50cwotICBsZWZ0IG92ZXIgZnJvbSB0aGUgTWVyY3VyaWFsIHRyYW5zaXRpb24KLQotLSBOYW1lZCB0dXBsZXMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggdmFycygpLgotCi0tIElzc3VlICMxMjA4NTogRml4IGFuIGF0dHJpYnV0ZSBlcnJvciBpbiBzdWJwcm9jZXNzLlBvcGVuIGRlc3RydWN0b3IgaWYgdGhlCi0gIGNvbnN0cnVjdG9yIGhhcyBmYWlsZWQsIGUuZy4gYmVjYXVzZSBvZiBhbiB1bmRlY2xhcmVkIGtleXdvcmQgYXJndW1lbnQuIFBhdGNoCi0gIHdyaXR0ZW4gYnkgT2xlZyBPc2hteWFuLgotCi0tIElzc3VlICMxMjAyODogTWFrZSB0aHJlYWRpbmcuX2dldF9pZGVudCgpIHB1YmxpYywgcmVuYW1lIGl0IHRvCi0gIHRocmVhZGluZy5nZXRfaWRlbnQoKSBhbmQgZG9jdW1lbnQgaXQuIFRoaXMgZnVuY3Rpb24gd2FzIGFscmVhZHkgdXNlZCB1c2luZwotICBfdGhyZWFkLmdldF9pZGVudCgpLgotCi0tIElzc3VlICMxMjE3MTogSW5jcmVtZW50YWxFbmNvZGVyLnJlc2V0KCkgb2YgQ0pLIGNvZGVjcyAobXVsdGlieXRlY29kZWMpIGNhbGxzCi0gIGVuY3Jlc2V0KCkgaW5zdGVhZCBvZiBkZWNyZXNldCgpLgotCi0tIElzc3VlICMxMjIxODogUmVtb3ZlZCB3c2dpcmVmLmVnZy1pbmZvLgotCi0tIElzc3VlICMxMjE5NjogQWRkIHBpcGUyKCkgdG8gdGhlIG9zIG1vZHVsZS4KLQotLSBJc3N1ZSAjOTg1MDY0OiBNYWtlIHBsaXN0bGliIG1vcmUgcmVzaWxpZW50IHRvIGZhdWx0eSBpbnB1dCBwbGlzdHMuCi0gIFBhdGNoIGJ5IE1oZXIgTW92c2lzeWFuLgotCi0tIElzc3VlICMxNjI1OiBCWjJGaWxlIGFuZCBiejIuZGVjb21wcmVzcygpIG5vdyBzdXBwb3J0IG11bHRpLXN0cmVhbSBmaWxlcy4KLSAgSW5pdGlhbCBwYXRjaCBieSBOaXIgQWlkZXMuCi0KLS0gSXNzdWUgIzEyMTc1OiBCdWZmZXJlZFJlYWRlci5yZWFkKC0xKSBub3cgY2FsbHMgcmF3LnJlYWRhbGwoKSBpZiBhdmFpbGFibGUuCi0KLS0gSXNzdWUgIzEyMTc1OiBGaWxlSU8ucmVhZGFsbCgpIG5vdyBvbmx5IHJlYWRzIHRoZSBmaWxlIHBvc2l0aW9uIGFuZCBzaXplCi0gIG9uY2UuCi0KLS0gSXNzdWUgIzEyMTc1OiBSYXdJT0Jhc2UucmVhZGFsbCgpIG5vdyByZXR1cm5zIE5vbmUgaWYgcmVhZCgpIHJldHVybnMgTm9uZS4KLQotLSBJc3N1ZSAjMTIxNzU6IEZpbGVJTy5yZWFkYWxsKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiBhbiBJT0Vycm9yCi0gIGlmIHRoZSBmaWxlIGlzIGNsb3NlZC4KLQotLSBJc3N1ZSAjMTExMDk6IE5ldyBzZXJ2aWNlX2FjdGlvbiBtZXRob2QgZm9yIEJhc2VTZXJ2ZXIsIHVzZWQgYnkgRm9ya2luZ01peGluCi0gIGNsYXNzIGZvciBjbGVhbnVwLiBJbml0aWFsIFBhdGNoIGJ5IEp1c3RpbiBXYXJrZW50aW4uCi0KLS0gSXNzdWUgIzEyMDQ1OiBBdm9pZCBkdXBsaWNhdGUgZXhlY3V0aW9uIG9mIGNvbW1hbmQgaW4KLSAgY3R5cGVzLnV0aWwuX2dldF9zb25hbWUoKS4gIFBhdGNoIGJ5IFNpamluIEpvc2VwaC4KLQotLSBJc3N1ZSAjMTA4MTg6IFJlbW92ZSB0aGUgVGsgR1VJIGFuZCB0aGUgc2VydmUoKSBmdW5jdGlvbiBvZiB0aGUgcHlkb2MgbW9kdWxlLAotICBweWRvYyAtZyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIgYW5kIGl0IGhhcyBhIG5ldyBlbmhhbmNlZCB3ZWIKLSAgc2VydmVyLgotCi0tIElzc3VlICMxNDQxNTMwOiBJbiBpbWFwbGliLCByZWFkIHRoZSBkYXRhIGluIG9uZSBjaHVuayB0byBzcGVlZCB1cCBsYXJnZQotICByZWFkcyBhbmQgc2ltcGxpZnkgY29kZS4KLQotLSBJc3N1ZSAjMTIwNzA6IEZpeCB0aGUgTWFrZWZpbGUgcGFyc2VyIG9mIHRoZSBzeXNjb25maWcgbW9kdWxlIHRvIGhhbmRsZQotICBjb3JyZWN0bHkgcmVmZXJlbmNlcyB0byAiYm9ndXMgdmFyaWFibGUiIChlLmcuICJwcmVmaXg9JC9vcHQvcHl0aG9uIikuCi0KLS0gSXNzdWUgIzEyMTAwOiBEb24ndCByZXNldCBpbmNyZW1lbnRhbCBlbmNvZGVycyBvZiBDSksgY29kZWNzIGF0IGVhY2ggY2FsbCB0bwotICB0aGVpciBlbmNvZGUoKSBtZXRob2QgYW55bW9yZSwgYnV0IGNvbnRpbnVlIHRvIGNhbGwgdGhlIHJlc2V0KCkgbWV0aG9kIGlmIHRoZQotICBmaW5hbCBhcmd1bWVudCBpcyBUcnVlLgotCi0tIElzc3VlICMxMjA0OTogQWRkIFJBTkRfYnl0ZXMoKSBhbmQgUkFORF9wc2V1ZG9fYnl0ZXMoKSBmdW5jdGlvbnMgdG8gdGhlIHNzbAotICBtb2R1bGUuCi0KLS0gSXNzdWUgIzY1MDE6IG9zLmRldmljZV9lbmNvZGluZygpIHJldHVybnMgTm9uZSBvbiBXaW5kb3dzIGlmIHRoZSBhcHBsaWNhdGlvbgotICBoYXMgbm8gY29uc29sZS4KLQotLSBJc3N1ZSAjMTIxMDU6IEFkZCBPX0NMT0VYRUMgdG8gdGhlIG9zIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTIwNzk6IERlY2ltYWwoJ0luZmluaXR5JykuZm1hKERlY2ltYWwoJzAnKSwgKDMuOTEyMjQzMTgxMjY3ODZlKzE5KzBqKSkKLSAgbm93IHJhaXNlcyBUeXBlRXJyb3IgKHJlZmxlY3RpbmcgdGhlIGludmFsaWQgdHlwZSBvZiB0aGUgM3JkIGFyZ3VtZW50KSByYXRoZXIKLSAgdGhhbiBEZWNpbWFsLkludmFsaWRPcGVyYXRpb24uCi0KLS0gSXNzdWUgIzEyMTI0OiB6aXBpbXBvcnQgZG9lc24ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHpsaWIuZGVjb21wcmVzcygpIGFueW1vcmUKLSAgdG8gYmUgYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZS4KLQotLSBBZGQgdGhlIHBhY2thZ2luZyBtb2R1bGUsIGFuIGltcHJvdmVkIGZvcmsgb2YgZGlzdHV0aWxzIChhbHNvIGtub3duIGFzCi0gIGRpc3R1dGlsczIpLgotCi0tIElzc3VlICMxMjA2NTogY29ubmVjdF9leCgpIG9uIGFuIFNTTCBzb2NrZXQgbm93IHJldHVybnMgdGhlIG9yaWdpbmFsIGVycm5vCi0gIHdoZW4gdGhlIHNvY2tldCdzIHRpbWVvdXQgZXhwaXJlcyAoaXQgdXNlZCB0byByZXR1cm4gTm9uZSkuCi0KLS0gSXNzdWUgIzg4MDk6IFRoZSBTTVRQX1NTTCBjb25zdHJ1Y3RvciBhbmQgU01UUC5zdGFydHRscygpIG5vdyBzdXBwb3J0Ci0gIHBhc3NpbmcgYSBgYGNvbnRleHRgYCBhcmd1bWVudCBwb2ludGluZyB0byBhbiBzc2wuU1NMQ29udGV4dCBpbnN0YW5jZS4KLSAgUGF0Y2ggYnkgS2FzdW4gSGVyYXRoLgotCi0tIElzc3VlICM5NTE2OiBJc3N1ZSAjOTUxNjogYXZvaWQgZXJyb3JzIGluIHN5c2NvbmZpZyB3aGVuIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotICBpcyBzZXQgaW4gc2hlbGwuCi0KLS0gSXNzdWUgIzg2NTA6IE1ha2UgemxpYiBtb2R1bGUgNjQtYml0IGNsZWFuLiBjb21wcmVzcygpLCBkZWNvbXByZXNzKCkgYW5kCi0gIHRoZWlyIGluY3JlbWVudGFsIGNvdW50ZXJwYXJ0cyBub3cgcmFpc2UgT3ZlcmZsb3dFcnJvciBpZiBnaXZlbiBhbiBpbnB1dAotICBsYXJnZXIgdGhhbiA0R0IsIGluc3RlYWQgb2Ygc2lsZW50bHkgdHJ1bmNhdGluZyB0aGUgaW5wdXQgYW5kIHJldHVybmluZwotICBhbiBpbmNvcnJlY3QgcmVzdWx0LgotCi0tIElzc3VlICMxMjA1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBjbGVhcnMgdGhlIHVuY29uc3VtZWRfdGFpbAotICBhdHRyaWJ1dGUgd2hlbiBjYWxsZWQgd2l0aG91dCBhIG1heF9sZW5ndGggYXJndW1lbnQuCi0KLS0gSXNzdWUgIzEyMDYyOiBGaXggYSBmbHVzaGluZyBidWcgd2hlbiBkb2luZyBhIGNlcnRhaW4gdHlwZSBvZiBJL08gc2VxdWVuY2UKLSAgb24gYSBmaWxlIG9wZW5lZCBpbiByZWFkK3dyaXRlIG1vZGUgKG5hbWVseTogcmVhZGluZywgc2Vla2luZyBhIGJpdCBmb3J3YXJkLAotICB3cml0aW5nLCB0aGVuIHNlZWtpbmcgYmVmb3JlIHRoZSBwcmV2aW91cyB3cml0ZSBidXQgc3RpbGwgd2l0aGluIGJ1ZmZlcmVkCi0gIGRhdGEsIGFuZCB3cml0aW5nIGFnYWluKS4KLQotLSBJc3N1ZSAjOTk3MTogV3JpdGUgYW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlcmVkUmVhZGVyLnJlYWRpbnRvKCkuCi0gIFBhdGNoIGJ5IEpvaG4gTydDb25ub3IuCi0KLS0gSXNzdWUgIzExNzk5OiB1cmxsaWIucmVxdWVzdCBBdXRoZW50aWNhdGlvbiBIYW5kbGVycyB3aWxsIHJhaXNlIGEgVmFsdWVFcnJvcgotICB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIHVuc3VwcG9ydGVkIEF1dGhlbnRpY2F0aW9uIFNjaGVtZS4gUGF0Y2ggY29udHJpYnV0ZWQKLSAgYnkgWXV2YWwgR3JlZW5maWVsZC4KLQotLSBJc3N1ZSAjMTA0MTksICM2MDExOiBidWlsZF9zY3JpcHRzIGNvbW1hbmQgb2YgZGlzdHV0aWxzIGhhbmRsZXMgY29ycmVjdGx5Ci0gIG5vbi1BU0NJSSBwYXRoIChwYXRoIHRvIHRoZSBQeXRob24gZXhlY3V0YWJsZSkuIE9wZW4gYW5kIHdyaXRlIHRoZSBzY3JpcHQgaW4KLSAgYmluYXJ5IG1vZGUsIGJ1dCBlbnN1cmUgdGhhdCB0aGUgc2hlYmFuZyBpcyBkZWNvZGFibGUgZnJvbSBVVEYtOCBhbmQgZnJvbSB0aGUKLSAgZW5jb2Rpbmcgb2YgdGhlIHNjcmlwdC4KLQotLSBJc3N1ZSAjODQ5ODogSW4gc29ja2V0LmFjY2VwdCgpLCBhbGxvdyB0byBzcGVjaWZ5IDAgYXMgYSBiYWNrbG9nIHZhbHVlIGluCi0gIG9yZGVyIHRvIGFjY2VwdCBleGFjdGx5IG9uZSBjb25uZWN0aW9uLiAgUGF0Y2ggYnkgRGFuaWVsIEV2ZXJzLgotCi0tIElzc3VlICMxMjAxMTogc2lnbmFsLnNpZ25hbCgpIGFuZCBzaWduYWwuc2lnaW50ZXJydXB0KCkgcmFpc2UgYW4gT1NFcnJvciwKLSAgaW5zdGVhZCBvZiBhIFJ1bnRpbWVFcnJvcjogT1NFcnJvciBoYXMgYW4gZXJybm8gYXR0cmlidXRlLgotCi0tIElzc3VlICMzNzA5OiBhZGQgYSBmbHVzaF9oZWFkZXJzIG1ldGhvZCB0byBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLCB3aGljaAotICBtYW5hZ2VzIHRoZSBzZW5kaW5nIG9mIGhlYWRlcnMgdG8gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hpbmcgdGhlIGludGVybmFsCi0gIGhlYWRlcnMgYnVmZmVyLiBQYXRjaCBjb250cmlidXRpb24gYnkgQW5kcmV3IFNjaGFhZgotCi0tIElzc3VlICMxMTc0MzogUmV3cml0ZSBtdWx0aXByb2Nlc3NpbmcgY29ubmVjdGlvbiBjbGFzc2VzIGluIHB1cmUgUHl0aG9uLgotCi0tIElzc3VlICMxMTE2NDogU3RvcCB0cnlpbmcgdG8gdXNlIF94bWxwbHVzIGluIHRoZSB4bWwgbW9kdWxlLgotCi0tIElzc3VlICMxMTg4ODogQWRkIGxvZzIgZnVuY3Rpb24gdG8gbWF0aCBtb2R1bGUuIFBhdGNoIHdyaXR0ZW4gYnkgTWFyawotICBEaWNraW5zb24uCi0KLS0gSXNzdWUgIzEyMDEyOiBzc2wuUFJPVE9DT0xfU1NMdjIgYmVjb21lcyBvcHRpb25hbC4KLQotLSBJc3N1ZSAjODQwNzogVGhlIHNpZ25hbCBoYW5kbGVyIHdyaXRlcyB0aGUgc2lnbmFsIG51bWJlciBhcyBhIHNpbmdsZSBieXRlCi0gIGluc3RlYWQgb2YgYSBudWwgYnl0ZSBpbnRvIHRoZSB3YWtldXAgZmlsZSBkZXNjcmlwdG9yLiBTbyBpdCBpcyBwb3NzaWJsZSB0bwotICB3YWl0IG1vcmUgdGhhbiBvbmUgc2lnbmFsIGFuZCBrbm93IHdoaWNoIHNpZ25hbHMgd2VyZSByYWlzZWQuCi0KLS0gSXNzdWUgIzg0MDc6IEFkZCBwdGhyZWFkX2tpbGwoKSwgc2lncGVuZGluZygpIGFuZCBzaWd3YWl0KCkgZnVuY3Rpb25zIHRvIHRoZQotICBzaWduYWwgbW9kdWxlLgotCi0tIElzc3VlICMxMTkyNzogU01UUF9TU0wgbm93IHVzZXMgcG9ydCA0NjUgYnkgZGVmYXVsdCBhcyBkb2N1bWVudGVkLiAgUGF0Y2gKLSAgYnkgS2FzdW4gSGVyYXRoLgotCi0tIElzc3VlICMxMjAwMjogZnRwbGliJ3MgYWJvcnQoKSBtZXRob2QgcmFpc2VzIFR5cGVFcnJvci4KLQotLSBJc3N1ZSAjMTE5MTY6IEFkZCBhIG51bWJlciBvZiBNYWNPU1ggc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gdGhlIGVycm5vIG1vZHVsZS4KLSAgUGF0Y2ggYnkgUGllcnJlIENhcnJpZXIuCi0KLS0gSXNzdWUgIzExOTk5OiBmaXhlZCBzcG9yYWRpYyBzeW5jIGZhaWx1cmUgbWFpbGJveC5NYWlsZGlyIGR1ZSB0byBpdHMgdHJ5aW5nIHRvCi0gIGRldGVjdCBtdGltZSBjaGFuZ2VzIGJ5IGNvbXBhcmluZyB0byB0aGUgc3lzdGVtIGNsb2NrIGluc3RlYWQgb2YgdG8gdGhlCi0gIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBtdGltZS4KLQotLSBJc3N1ZSAjMTEwNzI6IGFkZGVkIE1MU0QgY29tbWFuZCAoUkZDLTM2NTkpIHN1cHBvcnQgdG8gZnRwbGliLgotCi0tIElzc3VlICM4ODA4OiBUaGUgSU1BUDRfU1NMIGNvbnN0cnVjdG9yIG5vdyBhbGxvd3MgcGFzc2luZyBhbiBTU0xDb250ZXh0Ci0gIHBhcmFtZXRlciB0byBjb250cm9sIHBhcmFtZXRlcnMgb2YgdGhlIHNlY3VyZSBjaGFubmVsLiAgUGF0Y2ggYnkgU2lqaW4KLSAgSm9zZXBoLgotCi0tIG50cGF0aC5zYW1lZmlsZSBmYWlsZWQgdG8gbm90aWNlIHRoYXQgImEudHh0IiBhbmQgIkEuVFhUIiByZWZlciB0byB0aGUgc2FtZQotICBmaWxlIG9uIFdpbmRvd3MgWFAuIEFzIG5vdGljZWQgaW4gaXNzdWUgIzEwNjg0LgotCi0tIElzc3VlICMxMjAwMDogV2hlbiBhIFNTTCBjZXJ0aWZpY2F0ZSBoYXMgYSBzdWJqZWN0QWx0TmFtZSB3aXRob3V0IGFueQotICBkTlNOYW1lIGVudHJ5LCBzc2wubWF0Y2hfaG9zdG5hbWUoKSBzaG91bGQgdXNlIHRoZSBzdWJqZWN0J3MgY29tbW9uTmFtZS4KLSAgUGF0Y2ggYnkgTmljb2xhcyBCYXJlaWwuCi0KLS0gSXNzdWUgIzEwNzc1OiBhc3NlcnRSYWlzZXMsIGFzc2VydFJhaXNlc1JlZ2V4LCBhc3NlcnRXYXJucywgYW5kCi0gIGFzc2VydFdhcm5zUmVnZXggbm93IGFjY2VwdCBhIGtleXdvcmQgYXJndW1lbnQgJ21zZycgd2hlbiB1c2VkIGFzIGNvbnRleHQKLSAgbWFuYWdlcnMuICBJbml0aWFsIHBhdGNoIGJ5IFdpbnN0b24gRXdlcnQuCi0KLS0gSXNzdWUgIzEwNjg0OiBzaHV0aWwubW92ZSB1c2VkIHRvIGRlbGV0ZSBhIGZvbGRlciBvbiBjYXNlIGluc2Vuc2l0aXZlCi0gIGZpbGVzeXN0ZW1zIHdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZSB3aGVyZSB0aGUgc2FtZSBleGNlcHQKLSAgZm9yIHRoZSBjYXNlLgotCi0tIElzc3VlICMxMTY0Nzogb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIgbm93IHN1cHBvcnQKLSAgbW9yZSB0aGFuIG9uZSBjYWxsIHRvIHRoZSBmdW5jdGlvbiB3aGVuIHVzZWQgYXMgYSBkZWNvcmF0b3IuIEluaXRpYWwgcGF0Y2gKLSAgYnkgWXNqIFJheS4KLQotLSBJc3N1ZSAjMTE5MzA6IFJlbW92ZWQgZGVwcmVjYXRlZCB0aW1lLmFjY2VwdDJkeWVhciB2YXJpYWJsZS4KLSAgUmVtb3ZlZCB5ZWFyID49IDEwMDAgcmVzdHJpY3Rpb24gZnJvbSBkYXRldGltZS5zdHJmdGltZS4KLQotLSBsb2dnaW5nOiBkb24ndCBkZWZpbmUgUXVldWVMaXN0ZW5lciBpZiBQeXRob24gaGFzIG5vIHRocmVhZCBzdXBwb3J0LgotCi0tIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkgbm93IHdvcmtzIHdpdGggY29sbGVjdGlvbnMuSGFzaGFibGUoKS4KLQotLSBJc3N1ZSAjMTEyNzc6IG1tYXAubW1hcCgpIGNhbGxzIGZjbnRsKGZkLCBGX0ZVTExGU1lOQykgb24gTWFjIE9TIFggdG8gZ2V0Ci0gIGFyb3VuZCBhIG1tYXAgYnVnIHdpdGggc3BhcnNlIGZpbGVzLiBQYXRjaCB3cml0dGVuIGJ5IFN0ZWZmZW4gRGFvZGUgTnVycG1lc28uCi0KLS0gSXNzdWUgIzg0MDc6IEFkZCBzaWduYWwucHRocmVhZF9zaWdtYXNrKCkgZnVuY3Rpb24gdG8gZmV0Y2ggYW5kL29yIGNoYW5nZSB0aGUKLSAgc2lnbmFsIG1hc2sgb2YgdGhlIGNhbGxpbmcgdGhyZWFkLgotCi0tIElzc3VlICMxMTg1ODogY29uZmlncGFyc2VyLkV4dGVuZGVkSW50ZXJwb2xhdGlvbiBleHBlY3RlZCBsb3dlci1jYXNlIHNlY3Rpb24KLSAgbmFtZXMuCi0KLS0gSXNzdWUgIzExMzI0OiBDb25maWdQYXJzZXIoaW50ZXJwb2xhdGlvbj1Ob25lKSBub3cgd29ya3MgY29ycmVjdGx5LgotCi0tIElzc3VlICMxMTgxMTogc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoKSBpcyBub3cgSVB2Ni1jb21wYXRpYmxlLiAgUGF0Y2gKLSAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgotCi0tIElzc3VlICMxMTc2MzogZG9uJ3QgdXNlIGRpZmZsaWIgaW4gVGVzdENhc2UuYXNzZXJ0TXVsdGlMaW5lRXF1YWwgaWYgdGhlCi0gIHN0cmluZ3MgYXJlIHRvbyBsb25nLgotCi0tIElzc3VlICMxMTIzNjogZ2V0cGFzcy5nZXRwYXNzIHJlc3BvbmRzIHRvIGN0cmwtYyBvciBjdHJsLXogb24gdGVybWluYWwuCi0KLS0gSXNzdWUgIzExODU2OiBTcGVlZCB1cCBwYXJzaW5nIG9mIEpTT04gbnVtYmVycy4KLQotLSBJc3N1ZSAjMTEwMDU6IHRocmVhZGluZy5STG9jaygpLl9yZWxlYXNlX3NhdmUoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCi0gIGxvY2sgd2FzIG5vdCBhY3F1aXJlZC4KLQotLSBJc3N1ZSAjMTEyNTg6IFNwZWVkIHVwIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpIHVuZGVyIExpbnV4IGJ5IGEgZmFjdG9yCi0gIG9mIDUgdG8gMTAuICBJbml0aWFsIHBhdGNoIGJ5IEpvbmFzIEguCi0KLS0gSXNzdWUgIzExMzgyOiBUcml2aWFsIHN5c3RlbSBjYWxscywgc3VjaCBhcyBkdXAoKSBvciBwaXBlKCksIG5lZWRuJ3QKLSAgcmVsZWFzZSB0aGUgR0lMLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgotCi0tIElzc3VlICMxMTIyMzogQWRkIHRocmVhZGluZy5faW5mbygpIGZ1bmN0aW9uIHByb3ZpZGluZyBpbmZvcm1hdGlvbnMgYWJvdXQKLSAgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjMTE3MzE6IHNpbXBsaWZ5L2VuaGFuY2UgZW1haWwgcGFyc2VyL2dlbmVyYXRvciBBUEkgYnkgaW50cm9kdWNpbmcKLSAgcG9saWN5IG9iamVjdHMuCi0KLS0gSXNzdWUgIzExNzY4OiBUaGUgc2lnbmFsIGhhbmRsZXIgb2YgdGhlIHNpZ25hbCBtb2R1bGUgb25seSBjYWxscwotICBQeV9BZGRQZW5kaW5nQ2FsbCgpIGZvciB0aGUgZmlyc3Qgc2lnbmFsIHRvIGZpeCBhIGRlYWRsb2NrIG9uIHJlZW50cmFudCBvcgotICBwYXJhbGxlbCBjYWxscy4gUHlFcnJfU2V0SW50ZXJydXB0KCkgd3JpdGVzIGFsc28gaW50byB0aGUgd2FrZSB1cCBmaWxlLgotCi0tIElzc3VlICMxMTQ5MjogZml4IHNldmVyYWwgaXNzdWVzIHdpdGggaGVhZGVyIGZvbGRpbmcgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCi0KLS0gSXNzdWUgIzExODUyOiBBZGQgbWlzc2luZyBpbXBvcnRzIGFuZCB1cGRhdGUgdGVzdHMuCi0KLS0gSXNzdWUgIzExODc1OiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCdzIF9fcmVkdWNlX18gd2FzIHRlbXBvcmFyaWx5Ci0gIG11dGF0aW5nIHRoZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IHdvcmtpbmcgb24gYSBjb3B5LgotCi0tIElzc3VlICMxMTQ2NzogRml4IHVybHBhcnNlIGJlaGF2aW9yIHdoZW4gaGFuZGxpbmcgdXJscyB3aGljaCBjb250YWlucyBzY2hlbWUKLSAgc3BlY2lmaWMgcGFydCBvbmx5IGRpZ2l0cy4gUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCi0KLS0gY29sbGVjdGlvbnMuQ291bnRlcigpLmNvcHkoKSBub3cgd29ya3MgY29ycmVjdGx5IGZvciBzdWJjbGFzc2VzLgotCi0tIElzc3VlICMxMTQ3NDogRml4IHRoZSBidWcgd2l0aCB1cmwycGF0aG5hbWUoKSBoYW5kbGluZyBvZiAnL0N8Lycgb24gV2luZG93cy4KLSAgUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCi0KLS0gSXNzdWUgIzExNjg0OiBjb21wbGV0ZSBlbWFpbC5wYXJzZXIgYnl0ZXMgQVBJIGJ5IGFkZGluZyBCeXRlc0hlYWRlclBhcnNlci4KLQotLSBUaGUgYnoyIG1vZHVsZSBub3cgaGFuZGxlcyA0R2lCKyBpbnB1dCBidWZmZXJzIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjOTIzMzogRml4IGpzb24ubG9hZHMoJ3t9JykgdG8gcmV0dXJuIGEgZGljdCAoaW5zdGVhZCBvZiBhIGxpc3QpLCB3aGVuCi0gIF9qc29uIGlzIG5vdCBhdmFpbGFibGUuCi0KLS0gSXNzdWUgIzExODMwOiBSZW1vdmUgdW5uZWNlc3NhcnkgaW50cm9zcGVjdGlvbiBjb2RlIGluIHRoZSBkZWNpbWFsIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTE3MDM6IHVybGxpYjIuZ2V0dXJsKCkgZG9lcyBub3QgcmV0dXJuIGNvcnJlY3QgdXJsIHdoZW4gdGhlIG9yaWdpbmFsCi0gIHVybCBjb250YWlucyAjZnJhZ21lbnQuCi0KLS0gSXNzdWUgIzEwMDE5OiBGaXhlZCByZWdyZXNzaW9uIGluIGpzb24gbW9kdWxlIHdoZXJlIGFuIGluZGVudCBvZiAwIHN0b3BwZWQKLSAgYWRkaW5nIG5ld2xpbmVzIGFuZCBhY3RlZCBpbnN0ZWFkIGxpa2UgJ05vbmUnLgotCi0tIElzc3VlICMxMTE4NjogcHlkb2MgaWdub3JlcyBhIG1vZHVsZSBpZiBpdHMgbmFtZSBjb250YWlucyBhIHN1cnJvZ2F0ZQotICBjaGFyYWN0ZXIgaW4gdGhlIGluZGV4IG9mIG1vZHVsZXMuCi0KLS0gSXNzdWUgIzExODE1OiBVc2UgYSBsaWdodC13ZWlnaHQgU2ltcGxlUXVldWUgZm9yIHRoZSByZXN1bHQgcXVldWUgaW4KLSAgY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCi0KLS0gSXNzdWUgIzUxNjI6IFRyZWF0IHNlcnZpY2VzIGxpa2UgZnJvemVuIGV4ZWN1dGFibGVzIHRvIGFsbG93IGNoaWxkIHNwYXduaW5nCi0gIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgb24gV2luZG93cy4KLQotLSBsb2dnaW5nLmJhc2ljQ29uZmlnIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25hbCAnaGFuZGxlcnMnIGFyZ3VtZW50IHRha2luZyBhbgotICBpdGVyYWJsZSBvZiBoYW5kbGVycyB0byBiZSBhZGRlZCB0byB0aGUgcm9vdCBsb2dnZXIuIEFkZGl0aW9uYWwgcGFyYW1ldGVyCi0gIGNoZWNrcyB3ZXJlIGFsc28gYWRkZWQgdG8gYmFzaWNDb25maWcuCi0KLS0gSXNzdWUgIzExODE0OiBGaXggbGlrZWx5IHR5cG8gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wuX3Rlcm1pbmF0ZSgpLgotCi0tIElzc3VlICMxMTc0NzogRml4IHJhbmdlIGZvcm1hdHRpbmcgaW4gZGlmZmxpYi5jb250ZXh0X2RpZmYoKSBhbmQKLSAgZGlmZmxpYi51bmlmaWVkX2RpZmYoKS4KLQotLSBJc3N1ZSAjODQyODogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wgd2hlbiB0ZXJtaW5hdGluZwotICB3b3JrZXIgcHJvY2Vzc2VzOiBuZXcgcHJvY2Vzc2VzIHdvdWxkIGJlIHNwYXduZWQgd2hpbGUgdGhlIHBvb2wgaXMgYmVpbmcKLSAgc2h1dCBkb3duLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgotCi0tIElzc3VlICMyNjUwOiByZS5lc2NhcGUoKSBubyBsb25nZXIgZXNjYXBlcyB0aGUgJ18nLgotCi0tIElzc3VlICMxMTc1Nzogc2VsZWN0LnNlbGVjdCgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciB3aGVuIGEgbmVnYXRpdmUgdGltZW91dAotICBpcyBwYXNzZWQgKHByZXZpb3VzbHksIGEgc2VsZWN0LmVycm9yIHdpdGggRUlOVkFMIHdvdWxkIGJlIHJhaXNlZCkuICBQYXRjaAotICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCi0KLS0gSXNzdWUgIzczMTE6IGZpeCBodG1sLnBhcnNlciB0byBhY2NlcHQgbm9uLUFTQ0lJIGF0dHJpYnV0ZSB2YWx1ZXMuCi0KLS0gSXNzdWUgIzExNjA1OiBlbWFpbC5wYXJzZXIuQnl0ZXNGZWVkUGFyc2VyIHdhcyBpbmNvcnJlY3RseSBjb252ZXJ0aW5nCi0gIG11bHRpcGFydCBzdWJwYXJ0cyB3aXRoIGFuIDgtYml0IENURSBpbnRvIHVuaWNvZGUgaW5zdGVhZCBvZiBwcmVzZXJ2aW5nIHRoZQotICBieXRlcy4KLQotLSBJc3N1ZSAjMTY5MDYwODogZW1haWwudXRpbC5mb3JtYXRhZGRyIGlzIG5vdyBSRkMgMjA0NyBhd2FyZTogaXQgbm93IGhhcyBhCi0gIGNoYXJzZXQgcGFyYW1ldGVyIHRoYXQgZGVmYXVsdHMgdG8gdXRmLTggYW5kIGlzIHVzZWQgYXMgdGhlIGNoYXJzZXQgZm9yIFJGQwotICAyMDQ3IGVuY29kaW5nIHdoZW4gdGhlIHJlYWxuYW1lIGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgotCi0tIElzc3VlICMxMDk2MzogRW5zdXJlIHRoYXQgc3VicHJvY2Vzcy5jb21tdW5pY2F0ZSgpIG5ldmVyIHJhaXNlcyBFUElQRS4KLQotLSBJc3N1ZSAjMTA3OTE6IEltcGxlbWVudCBtaXNzaW5nIG1ldGhvZCBHemlwRmlsZS5yZWFkMSgpLCBhbGxvd2luZyBHemlwRmlsZQotICB0byBiZSB3cmFwcGVkIGluIGEgVGV4dElPV3JhcHBlci4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KLQotLSBJc3N1ZSAjMTE3MDc6IEFkZGVkIGEgZmFzdCBDIHZlcnNpb24gb2YgZnVuY3Rvb2xzLmNtcF90b19rZXkoKS4KLSAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KLQotLSBJc3N1ZSAjMTE2ODg6IEFkZCBzcWxpdGUzLkNvbm5lY3Rpb24uc2V0X3RyYWNlX2NhbGxiYWNrKCkuICBQYXRjaCBieQotICBUb3JzdGVuIExhbmRzY2hvZmYuCi0KLS0gSXNzdWUgIzExNzQ2OiBGaXggU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKSB0byBhY2NlcHQgZWxsaXB0aWMgY3VydmUKLSAgcHJpdmF0ZSBrZXlzLgotCi0tIElzc3VlICM1ODYzOiBSZXdyaXRlIEJaMkZpbGUgaW4gcHVyZSBQeXRob24sIGFuZCBhbGxvdyBpdCB0byBhY2NlcHQKLSAgZmlsZS1saWtlIG9iamVjdHMgdXNpbmcgYSBuZXcgYGBmaWxlb2JqYGAgY29uc3RydWN0b3IgYXJndW1lbnQuICBQYXRjaCBieQotICBOYWRlZW0gVmF3ZGEuCi0KLS0gdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2FtZUVsZW1lbnRzIGhhcyBiZWVuIHJlbW92ZWQuCi0KLS0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIHJhaXNlcyBhIFJ1bnRpbWVFcnJvciBpZiBpbml0ZnNlbmNvZGluZygpIHdhcyBub3QKLSAgY2FsbGVkIHlldDogZGV0ZWN0IGJvb3RzdHJhcCAoc3RhcnR1cCkgaXNzdWVzIGVhcmxpZXIuCi0KLS0gSXNzdWUgIzExMzkzOiBBZGQgdGhlIG5ldyBmYXVsdGhhbmRsZXIgbW9kdWxlLgotCi0tIElzc3VlICMxMTYxODogRml4IHRoZSB0aW1lb3V0IGxvZ2ljIGluIHRocmVhZGluZy5Mb2NrLmFjcXVpcmUoKSB1bmRlciBXaW5kb3dzLgotCi0tIFJlbW92ZWQgdGhlICdzdHJpY3QnIGFyZ3VtZW50IHRvIGVtYWlsLnBhcnNlci5QYXJzZXIsIHdoaWNoIGhhcyBiZWVuCi0gIGRlcHJlY2F0ZWQgc2luY2UgUHl0aG9uIDIuNC4KLQotLSBJc3N1ZSAjMTEyNTY6IEZpeCBpbnNwZWN0LmdldGNhbGxhcmdzIG9uIGZ1bmN0aW9ucyB0aGF0IHRha2Ugb25seSBrZXl3b3JkCi0gIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjMTE2OTY6IEZpeCBJRCBnZW5lcmF0aW9uIGluIG1zaWxpYi4KLQotLSBpdGVydG9vbHMuYWNjdW11bGF0ZSBub3cgc3VwcG9ydHMgYW4gb3B0aW9uYWwgKmZ1bmMqIGFyZ3VtZW50IGZvcgotICBhIHVzZXItc3VwcGxpZWQgYmluYXJ5IGZ1bmN0aW9uLgotCi0tIElzc3VlICMxMTY5MjogUmVtb3ZlIHVubmVjZXNzYXJ5IGRlbW8gZnVuY3Rpb25zIGluIHN1YnByb2Nlc3MgbW9kdWxlLgotCi0tIElzc3VlICM5Njk2OiBGaXggZXhjZXB0aW9uIGluY29ycmVjdGx5IHJhaXNlZCBieSB4ZHJsaWIuUGFja2VyLnBhY2tfaW50IHdoZW4KLSAgdHJ5aW5nIHRvIHBhY2sgYSBuZWdhdGl2ZSAoaW4tcmFuZ2UpIGludGVnZXIuCi0KLS0gSXNzdWUgIzExNjc1OiBtdWx0aXByb2Nlc3NpbmcuW1Jhd11BcnJheSBvYmplY3RzIGNyZWF0ZWQgZnJvbSBhbiBpbnRlZ2VyIHNpemUKLSAgYXJlIG5vdyB6ZXJvZWQgb24gY3JlYXRpb24uICBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW91ciBzcGVjaWZpZWQgYnkgdGhlCi0gIGRvY3VtZW50YXRpb24uCi0KLS0gSXNzdWUgIzc2Mzk6IEZpeCBzaG9ydCBmaWxlIG5hbWUgZ2VuZXJhdGlvbiBpbiBiZGlzdF9tc2kKLQotLSBJc3N1ZSAjMTE2MzU6IERvbid0IHVzZSBwb2xsaW5nIGluIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMgbGF1bmNoZWQgYnkKLSAgY29uY3VycmVudC5mdXR1cmVzLgotCi0tIElzc3VlICM1ODQ1OiBBdXRvbWF0aWNhbGx5IHJlYWQgcmVhZGxpbmUgY29uZmlndXJhdGlvbiB0byBlbmFibGUgY29tcGxldGlvbgotICBpbiBpbnRlcmFjdGl2ZSBtb2RlLgotCi0tIElzc3VlICM2ODExOiBBbGxvdyBpbXBvcnRsaWIgdG8gY2hhbmdlIGEgY29kZSBvYmplY3QncyBjb19maWxlbmFtZSBhdHRyaWJ1dGUKLSAgdG8gbWF0Y2ggdGhlIHBhdGggdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGN1cnJlbnRseSBpcywgbm90IHdoZXJlIHRoZSBjb2RlCi0gIG9iamVjdCBvcmlnaW5hbGx5IGNhbWUgZnJvbS4KLQotLSBJc3N1ZSAjODc1NDogSGF2ZSBpbXBvcnRsaWIgdXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgaW4gZXJyb3IgbWVzc2FnZXMuCi0KLS0gSXNzdWUgIzExNTkxOiBQcmV2ZW50ICJpbXBvcnQgc2l0ZSIgZnJvbSBtb2RpZnlpbmcgc3lzLnBhdGggd2hlbiBweXRob24KLSAgd2FzIHN0YXJ0ZWQgd2l0aCAtUy4KLQotLSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkgbm93IGFkZHMgYSBfc291cmNlIGF0dHJpYnV0ZSB0byB0aGUgZ2VuZXJhdGVkCi0gIGNsYXNzLiAgVGhpcyBtYWtlIHRoZSBzb3VyY2UgbW9yZSBhY2Nlc3NpYmxlIHRoYW4gdGhlIG91dGRhdGVkCi0gICJ2ZXJib3NlIiBvcHRpb24gd2hpY2ggcHJpbnRzIHRvIHN0ZG91dCBidXQgZG9lc24ndCBtYWtlIHRoZSBzb3VyY2UKLSAgc3RyaW5nIGF2YWlsYWJsZS4KLQotLSBJc3N1ZSAjMTEzNzE6IE1hcmsgZ2V0b3B0IGVycm9yIG1lc3NhZ2VzIGFzIGxvY2FsaXphYmxlLiAgUGF0Y2ggYnkgRmlsaXAKLSAgR3J1c3pjennFhHNraS4KLQotLSBJc3N1ZSAjMTEzMzM6IEFkZCBfX3Nsb3RzX18gdG8gY29sbGVjdGlvbnMgQUJDcy4KLQotLSBJc3N1ZSAjMTE2Mjg6IGNtcF90b19rZXkgZ2VuZXJhdGVkIGNsYXNzIHNob3VsZCB1c2UgX19zbG90c19fLgotCi0tIElzc3VlICMxMTY2NjogbGV0IGhlbHAoKSBkaXNwbGF5IG5hbWVkIHR1cGxlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMKLSAgdGhhdCBzdGFydCB3aXRoIGEgbGVhZGluZyB1bmRlcnNjb3JlLgotCi0tIElzc3VlICMxMTY2MjogTWFrZSB1cmxsaWIgYW5kIHVybGxpYjIgaWdub3JlIHJlZGlyZWN0aW9ucyBpZiB0aGUKLSAgc2NoZW1lIGlzIG5vdCBIVFRQLCBIVFRQUyBvciBGVFAgKENWRS0yMDExLTE1MjEpLgotCi0tIElzc3VlICM1NTM3OiBGaXggdGltZTJpc296KCkgYW5kIHRpbWUybmV0c2NhcGUoKSBmdW5jdGlvbnMgb2YKLSAgaHR0cGxpYi5jb29raWVqYXIgZm9yIGV4cGlyYXRpb24geWVhciBncmVhdGVyIHRoYW4gMjAzOCBvbiAzMi1iaXQgc3lzdGVtcy4KLQotLSBJc3N1ZSAjNDM5MTogVXNlIHByb3BlciBnZXR0ZXh0IHBsdXJhbCBmb3JtcyBpbiBvcHRwYXJzZS4KLQotLSBJc3N1ZSAjMTExMjc6IFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdHJ5aW5nIHRvIHBpY2tsZSBhIHNvY2tldCBvYmplY3QuCi0KLS0gSXNzdWUgIzExNTYzOiBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyIGlzIHNlbnQgYnkgcmVxdWVzdHMgdXNpbmcgVVJMT3BlbmVyCi0gIGNsYXNzIHdoaWNoIGhlbHBzIGluIGNsb3Npbmcgb2Ygc29ja2V0cyBhZnRlciBjb25uZWN0aW9uIGlzIG92ZXIuIFBhdGNoCi0gIGNvbnRyaWJ1dGlvbnMgYnkgSmVmZiBNY05laWwgYW5kIE5hZGVlbSBWYXdkYS4KLQotLSBJc3N1ZSAjMTE0NTk6IEEgYGBidWZzaXplYGAgdmFsdWUgb2YgMCBpbiBzdWJwcm9jZXNzLlBvcGVuKCkgcmVhbGx5IGNyZWF0ZXMKLSAgdW5idWZmZXJlZCBwaXBlcywgc3VjaCB0aGF0IHNlbGVjdCgpIHdvcmtzIHByb3Blcmx5IG9uIHRoZW0uCi0KLS0gSXNzdWUgIzU0MjE6IEZpeCBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2Ugd2hlbiBvbmUgb2Ygc29ja2V0LnNlbmR0bygpJ3MKLSAgYXJndW1lbnRzIGhhcyB0aGUgd3JvbmcgdHlwZS4gIFBhdGNoIGJ5IE5pa2l0YSBWZXRvc2hraW4uCi0KLS0gSXNzdWUgIzEwODEyOiBBZGQgc29tZSBleHRyYSBwb3NpeCBmdW5jdGlvbnMgdG8gdGhlIG9zIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTA5Nzk6IHVuaXR0ZXN0IHN0ZG91dCBidWZmZXJpbmcgbm93IHdvcmtzIHdpdGggY2xhc3MgYW5kIG1vZHVsZQotICBzZXR1cCBhbmQgdGVhcmRvd24uCi0KLS0gSXNzdWUgIzExMjQzOiBmaXggdGhlIHBhcmFtZXRlciBxdWVyeWluZyBtZXRob2RzIG9mIE1lc3NhZ2UgdG8gd29yayBpZgotICB0aGUgaGVhZGVycyBjb250YWluIHVuLWVuY29kZWQgbm9uLUFTQ0lJIGRhdGEuCi0KLS0gSXNzdWUgIzExNDAxOiBmaXggaGFuZGxpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlOyB0aGlzIGZpeGVzIGEgcmVncmVzc2lvbgotICByZWxhdGl2ZSB0byBQeXRob24yIGFuZCB0aGUgcmVzdWx0IGlzIG5vdyB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uMi4KLQotLSBJc3N1ZSAjOTI5ODogYmFzZTY0IGJvZGllcyB3ZXJlbid0IGJlaW5nIGZvbGRlZCB0byBsaW5lIGxlbmd0aHMgbGVzcyB0aGFuIDc4LAotICB3aGljaCB3YXMgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIuICBVbmxpa2UgUHl0aG9uMiwgdGhlIGxhc3QgbGluZQotICBvZiB0aGUgZm9sZGVkIGJvZHkgbm93IGVuZHMgd2l0aCBhIGNhcnJpYWdlIHJldHVybi4KLQotLSBJc3N1ZSAjMTE1NjA6IHNodXRpbC51bnBhY2tfYXJjaGl2ZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgdGhlIGZvcm1hdAotICBwYXJhbWV0ZXIuIFBhdGNoIGJ5IEV2YW4gRGFuZHJlYS4KLQotLSBJc3N1ZSAjNTg3MDogQWRkIGBzdWJwcm9jZXNzLkRFVk5VTExgIGNvbnN0YW50LgotCi0tIElzc3VlICMxMTEzMzogZml4IHR3byBjYXNlcyB3aGVyZSBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGNhbiB0cmlnZ2VyIGNvZGUKLSAgZXhlY3V0aW9uLiBQYXRjaCBieSBBbmRyZWFzIFN0w7xocmsuCi0KLS0gSXNzdWUgIzExNTY5OiB1c2UgYWJzb2x1dGUgcGF0aCB0byB0aGUgc3lzY3RsIGNvbW1hbmQgaW4gbXVsdGlwcm9jZXNzaW5nIHRvCi0gIGVuc3VyZSB0aGF0IGl0IHdpbGwgYmUgZm91bmQgcmVnYXJkbGVzcyBvZiB0aGUgc2hlbGwgUEFUSC4gVGhpcyBlbnN1cmVzCi0gIHRoYXQgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCB3b3JrcyBvbiBkZWZhdWx0IGluc3RhbGxzIG9mIE1hY09TWC4KLQotLSBJc3N1ZSAjMTE1MDE6IGRpc3V0aWxzLmFyY2hpdmVfdXRpbHMubWFrZV96aXBmaWxlIG5vIGxvbmdlciBmYWlscyBpZiB6bGliIGlzCi0gIG5vdCBpbnN0YWxsZWQuIEluc3RlYWQsIHRoZSB6aXBmaWxlLlpJUF9TVE9SRUQgY29tcHJlc3Npb24gaXMgdXNlZCB0byBjcmVhdGUKLSAgdGhlIFppcEZpbGUuIFBhdGNoIGJ5IE5hdGFsaWEgQi4gQmlkYXJ0LgotCi0tIElzc3VlICMxMTI4OTogYHNtdHAuU01UUGAgY2xhc3MgaXMgbm93IGEgY29udGV4dCBtYW5hZ2VyIHNvIGl0IGNhbiBiZSB1c2VkCi0gIGluIGEgYHdpdGhgIHN0YXRlbWVudC4gIENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEuCi0KLS0gSXNzdWUgIzExNTU0OiBGaXhlZCBzdXBwb3J0IGZvciBKYXBhbmVzZSBjb2RlY3M7IHByZXZpb3VzbHkgdGhlIGJvZHkgb3V0cHV0Ci0gIGVuY29kaW5nIHdhcyBub3QgZG9uZSBpZiBldWMtanAgb3Igc2hpZnQtamlzIHdhcyBzcGVjaWZpZWQgYXMgdGhlIGNoYXJzZXQuCi0KLS0gSXNzdWUgIzExNDA3OiBgVGVzdENhc2UucnVuYCByZXR1cm5zIHRoZSByZXN1bHQgb2JqZWN0IHVzZWQgb3IgY3JlYXRlZC4KLSAgQ29udHJpYnV0ZWQgYnkgSmFuYXRoYW4gSGFydGxleS4KLQotLSBJc3N1ZSAjMTE1MDA6IEZpeGVkIGEgYnVnIGluIHRoZSBPUyBYIHByb3h5IGJ5cGFzcyBjb2RlIGZvciBmdWxseSBxdWFsaWZpZWQKLSAgSVAgYWRkcmVzc2VzIGluIHRoZSBwcm94eSBleGNlcHRpb24gbGlzdC4KLQotLSBJc3N1ZSAjMTE0OTE6IGRibS5lcnJvciBpcyBubyBsb25nZXIgcmFpc2VkIHdoZW4gZGJtLm9wZW4gaXMgY2FsbGVkIHdpdGgKLSAgdGhlICJuIiBhcyB0aGUgZmxhZyBhcmd1bWVudCBhbmQgdGhlIGZpbGUgZXhpc3RzLiBUaGUgYmVoYXZpb3IgbWF0Y2hlcwotICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZ2VuZXJhbCBsb2dpYy4KLQotLSBJc3N1ZSAjMTE2MjQ3NzogUG9zdGVsIFByaW5jaXBsZSBhZGp1c3RtZW50IHRvIGVtYWlsIGRhdGUgcGFyc2luZzogaGFuZGxlIHRoZQotICBmYWN0IHRoYXQgc29tZSBub24tY29tcGxpYW50IE1VQXMgdXNlICcuJyBpbnN0ZWFkIG9mICc6JyBpbiB0aW1lIHNwZWNzLgotCi0tIElzc3VlICMxMTEzMTogRml4IHNpZ24gb2YgemVybyBpbiBkZWNpbWFsLkRlY2ltYWwgcGx1cyBhbmQgbWludXMKLSAgb3BlcmF0aW9ucyB3aGVuIHRoZSByb3VuZGluZyBtb2RlIGlzIFJPVU5EX0ZMT09SLgotCi0tIElzc3VlICM5OTM1OiBTcGVlZCB1cCBwaWNrbGluZyBvZiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMuCi0KLS0gSXNzdWUgIzU2MjI6IEZpeCBjdXJzZXMud3JhcHBlciB0byByYWlzZSBjb3JyZWN0IGV4Y2VwdGlvbiBpZiBjdXJzZXMKLSAgaW5pdGlhbGl6YXRpb24gZmFpbHMuCi0KLS0gSXNzdWUgIzExNDA4OiBJbiB0aHJlYWRpbmcuTG9jay5hY3F1aXJlKCksIG9ubHkgY2FsbCBnZXR0aW1lb2ZkYXkoKSB3aGVuCi0gIHJlYWxseSBuZWNlc3NhcnkuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCi0KLS0gSXNzdWUgIzExMzkxOiBXcml0aW5nIHRvIGEgbW1hcCBvYmplY3QgY3JlYXRlZCB3aXRoCi0gIGBgbW1hcC5QUk9UX1JFQUR8bW1hcC5QUk9UX0VYRUNgYCB3b3VsZCBzZWdmYXVsdCBpbnN0ZWFkIG9mIHJhaXNpbmcgYQotICBUeXBlRXJyb3IuICBQYXRjaCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCi0KLS0gSXNzdWUgIzk3OTU6IGFkZCBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgc3VwcG9ydCBmb3Igbm50cGxpYi5OTlRQIGNsYXNzLgotCi0tIElzc3VlICMxMTMwNjogbWFpbGJveCBpbiBjZXJ0YWluIGNhc2VzIGFkYXB0cyB0byBhbiBpbmFiaWxpdHkgdG8gb3BlbgotICBjZXJ0YWluIGZpbGVzIGluIHJlYWQtd3JpdGUgbW9kZS4gIFByZXZpb3VzbHkgaXQgZGV0ZWN0ZWQgdGhpcyBieQotICBjaGVja2luZyBmb3IgRUFDQ0VTLCBub3cgaXQgYWxzbyBjaGVja3MgZm9yIEVST0ZTLgotCi0tIElzc3VlICMxMTI2NTogYXN5bmNvcmUgbm93IGNvcnJlY3RseSBoYW5kbGVzIEVQSVBFLCBFQkFERiBhbmQgRUFHQUlOIGVycm9ycwotICBvbiBhY2NlcHQoKSwgc2VuZCgpIGFuZCByZWN2KCkuCi0KLS0gSXNzdWUgIzExMzc3OiBEZXByZWNhdGUgcGxhdGZvcm0ucG9wZW4oKSBhbmQgcmVpbXBsZW1lbnQgaXQgd2l0aCBvcy5wb3BlbigpLgotCi0tIElzc3VlICM4NTEzOiBPbiBVTklYLCBzdWJwcm9jZXNzIHN1cHBvcnRzIGJ5dGVzIGNvbW1hbmQgc3RyaW5nLgotCi0tIElzc3VlICMxMDg2NjogQWRkIHNvY2tldC5zZXRob3N0bmFtZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KLQotLSBJc3N1ZSAjMTExNDA6IExvY2sucmVsZWFzZSgpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3Igd2hlbiBhdHRlbXB0aW5nCi0gIHRvIHJlbGVhc2UgYW4gdW5hY3F1aXJlZCBsb2NrLCBhcyBjbGFpbWVkIGluIHRoZSB0aHJlYWRpbmcgZG9jdW1lbnRhdGlvbi4KLSAgVGhlIF90aHJlYWQuZXJyb3IgZXhjZXB0aW9uIGlzIG5vdyBhbiBhbGlhcyBvZiBSdW50aW1lRXJyb3IuICBQYXRjaCBieQotICBGaWxpcCBHcnVzemN6ecWEc2tpLiAgUGF0Y2ggZm9yIF9kdW1teV90aHJlYWQgYnkgQXltZXJpYyBBdWd1c3Rpbi4KLQotLSBJc3N1ZSAjODU5NDogZnRwbGliIG5vdyBwcm92aWRlcyBhIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciB0byBzcGVjaWZ5IHdoaWNoCi0gIChhZGRyZXNzLCBwb3J0KSB0byBiaW5kIHRvIGJlZm9yZSBjb25uZWN0aW5nLgotCi0tIElzc3VlICMxMTMyNjogQWRkIHRoZSBtaXNzaW5nIGNvbm5lY3RfZXgoKSBpbXBsZW1lbnRhdGlvbiBmb3IgU1NMIHNvY2tldHMsCi0gIGFuZCBtYWtlIGl0IHdvcmsgZm9yIG5vbi1ibG9ja2luZyBjb25uZWN0cy4KLQotLSBJc3N1ZSAjMTEyOTc6IEFkZCBjb2xsZWN0aW9ucy5DaGFpbk1hcCgpLgotCi0tIElzc3VlICMxMDc1NTogQWRkIHRoZSBwb3NpeC5mbGlzdGRpcigpIGZ1bmN0aW9uLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCi0KLS0gSXNzdWUgIzQ3NjE6IEFkZCB0aGUgYGAqYXQoKWBgIGZhbWlseSBvZiBmdW5jdGlvbnMgKG9wZW5hdCgpLCBldGMuKSB0byB0aGUKLSAgcG9zaXggbW9kdWxlLiAgUGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCi0KLS0gSXNzdWUgIzczMjI6IFRyeWluZyB0byByZWFkIGZyb20gYSBzb2NrZXQncyBmaWxlLWxpa2Ugb2JqZWN0IGFmdGVyIGEgdGltZW91dAotICBvY2N1cnJlZCBub3cgcmFpc2VzIGFuIGVycm9yIGluc3RlYWQgb2Ygc2lsZW50bHkgbG9zaW5nIGRhdGEuCi0KLS0gSXNzdWUgIzExMjkxOiBwb3BsaWIuUE9QIG5vIGxvbmdlciBzdXBwcmVzc2VzIGVycm9ycyBvbiBxdWl0KCkuCi0KLS0gSXNzdWUgIzExMTc3OiBhc3luY29yZSdzIGNyZWF0ZV9zb2NrZXQoKSBhcmd1bWVudHMgY2FuIG5vdyBiZSBvbWl0dGVkLgotCi0tIElzc3VlICM2MDY0OiBBZGQgYSBgYGRhZW1vbmBgIGtleXdvcmQgYXJndW1lbnQgdG8gdGhlIHRocmVhZGluZy5UaHJlYWQKLSAgYW5kIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzIGNvbnN0cnVjdG9ycyBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUKLSAgZGVmYXVsdCBiZWhhdmlvdXIgb2YgaW5oZXJpdGluZyB0aGUgZGFlbW9uaWMgcHJvcGVydHkgZnJvbSB0aGUgY3VycmVudAotICB0aHJlYWQvcHJvY2Vzcy4KLQotLSBJc3N1ZSAjMTA5NTY6IEJ1ZmZlcmVkIEkvTyBjbGFzc2VzIHJldHJ5IHJlYWRpbmcgb3Igd3JpdGluZyBhZnRlciBhIHNpZ25hbAotICBoYXMgYXJyaXZlZCBhbmQgdGhlIGhhbmRsZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgotCi0tIElzc3VlICMxMDc4NDogTmV3IG9zLmdldHByaW9yaXR5KCkgYW5kIG9zLnNldHByaW9yaXR5KCkgZnVuY3Rpb25zLgotCi0tIElzc3VlICMxMTExNDogRml4IGNhdGFzdHJvcGhpYyBwZXJmb3JtYW5jZSBvZiB0ZWxsKCkgb24gdGV4dCBmaWxlcyAodXAKLSAgdG8gMTAwMHggZmFzdGVyIGluIHNvbWUgY2FzZXMpLiAgSXQgaXMgc3RpbGwgb25lIHRvIHR3byBvcmRlciBvZiBtYWduaXR1ZGVzCi0gIHNsb3dlciB0aGFuIGJpbmFyeSB0ZWxsKCkuCi0KLS0gSXNzdWUgIzEwODgyOiBBZGQgb3Muc2VuZGZpbGUgZnVuY3Rpb24uCi0KLS0gSXNzdWUgIzEwODY4OiBBbGxvdyB1c2FnZSBvZiB0aGUgcmVnaXN0ZXIgbWV0aG9kIG9mIGFuIEFCQyBhcyBhIGNsYXNzCi0gIGRlY29yYXRvci4KLQotLSBJc3N1ZSAjMTEyMjQ6IEZpeGVkIGEgcmVncmVzc2lvbiBpbiB0YXJmaWxlIHRoYXQgYWZmZWN0ZWQgdGhlIGZpbGUtbGlrZQotICBvYmplY3RzIHJldHVybmVkIGJ5IFRhckZpbGUuZXh0cmFjdGZpbGUoKSByZWdhcmRpbmcgcGVyZm9ybWFuY2UsIG1lbW9yeQotICBjb25zdW1wdGlvbiBhbmQgZmFpbHVyZXMgd2l0aCB0aGUgc3RyZWFtIGludGVyZmFjZS4KLQotLSBJc3N1ZSAjMTA5MjQ6IEFkZGluZyBzYWx0IGFuZCBNb2R1bGFyIENyeXB0IEZvcm1hdCB0byBjcnlwdCBsaWJyYXJ5LgotICBNb3ZlZCBvbGQgQyB3cmFwcGVyIHRvIF9jcnlwdCwgYW5kIGFkZGVkIGEgUHl0aG9uIHdyYXBwZXIgd2l0aAotICBlbmhhbmNlZCBzYWx0IGdlbmVyYXRpb24gYW5kIHNpbXBsZXIgQVBJIGZvciBwYXNzd29yZCBnZW5lcmF0aW9uLgotCi0tIElzc3VlICMxMTA3NDogTWFrZSAndG9rZW5pemUnIHNvIGl0IGNhbiBiZSByZWxvYWRlZC4KLQotLSBJc3N1ZSAjMTEwODU6IE1vdmVkIGNvbGxlY3Rpb25zIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBpbnRvIGEgc2VwYXJhdGUKLSAgbW9kdWxlIGNhbGxlZCBjb2xsZWN0aW9ucy5hYmMsIGZvbGxvd2luZyB0aGUgcGF0dGVybiB1c2VkIGJ5IGltcG9ydGxpYi5hYmMuCi0gIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgdGhlIG5hbWVzIGFyZSBpbXBvcnRlZCBpbnRvIHRoZSBjb2xsZWN0aW9ucwotICBtb2R1bGUuCi0KLS0gSXNzdWUgIzQ2ODE6IEFsbG93IG1tYXAoKSB0byB3b3JrIG9uIGZpbGUgc2l6ZXMgYW5kIG9mZnNldHMgbGFyZ2VyIHRoYW4KLSAgNEdCLCBldmVuIG9uIDMyLWJpdCBidWlsZHMuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLCBhZGFwdGVkIGZvcgotICAzMi1iaXQgV2luZG93cy4KLQotLSBJc3N1ZSAjMTExNjk6IGNvbXBpbGVhbGwgbW9kdWxlIHVzZXMgcmVwcigpIHRvIGZvcm1hdCBmaWxlbmFtZXMgYW5kIHBhdGhzIHRvCi0gIGVzY2FwZSBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgc2hvdyBzcGFjZXMuCi0KLS0gSXNzdWUgIzExMDg5OiBGaXggcGVyZm9ybWFuY2UgaXNzdWUgbGltaXRpbmcgdGhlIHVzZSBvZiBDb25maWdQYXJzZXIoKQotICB3aXRoIGxhcmdlIGNvbmZpZyBmaWxlcy4KLQotLSBJc3N1ZSAjMTAyNzY6IEZpeCB0aGUgcmVzdWx0cyBvZiB6bGliLmNyYzMyKCkgYW5kIHpsaWIuYWRsZXIzMigpIG9uIGJ1ZmZlcnMKLSAgbGFyZ2VyIHRoYW4gNEdCLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgotCi0tIElzc3VlICMxMTM4ODogQWRkZWQgYSBjbGVhcigpIG1ldGhvZCB0byBNdXRhYmxlU2VxdWVuY2UKLQotLSBJc3N1ZSAjMTExNzQ6IEFkZCBhcmdwYXJzZS5NZXRhdmFyVHlwZUhlbHBGb3JtYXR0ZXIsIHdoaWNoIHVzZXMgdHlwZSBuYW1lcwotICBmb3IgdGhlIG5hbWVzIG9mIG9wdGlvbmFsIGFuZCBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbiBoZWxwIG1lc3NhZ2VzLgotCi0tIElzc3VlICM5MzQ4OiBSYWlzZSBhbiBlYXJseSBlcnJvciBpZiBhcmdwYXJzZSBuYXJncyBhbmQgbWV0YXZhciBkb24ndCBtYXRjaC4KLQotLSBJc3N1ZSAjOTAyNjogRml4IG9yZGVyIG9mIGFyZ3BhcnNlIHN1Yi1jb21tYW5kcyBpbiBoZWxwIG1lc3NhZ2VzLgotCi0tIElzc3VlICM5MzQ3OiBGaXggZm9ybWF0dGluZyBmb3IgdHVwbGVzIGluIGFyZ3BhcnNlIHR5cGU9IGVycm9yIG1lc3NhZ2VzLgotCi0tIElzc3VlICMxMjE5MTogQWRkZWQgc2h1dGlsLmNob3duKCkgdG8gY2hhbmdlIHVzZXIgYW5kL29yIGdyb3VwIG93bmVyIG9mIGEKLSAgZ2l2ZW4gcGF0aCBhbHNvIHNwZWNpZnlpbmcgdGhlaXIgbmFtZXMuCi0KLS0gSXNzdWUgIzEzOTg4OiBUaGUgX2VsZW1lbnR0cmVlIGFjY2VsZXJhdG9yIGlzIHVzZWQgd2hlbmV2ZXIgYXZhaWxhYmxlLgotICBOb3cgeG1sLmV0cmVlLmNFbGVtZW50VHJlZSBiZWNvbWVzIGEgZGVwcmVjYXRlZCBhbGlhcyB0byBFbGVtZW50VHJlZS4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzY4MDc6IFJ1biBtc2lzdXBwb3J0Lm1hayBlYXJsaWVyLgotCi0tIElzc3VlICMxMDU4MDogTWlub3IgZ3JhbW1hciBjaGFuZ2UgaW4gV2luZG93cyBpbnN0YWxsZXIuCi0KLS0gSXNzdWUgIzEzMzI2OiBDbGVhbiBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb3JyZWN0bHkgb24gT3BlbkJTRC4KLQotLSBQRVAgMzkzOiB0aGUgY29uZmlndXJlIG9wdGlvbiAtLXdpdGgtd2lkZS11bmljb2RlIGlzIHJlbW92ZWQuCi0KLS0gSXNzdWUgIzEyODUyOiBTZXQgX1hPUEVOX1NPVVJDRSB0byA3MDAsIGluc3RlYWQgb2YgNjAwLCB0byBnZXQgUE9TSVggMjAwOAotICBmdW5jdGlvbnMgb24gT3BlbkJTRCAoZS5nLiBmZG9wZW5kaXIpLgotCi0tIElzc3VlICMxMTg2MzogUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBzeXN0ZW1zIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMgotICAoZm9sbG93aW5nIFBFUCAxMSkuICBUaGVzZSBzeXN0ZW1zIGFyZSBzeXN0ZW1zIHVzaW5nIE1hY2ggQyBUaHJlYWRzLAotICBTdW5PUyBsaWdodHdlaWdodCBwcm9jZXNzZXMsIEdOVSBwdGggdGhyZWFkcyBhbmQgSVJJWCB0aHJlYWRzLgotCi0tIElzc3VlICM4NzQ2OiBDb3JyZWN0IGZhdWx0eSBjb25maWd1cmUgY2hlY2tzIHNvIHRoYXQgb3MuY2hmbGFncygpIGFuZAotICBvcy5sY2hmbGFncygpIGFyZSBvbmNlIGFnYWluIGJ1aWx0IG9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IHRoZXNlCi0gIGZ1bmN0aW9ucyAoQlNEIGFuZCBPUyBYKS4gIEFsc28gYWRkIG5ldyBzdGF0IGZpbGUgZmxhZ3MgZm9yIE9TIFgKLSAgKFVGX0hJRERFTiBhbmQgVUZfQ09NUFJFU1NFRCkuCi0KLS0gSXNzdWUgIzEwNjQ1OiBJbnN0YWxsaW5nIFB5dGhvbiBubyBsb25nZXIgY3JlYXRlcyBhCi0gIFB5dGhvbi1YLlkuWi1weVguWS5lZ2ctaW5mbyBmaWxlIGluIHRoZSBsaWItZHlubG9hZCBkaXJlY3RvcnkuCi0KLS0gRG8gbm90IGFjY2lkZW50YWxseSBpbmNsdWRlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBzcWxpdGUuaCB0d2ljZSB3aGVuCi0gIGJ1aWxkaW5nIHNxbGl0ZTMuCi0KLS0gSXNzdWUgIzExMjE3OiBGb3IgNjQtYml0LzMyLWJpdCBNYWMgT1MgWCB1bml2ZXJzYWwgZnJhbWV3b3JrIGJ1aWxkcywKLSAgZW5zdXJlICJtYWtlIGluc3RhbGwiIGNyZWF0ZXMgc3ltbGlua3MgaW4gLS1wcmVmaXggYmluIGZvciB0aGUgIi0zMiIKLSAgZmlsZXMgaW4gdGhlIGZyYW1ld29yayBiaW4gZGlyZWN0b3J5IGxpa2UgdGhlIGluc3RhbGxlciBkb2VzLgotCi0tIElzc3VlICMxMTM0NzogVXNlIC0tbm8tYXMtbmVlZGVkIHdoZW4gbGlua2luZyBsaWJweXRob24zLnNvLgotCi0tIElzc3VlICMxMTQxMTogRml4ICdtYWtlIERFU1RESVI9JyB3aXRoIGEgcmVsYXRpdmUgZGVzdGluYXRpb24uCi0KLS0gSXNzdWUgIzExMjY4OiBQcmV2ZW50IE1hYyBPUyBYIEluc3RhbGxlciBmYWlsdXJlIGlmIERvY3VtZW50YXRpb24KLSAgcGFja2FnZSBoYWQgcHJldmlvdXNseSBiZWVuIGluc3RhbGxlZC4KLQotLSBJc3N1ZSAjMTE0OTU6IE9TRiBzdXBwb3J0IGlzIGVsaW1pbmF0ZWQuIEl0IHdhcyBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIuCi0KLUlETEUKLS0tLS0KLQotLSBJc3N1ZSAjMTQ0MDk6IElETEUgbm93IHByb3Blcmx5IGV4ZWN1dGVzIGNvbW1hbmRzIGluIHRoZSBTaGVsbCB3aW5kb3cKLSAgd2hlbiBpdCBjYW5ub3QgcmVhZCB0aGUgbm9ybWFsIGNvbmZpZyBmaWxlcyBvbiBzdGFydHVwIGFuZAotICBoYXMgdG8gdXNlIHRoZSBidWlsdC1pbiBkZWZhdWx0IGtleSBiaW5kaW5ncy4KLSAgVGhlcmUgd2FzIHByZXZpb3VzbHkgYSBidWcgaW4gb25lIG9mIHRoZSBkZWZhdWx0cy4KLQotLSBJRExFIGNhbiBiZSBsYXVuY2hlZCBhcyBweXRob24gLW0gaWRsZWxpYgotCi0tIElzc3VlICMzNTczOiBJRExFIGhhbmdzIHdoZW4gcGFzc2luZyBpbnZhbGlkIGNvbW1hbmQgbGluZSBhcmdzCi0gIChkaXJlY3RvcnkoaWVzKSBpbnN0ZWFkIG9mIGZpbGUocykpIChQYXRjaCBieSBHdWlsaGVybWUgUG9sbykKLQotLSBJc3N1ZSAjMTQyMDA6IElETEUgc2hlbGwgY3Jhc2ggb24gcHJpbnRpbmcgbm9uLUJNUCB1bmljb2RlIGNoYXJhY3Rlci4KLQotLSBJc3N1ZSAjNTIxOTogUHJldmVudCBldmVudCBoYW5kbGVyIGNhc2NhZGUgaW4gSURMRS4KLQotLSBJc3N1ZSAjOTY0NDM3OiBNYWtlIElETEUgaGVscCB3aW5kb3cgbm9uLW1vZGFsLgotICBQYXRjaCBieSBHdWlsaGVybWUgUG9sbyBhbmQgUm9nZXIgU2Vyd3kuCi0KLS0gSXNzdWUgIzEzOTMzOiBJRExFIGF1dG8tY29tcGxldGUgZGlkIG5vdCB3b3JrIHdpdGggc29tZSBpbXBvcnRlZAotICBtb2R1bGUsIGxpa2UgaGFzaGxpYi4gIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKLQotLSBJc3N1ZSAjMTM1MDY6IEFkZCAnJyB0byBwYXRoIGZvciBJRExFIFNoZWxsIHdoZW4gc3RhcnRlZCBhbmQgcmVzdGFydGVkIHdpdGggUmVzdGFydCBTaGVsbC4KLSAgT3JpZ2luYWwgcGF0Y2hlcyBieSBNYXJjbyBTY2F0YWdsaW5pIGFuZCBSb2dlciBTZXJ3eS4KLQotLSBJc3N1ZSAjNDYyNTogSWYgSURMRSBjYW5ub3Qgd3JpdGUgdG8gaXRzIHJlY2VudCBmaWxlIG9yIGJyZWFrcG9pbnQgZmlsZXMsCi0gIGRpc3BsYXkgYSBtZXNzYWdlIHBvcHVwIGFuZCBjb250aW51ZSByYXRoZXIgdGhhbiBjcmFzaC4gIE9yaWdpbmFsIHBhdGNoIGJ5Ci0gIFJvZ2VyIFNlcnd5LgotCi0tIElzc3VlICM4NjQxOiBVcGRhdGUgSURMRSAzIHN5bnRheCBjb2xvcmluZyB0byByZWNvZ25pemUgYiIuLiIgYW5kIG5vdCB1Ii4uIi4KLSAgUGF0Y2ggYnkgVGFsIEVpbmF0LgotCi0tIElzc3VlICMxMzI5NjogRml4IElETEUgdG8gY2xlYXIgY29tcGlsZSBfX2Z1dHVyZV9fIGZsYWdzIG9uIHNoZWxsIHJlc3RhcnQuCi0gIChQYXRjaCBieSBSb2dlciBTZXJ3eSkKLQotLSBJc3N1ZSAjOTg3MTogUHJldmVudCBJRExFIDMgY3Jhc2ggd2hlbiBnaXZlbiBieXRlIHN0aW5ncwotICB3aXRoIGludmFsaWQgaGV4IGVzY2FwZSBzZXF1ZW5jZXMsIGxpa2UgYidceDAnLgotICAoT3JpZ2luYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLikKLQotLSBJc3N1ZSAjMTI2MzY6IElETEUgcmVhZHMgdGhlIGNvZGluZyBjb29raWUgd2hlbiBleGVjdXRpbmcgYSBQeXRob24gc2NyaXB0LgotCi0tIElzc3VlICMxMjU0MDogUHJldmVudCB6b21iaWUgSURMRSBwcm9jZXNzZXMgb24gV2luZG93cyBkdWUgdG8gY2hhbmdlcwotICBpbiBvcy5raWxsKCkuCi0KLS0gSXNzdWUgIzEyNTkwOiBJRExFIGVkaXRvciB3aW5kb3cgbm93IGFsd2F5cyBkaXNwbGF5cyB0aGUgZmlyc3QgbGluZQotICB3aGVuIG9wZW5pbmcgYSBsb25nIGZpbGUuICBXaXRoIFRrIDguNSwgdGhlIGZpcnN0IGxpbmUgd2FzIGhpZGRlbi4KLQotLSBJc3N1ZSAjMTEwODg6IGRvbid0IGNyYXNoIHdoZW4gdXNpbmcgRjUgdG8gcnVuIGEgc2NyaXB0IGluIElETEUgb24gTWFjT1NYCi0gIHdpdGggVGsgOC41LgotCi0tIElzc3VlICMxMDI4OiBUayByZXR1cm5zIGludmFsaWQgVW5pY29kZSBudWxsIGluICVBOiBVbmljb2RlRGVjb2RlRXJyb3IuCi0gIFdpdGggVGsgPCA4LjUgX3RraW50ZXIuYzpQeXRob25DbWQoKSByYWlzZWQgVW5pY29kZURlY29kZUVycm9yLCBjYXVzZWQKLSAgSURMRSB0byBleGl0LiAgQ29udmVydGVkIHRvIHZhbGlkIFVuaWNvZGUgbnVsbCBpbiBQeXRob25DbWQoKS4KLQotLSBJc3N1ZSAjMTE3MTg6IElETEUncyBvcGVuIG1vZHVsZSBkaWFsb2cgY291bGRuJ3QgZmluZCB0aGUgX19pbml0X18ucHkKLSAgZmlsZSBpbiBhIHBhY2thZ2UuCi0KLVRvb2xzL0RlbW9zCi0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNDA1MzogcGF0Y2hjaGVjay5weSAoIm1ha2UgcGF0Y2hjaGVjayIpIG5vdyB3b3JrcyB3aXRoIE1RIHBhdGNoZXMuCi0gIFBhdGNoIGJ5IEZyYW5jaXNjbyBNYXJ0w61uIEJydWd1w6kuCi0KLS0gSXNzdWUgIzEzOTMwOiAydG8zIGlzIG5vdyBhYmxlIHRvIHdyaXRlIGl0cyBjb252ZXJ0ZWQgb3V0cHV0IGZpbGVzIHRvIGFub3RoZXIKLSAgZGlyZWN0b3J5IHRyZWUgYXMgd2VsbCBhcyBjb3B5aW5nIHVuY2hhbmdlZCBmaWxlcyBhbmQgYWx0ZXJpbmcgdGhlIGZpbGUKLSAgc3VmZml4LiAgU2VlIGl0cyBuZXcgLW8sIC1XIGFuZCAtLWFkZC1zdWZmaXggb3B0aW9ucy4gIFRoaXMgbWFrZXMgaXQgbW9yZQotICB1c2VmdWwgaW4gbWFueSBhdXRvbWF0ZWQgY29kZSB0cmFuc2xhdGlvbiB3b3JrZmxvd3MuCi0KLS0gSXNzdWUgIzEzNjI4OiBweXRob24tZ2RiLnB5IGlzIG5vdyBhYmxlIHRvIHJldHJpZXZlIG1vcmUgZnJhbWVzIGluIHRoZSBQeXRob24KLSAgdHJhY2ViYWNrIGlmIFB5dGhvbiBpcyBvcHRpbWl6ZWQuCi0KLS0gSXNzdWUgIzExOTk2OiBsaWJweXRob24gKGdkYiksIHJlcGxhY2UgInB5LWJ0IiBjb21tYW5kIGJ5ICJweS1idC1mdWxsIiBhbmQKLSAgYWRkIGEgc21hcnRlciAicHktYnQiIGNvbW1hbmQgcHJpbnRpbmcgYSBjbGFzc2ljIFB5dGhvbiB0cmFjZWJhY2suCi0KLS0gSXNzdWUgIzExMTc5OiBNYWtlIGNjYmVuY2ggd29yayB1bmRlciBQeXRob24gMy4xIGFuZCAyLjcgYWdhaW4uCi0KLS0gSXNzdWUgIzEwNjM5OiByZWluZGVudC5weSBubyBsb25nZXIgY29udmVydHMgbmV3bGluZXMgYW5kIHdpbGwgcmFpc2UKLSAgYW4gZXJyb3IgaWYgYXR0ZW1wdGluZyB0byBjb252ZXJ0IGEgZmlsZSB3aXRoIG1peGVkIG5ld2xpbmVzLgotICAiLS1uZXdsaW5lIiBvcHRpb24gYWRkZWQgdG8gc3BlY2lmeSBuZXcgbGluZSBjaGFyYWN0ZXIuCi0KLUV4dGVuc2lvbiBNb2R1bGVzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNjg0NzogRml4ZWQgaW1wcm9wZXIgdXNlIG9mIF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgpIGluCi0gIG5vbi1weWRlYnVnIGJ1aWxkcy4gU2V2ZXJhbCBleHRlbnNpb24gbW9kdWxlcyBub3cgY29tcGlsZSBjbGVhbmx5IHdoZW4KLSAgYXNzZXJ0KClzIGFyZSBlbmFibGVkIGluIHN0YW5kYXJkIGJ1aWxkcyAoLURERUJVRyBmbGFnKS4KLQotLSBJc3N1ZSAjMTM4NDA6IFRoZSBlcnJvciBtZXNzYWdlIHByb2R1Y2VkIGJ5IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcgotICB3aGVuIGdpdmVuIGEgVW5pY29kZSBzdHJpbmcgaGFzIGJlZW4gZml4ZWQuCi0KLS0gSXNzdWUgIzk5NzU6IHNvY2tldDogRml4IGluY29ycmVjdCB1c2Ugb2YgZmxvd2luZm8gYW5kIHNjb3BlX2lkLiBQYXRjaCBieQotICBWaWxtb3MgTmViZWhhai4KLQotLSBJc3N1ZSAjNzc3Nzogc29ja2V0OiBBZGQgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUEZfUkRTKSBzdXBwb3J0LgotCi0tIElzc3VlICMxMzE1OTogRmlsZUlPIGFuZCBCWjJDb21wcmVzc29yL0JaMkRlY29tcHJlc3NvciBub3cgdXNlIGEgbGluZWFyLXRpbWUKLSAgYnVmZmVyIGdyb3d0aCBzdHJhdGVneSBpbnN0ZWFkIG9mIGEgcXVhZHJhdGljLXRpbWUgb25lLgotCi0tIElzc3VlICMxMDE0MTogc29ja2V0OiBBZGQgU29ja2V0Q0FOIChQRl9DQU4pIHN1cHBvcnQuIEluaXRpYWwgcGF0Y2ggYnkKLSAgTWF0dGhpYXMgRnVjaHMsIHVwZGF0ZWQgYnkgVGlhZ28gR29uw6dhbHZlcy4KLQotLSBJc3N1ZSAjMTMwNzA6IEZpeCBhIGNyYXNoIHdoZW4gYSBUZXh0SU9XcmFwcGVyIGNhdWdodCBpbiBhIHJlZmVyZW5jZSBjeWNsZQotICB3b3VsZCBiZSBmaW5hbGl6ZWQgYWZ0ZXIgdGhlIHJlZmVyZW5jZSB0byBpdHMgdW5kZXJseWluZyBCdWZmZXJlZFJXUGFpcidzCi0gIHdyaXRlciBnb3QgY2xlYXJlZCBieSB0aGUgR0MuCi0KLS0gSXNzdWUgIzEyODgxOiBjdHlwZXM6IEZpeCBzZWdmYXVsdCB3aXRoIGxhcmdlIHN0cnVjdHVyZSBmaWVsZCBuYW1lcy4KLQotLSBJc3N1ZSAjMTMwNTg6IG9zc2F1ZGlvZGV2OiBmaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBvbiBlcnJvci4gUGF0Y2ggYnkKLSAgVGhvbWFzIEphcm9zY2guCi0KLS0gSXNzdWUgIzEzMDEzOiBjdHlwZXM6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIFB5Q0FycmF5VHlwZV9mcm9tX2N0eXBlLgotICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KLQotLSBJc3N1ZSAjMTMwMjI6IEZpeDogX211bHRpcHJvY2Vzc2luZy5yZWN2ZmQoKSBkb2Vzbid0IGNoZWNrIHRoYXQKLSAgZmlsZSBkZXNjcmlwdG9yIHdhcyBhY3R1YWxseSByZWNlaXZlZC4KLQotLSBJc3N1ZSAjMTE3MjcxMTogQWRkICdsb25nIGxvbmcnIHN1cHBvcnQgdG8gdGhlIGFycmF5IG1vZHVsZS4KLSAgSW5pdGlhbCBwYXRjaCBieSBPcmVuIFRpcm9zaCBhbmQgSGlyb2thenUgWWFtYW1vdG8uCi0KLS0gSXNzdWUgIzEyNDgzOiBjdHlwZXM6IEZpeCBhIGNyYXNoIHdoZW4gdGhlIGRlc3RydWN0aW9uIG9mIGEgY2FsbGJhY2sKLSAgb2JqZWN0IHRyaWdnZXJzIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KLQotLSBJc3N1ZSAjMTI5NTA6IEZpeCBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgaW4gbXVsdGlwcm9jZXNzaW5nLCB1bmRlcgotICBPcGVuSW5kaWFuYS9JbGx1bW9zLgotCi0tIElzc3VlICMxMjc2NDogRml4IGEgY3Jhc2ggaW4gY3R5cGVzIHdoZW4gdGhlIG5hbWUgb2YgYSBTdHJ1Y3R1cmUgZmllbGQgaXMgbm90Ci0gIGEgc3RyaW5nLgotCi0tIElzc3VlICMxMTI0MTogc3ViY2xhc3NlcyBvZiBjdHlwZXMuQXJyYXkgY2FuIG5vdyBiZSBzdWJjbGFzc2VkLgotCi0tIElzc3VlICM5NjUxOiBGaXggYSBjcmFzaCB3aGVuIGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcigwKSB3YXMgcGFzc2VkIHRvCi0gIHNvbWUgZnVuY3Rpb25zIGxpa2UgZmlsZS53cml0ZSgpLgotCi0tIElzc3VlICMxMDMwOTogRGVmaW5lIF9HTlVfU09VUkNFIHNvIHRoYXQgbXJlbWFwKCkgZ2V0cyB0aGUgcHJvcGVyCi0gIHNpZ25hdHVyZS4gIFdpdGhvdXQgdGhpcywgYXJjaGl0ZWN0dXJlcyB3aGVyZSBzaXplb2Ygdm9pZCogIT0gc2l6ZW9mIGludCBhcmUKLSAgYnJva2VuLiAgUGF0Y2ggZ2l2ZW4gYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KLQotLSBJc3N1ZSAjMTIwNTE6IEZpeCBzZWdmYXVsdCBpbiBqc29uLmR1bXBzKCkgd2hpbGUgZW5jb2RpbmcgaGlnaGx5LW5lc3RlZAotICBvYmplY3RzIHVzaW5nIHRoZSBDIGFjY2VsZXJhdGlvbnMuCi0KLS0gSXNzdWUgIzEyMDE3OiBGaXggc2VnZmF1bHQgaW4ganNvbi5sb2FkcygpIHdoaWxlIGRlY29kaW5nIGhpZ2hseS1uZXN0ZWQKLSAgb2JqZWN0cyB1c2luZyB0aGUgQyBhY2NlbGVyYXRpb25zLgotCi0tIElzc3VlICMxODM4OiBQcmV2ZW50IHNlZ2ZhdWx0IGluIGN0eXBlcywgd2hlbiBfYXNfcGFyYW1ldGVyXyBvbiBhIGNsYXNzIGlzIHNldAotICB0byBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuCi0KLVRlc3RzCi0tLS0tLQotCi0tIElzc3VlICMxMzEyNTogU2lsZW5jZSBzcHVyaW91cyB0ZXN0X2xpYjJ0bzMgb3V0cHV0IHdoZW4gaW4gbm9uLXZlcmJvc2UgbW9kZS4KLSAgUGF0Y2ggYnkgTWlraGFpbCBOb3Zpa292LgotCi0tIElzc3VlICMxMzQ0NzogQWRkIGEgdGVzdCBmaWxlIHRvIGhvc3QgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYnVncyBpbiB0aGUKLSAgc2NyaXB0cyBmb3VuZCBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgotCi0tIElzc3VlICMxMDg4MTogRml4IHRlc3Rfc2l0ZSBmYWlsdXJlIHdpdGggT1MgWCBmcmFtZXdvcmsgYnVpbGRzLgotCi0tIElzc3VlICMxMzkwMTogUHJldmVudCB0ZXN0X2Rpc3R1dGlscyBmYWlsdXJlcyBvbiBPUyBYIHdpdGggLS1lbmFibGUtc2hhcmVkLgotCi0tIElzc3VlICMxMzg2MjogRml4IHNwdXJpb3VzIGZhaWx1cmUgaW4gdGVzdF96bGliIGR1ZSB0byBydW50aW1lL2NvbXBpbGUgdGltZQotICBtaW5vciB2ZXJzaW9ucyBub3QgbWF0Y2hpbmcuCi0KLS0gSXNzdWUgIzEyODA0OiBGaXggdGVzdF9zb2NrZXQgYW5kIHRlc3RfdXJsbGliMm5ldCBmYWlsdXJlcyB3aGVuIHJ1bm5pbmcgdGVzdHMKLSAgb24gYSBzeXN0ZW0gd2l0aG91dCBpbnRlcm5ldCBhY2Nlc3MuCi0KLS0gSXNzdWUgIzEzNzI2OiBGaXggdGhlIGFtYmlndW91cyAtUyBmbGFnIGluIHJlZ3J0ZXN0LiBJdCBpcyAtby8tLXNsb3cgZm9yIHNsb3cKLSAgdGVzdHMuCi0KLS0gSXNzdWUgIzExNjU5OiBGaXggUmVzb3VyY2VXYXJuaW5nIGluIHRlc3Rfc3VicHJvY2VzcyBpbnRyb2R1Y2VkIGJ5ICMxMTQ1OS4KLSAgUGF0Y2ggYnkgQmVuIEhheWRlbi4KLQotLSBJc3N1ZSAjMTE1Nzc6IGZpeCBSZXNvdXJjZVdhcm5pbmcgdHJpZ2dlcmVkIGJ5IGltcHJvdmVkIGJpbmhleCB0ZXN0IGNvdmVyYWdlCi0KLS0gSXNzdWUgIzExNTA5OiBTaWduaWZpY2FudGx5IGluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2YgZmlsZWlucHV0LgotICBQYXRjaCBieSBEZW52ZXIgQ29uZXliZWFyZSBhdCBQeUNvbiAyMDExIFNwcmludHMuCi0KLS0gSXNzdWUgIzExNjg5OiBGaXggYSB2YXJpYWJsZSBzY29waW5nIGVycm9yIGluIGFuIHNxbGl0ZTMgdGVzdAotCi0tIElzc3VlICMxMzc4NjogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgJ3RyYWNlJyBsb25nIG9wdGlvbiBmcm9tIHJlZ3J0ZXN0LnB5LgotCi0tIElzc3VlICMxMzcyNTogRml4IHJlZ3J0ZXN0IHRvIHJlY29nbml6ZSB0aGUgZG9jdW1lbnRlZCAtZCBmbGFnLgotICBQYXRjaCBieSBFcm5vIFR1a2lhLgotCi0tIElzc3VlICMxMzMwNDogU2tpcCB0ZXN0IGNhc2UgaWYgdXNlciBzaXRlLXBhY2thZ2VzIGRpc2FibGVkICgtcyBvcgotICBQWVRIT05OT1VTRVJTSVRFKS4gIChQYXRjaCBieSBDYXJsIE1leWVyKQotCi0tIElzc3VlICM1NjYxOiBBZGQgYSB0ZXN0IGZvciBFQ09OTlJFU0VUL0VQSVBFIGhhbmRsaW5nIHRvIHRlc3RfYXN5bmNvcmUuIFBhdGNoCi0gIGJ5IFhhdmllciBkZSBHYXllLgotCi0tIElzc3VlICMxMzIxODogRml4IHRlc3Rfc3NsIGZhaWx1cmVzIG9uIERlYmlhbi9VYnVudHUuCi0KLS0gUmUtZW5hYmxlIGxpYjJ0bzMncyB0ZXN0X3BhcnNlci5weSB0ZXN0cywgdGhvdWdoIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZQotICAoc2VlIGlzc3VlICMxMzEyNSkuCi0KLS0gSXNzdWUgIzEyNjU2OiBBZGQgdGVzdHMgZm9yIElQdjYgYW5kIFVuaXggc29ja2V0cyB0byB0ZXN0X2FzeW5jb3JlLgotCi0tIElzc3VlICM2NDg0OiBBZGQgdW5pdCB0ZXN0cyBmb3IgbWFpbGNhcCBtb2R1bGUgKHBhdGNoIGJ5IEdyZWdvcnkgTm9maSkKLQotLSBJc3N1ZSAjMTE2NTE6IEltcHJvdmUgdGhlIE1ha2VmaWxlIHRlc3QgdGFyZ2V0cyB0byBydW4gbW9yZSBvZiB0aGUgdGVzdCBzdWl0ZQotICBtb3JlIHF1aWNrbHkuIFRoZSAtLW11bHRpcHJvY2VzcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCwgcmVkdWNpbmcKLSAgdGhlIGFtb3VudCBvZiB0aW1lIG5lZWRlZCB0byBydW4gdGhlIHRlc3RzLiAibWFrZSB0ZXN0IiBhbmQgIm1ha2UgcXVpY2t0ZXN0IgotICBub3cgaW5jbHVkZSBzb21lIHJlc291cmNlLWludGVuc2l2ZSB0ZXN0cywgYnV0IG5vIGxvbmdlciBydW4gdGhlIHRlc3Qgc3VpdGUKLSAgdHdpY2UgdG8gY2hlY2sgZm9yIGJ1Z3MgaW4gLnB5YyBnZW5lcmF0aW9uLiBUb29scy9zY3JpcHRzL3J1bl90ZXN0LnB5IHByb3ZpZGVzCi0gIGFuIGVhc3kgcGxhdGZvcm0taW5kZXBlbmRlbnQgd2F5IHRvIHJ1biB0ZXN0IHN1aXRlIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuCi0KLS0gSXNzdWUgIzEyMzMxOiBUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIHBhY2thZ2luZyBtb2R1bGUgY2FuIG5vdyBydW4gZnJvbSBhbgotICBpbnN0YWxsZWQgUHl0aG9uLgotCi0tIElzc3VlICMxMjMzMTogVGhlIHRlc3Qgc3VpdGUgZm9yIGxpYjJ0bzMgY2FuIG5vdyBydW4gZnJvbSBhbiBpbnN0YWxsZWQKLSAgUHl0aG9uLgotCi0tIElzc3VlICMxMjYyNjogSW4gcmVncnRlc3QsIGFsbG93IHRvIGZpbHRlciB0ZXN0cyB1c2luZyBhIGdsb2IgZmlsdGVyCi0gIHdpdGggdGhlIGBgLW1gYCAob3IgYGAtLW1hdGNoYGApIG9wdGlvbi4gIFRoaXMgd29ya3Mgd2l0aCBhbGwgdGVzdCBjYXNlcwotICB1c2luZyB0aGUgdW5pdHRlc3QgbW9kdWxlLiAgVGhpcyBpcyB1c2VmdWwgd2l0aCBsb25nIHRlc3Qgc3VpdGVzCi0gIHN1Y2ggYXMgdGVzdF9pbyBvciB0ZXN0X3N1YnByb2Nlc3MuCi0KLS0gSXNzdWUgIzEyNjI0OiBJdCBpcyBub3cgcG9zc2libGUgdG8gZmFpbCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSB3aGVuCi0gIHJ1bm5pbmcgaW4gdmVyYm9zZSBtb2RlIChgYC12YGAgb3IgYGAtV2BgKSwgYnkgdXNpbmcgdGhlIGBgLS1mYWlsZmFzdGBgCi0gIChvciBgYC1HYGApIG9wdGlvbiB0byByZWdydGVzdC4gIFRoaXMgaXMgdXNlZnVsIHdpdGggbG9uZyB0ZXN0IHN1aXRlcwotICBzdWNoIGFzIHRlc3RfaW8gb3IgdGVzdF9zdWJwcm9jZXNzLgotCi0tIElzc3VlICMxMjU4NzogQ29ycmVjdCBmYXVsdHkgdGVzdCBmaWxlIGFuZCByZWZlcmVuY2UgaW4gdGVzdF90b2tlbml6ZS4KLSAgKFBhdGNoIGJ5IFJvYmVydCBYaWFvKQotCi0tIElzc3VlICMxMjU3MzogQWRkIHJlc291cmNlIGNoZWNrcyBmb3IgZGFuZ2xpbmcgVGhyZWFkIGFuZCBQcm9jZXNzIG9iamVjdHMuCi0KLS0gSXNzdWUgIzEyNTQ5OiBDb3JyZWN0IHRlc3RfcGxhdGZvcm0gdG8gbm90IGZhaWwgd2hlbiBPUyBYIHJldHVybnMgJ3g4Nl82NCcKLSAgYXMgdGhlIHByb2Nlc3NvciB0eXBlIG9uIHNvbWUgTWFjIHN5c3RlbXMuCi0KLS0gU2tpcCBuZXR3b3JrIHRlc3RzIHdoZW4gZ2V0YWRkcmluZm8oKSByZXR1cm5zIEVBSV9BR0FJTiwgbWVhbmluZyBhIHRlbXBvcmFyeQotICBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbi4KLQotLSBJc3N1ZSAjMTE4MTI6IFNvbHZlIHRyYW5zaWVudCBzb2NrZXQgZmFpbHVyZSB0byBjb25uZWN0IHRvICdsb2NhbGhvc3QnCi0gIGluIHRlc3RfdGVsbmV0bGliLnB5LgotCi0tIFNvbHZlZCBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0ZXN0X3RlbG5ldGxpYi5weS4gUmVsYXRlZCB0byBpc3N1ZSAjMTE4MTIuCi0KLS0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3JvYm90cGFyc2VyIHdoZW4gbXVlYmxlc21vcmFsZWRhLmNvbSBpcyBmbGFreSBhbmQKLSAgYW4gb3ZlcnplYWxvdXMgRE5TIHNlcnZpY2UgKGUuZy4gT3BlbkROUykgcmVkaXJlY3RzIHRvIGEgcGxhY2Vob2xkZXIKLSAgV2ViIHNpdGUuCi0KLS0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3VybGxpYm5ldC50ZXN0X2JhZF9hZGRyZXNzIHdoZW4gc29tZSBvdmVyemVhbG91cwotICBETlMgc2VydmljZSAoZS5nLiBPcGVuRE5TKSByZXNvbHZlcyBhIG5vbi1leGlzdGVudCBkb21haW4gbmFtZS4gIFRoZSB0ZXN0Ci0gIGlzIG5vdyBza2lwcGVkIGluc3RlYWQuCi0KLS0gSXNzdWUgIzEyNDQwOiBXaGVuIHRlc3Rpbmcgd2hldGhlciBzb21lIGJpdHMgaW4gU1NMQ29udGV4dC5vcHRpb25zIGNhbiBiZQotICByZXNldCwgY2hlY2sgdGhlIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgaGVhZGVycyBQeXRob24gd2FzIGNvbXBpbGVkIGFnYWluc3QsCi0gIHJhdGhlciB0aGFuIHRoZSBydW50aW1lIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgbGlicmFyeS4KLQotLSBJc3N1ZSAjMTE1MTI6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBjZ2l0YiBtb2R1bGUuIFBhdGNoIGJ5IFJvYmJpZSBDbGVtb25zLgotCi0tIElzc3VlICMxMjQ5NzogSW5zdGFsbCB0ZXN0L2RhdGEgdG8gcHJldmVudCBmYWlsdXJlcyBvZiB0aGUgdmFyaW91cyBjb2RlY21hcHMKLSAgdGVzdHMuCi0KLS0gSXNzdWUgIzEyNDk2OiBJbnN0YWxsIHRlc3QvY2FwYXRoIGRpcmVjdG9yeSB0byBwcmV2ZW50IHRlc3RfY29ubmVjdF9jYXBhdGgKLSAgdGVzdGNhc2UgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KLQotLSBJc3N1ZSAjMTI0Njk6IFJ1biB3YWtldXAgYW5kIHBlbmRpbmcgc2lnbmFsIHRlc3RzIGluIGEgc3VicHJvY2VzcyB0byBydW4gdGhlCi0gIHRlc3QgaW4gYSBmcmVzaCBwcm9jZXNzIHdpdGggb25seSBvbmUgdGhyZWFkIGFuZCB0byBub3QgY2hhbmdlIHNpZ25hbAotICBoYW5kbGluZyBvZiB0aGUgcGFyZW50IHByb2Nlc3MuCi0KLS0gSXNzdWUgIzg3MTY6IEF2b2lkIGNyYXNoZXMgY2F1c2VkIGJ5IEFxdWEgVGsgb24gT1NYIHdoZW4gYXR0ZW1wdGluZyB0byBydW4KLSAgdGVzdF90ayBvciB0ZXN0X3R0a19ndWlvbmx5IHVuZGVyIGEgdXNlcm5hbWUgdGhhdCBpcyBub3QgY3VycmVudGx5IGxvZ2dlZAotICBpbiB0byB0aGUgY29uc29sZSB3aW5kb3dzZXJ2ZXIgKGFzIG1heSBiZSB0aGUgY2FzZSB1bmRlciBidWlsZGJvdCBvciBzc2gpLgotCi0tIElzc3VlICMxMjQwNzogRXhwbGljaXRseSBza2lwIHRlc3RfY2FwaS5FbWJlZGRpbmdUZXN0IHVuZGVyIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzEyNDAwOiByZWdydGVzdCAtVyBkb2Vzbid0IHJlcnVuIHRoZSB0ZXN0cyB0d2ljZSBhbnltb3JlLCBidXQgY2FwdHVyZXMKLSAgdGhlIG91dHB1dCBhbmQgZGlzcGxheXMgaXQgb24gZmFpbHVyZSBpbnN0ZWFkLiByZWdydGVzdCAtdiBkb2Vzbid0IHByaW50IHRoZQotICBlcnJvciB0d2ljZSBhbnltb3JlIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVycm9yLgotCi0tIElzc3VlICMxMjE0MTogSW5zdGFsbCBjb3BpZXMgb2YgdGVtcGxhdGUgQyBtb2R1bGUgZmlsZSBzbyB0aGF0Ci0gIHRlc3RfYnVpbGRfZXh0IG9mIHRlc3RfZGlzdHV0aWxzIGFuZCB0ZXN0X2NvbW1hbmRfYnVpbGRfZXh0IG9mCi0gIHRlc3RfcGFja2FnaW5nIGFyZSBubyBsb25nZXIgc2lsZW50bHkgc2tpcHBlZCB3aGVuCi0gIHJ1biBvdXRzaWRlIG9mIGEgYnVpbGQgZGlyZWN0b3J5LgotCi0tIElzc3VlICM4NzQ2OiBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3Igb3MuY2hmbGFncygpIGFuZCBvcy5sY2hmbGFncygpLgotICBQYXRjaCBieSBHYXJyZXR0IENvb3Blci4KLQotLSBJc3N1ZSAjMTA3MzY6IEZpeCB0ZXN0X3R0ayB0ZXN0X3dpZGdldHMgZmFpbHVyZXMgd2l0aCBDb2NvYSBUayA4LjUuOQotICAyLjgrIG9uIE1hYyBPUyBYLiAgKFBhdGNoIGJ5IFJvbmFsZCBPdXNzb3JlbikKLQotLSBJc3N1ZSAjMTIwNTc6IEFkZCB0ZXN0cyBmb3IgSVNPIDIwMjIgY29kZWNzIChpc28yMDIyX2pwLCBpc28yMDIyX2pwXzIsCi0gIGlzbzIwMjJfa3IpLgotCi0tIElzc3VlICMxMjA5NjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gdGVzdF90aHJlYWRpbmcudGVzdF93YWl0Zm9yKCkuIFBhdGNoCi0gIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgotCi0tIElzc3VlICMxMTYxNDogaW1wb3J0IF9faGVsbG9fXyBwcmludHMgIkhlbGxvIFdvcmxkISIuIFBhdGNoIHdyaXR0ZW4gYnkKLSAgQW5kcmVhcyBTdMO8aHJrLgotCi0tIElzc3VlICM1NzIzOiBJbXByb3ZlIGpzb24gdGVzdHMgdG8gYmUgZXhlY3V0ZWQgd2l0aCBhbmQgd2l0aG91dCBhY2NlbGVyYXRpb25zLgotCi0tIElzc3VlICMxMjA0MTogTWFrZSB0ZXN0X3dhaXQzIG1vcmUgcm9idXN0LgotCi0tIElzc3VlICMxMTg3MzogQ2hhbmdlIHJlZ2V4IGluIHRlc3RfY29tcGlsZWFsbCB0byBmaXggb2NjYXNpb25hbCBmYWlsdXJlcyB3aGVuCi0gIHdoZW4gdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZW1wb3JhcnkgcGF0aCBoYXBwZW5lZCB0byBtYXRjaCB0aGUgcmVnZXguCi0KLS0gSXNzdWUgIzExOTU4OiBGaXggRlRQIHRlc3RzIGZvciBJUHY2LCBiaW5kIHRvICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIuCi0gIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCi0KLS0gSXNzdWUgIzg0MDcsICMxMTg1OTogRml4IHRlc3RzIG9mIHRlc3RfaW8gdXNpbmcgdGhyZWFkcyBhbmQgYW4gYWxhcm06IHVzZQotICBwdGhyZWFkX3NpZ21hc2soKSB0byBlbnN1cmUgdGhhdCB0aGUgU0lHQUxSTSBzaWduYWwgaXMgcmVjZWl2ZWQgYnkgdGhlIG1haW4KLSAgdGhyZWFkLgotCi0tIElzc3VlICMxMTgxMTogRmFjdG9yIG91dCBkZXRlY3Rpb24gb2YgSVB2NiBzdXBwb3J0IG9uIHRoZSBjdXJyZW50IGhvc3QKLSAgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGFzIGBgdGVzdC5zdXBwb3J0LklQVjZfRU5BQkxFRGBgLiAgUGF0Y2ggYnkKLSAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgotCi0tIElzc3VlICMxMDkxNDogQWRkIGEgbWluaW1hbCBlbWJlZGRpbmcgdGVzdCB0byB0ZXN0X2NhcGkuCi0KLS0gSXNzdWUgIzExMjIzOiBTa2lwIHRlc3RfbG9ja19hY3F1aXJlX2ludGVycnVwdGlvbigpIGFuZAotICB0ZXN0X3Jsb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKCkgb2YgdGVzdF90aHJlYWRzaWduYWxzIGlmIGEgdGhyZWFkIGxvY2sgaXMKLSAgaW1wbGVtZW50ZWQgdXNpbmcgYSBQT1NJWCBtdXRleCBhbmQgYSBQT1NJWCBjb25kaXRpb24gdmFyaWFibGUuIEEgUE9TSVgKLSAgY29uZGl0aW9uIHZhcmlhYmxlIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZS5nLiBvbiBMaW51eCwgdGhlCi0gIGZ1dGV4IHN5c3RlbSBjYWxsIGlzIHJlc3RhcnRlZCkuCi0KLS0gSXNzdWUgIzExNzkwOiBGaXggc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdF9tdWx0aXByb2Nlc3NpbmcuV2l0aFByb2Nlc3Nlc1Rlc3RDb25kaXRpb24uCi0KLS0gRml4IHBvc3NpYmxlICJmaWxlIGFscmVhZHkgZXhpc3RzIiBlcnJvciB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIGluIHBhcmFsbGVsLgotCi0tIElzc3VlICMxMTcxOTogRml4IG1lc3NhZ2UgYWJvdXQgdW5leHBlY3RlZCB0ZXN0X21zaWxpYiBza2lwIG9uIG5vbi1XaW5kb3dzCi0gIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgotCi0tIElzc3VlICMxMTcyNzogQWRkIGEgLS10aW1lb3V0IG9wdGlvbiB0byByZWdydGVzdDogaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgotICBUSU1FT1VUIHNlY29uZHMsIGR1bXBzIHRoZSB0cmFjZWJhY2sgb2YgYWxsIHRocmVhZHMgYW5kIGV4aXRzLgotCi0tIElzc3VlICMxMTY1MzogZml4IC1XIHdpdGggLWogaW4gcmVncnRlc3QuCi0KLS0gVGhlIGVtYWlsIHRlc3Qgc3VpdGUgbm93IGxpdmVzIGluIHRoZSBMaWIvdGVzdC90ZXN0X2VtYWlsIHBhY2thZ2UuICBUaGUgdGVzdAotICBoYXJuZXNzIGNvZGUgaGFzIGFsc28gYmVlbiBtb2Rlcm5pemVkIHRvIGFsbG93IHVzZSBvZiBuZXcgdW5pdHRlc3QgZmVhdHVyZXMuCi0KLS0gcmVncnRlc3Qgbm93IGRpc2NvdmVycyB0ZXN0IHBhY2thZ2VzIGFzIHdlbGwgYXMgdGVzdCBtb2R1bGVzLgotCi0tIElzc3VlICMxMTU3NzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIGJpbmhleC5weS4gUGF0Y2ggYnkgQXJrYWR5IEtvcGx5YXJvdi4KLQotLSBOZXcgdGVzdF9jcmFzaGVycyBhZGRlZCB0byBleGVyY2lzZSB0aGUgc2NyaXB0cyBpbiB0aGUgTGliL3Rlc3QvY3Jhc2hlcnMKLSAgZGlyZWN0b3J5IGFuZCBjb25maXJtIHRoZXkgZmFpbCBhcyBleHBlY3RlZAotCi0tIElzc3VlICMxMTU3ODogYWRkZWQgdGVzdCBmb3IgdGhlIHRpbWVpdCBtb2R1bGUuICBQYXRjaCBieSBNaWNoYWVsIEhlbnJ5LgotCi0tIElzc3VlICMxMTUwMzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHBvc2l4cGF0aC5weS4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgotCi0tIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHksIGluY3JlYXNlcyBncmFudWxhcml0eSBvZgotICBzdHJpbmcuRm9ybWF0dGVyIHRlc3RzLiBJbml0aWFsIHBhdGNoIGJ5IEFsaWNpYSBBcmxlbi4KLQotLSBJc3N1ZSAjMTE1NDg6IEltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiB0aGUgc2h1dGlsIG1vZHVsZS4gUGF0Y2ggYnkKLSAgRXZhbiBEYW5kcmVhLgotCi0tIElzc3VlICMxMTU1NDogUmVhY3RpdmF0ZWQgdGVzdF9lbWFpbF9jb2RlY3MuCi0KLS0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weS4gUGF0Y2ggYnkgQWxpY2lhCi0gIEFybGVuCi0KLS0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3MudGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQotICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgotCi0tIElzc3VlICMxMTIyMzogRml4IHRlc3RfdGhyZWFkc2lnbmFscyB0byBmYWlsLCBub3QgaGFuZywgd2hlbiB0aGUKLSAgbm9uLXNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiBvZiBsb2NrcyBpcyB1c2VkIHVuZGVyIFBPU0lYLgotCi0tIElzc3VlICMxMDkxMTogQWRkIHRlc3RzIG9uIENHSSB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBQYXRjaCB3cml0dGVuIGJ5Ci0gIFBpZXJyZSBRdWVudGVsLgotCi0tIElzc3VlICM5OTMxOiBGaXggaGFuZ3MgaW4gR1VJIHRlc3RzIHVuZGVyIFdpbmRvd3MgaW4gY2VydGFpbiBjb25kaXRpb25zLgotICBQYXRjaCBieSBIaXJva2F6dSBZYW1hbW90by4KLQotLSBJc3N1ZSAjMTA1MTI6IFByb3Blcmx5IGNsb3NlIHNvY2tldHMgdW5kZXIgdGVzdC50ZXN0X2NnaS4KLQotLSBJc3N1ZSAjMTA5OTI6IE1ha2UgdGVzdHMgcGFzcyB1bmRlciBjb3ZlcmFnZS4KLQotLSBJc3N1ZSAjMTA4MjY6IFByZXZlbnQgc3BvcmFkaWMgZmFpbHVyZSBpbiB0ZXN0X3N1YnByb2Nlc3Mgb24gU29sYXJpcyBkdWUKLSAgdG8gb3BlbiBkb29yIGZpbGVzLgotCi0tIElzc3VlICMxMDk5MDogUHJldmVudCB0ZXN0cyBmcm9tIGNsb2JiZXJpbmcgYSBzZXQgdHJhY2UgZnVuY3Rpb24uCi0KLUMtQVBJCi0tLS0tLQotCi0tIElzc3VlICMxMzQ1MjogUHlVbmljb2RlX0VuY29kZURlY2ltYWwoKSBkb2Vzbid0IHN1cHBvcnQgZXJyb3IgaGFuZGxlcnMKLSAgZGlmZmVyZW50IHRoYW4gInN0cmljdCIgYW55bW9yZS4gVGhlIGNhbGxlciB3YXMgdW5hYmxlIHRvIGNvbXB1dGUgdGhlCi0gIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXI6IGl0IGRlcGVuZHMgb24gdGhlIGVycm9yIGhhbmRsZXIuCi0KLS0gSXNzdWUgIzEzNTYwOiBBZGQgUHlVbmljb2RlX0RlY29kZUxvY2FsZSgpLCBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlQW5kU2l6ZSgpCi0gIGFuZCBQeVVuaWNvZGVfRW5jb2RlTG9jYWxlKCkgZnVuY3Rpb25zIHRvIHRoZSBDIEFQSSB0byBkZWNvZGUvZW5jb2RlIGZyb20vdG8KLSAgdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLgotCi0tIElzc3VlICMxMDgzMTogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBzdXBwb3J0cyAlbGksICVsbGkgYW5kICV6aSBmb3JtYXRzLgotCi0tIElzc3VlICMxMTI0NjogRml4IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlViIpIHRvIGRlY29kZSB0aGUgYnl0ZSBzdHJpbmcgZnJvbQotICBVVEYtOCAod2l0aCByZXBsYWNlIGVycm9yIGhhbmRsZXIpIGluc3RlYWQgb2YgSVNPLTg4NTktMSAoaW4gc3RyaWN0IG1vZGUpLgotICBQYXRjaCB3cml0dGVuIGJ5IFJheSBBbGxlbi4KLQotLSBJc3N1ZSAjMTA4MzA6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoIiVjIikgZm9yIG5vbi1CTVAgY2hhcmFjdGVycyBvbgotICBuYXJyb3cgYnVpbGQuCi0KLS0gQWRkIFB5T2JqZWN0X0dlbmVyaWNHZXREaWN0IGFuZCBQeU9iamVjdF9HZW5lcmlTZXREaWN0LiBUaGV5IGFyZSBnZW5lcmljCi0gIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGdldHRlciBhbmQgc2V0dGVyIG9mIGEgYGBfX2RpY3RfX2BgIGRlc2NyaXB0b3Igb2YgQwotICB0eXBlcy4KLQotLSBJc3N1ZSAjMTM3Mjc6IEFkZCAzIG1hY3JvcyB0byBhY2Nlc3MgUHlEYXRlVGltZV9EZWx0YSBtZW1iZXJzOgotICBQeURhdGVUaW1lX0RFTFRBX0dFVF9EQVlTLCBQeURhdGVUaW1lX0RFTFRBX0dFVF9TRUNPTkRTLAotICBQeURhdGVUaW1lX0RFTFRBX0dFVF9NSUNST1NFQ09ORFMuCi0KLS0gSXNzdWUgIzEwNTQyOiBBZGQgNCBtYWNyb3MgdG8gd29yayB3aXRoIHN1cnJvZ2F0ZXM6IFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFLAotICBQeV9VTklDT0RFX0lTX0hJR0hfU1VSUk9HQVRFLCBQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUsCi0gIFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTLgotCi0tIElzc3VlICMxMjcyNDogQWRkIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRCBtYWNybyBmb3IgcmV0dXJuaW5nIE5vdEltcGxlbWVudGVkLgotCi0tIFBZX1BBVENITEVWRUxfUkVWSVNJT04gaGFzIGJlZW4gcmVtb3ZlZCwgc2luY2UgaXQncyBtZWFuaW5nbGVzcyB3aXRoCi0gIE1lcmN1cmlhbC4KLQotLSBJc3N1ZSAjMTIxNzM6IFRoZSBmaXJzdCBhcmd1bWVudCBvZiBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbCBpcyBub3cgYGNvbnN0Ci0gIGNoYXIgKmAgaW5zdGVhZCBvZiBgY2hhciAqYC4KLQotLSBJc3N1ZSAjMTIzODA6IFB5QXJnX1BhcnNlVHVwbGUgbm93IGFjY2VwdHMgYSBieXRlYXJyYXkgZm9yIHRoZSAnYycgZm9ybWF0LgotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzIzMDA2OiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBpbmRleGluZyBvZiBkaWN0Ll9fbWlzc2luZ19fLgotICBBZGQgYW4gZW50cnkgaW4gdGhlIGxhbmd1YWdlIGRhdGFtb2RlbCBzcGVjaWFsIG1ldGhvZHMgc2VjdGlvbi4KLSAgUmV2aXNlIGFuZCBpbmRleCBpdHMgZGlzY3Vzc2lvbiBpbiB0aGUgc3RkdHlwZXMgbWFwcGluZy9kaWN0IHNlY3Rpb24uCi0KLS0gSXNzdWUgIzEzOTg5OiBEb2N1bWVudCB0aGF0IEd6aXBGaWxlIGRvZXMgbm90IHN1cHBvcnQgdGV4dCBtb2RlLCBhbmQgZ2l2ZSBhCi0gIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIHdoZW4gb3BlbmVkIHdpdGggYW4gaW52YWxpZCBtb2RlIHN0cmluZy4KLQotLSBJc3N1ZSAjMTM5MjE6IFVuZG9jdW1lbnQgYW5kIGNsZWFuIHVwIHNxbGl0ZTMuT3B0aW1pemVkVW5pY29kZSwKLSAgd2hpY2ggaXMgb2Jzb2xldGUgaW4gUHl0aG9uIDMueC4gSXQncyBub3cgYWxpYXNlZCB0byBzdHIgZm9yCi0gIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCi0tIElzc3VlICMxMjEwMjogRG9jdW1lbnQgdGhhdCBidWZmZXJlZCBmaWxlcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIGJlaW5nIHVzZWQKLSAgd2l0aCBtbWFwLiBQYXRjaCBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgotCi0tIElzc3VlICM4OTgyOiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYXJncGFyc2UgTmFtZXNwYWNlIG9iamVjdC4KLQotLSBJc3N1ZSAjOTM0MzogRG9jdW1lbnQgdGhhdCBhcmdwYXJzZSBwYXJlbnQgcGFyc2VycyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlCi0gIHRoZWlyIGNoaWxkcmVuLgotCi0tIElzc3VlICMxMzQ5ODogQ2xhcmlmeSBkb2NzIG9mIG9zLm1ha2VkaXJzKCkncyBleGlzdF9vayBhcmd1bWVudC4gIERvbmUgd2l0aAotICBncmVhdCBuYXRpdmUtc3BlYWtlciBoZWxwIGZyb20gUi4gRGF2aWQgTXVycmF5LgotCi0tIElzc3VlcyAjMTM0OTEgYW5kICMxMzk5NTogRml4IG1hbnkgZXJyb3JzIGluIHNxbGl0ZTMgZG9jdW1lbnRhdGlvbi4KLSAgSW5pdGlhbCBwYXRjaCBmb3IgIzEzNDkxIGJ5IEpvaGFubmVzIFZvZ2VsLgotCi0tIElzc3VlICMxMzQwMjogRG9jdW1lbnQgYWJzb2x1dGVuZXNzIG9mIHN5cy5leGVjdXRhYmxlLgotCi0tIElzc3VlICMxMzg4MzogUFlUSE9OQ0FTRU9LIGFsc28gd29ya3Mgb24gT1MgWC4KLQotLSBJc3N1ZSAjOTAyMTogQWRkIGFuIGludHJvZHVjdGlvbiB0byB0aGUgY29weSBtb2R1bGUgZG9jdW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjNjAwNTogRXhhbXBsZXMgaW4gdGhlIHNvY2tldCBsaWJyYXJ5IGRvY3VtZW50YXRpb24gdXNlIHNlbmRhbGwsIHdoZXJlCi0gIHJlbGV2YW50LCBpbnN0ZWFkIHNlbmQgbWV0aG9kLgotCi0tIElzc3VlICMxMjc5ODogVXBkYXRlZCB0aGUgbWltZXR5cGVzIGRvY3VtZW50YXRpb24uCi0KLS0gSXNzdWUgIzEyOTQ5OiBEb2N1bWVudCB0aGUga3dvbmx5YXJnY291bnQgYXJndW1lbnQgZm9yIHRoZSBQeUNvZGVfTmV3Ci0gIEMgQVBJIGZ1bmN0aW9uLgotCi0tIElzc3VlICMxMzUxMzogRml4IGlvLklPQmFzZSBkb2N1bWVudGF0aW9uIHRvIGNvcnJlY3RseSBsaW5rIHRvIHRoZQotICBpby5JT0Jhc2UucmVhZGxpbmUgbWV0aG9kIGluc3RlYWQgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTMyMzc6IFJlb3JnYW5pc2Ugc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uIHRvIGVtcGhhc2lzZSBjb252ZW5pZW5jZQotICBmdW5jdGlvbnMgYW5kIHRoZSBtb3N0IGNvbW1vbmx5IG5lZWRlZCBhcmd1bWVudHMgdG8gUG9wZW4uCi0KLS0gSXNzdWUgIzEzMTQxOiBEZW1vbnN0cmF0ZSByZWNvbW1lbmRlZCBzdHlsZSBmb3Igc29ja2V0c2VydmVyIGV4YW1wbGVzLgotCi0tIElzc3VlICMxMTgxODogRml4IHRlbXBmaWxlIGV4YW1wbGVzIGZvciBQeXRob24gMy4KLQotCiAqKihGb3IgaW5mb3JtYXRpb24gYWJvdXQgb2xkZXIgdmVyc2lvbnMsIGNvbnN1bHQgdGhlIEhJU1RPUlkgZmlsZS4pKioKZGlmZiAtLWdpdCBhL01pc2MvUG9ydGluZyBiL01pc2MvUG9ydGluZwppbmRleCA1MWY3M2U2Li5jNDNiMTEyIDEwMDY0NAotLS0gYS9NaXNjL1BvcnRpbmcKKysrIGIvTWlzYy9Qb3J0aW5nCkBAIC0xLDQxICsxIEBACi1RLiBJIHdhbnQgdG8gcG9ydCBQeXRob24gdG8gYSBuZXcgcGxhdGZvcm0uICBIb3cgZG8gSSBiZWdpbj8KLQotQS4gSSBndWVzcyB0aGUgdHdvIHRoaW5ncyB0byBzdGFydCB3aXRoIGlzIHRvIGZhbWlsaWFyaXplIHlvdXJzZWxmCi13aXRoIGFyZSB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybSBhbmQgdGhlCi1nZW5lcmljIGJ1aWxkIHByb2Nlc3MgZm9yIFB5dGhvbi4gIE1ha2Ugc3VyZSB5b3UgY2FuIGNvbXBpbGUgYW5kIHJ1biBhCi1zaW1wbGUgaGVsbG8td29ybGQgcHJvZ3JhbSBvbiB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gIE1ha2Ugc3VyZSB5b3UgY2FuCi1jb21waWxlIGFuZCBydW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlciBvbiBhIHBsYXRmb3JtIHRvIHdoaWNoIGl0IGhhcwotYWxyZWFkeSBiZWVuIHBvcnRlZCAocHJlZmVyYWJseSBVbml4LCBidXQgTWFjIG9yIFdpbmRvd3Mgd2lsbCBkbywKLXRvbykuCi0KLUkgYWxzbyB3b3VsZCBuZXZlciBzdGFydCBzb21ldGhpbmcgbGlrZSB0aGlzIHdpdGhvdXQgYXQgbGVhc3QKLW1lZGl1bS1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHlvdXIgdGFyZ2V0IHBsYXRmb3JtIChpLmUuIGhvdyBpdCBpcwotZ2VuZXJhbGx5IHVzZWQsIGhvdyB0byB3cml0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBzIGV0Yy4pIGFuZCBQeXRob24KLShvciBlbHNlIHlvdSdsbCBuZXZlciBrbm93IGhvdyB0byB0ZXN0IHRoZSByZXN1bHRzKS4KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIFB5dGhvbiwgaW4gcGFydGljdWxhciB0aGUgTWFrZWZpbGVzIGluIHRoZQotc291cmNlIGRpc3RyaWJ1dGlvbiwgd2lsbCBnaXZlIHlvdSBhIGhpbnQgb24gd2hpY2ggZmlsZXMgdG8gY29tcGlsZQotZm9yIFB5dGhvbi4gIE5vdCBhbGwgc291cmNlIGZpbGVzIGFyZSByZWxldmFudCAtLSBzb21lIGFyZSBwbGF0Zm9ybQotc3BlY2lmaWMsIG90aGVycyBhcmUgb25seSB1c2VkIGluIGVtZXJnZW5jaWVzIChlLmcuIGdldG9wdC5jKS4gIFRoZQotTWFrZWZpbGVzIHRlbGwgdGhlIHN0b3J5LgotCi1Zb3UnbGwgYWxzbyBuZWVkIGEgcHljb25maWcuaCBmaWxlIHRhaWxvcmVkIGZvciB5b3VyIHBsYXRmb3JtLiAgWW91IGNhbgotc3RhcnQgd2l0aCBweWNvbmZpZy5oLmluLCByZWFkIHRoZSBjb21tZW50cyBhbmQgdHVybiBvbiBkZWZpbml0aW9ucyB0aGF0Ci1hcHBseSB0byB5b3VyIHBsYXRmb3JtLgotCi1BbmQgeW91J2xsIG5lZWQgYSBjb25maWcuYyBmaWxlLCB3aGljaCBsaXN0cyB0aGUgYnVpbHQtaW4gbW9kdWxlcyB5b3UKLXN1cHBvcnQuICBTdGFydCB3aXRoIE1vZHVsZXMvY29uZmlnLmMuaW4uCi0KLUZpbmFsbHksIHlvdSdsbCBydW4gaW50byBzb21lIHRoaW5ncyB0aGF0IGFyZW4ndCBzdXBwb3J0ZWQgb24geW91cgotdGFyZ2V0IHBsYXRmb3JtLiAgRm9yZ2V0IGFib3V0IHRoZSBwb3NpeCBtb2R1bGUgZm9yIG5vdyAtLSBzaW1wbHkgdGFrZSAKLWl0IG91dCBvZiB0aGUgY29uZmlnLmMgZmlsZS4KLQotQmFuZyBvbiBpdCB1bnRpbCB5b3UgZ2V0IGEgPj4+IHByb21wdC4gIChZb3UgbWF5IGhhdmUgdG8gZGlzYWJsZSB0aGUKLWltcG9ydGluZyBvZiAic2l0ZS5weSIgYnkgcGFzc2luZyB0aGUgLVMgb3B0aW9uLikKLQotVGhlbiBiYW5nIG9uIGl0IHVudGlsIGl0IGV4ZWN1dGVzIHZlcnkgc2ltcGxlIFB5dGhvbiBzdGF0ZW1lbnRzLgotCi1Ob3cgYmFuZyBvbiBpdCBzb21lIG1vcmUuICBBdCBzb21lIHBvaW50IHlvdSdsbCB3YW50IHRvIHVzZSB0aGUgb3MKLW1vZHVsZTsgdGhpcyBpcyB0aGUgdGltZSB0byBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IHRvIGRvIHdpdGggdGhlCi1wb3NpeCBtb2R1bGUuICBJdCdzIG9rYXkgdG8gc2ltcGx5ICNpZmRlZiBvdXQgdGhvc2UgZnVuY3Rpb25zIHRoYXQKLWNhdXNlIHByb2JsZW1zOyB0aGUgcmVtYWluaW5nIG9uZXMgd2lsbCBiZSBxdWl0ZSB1c2VmdWwuCitUaGlzIGRvY3VtZW50IGlzIG1vdmVkIHRvIGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL2ZhcS5odG1sI2hvdy1kby1pLXBvcnQtcHl0aG9uLXRvLWEtbmV3LXBsYXRmb3JtCmRpZmYgLS1naXQgYS9NaXNjL2NvdmVyaXR5X21vZGVsLmMgYi9NaXNjL2NvdmVyaXR5X21vZGVsLmMKaW5kZXggNTdmM2FlYi4uNDkzZTdjMSAxMDA2NDQKLS0tIGEvTWlzYy9jb3Zlcml0eV9tb2RlbC5jCisrKyBiL01pc2MvY292ZXJpdHlfbW9kZWwuYwpAQCAtODUsNyArODUsNyBAQAogfQogCiAvKiBQeXRob24vZmlsZXV0aWxzLmMgKi8KLXdjaGFyX3QgKl9QeV9jaGFyMndjaGFyKGNvbnN0IGNoYXIqIGFyZywgc2l6ZV90ICpzaXplKQord2NoYXJfdCAqUHlfRGVjb2RlTG9jYWxlKGNvbnN0IGNoYXIqIGFyZywgc2l6ZV90ICpzaXplKQogewogICAgd2NoYXJfdCAqdzsKICAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oYXJnKTsKQEAgLTEyMiw3ICsxMjIsOCBAQAogCiAvKiBDb3Zlcml0eSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhhdCBmZG9wZW5kaXIoKSBtYXkgdGFrZSBvd25lcnNoaXAgb2YgZmQuICovCiAKLURJUiAqZmRvcGVuZGlyKGludCBmZCkgeworRElSICpmZG9wZW5kaXIoaW50IGZkKQorewogICAgIERJUiAqZDsKICAgICBpZiAoZCkgewogICAgICAgICBfX2NvdmVyaXR5X2Nsb3NlX18oZmQpOwpAQCAtMTMwLDMgKzEzMSw1OCBAQAogICAgIHJldHVybiBkOwogfQogCisvKiBNb2R1bGVzL19kYXRldGltZS5jCisgKgorICogQ292ZXJpdHkgdGhpbmtzIHRoYXQgdGhlIGlucHV0IHZhbHVlcyBmb3IgdGhlc2UgZnVuY3Rpb24gY29tZSBmcm9tIGEKKyAqIHRhaW50ZWQgc291cmNlIFB5RGF0ZVRpbWVfREFURV9HRVRfKiBtYWNyb3MgdXNlIGJpdCBzaGlmdGluZy4KKyAqLworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWxkX3N0cnVjdF90aW1lKGludCB5LCBpbnQgbSwgaW50IGQsIGludCBoaCwgaW50IG1tLCBpbnQgc3MsIGludCBkc3RmbGFnKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgCisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXyh5KTsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zYW5pdGl6ZV9fKG0pOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3Nhbml0aXplX18oZCk7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXyhoaCk7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXyhtbSk7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXyhzcyk7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXyhkc3RmbGFnKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK3ltZF90b19vcmQoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkKK3sKKyAgICBpbnQgb3JkID0gMDsKKworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3Nhbml0aXplX18oeWVhcik7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXyhtb250aCk7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXyhkYXkpOworCisgICAgcmV0dXJuIG9yZDsKK30KKworc3RhdGljIGludAorbm9ybWFsaXplX2RhdGUoaW50ICp5ZWFyLCBpbnQgKm1vbnRoLCBpbnQgKmRheSkKK3sKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zYW5pdGl6ZV9fKCp5ZWFyKTsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zYW5pdGl6ZV9fKCptb250aCk7CisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXygqZGF5KTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3ZWVrZGF5KGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXkpCit7CisgICAgaW50IHcgPSAwOworCisgICAgX19jb3Zlcml0eV90YWludGVkX2RhdGFfc2FuaXRpemVfXyh5ZWFyKTsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zYW5pdGl6ZV9fKG1vbnRoKTsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zYW5pdGl6ZV9fKGRheSk7CisKKyAgICByZXR1cm4gdzsKK30KKwpkaWZmIC0tZ2l0IGEvTWlzYy9nZGJpbml0IGIvTWlzYy9nZGJpbml0CmluZGV4IDk0ODRiNTEuLjNiNmZlNTAgMTAwNjQ0Ci0tLSBhL01pc2MvZ2RiaW5pdAorKysgYi9NaXNjL2dkYmluaXQKQEAgLTE1MCwxMCArMTUwLDEwIEBACiAKICMgZ2VuZXJhbGx5IHVzZWZ1bCBtYWNybyB0byBwcmludCBhIFVuaWNvZGUgc3RyaW5nCiBkZWYgcHUKLSAgc2V0ICR1bmkgPSAkYXJnMCAKKyAgc2V0ICR1bmkgPSAkYXJnMAogICBzZXQgJGkgPSAwCiAgIHdoaWxlICgqJHVuaSAmJiAkaSsrPDEwMCkKLSAgICBpZiAoKiR1bmkgPCAweDgwKSAKKyAgICBpZiAoKiR1bmkgPCAweDgwKQogICAgICAgcHJpbnQgKihjaGFyKikkdW5pKysKICAgICBlbHNlCiAgICAgICBwcmludCAveCAqKHNob3J0KikkdW5pKysKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLm1hbiBiL01pc2MvcHl0aG9uLm1hbgppbmRleCBhZjI2YjdjLi4zZDUzMGQ3IDEwMDY0NAotLS0gYS9NaXNjL3B5dGhvbi5tYW4KKysrIGIvTWlzYy9weXRob24ubWFuCkBAIC0xMDMsMTAgKzEwMywxMCBAQAogYXBwbGljYXRpb25zLgogU2VlIHRoZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uIGZvciBoaW50cy4KIC5QUAotRG9jdW1lbnRhdGlvbiBmb3IgaW5zdGFsbGVkIFB5dGhvbiBtb2R1bGVzIGFuZCBwYWNrYWdlcyBjYW4gYmUgCi12aWV3ZWQgYnkgcnVubmluZyB0aGUgCitEb2N1bWVudGF0aW9uIGZvciBpbnN0YWxsZWQgUHl0aG9uIG1vZHVsZXMgYW5kIHBhY2thZ2VzIGNhbiBiZQordmlld2VkIGJ5IHJ1bm5pbmcgdGhlCiAuQiBweWRvYwotcHJvZ3JhbS4gIAorcHJvZ3JhbS4KIC5TSCBDT01NQU5EIExJTkUgT1BUSU9OUwogLlRQCiAuQiBcLUIKQEAgLTE0MywyOSArMTQzLDI2IEBACiAuVFAKIC5CIFwtSQogUnVuIFB5dGhvbiBpbiBpc29sYXRlZCBtb2RlLiBUaGlzIGFsc28gaW1wbGllcyBcZkJcLUVcZlAgYW5kIFxmQlwtc1xmUC4gSW4KLWlzb2xhdGVkIG1vZGUgc3lzLnBhdGggY29udGFpbnMgbmVpdGhlciB0aGUgc2NyaXB04oCZcyBkaXJlY3Rvcnkgbm9yIHRoZSB1c2Vy4oCZcworaXNvbGF0ZWQgbW9kZSBzeXMucGF0aCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHQncyBkaXJlY3Rvcnkgbm9yIHRoZSB1c2VyJ3MKIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LiBBbGwgUFlUSE9OKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGlnbm9yZWQsIHRvby4KIEZ1cnRoZXIgcmVzdHJpY3Rpb25zIG1heSBiZSBpbXBvc2VkIHRvIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBpbmplY3RpbmcKIG1hbGljaW91cyBjb2RlLgogLlRQCiAuQkkgIlwtbSAiIG1vZHVsZS1uYW1lCi1TZWFyY2hlcyAKLS5JIHN5cy5wYXRoIAotZm9yIHRoZSBuYW1lZCBtb2R1bGUgYW5kIHJ1bnMgdGhlIGNvcnJlc3BvbmRpbmcgCi0uSSAucHkgCitTZWFyY2hlcworLkkgc3lzLnBhdGgKK2ZvciB0aGUgbmFtZWQgbW9kdWxlIGFuZCBydW5zIHRoZSBjb3JyZXNwb25kaW5nCisuSSAucHkKIGZpbGUgYXMgYSBzY3JpcHQuCiAuVFAKIC5CIFwtTwotVHVybiBvbiBiYXNpYyBvcHRpbWl6YXRpb25zLiAgVGhpcyBjaGFuZ2VzIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gZm9yCi1jb21waWxlZCAoYnl0ZWNvZGUpIGZpbGVzIGZyb20KLS5JIC5weWMKLXRvIFxmSS5weW9cZlAuICBHaXZlbiB0d2ljZSwgY2F1c2VzIGRvY3N0cmluZ3MgdG8gYmUgZGlzY2FyZGVkLgorVHVybiBvbiBiYXNpYyBvcHRpbWl6YXRpb25zLiAgR2l2ZW4gdHdpY2UsIGNhdXNlcyBkb2NzdHJpbmdzIHRvIGJlIGRpc2NhcmRlZC4KIC5UUAogLkIgXC1PTwogRGlzY2FyZCBkb2NzdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSBcZkItT1xmUCBvcHRpbWl6YXRpb25zLgogLlRQCiAuQiBcLXEKLURvIG5vdCBwcmludCB0aGUgdmVyc2lvbiBhbmQgY29weXJpZ2h0IG1lc3NhZ2VzLiBUaGVzZSBtZXNzYWdlcyBhcmUgCitEbyBub3QgcHJpbnQgdGhlIHZlcnNpb24gYW5kIGNvcHlyaWdodCBtZXNzYWdlcy4gVGhlc2UgbWVzc2FnZXMgYXJlCiBhbHNvIHN1cHByZXNzZWQgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuCiAuVFAKIC5CIFwtcwpAQCAtMTkyLDcgKzE4OSw3IEBACiAuQiBcLXYKIFByaW50IGEgbWVzc2FnZSBlYWNoIHRpbWUgYSBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQsIHNob3dpbmcgdGhlIHBsYWNlCiAoZmlsZW5hbWUgb3IgYnVpbHQtaW4gbW9kdWxlKSBmcm9tIHdoaWNoIGl0IGlzIGxvYWRlZC4gIFdoZW4gZ2l2ZW4KLXR3aWNlLCBwcmludCBhIG1lc3NhZ2UgZm9yIGVhY2ggZmlsZSB0aGF0IGlzIGNoZWNrZWQgZm9yIHdoZW4gCit0d2ljZSwgcHJpbnQgYSBtZXNzYWdlIGZvciBlYWNoIGZpbGUgdGhhdCBpcyBjaGVja2VkIGZvciB3aGVuCiBzZWFyY2hpbmcgZm9yIGEgbW9kdWxlLiAgQWxzbyBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBtb2R1bGUgY2xlYW51cAogYXQgZXhpdC4KIC5UUApAQCAtNDE3LDcgKzQxNCw3IEBACiAuSVAgUFlUSE9OVkVSQk9TRQogSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwogdGhlIFxmQlwtdlxmUCBvcHRpb24uIElmIHNldCB0byBhbiBpbnRlZ2VyLCBpdCBpcyBlcXVpdmFsZW50IHRvCi1zcGVjaWZ5aW5nIFxmQlwtdlxmUCBtdWx0aXBsZSB0aW1lcy4gCitzcGVjaWZ5aW5nIFxmQlwtdlxmUCBtdWx0aXBsZSB0aW1lcy4KIC5JUCBQWVRIT05XQVJOSU5HUwogSWYgdGhpcyBpcyBzZXQgdG8gYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8KIHNwZWNpZnlpbmcgdGhlIFxmQlwtV1xmUCBvcHRpb24gZm9yIGVhY2ggc2VwYXJhdGUgdmFsdWUuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1JFQURNRSBiL01vZHVsZXMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNzlmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL1JFQURNRQpAQCAtMCwwICsxLDIgQEAKK1NvdXJjZSBmaWxlcyBmb3Igc3RhbmRhcmQgbGlicmFyeSBleHRlbnNpb24gbW9kdWxlcywKK2FuZCBmb3JtZXIgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBhcmUgbm93IGJ1aWx0aW4gbW9kdWxlcy4KZGlmZiAtLWdpdCBhL01vZHVsZXMvU2V0dXAuY29uZmlnLmluIGIvTW9kdWxlcy9TZXR1cC5jb25maWcuaW4KaW5kZXggNWFjMjQwNC4uYWRhYzAzMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9TZXR1cC5jb25maWcuaW4KKysrIGIvTW9kdWxlcy9TZXR1cC5jb25maWcuaW4KQEAgLTcsNyArNyw3IEBACiBAVVNFX1RIUkVBRF9NT0RVTEVAX3RocmVhZCBfdGhyZWFkbW9kdWxlLmMKIAogIyBUaGUgc2lnbmFsIG1vZHVsZQotQFVTRV9TSUdOQUxfTU9EVUxFQHNpZ25hbCBzaWduYWxtb2R1bGUuYworQFVTRV9TSUdOQUxfTU9EVUxFQF9zaWduYWwgc2lnbmFsbW9kdWxlLmMKIAogIyBUaGUgcmVzdCBvZiB0aGUgbW9kdWxlcyBwcmV2aW91c2x5IGxpc3RlZCBpbiB0aGlzIGZpbGUgYXJlIGJ1aWx0CiAjIGJ5IHRoZSBzZXR1cC5weSBzY3JpcHQgaW4gUHl0aG9uIDIuMSBhbmQgbGF0ZXIuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL1NldHVwLmRpc3QgYi9Nb2R1bGVzL1NldHVwLmRpc3QKaW5kZXggYjYwYjU5NC4uMDZiYTZhZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9TZXR1cC5kaXN0CisrKyBiL01vZHVsZXMvU2V0dXAuZGlzdApAQCAtMTE4LDYgKzExOCw3IEBACiBpdGVydG9vbHMgaXRlcnRvb2xzbW9kdWxlLmMgICAgIyBGdW5jdGlvbnMgY3JlYXRpbmcgaXRlcmF0b3JzIGZvciBlZmZpY2llbnQgbG9vcGluZwogYXRleGl0IGF0ZXhpdG1vZHVsZS5jICAgICAgIyBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgcnVuIGF0IGludGVycHJldGVyLXNodXRkb3duCiBfc3RhdCBfc3RhdC5jCQkJIyBzdGF0LmggaW50ZXJmYWNlCit0aW1lIHRpbWVtb2R1bGUuYwkjIC1sbSAjIHRpbWUgb3BlcmF0aW9ucyBhbmQgdmFyaWFibGVzCiAKICMgYWNjZXNzIHRvIElTTyBDIGxvY2FsZSBzdXBwb3J0CiBfbG9jYWxlIF9sb2NhbGVtb2R1bGUuYyAgIyAtbGludGwKQEAgLTE3MSw3ICsxNzIsNiBAQAogI2NtYXRoIGNtYXRobW9kdWxlLmMgX21hdGguYyAjIC1sbSAjIGNvbXBsZXggbWF0aCBsaWJyYXJ5IGZ1bmN0aW9ucwogI21hdGggbWF0aG1vZHVsZS5jIF9tYXRoLmMgIyAtbG0gIyBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zLCBlLmcuIHNpbigpCiAjX3N0cnVjdCBfc3RydWN0LmMJIyBiaW5hcnkgc3RydWN0dXJlIHBhY2tpbmcvdW5wYWNraW5nCi0jdGltZSB0aW1lbW9kdWxlLmMgIyAtbG0gIyB0aW1lIG9wZXJhdGlvbnMgYW5kIHZhcmlhYmxlcwogI193ZWFrcmVmIF93ZWFrcmVmLmMJIyBiYXNpYyB3ZWFrIHJlZmVyZW5jZSBzdXBwb3J0CiAjX3Rlc3RjYXBpIF90ZXN0Y2FwaW1vZHVsZS5jICAgICMgUHl0aG9uIEMgQVBJIHRlc3QgbW9kdWxlCiAjX3JhbmRvbSBfcmFuZG9tbW9kdWxlLmMJIyBSYW5kb20gbnVtYmVyIGdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYnoybW9kdWxlLmMgYi9Nb2R1bGVzL19iejJtb2R1bGUuYwppbmRleCBlNjUyZjRkLi5lM2UwZWIxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19iejJtb2R1bGUuYworKysgYi9Nb2R1bGVzL19iejJtb2R1bGUuYwpAQCAtNTEsNiArNTEsMTQgQEAKICAgICBiel9zdHJlYW0gYnpzOwogICAgIGNoYXIgZW9mOyAgICAgICAgICAgLyogVF9CT09MIGV4cGVjdHMgYSBjaGFyICovCiAgICAgUHlPYmplY3QgKnVudXNlZF9kYXRhOworICAgIGNoYXIgbmVlZHNfaW5wdXQ7CisgICAgY2hhciAqaW5wdXRfYnVmZmVyOworICAgIHNpemVfdCBpbnB1dF9idWZmZXJfc2l6ZTsKKworICAgIC8qIGJ6cy0+YXZhaWxfaW4gaXMgb25seSAzMiBiaXQsIHNvIHdlIHN0b3JlIHRoZSB0cnVlIGxlbmd0aAorICAgICAgIHNlcGFyYXRlbHkuIENvbnZlcnNpb24gYW5kIGxvb3BpbmcgaXMgZW5jYXBzdWxhdGVkIGluCisgICAgICAgZGVjb21wcmVzc19idWYoKSAqLworICAgIHNpemVfdCBienNfYXZhaWxfaW5fcmVhbDsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrOwogI2VuZGlmCkBAIC0xMTEsMTkgKzExOSwyMyBAQAogfQogCiAjaWYgQlVGU0laIDwgODE5MgotI2RlZmluZSBTTUFMTENIVU5LIDgxOTIKKyNkZWZpbmUgSU5JVElBTF9CVUZGRVJfU0laRSA4MTkyCiAjZWxzZQotI2RlZmluZSBTTUFMTENIVU5LIEJVRlNJWgorI2RlZmluZSBJTklUSUFMX0JVRkZFUl9TSVpFIEJVRlNJWgogI2VuZGlmCiAKIHN0YXRpYyBpbnQKLWdyb3dfYnVmZmVyKFB5T2JqZWN0ICoqYnVmKQorZ3Jvd19idWZmZXIoUHlPYmplY3QgKipidWYsIFB5X3NzaXplX3QgbWF4X2xlbmd0aCkKIHsKICAgICAvKiBFeHBhbmQgdGhlIGJ1ZmZlciBieSBhbiBhbW91bnQgcHJvcG9ydGlvbmFsIHRvIHRoZSBjdXJyZW50IHNpemUsCiAgICAgICAgZ2l2aW5nIHVzIGFtb3J0aXplZCBsaW5lYXItdGltZSBiZWhhdmlvci4gVXNlIGEgbGVzcy10aGFuLWRvdWJsZQogICAgICAgIGdyb3d0aCBmYWN0b3IgdG8gYXZvaWQgZXhjZXNzaXZlIGFsbG9jYXRpb24uICovCiAgICAgc2l6ZV90IHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKCpidWYpOwogICAgIHNpemVfdCBuZXdfc2l6ZSA9IHNpemUgKyAoc2l6ZSA+PiAzKSArIDY7CisKKyAgICBpZiAobWF4X2xlbmd0aCA+IDAgJiYgbmV3X3NpemUgPiAoc2l6ZV90KSBtYXhfbGVuZ3RoKQorICAgICAgICBuZXdfc2l6ZSA9IChzaXplX3QpIG1heF9sZW5ndGg7CisKICAgICBpZiAobmV3X3NpemUgPiBzaXplKSB7CiAgICAgICAgIHJldHVybiBfUHlCeXRlc19SZXNpemUoYnVmLCBuZXdfc2l6ZSk7CiAgICAgfSBlbHNlIHsgIC8qIG92ZXJmbG93ICovCkBAIC0xNDIsMTQgKzE1NCwxNCBAQAogICAgIHNpemVfdCBkYXRhX3NpemUgPSAwOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKLSAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIFNNQUxMQ0hVTkspOworICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgSU5JVElBTF9CVUZGRVJfU0laRSk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGMtPmJ6cy5uZXh0X2luID0gZGF0YTsKICAgICBjLT5ienMuYXZhaWxfaW4gPSAwOwogICAgIGMtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCk7Ci0gICAgYy0+YnpzLmF2YWlsX291dCA9IFNNQUxMQ0hVTks7CisgICAgYy0+YnpzLmF2YWlsX291dCA9IElOSVRJQUxfQlVGRkVSX1NJWkU7CiAgICAgZm9yICg7OykgewogICAgICAgICBjaGFyICp0aGlzX291dDsKICAgICAgICAgaW50IGJ6ZXJyb3I7CkBAIC0xNjgsNyArMTgwLDcgQEAKICAgICAgICAgaWYgKGMtPmJ6cy5hdmFpbF9vdXQgPT0gMCkgewogICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlcl9sZWZ0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIC0gZGF0YV9zaXplOwogICAgICAgICAgICAgaWYgKGJ1ZmZlcl9sZWZ0ID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoZ3Jvd19idWZmZXIoJnJlc3VsdCkgPCAwKQorICAgICAgICAgICAgICAgIGlmIChncm93X2J1ZmZlcigmcmVzdWx0LCAtMSkgPCAwKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIGMtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBkYXRhX3NpemU7CiAgICAgICAgICAgICAgICAgYnVmZmVyX2xlZnQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CkBAIC0xODgsNyArMjAwLDcgQEAKICAgICAgICAgaWYgKGFjdGlvbiA9PSBCWl9GSU5JU0ggJiYgYnplcnJvciA9PSBCWl9TVFJFQU1fRU5EKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlmIChkYXRhX3NpemUgIT0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpKQorICAgIGlmIChkYXRhX3NpemUgIT0gKHNpemVfdClQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkpCiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgZGF0YV9zaXplKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xOTksMTIgKzIxMSwxMSBAQAogfQogCiAvKltjbGluaWMgaW5wdXRdCi1vdXRwdXQgcHJlc2V0IGZpbGUKIG1vZHVsZSBfYnoyCiBjbGFzcyBfYnoyLkJaMkNvbXByZXNzb3IgIkJaMkNvbXByZXNzb3IgKiIgIiZCWjJDb21wcmVzc29yX1R5cGUiCiBjbGFzcyBfYnoyLkJaMkRlY29tcHJlc3NvciAiQloyRGVjb21wcmVzc29yICoiICImQloyRGVjb21wcmVzc29yX1R5cGUiCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1lM2IxMzk5MjRmNWUxOGNjXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1kYzdkNzk5MmE3OWY5Y2I3XSovCiAKICNpbmNsdWRlICJjbGluaWMvX2J6Mm1vZHVsZS5jLmgiCiAKQEAgLTQwMiw2NCArNDEzLDE3NSBAQAogCiAvKiBCWjJEZWNvbXByZXNzb3IgY2xhc3MuICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1kZWNvbXByZXNzKEJaMkRlY29tcHJlc3NvciAqZCwgY2hhciAqZGF0YSwgc2l6ZV90IGxlbikKKy8qIERlY29tcHJlc3MgZGF0YSBvZiBsZW5ndGggZC0+YnpzX2F2YWlsX2luX3JlYWwgaW4gZC0+YnpzLm5leHRfaW4uICBUaGUgb3V0cHV0CisgICBidWZmZXIgaXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGFuZCByZXR1cm5lZC4gIEF0IG1vc3QgbWF4X2xlbmd0aCBieXRlcyBhcmUKKyAgIHJldHVybmVkLCBzbyBzb21lIG9mIHRoZSBpbnB1dCBtYXkgbm90IGJlIGNvbnN1bWVkLiBkLT5ienMubmV4dF9pbiBhbmQKKyAgIGQtPmJ6c19hdmFpbF9pbl9yZWFsIGFyZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNvbnN1bWVkIGlucHV0LiAqLworc3RhdGljIFB5T2JqZWN0KgorZGVjb21wcmVzc19idWYoQloyRGVjb21wcmVzc29yICpkLCBQeV9zc2l6ZV90IG1heF9sZW5ndGgpCiB7Ci0gICAgc2l6ZV90IGRhdGFfc2l6ZSA9IDA7CisgICAgLyogZGF0YV9zaXplIGlzIHN0cmljdGx5IHBvc2l0aXZlLCBidXQgYmVjYXVzZSB3ZSByZXBlYXRlZGx5IGhhdmUgdG8KKyAgICAgICBjb21wYXJlIGFnYWluc3QgbWF4X2xlbmd0aCBhbmQgUHlCeXRlc19HRVRfU0laRSB3ZSBkZWNsYXJlIGl0IGFzCisgICAgICAgc2lnbmVkICovCisgICAgUHlfc3NpemVfdCBkYXRhX3NpemUgPSAwOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgYnpfc3RyZWFtICpienMgPSAmZC0+YnpzOwogCi0gICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBTTUFMTENIVU5LKTsKKyAgICBpZiAobWF4X2xlbmd0aCA8IDAgfHwgbWF4X2xlbmd0aCA+PSBJTklUSUFMX0JVRkZFUl9TSVpFKQorICAgICAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIElOSVRJQUxfQlVGRkVSX1NJWkUpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBtYXhfbGVuZ3RoKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgZC0+YnpzLm5leHRfaW4gPSBkYXRhOwotICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCi0gICAgICAgRG8gZGVjb21wcmVzc2lvbiBpbiBjaHVua3Mgb2Ygbm8gbW9yZSB0aGFuIFVJTlRfTUFYIGJ5dGVzIGVhY2guICovCi0gICAgZC0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7Ci0gICAgbGVuIC09IGQtPmJ6cy5hdmFpbF9pbjsKLSAgICBkLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpOwotICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOworICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGJ6cy0+bmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpOwogICAgIGZvciAoOzspIHsKLSAgICAgICAgY2hhciAqdGhpc19vdXQ7Ci0gICAgICAgIGludCBiemVycm9yOworICAgICAgICBpbnQgYnpyZXQ7CisgICAgICAgIHNpemVfdCBhdmFpbDsKKworICAgICAgICAvKiBPbiBhIDY0LWJpdCBzeXN0ZW0sIGJ1ZmZlciBsZW5ndGggbWlnaHQgbm90IGZpdCBpbiBhdmFpbF9vdXQsIHNvIHdlCisgICAgICAgICAgIGRvIGRlY29tcHJlc3Npb24gaW4gY2h1bmtzIG9mIG5vIG1vcmUgdGhhbiBVSU5UX01BWCBieXRlcworICAgICAgICAgICBlYWNoLiBOb3RlIHRoYXQgdGhlIGV4cHJlc3Npb24gZm9yIGBhdmFpbGAgaXMgZ3VhcmFudGVlZCB0byBiZQorICAgICAgICAgICBwb3NpdGl2ZSwgc28gdGhlIGNhc3QgaXMgc2FmZS4gKi8KKyAgICAgICAgYXZhaWwgPSAoc2l6ZV90KSAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIC0gZGF0YV9zaXplKTsKKyAgICAgICAgYnpzLT5hdmFpbF9vdXQgPSAodW5zaWduZWQgaW50KVB5X01JTihhdmFpbCwgVUlOVF9NQVgpOworICAgICAgICBienMtPmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4oZC0+YnpzX2F2YWlsX2luX3JlYWwsIFVJTlRfTUFYKTsKKyAgICAgICAgZC0+YnpzX2F2YWlsX2luX3JlYWwgLT0gYnpzLT5hdmFpbF9pbjsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHRoaXNfb3V0ID0gZC0+YnpzLm5leHRfb3V0OwotICAgICAgICBiemVycm9yID0gQloyX2J6RGVjb21wcmVzcygmZC0+YnpzKTsKLSAgICAgICAgZGF0YV9zaXplICs9IGQtPmJ6cy5uZXh0X291dCAtIHRoaXNfb3V0OworICAgICAgICBienJldCA9IEJaMl9iekRlY29tcHJlc3MoYnpzKTsKKyAgICAgICAgZGF0YV9zaXplID0gYnpzLT5uZXh0X291dCAtIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCk7CisgICAgICAgIGQtPmJ6c19hdmFpbF9pbl9yZWFsICs9IGJ6cy0+YXZhaWxfaW47CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmIChjYXRjaF9iejJfZXJyb3IoYnplcnJvcikpCisgICAgICAgIGlmIChjYXRjaF9iejJfZXJyb3IoYnpyZXQpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKGJ6ZXJyb3IgPT0gQlpfU1RSRUFNX0VORCkgeworICAgICAgICBpZiAoYnpyZXQgPT0gQlpfU1RSRUFNX0VORCkgewogICAgICAgICAgICAgZC0+ZW9mID0gMTsKLSAgICAgICAgICAgIGxlbiArPSBkLT5ienMuYXZhaWxfaW47Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgeyAvKiBTYXZlIGxlZnRvdmVyIGlucHV0IHRvIHVudXNlZF9kYXRhICovCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIoZC0+dW51c2VkX2RhdGEpOwotICAgICAgICAgICAgICAgIGQtPnVudXNlZF9kYXRhID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShkLT5ienMubmV4dF9pbiwgbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoZC0+dW51c2VkX2RhdGEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkLT5ienMuYXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICB9IGVsc2UgaWYgKGQtPmJ6c19hdmFpbF9pbl9yZWFsID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGJ6cy0+YXZhaWxfb3V0ID09IDApIHsKKyAgICAgICAgICAgIGlmIChkYXRhX3NpemUgPT0gbWF4X2xlbmd0aCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwotICAgICAgICAgICAgbGVuIC09IGQtPmJ6cy5hdmFpbF9pbjsKLSAgICAgICAgfQotICAgICAgICBpZiAoZC0+YnpzLmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgICAgICBzaXplX3QgYnVmZmVyX2xlZnQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyX2xlZnQgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChncm93X2J1ZmZlcigmcmVzdWx0KSA8IDApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAgICAgZC0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGRhdGFfc2l6ZTsKLSAgICAgICAgICAgICAgICBidWZmZXJfbGVmdCA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSAtIGRhdGFfc2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSAodW5zaWduZWQgaW50KVB5X01JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOworICAgICAgICAgICAgaWYgKGRhdGFfc2l6ZSA9PSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgJiYKKyAgICAgICAgICAgICAgICBncm93X2J1ZmZlcigmcmVzdWx0LCBtYXhfbGVuZ3RoKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgYnpzLT5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBkYXRhX3NpemU7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGRhdGFfc2l6ZSAhPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkpCi0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgZGF0YV9zaXplKSA8IDApCisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgZGF0YV9zaXplKSA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKK2RlY29tcHJlc3MoQloyRGVjb21wcmVzc29yICpkLCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBQeV9zc2l6ZV90IG1heF9sZW5ndGgpCit7CisgICAgY2hhciBpbnB1dF9idWZmZXJfaW5fdXNlOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgYnpfc3RyZWFtICpienMgPSAmZC0+YnpzOworCisgICAgLyogUHJlcGVuZCB1bmNvbnN1bWVkIGlucHV0IGlmIG5lY2Vzc2FyeSAqLworICAgIGlmIChienMtPm5leHRfaW4gIT0gTlVMTCkgeworICAgICAgICBzaXplX3QgYXZhaWxfbm93LCBhdmFpbF90b3RhbDsKKworICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgd2UgY2FuIGFwcGVuZCB0byBpbnB1dCBidWZmZXIgKi8KKyAgICAgICAgYXZhaWxfbm93ID0gKGQtPmlucHV0X2J1ZmZlciArIGQtPmlucHV0X2J1ZmZlcl9zaXplKQorICAgICAgICAgICAgLSAoYnpzLT5uZXh0X2luICsgZC0+YnpzX2F2YWlsX2luX3JlYWwpOworCisgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyB3ZSBjYW4gYXBwZW5kIGlmIHdlIG1vdmUgZXhpc3RpbmcKKyAgICAgICAgICAgY29udGVudHMgdG8gYmVnaW5uaW5nIG9mIGJ1ZmZlciAob3ZlcndyaXRpbmcKKyAgICAgICAgICAgY29uc3VtZWQgaW5wdXQpICovCisgICAgICAgIGF2YWlsX3RvdGFsID0gZC0+aW5wdXRfYnVmZmVyX3NpemUgLSBkLT5ienNfYXZhaWxfaW5fcmVhbDsKKworICAgICAgICBpZiAoYXZhaWxfdG90YWwgPCBsZW4pIHsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBienMtPm5leHRfaW4gLSBkLT5pbnB1dF9idWZmZXI7CisgICAgICAgICAgICBjaGFyICp0bXA7CisgICAgICAgICAgICBzaXplX3QgbmV3X3NpemUgPSBkLT5pbnB1dF9idWZmZXJfc2l6ZSArIGxlbiAtIGF2YWlsX25vdzsKKworICAgICAgICAgICAgLyogQXNzaWduIHRvIHRlbXBvcmFyeSB2YXJpYWJsZSBmaXJzdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAgICAgIGxvc2UgYWRkcmVzcyBvZiBhbGxvY2F0ZWQgYnVmZmVyIGlmIHJlYWxsb2MgZmFpbHMgKi8KKyAgICAgICAgICAgIHRtcCA9IFB5TWVtX1JlYWxsb2MoZC0+aW5wdXRfYnVmZmVyLCBuZXdfc2l6ZSk7CisgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX01lbW9yeUVycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGQtPmlucHV0X2J1ZmZlciA9IHRtcDsKKyAgICAgICAgICAgIGQtPmlucHV0X2J1ZmZlcl9zaXplID0gbmV3X3NpemU7CisKKyAgICAgICAgICAgIGJ6cy0+bmV4dF9pbiA9IGQtPmlucHV0X2J1ZmZlciArIG9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhdmFpbF9ub3cgPCBsZW4pIHsKKyAgICAgICAgICAgIG1lbW1vdmUoZC0+aW5wdXRfYnVmZmVyLCBienMtPm5leHRfaW4sCisgICAgICAgICAgICAgICAgICAgIGQtPmJ6c19hdmFpbF9pbl9yZWFsKTsKKyAgICAgICAgICAgIGJ6cy0+bmV4dF9pbiA9IGQtPmlucHV0X2J1ZmZlcjsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoKHZvaWQqKShienMtPm5leHRfaW4gKyBkLT5ienNfYXZhaWxfaW5fcmVhbCksIGRhdGEsIGxlbik7CisgICAgICAgIGQtPmJ6c19hdmFpbF9pbl9yZWFsICs9IGxlbjsKKyAgICAgICAgaW5wdXRfYnVmZmVyX2luX3VzZSA9IDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBienMtPm5leHRfaW4gPSBkYXRhOworICAgICAgICBkLT5ienNfYXZhaWxfaW5fcmVhbCA9IGxlbjsKKyAgICAgICAgaW5wdXRfYnVmZmVyX2luX3VzZSA9IDA7CisgICAgfQorCisgICAgcmVzdWx0ID0gZGVjb21wcmVzc19idWYoZCwgbWF4X2xlbmd0aCk7CisgICAgaWYocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGQtPmVvZikgeworICAgICAgICBkLT5uZWVkc19pbnB1dCA9IDA7CisgICAgICAgIGlmIChkLT5ienNfYXZhaWxfaW5fcmVhbCA+IDApIHsKKyAgICAgICAgICAgIFB5X1hTRVRSRUYoZC0+dW51c2VkX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShienMtPm5leHRfaW4sIGQtPmJ6c19hdmFpbF9pbl9yZWFsKSk7CisgICAgICAgICAgICBpZiAoZC0+dW51c2VkX2RhdGEgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGQtPmJ6c19hdmFpbF9pbl9yZWFsID09IDApIHsKKyAgICAgICAgYnpzLT5uZXh0X2luID0gTlVMTDsKKyAgICAgICAgZC0+bmVlZHNfaW5wdXQgPSAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZC0+bmVlZHNfaW5wdXQgPSAwOworCisgICAgICAgIC8qIElmIHdlIGRpZCBub3QgdXNlIHRoZSBpbnB1dCBidWZmZXIsIHdlIG5vdyBoYXZlCisgICAgICAgICAgIHRvIGNvcHkgdGhlIHRhaWwgZnJvbSB0aGUgY2FsbGVyJ3MgYnVmZmVyIGludG8gdGhlCisgICAgICAgICAgIGlucHV0IGJ1ZmZlciAqLworICAgICAgICBpZiAoIWlucHV0X2J1ZmZlcl9pbl91c2UpIHsKKworICAgICAgICAgICAgLyogRGlzY2FyZCBidWZmZXIgaWYgaXQncyB0b28gc21hbGwKKyAgICAgICAgICAgICAgIChyZXNpemluZyBpdCBtYXkgbmVlZGxlc3NseSBjb3B5IHRoZSBjdXJyZW50IGNvbnRlbnRzKSAqLworICAgICAgICAgICAgaWYgKGQtPmlucHV0X2J1ZmZlciAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgZC0+aW5wdXRfYnVmZmVyX3NpemUgPCBkLT5ienNfYXZhaWxfaW5fcmVhbCkgeworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoZC0+aW5wdXRfYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBkLT5pbnB1dF9idWZmZXIgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBBbGxvY2F0ZSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICAgIGlmIChkLT5pbnB1dF9idWZmZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGQtPmlucHV0X2J1ZmZlciA9IFB5TWVtX01hbGxvYyhkLT5ienNfYXZhaWxfaW5fcmVhbCk7CisgICAgICAgICAgICAgICAgaWYgKGQtPmlucHV0X2J1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTWVtb3J5RXJyb3IpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkLT5pbnB1dF9idWZmZXJfc2l6ZSA9IGQtPmJ6c19hdmFpbF9pbl9yZWFsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBDb3B5IHRhaWwgKi8KKyAgICAgICAgICAgIG1lbWNweShkLT5pbnB1dF9idWZmZXIsIGJ6cy0+bmV4dF9pbiwgZC0+YnpzX2F2YWlsX2luX3JlYWwpOworICAgICAgICAgICAgYnpzLT5uZXh0X2luID0gZC0+aW5wdXRfYnVmZmVyOworICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdDsKIAogZXJyb3I6CkBAIC00NzAsMjEgKzU5MiwzMCBAQAogLypbY2xpbmljIGlucHV0XQogX2J6Mi5CWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzcwogCisgICAgc2VsZjogc2VsZih0eXBlPSJCWjJEZWNvbXByZXNzb3IgKiIpCiAgICAgZGF0YTogUHlfYnVmZmVyCi0gICAgLworICAgIG1heF9sZW5ndGg6IFB5X3NzaXplX3Q9LTEKIAotUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LgorRGVjb21wcmVzcyAqZGF0YSosIHJldHVybmluZyB1bmNvbXByZXNzZWQgZGF0YSBhcyBieXRlcy4KIAotUmV0dXJucyBhIGNodW5rIG9mIGRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiJycgb3RoZXJ3aXNlLgorSWYgKm1heF9sZW5ndGgqIGlzIG5vbm5lZ2F0aXZlLCByZXR1cm5zIGF0IG1vc3QgKm1heF9sZW5ndGgqIGJ5dGVzIG9mCitkZWNvbXByZXNzZWQgZGF0YS4gSWYgdGhpcyBsaW1pdCBpcyByZWFjaGVkIGFuZCBmdXJ0aGVyIG91dHB1dCBjYW4gYmUKK3Byb2R1Y2VkLCAqc2VsZi5uZWVkc19pbnB1dCogd2lsbCBiZSBzZXQgdG8gYGBGYWxzZWBgLiBJbiB0aGlzIGNhc2UsIHRoZSBuZXh0CitjYWxsIHRvICpkZWNvbXByZXNzKCkqIG1heSBwcm92aWRlICpkYXRhKiBhcyBiJycgdG8gb2J0YWluIG1vcmUgb2YgdGhlIG91dHB1dC4KIAotQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZAotcmFpc2VzIGFuIEVPRkVycm9yLiAgQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtCi1pcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLgorSWYgYWxsIG9mIHRoZSBpbnB1dCBkYXRhIHdhcyBkZWNvbXByZXNzZWQgYW5kIHJldHVybmVkIChlaXRoZXIgYmVjYXVzZSB0aGlzCit3YXMgbGVzcyB0aGFuICptYXhfbGVuZ3RoKiBieXRlcywgb3IgYmVjYXVzZSAqbWF4X2xlbmd0aCogd2FzIG5lZ2F0aXZlKSwKKypzZWxmLm5lZWRzX2lucHV0KiB3aWxsIGJlIHNldCB0byBUcnVlLgorCitBdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkIHJhaXNlcyBhbgorRU9GRXJyb3IuICBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4KK3RoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDg2ZTRiOTllNjBjYjNmNiBpbnB1dD02MTZjMmE2ZGI1MjY5OTYxXSovCitfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhfbGVuZ3RoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIzZTQxMDQ1ZGViMjQwYTMgaW5wdXQ9OTU1OGI0MjRjOGIwMDUxNl0qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCkBAIC00OTIsNyArNjIzLDcgQEAKICAgICBpZiAoc2VsZi0+ZW9mKQogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsICJFbmQgb2Ygc3RyZWFtIGFscmVhZHkgcmVhY2hlZCIpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZGVjb21wcmVzcyhzZWxmLCBkYXRhLT5idWYsIGRhdGEtPmxlbik7CisgICAgICAgIHJlc3VsdCA9IGRlY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4sIG1heF9sZW5ndGgpOwogICAgIFJFTEVBU0VfTE9DSyhzZWxmKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNTI3LDcgKzY1OCwxMSBAQAogICAgIH0KICNlbmRpZgogCi0gICAgc2VsZi0+dW51c2VkX2RhdGEgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAwKTsKKyAgICBzZWxmLT5uZWVkc19pbnB1dCA9IDE7CisgICAgc2VsZi0+YnpzX2F2YWlsX2luX3JlYWwgPSAwOworICAgIHNlbGYtPmlucHV0X2J1ZmZlciA9IE5VTEw7CisgICAgc2VsZi0+aW5wdXRfYnVmZmVyX3NpemUgPSAwOworICAgIHNlbGYtPnVudXNlZF9kYXRhID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKICAgICBpZiAoc2VsZi0+dW51c2VkX2RhdGEgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtNTQ5LDYgKzY4NCw4IEBACiBzdGF0aWMgdm9pZAogQloyRGVjb21wcmVzc29yX2RlYWxsb2MoQloyRGVjb21wcmVzc29yICpzZWxmKQogeworICAgIGlmKHNlbGYtPmlucHV0X2J1ZmZlciAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2J1ZmZlcik7CiAgICAgQloyX2J6RGVjb21wcmVzc0VuZCgmc2VsZi0+YnpzKTsKICAgICBQeV9DTEVBUihzZWxmLT51bnVzZWRfZGF0YSk7CiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTU3MCwxMSArNzA3LDE2IEBACiBQeURvY19TVFJWQVIoQloyRGVjb21wcmVzc29yX3VudXNlZF9kYXRhX19kb2NfXywKICJEYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgc3RyZWFtLiIpOwogCitQeURvY19TVFJWQVIoQloyRGVjb21wcmVzc29yX25lZWRzX2lucHV0X2RvYywKKyJUcnVlIGlmIG1vcmUgaW5wdXQgaXMgbmVlZGVkIGJlZm9yZSBtb3JlIGRlY29tcHJlc3NlZCBkYXRhIGNhbiBiZSBwcm9kdWNlZC4iKTsKKwogc3RhdGljIFB5TWVtYmVyRGVmIEJaMkRlY29tcHJlc3Nvcl9tZW1iZXJzW10gPSB7CiAgICAgeyJlb2YiLCBUX0JPT0wsIG9mZnNldG9mKEJaMkRlY29tcHJlc3NvciwgZW9mKSwKICAgICAgUkVBRE9OTFksIEJaMkRlY29tcHJlc3Nvcl9lb2ZfX2RvY19ffSwKICAgICB7InVudXNlZF9kYXRhIiwgVF9PQkpFQ1RfRVgsIG9mZnNldG9mKEJaMkRlY29tcHJlc3NvciwgdW51c2VkX2RhdGEpLAogICAgICBSRUFET05MWSwgQloyRGVjb21wcmVzc29yX3VudXNlZF9kYXRhX19kb2NfX30sCisgICAgeyJuZWVkc19pbnB1dCIsIFRfQk9PTCwgb2Zmc2V0b2YoQloyRGVjb21wcmVzc29yLCBuZWVkc19pbnB1dCksIFJFQURPTkxZLAorICAgICBCWjJEZWNvbXByZXNzb3JfbmVlZHNfaW5wdXRfZG9jfSwKICAgICB7TlVMTH0KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jIGIvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMKaW5kZXggNTJmMzQ3OS4uOWIxMTk0ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMKQEAgLTQ3LDE5ICs0NywyNSBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZTEzOTBlM2RhM2NiOWRlYl0qLwogCisjaW5jbHVkZSAiY2xpbmljL19jb2RlY3Ntb2R1bGUuYy5oIgogCiAvKiAtLS0gUmVnaXN0cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotUHlEb2NfU1RSVkFSKHJlZ2lzdGVyX19kb2NfXywKLSJyZWdpc3RlcihzZWFyY2hfZnVuY3Rpb24pXG5cCi1cblwKLVJlZ2lzdGVyIGEgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLiBTZWFyY2ggZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byB0YWtlXG5cCi1vbmUgYXJndW1lbnQsIHRoZSBlbmNvZGluZyBuYW1lIGluIGFsbCBsb3dlciBjYXNlIGxldHRlcnMsIGFuZCBlaXRoZXJcblwKLXJldHVybiBOb25lLCBvciBhIHR1cGxlIG9mIGZ1bmN0aW9ucyAoZW5jb2RlciwgZGVjb2Rlciwgc3RyZWFtX3JlYWRlcixcblwKLXN0cmVhbV93cml0ZXIpIChvciBhIENvZGVjSW5mbyBvYmplY3QpLiIpOworLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5yZWdpc3RlcgorICAgIHNlYXJjaF9mdW5jdGlvbjogb2JqZWN0CisgICAgLwogCi1zdGF0aWMKLVB5T2JqZWN0ICpjb2RlY19yZWdpc3RlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNlYXJjaF9mdW5jdGlvbikKK1JlZ2lzdGVyIGEgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLgorCitTZWFyY2ggZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byB0YWtlIG9uZSBhcmd1bWVudCwgdGhlIGVuY29kaW5nIG5hbWUgaW4KK2FsbCBsb3dlciBjYXNlIGxldHRlcnMsIGFuZCBlaXRoZXIgcmV0dXJuIE5vbmUsIG9yIGEgdHVwbGUgb2YgZnVuY3Rpb25zCisoZW5jb2RlciwgZGVjb2Rlciwgc3RyZWFtX3JlYWRlciwgc3RyZWFtX3dyaXRlcikgKG9yIGEgQ29kZWNJbmZvIG9iamVjdCkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3JlZ2lzdGVyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzZWFyY2hfZnVuY3Rpb24pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDFiZjIxZTk5ZGI3ZDZkMyBpbnB1dD0zNjk1Nzg0Njc5NTVjYWU0XSovCiB7CiAgICAgaWYgKFB5Q29kZWNfUmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02Nyw3NSArNzMsNzMgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKGxvb2t1cF9fZG9jX18sCi0ibG9va3VwKGVuY29kaW5nKSAtPiBDb2RlY0luZm9cblwKLVxuXAotTG9va3MgdXAgYSBjb2RlYyB0dXBsZSBpbiB0aGUgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5IGFuZCByZXR1cm5zXG5cCi1hIENvZGVjSW5mbyBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLmxvb2t1cAorICAgIGVuY29kaW5nOiBzdHIKKyAgICAvCiAKLXN0YXRpYwotUHlPYmplY3QgKmNvZGVjX2xvb2t1cChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitMb29rcyB1cCBhIGNvZGVjIHR1cGxlIGluIHRoZSBQeXRob24gY29kZWMgcmVnaXN0cnkgYW5kIHJldHVybnMgYSBDb2RlY0luZm8gb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19sb29rdXBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICplbmNvZGluZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ZjBhZmE1NzIwODBjMzZkIGlucHV0PTNjNTcyYzBkYjNmZWJlOWNdKi8KIHsKLSAgICBjaGFyICplbmNvZGluZzsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpsb29rdXAiLCAmZW5jb2RpbmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHJldHVybiBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOwogfQogCi1QeURvY19TVFJWQVIoZW5jb2RlX19kb2NfXywKLSJlbmNvZGUob2JqLCBbZW5jb2RpbmdbLGVycm9yc11dKSAtPiBvYmplY3RcblwKLVxuXAotRW5jb2RlcyBvYmogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yIGVuY29kaW5nLiBlbmNvZGluZyBkZWZhdWx0c1xuXAotdG8gdGhlIGRlZmF1bHQgZW5jb2RpbmcuIGVycm9ycyBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50IGVycm9yXG5cCi1oYW5kbGluZyBzY2hlbWUuIERlZmF1bHQgaXMgJ3N0cmljdCcgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZVxuXAotYSBWYWx1ZUVycm9yLiBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUnLCAncmVwbGFjZScgYW5kXG5cCi0neG1sY2hhcnJlZnJlcGxhY2UnIGFzIHdlbGwgYXMgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB3aXRoXG5cCi1jb2RlY3MucmVnaXN0ZXJfZXJyb3IgdGhhdCBjYW4gaGFuZGxlIFZhbHVlRXJyb3JzLiIpOworLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5lbmNvZGUKKyAgICBvYmo6IG9iamVjdAorICAgIGVuY29kaW5nOiBzdHIoY19kZWZhdWx0PSJOVUxMIikgPSAidXRmLTgiCisgICAgZXJyb3JzOiBzdHIoY19kZWZhdWx0PSJOVUxMIikgPSAic3RyaWN0IgorCitFbmNvZGVzIG9iaiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgZW5jb2RpbmcuCisKK1RoZSBkZWZhdWx0IGVuY29kaW5nIGlzICd1dGYtOCcuICBlcnJvcnMgbWF5IGJlIGdpdmVuIHRvIHNldCBhCitkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgRGVmYXVsdCBpcyAnc3RyaWN0JyBtZWFuaW5nIHRoYXQgZW5jb2RpbmcKK2Vycm9ycyByYWlzZSBhIFZhbHVlRXJyb3IuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUnLCAncmVwbGFjZScKK2FuZCAnYmFja3NsYXNocmVwbGFjZScgYXMgd2VsbCBhcyBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHdpdGgKK2NvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGNhbiBoYW5kbGUgVmFsdWVFcnJvcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jb2RlY19lbmNvZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2NvZGVjc19lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM4NTE0OGViOWEwNjdjODYgaW5wdXQ9Y2Q1YjY4NTA0MGZmNjFmMF0qLwogewotICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp2OwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHNzOmVuY29kZSIsICZ2LCAmZW5jb2RpbmcsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKQogICAgICAgICBlbmNvZGluZyA9IFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2RpbmcoKTsKIAogICAgIC8qIEVuY29kZSB2aWEgdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCi0gICAgcmV0dXJuIFB5Q29kZWNfRW5jb2RlKHYsIGVuY29kaW5nLCBlcnJvcnMpOworICAgIHJldHVybiBQeUNvZGVjX0VuY29kZShvYmosIGVuY29kaW5nLCBlcnJvcnMpOwogfQogCi1QeURvY19TVFJWQVIoZGVjb2RlX19kb2NfXywKLSJkZWNvZGUob2JqLCBbZW5jb2RpbmdbLGVycm9yc11dKSAtPiBvYmplY3RcblwKLVxuXAotRGVjb2RlcyBvYmogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yIGVuY29kaW5nLiBlbmNvZGluZyBkZWZhdWx0c1xuXAotdG8gdGhlIGRlZmF1bHQgZW5jb2RpbmcuIGVycm9ycyBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50IGVycm9yXG5cCi1oYW5kbGluZyBzY2hlbWUuIERlZmF1bHQgaXMgJ3N0cmljdCcgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZVxuXAotYSBWYWx1ZUVycm9yLiBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUnIGFuZCAncmVwbGFjZSdcblwKLWFzIHdlbGwgYXMgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB3aXRoIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGlzXG5cCi1hYmxlIHRvIGhhbmRsZSBWYWx1ZUVycm9ycy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MuZGVjb2RlCisgICAgb2JqOiBvYmplY3QKKyAgICBlbmNvZGluZzogc3RyKGNfZGVmYXVsdD0iTlVMTCIpID0gInV0Zi04IgorICAgIGVycm9yczogc3RyKGNfZGVmYXVsdD0iTlVMTCIpID0gInN0cmljdCIKKworRGVjb2RlcyBvYmogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yIGVuY29kaW5nLgorCitEZWZhdWx0IGVuY29kaW5nIGlzICd1dGYtOCcuICBlcnJvcnMgbWF5IGJlIGdpdmVuIHRvIHNldCBhCitkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgRGVmYXVsdCBpcyAnc3RyaWN0JyBtZWFuaW5nIHRoYXQgZW5jb2RpbmcKK2Vycm9ycyByYWlzZSBhIFZhbHVlRXJyb3IuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUnLCAncmVwbGFjZScKK2FuZCAnYmFja3NsYXNocmVwbGFjZScgYXMgd2VsbCBhcyBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHdpdGgKK2NvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGNhbiBoYW5kbGUgVmFsdWVFcnJvcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jb2RlY19kZWNvZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2NvZGVjc19kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTY3OTg4MjQxN2RjM2EwYmQgaW5wdXQ9NzcwMmMwY2MyZmExYWRkNl0qLwogewotICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp2OwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHNzOmRlY29kZSIsICZ2LCAmZW5jb2RpbmcsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKQogICAgICAgICBlbmNvZGluZyA9IFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2RpbmcoKTsKIAogICAgIC8qIERlY29kZSB2aWEgdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCi0gICAgcmV0dXJuIFB5Q29kZWNfRGVjb2RlKHYsIGVuY29kaW5nLCBlcnJvcnMpOworICAgIHJldHVybiBQeUNvZGVjX0RlY29kZShvYmosIGVuY29kaW5nLCBlcnJvcnMpOwogfQogCiAvKiAtLS0gSGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE0OSwzNyArMTUzLDkgQEAKIFB1cmdlIHRoZSBuYW1lZCBjb2RlYyBmcm9tIHRoZSBpbnRlcm5hbCBjb2RlYyBsb29rdXAgY2FjaGUKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotUHlEb2NfU1RSVkFSKF9jb2RlY3NfX2ZvcmdldF9jb2RlY19fZG9jX18sCi0iX2ZvcmdldF9jb2RlYygkbW9kdWxlLCBlbmNvZGluZywgLylcbiIKLSItLVxuIgotIlxuIgotIlB1cmdlIHRoZSBuYW1lZCBjb2RlYyBmcm9tIHRoZSBpbnRlcm5hbCBjb2RlYyBsb29rdXAgY2FjaGUiKTsKLQotI2RlZmluZSBfQ09ERUNTX19GT1JHRVRfQ09ERUNfTUVUSE9EREVGICAgIFwKLSAgICB7Il9mb3JnZXRfY29kZWMiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc19fZm9yZ2V0X2NvZGVjLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfX2ZvcmdldF9jb2RlY19fZG9jX199LAotCiBzdGF0aWMgUHlPYmplY3QgKgotX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotX2NvZGVjc19fZm9yZ2V0X2NvZGVjKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJzOl9mb3JnZXRfY29kZWMiLAotICAgICAgICAmZW5jb2RpbmcpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwobW9kdWxlLCBlbmNvZGluZyk7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9jb2RlY3NfX2ZvcmdldF9jb2RlY19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE3NWU2MzE1OTE3MDJhNWMgaW5wdXQ9MThkNWQ5MmQwZTM4NmMzOF0qLworX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGJkZTlmMGE1YjA4NGFhMiBpbnB1dD0xOGQ1ZDkyZDBlMzg2YzM4XSovCiB7CiAgICAgaWYgKF9QeUNvZGVjX0ZvcmdldChlbmNvZGluZykgPCAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTg4LDQ4ICsxNjQsNDkgQEAKIH0KIAogc3RhdGljCi1QeU9iamVjdCAqY29kZWNfdHVwbGUoUHlPYmplY3QgKnVuaWNvZGUsCitQeU9iamVjdCAqY29kZWNfdHVwbGUoUHlPYmplY3QgKmRlY29kZWQsCiAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKKyAgICBpZiAoZGVjb2RlZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiT24iLCB1bmljb2RlLCBsZW4pOwotICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKLSAgICByZXR1cm4gdjsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTm4iLCBkZWNvZGVkLCBsZW4pOwogfQogCiAvKiAtLS0gU3RyaW5nIGNvZGVjcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1lc2NhcGVfZGVjb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIgKmRhdGE7Ci0gICAgUHlfc3NpemVfdCBzaXplOworLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5lc2NhcGVfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyKGFjY2VwdD17c3RyLCBidWZmZXJ9KQorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyN8ejplc2NhcGVfZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEsICZzaXplLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIGNvZGVjX3R1cGxlKFB5Qnl0ZXNfRGVjb2RlRXNjYXBlKGRhdGEsIHNpemUsIGVycm9ycywgMCwgTlVMTCksCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemUpOworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfZXNjYXBlX2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MDUyMDBiYTgwNTY5NzlhIGlucHV0PTAwMThlZGZkOTlkYjcxNGRdKi8KK3sKKyAgICBQeU9iamVjdCAqZGVjb2RlZCA9IFB5Qnl0ZXNfRGVjb2RlRXNjYXBlKGRhdGEtPmJ1ZiwgZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAwLCBOVUxMKTsKKyAgICByZXR1cm4gY29kZWNfdHVwbGUoZGVjb2RlZCwgZGF0YS0+bGVuKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5lc2NhcGVfZW5jb2RlCisgICAgZGF0YTogb2JqZWN0KHN1YmNsYXNzX29mPScmUHlCeXRlc19UeXBlJykKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1lc2NhcGVfZW5jb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKK19jb2RlY3NfZXNjYXBlX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRhZjFkNDc3ODM0YmFiMzQgaW5wdXQ9ZGE5ZGVkMDA5OTJmMzJmMl0qLwogewotICAgIFB5T2JqZWN0ICpzdHI7CiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIFB5X3NzaXplX3QgbmV3c2l6ZTsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICp2OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXx6OmVzY2FwZV9lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlCeXRlc19UeXBlLCAmc3RyLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShzdHIpOworICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpOwogICAgIGlmIChzaXplID4gUFlfU1NJWkVfVF9NQVggLyA0KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgInN0cmluZyBpcyB0b28gbGFyZ2UgdG8gZW5jb2RlIik7CkBAIC0yNDksNyArMjI2LDcgQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCBlbm91Z2ggcm9vbSBmb3IgYSBoZXggZXNjYXBlICovCiAgICAgICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gUHlCeXRlc19BU19TVFJJTkcodikpID49IDQpOwotICAgICAgICAgICAgYyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHN0cilbaV07CisgICAgICAgICAgICBjID0gUHlCeXRlc19BU19TVFJJTkcoZGF0YSlbaV07CiAgICAgICAgICAgICBpZiAoYyA9PSAnXCcnIHx8IGMgPT0gJ1xcJykKICAgICAgICAgICAgICAgICAqcCsrID0gJ1xcJywgKnArKyA9IGM7CiAgICAgICAgICAgICBlbHNlIGlmIChjID09ICdcdCcpCkBAIC0yNzcsMTggKzI1NCwxOCBAQAogfQogCiAvKiAtLS0gRGVjb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MudW5pY29kZV9pbnRlcm5hbF9kZWNvZGUKKyAgICBvYmo6IG9iamVjdAorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXVuaWNvZGVfaW50ZXJuYWxfZGVjb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCitfY29kZWNzX3VuaWNvZGVfaW50ZXJuYWxfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZWRiZmUxNzVlMDllZmY5YSBpbnB1dD04ZDU3OTMwYWVkYTE3MGM2XSovCiB7Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6dW5pY29kZV9pbnRlcm5hbF9kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG9iaikpIHsKICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzA5LDEyMCArMjg2LDEwOSBAQAogICAgIH0KIH0KIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy51dGZfN19kZWNvZGUKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICBmaW5hbDogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi11dGZfN19kZWNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCitfY29kZWNzX3V0Zl83X2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGNkM2E5NDRhMzJhNDA4OSBpbnB1dD1iYzRkNjI0N2VjZGIwMWU2XSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBpbnQgZmluYWwgPSAwOwotICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7Ci0gICAgUHlPYmplY3QgKmRlY29kZWQgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfN19kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGJ1ZiwgJmVycm9ycywgJmZpbmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY29uc3VtZWQgPSBwYnVmLmxlbjsKLQotICAgIGRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsKHBidWYuYnVmLCBwYnVmLmxlbiwgZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfc3NpemVfdCBjb25zdW1lZCA9IGRhdGEtPmxlbjsKKyAgICBQeU9iamVjdCAqZGVjb2RlZCA9IFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWwoZGF0YS0+YnVmLCBkYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgPyBOVUxMIDogJmNvbnN1bWVkKTsKICAgICByZXR1cm4gY29kZWNfdHVwbGUoZGVjb2RlZCwgY29uc3VtZWQpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLnV0Zl84X2RlY29kZQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIGZpbmFsOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXV0Zl84X2RlY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQorX2NvZGVjc191dGZfOF9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgaW50IGZpbmFsKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTEwZjc0ZGVjOGQ5YmI4YmYgaW5wdXQ9MzkxNjFkNzFlNzQyMmVlMl0qLwogewotICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgaW50IGZpbmFsID0gMDsKLSAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOwotICAgIFB5T2JqZWN0ICpkZWNvZGVkID0gTlVMTDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8emk6dXRmXzhfZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBidWYsICZlcnJvcnMsICZmaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGNvbnN1bWVkID0gcGJ1Zi5sZW47Ci0KLSAgICBkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChwYnVmLmJ1ZiwgcGJ1Zi5sZW4sIGVycm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCA/IE5VTEwgOiAmY29uc3VtZWQpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwotICAgIGlmIChkZWNvZGVkID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBkYXRhLT5sZW47CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKGRhdGEtPmJ1ZiwgZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7CiAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKGRlY29kZWQsIGNvbnN1bWVkKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy51dGZfMTZfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgZmluYWw6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotdXRmXzE2X2RlY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQorX2NvZGVjc191dGZfMTZfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzgzYjQ0MmFiY2JjYzJkMCBpbnB1dD1mM2NmMDFkMTQ2MTAwN2NlXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBpbnQgYnl0ZW9yZGVyID0gMDsKLSAgICBpbnQgZmluYWwgPSAwOwotICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7Ci0gICAgUHlPYmplY3QgKmRlY29kZWQ7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfHppOnV0Zl8xNl9kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGJ1ZiwgJmVycm9ycywgJmZpbmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY29uc3VtZWQgPSBwYnVmLmxlbjsgLyogVGhpcyBpcyBvdmVyd3JpdHRlbiB1bmxlc3MgZmluYWwgaXMgdHJ1ZS4gKi8KLSAgICBkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwocGJ1Zi5idWYsIHBidWYubGVuLCBlcnJvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVvcmRlciwgZmluYWwgPyBOVUxMIDogJmNvbnN1bWVkKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICBpZiAoZGVjb2RlZCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBUaGlzIGlzIG92ZXJ3cml0dGVuIHVubGVzcyBmaW5hbCBpcyB0cnVlLiAqLworICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBkYXRhLT5sZW47CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bChkYXRhLT5idWYsIGRhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmJ5dGVvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7CiAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKGRlY29kZWQsIGNvbnN1bWVkKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy51dGZfMTZfbGVfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgZmluYWw6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotdXRmXzE2X2xlX2RlY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCitfY29kZWNzX3V0Zl8xNl9sZV9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04OTliOWU2MzY0Mzc5ZGNkIGlucHV0PWE3N2UzYmY5NzMzNWQ5NGVdKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIGludCBieXRlb3JkZXIgPSAtMTsKLSAgICBpbnQgZmluYWwgPSAwOwotICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7Ci0gICAgUHlPYmplY3QgKmRlY29kZWQgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfMTZfbGVfZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBidWYsICZlcnJvcnMsICZmaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgY29uc3VtZWQgPSBwYnVmLmxlbjsgLyogVGhpcyBpcyBvdmVyd3JpdHRlbiB1bmxlc3MgZmluYWwgaXMgdHJ1ZS4gKi8KLSAgICBkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwocGJ1Zi5idWYsIHBidWYubGVuLCBlcnJvcnMsCi0gICAgICAgICZieXRlb3JkZXIsIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogVGhpcyBpcyBvdmVyd3JpdHRlbiB1bmxlc3MgZmluYWwgaXMgdHJ1ZS4gKi8KKyAgICBQeV9zc2l6ZV90IGNvbnN1bWVkID0gZGF0YS0+bGVuOworICAgIFB5T2JqZWN0ICpkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwoZGF0YS0+YnVmLCBkYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZieXRlb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCA/IE5VTEwgOiAmY29uc3VtZWQpOwogICAgIHJldHVybiBjb2RlY190dXBsZShkZWNvZGVkLCBjb25zdW1lZCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MudXRmXzE2X2JlX2RlY29kZQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIGZpbmFsOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXV0Zl8xNl9iZV9kZWNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQorX2NvZGVjc191dGZfMTZfYmVfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDlmNjQ2NWVhMDc2NjljOCBpbnB1dD02MDZmNjlmYWU5MWI1NTYzXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBpbnQgYnl0ZW9yZGVyID0gMTsKLSAgICBpbnQgZmluYWwgPSAwOwotICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7Ci0gICAgUHlPYmplY3QgKmRlY29kZWQgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfMTZfYmVfZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBidWYsICZlcnJvcnMsICZmaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgY29uc3VtZWQgPSBwYnVmLmxlbjsgLyogVGhpcyBpcyBvdmVyd3JpdHRlbiB1bmxlc3MgZmluYWwgaXMgdHJ1ZS4gKi8KLSAgICBkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwocGJ1Zi5idWYsIHBidWYubGVuLCBlcnJvcnMsCi0gICAgICAgICZieXRlb3JkZXIsIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogVGhpcyBpcyBvdmVyd3JpdHRlbiB1bmxlc3MgZmluYWwgaXMgdHJ1ZS4gKi8KKyAgICBQeV9zc2l6ZV90IGNvbnN1bWVkID0gZGF0YS0+bGVuOworICAgIFB5T2JqZWN0ICpkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwoZGF0YS0+YnVmLCBkYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZieXRlb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCA/IE5VTEwgOiAmY29uc3VtZWQpOwogICAgIHJldHVybiBjb2RlY190dXBsZShkZWNvZGVkLCBjb25zdW1lZCk7CiB9CiAKQEAgLTQzMyw5OCArMzk5LDk0IEBACiAgICBiZWluZyB0aGUgdmFsdWUgaW4gZWZmZWN0IGF0IHRoZSBlbmQgb2YgZGF0YS4KIAogKi8KKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MudXRmXzE2X2V4X2RlY29kZQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIGJ5dGVvcmRlcjogaW50ID0gMAorICAgIGZpbmFsOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXV0Zl8xNl9leF9kZWNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQorX2NvZGVjc191dGZfMTZfZXhfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgYnl0ZW9yZGVyLCBpbnQgZmluYWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGYzODVmMjUxZWNjMTk4OCBpbnB1dD1mNmU3ZjY5NzY1OGMwMTNlXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBpbnQgYnl0ZW9yZGVyID0gMDsKLSAgICBQeU9iamVjdCAqdW5pY29kZSwgKnR1cGxlOwotICAgIGludCBmaW5hbCA9IDA7Ci0gICAgUHlfc3NpemVfdCBjb25zdW1lZDsKKyAgICAvKiBUaGlzIGlzIG92ZXJ3cml0dGVuIHVubGVzcyBmaW5hbCBpcyB0cnVlLiAqLworICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBkYXRhLT5sZW47CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfHppaTp1dGZfMTZfZXhfZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBidWYsICZlcnJvcnMsICZieXRlb3JkZXIsICZmaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGNvbnN1bWVkID0gcGJ1Zi5sZW47IC8qIFRoaXMgaXMgb3ZlcndyaXR0ZW4gdW5sZXNzIGZpbmFsIGlzIHRydWUuICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVsKHBidWYuYnVmLCBwYnVmLmxlbiwgZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlb3JkZXIsIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCJPbmkiLCB1bmljb2RlLCBjb25zdW1lZCwgYnl0ZW9yZGVyKTsKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7Ci0gICAgcmV0dXJuIHR1cGxlOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotdXRmXzMyX2RlY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgaW50IGJ5dGVvcmRlciA9IDA7Ci0gICAgaW50IGZpbmFsID0gMDsKLSAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOwotICAgIFB5T2JqZWN0ICpkZWNvZGVkOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfMzJfZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBidWYsICZlcnJvcnMsICZmaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGNvbnN1bWVkID0gcGJ1Zi5sZW47IC8qIFRoaXMgaXMgb3ZlcndyaXR0ZW4gdW5sZXNzIGZpbmFsIGlzIHRydWUuICovCi0gICAgZGVjb2RlZCA9IFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsKHBidWYuYnVmLCBwYnVmLmxlbiwgZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlb3JkZXIsIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bChkYXRhLT5idWYsIGRhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmJ5dGVvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7CiAgICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5uaSIsIGRlY29kZWQsIGNvbnN1bWVkLCBieXRlb3JkZXIpOworfQorCisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLnV0Zl8zMl9kZWNvZGUKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICBmaW5hbDogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yZmM5NjE4MDdmN2IxNDVmIGlucHV0PTg2ZDRmNDFjNmMyZTc2M2RdKi8KK3sKKyAgICBpbnQgYnl0ZW9yZGVyID0gMDsKKyAgICAvKiBUaGlzIGlzIG92ZXJ3cml0dGVuIHVubGVzcyBmaW5hbCBpcyB0cnVlLiAqLworICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBkYXRhLT5sZW47CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bChkYXRhLT5idWYsIGRhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmJ5dGVvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7CiAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKGRlY29kZWQsIGNvbnN1bWVkKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy51dGZfMzJfbGVfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgZmluYWw6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotdXRmXzMyX2xlX2RlY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCitfY29kZWNzX3V0Zl8zMl9sZV9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lYzhmNDZiNjdhOTRmM2U2IGlucHV0PWQxOGI2NTA3NzJkMTg4YmFdKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIGludCBieXRlb3JkZXIgPSAtMTsKLSAgICBpbnQgZmluYWwgPSAwOwotICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7Ci0gICAgUHlPYmplY3QgKmRlY29kZWQ7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfHppOnV0Zl8zMl9sZV9kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGJ1ZiwgJmVycm9ycywgJmZpbmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY29uc3VtZWQgPSBwYnVmLmxlbjsgLyogVGhpcyBpcyBvdmVyd3JpdHRlbiB1bmxlc3MgZmluYWwgaXMgdHJ1ZS4gKi8KLSAgICBkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWwocGJ1Zi5idWYsIHBidWYubGVuLCBlcnJvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVvcmRlciwgZmluYWwgPyBOVUxMIDogJmNvbnN1bWVkKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICBpZiAoZGVjb2RlZCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBUaGlzIGlzIG92ZXJ3cml0dGVuIHVubGVzcyBmaW5hbCBpcyB0cnVlLiAqLworICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBkYXRhLT5sZW47CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bChkYXRhLT5idWYsIGRhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmJ5dGVvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7CiAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKGRlY29kZWQsIGNvbnN1bWVkKTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXV0Zl8zMl9iZV9kZWNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgaW50IGJ5dGVvcmRlciA9IDE7Ci0gICAgaW50IGZpbmFsID0gMDsKLSAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOwotICAgIFB5T2JqZWN0ICpkZWNvZGVkOworLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy51dGZfMzJfYmVfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgZmluYWw6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfMzJfYmVfZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBidWYsICZlcnJvcnMsICZmaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGNvbnN1bWVkID0gcGJ1Zi5sZW47IC8qIFRoaXMgaXMgb3ZlcndyaXR0ZW4gdW5sZXNzIGZpbmFsIGlzIHRydWUuICovCi0gICAgZGVjb2RlZCA9IFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsKHBidWYuYnVmLCBwYnVmLmxlbiwgZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlb3JkZXIsIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMzJfYmVfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmY4MmJhZTg2MmM5MmM0ZSBpbnB1dD0xOWMyNzFiNWQzNDkyNmQ4XSovCit7CisgICAgaW50IGJ5dGVvcmRlciA9IDE7CisgICAgLyogVGhpcyBpcyBvdmVyd3JpdHRlbiB1bmxlc3MgZmluYWwgaXMgdHJ1ZS4gKi8KKyAgICBQeV9zc2l6ZV90IGNvbnN1bWVkID0gZGF0YS0+bGVuOworICAgIFB5T2JqZWN0ICpkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWwoZGF0YS0+YnVmLCBkYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZieXRlb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCA/IE5VTEwgOiAmY29uc3VtZWQpOwogICAgIHJldHVybiBjb2RlY190dXBsZShkZWNvZGVkLCBjb25zdW1lZCk7CiB9CiAKQEAgLTUzNSwxNjcgKzQ5NywxNTcgQEAKICAgIGJlaW5nIHRoZSB2YWx1ZSBpbiBlZmZlY3QgYXQgdGhlIGVuZCBvZiBkYXRhLgogCiAqLworLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy51dGZfMzJfZXhfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgYnl0ZW9yZGVyOiBpbnQgPSAwCisgICAgZmluYWw6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdXRmXzMyX2V4X2RlY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCitfY29kZWNzX3V0Zl8zMl9leF9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBieXRlb3JkZXIsIGludCBmaW5hbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02YmZiMTc3ZGNlYWY0ODQ4IGlucHV0PTRhZjNlNmNjZmUzNGEwNzZdKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIGludCBieXRlb3JkZXIgPSAwOwotICAgIFB5T2JqZWN0ICp1bmljb2RlLCAqdHVwbGU7Ci0gICAgaW50IGZpbmFsID0gMDsKLSAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aWk6dXRmXzMyX2V4X2RlY29kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZwYnVmLCAmZXJyb3JzLCAmYnl0ZW9yZGVyLCAmZmluYWwpKQorICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBkYXRhLT5sZW47CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bChkYXRhLT5idWYsIGRhdGEtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmJ5dGVvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7CisgICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY29uc3VtZWQgPSBwYnVmLmxlbjsgLyogVGhpcyBpcyBvdmVyd3JpdHRlbiB1bmxlc3MgZmluYWwgaXMgdHJ1ZS4gKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWwocGJ1Zi5idWYsIHBidWYubGVuLCBlcnJvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVvcmRlciwgZmluYWwgPyBOVUxMIDogJmNvbnN1bWVkKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICBpZiAodW5pY29kZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB0dXBsZSA9IFB5X0J1aWxkVmFsdWUoIk9uaSIsIHVuaWNvZGUsIGNvbnN1bWVkLCBieXRlb3JkZXIpOwotICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKLSAgICByZXR1cm4gdHVwbGU7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5uaSIsIGRlY29kZWQsIGNvbnN1bWVkLCBieXRlb3JkZXIpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLnVuaWNvZGVfZXNjYXBlX2RlY29kZQorICAgIGRhdGE6IFB5X2J1ZmZlcihhY2NlcHQ9e3N0ciwgYnVmZmVyfSkKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlX2VzY2FwZV9kZWNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKK19jb2RlY3NfdW5pY29kZV9lc2NhcGVfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2NhM2M5MTcxNzZiODJhYiBpbnB1dD00OWZkMjdkMDY4MTNhN2Y1XSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICAgICAgUHlPYmplY3QgKnVuaWNvZGU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqfHo6dW5pY29kZV9lc2NhcGVfZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBidWYsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZShwYnVmLmJ1ZiwgcGJ1Zi5sZW4sIGVycm9ycyk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgcmV0dXJuIGNvZGVjX3R1cGxlKHVuaWNvZGUsIHBidWYubGVuKTsKKyAgICBQeU9iamVjdCAqZGVjb2RlZCA9IFB5VW5pY29kZV9EZWNvZGVVbmljb2RlRXNjYXBlKGRhdGEtPmJ1ZiwgZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzKTsKKyAgICByZXR1cm4gY29kZWNfdHVwbGUoZGVjb2RlZCwgZGF0YS0+bGVuKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5yYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyKGFjY2VwdD17c3RyLCBidWZmZXJ9KQorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXJhd191bmljb2RlX2VzY2FwZV9kZWNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKK19jb2RlY3NfcmF3X3VuaWNvZGVfZXNjYXBlX2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jOThlZWI1NjAyODA3MGE2IGlucHV0PTc3MDkwM2EyMTE0MzRlYmNdKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKnx6OnJhd191bmljb2RlX2VzY2FwZV9kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGJ1ZiwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlKHBidWYuYnVmLCBwYnVmLmxlbiwgZXJyb3JzKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICByZXR1cm4gY29kZWNfdHVwbGUodW5pY29kZSwgcGJ1Zi5sZW4pOworICAgIFB5T2JqZWN0ICpkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUoZGF0YS0+YnVmLCBkYXRhLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMpOworICAgIHJldHVybiBjb2RlY190dXBsZShkZWNvZGVkLCBkYXRhLT5sZW4pOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLmxhdGluXzFfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbGF0aW5fMV9kZWNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKK19jb2RlY3NfbGF0aW5fMV9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA3ZjNkZmEzZjcyYzdkOGYgaW5wdXQ9NWNhZDBmMTc1OWM2MThlY10qLwogewotICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfHo6bGF0aW5fMV9kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGJ1ZiwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9EZWNvZGVMYXRpbjEocGJ1Zi5idWYsIHBidWYubGVuLCBlcnJvcnMpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwotICAgIHJldHVybiBjb2RlY190dXBsZSh1bmljb2RlLCBwYnVmLmxlbik7CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKGRhdGEtPmJ1ZiwgZGF0YS0+bGVuLCBlcnJvcnMpOworICAgIHJldHVybiBjb2RlY190dXBsZShkZWNvZGVkLCBkYXRhLT5sZW4pOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLmFzY2lpX2RlY29kZQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWFzY2lpX2RlY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKK19jb2RlY3NfYXNjaWlfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjYyN2Q3MjA1OGQ0MjQyOSBpbnB1dD1hZDExMDZmNjQwMzdiZDE2XSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8ejphc2NpaV9kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGJ1ZiwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9EZWNvZGVBU0NJSShwYnVmLmJ1ZiwgcGJ1Zi5sZW4sIGVycm9ycyk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgcmV0dXJuIGNvZGVjX3R1cGxlKHVuaWNvZGUsIHBidWYubGVuKTsKKyAgICBQeU9iamVjdCAqZGVjb2RlZCA9IFB5VW5pY29kZV9EZWNvZGVBU0NJSShkYXRhLT5idWYsIGRhdGEtPmxlbiwgZXJyb3JzKTsKKyAgICByZXR1cm4gY29kZWNfdHVwbGUoZGVjb2RlZCwgZGF0YS0+bGVuKTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWNoYXJtYXBfZGVjb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbWFwcGluZyA9IE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLmNoYXJtYXBfZGVjb2RlCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgbWFwcGluZzogb2JqZWN0ID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8ek86Y2hhcm1hcF9kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGJ1ZiwgJmVycm9ycywgJm1hcHBpbmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2NoYXJtYXBfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKm1hcHBpbmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmMzMzViMDk3NzhjZjg5NSBpbnB1dD0xOTcxMmNhMzVjNWE4MGUyXSovCit7CisgICAgUHlPYmplY3QgKmRlY29kZWQ7CisKICAgICBpZiAobWFwcGluZyA9PSBQeV9Ob25lKQogICAgICAgICBtYXBwaW5nID0gTlVMTDsKIAotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcChwYnVmLmJ1ZiwgcGJ1Zi5sZW4sIG1hcHBpbmcsIGVycm9ycyk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgcmV0dXJuIGNvZGVjX3R1cGxlKHVuaWNvZGUsIHBidWYubGVuKTsKKyAgICBkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZUNoYXJtYXAoZGF0YS0+YnVmLCBkYXRhLT5sZW4sIG1hcHBpbmcsIGVycm9ycyk7CisgICAgcmV0dXJuIGNvZGVjX3R1cGxlKGRlY29kZWQsIGRhdGEtPmxlbik7CiB9CiAKICNpZmRlZiBIQVZFX01CQ1MKIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5tYmNzX2RlY29kZQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIGZpbmFsOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW1iY3NfZGVjb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCitfY29kZWNzX21iY3NfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgaW50IGZpbmFsKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM5YjY1Yjg1OTg5MzhjNGIgaW5wdXQ9ZDQ5MmMxY2E2NGY0ZmE4YV0qLwogewotICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgaW50IGZpbmFsID0gMDsKLSAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOwotICAgIFB5T2JqZWN0ICpkZWNvZGVkID0gTlVMTDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8emk6bWJjc19kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGJ1ZiwgJmVycm9ycywgJmZpbmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY29uc3VtZWQgPSBwYnVmLmxlbjsKLQotICAgIGRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlTUJDU1N0YXRlZnVsKHBidWYuYnVmLCBwYnVmLmxlbiwgZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKGRlY29kZWQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfc3NpemVfdCBjb25zdW1lZCA9IGRhdGEtPmxlbjsKKyAgICBQeU9iamVjdCAqZGVjb2RlZCA9IFB5VW5pY29kZV9EZWNvZGVNQkNTU3RhdGVmdWwoZGF0YS0+YnVmLCBkYXRhLT5sZW4sCisgICAgICAgICAgICBlcnJvcnMsIGZpbmFsID8gTlVMTCA6ICZjb25zdW1lZCk7CiAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKGRlY29kZWQsIGNvbnN1bWVkKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlCisgICAgY29kZXBhZ2U6IGludAorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIGZpbmFsOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWNvZGVfcGFnZV9kZWNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQorX2NvZGVjc19jb2RlX3BhZ2VfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGNvZGVwYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfYnVmZmVyICpkYXRhLCBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MzAwOGVhOTY3ZGEzZmZmIGlucHV0PTRmMzE1MmEzMDRlMjFkNTFdKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIGludCBmaW5hbCA9IDA7Ci0gICAgUHlfc3NpemVfdCBjb25zdW1lZDsKLSAgICBQeU9iamVjdCAqZGVjb2RlZCA9IE5VTEw7Ci0gICAgaW50IGNvZGVfcGFnZTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXkqfHppOmNvZGVfcGFnZV9kZWNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmY29kZV9wYWdlLCAmcGJ1ZiwgJmVycm9ycywgJmZpbmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY29uc3VtZWQgPSBwYnVmLmxlbjsKLQotICAgIGRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlQ29kZVBhZ2VTdGF0ZWZ1bChjb2RlX3BhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBidWYuYnVmLCBwYnVmLmxlbiwgZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCA/IE5VTEwgOiAmY29uc3VtZWQpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwotICAgIGlmIChkZWNvZGVkID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X3NzaXplX3QgY29uc3VtZWQgPSBkYXRhLT5sZW47CisgICAgUHlPYmplY3QgKmRlY29kZWQgPSBQeVVuaWNvZGVfRGVjb2RlQ29kZVBhZ2VTdGF0ZWZ1bChjb2RlcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgPyBOVUxMIDogJmNvbnN1bWVkKTsKICAgICByZXR1cm4gY29kZWNfdHVwbGUoZGVjb2RlZCwgY29uc3VtZWQpOwogfQogCkBAIC03MDMsNDMgKzY1NSwzOSBAQAogCiAvKiAtLS0gRW5jb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5yZWFkYnVmZmVyX2VuY29kZQorICAgIGRhdGE6IFB5X2J1ZmZlcihhY2NlcHQ9e3N0ciwgYnVmZmVyfSkKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1yZWFkYnVmZmVyX2VuY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQorX2NvZGVjc19yZWFkYnVmZmVyX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzY0NWVhN2NkYjNkNmU4NiBpbnB1dD1iN2MzMjJiODlkNGFiOTIzXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBkYXRhOwotICAgIGNvbnN0IGNoYXIgKmRhdGE7Ci0gICAgUHlfc3NpemVfdCBzaXplOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyp8ejpyZWFkYnVmZmVyX2VuY29kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZwZGF0YSwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGRhdGEgPSBwZGF0YS5idWY7Ci0gICAgc2l6ZSA9IHBkYXRhLmxlbjsKLQotICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoZGF0YSwgc2l6ZSk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwotICAgIHJldHVybiBjb2RlY190dXBsZShyZXN1bHQsIHNpemUpOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGRhdGEtPmJ1ZiwgZGF0YS0+bGVuKTsKKyAgICByZXR1cm4gY29kZWNfdHVwbGUocmVzdWx0LCBkYXRhLT5sZW4pOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZV9pbnRlcm5hbF9lbmNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqb2JqOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLnVuaWNvZGVfaW50ZXJuYWxfZW5jb2RlCisgICAgb2JqOiBvYmplY3QKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3VuaWNvZGVfaW50ZXJuYWxfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTcyNTA3ZGRlNGVhNTU4ZiBpbnB1dD04NjI4ZjAyODBjZjViYTYxXSovCit7CiAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZV9pbnRlcm5hbCBjb2RlYyBoYXMgYmVlbiBkZXByZWNhdGVkIiwKICAgICAgICAgICAgICAgICAgICAgIDEpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OnVuaWNvZGVfaW50ZXJuYWxfZW5jb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhvYmopKSB7CiAgICAgICAgIFB5X1VOSUNPREUgKnU7CiAgICAgICAgIFB5X3NzaXplX3QgbGVuLCBzaXplOwpAQCAtNzUwLDcgKzY5OCw3IEBACiAgICAgICAgIHUgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShvYmosICZsZW4pOwogICAgICAgICBpZiAodSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIHNpemVvZihQeV9VTklDT0RFKSkKKyAgICAgICAgaWYgKChzaXplX3QpbGVuID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIHNpemVvZihQeV9VTklDT0RFKSkKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBzaXplID0gbGVuICogc2l6ZW9mKFB5X1VOSUNPREUpOwogICAgICAgICByZXR1cm4gY29kZWNfdHVwbGUoUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciopdSwgc2l6ZSksCkBAIC03NjEsMjIgKzcwOSwyNiBAQAogICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKG9iaiwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByZXN1bHQgPSBjb2RlY190dXBsZShQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZpZXcuYnVmLCB2aWV3LmxlbiksIHZpZXcubGVuKTsKKyAgICAgICAgcmVzdWx0ID0gY29kZWNfdHVwbGUoUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2aWV3LmJ1Ziwgdmlldy5sZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Lmxlbik7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXV0Zl83X2VuY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpzdHIsICp2OwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLnV0Zl83X2VuY29kZQorICAgIHN0cjogb2JqZWN0CisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6dXRmXzdfZW5jb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ciwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzdfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBmZWRhMjFmZmM5MjFiYzggaW5wdXQ9ZmQ5MWE3OGYxMDNiMDQyMV0qLworeworICAgIFB5T2JqZWN0ICp2OwogCiAgICAgc3RyID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyKTsKICAgICBpZiAoc3RyID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHN0cikgPCAwKSB7CkBAIC03ODksMTYgKzc0MSwxOSBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotdXRmXzhfZW5jb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnN0ciwgKnY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MudXRmXzhfZW5jb2RlCisgICAgc3RyOiBvYmplY3QKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98ejp1dGZfOF9lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfOF9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDJiZjQ3MzMyYjljNzk2YyBpbnB1dD0yYzIyZDQwNTMyZjA3MWYzXSovCit7CisgICAgUHlPYmplY3QgKnY7CiAKICAgICBzdHIgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChzdHIpOwogICAgIGlmIChzdHIgPT0gTlVMTCB8fCBQeVVuaWNvZGVfUkVBRFkoc3RyKSA8IDApIHsKQEAgLTgxOCwxNyArNzczLDIwIEBACiAKICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi11dGZfMTZfZW5jb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnN0ciwgKnY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBpbnQgYnl0ZW9yZGVyID0gMDsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MudXRmXzE2X2VuY29kZQorICAgIHN0cjogb2JqZWN0CisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgYnl0ZW9yZGVyOiBpbnQgPSAwCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHppOnV0Zl8xNl9lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCAmZXJyb3JzLCAmYnl0ZW9yZGVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgaW50IGJ5dGVvcmRlcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jNjU0ZTEzZWZhMmU2NGU0IGlucHV0PTM5MzVhNDg5YjJkNTM4NWVdKi8KK3sKKyAgICBQeU9iamVjdCAqdjsKIAogICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KHN0cik7CiAgICAgaWYgKHN0ciA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWShzdHIpIDwgMCkgewpAQCAtODQxLDE2ICs3OTksMTkgQEAKICAgICByZXR1cm4gdjsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXV0Zl8xNl9sZV9lbmNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpzdHIsICp2OwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLnV0Zl8xNl9sZV9lbmNvZGUKKyAgICBzdHI6IG9iamVjdAorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OnV0Zl8xNl9sZV9lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfbGVfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MzFiMDFlNTVmMmQ0OTk1IGlucHV0PWJjMjdkZjA1ZDFkMjBkZmVdKi8KK3sKKyAgICBQeU9iamVjdCAqdjsKIAogICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KHN0cik7CiAgICAgaWYgKHN0ciA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWShzdHIpIDwgMCkgewpAQCAtODYzLDE2ICs4MjQsMTkgQEAKICAgICByZXR1cm4gdjsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXV0Zl8xNl9iZV9lbmNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpzdHIsICp2OwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLnV0Zl8xNl9iZV9lbmNvZGUKKyAgICBzdHI6IG9iamVjdAorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OnV0Zl8xNl9iZV9lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfYmVfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05Njg4NmE2ZmQ1NGRjYWUzIGlucHV0PTVhNjlkNDExMjc2MzQ2MmJdKi8KK3sKKyAgICBQeU9iamVjdCAqdjsKIAogICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KHN0cik7CiAgICAgaWYgKHN0ciA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWShzdHIpIDwgMCkgewpAQCAtODkyLDE3ICs4NTYsMjAgQEAKIAogKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLXV0Zl8zMl9lbmNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqc3RyLCAqdjsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIGludCBieXRlb3JkZXIgPSAwOworLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy51dGZfMzJfZW5jb2RlCisgICAgc3RyOiBvYmplY3QKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICBieXRlb3JkZXI6IGludCA9IDAKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98emk6dXRmXzMyX2VuY29kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIsICZlcnJvcnMsICZieXRlb3JkZXIpKQotICAgICAgICByZXR1cm4gTlVMTDsKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgYnl0ZW9yZGVyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVjNzYwZGEwYzA5YThiODMgaW5wdXQ9NDM0YTFlZmE0OTJiOGQ1OF0qLworeworICAgIFB5T2JqZWN0ICp2OwogCiAgICAgc3RyID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyKTsKICAgICBpZiAoc3RyID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHN0cikgPCAwKSB7CkBAIC05MTUsMTYgKzg4MiwxOSBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotdXRmXzMyX2xlX2VuY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnN0ciwgKnY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MudXRmXzMyX2xlX2VuY29kZQorICAgIHN0cjogb2JqZWN0CisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6dXRmXzMyX2xlX2VuY29kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9sZV9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI2NWNkMTc2ZGU4ZTM2ZDYgaW5wdXQ9ZGZhMmQ3ZGM3OGI5OTQyMl0qLworeworICAgIFB5T2JqZWN0ICp2OwogCiAgICAgc3RyID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyKTsKICAgICBpZiAoc3RyID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHN0cikgPCAwKSB7CkBAIC05MzcsMTYgKzkwNywxOSBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotdXRmXzMyX2JlX2VuY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnN0ciwgKnY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MudXRmXzMyX2JlX2VuY29kZQorICAgIHN0cjogb2JqZWN0CisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6dXRmXzMyX2JlX2VuY29kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9iZV9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFkOWU3MWE5MzU4NzA5ZTkgaW5wdXQ9NDU5NTYxN2IxODE2OTAwMl0qLworeworICAgIFB5T2JqZWN0ICp2OwogCiAgICAgc3RyID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyKTsKICAgICBpZiAoc3RyID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHN0cikgPCAwKSB7CkBAIC05NTksMTYgKzkzMiwxOSBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZV9lc2NhcGVfZW5jb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnN0ciwgKnY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MudW5pY29kZV9lc2NhcGVfZW5jb2RlCisgICAgc3RyOiBvYmplY3QKKyAgICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98ejp1bmljb2RlX2VzY2FwZV9lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191bmljb2RlX2VzY2FwZV9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjYyNzFiMzBiYzRmN2EzYyBpbnB1dD04MjczNTA2ZjE0MDc2OTEyXSovCit7CisgICAgUHlPYmplY3QgKnY7CiAKICAgICBzdHIgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChzdHIpOwogICAgIGlmIChzdHIgPT0gTlVMTCB8fCBQeVVuaWNvZGVfUkVBRFkoc3RyKSA8IDApIHsKQEAgLTk4MSwxNiArOTU3LDE5IEBACiAgICAgcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1yYXdfdW5pY29kZV9lc2NhcGVfZW5jb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnN0ciwgKnY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MucmF3X3VuaWNvZGVfZXNjYXBlX2VuY29kZQorICAgIHN0cjogb2JqZWN0CisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6cmF3X3VuaWNvZGVfZXNjYXBlX2VuY29kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3Jhd191bmljb2RlX2VzY2FwZV9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE2NmE4MDZlZDAxYzgzMGEgaW5wdXQ9MTgxNzU1ZDVkZmFjZWYzY10qLworeworICAgIFB5T2JqZWN0ICp2OwogCiAgICAgc3RyID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyKTsKICAgICBpZiAoc3RyID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHN0cikgPCAwKSB7CkBAIC0xMDAzLDE2ICs5ODIsMTkgQEAKICAgICByZXR1cm4gdjsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWxhdGluXzFfZW5jb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnN0ciwgKnY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MubGF0aW5fMV9lbmNvZGUKKyAgICBzdHI6IG9iamVjdAorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OmxhdGluXzFfZW5jb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ciwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfbGF0aW5fMV9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yYzI4YzgzYTI3ODg0ZTA4IGlucHV0PWYwM2Y2ZGNmMWQ4NGJlZTRdKi8KK3sKKyAgICBQeU9iamVjdCAqdjsKIAogICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KHN0cik7CiAgICAgaWYgKHN0ciA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWShzdHIpIDwgMCkgewpAQCAtMTAyNSwxNiArMTAwNywxOSBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotYXNjaWlfZW5jb2RlKFB5T2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpzdHIsICp2OwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLmFzY2lpX2VuY29kZQorICAgIHN0cjogb2JqZWN0CisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6YXNjaWlfZW5jb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ciwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfYXNjaWlfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI1ZTAzNTE4MmQzM2JlZmMgaW5wdXQ9ZDg3ZTI1YTEwYTU5M2ZlZV0qLworeworICAgIFB5T2JqZWN0ICp2OwogCiAgICAgc3RyID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyKTsKICAgICBpZiAoc3RyID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHN0cikgPCAwKSB7CkBAIC0xMDQ3LDE3ICsxMDMyLDIxIEBACiAgICAgcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1jaGFybWFwX2VuY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqc3RyLCAqdjsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICptYXBwaW5nID0gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MuY2hhcm1hcF9lbmNvZGUKKyAgICBzdHI6IG9iamVjdAorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIG1hcHBpbmc6IG9iamVjdCA9IE5VTEwKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98ek86Y2hhcm1hcF9lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCAmZXJyb3JzLCAmbWFwcGluZykpCi0gICAgICAgIHJldHVybiBOVUxMOworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfY2hhcm1hcF9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKm1hcHBpbmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDQ3NDc2ZjQ4NDk1YTllOSBpbnB1dD04NWY0MTcyNjYxZThkYWQ5XSovCit7CisgICAgUHlPYmplY3QgKnY7CisKICAgICBpZiAobWFwcGluZyA9PSBQeV9Ob25lKQogICAgICAgICBtYXBwaW5nID0gTlVMTDsKIApAQCAtMTA3MiwyNyArMTA2MSwzMyBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1jaGFybWFwX2J1aWxkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MuY2hhcm1hcF9idWlsZAorICAgIG1hcDogdW5pY29kZQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfY2hhcm1hcF9idWlsZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICptYXApCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmIwNzNjMjcwMzFkYjlhYyBpbnB1dD1kOTFhOTFkMTcxN2RiYzZkXSovCiB7Ci0gICAgUHlPYmplY3QgKm1hcDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6Y2hhcm1hcF9idWlsZCIsICZtYXApKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAobWFwKTsKIH0KIAogI2lmZGVmIEhBVkVfTUJDUwogCi1zdGF0aWMgUHlPYmplY3QgKgotbWJjc19lbmNvZGUoUHlPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqc3RyLCAqdjsKLSAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5tYmNzX2VuY29kZQorICAgIHN0cjogb2JqZWN0CisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6bWJjc19lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19tYmNzX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzdHIsIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NmUyZTE3MGM5NjZjMDgwIGlucHV0PTY1YzA5ZWUxZTQyMDMyNjNdKi8KK3sKKyAgICBQeU9iamVjdCAqdjsKIAogICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KHN0cik7CiAgICAgaWYgKHN0ciA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWShzdHIpIDwgMCkgewpAQCAtMTEwNSwxNyArMTEwMCwyMCBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotY29kZV9wYWdlX2VuY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnN0ciwgKnY7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBpbnQgY29kZV9wYWdlOworLypbY2xpbmljIGlucHV0XQorX2NvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlCisgICAgY29kZV9wYWdlOiBpbnQKKyAgICBzdHI6IG9iamVjdAorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU98ejpjb2RlX3BhZ2VfZW5jb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvZGVfcGFnZSwgJnN0ciwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfY29kZV9wYWdlX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBjb2RlX3BhZ2UsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDU2NzNmNjA4NTY1N2E5ZSBpbnB1dD1jODU2MmVjNDYwYzJlMzA5XSovCit7CisgICAgUHlPYmplY3QgKnY7CiAKICAgICBzdHIgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChzdHIpOwogICAgIGlmIChzdHIgPT0gTlVMTCB8fCBQeVVuaWNvZGVfUkVBRFkoc3RyKSA8IDApIHsKQEAgLTExMzQsOTkgKzExMzIsOTQgQEAKIAogLyogLS0tIEVycm9yIGhhbmRsZXIgcmVnaXN0cnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLVB5RG9jX1NUUlZBUihyZWdpc3Rlcl9lcnJvcl9fZG9jX18sCi0icmVnaXN0ZXJfZXJyb3IoZXJyb3JzLCBoYW5kbGVyKVxuXAotXG5cCi1SZWdpc3RlciB0aGUgc3BlY2lmaWVkIGVycm9yIGhhbmRsZXIgdW5kZXIgdGhlIG5hbWVcblwKLWVycm9ycy4gaGFuZGxlciBtdXN0IGJlIGEgY2FsbGFibGUgb2JqZWN0LCB0aGF0XG5cCi13aWxsIGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBjb250YWluaW5nXG5cCi1pbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhlIGVuY29kaW5nL2RlY29kaW5nXG5cCi1lcnJvciBhbmQgbXVzdCByZXR1cm4gYSAocmVwbGFjZW1lbnQsIG5ldyBwb3NpdGlvbikgdHVwbGUuIik7CisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLnJlZ2lzdGVyX2Vycm9yCisgICAgZXJyb3JzOiBzdHIKKyAgICBoYW5kbGVyOiBvYmplY3QKKyAgICAvCiAKLXN0YXRpYyBQeU9iamVjdCAqcmVnaXN0ZXJfZXJyb3IoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorUmVnaXN0ZXIgdGhlIHNwZWNpZmllZCBlcnJvciBoYW5kbGVyIHVuZGVyIHRoZSBuYW1lIGVycm9ycy4KKworaGFuZGxlciBtdXN0IGJlIGEgY2FsbGFibGUgb2JqZWN0LCB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uCitpbnN0YW5jZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZW5jb2RpbmcvZGVjb2RpbmcKK2Vycm9yIGFuZCBtdXN0IHJldHVybiBhIChyZXBsYWNlbWVudCwgbmV3IHBvc2l0aW9uKSB0dXBsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfcmVnaXN0ZXJfZXJyb3JfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICplcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmhhbmRsZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmEyZjdkMTg3OWIzMDY3ZCBpbnB1dD01ZTY3MDkyMDNjMmUzM2ZlXSovCiB7Ci0gICAgY29uc3QgY2hhciAqbmFtZTsKLSAgICBQeU9iamVjdCAqaGFuZGxlcjsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic086cmVnaXN0ZXJfZXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJmhhbmRsZXIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlDb2RlY19SZWdpc3RlckVycm9yKG5hbWUsIGhhbmRsZXIpKQorICAgIGlmIChQeUNvZGVjX1JlZ2lzdGVyRXJyb3IoZXJyb3JzLCBoYW5kbGVyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihsb29rdXBfZXJyb3JfX2RvY19fLAotImxvb2t1cF9lcnJvcihlcnJvcnMpIC0+IGhhbmRsZXJcblwKLVxuXAotUmV0dXJuIHRoZSBlcnJvciBoYW5kbGVyIGZvciB0aGUgc3BlY2lmaWVkIGVycm9yIGhhbmRsaW5nIG5hbWVcblwKLW9yIHJhaXNlIGEgTG9va3VwRXJyb3IsIGlmIG5vIGhhbmRsZXIgZXhpc3RzIHVuZGVyIHRoaXMgbmFtZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19jb2RlY3MubG9va3VwX2Vycm9yCisgICAgbmFtZTogc3RyCisgICAgLwogCi1zdGF0aWMgUHlPYmplY3QgKmxvb2t1cF9lcnJvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitsb29rdXBfZXJyb3IoZXJyb3JzKSAtPiBoYW5kbGVyCisKK1JldHVybiB0aGUgZXJyb3IgaGFuZGxlciBmb3IgdGhlIHNwZWNpZmllZCBlcnJvciBoYW5kbGluZyBuYW1lIG9yIHJhaXNlIGEKK0xvb2t1cEVycm9yLCBpZiBubyBoYW5kbGVyIGV4aXN0cyB1bmRlciB0aGlzIG5hbWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2xvb2t1cF9lcnJvcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDg3ZjA1ZGMwYzlhOThjYyBpbnB1dD00Nzc1ZGQ2NWU2MjM1YWJhXSovCiB7Ci0gICAgY29uc3QgY2hhciAqbmFtZTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpsb29rdXBfZXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUNvZGVjX0xvb2t1cEVycm9yKG5hbWUpOwogfQogCiAvKiAtLS0gTW9kdWxlIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIF9jb2RlY3NfZnVuY3Rpb25zW10gPSB7Ci0gICAgeyJyZWdpc3RlciIsICAgICAgICAgICAgICAgIGNvZGVjX3JlZ2lzdGVyLCAgICAgICAgICAgICAgICAgTUVUSF9PLAotICAgICAgICByZWdpc3Rlcl9fZG9jX199LAotICAgIHsibG9va3VwIiwgICAgICAgICAgICAgICAgICBjb2RlY19sb29rdXAsICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgbG9va3VwX19kb2NfX30sCi0gICAgeyJlbmNvZGUiLCAgICAgICAgICAgICAgICAgIGNvZGVjX2VuY29kZSwgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAgICBlbmNvZGVfX2RvY19ffSwKLSAgICB7ImRlY29kZSIsICAgICAgICAgICAgICAgICAgY29kZWNfZGVjb2RlLCAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsCi0gICAgICAgIGRlY29kZV9fZG9jX199LAotICAgIHsiZXNjYXBlX2VuY29kZSIsICAgICAgICAgICBlc2NhcGVfZW5jb2RlLCAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJlc2NhcGVfZGVjb2RlIiwgICAgICAgICAgIGVzY2FwZV9kZWNvZGUsICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InV0Zl84X2VuY29kZSIsICAgICAgICAgICAgdXRmXzhfZW5jb2RlLCAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsidXRmXzhfZGVjb2RlIiwgICAgICAgICAgICB1dGZfOF9kZWNvZGUsICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1dGZfN19lbmNvZGUiLCAgICAgICAgICAgIHV0Zl83X2VuY29kZSwgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InV0Zl83X2RlY29kZSIsICAgICAgICAgICAgdXRmXzdfZGVjb2RlLCAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsidXRmXzE2X2VuY29kZSIsICAgICAgICAgICB1dGZfMTZfZW5jb2RlLCAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1dGZfMTZfbGVfZW5jb2RlIiwgICAgICAgIHV0Zl8xNl9sZV9lbmNvZGUsICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InV0Zl8xNl9iZV9lbmNvZGUiLCAgICAgICAgdXRmXzE2X2JlX2VuY29kZSwgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsidXRmXzE2X2RlY29kZSIsICAgICAgICAgICB1dGZfMTZfZGVjb2RlLCAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1dGZfMTZfbGVfZGVjb2RlIiwgICAgICAgIHV0Zl8xNl9sZV9kZWNvZGUsICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InV0Zl8xNl9iZV9kZWNvZGUiLCAgICAgICAgdXRmXzE2X2JlX2RlY29kZSwgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsidXRmXzE2X2V4X2RlY29kZSIsICAgICAgICB1dGZfMTZfZXhfZGVjb2RlLCAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1dGZfMzJfZW5jb2RlIiwgICAgICAgICAgIHV0Zl8zMl9lbmNvZGUsICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InV0Zl8zMl9sZV9lbmNvZGUiLCAgICAgICAgdXRmXzMyX2xlX2VuY29kZSwgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsidXRmXzMyX2JlX2VuY29kZSIsICAgICAgICB1dGZfMzJfYmVfZW5jb2RlLCAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1dGZfMzJfZGVjb2RlIiwgICAgICAgICAgIHV0Zl8zMl9kZWNvZGUsICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InV0Zl8zMl9sZV9kZWNvZGUiLCAgICAgICAgdXRmXzMyX2xlX2RlY29kZSwgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsidXRmXzMyX2JlX2RlY29kZSIsICAgICAgICB1dGZfMzJfYmVfZGVjb2RlLCAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1dGZfMzJfZXhfZGVjb2RlIiwgICAgICAgIHV0Zl8zMl9leF9kZWNvZGUsICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InVuaWNvZGVfZXNjYXBlX2VuY29kZSIsICAgdW5pY29kZV9lc2NhcGVfZW5jb2RlLCAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsidW5pY29kZV9lc2NhcGVfZGVjb2RlIiwgICB1bmljb2RlX2VzY2FwZV9kZWNvZGUsICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1bmljb2RlX2ludGVybmFsX2VuY29kZSIsIHVuaWNvZGVfaW50ZXJuYWxfZW5jb2RlLCAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7InVuaWNvZGVfaW50ZXJuYWxfZGVjb2RlIiwgdW5pY29kZV9pbnRlcm5hbF9kZWNvZGUsICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsicmF3X3VuaWNvZGVfZXNjYXBlX2VuY29kZSIsIHJhd191bmljb2RlX2VzY2FwZV9lbmNvZGUsICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJyYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlIiwgcmF3X3VuaWNvZGVfZXNjYXBlX2RlY29kZSwgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImxhdGluXzFfZW5jb2RlIiwgICAgICAgICAgbGF0aW5fMV9lbmNvZGUsICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsibGF0aW5fMV9kZWNvZGUiLCAgICAgICAgICBsYXRpbl8xX2RlY29kZSwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJhc2NpaV9lbmNvZGUiLCAgICAgICAgICAgIGFzY2lpX2VuY29kZSwgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImFzY2lpX2RlY29kZSIsICAgICAgICAgICAgYXNjaWlfZGVjb2RlLCAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsiY2hhcm1hcF9lbmNvZGUiLCAgICAgICAgICBjaGFybWFwX2VuY29kZSwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJjaGFybWFwX2RlY29kZSIsICAgICAgICAgIGNoYXJtYXBfZGVjb2RlLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImNoYXJtYXBfYnVpbGQiLCAgICAgICAgICAgY2hhcm1hcF9idWlsZCwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsicmVhZGJ1ZmZlcl9lbmNvZGUiLCAgICAgICByZWFkYnVmZmVyX2VuY29kZSwgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0jaWZkZWYgSEFWRV9NQkNTCi0gICAgeyJtYmNzX2VuY29kZSIsICAgICAgICAgICAgIG1iY3NfZW5jb2RlLCAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7Im1iY3NfZGVjb2RlIiwgICAgICAgICAgICAgbWJjc19kZWNvZGUsICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsiY29kZV9wYWdlX2VuY29kZSIsICAgICAgICBjb2RlX3BhZ2VfZW5jb2RlLCAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJjb2RlX3BhZ2VfZGVjb2RlIiwgICAgICAgIGNvZGVfcGFnZV9kZWNvZGUsICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSNlbmRpZgotICAgIHsicmVnaXN0ZXJfZXJyb3IiLCAgICAgICAgICByZWdpc3Rlcl9lcnJvciwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgcmVnaXN0ZXJfZXJyb3JfX2RvY19ffSwKLSAgICB7Imxvb2t1cF9lcnJvciIsICAgICAgICAgICAgbG9va3VwX2Vycm9yLCAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsCi0gICAgICAgIGxvb2t1cF9lcnJvcl9fZG9jX199LAorICAgIF9DT0RFQ1NfUkVHSVNURVJfTUVUSE9EREVGCisgICAgX0NPREVDU19MT09LVVBfTUVUSE9EREVGCisgICAgX0NPREVDU19FTkNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19ERUNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19FU0NBUEVfRU5DT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfRVNDQVBFX0RFQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl84X0VOQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl84X0RFQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl83X0VOQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl83X0RFQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl8xNl9FTkNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19VVEZfMTZfTEVfRU5DT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfVVRGXzE2X0JFX0VOQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl8xNl9ERUNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19VVEZfMTZfTEVfREVDT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfVVRGXzE2X0JFX0RFQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl8xNl9FWF9ERUNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19VVEZfMzJfRU5DT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfVVRGXzMyX0xFX0VOQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl8zMl9CRV9FTkNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19VVEZfMzJfREVDT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfVVRGXzMyX0xFX0RFQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1VURl8zMl9CRV9ERUNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19VVEZfMzJfRVhfREVDT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfVU5JQ09ERV9FU0NBUEVfRU5DT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfVU5JQ09ERV9FU0NBUEVfREVDT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfVU5JQ09ERV9JTlRFUk5BTF9FTkNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19VTklDT0RFX0lOVEVSTkFMX0RFQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX1JBV19VTklDT0RFX0VTQ0FQRV9FTkNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19SQVdfVU5JQ09ERV9FU0NBUEVfREVDT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfTEFUSU5fMV9FTkNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19MQVRJTl8xX0RFQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX0FTQ0lJX0VOQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX0FTQ0lJX0RFQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX0NIQVJNQVBfRU5DT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfQ0hBUk1BUF9ERUNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19DSEFSTUFQX0JVSUxEX01FVEhPRERFRgorICAgIF9DT0RFQ1NfUkVBREJVRkZFUl9FTkNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19NQkNTX0VOQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX01CQ1NfREVDT0RFX01FVEhPRERFRgorICAgIF9DT0RFQ1NfQ09ERV9QQUdFX0VOQ09ERV9NRVRIT0RERUYKKyAgICBfQ09ERUNTX0NPREVfUEFHRV9ERUNPREVfTUVUSE9EREVGCisgICAgX0NPREVDU19SRUdJU1RFUl9FUlJPUl9NRVRIT0RERUYKKyAgICBfQ09ERUNTX0xPT0tVUF9FUlJPUl9NRVRIT0RERUYKICAgICBfQ09ERUNTX19GT1JHRVRfQ09ERUNfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKaW5kZXggNjExNWM3MC4uMTBmYmNmZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCkBAIC0xLDQ4ICsxLDcxIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKKyNpZmRlZiBTVERDX0hFQURFUlMKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgICAgIC8qIEZvciBzaXplX3QgKi8KKyNlbmRpZgorCiAvKiBjb2xsZWN0aW9ucyBtb2R1bGUgaW1wbGVtZW50YXRpb24gb2YgYSBkZXF1ZSgpIGRhdGF0eXBlCiAgICBXcml0dGVuIGFuZCBtYWludGFpbmVkIGJ5IFJheW1vbmQgRC4gSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KICovCiAKIC8qIFRoZSBibG9jayBsZW5ndGggbWF5IGJlIHNldCB0byBhbnkgbnVtYmVyIG92ZXIgMS4gIExhcmdlciBudW1iZXJzCiAgKiByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciwgZ2l2ZSBmYXN0ZXIKLSAqIGluZGV4aW5nIGFuZCByb3RhdGlvbiwgYW5kIHJlZHVjZSB0aGUgbGluazo6ZGF0YSBvdmVyaGVhZCByYXRpby4KLSAqCi0gKiBJZGVhbGx5LCB0aGUgYmxvY2sgbGVuZ3RoIHdpbGwgYmUgc2V0IHRvIHR3byBsZXNzIHRoYW4gc29tZQotICogbXVsdGlwbGUgb2YgdGhlIGNhY2hlLWxpbmUgbGVuZ3RoIChzbyB0aGF0IHRoZSBmdWxsIGJsb2NrCi0gKiBpbmNsdWRpbmcgdGhlIGxlZnRsaW5rIGFuZCByaWdodGxpbmsgd2lsbCBmaXQgbmVhdGx5IGludG8KLSAqIGNhY2hlIGxpbmVzKS4KKyAqIGluZGV4aW5nIGFuZCByb3RhdGlvbiwgYW5kIHJlZHVjZSB0aGUgbGluayB0byBkYXRhIG92ZXJoZWFkIHJhdGlvLgorICogTWFraW5nIHRoZSBibG9jayBsZW5ndGggYSBwb3dlciBvZiB0d28gc3BlZWRzLXVwIHRoZSBtb2R1bG8KKyAqIGFuZCBkaXZpc2lvbiBjYWxjdWxhdGlvbnMgaW4gZGVxdWVfaXRlbSgpIGFuZCBkZXF1ZV9hc3NfaXRlbSgpLgogICovCiAKLSNkZWZpbmUgQkxPQ0tMRU4gNjIKKyNkZWZpbmUgQkxPQ0tMRU4gNjQKICNkZWZpbmUgQ0VOVEVSICgoQkxPQ0tMRU4gLSAxKSAvIDIpCiAKLS8qIEEgYGRlcXVlb2JqZWN0YCBpcyBjb21wb3NlZCBvZiBhIGRvdWJseS1saW5rZWQgbGlzdCBvZiBgYmxvY2tgIG5vZGVzLgorLyogRGF0YSBmb3IgZGVxdWUgb2JqZWN0cyBpcyBzdG9yZWQgaW4gYSBkb3VibHktbGlua2VkIGxpc3Qgb2YgZml4ZWQKKyAqIGxlbmd0aCBibG9ja3MuICBUaGlzIGFzc3VyZXMgdGhhdCBhcHBlbmRzIG9yIHBvcHMgbmV2ZXIgbW92ZSBhbnkKKyAqIG90aGVyIGRhdGEgZWxlbWVudHMgYmVzaWRlcyB0aGUgb25lIGJlaW5nIGFwcGVuZGVkIG9yIHBvcHBlZC4KKyAqCisgKiBBbm90aGVyIGFkdmFudGFnZSBpcyB0aGF0IGl0IGNvbXBsZXRlbHkgYXZvaWRzIHVzZSBvZiByZWFsbG9jKCksCisgKiByZXN1bHRpbmcgaW4gbW9yZSBwcmVkaWN0YWJsZSBwZXJmb3JtYW5jZS4KKyAqCisgKiBUZXh0Ym9vayBpbXBsZW1lbnRhdGlvbnMgb2YgZG91Ymx5LWxpbmtlZCBsaXN0cyBzdG9yZSBvbmUgZGF0dW0KKyAqIHBlciBsaW5rLCBidXQgdGhhdCBnaXZlcyB0aGVtIGEgMjAwJSBtZW1vcnkgb3ZlcmhlYWQgKGEgcHJldiBhbmQKKyAqIG5leHQgbGluayBmb3IgZWFjaCBkYXR1bSkgYW5kIGl0IGNvc3RzIG9uZSBtYWxsb2MoKSBjYWxsIHBlciBkYXRhCisgKiBlbGVtZW50LiAgQnkgdXNpbmcgZml4ZWQtbGVuZ3RoIGJsb2NrcywgdGhlIGxpbmsgdG8gZGF0YSByYXRpbyBpcworICogc2lnbmlmaWNhbnRseSBpbXByb3ZlZCBhbmQgdGhlcmUgYXJlIHByb3BvcnRpb25hbGx5IGZld2VyIGNhbGxzCisgKiB0byBtYWxsb2MoKSBhbmQgZnJlZSgpLiAgVGhlIGRhdGEgYmxvY2tzIG9mIGNvbnNlY3V0aXZlIHBvaW50ZXJzCisgKiBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkuCisgKgogICogVGhlIGxpc3Qgb2YgYmxvY2tzIGlzIG5ldmVyIGVtcHR5LCBzbyBkLmxlZnRibG9jayBhbmQgZC5yaWdodGJsb2NrCiAgKiBhcmUgbmV2ZXIgZXF1YWwgdG8gTlVMTC4gIFRoZSBsaXN0IGlzIG5vdCBjaXJjdWxhci4KICAqCiAgKiBBIGRlcXVlIGQncyBmaXJzdCBlbGVtZW50IGlzIGF0IGQubGVmdGJsb2NrW2xlZnRpbmRleF0KICAqIGFuZCBpdHMgbGFzdCBlbGVtZW50IGlzIGF0IGQucmlnaHRibG9ja1tyaWdodGluZGV4XS4KLSAqIFVubGlrZSBQeXRob24gc2xpY2UgaW5kaWNlcywgdGhlc2UgaW5kaWNlcyBhcmUgaW5jbHVzaXZlCi0gKiBvbiBib3RoIGVuZHMuICBUaGlzIG1ha2VzIHRoZSBhbGdvcml0aG1zIGZvciBsZWZ0IGFuZAotICogcmlnaHQgb3BlcmF0aW9ucyBtb3JlIHN5bW1ldHJpY2FsIGFuZCBzaW1wbGlmaWVzIHRoZSBkZXNpZ24uCiAgKgotICogVGhlIGluZGljZXMsIGQubGVmdGluZGV4IGFuZCBkLnJpZ2h0aW5kZXggYXJlIGFsd2F5cyBpbiB0aGUgcmFuZ2UKLSAqICAgICAwIDw9IGluZGV4IDwgQkxPQ0tMRU4uCi0gKiBUaGVpciBleGFjdCByZWxhdGlvbnNoaXAgaXM6Ci0gKiAgICAgKGQubGVmdGluZGV4ICsgZC5sZW4gLSAxKSAlIEJMT0NLTEVOID09IGQucmlnaHRpbmRleC4KKyAqIFVubGlrZSBQeXRob24gc2xpY2UgaW5kaWNlcywgdGhlc2UgaW5kaWNlcyBhcmUgaW5jbHVzaXZlIG9uIGJvdGgKKyAqIGVuZHMuICBUaGlzIG1ha2VzIHRoZSBhbGdvcml0aG1zIGZvciBsZWZ0IGFuZCByaWdodCBvcGVyYXRpb25zCisgKiBtb3JlIHN5bW1ldHJpY2FsIGFuZCBpdCBzaW1wbGlmaWVzIHRoZSBkZXNpZ24uCiAgKgotICogRW1wdHkgZGVxdWVzIGhhdmUgZC5sZW4gPT0gMDsgZC5sZWZ0YmxvY2s9PWQucmlnaHRibG9jazsKLSAqIGQubGVmdGluZGV4ID09IENFTlRFUisxOyBhbmQgZC5yaWdodGluZGV4ID09IENFTlRFUi4KKyAqIFRoZSBpbmRpY2VzLCBkLmxlZnRpbmRleCBhbmQgZC5yaWdodGluZGV4IGFyZSBhbHdheXMgaW4gdGhlIHJhbmdlOgorICogICAgIDAgPD0gaW5kZXggPCBCTE9DS0xFTgorICoKKyAqIEFuZCB0aGVpciBleGFjdCByZWxhdGlvbnNoaXAgaXM6CisgKiAgICAgKGQubGVmdGluZGV4ICsgZC5sZW4gLSAxKSAlIEJMT0NLTEVOID09IGQucmlnaHRpbmRleAorICoKKyAqIFdoZW5ldmVyIGQubGVmdGJsb2NrID09IGQucmlnaHRibG9jaywgdGhlbjoKKyAqICAgICBkLmxlZnRpbmRleCArIGQubGVuIC0gMSA9PSBkLnJpZ2h0aW5kZXgKKyAqCisgKiBIb3dldmVyLCB3aGVuIGQubGVmdGJsb2NrICE9IGQucmlnaHRibG9jaywgdGhlIGQubGVmdGluZGV4IGFuZAorICogZC5yaWdodGluZGV4IGJlY29tZSBpbmRpY2VzIGludG8gZGlzdGluY3QgYmxvY2tzIGFuZCBlaXRoZXIgbWF5CisgKiBiZSBsYXJnZXIgdGhhbiB0aGUgb3RoZXIuCisgKgorICogRW1wdHkgZGVxdWVzIGhhdmU6CisgKiAgICAgZC5sZW4gPT0gMAorICogICAgIGQubGVmdGJsb2NrID09IGQucmlnaHRibG9jaworICogICAgIGQubGVmdGluZGV4ID09IENFTlRFUiArIDEKKyAqICAgICBkLnJpZ2h0aW5kZXggPT0gQ0VOVEVSCisgKgogICogQ2hlY2tpbmcgZm9yIGQubGVuID09IDAgaXMgdGhlIGludGVuZGVkIHdheSB0byBzZWUgd2hldGhlciBkIGlzIGVtcHR5LgotICoKLSAqIFdoZW5ldmVyIGQubGVmdGJsb2NrID09IGQucmlnaHRibG9jaywKLSAqICAgICBkLmxlZnRpbmRleCArIGQubGVuIC0gMSA9PSBkLnJpZ2h0aW5kZXguCi0gKgotICogSG93ZXZlciwgd2hlbiBkLmxlZnRibG9jayAhPSBkLnJpZ2h0YmxvY2ssIGQubGVmdGluZGV4IGFuZCBkLnJpZ2h0aW5kZXgKLSAqIGJlY29tZSBpbmRpY2VzIGludG8gZGlzdGluY3QgYmxvY2tzIGFuZCBlaXRoZXIgbWF5IGJlIGxhcmdlciB0aGFuIHRoZQotICogb3RoZXIuCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgQkxPQ0sgewpAQCAtNTEsNiArNzQsMTkgQEAKICAgICBzdHJ1Y3QgQkxPQ0sgKnJpZ2h0bGluazsKIH0gYmxvY2s7CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9WQVJfSEVBRAorICAgIGJsb2NrICpsZWZ0YmxvY2s7CisgICAgYmxvY2sgKnJpZ2h0YmxvY2s7CisgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXg7ICAgICAgIC8qIDAgPD0gbGVmdGluZGV4IDwgQkxPQ0tMRU4gKi8KKyAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXg7ICAgICAgLyogMCA8PSByaWdodGluZGV4IDwgQkxPQ0tMRU4gKi8KKyAgICBzaXplX3Qgc3RhdGU7ICAgICAgICAgICAgICAgLyogaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGluZGljZXMgbW92ZSAqLworICAgIFB5X3NzaXplX3QgbWF4bGVuOworICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKK30gZGVxdWVvYmplY3Q7CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgZGVxdWVfdHlwZTsKKwogLyogRm9yIGRlYnVnIGJ1aWxkcywgYWRkIGVycm9yIGNoZWNraW5nIHRvIHRyYWNrIHRoZSBlbmRwb2ludHMKICAqIGluIHRoZSBjaGFpbiBvZiBsaW5rcy4gIFRoZSBnb2FsIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGxpbmsKICAqIGFzc2lnbm1lbnRzIG9ubHkgdGFrZSBwbGFjZSBhdCBlbmRwb2ludHMgc28gdGhhdCBsaW5rcyBhbHJlYWR5CkBAIC03Miw4ICsxMDgsMTQgQEAKICNkZWZpbmUgQ0hFQ0tfTk9UX0VORChsaW5rKQogI2VuZGlmCiAKKy8qIFRvIHByZXZlbnQgbGVuIGZyb20gb3ZlcmZsb3dpbmcgUFlfU1NJWkVfVF9NQVgsIHdlIHJlZnVzZSB0bworICAgYWxsb2NhdGUgbmV3IGJsb2NrcyBpZiB0aGUgY3VycmVudCBsZW4gaXMgbmVhcmluZyBvdmVyZmxvdy4KKyovCisKKyNkZWZpbmUgTUFYX0RFUVVFX0xFTiAoUFlfU1NJWkVfVF9NQVggLSAzKkJMT0NLTEVOKQorCiAvKiBBIHNpbXBsZSBmcmVlbGlzdGluZyBzY2hlbWUgaXMgdXNlZCB0byBtaW5pbWl6ZSBjYWxscyB0byB0aGUgbWVtb3J5Ci0gICBhbGxvY2F0b3IuICBJdCBhY2NvbW9kYXRlcyBjb21tb24gdXNlIGNhc2VzIHdoZXJlIG5ldyBibG9ja3MgYXJlIGJlaW5nCisgICBhbGxvY2F0b3IuICBJdCBhY2NvbW1vZGF0ZXMgY29tbW9uIHVzZSBjYXNlcyB3aGVyZSBuZXcgYmxvY2tzIGFyZSBiZWluZwogICAgYWRkZWQgYXQgYWJvdXQgdGhlIHNhbWUgcmF0ZSBhcyBvbGQgYmxvY2tzIGFyZSBiZWluZyBmcmVlZC4KICAqLwogCkBAIC04NCw5ICsxMjYsNyBAQAogc3RhdGljIGJsb2NrICoKIG5ld2Jsb2NrKFB5X3NzaXplX3QgbGVuKSB7CiAgICAgYmxvY2sgKmI7Ci0gICAgLyogVG8gcHJldmVudCBsZW4gZnJvbSBvdmVyZmxvd2luZyBQWV9TU0laRV9UX01BWCwgd2UgcmVmdXNlIHRvCi0gICAgICogYWxsb2NhdGUgbmV3IGJsb2NrcyBpZiB0aGUgY3VycmVudCBsZW4gaXMgbmVhcmluZyBvdmVyZmxvdy4gKi8KLSAgICBpZiAobGVuID49IFBZX1NTSVpFX1RfTUFYIC0gMipCTE9DS0xFTikgeworICAgIGlmIChsZW4gPj0gTUFYX0RFUVVFX0xFTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYWRkIG1vcmUgYmxvY2tzIHRvIHRoZSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExNCwzNCArMTU0LDExIEBACiAgICAgfQogfQogCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfVkFSX0hFQUQKLSAgICBibG9jayAqbGVmdGJsb2NrOwotICAgIGJsb2NrICpyaWdodGJsb2NrOwotICAgIFB5X3NzaXplX3QgbGVmdGluZGV4OyAgICAgICAvKiBpbiByYW5nZShCTE9DS0xFTikgKi8KLSAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXg7ICAgICAgLyogaW4gcmFuZ2UoQkxPQ0tMRU4pICovCi0gICAgbG9uZyBzdGF0ZTsgICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBpbmRpY2VzIG1vdmUgKi8KLSAgICBQeV9zc2l6ZV90IG1heGxlbjsKLSAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCi19IGRlcXVlb2JqZWN0OwotCi0vKiBUaGUgZGVxdWUncyBzaXplIGxpbWl0IGlzIGQubWF4bGVuLiAgVGhlIGxpbWl0IGNhbiBiZSB6ZXJvIG9yIHBvc2l0aXZlLgotICogSWYgdGhlcmUgaXMgbm8gbGltaXQsIHRoZW4gZC5tYXhsZW4gPT0gLTEuCi0gKgotICogQWZ0ZXIgYW4gaXRlbSBpcyBhZGRlZCB0byBhIGRlcXVlLCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIHNpemUgaGFzIGdyb3duIHBhc3QKLSAqIHRoZSBsaW1pdC4gSWYgaXQgaGFzLCB3ZSBnZXQgdGhlIHNpemUgYmFjayBkb3duIHRvIHRoZSBsaW1pdCBieSBwb3BwaW5nIGFuCi0gKiBpdGVtIG9mZiBvZiB0aGUgb3Bwb3NpdGUgZW5kLiAgVGhlIG1ldGhvZHMgdGhhdCBjYW4gdHJpZ2dlciB0aGlzIGFyZSBhcHBlbmQoKSwKLSAqIGFwcGVuZGxlZnQoKSwgZXh0ZW5kKCksIGFuZCBleHRlbmRsZWZ0KCkuCi0gKi8KLQotI2RlZmluZSBUUklNKGQsIHBvcGZ1bmN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZC0+bWF4bGVuICE9IC0xICYmIFB5X1NJWkUoZCkgPiBkLT5tYXhsZW4pIHsgICAgICAgXAotICAgICAgICBQeU9iamVjdCAqcnYgPSBwb3BmdW5jdGlvbihkLCBOVUxMKTsgICAgICAgICAgICAgICAgXAotICAgICAgICBhc3NlcnQocnYgIT0gTlVMTCAgJiYgIFB5X1NJWkUoZCkgPD0gZC0+bWF4bGVuKTsgICAgXAotICAgICAgICBQeV9ERUNSRUYocnYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotc3RhdGljIFB5VHlwZU9iamVjdCBkZXF1ZV90eXBlOworLyogWFhYIFRvZG86CisgICBJZiBhbGlnbmVkIG1lbW9yeSBhbGxvY2F0aW9ucyBiZWNvbWUgYXZhaWxhYmxlLCBtYWtlIHRoZQorICAgZGVxdWUgb2JqZWN0IDY0IGJ5dGUgYWxpZ25lZCBzbyB0aGF0IGFsbCBvZiB0aGUgZmllbGRzCisgICBjYW4gYmUgcmV0cmlldmVkIG9yIHVwZGF0ZWQgaW4gYSBzaW5nbGUgY2FjaGUgbGluZS4KKyovCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC0xNjMsMTQgKzE4MCwxNCBAQAogICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CiAKICAgICBhc3NlcnQoQkxPQ0tMRU4gPj0gMik7CisgICAgUHlfU0laRShkZXF1ZSkgPSAwOwogICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOwogICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQ0VOVEVSICsgMTsKICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IENFTlRFUjsKLSAgICBQeV9TSVpFKGRlcXVlKSA9IDA7CiAgICAgZGVxdWUtPnN0YXRlID0gMDsKLSAgICBkZXF1ZS0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIGRlcXVlLT5tYXhsZW4gPSAtMTsKKyAgICBkZXF1ZS0+d2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWRlcXVlOwogfQpAQCAtMTkxLDEzICsyMDgsNyBAQAogICAgIGRlcXVlLT5zdGF0ZSsrOwogCiAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IC0xKSB7Ci0gICAgICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKLSAgICAgICAgICAgIC8qIHJlLWNlbnRlciBpbnN0ZWFkIG9mIGZyZWVpbmcgYSBibG9jayAqLwotICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IENFTlRFUiArIDE7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IENFTlRFUjsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpKSB7CiAgICAgICAgICAgICBwcmV2YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jay0+bGVmdGxpbms7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPnJpZ2h0YmxvY2spOwpAQCAtMjA1LDYgKzIxNiwxMiBAQAogICAgICAgICAgICAgTUFSS19FTkQocHJldmJsb2NrLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBwcmV2YmxvY2s7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKKyAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOworICAgICAgICAgICAgLyogcmUtY2VudGVyIGluc3RlYWQgb2YgZnJlZWluZyBhIGJsb2NrICovCisgICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQ0VOVEVSICsgMTsKKyAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQ0VOVEVSOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBpdGVtOwpAQCAtMjI5LDEzICsyNDYsNyBAQAogICAgIGRlcXVlLT5zdGF0ZSsrOwogCiAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOwotICAgICAgICAgICAgLyogcmUtY2VudGVyIGluc3RlYWQgb2YgZnJlZWluZyBhIGJsb2NrICovCi0gICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQ0VOVEVSICsgMTsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQ0VOVEVSOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBpZiAoUHlfU0laRShkZXF1ZSkpIHsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIHByZXZibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2stPnJpZ2h0bGluazsKICAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+bGVmdGJsb2NrKTsKQEAgLTI0Myw2ICsyNTQsMTIgQEAKICAgICAgICAgICAgIE1BUktfRU5EKHByZXZibG9jay0+bGVmdGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IHByZXZibG9jazsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOworICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CisgICAgICAgICAgICAvKiByZS1jZW50ZXIgaW5zdGVhZCBvZiBmcmVlaW5nIGEgYmxvY2sgKi8KKyAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBDRU5URVIgKyAxOworICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBDRU5URVI7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGl0ZW07CkBAIC0yNTAsMTEgKzI2Nyw0MiBAQAogCiBQeURvY19TVFJWQVIocG9wbGVmdF9kb2MsICJSZW1vdmUgYW5kIHJldHVybiB0aGUgbGVmdG1vc3QgZWxlbWVudC4iKTsKIAorLyogVGhlIGRlcXVlJ3Mgc2l6ZSBsaW1pdCBpcyBkLm1heGxlbi4gIFRoZSBsaW1pdCBjYW4gYmUgemVybyBvciBwb3NpdGl2ZS4KKyAqIElmIHRoZXJlIGlzIG5vIGxpbWl0LCB0aGVuIGQubWF4bGVuID09IC0xLgorICoKKyAqIEFmdGVyIGFuIGl0ZW0gaXMgYWRkZWQgdG8gYSBkZXF1ZSwgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBzaXplIGhhcyBncm93biBwYXN0CisgKiB0aGUgbGltaXQuIElmIGl0IGhhcywgd2UgZ2V0IHRoZSBzaXplIGJhY2sgZG93biB0byB0aGUgbGltaXQgYnkgcG9wcGluZyBhbgorICogaXRlbSBvZmYgb2YgdGhlIG9wcG9zaXRlIGVuZC4gIFRoZSBtZXRob2RzIHRoYXQgY2FuIHRyaWdnZXIgdGhpcyBhcmUgYXBwZW5kKCksCisgKiBhcHBlbmRsZWZ0KCksIGV4dGVuZCgpLCBhbmQgZXh0ZW5kbGVmdCgpLgorICovCisKK3N0YXRpYyB2b2lkCitkZXF1ZV90cmltX3JpZ2h0KGRlcXVlb2JqZWN0ICpkZXF1ZSkKK3sKKyAgICBpZiAoZGVxdWUtPm1heGxlbiAhPSAtMSAmJiBQeV9TSVpFKGRlcXVlKSA+IGRlcXVlLT5tYXhsZW4pIHsKKyAgICAgICAgUHlPYmplY3QgKnJ2ID0gZGVxdWVfcG9wKGRlcXVlLCBOVUxMKTsKKyAgICAgICAgYXNzZXJ0KHJ2ICE9IE5VTEwpOworICAgICAgICBhc3NlcnQoUHlfU0laRShkZXF1ZSkgPD0gZGVxdWUtPm1heGxlbik7CisgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZGVxdWVfdHJpbV9sZWZ0KGRlcXVlb2JqZWN0ICpkZXF1ZSkKK3sKKyAgICBpZiAoZGVxdWUtPm1heGxlbiAhPSAtMSAmJiBQeV9TSVpFKGRlcXVlKSA+IGRlcXVlLT5tYXhsZW4pIHsKKyAgICAgICAgUHlPYmplY3QgKnJ2ID0gZGVxdWVfcG9wbGVmdChkZXF1ZSwgTlVMTCk7CisgICAgICAgIGFzc2VydChydiAhPSBOVUxMKTsKKyAgICAgICAgYXNzZXJ0KFB5X1NJWkUoZGVxdWUpIDw9IGRlcXVlLT5tYXhsZW4pOworICAgICAgICBQeV9ERUNSRUYocnYpOworICAgIH0KK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlX2FwcGVuZChkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICppdGVtKQogewogICAgIGRlcXVlLT5zdGF0ZSsrOwotICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTi0xKSB7CisgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOIC0gMSkgewogICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgaWYgKGIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjY5LDcgKzMxNyw3IEBACiAgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICBkZXF1ZS0+cmlnaHRpbmRleCsrOwogICAgIGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XSA9IGl0ZW07Ci0gICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wbGVmdCk7CisgICAgZGVxdWVfdHJpbV9sZWZ0KGRlcXVlKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjk0LDcgKzM0Miw3IEBACiAgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICBkZXF1ZS0+bGVmdGluZGV4LS07CiAgICAgZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSA9IGl0ZW07Ci0gICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wKTsKKyAgICBkZXF1ZV90cmltX3JpZ2h0KGRlcXVlKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMzUwLDcgKzM5OCw3IEBACiAKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgZGVxdWUtPnN0YXRlKys7Ci0gICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTi0xKSB7CisgICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTiAtIDEpIHsKICAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKQEAgLTM2NywxMSArNDE1LDEzIEBACiAgICAgICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4Kys7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XSA9IGl0ZW07Ci0gICAgICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcGxlZnQpOworICAgICAgICBkZXF1ZV90cmltX2xlZnQoZGVxdWUpOworICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYoaXQpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfREVDUkVGKGl0KTsKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTQyOCwxMSArNDc4LDEzIEBACiAgICAgICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXgtLTsKICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSA9IGl0ZW07Ci0gICAgICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcCk7CisgICAgICAgIGRlcXVlX3RyaW1fcmlnaHQoZGVxdWUpOworICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYoaXQpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfREVDUkVGKGl0KTsKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTQ0NywxMSArNDk5LDE1MSBAQAogICAgIHJlc3VsdCA9IGRlcXVlX2V4dGVuZChkZXF1ZSwgb3RoZXIpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICBQeV9JTkNSRUYoZGVxdWUpOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilkZXF1ZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICpkZXF1ZV9jb3B5KFB5T2JqZWN0ICpkZXF1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkZXF1ZV9jb25jYXQoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqb3RoZXIpCit7CisgICAgUHlPYmplY3QgKm5ld19kZXF1ZSwgKnJlc3VsdDsKKyAgICBpbnQgcnY7CisKKyAgICBydiA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob3RoZXIsIChQeU9iamVjdCAqKSZkZXF1ZV90eXBlKTsKKyAgICBpZiAocnYgPD0gMCkgeworICAgICAgICBpZiAocnYgPT0gMCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuIG9ubHkgY29uY2F0ZW5hdGUgZGVxdWUgKG5vdCBcIiUuMjAwc1wiKSB0byBkZXF1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXItPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG5ld19kZXF1ZSA9IGRlcXVlX2NvcHkoKFB5T2JqZWN0ICopZGVxdWUpOworICAgIGlmIChuZXdfZGVxdWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gZGVxdWVfZXh0ZW5kKChkZXF1ZW9iamVjdCAqKW5ld19kZXF1ZSwgb3RoZXIpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobmV3X2RlcXVlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiBuZXdfZGVxdWU7Cit9CisKK3N0YXRpYyB2b2lkIGRlcXVlX2NsZWFyKGRlcXVlb2JqZWN0ICpkZXF1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkZXF1ZV9yZXBlYXQoZGVxdWVvYmplY3QgKmRlcXVlLCBQeV9zc2l6ZV90IG4pCit7CisgICAgZGVxdWVvYmplY3QgKm5ld19kZXF1ZTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworCisgICAgLyogWFhYIGFkZCBhIHNwZWNpYWwgY2FzZSBmb3Igd2hlbiBtYXhsZW4gaXMgZGVmaW5lZCAqLworICAgIGlmIChuIDwgMCkKKyAgICAgICAgbiA9IDA7CisgICAgZWxzZSBpZiAobiA+IDAgJiYgUHlfU0laRShkZXF1ZSkgPiBNQVhfREVRVUVfTEVOIC8gbikKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisKKyAgICBuZXdfZGVxdWUgPSAoZGVxdWVvYmplY3QgKilkZXF1ZV9uZXcoJmRlcXVlX3R5cGUsIChQeU9iamVjdCAqKU5VTEwsIChQeU9iamVjdCAqKU5VTEwpOworICAgIG5ld19kZXF1ZS0+bWF4bGVuID0gZGVxdWUtPm1heGxlbjsKKworICAgIGZvciAoIDsgbiA7IG4tLSkgeworICAgICAgICByZXN1bHQgPSBkZXF1ZV9leHRlbmQobmV3X2RlcXVlLCAoUHlPYmplY3QgKilkZXF1ZSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKG5ld19kZXF1ZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld19kZXF1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RlcXVlX2lucGxhY2VfcmVwZWF0KGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlfc3NpemVfdCBuKQoreworICAgIFB5X3NzaXplX3QgaSwgc2l6ZTsKKyAgICBQeU9iamVjdCAqc2VxOworICAgIFB5T2JqZWN0ICpydjsKKworICAgIHNpemUgPSBQeV9TSVpFKGRlcXVlKTsKKyAgICBpZiAoc2l6ZSA9PSAwIHx8IG4gPT0gMSkgeworICAgICAgICBQeV9JTkNSRUYoZGVxdWUpOworICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopZGVxdWU7CisgICAgfQorCisgICAgaWYgKG4gPD0gMCkgeworICAgICAgICBkZXF1ZV9jbGVhcihkZXF1ZSk7CisgICAgICAgIFB5X0lOQ1JFRihkZXF1ZSk7CisgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilkZXF1ZTsKKyAgICB9CisKKyAgICBpZiAoc2l6ZSA+IE1BWF9ERVFVRV9MRU4gLyBuKSB7CisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIH0KKworICAgIGlmIChzaXplID09IDEpIHsKKyAgICAgICAgLyogY29tbW9uIGNhc2UsIHJlcGVhdGluZyBhIHNpbmdsZSBlbGVtZW50ICovCisgICAgICAgIFB5T2JqZWN0ICppdGVtID0gZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XTsKKworICAgICAgICBpZiAoZGVxdWUtPm1heGxlbiAhPSAtMSAmJiBuID4gZGVxdWUtPm1heGxlbikKKyAgICAgICAgICAgIG4gPSBkZXF1ZS0+bWF4bGVuOworCisgICAgICAgIGZvciAoaSA9IDAgOyBpIDwgbi0xIDsgaSsrKSB7CisgICAgICAgICAgICBydiA9IGRlcXVlX2FwcGVuZChkZXF1ZSwgaXRlbSk7CisgICAgICAgICAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKGRlcXVlKTsKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKWRlcXVlOworICAgIH0KKworICAgIHNlcSA9IFB5U2VxdWVuY2VfTGlzdCgoUHlPYmplY3QgKilkZXF1ZSk7CisgICAgaWYgKHNlcSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gc2VxOworCisgICAgZm9yIChpID0gMCA7IGkgPCBuLTEgOyBpKyspIHsKKyAgICAgICAgcnYgPSBkZXF1ZV9leHRlbmQoZGVxdWUsIHNlcSk7CisgICAgICAgIGlmIChydiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihydik7CisgICAgfQorICAgIFB5X0lOQ1JFRihkZXF1ZSk7CisgICAgUHlfREVDUkVGKHNlcSk7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKWRlcXVlOworfQorCisvKiBUaGUgcm90YXRlKCkgbWV0aG9kIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgYW5kIGlzIHVzZWQgaW50ZXJuYWxseQorYXMgYSBwcmltaXRpdmUgZm9yIG90aGVyIG1ldGhvZHMuCisKK1JvdGF0aW9uIGJ5IDEgb3IgLTEgaXMgYSBjb21tb24gY2FzZSwgc28gYW55IG9wdGltaXphdGlvbnMgZm9yIGhpZ2gKK3ZvbHVtZSByb3RhdGlvbnMgc2hvdWxkIHRha2UgY2FyZSBub3QgdG8gcGVuYWxpemUgdGhlIGNvbW1vbiBjYXNlLgorCitDb25jZXB0dWFsbHksIGEgcm90YXRlIGJ5IG9uZSBpcyBlcXVpdmFsZW50IHRvIGEgcG9wIG9uIG9uZSBzaWRlIGFuZCBhbgorYXBwZW5kIG9uIHRoZSBvdGhlci4gIEhvd2V2ZXIsIGEgcG9wL2FwcGVuZCBwYWlyIGlzIHVubmVjZXNzYXJpbHkgc2xvdworYmVjYXVzZSBpdCByZXF1aXJlcyBhbiBpbmNyZWYvZGVjcmVmIHBhaXIgZm9yIGFuIG9iamVjdCBsb2NhdGVkIHJhbmRvbWx5CitpbiBtZW1vcnkuICBJdCBpcyBiZXR0ZXIgdG8ganVzdCBtb3ZlIHRoZSBvYmplY3QgcG9pbnRlciBmcm9tIG9uZSBibG9jawordG8gdGhlIG5leHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVmZXJlbmNlIGNvdW50LgorCitXaGVuIG1vdmluZyBiYXRjaGVzIG9mIHBvaW50ZXJzLCBpdCBpcyB0ZW1wdGluZyB0byB1c2UgbWVtY3B5KCkgYnV0IHRoYXQKK3Byb3ZlZCB0byBiZSBzbG93ZXIgdGhhbiBhIHNpbXBsZSBsb29wIGZvciBhIHZhcmlldHkgb2YgcmVhc29ucy4KK01lbWNweSgpIGNhbm5vdCBrbm93IGluIGFkdmFuY2UgdGhhdCB3ZSdyZSBjb3B5aW5nIHBvaW50ZXJzIGluc3RlYWQgb2YKK2J5dGVzLCB0aGF0IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBwb2ludGVyIGFsaWduZWQgYW5kCitub24tb3ZlcmxhcHBpbmcsIHRoYXQgbW92aW5nIGp1c3Qgb25lIHBvaW50ZXIgaXMgYSBjb21tb24gY2FzZSwgdGhhdCB3ZQorbmV2ZXIgbmVlZCB0byBtb3ZlIG1vcmUgdGhhbiBCTE9DS0xFTiBwb2ludGVycywgYW5kIHRoYXQgYXQgbGVhc3Qgb25lCitwb2ludGVyIGlzIGFsd2F5cyBtb3ZlZC4KKworRm9yIGhpZ2ggdm9sdW1lIHJvdGF0aW9ucywgbmV3YmxvY2soKSBhbmQgZnJlZWJsb2NrKCkgYXJlIG5ldmVyIGNhbGxlZAorbW9yZSB0aGFuIG9uY2UuICBQcmV2aW91c2x5IGVtcHRpZWQgYmxvY2tzIGFyZSBpbW1lZGlhdGVseSByZXVzZWQgYXMgYQorZGVzdGluYXRpb24gYmxvY2suICBJZiBhIGJsb2NrIGlzIGxlZnQtb3ZlciBhdCB0aGUgZW5kLCBpdCBpcyBmcmVlZC4KKyovCisKIHN0YXRpYyBpbnQKIF9kZXF1ZV9yb3RhdGUoZGVxdWVvYmplY3QgKmRlcXVlLCBQeV9zc2l6ZV90IG4pCiB7CkBAIC01MDEsMTMgKzY5MywxMyBAQAogICAgICAgICAgICAgaWYgKG0gPiBsZWZ0aW5kZXgpCiAgICAgICAgICAgICAgICAgbSA9IGxlZnRpbmRleDsKICAgICAgICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOwotICAgICAgICAgICAgc3JjID0gJnJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleF07Ci0gICAgICAgICAgICBkZXN0ID0gJmxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXggLSAxXTsKICAgICAgICAgICAgIHJpZ2h0aW5kZXggLT0gbTsKICAgICAgICAgICAgIGxlZnRpbmRleCAtPSBtOworICAgICAgICAgICAgc3JjID0gJnJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleCArIDFdOworICAgICAgICAgICAgZGVzdCA9ICZsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKICAgICAgICAgICAgIG4gLT0gbTsKICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAqKGRlc3QtLSkgPSAqKHNyYy0tKTsKKyAgICAgICAgICAgICAgICAqKGRlc3QrKykgPSAqKHNyYysrKTsKICAgICAgICAgICAgIH0gd2hpbGUgKC0tbSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gLTEpIHsKQEAgLTU4Myw3ICs3NzUsNyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpyb3RhdGUiLCAmbikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChfZGVxdWVfcm90YXRlKGRlcXVlLCBuKSA9PSAwKQorICAgIGlmICghX2RlcXVlX3JvdGF0ZShkZXF1ZSwgbikpCiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNTk4LDcgKzc5MCw3IEBACiAgICAgYmxvY2sgKnJpZ2h0YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CiAgICAgUHlfc3NpemVfdCByaWdodGluZGV4ID0gZGVxdWUtPnJpZ2h0aW5kZXg7Ci0gICAgUHlfc3NpemVfdCBuID0gKFB5X1NJWkUoZGVxdWUpKS8yOworICAgIFB5X3NzaXplX3QgbiA9IFB5X1NJWkUoZGVxdWUpIC8gMjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnRtcDsKIApAQCAtNjQxLDggKzgzMyw4IEBACiAgICAgUHlfc3NpemVfdCBuID0gUHlfU0laRShkZXF1ZSk7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgY291bnQgPSAwOworICAgIHNpemVfdCBzdGFydF9zdGF0ZSA9IGRlcXVlLT5zdGF0ZTsKICAgICBQeU9iamVjdCAqaXRlbTsKLSAgICBsb25nIHN0YXJ0X3N0YXRlID0gZGVxdWUtPnN0YXRlOwogICAgIGludCBjbXA7CiAKICAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgewpAQCAtNjczLDYgKzg2NSwzOCBAQAogUHlEb2NfU1RSVkFSKGNvdW50X2RvYywKICJELmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUiKTsKIAorc3RhdGljIGludAorZGVxdWVfY29udGFpbnMoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqdikKK3sKKyAgICBibG9jayAqYiA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CisgICAgUHlfc3NpemVfdCBuID0gUHlfU0laRShkZXF1ZSk7CisgICAgUHlfc3NpemVfdCBpOworICAgIHNpemVfdCBzdGFydF9zdGF0ZSA9IGRlcXVlLT5zdGF0ZTsKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBpbnQgY21wOworCisgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChiKTsKKyAgICAgICAgaXRlbSA9IGItPmRhdGFbaW5kZXhdOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbSwgdiwgUHlfRVEpOworICAgICAgICBpZiAoY21wKSB7CisgICAgICAgICAgICByZXR1cm4gY21wOworICAgICAgICB9CisgICAgICAgIGlmIChzdGFydF9zdGF0ZSAhPSBkZXF1ZS0+c3RhdGUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlcXVlIG11dGF0ZWQgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGluZGV4Kys7CisgICAgICAgIGlmIChpbmRleCA9PSBCTE9DS0xFTikgeworICAgICAgICAgICAgYiA9IGItPnJpZ2h0bGluazsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIFB5X3NzaXplX3QKIGRlcXVlX2xlbihkZXF1ZW9iamVjdCAqZGVxdWUpCiB7CkBAIC02ODAsNiArOTA0LDEwNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZGVxdWVfaW5kZXgoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IGksIHN0YXJ0PTAsIHN0b3A9UHlfU0laRShkZXF1ZSk7CisgICAgUHlPYmplY3QgKnYsICppdGVtOworICAgIGJsb2NrICpiID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBzaXplX3Qgc3RhcnRfc3RhdGUgPSBkZXF1ZS0+c3RhdGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TyZPJjppbmRleCIsICZ2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlFdmFsX1NsaWNlSW5kZXgsICZzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5RXZhbF9TbGljZUluZGV4LCAmc3RvcCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzdGFydCA8IDApIHsKKyAgICAgICAgc3RhcnQgKz0gUHlfU0laRShkZXF1ZSk7CisgICAgICAgIGlmIChzdGFydCA8IDApCisgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgfQorICAgIGlmIChzdG9wIDwgMCkgeworICAgICAgICBzdG9wICs9IFB5X1NJWkUoZGVxdWUpOworICAgICAgICBpZiAoc3RvcCA8IDApCisgICAgICAgICAgICBzdG9wID0gMDsKKyAgICB9CisgICAgaWYgKHN0b3AgPiBQeV9TSVpFKGRlcXVlKSkKKyAgICAgICAgc3RvcCA9IFB5X1NJWkUoZGVxdWUpOworCisgICAgZm9yIChpPTAgOyBpPHN0b3AgOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPj0gc3RhcnQpIHsKKyAgICAgICAgICAgIGludCBjbXA7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKGIpOworICAgICAgICAgICAgaXRlbSA9IGItPmRhdGFbaW5kZXhdOworICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0sIHYsIFB5X0VRKTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoaSk7CisgICAgICAgICAgICBlbHNlIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgaWYgKHN0YXJ0X3N0YXRlICE9IGRlcXVlLT5zdGF0ZSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXF1ZSBtdXRhdGVkIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbmRleCsrOworICAgICAgICBpZiAoaW5kZXggPT0gQkxPQ0tMRU4pIHsKKyAgICAgICAgICAgIGIgPSBiLT5yaWdodGxpbms7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICIlUiBpcyBub3QgaW4gZGVxdWUiLCB2KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlEb2NfU1RSVkFSKGluZGV4X2RvYywKKyJELmluZGV4KHZhbHVlLCBbc3RhcnQsIFtzdG9wXV0pIC0+IGludGVnZXIgLS0gcmV0dXJuIGZpcnN0IGluZGV4IG9mIHZhbHVlLlxuIgorIlJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4iKTsKKworLyogaW5zZXJ0KCksIHJlbW92ZSgpLCBhbmQgZGVsaXRlbSgpIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZgorICAgcm90YXRlKCkgZm9yIHNpbXBsaWNpdHkgYW5kIHJlYXNvbmFibGUgcGVyZm9ybWFuY2UgbmVhciB0aGUgZW5kCisgICBwb2ludHMuICBJZiBmb3Igc29tZSByZWFzb24gdGhlc2UgbWV0aG9kcyBiZWNvbWUgcG9wdWxhciwgaXQgaXMgbm90CisgICBoYXJkIHRvIHJlLWltcGxlbWVudCB0aGlzIHVzaW5nIGRpcmVjdCBkYXRhIG1vdmVtZW50IChzaW1pbGFyIHRvCisgICB0aGUgY29kZSB1c2VkIGluIGxpc3Qgc2xpY2UgYXNzaWdubWVudHMpIGFuZCBhY2hpZXZlIGEgcGVyZm9ybWFuY2UKKyAgIGJvb3N0IChieSBtb3ZpbmcgZWFjaCBwb2ludGVyIG9ubHkgb25jZSBpbnN0ZWFkIG9mIHR3aWNlKS4KKyovCisKK3N0YXRpYyBQeU9iamVjdCAqCitkZXF1ZV9pbnNlcnQoZGVxdWVvYmplY3QgKmRlcXVlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IGluZGV4OworICAgIFB5X3NzaXplX3QgbiA9IFB5X1NJWkUoZGVxdWUpOworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKyAgICBQeU9iamVjdCAqcnY7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIm5POmluc2VydCIsICZpbmRleCwgJnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGRlcXVlLT5tYXhsZW4gPT0gUHlfU0laRShkZXF1ZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJkZXF1ZSBhbHJlYWR5IGF0IGl0cyBtYXhpbXVtIHNpemUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChpbmRleCA+PSBuKQorICAgICAgICByZXR1cm4gZGVxdWVfYXBwZW5kKGRlcXVlLCB2YWx1ZSk7CisgICAgaWYgKGluZGV4IDw9IC1uIHx8IGluZGV4ID09IDApCisgICAgICAgIHJldHVybiBkZXF1ZV9hcHBlbmRsZWZ0KGRlcXVlLCB2YWx1ZSk7CisgICAgaWYgKF9kZXF1ZV9yb3RhdGUoZGVxdWUsIC1pbmRleCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChpbmRleCA8IDApCisgICAgICAgIHJ2ID0gZGVxdWVfYXBwZW5kKGRlcXVlLCB2YWx1ZSk7CisgICAgZWxzZQorICAgICAgICBydiA9IGRlcXVlX2FwcGVuZGxlZnQoZGVxdWUsIHZhbHVlKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfREVDUkVGKHJ2KTsKKyAgICBpZiAoX2RlcXVlX3JvdGF0ZShkZXF1ZSwgaW5kZXgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGluc2VydF9kb2MsCisiRC5pbnNlcnQoaW5kZXgsIG9iamVjdCkgLS0gaW5zZXJ0IG9iamVjdCBiZWZvcmUgaW5kZXgiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlX3JlbW92ZShkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeV9zc2l6ZV90IGksIG49UHlfU0laRShkZXF1ZSk7CkBAIC03MTcsMTYgKzEwNDAsODMgQEAKIHN0YXRpYyB2b2lkCiBkZXF1ZV9jbGVhcihkZXF1ZW9iamVjdCAqZGVxdWUpCiB7CisgICAgYmxvY2sgKmI7CisgICAgYmxvY2sgKnByZXZibG9jazsKKyAgICBibG9jayAqbGVmdGJsb2NrOworICAgIFB5X3NzaXplX3QgbGVmdGluZGV4OworICAgIFB5X3NzaXplX3QgbjsKICAgICBQeU9iamVjdCAqaXRlbTsKIAorICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBEdXJpbmcgdGhlIHByb2Nlc3Mgb2YgY2xlYXJpbmcgYSBkZXF1ZSwgZGVjcmVmcyBjYW4gY2F1c2UgdGhlCisgICAgICAgZGVxdWUgdG8gbXV0YXRlLiAgVG8gYXZvaWQgZmF0YWwgY29uZnVzaW9uLCB3ZSBoYXZlIHRvIG1ha2UgdGhlCisgICAgICAgZGVxdWUgZW1wdHkgYmVmb3JlIGNsZWFyaW5nIHRoZSBibG9ja3MgYW5kIG5ldmVyIHJlZmVyIHRvCisgICAgICAgYW55dGhpbmcgdmlhIGRlcXVlLT5yZWYgd2hpbGUgY2xlYXJpbmcuICAoVGhpcyBpcyB0aGUgc2FtZQorICAgICAgIHRlY2huaXF1ZSB1c2VkIGZvciBjbGVhcmluZyBsaXN0cywgc2V0cywgYW5kIGRpY3RzLikKKworICAgICAgIE1ha2luZyB0aGUgZGVxdWUgZW1wdHkgcmVxdWlyZXMgYWxsb2NhdGluZyBhIG5ldyBlbXB0eSBibG9jay4gIEluCisgICAgICAgdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgbWVtb3J5IGlzIGZ1bGwsIHdlIGZhbGwgYmFjayB0byBhbgorICAgICAgIGFsdGVybmF0ZSBtZXRob2QgdGhhdCBkb2Vzbid0IHJlcXVpcmUgYSBuZXcgYmxvY2suICBSZXBlYXRpbmcKKyAgICAgICBwb3BzIGluIGEgd2hpbGUtbG9vcCBpcyBzbG93ZXIsIHBvc3NpYmx5IHJlLWVudHJhbnQgKGFuZCBhIGNsZXZlcgorICAgICAgIGFkdmVyc2FyeSBjb3VsZCBjYXVzZSBpdCB0byBuZXZlciB0ZXJtaW5hdGUpLgorICAgICovCisKKyAgICBiID0gbmV3YmxvY2soMCk7CisgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBnb3RvIGFsdGVybmF0ZV9tZXRob2Q7CisgICAgfQorCisgICAgLyogUmVtZW1iZXIgdGhlIG9sZCBzaXplLCBsZWZ0YmxvY2ssIGFuZCBsZWZ0aW5kZXggKi8KKyAgICBsZWZ0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgIGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CisgICAgbiA9IFB5X1NJWkUoZGVxdWUpOworCisgICAgLyogU2V0IHRoZSBkZXF1ZSB0byBiZSBlbXB0eSB1c2luZyB0aGUgbmV3bHkgYWxsb2NhdGVkIGJsb2NrICovCisgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOworICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CisgICAgUHlfU0laRShkZXF1ZSkgPSAwOworICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOworICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKKyAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQ0VOVEVSICsgMTsKKyAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IENFTlRFUjsKKyAgICBkZXF1ZS0+c3RhdGUrKzsKKworICAgIC8qIE5vdyB0aGUgb2xkIHNpemUsIGxlZnRibG9jaywgYW5kIGxlZnRpbmRleCBhcmUgZGlzY29ubmVjdGVkIGZyb20KKyAgICAgICB0aGUgZW1wdHkgZGVxdWUgYW5kIHdlIGNhbiB1c2UgdGhlbSB0byBkZWNyZWYgdGhlIHBvaW50ZXJzLgorICAgICovCisgICAgd2hpbGUgKG4tLSkgeworICAgICAgICBpdGVtID0gbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgbGVmdGluZGV4Kys7CisgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4gJiYgbikgeworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChsZWZ0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICBwcmV2YmxvY2sgPSBsZWZ0YmxvY2s7CisgICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKKyAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CisgICAgICAgICAgICBmcmVlYmxvY2socHJldmJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDSEVDS19FTkQobGVmdGJsb2NrLT5yaWdodGxpbmspOworICAgIGZyZWVibG9jayhsZWZ0YmxvY2spOworICAgIHJldHVybjsKKworICBhbHRlcm5hdGVfbWV0aG9kOgogICAgIHdoaWxlIChQeV9TSVpFKGRlcXVlKSkgewogICAgICAgICBpdGVtID0gZGVxdWVfcG9wKGRlcXVlLCBOVUxMKTsKICAgICAgICAgYXNzZXJ0IChpdGVtICE9IE5VTEwpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgfQotICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrICYmCi0gICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggLSAxID09IGRlcXVlLT5yaWdodGluZGV4ICYmCi0gICAgICAgICAgIFB5X1NJWkUoZGVxdWUpID09IDApOworfQorCitzdGF0aWMgaW50Cit2YWxpZF9pbmRleChQeV9zc2l6ZV90IGksIFB5X3NzaXplX3QgbGltaXQpCit7CisgICAgLyogVGhlIGNhc3QgdG8gc2l6ZV90IGxldCB1cyB1c2UganVzdCBhIHNpbmdsZSBjb21wYXJpc29uCisgICAgICAgdG8gY2hlY2sgd2hldGhlciBpIGlzIGluIHRoZSByYW5nZTogMCA8PSBpIDwgbGltaXQgKi8KKyAgICByZXR1cm4gKHNpemVfdCkgaSA8IChzaXplX3QpIGxpbWl0OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzM2LDkgKzExMjYsOCBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIFB5X3NzaXplX3QgbiwgaW5kZXg9aTsKIAotICAgIGlmIChpIDwgMCB8fCBpID49IFB5X1NJWkUoZGVxdWUpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImRlcXVlIGluZGV4IG91dCBvZiByYW5nZSIpOworICAgIGlmICghdmFsaWRfaW5kZXgoaSwgUHlfU0laRShkZXF1ZSkpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiZGVxdWUgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNzUwLDE0ICsxMTM5LDE2IEBACiAgICAgICAgIGIgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICB9IGVsc2UgewogICAgICAgICBpICs9IGRlcXVlLT5sZWZ0aW5kZXg7Ci0gICAgICAgIG4gPSBpIC8gQkxPQ0tMRU47Ci0gICAgICAgIGkgJT0gQkxPQ0tMRU47CisgICAgICAgIG4gPSAoUHlfc3NpemVfdCkoKHNpemVfdCkgaSAvIEJMT0NLTEVOKTsKKyAgICAgICAgaSA9IChQeV9zc2l6ZV90KSgoc2l6ZV90KSBpICUgQkxPQ0tMRU4pOwogICAgICAgICBpZiAoaW5kZXggPCAoUHlfU0laRShkZXF1ZSkgPj4gMSkpIHsKICAgICAgICAgICAgIGIgPSBkZXF1ZS0+bGVmdGJsb2NrOwogICAgICAgICAgICAgd2hpbGUgKG4tLSkKICAgICAgICAgICAgICAgICBiID0gYi0+cmlnaHRsaW5rOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbiA9IChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgLSAxKSAvIEJMT0NLTEVOIC0gbjsKKyAgICAgICAgICAgIG4gPSAoUHlfc3NpemVfdCkoCisgICAgICAgICAgICAgICAgICAgICgoc2l6ZV90KShkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgLyBCTE9DS0xFTiAtIG4pOwogICAgICAgICAgICAgYiA9IGRlcXVlLT5yaWdodGJsb2NrOwogICAgICAgICAgICAgd2hpbGUgKG4tLSkKICAgICAgICAgICAgICAgICBiID0gYi0+bGVmdGxpbms7CkBAIC03NjgsMTMgKzExNTksNiBAQAogICAgIHJldHVybiBpdGVtOwogfQogCi0vKiBkZWxpdGVtKCkgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2Ygcm90YXRlIGZvciBzaW1wbGljaXR5IGFuZCByZWFzb25hYmxlCi0gICBwZXJmb3JtYW5jZSBuZWFyIHRoZSBlbmQgcG9pbnRzLiAgSWYgZm9yIHNvbWUgcmVhc29uIHRoaXMgbWV0aG9kIGJlY29tZXMKLSAgIHBvcHVsYXIsIGl0IGlzIG5vdCBoYXJkIHRvIHJlLWltcGxlbWVudCB0aGlzIHVzaW5nIGRpcmVjdCBkYXRhIG1vdmVtZW50Ci0gICAoc2ltaWxhciB0byBjb2RlIGluIGxpc3Qgc2xpY2UgYXNzaWdubWVudCkgYW5kIGFjaGlldmUgYSB0d28gb3IgdGhyZWVmb2xkCi0gICBwZXJmb3JtYW5jZSBib29zdC4KLSovCi0KIHN0YXRpYyBpbnQKIGRlcXVlX2RlbF9pdGVtKGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlfc3NpemVfdCBpKQogewpAQCAtNzk4LDIzICsxMTgyLDI0IEBACiAgICAgYmxvY2sgKmI7CiAgICAgUHlfc3NpemVfdCBuLCBsZW49UHlfU0laRShkZXF1ZSksIGhhbGZsZW49KGxlbisxKT4+MSwgaW5kZXg9aTsKIAotICAgIGlmIChpIDwgMCB8fCBpID49IGxlbikgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJkZXF1ZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICBpZiAoIXZhbGlkX2luZGV4KGksIGxlbikpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJkZXF1ZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gZGVxdWVfZGVsX2l0ZW0oZGVxdWUsIGkpOwogCiAgICAgaSArPSBkZXF1ZS0+bGVmdGluZGV4OwotICAgIG4gPSBpIC8gQkxPQ0tMRU47Ci0gICAgaSAlPSBCTE9DS0xFTjsKKyAgICBuID0gKFB5X3NzaXplX3QpKChzaXplX3QpIGkgLyBCTE9DS0xFTik7CisgICAgaSA9IChQeV9zc2l6ZV90KSgoc2l6ZV90KSBpICUgQkxPQ0tMRU4pOwogICAgIGlmIChpbmRleCA8PSBoYWxmbGVuKSB7CiAgICAgICAgIGIgPSBkZXF1ZS0+bGVmdGJsb2NrOwogICAgICAgICB3aGlsZSAobi0tKQogICAgICAgICAgICAgYiA9IGItPnJpZ2h0bGluazsKICAgICB9IGVsc2UgewotICAgICAgICBuID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBsZW4gLSAxKSAvIEJMT0NLTEVOIC0gbjsKKyAgICAgICAgbiA9IChQeV9zc2l6ZV90KSgKKyAgICAgICAgICAgICAgICAoKHNpemVfdCkoZGVxdWUtPmxlZnRpbmRleCArIFB5X1NJWkUoZGVxdWUpIC0gMSkpCisgICAgICAgICAgICAgICAgLyBCTE9DS0xFTiAtIG4pOwogICAgICAgICBiID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgICAgIHdoaWxlIChuLS0pCiAgICAgICAgICAgICBiID0gYi0+bGVmdGxpbms7CkBAIC05MzYsMTMgKzEzMjEsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICgoKGRlcXVlb2JqZWN0ICopZGVxdWUpLT5tYXhsZW4gIT0gLTEpCi0KICAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoImRlcXVlKCVSLCBtYXhsZW49JXpkKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbGlzdCwgKChkZXF1ZW9iamVjdCAqKWRlcXVlKS0+bWF4bGVuKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJkZXF1ZSglUikiLCBhc2xpc3QpOwotICAgIFB5X0RFQ1JFRihhc2xpc3QpOwogICAgIFB5X1JlcHJMZWF2ZShkZXF1ZSk7CisgICAgUHlfREVDUkVGKGFzbGlzdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTA0NCw3ICsxNDI4LDggQEAKICAgICAgICAgfQogICAgIH0KICAgICBkZXF1ZS0+bWF4bGVuID0gbWF4bGVuOwotICAgIGRlcXVlX2NsZWFyKGRlcXVlKTsKKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPiAwKQorICAgICAgICBkZXF1ZV9jbGVhcihkZXF1ZSk7CiAgICAgaWYgKGl0ZXJhYmxlICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKnJ2ID0gZGVxdWVfZXh0ZW5kKGRlcXVlLCBpdGVyYWJsZSk7CiAgICAgICAgIGlmIChydiA9PSBOVUxMKQpAQCAtMTA2MCw3ICsxNDQ1LDcgQEAKICAgICBQeV9zc2l6ZV90IHJlczsKICAgICBQeV9zc2l6ZV90IGJsb2NrczsKIAotICAgIHJlcyA9IHNpemVvZihkZXF1ZW9iamVjdCk7CisgICAgcmVzID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRShkZXF1ZSkpOwogICAgIGJsb2NrcyA9IChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgKyBCTE9DS0xFTiAtIDEpIC8gQkxPQ0tMRU47CiAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggKyBQeV9TSVpFKGRlcXVlKSAtIDEgPT0KICAgICAgICAgICAgKGJsb2NrcyAtIDEpICogQkxPQ0tMRU4gKyBkZXF1ZS0+cmlnaHRpbmRleCk7CkBAIC0xMDcxLDYgKzE0NTYsMTIgQEAKIFB5RG9jX1NUUlZBUihzaXplb2ZfZG9jLAogIkQuX19zaXplb2ZfXygpIC0tIHNpemUgb2YgRCBpbiBtZW1vcnksIGluIGJ5dGVzIik7CiAKK3N0YXRpYyBpbnQKK2RlcXVlX2Jvb2woZGVxdWVvYmplY3QgKmRlcXVlKQoreworICAgIHJldHVybiBQeV9TSVpFKGRlcXVlKSAhPSAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogZGVxdWVfZ2V0X21heGxlbihkZXF1ZW9iamVjdCAqZGVxdWUpCiB7CkBAIC0xMDc5LDYgKzE0NzAsOSBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoZGVxdWUtPm1heGxlbik7CiB9CiAKKworLyogZGVxdWUgb2JqZWN0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgUHlHZXRTZXREZWYgZGVxdWVfZ2V0c2V0W10gPSB7CiAgICAgeyJtYXhsZW4iLCAoZ2V0dGVyKWRlcXVlX2dldF9tYXhsZW4sIChzZXR0ZXIpTlVMTCwKICAgICAgIm1heGltdW0gc2l6ZSBvZiBhIGRlcXVlIG9yIE5vbmUgaWYgdW5ib3VuZGVkIn0sCkBAIC0xMDg3LDE5ICsxNDgxLDMwIEBACiAKIHN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBkZXF1ZV9hc19zZXF1ZW5jZSA9IHsKICAgICAobGVuZnVuYylkZXF1ZV9sZW4sICAgICAgICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KKyAgICAoYmluYXJ5ZnVuYylkZXF1ZV9jb25jYXQsICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KKyAgICAoc3NpemVhcmdmdW5jKWRlcXVlX3JlcGVhdCwgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KICAgICAoc3NpemVhcmdmdW5jKWRlcXVlX2l0ZW0sICAgICAgICAgICAvKiBzcV9pdGVtICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3Ffc2xpY2UgKi8KLSAgICAoc3NpemVvYmphcmdwcm9jKWRlcXVlX2Fzc19pdGVtLCAgICAgICAgICAgIC8qIHNxX2Fzc19pdGVtICovCisgICAgKHNzaXplb2JqYXJncHJvYylkZXF1ZV9hc3NfaXRlbSwgICAgLyogc3FfYXNzX2l0ZW0gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9hc3Nfc2xpY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb250YWlucyAqLwotICAgIChiaW5hcnlmdW5jKWRlcXVlX2lucGxhY2VfY29uY2F0LCAgICAgICAgICAgLyogc3FfaW5wbGFjZV9jb25jYXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9pbnBsYWNlX3JlcGVhdCAqLwotCisgICAgKG9iam9ianByb2MpZGVxdWVfY29udGFpbnMsICAgICAgICAgLyogc3FfY29udGFpbnMgKi8KKyAgICAoYmluYXJ5ZnVuYylkZXF1ZV9pbnBsYWNlX2NvbmNhdCwgICAvKiBzcV9pbnBsYWNlX2NvbmNhdCAqLworICAgIChzc2l6ZWFyZ2Z1bmMpZGVxdWVfaW5wbGFjZV9yZXBlYXQsIC8qIHNxX2lucGxhY2VfcmVwZWF0ICovCiB9OwogCi0vKiBkZXF1ZSBvYmplY3QgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgUHlOdW1iZXJNZXRob2RzIGRlcXVlX2FzX251bWJlciA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9hZGQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9zdWJ0cmFjdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX211bHRpcGx5ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfcmVtYWluZGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfZGl2bW9kICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfcG93ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9uZWdhdGl2ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX3Bvc2l0aXZlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfYWJzb2x1dGUgKi8KKyAgICAoaW5xdWlyeSlkZXF1ZV9ib29sLCAgICAgICAgICAgICAgICAvKiBuYl9ib29sICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW52ZXJ0ICovCisgfTsKIAogc3RhdGljIFB5T2JqZWN0ICpkZXF1ZV9pdGVyKGRlcXVlb2JqZWN0ICpkZXF1ZSk7CiBzdGF0aWMgUHlPYmplY3QgKmRlcXVlX3Jldml0ZXIoZGVxdWVvYmplY3QgKmRlcXVlKTsKQEAgLTExMTUsMTcgKzE1MjAsMjMgQEAKICAgICAgICAgTUVUSF9OT0FSR1MsICAgICAgICAgICAgIGNsZWFyX2RvY30sCiAgICAgeyJfX2NvcHlfXyIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9jb3B5LAogICAgICAgICBNRVRIX05PQVJHUywgICAgICAgICAgICAgY29weV9kb2N9LAorICAgIHsiY29weSIsICAgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfY29weSwKKyAgICAgICAgTUVUSF9OT0FSR1MsICAgICAgICAgICAgIGNvcHlfZG9jfSwKICAgICB7ImNvdW50IiwgICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX2NvdW50LAotICAgICAgICBNRVRIX08sICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X2RvY30sCisgICAgICAgIE1FVEhfTywgICAgICAgICAgICAgICAgICBjb3VudF9kb2N9LAogICAgIHsiZXh0ZW5kIiwgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfZXh0ZW5kLAogICAgICAgICBNRVRIX08sICAgICAgICAgICAgICAgICAgZXh0ZW5kX2RvY30sCiAgICAgeyJleHRlbmRsZWZ0IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9leHRlbmRsZWZ0LAogICAgICAgICBNRVRIX08sICAgICAgICAgICAgICAgICAgZXh0ZW5kbGVmdF9kb2N9LAorICAgIHsiaW5kZXgiLCAgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfaW5kZXgsCisgICAgICAgIE1FVEhfVkFSQVJHUywgICAgICAgICAgICBpbmRleF9kb2N9LAorICAgIHsiaW5zZXJ0IiwgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfaW5zZXJ0LAorICAgICAgICBNRVRIX1ZBUkFSR1MsICAgICAgICAgICAgaW5zZXJ0X2RvY30sCiAgICAgeyJwb3AiLCAgICAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9wb3AsCiAgICAgICAgIE1FVEhfTk9BUkdTLCAgICAgICAgICAgICBwb3BfZG9jfSwKICAgICB7InBvcGxlZnQiLCAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX3BvcGxlZnQsCiAgICAgICAgIE1FVEhfTk9BUkdTLCAgICAgICAgICAgICBwb3BsZWZ0X2RvY30sCi0gICAgeyJfX3JlZHVjZV9fIiwgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfcmVkdWNlLAorICAgIHsiX19yZWR1Y2VfXyIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfcmVkdWNlLAogICAgICAgICBNRVRIX05PQVJHUywgICAgICAgICAgICAgcmVkdWNlX2RvY30sCiAgICAgeyJyZW1vdmUiLCAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9yZW1vdmUsCiAgICAgICAgIE1FVEhfTywgICAgICAgICAgICAgICAgICByZW1vdmVfZG9jfSwKQEAgLTExNDMsNyArMTU1NCw3IEBACiBQeURvY19TVFJWQVIoZGVxdWVfZG9jLAogImRlcXVlKFtpdGVyYWJsZVssIG1heGxlbl1dKSAtLT4gZGVxdWUgb2JqZWN0XG5cCiBcblwKLUJ1aWxkIGFuIG9yZGVyZWQgY29sbGVjdGlvbiB3aXRoIG9wdGltaXplZCBhY2Nlc3MgZnJvbSBpdHMgZW5kcG9pbnRzLiIpOworQSBsaXN0LWxpa2Ugc2VxdWVuY2Ugb3B0aW1pemVkIGZvciBkYXRhIGFjY2Vzc2VzIG5lYXIgaXRzIGVuZHBvaW50cy4iKTsKIAogc3RhdGljIFB5VHlwZU9iamVjdCBkZXF1ZV90eXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQpAQCAtMTE1Nyw3ICsxNTY4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KICAgICBkZXF1ZV9yZXByLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgJmRlcXVlX2FzX251bWJlciwgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgJmRlcXVlX2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCiAgICAgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkLCAgICAgICAgLyogdHBfaGFzaCAqLwpAQCAtMTE5MywxMCArMTYwNCwxMCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIFB5X3NzaXplX3QgaW5kZXg7CiAgICAgYmxvY2sgKmI7CisgICAgUHlfc3NpemVfdCBpbmRleDsKICAgICBkZXF1ZW9iamVjdCAqZGVxdWU7Ci0gICAgbG9uZyBzdGF0ZTsgICAgICAgICAvKiBzdGF0ZSB3aGVuIHRoZSBpdGVyYXRvciBpcyBjcmVhdGVkICovCisgICAgc2l6ZV90IHN0YXRlOyAgICAgICAgICAvKiBzdGF0ZSB3aGVuIHRoZSBpdGVyYXRvciBpcyBjcmVhdGVkICovCiAgICAgUHlfc3NpemVfdCBjb3VudGVyOyAgICAvKiBudW1iZXIgb2YgaXRlbXMgcmVtYWluaW5nIGZvciBpdGVyYXRpb24gKi8KIH0gZGVxdWVpdGVyb2JqZWN0OwogCkBAIC0xMzEzLDcgKzE3MjQsNyBAQAogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IGRlcXVlaXRlcl90eXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfY29sbGVjdGlvbnMuX2RlcXVlX2l0ZXJhdG9yIiwgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICAiX2NvbGxlY3Rpb25zLl9kZXF1ZV9pdGVyYXRvciIsICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KICAgICBzaXplb2YoZGVxdWVpdGVyb2JqZWN0KSwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAvKiBtZXRob2RzICovCkBAIC0xMzMyLDcgKzE3NDMsNyBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsLyogdHBfZmxhZ3MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgIC8qIHRwX2ZsYWdzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWRlcXVlaXRlcl90cmF2ZXJzZSwgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTQzNSw3ICsxODQ2LDcgQEAKIAogc3RhdGljIFB5VHlwZU9iamVjdCBkZXF1ZXJldml0ZXJfdHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX2NvbGxlY3Rpb25zLl9kZXF1ZV9yZXZlcnNlX2l0ZXJhdG9yIiwgICAgICAvKiB0cF9uYW1lICovCisgICAgIl9jb2xsZWN0aW9ucy5fZGVxdWVfcmV2ZXJzZV9pdGVyYXRvciIsICAgICAvKiB0cF9uYW1lICovCiAgICAgc2l6ZW9mKGRlcXVlaXRlcm9iamVjdCksICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgLyogbWV0aG9kcyAqLwpAQCAtMTQ1NCw3ICsxODY1LDcgQEAKICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgICAvKiB0cF9mbGFncyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylkZXF1ZWl0ZXJfdHJhdmVyc2UsICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTE3OTgsMTkgKzIyMDksNDAgQEAKICAgICBpZiAobWFwcGluZ19nZXQgIT0gTlVMTCAmJiBtYXBwaW5nX2dldCA9PSBkaWN0X2dldCAmJgogICAgICAgICBtYXBwaW5nX3NldGl0ZW0gIT0gTlVMTCAmJiBtYXBwaW5nX3NldGl0ZW0gPT0gZGljdF9zZXRpdGVtKSB7CiAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggYWR2YW50YWdlczoKKyAgICAgICAgICAgICAgICAgICAxLiBFbGltaW5hdGUgZG91YmxlIGhhc2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAoYnkgcmUtdXNpbmcgdGhlIHNhbWUgaGFzaCBmb3IgYm90aCB0aGUgZ2V0IGFuZCBzZXQpCisgICAgICAgICAgICAgICAgICAgMi4gQXZvaWQgYXJndW1lbnQgb3ZlcmhlYWQgb2YgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncworICAgICAgICAgICAgICAgICAgICAgIChhcmd1bWVudCB0dXBsZSBjcmVhdGlvbiBhbmQgcGFyc2luZykKKyAgICAgICAgICAgICAgICAgICAzLiBBdm9pZCBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgYm91bmQgbWV0aG9kIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgIChjcmVhdGVzIGFub3RoZXIgYXJndW1lbnQgdHVwbGUpCisgICAgICAgICAgICAgICAgICAgNC4gQXZvaWQgaW5pdGlhbCBpbmNyZW1lbnQgZnJvbSB6ZXJvCisgICAgICAgICAgICAgICAgICAgICAgKHJldXNlIGFuIGV4aXN0aW5nIG9uZS1vYmplY3QgaW5zdGVhZCkKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaDsKKwogICAgICAgICAgICAga2V5ID0gUHlJdGVyX05leHQoaXQpOwogICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgb2xkdmFsID0gUHlEaWN0X0dldEl0ZW0obWFwcGluZywga2V5KTsKKworICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CisgICAgICAgICAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzaCA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvbGR2YWwgPSBfUHlEaWN0X0dldEl0ZW1fS25vd25IYXNoKG1hcHBpbmcsIGtleSwgaGFzaCk7CiAgICAgICAgICAgICBpZiAob2xkdmFsID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0obWFwcGluZywga2V5LCBvbmUpID09IC0xKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtX0tub3duSGFzaChtYXBwaW5nLCBrZXksIG9uZSwgaGFzaCkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbmV3dmFsID0gUHlOdW1iZXJfQWRkKG9sZHZhbCwgb25lKTsKICAgICAgICAgICAgICAgICBpZiAobmV3dmFsID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShtYXBwaW5nLCBrZXksIG5ld3ZhbCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbV9Lbm93bkhhc2gobWFwcGluZywga2V5LCBuZXd2YWwsIGhhc2gpID09IC0xKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgUHlfQ0xFQVIobmV3dmFsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwpAQCAtMTg5OSw2ICsyMzMxLDkgQEAKICAgICBQeV9JTkNSRUYoJmRlZmRpY3RfdHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJkZWZhdWx0ZGljdCIsIChQeU9iamVjdCAqKSZkZWZkaWN0X3R5cGUpOwogCisgICAgUHlfSU5DUkVGKCZQeU9EaWN0X1R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiT3JkZXJlZERpY3QiLCAoUHlPYmplY3QgKikmUHlPRGljdF9UeXBlKTsKKwogICAgIGlmIChQeVR5cGVfUmVhZHkoJmRlcXVlaXRlcl90eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0lOQ1JFRigmZGVxdWVpdGVyX3R5cGUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3J5cHRtb2R1bGUuYyBiL01vZHVsZXMvX2NyeXB0bW9kdWxlLmMKaW5kZXggZGE0NGVmMy4uOGU0NzM3YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3J5cHRtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jcnlwdG1vZHVsZS5jCkBAIC0xMiwxMiArMTIsMTMgQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWM2MjUyY2Y0ZjJmMmFlODFdKi8KIAorI2luY2x1ZGUgImNsaW5pYy9fY3J5cHRtb2R1bGUuYy5oIgogCiAvKltjbGluaWMgaW5wdXRdCiBjcnlwdC5jcnlwdAogCi0gICAgd29yZDogJ3MnCi0gICAgc2FsdDogJ3MnCisgICAgd29yZDogc3RyCisgICAgc2FsdDogc3RyCiAgICAgLwogCiBIYXNoIGEgKndvcmQqIHdpdGggdGhlIGdpdmVuICpzYWx0KiBhbmQgcmV0dXJuIHRoZSBoYXNoZWQgcGFzc3dvcmQuCkBAIC0yOSw0MyArMzAsOSBAQAogCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihjcnlwdF9jcnlwdF9fZG9jX18sCi0iY3J5cHQoJG1vZHVsZSwgd29yZCwgc2FsdCwgLylcbiIKLSItLVxuIgotIlxuIgotIkhhc2ggYSAqd29yZCogd2l0aCB0aGUgZ2l2ZW4gKnNhbHQqIGFuZCByZXR1cm4gdGhlIGhhc2hlZCBwYXNzd29yZC5cbiIKLSJcbiIKLSIqd29yZCogd2lsbCB1c3VhbGx5IGJlIGEgdXNlclwncyBwYXNzd29yZC4gICpzYWx0KiAoZWl0aGVyIGEgcmFuZG9tIDIgb3IgMTZcbiIKLSJjaGFyYWN0ZXIgc3RyaW5nLCBwb3NzaWJseSBwcmVmaXhlZCB3aXRoICRkaWdpdCQgdG8gaW5kaWNhdGUgdGhlIG1ldGhvZClcbiIKLSJ3aWxsIGJlIHVzZWQgdG8gcGVydHVyYiB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG0gYW5kIHByb2R1Y2UgZGlzdGluY3RcbiIKLSJyZXN1bHRzIGZvciBhIGdpdmVuICp3b3JkKi4iKTsKLQotI2RlZmluZSBDUllQVF9DUllQVF9NRVRIT0RERUYgICAgXAotICAgIHsiY3J5cHQiLCAoUHlDRnVuY3Rpb24pY3J5cHRfY3J5cHQsIE1FVEhfVkFSQVJHUywgY3J5cHRfY3J5cHRfX2RvY19ffSwKLQogc3RhdGljIFB5T2JqZWN0ICoKLWNyeXB0X2NyeXB0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqd29yZCwgY29uc3QgY2hhciAqc2FsdCk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1jcnlwdF9jcnlwdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICp3b3JkOwotICAgIGNvbnN0IGNoYXIgKnNhbHQ7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInNzOmNyeXB0IiwKLSAgICAgICAgJndvcmQsICZzYWx0KSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IGNyeXB0X2NyeXB0X2ltcGwobW9kdWxlLCB3b3JkLCBzYWx0KTsKLQotZXhpdDoKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotY3J5cHRfY3J5cHRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICp3b3JkLCBjb25zdCBjaGFyICpzYWx0KQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNlYWFjZGY5OTRhNmZmMjMgaW5wdXQ9NGQ5M2I2ZDBmNDFmYmY1OF0qLworY3J5cHRfY3J5cHRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICp3b3JkLCBjb25zdCBjaGFyICpzYWx0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA1MTIyODRhMDNkMjgwM2MgaW5wdXQ9MGU4ZWRlYzljMzY0MzUyYl0qLwogewogICAgIC8qIE9uIHNvbWUgcGxhdGZvcm1zIChBdGhlT1MpIGNyeXB0IHJldHVybnMgTlVMTCBmb3IgYW4gaW52YWxpZAogICAgICAgIHNhbHQuIFJldHVybiBOb25lIGluIHRoYXQgY2FzZS4gWFhYIE1heWJlIHJhaXNlIGFuIGV4Y2VwdGlvbj8gICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jc3YuYyBiL01vZHVsZXMvX2Nzdi5jCmluZGV4IDFhMzYzZmEuLjEwMWY0NDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Nzdi5jCisrKyBiL01vZHVsZXMvX2Nzdi5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HZXRMZW5ndGgoc3JjKTsKICAgICAgICAgICAgIGlmIChsZW4gPiAxKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBtdXN0IGJlIGFuIDEtY2hhcmFjdGVyIHN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgbXVzdCBiZSBhIDEtY2hhcmFjdGVyIHN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KQEAgLTI3Niw5ICsyNzYsOCBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3JjKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKCp0YXJnZXQpOwogICAgICAgICAgICAgUHlfSU5DUkVGKHNyYyk7Ci0gICAgICAgICAgICAqdGFyZ2V0ID0gc3JjOworICAgICAgICAgICAgUHlfWFNFVFJFRigqdGFyZ2V0LCBzcmMpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMjkwLDcgKzI4OSw3IEBACiAgICAgU3R5bGVEZXNjICpxczsKIAogICAgIGZvciAocXMgPSBxdW90ZV9zdHlsZXM7IHFzLT5uYW1lOyBxcysrKSB7Ci0gICAgICAgIGlmIChxcy0+c3R5bGUgPT0gcXVvdGluZykKKyAgICAgICAgaWYgKChpbnQpcXMtPnN0eWxlID09IHF1b3RpbmcpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImJhZCBcInF1b3RpbmdcIiB2YWx1ZSIpOwpAQCAtNDMyLDcgKzQzMSw3IEBACiAgICAgICAgIGdvdG8gZXJyOwogICAgIGlmIChzZWxmLT5kZWxpbWl0ZXIgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIlwiZGVsaW1pdGVyXCIgbXVzdCBiZSBhbiAxLWNoYXJhY3RlciBzdHJpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJcImRlbGltaXRlclwiIG11c3QgYmUgYSAxLWNoYXJhY3RlciBzdHJpbmciKTsKICAgICAgICAgZ290byBlcnI7CiAgICAgfQogICAgIGlmIChxdW90ZWNoYXIgPT0gUHlfTm9uZSAmJiBxdW90aW5nID09IE5VTEwpCkBAIC03MzIsNyArNzMxLDcgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFFVT1RFX0lOX1FVT1RFRF9GSUVMRDoKLSAgICAgICAgLyogZG91YmxlcXVvdGUgLSBzZWVuIGEgcXVvdGUgaW4gYW4gcXVvdGVkIGZpZWxkICovCisgICAgICAgIC8qIGRvdWJsZXF1b3RlIC0gc2VlbiBhIHF1b3RlIGluIGEgcXVvdGVkIGZpZWxkICovCiAgICAgICAgIGlmIChkaWFsZWN0LT5xdW90aW5nICE9IFFVT1RFX05PTkUgJiYKICAgICAgICAgICAgIGMgPT0gZGlhbGVjdC0+cXVvdGVjaGFyKSB7CiAgICAgICAgICAgICAvKiBzYXZlICIiIGFzICIgKi8KQEAgLTc4NCw4ICs3ODMsNyBAQAogc3RhdGljIGludAogcGFyc2VfcmVzZXQoUmVhZGVyT2JqICpzZWxmKQogewotICAgIFB5X1hERUNSRUYoc2VsZi0+ZmllbGRzKTsKLSAgICBzZWxmLT5maWVsZHMgPSBQeUxpc3RfTmV3KDApOworICAgIFB5X1hTRVRSRUYoc2VsZi0+ZmllbGRzLCBQeUxpc3RfTmV3KDApKTsKICAgICBpZiAoc2VsZi0+ZmllbGRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBzZWxmLT5maWVsZF9sZW4gPSAwOwpAQCAtMTAwOSw3ICsxMDA3LDcgQEAKICAqLwogc3RhdGljIFB5X3NzaXplX3QKIGpvaW5fYXBwZW5kX2RhdGEoV3JpdGVyT2JqICpzZWxmLCB1bnNpZ25lZCBpbnQgZmllbGRfa2luZCwgdm9pZCAqZmllbGRfZGF0YSwKLSAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBmaWVsZF9sZW4sIGludCBxdW90ZV9lbXB0eSwgaW50ICpxdW90ZWQsCisgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZmllbGRfbGVuLCBpbnQgKnF1b3RlZCwKICAgICAgICAgICAgICAgICAgaW50IGNvcHlfcGhhc2UpCiB7CiAgICAgRGlhbGVjdE9iaiAqZGlhbGVjdCA9IHNlbGYtPmRpYWxlY3Q7CkBAIC0xMDcxLDE4ICsxMDY5LDYgQEAKICAgICAgICAgQUREQ0goYyk7CiAgICAgfQogCi0gICAgLyogSWYgZmllbGQgaXMgZW1wdHkgY2hlY2sgaWYgaXQgbmVlZHMgdG8gYmUgcXVvdGVkLgotICAgICAqLwotICAgIGlmIChpID09IDAgJiYgcXVvdGVfZW1wdHkpIHsKLSAgICAgICAgaWYgKGRpYWxlY3QtPnF1b3RpbmcgPT0gUVVPVEVfTk9ORSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KF9jc3ZzdGF0ZV9nbG9iYWwtPmVycm9yX29iaiwKLSAgICAgICAgICAgICAgICAic2luZ2xlIGVtcHR5IGZpZWxkIHJlY29yZCBtdXN0IGJlIHF1b3RlZCIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpxdW90ZWQgPSAxOwotICAgIH0KLQogICAgIGlmICgqcXVvdGVkKSB7CiAgICAgICAgIGlmIChjb3B5X3BoYXNlKQogICAgICAgICAgICAgQUREQ0goZGlhbGVjdC0+cXVvdGVjaGFyKTsKQEAgLTExMjYsNyArMTExMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWpvaW5fYXBwZW5kKFdyaXRlck9iaiAqc2VsZiwgUHlPYmplY3QgKmZpZWxkLCBpbnQgKnF1b3RlZCwgaW50IHF1b3RlX2VtcHR5KQoram9pbl9hcHBlbmQoV3JpdGVyT2JqICpzZWxmLCBQeU9iamVjdCAqZmllbGQsIGludCBxdW90ZWQpCiB7CiAgICAgdW5zaWduZWQgaW50IGZpZWxkX2tpbmQgPSAtMTsKICAgICB2b2lkICpmaWVsZF9kYXRhID0gTlVMTDsKQEAgLTExNDEsNyArMTEyNyw3IEBACiAgICAgICAgIGZpZWxkX2xlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGZpZWxkKTsKICAgICB9CiAgICAgcmVjX2xlbiA9IGpvaW5fYXBwZW5kX2RhdGEoc2VsZiwgZmllbGRfa2luZCwgZmllbGRfZGF0YSwgZmllbGRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlX2VtcHR5LCBxdW90ZWQsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90ZWQsIDApOwogICAgIGlmIChyZWNfbGVuIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTExNTAsNyArMTEzNiw3IEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgc2VsZi0+cmVjX2xlbiA9IGpvaW5fYXBwZW5kX2RhdGEoc2VsZiwgZmllbGRfa2luZCwgZmllbGRfZGF0YSwgZmllbGRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlX2VtcHR5LCBxdW90ZWQsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90ZWQsIDEpOwogICAgIHNlbGYtPm51bV9maWVsZHMrKzsKIAogICAgIHJldHVybiAxOwpAQCAtMTE4MSwzNyArMTE2NywzMCBAQAogfQogCiBQeURvY19TVFJWQVIoY3N2X3dyaXRlcm93X2RvYywKLSJ3cml0ZXJvdyhzZXF1ZW5jZSlcbiIKKyJ3cml0ZXJvdyhpdGVyYWJsZSlcbiIKICJcbiIKLSJDb25zdHJ1Y3QgYW5kIHdyaXRlIGEgQ1NWIHJlY29yZCBmcm9tIGEgc2VxdWVuY2Ugb2YgZmllbGRzLiAgTm9uLXN0cmluZ1xuIgorIkNvbnN0cnVjdCBhbmQgd3JpdGUgYSBDU1YgcmVjb3JkIGZyb20gYW4gaXRlcmFibGUgb2YgZmllbGRzLiAgTm9uLXN0cmluZ1xuIgogImVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIHN0cmluZy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGNzdl93cml0ZXJvdyhXcml0ZXJPYmogKnNlbGYsIFB5T2JqZWN0ICpzZXEpCiB7CiAgICAgRGlhbGVjdE9iaiAqZGlhbGVjdCA9IHNlbGYtPmRpYWxlY3Q7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgUHlPYmplY3QgKmxpbmUsICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKml0ZXIsICpmaWVsZCwgKmxpbmUsICpyZXN1bHQ7CiAKLSAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2soc2VxKSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX0Zvcm1hdChfY3N2c3RhdGVfZ2xvYmFsLT5lcnJvcl9vYmosICJzZXF1ZW5jZSBleHBlY3RlZCIpOwotCi0gICAgbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgoc2VxKTsKLSAgICBpZiAobGVuIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIoc2VxKTsKKyAgICBpZiAoaXRlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlFcnJfRm9ybWF0KF9jc3ZzdGF0ZV9nbG9iYWwtPmVycm9yX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmFibGUgZXhwZWN0ZWQsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcS0+b2JfdHlwZS0+dHBfbmFtZSk7CiAKICAgICAvKiBKb2luIGFsbCBmaWVsZHMgaW4gaW50ZXJuYWwgYnVmZmVyLgogICAgICAqLwogICAgIGpvaW5fcmVzZXQoc2VsZik7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpmaWVsZDsKKyAgICB3aGlsZSAoKGZpZWxkID0gUHlJdGVyX05leHQoaXRlcikpKSB7CiAgICAgICAgIGludCBhcHBlbmRfb2s7CiAgICAgICAgIGludCBxdW90ZWQ7CiAKLSAgICAgICAgZmllbGQgPSBQeVNlcXVlbmNlX0dldEl0ZW0oc2VxLCBpKTsKLSAgICAgICAgaWYgKGZpZWxkID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgICAgICBzd2l0Y2ggKGRpYWxlY3QtPnF1b3RpbmcpIHsKICAgICAgICAgY2FzZSBRVU9URV9OT05OVU1FUklDOgogICAgICAgICAgICAgcXVvdGVkID0gIVB5TnVtYmVyX0NoZWNrKGZpZWxkKTsKQEAgLTEyMjUsMTEgKzEyMDQsMTEgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soZmllbGQpKSB7Ci0gICAgICAgICAgICBhcHBlbmRfb2sgPSBqb2luX2FwcGVuZChzZWxmLCBmaWVsZCwgJnF1b3RlZCwgbGVuID09IDEpOworICAgICAgICAgICAgYXBwZW5kX29rID0gam9pbl9hcHBlbmQoc2VsZiwgZmllbGQsIHF1b3RlZCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZmllbGQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGZpZWxkID09IFB5X05vbmUpIHsKLSAgICAgICAgICAgIGFwcGVuZF9vayA9IGpvaW5fYXBwZW5kKHNlbGYsIE5VTEwsICZxdW90ZWQsIGxlbiA9PSAxKTsKKyAgICAgICAgICAgIGFwcGVuZF9vayA9IGpvaW5fYXBwZW5kKHNlbGYsIE5VTEwsIHF1b3RlZCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZmllbGQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtMTIzNywxOSArMTIxNiwzNyBAQAogCiAgICAgICAgICAgICBzdHIgPSBQeU9iamVjdF9TdHIoZmllbGQpOwogICAgICAgICAgICAgUHlfREVDUkVGKGZpZWxkKTsKLSAgICAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGFwcGVuZF9vayA9IGpvaW5fYXBwZW5kKHNlbGYsIHN0ciwgJnF1b3RlZCwgbGVuID09IDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kX29rID0gam9pbl9hcHBlbmQoc2VsZiwgc3RyLCBxdW90ZWQpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFhcHBlbmRfb2spCisgICAgICAgIGlmICghYXBwZW5kX29rKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9ERUNSRUYoaXRlcik7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPm51bV9maWVsZHMgPiAwICYmIHNlbGYtPnJlY19zaXplID09IDApIHsKKyAgICAgICAgaWYgKGRpYWxlY3QtPnF1b3RpbmcgPT0gUVVPVEVfTk9ORSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KF9jc3ZzdGF0ZV9nbG9iYWwtPmVycm9yX29iaiwKKyAgICAgICAgICAgICAgICAic2luZ2xlIGVtcHR5IGZpZWxkIHJlY29yZCBtdXN0IGJlIHF1b3RlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc2VsZi0+bnVtX2ZpZWxkcy0tOworICAgICAgICBpZiAoIWpvaW5fYXBwZW5kKHNlbGYsIE5VTEwsIDEpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogQWRkIGxpbmUgdGVybWluYXRvci4KICAgICAgKi8KICAgICBpZiAoIWpvaW5fYXBwZW5kX2xpbmV0ZXJtaW5hdG9yKHNlbGYpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBsaW5lID0gUHlVbmljb2RlX0Zyb21LaW5kQW5kRGF0YShQeVVuaWNvZGVfNEJZVEVfS0lORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBzZWxmLT5yZWMsIHNlbGYtPnJlY19sZW4pOwpAQCAtMTI2MSw5ICsxMjU4LDkgQEAKIH0KIAogUHlEb2NfU1RSVkFSKGNzdl93cml0ZXJvd3NfZG9jLAotIndyaXRlcm93cyhzZXF1ZW5jZSBvZiBzZXF1ZW5jZXMpXG4iCisid3JpdGVyb3dzKGl0ZXJhYmxlIG9mIGl0ZXJhYmxlcylcbiIKICJcbiIKLSJDb25zdHJ1Y3QgYW5kIHdyaXRlIGEgc2VyaWVzIG9mIHNlcXVlbmNlcyB0byBhIGNzdiBmaWxlLiAgTm9uLXN0cmluZ1xuIgorIkNvbnN0cnVjdCBhbmQgd3JpdGUgYSBzZXJpZXMgb2YgaXRlcmFibGVzIHRvIGEgY3N2IGZpbGUuICBOb24tc3RyaW5nXG4iCiAiZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKaW5kZXggMmIyN2VkMy4uYjIwMDM5ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCkBAIC00OSw3ICs0OSw3IEBACiAKIGZyb21fcGFyYW0ob2JqKQogICAgIC0gdHlwZWNoZWNrIGFuZCBjb252ZXJ0IGEgUHl0aG9uIG9iamVjdCBpbnRvIGEgQyBmdW5jdGlvbiBjYWxsIHBhcmFtZXRlcgotICAgICAgdGhlIHJlc3VsdCBtYXkgYmUgYW4gaW5zdGFuY2Ugb2YgdGhlIHR5cGUsIG9yIGFuIGludGVnZXIgb3IgdHVwbGUKKyAgICAgIFRoZSByZXN1bHQgbWF5IGJlIGFuIGluc3RhbmNlIG9mIHRoZSB0eXBlLCBvciBhbiBpbnRlZ2VyIG9yIHR1cGxlCiAgICAgICAodHlwZWNvZGUsIHZhbHVlWywgb2JqXSkKIAogaW5zdGFuY2UgbWV0aG9kcy9wcm9wZXJ0aWVzCkBAIC0zMDEsNyArMzAxLDcgQEAKICAgICBjaGFyICpuZXdfcHJlZml4OwogICAgIGNoYXIgKnJlc3VsdDsKICAgICBjaGFyIGJ1ZlszMl07Ci0gICAgaW50IHByZWZpeF9sZW47CisgICAgUHlfc3NpemVfdCBwcmVmaXhfbGVuOwogICAgIGludCBrOwogCiAgICAgcHJlZml4X2xlbiA9IDMyICogbmRpbSArIDM7CkBAIC0zMzIsNyArMzMyLDcgQEAKIAogLyoKICAgUHlDU3RydWN0VHlwZV9UeXBlIC0gYSBtZXRhIHR5cGUvY2xhc3MuICBDcmVhdGluZyBhIG5ldyBjbGFzcyB1c2luZyB0aGlzIG9uZSBhcwotICBfX21ldGFjbGFzc19fIHdpbGwgY2FsbCB0aGUgY29udHJ1Y3RvciBTdHJ1Y3RVbmlvblR5cGVfbmV3LiAgSXQgcmVwbGFjZXMgdGhlCisgIF9fbWV0YWNsYXNzX18gd2lsbCBjYWxsIHRoZSBjb25zdHJ1Y3RvciBTdHJ1Y3RVbmlvblR5cGVfbmV3LiAgSXQgcmVwbGFjZXMgdGhlCiAgIHRwX2RpY3QgbWVtYmVyIHdpdGggYSBuZXcgaW5zdGFuY2Ugb2YgU3RnRGljdCwgYW5kIGluaXRpYWxpemVzIHRoZSBDCiAgIGFjY2Vzc2libGUgZmllbGRzIHNvbWVob3cuCiAqLwpAQCAtMzkxLDggKzM5MSw3IEBACiAgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilkaWN0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0RFQ1JFRihyZXN1bHQtPnRwX2RpY3QpOwotICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKWRpY3Q7CisgICAgUHlfU0VUUkVGKHJlc3VsdC0+dHBfZGljdCwgKFB5T2JqZWN0ICopZGljdCk7CiAgICAgZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJCIik7CiAgICAgaWYgKGRpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtODcxLDggKzg3MCw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgUHlfSU5DUkVGKHByb3RvKTsKLSAgICBQeV9YREVDUkVGKHN0Z2RpY3QtPnByb3RvKTsKLSAgICBzdGdkaWN0LT5wcm90byA9IHByb3RvOworICAgIFB5X1hTRVRSRUYoc3RnZGljdC0+cHJvdG8sIHByb3RvKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTYyLDggKzk2MCw3IEBACiAgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilzdGdkaWN0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0RFQ1JFRihyZXN1bHQtPnRwX2RpY3QpOwotICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7CisgICAgUHlfU0VUUkVGKHJlc3VsdC0+dHBfZGljdCwgKFB5T2JqZWN0ICopc3RnZGljdCk7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopcmVzdWx0OwogfQpAQCAtMTEyNyw3ICsxMTI0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBDaGFyQXJyYXlfZ2V0X3ZhbHVlKENEYXRhT2JqZWN0ICpzZWxmKQogewotICAgIGludCBpOworICAgIFB5X3NzaXplX3QgaTsKICAgICBjaGFyICpwdHIgPSBzZWxmLT5iX3B0cjsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+Yl9zaXplOyArK2kpCiAgICAgICAgIGlmICgqcHRyKysgPT0gJ1wwJykKQEAgLTExODMsOSArMTE4MCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogV0NoYXJBcnJheV9nZXRfdmFsdWUoQ0RhdGFPYmplY3QgKnNlbGYpCiB7Ci0gICAgdW5zaWduZWQgaW50IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIHdjaGFyX3QgKnB0ciA9ICh3Y2hhcl90ICopc2VsZi0+Yl9wdHI7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmJfc2l6ZS9zaXplb2Yod2NoYXJfdCk7ICsraSkKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+Yl9zaXplLyhQeV9zc2l6ZV90KXNpemVvZih3Y2hhcl90KTsgKytpKQogICAgICAgICBpZiAoKnB0cisrID09ICh3Y2hhcl90KTApCiAgICAgICAgICAgICBicmVhazsKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigod2NoYXJfdCAqKXNlbGYtPmJfcHRyLCBpKTsKQEAgLTEyMTQsNyArMTIxMSw3IEBACiAgICAgd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHZhbHVlLCAmbGVuKTsKICAgICBpZiAod3N0ciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCh1bnNpZ25lZClsZW4gPiBzZWxmLT5iX3NpemUvc2l6ZW9mKHdjaGFyX3QpKSB7CisgICAgaWYgKChzaXplX3QpbGVuID4gc2VsZi0+Yl9zaXplL3NpemVvZih3Y2hhcl90KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxvbmciKTsKICAgICAgICAgcmVzdWx0ID0gLTE7CkBAIC0xMjU1LDggKzEyNTIsMTAgQEAKICAgICAgICAgZGVzY3IgPSBQeURlc2NyX05ld01ldGhvZCh0eXBlLCBtZXRoKTsKICAgICAgICAgaWYgKGRlc2NyID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LG1ldGgtPm1sX25hbWUsIGRlc2NyKSA8IDApCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBtZXRoLT5tbF9uYW1lLCBkZXNjcikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGVzY3IpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMTI3MSw4ICsxMjcwLDEwIEBACiAgICAgICAgIGRlc2NyID0gUHlEZXNjcl9OZXdNZW1iZXIodHlwZSwgbWVtYik7CiAgICAgICAgIGlmIChkZXNjciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgbWVtYi0+bmFtZSwgZGVzY3IpIDwgMCkKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG1lbWItPm5hbWUsIGRlc2NyKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xMjg4LDggKzEyODksMTAgQEAKICAgICAgICAgZGVzY3IgPSBQeURlc2NyX05ld0dldFNldCh0eXBlLCBnc3ApOwogICAgICAgICBpZiAoZGVzY3IgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIGdzcC0+bmFtZSwgZGVzY3IpIDwgMCkKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIGdzcC0+bmFtZSwgZGVzY3IpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoZGVzY3IpOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTE0MDYsOCArMTQwOSw3IEBACiAgICAgLyogcmVwbGFjZSB0aGUgY2xhc3MgZGljdCBieSBvdXIgdXBkYXRlZCBzcGFtIGRpY3QgKi8KICAgICBpZiAoLTEgPT0gUHlEaWN0X1VwZGF0ZSgoUHlPYmplY3QgKilzdGdkaWN0LCByZXN1bHQtPnRwX2RpY3QpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0RFQ1JFRihyZXN1bHQtPnRwX2RpY3QpOwotICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7ICAvKiBzdGVhbCB0aGUgcmVmZXJlbmNlICovCisgICAgUHlfU0VUUkVGKHJlc3VsdC0+dHBfZGljdCwgKFB5T2JqZWN0ICopc3RnZGljdCk7ICAvKiBzdGVhbCB0aGUgcmVmZXJlbmNlICovCiAgICAgc3RnZGljdCA9IE5VTEw7CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGNoYXJhY3RlciBhcnJheXMuCkBAIC0xNzgyLDYgKzE3ODQsNyBAQAogCiAgICAgbmV3bmFtZSA9IFB5VW5pY29kZV9Db25jYXQobmFtZSwgc3VmZml4KTsKICAgICBpZiAobmV3bmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzd2FwcGVkX2FyZ3MpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTE4MDEsOCArMTgwNCwxMCBAQAogCiAgICAgc3RnZGljdCA9IChTdGdEaWN0T2JqZWN0ICopUHlPYmplY3RfQ2FsbE9iamVjdCgKICAgICAgICAgKFB5T2JqZWN0ICopJlB5Q1N0Z0RpY3RfVHlwZSwgTlVMTCk7Ci0gICAgaWYgKCFzdGdkaWN0KSAvKiBYWFggbGVha3MgcmVzdWx0ISAqLworICAgIGlmICghc3RnZGljdCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlciA9ICpmbXQtPnBmZmlfdHlwZTsKICAgICBzdGdkaWN0LT5hbGlnbiA9IGZtdC0+cGZmaV90eXBlLT5hbGlnbm1lbnQ7CkBAIC0xODIwLDggKzE4MjUsNyBAQAogICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopc3RnZGljdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9ERUNSRUYocmVzdWx0LT50cF9kaWN0KTsKLSAgICByZXN1bHQtPnRwX2RpY3QgPSAoUHlPYmplY3QgKilzdGdkaWN0OworICAgIFB5X1NFVFJFRihyZXN1bHQtPnRwX2RpY3QsIChQeU9iamVjdCAqKXN0Z2RpY3QpOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXJlc3VsdDsKIH0KQEAgLTE5NDksOCArMTk1Myw3IEBACiAgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilzdGdkaWN0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0RFQ1JFRihyZXN1bHQtPnRwX2RpY3QpOwotICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7CisgICAgUHlfU0VUUkVGKHJlc3VsdC0+dHBfZGljdCwgKFB5T2JqZWN0ICopc3RnZGljdCk7CiAKICAgICAvKiBJbnN0YWxsIGZyb21fcGFyYW0gY2xhc3MgbWV0aG9kcyBpbiBjdHlwZXMgYmFzZSBjbGFzc2VzLgogICAgICAgIE92ZXJyaWRlcyB0aGUgUHlDU2ltcGxlVHlwZV9mcm9tX3BhcmFtIGdlbmVyaWMgbWV0aG9kLgpAQCAtMTk4NCw4ICsxOTg3LDEwIEBACiAgICAgICAgICAgICBQeU9iamVjdCAqbWV0aDsKICAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICAgbWV0aCA9IFB5RGVzY3JfTmV3Q2xhc3NNZXRob2QocmVzdWx0LCBtbCk7Ci0gICAgICAgICAgICBpZiAoIW1ldGgpCisgICAgICAgICAgICBpZiAoIW1ldGgpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHggPSBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQtPnRwX2RpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWwtPm1sX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aCk7CkBAIC0yMTY1LDggKzIxNzAsMTAgQEAKIAogICAgIG5BcmdzID0gUHlUdXBsZV9HRVRfU0laRShvYik7CiAgICAgY29udmVydGVycyA9IFB5VHVwbGVfTmV3KG5BcmdzKTsKLSAgICBpZiAoIWNvbnZlcnRlcnMpCisgICAgaWYgKCFjb252ZXJ0ZXJzKSB7CisgICAgICAgIFB5X0RFQ1JFRihvYik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIC8qIEkgaGF2ZSB0byBjaGVjayBpZiB0aGlzIGlzIGNvcnJlY3QuIFVzaW5nIGNfY2hhciwgd2hpY2ggaGFzIGEgc2l6ZQogICAgICAgIG9mIDEsIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBwdXNoZWQgYXMgb25seSBvbmUgYnl0ZSEKQEAgLTIzMTMsOCArMjMyMCw3IEBACiAgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilzdGdkaWN0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0RFQ1JFRihyZXN1bHQtPnRwX2RpY3QpOwotICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7CisgICAgUHlfU0VUUkVGKHJlc3VsdC0+dHBfZGljdCwgKFB5T2JqZWN0ICopc3RnZGljdCk7CiAKICAgICBpZiAoLTEgPT0gbWFrZV9mdW5jcHRydHlwZV9kaWN0KHN0Z2RpY3QpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtMjQ1OCw4ICsyNDY0LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAob2ItPmJfb2JqZWN0cyA9PSBOVUxMIHx8ICFQeURpY3RfQ2hlY2tFeGFjdChvYi0+Yl9vYmplY3RzKSkgewotICAgICAgICBQeV9YREVDUkVGKG9iLT5iX29iamVjdHMpOwotICAgICAgICBvYi0+Yl9vYmplY3RzID0ga2VlcDsgLyogcmVmY291bnQgY29uc3VtZWQgKi8KKyAgICAgICAgUHlfWFNFVFJFRihvYi0+Yl9vYmplY3RzLCBrZWVwKTsgLyogcmVmY291bnQgY29uc3VtZWQgKi8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGtleSA9IHVuaXF1ZV9rZXkodGFyZ2V0LCBpbmRleCk7CkBAIC0yODM5LDggKzI4NDQsOSBAQAogICAgICAgICAgICAgICAgc3JjLT5iX3B0ciwKICAgICAgICAgICAgICAgIHNpemUpOwogCi0gICAgICAgIGlmIChQeUNQb2ludGVyVHlwZU9iamVjdF9DaGVjayh0eXBlKSkKLSAgICAgICAgICAgIC8qIFhYWCAqLzsKKyAgICAgICAgaWYgKFB5Q1BvaW50ZXJUeXBlT2JqZWN0X0NoZWNrKHR5cGUpKSB7CisgICAgICAgICAgICAvKiBYWFggKi8KKyAgICAgICAgfQogCiAgICAgICAgIHZhbHVlID0gR2V0S2VlcGVkT2JqZWN0cyhzcmMpOwogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKQEAgLTI5NjEsOSArMjk2Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGVycmNoZWNrIGF0dHJpYnV0ZSBtdXN0IGJlIGNhbGxhYmxlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgUHlfWERFQ1JFRihzZWxmLT5lcnJjaGVjayk7CiAgICAgUHlfWElOQ1JFRihvYik7Ci0gICAgc2VsZi0+ZXJyY2hlY2sgPSBvYjsKKyAgICBQeV9YU0VUUkVGKHNlbGYtPmVycmNoZWNrLCBvYik7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI5OTEsMTEgKzI5OTYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgInJlc3R5cGUgbXVzdCBiZSBhIHR5cGUsIGEgY2FsbGFibGUsIG9yIE5vbmUiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBQeV9YREVDUkVGKHNlbGYtPmNoZWNrZXIpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+cmVzdHlwZSk7CiAgICAgUHlfSU5DUkVGKG9iKTsKLSAgICBzZWxmLT5yZXN0eXBlID0gb2I7Ci0gICAgc2VsZi0+Y2hlY2tlciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob2IsICJfY2hlY2tfcmV0dmFsXyIpOworICAgIFB5X1hTRVRSRUYoc2VsZi0+cmVzdHlwZSwgb2IpOworICAgIFB5X1hTRVRSRUYoc2VsZi0+Y2hlY2tlciwgUHlPYmplY3RfR2V0QXR0clN0cmluZyhvYiwgIl9jaGVja19yZXR2YWxfIikpOwogICAgIGlmIChzZWxmLT5jaGVja2VyID09IE5VTEwpCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgcmV0dXJuIDA7CkBAIC0zMDMyLDExICszMDM1LDkgQEAKICAgICAgICAgY29udmVydGVycyA9IGNvbnZlcnRlcnNfZnJvbV9hcmd0eXBlcyhvYik7CiAgICAgICAgIGlmICghY29udmVydGVycykKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlfWERFQ1JFRihzZWxmLT5jb252ZXJ0ZXJzKTsKLSAgICAgICAgc2VsZi0+Y29udmVydGVycyA9IGNvbnZlcnRlcnM7Ci0gICAgICAgIFB5X1hERUNSRUYoc2VsZi0+YXJndHlwZXMpOworICAgICAgICBQeV9YU0VUUkVGKHNlbGYtPmNvbnZlcnRlcnMsIGNvbnZlcnRlcnMpOwogICAgICAgICBQeV9JTkNSRUYob2IpOwotICAgICAgICBzZWxmLT5hcmd0eXBlcyA9IG9iOworICAgICAgICBQeV9YU0VUUkVGKHNlbGYtPmFyZ3R5cGVzLCBvYik7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMzQxNCw3ICszNDE1LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgLyogWFhYIFhYWCBUaGlzIHdvdWxkIGFsbG93IHRvIHBhc3MgYWRkaXRpb25hbCBvcHRpb25zLiAgRm9yIENPTQorICAgIC8qIFhYWCBYWFggVGhpcyB3b3VsZCBhbGxvdyBwYXNzaW5nIGFkZGl0aW9uYWwgb3B0aW9ucy4gIEZvciBDT00KICAgICAgICBtZXRob2QgKmltcGxlbWVudGF0aW9ucyosIHdlIHdvdWxkIHByb2JhYmx5IHdhbnQgZGlmZmVyZW50CiAgICAgICAgYmVoYXZpb3VyIHRoYW4gaW4gJ25vcm1hbCcgY2FsbGJhY2sgZnVuY3Rpb25zOiByZXR1cm4gYSBIUkVTVUxUIGlmCiAgICAgICAgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgY2FsbGJhY2ssIGFuZCBwcmludCB0aGUgdHJhY2ViYWNrIG5vdApAQCAtMzgxNCw3ICszODE1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIC8qIHRoZXJlIHNob3VsZCBiZSBtb3JlIGNoZWNrcz8gTm8sIGluIFB5dGhvbiAqLwotICAgICAgICAvKiBGaXJzdCBhcmcgaXMgYW4gcG9pbnRlciB0byBhbiBpbnRlcmZhY2UgaW5zdGFuY2UgKi8KKyAgICAgICAgLyogRmlyc3QgYXJnIGlzIGEgcG9pbnRlciB0byBhbiBpbnRlcmZhY2UgaW5zdGFuY2UgKi8KICAgICAgICAgaWYgKCF0aGlzLT5iX3B0ciB8fCAqKHZvaWQgKiopdGhpcy0+Yl9wdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5VTEwgQ09NIHBvaW50ZXIgYWNjZXNzIik7CkBAIC00MDY0LDE0ICs0MDY1LDkgQEAKICAgICAgICAgfQogICAgICAgICB2YWwgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIGkgKyBpbmRleCk7CiAgICAgICAgIGlmIChrd2RzICYmIFB5RGljdF9HZXRJdGVtKGt3ZHMsIG5hbWUpKSB7Ci0gICAgICAgICAgICBjaGFyICpmaWVsZCA9IFB5Qnl0ZXNfQXNTdHJpbmcobmFtZSk7Ci0gICAgICAgICAgICBpZiAoZmllbGQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgZmllbGQgPSAiPz8/IjsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImR1cGxpY2F0ZSB2YWx1ZXMgZm9yIGZpZWxkICclcyciLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwbGljYXRlIHZhbHVlcyBmb3IgZmllbGQgJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKHBhaXIpOwogICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNTE2Myw5ICs1MTU5LDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgYnNlbGYgPSAoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICopc2VsZjsKLSAgICBQeV9ERUNSRUYoYnNlbGYtPmFyZ3MpOwotICAgIGJzZWxmLT5hcmdzID0gYXJnczsKLSAgICBQeV9JTkNSRUYoYnNlbGYtPmFyZ3MpOworICAgIFB5X0lOQ1JFRihhcmdzKTsKKyAgICBQeV9TRVRSRUYoYnNlbGYtPmFyZ3MsIGFyZ3MpOwogCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKaW5kZXggN2NkNjE2NC4uOTE0MTNkNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiBzdGF0aWMgQ1RodW5rT2JqZWN0KiBDVGh1bmtPYmplY3RfbmV3KFB5X3NzaXplX3QgbkFyZ3MpCiB7CiAgICAgQ1RodW5rT2JqZWN0ICpwOwotICAgIGludCBpOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIHAgPSBQeU9iamVjdF9HQ19OZXdWYXIoQ1RodW5rT2JqZWN0LCAmUHlDVGh1bmtfVHlwZSwgbkFyZ3MpOwogICAgIGlmIChwID09IE5VTEwpIHsKQEAgLTMxMywxMSArMzEzLDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHAtPnBjbF9leGVjID0gTlVMTDsKICAgICBwLT5wY2xfd3JpdGUgPSBOVUxMOworICAgIHAtPnBjbF9leGVjID0gTlVMTDsKICAgICBtZW1zZXQoJnAtPmNpZiwgMCwgc2l6ZW9mKHAtPmNpZikpOworICAgIHAtPmZsYWdzID0gMDsKICAgICBwLT5jb252ZXJ0ZXJzID0gTlVMTDsKICAgICBwLT5jYWxsYWJsZSA9IE5VTEw7CisgICAgcC0+cmVzdHlwZSA9IE5VTEw7CiAgICAgcC0+c2V0ZnVuYyA9IE5VTEw7CiAgICAgcC0+ZmZpX3Jlc3R5cGUgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCmluZGV4IDhkYWVmZmMuLjMwZTNhOTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCkBAIC0xNTcsOCArMTU3LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbWVtc2V0KHNwYWNlLCAwLCBzaXplb2YoaW50KSAqIDIpOwogICAgICAgICBlcnJvYmogPSBQeUNhcHN1bGVfTmV3KHNwYWNlLCBDVFlQRVNfQ0FQU1VMRV9OQU1FX1BZTUVNLCBweW1lbV9kZXN0cnVjdG9yKTsKLSAgICAgICAgaWYgKGVycm9iaiA9PSBOVUxMKQorICAgICAgICBpZiAoZXJyb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUoc3BhY2UpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgaWYgKC0xID09IFB5RGljdF9TZXRJdGVtKGRpY3QsIGVycm9yX29iamVjdF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb2JqKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKGVycm9iaik7CkBAIC0xNjAzLDcgKzE2MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIk1lbW9yeSBjYW5ub3QgYmUgcmVzaXplZCBiZWNhdXNlIHRoaXMgb2JqZWN0IGRvZXNuJ3Qgb3duIGl0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoc2l6ZSA8PSBzaXplb2Yob2JqLT5iX3ZhbHVlKSkgeworICAgIGlmICgoc2l6ZV90KXNpemUgPD0gc2l6ZW9mKG9iai0+Yl92YWx1ZSkpIHsKICAgICAgICAgLyogaW50ZXJuYWwgZGVmYXVsdCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoICovCiAgICAgICAgIG9iai0+Yl9zaXplID0gc2l6ZTsKICAgICAgICAgZ290byBkb25lOwpAQCAtMTY4MSw2ICsxNjgzLDEwIEBACiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cihyZXN1bHQpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKFB5VHlwZV9DaGVjayhjbHMpKSB7CiAgICAgICAgIHR5cCA9IChQeVR5cGVPYmplY3QgKiljbHM7CiAgICAgICAgIGJ1ZiA9IFB5TWVtX01hbGxvYyhzdHJsZW4odHlwLT50cF9uYW1lKSArIDMgKyAxKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYyBiL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYwppbmRleCBjODlkOTE5Li5kNjY2YmU1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCkBAIC0xMjQ2LDggKzEyNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgInVuaWNvZGUgc3RyaW5nIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UKLSAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICB9CiAKICAgICB3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUodmFsdWUsICZzaXplKTsKICAgICBpZiAod3N0ciA9PSBOVUxMKQpAQCAtMTI1Niw3ICsxMjU1LDYgQEAKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nICglemQsIG1heGltdW0gbGVuZ3RoICV6ZCkiLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgbGVuZ3RoKTsKLSAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIGlmIChzaXplIDwgbGVuZ3RoLTEpCiAgICAgICAgIC8qIGNvcHkgdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciBpZiB0aGVyZSBpcyBzcGFjZSAqLwpAQCAtMTI2Niw2ICsxMjY0LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTEyOTIsOSArMTI5MSw3IEBACiAgICAgY2hhciAqZGF0YTsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAKLSAgICBpZihQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwotICAgIH0gZWxzZSB7CisgICAgaWYoIVB5Qnl0ZXNfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYnl0ZXMsICVzIGZvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5vYl90eXBlLT50cF9uYW1lKTsKQEAgLTEzMDIsMTEgKzEyOTksOSBAQAogICAgIH0KIAogICAgIGRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyh2YWx1ZSk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzaXplID0gc3RybGVuKGRhdGEpOyAvKiBYWFggV2h5IG5vdCBQeV9TSVpFKHZhbHVlKT8gKi8KICAgICBpZiAoc2l6ZSA8IGxlbmd0aCkgewotICAgICAgICAvKiBUaGlzIHdpbGwgY29weSB0aGUgbGVhZGluZyBOVUwgY2hhcmFjdGVyCisgICAgICAgIC8qIFRoaXMgd2lsbCBjb3B5IHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyCiAgICAgICAgICAqIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBpdC4KICAgICAgICAgICovCiAgICAgICAgICsrc2l6ZTsKQEAgLTEzMTQsMTMgKzEzMDksMTEgQEAKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMgdG9vIGxvbmcgKCV6ZCwgbWF4aW11bSBsZW5ndGggJXpkKSIsCiAgICAgICAgICAgICAgICAgICAgICBzaXplLCBsZW5ndGgpOwotICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogQWxzbyBjb3B5IHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyIGlmIHRoZXJlIGlzIHNwYWNlICovCiAgICAgbWVtY3B5KChjaGFyICopcHRyLCBkYXRhLCBzaXplKTsKIAotICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgX1JFVCh2YWx1ZSk7CiB9CiAKQEAgLTEzNTUsMTQgKzEzNDgsNiBAQAogewogICAgIC8qIFhYWCBXaGF0IGFib3V0IGludmFsaWQgcG9pbnRlcnMgPz8/ICovCiAgICAgaWYgKCoodm9pZCAqKilwdHIpIHsKLSNpZiBkZWZpbmVkKE1TX1dJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzJfV0NFKQotICAgICAgICBpZiAoSXNCYWRTdHJpbmdQdHJBKCooY2hhciAqKilwdHIsIC0xKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgc3RyaW5nIHBvaW50ZXIgJXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICooY2hhciAqKilwdHIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgqKGNoYXIgKiopcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oKihjaGFyICoqKXB0cikpOwogICAgIH0gZWxzZSB7CkBAIC0xMzgzLDcgKzEzNjgsNyBAQAogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQotICAgIGlmIChQeUxvbmdfQ2hlY2sodmFsdWUpIHx8IFB5TG9uZ19DaGVjayh2YWx1ZSkpIHsKKyAgICBpZiAoUHlMb25nX0NoZWNrKHZhbHVlKSkgewogI2lmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkdfTE9ORwogICAgICAgICAqKHdjaGFyX3QgKiopcHRyID0gKHdjaGFyX3QgKilQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzayh2YWx1ZSk7CiAjZWxzZQpAQCAtMTQxOSwxNCArMTQwNCw2IEBACiAgICAgd2NoYXJfdCAqcDsKICAgICBwID0gKih3Y2hhcl90ICoqKXB0cjsKICAgICBpZiAocCkgewotI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKF9XSU4zMl9XQ0UpCi0gICAgICAgIGlmIChJc0JhZFN0cmluZ1B0clcoKih3Y2hhcl90ICoqKXB0ciwgLTEpKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBzdHJpbmcgcG9pbnRlciAlcCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKih3Y2hhcl90ICoqKXB0cik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHAsIHdjc2xlbihwKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwpAQCAtMTQ0NCw5ICsxNDIxLDcgQEAKICAgICAvKiBjb252ZXJ0IHZhbHVlIGludG8gYSBQeVVuaWNvZGVPYmplY3Qgb3IgTlVMTCAqLwogICAgIGlmIChQeV9Ob25lID09IHZhbHVlKSB7CiAgICAgICAgIHZhbHVlID0gTlVMTDsKLSAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsgLyogZm9yIHRoZSBkZXNjcmVmIGJlbG93ICovCi0gICAgfSBlbHNlIHsKKyAgICB9IGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZSBzdHJpbmcgZXhwZWN0ZWQgaW5zdGVhZCBvZiAlcyBpbnN0YW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+b2JfdHlwZS0+dHBfbmFtZSk7CkBAIC0xNDU2LDE2ICsxNDMxLDE1IEBACiAgICAgLyogY3JlYXRlIGEgQlNUUiBmcm9tIHZhbHVlICovCiAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgIHdjaGFyX3QqIHd2YWx1ZTsKLSAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICB3dmFsdWUgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZSh2YWx1ZSwgJnNpemUpOworICAgICAgICBQeV9zc2l6ZV90IHdzaXplOworICAgICAgICB3dmFsdWUgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZSh2YWx1ZSwgJndzaXplKTsKICAgICAgICAgaWYgKHd2YWx1ZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmICgodW5zaWduZWQpIHNpemUgIT0gc2l6ZSkgeworICAgICAgICBpZiAoKHVuc2lnbmVkKSB3c2l6ZSAhPSB3c2l6ZSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJTdHJpbmcgdG9vIGxvbmcgZm9yIEJTVFIiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGJzdHIgPSBTeXNBbGxvY1N0cmluZ0xlbih3dmFsdWUsICh1bnNpZ25lZClzaXplKTsKLSAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgYnN0ciA9IFN5c0FsbG9jU3RyaW5nTGVuKHd2YWx1ZSwgKHVuc2lnbmVkKXdzaXplKTsKICAgICB9IGVsc2UKICAgICAgICAgYnN0ciA9IE5VTEw7CiAKQEAgLTE1MDcsNyArMTQ4MSw3IEBACiAgICAgICAgIF9SRVQodmFsdWUpOwogICAgIH0KIAotICAgIGlmICghUHlMb25nX0NoZWNrKHZhbHVlKSAmJiAhUHlMb25nX0NoZWNrKHZhbHVlKSkgeworICAgIGlmICghUHlMb25nX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gcG9pbnRlciIpOwogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jdHlwZXNfZGxmY24uaCBiL01vZHVsZXMvX2N0eXBlcy9jdHlwZXNfZGxmY24uaAppbmRleCBkOGJmOTA0Li41NGNkZGU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzX2RsZmNuLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2N0eXBlc19kbGZjbi5oCkBAIC0xLDcgKzEsMyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIFRoaXMgZmlsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMywgc2VlIFBFUCAyOTEuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KICNpZm5kZWYgX0NUWVBFU19ETEZDTl9IXwogI2RlZmluZSBfQ1RZUEVTX0RMRkNOX0hfCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbGlidG9vbC5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbGlidG9vbC5tNAppbmRleCA0YmM2YjIyLi5kOWNjNzdiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9saWJ0b29sLm00CkBAIC0xMTIxLDcgKzExMjEsNyBAQAogIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZwogIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KICMgU3RvcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyBmb3IgZWFjaCBUQUdOQU1FLgotIyBBbGxvdyB0byBvdmVycmlkZSB0aGVtIGZvciBhbGwgdGFncyB0aHJvdWdoIGx0X2N2X2FpeF9saWJwYXRoLgorIyBBbGxvdyBvdmVycmlkaW5nIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCiBtNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAogW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCiBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmMKaW5kZXggNzZjYjAzZS4uYjc1ODZjNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYwpAQCAtNjUsMzcgKzY1LDU2IEBACiAJYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIHNpemVvZih2b2lkICopKTsKIAogICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOwotICAgICAgaWYgKHogPCBzaXplb2YoaW50KSkKKyAgICAgIGlmICh6IDwgc2l6ZW9mKGludHB0cl90KSkKIAl7Ci0JICB6ID0gc2l6ZW9mKGludCk7CisJICB6ID0gc2l6ZW9mKGludHB0cl90KTsKIAkgIHN3aXRjaCAoKCpwX2FyZyktPnR5cGUpCiAJICAgIHsKIAkgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKLQkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDggKikoKiBwX2FyZ3YpOworCSAgICAgICooaW50cHRyX3QgKikgYXJncCA9IChpbnRwdHJfdCkqKFNJTlQ4ICopKCogcF9hcmd2KTsKIAkgICAgICBicmVhazsKIAogCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDggKikoKiBwX2FyZ3YpOworCSAgICAgICoodWludHB0cl90ICopIGFyZ3AgPSAodWludHB0cl90KSooVUlOVDggKikoKiBwX2FyZ3YpOwogCSAgICAgIGJyZWFrOwogCiAJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UMTYgKikoKiBwX2FyZ3YpOworCSAgICAgICooaW50cHRyX3QgKikgYXJncCA9IChpbnRwdHJfdCkqKFNJTlQxNiAqKSgqIHBfYXJndik7CiAJICAgICAgYnJlYWs7CiAKIAkgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMTYgKikoKiBwX2FyZ3YpOworCSAgICAgICoodWludHB0cl90ICopIGFyZ3AgPSAodWludHB0cl90KSooVUlOVDE2ICopKCogcF9hcmd2KTsKIAkgICAgICBicmVhazsKIAogCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDMyICopKCogcF9hcmd2KTsKKwkgICAgICAqKGludHB0cl90ICopIGFyZ3AgPSAoaW50cHRyX3QpKihTSU5UMzIgKikoKiBwX2FyZ3YpOwogCSAgICAgIGJyZWFrOwogCiAJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgotCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDMyICopKCogcF9hcmd2KTsKKwkgICAgICAqKHVpbnRwdHJfdCAqKSBhcmdwID0gKHVpbnRwdHJfdCkqKFVJTlQzMiAqKSgqIHBfYXJndik7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkgICAgICAqKHVpbnRwdHJfdCAqKSBhcmdwID0gMDsKKwkgICAgICAqKGZsb2F0ICopIGFyZ3AgPSAqKGZsb2F0ICopKCogcF9hcmd2KTsKKwkgICAgICBicmVhazsKKworCSAgICAvLyA2NC1iaXQgdmFsdWUgY2FzZXMgc2hvdWxkIG5ldmVyIGJlIHVzZWQgZm9yIHg4NiBhbmQgQU1ENjQgYnVpbGRzCisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCSAgICAgICooaW50cHRyX3QgKikgYXJncCA9IChpbnRwdHJfdCkqKFNJTlQ2NCAqKSgqIHBfYXJndik7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJICAgICAgKih1aW50cHRyX3QgKikgYXJncCA9ICh1aW50cHRyX3QpKihVSU5UNjQgKikoKiBwX2FyZ3YpOwogCSAgICAgIGJyZWFrOwogCiAJICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDMyICopKCogcF9hcmd2KTsKKwkgICAgICAqKHVpbnRwdHJfdCAqKSBhcmdwID0gKHVpbnRwdHJfdCkqKFVJTlQzMiAqKSgqIHBfYXJndik7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICAgICAgKih1aW50cHRyX3QgKikgYXJncCA9IDA7CisJICAgICAgKihkb3VibGUgKikgYXJncCA9ICooZG91YmxlICopKCogcF9hcmd2KTsKIAkgICAgICBicmVhazsKIAogCSAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwppbmRleCA4N2I5YzA1Li4yMjhmNDk3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYworKysgYi9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYwpAQCAtMjIwLDYgKzIyMCwxMSBAQAogc3RhdGljIHZvaWQKIFB5Q3Vyc2VzUGFuZWxfRGVhbGxvYyhQeUN1cnNlc1BhbmVsT2JqZWN0ICpwbykKIHsKKyAgICBQeU9iamVjdCAqb2JqID0gKFB5T2JqZWN0ICopIHBhbmVsX3VzZXJwdHIocG8tPnBhbik7CisgICAgaWYgKG9iaikgeworICAgICAgICAodm9pZClzZXRfcGFuZWxfdXNlcnB0cihwby0+cGFuLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgfQogICAgICh2b2lkKWRlbF9wYW5lbChwby0+cGFuKTsKICAgICBpZiAocG8tPndvICE9IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHBvLT53byk7CkBAIC0zMTIsOSArMzE3LDggQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKF9jdXJzZXNfcGFuZWxzdGF0ZV9nbG9iYWwtPlB5Q3Vyc2VzRXJyb3IsICJyZXBsYWNlX3BhbmVsKCkgcmV0dXJuZWQgRVJSIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9ERUNSRUYocG8tPndvKTsKLSAgICBwby0+d28gPSB0ZW1wOwotICAgIFB5X0lOQ1JFRihwby0+d28pOworICAgIFB5X0lOQ1JFRih0ZW1wKTsKKyAgICBQeV9TRVRSRUYocG8tPndvLCB0ZW1wKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC01MDcsMTAgKzUxMSwxMSBAQAogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwogCiAgICAgLyogSW5pdGlhbGl6ZSBvYmplY3QgdHlwZSAqLwotICAgIF9jdXJzZXNfcGFuZWxzdGF0ZShtKS0+UHlDdXJzZXNQYW5lbF9UeXBlID0gXAotICAgICAgICBQeVR5cGVfRnJvbVNwZWMoJlB5Q3Vyc2VzUGFuZWxfVHlwZV9zcGVjKTsKLSAgICBpZiAoX2N1cnNlc19wYW5lbHN0YXRlKG0pLT5QeUN1cnNlc1BhbmVsX1R5cGUgPT0gTlVMTCkKKyAgICB2ID0gUHlUeXBlX0Zyb21TcGVjKCZQeUN1cnNlc1BhbmVsX1R5cGVfc3BlYyk7CisgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworICAgICgoUHlUeXBlT2JqZWN0ICopdiktPnRwX25ldyA9IE5VTEw7CisgICAgX2N1cnNlc19wYW5lbHN0YXRlKG0pLT5QeUN1cnNlc1BhbmVsX1R5cGUgPSB2OwogCiAgICAgaW1wb3J0X2N1cnNlcygpOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYwppbmRleCA1ZmZjZTJmLi5kNjRiZGM3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYwpAQCAtMTQwLDYgKzE0MCw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD04OGM4NjBhYmRiYjUwZTBjXSovCiAKKyNpbmNsdWRlICJjbGluaWMvX2N1cnNlc21vZHVsZS5jLmgiCisKIC8qIERlZmluaXRpb24gb2YgZXhjZXB0aW9uIGN1cnNlcy5lcnJvciAqLwogCiBzdGF0aWMgUHlPYmplY3QgKlB5Q3Vyc2VzRXJyb3I7CkBAIC01ODMsNzUgKzU4NSwxMCBAQAogY3VycmVudCBzZXR0aW5ncyBmb3IgdGhlIHdpbmRvdyBvYmplY3QuCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihjdXJzZXNfd2luZG93X2FkZGNoX19kb2NfXywKLSJhZGRjaChbeSwgeCxdIGNoLCBbYXR0cl0pXG4iCi0iUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ci5cbiIKLSJcbiIKLSIgIHlcbiIKLSIgICAgWS1jb29yZGluYXRlLlxuIgotIiAgeFxuIgotIiAgICBYLWNvb3JkaW5hdGUuXG4iCi0iICBjaFxuIgotIiAgICBDaGFyYWN0ZXIgdG8gYWRkLlxuIgotIiAgYXR0clxuIgotIiAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLlxuIgotIlxuIgotIlBhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIsXG4iCi0ib3ZlcndyaXRpbmcgYW55IGNoYXJhY3RlciBwcmV2aW91c2x5IHBhaW50ZWQgYXQgdGhhdCBsb2NhdGlvbi5cbiIKLSJCeSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGFuZCBhdHRyaWJ1dGVzIGFyZSB0aGVcbiIKLSJjdXJyZW50IHNldHRpbmdzIGZvciB0aGUgd2luZG93IG9iamVjdC4iKTsKLQotI2RlZmluZSBDVVJTRVNfV0lORE9XX0FERENIX01FVEhPRERFRiAgICBcCi0gICAgeyJhZGRjaCIsIChQeUNGdW5jdGlvbiljdXJzZXNfd2luZG93X2FkZGNoLCBNRVRIX1ZBUkFSR1MsIGN1cnNlc193aW5kb3dfYWRkY2hfX2RvY19ffSwKLQogc3RhdGljIFB5T2JqZWN0ICoKLWN1cnNlc193aW5kb3dfYWRkY2hfaW1wbChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgaW50IGdyb3VwX2xlZnRfMSwgaW50IHksIGludCB4LCBQeU9iamVjdCAqY2gsIGludCBncm91cF9yaWdodF8xLCBsb25nIGF0dHIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotY3Vyc2VzX3dpbmRvd19hZGRjaChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgaW50IGdyb3VwX2xlZnRfMSA9IDA7Ci0gICAgaW50IHkgPSAwOwotICAgIGludCB4ID0gMDsKLSAgICBQeU9iamVjdCAqY2g7Ci0gICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOwotICAgIGxvbmcgYXR0ciA9IDA7Ci0KLSAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmFkZGNoIiwgJmNoKSkKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbDphZGRjaCIsICZjaCwgJmF0dHIpKQotICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPOmFkZGNoIiwgJnksICZ4LCAmY2gpKQotICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9sOmFkZGNoIiwgJnksICZ4LCAmY2gsICZhdHRyKSkKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKLSAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJjdXJzZXMud2luZG93LmFkZGNoIHJlcXVpcmVzIDEgdG8gNCBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0gICAgcmV0dXJuX3ZhbHVlID0gY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKHNlbGYsIGdyb3VwX2xlZnRfMSwgeSwgeCwgY2gsIGdyb3VwX3JpZ2h0XzEsIGF0dHIpOwotCi1leGl0OgotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1jdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIGludCBncm91cF9sZWZ0XzEsIGludCB5LCBpbnQgeCwgUHlPYmplY3QgKmNoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgbG9uZyBhdHRyKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ0Yjk3Y2MyODcwMTBjNTQgaW5wdXQ9NWE0MWVmYjM0YTJkZTMzOF0qLworY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBpbnQgZ3JvdXBfbGVmdF8xLCBpbnQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgUHlPYmplY3QgKmNoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgbG9uZyBhdHRyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk5ZjdmODUwNzhlYzA2YzMgaW5wdXQ9NWE0MWVmYjM0YTJkZTMzOF0qLwogewogICAgIFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpjd3NlbGYgPSAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKilzZWxmOwogICAgIGludCBjb29yZGluYXRlc19ncm91cCA9IGdyb3VwX2xlZnRfMTsKQEAgLTI2NzUsNyArMjYxMiw3IEBACiAgICAgfQogICAgIGtucCA9IGtleW5hbWUoY2gpOwogCi0gICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygoa25wID09IE5VTEwpID8gIiIgOiAoY2hhciAqKWtucCk7CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygoa25wID09IE5VTEwpID8gIiIgOiBrbnApOwogfQogI2VuZGlmCiAKQEAgLTI5MjksNiArMjg2NiwxMyBAQAogICAgIFB5X0RFQ1JFRihtKTsKICAgICByZXR1cm4gMTsKIH0KKworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3VwZGF0ZV9saW5lc19jb2xzKFB5T2JqZWN0ICpzZWxmKQoreworICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKSB1cGRhdGVfbGluZXNfY29scygpKTsKK30KKwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0NVUlNFU19SRVNJWkVURVJNCkBAIC0zMzMxLDYgKzMyNzUsOSBAQAogICAgIHsidHlwZWFoZWFkIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19UeXBlQWhlYWQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJ1bmN0cmwiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuQ3RybCwgTUVUSF9WQVJBUkdTfSwKICAgICB7InVuZ2V0Y2giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5nZXRDaCwgTUVUSF9WQVJBUkdTfSwKKyNpZiBkZWZpbmVkKEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0pIHx8IGRlZmluZWQoSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0pCisgICAgeyJ1cGRhdGVfbGluZXNfY29scyIsICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3VwZGF0ZV9saW5lc19jb2xzLCBNRVRIX05PQVJHU30sCisjZW5kaWYKICNpZmRlZiBIQVZFX05DVVJTRVNXCiAgICAgeyJ1bmdldF93Y2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuZ2V0X1djaCwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYyBiL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKaW5kZXggNjA4NGZmYS4uZjQxOWNiMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYworKysgYi9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCkBAIC03LDYgKzcsMTAgQEAKIAogI2luY2x1ZGUgPHRpbWUuaD4KIAorI2lmZGVmIE1TX1dJTkRPV1MKKyMgIGluY2x1ZGUgPHdpbnNvY2syLmg+ICAgICAgICAgLyogc3RydWN0IHRpbWV2YWwgKi8KKyNlbmRpZgorCiAvKiBEaWZmZXJlbnRpYXRlIGJldHdlZW4gYnVpbGRpbmcgdGhlIGNvcmUgbW9kdWxlIGFuZCBidWlsZGluZyBleHRlbnNpb24KICAqIG1vZHVsZXMuCiAgKi8KQEAgLTIyLDYgKzI2LDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTc4MTQyY2I2NGI5ZTk4YmNdKi8KIAorI2luY2x1ZGUgImNsaW5pYy9fZGF0ZXRpbWVtb2R1bGUuYy5oIgorCiAvKiBXZSByZXF1aXJlIHRoYXQgQyBpbnQgYmUgYXQgbGVhc3QgMzIgYml0cywgYW5kIHVzZSBpbnQgdmlydHVhbGx5CiAgKiBldmVyeXdoZXJlLiAgSW4ganVzdCBhIGZldyBjYXNlcyB3ZSB1c2UgYSB0ZW1wIGxvbmcsIHdoZXJlIGEgUHl0aG9uCiAgKiBBUEkgcmV0dXJucyBhIEMgbG9uZy4gIEluIHN1Y2ggY2FzZXMsIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlCkBAIC0yMTMsNyArMjE5LDcgQEAKICAgICAgICAgcmV0dXJuIF9kYXlzX2luX21vbnRoW21vbnRoXTsKIH0KIAotLyogeWVhciwgbW9udGggLT4gbnVtYmVyIG9mIGRheXMgaW4geWVhciBwcmVjZWVkaW5nIGZpcnN0IGRheSBvZiBtb250aCAqLworLyogeWVhciwgbW9udGggLT4gbnVtYmVyIG9mIGRheXMgaW4geWVhciBwcmVjZWRpbmcgZmlyc3QgZGF5IG9mIG1vbnRoICovCiBzdGF0aWMgaW50CiBkYXlzX2JlZm9yZV9tb250aChpbnQgeWVhciwgaW50IG1vbnRoKQogewpAQCAtMTA2Nyw3ICsxMDczLDcgQEAKICAgICBtaW51dGVzID0gZGl2bW9kKHNlY29uZHMsIDYwLCAmc2Vjb25kcyk7CiAgICAgaG91cnMgPSBkaXZtb2QobWludXRlcywgNjAsICZtaW51dGVzKTsKICAgICBhc3NlcnQoc2Vjb25kcyA9PSAwKTsKLSAgICAvKiBYWFggaWdub3JlIHN1Yi1taW51dGUgZGF0YSwgY3VyZW50bHkgbm90IGFsbG93ZWQuICovCisgICAgLyogWFhYIGlnbm9yZSBzdWItbWludXRlIGRhdGEsIGN1cnJlbnRseSBub3QgYWxsb3dlZC4gKi8KICAgICBQeU9TX3NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJWMlMDJkJXMlMDJkIiwgc2lnbiwgaG91cnMsIHNlcCwgbWludXRlcyk7CiAKICAgICByZXR1cm4gMDsKQEAgLTI0NTksNyArMjQ2NSw3IEBACiAgICAgc3RydWN0IHRtICp0bTsKICAgICB0aW1lX3QgdDsKIAotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZV90KG9iaiwgJnQsIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEpCisgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lX3Qob2JqLCAmdCwgX1B5VGltZV9ST1VORF9GTE9PUikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgdG0gPSBsb2NhbHRpbWUoJnQpOwpAQCAtMzI5OCw3ICszMzA0LDcgQEAKICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKICAgICBtaW51dGVzID0gZGl2bW9kKHNlY29uZHMsIDYwLCAmc2Vjb25kcyk7CiAgICAgaG91cnMgPSBkaXZtb2QobWludXRlcywgNjAsICZtaW51dGVzKTsKLSAgICAvKiBYWFggaWdub3JlIHN1Yi1taW51dGUgZGF0YSwgY3VyZW50bHkgbm90IGFsbG93ZWQuICovCisgICAgLyogWFhYIGlnbm9yZSBzdWItbWludXRlIGRhdGEsIGN1cnJlbnRseSBub3QgYWxsb3dlZC4gKi8KICAgICBhc3NlcnQoc2Vjb25kcyA9PSAwKTsKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIlVUQyVjJTAyZDolMDJkIiwgc2lnbiwgaG91cnMsIG1pbnV0ZXMpOwogfQpAQCAtMzgwNSwyOSArMzgxMSw2IEBACiAgICAgcmV0dXJuIGNsb25lOwogfQogCi1zdGF0aWMgaW50Ci10aW1lX2Jvb2woUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKm9mZnNldCwgKnR6aW5mbzsKLSAgICBpbnQgb2Zmc2VjcyA9IDA7Ci0KLSAgICBpZiAoVElNRV9HRVRfU0VDT05EKHNlbGYpIHx8IFRJTUVfR0VUX01JQ1JPU0VDT05EKHNlbGYpKSB7Ci0gICAgICAgIC8qIFNpbmNlIHV0Y29mZnNldCBpcyBpbiB3aG9sZSBtaW51dGVzLCBub3RoaW5nIGNhbgotICAgICAgICAgKiBhbHRlciB0aGUgY29uY2x1c2lvbiB0aGF0IHRoaXMgaXMgbm9uemVyby4KLSAgICAgICAgICovCi0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICB0emluZm8gPSBHRVRfVElNRV9UWklORk8oc2VsZik7Ci0gICAgaWYgKHR6aW5mbyAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIG9mZnNldCA9IGNhbGxfdXRjb2Zmc2V0KHR6aW5mbywgUHlfTm9uZSk7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgb2Zmc2VjcyA9IEdFVF9URF9EQVlTKG9mZnNldCkqODY0MDAgKyBHRVRfVERfU0VDT05EUyhvZmZzZXQpOwotICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIChUSU1FX0dFVF9NSU5VVEUoc2VsZikqNjAgLSBvZmZzZWNzICsgVElNRV9HRVRfSE9VUihzZWxmKSozNjAwKSAhPSAwOwotfQotCiAvKiBQaWNrbGUgc3VwcG9ydCwgYSBzaW1wbGUgdXNlIG9mIF9fcmVkdWNlX18uICovCiAKIC8qIExldCBiYXNlc3RhdGUgYmUgdGhlIG5vbi10emluZm8gZGF0YSBzdHJpbmcuCkBAIC0zODk1LDE5ICszODc4LDYgQEAKIEFsbCBhcmd1bWVudHMgYXJlIG9wdGlvbmFsLiB0emluZm8gbWF5IGJlIE5vbmUsIG9yIGFuIGluc3RhbmNlIG9mXG5cCiBhIHR6aW5mbyBzdWJjbGFzcy4gVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgbWF5IGJlIGludHMuXG4iKTsKIAotc3RhdGljIFB5TnVtYmVyTWV0aG9kcyB0aW1lX2FzX251bWJlciA9IHsKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2FkZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfc3VidHJhY3QgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX211bHRpcGx5ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9yZW1haW5kZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2Rpdm1vZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfcG93ZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX25lZ2F0aXZlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9wb3NpdGl2ZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfYWJzb2x1dGUgKi8KLSAgICAoaW5xdWlyeSl0aW1lX2Jvb2wsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2Jvb2wgKi8KLX07Ci0KIHN0YXRpYyBQeVR5cGVPYmplY3QgUHlEYXRlVGltZV9UaW1lVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiZGF0ZXRpbWUudGltZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTM5MTksNyArMzg4OSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwogICAgIChyZXByZnVuYyl0aW1lX3JlcHIsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLwotICAgICZ0aW1lX2FzX251bWJlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCiAgICAgKGhhc2hmdW5jKXRpbWVfaGFzaCwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCkBAIC00MTk0LDEwICs0MTY0LDE1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGF0ZXRpbWVfYmVzdF9wb3NzaWJsZShQeU9iamVjdCAqY2xzLCBUTV9GVU5DIGYsIFB5T2JqZWN0ICp0emluZm8pCiB7Ci0gICAgX1B5VGltZV90aW1ldmFsIHQ7Ci0gICAgX1B5VGltZV9nZXR0aW1lb2ZkYXkoJnQpOwotICAgIHJldHVybiBkYXRldGltZV9mcm9tX3RpbWV0X2FuZF91cyhjbHMsIGYsIHQudHZfc2VjLCAoaW50KXQudHZfdXNlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKTsKKyAgICBfUHlUaW1lX3QgdHMgPSBfUHlUaW1lX0dldFN5c3RlbUNsb2NrKCk7CisgICAgdGltZV90IHNlY3M7CisgICAgaW50IHVzOworCisgICAgaWYgKF9QeVRpbWVfQXNUaW1ldmFsVGltZV90KHRzLCAmc2VjcywgJnVzLCBfUHlUaW1lX1JPVU5EX0ZMT09SKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzc2VydCgwIDw9IHVzICYmIHVzIDw9IDk5OTk5OSk7CisKKyAgICByZXR1cm4gZGF0ZXRpbWVfZnJvbV90aW1ldF9hbmRfdXMoY2xzLCBmLCBzZWNzLCB1cywgdHppbmZvKTsKIH0KIAogLypbY2xpbmljIGlucHV0XQpAQCAtNDIxMyw0MyArNDE4OCw5IEBACiBJZiBubyB0eiBpcyBzcGVjaWZpZWQsIHVzZXMgbG9jYWwgdGltZXpvbmUuCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihkYXRldGltZV9kYXRldGltZV9ub3dfX2RvY19fLAotIm5vdygkdHlwZSwgLywgdHo9Tm9uZSlcbiIKLSItLVxuIgotIlxuIgotIlJldHVybnMgbmV3IGRhdGV0aW1lIG9iamVjdCByZXByZXNlbnRpbmcgY3VycmVudCB0aW1lIGxvY2FsIHRvIHR6LlxuIgotIlxuIgotIiAgdHpcbiIKLSIgICAgVGltZXpvbmUgb2JqZWN0LlxuIgotIlxuIgotIklmIG5vIHR6IGlzIHNwZWNpZmllZCwgdXNlcyBsb2NhbCB0aW1lem9uZS4iKTsKLQotI2RlZmluZSBEQVRFVElNRV9EQVRFVElNRV9OT1dfTUVUSE9EREVGICAgIFwKLSAgICB7Im5vdyIsIChQeUNGdW5jdGlvbilkYXRldGltZV9kYXRldGltZV9ub3csIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfE1FVEhfQ0xBU1MsIGRhdGV0aW1lX2RhdGV0aW1lX25vd19fZG9jX199LAotCi1zdGF0aWMgUHlPYmplY3QgKgotZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdHopOwotCi1zdGF0aWMgUHlPYmplY3QgKgotZGF0ZXRpbWVfZGF0ZXRpbWVfbm93KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJ0eiIsIE5VTEx9OwotICAgIFB5T2JqZWN0ICp0eiA9IFB5X05vbmU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCi0gICAgICAgICJ8Tzpub3ciLCBfa2V5d29yZHMsCi0gICAgICAgICZ0eikpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICByZXR1cm5fdmFsdWUgPSBkYXRldGltZV9kYXRldGltZV9ub3dfaW1wbCh0eXBlLCB0eik7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICoKIGRhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnR6KQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU4M2M1NjM3ZTNjODQzZmEgaW5wdXQ9ODBkMDk4NjljNTI2N2QwMF0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWIzMzg2ZTUzNDVlMmI0N2EgaW5wdXQ9ODBkMDk4NjljNTI2N2QwMF0qLwogewogICAgIFB5T2JqZWN0ICpzZWxmOwogCkBAIC00ODA4LDcgKzQ3NDksMTIgQEAKICAgICBQeU9iamVjdCAqbmFtZW8gPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKnpvbmUgPSBOVUxMOwogCi0gICAgZGVsdGEgPSBkYXRldGltZV9zdWJ0cmFjdCgoUHlPYmplY3QgKil1dGNfdGltZSwgUHlEYXRlVGltZV9FcG9jaCk7CisgICAgZGVsdGEgPSBuZXdfZGVsdGEoeW1kX3RvX29yZChHRVRfWUVBUih1dGNfdGltZSksIEdFVF9NT05USCh1dGNfdGltZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfREFZKHV0Y190aW1lKSkgLSA3MTkxNjMsCisgICAgICAgICAgICAgICAgICAgICAgNjAgKiAoNjAgKiBEQVRFX0dFVF9IT1VSKHV0Y190aW1lKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURV9HRVRfTUlOVVRFKHV0Y190aW1lKSkgKworICAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX1NFQ09ORCh1dGNfdGltZSksCisgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CiAgICAgaWYgKGRlbHRhID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG9uZV9zZWNvbmQgPSBuZXdfZGVsdGEoMCwgMSwgMCwgMCk7CkBAIC01MTExLDggKzUwNTcsNyBAQAogCiAgICAgeyJ1dGNmcm9tdGltZXN0YW1wIiwgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX3V0Y2Zyb210aW1lc3RhbXAsCiAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfQ0xBU1MsCi0gICAgIFB5RG9jX1NUUigidGltZXN0YW1wIC0+IFVUQyBkYXRldGltZSBmcm9tIGEgUE9TSVggdGltZXN0YW1wICIKLSAgICAgICAgICAgICAgICIobGlrZSB0aW1lLnRpbWUoKSkuIil9LAorICAgICBQeURvY19TVFIoIkNvbnN0cnVjdCBhIG5haXZlIFVUQyBkYXRldGltZSBmcm9tIGEgUE9TSVggdGltZXN0YW1wLiIpfSwKIAogICAgIHsic3RycHRpbWUiLCAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfc3RycHRpbWUsCiAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfQ0xBU1MsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kYm1tb2R1bGUuYyBiL01vZHVsZXMvX2RibW1vZHVsZS5jCmluZGV4IDkzZWE0MTYuLmVhODc5MGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2RibW1vZHVsZS5jCkBAIC0yOSwxMCArMjksMTAgQEAKICNlbmRpZgogCiAvKltjbGluaWMgaW5wdXRdCi1tb2R1bGUgZGJtCi1jbGFzcyBkYm0uZGJtICJkYm1vYmplY3QgKiIgIiZEYm10eXBlIgorbW9kdWxlIF9kYm0KK2NsYXNzIF9kYm0uZGJtICJkYm1vYmplY3QgKiIgIiZEYm10eXBlIgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OTI0NTA1NjQ2ODRhNjlhM10qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OWIxYWE4NzU2ZDE2MTUwZV0qLwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtNDAsNiArNDAsOCBAQAogICAgIERCTSAqZGlfZGJtOwogfSBkYm1vYmplY3Q7CiAKKyNpbmNsdWRlICJjbGluaWMvX2RibW1vZHVsZS5jLmgiCisKIHN0YXRpYyBQeVR5cGVPYmplY3QgRGJtdHlwZTsKIAogI2RlZmluZSBpc19kYm1vYmplY3QodikgKFB5X1RZUEUodikgPT0gJkRibXR5cGUpCkBAIC00OSwxNSArNTEsNiBAQAogCiBzdGF0aWMgUHlPYmplY3QgKkRibUVycm9yOwogCi0vKltweXRob24gaW5wdXRdCi1jbGFzcyBkYm1vYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKLSAgICB0eXBlID0gImRibW9iamVjdCAqIgotICAgIGRlZiBwcmVfcmVuZGVyKHNlbGYpOgotICAgICAgICBzdXBlcigpLnByZV9yZW5kZXIoKQotICAgICAgICBzZWxmLm5hbWUgPSAnZHAnCi1bcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCi0vKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD02YWQ1MzYzNTc5MTM4NzlhXSovCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBuZXdkYm1vYmplY3QoY29uc3QgY2hhciAqZmlsZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKIHsKQEAgLTE4MSwyOSArMTc0LDQzIEBACiAgICAgKG9iam9iamFyZ3Byb2MpZGJtX2Fzc19zdWIsICAgICAgICAgLyptcF9hc3Nfc3Vic2NyaXB0Ki8KIH07CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19kYm0uZGJtLmNsb3NlCisKK0Nsb3NlIHRoZSBkYXRhYmFzZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK19kYm1fZGJtX2Nsb3NlX2ltcGwoZGJtb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWM4ZGM1YjY3MDk2MDBiODYgaW5wdXQ9MDQ2ZGI3MjM3N2Q1MWJlOF0qLwogewotICAgIGlmIChkcC0+ZGlfZGJtKQotICAgICAgICBkYm1fY2xvc2UoZHAtPmRpX2RibSk7Ci0gICAgZHAtPmRpX2RibSA9IE5VTEw7CisgICAgaWYgKHNlbGYtPmRpX2RibSkKKyAgICAgICAgZGJtX2Nsb3NlKHNlbGYtPmRpX2RibSk7CisgICAgc2VsZi0+ZGlfZGJtID0gTlVMTDsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19kYm0uZGJtLmtleXMKKworUmV0dXJuIGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorX2RibV9kYm1fa2V5c19pbXBsKGRibW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MzQ1NDlmN2MxMjFiMzNjIGlucHV0PWQyMTBiYTc3OGNkOWM2OGFdKi8KIHsKICAgICBQeU9iamVjdCAqdiwgKml0ZW07CiAgICAgZGF0dW0ga2V5OwogICAgIGludCBlcnI7CiAKLSAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CisgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oc2VsZik7CiAgICAgdiA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yIChrZXkgPSBkYm1fZmlyc3RrZXkoZHAtPmRpX2RibSk7IGtleS5kcHRyOwotICAgICAgICAga2V5ID0gZGJtX25leHRrZXkoZHAtPmRpX2RibSkpIHsKKyAgICBmb3IgKGtleSA9IGRibV9maXJzdGtleShzZWxmLT5kaV9kYm0pOyBrZXkuZHB0cjsKKyAgICAgICAgIGtleSA9IGRibV9uZXh0a2V5KHNlbGYtPmRpX2RibSkpIHsKICAgICAgICAgaXRlbSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoa2V5LmRwdHIsIGtleS5kc2l6ZSk7CiAgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKQEAgLTI2NSw1OCArMjcyLDI3IEBACiB9OwogCiAvKltjbGluaWMgaW5wdXRdCitfZGJtLmRibS5nZXQKIAotZGJtLmRibS5nZXQKLQotICAgIHNlbGY6IGRibW9iamVjdAotCi0gICAga2V5OiBzdHIobGVuZ3RoPVRydWUpCi0gICAgZGVmYXVsdDogb2JqZWN0ID0gTm9uZQorICAgIGtleTogc3RyKGFjY2VwdD17c3RyLCByb2J1ZmZlcn0sIHplcm9lcz1UcnVlKQorICAgIGRlZmF1bHQ6IG9iamVjdChjX2RlZmF1bHQ9Ik5VTEwiKSA9IGInJwogICAgIC8KIAogUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi1QeURvY19TVFJWQVIoZGJtX2RibV9nZXRfX2RvY19fLAotImdldCgkc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUsIC8pXG4iCi0iLS1cbiIKLSJcbiIKLSJSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuIik7Ci0KLSNkZWZpbmUgREJNX0RCTV9HRVRfTUVUSE9EREVGICAgIFwKLSAgICB7ImdldCIsIChQeUNGdW5jdGlvbilkYm1fZGJtX2dldCwgTUVUSF9WQVJBUkdTLCBkYm1fZGJtX2dldF9fZG9jX199LAotCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2RibV9nZXRfaW1wbChkYm1vYmplY3QgKmRwLCBjb25zdCBjaGFyICprZXksIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aCwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotZGJtX2RibV9nZXQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqa2V5OwotICAgIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aDsKLSAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IFB5X05vbmU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInMjfE86Z2V0IiwKLSAgICAgICAgJmtleSwgJmtleV9sZW5ndGgsICZkZWZhdWx0X3ZhbHVlKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IGRibV9kYm1fZ2V0X2ltcGwoZHAsIGtleSwga2V5X2xlbmd0aCwgZGVmYXVsdF92YWx1ZSk7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWRibV9kYm1fZ2V0X2ltcGwoZGJtb2JqZWN0ICpkcCwgY29uc3QgY2hhciAqa2V5LCBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGgsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQ1MmVhMTEzOTRlN2U5MmQgaW5wdXQ9YWVjZjVlZmQyZjJiMWEzYl0qLworX2RibV9kYm1fZ2V0X2ltcGwoZGJtb2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGgsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI0NGY5NWViYTgyMDNkOTMgaW5wdXQ9YTNhMjc5OTU3Zjg1ZWI2ZF0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRmNWMwZTUyM2VhZjEyNTEgaW5wdXQ9OTQwMmMwYWY4NTgyZGM2OV0qLwogewogICAgIGRhdHVtIGRibV9rZXksIHZhbDsKIAogICAgIGRibV9rZXkuZHB0ciA9IChjaGFyICopa2V5OwogICAgIGRibV9rZXkuZHNpemUgPSBrZXlfbGVuZ3RoOwotICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKLSAgICB2YWwgPSBkYm1fZmV0Y2goZHAtPmRpX2RibSwgZGJtX2tleSk7CisgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oc2VsZik7CisgICAgdmFsID0gZGJtX2ZldGNoKHNlbGYtPmRpX2RibSwgZGJtX2tleSk7CiAgICAgaWYgKHZhbC5kcHRyICE9IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZhbC5kcHRyLCB2YWwuZHNpemUpOwogCkBAIC0zMjQsNDYgKzMwMCw1NSBAQAogICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfZGJtLmRibS5zZXRkZWZhdWx0CisgICAga2V5OiBzdHIoYWNjZXB0PXtzdHIsIHJvYnVmZmVyfSwgemVyb2VzPVRydWUpCisgICAgZGVmYXVsdDogb2JqZWN0KGNfZGVmYXVsdD0iTlVMTCIpID0gYicnCisgICAgLworCitSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuCisKK0lmIGtleSBpcyBub3QgaW4gdGhlIGRhdGFiYXNlLCBpdCBpcyBpbnNlcnRlZCB3aXRoIGRlZmF1bHQgYXMgdGhlIHZhbHVlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3NldGRlZmF1bHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCitfZGJtX2RibV9zZXRkZWZhdWx0X2ltcGwoZGJtb2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUyNTQ1ODg2Y2YyNzIxNjEgaW5wdXQ9YmY0MGM0OGVkYWNhMDFkNl0qLwogewotICAgIGRhdHVtIGtleSwgdmFsOwotICAgIFB5T2JqZWN0ICpkZWZ2YWx1ZSA9IE5VTEw7Ci0gICAgY2hhciAqdG1wX3B0cjsKKyAgICBkYXR1bSBkYm1fa2V5LCB2YWw7CiAgICAgUHlfc3NpemVfdCB0bXBfc2l6ZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyN8TzpzZXRkZWZhdWx0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcF9wdHIsICZ0bXBfc2l6ZSwgJmRlZnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2V5LmRwdHIgPSB0bXBfcHRyOwotICAgIGtleS5kc2l6ZSA9IHRtcF9zaXplOwotICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKLSAgICB2YWwgPSBkYm1fZmV0Y2goZHAtPmRpX2RibSwga2V5KTsKKyAgICBkYm1fa2V5LmRwdHIgPSAoY2hhciAqKWtleTsKKyAgICBkYm1fa2V5LmRzaXplID0ga2V5X2xlbmd0aDsKKyAgICBjaGVja19kYm1vYmplY3Rfb3BlbihzZWxmKTsKKyAgICB2YWwgPSBkYm1fZmV0Y2goc2VsZi0+ZGlfZGJtLCBkYm1fa2V5KTsKICAgICBpZiAodmFsLmRwdHIgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUodmFsLmRwdHIsIHZhbC5kc2l6ZSk7Ci0gICAgaWYgKGRlZnZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgZGVmdmFsdWUgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwotICAgICAgICBpZiAoZGVmdmFsdWUgPT0gTlVMTCkKKyAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIGRlZmF1bHRfdmFsdWUgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOworICAgICAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHZhbC5kcHRyID0gTlVMTDsKICAgICAgICAgdmFsLmRzaXplID0gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICggIVB5QXJnX1BhcnNlKGRlZnZhbHVlLCAicyMiLCAmdmFsLmRwdHIsICZ0bXBfc2l6ZSkgKSB7CisgICAgICAgIGlmICggIVB5QXJnX1BhcnNlKGRlZmF1bHRfdmFsdWUsICJzIyIsICZ2YWwuZHB0ciwgJnRtcF9zaXplKSApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgImRibSBtYXBwaW5ncyBoYXZlIGJ5dGUgc3RyaW5nIGVsZW1lbnRzIG9ubHkiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHZhbC5kc2l6ZSA9IHRtcF9zaXplOwotICAgICAgICBQeV9JTkNSRUYoZGVmdmFsdWUpOworICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CiAgICAgfQotICAgIGlmIChkYm1fc3RvcmUoZHAtPmRpX2RibSwga2V5LCB2YWwsIERCTV9JTlNFUlQpIDwgMCkgewotICAgICAgICBkYm1fY2xlYXJlcnIoZHAtPmRpX2RibSk7CisgICAgaWYgKGRibV9zdG9yZShzZWxmLT5kaV9kYm0sIGRibV9rZXksIHZhbCwgREJNX0lOU0VSVCkgPCAwKSB7CisgICAgICAgIGRibV9jbGVhcmVycihzZWxmLT5kaV9kYm0pOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRGJtRXJyb3IsICJjYW5ub3QgYWRkIGl0ZW0gdG8gZGF0YWJhc2UiKTsKLSAgICAgICAgUHlfREVDUkVGKGRlZnZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKGRlZmF1bHRfdmFsdWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIGRlZnZhbHVlOworICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzgyLDE1ICszNjcsMTAgQEAKIAogCiBzdGF0aWMgUHlNZXRob2REZWYgZGJtX21ldGhvZHNbXSA9IHsKLSAgICB7ImNsb3NlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilkYm1fX2Nsb3NlLCAgICAgICAgTUVUSF9OT0FSR1MsCi0gICAgICJjbG9zZSgpXG5DbG9zZSB0aGUgZGF0YWJhc2UuIn0sCi0gICAgeyJrZXlzIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGJtX2tleXMsICAgICAgICAgIE1FVEhfTk9BUkdTLAotICAgICAia2V5cygpIC0+IGxpc3RcblJldHVybiBhIGxpc3Qgb2YgYWxsIGtleXMgaW4gdGhlIGRhdGFiYXNlLiJ9LAotICAgIERCTV9EQk1fR0VUX01FVEhPRERFRgotICAgIHsic2V0ZGVmYXVsdCIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zZXRkZWZhdWx0LCAgICBNRVRIX1ZBUkFSR1MsCi0gICAgICJzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgotICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiAgSWYga2V5XG4iCi0gICAgICJpcyBub3QgaW4gdGhlIGRhdGFiYXNlLCBpdCBpcyBpbnNlcnRlZCB3aXRoIGRlZmF1bHQgYXMgdGhlIHZhbHVlLiJ9LAorICAgIF9EQk1fREJNX0NMT1NFX01FVEhPRERFRgorICAgIF9EQk1fREJNX0tFWVNfTUVUSE9EREVGCisgICAgX0RCTV9EQk1fR0VUX01FVEhPRERFRgorICAgIF9EQk1fREJNX1NFVERFRkFVTFRfTUVUSE9EREVGCiAgICAgeyJfX2VudGVyX18iLCBkYm1fX2VudGVyX18sIE1FVEhfTk9BUkdTLCBOVUxMfSwKICAgICB7Il9fZXhpdF9fIiwgIGRibV9fZXhpdF9fLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC00MzEsNyArNDExLDcgQEAKIAogLypbY2xpbmljIGlucHV0XQogCi1kYm0ub3BlbiBhcyBkYm1vcGVuCitfZGJtLm9wZW4gYXMgZGJtb3BlbgogCiAgICAgZmlsZW5hbWU6IHN0cgogICAgICAgICBUaGUgZmlsZW5hbWUgdG8gb3Blbi4KQEAgLTQ0OSw0NyArNDI5LDEwIEBACiAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotUHlEb2NfU1RSVkFSKGRibW9wZW5fX2RvY19fLAotIm9wZW4oJG1vZHVsZSwgZmlsZW5hbWUsIGZsYWdzPVwnclwnLCBtb2RlPTBvNjY2LCAvKVxuIgotIi0tXG4iCi0iXG4iCi0iUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LlxuIgotIlxuIgotIiAgZmlsZW5hbWVcbiIKLSIgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uXG4iCi0iICBmbGFnc1xuIgotIiAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gIFwiclwiIGZvciByZWFkaW5nLCBcIndcIiBmb3Igd3JpdGluZywgZXRjLlxuIgotIiAgbW9kZVxuIgotIiAgICBJZiBjcmVhdGluZyBhIG5ldyBmaWxlLCB0aGUgbW9kZSBiaXRzIGZvciB0aGUgbmV3IGZpbGVcbiIKLSIgICAgKGUuZy4gb3MuT19SRFdSKS4iKTsKLQotI2RlZmluZSBEQk1PUEVOX01FVEhPRERFRiAgICBcCi0gICAgeyJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWRibW9wZW4sIE1FVEhfVkFSQVJHUywgZGJtb3Blbl9fZG9jX199LAotCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtb3Blbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywgaW50IG1vZGUpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotZGJtb3BlbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKLSAgICBjb25zdCBjaGFyICpmbGFncyA9ICJyIjsKLSAgICBpbnQgbW9kZSA9IDQzODsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAic3xzaTpvcGVuIiwKLSAgICAgICAgJmZpbGVuYW1lLCAmZmxhZ3MsICZtb2RlKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IGRibW9wZW5faW1wbChtb2R1bGUsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWRibW9wZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZmxhZ3MsIGludCBtb2RlKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTlhN2I3MjVmOWM0ZGNlYzIgaW5wdXQ9NjQ5OWFiMGZhYjEzMzNhY10qLworZGJtb3Blbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywKKyAgICAgICAgICAgICBpbnQgbW9kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZmFkZThjZjE2ZTA3NTVmIGlucHV0PTIyNjMzNGJhZGU1NzY0ZTZdKi8KIHsKICAgICBpbnQgaWZsYWdzOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMgYi9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMKaW5kZXggZjAwMDg4Ny4uZTE1OTQxYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jCisrKyBiL01vZHVsZXMvX2RlY2ltYWwvX2RlY2ltYWwuYwpAQCAtMjIwOCw2ICsyMjA4LDE0IEBACiAgICAgcmV0dXJuIGRlYzsKIH0KIAorLyogRXh0ZXJuYWwgQy1BUEkgZnVuY3Rpb25zICovCitzdGF0aWMgYmluYXJ5ZnVuYyBfcHlfbG9uZ19tdWx0aXBseTsKK3N0YXRpYyBiaW5hcnlmdW5jIF9weV9sb25nX2Zsb29yX2RpdmlkZTsKK3N0YXRpYyB0ZXJuYXJ5ZnVuYyBfcHlfbG9uZ19wb3dlcjsKK3N0YXRpYyB1bmFyeWZ1bmMgX3B5X2Zsb2F0X2FiczsKK3N0YXRpYyBQeUNGdW5jdGlvbiBfcHlfbG9uZ19iaXRfbGVuZ3RoOworc3RhdGljIFB5Q0Z1bmN0aW9uIF9weV9mbG9hdF9hc19pbnRlZ2VyX3JhdGlvOworCiAvKiBSZXR1cm4gYSBQeURlY09iamVjdCBvciBhIHN1YnR5cGUgZnJvbSBhIFB5RmxvYXRPYmplY3QuCiAgICBDb252ZXJzaW9uIGlzIGV4YWN0LiAqLwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIyNTgsMTMgKzIyNjYsMTMgQEAKICAgICB9CiAKICAgICAvKiBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZmxvYXQgKi8KLSAgICB0bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHYsICJfX2Fic19fIiwgTlVMTCk7CisgICAgdG1wID0gX3B5X2Zsb2F0X2Ficyh2KTsKICAgICBpZiAodG1wID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogZmxvYXQgYXMgaW50ZWdlciByYXRpbzogbnVtZXJhdG9yL2Rlbm9taW5hdG9yICovCi0gICAgbl9kID0gUHlPYmplY3RfQ2FsbE1ldGhvZCh0bXAsICJhc19pbnRlZ2VyX3JhdGlvIiwgTlVMTCk7CisgICAgbl9kID0gX3B5X2Zsb2F0X2FzX2ludGVnZXJfcmF0aW8odG1wLCBOVUxMKTsKICAgICBQeV9ERUNSRUYodG1wKTsKICAgICBpZiAobl9kID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMjcyLDcgKzIyODAsNyBAQAogICAgIG4gPSBQeVR1cGxlX0dFVF9JVEVNKG5fZCwgMCk7CiAgICAgZCA9IFB5VHVwbGVfR0VUX0lURU0obl9kLCAxKTsKIAotICAgIHRtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZCwgImJpdF9sZW5ndGgiLCBOVUxMKTsKKyAgICB0bXAgPSBfcHlfbG9uZ19iaXRfbGVuZ3RoKGQsIE5VTEwpOwogICAgIGlmICh0bXAgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYobl9kKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNjMwLDEyICsyNjM4LDE4IEBACiAKIC8qIGNsYXNzIG1ldGhvZCAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWRlY19mcm9tX2Zsb2F0KFB5T2JqZWN0ICpkZWMsIFB5T2JqZWN0ICpweWZsb2F0KQorZGVjX2Zyb21fZmxvYXQoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpweWZsb2F0KQogewogICAgIFB5T2JqZWN0ICpjb250ZXh0OworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKICAgICBDVVJSRU5UX0NPTlRFWFQoY29udGV4dCk7Ci0gICAgcmV0dXJuIFB5RGVjVHlwZV9Gcm9tRmxvYXRFeGFjdCgoUHlUeXBlT2JqZWN0ICopZGVjLCBweWZsb2F0LCBjb250ZXh0KTsKKyAgICByZXN1bHQgPSBQeURlY1R5cGVfRnJvbUZsb2F0RXhhY3QoJlB5RGVjX1R5cGUsIHB5ZmxvYXQsIGNvbnRleHQpOworICAgIGlmICh0eXBlICE9IChQeU9iamVjdCAqKSZQeURlY19UeXBlICYmIHJlc3VsdCAhPSBOVUxMKSB7CisgICAgICAgIFB5X1NFVFJFRihyZXN1bHQsIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3ModHlwZSwgcmVzdWx0LCBOVUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCAqLwpAQCAtNDUyOSw3ICs0NTQzLDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlczsKIAotICAgIHJlcyA9IHNpemVvZihQeURlY09iamVjdCk7CisgICAgcmVzID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRSh2KSk7CiAgICAgaWYgKG1wZF9pc2R5bmFtaWNfZGF0YShNUEQodikpKSB7CiAgICAgICAgIHJlcyArPSBNUEQodiktPmFsbG9jICogc2l6ZW9mKG1wZF91aW50X3QpOwogICAgIH0KQEAgLTU1MDUsNiArNTUxOSwzMiBAQAogI2RlZmluZSBDSEVDS19QVFIoZXhwcikgXAogICAgIGRvIHsgaWYgKChleHByKSA9PSBOVUxMKSBnb3RvIGVycm9yOyB9IHdoaWxlICgwKQogCisKK3N0YXRpYyBQeUNGdW5jdGlvbgorY2Z1bmNfbm9hcmdzKFB5VHlwZU9iamVjdCAqdCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzdHJ1Y3QgUHlNZXRob2REZWYgKm07CisKKyAgICBpZiAodC0+dHBfbWV0aG9kcyA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgZm9yIChtID0gdC0+dHBfbWV0aG9kczsgbS0+bWxfbmFtZSAhPSBOVUxMOyBtKyspIHsKKyAgICAgICAgaWYgKHN0cmNtcChuYW1lLCBtLT5tbF9uYW1lKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoIShtLT5tbF9mbGFncyAmIE1FVEhfTk9BUkdTKSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbS0+bWxfbWV0aDsKKyAgICAgICAgfQorICAgIH0KKworZXJyb3I6CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgImludGVybmFsIGVycm9yOiBjb3VsZCBub3QgZmluZCBtZXRob2QgJXMiLCBuYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19kZWNpbWFsKHZvaWQpCiB7CkBAIC01NTI5LDYgKzU1NjksMTYgQEAKICAgICBtcGRfc2V0bWluYWxsb2MoX1B5X0RFQ19NSU5BTExPQyk7CiAKIAorICAgIC8qIEluaXQgZXh0ZXJuYWwgQy1BUEkgZnVuY3Rpb25zICovCisgICAgX3B5X2xvbmdfbXVsdGlwbHkgPSBQeUxvbmdfVHlwZS50cF9hc19udW1iZXItPm5iX211bHRpcGx5OworICAgIF9weV9sb25nX2Zsb29yX2RpdmlkZSA9IFB5TG9uZ19UeXBlLnRwX2FzX251bWJlci0+bmJfZmxvb3JfZGl2aWRlOworICAgIF9weV9sb25nX3Bvd2VyID0gUHlMb25nX1R5cGUudHBfYXNfbnVtYmVyLT5uYl9wb3dlcjsKKyAgICBfcHlfZmxvYXRfYWJzID0gUHlGbG9hdF9UeXBlLnRwX2FzX251bWJlci0+bmJfYWJzb2x1dGU7CisgICAgQVNTSUdOX1BUUihfcHlfZmxvYXRfYXNfaW50ZWdlcl9yYXRpbywgY2Z1bmNfbm9hcmdzKCZQeUZsb2F0X1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhc19pbnRlZ2VyX3JhdGlvIikpOworICAgIEFTU0lHTl9QVFIoX3B5X2xvbmdfYml0X2xlbmd0aCwgY2Z1bmNfbm9hcmdzKCZQeUxvbmdfVHlwZSwgImJpdF9sZW5ndGgiKSk7CisKKwogICAgIC8qIEluaXQgdHlwZXMgKi8KICAgICBQeURlY19UeXBlLnRwX2Jhc2UgPSAmUHlCYXNlT2JqZWN0X1R5cGU7CiAgICAgUHlEZWNDb250ZXh0X1R5cGUudHBfYmFzZSA9ICZQeUJhc2VPYmplY3RfVHlwZTsKQEAgLTU2NDAsNyArNTY5MCw3IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOyAvKiBHQ09WX05PVF9SRUFDSEVEICovCiAgICAgICAgIH0KIAotICAgICAgICBBU1NJR05fUFRSKGNtLT5leCwgUHlFcnJfTmV3RXhjZXB0aW9uKChjaGFyICopY20tPmZxbmFtZSwgYmFzZSwgTlVMTCkpOworICAgICAgICBBU1NJR05fUFRSKGNtLT5leCwgUHlFcnJfTmV3RXhjZXB0aW9uKGNtLT5mcW5hbWUsIGJhc2UsIE5VTEwpKTsKICAgICAgICAgUHlfREVDUkVGKGJhc2UpOwogCiAgICAgICAgIC8qIGFkZCB0byBtb2R1bGUgKi8KQEAgLTU2NzIsNyArNTcyMiw3IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOyAvKiBHQ09WX05PVF9SRUFDSEVEICovCiAgICAgICAgIH0KIAotICAgICAgICBBU1NJR05fUFRSKGNtLT5leCwgUHlFcnJfTmV3RXhjZXB0aW9uKChjaGFyICopY20tPmZxbmFtZSwgYmFzZSwgTlVMTCkpOworICAgICAgICBBU1NJR05fUFRSKGNtLT5leCwgUHlFcnJfTmV3RXhjZXB0aW9uKGNtLT5mcW5hbWUsIGJhc2UsIE5VTEwpKTsKICAgICAgICAgUHlfREVDUkVGKGJhc2UpOwogCiAgICAgICAgIFB5X0lOQ1JFRihjbS0+ZXgpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGVjaW1hbC9kb2NzdHJpbmdzLmggYi9Nb2R1bGVzL19kZWNpbWFsL2RvY3N0cmluZ3MuaAppbmRleCBhNjQ5MGI5Li43MTAyOWE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kZWNpbWFsL2RvY3N0cmluZ3MuaAorKysgYi9Nb2R1bGVzL19kZWNpbWFsL2RvY3N0cmluZ3MuaApAQCAtMTksMjYgKzE5LDMwIEBACiBQeURvY19TVFJWQVIoZG9jX19kZWNpbWFsLAogIkMgZGVjaW1hbCBhcml0aG1ldGljIG1vZHVsZSIpOwogCi1QeURvY19TVFJWQVIoZG9jX2dldGNvbnRleHQsIlxuXAotZ2V0Y29udGV4dCgpIC0gR2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgY29udGV4dC5cblwKK1B5RG9jX1NUUlZBUihkb2NfZ2V0Y29udGV4dCwKKyJnZXRjb250ZXh0KCRtb2R1bGUsIC8pXG4tLVxuXG5cCitHZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBjb250ZXh0LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19zZXRjb250ZXh0LCJcblwKLXNldGNvbnRleHQoYykgLSBTZXQgYSBuZXcgZGVmYXVsdCBjb250ZXh0LlxuXAorUHlEb2NfU1RSVkFSKGRvY19zZXRjb250ZXh0LAorInNldGNvbnRleHQoJG1vZHVsZSwgY29udGV4dCwgLylcbi0tXG5cblwKK1NldCBhIG5ldyBkZWZhdWx0IGNvbnRleHQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2xvY2FsY29udGV4dCwiXG5cCi1sb2NhbGNvbnRleHQoY3R4PU5vbmUpIC0gUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgd2lsbCBzZXQgdGhlIGRlZmF1bHRcblwKLWNvbnRleHQgdG8gYSBjb3B5IG9mIGN0eCBvbiBlbnRyeSB0byB0aGUgd2l0aC1zdGF0ZW1lbnQgYW5kIHJlc3RvcmUgdGhlXG5cCi1wcmV2aW91cyBkZWZhdWx0IGNvbnRleHQgd2hlbiBleGl0aW5nIHRoZSB3aXRoLXN0YXRlbWVudC4gSWYgbm8gY29udGV4dCBpc1xuXAotc3BlY2lmaWVkLCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdCBjb250ZXh0IGlzIHVzZWQuXG5cCitQeURvY19TVFJWQVIoZG9jX2xvY2FsY29udGV4dCwKKyJsb2NhbGNvbnRleHQoJG1vZHVsZSwgLywgY3R4PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB3aWxsIHNldCB0aGUgZGVmYXVsdCBjb250ZXh0IHRvIGEgY29weSBvZiBjdHhcblwKK29uIGVudHJ5IHRvIHRoZSB3aXRoLXN0YXRlbWVudCBhbmQgcmVzdG9yZSB0aGUgcHJldmlvdXMgZGVmYXVsdCBjb250ZXh0IHdoZW5cblwKK2V4aXRpbmcgdGhlIHdpdGgtc3RhdGVtZW50LiBJZiBubyBjb250ZXh0IGlzIHNwZWNpZmllZCwgYSBjb3B5IG9mIHRoZSBjdXJyZW50XG5cCitkZWZhdWx0IGNvbnRleHQgaXMgdXNlZC5cblwKIFxuIik7CiAKICNpZmRlZiBFWFRSQV9GVU5DVElPTkFMSVRZCi1QeURvY19TVFJWQVIoZG9jX2llZWVfY29udGV4dCwiXG5cCi1JRUVFQ29udGV4dChiaXRzKSAtIFJldHVybiBhIGNvbnRleHQgb2JqZWN0IGluaXRpYWxpemVkIHRvIHRoZSBwcm9wZXIgdmFsdWVzIGZvclxuXAotb25lIG9mIHRoZSBJRUVFIGludGVyY2hhbmdlIGZvcm1hdHMuIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgYW5kXG5cCi1sZXNzIHRoYW4gSUVFRV9DT05URVhUX01BWF9CSVRTLiBGb3IgdGhlIG1vc3QgY29tbW9uIHZhbHVlcywgdGhlIGNvbnN0YW50c1xuXAorUHlEb2NfU1RSVkFSKGRvY19pZWVlX2NvbnRleHQsCisiSUVFRUNvbnRleHQoJG1vZHVsZSwgYml0cywgLylcbi0tXG5cblwKK1JldHVybiBhIGNvbnRleHQgb2JqZWN0IGluaXRpYWxpemVkIHRvIHRoZSBwcm9wZXIgdmFsdWVzIGZvciBvbmUgb2YgdGhlXG5cCitJRUVFIGludGVyY2hhbmdlIGZvcm1hdHMuICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyIGFuZCBsZXNzXG5cCit0aGFuIElFRUVfQ09OVEVYVF9NQVhfQklUUy4gIEZvciB0aGUgbW9zdCBjb21tb24gdmFsdWVzLCB0aGUgY29uc3RhbnRzXG5cCiBERUNJTUFMMzIsIERFQ0lNQUw2NCBhbmQgREVDSU1BTDEyOCBhcmUgcHJvdmlkZWQuXG5cCiBcbiIpOwogI2VuZGlmCkBAIC00OCwzMiArNTIsMzQgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsIE9iamVjdCBhbmQgTWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1QeURvY19TVFJWQVIoZG9jX2RlY2ltYWwsIlxuXAotRGVjaW1hbCh2YWx1ZT1cIjBcIiwgY29udGV4dD1Ob25lKTogQ29uc3RydWN0IGEgbmV3IERlY2ltYWwgb2JqZWN0LlxuXAotdmFsdWUgY2FuIGJlIGFuIGludGVnZXIsIHN0cmluZywgdHVwbGUsIG9yIGFub3RoZXIgRGVjaW1hbCBvYmplY3QuXG5cCi1JZiBubyB2YWx1ZSBpcyBnaXZlbiwgcmV0dXJuIERlY2ltYWwoJzAnKS4gVGhlIGNvbnRleHQgZG9lcyBub3QgYWZmZWN0XG5cCi10aGUgY29udmVyc2lvbiBhbmQgaXMgb25seSBwYXNzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBJbnZhbGlkT3BlcmF0aW9uXG5cCi10cmFwIGlzIGFjdGl2ZS5cblwKK1B5RG9jX1NUUlZBUihkb2NfZGVjaW1hbCwKKyJEZWNpbWFsKHZhbHVlPVwiMFwiLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitDb25zdHJ1Y3QgYSBuZXcgRGVjaW1hbCBvYmplY3QuICd2YWx1ZScgY2FuIGJlIGFuIGludGVnZXIsIHN0cmluZywgdHVwbGUsXG5cCitvciBhbm90aGVyIERlY2ltYWwgb2JqZWN0LiBJZiBubyB2YWx1ZSBpcyBnaXZlbiwgcmV0dXJuIERlY2ltYWwoJzAnKS4gVGhlXG5cCitjb250ZXh0IGRvZXMgbm90IGFmZmVjdCB0aGUgY29udmVyc2lvbiBhbmQgaXMgb25seSBwYXNzZWQgdG8gZGV0ZXJtaW5lIGlmXG5cCit0aGUgSW52YWxpZE9wZXJhdGlvbiB0cmFwIGlzIGFjdGl2ZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfYWRqdXN0ZWQsIlxuXAotYWRqdXN0ZWQoKSAtIFJldHVybiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQgb2YgdGhlIG51bWJlci5cblwKLVxuXAotRGVmaW5lZCBhcyBleHAgKyBkaWdpdHMgLSAxLlxuXAorUHlEb2NfU1RSVkFSKGRvY19hZGp1c3RlZCwKKyJhZGp1c3RlZCgkc2VsZiwgLylcbi0tXG5cblwKK1JldHVybiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQgb2YgdGhlIG51bWJlci4gIERlZmluZWQgYXMgZXhwICsgZGlnaXRzIC0gMS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfYXNfdHVwbGUsIlxuXAotYXNfdHVwbGUoKSAtIFJldHVybiBhIHR1cGxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIuXG5cCitQeURvY19TVFJWQVIoZG9jX2FzX3R1cGxlLAorImFzX3R1cGxlKCRzZWxmLCAvKVxuLS1cblxuXAorUmV0dXJuIGEgdHVwbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlci5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY2Fub25pY2FsLCJcblwKLWNhbm9uaWNhbCgpIC0gUmV0dXJuIHRoZSBjYW5vbmljYWwgZW5jb2Rpbmcgb2YgdGhlIGFyZ3VtZW50LiBDdXJyZW50bHksXG5cCi10aGUgZW5jb2Rpbmcgb2YgYSBEZWNpbWFsIGluc3RhbmNlIGlzIGFsd2F5cyBjYW5vbmljYWwsIHNvIHRoaXMgb3BlcmF0aW9uXG5cCi1yZXR1cm5zIGl0cyBhcmd1bWVudCB1bmNoYW5nZWQuXG5cCitQeURvY19TVFJWQVIoZG9jX2Nhbm9uaWNhbCwKKyJjYW5vbmljYWwoJHNlbGYsIC8pXG4tLVxuXG5cCitSZXR1cm4gdGhlIGNhbm9uaWNhbCBlbmNvZGluZyBvZiB0aGUgYXJndW1lbnQuICBDdXJyZW50bHksIHRoZSBlbmNvZGluZ1xuXAorb2YgYSBEZWNpbWFsIGluc3RhbmNlIGlzIGFsd2F5cyBjYW5vbmljYWwsIHNvIHRoaXMgb3BlcmF0aW9uIHJldHVybnMgaXRzXG5cCithcmd1bWVudCB1bmNoYW5nZWQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2NvbXBhcmUsIlxuXAotY29tcGFyZShvdGhlciwgY29udGV4dD1Ob25lKSAtIENvbXBhcmUgc2VsZiB0byBvdGhlci4gUmV0dXJuIGEgZGVjaW1hbCB2YWx1ZTpcblwKK1B5RG9jX1NUUlZBUihkb2NfY29tcGFyZSwKKyJjb21wYXJlKCRzZWxmLCAvLCBvdGhlciwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorQ29tcGFyZSBzZWxmIHRvIG90aGVyLiAgUmV0dXJuIGEgZGVjaW1hbCB2YWx1ZTpcblwKIFxuXAogICAgIGEgb3IgYiBpcyBhIE5hTiA9PT4gRGVjaW1hbCgnTmFOJylcblwKICAgICBhIDwgYiAgICAgICAgICAgPT0+IERlY2ltYWwoJy0xJylcblwKQEAgLTgxLDE3ICs4NywxOCBAQAogICAgIGEgPiBiICAgICAgICAgICA9PT4gRGVjaW1hbCgnMScpXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2NvbXBhcmVfc2lnbmFsLCJcblwKLWNvbXBhcmVfc2lnbmFsKG90aGVyLCBjb250ZXh0PU5vbmUpIC0gSWRlbnRpY2FsIHRvIGNvbXBhcmUsIGV4Y2VwdCB0aGF0XG5cCi1hbGwgTmFOcyBzaWduYWwuXG5cCitQeURvY19TVFJWQVIoZG9jX2NvbXBhcmVfc2lnbmFsLAorImNvbXBhcmVfc2lnbmFsKCRzZWxmLCAvLCBvdGhlciwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorSWRlbnRpY2FsIHRvIGNvbXBhcmUsIGV4Y2VwdCB0aGF0IGFsbCBOYU5zIHNpZ25hbC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY29tcGFyZV90b3RhbCwiXG5cCi1jb21wYXJlX3RvdGFsKG90aGVyLCBjb250ZXh0PU5vbmUpIC0gQ29tcGFyZSB0d28gb3BlcmFuZHMgdXNpbmcgdGhlaXJcblwKLWFic3RyYWN0IHJlcHJlc2VudGF0aW9uIHJhdGhlciB0aGFuIHRoZWlyIG51bWVyaWNhbCB2YWx1ZS4gU2ltaWxhciB0byB0aGVcblwKLWNvbXBhcmUoKSBtZXRob2QsIGJ1dCB0aGUgcmVzdWx0IGdpdmVzIGEgdG90YWwgb3JkZXJpbmcgb24gRGVjaW1hbCBpbnN0YW5jZXMuXG5cCi1Ud28gRGVjaW1hbCBpbnN0YW5jZXMgd2l0aCB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGJ1dCBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zXG5cCi1jb21wYXJlIHVuZXF1YWwgaW4gdGhpcyBvcmRlcmluZzpcblwKK1B5RG9jX1NUUlZBUihkb2NfY29tcGFyZV90b3RhbCwKKyJjb21wYXJlX3RvdGFsKCRzZWxmLCAvLCBvdGhlciwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorQ29tcGFyZSB0d28gb3BlcmFuZHMgdXNpbmcgdGhlaXIgYWJzdHJhY3QgcmVwcmVzZW50YXRpb24gcmF0aGVyIHRoYW5cblwKK3RoZWlyIG51bWVyaWNhbCB2YWx1ZS4gIFNpbWlsYXIgdG8gdGhlIGNvbXBhcmUoKSBtZXRob2QsIGJ1dCB0aGUgcmVzdWx0XG5cCitnaXZlcyBhIHRvdGFsIG9yZGVyaW5nIG9uIERlY2ltYWwgaW5zdGFuY2VzLiAgVHdvIERlY2ltYWwgaW5zdGFuY2VzIHdpdGhcblwKK3RoZSBzYW1lIG51bWVyaWMgdmFsdWUgYnV0IGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgY29tcGFyZSB1bmVxdWFsXG5cCitpbiB0aGlzIG9yZGVyaW5nOlxuXAogXG5cCiAgICAgPj4+IERlY2ltYWwoJzEyLjAnKS5jb21wYXJlX3RvdGFsKERlY2ltYWwoJzEyJykpXG5cCiAgICAgRGVjaW1hbCgnLTEnKVxuXApAQCAtMTA3LDM2ICsxMTQsMzkgQEAKIEludmFsaWRPcGVyYXRpb24gaWYgdGhlIHNlY29uZCBvcGVyYW5kIGNhbm5vdCBiZSBjb252ZXJ0ZWQgZXhhY3RseS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY29tcGFyZV90b3RhbF9tYWcsIlxuXAotY29tcGFyZV90b3RhbF9tYWcob3RoZXIsIGNvbnRleHQ9Tm9uZSkgLSBDb21wYXJlIHR3byBvcGVyYW5kcyB1c2luZyB0aGVpclxuXAotYWJzdHJhY3QgcmVwcmVzZW50YXRpb24gcmF0aGVyIHRoYW4gdGhlaXIgdmFsdWUgYXMgaW4gY29tcGFyZV90b3RhbCgpLCBidXRcblwKLWlnbm9yaW5nIHRoZSBzaWduIG9mIGVhY2ggb3BlcmFuZC4geC5jb21wYXJlX3RvdGFsX21hZyh5KSBpcyBlcXVpdmFsZW50IHRvXG5cCi14LmNvcHlfYWJzKCkuY29tcGFyZV90b3RhbCh5LmNvcHlfYWJzKCkpLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jb21wYXJlX3RvdGFsX21hZywKKyJjb21wYXJlX3RvdGFsX21hZygkc2VsZiwgLywgb3RoZXIsIGNvbnRleHQ9Tm9uZSlcbi0tXG5cblwKK0NvbXBhcmUgdHdvIG9wZXJhbmRzIHVzaW5nIHRoZWlyIGFic3RyYWN0IHJlcHJlc2VudGF0aW9uIHJhdGhlciB0aGFuIHRoZWlyXG5cCit2YWx1ZSBhcyBpbiBjb21wYXJlX3RvdGFsKCksIGJ1dCBpZ25vcmluZyB0aGUgc2lnbiBvZiBlYWNoIG9wZXJhbmQuXG5cCitcblwKK3guY29tcGFyZV90b3RhbF9tYWcoeSkgaXMgZXF1aXZhbGVudCB0byB4LmNvcHlfYWJzKCkuY29tcGFyZV90b3RhbCh5LmNvcHlfYWJzKCkpLlxuXAogXG5cCiBUaGlzIG9wZXJhdGlvbiBpcyB1bmFmZmVjdGVkIGJ5IGNvbnRleHQgYW5kIGlzIHF1aWV0OiBubyBmbGFncyBhcmUgY2hhbmdlZFxuXAogYW5kIG5vIHJvdW5kaW5nIGlzIHBlcmZvcm1lZC4gQXMgYW4gZXhjZXB0aW9uLCB0aGUgQyB2ZXJzaW9uIG1heSByYWlzZVxuXAogSW52YWxpZE9wZXJhdGlvbiBpZiB0aGUgc2Vjb25kIG9wZXJhbmQgY2Fubm90IGJlIGNvbnZlcnRlZCBleGFjdGx5LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jb25qdWdhdGUsIlxuXAotY29uanVnYXRlKCkgLSBSZXR1cm4gc2VsZi5cblwKK1B5RG9jX1NUUlZBUihkb2NfY29uanVnYXRlLAorImNvbmp1Z2F0ZSgkc2VsZiwgLylcbi0tXG5cblwKK1JldHVybiBzZWxmLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jb3B5X2FicywiXG5cCi1jb3B5X2FicygpIC0gUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQuIFRoaXMgb3BlcmF0aW9uXG5cCi1pcyB1bmFmZmVjdGVkIGJ5IGNvbnRleHQgYW5kIGlzIHF1aWV0OiBubyBmbGFncyBhcmUgY2hhbmdlZCBhbmQgbm8gcm91bmRpbmdcblwKLWlzIHBlcmZvcm1lZC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY29weV9hYnMsCisiY29weV9hYnMoJHNlbGYsIC8pXG4tLVxuXG5cCitSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBhcmd1bWVudC4gIFRoaXMgb3BlcmF0aW9uIGlzIHVuYWZmZWN0ZWQgYnlcblwKK2NvbnRleHQgYW5kIGlzIHF1aWV0OiBubyBmbGFncyBhcmUgY2hhbmdlZCBhbmQgbm8gcm91bmRpbmcgaXMgcGVyZm9ybWVkLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jb3B5X25lZ2F0ZSwiXG5cCi1jb3B5X25lZ2F0ZSgpIC0gUmV0dXJuIHRoZSBuZWdhdGlvbiBvZiB0aGUgYXJndW1lbnQuIFRoaXMgb3BlcmF0aW9uIGlzXG5cCi11bmFmZmVjdGVkIGJ5IGNvbnRleHQgYW5kIGlzIHF1aWV0OiBubyBmbGFncyBhcmUgY2hhbmdlZCBhbmQgbm8gcm91bmRpbmdcblwKLWlzIHBlcmZvcm1lZC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY29weV9uZWdhdGUsCisiY29weV9uZWdhdGUoJHNlbGYsIC8pXG4tLVxuXG5cCitSZXR1cm4gdGhlIG5lZ2F0aW9uIG9mIHRoZSBhcmd1bWVudC4gIFRoaXMgb3BlcmF0aW9uIGlzIHVuYWZmZWN0ZWQgYnkgY29udGV4dFxuXAorYW5kIGlzIHF1aWV0OiBubyBmbGFncyBhcmUgY2hhbmdlZCBhbmQgbm8gcm91bmRpbmcgaXMgcGVyZm9ybWVkLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jb3B5X3NpZ24sIlxuXAotY29weV9zaWduKG90aGVyLCBjb250ZXh0PU5vbmUpIC0gUmV0dXJuIGEgY29weSBvZiB0aGUgZmlyc3Qgb3BlcmFuZCB3aXRoXG5cCi10aGUgc2lnbiBzZXQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHNpZ24gb2YgdGhlIHNlY29uZCBvcGVyYW5kLiBGb3IgZXhhbXBsZTpcblwKK1B5RG9jX1NUUlZBUihkb2NfY29weV9zaWduLAorImNvcHlfc2lnbigkc2VsZiwgLywgb3RoZXIsIGNvbnRleHQ9Tm9uZSlcbi0tXG5cblwKK1JldHVybiBhIGNvcHkgb2YgdGhlIGZpcnN0IG9wZXJhbmQgd2l0aCB0aGUgc2lnbiBzZXQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlXG5cCitzaWduIG9mIHRoZSBzZWNvbmQgb3BlcmFuZC4gRm9yIGV4YW1wbGU6XG5cCiBcblwKICAgICA+Pj4gRGVjaW1hbCgnMi4zJykuY29weV9zaWduKERlY2ltYWwoJy0xLjUnKSlcblwKICAgICBEZWNpbWFsKCctMi4zJylcblwKQEAgLTE0NiwxNCArMTU2LDE2IEBACiBJbnZhbGlkT3BlcmF0aW9uIGlmIHRoZSBzZWNvbmQgb3BlcmFuZCBjYW5ub3QgYmUgY29udmVydGVkIGV4YWN0bHkuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2V4cCwiXG5cCi1leHAoY29udGV4dD1Ob25lKSAtIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIChuYXR1cmFsKSBleHBvbmVudGlhbCBmdW5jdGlvblxuXAotZSoqeCBhdCB0aGUgZ2l2ZW4gbnVtYmVyLiBUaGUgZnVuY3Rpb24gYWx3YXlzIHVzZXMgdGhlIFJPVU5EX0hBTEZfRVZFTiBtb2RlXG5cCi1hbmQgdGhlIHJlc3VsdCBpcyBjb3JyZWN0bHkgcm91bmRlZC5cblwKK1B5RG9jX1NUUlZBUihkb2NfZXhwLAorImV4cCgkc2VsZiwgLywgY29udGV4dD1Ob25lKVxuLS1cblxuXAorUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgKG5hdHVyYWwpIGV4cG9uZW50aWFsIGZ1bmN0aW9uIGUqKnggYXQgdGhlIGdpdmVuXG5cCitudW1iZXIuICBUaGUgZnVuY3Rpb24gYWx3YXlzIHVzZXMgdGhlIFJPVU5EX0hBTEZfRVZFTiBtb2RlIGFuZCB0aGUgcmVzdWx0XG5cCitpcyBjb3JyZWN0bHkgcm91bmRlZC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfZnJvbV9mbG9hdCwiXG5cCi1mcm9tX2Zsb2F0KGYpIC0gQ2xhc3MgbWV0aG9kIHRoYXQgY29udmVydHMgYSBmbG9hdCB0byBhIGRlY2ltYWwgbnVtYmVyLCBleGFjdGx5LlxuXAorUHlEb2NfU1RSVkFSKGRvY19mcm9tX2Zsb2F0LAorImZyb21fZmxvYXQoJHR5cGUsIGYsIC8pXG4tLVxuXG5cCitDbGFzcyBtZXRob2QgdGhhdCBjb252ZXJ0cyBhIGZsb2F0IHRvIGEgZGVjaW1hbCBudW1iZXIsIGV4YWN0bHkuXG5cCiBTaW5jZSAwLjEgaXMgbm90IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBiaW5hcnkgZmxvYXRpbmcgcG9pbnQsXG5cCiBEZWNpbWFsLmZyb21fZmxvYXQoMC4xKSBpcyBub3QgdGhlIHNhbWUgYXMgRGVjaW1hbCgnMC4xJykuXG5cCiBcblwKQEAgLTE2OCwxNTUgKzE4MCwxNzYgQEAKIFxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19mbWEsIlxuXAotZm1hKG90aGVyLCB0aGlyZCwgY29udGV4dD1Ob25lKSAtIEZ1c2VkIG11bHRpcGx5LWFkZC4gUmV0dXJuIHNlbGYqb3RoZXIrdGhpcmRcblwKLXdpdGggbm8gcm91bmRpbmcgb2YgdGhlIGludGVybWVkaWF0ZSBwcm9kdWN0IHNlbGYqb3RoZXIuXG5cCitQeURvY19TVFJWQVIoZG9jX2ZtYSwKKyJmbWEoJHNlbGYsIC8sIG90aGVyLCB0aGlyZCwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorRnVzZWQgbXVsdGlwbHktYWRkLiAgUmV0dXJuIHNlbGYqb3RoZXIrdGhpcmQgd2l0aCBubyByb3VuZGluZyBvZiB0aGVcblwKK2ludGVybWVkaWF0ZSBwcm9kdWN0IHNlbGYqb3RoZXIuXG5cCiBcblwKICAgICA+Pj4gRGVjaW1hbCgyKS5mbWEoMywgNSlcblwKICAgICBEZWNpbWFsKCcxMScpXG5cCiBcblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfaXNfY2Fub25pY2FsLCJcblwKLWlzX2Nhbm9uaWNhbCgpIC0gUmV0dXJuIFRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGNhbm9uaWNhbCBhbmQgRmFsc2Ugb3RoZXJ3aXNlLlxuXAotQ3VycmVudGx5LCBhIERlY2ltYWwgaW5zdGFuY2UgaXMgYWx3YXlzIGNhbm9uaWNhbCwgc28gdGhpcyBvcGVyYXRpb24gYWx3YXlzXG5cCi1yZXR1cm5zIFRydWUuXG5cCitQeURvY19TVFJWQVIoZG9jX2lzX2Nhbm9uaWNhbCwKKyJpc19jYW5vbmljYWwoJHNlbGYsIC8pXG4tLVxuXG5cCitSZXR1cm4gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgY2Fub25pY2FsIGFuZCBGYWxzZSBvdGhlcndpc2UuICBDdXJyZW50bHksXG5cCithIERlY2ltYWwgaW5zdGFuY2UgaXMgYWx3YXlzIGNhbm9uaWNhbCwgc28gdGhpcyBvcGVyYXRpb24gYWx3YXlzIHJldHVybnNcblwKK1RydWUuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2lzX2Zpbml0ZSwiXG5cCi1pc19maW5pdGUoKSAtIFJldHVybiBUcnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIGZpbml0ZSBudW1iZXIsIGFuZCBGYWxzZSBpZiB0aGVcblwKLWFyZ3VtZW50IGlzIGluZmluaXRlIG9yIGEgTmFOLlxuXAorUHlEb2NfU1RSVkFSKGRvY19pc19maW5pdGUsCisiaXNfZmluaXRlKCRzZWxmLCAvKVxuLS1cblxuXAorUmV0dXJuIFRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgZmluaXRlIG51bWJlciwgYW5kIEZhbHNlIGlmIHRoZSBhcmd1bWVudFxuXAoraXMgaW5maW5pdGUgb3IgYSBOYU4uXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2lzX2luZmluaXRlLCJcblwKLWlzX2luZmluaXRlKCkgLSBSZXR1cm4gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgZWl0aGVyIHBvc2l0aXZlIG9yIG5lZ2F0aXZlXG5cCi1pbmZpbml0eSBhbmQgRmFsc2Ugb3RoZXJ3aXNlLlxuXAotXG4iKTsKLQotUHlEb2NfU1RSVkFSKGRvY19pc19uYW4sIlxuXAotaXNfbmFuKCkgLSBSZXR1cm4gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSAocXVpZXQgb3Igc2lnbmFsaW5nKSBOYU4gYW5kXG5cCitQeURvY19TVFJWQVIoZG9jX2lzX2luZmluaXRlLAorImlzX2luZmluaXRlKCRzZWxmLCAvKVxuLS1cblxuXAorUmV0dXJuIFRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGVpdGhlciBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbmZpbml0eSBhbmRcblwKIEZhbHNlIG90aGVyd2lzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfaXNfbm9ybWFsLCJcblwKLWlzX25vcm1hbChjb250ZXh0PU5vbmUpIC0gUmV0dXJuIFRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgbm9ybWFsIGZpbml0ZVxuXAotbm9uLXplcm8gbnVtYmVyIHdpdGggYW4gYWRqdXN0ZWQgZXhwb25lbnQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEVtaW4uXG5cCi1SZXR1cm4gRmFsc2UgaWYgdGhlIGFyZ3VtZW50IGlzIHplcm8sIHN1Ym5vcm1hbCwgaW5maW5pdGUgb3IgYSBOYU4uXG5cCitQeURvY19TVFJWQVIoZG9jX2lzX25hbiwKKyJpc19uYW4oJHNlbGYsIC8pXG4tLVxuXG5cCitSZXR1cm4gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSAocXVpZXQgb3Igc2lnbmFsaW5nKSBOYU4gYW5kIEZhbHNlXG5cCitvdGhlcndpc2UuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2lzX3FuYW4sIlxuXAotaXNfcW5hbigpIC0gUmV0dXJuIFRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgcXVpZXQgTmFOLCBhbmQgRmFsc2Ugb3RoZXJ3aXNlLlxuXAorUHlEb2NfU1RSVkFSKGRvY19pc19ub3JtYWwsCisiaXNfbm9ybWFsKCRzZWxmLCAvLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBub3JtYWwgZmluaXRlIG5vbi16ZXJvIG51bWJlciB3aXRoIGFuXG5cCithZGp1c3RlZCBleHBvbmVudCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gRW1pbi4gUmV0dXJuIEZhbHNlIGlmIHRoZVxuXAorYXJndW1lbnQgaXMgemVybywgc3Vibm9ybWFsLCBpbmZpbml0ZSBvciBhIE5hTi5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfaXNfc2lnbmVkLCJcblwKLWlzX3NpZ25lZCgpIC0gUmV0dXJuIFRydWUgaWYgdGhlIGFyZ3VtZW50IGhhcyBhIG5lZ2F0aXZlIHNpZ24gYW5kXG5cCi1GYWxzZSBvdGhlcndpc2UuIE5vdGUgdGhhdCBib3RoIHplcm9zIGFuZCBOYU5zIGNhbiBjYXJyeSBzaWducy5cblwKK1B5RG9jX1NUUlZBUihkb2NfaXNfcW5hbiwKKyJpc19xbmFuKCRzZWxmLCAvKVxuLS1cblxuXAorUmV0dXJuIFRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgcXVpZXQgTmFOLCBhbmQgRmFsc2Ugb3RoZXJ3aXNlLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19pc19zbmFuLCJcblwKLWlzX3NuYW4oKSAtIFJldHVybiBUcnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHNpZ25hbGluZyBOYU4gYW5kIEZhbHNlIG90aGVyd2lzZS5cblwKK1B5RG9jX1NUUlZBUihkb2NfaXNfc2lnbmVkLAorImlzX3NpZ25lZCgkc2VsZiwgLylcbi0tXG5cblwKK1JldHVybiBUcnVlIGlmIHRoZSBhcmd1bWVudCBoYXMgYSBuZWdhdGl2ZSBzaWduIGFuZCBGYWxzZSBvdGhlcndpc2UuXG5cCitOb3RlIHRoYXQgYm90aCB6ZXJvcyBhbmQgTmFOcyBjYW4gY2Fycnkgc2lnbnMuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2lzX3N1Ym5vcm1hbCwiXG5cCi1pc19zdWJub3JtYWwoY29udGV4dD1Ob25lKSAtIFJldHVybiBUcnVlIGlmIHRoZSBhcmd1bWVudCBpcyBzdWJub3JtYWwsIGFuZFxuXAotRmFsc2Ugb3RoZXJ3aXNlLiBBIG51bWJlciBpcyBzdWJub3JtYWwgaWYgaXQgaXMgbm9uLXplcm8sIGZpbml0ZSwgYW5kIGhhcyBhblxuXAotYWRqdXN0ZWQgZXhwb25lbnQgbGVzcyB0aGFuIEVtaW4uXG5cCitQeURvY19TVFJWQVIoZG9jX2lzX3NuYW4sCisiaXNfc25hbigkc2VsZiwgLylcbi0tXG5cblwKK1JldHVybiBUcnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIHNpZ25hbGluZyBOYU4gYW5kIEZhbHNlIG90aGVyd2lzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfaXNfemVybywiXG5cCi1pc196ZXJvKCkgLSBSZXR1cm4gVHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSAocG9zaXRpdmUgb3IgbmVnYXRpdmUpIHplcm8gYW5kXG5cCi1GYWxzZSBvdGhlcndpc2UuXG5cCitQeURvY19TVFJWQVIoZG9jX2lzX3N1Ym5vcm1hbCwKKyJpc19zdWJub3JtYWwoJHNlbGYsIC8sIGNvbnRleHQ9Tm9uZSlcbi0tXG5cblwKK1JldHVybiBUcnVlIGlmIHRoZSBhcmd1bWVudCBpcyBzdWJub3JtYWwsIGFuZCBGYWxzZSBvdGhlcndpc2UuIEEgbnVtYmVyIGlzXG5cCitzdWJub3JtYWwgaWYgaXQgaXMgbm9uLXplcm8sIGZpbml0ZSwgYW5kIGhhcyBhbiBhZGp1c3RlZCBleHBvbmVudCBsZXNzXG5cCit0aGFuIEVtaW4uXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2xuLCJcblwKLWxuKGNvbnRleHQ9Tm9uZSkgLSBSZXR1cm4gdGhlIG5hdHVyYWwgKGJhc2UgZSkgbG9nYXJpdGhtIG9mIHRoZSBvcGVyYW5kLlxuXAotVGhlIGZ1bmN0aW9uIGFsd2F5cyB1c2VzIHRoZSBST1VORF9IQUxGX0VWRU4gbW9kZSBhbmQgdGhlIHJlc3VsdCBpc1xuXAotY29ycmVjdGx5IHJvdW5kZWQuXG5cCitQeURvY19TVFJWQVIoZG9jX2lzX3plcm8sCisiaXNfemVybygkc2VsZiwgLylcbi0tXG5cblwKK1JldHVybiBUcnVlIGlmIHRoZSBhcmd1bWVudCBpcyBhIChwb3NpdGl2ZSBvciBuZWdhdGl2ZSkgemVybyBhbmQgRmFsc2VcblwKK290aGVyd2lzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfbG9nMTAsIlxuXAotbG9nMTAoY29udGV4dD1Ob25lKSAtIFJldHVybiB0aGUgYmFzZSB0ZW4gbG9nYXJpdGhtIG9mIHRoZSBvcGVyYW5kLlxuXAotVGhlIGZ1bmN0aW9uIGFsd2F5cyB1c2VzIHRoZSBST1VORF9IQUxGX0VWRU4gbW9kZSBhbmQgdGhlIHJlc3VsdCBpc1xuXAotY29ycmVjdGx5IHJvdW5kZWQuXG5cCitQeURvY19TVFJWQVIoZG9jX2xuLAorImxuKCRzZWxmLCAvLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gdGhlIG5hdHVyYWwgKGJhc2UgZSkgbG9nYXJpdGhtIG9mIHRoZSBvcGVyYW5kLiBUaGUgZnVuY3Rpb24gYWx3YXlzXG5cCit1c2VzIHRoZSBST1VORF9IQUxGX0VWRU4gbW9kZSBhbmQgdGhlIHJlc3VsdCBpcyBjb3JyZWN0bHkgcm91bmRlZC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfbG9nYiwiXG5cCi1sb2diKGNvbnRleHQ9Tm9uZSkgLSBGb3IgYSBub24temVybyBudW1iZXIsIHJldHVybiB0aGUgYWRqdXN0ZWQgZXhwb25lbnRcblwKLW9mIHRoZSBvcGVyYW5kIGFzIGEgRGVjaW1hbCBpbnN0YW5jZS4gSWYgdGhlIG9wZXJhbmQgaXMgYSB6ZXJvLCB0aGVuXG5cCi1EZWNpbWFsKCctSW5maW5pdHknKSBpcyByZXR1cm5lZCBhbmQgdGhlIERpdmlzaW9uQnlaZXJvIGNvbmRpdGlvbiBpc1xuXAotcmFpc2VkLiBJZiB0aGUgb3BlcmFuZCBpcyBhbiBpbmZpbml0eSB0aGVuIERlY2ltYWwoJ0luZmluaXR5JykgaXMgcmV0dXJuZWQuXG5cCitQeURvY19TVFJWQVIoZG9jX2xvZzEwLAorImxvZzEwKCRzZWxmLCAvLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gdGhlIGJhc2UgdGVuIGxvZ2FyaXRobSBvZiB0aGUgb3BlcmFuZC4gVGhlIGZ1bmN0aW9uIGFsd2F5cyB1c2VzIHRoZVxuXAorUk9VTkRfSEFMRl9FVkVOIG1vZGUgYW5kIHRoZSByZXN1bHQgaXMgY29ycmVjdGx5IHJvdW5kZWQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2xvZ2ljYWxfYW5kLCJcblwKLWxvZ2ljYWxfYW5kKG90aGVyLCBjb250ZXh0PU5vbmUpIC0gUmV0dXJuIHRoZSBkaWdpdC13aXNlIGFuZCBvZiB0aGUgdHdvXG5cCi0obG9naWNhbCkgb3BlcmFuZHMuXG5cCitQeURvY19TVFJWQVIoZG9jX2xvZ2IsCisibG9nYigkc2VsZiwgLywgY29udGV4dD1Ob25lKVxuLS1cblxuXAorRm9yIGEgbm9uLXplcm8gbnVtYmVyLCByZXR1cm4gdGhlIGFkanVzdGVkIGV4cG9uZW50IG9mIHRoZSBvcGVyYW5kIGFzIGFcblwKK0RlY2ltYWwgaW5zdGFuY2UuICBJZiB0aGUgb3BlcmFuZCBpcyBhIHplcm8sIHRoZW4gRGVjaW1hbCgnLUluZmluaXR5JykgaXNcblwKK3JldHVybmVkIGFuZCB0aGUgRGl2aXNpb25CeVplcm8gY29uZGl0aW9uIGlzIHJhaXNlZC4gSWYgdGhlIG9wZXJhbmQgaXNcblwKK2FuIGluZmluaXR5IHRoZW4gRGVjaW1hbCgnSW5maW5pdHknKSBpcyByZXR1cm5lZC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfbG9naWNhbF9pbnZlcnQsIlxuXAotbG9naWNhbF9pbnZlcnQoY29udGV4dD1Ob25lKSAtIFJldHVybiB0aGUgZGlnaXQtd2lzZSBpbnZlcnNpb24gb2YgdGhlXG5cCi0obG9naWNhbCkgb3BlcmFuZC5cblwKK1B5RG9jX1NUUlZBUihkb2NfbG9naWNhbF9hbmQsCisibG9naWNhbF9hbmQoJHNlbGYsIC8sIG90aGVyLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gdGhlIGRpZ2l0LXdpc2UgJ2FuZCcgb2YgdGhlIHR3byAobG9naWNhbCkgb3BlcmFuZHMuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2xvZ2ljYWxfb3IsIlxuXAotbG9naWNhbF9vcihvdGhlciwgY29udGV4dD1Ob25lKSAtIFJldHVybiB0aGUgZGlnaXQtd2lzZSBvciBvZiB0aGUgdHdvXG5cCi0obG9naWNhbCkgb3BlcmFuZHMuXG5cCitQeURvY19TVFJWQVIoZG9jX2xvZ2ljYWxfaW52ZXJ0LAorImxvZ2ljYWxfaW52ZXJ0KCRzZWxmLCAvLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gdGhlIGRpZ2l0LXdpc2UgaW52ZXJzaW9uIG9mIHRoZSAobG9naWNhbCkgb3BlcmFuZC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfbG9naWNhbF94b3IsIlxuXAotbG9naWNhbF94b3Iob3RoZXIsIGNvbnRleHQ9Tm9uZSkgLSBSZXR1cm4gdGhlIGRpZ2l0LXdpc2UgZXhjbHVzaXZlIG9yIG9mIHRoZVxuXAotdHdvIChsb2dpY2FsKSBvcGVyYW5kcy5cblwKK1B5RG9jX1NUUlZBUihkb2NfbG9naWNhbF9vciwKKyJsb2dpY2FsX29yKCRzZWxmLCAvLCBvdGhlciwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorUmV0dXJuIHRoZSBkaWdpdC13aXNlICdvcicgb2YgdGhlIHR3byAobG9naWNhbCkgb3BlcmFuZHMuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX21heCwiXG5cCi1tYXgob3RoZXIsIGNvbnRleHQ9Tm9uZSkgLSBNYXhpbXVtIG9mIHNlbGYgYW5kIG90aGVyLiBJZiBvbmUgb3BlcmFuZCBpcyBhXG5cCi1xdWlldCBOYU4gYW5kIHRoZSBvdGhlciBpcyBudW1lcmljLCB0aGUgbnVtZXJpYyBvcGVyYW5kIGlzIHJldHVybmVkLlxuXAorUHlEb2NfU1RSVkFSKGRvY19sb2dpY2FsX3hvciwKKyJsb2dpY2FsX3hvcigkc2VsZiwgLywgb3RoZXIsIGNvbnRleHQ9Tm9uZSlcbi0tXG5cblwKK1JldHVybiB0aGUgZGlnaXQtd2lzZSAnZXhjbHVzaXZlIG9yJyBvZiB0aGUgdHdvIChsb2dpY2FsKSBvcGVyYW5kcy5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfbWF4X21hZywiXG5cCi1tYXhfbWFnKG90aGVyLCBjb250ZXh0PU5vbmUpIC0gU2ltaWxhciB0byB0aGUgbWF4KCkgbWV0aG9kLCBidXQgdGhlXG5cCi1jb21wYXJpc29uIGlzIGRvbmUgdXNpbmcgdGhlIGFic29sdXRlIHZhbHVlcyBvZiB0aGUgb3BlcmFuZHMuXG5cCitQeURvY19TVFJWQVIoZG9jX21heCwKKyJtYXgoJHNlbGYsIC8sIG90aGVyLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitNYXhpbXVtIG9mIHNlbGYgYW5kIG90aGVyLiAgSWYgb25lIG9wZXJhbmQgaXMgYSBxdWlldCBOYU4gYW5kIHRoZSBvdGhlciBpc1xuXAorbnVtZXJpYywgdGhlIG51bWVyaWMgb3BlcmFuZCBpcyByZXR1cm5lZC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfbWluLCJcblwKLW1pbihvdGhlciwgY29udGV4dD1Ob25lKSAtIE1pbmltdW0gb2Ygc2VsZiBhbmQgb3RoZXIuIElmIG9uZSBvcGVyYW5kIGlzIGFcblwKLXF1aWV0IE5hTiBhbmQgdGhlIG90aGVyIGlzIG51bWVyaWMsIHRoZSBudW1lcmljIG9wZXJhbmQgaXMgcmV0dXJuZWQuXG5cCitQeURvY19TVFJWQVIoZG9jX21heF9tYWcsCisibWF4X21hZygkc2VsZiwgLywgb3RoZXIsIGNvbnRleHQ9Tm9uZSlcbi0tXG5cblwKK1NpbWlsYXIgdG8gdGhlIG1heCgpIG1ldGhvZCwgYnV0IHRoZSBjb21wYXJpc29uIGlzIGRvbmUgdXNpbmcgdGhlIGFic29sdXRlXG5cCit2YWx1ZXMgb2YgdGhlIG9wZXJhbmRzLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19taW5fbWFnLCJcblwKLW1pbl9tYWcob3RoZXIsIGNvbnRleHQ9Tm9uZSkgLSBTaW1pbGFyIHRvIHRoZSBtaW4oKSBtZXRob2QsIGJ1dCB0aGVcblwKLWNvbXBhcmlzb24gaXMgZG9uZSB1c2luZyB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSBvcGVyYW5kcy5cblwKK1B5RG9jX1NUUlZBUihkb2NfbWluLAorIm1pbigkc2VsZiwgLywgb3RoZXIsIGNvbnRleHQ9Tm9uZSlcbi0tXG5cblwKK01pbmltdW0gb2Ygc2VsZiBhbmQgb3RoZXIuIElmIG9uZSBvcGVyYW5kIGlzIGEgcXVpZXQgTmFOIGFuZCB0aGUgb3RoZXIgaXNcblwKK251bWVyaWMsIHRoZSBudW1lcmljIG9wZXJhbmQgaXMgcmV0dXJuZWQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX25leHRfbWludXMsIlxuXAotbmV4dF9taW51cyhjb250ZXh0PU5vbmUpIC0gUmV0dXJuIHRoZSBsYXJnZXN0IG51bWJlciByZXByZXNlbnRhYmxlIGluIHRoZVxuXAotZ2l2ZW4gY29udGV4dCAob3IgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBjb250ZXh0IGlmIG5vIGNvbnRleHQgaXMgZ2l2ZW4pIHRoYXRcblwKLWlzIHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4gb3BlcmFuZC5cblwKK1B5RG9jX1NUUlZBUihkb2NfbWluX21hZywKKyJtaW5fbWFnKCRzZWxmLCAvLCBvdGhlciwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorU2ltaWxhciB0byB0aGUgbWluKCkgbWV0aG9kLCBidXQgdGhlIGNvbXBhcmlzb24gaXMgZG9uZSB1c2luZyB0aGUgYWJzb2x1dGVcblwKK3ZhbHVlcyBvZiB0aGUgb3BlcmFuZHMuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX25leHRfcGx1cywiXG5cCi1uZXh0X3BsdXMoY29udGV4dD1Ob25lKSAtIFJldHVybiB0aGUgc21hbGxlc3QgbnVtYmVyIHJlcHJlc2VudGFibGUgaW4gdGhlXG5cCi1naXZlbiBjb250ZXh0IChvciBpbiB0aGUgY3VycmVudCBkZWZhdWx0IGNvbnRleHQgaWYgbm8gY29udGV4dCBpcyBnaXZlbikgdGhhdFxuXAotaXMgbGFyZ2VyIHRoYW4gdGhlIGdpdmVuIG9wZXJhbmQuXG5cCitQeURvY19TVFJWQVIoZG9jX25leHRfbWludXMsCisibmV4dF9taW51cygkc2VsZiwgLywgY29udGV4dD1Ob25lKVxuLS1cblxuXAorUmV0dXJuIHRoZSBsYXJnZXN0IG51bWJlciByZXByZXNlbnRhYmxlIGluIHRoZSBnaXZlbiBjb250ZXh0IChvciBpbiB0aGVcblwKK2N1cnJlbnQgZGVmYXVsdCBjb250ZXh0IGlmIG5vIGNvbnRleHQgaXMgZ2l2ZW4pIHRoYXQgaXMgc21hbGxlciB0aGFuIHRoZVxuXAorZ2l2ZW4gb3BlcmFuZC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfbmV4dF90b3dhcmQsIlxuXAotbmV4dF90b3dhcmQob3RoZXIsIGNvbnRleHQ9Tm9uZSkgLSBJZiB0aGUgdHdvIG9wZXJhbmRzIGFyZSB1bmVxdWFsLCByZXR1cm5cblwKLXRoZSBudW1iZXIgY2xvc2VzdCB0byB0aGUgZmlyc3Qgb3BlcmFuZCBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzZWNvbmQgb3BlcmFuZC5cblwKLUlmIGJvdGggb3BlcmFuZHMgYXJlIG51bWVyaWNhbGx5IGVxdWFsLCByZXR1cm4gYSBjb3B5IG9mIHRoZSBmaXJzdCBvcGVyYW5kXG5cCi13aXRoIHRoZSBzaWduIHNldCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgc2lnbiBvZiB0aGUgc2Vjb25kIG9wZXJhbmQuXG5cCitQeURvY19TVFJWQVIoZG9jX25leHRfcGx1cywKKyJuZXh0X3BsdXMoJHNlbGYsIC8sIGNvbnRleHQ9Tm9uZSlcbi0tXG5cblwKK1JldHVybiB0aGUgc21hbGxlc3QgbnVtYmVyIHJlcHJlc2VudGFibGUgaW4gdGhlIGdpdmVuIGNvbnRleHQgKG9yIGluIHRoZVxuXAorY3VycmVudCBkZWZhdWx0IGNvbnRleHQgaWYgbm8gY29udGV4dCBpcyBnaXZlbikgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGVcblwKK2dpdmVuIG9wZXJhbmQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX25vcm1hbGl6ZSwiXG5cCi1ub3JtYWxpemUoY29udGV4dD1Ob25lKSAtIE5vcm1hbGl6ZSB0aGUgbnVtYmVyIGJ5IHN0cmlwcGluZyB0aGUgcmlnaHRtb3N0XG5cCi10cmFpbGluZyB6ZXJvcyBhbmQgY29udmVydGluZyBhbnkgcmVzdWx0IGVxdWFsIHRvIERlY2ltYWwoJzAnKSB0byBEZWNpbWFsKCcwZTAnKS5cblwKLVVzZWQgZm9yIHByb2R1Y2luZyBjYW5vbmljYWwgdmFsdWVzIGZvciBtZW1iZXJzIG9mIGFuIGVxdWl2YWxlbmNlIGNsYXNzLiBGb3JcblwKLWV4YW1wbGUsIERlY2ltYWwoJzMyLjEwMCcpIGFuZCBEZWNpbWFsKCcwLjMyMTAwMGUrMicpIGJvdGggbm9ybWFsaXplIHRvIHRoZVxuXAotZXF1aXZhbGVudCB2YWx1ZSBEZWNpbWFsKCczMi4xJykuXG5cCitQeURvY19TVFJWQVIoZG9jX25leHRfdG93YXJkLAorIm5leHRfdG93YXJkKCRzZWxmLCAvLCBvdGhlciwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorSWYgdGhlIHR3byBvcGVyYW5kcyBhcmUgdW5lcXVhbCwgcmV0dXJuIHRoZSBudW1iZXIgY2xvc2VzdCB0byB0aGUgZmlyc3RcblwKK29wZXJhbmQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2Vjb25kIG9wZXJhbmQuICBJZiBib3RoIG9wZXJhbmRzIGFyZVxuXAorbnVtZXJpY2FsbHkgZXF1YWwsIHJldHVybiBhIGNvcHkgb2YgdGhlIGZpcnN0IG9wZXJhbmQgd2l0aCB0aGUgc2lnbiBzZXRcblwKK3RvIGJlIHRoZSBzYW1lIGFzIHRoZSBzaWduIG9mIHRoZSBzZWNvbmQgb3BlcmFuZC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfbnVtYmVyX2NsYXNzLCJcblwKLW51bWJlcl9jbGFzcyhjb250ZXh0PU5vbmUpIC0gUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNsYXNzIG9mIHRoZVxuXAotb3BlcmFuZC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRlbiBzdHJpbmdzOlxuXAorUHlEb2NfU1RSVkFSKGRvY19ub3JtYWxpemUsCisibm9ybWFsaXplKCRzZWxmLCAvLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitOb3JtYWxpemUgdGhlIG51bWJlciBieSBzdHJpcHBpbmcgdGhlIHJpZ2h0bW9zdCB0cmFpbGluZyB6ZXJvcyBhbmRcblwKK2NvbnZlcnRpbmcgYW55IHJlc3VsdCBlcXVhbCB0byBEZWNpbWFsKCcwJykgdG8gRGVjaW1hbCgnMGUwJykuICBVc2VkXG5cCitmb3IgcHJvZHVjaW5nIGNhbm9uaWNhbCB2YWx1ZXMgZm9yIG1lbWJlcnMgb2YgYW4gZXF1aXZhbGVuY2UgY2xhc3MuXG5cCitGb3IgZXhhbXBsZSwgRGVjaW1hbCgnMzIuMTAwJykgYW5kIERlY2ltYWwoJzAuMzIxMDAwZSsyJykgYm90aCBub3JtYWxpemVcblwKK3RvIHRoZSBlcXVpdmFsZW50IHZhbHVlIERlY2ltYWwoJzMyLjEnKS5cblwKK1xuIik7CisKK1B5RG9jX1NUUlZBUihkb2NfbnVtYmVyX2NsYXNzLAorIm51bWJlcl9jbGFzcygkc2VsZiwgLywgY29udGV4dD1Ob25lKVxuLS1cblxuXAorUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNsYXNzIG9mIHRoZSBvcGVyYW5kLiAgVGhlIHJldHVybmVkIHZhbHVlXG5cCitpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB0ZW4gc3RyaW5nczpcblwKIFxuXAogICAgICogJy1JbmZpbml0eScsIGluZGljYXRpbmcgdGhhdCB0aGUgb3BlcmFuZCBpcyBuZWdhdGl2ZSBpbmZpbml0eS5cblwKICAgICAqICctTm9ybWFsJywgaW5kaWNhdGluZyB0aGF0IHRoZSBvcGVyYW5kIGlzIGEgbmVnYXRpdmUgbm9ybWFsIG51bWJlci5cblwKQEAgLTMzMSw5ICszNjQsMTAgQEAKIFxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19xdWFudGl6ZSwiXG5cCi1xdWFudGl6ZShleHAsIHJvdW5kaW5nPU5vbmUsIGNvbnRleHQ9Tm9uZSkgLSBSZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byB0aGVcblwKLWZpcnN0IG9wZXJhbmQgYWZ0ZXIgcm91bmRpbmcgYW5kIGhhdmluZyB0aGUgZXhwb25lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kLlxuXAorUHlEb2NfU1RSVkFSKGRvY19xdWFudGl6ZSwKKyJxdWFudGl6ZSgkc2VsZiwgLywgZXhwLCByb3VuZGluZz1Ob25lLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byB0aGUgZmlyc3Qgb3BlcmFuZCBhZnRlciByb3VuZGluZyBhbmQgaGF2aW5nIHRoZVxuXAorZXhwb25lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kLlxuXAogXG5cCiAgICAgPj4+IERlY2ltYWwoJzEuNDE0MjEzNTYnKS5xdWFudGl6ZShEZWNpbWFsKCcxLjAwMCcpKVxuXAogICAgIERlY2ltYWwoJzEuNDE0JylcblwKQEAgLTM1MiwxMDMgKzM4NiwxMDkgQEAKIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgcm91bmRpbmcgbW9kZSBvZiB0aGUgY3VycmVudCB0aHJlYWQncyBjb250ZXh0IGlzIHVzZWQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX3JhZGl4LCJcblwKLXJhZGl4KCkgLSBSZXR1cm4gRGVjaW1hbCgxMCksIHRoZSByYWRpeCAoYmFzZSkgaW4gd2hpY2ggdGhlIERlY2ltYWwgY2xhc3MgZG9lc1xuXAorUHlEb2NfU1RSVkFSKGRvY19yYWRpeCwKKyJyYWRpeCgkc2VsZiwgLylcbi0tXG5cblwKK1JldHVybiBEZWNpbWFsKDEwKSwgdGhlIHJhZGl4IChiYXNlKSBpbiB3aGljaCB0aGUgRGVjaW1hbCBjbGFzcyBkb2VzXG5cCiBhbGwgaXRzIGFyaXRobWV0aWMuIEluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHNwZWNpZmljYXRpb24uXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX3JlbWFpbmRlcl9uZWFyLCJcblwKLXJlbWFpbmRlcl9uZWFyKG90aGVyLCBjb250ZXh0PU5vbmUpIC0gUmV0dXJuIHRoZSByZW1haW5kZXIgZnJvbSBkaXZpZGluZ1xuXAotc2VsZiBieSBvdGhlci4gVGhpcyBkaWZmZXJzIGZyb20gc2VsZiAlIG90aGVyIGluIHRoYXQgdGhlIHNpZ24gb2YgdGhlXG5cCi1yZW1haW5kZXIgaXMgY2hvc2VuIHNvIGFzIHRvIG1pbmltaXplIGl0cyBhYnNvbHV0ZSB2YWx1ZS4gTW9yZSBwcmVjaXNlbHksIHRoZVxuXAotcmV0dXJuIHZhbHVlIGlzIHNlbGYgLSBuICogb3RoZXIgd2hlcmUgbiBpcyB0aGUgaW50ZWdlciBuZWFyZXN0IHRvIHRoZSBleGFjdFxuXAotdmFsdWUgb2Ygc2VsZiAvIG90aGVyLCBhbmQgaWYgdHdvIGludGVnZXJzIGFyZSBlcXVhbGx5IG5lYXIgdGhlbiB0aGUgZXZlbiBvbmVcblwKLWlzIGNob3Nlbi5cblwKK1B5RG9jX1NUUlZBUihkb2NfcmVtYWluZGVyX25lYXIsCisicmVtYWluZGVyX25lYXIoJHNlbGYsIC8sIG90aGVyLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gdGhlIHJlbWFpbmRlciBmcm9tIGRpdmlkaW5nIHNlbGYgYnkgb3RoZXIuICBUaGlzIGRpZmZlcnMgZnJvbVxuXAorc2VsZiAlIG90aGVyIGluIHRoYXQgdGhlIHNpZ24gb2YgdGhlIHJlbWFpbmRlciBpcyBjaG9zZW4gc28gYXMgdG8gbWluaW1pemVcblwKK2l0cyBhYnNvbHV0ZSB2YWx1ZS4gTW9yZSBwcmVjaXNlbHksIHRoZSByZXR1cm4gdmFsdWUgaXMgc2VsZiAtIG4gKiBvdGhlclxuXAord2hlcmUgbiBpcyB0aGUgaW50ZWdlciBuZWFyZXN0IHRvIHRoZSBleGFjdCB2YWx1ZSBvZiBzZWxmIC8gb3RoZXIsIGFuZFxuXAoraWYgdHdvIGludGVnZXJzIGFyZSBlcXVhbGx5IG5lYXIgdGhlbiB0aGUgZXZlbiBvbmUgaXMgY2hvc2VuLlxuXAogXG5cCiBJZiB0aGUgcmVzdWx0IGlzIHplcm8gdGhlbiBpdHMgc2lnbiB3aWxsIGJlIHRoZSBzaWduIG9mIHNlbGYuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX3JvdGF0ZSwiXG5cCi1yb3RhdGUob3RoZXIsIGNvbnRleHQ9Tm9uZSkgLSBSZXR1cm4gdGhlIHJlc3VsdCBvZiByb3RhdGluZyB0aGUgZGlnaXRzIG9mIHRoZVxuXAotZmlyc3Qgb3BlcmFuZCBieSBhbiBhbW91bnQgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgb3BlcmFuZC4gVGhlIHNlY29uZCBvcGVyYW5kXG5cCi1tdXN0IGJlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIC1wcmVjaXNpb24gdGhyb3VnaCBwcmVjaXNpb24uIFRoZSBhYnNvbHV0ZVxuXAotdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGdpdmVzIHRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHJvdGF0ZS4gSWYgdGhlIHNlY29uZFxuXAotb3BlcmFuZCBpcyBwb3NpdGl2ZSB0aGVuIHJvdGF0aW9uIGlzIHRvIHRoZSBsZWZ0OyBvdGhlcndpc2Ugcm90YXRpb24gaXMgdG8gdGhlXG5cCi1yaWdodC4gVGhlIGNvZWZmaWNpZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kIGlzIHBhZGRlZCBvbiB0aGUgbGVmdCB3aXRoIHplcm9zIHRvXG5cCitQeURvY19TVFJWQVIoZG9jX3JvdGF0ZSwKKyJyb3RhdGUoJHNlbGYsIC8sIG90aGVyLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gdGhlIHJlc3VsdCBvZiByb3RhdGluZyB0aGUgZGlnaXRzIG9mIHRoZSBmaXJzdCBvcGVyYW5kIGJ5IGFuIGFtb3VudFxuXAorc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgb3BlcmFuZC4gIFRoZSBzZWNvbmQgb3BlcmFuZCBtdXN0IGJlIGFuIGludGVnZXIgaW5cblwKK3RoZSByYW5nZSAtcHJlY2lzaW9uIHRocm91Z2ggcHJlY2lzaW9uLiBUaGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHNlY29uZFxuXAorb3BlcmFuZCBnaXZlcyB0aGUgbnVtYmVyIG9mIHBsYWNlcyB0byByb3RhdGUuIElmIHRoZSBzZWNvbmQgb3BlcmFuZCBpc1xuXAorcG9zaXRpdmUgdGhlbiByb3RhdGlvbiBpcyB0byB0aGUgbGVmdDsgb3RoZXJ3aXNlIHJvdGF0aW9uIGlzIHRvIHRoZSByaWdodC5cblwKK1RoZSBjb2VmZmljaWVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZCBpcyBwYWRkZWQgb24gdGhlIGxlZnQgd2l0aCB6ZXJvcyB0b1xuXAogbGVuZ3RoIHByZWNpc2lvbiBpZiBuZWNlc3NhcnkuIFRoZSBzaWduIGFuZCBleHBvbmVudCBvZiB0aGUgZmlyc3Qgb3BlcmFuZCBhcmVcblwKIHVuY2hhbmdlZC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2Nfc2FtZV9xdWFudHVtLCJcblwKLXNhbWVfcXVhbnR1bShvdGhlciwgY29udGV4dD1Ob25lKSAtIFRlc3Qgd2hldGhlciBzZWxmIGFuZCBvdGhlciBoYXZlIHRoZVxuXAotc2FtZSBleHBvbmVudCBvciB3aGV0aGVyIGJvdGggYXJlIE5hTi5cblwKK1B5RG9jX1NUUlZBUihkb2Nfc2FtZV9xdWFudHVtLAorInNhbWVfcXVhbnR1bSgkc2VsZiwgLywgb3RoZXIsIGNvbnRleHQ9Tm9uZSlcbi0tXG5cblwKK1Rlc3Qgd2hldGhlciBzZWxmIGFuZCBvdGhlciBoYXZlIHRoZSBzYW1lIGV4cG9uZW50IG9yIHdoZXRoZXIgYm90aCBhcmUgTmFOLlxuXAogXG5cCiBUaGlzIG9wZXJhdGlvbiBpcyB1bmFmZmVjdGVkIGJ5IGNvbnRleHQgYW5kIGlzIHF1aWV0OiBubyBmbGFncyBhcmUgY2hhbmdlZFxuXAogYW5kIG5vIHJvdW5kaW5nIGlzIHBlcmZvcm1lZC4gQXMgYW4gZXhjZXB0aW9uLCB0aGUgQyB2ZXJzaW9uIG1heSByYWlzZVxuXAogSW52YWxpZE9wZXJhdGlvbiBpZiB0aGUgc2Vjb25kIG9wZXJhbmQgY2Fubm90IGJlIGNvbnZlcnRlZCBleGFjdGx5LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19zY2FsZWIsIlxuXAotc2NhbGViKG90aGVyLCBjb250ZXh0PU5vbmUpIC0gUmV0dXJuIHRoZSBmaXJzdCBvcGVyYW5kIHdpdGggdGhlIGV4cG9uZW50XG5cCi1hZGp1c3RlZCB0aGUgc2Vjb25kLiBFcXVpdmFsZW50bHksIHJldHVybiB0aGUgZmlyc3Qgb3BlcmFuZCBtdWx0aXBsaWVkIGJ5XG5cCi0xMCoqb3RoZXIuIFRoZSBzZWNvbmQgb3BlcmFuZCBtdXN0IGJlIGFuIGludGVnZXIuXG5cCitQeURvY19TVFJWQVIoZG9jX3NjYWxlYiwKKyJzY2FsZWIoJHNlbGYsIC8sIG90aGVyLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSZXR1cm4gdGhlIGZpcnN0IG9wZXJhbmQgd2l0aCB0aGUgZXhwb25lbnQgYWRqdXN0ZWQgdGhlIHNlY29uZC4gIEVxdWl2YWxlbnRseSxcblwKK3JldHVybiB0aGUgZmlyc3Qgb3BlcmFuZCBtdWx0aXBsaWVkIGJ5IDEwKipvdGhlci4gVGhlIHNlY29uZCBvcGVyYW5kIG11c3QgYmVcblwKK2FuIGludGVnZXIuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX3NoaWZ0LCJcblwKLXNoaWZ0KG90aGVyLCBjb250ZXh0PU5vbmUpIC0gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc2hpZnRpbmcgdGhlIGRpZ2l0cyBvZlxuXAotdGhlIGZpcnN0IG9wZXJhbmQgYnkgYW4gYW1vdW50IHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIG9wZXJhbmQuIFRoZSBzZWNvbmRcblwKLW9wZXJhbmQgbXVzdCBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAtcHJlY2lzaW9uIHRocm91Z2ggcHJlY2lzaW9uLiBUaGVcblwKLWFic29sdXRlIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBnaXZlcyB0aGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cblwKLUlmIHRoZSBzZWNvbmQgb3BlcmFuZCBpcyBwb3NpdGl2ZSwgdGhlbiB0aGUgc2hpZnQgaXMgdG8gdGhlIGxlZnQ7IG90aGVyd2lzZVxuXAotdGhlIHNoaWZ0IGlzIHRvIHRoZSByaWdodC4gRGlnaXRzIHNoaWZ0ZWQgaW50byB0aGUgY29lZmZpY2llbnQgYXJlIHplcm9zLlxuXAotVGhlIHNpZ24gYW5kIGV4cG9uZW50IG9mIHRoZSBmaXJzdCBvcGVyYW5kIGFyZSB1bmNoYW5nZWQuXG5cCitQeURvY19TVFJWQVIoZG9jX3NoaWZ0LAorInNoaWZ0KCRzZWxmLCAvLCBvdGhlciwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorUmV0dXJuIHRoZSByZXN1bHQgb2Ygc2hpZnRpbmcgdGhlIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgb3BlcmFuZCBieSBhbiBhbW91bnRcblwKK3NwZWNpZmllZCBieSB0aGUgc2Vjb25kIG9wZXJhbmQuICBUaGUgc2Vjb25kIG9wZXJhbmQgbXVzdCBiZSBhbiBpbnRlZ2VyIGluXG5cCit0aGUgcmFuZ2UgLXByZWNpc2lvbiB0aHJvdWdoIHByZWNpc2lvbi4gVGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBzZWNvbmRcblwKK29wZXJhbmQgZ2l2ZXMgdGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuIElmIHRoZSBzZWNvbmQgb3BlcmFuZCBpc1xuXAorcG9zaXRpdmUsIHRoZW4gdGhlIHNoaWZ0IGlzIHRvIHRoZSBsZWZ0OyBvdGhlcndpc2UgdGhlIHNoaWZ0IGlzIHRvIHRoZVxuXAorcmlnaHQuIERpZ2l0cyBzaGlmdGVkIGludG8gdGhlIGNvZWZmaWNpZW50IGFyZSB6ZXJvcy4gVGhlIHNpZ24gYW5kIGV4cG9uZW50XG5cCitvZiB0aGUgZmlyc3Qgb3BlcmFuZCBhcmUgdW5jaGFuZ2VkLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19zcXJ0LCJcblwKLXNxcnQoY29udGV4dD1Ob25lKSAtIFJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIGFyZ3VtZW50IHRvIGZ1bGwgcHJlY2lzaW9uLlxuXAotVGhlIHJlc3VsdCBpcyBjb3JyZWN0bHkgcm91bmRlZCB1c2luZyB0aGUgUk9VTkRfSEFMRl9FVkVOIHJvdW5kaW5nIG1vZGUuXG5cCitQeURvY19TVFJWQVIoZG9jX3NxcnQsCisic3FydCgkc2VsZiwgLywgY29udGV4dD1Ob25lKVxuLS1cblxuXAorUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgYXJndW1lbnQgdG8gZnVsbCBwcmVjaXNpb24uIFRoZSByZXN1bHQgaXNcblwKK2NvcnJlY3RseSByb3VuZGVkIHVzaW5nIHRoZSBST1VORF9IQUxGX0VWRU4gcm91bmRpbmcgbW9kZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfdG9fZW5nX3N0cmluZywiXG5cCi10b19lbmdfc3RyaW5nKGNvbnRleHQ9Tm9uZSkgLSBDb252ZXJ0IHRvIGFuIGVuZ2luZWVyaW5nLXR5cGUgc3RyaW5nLlxuXAotRW5naW5lZXJpbmcgbm90YXRpb24gaGFzIGFuIGV4cG9uZW50IHdoaWNoIGlzIGEgbXVsdGlwbGUgb2YgMywgc28gdGhlcmVcblwKLWFyZSB1cCB0byAzIGRpZ2l0cyBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBsYWNlLiBGb3IgZXhhbXBsZSwgRGVjaW1hbCgnMTIzRSsxJylcblwKLWlzIGNvbnZlcnRlZCB0byBEZWNpbWFsKCcxLjIzRSszJykuXG5cCitQeURvY19TVFJWQVIoZG9jX3RvX2VuZ19zdHJpbmcsCisidG9fZW5nX3N0cmluZygkc2VsZiwgLywgY29udGV4dD1Ob25lKVxuLS1cblxuXAorQ29udmVydCB0byBhbiBlbmdpbmVlcmluZy10eXBlIHN0cmluZy4gIEVuZ2luZWVyaW5nIG5vdGF0aW9uIGhhcyBhbiBleHBvbmVudFxuXAord2hpY2ggaXMgYSBtdWx0aXBsZSBvZiAzLCBzbyB0aGVyZSBhcmUgdXAgdG8gMyBkaWdpdHMgbGVmdCBvZiB0aGUgZGVjaW1hbFxuXAorcGxhY2UuIEZvciBleGFtcGxlLCBEZWNpbWFsKCcxMjNFKzEnKSBpcyBjb252ZXJ0ZWQgdG8gRGVjaW1hbCgnMS4yM0UrMycpLlxuXAogXG5cCiBUaGUgdmFsdWUgb2YgY29udGV4dC5jYXBpdGFscyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGV4cG9uZW50IHNpZ24gaXMgbG93ZXJcblwKIG9yIHVwcGVyIGNhc2UuIE90aGVyd2lzZSwgdGhlIGNvbnRleHQgZG9lcyBub3QgYWZmZWN0IHRoZSBvcGVyYXRpb24uXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX3RvX2ludGVncmFsLCJcblwKLXRvX2ludGVncmFsKHJvdW5kaW5nPU5vbmUsIGNvbnRleHQ9Tm9uZSkgLSBJZGVudGljYWwgdG8gdGhlXG5cCi10b19pbnRlZ3JhbF92YWx1ZSgpIG1ldGhvZC4gVGhlIHRvX2ludGVncmFsKCkgbmFtZSBoYXMgYmVlbiBrZXB0XG5cCi1mb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zLlxuXAorUHlEb2NfU1RSVkFSKGRvY190b19pbnRlZ3JhbCwKKyJ0b19pbnRlZ3JhbCgkc2VsZiwgLywgcm91bmRpbmc9Tm9uZSwgY29udGV4dD1Ob25lKVxuLS1cblxuXAorSWRlbnRpY2FsIHRvIHRoZSB0b19pbnRlZ3JhbF92YWx1ZSgpIG1ldGhvZC4gIFRoZSB0b19pbnRlZ3JhbCgpIG5hbWUgaGFzIGJlZW5cblwKK2tlcHQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucy5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfdG9faW50ZWdyYWxfZXhhY3QsIlxuXAotdG9faW50ZWdyYWxfZXhhY3Qocm91bmRpbmc9Tm9uZSwgY29udGV4dD1Ob25lKSAtIFJvdW5kIHRvIHRoZSBuZWFyZXN0XG5cCi1pbnRlZ2VyLCBzaWduYWxpbmcgSW5leGFjdCBvciBSb3VuZGVkIGFzIGFwcHJvcHJpYXRlIGlmIHJvdW5kaW5nIG9jY3Vycy5cblwKLVRoZSByb3VuZGluZyBtb2RlIGlzIGRldGVybWluZWQgYnkgdGhlIHJvdW5kaW5nIHBhcmFtZXRlciBpZiBnaXZlbiwgZWxzZVxuXAotYnkgdGhlIGdpdmVuIGNvbnRleHQuIElmIG5laXRoZXIgcGFyYW1ldGVyIGlzIGdpdmVuLCB0aGVuIHRoZSByb3VuZGluZyBtb2RlXG5cCitQeURvY19TVFJWQVIoZG9jX3RvX2ludGVncmFsX2V4YWN0LAorInRvX2ludGVncmFsX2V4YWN0KCRzZWxmLCAvLCByb3VuZGluZz1Ob25lLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSb3VuZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBzaWduYWxpbmcgSW5leGFjdCBvciBSb3VuZGVkIGFzIGFwcHJvcHJpYXRlIGlmXG5cCityb3VuZGluZyBvY2N1cnMuICBUaGUgcm91bmRpbmcgbW9kZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByb3VuZGluZyBwYXJhbWV0ZXJcblwKK2lmIGdpdmVuLCBlbHNlIGJ5IHRoZSBnaXZlbiBjb250ZXh0LiBJZiBuZWl0aGVyIHBhcmFtZXRlciBpcyBnaXZlbiwgdGhlbiB0aGVcblwKK3JvdW5kaW5nIG1vZGUgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdCBjb250ZXh0IGlzIHVzZWQuXG5cCitcbiIpOworCitQeURvY19TVFJWQVIoZG9jX3RvX2ludGVncmFsX3ZhbHVlLAorInRvX2ludGVncmFsX3ZhbHVlKCRzZWxmLCAvLCByb3VuZGluZz1Ob25lLCBjb250ZXh0PU5vbmUpXG4tLVxuXG5cCitSb3VuZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHdpdGhvdXQgc2lnbmFsaW5nIEluZXhhY3Qgb3IgUm91bmRlZC4gIFRoZVxuXAorcm91bmRpbmcgbW9kZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByb3VuZGluZyBwYXJhbWV0ZXIgaWYgZ2l2ZW4sIGVsc2UgYnlcblwKK3RoZSBnaXZlbiBjb250ZXh0LiBJZiBuZWl0aGVyIHBhcmFtZXRlciBpcyBnaXZlbiwgdGhlbiB0aGUgcm91bmRpbmcgbW9kZVxuXAogb2YgdGhlIGN1cnJlbnQgZGVmYXVsdCBjb250ZXh0IGlzIHVzZWQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX3RvX2ludGVncmFsX3ZhbHVlLCJcblwKLXRvX2ludGVncmFsX3ZhbHVlKHJvdW5kaW5nPU5vbmUsIGNvbnRleHQ9Tm9uZSkgLSBSb3VuZCB0byB0aGUgbmVhcmVzdFxuXAotaW50ZWdlciB3aXRob3V0IHNpZ25hbGluZyBJbmV4YWN0IG9yIFJvdW5kZWQuIFRoZSByb3VuZGluZyBtb2RlIGlzIGRldGVybWluZWRcblwKLWJ5IHRoZSByb3VuZGluZyBwYXJhbWV0ZXIgaWYgZ2l2ZW4sIGVsc2UgYnkgdGhlIGdpdmVuIGNvbnRleHQuIElmIG5laXRoZXJcblwKLXBhcmFtZXRlciBpcyBnaXZlbiwgdGhlbiB0aGUgcm91bmRpbmcgbW9kZSBvZiB0aGUgY3VycmVudCBkZWZhdWx0IGNvbnRleHQgaXNcblwKLXVzZWQuXG5cCi1cbiIpOwotCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dCBPYmplY3QgYW5kIE1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotUHlEb2NfU1RSVkFSKGRvY19jb250ZXh0LCJcblwKK1B5RG9jX1NUUlZBUihkb2NfY29udGV4dCwKKyJDb250ZXh0KHByZWM9Tm9uZSwgcm91bmRpbmc9Tm9uZSwgRW1pbj1Ob25lLCBFbWF4PU5vbmUsIGNhcGl0YWxzPU5vbmUsIGNsYW1wPU5vbmUsIGZsYWdzPU5vbmUsIHRyYXBzPU5vbmUpXG4tLVxuXG5cCiBUaGUgY29udGV4dCBhZmZlY3RzIGFsbW9zdCBhbGwgb3BlcmF0aW9ucyBhbmQgY29udHJvbHMgcm91bmRpbmcsXG5cCi1PdmVyL1VuZGVyZmxvdywgcmFpc2luZyBvZiBleGNlcHRpb25zIGFuZCBtdWNoIG1vcmUuIEEgbmV3IGNvbnRleHRcblwKK092ZXIvVW5kZXJmbG93LCByYWlzaW5nIG9mIGV4Y2VwdGlvbnMgYW5kIG11Y2ggbW9yZS4gIEEgbmV3IGNvbnRleHRcblwKIGNhbiBiZSBjb25zdHJ1Y3RlZCBhcyBmb2xsb3dzOlxuXAogXG5cCiAgICAgPj4+IGMgPSBDb250ZXh0KHByZWM9MjgsIEVtaW49LTQyNTAwMDAwMCwgRW1heD00MjUwMDAwMDAsXG5cCkBAIC00NjAsMzA4ICs1MDAsMzcyIEBACiBcbiIpOwogCiAjaWZkZWYgRVhUUkFfRlVOQ1RJT05BTElUWQotUHlEb2NfU1RSVkFSKGRvY19jdHhfYXBwbHksIlxuXAotYXBwbHkoeCkgLSBBcHBseSBzZWxmIHRvIERlY2ltYWwgeC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2FwcGx5LAorImFwcGx5KCRzZWxmLCB4LCAvKVxuLS1cblxuXAorQXBwbHkgc2VsZiB0byBEZWNpbWFsIHguXG5cCiBcbiIpOwogI2VuZGlmCiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2NsZWFyX2ZsYWdzLCJcblwKLWNsZWFyX2ZsYWdzKCkgLSBSZXNldCBhbGwgZmxhZ3MgdG8gRmFsc2UuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9jbGVhcl9mbGFncywKKyJjbGVhcl9mbGFncygkc2VsZiwgLylcbi0tXG5cblwKK1Jlc2V0IGFsbCBmbGFncyB0byBGYWxzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2NsZWFyX3RyYXBzLCJcblwKLWNsZWFyX3RyYXBzKCkgLSBTZXQgYWxsIHRyYXBzIHRvIEZhbHNlLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfY2xlYXJfdHJhcHMsCisiY2xlYXJfdHJhcHMoJHNlbGYsIC8pXG4tLVxuXG5cCitTZXQgYWxsIHRyYXBzIHRvIEZhbHNlLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfY29weSwiXG5cCi1jb3B5KCkgLSBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgdGhlIGNvbnRleHQgd2l0aCBhbGwgZmxhZ3MgY2xlYXJlZC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2NvcHksCisiY29weSgkc2VsZiwgLylcbi0tXG5cblwKK1JldHVybiBhIGR1cGxpY2F0ZSBvZiB0aGUgY29udGV4dCB3aXRoIGFsbCBmbGFncyBjbGVhcmVkLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfY29weV9kZWNpbWFsLCJcblwKLWNvcHlfZGVjaW1hbCh4KSAtIFJldHVybiBhIGNvcHkgb2YgRGVjaW1hbCB4LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfY29weV9kZWNpbWFsLAorImNvcHlfZGVjaW1hbCgkc2VsZiwgeCwgLylcbi0tXG5cblwKK1JldHVybiBhIGNvcHkgb2YgRGVjaW1hbCB4LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfY3JlYXRlX2RlY2ltYWwsIlxuXAotY3JlYXRlX2RlY2ltYWwoeCkgLSBDcmVhdGUgYSBuZXcgRGVjaW1hbCBpbnN0YW5jZSBmcm9tIHgsIHVzaW5nIHNlbGYgYXMgdGhlXG5cCi1jb250ZXh0LiBVbmxpa2UgdGhlIERlY2ltYWwgY29uc3RydWN0b3IsIHRoaXMgZnVuY3Rpb24gb2JzZXJ2ZXMgdGhlIGNvbnRleHRcblwKLWxpbWl0cy5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2NyZWF0ZV9kZWNpbWFsLAorImNyZWF0ZV9kZWNpbWFsKCRzZWxmLCBudW09XCIwXCIsIC8pXG4tLVxuXG5cCitDcmVhdGUgYSBuZXcgRGVjaW1hbCBpbnN0YW5jZSBmcm9tIG51bSwgdXNpbmcgc2VsZiBhcyB0aGUgY29udGV4dC4gVW5saWtlIHRoZVxuXAorRGVjaW1hbCBjb25zdHJ1Y3RvciwgdGhpcyBmdW5jdGlvbiBvYnNlcnZlcyB0aGUgY29udGV4dCBsaW1pdHMuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0LCJcblwKLWNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoZikgLSBDcmVhdGUgYSBuZXcgRGVjaW1hbCBpbnN0YW5jZSBmcm9tIGZsb2F0IGYuXG5cCi1Vbmxpa2UgdGhlIERlY2ltYWwuZnJvbV9mbG9hdCgpIGNsYXNzIG1ldGhvZCwgdGhpcyBmdW5jdGlvbiBvYnNlcnZlcyB0aGVcblwKLWNvbnRleHQgbGltaXRzLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCwKKyJjcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KCRzZWxmLCBmLCAvKVxuLS1cblxuXAorQ3JlYXRlIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UgZnJvbSBmbG9hdCBmLiAgVW5saWtlIHRoZSBEZWNpbWFsLmZyb21fZmxvYXQoKVxuXAorY2xhc3MgbWV0aG9kLCB0aGlzIGZ1bmN0aW9uIG9ic2VydmVzIHRoZSBjb250ZXh0IGxpbWl0cy5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X0V0aW55LCJcblwKLUV0aW55KCkgLSBSZXR1cm4gYSB2YWx1ZSBlcXVhbCB0byBFbWluIC0gcHJlYyArIDEsIHdoaWNoIGlzIHRoZSBtaW5pbXVtXG5cCi1leHBvbmVudCB2YWx1ZSBmb3Igc3Vibm9ybWFsIHJlc3VsdHMuIFdoZW4gdW5kZXJmbG93IG9jY3VycywgdGhlIGV4cG9uZW50XG5cCi1pcyBzZXQgdG8gRXRpbnkuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9FdGlueSwKKyJFdGlueSgkc2VsZiwgLylcbi0tXG5cblwKK1JldHVybiBhIHZhbHVlIGVxdWFsIHRvIEVtaW4gLSBwcmVjICsgMSwgd2hpY2ggaXMgdGhlIG1pbmltdW0gZXhwb25lbnQgdmFsdWVcblwKK2ZvciBzdWJub3JtYWwgcmVzdWx0cy4gIFdoZW4gdW5kZXJmbG93IG9jY3VycywgdGhlIGV4cG9uZW50IGlzIHNldCB0byBFdGlueS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X0V0b3AsIlxuXAotRXRvcCgpIC0gUmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gRW1heCAtIHByZWMgKyAxLiBUaGlzIGlzIHRoZSBtYXhpbXVtIGV4cG9uZW50XG5cCi1pZiB0aGUgX2NsYW1wIGZpZWxkIG9mIHRoZSBjb250ZXh0IGlzIHNldCB0byAxIChJRUVFIGNsYW1wIG1vZGUpLiBFdG9wKCkgbXVzdFxuXAotbm90IGJlIG5lZ2F0aXZlLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfRXRvcCwKKyJFdG9wKCRzZWxmLCAvKVxuLS1cblxuXAorUmV0dXJuIGEgdmFsdWUgZXF1YWwgdG8gRW1heCAtIHByZWMgKyAxLiAgVGhpcyBpcyB0aGUgbWF4aW11bSBleHBvbmVudFxuXAoraWYgdGhlIF9jbGFtcCBmaWVsZCBvZiB0aGUgY29udGV4dCBpcyBzZXQgdG8gMSAoSUVFRSBjbGFtcCBtb2RlKS4gIEV0b3AoKVxuXAorbXVzdCBub3QgYmUgbmVnYXRpdmUuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9hYnMsIlxuXAotYWJzKHgpIC0gUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB4LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfYWJzLAorImFicygkc2VsZiwgeCwgLylcbi0tXG5cblwKK1JldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgeC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2FkZCwiXG5cCi1hZGQoeCwgeSkgLSBSZXR1cm4gdGhlIHN1bSBvZiB4IGFuZCB5LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfYWRkLAorImFkZCgkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK1JldHVybiB0aGUgc3VtIG9mIHggYW5kIHkuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9jYW5vbmljYWwsIlxuXAotY2Fub25pY2FsKHgpIC0gUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIHguXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9jYW5vbmljYWwsCisiY2Fub25pY2FsKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIHguXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9jb21wYXJlLCJcblwKLWNvbXBhcmUoeCwgeSkgLSBDb21wYXJlIHggYW5kIHkgbnVtZXJpY2FsbHkuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9jb21wYXJlLAorImNvbXBhcmUoJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitDb21wYXJlIHggYW5kIHkgbnVtZXJpY2FsbHkuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9jb21wYXJlX3NpZ25hbCwiXG5cCi1jb21wYXJlX3NpZ25hbCh4LCB5KSAtIENvbXBhcmUgeCBhbmQgeSBudW1lcmljYWxseS4gQWxsIE5hTnMgc2lnbmFsLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfY29tcGFyZV9zaWduYWwsCisiY29tcGFyZV9zaWduYWwoJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitDb21wYXJlIHggYW5kIHkgbnVtZXJpY2FsbHkuICBBbGwgTmFOcyBzaWduYWwuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9jb21wYXJlX3RvdGFsLCJcblwKLWNvbXBhcmVfdG90YWwoeCwgeSkgLSBDb21wYXJlIHggYW5kIHkgdXNpbmcgdGhlaXIgYWJzdHJhY3QgcmVwcmVzZW50YXRpb24uXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9jb21wYXJlX3RvdGFsLAorImNvbXBhcmVfdG90YWwoJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitDb21wYXJlIHggYW5kIHkgdXNpbmcgdGhlaXIgYWJzdHJhY3QgcmVwcmVzZW50YXRpb24uXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9jb21wYXJlX3RvdGFsX21hZywiXG5cCi1jb21wYXJlX3RvdGFsX21hZyh4LCB5KSAtIENvbXBhcmUgeCBhbmQgeSB1c2luZyB0aGVpciBhYnN0cmFjdCByZXByZXNlbnRhdGlvbixcblwKLWlnbm9yaW5nIHNpZ24uXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9jb21wYXJlX3RvdGFsX21hZywKKyJjb21wYXJlX3RvdGFsX21hZygkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK0NvbXBhcmUgeCBhbmQgeSB1c2luZyB0aGVpciBhYnN0cmFjdCByZXByZXNlbnRhdGlvbiwgaWdub3Jpbmcgc2lnbi5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2NvcHlfYWJzLCJcblwKLWNvcHlfYWJzKHgpIC0gUmV0dXJuIGEgY29weSBvZiB4IHdpdGggdGhlIHNpZ24gc2V0IHRvIDAuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9jb3B5X2FicywKKyJjb3B5X2Ficygkc2VsZiwgeCwgLylcbi0tXG5cblwKK1JldHVybiBhIGNvcHkgb2YgeCB3aXRoIHRoZSBzaWduIHNldCB0byAwLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfY29weV9uZWdhdGUsIlxuXAotY29weV9uZWdhdGUoeCkgLSBSZXR1cm4gYSBjb3B5IG9mIHggd2l0aCB0aGUgc2lnbiBpbnZlcnRlZC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2NvcHlfbmVnYXRlLAorImNvcHlfbmVnYXRlKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIGEgY29weSBvZiB4IHdpdGggdGhlIHNpZ24gaW52ZXJ0ZWQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9jb3B5X3NpZ24sIlxuXAotY29weV9zaWduKHgsIHkpIC0gQ29weSB0aGUgc2lnbiBmcm9tIHkgdG8geC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2NvcHlfc2lnbiwKKyJjb3B5X3NpZ24oJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitDb3B5IHRoZSBzaWduIGZyb20geSB0byB4LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfZGl2aWRlLCJcblwKLWRpdmlkZSh4LCB5KSAtIFJldHVybiB4IGRpdmlkZWQgYnkgeS5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2RpdmlkZSwKKyJkaXZpZGUoJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitSZXR1cm4geCBkaXZpZGVkIGJ5IHkuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9kaXZpZGVfaW50LCJcblwKLWRpdmlkZV9pbnQoeCwgeSkgLSBSZXR1cm4geCBkaXZpZGVkIGJ5IHksIHRydW5jYXRlZCB0byBhbiBpbnRlZ2VyLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfZGl2aWRlX2ludCwKKyJkaXZpZGVfaW50KCRzZWxmLCB4LCB5LCAvKVxuLS1cblxuXAorUmV0dXJuIHggZGl2aWRlZCBieSB5LCB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2Rpdm1vZCwiXG5cCi1kaXZtb2QoeCwgeSkgLSBSZXR1cm4gcXVvdGllbnQgYW5kIHJlbWFpbmRlciBvZiB0aGUgZGl2aXNpb24geCAvIHkuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9kaXZtb2QsCisiZGl2bW9kKCRzZWxmLCB4LCB5LCAvKVxuLS1cblxuXAorUmV0dXJuIHF1b3RpZW50IGFuZCByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIHggLyB5LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfZXhwLCJcblwKLWV4cCh4KSAtIFJldHVybiBlICoqIHguXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9leHAsCisiZXhwKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIGUgKiogeC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2ZtYSwiXG5cCi1mbWEoeCwgeSwgeikgLSBSZXR1cm4geCBtdWx0aXBsaWVkIGJ5IHksIHBsdXMgei5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2ZtYSwKKyJmbWEoJHNlbGYsIHgsIHksIHosIC8pXG4tLVxuXG5cCitSZXR1cm4geCBtdWx0aXBsaWVkIGJ5IHksIHBsdXMgei5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2lzX2Nhbm9uaWNhbCwiXG5cCi1pc19jYW5vbmljYWwoeCkgLSBSZXR1cm4gVHJ1ZSBpZiB4IGlzIGNhbm9uaWNhbCwgRmFsc2Ugb3RoZXJ3aXNlLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfaXNfY2Fub25pY2FsLAorImlzX2Nhbm9uaWNhbCgkc2VsZiwgeCwgLylcbi0tXG5cblwKK1JldHVybiBUcnVlIGlmIHggaXMgY2Fub25pY2FsLCBGYWxzZSBvdGhlcndpc2UuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9pc19maW5pdGUsIlxuXAotaXNfZmluaXRlKHgpIC0gUmV0dXJuIFRydWUgaWYgeCBpcyBmaW5pdGUsIEZhbHNlIG90aGVyd2lzZS5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2lzX2Zpbml0ZSwKKyJpc19maW5pdGUoJHNlbGYsIHgsIC8pXG4tLVxuXG5cCitSZXR1cm4gVHJ1ZSBpZiB4IGlzIGZpbml0ZSwgRmFsc2Ugb3RoZXJ3aXNlLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfaXNfaW5maW5pdGUsIlxuXAotaXNfaW5maW5pdGUoeCkgLSBSZXR1cm4gVHJ1ZSBpZiB4IGlzIGluZmluaXRlLCBGYWxzZSBvdGhlcndpc2UuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9pc19pbmZpbml0ZSwKKyJpc19pbmZpbml0ZSgkc2VsZiwgeCwgLylcbi0tXG5cblwKK1JldHVybiBUcnVlIGlmIHggaXMgaW5maW5pdGUsIEZhbHNlIG90aGVyd2lzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2lzX25hbiwiXG5cCi1pc19uYW4oeCkgLSBSZXR1cm4gVHJ1ZSBpZiB4IGlzIGEgcU5hTiBvciBzTmFOLCBGYWxzZSBvdGhlcndpc2UuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9pc19uYW4sCisiaXNfbmFuKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIFRydWUgaWYgeCBpcyBhIHFOYU4gb3Igc05hTiwgRmFsc2Ugb3RoZXJ3aXNlLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfaXNfbm9ybWFsLCJcblwKLWlzX25vcm1hbCh4KSAtIFJldHVybiBUcnVlIGlmIHggaXMgYSBub3JtYWwgbnVtYmVyLCBGYWxzZSBvdGhlcndpc2UuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9pc19ub3JtYWwsCisiaXNfbm9ybWFsKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIFRydWUgaWYgeCBpcyBhIG5vcm1hbCBudW1iZXIsIEZhbHNlIG90aGVyd2lzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2lzX3FuYW4sIlxuXAotaXNfcW5hbih4KSAtIFJldHVybiBUcnVlIGlmIHggaXMgYSBxdWlldCBOYU4sIEZhbHNlIG90aGVyd2lzZS5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2lzX3FuYW4sCisiaXNfcW5hbigkc2VsZiwgeCwgLylcbi0tXG5cblwKK1JldHVybiBUcnVlIGlmIHggaXMgYSBxdWlldCBOYU4sIEZhbHNlIG90aGVyd2lzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2lzX3NpZ25lZCwiXG5cCi1pc19zaWduZWQoeCkgLSBSZXR1cm4gVHJ1ZSBpZiB4IGlzIG5lZ2F0aXZlLCBGYWxzZSBvdGhlcndpc2UuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9pc19zaWduZWQsCisiaXNfc2lnbmVkKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIFRydWUgaWYgeCBpcyBuZWdhdGl2ZSwgRmFsc2Ugb3RoZXJ3aXNlLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfaXNfc25hbiwiXG5cCi1pc19zbmFuKCkgLSBSZXR1cm4gVHJ1ZSBpZiB4IGlzIGEgc2lnbmFsaW5nIE5hTiwgRmFsc2Ugb3RoZXJ3aXNlLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfaXNfc25hbiwKKyJpc19zbmFuKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIFRydWUgaWYgeCBpcyBhIHNpZ25hbGluZyBOYU4sIEZhbHNlIG90aGVyd2lzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2lzX3N1Ym5vcm1hbCwiXG5cCi1pc19zdWJub3JtYWwoeCkgLSBSZXR1cm4gVHJ1ZSBpZiB4IGlzIHN1Ym5vcm1hbCwgRmFsc2Ugb3RoZXJ3aXNlLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfaXNfc3Vibm9ybWFsLAorImlzX3N1Ym5vcm1hbCgkc2VsZiwgeCwgLylcbi0tXG5cblwKK1JldHVybiBUcnVlIGlmIHggaXMgc3Vibm9ybWFsLCBGYWxzZSBvdGhlcndpc2UuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9pc196ZXJvLCJcblwKLWlzX3plcm8oeCkgLSBSZXR1cm4gVHJ1ZSBpZiB4IGlzIGEgemVybywgRmFsc2Ugb3RoZXJ3aXNlLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfaXNfemVybywKKyJpc196ZXJvKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIFRydWUgaWYgeCBpcyBhIHplcm8sIEZhbHNlIG90aGVyd2lzZS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X2xuLCJcblwKLWxuKHgpIC0gUmV0dXJuIHRoZSBuYXR1cmFsIChiYXNlIGUpIGxvZ2FyaXRobSBvZiB4LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbG4sCisibG4oJHNlbGYsIHgsIC8pXG4tLVxuXG5cCitSZXR1cm4gdGhlIG5hdHVyYWwgKGJhc2UgZSkgbG9nYXJpdGhtIG9mIHguXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9sb2cxMCwiXG5cCi1sb2cxMCh4KSAtIFJldHVybiB0aGUgYmFzZSAxMCBsb2dhcml0aG0gb2YgeC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X2xvZzEwLAorImxvZzEwKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiB4LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9nYiwiXG5cCi1sb2diKHgpIC0gUmV0dXJuIHRoZSBleHBvbmVudCBvZiB0aGUgbWFnbml0dWRlIG9mIHRoZSBvcGVyYW5kJ3MgTVNELlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9nYiwKKyJsb2diKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIHRoZSBleHBvbmVudCBvZiB0aGUgbWFnbml0dWRlIG9mIHRoZSBvcGVyYW5kJ3MgTVNELlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9naWNhbF9hbmQsIlxuXAotbG9naWNhbF9hbmQoeCwgeSkgLSBEaWdpdC13aXNlIGFuZCBvZiB4IGFuZCB5LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9naWNhbF9hbmQsCisibG9naWNhbF9hbmQoJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitEaWdpdC13aXNlIGFuZCBvZiB4IGFuZCB5LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9naWNhbF9pbnZlcnQsIlxuXAotbG9naWNhbF9pbnZlcnQoeCkgLSBJbnZlcnQgYWxsIGRpZ2l0cyBvZiB4LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9naWNhbF9pbnZlcnQsCisibG9naWNhbF9pbnZlcnQoJHNlbGYsIHgsIC8pXG4tLVxuXG5cCitJbnZlcnQgYWxsIGRpZ2l0cyBvZiB4LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9naWNhbF9vciwiXG5cCi1sb2dpY2FsX29yKHgsIHkpIC0gRGlnaXQtd2lzZSBvciBvZiB4IGFuZCB5LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9naWNhbF9vciwKKyJsb2dpY2FsX29yKCRzZWxmLCB4LCB5LCAvKVxuLS1cblxuXAorRGlnaXQtd2lzZSBvciBvZiB4IGFuZCB5LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9naWNhbF94b3IsIlxuXAotbG9naWNhbF94b3IoeCwgeSkgLSBEaWdpdC13aXNlIHhvciBvZiB4IGFuZCB5LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbG9naWNhbF94b3IsCisibG9naWNhbF94b3IoJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitEaWdpdC13aXNlIHhvciBvZiB4IGFuZCB5LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbWF4LCJcblwKLW1heCh4LCB5KSAtIENvbXBhcmUgdGhlIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJuIHRoZSBtYXhpbXVtLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbWF4LAorIm1heCgkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK0NvbXBhcmUgdGhlIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJuIHRoZSBtYXhpbXVtLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbWF4X21hZywiXG5cCi1tYXhfbWFnKHgsIHkpIC0gQ29tcGFyZSB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbWF4X21hZywKKyJtYXhfbWFnKCRzZWxmLCB4LCB5LCAvKVxuLS1cblxuXAorQ29tcGFyZSB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbWluLCJcblwKLW1pbih4LCB5KSAtIENvbXBhcmUgdGhlIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJuIHRoZSBtaW5pbXVtLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbWluLAorIm1pbigkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK0NvbXBhcmUgdGhlIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJuIHRoZSBtaW5pbXVtLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbWluX21hZywiXG5cCi1taW5fbWFnKHgsIHkpIC0gQ29tcGFyZSB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbWluX21hZywKKyJtaW5fbWFnKCRzZWxmLCB4LCB5LCAvKVxuLS1cblxuXAorQ29tcGFyZSB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbWludXMsIlxuXAotbWludXMoeCkgLSBNaW51cyBjb3JyZXNwb25kcyB0byB0aGUgdW5hcnkgcHJlZml4IG1pbnVzIG9wZXJhdG9yIGluIFB5dGhvbixcblwKLWJ1dCBhcHBsaWVzIHRoZSBjb250ZXh0IHRvIHRoZSByZXN1bHQuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9taW51cywKKyJtaW51cygkc2VsZiwgeCwgLylcbi0tXG5cblwKK01pbnVzIGNvcnJlc3BvbmRzIHRvIHRoZSB1bmFyeSBwcmVmaXggbWludXMgb3BlcmF0b3IgaW4gUHl0aG9uLCBidXQgYXBwbGllc1xuXAordGhlIGNvbnRleHQgdG8gdGhlIHJlc3VsdC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X211bHRpcGx5LCJcblwKLW11bHRpcGx5KHgsIHkpIC0gUmV0dXJuIHRoZSBwcm9kdWN0IG9mIHggYW5kIHkuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9tdWx0aXBseSwKKyJtdWx0aXBseSgkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK1JldHVybiB0aGUgcHJvZHVjdCBvZiB4IGFuZCB5LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbmV4dF9taW51cywiXG5cCi1uZXh0X21pbnVzKHgpIC0gUmV0dXJuIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIHNtYWxsZXIgdGhhbiB4LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfbmV4dF9taW51cywKKyJuZXh0X21pbnVzKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIHRoZSBsYXJnZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIHNtYWxsZXIgdGhhbiB4LlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfbmV4dF9wbHVzLCJcblwKLW5leHRfcGx1cyh4KSAtIFJldHVybiB0aGUgc21hbGxlc3QgcmVwcmVzZW50YWJsZSBudW1iZXIgbGFyZ2VyIHRoYW4geC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X25leHRfcGx1cywKKyJuZXh0X3BsdXMoJHNlbGYsIHgsIC8pXG4tLVxuXG5cCitSZXR1cm4gdGhlIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgbnVtYmVyIGxhcmdlciB0aGFuIHguXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9uZXh0X3Rvd2FyZCwiXG5cCi1uZXh0X3Rvd2FyZCh4KSAtIFJldHVybiB0aGUgbnVtYmVyIGNsb3Nlc3QgdG8geCwgaW4gdGhlIGRpcmVjdGlvbiB0b3dhcmRzIHkuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9uZXh0X3Rvd2FyZCwKKyJuZXh0X3Rvd2FyZCgkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK1JldHVybiB0aGUgbnVtYmVyIGNsb3Nlc3QgdG8geCwgaW4gdGhlIGRpcmVjdGlvbiB0b3dhcmRzIHkuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9ub3JtYWxpemUsIlxuXAotbm9ybWFsaXplKHgpIC0gUmVkdWNlIHggdG8gaXRzIHNpbXBsZXN0IGZvcm0uIEFsaWFzIGZvciByZWR1Y2UoeCkuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9ub3JtYWxpemUsCisibm9ybWFsaXplKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmVkdWNlIHggdG8gaXRzIHNpbXBsZXN0IGZvcm0uIEFsaWFzIGZvciByZWR1Y2UoeCkuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9udW1iZXJfY2xhc3MsIlxuXAotbnVtYmVyX2NsYXNzKHgpIC0gUmV0dXJuIGFuIGluZGljYXRpb24gb2YgdGhlIGNsYXNzIG9mIHguXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9udW1iZXJfY2xhc3MsCisibnVtYmVyX2NsYXNzKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUmV0dXJuIGFuIGluZGljYXRpb24gb2YgdGhlIGNsYXNzIG9mIHguXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9wbHVzLCJcblwKLXBsdXMoeCkgLSBQbHVzIGNvcnJlc3BvbmRzIHRvIHRoZSB1bmFyeSBwcmVmaXggcGx1cyBvcGVyYXRvciBpbiBQeXRob24sXG5cCi1idXQgYXBwbGllcyB0aGUgY29udGV4dCB0byB0aGUgcmVzdWx0LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfcGx1cywKKyJwbHVzKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorUGx1cyBjb3JyZXNwb25kcyB0byB0aGUgdW5hcnkgcHJlZml4IHBsdXMgb3BlcmF0b3IgaW4gUHl0aG9uLCBidXQgYXBwbGllc1xuXAordGhlIGNvbnRleHQgdG8gdGhlIHJlc3VsdC5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X3Bvd2VyLCJcblwKLXBvd2VyKHgsIHkpIC0gQ29tcHV0ZSB4Kip5LiBJZiB4IGlzIG5lZ2F0aXZlLCB0aGVuIHkgbXVzdCBiZSBpbnRlZ3JhbC5cblwKLVRoZSByZXN1bHQgd2lsbCBiZSBpbmV4YWN0IHVubGVzcyB5IGlzIGludGVncmFsIGFuZCB0aGUgcmVzdWx0IGlzIGZpbml0ZVxuXAotYW5kIGNhbiBiZSBleHByZXNzZWQgZXhhY3RseSBpbiAncHJlY2lzaW9uJyBkaWdpdHMuIEluIHRoZSBQeXRob24gdmVyc2lvblxuXAotdGhlIHJlc3VsdCBpcyBhbHdheXMgY29ycmVjdGx5IHJvdW5kZWQsIGluIHRoZSBDIHZlcnNpb24gdGhlIHJlc3VsdCBpc1xuXAotYWxtb3N0IGFsd2F5cyBjb3JyZWN0bHkgcm91bmRlZC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X3Bvd2VyLAorInBvd2VyKCRzZWxmLCAvLCBhLCBiLCBtb2R1bG89Tm9uZSlcbi0tXG5cblwKK0NvbXB1dGUgYSoqYi4gSWYgJ2EnIGlzIG5lZ2F0aXZlLCB0aGVuICdiJyBtdXN0IGJlIGludGVncmFsLiBUaGUgcmVzdWx0XG5cCit3aWxsIGJlIGluZXhhY3QgdW5sZXNzICdhJyBpcyBpbnRlZ3JhbCBhbmQgdGhlIHJlc3VsdCBpcyBmaW5pdGUgYW5kIGNhblxuXAorYmUgZXhwcmVzc2VkIGV4YWN0bHkgaW4gJ3ByZWNpc2lvbicgZGlnaXRzLiAgSW4gdGhlIFB5dGhvbiB2ZXJzaW9uIHRoZVxuXAorcmVzdWx0IGlzIGFsd2F5cyBjb3JyZWN0bHkgcm91bmRlZCwgaW4gdGhlIEMgdmVyc2lvbiB0aGUgcmVzdWx0IGlzIGFsbW9zdFxuXAorYWx3YXlzIGNvcnJlY3RseSByb3VuZGVkLlxuXAogXG5cCi1wb3dlcih4LCB5LCBtKSAtIENvbXB1dGUgKHgqKnkpICUgbS4gVGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgaG9sZDpcblwKK0lmIG1vZHVsbyBpcyBnaXZlbiwgY29tcHV0ZSAoYSoqYikgJSBtb2R1bG8uIFRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zXG5cCitob2xkOlxuXAogXG5cCiAgICAgKiBhbGwgdGhyZWUgYXJndW1lbnRzIG11c3QgYmUgaW50ZWdyYWxcblwKLSAgICAqIHkgbXVzdCBiZSBub25uZWdhdGl2ZVxuXAotICAgICogYXQgbGVhc3Qgb25lIG9mIHggb3IgeSBtdXN0IGJlIG5vbnplcm9cblwKLSAgICAqIG0gbXVzdCBiZSBub256ZXJvIGFuZCBsZXNzIHRoYW4gMTAqKnByZWMgaW4gYWJzb2x1dGUgdmFsdWVcblwKKyAgICAqICdiJyBtdXN0IGJlIG5vbm5lZ2F0aXZlXG5cCisgICAgKiBhdCBsZWFzdCBvbmUgb2YgJ2EnIG9yICdiJyBtdXN0IGJlIG5vbnplcm9cblwKKyAgICAqIG1vZHVsbyBtdXN0IGJlIG5vbnplcm8gYW5kIGxlc3MgdGhhbiAxMCoqcHJlYyBpbiBhYnNvbHV0ZSB2YWx1ZVxuXAogXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9xdWFudGl6ZSwiXG5cCi1xdWFudGl6ZSh4LCB5KSAtIFJldHVybiBhIHZhbHVlIGVxdWFsIHRvIHggKHJvdW5kZWQpLCBoYXZpbmcgdGhlIGV4cG9uZW50IG9mIHkuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9xdWFudGl6ZSwKKyJxdWFudGl6ZSgkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK1JldHVybiBhIHZhbHVlIGVxdWFsIHRvIHggKHJvdW5kZWQpLCBoYXZpbmcgdGhlIGV4cG9uZW50IG9mIHkuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9yYWRpeCwiXG5cCi1yYWRpeCgpIC0gUmV0dXJuIDEwLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfcmFkaXgsCisicmFkaXgoJHNlbGYsIC8pXG4tLVxuXG5cCitSZXR1cm4gMTAuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9yZW1haW5kZXIsIlxuXAotcmVtYWluZGVyKHgsIHkpIC0gUmV0dXJuIHRoZSByZW1haW5kZXIgZnJvbSBpbnRlZ2VyIGRpdmlzaW9uLiBUaGUgc2lnbiBvZlxuXAotdGhlIHJlc3VsdCwgaWYgbm9uLXplcm8sIGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIG9yaWdpbmFsIGRpdmlkZW5kLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfcmVtYWluZGVyLAorInJlbWFpbmRlcigkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK1JldHVybiB0aGUgcmVtYWluZGVyIGZyb20gaW50ZWdlciBkaXZpc2lvbi4gIFRoZSBzaWduIG9mIHRoZSByZXN1bHQsXG5cCitpZiBub24temVybywgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgb3JpZ2luYWwgZGl2aWRlbmQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9yZW1haW5kZXJfbmVhciwiXG5cCi1yZW1haW5kZXJfbmVhcih4LCB5KSAtIFJldHVybiB4IC0geSAqIG4sIHdoZXJlIG4gaXMgdGhlIGludGVnZXIgbmVhcmVzdCB0aGVcblwKLWV4YWN0IHZhbHVlIG9mIHggLyB5IChpZiB0aGUgcmVzdWx0IGlzIDAgdGhlbiBpdHMgc2lnbiB3aWxsIGJlIHRoZSBzaWduIG9mIHgpLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfcmVtYWluZGVyX25lYXIsCisicmVtYWluZGVyX25lYXIoJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitSZXR1cm4geCAtIHkgKiBuLCB3aGVyZSBuIGlzIHRoZSBpbnRlZ2VyIG5lYXJlc3QgdGhlIGV4YWN0IHZhbHVlIG9mIHggLyB5XG5cCisoaWYgdGhlIHJlc3VsdCBpcyAwIHRoZW4gaXRzIHNpZ24gd2lsbCBiZSB0aGUgc2lnbiBvZiB4KS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X3JvdGF0ZSwiXG5cCi1yb3RhdGUoeCwgeSkgLSBSZXR1cm4gYSBjb3B5IG9mIHgsIHJvdGF0ZWQgYnkgeSBwbGFjZXMuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9yb3RhdGUsCisicm90YXRlKCRzZWxmLCB4LCB5LCAvKVxuLS1cblxuXAorUmV0dXJuIGEgY29weSBvZiB4LCByb3RhdGVkIGJ5IHkgcGxhY2VzLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfc2FtZV9xdWFudHVtLCJcblwKLXNhbWVfcXVhbnR1bSh4LCB5KSAtIFJldHVybiBUcnVlIGlmIHRoZSB0d28gb3BlcmFuZHMgaGF2ZSB0aGUgc2FtZSBleHBvbmVudC5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X3NhbWVfcXVhbnR1bSwKKyJzYW1lX3F1YW50dW0oJHNlbGYsIHgsIHksIC8pXG4tLVxuXG5cCitSZXR1cm4gVHJ1ZSBpZiB0aGUgdHdvIG9wZXJhbmRzIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF9zY2FsZWIsIlxuXAotc2NhbGViKHgsIHkpIC0gUmV0dXJuIHRoZSBmaXJzdCBvcGVyYW5kIGFmdGVyIGFkZGluZyB0aGUgc2Vjb25kIHZhbHVlXG5cCi10byBpdHMgZXhwLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfc2NhbGViLAorInNjYWxlYigkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK1JldHVybiB0aGUgZmlyc3Qgb3BlcmFuZCBhZnRlciBhZGRpbmcgdGhlIHNlY29uZCB2YWx1ZSB0byBpdHMgZXhwLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfc2hpZnQsIlxuXAotc2hpZnQoeCwgeSkgLSBSZXR1cm4gYSBjb3B5IG9mIHgsIHNoaWZ0ZWQgYnkgeSBwbGFjZXMuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF9zaGlmdCwKKyJzaGlmdCgkc2VsZiwgeCwgeSwgLylcbi0tXG5cblwKK1JldHVybiBhIGNvcHkgb2YgeCwgc2hpZnRlZCBieSB5IHBsYWNlcy5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X3NxcnQsIlxuXAotc3FydCh4KSAtIFNxdWFyZSByb290IG9mIGEgbm9uLW5lZ2F0aXZlIG51bWJlciB0byBjb250ZXh0IHByZWNpc2lvbi5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X3NxcnQsCisic3FydCgkc2VsZiwgeCwgLylcbi0tXG5cblwKK1NxdWFyZSByb290IG9mIGEgbm9uLW5lZ2F0aXZlIG51bWJlciB0byBjb250ZXh0IHByZWNpc2lvbi5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X3N1YnRyYWN0LCJcblwKLXN1YnRyYWN0KHgsIHkpIC0gUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeS5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X3N1YnRyYWN0LAorInN1YnRyYWN0KCRzZWxmLCB4LCB5LCAvKVxuLS1cblxuXAorUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeS5cblwKIFxuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfY3R4X3RvX2VuZ19zdHJpbmcsIlxuXAotdG9fZW5nX3N0cmluZyh4KSAtIENvbnZlcnQgYSBudW1iZXIgdG8gYSBzdHJpbmcsIHVzaW5nIGVuZ2luZWVyaW5nIG5vdGF0aW9uLlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfdG9fZW5nX3N0cmluZywKKyJ0b19lbmdfc3RyaW5nKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorQ29udmVydCBhIG51bWJlciB0byBhIHN0cmluZywgdXNpbmcgZW5naW5lZXJpbmcgbm90YXRpb24uXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF90b19pbnRlZ3JhbCwiXG5cCi10b19pbnRlZ3JhbCh4KSAtIElkZW50aWNhbCB0byB0b19pbnRlZ3JhbF92YWx1ZSh4KS5cblwKK1B5RG9jX1NUUlZBUihkb2NfY3R4X3RvX2ludGVncmFsLAorInRvX2ludGVncmFsKCRzZWxmLCB4LCAvKVxuLS1cblxuXAorSWRlbnRpY2FsIHRvIHRvX2ludGVncmFsX3ZhbHVlKHgpLlxuXAogXG4iKTsKIAotUHlEb2NfU1RSVkFSKGRvY19jdHhfdG9faW50ZWdyYWxfZXhhY3QsIlxuXAotdG9faW50ZWdyYWxfZXhhY3QoeCkgLSBSb3VuZCB0byBhbiBpbnRlZ2VyLiBTaWduYWwgaWYgdGhlIHJlc3VsdCBpc1xuXAotcm91bmRlZCBvciBpbmV4YWN0LlxuXAorUHlEb2NfU1RSVkFSKGRvY19jdHhfdG9faW50ZWdyYWxfZXhhY3QsCisidG9faW50ZWdyYWxfZXhhY3QoJHNlbGYsIHgsIC8pXG4tLVxuXG5cCitSb3VuZCB0byBhbiBpbnRlZ2VyLiBTaWduYWwgaWYgdGhlIHJlc3VsdCBpcyByb3VuZGVkIG9yIGluZXhhY3QuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF90b19pbnRlZ3JhbF92YWx1ZSwiXG5cCi10b19pbnRlZ3JhbF92YWx1ZSh4KSAtIFJvdW5kIHRvIGFuIGludGVnZXIuXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF90b19pbnRlZ3JhbF92YWx1ZSwKKyJ0b19pbnRlZ3JhbF92YWx1ZSgkc2VsZiwgeCwgLylcbi0tXG5cblwKK1JvdW5kIHRvIGFuIGludGVnZXIuXG5cCiBcbiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2N0eF90b19zY2lfc3RyaW5nLCJcblwKLXRvX3NjaV9zdHJpbmcoeCkgLSBDb252ZXJ0IGEgbnVtYmVyIHRvIGEgc3RyaW5nIHVzaW5nIHNjaWVudGlmaWMgbm90YXRpb24uXG5cCitQeURvY19TVFJWQVIoZG9jX2N0eF90b19zY2lfc3RyaW5nLAorInRvX3NjaV9zdHJpbmcoJHNlbGYsIHgsIC8pXG4tLVxuXG5cCitDb252ZXJ0IGEgbnVtYmVyIHRvIGEgc3RyaW5nIHVzaW5nIHNjaWVudGlmaWMgbm90YXRpb24uXG5cCiBcbiIpOwogCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvbXBkZWNpbWFsLmMgYi9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL21wZGVjaW1hbC5jCmluZGV4IDIxZDIyMjIuLjU5M2Y5ZjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvbXBkZWNpbWFsLmMKKysrIGIvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9tcGRlY2ltYWwuYwpAQCAtNDMsNiArNDMsNyBAQAogI2lmZGVmIFBQUk8KICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCiAgICAgI2luY2x1ZGUgPGZsb2F0Lmg+CisgICAgI3ByYWdtYSBmbG9hdF9jb250cm9sKHByZWNpc2UsIG9uKQogICAgICNwcmFnbWEgZmVudl9hY2Nlc3Mob24pCiAgICNlbGlmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQogICAgIC8qIEM5OSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGVjaW1hbC90ZXN0cy9kZWNjaGVjay5weSBiL01vZHVsZXMvX2RlY2ltYWwvdGVzdHMvZGVjY2hlY2sucHkKaW5kZXggMjcxMzdiMi4uYWI3ZDViZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGVjaW1hbC90ZXN0cy9kZWNjaGVjay5weQorKysgYi9Nb2R1bGVzL19kZWNpbWFsL3Rlc3RzL2RlY2NoZWNrLnB5CkBAIC0zNiw2ICszNiw3IEBACiBmcm9tIHJhbmRkZWMgaW1wb3J0IHJhbmRmbG9hdCwgYWxsX3VuYXJ5LCBhbGxfYmluYXJ5LCBhbGxfdGVybmFyeQogZnJvbSByYW5kZGVjIGltcG9ydCB1bmFyeV9vcHRhcmcsIGJpbmFyeV9vcHRhcmcsIHRlcm5hcnlfb3B0YXJnCiBmcm9tIGZvcm1hdGhlbHBlciBpbXBvcnQgcmFuZF9mb3JtYXQsIHJhbmRfbG9jYWxlCitmcm9tIF9weWRlY2ltYWwgaW1wb3J0IF9kZWNfZnJvbV90cmlwbGUKIAogQyA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ2RlY2ltYWwnLCBmcmVzaD1bJ19kZWNpbWFsJ10pCiBQID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnZGVjaW1hbCcsIGJsb2NrZWQ9WydfZGVjaW1hbCddKQpAQCAtMzcwLDcgKzM3MSw3IEBACiAgICAgICAgIHJldHVybiBhYnMoYSAtIGIpCiAKICAgICBkZWYgc3RhbmRhcmRfdWxwKHNlbGYsIGRlYywgcHJlYyk6Ci0gICAgICAgIHJldHVybiBQLl9kZWNfZnJvbV90cmlwbGUoMCwgJzEnLCBkZWMuX2V4cCtsZW4oZGVjLl9pbnQpLXByZWMpCisgICAgICAgIHJldHVybiBfZGVjX2Zyb21fdHJpcGxlKDAsICcxJywgZGVjLl9leHArbGVuKGRlYy5faW50KS1wcmVjKQogCiAgICAgZGVmIHJvdW5kaW5nX2RpcmVjdGlvbihzZWxmLCB4LCBtb2RlKToKICAgICAgICAgIiIiRGV0ZXJtaW5lIHRoZSBlZmZlY3RpdmUgZGlyZWN0aW9uIG9mIHRoZSByb3VuZGluZyB3aGVuCkBAIC00MDEsMTAgKzQwMiwxMCBAQAogICAgICAgICAjIENvbnZlcnQgaW5maW5pdGllcyB0byB0aGUgbGFyZ2VzdCByZXByZXNlbnRhYmxlIG51bWJlciArIDEuCiAgICAgICAgIHggPSBleGFjdAogICAgICAgICBpZiBleGFjdC5pc19pbmZpbml0ZSgpOgotICAgICAgICAgICAgeCA9IFAuX2RlY19mcm9tX3RyaXBsZShleGFjdC5fc2lnbiwgJzEwJywgY29udGV4dC5wLkVtYXgpCisgICAgICAgICAgICB4ID0gX2RlY19mcm9tX3RyaXBsZShleGFjdC5fc2lnbiwgJzEwJywgY29udGV4dC5wLkVtYXgpCiAgICAgICAgIHkgPSByb3VuZGVkCiAgICAgICAgIGlmIHJvdW5kZWQuaXNfaW5maW5pdGUoKToKLSAgICAgICAgICAgIHkgPSBQLl9kZWNfZnJvbV90cmlwbGUocm91bmRlZC5fc2lnbiwgJzEwJywgY29udGV4dC5wLkVtYXgpCisgICAgICAgICAgICB5ID0gX2RlY19mcm9tX3RyaXBsZShyb3VuZGVkLl9zaWduLCAnMTAnLCBjb250ZXh0LnAuRW1heCkKIAogICAgICAgICAjIGVyciA9IChyb3VuZGVkIC0gZXhhY3QpIC8gdWxwKHJvdW5kZWQpCiAgICAgICAgIHNlbGYubWF4Y3R4LnByZWMgPSBwICogMgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKaW5kZXggY2Y4MTllOC4uODVmZmNhMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYworKysgYi9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCkBAIC0xMSw2ICsxMSw4IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIApAQCAtMTg1LDggKzE4Nyw4IEBACiAgICAgUHlPYmplY3QqIGF0dHJpYjsKIAogICAgIC8qIGNoaWxkIGVsZW1lbnRzICovCi0gICAgaW50IGxlbmd0aDsgLyogYWN0dWFsIG51bWJlciBvZiBpdGVtcyAqLwotICAgIGludCBhbGxvY2F0ZWQ7IC8qIGFsbG9jYXRlZCBpdGVtcyAqLworICAgIFB5X3NzaXplX3QgbGVuZ3RoOyAvKiBhY3R1YWwgbnVtYmVyIG9mIGl0ZW1zICovCisgICAgUHlfc3NpemVfdCBhbGxvY2F0ZWQ7IC8qIGFsbG9jYXRlZCBpdGVtcyAqLwogCiAgICAgLyogdGhpcyBlaXRoZXIgcG9pbnRzIHRvIF9jaGlsZHJlbiBvciB0byBhIG1hbGxvY2VkIGJ1ZmZlciAqLwogICAgIFB5T2JqZWN0KiAqY2hpbGRyZW47CkBAIC0yNTEsNyArMjUzLDcgQEAKIGRlYWxsb2NfZXh0cmEoRWxlbWVudE9iamVjdCogc2VsZikKIHsKICAgICBFbGVtZW50T2JqZWN0RXh0cmEgKm15ZXh0cmE7Ci0gICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzY4LDYgKzM3MCwxNCBAQAogICAgIHJldHVybiBhdHRyaWI7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfZWxlbWVudHRyZWUKK2NsYXNzIF9lbGVtZW50dHJlZS5FbGVtZW50ICJFbGVtZW50T2JqZWN0ICoiICImRWxlbWVudF9UeXBlIgorY2xhc3MgX2VsZW1lbnR0cmVlLlRyZWVCdWlsZGVyICJUcmVlQnVpbGRlck9iamVjdCAqIiAiJlRyZWVCdWlsZGVyX1R5cGUiCitjbGFzcyBfZWxlbWVudHRyZWUuWE1MUGFyc2VyICJYTUxQYXJzZXJPYmplY3QgKiIgIiZYTUxQYXJzZXJfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTE1OWFhNTBhNTQwNjFjMjJdKi8KKwogc3RhdGljIGludAogZWxlbWVudF9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC00NDIsNyArNDUyLDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBzaXplID0gc2VsZi0+ZXh0cmEtPmxlbmd0aCArIGV4dHJhOworICAgIHNpemUgPSBzZWxmLT5leHRyYS0+bGVuZ3RoICsgZXh0cmE7ICAvKiBuZXZlciBvdmVyZmxvd3MgKi8KIAogICAgIGlmIChzaXplID4gc2VsZi0+ZXh0cmEtPmFsbG9jYXRlZCkgewogICAgICAgICAvKiB1c2UgUHl0aG9uIDIuNCdzIGxpc3QgZ3Jvd3RoIHN0cmF0ZWd5ICovCkBAIC00NTUsMTEgKzQ2NSw2IEBACiAgICAgICAgIHNpemUgPSBzaXplID8gc2l6ZSA6IDE7CiAgICAgICAgIGlmICgoc2l6ZV90KXNpemUgPiBQWV9TU0laRV9UX01BWC9zaXplb2YoUHlPYmplY3QqKSkKICAgICAgICAgICAgIGdvdG8gbm9tZW1vcnk7Ci0gICAgICAgIGlmIChzaXplID4gSU5UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IGNoaWxkcmVuIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKHNlbGYtPmV4dHJhLT5jaGlsZHJlbiAhPSBzZWxmLT5leHRyYS0+X2NoaWxkcmVuKSB7CiAgICAgICAgICAgICAvKiBDb3Zlcml0eSBDSUQgIzE4MiBzaXplX2Vycm9yOiBBbGxvY2F0aW5nIDEgYnl0ZXMgdG8gcG9pbnRlcgogICAgICAgICAgICAgICogImNoaWxkcmVuIiwgd2hpY2ggbmVlZHMgYXQgbGVhc3QgNCBieXRlcy4gQWx0aG91Z2ggaXQncyBhCkBAIC02MjAsNyArNjI1LDcgQEAKICAgICBQeV9WSVNJVChKT0lOX09CSihzZWxmLT50YWlsKSk7CiAKICAgICBpZiAoc2VsZi0+ZXh0cmEpIHsKLSAgICAgICAgaW50IGk7CisgICAgICAgIFB5X3NzaXplX3QgaTsKICAgICAgICAgUHlfVklTSVQoc2VsZi0+ZXh0cmEtPmF0dHJpYik7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmV4dHJhLT5sZW5ndGg7ICsraSkKQEAgLTY2MSwyNSArNjY2LDMzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfYXBwZW5kKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQotewotICAgIFB5T2JqZWN0KiBlbGVtZW50OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE6YXBwZW5kIiwgJkVsZW1lbnRfVHlwZSwgJmVsZW1lbnQpKQotICAgICAgICByZXR1cm4gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5FbGVtZW50LmFwcGVuZAogCi0gICAgaWYgKGVsZW1lbnRfYWRkX3N1YmVsZW1lbnQoc2VsZiwgZWxlbWVudCkgPCAwKQorICAgIHN1YmVsZW1lbnQ6IG9iamVjdChzdWJjbGFzc19vZj0nJkVsZW1lbnRfVHlwZScpCisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9hcHBlbmRfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3ViZWxlbWVudCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NGE4ODRiN2NmMjI5NWY0IGlucHV0PTNlZDY0OGJlYjViZmEyMmFdKi8KK3sKKyAgICBpZiAoZWxlbWVudF9hZGRfc3ViZWxlbWVudChzZWxmLCBzdWJlbGVtZW50KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfY2xlYXJtZXRob2QoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCi17Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6Y2xlYXIiKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuRWxlbWVudC5jbGVhcgogCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9jbGVhcl9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OGJjZDdhNTFmOTRjZmZmNiBpbnB1dD0zYzcxOWZmOTRiZjQ1ZGQ2XSovCit7CiAgICAgZGVhbGxvY19leHRyYShzZWxmKTsKIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKQEAgLTY5MywxNCArNzA2LDE3IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfY29weShFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKLXsKLSAgICBpbnQgaTsKLSAgICBFbGVtZW50T2JqZWN0KiBlbGVtZW50OworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuX19jb3B5X18KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOl9fY29weV9fIikpCi0gICAgICAgIHJldHVybiBOVUxMOworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19jb3B5X19faW1wbChFbGVtZW50T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTJjNzAxZWJmZjcyNDc3ODEgaW5wdXQ9YWQ4N2FhZWJlOTU2NzViZl0qLworeworICAgIFB5X3NzaXplX3QgaTsKKyAgICBFbGVtZW50T2JqZWN0KiBlbGVtZW50OwogCiAgICAgZWxlbWVudCA9IChFbGVtZW50T2JqZWN0KikgY3JlYXRlX25ld19lbGVtZW50KAogICAgICAgICBzZWxmLT50YWcsIChzZWxmLT5leHRyYSkgPyBzZWxmLT5leHRyYS0+YXR0cmliIDogUHlfTm9uZSk7CkBAIC03MzIsMTAgKzc0OCwxOSBAQAogICAgIHJldHVybiAoUHlPYmplY3QqKSBlbGVtZW50OwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1lbGVtZW50X2RlZXBjb3B5KEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuX19kZWVwY29weV9fCisKKyAgICBtZW1vOiBvYmplY3QKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X19fZGVlcGNvcHlfXyhFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbWVtbykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMWYxOTg1MWQxN2JmMjM5IGlucHV0PWRmMjRjMmI2MDI0MzBiNzddKi8KIHsKLSAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgRWxlbWVudE9iamVjdCogZWxlbWVudDsKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiBhdHRyaWI7CkBAIC03NDMsMTAgKzc2OCw2IEBACiAgICAgUHlPYmplY3QqIHRhaWw7CiAgICAgUHlPYmplY3QqIGlkOwogCi0gICAgUHlPYmplY3QqIG1lbW87Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOl9fZGVlcGNvcHlfXyIsICZtZW1vKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICB0YWcgPSBkZWVwY29weShzZWxmLT50YWcsIG1lbW8pOwogICAgIGlmICghdGFnKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTgxNywxNyArODM4LDIyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfc2l6ZW9mKFB5T2JqZWN0KiBteXNlbGYsIFB5T2JqZWN0KiBhcmdzKQorLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuX19zaXplb2ZfXyAtPiBQeV9zc2l6ZV90CisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5X3NzaXplX3QKK19lbGVtZW50dHJlZV9FbGVtZW50X19fc2l6ZW9mX19faW1wbChFbGVtZW50T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJmNzM4Njc3MjEwMDgwMDAgaW5wdXQ9NzBmNGIzMjNkNTVhMTdjMV0qLwogewotICAgIEVsZW1lbnRPYmplY3QgKnNlbGYgPSAoRWxlbWVudE9iamVjdCopbXlzZWxmOwotICAgIFB5X3NzaXplX3QgcmVzdWx0ID0gc2l6ZW9mKEVsZW1lbnRPYmplY3QpOworICAgIFB5X3NzaXplX3QgcmVzdWx0ID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRShzZWxmKSk7CiAgICAgaWYgKHNlbGYtPmV4dHJhKSB7CiAgICAgICAgIHJlc3VsdCArPSBzaXplb2YoRWxlbWVudE9iamVjdEV4dHJhKTsKICAgICAgICAgaWYgKHNlbGYtPmV4dHJhLT5jaGlsZHJlbiAhPSBzZWxmLT5leHRyYS0+X2NoaWxkcmVuKQogICAgICAgICAgICAgcmVzdWx0ICs9IHNpemVvZihQeU9iamVjdCopICogc2VsZi0+ZXh0cmEtPmFsbG9jYXRlZDsKICAgICB9Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qIGRpY3Qga2V5cyBmb3IgZ2V0c3RhdGUvc2V0c3RhdGUuICovCkBAIC04NDMsMTAgKzg2OSwxNiBAQAogICogYW55IHVubmVjZXNzYXJ5IHN0cnVjdHVyZXMgdGhlcmU7IGFuZCAoYikgaXQgYnV5cyBjb21wYXRpYmlsaXR5IHdpdGggMy4yCiAgKiBwaWNrbGVzLiAgU2VlIGlzc3VlICMxNjA3Ni4KICAqLworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuX19nZXRzdGF0ZV9fCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWVsZW1lbnRfZ2V0c3RhdGUoRWxlbWVudE9iamVjdCAqc2VsZikKK19lbGVtZW50dHJlZV9FbGVtZW50X19fZ2V0c3RhdGVfX19pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzcyNzlhZWViNmJiNWIwNCBpbnB1dD1mMGQxNmQ3ZWMyZjdhZGMxXSovCiB7Ci0gICAgaW50IGksIG5vYXR0cmliOworICAgIFB5X3NzaXplX3QgaSwgbm9hdHRyaWI7CiAgICAgUHlPYmplY3QgKmluc3RhbmNlZGljdCA9IE5VTEwsICpjaGlsZHJlbjsKIAogICAgIC8qIEJ1aWxkIGEgbGlzdCBvZiBjaGlsZHJlbi4gKi8KQEAgLTg5NiwxNiArOTI4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGFpbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjaGlsZHJlbikKIHsKLSAgICBpbnQgaSwgbmNoaWxkcmVuOworICAgIFB5X3NzaXplX3QgaSwgbmNoaWxkcmVuOwogCiAgICAgaWYgKCF0YWcpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInRhZyBtYXkgbm90IGJlIE5VTEwiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUHlfQ0xFQVIoc2VsZi0+dGFnKTsKLSAgICBzZWxmLT50YWcgPSB0YWc7Ci0gICAgUHlfSU5DUkVGKHNlbGYtPnRhZyk7CisgICAgUHlfSU5DUkVGKHRhZyk7CisgICAgUHlfWFNFVFJFRihzZWxmLT50YWcsIHRhZyk7CiAKICAgICBfY2xlYXJfam9pbmVkX3B0cigmc2VsZi0+dGV4dCk7CiAgICAgc2VsZi0+dGV4dCA9IHRleHQgPyBKT0lOX1NFVCh0ZXh0LCBQeUxpc3RfQ2hlY2tFeGFjdCh0ZXh0KSkgOiBQeV9Ob25lOwpAQCAtOTIxLDE4ICs5NTIsMTEgQEAKIAogICAgIC8qIENvbXB1dGUgJ25jaGlsZHJlbicuICovCiAgICAgaWYgKGNoaWxkcmVuKSB7Ci0gICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2soY2hpbGRyZW4pKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ19jaGlsZHJlbicgaXMgbm90IGEgbGlzdCIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgc2l6ZSA9IFB5TGlzdF9TaXplKGNoaWxkcmVuKTsKLSAgICAgICAgLyogZXhwYXQgbGltaXRzIG5jaGlsZHJlbiB0byBpbnQgKi8KLSAgICAgICAgaWYgKHNpemUgPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInRvbyBtYW55IGNoaWxkcmVuIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBuY2hpbGRyZW4gPSAoaW50KXNpemU7CisgICAgICAgIG5jaGlsZHJlbiA9IFB5TGlzdF9TaXplKGNoaWxkcmVuKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIG5jaGlsZHJlbiA9IDA7CkBAIC05NTUsOSArOTc5LDggQEAKIAogICAgIC8qIFN0YXNoIGF0dHJpYi4gKi8KICAgICBpZiAoYXR0cmliKSB7Ci0gICAgICAgIFB5X0NMRUFSKHNlbGYtPmV4dHJhLT5hdHRyaWIpOwotICAgICAgICBzZWxmLT5leHRyYS0+YXR0cmliID0gYXR0cmliOwogICAgICAgICBQeV9JTkNSRUYoYXR0cmliKTsKKyAgICAgICAgUHlfWFNFVFJFRihzZWxmLT5leHRyYS0+YXR0cmliLCBhdHRyaWIpOwogICAgIH0KIAogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtOTY2LDYgKzk4OSw3IEBACiAvKiBfX3NldHN0YXRlX18gZm9yIEVsZW1lbnQgaW5zdGFuY2UgZnJvbSB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uLgogICogJ3N0YXRlJyBzaG91bGQgYmUgdGhlIGluc3RhbmNlIGRpY3QuCiAgKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIGVsZW1lbnRfc2V0c3RhdGVfZnJvbV9QeXRob24oRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0YXRlKQogewpAQCAtOTkxLDggKzEwMTUsMTcgQEAKICAgICByZXR1cm4gcmV0dmFsOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuRWxlbWVudC5fX3NldHN0YXRlX18KKworICAgIHN0YXRlOiBvYmplY3QKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWVsZW1lbnRfc2V0c3RhdGUoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0YXRlKQorX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19zZXRzdGF0ZV9fKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdGF0ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lYTI4YmYzNDkxYjFmNzVlIGlucHV0PWFhZjgwYWJlYTdjMWUzYjldKi8KIHsKICAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0YXRlKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtMTA0NiwyMSArMTA3OSwyNiBAQAogICAgIHJldHVybiAxOyAvKiB1bmtub3duIHR5cGU7IG1pZ2h0IGJlIHBhdGggZXhwcmVzc2lvbiAqLwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1lbGVtZW50X2V4dGVuZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5FbGVtZW50LmV4dGVuZAorCisgICAgZWxlbWVudHM6IG9iamVjdAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfZXh0ZW5kKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICplbGVtZW50cykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mNmU2N2ZjMmZmNTI5MTkxIGlucHV0PTgwN2JjNGYzMWM2OWY3YzBdKi8KIHsKICAgICBQeU9iamVjdCogc2VxOwogICAgIFB5X3NzaXplX3QgaTsKIAotICAgIFB5T2JqZWN0KiBzZXFfaW47Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmV4dGVuZCIsICZzZXFfaW4pKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChzZXFfaW4sICIiKTsKKyAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QoZWxlbWVudHMsICIiKTsKICAgICBpZiAoIXNlcSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoCiAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiZXhwZWN0ZWQgc2VxdWVuY2UsIG5vdCBcIiUuMjAwc1wiIiwgUHlfVFlQRShzZXFfaW4pLT50cF9uYW1lCisgICAgICAgICAgICAiZXhwZWN0ZWQgc2VxdWVuY2UsIG5vdCBcIiUuMjAwc1wiIiwgUHlfVFlQRShlbGVtZW50cyktPnRwX25hbWUKICAgICAgICAgICAgICk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEwOTEsMjMgKzExMjksMjYgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9maW5kKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5FbGVtZW50LmZpbmQKKworICAgIHBhdGg6IG9iamVjdAorICAgIG5hbWVzcGFjZXM6IG9iamVjdCA9IE5vbmUKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfZmluZF9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lc3BhY2VzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQxYjQzZjBmMGJlY2FmYWUgaW5wdXQ9MzU5YjY5ODVmNjQ4OWQyZV0qLwogewotICAgIGludCBpOwotICAgIFB5T2JqZWN0KiB0YWc7Ci0gICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgUHlfc3NpemVfdCBpOwogICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpmaW5kIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKSB7CisgICAgaWYgKGNoZWNrcGF0aChwYXRoKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZmluZCk7CiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZCwgIk9PTyIsIHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAgICAgfQogCkBAIC0xMTIwLDcgKzExNjEsNyBAQAogICAgICAgICBpZiAoIUVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKCgoRWxlbWVudE9iamVjdCopaXRlbSktPnRhZywgdGFnLCBQeV9FUSk7CisgICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKCgoRWxlbWVudE9iamVjdCopaXRlbSktPnRhZywgcGF0aCwgUHlfRVEpOwogICAgICAgICBpZiAocmMgPiAwKQogICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKQEAgLTExMzEsMjQgKzExNzIsMjggQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9maW5kdGV4dChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuRWxlbWVudC5maW5kdGV4dAorCisgICAgcGF0aDogb2JqZWN0CisgICAgZGVmYXVsdDogb2JqZWN0ID0gTm9uZQorICAgIG5hbWVzcGFjZXM6IG9iamVjdCA9IE5vbmUKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfZmluZHRleHRfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lc3BhY2VzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTgzYjNiYTQ1MzVkMzA4ZDIgaW5wdXQ9YjUzYTg1YWE1YWEyYTkxNl0qLwogewotICAgIGludCBpOwotICAgIFB5T2JqZWN0KiB0YWc7Ci0gICAgUHlPYmplY3QqIGRlZmF1bHRfdmFsdWUgPSBQeV9Ob25lOwotICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgX1B5X0lERU5USUZJRVIoZmluZHRleHQpOwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJkZWZhdWx0IiwgIm5hbWVzcGFjZXMiLCAwfTsKICAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POmZpbmR0ZXh0Iiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZkZWZhdWx0X3ZhbHVlLCAmbmFtZXNwYWNlcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKKyAgICBpZiAoY2hlY2twYXRoKHBhdGgpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kdGV4dCwgIk9PT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMKKyAgICAgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmR0ZXh0LCAiT09PTyIsIHNlbGYsIHBhdGgsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAKICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CkBAIC0xMTYyLDcgKzEyMDcsNyBAQAogICAgICAgICBpZiAoIUVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0tPnRhZywgdGFnLCBQeV9FUSk7CisgICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0tPnRhZywgcGF0aCwgUHlfRVEpOwogICAgICAgICBpZiAocmMgPiAwKSB7CiAgICAgICAgICAgICBQeU9iamVjdCogdGV4dCA9IGVsZW1lbnRfZ2V0X3RleHQoaXRlbSk7CiAgICAgICAgICAgICBpZiAodGV4dCA9PSBQeV9Ob25lKSB7CkBAIC0xMTgyLDE5ICsxMjI3LDIzIEBACiAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfZmluZGFsbChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCi17Ci0gICAgaW50IGk7Ci0gICAgUHlPYmplY3QqIG91dDsKLSAgICBQeU9iamVjdCogdGFnOwotICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OwotICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuZmluZGFsbAogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpmaW5kYWxsIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcGF0aDogb2JqZWN0CisgICAgbmFtZXNwYWNlczogb2JqZWN0ID0gTm9uZQorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kYWxsX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWVzcGFjZXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWEwYmQ5ZjU1NDFiNzExZCBpbnB1dD00ZDllNjUwNWE2Mzg1NTBjXSovCit7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0KiBvdXQ7CisgICAgUHlPYmplY3QqIHRhZyA9IHBhdGg7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGZpbmRhbGwpOwpAQCAtMTIyOCwzNiArMTI3Nyw0MSBAQAogICAgIHJldHVybiBvdXQ7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfaXRlcmZpbmQoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQotewotICAgIFB5T2JqZWN0KiB0YWc7Ci0gICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwotICAgIF9QeV9JREVOVElGSUVSKGl0ZXJmaW5kKTsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OwotICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuaXRlcmZpbmQKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86aXRlcmZpbmQiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBwYXRoOiBvYmplY3QKKyAgICBuYW1lc3BhY2VzOiBvYmplY3QgPSBOb25lCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X2l0ZXJmaW5kX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lc3BhY2VzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWVjZGQ1NmQ2M2IxOWQ0MGYgaW5wdXQ9YWJiOTc0ZTM1MGZiNjVjN10qLworeworICAgIFB5T2JqZWN0KiB0YWcgPSBwYXRoOworICAgIF9QeV9JREVOVElGSUVSKGl0ZXJmaW5kKTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAogICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9pdGVyZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcyk7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfZ2V0KEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dkcykKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5FbGVtZW50LmdldAorCisgICAga2V5OiBvYmplY3QKKyAgICBkZWZhdWx0OiBvYmplY3QgPSBOb25lCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X2dldF9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MjNjNjE0MTQyNTk1ZDc1IGlucHV0PWVlMTUzYmJmOGNkYjI0NmVdKi8KIHsKICAgICBQeU9iamVjdCogdmFsdWU7Ci0gICAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyJrZXkiLCAiZGVmYXVsdCIsIDB9OwotCi0gICAgUHlPYmplY3QqIGtleTsKLSAgICBQeU9iamVjdCogZGVmYXVsdF92YWx1ZSA9IFB5X05vbmU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOmdldCIsIGt3bGlzdCwgJmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVmYXVsdF92YWx1ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSB8fCBzZWxmLT5leHRyYS0+YXR0cmliID09IFB5X05vbmUpCiAgICAgICAgIHZhbHVlID0gZGVmYXVsdF92YWx1ZTsKQEAgLTEyNzEsMTcgKzEzMjUsMjAgQEAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfZ2V0Y2hpbGRyZW4oRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuRWxlbWVudC5nZXRjaGlsZHJlbgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9nZXRjaGlsZHJlbl9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTUwZmZlMTE4NjM3YjE0ZiBpbnB1dD0wZjc1NGRmZGVkMTUwZDVmXSovCiB7Ci0gICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0KiBsaXN0OwogCiAgICAgLyogRklYTUU6IHJlcG9ydCBhcyBkZXByZWNhdGVkPyAqLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6Z2V0Y2hpbGRyZW4iKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoIXNlbGYtPmV4dHJhKQogICAgICAgICByZXR1cm4gUHlMaXN0X05ldygwKTsKIApAQCAtMTMwMywyNSArMTM2MCw0MSBAQAogY3JlYXRlX2VsZW1lbnRpdGVyKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0YWcsIGludCBnZXR0ZXh0KTsKIAogCi1zdGF0aWMgUHlPYmplY3QgKgotZWxlbWVudF9pdGVyKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKLXsKLSAgICBQeU9iamVjdCogdGFnID0gUHlfTm9uZTsKLSAgICBzdGF0aWMgY2hhcioga3dsaXN0W10gPSB7InRhZyIsIDB9OworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuaXRlcgogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxPOml0ZXIiLCBrd2xpc3QsICZ0YWcpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB0YWc6IG9iamVjdCA9IE5vbmUKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlcl9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0YWcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2Y0OWY5YTg2Mjk0MWNjNSBpbnB1dD03NzRkNWIxMmU1NzNhZWRkXSovCit7CisgICAgaWYgKFB5VW5pY29kZV9DaGVjayh0YWcpKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodGFnKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHRhZykgPT0gMSAmJiBQeVVuaWNvZGVfUkVBRF9DSEFSKHRhZywgMCkgPT0gJyonKQorICAgICAgICAgICAgdGFnID0gUHlfTm9uZTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlCeXRlc19DaGVjayh0YWcpKSB7CisgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHRhZykgPT0gMSAmJiAqUHlCeXRlc19BU19TVFJJTkcodGFnKSA9PSAnKicpCisgICAgICAgICAgICB0YWcgPSBQeV9Ob25lOworICAgIH0KIAogICAgIHJldHVybiBjcmVhdGVfZWxlbWVudGl0ZXIoc2VsZiwgdGFnLCAwKTsKIH0KIAogCi1zdGF0aWMgUHlPYmplY3QqCi1lbGVtZW50X2l0ZXJ0ZXh0KEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQotewotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOml0ZXJ0ZXh0IikpCi0gICAgICAgIHJldHVybiBOVUxMOworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuaXRlcnRleHQKIAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlcnRleHRfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVmYTM0YjJmYmNiNjVkZjYgaW5wdXQ9YWY4ZjBlNDJjYjIzOWM4OV0qLworewogICAgIHJldHVybiBjcmVhdGVfZWxlbWVudGl0ZXIoc2VsZiwgUHlfTm9uZSwgMSk7CiB9CiAKQEAgLTEzNDMsMTYgKzE0MTYsMjEgQEAKICAgICByZXR1cm4gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2luZGV4XTsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9pbnNlcnQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCi17Ci0gICAgaW50IGk7CisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuRWxlbWVudC5pbnNlcnQKIAotICAgIGludCBpbmRleDsKLSAgICBQeU9iamVjdCogZWxlbWVudDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPITppbnNlcnQiLCAmaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZFbGVtZW50X1R5cGUsICZlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaW5kZXg6IFB5X3NzaXplX3QKKyAgICBzdWJlbGVtZW50OiBvYmplY3Qoc3ViY2xhc3Nfb2Y9JyZFbGVtZW50X1R5cGUnKQorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfaW5zZXJ0X2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdWJlbGVtZW50KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk5MGFkZmVmNGQ0MjRjMGIgaW5wdXQ9Y2Q2ZmJmY2RhYjUyZDdhOF0qLworeworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKICAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCkBAIC0xMzczLDMyICsxNDUxLDM4IEBACiAgICAgZm9yIChpID0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSA+IGluZGV4OyBpLS0pCiAgICAgICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpLTFdOwogCi0gICAgUHlfSU5DUkVGKGVsZW1lbnQpOwotICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpbmRleF0gPSBlbGVtZW50OworICAgIFB5X0lOQ1JFRihzdWJlbGVtZW50KTsKKyAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baW5kZXhdID0gc3ViZWxlbWVudDsKIAogICAgIHNlbGYtPmV4dHJhLT5sZW5ndGgrKzsKIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1lbGVtZW50X2l0ZW1zKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQotewotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOml0ZW1zIikpCi0gICAgICAgIHJldHVybiBOVUxMOworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQuaXRlbXMKIAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlbXNfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZkYjJjNzc4Y2UzZjVhNGQgaW5wdXQ9YWRiZTA5YWFlYTQ3NDQ0N10qLworewogICAgIGlmICghc2VsZi0+ZXh0cmEgfHwgc2VsZi0+ZXh0cmEtPmF0dHJpYiA9PSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gUHlMaXN0X05ldygwKTsKIAogICAgIHJldHVybiBQeURpY3RfSXRlbXMoc2VsZi0+ZXh0cmEtPmF0dHJpYik7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLWVsZW1lbnRfa2V5cyhFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKLXsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjprZXlzIikpCi0gICAgICAgIHJldHVybiBOVUxMOworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQua2V5cwogCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9rZXlzX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iYzViZmFiYmYyMGVlYjNjIGlucHV0PWYwMmNhZjViNDk2YjViMGJdKi8KK3sKICAgICBpZiAoIXNlbGYtPmV4dHJhIHx8IHNlbGYtPmV4dHJhLT5hdHRyaWIgPT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIFB5TGlzdF9OZXcoMCk7CiAKQEAgLTE0MTQsMTYgKzE0OTgsMjIgQEAKICAgICByZXR1cm4gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9tYWtlZWxlbWVudChQeU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5FbGVtZW50Lm1ha2VlbGVtZW50CisKKyAgICB0YWc6IG9iamVjdAorICAgIGF0dHJpYjogb2JqZWN0CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9tYWtlZWxlbWVudF9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphdHRyaWIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDEwOTgzMmQ1YmI3ODllZiBpbnB1dD05NDgwZDFkMmUzZTY4MjM1XSovCiB7CiAgICAgUHlPYmplY3QqIGVsZW07CiAKLSAgICBQeU9iamVjdCogdGFnOwotICAgIFB5T2JqZWN0KiBhdHRyaWI7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzptYWtlZWxlbWVudCIsICZ0YWcsICZhdHRyaWIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGF0dHJpYiA9IFB5RGljdF9Db3B5KGF0dHJpYik7CiAgICAgaWYgKCFhdHRyaWIpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTQzNSwxNiArMTUyNSwyMSBAQAogICAgIHJldHVybiBlbGVtOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1lbGVtZW50X3JlbW92ZShFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKLXsKLSAgICBpbnQgaTsKLSAgICBpbnQgcmM7Ci0gICAgUHlPYmplY3QqIGVsZW1lbnQ7Ci0gICAgUHlPYmplY3QqIGZvdW5kOworLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLkVsZW1lbnQucmVtb3ZlCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hOnJlbW92ZSIsICZFbGVtZW50X1R5cGUsICZlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3ViZWxlbWVudDogb2JqZWN0KHN1YmNsYXNzX29mPScmRWxlbWVudF9UeXBlJykKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X3JlbW92ZV9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdWJlbGVtZW50KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM4ZmU2YzA3ZDZkODdkMWYgaW5wdXQ9ZDUyZmMyOGVkZWRjMGJkOF0qLworeworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgcmM7CisgICAgUHlPYmplY3QgKmZvdW5kOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkgewogICAgICAgICAvKiBlbGVtZW50IGhhcyBubyBjaGlsZHJlbiwgc28gcmFpc2UgZXhjZXB0aW9uICovCkBAIC0xNDU2LDkgKzE1NTEsOSBAQAogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5leHRyYS0+bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXSA9PSBlbGVtZW50KQorICAgICAgICBpZiAoc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldID09IHN1YmVsZW1lbnQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldLCBlbGVtZW50LCBQeV9FUSk7CisgICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXSwgc3ViZWxlbWVudCwgUHlfRVEpOwogICAgICAgICBpZiAocmMgPiAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChyYyA8IDApCkBAIC0xNDY2LDcgKzE1NjEsNyBAQAogICAgIH0KIAogICAgIGlmIChpID49IHNlbGYtPmV4dHJhLT5sZW5ndGgpIHsKLSAgICAgICAgLyogZWxlbWVudCBpcyBub3QgaW4gY2hpbGRyZW4sIHNvIHJhaXNlIGV4Y2VwdGlvbiAqLworICAgICAgICAvKiBzdWJlbGVtZW50IGlzIG5vdCBpbiBjaGlsZHJlbiwgc28gcmFpc2UgZXhjZXB0aW9uICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAibGlzdC5yZW1vdmUoeCk6IHggbm90IGluIGxpc3QiCkBAIC0xNDg3LDIyICsxNTgyLDQxIEBACiBzdGF0aWMgUHlPYmplY3QqCiBlbGVtZW50X3JlcHIoRWxlbWVudE9iamVjdCogc2VsZikKIHsKLSAgICBpZiAoc2VsZi0+dGFnKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxFbGVtZW50ICVSIGF0ICVwPiIsIHNlbGYtPnRhZywgc2VsZik7Ci0gICAgZWxzZQorICAgIGludCBzdGF0dXM7CisKKyAgICBpZiAoc2VsZi0+dGFnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPEVsZW1lbnQgYXQgJXA+Iiwgc2VsZik7CisKKyAgICBzdGF0dXMgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0ICopc2VsZik7CisgICAgaWYgKHN0YXR1cyA9PSAwKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8RWxlbWVudCAlUiBhdCAlcD4iLCBzZWxmLT50YWcsIHNlbGYpOworICAgICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopc2VsZik7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGlmIChzdGF0dXMgPiAwKQorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInJlZW50cmFudCBjYWxsIGluc2lkZSAlcy5fX3JlcHJfXyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9zZXQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuRWxlbWVudC5zZXQKKworICAgIGtleTogb2JqZWN0CisgICAgdmFsdWU6IG9iamVjdAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfc2V0X2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mYjkzODgwNmJlM2M1NjU2IGlucHV0PTFlZmU5MGY3ZDgyYjNmZTldKi8KIHsKICAgICBQeU9iamVjdCogYXR0cmliOwogCi0gICAgUHlPYmplY3QqIGtleTsKLSAgICBQeU9iamVjdCogdmFsdWU7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzpzZXQiLCAma2V5LCAmdmFsdWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKICAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1MTksMTkgKzE2MzMsMTggQEAKIH0KIAogc3RhdGljIGludAotZWxlbWVudF9zZXRpdGVtKFB5T2JqZWN0KiBzZWxmXywgUHlfc3NpemVfdCBpbmRleF8sIFB5T2JqZWN0KiBpdGVtKQorZWxlbWVudF9zZXRpdGVtKFB5T2JqZWN0KiBzZWxmXywgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGl0ZW0pCiB7CiAgICAgRWxlbWVudE9iamVjdCogc2VsZiA9IChFbGVtZW50T2JqZWN0Kikgc2VsZl87Ci0gICAgaW50IGksIGluZGV4OworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCogb2xkOwogCi0gICAgaWYgKCFzZWxmLT5leHRyYSB8fCBpbmRleF8gPCAwIHx8IGluZGV4XyA+PSBzZWxmLT5leHRyYS0+bGVuZ3RoKSB7CisgICAgaWYgKCFzZWxmLT5leHRyYSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gc2VsZi0+ZXh0cmEtPmxlbmd0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgICAgICBQeUV4Y19JbmRleEVycm9yLAogICAgICAgICAgICAgImNoaWxkIGFzc2lnbm1lbnQgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaW5kZXggPSAoaW50KWluZGV4XzsKIAogICAgIG9sZCA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpbmRleF07CiAKQEAgLTE2MzIsNyArMTc0NSw2IEBACiAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmc3RvcCwgJnN0ZXAsICZzbGljZWxlbikgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KHNsaWNlbGVuIDw9IHNlbGYtPmV4dHJhLT5sZW5ndGgpOwogCiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAvKiBEZWxldGUgc2xpY2UgKi8KQEAgLTE2OTQsNyArMTgwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIChzZWxmLT5leHRyYS0+bGVuZ3RoIC0gY3VyKSAqIHNpemVvZihQeU9iamVjdCAqKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggLT0gKGludClzbGljZWxlbjsKKyAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggLT0gc2xpY2VsZW47CiAKICAgICAgICAgICAgIC8qIERpc2NhcmQgdGhlIHJlY3ljbGUgbGlzdCB3aXRoIGFsbCB0aGUgZGVsZXRlZCBzdWItZWxlbWVudHMgKi8KICAgICAgICAgICAgIFB5X1hERUNSRUYocmVjeWNsZSk7CkBAIC0xNzMwLDggKzE4NDIsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBhc3NlcnQobmV3bGVuIC0gc2xpY2VsZW4gPD0gSU5UX01BWCAtIHNlbGYtPmV4dHJhLT5sZW5ndGgpOwotICAgICAgICBhc3NlcnQobmV3bGVuIC0gc2xpY2VsZW4gPj0gLXNlbGYtPmV4dHJhLT5sZW5ndGgpOwogCiAgICAgICAgIGlmIChzbGljZWxlbiA+IDApIHsKICAgICAgICAgICAgIC8qIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byB0aGlzIG1ldGhvZCAodmlhIGRlY3JlZiksIG1vdmUKQEAgLTE3NjUsNyArMTg3NSw3IEBACiAgICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5bY3VyXSA9IGVsZW1lbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoICs9IChpbnQpKG5ld2xlbiAtIHNsaWNlbGVuKTsKKyAgICAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCArPSBuZXdsZW4gLSBzbGljZWxlbjsKIAogICAgICAgICBQeV9ERUNSRUYoc2VxKTsKIApAQCAtMTc4MSw0MyArMTg5MSw2IEBACiAgICAgfQogfQogCi1zdGF0aWMgUHlNZXRob2REZWYgZWxlbWVudF9tZXRob2RzW10gPSB7Ci0KLSAgICB7ImNsZWFyIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2NsZWFybWV0aG9kLCBNRVRIX1ZBUkFSR1N9LAotCi0gICAgeyJnZXQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfZ2V0LCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTfSwKLSAgICB7InNldCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9zZXQsIE1FVEhfVkFSQVJHU30sCi0KLSAgICB7ImZpbmQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfZmluZCwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEU30sCi0gICAgeyJmaW5kdGV4dCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9maW5kdGV4dCwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEU30sCi0gICAgeyJmaW5kYWxsIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2ZpbmRhbGwsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFN9LAotCi0gICAgeyJhcHBlbmQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfYXBwZW5kLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZXh0ZW5kIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2V4dGVuZCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Imluc2VydCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9pbnNlcnQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJyZW1vdmUiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfcmVtb3ZlLCBNRVRIX1ZBUkFSR1N9LAotCi0gICAgeyJpdGVyIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2l0ZXIsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFN9LAotICAgIHsiaXRlcnRleHQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlcnRleHQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpdGVyZmluZCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9pdGVyZmluZCwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEU30sCi0KLSAgICB7ImdldGl0ZXJhdG9yIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2l0ZXIsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFN9LAotICAgIHsiZ2V0Y2hpbGRyZW4iLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfZ2V0Y2hpbGRyZW4sIE1FVEhfVkFSQVJHU30sCi0KLSAgICB7Iml0ZW1zIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2l0ZW1zLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsia2V5cyIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9rZXlzLCBNRVRIX1ZBUkFSR1N9LAotCi0gICAgeyJtYWtlZWxlbWVudCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9tYWtlZWxlbWVudCwgTUVUSF9WQVJBUkdTfSwKLQotICAgIHsiX19jb3B5X18iLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfY29weSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Il9fZGVlcGNvcHlfXyIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9kZWVwY29weSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Il9fc2l6ZW9mX18iLCBlbGVtZW50X3NpemVvZiwgTUVUSF9OT0FSR1N9LAotICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKWVsZW1lbnRfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKLSAgICB7Il9fc2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbillbGVtZW50X3NldHN0YXRlLCBNRVRIX099LAotCi0gICAge05VTEwsIE5VTEx9Ci19OwotCiBzdGF0aWMgUHlPYmplY3QqCiBlbGVtZW50X2dldGF0dHJvKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBuYW1lb2JqKQogewpAQCAtMTg4Miw5ICsxOTU1LDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZi0+dGFnKTsKLSAgICAgICAgc2VsZi0+dGFnID0gdmFsdWU7Ci0gICAgICAgIFB5X0lOQ1JFRihzZWxmLT50YWcpOworICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICBQeV9TRVRSRUYoc2VsZi0+dGFnLCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRleHQiKSA9PSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihKT0lOX09CSihzZWxmLT50ZXh0KSk7CiAgICAgICAgIHNlbGYtPnRleHQgPSB2YWx1ZTsKQEAgLTE4OTgsOSArMTk3MCw4IEBACiAgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHNlbGYtPmV4dHJhLT5hdHRyaWIpOwotICAgICAgICBzZWxmLT5leHRyYS0+YXR0cmliID0gdmFsdWU7Ci0gICAgICAgIFB5X0lOQ1JFRihzZWxmLT5leHRyYS0+YXR0cmliKTsKKyAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgUHlfU0VUUkVGKHNlbGYtPmV4dHJhLT5hdHRyaWIsIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsCiAgICAgICAgICAgICAiQ2FuJ3Qgc2V0IGFyYml0cmFyeSBhdHRyaWJ1dGVzIG9uIEVsZW1lbnQiKTsKQEAgLTE5MjAsNTQgKzE5OTEsNiBAQAogICAgIDAsCiB9OwogCi1zdGF0aWMgUHlNYXBwaW5nTWV0aG9kcyBlbGVtZW50X2FzX21hcHBpbmcgPSB7Ci0gICAgKGxlbmZ1bmMpIGVsZW1lbnRfbGVuZ3RoLAotICAgIChiaW5hcnlmdW5jKSBlbGVtZW50X3N1YnNjciwKLSAgICAob2Jqb2JqYXJncHJvYykgZWxlbWVudF9hc3Nfc3Vic2NyLAotfTsKLQotc3RhdGljIFB5VHlwZU9iamVjdCBFbGVtZW50X1R5cGUgPSB7Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgInhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50Iiwgc2l6ZW9mKEVsZW1lbnRPYmplY3QpLCAwLAotICAgIC8qIG1ldGhvZHMgKi8KLSAgICAoZGVzdHJ1Y3RvcillbGVtZW50X2RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCi0gICAgKHJlcHJmdW5jKWVsZW1lbnRfcmVwciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwotICAgICZlbGVtZW50X2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCi0gICAgJmVsZW1lbnRfYXNfbWFwcGluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCi0gICAgKGdldGF0dHJvZnVuYyllbGVtZW50X2dldGF0dHJvLCAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KLSAgICAoc2V0YXR0cm9mdW5jKWVsZW1lbnRfc2V0YXR0cm8sICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAodHJhdmVyc2Vwcm9jKWVsZW1lbnRfZ2NfdHJhdmVyc2UsICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KWVsZW1lbnRfZ2NfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICBvZmZzZXRvZihFbGVtZW50T2JqZWN0LCB3ZWFrcmVmbGlzdCksICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIGVsZW1lbnRfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgKGluaXRwcm9jKWVsZW1lbnRfaW5pdCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwotICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgZWxlbWVudF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwotfTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRWxlbWVudCBpdGVyYXRvciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBFbGVtZW50SXRlck9iamVjdCByZXByZXNlbnRzIHRoZSBpdGVyYXRpb24gc3RhdGUgb3ZlciBhbiBYTUwgZWxlbWVudCBpbgpAQCAtMjA1OCw2ICsyMDgxLDcgQEAKICAgICBFbGVtZW50T2JqZWN0ICpjdXJfcGFyZW50OwogICAgIFB5X3NzaXplX3QgY2hpbGRfaW5kZXg7CiAgICAgaW50IHJjOworICAgIEVsZW1lbnRPYmplY3QgKmVsZW07CiAKICAgICB3aGlsZSAoMSkgewogICAgICAgICAvKiBIYW5kbGUgdGhlIGNhc2UgcmVhY2hlZCBpbiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgaXRlcmF0aW9uLCB3aGVyZQpAQCAtMjA3MSwzOCArMjA5NSw0NyBAQAogICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsZW0gPSBpdC0+cm9vdF9lbGVtZW50OwogICAgICAgICAgICAgICAgIGl0LT5wYXJlbnRfc3RhY2sgPSBwYXJlbnRfc3RhY2tfcHVzaF9uZXcoaXQtPnBhcmVudF9zdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5yb290X2VsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSk7CiAgICAgICAgICAgICAgICAgaWYgKCFpdC0+cGFyZW50X3N0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihlbGVtKTsKICAgICAgICAgICAgICAgICBpdC0+cm9vdF9kb25lID0gMTsKICAgICAgICAgICAgICAgICByYyA9IChpdC0+c291Z2h0X3RhZyA9PSBQeV9Ob25lKTsKICAgICAgICAgICAgICAgICBpZiAoIXJjKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0LT5yb290X2VsZW1lbnQtPnRhZywKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woZWxlbS0+dGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+c291Z2h0X3RhZywgUHlfRVEpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAocmMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0LT5nZXR0ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGV4dCA9IGVsZW1lbnRfZ2V0X3RleHQoaXQtPnJvb3RfZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGV4dCA9IGVsZW1lbnRfZ2V0X3RleHQoZWxlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IFB5T2JqZWN0X0lzVHJ1ZSh0ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYyA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGl0LT5yb290X2VsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0LT5yb290X2VsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopZWxlbTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVsZW0pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yMTEyLDU0ICsyMTQ1LDY4IEBACiAgICAgICAgIGN1cl9wYXJlbnQgPSBpdC0+cGFyZW50X3N0YWNrLT5wYXJlbnQ7CiAgICAgICAgIGNoaWxkX2luZGV4ID0gaXQtPnBhcmVudF9zdGFjay0+Y2hpbGRfaW5kZXg7CiAgICAgICAgIGlmIChjdXJfcGFyZW50LT5leHRyYSAmJiBjaGlsZF9pbmRleCA8IGN1cl9wYXJlbnQtPmV4dHJhLT5sZW5ndGgpIHsKLSAgICAgICAgICAgIEVsZW1lbnRPYmplY3QgKmNoaWxkID0gKEVsZW1lbnRPYmplY3QgKikKLSAgICAgICAgICAgICAgICBjdXJfcGFyZW50LT5leHRyYS0+Y2hpbGRyZW5bY2hpbGRfaW5kZXhdOworICAgICAgICAgICAgZWxlbSA9IChFbGVtZW50T2JqZWN0ICopY3VyX3BhcmVudC0+ZXh0cmEtPmNoaWxkcmVuW2NoaWxkX2luZGV4XTsKICAgICAgICAgICAgIGl0LT5wYXJlbnRfc3RhY2stPmNoaWxkX2luZGV4Kys7CiAgICAgICAgICAgICBpdC0+cGFyZW50X3N0YWNrID0gcGFyZW50X3N0YWNrX3B1c2hfbmV3KGl0LT5wYXJlbnRfc3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSk7CiAgICAgICAgICAgICBpZiAoIWl0LT5wYXJlbnRfc3RhY2spIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBQeV9JTkNSRUYoZWxlbSk7CiAgICAgICAgICAgICBpZiAoaXQtPmdldHRleHQpIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGV4dCA9IGVsZW1lbnRfZ2V0X3RleHQoY2hpbGQpOwotICAgICAgICAgICAgICAgIGlmICghdGV4dCkKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGV4dCA9IGVsZW1lbnRfZ2V0X3RleHQoZWxlbSk7CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0ZXh0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CiAgICAgICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9Jc1RydWUodGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKHJjID4gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRleHQpOwogICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmMgPSAoaXQtPnNvdWdodF90YWcgPT0gUHlfTm9uZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyYykgewotICAgICAgICAgICAgICAgICAgICByYyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjaGlsZC0+dGFnLAorICAgICAgICAgICAgICAgICAgICByYyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChlbGVtLT50YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5zb3VnaHRfdGFnLCBQeV9FUSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICAgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoY2hpbGQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopY2hpbGQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKillbGVtOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdGFpbDsKLSAgICAgICAgICAgIFBhcmVudExvY2F0b3IgKm5leHQgPSBpdC0+cGFyZW50X3N0YWNrLT5uZXh0OworICAgICAgICAgICAgUGFyZW50TG9jYXRvciAqbmV4dDsKICAgICAgICAgICAgIGlmIChpdC0+Z2V0dGV4dCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihjdXJfcGFyZW50KTsKICAgICAgICAgICAgICAgICB0YWlsID0gZWxlbWVudF9nZXRfdGFpbChjdXJfcGFyZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoIXRhaWwpCisgICAgICAgICAgICAgICAgaWYgKCF0YWlsKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjdXJfcGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0YWlsKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY3VyX3BhcmVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB0YWlsID0gUHlfTm9uZTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoaXQtPnBhcmVudF9zdGFjay0+cGFyZW50KTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGFpbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXh0ID0gaXQtPnBhcmVudF9zdGFjay0+bmV4dDsKKyAgICAgICAgICAgIGN1cl9wYXJlbnQgPSBpdC0+cGFyZW50X3N0YWNrLT5wYXJlbnQ7CiAgICAgICAgICAgICBQeU9iamVjdF9GcmVlKGl0LT5wYXJlbnRfc3RhY2spOwogICAgICAgICAgICAgaXQtPnBhcmVudF9zdGFjayA9IG5leHQ7CisgICAgICAgICAgICBQeV9YREVDUkVGKGN1cl9wYXJlbnQpOwogCiAgICAgICAgICAgICAvKiBOb3RlIHRoYXQgZXh0cmEgY29uZGl0aW9uIG9uIGl0LT5wYXJlbnRfc3RhY2stPnBhcmVudCBoZXJlOwogICAgICAgICAgICAgICogdGhpcyBpcyBiZWNhdXNlIGl0ZXJ0ZXh0KCkgaXMgc3VwcG9zZWQgdG8gb25seSByZXR1cm4gKmlubmVyKgpAQCAtMjE2NywxMiArMjIxNCwxNCBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoaXQtPnBhcmVudF9zdGFjay0+cGFyZW50KSB7CiAgICAgICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9Jc1RydWUodGFpbCk7CisgICAgICAgICAgICAgICAgaWYgKHJjID4gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhaWw7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRhaWwpOwogICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGFpbCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWlsOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0YWlsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIyMzUsMTcgKzIyODQsNiBAQAogICAgIGlmICghaXQpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayh0YWcpKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodGFnKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHRhZykgPT0gMSAmJiBQeVVuaWNvZGVfUkVBRF9DSEFSKHRhZywgMCkgPT0gJyonKQotICAgICAgICAgICAgdGFnID0gUHlfTm9uZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlCeXRlc19DaGVjayh0YWcpKSB7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHRhZykgPT0gMSAmJiAqUHlCeXRlc19BU19TVFJJTkcodGFnKSA9PSAnKicpCi0gICAgICAgICAgICB0YWcgPSBQeV9Ob25lOwotICAgIH0KLQogICAgIFB5X0lOQ1JFRih0YWcpOwogICAgIGl0LT5zb3VnaHRfdGFnID0gdGFnOwogICAgIGl0LT5yb290X2RvbmUgPSAwOwpAQCAtMjMzMCwyMyArMjM2OCwyNCBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKil0OwogfQogCi1zdGF0aWMgaW50Ci10cmVlYnVpbGRlcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCi17Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJlbGVtZW50X2ZhY3RvcnkiLCAwfTsKLSAgICBQeU9iamVjdCAqZWxlbWVudF9mYWN0b3J5ID0gTlVMTDsKLSAgICBUcmVlQnVpbGRlck9iamVjdCAqc2VsZl90YiA9IChUcmVlQnVpbGRlck9iamVjdCAqKXNlbGY7Ci0gICAgUHlPYmplY3QgKnRtcDsKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5UcmVlQnVpbGRlci5fX2luaXRfXwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxPOlRyZWVCdWlsZGVyIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbGVtZW50X2ZhY3RvcnkpKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICAgZWxlbWVudF9mYWN0b3J5OiBvYmplY3QgPSBOVUxMCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX19faW5pdF9fX2ltcGwoVHJlZUJ1aWxkZXJPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZWxlbWVudF9mYWN0b3J5KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTkxY2ZhNzU1ODk3MGVlOTYgaW5wdXQ9MWI0MjRlZWVmYzM1MjQ5Y10qLworeworICAgIFB5T2JqZWN0ICp0bXA7CiAKICAgICBpZiAoZWxlbWVudF9mYWN0b3J5KSB7CiAgICAgICAgIFB5X0lOQ1JFRihlbGVtZW50X2ZhY3RvcnkpOwotICAgICAgICB0bXAgPSBzZWxmX3RiLT5lbGVtZW50X2ZhY3Rvcnk7Ci0gICAgICAgIHNlbGZfdGItPmVsZW1lbnRfZmFjdG9yeSA9IGVsZW1lbnRfZmFjdG9yeTsKKyAgICAgICAgdG1wID0gc2VsZi0+ZWxlbWVudF9mYWN0b3J5OworICAgICAgICBzZWxmLT5lbGVtZW50X2ZhY3RvcnkgPSBlbGVtZW50X2ZhY3Rvcnk7CiAgICAgICAgIFB5X1hERUNSRUYodG1wKTsKICAgICB9CiAKQEAgLTI1MjQsMTMgKzI1NjMsMTAgQEAKICAgICB9CiAgICAgc2VsZi0+aW5kZXgrKzsKIAotICAgIFB5X0RFQ1JFRih0aGlzKTsKICAgICBQeV9JTkNSRUYobm9kZSk7Ci0gICAgc2VsZi0+dGhpcyA9IG5vZGU7Ci0KLSAgICBQeV9ERUNSRUYoc2VsZi0+bGFzdCk7CisgICAgUHlfU0VUUkVGKHNlbGYtPnRoaXMsIG5vZGUpOwogICAgIFB5X0lOQ1JFRihub2RlKTsKLSAgICBzZWxmLT5sYXN0ID0gbm9kZTsKKyAgICBQeV9TRVRSRUYoc2VsZi0+bGFzdCwgbm9kZSk7CiAKICAgICBpZiAodHJlZWJ1aWxkZXJfYXBwZW5kX2V2ZW50KHNlbGYsIHNlbGYtPnN0YXJ0X2V2ZW50X29iaiwgbm9kZSkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjYwMywxNSArMjYzOSwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzZWxmLT5pbmRleC0tOwotCi0gICAgaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5zdGFjaywgc2VsZi0+aW5kZXgpOwotICAgIFB5X0lOQ1JFRihpdGVtKTsKLQotICAgIFB5X0RFQ1JFRihzZWxmLT5sYXN0KTsKLQorICAgIGl0ZW0gPSBzZWxmLT5sYXN0OwogICAgIHNlbGYtPmxhc3QgPSBzZWxmLT50aGlzOwotICAgIHNlbGYtPnRoaXMgPSBpdGVtOworICAgIHNlbGYtPmluZGV4LS07CisgICAgc2VsZi0+dGhpcyA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5zdGFjaywgc2VsZi0+aW5kZXgpOworICAgIFB5X0lOQ1JFRihzZWxmLT50aGlzKTsKKyAgICBQeV9ERUNSRUYoaXRlbSk7CiAKICAgICBpZiAodHJlZWJ1aWxkZXJfYXBwZW5kX2V2ZW50KHNlbGYsIHNlbGYtPmVuZF9ldmVudF9vYmosIHNlbGYtPmxhc3QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNjIzLDIzICsyNjU2LDMzIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogbWV0aG9kcyAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKSAqLwogCi1zdGF0aWMgUHlPYmplY3QqCi10cmVlYnVpbGRlcl9kYXRhKFRyZWVCdWlsZGVyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKLXsKLSAgICBQeU9iamVjdCogZGF0YTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZGF0YSIsICZkYXRhKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuVHJlZUJ1aWxkZXIuZGF0YQogCisgICAgZGF0YTogb2JqZWN0CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfZGF0YShUcmVlQnVpbGRlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjkxNDRjNzEwMDc5NWJiMiBpbnB1dD1hMDU0MGM1MzJiMjg0ZDI5XSovCit7CiAgICAgcmV0dXJuIHRyZWVidWlsZGVyX2hhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi10cmVlYnVpbGRlcl9lbmQoVHJlZUJ1aWxkZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQotewotICAgIFB5T2JqZWN0KiB0YWc7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmVuZCIsICZ0YWcpKQotICAgICAgICByZXR1cm4gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5UcmVlQnVpbGRlci5lbmQKIAorICAgIHRhZzogb2JqZWN0CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfZW5kKFRyZWVCdWlsZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdGFnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTlhOTg3MjdjYzY5MWNkOWQgaW5wdXQ9MjJkYzM2NzQyMzZmNTc0NV0qLworewogICAgIHJldHVybiB0cmVlYnVpbGRlcl9oYW5kbGVfZW5kKHNlbGYsIHRhZyk7CiB9CiAKQEAgLTI2NTksNzYgKzI3MDIsMzUgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi10cmVlYnVpbGRlcl9jbG9zZShUcmVlQnVpbGRlck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCi17Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6Y2xvc2UiKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuVHJlZUJ1aWxkZXIuY2xvc2UKIAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX2Nsb3NlX2ltcGwoVHJlZUJ1aWxkZXJPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjQ0MWZlZTMyMDJmNjFlZSBpbnB1dD1mN2M5YzY1ZGM3MThkZTE0XSovCit7CiAgICAgcmV0dXJuIHRyZWVidWlsZGVyX2RvbmUoc2VsZik7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLXRyZWVidWlsZGVyX3N0YXJ0KFRyZWVCdWlsZGVyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5UcmVlQnVpbGRlci5zdGFydAorCisgICAgdGFnOiBvYmplY3QKKyAgICBhdHRyczogb2JqZWN0ID0gTm9uZQorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX3N0YXJ0X2ltcGwoVHJlZUJ1aWxkZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXR0cnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTdlOWRjMjg2MTM0OTQxMSBpbnB1dD05NWZjMTc1OGRkMDQyYzY1XSovCiB7Ci0gICAgUHlPYmplY3QqIHRhZzsKLSAgICBQeU9iamVjdCogYXR0cmliID0gUHlfTm9uZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TzpzdGFydCIsICZ0YWcsICZhdHRyaWIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiB0cmVlYnVpbGRlcl9oYW5kbGVfc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWIpOworICAgIHJldHVybiB0cmVlYnVpbGRlcl9oYW5kbGVfc3RhcnQoc2VsZiwgdGFnLCBhdHRycyk7CiB9CiAKLXN0YXRpYyBQeU1ldGhvZERlZiB0cmVlYnVpbGRlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJkYXRhIiwgKFB5Q0Z1bmN0aW9uKSB0cmVlYnVpbGRlcl9kYXRhLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsic3RhcnQiLCAoUHlDRnVuY3Rpb24pIHRyZWVidWlsZGVyX3N0YXJ0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZW5kIiwgKFB5Q0Z1bmN0aW9uKSB0cmVlYnVpbGRlcl9lbmQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbikgdHJlZWJ1aWxkZXJfY2xvc2UsIE1FVEhfVkFSQVJHU30sCi0gICAge05VTEwsIE5VTEx9Ci19OwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFRyZWVCdWlsZGVyX1R5cGUgPSB7Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgInhtbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlciIsIHNpemVvZihUcmVlQnVpbGRlck9iamVjdCksIDAsCi0gICAgLyogbWV0aG9kcyAqLwotICAgIChkZXN0cnVjdG9yKXRyZWVidWlsZGVyX2RlYWxsb2MsICAgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgICh0cmF2ZXJzZXByb2MpdHJlZWJ1aWxkZXJfZ2NfdHJhdmVyc2UsICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpdHJlZWJ1aWxkZXJfZ2NfY2xlYXIsICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgdHJlZWJ1aWxkZXJfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICAoaW5pdHByb2MpdHJlZWJ1aWxkZXJfaW5pdCwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCi0gICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KLSAgICB0cmVlYnVpbGRlcl9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCi19OwotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogdGhlIGV4cGF0IGludGVyZmFjZSAqLwogCkBAIC0yNzY2LDcgKzI3NjgsMTEgQEAKIAogfSBYTUxQYXJzZXJPYmplY3Q7CiAKLXN0YXRpYyBQeU9iamVjdCogeG1scGFyc2VyX2RvY3R5cGUoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncyk7CitzdGF0aWMgUHlPYmplY3QqCitfZWxlbWVudHRyZWVfWE1MUGFyc2VyX2RvY3R5cGUoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncyk7CitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9kb2N0eXBlX2ltcGwoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwdWJpZCwgUHlPYmplY3QgKnN5c3RlbSk7CiAKIC8qIGhlbHBlcnMgKi8KIApAQCAtMjg0NCwxMiArMjg1MCwxMyBAQAogICogbWVzc2FnZSBzdHJpbmcgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZSBnaXZlbiBlcnJvcl9jb2RlLgogKi8KIHN0YXRpYyB2b2lkCi1leHBhdF9zZXRfZXJyb3IoZW51bSBYTUxfRXJyb3IgZXJyb3JfY29kZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIGNoYXIgKm1lc3NhZ2UpCitleHBhdF9zZXRfZXJyb3IoZW51bSBYTUxfRXJyb3IgZXJyb3JfY29kZSwgUHlfc3NpemVfdCBsaW5lLCBQeV9zc2l6ZV90IGNvbHVtbiwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlKQogewogICAgIFB5T2JqZWN0ICplcnJtc2csICplcnJvciwgKnBvc2l0aW9uLCAqY29kZTsKICAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAotICAgIGVycm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlczogbGluZSAlZCwgY29sdW1uICVkIiwKKyAgICBlcnJtc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXM6IGxpbmUgJXpkLCBjb2x1bW4gJXpkIiwKICAgICAgICAgICAgICAgICBtZXNzYWdlID8gbWVzc2FnZSA6IEVYUEFUKEVycm9yU3RyaW5nKShlcnJvcl9jb2RlKSwKICAgICAgICAgICAgICAgICBsaW5lLCBjb2x1bW4pOwogICAgIGlmIChlcnJtc2cgPT0gTlVMTCkKQEAgLTI4NzMsNyArMjg4MCw3IEBACiAgICAgfQogICAgIFB5X0RFQ1JFRihjb2RlKTsKIAotICAgIHBvc2l0aW9uID0gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGxpbmUsIGNvbHVtbik7CisgICAgcG9zaXRpb24gPSBQeV9CdWlsZFZhbHVlKCIobm4pIiwgbGluZSwgY29sdW1uKTsKICAgICBpZiAoIXBvc2l0aW9uKSB7CiAgICAgICAgIFB5X0RFQ1JFRihlcnJvcik7CiAgICAgICAgIHJldHVybjsKQEAgLTI5NTcsOCArMjk2NCwxMCBAQAogICAgIC8qIGF0dHJpYnV0ZXMgKi8KICAgICBpZiAoYXR0cmliX2luWzBdKSB7CiAgICAgICAgIGF0dHJpYiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgaWYgKCFhdHRyaWIpCisgICAgICAgIGlmICghYXR0cmliKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodGFnKTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICB3aGlsZSAoYXR0cmliX2luWzBdICYmIGF0dHJpYl9pblsxXSkgewogICAgICAgICAgICAgUHlPYmplY3QqIGtleSA9IG1ha2V1bml2ZXJzYWwoc2VsZiwgYXR0cmliX2luWzBdKTsKICAgICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGF0dHJpYl9pblsxXSwgc3RybGVuKGF0dHJpYl9pblsxXSksICJzdHJpY3QiKTsKQEAgLTI5NjYsNiArMjk3NSw3IEBACiAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihrZXkpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyaWIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0YWcpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9rID0gUHlEaWN0X1NldEl0ZW0oYXR0cmliLCBrZXksIHZhbHVlKTsKQEAgLTI5NzMsNiArMjk4Myw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIGlmIChvayA8IDApIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXR0cmliKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodGFnKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdHRyaWJfaW4gKz0gMjsKQEAgLTI5ODAsOCArMjk5MSwxMCBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFBhc3MgYW4gZW1wdHkgZGljdGlvbmFyeSBvbiAqLwogICAgICAgICBhdHRyaWIgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmICghYXR0cmliKQorICAgICAgICBpZiAoIWF0dHJpYikgeworICAgICAgICAgICAgUHlfREVDUkVGKHRhZyk7CiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CkBAIC0zMTY5LDggKzMxODIsOSBAQAogICAgICAgICAgICAgIShQeUNGdW5jdGlvbl9DaGVjayhwYXJzZXJfZG9jdHlwZSkgJiYKICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR0VUX1NFTEYocGFyc2VyX2RvY3R5cGUpID09IHNlbGZfcHlvYmogJiYKICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKHBhcnNlcl9kb2N0eXBlKSA9PQotICAgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9kb2N0eXBlKSkgewotICAgICAgICAgICAgcmVzID0geG1scGFyc2VyX2RvY3R5cGUoc2VsZiwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbikgX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9kb2N0eXBlKSkgeworICAgICAgICAgICAgcmVzID0gX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9kb2N0eXBlX2ltcGwoc2VsZiwgZG9jdHlwZV9uYW1lX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmlkX29iaiwgc3lzaWRfb2JqKTsKICAgICAgICAgICAgIGlmICghcmVzKQogICAgICAgICAgICAgICAgIGdvdG8gY2xlYXI7CiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTMyMjksMzMgKzMyNDMsMzQgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLlhNTFBhcnNlci5fX2luaXRfXworCisgICAgaHRtbDogb2JqZWN0ID0gTlVMTAorICAgIHRhcmdldDogb2JqZWN0ID0gTlVMTAorICAgIGVuY29kaW5nOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIGludAoteG1scGFyc2VyX2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19lbGVtZW50dHJlZV9YTUxQYXJzZXJfX19pbml0X19faW1wbChYTUxQYXJzZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpodG1sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0YXJnZXQsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ2YTE2YzYzZGRhNTQ0NDEgaW5wdXQ9MTU1YmM1Njk1YmFhZmZmZF0qLwogewotICAgIFhNTFBhcnNlck9iamVjdCAqc2VsZl94cCA9IChYTUxQYXJzZXJPYmplY3QgKilzZWxmOwotICAgIFB5T2JqZWN0ICp0YXJnZXQgPSBOVUxMLCAqaHRtbCA9IE5VTEw7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaHRtbCIsICJ0YXJnZXQiLCAiZW5jb2RpbmciLCAwfTsKKyAgICBzZWxmLT5lbnRpdHkgPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKCFzZWxmLT5lbnRpdHkpCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8T096OlhNTFBhcnNlciIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHRtbCwgJnRhcmdldCwgJmVuY29kaW5nKSkgeworICAgIHNlbGYtPm5hbWVzID0gUHlEaWN0X05ldygpOworICAgIGlmICghc2VsZi0+bmFtZXMpIHsKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+ZW50aXR5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHNlbGZfeHAtPmVudGl0eSA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoIXNlbGZfeHAtPmVudGl0eSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgc2VsZl94cC0+bmFtZXMgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCFzZWxmX3hwLT5uYW1lcykgewotICAgICAgICBQeV9DTEVBUihzZWxmX3hwLT5lbnRpdHkpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgc2VsZl94cC0+cGFyc2VyID0gRVhQQVQoUGFyc2VyQ3JlYXRlX01NKShlbmNvZGluZywgJkV4cGF0TWVtb3J5SGFuZGxlciwgIn0iKTsKLSAgICBpZiAoIXNlbGZfeHAtPnBhcnNlcikgewotICAgICAgICBQeV9DTEVBUihzZWxmX3hwLT5lbnRpdHkpOwotICAgICAgICBQeV9DTEVBUihzZWxmX3hwLT5uYW1lcyk7CisgICAgc2VsZi0+cGFyc2VyID0gRVhQQVQoUGFyc2VyQ3JlYXRlX01NKShlbmNvZGluZywgJkV4cGF0TWVtb3J5SGFuZGxlciwgIn0iKTsKKyAgICBpZiAoIXNlbGYtPnBhcnNlcikgeworICAgICAgICBQeV9DTEVBUihzZWxmLT5lbnRpdHkpOworICAgICAgICBQeV9DTEVBUihzZWxmLT5uYW1lcyk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0zMjY1LDU1ICszMjgwLDU1IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgdGFyZ2V0ID0gdHJlZWJ1aWxkZXJfbmV3KCZUcmVlQnVpbGRlcl9UeXBlLCBOVUxMLCBOVUxMKTsKICAgICAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHNlbGZfeHAtPmVudGl0eSk7Ci0gICAgICAgICAgICBQeV9DTEVBUihzZWxmX3hwLT5uYW1lcyk7Ci0gICAgICAgICAgICBFWFBBVChQYXJzZXJGcmVlKShzZWxmX3hwLT5wYXJzZXIpOworICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+ZW50aXR5KTsKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPm5hbWVzKTsKKyAgICAgICAgICAgIEVYUEFUKFBhcnNlckZyZWUpKHNlbGYtPnBhcnNlcik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgc2VsZl94cC0+dGFyZ2V0ID0gdGFyZ2V0OworICAgIHNlbGYtPnRhcmdldCA9IHRhcmdldDsKIAotICAgIHNlbGZfeHAtPmhhbmRsZV9zdGFydCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAic3RhcnQiKTsKLSAgICBzZWxmX3hwLT5oYW5kbGVfZGF0YSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiZGF0YSIpOwotICAgIHNlbGZfeHAtPmhhbmRsZV9lbmQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRhcmdldCwgImVuZCIpOwotICAgIHNlbGZfeHAtPmhhbmRsZV9jb21tZW50ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0YXJnZXQsICJjb21tZW50Iik7Ci0gICAgc2VsZl94cC0+aGFuZGxlX3BpID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0YXJnZXQsICJwaSIpOwotICAgIHNlbGZfeHAtPmhhbmRsZV9jbG9zZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiY2xvc2UiKTsKLSAgICBzZWxmX3hwLT5oYW5kbGVfZG9jdHlwZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiZG9jdHlwZSIpOworICAgIHNlbGYtPmhhbmRsZV9zdGFydCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAic3RhcnQiKTsKKyAgICBzZWxmLT5oYW5kbGVfZGF0YSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiZGF0YSIpOworICAgIHNlbGYtPmhhbmRsZV9lbmQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRhcmdldCwgImVuZCIpOworICAgIHNlbGYtPmhhbmRsZV9jb21tZW50ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0YXJnZXQsICJjb21tZW50Iik7CisgICAgc2VsZi0+aGFuZGxlX3BpID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0YXJnZXQsICJwaSIpOworICAgIHNlbGYtPmhhbmRsZV9jbG9zZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiY2xvc2UiKTsKKyAgICBzZWxmLT5oYW5kbGVfZG9jdHlwZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiZG9jdHlwZSIpOwogCiAgICAgUHlFcnJfQ2xlYXIoKTsKIAogICAgIC8qIGNvbmZpZ3VyZSBwYXJzZXIgKi8KLSAgICBFWFBBVChTZXRVc2VyRGF0YSkoc2VsZl94cC0+cGFyc2VyLCBzZWxmX3hwKTsKKyAgICBFWFBBVChTZXRVc2VyRGF0YSkoc2VsZi0+cGFyc2VyLCBzZWxmKTsKICAgICBFWFBBVChTZXRFbGVtZW50SGFuZGxlcikoCi0gICAgICAgIHNlbGZfeHAtPnBhcnNlciwKKyAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICAoWE1MX1N0YXJ0RWxlbWVudEhhbmRsZXIpIGV4cGF0X3N0YXJ0X2hhbmRsZXIsCiAgICAgICAgIChYTUxfRW5kRWxlbWVudEhhbmRsZXIpIGV4cGF0X2VuZF9oYW5kbGVyCiAgICAgICAgICk7CiAgICAgRVhQQVQoU2V0RGVmYXVsdEhhbmRsZXJFeHBhbmQpKAotICAgICAgICBzZWxmX3hwLT5wYXJzZXIsCisgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgKFhNTF9EZWZhdWx0SGFuZGxlcikgZXhwYXRfZGVmYXVsdF9oYW5kbGVyCiAgICAgICAgICk7CiAgICAgRVhQQVQoU2V0Q2hhcmFjdGVyRGF0YUhhbmRsZXIpKAotICAgICAgICBzZWxmX3hwLT5wYXJzZXIsCisgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgKFhNTF9DaGFyYWN0ZXJEYXRhSGFuZGxlcikgZXhwYXRfZGF0YV9oYW5kbGVyCiAgICAgICAgICk7Ci0gICAgaWYgKHNlbGZfeHAtPmhhbmRsZV9jb21tZW50KQorICAgIGlmIChzZWxmLT5oYW5kbGVfY29tbWVudCkKICAgICAgICAgRVhQQVQoU2V0Q29tbWVudEhhbmRsZXIpKAotICAgICAgICAgICAgc2VsZl94cC0+cGFyc2VyLAorICAgICAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICAgICAgKFhNTF9Db21tZW50SGFuZGxlcikgZXhwYXRfY29tbWVudF9oYW5kbGVyCiAgICAgICAgICAgICApOwotICAgIGlmIChzZWxmX3hwLT5oYW5kbGVfcGkpCisgICAgaWYgKHNlbGYtPmhhbmRsZV9waSkKICAgICAgICAgRVhQQVQoU2V0UHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcikoCi0gICAgICAgICAgICBzZWxmX3hwLT5wYXJzZXIsCisgICAgICAgICAgICBzZWxmLT5wYXJzZXIsCiAgICAgICAgICAgICAoWE1MX1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIpIGV4cGF0X3BpX2hhbmRsZXIKICAgICAgICAgICAgICk7CiAgICAgRVhQQVQoU2V0U3RhcnREb2N0eXBlRGVjbEhhbmRsZXIpKAotICAgICAgICBzZWxmX3hwLT5wYXJzZXIsCisgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgKFhNTF9TdGFydERvY3R5cGVEZWNsSGFuZGxlcikgZXhwYXRfc3RhcnRfZG9jdHlwZV9oYW5kbGVyCiAgICAgICAgICk7CiAgICAgRVhQQVQoU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcikoCi0gICAgICAgIHNlbGZfeHAtPnBhcnNlciwKKyAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICBFWFBBVChEZWZhdWx0VW5rbm93bkVuY29kaW5nSGFuZGxlciksIE5VTEwKICAgICAgICAgKTsKIApAQCAtMzM4OSwxNSArMzQwNCwxOCBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi14bWxwYXJzZXJfY2xvc2UoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5YTUxQYXJzZXIuY2xvc2UKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9jbG9zZV9pbXBsKFhNTFBhcnNlck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNjhkMzc1ZGQyM2JjN2ZiIGlucHV0PWNhNzkwOWNhNzhjM2FiZmVdKi8KIHsKICAgICAvKiBlbmQgZmVlZGluZyBkYXRhIHRvIHBhcnNlciAqLwogCiAgICAgUHlPYmplY3QqIHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpjbG9zZSIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHJlcyA9IGV4cGF0X3BhcnNlKHNlbGYsICIiLCAwLCAxKTsKICAgICBpZiAoIXJlcykKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNDE1LDE1ICszNDMzLDI0IEBACiAgICAgfQogfQogCi1zdGF0aWMgUHlPYmplY3QqCi14bWxwYXJzZXJfZmVlZChYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmcpCisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuWE1MUGFyc2VyLmZlZWQKKworICAgIGRhdGE6IG9iamVjdAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9mZWVkKFhNTFBhcnNlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTQyYjZhNzhlZWM3NDQ2ZCBpbnB1dD1mZTIzMWI2YjhkZTNjZTFmXSovCiB7CiAgICAgLyogZmVlZCBkYXRhIHRvIHBhcnNlciAqLwogCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhhcmcpKSB7CisgICAgaWYgKFB5VW5pY29kZV9DaGVjayhkYXRhKSkgewogICAgICAgICBQeV9zc2l6ZV90IGRhdGFfbGVuOwotICAgICAgICBjb25zdCBjaGFyICpkYXRhID0gUHlVbmljb2RlX0FzVVRGOEFuZFNpemUoYXJnLCAmZGF0YV9sZW4pOwotICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICBjb25zdCBjaGFyICpkYXRhX3B0ciA9IFB5VW5pY29kZV9Bc1VURjhBbmRTaXplKGRhdGEsICZkYXRhX2xlbik7CisgICAgICAgIGlmIChkYXRhX3B0ciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmIChkYXRhX2xlbiA+IElOVF9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAic2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gaW50Iik7CkBAIC0zNDMxLDEyICszNDU4LDEyIEBACiAgICAgICAgIH0KICAgICAgICAgLyogRXhwbGljaXRseSBzZXQgVVRGLTggZW5jb2RpbmcuIFJldHVybiBjb2RlIGlnbm9yZWQuICovCiAgICAgICAgICh2b2lkKUVYUEFUKFNldEVuY29kaW5nKShzZWxmLT5wYXJzZXIsICJ1dGYtOCIpOwotICAgICAgICByZXR1cm4gZXhwYXRfcGFyc2Uoc2VsZiwgZGF0YSwgKGludClkYXRhX2xlbiwgMCk7CisgICAgICAgIHJldHVybiBleHBhdF9wYXJzZShzZWxmLCBkYXRhX3B0ciwgKGludClkYXRhX2xlbiwgMCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9idWZmZXIgdmlldzsKICAgICAgICAgUHlPYmplY3QgKnJlczsKLSAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsICZ2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihkYXRhLCAmdmlldywgUHlCVUZfU0lNUExFKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKHZpZXcubGVuID4gSU5UX01BWCkgewogICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CkBAIC0zNDQ5LDggKzM0NzYsMTcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLXhtbHBhcnNlcl9wYXJzZV93aG9sZShYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorLypbY2xpbmljIGlucHV0XQorX2VsZW1lbnR0cmVlLlhNTFBhcnNlci5fcGFyc2Vfd2hvbGUKKworICAgIGZpbGU6IG9iamVjdAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9fcGFyc2Vfd2hvbGUoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mNzk3MTk3YmI4MThkZGEzIGlucHV0PTE5ZWNjODkzYjZmM2U3NTJdKi8KIHsKICAgICAvKiAoaW50ZXJuYWwpIHBhcnNlIHRoZSB3aG9sZSBpbnB1dCwgdW50aWwgZW5kIG9mIHN0cmVhbSAqLwogICAgIFB5T2JqZWN0KiByZWFkZXI7CkBAIC0zNDU4LDExICszNDk0LDcgQEAKICAgICBQeU9iamVjdCogdGVtcDsKICAgICBQeU9iamVjdCogcmVzOwogCi0gICAgUHlPYmplY3QqIGZpbGVvYmo7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOl9wYXJzZSIsICZmaWxlb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZWFkZXIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGZpbGVvYmosICJyZWFkIik7CisgICAgcmVhZGVyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhmaWxlLCAicmVhZCIpOwogICAgIGlmICghcmVhZGVyKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzUyOSw4ICszNTYxLDIwIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgoteG1scGFyc2VyX2RvY3R5cGUoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK19lbGVtZW50dHJlZS5YTUxQYXJzZXIuZG9jdHlwZQorCisgICAgbmFtZTogb2JqZWN0CisgICAgcHViaWQ6IG9iamVjdAorICAgIHN5c3RlbTogb2JqZWN0CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfWE1MUGFyc2VyX2RvY3R5cGVfaW1wbChYTUxQYXJzZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnB1YmlkLCBQeU9iamVjdCAqc3lzdGVtKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTEwZmI1MGMyYWZkZWQ4OGQgaW5wdXQ9ODQwNTAyNzZjY2EwNDVlMV0qLwogewogICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAogICAgICAgICAgICAgICAgICAgICAgIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIgpAQCAtMzU0MSwxOSArMzU4NSwyNSBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi14bWxwYXJzZXJfc2V0ZXZlbnRzKFhNTFBhcnNlck9iamVjdCAqc2VsZiwgUHlPYmplY3QqIGFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitfZWxlbWVudHRyZWUuWE1MUGFyc2VyLl9zZXRldmVudHMKKworICAgIGV2ZW50c19xdWV1ZTogb2JqZWN0KHN1YmNsYXNzX29mPScmUHlMaXN0X1R5cGUnKQorICAgIGV2ZW50c190b19yZXBvcnQ6IG9iamVjdCA9IE5vbmUKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9YTUxQYXJzZXJfX3NldGV2ZW50c19pbXBsKFhNTFBhcnNlck9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpldmVudHNfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXZlbnRzX3RvX3JlcG9ydCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xNDQwMDkyOTIyYjEzZWQxIGlucHV0PTU5ZGI5NzQyOTEwYzYxNzRdKi8KIHsKICAgICAvKiBhY3RpdmF0ZSBlbGVtZW50IGV2ZW50IHJlcG9ydGluZyAqLwotICAgIFB5X3NzaXplX3QgaSwgc2VxbGVuOworICAgIFB5X3NzaXplX3QgaTsKICAgICBUcmVlQnVpbGRlck9iamVjdCAqdGFyZ2V0OwotCi0gICAgUHlPYmplY3QgKmV2ZW50c19xdWV1ZTsKLSAgICBQeU9iamVjdCAqZXZlbnRzX3RvX3JlcG9ydCA9IFB5X05vbmU7CiAgICAgUHlPYmplY3QgKmV2ZW50c19zZXE7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOl9zZXRldmVudHMiLCAgJlB5TGlzdF9UeXBlLCAmZXZlbnRzX3F1ZXVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnRzX3RvX3JlcG9ydCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKApAQCAtMzU2Nyw4ICszNjE3LDcgQEAKICAgICB0YXJnZXQgPSAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQ7CiAKICAgICBQeV9JTkNSRUYoZXZlbnRzX3F1ZXVlKTsKLSAgICBQeV9YREVDUkVGKHRhcmdldC0+ZXZlbnRzKTsKLSAgICB0YXJnZXQtPmV2ZW50cyA9IGV2ZW50c19xdWV1ZTsKKyAgICBQeV9YU0VUUkVGKHRhcmdldC0+ZXZlbnRzLCBldmVudHNfcXVldWUpOwogCiAgICAgLyogY2xlYXIgb3V0IGV4aXN0aW5nIGV2ZW50cyAqLwogICAgIFB5X0NMRUFSKHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqKTsKQEAgLTM1ODcsNDYgKzM2MzYsNDEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9TaXplKGV2ZW50c19zZXEpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgIGZvciAoaSA9IDA7IGkgPCBQeVNlcXVlbmNlX1NpemUoZXZlbnRzX3NlcSk7ICsraSkgewogICAgICAgICBQeU9iamVjdCAqZXZlbnRfbmFtZV9vYmogPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oZXZlbnRzX3NlcSwgaSk7CiAgICAgICAgIGNoYXIgKmV2ZW50X25hbWUgPSBOVUxMOwogICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGV2ZW50X25hbWVfb2JqKSkgewotICAgICAgICAgICAgZXZlbnRfbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZXZlbnRfbmFtZV9vYmopOworICAgICAgICAgICAgZXZlbnRfbmFtZSA9IFB5VW5pY29kZV9Bc1VURjgoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICB9IGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2soZXZlbnRfbmFtZV9vYmopKSB7CiAgICAgICAgICAgICBldmVudF9uYW1lID0gUHlCeXRlc19BU19TVFJJTkcoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICB9Ci0KICAgICAgICAgaWYgKGV2ZW50X25hbWUgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOwogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGV2ZW50cyBzZXF1ZW5jZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJzdGFydCIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOworICAgICAgICB9CisKKyAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKKyAgICAgICAgaWYgKHN0cmNtcChldmVudF9uYW1lLCAic3RhcnQiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9YU0VUUkVGKHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqLCBldmVudF9uYW1lX29iaik7CiAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJlbmQiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwotICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmVuZF9ldmVudF9vYmopOwotICAgICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CisgICAgICAgICAgICBQeV9YU0VUUkVGKHRhcmdldC0+ZW5kX2V2ZW50X29iaiwgZXZlbnRfbmFtZV9vYmopOwogICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAic3RhcnQtbnMiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwotICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOworICAgICAgICAgICAgUHlfWFNFVFJFRih0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaiwgZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgRVhQQVQoU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIpKAogICAgICAgICAgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgICAgICAgICAoWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X3N0YXJ0X25zX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfZW5kX25zX2hhbmRsZXIKICAgICAgICAgICAgICAgICApOwogICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAiZW5kLW5zIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOworICAgICAgICAgICAgUHlfWFNFVFJFRih0YXJnZXQtPmVuZF9uc19ldmVudF9vYmosIGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgICAgIEVYUEFUKFNldE5hbWVzcGFjZURlY2xIYW5kbGVyKSgKICAgICAgICAgICAgICAgICBzZWxmLT5wYXJzZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9zdGFydF9uc19oYW5kbGVyLAogICAgICAgICAgICAgICAgIChYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X2VuZF9uc19oYW5kbGVyCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gZXZlbnQgJyVzJyIsIGV2ZW50X25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNjM3LDE1ICszNjgxLDYgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotc3RhdGljIFB5TWV0aG9kRGVmIHhtbHBhcnNlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJmZWVkIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfZmVlZCwgTUVUSF9PfSwKLSAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfY2xvc2UsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJfcGFyc2Vfd2hvbGUiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9wYXJzZV93aG9sZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Il9zZXRldmVudHMiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9zZXRldmVudHMsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJkb2N0eXBlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfZG9jdHlwZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7TlVMTCwgTlVMTH0KLX07Ci0KIHN0YXRpYyBQeU9iamVjdCoKIHhtbHBhcnNlcl9nZXRhdHRybyhYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBuYW1lb2JqKQogewpAQCAtMzY3MCw2ICszNzA1LDE1MiBAQAogICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cigoUHlPYmplY3QqKSBzZWxmLCBuYW1lb2JqKTsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy9fZWxlbWVudHRyZWUuYy5oIgorCitzdGF0aWMgUHlNZXRob2REZWYgZWxlbWVudF9tZXRob2RzW10gPSB7CisKKyAgICBfRUxFTUVOVFRSRUVfRUxFTUVOVF9DTEVBUl9NRVRIT0RERUYKKworICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0dFVF9NRVRIT0RERUYKKyAgICBfRUxFTUVOVFRSRUVfRUxFTUVOVF9TRVRfTUVUSE9EREVGCisKKyAgICBfRUxFTUVOVFRSRUVfRUxFTUVOVF9GSU5EX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0ZJTkRURVhUX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0ZJTkRBTExfTUVUSE9EREVGCisKKyAgICBfRUxFTUVOVFRSRUVfRUxFTUVOVF9BUFBFTkRfTUVUSE9EREVGCisgICAgX0VMRU1FTlRUUkVFX0VMRU1FTlRfRVhURU5EX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0lOU0VSVF9NRVRIT0RERUYKKyAgICBfRUxFTUVOVFRSRUVfRUxFTUVOVF9SRU1PVkVfTUVUSE9EREVGCisKKyAgICBfRUxFTUVOVFRSRUVfRUxFTUVOVF9JVEVSX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0lURVJURVhUX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0lURVJGSU5EX01FVEhPRERFRgorCisgICAgeyJnZXRpdGVyYXRvciIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlcl9fZG9jX199LAorICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0dFVENISUxEUkVOX01FVEhPRERFRgorCisgICAgX0VMRU1FTlRUUkVFX0VMRU1FTlRfSVRFTVNfTUVUSE9EREVGCisgICAgX0VMRU1FTlRUUkVFX0VMRU1FTlRfS0VZU19NRVRIT0RERUYKKworICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX01BS0VFTEVNRU5UX01FVEhPRERFRgorCisgICAgX0VMRU1FTlRUUkVFX0VMRU1FTlRfX19DT1BZX19fTUVUSE9EREVGCisgICAgX0VMRU1FTlRUUkVFX0VMRU1FTlRfX19ERUVQQ09QWV9fX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX19fU0laRU9GX19fTUVUSE9EREVGCisgICAgX0VMRU1FTlRUUkVFX0VMRU1FTlRfX19HRVRTVEFURV9fX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9FTEVNRU5UX19fU0VUU1RBVEVfX19NRVRIT0RERUYKKworICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgZWxlbWVudF9hc19tYXBwaW5nID0geworICAgIChsZW5mdW5jKSBlbGVtZW50X2xlbmd0aCwKKyAgICAoYmluYXJ5ZnVuYykgZWxlbWVudF9zdWJzY3IsCisgICAgKG9iam9iamFyZ3Byb2MpIGVsZW1lbnRfYXNzX3N1YnNjciwKK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgRWxlbWVudF9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJ4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudCIsIHNpemVvZihFbGVtZW50T2JqZWN0KSwgMCwKKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpZWxlbWVudF9kZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIChyZXByZnVuYyllbGVtZW50X3JlcHIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAmZWxlbWVudF9hc19zZXF1ZW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgICZlbGVtZW50X2FzX21hcHBpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIChnZXRhdHRyb2Z1bmMpZWxlbWVudF9nZXRhdHRybywgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgKHNldGF0dHJvZnVuYyllbGVtZW50X3NldGF0dHJvLCAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0dDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYyllbGVtZW50X2djX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAoaW5xdWlyeSllbGVtZW50X2djX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgb2Zmc2V0b2YoRWxlbWVudE9iamVjdCwgd2Vha3JlZmxpc3QpLCAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBlbGVtZW50X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIChpbml0cHJvYyllbGVtZW50X2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICBQeVR5cGVfR2VuZXJpY0FsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIGVsZW1lbnRfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KK307CisKK3N0YXRpYyBQeU1ldGhvZERlZiB0cmVlYnVpbGRlcl9tZXRob2RzW10gPSB7CisgICAgX0VMRU1FTlRUUkVFX1RSRUVCVUlMREVSX0RBVEFfTUVUSE9EREVGCisgICAgX0VMRU1FTlRUUkVFX1RSRUVCVUlMREVSX1NUQVJUX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9UUkVFQlVJTERFUl9FTkRfTUVUSE9EREVGCisgICAgX0VMRU1FTlRUUkVFX1RSRUVCVUlMREVSX0NMT1NFX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBUcmVlQnVpbGRlcl9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJ4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIiLCBzaXplb2YoVHJlZUJ1aWxkZXJPYmplY3QpLCAwLAorICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3Rvcil0cmVlYnVpbGRlcl9kZWFsbG9jLCAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKXRyZWVidWlsZGVyX2djX3RyYXZlcnNlLCAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KXRyZWVidWlsZGVyX2djX2NsZWFyLCAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIHRyZWVidWlsZGVyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX19faW5pdF9fLCAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgdHJlZWJ1aWxkZXJfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIHhtbHBhcnNlcl9tZXRob2RzW10gPSB7CisgICAgX0VMRU1FTlRUUkVFX1hNTFBBUlNFUl9GRUVEX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9YTUxQQVJTRVJfQ0xPU0VfTUVUSE9EREVGCisgICAgX0VMRU1FTlRUUkVFX1hNTFBBUlNFUl9fUEFSU0VfV0hPTEVfTUVUSE9EREVGCisgICAgX0VMRU1FTlRUUkVFX1hNTFBBUlNFUl9fU0VURVZFTlRTX01FVEhPRERFRgorICAgIF9FTEVNRU5UVFJFRV9YTUxQQVJTRVJfRE9DVFlQRV9NRVRIT0RERUYKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIHN0YXRpYyBQeVR5cGVPYmplY3QgWE1MUGFyc2VyX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgInhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQYXJzZXIiLCBzaXplb2YoWE1MUGFyc2VyT2JqZWN0KSwgMCwKQEAgLTM3MDYsNyArMzg4Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYyl4bWxwYXJzZXJfaW5pdCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICBfZWxlbWVudHRyZWVfWE1MUGFyc2VyX19faW5pdF9fLCAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICB4bWxwYXJzZXJfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCkBAIC0zNzczLDcgKzM5NTQsNyBAQAogICAgIGlmIChleHBhdF9jYXBpKSB7CiAgICAgICAgIC8qIGNoZWNrIHRoYXQgaXQncyB1c2FibGUgKi8KICAgICAgICAgaWYgKHN0cmNtcChleHBhdF9jYXBpLT5tYWdpYywgUHlFeHBhdF9DQVBJX01BR0lDKSAhPSAwIHx8Ci0gICAgICAgICAgICBleHBhdF9jYXBpLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCBQeUV4cGF0X0NBUEkpIHx8CisgICAgICAgICAgICAoc2l6ZV90KWV4cGF0X2NhcGktPnNpemUgPCBzaXplb2Yoc3RydWN0IFB5RXhwYXRfQ0FQSSkgfHwKICAgICAgICAgICAgIGV4cGF0X2NhcGktPk1BSk9SX1ZFUlNJT04gIT0gWE1MX01BSk9SX1ZFUlNJT04gfHwKICAgICAgICAgICAgIGV4cGF0X2NhcGktPk1JTk9SX1ZFUlNJT04gIT0gWE1MX01JTk9SX1ZFUlNJT04gfHwKICAgICAgICAgICAgIGV4cGF0X2NhcGktPk1JQ1JPX1ZFUlNJT04gIT0gWE1MX01JQ1JPX1ZFUlNJT04pIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jIGIvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKaW5kZXggMjRkYTY3Ny4uZDc4NWM0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKQEAgLTI1LDcgKzI1LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwYXJ0aWFsX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpCiB7Ci0gICAgUHlPYmplY3QgKmZ1bmM7CisgICAgUHlPYmplY3QgKmZ1bmMsICpwYXJncywgKm5hcmdzLCAqcGt3OwogICAgIHBhcnRpYWxvYmplY3QgKnB0bzsKIAogICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIDwgMSkgewpAQCAtMzQsNyArMzQsMTggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgcGFyZ3MgPSBwa3cgPSBOVUxMOwogICAgIGZ1bmMgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApOworICAgIGlmIChQeV9UWVBFKGZ1bmMpID09ICZwYXJ0aWFsX3R5cGUgJiYgdHlwZSA9PSAmcGFydGlhbF90eXBlKSB7CisgICAgICAgIHBhcnRpYWxvYmplY3QgKnBhcnQgPSAocGFydGlhbG9iamVjdCAqKWZ1bmM7CisgICAgICAgIGlmIChwYXJ0LT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBhcmdzID0gcGFydC0+YXJnczsKKyAgICAgICAgICAgIHBrdyA9IHBhcnQtPmt3OworICAgICAgICAgICAgZnVuYyA9IHBhcnQtPmZuOworICAgICAgICAgICAgYXNzZXJ0KFB5VHVwbGVfQ2hlY2socGFyZ3MpKTsKKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2socGt3KSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGZ1bmMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgY2FsbGFibGUiKTsKQEAgLTQ4LDIyICs1OSw1NCBAQAogCiAgICAgcHRvLT5mbiA9IGZ1bmM7CiAgICAgUHlfSU5DUkVGKGZ1bmMpOwotICAgIHB0by0+YXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgUFlfU1NJWkVfVF9NQVgpOwotICAgIGlmIChwdG8tPmFyZ3MgPT0gTlVMTCkgewotICAgICAgICBwdG8tPmt3ID0gTlVMTDsKKworICAgIG5hcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBQWV9TU0laRV9UX01BWCk7CisgICAgaWYgKG5hcmdzID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHB0byk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBwdG8tPmt3ID0gKGt3ICE9IE5VTEwpID8gUHlEaWN0X0NvcHkoa3cpIDogUHlEaWN0X05ldygpOworICAgIGlmIChwYXJncyA9PSBOVUxMIHx8IFB5VHVwbGVfR0VUX1NJWkUocGFyZ3MpID09IDApIHsKKyAgICAgICAgcHRvLT5hcmdzID0gbmFyZ3M7CisgICAgICAgIFB5X0lOQ1JFRihuYXJncyk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUobmFyZ3MpID09IDApIHsKKyAgICAgICAgcHRvLT5hcmdzID0gcGFyZ3M7CisgICAgICAgIFB5X0lOQ1JFRihwYXJncyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwdG8tPmFyZ3MgPSBQeVNlcXVlbmNlX0NvbmNhdChwYXJncywgbmFyZ3MpOworICAgICAgICBpZiAocHRvLT5hcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuYXJncyk7CisgICAgICAgICAgICBQeV9ERUNSRUYocHRvKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGFzc2VydChQeVR1cGxlX0NoZWNrKHB0by0+YXJncykpOworICAgIH0KKyAgICBQeV9ERUNSRUYobmFyZ3MpOworCisgICAgaWYgKHBrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKHBrdykgPT0gMCkgeworICAgICAgICBpZiAoa3cgPT0gTlVMTCkgeworICAgICAgICAgICAgcHRvLT5rdyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihrdyk7CisgICAgICAgICAgICBwdG8tPmt3ID0ga3c7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHB0by0+a3cgPSBQeURpY3RfQ29weShwa3cpOworICAgICAgICBpZiAoa3cgIT0gTlVMTCAmJiBwdG8tPmt3ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeURpY3RfTWVyZ2UocHRvLT5rdywga3csIDEpICE9IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocHRvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICBpZiAocHRvLT5rdyA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihwdG8pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLQotICAgIHB0by0+d2Vha3JlZmxpc3QgPSBOVUxMOwotICAgIHB0by0+ZGljdCA9IE5VTEw7Ci0KICAgICByZXR1cm4gKFB5T2JqZWN0ICopcHRvOwogfQogCkBAIC04NCwxMSArMTI3LDExIEBACiBwYXJ0aWFsX2NhbGwocGFydGlhbG9iamVjdCAqcHRvLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQogewogICAgIFB5T2JqZWN0ICpyZXQ7Ci0gICAgUHlPYmplY3QgKmFyZ2FwcGwgPSBOVUxMLCAqa3dhcHBsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqYXJnYXBwbCwgKmt3YXBwbDsKIAogICAgIGFzc2VydCAoUHlDYWxsYWJsZV9DaGVjayhwdG8tPmZuKSk7CiAgICAgYXNzZXJ0IChQeVR1cGxlX0NoZWNrKHB0by0+YXJncykpOwotICAgIGFzc2VydCAocHRvLT5rdyA9PSBQeV9Ob25lICB8fCAgUHlEaWN0X0NoZWNrKHB0by0+a3cpKTsKKyAgICBhc3NlcnQgKFB5RGljdF9DaGVjayhwdG8tPmt3KSk7CiAKICAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShwdG8tPmFyZ3MpID09IDApIHsKICAgICAgICAgYXJnYXBwbCA9IGFyZ3M7CkBAIC0xMDAsMTEgKzE0MywxMiBAQAogICAgICAgICBhcmdhcHBsID0gUHlTZXF1ZW5jZV9Db25jYXQocHRvLT5hcmdzLCBhcmdzKTsKICAgICAgICAgaWYgKGFyZ2FwcGwgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBhc3NlcnQoUHlUdXBsZV9DaGVjayhhcmdhcHBsKSk7CiAgICAgfQogCi0gICAgaWYgKHB0by0+a3cgPT0gUHlfTm9uZSkgeworICAgIGlmIChQeURpY3RfU2l6ZShwdG8tPmt3KSA9PSAwKSB7CiAgICAgICAgIGt3YXBwbCA9IGt3OwotICAgICAgICBQeV9YSU5DUkVGKGt3KTsKKyAgICAgICAgUHlfWElOQ1JFRihrd2FwcGwpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGt3YXBwbCA9IFB5RGljdF9Db3B5KHB0by0+a3cpOwogICAgICAgICBpZiAoa3dhcHBsID09IE5VTEwpIHsKQEAgLTE1OSw0MiArMjAzLDQ1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcGFydGlhbF9yZXByKHBhcnRpYWxvYmplY3QgKnB0bykKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdsaXN0OwotICAgIFB5T2JqZWN0ICp0bXA7CiAgICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKyAgICBpbnQgc3RhdHVzOworCisgICAgc3RhdHVzID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKXB0byk7CisgICAgaWYgKHN0YXR1cyAhPSAwKSB7CisgICAgICAgIGlmIChzdGF0dXMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoLi4uKSIsIFB5X1RZUEUocHRvKS0+dHBfbmFtZSk7CisgICAgfQogCiAgICAgYXJnbGlzdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKLSAgICBpZiAoYXJnbGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoYXJnbGlzdCA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CiAgICAgLyogUGFjayBwb3NpdGlvbmFsIGFyZ3VtZW50cyAqLwogICAgIGFzc2VydCAoUHlUdXBsZV9DaGVjayhwdG8tPmFyZ3MpKTsKICAgICBuID0gUHlUdXBsZV9HRVRfU0laRShwdG8tPmFyZ3MpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgdG1wID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVLCAlUiIsIGFyZ2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX0lURU0ocHRvLT5hcmdzLCBpKSk7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdsaXN0KTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ2xpc3QgPSB0bXA7CisgICAgICAgIFB5X1NFVFJFRihhcmdsaXN0LCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVUsICVSIiwgYXJnbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9JVEVNKHB0by0+YXJncywgaSkpKTsKKyAgICAgICAgaWYgKGFyZ2xpc3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAgICAgLyogUGFjayBrZXl3b3JkIGFyZ3VtZW50cyAqLwotICAgIGFzc2VydCAocHRvLT5rdyA9PSBQeV9Ob25lICB8fCAgUHlEaWN0X0NoZWNrKHB0by0+a3cpKTsKLSAgICBpZiAocHRvLT5rdyAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKLSAgICAgICAgZm9yIChpID0gMDsgUHlEaWN0X05leHQocHRvLT5rdywgJmksICZrZXksICZ2YWx1ZSk7KSB7Ci0gICAgICAgICAgICB0bXAgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVUsICVVPSVSIiwgYXJnbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKGFyZ2xpc3QpOwotICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgYXJnbGlzdCA9IHRtcDsKLSAgICAgICAgfQorICAgIGFzc2VydCAoUHlEaWN0X0NoZWNrKHB0by0+a3cpKTsKKyAgICBmb3IgKGkgPSAwOyBQeURpY3RfTmV4dChwdG8tPmt3LCAmaSwgJmtleSwgJnZhbHVlKTspIHsKKyAgICAgICAgUHlfU0VUUkVGKGFyZ2xpc3QsIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlVSwgJVU9JVIiLCBhcmdsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWx1ZSkpOworICAgICAgICBpZiAoYXJnbGlzdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBkb25lOwogICAgIH0KICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVIlVSkiLCBQeV9UWVBFKHB0byktPnRwX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRvLT5mbiwgYXJnbGlzdCk7CiAgICAgUHlfREVDUkVGKGFyZ2xpc3QpOworCisgZG9uZToKKyAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopcHRvKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yMTcsMjUgKzI2NCw0NSBAQAogcGFydGlhbF9zZXRzdGF0ZShwYXJ0aWFsb2JqZWN0ICpwdG8sIFB5T2JqZWN0ICpzdGF0ZSkKIHsKICAgICBQeU9iamVjdCAqZm4sICpmbmFyZ3MsICprdywgKmRpY3Q7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiT09PTyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZmbiwgJmZuYXJncywgJmt3LCAmZGljdCkpCisKKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2soc3RhdGUpIHx8CisgICAgICAgICFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiT09PTyIsICZmbiwgJmZuYXJncywgJmt3LCAmZGljdCkgfHwKKyAgICAgICAgIVB5Q2FsbGFibGVfQ2hlY2soZm4pIHx8CisgICAgICAgICFQeVR1cGxlX0NoZWNrKGZuYXJncykgfHwKKyAgICAgICAgKGt3ICE9IFB5X05vbmUgJiYgIVB5RGljdF9DaGVjayhrdykpKQorICAgIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImludmFsaWQgcGFydGlhbCBzdGF0ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9YREVDUkVGKHB0by0+Zm4pOwotICAgIFB5X1hERUNSRUYocHRvLT5hcmdzKTsKLSAgICBQeV9YREVDUkVGKHB0by0+a3cpOwotICAgIFB5X1hERUNSRUYocHRvLT5kaWN0KTsKLSAgICBwdG8tPmZuID0gZm47Ci0gICAgcHRvLT5hcmdzID0gZm5hcmdzOwotICAgIHB0by0+a3cgPSBrdzsKLSAgICBpZiAoZGljdCAhPSBQeV9Ob25lKSB7Ci0gICAgICBwdG8tPmRpY3QgPSBkaWN0OwotICAgICAgUHlfSU5DUkVGKGRpY3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICBwdG8tPmRpY3QgPSBOVUxMOwogICAgIH0KKworICAgIGlmKCFQeVR1cGxlX0NoZWNrRXhhY3QoZm5hcmdzKSkKKyAgICAgICAgZm5hcmdzID0gUHlTZXF1ZW5jZV9UdXBsZShmbmFyZ3MpOworICAgIGVsc2UKKyAgICAgICAgUHlfSU5DUkVGKGZuYXJncyk7CisgICAgaWYgKGZuYXJncyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChrdyA9PSBQeV9Ob25lKQorICAgICAgICBrdyA9IFB5RGljdF9OZXcoKTsKKyAgICBlbHNlIGlmKCFQeURpY3RfQ2hlY2tFeGFjdChrdykpCisgICAgICAgIGt3ID0gUHlEaWN0X0NvcHkoa3cpOworICAgIGVsc2UKKyAgICAgICAgUHlfSU5DUkVGKGt3KTsKKyAgICBpZiAoa3cgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZm5hcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgUHlfSU5DUkVGKGZuKTsKLSAgICBQeV9JTkNSRUYoZm5hcmdzKTsKLSAgICBQeV9JTkNSRUYoa3cpOworICAgIGlmIChkaWN0ID09IFB5X05vbmUpCisgICAgICAgIGRpY3QgPSBOVUxMOworICAgIGVsc2UKKyAgICAgICAgUHlfSU5DUkVGKGRpY3QpOworCisgICAgUHlfU0VUUkVGKHB0by0+Zm4sIGZuKTsKKyAgICBQeV9TRVRSRUYocHRvLT5hcmdzLCBmbmFyZ3MpOworICAgIFB5X1NFVFJFRihwdG8tPmt3LCBrdyk7CisgICAgUHlfWFNFVFJFRihwdG8tPmRpY3QsIGRpY3QpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC01MzYsNiArNjAzLDU4NyBAQAogb2YgdGhlIHNlcXVlbmNlIGluIHRoZSBjYWxjdWxhdGlvbiwgYW5kIHNlcnZlcyBhcyBhIGRlZmF1bHQgd2hlbiB0aGVcblwKIHNlcXVlbmNlIGlzIGVtcHR5LiIpOwogCisvKiBscnVfY2FjaGUgb2JqZWN0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHRoaXMgb2JqZWN0IGlzIHVzZWQgZGVsaW1pdCBhcmdzIGFuZCBrZXl3b3JkcyBpbiB0aGUgY2FjaGUga2V5cyAqLworc3RhdGljIFB5T2JqZWN0ICprd2RfbWFyayA9IE5VTEw7CisKK3N0cnVjdCBscnVfbGlzdF9lbGVtOworc3RydWN0IGxydV9jYWNoZV9vYmplY3Q7CisKK3R5cGVkZWYgc3RydWN0IGxydV9saXN0X2VsZW0geworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBzdHJ1Y3QgbHJ1X2xpc3RfZWxlbSAqcHJldiwgKm5leHQ7ICAvKiBib3Jyb3dlZCBsaW5rcyAqLworICAgIFB5X2hhc2hfdCBoYXNoOworICAgIFB5T2JqZWN0ICprZXksICpyZXN1bHQ7Cit9IGxydV9saXN0X2VsZW07CisKK3N0YXRpYyB2b2lkCitscnVfbGlzdF9lbGVtX2RlYWxsb2MobHJ1X2xpc3RfZWxlbSAqbGluaykKK3sKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhsaW5rKTsKKyAgICBQeV9YREVDUkVGKGxpbmstPmtleSk7CisgICAgUHlfWERFQ1JFRihsaW5rLT5yZXN1bHQpOworICAgIFB5T2JqZWN0X0dDX0RlbChsaW5rKTsKK30KKworc3RhdGljIGludAorbHJ1X2xpc3RfZWxlbV90cmF2ZXJzZShscnVfbGlzdF9lbGVtICpsaW5rLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChsaW5rLT5rZXkpOworICAgIFB5X1ZJU0lUKGxpbmstPnJlc3VsdCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xydV9saXN0X2VsZW1fY2xlYXIobHJ1X2xpc3RfZWxlbSAqbGluaykKK3sKKyAgICBQeV9DTEVBUihsaW5rLT5rZXkpOworICAgIFB5X0NMRUFSKGxpbmstPnJlc3VsdCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgbHJ1X2xpc3RfZWxlbV90eXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgImZ1bmN0b29scy5fbHJ1X2xpc3RfZWxlbSIsICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihscnVfbGlzdF9lbGVtKSwgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgLyogbWV0aG9kcyAqLworICAgIChkZXN0cnVjdG9yKWxydV9saXN0X2VsZW1fZGVhbGxvYywgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWxydV9saXN0X2VsZW1fdHJhdmVyc2UsICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KWxydV9saXN0X2VsZW1fY2xlYXIsICAgICAgIC8qIHRwX2NsZWFyICovCit9OworCisKK3R5cGVkZWYgUHlPYmplY3QgKigqbHJ1X2NhY2hlX3Rlcm5hcnlmdW5jKShzdHJ1Y3QgbHJ1X2NhY2hlX29iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgbHJ1X2NhY2hlX29iamVjdCB7CisgICAgbHJ1X2xpc3RfZWxlbSByb290OyAgLyogaW5jbHVkZXMgUHlPYmplY3RfSEVBRCAqLworICAgIFB5X3NzaXplX3QgbWF4c2l6ZTsKKyAgICBQeU9iamVjdCAqbWF4c2l6ZV9POworICAgIFB5T2JqZWN0ICpmdW5jOworICAgIGxydV9jYWNoZV90ZXJuYXJ5ZnVuYyB3cmFwcGVyOworICAgIFB5T2JqZWN0ICpjYWNoZTsKKyAgICBQeU9iamVjdCAqY2FjaGVfaW5mb190eXBlOworICAgIFB5X3NzaXplX3QgbWlzc2VzLCBoaXRzOworICAgIGludCB0eXBlZDsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBpbnQgZnVsbDsKK30gbHJ1X2NhY2hlX29iamVjdDsKKworc3RhdGljIFB5VHlwZU9iamVjdCBscnVfY2FjaGVfdHlwZTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2xydV9jYWNoZV9tYWtlX2tleShQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMsIGludCB0eXBlZCkKK3sKKyAgICBQeU9iamVjdCAqa2V5LCAqc29ydGVkX2l0ZW1zOworICAgIFB5X3NzaXplX3Qga2V5X3NpemUsIHBvcywga2V5X3BvczsKKworICAgIC8qIHNob3J0IHBhdGgsIGtleSB3aWxsIG1hdGNoIGFyZ3MgYW55d2F5LCB3aGljaCBpcyBhIHR1cGxlICovCisgICAgaWYgKCF0eXBlZCAmJiAha3dkcykgeworICAgICAgICBQeV9JTkNSRUYoYXJncyk7CisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKworICAgIGlmIChrd2RzICYmIFB5RGljdF9TaXplKGt3ZHMpID4gMCkgeworICAgICAgICBzb3J0ZWRfaXRlbXMgPSBQeURpY3RfSXRlbXMoa3dkcyk7CisgICAgICAgIGlmICghc29ydGVkX2l0ZW1zKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChQeUxpc3RfU29ydChzb3J0ZWRfaXRlbXMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNvcnRlZF9pdGVtcyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBzb3J0ZWRfaXRlbXMgPSBOVUxMOworCisgICAga2V5X3NpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOworICAgIGlmIChzb3J0ZWRfaXRlbXMpCisgICAgICAgIGtleV9zaXplICs9IFB5TGlzdF9HRVRfU0laRShzb3J0ZWRfaXRlbXMpOworICAgIGlmICh0eXBlZCkKKyAgICAgICAga2V5X3NpemUgKj0gMjsKKyAgICBpZiAoc29ydGVkX2l0ZW1zKQorICAgICAgICBrZXlfc2l6ZSsrOworCisgICAga2V5ID0gUHlUdXBsZV9OZXcoa2V5X3NpemUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworCisgICAga2V5X3BvcyA9IDA7CisgICAgZm9yIChwb3MgPSAwOyBwb3MgPCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOyArK3BvcykgeworICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgcG9zKTsKKyAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGtleSwga2V5X3BvcysrLCBpdGVtKTsKKyAgICB9CisgICAgaWYgKHNvcnRlZF9pdGVtcykgeworICAgICAgICBQeV9JTkNSRUYoa3dkX21hcmspOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGtleSwga2V5X3BvcysrLCBrd2RfbWFyayk7CisgICAgICAgIGZvciAocG9zID0gMDsgcG9zIDwgUHlMaXN0X0dFVF9TSVpFKHNvcnRlZF9pdGVtcyk7ICsrcG9zKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShzb3J0ZWRfaXRlbXMsIHBvcyk7CisgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGtleSwga2V5X3BvcysrLCBpdGVtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodHlwZWQpIHsKKyAgICAgICAgZm9yIChwb3MgPSAwOyBwb3MgPCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOyArK3BvcykgeworICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSAoUHlPYmplY3QgKilQeV9UWVBFKFB5VHVwbGVfR0VUX0lURU0oYXJncywgcG9zKSk7CisgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGtleSwga2V5X3BvcysrLCBpdGVtKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc29ydGVkX2l0ZW1zKSB7CisgICAgICAgICAgICBmb3IgKHBvcyA9IDA7IHBvcyA8IFB5TGlzdF9HRVRfU0laRShzb3J0ZWRfaXRlbXMpOyArK3BvcykgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0cF9pdGVtcyA9IFB5TGlzdF9HRVRfSVRFTShzb3J0ZWRfaXRlbXMsIHBvcyk7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSAoUHlPYmplY3QgKilQeV9UWVBFKFB5VHVwbGVfR0VUX0lURU0odHBfaXRlbXMsIDEpKTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShrZXksIGtleV9wb3MrKywgaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0KGtleV9wb3MgPT0ga2V5X3NpemUpOworCitkb25lOgorICAgIGlmIChzb3J0ZWRfaXRlbXMpCisgICAgICAgIFB5X0RFQ1JFRihzb3J0ZWRfaXRlbXMpOworICAgIHJldHVybiBrZXk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmNhY2hlZF9scnVfY2FjaGVfd3JhcHBlcihscnVfY2FjaGVfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoc2VsZi0+ZnVuYywgYXJncywga3dkcyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHNlbGYtPm1pc3NlcysrOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitpbmZpbml0ZV9scnVfY2FjaGVfd3JhcHBlcihscnVfY2FjaGVfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKyAgICBQeU9iamVjdCAqa2V5ID0gbHJ1X2NhY2hlX21ha2Vfa2V5KGFyZ3MsIGt3ZHMsIHNlbGYtPnR5cGVkKTsKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKKyAgICBpZiAoaGFzaCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gX1B5RGljdF9HZXRJdGVtX0tub3duSGFzaChzZWxmLT5jYWNoZSwga2V5LCBoYXNoKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIFB5X0lOQ1JFRihyZXN1bHQpOworICAgICAgICBzZWxmLT5oaXRzKys7CisgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoc2VsZi0+ZnVuYywgYXJncywga3dkcyk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5RGljdF9TZXRJdGVtX0tub3duSGFzaChzZWxmLT5jYWNoZSwga2V5LCByZXN1bHQsIGhhc2gpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICBzZWxmLT5taXNzZXMrKzsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorbHJ1X2NhY2hlX2V4dHJpY2F0ZV9saW5rKGxydV9saXN0X2VsZW0gKmxpbmspCit7CisgICAgbGluay0+cHJldi0+bmV4dCA9IGxpbmstPm5leHQ7CisgICAgbGluay0+bmV4dC0+cHJldiA9IGxpbmstPnByZXY7Cit9CisKK3N0YXRpYyB2b2lkCitscnVfY2FjaGVfYXBwZW5kX2xpbmsobHJ1X2NhY2hlX29iamVjdCAqc2VsZiwgbHJ1X2xpc3RfZWxlbSAqbGluaykKK3sKKyAgICBscnVfbGlzdF9lbGVtICpyb290ID0gJnNlbGYtPnJvb3Q7CisgICAgbHJ1X2xpc3RfZWxlbSAqbGFzdCA9IHJvb3QtPnByZXY7CisgICAgbGFzdC0+bmV4dCA9IHJvb3QtPnByZXYgPSBsaW5rOworICAgIGxpbmstPnByZXYgPSBsYXN0OworICAgIGxpbmstPm5leHQgPSByb290OworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYm91bmRlZF9scnVfY2FjaGVfd3JhcHBlcihscnVfY2FjaGVfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgbHJ1X2xpc3RfZWxlbSAqbGluazsKKyAgICBQeU9iamVjdCAqa2V5LCAqcmVzdWx0OworICAgIFB5X2hhc2hfdCBoYXNoOworCisgICAga2V5ID0gbHJ1X2NhY2hlX21ha2Vfa2V5KGFyZ3MsIGt3ZHMsIHNlbGYtPnR5cGVkKTsKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKKyAgICBpZiAoaGFzaCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbGluayAgPSAobHJ1X2xpc3RfZWxlbSAqKV9QeURpY3RfR2V0SXRlbV9Lbm93bkhhc2goc2VsZi0+Y2FjaGUsIGtleSwgaGFzaCk7CisgICAgaWYgKGxpbmspIHsKKyAgICAgICAgbHJ1X2NhY2hlX2V4dHJpY2F0ZV9saW5rKGxpbmspOworICAgICAgICBscnVfY2FjaGVfYXBwZW5kX2xpbmsoc2VsZiwgbGluayk7CisgICAgICAgIHNlbGYtPmhpdHMrKzsKKyAgICAgICAgcmVzdWx0ID0gbGluay0+cmVzdWx0OworICAgICAgICBQeV9JTkNSRUYocmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChzZWxmLT5mdW5jLCBhcmdzLCBrd2RzKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChzZWxmLT5mdWxsICYmIHNlbGYtPnJvb3QubmV4dCAhPSAmc2VsZi0+cm9vdCkgeworICAgICAgICAvKiBVc2UgdGhlIG9sZGVzdCBpdGVtIHRvIHN0b3JlIHRoZSBuZXcga2V5IGFuZCByZXN1bHQuICovCisgICAgICAgIFB5T2JqZWN0ICpvbGRrZXksICpvbGRyZXN1bHQ7CisgICAgICAgIC8qIEV4dHJpY2F0ZSB0aGUgb2xkZXN0IGl0ZW0uICovCisgICAgICAgIGxpbmsgPSBzZWxmLT5yb290Lm5leHQ7CisgICAgICAgIGxydV9jYWNoZV9leHRyaWNhdGVfbGluayhsaW5rKTsKKyAgICAgICAgLyogUmVtb3ZlIGl0IGZyb20gdGhlIGNhY2hlLgorICAgICAgICAgICBUaGUgY2FjaGUgZGljdCBob2xkcyBvbmUgcmVmZXJlbmNlIHRvIHRoZSBsaW5rLAorICAgICAgICAgICBhbmQgdGhlIGxpbmtlZCBsaXN0IGhvbGRzIHlldCBvbmUgcmVmZXJlbmNlIHRvIGl0LiAqLworICAgICAgICBpZiAoX1B5RGljdF9EZWxJdGVtX0tub3duSGFzaChzZWxmLT5jYWNoZSwgbGluay0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLT5oYXNoKSA8IDApIHsKKyAgICAgICAgICAgIGxydV9jYWNoZV9hcHBlbmRfbGluayhzZWxmLCBsaW5rKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAvKiBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQga2V5IGFuZCBvbGQgcmVzdWx0IHRvCisgICAgICAgICAgIHByZXZlbnQgdGhlaXIgcmVmIGNvdW50cyBmcm9tIGdvaW5nIHRvIHplcm8gZHVyaW5nIHRoZQorICAgICAgICAgICB1cGRhdGUuIFRoYXQgd2lsbCBwcmV2ZW50IHBvdGVudGlhbGx5IGFyYml0cmFyeSBvYmplY3QKKyAgICAgICAgICAgY2xlYW4tdXAgY29kZSAoaS5lLiBfX2RlbF9fKSBmcm9tIHJ1bm5pbmcgd2hpbGUgd2UncmUKKyAgICAgICAgICAgc3RpbGwgYWRqdXN0aW5nIHRoZSBsaW5rcy4gKi8KKyAgICAgICAgb2xka2V5ID0gbGluay0+a2V5OworICAgICAgICBvbGRyZXN1bHQgPSBsaW5rLT5yZXN1bHQ7CisKKyAgICAgICAgbGluay0+aGFzaCA9IGhhc2g7CisgICAgICAgIGxpbmstPmtleSA9IGtleTsKKyAgICAgICAgbGluay0+cmVzdWx0ID0gcmVzdWx0OworICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtX0tub3duSGFzaChzZWxmLT5jYWNoZSwga2V5LCAoUHlPYmplY3QgKilsaW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsaW5rKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvbGRrZXkpOworICAgICAgICAgICAgUHlfREVDUkVGKG9sZHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBscnVfY2FjaGVfYXBwZW5kX2xpbmsoc2VsZiwgbGluayk7CisgICAgICAgIFB5X0lOQ1JFRihyZXN1bHQpOyAvKiBmb3IgcmV0dXJuICovCisgICAgICAgIFB5X0RFQ1JFRihvbGRrZXkpOworICAgICAgICBQeV9ERUNSRUYob2xkcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBQdXQgcmVzdWx0IGluIGEgbmV3IGxpbmsgYXQgdGhlIGZyb250IG9mIHRoZSBxdWV1ZS4gKi8KKyAgICAgICAgbGluayA9IChscnVfbGlzdF9lbGVtICopUHlPYmplY3RfR0NfTmV3KGxydV9saXN0X2VsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHJ1X2xpc3RfZWxlbV90eXBlKTsKKyAgICAgICAgaWYgKGxpbmsgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbGluay0+aGFzaCA9IGhhc2g7CisgICAgICAgIGxpbmstPmtleSA9IGtleTsKKyAgICAgICAgbGluay0+cmVzdWx0ID0gcmVzdWx0OworICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0sobGluayk7CisgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1fS25vd25IYXNoKHNlbGYtPmNhY2hlLCBrZXksIChQeU9iamVjdCAqKWxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGxpbmspOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbHJ1X2NhY2hlX2FwcGVuZF9saW5rKHNlbGYsIGxpbmspOworICAgICAgICBQeV9JTkNSRUYocmVzdWx0KTsgLyogZm9yIHJldHVybiAqLworICAgICAgICBzZWxmLT5mdWxsID0gKFB5RGljdF9TaXplKHNlbGYtPmNhY2hlKSA+PSBzZWxmLT5tYXhzaXplKTsKKyAgICB9CisgICAgc2VsZi0+bWlzc2VzKys7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2xydV9jYWNoZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQoreworICAgIFB5T2JqZWN0ICpmdW5jLCAqbWF4c2l6ZV9PLCAqY2FjaGVfaW5mb190eXBlLCAqY2FjaGVkaWN0OworICAgIGludCB0eXBlZDsKKyAgICBscnVfY2FjaGVfb2JqZWN0ICpvYmo7CisgICAgUHlfc3NpemVfdCBtYXhzaXplOworICAgIFB5T2JqZWN0ICooKndyYXBwZXIpKGxydV9jYWNoZV9vYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InVzZXJfZnVuY3Rpb24iLCAibWF4c2l6ZSIsICJ0eXBlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhY2hlX2luZm9fdHlwZSIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPT3BPOmxydV9jYWNoZSIsIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdW5jLCAmbWF4c2l6ZV9PLCAmdHlwZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlX2luZm9fdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGZ1bmMpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgY2FsbGFibGUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogc2VsZWN0IHRoZSBjYWNoaW5nIGZ1bmN0aW9uLCBhbmQgbWFrZS9pbmMgbWF4c2l6ZV9PICovCisgICAgaWYgKG1heHNpemVfTyA9PSBQeV9Ob25lKSB7CisgICAgICAgIHdyYXBwZXIgPSBpbmZpbml0ZV9scnVfY2FjaGVfd3JhcHBlcjsKKyAgICAgICAgLyogdXNlIHRoaXMgb25seSB0byBpbml0aWFsaXplIGxydV9jYWNoZV9vYmplY3QgYXR0cmlidXRlIG1heHNpemUgKi8KKyAgICAgICAgbWF4c2l6ZSA9IC0xOworICAgIH0gZWxzZSBpZiAoUHlJbmRleF9DaGVjayhtYXhzaXplX08pKSB7CisgICAgICAgIG1heHNpemUgPSBQeU51bWJlcl9Bc1NzaXplX3QobWF4c2l6ZV9PLCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKKyAgICAgICAgaWYgKG1heHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAobWF4c2l6ZSA9PSAwKQorICAgICAgICAgICAgd3JhcHBlciA9IHVuY2FjaGVkX2xydV9jYWNoZV93cmFwcGVyOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3cmFwcGVyID0gYm91bmRlZF9scnVfY2FjaGVfd3JhcHBlcjsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibWF4c2l6ZSBzaG91bGQgYmUgaW50ZWdlciBvciBOb25lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghKGNhY2hlZGljdCA9IFB5RGljdF9OZXcoKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb2JqID0gKGxydV9jYWNoZV9vYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGNhY2hlZGljdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9iai0+Y2FjaGUgPSBjYWNoZWRpY3Q7CisgICAgb2JqLT5yb290LnByZXYgPSAmb2JqLT5yb290OworICAgIG9iai0+cm9vdC5uZXh0ID0gJm9iai0+cm9vdDsKKyAgICBvYmotPm1heHNpemUgPSBtYXhzaXplOworICAgIFB5X0lOQ1JFRihtYXhzaXplX08pOworICAgIG9iai0+bWF4c2l6ZV9PID0gbWF4c2l6ZV9POworICAgIFB5X0lOQ1JFRihmdW5jKTsKKyAgICBvYmotPmZ1bmMgPSBmdW5jOworICAgIG9iai0+d3JhcHBlciA9IHdyYXBwZXI7CisgICAgb2JqLT5taXNzZXMgPSBvYmotPmhpdHMgPSAwOworICAgIG9iai0+dHlwZWQgPSB0eXBlZDsKKyAgICBQeV9JTkNSRUYoY2FjaGVfaW5mb190eXBlKTsKKyAgICBvYmotPmNhY2hlX2luZm9fdHlwZSA9IGNhY2hlX2luZm9fdHlwZTsKKworICAgIHJldHVybiAoUHlPYmplY3QgKilvYmo7Cit9CisKK3N0YXRpYyBscnVfbGlzdF9lbGVtICoKK2xydV9jYWNoZV91bmxpbmtfbGlzdChscnVfY2FjaGVfb2JqZWN0ICpzZWxmKQoreworICAgIGxydV9saXN0X2VsZW0gKnJvb3QgPSAmc2VsZi0+cm9vdDsKKyAgICBscnVfbGlzdF9lbGVtICpsaW5rID0gcm9vdC0+bmV4dDsKKyAgICBpZiAobGluayA9PSByb290KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByb290LT5wcmV2LT5uZXh0ID0gTlVMTDsKKyAgICByb290LT5uZXh0ID0gcm9vdC0+cHJldiA9IHJvb3Q7CisgICAgcmV0dXJuIGxpbms7Cit9CisKK3N0YXRpYyB2b2lkCitscnVfY2FjaGVfY2xlYXJfbGlzdChscnVfbGlzdF9lbGVtICpsaW5rKQoreworICAgIHdoaWxlIChsaW5rICE9IE5VTEwpIHsKKyAgICAgICAgbHJ1X2xpc3RfZWxlbSAqbmV4dCA9IGxpbmstPm5leHQ7CisgICAgICAgIFB5X0RFQ1JFRihsaW5rKTsKKyAgICAgICAgbGluayA9IG5leHQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbHJ1X2NhY2hlX2RlYWxsb2MobHJ1X2NhY2hlX29iamVjdCAqb2JqKQoreworICAgIGxydV9saXN0X2VsZW0gKmxpc3QgPSBscnVfY2FjaGVfdW5saW5rX2xpc3Qob2JqKTsKKyAgICBQeV9YREVDUkVGKG9iai0+bWF4c2l6ZV9PKTsKKyAgICBQeV9YREVDUkVGKG9iai0+ZnVuYyk7CisgICAgUHlfWERFQ1JFRihvYmotPmNhY2hlKTsKKyAgICBQeV9YREVDUkVGKG9iai0+ZGljdCk7CisgICAgUHlfWERFQ1JFRihvYmotPmNhY2hlX2luZm9fdHlwZSk7CisgICAgbHJ1X2NhY2hlX2NsZWFyX2xpc3QobGlzdCk7CisgICAgUHlfVFlQRShvYmopLT50cF9mcmVlKG9iaik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitscnVfY2FjaGVfY2FsbChscnVfY2FjaGVfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgcmV0dXJuIHNlbGYtPndyYXBwZXIoc2VsZiwgYXJncywga3dkcyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitscnVfY2FjaGVfZGVzY3JfZ2V0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqdHlwZSkKK3sKKyAgICBpZiAob2JqID09IFB5X05vbmUgfHwgb2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gc2VsZjsKKyAgICB9CisgICAgcmV0dXJuIFB5TWV0aG9kX05ldyhzZWxmLCBvYmopOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbHJ1X2NhY2hlX2NhY2hlX2luZm8obHJ1X2NhY2hlX29iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPmNhY2hlX2luZm9fdHlwZSwgIm5uT24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+aGl0cywgc2VsZi0+bWlzc2VzLCBzZWxmLT5tYXhzaXplX08sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2l6ZShzZWxmLT5jYWNoZSkpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbHJ1X2NhY2hlX2NhY2hlX2NsZWFyKGxydV9jYWNoZV9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CisgICAgbHJ1X2xpc3RfZWxlbSAqbGlzdCA9IGxydV9jYWNoZV91bmxpbmtfbGlzdChzZWxmKTsKKyAgICBzZWxmLT5oaXRzID0gc2VsZi0+bWlzc2VzID0gMDsKKyAgICBzZWxmLT5mdWxsID0gMDsKKyAgICBQeURpY3RfQ2xlYXIoc2VsZi0+Y2FjaGUpOworICAgIGxydV9jYWNoZV9jbGVhcl9saXN0KGxpc3QpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbHJ1X2NhY2hlX3JlZHVjZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzZWxmLCAiX19xdWFsbmFtZV9fIik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitscnVfY2FjaGVfY29weShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitscnVfY2FjaGVfZGVlcGNvcHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgaW50CitscnVfY2FjaGVfdHBfdHJhdmVyc2UobHJ1X2NhY2hlX29iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgbHJ1X2xpc3RfZWxlbSAqbGluayA9IHNlbGYtPnJvb3QubmV4dDsKKyAgICB3aGlsZSAobGluayAhPSAmc2VsZi0+cm9vdCkgeworICAgICAgICBscnVfbGlzdF9lbGVtICpuZXh0ID0gbGluay0+bmV4dDsKKyAgICAgICAgUHlfVklTSVQobGluayk7CisgICAgICAgIGxpbmsgPSBuZXh0OworICAgIH0KKyAgICBQeV9WSVNJVChzZWxmLT5tYXhzaXplX08pOworICAgIFB5X1ZJU0lUKHNlbGYtPmZ1bmMpOworICAgIFB5X1ZJU0lUKHNlbGYtPmNhY2hlKTsKKyAgICBQeV9WSVNJVChzZWxmLT5jYWNoZV9pbmZvX3R5cGUpOworICAgIFB5X1ZJU0lUKHNlbGYtPmRpY3QpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitscnVfY2FjaGVfdHBfY2xlYXIobHJ1X2NhY2hlX29iamVjdCAqc2VsZikKK3sKKyAgICBscnVfbGlzdF9lbGVtICpsaXN0ID0gbHJ1X2NhY2hlX3VubGlua19saXN0KHNlbGYpOworICAgIFB5X0NMRUFSKHNlbGYtPm1heHNpemVfTyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZnVuYyk7CisgICAgUHlfQ0xFQVIoc2VsZi0+Y2FjaGUpOworICAgIFB5X0NMRUFSKHNlbGYtPmNhY2hlX2luZm9fdHlwZSk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CisgICAgbHJ1X2NhY2hlX2NsZWFyX2xpc3QobGlzdCk7CisgICAgcmV0dXJuIDA7Cit9CisKKworUHlEb2NfU1RSVkFSKGxydV9jYWNoZV9kb2MsCisiQ3JlYXRlIGEgY2FjaGVkIGNhbGxhYmxlIHRoYXQgd3JhcHMgYW5vdGhlciBmdW5jdGlvbi5cblwKK1xuXAordXNlcl9mdW5jdGlvbjogICAgICB0aGUgZnVuY3Rpb24gYmVpbmcgY2FjaGVkXG5cCitcblwKK21heHNpemU6ICAwICAgICAgICAgZm9yIG5vIGNhY2hpbmdcblwKKyAgICAgICAgICBOb25lICAgICAgZm9yIHVubGltaXRlZCBjYWNoZSBzaXplXG5cCisgICAgICAgICAgbiAgICAgICAgIGZvciBhIGJvdW5kZWQgY2FjaGVcblwKK1xuXAordHlwZWQ6ICAgIEZhbHNlICAgICBjYWNoZSBmKDMpIGFuZCBmKDMuMCkgYXMgaWRlbnRpY2FsIGNhbGxzXG5cCisgICAgICAgICAgVHJ1ZSAgICAgIGNhY2hlIGYoMykgYW5kIGYoMy4wKSBhcyBkaXN0aW5jdCBjYWxsc1xuXAorXG5cCitjYWNoZV9pbmZvX3R5cGU6ICAgIG5hbWVkdHVwbGUgY2xhc3Mgd2l0aCB0aGUgZmllbGRzOlxuXAorICAgICAgICAgICAgICAgICAgICAgICAgaGl0cyBtaXNzZXMgY3VycnNpemUgbWF4c2l6ZVxuIgorKTsKKworc3RhdGljIFB5TWV0aG9kRGVmIGxydV9jYWNoZV9tZXRob2RzW10gPSB7CisgICAgeyJjYWNoZV9pbmZvIiwgKFB5Q0Z1bmN0aW9uKWxydV9jYWNoZV9jYWNoZV9pbmZvLCBNRVRIX05PQVJHU30sCisgICAgeyJjYWNoZV9jbGVhciIsIChQeUNGdW5jdGlvbilscnVfY2FjaGVfY2FjaGVfY2xlYXIsIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pbHJ1X2NhY2hlX3JlZHVjZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiX19jb3B5X18iLCAoUHlDRnVuY3Rpb24pbHJ1X2NhY2hlX2NvcHksIE1FVEhfVkFSQVJHU30sCisgICAgeyJfX2RlZXBjb3B5X18iLCAoUHlDRnVuY3Rpb24pbHJ1X2NhY2hlX2RlZXBjb3B5LCBNRVRIX1ZBUkFSR1N9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIGxydV9jYWNoZV9nZXRzZXRsaXN0W10gPSB7CisgICAgeyJfX2RpY3RfXyIsIFB5T2JqZWN0X0dlbmVyaWNHZXREaWN0LCBQeU9iamVjdF9HZW5lcmljU2V0RGljdH0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IGxydV9jYWNoZV90eXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJmdW5jdG9vbHMuX2xydV9jYWNoZV93cmFwcGVyIiwgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YobHJ1X2NhY2hlX29iamVjdCksICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3RvcilscnVfY2FjaGVfZGVhbGxvYywgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAodGVybmFyeWZ1bmMpbHJ1X2NhY2hlX2NhbGwsICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIGxydV9jYWNoZV9kb2MsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpbHJ1X2NhY2hlX3RwX3RyYXZlcnNlLC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpbHJ1X2NhY2hlX3RwX2NsZWFyLCAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgbHJ1X2NhY2hlX21ldGhvZHMsICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBscnVfY2FjaGVfZ2V0c2V0bGlzdCwgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIGxydV9jYWNoZV9kZXNjcl9nZXQsICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIG9mZnNldG9mKGxydV9jYWNoZV9vYmplY3QsIGRpY3QpLCAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBscnVfY2FjaGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CisKIC8qIG1vZHVsZSBsZXZlbCBjb2RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBQeURvY19TVFJWQVIobW9kdWxlX2RvYywKQEAgLTU0OCw2ICsxMTk2LDExIEBACiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKK3N0YXRpYyB2b2lkCittb2R1bGVfZnJlZSh2b2lkICptKQoreworICAgIFB5X0NMRUFSKGt3ZF9tYXJrKTsKK30KIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfZnVuY3Rvb2xzbW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKQEAgLTU1OCw3ICsxMjExLDcgQEAKICAgICBOVUxMLAogICAgIE5VTEwsCiAgICAgTlVMTCwKLSAgICBOVUxMCisgICAgbW9kdWxlX2ZyZWUsCiB9OwogCiBQeU1PRElOSVRfRlVOQwpAQCAtNTY5LDYgKzEyMjIsNyBAQAogICAgIGNoYXIgKm5hbWU7CiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlbGlzdFtdID0gewogICAgICAgICAmcGFydGlhbF90eXBlLAorICAgICAgICAmbHJ1X2NhY2hlX3R5cGUsCiAgICAgICAgIE5VTEwKICAgICB9OwogCkBAIC01NzYsNiArMTIzMCwxMiBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAga3dkX21hcmsgPSBQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKSZQeUJhc2VPYmplY3RfVHlwZSwgTlVMTCk7CisgICAgaWYgKCFrd2RfbWFyaykgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGZvciAoaT0wIDsgdHlwZWxpc3RbaV0gIT0gTlVMTCA7IGkrKykgewogICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KHR5cGVsaXN0W2ldKSA8IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2dkYm1tb2R1bGUuYyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwppbmRleCAyMjllMTZlLi5iODQwYmY1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCkBAIC0xNiwxNyArMTYsMjMgQEAKIGV4dGVybiBjb25zdCBjaGFyICogZ2RibV9zdHJlcnJvcihnZGJtX2Vycm9yKTsKICNlbmRpZgogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgX2dkYm0KK2NsYXNzIF9nZGJtLmdkYm0gImRibW9iamVjdCAqIiAiJkRibXR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0xMTM5MjdjNjE3MDcyOWIyXSovCisKIFB5RG9jX1NUUlZBUihnZGJtbW9kdWxlX19kb2NfXywKICJUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIEdOVSBEQk0gKEdEQk0pIGxpYnJhcnkuXG5cCiBcblwKIFRoaXMgbW9kdWxlIGlzIHF1aXRlIHNpbWlsYXIgdG8gdGhlIGRibSBtb2R1bGUsIGJ1dCB1c2VzIEdEQk0gaW5zdGVhZCB0b1xuXAotcHJvdmlkZSBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgZmlsZSBmb3JtYXRzXG5cCi1jcmVhdGVkIGJ5IEdEQk0gYW5kIGRibSBhcmUgaW5jb21wYXRpYmxlLiBcblwKK3Byb3ZpZGUgc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBmaWxlIGZvcm1hdHNcblwKK2NyZWF0ZWQgYnkgR0RCTSBhbmQgZGJtIGFyZSBpbmNvbXBhdGlibGUuXG5cCiBcblwKIEdEQk0gb2JqZWN0cyBiZWhhdmUgbGlrZSBtYXBwaW5ncyAoZGljdGlvbmFyaWVzKSwgZXhjZXB0IHRoYXQga2V5cyBhbmRcblwKLXZhbHVlcyBhcmUgYWx3YXlzIHN0cmluZ3MuIFByaW50aW5nIGEgR0RCTSBvYmplY3QgZG9lc24ndCBwcmludCB0aGVcblwKLWtleXMgYW5kIHZhbHVlcywgYW5kIHRoZSBpdGVtcygpIGFuZCB2YWx1ZXMoKSBtZXRob2RzIGFyZSBub3RcblwKLXN1cHBvcnRlZC4iKTsKK3ZhbHVlcyBhcmUgYWx3YXlzIGltbXV0YWJsZSBieXRlcy1saWtlIG9iamVjdHMgb3Igc3RyaW5ncy4gIFByaW50aW5nXG5cCithIEdEQk0gb2JqZWN0IGRvZXNuJ3QgcHJpbnQgdGhlIGtleXMgYW5kIHZhbHVlcywgYW5kIHRoZSBpdGVtcygpIGFuZFxuXAordmFsdWVzKCkgbWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZC4iKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTM2LDYgKzQyLDggQEAKIAogc3RhdGljIFB5VHlwZU9iamVjdCBEYm10eXBlOwogCisjaW5jbHVkZSAiY2xpbmljL19nZGJtbW9kdWxlLmMuaCIKKwogI2RlZmluZSBpc19kYm1vYmplY3QodikgKFB5X1RZUEUodikgPT0gJkRibXR5cGUpCiAjZGVmaW5lIGNoZWNrX2RibW9iamVjdF9vcGVuKHYpIGlmICgodiktPmRpX2RibSA9PSBOVUxMKSBcCiAgICAgeyBQeUVycl9TZXRTdHJpbmcoRGJtRXJyb3IsICJHREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpOyBcCkBAIC00OCwxNSArNTYsMTUgQEAKIFB5RG9jX1NUUlZBUihnZGJtX29iamVjdF9fZG9jX18sCiAiVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhIEdEQk0gZGF0YWJhc2UuXG5cCiBHREJNIG9iamVjdHMgYmVoYXZlIGxpa2UgbWFwcGluZ3MgKGRpY3Rpb25hcmllcyksIGV4Y2VwdCB0aGF0IGtleXMgYW5kXG5cCi12YWx1ZXMgYXJlIGFsd2F5cyBzdHJpbmdzLiBQcmludGluZyBhIEdEQk0gb2JqZWN0IGRvZXNuJ3QgcHJpbnQgdGhlXG5cCi1rZXlzIGFuZCB2YWx1ZXMsIGFuZCB0aGUgaXRlbXMoKSBhbmQgdmFsdWVzKCkgbWV0aG9kcyBhcmUgbm90XG5cCi1zdXBwb3J0ZWQuXG5cCit2YWx1ZXMgYXJlIGFsd2F5cyBpbW11dGFibGUgYnl0ZXMtbGlrZSBvYmplY3RzIG9yIHN0cmluZ3MuICBQcmludGluZ1xuXAorYSBHREJNIG9iamVjdCBkb2Vzbid0IHByaW50IHRoZSBrZXlzIGFuZCB2YWx1ZXMsIGFuZCB0aGUgaXRlbXMoKSBhbmRcblwKK3ZhbHVlcygpIG1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQuXG5cCiBcblwKIEdEQk0gb2JqZWN0cyBhbHNvIHN1cHBvcnQgYWRkaXRpb25hbCBvcGVyYXRpb25zIHN1Y2ggYXMgZmlyc3RrZXksXG5cCiBuZXh0a2V5LCByZW9yZ2FuaXplLCBhbmQgc3luYy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLW5ld2RibW9iamVjdChjaGFyICpmaWxlLCBpbnQgZmxhZ3MsIGludCBtb2RlKQorbmV3ZGJtb2JqZWN0KGNvbnN0IGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IG1vZGUpCiB7CiAgICAgZGJtb2JqZWN0ICpkcDsKIApAQCAtNjUsNyArNzMsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkcC0+ZGlfc2l6ZSA9IC0xOwogICAgIGVycm5vID0gMDsKLSAgICBpZiAoKGRwLT5kaV9kYm0gPSBnZGJtX29wZW4oZmlsZSwgMCwgZmxhZ3MsIG1vZGUsIE5VTEwpKSA9PSAwKSB7CisgICAgaWYgKChkcC0+ZGlfZGJtID0gZ2RibV9vcGVuKChjaGFyICopZmlsZSwgMCwgZmxhZ3MsIG1vZGUsIE5VTEwpKSA9PSAwKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSAwKQogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKERibUVycm9yKTsKICAgICAgICAgZWxzZQpAQCAtMTM1LDI0ICsxNDMsMjcgQEAKICAgICByZXR1cm4gdjsKIH0KIAotUHlEb2NfU1RSVkFSKGRibV9nZXRfX2RvY19fLAotImdldChrZXlbLCBkZWZhdWx0XSkgLT4gdmFsdWVcblwKLUdldCB0aGUgdmFsdWUgZm9yIGtleSwgb3IgZGVmYXVsdCBpZiBub3QgcHJlc2VudDsgaWYgbm90IGdpdmVuLFxuXAotZGVmYXVsdCBpcyBOb25lLiIpOworLypbY2xpbmljIGlucHV0XQorX2dkYm0uZ2RibS5nZXQKKworICAgIGtleTogb2JqZWN0CisgICAgZGVmYXVsdDogb2JqZWN0ID0gTm9uZQorICAgIC8KKworR2V0IHRoZSB2YWx1ZSBmb3Iga2V5LCBvciBkZWZhdWx0IGlmIG5vdCBwcmVzZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2dldChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKK19nZGJtX2dkYm1fZ2V0X2ltcGwoZGJtb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xOWI3YzU4NWFkNGY1NTRhIGlucHV0PWE5YzIwNDIzZjM0YzE3YjZdKi8KIHsKLSAgICBQeU9iamVjdCAqdiwgKnJlczsKLSAgICBQeU9iamVjdCAqZGVmID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqcmVzOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZ2V0IiwgMSwgMiwgJnYsICZkZWYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXMgPSBkYm1fc3Vic2NyaXB0KGRwLCB2KTsKKyAgICByZXMgPSBkYm1fc3Vic2NyaXB0KHNlbGYsIGtleSk7CiAgICAgaWYgKHJlcyA9PSBOVUxMICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIFB5X0lOQ1JFRihkZWYpOwotICAgICAgICByZXR1cm4gZGVmOworICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CisgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwogICAgIH0KICAgICByZXR1cm4gcmVzOwogfQpAQCAtMTk4LDI1ICsyMDksMjkgQEAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKGRibV9zZXRkZWZhdWx0X19kb2NfXywKLSJzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuXAotR2V0IHZhbHVlIGZvciBrZXksIG9yIHNldCBpdCB0byBkZWZhdWx0IGFuZCByZXR1cm4gZGVmYXVsdCBpZiBub3QgcHJlc2VudDtcblwKLWlmIG5vdCBnaXZlbiwgZGVmYXVsdCBpcyBOb25lLiIpOworLypbY2xpbmljIGlucHV0XQorX2dkYm0uZ2RibS5zZXRkZWZhdWx0CisKKyAgICBrZXk6IG9iamVjdAorICAgIGRlZmF1bHQ6IG9iamVjdCA9IE5vbmUKKyAgICAvCisKK0dldCB2YWx1ZSBmb3Iga2V5LCBvciBzZXQgaXQgdG8gZGVmYXVsdCBhbmQgcmV0dXJuIGRlZmF1bHQgaWYgbm90IHByZXNlbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fc2V0ZGVmYXVsdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKK19nZGJtX2dkYm1fc2V0ZGVmYXVsdF9pbXBsKGRibW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg4NzYwZWU1MjAzMjkwMTIgaW5wdXQ9MGRiNDZiNjllOTY4MDE3MV0qLwogewotICAgIFB5T2JqZWN0ICp2LCAqcmVzOwotICAgIFB5T2JqZWN0ICpkZWYgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpyZXM7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRkZWZhdWx0IiwgMSwgMiwgJnYsICZkZWYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXMgPSBkYm1fc3Vic2NyaXB0KGRwLCB2KTsKKyAgICByZXMgPSBkYm1fc3Vic2NyaXB0KHNlbGYsIGtleSk7CiAgICAgaWYgKHJlcyA9PSBOVUxMICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGlmIChkYm1fYXNzX3N1YihkcCwgdiwgZGVmKSA8IDApCisgICAgICAgIGlmIChkYm1fYXNzX3N1YihzZWxmLCBrZXksIGRlZmF1bHRfdmFsdWUpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByZXR1cm4gZGJtX3N1YnNjcmlwdChkcCwgdik7CisgICAgICAgIHJldHVybiBkYm1fc3Vic2NyaXB0KHNlbGYsIGtleSk7CiAgICAgfQogICAgIHJldHVybiByZXM7CiB9CkBAIC0yMjcsNDMgKzI0Miw0OSBAQAogICAgIChvYmpvYmphcmdwcm9jKWRibV9hc3Nfc3ViLCAgICAgICAgIC8qbXBfYXNzX3N1YnNjcmlwdCovCiB9OwogCi1QeURvY19TVFJWQVIoZGJtX2Nsb3NlX19kb2NfXywKLSJjbG9zZSgpIC0+IE5vbmVcblwKLUNsb3NlcyB0aGUgZGF0YWJhc2UuIik7CisvKltjbGluaWMgaW5wdXRdCitfZ2RibS5nZGJtLmNsb3NlCisKK0Nsb3NlIHRoZSBkYXRhYmFzZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9jbG9zZShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorX2dkYm1fZ2RibV9jbG9zZV9pbXBsKGRibW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMzUxMmE1OTQ1OThiNTYzIGlucHV0PTBhMjAzNDQ3Mzc5YjQ1ZmRdKi8KIHsKLSAgICBpZiAoZHAtPmRpX2RibSkKLSAgICAgICAgZ2RibV9jbG9zZShkcC0+ZGlfZGJtKTsKLSAgICBkcC0+ZGlfZGJtID0gTlVMTDsKKyAgICBpZiAoc2VsZi0+ZGlfZGJtKQorICAgICAgICBnZGJtX2Nsb3NlKHNlbGYtPmRpX2RibSk7CisgICAgc2VsZi0+ZGlfZGJtID0gTlVMTDsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKIC8qIFhYWCBTaG91bGQgcmV0dXJuIGEgc2V0IG9yIGEgc2V0IHZpZXcgKi8KLVB5RG9jX1NUUlZBUihkYm1fa2V5c19fZG9jX18sCi0ia2V5cygpIC0+IGxpc3Rfb2Zfa2V5c1xuXAotR2V0IGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuIik7CisvKltjbGluaWMgaW5wdXRdCitfZ2RibS5nZGJtLmtleXMKKworR2V0IGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorX2dkYm1fZ2RibV9rZXlzX2ltcGwoZGJtb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWNiNGIxNzc2YzM2NDVkY2MgaW5wdXQ9MTgzMmVlMGEzMTMyY2ZhZl0qLwogewogICAgIFB5T2JqZWN0ICp2LCAqaXRlbTsKICAgICBkYXR1bSBrZXksIG5leHRrZXk7CiAgICAgaW50IGVycjsKIAotICAgIGlmIChkcCA9PSBOVUxMIHx8ICFpc19kYm1vYmplY3QoZHApKSB7CisgICAgaWYgKHNlbGYgPT0gTlVMTCB8fCAhaXNfZGJtb2JqZWN0KHNlbGYpKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOworICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKHNlbGYpOwogCiAgICAgdiA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBrZXkgPSBnZGJtX2ZpcnN0a2V5KGRwLT5kaV9kYm0pOworICAgIGtleSA9IGdkYm1fZmlyc3RrZXkoc2VsZi0+ZGlfZGJtKTsKICAgICB3aGlsZSAoa2V5LmRwdHIpIHsKICAgICAgICAgaXRlbSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoa2V5LmRwdHIsIGtleS5kc2l6ZSk7CiAgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKQEAgLTI3OCw3ICsyOTksNyBAQAogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgbmV4dGtleSA9IGdkYm1fbmV4dGtleShkcC0+ZGlfZGJtLCBrZXkpOworICAgICAgICBuZXh0a2V5ID0gZ2RibV9uZXh0a2V5KHNlbGYtPmRpX2RibSwga2V5KTsKICAgICAgICAgZnJlZShrZXkuZHB0cik7CiAgICAgICAgIGtleSA9IG5leHRrZXk7CiAgICAgfQpAQCAtMzI5LDIxICszNTAsMjUgQEAKICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogc3FfaW5wbGFjZV9yZXBlYXQgKi8KIH07CiAKLVB5RG9jX1NUUlZBUihkYm1fZmlyc3RrZXlfX2RvY19fLAotImZpcnN0a2V5KCkgLT4ga2V5XG5cCi1JdCdzIHBvc3NpYmxlIHRvIGxvb3Agb3ZlciBldmVyeSBrZXkgaW4gdGhlIGRhdGFiYXNlIHVzaW5nIHRoaXMgbWV0aG9kXG5cCi1hbmQgdGhlIG5leHRrZXkoKSBtZXRob2QuIFRoZSB0cmF2ZXJzYWwgaXMgb3JkZXJlZCBieSBHREJNJ3MgaW50ZXJuYWxcblwKLWhhc2ggdmFsdWVzLCBhbmQgd29uJ3QgYmUgc29ydGVkIGJ5IHRoZSBrZXkgdmFsdWVzLiBUaGlzIG1ldGhvZFxuXAotcmV0dXJucyB0aGUgc3RhcnRpbmcga2V5LiIpOworLypbY2xpbmljIGlucHV0XQorX2dkYm0uZ2RibS5maXJzdGtleQorCitSZXR1cm4gdGhlIHN0YXJ0aW5nIGtleSBmb3IgdGhlIHRyYXZlcnNhbC4KKworSXQncyBwb3NzaWJsZSB0byBsb29wIG92ZXIgZXZlcnkga2V5IGluIHRoZSBkYXRhYmFzZSB1c2luZyB0aGlzIG1ldGhvZAorYW5kIHRoZSBuZXh0a2V5KCkgbWV0aG9kLiAgVGhlIHRyYXZlcnNhbCBpcyBvcmRlcmVkIGJ5IEdEQk0ncyBpbnRlcm5hbAoraGFzaCB2YWx1ZXMsIGFuZCB3b24ndCBiZSBzb3J0ZWQgYnkgdGhlIGtleSB2YWx1ZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fZmlyc3RrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK19nZGJtX2dkYm1fZmlyc3RrZXlfaW1wbChkYm1vYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWZmODU2MjhkODRiNjVkMiBpbnB1dD0wZGJkNmEzMzVkNjliYmEwXSovCiB7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5OwogCi0gICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwotICAgIGtleSA9IGdkYm1fZmlyc3RrZXkoZHAtPmRpX2RibSk7CisgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oc2VsZik7CisgICAga2V5ID0gZ2RibV9maXJzdGtleShzZWxmLT5kaV9kYm0pOwogICAgIGlmIChrZXkuZHB0cikgewogICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShrZXkuZHB0ciwga2V5LmRzaXplKTsKICAgICAgICAgZnJlZShrZXkuZHB0cik7CkBAIC0zNTUsMjcgKzM4MCwzNSBAQAogICAgIH0KIH0KIAotUHlEb2NfU1RSVkFSKGRibV9uZXh0a2V5X19kb2NfXywKLSJuZXh0a2V5KGtleSkgLT4gbmV4dF9rZXlcblwKLVJldHVybnMgdGhlIGtleSB0aGF0IGZvbGxvd3Mga2V5IGluIHRoZSB0cmF2ZXJzYWwuXG5cCi1UaGUgZm9sbG93aW5nIGNvZGUgcHJpbnRzIGV2ZXJ5IGtleSBpbiB0aGUgZGF0YWJhc2UgZGIsIHdpdGhvdXQgaGF2aW5nXG5cCi10byBjcmVhdGUgYSBsaXN0IGluIG1lbW9yeSB0aGF0IGNvbnRhaW5zIHRoZW0gYWxsOlxuXAotXG5cCi0gICAgICBrID0gZGIuZmlyc3RrZXkoKVxuXAotICAgICAgd2hpbGUgayAhPSBOb25lOlxuXAotICAgICAgICAgIHByaW50IGtcblwKLSAgICAgICAgICBrID0gZGIubmV4dGtleShrKSIpOworLypbY2xpbmljIGlucHV0XQorX2dkYm0uZ2RibS5uZXh0a2V5CisKKyAgICBrZXk6IHN0cihhY2NlcHQ9e3N0ciwgcm9idWZmZXJ9LCB6ZXJvZXM9VHJ1ZSkKKyAgICAvCisKK1JldHVybnMgdGhlIGtleSB0aGF0IGZvbGxvd3Mga2V5IGluIHRoZSB0cmF2ZXJzYWwuCisKK1RoZSBmb2xsb3dpbmcgY29kZSBwcmludHMgZXZlcnkga2V5IGluIHRoZSBkYXRhYmFzZSBkYiwgd2l0aG91dCBoYXZpbmcKK3RvIGNyZWF0ZSBhIGxpc3QgaW4gbWVtb3J5IHRoYXQgY29udGFpbnMgdGhlbSBhbGw6CisKKyAgICAgIGsgPSBkYi5maXJzdGtleSgpCisgICAgICB3aGlsZSBrICE9IE5vbmU6CisgICAgICAgICAgcHJpbnQoaykKKyAgICAgICAgICBrID0gZGIubmV4dGtleShrKQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX25leHRrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCitfZ2RibV9nZGJtX25leHRrZXlfaW1wbChkYm1vYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xOTJhYjg5MmRlNmViMmY2IGlucHV0PTFmMTYwNjk0MzYxNGUzNmZdKi8KIHsKICAgICBQeU9iamVjdCAqdjsKLSAgICBkYXR1bSBrZXksIG5leHRrZXk7CisgICAgZGF0dW0gZGJtX2tleSwgbmV4dGtleTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6bmV4dGtleSIsICZrZXkuZHB0ciwgJmtleS5kc2l6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKLSAgICBuZXh0a2V5ID0gZ2RibV9uZXh0a2V5KGRwLT5kaV9kYm0sIGtleSk7CisgICAgZGJtX2tleS5kcHRyID0gKGNoYXIgKilrZXk7CisgICAgZGJtX2tleS5kc2l6ZSA9IGtleV9sZW5ndGg7CisgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oc2VsZik7CisgICAgbmV4dGtleSA9IGdkYm1fbmV4dGtleShzZWxmLT5kaV9kYm0sIGRibV9rZXkpOwogICAgIGlmIChuZXh0a2V5LmRwdHIpIHsKICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUobmV4dGtleS5kcHRyLCBuZXh0a2V5LmRzaXplKTsKICAgICAgICAgZnJlZShuZXh0a2V5LmRwdHIpOwpAQCAtMzg3LDIwICs0MjAsMjUgQEAKICAgICB9CiB9CiAKLVB5RG9jX1NUUlZBUihkYm1fcmVvcmdhbml6ZV9fZG9jX18sCi0icmVvcmdhbml6ZSgpIC0+IE5vbmVcblwKLUlmIHlvdSBoYXZlIGNhcnJpZWQgb3V0IGEgbG90IG9mIGRlbGV0aW9ucyBhbmQgd291bGQgbGlrZSB0byBzaHJpbmtcblwKLXRoZSBzcGFjZSB1c2VkIGJ5IHRoZSBHREJNIGZpbGUsIHRoaXMgcm91dGluZSB3aWxsIHJlb3JnYW5pemUgdGhlXG5cCi1kYXRhYmFzZS4gR0RCTSB3aWxsIG5vdCBzaG9ydGVuIHRoZSBsZW5ndGggb2YgYSBkYXRhYmFzZSBmaWxlIGV4Y2VwdFxuXAotYnkgdXNpbmcgdGhpcyByZW9yZ2FuaXphdGlvbjsgb3RoZXJ3aXNlLCBkZWxldGVkIGZpbGUgc3BhY2Ugd2lsbCBiZVxuXAota2VwdCBhbmQgcmV1c2VkIGFzIG5ldyAoa2V5LHZhbHVlKSBwYWlycyBhcmUgYWRkZWQuIik7CisvKltjbGluaWMgaW5wdXRdCitfZ2RibS5nZGJtLnJlb3JnYW5pemUKKworUmVvcmdhbml6ZSB0aGUgZGF0YWJhc2UuCisKK0lmIHlvdSBoYXZlIGNhcnJpZWQgb3V0IGEgbG90IG9mIGRlbGV0aW9ucyBhbmQgd291bGQgbGlrZSB0byBzaHJpbmsKK3RoZSBzcGFjZSB1c2VkIGJ5IHRoZSBHREJNIGZpbGUsIHRoaXMgcm91dGluZSB3aWxsIHJlb3JnYW5pemUgdGhlCitkYXRhYmFzZS4gIEdEQk0gd2lsbCBub3Qgc2hvcnRlbiB0aGUgbGVuZ3RoIG9mIGEgZGF0YWJhc2UgZmlsZSBleGNlcHQKK2J5IHVzaW5nIHRoaXMgcmVvcmdhbml6YXRpb247IG90aGVyd2lzZSwgZGVsZXRlZCBmaWxlIHNwYWNlIHdpbGwgYmUKK2tlcHQgYW5kIHJldXNlZCBhcyBuZXcgKGtleSx2YWx1ZSkgcGFpcnMgYXJlIGFkZGVkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3Jlb3JnYW5pemUoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK19nZGJtX2dkYm1fcmVvcmdhbml6ZV9pbXBsKGRibW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zOGQ5NjI0ZGY5MmU5NjFkIGlucHV0PWY2YmVhODViY2ZkNDBkZDJdKi8KIHsKLSAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CisgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oc2VsZik7CiAgICAgZXJybm8gPSAwOwotICAgIGlmIChnZGJtX3Jlb3JnYW5pemUoZHAtPmRpX2RibSkgPCAwKSB7CisgICAgaWYgKGdkYm1fcmVvcmdhbml6ZShzZWxmLT5kaV9kYm0pIDwgMCkgewogICAgICAgICBpZiAoZXJybm8gIT0gMCkKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhEYm1FcnJvcik7CiAgICAgICAgIGVsc2UKQEAgLTQxMSwxNiArNDQ5LDIxIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLVB5RG9jX1NUUlZBUihkYm1fc3luY19fZG9jX18sCi0ic3luYygpIC0+IE5vbmVcblwKLVdoZW4gdGhlIGRhdGFiYXNlIGhhcyBiZWVuIG9wZW5lZCBpbiBmYXN0IG1vZGUsIHRoaXMgbWV0aG9kIGZvcmNlc1xuXAotYW55IHVud3JpdHRlbiBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGRpc2suIik7CisvKltjbGluaWMgaW5wdXRdCitfZ2RibS5nZGJtLnN5bmMKKworRmx1c2ggdGhlIGRhdGFiYXNlIHRvIHRoZSBkaXNrIGZpbGUuCisKK1doZW4gdGhlIGRhdGFiYXNlIGhhcyBiZWVuIG9wZW5lZCBpbiBmYXN0IG1vZGUsIHRoaXMgbWV0aG9kIGZvcmNlcworYW55IHVud3JpdHRlbiBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGRpc2suCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fc3luYyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorX2dkYm1fZ2RibV9zeW5jX2ltcGwoZGJtb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQ4OGIxNWY0NzAyOGYxMjUgaW5wdXQ9MmE0N2QyYzllMTUzYWI4YV0qLwogewotICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKLSAgICBnZGJtX3N5bmMoZHAtPmRpX2RibSk7CisgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oc2VsZik7CisgICAgZ2RibV9zeW5jKHNlbGYtPmRpX2RibSk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNDQwLDE0ICs0ODMsMTUgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGRibV9tZXRob2RzW10gPSB7Ci0gICAgeyJjbG9zZSIsICAgICAoUHlDRnVuY3Rpb24pZGJtX2Nsb3NlLCAgIE1FVEhfTk9BUkdTLCBkYm1fY2xvc2VfX2RvY19ffSwKLSAgICB7ImtleXMiLCAgICAgIChQeUNGdW5jdGlvbilkYm1fa2V5cywgICAgTUVUSF9OT0FSR1MsIGRibV9rZXlzX19kb2NfX30sCi0gICAgeyJmaXJzdGtleSIsICAoUHlDRnVuY3Rpb24pZGJtX2ZpcnN0a2V5LE1FVEhfTk9BUkdTLCBkYm1fZmlyc3RrZXlfX2RvY19ffSwKLSAgICB7Im5leHRrZXkiLCAgIChQeUNGdW5jdGlvbilkYm1fbmV4dGtleSwgTUVUSF9WQVJBUkdTLCBkYm1fbmV4dGtleV9fZG9jX199LAotICAgIHsicmVvcmdhbml6ZSIsKFB5Q0Z1bmN0aW9uKWRibV9yZW9yZ2FuaXplLE1FVEhfTk9BUkdTLCBkYm1fcmVvcmdhbml6ZV9fZG9jX199LAotICAgIHsic3luYyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zeW5jLCAgICBNRVRIX05PQVJHUywgZGJtX3N5bmNfX2RvY19ffSwKLSAgICB7ImdldCIsICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgTUVUSF9WQVJBUkdTLCBkYm1fZ2V0X19kb2NfX30sCi0gICAgeyJzZXRkZWZhdWx0IiwoUHlDRnVuY3Rpb24pZGJtX3NldGRlZmF1bHQsTUVUSF9WQVJBUkdTLCBkYm1fc2V0ZGVmYXVsdF9fZG9jX199LAorICAgIF9HREJNX0dEQk1fQ0xPU0VfTUVUSE9EREVGCisgICAgX0dEQk1fR0RCTV9LRVlTX01FVEhPRERFRgorICAgIF9HREJNX0dEQk1fRklSU1RLRVlfTUVUSE9EREVGCisgICAgX0dEQk1fR0RCTV9ORVhUS0VZX01FVEhPRERFRgorICAgIF9HREJNX0dEQk1fUkVPUkdBTklaRV9NRVRIT0RERUYKKyAgICBfR0RCTV9HREJNX1NZTkNfTUVUSE9EREVGCisgICAgX0dEQk1fR0RCTV9HRVRfTUVUSE9EREVGCisgICAgX0dEQk1fR0RCTV9HRVRfTUVUSE9EREVGCisgICAgX0dEQk1fR0RCTV9TRVRERUZBVUxUX01FVEhPRERFRgogICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCiAgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtNDg2LDQwICs1MzAsNDMgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotUHlEb2NfU1RSVkFSKGRibW9wZW5fX2RvY19fLAotIm9wZW4oZmlsZW5hbWUsIFtmbGFncywgW21vZGVdXSkgIC0+IGRibV9vYmplY3RcblwKLU9wZW4gYSBkYm0gZGF0YWJhc2UgYW5kIHJldHVybiBhIGRibSBvYmplY3QuIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBpc1xuXAotdGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGZpbGUuXG5cCi1cblwKLVRoZSBvcHRpb25hbCBmbGFncyBhcmd1bWVudCBjYW4gYmUgJ3InICh0byBvcGVuIGFuIGV4aXN0aW5nIGRhdGFiYXNlXG5cCi1mb3IgcmVhZGluZyBvbmx5IC0tIGRlZmF1bHQpLCAndycgKHRvIG9wZW4gYW4gZXhpc3RpbmcgZGF0YWJhc2UgZm9yXG5cCi1yZWFkaW5nIGFuZCB3cml0aW5nKSwgJ2MnICh3aGljaCBjcmVhdGVzIHRoZSBkYXRhYmFzZSBpZiBpdCBkb2Vzbid0XG5cCi1leGlzdCksIG9yICduJyAod2hpY2ggYWx3YXlzIGNyZWF0ZXMgYSBuZXcgZW1wdHkgZGF0YWJhc2UpLlxuXAotXG5cCi1Tb21lIHZlcnNpb25zIG9mIGdkYm0gc3VwcG9ydCBhZGRpdGlvbmFsIGZsYWdzIHdoaWNoIG11c3QgYmVcblwKLWFwcGVuZGVkIHRvIG9uZSBvZiB0aGUgZmxhZ3MgZGVzY3JpYmVkIGFib3ZlLiBUaGUgbW9kdWxlIGNvbnN0YW50XG5cCi0nb3Blbl9mbGFncycgaXMgYSBzdHJpbmcgb2YgdmFsaWQgYWRkaXRpb25hbCBmbGFncy4gVGhlICdmJyBmbGFnXG5cCi1vcGVucyB0aGUgZGF0YWJhc2UgaW4gZmFzdCBtb2RlOyBhbHRlcmVkIGRhdGEgd2lsbCBub3QgYXV0b21hdGljYWxseVxuXAotYmUgd3JpdHRlbiB0byB0aGUgZGlzayBhZnRlciBldmVyeSBjaGFuZ2UuIFRoaXMgcmVzdWx0cyBpbiBmYXN0ZXJcblwKLXdyaXRlcyB0byB0aGUgZGF0YWJhc2UsIGJ1dCBtYXkgcmVzdWx0IGluIGFuIGluY29uc2lzdGVudCBkYXRhYmFzZVxuXAotaWYgdGhlIHByb2dyYW0gY3Jhc2hlcyB3aGlsZSB0aGUgZGF0YWJhc2UgaXMgc3RpbGwgb3Blbi4gVXNlIHRoZVxuXAotc3luYygpIG1ldGhvZCB0byBmb3JjZSBhbnkgdW53cml0dGVuIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGlzay5cblwKLVRoZSAncycgZmxhZyBjYXVzZXMgYWxsIGRhdGFiYXNlIG9wZXJhdGlvbnMgdG8gYmUgc3luY2hyb25pemVkIHRvXG5cCi1kaXNrLiBUaGUgJ3UnIGZsYWcgZGlzYWJsZXMgbG9ja2luZyBvZiB0aGUgZGF0YWJhc2UgZmlsZS5cblwKLVxuXAotVGhlIG9wdGlvbmFsIG1vZGUgYXJndW1lbnQgaXMgdGhlIFVuaXggbW9kZSBvZiB0aGUgZmlsZSwgdXNlZCBvbmx5XG5cCi13aGVuIHRoZSBkYXRhYmFzZSBoYXMgdG8gYmUgY3JlYXRlZC4gSXQgZGVmYXVsdHMgdG8gb2N0YWwgMDY2Ni4gIik7CisvKltjbGluaWMgaW5wdXRdCitfZ2RibS5vcGVuIGFzIGRibW9wZW4KKyAgICBmaWxlbmFtZSBhcyBuYW1lOiBzdHIKKyAgICBmbGFnczogc3RyPSJyIgorICAgIG1vZGU6IGludChweV9kZWZhdWx0PSIwbzY2NiIpID0gMG82NjYKKyAgICAvCisKK09wZW4gYSBkYm0gZGF0YWJhc2UgYW5kIHJldHVybiBhIGRibSBvYmplY3QuCisKK1RoZSBmaWxlbmFtZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZmlsZS4KKworVGhlIG9wdGlvbmFsIGZsYWdzIGFyZ3VtZW50IGNhbiBiZSAncicgKHRvIG9wZW4gYW4gZXhpc3RpbmcgZGF0YWJhc2UKK2ZvciByZWFkaW5nIG9ubHkgLS0gZGVmYXVsdCksICd3JyAodG8gb3BlbiBhbiBleGlzdGluZyBkYXRhYmFzZSBmb3IKK3JlYWRpbmcgYW5kIHdyaXRpbmcpLCAnYycgKHdoaWNoIGNyZWF0ZXMgdGhlIGRhdGFiYXNlIGlmIGl0IGRvZXNuJ3QKK2V4aXN0KSwgb3IgJ24nICh3aGljaCBhbHdheXMgY3JlYXRlcyBhIG5ldyBlbXB0eSBkYXRhYmFzZSkuCisKK1NvbWUgdmVyc2lvbnMgb2YgZ2RibSBzdXBwb3J0IGFkZGl0aW9uYWwgZmxhZ3Mgd2hpY2ggbXVzdCBiZQorYXBwZW5kZWQgdG8gb25lIG9mIHRoZSBmbGFncyBkZXNjcmliZWQgYWJvdmUuICBUaGUgbW9kdWxlIGNvbnN0YW50Cisnb3Blbl9mbGFncycgaXMgYSBzdHJpbmcgb2YgdmFsaWQgYWRkaXRpb25hbCBmbGFncy4gIFRoZSAnZicgZmxhZworb3BlbnMgdGhlIGRhdGFiYXNlIGluIGZhc3QgbW9kZTsgYWx0ZXJlZCBkYXRhIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkKK2JlIHdyaXR0ZW4gdG8gdGhlIGRpc2sgYWZ0ZXIgZXZlcnkgY2hhbmdlLiAgVGhpcyByZXN1bHRzIGluIGZhc3Rlcgord3JpdGVzIHRvIHRoZSBkYXRhYmFzZSwgYnV0IG1heSByZXN1bHQgaW4gYW4gaW5jb25zaXN0ZW50IGRhdGFiYXNlCitpZiB0aGUgcHJvZ3JhbSBjcmFzaGVzIHdoaWxlIHRoZSBkYXRhYmFzZSBpcyBzdGlsbCBvcGVuLiAgVXNlIHRoZQorc3luYygpIG1ldGhvZCB0byBmb3JjZSBhbnkgdW53cml0dGVuIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGlzay4KK1RoZSAncycgZmxhZyBjYXVzZXMgYWxsIGRhdGFiYXNlIG9wZXJhdGlvbnMgdG8gYmUgc3luY2hyb25pemVkIHRvCitkaXNrLiAgVGhlICd1JyBmbGFnIGRpc2FibGVzIGxvY2tpbmcgb2YgdGhlIGRhdGFiYXNlIGZpbGUuCisKK1RoZSBvcHRpb25hbCBtb2RlIGFyZ3VtZW50IGlzIHRoZSBVbml4IG1vZGUgb2YgdGhlIGZpbGUsIHVzZWQgb25seQord2hlbiB0aGUgZGF0YWJhc2UgaGFzIHRvIGJlIGNyZWF0ZWQuICBJdCBkZWZhdWx0cyB0byBvY3RhbCAwbzY2Ni4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibW9wZW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorZGJtb3Blbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZsYWdzLCBpbnQgbW9kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zMWFhMWJhZmRmNWRhNjg4IGlucHV0PTU1NTYzY2Q2MGU1MTk4NGFdKi8KIHsKLSAgICBjaGFyICpuYW1lOwotICAgIGNoYXIgKmZsYWdzID0gInIiOwogICAgIGludCBpZmxhZ3M7Ci0gICAgaW50IG1vZGUgPSAwNjY2OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzfHNpOm9wZW4iLCAmbmFtZSwgJmZsYWdzLCAmbW9kZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIHN3aXRjaCAoZmxhZ3NbMF0pIHsKICAgICBjYXNlICdyJzoKICAgICAgICAgaWZsYWdzID0gR0RCTV9SRUFERVI7CkBAIC01ODAsNyArNjI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBkYm1tb2R1bGVfbWV0aG9kc1tdID0gewotICAgIHsgIm9wZW4iLCAoUHlDRnVuY3Rpb24pZGJtb3BlbiwgTUVUSF9WQVJBUkdTLCBkYm1vcGVuX19kb2NfX30sCisgICAgREJNT1BFTl9NRVRIT0RERUYKICAgICB7IDAsIDAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMgYi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCmluZGV4IDViMGE3YmUuLjQ0NzY1YWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKKysrIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImhhc2hsaWIuaCIKKyNpbmNsdWRlICJweXN0cmhleC5oIgogCiAKIC8qIEVWUCBpcyB0aGUgcHJlZmVycmVkIGludGVyZmFjZSB0byBoYXNoaW5nIGluIE9wZW5TU0wgKi8KQEAgLTMxLDEwICszMiw2IEBACiAjZGVmaW5lIEhBU0hfT0JKX0NPTlNUUlVDVE9SIDAKICNlbmRpZgogCi0vKiBNaW5pbXVtIE9wZW5TU0wgdmVyc2lvbiBuZWVkZWQgdG8gc3VwcG9ydCBzaGEyMjQgYW5kIGhpZ2hlci4gKi8KLSNpZiBkZWZpbmVkKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIpICYmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDgwMDApCi0jZGVmaW5lIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKLSNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtNTYsMTIgKzUzLDEwIEBACiAKIERFRklORV9DT05TVFNfRk9SX05FVyhtZDUpCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcoc2hhMSkKLSNpZmRlZiBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcoc2hhMjI0KQogREVGSU5FX0NPTlNUU19GT1JfTkVXKHNoYTI1NikKIERFRklORV9DT05TVFNfRk9SX05FVyhzaGEzODQpCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcoc2hhNTEyKQotI2VuZGlmCiAKIAogc3RhdGljIEVWUG9iamVjdCAqCkBAIC0xNjMsOSArMTU4LDcgQEAKIHsKICAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtFVlBfTUFYX01EX1NJWkVdOwogICAgIEVWUF9NRF9DVFggdGVtcF9jdHg7Ci0gICAgUHlPYmplY3QgKnJldHZhbDsKLSAgICBjaGFyICpoZXhfZGlnZXN0OwotICAgIHVuc2lnbmVkIGludCBpLCBqLCBkaWdlc3Rfc2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemU7CiAKICAgICAvKiBHZXQgdGhlIHJhdyAoYmluYXJ5KSBkaWdlc3QgdmFsdWUgKi8KICAgICBsb2NrZWRfRVZQX01EX0NUWF9jb3B5KCZ0ZW1wX2N0eCwgc2VsZik7CkBAIC0xNzQsMjIgKzE2Nyw3IEBACiAKICAgICBFVlBfTURfQ1RYX2NsZWFudXAoJnRlbXBfY3R4KTsKIAotICAgIC8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciAqLwotICAgIGhleF9kaWdlc3QgPSBQeU1lbV9NYWxsb2MoZGlnZXN0X3NpemUgKiAyICsgMSk7Ci0gICAgaWYgKCFoZXhfZGlnZXN0KQotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLQotICAgIC8qIE1ha2UgaGV4IHZlcnNpb24gb2YgdGhlIGRpZ2VzdCAqLwotICAgIGZvcihpPWo9MDsgaTxkaWdlc3Rfc2l6ZTsgaSsrKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKLSAgICAgICAgYyA9IChkaWdlc3RbaV0gPj4gNCkgJiAweGY7Ci0gICAgICAgIGhleF9kaWdlc3RbaisrXSA9IFB5X2hleGRpZ2l0c1tjXTsKLSAgICAgICAgYyA9IChkaWdlc3RbaV0gJiAweGYpOwotICAgICAgICBoZXhfZGlnZXN0W2orK10gPSBQeV9oZXhkaWdpdHNbY107Ci0gICAgfQotICAgIHJldHZhbCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShoZXhfZGlnZXN0LCBkaWdlc3Rfc2l6ZSAqIDIpOwotICAgIFB5TWVtX0ZyZWUoaGV4X2RpZ2VzdCk7Ci0gICAgcmV0dXJuIHJldHZhbDsKKyAgICByZXR1cm4gX1B5X3N0cmhleCgoY29uc3QgY2hhciAqKWRpZ2VzdCwgZGlnZXN0X3NpemUpOwogfQogCiBQeURvY19TVFJWQVIoRVZQX3VwZGF0ZV9fZG9jX18sCkBAIC03OTgsMTIgKzc3NiwxMCBAQAogCiBHRU5fQ09OU1RSVUNUT1IobWQ1KQogR0VOX0NPTlNUUlVDVE9SKHNoYTEpCi0jaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgogR0VOX0NPTlNUUlVDVE9SKHNoYTIyNCkKIEdFTl9DT05TVFJVQ1RPUihzaGEyNTYpCiBHRU5fQ09OU1RSVUNUT1Ioc2hhMzg0KQogR0VOX0NPTlNUUlVDVE9SKHNoYTUxMikKLSNlbmRpZgogCiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLwogCkBAIC04MTUsMTIgKzc5MSwxMCBAQAogI2VuZGlmCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYobWQ1KSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGExKSwKLSNpZmRlZiBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhMjI0KSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGEyNTYpLAogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKHNoYTM4NCksCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhNTEyKSwKLSNlbmRpZgogICAgIHtOVUxMLCAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKQEAgLTg3NywxMSArODUxLDkgQEAKICAgICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIHVzZWQgYnkgdGhlIGNvbnZlbmllbmNlIGNvbnN0cnVjdG9ycyAqLwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKG1kNSk7CiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMoc2hhMSk7Ci0jaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKHNoYTIyNCk7CiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMoc2hhMjU2KTsKICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhzaGEzODQpOwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKHNoYTUxMik7Ci0jZW5kaWYKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMgYi9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCmluZGV4IDA0ODQ1ZjEuLjEzNmFiZjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwpAQCAtOSw5ICs5LDkgQEAKICNpbmNsdWRlICJQeXRob24uaCIKIAogc3RhdGljIGludAotX3NpZnRkb3duKFB5TGlzdE9iamVjdCAqaGVhcCwgUHlfc3NpemVfdCBzdGFydHBvcywgUHlfc3NpemVfdCBwb3MpCitzaWZ0ZG93bihQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3Qgc3RhcnRwb3MsIFB5X3NzaXplX3QgcG9zKQogewotICAgIFB5T2JqZWN0ICpuZXdpdGVtLCAqcGFyZW50OworICAgIFB5T2JqZWN0ICpuZXdpdGVtLCAqcGFyZW50LCAqKmFycjsKICAgICBQeV9zc2l6ZV90IHBhcmVudHBvcywgc2l6ZTsKICAgICBpbnQgY21wOwogCkBAIC0yNCwxMiArMjQsMTMgQEAKIAogICAgIC8qIEZvbGxvdyB0aGUgcGF0aCB0byB0aGUgcm9vdCwgbW92aW5nIHBhcmVudHMgZG93biB1bnRpbCBmaW5kaW5nCiAgICAgICAgYSBwbGFjZSBuZXdpdGVtIGZpdHMuICovCi0gICAgbmV3aXRlbSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpOworICAgIGFyciA9IF9QeUxpc3RfSVRFTVMoaGVhcCk7CisgICAgbmV3aXRlbSA9IGFycltwb3NdOwogICAgIHdoaWxlIChwb3MgPiBzdGFydHBvcykgewogICAgICAgICBwYXJlbnRwb3MgPSAocG9zIC0gMSkgPj4gMTsKLSAgICAgICAgcGFyZW50ID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBhcmVudHBvcyk7CisgICAgICAgIHBhcmVudCA9IGFycltwYXJlbnRwb3NdOwogICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wobmV3aXRlbSwgcGFyZW50LCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXAgPT0gLTEpCisgICAgICAgIGlmIChjbXAgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoc2l6ZSAhPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0zOCwyMCArMzksMjEgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoY21wID09IDApCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgcGFyZW50ID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBhcmVudHBvcyk7Ci0gICAgICAgIG5ld2l0ZW0gPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgcG9zKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBhcmVudHBvcywgbmV3aXRlbSk7Ci0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCBwb3MsIHBhcmVudCk7CisgICAgICAgIGFyciA9IF9QeUxpc3RfSVRFTVMoaGVhcCk7CisgICAgICAgIHBhcmVudCA9IGFycltwYXJlbnRwb3NdOworICAgICAgICBuZXdpdGVtID0gYXJyW3Bvc107CisgICAgICAgIGFycltwYXJlbnRwb3NdID0gbmV3aXRlbTsKKyAgICAgICAgYXJyW3Bvc10gPSBwYXJlbnQ7CiAgICAgICAgIHBvcyA9IHBhcmVudHBvczsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLV9zaWZ0dXAoUHlMaXN0T2JqZWN0ICpoZWFwLCBQeV9zc2l6ZV90IHBvcykKK3NpZnR1cChQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3QgcG9zKQogewotICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIGVuZHBvcywgY2hpbGRwb3MsIHJpZ2h0cG9zLCBsaW1pdDsKLSAgICBQeU9iamVjdCAqdG1wMSwgKnRtcDI7CisgICAgUHlfc3NpemVfdCBzdGFydHBvcywgZW5kcG9zLCBjaGlsZHBvcywgbGltaXQ7CisgICAgUHlPYmplY3QgKnRtcDEsICp0bXAyLCAqKmFycjsKICAgICBpbnQgY21wOwogCiAgICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhoZWFwKSk7CkBAIC02MywyMCArNjUsMTkgQEAKICAgICB9CiAKICAgICAvKiBCdWJibGUgdXAgdGhlIHNtYWxsZXIgY2hpbGQgdW50aWwgaGl0dGluZyBhIGxlYWYuICovCisgICAgYXJyID0gX1B5TGlzdF9JVEVNUyhoZWFwKTsKICAgICBsaW1pdCA9IGVuZHBvcyAvIDI7ICAgICAgICAgIC8qIHNtYWxsZXN0IHBvcyB0aGF0IGhhcyBubyBjaGlsZCAqLwogICAgIHdoaWxlIChwb3MgPCBsaW1pdCkgewogICAgICAgICAvKiBTZXQgY2hpbGRwb3MgdG8gaW5kZXggb2Ygc21hbGxlciBjaGlsZC4gICAqLwogICAgICAgICBjaGlsZHBvcyA9IDIqcG9zICsgMTsgICAgLyogbGVmdG1vc3QgY2hpbGQgcG9zaXRpb24gICovCi0gICAgICAgIHJpZ2h0cG9zID0gY2hpbGRwb3MgKyAxOwotICAgICAgICBpZiAocmlnaHRwb3MgPCBlbmRwb3MpIHsKKyAgICAgICAgaWYgKGNoaWxkcG9zICsgMSA8IGVuZHBvcykgewogICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKAotICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfSVRFTShoZWFwLCBjaGlsZHBvcyksCi0gICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHJpZ2h0cG9zKSwKKyAgICAgICAgICAgICAgICBhcnJbY2hpbGRwb3NdLAorICAgICAgICAgICAgICAgIGFycltjaGlsZHBvcyArIDFdLAogICAgICAgICAgICAgICAgIFB5X0xUKTsKLSAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpCisgICAgICAgICAgICBpZiAoY21wIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoY21wID09IDApCi0gICAgICAgICAgICAgICAgY2hpbGRwb3MgPSByaWdodHBvczsKKyAgICAgICAgICAgIGNoaWxkcG9zICs9ICgodW5zaWduZWQpY21wIF4gMSk7ICAgLyogaW5jcmVtZW50IHdoZW4gY21wPT0wICovCiAgICAgICAgICAgICBpZiAoZW5kcG9zICE9IFB5TGlzdF9HRVRfU0laRShoZWFwKSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7CkBAIC04NCwxNCArODUsMTUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBNb3ZlIHRoZSBzbWFsbGVyIGNoaWxkIHVwLiAqLwotICAgICAgICB0bXAxID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIGNoaWxkcG9zKTsKLSAgICAgICAgdG1wMiA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpOwotICAgICAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgY2hpbGRwb3MsIHRtcDIpOwotICAgICAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgcG9zLCB0bXAxKTsKKyAgICAgICAgYXJyID0gX1B5TGlzdF9JVEVNUyhoZWFwKTsKKyAgICAgICAgdG1wMSA9IGFycltjaGlsZHBvc107CisgICAgICAgIHRtcDIgPSBhcnJbcG9zXTsKKyAgICAgICAgYXJyW2NoaWxkcG9zXSA9IHRtcDI7CisgICAgICAgIGFycltwb3NdID0gdG1wMTsKICAgICAgICAgcG9zID0gY2hpbGRwb3M7CiAgICAgfQogICAgIC8qIEJ1YmJsZSBpdCB1cCB0byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZSAoYnkgc2lmdGluZyBpdHMgcGFyZW50cyBkb3duKS4gKi8KLSAgICByZXR1cm4gX3NpZnRkb3duKGhlYXAsIHN0YXJ0cG9zLCBwb3MpOworICAgIHJldHVybiBzaWZ0ZG93bihoZWFwLCBzdGFydHBvcywgcG9zKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEwNywyMCArMTA5LDE5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChQeUxpc3RfQXBwZW5kKGhlYXAsIGl0ZW0pID09IC0xKQorICAgIGlmIChQeUxpc3RfQXBwZW5kKGhlYXAsIGl0ZW0pKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfc2lmdGRvd24oKFB5TGlzdE9iamVjdCAqKWhlYXAsIDAsIFB5TGlzdF9HRVRfU0laRShoZWFwKS0xKSA9PSAtMSkKKyAgICBpZiAoc2lmdGRvd24oKFB5TGlzdE9iamVjdCAqKWhlYXAsIDAsIFB5TGlzdF9HRVRfU0laRShoZWFwKS0xKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBQeURvY19TVFJWQVIoaGVhcHB1c2hfZG9jLAogImhlYXBwdXNoKGhlYXAsIGl0ZW0pIC0+IE5vbmUuIFB1c2ggaXRlbSBvbnRvIGhlYXAsIG1haW50YWluaW5nIHRoZSBoZWFwIGludmFyaWFudC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWhlYXBwb3AoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpoZWFwKQoraGVhcHBvcF9pbnRlcm5hbChQeU9iamVjdCAqaGVhcCwgaW50IHNpZnR1cF9mdW5jKFB5TGlzdE9iamVjdCAqLCBQeV9zc2l6ZV90KSkKIHsKICAgICBQeU9iamVjdCAqbGFzdGVsdCwgKnJldHVybml0ZW07CiAgICAgUHlfc3NpemVfdCBuOwpAQCAtMTMwLDcgKzEzMSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIC8qICMgcmFpc2VzIGFwcHJvcHJpYXRlIEluZGV4RXJyb3IgaWYgaGVhcCBpcyBlbXB0eSAqLworICAgIC8qIHJhaXNlcyBJbmRleEVycm9yIGlmIHRoZSBoZWFwIGlzIGVtcHR5ICovCiAgICAgbiA9IFB5TGlzdF9HRVRfU0laRShoZWFwKTsKICAgICBpZiAobiA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CkBAIC0xMzksNyArMTQwLDcgQEAKIAogICAgIGxhc3RlbHQgPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgbi0xKSA7CiAgICAgUHlfSU5DUkVGKGxhc3RlbHQpOwotICAgIGlmIChQeUxpc3RfU2V0U2xpY2UoaGVhcCwgbi0xLCBuLCBOVUxMKSA8IDApIHsKKyAgICBpZiAoUHlMaXN0X1NldFNsaWNlKGhlYXAsIG4tMSwgbiwgTlVMTCkpIHsKICAgICAgICAgUHlfREVDUkVGKGxhc3RlbHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNDksMTggKzE1MCwyNCBAQAogICAgICAgICByZXR1cm4gbGFzdGVsdDsKICAgICByZXR1cm5pdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIDApOwogICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCAwLCBsYXN0ZWx0KTsKLSAgICBpZiAoX3NpZnR1cCgoUHlMaXN0T2JqZWN0ICopaGVhcCwgMCkgPT0gLTEpIHsKKyAgICBpZiAoc2lmdHVwX2Z1bmMoKFB5TGlzdE9iamVjdCAqKWhlYXAsIDApKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXR1cm5pdGVtKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiByZXR1cm5pdGVtOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgoraGVhcHBvcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmhlYXApCit7CisgICAgcmV0dXJuIGhlYXBwb3BfaW50ZXJuYWwoaGVhcCwgc2lmdHVwKTsKK30KKwogUHlEb2NfU1RSVkFSKGhlYXBwb3BfZG9jLAogIlBvcCB0aGUgc21hbGxlc3QgaXRlbSBvZmYgdGhlIGhlYXAsIG1haW50YWluaW5nIHRoZSBoZWFwIGludmFyaWFudC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWhlYXByZXBsYWNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2hlYXByZXBsYWNlX2ludGVybmFsKFB5T2JqZWN0ICphcmdzLCBpbnQgc2lmdHVwX2Z1bmMoUHlMaXN0T2JqZWN0ICosIFB5X3NzaXplX3QpKQogewogICAgIFB5T2JqZWN0ICpoZWFwLCAqaXRlbSwgKnJldHVybml0ZW07CiAKQEAgLTE3Miw3ICsxNzksNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGhlYXApIDwgMSkgeworICAgIGlmIChQeUxpc3RfR0VUX1NJWkUoaGVhcCkgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xODAsMTMgKzE4NywxOSBAQAogICAgIHJldHVybml0ZW0gPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgMCk7CiAgICAgUHlfSU5DUkVGKGl0ZW0pOwogICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCAwLCBpdGVtKTsKLSAgICBpZiAoX3NpZnR1cCgoUHlMaXN0T2JqZWN0ICopaGVhcCwgMCkgPT0gLTEpIHsKKyAgICBpZiAoc2lmdHVwX2Z1bmMoKFB5TGlzdE9iamVjdCAqKWhlYXAsIDApKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXR1cm5pdGVtKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiByZXR1cm5pdGVtOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgoraGVhcHJlcGxhY2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBoZWFwcmVwbGFjZV9pbnRlcm5hbChhcmdzLCBzaWZ0dXApOworfQorCiBQeURvY19TVFJWQVIoaGVhcHJlcGxhY2VfZG9jLAogImhlYXByZXBsYWNlKGhlYXAsIGl0ZW0pIC0+IHZhbHVlLiBQb3AgYW5kIHJldHVybiB0aGUgY3VycmVudCBzbWFsbGVzdCB2YWx1ZSwgYW5kIGFkZCB0aGUgbmV3IGl0ZW0uXG5cCiBcblwKQEAgLTIxMSwxMyArMjI0LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChQeUxpc3RfR0VUX1NJWkUoaGVhcCkgPCAxKSB7CisgICAgaWYgKFB5TGlzdF9HRVRfU0laRShoZWFwKSA9PSAwKSB7CiAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgfQogCiAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKFB5TGlzdF9HRVRfSVRFTShoZWFwLCAwKSwgaXRlbSwgUHlfTFQpOwotICAgIGlmIChjbXAgPT0gLTEpCisgICAgaWYgKGNtcCA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChjbXAgPT0gMCkgewogICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CkBAIC0yMzIsNyArMjQ1LDcgQEAKICAgICByZXR1cm5pdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIDApOwogICAgIFB5X0lOQ1JFRihpdGVtKTsKICAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgMCwgaXRlbSk7Ci0gICAgaWYgKF9zaWZ0dXAoKFB5TGlzdE9iamVjdCAqKWhlYXAsIDApID09IC0xKSB7CisgICAgaWYgKHNpZnR1cCgoUHlMaXN0T2JqZWN0ICopaGVhcCwgMCkpIHsKICAgICAgICAgUHlfREVDUkVGKHJldHVybml0ZW0pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNDQsOCArMjU3LDczIEBACiBmcm9tIHRoZSBoZWFwLiBUaGUgY29tYmluZWQgYWN0aW9uIHJ1bnMgbW9yZSBlZmZpY2llbnRseSB0aGFuXG5cCiBoZWFwcHVzaCgpIGZvbGxvd2VkIGJ5IGEgc2VwYXJhdGUgY2FsbCB0byBoZWFwcG9wKCkuIik7CiAKK3N0YXRpYyBQeV9zc2l6ZV90CitrZWVwX3RvcF9iaXQoUHlfc3NpemVfdCBuKQoreworICAgIGludCBpID0gMDsKKworICAgIHdoaWxlIChuID4gMSkgeworICAgICAgICBuID4+PSAxOworICAgICAgICBpKys7CisgICAgfQorICAgIHJldHVybiBuIDw8IGk7Cit9CisKKy8qIENhY2hlIGZyaWVuZGx5IHZlcnNpb24gb2YgaGVhcGlmeSgpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBCdWlsZC11cCBhIGhlYXAgaW4gTyhuKSB0aW1lIGJ5IHBlcmZvcm1pbmcgc2lmdHVwKCkgb3BlcmF0aW9ucworICAgb24gbm9kZXMgd2hvc2UgY2hpbGRyZW4gYXJlIGFscmVhZHkgaGVhcHMuCisKKyAgIFRoZSBzaW1wbGVzdCB3YXkgaXMgdG8gc2lmdCB0aGUgbm9kZXMgaW4gcmV2ZXJzZSBvcmRlciBmcm9tCisgICBuLy8yLTEgdG8gMCBpbmNsdXNpdmUuICBUaGUgZG93bnNpZGUgaXMgdGhhdCBjaGlsZHJlbiBtYXkgYmUKKyAgIG91dCBvZiBjYWNoZSBieSB0aGUgdGltZSB0aGVpciBwYXJlbnQgaXMgcmVhY2hlZC4KKworICAgQSBiZXR0ZXIgd2F5IGlzIHRvIG5vdCB3YWl0IGZvciB0aGUgY2hpbGRyZW4gdG8gZ28gb3V0IG9mIGNhY2hlLgorICAgT25jZSBhIHNpYmxpbmcgcGFpciBvZiBjaGlsZCBub2RlcyBoYXZlIGJlZW4gc2lmdGVkLCBpbW1lZGlhdGVseQorICAgc2lmdCB0aGVpciBwYXJlbnQgbm9kZSAod2hpbGUgdGhlIGNoaWxkcmVuIGFyZSBzdGlsbCBpbiBjYWNoZSkuCisKKyAgIEJvdGggd2F5cyBidWlsZCBjaGlsZCBoZWFwcyBiZWZvcmUgdGhlaXIgcGFyZW50cywgc28gYm90aCB3YXlzCisgICBkbyB0aGUgZXhhY3Qgc2FtZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgYW5kIHByb2R1Y2UgZXhhY3RseQorICAgdGhlIHNhbWUgaGVhcC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgdHJhdmVyc2FsCisgICBvcmRlciBpcyBvcHRpbWl6ZWQgZm9yIGNhY2hlIGVmZmljaWVuY3kuCisqLworCiBzdGF0aWMgUHlPYmplY3QgKgotaGVhcGlmeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmhlYXApCitjYWNoZV9mcmllbmRseV9oZWFwaWZ5KFB5T2JqZWN0ICpoZWFwLCBpbnQgc2lmdHVwX2Z1bmMoUHlMaXN0T2JqZWN0ICosIFB5X3NzaXplX3QpKQoreworICAgIFB5X3NzaXplX3QgaSwgaiwgbSwgbWhhbGYsIGxlZnRtb3N0OworCisgICAgbSA9IFB5TGlzdF9HRVRfU0laRShoZWFwKSA+PiAxOyAgICAgICAgIC8qIGluZGV4IG9mIGZpcnN0IGNoaWxkbGVzcyBub2RlICovCisgICAgbGVmdG1vc3QgPSBrZWVwX3RvcF9iaXQobSArIDEpIC0gMTsgICAgIC8qIGxlZnRtb3N0IG5vZGUgaW4gcm93IG9mIG0gKi8KKyAgICBtaGFsZiA9IG0gPj4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGFyZW50IG9mIGZpcnN0IGNoaWxkbGVzcyBub2RlICovCisKKyAgICBmb3IgKGkgPSBsZWZ0bW9zdCAtIDEgOyBpID49IG1oYWxmIDsgaS0tKSB7CisgICAgICAgIGogPSBpOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgaWYgKHNpZnR1cF9mdW5jKChQeUxpc3RPYmplY3QgKiloZWFwLCBqKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGlmICghKGogJiAxKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGogPj49IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSBtIC0gMSA7IGkgPj0gbGVmdG1vc3QgOyBpLS0pIHsKKyAgICAgICAgaiA9IGk7CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBpZiAoc2lmdHVwX2Z1bmMoKFB5TGlzdE9iamVjdCAqKWhlYXAsIGopKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgaWYgKCEoaiAmIDEpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaiA+Pj0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2hlYXBpZnlfaW50ZXJuYWwoUHlPYmplY3QgKmhlYXAsIGludCBzaWZ0dXBfZnVuYyhQeUxpc3RPYmplY3QgKiwgUHlfc3NpemVfdCkpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBuOwogCkBAIC0yNTQsNyArMzMyLDE0IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIC8qIEZvciBoZWFwcyBsaWtlbHkgdG8gYmUgYmlnZ2VyIHRoYW4gTDEgY2FjaGUsIHdlIHVzZSB0aGUgY2FjaGUKKyAgICAgICBmcmllbmRseSBoZWFwaWZ5IGZ1bmN0aW9uLiAgRm9yIHNtYWxsZXIgaGVhcHMgdGhhdCBmaXQgZW50aXJlbHkKKyAgICAgICBpbiBjYWNoZSwgd2UgcHJlZmVyIHRoZSBzaW1wbGVyIGFsZ29yaXRobSB3aXRoIGxlc3MgYnJhbmNoaW5nLgorICAgICovCiAgICAgbiA9IFB5TGlzdF9HRVRfU0laRShoZWFwKTsKKyAgICBpZiAobiA+IDI1MDApCisgICAgICAgIHJldHVybiBjYWNoZV9mcmllbmRseV9oZWFwaWZ5KGhlYXAsIHNpZnR1cF9mdW5jKTsKKwogICAgIC8qIFRyYW5zZm9ybSBib3R0b20tdXAuICBUaGUgbGFyZ2VzdCBpbmRleCB0aGVyZSdzIGFueSBwb2ludCB0bwogICAgICAgIGxvb2tpbmcgYXQgaXMgdGhlIGxhcmdlc3Qgd2l0aCBhIGNoaWxkIGluZGV4IGluLXJhbmdlLCBzbyBtdXN0CiAgICAgICAgaGF2ZSAyKmkgKyAxIDwgbiwgb3IgaSA8IChuLTEpLzIuICBJZiBuIGlzIGV2ZW4gPSAyKmosIHRoaXMgaXMKQEAgLTI2MiwxNDIgKzM0Nyw2OCBAQAogICAgICAgIG4gaXMgb2RkID0gMipqKzEsIHRoaXMgaXMgKDIqaisxLTEpLzIgPSBqIHNvIGotMSBpcyB0aGUgbGFyZ2VzdCwKICAgICAgICBhbmQgdGhhdCdzIGFnYWluIG4vLzItMS4KICAgICAqLwotICAgIGZvciAoaT1uLzItMSA7IGk+PTAgOyBpLS0pCi0gICAgICAgIGlmKF9zaWZ0dXAoKFB5TGlzdE9iamVjdCAqKWhlYXAsIGkpID09IC0xKQorICAgIGZvciAoaSA9IG4vMiAtIDEgOyBpID49IDAgOyBpLS0pCisgICAgICAgIGlmIChzaWZ0dXBfZnVuYygoUHlMaXN0T2JqZWN0ICopaGVhcCwgaSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitoZWFwaWZ5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaGVhcCkKK3sKKyAgICByZXR1cm4gaGVhcGlmeV9pbnRlcm5hbChoZWFwLCBzaWZ0dXApOwogfQogCiBQeURvY19TVFJWQVIoaGVhcGlmeV9kb2MsCiAiVHJhbnNmb3JtIGxpc3QgaW50byBhIGhlYXAsIGluLXBsYWNlLCBpbiBPKGxlbihoZWFwKSkgdGltZS4iKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLW5sYXJnZXN0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqaGVhcD1OVUxMLCAqZWxlbSwgKml0ZXJhYmxlLCAqc29sLCAqaXQsICpvbGRlbGVtOwotICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBpbnQgY21wOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJuTzpubGFyZ2VzdCIsICZuLCAmaXRlcmFibGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7Ci0gICAgaWYgKGl0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaGVhcCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKGhlYXAgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgZm9yIChpPTAgOyBpPG4gOyBpKysgKXsKLSAgICAgICAgZWxlbSA9IFB5SXRlcl9OZXh0KGl0KTsKLSAgICAgICAgaWYgKGVsZW0gPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gc29ydGl0OwotICAgICAgICB9Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGhlYXAsIGVsZW0pID09IC0xKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZWxlbSk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKGVsZW0pOwotICAgIH0KLSAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGhlYXApID09IDApCi0gICAgICAgIGdvdG8gc29ydGl0OwotCi0gICAgZm9yIChpPW4vMi0xIDsgaT49MCA7IGktLSkKLSAgICAgICAgaWYoX3NpZnR1cCgoUHlMaXN0T2JqZWN0ICopaGVhcCwgaSkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBzb2wgPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgMCk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgZWxlbSA9IFB5SXRlcl9OZXh0KGl0KTsKLSAgICAgICAgaWYgKGVsZW0gPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gc29ydGl0OwotICAgICAgICB9Ci0gICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzb2wsIGVsZW0sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcCA9PSAtMSkgewotICAgICAgICAgICAgUHlfREVDUkVGKGVsZW0pOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjbXAgPT0gMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGVsZW0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgb2xkZWxlbSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCAwKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIDAsIGVsZW0pOwotICAgICAgICBQeV9ERUNSRUYob2xkZWxlbSk7Ci0gICAgICAgIGlmIChfc2lmdHVwKChQeUxpc3RPYmplY3QgKiloZWFwLCAwKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgc29sID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIDApOwotICAgIH0KLXNvcnRpdDoKLSAgICBpZiAoUHlMaXN0X1NvcnQoaGVhcCkgPT0gLTEpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlMaXN0X1JldmVyc2UoaGVhcCkgPT0gLTEpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBQeV9ERUNSRUYoaXQpOwotICAgIHJldHVybiBoZWFwOwotCi1mYWlsOgotICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihoZWFwKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotUHlEb2NfU1RSVkFSKG5sYXJnZXN0X2RvYywKLSJGaW5kIHRoZSBuIGxhcmdlc3QgZWxlbWVudHMgaW4gYSBkYXRhc2V0LlxuXAotXG5cCi1FcXVpdmFsZW50IHRvOiAgc29ydGVkKGl0ZXJhYmxlLCByZXZlcnNlPVRydWUpWzpuXVxuIik7Ci0KIHN0YXRpYyBpbnQKLV9zaWZ0ZG93bm1heChQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3Qgc3RhcnRwb3MsIFB5X3NzaXplX3QgcG9zKQorc2lmdGRvd25fbWF4KFB5TGlzdE9iamVjdCAqaGVhcCwgUHlfc3NpemVfdCBzdGFydHBvcywgUHlfc3NpemVfdCBwb3MpCiB7Ci0gICAgUHlPYmplY3QgKm5ld2l0ZW0sICpwYXJlbnQ7CisgICAgUHlPYmplY3QgKm5ld2l0ZW0sICpwYXJlbnQsICoqYXJyOworICAgIFB5X3NzaXplX3QgcGFyZW50cG9zLCBzaXplOwogICAgIGludCBjbXA7Ci0gICAgUHlfc3NpemVfdCBwYXJlbnRwb3M7CiAKICAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGhlYXApKTsKLSAgICBpZiAocG9zID49IFB5TGlzdF9HRVRfU0laRShoZWFwKSkgeworICAgIHNpemUgPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCk7CisgICAgaWYgKHBvcyA+PSBzaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBuZXdpdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcyk7Ci0gICAgUHlfSU5DUkVGKG5ld2l0ZW0pOwogICAgIC8qIEZvbGxvdyB0aGUgcGF0aCB0byB0aGUgcm9vdCwgbW92aW5nIHBhcmVudHMgZG93biB1bnRpbCBmaW5kaW5nCiAgICAgICAgYSBwbGFjZSBuZXdpdGVtIGZpdHMuICovCi0gICAgd2hpbGUgKHBvcyA+IHN0YXJ0cG9zKXsKKyAgICBhcnIgPSBfUHlMaXN0X0lURU1TKGhlYXApOworICAgIG5ld2l0ZW0gPSBhcnJbcG9zXTsKKyAgICB3aGlsZSAocG9zID4gc3RhcnRwb3MpIHsKICAgICAgICAgcGFyZW50cG9zID0gKHBvcyAtIDEpID4+IDE7Ci0gICAgICAgIHBhcmVudCA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwYXJlbnRwb3MpOworICAgICAgICBwYXJlbnQgPSBhcnJbcGFyZW50cG9zXTsKICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHBhcmVudCwgbmV3aXRlbSwgUHlfTFQpOwotICAgICAgICBpZiAoY21wID09IC0xKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmV3aXRlbSk7CisgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc2l6ZSAhPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBpZiAoY21wID09IDApCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgUHlfSU5DUkVGKHBhcmVudCk7Ci0gICAgICAgIFB5X0RFQ1JFRihQeUxpc3RfR0VUX0lURU0oaGVhcCwgcG9zKSk7Ci0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCBwb3MsIHBhcmVudCk7CisgICAgICAgIGFyciA9IF9QeUxpc3RfSVRFTVMoaGVhcCk7CisgICAgICAgIHBhcmVudCA9IGFycltwYXJlbnRwb3NdOworICAgICAgICBuZXdpdGVtID0gYXJyW3Bvc107CisgICAgICAgIGFycltwYXJlbnRwb3NdID0gbmV3aXRlbTsKKyAgICAgICAgYXJyW3Bvc10gPSBwYXJlbnQ7CiAgICAgICAgIHBvcyA9IHBhcmVudHBvczsKICAgICB9Ci0gICAgUHlfREVDUkVGKFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpKTsKLSAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgcG9zLCBuZXdpdGVtKTsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotX3NpZnR1cG1heChQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3QgcG9zKQorc2lmdHVwX21heChQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3QgcG9zKQogewotICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIGVuZHBvcywgY2hpbGRwb3MsIHJpZ2h0cG9zLCBsaW1pdDsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBlbmRwb3MsIGNoaWxkcG9zLCBsaW1pdDsKKyAgICBQeU9iamVjdCAqdG1wMSwgKnRtcDIsICoqYXJyOwogICAgIGludCBjbXA7Ci0gICAgUHlPYmplY3QgKm5ld2l0ZW0sICp0bXA7CiAKICAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGhlYXApKTsKICAgICBlbmRwb3MgPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCk7CkBAIC00MDYsMTI1ICs0MTcsNjIgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBuZXdpdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcyk7Ci0gICAgUHlfSU5DUkVGKG5ld2l0ZW0pOwogCiAgICAgLyogQnViYmxlIHVwIHRoZSBzbWFsbGVyIGNoaWxkIHVudGlsIGhpdHRpbmcgYSBsZWFmLiAqLworICAgIGFyciA9IF9QeUxpc3RfSVRFTVMoaGVhcCk7CiAgICAgbGltaXQgPSBlbmRwb3MgLyAyOyAgICAgICAgICAvKiBzbWFsbGVzdCBwb3MgdGhhdCBoYXMgbm8gY2hpbGQgKi8KICAgICB3aGlsZSAocG9zIDwgbGltaXQpIHsKICAgICAgICAgLyogU2V0IGNoaWxkcG9zIHRvIGluZGV4IG9mIHNtYWxsZXIgY2hpbGQuICAgKi8KICAgICAgICAgY2hpbGRwb3MgPSAyKnBvcyArIDE7ICAgIC8qIGxlZnRtb3N0IGNoaWxkIHBvc2l0aW9uICAqLwotICAgICAgICByaWdodHBvcyA9IGNoaWxkcG9zICsgMTsKLSAgICAgICAgaWYgKHJpZ2h0cG9zIDwgZW5kcG9zKSB7CisgICAgICAgIGlmIChjaGlsZHBvcyArIDEgPCBlbmRwb3MpIHsKICAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgKLSAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX0lURU0oaGVhcCwgcmlnaHRwb3MpLAotICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfSVRFTShoZWFwLCBjaGlsZHBvcyksCisgICAgICAgICAgICAgICAgYXJyW2NoaWxkcG9zICsgMV0sCisgICAgICAgICAgICAgICAgYXJyW2NoaWxkcG9zXSwKICAgICAgICAgICAgICAgICBQeV9MVCk7Ci0gICAgICAgICAgICBpZiAoY21wID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG5ld2l0ZW0pOworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgY2hpbGRwb3MgKz0gKCh1bnNpZ25lZCljbXAgXiAxKTsgICAvKiBpbmNyZW1lbnQgd2hlbiBjbXA9PTAgKi8KKyAgICAgICAgICAgIGlmIChlbmRwb3MgIT0gUHlMaXN0X0dFVF9TSVpFKGhlYXApKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY21wID09IDApCi0gICAgICAgICAgICAgICAgY2hpbGRwb3MgPSByaWdodHBvczsKICAgICAgICAgfQogICAgICAgICAvKiBNb3ZlIHRoZSBzbWFsbGVyIGNoaWxkIHVwLiAqLwotICAgICAgICB0bXAgPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgY2hpbGRwb3MpOwotICAgICAgICBQeV9JTkNSRUYodG1wKTsKLSAgICAgICAgUHlfREVDUkVGKFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBvcywgdG1wKTsKKyAgICAgICAgYXJyID0gX1B5TGlzdF9JVEVNUyhoZWFwKTsKKyAgICAgICAgdG1wMSA9IGFycltjaGlsZHBvc107CisgICAgICAgIHRtcDIgPSBhcnJbcG9zXTsKKyAgICAgICAgYXJyW2NoaWxkcG9zXSA9IHRtcDI7CisgICAgICAgIGFycltwb3NdID0gdG1wMTsKICAgICAgICAgcG9zID0gY2hpbGRwb3M7CiAgICAgfQotCi0gICAgLyogVGhlIGxlYWYgYXQgcG9zIGlzIGVtcHR5IG5vdy4gIFB1dCBuZXdpdGVtIHRoZXJlLCBhbmQgYnViYmxlCi0gICAgICAgaXQgdXAgdG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UgKGJ5IHNpZnRpbmcgaXRzIHBhcmVudHMgZG93bikuICovCi0gICAgUHlfREVDUkVGKFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpKTsKLSAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgcG9zLCBuZXdpdGVtKTsKLSAgICByZXR1cm4gX3NpZnRkb3dubWF4KGhlYXAsIHN0YXJ0cG9zLCBwb3MpOworICAgIC8qIEJ1YmJsZSBpdCB1cCB0byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZSAoYnkgc2lmdGluZyBpdHMgcGFyZW50cyBkb3duKS4gKi8KKyAgICByZXR1cm4gc2lmdGRvd25fbWF4KGhlYXAsIHN0YXJ0cG9zLCBwb3MpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotbnNtYWxsZXN0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2hlYXBwb3BfbWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaGVhcCkKIHsKLSAgICBQeU9iamVjdCAqaGVhcD1OVUxMLCAqZWxlbSwgKml0ZXJhYmxlLCAqbG9zLCAqaXQsICpvbGRlbGVtOwotICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBpbnQgY21wOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJuTzpuc21hbGxlc3QiLCAmbiwgJml0ZXJhYmxlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOwotICAgIGlmIChpdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGhlYXAgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChoZWFwID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrICl7Ci0gICAgICAgIGVsZW0gPSBQeUl0ZXJfTmV4dChpdCk7Ci0gICAgICAgIGlmIChlbGVtID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIHNvcnRpdDsKLSAgICAgICAgfQotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChoZWFwLCBlbGVtKSA9PSAtMSkgewotICAgICAgICAgICAgUHlfREVDUkVGKGVsZW0pOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKLSAgICB9Ci0gICAgbiA9IFB5TGlzdF9HRVRfU0laRShoZWFwKTsKLSAgICBpZiAobiA9PSAwKQotICAgICAgICBnb3RvIHNvcnRpdDsKLQotICAgIGZvciAoaT1uLzItMSA7IGk+PTAgOyBpLS0pCi0gICAgICAgIGlmKF9zaWZ0dXBtYXgoKFB5TGlzdE9iamVjdCAqKWhlYXAsIGkpID09IC0xKQotICAgICAgICAgICAgZ290byBmYWlsOwotCi0gICAgbG9zID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIDApOwotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGVsZW0gPSBQeUl0ZXJfTmV4dChpdCk7Ci0gICAgICAgIGlmIChlbGVtID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIHNvcnRpdDsKLSAgICAgICAgfQotICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woZWxlbSwgbG9zLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXAgPT0gLTEpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoY21wID09IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgb2xkZWxlbSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCAwKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIDAsIGVsZW0pOwotICAgICAgICBQeV9ERUNSRUYob2xkZWxlbSk7Ci0gICAgICAgIGlmIChfc2lmdHVwbWF4KChQeUxpc3RPYmplY3QgKiloZWFwLCAwKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgbG9zID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIDApOwotICAgIH0KLQotc29ydGl0OgotICAgIGlmIChQeUxpc3RfU29ydChoZWFwKSA9PSAtMSkKLSAgICAgICAgZ290byBmYWlsOwotICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgcmV0dXJuIGhlYXA7Ci0KLWZhaWw6Ci0gICAgUHlfREVDUkVGKGl0KTsKLSAgICBQeV9YREVDUkVGKGhlYXApOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBoZWFwcG9wX2ludGVybmFsKGhlYXAsIHNpZnR1cF9tYXgpOwogfQogCi1QeURvY19TVFJWQVIobnNtYWxsZXN0X2RvYywKLSJGaW5kIHRoZSBuIHNtYWxsZXN0IGVsZW1lbnRzIGluIGEgZGF0YXNldC5cblwKLVxuXAotRXF1aXZhbGVudCB0bzogIHNvcnRlZChpdGVyYWJsZSlbOm5dXG4iKTsKK1B5RG9jX1NUUlZBUihoZWFwcG9wX21heF9kb2MsICJNYXhoZWFwIHZhcmlhbnQgb2YgaGVhcHBvcC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2hlYXByZXBsYWNlX21heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIGhlYXByZXBsYWNlX2ludGVybmFsKGFyZ3MsIHNpZnR1cF9tYXgpOworfQorCitQeURvY19TVFJWQVIoaGVhcHJlcGxhY2VfbWF4X2RvYywgIk1heGhlYXAgdmFyaWFudCBvZiBoZWFwcmVwbGFjZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgoraGVhcGlmeV9tYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpoZWFwKQoreworICAgIHJldHVybiBoZWFwaWZ5X2ludGVybmFsKGhlYXAsIHNpZnR1cF9tYXgpOworfQorCitQeURvY19TVFJWQVIoaGVhcGlmeV9tYXhfZG9jLCAiTWF4aGVhcCB2YXJpYW50IG9mIGhlYXBpZnkuIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBoZWFwcV9tZXRob2RzW10gPSB7CiAgICAgeyJoZWFwcHVzaCIsICAgICAgICAoUHlDRnVuY3Rpb24paGVhcHB1c2gsCkBAIC01MzcsMTAgKzQ4NSwxMiBAQAogICAgICAgICBNRVRIX1ZBUkFSR1MsICAgICAgICAgICBoZWFwcmVwbGFjZV9kb2N9LAogICAgIHsiaGVhcGlmeSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWhlYXBpZnksCiAgICAgICAgIE1FVEhfTywgICAgICAgICAgICAgICAgIGhlYXBpZnlfZG9jfSwKLSAgICB7Im5sYXJnZXN0IiwgICAgICAgIChQeUNGdW5jdGlvbilubGFyZ2VzdCwKLSAgICAgICAgTUVUSF9WQVJBUkdTLCAgICAgICAgICAgbmxhcmdlc3RfZG9jfSwKLSAgICB7Im5zbWFsbGVzdCIsICAgICAgIChQeUNGdW5jdGlvbiluc21hbGxlc3QsCi0gICAgICAgIE1FVEhfVkFSQVJHUywgICAgICAgICAgIG5zbWFsbGVzdF9kb2N9LAorICAgIHsiX2hlYXBwb3BfbWF4IiwgICAgKFB5Q0Z1bmN0aW9uKWhlYXBwb3BfbWF4LAorICAgICAgICBNRVRIX08sICAgICAgICAgICAgICAgICBoZWFwcG9wX21heF9kb2N9LAorICAgIHsiX2hlYXByZXBsYWNlX21heCIsKFB5Q0Z1bmN0aW9uKWhlYXByZXBsYWNlX21heCwKKyAgICAgICAgTUVUSF9WQVJBUkdTLCAgICAgICAgICAgaGVhcHJlcGxhY2VfbWF4X2RvY30sCisgICAgeyJfaGVhcGlmeV9tYXgiLCAgICAoUHlDRnVuY3Rpb24paGVhcGlmeV9tYXgsCisgICAgICAgIE1FVEhfTywgICAgICAgICAgICAgICAgIGhlYXBpZnlfbWF4X2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTYwMCw3ICs1NTAsNyBAQAogXG5cCiBcblwKIEluIHRoZSB0cmVlIGFib3ZlLCBlYWNoIGNlbGwgYGsnIGlzIHRvcHBpbmcgYDIqaysxJyBhbmQgYDIqaysyJy4gIEluXG5cCi1hbiB1c3VhbCBiaW5hcnkgdG91cm5hbWVudCB3ZSBzZWUgaW4gc3BvcnRzLCBlYWNoIGNlbGwgaXMgdGhlIHdpbm5lclxuXAorYSB1c3VhbCBiaW5hcnkgdG91cm5hbWVudCB3ZSBzZWUgaW4gc3BvcnRzLCBlYWNoIGNlbGwgaXMgdGhlIHdpbm5lclxuXAogb3ZlciB0aGUgdHdvIGNlbGxzIGl0IHRvcHMsIGFuZCB3ZSBjYW4gdHJhY2UgdGhlIHdpbm5lciBkb3duIHRoZSB0cmVlXG5cCiB0byBzZWUgYWxsIG9wcG9uZW50cyBzL2hlIGhhZC4gIEhvd2V2ZXIsIGluIG1hbnkgY29tcHV0ZXIgYXBwbGljYXRpb25zXG5cCiBvZiBzdWNoIHRvdXJuYW1lbnRzLCB3ZSBkbyBub3QgbmVlZCB0byB0cmFjZSB0aGUgaGlzdG9yeSBvZiBhIHdpbm5lci5cblwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKaW5kZXggNDQxMTZkOC4uNjVjOTU1YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKQEAgLTkzLDE0MCArOTMsMTQ1IEBACiAvKgogICogVGhlIG1haW4gb3BlbigpIGZ1bmN0aW9uCiAgKi8KLVB5RG9jX1NUUlZBUihvcGVuX2RvYywKLSJvcGVuKGZpbGUsIG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsXG4iCi0iICAgICBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUsIG9wZW5lcj1Ob25lKSAtPiBmaWxlIG9iamVjdFxuIgotIlxuIgotIk9wZW4gZmlsZSBhbmQgcmV0dXJuIGEgc3RyZWFtLiAgUmFpc2UgSU9FcnJvciB1cG9uIGZhaWx1cmUuXG4iCi0iXG4iCi0iZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoXG4iCi0iaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvXG4iCi0iYmUgb3BlbmVkIG9yIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBmaWxlIHRvIGJlXG4iCi0id3JhcHBlZC4gKElmIGEgZmlsZSBkZXNjcmlwdG9yIGlzIGdpdmVuLCBpdCBpcyBjbG9zZWQgd2hlbiB0aGVcbiIKLSJyZXR1cm5lZCBJL08gb2JqZWN0IGlzIGNsb3NlZCwgdW5sZXNzIGNsb3NlZmQgaXMgc2V0IHRvIEZhbHNlLilcbiIKLSJcbiIKLSJtb2RlIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbW9kZSBpbiB3aGljaCB0aGUgZmlsZVxuIgotImlzIG9wZW5lZC4gSXQgZGVmYXVsdHMgdG8gJ3InIHdoaWNoIG1lYW5zIG9wZW4gZm9yIHJlYWRpbmcgaW4gdGV4dFxuIgotIm1vZGUuICBPdGhlciBjb21tb24gdmFsdWVzIGFyZSAndycgZm9yIHdyaXRpbmcgKHRydW5jYXRpbmcgdGhlIGZpbGUgaWZcbiIKLSJpdCBhbHJlYWR5IGV4aXN0cyksICd4JyBmb3IgY3JlYXRpbmcgYW5kIHdyaXRpbmcgdG8gYSBuZXcgZmlsZSwgYW5kXG4iCi0iJ2EnIGZvciBhcHBlbmRpbmcgKHdoaWNoIG9uIHNvbWUgVW5peCBzeXN0ZW1zLCBtZWFucyB0aGF0IGFsbCB3cml0ZXNcbiIKLSJhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHNlZWsgcG9zaXRpb24pLlxuIgotIkluIHRleHQgbW9kZSwgaWYgZW5jb2RpbmcgaXMgbm90IHNwZWNpZmllZCB0aGUgZW5jb2RpbmcgdXNlZCBpcyBwbGF0Zm9ybVxuIgotImRlcGVuZGVudDogbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKSBpcyBjYWxsZWQgdG8gZ2V0IHRoZVxuIgotImN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLiAoRm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgcmF3IGJ5dGVzIHVzZSBiaW5hcnlcbiIKLSJtb2RlIGFuZCBsZWF2ZSBlbmNvZGluZyB1bnNwZWNpZmllZC4pIFRoZSBhdmFpbGFibGUgbW9kZXMgYXJlOlxuIgotIlxuIgotIj09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKLSJDaGFyYWN0ZXIgTWVhbmluZ1xuIgotIi0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKLSIncicgICAgICAgb3BlbiBmb3IgcmVhZGluZyAoZGVmYXVsdClcbiIKLSIndycgICAgICAgb3BlbiBmb3Igd3JpdGluZywgdHJ1bmNhdGluZyB0aGUgZmlsZSBmaXJzdFxuIgotIid4JyAgICAgICBjcmVhdGUgYSBuZXcgZmlsZSBhbmQgb3BlbiBpdCBmb3Igd3JpdGluZ1xuIgotIidhJyAgICAgICBvcGVuIGZvciB3cml0aW5nLCBhcHBlbmRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBpZiBpdCBleGlzdHNcbiIKLSInYicgICAgICAgYmluYXJ5IG1vZGVcbiIKLSIndCcgICAgICAgdGV4dCBtb2RlIChkZWZhdWx0KVxuIgotIicrJyAgICAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZylcbiIKLSInVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZGVwcmVjYXRlZClcbiIKLSI9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCi0iXG4iCi0iVGhlIGRlZmF1bHQgbW9kZSBpcyAncnQnIChvcGVuIGZvciByZWFkaW5nIHRleHQpLiBGb3IgYmluYXJ5IHJhbmRvbVxuIgotImFjY2VzcywgdGhlIG1vZGUgJ3crYicgb3BlbnMgYW5kIHRydW5jYXRlcyB0aGUgZmlsZSB0byAwIGJ5dGVzLCB3aGlsZVxuIgotIidyK2InIG9wZW5zIHRoZSBmaWxlIHdpdGhvdXQgdHJ1bmNhdGlvbi4gVGhlICd4JyBtb2RlIGltcGxpZXMgJ3cnIGFuZFxuIgotInJhaXNlcyBhbiBgRmlsZUV4aXN0c0Vycm9yYCBpZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cy5cbiIKLSJcbiIKLSJQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGZpbGVzIG9wZW5lZCBpbiBiaW5hcnkgYW5kIHRleHQgbW9kZXMsXG4iCi0iZXZlbiB3aGVuIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0gZG9lc24ndC4gRmlsZXMgb3BlbmVkIGluXG4iCi0iYmluYXJ5IG1vZGUgKGFwcGVuZGluZyAnYicgdG8gdGhlIG1vZGUgYXJndW1lbnQpIHJldHVybiBjb250ZW50cyBhc1xuIgotImJ5dGVzIG9iamVjdHMgd2l0aG91dCBhbnkgZGVjb2RpbmcuIEluIHRleHQgbW9kZSAodGhlIGRlZmF1bHQsIG9yIHdoZW5cbiIKLSIndCcgaXMgYXBwZW5kZWQgdG8gdGhlIG1vZGUgYXJndW1lbnQpLCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXJlXG4iCi0icmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYVxuIgotInBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLlxuIgotIlxuIgotIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGluIGZ1dHVyZSB2ZXJzaW9uc1xuIgotIm9mIFB5dGhvbi4gIEl0IGhhcyBubyBlZmZlY3QgaW4gUHl0aG9uIDMuICBVc2UgbmV3bGluZSB0byBjb250cm9sXG4iCi0idW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuXG4iCi0iXG4iCi0iYnVmZmVyaW5nIGlzIGFuIG9wdGlvbmFsIGludGVnZXIgdXNlZCB0byBzZXQgdGhlIGJ1ZmZlcmluZyBwb2xpY3kuXG4iCi0iUGFzcyAwIHRvIHN3aXRjaCBidWZmZXJpbmcgb2ZmIChvbmx5IGFsbG93ZWQgaW4gYmluYXJ5IG1vZGUpLCAxIHRvIHNlbGVjdFxuIgotImxpbmUgYnVmZmVyaW5nIChvbmx5IHVzYWJsZSBpbiB0ZXh0IG1vZGUpLCBhbmQgYW4gaW50ZWdlciA+IDEgdG8gaW5kaWNhdGVcbiIKLSJ0aGUgc2l6ZSBvZiBhIGZpeGVkLXNpemUgY2h1bmsgYnVmZmVyLiAgV2hlbiBubyBidWZmZXJpbmcgYXJndW1lbnQgaXNcbiIKLSJnaXZlbiwgdGhlIGRlZmF1bHQgYnVmZmVyaW5nIHBvbGljeSB3b3JrcyBhcyBmb2xsb3dzOlxuIgotIlxuIgotIiogQmluYXJ5IGZpbGVzIGFyZSBidWZmZXJlZCBpbiBmaXhlZC1zaXplIGNodW5rczsgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlclxuIgotIiAgaXMgY2hvc2VuIHVzaW5nIGEgaGV1cmlzdGljIHRyeWluZyB0byBkZXRlcm1pbmUgdGhlIHVuZGVybHlpbmcgZGV2aWNlJ3NcbiIKLSIgIFwiYmxvY2sgc2l6ZVwiIGFuZCBmYWxsaW5nIGJhY2sgb24gYGlvLkRFRkFVTFRfQlVGRkVSX1NJWkVgLlxuIgotIiAgT24gbWFueSBzeXN0ZW1zLCB0aGUgYnVmZmVyIHdpbGwgdHlwaWNhbGx5IGJlIDQwOTYgb3IgODE5MiBieXRlcyBsb25nLlxuIgotIlxuIgotIiogXCJJbnRlcmFjdGl2ZVwiIHRleHQgZmlsZXMgKGZpbGVzIGZvciB3aGljaCBpc2F0dHkoKSByZXR1cm5zIFRydWUpXG4iCi0iICB1c2UgbGluZSBidWZmZXJpbmcuICBPdGhlciB0ZXh0IGZpbGVzIHVzZSB0aGUgcG9saWN5IGRlc2NyaWJlZCBhYm92ZVxuIgotIiAgZm9yIGJpbmFyeSBmaWxlcy5cbiIKLSJcbiIKLSJlbmNvZGluZyBpcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdXNlZCB0byBkZWNvZGUgb3IgZW5jb2RlIHRoZVxuIgotImZpbGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzXG4iCi0icGxhdGZvcm0gZGVwZW5kZW50LCBidXQgYW55IGVuY29kaW5nIHN1cHBvcnRlZCBieSBQeXRob24gY2FuIGJlXG4iCi0icGFzc2VkLiAgU2VlIHRoZSBjb2RlY3MgbW9kdWxlIGZvciB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZW5jb2RpbmdzLlxuIgotIlxuIgotImVycm9ycyBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgaG93IGVuY29kaW5nIGVycm9ycyBhcmUgdG9cbiIKLSJiZSBoYW5kbGVkLS0tdGhpcyBhcmd1bWVudCBzaG91bGQgbm90IGJlIHVzZWQgaW4gYmluYXJ5IG1vZGUuIFBhc3NcbiIKLSInc3RyaWN0JyB0byByYWlzZSBhIFZhbHVlRXJyb3IgZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFuIGVuY29kaW5nIGVycm9yXG4iCi0iKHRoZSBkZWZhdWx0IG9mIE5vbmUgaGFzIHRoZSBzYW1lIGVmZmVjdCksIG9yIHBhc3MgJ2lnbm9yZScgdG8gaWdub3JlXG4iCi0iZXJyb3JzLiAoTm90ZSB0aGF0IGlnbm9yaW5nIGVuY29kaW5nIGVycm9ycyBjYW4gbGVhZCB0byBkYXRhIGxvc3MuKVxuIgotIlNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgY29kZWNzLnJlZ2lzdGVyIG9yIHJ1biAnaGVscChjb2RlY3MuQ29kZWMpJ1xuIgotImZvciBhIGxpc3Qgb2YgdGhlIHBlcm1pdHRlZCBlbmNvZGluZyBlcnJvciBzdHJpbmdzLlxuIgotIlxuIgotIm5ld2xpbmUgY29udHJvbHMgaG93IHVuaXZlcnNhbCBuZXdsaW5lcyB3b3JrcyAoaXQgb25seSBhcHBsaWVzIHRvIHRleHRcbiIKLSJtb2RlKS4gSXQgY2FuIGJlIE5vbmUsICcnLCAnXFxuJywgJ1xccicsIGFuZCAnXFxyXFxuJy4gIEl0IHdvcmtzIGFzXG4iCi0iZm9sbG93czpcbiIKLSJcbiIKLSIqIE9uIGlucHV0LCBpZiBuZXdsaW5lIGlzIE5vbmUsIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzXG4iCi0iICBlbmFibGVkLiBMaW5lcyBpbiB0aGUgaW5wdXQgY2FuIGVuZCBpbiAnXFxuJywgJ1xccicsIG9yICdcXHJcXG4nLCBhbmRcbiIKLSIgIHRoZXNlIGFyZSB0cmFuc2xhdGVkIGludG8gJ1xcbicgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHRoZVxuIgotIiAgY2FsbGVyLiBJZiBpdCBpcyAnJywgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSBpcyBlbmFibGVkLCBidXQgbGluZVxuIgotIiAgZW5kaW5ncyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuIElmIGl0IGhhcyBhbnkgb2ZcbiIKLSIgIHRoZSBvdGhlciBsZWdhbCB2YWx1ZXMsIGlucHV0IGxpbmVzIGFyZSBvbmx5IHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuXG4iCi0iICBzdHJpbmcsIGFuZCB0aGUgbGluZSBlbmRpbmcgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuXG4iCi0iXG4iCi0iKiBPbiBvdXRwdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgYW55ICdcXG4nIGNoYXJhY3RlcnMgd3JpdHRlbiBhcmVcbiIKLSIgIHRyYW5zbGF0ZWQgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IGxpbmUgc2VwYXJhdG9yLCBvcy5saW5lc2VwLiBJZlxuIgotIiAgbmV3bGluZSBpcyAnJyBvciAnXFxuJywgbm8gdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UuIElmIG5ld2xpbmUgaXMgYW55XG4iCi0iICBvZiB0aGUgb3RoZXIgbGVnYWwgdmFsdWVzLCBhbnkgJ1xcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZSB0cmFuc2xhdGVkXG4iCi0iICB0byB0aGUgZ2l2ZW4gc3RyaW5nLlxuIgotIlxuIgotIklmIGNsb3NlZmQgaXMgRmFsc2UsIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGtlcHQgb3BlblxuIgotIndoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiBUaGlzIGRvZXMgbm90IHdvcmsgd2hlbiBhIGZpbGUgbmFtZSBpcyBnaXZlblxuIgotImFuZCBtdXN0IGJlIFRydWUgaW4gdGhhdCBjYXNlLlxuIgotIlxuIgotIkEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZVxuIgotInVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBvYmplY3QgaXMgdGhlbiBvYnRhaW5lZCBieVxuIgotImNhbGxpbmcgKm9wZW5lciogd2l0aCAoKmZpbGUqLCAqZmxhZ3MqKS4gKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlblxuIgotImZpbGUgZGVzY3JpcHRvciAocGFzc2luZyBvcy5vcGVuIGFzICpvcGVuZXIqIHJlc3VsdHMgaW4gZnVuY3Rpb25hbGl0eVxuIgotInNpbWlsYXIgdG8gcGFzc2luZyBOb25lKS5cbiIKLSJcbiIKLSJvcGVuKCkgcmV0dXJucyBhIGZpbGUgb2JqZWN0IHdob3NlIHR5cGUgZGVwZW5kcyBvbiB0aGUgbW9kZSwgYW5kXG4iCi0idGhyb3VnaCB3aGljaCB0aGUgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zIHN1Y2ggYXMgcmVhZGluZyBhbmQgd3JpdGluZ1xuIgotImFyZSBwZXJmb3JtZWQuIFdoZW4gb3BlbigpIGlzIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSB0ZXh0IG1vZGUgKCd3JyxcbiIKLSIncicsICd3dCcsICdydCcsIGV0Yy4pLCBpdCByZXR1cm5zIGEgVGV4dElPV3JhcHBlci4gV2hlbiB1c2VkIHRvIG9wZW5cbiIKLSJhIGZpbGUgaW4gYSBiaW5hcnkgbW9kZSwgdGhlIHJldHVybmVkIGNsYXNzIHZhcmllczogaW4gcmVhZCBiaW5hcnlcbiIKLSJtb2RlLCBpdCByZXR1cm5zIGEgQnVmZmVyZWRSZWFkZXI7IGluIHdyaXRlIGJpbmFyeSBhbmQgYXBwZW5kIGJpbmFyeVxuIgotIm1vZGVzLCBpdCByZXR1cm5zIGEgQnVmZmVyZWRXcml0ZXIsIGFuZCBpbiByZWFkL3dyaXRlIG1vZGUsIGl0IHJldHVybnNcbiIKLSJhIEJ1ZmZlcmVkUmFuZG9tLlxuIgotIlxuIgotIkl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIGEgc3RyaW5nIG9yIGJ5dGVhcnJheSBhcyBhIGZpbGUgZm9yIGJvdGhcbiIKLSJyZWFkaW5nIGFuZCB3cml0aW5nLiBGb3Igc3RyaW5ncyBTdHJpbmdJTyBjYW4gYmUgdXNlZCBsaWtlIGEgZmlsZVxuIgotIm9wZW5lZCBpbiBhIHRleHQgbW9kZSwgYW5kIGZvciBieXRlcyBhIEJ5dGVzSU8gY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGVcbiIKLSJvcGVuZWQgaW4gYSBiaW5hcnkgbW9kZS5cbiIKLSAgICApOworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9pbworCitfaW8ub3BlbgorICAgIGZpbGU6IG9iamVjdAorICAgIG1vZGU6IHN0ciA9ICJyIgorICAgIGJ1ZmZlcmluZzogaW50ID0gLTEKKyAgICBlbmNvZGluZzogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIGVycm9yczogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIG5ld2xpbmU6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICBjbG9zZWZkOiBpbnQoY19kZWZhdWx0PSIxIikgPSBUcnVlCisgICAgb3BlbmVyOiBvYmplY3QgPSBOb25lCisKK09wZW4gZmlsZSBhbmQgcmV0dXJuIGEgc3RyZWFtLiAgUmFpc2UgSU9FcnJvciB1cG9uIGZhaWx1cmUuCisKK2ZpbGUgaXMgZWl0aGVyIGEgdGV4dCBvciBieXRlIHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgKGFuZCB0aGUgcGF0aAoraWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvCitiZSBvcGVuZWQgb3IgYW4gaW50ZWdlciBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gYmUKK3dyYXBwZWQuIChJZiBhIGZpbGUgZGVzY3JpcHRvciBpcyBnaXZlbiwgaXQgaXMgY2xvc2VkIHdoZW4gdGhlCityZXR1cm5lZCBJL08gb2JqZWN0IGlzIGNsb3NlZCwgdW5sZXNzIGNsb3NlZmQgaXMgc2V0IHRvIEZhbHNlLikKKworbW9kZSBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG1vZGUgaW4gd2hpY2ggdGhlIGZpbGUKK2lzIG9wZW5lZC4gSXQgZGVmYXVsdHMgdG8gJ3InIHdoaWNoIG1lYW5zIG9wZW4gZm9yIHJlYWRpbmcgaW4gdGV4dAorbW9kZS4gIE90aGVyIGNvbW1vbiB2YWx1ZXMgYXJlICd3JyBmb3Igd3JpdGluZyAodHJ1bmNhdGluZyB0aGUgZmlsZSBpZgoraXQgYWxyZWFkeSBleGlzdHMpLCAneCcgZm9yIGNyZWF0aW5nIGFuZCB3cml0aW5nIHRvIGEgbmV3IGZpbGUsIGFuZAorJ2EnIGZvciBhcHBlbmRpbmcgKHdoaWNoIG9uIHNvbWUgVW5peCBzeXN0ZW1zLCBtZWFucyB0aGF0IGFsbCB3cml0ZXMKK2FwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgc2VlayBwb3NpdGlvbikuCitJbiB0ZXh0IG1vZGUsIGlmIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQgdGhlIGVuY29kaW5nIHVzZWQgaXMgcGxhdGZvcm0KK2RlcGVuZGVudDogbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKSBpcyBjYWxsZWQgdG8gZ2V0IHRoZQorY3VycmVudCBsb2NhbGUgZW5jb2RpbmcuIChGb3IgcmVhZGluZyBhbmQgd3JpdGluZyByYXcgYnl0ZXMgdXNlIGJpbmFyeQorbW9kZSBhbmQgbGVhdmUgZW5jb2RpbmcgdW5zcGVjaWZpZWQuKSBUaGUgYXZhaWxhYmxlIG1vZGVzIGFyZToKKworPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhcmFjdGVyIE1lYW5pbmcKKy0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKydyJyAgICAgICBvcGVuIGZvciByZWFkaW5nIChkZWZhdWx0KQorJ3cnICAgICAgIG9wZW4gZm9yIHdyaXRpbmcsIHRydW5jYXRpbmcgdGhlIGZpbGUgZmlyc3QKKyd4JyAgICAgICBjcmVhdGUgYSBuZXcgZmlsZSBhbmQgb3BlbiBpdCBmb3Igd3JpdGluZworJ2EnICAgICAgIG9wZW4gZm9yIHdyaXRpbmcsIGFwcGVuZGluZyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGlmIGl0IGV4aXN0cworJ2InICAgICAgIGJpbmFyeSBtb2RlCisndCcgICAgICAgdGV4dCBtb2RlIChkZWZhdWx0KQorJysnICAgICAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKQorJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGRlcHJlY2F0ZWQpCis9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb20KK2FjY2VzcywgdGhlIG1vZGUgJ3crYicgb3BlbnMgYW5kIHRydW5jYXRlcyB0aGUgZmlsZSB0byAwIGJ5dGVzLCB3aGlsZQorJ3IrYicgb3BlbnMgdGhlIGZpbGUgd2l0aG91dCB0cnVuY2F0aW9uLiBUaGUgJ3gnIG1vZGUgaW1wbGllcyAndycgYW5kCityYWlzZXMgYW4gYEZpbGVFeGlzdHNFcnJvcmAgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuCisKK1B5dGhvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gZmlsZXMgb3BlbmVkIGluIGJpbmFyeSBhbmQgdGV4dCBtb2RlcywKK2V2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGRvZXNuJ3QuIEZpbGVzIG9wZW5lZCBpbgorYmluYXJ5IG1vZGUgKGFwcGVuZGluZyAnYicgdG8gdGhlIG1vZGUgYXJndW1lbnQpIHJldHVybiBjb250ZW50cyBhcworYnl0ZXMgb2JqZWN0cyB3aXRob3V0IGFueSBkZWNvZGluZy4gSW4gdGV4dCBtb2RlICh0aGUgZGVmYXVsdCwgb3Igd2hlbgorJ3QnIGlzIGFwcGVuZGVkIHRvIHRoZSBtb2RlIGFyZ3VtZW50KSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFyZQorcmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYQorcGxhdGZvcm0tZGVwZW5kZW50IGVuY29kaW5nIG9yIHVzaW5nIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgaWYgZ2l2ZW4uCisKKydVJyBtb2RlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGluIGZ1dHVyZSB2ZXJzaW9ucworb2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2wKK3VuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLgorCitidWZmZXJpbmcgaXMgYW4gb3B0aW9uYWwgaW50ZWdlciB1c2VkIHRvIHNldCB0aGUgYnVmZmVyaW5nIHBvbGljeS4KK1Bhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3QKK2xpbmUgYnVmZmVyaW5nIChvbmx5IHVzYWJsZSBpbiB0ZXh0IG1vZGUpLCBhbmQgYW4gaW50ZWdlciA+IDEgdG8gaW5kaWNhdGUKK3RoZSBzaXplIG9mIGEgZml4ZWQtc2l6ZSBjaHVuayBidWZmZXIuICBXaGVuIG5vIGJ1ZmZlcmluZyBhcmd1bWVudCBpcworZ2l2ZW4sIHRoZSBkZWZhdWx0IGJ1ZmZlcmluZyBwb2xpY3kgd29ya3MgYXMgZm9sbG93czoKKworKiBCaW5hcnkgZmlsZXMgYXJlIGJ1ZmZlcmVkIGluIGZpeGVkLXNpemUgY2h1bmtzOyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisgIGlzIGNob3NlbiB1c2luZyBhIGhldXJpc3RpYyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSB1bmRlcmx5aW5nIGRldmljZSdzCisgICJibG9jayBzaXplIiBhbmQgZmFsbGluZyBiYWNrIG9uIGBpby5ERUZBVUxUX0JVRkZFUl9TSVpFYC4KKyAgT24gbWFueSBzeXN0ZW1zLCB0aGUgYnVmZmVyIHdpbGwgdHlwaWNhbGx5IGJlIDQwOTYgb3IgODE5MiBieXRlcyBsb25nLgorCisqICJJbnRlcmFjdGl2ZSIgdGV4dCBmaWxlcyAoZmlsZXMgZm9yIHdoaWNoIGlzYXR0eSgpIHJldHVybnMgVHJ1ZSkKKyAgdXNlIGxpbmUgYnVmZmVyaW5nLiAgT3RoZXIgdGV4dCBmaWxlcyB1c2UgdGhlIHBvbGljeSBkZXNjcmliZWQgYWJvdmUKKyAgZm9yIGJpbmFyeSBmaWxlcy4KKworZW5jb2RpbmcgaXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHVzZWQgdG8gZGVjb2RlIG9yIGVuY29kZSB0aGUKK2ZpbGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzCitwbGF0Zm9ybSBkZXBlbmRlbnQsIGJ1dCBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IFB5dGhvbiBjYW4gYmUKK3Bhc3NlZC4gIFNlZSB0aGUgY29kZWNzIG1vZHVsZSBmb3IgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGVuY29kaW5ncy4KKworZXJyb3JzIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyBob3cgZW5jb2RpbmcgZXJyb3JzIGFyZSB0bworYmUgaGFuZGxlZC0tLXRoaXMgYXJndW1lbnQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIGJpbmFyeSBtb2RlLiBQYXNzCisnc3RyaWN0JyB0byByYWlzZSBhIFZhbHVlRXJyb3IgZXhjZXB0aW9uIGlmIHRoZXJlIGlzIGFuIGVuY29kaW5nIGVycm9yCisodGhlIGRlZmF1bHQgb2YgTm9uZSBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgcGFzcyAnaWdub3JlJyB0byBpZ25vcmUKK2Vycm9ycy4gKE5vdGUgdGhhdCBpZ25vcmluZyBlbmNvZGluZyBlcnJvcnMgY2FuIGxlYWQgdG8gZGF0YSBsb3NzLikKK1NlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgY29kZWNzLnJlZ2lzdGVyIG9yIHJ1biAnaGVscChjb2RlY3MuQ29kZWMpJworZm9yIGEgbGlzdCBvZiB0aGUgcGVybWl0dGVkIGVuY29kaW5nIGVycm9yIHN0cmluZ3MuCisKK25ld2xpbmUgY29udHJvbHMgaG93IHVuaXZlcnNhbCBuZXdsaW5lcyB3b3JrcyAoaXQgb25seSBhcHBsaWVzIHRvIHRleHQKK21vZGUpLiBJdCBjYW4gYmUgTm9uZSwgJycsICdcbicsICdccicsIGFuZCAnXHJcbicuICBJdCB3b3JrcyBhcworZm9sbG93czoKKworKiBPbiBpbnB1dCwgaWYgbmV3bGluZSBpcyBOb25lLCB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcworICBlbmFibGVkLiBMaW5lcyBpbiB0aGUgaW5wdXQgY2FuIGVuZCBpbiAnXG4nLCAnXHInLCBvciAnXHJcbicsIGFuZAorICB0aGVzZSBhcmUgdHJhbnNsYXRlZCBpbnRvICdcbicgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHRoZQorICBjYWxsZXIuIElmIGl0IGlzICcnLCB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGlzIGVuYWJsZWQsIGJ1dCBsaW5lCisgIGVuZGluZ3MgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdW50cmFuc2xhdGVkLiBJZiBpdCBoYXMgYW55IG9mCisgIHRoZSBvdGhlciBsZWdhbCB2YWx1ZXMsIGlucHV0IGxpbmVzIGFyZSBvbmx5IHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuCisgIHN0cmluZywgYW5kIHRoZSBsaW5lIGVuZGluZyBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIHVudHJhbnNsYXRlZC4KKworKiBPbiBvdXRwdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgYW55ICdcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZQorICB0cmFuc2xhdGVkIHRvIHRoZSBzeXN0ZW0gZGVmYXVsdCBsaW5lIHNlcGFyYXRvciwgb3MubGluZXNlcC4gSWYKKyAgbmV3bGluZSBpcyAnJyBvciAnXG4nLCBubyB0cmFuc2xhdGlvbiB0YWtlcyBwbGFjZS4gSWYgbmV3bGluZSBpcyBhbnkKKyAgb2YgdGhlIG90aGVyIGxlZ2FsIHZhbHVlcywgYW55ICdcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZSB0cmFuc2xhdGVkCisgIHRvIHRoZSBnaXZlbiBzdHJpbmcuCisKK0lmIGNsb3NlZmQgaXMgRmFsc2UsIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGtlcHQgb3Blbgord2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzIGdpdmVuCithbmQgbXVzdCBiZSBUcnVlIGluIHRoYXQgY2FzZS4KKworQSBjdXN0b20gb3BlbmVyIGNhbiBiZSB1c2VkIGJ5IHBhc3NpbmcgYSBjYWxsYWJsZSBhcyAqb3BlbmVyKi4gVGhlCit1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUgb2JqZWN0IGlzIHRoZW4gb2J0YWluZWQgYnkKK2NhbGxpbmcgKm9wZW5lciogd2l0aCAoKmZpbGUqLCAqZmxhZ3MqKS4gKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbgorZmlsZSBkZXNjcmlwdG9yIChwYXNzaW5nIG9zLm9wZW4gYXMgKm9wZW5lciogcmVzdWx0cyBpbiBmdW5jdGlvbmFsaXR5CitzaW1pbGFyIHRvIHBhc3NpbmcgTm9uZSkuCisKK29wZW4oKSByZXR1cm5zIGEgZmlsZSBvYmplY3Qgd2hvc2UgdHlwZSBkZXBlbmRzIG9uIHRoZSBtb2RlLCBhbmQKK3Rocm91Z2ggd2hpY2ggdGhlIHN0YW5kYXJkIGZpbGUgb3BlcmF0aW9ucyBzdWNoIGFzIHJlYWRpbmcgYW5kIHdyaXRpbmcKK2FyZSBwZXJmb3JtZWQuIFdoZW4gb3BlbigpIGlzIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSB0ZXh0IG1vZGUgKCd3JywKKydyJywgJ3d0JywgJ3J0JywgZXRjLiksIGl0IHJldHVybnMgYSBUZXh0SU9XcmFwcGVyLiBXaGVuIHVzZWQgdG8gb3BlbgorYSBmaWxlIGluIGEgYmluYXJ5IG1vZGUsIHRoZSByZXR1cm5lZCBjbGFzcyB2YXJpZXM6IGluIHJlYWQgYmluYXJ5Cittb2RlLCBpdCByZXR1cm5zIGEgQnVmZmVyZWRSZWFkZXI7IGluIHdyaXRlIGJpbmFyeSBhbmQgYXBwZW5kIGJpbmFyeQorbW9kZXMsIGl0IHJldHVybnMgYSBCdWZmZXJlZFdyaXRlciwgYW5kIGluIHJlYWQvd3JpdGUgbW9kZSwgaXQgcmV0dXJucworYSBCdWZmZXJlZFJhbmRvbS4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYSBzdHJpbmcgb3IgYnl0ZWFycmF5IGFzIGEgZmlsZSBmb3IgYm90aAorcmVhZGluZyBhbmQgd3JpdGluZy4gRm9yIHN0cmluZ3MgU3RyaW5nSU8gY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGUKK29wZW5lZCBpbiBhIHRleHQgbW9kZSwgYW5kIGZvciBieXRlcyBhIEJ5dGVzSU8gY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGUKK29wZW5lZCBpbiBhIGJpbmFyeSBtb2RlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotaW9fb3BlbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX2lvX29wZW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqZmlsZSwgY29uc3QgY2hhciAqbW9kZSwKKyAgICAgICAgICAgICAgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQsIFB5T2JqZWN0ICpvcGVuZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YWVmYWZjNGNlMmI0NmRjMCBpbnB1dD1mNGUxY2E3NTIyMzk4N2JjXSovCiB7Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAibW9kZSIsICJidWZmZXJpbmciLAotICAgICAgICAgICAgICAgICAgICAgICJlbmNvZGluZyIsICJlcnJvcnMiLCAibmV3bGluZSIsCi0gICAgICAgICAgICAgICAgICAgICAgImNsb3NlZmQiLCAib3BlbmVyIiwgTlVMTH07Ci0gICAgUHlPYmplY3QgKmZpbGUsICpvcGVuZXIgPSBQeV9Ob25lOwotICAgIGNoYXIgKm1vZGUgPSAiciI7Ci0gICAgaW50IGJ1ZmZlcmluZyA9IC0xLCBjbG9zZWZkID0gMTsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEwsICplcnJvcnMgPSBOVUxMLCAqbmV3bGluZSA9IE5VTEw7CiAgICAgdW5zaWduZWQgaTsKIAogICAgIGludCBjcmVhdGluZyA9IDAsIHJlYWRpbmcgPSAwLCB3cml0aW5nID0gMCwgYXBwZW5kaW5nID0gMCwgdXBkYXRpbmcgPSAwOwpAQCAtMjM3LDE4ICsyNDIsMTEgQEAKIAogICAgIFB5T2JqZWN0ICpyYXcsICptb2Rlb2JqID0gTlVMTCwgKmJ1ZmZlciwgKndyYXBwZXIsICpyZXN1bHQgPSBOVUxMOwogCisgICAgX1B5X0lERU5USUZJRVIoX2Jsa3NpemUpOwogICAgIF9QeV9JREVOVElGSUVSKGlzYXR0eSk7Ci0gICAgX1B5X0lERU5USUZJRVIoZmlsZW5vKTsKICAgICBfUHlfSURFTlRJRklFUihtb2RlKTsKICAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xzaXp6emlPOm9wZW4iLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZtb2RlLCAmYnVmZmVyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmNvZGluZywgJmVycm9ycywgJm5ld2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsb3NlZmQsICZvcGVuZXIpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGZpbGUpICYmCiAJIVB5Qnl0ZXNfQ2hlY2soZmlsZSkgJiYKIAkhUHlOdW1iZXJfQ2hlY2soZmlsZSkpIHsKQEAgLTM4MCwyNCArMzc4LDE0IEBACiAgICAgICAgIGxpbmVfYnVmZmVyaW5nID0gMDsKIAogICAgIGlmIChidWZmZXJpbmcgPCAwKSB7Ci0gICAgICAgIGJ1ZmZlcmluZyA9IERFRkFVTFRfQlVGRkVSX1NJWkU7Ci0jaWZkZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0OwotICAgICAgICAgICAgbG9uZyBmaWxlbm87Ci0gICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChyYXcsICZQeUlkX2ZpbGVubywgTlVMTCk7Ci0gICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgICAgICAgZmlsZW5vID0gUHlMb25nX0FzTG9uZyhyZXMpOwotICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgICAgICAgICBpZiAoZmlsZW5vID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgICAgICAgaWYgKGZzdGF0KGZpbGVubywgJnN0KSA+PSAwICYmIHN0LnN0X2Jsa3NpemUgPiAxKQotICAgICAgICAgICAgICAgIGJ1ZmZlcmluZyA9IHN0LnN0X2Jsa3NpemU7Ci0gICAgICAgIH0KLSNlbmRpZgorICAgICAgICBQeU9iamVjdCAqYmxrc2l6ZV9vYmo7CisgICAgICAgIGJsa3NpemVfb2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZChyYXcsICZQeUlkX19ibGtzaXplKTsKKyAgICAgICAgaWYgKGJsa3NpemVfb2JqID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBidWZmZXJpbmcgPSBQeUxvbmdfQXNMb25nKGJsa3NpemVfb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGJsa3NpemVfb2JqKTsKKyAgICAgICAgaWYgKGJ1ZmZlcmluZyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGJ1ZmZlcmluZyA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC02MjEsOCArNjA5LDEwIEBACiAgKiBNb2R1bGUgZGVmaW5pdGlvbgogICovCiAKKyNpbmNsdWRlICJjbGluaWMvX2lvbW9kdWxlLmMuaCIKKwogc3RhdGljIFB5TWV0aG9kRGVmIG1vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWlvX29wZW4sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvcGVuX2RvY30sCisgICAgX0lPX09QRU5fTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9CiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaCBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCmluZGV4IDE0MGYyNjAuLjBjNmVhZTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCkBAIC03NCw3ICs3NCw3IEBACiAgKiBPZmZzZXQgdHlwZSBmb3IgcG9zaXRpb25pbmcuCiAgKi8KIAotLyogUHJpbnRpbmcgYSB2YXJpYWJsZSBvZiB0eXBlIG9mZl90ICh3aXRoIGUuZy4sIFB5U3RyaW5nX0Zyb21Gb3JtYXQpCisvKiBQcmludGluZyBhIHZhcmlhYmxlIG9mIHR5cGUgb2ZmX3QgKHdpdGggZS5nLiwgUHlVbmljb2RlX0Zyb21Gb3JtYXQpCiAgICBjb3JyZWN0bHkgYW5kIHdpdGhvdXQgcHJvZHVjaW5nIGNvbXBpbGVyIHdhcm5pbmdzIGlzIHN1cnByaXNpbmdseSBwYWluZnVsLgogICAgV2UgaWRlbnRpZnkgYW4gaW50ZWdlciB0eXBlIHdob3NlIHNpemUgbWF0Y2hlcyBvZmZfdCBhbmQgdGhlbjogKDEpIGNhc3QgdGhlCiAgICBvZmZfdCB0byB0aGF0IGludGVnZXIgdHlwZSBhbmQgKDIpIHVzZSB0aGUgYXBwcm9wcmlhdGUgY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCmluZGV4IDM2NWJiODUuLjZkNjc3NTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYworKysgYi9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKQEAgLTEzLDYgKzEzLDI0IEBACiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKICNpbmNsdWRlICJfaW9tb2R1bGUuaCIKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9pbworY2xhc3MgX2lvLl9CdWZmZXJlZElPQmFzZSAiUHlPYmplY3QgKiIgIiZQeUJ1ZmZlcmVkSU9CYXNlX1R5cGUiCitjbGFzcyBfaW8uX0J1ZmZlcmVkICJidWZmZXJlZCAqIiAiJlB5QnVmZmVyZWRJT0Jhc2VfVHlwZSIKK2NsYXNzIF9pby5CdWZmZXJlZFJlYWRlciAiYnVmZmVyZWQgKiIgIiZQeUJ1ZmZlcmVkUmVhZGVyX1R5cGUiCitjbGFzcyBfaW8uQnVmZmVyZWRXcml0ZXIgImJ1ZmZlcmVkICoiICImUHlCdWZmZXJlZFdyaXRlcl9UeXBlIgorY2xhc3MgX2lvLkJ1ZmZlcmVkUldQYWlyICJyd3BhaXIgKiIgIiZQeUJ1ZmZlcmVkUldQYWlyX1R5cGUiCitjbGFzcyBfaW8uQnVmZmVyZWRSYW5kb20gImJ1ZmZlcmVkICoiICImUHlCdWZmZXJlZFJhbmRvbV9UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NTk0NjBiOWM1NjM5OTg0ZF0qLworCisvKltweXRob24gaW5wdXRdCitjbGFzcyBpb19zc2l6ZV90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X3NzaXplX3QnCisgICAgY29udmVydGVyID0gJ19QeUlPX0NvbnZlcnRTc2l6ZV90JworW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZDBhODExZDNjYmZkMWIzM10qLworCiBfUHlfSURFTlRJRklFUihjbG9zZSk7CiBfUHlfSURFTlRJRklFUihfZGVhbGxvY193YXJuKTsKIF9QeV9JREVOVElGSUVSKGZsdXNoKTsKQEAgLTI0LDYgKzQyLDcgQEAKIF9QeV9JREVOVElGSUVSKHJlYWQxKTsKIF9QeV9JREVOVElGSUVSKHJlYWRhYmxlKTsKIF9QeV9JREVOVElGSUVSKHJlYWRpbnRvKTsKK19QeV9JREVOVElGSUVSKHJlYWRpbnRvMSk7CiBfUHlfSURFTlRJRklFUih3cml0YWJsZSk7CiBfUHlfSURFTlRJRklFUih3cml0ZSk7CiAKQEAgLTQ3LDQ1ICs2Niw2MyBAQAogICAgICk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1idWZmZXJlZGlvYmFzZV9yZWFkaW50byhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfYnVmZmVyZWRpb2Jhc2VfcmVhZGludG9fZ2VuZXJpYyhQeU9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIsIGNoYXIgcmVhZGludG8xKQogewotICAgIFB5X2J1ZmZlciBidWY7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QgKmRhdGE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIncqOnJlYWRpbnRvIiwgJmJ1ZikpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfcmVhZCwgIm4iLCBidWYubGVuKTsKKyAgICBkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRpbnRvMSA/ICZQeUlkX3JlYWQxIDogJlB5SWRfcmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibiIsIGJ1ZmZlci0+bGVuKTsKICAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZWFkKCkgc2hvdWxkIHJldHVybiBieXRlcyIpOwotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBsZW4gPSBQeV9TSVpFKGRhdGEpOwotICAgIGlmIChsZW4gPiBidWYubGVuKSB7CisgICAgaWYgKGxlbiA+IGJ1ZmZlci0+bGVuKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSByZXR1cm5lZCB0b28gbXVjaCBkYXRhOiAiCiAgICAgICAgICAgICAgICAgICAgICAiJXpkIGJ5dGVzIHJlcXVlc3RlZCwgJXpkIHJldHVybmVkIiwKLSAgICAgICAgICAgICAgICAgICAgIGJ1Zi5sZW4sIGxlbik7CisgICAgICAgICAgICAgICAgICAgICBidWZmZXItPmxlbiwgbGVuKTsKICAgICAgICAgUHlfREVDUkVGKGRhdGEpOwotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbWVtY3B5KGJ1Zi5idWYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpLCBsZW4pOworICAgIG1lbWNweShidWZmZXItPmJ1ZiwgUHlCeXRlc19BU19TVFJJTkcoZGF0YSksIGxlbik7CiAKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgIFB5X0RFQ1JFRihkYXRhKTsKIAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobGVuKTsKK30KIAotICBlcnJvcjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwotICAgIHJldHVybiBOVUxMOworLypbY2xpbmljIGlucHV0XQorX2lvLl9CdWZmZXJlZElPQmFzZS5yZWFkaW50bworICAgIGJ1ZmZlcjogUHlfYnVmZmVyKGFjY2VwdD17cndidWZmZXJ9KQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fQnVmZmVyZWRJT0Jhc2VfcmVhZGludG9faW1wbChQeU9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OGM4Y2RhNjY4NGFmODAzOCBpbnB1dD0wMGE2YjlhMzhmMjk4MzBhXSovCit7CisgICAgcmV0dXJuIF9idWZmZXJlZGlvYmFzZV9yZWFkaW50b19nZW5lcmljKHNlbGYsIGJ1ZmZlciwgMCk7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fQnVmZmVyZWRJT0Jhc2UucmVhZGludG8xCisgICAgYnVmZmVyOiBQeV9idWZmZXIoYWNjZXB0PXtyd2J1ZmZlcn0pCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZElPQmFzZV9yZWFkaW50bzFfaW1wbChQeU9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzU4NjIzZTRmZDJiNjlkMyBpbnB1dD1lYmFkNzViNGFhZGZiOWJlXSovCit7CisgICAgcmV0dXJuIF9idWZmZXJlZGlvYmFzZV9yZWFkaW50b19nZW5lcmljKHNlbGYsIGJ1ZmZlciwgMSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC05NywxNCArMTM0LDE4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihidWZmZXJlZGlvYmFzZV9kZXRhY2hfZG9jLAotICAgICJEaXNjb25uZWN0IHRoaXMgYnVmZmVyIGZyb20gaXRzIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBhbmQgcmV0dXJuIGl0LlxuIgotICAgICJcbiIKLSAgICAiQWZ0ZXIgdGhlIHJhdyBzdHJlYW0gaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBidWZmZXIgaXMgaW4gYW4gdW51c2FibGVcbiIKLSAgICAic3RhdGUuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fQnVmZmVyZWRJT0Jhc2UuZGV0YWNoCisKK0Rpc2Nvbm5lY3QgdGhpcyBidWZmZXIgZnJvbSBpdHMgdW5kZXJseWluZyByYXcgc3RyZWFtIGFuZCByZXR1cm4gaXQuCisKK0FmdGVyIHRoZSByYXcgc3RyZWFtIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgYnVmZmVyIGlzIGluIGFuIHVudXNhYmxlCitzdGF0ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ1ZmZlcmVkaW9iYXNlX2RldGFjaChQeU9iamVjdCAqc2VsZikKK19pb19fQnVmZmVyZWRJT0Jhc2VfZGV0YWNoX2ltcGwoUHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzU0OTc3YzhkMTBlZDg4YyBpbnB1dD04MjI0MjdmYjU4ZmU0MTY5XSovCiB7CiAgICAgcmV0dXJuIGJ1ZmZlcmVkaW9iYXNlX3Vuc3VwcG9ydGVkKCJkZXRhY2giKTsKIH0KQEAgLTE0OSw4ICsxOTAsOCBAQAogUHlEb2NfU1RSVkFSKGJ1ZmZlcmVkaW9iYXNlX3dyaXRlX2RvYywKICAgICAiV3JpdGUgdGhlIGdpdmVuIGJ1ZmZlciB0byB0aGUgSU8gc3RyZWFtLlxuIgogICAgICJcbiIKLSAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4sIHdoaWNoIGlzIG5ldmVyIGxlc3MgdGhhblxuIgotICAgICJsZW4oYikuXG4iCisgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCB3aGljaCBpcyBhbHdheXMgdGhlIGxlbmd0aCBvZiBiXG4iCisgICAgImluIGJ5dGVzLlxuIgogICAgICJcbiIKICAgICAiUmFpc2VzIEJsb2NraW5nSU9FcnJvciBpZiB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHRoZVxuIgogICAgICJ1bmRlcmx5aW5nIHJhdyBzdHJlYW0gY2Fubm90IGFjY2VwdCBtb3JlIGRhdGEgYXQgdGhlIG1vbWVudC5cbiIpOwpAQCAtMTYyLDY4ICsyMDMsNiBAQAogfQogCiAKLXN0YXRpYyBQeU1ldGhvZERlZiBidWZmZXJlZGlvYmFzZV9tZXRob2RzW10gPSB7Ci0gICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRpb2Jhc2VfZGV0YWNoLCBNRVRIX05PQVJHUywgYnVmZmVyZWRpb2Jhc2VfZGV0YWNoX2RvY30sCi0gICAgeyJyZWFkIiwgYnVmZmVyZWRpb2Jhc2VfcmVhZCwgTUVUSF9WQVJBUkdTLCBidWZmZXJlZGlvYmFzZV9yZWFkX2RvY30sCi0gICAgeyJyZWFkMSIsIGJ1ZmZlcmVkaW9iYXNlX3JlYWQxLCBNRVRIX1ZBUkFSR1MsIGJ1ZmZlcmVkaW9iYXNlX3JlYWQxX2RvY30sCi0gICAgeyJyZWFkaW50byIsIGJ1ZmZlcmVkaW9iYXNlX3JlYWRpbnRvLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAotICAgIHsid3JpdGUiLCBidWZmZXJlZGlvYmFzZV93cml0ZSwgTUVUSF9WQVJBUkdTLCBidWZmZXJlZGlvYmFzZV93cml0ZV9kb2N9LAotICAgIHtOVUxMLCBOVUxMfQotfTsKLQotUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRJT0Jhc2VfVHlwZSA9IHsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX2lvLl9CdWZmZXJlZElPQmFzZSIsICAgICAgLyp0cF9uYW1lKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCi0gICAgYnVmZmVyZWRpb2Jhc2VfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgYnVmZmVyZWRpb2Jhc2VfbWV0aG9kcywgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KLSAgICAmUHlJT0Jhc2VfVHlwZSwgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwotfTsKLQotCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogCkBAIC0zMTgsNyArMjk3LDcgQEAKICAgICAgICAgICogTm90ZSB0aGF0IG5vbi1kYWVtb24gdGhyZWFkcyBoYXZlIGFscmVhZHkgZXhpdGVkIGhlcmUsIHNvIHRoaXMKICAgICAgICAgICogc2hvdWxkbid0IGFmZmVjdCBjYXJlZnVsbHkgd3JpdHRlbiB0aHJlYWRlZCBJL08gY29kZS4KICAgICAgICAgICovCi0gICAgICAgIHN0ID0gUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKHNlbGYtPmxvY2ssIDFlNiwgMCk7CisgICAgICAgIHN0ID0gUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKHNlbGYtPmxvY2ssIChQWV9USU1FT1VUX1QpMWU2LCAwKTsKICAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVsYXhfbG9ja2luZyAmJiBzdCAhPSBQWV9MT0NLX0FDUVVJUkVEKSB7CkBAIC00NDQsNyArNDIzLDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlczsKIAotICAgIHJlcyA9IHNpemVvZihidWZmZXJlZCk7CisgICAgcmVzID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRShzZWxmKSk7CiAgICAgaWYgKHNlbGYtPmJ1ZmZlcikKICAgICAgICAgcmVzICs9IHNlbGYtPmJ1ZmZlcl9zaXplOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKQEAgLTY4MywxMSArNjYyLDcgQEAKIF9zZXRfQmxvY2tpbmdJT0Vycm9yKGNoYXIgKm1zZywgUHlfc3NpemVfdCB3cml0dGVuKQogewogICAgIFB5T2JqZWN0ICplcnI7Ci0jaWZkZWYgUHlfREVCVUcKLSAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbiBlcnJvcgotICAgICAgIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KICAgICBQeUVycl9DbGVhcigpOwotI2VuZGlmCiAgICAgZXJyID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX0Jsb2NraW5nSU9FcnJvciwgImlzbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLCBtc2csIHdyaXR0ZW4pOwogICAgIGlmIChlcnIpCkBAIC04ODIsMTkgKzg1NywyMiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fQnVmZmVyZWQucGVlaworICAgIHNpemU6IFB5X3NzaXplX3QgPSAwCisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1idWZmZXJlZF9wZWVrKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19fQnVmZmVyZWRfcGVla19pbXBsKGJ1ZmZlcmVkICpzZWxmLCBQeV9zc2l6ZV90IHNpemUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmE3YTA5N2NhMjMwMTAyYiBpbnB1dD0zN2ZmYjk3ZDA2ZmY0YWRiXSovCiB7Ci0gICAgUHlfc3NpemVfdCBuID0gMDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAogICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYsICJwZWVrIG9mIGNsb3NlZCBmaWxlIikKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cGVlayIsICZuKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtOTExLDE2ICs4ODksMTkgQEAKICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uX0J1ZmZlcmVkLnJlYWQKKyAgICBzaXplIGFzIG46IGlvX3NzaXplX3QgPSAtMQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ1ZmZlcmVkX3JlYWQoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX19CdWZmZXJlZF9yZWFkX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3QgbikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mNDFjNzhiYjE1YjliYmU5IGlucHV0PWMwOTM5ZWM3ZjllOTM1NGZdKi8KIHsKLSAgICBQeV9zc2l6ZV90IG4gPSAtMTsKICAgICBQeU9iamVjdCAqcmVzOwogCiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbikpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGlmIChuIDwgLTEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSBvciAtMSIpOwpAQCAtOTQ5LDE3ICs5MzAsMjAgQEAKICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uX0J1ZmZlcmVkLnJlYWQxCisgICAgc2l6ZSBhcyBuOiBQeV9zc2l6ZV90CisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnVmZmVyZWRfcmVhZDEoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX19CdWZmZXJlZF9yZWFkMV9pbXBsKGJ1ZmZlcmVkICpzZWxmLCBQeV9zc2l6ZV90IG4pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmNjNGZiNGU1NGQxMDNhMyBpbnB1dD04ZDI4NjljMThiOTgzMTg0XSovCiB7Ci0gICAgUHlfc3NpemVfdCBuLCBoYXZlLCByOworICAgIFB5X3NzaXplX3QgaGF2ZSwgcjsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAogICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJuOnJlYWQxIiwgJm4pKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIGlmIChuIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7CkBAIC0xMDAzLDMyICs5ODcsMjcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ1ZmZlcmVkX3JlYWRpbnRvKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19idWZmZXJlZF9yZWFkaW50b19nZW5lcmljKGJ1ZmZlcmVkICpzZWxmLCBQeV9idWZmZXIgKmJ1ZmZlciwgY2hhciByZWFkaW50bzEpCiB7Ci0gICAgUHlfYnVmZmVyIGJ1ZjsKICAgICBQeV9zc2l6ZV90IG4sIHdyaXR0ZW4gPSAwLCByZW1haW5pbmc7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ3KjpyZWFkaW50byIsICZidWYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIG4gPSBQeV9TQUZFX0RPV05DQVNUKFJFQURBSEVBRChzZWxmKSwgUHlfb2ZmX3QsIFB5X3NzaXplX3QpOwogICAgIGlmIChuID4gMCkgewotICAgICAgICBpZiAobiA+PSBidWYubGVuKSB7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLmJ1Ziwgc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCBidWYubGVuKTsKLSAgICAgICAgICAgIHNlbGYtPnBvcyArPSBidWYubGVuOwotICAgICAgICAgICAgcmVzID0gUHlMb25nX0Zyb21Tc2l6ZV90KGJ1Zi5sZW4pOwotICAgICAgICAgICAgZ290byBlbmRfdW5sb2NrZWQ7CisgICAgICAgIGlmIChuID49IGJ1ZmZlci0+bGVuKSB7CisgICAgICAgICAgICBtZW1jcHkoYnVmZmVyLT5idWYsIHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgYnVmZmVyLT5sZW4pOworICAgICAgICAgICAgc2VsZi0+cG9zICs9IGJ1ZmZlci0+bGVuOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChidWZmZXItPmxlbik7CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGJ1Zi5idWYsIHNlbGYtPmJ1ZmZlciArIHNlbGYtPnBvcywgbik7CisgICAgICAgIG1lbWNweShidWZmZXItPmJ1Ziwgc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCBuKTsKICAgICAgICAgc2VsZi0+cG9zICs9IG47CiAgICAgICAgIHdyaXR0ZW4gPSBuOwogICAgIH0KIAogICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpCi0gICAgICAgIGdvdG8gZW5kX3VubG9ja2VkOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzZWxmLT53cml0YWJsZSkgewogICAgICAgICByZXMgPSBidWZmZXJlZF9mbHVzaF9hbmRfcmV3aW5kX3VubG9ja2VkKHNlbGYpOwpAQCAtMTA0MCwyNiArMTAxOSwzMiBAQAogICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CiAgICAgc2VsZi0+cG9zID0gMDsKIAotICAgIGZvciAocmVtYWluaW5nID0gYnVmLmxlbiAtIHdyaXR0ZW47CisgICAgZm9yIChyZW1haW5pbmcgPSBidWZmZXItPmxlbiAtIHdyaXR0ZW47CiAgICAgICAgICByZW1haW5pbmcgPiAwOwogICAgICAgICAgd3JpdHRlbiArPSBuLCByZW1haW5pbmcgLT0gbikgewogICAgICAgICAvKiBJZiByZW1haW5pbmcgYnl0ZXMgaXMgbGFyZ2VyIHRoYW4gaW50ZXJuYWwgYnVmZmVyIHNpemUsIGNvcHkKICAgICAgICAgICogZGlyZWN0bHkgaW50byBjYWxsZXIncyBidWZmZXIuICovCiAgICAgICAgIGlmIChyZW1haW5pbmcgPiBzZWxmLT5idWZmZXJfc2l6ZSkgewotICAgICAgICAgICAgbiA9IF9idWZmZXJlZHJlYWRlcl9yYXdfcmVhZChzZWxmLCAoY2hhciAqKSBidWYuYnVmICsgd3JpdHRlbiwKKyAgICAgICAgICAgIG4gPSBfYnVmZmVyZWRyZWFkZXJfcmF3X3JlYWQoc2VsZiwgKGNoYXIgKikgYnVmZmVyLT5idWYgKyB3cml0dGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworCisgICAgICAgIC8qIEluIHJlYWRpbnRvMSBtb2RlLCB3ZSBkbyBub3Qgd2FudCB0byBmaWxsIHRoZSBpbnRlcm5hbAorICAgICAgICAgICBidWZmZXIgaWYgd2UgYWxyZWFkeSBoYXZlIHNvbWUgZGF0YSB0byByZXR1cm4gKi8KKyAgICAgICAgZWxzZSBpZiAoIShyZWFkaW50bzEgJiYgd3JpdHRlbikpIHsKICAgICAgICAgICAgIG4gPSBfYnVmZmVyZWRyZWFkZXJfZmlsbF9idWZmZXIoc2VsZik7CiAgICAgICAgICAgICBpZiAobiA+IDApIHsKICAgICAgICAgICAgICAgICBpZiAobiA+IHJlbWFpbmluZykKICAgICAgICAgICAgICAgICAgICAgbiA9IHJlbWFpbmluZzsKLSAgICAgICAgICAgICAgICBtZW1jcHkoKGNoYXIgKikgYnVmLmJ1ZiArIHdyaXR0ZW4sCisgICAgICAgICAgICAgICAgbWVtY3B5KChjaGFyICopIGJ1ZmZlci0+YnVmICsgd3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCBuKTsKICAgICAgICAgICAgICAgICBzZWxmLT5wb3MgKz0gbjsKICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogc2hvcnQgY2lyY3VpdCAqLwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG4gPSAwOworCiAgICAgICAgIGlmIChuID09IDAgfHwgKG4gPT0gLTIgJiYgd3JpdHRlbiA+IDApKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChuIDwgMCkgewpAQCAtMTA2OSwxNiArMTA1NCw0NyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgICAgIH0KKworICAgICAgICAvKiBBdCBtb3N0IG9uZSByZWFkIGluIHJlYWRpbnRvMSBtb2RlICovCisgICAgICAgIGlmIChyZWFkaW50bzEpIHsKKyAgICAgICAgICAgIHdyaXR0ZW4gKz0gbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogICAgIHJlcyA9IFB5TG9uZ19Gcm9tU3NpemVfdCh3cml0dGVuKTsKIAogZW5kOgogICAgIExFQVZFX0JVRkZFUkVEKHNlbGYpOwotZW5kX3VubG9ja2VkOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgcmV0dXJuIHJlczsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLl9CdWZmZXJlZC5yZWFkaW50bworICAgIGJ1ZmZlcjogUHlfYnVmZmVyKGFjY2VwdD17cndidWZmZXJ9KQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fQnVmZmVyZWRfcmVhZGludG9faW1wbChidWZmZXJlZCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmNiMzc2NTgwYjFkODE3MCBpbnB1dD1lZDZiOThiN2EyMGEzMDA4XSovCit7CisgICAgcmV0dXJuIF9idWZmZXJlZF9yZWFkaW50b19nZW5lcmljKHNlbGYsIGJ1ZmZlciwgMCk7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fQnVmZmVyZWQucmVhZGludG8xCisgICAgYnVmZmVyOiBQeV9idWZmZXIoYWNjZXB0PXtyd2J1ZmZlcn0pCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZF9yZWFkaW50bzFfaW1wbChidWZmZXJlZCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmU1YzZhYzU4NjgyMDVkNiBpbnB1dD00NDU1YzVkNTVmZGYxNjg3XSovCit7CisgICAgcmV0dXJuIF9idWZmZXJlZF9yZWFkaW50b19nZW5lcmljKHNlbGYsIGJ1ZmZlciwgMSk7Cit9CisKKwogc3RhdGljIFB5T2JqZWN0ICoKIF9idWZmZXJlZF9yZWFkbGluZShidWZmZXJlZCAqc2VsZiwgUHlfc3NpemVfdCBsaW1pdCkKIHsKQEAgLTExODAsOCArMTE5Niw3IEBACiAgICAgICAgIFB5X0NMRUFSKHJlcyk7CiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KLSAgICBQeV9DTEVBUihyZXMpOwotICAgIHJlcyA9IF9QeUJ5dGVzX0pvaW4oX1B5SU9fZW1wdHlfYnl0ZXMsIGNodW5rcyk7CisgICAgUHlfWFNFVFJFRihyZXMsIF9QeUJ5dGVzX0pvaW4oX1B5SU9fZW1wdHlfYnl0ZXMsIGNodW5rcykpOwogCiBlbmQ6CiAgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKQEAgLTExOTAsMTUgKzEyMDUsMTggQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotYnVmZmVyZWRfcmVhZGxpbmUoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5X3NzaXplX3QgbGltaXQgPSAtMTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fQnVmZmVyZWQucmVhZGxpbmUKKyAgICBzaXplOiBpb19zc2l6ZV90ID0gLTEKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkX3JlYWRsaW5lX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3Qgc2l6ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNGRkMmFhNmUzM2JlODNjIGlucHV0PWZmMWUwZGY4MjFjYjRlNWNdKi8KK3sKICAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWRsaW5lIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbGltaXQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gX2J1ZmZlcmVkX3JlYWRsaW5lKHNlbGYsIGxpbWl0KTsKKyAgICByZXR1cm4gX2J1ZmZlcmVkX3JlYWRsaW5lKHNlbGYsIHNpemUpOwogfQogCiAKQEAgLTEyMTYsMTcgKzEyMzQsMjEgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21PZmZfdChwb3MpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uX0J1ZmZlcmVkLnNlZWsKKyAgICB0YXJnZXQgYXMgdGFyZ2V0b2JqOiBvYmplY3QKKyAgICB3aGVuY2U6IGludCA9IDAKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1idWZmZXJlZF9zZWVrKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19fQnVmZmVyZWRfc2Vla19pbXBsKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqdGFyZ2V0b2JqLCBpbnQgd2hlbmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdhZTBlOGRjNDZlZmRlZmIgaW5wdXQ9YTljNDkyMGJmY2JhNjE2M10qLwogewogICAgIFB5X29mZl90IHRhcmdldCwgbjsKLSAgICBpbnQgd2hlbmNlID0gMDsKLSAgICBQeU9iamVjdCAqdGFyZ2V0b2JqLCAqcmVzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAogICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfGk6c2VlayIsICZ0YXJnZXRvYmosICZ3aGVuY2UpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KIAogICAgIC8qIERvIHNvbWUgZXJyb3IgY2hlY2tpbmcgaW5zdGVhZCBvZiB0cnVzdGluZyBPUyAnc2VlaygpJwogICAgICoqIGVycm9yIGRldGVjdGlvbiwganVzdCBpbiBjYXNlLgpAQCAtMTMwOCwxNyArMTMzMCwxOSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fQnVmZmVyZWQudHJ1bmNhdGUKKyAgICBwb3M6IG9iamVjdCA9IE5vbmUKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1idWZmZXJlZF90cnVuY2F0ZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fX0J1ZmZlcmVkX3RydW5jYXRlX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICpwb3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjY3Y2EwM2M2MGMyNzBkZSBpbnB1dD04YTFiZTM0ZDU3Y2NhMmQzXSovCiB7Ci0gICAgUHlPYmplY3QgKnBvcyA9IFB5X05vbmU7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86dHJ1bmNhdGUiLCAmcG9zKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTQwMywzNSArMTQyNywzMiBAQAogICogY2xhc3MgQnVmZmVyZWRSZWFkZXIKICAqLwogCi1QeURvY19TVFJWQVIoYnVmZmVyZWRyZWFkZXJfZG9jLAotICAgICAgICAgICAgICJDcmVhdGUgYSBuZXcgYnVmZmVyZWQgcmVhZGVyIHVzaW5nIHRoZSBnaXZlbiByZWFkYWJsZSByYXcgSU8gb2JqZWN0LiIpOwotCiBzdGF0aWMgdm9pZCBfYnVmZmVyZWRyZWFkZXJfcmVzZXRfYnVmKGJ1ZmZlcmVkICpzZWxmKQogewogICAgIHNlbGYtPnJlYWRfZW5kID0gLTE7CiB9CiAKLXN0YXRpYyBpbnQKLWJ1ZmZlcmVkcmVhZGVyX2luaXQoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKLXsKLSAgICBjaGFyICprd2xpc3RbXSA9IHsicmF3IiwgImJ1ZmZlcl9zaXplIiwgTlVMTH07Ci0gICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSA9IERFRkFVTFRfQlVGRkVSX1NJWkU7Ci0gICAgUHlPYmplY3QgKnJhdzsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CdWZmZXJlZFJlYWRlci5fX2luaXRfXworICAgIHJhdzogb2JqZWN0CisgICAgYnVmZmVyX3NpemU6IFB5X3NzaXplX3QoY19kZWZhdWx0PSJERUZBVUxUX0JVRkZFUl9TSVpFIikgPSBERUZBVUxUX0JVRkZFUl9TSVpFCiAKK0NyZWF0ZSBhIG5ldyBidWZmZXJlZCByZWFkZXIgdXNpbmcgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdyBJTyBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK19pb19CdWZmZXJlZFJlYWRlcl9fX2luaXRfX19pbXBsKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqcmF3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jZGRjZmVmYTBlZDI5NGM0IGlucHV0PWZiODg3ZTA2ZjExYjRlNDhdKi8KK3sKICAgICBzZWxmLT5vayA9IDA7CiAgICAgc2VsZi0+ZGV0YWNoZWQgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98bjpCdWZmZXJlZFJlYWRlciIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmF3LCAmYnVmZmVyX3NpemUpKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KICAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX3JlYWRhYmxlKHJhdywgUHlfVHJ1ZSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKICAgICBQeV9JTkNSRUYocmF3KTsKLSAgICBzZWxmLT5yYXcgPSByYXc7CisgICAgUHlfWFNFVFJFRihzZWxmLT5yYXcsIHJhdyk7CiAgICAgc2VsZi0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKICAgICBzZWxmLT5yZWFkYWJsZSA9IDE7CiAgICAgc2VsZi0+d3JpdGFibGUgPSAwOwpAQCAtMTc0NiwxMTEgKzE3NjcsMTIgQEAKICAgICBzZWxmLT5wb3MgPSAwOwogICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPmJ1ZmZlciwgcik7CiB9Ci0KLXN0YXRpYyBQeU1ldGhvZERlZiBidWZmZXJlZHJlYWRlcl9tZXRob2RzW10gPSB7Ci0gICAgLyogQnVmZmVyZWRJT01peGluIG1ldGhvZHMgKi8KLSAgICB7ImRldGFjaCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9kZXRhY2gsIE1FVEhfTk9BUkdTfSwKLSAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3NpbXBsZV9mbHVzaCwgTUVUSF9OT0FSR1N9LAotICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfY2xvc2UsIE1FVEhfTk9BUkdTfSwKLSAgICB7InNlZWthYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3NlZWthYmxlLCBNRVRIX05PQVJHU30sCi0gICAgeyJyZWFkYWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9yZWFkYWJsZSwgTUVUSF9OT0FSR1N9LAotICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfd3JpdGFibGUsIE1FVEhfTk9BUkdTfSwKLSAgICB7ImZpbGVubyIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9maWxlbm8sIE1FVEhfTk9BUkdTfSwKLSAgICB7ImlzYXR0eSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9pc2F0dHksIE1FVEhfTk9BUkdTfSwKLSAgICB7Il9kZWFsbG9jX3dhcm4iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZGVhbGxvY193YXJuLCBNRVRIX099LAotICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCi0KLSAgICB7InJlYWQiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7InBlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcGVlaywgTUVUSF9WQVJBUkdTfSwKLSAgICB7InJlYWQxIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWQxLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsicmVhZGludG8iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZGludG8sIE1FVEhfVkFSQVJHU30sCi0gICAgeyJyZWFkbGluZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9yZWFkbGluZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7InNlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2VlaywgTUVUSF9WQVJBUkdTfSwKLSAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfdGVsbCwgTUVUSF9OT0FSR1N9LAotICAgIHsidHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfdHJ1bmNhdGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3NpemVvZiwgTUVUSF9OT0FSR1N9LAotICAgIHtOVUxMLCBOVUxMfQotfTsKLQotc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkcmVhZGVyX21lbWJlcnNbXSA9IHsKLSAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAotICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGJ1ZmZlcmVkLCBmaW5hbGl6aW5nKSwgMH0sCi0gICAge05VTEx9Ci19OwotCi1zdGF0aWMgUHlHZXRTZXREZWYgYnVmZmVyZWRyZWFkZXJfZ2V0c2V0W10gPSB7Ci0gICAgeyJjbG9zZWQiLCAoZ2V0dGVyKWJ1ZmZlcmVkX2Nsb3NlZF9nZXQsIE5VTEwsIE5VTEx9LAotICAgIHsibmFtZSIsIChnZXR0ZXIpYnVmZmVyZWRfbmFtZV9nZXQsIE5VTEwsIE5VTEx9LAotICAgIHsibW9kZSIsIChnZXR0ZXIpYnVmZmVyZWRfbW9kZV9nZXQsIE5VTEwsIE5VTEx9LAotICAgIHtOVUxMfQotfTsKLQotCi1QeVR5cGVPYmplY3QgUHlCdWZmZXJlZFJlYWRlcl9UeXBlID0gewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfaW8uQnVmZmVyZWRSZWFkZXIiLCAgICAgICAvKnRwX25hbWUqLwotICAgIHNpemVvZihidWZmZXJlZCksICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwotICAgIChkZXN0cnVjdG9yKWJ1ZmZlcmVkX2RlYWxsb2MsICAgICAvKnRwX2RlYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCi0gICAgKHJlcHJmdW5jKWJ1ZmZlcmVkX3JlcHIsICAgIC8qdHBfcmVwciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsIC8qdHBfZmxhZ3MqLwotICAgIGJ1ZmZlcmVkcmVhZGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCB3ZWFrcmVmbGlzdCksIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgKGl0ZXJuZXh0ZnVuYylidWZmZXJlZF9pdGVybmV4dCwgLyogdHBfaXRlcm5leHQgKi8KLSAgICBidWZmZXJlZHJlYWRlcl9tZXRob2RzLCAgICAgLyogdHBfbWV0aG9kcyAqLwotICAgIGJ1ZmZlcmVkcmVhZGVyX21lbWJlcnMsICAgICAvKiB0cF9tZW1iZXJzICovCi0gICAgYnVmZmVyZWRyZWFkZXJfZ2V0c2V0LCAgICAgIC8qIHRwX2dldHNldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwotICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCBkaWN0KSwgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYylidWZmZXJlZHJlYWRlcl9pbml0LCAvKiB0cF9pbml0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwotfTsKIAwKIAogCiAvKgogICogY2xhc3MgQnVmZmVyZWRXcml0ZXIKICAqLwotUHlEb2NfU1RSVkFSKGJ1ZmZlcmVkd3JpdGVyX2RvYywKLSAgICAiQSBidWZmZXIgZm9yIGEgd3JpdGVhYmxlIHNlcXVlbnRpYWwgUmF3SU8gb2JqZWN0LlxuIgotICAgICJcbiIKLSAgICAiVGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBCdWZmZXJlZFdyaXRlciBmb3IgdGhlIGdpdmVuIHdyaXRlYWJsZSByYXdcbiIKLSAgICAic3RyZWFtLiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0b1xuIgotICAgICJERUZBVUxUX0JVRkZFUl9TSVpFLlxuIgotICAgICk7Ci0KIHN0YXRpYyB2b2lkCiBfYnVmZmVyZWR3cml0ZXJfcmVzZXRfYnVmKGJ1ZmZlcmVkICpzZWxmKQogewpAQCAtMTg1OCwyNyArMTc4MCwzMSBAQAogICAgIHNlbGYtPndyaXRlX2VuZCA9IC0xOwogfQogCi1zdGF0aWMgaW50Ci1idWZmZXJlZHdyaXRlcl9pbml0KGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCi17Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7InJhdyIsICJidWZmZXJfc2l6ZSIsIE5VTEx9OwotICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFOwotICAgIFB5T2JqZWN0ICpyYXc7CisvKltjbGluaWMgaW5wdXRdCitfaW8uQnVmZmVyZWRXcml0ZXIuX19pbml0X18KKyAgICByYXc6IG9iamVjdAorICAgIGJ1ZmZlcl9zaXplOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iREVGQVVMVF9CVUZGRVJfU0laRSIpID0gREVGQVVMVF9CVUZGRVJfU0laRQogCitBIGJ1ZmZlciBmb3IgYSB3cml0ZWFibGUgc2VxdWVudGlhbCBSYXdJTyBvYmplY3QuCisKK1RoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgQnVmZmVyZWRXcml0ZXIgZm9yIHRoZSBnaXZlbiB3cml0ZWFibGUgcmF3CitzdHJlYW0uIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvCitERUZBVUxUX0JVRkZFUl9TSVpFLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgaW50CitfaW9fQnVmZmVyZWRXcml0ZXJfX19pbml0X19faW1wbChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKnJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Yzg5NDJhMDIwYzBkZWU2NCBpbnB1dD05MTRiZTliOTVlMTYwMDdiXSovCit7CiAgICAgc2VsZi0+b2sgPSAwOwogICAgIHNlbGYtPmRldGFjaGVkID0gMDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfG46QnVmZmVyZWRXcml0ZXIiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhdywgJmJ1ZmZlcl9zaXplKSkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCiAgICAgaWYgKF9QeUlPQmFzZV9jaGVja193cml0YWJsZShyYXcsIFB5X1RydWUpID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIFB5X0NMRUFSKHNlbGYtPnJhdyk7CiAgICAgUHlfSU5DUkVGKHJhdyk7Ci0gICAgc2VsZi0+cmF3ID0gcmF3OworICAgIFB5X1hTRVRSRUYoc2VsZi0+cmF3LCByYXcpOwogICAgIHNlbGYtPnJlYWRhYmxlID0gMDsKICAgICBzZWxmLT53cml0YWJsZSA9IDE7CiAKQEAgLTE5OTMsMjkgKzE5MTksMjggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLkJ1ZmZlcmVkV3JpdGVyLndyaXRlCisgICAgYnVmZmVyOiBQeV9idWZmZXIKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1idWZmZXJlZHdyaXRlcl93cml0ZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fQnVmZmVyZWRXcml0ZXJfd3JpdGVfaW1wbChidWZmZXJlZCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2Y4ZDEzNjU3NTliZmM2YiBpbnB1dD1kZDg3ZGQ4NWZjN2Y4ODUwXSovCiB7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIGJ1ZjsKICAgICBQeV9zc2l6ZV90IHdyaXR0ZW4sIGF2YWlsLCByZW1haW5pbmc7CiAgICAgUHlfb2ZmX3Qgb2Zmc2V0OwogCiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOndyaXRlIiwgJmJ1ZikpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgICAgaWYgKElTX0NMT1NFRChzZWxmKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIndyaXRlIHRvIGNsb3NlZCBmaWxlIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICghRU5URVJfQlVGRkVSRUQoc2VsZikpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICBpZiAoIUVOVEVSX0JVRkZFUkVEKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICAvKiBGYXN0IHBhdGg6IHRoZSBkYXRhIHRvIHdyaXRlIGNhbiBiZSBmdWxseSBidWZmZXJlZC4gKi8KICAgICBpZiAoIVZBTElEX1JFQURfQlVGRkVSKHNlbGYpICYmICFWQUxJRF9XUklURV9CVUZGRVIoc2VsZikpIHsKQEAgLTIwMjMsMTUgKzE5NDgsMTUgQEAKICAgICAgICAgc2VsZi0+cmF3X3BvcyA9IDA7CiAgICAgfQogICAgIGF2YWlsID0gUHlfU0FGRV9ET1dOQ0FTVChzZWxmLT5idWZmZXJfc2l6ZSAtIHNlbGYtPnBvcywgUHlfb2ZmX3QsIFB5X3NzaXplX3QpOwotICAgIGlmIChidWYubGVuIDw9IGF2YWlsKSB7Ci0gICAgICAgIG1lbWNweShzZWxmLT5idWZmZXIgKyBzZWxmLT5wb3MsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworICAgIGlmIChidWZmZXItPmxlbiA8PSBhdmFpbCkgeworICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyICsgc2VsZi0+cG9zLCBidWZmZXItPmJ1ZiwgYnVmZmVyLT5sZW4pOwogICAgICAgICBpZiAoIVZBTElEX1dSSVRFX0JVRkZFUihzZWxmKSB8fCBzZWxmLT53cml0ZV9wb3MgPiBzZWxmLT5wb3MpIHsKICAgICAgICAgICAgIHNlbGYtPndyaXRlX3BvcyA9IHNlbGYtPnBvczsKICAgICAgICAgfQotICAgICAgICBBREpVU1RfUE9TSVRJT04oc2VsZiwgc2VsZi0+cG9zICsgYnVmLmxlbik7CisgICAgICAgIEFESlVTVF9QT1NJVElPTihzZWxmLCBzZWxmLT5wb3MgKyBidWZmZXItPmxlbik7CiAgICAgICAgIGlmIChzZWxmLT5wb3MgPiBzZWxmLT53cml0ZV9lbmQpCiAgICAgICAgICAgICBzZWxmLT53cml0ZV9lbmQgPSBzZWxmLT5wb3M7Ci0gICAgICAgIHdyaXR0ZW4gPSBidWYubGVuOworICAgICAgICB3cml0dGVuID0gYnVmZmVyLT5sZW47CiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KIApAQCAtMjA1NCwxNyArMTk3OSwxNyBAQAogICAgICAgICBzZWxmLT53cml0ZV9wb3MgPSAwOwogICAgICAgICBhdmFpbCA9IFB5X1NBRkVfRE9XTkNBU1Qoc2VsZi0+YnVmZmVyX3NpemUgLSBzZWxmLT53cml0ZV9lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9vZmZfdCwgUHlfc3NpemVfdCk7Ci0gICAgICAgIGlmIChidWYubGVuIDw9IGF2YWlsKSB7CisgICAgICAgIGlmIChidWZmZXItPmxlbiA8PSBhdmFpbCkgewogICAgICAgICAgICAgLyogRXZlcnl0aGluZyBjYW4gYmUgYnVmZmVyZWQgKi8KICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyICsgc2VsZi0+d3JpdGVfZW5kLCBidWYuYnVmLCBidWYubGVuKTsKLSAgICAgICAgICAgIHNlbGYtPndyaXRlX2VuZCArPSBidWYubGVuOwotICAgICAgICAgICAgc2VsZi0+cG9zICs9IGJ1Zi5sZW47Ci0gICAgICAgICAgICB3cml0dGVuID0gYnVmLmxlbjsKKyAgICAgICAgICAgIG1lbWNweShzZWxmLT5idWZmZXIgKyBzZWxmLT53cml0ZV9lbmQsIGJ1ZmZlci0+YnVmLCBidWZmZXItPmxlbik7CisgICAgICAgICAgICBzZWxmLT53cml0ZV9lbmQgKz0gYnVmZmVyLT5sZW47CisgICAgICAgICAgICBzZWxmLT5wb3MgKz0gYnVmZmVyLT5sZW47CisgICAgICAgICAgICB3cml0dGVuID0gYnVmZmVyLT5sZW47CiAgICAgICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgfQogICAgICAgICAvKiBCdWZmZXIgYXMgbXVjaCBhcyBwb3NzaWJsZS4gKi8KLSAgICAgICAgbWVtY3B5KHNlbGYtPmJ1ZmZlciArIHNlbGYtPndyaXRlX2VuZCwgYnVmLmJ1ZiwgYXZhaWwpOworICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyICsgc2VsZi0+d3JpdGVfZW5kLCBidWZmZXItPmJ1ZiwgYXZhaWwpOwogICAgICAgICBzZWxmLT53cml0ZV9lbmQgKz0gYXZhaWw7CiAgICAgICAgIHNlbGYtPnBvcyArPSBhdmFpbDsKICAgICAgICAgLyogWFhYIE1vZGlmeWluZyB0aGUgZXhpc3RpbmcgZXhjZXB0aW9uIGUgdXNpbmcgdGhlIHBvaW50ZXIgdwpAQCAtMjA5MCwxMSArMjAxNSwxMSBAQAogICAgIH0KIAogICAgIC8qIFRoZW4gd3JpdGUgYnVmIGl0c2VsZi4gQXQgdGhpcyBwb2ludCB0aGUgYnVmZmVyIGhhcyBiZWVuIGVtcHRpZWQuICovCi0gICAgcmVtYWluaW5nID0gYnVmLmxlbjsKKyAgICByZW1haW5pbmcgPSBidWZmZXItPmxlbjsKICAgICB3cml0dGVuID0gMDsKICAgICB3aGlsZSAocmVtYWluaW5nID4gc2VsZi0+YnVmZmVyX3NpemUpIHsKICAgICAgICAgUHlfc3NpemVfdCBuID0gX2J1ZmZlcmVkd3JpdGVyX3Jhd193cml0ZSgKLSAgICAgICAgICAgIHNlbGYsIChjaGFyICopIGJ1Zi5idWYgKyB3cml0dGVuLCBidWYubGVuIC0gd3JpdHRlbik7CisgICAgICAgICAgICBzZWxmLCAoY2hhciAqKSBidWZmZXItPmJ1ZiArIHdyaXR0ZW4sIGJ1ZmZlci0+bGVuIC0gd3JpdHRlbik7CiAgICAgICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9IGVsc2UgaWYgKG4gPT0gLTIpIHsKQEAgLTIxMDIsNyArMjAyNyw3IEBACiAgICAgICAgICAgICBpZiAocmVtYWluaW5nID4gc2VsZi0+YnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgICAgICAvKiBDYW4ndCBidWZmZXIgZXZlcnl0aGluZywgc3RpbGwgYnVmZmVyIGFzIG11Y2ggYXMgcG9zc2libGUgKi8KICAgICAgICAgICAgICAgICBtZW1jcHkoc2VsZi0+YnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBidWYuYnVmICsgd3JpdHRlbiwgc2VsZi0+YnVmZmVyX3NpemUpOworICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBidWZmZXItPmJ1ZiArIHdyaXR0ZW4sIHNlbGYtPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgICAgICAgICBzZWxmLT5yYXdfcG9zID0gMDsKICAgICAgICAgICAgICAgICBBREpVU1RfUE9TSVRJT04oc2VsZiwgc2VsZi0+YnVmZmVyX3NpemUpOwogICAgICAgICAgICAgICAgIHNlbGYtPndyaXRlX2VuZCA9IHNlbGYtPmJ1ZmZlcl9zaXplOwpAQCAtMjEyNSw3ICsyMDUwLDcgQEAKICAgICBpZiAoc2VsZi0+cmVhZGFibGUpCiAgICAgICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CiAgICAgaWYgKHJlbWFpbmluZyA+IDApIHsKLSAgICAgICAgbWVtY3B5KHNlbGYtPmJ1ZmZlciwgKGNoYXIgKikgYnVmLmJ1ZiArIHdyaXR0ZW4sIHJlbWFpbmluZyk7CisgICAgICAgIG1lbWNweShzZWxmLT5idWZmZXIsIChjaGFyICopIGJ1ZmZlci0+YnVmICsgd3JpdHRlbiwgcmVtYWluaW5nKTsKICAgICAgICAgd3JpdHRlbiArPSByZW1haW5pbmc7CiAgICAgfQogICAgIHNlbGYtPndyaXRlX3BvcyA9IDA7CkBAIC0yMTM5LDk2ICsyMDY0LDggQEAKIAogZXJyb3I6CiAgICAgTEVBVkVfQlVGRkVSRUQoc2VsZikKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgIHJldHVybiByZXM7CiB9Ci0KLXN0YXRpYyBQeU1ldGhvZERlZiBidWZmZXJlZHdyaXRlcl9tZXRob2RzW10gPSB7Ci0gICAgLyogQnVmZmVyZWRJT01peGluIG1ldGhvZHMgKi8KLSAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2Nsb3NlLCBNRVRIX05PQVJHU30sCi0gICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZGV0YWNoLCBNRVRIX05PQVJHU30sCi0gICAgeyJzZWVrYWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zZWVrYWJsZSwgTUVUSF9OT0FSR1N9LAotICAgIHsicmVhZGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZGFibGUsIE1FVEhfTk9BUkdTfSwKLSAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3dyaXRhYmxlLCBNRVRIX05PQVJHU30sCi0gICAgeyJmaWxlbm8iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmlsZW5vLCBNRVRIX05PQVJHU30sCi0gICAgeyJpc2F0dHkiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfaXNhdHR5LCBNRVRIX05PQVJHU30sCi0gICAgeyJfZGVhbGxvY193YXJuIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2RlYWxsb2Nfd2FybiwgTUVUSF9PfSwKLSAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9nZXRzdGF0ZSwgTUVUSF9OT0FSR1N9LAotCi0gICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZHdyaXRlcl93cml0ZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmx1c2gsIE1FVEhfTk9BUkdTfSwKLSAgICB7InNlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2VlaywgTUVUSF9WQVJBUkdTfSwKLSAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfdGVsbCwgTUVUSF9OT0FSR1N9LAotICAgIHsiX19zaXplb2ZfXyIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zaXplb2YsIE1FVEhfTk9BUkdTfSwKLSAgICB7TlVMTCwgTlVMTH0KLX07Ci0KLXN0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHdyaXRlcl9tZW1iZXJzW10gPSB7Ci0gICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKLSAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAotICAgIHtOVUxMfQotfTsKLQotc3RhdGljIFB5R2V0U2V0RGVmIGJ1ZmZlcmVkd3JpdGVyX2dldHNldFtdID0gewotICAgIHsiY2xvc2VkIiwgKGdldHRlcilidWZmZXJlZF9jbG9zZWRfZ2V0LCBOVUxMLCBOVUxMfSwKLSAgICB7Im5hbWUiLCAoZ2V0dGVyKWJ1ZmZlcmVkX25hbWVfZ2V0LCBOVUxMLCBOVUxMfSwKLSAgICB7Im1vZGUiLCAoZ2V0dGVyKWJ1ZmZlcmVkX21vZGVfZ2V0LCBOVUxMLCBOVUxMfSwKLSAgICB7TlVMTH0KLX07Ci0KLQotUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRXcml0ZXJfVHlwZSA9IHsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX2lvLkJ1ZmZlcmVkV3JpdGVyIiwgICAgICAgLyp0cF9uYW1lKi8KLSAgICBzaXplb2YoYnVmZmVyZWQpLCAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAoZGVzdHJ1Y3RvcilidWZmZXJlZF9kZWFsbG9jLCAgICAgLyp0cF9kZWFsbG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLwotICAgIChyZXByZnVuYylidWZmZXJlZF9yZXByLCAgICAvKnRwX3JlcHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qdHBfZmxhZ3MqLwotICAgIGJ1ZmZlcmVkd3JpdGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCB3ZWFrcmVmbGlzdCksIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgYnVmZmVyZWR3cml0ZXJfbWV0aG9kcywgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICBidWZmZXJlZHdyaXRlcl9tZW1iZXJzLCAgICAgLyogdHBfbWVtYmVycyAqLwotICAgIGJ1ZmZlcmVkd3JpdGVyX2dldHNldCwgICAgICAvKiB0cF9nZXRzZXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KLSAgICBvZmZzZXRvZihidWZmZXJlZCwgZGljdCksICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYylidWZmZXJlZHdyaXRlcl9pbml0LCAvKiB0cF9pbml0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwotfTsKIAwKIAogCkBAIC0yMjM2LDE4ICsyMDczLDYgQEAKICAqIEJ1ZmZlcmVkUldQYWlyCiAgKi8KIAotUHlEb2NfU1RSVkFSKGJ1ZmZlcmVkcndwYWlyX2RvYywKLSAgICAiQSBidWZmZXJlZCByZWFkZXIgYW5kIHdyaXRlciBvYmplY3QgdG9nZXRoZXIuXG4iCi0gICAgIlxuIgotICAgICJBIGJ1ZmZlcmVkIHJlYWRlciBvYmplY3QgYW5kIGJ1ZmZlcmVkIHdyaXRlciBvYmplY3QgcHV0IHRvZ2V0aGVyIHRvXG4iCi0gICAgImZvcm0gYSBzZXF1ZW50aWFsIElPIG9iamVjdCB0aGF0IGNhbiByZWFkIGFuZCB3cml0ZS4gVGhpcyBpcyB0eXBpY2FsbHlcbiIKLSAgICAidXNlZCB3aXRoIGEgc29ja2V0IG9yIHR3by13YXkgcGlwZS5cbiIKLSAgICAiXG4iCi0gICAgInJlYWRlciBhbmQgd3JpdGVyIGFyZSBSYXdJT0Jhc2Ugb2JqZWN0cyB0aGF0IGFyZSByZWFkYWJsZSBhbmRcbiIKLSAgICAid3JpdGVhYmxlIHJlc3BlY3RpdmVseS4gSWYgdGhlIGJ1ZmZlcl9zaXplIGlzIG9taXR0ZWQgaXQgZGVmYXVsdHMgdG9cbiIKLSAgICAiREVGQVVMVF9CVUZGRVJfU0laRS5cbiIKLSAgICApOwotCiAvKiBYWFggVGhlIHVzZWZ1bG5lc3Mgb2YgdGhpcyAoY29tcGFyZWQgdG8gaGF2aW5nIHR3byBzZXBhcmF0ZSBJTyBvYmplY3RzKSBpcwogICogcXVlc3Rpb25hYmxlLgogICovCkBAIC0yMjYwLDE3ICsyMDg1LDI5IEBACiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogfSByd3BhaXI7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CdWZmZXJlZFJXUGFpci5fX2luaXRfXworICAgIHJlYWRlcjogb2JqZWN0CisgICAgd3JpdGVyOiBvYmplY3QKKyAgICBidWZmZXJfc2l6ZTogUHlfc3NpemVfdChjX2RlZmF1bHQ9IkRFRkFVTFRfQlVGRkVSX1NJWkUiKSA9IERFRkFVTFRfQlVGRkVSX1NJWkUKKyAgICAvCisKK0EgYnVmZmVyZWQgcmVhZGVyIGFuZCB3cml0ZXIgb2JqZWN0IHRvZ2V0aGVyLgorCitBIGJ1ZmZlcmVkIHJlYWRlciBvYmplY3QgYW5kIGJ1ZmZlcmVkIHdyaXRlciBvYmplY3QgcHV0IHRvZ2V0aGVyIHRvCitmb3JtIGEgc2VxdWVudGlhbCBJTyBvYmplY3QgdGhhdCBjYW4gcmVhZCBhbmQgd3JpdGUuIFRoaXMgaXMgdHlwaWNhbGx5Cit1c2VkIHdpdGggYSBzb2NrZXQgb3IgdHdvLXdheSBwaXBlLgorCityZWFkZXIgYW5kIHdyaXRlciBhcmUgUmF3SU9CYXNlIG9iamVjdHMgdGhhdCBhcmUgcmVhZGFibGUgYW5kCit3cml0ZWFibGUgcmVzcGVjdGl2ZWx5LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0bworREVGQVVMVF9CVUZGRVJfU0laRS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIGludAotYnVmZmVyZWRyd3BhaXJfaW5pdChyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19pb19CdWZmZXJlZFJXUGFpcl9fX2luaXRfX19pbXBsKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKnJlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp3cml0ZXIsIFB5X3NzaXplX3QgYnVmZmVyX3NpemUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzI3ZTczZDFhZWU4Zjk4NCBpbnB1dD02MjBkNDJkNzFmMzNhMDMxXSovCiB7Ci0gICAgUHlPYmplY3QgKnJlYWRlciwgKndyaXRlcjsKLSAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gREVGQVVMVF9CVUZGRVJfU0laRTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT098bjpCdWZmZXJlZFJXUGFpciIsICZyZWFkZXIsICZ3cml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZidWZmZXJfc2l6ZSkpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQogICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfcmVhZGFibGUocmVhZGVyLCBQeV9UcnVlKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKF9QeUlPQmFzZV9jaGVja193cml0YWJsZSh3cml0ZXIsIFB5X1RydWUpID09IE5VTEwpCkBAIC0yMzY1LDYgKzIyMDIsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkcndwYWlyX3JlYWRpbnRvMShyd3BhaXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHJldHVybiBfZm9yd2FyZF9jYWxsKHNlbGYtPnJlYWRlciwgJlB5SWRfcmVhZGludG8xLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIGJ1ZmZlcmVkcndwYWlyX3dyaXRlKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+d3JpdGVyLCAmUHlJZF93cml0ZSwgYXJncyk7CkBAIC0yNDI5LDEyICsyMjcyLDMxMCBAQAogICAgIH0KICAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0cigoUHlPYmplY3QgKikgc2VsZi0+d3JpdGVyLCBfUHlJT19zdHJfY2xvc2VkKTsKIH0KKwwKKworCisvKgorICogQnVmZmVyZWRSYW5kb20KKyAqLworCisvKltjbGluaWMgaW5wdXRdCitfaW8uQnVmZmVyZWRSYW5kb20uX19pbml0X18KKyAgICByYXc6IG9iamVjdAorICAgIGJ1ZmZlcl9zaXplOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iREVGQVVMVF9CVUZGRVJfU0laRSIpID0gREVGQVVMVF9CVUZGRVJfU0laRQorCitBIGJ1ZmZlcmVkIGludGVyZmFjZSB0byByYW5kb20gYWNjZXNzIHN0cmVhbXMuCisKK1RoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgcmVhZGVyIGFuZCB3cml0ZXIgZm9yIGEgc2Vla2FibGUgc3RyZWFtLAorcmF3LCBnaXZlbiBpbiB0aGUgZmlyc3QgYXJndW1lbnQuIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkIGl0CitkZWZhdWx0cyB0byBERUZBVUxUX0JVRkZFUl9TSVpFLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgaW50CitfaW9fQnVmZmVyZWRSYW5kb21fX19pbml0X19faW1wbChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKnJhdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDNkNjRlYjBmNjRlNjRhMyBpbnB1dD1hNGU4MThmYjg2ZDBlNTBjXSovCit7CisgICAgc2VsZi0+b2sgPSAwOworICAgIHNlbGYtPmRldGFjaGVkID0gMDsKKworICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfc2Vla2FibGUocmF3LCBQeV9UcnVlKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKF9QeUlPQmFzZV9jaGVja19yZWFkYWJsZShyYXcsIFB5X1RydWUpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX3dyaXRhYmxlKHJhdywgUHlfVHJ1ZSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgUHlfSU5DUkVGKHJhdyk7CisgICAgUHlfWFNFVFJFRihzZWxmLT5yYXcsIHJhdyk7CisgICAgc2VsZi0+YnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZTsKKyAgICBzZWxmLT5yZWFkYWJsZSA9IDE7CisgICAgc2VsZi0+d3JpdGFibGUgPSAxOworCisgICAgaWYgKF9idWZmZXJlZF9pbml0KHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIF9idWZmZXJlZHJlYWRlcl9yZXNldF9idWYoc2VsZik7CisgICAgX2J1ZmZlcmVkd3JpdGVyX3Jlc2V0X2J1ZihzZWxmKTsKKyAgICBzZWxmLT5wb3MgPSAwOworCisgICAgc2VsZi0+ZmFzdF9jbG9zZWRfY2hlY2tzID0gKFB5X1RZUEUoc2VsZikgPT0gJlB5QnVmZmVyZWRSYW5kb21fVHlwZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHJhdykgPT0gJlB5RmlsZUlPX1R5cGUpOworCisgICAgc2VsZi0+b2sgPSAxOworICAgIHJldHVybiAwOworfQorCisjaW5jbHVkZSAiY2xpbmljL2J1ZmZlcmVkaW8uYy5oIgorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBidWZmZXJlZGlvYmFzZV9tZXRob2RzW10gPSB7CisgICAgX0lPX19CVUZGRVJFRElPQkFTRV9ERVRBQ0hfTUVUSE9EREVGCisgICAgeyJyZWFkIiwgYnVmZmVyZWRpb2Jhc2VfcmVhZCwgTUVUSF9WQVJBUkdTLCBidWZmZXJlZGlvYmFzZV9yZWFkX2RvY30sCisgICAgeyJyZWFkMSIsIGJ1ZmZlcmVkaW9iYXNlX3JlYWQxLCBNRVRIX1ZBUkFSR1MsIGJ1ZmZlcmVkaW9iYXNlX3JlYWQxX2RvY30sCisgICAgX0lPX19CVUZGRVJFRElPQkFTRV9SRUFESU5UT19NRVRIT0RERUYKKyAgICBfSU9fX0JVRkZFUkVESU9CQVNFX1JFQURJTlRPMV9NRVRIT0RERUYKKyAgICB7IndyaXRlIiwgYnVmZmVyZWRpb2Jhc2Vfd3JpdGUsIE1FVEhfVkFSQVJHUywgYnVmZmVyZWRpb2Jhc2Vfd3JpdGVfZG9jfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK1B5VHlwZU9iamVjdCBQeUJ1ZmZlcmVkSU9CYXNlX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9pby5fQnVmZmVyZWRJT0Jhc2UiLCAgICAgIC8qdHBfbmFtZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgIC8qdHBfZmxhZ3MqLworICAgIGJ1ZmZlcmVkaW9iYXNlX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIGJ1ZmZlcmVkaW9iYXNlX21ldGhvZHMsICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgJlB5SU9CYXNlX1R5cGUsICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KK307CisKKworc3RhdGljIFB5TWV0aG9kRGVmIGJ1ZmZlcmVkcmVhZGVyX21ldGhvZHNbXSA9IHsKKyAgICAvKiBCdWZmZXJlZElPTWl4aW4gbWV0aG9kcyAqLworICAgIHsiZGV0YWNoIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2RldGFjaCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2ltcGxlX2ZsdXNoLCBNRVRIX05PQVJHU30sCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9jbG9zZSwgTUVUSF9OT0FSR1N9LAorICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2Vla2FibGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWRhYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJmaWxlbm8iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmlsZW5vLCBNRVRIX05PQVJHU30sCisgICAgeyJpc2F0dHkiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfaXNhdHR5LCBNRVRIX05PQVJHU30sCisgICAgeyJfZGVhbGxvY193YXJuIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2RlYWxsb2Nfd2FybiwgTUVUSF9PfSwKKyAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9nZXRzdGF0ZSwgTUVUSF9OT0FSR1N9LAorCisgICAgX0lPX19CVUZGRVJFRF9SRUFEX01FVEhPRERFRgorICAgIF9JT19fQlVGRkVSRURfUEVFS19NRVRIT0RERUYKKyAgICBfSU9fX0JVRkZFUkVEX1JFQUQxX01FVEhPRERFRgorICAgIF9JT19fQlVGRkVSRURfUkVBRElOVE9fTUVUSE9EREVGCisgICAgX0lPX19CVUZGRVJFRF9SRUFESU5UTzFfTUVUSE9EREVGCisgICAgX0lPX19CVUZGRVJFRF9SRUFETElORV9NRVRIT0RERUYKKyAgICBfSU9fX0JVRkZFUkVEX1NFRUtfTUVUSE9EREVGCisgICAgeyJ0ZWxsIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RlbGwsIE1FVEhfTk9BUkdTfSwKKyAgICBfSU9fX0JVRkZFUkVEX1RSVU5DQVRFX01FVEhPRERFRgorICAgIHsiX19zaXplb2ZfXyIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9zaXplb2YsIE1FVEhfTk9BUkdTfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHJlYWRlcl9tZW1iZXJzW10gPSB7CisgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIGJ1ZmZlcmVkcmVhZGVyX2dldHNldFtdID0geworICAgIHsiY2xvc2VkIiwgKGdldHRlcilidWZmZXJlZF9jbG9zZWRfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7Im5hbWUiLCAoZ2V0dGVyKWJ1ZmZlcmVkX25hbWVfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7Im1vZGUiLCAoZ2V0dGVyKWJ1ZmZlcmVkX21vZGVfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0KK307CisKKworUHlUeXBlT2JqZWN0IFB5QnVmZmVyZWRSZWFkZXJfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiX2lvLkJ1ZmZlcmVkUmVhZGVyIiwgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoYnVmZmVyZWQpLCAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAoZGVzdHJ1Y3RvcilidWZmZXJlZF9kZWFsbG9jLCAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIChyZXByZnVuYylidWZmZXJlZF9yZXByLCAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAvKnRwX2ZsYWdzKi8KKyAgICBfaW9fQnVmZmVyZWRSZWFkZXJfX19pbml0X19fX2RvY19fLCAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCB3ZWFrcmVmbGlzdCksIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgKGl0ZXJuZXh0ZnVuYylidWZmZXJlZF9pdGVybmV4dCwgLyogdHBfaXRlcm5leHQgKi8KKyAgICBidWZmZXJlZHJlYWRlcl9tZXRob2RzLCAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGJ1ZmZlcmVkcmVhZGVyX21lbWJlcnMsICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgYnVmZmVyZWRyZWFkZXJfZ2V0c2V0LCAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCBkaWN0KSwgLyogdHBfZGljdG9mZnNldCAqLworICAgIF9pb19CdWZmZXJlZFJlYWRlcl9fX2luaXRfXywgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KK307CisKKworc3RhdGljIFB5TWV0aG9kRGVmIGJ1ZmZlcmVkd3JpdGVyX21ldGhvZHNbXSA9IHsKKyAgICAvKiBCdWZmZXJlZElPTWl4aW4gbWV0aG9kcyAqLworICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfY2xvc2UsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImRldGFjaCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9kZXRhY2gsIE1FVEhfTk9BUkdTfSwKKyAgICB7InNlZWthYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3NlZWthYmxlLCBNRVRIX05PQVJHU30sCisgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF93cml0YWJsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmlsZW5vIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2ZpbGVubywgTUVUSF9OT0FSR1N9LAorICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2lzYXR0eSwgTUVUSF9OT0FSR1N9LAorICAgIHsiX2RlYWxsb2Nfd2FybiIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9kZWFsbG9jX3dhcm4sIE1FVEhfT30sCisgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKKworICAgIF9JT19CVUZGRVJFRFdSSVRFUl9XUklURV9NRVRIT0RERUYKKyAgICBfSU9fX0JVRkZFUkVEX1RSVU5DQVRFX01FVEhPRERFRgorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmx1c2gsIE1FVEhfTk9BUkdTfSwKKyAgICBfSU9fX0JVRkZFUkVEX1NFRUtfTUVUSE9EREVGCisgICAgeyJ0ZWxsIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RlbGwsIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2l6ZW9mLCBNRVRIX05PQVJHU30sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWR3cml0ZXJfbWVtYmVyc1tdID0geworICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeUdldFNldERlZiBidWZmZXJlZHdyaXRlcl9nZXRzZXRbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpYnVmZmVyZWRfY2xvc2VkX2dldCwgTlVMTCwgTlVMTH0sCisgICAgeyJuYW1lIiwgKGdldHRlcilidWZmZXJlZF9uYW1lX2dldCwgTlVMTCwgTlVMTH0sCisgICAgeyJtb2RlIiwgKGdldHRlcilidWZmZXJlZF9tb2RlX2dldCwgTlVMTCwgTlVMTH0sCisgICAge05VTEx9Cit9OworCisKK1B5VHlwZU9iamVjdCBQeUJ1ZmZlcmVkV3JpdGVyX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9pby5CdWZmZXJlZFdyaXRlciIsICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKGJ1ZmZlcmVkKSwgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgKGRlc3RydWN0b3IpYnVmZmVyZWRfZGVhbGxvYywgICAgIC8qdHBfZGVhbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUgKi8KKyAgICAocmVwcmZ1bmMpYnVmZmVyZWRfcmVwciwgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQorICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KKyAgICBfaW9fQnVmZmVyZWRXcml0ZXJfX19pbml0X19fX2RvY19fLCAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIG9mZnNldG9mKGJ1ZmZlcmVkLCB3ZWFrcmVmbGlzdCksIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgYnVmZmVyZWR3cml0ZXJfbWV0aG9kcywgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBidWZmZXJlZHdyaXRlcl9tZW1iZXJzLCAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGJ1ZmZlcmVkd3JpdGVyX2dldHNldCwgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICBvZmZzZXRvZihidWZmZXJlZCwgZGljdCksICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIF9pb19CdWZmZXJlZFdyaXRlcl9fX2luaXRfXywgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KK307CisKIAogc3RhdGljIFB5TWV0aG9kRGVmIGJ1ZmZlcmVkcndwYWlyX21ldGhvZHNbXSA9IHsKICAgICB7InJlYWQiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcmVhZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7InBlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcGVlaywgTUVUSF9WQVJBUkdTfSwKICAgICB7InJlYWQxIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkcndwYWlyX3JlYWQxLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsicmVhZGludG8iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcmVhZGludG8sIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZWFkaW50bzEiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfcmVhZGludG8xLCBNRVRIX1ZBUkFSR1N9LAogCiAgICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZHJ3cGFpcl93cml0ZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkcndwYWlyX2ZsdXNoLCBNRVRIX05PQVJHU30sCkBAIC0yNDc3LDcgKzI2MTgsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQogICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKiB0cF9mbGFncyAqLwotICAgIGJ1ZmZlcmVkcndwYWlyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfaW9fQnVmZmVyZWRSV1BhaXJfX19pbml0X19fX2RvY19fLCAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkcndwYWlyX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkcndwYWlyX2NsZWFyLCAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwpAQCAtMjQ5Miw3ICsyNjMzLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgIG9mZnNldG9mKHJ3cGFpciwgZGljdCksICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgKGluaXRwcm9jKWJ1ZmZlcmVkcndwYWlyX2luaXQsIC8qIHRwX2luaXQgKi8KKyAgICBfaW9fQnVmZmVyZWRSV1BhaXJfX19pbml0X18sIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KQEAgLTI1MDYsNjMgKzI2NDcsOCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKLQwKIAogCi0vKgotICogQnVmZmVyZWRSYW5kb20KLSAqLwotCi1QeURvY19TVFJWQVIoYnVmZmVyZWRyYW5kb21fZG9jLAotICAgICJBIGJ1ZmZlcmVkIGludGVyZmFjZSB0byByYW5kb20gYWNjZXNzIHN0cmVhbXMuXG4iCi0gICAgIlxuIgotICAgICJUaGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIHJlYWRlciBhbmQgd3JpdGVyIGZvciBhIHNlZWthYmxlIHN0cmVhbSxcbiIKLSAgICAicmF3LCBnaXZlbiBpbiB0aGUgZmlyc3QgYXJndW1lbnQuIElmIHRoZSBidWZmZXJfc2l6ZSBpcyBvbWl0dGVkIGl0XG4iCi0gICAgImRlZmF1bHRzIHRvIERFRkFVTFRfQlVGRkVSX1NJWkUuXG4iCi0gICAgKTsKLQotc3RhdGljIGludAotYnVmZmVyZWRyYW5kb21faW5pdChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQotewotICAgIGNoYXIgKmt3bGlzdFtdID0geyJyYXciLCAiYnVmZmVyX3NpemUiLCBOVUxMfTsKLSAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gREVGQVVMVF9CVUZGRVJfU0laRTsKLSAgICBQeU9iamVjdCAqcmF3OwotCi0gICAgc2VsZi0+b2sgPSAwOwotICAgIHNlbGYtPmRldGFjaGVkID0gMDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfG46QnVmZmVyZWRSYW5kb20iLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhdywgJmJ1ZmZlcl9zaXplKSkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKF9QeUlPQmFzZV9jaGVja19zZWVrYWJsZShyYXcsIFB5X1RydWUpID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX3JlYWRhYmxlKHJhdywgUHlfVHJ1ZSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChfUHlJT0Jhc2VfY2hlY2tfd3JpdGFibGUocmF3LCBQeV9UcnVlKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQeV9DTEVBUihzZWxmLT5yYXcpOwotICAgIFB5X0lOQ1JFRihyYXcpOwotICAgIHNlbGYtPnJhdyA9IHJhdzsKLSAgICBzZWxmLT5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplOwotICAgIHNlbGYtPnJlYWRhYmxlID0gMTsKLSAgICBzZWxmLT53cml0YWJsZSA9IDE7Ci0KLSAgICBpZiAoX2J1ZmZlcmVkX2luaXQoc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgX2J1ZmZlcmVkcmVhZGVyX3Jlc2V0X2J1ZihzZWxmKTsKLSAgICBfYnVmZmVyZWR3cml0ZXJfcmVzZXRfYnVmKHNlbGYpOwotICAgIHNlbGYtPnBvcyA9IDA7Ci0KLSAgICBzZWxmLT5mYXN0X2Nsb3NlZF9jaGVja3MgPSAoUHlfVFlQRShzZWxmKSA9PSAmUHlCdWZmZXJlZFJhbmRvbV9UeXBlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocmF3KSA9PSAmUHlGaWxlSU9fVHlwZSk7Ci0KLSAgICBzZWxmLT5vayA9IDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBQeU1ldGhvZERlZiBidWZmZXJlZHJhbmRvbV9tZXRob2RzW10gPSB7CiAgICAgLyogQnVmZmVyZWRJT01peGluIG1ldGhvZHMgKi8KICAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2Nsb3NlLCBNRVRIX05PQVJHU30sCkBAIC0yNTc3LDE1ICsyNjYzLDE2IEBACiAKICAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2ZsdXNoLCBNRVRIX05PQVJHU30sCiAKLSAgICB7InNlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2VlaywgTUVUSF9WQVJBUkdTfSwKKyAgICBfSU9fX0JVRkZFUkVEX1NFRUtfTUVUSE9EREVGCiAgICAgeyJ0ZWxsIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RlbGwsIE1FVEhfTk9BUkdTfSwKLSAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9yZWFkLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsicmVhZDEiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZDEsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJyZWFkaW50byIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9yZWFkaW50bywgTUVUSF9WQVJBUkdTfSwKLSAgICB7InJlYWRsaW5lIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX3JlYWRsaW5lLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsicGVlayIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9wZWVrLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWR3cml0ZXJfd3JpdGUsIE1FVEhfVkFSQVJHU30sCisgICAgX0lPX19CVUZGRVJFRF9UUlVOQ0FURV9NRVRIT0RERUYKKyAgICBfSU9fX0JVRkZFUkVEX1JFQURfTUVUSE9EREVGCisgICAgX0lPX19CVUZGRVJFRF9SRUFEMV9NRVRIT0RERUYKKyAgICBfSU9fX0JVRkZFUkVEX1JFQURJTlRPX01FVEhPRERFRgorICAgIF9JT19fQlVGRkVSRURfUkVBRElOVE8xX01FVEhPRERFRgorICAgIF9JT19fQlVGRkVSRURfUkVBRExJTkVfTUVUSE9EREVGCisgICAgX0lPX19CVUZGRVJFRF9QRUVLX01FVEhPRERFRgorICAgIF9JT19CVUZGRVJFRFdSSVRFUl9XUklURV9NRVRIT0RERUYKICAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfc2l6ZW9mLCBNRVRIX05PQVJHU30sCiAgICAge05VTEwsIE5VTEx9CiB9OwpAQCAtMjYyNiw3ICsyNzEzLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCi0gICAgYnVmZmVyZWRyYW5kb21fZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIF9pb19CdWZmZXJlZFJhbmRvbV9fX2luaXRfX19fZG9jX18sIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCkBAIC0yNjQxLDcgKzI3MjgsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgb2Zmc2V0b2YoYnVmZmVyZWQsIGRpY3QpLCAvKnRwX2RpY3RvZmZzZXQqLwotICAgIChpbml0cHJvYylidWZmZXJlZHJhbmRvbV9pbml0LCAvKiB0cF9pbml0ICovCisgICAgX2lvX0J1ZmZlcmVkUmFuZG9tX19faW5pdF9fLCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9ieXRlc2lvLmMgYi9Nb2R1bGVzL19pby9ieXRlc2lvLmMKaW5kZXggYjU1YWI3Mi4uOWU1ZDc4YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vYnl0ZXNpby5jCisrKyBiL01vZHVsZXMvX2lvL2J5dGVzaW8uYwpAQCAtMiwxMiArMiwxNyBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIiAgICAgICAvKiBmb3Igb2Zmc2V0b2YoKSAqLwogI2luY2x1ZGUgIl9pb21vZHVsZS5oIgogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgX2lvCitjbGFzcyBfaW8uQnl0ZXNJTyAiYnl0ZXNpbyAqIiAiJlB5Qnl0ZXNJT19UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9N2Y1MGVjMDM0ZjVjMGIyNl0qLworCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIGNoYXIgKmJ1ZjsKKyAgICBQeU9iamVjdCAqYnVmOwogICAgIFB5X3NzaXplX3QgcG9zOwogICAgIFB5X3NzaXplX3Qgc3RyaW5nX3NpemU7Ci0gICAgc2l6ZV90IGJ1Zl9zaXplOwogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKICAgICBQeV9zc2l6ZV90IGV4cG9ydHM7CkBAIC0xOCw2ICsyMywxMiBAQAogICAgIGJ5dGVzaW8gKnNvdXJjZTsKIH0gYnl0ZXNpb2J1ZjsKIAorLyogVGhlIGJ5dGVzaW8gb2JqZWN0IGNhbiBiZSBpbiB0aHJlZSBzdGF0ZXM6CisgICogUHlfUkVGQ05UKGJ1ZikgPT0gMSwgZXhwb3J0cyA9PSAwLgorICAqIFB5X1JFRkNOVChidWYpID4gMS4gIGV4cG9ydHMgPT0gMCwKKyAgICBmaXJzdCBtb2RpZmljYXRpb24gb3IgZXhwb3J0IGNhdXNlcyB0aGUgaW50ZXJuYWwgYnVmZmVyIGNvcHlpbmcuCisgICogZXhwb3J0cyA+IDAuICBQeV9SRUZDTlQoYnVmKSA9PSAxLCBhbnkgbW9kaWZpY2F0aW9ucyBhcmUgZm9yYmlkZGVuLgorKi8KIAogI2RlZmluZSBDSEVDS19DTE9TRUQoc2VsZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICgoc2VsZiktPmJ1ZiA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzMsNDAgKzQ0LDY0IEBACiAgICAgICAgIHJldHVybiBOVUxMOyBcCiAgICAgfQogCisjZGVmaW5lIFNIQVJFRF9CVUYoc2VsZikgKFB5X1JFRkNOVCgoc2VsZiktPmJ1ZikgPiAxKQorCiAKIC8qIEludGVybmFsIHJvdXRpbmUgdG8gZ2V0IGEgbGluZSBmcm9tIHRoZSBidWZmZXIgb2YgYSBCeXRlc0lPCiAgICBvYmplY3QuIFJldHVybnMgdGhlIGxlbmd0aCBiZXR3ZWVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZQogICAgbmV4dCBuZXdsaW5lIGNoYXJhY3Rlci4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci1nZXRfbGluZShieXRlc2lvICpzZWxmLCBjaGFyICoqb3V0cHV0KQorc2Nhbl9lb2woYnl0ZXNpbyAqc2VsZiwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgY2hhciAqbjsKLSAgICBjb25zdCBjaGFyICpzdHJfZW5kOwotICAgIFB5X3NzaXplX3QgbGVuOworICAgIGNvbnN0IGNoYXIgKnN0YXJ0LCAqbjsKKyAgICBQeV9zc2l6ZV90IG1heGxlbjsKIAogICAgIGFzc2VydChzZWxmLT5idWYgIT0gTlVMTCk7CisgICAgYXNzZXJ0KHNlbGYtPnBvcyA+PSAwKTsKKworICAgIGlmIChzZWxmLT5wb3MgPj0gc2VsZi0+c3RyaW5nX3NpemUpCisgICAgICAgIHJldHVybiAwOwogCiAgICAgLyogTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLCB1cCB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHMuICovCi0gICAgc3RyX2VuZCA9IHNlbGYtPmJ1ZiArIHNlbGYtPnN0cmluZ19zaXplOwotICAgIGZvciAobiA9IHNlbGYtPmJ1ZiArIHNlbGYtPnBvczsKLSAgICAgICAgIG4gPCBzdHJfZW5kICYmICpuICE9ICdcbic7Ci0gICAgICAgICBuKyspOworICAgIG1heGxlbiA9IHNlbGYtPnN0cmluZ19zaXplIC0gc2VsZi0+cG9zOworICAgIGlmIChsZW4gPCAwIHx8IGxlbiA+IG1heGxlbikKKyAgICAgICAgbGVuID0gbWF4bGVuOwogCi0gICAgLyogU2tpcCB0aGUgbmV3bGluZSBjaGFyYWN0ZXIgKi8KLSAgICBpZiAobiA8IHN0cl9lbmQpCi0gICAgICAgIG4rKzsKLQotICAgIC8qIEdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gKi8KLSAgICBsZW4gPSBuIC0gKHNlbGYtPmJ1ZiArIHNlbGYtPnBvcyk7Ci0gICAgKm91dHB1dCA9IHNlbGYtPmJ1ZiArIHNlbGYtPnBvczsKLQorICAgIGlmIChsZW4pIHsKKyAgICAgICAgc3RhcnQgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5idWYpICsgc2VsZi0+cG9zOworICAgICAgICBuID0gbWVtY2hyKHN0YXJ0LCAnXG4nLCBsZW4pOworICAgICAgICBpZiAobikKKyAgICAgICAgICAgIC8qIEdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIGVuZCBvZgorICAgICAgICAgICAgICAgdGhlIGxpbmUuICovCisgICAgICAgICAgICBsZW4gPSBuIC0gc3RhcnQgKyAxOworICAgIH0KICAgICBhc3NlcnQobGVuID49IDApOwogICAgIGFzc2VydChzZWxmLT5wb3MgPCBQWV9TU0laRV9UX01BWCAtIGxlbik7Ci0gICAgc2VsZi0+cG9zICs9IGxlbjsKIAogICAgIHJldHVybiBsZW47CiB9CiAKKy8qIEludGVybmFsIHJvdXRpbmUgZm9yIGRldGFjaGluZyB0aGUgc2hhcmVkIGJ1ZmZlciBvZiBCeXRlc0lPIG9iamVjdHMuCisgICBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgJ3NpemUnIGFyZ3VtZW50IGlzIG5vbi1uZWdhdGl2ZSBhbmQKKyAgIG5vdCBsZXNzZXIgdGhhbiBzZWxmLT5zdHJpbmdfc2l6ZS4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuICovCitzdGF0aWMgaW50Cit1bnNoYXJlX2J1ZmZlcihieXRlc2lvICpzZWxmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBQeU9iamVjdCAqbmV3X2J1ZiwgKm9sZF9idWY7CisgICAgYXNzZXJ0KFNIQVJFRF9CVUYoc2VsZikpOworICAgIGFzc2VydChzZWxmLT5leHBvcnRzID09IDApOworICAgIGFzc2VydChzaXplID49IChzaXplX3Qpc2VsZi0+c3RyaW5nX3NpemUpOworICAgIG5ld19idWYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpOworICAgIGlmIChuZXdfYnVmID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBtZW1jcHkoUHlCeXRlc19BU19TVFJJTkcobmV3X2J1ZiksIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPmJ1ZiksCisgICAgICAgICAgIHNlbGYtPnN0cmluZ19zaXplKTsKKyAgICBvbGRfYnVmID0gc2VsZi0+YnVmOworICAgIHNlbGYtPmJ1ZiA9IG5ld19idWY7CisgICAgUHlfREVDUkVGKG9sZF9idWYpOworICAgIHJldHVybiAwOworfQorCiAvKiBJbnRlcm5hbCByb3V0aW5lIGZvciBjaGFuZ2luZyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIG9mIEJ5dGVzSU8gb2JqZWN0cy4KICAgIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSAnc2l6ZScgYXJndW1lbnQgaXMgbm9uLW5lZ2F0aXZlLiAgUmV0dXJucwogICAgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuICovCkBAIC03NSw4ICsxMTAsNyBAQAogewogICAgIC8qIEhlcmUsIHVuc2lnbmVkIHR5cGVzIGFyZSB1c2VkIHRvIGF2b2lkIGRlYWxpbmcgd2l0aCBzaWduZWQgaW50ZWdlcgogICAgICAgIG92ZXJmbG93LCB3aGljaCBpcyB1bmRlZmluZWQgaW4gQy4gKi8KLSAgICBzaXplX3QgYWxsb2MgPSBzZWxmLT5idWZfc2l6ZTsKLSAgICBjaGFyICpuZXdfYnVmID0gTlVMTDsKKyAgICBzaXplX3QgYWxsb2MgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPmJ1Zik7CiAKICAgICBhc3NlcnQoc2VsZi0+YnVmICE9IE5VTEwpOwogCkBAIC0xMDQsMTMgKzEzOCwxNSBAQAogCiAgICAgaWYgKGFsbG9jID4gKChzaXplX3QpLTEpIC8gc2l6ZW9mKGNoYXIpKQogICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgIG5ld19idWYgPSAoY2hhciAqKVB5TWVtX1JlYWxsb2Moc2VsZi0+YnVmLCBhbGxvYyAqIHNpemVvZihjaGFyKSk7Ci0gICAgaWYgKG5ld19idWYgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoU0hBUkVEX0JVRihzZWxmKSkgeworICAgICAgICBpZiAodW5zaGFyZV9idWZmZXIoc2VsZiwgYWxsb2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgc2VsZi0+YnVmX3NpemUgPSBhbGxvYzsKLSAgICBzZWxmLT5idWYgPSBuZXdfYnVmOworICAgIGVsc2UgeworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZzZWxmLT5idWYsIGFsbG9jKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgcmV0dXJuIDA7CiAKQEAgLTEyNSwxMiArMTYxLDE4IEBACiBzdGF0aWMgUHlfc3NpemVfdAogd3JpdGVfYnl0ZXMoYnl0ZXNpbyAqc2VsZiwgY29uc3QgY2hhciAqYnl0ZXMsIFB5X3NzaXplX3QgbGVuKQogeworICAgIHNpemVfdCBlbmRwb3M7CiAgICAgYXNzZXJ0KHNlbGYtPmJ1ZiAhPSBOVUxMKTsKICAgICBhc3NlcnQoc2VsZi0+cG9zID49IDApOwogICAgIGFzc2VydChsZW4gPj0gMCk7CiAKLSAgICBpZiAoKHNpemVfdClzZWxmLT5wb3MgKyBsZW4gPiBzZWxmLT5idWZfc2l6ZSkgewotICAgICAgICBpZiAocmVzaXplX2J1ZmZlcihzZWxmLCAoc2l6ZV90KXNlbGYtPnBvcyArIGxlbikgPCAwKQorICAgIGVuZHBvcyA9IChzaXplX3Qpc2VsZi0+cG9zICsgbGVuOworICAgIGlmIChlbmRwb3MgPiAoc2l6ZV90KVB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+YnVmKSkgeworICAgICAgICBpZiAocmVzaXplX2J1ZmZlcihzZWxmLCBlbmRwb3MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSBpZiAoU0hBUkVEX0JVRihzZWxmKSkgeworICAgICAgICBpZiAodW5zaGFyZV9idWZmZXIoc2VsZiwgUHlfTUFYKGVuZHBvcywgKHNpemVfdClzZWxmLT5zdHJpbmdfc2l6ZSkpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTE0MywxOCArMTg1LDE4IEBACiAgICAgICAgICAgfCAgIHwgICAgICAgICAgICA8LS10byBwYWQtLT58PC0tLXRvIHdyaXRlLS0tPiAgICB8CiAgICAgICAgICAgMCAgIGJ1ZiAgICAgICAgICAgICAgICAgICBwb3NpdGlvbgogICAgICAgICAqLwotICAgICAgICBtZW1zZXQoc2VsZi0+YnVmICsgc2VsZi0+c3RyaW5nX3NpemUsICdcMCcsCisgICAgICAgIG1lbXNldChQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5idWYpICsgc2VsZi0+c3RyaW5nX3NpemUsICdcMCcsCiAgICAgICAgICAgICAgICAoc2VsZi0+cG9zIC0gc2VsZi0+c3RyaW5nX3NpemUpICogc2l6ZW9mKGNoYXIpKTsKICAgICB9CiAKICAgICAvKiBDb3B5IHRoZSBkYXRhIHRvIHRoZSBpbnRlcm5hbCBidWZmZXIsIG92ZXJ3cml0aW5nIHNvbWUgb2YgdGhlIGV4aXN0aW5nCiAgICAgICAgZGF0YSBpZiBzZWxmLT5wb3MgPCBzZWxmLT5zdHJpbmdfc2l6ZS4gKi8KLSAgICBtZW1jcHkoc2VsZi0+YnVmICsgc2VsZi0+cG9zLCBieXRlcywgbGVuKTsKLSAgICBzZWxmLT5wb3MgKz0gbGVuOworICAgIG1lbWNweShQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5idWYpICsgc2VsZi0+cG9zLCBieXRlcywgbGVuKTsKKyAgICBzZWxmLT5wb3MgPSBlbmRwb3M7CiAKICAgICAvKiBTZXQgdGhlIG5ldyBsZW5ndGggb2YgdGhlIGludGVybmFsIHN0cmluZyBpZiBpdCBoYXMgY2hhbmdlZC4gKi8KLSAgICBpZiAoc2VsZi0+c3RyaW5nX3NpemUgPCBzZWxmLT5wb3MpIHsKLSAgICAgICAgc2VsZi0+c3RyaW5nX3NpemUgPSBzZWxmLT5wb3M7CisgICAgaWYgKChzaXplX3Qpc2VsZi0+c3RyaW5nX3NpemUgPCBlbmRwb3MpIHsKKyAgICAgICAgc2VsZi0+c3RyaW5nX3NpemUgPSBlbmRwb3M7CiAgICAgfQogCiAgICAgcmV0dXJuIGxlbjsKQEAgLTE3MSw0MCArMjEzLDcxIEBACiAgICAgfQogfQogCi1QeURvY19TVFJWQVIocmVhZGFibGVfZG9jLAotInJlYWRhYmxlKCkgLT4gYm9vbC4gUmV0dXJucyBUcnVlIGlmIHRoZSBJTyBvYmplY3QgY2FuIGJlIHJlYWQuIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uQnl0ZXNJTy5yZWFkYWJsZQogCi1QeURvY19TVFJWQVIod3JpdGFibGVfZG9jLAotIndyaXRhYmxlKCkgLT4gYm9vbC4gUmV0dXJucyBUcnVlIGlmIHRoZSBJTyBvYmplY3QgY2FuIGJlIHdyaXR0ZW4uIik7CitSZXR1cm5zIFRydWUgaWYgdGhlIElPIG9iamVjdCBjYW4gYmUgcmVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotUHlEb2NfU1RSVkFSKHNlZWthYmxlX2RvYywKLSJzZWVrYWJsZSgpIC0+IGJvb2wuIFJldHVybnMgVHJ1ZSBpZiB0aGUgSU8gb2JqZWN0IGNhbiBiZSBzZWVrZWQuIik7Ci0KLS8qIEdlbmVyaWMgZ2V0dGVyIGZvciB0aGUgd3JpdGFibGUsIHJlYWRhYmxlIGFuZCBzZWVrYWJsZSBwcm9wZXJ0aWVzICovCiBzdGF0aWMgUHlPYmplY3QgKgotcmV0dXJuX25vdF9jbG9zZWQoYnl0ZXNpbyAqc2VsZikKK19pb19CeXRlc0lPX3JlYWRhYmxlX2ltcGwoYnl0ZXNpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00ZTkzODIyYWQ1YjYyMjYzIGlucHV0PTk2YzVkMGNjY2ZiMjlmNWNdKi8KIHsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAgICAgUHlfUkVUVVJOX1RSVUU7CiB9CiAKLVB5RG9jX1NUUlZBUihmbHVzaF9kb2MsCi0iZmx1c2goKSAtPiBOb25lLiAgRG9lcyBub3RoaW5nLiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLkJ5dGVzSU8ud3JpdGFibGUKKworUmV0dXJucyBUcnVlIGlmIHRoZSBJTyBvYmplY3QgY2FuIGJlIHdyaXR0ZW4uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX2ZsdXNoKGJ5dGVzaW8gKnNlbGYpCitfaW9fQnl0ZXNJT193cml0YWJsZV9pbXBsKGJ5dGVzaW8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjRmZjZhMjU0YjExNTBiOCBpbnB1dD03MDBlZWQ4MDgyNzc1NjBhXSovCit7CisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworICAgIFB5X1JFVFVSTl9UUlVFOworfQorCisvKltjbGluaWMgaW5wdXRdCitfaW8uQnl0ZXNJTy5zZWVrYWJsZQorCitSZXR1cm5zIFRydWUgaWYgdGhlIElPIG9iamVjdCBjYW4gYmUgc2Vla2VkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fc2Vla2FibGVfaW1wbChieXRlc2lvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZiNDE3ZjQ2ZGNjMDliNTYgaW5wdXQ9OTQyMWY2NTYyN2EzNDRkZF0qLworeworICAgIENIRUNLX0NMT1NFRChzZWxmKTsKKyAgICBQeV9SRVRVUk5fVFJVRTsKK30KKworLypbY2xpbmljIGlucHV0XQorX2lvLkJ5dGVzSU8uZmx1c2gKKworRG9lcyBub3RoaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fZmx1c2hfaW1wbChieXRlc2lvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE4N2UzZDc4MWNhMTM0YTAgaW5wdXQ9NTYxZWE0OTBiZTQ1ODFhN10qLwogewogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKGdldGJ1ZmZlcl9kb2MsCi0iZ2V0YnVmZmVyKCkgLT4gYnl0ZXMuXG4iCi0iXG4iCi0iR2V0IGEgcmVhZC13cml0ZSB2aWV3IG92ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBCeXRlc0lPIG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLmdldGJ1ZmZlcgorCitHZXQgYSByZWFkLXdyaXRlIHZpZXcgb3ZlciB0aGUgY29udGVudHMgb2YgdGhlIEJ5dGVzSU8gb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19nZXRidWZmZXIoYnl0ZXNpbyAqc2VsZikKK19pb19CeXRlc0lPX2dldGJ1ZmZlcl9pbXBsKGJ5dGVzaW8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzJjZDdjNmUxM2FhMDllZCBpbnB1dD04ZjczOGVmNjE1ODY1MTc2XSovCiB7CiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlID0gJl9QeUJ5dGVzSU9CdWZmZXJfVHlwZTsKICAgICBieXRlc2lvYnVmICpidWY7CkBAIC0yMjIsNTkgKzI5NSwxMDQgQEAKICAgICByZXR1cm4gdmlldzsKIH0KIAotUHlEb2NfU1RSVkFSKGdldHZhbF9kb2MsCi0iZ2V0dmFsdWUoKSAtPiBieXRlcy5cbiIKLSJcbiIKLSJSZXRyaWV2ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBCeXRlc0lPIG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLmdldHZhbHVlCisKK1JldHJpZXZlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIEJ5dGVzSU8gb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19nZXR2YWx1ZShieXRlc2lvICpzZWxmKQorX2lvX0J5dGVzSU9fZ2V0dmFsdWVfaW1wbChieXRlc2lvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWIzZjZhMzIzM2M4ZmQ2MjggaW5wdXQ9NGI0MDNhYzBhZjM5NzNlZF0qLwogewogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKLSAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5idWYsIHNlbGYtPnN0cmluZ19zaXplKTsKKyAgICBpZiAoc2VsZi0+c3RyaW5nX3NpemUgPD0gMSB8fCBzZWxmLT5leHBvcnRzID4gMCkKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+YnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+c3RyaW5nX3NpemUpOworCisgICAgaWYgKHNlbGYtPnN0cmluZ19zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+YnVmKSkgeworICAgICAgICBpZiAoU0hBUkVEX0JVRihzZWxmKSkgeworICAgICAgICAgICAgaWYgKHVuc2hhcmVfYnVmZmVyKHNlbGYsIHNlbGYtPnN0cmluZ19zaXplKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZzZWxmLT5idWYsIHNlbGYtPnN0cmluZ19zaXplKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfSU5DUkVGKHNlbGYtPmJ1Zik7CisgICAgcmV0dXJuIHNlbGYtPmJ1ZjsKIH0KIAotUHlEb2NfU1RSVkFSKGlzYXR0eV9kb2MsCi0iaXNhdHR5KCkgLT4gRmFsc2UuXG4iCi0iXG4iCi0iQWx3YXlzIHJldHVybnMgRmFsc2Ugc2luY2UgQnl0ZXNJTyBvYmplY3RzIGFyZSBub3QgY29ubmVjdGVkXG4iCi0idG8gYSB0dHktbGlrZSBkZXZpY2UuIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uQnl0ZXNJTy5pc2F0dHkKKworQWx3YXlzIHJldHVybnMgRmFsc2UuCisKK0J5dGVzSU8gb2JqZWN0cyBhcmUgbm90IGNvbm5lY3RlZCB0byBhIFRUWS1saWtlIGRldmljZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9faXNhdHR5KGJ5dGVzaW8gKnNlbGYpCitfaW9fQnl0ZXNJT19pc2F0dHlfaW1wbChieXRlc2lvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRmNjc3MTJlNjY5ZjZjOGYgaW5wdXQ9NmY5N2YwOTg1ZDEzZjgyN10qLwogewogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKICAgICBQeV9SRVRVUk5fRkFMU0U7CiB9CiAKLVB5RG9jX1NUUlZBUih0ZWxsX2RvYywKLSJ0ZWxsKCkgLT4gY3VycmVudCBmaWxlIHBvc2l0aW9uLCBhbiBpbnRlZ2VyXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLnRlbGwKKworQ3VycmVudCBmaWxlIHBvc2l0aW9uLCBhbiBpbnRlZ2VyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb190ZWxsKGJ5dGVzaW8gKnNlbGYpCitfaW9fQnl0ZXNJT190ZWxsX2ltcGwoYnl0ZXNpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iNTRiMGY5M2NkMGU1ZTFkIGlucHV0PWIxMDZhZGYwOTljYjM2NTddKi8KIHsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzZWxmLT5wb3MpOwogfQogCi1QeURvY19TVFJWQVIocmVhZF9kb2MsCi0icmVhZChbc2l6ZV0pIC0+IHJlYWQgYXQgbW9zdCBzaXplIGJ5dGVzLCByZXR1cm5lZCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKLSJcbiIKLSJJZiB0aGUgc2l6ZSBhcmd1bWVudCBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC5cbiIKLSJSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi4iKTsKK3N0YXRpYyBQeU9iamVjdCAqCityZWFkX2J5dGVzKGJ5dGVzaW8gKnNlbGYsIFB5X3NzaXplX3Qgc2l6ZSkKK3sKKyAgICBjaGFyICpvdXRwdXQ7CisKKyAgICBhc3NlcnQoc2VsZi0+YnVmICE9IE5VTEwpOworICAgIGFzc2VydChzaXplIDw9IHNlbGYtPnN0cmluZ19zaXplKTsKKyAgICBpZiAoc2l6ZSA+IDEgJiYKKyAgICAgICAgc2VsZi0+cG9zID09IDAgJiYgc2l6ZSA9PSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPmJ1ZikgJiYKKyAgICAgICAgc2VsZi0+ZXhwb3J0cyA9PSAwKSB7CisgICAgICAgIHNlbGYtPnBvcyArPSBzaXplOworICAgICAgICBQeV9JTkNSRUYoc2VsZi0+YnVmKTsKKyAgICAgICAgcmV0dXJuIHNlbGYtPmJ1ZjsKKyAgICB9CisKKyAgICBvdXRwdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5idWYpICsgc2VsZi0+cG9zOworICAgIHNlbGYtPnBvcyArPSBzaXplOworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKG91dHB1dCwgc2l6ZSk7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLnJlYWQKKyAgICBzaXplIGFzIGFyZzogb2JqZWN0ID0gTm9uZQorICAgIC8KKworUmVhZCBhdCBtb3N0IHNpemUgYnl0ZXMsIHJldHVybmVkIGFzIGEgYnl0ZXMgb2JqZWN0LgorCitJZiB0aGUgc2l6ZSBhcmd1bWVudCBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4KK1JldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19yZWFkKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX0J5dGVzSU9fcmVhZF9pbXBsKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODVkYWNiNTM1YzFlMTc4MSBpbnB1dD1jYzdiYTRhNzk3YmIxNTU1XSovCiB7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuOwotICAgIGNoYXIgKm91dHB1dDsKLSAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKIAogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cmVhZCIsICZhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChQeUxvbmdfQ2hlY2soYXJnKSkgewogICAgICAgICBzaXplID0gUHlMb25nX0FzU3NpemVfdChhcmcpOwogICAgICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQpAQCAtMjk4LDUyICs0MTYsNDggQEAKICAgICAgICAgICAgIHNpemUgPSAwOwogICAgIH0KIAotICAgIGFzc2VydChzZWxmLT5idWYgIT0gTlVMTCk7Ci0gICAgb3V0cHV0ID0gc2VsZi0+YnVmICsgc2VsZi0+cG9zOwotICAgIHNlbGYtPnBvcyArPSBzaXplOwotCi0gICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUob3V0cHV0LCBzaXplKTsKKyAgICByZXR1cm4gcmVhZF9ieXRlcyhzZWxmLCBzaXplKTsKIH0KIAogCi1QeURvY19TVFJWQVIocmVhZDFfZG9jLAotInJlYWQxKHNpemUpIC0+IHJlYWQgYXQgbW9zdCBzaXplIGJ5dGVzLCByZXR1cm5lZCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKLSJcbiIKLSJJZiB0aGUgc2l6ZSBhcmd1bWVudCBpcyBuZWdhdGl2ZSBvciBvbWl0dGVkLCByZWFkIHVudGlsIEVPRiBpcyByZWFjaGVkLlxuIgotIlJldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLkJ5dGVzSU8ucmVhZDEKKyAgICBzaXplOiBvYmplY3QKKyAgICAvCisKK1JlYWQgYXQgbW9zdCBzaXplIGJ5dGVzLCByZXR1cm5lZCBhcyBhIGJ5dGVzIG9iamVjdC4KKworSWYgdGhlIHNpemUgYXJndW1lbnQgaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4KK1JldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19yZWFkMShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqbikKK19pb19CeXRlc0lPX3JlYWQxKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICpzaXplKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE2MDIxZjVkMGFjM2Q0ZTIgaW5wdXQ9ZDRmNDBiYjhmMmY5OTQxOF0qLwogewotICAgIFB5T2JqZWN0ICphcmcsICpyZXM7Ci0KLSAgICBhcmcgPSBQeVR1cGxlX1BhY2soMSwgbik7Ci0gICAgaWYgKGFyZyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXMgID0gYnl0ZXNpb19yZWFkKHNlbGYsIGFyZyk7Ci0gICAgUHlfREVDUkVGKGFyZyk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICByZXR1cm4gX2lvX0J5dGVzSU9fcmVhZF9pbXBsKHNlbGYsIHNpemUpOwogfQogCi1QeURvY19TVFJWQVIocmVhZGxpbmVfZG9jLAotInJlYWRsaW5lKFtzaXplXSkgLT4gbmV4dCBsaW5lIGZyb20gdGhlIGZpbGUsIGFzIGEgYnl0ZXMgb2JqZWN0LlxuIgotIlxuIgotIlJldGFpbiBuZXdsaW5lLiAgQSBub24tbmVnYXRpdmUgc2l6ZSBhcmd1bWVudCBsaW1pdHMgdGhlIG1heGltdW1cbiIKLSJudW1iZXIgb2YgYnl0ZXMgdG8gcmV0dXJuIChhbiBpbmNvbXBsZXRlIGxpbmUgbWF5IGJlIHJldHVybmVkIHRoZW4pLlxuIgotIlJldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uQnl0ZXNJTy5yZWFkbGluZQorICAgIHNpemUgYXMgYXJnOiBvYmplY3QgPSBOb25lCisgICAgLworCitOZXh0IGxpbmUgZnJvbSB0aGUgZmlsZSwgYXMgYSBieXRlcyBvYmplY3QuCisKK1JldGFpbiBuZXdsaW5lLiAgQSBub24tbmVnYXRpdmUgc2l6ZSBhcmd1bWVudCBsaW1pdHMgdGhlIG1heGltdW0KK251bWJlciBvZiBieXRlcyB0byByZXR1cm4gKGFuIGluY29tcGxldGUgbGluZSBtYXkgYmUgcmV0dXJuZWQgdGhlbikuCitSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fcmVhZGxpbmUoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fQnl0ZXNJT19yZWFkbGluZV9pbXBsKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWMyMTE1NTM0YTRmOTI3NiBpbnB1dD1jYTMxZjA2ZGU2ZWFiMjU3XSovCiB7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuOwotICAgIGNoYXIgKm91dHB1dDsKLSAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKIAogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cmVhZGxpbmUiLCAmYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoUHlMb25nX0NoZWNrKGFyZykpIHsKICAgICAgICAgc2l6ZSA9IFB5TG9uZ19Bc1NzaXplX3QoYXJnKTsKICAgICAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTM1OSwzNyArNDczLDMzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG4gPSBnZXRfbGluZShzZWxmLCAmb3V0cHV0KTsKKyAgICBuID0gc2Nhbl9lb2woc2VsZiwgc2l6ZSk7CiAKLSAgICBpZiAoc2l6ZSA+PSAwICYmIHNpemUgPCBuKSB7Ci0gICAgICAgIHNpemUgPSBuIC0gc2l6ZTsKLSAgICAgICAgbiAtPSBzaXplOwotICAgICAgICBzZWxmLT5wb3MgLT0gc2l6ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShvdXRwdXQsIG4pOworICAgIHJldHVybiByZWFkX2J5dGVzKHNlbGYsIG4pOwogfQogCi1QeURvY19TVFJWQVIocmVhZGxpbmVzX2RvYywKLSJyZWFkbGluZXMoW3NpemVdKSAtPiBsaXN0IG9mIHN0cmluZ3MsIGVhY2ggYSBsaW5lIGZyb20gdGhlIGZpbGUuXG4iCi0iXG4iCi0iQ2FsbCByZWFkbGluZSgpIHJlcGVhdGVkbHkgYW5kIHJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIHNvIHJlYWQuXG4iCi0iVGhlIG9wdGlvbmFsIHNpemUgYXJndW1lbnQsIGlmIGdpdmVuLCBpcyBhbiBhcHByb3hpbWF0ZSBib3VuZCBvbiB0aGVcbiIKLSJ0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGxpbmVzIHJldHVybmVkLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uQnl0ZXNJTy5yZWFkbGluZXMKKyAgICBzaXplIGFzIGFyZzogb2JqZWN0ID0gTm9uZQorICAgIC8KKworTGlzdCBvZiBieXRlcyBvYmplY3RzLCBlYWNoIGEgbGluZSBmcm9tIHRoZSBmaWxlLgorCitDYWxsIHJlYWRsaW5lKCkgcmVwZWF0ZWRseSBhbmQgcmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgc28gcmVhZC4KK1RoZSBvcHRpb25hbCBzaXplIGFyZ3VtZW50LCBpZiBnaXZlbiwgaXMgYW4gYXBwcm94aW1hdGUgYm91bmQgb24gdGhlCit0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGxpbmVzIHJldHVybmVkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19yZWFkbGluZXMoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fQnl0ZXNJT19yZWFkbGluZXNfaW1wbChieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA5YjhlMzRjODgwODA4ZmYgaW5wdXQ9NjkxYWExMzE0ZjJjMmE4N10qLwogewogICAgIFB5X3NzaXplX3QgbWF4c2l6ZSwgc2l6ZSwgbjsKICAgICBQeU9iamVjdCAqcmVzdWx0LCAqbGluZTsKICAgICBjaGFyICpvdXRwdXQ7Ci0gICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJlYWRsaW5lcyIsICZhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChQeUxvbmdfQ2hlY2soYXJnKSkgewogICAgICAgICBtYXhzaXplID0gUHlMb25nX0FzU3NpemVfdChhcmcpOwogICAgICAgICBpZiAobWF4c2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQpAQCAtNDEwLDcgKzUyMCw5IEBACiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgd2hpbGUgKChuID0gZ2V0X2xpbmUoc2VsZiwgJm91dHB1dCkpICE9IDApIHsKKyAgICBvdXRwdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5idWYpICsgc2VsZi0+cG9zOworICAgIHdoaWxlICgobiA9IHNjYW5fZW9sKHNlbGYsIC0xKSkgIT0gMCkgeworICAgICAgICBzZWxmLT5wb3MgKz0gbjsKICAgICAgICAgbGluZSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUob3V0cHV0LCBuKTsKICAgICAgICAgaWYgKCFsaW5lKQogICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKQEAgLTQyMiw2ICs1MzQsNyBAQAogICAgICAgICBzaXplICs9IG47CiAgICAgICAgIGlmIChtYXhzaXplID4gMCAmJiBzaXplID49IG1heHNpemUpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgb3V0cHV0ICs9IG47CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTQzMCwyNSArNTQzLDI3IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihyZWFkaW50b19kb2MsCi0icmVhZGludG8oYnl0ZWFycmF5KSAtPiBpbnQuICBSZWFkIHVwIHRvIGxlbihiKSBieXRlcyBpbnRvIGIuXG4iCi0iXG4iCi0iUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoMCBmb3IgRU9GKSwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0XG4iCi0iaXMgc2V0IG5vdCB0byBibG9jayBhcyBoYXMgbm8gZGF0YSB0byByZWFkLiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLkJ5dGVzSU8ucmVhZGludG8KKyAgICBidWZmZXI6IFB5X2J1ZmZlcihhY2NlcHQ9e3J3YnVmZmVyfSkKKyAgICAvCisKK1JlYWQgYnl0ZXMgaW50byBidWZmZXIuCisKK1JldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKDAgZm9yIEVPRiksIG9yIE5vbmUgaWYgdGhlIG9iamVjdAoraXMgc2V0IG5vdCB0byBibG9jayBhbmQgaGFzIG5vIGRhdGEgdG8gcmVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fcmVhZGludG8oYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZykKK19pb19CeXRlc0lPX3JlYWRpbnRvX2ltcGwoYnl0ZXNpbyAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTVkNDA3MjE3ZGNmMDYzOSBpbnB1dD0xNDI0ZDBmZGNlODU3OTE5XSovCiB7Ci0gICAgUHlfYnVmZmVyIGJ1ZmZlcjsKICAgICBQeV9zc2l6ZV90IGxlbiwgbjsKIAogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAidyoiLCAmYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICAvKiBhZGp1c3QgaW52YWxpZCBzaXplcyAqLwotICAgIGxlbiA9IGJ1ZmZlci5sZW47CisgICAgbGVuID0gYnVmZmVyLT5sZW47CiAgICAgbiA9IHNlbGYtPnN0cmluZ19zaXplIC0gc2VsZi0+cG9zOwogICAgIGlmIChsZW4gPiBuKSB7CiAgICAgICAgIGxlbiA9IG47CkBAIC00NTYsMzMgKzU3MSwzNCBAQAogICAgICAgICAgICAgbGVuID0gMDsKICAgICB9CiAKLSAgICBtZW1jcHkoYnVmZmVyLmJ1Ziwgc2VsZi0+YnVmICsgc2VsZi0+cG9zLCBsZW4pOworICAgIG1lbWNweShidWZmZXItPmJ1ZiwgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+YnVmKSArIHNlbGYtPnBvcywgbGVuKTsKICAgICBhc3NlcnQoc2VsZi0+cG9zICsgbGVuIDwgUFlfU1NJWkVfVF9NQVgpOwogICAgIGFzc2VydChsZW4gPj0gMCk7CiAgICAgc2VsZi0+cG9zICs9IGxlbjsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOwogCiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOwogfQogCi1QeURvY19TVFJWQVIodHJ1bmNhdGVfZG9jLAotInRydW5jYXRlKFtzaXplXSkgLT4gaW50LiAgVHJ1bmNhdGUgdGhlIGZpbGUgdG8gYXQgbW9zdCBzaXplIGJ5dGVzLlxuIgotIlxuIgotIlNpemUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXMgcmV0dXJuZWQgYnkgdGVsbCgpLlxuIgotIlRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gaXMgdW5jaGFuZ2VkLiAgUmV0dXJucyB0aGUgbmV3IHNpemUuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLnRydW5jYXRlCisgICAgc2l6ZSBhcyBhcmc6IG9iamVjdCA9IE5vbmUKKyAgICAvCisKK1RydW5jYXRlIHRoZSBmaWxlIHRvIGF0IG1vc3Qgc2l6ZSBieXRlcy4KKworU2l6ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLCBhcyByZXR1cm5lZCBieSB0ZWxsKCkuCitUaGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGlzIHVuY2hhbmdlZC4gIFJldHVybnMgdGhlIG5ldyBzaXplLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb190cnVuY2F0ZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19CeXRlc0lPX3RydW5jYXRlX2ltcGwoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04MWU2YmU2MGU2N2RkZDY2IGlucHV0PTExZWQxOTY2ODM1NDYyYmFdKi8KIHsKICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAgICAgQ0hFQ0tfRVhQT1JUUyhzZWxmKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86dHJ1bmNhdGUiLCAmYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoUHlMb25nX0NoZWNrKGFyZykpIHsKICAgICAgICAgc2l6ZSA9IFB5TG9uZ19Bc1NzaXplX3QoYXJnKTsKICAgICAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTUxNiw0OSArNjMyLDQ5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNpb19pdGVybmV4dChieXRlc2lvICpzZWxmKQogewotICAgIGNoYXIgKm5leHQ7CiAgICAgUHlfc3NpemVfdCBuOwogCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogCi0gICAgbiA9IGdldF9saW5lKHNlbGYsICZuZXh0KTsKKyAgICBuID0gc2Nhbl9lb2woc2VsZiwgLTEpOwogCi0gICAgaWYgKCFuZXh0IHx8IG4gPT0gMCkKKyAgICBpZiAobiA9PSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKG5leHQsIG4pOworICAgIHJldHVybiByZWFkX2J5dGVzKHNlbGYsIG4pOwogfQogCi1QeURvY19TVFJWQVIoc2Vla19kb2MsCi0ic2Vlayhwb3NbLCB3aGVuY2VdKSAtPiBpbnQuICBDaGFuZ2Ugc3RyZWFtIHBvc2l0aW9uLlxuIgotIlxuIgotIlNlZWsgdG8gYnl0ZSBvZmZzZXQgcG9zIHJlbGF0aXZlIHRvIHBvc2l0aW9uIGluZGljYXRlZCBieSB3aGVuY2U6XG4iCi0iICAgICAwICBTdGFydCBvZiBzdHJlYW0gKHRoZSBkZWZhdWx0KS4gIHBvcyBzaG91bGQgYmUgPj0gMDtcbiIKLSIgICAgIDEgIEN1cnJlbnQgcG9zaXRpb24gLSBwb3MgbWF5IGJlIG5lZ2F0aXZlO1xuIgotIiAgICAgMiAgRW5kIG9mIHN0cmVhbSAtIHBvcyB1c3VhbGx5IG5lZ2F0aXZlLlxuIgotIlJldHVybnMgdGhlIG5ldyBhYnNvbHV0ZSBwb3NpdGlvbi4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLnNlZWsKKyAgICBwb3M6IFB5X3NzaXplX3QKKyAgICB3aGVuY2U6IGludCA9IDAKKyAgICAvCisKK0NoYW5nZSBzdHJlYW0gcG9zaXRpb24uCisKK1NlZWsgdG8gYnl0ZSBvZmZzZXQgcG9zIHJlbGF0aXZlIHRvIHBvc2l0aW9uIGluZGljYXRlZCBieSB3aGVuY2U6CisgICAgIDAgIFN0YXJ0IG9mIHN0cmVhbSAodGhlIGRlZmF1bHQpLiAgcG9zIHNob3VsZCBiZSA+PSAwOworICAgICAxICBDdXJyZW50IHBvc2l0aW9uIC0gcG9zIG1heSBiZSBuZWdhdGl2ZTsKKyAgICAgMiAgRW5kIG9mIHN0cmVhbSAtIHBvcyB1c3VhbGx5IG5lZ2F0aXZlLgorUmV0dXJucyB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19zZWVrKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX0J5dGVzSU9fc2Vla19pbXBsKGJ5dGVzaW8gKnNlbGYsIFB5X3NzaXplX3QgcG9zLCBpbnQgd2hlbmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWMyNjIwNGE2OGU5MTkwZTQgaW5wdXQ9MWU4NzVlNmViYzY1Mjk0OF0qLwogewotICAgIFB5X3NzaXplX3QgcG9zOwotICAgIGludCBtb2RlID0gMDsKLQogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibnxpOnNlZWsiLCAmcG9zLCAmbW9kZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHBvcyA8IDAgJiYgbW9kZSA9PSAwKSB7CisgICAgaWYgKHBvcyA8IDAgJiYgd2hlbmNlID09IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAibmVnYXRpdmUgc2VlayB2YWx1ZSAlemQiLCBwb3MpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvKiBtb2RlIDA6IG9mZnNldCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4KLSAgICAgICBtb2RlIDE6IG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgIG1vZGUgMjogb2Zmc2V0IHJlbGF0aXZlIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gKi8KLSAgICBpZiAobW9kZSA9PSAxKSB7CisgICAgLyogd2hlbmNlID0gMDogb2Zmc2V0IHJlbGF0aXZlIHRvIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgorICAgICAgIHdoZW5jZSA9IDE6IG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgIHdoZW5jZSA9IDI6IG9mZnNldCByZWxhdGl2ZSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuICovCisgICAgaWYgKHdoZW5jZSA9PSAxKSB7CiAgICAgICAgIGlmIChwb3MgPiBQWV9TU0laRV9UX01BWCAtIHNlbGYtPnBvcykgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBwb3NpdGlvbiB0b28gbGFyZ2UiKTsKQEAgLTU2Niw3ICs2ODIsNyBAQAogICAgICAgICB9CiAgICAgICAgIHBvcyArPSBzZWxmLT5wb3M7CiAgICAgfQotICAgIGVsc2UgaWYgKG1vZGUgPT0gMikgeworICAgIGVsc2UgaWYgKHdoZW5jZSA9PSAyKSB7CiAgICAgICAgIGlmIChwb3MgPiBQWV9TU0laRV9UX01BWCAtIHNlbGYtPnN0cmluZ19zaXplKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV3IHBvc2l0aW9uIHRvbyBsYXJnZSIpOwpAQCAtNTc0LDkgKzY5MCw5IEBACiAgICAgICAgIH0KICAgICAgICAgcG9zICs9IHNlbGYtPnN0cmluZ19zaXplOwogICAgIH0KLSAgICBlbHNlIGlmIChtb2RlICE9IDApIHsKKyAgICBlbHNlIGlmICh3aGVuY2UgIT0gMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHdoZW5jZSAoJWksIHNob3VsZCBiZSAwLCAxIG9yIDIpIiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB3aGVuY2UgKCVpLCBzaG91bGQgYmUgMCwgMSBvciAyKSIsIHdoZW5jZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNTg3LDU0ICs3MDMsNjMgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPnBvcyk7CiB9CiAKLVB5RG9jX1NUUlZBUih3cml0ZV9kb2MsCi0id3JpdGUoYnl0ZXMpIC0+IGludC4gIFdyaXRlIGJ5dGVzIHRvIGZpbGUuXG4iCi0iXG4iCi0iUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLndyaXRlCisgICAgYjogb2JqZWN0CisgICAgLworCitXcml0ZSBieXRlcyB0byBmaWxlLgorCitSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb193cml0ZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqb2JqKQorX2lvX0J5dGVzSU9fd3JpdGUoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTMzMTZkOTk4MDBhMGI5NSBpbnB1dD1mNWVjN2M4YzY0ZWQ3MjBhXSovCiB7CiAgICAgUHlfc3NpemVfdCBuID0gMDsKICAgICBQeV9idWZmZXIgYnVmOwotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogICAgIENIRUNLX0VYUE9SVFMoc2VsZik7CiAKLSAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKG9iaiwgJmJ1ZiwgUHlCVUZfQ09OVElHX1JPKSA8IDApCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihiLCAmYnVmLCBQeUJVRl9DT05USUdfUk8pIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoYnVmLmxlbiAhPSAwKQogICAgICAgICBuID0gd3JpdGVfYnl0ZXMoc2VsZiwgYnVmLmJ1ZiwgYnVmLmxlbik7Ci0gICAgaWYgKG4gPj0gMCkKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBuID49IDAgPyBQeUxvbmdfRnJvbVNzaXplX3QobikgOiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIod3JpdGVsaW5lc19kb2MsCi0id3JpdGVsaW5lcyhsaW5lcykgLT4gTm9uZS4gIFdyaXRlIGJ5dGVzIG9iamVjdHMgdG8gdGhlIGZpbGUuXG4iCi0iXG4iCi0iTm90ZSB0aGF0IG5ld2xpbmVzIGFyZSBub3QgYWRkZWQuICBUaGUgYXJndW1lbnQgY2FuIGJlIGFueSBpdGVyYWJsZVxuIgotIm9iamVjdCBwcm9kdWNpbmcgYnl0ZXMgb2JqZWN0cy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgd3JpdGUoKSBmb3JcbiIKLSJlYWNoIGJ5dGVzIG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLndyaXRlbGluZXMKKyAgICBsaW5lczogb2JqZWN0CisgICAgLworCitXcml0ZSBsaW5lcyB0byB0aGUgZmlsZS4KKworTm90ZSB0aGF0IG5ld2xpbmVzIGFyZSBub3QgYWRkZWQuICBsaW5lcyBjYW4gYmUgYW55IGl0ZXJhYmxlIG9iamVjdAorcHJvZHVjaW5nIGJ5dGVzLWxpa2Ugb2JqZWN0cy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgd3JpdGUoKSBmb3IKK2VhY2ggZWxlbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzaW9fd3JpdGVsaW5lcyhieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqdikKK19pb19CeXRlc0lPX3dyaXRlbGluZXMoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmxpbmVzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdmMzNhYTMyNzFjOTE3NTIgaW5wdXQ9ZTk3MjUzOTE3NmZjOGZjMV0qLwogewogICAgIFB5T2JqZWN0ICppdCwgKml0ZW07CiAgICAgUHlPYmplY3QgKnJldDsKIAogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKKyAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIobGluZXMpOwogICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewotICAgICAgICByZXQgPSBieXRlc2lvX3dyaXRlKHNlbGYsIGl0ZW0pOworICAgICAgICByZXQgPSBfaW9fQnl0ZXNJT193cml0ZShzZWxmLCBpdGVtKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICBpZiAocmV0ID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CkBAIC02NTEsMTcgKzc3NiwxOCBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIoY2xvc2VfZG9jLAotImNsb3NlKCkgLT4gTm9uZS4gIERpc2FibGUgYWxsIEkvTyBvcGVyYXRpb25zLiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLkJ5dGVzSU8uY2xvc2UKKworRGlzYWJsZSBhbGwgSS9PIG9wZXJhdGlvbnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX2Nsb3NlKGJ5dGVzaW8gKnNlbGYpCitfaW9fQnl0ZXNJT19jbG9zZV9pbXBsKGJ5dGVzaW8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTQ3MWJiOTQxMWFmODRhMCBpbnB1dD0zN2UxZjU1NTU2ZTYxZjYwXSovCiB7CiAgICAgQ0hFQ0tfRVhQT1JUUyhzZWxmKTsKLSAgICBpZiAoc2VsZi0+YnVmICE9IE5VTEwpIHsKLSAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWYpOwotICAgICAgICBzZWxmLT5idWYgPSBOVUxMOwotICAgIH0KKyAgICBQeV9DTEVBUihzZWxmLT5idWYpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC02ODMsNyArODA5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc2lvX2dldHN0YXRlKGJ5dGVzaW8gKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKmluaXR2YWx1ZSA9IGJ5dGVzaW9fZ2V0dmFsdWUoc2VsZik7CisgICAgUHlPYmplY3QgKmluaXR2YWx1ZSA9IF9pb19CeXRlc0lPX2dldHZhbHVlX2ltcGwoc2VsZik7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKnN0YXRlOwogCkBAIC03MzMsNyArODU5LDcgQEAKIAogICAgIC8qIFNldCB0aGUgdmFsdWUgb2YgdGhlIGludGVybmFsIGJ1ZmZlci4gSWYgc3RhdGVbMF0gZG9lcyBub3Qgc3VwcG9ydCB0aGUKICAgICAgICBidWZmZXIgcHJvdG9jb2wsIGJ5dGVzaW9fd3JpdGUgd2lsbCByYWlzZSB0aGUgYXBwcm9wcmlhdGUgVHlwZUVycm9yLiAqLwotICAgIHJlc3VsdCA9IGJ5dGVzaW9fd3JpdGUoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShzdGF0ZSwgMCkpOworICAgIHJlc3VsdCA9IF9pb19CeXRlc0lPX3dyaXRlKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDApKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtNzkxLDEwICs5MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImRlYWxsb2NhdGVkIEJ5dGVzSU8gb2JqZWN0IGhhcyBleHBvcnRlZCBidWZmZXJzIik7CiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgfQotICAgIGlmIChzZWxmLT5idWYgIT0gTlVMTCkgewotICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1Zik7Ci0gICAgICAgIHNlbGYtPmJ1ZiA9IE5VTEw7Ci0gICAgfQorICAgIFB5X0NMRUFSKHNlbGYtPmJ1Zik7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwpAQCAtODE0LDcgKzkzNyw3IEBACiAgICAgLyogdHBfYWxsb2MgaW5pdGlhbGl6ZXMgYWxsIHRoZSBmaWVsZHMgdG8gemVyby4gU28gd2UgZG9uJ3QgaGF2ZSB0bwogICAgICAgIGluaXRpYWxpemUgdGhlbSBoZXJlLiAqLwogCi0gICAgc2VsZi0+YnVmID0gKGNoYXIgKilQeU1lbV9NYWxsb2MoMCk7CisgICAgc2VsZi0+YnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKICAgICBpZiAoc2VsZi0+YnVmID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTgyMywyNyArOTQ2LDQwIEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5CeXRlc0lPLl9faW5pdF9fCisgICAgaW5pdGlhbF9ieXRlcyBhcyBpbml0dmFsdWU6IG9iamVjdChjX2RlZmF1bHQ9Ik5VTEwiKSA9IGInJworCitCdWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24gdXNpbmcgYW4gaW4tbWVtb3J5IGJ5dGVzIGJ1ZmZlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIGludAotYnl0ZXNpb19pbml0KGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19pb19CeXRlc0lPX19faW5pdF9fX2ltcGwoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmluaXR2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NWMwYzUxZTI0YzViNjIxIGlucHV0PWFhYzdmMzFiNjdiZjBmYjZdKi8KIHsKLSAgICBjaGFyICprd2xpc3RbXSA9IHsiaW5pdGlhbF9ieXRlcyIsIE5VTEx9OwotICAgIFB5T2JqZWN0ICppbml0dmFsdWUgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxPOkJ5dGVzSU8iLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluaXR2YWx1ZSkpCi0gICAgICAgIHJldHVybiAtMTsKLQogICAgIC8qIEluIGNhc2UsIF9faW5pdF9fIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gKi8KICAgICBzZWxmLT5zdHJpbmdfc2l6ZSA9IDA7CiAgICAgc2VsZi0+cG9zID0gMDsKIAorICAgIGlmIChzZWxmLT5leHBvcnRzID4gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQnVmZmVyRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXhpc3RpbmcgZXhwb3J0cyBvZiBkYXRhOiBvYmplY3QgY2Fubm90IGJlIHJlLXNpemVkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgaWYgKGluaXR2YWx1ZSAmJiBpbml0dmFsdWUgIT0gUHlfTm9uZSkgewotICAgICAgICBQeU9iamVjdCAqcmVzOwotICAgICAgICByZXMgPSBieXRlc2lvX3dyaXRlKHNlbGYsIGluaXR2YWx1ZSk7Ci0gICAgICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgICAgIHNlbGYtPnBvcyA9IDA7CisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QoaW5pdHZhbHVlKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGluaXR2YWx1ZSk7CisgICAgICAgICAgICBQeV9YU0VUUkVGKHNlbGYtPmJ1ZiwgaW5pdHZhbHVlKTsKKyAgICAgICAgICAgIHNlbGYtPnN0cmluZ19zaXplID0gUHlCeXRlc19HRVRfU0laRShpbml0dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgICAgIHJlcyA9IF9pb19CeXRlc0lPX3dyaXRlKHNlbGYsIGluaXR2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICBzZWxmLT5wb3MgPSAwOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC04NTQsOSArOTkwLDkgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlczsKIAotICAgIHJlcyA9IHNpemVvZihieXRlc2lvKTsKLSAgICBpZiAoc2VsZi0+YnVmKQotICAgICAgICByZXMgKz0gc2VsZi0+YnVmX3NpemU7CisgICAgcmVzID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRShzZWxmKSk7CisgICAgaWYgKHNlbGYtPmJ1ZiAmJiAhU0hBUkVEX0JVRihzZWxmKSkKKyAgICAgICAgcmVzICs9IF9QeVN5c19HZXRTaXplT2Yoc2VsZi0+YnVmKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7CiB9CiAKQEAgLTg3NSw2ICsxMDExLDggQEAKIH0KIAogCisjaW5jbHVkZSAiY2xpbmljL2J5dGVzaW8uYy5oIgorCiBzdGF0aWMgUHlHZXRTZXREZWYgYnl0ZXNpb19nZXRzZXRsaXN0W10gPSB7CiAgICAgeyJjbG9zZWQiLCAgKGdldHRlcilieXRlc2lvX2dldF9jbG9zZWQsIE5VTEwsCiAgICAgICJUcnVlIGlmIHRoZSBmaWxlIGlzIGNsb3NlZC4ifSwKQEAgLTg4MiwzNiArMTAyMCwzMCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBieXRlc2lvX21ldGhvZHNbXSA9IHsKLSAgICB7InJlYWRhYmxlIiwgICAoUHlDRnVuY3Rpb24pcmV0dXJuX25vdF9jbG9zZWQsICBNRVRIX05PQVJHUywgcmVhZGFibGVfZG9jfSwKLSAgICB7InNlZWthYmxlIiwgICAoUHlDRnVuY3Rpb24pcmV0dXJuX25vdF9jbG9zZWQsICBNRVRIX05PQVJHUywgc2Vla2FibGVfZG9jfSwKLSAgICB7IndyaXRhYmxlIiwgICAoUHlDRnVuY3Rpb24pcmV0dXJuX25vdF9jbG9zZWQsICBNRVRIX05PQVJHUywgd3JpdGFibGVfZG9jfSwKLSAgICB7ImNsb3NlIiwgICAgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19jbG9zZSwgICAgICBNRVRIX05PQVJHUywgY2xvc2VfZG9jfSwKLSAgICB7ImZsdXNoIiwgICAgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19mbHVzaCwgICAgICBNRVRIX05PQVJHUywgZmx1c2hfZG9jfSwKLSAgICB7ImlzYXR0eSIsICAgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19pc2F0dHksICAgICBNRVRIX05PQVJHUywgaXNhdHR5X2RvY30sCi0gICAgeyJ0ZWxsIiwgICAgICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fdGVsbCwgICAgICAgTUVUSF9OT0FSR1MsIHRlbGxfZG9jfSwKLSAgICB7IndyaXRlIiwgICAgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb193cml0ZSwgICAgICBNRVRIX08sIHdyaXRlX2RvY30sCi0gICAgeyJ3cml0ZWxpbmVzIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fd3JpdGVsaW5lcywgTUVUSF9PLCB3cml0ZWxpbmVzX2RvY30sCi0gICAgeyJyZWFkMSIsICAgICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fcmVhZDEsICAgICAgTUVUSF9PLCByZWFkMV9kb2N9LAotICAgIHsicmVhZGludG8iLCAgIChQeUNGdW5jdGlvbilieXRlc2lvX3JlYWRpbnRvLCAgIE1FVEhfTywgcmVhZGludG9fZG9jfSwKLSAgICB7InJlYWRsaW5lIiwgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19yZWFkbGluZSwgICBNRVRIX1ZBUkFSR1MsIHJlYWRsaW5lX2RvY30sCi0gICAgeyJyZWFkbGluZXMiLCAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fcmVhZGxpbmVzLCAgTUVUSF9WQVJBUkdTLCByZWFkbGluZXNfZG9jfSwKLSAgICB7InJlYWQiLCAgICAgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19yZWFkLCAgICAgICBNRVRIX1ZBUkFSR1MsIHJlYWRfZG9jfSwKLSAgICB7ImdldGJ1ZmZlciIsICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19nZXRidWZmZXIsICBNRVRIX05PQVJHUywgIGdldGJ1ZmZlcl9kb2N9LAotICAgIHsiZ2V0dmFsdWUiLCAgIChQeUNGdW5jdGlvbilieXRlc2lvX2dldHZhbHVlLCAgIE1FVEhfTk9BUkdTLCAgZ2V0dmFsX2RvY30sCi0gICAgeyJzZWVrIiwgICAgICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fc2VlaywgICAgICAgTUVUSF9WQVJBUkdTLCBzZWVrX2RvY30sCi0gICAgeyJ0cnVuY2F0ZSIsICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fdHJ1bmNhdGUsICAgTUVUSF9WQVJBUkdTLCB0cnVuY2F0ZV9kb2N9LAorICAgIF9JT19CWVRFU0lPX1JFQURBQkxFX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX1NFRUtBQkxFX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX1dSSVRBQkxFX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX0NMT1NFX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX0ZMVVNIX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX0lTQVRUWV9NRVRIT0RERUYKKyAgICBfSU9fQllURVNJT19URUxMX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX1dSSVRFX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX1dSSVRFTElORVNfTUVUSE9EREVGCisgICAgX0lPX0JZVEVTSU9fUkVBRDFfTUVUSE9EREVGCisgICAgX0lPX0JZVEVTSU9fUkVBRElOVE9fTUVUSE9EREVGCisgICAgX0lPX0JZVEVTSU9fUkVBRExJTkVfTUVUSE9EREVGCisgICAgX0lPX0JZVEVTSU9fUkVBRExJTkVTX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX1JFQURfTUVUSE9EREVGCisgICAgX0lPX0JZVEVTSU9fR0VUQlVGRkVSX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX0dFVFZBTFVFX01FVEhPRERFRgorICAgIF9JT19CWVRFU0lPX1NFRUtfTUVUSE9EREVGCisgICAgX0lPX0JZVEVTSU9fVFJVTkNBVEVfTUVUSE9EREVGCiAgICAgeyJfX2dldHN0YXRlX18iLCAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fZ2V0c3RhdGUsICBNRVRIX05PQVJHUywgTlVMTH0sCiAgICAgeyJfX3NldHN0YXRlX18iLCAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fc2V0c3RhdGUsICBNRVRIX08sIE5VTEx9LAogICAgIHsiX19zaXplb2ZfXyIsIChQeUNGdW5jdGlvbilieXRlc2lvX3NpemVvZiwgICAgIE1FVEhfTk9BUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCi1QeURvY19TVFJWQVIoYnl0ZXNpb19kb2MsCi0iQnl0ZXNJTyhbYnVmZmVyXSkgLT4gb2JqZWN0XG4iCi0iXG4iCi0iQ3JlYXRlIGEgYnVmZmVyZWQgSS9PIGltcGxlbWVudGF0aW9uIHVzaW5nIGFuIGluLW1lbW9yeSBieXRlc1xuIgotImJ1ZmZlciwgcmVhZHkgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIik7Ci0KIFB5VHlwZU9iamVjdCBQeUJ5dGVzSU9fVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2lvLkJ5dGVzSU8iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KQEAgLTkzNCw3ICsxMDY2LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfAogICAgIFB5X1RQRkxBR1NfSEFWRV9HQywgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZsYWdzKi8KLSAgICBieXRlc2lvX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIF9pb19CeXRlc0lPX19faW5pdF9fX19kb2NfXywgICAgICAgICAgICAgICAvKnRwX2RvYyovCiAgICAgKHRyYXZlcnNlcHJvYylieXRlc2lvX3RyYXZlcnNlLCAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwogICAgIChpbnF1aXJ5KWJ5dGVzaW9fY2xlYXIsICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCkBAIC05NDksNyArMTA4MSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9zZXQqLwogICAgIG9mZnNldG9mKGJ5dGVzaW8sIGRpY3QpLCAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIChpbml0cHJvYylieXRlc2lvX2luaXQsICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLworICAgIF9pb19CeXRlc0lPX19faW5pdF9fLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FsbG9jKi8KICAgICBieXRlc2lvX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwogfTsKQEAgLTk2NCwxOCArMTA5NiwyNCBAQAogc3RhdGljIGludAogYnl0ZXNpb2J1Zl9nZXRidWZmZXIoYnl0ZXNpb2J1ZiAqb2JqLCBQeV9idWZmZXIgKnZpZXcsIGludCBmbGFncykKIHsKLSAgICBpbnQgcmV0OwogICAgIGJ5dGVzaW8gKmIgPSAoYnl0ZXNpbyAqKSBvYmotPnNvdXJjZTsKKwogICAgIGlmICh2aWV3ID09IE5VTEwpIHsKLSAgICAgICAgYi0+ZXhwb3J0cysrOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0J1ZmZlckVycm9yLAorICAgICAgICAgICAgImJ5dGVzaW9idWZfZ2V0YnVmZmVyOiB2aWV3PT1OVUxMIGFyZ3VtZW50IGlzIG9ic29sZXRlIik7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgcmV0ID0gUHlCdWZmZXJfRmlsbEluZm8odmlldywgKFB5T2JqZWN0KilvYmosIGItPmJ1ZiwgYi0+c3RyaW5nX3NpemUsCisgICAgaWYgKFNIQVJFRF9CVUYoYikpIHsKKyAgICAgICAgaWYgKHVuc2hhcmVfYnVmZmVyKGIsIGItPnN0cmluZ19zaXplKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogY2Fubm90IGZhaWwgaWYgdmlldyAhPSBOVUxMIGFuZCByZWFkb25seSA9PSAwICovCisgICAgKHZvaWQpUHlCdWZmZXJfRmlsbEluZm8odmlldywgKFB5T2JqZWN0KilvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYi0+YnVmKSwgYi0+c3RyaW5nX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZmxhZ3MpOwotICAgIGlmIChyZXQgPj0gMCkgewotICAgICAgICBiLT5leHBvcnRzKys7Ci0gICAgfQotICAgIHJldHVybiByZXQ7CisgICAgYi0+ZXhwb3J0cysrOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vY2xpbmljL19pb21vZHVsZS5jLmggYi9Nb2R1bGVzL19pby9jbGluaWMvX2lvbW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzg4ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9faW8vY2xpbmljL19pb21vZHVsZS5jLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW9fb3Blbl9fZG9jX18sCisib3BlbigkbW9kdWxlLCAvLCBmaWxlLCBtb2RlPVwnclwnLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsXG4iCisiICAgICBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUsIG9wZW5lcj1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiT3BlbiBmaWxlIGFuZCByZXR1cm4gYSBzdHJlYW0uICBSYWlzZSBJT0Vycm9yIHVwb24gZmFpbHVyZS5cbiIKKyJcbiIKKyJmaWxlIGlzIGVpdGhlciBhIHRleHQgb3IgYnl0ZSBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIChhbmQgdGhlIHBhdGhcbiIKKyJpZiB0aGUgZmlsZSBpc25cJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvXG4iCisiYmUgb3BlbmVkIG9yIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBmaWxlIHRvIGJlXG4iCisid3JhcHBlZC4gKElmIGEgZmlsZSBkZXNjcmlwdG9yIGlzIGdpdmVuLCBpdCBpcyBjbG9zZWQgd2hlbiB0aGVcbiIKKyJyZXR1cm5lZCBJL08gb2JqZWN0IGlzIGNsb3NlZCwgdW5sZXNzIGNsb3NlZmQgaXMgc2V0IHRvIEZhbHNlLilcbiIKKyJcbiIKKyJtb2RlIGlzIGFuIG9wdGlvbmFsIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbW9kZSBpbiB3aGljaCB0aGUgZmlsZVxuIgorImlzIG9wZW5lZC4gSXQgZGVmYXVsdHMgdG8gXCdyXCcgd2hpY2ggbWVhbnMgb3BlbiBmb3IgcmVhZGluZyBpbiB0ZXh0XG4iCisibW9kZS4gIE90aGVyIGNvbW1vbiB2YWx1ZXMgYXJlIFwnd1wnIGZvciB3cml0aW5nICh0cnVuY2F0aW5nIHRoZSBmaWxlIGlmXG4iCisiaXQgYWxyZWFkeSBleGlzdHMpLCBcJ3hcJyBmb3IgY3JlYXRpbmcgYW5kIHdyaXRpbmcgdG8gYSBuZXcgZmlsZSwgYW5kXG4iCisiXCdhXCcgZm9yIGFwcGVuZGluZyAod2hpY2ggb24gc29tZSBVbml4IHN5c3RlbXMsIG1lYW5zIHRoYXQgYWxsIHdyaXRlc1xuIgorImFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgc2VlayBwb3NpdGlvbikuXG4iCisiSW4gdGV4dCBtb2RlLCBpZiBlbmNvZGluZyBpcyBub3Qgc3BlY2lmaWVkIHRoZSBlbmNvZGluZyB1c2VkIGlzIHBsYXRmb3JtXG4iCisiZGVwZW5kZW50OiBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpIGlzIGNhbGxlZCB0byBnZXQgdGhlXG4iCisiY3VycmVudCBsb2NhbGUgZW5jb2RpbmcuIChGb3IgcmVhZGluZyBhbmQgd3JpdGluZyByYXcgYnl0ZXMgdXNlIGJpbmFyeVxuIgorIm1vZGUgYW5kIGxlYXZlIGVuY29kaW5nIHVuc3BlY2lmaWVkLikgVGhlIGF2YWlsYWJsZSBtb2RlcyBhcmU6XG4iCisiXG4iCisiPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgorIkNoYXJhY3RlciBNZWFuaW5nXG4iCisiLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIlwnclwnICAgICAgIG9wZW4gZm9yIHJlYWRpbmcgKGRlZmF1bHQpXG4iCisiXCd3XCcgICAgICAgb3BlbiBmb3Igd3JpdGluZywgdHJ1bmNhdGluZyB0aGUgZmlsZSBmaXJzdFxuIgorIlwneFwnICAgICAgIGNyZWF0ZSBhIG5ldyBmaWxlIGFuZCBvcGVuIGl0IGZvciB3cml0aW5nXG4iCisiXCdhXCcgICAgICAgb3BlbiBmb3Igd3JpdGluZywgYXBwZW5kaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgaWYgaXQgZXhpc3RzXG4iCisiXCdiXCcgICAgICAgYmluYXJ5IG1vZGVcbiIKKyJcJ3RcJyAgICAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpXG4iCisiXCcrXCcgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpXG4iCisiXCdVXCcgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZGVwcmVjYXRlZClcbiIKKyI9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCisiXG4iCisiVGhlIGRlZmF1bHQgbW9kZSBpcyBcJ3J0XCcgKG9wZW4gZm9yIHJlYWRpbmcgdGV4dCkuIEZvciBiaW5hcnkgcmFuZG9tXG4iCisiYWNjZXNzLCB0aGUgbW9kZSBcJ3crYlwnIG9wZW5zIGFuZCB0cnVuY2F0ZXMgdGhlIGZpbGUgdG8gMCBieXRlcywgd2hpbGVcbiIKKyJcJ3IrYlwnIG9wZW5zIHRoZSBmaWxlIHdpdGhvdXQgdHJ1bmNhdGlvbi4gVGhlIFwneFwnIG1vZGUgaW1wbGllcyBcJ3dcJyBhbmRcbiIKKyJyYWlzZXMgYW4gYEZpbGVFeGlzdHNFcnJvcmAgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuXG4iCisiXG4iCisiUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBmaWxlcyBvcGVuZWQgaW4gYmluYXJ5IGFuZCB0ZXh0IG1vZGVzLFxuIgorImV2ZW4gd2hlbiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGRvZXNuXCd0LiBGaWxlcyBvcGVuZWQgaW5cbiIKKyJiaW5hcnkgbW9kZSAoYXBwZW5kaW5nIFwnYlwnIHRvIHRoZSBtb2RlIGFyZ3VtZW50KSByZXR1cm4gY29udGVudHMgYXNcbiIKKyJieXRlcyBvYmplY3RzIHdpdGhvdXQgYW55IGRlY29kaW5nLiBJbiB0ZXh0IG1vZGUgKHRoZSBkZWZhdWx0LCBvciB3aGVuXG4iCisiXCd0XCcgaXMgYXBwZW5kZWQgdG8gdGhlIG1vZGUgYXJndW1lbnQpLCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXJlXG4iCisicmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYVxuIgorInBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLlxuIgorIlxuIgorIlwnVVwnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zXG4iCisib2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2xcbiIKKyJ1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS5cbiIKKyJcbiIKKyJidWZmZXJpbmcgaXMgYW4gb3B0aW9uYWwgaW50ZWdlciB1c2VkIHRvIHNldCB0aGUgYnVmZmVyaW5nIHBvbGljeS5cbiIKKyJQYXNzIDAgdG8gc3dpdGNoIGJ1ZmZlcmluZyBvZmYgKG9ubHkgYWxsb3dlZCBpbiBiaW5hcnkgbW9kZSksIDEgdG8gc2VsZWN0XG4iCisibGluZSBidWZmZXJpbmcgKG9ubHkgdXNhYmxlIGluIHRleHQgbW9kZSksIGFuZCBhbiBpbnRlZ2VyID4gMSB0byBpbmRpY2F0ZVxuIgorInRoZSBzaXplIG9mIGEgZml4ZWQtc2l6ZSBjaHVuayBidWZmZXIuICBXaGVuIG5vIGJ1ZmZlcmluZyBhcmd1bWVudCBpc1xuIgorImdpdmVuLCB0aGUgZGVmYXVsdCBidWZmZXJpbmcgcG9saWN5IHdvcmtzIGFzIGZvbGxvd3M6XG4iCisiXG4iCisiKiBCaW5hcnkgZmlsZXMgYXJlIGJ1ZmZlcmVkIGluIGZpeGVkLXNpemUgY2h1bmtzOyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyXG4iCisiICBpcyBjaG9zZW4gdXNpbmcgYSBoZXVyaXN0aWMgdHJ5aW5nIHRvIGRldGVybWluZSB0aGUgdW5kZXJseWluZyBkZXZpY2VcJ3NcbiIKKyIgIFwiYmxvY2sgc2l6ZVwiIGFuZCBmYWxsaW5nIGJhY2sgb24gYGlvLkRFRkFVTFRfQlVGRkVSX1NJWkVgLlxuIgorIiAgT24gbWFueSBzeXN0ZW1zLCB0aGUgYnVmZmVyIHdpbGwgdHlwaWNhbGx5IGJlIDQwOTYgb3IgODE5MiBieXRlcyBsb25nLlxuIgorIlxuIgorIiogXCJJbnRlcmFjdGl2ZVwiIHRleHQgZmlsZXMgKGZpbGVzIGZvciB3aGljaCBpc2F0dHkoKSByZXR1cm5zIFRydWUpXG4iCisiICB1c2UgbGluZSBidWZmZXJpbmcuICBPdGhlciB0ZXh0IGZpbGVzIHVzZSB0aGUgcG9saWN5IGRlc2NyaWJlZCBhYm92ZVxuIgorIiAgZm9yIGJpbmFyeSBmaWxlcy5cbiIKKyJcbiIKKyJlbmNvZGluZyBpcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdXNlZCB0byBkZWNvZGUgb3IgZW5jb2RlIHRoZVxuIgorImZpbGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzXG4iCisicGxhdGZvcm0gZGVwZW5kZW50LCBidXQgYW55IGVuY29kaW5nIHN1cHBvcnRlZCBieSBQeXRob24gY2FuIGJlXG4iCisicGFzc2VkLiAgU2VlIHRoZSBjb2RlY3MgbW9kdWxlIGZvciB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZW5jb2RpbmdzLlxuIgorIlxuIgorImVycm9ycyBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgaG93IGVuY29kaW5nIGVycm9ycyBhcmUgdG9cbiIKKyJiZSBoYW5kbGVkLS0tdGhpcyBhcmd1bWVudCBzaG91bGQgbm90IGJlIHVzZWQgaW4gYmluYXJ5IG1vZGUuIFBhc3NcbiIKKyJcJ3N0cmljdFwnIHRvIHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZW5jb2RpbmcgZXJyb3JcbiIKKyIodGhlIGRlZmF1bHQgb2YgTm9uZSBoYXMgdGhlIHNhbWUgZWZmZWN0KSwgb3IgcGFzcyBcJ2lnbm9yZVwnIHRvIGlnbm9yZVxuIgorImVycm9ycy4gKE5vdGUgdGhhdCBpZ25vcmluZyBlbmNvZGluZyBlcnJvcnMgY2FuIGxlYWQgdG8gZGF0YSBsb3NzLilcbiIKKyJTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGNvZGVjcy5yZWdpc3RlciBvciBydW4gXCdoZWxwKGNvZGVjcy5Db2RlYylcJ1xuIgorImZvciBhIGxpc3Qgb2YgdGhlIHBlcm1pdHRlZCBlbmNvZGluZyBlcnJvciBzdHJpbmdzLlxuIgorIlxuIgorIm5ld2xpbmUgY29udHJvbHMgaG93IHVuaXZlcnNhbCBuZXdsaW5lcyB3b3JrcyAoaXQgb25seSBhcHBsaWVzIHRvIHRleHRcbiIKKyJtb2RlKS4gSXQgY2FuIGJlIE5vbmUsIFwnXCcsIFwnXFxuXCcsIFwnXFxyXCcsIGFuZCBcJ1xcclxcblwnLiAgSXQgd29ya3MgYXNcbiIKKyJmb2xsb3dzOlxuIgorIlxuIgorIiogT24gaW5wdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXNcbiIKKyIgIGVuYWJsZWQuIExpbmVzIGluIHRoZSBpbnB1dCBjYW4gZW5kIGluIFwnXFxuXCcsIFwnXFxyXCcsIG9yIFwnXFxyXFxuXCcsIGFuZFxuIgorIiAgdGhlc2UgYXJlIHRyYW5zbGF0ZWQgaW50byBcJ1xcblwnIGJlZm9yZSBiZWluZyByZXR1cm5lZCB0byB0aGVcbiIKKyIgIGNhbGxlci4gSWYgaXQgaXMgXCdcJywgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSBpcyBlbmFibGVkLCBidXQgbGluZVxuIgorIiAgZW5kaW5ncyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuIElmIGl0IGhhcyBhbnkgb2ZcbiIKKyIgIHRoZSBvdGhlciBsZWdhbCB2YWx1ZXMsIGlucHV0IGxpbmVzIGFyZSBvbmx5IHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuXG4iCisiICBzdHJpbmcsIGFuZCB0aGUgbGluZSBlbmRpbmcgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuXG4iCisiXG4iCisiKiBPbiBvdXRwdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgYW55IFwnXFxuXCcgY2hhcmFjdGVycyB3cml0dGVuIGFyZVxuIgorIiAgdHJhbnNsYXRlZCB0byB0aGUgc3lzdGVtIGRlZmF1bHQgbGluZSBzZXBhcmF0b3IsIG9zLmxpbmVzZXAuIElmXG4iCisiICBuZXdsaW5lIGlzIFwnXCcgb3IgXCdcXG5cJywgbm8gdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UuIElmIG5ld2xpbmUgaXMgYW55XG4iCisiICBvZiB0aGUgb3RoZXIgbGVnYWwgdmFsdWVzLCBhbnkgXCdcXG5cJyBjaGFyYWN0ZXJzIHdyaXR0ZW4gYXJlIHRyYW5zbGF0ZWRcbiIKKyIgIHRvIHRoZSBnaXZlbiBzdHJpbmcuXG4iCisiXG4iCisiSWYgY2xvc2VmZCBpcyBGYWxzZSwgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUga2VwdCBvcGVuXG4iCisid2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzIGdpdmVuXG4iCisiYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuXG4iCisiXG4iCisiQSBjdXN0b20gb3BlbmVyIGNhbiBiZSB1c2VkIGJ5IHBhc3NpbmcgYSBjYWxsYWJsZSBhcyAqb3BlbmVyKi4gVGhlXG4iCisidW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBmaWxlIG9iamVjdCBpcyB0aGVuIG9idGFpbmVkIGJ5XG4iCisiY2FsbGluZyAqb3BlbmVyKiB3aXRoICgqZmlsZSosICpmbGFncyopLiAqb3BlbmVyKiBtdXN0IHJldHVybiBhbiBvcGVuXG4iCisiZmlsZSBkZXNjcmlwdG9yIChwYXNzaW5nIG9zLm9wZW4gYXMgKm9wZW5lciogcmVzdWx0cyBpbiBmdW5jdGlvbmFsaXR5XG4iCisic2ltaWxhciB0byBwYXNzaW5nIE5vbmUpLlxuIgorIlxuIgorIm9wZW4oKSByZXR1cm5zIGEgZmlsZSBvYmplY3Qgd2hvc2UgdHlwZSBkZXBlbmRzIG9uIHRoZSBtb2RlLCBhbmRcbiIKKyJ0aHJvdWdoIHdoaWNoIHRoZSBzdGFuZGFyZCBmaWxlIG9wZXJhdGlvbnMgc3VjaCBhcyByZWFkaW5nIGFuZCB3cml0aW5nXG4iCisiYXJlIHBlcmZvcm1lZC4gV2hlbiBvcGVuKCkgaXMgdXNlZCB0byBvcGVuIGEgZmlsZSBpbiBhIHRleHQgbW9kZSAoXCd3XCcsXG4iCisiXCdyXCcsIFwnd3RcJywgXCdydFwnLCBldGMuKSwgaXQgcmV0dXJucyBhIFRleHRJT1dyYXBwZXIuIFdoZW4gdXNlZCB0byBvcGVuXG4iCisiYSBmaWxlIGluIGEgYmluYXJ5IG1vZGUsIHRoZSByZXR1cm5lZCBjbGFzcyB2YXJpZXM6IGluIHJlYWQgYmluYXJ5XG4iCisibW9kZSwgaXQgcmV0dXJucyBhIEJ1ZmZlcmVkUmVhZGVyOyBpbiB3cml0ZSBiaW5hcnkgYW5kIGFwcGVuZCBiaW5hcnlcbiIKKyJtb2RlcywgaXQgcmV0dXJucyBhIEJ1ZmZlcmVkV3JpdGVyLCBhbmQgaW4gcmVhZC93cml0ZSBtb2RlLCBpdCByZXR1cm5zXG4iCisiYSBCdWZmZXJlZFJhbmRvbS5cbiIKKyJcbiIKKyJJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIHN0cmluZyBvciBieXRlYXJyYXkgYXMgYSBmaWxlIGZvciBib3RoXG4iCisicmVhZGluZyBhbmQgd3JpdGluZy4gRm9yIHN0cmluZ3MgU3RyaW5nSU8gY2FuIGJlIHVzZWQgbGlrZSBhIGZpbGVcbiIKKyJvcGVuZWQgaW4gYSB0ZXh0IG1vZGUsIGFuZCBmb3IgYnl0ZXMgYSBCeXRlc0lPIGNhbiBiZSB1c2VkIGxpa2UgYSBmaWxlXG4iCisib3BlbmVkIGluIGEgYmluYXJ5IG1vZGUuIik7CisKKyNkZWZpbmUgX0lPX09QRU5fTUVUSE9EREVGICAgIFwKKyAgICB7Im9wZW4iLCAoUHlDRnVuY3Rpb24pX2lvX29wZW4sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfaW9fb3Blbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX29wZW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqZmlsZSwgY29uc3QgY2hhciAqbW9kZSwKKyAgICAgICAgICAgICAgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQsIFB5T2JqZWN0ICpvcGVuZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX29wZW4oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmaWxlIiwgIm1vZGUiLCAiYnVmZmVyaW5nIiwgImVuY29kaW5nIiwgImVycm9ycyIsICJuZXdsaW5lIiwgImNsb3NlZmQiLCAib3BlbmVyIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmZpbGU7CisgICAgY29uc3QgY2hhciAqbW9kZSA9ICJyIjsKKyAgICBpbnQgYnVmZmVyaW5nID0gLTE7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqbmV3bGluZSA9IE5VTEw7CisgICAgaW50IGNsb3NlZmQgPSAxOworICAgIFB5T2JqZWN0ICpvcGVuZXIgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xzaXp6emlPOm9wZW4iLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmbW9kZSwgJmJ1ZmZlcmluZywgJmVuY29kaW5nLCAmZXJyb3JzLCAmbmV3bGluZSwgJmNsb3NlZmQsICZvcGVuZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX29wZW5faW1wbChtb2R1bGUsIGZpbGUsIG1vZGUsIGJ1ZmZlcmluZywgZW5jb2RpbmcsIGVycm9ycywgbmV3bGluZSwgY2xvc2VmZCwgb3BlbmVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJjMmMwMDNjYjdkYWVhZmUgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vY2xpbmljL2J1ZmZlcmVkaW8uYy5oIGIvTW9kdWxlcy9faW8vY2xpbmljL2J1ZmZlcmVkaW8uYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzN2UyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19pby9jbGluaWMvYnVmZmVyZWRpby5jLmgKQEAgLTAsMCArMSw0NTQgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW9fX0J1ZmZlcmVkSU9CYXNlX3JlYWRpbnRvX19kb2NfXywKKyJyZWFkaW50bygkc2VsZiwgYnVmZmVyLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fX0JVRkZFUkVESU9CQVNFX1JFQURJTlRPX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkaW50byIsIChQeUNGdW5jdGlvbilfaW9fX0J1ZmZlcmVkSU9CYXNlX3JlYWRpbnRvLCBNRVRIX08sIF9pb19fQnVmZmVyZWRJT0Jhc2VfcmVhZGludG9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fQnVmZmVyZWRJT0Jhc2VfcmVhZGludG9faW1wbChQeU9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZElPQmFzZV9yZWFkaW50byhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYnVmZmVyID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ3KjpyZWFkaW50byIsICZidWZmZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX19CdWZmZXJlZElPQmFzZV9yZWFkaW50b19pbXBsKHNlbGYsICZidWZmZXIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGJ1ZmZlciAqLworICAgIGlmIChidWZmZXIub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX19CdWZmZXJlZElPQmFzZV9yZWFkaW50bzFfX2RvY19fLAorInJlYWRpbnRvMSgkc2VsZiwgYnVmZmVyLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fX0JVRkZFUkVESU9CQVNFX1JFQURJTlRPMV9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZGludG8xIiwgKFB5Q0Z1bmN0aW9uKV9pb19fQnVmZmVyZWRJT0Jhc2VfcmVhZGludG8xLCBNRVRIX08sIF9pb19fQnVmZmVyZWRJT0Jhc2VfcmVhZGludG8xX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkSU9CYXNlX3JlYWRpbnRvMV9pbXBsKFB5T2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmJ1ZmZlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkSU9CYXNlX3JlYWRpbnRvMShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYnVmZmVyID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ3KjpyZWFkaW50bzEiLCAmYnVmZmVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19fQnVmZmVyZWRJT0Jhc2VfcmVhZGludG8xX2ltcGwoc2VsZiwgJmJ1ZmZlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgYnVmZmVyICovCisgICAgaWYgKGJ1ZmZlci5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fX0J1ZmZlcmVkSU9CYXNlX2RldGFjaF9fZG9jX18sCisiZGV0YWNoKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGlzY29ubmVjdCB0aGlzIGJ1ZmZlciBmcm9tIGl0cyB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gYW5kIHJldHVybiBpdC5cbiIKKyJcbiIKKyJBZnRlciB0aGUgcmF3IHN0cmVhbSBoYXMgYmVlbiBkZXRhY2hlZCwgdGhlIGJ1ZmZlciBpcyBpbiBhbiB1bnVzYWJsZVxuIgorInN0YXRlLiIpOworCisjZGVmaW5lIF9JT19fQlVGRkVSRURJT0JBU0VfREVUQUNIX01FVEhPRERFRiAgICBcCisgICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pX2lvX19CdWZmZXJlZElPQmFzZV9kZXRhY2gsIE1FVEhfTk9BUkdTLCBfaW9fX0J1ZmZlcmVkSU9CYXNlX2RldGFjaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZElPQmFzZV9kZXRhY2hfaW1wbChQeU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkSU9CYXNlX2RldGFjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX19CdWZmZXJlZElPQmFzZV9kZXRhY2hfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19fQnVmZmVyZWRfcGVla19fZG9jX18sCisicGVlaygkc2VsZiwgc2l6ZT0wLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fX0JVRkZFUkVEX1BFRUtfTUVUSE9EREVGICAgIFwKKyAgICB7InBlZWsiLCAoUHlDRnVuY3Rpb24pX2lvX19CdWZmZXJlZF9wZWVrLCBNRVRIX1ZBUkFSR1MsIF9pb19fQnVmZmVyZWRfcGVla19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZF9wZWVrX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3Qgc2l6ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkX3BlZWsoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZSA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnBlZWsiLAorICAgICAgICAmc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fX0J1ZmZlcmVkX3BlZWtfaW1wbChzZWxmLCBzaXplKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX19CdWZmZXJlZF9yZWFkX19kb2NfXywKKyJyZWFkKCRzZWxmLCBzaXplPS0xLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fX0JVRkZFUkVEX1JFQURfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWQiLCAoUHlDRnVuY3Rpb24pX2lvX19CdWZmZXJlZF9yZWFkLCBNRVRIX1ZBUkFSR1MsIF9pb19fQnVmZmVyZWRfcmVhZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZF9yZWFkX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5X3NzaXplX3Qgbik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkX3JlYWQoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgbiA9IC0xOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZCIsCisgICAgICAgIF9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fX0J1ZmZlcmVkX3JlYWRfaW1wbChzZWxmLCBuKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX19CdWZmZXJlZF9yZWFkMV9fZG9jX18sCisicmVhZDEoJHNlbGYsIHNpemUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19fQlVGRkVSRURfUkVBRDFfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWQxIiwgKFB5Q0Z1bmN0aW9uKV9pb19fQnVmZmVyZWRfcmVhZDEsIE1FVEhfTywgX2lvX19CdWZmZXJlZF9yZWFkMV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZF9yZWFkMV9pbXBsKGJ1ZmZlcmVkICpzZWxmLCBQeV9zc2l6ZV90IG4pOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZF9yZWFkMShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG47CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIm46cmVhZDEiLCAmbikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fX0J1ZmZlcmVkX3JlYWQxX2ltcGwoc2VsZiwgbik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19fQnVmZmVyZWRfcmVhZGludG9fX2RvY19fLAorInJlYWRpbnRvKCRzZWxmLCBidWZmZXIsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19fQlVGRkVSRURfUkVBRElOVE9fTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWRpbnRvIiwgKFB5Q0Z1bmN0aW9uKV9pb19fQnVmZmVyZWRfcmVhZGludG8sIE1FVEhfTywgX2lvX19CdWZmZXJlZF9yZWFkaW50b19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZF9yZWFkaW50b19pbXBsKGJ1ZmZlcmVkICpzZWxmLCBQeV9idWZmZXIgKmJ1ZmZlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkX3JlYWRpbnRvKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBidWZmZXIgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIncqOnJlYWRpbnRvIiwgJmJ1ZmZlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fX0J1ZmZlcmVkX3JlYWRpbnRvX2ltcGwoc2VsZiwgJmJ1ZmZlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgYnVmZmVyICovCisgICAgaWYgKGJ1ZmZlci5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fX0J1ZmZlcmVkX3JlYWRpbnRvMV9fZG9jX18sCisicmVhZGludG8xKCRzZWxmLCBidWZmZXIsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19fQlVGRkVSRURfUkVBRElOVE8xX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkaW50bzEiLCAoUHlDRnVuY3Rpb24pX2lvX19CdWZmZXJlZF9yZWFkaW50bzEsIE1FVEhfTywgX2lvX19CdWZmZXJlZF9yZWFkaW50bzFfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fQnVmZmVyZWRfcmVhZGludG8xX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5X2J1ZmZlciAqYnVmZmVyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fQnVmZmVyZWRfcmVhZGludG8xKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBidWZmZXIgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIncqOnJlYWRpbnRvMSIsICZidWZmZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX19CdWZmZXJlZF9yZWFkaW50bzFfaW1wbChzZWxmLCAmYnVmZmVyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBidWZmZXIgKi8KKyAgICBpZiAoYnVmZmVyLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19fQnVmZmVyZWRfcmVhZGxpbmVfX2RvY19fLAorInJlYWRsaW5lKCRzZWxmLCBzaXplPS0xLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fX0JVRkZFUkVEX1JFQURMSU5FX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkbGluZSIsIChQeUNGdW5jdGlvbilfaW9fX0J1ZmZlcmVkX3JlYWRsaW5lLCBNRVRIX1ZBUkFSR1MsIF9pb19fQnVmZmVyZWRfcmVhZGxpbmVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fQnVmZmVyZWRfcmVhZGxpbmVfaW1wbChidWZmZXJlZCAqc2VsZiwgUHlfc3NpemVfdCBzaXplKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fQnVmZmVyZWRfcmVhZGxpbmUoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZSA9IC0xOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZGxpbmUiLAorICAgICAgICBfUHlJT19Db252ZXJ0U3NpemVfdCwgJnNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX19CdWZmZXJlZF9yZWFkbGluZV9pbXBsKHNlbGYsIHNpemUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fX0J1ZmZlcmVkX3NlZWtfX2RvY19fLAorInNlZWsoJHNlbGYsIHRhcmdldCwgd2hlbmNlPTAsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19fQlVGRkVSRURfU0VFS19NRVRIT0RERUYgICAgXAorICAgIHsic2VlayIsIChQeUNGdW5jdGlvbilfaW9fX0J1ZmZlcmVkX3NlZWssIE1FVEhfVkFSQVJHUywgX2lvX19CdWZmZXJlZF9zZWVrX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkX3NlZWtfaW1wbChidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKnRhcmdldG9iaiwgaW50IHdoZW5jZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkX3NlZWsoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp0YXJnZXRvYmo7CisgICAgaW50IHdoZW5jZSA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aTpzZWVrIiwKKyAgICAgICAgJnRhcmdldG9iaiwgJndoZW5jZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fX0J1ZmZlcmVkX3NlZWtfaW1wbChzZWxmLCB0YXJnZXRvYmosIHdoZW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19fQnVmZmVyZWRfdHJ1bmNhdGVfX2RvY19fLAorInRydW5jYXRlKCRzZWxmLCBwb3M9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX19CVUZGRVJFRF9UUlVOQ0FURV9NRVRIT0RERUYgICAgXAorICAgIHsidHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pX2lvX19CdWZmZXJlZF90cnVuY2F0ZSwgTUVUSF9WQVJBUkdTLCBfaW9fX0J1ZmZlcmVkX3RydW5jYXRlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0J1ZmZlcmVkX3RydW5jYXRlX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICpwb3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19CdWZmZXJlZF90cnVuY2F0ZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnBvcyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJ0cnVuY2F0ZSIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZwb3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX19CdWZmZXJlZF90cnVuY2F0ZV9pbXBsKHNlbGYsIHBvcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CdWZmZXJlZFJlYWRlcl9fX2luaXRfX19fZG9jX18sCisiQnVmZmVyZWRSZWFkZXIocmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgbmV3IGJ1ZmZlcmVkIHJlYWRlciB1c2luZyB0aGUgZ2l2ZW4gcmVhZGFibGUgcmF3IElPIG9iamVjdC4iKTsKKworc3RhdGljIGludAorX2lvX0J1ZmZlcmVkUmVhZGVyX19faW5pdF9fX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5T2JqZWN0ICpyYXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplKTsKKworc3RhdGljIGludAorX2lvX0J1ZmZlcmVkUmVhZGVyX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJyYXciLCAiYnVmZmVyX3NpemUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmF3OworICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xuOkJ1ZmZlcmVkUmVhZGVyIiwgX2tleXdvcmRzLAorICAgICAgICAmcmF3LCAmYnVmZmVyX3NpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0J1ZmZlcmVkUmVhZGVyX19faW5pdF9fX2ltcGwoKGJ1ZmZlcmVkICopc2VsZiwgcmF3LCBidWZmZXJfc2l6ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CdWZmZXJlZFdyaXRlcl9fX2luaXRfX19fZG9jX18sCisiQnVmZmVyZWRXcml0ZXIocmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKVxuIgorIi0tXG4iCisiXG4iCisiQSBidWZmZXIgZm9yIGEgd3JpdGVhYmxlIHNlcXVlbnRpYWwgUmF3SU8gb2JqZWN0LlxuIgorIlxuIgorIlRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgQnVmZmVyZWRXcml0ZXIgZm9yIHRoZSBnaXZlbiB3cml0ZWFibGUgcmF3XG4iCisic3RyZWFtLiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0b1xuIgorIkRFRkFVTFRfQlVGRkVSX1NJWkUuIik7CisKK3N0YXRpYyBpbnQKK19pb19CdWZmZXJlZFdyaXRlcl9fX2luaXRfX19pbXBsKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqcmF3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSk7CisKK3N0YXRpYyBpbnQKK19pb19CdWZmZXJlZFdyaXRlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicmF3IiwgImJ1ZmZlcl9zaXplIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJhdzsKKyAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gREVGQVVMVF9CVUZGRVJfU0laRTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98bjpCdWZmZXJlZFdyaXRlciIsIF9rZXl3b3JkcywKKyAgICAgICAgJnJhdywgJmJ1ZmZlcl9zaXplKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19CdWZmZXJlZFdyaXRlcl9fX2luaXRfX19pbXBsKChidWZmZXJlZCAqKXNlbGYsIHJhdywgYnVmZmVyX3NpemUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fQnVmZmVyZWRXcml0ZXJfd3JpdGVfX2RvY19fLAorIndyaXRlKCRzZWxmLCBidWZmZXIsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19CVUZGRVJFRFdSSVRFUl9XUklURV9NRVRIT0RERUYgICAgXAorICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pX2lvX0J1ZmZlcmVkV3JpdGVyX3dyaXRlLCBNRVRIX08sIF9pb19CdWZmZXJlZFdyaXRlcl93cml0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J1ZmZlcmVkV3JpdGVyX3dyaXRlX2ltcGwoYnVmZmVyZWQgKnNlbGYsIFB5X2J1ZmZlciAqYnVmZmVyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CdWZmZXJlZFdyaXRlcl93cml0ZShidWZmZXJlZCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYnVmZmVyID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ5Kjp3cml0ZSIsICZidWZmZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0J1ZmZlcmVkV3JpdGVyX3dyaXRlX2ltcGwoc2VsZiwgJmJ1ZmZlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgYnVmZmVyICovCisgICAgaWYgKGJ1ZmZlci5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fQnVmZmVyZWRSV1BhaXJfX19pbml0X19fX2RvY19fLAorIkJ1ZmZlcmVkUldQYWlyKHJlYWRlciwgd3JpdGVyLCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQSBidWZmZXJlZCByZWFkZXIgYW5kIHdyaXRlciBvYmplY3QgdG9nZXRoZXIuXG4iCisiXG4iCisiQSBidWZmZXJlZCByZWFkZXIgb2JqZWN0IGFuZCBidWZmZXJlZCB3cml0ZXIgb2JqZWN0IHB1dCB0b2dldGhlciB0b1xuIgorImZvcm0gYSBzZXF1ZW50aWFsIElPIG9iamVjdCB0aGF0IGNhbiByZWFkIGFuZCB3cml0ZS4gVGhpcyBpcyB0eXBpY2FsbHlcbiIKKyJ1c2VkIHdpdGggYSBzb2NrZXQgb3IgdHdvLXdheSBwaXBlLlxuIgorIlxuIgorInJlYWRlciBhbmQgd3JpdGVyIGFyZSBSYXdJT0Jhc2Ugb2JqZWN0cyB0aGF0IGFyZSByZWFkYWJsZSBhbmRcbiIKKyJ3cml0ZWFibGUgcmVzcGVjdGl2ZWx5LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdCBkZWZhdWx0cyB0b1xuIgorIkRFRkFVTFRfQlVGRkVSX1NJWkUuIik7CisKK3N0YXRpYyBpbnQKK19pb19CdWZmZXJlZFJXUGFpcl9fX2luaXRfX19pbXBsKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKnJlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp3cml0ZXIsIFB5X3NzaXplX3QgYnVmZmVyX3NpemUpOworCitzdGF0aWMgaW50CitfaW9fQnVmZmVyZWRSV1BhaXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBQeU9iamVjdCAqcmVhZGVyOworICAgIFB5T2JqZWN0ICp3cml0ZXI7CisgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSA9IERFRkFVTFRfQlVGRkVSX1NJWkU7CisKKyAgICBpZiAoKFB5X1RZUEUoc2VsZikgPT0gJlB5QnVmZmVyZWRSV1BhaXJfVHlwZSkgJiYKKyAgICAgICAgIV9QeUFyZ19Ob0tleXdvcmRzKCJCdWZmZXJlZFJXUGFpciIsIGt3YXJncykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PfG46QnVmZmVyZWRSV1BhaXIiLAorICAgICAgICAmcmVhZGVyLCAmd3JpdGVyLCAmYnVmZmVyX3NpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0J1ZmZlcmVkUldQYWlyX19faW5pdF9fX2ltcGwoKHJ3cGFpciAqKXNlbGYsIHJlYWRlciwgd3JpdGVyLCBidWZmZXJfc2l6ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CdWZmZXJlZFJhbmRvbV9fX2luaXRfX19fZG9jX18sCisiQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKVxuIgorIi0tXG4iCisiXG4iCisiQSBidWZmZXJlZCBpbnRlcmZhY2UgdG8gcmFuZG9tIGFjY2VzcyBzdHJlYW1zLlxuIgorIlxuIgorIlRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgcmVhZGVyIGFuZCB3cml0ZXIgZm9yIGEgc2Vla2FibGUgc3RyZWFtLFxuIgorInJhdywgZ2l2ZW4gaW4gdGhlIGZpcnN0IGFyZ3VtZW50LiBJZiB0aGUgYnVmZmVyX3NpemUgaXMgb21pdHRlZCBpdFxuIgorImRlZmF1bHRzIHRvIERFRkFVTFRfQlVGRkVSX1NJWkUuIik7CisKK3N0YXRpYyBpbnQKK19pb19CdWZmZXJlZFJhbmRvbV9fX2luaXRfX19pbXBsKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqcmF3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBidWZmZXJfc2l6ZSk7CisKK3N0YXRpYyBpbnQKK19pb19CdWZmZXJlZFJhbmRvbV9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicmF3IiwgImJ1ZmZlcl9zaXplIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJhdzsKKyAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gREVGQVVMVF9CVUZGRVJfU0laRTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98bjpCdWZmZXJlZFJhbmRvbSIsIF9rZXl3b3JkcywKKyAgICAgICAgJnJhdywgJmJ1ZmZlcl9zaXplKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19CdWZmZXJlZFJhbmRvbV9fX2luaXRfX19pbXBsKChidWZmZXJlZCAqKXNlbGYsIHJhdywgYnVmZmVyX3NpemUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmJiYjVlMjM5YjRmZmU2ZiBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9jbGluaWMvYnl0ZXNpby5jLmggYi9Nb2R1bGVzL19pby9jbGluaWMvYnl0ZXNpby5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyYWJiMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2lvL2NsaW5pYy9ieXRlc2lvLmMuaApAQCAtMCwwICsxLDQyMiBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX3JlYWRhYmxlX19kb2NfXywKKyJyZWFkYWJsZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgSU8gb2JqZWN0IGNhbiBiZSByZWFkLiIpOworCisjZGVmaW5lIF9JT19CWVRFU0lPX1JFQURBQkxFX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkYWJsZSIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT19yZWFkYWJsZSwgTUVUSF9OT0FSR1MsIF9pb19CeXRlc0lPX3JlYWRhYmxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT19yZWFkYWJsZV9pbXBsKGJ5dGVzaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fcmVhZGFibGUoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX0J5dGVzSU9fcmVhZGFibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX3dyaXRhYmxlX19kb2NfXywKKyJ3cml0YWJsZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgSU8gb2JqZWN0IGNhbiBiZSB3cml0dGVuLiIpOworCisjZGVmaW5lIF9JT19CWVRFU0lPX1dSSVRBQkxFX01FVEhPRERFRiAgICBcCisgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT193cml0YWJsZSwgTUVUSF9OT0FSR1MsIF9pb19CeXRlc0lPX3dyaXRhYmxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT193cml0YWJsZV9pbXBsKGJ5dGVzaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fd3JpdGFibGUoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX0J5dGVzSU9fd3JpdGFibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX3NlZWthYmxlX19kb2NfXywKKyJzZWVrYWJsZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgSU8gb2JqZWN0IGNhbiBiZSBzZWVrZWQuIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fU0VFS0FCTEVfTUVUSE9EREVGICAgIFwKKyAgICB7InNlZWthYmxlIiwgKFB5Q0Z1bmN0aW9uKV9pb19CeXRlc0lPX3NlZWthYmxlLCBNRVRIX05PQVJHUywgX2lvX0J5dGVzSU9fc2Vla2FibGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX3NlZWthYmxlX2ltcGwoYnl0ZXNpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT19zZWVrYWJsZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fQnl0ZXNJT19zZWVrYWJsZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX0J5dGVzSU9fZmx1c2hfX2RvY19fLAorImZsdXNoKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRG9lcyBub3RoaW5nLiIpOworCisjZGVmaW5lIF9JT19CWVRFU0lPX0ZMVVNIX01FVEhPRERFRiAgICBcCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT19mbHVzaCwgTUVUSF9OT0FSR1MsIF9pb19CeXRlc0lPX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT19mbHVzaF9pbXBsKGJ5dGVzaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fZmx1c2goYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX0J5dGVzSU9fZmx1c2hfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX2dldGJ1ZmZlcl9fZG9jX18sCisiZ2V0YnVmZmVyKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiR2V0IGEgcmVhZC13cml0ZSB2aWV3IG92ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBCeXRlc0lPIG9iamVjdC4iKTsKKworI2RlZmluZSBfSU9fQllURVNJT19HRVRCVUZGRVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldGJ1ZmZlciIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT19nZXRidWZmZXIsIE1FVEhfTk9BUkdTLCBfaW9fQnl0ZXNJT19nZXRidWZmZXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX2dldGJ1ZmZlcl9pbXBsKGJ5dGVzaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fZ2V0YnVmZmVyKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pb19CeXRlc0lPX2dldGJ1ZmZlcl9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX0J5dGVzSU9fZ2V0dmFsdWVfX2RvY19fLAorImdldHZhbHVlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0cmlldmUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgQnl0ZXNJTyBvYmplY3QuIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fR0VUVkFMVUVfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldHZhbHVlIiwgKFB5Q0Z1bmN0aW9uKV9pb19CeXRlc0lPX2dldHZhbHVlLCBNRVRIX05PQVJHUywgX2lvX0J5dGVzSU9fZ2V0dmFsdWVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX2dldHZhbHVlX2ltcGwoYnl0ZXNpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT19nZXR2YWx1ZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fQnl0ZXNJT19nZXR2YWx1ZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX0J5dGVzSU9faXNhdHR5X19kb2NfXywKKyJpc2F0dHkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJBbHdheXMgcmV0dXJucyBGYWxzZS5cbiIKKyJcbiIKKyJCeXRlc0lPIG9iamVjdHMgYXJlIG5vdCBjb25uZWN0ZWQgdG8gYSBUVFktbGlrZSBkZXZpY2UuIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fSVNBVFRZX01FVEhPRERFRiAgICBcCisgICAgeyJpc2F0dHkiLCAoUHlDRnVuY3Rpb24pX2lvX0J5dGVzSU9faXNhdHR5LCBNRVRIX05PQVJHUywgX2lvX0J5dGVzSU9faXNhdHR5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT19pc2F0dHlfaW1wbChieXRlc2lvICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX2lzYXR0eShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fQnl0ZXNJT19pc2F0dHlfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX3RlbGxfX2RvY19fLAorInRlbGwoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDdXJyZW50IGZpbGUgcG9zaXRpb24sIGFuIGludGVnZXIuIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fVEVMTF9NRVRIT0RERUYgICAgXAorICAgIHsidGVsbCIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT190ZWxsLCBNRVRIX05PQVJHUywgX2lvX0J5dGVzSU9fdGVsbF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fdGVsbF9pbXBsKGJ5dGVzaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fdGVsbChieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fQnl0ZXNJT190ZWxsX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fQnl0ZXNJT19yZWFkX19kb2NfXywKKyJyZWFkKCRzZWxmLCBzaXplPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIGF0IG1vc3Qgc2l6ZSBieXRlcywgcmV0dXJuZWQgYXMgYSBieXRlcyBvYmplY3QuXG4iCisiXG4iCisiSWYgdGhlIHNpemUgYXJndW1lbnQgaXMgbmVnYXRpdmUsIHJlYWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuXG4iCisiUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fUkVBRF9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT19yZWFkLCBNRVRIX1ZBUkFSR1MsIF9pb19CeXRlc0lPX3JlYWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX3JlYWRfaW1wbChieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJnKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX3JlYWQoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZWFkIiwKKyAgICAgICAgMCwgMSwKKyAgICAgICAgJmFyZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fQnl0ZXNJT19yZWFkX2ltcGwoc2VsZiwgYXJnKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX0J5dGVzSU9fcmVhZDFfX2RvY19fLAorInJlYWQxKCRzZWxmLCBzaXplLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVhZCBhdCBtb3N0IHNpemUgYnl0ZXMsIHJldHVybmVkIGFzIGEgYnl0ZXMgb2JqZWN0LlxuIgorIlxuIgorIklmIHRoZSBzaXplIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuXG4iCisiUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fUkVBRDFfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWQxIiwgKFB5Q0Z1bmN0aW9uKV9pb19CeXRlc0lPX3JlYWQxLCBNRVRIX08sIF9pb19CeXRlc0lPX3JlYWQxX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihfaW9fQnl0ZXNJT19yZWFkbGluZV9fZG9jX18sCisicmVhZGxpbmUoJHNlbGYsIHNpemU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIk5leHQgbGluZSBmcm9tIHRoZSBmaWxlLCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKKyJcbiIKKyJSZXRhaW4gbmV3bGluZS4gIEEgbm9uLW5lZ2F0aXZlIHNpemUgYXJndW1lbnQgbGltaXRzIHRoZSBtYXhpbXVtXG4iCisibnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybiAoYW4gaW5jb21wbGV0ZSBsaW5lIG1heSBiZSByZXR1cm5lZCB0aGVuKS5cbiIKKyJSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi4iKTsKKworI2RlZmluZSBfSU9fQllURVNJT19SRUFETElORV9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZGxpbmUiLCAoUHlDRnVuY3Rpb24pX2lvX0J5dGVzSU9fcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgX2lvX0J5dGVzSU9fcmVhZGxpbmVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX3JlYWRsaW5lX2ltcGwoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT19yZWFkbGluZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInJlYWRsaW5lIiwKKyAgICAgICAgMCwgMSwKKyAgICAgICAgJmFyZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fQnl0ZXNJT19yZWFkbGluZV9pbXBsKHNlbGYsIGFyZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX3JlYWRsaW5lc19fZG9jX18sCisicmVhZGxpbmVzKCRzZWxmLCBzaXplPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJMaXN0IG9mIGJ5dGVzIG9iamVjdHMsIGVhY2ggYSBsaW5lIGZyb20gdGhlIGZpbGUuXG4iCisiXG4iCisiQ2FsbCByZWFkbGluZSgpIHJlcGVhdGVkbHkgYW5kIHJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIHNvIHJlYWQuXG4iCisiVGhlIG9wdGlvbmFsIHNpemUgYXJndW1lbnQsIGlmIGdpdmVuLCBpcyBhbiBhcHByb3hpbWF0ZSBib3VuZCBvbiB0aGVcbiIKKyJ0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGxpbmVzIHJldHVybmVkLiIpOworCisjZGVmaW5lIF9JT19CWVRFU0lPX1JFQURMSU5FU19NRVRIT0RERUYgICAgXAorICAgIHsicmVhZGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKV9pb19CeXRlc0lPX3JlYWRsaW5lcywgTUVUSF9WQVJBUkdTLCBfaW9fQnl0ZXNJT19yZWFkbGluZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX3JlYWRsaW5lc19pbXBsKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fcmVhZGxpbmVzKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAicmVhZGxpbmVzIiwKKyAgICAgICAgMCwgMSwKKyAgICAgICAgJmFyZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fQnl0ZXNJT19yZWFkbGluZXNfaW1wbChzZWxmLCBhcmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fQnl0ZXNJT19yZWFkaW50b19fZG9jX18sCisicmVhZGludG8oJHNlbGYsIGJ1ZmZlciwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgYnl0ZXMgaW50byBidWZmZXIuXG4iCisiXG4iCisiUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoMCBmb3IgRU9GKSwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0XG4iCisiaXMgc2V0IG5vdCB0byBibG9jayBhbmQgaGFzIG5vIGRhdGEgdG8gcmVhZC4iKTsKKworI2RlZmluZSBfSU9fQllURVNJT19SRUFESU5UT19NRVRIT0RERUYgICAgXAorICAgIHsicmVhZGludG8iLCAoUHlDRnVuY3Rpb24pX2lvX0J5dGVzSU9fcmVhZGludG8sIE1FVEhfTywgX2lvX0J5dGVzSU9fcmVhZGludG9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX3JlYWRpbnRvX2ltcGwoYnl0ZXNpbyAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fcmVhZGludG8oYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYnVmZmVyID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ3KjpyZWFkaW50byIsICZidWZmZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0J5dGVzSU9fcmVhZGludG9faW1wbChzZWxmLCAmYnVmZmVyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBidWZmZXIgKi8KKyAgICBpZiAoYnVmZmVyLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX3RydW5jYXRlX19kb2NfXywKKyJ0cnVuY2F0ZSgkc2VsZiwgc2l6ZT1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVHJ1bmNhdGUgdGhlIGZpbGUgdG8gYXQgbW9zdCBzaXplIGJ5dGVzLlxuIgorIlxuIgorIlNpemUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXMgcmV0dXJuZWQgYnkgdGVsbCgpLlxuIgorIlRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gaXMgdW5jaGFuZ2VkLiAgUmV0dXJucyB0aGUgbmV3IHNpemUuIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fVFJVTkNBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKV9pb19CeXRlc0lPX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1MsIF9pb19CeXRlc0lPX3RydW5jYXRlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT190cnVuY2F0ZV9pbXBsKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fdHJ1bmNhdGUoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJ0cnVuY2F0ZSIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZhcmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0J5dGVzSU9fdHJ1bmNhdGVfaW1wbChzZWxmLCBhcmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fQnl0ZXNJT19zZWVrX19kb2NfXywKKyJzZWVrKCRzZWxmLCBwb3MsIHdoZW5jZT0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlIHN0cmVhbSBwb3NpdGlvbi5cbiIKKyJcbiIKKyJTZWVrIHRvIGJ5dGUgb2Zmc2V0IHBvcyByZWxhdGl2ZSB0byBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgd2hlbmNlOlxuIgorIiAgICAgMCAgU3RhcnQgb2Ygc3RyZWFtICh0aGUgZGVmYXVsdCkuICBwb3Mgc2hvdWxkIGJlID49IDA7XG4iCisiICAgICAxICBDdXJyZW50IHBvc2l0aW9uIC0gcG9zIG1heSBiZSBuZWdhdGl2ZTtcbiIKKyIgICAgIDIgIEVuZCBvZiBzdHJlYW0gLSBwb3MgdXN1YWxseSBuZWdhdGl2ZS5cbiIKKyJSZXR1cm5zIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fU0VFS19NRVRIT0RERUYgICAgXAorICAgIHsic2VlayIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT19zZWVrLCBNRVRIX1ZBUkFSR1MsIF9pb19CeXRlc0lPX3NlZWtfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19CeXRlc0lPX3NlZWtfaW1wbChieXRlc2lvICpzZWxmLCBQeV9zc2l6ZV90IHBvcywgaW50IHdoZW5jZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT19zZWVrKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zOworICAgIGludCB3aGVuY2UgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJufGk6c2VlayIsCisgICAgICAgICZwb3MsICZ3aGVuY2UpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0J5dGVzSU9fc2Vla19pbXBsKHNlbGYsIHBvcywgd2hlbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX0J5dGVzSU9fd3JpdGVfX2RvY19fLAorIndyaXRlKCRzZWxmLCBiLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV3JpdGUgYnl0ZXMgdG8gZmlsZS5cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiIpOworCisjZGVmaW5lIF9JT19CWVRFU0lPX1dSSVRFX01FVEhPRERFRiAgICBcCisgICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT193cml0ZSwgTUVUSF9PLCBfaW9fQnl0ZXNJT193cml0ZV9fZG9jX199LAorCitQeURvY19TVFJWQVIoX2lvX0J5dGVzSU9fd3JpdGVsaW5lc19fZG9jX18sCisid3JpdGVsaW5lcygkc2VsZiwgbGluZXMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXcml0ZSBsaW5lcyB0byB0aGUgZmlsZS5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgbmV3bGluZXMgYXJlIG5vdCBhZGRlZC4gIGxpbmVzIGNhbiBiZSBhbnkgaXRlcmFibGUgb2JqZWN0XG4iCisicHJvZHVjaW5nIGJ5dGVzLWxpa2Ugb2JqZWN0cy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgd3JpdGUoKSBmb3JcbiIKKyJlYWNoIGVsZW1lbnQuIik7CisKKyNkZWZpbmUgX0lPX0JZVEVTSU9fV1JJVEVMSU5FU19NRVRIT0RERUYgICAgXAorICAgIHsid3JpdGVsaW5lcyIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT193cml0ZWxpbmVzLCBNRVRIX08sIF9pb19CeXRlc0lPX3dyaXRlbGluZXNfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX2Nsb3NlX19kb2NfXywKKyJjbG9zZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkRpc2FibGUgYWxsIEkvTyBvcGVyYXRpb25zLiIpOworCisjZGVmaW5lIF9JT19CWVRFU0lPX0NMT1NFX01FVEhPRERFRiAgICBcCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilfaW9fQnl0ZXNJT19jbG9zZSwgTUVUSF9OT0FSR1MsIF9pb19CeXRlc0lPX2Nsb3NlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fQnl0ZXNJT19jbG9zZV9pbXBsKGJ5dGVzaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0J5dGVzSU9fY2xvc2UoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX0J5dGVzSU9fY2xvc2VfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19CeXRlc0lPX19faW5pdF9fX19kb2NfXywKKyJCeXRlc0lPKGluaXRpYWxfYnl0ZXM9YlwnXCcpXG4iCisiLS1cbiIKKyJcbiIKKyJCdWZmZXJlZCBJL08gaW1wbGVtZW50YXRpb24gdXNpbmcgYW4gaW4tbWVtb3J5IGJ5dGVzIGJ1ZmZlci4iKTsKKworc3RhdGljIGludAorX2lvX0J5dGVzSU9fX19pbml0X19faW1wbChieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqaW5pdHZhbHVlKTsKKworc3RhdGljIGludAorX2lvX0J5dGVzSU9fX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImluaXRpYWxfYnl0ZXMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqaW5pdHZhbHVlID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPOkJ5dGVzSU8iLCBfa2V5d29yZHMsCisgICAgICAgICZpbml0dmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0J5dGVzSU9fX19pbml0X19faW1wbCgoYnl0ZXNpbyAqKXNlbGYsIGluaXR2YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MGNlMmM2MjcyNzE4NDMxIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2NsaW5pYy9maWxlaW8uYy5oIGIvTW9kdWxlcy9faW8vY2xpbmljL2ZpbGVpby5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0MjAwOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2lvL2NsaW5pYy9maWxlaW8uYy5oCkBAIC0wLDAgKzEsMzY3IEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2lvX0ZpbGVJT19jbG9zZV9fZG9jX18sCisiY2xvc2UoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDbG9zZSB0aGUgZmlsZS5cbiIKKyJcbiIKKyJBIGNsb3NlZCBmaWxlIGNhbm5vdCBiZSB1c2VkIGZvciBmdXJ0aGVyIEkvTyBvcGVyYXRpb25zLiAgY2xvc2UoKSBtYXkgYmVcbiIKKyJjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aG91dCBlcnJvci4iKTsKKworI2RlZmluZSBfSU9fRklMRUlPX0NMT1NFX01FVEhPRERFRiAgICBcCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilfaW9fRmlsZUlPX2Nsb3NlLCBNRVRIX05PQVJHUywgX2lvX0ZpbGVJT19jbG9zZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19jbG9zZV9pbXBsKGZpbGVpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fRmlsZUlPX2Nsb3NlKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX0ZpbGVJT19jbG9zZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX0ZpbGVJT19fX2luaXRfX19fZG9jX18sCisiRmlsZUlPKGZpbGUsIG1vZGU9XCdyXCcsIGNsb3NlZmQ9VHJ1ZSwgb3BlbmVyPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJPcGVuIGEgZmlsZS5cbiIKKyJcbiIKKyJUaGUgbW9kZSBjYW4gYmUgXCdyXCcgKGRlZmF1bHQpLCBcJ3dcJywgXCd4XCcgb3IgXCdhXCcgZm9yIHJlYWRpbmcsXG4iCisid3JpdGluZywgZXhjbHVzaXZlIGNyZWF0aW9uIG9yIGFwcGVuZGluZy4gIFRoZSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpZiBpdFxuIgorImRvZXNuXCd0IGV4aXN0IHdoZW4gb3BlbmVkIGZvciB3cml0aW5nIG9yIGFwcGVuZGluZzsgaXQgd2lsbCBiZSB0cnVuY2F0ZWRcbiIKKyJ3aGVuIG9wZW5lZCBmb3Igd3JpdGluZy4gIEEgRmlsZUV4aXN0c0Vycm9yIHdpbGwgYmUgcmFpc2VkIGlmIGl0IGFscmVhZHlcbiIKKyJleGlzdHMgd2hlbiBvcGVuZWQgZm9yIGNyZWF0aW5nLiBPcGVuaW5nIGEgZmlsZSBmb3IgY3JlYXRpbmcgaW1wbGllc1xuIgorIndyaXRpbmcgc28gdGhpcyBtb2RlIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byBcJ3dcJy5BZGQgYSBcJytcJyB0byB0aGUgbW9kZVxuIgorInRvIGFsbG93IHNpbXVsdGFuZW91cyByZWFkaW5nIGFuZCB3cml0aW5nLiBBIGN1c3RvbSBvcGVuZXIgY2FuIGJlIHVzZWQgYnlcbiIKKyJwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGVcbiIKKyJvYmplY3QgaXMgdGhlbiBvYnRhaW5lZCBieSBjYWxsaW5nIG9wZW5lciB3aXRoICgqbmFtZSosICpmbGFncyopLlxuIgorIipvcGVuZXIqIG11c3QgcmV0dXJuIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIChwYXNzaW5nIG9zLm9wZW4gYXMgKm9wZW5lcipcbiIKKyJyZXN1bHRzIGluIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBwYXNzaW5nIE5vbmUpLiIpOworCitzdGF0aWMgaW50CitfaW9fRmlsZUlPX19faW5pdF9fX2ltcGwoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqbmFtZW9iaiwgY29uc3QgY2hhciAqbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xvc2VmZCwgUHlPYmplY3QgKm9wZW5lcik7CisKK3N0YXRpYyBpbnQKK19pb19GaWxlSU9fX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZpbGUiLCAibW9kZSIsICJjbG9zZWZkIiwgIm9wZW5lciIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpuYW1lb2JqOworICAgIGNvbnN0IGNoYXIgKm1vZGUgPSAiciI7CisgICAgaW50IGNsb3NlZmQgPSAxOworICAgIFB5T2JqZWN0ICpvcGVuZXIgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xzaU86RmlsZUlPIiwgX2tleXdvcmRzLAorICAgICAgICAmbmFtZW9iaiwgJm1vZGUsICZjbG9zZWZkLCAmb3BlbmVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19GaWxlSU9fX19pbml0X19faW1wbCgoZmlsZWlvICopc2VsZiwgbmFtZW9iaiwgbW9kZSwgY2xvc2VmZCwgb3BlbmVyKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX0ZpbGVJT19maWxlbm9fX2RvY19fLAorImZpbGVubygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgKGFuIGludGVnZXIpLiIpOworCisjZGVmaW5lIF9JT19GSUxFSU9fRklMRU5PX01FVEhPRERFRiAgICBcCisgICAgeyJmaWxlbm8iLCAoUHlDRnVuY3Rpb24pX2lvX0ZpbGVJT19maWxlbm8sIE1FVEhfTk9BUkdTLCBfaW9fRmlsZUlPX2ZpbGVub19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19maWxlbm9faW1wbChmaWxlaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19maWxlbm8oZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fRmlsZUlPX2ZpbGVub19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX0ZpbGVJT19yZWFkYWJsZV9fZG9jX18sCisicmVhZGFibGUoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJUcnVlIGlmIGZpbGUgd2FzIG9wZW5lZCBpbiBhIHJlYWQgbW9kZS4iKTsKKworI2RlZmluZSBfSU9fRklMRUlPX1JFQURBQkxFX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkYWJsZSIsIChQeUNGdW5jdGlvbilfaW9fRmlsZUlPX3JlYWRhYmxlLCBNRVRIX05PQVJHUywgX2lvX0ZpbGVJT19yZWFkYWJsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19yZWFkYWJsZV9pbXBsKGZpbGVpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fRmlsZUlPX3JlYWRhYmxlKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX0ZpbGVJT19yZWFkYWJsZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX0ZpbGVJT193cml0YWJsZV9fZG9jX18sCisid3JpdGFibGUoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJUcnVlIGlmIGZpbGUgd2FzIG9wZW5lZCBpbiBhIHdyaXRlIG1vZGUuIik7CisKKyNkZWZpbmUgX0lPX0ZJTEVJT19XUklUQUJMRV9NRVRIT0RERUYgICAgXAorICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pX2lvX0ZpbGVJT193cml0YWJsZSwgTUVUSF9OT0FSR1MsIF9pb19GaWxlSU9fd3JpdGFibGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19GaWxlSU9fd3JpdGFibGVfaW1wbChmaWxlaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT193cml0YWJsZShmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pb19GaWxlSU9fd3JpdGFibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19GaWxlSU9fc2Vla2FibGVfX2RvY19fLAorInNlZWthYmxlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVHJ1ZSBpZiBmaWxlIHN1cHBvcnRzIHJhbmRvbS1hY2Nlc3MuIik7CisKKyNkZWZpbmUgX0lPX0ZJTEVJT19TRUVLQUJMRV9NRVRIT0RERUYgICAgXAorICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pX2lvX0ZpbGVJT19zZWVrYWJsZSwgTUVUSF9OT0FSR1MsIF9pb19GaWxlSU9fc2Vla2FibGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19GaWxlSU9fc2Vla2FibGVfaW1wbChmaWxlaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19zZWVrYWJsZShmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pb19GaWxlSU9fc2Vla2FibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19GaWxlSU9fcmVhZGludG9fX2RvY19fLAorInJlYWRpbnRvKCRzZWxmLCBidWZmZXIsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTYW1lIGFzIFJhd0lPQmFzZS5yZWFkaW50bygpLiIpOworCisjZGVmaW5lIF9JT19GSUxFSU9fUkVBRElOVE9fTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWRpbnRvIiwgKFB5Q0Z1bmN0aW9uKV9pb19GaWxlSU9fcmVhZGludG8sIE1FVEhfTywgX2lvX0ZpbGVJT19yZWFkaW50b19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19yZWFkaW50b19pbXBsKGZpbGVpbyAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19yZWFkaW50byhmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGJ1ZmZlciA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAidyo6cmVhZGludG8iLCAmYnVmZmVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19GaWxlSU9fcmVhZGludG9faW1wbChzZWxmLCAmYnVmZmVyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBidWZmZXIgKi8KKyAgICBpZiAoYnVmZmVyLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19GaWxlSU9fcmVhZGFsbF9fZG9jX18sCisicmVhZGFsbCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgYWxsIGRhdGEgZnJvbSB0aGUgZmlsZSwgcmV0dXJuZWQgYXMgYnl0ZXMuXG4iCisiXG4iCisiSW4gbm9uLWJsb2NraW5nIG1vZGUsIHJldHVybnMgYXMgbXVjaCBhcyBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsXG4iCisib3IgTm9uZSBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS4gIFJldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLiIpOworCisjZGVmaW5lIF9JT19GSUxFSU9fUkVBREFMTF9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZGFsbCIsIChQeUNGdW5jdGlvbilfaW9fRmlsZUlPX3JlYWRhbGwsIE1FVEhfTk9BUkdTLCBfaW9fRmlsZUlPX3JlYWRhbGxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19GaWxlSU9fcmVhZGFsbF9pbXBsKGZpbGVpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fRmlsZUlPX3JlYWRhbGwoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fRmlsZUlPX3JlYWRhbGxfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19GaWxlSU9fcmVhZF9fZG9jX18sCisicmVhZCgkc2VsZiwgc2l6ZT0tMSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgYXQgbW9zdCBzaXplIGJ5dGVzLCByZXR1cm5lZCBhcyBieXRlcy5cbiIKKyJcbiIKKyJPbmx5IG1ha2VzIG9uZSBzeXN0ZW0gY2FsbCwgc28gbGVzcyBkYXRhIG1heSBiZSByZXR1cm5lZCB0aGFuIHJlcXVlc3RlZC5cbiIKKyJJbiBub24tYmxvY2tpbmcgbW9kZSwgcmV0dXJucyBOb25lIGlmIG5vIGRhdGEgaXMgYXZhaWxhYmxlLlxuIgorIlJldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLiIpOworCisjZGVmaW5lIF9JT19GSUxFSU9fUkVBRF9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilfaW9fRmlsZUlPX3JlYWQsIE1FVEhfVkFSQVJHUywgX2lvX0ZpbGVJT19yZWFkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fRmlsZUlPX3JlYWRfaW1wbChmaWxlaW8gKnNlbGYsIFB5X3NzaXplX3Qgc2l6ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fRmlsZUlPX3JlYWQoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemUgPSAtMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWQiLAorICAgICAgICBfUHlJT19Db252ZXJ0U3NpemVfdCwgJnNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0ZpbGVJT19yZWFkX2ltcGwoc2VsZiwgc2l6ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19GaWxlSU9fd3JpdGVfX2RvY19fLAorIndyaXRlKCRzZWxmLCBiLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV3JpdGUgYnVmZmVyIGIgdG8gZmlsZSwgcmV0dXJuIG51bWJlciBvZiBieXRlcyB3cml0dGVuLlxuIgorIlxuIgorIk9ubHkgbWFrZXMgb25lIHN5c3RlbSBjYWxsLCBzbyBub3QgYWxsIG9mIHRoZSBkYXRhIG1heSBiZSB3cml0dGVuLlxuIgorIlRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiBpcyByZXR1cm5lZC4gIEluIG5vbi1ibG9ja2luZyBtb2RlLFxuIgorInJldHVybnMgTm9uZSBpZiB0aGUgd3JpdGUgd291bGQgYmxvY2suIik7CisKKyNkZWZpbmUgX0lPX0ZJTEVJT19XUklURV9NRVRIT0RERUYgICAgXAorICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pX2lvX0ZpbGVJT193cml0ZSwgTUVUSF9PLCBfaW9fRmlsZUlPX3dyaXRlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fRmlsZUlPX3dyaXRlX2ltcGwoZmlsZWlvICpzZWxmLCBQeV9idWZmZXIgKmIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT193cml0ZShmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGIgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInkqOndyaXRlIiwgJmIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0ZpbGVJT193cml0ZV9pbXBsKHNlbGYsICZiKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBiICovCisgICAgaWYgKGIub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19GaWxlSU9fc2Vla19fZG9jX18sCisic2Vlaygkc2VsZiwgcG9zLCB3aGVuY2U9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIk1vdmUgdG8gbmV3IGZpbGUgcG9zaXRpb24gYW5kIHJldHVybiB0aGUgZmlsZSBwb3NpdGlvbi5cbiIKKyJcbiIKKyJBcmd1bWVudCBvZmZzZXQgaXMgYSBieXRlIGNvdW50LiAgT3B0aW9uYWwgYXJndW1lbnQgd2hlbmNlIGRlZmF1bHRzIHRvXG4iCisiU0VFS19TRVQgb3IgMCAob2Zmc2V0IGZyb20gc3RhcnQgb2YgZmlsZSwgb2Zmc2V0IHNob3VsZCBiZSA+PSAwKTsgb3RoZXIgdmFsdWVzXG4iCisiYXJlIFNFRUtfQ1VSIG9yIDEgKG1vdmUgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiwgcG9zaXRpdmUgb3IgbmVnYXRpdmUpLFxuIgorImFuZCBTRUVLX0VORCBvciAyIChtb3ZlIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlLCB1c3VhbGx5IG5lZ2F0aXZlLCBhbHRob3VnaFxuIgorIm1hbnkgcGxhdGZvcm1zIGFsbG93IHNlZWtpbmcgYmV5b25kIHRoZSBlbmQgb2YgYSBmaWxlKS5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgbm90IGFsbCBmaWxlIG9iamVjdHMgYXJlIHNlZWthYmxlLiIpOworCisjZGVmaW5lIF9JT19GSUxFSU9fU0VFS19NRVRIT0RERUYgICAgXAorICAgIHsic2VlayIsIChQeUNGdW5jdGlvbilfaW9fRmlsZUlPX3NlZWssIE1FVEhfVkFSQVJHUywgX2lvX0ZpbGVJT19zZWVrX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fRmlsZUlPX3NlZWtfaW1wbChmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICpwb3MsIGludCB3aGVuY2UpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19zZWVrKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnBvczsKKyAgICBpbnQgd2hlbmNlID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xpOnNlZWsiLAorICAgICAgICAmcG9zLCAmd2hlbmNlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19GaWxlSU9fc2Vla19pbXBsKHNlbGYsIHBvcywgd2hlbmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX0ZpbGVJT190ZWxsX19kb2NfXywKKyJ0ZWxsKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3VycmVudCBmaWxlIHBvc2l0aW9uLlxuIgorIlxuIgorIkNhbiByYWlzZSBPU0Vycm9yIGZvciBub24gc2Vla2FibGUgZmlsZXMuIik7CisKKyNkZWZpbmUgX0lPX0ZJTEVJT19URUxMX01FVEhPRERFRiAgICBcCisgICAgeyJ0ZWxsIiwgKFB5Q0Z1bmN0aW9uKV9pb19GaWxlSU9fdGVsbCwgTUVUSF9OT0FSR1MsIF9pb19GaWxlSU9fdGVsbF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT190ZWxsX2ltcGwoZmlsZWlvICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19GaWxlSU9fdGVsbChmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pb19GaWxlSU9fdGVsbF9pbXBsKHNlbGYpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0ZUUlVOQ0FURSkKKworUHlEb2NfU1RSVkFSKF9pb19GaWxlSU9fdHJ1bmNhdGVfX2RvY19fLAorInRydW5jYXRlKCRzZWxmLCBzaXplPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJUcnVuY2F0ZSB0aGUgZmlsZSB0byBhdCBtb3N0IHNpemUgYnl0ZXMgYW5kIHJldHVybiB0aGUgdHJ1bmNhdGVkIHNpemUuXG4iCisiXG4iCisiU2l6ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLCBhcyByZXR1cm5lZCBieSB0ZWxsKCkuXG4iCisiVGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBpcyBjaGFuZ2VkIHRvIHRoZSB2YWx1ZSBvZiBzaXplLiIpOworCisjZGVmaW5lIF9JT19GSUxFSU9fVFJVTkNBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKV9pb19GaWxlSU9fdHJ1bmNhdGUsIE1FVEhfVkFSQVJHUywgX2lvX0ZpbGVJT190cnVuY2F0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT190cnVuY2F0ZV9pbXBsKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKnBvc29iaik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fRmlsZUlPX3RydW5jYXRlKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnBvc29iaiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJ0cnVuY2F0ZSIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZwb3NvYmopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0ZpbGVJT190cnVuY2F0ZV9pbXBsKHNlbGYsIHBvc29iaik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9GVFJVTkNBVEUpICovCisKK1B5RG9jX1NUUlZBUihfaW9fRmlsZUlPX2lzYXR0eV9fZG9jX18sCisiaXNhdHR5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVHJ1ZSBpZiB0aGUgZmlsZSBpcyBjb25uZWN0ZWQgdG8gYSBUVFkgZGV2aWNlLiIpOworCisjZGVmaW5lIF9JT19GSUxFSU9fSVNBVFRZX01FVEhPRERFRiAgICBcCisgICAgeyJpc2F0dHkiLCAoUHlDRnVuY3Rpb24pX2lvX0ZpbGVJT19pc2F0dHksIE1FVEhfTk9BUkdTLCBfaW9fRmlsZUlPX2lzYXR0eV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19pc2F0dHlfaW1wbChmaWxlaW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19pc2F0dHkoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fRmlsZUlPX2lzYXR0eV9pbXBsKHNlbGYpOworfQorCisjaWZuZGVmIF9JT19GSUxFSU9fVFJVTkNBVEVfTUVUSE9EREVGCisgICAgI2RlZmluZSBfSU9fRklMRUlPX1RSVU5DQVRFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKF9JT19GSUxFSU9fVFJVTkNBVEVfTUVUSE9EREVGKSAqLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRjYmMzOWI0NjY1OTg0OTIgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vY2xpbmljL2lvYmFzZS5jLmggYi9Nb2R1bGVzL19pby9jbGluaWMvaW9iYXNlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzYyZjExCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9faW8vY2xpbmljL2lvYmFzZS5jLmgKQEAgLTAsMCArMSwyNzkgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW9fX0lPQmFzZV90ZWxsX19kb2NfXywKKyJ0ZWxsKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLiIpOworCisjZGVmaW5lIF9JT19fSU9CQVNFX1RFTExfTUVUSE9EREVGICAgIFwKKyAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pX2lvX19JT0Jhc2VfdGVsbCwgTUVUSF9OT0FSR1MsIF9pb19fSU9CYXNlX3RlbGxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fSU9CYXNlX3RlbGxfaW1wbChQeU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV90ZWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fX0lPQmFzZV90ZWxsX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fX0lPQmFzZV9mbHVzaF9fZG9jX18sCisiZmx1c2goJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJGbHVzaCB3cml0ZSBidWZmZXJzLCBpZiBhcHBsaWNhYmxlLlxuIgorIlxuIgorIlRoaXMgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkLW9ubHkgYW5kIG5vbi1ibG9ja2luZyBzdHJlYW1zLiIpOworCisjZGVmaW5lIF9JT19fSU9CQVNFX0ZMVVNIX01FVEhPRERFRiAgICBcCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilfaW9fX0lPQmFzZV9mbHVzaCwgTUVUSF9OT0FSR1MsIF9pb19fSU9CYXNlX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV9mbHVzaF9pbXBsKFB5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fSU9CYXNlX2ZsdXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fX0lPQmFzZV9mbHVzaF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX19JT0Jhc2VfY2xvc2VfX2RvY19fLAorImNsb3NlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRmx1c2ggYW5kIGNsb3NlIHRoZSBJTyBvYmplY3QuXG4iCisiXG4iCisiVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNsb3NlZC4iKTsKKworI2RlZmluZSBfSU9fX0lPQkFTRV9DTE9TRV9NRVRIT0RERUYgICAgXAorICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pX2lvX19JT0Jhc2VfY2xvc2UsIE1FVEhfTk9BUkdTLCBfaW9fX0lPQmFzZV9jbG9zZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19JT0Jhc2VfY2xvc2VfaW1wbChQeU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV9jbG9zZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX19JT0Jhc2VfY2xvc2VfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19fSU9CYXNlX3NlZWthYmxlX19kb2NfXywKKyJzZWVrYWJsZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB3aGV0aGVyIG9iamVjdCBzdXBwb3J0cyByYW5kb20gYWNjZXNzLlxuIgorIlxuIgorIklmIEZhbHNlLCBzZWVrKCksIHRlbGwoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIE9TRXJyb3IuXG4iCisiVGhpcyBtZXRob2QgbWF5IG5lZWQgdG8gZG8gYSB0ZXN0IHNlZWsoKS4iKTsKKworI2RlZmluZSBfSU9fX0lPQkFTRV9TRUVLQUJMRV9NRVRIT0RERUYgICAgXAorICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pX2lvX19JT0Jhc2Vfc2Vla2FibGUsIE1FVEhfTk9BUkdTLCBfaW9fX0lPQmFzZV9zZWVrYWJsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19JT0Jhc2Vfc2Vla2FibGVfaW1wbChQeU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV9zZWVrYWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX19JT0Jhc2Vfc2Vla2FibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19fSU9CYXNlX3JlYWRhYmxlX19kb2NfXywKKyJyZWFkYWJsZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciByZWFkaW5nLlxuIgorIlxuIgorIklmIEZhbHNlLCByZWFkKCkgd2lsbCByYWlzZSBPU0Vycm9yLiIpOworCisjZGVmaW5lIF9JT19fSU9CQVNFX1JFQURBQkxFX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkYWJsZSIsIChQeUNGdW5jdGlvbilfaW9fX0lPQmFzZV9yZWFkYWJsZSwgTUVUSF9OT0FSR1MsIF9pb19fSU9CYXNlX3JlYWRhYmxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV9yZWFkYWJsZV9pbXBsKFB5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fSU9CYXNlX3JlYWRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fX0lPQmFzZV9yZWFkYWJsZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX19JT0Jhc2Vfd3JpdGFibGVfX2RvY19fLAorIndyaXRhYmxlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHdoZXRoZXIgb2JqZWN0IHdhcyBvcGVuZWQgZm9yIHdyaXRpbmcuXG4iCisiXG4iCisiSWYgRmFsc2UsIHdyaXRlKCkgd2lsbCByYWlzZSBPU0Vycm9yLiIpOworCisjZGVmaW5lIF9JT19fSU9CQVNFX1dSSVRBQkxFX01FVEhPRERFRiAgICBcCisgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilfaW9fX0lPQmFzZV93cml0YWJsZSwgTUVUSF9OT0FSR1MsIF9pb19fSU9CYXNlX3dyaXRhYmxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV93cml0YWJsZV9pbXBsKFB5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fSU9CYXNlX3dyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fX0lPQmFzZV93cml0YWJsZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX19JT0Jhc2VfZmlsZW5vX19kb2NfXywKKyJmaWxlbm8oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGlmIG9uZSBleGlzdHMuXG4iCisiXG4iCisiT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuIik7CisKKyNkZWZpbmUgX0lPX19JT0JBU0VfRklMRU5PX01FVEhPRERFRiAgICBcCisgICAgeyJmaWxlbm8iLCAoUHlDRnVuY3Rpb24pX2lvX19JT0Jhc2VfZmlsZW5vLCBNRVRIX05PQVJHUywgX2lvX19JT0Jhc2VfZmlsZW5vX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV9maWxlbm9faW1wbChQeU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV9maWxlbm8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pb19fSU9CYXNlX2ZpbGVub19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX19JT0Jhc2VfaXNhdHR5X19kb2NfXywKKyJpc2F0dHkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gd2hldGhlciB0aGlzIGlzIGFuIFwnaW50ZXJhY3RpdmVcJyBzdHJlYW0uXG4iCisiXG4iCisiUmV0dXJuIEZhbHNlIGlmIGl0IGNhblwndCBiZSBkZXRlcm1pbmVkLiIpOworCisjZGVmaW5lIF9JT19fSU9CQVNFX0lTQVRUWV9NRVRIT0RERUYgICAgXAorICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKV9pb19fSU9CYXNlX2lzYXR0eSwgTUVUSF9OT0FSR1MsIF9pb19fSU9CYXNlX2lzYXR0eV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19JT0Jhc2VfaXNhdHR5X2ltcGwoUHlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19JT0Jhc2VfaXNhdHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fX0lPQmFzZV9pc2F0dHlfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19fSU9CYXNlX3JlYWRsaW5lX19kb2NfXywKKyJyZWFkbGluZSgkc2VsZiwgc2l6ZT0tMSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgYW5kIHJldHVybiBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtLlxuIgorIlxuIgorIklmIHNpemUgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IHNpemUgYnl0ZXMgd2lsbCBiZSByZWFkLlxuIgorIlxuIgorIlRoZSBsaW5lIHRlcm1pbmF0b3IgaXMgYWx3YXlzIGJcJ1xcblwnIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0XG4iCisiZmlsZXMsIHRoZSBuZXdsaW5lcyBhcmd1bWVudCB0byBvcGVuIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZVxuIgorInRlcm1pbmF0b3IocykgcmVjb2duaXplZC4iKTsKKworI2RlZmluZSBfSU9fX0lPQkFTRV9SRUFETElORV9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZGxpbmUiLCAoUHlDRnVuY3Rpb24pX2lvX19JT0Jhc2VfcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgX2lvX19JT0Jhc2VfcmVhZGxpbmVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19fSU9CYXNlX3JlYWRsaW5lX2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbGltaXQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19JT0Jhc2VfcmVhZGxpbmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgbGltaXQgPSAtMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWRsaW5lIiwKKyAgICAgICAgX1B5SU9fQ29udmVydFNzaXplX3QsICZsaW1pdCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fX0lPQmFzZV9yZWFkbGluZV9pbXBsKHNlbGYsIGxpbWl0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX19JT0Jhc2VfcmVhZGxpbmVzX19kb2NfXywKKyJyZWFkbGluZXMoJHNlbGYsIGhpbnQ9LTEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBsaXN0IG9mIGxpbmVzIGZyb20gdGhlIHN0cmVhbS5cbiIKKyJcbiIKKyJoaW50IGNhbiBiZSBzcGVjaWZpZWQgdG8gY29udHJvbCB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQ6IG5vIG1vcmVcbiIKKyJsaW5lcyB3aWxsIGJlIHJlYWQgaWYgdGhlIHRvdGFsIHNpemUgKGluIGJ5dGVzL2NoYXJhY3RlcnMpIG9mIGFsbFxuIgorImxpbmVzIHNvIGZhciBleGNlZWRzIGhpbnQuIik7CisKKyNkZWZpbmUgX0lPX19JT0JBU0VfUkVBRExJTkVTX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkbGluZXMiLCAoUHlDRnVuY3Rpb24pX2lvX19JT0Jhc2VfcmVhZGxpbmVzLCBNRVRIX1ZBUkFSR1MsIF9pb19fSU9CYXNlX3JlYWRsaW5lc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19JT0Jhc2VfcmVhZGxpbmVzX2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaGludCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV9yZWFkbGluZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgaGludCA9IC0xOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZGxpbmVzIiwKKyAgICAgICAgX1B5SU9fQ29udmVydFNzaXplX3QsICZoaW50KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19fSU9CYXNlX3JlYWRsaW5lc19pbXBsKHNlbGYsIGhpbnQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fX0lPQmFzZV93cml0ZWxpbmVzX19kb2NfXywKKyJ3cml0ZWxpbmVzKCRzZWxmLCBsaW5lcywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX19JT0JBU0VfV1JJVEVMSU5FU19NRVRIT0RERUYgICAgXAorICAgIHsid3JpdGVsaW5lcyIsIChQeUNGdW5jdGlvbilfaW9fX0lPQmFzZV93cml0ZWxpbmVzLCBNRVRIX08sIF9pb19fSU9CYXNlX3dyaXRlbGluZXNfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF9pb19fUmF3SU9CYXNlX3JlYWRfX2RvY19fLAorInJlYWQoJHNlbGYsIHNpemU9LTEsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19fUkFXSU9CQVNFX1JFQURfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWQiLCAoUHlDRnVuY3Rpb24pX2lvX19SYXdJT0Jhc2VfcmVhZCwgTUVUSF9WQVJBUkdTLCBfaW9fX1Jhd0lPQmFzZV9yZWFkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX1Jhd0lPQmFzZV9yZWFkX2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3Qgbik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX1Jhd0lPQmFzZV9yZWFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG4gPSAtMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cmVhZCIsCisgICAgICAgICZuKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19fUmF3SU9CYXNlX3JlYWRfaW1wbChzZWxmLCBuKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX19SYXdJT0Jhc2VfcmVhZGFsbF9fZG9jX18sCisicmVhZGFsbCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgdW50aWwgRU9GLCB1c2luZyBtdWx0aXBsZSByZWFkKCkgY2FsbC4iKTsKKworI2RlZmluZSBfSU9fX1JBV0lPQkFTRV9SRUFEQUxMX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkYWxsIiwgKFB5Q0Z1bmN0aW9uKV9pb19fUmF3SU9CYXNlX3JlYWRhbGwsIE1FVEhfTk9BUkdTLCBfaW9fX1Jhd0lPQmFzZV9yZWFkYWxsX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX1Jhd0lPQmFzZV9yZWFkYWxsX2ltcGwoUHlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19SYXdJT0Jhc2VfcmVhZGFsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX19SYXdJT0Jhc2VfcmVhZGFsbF9pbXBsKHNlbGYpOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI4NzQ5NTJmNWNjMjQ4YTQgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vY2xpbmljL3N0cmluZ2lvLmMuaCBiL01vZHVsZXMvX2lvL2NsaW5pYy9zdHJpbmdpby5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlMzJhMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2lvL2NsaW5pYy9zdHJpbmdpby5jLmgKQEAgLTAsMCArMSwyODYgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW9fU3RyaW5nSU9fZ2V0dmFsdWVfX2RvY19fLAorImdldHZhbHVlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0cmlldmUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0LiIpOworCisjZGVmaW5lIF9JT19TVFJJTkdJT19HRVRWQUxVRV9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0dmFsdWUiLCAoUHlDRnVuY3Rpb24pX2lvX1N0cmluZ0lPX2dldHZhbHVlLCBNRVRIX05PQVJHUywgX2lvX1N0cmluZ0lPX2dldHZhbHVlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fU3RyaW5nSU9fZ2V0dmFsdWVfaW1wbChzdHJpbmdpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fU3RyaW5nSU9fZ2V0dmFsdWUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pb19TdHJpbmdJT19nZXR2YWx1ZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX1N0cmluZ0lPX3RlbGxfX2RvY19fLAorInRlbGwoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJUZWxsIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24uIik7CisKKyNkZWZpbmUgX0lPX1NUUklOR0lPX1RFTExfTUVUSE9EREVGICAgIFwKKyAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pX2lvX1N0cmluZ0lPX3RlbGwsIE1FVEhfTk9BUkdTLCBfaW9fU3RyaW5nSU9fdGVsbF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3RlbGxfaW1wbChzdHJpbmdpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fU3RyaW5nSU9fdGVsbChzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX1N0cmluZ0lPX3RlbGxfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19TdHJpbmdJT19yZWFkX19kb2NfXywKKyJyZWFkKCRzZWxmLCBzaXplPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIGF0IG1vc3Qgc2l6ZSBjaGFyYWN0ZXJzLCByZXR1cm5lZCBhcyBhIHN0cmluZy5cbiIKKyJcbiIKKyJJZiB0aGUgYXJndW1lbnQgaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0ZcbiIKKyJpcyByZWFjaGVkLiBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGF0IEVPRi4iKTsKKworI2RlZmluZSBfSU9fU1RSSU5HSU9fUkVBRF9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilfaW9fU3RyaW5nSU9fcmVhZCwgTUVUSF9WQVJBUkdTLCBfaW9fU3RyaW5nSU9fcmVhZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3JlYWRfaW1wbChzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKmFyZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fU3RyaW5nSU9fcmVhZChzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZWFkIiwKKyAgICAgICAgMCwgMSwKKyAgICAgICAgJmFyZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fU3RyaW5nSU9fcmVhZF9pbXBsKHNlbGYsIGFyZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19TdHJpbmdJT19yZWFkbGluZV9fZG9jX18sCisicmVhZGxpbmUoJHNlbGYsIHNpemU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgdW50aWwgbmV3bGluZSBvciBFT0YuXG4iCisiXG4iCisiUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgRU9GIGlzIGhpdCBpbW1lZGlhdGVseS4iKTsKKworI2RlZmluZSBfSU9fU1RSSU5HSU9fUkVBRExJTkVfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWRsaW5lIiwgKFB5Q0Z1bmN0aW9uKV9pb19TdHJpbmdJT19yZWFkbGluZSwgTUVUSF9WQVJBUkdTLCBfaW9fU3RyaW5nSU9fcmVhZGxpbmVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19TdHJpbmdJT19yZWFkbGluZV9pbXBsKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJnKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19TdHJpbmdJT19yZWFkbGluZShzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZWFkbGluZSIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZhcmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX1N0cmluZ0lPX3JlYWRsaW5lX2ltcGwoc2VsZiwgYXJnKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX1N0cmluZ0lPX3RydW5jYXRlX19kb2NfXywKKyJ0cnVuY2F0ZSgkc2VsZiwgcG9zPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJUcnVuY2F0ZSBzaXplIHRvIHBvcy5cbiIKKyJcbiIKKyJUaGUgcG9zIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24sIGFzXG4iCisicmV0dXJuZWQgYnkgdGVsbCgpLiAgVGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBpcyB1bmNoYW5nZWQuXG4iCisiUmV0dXJucyB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLiIpOworCisjZGVmaW5lIF9JT19TVFJJTkdJT19UUlVOQ0FURV9NRVRIT0RERUYgICAgXAorICAgIHsidHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pX2lvX1N0cmluZ0lPX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1MsIF9pb19TdHJpbmdJT190cnVuY2F0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3RydW5jYXRlX2ltcGwoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3RydW5jYXRlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInRydW5jYXRlIiwKKyAgICAgICAgMCwgMSwKKyAgICAgICAgJmFyZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fU3RyaW5nSU9fdHJ1bmNhdGVfaW1wbChzZWxmLCBhcmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fU3RyaW5nSU9fc2Vla19fZG9jX18sCisic2Vlaygkc2VsZiwgcG9zLCB3aGVuY2U9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNoYW5nZSBzdHJlYW0gcG9zaXRpb24uXG4iCisiXG4iCisiU2VlayB0byBjaGFyYWN0ZXIgb2Zmc2V0IHBvcyByZWxhdGl2ZSB0byBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgd2hlbmNlOlxuIgorIiAgICAwICBTdGFydCBvZiBzdHJlYW0gKHRoZSBkZWZhdWx0KS4gIHBvcyBzaG91bGQgYmUgPj0gMDtcbiIKKyIgICAgMSAgQ3VycmVudCBwb3NpdGlvbiAtIHBvcyBtdXN0IGJlIDA7XG4iCisiICAgIDIgIEVuZCBvZiBzdHJlYW0gLSBwb3MgbXVzdCBiZSAwLlxuIgorIlJldHVybnMgdGhlIG5ldyBhYnNvbHV0ZSBwb3NpdGlvbi4iKTsKKworI2RlZmluZSBfSU9fU1RSSU5HSU9fU0VFS19NRVRIT0RERUYgICAgXAorICAgIHsic2VlayIsIChQeUNGdW5jdGlvbilfaW9fU3RyaW5nSU9fc2VlaywgTUVUSF9WQVJBUkdTLCBfaW9fU3RyaW5nSU9fc2Vla19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3NlZWtfaW1wbChzdHJpbmdpbyAqc2VsZiwgUHlfc3NpemVfdCBwb3MsIGludCB3aGVuY2UpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3NlZWsoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zOworICAgIGludCB3aGVuY2UgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJufGk6c2VlayIsCisgICAgICAgICZwb3MsICZ3aGVuY2UpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX1N0cmluZ0lPX3NlZWtfaW1wbChzZWxmLCBwb3MsIHdoZW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19TdHJpbmdJT193cml0ZV9fZG9jX18sCisid3JpdGUoJHNlbGYsIHMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXcml0ZSBzdHJpbmcgdG8gZmlsZS5cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCB3aGljaCBpcyBhbHdheXMgZXF1YWwgdG9cbiIKKyJ0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuIik7CisKKyNkZWZpbmUgX0lPX1NUUklOR0lPX1dSSVRFX01FVEhPRERFRiAgICBcCisgICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbilfaW9fU3RyaW5nSU9fd3JpdGUsIE1FVEhfTywgX2lvX1N0cmluZ0lPX3dyaXRlX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihfaW9fU3RyaW5nSU9fY2xvc2VfX2RvY19fLAorImNsb3NlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2xvc2UgdGhlIElPIG9iamVjdC5cbiIKKyJcbiIKKyJBdHRlbXB0aW5nIGFueSBmdXJ0aGVyIG9wZXJhdGlvbiBhZnRlciB0aGUgb2JqZWN0IGlzIGNsb3NlZFxuIgorIndpbGwgcmFpc2UgYSBWYWx1ZUVycm9yLlxuIgorIlxuIgorIlRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBjbG9zZWQuIik7CisKKyNkZWZpbmUgX0lPX1NUUklOR0lPX0NMT1NFX01FVEhPRERFRiAgICBcCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilfaW9fU3RyaW5nSU9fY2xvc2UsIE1FVEhfTk9BUkdTLCBfaW9fU3RyaW5nSU9fY2xvc2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19TdHJpbmdJT19jbG9zZV9pbXBsKHN0cmluZ2lvICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19TdHJpbmdJT19jbG9zZShzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX1N0cmluZ0lPX2Nsb3NlX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fU3RyaW5nSU9fX19pbml0X19fX2RvY19fLAorIlN0cmluZ0lPKGluaXRpYWxfdmFsdWU9XCdcJywgbmV3bGluZT1cJ1xcblwnKVxuIgorIi0tXG4iCisiXG4iCisiVGV4dCBJL08gaW1wbGVtZW50YXRpb24gdXNpbmcgYW4gaW4tbWVtb3J5IGJ1ZmZlci5cbiIKKyJcbiIKKyJUaGUgaW5pdGlhbF92YWx1ZSBhcmd1bWVudCBzZXRzIHRoZSB2YWx1ZSBvZiBvYmplY3QuICBUaGUgbmV3bGluZVxuIgorImFyZ3VtZW50IGlzIGxpa2UgdGhlIG9uZSBvZiBUZXh0SU9XcmFwcGVyXCdzIGNvbnN0cnVjdG9yLiIpOworCitzdGF0aWMgaW50CitfaW9fU3RyaW5nSU9fX19pbml0X19faW1wbChzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5ld2xpbmVfb2JqKTsKKworc3RhdGljIGludAorX2lvX1N0cmluZ0lPX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJpbml0aWFsX3ZhbHVlIiwgIm5ld2xpbmUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpuZXdsaW5lX29iaiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8T086U3RyaW5nSU8iLCBfa2V5d29yZHMsCisgICAgICAgICZ2YWx1ZSwgJm5ld2xpbmVfb2JqKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19TdHJpbmdJT19fX2luaXRfX19pbXBsKChzdHJpbmdpbyAqKXNlbGYsIHZhbHVlLCBuZXdsaW5lX29iaik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19TdHJpbmdJT19yZWFkYWJsZV9fZG9jX18sCisicmVhZGFibGUoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIElPIG9iamVjdCBjYW4gYmUgcmVhZC4iKTsKKworI2RlZmluZSBfSU9fU1RSSU5HSU9fUkVBREFCTEVfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKV9pb19TdHJpbmdJT19yZWFkYWJsZSwgTUVUSF9OT0FSR1MsIF9pb19TdHJpbmdJT19yZWFkYWJsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3JlYWRhYmxlX2ltcGwoc3RyaW5naW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3JlYWRhYmxlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fU3RyaW5nSU9fcmVhZGFibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19TdHJpbmdJT193cml0YWJsZV9fZG9jX18sCisid3JpdGFibGUoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIElPIG9iamVjdCBjYW4gYmUgd3JpdHRlbi4iKTsKKworI2RlZmluZSBfSU9fU1RSSU5HSU9fV1JJVEFCTEVfTUVUSE9EREVGICAgIFwKKyAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKV9pb19TdHJpbmdJT193cml0YWJsZSwgTUVUSF9OT0FSR1MsIF9pb19TdHJpbmdJT193cml0YWJsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3dyaXRhYmxlX2ltcGwoc3RyaW5naW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1N0cmluZ0lPX3dyaXRhYmxlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fU3RyaW5nSU9fd3JpdGFibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19TdHJpbmdJT19zZWVrYWJsZV9fZG9jX18sCisic2Vla2FibGUoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIElPIG9iamVjdCBjYW4gYmUgc2Vla2VkLiIpOworCisjZGVmaW5lIF9JT19TVFJJTkdJT19TRUVLQUJMRV9NRVRIT0RERUYgICAgXAorICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pX2lvX1N0cmluZ0lPX3NlZWthYmxlLCBNRVRIX05PQVJHUywgX2lvX1N0cmluZ0lPX3NlZWthYmxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fU3RyaW5nSU9fc2Vla2FibGVfaW1wbChzdHJpbmdpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fU3RyaW5nSU9fc2Vla2FibGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pb19TdHJpbmdJT19zZWVrYWJsZV9pbXBsKHNlbGYpOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWYwNjFjZjNhMjBjZDE0ZWQgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vY2xpbmljL3RleHRpby5jLmggYi9Nb2R1bGVzL19pby9jbGluaWMvdGV4dGlvLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzdlOGM3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9faW8vY2xpbmljL3RleHRpby5jLmgKQEAgLTAsMCArMSw0NTYgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW9fSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9fX2luaXRfX19fZG9jX18sCisiSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihkZWNvZGVyLCB0cmFuc2xhdGUsIGVycm9ycz1cJ3N0cmljdFwnKVxuIgorIi0tXG4iCisiXG4iCisiQ29kZWMgdXNlZCB3aGVuIHJlYWRpbmcgYSBmaWxlIGluIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLlxuIgorIlxuIgorIkl0IHdyYXBzIGFub3RoZXIgaW5jcmVtZW50YWwgZGVjb2RlciwgdHJhbnNsYXRpbmcgXFxyXFxuIGFuZCBcXHIgaW50byBcXG4uXG4iCisiSXQgYWxzbyByZWNvcmRzIHRoZSB0eXBlcyBvZiBuZXdsaW5lcyBlbmNvdW50ZXJlZC4gIFdoZW4gdXNlZCB3aXRoXG4iCisidHJhbnNsYXRlPUZhbHNlLCBpdCBlbnN1cmVzIHRoYXQgdGhlIG5ld2xpbmUgc2VxdWVuY2UgaXMgcmV0dXJuZWQgaW5cbiIKKyJvbmUgcGllY2UuIFdoZW4gdXNlZCB3aXRoIGRlY29kZXI9Tm9uZSwgaXQgZXhwZWN0cyB1bmljb2RlIHN0cmluZ3MgYXNcbiIKKyJkZWNvZGUgaW5wdXQgYW5kIHRyYW5zbGF0ZXMgbmV3bGluZXMgd2l0aG91dCBmaXJzdCBpbnZva2luZyBhbiBleHRlcm5hbFxuIgorImRlY29kZXIuIik7CisKK3N0YXRpYyBpbnQKK19pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX19faW5pdF9fX2ltcGwobmxkZWNvZGVyX29iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlY29kZXIsIGludCB0cmFuc2xhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplcnJvcnMpOworCitzdGF0aWMgaW50CitfaW9fSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGVjb2RlciIsICJ0cmFuc2xhdGUiLCAiZXJyb3JzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmRlY29kZXI7CisgICAgaW50IHRyYW5zbGF0ZTsKKyAgICBQeU9iamVjdCAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk9pfE86SW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRlY29kZXIsICZ0cmFuc2xhdGUsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfX19pbml0X19faW1wbCgobmxkZWNvZGVyX29iamVjdCAqKXNlbGYsIGRlY29kZXIsIHRyYW5zbGF0ZSwgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlX19kb2NfXywKKyJkZWNvZGUoJHNlbGYsIC8sIGlucHV0LCBmaW5hbD1GYWxzZSlcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX0lOQ1JFTUVOVEFMTkVXTElORURFQ09ERVJfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9kZWNvZGVfaW1wbChubGRlY29kZXJfb2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmlucHV0LCBpbnQgZmluYWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlKG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiaW5wdXQiLCAiZmluYWwiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqaW5wdXQ7CisgICAgaW50IGZpbmFsID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98aTpkZWNvZGUiLCBfa2V5d29yZHMsCisgICAgICAgICZpbnB1dCwgJmZpbmFsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2RlY29kZV9pbXBsKHNlbGYsIGlucHV0LCBmaW5hbCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2dldHN0YXRlX19kb2NfXywKKyJnZXRzdGF0ZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX0lOQ1JFTUVOVEFMTkVXTElORURFQ09ERVJfR0VUU1RBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldHN0YXRlIiwgKFB5Q0Z1bmN0aW9uKV9pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2dldHN0YXRlLCBNRVRIX05PQVJHUywgX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfZ2V0c3RhdGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2dldHN0YXRlX2ltcGwobmxkZWNvZGVyX29iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9nZXRzdGF0ZShubGRlY29kZXJfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9nZXRzdGF0ZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfc2V0c3RhdGVfX2RvY19fLAorInNldHN0YXRlKCRzZWxmLCBzdGF0ZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX0lOQ1JFTUVOVEFMTkVXTElORURFQ09ERVJfU0VUU1RBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7InNldHN0YXRlIiwgKFB5Q0Z1bmN0aW9uKV9pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX3NldHN0YXRlLCBNRVRIX08sIF9pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX3NldHN0YXRlX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihfaW9fSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9yZXNldF9fZG9jX18sCisicmVzZXQoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19JTkNSRU1FTlRBTE5FV0xJTkVERUNPREVSX1JFU0VUX01FVEhPRERFRiAgICBcCisgICAgeyJyZXNldCIsIChQeUNGdW5jdGlvbilfaW9fSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9yZXNldCwgTUVUSF9OT0FSR1MsIF9pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX3Jlc2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9yZXNldF9pbXBsKG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfcmVzZXQobmxkZWNvZGVyX29iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfcmVzZXRfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX19faW5pdF9fX19kb2NfXywKKyJUZXh0SU9XcmFwcGVyKGJ1ZmZlciwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSxcbiIKKyIgICAgICAgICAgICAgIGxpbmVfYnVmZmVyaW5nPUZhbHNlLCB3cml0ZV90aHJvdWdoPUZhbHNlKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhcmFjdGVyIGFuZCBsaW5lIGJhc2VkIGxheWVyIG92ZXIgYSBCdWZmZXJlZElPQmFzZSBvYmplY3QsIGJ1ZmZlci5cbiIKKyJcbiIKKyJlbmNvZGluZyBnaXZlcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdGhhdCB0aGUgc3RyZWFtIHdpbGwgYmVcbiIKKyJkZWNvZGVkIG9yIGVuY29kZWQgd2l0aC4gSXQgZGVmYXVsdHMgdG8gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKS5cbiIKKyJcbiIKKyJlcnJvcnMgZGV0ZXJtaW5lcyB0aGUgc3RyaWN0bmVzcyBvZiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgKHNlZVxuIgorImhlbHAoY29kZWNzLkNvZGVjKSBvciB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgY29kZWNzLnJlZ2lzdGVyKSBhbmRcbiIKKyJkZWZhdWx0cyB0byBcInN0cmljdFwiLlxuIgorIlxuIgorIm5ld2xpbmUgY29udHJvbHMgaG93IGxpbmUgZW5kaW5ncyBhcmUgaGFuZGxlZC4gSXQgY2FuIGJlIE5vbmUsIFwnXCcsXG4iCisiXCdcXG5cJywgXCdcXHJcJywgYW5kIFwnXFxyXFxuXCcuICBJdCB3b3JrcyBhcyBmb2xsb3dzOlxuIgorIlxuIgorIiogT24gaW5wdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXNcbiIKKyIgIGVuYWJsZWQuIExpbmVzIGluIHRoZSBpbnB1dCBjYW4gZW5kIGluIFwnXFxuXCcsIFwnXFxyXCcsIG9yIFwnXFxyXFxuXCcsIGFuZFxuIgorIiAgdGhlc2UgYXJlIHRyYW5zbGF0ZWQgaW50byBcJ1xcblwnIGJlZm9yZSBiZWluZyByZXR1cm5lZCB0byB0aGVcbiIKKyIgIGNhbGxlci4gSWYgaXQgaXMgXCdcJywgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSBpcyBlbmFibGVkLCBidXQgbGluZVxuIgorIiAgZW5kaW5ncyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuIElmIGl0IGhhcyBhbnkgb2ZcbiIKKyIgIHRoZSBvdGhlciBsZWdhbCB2YWx1ZXMsIGlucHV0IGxpbmVzIGFyZSBvbmx5IHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuXG4iCisiICBzdHJpbmcsIGFuZCB0aGUgbGluZSBlbmRpbmcgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuXG4iCisiXG4iCisiKiBPbiBvdXRwdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgYW55IFwnXFxuXCcgY2hhcmFjdGVycyB3cml0dGVuIGFyZVxuIgorIiAgdHJhbnNsYXRlZCB0byB0aGUgc3lzdGVtIGRlZmF1bHQgbGluZSBzZXBhcmF0b3IsIG9zLmxpbmVzZXAuIElmXG4iCisiICBuZXdsaW5lIGlzIFwnXCcgb3IgXCdcXG5cJywgbm8gdHJhbnNsYXRpb24gdGFrZXMgcGxhY2UuIElmIG5ld2xpbmUgaXMgYW55XG4iCisiICBvZiB0aGUgb3RoZXIgbGVnYWwgdmFsdWVzLCBhbnkgXCdcXG5cJyBjaGFyYWN0ZXJzIHdyaXR0ZW4gYXJlIHRyYW5zbGF0ZWRcbiIKKyIgIHRvIHRoZSBnaXZlbiBzdHJpbmcuXG4iCisiXG4iCisiSWYgbGluZV9idWZmZXJpbmcgaXMgVHJ1ZSwgYSBjYWxsIHRvIGZsdXNoIGlzIGltcGxpZWQgd2hlbiBhIGNhbGwgdG9cbiIKKyJ3cml0ZSBjb250YWlucyBhIG5ld2xpbmUgY2hhcmFjdGVyLiIpOworCitzdGF0aWMgaW50CitfaW9fVGV4dElPV3JhcHBlcl9fX2luaXRfX19pbXBsKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGxpbmVfYnVmZmVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd3JpdGVfdGhyb3VnaCk7CisKK3N0YXRpYyBpbnQKK19pb19UZXh0SU9XcmFwcGVyX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJidWZmZXIiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgIm5ld2xpbmUiLCAibGluZV9idWZmZXJpbmciLCAid3JpdGVfdGhyb3VnaCIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpidWZmZXI7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqbmV3bGluZSA9IE5VTEw7CisgICAgaW50IGxpbmVfYnVmZmVyaW5nID0gMDsKKyAgICBpbnQgd3JpdGVfdGhyb3VnaCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfHp6emlpOlRleHRJT1dyYXBwZXIiLCBfa2V5d29yZHMsCisgICAgICAgICZidWZmZXIsICZlbmNvZGluZywgJmVycm9ycywgJm5ld2xpbmUsICZsaW5lX2J1ZmZlcmluZywgJndyaXRlX3Rocm91Z2gpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX1RleHRJT1dyYXBwZXJfX19pbml0X19faW1wbCgodGV4dGlvICopc2VsZiwgYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZywgd3JpdGVfdGhyb3VnaCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX2RldGFjaF9fZG9jX18sCisiZGV0YWNoKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fVEVYVElPV1JBUFBFUl9ERVRBQ0hfTUVUSE9EREVGICAgIFwKKyAgICB7ImRldGFjaCIsIChQeUNGdW5jdGlvbilfaW9fVGV4dElPV3JhcHBlcl9kZXRhY2gsIE1FVEhfTk9BUkdTLCBfaW9fVGV4dElPV3JhcHBlcl9kZXRhY2hfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX2RldGFjaF9pbXBsKHRleHRpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fVGV4dElPV3JhcHBlcl9kZXRhY2godGV4dGlvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fVGV4dElPV3JhcHBlcl9kZXRhY2hfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX3dyaXRlX19kb2NfXywKKyJ3cml0ZSgkc2VsZiwgdGV4dCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX1RFWFRJT1dSQVBQRVJfV1JJVEVfTUVUSE9EREVGICAgIFwKKyAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKV9pb19UZXh0SU9XcmFwcGVyX3dyaXRlLCBNRVRIX08sIF9pb19UZXh0SU9XcmFwcGVyX3dyaXRlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fVGV4dElPV3JhcHBlcl93cml0ZV9pbXBsKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKnRleHQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1RleHRJT1dyYXBwZXJfd3JpdGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp0ZXh0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJVOndyaXRlIiwgJnRleHQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2lvX1RleHRJT1dyYXBwZXJfd3JpdGVfaW1wbChzZWxmLCB0ZXh0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX1RleHRJT1dyYXBwZXJfcmVhZF9fZG9jX18sCisicmVhZCgkc2VsZiwgc2l6ZT0tMSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX1RFWFRJT1dSQVBQRVJfUkVBRF9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilfaW9fVGV4dElPV3JhcHBlcl9yZWFkLCBNRVRIX1ZBUkFSR1MsIF9pb19UZXh0SU9XcmFwcGVyX3JlYWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3JlYWRfaW1wbCh0ZXh0aW8gKnNlbGYsIFB5X3NzaXplX3Qgbik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fVGV4dElPV3JhcHBlcl9yZWFkKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBuID0gLTE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkIiwKKyAgICAgICAgX1B5SU9fQ29udmVydFNzaXplX3QsICZuKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19UZXh0SU9XcmFwcGVyX3JlYWRfaW1wbChzZWxmLCBuKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2lvX1RleHRJT1dyYXBwZXJfcmVhZGxpbmVfX2RvY19fLAorInJlYWRsaW5lKCRzZWxmLCBzaXplPS0xLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fVEVYVElPV1JBUFBFUl9SRUFETElORV9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZGxpbmUiLCAoUHlDRnVuY3Rpb24pX2lvX1RleHRJT1dyYXBwZXJfcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgX2lvX1RleHRJT1dyYXBwZXJfcmVhZGxpbmVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3JlYWRsaW5lX2ltcGwodGV4dGlvICpzZWxmLCBQeV9zc2l6ZV90IHNpemUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1RleHRJT1dyYXBwZXJfcmVhZGxpbmUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemUgPSAtMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cmVhZGxpbmUiLAorICAgICAgICAmc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fVGV4dElPV3JhcHBlcl9yZWFkbGluZV9pbXBsKHNlbGYsIHNpemUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW9fVGV4dElPV3JhcHBlcl9zZWVrX19kb2NfXywKKyJzZWVrKCRzZWxmLCBjb29raWUsIHdoZW5jZT0wLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fVEVYVElPV1JBUFBFUl9TRUVLX01FVEhPRERFRiAgICBcCisgICAgeyJzZWVrIiwgKFB5Q0Z1bmN0aW9uKV9pb19UZXh0SU9XcmFwcGVyX3NlZWssIE1FVEhfVkFSQVJHUywgX2lvX1RleHRJT1dyYXBwZXJfc2Vla19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1RleHRJT1dyYXBwZXJfc2Vla19pbXBsKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmNvb2tpZU9iaiwgaW50IHdoZW5jZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fVGV4dElPV3JhcHBlcl9zZWVrKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNvb2tpZU9iajsKKyAgICBpbnQgd2hlbmNlID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xpOnNlZWsiLAorICAgICAgICAmY29va2llT2JqLCAmd2hlbmNlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pb19UZXh0SU9XcmFwcGVyX3NlZWtfaW1wbChzZWxmLCBjb29raWVPYmosIHdoZW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX3RlbGxfX2RvY19fLAorInRlbGwoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19URVhUSU9XUkFQUEVSX1RFTExfTUVUSE9EREVGICAgIFwKKyAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pX2lvX1RleHRJT1dyYXBwZXJfdGVsbCwgTUVUSF9OT0FSR1MsIF9pb19UZXh0SU9XcmFwcGVyX3RlbGxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3RlbGxfaW1wbCh0ZXh0aW8gKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1RleHRJT1dyYXBwZXJfdGVsbCh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pb19UZXh0SU9XcmFwcGVyX3RlbGxfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX3RydW5jYXRlX19kb2NfXywKKyJ0cnVuY2F0ZSgkc2VsZiwgcG9zPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9JT19URVhUSU9XUkFQUEVSX1RSVU5DQVRFX01FVEhPRERFRiAgICBcCisgICAgeyJ0cnVuY2F0ZSIsIChQeUNGdW5jdGlvbilfaW9fVGV4dElPV3JhcHBlcl90cnVuY2F0ZSwgTUVUSF9WQVJBUkdTLCBfaW9fVGV4dElPV3JhcHBlcl90cnVuY2F0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1RleHRJT1dyYXBwZXJfdHJ1bmNhdGVfaW1wbCh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICpwb3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX1RleHRJT1dyYXBwZXJfdHJ1bmNhdGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcG9zID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInRydW5jYXRlIiwKKyAgICAgICAgMCwgMSwKKyAgICAgICAgJnBvcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW9fVGV4dElPV3JhcHBlcl90cnVuY2F0ZV9pbXBsKHNlbGYsIHBvcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX2ZpbGVub19fZG9jX18sCisiZmlsZW5vKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fVEVYVElPV1JBUFBFUl9GSUxFTk9fTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbGVubyIsIChQeUNGdW5jdGlvbilfaW9fVGV4dElPV3JhcHBlcl9maWxlbm8sIE1FVEhfTk9BUkdTLCBfaW9fVGV4dElPV3JhcHBlcl9maWxlbm9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX2ZpbGVub19pbXBsKHRleHRpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fVGV4dElPV3JhcHBlcl9maWxlbm8odGV4dGlvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fVGV4dElPV3JhcHBlcl9maWxlbm9faW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX3NlZWthYmxlX19kb2NfXywKKyJzZWVrYWJsZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX1RFWFRJT1dSQVBQRVJfU0VFS0FCTEVfTUVUSE9EREVGICAgIFwKKyAgICB7InNlZWthYmxlIiwgKFB5Q0Z1bmN0aW9uKV9pb19UZXh0SU9XcmFwcGVyX3NlZWthYmxlLCBNRVRIX05PQVJHUywgX2lvX1RleHRJT1dyYXBwZXJfc2Vla2FibGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3NlZWthYmxlX2ltcGwodGV4dGlvICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3NlZWthYmxlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX1RleHRJT1dyYXBwZXJfc2Vla2FibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX3JlYWRhYmxlX19kb2NfXywKKyJyZWFkYWJsZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX1RFWFRJT1dSQVBQRVJfUkVBREFCTEVfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKV9pb19UZXh0SU9XcmFwcGVyX3JlYWRhYmxlLCBNRVRIX05PQVJHUywgX2lvX1RleHRJT1dyYXBwZXJfcmVhZGFibGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3JlYWRhYmxlX2ltcGwodGV4dGlvICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3JlYWRhYmxlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX1RleHRJT1dyYXBwZXJfcmVhZGFibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX3dyaXRhYmxlX19kb2NfXywKKyJ3cml0YWJsZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX1RFWFRJT1dSQVBQRVJfV1JJVEFCTEVfTUVUSE9EREVGICAgIFwKKyAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKV9pb19UZXh0SU9XcmFwcGVyX3dyaXRhYmxlLCBNRVRIX05PQVJHUywgX2lvX1RleHRJT1dyYXBwZXJfd3JpdGFibGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3dyaXRhYmxlX2ltcGwodGV4dGlvICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX3dyaXRhYmxlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX1RleHRJT1dyYXBwZXJfd3JpdGFibGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX2lzYXR0eV9fZG9jX18sCisiaXNhdHR5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfSU9fVEVYVElPV1JBUFBFUl9JU0FUVFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImlzYXR0eSIsIChQeUNGdW5jdGlvbilfaW9fVGV4dElPV3JhcHBlcl9pc2F0dHksIE1FVEhfTk9BUkdTLCBfaW9fVGV4dElPV3JhcHBlcl9pc2F0dHlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX2lzYXR0eV9pbXBsKHRleHRpbyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fVGV4dElPV3JhcHBlcl9pc2F0dHkodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW9fVGV4dElPV3JhcHBlcl9pc2F0dHlfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX2ZsdXNoX19kb2NfXywKKyJmbHVzaCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX1RFWFRJT1dSQVBQRVJfRkxVU0hfTUVUSE9EREVGICAgIFwKKyAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKV9pb19UZXh0SU9XcmFwcGVyX2ZsdXNoLCBNRVRIX05PQVJHUywgX2lvX1RleHRJT1dyYXBwZXJfZmx1c2hfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX2ZsdXNoX2ltcGwodGV4dGlvICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX2ZsdXNoKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX1RleHRJT1dyYXBwZXJfZmx1c2hfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9pb19UZXh0SU9XcmFwcGVyX2Nsb3NlX19kb2NfXywKKyJjbG9zZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0lPX1RFWFRJT1dSQVBQRVJfQ0xPU0VfTUVUSE9EREVGICAgIFwKKyAgICB7ImNsb3NlIiwgKFB5Q0Z1bmN0aW9uKV9pb19UZXh0SU9XcmFwcGVyX2Nsb3NlLCBNRVRIX05PQVJHUywgX2lvX1RleHRJT1dyYXBwZXJfY2xvc2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX2Nsb3NlX2ltcGwodGV4dGlvICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pb19UZXh0SU9XcmFwcGVyX2Nsb3NlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2lvX1RleHRJT1dyYXBwZXJfY2xvc2VfaW1wbChzZWxmKTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02OTA2MDhmODVhYWI4YmE1IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2ZpbGVpby5jIGIvTW9kdWxlcy9faW8vZmlsZWlvLmMKaW5kZXggNzQ1MDhhNy4uOTE5Y2Y1MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vZmlsZWlvLmMKKysrIGIvTW9kdWxlcy9faW8vZmlsZWlvLmMKQEAgLTQzLDYgKzQzLDE5IEBACiAjZGVmaW5lIFNNQUxMQ0hVTksgQlVGU0laCiAjZW5kaWYKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9pbworY2xhc3MgX2lvLkZpbGVJTyAiZmlsZWlvICoiICImUHlGaWxlSU9fVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTFjNzc3MDhiNDFmZGE3MGNdKi8KKworLypbcHl0aG9uIGlucHV0XQorY2xhc3MgaW9fc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGNvbnZlcnRlciA9ICdfUHlJT19Db252ZXJ0U3NpemVfdCcKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWQwYTgxMWQzY2JmZDFiMzNdKi8KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBpbnQgZmQ7CkBAIC01Myw2ICs2Niw3IEBACiAgICAgc2lnbmVkIGludCBzZWVrYWJsZSA6IDI7IC8qIC0xIG1lYW5zIHVua25vd24gKi8KICAgICB1bnNpZ25lZCBpbnQgY2xvc2VmZCA6IDE7CiAgICAgY2hhciBmaW5hbGl6aW5nOworICAgIHVuc2lnbmVkIGludCBibGtzaXplOwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKICAgICBQeU9iamVjdCAqZGljdDsKIH0gZmlsZWlvOwpAQCAtMTA2LDkgKzEyMCwxMSBAQAogICAgICAgICAvKiBmZCBpcyBhY2Nlc3NpYmxlIGFuZCBzb21lb25lIGVsc2UgbWF5IGhhdmUgY2xvc2VkIGl0ICovCiAgICAgICAgIGlmIChfUHlWZXJpZnlfZmQoZmQpKSB7CiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICiAgICAgICAgICAgICBlcnIgPSBjbG9zZShmZCk7CiAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKICAgICAgICAgICAgICAgICBzYXZlX2Vycm5vID0gZXJybm87CisgICAgICAgICAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNhdmVfZXJybm8gPSBlcnJubzsKQEAgLTEyMyw4ICsxMzksMTggQEAKICAgICByZXR1cm4gMDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLkZpbGVJTy5jbG9zZQorCitDbG9zZSB0aGUgZmlsZS4KKworQSBjbG9zZWQgZmlsZSBjYW5ub3QgYmUgdXNlZCBmb3IgZnVydGhlciBJL08gb3BlcmF0aW9ucy4gIGNsb3NlKCkgbWF5IGJlCitjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aG91dCBlcnJvci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19jbG9zZShmaWxlaW8gKnNlbGYpCitfaW9fRmlsZUlPX2Nsb3NlX2ltcGwoZmlsZWlvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTc3MzdhMzE5ZWYzYmFkMGIgaW5wdXQ9ZjM1MjMxNzYwZDU0YTUyMl0qLwogewogICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlPYmplY3QgKmV4YywgKnZhbCwgKnRiOwpAQCAtMTY4LDYgKzE5NCw3IEBACiAgICAgICAgIHNlbGYtPndyaXRhYmxlID0gMDsKICAgICAgICAgc2VsZi0+YXBwZW5kaW5nID0gMDsKICAgICAgICAgc2VsZi0+c2Vla2FibGUgPSAtMTsKKyAgICAgICAgc2VsZi0+Ymxrc2l6ZSA9IDA7CiAgICAgICAgIHNlbGYtPmNsb3NlZmQgPSAxOwogICAgICAgICBzZWxmLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgfQpAQCAtMTc1LDU3ICsyMDIsNDAgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7CiB9CiAKLS8qIE9uIFVuaXgsIG9wZW4gd2lsbCBzdWNjZWVkIGZvciBkaXJlY3Rvcmllcy4KLSAgIEluIFB5dGhvbiwgdGhlcmUgc2hvdWxkIGJlIG5vIGZpbGUgb2JqZWN0cyByZWZlcnJpbmcgdG8KLSAgIGRpcmVjdG9yaWVzLCBzbyB3ZSBuZWVkIGEgY2hlY2suICAqLwotCi1zdGF0aWMgaW50Ci1kaXJjaGVjayhmaWxlaW8qIHNlbGYsIFB5T2JqZWN0ICpuYW1lb2JqKQotewotI2lmIGRlZmluZWQoSEFWRV9GU1RBVCkgJiYgZGVmaW5lZChTX0lTRElSKSAmJiBkZWZpbmVkKEVJU0RJUikKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgaWYgKHNlbGYtPmZkIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGZzdGF0KHNlbGYtPmZkLCAmYnVmKSA9PSAwICYmIFNfSVNESVIoYnVmLnN0X21vZGUpKSB7Ci0gICAgICAgIGVycm5vID0gRUlTRElSOwotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfSU9FcnJvciwgbmFtZW9iaik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotY2hlY2tfZmQoaW50IGZkKQotewotI2lmIGRlZmluZWQoSEFWRV9GU1RBVCkKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpIHx8IChmc3RhdChmZCwgJmJ1ZikgPCAwICYmIGVycm5vID09IEVCQURGKSkgewotICAgICAgICBQeU9iamVjdCAqZXhjOwotICAgICAgICBjaGFyICptc2cgPSBzdHJlcnJvcihFQkFERik7Ci0gICAgICAgIGV4YyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19PU0Vycm9yLCAiKGlzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQkFERiwgbXNnKTsKLSAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIGV4Yyk7Ci0gICAgICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCiAjaWZkZWYgT19DTE9FWEVDCiBleHRlcm4gaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CiAjZW5kaWYKIAorLypbY2xpbmljIGlucHV0XQorX2lvLkZpbGVJTy5fX2luaXRfXworICAgIGZpbGUgYXMgbmFtZW9iajogb2JqZWN0CisgICAgbW9kZTogc3RyID0gInIiCisgICAgY2xvc2VmZDogaW50KGNfZGVmYXVsdD0iMSIpID0gVHJ1ZQorICAgIG9wZW5lcjogb2JqZWN0ID0gTm9uZQorCitPcGVuIGEgZmlsZS4KKworVGhlIG1vZGUgY2FuIGJlICdyJyAoZGVmYXVsdCksICd3JywgJ3gnIG9yICdhJyBmb3IgcmVhZGluZywKK3dyaXRpbmcsIGV4Y2x1c2l2ZSBjcmVhdGlvbiBvciBhcHBlbmRpbmcuICBUaGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQKK2RvZXNuJ3QgZXhpc3Qgd2hlbiBvcGVuZWQgZm9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nOyBpdCB3aWxsIGJlIHRydW5jYXRlZAord2hlbiBvcGVuZWQgZm9yIHdyaXRpbmcuICBBIEZpbGVFeGlzdHNFcnJvciB3aWxsIGJlIHJhaXNlZCBpZiBpdCBhbHJlYWR5CitleGlzdHMgd2hlbiBvcGVuZWQgZm9yIGNyZWF0aW5nLiBPcGVuaW5nIGEgZmlsZSBmb3IgY3JlYXRpbmcgaW1wbGllcword3JpdGluZyBzbyB0aGlzIG1vZGUgYmVoYXZlcyBpbiBhIHNpbWlsYXIgd2F5IHRvICd3Jy5BZGQgYSAnKycgdG8gdGhlIG1vZGUKK3RvIGFsbG93IHNpbXVsdGFuZW91cyByZWFkaW5nIGFuZCB3cml0aW5nLiBBIGN1c3RvbSBvcGVuZXIgY2FuIGJlIHVzZWQgYnkKK3Bhc3NpbmcgYSBjYWxsYWJsZSBhcyAqb3BlbmVyKi4gVGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZQorb2JqZWN0IGlzIHRoZW4gb2J0YWluZWQgYnkgY2FsbGluZyBvcGVuZXIgd2l0aCAoKm5hbWUqLCAqZmxhZ3MqKS4KKypvcGVuZXIqIG11c3QgcmV0dXJuIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIChwYXNzaW5nIG9zLm9wZW4gYXMgKm9wZW5lcioKK3Jlc3VsdHMgaW4gZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHBhc3NpbmcgTm9uZSkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBpbnQKLWZpbGVpb19pbml0KFB5T2JqZWN0ICpvc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX2lvX0ZpbGVJT19fX2luaXRfX19pbXBsKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKm5hbWVvYmosIGNvbnN0IGNoYXIgKm1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsb3NlZmQsIFB5T2JqZWN0ICpvcGVuZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjM0MTNmNjhlNjQ4NGJiZCBpbnB1dD0xOTMxNjRlMjkzZDZjMDk3XSovCiB7Ci0gICAgZmlsZWlvICpzZWxmID0gKGZpbGVpbyAqKSBvc2VsZjsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAibW9kZSIsICJjbG9zZWZkIiwgIm9wZW5lciIsIE5VTEx9OwogICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqc3RyaW5nb2JqID0gTlVMTCwgKm9wZW5lciA9IFB5X05vbmU7Ci0gICAgY2hhciAqbW9kZSA9ICJyIjsKLSAgICBjaGFyICpzOworICAgIFB5T2JqZWN0ICpzdHJpbmdvYmogPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnM7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X1VOSUNPREUgKndpZGVuYW1lID0gTlVMTDsKICNlbmRpZgpAQCAtMjMzLDE1ICsyNDMsMTcgQEAKICAgICBpbnQgcndhID0gMCwgcGx1cyA9IDA7CiAgICAgaW50IGZsYWdzID0gMDsKICAgICBpbnQgZmQgPSAtMTsKLSAgICBpbnQgY2xvc2VmZCA9IDE7CiAgICAgaW50IGZkX2lzX293biA9IDA7CiAjaWZkZWYgT19DTE9FWEVDCiAgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZfUHlfb3Blbl9jbG9leGVjX3dvcmtzOwogI2VsaWYgIWRlZmluZWQoTVNfV0lORE9XUykKICAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKICNlbmRpZgorICAgIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3QgZmRmc3RhdDsKKyAgICBpbnQgZnN0YXRfcmVzdWx0OworICAgIGludCBhc3luY19lcnIgPSAwOwogCi0gICAgYXNzZXJ0KFB5RmlsZUlPX0NoZWNrKG9zZWxmKSk7CisgICAgYXNzZXJ0KFB5RmlsZUlPX0NoZWNrKHNlbGYpKTsKICAgICBpZiAoc2VsZi0+ZmQgPj0gMCkgewogICAgICAgICBpZiAoc2VsZi0+Y2xvc2VmZCkgewogICAgICAgICAgICAgLyogSGF2ZSB0byBjbG9zZSB0aGUgZXhpc3RpbmcgZmlsZSBmaXJzdC4gKi8KQEAgLTI1MiwxMSArMjY0LDYgQEAKICAgICAgICAgICAgIHNlbGYtPmZkID0gLTE7CiAgICAgfQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98c2lPOmZpbGVpbyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbmFtZW9iaiwgJm1vZGUsICZjbG9zZWZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcGVuZXIpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICAgICBpZiAoUHlGbG9hdF9DaGVjayhuYW1lb2JqKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOwpAQCAtMjgwLDcgKzI4Nyw3IEBACiAgICAgICAgIGlmICh3aWRlbmFtZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAod2NzbGVuKHdpZGVuYW1lKSAhPSBsZW5ndGgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJlbWJlZGRlZCBOVUwgY2hhcmFjdGVyIik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtYmVkZGVkIG51bGwgY2hhcmFjdGVyIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTM2Niw4ICszNzMsNiBAQAogI2VuZGlmCiAKICAgICBpZiAoZmQgPj0gMCkgewotICAgICAgICBpZiAoY2hlY2tfZmQoZmQpKQotICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgc2VsZi0+ZmQgPSBmZDsKICAgICAgICAgc2VsZi0+Y2xvc2VmZCA9IGNsb3NlZmQ7CiAgICAgfQpAQCAtMzgxLDE1ICszODYsMjAgQEAKIAogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIGlmIChvcGVuZXIgPT0gUHlfTm9uZSkgewotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgICAgICBpZiAod2lkZW5hbWUgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBzZWxmLT5mZCA9IF93b3Blbih3aWRlbmFtZSwgZmxhZ3MsIDA2NjYpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICh3aWRlbmFtZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBzZWxmLT5mZCA9IF93b3Blbih3aWRlbmFtZSwgZmxhZ3MsIDA2NjYpOworICAgICAgICAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgICAgIHNlbGYtPmZkID0gb3BlbihuYW1lLCBmbGFncywgMDY2Nik7CisgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZkID0gb3BlbihuYW1lLCBmbGFncywgMDY2Nik7CisgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIH0gd2hpbGUgKHNlbGYtPmZkIDwgMCAmJiBlcnJubyA9PSBFSU5UUiAmJgorICAgICAgICAgICAgICAgICAgICAgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOwogCi0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgaWYgKGFzeW5jX2VycikKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHlPYmplY3QgKmZkb2JqOwpAQCAtNDExLDcgKzQyMSwxMyBAQAogCiAgICAgICAgICAgICBzZWxmLT5mZCA9IF9QeUxvbmdfQXNJbnQoZmRvYmopOwogICAgICAgICAgICAgUHlfREVDUkVGKGZkb2JqKTsKLSAgICAgICAgICAgIGlmIChzZWxmLT5mZCA9PSAtMSkgeworICAgICAgICAgICAgaWYgKHNlbGYtPmZkIDwgMCkgeworICAgICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAvKiBUaGUgb3BlbmVyIHJldHVybmVkIGEgbmVnYXRpdmUgYnV0IGRpZG4ndCBzZXQgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLiAgU2VlIGlzc3VlICMyNzA2NiAqLworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuZXIgcmV0dXJuZWQgJWQiLCBzZWxmLT5mZCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQyNyw4ICs0NDMsNDEgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAjZW5kaWYKICAgICB9Ci0gICAgaWYgKGRpcmNoZWNrKHNlbGYsIG5hbWVvYmopIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKworICAgIHNlbGYtPmJsa3NpemUgPSBERUZBVUxUX0JVRkZFUl9TSVpFOworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmc3RhdF9yZXN1bHQgPSBfUHlfZnN0YXRfbm9yYWlzZShzZWxmLT5mZCwgJmZkZnN0YXQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZzdGF0X3Jlc3VsdCA8IDApIHsKKyAgICAgICAgLyogVG9sZXJhdGUgZnN0YXQoKSBlcnJvcnMgb3RoZXIgdGhhbiBFQkFERi4gIFNlZSBJc3N1ZSAjMjU3MTcsIHdoZXJlCisgICAgICAgIGFuIGFub255bW91cyBmaWxlIG9uIGEgVmlydHVhbCBCb3ggc2hhcmVkIGZvbGRlciBmaWxlc3lzdGVtIHdvdWxkCisgICAgICAgIHJhaXNlIEVOT0VOVC4gKi8KKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9JTlZBTElEX0hBTkRMRSkgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorICAgICAgICBpZiAoZXJybm8gPT0gRUJBREYpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyNlbmRpZgorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyNpZiBkZWZpbmVkKFNfSVNESVIpICYmIGRlZmluZWQoRUlTRElSKQorICAgICAgICAvKiBPbiBVbml4LCBvcGVuIHdpbGwgc3VjY2VlZCBmb3IgZGlyZWN0b3JpZXMuCisgICAgICAgICAgIEluIFB5dGhvbiwgdGhlcmUgc2hvdWxkIGJlIG5vIGZpbGUgb2JqZWN0cyByZWZlcnJpbmcgdG8KKyAgICAgICAgICAgZGlyZWN0b3JpZXMsIHNvIHdlIG5lZWQgYSBjaGVjay4gICovCisgICAgICAgIGlmIChTX0lTRElSKGZkZnN0YXQuc3RfbW9kZSkpIHsKKyAgICAgICAgICAgIGVycm5vID0gRUlTRElSOworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX0lPRXJyb3IsIG5hbWVvYmopOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorI2VuZGlmIC8qIGRlZmluZWQoU19JU0RJUikgKi8KKyNpZmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0JMS1NJWkUKKyAgICAgICAgaWYgKGZkZnN0YXQuc3RfYmxrc2l6ZSA+IDEpCisgICAgICAgICAgICBzZWxmLT5ibGtzaXplID0gZmRmc3RhdC5zdF9ibGtzaXplOworI2VuZGlmIC8qIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRSAqLworICAgIH0KIAogI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQogICAgIC8qIGRvbid0IHRyYW5zbGF0ZSBuZXdsaW5lcyAoXHJcbiA8PT4gXG4pICovCkBAIC01MDYsMzIgKzU1NSw2MCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uRmlsZUlPLmZpbGVubworCitSZXR1cm4gdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIChhbiBpbnRlZ2VyKS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19maWxlbm8oZmlsZWlvICpzZWxmKQorX2lvX0ZpbGVJT19maWxlbm9faW1wbChmaWxlaW8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTk2MjZjZTUzOThlY2U5MCBpbnB1dD0wYjliMmRlNjczMzVhZGEzXSovCiB7CiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKSBzZWxmLT5mZCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5GaWxlSU8ucmVhZGFibGUKKworVHJ1ZSBpZiBmaWxlIHdhcyBvcGVuZWQgaW4gYSByZWFkIG1vZGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fcmVhZGFibGUoZmlsZWlvICpzZWxmKQorX2lvX0ZpbGVJT19yZWFkYWJsZV9pbXBsKGZpbGVpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NDA3NDRhNjE1MGZlOWJhIGlucHV0PWEzZmRmZWQ2ZWVhNzIxYzVdKi8KIHsKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpIHNlbGYtPnJlYWRhYmxlKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLkZpbGVJTy53cml0YWJsZQorCitUcnVlIGlmIGZpbGUgd2FzIG9wZW5lZCBpbiBhIHdyaXRlIG1vZGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fd3JpdGFibGUoZmlsZWlvICpzZWxmKQorX2lvX0ZpbGVJT193cml0YWJsZV9pbXBsKGZpbGVpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05NmNlZmM1NDQ2ZTg5OTc3IGlucHV0PWMyMDRhODA4Y2EyZTE3NDhdKi8KIHsKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpIHNlbGYtPndyaXRhYmxlKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLkZpbGVJTy5zZWVrYWJsZQorCitUcnVlIGlmIGZpbGUgc3VwcG9ydHMgcmFuZG9tLWFjY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19zZWVrYWJsZShmaWxlaW8gKnNlbGYpCitfaW9fRmlsZUlPX3NlZWthYmxlX2ltcGwoZmlsZWlvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQ3OTA5Y2EwYTQyZTkyODcgaW5wdXQ9YzhlNTU1NGQyZmQ2M2M3Zl0qLwogewogICAgIGlmIChzZWxmLT5mZCA8IDApCiAgICAgICAgIHJldHVybiBlcnJfY2xvc2VkKCk7CkBAIC01NDgsMTEgKzYyNSwxOSBAQAogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpIHNlbGYtPnNlZWthYmxlKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLkZpbGVJTy5yZWFkaW50bworICAgIGJ1ZmZlcjogUHlfYnVmZmVyKGFjY2VwdD17cndidWZmZXJ9KQorICAgIC8KKworU2FtZSBhcyBSYXdJT0Jhc2UucmVhZGludG8oKS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19yZWFkaW50byhmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX0ZpbGVJT19yZWFkaW50b19pbXBsKGZpbGVpbyAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjAxYTVhMjJjODQxNWNiNCBpbnB1dD00NzIxZDdiNjhiMTU0ZWFmXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgUHlfc3NpemVfdCBuLCBsZW47CisgICAgUHlfc3NpemVfdCBuOwogICAgIGludCBlcnI7CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQpAQCAtNTYwLDQ4ICs2NDUsMjEgQEAKICAgICBpZiAoIXNlbGYtPnJlYWRhYmxlKQogICAgICAgICByZXR1cm4gZXJyX21vZGUoInJlYWRpbmciKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidyoiLCAmcGJ1ZikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKF9QeVZlcmlmeV9mZChzZWxmLT5mZCkpIHsKLSAgICAgICAgbGVuID0gcGJ1Zi5sZW47Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgZXJybm8gPSAwOwotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCi0gICAgICAgICAgICBsZW4gPSBJTlRfTUFYOwotICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKLSNlbHNlCi0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgbGVuKTsKLSNlbmRpZgotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIH0gZWxzZQotICAgICAgICBuID0gLTE7CisgICAgbiA9IF9QeV9yZWFkKHNlbGYtPmZkLCBidWZmZXItPmJ1ZiwgYnVmZmVyLT5sZW4pOworICAgIC8qIGNvcHkgZXJybm8gYmVjYXVzZSBQeUJ1ZmZlcl9SZWxlYXNlKCkgY2FuIGluZGlyZWN0bHkgbW9kaWZ5IGl0ICovCiAgICAgZXJyID0gZXJybm87Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgIGlmIChlcnIgPT0gRUFHQUlOKQorCisgICAgaWYgKG4gPT0gLTEpIHsKKyAgICAgICAgaWYgKGVyciA9PSBFQUdBSU4pIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKLSAgICAgICAgZXJybm8gPSBlcnI7Ci0gICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOwogfQogCi0jaWZuZGVmIEhBVkVfRlNUQVQKLQotc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKLXsKLSAgICBfUHlfSURFTlRJRklFUihyZWFkYWxsKTsKLSAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKSZQeVJhd0lPQmFzZV9UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3JlYWRhbGwsICJPIiwgc2VsZik7Ci19Ci0KLSNlbHNlCi0KIHN0YXRpYyBzaXplX3QKIG5ld19idWZmZXJzaXplKGZpbGVpbyAqc2VsZiwgc2l6ZV90IGN1cnJlbnRzaXplKQogewpAQCAtNjIxLDEwICs2NzksMjAgQEAKICAgICByZXR1cm4gYWRkZW5kICsgY3VycmVudHNpemU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5GaWxlSU8ucmVhZGFsbAorCitSZWFkIGFsbCBkYXRhIGZyb20gdGhlIGZpbGUsIHJldHVybmVkIGFzIGJ5dGVzLgorCitJbiBub24tYmxvY2tpbmcgbW9kZSwgcmV0dXJucyBhcyBtdWNoIGFzIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwKK29yIE5vbmUgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUuICBSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKK19pb19GaWxlSU9fcmVhZGFsbF9pbXBsKGZpbGVpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mYWEwMjkyYjIxM2I0MDIyIGlucHV0PWRiZGMxMzdmNTU2MDI4MzRdKi8KIHsKLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0IHN0YXR1czsKICAgICBQeV9vZmZfdCBwb3MsIGVuZDsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIFB5X3NzaXplX3QgYnl0ZXNfcmVhZCA9IDA7CkBAIC02MzYsMTMgKzcwNCwxNiBAQAogICAgIGlmICghX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKIAorICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgcG9zID0gX2xzZWVraTY0KHNlbGYtPmZkLCAwTCwgU0VFS19DVVIpOwogI2Vsc2UKICAgICBwb3MgPSBsc2VlayhzZWxmLT5mZCwgMEwsIFNFRUtfQ1VSKTsKICNlbmRpZgotICAgIGlmIChmc3RhdChzZWxmLT5mZCwgJnN0KSA9PSAwKQotICAgICAgICBlbmQgPSBzdC5zdF9zaXplOworICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICisKKyAgICBpZiAoX1B5X2ZzdGF0X25vcmFpc2Uoc2VsZi0+ZmQsICZzdGF0dXMpID09IDApCisgICAgICAgIGVuZCA9IHN0YXR1cy5zdF9zaXplOwogICAgIGVsc2UKICAgICAgICAgZW5kID0gKFB5X29mZl90KS0xOwogCkBAIC02NzYsMzUgKzc0NywyMiBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbiA9IGJ1ZnNpemUgLSBieXRlc19yZWFkOwotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgaWYgKG4gPiBJTlRfTUFYKQotICAgICAgICAgICAgbiA9IElOVF9NQVg7Ci0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgYnl0ZXNfcmVhZCwgKGludCluKTsKLSNlbHNlCi0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgYnl0ZXNfcmVhZCwgbik7Ci0jZW5kaWYKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBuID0gX1B5X3JlYWQoc2VsZi0+ZmQsCisgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgYnl0ZXNfcmVhZCwKKyAgICAgICAgICAgICAgICAgICAgIGJ1ZnNpemUgLSBieXRlc19yZWFkKTsKKwogICAgICAgICBpZiAobiA9PSAwKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICBpZiAoYnl0ZXNfcmVhZCA+IDApCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBieXRlc19yZWFkICs9IG47CkBAIC03MTgsMTQgKzc3NiwyNCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNlbmRpZiAvKiBIQVZFX0ZTVEFUICovCisvKltjbGluaWMgaW5wdXRdCitfaW8uRmlsZUlPLnJlYWQKKyAgICBzaXplOiBpb19zc2l6ZV90ID0gLTEKKyAgICAvCisKK1JlYWQgYXQgbW9zdCBzaXplIGJ5dGVzLCByZXR1cm5lZCBhcyBieXRlcy4KKworT25seSBtYWtlcyBvbmUgc3lzdGVtIGNhbGwsIHNvIGxlc3MgZGF0YSBtYXkgYmUgcmV0dXJuZWQgdGhhbiByZXF1ZXN0ZWQuCitJbiBub24tYmxvY2tpbmcgbW9kZSwgcmV0dXJucyBOb25lIGlmIG5vIGRhdGEgaXMgYXZhaWxhYmxlLgorUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fcmVhZChmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX0ZpbGVJT19yZWFkX2ltcGwoZmlsZWlvICpzZWxmLCBQeV9zc2l6ZV90IHNpemUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDI1MjhkMzlkZDBjYTY0MSBpbnB1dD01YzZjYWE1NDkwYzEzYTliXSovCiB7CiAgICAgY2hhciAqcHRyOwogICAgIFB5X3NzaXplX3QgbjsKLSAgICBQeV9zc2l6ZV90IHNpemUgPSAtMTsKICAgICBQeU9iamVjdCAqYnl0ZXM7CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQpAQCAtNzMzLDQxICs4MDEsMjkgQEAKICAgICBpZiAoIXNlbGYtPnJlYWRhYmxlKQogICAgICAgICByZXR1cm4gZXJyX21vZGUoInJlYWRpbmciKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmc2l6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgIHJldHVybiBmaWxlaW9fcmVhZGFsbChzZWxmKTsKLSAgICB9CisgICAgaWYgKHNpemUgPCAwKQorICAgICAgICByZXR1cm4gX2lvX0ZpbGVJT19yZWFkYWxsX2ltcGwoc2VsZik7CiAKICNpZmRlZiBNU19XSU5ET1dTCisgICAgLyogT24gV2luZG93cywgdGhlIGNvdW50IHBhcmFtZXRlciBvZiByZWFkKCkgaXMgYW4gaW50ICovCiAgICAgaWYgKHNpemUgPiBJTlRfTUFYKQogICAgICAgICBzaXplID0gSU5UX01BWDsKICNlbmRpZgorCiAgICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpOwogICAgIGlmIChieXRlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwdHIgPSBQeUJ5dGVzX0FTX1NUUklORyhieXRlcyk7CiAKLSAgICBpZiAoX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkgewotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGVycm5vID0gMDsKLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwdHIsIChpbnQpc2l6ZSk7Ci0jZWxzZQotICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcHRyLCBzaXplKTsKLSNlbmRpZgotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIH0gZWxzZQotICAgICAgICBuID0gLTE7Ci0KLSAgICBpZiAobiA8IDApIHsKKyAgICBuID0gX1B5X3JlYWQoc2VsZi0+ZmQsIHB0ciwgc2l6ZSk7CisgICAgaWYgKG4gPT0gLTEpIHsKKyAgICAgICAgLyogY29weSBlcnJubyBiZWNhdXNlIFB5X0RFQ1JFRigpIGNhbiBpbmRpcmVjdGx5IG1vZGlmeSBpdCAqLwogICAgICAgICBpbnQgZXJyID0gZXJybm87CiAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7Ci0gICAgICAgIGlmIChlcnIgPT0gRUFHQUlOKQorICAgICAgICBpZiAoZXJyID09IEVBR0FJTikgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwotICAgICAgICBlcnJubyA9IGVycjsKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNzgxLDExICs4MzcsMjMgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIGJ5dGVzOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uRmlsZUlPLndyaXRlCisgICAgYjogUHlfYnVmZmVyCisgICAgLworCitXcml0ZSBidWZmZXIgYiB0byBmaWxlLCByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisKK09ubHkgbWFrZXMgb25lIHN5c3RlbSBjYWxsLCBzbyBub3QgYWxsIG9mIHRoZSBkYXRhIG1heSBiZSB3cml0dGVuLgorVGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIGlzIHJldHVybmVkLiAgSW4gbm9uLWJsb2NraW5nIG1vZGUsCityZXR1cm5zIE5vbmUgaWYgdGhlIHdyaXRlIHdvdWxkIGJsb2NrLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3dyaXRlKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fRmlsZUlPX3dyaXRlX2ltcGwoZmlsZWlvICpzZWxmLCBQeV9idWZmZXIgKmIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjQwNTlkYjNkMzYzYTJmNyBpbnB1dD02ZTc5MDhiMzZmMGNlNzRmXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgUHlfc3NpemVfdCBuLCBsZW47CisgICAgUHlfc3NpemVfdCBuOwogICAgIGludCBlcnI7CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQpAQCAtNzkzLDM5ICs4NjEsMTUgQEAKICAgICBpZiAoIXNlbGYtPndyaXRhYmxlKQogICAgICAgICByZXR1cm4gZXJyX21vZGUoIndyaXRpbmciKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSoiLCAmcGJ1ZikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKF9QeVZlcmlmeV9mZChzZWxmLT5mZCkpIHsKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGxlbiA9IHBidWYubGVuOwotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgaWYgKGxlbiA+IDMyNzY3ICYmIGlzYXR0eShzZWxmLT5mZCkpIHsKLSAgICAgICAgICAgIC8qIElzc3VlICMxMTM5NTogdGhlIFdpbmRvd3MgY29uc29sZSByZXR1cm5zIGFuIGVycm9yICgxMjogbm90Ci0gICAgICAgICAgICAgICBlbm91Z2ggc3BhY2UgZXJyb3IpIG9uIHdyaXRpbmcgaW50byBzdGRvdXQgaWYgc3Rkb3V0IG1vZGUgaXMKLSAgICAgICAgICAgICAgIGJpbmFyeSBhbmQgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNjYsMDAwIGJ5dGVzIChvciBsZXNzLAotICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIGhlYXAgdXNhZ2UpLiAqLwotICAgICAgICAgICAgbGVuID0gMzI3Njc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobGVuID4gSU5UX01BWCkKLSAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7Ci0gICAgICAgIG4gPSB3cml0ZShzZWxmLT5mZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKLSNlbHNlCi0gICAgICAgIG4gPSB3cml0ZShzZWxmLT5mZCwgcGJ1Zi5idWYsIGxlbik7Ci0jZW5kaWYKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICB9IGVsc2UKLSAgICAgICAgbiA9IC0xOworICAgIG4gPSBfUHlfd3JpdGUoc2VsZi0+ZmQsIGItPmJ1ZiwgYi0+bGVuKTsKKyAgICAvKiBjb3B5IGVycm5vIGJlY2F1c2UgUHlCdWZmZXJfUmVsZWFzZSgpIGNhbiBpbmRpcmVjdGx5IG1vZGlmeSBpdCAqLwogICAgIGVyciA9IGVycm5vOwogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0KICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgaWYgKGVyciA9PSBFQUdBSU4pCisgICAgICAgIGlmIChlcnIgPT0gRUFHQUlOKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7Ci0gICAgICAgIGVycm5vID0gZXJyOwotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC04NzMsMTEgKzkxNywxMyBAQAogCiAgICAgaWYgKF9QeVZlcmlmeV9mZChmZCkpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgd2hlbmNlKTsKICNlbHNlCiAgICAgICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIHdoZW5jZSk7CiAjZW5kaWYKKyAgICAgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9IGVsc2UKICAgICAgICAgcmVzID0gLTE7CkBAIC04OTEsMjMgKzkzNyw0NCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fc2VlayhmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpwb3NvYmo7Ci0gICAgaW50IHdoZW5jZSA9IDA7CisvKltjbGluaWMgaW5wdXRdCitfaW8uRmlsZUlPLnNlZWsKKyAgICBwb3M6IG9iamVjdAorICAgIHdoZW5jZTogaW50ID0gMAorICAgIC8KIAorTW92ZSB0byBuZXcgZmlsZSBwb3NpdGlvbiBhbmQgcmV0dXJuIHRoZSBmaWxlIHBvc2l0aW9uLgorCitBcmd1bWVudCBvZmZzZXQgaXMgYSBieXRlIGNvdW50LiAgT3B0aW9uYWwgYXJndW1lbnQgd2hlbmNlIGRlZmF1bHRzIHRvCitTRUVLX1NFVCBvciAwIChvZmZzZXQgZnJvbSBzdGFydCBvZiBmaWxlLCBvZmZzZXQgc2hvdWxkIGJlID49IDApOyBvdGhlciB2YWx1ZXMKK2FyZSBTRUVLX0NVUiBvciAxIChtb3ZlIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24sIHBvc2l0aXZlIG9yIG5lZ2F0aXZlKSwKK2FuZCBTRUVLX0VORCBvciAyIChtb3ZlIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlLCB1c3VhbGx5IG5lZ2F0aXZlLCBhbHRob3VnaAorbWFueSBwbGF0Zm9ybXMgYWxsb3cgc2Vla2luZyBiZXlvbmQgdGhlIGVuZCBvZiBhIGZpbGUpLgorCitOb3RlIHRoYXQgbm90IGFsbCBmaWxlIG9iamVjdHMgYXJlIHNlZWthYmxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX2lvX0ZpbGVJT19zZWVrX2ltcGwoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqcG9zLCBpbnQgd2hlbmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWM5NzZhY2RmMDU0ZTY2NTUgaW5wdXQ9MDQzOTE5NGIwNzc0ZDQ1NF0qLworewogICAgIGlmIChzZWxmLT5mZCA8IDApCiAgICAgICAgIHJldHVybiBlcnJfY2xvc2VkKCk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aSIsICZwb3NvYmosICZ3aGVuY2UpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBwb3J0YWJsZV9sc2VlayhzZWxmLT5mZCwgcG9zb2JqLCB3aGVuY2UpOworICAgIHJldHVybiBwb3J0YWJsZV9sc2VlayhzZWxmLT5mZCwgcG9zLCB3aGVuY2UpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uRmlsZUlPLnRlbGwKKworQ3VycmVudCBmaWxlIHBvc2l0aW9uLgorCitDYW4gcmFpc2UgT1NFcnJvciBmb3Igbm9uIHNlZWthYmxlIGZpbGVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotZmlsZWlvX3RlbGwoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19GaWxlSU9fdGVsbF9pbXBsKGZpbGVpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZmUyMTQ3MDU4ODA5ZDBiIGlucHV0PTgwN2UyNGVhZDRjZWMyZjldKi8KIHsKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwpAQCAtOTE2LDEzICs5ODMsMjIgQEAKIH0KIAogI2lmZGVmIEhBVkVfRlRSVU5DQVRFCisvKltjbGluaWMgaW5wdXRdCitfaW8uRmlsZUlPLnRydW5jYXRlCisgICAgc2l6ZSBhcyBwb3NvYmo6IG9iamVjdCA9IE5VTEwKKyAgICAvCisKK1RydW5jYXRlIHRoZSBmaWxlIHRvIGF0IG1vc3Qgc2l6ZSBieXRlcyBhbmQgcmV0dXJuIHRoZSB0cnVuY2F0ZWQgc2l6ZS4KKworU2l6ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLCBhcyByZXR1cm5lZCBieSB0ZWxsKCkuCitUaGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGlzIGNoYW5nZWQgdG8gdGhlIHZhbHVlIG9mIHNpemUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9fdHJ1bmNhdGUoZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19GaWxlSU9fdHJ1bmNhdGVfaW1wbChmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICpwb3NvYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTQ5Y2E3YTkxNmMxNzZmYSBpbnB1dD05MDI2YWY0NDY4NmI3MzE4XSovCiB7Ci0gICAgUHlPYmplY3QgKnBvc29iaiA9IE5VTEw7IC8qIHRoZSBuZXcgc2l6ZSB3YW50ZWQgYnkgdGhlIHVzZXIgKi8KLSNpZm5kZWYgTVNfV0lORE9XUwogICAgIFB5X29mZl90IHBvczsKLSNlbmRpZgogICAgIGludCByZXQ7CiAgICAgaW50IGZkOwogCkBAIC05MzIsOSArMTAwOCw2IEBACiAgICAgaWYgKCFzZWxmLT53cml0YWJsZSkKICAgICAgICAgcmV0dXJuIGVycl9tb2RlKCJ3cml0aW5nIik7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPIiwgJnBvc29iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgaWYgKHBvc29iaiA9PSBQeV9Ob25lIHx8IHBvc29iaiA9PSBOVUxMKSB7CiAgICAgICAgIC8qIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbi4gKi8KICAgICAgICAgcG9zb2JqID0gcG9ydGFibGVfbHNlZWsoZmQsIE5VTEwsIDEpOwpAQCAtOTQ1LDUyICsxMDE4LDYgQEAKICAgICAgICAgUHlfSU5DUkVGKHBvc29iaik7CiAgICAgfQogCi0jaWZkZWYgTVNfV0lORE9XUwotICAgIC8qIE1TIF9jaHNpemUgZG9lc24ndCB3b3JrIGlmIG5ld3NpemUgZG9lc24ndCBmaXQgaW4gMzIgYml0cywKLSAgICAgICBzbyBkb24ndCBldmVuIHRyeSB1c2luZyBpdC4gKi8KLSAgICB7Ci0gICAgICAgIFB5T2JqZWN0ICpvbGRwb3NvYmosICp0ZW1wcG9zb2JqOwotICAgICAgICBIQU5ETEUgaEZpbGU7Ci0KLSAgICAgICAgLyogd2Ugc2F2ZSB0aGUgZmlsZSBwb2ludGVyIHBvc2l0aW9uICovCi0gICAgICAgIG9sZHBvc29iaiA9IHBvcnRhYmxlX2xzZWVrKGZkLCBOVUxMLCAxKTsKLSAgICAgICAgaWYgKG9sZHBvc29iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocG9zb2JqKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogd2UgdGhlbiBtb3ZlIHRvIHRoZSB0cnVuY2F0aW9uIHBvc2l0aW9uICovCi0gICAgICAgIHRlbXBwb3NvYmogPSBwb3J0YWJsZV9sc2VlayhmZCwgcG9zb2JqLCAwKTsKLSAgICAgICAgaWYgKHRlbXBwb3NvYmogPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKG9sZHBvc29iaik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocG9zb2JqKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRih0ZW1wcG9zb2JqKTsKLQotICAgICAgICAvKiBUcnVuY2F0ZS4gIE5vdGUgdGhhdCB0aGlzIG1heSBncm93IHRoZSBmaWxlISAqLwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgaEZpbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKLSAgICAgICAgcmV0ID0gaEZpbGUgPT0gKEhBTkRMRSktMTsgLyogdGVzdGluZyBmb3IgSU5WQUxJRF9IQU5ETEUgdmFsdWUgKi8KLSAgICAgICAgaWYgKHJldCA9PSAwKSB7Ci0gICAgICAgICAgICByZXQgPSBTZXRFbmRPZkZpbGUoaEZpbGUpID09IDA7Ci0gICAgICAgICAgICBpZiAocmV0KQotICAgICAgICAgICAgICAgIGVycm5vID0gRUFDQ0VTOwotICAgICAgICB9Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICAgICAgLyogd2UgcmVzdG9yZSB0aGUgZmlsZSBwb2ludGVyIHBvc2l0aW9uIGluIGFueSBjYXNlICovCi0gICAgICAgIHRlbXBwb3NvYmogPSBwb3J0YWJsZV9sc2VlayhmZCwgb2xkcG9zb2JqLCAwKTsKLSAgICAgICAgUHlfREVDUkVGKG9sZHBvc29iaik7Ci0gICAgICAgIGlmICh0ZW1wcG9zb2JqID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihwb3NvYmopOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHRlbXBwb3NvYmopOwotICAgIH0KLSNlbHNlCi0KICNpZiBkZWZpbmVkKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQpCiAgICAgcG9zID0gUHlMb25nX0FzTG9uZ0xvbmcocG9zb2JqKTsKICNlbHNlCkBAIC0xMDAyLDEyICsxMDI5LDE2IEBACiAgICAgfQogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICAgICBlcnJubyA9IDA7CisjaWZkZWYgTVNfV0lORE9XUworICAgIHJldCA9IF9jaHNpemVfcyhmZCwgcG9zKTsKKyNlbHNlCiAgICAgcmV0ID0gZnRydW5jYXRlKGZkLCBwb3MpOworI2VuZGlmCisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0jZW5kaWYgLyogIU1TX1dJTkRPV1MgKi8KLQogICAgIGlmIChyZXQgIT0gMCkgewogICAgICAgICBQeV9ERUNSRUYocG9zb2JqKTsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwpAQCAtMTA1NywyNiArMTA4OCw0MCBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8X2lvLkZpbGVJTyBmZD0lZCBtb2RlPSclcyc+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZmQsIG1vZGVfc3RyaW5nKHNlbGYpKTsKKyAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPF9pby5GaWxlSU8gZmQ9JWQgbW9kZT0nJXMnIGNsb3NlZmQ9JXM+IiwKKyAgICAgICAgICAgIHNlbGYtPmZkLCBtb2RlX3N0cmluZyhzZWxmKSwgc2VsZi0+Y2xvc2VmZCA/ICJUcnVlIiA6ICJGYWxzZSIpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxfaW8uRmlsZUlPIG5hbWU9JVIgbW9kZT0nJXMnPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVvYmosIG1vZGVfc3RyaW5nKHNlbGYpKTsKKyAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPF9pby5GaWxlSU8gbmFtZT0lUiBtb2RlPSclcycgY2xvc2VmZD0lcz4iLAorICAgICAgICAgICAgbmFtZW9iaiwgbW9kZV9zdHJpbmcoc2VsZiksIHNlbGYtPmNsb3NlZmQgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKICAgICAgICAgUHlfREVDUkVGKG5hbWVvYmopOwogICAgIH0KICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uRmlsZUlPLmlzYXR0eQorCitUcnVlIGlmIHRoZSBmaWxlIGlzIGNvbm5lY3RlZCB0byBhIFRUWSBkZXZpY2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1maWxlaW9faXNhdHR5KGZpbGVpbyAqc2VsZikKK19pb19GaWxlSU9faXNhdHR5X2ltcGwoZmlsZWlvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTkzMmMzOTkyNGU5YTgwNzAgaW5wdXQ9Y2Q5NGNhMWY1ZTk1ZTg0M10qLwogewogICAgIGxvbmcgcmVzOwogCiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gaXNhdHR5KHNlbGYtPmZkKTsKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICisgICAgaWYgKF9QeVZlcmlmeV9mZChzZWxmLT5mZCkpCisgICAgICAgIHJlcyA9IGlzYXR0eShzZWxmLT5mZCk7CisgICAgZWxzZQorICAgICAgICByZXMgPSAwOworICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlcyk7CiB9CkBAIC0xMDg5LDExMCArMTEzNCwyMiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0KLVB5RG9jX1NUUlZBUihmaWxlaW9fZG9jLAotImZpbGUobmFtZTogc3RyWywgbW9kZTogc3RyXVssIG9wZW5lcjogTm9uZV0pIC0+IGZpbGUgSU8gb2JqZWN0XG4iCi0iXG4iCi0iT3BlbiBhIGZpbGUuICBUaGUgbW9kZSBjYW4gYmUgJ3InIChkZWZhdWx0KSwgJ3cnLCAneCcgb3IgJ2EnIGZvciByZWFkaW5nLFxuIgotIndyaXRpbmcsIGV4Y2x1c2l2ZSBjcmVhdGlvbiBvciBhcHBlbmRpbmcuICBUaGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgaWYgaXRcbiIKLSJkb2Vzbid0IGV4aXN0IHdoZW4gb3BlbmVkIGZvciB3cml0aW5nIG9yIGFwcGVuZGluZzsgaXQgd2lsbCBiZSB0cnVuY2F0ZWRcbiIKLSJ3aGVuIG9wZW5lZCBmb3Igd3JpdGluZy4gIEEgRmlsZUV4aXN0c0Vycm9yIHdpbGwgYmUgcmFpc2VkIGlmIGl0IGFscmVhZHlcbiIKLSJleGlzdHMgd2hlbiBvcGVuZWQgZm9yIGNyZWF0aW5nLiBPcGVuaW5nIGEgZmlsZSBmb3IgY3JlYXRpbmcgaW1wbGllc1xuIgotIndyaXRpbmcgc28gdGhpcyBtb2RlIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byAndycuQWRkIGEgJysnIHRvIHRoZSBtb2RlXG4iCi0idG8gYWxsb3cgc2ltdWx0YW5lb3VzIHJlYWRpbmcgYW5kIHdyaXRpbmcuIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieVxuIgotInBhc3NpbmcgYSBjYWxsYWJsZSBhcyAqb3BlbmVyKi4gVGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZVxuIgotIm9iamVjdCBpcyB0aGVuIG9idGFpbmVkIGJ5IGNhbGxpbmcgb3BlbmVyIHdpdGggKCpuYW1lKiwgKmZsYWdzKikuXG4iCi0iKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgKHBhc3Npbmcgb3Mub3BlbiBhcyAqb3BlbmVyKlxuIgotInJlc3VsdHMgaW4gZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHBhc3NpbmcgTm9uZSkuIik7Ci0KLVB5RG9jX1NUUlZBUihyZWFkX2RvYywKLSJyZWFkKHNpemU6IGludCkgLT4gYnl0ZXMuICByZWFkIGF0IG1vc3Qgc2l6ZSBieXRlcywgcmV0dXJuZWQgYXMgYnl0ZXMuXG4iCi0iXG4iCi0iT25seSBtYWtlcyBvbmUgc3lzdGVtIGNhbGwsIHNvIGxlc3MgZGF0YSBtYXkgYmUgcmV0dXJuZWQgdGhhbiByZXF1ZXN0ZWRcbiIKLSJJbiBub24tYmxvY2tpbmcgbW9kZSwgcmV0dXJucyBOb25lIGlmIG5vIGRhdGEgaXMgYXZhaWxhYmxlLlxuIgotIlJldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLiIpOwotCi1QeURvY19TVFJWQVIocmVhZGFsbF9kb2MsCi0icmVhZGFsbCgpIC0+IGJ5dGVzLiAgcmVhZCBhbGwgZGF0YSBmcm9tIHRoZSBmaWxlLCByZXR1cm5lZCBhcyBieXRlcy5cbiIKLSJcbiIKLSJJbiBub24tYmxvY2tpbmcgbW9kZSwgcmV0dXJucyBhcyBtdWNoIGFzIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSxcbiIKLSJvciBOb25lIGlmIG5vIGRhdGEgaXMgYXZhaWxhYmxlLiAgUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuIik7Ci0KLVB5RG9jX1NUUlZBUih3cml0ZV9kb2MsCi0id3JpdGUoYjogYnl0ZXMpIC0+IGludC4gIFdyaXRlIGJ5dGVzIGIgdG8gZmlsZSwgcmV0dXJuIG51bWJlciB3cml0dGVuLlxuIgotIlxuIgotIk9ubHkgbWFrZXMgb25lIHN5c3RlbSBjYWxsLCBzbyBub3QgYWxsIG9mIHRoZSBkYXRhIG1heSBiZSB3cml0dGVuLlxuIgotIlRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiBpcyByZXR1cm5lZC4gIEluIG5vbi1ibG9ja2luZyBtb2RlLFxuIgotInJldHVybnMgTm9uZSBpZiB0aGUgd3JpdGUgd291bGQgYmxvY2suIgotKTsKLQotUHlEb2NfU1RSVkFSKGZpbGVub19kb2MsCi0iZmlsZW5vKCkgLT4gaW50LiAgUmV0dXJuIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciAoYW4gaW50ZWdlcikuIik7Ci0KLVB5RG9jX1NUUlZBUihzZWVrX2RvYywKLSJzZWVrKG9mZnNldDogaW50Wywgd2hlbmNlOiBpbnRdKSAtPiBpbnQuICBNb3ZlIHRvIG5ldyBmaWxlIHBvc2l0aW9uIGFuZFxuIgotInJldHVybiB0aGUgZmlsZSBwb3NpdGlvbi5cbiIKLSJcbiIKLSJBcmd1bWVudCBvZmZzZXQgaXMgYSBieXRlIGNvdW50LiAgT3B0aW9uYWwgYXJndW1lbnQgd2hlbmNlIGRlZmF1bHRzIHRvXG4iCi0iU0VFS19TRVQgb3IgMCAob2Zmc2V0IGZyb20gc3RhcnQgb2YgZmlsZSwgb2Zmc2V0IHNob3VsZCBiZSA+PSAwKTsgb3RoZXIgdmFsdWVzXG4iCi0iYXJlIFNFRUtfQ1VSIG9yIDEgKG1vdmUgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiwgcG9zaXRpdmUgb3IgbmVnYXRpdmUpLFxuIgotImFuZCBTRUVLX0VORCBvciAyIChtb3ZlIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlLCB1c3VhbGx5IG5lZ2F0aXZlLCBhbHRob3VnaFxuIgotIm1hbnkgcGxhdGZvcm1zIGFsbG93IHNlZWtpbmcgYmV5b25kIHRoZSBlbmQgb2YgYSBmaWxlKS5cbiIKLSJcbiIKLSJOb3RlIHRoYXQgbm90IGFsbCBmaWxlIG9iamVjdHMgYXJlIHNlZWthYmxlLiIpOwotCi0jaWZkZWYgSEFWRV9GVFJVTkNBVEUKLVB5RG9jX1NUUlZBUih0cnVuY2F0ZV9kb2MsCi0idHJ1bmNhdGUoW3NpemU6IGludF0pIC0+IGludC4gIFRydW5jYXRlIHRoZSBmaWxlIHRvIGF0IG1vc3Qgc2l6ZSBieXRlc1xuIgotImFuZCByZXR1cm4gdGhlIHRydW5jYXRlZCBzaXplLlxuIgotIlxuIgotIlNpemUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXMgcmV0dXJuZWQgYnkgdGVsbCgpLlxuIgotIlRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gaXMgY2hhbmdlZCB0byB0aGUgdmFsdWUgb2Ygc2l6ZS4iKTsKLSNlbmRpZgotCi1QeURvY19TVFJWQVIodGVsbF9kb2MsCi0idGVsbCgpIC0+IGludC4gIEN1cnJlbnQgZmlsZSBwb3NpdGlvbi5cbiIKLSJcbiIKLSJDYW4gcmFpc2UgT1NFcnJvciBmb3Igbm9uIHNlZWthYmxlIGZpbGVzLiIKLSk7Ci0KLVB5RG9jX1NUUlZBUihyZWFkaW50b19kb2MsCi0icmVhZGludG8oKSAtPiBTYW1lIGFzIFJhd0lPQmFzZS5yZWFkaW50bygpLiIpOwotCi1QeURvY19TVFJWQVIoY2xvc2VfZG9jLAotImNsb3NlKCkgLT4gTm9uZS4gIENsb3NlIHRoZSBmaWxlLlxuIgotIlxuIgotIkEgY2xvc2VkIGZpbGUgY2Fubm90IGJlIHVzZWQgZm9yIGZ1cnRoZXIgSS9PIG9wZXJhdGlvbnMuICBjbG9zZSgpIG1heSBiZVxuIgotImNhbGxlZCBtb3JlIHRoYW4gb25jZSB3aXRob3V0IGVycm9yLiIpOwotCi1QeURvY19TVFJWQVIoaXNhdHR5X2RvYywKLSJpc2F0dHkoKSAtPiBib29sLiAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBjb25uZWN0ZWQgdG8gYSBUVFkgZGV2aWNlLiIpOwotCi1QeURvY19TVFJWQVIoc2Vla2FibGVfZG9jLAotInNlZWthYmxlKCkgLT4gYm9vbC4gIFRydWUgaWYgZmlsZSBzdXBwb3J0cyByYW5kb20tYWNjZXNzLiIpOwotCi1QeURvY19TVFJWQVIocmVhZGFibGVfZG9jLAotInJlYWRhYmxlKCkgLT4gYm9vbC4gIFRydWUgaWYgZmlsZSB3YXMgb3BlbmVkIGluIGEgcmVhZCBtb2RlLiIpOwotCi1QeURvY19TVFJWQVIod3JpdGFibGVfZG9jLAotIndyaXRhYmxlKCkgLT4gYm9vbC4gIFRydWUgaWYgZmlsZSB3YXMgb3BlbmVkIGluIGEgd3JpdGUgbW9kZS4iKTsKKyNpbmNsdWRlICJjbGluaWMvZmlsZWlvLmMuaCIKIAogc3RhdGljIFB5TWV0aG9kRGVmIGZpbGVpb19tZXRob2RzW10gPSB7Ci0gICAgeyJyZWFkIiwgICAgIChQeUNGdW5jdGlvbilmaWxlaW9fcmVhZCwgICAgICAgICBNRVRIX1ZBUkFSR1MsIHJlYWRfZG9jfSwKLSAgICB7InJlYWRhbGwiLCAgKFB5Q0Z1bmN0aW9uKWZpbGVpb19yZWFkYWxsLCAgTUVUSF9OT0FSR1MsICByZWFkYWxsX2RvY30sCi0gICAgeyJyZWFkaW50byIsIChQeUNGdW5jdGlvbilmaWxlaW9fcmVhZGludG8sIE1FVEhfVkFSQVJHUywgcmVhZGludG9fZG9jfSwKLSAgICB7IndyaXRlIiwgICAgKFB5Q0Z1bmN0aW9uKWZpbGVpb193cml0ZSwgICAgICAgIE1FVEhfVkFSQVJHUywgd3JpdGVfZG9jfSwKLSAgICB7InNlZWsiLCAgICAgKFB5Q0Z1bmN0aW9uKWZpbGVpb19zZWVrLCAgICAgICAgIE1FVEhfVkFSQVJHUywgc2Vla19kb2N9LAotICAgIHsidGVsbCIsICAgICAoUHlDRnVuY3Rpb24pZmlsZWlvX3RlbGwsICAgICAgICAgTUVUSF9WQVJBUkdTLCB0ZWxsX2RvY30sCi0jaWZkZWYgSEFWRV9GVFJVTkNBVEUKLSAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKWZpbGVpb190cnVuY2F0ZSwgTUVUSF9WQVJBUkdTLCB0cnVuY2F0ZV9kb2N9LAotI2VuZGlmCi0gICAgeyJjbG9zZSIsICAgIChQeUNGdW5jdGlvbilmaWxlaW9fY2xvc2UsICAgICAgICBNRVRIX05PQVJHUywgIGNsb3NlX2RvY30sCi0gICAgeyJzZWVrYWJsZSIsIChQeUNGdW5jdGlvbilmaWxlaW9fc2Vla2FibGUsIE1FVEhfTk9BUkdTLCAgICAgIHNlZWthYmxlX2RvY30sCi0gICAgeyJyZWFkYWJsZSIsIChQeUNGdW5jdGlvbilmaWxlaW9fcmVhZGFibGUsIE1FVEhfTk9BUkdTLCAgICAgIHJlYWRhYmxlX2RvY30sCi0gICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilmaWxlaW9fd3JpdGFibGUsIE1FVEhfTk9BUkdTLCAgICAgIHdyaXRhYmxlX2RvY30sCi0gICAgeyJmaWxlbm8iLCAgIChQeUNGdW5jdGlvbilmaWxlaW9fZmlsZW5vLCAgIE1FVEhfTk9BUkdTLCAgICAgIGZpbGVub19kb2N9LAotICAgIHsiaXNhdHR5IiwgICAoUHlDRnVuY3Rpb24pZmlsZWlvX2lzYXR0eSwgICBNRVRIX05PQVJHUywgICAgICBpc2F0dHlfZG9jfSwKKyAgICBfSU9fRklMRUlPX1JFQURfTUVUSE9EREVGCisgICAgX0lPX0ZJTEVJT19SRUFEQUxMX01FVEhPRERFRgorICAgIF9JT19GSUxFSU9fUkVBRElOVE9fTUVUSE9EREVGCisgICAgX0lPX0ZJTEVJT19XUklURV9NRVRIT0RERUYKKyAgICBfSU9fRklMRUlPX1NFRUtfTUVUSE9EREVGCisgICAgX0lPX0ZJTEVJT19URUxMX01FVEhPRERFRgorICAgIF9JT19GSUxFSU9fVFJVTkNBVEVfTUVUSE9EREVGCisgICAgX0lPX0ZJTEVJT19DTE9TRV9NRVRIT0RERUYKKyAgICBfSU9fRklMRUlPX1NFRUtBQkxFX01FVEhPRERFRgorICAgIF9JT19GSUxFSU9fUkVBREFCTEVfTUVUSE9EREVGCisgICAgX0lPX0ZJTEVJT19XUklUQUJMRV9NRVRIT0RERUYKKyAgICBfSU9fRklMRUlPX0ZJTEVOT19NRVRIT0RERUYKKyAgICBfSU9fRklMRUlPX0lTQVRUWV9NRVRIT0RERUYKICAgICB7Il9kZWFsbG9jX3dhcm4iLCAoUHlDRnVuY3Rpb24pZmlsZWlvX2RlYWxsb2Nfd2FybiwgTUVUSF9PLCBOVUxMfSwKICAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilmaWxlaW9fZ2V0c3RhdGUsIE1FVEhfTk9BUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC0xMjI3LDYgKzExODQsNyBAQAogfTsKIAogc3RhdGljIFB5TWVtYmVyRGVmIGZpbGVpb19tZW1iZXJzW10gPSB7CisgICAgeyJfYmxrc2l6ZSIsIFRfVUlOVCwgb2Zmc2V0b2YoZmlsZWlvLCBibGtzaXplKSwgMH0sCiAgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoZmlsZWlvLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwpAQCAtMTI1Myw3ICsxMjExLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgICAgIC8qIHRwX2ZsYWdzICovCi0gICAgZmlsZWlvX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfaW9fRmlsZUlPX19faW5pdF9fX19kb2NfXywgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpZmlsZWlvX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlmaWxlaW9fY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwpAQCAtMTI2OCw3ICsxMjI2LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgb2Zmc2V0b2YoZmlsZWlvLCBkaWN0KSwgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgZmlsZWlvX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgX2lvX0ZpbGVJT19fX2luaXRfXywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIGZpbGVpb19uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9pb2Jhc2UuYyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCmluZGV4IGVmMDZiNDMuLjIxMmIwZGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2lvYmFzZS5jCisrKyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCkBAIC0xMyw2ICsxMywyMCBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgIl9pb21vZHVsZS5oIgogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgX2lvCitjbGFzcyBfaW8uX0lPQmFzZSAiUHlPYmplY3QgKiIgIiZQeUlPQmFzZV9UeXBlIgorY2xhc3MgX2lvLl9SYXdJT0Jhc2UgIlB5T2JqZWN0ICoiICImUHlSYXdJT0Jhc2VfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWQyOWE0ZDA3NmMyYjIxMWNdKi8KKworLypbcHl0aG9uIGlucHV0XQorY2xhc3MgaW9fc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGNvbnZlcnRlciA9ICdfUHlJT19Db252ZXJ0U3NpemVfdCcKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWQwYTgxMWQzY2JmZDFiMzNdKi8KKwogLyoKICAqIElPQmFzZSBjbGFzcywgYW4gYWJzdHJhY3QgY2xhc3MKICAqLwpAQCAtMzksOCArNTMsOSBAQAogICAgICJjYWxsZWQuXG4iCiAgICAgIlxuIgogICAgICJUaGUgYmFzaWMgdHlwZSB1c2VkIGZvciBiaW5hcnkgZGF0YSByZWFkIGZyb20gb3Igd3JpdHRlbiB0byBhIGZpbGUgaXNcbiIKLSAgICAiYnl0ZXMuIGJ5dGVhcnJheXMgYXJlIGFjY2VwdGVkIHRvbywgYW5kIGluIHNvbWUgY2FzZXMgKHN1Y2ggYXNcbiIKLSAgICAicmVhZGludG8pIG5lZWRlZC4gVGV4dCBJL08gY2xhc3NlcyB3b3JrIHdpdGggc3RyIGRhdGEuXG4iCisgICAgImJ5dGVzLiBPdGhlciBieXRlcy1saWtlIG9iamVjdHMgYXJlIGFjY2VwdGVkIGFzIG1ldGhvZCBhcmd1bWVudHMgdG9vLlxuIgorICAgICJJbiBzb21lIGNhc2VzIChzdWNoIGFzIHJlYWRpbnRvKSwgYSB3cml0YWJsZSBvYmplY3QgaXMgcmVxdWlyZWQuIFRleHRcbiIKKyAgICAiSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLlxuIgogICAgICJcbiIKICAgICAiTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXhjZXB0IGFkZGl0aW9uYWwgY2FsbHMgdG8gY2xvc2UoKSxcbiIKICAgICAid2hpY2ggYXJlIGlnbm9yZWQpIG9uIGEgY2xvc2VkIHN0cmVhbSBzaG91bGQgcmFpc2UgYSBWYWx1ZUVycm9yLlxuIgpAQCAtOTYsMTEgKzExMSwxNSBAQAogICAgIHJldHVybiBpb2Jhc2VfdW5zdXBwb3J0ZWQoInNlZWsiKTsKIH0KIAotUHlEb2NfU1RSVkFSKGlvYmFzZV90ZWxsX2RvYywKLSAgICAgICAgICAgICAiUmV0dXJuIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLl9JT0Jhc2UudGVsbAorCitSZXR1cm4gY3VycmVudCBzdHJlYW0gcG9zaXRpb24uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pb2Jhc2VfdGVsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fX0lPQmFzZV90ZWxsX2ltcGwoUHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODlhMWMwODA3OTM1YWJlMiBpbnB1dD0wNGU2MTVmZWMxMjg4MDFmXSovCiB7CiAgICAgX1B5X0lERU5USUZJRVIoc2Vlayk7CiAKQEAgLTEyMSwxMyArMTQwLDE3IEBACiAKIC8qIEZsdXNoIGFuZCBjbG9zZSBtZXRob2RzICovCiAKLVB5RG9jX1NUUlZBUihpb2Jhc2VfZmx1c2hfZG9jLAotICAgICJGbHVzaCB3cml0ZSBidWZmZXJzLCBpZiBhcHBsaWNhYmxlLlxuIgotICAgICJcbiIKLSAgICAiVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWQtb25seSBhbmQgbm9uLWJsb2NraW5nIHN0cmVhbXMuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fSU9CYXNlLmZsdXNoCisKK0ZsdXNoIHdyaXRlIGJ1ZmZlcnMsIGlmIGFwcGxpY2FibGUuCisKK1RoaXMgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkLW9ubHkgYW5kIG5vbi1ibG9ja2luZyBzdHJlYW1zLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotaW9iYXNlX2ZsdXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19fSU9CYXNlX2ZsdXNoX2ltcGwoUHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2NlZjRiNGQ1NDY1NmEzYiBpbnB1dD03NzNiZTEyMWFiZTI3MGFhXSovCiB7CiAgICAgLyogWFhYIFNob3VsZCB0aGlzIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4/Pz8gKi8KICAgICBpZiAoSVNfQ0xPU0VEKHNlbGYpKSB7CkBAIC0xMzcsMTEgKzE2MCw2IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihpb2Jhc2VfY2xvc2VfZG9jLAotICAgICJGbHVzaCBhbmQgY2xvc2UgdGhlIElPIG9iamVjdC5cbiIKLSAgICAiXG4iCi0gICAgIlRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QgaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBjbG9zZWQuXG4iKTsKLQogc3RhdGljIGludAogaW9iYXNlX2Nsb3NlZChQeU9iamVjdCAqc2VsZikKIHsKQEAgLTE4MCw4ICsxOTgsMTcgQEAKICAgIGBfX0lPQmFzZV9jbG9zZWRgIGFuZCBjYWxsIGZsdXNoKCkgYnkgaXRzZWxmLCBidXQgaXQgaXMgcmVkdW5kYW50IHdpdGgKICAgIHdoYXRldmVyIGJlaGF2aW91ciBhIG5vbi10cml2aWFsIGRlcml2ZWQgY2xhc3Mgd2lsbCBpbXBsZW1lbnQuICovCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fSU9CYXNlLmNsb3NlCisKK0ZsdXNoIGFuZCBjbG9zZSB0aGUgSU8gb2JqZWN0LgorCitUaGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgY2xvc2VkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotaW9iYXNlX2Nsb3NlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19fSU9CYXNlX2Nsb3NlX2ltcGwoUHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjNjNmE2ZjU3ZDc4M2Q2ZCBpbnB1dD1mNDQ5NGQ1YzMxZGJjNmI3XSovCiB7CiAgICAgUHlPYmplY3QgKnJlczsKIApAQCAtMzA0LDE0ICszMzEsMTggQEAKIAogLyogSW5xdWlyeSBtZXRob2RzICovCiAKLVB5RG9jX1NUUlZBUihpb2Jhc2Vfc2Vla2FibGVfZG9jLAotICAgICJSZXR1cm4gd2hldGhlciBvYmplY3Qgc3VwcG9ydHMgcmFuZG9tIGFjY2Vzcy5cbiIKLSAgICAiXG4iCi0gICAgIklmIEZhbHNlLCBzZWVrKCksIHRlbGwoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uLlxuIgotICAgICJUaGlzIG1ldGhvZCBtYXkgbmVlZCB0byBkbyBhIHRlc3Qgc2VlaygpLiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLl9JT0Jhc2Uuc2Vla2FibGUKKworUmV0dXJuIHdoZXRoZXIgb2JqZWN0IHN1cHBvcnRzIHJhbmRvbSBhY2Nlc3MuCisKK0lmIEZhbHNlLCBzZWVrKCksIHRlbGwoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIE9TRXJyb3IuCitUaGlzIG1ldGhvZCBtYXkgbmVlZCB0byBkbyBhIHRlc3Qgc2VlaygpLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotaW9iYXNlX3NlZWthYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19fSU9CYXNlX3NlZWthYmxlX2ltcGwoUHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NGMyNGM2N2Y1ZjMyYTQzZCBpbnB1dD1iOTc2NjIyZjdmZGYzMDYzXSovCiB7CiAgICAgUHlfUkVUVVJOX0ZBTFNFOwogfQpAQCAtMzMzLDEzICszNjQsMTcgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1QeURvY19TVFJWQVIoaW9iYXNlX3JlYWRhYmxlX2RvYywKLSAgICAiUmV0dXJuIHdoZXRoZXIgb2JqZWN0IHdhcyBvcGVuZWQgZm9yIHJlYWRpbmcuXG4iCi0gICAgIlxuIgotICAgICJJZiBGYWxzZSwgcmVhZCgpIHdpbGwgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24uIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uX0lPQmFzZS5yZWFkYWJsZQorCitSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3IgcmVhZGluZy4KKworSWYgRmFsc2UsIHJlYWQoKSB3aWxsIHJhaXNlIE9TRXJyb3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pb2Jhc2VfcmVhZGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX19JT0Jhc2VfcmVhZGFibGVfaW1wbChQeU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNDgwODkyNTA2ODYzODhiIGlucHV0PTI4NWIzYjg2NmEwZWMzNWZdKi8KIHsKICAgICBQeV9SRVRVUk5fRkFMU0U7CiB9CkBAIC0zNjIsMTMgKzM5NywxNyBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLVB5RG9jX1NUUlZBUihpb2Jhc2Vfd3JpdGFibGVfZG9jLAotICAgICJSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy5cbiIKLSAgICAiXG4iCi0gICAgIklmIEZhbHNlLCB3cml0ZSgpIHdpbGwgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24uIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uX0lPQmFzZS53cml0YWJsZQorCitSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy4KKworSWYgRmFsc2UsIHdyaXRlKCkgd2lsbCByYWlzZSBPU0Vycm9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotaW9iYXNlX3dyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19fSU9CYXNlX3dyaXRhYmxlX2ltcGwoUHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDA2MDAxZDA5ODViZTE0ZiBpbnB1dD05ZGNhYzE4YTAxM2EwNWI1XSovCiB7CiAgICAgUHlfUkVUVVJOX0ZBTFNFOwogfQpAQCAtNDEzLDI0ICs0NTIsMzIgQEAKIAogLyogWFhYIFNob3VsZCB0aGVzZSBiZSBwcmVzZW50IGV2ZW4gaWYgdW5pbXBsZW1lbnRlZD8gKi8KIAotUHlEb2NfU1RSVkFSKGlvYmFzZV9maWxlbm9fZG9jLAotICAgICJSZXR1cm5zIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGlmIG9uZSBleGlzdHMuXG4iCi0gICAgIlxuIgotICAgICJBbiBJT0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLl9JT0Jhc2UuZmlsZW5vCisKK1JldHVybnMgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgaWYgb25lIGV4aXN0cy4KKworT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pb2Jhc2VfZmlsZW5vKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19fSU9CYXNlX2ZpbGVub19pbXBsKFB5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdjYzA5NzNmMGY1ZjNiNzMgaW5wdXQ9NGUzNzAyODk0N2RjMWNjOF0qLwogewogICAgIHJldHVybiBpb2Jhc2VfdW5zdXBwb3J0ZWQoImZpbGVubyIpOwogfQogCi1QeURvY19TVFJWQVIoaW9iYXNlX2lzYXR0eV9kb2MsCi0gICAgIlJldHVybiB3aGV0aGVyIHRoaXMgaXMgYW4gJ2ludGVyYWN0aXZlJyBzdHJlYW0uXG4iCi0gICAgIlxuIgotICAgICJSZXR1cm4gRmFsc2UgaWYgaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZC5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLl9JT0Jhc2UuaXNhdHR5CisKK1JldHVybiB3aGV0aGVyIHRoaXMgaXMgYW4gJ2ludGVyYWN0aXZlJyBzdHJlYW0uCisKK1JldHVybiBGYWxzZSBpZiBpdCBjYW4ndCBiZSBkZXRlcm1pbmVkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotaW9iYXNlX2lzYXR0eShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fX0lPQmFzZV9pc2F0dHlfaW1wbChQeU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MGNhYjc3Y2VkZTQxY2RkIGlucHV0PTllZjc2NTMwZDM2ODQ1OGJdKi8KIHsKICAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX2Nsb3NlZChzZWxmLCBQeV9UcnVlKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQzOSwzMCArNDg2LDMxIEBACiAKIC8qIFJlYWRsaW5lKHMpIGFuZCB3cml0ZWxpbmVzICovCiAKLVB5RG9jX1NUUlZBUihpb2Jhc2VfcmVhZGxpbmVfZG9jLAotICAgICJSZWFkIGFuZCByZXR1cm4gYSBsaW5lIGZyb20gdGhlIHN0cmVhbS5cbiIKLSAgICAiXG4iCi0gICAgIklmIGxpbWl0IGlzIHNwZWNpZmllZCwgYXQgbW9zdCBsaW1pdCBieXRlcyB3aWxsIGJlIHJlYWQuXG4iCi0gICAgIlxuIgotICAgICJUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBiJ1xcbicgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHRcbiIKLSAgICAiZmlsZXMsIHRoZSBuZXdsaW5lcyBhcmd1bWVudCB0byBvcGVuIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZVxuIgotICAgICJ0ZXJtaW5hdG9yKHMpIHJlY29nbml6ZWQuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fSU9CYXNlLnJlYWRsaW5lCisgICAgc2l6ZSBhcyBsaW1pdDogaW9fc3NpemVfdCA9IC0xCisgICAgLworCitSZWFkIGFuZCByZXR1cm4gYSBsaW5lIGZyb20gdGhlIHN0cmVhbS4KKworSWYgc2l6ZSBpcyBzcGVjaWZpZWQsIGF0IG1vc3Qgc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQuCisKK1RoZSBsaW5lIHRlcm1pbmF0b3IgaXMgYWx3YXlzIGInXG4nIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0CitmaWxlcywgdGhlIG5ld2xpbmVzIGFyZ3VtZW50IHRvIG9wZW4gY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCit0ZXJtaW5hdG9yKHMpIHJlY29nbml6ZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pb2Jhc2VfcmVhZGxpbmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX19JT0Jhc2VfcmVhZGxpbmVfaW1wbChQeU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsaW1pdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00NDc5Zjc5YjU4MTg3ODQwIGlucHV0PWRmNGNjODg4NGY1NTNjYWJdKi8KIHsKICAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGEgKHNsb3dpc2gpIHJlYWRsaW5lKCkuICovCiAKLSAgICBQeV9zc2l6ZV90IGxpbWl0ID0gLTE7CiAgICAgaW50IGhhc19wZWVrID0gMDsKICAgICBQeU9iamVjdCAqYnVmZmVyLCAqcmVzdWx0OwogICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSAtMTsKICAgICBfUHlfSURFTlRJRklFUihwZWVrKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWRsaW5lIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbGltaXQpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKHNlbGYsICZQeUlkX3BlZWspKQogICAgICAgICBoYXNfcGVlayA9IDE7CiAKQEAgLTU4NSwyMyArNjMzLDI1IEBACiAgICAgcmV0dXJuIGxpbmU7CiB9CiAKLVB5RG9jX1NUUlZBUihpb2Jhc2VfcmVhZGxpbmVzX2RvYywKLSAgICAiUmV0dXJuIGEgbGlzdCBvZiBsaW5lcyBmcm9tIHRoZSBzdHJlYW0uXG4iCi0gICAgIlxuIgotICAgICJoaW50IGNhbiBiZSBzcGVjaWZpZWQgdG8gY29udHJvbCB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlYWQ6IG5vIG1vcmVcbiIKLSAgICAibGluZXMgd2lsbCBiZSByZWFkIGlmIHRoZSB0b3RhbCBzaXplIChpbiBieXRlcy9jaGFyYWN0ZXJzKSBvZiBhbGxcbiIKLSAgICAibGluZXMgc28gZmFyIGV4Y2VlZHMgaGludC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fSU9CYXNlLnJlYWRsaW5lcworICAgIGhpbnQ6IGlvX3NzaXplX3QgPSAtMQorICAgIC8KKworUmV0dXJuIGEgbGlzdCBvZiBsaW5lcyBmcm9tIHRoZSBzdHJlYW0uCisKK2hpbnQgY2FuIGJlIHNwZWNpZmllZCB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgbGluZXMgcmVhZDogbm8gbW9yZQorbGluZXMgd2lsbCBiZSByZWFkIGlmIHRoZSB0b3RhbCBzaXplIChpbiBieXRlcy9jaGFyYWN0ZXJzKSBvZiBhbGwKK2xpbmVzIHNvIGZhciBleGNlZWRzIGhpbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pb2Jhc2VfcmVhZGxpbmVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19fSU9CYXNlX3JlYWRsaW5lc19pbXBsKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGhpbnQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmY1MDQyMTY3N2ZhM2RlYSBpbnB1dD0xOTYxYzRhOTVlOTZlNjYxXSovCiB7Ci0gICAgUHlfc3NpemVfdCBoaW50ID0gLTEsIGxlbmd0aCA9IDA7CisgICAgUHlfc3NpemVfdCBsZW5ndGggPSAwOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkbGluZXMiLCAmX1B5SU9fQ29udmVydFNzaXplX3QsICZoaW50KSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDYsMTQgKzY5NiwxNyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1pb2Jhc2Vfd3JpdGVsaW5lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKmxpbmVzLCAqaXRlciwgKnJlczsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fSU9CYXNlLndyaXRlbGluZXMKKyAgICBsaW5lczogb2JqZWN0CisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOndyaXRlbGluZXMiLCAmbGluZXMpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fX0lPQmFzZV93cml0ZWxpbmVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbGluZXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTc2ZWIwYTliNjBhNjYyOCBpbnB1dD00MzJlNzI5YTg0NTBiM2NiXSovCit7CisgICAgUHlPYmplY3QgKml0ZXIsICpyZXM7CiAKICAgICBpZiAoX1B5SU9CYXNlX2NoZWNrX2Nsb3NlZChzZWxmLCBQeV9UcnVlKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTY4OCwzMSArNzQxLDMzIEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKKyNpbmNsdWRlICJjbGluaWMvaW9iYXNlLmMuaCIKKwogc3RhdGljIFB5TWV0aG9kRGVmIGlvYmFzZV9tZXRob2RzW10gPSB7CiAgICAgeyJzZWVrIiwgaW9iYXNlX3NlZWssIE1FVEhfVkFSQVJHUywgaW9iYXNlX3NlZWtfZG9jfSwKLSAgICB7InRlbGwiLCBpb2Jhc2VfdGVsbCwgTUVUSF9OT0FSR1MsIGlvYmFzZV90ZWxsX2RvY30sCisgICAgX0lPX19JT0JBU0VfVEVMTF9NRVRIT0RERUYKICAgICB7InRydW5jYXRlIiwgaW9iYXNlX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1MsIGlvYmFzZV90cnVuY2F0ZV9kb2N9LAotICAgIHsiZmx1c2giLCBpb2Jhc2VfZmx1c2gsIE1FVEhfTk9BUkdTLCBpb2Jhc2VfZmx1c2hfZG9jfSwKLSAgICB7ImNsb3NlIiwgaW9iYXNlX2Nsb3NlLCBNRVRIX05PQVJHUywgaW9iYXNlX2Nsb3NlX2RvY30sCisgICAgX0lPX19JT0JBU0VfRkxVU0hfTUVUSE9EREVGCisgICAgX0lPX19JT0JBU0VfQ0xPU0VfTUVUSE9EREVGCiAKLSAgICB7InNlZWthYmxlIiwgaW9iYXNlX3NlZWthYmxlLCBNRVRIX05PQVJHUywgaW9iYXNlX3NlZWthYmxlX2RvY30sCi0gICAgeyJyZWFkYWJsZSIsIGlvYmFzZV9yZWFkYWJsZSwgTUVUSF9OT0FSR1MsIGlvYmFzZV9yZWFkYWJsZV9kb2N9LAotICAgIHsid3JpdGFibGUiLCBpb2Jhc2Vfd3JpdGFibGUsIE1FVEhfTk9BUkdTLCBpb2Jhc2Vfd3JpdGFibGVfZG9jfSwKKyAgICBfSU9fX0lPQkFTRV9TRUVLQUJMRV9NRVRIT0RERUYKKyAgICBfSU9fX0lPQkFTRV9SRUFEQUJMRV9NRVRIT0RERUYKKyAgICBfSU9fX0lPQkFTRV9XUklUQUJMRV9NRVRIT0RERUYKIAogICAgIHsiX2NoZWNrQ2xvc2VkIiwgICBfUHlJT0Jhc2VfY2hlY2tfY2xvc2VkLCBNRVRIX05PQVJHU30sCiAgICAgeyJfY2hlY2tTZWVrYWJsZSIsIF9QeUlPQmFzZV9jaGVja19zZWVrYWJsZSwgTUVUSF9OT0FSR1N9LAogICAgIHsiX2NoZWNrUmVhZGFibGUiLCBfUHlJT0Jhc2VfY2hlY2tfcmVhZGFibGUsIE1FVEhfTk9BUkdTfSwKICAgICB7Il9jaGVja1dyaXRhYmxlIiwgX1B5SU9CYXNlX2NoZWNrX3dyaXRhYmxlLCBNRVRIX05PQVJHU30sCiAKLSAgICB7ImZpbGVubyIsIGlvYmFzZV9maWxlbm8sIE1FVEhfTk9BUkdTLCBpb2Jhc2VfZmlsZW5vX2RvY30sCi0gICAgeyJpc2F0dHkiLCBpb2Jhc2VfaXNhdHR5LCBNRVRIX05PQVJHUywgaW9iYXNlX2lzYXR0eV9kb2N9LAorICAgIF9JT19fSU9CQVNFX0ZJTEVOT19NRVRIT0RERUYKKyAgICBfSU9fX0lPQkFTRV9JU0FUVFlfTUVUSE9EREVGCiAKICAgICB7Il9fZW50ZXJfXyIsIGlvYmFzZV9lbnRlciwgTUVUSF9OT0FSR1N9LAogICAgIHsiX19leGl0X18iLCBpb2Jhc2VfZXhpdCwgTUVUSF9WQVJBUkdTfSwKIAotICAgIHsicmVhZGxpbmUiLCBpb2Jhc2VfcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgaW9iYXNlX3JlYWRsaW5lX2RvY30sCi0gICAgeyJyZWFkbGluZXMiLCBpb2Jhc2VfcmVhZGxpbmVzLCBNRVRIX1ZBUkFSR1MsIGlvYmFzZV9yZWFkbGluZXNfZG9jfSwKLSAgICB7IndyaXRlbGluZXMiLCBpb2Jhc2Vfd3JpdGVsaW5lcywgTUVUSF9WQVJBUkdTfSwKKyAgICBfSU9fX0lPQkFTRV9SRUFETElORV9NRVRIT0RERUYKKyAgICBfSU9fX0lPQkFTRV9SRUFETElORVNfTUVUSE9EREVGCisgICAgX0lPX19JT0JBU0VfV1JJVEVMSU5FU19NRVRIT0RERUYKIAogICAgIHtOVUxMLCBOVUxMfQogfTsKQEAgLTc5NSwxNSArODUwLDE3IEBACiAgKiBlaXRoZXIuKQogKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLXJhd2lvYmFzZV9yZWFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeV9zc2l6ZV90IG4gPSAtMTsKLSAgICBQeU9iamVjdCAqYiwgKnJlczsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fUmF3SU9CYXNlLnJlYWQKKyAgICBzaXplIGFzIG46IFB5X3NzaXplX3QgPSAtMQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cmVhZCIsICZuKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CitzdGF0aWMgUHlPYmplY3QgKgorX2lvX19SYXdJT0Jhc2VfcmVhZF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IG4pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmNkZWI3MzFlM2M5ZjEzYyBpbnB1dD1iNmQwZGNmNjQxN2QxMzc0XSovCit7CisgICAgUHlPYmplY3QgKmIsICpyZXM7CiAKICAgICBpZiAobiA8IDApIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIocmVhZGFsbCk7CkBAIC04MzYsMTEgKzg5MywxNSBAQAogfQogCiAKLVB5RG9jX1NUUlZBUihyYXdpb2Jhc2VfcmVhZGFsbF9kb2MsCi0gICAgICAgICAgICAgIlJlYWQgdW50aWwgRU9GLCB1c2luZyBtdWx0aXBsZSByZWFkKCkgY2FsbC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5fUmF3SU9CYXNlLnJlYWRhbGwKKworUmVhZCB1bnRpbCBFT0YsIHVzaW5nIG11bHRpcGxlIHJlYWQoKSBjYWxsLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcmF3aW9iYXNlX3JlYWRhbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX19SYXdJT0Jhc2VfcmVhZGFsbF9pbXBsKFB5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE5ODdiOWNlOTI5NDI1YTAgaW5wdXQ9Njg4ODc0MTQxMjEzNjIyYV0qLwogewogICAgIGludCByOwogICAgIFB5T2JqZWN0ICpjaHVua3MgPSBQeUxpc3RfTmV3KDApOwpAQCAtODkyLDkgKzk1MywyNSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCityYXdpb2Jhc2VfcmVhZGludG8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCityYXdpb2Jhc2Vfd3JpdGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiByYXdpb2Jhc2VfbWV0aG9kc1tdID0gewotICAgIHsicmVhZCIsIHJhd2lvYmFzZV9yZWFkLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsicmVhZGFsbCIsIHJhd2lvYmFzZV9yZWFkYWxsLCBNRVRIX05PQVJHUywgcmF3aW9iYXNlX3JlYWRhbGxfZG9jfSwKKyAgICBfSU9fX1JBV0lPQkFTRV9SRUFEX01FVEhPRERFRgorICAgIF9JT19fUkFXSU9CQVNFX1JFQURBTExfTUVUSE9EREVGCisgICAgeyJyZWFkaW50byIsIHJhd2lvYmFzZV9yZWFkaW50bywgTUVUSF9WQVJBUkdTfSwKKyAgICB7IndyaXRlIiwgcmF3aW9iYXNlX3dyaXRlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHtOVUxMLCBOVUxMfQogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vc3RyaW5naW8uYyBiL01vZHVsZXMvX2lvL3N0cmluZ2lvLmMKaW5kZXggOTVmYjcwMy4uMDZiNDE0NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vc3RyaW5naW8uYworKysgYi9Nb2R1bGVzL19pby9zdHJpbmdpby5jCkBAIC0xMSw2ICsxMSwxMiBAQAogI2RlZmluZSBTVEFURV9SRUFMSVpFRCAxCiAjZGVmaW5lIFNUQVRFX0FDQ1VNVUxBVElORyAyCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfaW8KK2NsYXNzIF9pby5TdHJpbmdJTyAic3RyaW5naW8gKiIgIiZQeVN0cmluZ0lPX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1jMTdiYzBmNDIxNjVjZDdkXSovCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlfVUNTNCAqYnVmOwpAQCAtMzksNiArNDUsOCBAQAogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKIH0gc3RyaW5naW87CiAKK3N0YXRpYyBpbnQgX2lvX1N0cmluZ0lPX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncyk7CisKICNkZWZpbmUgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikgXAogICAgIGlmIChzZWxmLT5vayA8PSAwKSB7IFwKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKQEAgLTU4LDEyICs2Niw2IEBACiAgICAgICAgIHJldHVybiBOVUxMOyBcCiAgICAgfQogCi1QeURvY19TVFJWQVIoc3RyaW5naW9fZG9jLAotICAgICJUZXh0IEkvTyBpbXBsZW1lbnRhdGlvbiB1c2luZyBhbiBpbi1tZW1vcnkgYnVmZmVyLlxuIgotICAgICJcbiIKLSAgICAiVGhlIGluaXRpYWxfdmFsdWUgYXJndW1lbnQgc2V0cyB0aGUgdmFsdWUgb2Ygb2JqZWN0LiAgVGhlIG5ld2xpbmVcbiIKLSAgICAiYXJndW1lbnQgaXMgbGlrZSB0aGUgb25lIG9mIFRleHRJT1dyYXBwZXIncyBjb25zdHJ1Y3Rvci4iKTsKLQogCiAvKiBJbnRlcm5hbCByb3V0aW5lIGZvciBjaGFuZ2luZyB0aGUgc2l6ZSwgaW4gdGVybXMgb2YgY2hhcmFjdGVycywgb2YgdGhlCiAgICBidWZmZXIgb2YgU3RyaW5nSU8gb2JqZWN0cy4gIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSAnc2l6ZScKQEAgLTI2NCwxMSArMjY2LDE1IEBACiAgICAgcmV0dXJuIC0xOwogfQogCi1QeURvY19TVFJWQVIoc3RyaW5naW9fZ2V0dmFsdWVfZG9jLAotICAgICJSZXRyaWV2ZSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uU3RyaW5nSU8uZ2V0dmFsdWUKKworUmV0cmlldmUgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotc3RyaW5naW9fZ2V0dmFsdWUoc3RyaW5naW8gKnNlbGYpCitfaW9fU3RyaW5nSU9fZ2V0dmFsdWVfaW1wbChzdHJpbmdpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yN2I2YTdiZmVhZWJjZTAxIGlucHV0PWQyM2NiODFkNjc5MWNmODhdKi8KIHsKICAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CkBAIC0yNzgsMzMgKzI4NCw0MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmluZ19zaXplKTsKIH0KIAotUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3RlbGxfZG9jLAotICAgICJUZWxsIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24uIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uU3RyaW5nSU8udGVsbAorCitUZWxsIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zdHJpbmdpb190ZWxsKHN0cmluZ2lvICpzZWxmKQorX2lvX1N0cmluZ0lPX3RlbGxfaW1wbChzdHJpbmdpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yZTg3YWM2N2IxMTZjNzdiIGlucHV0PWVjODY2ZWJhZmYwMmY0MDVdKi8KIHsKICAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzZWxmLT5wb3MpOwogfQogCi1QeURvY19TVFJWQVIoc3RyaW5naW9fcmVhZF9kb2MsCi0gICAgIlJlYWQgYXQgbW9zdCBuIGNoYXJhY3RlcnMsIHJldHVybmVkIGFzIGEgc3RyaW5nLlxuIgotICAgICJcbiIKLSAgICAiSWYgdGhlIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GXG4iCi0gICAgImlzIHJlYWNoZWQuIFJldHVybiBhbiBlbXB0eSBzdHJpbmcgYXQgRU9GLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfaW8uU3RyaW5nSU8ucmVhZAorICAgIHNpemUgYXMgYXJnOiBvYmplY3QgPSBOb25lCisgICAgLworCitSZWFkIGF0IG1vc3Qgc2l6ZSBjaGFyYWN0ZXJzLCByZXR1cm5lZCBhcyBhIHN0cmluZy4KKworSWYgdGhlIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GCitpcyByZWFjaGVkLiBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGF0IEVPRi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXN0cmluZ2lvX3JlYWQoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1N0cmluZ0lPX3JlYWRfaW1wbChzdHJpbmdpbyAqc2VsZiwgUHlPYmplY3QgKmFyZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zNjc2ODY0NzczNzQ2ZjY4IGlucHV0PTlhMzE5MDE1ZjZmMzk2NWNdKi8KIHsKICAgICBQeV9zc2l6ZV90IHNpemUsIG47CiAgICAgUHlfVUNTNCAqb3V0cHV0OwotICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogCiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpyZWFkIiwgJmFyZykpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAogICAgIGlmIChQeU51bWJlcl9DaGVjayhhcmcpKSB7CkBAIC0zNzMsMjAgKzM4NiwyMyBAQAogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUtpbmRBbmREYXRhKFB5VW5pY29kZV80QllURV9LSU5ELCBzdGFydCwgbGVuKTsKIH0KIAotUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3JlYWRsaW5lX2RvYywKLSAgICAiUmVhZCB1bnRpbCBuZXdsaW5lIG9yIEVPRi5cbiIKLSAgICAiXG4iCi0gICAgIlJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIEVPRiBpcyBoaXQgaW1tZWRpYXRlbHkuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5TdHJpbmdJTy5yZWFkbGluZQorICAgIHNpemUgYXMgYXJnOiBvYmplY3QgPSBOb25lCisgICAgLworCitSZWFkIHVudGlsIG5ld2xpbmUgb3IgRU9GLgorCitSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiBFT0YgaXMgaGl0IGltbWVkaWF0ZWx5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotc3RyaW5naW9fcmVhZGxpbmUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1N0cmluZ0lPX3JlYWRsaW5lX2ltcGwoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTlmZGNhYzAzYTNkZWU4MSBpbnB1dD1lMGUwZWQ0MDQyMDQwMTc2XSovCiB7Ci0gICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfc3NpemVfdCBsaW1pdCA9IC0xOwogCiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpyZWFkbGluZSIsICZhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAgICAgRU5TVVJFX1JFQUxJWkVEKHNlbGYpOwogCkBAIC00NDEsMjIgKzQ1NywyNSBAQAogICAgIHJldHVybiBsaW5lOwogfQogCi1QeURvY19TVFJWQVIoc3RyaW5naW9fdHJ1bmNhdGVfZG9jLAotICAgICJUcnVuY2F0ZSBzaXplIHRvIHBvcy5cbiIKLSAgICAiXG4iCi0gICAgIlRoZSBwb3MgYXJndW1lbnQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXNcbiIKLSAgICAicmV0dXJuZWQgYnkgdGVsbCgpLiAgVGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBpcyB1bmNoYW5nZWQuXG4iCi0gICAgIlJldHVybnMgdGhlIG5ldyBhYnNvbHV0ZSBwb3NpdGlvbi5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLlN0cmluZ0lPLnRydW5jYXRlCisgICAgcG9zIGFzIGFyZzogb2JqZWN0ID0gTm9uZQorICAgIC8KKworVHJ1bmNhdGUgc2l6ZSB0byBwb3MuCisKK1RoZSBwb3MgYXJndW1lbnQgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXMKK3JldHVybmVkIGJ5IHRlbGwoKS4gIFRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gaXMgdW5jaGFuZ2VkLgorUmV0dXJucyB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotc3RyaW5naW9fdHJ1bmNhdGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1N0cmluZ0lPX3RydW5jYXRlX2ltcGwoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjA3MjQzOWMyYjAxZDMwNiBpbnB1dD03NDg2MTlhNDk0YmE1M2FkXSovCiB7CiAgICAgUHlfc3NpemVfdCBzaXplOwotICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogCiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzp0cnVuY2F0ZSIsICZhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAKICAgICBpZiAoUHlOdW1iZXJfQ2hlY2soYXJnKSkgewpAQCAtNDkwLDQ5ICs1MDksNTEgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNpemUpOwogfQogCi1QeURvY19TVFJWQVIoc3RyaW5naW9fc2Vla19kb2MsCi0gICAgIkNoYW5nZSBzdHJlYW0gcG9zaXRpb24uXG4iCi0gICAgIlxuIgotICAgICJTZWVrIHRvIGNoYXJhY3RlciBvZmZzZXQgcG9zIHJlbGF0aXZlIHRvIHBvc2l0aW9uIGluZGljYXRlZCBieSB3aGVuY2U6XG4iCi0gICAgIiAgICAwICBTdGFydCBvZiBzdHJlYW0gKHRoZSBkZWZhdWx0KS4gIHBvcyBzaG91bGQgYmUgPj0gMDtcbiIKLSAgICAiICAgIDEgIEN1cnJlbnQgcG9zaXRpb24gLSBwb3MgbXVzdCBiZSAwO1xuIgotICAgICIgICAgMiAgRW5kIG9mIHN0cmVhbSAtIHBvcyBtdXN0IGJlIDAuXG4iCi0gICAgIlJldHVybnMgdGhlIG5ldyBhYnNvbHV0ZSBwb3NpdGlvbi5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLlN0cmluZ0lPLnNlZWsKKyAgICBwb3M6IFB5X3NzaXplX3QKKyAgICB3aGVuY2U6IGludCA9IDAKKyAgICAvCisKK0NoYW5nZSBzdHJlYW0gcG9zaXRpb24uCisKK1NlZWsgdG8gY2hhcmFjdGVyIG9mZnNldCBwb3MgcmVsYXRpdmUgdG8gcG9zaXRpb24gaW5kaWNhdGVkIGJ5IHdoZW5jZToKKyAgICAwICBTdGFydCBvZiBzdHJlYW0gKHRoZSBkZWZhdWx0KS4gIHBvcyBzaG91bGQgYmUgPj0gMDsKKyAgICAxICBDdXJyZW50IHBvc2l0aW9uIC0gcG9zIG11c3QgYmUgMDsKKyAgICAyICBFbmQgb2Ygc3RyZWFtIC0gcG9zIG11c3QgYmUgMC4KK1JldHVybnMgdGhlIG5ldyBhYnNvbHV0ZSBwb3NpdGlvbi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXN0cmluZ2lvX3NlZWsoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1N0cmluZ0lPX3NlZWtfaW1wbChzdHJpbmdpbyAqc2VsZiwgUHlfc3NpemVfdCBwb3MsIGludCB3aGVuY2UpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTllMGFjOWE4YWU3MWMyNSBpbnB1dD1lMzg1NWIyNGU3Y2FlMDZhXSovCiB7Ci0gICAgUHlfc3NpemVfdCBwb3M7Ci0gICAgaW50IG1vZGUgPSAwOwotCiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJufGk6c2VlayIsICZwb3MsICZtb2RlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogCi0gICAgaWYgKG1vZGUgIT0gMCAmJiBtb2RlICE9IDEgJiYgbW9kZSAhPSAyKSB7CisgICAgaWYgKHdoZW5jZSAhPSAwICYmIHdoZW5jZSAhPSAxICYmIHdoZW5jZSAhPSAyKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgd2hlbmNlICglaSwgc2hvdWxkIGJlIDAsIDEgb3IgMikiLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIHdoZW5jZSAoJWksIHNob3VsZCBiZSAwLCAxIG9yIDIpIiwgd2hlbmNlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGVsc2UgaWYgKHBvcyA8IDAgJiYgbW9kZSA9PSAwKSB7CisgICAgZWxzZSBpZiAocG9zIDwgMCAmJiB3aGVuY2UgPT0gMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJOZWdhdGl2ZSBzZWVrIHBvc2l0aW9uICV6ZCIsIHBvcyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBlbHNlIGlmIChtb2RlICE9IDAgJiYgcG9zICE9IDApIHsKKyAgICBlbHNlIGlmICh3aGVuY2UgIT0gMCAmJiBwb3MgIT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBkbyBub256ZXJvIGN1ci1yZWxhdGl2ZSBzZWVrcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvKiBtb2RlIDA6IG9mZnNldCByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4KLSAgICAgICBtb2RlIDE6IG5vIGNoYW5nZSB0byBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgIG1vZGUgMjogY2hhbmdlIHBvc2l0aW9uIHRvIGVuZCBvZiBmaWxlLiAqLwotICAgIGlmIChtb2RlID09IDEpIHsKKyAgICAvKiB3aGVuY2UgPSAwOiBvZmZzZXQgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuCisgICAgICAgd2hlbmNlID0gMTogbm8gY2hhbmdlIHRvIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgd2hlbmNlID0gMjogY2hhbmdlIHBvc2l0aW9uIHRvIGVuZCBvZiBmaWxlLiAqLworICAgIGlmICh3aGVuY2UgPT0gMSkgewogICAgICAgICBwb3MgPSBzZWxmLT5wb3M7CiAgICAgfQotICAgIGVsc2UgaWYgKG1vZGUgPT0gMikgeworICAgIGVsc2UgaWYgKHdoZW5jZSA9PSAyKSB7CiAgICAgICAgIHBvcyA9IHNlbGYtPnN0cmluZ19zaXplOwogICAgIH0KIApAQCAtNTQxLDE0ICs1NjIsMjAgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPnBvcyk7CiB9CiAKLVB5RG9jX1NUUlZBUihzdHJpbmdpb193cml0ZV9kb2MsCi0gICAgIldyaXRlIHN0cmluZyB0byBmaWxlLlxuIgotICAgICJcbiIKLSAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgd2hpY2ggaXMgYWx3YXlzIGVxdWFsIHRvXG4iCi0gICAgInRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLlN0cmluZ0lPLndyaXRlCisgICAgcyBhcyBvYmo6IG9iamVjdAorICAgIC8KKworV3JpdGUgc3RyaW5nIHRvIGZpbGUuCisKK1JldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIHdoaWNoIGlzIGFsd2F5cyBlcXVhbCB0bwordGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotc3RyaW5naW9fd3JpdGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICpvYmopCitfaW9fU3RyaW5nSU9fd3JpdGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICpvYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGRlYWJhOTFhMTViOTRkYSBpbnB1dD1jZjk2ZjNiMTY1ODZlNjY5XSovCiB7CiAgICAgUHlfc3NpemVfdCBzaXplOwogCkBAIC01NjksMTQgKzU5NiwyMCBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2l6ZSk7CiB9CiAKLVB5RG9jX1NUUlZBUihzdHJpbmdpb19jbG9zZV9kb2MsCi0gICAgIkNsb3NlIHRoZSBJTyBvYmplY3QuIEF0dGVtcHRpbmcgYW55IGZ1cnRoZXIgb3BlcmF0aW9uIGFmdGVyIHRoZVxuIgotICAgICJvYmplY3QgaXMgY2xvc2VkIHdpbGwgcmFpc2UgYSBWYWx1ZUVycm9yLlxuIgotICAgICJcbiIKLSAgICAiVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNsb3NlZC5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLlN0cmluZ0lPLmNsb3NlCisKK0Nsb3NlIHRoZSBJTyBvYmplY3QuCisKK0F0dGVtcHRpbmcgYW55IGZ1cnRoZXIgb3BlcmF0aW9uIGFmdGVyIHRoZSBvYmplY3QgaXMgY2xvc2VkCit3aWxsIHJhaXNlIGEgVmFsdWVFcnJvci4KKworVGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdCBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGNsb3NlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXN0cmluZ2lvX2Nsb3NlKHN0cmluZ2lvICpzZWxmKQorX2lvX1N0cmluZ0lPX2Nsb3NlX2ltcGwoc3RyaW5naW8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDQzOTkzNTVjYmU1MThmMSBpbnB1dD1jYmMxMGI0NWYzNWQ2ZDQ2XSovCiB7CiAgICAgc2VsZi0+Y2xvc2VkID0gMTsKICAgICAvKiBGcmVlIHVwIHNvbWUgbWVtb3J5ICovCkBAIC02NDQsMjMgKzY3NywyNyBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uU3RyaW5nSU8uX19pbml0X18KKyAgICBpbml0aWFsX3ZhbHVlIGFzIHZhbHVlOiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSAnJworICAgIG5ld2xpbmUgYXMgbmV3bGluZV9vYmo6IG9iamVjdChjX2RlZmF1bHQ9Ik5VTEwiKSA9ICdcbicKKworVGV4dCBJL08gaW1wbGVtZW50YXRpb24gdXNpbmcgYW4gaW4tbWVtb3J5IGJ1ZmZlci4KKworVGhlIGluaXRpYWxfdmFsdWUgYXJndW1lbnQgc2V0cyB0aGUgdmFsdWUgb2Ygb2JqZWN0LiAgVGhlIG5ld2xpbmUKK2FyZ3VtZW50IGlzIGxpa2UgdGhlIG9uZSBvZiBUZXh0SU9XcmFwcGVyJ3MgY29uc3RydWN0b3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBpbnQKLXN0cmluZ2lvX2luaXQoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19pb19TdHJpbmdJT19fX2luaXRfX19pbXBsKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmV3bGluZV9vYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTQyMWVhMDIzYjIyZWY0ZSBpbnB1dD1jZWUyZDkxODFiMjU3N2EzXSovCiB7Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7ImluaXRpYWxfdmFsdWUiLCAibmV3bGluZSIsIE5VTEx9OwotICAgIFB5T2JqZWN0ICp2YWx1ZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm5ld2xpbmVfb2JqID0gTlVMTDsKICAgICBjaGFyICpuZXdsaW5lID0gIlxuIjsKICAgICBQeV9zc2l6ZV90IHZhbHVlX2xlbjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8T086X19pbml0X18iLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlLCAmbmV3bGluZV9vYmopKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBQYXJzZSB0aGUgbmV3bGluZSBhcmd1bWVudC4gVGhpcyB1c2VkIHRvIGJlIGRvbmUgd2l0aCB0aGUgJ3onCi0gICAgICAgc3BlY2lmaWVyLCBob3dldmVyIHRoaXMgYWxsb3dlZCBhbnkgb2JqZWN0IHdpdGggdGhlIGJ1ZmZlciBpbnRlcmZhY2UgdG8KLSAgICAgICBiZSBjb252ZXJ0ZWQuIFRodXMgd2UgaGF2ZSB0byBwYXJzZSBpdCBtYW51YWxseSBzaW5jZSB3ZSBvbmx5IHdhbnQgdG8KLSAgICAgICBhbGxvdyB1bmljb2RlIG9iamVjdHMgb3IgTm9uZS4gKi8KKyAgICAvKiBQYXJzZSB0aGUgbmV3bGluZSBhcmd1bWVudC4gV2Ugb25seSB3YW50IHRvIGFsbG93IHVuaWNvZGUgb2JqZWN0cyBvcgorICAgICAgIE5vbmUuICovCiAgICAgaWYgKG5ld2xpbmVfb2JqID09IFB5X05vbmUpIHsKICAgICAgICAgbmV3bGluZSA9IE5VTEw7CiAgICAgfQpAQCAtNzYxLDMzICs3OTgsNDUgQEAKIAogLyogUHJvcGVydGllcyBhbmQgcHNldWRvLXByb3BlcnRpZXMgKi8KIAotUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3JlYWRhYmxlX2RvYywKLSJyZWFkYWJsZSgpIC0+IGJvb2wuIFJldHVybnMgVHJ1ZSBpZiB0aGUgSU8gb2JqZWN0IGNhbiBiZSByZWFkLiIpOworLypbY2xpbmljIGlucHV0XQorX2lvLlN0cmluZ0lPLnJlYWRhYmxlCiAKLVB5RG9jX1NUUlZBUihzdHJpbmdpb193cml0YWJsZV9kb2MsCi0id3JpdGFibGUoKSAtPiBib29sLiBSZXR1cm5zIFRydWUgaWYgdGhlIElPIG9iamVjdCBjYW4gYmUgd3JpdHRlbi4iKTsKLQotUHlEb2NfU1RSVkFSKHN0cmluZ2lvX3NlZWthYmxlX2RvYywKLSJzZWVrYWJsZSgpIC0+IGJvb2wuIFJldHVybnMgVHJ1ZSBpZiB0aGUgSU8gb2JqZWN0IGNhbiBiZSBzZWVrZWQuIik7CitSZXR1cm5zIFRydWUgaWYgdGhlIElPIG9iamVjdCBjYW4gYmUgcmVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXN0cmluZ2lvX3NlZWthYmxlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19TdHJpbmdJT19yZWFkYWJsZV9pbXBsKHN0cmluZ2lvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWIxOWQ0NGRkOGIxY2ViOTkgaW5wdXQ9MzljZTA2OGIyMjRjMjFhZF0qLwogewogICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOwogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKICAgICBQeV9SRVRVUk5fVFJVRTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLlN0cmluZ0lPLndyaXRhYmxlCisKK1JldHVybnMgVHJ1ZSBpZiB0aGUgSU8gb2JqZWN0IGNhbiBiZSB3cml0dGVuLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotc3RyaW5naW9fcmVhZGFibGUoc3RyaW5naW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1N0cmluZ0lPX3dyaXRhYmxlX2ltcGwoc3RyaW5naW8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTNlNGRkNzcxODcwNzRjYSBpbnB1dD03YTY5MTM1M2FhYzM4ODM1XSovCiB7CiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogICAgIFB5X1JFVFVSTl9UUlVFOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uU3RyaW5nSU8uc2Vla2FibGUKKworUmV0dXJucyBUcnVlIGlmIHRoZSBJTyBvYmplY3QgY2FuIGJlIHNlZWtlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXN0cmluZ2lvX3dyaXRhYmxlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19TdHJpbmdJT19zZWVrYWJsZV9pbXBsKHN0cmluZ2lvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRkMjBiNDY0MWM3NTY4NzkgaW5wdXQ9NGM2MDZkMDViMzI5NTJlNl0qLwogewogICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOwogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKQEAgLTgwOSw3ICs4NTgsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHN0cmluZ2lvX2dldHN0YXRlKHN0cmluZ2lvICpzZWxmKQogewotICAgIFB5T2JqZWN0ICppbml0dmFsdWUgPSBzdHJpbmdpb19nZXR2YWx1ZShzZWxmKTsKKyAgICBQeU9iamVjdCAqaW5pdHZhbHVlID0gX2lvX1N0cmluZ0lPX2dldHZhbHVlX2ltcGwoc2VsZik7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKnN0YXRlOwogCkBAIC04NTcsMTUgKzkwNiwxNSBAQAogICAgIGluaXRhcmcgPSBQeVR1cGxlX0dldFNsaWNlKHN0YXRlLCAwLCAyKTsKICAgICBpZiAoaW5pdGFyZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoc3RyaW5naW9faW5pdChzZWxmLCBpbml0YXJnLCBOVUxMKSA8IDApIHsKKyAgICBpZiAoX2lvX1N0cmluZ0lPX19faW5pdF9fKChQeU9iamVjdCAqKXNlbGYsIGluaXRhcmcsIE5VTEwpIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYoaW5pdGFyZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9ERUNSRUYoaW5pdGFyZyk7CiAKICAgICAvKiBSZXN0b3JlIHRoZSBidWZmZXIgc3RhdGUuIEV2ZW4gaWYgX19pbml0X18gZGlkIGluaXRpYWxpemUgdGhlIGJ1ZmZlciwKLSAgICAgICB3ZSBoYXZlIHRvIGluaXRpYWxpemUgaXQgYWdhaW4gc2luY2UgX19pbml0X18gbWF5IHRyYW5zbGF0ZXMgdGhlCi0gICAgICAgbmV3bGluZXMgaW4gdGhlIGluaXRhbF92YWx1ZSBzdHJpbmcuIFdlIGNsZWFybHkgZG8gbm90IHdhbnQgdGhhdAorICAgICAgIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSBpdCBhZ2FpbiBzaW5jZSBfX2luaXRfXyBtYXkgdHJhbnNsYXRlIHRoZQorICAgICAgIG5ld2xpbmVzIGluIHRoZSBpbml0aWFsX3ZhbHVlIHN0cmluZy4gV2UgY2xlYXJseSBkbyBub3Qgd2FudCB0aGF0CiAgICAgICAgYmVjYXVzZSB0aGUgc3RyaW5nIHZhbHVlIGluIHRoZSBzdGF0ZSB0dXBsZSBoYXMgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQKICAgICAgICBvbmNlIGJ5IF9faW5pdF9fLiBTbyB3ZSBkbyBub3QgdGFrZSBhbnkgY2hhbmNlIGFuZCByZXBsYWNlIG9iamVjdCdzCiAgICAgICAgYnVmZmVyIGNvbXBsZXRlbHkuICovCkBAIC05NTksMTkgKzEwMDgsMjEgQEAKICAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0cihzZWxmLT5kZWNvZGVyLCBfUHlJT19zdHJfbmV3bGluZXMpOwogfQogCi1zdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHN0cmluZ2lvX21ldGhvZHNbXSA9IHsKLSAgICB7ImNsb3NlIiwgICAgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX2Nsb3NlLCAgICBNRVRIX05PQVJHUywgIHN0cmluZ2lvX2Nsb3NlX2RvY30sCi0gICAgeyJnZXR2YWx1ZSIsIChQeUNGdW5jdGlvbilzdHJpbmdpb19nZXR2YWx1ZSwgTUVUSF9OT0FSR1MsICBzdHJpbmdpb19nZXR2YWx1ZV9kb2N9LAotICAgIHsicmVhZCIsICAgICAoUHlDRnVuY3Rpb24pc3RyaW5naW9fcmVhZCwgICAgIE1FVEhfVkFSQVJHUywgc3RyaW5naW9fcmVhZF9kb2N9LAotICAgIHsicmVhZGxpbmUiLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fcmVhZGxpbmUsIE1FVEhfVkFSQVJHUywgc3RyaW5naW9fcmVhZGxpbmVfZG9jfSwKLSAgICB7InRlbGwiLCAgICAgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3RlbGwsICAgICBNRVRIX05PQVJHUywgIHN0cmluZ2lvX3RlbGxfZG9jfSwKLSAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1MsIHN0cmluZ2lvX3RydW5jYXRlX2RvY30sCi0gICAgeyJzZWVrIiwgICAgIChQeUNGdW5jdGlvbilzdHJpbmdpb19zZWVrLCAgICAgTUVUSF9WQVJBUkdTLCBzdHJpbmdpb19zZWVrX2RvY30sCi0gICAgeyJ3cml0ZSIsICAgIChQeUNGdW5jdGlvbilzdHJpbmdpb193cml0ZSwgICAgTUVUSF9PLCAgICAgICBzdHJpbmdpb193cml0ZV9kb2N9LAorI2luY2x1ZGUgImNsaW5pYy9zdHJpbmdpby5jLmgiCiAKLSAgICB7InNlZWthYmxlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3NlZWthYmxlLCBNRVRIX05PQVJHUywgc3RyaW5naW9fc2Vla2FibGVfZG9jfSwKLSAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3JlYWRhYmxlLCBNRVRIX05PQVJHUywgc3RyaW5naW9fcmVhZGFibGVfZG9jfSwKLSAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3dyaXRhYmxlLCBNRVRIX05PQVJHUywgc3RyaW5naW9fd3JpdGFibGVfZG9jfSwKK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgc3RyaW5naW9fbWV0aG9kc1tdID0geworICAgIF9JT19TVFJJTkdJT19DTE9TRV9NRVRIT0RERUYKKyAgICBfSU9fU1RSSU5HSU9fR0VUVkFMVUVfTUVUSE9EREVGCisgICAgX0lPX1NUUklOR0lPX1JFQURfTUVUSE9EREVGCisgICAgX0lPX1NUUklOR0lPX1JFQURMSU5FX01FVEhPRERFRgorICAgIF9JT19TVFJJTkdJT19URUxMX01FVEhPRERFRgorICAgIF9JT19TVFJJTkdJT19UUlVOQ0FURV9NRVRIT0RERUYKKyAgICBfSU9fU1RSSU5HSU9fU0VFS19NRVRIT0RERUYKKyAgICBfSU9fU1RSSU5HSU9fV1JJVEVfTUVUSE9EREVGCisKKyAgICBfSU9fU1RSSU5HSU9fU0VFS0FCTEVfTUVUSE9EREVGCisgICAgX0lPX1NUUklOR0lPX1JFQURBQkxFX01FVEhPRERFRgorICAgIF9JT19TVFJJTkdJT19XUklUQUJMRV9NRVRIT0RERUYKIAogICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAgICAgeyJfX3NldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fc2V0c3RhdGUsIE1FVEhfT30sCkBAIC0xMDEzLDcgKzEwNjQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQogICAgICAgICAgICAgICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KLSAgICBzdHJpbmdpb19kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIF9pb19TdHJpbmdJT19fX2luaXRfX19fZG9jX18sICAgICAgICAgICAgICAvKnRwX2RvYyovCiAgICAgKHRyYXZlcnNlcHJvYylzdHJpbmdpb190cmF2ZXJzZSwgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwogICAgIChpbnF1aXJ5KXN0cmluZ2lvX2NsZWFyLCAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCkBAIC0xMDI4LDcgKzEwNzksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KICAgICBvZmZzZXRvZihzdHJpbmdpbywgZGljdCksICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAoaW5pdHByb2Mpc3RyaW5naW9faW5pdCwgICAgICAgICAgICAgICAgICAgLyp0cF9pbml0Ki8KKyAgICBfaW9fU3RyaW5nSU9fX19pbml0X18sICAgICAgICAgICAgICAgICAgICAgLyp0cF9pbml0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgc3RyaW5naW9fbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby90ZXh0aW8uYyBiL01vZHVsZXMvX2lvL3RleHRpby5jCmluZGV4IDBjMWIxM2UuLjA2M2NhYTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL3RleHRpby5jCisrKyBiL01vZHVsZXMvX2lvL3RleHRpby5jCkBAIC0xMSw2ICsxMSwyMCBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgIl9pb21vZHVsZS5oIgogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgX2lvCitjbGFzcyBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciAibmxkZWNvZGVyX29iamVjdCAqIiAiJlB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9UeXBlIgorY2xhc3MgX2lvLlRleHRJT1dyYXBwZXIgInRleHRpbyAqIiAiJlRleHRJT1dyYXBwZXJfVFlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTIwOTdhNGZjODU2NzBjMjZdKi8KKworLypbcHl0aG9uIGlucHV0XQorY2xhc3MgaW9fc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGNvbnZlcnRlciA9ICdfUHlJT19Db252ZXJ0U3NpemVfdCcKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWQwYTgxMWQzY2JmZDFiMzNdKi8KKwogX1B5X0lERU5USUZJRVIoY2xvc2UpOwogX1B5X0lERU5USUZJRVIoX2RlYWxsb2Nfd2Fybik7CiBfUHlfSURFTlRJRklFUihkZWNvZGUpOwpAQCAtMjEwLDM4ICsyMjQsMzcgQEAKIAogLyogSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciAqLwogCi1QeURvY19TVFJWQVIoaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9kb2MsCi0gICAgIkNvZGVjIHVzZWQgd2hlbiByZWFkaW5nIGEgZmlsZSBpbiB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS4gIEl0IHdyYXBzXG4iCi0gICAgImFub3RoZXIgaW5jcmVtZW50YWwgZGVjb2RlciwgdHJhbnNsYXRpbmcgXFxyXFxuIGFuZCBcXHIgaW50byBcXG4uICBJdCBhbHNvXG4iCi0gICAgInJlY29yZHMgdGhlIHR5cGVzIG9mIG5ld2xpbmVzIGVuY291bnRlcmVkLiAgV2hlbiB1c2VkIHdpdGhcbiIKLSAgICAidHJhbnNsYXRlPUZhbHNlLCBpdCBlbnN1cmVzIHRoYXQgdGhlIG5ld2xpbmUgc2VxdWVuY2UgaXMgcmV0dXJuZWQgaW5cbiIKLSAgICAib25lIHBpZWNlLiBXaGVuIHVzZWQgd2l0aCBkZWNvZGVyPU5vbmUsIGl0IGV4cGVjdHMgdW5pY29kZSBzdHJpbmdzIGFzXG4iCi0gICAgImRlY29kZSBpbnB1dCBhbmQgdHJhbnNsYXRlcyBuZXdsaW5lcyB3aXRob3V0IGZpcnN0IGludm9raW5nIGFuIGV4dGVybmFsXG4iCi0gICAgImRlY29kZXIuXG4iCi0gICAgKTsKLQogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeU9iamVjdCAqZGVjb2RlcjsKICAgICBQeU9iamVjdCAqZXJyb3JzOwotICAgIHNpZ25lZCBpbnQgcGVuZGluZ2NyOiAxOwotICAgIHNpZ25lZCBpbnQgdHJhbnNsYXRlOiAxOworICAgIHVuc2lnbmVkIGludCBwZW5kaW5nY3I6IDE7CisgICAgdW5zaWduZWQgaW50IHRyYW5zbGF0ZTogMTsKICAgICB1bnNpZ25lZCBpbnQgc2Vlbm5sOiAzOwogfSBubGRlY29kZXJfb2JqZWN0OwogCisvKltjbGluaWMgaW5wdXRdCitfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlci5fX2luaXRfXworICAgIGRlY29kZXI6IG9iamVjdAorICAgIHRyYW5zbGF0ZTogaW50CisgICAgZXJyb3JzOiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSAic3RyaWN0IgorCitDb2RlYyB1c2VkIHdoZW4gcmVhZGluZyBhIGZpbGUgaW4gdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuCisKK0l0IHdyYXBzIGFub3RoZXIgaW5jcmVtZW50YWwgZGVjb2RlciwgdHJhbnNsYXRpbmcgXHJcbiBhbmQgXHIgaW50byBcbi4KK0l0IGFsc28gcmVjb3JkcyB0aGUgdHlwZXMgb2YgbmV3bGluZXMgZW5jb3VudGVyZWQuICBXaGVuIHVzZWQgd2l0aAordHJhbnNsYXRlPUZhbHNlLCBpdCBlbnN1cmVzIHRoYXQgdGhlIG5ld2xpbmUgc2VxdWVuY2UgaXMgcmV0dXJuZWQgaW4KK29uZSBwaWVjZS4gV2hlbiB1c2VkIHdpdGggZGVjb2Rlcj1Ob25lLCBpdCBleHBlY3RzIHVuaWNvZGUgc3RyaW5ncyBhcworZGVjb2RlIGlucHV0IGFuZCB0cmFuc2xhdGVzIG5ld2xpbmVzIHdpdGhvdXQgZmlyc3QgaW52b2tpbmcgYW4gZXh0ZXJuYWwKK2RlY29kZXIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBpbnQKLWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfaW5pdChubGRlY29kZXJfb2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX19faW5pdF9fX2ltcGwobmxkZWNvZGVyX29iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlY29kZXIsIGludCB0cmFuc2xhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmJkMDRkNDQzZTc2NGVjMiBpbnB1dD04OWRiNmIxOWM2YjEyNmJmXSovCiB7Ci0gICAgUHlPYmplY3QgKmRlY29kZXI7Ci0gICAgaW50IHRyYW5zbGF0ZTsKLSAgICBQeU9iamVjdCAqZXJyb3JzID0gTlVMTDsKLSAgICBjaGFyICprd2xpc3RbXSA9IHsiZGVjb2RlciIsICJ0cmFuc2xhdGUiLCAiZXJyb3JzIiwgTlVMTH07Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT2l8TzpJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZkZWNvZGVyLCAmdHJhbnNsYXRlLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCiAgICAgc2VsZi0+ZGVjb2RlciA9IGRlY29kZXI7CiAgICAgUHlfSU5DUkVGKGRlY29kZXIpOwogCkBAIC00OTUsMjIgKzUwOCwyNyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9kZWNvZGUobmxkZWNvZGVyX29iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKLXsKLSAgICBjaGFyICprd2xpc3RbXSA9IHsiaW5wdXQiLCAiZmluYWwiLCBOVUxMfTsKLSAgICBQeU9iamVjdCAqaW5wdXQ7Ci0gICAgaW50IGZpbmFsID0gMDsKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyLmRlY29kZQorICAgIGlucHV0OiBvYmplY3QKKyAgICBmaW5hbDogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfGk6SW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmaW5wdXQsICZmaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOworc3RhdGljIFB5T2JqZWN0ICoKK19pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX2RlY29kZV9pbXBsKG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW5wdXQsIGludCBmaW5hbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wZDQ4Njc1NWJiMzdhNjZlIGlucHV0PWQ2NTY3NzM4NWJmZDY4MjddKi8KK3sKICAgICByZXR1cm4gX1B5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9kZWNvZGUoKFB5T2JqZWN0ICopIHNlbGYsIGlucHV0LCBmaW5hbCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyLmdldHN0YXRlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2dldHN0YXRlKG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfZ2V0c3RhdGVfaW1wbChubGRlY29kZXJfb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWYwZDJjOWMxMzZmNGUwZDAgaW5wdXQ9ZjhmZjEwMTgyNWUzMmU3Zl0qLwogewogICAgIFB5T2JqZWN0ICpidWZmZXI7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIGZsYWc7CkBAIC01MjAsNyArNTM4LDcgQEAKICAgICAgICAgICAgX1B5SU9fc3RyX2dldHN0YXRlLCBOVUxMKTsKICAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZShzdGF0ZSwgIihPSykiLCAmYnVmZmVyLCAmZmxhZykpIHsKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiT0siLCAmYnVmZmVyLCAmZmxhZykpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtNTM3LDE2ICs1NTUsMjQgQEAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTksiLCBidWZmZXIsIGZsYWcpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlci5zZXRzdGF0ZQorICAgIHN0YXRlOiBvYmplY3QKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX3NldHN0YXRlKG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdGF0ZSkKK19pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX3NldHN0YXRlKG5sZGVjb2Rlcl9vYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhdGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzEwYzYyMjUwOGI1NzZjYiBpbnB1dD1jNTNmYjUwNWE3NmRiYmUyXSovCiB7CiAgICAgUHlPYmplY3QgKmJ1ZmZlcjsKICAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgZmxhZzsKIAotICAgIGlmICghUHlBcmdfUGFyc2Uoc3RhdGUsICIoT0spIiwgJmJ1ZmZlciwgJmZsYWcpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgIk9LIiwgJmJ1ZmZlciwgJmZsYWcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPnBlbmRpbmdjciA9IChpbnQpIGZsYWcgJiAxOworICAgIHNlbGYtPnBlbmRpbmdjciA9IChpbnQpIChmbGFnICYgMSk7CiAgICAgZmxhZyA+Pj0gMTsKIAogICAgIGlmIChzZWxmLT5kZWNvZGVyICE9IFB5X05vbmUpCkBAIC01NTYsOCArNTgyLDEzIEBACiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlci5yZXNldAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9yZXNldChubGRlY29kZXJfb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX3Jlc2V0X2ltcGwobmxkZWNvZGVyX29iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zMmZhNDBjNzQ2MmFhOGZmIGlucHV0PTcyODY3OGRkYWVhNzc2ZGZdKi8KIHsKICAgICBzZWxmLT5zZWVubmwgPSAwOwogICAgIHNlbGYtPnBlbmRpbmdjciA9IDA7CkBAIC01OTEsOTUgKzYyMiw4IEBACiAKIH0KIAotCi1zdGF0aWMgUHlNZXRob2REZWYgaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24paW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9kZWNvZGUsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKLSAgICB7ImdldHN0YXRlIiwgKFB5Q0Z1bmN0aW9uKWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKLSAgICB7InNldHN0YXRlIiwgKFB5Q0Z1bmN0aW9uKWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfc2V0c3RhdGUsIE1FVEhfT30sCi0gICAgeyJyZXNldCIsIChQeUNGdW5jdGlvbilpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX3Jlc2V0LCBNRVRIX05PQVJHU30sCi0gICAge05VTEx9Ci19OwotCi1zdGF0aWMgUHlHZXRTZXREZWYgaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9nZXRzZXRbXSA9IHsKLSAgICB7Im5ld2xpbmVzIiwgKGdldHRlcilpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX25ld2xpbmVzX2dldCwgTlVMTCwgTlVMTH0sCi0gICAge05VTEx9Ci19OwotCi1QeVR5cGVPYmplY3QgUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX1R5cGUgPSB7Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgIl9pby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyIiwgLyp0cF9uYW1lKi8KLSAgICBzaXplb2YobmxkZWNvZGVyX29iamVjdCksIC8qdHBfYmFzaWNzaXplKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCi0gICAgKGRlc3RydWN0b3IpaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9kZWFsbG9jLCAvKnRwX2RlYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KLSAgICBpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2RvYywgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9tZXRob2RzLCAvKiB0cF9tZXRob2RzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KLSAgICBpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX2dldHNldCwgLyogdHBfZ2V0c2V0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICAoaW5pdHByb2MpaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9pbml0LCAvKiB0cF9pbml0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCi0gICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLwotfTsKLQotCiAvKiBUZXh0SU9XcmFwcGVyICovCiAKLVB5RG9jX1NUUlZBUih0ZXh0aW93cmFwcGVyX2RvYywKLSAgICAiQ2hhcmFjdGVyIGFuZCBsaW5lIGJhc2VkIGxheWVyIG92ZXIgYSBCdWZmZXJlZElPQmFzZSBvYmplY3QsIGJ1ZmZlci5cbiIKLSAgICAiXG4iCi0gICAgImVuY29kaW5nIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB0aGF0IHRoZSBzdHJlYW0gd2lsbCBiZVxuIgotICAgICJkZWNvZGVkIG9yIGVuY29kZWQgd2l0aC4gSXQgZGVmYXVsdHMgdG8gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKS5cbiIKLSAgICAiXG4iCi0gICAgImVycm9ycyBkZXRlcm1pbmVzIHRoZSBzdHJpY3RuZXNzIG9mIGVuY29kaW5nIGFuZCBkZWNvZGluZyAoc2VlXG4iCi0gICAgImhlbHAoY29kZWNzLkNvZGVjKSBvciB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgY29kZWNzLnJlZ2lzdGVyKSBhbmRcbiIKLSAgICAiZGVmYXVsdHMgdG8gXCJzdHJpY3RcIi5cbiIKLSAgICAiXG4iCi0gICAgIm5ld2xpbmUgY29udHJvbHMgaG93IGxpbmUgZW5kaW5ncyBhcmUgaGFuZGxlZC4gSXQgY2FuIGJlIE5vbmUsICcnLFxuIgotICAgICInXFxuJywgJ1xccicsIGFuZCAnXFxyXFxuJy4gIEl0IHdvcmtzIGFzIGZvbGxvd3M6XG4iCi0gICAgIlxuIgotICAgICIqIE9uIGlucHV0LCBpZiBuZXdsaW5lIGlzIE5vbmUsIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzXG4iCi0gICAgIiAgZW5hYmxlZC4gTGluZXMgaW4gdGhlIGlucHV0IGNhbiBlbmQgaW4gJ1xcbicsICdcXHInLCBvciAnXFxyXFxuJywgYW5kXG4iCi0gICAgIiAgdGhlc2UgYXJlIHRyYW5zbGF0ZWQgaW50byAnXFxuJyBiZWZvcmUgYmVpbmcgcmV0dXJuZWQgdG8gdGhlXG4iCi0gICAgIiAgY2FsbGVyLiBJZiBpdCBpcyAnJywgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSBpcyBlbmFibGVkLCBidXQgbGluZVxuIgotICAgICIgIGVuZGluZ3MgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdW50cmFuc2xhdGVkLiBJZiBpdCBoYXMgYW55IG9mXG4iCi0gICAgIiAgdGhlIG90aGVyIGxlZ2FsIHZhbHVlcywgaW5wdXQgbGluZXMgYXJlIG9ubHkgdGVybWluYXRlZCBieSB0aGUgZ2l2ZW5cbiIKLSAgICAiICBzdHJpbmcsIGFuZCB0aGUgbGluZSBlbmRpbmcgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciB1bnRyYW5zbGF0ZWQuXG4iCi0gICAgIlxuIgotICAgICIqIE9uIG91dHB1dCwgaWYgbmV3bGluZSBpcyBOb25lLCBhbnkgJ1xcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZVxuIgotICAgICIgIHRyYW5zbGF0ZWQgdG8gdGhlIHN5c3RlbSBkZWZhdWx0IGxpbmUgc2VwYXJhdG9yLCBvcy5saW5lc2VwLiBJZlxuIgotICAgICIgIG5ld2xpbmUgaXMgJycgb3IgJ1xcbicsIG5vIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlLiBJZiBuZXdsaW5lIGlzIGFueVxuIgotICAgICIgIG9mIHRoZSBvdGhlciBsZWdhbCB2YWx1ZXMsIGFueSAnXFxuJyBjaGFyYWN0ZXJzIHdyaXR0ZW4gYXJlIHRyYW5zbGF0ZWRcbiIKLSAgICAiICB0byB0aGUgZ2l2ZW4gc3RyaW5nLlxuIgotICAgICJcbiIKLSAgICAiSWYgbGluZV9idWZmZXJpbmcgaXMgVHJ1ZSwgYSBjYWxsIHRvIGZsdXNoIGlzIGltcGxpZWQgd2hlbiBhIGNhbGwgdG9cbiIKLSAgICAid3JpdGUgY29udGFpbnMgYSBuZXdsaW5lIGNoYXJhY3Rlci4iCi0gICAgKTsKLQogdHlwZWRlZiBQeU9iamVjdCAqCiAgICAgICAgICgqZW5jb2RlZnVuY190KShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIApAQCAtNzQyLDcgKzY4Niw2IEBACiAgICAgUHlPYmplY3QgKmRpY3Q7CiB9IHRleHRpbzsKIAotCiAvKiBBIGNvdXBsZSBvZiBzcGVjaWFsaXplZCBjYXNlcyBpbiBvcmRlciB0byBieXBhc3MgdGhlIHNsb3cgaW5jcmVtZW50YWwKICAgIGVuY29kaW5nIG1ldGhvZHMgZm9yIHRoZSBtb3N0IHBvcHVsYXIgZW5jb2RpbmdzLiAqLwogCkBAIC04NDMsMjggKzc4Niw1OSBAQAogfTsKIAogCi1zdGF0aWMgaW50Ci10ZXh0aW93cmFwcGVyX2luaXQodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCi17Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7ImJ1ZmZlciIsICJlbmNvZGluZyIsICJlcnJvcnMiLAotICAgICAgICAgICAgICAgICAgICAgICJuZXdsaW5lIiwgImxpbmVfYnVmZmVyaW5nIiwgIndyaXRlX3Rocm91Z2giLAotICAgICAgICAgICAgICAgICAgICAgIE5VTEx9OwotICAgIFB5T2JqZWN0ICpidWZmZXIsICpyYXcsICpjb2RlY19pbmZvID0gTlVMTDsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBjaGFyICpuZXdsaW5lID0gTlVMTDsKLSAgICBpbnQgbGluZV9idWZmZXJpbmcgPSAwLCB3cml0ZV90aHJvdWdoID0gMDsKLSAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBOVUxMOworLypbY2xpbmljIGlucHV0XQorX2lvLlRleHRJT1dyYXBwZXIuX19pbml0X18KKyAgICBidWZmZXI6IG9iamVjdAorICAgIGVuY29kaW5nOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgbmV3bGluZTogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIGxpbmVfYnVmZmVyaW5nOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorICAgIHdyaXRlX3Rocm91Z2g6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCiAKK0NoYXJhY3RlciBhbmQgbGluZSBiYXNlZCBsYXllciBvdmVyIGEgQnVmZmVyZWRJT0Jhc2Ugb2JqZWN0LCBidWZmZXIuCisKK2VuY29kaW5nIGdpdmVzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB0aGF0IHRoZSBzdHJlYW0gd2lsbCBiZQorZGVjb2RlZCBvciBlbmNvZGVkIHdpdGguIEl0IGRlZmF1bHRzIHRvIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkuCisKK2Vycm9ycyBkZXRlcm1pbmVzIHRoZSBzdHJpY3RuZXNzIG9mIGVuY29kaW5nIGFuZCBkZWNvZGluZyAoc2VlCitoZWxwKGNvZGVjcy5Db2RlYykgb3IgdGhlIGRvY3VtZW50YXRpb24gZm9yIGNvZGVjcy5yZWdpc3RlcikgYW5kCitkZWZhdWx0cyB0byAic3RyaWN0Ii4KKworbmV3bGluZSBjb250cm9scyBob3cgbGluZSBlbmRpbmdzIGFyZSBoYW5kbGVkLiBJdCBjYW4gYmUgTm9uZSwgJycsCisnXG4nLCAnXHInLCBhbmQgJ1xyXG4nLiAgSXQgd29ya3MgYXMgZm9sbG93czoKKworKiBPbiBpbnB1dCwgaWYgbmV3bGluZSBpcyBOb25lLCB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcworICBlbmFibGVkLiBMaW5lcyBpbiB0aGUgaW5wdXQgY2FuIGVuZCBpbiAnXG4nLCAnXHInLCBvciAnXHJcbicsIGFuZAorICB0aGVzZSBhcmUgdHJhbnNsYXRlZCBpbnRvICdcbicgYmVmb3JlIGJlaW5nIHJldHVybmVkIHRvIHRoZQorICBjYWxsZXIuIElmIGl0IGlzICcnLCB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGlzIGVuYWJsZWQsIGJ1dCBsaW5lCisgIGVuZGluZ3MgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgdW50cmFuc2xhdGVkLiBJZiBpdCBoYXMgYW55IG9mCisgIHRoZSBvdGhlciBsZWdhbCB2YWx1ZXMsIGlucHV0IGxpbmVzIGFyZSBvbmx5IHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuCisgIHN0cmluZywgYW5kIHRoZSBsaW5lIGVuZGluZyBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIHVudHJhbnNsYXRlZC4KKworKiBPbiBvdXRwdXQsIGlmIG5ld2xpbmUgaXMgTm9uZSwgYW55ICdcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZQorICB0cmFuc2xhdGVkIHRvIHRoZSBzeXN0ZW0gZGVmYXVsdCBsaW5lIHNlcGFyYXRvciwgb3MubGluZXNlcC4gSWYKKyAgbmV3bGluZSBpcyAnJyBvciAnXG4nLCBubyB0cmFuc2xhdGlvbiB0YWtlcyBwbGFjZS4gSWYgbmV3bGluZSBpcyBhbnkKKyAgb2YgdGhlIG90aGVyIGxlZ2FsIHZhbHVlcywgYW55ICdcbicgY2hhcmFjdGVycyB3cml0dGVuIGFyZSB0cmFuc2xhdGVkCisgIHRvIHRoZSBnaXZlbiBzdHJpbmcuCisKK0lmIGxpbmVfYnVmZmVyaW5nIGlzIFRydWUsIGEgY2FsbCB0byBmbHVzaCBpcyBpbXBsaWVkIHdoZW4gYSBjYWxsIHRvCit3cml0ZSBjb250YWlucyBhIG5ld2xpbmUgY2hhcmFjdGVyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgaW50CitfaW9fVGV4dElPV3JhcHBlcl9fX2luaXRfX19pbXBsKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGxpbmVfYnVmZmVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd3JpdGVfdGhyb3VnaCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NmE4MzQwMmNlMmE4MzgxIGlucHV0PTMxMjZjYjMxMDFhMmM5OWJdKi8KK3sKKyAgICBQeU9iamVjdCAqcmF3LCAqY29kZWNfaW5mbyA9IE5VTEw7CisgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGludCByOwogCiAgICAgc2VsZi0+b2sgPSAwOwogICAgIHNlbGYtPmRldGFjaGVkID0gMDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3x6enppaTpmaWxlaW8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmJ1ZmZlciwgJmVuY29kaW5nLCAmZXJyb3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdsaW5lLCAmbGluZV9idWZmZXJpbmcsICZ3cml0ZV90aHJvdWdoKSkKLSAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKG5ld2xpbmUgJiYgbmV3bGluZVswXSAhPSAnXDAnCiAgICAgICAgICYmICEobmV3bGluZVswXSA9PSAnXG4nICYmIG5ld2xpbmVbMV0gPT0gJ1wwJykKQEAgLTEwMjEsOCArOTk1LDcgQEAKICAgICAgICAgICAgICAgICAiT2kiLCBzZWxmLT5kZWNvZGVyLCAoaW50KXNlbGYtPnJlYWR0cmFuc2xhdGUpOwogICAgICAgICAgICAgaWYgKGluY3JlbWVudGFsRGVjb2RlciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVyKTsKLSAgICAgICAgICAgIHNlbGYtPmRlY29kZXIgPSBpbmNyZW1lbnRhbERlY29kZXI7CisgICAgICAgICAgICBQeV9YU0VUUkVGKHNlbGYtPmRlY29kZXIsIGluY3JlbWVudGFsRGVjb2Rlcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyNDQsOCArMTIxNywxMyBAQAogICAgIH0KIAogCisvKltjbGluaWMgaW5wdXRdCitfaW8uVGV4dElPV3JhcHBlci5kZXRhY2gKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXRleHRpb3dyYXBwZXJfZGV0YWNoKHRleHRpbyAqc2VsZikKK19pb19UZXh0SU9XcmFwcGVyX2RldGFjaF9pbXBsKHRleHRpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03YmEzNzE1Y2QwMzJkNWYyIGlucHV0PWU1YTcxZmJkYTllMWQ5ZjldKi8KIHsKICAgICBQeU9iamVjdCAqYnVmZmVyLCAqcmVzOwogICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwpAQCAtMTI5MCwyNSArMTI2OCwyNiBAQAogICAgIHJldHVybiAwOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uVGV4dElPV3JhcHBlci53cml0ZQorICAgIHRleHQ6IHVuaWNvZGUKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi10ZXh0aW93cmFwcGVyX3dyaXRlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fVGV4dElPV3JhcHBlcl93cml0ZV9pbXBsKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKnRleHQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDJkZWIwZDUwNzcxZmNlYyBpbnB1dD1mZGYxOTE1MzU4NGEwZTQ0XSovCiB7CiAgICAgUHlPYmplY3QgKnJldDsKLSAgICBQeU9iamVjdCAqdGV4dDsgLyogb3duZWQgcmVmZXJlbmNlICovCiAgICAgUHlPYmplY3QgKmI7CiAgICAgUHlfc3NpemVfdCB0ZXh0bGVuOwogICAgIGludCBoYXNsZiA9IDA7CiAgICAgaW50IG5lZWRmbHVzaCA9IDAsIHRleHRfbmVlZGZsdXNoID0gMDsKIAotICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOndyaXRlIiwgJnRleHQpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodGV4dCkgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogCiAgICAgaWYgKHNlbGYtPmVuY29kZXIgPT0gTlVMTCkKQEAgLTEzOTQsOCArMTM3Myw3IEBACiBzdGF0aWMgdm9pZAogdGV4dGlvd3JhcHBlcl9zZXRfZGVjb2RlZF9jaGFycyh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICpjaGFycykKIHsKLSAgICBQeV9DTEVBUihzZWxmLT5kZWNvZGVkX2NoYXJzKTsKLSAgICBzZWxmLT5kZWNvZGVkX2NoYXJzID0gY2hhcnM7CisgICAgUHlfWFNFVFJFRihzZWxmLT5kZWNvZGVkX2NoYXJzLCBjaGFycyk7CiAgICAgc2VsZi0+ZGVjb2RlZF9jaGFyc191c2VkID0gMDsKIH0KIApAQCAtMTQ0MSw2ICsxNDE5LDcgQEAKICAgICBQeU9iamVjdCAqZGVjX2J1ZmZlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmRlY19mbGFncyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmlucHV0X2NodW5rID0gTlVMTDsKKyAgICBQeV9idWZmZXIgaW5wdXRfY2h1bmtfYnVmOwogICAgIFB5T2JqZWN0ICpkZWNvZGVkX2NoYXJzLCAqY2h1bmtfc2l6ZTsKICAgICBQeV9zc2l6ZV90IG5ieXRlcywgbmNoYXJzOwogICAgIGludCBlb2Y7CkBAIC0xNDY4LDcgKzE0NDcsMTYgQEAKICAgICAgICAgLyogR2l2ZW4gdGhpcywgd2Uga25vdyB0aGVyZSB3YXMgYSB2YWxpZCBzbmFwc2hvdCBwb2ludAogICAgICAgICAgKiBsZW4oZGVjX2J1ZmZlcikgYnl0ZXMgYWdvIHdpdGggZGVjb2RlciBzdGF0ZSAoYicnLCBkZWNfZmxhZ3MpLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlKHN0YXRlLCAiKE9PKSIsICZkZWNfYnVmZmVyLCAmZGVjX2ZsYWdzKSA8IDApIHsKKyAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJPTyIsICZkZWNfYnVmZmVyLCAmZGVjX2ZsYWdzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soZGVjX2J1ZmZlcikpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRlY29kZXIgZ2V0c3RhdGUoKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBhIGJ5dGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0LCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZGVjX2J1ZmZlciktPnRwX25hbWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtMTQ4NCwyMyArMTQ3MiwyNCBAQAogICAgIGNodW5rX3NpemUgPSBQeUxvbmdfRnJvbVNzaXplX3QoUHlfTUFYKHNlbGYtPmNodW5rX3NpemUsIHNpemVfaGludCkpOwogICAgIGlmIChjaHVua19zaXplID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGlucHV0X2NodW5rID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+YnVmZmVyLAogICAgICAgICAoc2VsZi0+aGFzX3JlYWQxID8gX1B5SU9fc3RyX3JlYWQxOiBfUHlJT19zdHJfcmVhZCksCiAgICAgICAgIGNodW5rX3NpemUsIE5VTEwpOwogICAgIFB5X0RFQ1JFRihjaHVua19zaXplKTsKICAgICBpZiAoaW5wdXRfY2h1bmsgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOwotICAgIGlmICghUHlCeXRlc19DaGVjayhpbnB1dF9jaHVuaykpIHsKKworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoaW5wdXRfY2h1bmssICZpbnB1dF9jaHVua19idWYsIDApICE9IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJ1bmRlcmx5aW5nICVzKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYSBieXRlcyBvYmplY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJ1bmRlcmx5aW5nICVzKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYSBieXRlcy1saWtlIG9iamVjdCwgIgogICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4yMDBzJyIsIChzZWxmLT5oYXNfcmVhZDEgPyAicmVhZDEiOiAicmVhZCIpLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpbnB1dF9jaHVuayktPnRwX25hbWUpOwogICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQogCi0gICAgbmJ5dGVzID0gUHlCeXRlc19TaXplKGlucHV0X2NodW5rKTsKKyAgICBuYnl0ZXMgPSBpbnB1dF9jaHVua19idWYubGVuOwogICAgIGVvZiA9IChuYnl0ZXMgPT0gMCk7Ci0KICAgICBpZiAoUHlfVFlQRShzZWxmLT5kZWNvZGVyKSA9PSAmUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX1R5cGUpIHsKICAgICAgICAgZGVjb2RlZF9jaGFycyA9IF9QeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJfZGVjb2RlKAogICAgICAgICAgICAgc2VsZi0+ZGVjb2RlciwgaW5wdXRfY2h1bmssIGVvZik7CkBAIC0xNTA5LDYgKzE0OTgsNyBAQAogICAgICAgICBkZWNvZGVkX2NoYXJzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+ZGVjb2RlciwKICAgICAgICAgICAgIF9QeUlPX3N0cl9kZWNvZGUsIGlucHV0X2NodW5rLCBlb2YgPyBQeV9UcnVlIDogUHlfRmFsc2UsIE5VTEwpOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZpbnB1dF9jaHVua19idWYpOwogCiAgICAgaWYgKGNoZWNrX2RlY29kZWQoZGVjb2RlZF9jaGFycykgPCAwKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC0xNTI1LDIwICsxNTE1LDEzIEBACiAgICAgICAgIC8qIEF0IHRoZSBzbmFwc2hvdCBwb2ludCwgbGVuKGRlY19idWZmZXIpIGJ5dGVzIGJlZm9yZSB0aGUgcmVhZCwgdGhlCiAgICAgICAgICAqIG5leHQgaW5wdXQgdG8gYmUgZGVjb2RlZCBpcyBkZWNfYnVmZmVyICsgaW5wdXRfY2h1bmsuCiAgICAgICAgICAqLwotICAgICAgICBQeU9iamVjdCAqbmV4dF9pbnB1dCA9IFB5TnVtYmVyX0FkZChkZWNfYnVmZmVyLCBpbnB1dF9jaHVuayk7Ci0gICAgICAgIGlmIChuZXh0X2lucHV0ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIGlmICghUHlCeXRlc19DaGVjayhuZXh0X2lucHV0KSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZGVjb2RlciBnZXRzdGF0ZSgpIHNob3VsZCBoYXZlIHJldHVybmVkIGEgYnl0ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QsIG5vdCAnJS4yMDBzJyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShuZXh0X2lucHV0KS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmV4dF9pbnB1dCk7CisgICAgICAgIFB5T2JqZWN0ICpuZXh0X2lucHV0ID0gZGVjX2J1ZmZlcjsKKyAgICAgICAgUHlCeXRlc19Db25jYXQoJm5leHRfaW5wdXQsIGlucHV0X2NodW5rKTsKKyAgICAgICAgaWYgKG5leHRfaW5wdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgZGVjX2J1ZmZlciA9IE5VTEw7IC8qIFJlZmVyZW5jZSBsb3N0IHRvIFB5Qnl0ZXNfQ29uY2F0ICovCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKGRlY19idWZmZXIpOwotICAgICAgICBQeV9DTEVBUihzZWxmLT5zbmFwc2hvdCk7Ci0gICAgICAgIHNlbGYtPnNuYXBzaG90ID0gUHlfQnVpbGRWYWx1ZSgiTk4iLCBkZWNfZmxhZ3MsIG5leHRfaW5wdXQpOworICAgICAgICBQeV9YU0VUUkVGKHNlbGYtPnNuYXBzaG90LCBQeV9CdWlsZFZhbHVlKCJOTiIsIGRlY19mbGFncywgbmV4dF9pbnB1dCkpOwogICAgIH0KICAgICBQeV9ERUNSRUYoaW5wdXRfY2h1bmspOwogCkBAIC0xNTUxLDE3ICsxNTM0LDE5IEBACiAgICAgcmV0dXJuIC0xOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uVGV4dElPV3JhcHBlci5yZWFkCisgICAgc2l6ZSBhcyBuOiBpb19zc2l6ZV90ID0gLTEKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi10ZXh0aW93cmFwcGVyX3JlYWQodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19UZXh0SU9XcmFwcGVyX3JlYWRfaW1wbCh0ZXh0aW8gKnNlbGYsIFB5X3NzaXplX3QgbikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03ZTY1MWNlNmNjNmEyNWE2IGlucHV0PThjMDkzOTg0MjQwODVjY2FdKi8KIHsKLSAgICBQeV9zc2l6ZV90IG4gPSAtMTsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTCwgKmNodW5rcyA9IE5VTEw7CiAKICAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWQiLCAmX1B5SU9fQ29udmVydFNzaXplX3QsICZuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAKICAgICBpZiAoc2VsZi0+ZGVjb2RlciA9PSBOVUxMKQpAQCAtMTY0Miw4ICsxNjI3LDcgQEAKICAgICAgICAgaWYgKGNodW5rcyAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IE5VTEwgJiYgUHlMaXN0X0FwcGVuZChjaHVua3MsIHJlc3VsdCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfSm9pbihfUHlJT19lbXB0eV9zdHIsIGNodW5rcyk7CisgICAgICAgICAgICBQeV9YU0VUUkVGKHJlc3VsdCwgUHlVbmljb2RlX0pvaW4oX1B5SU9fZW1wdHlfc3RyLCBjaHVua3MpKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgICAgICBQeV9DTEVBUihjaHVua3MpOwpAQCAtMTcyNSw3ICsxNzA5LDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgLyogTm9uLXVuaXZlcnNhbCBtb2RlLiAqLwogICAgICAgICBQeV9zc2l6ZV90IHJlYWRubF9sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZWFkbmwpOwotICAgICAgICBjaGFyICpubCA9IFB5VW5pY29kZV9EQVRBKHJlYWRubCk7CisgICAgICAgIFB5X1VDUzEgKm5sID0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVhZG5sKTsKICAgICAgICAgLyogQXNzdW1lIHRoYXQgcmVhZG5sIGlzIGFuIEFTQ0lJIGNoYXJhY3Rlci4gKi8KICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHJlYWRubCkgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOwogICAgICAgICBpZiAocmVhZG5sX2xlbiA9PSAxKSB7CkBAIC0xOTI3LDE2ICsxOTExLDE4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi10ZXh0aW93cmFwcGVyX3JlYWRsaW5lKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlfc3NpemVfdCBsaW1pdCA9IC0xOworLypbY2xpbmljIGlucHV0XQorX2lvLlRleHRJT1dyYXBwZXIucmVhZGxpbmUKKyAgICBzaXplOiBQeV9zc2l6ZV90ID0gLTEKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKK3N0YXRpYyBQeU9iamVjdCAqCitfaW9fVGV4dElPV3JhcHBlcl9yZWFkbGluZV9pbXBsKHRleHRpbyAqc2VsZiwgUHlfc3NpemVfdCBzaXplKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM0NGFmYTk4ODA0ZThiMjUgaW5wdXQ9NTZjNzE3MjQ4M2IzNmRiNl0qLworewogICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cmVhZGxpbmUiLCAmbGltaXQpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gX3RleHRpb3dyYXBwZXJfcmVhZGxpbmUoc2VsZiwgbGltaXQpOworICAgIHJldHVybiBfdGV4dGlvd3JhcHBlcl9yZWFkbGluZShzZWxmLCBzaXplKTsKIH0KIAogLyogU2VlayBhbmQgVGVsbCAqLwpAQCAtMjA2OCwxOSArMjA1NCwyMyBAQAogICAgICAgICBzZWxmLCBjb29raWUtPnN0YXJ0X3BvcyA9PSAwICYmIGNvb2tpZS0+ZGVjX2ZsYWdzID09IDApOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uVGV4dElPV3JhcHBlci5zZWVrCisgICAgY29va2llIGFzIGNvb2tpZU9iajogb2JqZWN0CisgICAgd2hlbmNlOiBpbnQgPSAwCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotdGV4dGlvd3JhcHBlcl9zZWVrKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fVGV4dElPV3JhcHBlcl9zZWVrX2ltcGwodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqY29va2llT2JqLCBpbnQgd2hlbmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBhMTU2Nzk3NjRlMmQwNGQgaW5wdXQ9MDQ1OGFiZWIzZDc4NDJiZV0qLwogewotICAgIFB5T2JqZWN0ICpjb29raWVPYmosICpwb3NvYmo7CisgICAgUHlPYmplY3QgKnBvc29iajsKICAgICBjb29raWVfdHlwZSBjb29raWU7Ci0gICAgaW50IHdoZW5jZSA9IDA7CiAgICAgUHlPYmplY3QgKnJlczsKICAgICBpbnQgY21wOwogCiAgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aTpzZWVrIiwgJmNvb2tpZU9iaiwgJndoZW5jZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAogICAgIFB5X0lOQ1JFRihjb29raWVPYmopOwpAQCAtMjI1Miw4ICsyMjQyLDEzIEBACiAKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLlRleHRJT1dyYXBwZXIudGVsbAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotdGV4dGlvd3JhcHBlcl90ZWxsKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fVGV4dElPV3JhcHBlcl90ZWxsX2ltcGwodGV4dGlvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRmMTY4YzA4YmYzNGFkNWYgaW5wdXQ9OWEyY2FmODhjMjRmOWRkZl0qLwogewogICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlPYmplY3QgKnBvc29iaiA9IE5VTEw7CkBAIC0yMjYzLDcgKzIyNTgsNiBAQAogICAgIFB5X3NzaXplX3Qgc2tpcF9ieXRlcywgc2tpcF9iYWNrOwogICAgIFB5T2JqZWN0ICpzYXZlZF9zdGF0ZSA9IE5VTEw7CiAgICAgY2hhciAqaW5wdXQsICppbnB1dF9lbmQ7Ci0gICAgY2hhciAqZGVjX2J1ZmZlcjsKICAgICBQeV9zc2l6ZV90IGRlY19idWZmZXJfbGVuOwogICAgIGludCBkZWNfZmxhZ3M7CiAKQEAgLTIzMDYsNyArMjMwMCw3IEBACiAgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIC8qIFNraXAgYmFja3dhcmQgdG8gdGhlIHNuYXBzaG90IHBvaW50IChzZWUgX3JlYWRfY2h1bmspLiAqLwotICAgIGlmICghUHlBcmdfUGFyc2Uoc2VsZi0+c25hcHNob3QsICIoaU8pIiwgJmNvb2tpZS5kZWNfZmxhZ3MsICZuZXh0X2lucHV0KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc2VsZi0+c25hcHNob3QsICJpTyIsICZjb29raWUuZGVjX2ZsYWdzLCAmbmV4dF9pbnB1dCkpCiAgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIGFzc2VydCAoUHlCeXRlc19DaGVjayhuZXh0X2lucHV0KSk7CkBAIC0yMzI4LDE0ICsyMzIyLDI0IEBACiAgICAgICAgIGdvdG8gZmFpbDsKIAogI2RlZmluZSBERUNPREVSX0dFVFNUQVRFKCkgZG8geyBcCisgICAgICAgIFB5T2JqZWN0ICpkZWNfYnVmZmVyOyBcCiAgICAgICAgIFB5T2JqZWN0ICpfc3RhdGUgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5kZWNvZGVyLCBcCiAgICAgICAgICAgICBfUHlJT19zdHJfZ2V0c3RhdGUsIE5VTEwpOyBcCiAgICAgICAgIGlmIChfc3RhdGUgPT0gTlVMTCkgXAogICAgICAgICAgICAgZ290byBmYWlsOyBcCi0gICAgICAgIGlmICghUHlBcmdfUGFyc2UoX3N0YXRlLCAiKHkjaSkiLCAmZGVjX2J1ZmZlciwgJmRlY19idWZmZXJfbGVuLCAmZGVjX2ZsYWdzKSkgeyBcCisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShfc3RhdGUsICJPaSIsICZkZWNfYnVmZmVyLCAmZGVjX2ZsYWdzKSkgeyBcCiAgICAgICAgICAgICBQeV9ERUNSRUYoX3N0YXRlKTsgXAogICAgICAgICAgICAgZ290byBmYWlsOyBcCiAgICAgICAgIH0gXAorICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soZGVjX2J1ZmZlcikpIHsgXAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIGdldHN0YXRlKCkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgYSBieXRlcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0LCBub3QgJyUuMjAwcyciLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShkZWNfYnVmZmVyKS0+dHBfbmFtZSk7IFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihfc3RhdGUpOyBcCisgICAgICAgICAgICBnb3RvIGZhaWw7IFwKKyAgICAgICAgfSBcCisgICAgICAgIGRlY19idWZmZXJfbGVuID0gUHlCeXRlc19HRVRfU0laRShkZWNfYnVmZmVyKTsgXAogICAgICAgICBQeV9ERUNSRUYoX3N0YXRlKTsgXAogICAgIH0gd2hpbGUgKDApCiAKQEAgLTI0NjAsMTYgKzI0NjQsMTkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLlRleHRJT1dyYXBwZXIudHJ1bmNhdGUKKyAgICBwb3M6IG9iamVjdCA9IE5vbmUKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi10ZXh0aW93cmFwcGVyX3RydW5jYXRlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fVGV4dElPV3JhcHBlcl90cnVuY2F0ZV9pbXBsKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKnBvcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05MGVjMmFmYjliYjc3NDVmIGlucHV0PTU2ZWM4YmFhNjVhZWEzNzddKi8KIHsKLSAgICBQeU9iamVjdCAqcG9zID0gUHlfTm9uZTsKICAgICBQeU9iamVjdCAqcmVzOwogCiAgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZikKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnRydW5jYXRlIiwgJnBvcykpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopIHNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQpAQCAtMjUzNCwzNiArMjU0MSw2MSBAQAogCiAvKiBJbnF1aXJpZXMgKi8KIAorLypbY2xpbmljIGlucHV0XQorX2lvLlRleHRJT1dyYXBwZXIuZmlsZW5vCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi10ZXh0aW93cmFwcGVyX2ZpbGVubyh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1RleHRJT1dyYXBwZXJfZmlsZW5vX2ltcGwodGV4dGlvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIxNDkwYTRjM2RhMTNlNmMgaW5wdXQ9YzQ4OGNhODNkMDA2OWY5Yl0qLwogewogICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfZmlsZW5vLCBOVUxMKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLlRleHRJT1dyYXBwZXIuc2Vla2FibGUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXRleHRpb3dyYXBwZXJfc2Vla2FibGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pb19UZXh0SU9XcmFwcGVyX3NlZWthYmxlX2ltcGwodGV4dGlvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWFiMjIzZGJiY2ZmYzBmMDAgaW5wdXQ9OGIwMDVjYTA2ZTFmY2ExM10qLwogewogICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfc2Vla2FibGUsIE5VTEwpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uVGV4dElPV3JhcHBlci5yZWFkYWJsZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotdGV4dGlvd3JhcHBlcl9yZWFkYWJsZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1RleHRJT1dyYXBwZXJfcmVhZGFibGVfaW1wbCh0ZXh0aW8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzJmZjdiYTI4OWE4YTkxYiBpbnB1dD0wNzA0ZWE3ZTAxYjBkM2ViXSovCiB7CiAgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+YnVmZmVyLCAmUHlJZF9yZWFkYWJsZSwgTlVMTCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5UZXh0SU9XcmFwcGVyLndyaXRhYmxlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi10ZXh0aW93cmFwcGVyX3dyaXRhYmxlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fVGV4dElPV3JhcHBlcl93cml0YWJsZV9pbXBsKHRleHRpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNzI4YzcxNzkwZDAzMjAwIGlucHV0PWM0MTc0MGJjOWQ4NjM2ZThdKi8KIHsKICAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX3dyaXRhYmxlLCBOVUxMKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2lvLlRleHRJT1dyYXBwZXIuaXNhdHR5CitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi10ZXh0aW93cmFwcGVyX2lzYXR0eSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1RleHRJT1dyYXBwZXJfaXNhdHR5X2ltcGwodGV4dGlvICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTEyYmUxYTM1YmFjZTg4MmUgaW5wdXQ9ZmI2OGQ5ZjJjOTliYmZmZl0qLwogewogICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfaXNhdHR5LCBOVUxMKTsKQEAgLTI1NzcsOCArMjYwOSwxMyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW8uVGV4dElPV3JhcHBlci5mbHVzaAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotdGV4dGlvd3JhcHBlcl9mbHVzaCh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2lvX1RleHRJT1dyYXBwZXJfZmx1c2hfaW1wbCh0ZXh0aW8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTlkZTkxNjVmOWMyZTRkMiBpbnB1dD05MjhjNjA1OTA2OTRhYjg1XSovCiB7CiAgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwpAQCAtMjU4OCw4ICsyNjI1LDEzIEBACiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+YnVmZmVyLCAmUHlJZF9mbHVzaCwgTlVMTCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pby5UZXh0SU9XcmFwcGVyLmNsb3NlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi10ZXh0aW93cmFwcGVyX2Nsb3NlKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW9fVGV4dElPV3JhcHBlcl9jbG9zZV9pbXBsKHRleHRpbyAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wNTZjY2Y4YjQ4NzZlNGY0IGlucHV0PTljMjExNDMxNWVhZTE5NDhdKi8KIHsKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGludCByOwpAQCAtMjczMywyNCArMjc3NSw4MSBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgUHlNZXRob2REZWYgdGV4dGlvd3JhcHBlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJkZXRhY2giLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9kZXRhY2gsIE1FVEhfTk9BUkdTfSwKLSAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfd3JpdGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJyZWFkIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfcmVhZCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7InJlYWRsaW5lIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfcmVhZGxpbmUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX2ZsdXNoLCBNRVRIX05PQVJHU30sCi0gICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX2Nsb3NlLCBNRVRIX05PQVJHU30sCisjaW5jbHVkZSAiY2xpbmljL3RleHRpby5jLmgiCiAKLSAgICB7ImZpbGVubyIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX2ZpbGVubywgTUVUSF9OT0FSR1N9LAotICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9zZWVrYWJsZSwgTUVUSF9OT0FSR1N9LAotICAgIHsicmVhZGFibGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9yZWFkYWJsZSwgTUVUSF9OT0FSR1N9LAotICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl93cml0YWJsZSwgTUVUSF9OT0FSR1N9LAotICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfaXNhdHR5LCBNRVRIX05PQVJHU30sCitzdGF0aWMgUHlNZXRob2REZWYgaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9tZXRob2RzW10gPSB7CisgICAgX0lPX0lOQ1JFTUVOVEFMTkVXTElORURFQ09ERVJfREVDT0RFX01FVEhPRERFRgorICAgIF9JT19JTkNSRU1FTlRBTE5FV0xJTkVERUNPREVSX0dFVFNUQVRFX01FVEhPRERFRgorICAgIF9JT19JTkNSRU1FTlRBTE5FV0xJTkVERUNPREVSX1NFVFNUQVRFX01FVEhPRERFRgorICAgIF9JT19JTkNSRU1FTlRBTE5FV0xJTkVERUNPREVSX1JFU0VUX01FVEhPRERFRgorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIGluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZ2V0c2V0W10gPSB7CisgICAgeyJuZXdsaW5lcyIsIChnZXR0ZXIpaW5jcmVtZW50YWxuZXdsaW5lZGVjb2Rlcl9uZXdsaW5lc19nZXQsIE5VTEwsIE5VTEx9LAorICAgIHtOVUxMfQorfTsKKworUHlUeXBlT2JqZWN0IFB5SW5jcmVtZW50YWxOZXdsaW5lRGVjb2Rlcl9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciIsIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKG5sZGVjb2Rlcl9vYmplY3QpLCAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIChkZXN0cnVjdG9yKWluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgX2lvX0luY3JlbWVudGFsTmV3bGluZURlY29kZXJfX19pbml0X19fX2RvY19fLCAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBpbmNyZW1lbnRhbG5ld2xpbmVkZWNvZGVyX21ldGhvZHMsIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGluY3JlbWVudGFsbmV3bGluZWRlY29kZXJfZ2V0c2V0LCAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIF9pb19JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyX19faW5pdF9fLCAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworfTsKKworCitzdGF0aWMgUHlNZXRob2REZWYgdGV4dGlvd3JhcHBlcl9tZXRob2RzW10gPSB7CisgICAgX0lPX1RFWFRJT1dSQVBQRVJfREVUQUNIX01FVEhPRERFRgorICAgIF9JT19URVhUSU9XUkFQUEVSX1dSSVRFX01FVEhPRERFRgorICAgIF9JT19URVhUSU9XUkFQUEVSX1JFQURfTUVUSE9EREVGCisgICAgX0lPX1RFWFRJT1dSQVBQRVJfUkVBRExJTkVfTUVUSE9EREVGCisgICAgX0lPX1RFWFRJT1dSQVBQRVJfRkxVU0hfTUVUSE9EREVGCisgICAgX0lPX1RFWFRJT1dSQVBQRVJfQ0xPU0VfTUVUSE9EREVGCisKKyAgICBfSU9fVEVYVElPV1JBUFBFUl9GSUxFTk9fTUVUSE9EREVGCisgICAgX0lPX1RFWFRJT1dSQVBQRVJfU0VFS0FCTEVfTUVUSE9EREVGCisgICAgX0lPX1RFWFRJT1dSQVBQRVJfUkVBREFCTEVfTUVUSE9EREVGCisgICAgX0lPX1RFWFRJT1dSQVBQRVJfV1JJVEFCTEVfTUVUSE9EREVGCisgICAgX0lPX1RFWFRJT1dSQVBQRVJfSVNBVFRZX01FVEhPRERFRgogICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKIAotICAgIHsic2VlayIsIChQeUNGdW5jdGlvbil0ZXh0aW93cmFwcGVyX3NlZWssIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ0ZWxsIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfdGVsbCwgTUVUSF9OT0FSR1N9LAotICAgIHsidHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl90cnVuY2F0ZSwgTUVUSF9WQVJBUkdTfSwKKyAgICBfSU9fVEVYVElPV1JBUFBFUl9TRUVLX01FVEhPRERFRgorICAgIF9JT19URVhUSU9XUkFQUEVSX1RFTExfTUVUSE9EREVGCisgICAgX0lPX1RFWFRJT1dSQVBQRVJfVFJVTkNBVEVfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9CiB9OwogCkBAIC0yNzk2LDcgKzI4OTUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQogICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgLyp0cF9mbGFncyovCi0gICAgdGV4dGlvd3JhcHBlcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIF9pb19UZXh0SU9XcmFwcGVyX19faW5pdF9fX19kb2NfXywgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYyl0ZXh0aW93cmFwcGVyX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KXRleHRpb3dyYXBwZXJfY2xlYXIsIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCkBAIC0yODExLDcgKzI5MTAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgb2Zmc2V0b2YodGV4dGlvLCBkaWN0KSwgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAoaW5pdHByb2MpdGV4dGlvd3JhcHBlcl9pbml0LCAvKiB0cF9pbml0ICovCisgICAgX2lvX1RleHRJT1dyYXBwZXJfX19pbml0X18sIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2pzb24uYyBiL01vZHVsZXMvX2pzb24uYwppbmRleCBkZGVkMmM5Li5mODJhZjM0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19qc29uLmMKKysrIGIvTW9kdWxlcy9fanNvbi5jCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgUHlPYmplY3QgKml0ZW1fc2VwYXJhdG9yOwogICAgIFB5T2JqZWN0ICpzb3J0X2tleXM7CiAgICAgUHlPYmplY3QgKnNraXBrZXlzOwotICAgIGludCBmYXN0X2VuY29kZTsKKyAgICBQeUNGdW5jdGlvbiBmYXN0X2VuY29kZTsKICAgICBpbnQgYWxsb3dfbmFuOwogfSBQeUVuY29kZXJPYmplY3Q7CiAKQEAgLTExNiw4ICsxMTYsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwogc3RhdGljIFB5T2JqZWN0ICoKLWVuY29kZXJfZW5jb2RlX2xvbmcoUHlFbmNvZGVyT2JqZWN0KiBzIFVOVVNFRCwgUHlPYmplY3QgKm9iaik7Ci1zdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKIAogI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICciJykKQEAgLTIyNSwyNiArMjIzLDEyMiBAQAogICAgIHJldHVybiBydmFsOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZXNjYXBlX3VuaWNvZGUoUHlPYmplY3QgKnB5c3RyKQoreworICAgIC8qIFRha2UgYSBQeVVuaWNvZGUgcHlzdHIgYW5kIHJldHVybiBhIG5ldyBlc2NhcGVkIFB5VW5pY29kZSAqLworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGlucHV0X2NoYXJzOworICAgIFB5X3NzaXplX3Qgb3V0cHV0X3NpemU7CisgICAgUHlfc3NpemVfdCBjaGFyczsKKyAgICBQeU9iamVjdCAqcnZhbDsKKyAgICB2b2lkICppbnB1dDsKKyAgICBpbnQga2luZDsKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHB5c3RyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHB5c3RyKTsKKyAgICBpbnB1dF9jaGFycyA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHB5c3RyKTsKKyAgICBpbnB1dCA9IFB5VW5pY29kZV9EQVRBKHB5c3RyKTsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQocHlzdHIpOworCisgICAgLyogQ29tcHV0ZSB0aGUgb3V0cHV0IHNpemUgKi8KKyAgICBmb3IgKGkgPSAwLCBvdXRwdXRfc2l6ZSA9IDI7IGkgPCBpbnB1dF9jaGFyczsgaSsrKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGlucHV0LCBpKTsKKyAgICAgICAgUHlfc3NpemVfdCBkOworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnXFwnOiBjYXNlICciJzogY2FzZSAnXGInOiBjYXNlICdcZic6CisgICAgICAgIGNhc2UgJ1xuJzogY2FzZSAnXHInOiBjYXNlICdcdCc6CisgICAgICAgICAgICBkID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKGMgPD0gMHgxZikKKyAgICAgICAgICAgICAgICBkID0gNjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3V0cHV0X3NpemUgPiBQWV9TU0laRV9UX01BWCAtIGQpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAic3RyaW5nIGlzIHRvbyBsb25nIHRvIGVzY2FwZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgb3V0cHV0X3NpemUgKz0gZDsKKyAgICB9CisKKyAgICBydmFsID0gUHlVbmljb2RlX05ldyhvdXRwdXRfc2l6ZSwgbWF4Y2hhcik7CisgICAgaWYgKHJ2YWwgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQocnZhbCk7CisKKyNkZWZpbmUgRU5DT0RFX09VVFBVVCBkbyB7IFwKKyAgICAgICAgY2hhcnMgPSAwOyBcCisgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICciJzsgXAorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRfY2hhcnM7IGkrKykgeyBcCisgICAgICAgICAgICBQeV9VQ1M0IGMgPSBQeVVuaWNvZGVfUkVBRChraW5kLCBpbnB1dCwgaSk7IFwKKyAgICAgICAgICAgIHN3aXRjaCAoYykgeyBcCisgICAgICAgICAgICBjYXNlICdcXCc6IG91dHB1dFtjaGFycysrXSA9ICdcXCc7IG91dHB1dFtjaGFycysrXSA9IGM7IGJyZWFrOyBcCisgICAgICAgICAgICBjYXNlICciJzogIG91dHB1dFtjaGFycysrXSA9ICdcXCc7IG91dHB1dFtjaGFycysrXSA9IGM7IGJyZWFrOyBcCisgICAgICAgICAgICBjYXNlICdcYic6IG91dHB1dFtjaGFycysrXSA9ICdcXCc7IG91dHB1dFtjaGFycysrXSA9ICdiJzsgYnJlYWs7IFwKKyAgICAgICAgICAgIGNhc2UgJ1xmJzogb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsgb3V0cHV0W2NoYXJzKytdID0gJ2YnOyBicmVhazsgXAorICAgICAgICAgICAgY2FzZSAnXG4nOiBvdXRwdXRbY2hhcnMrK10gPSAnXFwnOyBvdXRwdXRbY2hhcnMrK10gPSAnbic7IGJyZWFrOyBcCisgICAgICAgICAgICBjYXNlICdccic6IG91dHB1dFtjaGFycysrXSA9ICdcXCc7IG91dHB1dFtjaGFycysrXSA9ICdyJzsgYnJlYWs7IFwKKyAgICAgICAgICAgIGNhc2UgJ1x0Jzogb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsgb3V0cHV0W2NoYXJzKytdID0gJ3QnOyBicmVhazsgXAorICAgICAgICAgICAgZGVmYXVsdDogXAorICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4MWYpIHsgXAorICAgICAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAnXFwnOyBcCisgICAgICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsgXAorICAgICAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAnMCc7IFwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJzAnOyBcCisgICAgICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiA0KSAmIDB4Zl07IFwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjICAgICApICYgMHhmXTsgXAorICAgICAgICAgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gYzsgXAorICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAnIic7IFwKKyAgICB9IHdoaWxlICgwKQorCisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgUHlfVUNTMSAqb3V0cHV0ID0gUHlVbmljb2RlXzFCWVRFX0RBVEEocnZhbCk7CisgICAgICAgIEVOQ09ERV9PVVRQVVQ7CisgICAgfSBlbHNlIGlmIChraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7CisgICAgICAgIFB5X1VDUzIgKm91dHB1dCA9IFB5VW5pY29kZV8yQllURV9EQVRBKHJ2YWwpOworICAgICAgICBFTkNPREVfT1VUUFVUOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X1VDUzQgKm91dHB1dCA9IFB5VW5pY29kZV80QllURV9EQVRBKHJ2YWwpOworICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CisgICAgICAgIEVOQ09ERV9PVVRQVVQ7CisgICAgfQorI3VuZGVmIEVOQ09ERV9PVVRQVVQKKworI2lmZGVmIFB5X0RFQlVHCisgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShydmFsLCAxKSk7CisjZW5kaWYKKyAgICByZXR1cm4gcnZhbDsKK30KKwogc3RhdGljIHZvaWQKIHJhaXNlX2Vycm1zZyhjaGFyICptc2csIFB5T2JqZWN0ICpzLCBQeV9zc2l6ZV90IGVuZCkKIHsKLSAgICAvKiBVc2UgdGhlIFB5dGhvbiBmdW5jdGlvbiBqc29uLmRlY29kZXIuZXJybXNnIHRvIHJhaXNlIGEgbmljZQotICAgIGxvb2tpbmcgVmFsdWVFcnJvciBleGNlcHRpb24gKi8KLSAgICBzdGF0aWMgUHlPYmplY3QgKmVycm1zZ19mbiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnB5bXNnOwotICAgIGlmIChlcnJtc2dfZm4gPT0gTlVMTCkgeworICAgIC8qIFVzZSBKU09ORGVjb2RlRXJyb3IgZXhjZXB0aW9uIHRvIHJhaXNlIGEgbmljZSBsb29raW5nIFZhbHVlRXJyb3Igc3ViY2xhc3MgKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKkpTT05EZWNvZGVFcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmV4YzsKKyAgICBpZiAoSlNPTkRlY29kZUVycm9yID09IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKmRlY29kZXIgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImpzb24uZGVjb2RlciIpOwogICAgICAgICBpZiAoZGVjb2RlciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlcnJtc2dfZm4gPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGRlY29kZXIsICJlcnJtc2ciKTsKKyAgICAgICAgSlNPTkRlY29kZUVycm9yID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhkZWNvZGVyLCAiSlNPTkRlY29kZUVycm9yIik7CiAgICAgICAgIFB5X0RFQ1JFRihkZWNvZGVyKTsKLSAgICAgICAgaWYgKGVycm1zZ19mbiA9PSBOVUxMKQorICAgICAgICBpZiAoSlNPTkRlY29kZUVycm9yID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHB5bXNnID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVycm1zZ19mbiwgIih6T24pIiwgbXNnLCBzLCBlbmQpOwotICAgIGlmIChweW1zZykgewotICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfVmFsdWVFcnJvciwgcHltc2cpOwotICAgICAgICBQeV9ERUNSRUYocHltc2cpOworICAgIGV4YyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihKU09ORGVjb2RlRXJyb3IsICIoek9uKSIsIG1zZywgcywgZW5kKTsKKyAgICBpZiAoZXhjKSB7CisgICAgICAgIFB5RXJyX1NldE9iamVjdChKU09ORGVjb2RlRXJyb3IsIGV4Yyk7CisgICAgICAgIFB5X0RFQ1JFRihleGMpOwogICAgIH0KIH0KIApAQCAtNTM3LDYgKzYzMSwzMSBAQAogICAgIHJldHVybiBydmFsOwogfQogCisKK1B5RG9jX1NUUlZBUihweWRvY19lbmNvZGVfYmFzZXN0cmluZywKKyAgICAiZW5jb2RlX2Jhc2VzdHJpbmcoc3RyaW5nKSAtPiBzdHJpbmdcbiIKKyAgICAiXG4iCisgICAgIlJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nIgorKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3B5X2VuY29kZV9iYXNlc3RyaW5nKFB5T2JqZWN0KiBzZWxmIFVOVVNFRCwgUHlPYmplY3QgKnB5c3RyKQoreworICAgIFB5T2JqZWN0ICpydmFsOworICAgIC8qIFJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gc3RyaW5nICovCisgICAgLyogTUVUSF9PICovCisgICAgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKKyAgICAgICAgcnZhbCA9IGVzY2FwZV91bmljb2RlKHB5c3RyKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgbm90ICUuODBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocHlzdHIpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBydmFsOworfQorCiBzdGF0aWMgdm9pZAogc2Nhbm5lcl9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQogewpAQCAtNzE1LDcgKzgzNCw3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqCiBfcGFyc2VfYXJyYXlfdW5pY29kZShQeVNjYW5uZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpweXN0ciwgUHlfc3NpemVfdCBpZHgsIFB5X3NzaXplX3QgKm5leHRfaWR4X3B0cikgewotICAgIC8qIFJlYWQgYSBKU09OIGFycmF5IGZyb20gUHlTdHJpbmcgcHlzdHIuCisgICAgLyogUmVhZCBhIEpTT04gYXJyYXkgZnJvbSBQeVVuaWNvZGUgcHlzdHIuCiAgICAgaWR4IGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBvcGVuaW5nIGJyYWNlLgogICAgICpuZXh0X2lkeF9wdHIgaXMgYSByZXR1cm4tYnktcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKICAgICAgICAgdGhlIGNsb3NpbmcgYnJhY2UuCkBAIC03ODcsOCArOTA2LDggQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLV9wYXJzZV9jb25zdGFudChQeVNjYW5uZXJPYmplY3QgKnMsIGNoYXIgKmNvbnN0YW50LCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7Ci0gICAgLyogUmVhZCBhIEpTT04gY29uc3RhbnQgZnJvbSBQeVN0cmluZyBweXN0ci4KK19wYXJzZV9jb25zdGFudChQeVNjYW5uZXJPYmplY3QgKnMsIGNvbnN0IGNoYXIgKmNvbnN0YW50LCBQeV9zc2l6ZV90IGlkeCwgUHlfc3NpemVfdCAqbmV4dF9pZHhfcHRyKSB7CisgICAgLyogUmVhZCBhIEpTT04gY29uc3RhbnQuCiAgICAgY29uc3RhbnQgaXMgdGhlIGNvbnN0YW50IHN0cmluZyB0aGF0IHdhcyBmb3VuZAogICAgICAgICAoIk5hTiIsICJJbmZpbml0eSIsICItSW5maW5pdHkiKS4KICAgICBpZHggaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGNvbnN0YW50CkBAIC04MjAsNyArOTM5LDcgQEAKICAgICAgICAgdGhlIG51bWJlci4KIAogICAgIFJldHVybnMgYSBuZXcgUHlPYmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhhdCBudW1iZXI6Ci0gICAgICAgIFB5SW50LCBQeUxvbmcsIG9yIFB5RmxvYXQuCisgICAgICAgIFB5TG9uZywgb3IgUHlGbG9hdC4KICAgICAgICAgTWF5IHJldHVybiBvdGhlciB0eXBlcyBpZiBwYXJzZV9pbnQgb3IgcGFyc2VfZmxvYXQgYXJlIHNldAogICAgICovCiAgICAgdm9pZCAqc3RyOwpAQCAtMTI0NCw3ICsxMzYzLDE0IEBACiAgICAgcy0+aXRlbV9zZXBhcmF0b3IgPSBpdGVtX3NlcGFyYXRvcjsKICAgICBzLT5zb3J0X2tleXMgPSBzb3J0X2tleXM7CiAgICAgcy0+c2tpcGtleXMgPSBza2lwa2V5czsKLSAgICBzLT5mYXN0X2VuY29kZSA9IChQeUNGdW5jdGlvbl9DaGVjayhzLT5lbmNvZGVyKSAmJiBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbihzLT5lbmNvZGVyKSA9PSAoUHlDRnVuY3Rpb24pcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpOworICAgIHMtPmZhc3RfZW5jb2RlID0gTlVMTDsKKyAgICBpZiAoUHlDRnVuY3Rpb25fQ2hlY2socy0+ZW5jb2RlcikpIHsKKyAgICAgICAgUHlDRnVuY3Rpb24gZiA9IFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uKHMtPmVuY29kZXIpOworICAgICAgICBpZiAoZiA9PSAoUHlDRnVuY3Rpb24pcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkgfHwKKyAgICAgICAgICAgICAgICBmID09IChQeUNGdW5jdGlvbilweV9lbmNvZGVfYmFzZXN0cmluZykgeworICAgICAgICAgICAgcy0+ZmFzdF9lbmNvZGUgPSBmOworICAgICAgICB9CisgICAgfQogICAgIHMtPmFsbG93X25hbiA9IGFsbG93X25hbjsKIAogICAgIFB5X0lOQ1JFRihzLT5tYXJrZXJzKTsKQEAgLTEzMTcsMzggKzE0NDMsOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZW5jb2Rlcl9lbmNvZGVfbG9uZyhQeUVuY29kZXJPYmplY3QqIHMgVU5VU0VELCBQeU9iamVjdCAqb2JqKQotewotICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5TG9uZyBhbmQgUHlMb25nIHN1YmNsYXNzZXMuCi0gICAgICAgQ2FsbHMgaW50KCkgb24gUHlMb25nIHN1YmNsYXNzZXMgaW4gY2FzZSB0aGUgc3RyKCkgd2FzIGNoYW5nZWQuCi0gICAgICAgQWRkZWQgc3BlY2lmaWNhbGx5IHRvIGRlYWwgd2l0aCBJbnRFbnVtLiAgU2VlIElzc3VlMTgyNjQuICovCi0gICAgUHlPYmplY3QgKmVuY29kZWQsICpsb25nb2JqOwotICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdChvYmopKSB7Ci0gICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGxvbmdvYmogPSBQeU51bWJlcl9Mb25nKG9iaik7Ci0gICAgICAgIGlmIChsb25nb2JqID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBjb2VyY2UgaW50IHN1YmNsYXNzIHRvIGludCIKLSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9TdHIobG9uZ29iaik7Ci0gICAgICAgIFB5X0RFQ1JFRihsb25nb2JqKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVuY29kZWQ7Ci19Ci0KLQotc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX2Zsb2F0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaikKIHsKLSAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0LgotICAgICAgIE1vZGlmaWVkIHRvIGNhbGwgZmxvYXQoKSBvbiBmbG9hdCBzdWJjbGFzc2VzIGluIGNhc2UgdGhlIHN1YmNsYXNzCi0gICAgICAgY2hhbmdlcyB0aGUgcmVwci4gIFNlZSBJc3N1ZTE4MjY0LiAgKi8KLSAgICBQeU9iamVjdCAqZW5jb2RlZCwgKmZsb2F0b2JqOworICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5RmxvYXQuICovCiAgICAgZG91YmxlIGkgPSBQeUZsb2F0X0FTX0RPVUJMRShvYmopOwogICAgIGlmICghUHlfSVNfRklOSVRFKGkpKSB7CiAgICAgICAgIGlmICghcy0+YWxsb3dfbmFuKSB7CkBAIC0xMzY4LDI0ICsxNDY1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiTmFOIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgLyogY29lcmNlIGZsb2F0IHN1YmNsYXNzZXMgdG8gZmxvYXQgKHByaW1hcmlseSBmb3IgRW51bSkgKi8KLSAgICBpZiAoUHlGbG9hdF9DaGVja0V4YWN0KG9iaikpIHsKLSAgICAgICAgLyogVXNlIGEgYmV0dGVyIGZsb2F0IGZvcm1hdCBoZXJlPyAqLwotICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfUmVwcihvYmopOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZmxvYXRvYmogPSBQeU51bWJlcl9GbG9hdChvYmopOwotICAgICAgICBpZiAoZmxvYXRvYmogPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGNvZXJjZSBmbG9hdCBzdWJjbGFzcyB0byBmbG9hdCIKLSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9SZXByKGZsb2F0b2JqKTsKLSAgICAgICAgUHlfREVDUkVGKGZsb2F0b2JqKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVuY29kZWQ7CisgICAgcmV0dXJuIFB5RmxvYXRfVHlwZS50cF9yZXByKG9iaik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMzkzLDcgKzE0NzMsNyBAQAogewogICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIHN0cmluZyAqLwogICAgIGlmIChzLT5mYXN0X2VuY29kZSkKLSAgICAgICAgcmV0dXJuIHB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKE5VTEwsIG9iaik7CisgICAgICAgIHJldHVybiBzLT5mYXN0X2VuY29kZShOVUxMLCBvYmopOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+ZW5jb2Rlciwgb2JqLCBOVUxMKTsKIH0KQEAgLTE0MjksNyArMTUwOSw3IEBACiAgICAgICAgIHJldHVybiBfc3RlYWxfYWNjdW11bGF0ZShhY2MsIGVuY29kZWQpOwogICAgIH0KICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2sob2JqKSkgewotICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZXJfZW5jb2RlX2xvbmcocywgb2JqKTsKKyAgICAgICAgUHlPYmplY3QgKmVuY29kZWQgPSBQeUxvbmdfVHlwZS50cF9zdHIob2JqKTsKICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcmV0dXJuIF9zdGVhbF9hY2N1bXVsYXRlKGFjYywgZW5jb2RlZCk7CkBAIC0xNTk0LDcgKzE2NzQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2soa2V5KSkgewotICAgICAgICAgICAga3N0ciA9IGVuY29kZXJfZW5jb2RlX2xvbmcocywga2V5KTsKKyAgICAgICAgICAgIGtzdHIgPSBQeUxvbmdfVHlwZS50cF9zdHIoa2V5KTsKICAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC0xODQwLDYgKzE5MjAsMTAgQEAKICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLAogICAgICAgICBNRVRIX08sCiAgICAgICAgIHB5ZG9jX2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpfSwKKyAgICB7ImVuY29kZV9iYXNlc3RyaW5nIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5X2VuY29kZV9iYXNlc3RyaW5nLAorICAgICAgICBNRVRIX08sCisgICAgICAgIHB5ZG9jX2VuY29kZV9iYXNlc3RyaW5nfSwKICAgICB7InNjYW5zdHJpbmciLAogICAgICAgICAoUHlDRnVuY3Rpb24pcHlfc2NhbnN0cmluZywKICAgICAgICAgTUVUSF9WQVJBUkdTLApAQCAtMTg2Miw3ICsxOTQ2LDcgQEAKICAgICAgICAgTlVMTAogfTsKIAotUHlPYmplY3QqCitQeU1PRElOSVRfRlVOQwogUHlJbml0X19qc29uKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm0gPSBQeU1vZHVsZV9DcmVhdGUoJmpzb25tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbHNwcm9mLmMgYi9Nb2R1bGVzL19sc3Byb2YuYwppbmRleCAwMTM3ZDk1Li42NmU1MzRmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sc3Byb2YuYworKysgYi9Nb2R1bGVzL19sc3Byb2YuYwpAQCAtMjAyLDYgKzIwMiw4IEBACiAgICAgICAgICovCiAgICAgICAgIFB5T2JqZWN0ICpzZWxmID0gZm4tPm1fc2VsZjsKICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhmbi0+bV9tbC0+bWxfbmFtZSk7CisgICAgICAgIFB5T2JqZWN0ICptb2RuYW1lID0gZm4tPm1fbW9kdWxlOworCiAgICAgICAgIGlmIChuYW1lICE9IE5VTEwpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICptbyA9IF9QeVR5cGVfTG9va3VwKFB5X1RZUEUoc2VsZiksIG5hbWUpOwogICAgICAgICAgICAgUHlfWElOQ1JFRihtbyk7CkBAIC0yMTMsOSArMjE1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgLyogT3RoZXJ3aXNlLCB1c2UgX19tb2R1bGVfXyAqLwogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxidWlsdC1pbiBtZXRob2QgJXM+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuLT5tX21sLT5tbF9uYW1lKTsKKyAgICAgICAgaWYgKG1vZG5hbWUgIT0gTlVMTCAmJiBQeVVuaWNvZGVfQ2hlY2sobW9kbmFtZSkpCisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxidWlsdC1pbiBtZXRob2QgJVMuJXM+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCAgZm4tPm1fbWwtPm1sX25hbWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxidWlsdC1pbiBtZXRob2QgJXM+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi0+bV9tbC0+bWxfbmFtZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sem1hbW9kdWxlLmMgYi9Nb2R1bGVzL19sem1hbW9kdWxlLmMKaW5kZXggYzQzNjc2YS4uYmMwMWZmZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbHptYW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2x6bWFtb2R1bGUuYwpAQCAtNjYsNiArNjYsOSBAQAogICAgIGludCBjaGVjazsKICAgICBjaGFyIGVvZjsKICAgICBQeU9iamVjdCAqdW51c2VkX2RhdGE7CisgICAgY2hhciBuZWVkc19pbnB1dDsKKyAgICB1aW50OF90ICppbnB1dF9idWZmZXI7CisgICAgc2l6ZV90IGlucHV0X2J1ZmZlcl9zaXplOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2s7CiAjZW5kaWYKQEAgLTE0MiwxMCArMTQ1LDE1IEBACiAjZW5kaWYKIAogc3RhdGljIGludAotZ3Jvd19idWZmZXIoUHlPYmplY3QgKipidWYpCitncm93X2J1ZmZlcihQeU9iamVjdCAqKmJ1ZiwgUHlfc3NpemVfdCBtYXhfbGVuZ3RoKQogewotICAgIHNpemVfdCBzaXplID0gUHlCeXRlc19HRVRfU0laRSgqYnVmKTsKLSAgICByZXR1cm4gX1B5Qnl0ZXNfUmVzaXplKGJ1Ziwgc2l6ZSArIChzaXplID4+IDMpICsgNik7CisgICAgUHlfc3NpemVfdCBzaXplID0gUHlCeXRlc19HRVRfU0laRSgqYnVmKTsKKyAgICBQeV9zc2l6ZV90IG5ld3NpemUgPSBzaXplICsgKHNpemUgPj4gMykgKyA2OworCisgICAgaWYgKG1heF9sZW5ndGggPiAwICYmIG5ld3NpemUgPiBtYXhfbGVuZ3RoKQorICAgICAgICBuZXdzaXplID0gbWF4X2xlbmd0aDsKKworICAgIHJldHVybiBfUHlCeXRlc19SZXNpemUoYnVmLCBuZXdzaXplKTsKIH0KIAogCkBAIC00NzAsMTIgKzQ3OCwxMSBAQAogCiAKIC8qW2NsaW5pYyBpbnB1dF0KLW91dHB1dCBwcmVzZXQgZmlsZQogbW9kdWxlIF9sem1hCiBjbGFzcyBfbHptYS5MWk1BQ29tcHJlc3NvciAiQ29tcHJlc3NvciAqIiAiJkNvbXByZXNzb3JfdHlwZSIKIGNsYXNzIF9sem1hLkxaTUFEZWNvbXByZXNzb3IgIkRlY29tcHJlc3NvciAqIiAiJkRlY29tcHJlc3Nvcl90eXBlIgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZjE3YWZjNzg2NTI1ZDZjMl0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MmMxNGJiZTA1ZmYwYzE0N10qLwogCiAjaW5jbHVkZSAiY2xpbmljL19sem1hbW9kdWxlLmMuaCIKIApAQCAtNTA0LDcgKzUxMSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogY29tcHJlc3MoQ29tcHJlc3NvciAqYywgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbiwgbHptYV9hY3Rpb24gYWN0aW9uKQogewotICAgIHNpemVfdCBkYXRhX3NpemUgPSAwOworICAgIFB5X3NzaXplX3QgZGF0YV9zaXplID0gMDsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBJTklUSUFMX0JVRkZFUl9TSVpFKTsKQEAgLTUyNyw3ICs1MzQsNyBAQAogICAgICAgICAgICAgKGFjdGlvbiA9PSBMWk1BX0ZJTklTSCAmJiBsenJldCA9PSBMWk1BX1NUUkVBTV9FTkQpKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIGlmIChjLT5senMuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgICAgIGlmIChncm93X2J1ZmZlcigmcmVzdWx0KSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChncm93X2J1ZmZlcigmcmVzdWx0LCAtMSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGMtPmx6cy5uZXh0X291dCA9ICh1aW50OF90ICopUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGRhdGFfc2l6ZTsKICAgICAgICAgICAgIGMtPmx6cy5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CkBAIC02OTgsNyArNzA1LDcgQEAKIAogICAgIGNoZWNrOiBpbnQoY19kZWZhdWx0PSItMSIpID0gdW5zcGVjaWZpZWQKICAgICAgICAgVGhlIGludGVncml0eSBjaGVjayB0byB1c2UuICBGb3IgRk9STUFUX1haLCB0aGUgZGVmYXVsdAotICAgICAgICBpcyBDSEVDS19DUkM2NC4gIEZPUk1BVF9BTE9ORSBhbmQgRk9STUFUX1JBVyBkbyBub3Qgc3Vwb3J0IGludGVncml0eQorICAgICAgICBpcyBDSEVDS19DUkM2NC4gIEZPUk1BVF9BTE9ORSBhbmQgRk9STUFUX1JBVyBkbyBub3Qgc3VwcG9ydCBpbnRlZ3JpdHkKICAgICAgICAgY2hlY2tzOyBmb3IgdGhlc2UgZm9ybWF0cywgY2hlY2sgbXVzdCBiZSBvbWl0dGVkLCBvciBiZSBDSEVDS19OT05FLgogCiAgICAgcHJlc2V0OiBvYmplY3QgPSBOb25lCkBAIC04ODgsMjUgKzg5NSwzMyBAQAogCiAvKiBMWk1BRGVjb21wcmVzc29yIGNsYXNzLiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKgotZGVjb21wcmVzcyhEZWNvbXByZXNzb3IgKmQsIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4pCisvKiBEZWNvbXByZXNzIGRhdGEgb2YgbGVuZ3RoIGQtPmx6cy5hdmFpbF9pbiBpbiBkLT5senMubmV4dF9pbi4gIFRoZSBvdXRwdXQKKyAgIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYW5kIHJldHVybmVkLiAgQXQgbW9zdCBtYXhfbGVuZ3RoIGJ5dGVzIGFyZQorICAgcmV0dXJuZWQsIHNvIHNvbWUgb2YgdGhlIGlucHV0IG1heSBub3QgYmUgY29uc3VtZWQuIGQtPmx6cy5uZXh0X2luIGFuZAorICAgZC0+bHpzLmF2YWlsX2luIGFyZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIGNvbnN1bWVkIGlucHV0LiAqLworc3RhdGljIFB5T2JqZWN0KgorZGVjb21wcmVzc19idWYoRGVjb21wcmVzc29yICpkLCBQeV9zc2l6ZV90IG1heF9sZW5ndGgpCiB7Ci0gICAgc2l6ZV90IGRhdGFfc2l6ZSA9IDA7CisgICAgUHlfc3NpemVfdCBkYXRhX3NpemUgPSAwOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgbHptYV9zdHJlYW0gKmx6cyA9ICZkLT5senM7CiAKLSAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIElOSVRJQUxfQlVGRkVSX1NJWkUpOworICAgIGlmIChtYXhfbGVuZ3RoIDwgMCB8fCBtYXhfbGVuZ3RoID49IElOSVRJQUxfQlVGRkVSX1NJWkUpCisgICAgICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgSU5JVElBTF9CVUZGRVJfU0laRSk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG1heF9sZW5ndGgpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZC0+bHpzLm5leHRfaW4gPSBkYXRhOwotICAgIGQtPmx6cy5hdmFpbF9pbiA9IGxlbjsKLSAgICBkLT5senMubmV4dF9vdXQgPSAodWludDhfdCAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCk7Ci0gICAgZC0+bHpzLmF2YWlsX291dCA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KTsKKworICAgIGx6cy0+bmV4dF9vdXQgPSAodWludDhfdCAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCk7CisgICAgbHpzLT5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCk7CisKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGx6bWFfcmV0IGx6cmV0OwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgbHpyZXQgPSBsem1hX2NvZGUoJmQtPmx6cywgTFpNQV9SVU4pOwotICAgICAgICBkYXRhX3NpemUgPSAoY2hhciAqKWQtPmx6cy5uZXh0X291dCAtIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCk7CisgICAgICAgIGx6cmV0ID0gbHptYV9jb2RlKGx6cywgTFpNQV9SVU4pOworICAgICAgICBkYXRhX3NpemUgPSAoY2hhciAqKWx6cy0+bmV4dF9vdXQgLSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtOTE0LDI2ICs5MjksMTMwIEBACiAgICAgICAgICAgICBkLT5jaGVjayA9IGx6bWFfZ2V0X2NoZWNrKCZkLT5senMpOwogICAgICAgICBpZiAobHpyZXQgPT0gTFpNQV9TVFJFQU1fRU5EKSB7CiAgICAgICAgICAgICBkLT5lb2YgPSAxOwotICAgICAgICAgICAgaWYgKGQtPmx6cy5hdmFpbF9pbiA+IDApIHsKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihkLT51bnVzZWRfZGF0YSk7Ci0gICAgICAgICAgICAgICAgZC0+dW51c2VkX2RhdGEgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKAotICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilkLT5senMubmV4dF9pbiwgZC0+bHpzLmF2YWlsX2luKTsKLSAgICAgICAgICAgICAgICBpZiAoZC0+dW51c2VkX2RhdGEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKGQtPmx6cy5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgIH0gZWxzZSBpZiAobHpzLT5hdmFpbF9pbiA9PSAwKSB7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmIChkLT5senMuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgICAgIGlmIChncm93X2J1ZmZlcigmcmVzdWx0KSA9PSAtMSkKKyAgICAgICAgfSBlbHNlIGlmIChsenMtPmF2YWlsX291dCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoZGF0YV9zaXplID09IG1heF9sZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZ3Jvd19idWZmZXIoJnJlc3VsdCwgbWF4X2xlbmd0aCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIGQtPmx6cy5uZXh0X291dCA9ICh1aW50OF90ICopUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGRhdGFfc2l6ZTsKLSAgICAgICAgICAgIGQtPmx6cy5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CisgICAgICAgICAgICBsenMtPm5leHRfb3V0ID0gKHVpbnQ4X3QgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgZGF0YV9zaXplOworICAgICAgICAgICAgbHpzLT5hdmFpbF9vdXQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGRhdGFfc2l6ZSAhPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkpCiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgZGF0YV9zaXplKSA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkZWNvbXByZXNzKERlY29tcHJlc3NvciAqZCwgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbiwgUHlfc3NpemVfdCBtYXhfbGVuZ3RoKQoreworICAgIGNoYXIgaW5wdXRfYnVmZmVyX2luX3VzZTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIGx6bWFfc3RyZWFtICpsenMgPSAmZC0+bHpzOworCisgICAgLyogUHJlcGVuZCB1bmNvbnN1bWVkIGlucHV0IGlmIG5lY2Vzc2FyeSAqLworICAgIGlmIChsenMtPm5leHRfaW4gIT0gTlVMTCkgeworICAgICAgICBzaXplX3QgYXZhaWxfbm93LCBhdmFpbF90b3RhbDsKKworICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgd2UgY2FuIGFwcGVuZCB0byBpbnB1dCBidWZmZXIgKi8KKyAgICAgICAgYXZhaWxfbm93ID0gKGQtPmlucHV0X2J1ZmZlciArIGQtPmlucHV0X2J1ZmZlcl9zaXplKQorICAgICAgICAgICAgLSAobHpzLT5uZXh0X2luICsgbHpzLT5hdmFpbF9pbik7CisKKyAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHdlIGNhbiBhcHBlbmQgaWYgd2UgbW92ZSBleGlzdGluZworICAgICAgICAgICBjb250ZW50cyB0byBiZWdpbm5pbmcgb2YgYnVmZmVyIChvdmVyd3JpdGluZworICAgICAgICAgICBjb25zdW1lZCBpbnB1dCkgKi8KKyAgICAgICAgYXZhaWxfdG90YWwgPSBkLT5pbnB1dF9idWZmZXJfc2l6ZSAtIGx6cy0+YXZhaWxfaW47CisKKyAgICAgICAgaWYgKGF2YWlsX3RvdGFsIDwgbGVuKSB7CisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbHpzLT5uZXh0X2luIC0gZC0+aW5wdXRfYnVmZmVyOworICAgICAgICAgICAgdWludDhfdCAqdG1wOworICAgICAgICAgICAgc2l6ZV90IG5ld19zaXplID0gZC0+aW5wdXRfYnVmZmVyX3NpemUgKyBsZW4gLSBhdmFpbF9ub3c7CisKKyAgICAgICAgICAgIC8qIEFzc2lnbiB0byB0ZW1wb3JhcnkgdmFyaWFibGUgZmlyc3QsIHNvIHdlIGRvbid0CisgICAgICAgICAgICAgICBsb3NlIGFkZHJlc3Mgb2YgYWxsb2NhdGVkIGJ1ZmZlciBpZiByZWFsbG9jIGZhaWxzICovCisgICAgICAgICAgICB0bXAgPSBQeU1lbV9SZWFsbG9jKGQtPmlucHV0X2J1ZmZlciwgbmV3X3NpemUpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19NZW1vcnlFcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkLT5pbnB1dF9idWZmZXIgPSB0bXA7CisgICAgICAgICAgICBkLT5pbnB1dF9idWZmZXJfc2l6ZSA9IG5ld19zaXplOworCisgICAgICAgICAgICBsenMtPm5leHRfaW4gPSBkLT5pbnB1dF9idWZmZXIgKyBvZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXZhaWxfbm93IDwgbGVuKSB7CisgICAgICAgICAgICBtZW1tb3ZlKGQtPmlucHV0X2J1ZmZlciwgbHpzLT5uZXh0X2luLAorICAgICAgICAgICAgICAgICAgICBsenMtPmF2YWlsX2luKTsKKyAgICAgICAgICAgIGx6cy0+bmV4dF9pbiA9IGQtPmlucHV0X2J1ZmZlcjsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoKHZvaWQqKShsenMtPm5leHRfaW4gKyBsenMtPmF2YWlsX2luKSwgZGF0YSwgbGVuKTsKKyAgICAgICAgbHpzLT5hdmFpbF9pbiArPSBsZW47CisgICAgICAgIGlucHV0X2J1ZmZlcl9pbl91c2UgPSAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbHpzLT5uZXh0X2luID0gZGF0YTsKKyAgICAgICAgbHpzLT5hdmFpbF9pbiA9IGxlbjsKKyAgICAgICAgaW5wdXRfYnVmZmVyX2luX3VzZSA9IDA7CisgICAgfQorCisgICAgcmVzdWx0ID0gZGVjb21wcmVzc19idWYoZCwgbWF4X2xlbmd0aCk7CisgICAgaWYocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGQtPmVvZikgeworICAgICAgICBkLT5uZWVkc19pbnB1dCA9IDA7CisgICAgICAgIGlmIChsenMtPmF2YWlsX2luID4gMCkgeworICAgICAgICAgICAgUHlfWFNFVFJFRihkLT51bnVzZWRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopbHpzLT5uZXh0X2luLCBsenMtPmF2YWlsX2luKSk7CisgICAgICAgICAgICBpZiAoZC0+dW51c2VkX2RhdGEgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGx6cy0+YXZhaWxfaW4gPT0gMCkgeworICAgICAgICBsenMtPm5leHRfaW4gPSBOVUxMOworICAgICAgICBkLT5uZWVkc19pbnB1dCA9IDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkLT5uZWVkc19pbnB1dCA9IDA7CisKKyAgICAgICAgLyogSWYgd2UgZGlkIG5vdCB1c2UgdGhlIGlucHV0IGJ1ZmZlciwgd2Ugbm93IGhhdmUKKyAgICAgICAgICAgdG8gY29weSB0aGUgdGFpbCBmcm9tIHRoZSBjYWxsZXIncyBidWZmZXIgaW50byB0aGUKKyAgICAgICAgICAgaW5wdXQgYnVmZmVyICovCisgICAgICAgIGlmICghaW5wdXRfYnVmZmVyX2luX3VzZSkgeworCisgICAgICAgICAgICAvKiBEaXNjYXJkIGJ1ZmZlciBpZiBpdCdzIHRvbyBzbWFsbAorICAgICAgICAgICAgICAgKHJlc2l6aW5nIGl0IG1heSBuZWVkbGVzc2x5IGNvcHkgdGhlIGN1cnJlbnQgY29udGVudHMpICovCisgICAgICAgICAgICBpZiAoZC0+aW5wdXRfYnVmZmVyICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICBkLT5pbnB1dF9idWZmZXJfc2l6ZSA8IGx6cy0+YXZhaWxfaW4pIHsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKGQtPmlucHV0X2J1ZmZlcik7CisgICAgICAgICAgICAgICAgZC0+aW5wdXRfYnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQWxsb2NhdGUgaWYgbmVjZXNzYXJ5ICovCisgICAgICAgICAgICBpZiAoZC0+aW5wdXRfYnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBkLT5pbnB1dF9idWZmZXIgPSBQeU1lbV9NYWxsb2MobHpzLT5hdmFpbF9pbik7CisgICAgICAgICAgICAgICAgaWYgKGQtPmlucHV0X2J1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTWVtb3J5RXJyb3IpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkLT5pbnB1dF9idWZmZXJfc2l6ZSA9IGx6cy0+YXZhaWxfaW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENvcHkgdGFpbCAqLworICAgICAgICAgICAgbWVtY3B5KGQtPmlucHV0X2J1ZmZlciwgbHpzLT5uZXh0X2luLCBsenMtPmF2YWlsX2luKTsKKyAgICAgICAgICAgIGx6cy0+bmV4dF9pbiA9IGQtPmlucHV0X2J1ZmZlcjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiAKIGVycm9yOgpAQCAtOTQ2LDIwICsxMDY1LDI4IEBACiAKICAgICBzZWxmOiBzZWxmKHR5cGU9IkRlY29tcHJlc3NvciAqIikKICAgICBkYXRhOiBQeV9idWZmZXIKLSAgICAvCisgICAgbWF4X2xlbmd0aDogUHlfc3NpemVfdD0tMQogCi1Qcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuCitEZWNvbXByZXNzICpkYXRhKiwgcmV0dXJuaW5nIHVuY29tcHJlc3NlZCBkYXRhIGFzIGJ5dGVzLgogCi1SZXR1cm5zIGEgY2h1bmsgb2YgZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuCitJZiAqbWF4X2xlbmd0aCogaXMgbm9ubmVnYXRpdmUsIHJldHVybnMgYXQgbW9zdCAqbWF4X2xlbmd0aCogYnl0ZXMgb2YKK2RlY29tcHJlc3NlZCBkYXRhLiBJZiB0aGlzIGxpbWl0IGlzIHJlYWNoZWQgYW5kIGZ1cnRoZXIgb3V0cHV0IGNhbiBiZQorcHJvZHVjZWQsICpzZWxmLm5lZWRzX2lucHV0KiB3aWxsIGJlIHNldCB0byBgYEZhbHNlYGAuIEluIHRoaXMgY2FzZSwgdGhlIG5leHQKK2NhbGwgdG8gKmRlY29tcHJlc3MoKSogbWF5IHByb3ZpZGUgKmRhdGEqIGFzIGInJyB0byBvYnRhaW4gbW9yZSBvZiB0aGUgb3V0cHV0LgogCi1BdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkCi1yYWlzZXMgYW4gRU9GRXJyb3IuICBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW0KLWlzIGlnbm9yZWQgYW5kIHNhdmVkIGluIHRoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuCitJZiBhbGwgb2YgdGhlIGlucHV0IGRhdGEgd2FzIGRlY29tcHJlc3NlZCBhbmQgcmV0dXJuZWQgKGVpdGhlciBiZWNhdXNlIHRoaXMKK3dhcyBsZXNzIHRoYW4gKm1heF9sZW5ndGgqIGJ5dGVzLCBvciBiZWNhdXNlICptYXhfbGVuZ3RoKiB3YXMgbmVnYXRpdmUpLAorKnNlbGYubmVlZHNfaW5wdXQqIHdpbGwgYmUgc2V0IHRvIFRydWUuCisKK0F0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWQgcmFpc2VzIGFuCitFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbgordGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS4KIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLV9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKERlY29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ4NmU3OGRhN2ZmMGZmMjEgaW5wdXQ9NTBjNDc2OGI4MjFiZjBlZl0qLworX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heF9sZW5ndGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZWY0ZTIwZWM3MTIyMjQxZCBpbnB1dD1mMmJiOTAyY2MxY2FmMjAzXSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKQEAgLTk2Nyw3ICsxMDk0LDcgQEAKICAgICBpZiAoc2VsZi0+ZW9mKQogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsICJBbHJlYWR5IGF0IGVuZCBvZiBzdHJlYW0iKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGRlY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4pOworICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuLCBtYXhfbGVuZ3RoKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwMjMsOCArMTE1MCw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBpbnQKLV9sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19faW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIGludCBmb3JtYXQsIFB5T2JqZWN0ICptZW1saW1pdCwgUHlPYmplY3QgKmZpbHRlcnMpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWIxMTlmNmYyY2MyZDdhOCBpbnB1dD00NThjYTYxMzJlZjI5ODAxXSovCitfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoRGVjb21wcmVzc29yICpzZWxmLCBpbnQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptZW1saW1pdCwgUHlPYmplY3QgKmZpbHRlcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2UxODIxZjhhYTM2NTY0YyBpbnB1dD00NThjYTYxMzJlZjI5ODAxXSovCiB7CiAgICAgY29uc3QgdWludDMyX3QgZGVjb2Rlcl9mbGFncyA9IExaTUFfVEVMTF9BTllfQ0hFQ0sgfCBMWk1BX1RFTExfTk9fQ0hFQ0s7CiAgICAgdWludDY0X3QgbWVtbGltaXRfID0gVUlOVDY0X01BWDsKQEAgLTEwNTUsNiArMTE4Myw3IEBACiAgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOwogICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKICAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworICAgIHNlbGYtPmx6cy5uZXh0X2luID0gTlVMTDsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgc2VsZi0+bG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKQEAgLTEwNjUsNiArMTE5NCw5IEBACiAjZW5kaWYKIAogICAgIHNlbGYtPmNoZWNrID0gTFpNQV9DSEVDS19VTktOT1dOOworICAgIHNlbGYtPm5lZWRzX2lucHV0ID0gMTsKKyAgICBzZWxmLT5pbnB1dF9idWZmZXIgPSBOVUxMOworICAgIHNlbGYtPmlucHV0X2J1ZmZlcl9zaXplID0gMDsKICAgICBzZWxmLT51bnVzZWRfZGF0YSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CiAgICAgaWYgKHNlbGYtPnVudXNlZF9kYXRhID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xMTEzLDYgKzEyNDUsOSBAQAogc3RhdGljIHZvaWQKIERlY29tcHJlc3Nvcl9kZWFsbG9jKERlY29tcHJlc3NvciAqc2VsZikKIHsKKyAgICBpZihzZWxmLT5pbnB1dF9idWZmZXIgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5pbnB1dF9idWZmZXIpOworCiAgICAgbHptYV9lbmQoJnNlbGYtPmx6cyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+dW51c2VkX2RhdGEpOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0xMTM0LDYgKzEyNjksOSBAQAogUHlEb2NfU1RSVkFSKERlY29tcHJlc3Nvcl9lb2ZfZG9jLAogIlRydWUgaWYgdGhlIGVuZC1vZi1zdHJlYW0gbWFya2VyIGhhcyBiZWVuIHJlYWNoZWQuIik7CiAKK1B5RG9jX1NUUlZBUihEZWNvbXByZXNzb3JfbmVlZHNfaW5wdXRfZG9jLAorIlRydWUgaWYgbW9yZSBpbnB1dCBpcyBuZWVkZWQgYmVmb3JlIG1vcmUgZGVjb21wcmVzc2VkIGRhdGEgY2FuIGJlIHByb2R1Y2VkLiIpOworCiBQeURvY19TVFJWQVIoRGVjb21wcmVzc29yX3VudXNlZF9kYXRhX2RvYywKICJEYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgc3RyZWFtLiIpOwogCkBAIC0xMTQyLDYgKzEyODAsOCBAQAogICAgICBEZWNvbXByZXNzb3JfY2hlY2tfZG9jfSwKICAgICB7ImVvZiIsIFRfQk9PTCwgb2Zmc2V0b2YoRGVjb21wcmVzc29yLCBlb2YpLCBSRUFET05MWSwKICAgICAgRGVjb21wcmVzc29yX2VvZl9kb2N9LAorICAgIHsibmVlZHNfaW5wdXQiLCBUX0JPT0wsIG9mZnNldG9mKERlY29tcHJlc3NvciwgbmVlZHNfaW5wdXQpLCBSRUFET05MWSwKKyAgICAgRGVjb21wcmVzc29yX25lZWRzX2lucHV0X2RvY30sCiAgICAgeyJ1bnVzZWRfZGF0YSIsIFRfT0JKRUNUX0VYLCBvZmZzZXRvZihEZWNvbXByZXNzb3IsIHVudXNlZF9kYXRhKSwgUkVBRE9OTFksCiAgICAgIERlY29tcHJlc3Nvcl91bnVzZWRfZGF0YV9kb2N9LAogICAgIHtOVUxMfQpAQCAtMTIwMiw4ICsxMzQyLDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLV9sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBjaGVja19pZCkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iYjgyOGU5MGUwMGFkOTZlIGlucHV0PTU1MTgyOTdiOTdiMjMxOGZdKi8KK19sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBjaGVja19pZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNGYxNGJhM2NlMmFkMGE1IGlucHV0PTU1MTgyOTdiOTdiMjMxOGZdKi8KIHsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGx6bWFfY2hlY2tfaXNfc3VwcG9ydGVkKGNoZWNrX2lkKSk7CiB9CkBAIC0xMjIwLDggKzEzNjAsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGx6bWFfZmlsdGVyIGZpbHRlcikKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iNWZlNjkwYWNkNmI2MWQxIGlucHV0PWQ0YzY0ZjFiNTU3Yzc3ZDRdKi8KK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBsem1hX2ZpbHRlciBmaWx0ZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWM5M2M4ZTE0ZTdiZTVhOCBpbnB1dD1kNGM2NGYxYjU1N2M3N2Q0XSovCiB7CiAgICAgbHptYV9yZXQgbHpyZXQ7CiAgICAgdWludDMyX3QgZW5jb2RlZF9zaXplOwpAQCAtMTI2MCw4ICsxNDAwLDkgQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLV9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX3ZsaSBmaWx0ZXJfaWQsIFB5X2J1ZmZlciAqZW5jb2RlZF9wcm9wcykKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMzVmN2Y1MzQ1ZDQ4NzQ0IGlucHV0PTI0NjQxMDgwMDc4MjE2MGNdKi8KK19sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBsem1hX3ZsaSBmaWx0ZXJfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfYnVmZmVyICplbmNvZGVkX3Byb3BzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTcxNGZkMmVmNTY1ZDVjNjAgaW5wdXQ9MjQ2NDEwODAwNzgyMTYwY10qLwogewogICAgIGx6bWFfZmlsdGVyIGZpbHRlcjsKICAgICBsem1hX3JldCBsenJldDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYwppbmRleCBkZTg1YTkwLi5jZWE5NjJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCkBAIC0xMTQsNiArMTE0LDkgQEAKICAgICAgICAgYXNzZXJ0KHNpZ2ludF9ldmVudCAhPSBOVUxMKTsKICAgICAgICAgaGFuZGxlc1tuaGFuZGxlcysrXSA9IHNpZ2ludF9ldmVudDsKICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNpZ2ludF9ldmVudCA9IE5VTEw7CisgICAgfQogCiAgICAgLyogZG8gdGhlIHdhaXQgKi8KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19vcGNvZGUuYyBiL01vZHVsZXMvX29wY29kZS5jCmluZGV4IGZlZTM4OGYuLmY5YzFjMDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX29wY29kZS5jCisrKyBiL01vZHVsZXMvX29wY29kZS5jCkBAIC02LDYgKzYsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MTE3NDQyZTY2ZWIzNzZlNl0qLwogCisjaW5jbHVkZSAiY2xpbmljL19vcGNvZGUuYy5oIgorCiAvKltjbGluaWMgaW5wdXRdCiAKIF9vcGNvZGUuc3RhY2tfZWZmZWN0IC0+IGludApAQCAtMTcsNDIgKzE5LDkgQEAKIENvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiB0aGUgb3Bjb2RlLgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi1QeURvY19TVFJWQVIoX29wY29kZV9zdGFja19lZmZlY3RfX2RvY19fLAotInN0YWNrX2VmZmVjdCgkbW9kdWxlLCBvcGNvZGUsIG9wYXJnPU5vbmUsIC8pXG4iCi0iLS1cbiIKLSJcbiIKLSJDb21wdXRlIHRoZSBzdGFjayBlZmZlY3Qgb2YgdGhlIG9wY29kZS4iKTsKLQotI2RlZmluZSBfT1BDT0RFX1NUQUNLX0VGRkVDVF9NRVRIT0RERUYgICAgXAotICAgIHsic3RhY2tfZWZmZWN0IiwgKFB5Q0Z1bmN0aW9uKV9vcGNvZGVfc3RhY2tfZWZmZWN0LCBNRVRIX1ZBUkFSR1MsIF9vcGNvZGVfc3RhY2tfZWZmZWN0X19kb2NfX30sCi0KIHN0YXRpYyBpbnQKLV9vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IG9wY29kZSwgUHlPYmplY3QgKm9wYXJnKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLV9vcGNvZGVfc3RhY2tfZWZmZWN0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIGludCBvcGNvZGU7Ci0gICAgUHlPYmplY3QgKm9wYXJnID0gUHlfTm9uZTsKLSAgICBpbnQgX3JldHVybl92YWx1ZTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAiaXxPOnN0YWNrX2VmZmVjdCIsCi0gICAgICAgICZvcGNvZGUsICZvcGFyZykpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICBfcmV0dXJuX3ZhbHVlID0gX29wY29kZV9zdGFja19lZmZlY3RfaW1wbChtb2R1bGUsIG9wY29kZSwgb3BhcmcpOwotICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKLQotZXhpdDoKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwotfQotCi1zdGF0aWMgaW50Ci1fb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpvcGFyZykKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ZTExMzNmOGQ1ODdiYzY3IGlucHV0PTJkMGE5ZWU1M2MwNDE4ZjVdKi8KK19vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG9wY29kZSwgUHlPYmplY3QgKm9wYXJnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWFkMzk0NjdmYTNhZDIyY2UgaW5wdXQ9MmQwYTllZTUzYzA0MThmNV0qLwogewogICAgIGludCBlZmZlY3Q7CiAgICAgaW50IG9wYXJnX2ludCA9IDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19vcGVyYXRvci5jIGIvTW9kdWxlcy9fb3BlcmF0b3IuYwppbmRleCBhZGViOTllLi5lYjRmM2EzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19vcGVyYXRvci5jCisrKyBiL01vZHVsZXMvX29wZXJhdG9yLmMKQEAgLTY5LDYgKzY5LDcgQEAKIHNwYW0yKG9wX2FkZCAgICAgICAgICAgLCBQeU51bWJlcl9BZGQpCiBzcGFtMihvcF9zdWIgICAgICAgICAgICwgUHlOdW1iZXJfU3VidHJhY3QpCiBzcGFtMihvcF9tdWwgICAgICAgICAgICwgUHlOdW1iZXJfTXVsdGlwbHkpCitzcGFtMihvcF9tYXRtdWwgICAgICAgICwgUHlOdW1iZXJfTWF0cml4TXVsdGlwbHkpCiBzcGFtMihvcF9mbG9vcmRpdiAgICAgICwgUHlOdW1iZXJfRmxvb3JEaXZpZGUpCiBzcGFtMihvcF90cnVlZGl2ICAgICAgICwgUHlOdW1iZXJfVHJ1ZURpdmlkZSkKIHNwYW0yKG9wX21vZCAgICAgICAgICAgLCBQeU51bWJlcl9SZW1haW5kZXIpCkBAIC04Niw2ICs4Nyw3IEBACiBzcGFtMihvcF9pYWRkICAgICAgICAgICwgUHlOdW1iZXJfSW5QbGFjZUFkZCkKIHNwYW0yKG9wX2lzdWIgICAgICAgICAgLCBQeU51bWJlcl9JblBsYWNlU3VidHJhY3QpCiBzcGFtMihvcF9pbXVsICAgICAgICAgICwgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5KQorc3BhbTIob3BfaW1hdG11bCAgICAgICAsIFB5TnVtYmVyX0luUGxhY2VNYXRyaXhNdWx0aXBseSkKIHNwYW0yKG9wX2lmbG9vcmRpdiAgICAgLCBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUpCiBzcGFtMihvcF9pdHJ1ZWRpdiAgICAgICwgUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUpCiBzcGFtMihvcF9pbW9kICAgICAgICAgICwgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcikKQEAgLTIzOSw3ICsyNDEsNyBAQAogIlJldHVybiAnYSA9PSBiJy4gIFRoaXMgZnVuY3Rpb24gdXNlcyBhbiBhcHByb2FjaCBkZXNpZ25lZCB0byBwcmV2ZW50XG4iCiAidGltaW5nIGFuYWx5c2lzLCBtYWtpbmcgaXQgYXBwcm9wcmlhdGUgZm9yIGNyeXB0b2dyYXBoeS5cbiIKICJhIGFuZCBiIG11c3QgYm90aCBiZSBvZiB0aGUgc2FtZSB0eXBlOiBlaXRoZXIgc3RyIChBU0NJSSBvbmx5KSxcbiIKLSJvciBhbnkgdHlwZSB0aGF0IHN1cHBvcnRzIHRoZSBidWZmZXIgcHJvdG9jb2wgKGUuZy4gYnl0ZXMpLlxuIgorIm9yIGFueSBieXRlcy1saWtlIG9iamVjdC5cbiIKICJcbiIKICJOb3RlOiBJZiBhIGFuZCBiIGFyZSBvZiBkaWZmZXJlbnQgbGVuZ3Rocywgb3IgaWYgYW4gZXJyb3Igb2NjdXJzLFxuIgogImEgdGltaW5nIGF0dGFjayBjb3VsZCB0aGVvcmV0aWNhbGx5IHJldmVhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGVcbiIKQEAgLTM0Myw2ICszNDUsNyBAQAogc3BhbTIoYWRkLCAiYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArIGIuIikKIHNwYW0yKHN1YiwgInN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLSBiLiIpCiBzcGFtMihtdWwsICJtdWwoYSwgYikgLS0gU2FtZSBhcyBhICogYi4iKQorc3BhbTIobWF0bXVsLCAibWF0bXVsKGEsIGIpIC0tIFNhbWUgYXMgYSBAIGIuIikKIHNwYW0yKGZsb29yZGl2LCAiZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vIGIuIikKIHNwYW0yKHRydWVkaXYsICJ0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvIGIuIikKIHNwYW0yKG1vZCwgIm1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJSBiLiIpCkBAIC0zNjAsNiArMzYzLDcgQEAKIHNwYW0yKGlhZGQsICJhID0gaWFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKz0gYi4iKQogc3BhbTIoaXN1YiwgImEgPSBpc3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtPSBiLiIpCiBzcGFtMihpbXVsLCAiYSA9IGltdWwoYSwgYikgLS0gU2FtZSBhcyBhICo9IGIuIikKK3NwYW0yKGltYXRtdWwsICJhID0gaW1hdG11bChhLCBiKSAtLSBTYW1lIGFzIGEgQD0gYi4iKQogc3BhbTIoaWZsb29yZGl2LCAiYSA9IGlmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy89IGIuIikKIHNwYW0yKGl0cnVlZGl2LCAiYSA9IGl0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvPSBiIikKIHNwYW0yKGltb2QsICJhID0gaW1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJT0gYi4iKQpAQCAtNDU2LDYgKzQ2MCw4IEBACiAgICAgUHlPYmplY3QgKm9iaiwgKnJlc3VsdDsKICAgICBQeV9zc2l6ZV90IGksIG5pdGVtcz1pZy0+bml0ZW1zOwogCisgICAgaWYgKGt3ICE9IE5VTEwgJiYgIV9QeUFyZ19Ob0tleXdvcmRzKCJpdGVtZ2V0dGVyIiwga3cpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJpdGVtZ2V0dGVyIiwgMSwgMSwgJm9iaikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChuaXRlbXMgPT0gMSkKQEAgLTQ4MSw2ICs0ODcsNDEgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgUHlPYmplY3QgKgoraXRlbWdldHRlcl9yZXByKGl0ZW1nZXR0ZXJvYmplY3QgKmlnKQoreworICAgIFB5T2JqZWN0ICpyZXByOworICAgIGNvbnN0IGNoYXIgKnJlcHJmbXQ7CisKKyAgICBpbnQgc3RhdHVzID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKWlnKTsKKyAgICBpZiAoc3RhdHVzICE9IDApIHsKKyAgICAgICAgaWYgKHN0YXR1cyA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyguLi4pIiwgUHlfVFlQRShpZyktPnRwX25hbWUpOworICAgIH0KKworICAgIHJlcHJmbXQgPSBpZy0+bml0ZW1zID09IDEgPyAiJXMoJVIpIiA6ICIlcyVSIjsKKyAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQocmVwcmZtdCwgUHlfVFlQRShpZyktPnRwX25hbWUsIGlnLT5pdGVtKTsKKyAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopaWcpOworICAgIHJldHVybiByZXByOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraXRlbWdldHRlcl9yZWR1Y2UoaXRlbWdldHRlcm9iamVjdCAqaWcpCit7CisgICAgaWYgKGlnLT5uaXRlbXMgPT0gMSkKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oTykiLCBQeV9UWVBFKGlnKSwgaWctPml0ZW0pOworICAgIHJldHVybiBQeVR1cGxlX1BhY2soMiwgUHlfVFlQRShpZyksIGlnLT5pdGVtKTsKK30KKworUHlEb2NfU1RSVkFSKHJlZHVjZV9kb2MsICJSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nIik7CisKK3N0YXRpYyBQeU1ldGhvZERlZiBpdGVtZ2V0dGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24paXRlbWdldHRlcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLAorICAgICByZWR1Y2VfZG9jfSwKKyAgICB7TlVMTH0KK307CisKIFB5RG9jX1NUUlZBUihpdGVtZ2V0dGVyX2RvYywKICJpdGVtZ2V0dGVyKGl0ZW0sIC4uLikgLS0+IGl0ZW1nZXR0ZXIgb2JqZWN0XG5cCiBcblwKQEAgLTQ5OSw3ICs1NDAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgKHJlcHJmdW5jKWl0ZW1nZXR0ZXJfcmVwciwgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtNTE3LDcgKzU1OCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgaXRlbWdldHRlcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC03MDgsNiArNzQ5LDggQEAKICAgICBQeU9iamVjdCAqb2JqLCAqcmVzdWx0OwogICAgIFB5X3NzaXplX3QgaSwgbmF0dHJzPWFnLT5uYXR0cnM7CiAKKyAgICBpZiAoa3cgIT0gTlVMTCAmJiAhX1B5QXJnX05vS2V5d29yZHMoImF0dHJnZXR0ZXIiLCBrdykpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImF0dHJnZXR0ZXIiLCAxLCAxLCAmb2JqKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGFnLT5uYXR0cnMgPT0gMSkgLyogYWctPmF0dHIgaXMgYWx3YXlzIGEgdHVwbGUgKi8KQEAgLTczMyw2ICs3NzYsOTMgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZG90am9pbmF0dHIoUHlPYmplY3QgKmF0dHIsIFB5T2JqZWN0ICoqYXR0cnNlcCkKK3sKKyAgICBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KGF0dHIpKSB7CisgICAgICAgIGlmICgqYXR0cnNlcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAqYXR0cnNlcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIuIik7CisgICAgICAgICAgICBpZiAoKmF0dHJzZXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0pvaW4oKmF0dHJzZXAsIGF0dHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRihhdHRyKTsKKyAgICAgICAgcmV0dXJuIGF0dHI7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QgKgorYXR0cmdldHRlcl9hcmdzKGF0dHJnZXR0ZXJvYmplY3QgKmFnKQoreworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeU9iamVjdCAqYXR0cnNlcCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmF0dHJzdHJpbmdzID0gUHlUdXBsZV9OZXcoYWctPm5hdHRycyk7CisgICAgaWYgKGF0dHJzdHJpbmdzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IGFnLT5uYXR0cnM7ICsraSkgeworICAgICAgICBQeU9iamVjdCAqYXR0ciA9IFB5VHVwbGVfR0VUX0lURU0oYWctPmF0dHIsIGkpOworICAgICAgICBQeU9iamVjdCAqYXR0cnN0ciA9IGRvdGpvaW5hdHRyKGF0dHIsICZhdHRyc2VwKTsKKyAgICAgICAgaWYgKGF0dHJzdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfWERFQ1JFRihhdHRyc2VwKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyc3RyaW5ncyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGF0dHJzdHJpbmdzLCBpLCBhdHRyc3RyKTsKKyAgICB9CisgICAgUHlfWERFQ1JFRihhdHRyc2VwKTsKKyAgICByZXR1cm4gYXR0cnN0cmluZ3M7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCithdHRyZ2V0dGVyX3JlcHIoYXR0cmdldHRlcm9iamVjdCAqYWcpCit7CisgICAgUHlPYmplY3QgKnJlcHIgPSBOVUxMOworICAgIGludCBzdGF0dXMgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0ICopYWcpOworICAgIGlmIChzdGF0dXMgIT0gMCkgeworICAgICAgICBpZiAoc3RhdHVzIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKC4uLikiLCBQeV9UWVBFKGFnKS0+dHBfbmFtZSk7CisgICAgfQorCisgICAgaWYgKGFnLT5uYXR0cnMgPT0gMSkgeworICAgICAgICBQeU9iamVjdCAqYXR0cnNlcCA9IE5VTEw7CisgICAgICAgIFB5T2JqZWN0ICphdHRyID0gZG90am9pbmF0dHIoUHlUdXBsZV9HRVRfSVRFTShhZy0+YXR0ciwgMCksICZhdHRyc2VwKTsKKyAgICAgICAgaWYgKGF0dHIgIT0gTlVMTCkgeworICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyglUikiLCBQeV9UWVBFKGFnKS0+dHBfbmFtZSwgYXR0cik7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgICAgIH0KKyAgICAgICAgUHlfWERFQ1JFRihhdHRyc2VwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICphdHRyc3RyaW5ncyA9IGF0dHJnZXR0ZXJfYXJncyhhZyk7CisgICAgICAgIGlmIChhdHRyc3RyaW5ncyAhPSBOVUxMKSB7CisgICAgICAgICAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoYWcpLT50cF9uYW1lLCBhdHRyc3RyaW5ncyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXR0cnN0cmluZ3MpOworICAgICAgICB9CisgICAgfQorICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKilhZyk7CisgICAgcmV0dXJuIHJlcHI7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCithdHRyZ2V0dGVyX3JlZHVjZShhdHRyZ2V0dGVyb2JqZWN0ICphZykKK3sKKyAgICBQeU9iamVjdCAqYXR0cnN0cmluZ3MgPSBhdHRyZ2V0dGVyX2FyZ3MoYWcpOworICAgIGlmIChhdHRyc3RyaW5ncyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPTiIsIFB5X1RZUEUoYWcpLCBhdHRyc3RyaW5ncyk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBhdHRyZ2V0dGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pYXR0cmdldHRlcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLAorICAgICByZWR1Y2VfZG9jfSwKKyAgICB7TlVMTH0KK307CisKIFB5RG9jX1NUUlZBUihhdHRyZ2V0dGVyX2RvYywKICJhdHRyZ2V0dGVyKGF0dHIsIC4uLikgLS0+IGF0dHJnZXR0ZXIgb2JqZWN0XG5cCiBcblwKQEAgLTc1Myw3ICs4ODMsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgKHJlcHJmdW5jKWF0dHJnZXR0ZXJfcmVwciwgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtNzcxLDcgKzkwMSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgYXR0cmdldHRlcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC04MDksNiArOTM5LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApOworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG5hbWUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICAvKiBjcmVhdGUgbWV0aG9kY2FsbGVyb2JqZWN0IHN0cnVjdHVyZSAqLwogICAgIG1jID0gUHlPYmplY3RfR0NfTmV3KG1ldGhvZGNhbGxlcm9iamVjdCwgJm1ldGhvZGNhbGxlcl90eXBlKTsKICAgICBpZiAobWMgPT0gTlVMTCkKQEAgLTgyMSw4ICs5NTgsOCBAQAogICAgIH0KICAgICBtYy0+YXJncyA9IG5ld2FyZ3M7CiAKLSAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKTsKICAgICBQeV9JTkNSRUYobmFtZSk7CisgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJm5hbWUpOwogICAgIG1jLT5uYW1lID0gbmFtZTsKIAogICAgIFB5X1hJTkNSRUYoa3dkcyk7CkBAIC04NTUsNiArOTkyLDggQEAKIHsKICAgICBQeU9iamVjdCAqbWV0aG9kLCAqb2JqLCAqcmVzdWx0OwogCisgICAgaWYgKGt3ICE9IE5VTEwgJiYgIV9QeUFyZ19Ob0tleXdvcmRzKCJtZXRob2RjYWxsZXIiLCBrdykpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgIm1ldGhvZGNhbGxlciIsIDEsIDEsICZvYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBtZXRob2QgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbWMtPm5hbWUpOwpAQCAtODY1LDYgKzEwMDQsMTQyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK21ldGhvZGNhbGxlcl9yZXByKG1ldGhvZGNhbGxlcm9iamVjdCAqbWMpCit7CisgICAgUHlPYmplY3QgKmFyZ3JlcHJzLCAqcmVwciA9IE5VTEwsICpzZXAsICpqb2luZWRhcmdyZXByczsKKyAgICBQeV9zc2l6ZV90IG51bXRvdGFsYXJncywgbnVtcG9zYXJncywgbnVta3dkYXJncywgaTsKKyAgICBpbnQgc3RhdHVzID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKW1jKTsKKyAgICBpZiAoc3RhdHVzICE9IDApIHsKKyAgICAgICAgaWYgKHN0YXR1cyA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyguLi4pIiwgUHlfVFlQRShtYyktPnRwX25hbWUpOworICAgIH0KKworICAgIGlmIChtYy0+a3dkcyAhPSBOVUxMKSB7CisgICAgICAgIG51bWt3ZGFyZ3MgPSBQeURpY3RfU2l6ZShtYy0+a3dkcyk7CisgICAgICAgIGlmIChudW1rd2RhcmdzIDwgMCkgeworICAgICAgICAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1jKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbnVta3dkYXJncyA9IDA7CisgICAgfQorCisgICAgbnVtcG9zYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUobWMtPmFyZ3MpOworICAgIG51bXRvdGFsYXJncyA9IG51bXBvc2FyZ3MgKyBudW1rd2RhcmdzOworCisgICAgaWYgKG51bXRvdGFsYXJncyA9PSAwKSB7CisgICAgICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVIpIiwgUHlfVFlQRShtYyktPnRwX25hbWUsIG1jLT5uYW1lKTsKKyAgICAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1jKTsKKyAgICAgICAgcmV0dXJuIHJlcHI7CisgICAgfQorCisgICAgYXJncmVwcnMgPSBQeVR1cGxlX05ldyhudW10b3RhbGFyZ3MpOworICAgIGlmIChhcmdyZXBycyA9PSBOVUxMKSB7CisgICAgICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltYyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1wb3NhcmdzOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QgKm9uZXJlcHIgPSBQeU9iamVjdF9SZXByKFB5VHVwbGVfR0VUX0lURU0obWMtPmFyZ3MsIGkpKTsKKyAgICAgICAgaWYgKG9uZXJlcHIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdyZXBycywgaSwgb25lcmVwcik7CisgICAgfQorCisgICAgaWYgKG51bWt3ZGFyZ3MgIT0gMCkgeworICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKyAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KG1jLT5rd2RzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqb25lcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlVT0lUiIsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKG9uZXJlcHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICBpZiAoaSA+PSBudW10b3RhbGFyZ3MpIHsKKyAgICAgICAgICAgICAgICBpID0gLTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3JlcHJzLCBpLCBvbmVyZXByKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSAhPSBudW10b3RhbGFyZ3MpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmRzIGRpY3QgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNlcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOworICAgIGlmIChzZXAgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgam9pbmVkYXJncmVwcnMgPSBQeVVuaWNvZGVfSm9pbihzZXAsIGFyZ3JlcHJzKTsKKyAgICBQeV9ERUNSRUYoc2VwKTsKKyAgICBpZiAoam9pbmVkYXJncmVwcnMgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyglUiwgJVUpIiwgUHlfVFlQRShtYyktPnRwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jLT5uYW1lLCBqb2luZWRhcmdyZXBycyk7CisgICAgUHlfREVDUkVGKGpvaW5lZGFyZ3JlcHJzKTsKKworZG9uZToKKyAgICBQeV9ERUNSRUYoYXJncmVwcnMpOworICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltYyk7CisgICAgcmV0dXJuIHJlcHI7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZXRob2RjYWxsZXJfcmVkdWNlKG1ldGhvZGNhbGxlcm9iamVjdCAqbWMpCit7CisgICAgUHlPYmplY3QgKm5ld2FyZ3M7CisgICAgaWYgKCFtYy0+a3dkcyB8fCBQeURpY3RfU2l6ZShtYy0+a3dkcykgPT0gMCkgeworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIFB5X3NzaXplX3QgY2FsbGFyZ2NvdW50ID0gUHlUdXBsZV9HRVRfU0laRShtYy0+YXJncyk7CisgICAgICAgIG5ld2FyZ3MgPSBQeVR1cGxlX05ldygxICsgY2FsbGFyZ2NvdW50KTsKKyAgICAgICAgaWYgKG5ld2FyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBQeV9JTkNSRUYobWMtPm5hbWUpOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG5ld2FyZ3MsIDAsIG1jLT5uYW1lKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNhbGxhcmdjb3VudDsgKytpKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYXJnID0gUHlUdXBsZV9HRVRfSVRFTShtYy0+YXJncywgaSk7CisgICAgICAgICAgICBQeV9JTkNSRUYoYXJnKTsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0obmV3YXJncywgaSArIDEsIGFyZyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk9OIiwgUHlfVFlQRShtYyksIG5ld2FyZ3MpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmZ1bmN0b29sczsKKyAgICAgICAgUHlPYmplY3QgKnBhcnRpYWw7CisgICAgICAgIFB5T2JqZWN0ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgX1B5X0lERU5USUZJRVIocGFydGlhbCk7CisgICAgICAgIGZ1bmN0b29scyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZnVuY3Rvb2xzIik7CisgICAgICAgIGlmICghZnVuY3Rvb2xzKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHBhcnRpYWwgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZ1bmN0b29scywgJlB5SWRfcGFydGlhbCk7CisgICAgICAgIFB5X0RFQ1JFRihmdW5jdG9vbHMpOworICAgICAgICBpZiAoIXBhcnRpYWwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbmV3YXJncyA9IFB5VHVwbGVfTmV3KDIpOworICAgICAgICBpZiAobmV3YXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocGFydGlhbCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoUHlfVFlQRShtYykpOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG5ld2FyZ3MsIDAsIChQeU9iamVjdCAqKVB5X1RZUEUobWMpKTsKKyAgICAgICAgUHlfSU5DUkVGKG1jLT5uYW1lKTsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShuZXdhcmdzLCAxLCBtYy0+bmFtZSk7CisgICAgICAgIGNvbnN0cnVjdG9yID0gUHlPYmplY3RfQ2FsbChwYXJ0aWFsLCBuZXdhcmdzLCBtYy0+a3dkcyk7CisgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKHBhcnRpYWwpOworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTk8iLCBjb25zdHJ1Y3RvciwgbWMtPmFyZ3MpOworICAgIH0KK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1ldGhvZGNhbGxlcl9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKW1ldGhvZGNhbGxlcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLAorICAgICByZWR1Y2VfZG9jfSwKKyAgICB7TlVMTH0KK307CiBQeURvY19TVFJWQVIobWV0aG9kY2FsbGVyX2RvYywKICJtZXRob2RjYWxsZXIobmFtZSwgLi4uKSAtLT4gbWV0aG9kY2FsbGVyIG9iamVjdFxuXAogXG5cCkBAIC04ODQsNyArMTE1OSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpbWV0aG9kY2FsbGVyX3JlcHIsICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCkBAIC05MDIsNyArMTE3Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbWV0aG9kY2FsbGVyX21ldGhvZHMsICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19waWNrbGUuYyBiL01vZHVsZXMvX3BpY2tsZS5jCmluZGV4IGMzNTdkY2MuLjNjMjFiNmEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3BpY2tsZS5jCisrKyBiL01vZHVsZXMvX3BpY2tsZS5jCkBAIC01LDE0ICs1LDEzIEBACiAiT3B0aW1pemVkIEMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBQeXRob24gcGlja2xlIG1vZHVsZS4iKTsKIAogLypbY2xpbmljIGlucHV0XQotb3V0cHV0IHByZXNldCBmaWxlCiBtb2R1bGUgX3BpY2tsZQogY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgogY2xhc3MgX3BpY2tsZS5QaWNrbGVyTWVtb1Byb3h5ICJQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICoiICImUGlja2xlck1lbW9Qcm94eVR5cGUiCiBjbGFzcyBfcGlja2xlLlVucGlja2xlciAiVW5waWNrbGVyT2JqZWN0ICoiICImVW5waWNrbGVyX1R5cGUiCiBjbGFzcyBfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eSAiVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICoiICImVW5waWNrbGVyTWVtb1Byb3h5VHlwZSIKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTExYzQ1MjQ4YTQxZGQzZmNdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTRiM2UxMTM0NjhhNThlNmNdKi8KIAogLyogQnVtcCB0aGlzIHdoZW4gbmV3IG9wY29kZXMgYXJlIGFkZGVkIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wuICovCiBlbnVtIHsKQEAgLTE1Miw2ICsxNTEsOCBAQAogCiAgICAgLyogY29kZWNzLmVuY29kZSwgdXNlZCBmb3Igc2F2aW5nIGJ5dGVzIGluIG9sZGVyIHByb3RvY29scyAqLwogICAgIFB5T2JqZWN0ICpjb2RlY3NfZW5jb2RlOworICAgIC8qIGJ1aWx0aW5zLmdldGF0dHIsIHVzZWQgZm9yIHNhdmluZyBuZXN0ZWQgbmFtZXMgd2l0aCBwcm90b2NvbCA8IDQgKi8KKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKIH0gUGlja2xlU3RhdGU7CiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIF9waWNrbGUgbW9kdWxlIGRlZmluaXRpb24uICovCkBAIC0xODgsMTYgKzE4OSwyNiBAQAogICAgIFB5X0NMRUFSKHN0LT5uYW1lX21hcHBpbmdfM3RvMik7CiAgICAgUHlfQ0xFQVIoc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpOwogICAgIFB5X0NMRUFSKHN0LT5jb2RlY3NfZW5jb2RlKTsKKyAgICBQeV9DTEVBUihzdC0+Z2V0YXR0cik7CiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIGdpdmVuIHBpY2tsZSBtb2R1bGUgc3RhdGUuICovCiBzdGF0aWMgaW50CiBfUGlja2xlX0luaXRTdGF0ZShQaWNrbGVTdGF0ZSAqc3QpCiB7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOwogICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTDsKICAgICBQeU9iamVjdCAqY29tcGF0X3BpY2tsZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNvZGVjcyA9IE5VTEw7CiAKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGlmIChidWlsdGlucyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHN0LT5nZXRhdHRyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoYnVpbHRpbnMsICJnZXRhdHRyIik7CisgICAgaWYgKHN0LT5nZXRhdHRyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgUHlfSU5DUkVGKHN0LT5nZXRhdHRyKTsKKwogICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKICAgICBpZiAoIWNvcHlyZWcpCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC00MjAsMTIgKzQzMSwxMiBAQAogUGRhdGFfZ3JvdyhQZGF0YSAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqKmRhdGEgPSBzZWxmLT5kYXRhOwotICAgIFB5X3NzaXplX3QgYWxsb2NhdGVkID0gc2VsZi0+YWxsb2NhdGVkOwotICAgIFB5X3NzaXplX3QgbmV3X2FsbG9jYXRlZDsKKyAgICBzaXplX3QgYWxsb2NhdGVkID0gKHNpemVfdClzZWxmLT5hbGxvY2F0ZWQ7CisgICAgc2l6ZV90IG5ld19hbGxvY2F0ZWQ7CiAKICAgICBuZXdfYWxsb2NhdGVkID0gKGFsbG9jYXRlZCA+PiAzKSArIDY7CiAgICAgLyogY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cgKi8KLSAgICBpZiAobmV3X2FsbG9jYXRlZCA+IFBZX1NTSVpFX1RfTUFYIC0gYWxsb2NhdGVkKQorICAgIGlmIChuZXdfYWxsb2NhdGVkID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAtIGFsbG9jYXRlZCkKICAgICAgICAgZ290byBub21lbW9yeTsKICAgICBuZXdfYWxsb2NhdGVkICs9IGFsbG9jYXRlZDsKICAgICBQeU1lbV9SRVNJWkUoZGF0YSwgUHlPYmplY3QgKiwgbmV3X2FsbG9jYXRlZCk7CkBAIC00MzMsNyArNDQ0LDcgQEAKICAgICAgICAgZ290byBub21lbW9yeTsKIAogICAgIHNlbGYtPmRhdGEgPSBkYXRhOwotICAgIHNlbGYtPmFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CisgICAgc2VsZi0+YWxsb2NhdGVkID0gKFB5X3NzaXplX3QpbmV3X2FsbG9jYXRlZDsKICAgICByZXR1cm4gMDsKIAogICBub21lbW9yeToKQEAgLTUzOSw3ICs1NTAsNyBAQAogICAgIGludCBiaW47ICAgICAgICAgICAgICAgICAgICAvKiBCb29sZWFuLCB0cnVlIGlmIHByb3RvID4gMCAqLwogICAgIGludCBmcmFtaW5nOyAgICAgICAgICAgICAgICAvKiBUcnVlIHdoZW4gZnJhbWluZyBpcyBlbmFibGVkLCBwcm90byA+PSA0ICovCiAgICAgUHlfc3NpemVfdCBmcmFtZV9zdGFydDsgICAgIC8qIFBvc2l0aW9uIGluIG91dHB1dF9idWZmZXIgd2hlcmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBjdXJyZW50IGZyYW1lIGJlZ2lucy4gLTEgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCBmcmFtZSBiZWdpbnMuIC0xIGlmIHRoZXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vIGZyYW1lIGN1cnJlbnRseSBvcGVuLiAqLwogCiAgICAgUHlfc3NpemVfdCBidWZfc2l6ZTsgICAgICAgIC8qIFNpemUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyZWQgcGlja2xlIGRhdGEgKi8KQEAgLTgzNSw5ICs4NDYsOCBAQAogc3RhdGljIGludAogX1BpY2tsZXJfQ2xlYXJCdWZmZXIoUGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeV9DTEVBUihzZWxmLT5vdXRwdXRfYnVmZmVyKTsKLSAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0KLSAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzZWxmLT5tYXhfb3V0cHV0X2xlbik7CisgICAgUHlfWFNFVFJFRihzZWxmLT5vdXRwdXRfYnVmZmVyLAorICAgICAgICAgICAgICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNlbGYtPm1heF9vdXRwdXRfbGVuKSk7CiAgICAgaWYgKHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHNlbGYtPm91dHB1dF9sZW4gPSAwOwpAQCAtODQ4LDcgKzg1OCw3IEBACiBzdGF0aWMgdm9pZAogX3dyaXRlX3NpemU2NChjaGFyICpvdXQsIHNpemVfdCB2YWx1ZSkKIHsKLSAgICBpbnQgaTsKKyAgICBzaXplX3QgaTsKIAogICAgIGFzc2VydChzaXplb2Yoc2l6ZV90KSA8PSA4KTsKIApAQCAtMTA4Niw3ICsxMDk2LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBhc3NlcnQoc2VsZi0+cGVlayk7ICAvKiBvdGhlcndpc2Ugd2UgZGlkIHNvbWV0aGluZyB3cm9uZyAqLwotICAgIC8qIFRoaXMgbWFrZXMgYW4gdXNlbGVzcyBjb3B5Li4uICovCisgICAgLyogVGhpcyBtYWtlcyBhIHVzZWxlc3MgY29weS4uLiAqLwogICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cmVhZCwgIm4iLCBjb25zdW1lZCk7CiAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTQ1OSw3ICsxNDY5LDcgQEAKICAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKCp2YWx1ZSAmIDB4ZmYpOwogICAgICAgICAgICAgbGVuID0gMjsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgqdmFsdWUgPD0gMHhmZmZmZmZmZkwpIHsKKyAgICAgICAgZWxzZSBpZiAoKHNpemVfdCkqdmFsdWUgPD0gMHhmZmZmZmZmZlVMKSB7CiAgICAgICAgICAgICBwZGF0YVswXSA9IExPTkdfQklOR0VUOwogICAgICAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoKnZhbHVlICYgMHhmZik7CiAgICAgICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKnZhbHVlID4+IDgpICYgMHhmZik7CkBAIC0xNTE2LDcgKzE1MjYsNyBAQAogICAgICAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcilpZHg7CiAgICAgICAgICAgICBsZW4gPSAyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlkeCA8PSAweGZmZmZmZmZmTCkgeworICAgICAgICBlbHNlIGlmICgoc2l6ZV90KWlkeCA8PSAweGZmZmZmZmZmVUwpIHsKICAgICAgICAgICAgIHBkYXRhWzBdID0gTE9OR19CSU5QVVQ7CiAgICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKShpZHggJiAweGZmKTsKICAgICAgICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKChpZHggPj4gOCkgJiAweGZmKTsKQEAgLTE1MzgsNjYgKzE1NDgsMTAxIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1nZXRhdHRyaWJ1dGUoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUsIGludCBhbGxvd19xdWFsbmFtZSkgewotICAgIFB5T2JqZWN0ICpkb3R0ZWRfcGF0aDsKLSAgICBQeV9zc2l6ZV90IGk7CitnZXRfZG90dGVkX3BhdGgoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUpIHsKICAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2RvdCwgIi4iKTsKICAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2xvY2FscywgIjxsb2NhbHM+Iik7CisgICAgUHlPYmplY3QgKmRvdHRlZF9wYXRoOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIGRvdHRlZF9wYXRoID0gUHlVbmljb2RlX1NwbGl0KG5hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2RvdCksIC0xKTsKLSAgICBpZiAoZG90dGVkX3BhdGggPT0gTlVMTCkgeworICAgIGlmIChkb3R0ZWRfcGF0aCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgYXNzZXJ0KFB5X1NJWkUoZG90dGVkX3BhdGgpID49IDEpOwotICAgIGlmICghYWxsb3dfcXVhbG5hbWUgJiYgUHlfU0laRShkb3R0ZWRfcGF0aCkgPiAxKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgcXVhbGlmaWVkIGF0dHJpYnV0ZSAlUiBvbiAlUjsiCi0gICAgICAgICAgICAgICAgICAgICAidXNlIHByb3RvY29scyA+PSA0IHRvIGVuYWJsZSBzdXBwb3J0IiwKLSAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG9iaik7Ci0gICAgICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBQeV9JTkNSRUYob2JqKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShkb3R0ZWRfcGF0aCk7IGkrKykgeworICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUoZG90dGVkX3BhdGgpOworICAgIGFzc2VydChuID49IDEpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKnN1YnBhdGggPSBQeUxpc3RfR0VUX0lURU0oZG90dGVkX3BhdGgsIGkpOwotICAgICAgICBQeU9iamVjdCAqdG1wOwogICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAogICAgICAgICAgICAgc3VicGF0aCwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbG9jYWxzKSwgUHlfRVEpOwogICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOwogICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOwogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgaWYgKGlzX2VxdWFsKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBsb2NhbCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOwotICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHN1YnBhdGgpOwotICAgICAgICBQeV9ERUNSRUYob2JqKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgaWYgKG9iaiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlIGxvY2FsIG9iamVjdCAlUiIsIG5hbWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSBsb2NhbCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOwogICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIG9iaiA9IHRtcDsKICAgICB9Ci0gICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKLSAgICByZXR1cm4gb2JqOworICAgIHJldHVybiBkb3R0ZWRfcGF0aDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdoaWNobW9kdWxlKFB5T2JqZWN0ICpnbG9iYWwsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSwgaW50IGFsbG93X3F1YWxuYW1lKQorZ2V0X2RlZXBfYXR0cmlidXRlKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lcywgUHlPYmplY3QgKipwcGFyZW50KQoreworICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeU9iamVjdCAqcGFyZW50ID0gTlVMTDsKKworICAgIGFzc2VydChQeUxpc3RfQ2hlY2tFeGFjdChuYW1lcykpOworICAgIFB5X0lOQ1JFRihvYmopOworICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUobmFtZXMpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeUxpc3RfR0VUX0lURU0obmFtZXMsIGkpOworICAgICAgICBQeV9YREVDUkVGKHBhcmVudCk7CisgICAgICAgIHBhcmVudCA9IG9iajsKKyAgICAgICAgb2JqID0gUHlPYmplY3RfR2V0QXR0cihwYXJlbnQsIG5hbWUpOworICAgICAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihwYXJlbnQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBwYXJlbnQgIT0gTlVMTCkKKyAgICAgICAgKnBwYXJlbnQgPSBwYXJlbnQ7CisgICAgZWxzZQorICAgICAgICBQeV9YREVDUkVGKHBhcmVudCk7CisgICAgcmV0dXJuIG9iajsKK30KKworc3RhdGljIHZvaWQKK3JlZm9ybWF0X2F0dHJpYnV0ZV9lcnJvcihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSkKK3sKKyAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgIH0KK30KKworCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXR0cmlidXRlKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lLCBpbnQgYWxsb3dfcXVhbG5hbWUpCit7CisgICAgUHlPYmplY3QgKmRvdHRlZF9wYXRoLCAqYXR0cjsKKworICAgIGlmIChhbGxvd19xdWFsbmFtZSkgeworICAgICAgICBkb3R0ZWRfcGF0aCA9IGdldF9kb3R0ZWRfcGF0aChvYmosIG5hbWUpOworICAgICAgICBpZiAoZG90dGVkX3BhdGggPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBhdHRyID0gZ2V0X2RlZXBfYXR0cmlidXRlKG9iaiwgZG90dGVkX3BhdGgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZG90dGVkX3BhdGgpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGF0dHIgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZSk7CisgICAgaWYgKGF0dHIgPT0gTlVMTCkKKyAgICAgICAgcmVmb3JtYXRfYXR0cmlidXRlX2Vycm9yKG9iaiwgbmFtZSk7CisgICAgcmV0dXJuIGF0dHI7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aGljaG1vZHVsZShQeU9iamVjdCAqZ2xvYmFsLCBQeU9iamVjdCAqZG90dGVkX3BhdGgpCiB7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBQeU9iamVjdCAqb2JqOwotICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CiAgICAgX1B5X0lERU5USUZJRVIobW9kdWxlcyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19tYWluX18pOwpAQCAtMTYxOSw2ICsxNjY0LDcgQEAKICAgICB9CiAgICAgYXNzZXJ0KG1vZHVsZV9uYW1lID09IE5VTEwpOwogCisgICAgLyogRmFsbGJhY2sgb24gd2Fsa2luZyBzeXMubW9kdWxlcyAqLwogICAgIG1vZHVsZXNfZGljdCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9tb2R1bGVzKTsKICAgICBpZiAobW9kdWxlc19kaWN0ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLm1vZHVsZXMiKTsKQEAgLTE2MjYsMzEgKzE2NzIsMjggQEAKICAgICB9CiAKICAgICBpID0gMDsKLSAgICB3aGlsZSAoKGogPSBQeURpY3RfTmV4dChtb2R1bGVzX2RpY3QsICZpLCAmbW9kdWxlX25hbWUsICZtb2R1bGUpKSkgewotICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAotICAgICAgICAgICAgbW9kdWxlX25hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbWFpbl9fKSwgUHlfRVEpOwotICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOwotICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOwotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgaWYgKGlzX2VxdWFsKQorICAgIHdoaWxlIChQeURpY3RfTmV4dChtb2R1bGVzX2RpY3QsICZpLCAmbW9kdWxlX25hbWUsICZtb2R1bGUpKSB7CisgICAgICAgIFB5T2JqZWN0ICpjYW5kaWRhdGU7CisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobW9kdWxlX25hbWUpICYmCisgICAgICAgICAgICAhUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobW9kdWxlX25hbWUsICJfX21haW5fXyIpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChtb2R1bGUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG9iaiA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBhbGxvd19xdWFsbmFtZSk7Ci0gICAgICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBjYW5kaWRhdGUgPSBnZXRfZGVlcF9hdHRyaWJ1dGUobW9kdWxlLCBkb3R0ZWRfcGF0aCwgTlVMTCk7CisgICAgICAgIGlmIChjYW5kaWRhdGUgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChvYmogPT0gZ2xvYmFsKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBnbG9iYWwpIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY2FuZGlkYXRlKTsKICAgICAgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZTsKICAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGNhbmRpZGF0ZSk7CiAgICAgfQogCiAgICAgLyogSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCB1c2UgX19tYWluX18uICovCkBAIC0xOTM2LDcgKzE5NzksNyBAQAogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm9wLCAxKSA8IDApCiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAKLSAgICAgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsICdnJywgMTcsIDAsIE5VTEwpOworICAgICAgICBidWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoeCwgJ3InLCAwLCBQeV9EVFNGX0FERF9ET1RfMCwgTlVMTCk7CiAgICAgICAgIGlmICghYnVmKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgZ290byBkb25lOwpAQCAtMjAxNiw3ICsyMDU5LDcgQEAKICAgICAgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKXNpemU7CiAgICAgICAgICAgICBsZW4gPSAyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPD0gMHhmZmZmZmZmZkwpIHsKKyAgICAgICAgZWxzZSBpZiAoKHNpemVfdClzaXplIDw9IDB4ZmZmZmZmZmZVTCkgewogICAgICAgICAgICAgaGVhZGVyWzBdID0gQklOQllURVM7CiAgICAgICAgICAgICBoZWFkZXJbMV0gPSAodW5zaWduZWQgY2hhcikoc2l6ZSAmIDB4ZmYpOwogICAgICAgICAgICAgaGVhZGVyWzJdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDgpICYgMHhmZik7CkBAIC0yMDUzLDkgKzIwOTYsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiByYXdfdW5pY29kZV9lc2NhcGUoUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeU9iamVjdCAqcmVwciwgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqcmVwcjsKICAgICBjaGFyICpwOwotICAgIFB5X3NzaXplX3QgaSwgc2l6ZSwgZXhwYW5kc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGksIHNpemU7CisgICAgc2l6ZV90IGV4cGFuZHNpemU7CiAgICAgdm9pZCAqZGF0YTsKICAgICB1bnNpZ25lZCBpbnQga2luZDsKIApAQCAtMjA3MCwxNSArMjExNCwxNiBAQAogICAgIGVsc2UKICAgICAgICAgZXhwYW5kc2l6ZSA9IDY7CiAKLSAgICBpZiAoc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC8gZXhwYW5kc2l6ZSkKKyAgICBpZiAoKHNpemVfdClzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIGV4cGFuZHNpemUpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIHJlcHIgPSBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBleHBhbmRzaXplICogc2l6ZSk7CisgICAgcmVwciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZXhwYW5kc2l6ZSAqIHNpemUpOwogICAgIGlmIChyZXByID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplID09IDApCi0gICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgcmV0dXJuIHJlcHI7CisgICAgYXNzZXJ0KFB5X1JFRkNOVChyZXByKSA9PSAxKTsKIAotICAgIHAgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcocmVwcik7CisgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcHIpOwogICAgIGZvciAoaT0wOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKICAgICAgICAgLyogTWFwIDMyLWJpdCBjaGFyYWN0ZXJzIHRvICdcVXh4eHh4eHh4JyAqLwpAQCAtMjEwNywxMiArMjE1MiwxMCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICAqcCsrID0gKGNoYXIpIGNoOwogICAgIH0KLSAgICBzaXplID0gcCAtIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhyZXByKTsKLQotZG9uZToKLSAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhyZXByKSwgc2l6ZSk7Ci0gICAgUHlfREVDUkVGKHJlcHIpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgc2l6ZSA9IHAgLSBQeUJ5dGVzX0FTX1NUUklORyhyZXByKTsKKyAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXByLCBzaXplKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiByZXByOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMTIxLDEyICsyMTY0LDEzIEBACiAgICAgY2hhciBoZWFkZXJbOV07CiAgICAgUHlfc3NpemVfdCBsZW47CiAKKyAgICBhc3NlcnQoc2l6ZSA+PSAwKTsKICAgICBpZiAoc2l6ZSA8PSAweGZmICYmIHNlbGYtPnByb3RvID49IDQpIHsKICAgICAgICAgaGVhZGVyWzBdID0gU0hPUlRfQklOVU5JQ09ERTsKICAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKICAgICAgICAgbGVuID0gMjsKICAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSA8PSAweGZmZmZmZmZmVUwpIHsKKyAgICBlbHNlIGlmICgoc2l6ZV90KXNpemUgPD0gMHhmZmZmZmZmZlVMKSB7CiAgICAgICAgIGhlYWRlclswXSA9IEJJTlVOSUNPREU7CiAgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CiAgICAgICAgIGhlYWRlclsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiA4KSAmIDB4ZmYpOwpAQCAtMzA0NCw5ICszMDg4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBQeV9DTEVBUigqbW9kdWxlX25hbWUpOwogICAgICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgICAgICptb2R1bGVfbmFtZSA9IGl0ZW07CisgICAgICAgIFB5X1hTRVRSRUYoKm1vZHVsZV9uYW1lLCBpdGVtKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICByZXR1cm4gLTE7CkBAIC0zMDYxLDYgKzMxMDQsOSBAQAogICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lID0gTlVMTDsKICAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcGFyZW50ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZG90dGVkX3BhdGggPSBOVUxMOworICAgIFB5T2JqZWN0ICpsYXN0bmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNsczsKICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgaW50IHN0YXR1cyA9IDA7CkBAIC0zMDc0LDEzICszMTIwLDExIEBACiAgICAgICAgIGdsb2JhbF9uYW1lID0gbmFtZTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7Ci0gICAgICAgICAgICBnbG9iYWxfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX3F1YWxuYW1lX18pOwotICAgICAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGdsb2JhbF9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fcXVhbG5hbWVfXyk7CisgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CiAgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX25hbWVfXyk7CkBAIC0zMDg5LDcgKzMxMzMsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CisgICAgZG90dGVkX3BhdGggPSBnZXRfZG90dGVkX3BhdGgobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgaWYgKGRvdHRlZF9wYXRoID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgbW9kdWxlX25hbWUgPSB3aGljaG1vZHVsZShvYmosIGRvdHRlZF9wYXRoKTsKICAgICBpZiAobW9kdWxlX25hbWUgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMzEwOCw3ICszMTU1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICBvYmosIG1vZHVsZV9uYW1lKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgY2xzID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOworICAgIGxhc3RuYW1lID0gUHlMaXN0X0dFVF9JVEVNKGRvdHRlZF9wYXRoLCBQeUxpc3RfR0VUX1NJWkUoZG90dGVkX3BhdGgpLTEpOworICAgIFB5X0lOQ1JFRihsYXN0bmFtZSk7CisgICAgY2xzID0gZ2V0X2RlZXBfYXR0cmlidXRlKG1vZHVsZSwgZG90dGVkX3BhdGgsICZwYXJlbnQpOworICAgIFB5X0NMRUFSKGRvdHRlZF9wYXRoKTsKICAgICBpZiAoY2xzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogYXR0cmlidXRlIGxvb2t1cCAlUyBvbiAlUyBmYWlsZWQiLApAQCAtMzE5NSw2ICszMjQ1LDExIEBACiAgICAgfQogICAgIGVsc2UgewogICBnZW5fZ2xvYmFsOgorICAgICAgICBpZiAocGFyZW50ID09IG1vZHVsZSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGxhc3RuYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihnbG9iYWxfbmFtZSk7CisgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IGxhc3RuYW1lOworICAgICAgICB9CiAgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyIHN0YWNrX2dsb2JhbF9vcCA9IFNUQUNLX0dMT0JBTDsKIApAQCAtMzIwNiw2ICszMjYxLDE1IEBACiAgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnN0YWNrX2dsb2JhbF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGFyZW50ICE9IG1vZHVsZSkgeworICAgICAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE9PKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5nZXRhdHRyLCBwYXJlbnQsIGxhc3RuYW1lKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHNhdmVfcmVkdWNlKHNlbGYsIHJlZHVjZV92YWx1ZSwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVkdWNlX3ZhbHVlKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBHZW5lcmF0ZSBhIG5vcm1hbCBnbG9iYWwgb3Bjb2RlIGlmIHdlIGFyZSB1c2luZyBhIHBpY2tsZQogICAgICAgICAgICAgICAgcHJvdG9jb2wgPCA0LCBvciBpZiB0aGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZQpAQCAtMzI4NCw2ICszMzQ4LDkgQEAKICAgICBQeV9YREVDUkVGKG1vZHVsZV9uYW1lKTsKICAgICBQeV9YREVDUkVGKGdsb2JhbF9uYW1lKTsKICAgICBQeV9YREVDUkVGKG1vZHVsZSk7CisgICAgUHlfWERFQ1JFRihwYXJlbnQpOworICAgIFB5X1hERUNSRUYoZG90dGVkX3BhdGgpOworICAgIFB5X1hERUNSRUYobGFzdG5hbWUpOwogCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTMzMzksMjYgKzM0MDYsMzAgQEAKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlPYmplY3QgKnBpZF9zdHIgPSBOVUxMOwotICAgICAgICAgICAgY2hhciAqcGlkX2FzY2lpX2J5dGVzOwotICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOworICAgICAgICAgICAgUHlPYmplY3QgKnBpZF9zdHI7CiAKICAgICAgICAgICAgIHBpZF9zdHIgPSBQeU9iamVjdF9TdHIocGlkKTsKICAgICAgICAgICAgIGlmIChwaWRfc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICAgICAgLyogWFhYOiBTaG91bGQgaXQgY2hlY2sgd2hldGhlciB0aGUgcGVyc2lzdGVudCBpZCBvbmx5IGNvbnRhaW5zCi0gICAgICAgICAgICAgICBBU0NJSSBjaGFyYWN0ZXJzPyBBbmQgd2hhdCBpZiB0aGUgcGlkIGNvbnRhaW5zIGVtYmVkZGVkCisgICAgICAgICAgICAvKiBYWFg6IFNob3VsZCBpdCBjaGVjayB3aGV0aGVyIHRoZSBwaWQgY29udGFpbnMgZW1iZWRkZWQKICAgICAgICAgICAgICAgIG5ld2xpbmVzPyAqLwotICAgICAgICAgICAgcGlkX2FzY2lpX2J5dGVzID0gX1B5VW5pY29kZV9Bc1N0cmluZ0FuZFNpemUocGlkX3N0ciwgJnNpemUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHBpZF9zdHIpOwotICAgICAgICAgICAgaWYgKHBpZF9hc2NpaV9ieXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfSVNfQVNDSUkocGlkX3N0cikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpLT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyc2lzdGVudCBJRHMgaW4gcHJvdG9jb2wgMCBtdXN0IGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFTQ0lJIHN0cmluZ3MiKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocGlkX3N0cik7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZwZXJzaWRfb3AsIDEpIDwgMCB8fAotICAgICAgICAgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBpZF9hc2NpaV9ieXRlcywgc2l6ZSkgPCAwIHx8Ci0gICAgICAgICAgICAgICAgX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQorICAgICAgICAgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5VW5pY29kZV9EQVRBKHBpZF9zdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHBpZF9zdHIpKSA8IDAgfHwKKyAgICAgICAgICAgICAgICBfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocGlkX3N0cik7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihwaWRfc3RyKTsKICAgICAgICAgfQogICAgICAgICBzdGF0dXMgPSAxOwogICAgIH0KQEAgLTM0NjMsMjAgKzM1MzQsMTkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgewotICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfZXhfXyk7Ci0gICAgICAgICAgICB1c2VfbmV3b2JqX2V4ID0gUHlVbmljb2RlX0NoZWNrKG5hbWUpICYmCi0gICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUoCi0gICAgICAgICAgICAgICAgICAgIG5hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbmV3b2JqX2V4X18pKSA9PSAwOwotICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOworICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfZXhfXyk7CisgICAgICAgICAgICAgICAgdXNlX25ld29ial9leCA9IFB5VW5pY29kZV9Db21wYXJlKAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19uZXdvYmpfZXhfXykpID09IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVzZV9uZXdvYmpfZXgpIHsKKyAgICAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9fKTsKKyAgICAgICAgICAgICAgICB1c2VfbmV3b2JqID0gUHlVbmljb2RlX0NvbXBhcmUoCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX25ld29ial9fKSkgPT0gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOwotICAgICAgICAgICAgdXNlX25ld29iaiA9IFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKAotICAgICAgICAgICAgICAgICAgICBuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX25ld29ial9fKSkgPT0gMDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICAgICAgfQorICAgICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIH0KIAogICAgIGlmICh1c2VfbmV3b2JqX2V4KSB7CkBAIC0zNTYxLDcgKzM2MzEsNyBAQAogICAgICAgICAgICAgID4+PiBwaWNrbGUuZHVtcHMoMSsyaikKICAgICAgICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgICAgICAgICAuLi4KLSAgICAgICAgICAgICBSdW50aW1lRXJyb3I6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkCisgICAgICAgICAgICAgUmVjdXJzaW9uRXJyb3I6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkCiAKICAgICAgICAgICAgUmVtb3ZpbmcgdGhlIGNvbXBsZXggY2xhc3MgZnJvbSBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlIG1hZGUgdGhlCiAgICAgICAgICAgIF9fcmVkdWNlX2V4X18oKSBtZXRob2QgZW1pdCBhbm90aGVyIGNvbXBsZXggb2JqZWN0OgpAQCAtMzk0Nyw3ICs0MDE3LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlcywgczsKIAotICAgIHJlcyA9IHNpemVvZihQaWNrbGVyT2JqZWN0KTsKKyAgICByZXMgPSBfUHlPYmplY3RfU0laRShQeV9UWVBFKHNlbGYpKTsKICAgICBpZiAoc2VsZi0+bWVtbyAhPSBOVUxMKSB7CiAgICAgICAgIHJlcyArPSBzaXplb2YoUHlNZW1vVGFibGUpOwogICAgICAgICByZXMgKz0gc2VsZi0+bWVtby0+bXRfYWxsb2NhdGVkICogc2l6ZW9mKFB5TWVtb0VudHJ5KTsKQEAgLTQwNDEsOCArNDExMSw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBpbnQKLV9waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NmUyMjlmM2IxZjQzMzJmIGlucHV0PTRmYWFiZGJjNzYzYzIzODldKi8KK19waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjVmMzEwNzhkYWIxN2ZiMCBpbnB1dD00ZmFhYmRiYzc2M2MyMzg5XSovCiB7CiAgICAgX1B5X0lERU5USUZJRVIocGVyc2lzdGVudF9pZCk7CiAgICAgX1B5X0lERU5USUZJRVIoZGlzcGF0Y2hfdGFibGUpOwpAQCAtNDU2MiwxNCArNDYzMywxNCBAQAogCiAvKiBzIGNvbnRhaW5zIHggYnl0ZXMgb2YgYSBsaXR0bGUtZW5kaWFuIGludGVnZXIuICBSZXR1cm4gaXRzIHZhbHVlIGFzIGEKICAqIEMgaW50LiAgT2JzY3VyZTogIHdoZW4geCBpcyAxIG9yIDIsIHRoaXMgaXMgYW4gdW5zaWduZWQgbGl0dGxlLWVuZGlhbgotICogaW50LCBidXQgd2hlbiB4IGlzIDQgaXQncyBhIHNpZ25lZCBvbmUuICBUaGlzIGlzIGFuIGhpc3RvcmljYWwgc291cmNlCisgKiBpbnQsIGJ1dCB3aGVuIHggaXMgNCBpdCdzIGEgc2lnbmVkIG9uZS4gIFRoaXMgaXMgYSBoaXN0b3JpY2FsIHNvdXJjZQogICogb2YgeC1wbGF0Zm9ybSBidWdzLgogICovCiBzdGF0aWMgbG9uZwogY2FsY19iaW5pbnQoY2hhciAqYnl0ZXMsIGludCBuYnl0ZXMpCiB7CiAgICAgdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopYnl0ZXM7Ci0gICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIGxvbmcgeCA9IDA7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbmJ5dGVzOyBpKyspIHsKQEAgLTQ5MTUsNyArNDk4Niw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfY291bnRlZF90dXBsZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBsZW4pCitsb2FkX2NvdW50ZWRfdHVwbGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGxlbikKIHsKICAgICBQeU9iamVjdCAqdHVwbGU7CiAKQEAgLTUzMjIsOSArNTM5MywxNSBAQAogICAgICAgICBpZiAobGVuIDwgMSkKICAgICAgICAgICAgIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKIAotICAgICAgICBwaWQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIGxlbiAtIDEpOwotICAgICAgICBpZiAocGlkID09IE5VTEwpCisgICAgICAgIHBpZCA9IFB5VW5pY29kZV9EZWNvZGVBU0NJSShzLCBsZW4gLSAxLCAic3RyaWN0Iik7CisgICAgICAgIGlmIChwaWQgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZURlY29kZUVycm9yKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhfUGlja2xlX0dldEdsb2JhbFN0YXRlKCktPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcnNpc3RlbnQgSURzIGluIHByb3RvY29sIDAgbXVzdCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBU0NJSSBzdHJpbmdzIik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAogICAgICAgICAvKiBUaGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1BpY2tsZV9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUgcmVmZXJlbmNlCiAgICAgICAgICAgIHRvIHBpZCBmaXJzdC4gKi8KQEAgLTYyNDksOCArNjMyNiwxMCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzc19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1vZHVsZV9uYW1lLCBQeU9iamVjdCAqZ2xvYmFsX25hbWUpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjRjNzc0MzdlMDg4ZTE4OCBpbnB1dD1lMmU2YTg2NWRlMDkzZWY0XSovCitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZ2xvYmFsX25hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmVjYzA4ZDdmOWVkNDFlMyBpbnB1dD1lMmU2YTg2NWRlMDkzZWY0XSovCiB7CiAgICAgUHlPYmplY3QgKmdsb2JhbDsKICAgICBQeU9iamVjdCAqbW9kdWxlc19kaWN0OwpAQCAtNjM0Nyw3ICs2NDI2LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlczsKIAotICAgIHJlcyA9IHNpemVvZihVbnBpY2tsZXJPYmplY3QpOworICAgIHJlcyA9IF9QeU9iamVjdF9TSVpFKFB5X1RZUEUoc2VsZikpOwogICAgIGlmIChzZWxmLT5tZW1vICE9IE5VTEwpCiAgICAgICAgIHJlcyArPSBzZWxmLT5tZW1vX3NpemUgKiBzaXplb2YoUHlPYmplY3QgKik7CiAgICAgaWYgKHNlbGYtPm1hcmtzICE9IE5VTEwpCkBAIC02NDUxLDcgKzY1MzAsNyBAQAogb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCiBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCi13aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQogZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8KIG1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZQogKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcKQEAgLTY0NjEsOCArNjU0MCwxMCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgaW50Ci1fcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iOWVkMWQ4NGQzMTVmM2I1IGlucHV0PTA0ZWNlNjYxYWE4ODQ4MzddKi8KK19waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWUyYzhjZTc0OGVkYzU3YjAgaW5wdXQ9ZjliN2RhMDRmNWY0ZjMzNV0qLwogewogICAgIF9QeV9JREVOVElGSUVSKHBlcnNpc3RlbnRfbG9hZCk7CiAKQEAgLTY4OTAsOCArNjk3MSw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fcGlja2xlX2R1bXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTYwNmU2MjZkNTUzODUwZCBpbnB1dD04MzBmOGE2NGNlZjZmMDQyXSovCitfcGlja2xlX2R1bXBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqZmlsZSwKKyAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE0Nzc0ZDVmZGU3ZDM0ZGUgaW5wdXQ9ODMwZjhhNjRjZWY2ZjA0Ml0qLwogewogICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKIApAQCAtNjk0Myw4ICs3MDI1LDkgQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLV9waWNrbGVfZHVtcHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NzdmMGRlZWZlNWI4OGVlIGlucHV0PTI5M2RiZWRhMTgxNTgwYjddKi8KK19waWNrbGVfZHVtcHNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ3NWQ1Y2RhNDU2ZmQyNjEgaW5wdXQ9MjkzZGJlZGExODE1ODBiN10qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgUGlja2xlck9iamVjdCAqcGlja2xlciA9IF9QaWNrbGVyX05ldygpOwpAQCAtNjk5Myw3ICs3MDc2LDcgQEAKIG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KIAogT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAotd2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQord2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0KIGdlbmVyYXRlZCBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvCiBtYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGUKICplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nCkBAIC03MDAzLDggKzcwODYsOSBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotX3BpY2tsZV9sb2FkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NjhjNjEzNTZjMTcyNjU0IGlucHV0PTJkZjdjN2ExZTY3NDIyMDRdKi8KK19waWNrbGVfbG9hZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTY5ZTI5ODE2MDI4NTE5OWUgaW5wdXQ9MDFiNDRkZDNmYzA3YWZhN10qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOwpAQCAtNzA0Niw3ICs3MTMwLDcgQEAKIHJlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgogCiBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCi13aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQogZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8KIG1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZQogKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcKQEAgLTcwNTYsOCArNzE0MCw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fcGlja2xlX2xvYWRzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmRhdGEsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wYjM4NDVhZDExMGIyNTIyIGlucHV0PWY1N2YwZmRhYTJiNGNiOGJdKi8KK19waWNrbGVfbG9hZHNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqZGF0YSwgaW50IGZpeF9pbXBvcnRzLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWU3Y2IyMzQzZjJjNDQwZiBpbnB1dD03MDYwNTk0OGE3MTlmZWI5XSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CkBAIC03MTE5LDYgKzcyMDQsNyBAQAogICAgIFB5X1ZJU0lUKHN0LT5uYW1lX21hcHBpbmdfM3RvMik7CiAgICAgUHlfVklTSVQoc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpOwogICAgIFB5X1ZJU0lUKHN0LT5jb2RlY3NfZW5jb2RlKTsKKyAgICBQeV9WSVNJVChzdC0+Z2V0YXR0cik7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKaW5kZXggMTQ5MDIyMy4uOGJlZGFiNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKKysrIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKQEAgLTExNywxMCArMTE3LDExIEBACiAgICAgZm9yIChzZXFfaWR4ID0gMDsgc2VxX2lkeCA8IHNlcV9sZW47ICsrc2VxX2lkeCkgewogICAgICAgICBQeU9iamVjdCogcHlfZmQgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oZmRfc2VxdWVuY2UsIHNlcV9pZHgpOwogICAgICAgICBsb25nIGl0ZXJfZmQgPSBQeUxvbmdfQXNMb25nKHB5X2ZkKTsKLSAgICAgICAgaWYgKGl0ZXJfZmQgPCAwIHx8IGl0ZXJfZmQgPCBwcmV2X2ZkIHx8IGl0ZXJfZmQgPiBJTlRfTUFYKSB7CisgICAgICAgIGlmIChpdGVyX2ZkIDwgMCB8fCBpdGVyX2ZkIDw9IHByZXZfZmQgfHwgaXRlcl9mZCA+IElOVF9NQVgpIHsKICAgICAgICAgICAgIC8qIE5lZ2F0aXZlLCBvdmVyZmxvdywgbm90IGEgTG9uZywgdW5zb3J0ZWQsIHRvbyBiaWcgZm9yIGEgZmQuICovCiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQorICAgICAgICBwcmV2X2ZkID0gaXRlcl9mZDsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yNzIsNyArMjczLDcgQEAKIHsKICAgICBpbnQgZmRfZGlyX2ZkOwogCi0gICAgZmRfZGlyX2ZkID0gX1B5X29wZW4oRkRfRElSLCBPX1JET05MWSk7CisgICAgZmRfZGlyX2ZkID0gX1B5X29wZW5fbm9yYWlzZShGRF9ESVIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmRfZGlyX2ZkID09IC0xKSB7CiAgICAgICAgIC8qIE5vIHdheSB0byBnZXQgYSBsaXN0IG9mIG9wZW4gZmRzLiAqLwogICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBweV9mZHNfdG9fa2VlcCk7CkBAIC00MDAsNyArNDAxLDcgQEAKICAgICAgICAgICAgUHlPYmplY3QgKnByZWV4ZWNfZm4sCiAgICAgICAgICAgIFB5T2JqZWN0ICpwcmVleGVjX2ZuX2FyZ3NfdHVwbGUpCiB7Ci0gICAgaW50IGksIHNhdmVkX2Vycm5vLCB1bnVzZWQsIHJlYWNoZWRfcHJlZXhlYyA9IDA7CisgICAgaW50IGksIHNhdmVkX2Vycm5vLCByZWFjaGVkX3ByZWV4ZWMgPSAwOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgY29uc3QgY2hhciogZXJyX21zZyA9ICIiOwogICAgIC8qIEJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGhleCBpbnRlZ2VyLiAgV2UgY2FuJ3QgbWFsbG9jLiAqLwpAQCAtNTE0LDI4ICs1MTUsMjkgQEAKICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwogICAgIC8qIFJlcG9ydCB0aGUgcG9zaXggZXJyb3IgdG8gb3VyIHBhcmVudCBwcm9jZXNzLiAqLwogICAgIC8qIFdlIGlnbm9yZSBhbGwgd3JpdGUoKSByZXR1cm4gdmFsdWVzIGFzIHRoZSB0b3RhbCBzaXplIG9mIG91ciB3cml0ZXMgaXMKLSAgICAgKiBsZXNzIHRoYW4gUElQRUJVRiBhbmQgd2UgY2Fubm90IGRvIGFueXRoaW5nIGFib3V0IGFuIGVycm9yIGFueXdheXMuICovCisgICAgICAgbGVzcyB0aGFuIFBJUEVCVUYgYW5kIHdlIGNhbm5vdCBkbyBhbnl0aGluZyBhYm91dCBhbiBlcnJvciBhbnl3YXlzLgorICAgICAgIFVzZSBfUHlfd3JpdGVfbm9yYWlzZSgpIHRvIHJldHJ5IHdyaXRlKCkgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgYQorICAgICAgIHNpZ25hbCAoZmFpbHMgd2l0aCBFSU5UUikuICovCiAgICAgaWYgKHNhdmVkX2Vycm5vKSB7CiAgICAgICAgIGNoYXIgKmN1cjsKLSAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIk9TRXJyb3I6IiwgOCk7CisgICAgICAgIF9QeV93cml0ZV9ub3JhaXNlKGVycnBpcGVfd3JpdGUsICJPU0Vycm9yOiIsIDgpOwogICAgICAgICBjdXIgPSBoZXhfZXJybm8gKyBzaXplb2YoaGV4X2Vycm5vKTsKICAgICAgICAgd2hpbGUgKHNhdmVkX2Vycm5vICE9IDAgJiYgY3VyID4gaGV4X2Vycm5vKSB7Ci0gICAgICAgICAgICAqLS1jdXIgPSAiMDEyMzQ1Njc4OUFCQ0RFRiJbc2F2ZWRfZXJybm8gJSAxNl07CisgICAgICAgICAgICAqLS1jdXIgPSBQeV9oZXhkaWdpdHNbc2F2ZWRfZXJybm8gJSAxNl07CiAgICAgICAgICAgICBzYXZlZF9lcnJubyAvPSAxNjsKICAgICAgICAgfQotICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCBjdXIsIGhleF9lcnJubyArIHNpemVvZihoZXhfZXJybm8pIC0gY3VyKTsKLSAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIjoiLCAxKTsKKyAgICAgICAgX1B5X3dyaXRlX25vcmFpc2UoZXJycGlwZV93cml0ZSwgY3VyLCBoZXhfZXJybm8gKyBzaXplb2YoaGV4X2Vycm5vKSAtIGN1cik7CisgICAgICAgIF9QeV93cml0ZV9ub3JhaXNlKGVycnBpcGVfd3JpdGUsICI6IiwgMSk7CiAgICAgICAgIGlmICghcmVhY2hlZF9wcmVleGVjKSB7CiAgICAgICAgICAgICAvKiBJbmRpY2F0ZSB0byB0aGUgcGFyZW50IHRoYXQgdGhlIGVycm9yIGhhcHBlbmVkIGJlZm9yZSBleGVjKCkuICovCi0gICAgICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAibm9leGVjIiwgNik7CisgICAgICAgICAgICBfUHlfd3JpdGVfbm9yYWlzZShlcnJwaXBlX3dyaXRlLCAibm9leGVjIiwgNik7CiAgICAgICAgIH0KICAgICAgICAgLyogV2UgY2FuJ3QgY2FsbCBzdHJlcnJvcihzYXZlZF9lcnJubykuICBJdCBpcyBub3QgYXN5bmMgc2lnbmFsIHNhZmUuCiAgICAgICAgICAqIFRoZSBwYXJlbnQgcHJvY2VzcyB3aWxsIGxvb2sgdGhlIGVycm9yIG1lc3NhZ2UgdXAuICovCiAgICAgfSBlbHNlIHsKLSAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIlN1YnByb2Nlc3NFcnJvcjowOiIsIDE4KTsKLSAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgZXJyX21zZywgc3RybGVuKGVycl9tc2cpKTsKKyAgICAgICAgX1B5X3dyaXRlX25vcmFpc2UoZXJycGlwZV93cml0ZSwgIlN1YnByb2Nlc3NFcnJvcjowOiIsIDE4KTsKKyAgICAgICAgX1B5X3dyaXRlX25vcmFpc2UoZXJycGlwZV93cml0ZSwgZXJyX21zZywgc3RybGVuKGVycl9tc2cpKTsKICAgICB9Ci0gICAgaWYgKHVudXNlZCkgcmV0dXJuOyAgLyogc2lsbHk/IHllcyEgYXZvaWRzIGdjYyBjb21waWxlciB3YXJuaW5nLiAqLwogfQogCiAKQEAgLTU1Niw3ICs1NTgsOSBAQAogICAgIGludCBuZWVkX3RvX3JlZW5hYmxlX2djID0gMDsKICAgICBjaGFyICpjb25zdCAqZXhlY19hcnJheSwgKmNvbnN0ICphcmd2ID0gTlVMTCwgKmNvbnN0ICplbnZwID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGFyZ19udW07CisjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpbnQgaW1wb3J0X2xvY2tfaGVsZCA9IDA7CisjZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZSgKICAgICAgICAgICAgIGFyZ3MsICJPT3BPT09paWlpaWlpaWlpTzpmb3JrX2V4ZWMiLApAQCAtNjUxLDggKzY1NSwxMCBAQAogICAgICAgICBwcmVleGVjX2ZuX2FyZ3NfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgaWYgKCFwcmVleGVjX2ZuX2FyZ3NfdHVwbGUpCiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgX1B5SW1wb3J0X0FjcXVpcmVMb2NrKCk7CiAgICAgICAgIGltcG9ydF9sb2NrX2hlbGQgPSAxOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKGN3ZF9vYmogIT0gUHlfTm9uZSkgewpAQCAtNjk1LDEzICs3MDEsMTUgQEAKICAgICAgICAgLyogQ2FwdHVyZSB0aGUgZXJybm8gZXhjZXB0aW9uIGJlZm9yZSBlcnJubyBjYW4gYmUgY2xvYmJlcmVkLiAqLwogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgfQotICAgIGlmIChwcmVleGVjX2ZuICE9IFB5X05vbmUgJiYKLSAgICAgICAgX1B5SW1wb3J0X1JlbGVhc2VMb2NrKCkgPCAwICYmICFQeUVycl9PY2N1cnJlZCgpKSB7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBpZiAocHJlZXhlY19mbiAhPSBQeV9Ob25lCisgICAgICAgICYmIF9QeUltcG9ydF9SZWxlYXNlTG9jaygpIDwgMCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBob2xkaW5nIHRoZSBpbXBvcnQgbG9jayIpOwogICAgICAgICBwaWQgPSAtMTsKICAgICB9CiAgICAgaW1wb3J0X2xvY2tfaGVsZCA9IDA7CisjZW5kaWYKIAogICAgIC8qIFBhcmVudCBwcm9jZXNzICovCiAgICAgaWYgKGVudnApCkBAIC03MjMsOCArNzMxLDEwIEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tUGlkKHBpZCk7CiAKIGNsZWFudXA6CisjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoaW1wb3J0X2xvY2tfaGVsZCkKICAgICAgICAgX1B5SW1wb3J0X1JlbGVhc2VMb2NrKCk7CisjZW5kaWYKICAgICBpZiAoZW52cCkKICAgICAgICAgX1B5X0ZyZWVDaGFyUEFycmF5KGVudnApOwogICAgIGlmIChhcmd2KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMgYi9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYwppbmRleCA0MTZlMjY2Li45NWFkNGE0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYworKysgYi9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYwpAQCAtNjksMTcgKzY5LDIxIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgIC8qIGZvciBzZWVkaW5nIHRvIGN1cnJlbnQgdGltZSAqLwogCisjaWZuZGVmIFBZX1VJTlQzMl9UCisjICBlcnJvciAiRmFpbGVkIHRvIGZpbmQgYW4gZXhhY3Qtd2lkdGggMzItYml0IGludGVnZXIgdHlwZSIKKyNlbmRpZgorCiAvKiBQZXJpb2QgcGFyYW1ldGVycyAtLSBUaGVzZSBhcmUgYWxsIG1hZ2ljLiAgRG9uJ3QgY2hhbmdlLiAqLwogI2RlZmluZSBOIDYyNAogI2RlZmluZSBNIDM5NwotI2RlZmluZSBNQVRSSVhfQSAweDk5MDhiMGRmVUwgICAvKiBjb25zdGFudCB2ZWN0b3IgYSAqLwotI2RlZmluZSBVUFBFUl9NQVNLIDB4ODAwMDAwMDBVTCAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovCi0jZGVmaW5lIExPV0VSX01BU0sgMHg3ZmZmZmZmZlVMIC8qIGxlYXN0IHNpZ25pZmljYW50IHIgYml0cyAqLworI2RlZmluZSBNQVRSSVhfQSAweDk5MDhiMGRmVSAgICAvKiBjb25zdGFudCB2ZWN0b3IgYSAqLworI2RlZmluZSBVUFBFUl9NQVNLIDB4ODAwMDAwMDBVICAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovCisjZGVmaW5lIExPV0VSX01BU0sgMHg3ZmZmZmZmZlUgIC8qIGxlYXN0IHNpZ25pZmljYW50IHIgYml0cyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIHVuc2lnbmVkIGxvbmcgc3RhdGVbTl07CiAgICAgaW50IGluZGV4OworICAgIFBZX1VJTlQzMl9UIHN0YXRlW05dOwogfSBSYW5kb21PYmplY3Q7CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgUmFuZG9tX1R5cGU7CkBAIC05MSwxMyArOTUsMTMgQEAKIAogCiAvKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4ZmZmZmZmZmZdLWludGVydmFsICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZworc3RhdGljIFBZX1VJTlQzMl9UCiBnZW5yYW5kX2ludDMyKFJhbmRvbU9iamVjdCAqc2VsZikKIHsKLSAgICB1bnNpZ25lZCBsb25nIHk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFnMDFbMl09ezB4MFVMLCBNQVRSSVhfQX07CisgICAgUFlfVUlOVDMyX1QgeTsKKyAgICBzdGF0aWMgUFlfVUlOVDMyX1QgbWFnMDFbMl09ezB4MFUsIE1BVFJJWF9BfTsKICAgICAvKiBtYWcwMVt4XSA9IHggKiBNQVRSSVhfQSAgZm9yIHg9MCwxICovCi0gICAgdW5zaWduZWQgbG9uZyAqbXQ7CisgICAgUFlfVUlOVDMyX1QgKm10OwogCiAgICAgbXQgPSBzZWxmLT5zdGF0ZTsKICAgICBpZiAoc2VsZi0+aW5kZXggPj0gTikgeyAvKiBnZW5lcmF0ZSBOIHdvcmRzIGF0IG9uZSB0aW1lICovCkBAIC0xMDUsMjIgKzEwOSwyMiBAQAogCiAgICAgICAgIGZvciAoa2s9MDtrazxOLU07a2srKykgewogICAgICAgICAgICAgeSA9IChtdFtra10mVVBQRVJfTUFTSyl8KG10W2trKzFdJkxPV0VSX01BU0spOwotICAgICAgICAgICAgbXRba2tdID0gbXRba2srTV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFVTF07CisgICAgICAgICAgICBtdFtra10gPSBtdFtraytNXSBeICh5ID4+IDEpIF4gbWFnMDFbeSAmIDB4MVVdOwogICAgICAgICB9CiAgICAgICAgIGZvciAoO2trPE4tMTtraysrKSB7CiAgICAgICAgICAgICB5ID0gKG10W2trXSZVUFBFUl9NQVNLKXwobXRba2srMV0mTE9XRVJfTUFTSyk7Ci0gICAgICAgICAgICBtdFtra10gPSBtdFtraysoTS1OKV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFVTF07CisgICAgICAgICAgICBtdFtra10gPSBtdFtraysoTS1OKV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFVXTsKICAgICAgICAgfQogICAgICAgICB5ID0gKG10W04tMV0mVVBQRVJfTUFTSyl8KG10WzBdJkxPV0VSX01BU0spOwotICAgICAgICBtdFtOLTFdID0gbXRbTS0xXSBeICh5ID4+IDEpIF4gbWFnMDFbeSAmIDB4MVVMXTsKKyAgICAgICAgbXRbTi0xXSA9IG10W00tMV0gXiAoeSA+PiAxKSBeIG1hZzAxW3kgJiAweDFVXTsKIAogICAgICAgICBzZWxmLT5pbmRleCA9IDA7CiAgICAgfQogCiAgICAgeSA9IG10W3NlbGYtPmluZGV4KytdOwogICAgIHkgXj0gKHkgPj4gMTEpOwotICAgIHkgXj0gKHkgPDwgNykgJiAweDlkMmM1NjgwVUw7Ci0gICAgeSBePSAoeSA8PCAxNSkgJiAweGVmYzYwMDAwVUw7CisgICAgeSBePSAoeSA8PCA3KSAmIDB4OWQyYzU2ODBVOworICAgIHkgXj0gKHkgPDwgMTUpICYgMHhlZmM2MDAwMFU7CiAgICAgeSBePSAoeSA+PiAxOCk7CiAgICAgcmV0dXJuIHk7CiB9CkBAIC0xMzcsMjggKzE0MSwyNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHJhbmRvbV9yYW5kb20oUmFuZG9tT2JqZWN0ICpzZWxmKQogewotICAgIHVuc2lnbmVkIGxvbmcgYT1nZW5yYW5kX2ludDMyKHNlbGYpPj41LCBiPWdlbnJhbmRfaW50MzIoc2VsZik+PjY7CisgICAgUFlfVUlOVDMyX1QgYT1nZW5yYW5kX2ludDMyKHNlbGYpPj41LCBiPWdlbnJhbmRfaW50MzIoc2VsZik+PjY7CiAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgoYSo2NzEwODg2NC4wK2IpKigxLjAvOTAwNzE5OTI1NDc0MDk5Mi4wKSk7CiB9CiAKIC8qIGluaXRpYWxpemVzIG10W05dIHdpdGggYSBzZWVkICovCiBzdGF0aWMgdm9pZAotaW5pdF9nZW5yYW5kKFJhbmRvbU9iamVjdCAqc2VsZiwgdW5zaWduZWQgbG9uZyBzKQoraW5pdF9nZW5yYW5kKFJhbmRvbU9iamVjdCAqc2VsZiwgUFlfVUlOVDMyX1QgcykKIHsKICAgICBpbnQgbXRpOwotICAgIHVuc2lnbmVkIGxvbmcgKm10OworICAgIFBZX1VJTlQzMl9UICptdDsKIAogICAgIG10ID0gc2VsZi0+c3RhdGU7Ci0gICAgbXRbMF09IHMgJiAweGZmZmZmZmZmVUw7CisgICAgbXRbMF09IHM7CiAgICAgZm9yIChtdGk9MTsgbXRpPE47IG10aSsrKSB7CiAgICAgICAgIG10W210aV0gPQotICAgICAgICAoMTgxMjQzMzI1M1VMICogKG10W210aS0xXSBeIChtdFttdGktMV0gPj4gMzApKSArIG10aSk7CisgICAgICAgICgxODEyNDMzMjUzVSAqIChtdFttdGktMV0gXiAobXRbbXRpLTFdID4+IDMwKSkgKyBtdGkpOwogICAgICAgICAvKiBTZWUgS251dGggVEFPQ1AgVm9sMi4gM3JkIEVkLiBQLjEwNiBmb3IgbXVsdGlwbGllci4gKi8KICAgICAgICAgLyogSW4gdGhlIHByZXZpb3VzIHZlcnNpb25zLCBNU0JzIG9mIHRoZSBzZWVkIGFmZmVjdCAgICovCiAgICAgICAgIC8qIG9ubHkgTVNCcyBvZiB0aGUgYXJyYXkgbXRbXS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgIC8qIDIwMDIvMDEvMDkgbW9kaWZpZWQgYnkgTWFrb3RvIE1hdHN1bW90byAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIG10W210aV0gJj0gMHhmZmZmZmZmZlVMOwotICAgICAgICAvKiBmb3IgPjMyIGJpdCBtYWNoaW5lcyAqLwogICAgIH0KICAgICBzZWxmLT5pbmRleCA9IG10aTsKICAgICByZXR1cm47CkBAIC0xNjgsMzIgKzE3MCwzMCBAQAogLyogaW5pdF9rZXkgaXMgdGhlIGFycmF5IGZvciBpbml0aWFsaXppbmcga2V5cyAqLwogLyoga2V5X2xlbmd0aCBpcyBpdHMgbGVuZ3RoICovCiBzdGF0aWMgUHlPYmplY3QgKgotaW5pdF9ieV9hcnJheShSYW5kb21PYmplY3QgKnNlbGYsIHVuc2lnbmVkIGxvbmcgaW5pdF9rZXlbXSwgc2l6ZV90IGtleV9sZW5ndGgpCitpbml0X2J5X2FycmF5KFJhbmRvbU9iamVjdCAqc2VsZiwgUFlfVUlOVDMyX1QgaW5pdF9rZXlbXSwgc2l6ZV90IGtleV9sZW5ndGgpCiB7CiAgICAgc2l6ZV90IGksIGosIGs7ICAgICAgIC8qIHdhcyBzaWduZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIFJESCAxMi8xNi8yMDAyICovCi0gICAgdW5zaWduZWQgbG9uZyAqbXQ7CisgICAgUFlfVUlOVDMyX1QgKm10OwogCiAgICAgbXQgPSBzZWxmLT5zdGF0ZTsKLSAgICBpbml0X2dlbnJhbmQoc2VsZiwgMTk2NTAyMThVTCk7CisgICAgaW5pdF9nZW5yYW5kKHNlbGYsIDE5NjUwMjE4VSk7CiAgICAgaT0xOyBqPTA7CiAgICAgayA9IChOPmtleV9sZW5ndGggPyBOIDoga2V5X2xlbmd0aCk7CiAgICAgZm9yICg7IGs7IGstLSkgewotICAgICAgICBtdFtpXSA9IChtdFtpXSBeICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkgKiAxNjY0NTI1VUwpKQotICAgICAgICAgICAgICAgICArIGluaXRfa2V5W2pdICsgKHVuc2lnbmVkIGxvbmcpajsgLyogbm9uIGxpbmVhciAqLwotICAgICAgICBtdFtpXSAmPSAweGZmZmZmZmZmVUw7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovCisgICAgICAgIG10W2ldID0gKG10W2ldIF4gKChtdFtpLTFdIF4gKG10W2ktMV0gPj4gMzApKSAqIDE2NjQ1MjVVKSkKKyAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArIChQWV9VSU5UMzJfVClqOyAvKiBub24gbGluZWFyICovCiAgICAgICAgIGkrKzsgaisrOwogICAgICAgICBpZiAoaT49TikgeyBtdFswXSA9IG10W04tMV07IGk9MTsgfQogICAgICAgICBpZiAoaj49a2V5X2xlbmd0aCkgaj0wOwogICAgIH0KICAgICBmb3IgKGs9Ti0xOyBrOyBrLS0pIHsKLSAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTU2NjA4Mzk0MVVMKSkKLSAgICAgICAgICAgICAgICAgLSAodW5zaWduZWQgbG9uZylpOyAvKiBub24gbGluZWFyICovCi0gICAgICAgIG10W2ldICY9IDB4ZmZmZmZmZmZVTDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi8KKyAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTU2NjA4Mzk0MVUpKQorICAgICAgICAgICAgICAgICAtIChQWV9VSU5UMzJfVClpOyAvKiBub24gbGluZWFyICovCiAgICAgICAgIGkrKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KICAgICB9CiAKLSAgICBtdFswXSA9IDB4ODAwMDAwMDBVTDsgLyogTVNCIGlzIDE7IGFzc3VyaW5nIG5vbi16ZXJvIGluaXRpYWwgYXJyYXkgKi8KKyAgICBtdFswXSA9IDB4ODAwMDAwMDBVOyAvKiBNU0IgaXMgMTsgYXNzdXJpbmcgbm9uLXplcm8gaW5pdGlhbCBhcnJheSAqLwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTIwOCw5ICsyMDgsOCBAQAogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOyAgICAgICAgICAgIC8qIGd1aWx0eSB1bnRpbCBwcm92ZWQgaW5ub2NlbnQgKi8KICAgICBQeU9iamVjdCAqbiA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyAqa2V5ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICprZXlfYXNfYnl0ZXMgPSBOVUxMOwotICAgIHNpemVfdCBiaXRzLCBrZXl1c2VkLCBpOworICAgIFBZX1VJTlQzMl9UICprZXkgPSBOVUxMOworICAgIHNpemVfdCBiaXRzLCBrZXl1c2VkOwogICAgIGludCByZXM7CiAgICAgUHlPYmplY3QgKmFyZyA9IE5VTEw7CiAKQEAgLTIyMSw3ICsyMjAsNyBAQAogICAgICAgICB0aW1lX3Qgbm93OwogCiAgICAgICAgIHRpbWUoJm5vdyk7Ci0gICAgICAgIGluaXRfZ2VucmFuZChzZWxmLCAodW5zaWduZWQgbG9uZylub3cpOworICAgICAgICBpbml0X2dlbnJhbmQoc2VsZiwgKFBZX1VJTlQzMl9UKW5vdyk7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQpAQCAtMjQ5LDM1ICsyNDgsMzEgQEAKICAgICBrZXl1c2VkID0gYml0cyA9PSAwID8gMSA6IChiaXRzIC0gMSkgLyAzMiArIDE7CiAKICAgICAvKiBDb252ZXJ0IHNlZWQgdG8gYnl0ZSBzZXF1ZW5jZS4gKi8KLSAgICBrZXlfYXNfYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYygoc2l6ZV90KTQgKiBrZXl1c2VkKTsKLSAgICBpZiAoa2V5X2FzX2J5dGVzID09IE5VTEwpIHsKKyAgICBrZXkgPSAoUFlfVUlOVDMyX1QgKilQeU1lbV9NYWxsb2MoKHNpemVfdCk0ICoga2V5dXNlZCk7CisgICAgaWYgKGtleSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gRG9uZTsKICAgICB9CiAgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9hc19ieXRlcywga2V5dXNlZCAqIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgLyogbGl0dGxlLWVuZGlhbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilrZXksIGtleXVzZWQgKiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOyAvKiB1bnNpZ25lZCAqLwogICAgIGlmIChyZXMgPT0gLTEpIHsKLSAgICAgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOworICAgICAgICBQeU1lbV9GcmVlKGtleSk7CiAgICAgICAgIGdvdG8gRG9uZTsKICAgICB9CiAKLSAgICAvKiBGaWxsIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGZyb20gYnl0ZSBzZXF1ZW5jZS4gKi8KLSAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBrZXl1c2VkKTsKLSAgICBpZiAoa2V5ID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOwotICAgICAgICBnb3RvIERvbmU7CisjaWYgUFlfQklHX0VORElBTgorICAgIHsKKyAgICAgICAgc2l6ZV90IGksIGo7CisgICAgICAgIC8qIFJldmVyc2UgYW4gYXJyYXkuICovCisgICAgICAgIGZvciAoaSA9IDAsIGogPSBrZXl1c2VkIC0gMTsgaSA8IGo7IGkrKywgai0tKSB7CisgICAgICAgICAgICBQWV9VSU5UMzJfVCB0bXAgPSBrZXlbaV07CisgICAgICAgICAgICBrZXlbaV0gPSBrZXlbal07CisgICAgICAgICAgICBrZXlbal0gPSB0bXA7CisgICAgICAgIH0KICAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGtleXVzZWQ7IGkrKykgewotICAgICAgICBrZXlbaV0gPQotICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAwXSA8PCAwKSArCi0gICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDFdIDw8IDgpICsKLSAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMl0gPDwgMTYpICsKLSAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgM10gPDwgMjQpOwotICAgIH0KLSAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CisjZW5kaWYKICAgICByZXN1bHQgPSBpbml0X2J5X2FycmF5KHNlbGYsIGtleSwga2V5dXNlZCk7CiBEb25lOgogICAgIFB5X1hERUNSRUYobik7CkBAIC0zMzQsNyArMzI5LDcgQEAKICAgICAgICAgZWxlbWVudCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhQeVR1cGxlX0dFVF9JVEVNKHN0YXRlLCBpKSk7CiAgICAgICAgIGlmIChlbGVtZW50ID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgc2VsZi0+c3RhdGVbaV0gPSBlbGVtZW50ICYgMHhmZmZmZmZmZlVMOyAvKiBNYWtlIHN1cmUgd2UgZ2V0IHNhbmUgc3RhdGUgKi8KKyAgICAgICAgc2VsZi0+c3RhdGVbaV0gPSAoUFlfVUlOVDMyX1QpZWxlbWVudDsKICAgICB9CiAKICAgICBpbmRleCA9IFB5TG9uZ19Bc0xvbmcoUHlUdXBsZV9HRVRfSVRFTShzdGF0ZSwgaSkpOwpAQCAtMzUzLDkgKzM0OCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcmFuZG9tX2dldHJhbmRiaXRzKFJhbmRvbU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGssIGksIGJ5dGVzOwotICAgIHVuc2lnbmVkIGxvbmcgcjsKLSAgICB1bnNpZ25lZCBjaGFyICpieXRlYXJyYXk7CisgICAgaW50IGssIGksIHdvcmRzOworICAgIFBZX1VJTlQzMl9UIHI7CisgICAgUFlfVUlOVDMyX1QgKndvcmRhcnJheTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmdldHJhbmRiaXRzIiwgJmspKQpAQCAtMzcwLDI3ICszNjUsMzAgQEAKICAgICBpZiAoayA8PSAzMikgIC8qIEZhc3QgcGF0aCAqLwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoZ2VucmFuZF9pbnQzMihzZWxmKSA+PiAoMzIgLSBrKSk7CiAKLSAgICBieXRlcyA9ICgoayAtIDEpIC8gMzIgKyAxKSAqIDQ7Ci0gICAgYnl0ZWFycmF5ID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoYnl0ZXMpOwotICAgIGlmIChieXRlYXJyYXkgPT0gTlVMTCkgeworICAgIHdvcmRzID0gKGsgLSAxKSAvIDMyICsgMTsKKyAgICB3b3JkYXJyYXkgPSAoUFlfVUlOVDMyX1QgKilQeU1lbV9NYWxsb2Mod29yZHMgKiA0KTsKKyAgICBpZiAod29yZGFycmF5ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgLyogRmlsbC1vdXQgd2hvbGUgd29yZHMsIGJ5dGUtYnktYnl0ZSB0byBhdm9pZCBlbmRpYW5uZXNzIGlzc3VlcyAqLwotICAgIGZvciAoaT0wIDsgaTxieXRlcyA7IGkrPTQsIGstPTMyKSB7CisgICAgLyogRmlsbC1vdXQgYml0cyBvZiBsb25nIGludGVnZXIsIGJ5IDMyLWJpdCB3b3JkcywgZnJvbSBsZWFzdCBzaWduaWZpY2FudAorICAgICAgIHRvIG1vc3Qgc2lnbmlmaWNhbnQuICovCisjaWYgUFlfTElUVExFX0VORElBTgorICAgIGZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrLCBrIC09IDMyKQorI2Vsc2UKKyAgICBmb3IgKGkgPSB3b3JkcyAtIDE7IGkgPj0gMDsgaS0tLCBrIC09IDMyKQorI2VuZGlmCisgICAgewogICAgICAgICByID0gZ2VucmFuZF9pbnQzMihzZWxmKTsKICAgICAgICAgaWYgKGsgPCAzMikKLSAgICAgICAgICAgIHIgPj49ICgzMiAtIGspOwotICAgICAgICBieXRlYXJyYXlbaSswXSA9ICh1bnNpZ25lZCBjaGFyKXI7Ci0gICAgICAgIGJ5dGVhcnJheVtpKzFdID0gKHVuc2lnbmVkIGNoYXIpKHIgPj4gOCk7Ci0gICAgICAgIGJ5dGVhcnJheVtpKzJdID0gKHVuc2lnbmVkIGNoYXIpKHIgPj4gMTYpOwotICAgICAgICBieXRlYXJyYXlbaSszXSA9ICh1bnNpZ25lZCBjaGFyKShyID4+IDI0KTsKKyAgICAgICAgICAgIHIgPj49ICgzMiAtIGspOyAgLyogRHJvcCBsZWFzdCBzaWduaWZpY2FudCBiaXRzICovCisgICAgICAgIHdvcmRhcnJheVtpXSA9IHI7CiAgICAgfQogCi0gICAgLyogbGl0dGxlIGVuZGlhbiBvcmRlciB0byBtYXRjaCBieXRlYXJyYXkgYXNzaWdubWVudCBvcmRlciAqLwotICAgIHJlc3VsdCA9IF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlYXJyYXksIGJ5dGVzLCAxLCAwKTsKLSAgICBQeU1lbV9GcmVlKGJ5dGVhcnJheSk7CisgICAgcmVzdWx0ID0gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KCh1bnNpZ25lZCBjaGFyICopd29yZGFycmF5LCB3b3JkcyAqIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX0xJVFRMRV9FTkRJQU4sIDAgLyogdW5zaWduZWQgKi8pOworICAgIFB5TWVtX0ZyZWUod29yZGFycmF5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zY3Byb3h5LmMgYi9Nb2R1bGVzL19zY3Byb3h5LmMKaW5kZXggM2IyYTM4ZS4uNjZiNmUzNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc2Nwcm94eS5jCisrKyBiL01vZHVsZXMvX3NjcHJveHkuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi1QeU9iamVjdCoKK1B5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3NjcHJveHkodm9pZCkKIHsKICAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZtb2RfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMgYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCmluZGV4IGQzOTAzMjguLjZhYTQ3NjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwpAQCAtMTY0LDYgKzE2NCwxMCBAQAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgc2VsZi0+dGhyZWFkX2lkZW50ID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwogI2VuZGlmCisgICAgaWYgKCFjaGVja19zYW1lX3RocmVhZCAmJiBzcWxpdGUzX2xpYnZlcnNpb25fbnVtYmVyKCkgPCAzMDAzMDAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Ob3RTdXBwb3J0ZWRFcnJvciwgInNoYXJlZCBjb25uZWN0aW9ucyBub3QgYXZhaWxhYmxlIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgc2VsZi0+Y2hlY2tfc2FtZV90aHJlYWQgPSBjaGVja19zYW1lX3RocmVhZDsKIAogICAgIHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkID0gUHlEaWN0X05ldygpOwpAQCAtMjA0LDggKzIwOCw4IEBACiAgICAgICAgIG5vZGUgPSBub2RlLT5uZXh0OwogICAgIH0KIAotICAgIFB5X0RFQ1JFRihzZWxmLT5zdGF0ZW1lbnRfY2FjaGUpOwotICAgIHNlbGYtPnN0YXRlbWVudF9jYWNoZSA9IChweXNxbGl0ZV9DYWNoZSopUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCopJnB5c3FsaXRlX0NhY2hlVHlwZSwgIk8iLCBzZWxmKTsKKyAgICBQeV9TRVRSRUYoc2VsZi0+c3RhdGVtZW50X2NhY2hlLAorICAgICAgICAgICAgICAocHlzcWxpdGVfQ2FjaGUgKilQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopJnB5c3FsaXRlX0NhY2hlVHlwZSwgIk8iLCBzZWxmKSk7CiAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgIHNlbGYtPnN0YXRlbWVudF9jYWNoZS0+ZGVjcmVmX2ZhY3RvcnkgPSAwOwogfQpAQCAtMzE4LDkgKzMyMiw4IEBACiAgICAgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX2N1cnNvcl9yZWZlcmVuY2VzKHNlbGYpOwogCiAgICAgaWYgKGN1cnNvciAmJiBzZWxmLT5yb3dfZmFjdG9yeSAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIFB5X1hERUNSRUYoKChweXNxbGl0ZV9DdXJzb3IqKWN1cnNvciktPnJvd19mYWN0b3J5KTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnJvd19mYWN0b3J5KTsKLSAgICAgICAgKChweXNxbGl0ZV9DdXJzb3IqKWN1cnNvciktPnJvd19mYWN0b3J5ID0gc2VsZi0+cm93X2ZhY3Rvcnk7CisgICAgICAgIFB5X1hTRVRSRUYoKChweXNxbGl0ZV9DdXJzb3IgKiljdXJzb3IpLT5yb3dfZmFjdG9yeSwgc2VsZi0+cm93X2ZhY3RvcnkpOwogICAgIH0KIAogICAgIHJldHVybiBjdXJzb3I7CkBAIC03OTUsOCArNzk4LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIFB5X0RFQ1JFRihzZWxmLT5zdGF0ZW1lbnRzKTsKLSAgICBzZWxmLT5zdGF0ZW1lbnRzID0gbmV3X2xpc3Q7CisgICAgUHlfU0VUUkVGKHNlbGYtPnN0YXRlbWVudHMsIG5ld19saXN0KTsKIH0KIAogc3RhdGljIHZvaWQgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX2N1cnNvcl9yZWZlcmVuY2VzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpCkBAIC04MjcsOCArODI5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIFB5X0RFQ1JFRihzZWxmLT5jdXJzb3JzKTsKLSAgICBzZWxmLT5jdXJzb3JzID0gbmV3X2xpc3Q7CisgICAgUHlfU0VUUkVGKHNlbGYtPmN1cnNvcnMsIG5ld19saXN0KTsKIH0KIAogUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fY3JlYXRlX2Z1bmN0aW9uKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQpAQCAtMTI0MSw2ICsxMjQyLDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3JkcyhNT0RVTEVfTkFNRSAiLkNvbm5lY3Rpb24oKSIsIGt3YXJncykpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnNxbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5oIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uaAppbmRleCAwYzk3MzRjLi5mYmQ5MDYzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmgKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgKiBmaXJzdCBnZXQgY2FsbGVkIHdpdGggY291bnQ9MD8gKi8KICAgICBkb3VibGUgdGltZW91dF9zdGFydGVkOwogCi0gICAgLyogTm9uZSBmb3IgYXV0b2NvbW1pdCwgb3RoZXJ3aXNlIGEgUHlTdHJpbmcgd2l0aCB0aGUgaXNvbGF0aW9uIGxldmVsICovCisgICAgLyogTm9uZSBmb3IgYXV0b2NvbW1pdCwgb3RoZXJ3aXNlIGEgUHlVbmljb2RlIHdpdGggdGhlIGlzb2xhdGlvbiBsZXZlbCAqLwogICAgIFB5T2JqZWN0KiBpc29sYXRpb25fbGV2ZWw7CiAKICAgICAvKiBOVUxMIGZvciBhdXRvY29tbWl0LCBvdGhlcndpc2UgYSBzdHJpbmcgd2l0aCB0aGUgQkVHSU4gc3RhdGVtZW50OyB3aWxsIGJlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKaW5kZXggZGI5NmIwMi4uMzAwZGEyOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwpAQCAtNDYsNyArNDYsNyBAQAogCiAgICAgZHN0ID0gYnVmOwogICAgICpkc3QgPSAwOwotICAgIHdoaWxlIChQeV9JU0FMUEhBKCpzcmMpICYmIGRzdCAtIGJ1ZiA8IHNpemVvZihidWYpIC0gMikgeworICAgIHdoaWxlIChQeV9JU0FMUEhBKCpzcmMpICYmIChkc3QgLSBidWYpIDwgKChQeV9zc2l6ZV90KXNpemVvZihidWYpIC0gMikpIHsKICAgICAgICAgKmRzdCsrID0gUHlfVE9MT1dFUigqc3JjKyspOwogICAgIH0KIApAQCAtMTcwLDggKzE3MCw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFB5X1hERUNSRUYoc2VsZi0+cm93X2Nhc3RfbWFwKTsKLSAgICBzZWxmLT5yb3dfY2FzdF9tYXAgPSBQeUxpc3RfTmV3KDApOworICAgIFB5X1hTRVRSRUYoc2VsZi0+cm93X2Nhc3RfbWFwLCBQeUxpc3RfTmV3KDApKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzcWxpdGUzX2NvbHVtbl9jb3VudChzZWxmLT5zdGF0ZW1lbnQtPnN0KTsgaSsrKSB7CiAgICAgICAgIGNvbnZlcnRlciA9IE5VTEw7CkBAIC0zMzQsMTEgKzMzMyw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSA9PSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUodmFsX3N0ciwgbmJ5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKLSNpZmRlZiBQeV9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgdHlwZV9jYWxsKCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWUgPSBzcWxpdGUzX2NvbHVtbl9uYW1lKHNlbGYtPnN0YXRlbWVudC0+c3QsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZSA9ICI8dW5rbm93biBjb2x1bW4gbmFtZT4iOwpAQCAtNTE0LDkgKzUwOSw4IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAvKiByZXNldCBkZXNjcmlwdGlvbiBhbmQgcm93Y291bnQgKi8KLSAgICBQeV9ERUNSRUYoc2VsZi0+ZGVzY3JpcHRpb24pOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICBzZWxmLT5kZXNjcmlwdGlvbiA9IFB5X05vbmU7CisgICAgUHlfU0VUUkVGKHNlbGYtPmRlc2NyaXB0aW9uLCBQeV9Ob25lKTsKICAgICBzZWxmLT5yb3djb3VudCA9IC0xTDsKIAogICAgIGZ1bmNfYXJncyA9IFB5VHVwbGVfTmV3KDEpOwpAQCAtNTMwLDEwICs1MjQsMTAgQEAKIAogICAgIGlmIChzZWxmLT5zdGF0ZW1lbnQpIHsKICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmLT5zdGF0ZW1lbnQpOwogICAgIH0KIAotICAgIHNlbGYtPnN0YXRlbWVudCA9IChweXNxbGl0ZV9TdGF0ZW1lbnQqKXB5c3FsaXRlX2NhY2hlX2dldChzZWxmLT5jb25uZWN0aW9uLT5zdGF0ZW1lbnRfY2FjaGUsIGZ1bmNfYXJncyk7CisgICAgUHlfWFNFVFJFRihzZWxmLT5zdGF0ZW1lbnQsCisgICAgICAgICAgICAgIChweXNxbGl0ZV9TdGF0ZW1lbnQgKilweXNxbGl0ZV9jYWNoZV9nZXQoc2VsZi0+Y29ubmVjdGlvbi0+c3RhdGVtZW50X2NhY2hlLCBmdW5jX2FyZ3MpKTsKICAgICBQeV9ERUNSRUYoZnVuY19hcmdzKTsKIAogICAgIGlmICghc2VsZi0+c3RhdGVtZW50KSB7CkBAIC01NDEsOCArNTM1LDggQEAKICAgICB9CiAKICAgICBpZiAoc2VsZi0+c3RhdGVtZW50LT5pbl91c2UpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYtPnN0YXRlbWVudCk7Ci0gICAgICAgIHNlbGYtPnN0YXRlbWVudCA9IFB5T2JqZWN0X05ldyhweXNxbGl0ZV9TdGF0ZW1lbnQsICZweXNxbGl0ZV9TdGF0ZW1lbnRUeXBlKTsKKyAgICAgICAgUHlfU0VUUkVGKHNlbGYtPnN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X05ldyhweXNxbGl0ZV9TdGF0ZW1lbnQsICZweXNxbGl0ZV9TdGF0ZW1lbnRUeXBlKSk7CiAgICAgICAgIGlmICghc2VsZi0+c3RhdGVtZW50KSB7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CkBAIC02NTgsOCArNjUyLDcgQEAKICAgICAgICAgICAgICAgICBudW1jb2xzID0gc3FsaXRlM19jb2x1bW5fY291bnQoc2VsZi0+c3RhdGVtZW50LT5zdCk7CiAgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmLT5kZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgc2VsZi0+ZGVzY3JpcHRpb24gPSBQeVR1cGxlX05ldyhudW1jb2xzKTsKKyAgICAgICAgICAgICAgICBQeV9TRVRSRUYoc2VsZi0+ZGVzY3JpcHRpb24sIFB5VHVwbGVfTmV3KG51bWNvbHMpKTsKICAgICAgICAgICAgICAgICBpZiAoIXNlbGYtPmRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL21pY3JvcHJvdG9jb2xzLmggYi9Nb2R1bGVzL19zcWxpdGUvbWljcm9wcm90b2NvbHMuaAppbmRleCAzYTk5NDRmLi42OTQxNzE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvbWljcm9wcm90b2NvbHMuaAorKysgYi9Nb2R1bGVzL19zcWxpdGUvbWljcm9wcm90b2NvbHMuaApAQCAtNDgsNyArNDgsNyBAQAogICAgIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90bywgUHlPYmplY3QgKmFsdCk7CiAKIGV4dGVybiBQeU9iamVjdCAqCi0gICAgcHlzcWxpdGVfYWRhcHQocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBQeU9iamVjdCAqYXJncyk7ICAgCisgICAgcHlzcWxpdGVfYWRhcHQocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBQeU9iamVjdCAqYXJncyk7CiAjZGVmaW5lIHB5c3FsaXRlX2FkYXB0X2RvYyBcCiAgICAgImFkYXB0KG9iaiwgcHJvdG9jb2wsIGFsdGVybmF0ZSkgLT4gYWRhcHQgb2JqIHRvIGdpdmVuIHByb3RvY29sLiBOb24tc3RhbmRhcmQuIgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmggYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmgKaW5kZXggYjUxNzI0Yi4uMGZiNWE1NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5oCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuaApAQCAtNDIsNyArNDIsNyBAQAogZXh0ZXJuIFB5T2JqZWN0KiB0aW1lX3RpbWU7CiBleHRlcm4gUHlPYmplY3QqIHRpbWVfc2xlZXA7CiAKLS8qIEEgZGljdGlvbmFyeSwgbWFwcGluZyBjb2x1bSB0eXBlcyAoSU5URUdFUiwgVkFSQ0hBUiwgZXRjLikgdG8gY29udmVydGVyCisvKiBBIGRpY3Rpb25hcnksIG1hcHBpbmcgY29sdW1uIHR5cGVzIChJTlRFR0VSLCBWQVJDSEFSLCBldGMuKSB0byBjb252ZXJ0ZXIKICAqIGZ1bmN0aW9ucywgdGhhdCBjb252ZXJ0IHRoZSBTUUwgdmFsdWUgdG8gdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiB2YWx1ZS4KICAqIFRoZSBrZXkgaXMgdXBwZXJjYXNlLgogICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcm93LmMgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKaW5kZXggZWU3MzQ0Ni4uMDc1ODRlMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuYwpAQCAtMTQyLDggKzE0Miw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGlkeCkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzbGljZXMgbm90IGltcGxlbWVudGVkLCB5ZXQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeU9iamVjdF9HZXRJdGVtKHNlbGYtPmRhdGEsIGlkeCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgIkluZGV4IG11c3QgYmUgaW50IG9yIHN0cmluZyIpOwpAQCAtMTU5LDcgKzE1OCw3IEBACiBQeU9iamVjdCogcHlzcWxpdGVfcm93X2tleXMocHlzcWxpdGVfUm93KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKICAgICBQeU9iamVjdCogbGlzdDsKLSAgICBpbnQgbml0ZW1zLCBpOworICAgIFB5X3NzaXplX3Qgbml0ZW1zLCBpOwogCiAgICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKCFsaXN0KSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcmUuYyBiL01vZHVsZXMvX3NyZS5jCmluZGV4IGQ2ZmNkYTEuLjg0Yzg3NjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NyZS5jCisrKyBiL01vZHVsZXMvX3NyZS5jCkBAIC05Nyw0OCArOTcsMjUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBzZWFyY2ggZW5naW5lIHN0YXRlICovCiAKLS8qIGRlZmF1bHQgY2hhcmFjdGVyIHByZWRpY2F0ZXMgKHJ1biBzcmVfY2hhcnMucHkgdG8gcmVnZW5lcmF0ZSB0YWJsZXMpICovCi0KLSNkZWZpbmUgU1JFX0RJR0lUX01BU0sgMQotI2RlZmluZSBTUkVfU1BBQ0VfTUFTSyAyCi0jZGVmaW5lIFNSRV9MSU5FQlJFQUtfTUFTSyA0Ci0jZGVmaW5lIFNSRV9BTE5VTV9NQVNLIDgKLSNkZWZpbmUgU1JFX1dPUkRfTUFTSyAxNgotCi0vKiBGSVhNRTogdGhpcyBhc3N1bWVzIEFTQ0lJLiAgY3JlYXRlIHRhYmxlcyBpbiBpbml0X3NyZSgpIGluc3RlYWQgKi8KLQotc3RhdGljIGNoYXIgc3JlX2NoYXJfaW5mb1sxMjhdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCA2LCAyLAotMiwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMCwgMCwKLTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwKLTI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsCi0yNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMCwgMCwKLTAsIDAsIDE2LCAwLCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsCi0yNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAwLCAwLCAwLCAwLCAwIH07Ci0KLXN0YXRpYyBjaGFyIHNyZV9jaGFyX2xvd2VyWzEyOF0gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksCi0xMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsCi0yNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsCi00NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsCi02MSwgNjIsIDYzLCA2NCwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsCi0xMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwKLTEyMiwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwKLTEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LAotMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcgfTsKLQogI2RlZmluZSBTUkVfSVNfRElHSVQoY2gpXAotICAgICgoY2gpIDwgMTI4ID8gKHNyZV9jaGFyX2luZm9bKGNoKV0gJiBTUkVfRElHSVRfTUFTSykgOiAwKQorICAgICgoY2gpIDwgMTI4ICYmIFB5X0lTRElHSVQoY2gpKQogI2RlZmluZSBTUkVfSVNfU1BBQ0UoY2gpXAotICAgICgoY2gpIDwgMTI4ID8gKHNyZV9jaGFyX2luZm9bKGNoKV0gJiBTUkVfU1BBQ0VfTUFTSykgOiAwKQorICAgICgoY2gpIDwgMTI4ICYmIFB5X0lTU1BBQ0UoY2gpKQogI2RlZmluZSBTUkVfSVNfTElORUJSRUFLKGNoKVwKLSAgICAoKGNoKSA8IDEyOCA/IChzcmVfY2hhcl9pbmZvWyhjaCldICYgU1JFX0xJTkVCUkVBS19NQVNLKSA6IDApCisgICAgKChjaCkgPT0gJ1xuJykKICNkZWZpbmUgU1JFX0lTX0FMTlVNKGNoKVwKLSAgICAoKGNoKSA8IDEyOCA/IChzcmVfY2hhcl9pbmZvWyhjaCldICYgU1JFX0FMTlVNX01BU0spIDogMCkKKyAgICAoKGNoKSA8IDEyOCAmJiBQeV9JU0FMTlVNKGNoKSkKICNkZWZpbmUgU1JFX0lTX1dPUkQoY2gpXAotICAgICgoY2gpIDwgMTI4ID8gKHNyZV9jaGFyX2luZm9bKGNoKV0gJiBTUkVfV09SRF9NQVNLKSA6IDApCisgICAgKChjaCkgPCAxMjggJiYgKFB5X0lTQUxOVU0oY2gpIHx8IChjaCkgPT0gJ18nKSkKIAogc3RhdGljIHVuc2lnbmVkIGludCBzcmVfbG93ZXIodW5zaWduZWQgaW50IGNoKQogewotICAgIHJldHVybiAoKGNoKSA8IDEyOCA/ICh1bnNpZ25lZCBpbnQpc3JlX2NoYXJfbG93ZXJbY2hdIDogY2gpOworICAgIHJldHVybiAoKGNoKSA8IDEyOCA/IFB5X1RPTE9XRVIoY2gpIDogY2gpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNyZV91cHBlcih1bnNpZ25lZCBpbnQgY2gpCit7CisgICAgcmV0dXJuICgoY2gpIDwgMTI4ID8gUHlfVE9VUFBFUihjaCkgOiBjaCk7CiB9CiAKIC8qIGxvY2FsZS1zcGVjaWZpYyBjaGFyYWN0ZXIgcHJlZGljYXRlcyAqLwpAQCAtMTUyLDYgKzEyOSwxMSBAQAogICAgIHJldHVybiAoKGNoKSA8IDI1NiA/ICh1bnNpZ25lZCBpbnQpdG9sb3dlcigoY2gpKSA6IGNoKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBzcmVfdXBwZXJfbG9jYWxlKHVuc2lnbmVkIGludCBjaCkKK3sKKyAgICByZXR1cm4gKChjaCkgPCAyNTYgPyAodW5zaWduZWQgaW50KXRvdXBwZXIoKGNoKSkgOiBjaCk7Cit9CisKIC8qIHVuaWNvZGUtc3BlY2lmaWMgY2hhcmFjdGVyIHByZWRpY2F0ZXMgKi8KIAogI2RlZmluZSBTUkVfVU5JX0lTX0RJR0lUKGNoKSBQeV9VTklDT0RFX0lTREVDSU1BTChjaCkKQEAgLTE2NSw2ICsxNDcsMTEgQEAKICAgICByZXR1cm4gKHVuc2lnbmVkIGludCkgUHlfVU5JQ09ERV9UT0xPV0VSKGNoKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBzcmVfdXBwZXJfdW5pY29kZSh1bnNpZ25lZCBpbnQgY2gpCit7CisgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpIFB5X1VOSUNPREVfVE9VUFBFUihjaCk7Cit9CisKIExPQ0FMKGludCkKIHNyZV9jYXRlZ29yeShTUkVfQ09ERSBjYXRlZ29yeSwgdW5zaWduZWQgaW50IGNoKQogewpAQCAtMjcxLDI1ICsyNTgsNTAgQEAKIAogLyogc2VlIHNyZS5oIGZvciBvYmplY3QgZGVjbGFyYXRpb25zICovCiBzdGF0aWMgUHlPYmplY3QqcGF0dGVybl9uZXdfbWF0Y2goUGF0dGVybk9iamVjdCosIFNSRV9TVEFURSosIFB5X3NzaXplX3QpOwotc3RhdGljIFB5T2JqZWN0KnBhdHRlcm5fc2Nhbm5lcihQYXR0ZXJuT2JqZWN0KiwgUHlPYmplY3QqLCBQeU9iamVjdCoga3cpOworc3RhdGljIFB5T2JqZWN0ICpwYXR0ZXJuX3NjYW5uZXIoUGF0dGVybk9iamVjdCAqLCBQeU9iamVjdCAqLCBQeV9zc2l6ZV90LCBQeV9zc2l6ZV90KTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLXNyZV9jb2Rlc2l6ZShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKKworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9zcmUKK2NsYXNzIF9zcmUuU1JFX1BhdHRlcm4gIlBhdHRlcm5PYmplY3QgKiIgIiZQYXR0ZXJuX1R5cGUiCitjbGFzcyBfc3JlLlNSRV9NYXRjaCAiTWF0Y2hPYmplY3QgKiIgIiZNYXRjaF9UeXBlIgorY2xhc3MgX3NyZS5TUkVfU2Nhbm5lciAiU2Nhbm5lck9iamVjdCAqIiAiJlNjYW5uZXJfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWIwMjMwZWMxOWEwZGVhYzhdKi8KKworc3RhdGljIFB5VHlwZU9iamVjdCBQYXR0ZXJuX1R5cGU7CitzdGF0aWMgUHlUeXBlT2JqZWN0IE1hdGNoX1R5cGU7CitzdGF0aWMgUHlUeXBlT2JqZWN0IFNjYW5uZXJfVHlwZTsKKworLypbY2xpbmljIGlucHV0XQorX3NyZS5nZXRjb2Rlc2l6ZSAtPiBpbnQKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorX3NyZV9nZXRjb2Rlc2l6ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTBkYjdjZTM0YTZkZDdiMSBpbnB1dD1iZDZmNmVjZjQ5MTZiYjJiXSovCiB7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU2l6ZV90KHNpemVvZihTUkVfQ09ERSkpOworICAgIHJldHVybiBzaXplb2YoU1JFX0NPREUpOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotc3JlX2dldGxvd2VyKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK19zcmUuZ2V0bG93ZXIgLT4gaW50CisKKyAgICBjaGFyYWN0ZXI6IGludAorICAgIGZsYWdzOiBpbnQKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorX3NyZV9nZXRsb3dlcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBjaGFyYWN0ZXIsIGludCBmbGFncykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00N2VlYmM0YzEyMTRmZWI1IGlucHV0PTA4N2QyZjFjNDRiYmNhNmZdKi8KIHsKLSAgICBpbnQgY2hhcmFjdGVyLCBmbGFnczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpIiwgJmNoYXJhY3RlciwgJmZsYWdzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGZsYWdzICYgU1JFX0ZMQUdfTE9DQUxFKQotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIHNyZV9sb3dlcl9sb2NhbGUoY2hhcmFjdGVyKSk7CisgICAgICAgIHJldHVybiBzcmVfbG93ZXJfbG9jYWxlKGNoYXJhY3Rlcik7CiAgICAgaWYgKGZsYWdzICYgU1JFX0ZMQUdfVU5JQ09ERSkKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBzcmVfbG93ZXJfdW5pY29kZShjaGFyYWN0ZXIpKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIHNyZV9sb3dlcihjaGFyYWN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIHNyZV9sb3dlcl91bmljb2RlKGNoYXJhY3Rlcik7CisgICAgcmV0dXJuIHNyZV9sb3dlcihjaGFyYWN0ZXIpOwogfQogCiBMT0NBTCh2b2lkKQpAQCAtMzI4LDcgKzM0MCw3IEBACiAKICAgICAvKiBnZXQgcG9pbnRlciB0byBieXRlIHN0cmluZyBidWZmZXIgKi8KICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN0cmluZywgdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzdHJpbmcgb3IgYnVmZmVyIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzdHJpbmcgb3IgYnl0ZXMtbGlrZSBvYmplY3QiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0zNTcsNiArMzY5LDExIEBACiAKICAgICBtZW1zZXQoc3RhdGUsIDAsIHNpemVvZihTUkVfU1RBVEUpKTsKIAorICAgIHN0YXRlLT5tYXJrID0gUHlNZW1fTmV3KHZvaWQgKiwgcGF0dGVybi0+Z3JvdXBzICogMik7CisgICAgaWYgKCFzdGF0ZS0+bWFyaykgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CiAgICAgc3RhdGUtPmxhc3RtYXJrID0gLTE7CiAgICAgc3RhdGUtPmxhc3RpbmRleCA9IC0xOwogCkBAIC0zNjcsMTIgKzM4NCwxMiBAQAogCiAgICAgaWYgKGlzYnl0ZXMgJiYgcGF0dGVybi0+aXNieXRlcyA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIGEgc3RyaW5nIHBhdHRlcm4gb24gYSBieXRlcy1saWtlIG9iamVjdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCB1c2UgYSBzdHJpbmcgcGF0dGVybiBvbiBhIGJ5dGVzLWxpa2Ugb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyOwogICAgIH0KICAgICBpZiAoIWlzYnl0ZXMgJiYgcGF0dGVybi0+aXNieXRlcyA+IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCB1c2UgYSBieXRlcyBwYXR0ZXJuIG9uIGEgc3RyaW5nLWxpa2Ugb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHVzZSBhIGJ5dGVzIHBhdHRlcm4gb24gYSBzdHJpbmctbGlrZSBvYmplY3QiKTsKICAgICAgICAgZ290byBlcnI7CiAgICAgfQogCkBAIC00MDAsMTUgKzQxNywyMyBAQAogICAgIHN0YXRlLT5wb3MgPSBzdGFydDsKICAgICBzdGF0ZS0+ZW5kcG9zID0gZW5kOwogCi0gICAgaWYgKHBhdHRlcm4tPmZsYWdzICYgU1JFX0ZMQUdfTE9DQUxFKQorICAgIGlmIChwYXR0ZXJuLT5mbGFncyAmIFNSRV9GTEFHX0xPQ0FMRSkgewogICAgICAgICBzdGF0ZS0+bG93ZXIgPSBzcmVfbG93ZXJfbG9jYWxlOwotICAgIGVsc2UgaWYgKHBhdHRlcm4tPmZsYWdzICYgU1JFX0ZMQUdfVU5JQ09ERSkKKyAgICAgICAgc3RhdGUtPnVwcGVyID0gc3JlX3VwcGVyX2xvY2FsZTsKKyAgICB9CisgICAgZWxzZSBpZiAocGF0dGVybi0+ZmxhZ3MgJiBTUkVfRkxBR19VTklDT0RFKSB7CiAgICAgICAgIHN0YXRlLT5sb3dlciA9IHNyZV9sb3dlcl91bmljb2RlOwotICAgIGVsc2UKKyAgICAgICAgc3RhdGUtPnVwcGVyID0gc3JlX3VwcGVyX3VuaWNvZGU7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBzdGF0ZS0+bG93ZXIgPSBzcmVfbG93ZXI7CisgICAgICAgIHN0YXRlLT51cHBlciA9IHNyZV91cHBlcjsKKyAgICB9CiAKICAgICByZXR1cm4gc3RyaW5nOwogICBlcnI6CisgICAgUHlNZW1fRGVsKHN0YXRlLT5tYXJrKTsKKyAgICBzdGF0ZS0+bWFyayA9IE5VTEw7CiAgICAgaWYgKHN0YXRlLT5idWZmZXIuYnVmKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzdGF0ZS0+YnVmZmVyKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTQyMSw2ICs0NDYsOCBAQAogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzdGF0ZS0+YnVmZmVyKTsKICAgICBQeV9YREVDUkVGKHN0YXRlLT5zdHJpbmcpOwogICAgIGRhdGFfc3RhY2tfZGVhbGxvYyhzdGF0ZSk7CisgICAgUHlNZW1fRGVsKHN0YXRlLT5tYXJrKTsKKyAgICBzdGF0ZS0+bWFyayA9IE5VTEw7CiB9CiAKIC8qIGNhbGN1bGF0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiBzdHJpbmcgKi8KQEAgLTQ3Myw4ICs1MDAsOSBAQAogewogICAgIHN3aXRjaCAoc3RhdHVzKSB7CiAgICAgY2FzZSBTUkVfRVJST1JfUkVDVVJTSU9OX0xJTUlUOgorICAgICAgICAvKiBUaGlzIGVycm9yIGNvZGUgc2VlbXMgdG8gYmUgdW51c2VkLiAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICBQeUV4Y19SZWN1cnNpb25FcnJvciwKICAgICAgICAgICAgICJtYXhpbXVtIHJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZCIKICAgICAgICAgICAgICk7CiAgICAgICAgIGJyZWFrOwpAQCAtNTUwLDI2ICs1NzgsMzIgQEAKICAgICByZXR1cm4gc3RyaW5nOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfc3JlLlNSRV9QYXR0ZXJuLm1hdGNoCisKKyAgICBzdHJpbmc6IG9iamVjdCA9IE5VTEwKKyAgICBwb3M6IFB5X3NzaXplX3QgPSAwCisgICAgZW5kcG9zOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iUFlfU1NJWkVfVF9NQVgiKSA9IHN5cy5tYXhzaXplCisgICAgKgorICAgIHBhdHRlcm46IG9iamVjdCA9IE5VTEwKKworTWF0Y2hlcyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1wYXR0ZXJuX21hdGNoKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorX3NyZV9TUkVfUGF0dGVybl9tYXRjaF9pbXBsKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MsIFB5X3NzaXplX3QgZW5kcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwYXR0ZXJuKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTc0YjRiMWRhM2JiMmQ4NGUgaW5wdXQ9M2QwNzlhYTk5OTc5YjgxZF0qLwogewotICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RyaW5nIiwgInBvcyIsICJlbmRwb3MiLCAicGF0dGVybiIsIE5VTEx9OwotICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgcG9zID0gMDsKLSAgICBQeV9zc2l6ZV90IGVuZHBvcyA9IFBZX1NTSVpFX1RfTUFYOwotICAgIFB5T2JqZWN0ICpwYXR0ZXJuID0gTlVMTDsKICAgICBTUkVfU1RBVEUgc3RhdGU7CiAgICAgUHlfc3NpemVfdCBzdGF0dXM7CisgICAgUHlPYmplY3QgKm1hdGNoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAifE9ubiRPOm1hdGNoIiwgX2tleXdvcmRzLAotICAgICAgICAmc3RyaW5nLCAmcG9zLCAmZW5kcG9zLCAmcGF0dGVybikpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIHN0cmluZyA9IGZpeF9zdHJpbmdfcGFyYW0oc3RyaW5nLCBwYXR0ZXJuLCAicGF0dGVybiIpOwogICAgIGlmICghc3RyaW5nKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzdHJpbmcgPSBzdGF0ZV9pbml0KCZzdGF0ZSwgKFBhdHRlcm5PYmplY3QgKilzZWxmLCBzdHJpbmcsIHBvcywgZW5kcG9zKTsKLSAgICBpZiAoIXN0cmluZykKKyAgICBpZiAoIXN0YXRlX2luaXQoJnN0YXRlLCAoUGF0dGVybk9iamVjdCAqKXNlbGYsIHN0cmluZywgcG9zLCBlbmRwb3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OwpAQCAtNTc5LDM0ICs2MTMsNDMgQEAKICAgICBzdGF0dXMgPSBzcmVfbWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIDApOwogCiAgICAgVFJBQ0UoKCJ8JXB8JXB8RU5EXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOwotICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHN0YXRlX2ZpbmkoJnN0YXRlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCisgICAgbWF0Y2ggPSBwYXR0ZXJuX25ld19tYXRjaChzZWxmLCAmc3RhdGUsIHN0YXR1cyk7CiAgICAgc3RhdGVfZmluaSgmc3RhdGUpOwotCi0gICAgcmV0dXJuIChQeU9iamVjdCAqKXBhdHRlcm5fbmV3X21hdGNoKHNlbGYsICZzdGF0ZSwgc3RhdHVzKTsKKyAgICByZXR1cm4gbWF0Y2g7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fZnVsbG1hdGNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCisvKltjbGluaWMgaW5wdXRdCitfc3JlLlNSRV9QYXR0ZXJuLmZ1bGxtYXRjaAorCisgICAgc3RyaW5nOiBvYmplY3QgPSBOVUxMCisgICAgcG9zOiBQeV9zc2l6ZV90ID0gMAorICAgIGVuZHBvczogUHlfc3NpemVfdChjX2RlZmF1bHQ9IlBZX1NTSVpFX1RfTUFYIikgPSBzeXMubWF4c2l6ZQorICAgICoKKyAgICBwYXR0ZXJuOiBvYmplY3QgPSBOVUxMCisKK01hdGNoZXMgYWdhaW5zdCBhbGwgb2YgdGhlIHN0cmluZworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9mdWxsbWF0Y2hfaW1wbChQYXR0ZXJuT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcywgUHlfc3NpemVfdCBlbmRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwYXR0ZXJuKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFjOThiYzVkYTc0NGVhOTQgaW5wdXQ9ZDQyMjg2MDZjYzEyNTgwZl0qLwogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeV9zc2l6ZV90IHN0YXR1czsKKyAgICBQeU9iamVjdCAqbWF0Y2g7CiAKLSAgICBQeU9iamVjdCAqc3RyaW5nID0gTlVMTCwgKnN0cmluZzIgPSBOVUxMOwotICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwotICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7Ci0gICAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyAic3RyaW5nIiwgInBvcyIsICJlbmRwb3MiLCAicGF0dGVybiIsIE5VTEwgfTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPbm4kTzpmdWxsbWF0Y2giLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmluZywgJnN0YXJ0LCAmZW5kLCAmc3RyaW5nMikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgc3RyaW5nID0gZml4X3N0cmluZ19wYXJhbShzdHJpbmcsIHN0cmluZzIsICJwYXR0ZXJuIik7CisgICAgc3RyaW5nID0gZml4X3N0cmluZ19wYXJhbShzdHJpbmcsIHBhdHRlcm4sICJwYXR0ZXJuIik7CiAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc3RyaW5nID0gc3RhdGVfaW5pdCgmc3RhdGUsIHNlbGYsIHN0cmluZywgc3RhcnQsIGVuZCk7Ci0gICAgaWYgKCFzdHJpbmcpCisgICAgaWYgKCFzdGF0ZV9pbml0KCZzdGF0ZSwgc2VsZiwgc3RyaW5nLCBwb3MsIGVuZHBvcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CkBAIC02MTYsMzQgKzY1OSw0NSBAQAogICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgMSk7CiAKICAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7Ci0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgc3RhdGVfZmluaSgmc3RhdGUpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKKyAgICBtYXRjaCA9IHBhdHRlcm5fbmV3X21hdGNoKHNlbGYsICZzdGF0ZSwgc3RhdHVzKTsKICAgICBzdGF0ZV9maW5pKCZzdGF0ZSk7Ci0KLSAgICByZXR1cm4gcGF0dGVybl9uZXdfbWF0Y2goc2VsZiwgJnN0YXRlLCBzdGF0dXMpOworICAgIHJldHVybiBtYXRjaDsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotcGF0dGVybl9zZWFyY2goUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKKy8qW2NsaW5pYyBpbnB1dF0KK19zcmUuU1JFX1BhdHRlcm4uc2VhcmNoCisKKyAgICBzdHJpbmc6IG9iamVjdCA9IE5VTEwKKyAgICBwb3M6IFB5X3NzaXplX3QgPSAwCisgICAgZW5kcG9zOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iUFlfU1NJWkVfVF9NQVgiKSA9IHN5cy5tYXhzaXplCisgICAgKgorICAgIHBhdHRlcm46IG9iamVjdCA9IE5VTEwKKworU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZyBtYXRjaCBvYmplY3QgaW5zdGFuY2UuCisKK1JldHVybiBOb25lIGlmIG5vIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgbWF0Y2hlcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fc2VhcmNoX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MsIFB5X3NzaXplX3QgZW5kcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcGF0dGVybikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zODM5Mzk0YTE4ZTVlYTRmIGlucHV0PWRhYjQyNzIwZjRiZTNhNGJdKi8KIHsKICAgICBTUkVfU1RBVEUgc3RhdGU7CiAgICAgUHlfc3NpemVfdCBzdGF0dXM7CisgICAgUHlPYmplY3QgKm1hdGNoOwogCi0gICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEwsICpzdHJpbmcyID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKLSAgICBQeV9zc2l6ZV90IGVuZCA9IFBZX1NTSVpFX1RfTUFYOwotICAgIHN0YXRpYyBjaGFyKiBrd2xpc3RbXSA9IHsgInN0cmluZyIsICJwb3MiLCAiZW5kcG9zIiwgInBhdHRlcm4iLCBOVUxMIH07Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8T25uJE86c2VhcmNoIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJpbmcsICZzdGFydCwgJmVuZCwgJnN0cmluZzIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHN0cmluZyA9IGZpeF9zdHJpbmdfcGFyYW0oc3RyaW5nLCBzdHJpbmcyLCAicGF0dGVybiIpOworICAgIHN0cmluZyA9IGZpeF9zdHJpbmdfcGFyYW0oc3RyaW5nLCBwYXR0ZXJuLCAicGF0dGVybiIpOwogICAgIGlmICghc3RyaW5nKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHN0cmluZyA9IHN0YXRlX2luaXQoJnN0YXRlLCBzZWxmLCBzdHJpbmcsIHN0YXJ0LCBlbmQpOwotICAgIGlmICghc3RyaW5nKQorICAgIGlmICghc3RhdGVfaW5pdCgmc3RhdGUsIHNlbGYsIHN0cmluZywgcG9zLCBlbmRwb3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKQEAgLTY1MiwxMiArNzA2LDE0IEBACiAKICAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKLSAgICBzdGF0ZV9maW5pKCZzdGF0ZSk7Ci0KLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBzdGF0ZV9maW5pKCZzdGF0ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIHJldHVybiBwYXR0ZXJuX25ld19tYXRjaChzZWxmLCAmc3RhdGUsIHN0YXR1cyk7CisgICAgbWF0Y2ggPSBwYXR0ZXJuX25ld19tYXRjaChzZWxmLCAmc3RhdGUsIHN0YXR1cyk7CisgICAgc3RhdGVfZmluaSgmc3RhdGUpOworICAgIHJldHVybiBtYXRjaDsKIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtNzAwLDM1ICs3NTYsNDAgQEAKICAgICBpZiAoIWNvcHkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUHlfREVDUkVGKCpvYmplY3QpOwotICAgICpvYmplY3QgPSBjb3B5OworICAgIFB5X1NFVFJFRigqb2JqZWN0LCBjb3B5KTsKIAogICAgIHJldHVybiAxOyAvKiBzdWNjZXNzICovCiB9CiAjZW5kaWYKIAotc3RhdGljIFB5T2JqZWN0KgotcGF0dGVybl9maW5kYWxsKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCisvKltjbGluaWMgaW5wdXRdCitfc3JlLlNSRV9QYXR0ZXJuLmZpbmRhbGwKKworICAgIHN0cmluZzogb2JqZWN0ID0gTlVMTAorICAgIHBvczogUHlfc3NpemVfdCA9IDAKKyAgICBlbmRwb3M6IFB5X3NzaXplX3QoY19kZWZhdWx0PSJQWV9TU0laRV9UX01BWCIpID0gc3lzLm1heHNpemUKKyAgICAqCisgICAgc291cmNlOiBvYmplY3QgPSBOVUxMCisKK1JldHVybiBhIGxpc3Qgb2YgYWxsIG5vbi1vdmVybGFwcGluZyBtYXRjaGVzIG9mIHBhdHRlcm4gaW4gc3RyaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9maW5kYWxsX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zLCBQeV9zc2l6ZV90IGVuZHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzb3VyY2UpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTEyOTU0OThiMzAwNjM5ZCBpbnB1dD1kZjY4ODM1NWMwNTZiOWRlXSovCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OwogICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgaSwgYiwgZTsKIAotICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMLCAqc3RyaW5nMiA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBzdGFydCA9IDA7Ci0gICAgUHlfc3NpemVfdCBlbmQgPSBQWV9TU0laRV9UX01BWDsKLSAgICBzdGF0aWMgY2hhcioga3dsaXN0W10gPSB7ICJzdHJpbmciLCAicG9zIiwgImVuZHBvcyIsICJzb3VyY2UiLCBOVUxMIH07Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8T25uJE86ZmluZGFsbCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyaW5nLCAmc3RhcnQsICZlbmQsICZzdHJpbmcyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBzdHJpbmcgPSBmaXhfc3RyaW5nX3BhcmFtKHN0cmluZywgc3RyaW5nMiwgInNvdXJjZSIpOworICAgIHN0cmluZyA9IGZpeF9zdHJpbmdfcGFyYW0oc3RyaW5nLCBzb3VyY2UsICJzb3VyY2UiKTsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzdHJpbmcgPSBzdGF0ZV9pbml0KCZzdGF0ZSwgc2VsZiwgc3RyaW5nLCBzdGFydCwgZW5kKTsKLSAgICBpZiAoIXN0cmluZykKKyAgICBpZiAoIXN0YXRlX2luaXQoJnN0YXRlLCBzZWxmLCBzdHJpbmcsIHBvcywgZW5kcG9zKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBsaXN0ID0gUHlMaXN0X05ldygwKTsKQEAgLTgwOCwxNCArODY5LDI4IEBACiAKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotcGF0dGVybl9maW5kaXRlcihQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQorLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfUGF0dGVybi5maW5kaXRlcgorCisgICAgc3RyaW5nOiBvYmplY3QKKyAgICBwb3M6IFB5X3NzaXplX3QgPSAwCisgICAgZW5kcG9zOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iUFlfU1NJWkVfVF9NQVgiKSA9IHN5cy5tYXhzaXplCisKK1JldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBub24tb3ZlcmxhcHBpbmcgbWF0Y2hlcyBmb3IgdGhlIFJFIHBhdHRlcm4gaW4gc3RyaW5nLgorCitGb3IgZWFjaCBtYXRjaCwgdGhlIGl0ZXJhdG9yIHJldHVybnMgYSBtYXRjaCBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9QYXR0ZXJuX2ZpbmRpdGVyX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcywgUHlfc3NpemVfdCBlbmRwb3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGJiYjFhMGFlYjM4YmIxNCBpbnB1dD02MTJhYWI2OWU5ZmUwOGU0XSovCiB7CiAgICAgUHlPYmplY3QqIHNjYW5uZXI7CiAgICAgUHlPYmplY3QqIHNlYXJjaDsKICAgICBQeU9iamVjdCogaXRlcmF0b3I7CiAKLSAgICBzY2FubmVyID0gcGF0dGVybl9zY2FubmVyKHBhdHRlcm4sIGFyZ3MsIGt3KTsKKyAgICBzY2FubmVyID0gcGF0dGVybl9zY2FubmVyKHNlbGYsIHN0cmluZywgcG9zLCBlbmRwb3MpOwogICAgIGlmICghc2Nhbm5lcikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTgzMCw4ICs5MDUsMzggQEAKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fc3BsaXQoUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKKy8qW2NsaW5pYyBpbnB1dF0KK19zcmUuU1JFX1BhdHRlcm4uc2Nhbm5lcgorCisgICAgc3RyaW5nOiBvYmplY3QKKyAgICBwb3M6IFB5X3NzaXplX3QgPSAwCisgICAgZW5kcG9zOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iUFlfU1NJWkVfVF9NQVgiKSA9IHN5cy5tYXhzaXplCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fc2Nhbm5lcl9pbXBsKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcywgUHlfc3NpemVfdCBlbmRwb3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTRlYTU0OGFlZDMzODkwYiBpbnB1dD0zYWFjZGJkZTc3YTNhNjM3XSovCit7CisgICAgcmV0dXJuIHBhdHRlcm5fc2Nhbm5lcihzZWxmLCBzdHJpbmcsIHBvcywgZW5kcG9zKTsKK30KKworLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfUGF0dGVybi5zcGxpdAorCisgICAgc3RyaW5nOiBvYmplY3QgPSBOVUxMCisgICAgbWF4c3BsaXQ6IFB5X3NzaXplX3QgPSAwCisgICAgKgorICAgIHNvdXJjZTogb2JqZWN0ID0gTlVMTAorCitTcGxpdCBzdHJpbmcgYnkgdGhlIG9jY3VycmVuY2VzIG9mIHBhdHRlcm4uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9QYXR0ZXJuX3NwbGl0X2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heHNwbGl0LCBQeU9iamVjdCAqc291cmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIwYmFjMmZmNTViOWY4NGMgaW5wdXQ9NDFlMGIyZTM1ZTU5OWQ3Yl0qLwogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKQEAgLTg0MSwxOSArOTQ2LDI0IEBACiAgICAgUHlfc3NpemVfdCBpOwogICAgIHZvaWQqIGxhc3Q7CiAKLSAgICBQeU9iamVjdCAqc3RyaW5nID0gTlVMTCwgKnN0cmluZzIgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAwOwotICAgIHN0YXRpYyBjaGFyKiBrd2xpc3RbXSA9IHsgInN0cmluZyIsICJtYXhzcGxpdCIsICJzb3VyY2UiLCBOVUxMIH07Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8T24kTzpzcGxpdCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyaW5nLCAmbWF4c3BsaXQsICZzdHJpbmcyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBzdHJpbmcgPSBmaXhfc3RyaW5nX3BhcmFtKHN0cmluZywgc3RyaW5nMiwgInNvdXJjZSIpOworICAgIHN0cmluZyA9IGZpeF9zdHJpbmdfcGFyYW0oc3RyaW5nLCBzb3VyY2UsICJzb3VyY2UiKTsKICAgICBpZiAoIXN0cmluZykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzdHJpbmcgPSBzdGF0ZV9pbml0KCZzdGF0ZSwgc2VsZiwgc3RyaW5nLCAwLCBQWV9TU0laRV9UX01BWCk7Ci0gICAgaWYgKCFzdHJpbmcpCisgICAgYXNzZXJ0KHNlbGYtPmNvZGVzaXplICE9IDApOworICAgIGlmIChzZWxmLT5jb2RlWzBdICE9IFNSRV9PUF9JTkZPIHx8IHNlbGYtPmNvZGVbM10gPT0gMCkgeworICAgICAgICBpZiAoc2VsZi0+Y29kZVswXSA9PSBTUkVfT1BfSU5GTyAmJiBzZWxmLT5jb2RlWzRdID09IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGxpdCgpIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHBhdHRlcm4gbWF0Y2guIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0Z1dHVyZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNwbGl0KCkgcmVxdWlyZXMgYSBub24tZW1wdHkgcGF0dGVybiBtYXRjaC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghc3RhdGVfaW5pdCgmc3RhdGUsIHNlbGYsIHN0cmluZywgMCwgUFlfU1NJWkVfVF9NQVgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwpAQCAtOTk3LDggKzExMDcsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RyaW5nID0gc3RhdGVfaW5pdCgmc3RhdGUsIHNlbGYsIHN0cmluZywgMCwgUFlfU1NJWkVfVF9NQVgpOwotICAgIGlmICghc3RyaW5nKSB7CisgICAgaWYgKCFzdGF0ZV9pbml0KCZzdGF0ZSwgc2VsZiwgc3RyaW5nLCAwLCBQWV9TU0laRV9UX01BWCkpIHsKICAgICAgICAgUHlfREVDUkVGKGZpbHRlcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTExNDAsMzYgKzEyNDksNTAgQEAKIAogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1wYXR0ZXJuX3N1YihQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQotewotICAgIFB5T2JqZWN0KiBwdGVtcGxhdGU7Ci0gICAgUHlPYmplY3QqIHN0cmluZzsKLSAgICBQeV9zc2l6ZV90IGNvdW50ID0gMDsKLSAgICBzdGF0aWMgY2hhcioga3dsaXN0W10gPSB7ICJyZXBsIiwgInN0cmluZyIsICJjb3VudCIsIE5VTEwgfTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk9PfG46c3ViIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdGVtcGxhdGUsICZzdHJpbmcsICZjb3VudCkpCi0gICAgICAgIHJldHVybiBOVUxMOworLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfUGF0dGVybi5zdWIKIAotICAgIHJldHVybiBwYXR0ZXJuX3N1Yngoc2VsZiwgcHRlbXBsYXRlLCBzdHJpbmcsIGNvdW50LCAwKTsKKyAgICByZXBsOiBvYmplY3QKKyAgICBzdHJpbmc6IG9iamVjdAorICAgIGNvdW50OiBQeV9zc2l6ZV90ID0gMAorCitSZXR1cm4gdGhlIHN0cmluZyBvYnRhaW5lZCBieSByZXBsYWNpbmcgdGhlIGxlZnRtb3N0IG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBwYXR0ZXJuIGluIHN0cmluZyBieSB0aGUgcmVwbGFjZW1lbnQgcmVwbC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fc3ViX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnJlcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJpbmcsIFB5X3NzaXplX3QgY291bnQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWRiZjJlYzM0NzljYmEwMCBpbnB1dD1jNTNkNzBiZTBiM2NhZjg2XSovCit7CisgICAgcmV0dXJuIHBhdHRlcm5fc3VieChzZWxmLCByZXBsLCBzdHJpbmcsIGNvdW50LCAwKTsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotcGF0dGVybl9zdWJuKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCi17Ci0gICAgUHlPYmplY3QqIHB0ZW1wbGF0ZTsKLSAgICBQeU9iamVjdCogc3RyaW5nOwotICAgIFB5X3NzaXplX3QgY291bnQgPSAwOwotICAgIHN0YXRpYyBjaGFyKiBrd2xpc3RbXSA9IHsgInJlcGwiLCAic3RyaW5nIiwgImNvdW50IiwgTlVMTCB9OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiT098bjpzdWJuIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdGVtcGxhdGUsICZzdHJpbmcsICZjb3VudCkpCi0gICAgICAgIHJldHVybiBOVUxMOworLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfUGF0dGVybi5zdWJuCiAKLSAgICByZXR1cm4gcGF0dGVybl9zdWJ4KHNlbGYsIHB0ZW1wbGF0ZSwgc3RyaW5nLCBjb3VudCwgMSk7CisgICAgcmVwbDogb2JqZWN0CisgICAgc3RyaW5nOiBvYmplY3QKKyAgICBjb3VudDogUHlfc3NpemVfdCA9IDAKKworUmV0dXJuIHRoZSB0dXBsZSAobmV3X3N0cmluZywgbnVtYmVyX29mX3N1YnNfbWFkZSkgZm91bmQgYnkgcmVwbGFjaW5nIHRoZSBsZWZ0bW9zdCBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2YgcGF0dGVybiB3aXRoIHRoZSByZXBsYWNlbWVudCByZXBsLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9zdWJuX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnJlcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyaW5nLCBQeV9zc2l6ZV90IGNvdW50KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBkOTUyMmNkNTI5ZTk3MjggaW5wdXQ9ZTczNDJkN2NlNjA4MzU3N10qLworeworICAgIHJldHVybiBwYXR0ZXJuX3N1Yngoc2VsZiwgcmVwbCwgc3RyaW5nLCBjb3VudCwgMSk7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fY29weShQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfUGF0dGVybi5fX2NvcHlfXworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9QYXR0ZXJuX19fY29weV9fX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04NWRlZGMyZGIxYmQ4Njk0IGlucHV0PWE3MzBhNTlkODYzYmM5ZjVdKi8KIHsKICNpZmRlZiBVU0VfQlVJTFRJTl9DT1BZCiAgICAgUGF0dGVybk9iamVjdCogY29weTsKQEAgLTExOTYsOCArMTMxOSwxNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fZGVlcGNvcHkoUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIG1lbW8pCisvKltjbGluaWMgaW5wdXRdCitfc3JlLlNSRV9QYXR0ZXJuLl9fZGVlcGNvcHlfXworCisgICAgbWVtbzogb2JqZWN0CisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fX19kZWVwY29weV9fX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1lbW8pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzVlZmU2OWJkMTJjNWQ3ZCBpbnB1dD0zOTU5NzE5NDgyYzA3ZjcwXSovCiB7CiAjaWZkZWYgVVNFX0JVSUxUSU5fQ09QWQogICAgIFBhdHRlcm5PYmplY3QqIGNvcHk7CkBAIC0xMjM4LDcgKzEzNjksNyBAQAogICAgIH07CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmZsYWdfaXRlbXM7Ci0gICAgaW50IGk7CisgICAgc2l6ZV90IGk7CiAgICAgaW50IGZsYWdzID0gb2JqLT5mbGFnczsKIAogICAgIC8qIE9taXQgcmUuVU5JQ09ERSBmb3IgdmFsaWQgc3RyaW5nIHBhdHRlcm5zLiAqLwpAQCAtMTI5OSwxMzEgKzE0MzAsNDAgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QeURvY19TVFJWQVIocGF0dGVybl9tYXRjaF9kb2MsCi0ibWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAotICAgIE1hdGNoZXMgemVybyBvciBtb3JlIGNoYXJhY3RlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIik7Ci0KLVB5RG9jX1NUUlZBUihwYXR0ZXJuX2Z1bGxtYXRjaF9kb2MsCi0iZnVsbG1hdGNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKSAtPiBtYXRjaCBvYmplY3Qgb3IgTm9uZS5cblwKLSAgICBNYXRjaGVzIGFnYWluc3QgYWxsIG9mIHRoZSBzdHJpbmciKTsKLQotUHlEb2NfU1RSVkFSKHBhdHRlcm5fc2VhcmNoX2RvYywKLSJzZWFyY2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAotICAgIFNjYW4gdGhyb3VnaCBzdHJpbmcgbG9va2luZyBmb3IgYSBtYXRjaCwgYW5kIHJldHVybiBhIGNvcnJlc3BvbmRpbmdcblwKLSAgICBtYXRjaCBvYmplY3QgaW5zdGFuY2UuIFJldHVybiBOb25lIGlmIG5vIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgbWF0Y2hlcy4iKTsKLQotUHlEb2NfU1RSVkFSKHBhdHRlcm5fc3BsaXRfZG9jLAotInNwbGl0KHN0cmluZ1ssIG1heHNwbGl0ID0gMF0pICAtPiBsaXN0LlxuXAotICAgIFNwbGl0IHN0cmluZyBieSB0aGUgb2NjdXJyZW5jZXMgb2YgcGF0dGVybi4iKTsKLQotUHlEb2NfU1RSVkFSKHBhdHRlcm5fZmluZGFsbF9kb2MsCi0iZmluZGFsbChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbGlzdC5cblwKLSAgIFJldHVybiBhIGxpc3Qgb2YgYWxsIG5vbi1vdmVybGFwcGluZyBtYXRjaGVzIG9mIHBhdHRlcm4gaW4gc3RyaW5nLiIpOwotCi1QeURvY19TVFJWQVIocGF0dGVybl9maW5kaXRlcl9kb2MsCi0iZmluZGl0ZXIoc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IGl0ZXJhdG9yLlxuXAotICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBub24tb3ZlcmxhcHBpbmcgbWF0Y2hlcyBmb3IgdGhlIFxuXAotICAgIFJFIHBhdHRlcm4gaW4gc3RyaW5nLiBGb3IgZWFjaCBtYXRjaCwgdGhlIGl0ZXJhdG9yIHJldHVybnMgYVxuXAotICAgIG1hdGNoIG9iamVjdC4iKTsKLQotUHlEb2NfU1RSVkFSKHBhdHRlcm5fc3ViX2RvYywKLSJzdWIocmVwbCwgc3RyaW5nWywgY291bnQgPSAwXSkgLT4gbmV3c3RyaW5nLlxuXAotICAgIFJldHVybiB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IHJlcGxhY2luZyB0aGUgbGVmdG1vc3Qgbm9uLW92ZXJsYXBwaW5nXG5cCi0gICAgb2NjdXJyZW5jZXMgb2YgcGF0dGVybiBpbiBzdHJpbmcgYnkgdGhlIHJlcGxhY2VtZW50IHJlcGwuIik7Ci0KLVB5RG9jX1NUUlZBUihwYXR0ZXJuX3N1Ym5fZG9jLAotInN1Ym4ocmVwbCwgc3RyaW5nWywgY291bnQgPSAwXSkgLT4gKG5ld3N0cmluZywgbnVtYmVyIG9mIHN1YnMpXG5cCi0gICAgUmV0dXJuIHRoZSB0dXBsZSAobmV3X3N0cmluZywgbnVtYmVyX29mX3N1YnNfbWFkZSkgZm91bmQgYnkgcmVwbGFjaW5nXG5cCi0gICAgdGhlIGxlZnRtb3N0IG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBwYXR0ZXJuIHdpdGggdGhlXG5cCi0gICAgcmVwbGFjZW1lbnQgcmVwbC4iKTsKLQogUHlEb2NfU1RSVkFSKHBhdHRlcm5fZG9jLCAiQ29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIG9iamVjdHMiKTsKIAotc3RhdGljIFB5TWV0aG9kRGVmIHBhdHRlcm5fbWV0aG9kc1tdID0gewotICAgIHsibWF0Y2giLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fbWF0Y2gsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICAgICBwYXR0ZXJuX21hdGNoX2RvY30sCi0gICAgeyJmdWxsbWF0Y2giLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZnVsbG1hdGNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgICAgcGF0dGVybl9mdWxsbWF0Y2hfZG9jfSwKLSAgICB7InNlYXJjaCIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zZWFyY2gsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICAgICBwYXR0ZXJuX3NlYXJjaF9kb2N9LAotICAgIHsic3ViIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3N1YiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgICAgIHBhdHRlcm5fc3ViX2RvY30sCi0gICAgeyJzdWJuIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3N1Ym4sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICAgICBwYXR0ZXJuX3N1Ym5fZG9jfSwKLSAgICB7InNwbGl0IiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3NwbGl0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgICAgcGF0dGVybl9zcGxpdF9kb2N9LAotICAgIHsiZmluZGFsbCIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9maW5kYWxsLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgICAgcGF0dGVybl9maW5kYWxsX2RvY30sCi0gICAgeyJmaW5kaXRlciIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9maW5kaXRlciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgICAgIHBhdHRlcm5fZmluZGl0ZXJfZG9jfSwKLSAgICB7InNjYW5uZXIiLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fc2Nhbm5lciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAotICAgIHsiX19jb3B5X18iLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fY29weSwgTUVUSF9OT0FSR1N9LAotICAgIHsiX19kZWVwY29weV9fIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2RlZXBjb3B5LCBNRVRIX099LAotICAgIHtOVUxMLCBOVUxMfQotfTsKLQotI2RlZmluZSBQQVRfT0ZGKHgpIG9mZnNldG9mKFBhdHRlcm5PYmplY3QsIHgpCi1zdGF0aWMgUHlNZW1iZXJEZWYgcGF0dGVybl9tZW1iZXJzW10gPSB7Ci0gICAgeyJwYXR0ZXJuIiwgICAgVF9PQkpFQ1QsICAgIFBBVF9PRkYocGF0dGVybiksICAgICAgIFJFQURPTkxZfSwKLSAgICB7ImZsYWdzIiwgICAgICBUX0lOVCwgICAgICAgUEFUX09GRihmbGFncyksICAgICAgICAgUkVBRE9OTFl9LAotICAgIHsiZ3JvdXBzIiwgICAgIFRfUFlTU0laRVQsICBQQVRfT0ZGKGdyb3VwcyksICAgICAgICBSRUFET05MWX0sCi0gICAgeyJncm91cGluZGV4IiwgVF9PQkpFQ1QsICAgIFBBVF9PRkYoZ3JvdXBpbmRleCksICAgIFJFQURPTkxZfSwKLSAgICB7TlVMTH0gIC8qIFNlbnRpbmVsICovCi19OwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFBhdHRlcm5fVHlwZSA9IHsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiXyIgU1JFX01PRFVMRSAiLlNSRV9QYXR0ZXJuIiwKLSAgICBzaXplb2YoUGF0dGVybk9iamVjdCksIHNpemVvZihTUkVfQ09ERSksCi0gICAgKGRlc3RydWN0b3IpcGF0dGVybl9kZWFsbG9jLCAgICAgICAgLyogdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIChyZXByZnVuYylwYXR0ZXJuX3JlcHIsICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLwotICAgIHBhdHRlcm5fZG9jLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIG9mZnNldG9mKFBhdHRlcm5PYmplY3QsIHdlYWtyZWZsaXN0KSwgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICBwYXR0ZXJuX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCi0gICAgcGF0dGVybl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwotfTsKKy8qIFBhdHRlcm5PYmplY3QncyAnZ3JvdXBpbmRleCcgbWV0aG9kLiAqLworc3RhdGljIFB5T2JqZWN0ICoKK3BhdHRlcm5fZ3JvdXBpbmRleChQYXR0ZXJuT2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeURpY3RQcm94eV9OZXcoc2VsZi0+Z3JvdXBpbmRleCk7Cit9CiAKIHN0YXRpYyBpbnQgX3ZhbGlkYXRlKFBhdHRlcm5PYmplY3QgKnNlbGYpOyAvKiBGb3J3YXJkICovCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19zcmUuY29tcGlsZQorCisgICAgcGF0dGVybjogb2JqZWN0CisgICAgZmxhZ3M6IGludAorICAgIGNvZGU6IG9iamVjdChzdWJjbGFzc19vZj0nJlB5TGlzdF9UeXBlJykKKyAgICBncm91cHM6IFB5X3NzaXplX3QKKyAgICBncm91cGluZGV4OiBvYmplY3QKKyAgICBpbmRleGdyb3VwOiBvYmplY3QKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotX2NvbXBpbGUoUHlPYmplY3QqIHNlbGZfLCBQeU9iamVjdCogYXJncykKK19zcmVfY29tcGlsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpwYXR0ZXJuLCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY29kZSwgUHlfc3NpemVfdCBncm91cHMsIFB5T2JqZWN0ICpncm91cGluZGV4LAorICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmluZGV4Z3JvdXApCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZWY5YzJiMzY5Mzc3NjQwNCBpbnB1dD03ZDA1OWVjOGFlMWVkYjg1XSovCiB7CiAgICAgLyogImNvbXBpbGUiIHBhdHRlcm4gZGVzY3JpcHRvciB0byBwYXR0ZXJuIG9iamVjdCAqLwogCiAgICAgUGF0dGVybk9iamVjdCogc2VsZjsKICAgICBQeV9zc2l6ZV90IGksIG47CiAKLSAgICBQeU9iamVjdCogcGF0dGVybjsKLSAgICBpbnQgZmxhZ3MgPSAwOwotICAgIFB5T2JqZWN0KiBjb2RlOwotICAgIFB5X3NzaXplX3QgZ3JvdXBzID0gMDsKLSAgICBQeU9iamVjdCogZ3JvdXBpbmRleCA9IE5VTEw7Ci0gICAgUHlPYmplY3QqIGluZGV4Z3JvdXAgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaU8hfG5PTyIsICZwYXR0ZXJuLCAmZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZQeUxpc3RfVHlwZSwgJmNvZGUsICZncm91cHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZncm91cGluZGV4LCAmaW5kZXhncm91cCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgbiA9IFB5TGlzdF9HRVRfU0laRShjb2RlKTsKICAgICAvKiBjb3Zlcml0eVthbXBlcnNhbmRfaW5fc2l6ZV0gKi8KICAgICBzZWxmID0gUHlPYmplY3RfTkVXX1ZBUihQYXR0ZXJuT2JqZWN0LCAmUGF0dGVybl9UeXBlLCBuKTsKQEAgLTE1NzksNiArMTYxOSw3IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNSRV9PUF9SQU5HRToKKyAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0VfSUdOT1JFOgogICAgICAgICAgICAgR0VUX0FSRzsKICAgICAgICAgICAgIEdFVF9BUkc7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5MzUsMTAgKzE5NzYsOSBAQAogc3RhdGljIGludAogX3ZhbGlkYXRlX291dGVyKFNSRV9DT0RFICpjb2RlLCBTUkVfQ09ERSAqZW5kLCBQeV9zc2l6ZV90IGdyb3VwcykKIHsKLSAgICBpZiAoZ3JvdXBzIDwgMCB8fCBncm91cHMgPiAxMDAgfHwgY29kZSA+PSBlbmQgfHwgZW5kWy0xXSAhPSBTUkVfT1BfU1VDQ0VTUykKKyAgICBpZiAoZ3JvdXBzIDwgMCB8fCAoc2l6ZV90KWdyb3VwcyA+IFNSRV9NQVhHUk9VUFMgfHwKKyAgICAgICAgY29kZSA+PSBlbmQgfHwgZW5kWy0xXSAhPSBTUkVfT1BfU1VDQ0VTUykKICAgICAgICAgRkFJTDsKLSAgICBpZiAoZ3JvdXBzID09IDApICAvKiBmaXggZm9yIHNpbXBsZWpzb24gKi8KLSAgICAgICAgZ3JvdXBzID0gMTAwOyAvKiAxMDAgZ3JvdXBzIHNob3VsZCBhbHdheXMgYmUgc2FmZSAqLwogICAgIHJldHVybiBfdmFsaWRhdGVfaW5uZXIoY29kZSwgZW5kLTEsIGdyb3Vwcyk7CiB9CiAKQEAgLTIwMzYsMTMgKzIwNzYsMjIgQEAKICAgICByZXR1cm4gbWF0Y2hfZ2V0c2xpY2VfYnlfaW5kZXgoc2VsZiwgbWF0Y2hfZ2V0aW5kZXgoc2VsZiwgaW5kZXgpLCBkZWYpOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1tYXRjaF9leHBhbmQoTWF0Y2hPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBwdGVtcGxhdGUpCisvKltjbGluaWMgaW5wdXRdCitfc3JlLlNSRV9NYXRjaC5leHBhbmQKKworICAgIHRlbXBsYXRlOiBvYmplY3QKKworUmV0dXJuIHRoZSBzdHJpbmcgb2J0YWluZWQgYnkgZG9pbmcgYmFja3NsYXNoIHN1YnN0aXR1dGlvbiBvbiB0aGUgc3RyaW5nIHRlbXBsYXRlLCBhcyBkb25lIGJ5IHRoZSBzdWIoKSBtZXRob2QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9NYXRjaF9leHBhbmRfaW1wbChNYXRjaE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnRlbXBsYXRlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTkzMWI1OGNjYzMyM2MzYTEgaW5wdXQ9NGJmZGIyMmMyZjhiMTQ2YV0qLwogewogICAgIC8qIGRlbGVnYXRlIHRvIFB5dGhvbiBjb2RlICovCiAgICAgcmV0dXJuIGNhbGwoCiAgICAgICAgIFNSRV9QWV9NT0RVTEUsICJfZXhwYW5kIiwKLSAgICAgICAgUHlUdXBsZV9QYWNrKDMsIHNlbGYtPnBhdHRlcm4sIHNlbGYsIHB0ZW1wbGF0ZSkKKyAgICAgICAgUHlUdXBsZV9QYWNrKDMsIHNlbGYtPnBhdHRlcm4sIHNlbGYsIHRlbXBsYXRlKQogICAgICAgICApOwogfQogCkBAIC0yMDgxLDI0ICsyMTMwLDI5IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotbWF0Y2hfZ3JvdXBzKE1hdGNoT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQorLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfTWF0Y2guZ3JvdXBzCisKKyAgICBkZWZhdWx0OiBvYmplY3QgPSBOb25lCisgICAgICAgIElzIHVzZWQgZm9yIGdyb3VwcyB0aGF0IGRpZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoLgorCitSZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIGFsbCB0aGUgc3ViZ3JvdXBzIG9mIHRoZSBtYXRjaCwgZnJvbSAxLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfTWF0Y2hfZ3JvdXBzX2ltcGwoTWF0Y2hPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhZjhlMjY0MTUzNzIzOGEgaW5wdXQ9YmIwNjllZjU1ZGFiY2E5MV0qLwogewogICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAgICAgUHlfc3NpemVfdCBpbmRleDsKIAotICAgIFB5T2JqZWN0KiBkZWYgPSBQeV9Ob25lOwotICAgIHN0YXRpYyBjaGFyKiBrd2xpc3RbXSA9IHsgImRlZmF1bHQiLCBOVUxMIH07Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8Tzpncm91cHMiLCBrd2xpc3QsICZkZWYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHJlc3VsdCA9IFB5VHVwbGVfTmV3KHNlbGYtPmdyb3Vwcy0xKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKGluZGV4ID0gMTsgaW5kZXggPCBzZWxmLT5ncm91cHM7IGluZGV4KyspIHsKICAgICAgICAgUHlPYmplY3QqIGl0ZW07Ci0gICAgICAgIGl0ZW0gPSBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChzZWxmLCBpbmRleCwgZGVmKTsKKyAgICAgICAgaXRlbSA9IG1hdGNoX2dldHNsaWNlX2J5X2luZGV4KHNlbGYsIGluZGV4LCBkZWZhdWx0X3ZhbHVlKTsKICAgICAgICAgaWYgKCFpdGVtKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjEwOSwxOCArMjE2MywyMyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLW1hdGNoX2dyb3VwZGljdChNYXRjaE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKKy8qW2NsaW5pYyBpbnB1dF0KK19zcmUuU1JFX01hdGNoLmdyb3VwZGljdAorCisgICAgZGVmYXVsdDogb2JqZWN0ID0gTm9uZQorICAgICAgICBJcyB1c2VkIGZvciBncm91cHMgdGhhdCBkaWQgbm90IHBhcnRpY2lwYXRlIGluIHRoZSBtYXRjaC4KKworUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGFsbCB0aGUgbmFtZWQgc3ViZ3JvdXBzIG9mIHRoZSBtYXRjaCwga2V5ZWQgYnkgdGhlIHN1Ymdyb3VwIG5hbWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9NYXRjaF9ncm91cGRpY3RfaW1wbChNYXRjaE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Mjk5MTdjOTA3M2U0MTc1NyBpbnB1dD0wZGVkNzk2MGIyMzc4MGFhXSovCiB7CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKICAgICBQeU9iamVjdCoga2V5czsKICAgICBQeV9zc2l6ZV90IGluZGV4OwogCi0gICAgUHlPYmplY3QqIGRlZiA9IFB5X05vbmU7Ci0gICAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyAiZGVmYXVsdCIsIE5VTEwgfTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOmdyb3VwZGljdCIsIGt3bGlzdCwgJmRlZikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgcmVzdWx0ID0gUHlEaWN0X05ldygpOwogICAgIGlmICghcmVzdWx0IHx8ICFzZWxmLT5wYXR0ZXJuLT5ncm91cGluZGV4KQogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjEzNiw3ICsyMTk1LDcgQEAKICAgICAgICAga2V5ID0gUHlMaXN0X0dFVF9JVEVNKGtleXMsIGluZGV4KTsKICAgICAgICAgaWYgKCFrZXkpCiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgdmFsdWUgPSBtYXRjaF9nZXRzbGljZShzZWxmLCBrZXksIGRlZik7CisgICAgICAgIHZhbHVlID0gbWF0Y2hfZ2V0c2xpY2Uoc2VsZiwga2V5LCBkZWZhdWx0X3ZhbHVlKTsKICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKQEAgLTIxNTcsNTAgKzIyMTYsNTggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotbWF0Y2hfc3RhcnQoTWF0Y2hPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfTWF0Y2guc3RhcnQgLT4gUHlfc3NpemVfdAorCisgICAgZ3JvdXA6IG9iamVjdChjX2RlZmF1bHQ9Ik5VTEwiKSA9IDAKKyAgICAvCisKK1JldHVybiBpbmRleCBvZiB0aGUgc3RhcnQgb2YgdGhlIHN1YnN0cmluZyBtYXRjaGVkIGJ5IGdyb3VwLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlfc3NpemVfdAorX3NyZV9TUkVfTWF0Y2hfc3RhcnRfaW1wbChNYXRjaE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmdyb3VwKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNmNmU3ZjlkZjJmYjUyMDEgaW5wdXQ9Y2VkOGU0ZWQ0YjMzZWU2Y10qLwogewotICAgIFB5X3NzaXplX3QgaW5kZXg7Ci0KLSAgICBQeU9iamVjdCogaW5kZXhfID0gTlVMTDsKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzdGFydCIsIDAsIDEsICZpbmRleF8pKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGluZGV4ID0gbWF0Y2hfZ2V0aW5kZXgoc2VsZiwgaW5kZXhfKTsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gbWF0Y2hfZ2V0aW5kZXgoc2VsZiwgZ3JvdXApOwogCiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzZWxmLT5ncm91cHMpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICJubyBzdWNoIGdyb3VwIgogICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICAvKiBtYXJrIGlzIC0xIGlmIGdyb3VwIGlzIHVuZGVmaW5lZCAqLwotICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2VsZi0+bWFya1tpbmRleCoyXSk7CisgICAgcmV0dXJuIHNlbGYtPm1hcmtbaW5kZXgqMl07CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLW1hdGNoX2VuZChNYXRjaE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitfc3JlLlNSRV9NYXRjaC5lbmQgLT4gUHlfc3NpemVfdAorCisgICAgZ3JvdXA6IG9iamVjdChjX2RlZmF1bHQ9Ik5VTEwiKSA9IDAKKyAgICAvCisKK1JldHVybiBpbmRleCBvZiB0aGUgZW5kIG9mIHRoZSBzdWJzdHJpbmcgbWF0Y2hlZCBieSBncm91cC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5X3NzaXplX3QKK19zcmVfU1JFX01hdGNoX2VuZF9pbXBsKE1hdGNoT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZ3JvdXApCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjQyNDBiMDk5MTFmNzY5MiBpbnB1dD0xYjc5OTU2MGM3ZjNkN2U2XSovCiB7Ci0gICAgUHlfc3NpemVfdCBpbmRleDsKLQotICAgIFB5T2JqZWN0KiBpbmRleF8gPSBOVUxMOwotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImVuZCIsIDAsIDEsICZpbmRleF8pKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGluZGV4ID0gbWF0Y2hfZ2V0aW5kZXgoc2VsZiwgaW5kZXhfKTsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gbWF0Y2hfZ2V0aW5kZXgoc2VsZiwgZ3JvdXApOwogCiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzZWxmLT5ncm91cHMpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICJubyBzdWNoIGdyb3VwIgogICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICAvKiBtYXJrIGlzIC0xIGlmIGdyb3VwIGlzIHVuZGVmaW5lZCAqLwotICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2VsZi0+bWFya1tpbmRleCoyKzFdKTsKKyAgICByZXR1cm4gc2VsZi0+bWFya1tpbmRleCoyKzFdOwogfQogCiBMT0NBTChQeU9iamVjdCopCkBAIC0yMjMwLDE2ICsyMjk3LDIwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLW1hdGNoX3NwYW4oTWF0Y2hPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfTWF0Y2guc3BhbgorCisgICAgZ3JvdXA6IG9iamVjdChjX2RlZmF1bHQ9Ik5VTEwiKSA9IDAKKyAgICAvCisKK0ZvciBNYXRjaE9iamVjdCBtLCByZXR1cm4gdGhlIDItdHVwbGUgKG0uc3RhcnQoZ3JvdXApLCBtLmVuZChncm91cCkpLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfTWF0Y2hfc3Bhbl9pbXBsKE1hdGNoT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZ3JvdXApCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjAyYWU0MDU5NGQxNGZlNiBpbnB1dD00OTA5MmI2MDA4ZDE3NmQzXSovCiB7Ci0gICAgUHlfc3NpemVfdCBpbmRleDsKLQotICAgIFB5T2JqZWN0KiBpbmRleF8gPSBOVUxMOwotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNwYW4iLCAwLCAxLCAmaW5kZXhfKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpbmRleCA9IG1hdGNoX2dldGluZGV4KHNlbGYsIGluZGV4Xyk7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IG1hdGNoX2dldGluZGV4KHNlbGYsIGdyb3VwKTsKIAogICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc2VsZi0+Z3JvdXBzKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKQEAgLTIyNzksOCArMjM1MCwxNCBAQAogICAgIHJldHVybiByZWdzOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1tYXRjaF9jb3B5KE1hdGNoT2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorLypbY2xpbmljIGlucHV0XQorX3NyZS5TUkVfTWF0Y2guX19jb3B5X18KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfTWF0Y2hfX19jb3B5X19faW1wbChNYXRjaE9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNzc5YzVmYzhiNWI0ZWI0IGlucHV0PTNiYjRkMzBiNmJhZGRiNWJdKi8KIHsKICNpZmRlZiBVU0VfQlVJTFRJTl9DT1BZCiAgICAgTWF0Y2hPYmplY3QqIGNvcHk7CkBAIC0yMzEwLDggKzIzODcsMTYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1tYXRjaF9kZWVwY29weShNYXRjaE9iamVjdCogc2VsZiwgUHlPYmplY3QqIG1lbW8pCisvKltjbGluaWMgaW5wdXRdCitfc3JlLlNSRV9NYXRjaC5fX2RlZXBjb3B5X18KKworICAgIG1lbW86IG9iamVjdAorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9NYXRjaF9fX2RlZXBjb3B5X19faW1wbChNYXRjaE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1lbW8pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmI2NTc1NzhlYjAzZjRhMyBpbnB1dD1iNjViNzI0ODllYWM2NGNjXSovCiB7CiAjaWZkZWYgVVNFX0JVSUxUSU5fQ09QWQogICAgIE1hdGNoT2JqZWN0KiBjb3B5OwpAQCAtMjM0Miw1MCArMjQyNyw2IEBACiAgICAgUmV0dXJuIHN1Ymdyb3VwKHMpIG9mIHRoZSBtYXRjaCBieSBpbmRpY2VzIG9yIG5hbWVzLlxuXAogICAgIEZvciAwIHJldHVybnMgdGhlIGVudGlyZSBtYXRjaC4iKTsKIAotUHlEb2NfU1RSVkFSKG1hdGNoX3N0YXJ0X2RvYywKLSJzdGFydChbZ3JvdXA9MF0pIC0+IGludC5cblwKLSAgICBSZXR1cm4gaW5kZXggb2YgdGhlIHN0YXJ0IG9mIHRoZSBzdWJzdHJpbmcgbWF0Y2hlZCBieSBncm91cC4iKTsKLQotUHlEb2NfU1RSVkFSKG1hdGNoX2VuZF9kb2MsCi0iZW5kKFtncm91cD0wXSkgLT4gaW50LlxuXAotICAgIFJldHVybiBpbmRleCBvZiB0aGUgZW5kIG9mIHRoZSBzdWJzdHJpbmcgbWF0Y2hlZCBieSBncm91cC4iKTsKLQotUHlEb2NfU1RSVkFSKG1hdGNoX3NwYW5fZG9jLAotInNwYW4oW2dyb3VwXSkgLT4gdHVwbGUuXG5cCi0gICAgRm9yIE1hdGNoT2JqZWN0IG0sIHJldHVybiB0aGUgMi10dXBsZSAobS5zdGFydChncm91cCksIG0uZW5kKGdyb3VwKSkuIik7Ci0KLVB5RG9jX1NUUlZBUihtYXRjaF9ncm91cHNfZG9jLAotImdyb3VwcyhbZGVmYXVsdD1Ob25lXSkgLT4gdHVwbGUuXG5cCi0gICAgUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyBhbGwgdGhlIHN1Ymdyb3VwcyBvZiB0aGUgbWF0Y2gsIGZyb20gMS5cblwKLSAgICBUaGUgZGVmYXVsdCBhcmd1bWVudCBpcyB1c2VkIGZvciBncm91cHNcblwKLSAgICB0aGF0IGRpZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoIik7Ci0KLVB5RG9jX1NUUlZBUihtYXRjaF9ncm91cGRpY3RfZG9jLAotImdyb3VwZGljdChbZGVmYXVsdD1Ob25lXSkgLT4gZGljdC5cblwKLSAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIHRoZSBuYW1lZCBzdWJncm91cHMgb2YgdGhlIG1hdGNoLFxuXAotICAgIGtleWVkIGJ5IHRoZSBzdWJncm91cCBuYW1lLiBUaGUgZGVmYXVsdCBhcmd1bWVudCBpcyB1c2VkIGZvciBncm91cHNcblwKLSAgICB0aGF0IGRpZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoIik7Ci0KLVB5RG9jX1NUUlZBUihtYXRjaF9leHBhbmRfZG9jLAotImV4cGFuZCh0ZW1wbGF0ZSkgLT4gc3RyLlxuXAotICAgIFJldHVybiB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IGRvaW5nIGJhY2tzbGFzaCBzdWJzdGl0dXRpb25cblwKLSAgICBvbiB0aGUgc3RyaW5nIHRlbXBsYXRlLCBhcyBkb25lIGJ5IHRoZSBzdWIoKSBtZXRob2QuIik7Ci0KLXN0YXRpYyBQeU1ldGhvZERlZiBtYXRjaF9tZXRob2RzW10gPSB7Ci0gICAgeyJncm91cCIsIChQeUNGdW5jdGlvbikgbWF0Y2hfZ3JvdXAsIE1FVEhfVkFSQVJHUywgbWF0Y2hfZ3JvdXBfZG9jfSwKLSAgICB7InN0YXJ0IiwgKFB5Q0Z1bmN0aW9uKSBtYXRjaF9zdGFydCwgTUVUSF9WQVJBUkdTLCBtYXRjaF9zdGFydF9kb2N9LAotICAgIHsiZW5kIiwgKFB5Q0Z1bmN0aW9uKSBtYXRjaF9lbmQsIE1FVEhfVkFSQVJHUywgbWF0Y2hfZW5kX2RvY30sCi0gICAgeyJzcGFuIiwgKFB5Q0Z1bmN0aW9uKSBtYXRjaF9zcGFuLCBNRVRIX1ZBUkFSR1MsIG1hdGNoX3NwYW5fZG9jfSwKLSAgICB7Imdyb3VwcyIsIChQeUNGdW5jdGlvbikgbWF0Y2hfZ3JvdXBzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgICAgbWF0Y2hfZ3JvdXBzX2RvY30sCi0gICAgeyJncm91cGRpY3QiLCAoUHlDRnVuY3Rpb24pIG1hdGNoX2dyb3VwZGljdCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgICAgIG1hdGNoX2dyb3VwZGljdF9kb2N9LAotICAgIHsiZXhwYW5kIiwgKFB5Q0Z1bmN0aW9uKSBtYXRjaF9leHBhbmQsIE1FVEhfTywgbWF0Y2hfZXhwYW5kX2RvY30sCi0gICAgeyJfX2NvcHlfXyIsIChQeUNGdW5jdGlvbikgbWF0Y2hfY29weSwgTUVUSF9OT0FSR1N9LAotICAgIHsiX19kZWVwY29weV9fIiwgKFB5Q0Z1bmN0aW9uKSBtYXRjaF9kZWVwY29weSwgTUVUSF9PfSwKLSAgICB7TlVMTCwgTlVMTH0KLX07Ci0KIHN0YXRpYyBQeU9iamVjdCAqCiBtYXRjaF9sYXN0aW5kZXhfZ2V0KE1hdGNoT2JqZWN0ICpzZWxmKQogewpAQCAtMjQzNiw1NyArMjQ3Nyw2IEBACiB9CiAKIAotc3RhdGljIFB5R2V0U2V0RGVmIG1hdGNoX2dldHNldFtdID0gewotICAgIHsibGFzdGluZGV4IiwgKGdldHRlciltYXRjaF9sYXN0aW5kZXhfZ2V0LCAoc2V0dGVyKU5VTEx9LAotICAgIHsibGFzdGdyb3VwIiwgKGdldHRlciltYXRjaF9sYXN0Z3JvdXBfZ2V0LCAoc2V0dGVyKU5VTEx9LAotICAgIHsicmVncyIsICAgICAgKGdldHRlciltYXRjaF9yZWdzX2dldCwgICAgICAoc2V0dGVyKU5VTEx9LAotICAgIHtOVUxMfQotfTsKLQotI2RlZmluZSBNQVRDSF9PRkYoeCkgb2Zmc2V0b2YoTWF0Y2hPYmplY3QsIHgpCi1zdGF0aWMgUHlNZW1iZXJEZWYgbWF0Y2hfbWVtYmVyc1tdID0gewotICAgIHsic3RyaW5nIiwgIFRfT0JKRUNULCAgIE1BVENIX09GRihzdHJpbmcpLCAgUkVBRE9OTFl9LAotICAgIHsicmUiLCAgICAgIFRfT0JKRUNULCAgIE1BVENIX09GRihwYXR0ZXJuKSwgUkVBRE9OTFl9LAotICAgIHsicG9zIiwgICAgIFRfUFlTU0laRVQsIE1BVENIX09GRihwb3MpLCAgICAgUkVBRE9OTFl9LAotICAgIHsiZW5kcG9zIiwgIFRfUFlTU0laRVQsIE1BVENIX09GRihlbmRwb3MpLCAgUkVBRE9OTFl9LAotICAgIHtOVUxMfQotfTsKLQotLyogRklYTUU6IGltcGxlbWVudCBzZXRhdHRyKCJzdHJpbmciLCBOb25lKSBhcyBhIHNwZWNpYWwgY2FzZSAodG8KLSAgIGRldGFjaCB0aGUgYXNzb2NpYXRlZCBzdHJpbmcsIGlmIGFueSAqLwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0IE1hdGNoX1R5cGUgPSB7Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsMCkKLSAgICAiXyIgU1JFX01PRFVMRSAiLlNSRV9NYXRjaCIsCi0gICAgc2l6ZW9mKE1hdGNoT2JqZWN0KSwgc2l6ZW9mKFB5X3NzaXplX3QpLAotICAgIChkZXN0cnVjdG9yKW1hdGNoX2RlYWxsb2MsICAvKiB0cF9kZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIChyZXByZnVuYyltYXRjaF9yZXByLCAgICAgICAvKiB0cF9yZXByICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgIC8qIHRwX2ZsYWdzICovCi0gICAgbWF0Y2hfZG9jLCAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgbWF0Y2hfbWV0aG9kcywgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICBtYXRjaF9tZW1iZXJzLCAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwotICAgIG1hdGNoX2dldHNldCwgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KLX07Ci0KIHN0YXRpYyBQeU9iamVjdCoKIHBhdHRlcm5fbmV3X21hdGNoKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFNSRV9TVEFURSogc3RhdGUsIFB5X3NzaXplX3Qgc3RhdHVzKQogewpAQCAtMjU2Miw4ICsyNTUyLDE0IEBACiAgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1zY2FubmVyX21hdGNoKFNjYW5uZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCisvKltjbGluaWMgaW5wdXRdCitfc3JlLlNSRV9TY2FubmVyLm1hdGNoCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1NjYW5uZXJfbWF0Y2hfaW1wbChTY2FubmVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTkzNmIzMGM2M2Q0YjgxZWIgaW5wdXQ9ODgxYTAxNTRmOGMxM2Q5YV0qLwogewogICAgIFNSRV9TVEFURSogc3RhdGUgPSAmc2VsZi0+c3RhdGU7CiAgICAgUHlPYmplY3QqIG1hdGNoOwpAQCAtMjU5Niw4ICsyNTkyLDE0IEBACiB9CiAKIAotc3RhdGljIFB5T2JqZWN0Kgotc2Nhbm5lcl9zZWFyY2goU2Nhbm5lck9iamVjdCogc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKKy8qW2NsaW5pYyBpbnB1dF0KK19zcmUuU1JFX1NjYW5uZXIuc2VhcmNoCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1NjYW5uZXJfc2VhcmNoX2ltcGwoU2Nhbm5lck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03ZGMyMTE5ODYwODhmMDI1IGlucHV0PTE2MTIyM2VlOTJlZjkyNzBdKi8KIHsKICAgICBTUkVfU1RBVEUqIHN0YXRlID0gJnNlbGYtPnN0YXRlOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKQEAgLTI2MjksOSArMjYzMSwxNjAgQEAKICAgICByZXR1cm4gbWF0Y2g7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitwYXR0ZXJuX3NjYW5uZXIoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZywgUHlfc3NpemVfdCBwb3MsIFB5X3NzaXplX3QgZW5kcG9zKQoreworICAgIFNjYW5uZXJPYmplY3QqIHNjYW5uZXI7CisKKyAgICAvKiBjcmVhdGUgc2Nhbm5lciBvYmplY3QgKi8KKyAgICBzY2FubmVyID0gUHlPYmplY3RfTkVXKFNjYW5uZXJPYmplY3QsICZTY2FubmVyX1R5cGUpOworICAgIGlmICghc2Nhbm5lcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc2Nhbm5lci0+cGF0dGVybiA9IE5VTEw7CisKKyAgICAvKiBjcmVhdGUgc2VhcmNoIHN0YXRlIG9iamVjdCAqLworICAgIGlmICghc3RhdGVfaW5pdCgmc2Nhbm5lci0+c3RhdGUsIHNlbGYsIHN0cmluZywgcG9zLCBlbmRwb3MpKSB7CisgICAgICAgIFB5X0RFQ1JFRihzY2FubmVyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHNjYW5uZXItPnBhdHRlcm4gPSAoUHlPYmplY3QqKSBzZWxmOworCisgICAgcmV0dXJuIChQeU9iamVjdCopIHNjYW5uZXI7Cit9CisKKyNpbmNsdWRlICJjbGluaWMvX3NyZS5jLmgiCisKK3N0YXRpYyBQeU1ldGhvZERlZiBwYXR0ZXJuX21ldGhvZHNbXSA9IHsKKyAgICBfU1JFX1NSRV9QQVRURVJOX01BVENIX01FVEhPRERFRgorICAgIF9TUkVfU1JFX1BBVFRFUk5fRlVMTE1BVENIX01FVEhPRERFRgorICAgIF9TUkVfU1JFX1BBVFRFUk5fU0VBUkNIX01FVEhPRERFRgorICAgIF9TUkVfU1JFX1BBVFRFUk5fU1VCX01FVEhPRERFRgorICAgIF9TUkVfU1JFX1BBVFRFUk5fU1VCTl9NRVRIT0RERUYKKyAgICBfU1JFX1NSRV9QQVRURVJOX0ZJTkRBTExfTUVUSE9EREVGCisgICAgX1NSRV9TUkVfUEFUVEVSTl9TUExJVF9NRVRIT0RERUYKKyAgICBfU1JFX1NSRV9QQVRURVJOX0ZJTkRJVEVSX01FVEhPRERFRgorICAgIF9TUkVfU1JFX1BBVFRFUk5fU0NBTk5FUl9NRVRIT0RERUYKKyAgICBfU1JFX1NSRV9QQVRURVJOX19fQ09QWV9fX01FVEhPRERFRgorICAgIF9TUkVfU1JFX1BBVFRFUk5fX19ERUVQQ09QWV9fX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5R2V0U2V0RGVmIHBhdHRlcm5fZ2V0c2V0W10gPSB7CisgICAgeyJncm91cGluZGV4IiwgKGdldHRlcilwYXR0ZXJuX2dyb3VwaW5kZXgsIChzZXR0ZXIpTlVMTCwKKyAgICAgICJBIGRpY3Rpb25hcnkgbWFwcGluZyBncm91cCBuYW1lcyB0byBncm91cCBudW1iZXJzLiJ9LAorICAgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307CisKKyNkZWZpbmUgUEFUX09GRih4KSBvZmZzZXRvZihQYXR0ZXJuT2JqZWN0LCB4KQorc3RhdGljIFB5TWVtYmVyRGVmIHBhdHRlcm5fbWVtYmVyc1tdID0geworICAgIHsicGF0dGVybiIsICAgIFRfT0JKRUNULCAgICBQQVRfT0ZGKHBhdHRlcm4pLCAgICAgICBSRUFET05MWX0sCisgICAgeyJmbGFncyIsICAgICAgVF9JTlQsICAgICAgIFBBVF9PRkYoZmxhZ3MpLCAgICAgICAgIFJFQURPTkxZfSwKKyAgICB7Imdyb3VwcyIsICAgICBUX1BZU1NJWkVULCAgUEFUX09GRihncm91cHMpLCAgICAgICAgUkVBRE9OTFl9LAorICAgIHtOVUxMfSAgLyogU2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgUGF0dGVybl9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfIiBTUkVfTU9EVUxFICIuU1JFX1BhdHRlcm4iLAorICAgIHNpemVvZihQYXR0ZXJuT2JqZWN0KSwgc2l6ZW9mKFNSRV9DT0RFKSwKKyAgICAoZGVzdHJ1Y3RvcilwYXR0ZXJuX2RlYWxsb2MsICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgKHJlcHJmdW5jKXBhdHRlcm5fcmVwciwgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgcGF0dGVybl9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgb2Zmc2V0b2YoUGF0dGVybk9iamVjdCwgd2Vha3JlZmxpc3QpLCAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIHBhdHRlcm5fbWV0aG9kcywgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBwYXR0ZXJuX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgcGF0dGVybl9nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCit9OworCisKK3N0YXRpYyBQeU1ldGhvZERlZiBtYXRjaF9tZXRob2RzW10gPSB7CisgICAgeyJncm91cCIsIChQeUNGdW5jdGlvbikgbWF0Y2hfZ3JvdXAsIE1FVEhfVkFSQVJHUywgbWF0Y2hfZ3JvdXBfZG9jfSwKKyAgICBfU1JFX1NSRV9NQVRDSF9TVEFSVF9NRVRIT0RERUYKKyAgICBfU1JFX1NSRV9NQVRDSF9FTkRfTUVUSE9EREVGCisgICAgX1NSRV9TUkVfTUFUQ0hfU1BBTl9NRVRIT0RERUYKKyAgICBfU1JFX1NSRV9NQVRDSF9HUk9VUFNfTUVUSE9EREVGCisgICAgX1NSRV9TUkVfTUFUQ0hfR1JPVVBESUNUX01FVEhPRERFRgorICAgIF9TUkVfU1JFX01BVENIX0VYUEFORF9NRVRIT0RERUYKKyAgICBfU1JFX1NSRV9NQVRDSF9fX0NPUFlfX19NRVRIT0RERUYKKyAgICBfU1JFX1NSRV9NQVRDSF9fX0RFRVBDT1BZX19fTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgbWF0Y2hfZ2V0c2V0W10gPSB7CisgICAgeyJsYXN0aW5kZXgiLCAoZ2V0dGVyKW1hdGNoX2xhc3RpbmRleF9nZXQsIChzZXR0ZXIpTlVMTH0sCisgICAgeyJsYXN0Z3JvdXAiLCAoZ2V0dGVyKW1hdGNoX2xhc3Rncm91cF9nZXQsIChzZXR0ZXIpTlVMTH0sCisgICAgeyJyZWdzIiwgICAgICAoZ2V0dGVyKW1hdGNoX3JlZ3NfZ2V0LCAgICAgIChzZXR0ZXIpTlVMTH0sCisgICAge05VTEx9Cit9OworCisjZGVmaW5lIE1BVENIX09GRih4KSBvZmZzZXRvZihNYXRjaE9iamVjdCwgeCkKK3N0YXRpYyBQeU1lbWJlckRlZiBtYXRjaF9tZW1iZXJzW10gPSB7CisgICAgeyJzdHJpbmciLCAgVF9PQkpFQ1QsICAgTUFUQ0hfT0ZGKHN0cmluZyksICBSRUFET05MWX0sCisgICAgeyJyZSIsICAgICAgVF9PQkpFQ1QsICAgTUFUQ0hfT0ZGKHBhdHRlcm4pLCBSRUFET05MWX0sCisgICAgeyJwb3MiLCAgICAgVF9QWVNTSVpFVCwgTUFUQ0hfT0ZGKHBvcyksICAgICBSRUFET05MWX0sCisgICAgeyJlbmRwb3MiLCAgVF9QWVNTSVpFVCwgTUFUQ0hfT0ZGKGVuZHBvcyksICBSRUFET05MWX0sCisgICAge05VTEx9Cit9OworCisvKiBGSVhNRTogaW1wbGVtZW50IHNldGF0dHIoInN0cmluZyIsIE5vbmUpIGFzIGEgc3BlY2lhbCBjYXNlICh0bworICAgZGV0YWNoIHRoZSBhc3NvY2lhdGVkIHN0cmluZywgaWYgYW55ICovCisKK3N0YXRpYyBQeVR5cGVPYmplY3QgTWF0Y2hfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwwKQorICAgICJfIiBTUkVfTU9EVUxFICIuU1JFX01hdGNoIiwKKyAgICBzaXplb2YoTWF0Y2hPYmplY3QpLCBzaXplb2YoUHlfc3NpemVfdCksCisgICAgKGRlc3RydWN0b3IpbWF0Y2hfZGVhbGxvYywgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgKHJlcHJmdW5jKW1hdGNoX3JlcHIsICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICBtYXRjaF9kb2MsICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBtYXRjaF9tZXRob2RzLCAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIG1hdGNoX21lbWJlcnMsICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgbWF0Y2hfZ2V0c2V0LCAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworfTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIHNjYW5uZXJfbWV0aG9kc1tdID0gewotICAgIHsibWF0Y2giLCAoUHlDRnVuY3Rpb24pIHNjYW5uZXJfbWF0Y2gsIE1FVEhfTk9BUkdTfSwKLSAgICB7InNlYXJjaCIsIChQeUNGdW5jdGlvbikgc2Nhbm5lcl9zZWFyY2gsIE1FVEhfTk9BUkdTfSwKKyAgICBfU1JFX1NSRV9TQ0FOTkVSX01BVENIX01FVEhPRERFRgorICAgIF9TUkVfU1JFX1NDQU5ORVJfU0VBUkNIX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfQogfTsKIApAQCAtMjY3Myw0NyArMjgyNiwxMCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fc2Nhbm5lcihQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQotewotICAgIC8qIGNyZWF0ZSBzZWFyY2ggc3RhdGUgb2JqZWN0ICovCi0KLSAgICBTY2FubmVyT2JqZWN0KiBzZWxmOwotCi0gICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEwsICpzdHJpbmcyID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKLSAgICBQeV9zc2l6ZV90IGVuZCA9IFBZX1NTSVpFX1RfTUFYOwotICAgIHN0YXRpYyBjaGFyKiBrd2xpc3RbXSA9IHsgInN0cmluZyIsICJwb3MiLCAiZW5kcG9zIiwgInNvdXJjZSIsIE5VTEwgfTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPbm4kTzpzY2FubmVyIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJpbmcsICZzdGFydCwgJmVuZCwgJnN0cmluZzIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHN0cmluZyA9IGZpeF9zdHJpbmdfcGFyYW0oc3RyaW5nLCBzdHJpbmcyLCAic291cmNlIik7Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogY3JlYXRlIHNjYW5uZXIgb2JqZWN0ICovCi0gICAgc2VsZiA9IFB5T2JqZWN0X05FVyhTY2FubmVyT2JqZWN0LCAmU2Nhbm5lcl9UeXBlKTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHNlbGYtPnBhdHRlcm4gPSBOVUxMOwotCi0gICAgc3RyaW5nID0gc3RhdGVfaW5pdCgmc2VsZi0+c3RhdGUsIHBhdHRlcm4sIHN0cmluZywgc3RhcnQsIGVuZCk7Ci0gICAgaWYgKCFzdHJpbmcpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBQeV9JTkNSRUYocGF0dGVybik7Ci0gICAgc2VsZi0+cGF0dGVybiA9IChQeU9iamVjdCopIHBhdHRlcm47Ci0KLSAgICByZXR1cm4gKFB5T2JqZWN0Kikgc2VsZjsKLX0KLQogc3RhdGljIFB5TWV0aG9kRGVmIF9mdW5jdGlvbnNbXSA9IHsKLSAgICB7ImNvbXBpbGUiLCBfY29tcGlsZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImdldGNvZGVzaXplIiwgc3JlX2NvZGVzaXplLCBNRVRIX05PQVJHU30sCi0gICAgeyJnZXRsb3dlciIsIHNyZV9nZXRsb3dlciwgTUVUSF9WQVJBUkdTfSwKKyAgICBfU1JFX0NPTVBJTEVfTUVUSE9EREVGCisgICAgX1NSRV9HRVRDT0RFU0laRV9NRVRIT0RERUYKKyAgICBfU1JFX0dFVExPV0VSX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfQogfTsKIApAQCAtMjc2Myw2ICsyODc5LDEyIEBACiAgICAgICAgIFB5X0RFQ1JFRih4KTsKICAgICB9CiAKKyAgICB4ID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoU1JFX01BWEdST1VQUyk7CisgICAgaWYgKHgpIHsKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIk1BWEdST1VQUyIsIHgpOworICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgfQorCiAgICAgeCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGNvcHlyaWdodCk7CiAgICAgaWYgKHgpIHsKICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgImNvcHlyaWdodCIsIHgpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3NsLmMgYi9Nb2R1bGVzL19zc2wuYwppbmRleCAwMjk3MWE3Li5jMjFjMGY4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zc2wuYworKysgYi9Nb2R1bGVzL19zc2wuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCiAjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKICNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKKyNpbmNsdWRlICJvcGVuc3NsL2Jpby5oIgogCiAvKiBTU0wgZXJyb3Igb2JqZWN0ICovCiBzdGF0aWMgUHlPYmplY3QgKlB5U1NMRXJyb3JPYmplY3Q7CkBAIC0xMDgsNiArMTA5LDE0IEBACiAjIGRlZmluZSBIQVZFX1NOSSAwCiAjZW5kaWYKIAorI2lmZGVmIFRMU0VYVF9UWVBFX2FwcGxpY2F0aW9uX2xheWVyX3Byb3RvY29sX25lZ290aWF0aW9uCisjIGRlZmluZSBIQVZFX0FMUE4KKyNlbmRpZgorCisjaWZuZGVmIElOVkFMSURfU09DS0VUIC8qIE1TIGRlZmluZXMgdGhpcyAqLworI2RlZmluZSBJTlZBTElEX1NPQ0tFVCAoLTEpCisjZW5kaWYKKwogZW51bSBweV9zc2xfZXJyb3IgewogICAgIC8qIHRoZXNlIG1pcnJvciBzc2wuaCAqLwogICAgIFBZX1NTTF9FUlJPUl9OT05FLApAQCAtMTYxLDEzICsxNzAsNiBAQAogCiAjZGVmaW5lIFg1MDlfTkFNRV9NQVhMRU4gMjU2CiAKLS8qIFJBTkRfKiBBUElzIGdvdCBhZGRlZCB0byBPcGVuU1NMIGluIDAuOS41ICovCi0jaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA1MDBmTAotIyBkZWZpbmUgSEFWRV9PUEVOU1NMX1JBTkQgMQotI2Vsc2UKLSMgdW5kZWYgSEFWRV9PUEVOU1NMX1JBTkQKLSNlbmRpZgotCiAvKiBTU0xfQ1RYX2NsZWFyX29wdGlvbnMoKSBhbmQgU1NMX2NsZWFyX29wdGlvbnMoKSB3ZXJlIGZpcnN0IGFkZGVkIGluCiAgKiBPcGVuU1NMIDAuOS44bSBidXQgZG8gbm90IGFwcGVhciBpbiBzb21lIDAuOS45LWRldiB2ZXJzaW9ucyBzdWNoIHRoZQogICogMC45LjkgZnJvbSAiTWF5IDIwMDgiIHRoYXQgTmV0QlNEIDUuMCB1c2VzLiAqLwpAQCAtMTgxLDM2ICsxODMsMTggQEAKICAqIG9sZGVyIFNTTCwgYnV0IGxldCdzIGJlIHNhZmUgKi8KICNkZWZpbmUgUHlTU0xfQ0JfTUFYTEVOIDEyOAogCi0vKiBTU0xfZ2V0X2ZpbmlzaGVkIGdvdCBhZGRlZCB0byBPcGVuU1NMIGluIDAuOS41ICovCi0jaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA1MDBmTAotIyBkZWZpbmUgSEFWRV9PUEVOU1NMX0ZJTklTSEVEIDEKLSNlbHNlCi0jIGRlZmluZSBIQVZFX09QRU5TU0xfRklOSVNIRUQgMAotI2VuZGlmCi0KLS8qIEVDREggc3VwcG9ydCBnb3QgYWRkZWQgdG8gT3BlblNTTCBpbiAwLjkuOCAqLwotI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDAwOTA4MDBmTCAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0VDREgpCi0jIGRlZmluZSBPUEVOU1NMX05PX0VDREgKLSNlbmRpZgotCi0vKiBjb21wcmVzc2lvbiBzdXBwb3J0IGdvdCBhZGRlZCB0byBPcGVuU1NMIGluIDAuOS44ICovCi0jaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MDA5MDgwMGZMICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQ09NUCkKLSMgZGVmaW5lIE9QRU5TU0xfTk9fQ09NUAotI2VuZGlmCi0KLS8qIFg1MDlfVkVSSUZZX1BBUkFNIGdvdCBhZGRlZCB0byBPcGVuU1NMIGluIDAuOS44ICovCi0jaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA4MDBmTAotIyBkZWZpbmUgSEFWRV9PUEVOU1NMX1ZFUklGWV9QQVJBTQotI2VuZGlmCi0KIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBTU0xfQ1RYICpjdHg7CiAjaWZkZWYgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAotICAgIGNoYXIgKm5wbl9wcm90b2NvbHM7CisgICAgdW5zaWduZWQgY2hhciAqbnBuX3Byb3RvY29sczsKICAgICBpbnQgbnBuX3Byb3RvY29sc19sZW47CiAjZW5kaWYKKyNpZmRlZiBIQVZFX0FMUE4KKyAgICB1bnNpZ25lZCBjaGFyICphbHBuX3Byb3RvY29sczsKKyAgICBpbnQgYWxwbl9wcm90b2NvbHNfbGVuOworI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAgICAgUHlPYmplY3QgKnNldF9ob3N0bmFtZTsKICNlbmRpZgpAQCAtMjI2LDIwICsyMTAsMzUgQEAKICAgICBjaGFyIHNodXRkb3duX3NlZW5femVybzsKICAgICBjaGFyIGhhbmRzaGFrZV9kb25lOwogICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGU7CisgICAgUHlPYmplY3QgKm93bmVyOyAvKiBQeXRob24gbGV2ZWwgIm93bmVyIiBwYXNzZWQgdG8gc2VydmVybmFtZSBjYWxsYmFjayAqLworICAgIFB5T2JqZWN0ICpzZXJ2ZXJfaG9zdG5hbWU7CiB9IFB5U1NMU29ja2V0OwogCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIEJJTyAqYmlvOworICAgIGludCBlb2Zfd3JpdHRlbjsKK30gUHlTU0xNZW1vcnlCSU87CisKIHN0YXRpYyBQeVR5cGVPYmplY3QgUHlTU0xDb250ZXh0X1R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5U1NMU29ja2V0X1R5cGU7CitzdGF0aWMgUHlUeXBlT2JqZWN0IFB5U1NMTWVtb3J5QklPX1R5cGU7CiAKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xfU1NMd3JpdGUoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xfU1NMcmVhZChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwotc3RhdGljIGludCBjaGVja19zb2NrZXRfYW5kX3dhaXRfZm9yX3RpbWVvdXQoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdyaXRpbmcpOwotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9wZWVyY2VydChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9jaXBoZXIoUHlTU0xTb2NrZXQgKnNlbGYpOworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9zc2wKK2NsYXNzIF9zc2wuX1NTTENvbnRleHQgIlB5U1NMQ29udGV4dCAqIiAiJlB5U1NMQ29udGV4dF9UeXBlIgorY2xhc3MgX3NzbC5fU1NMU29ja2V0ICJQeVNTTFNvY2tldCAqIiAiJlB5U1NMU29ja2V0X1R5cGUiCitjbGFzcyBfc3NsLk1lbW9yeUJJTyAiUHlTU0xNZW1vcnlCSU8gKiIgIiZQeVNTTE1lbW9yeUJJT19UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9N2JmN2NiODMyNjM4ZTJlMV0qLworCisjaW5jbHVkZSAiY2xpbmljL19zc2wuYy5oIgorCitzdGF0aWMgaW50IFB5U1NMX3NlbGVjdChQeVNvY2tldFNvY2tPYmplY3QgKnMsIGludCB3cml0aW5nLCBfUHlUaW1lX3QgdGltZW91dCk7CiAKICNkZWZpbmUgUHlTU0xDb250ZXh0X0NoZWNrKHYpICAgKFB5X1RZUEUodikgPT0gJlB5U1NMQ29udGV4dF9UeXBlKQogI2RlZmluZSBQeVNTTFNvY2tldF9DaGVjayh2KSAgICAoUHlfVFlQRSh2KSA9PSAmUHlTU0xTb2NrZXRfVHlwZSkKKyNkZWZpbmUgUHlTU0xNZW1vcnlCSU9fQ2hlY2sodikgICAgKFB5X1RZUEUodikgPT0gJlB5U1NMTWVtb3J5QklPX1R5cGUpCiAKIHR5cGVkZWYgZW51bSB7CiAgICAgU09DS0VUX0lTX05PTkJMT0NLSU5HLApAQCAtMjUxLDExICsyNTAsMTYgQEAKIH0gdGltZW91dF9zdGF0ZTsKIAogLyogV3JhcCBlcnJvciBzdHJpbmdzIHdpdGggZmlsZW5hbWUgYW5kIGxpbmUgIyAqLwotI2RlZmluZSBTVFJJTkdJRlkxKHgpICN4Ci0jZGVmaW5lIFNUUklOR0lGWTIoeCkgU1RSSU5HSUZZMSh4KQogI2RlZmluZSBFUlJTVFIxKHgseSx6KSAoeCAiOiIgeSAiOiAiIHopCi0jZGVmaW5lIEVSUlNUUih4KSBFUlJTVFIxKCJfc3NsLmMiLCBTVFJJTkdJRlkyKF9fTElORV9fKSwgeCkKKyNkZWZpbmUgRVJSU1RSKHgpIEVSUlNUUjEoIl9zc2wuYyIsIFB5X1NUUklOR0lGWShfX0xJTkVfXyksIHgpCiAKKy8qIEdldCB0aGUgc29ja2V0IGZyb20gYSBQeVNTTFNvY2tldCwgaWYgaXQgaGFzIG9uZSAqLworI2RlZmluZSBHRVRfU09DS0VUKG9iaikgKChvYmopLT5Tb2NrZXQgPyBcCisgICAgKFB5U29ja2V0U29ja09iamVjdCAqKSBQeVdlYWtyZWZfR2V0T2JqZWN0KChvYmopLT5Tb2NrZXQpIDogTlVMTCkKKworLyogSWYgc29jayBpcyBOVUxMLCB1c2UgYSB0aW1lb3V0IG9mIDAgc2Vjb25kICovCisjZGVmaW5lIEdFVF9TT0NLRVRfVElNRU9VVChzb2NrKSBcCisgICAgKChzb2NrICE9IE5VTEwpID8gKHNvY2spLT5zb2NrX3RpbWVvdXQgOiAwKQogCiAvKgogICogU1NMIGVycm9ycy4KQEAgLTQxOSwxMyArNDIzLDEyIEBACiAgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChlID09IDApIHsKLSAgICAgICAgICAgICAgICBQeVNvY2tldFNvY2tPYmplY3QgKnMKLSAgICAgICAgICAgICAgICAgID0gKFB5U29ja2V0U29ja09iamVjdCAqKSBQeVdlYWtyZWZfR2V0T2JqZWN0KG9iai0+U29ja2V0KTsKKyAgICAgICAgICAgICAgICBQeVNvY2tldFNvY2tPYmplY3QgKnMgPSBHRVRfU09DS0VUKG9iaik7CiAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwIHx8ICgoKFB5T2JqZWN0ICopcykgPT0gUHlfTm9uZSkpIHsKICAgICAgICAgICAgICAgICAgICAgcCA9IFBZX1NTTF9FUlJPUl9FT0Y7CiAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBQeVNTTEVPRkVycm9yT2JqZWN0OwogICAgICAgICAgICAgICAgICAgICBlcnJzdHIgPSAiRU9GIG9jY3VycmVkIGluIHZpb2xhdGlvbiBvZiBwcm90b2NvbCI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMgJiYgcmV0ID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIHVuZGVybHlpbmcgQklPIHJlcG9ydGVkIGFuIEkvTyBlcnJvciAqLwogICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYocyk7CiAgICAgICAgICAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOwpAQCAtNDc5LDEwICs0ODIsMTIgQEAKIHN0YXRpYyBQeVNTTFNvY2tldCAqCiBuZXdQeVNTTFNvY2tldChQeVNTTENvbnRleHQgKnNzbGN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAogICAgICAgICAgICAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZSwKLSAgICAgICAgICAgICAgIGNoYXIgKnNlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgICAgICAgIGNoYXIgKnNlcnZlcl9ob3N0bmFtZSwKKyAgICAgICAgICAgICAgIFB5U1NMTWVtb3J5QklPICppbmJpbywgUHlTU0xNZW1vcnlCSU8gKm91dGJpbykKIHsKICAgICBQeVNTTFNvY2tldCAqc2VsZjsKICAgICBTU0xfQ1RYICpjdHggPSBzc2xjdHgtPmN0eDsKKyAgICBQeU9iamVjdCAqaG9zdG5hbWU7CiAgICAgbG9uZyBtb2RlOwogCiAgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVNTTFNvY2tldCwgJlB5U1NMU29ja2V0X1R5cGUpOwpAQCAtNDk1LDYgKzUwMCwxOCBAQAogICAgIHNlbGYtPmN0eCA9IHNzbGN0eDsKICAgICBzZWxmLT5zaHV0ZG93bl9zZWVuX3plcm8gPSAwOwogICAgIHNlbGYtPmhhbmRzaGFrZV9kb25lID0gMDsKKyAgICBzZWxmLT5vd25lciA9IE5VTEw7CisgICAgaWYgKHNlcnZlcl9ob3N0bmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGhvc3RuYW1lID0gUHlVbmljb2RlX0RlY29kZShzZXJ2ZXJfaG9zdG5hbWUsIHN0cmxlbihzZXJ2ZXJfaG9zdG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWRuYSIsICJzdHJpY3QiKTsKKyAgICAgICAgaWYgKGhvc3RuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHNlbGYtPnNlcnZlcl9ob3N0bmFtZSA9IGhvc3RuYW1lOworICAgIH0gZWxzZQorICAgICAgICBzZWxmLT5zZXJ2ZXJfaG9zdG5hbWUgPSBOVUxMOworCiAgICAgUHlfSU5DUkVGKHNzbGN0eCk7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhlIFNTTCBlcnJvciBzdGF0ZSBpcyBpbml0aWFsaXplZCAqLwpAQCAtNTA0LDggKzUyMSwxNyBAQAogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzZWxmLT5zc2wgPSBTU0xfbmV3KGN0eCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBTU0xfc2V0X2FwcF9kYXRhKHNlbGYtPnNzbCxzZWxmKTsKLSAgICBTU0xfc2V0X2ZkKHNlbGYtPnNzbCwgUHlfU0FGRV9ET1dOQ0FTVChzb2NrLT5zb2NrX2ZkLCBTT0NLRVRfVCwgaW50KSk7CisgICAgU1NMX3NldF9hcHBfZGF0YShzZWxmLT5zc2wsIHNlbGYpOworICAgIGlmIChzb2NrKSB7CisgICAgICAgIFNTTF9zZXRfZmQoc2VsZi0+c3NsLCBQeV9TQUZFX0RPV05DQVNUKHNvY2stPnNvY2tfZmQsIFNPQ0tFVF9ULCBpbnQpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBCSU9zIGFyZSByZWZlcmVuY2UgY291bnRlZCBhbmQgU1NMX3NldF9iaW8gYm9ycm93cyBvdXIgcmVmZXJlbmNlLgorICAgICAgICAgKiBUbyBwcmV2ZW50IGEgZG91YmxlIGZyZWUgaW4gbWVtb3J5X2Jpb19kZWFsbG9jKCkgd2UgbmVlZCB0byB0YWtlIGFuCisgICAgICAgICAqIGV4dHJhIHJlZmVyZW5jZSBoZXJlLiAqLworICAgICAgICBDUllQVE9fYWRkKCZpbmJpby0+YmlvLT5yZWZlcmVuY2VzLCAxLCBDUllQVE9fTE9DS19CSU8pOworICAgICAgICBDUllQVE9fYWRkKCZvdXRiaW8tPmJpby0+cmVmZXJlbmNlcywgMSwgQ1JZUFRPX0xPQ0tfQklPKTsKKyAgICAgICAgU1NMX3NldF9iaW8oc2VsZi0+c3NsLCBpbmJpby0+YmlvLCBvdXRiaW8tPmJpbyk7CisgICAgfQogICAgIG1vZGUgPSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUjsKICNpZmRlZiBTU0xfTU9ERV9BVVRPX1JFVFJZCiAgICAgbW9kZSB8PSBTU0xfTU9ERV9BVVRPX1JFVFJZOwpAQCAtNTIwLDcgKzU0Niw3IEBACiAgICAgLyogSWYgdGhlIHNvY2tldCBpcyBpbiBub24tYmxvY2tpbmcgbW9kZSBvciB0aW1lb3V0IG1vZGUsIHNldCB0aGUgQklPCiAgICAgICogdG8gbm9uLWJsb2NraW5nIG1vZGUgKGJsb2NraW5nIGlzIHRoZSBkZWZhdWx0KQogICAgICAqLwotICAgIGlmIChzb2NrLT5zb2NrX3RpbWVvdXQgPj0gMC4wKSB7CisgICAgaWYgKHNvY2sgJiYgc29jay0+c29ja190aW1lb3V0ID49IDApIHsKICAgICAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfcmJpbyhzZWxmLT5zc2wpLCAxKTsKICAgICAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfd2JpbyhzZWxmLT5zc2wpLCAxKTsKICAgICB9CkBAIC01MzMsMzUgKzU1OSw1MiBAQAogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCiAKICAgICBzZWxmLT5zb2NrZXRfdHlwZSA9IHNvY2tldF90eXBlOwotICAgIHNlbGYtPlNvY2tldCA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIHNvY2ssIE5VTEwpOwotICAgIGlmIChzZWxmLT5Tb2NrZXQgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzb2NrICE9IE5VTEwpIHsKKyAgICAgICAgc2VsZi0+U29ja2V0ID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc29jaywgTlVMTCk7CisgICAgICAgIGlmIChzZWxmLT5Tb2NrZXQgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgUHlfWERFQ1JFRihzZWxmLT5zZXJ2ZXJfaG9zdG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKIC8qIFNTTCBvYmplY3QgbWV0aG9kcyAqLwogCi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTGRvX2hhbmRzaGFrZShQeVNTTFNvY2tldCAqc2VsZikKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTFNvY2tldC5kb19oYW5kc2hha2UKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9kb19oYW5kc2hha2VfaW1wbChQeVNTTFNvY2tldCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02YzA4OThhODkzNjU0OGY2IGlucHV0PWQyZDczN2RlM2RmMDE4YzhdKi8KIHsKICAgICBpbnQgcmV0OwogICAgIGludCBlcnI7CiAgICAgaW50IHNvY2tzdGF0ZSwgbm9uYmxvY2tpbmc7Ci0gICAgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrCi0gICAgICA9IChQeVNvY2tldFNvY2tPYmplY3QgKikgUHlXZWFrcmVmX0dldE9iamVjdChzZWxmLT5Tb2NrZXQpOworICAgIFB5U29ja2V0U29ja09iamVjdCAqc29jayA9IEdFVF9TT0NLRVQoc2VsZik7CisgICAgX1B5VGltZV90IHRpbWVvdXQsIGRlYWRsaW5lID0gMDsKKyAgICBpbnQgaGFzX3RpbWVvdXQ7CiAKLSAgICBpZiAoKChQeU9iamVjdCopc29jaykgPT0gUHlfTm9uZSkgewotICAgICAgICBfc2V0U1NMRXJyb3IoIlVuZGVybHlpbmcgc29ja2V0IGNvbm5lY3Rpb24gZ29uZSIsCi0gICAgICAgICAgICAgICAgICAgICBQWV9TU0xfRVJST1JfTk9fU09DS0VULCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc29jaykgeworICAgICAgICBpZiAoKChQeU9iamVjdCopc29jaykgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgX3NldFNTTEVycm9yKCJVbmRlcmx5aW5nIHNvY2tldCBjb25uZWN0aW9uIGdvbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9FUlJPUl9OT19TT0NLRVQsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoc29jayk7CisKKyAgICAgICAgLyoganVzdCBpbiBjYXNlIHRoZSBibG9ja2luZyBzdGF0ZSBvZiB0aGUgc29ja2V0IGhhcyBiZWVuIGNoYW5nZWQgKi8KKyAgICAgICAgbm9uYmxvY2tpbmcgPSAoc29jay0+c29ja190aW1lb3V0ID49IDApOworICAgICAgICBCSU9fc2V0X25iaW8oU1NMX2dldF9yYmlvKHNlbGYtPnNzbCksIG5vbmJsb2NraW5nKTsKKyAgICAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfd2JpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7CiAgICAgfQotICAgIFB5X0lOQ1JFRihzb2NrKTsKIAotICAgIC8qIGp1c3QgaW4gY2FzZSB0aGUgYmxvY2tpbmcgc3RhdGUgb2YgdGhlIHNvY2tldCBoYXMgYmVlbiBjaGFuZ2VkICovCi0gICAgbm9uYmxvY2tpbmcgPSAoc29jay0+c29ja190aW1lb3V0ID49IDAuMCk7Ci0gICAgQklPX3NldF9uYmlvKFNTTF9nZXRfcmJpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7Ci0gICAgQklPX3NldF9uYmlvKFNTTF9nZXRfd2JpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7CisgICAgdGltZW91dCA9IEdFVF9TT0NLRVRfVElNRU9VVChzb2NrKTsKKyAgICBoYXNfdGltZW91dCA9ICh0aW1lb3V0ID4gMCk7CisgICAgaWYgKGhhc190aW1lb3V0KQorICAgICAgICBkZWFkbGluZSA9IF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKSArIHRpbWVvdXQ7CiAKICAgICAvKiBBY3R1YWxseSBuZWdvdGlhdGUgU1NMIGNvbm5lY3Rpb24gKi8KICAgICAvKiBYWFggSWYgU1NMX2RvX2hhbmRzaGFrZSgpIHJldHVybnMgMCwgaXQncyBhbHNvIGEgZmFpbHVyZS4gKi8KQEAgLTU3MCwxNSArNjEzLDIxIEBACiAgICAgICAgIHJldCA9IFNTTF9kb19oYW5kc2hha2Uoc2VsZi0+c3NsKTsKICAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihzZWxmLT5zc2wsIHJldCk7CiAgICAgICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisKICAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoaGFzX3RpbWVvdXQpCisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCk7CisKICAgICAgICAgaWYgKGVyciA9PSBTU0xfRVJST1JfV0FOVF9SRUFEKSB7Ci0gICAgICAgICAgICBzb2Nrc3RhdGUgPSBjaGVja19zb2NrZXRfYW5kX3dhaXRfZm9yX3RpbWVvdXQoc29jaywgMCk7CisgICAgICAgICAgICBzb2Nrc3RhdGUgPSBQeVNTTF9zZWxlY3Qoc29jaywgMCwgdGltZW91dCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZXJyID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7Ci0gICAgICAgICAgICBzb2Nrc3RhdGUgPSBjaGVja19zb2NrZXRfYW5kX3dhaXRfZm9yX3RpbWVvdXQoc29jaywgMSk7CisgICAgICAgICAgICBzb2Nrc3RhdGUgPSBQeVNTTF9zZWxlY3Qoc29jaywgMSwgdGltZW91dCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzb2Nrc3RhdGUgPSBTT0NLRVRfT1BFUkFUSU9OX09LOwogICAgICAgICB9CisKICAgICAgICAgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX1RJTUVEX09VVCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U29ja2V0TW9kdWxlLnRpbWVvdXRfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSU1RSKCJUaGUgaGFuZHNoYWtlIG9wZXJhdGlvbiB0aW1lZCBvdXQiKSk7CkBAIC01OTUsNyArNjQ0LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoZXJyID09IFNTTF9FUlJPUl9XQU5UX1JFQUQgfHwgZXJyID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFKTsKLSAgICBQeV9ERUNSRUYoc29jayk7CisgICAgUHlfWERFQ1JFRihzb2NrKTsKICAgICBpZiAocmV0IDwgMSkKICAgICAgICAgcmV0dXJuIFB5U1NMX1NldEVycm9yKHNlbGYsIHJldCwgX19GSUxFX18sIF9fTElORV9fKTsKIApAQCAtNjEwLDcgKzY1OSw3IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiAKIGVycm9yOgotICAgIFB5X0RFQ1JFRihzb2NrKTsKKyAgICBQeV9YREVDUkVGKHNvY2spOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC03NzksMTIgKzgyOCw3IEBACiAgICAgY2hhciBidWZbMjA0OF07CiAgICAgY2hhciAqdnB0cjsKICAgICBpbnQgbGVuOwotICAgIC8qIElzc3VlICMyOTczOiBBU04xX2l0ZW1fZDJpKCkgQVBJIGNoYW5nZWQgaW4gT3BlblNTTCAwLjkuNm0gKi8KLSNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDYwZGZMCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcDsKLSNlbHNlCi0gICAgdW5zaWduZWQgY2hhciAqcDsKLSNlbmRpZgogCiAgICAgaWYgKGNlcnRpZmljYXRlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBwZWVyX2FsdF9uYW1lczsKQEAgLTEyNzMsMjUgKzEzMTcsMjggQEAKICAgICByZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotUHlTU0xfdGVzdF9kZWNvZGVfY2VydGlmaWNhdGUgKFB5T2JqZWN0ICptb2QsIFB5T2JqZWN0ICphcmdzKSB7CisvKltjbGluaWMgaW5wdXRdCitfc3NsLl90ZXN0X2RlY29kZV9jZXJ0CisgICAgcGF0aDogb2JqZWN0KGNvbnZlcnRlcj0iUHlVbmljb2RlX0ZTQ29udmVydGVyIikKKyAgICAvCiAKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX3Rlc3RfZGVjb2RlX2NlcnRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcGF0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05NmJlY2I5YWJiMjNjMDkxIGlucHV0PWNkZWFhZjAyZDQzNDY2MjhdKi8KK3sKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgWDUwOSAqeD1OVUxMOwogICAgIEJJTyAqY2VydDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6dGVzdF9kZWNvZGVfY2VydGlmaWNhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZmaWxlbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgaWYgKChjZXJ0PUJJT19uZXcoQklPX3NfZmlsZSgpKSkgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBtYWxsb2MgbWVtb3J5IHRvIHJlYWQgZmlsZSIpOwogICAgICAgICBnb3RvIGZhaWwwOwogICAgIH0KIAotICAgIGlmIChCSU9fcmVhZF9maWxlbmFtZShjZXJ0LCBQeUJ5dGVzX0FzU3RyaW5nKGZpbGVuYW1lKSkgPD0gMCkgeworICAgIGlmIChCSU9fcmVhZF9maWxlbmFtZShjZXJ0LCBQeUJ5dGVzX0FzU3RyaW5nKHBhdGgpKSA8PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IG9wZW4gZmlsZSIpOwogICAgICAgICBnb3RvIGZhaWwwOwpAQCAtMTMwOCwyMCArMTM1NSwzMyBAQAogICAgIFg1MDlfZnJlZSh4KTsKIAogICBmYWlsMDoKLSAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIFB5X0RFQ1JFRihwYXRoKTsKICAgICBpZiAoY2VydCAhPSBOVUxMKSBCSU9fZnJlZShjZXJ0KTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTFNvY2tldC5wZWVyX2NlcnRpZmljYXRlCisgICAgZGVyIGFzIGJpbmFyeV9tb2RlOiBib29sID0gRmFsc2UKKyAgICAvCisKK1JldHVybnMgdGhlIGNlcnRpZmljYXRlIGZvciB0aGUgcGVlci4KKworSWYgbm8gY2VydGlmaWNhdGUgd2FzIHByb3ZpZGVkLCByZXR1cm5zIE5vbmUuICBJZiBhIGNlcnRpZmljYXRlIHdhcworcHJvdmlkZWQsIGJ1dCBub3QgdmFsaWRhdGVkLCByZXR1cm5zIGFuIGVtcHR5IGRpY3Rpb25hcnkuICBPdGhlcndpc2UKK3JldHVybnMgYSBkaWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlZXIgY2VydGlmaWNhdGUuCisKK0lmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBpcyBUcnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUKK3BlZXIgY2VydGlmaWNhdGUsIG9yIE5vbmUgaWYgbm8gY2VydGlmaWNhdGUgd2FzIHByb3ZpZGVkLiAgVGhpcyB3aWxsCityZXR1cm4gdGhlIGNlcnRpZmljYXRlIGV2ZW4gaWYgaXQgd2Fzbid0IHZhbGlkYXRlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVB5U1NMX3BlZXJjZXJ0KFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19zc2xfX1NTTFNvY2tldF9wZWVyX2NlcnRpZmljYXRlX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYsIGludCBiaW5hcnlfbW9kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mMGRjM2U0ZDFkODE4YTFkIGlucHV0PTgyODFiZDFkMTkzZGI4NDNdKi8KIHsKICAgICBpbnQgdmVyaWZpY2F0aW9uOwotICAgIGludCBiaW5hcnlfbW9kZSA9IDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxwOnBlZXJfY2VydGlmaWNhdGUiLCAmYmluYXJ5X21vZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghc2VsZi0+aGFuZHNoYWtlX2RvbmUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC0xMzQzLDY4ICsxNDAzLDEyMyBAQAogICAgIH0KIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX3BlZXJjZXJ0X2RvYywKLSJwZWVyX2NlcnRpZmljYXRlKFtkZXI9RmFsc2VdKSAtPiBjZXJ0aWZpY2F0ZVxuXAotXG5cCi1SZXR1cm5zIHRoZSBjZXJ0aWZpY2F0ZSBmb3IgdGhlIHBlZXIuICBJZiBubyBjZXJ0aWZpY2F0ZSB3YXMgcHJvdmlkZWQsXG5cCi1yZXR1cm5zIE5vbmUuICBJZiBhIGNlcnRpZmljYXRlIHdhcyBwcm92aWRlZCwgYnV0IG5vdCB2YWxpZGF0ZWQsIHJldHVybnNcblwKLWFuIGVtcHR5IGRpY3Rpb25hcnkuICBPdGhlcndpc2UgcmV0dXJucyBhIGRpY3QgY29udGFpbmluZyBpbmZvcm1hdGlvblxuXAotYWJvdXQgdGhlIHBlZXIgY2VydGlmaWNhdGUuXG5cCi1cblwKLUlmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBpcyBUcnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGVcblwKLXBlZXIgY2VydGlmaWNhdGUsIG9yIE5vbmUgaWYgbm8gY2VydGlmaWNhdGUgd2FzIHByb3ZpZGVkLiAgVGhpcyB3aWxsXG5cCi1yZXR1cm4gdGhlIGNlcnRpZmljYXRlIGV2ZW4gaWYgaXQgd2Fzbid0IHZhbGlkYXRlZC4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9jaXBoZXIgKFB5U1NMU29ja2V0ICpzZWxmKSB7Ci0KLSAgICBQeU9iamVjdCAqcmV0dmFsLCAqdjsKLSAgICBjb25zdCBTU0xfQ0lQSEVSICpjdXJyZW50OwotICAgIGNoYXIgKmNpcGhlcl9uYW1lOwotICAgIGNoYXIgKmNpcGhlcl9wcm90b2NvbDsKLQotICAgIGlmIChzZWxmLT5zc2wgPT0gTlVMTCkKLSAgICAgICAgUHlfUkVUVVJOX05PTkU7Ci0gICAgY3VycmVudCA9IFNTTF9nZXRfY3VycmVudF9jaXBoZXIoc2VsZi0+c3NsKTsKLSAgICBpZiAoY3VycmVudCA9PSBOVUxMKQotICAgICAgICBQeV9SRVRVUk5fTk9ORTsKLQotICAgIHJldHZhbCA9IFB5VHVwbGVfTmV3KDMpOworc3RhdGljIFB5T2JqZWN0ICoKK2NpcGhlcl90b190dXBsZShjb25zdCBTU0xfQ0lQSEVSICpjaXBoZXIpCit7CisgICAgY29uc3QgY2hhciAqY2lwaGVyX25hbWUsICpjaXBoZXJfcHJvdG9jb2w7CisgICAgUHlPYmplY3QgKnYsICpyZXR2YWwgPSBQeVR1cGxlX05ldygzKTsKICAgICBpZiAocmV0dmFsID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgY2lwaGVyX25hbWUgPSAoY2hhciAqKSBTU0xfQ0lQSEVSX2dldF9uYW1lKGN1cnJlbnQpOworICAgIGNpcGhlcl9uYW1lID0gU1NMX0NJUEhFUl9nZXRfbmFtZShjaXBoZXIpOwogICAgIGlmIChjaXBoZXJfbmFtZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDAsIFB5X05vbmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhjaXBoZXJfbmFtZSk7CiAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWwwOworICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMCwgdik7CiAgICAgfQotICAgIGNpcGhlcl9wcm90b2NvbCA9IChjaGFyICopIFNTTF9DSVBIRVJfZ2V0X3ZlcnNpb24oY3VycmVudCk7CisKKyAgICBjaXBoZXJfcHJvdG9jb2wgPSBTU0xfQ0lQSEVSX2dldF92ZXJzaW9uKGNpcGhlcik7CiAgICAgaWYgKGNpcGhlcl9wcm90b2NvbCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDEsIFB5X05vbmUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhjaXBoZXJfcHJvdG9jb2wpOwogICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsMDsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDEsIHYpOwogICAgIH0KLSAgICB2ID0gUHlMb25nX0Zyb21Mb25nKFNTTF9DSVBIRVJfZ2V0X2JpdHMoY3VycmVudCwgTlVMTCkpOworCisgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZyhTU0xfQ0lQSEVSX2dldF9iaXRzKGNpcGhlciwgTlVMTCkpOwogICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDA7CisgICAgICAgIGdvdG8gZmFpbDsKICAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMiwgdik7CisKICAgICByZXR1cm4gcmV0dmFsOwogCi0gIGZhaWwwOgorICBmYWlsOgogICAgIFB5X0RFQ1JFRihyZXR2YWwpOwogICAgIHJldHVybiBOVUxMOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfc3NsLl9TU0xTb2NrZXQuc2hhcmVkX2NpcGhlcnMKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9zaGFyZWRfY2lwaGVyc19pbXBsKFB5U1NMU29ja2V0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNkMTc0ZWFkMmU0MmM0ZmQgaW5wdXQ9MGJmZTE0OWRhOGZlNjMwNl0qLworeworICAgIFNTTF9TRVNTSU9OICpzZXNzID0gU1NMX2dldF9zZXNzaW9uKHNlbGYtPnNzbCk7CisgICAgU1RBQ0tfT0YoU1NMX0NJUEhFUikgKmNpcGhlcnM7CisgICAgaW50IGk7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIGlmICghc2VzcyB8fCAhc2Vzcy0+Y2lwaGVycykKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgY2lwaGVycyA9IHNlc3MtPmNpcGhlcnM7CisgICAgcmVzID0gUHlMaXN0X05ldyhza19TU0xfQ0lQSEVSX251bShjaXBoZXJzKSk7CisgICAgaWYgKCFyZXMpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaSA9IDA7IGkgPCBza19TU0xfQ0lQSEVSX251bShjaXBoZXJzKTsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBjaXBoZXJfdG9fdHVwbGUoc2tfU1NMX0NJUEhFUl92YWx1ZShjaXBoZXJzLCBpKSk7CisgICAgICAgIGlmICghdHVwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShyZXMsIGksIHR1cCk7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTFNvY2tldC5jaXBoZXIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9jaXBoZXJfaW1wbChQeVNTTFNvY2tldCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zNzY0MTdjMTZkMGU1ODE1IGlucHV0PTU0OGZiMGUyNzI0Mzc5NmRdKi8KK3sKKyAgICBjb25zdCBTU0xfQ0lQSEVSICpjdXJyZW50OworCisgICAgaWYgKHNlbGYtPnNzbCA9PSBOVUxMKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICBjdXJyZW50ID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihzZWxmLT5zc2wpOworICAgIGlmIChjdXJyZW50ID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiBjaXBoZXJfdG9fdHVwbGUoY3VycmVudCk7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTFNvY2tldC52ZXJzaW9uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfdmVyc2lvbl9pbXBsKFB5U1NMU29ja2V0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE3OGFlZDMzMTkzYjJjZGIgaW5wdXQ9OTAwMTg2YTUwMzQzNmZkNl0qLworeworICAgIGNvbnN0IGNoYXIgKnZlcnNpb247CisKKyAgICBpZiAoc2VsZi0+c3NsID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHZlcnNpb24gPSBTU0xfZ2V0X3ZlcnNpb24oc2VsZi0+c3NsKTsKKyAgICBpZiAoIXN0cmNtcCh2ZXJzaW9uLCAidW5rbm93biIpKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcodmVyc2lvbik7Cit9CisKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMX3NlbGVjdGVkX25wbl9wcm90b2NvbChQeVNTTFNvY2tldCAqc2VsZikgeworLypbY2xpbmljIGlucHV0XQorX3NzbC5fU1NMU29ja2V0LnNlbGVjdGVkX25wbl9wcm90b2NvbAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3NlbGVjdGVkX25wbl9wcm90b2NvbF9pbXBsKFB5U1NMU29ja2V0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI5MWQ0OTRjZDIwN2VjZjYgaW5wdXQ9YzI4ZmRlMTM5MjA0YjgyNl0qLworewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm91dDsKICAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwogCkBAIC0xNDEzLDExICsxNTI4LDM4IEBACiAKICAgICBpZiAob3V0ID09IE5VTEwpCiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKikgb3V0LCBvdXRsZW4pOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilvdXQsIG91dGxlbik7CiB9CiAjZW5kaWYKIAotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9jb21wcmVzc2lvbihQeVNTTFNvY2tldCAqc2VsZikgeworI2lmZGVmIEhBVkVfQUxQTgorLypbY2xpbmljIGlucHV0XQorX3NzbC5fU1NMU29ja2V0LnNlbGVjdGVkX2FscG5fcHJvdG9jb2wKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9zZWxlY3RlZF9hbHBuX3Byb3RvY29sX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZWMzMzY4OGIzMDNkMjUwZiBpbnB1dD00NDJkZTMwZTM1YmMyOTEzXSovCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0OworICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisKKyAgICBTU0xfZ2V0MF9hbHBuX3NlbGVjdGVkKHNlbGYtPnNzbCwgJm91dCwgJm91dGxlbik7CisKKyAgICBpZiAob3V0ID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilvdXQsIG91dGxlbik7Cit9CisjZW5kaWYKKworLypbY2xpbmljIGlucHV0XQorX3NzbC5fU1NMU29ja2V0LmNvbXByZXNzaW9uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfY29tcHJlc3Npb25faW1wbChQeVNTTFNvY2tldCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iZDE2Y2IxYmI0NjQ2YWU3IGlucHV0PTVkMDU5ZDBhMmJiYzMyYzhdKi8KK3sKICNpZmRlZiBPUEVOU1NMX05PX0NPTVAKICAgICBQeV9SRVRVUk5fTk9ORTsKICNlbHNlCkBAIC0xNDUxLDggKzE1OTMsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAjZWxzZQogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwotICAgICAgICBQeV9ERUNSRUYoc2VsZi0+Y3R4KTsKLSAgICAgICAgc2VsZi0+Y3R4ID0gKFB5U1NMQ29udGV4dCAqKSB2YWx1ZTsKKyAgICAgICAgUHlfU0VUUkVGKHNlbGYtPmN0eCwgKFB5U1NMQ29udGV4dCAqKXZhbHVlKTsKICAgICAgICAgU1NMX3NldF9TU0xfQ1RYKHNlbGYtPnNzbCwgc2VsZi0+Y3R4LT5jdHgpOwogI2VuZGlmCiAgICAgfSBlbHNlIHsKQEAgLTE0NzIsNiArMTYxMyw1MyBAQAogU1NMU29ja2V0IGJlZm9yZSB0aGUgY3J5cHRvZ3JhcGhpYyBleGNoYW5nZSBoYW5kc2hha2UgbWVzc2FnZXNcbiIpOwogCiAKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9nZXRfc2VydmVyX3NpZGUoUHlTU0xTb2NrZXQgKnNlbGYsIHZvaWQgKmMpCit7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhzZWxmLT5zb2NrZXRfdHlwZSA9PSBQWV9TU0xfU0VSVkVSKTsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9zZXJ2ZXJfc2lkZV9kb2MsCisiV2hldGhlciB0aGlzIGlzIGEgc2VydmVyLXNpZGUgc29ja2V0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorUHlTU0xfZ2V0X3NlcnZlcl9ob3N0bmFtZShQeVNTTFNvY2tldCAqc2VsZiwgdm9pZCAqYykKK3sKKyAgICBpZiAoc2VsZi0+c2VydmVyX2hvc3RuYW1lID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIFB5X0lOQ1JFRihzZWxmLT5zZXJ2ZXJfaG9zdG5hbWUpOworICAgIHJldHVybiBzZWxmLT5zZXJ2ZXJfaG9zdG5hbWU7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfc2VydmVyX2hvc3RuYW1lX2RvYywKKyJUaGUgY3VycmVudGx5IHNldCBzZXJ2ZXIgaG9zdG5hbWUgKGZvciBTTkkpLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorUHlTU0xfZ2V0X293bmVyKFB5U1NMU29ja2V0ICpzZWxmLCB2b2lkICpjKQoreworICAgIFB5T2JqZWN0ICpvd25lcjsKKworICAgIGlmIChzZWxmLT5vd25lciA9PSBOVUxMKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIG93bmVyID0gUHlXZWFrcmVmX0dldE9iamVjdChzZWxmLT5vd25lcik7CisgICAgUHlfSU5DUkVGKG93bmVyKTsKKyAgICByZXR1cm4gb3duZXI7Cit9CisKK3N0YXRpYyBpbnQKK1B5U1NMX3NldF9vd25lcihQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLCB2b2lkICpjKQoreworICAgIFB5X1hTRVRSRUYoc2VsZi0+b3duZXIsIFB5V2Vha3JlZl9OZXdSZWYodmFsdWUsIE5VTEwpKTsKKyAgICBpZiAoc2VsZi0+b3duZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfZ2V0X293bmVyX2RvYywKKyJUaGUgUHl0aG9uLWxldmVsIG93bmVyIG9mIHRoaXMgb2JqZWN0LlwKK1Bhc3NlZCBhcyBcInNlbGZcIiBpbiBzZXJ2ZXJuYW1lIGNhbGxiYWNrLiIpOworCiAKIHN0YXRpYyB2b2lkIFB5U1NMX2RlYWxsb2MoUHlTU0xTb2NrZXQgKnNlbGYpCiB7CkBAIC0xNDgxLDYgKzE2NjksOCBAQAogICAgICAgICBTU0xfZnJlZShzZWxmLT5zc2wpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+U29ja2V0KTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmN0eCk7CisgICAgUHlfWERFQ1JFRihzZWxmLT5zZXJ2ZXJfaG9zdG5hbWUpOworICAgIFB5X1hERUNSRUYoc2VsZi0+b3duZXIpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KIApAQCAtMTQ5MCwxMDQgKzE2ODAsMTIwIEBACiAgKi8KIAogc3RhdGljIGludAotY2hlY2tfc29ja2V0X2FuZF93YWl0X2Zvcl90aW1lb3V0KFB5U29ja2V0U29ja09iamVjdCAqcywgaW50IHdyaXRpbmcpCitQeVNTTF9zZWxlY3QoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBpbnQgd3JpdGluZywgX1B5VGltZV90IHRpbWVvdXQpCiB7CisgICAgaW50IHJjOworI2lmZGVmIEhBVkVfUE9MTAorICAgIHN0cnVjdCBwb2xsZmQgcG9sbGZkOworICAgIF9QeVRpbWVfdCBtczsKKyNlbHNlCisgICAgaW50IG5mZHM7CiAgICAgZmRfc2V0IGZkczsKICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKLSAgICBpbnQgcmM7CisjZW5kaWYKIAogICAgIC8qIE5vdGhpbmcgdG8gZG8gdW5sZXNzIHdlJ3JlIGluIHRpbWVvdXQgbW9kZSAobm90IG5vbi1ibG9ja2luZykgKi8KLSAgICBpZiAocy0+c29ja190aW1lb3V0IDwgMC4wKQotICAgICAgICByZXR1cm4gU09DS0VUX0lTX0JMT0NLSU5HOwotICAgIGVsc2UgaWYgKHMtPnNvY2tfdGltZW91dCA9PSAwLjApCisgICAgaWYgKChzID09IE5VTEwpIHx8ICh0aW1lb3V0ID09IDApKQogICAgICAgICByZXR1cm4gU09DS0VUX0lTX05PTkJMT0NLSU5HOworICAgIGVsc2UgaWYgKHRpbWVvdXQgPCAwKSB7CisgICAgICAgIGlmIChzLT5zb2NrX3RpbWVvdXQgPiAwKQorICAgICAgICAgICAgcmV0dXJuIFNPQ0tFVF9IQVNfVElNRURfT1VUOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gU09DS0VUX0lTX0JMT0NLSU5HOworICAgIH0KIAogICAgIC8qIEd1YXJkIGFnYWluc3QgY2xvc2VkIHNvY2tldCAqLwotICAgIGlmIChzLT5zb2NrX2ZkIDwgMCkKKyAgICBpZiAocy0+c29ja19mZCA9PSBJTlZBTElEX1NPQ0tFVCkKICAgICAgICAgcmV0dXJuIFNPQ0tFVF9IQVNfQkVFTl9DTE9TRUQ7CiAKICAgICAvKiBQcmVmZXIgcG9sbCwgaWYgYXZhaWxhYmxlLCBzaW5jZSB5b3UgY2FuIHBvbGwoKSBhbnkgZmQKICAgICAgKiB3aGljaCBjYW4ndCBiZSBkb25lIHdpdGggc2VsZWN0KCkuICovCiAjaWZkZWYgSEFWRV9QT0xMCi0gICAgewotICAgICAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZDsKLSAgICAgICAgaW50IHRpbWVvdXQ7CisgICAgcG9sbGZkLmZkID0gcy0+c29ja19mZDsKKyAgICBwb2xsZmQuZXZlbnRzID0gd3JpdGluZyA/IFBPTExPVVQgOiBQT0xMSU47CiAKLSAgICAgICAgcG9sbGZkLmZkID0gcy0+c29ja19mZDsKLSAgICAgICAgcG9sbGZkLmV2ZW50cyA9IHdyaXRpbmcgPyBQT0xMT1VUIDogUE9MTElOOworICAgIC8qIHRpbWVvdXQgaXMgaW4gc2Vjb25kcywgcG9sbCgpIHVzZXMgbWlsbGlzZWNvbmRzICovCisgICAgbXMgPSAoaW50KV9QeVRpbWVfQXNNaWxsaXNlY29uZHModGltZW91dCwgX1B5VGltZV9ST1VORF9DRUlMSU5HKTsKKyAgICBhc3NlcnQobXMgPD0gSU5UX01BWCk7CiAKLSAgICAgICAgLyogcy0+c29ja190aW1lb3V0IGlzIGluIHNlY29uZHMsIHRpbWVvdXQgaW4gbXMgKi8KLSAgICAgICAgdGltZW91dCA9IChpbnQpKHMtPnNvY2tfdGltZW91dCAqIDEwMDAgKyAwLjUpOwotICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJjID0gcG9sbCgmcG9sbGZkLCAxLCB0aW1lb3V0KTsKLSAgICAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgICAgICBnb3RvIG5vcm1hbF9yZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KKyAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmMgPSBwb2xsKCZwb2xsZmQsIDEsIChpbnQpbXMpOworICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisjZWxzZQogICAgIC8qIEd1YXJkIGFnYWluc3Qgc29ja2V0IHRvbyBsYXJnZSBmb3Igc2VsZWN0Ki8KICAgICBpZiAoIV9QeUlzU2VsZWN0YWJsZV9mZChzLT5zb2NrX2ZkKSkKICAgICAgICAgcmV0dXJuIFNPQ0tFVF9UT09fTEFSR0VfRk9SX1NFTEVDVDsKIAotICAgIC8qIENvbnN0cnVjdCB0aGUgYXJndW1lbnRzIHRvIHNlbGVjdCAqLwotICAgIHR2LnR2X3NlYyA9IChpbnQpcy0+c29ja190aW1lb3V0OwotICAgIHR2LnR2X3VzZWMgPSAoaW50KSgocy0+c29ja190aW1lb3V0IC0gdHYudHZfc2VjKSAqIDFlNik7CisgICAgX1B5VGltZV9Bc1RpbWV2YWxfbm9yYWlzZSh0aW1lb3V0LCAmdHYsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CisKICAgICBGRF9aRVJPKCZmZHMpOwogICAgIEZEX1NFVChzLT5zb2NrX2ZkLCAmZmRzKTsKIAotICAgIC8qIFNlZSBpZiB0aGUgc29ja2V0IGlzIHJlYWR5ICovCisgICAgLyogV2FpdCB1bnRpbCB0aGUgc29ja2V0IGJlY29tZXMgcmVhZHkgKi8KICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCisgICAgbmZkcyA9IFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KTsKICAgICBpZiAod3JpdGluZykKLSAgICAgICAgcmMgPSBzZWxlY3QoUHlfU0FGRV9ET1dOQ0FTVChzLT5zb2NrX2ZkKzEsIFNPQ0tFVF9ULCBpbnQpLAotICAgICAgICAgICAgICAgICAgICBOVUxMLCAmZmRzLCBOVUxMLCAmdHYpOworICAgICAgICByYyA9IHNlbGVjdChuZmRzLCBOVUxMLCAmZmRzLCBOVUxMLCAmdHYpOwogICAgIGVsc2UKLSAgICAgICAgcmMgPSBzZWxlY3QoUHlfU0FGRV9ET1dOQ0FTVChzLT5zb2NrX2ZkKzEsIFNPQ0tFVF9ULCBpbnQpLAotICAgICAgICAgICAgICAgICAgICAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOworICAgICAgICByYyA9IHNlbGVjdChuZmRzLCAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCi0KLSNpZmRlZiBIQVZFX1BPTEwKLW5vcm1hbF9yZXR1cm46CiAjZW5kaWYKKwogICAgIC8qIFJldHVybiBTT0NLRVRfVElNRURfT1VUIG9uIHRpbWVvdXQsIFNPQ0tFVF9PUEVSQVRJT05fT0sgb3RoZXJ3aXNlCiAgICAgICAgKHdoZW4gd2UgYXJlIGFibGUgdG8gd3JpdGUgb3Igd2hlbiB0aGVyZSdzIHNvbWV0aGluZyB0byByZWFkKSAqLwogICAgIHJldHVybiByYyA9PSAwID8gU09DS0VUX0hBU19USU1FRF9PVVQgOiBTT0NLRVRfT1BFUkFUSU9OX09LOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHdyaXRlKFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTFNvY2tldC53cml0ZQorICAgIGI6IFB5X2J1ZmZlcgorICAgIC8KKworV3JpdGVzIHRoZSBieXRlcy1saWtlIG9iamVjdCBiIGludG8gdGhlIFNTTCBvYmplY3QuCisKK1JldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3dyaXRlX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYsIFB5X2J1ZmZlciAqYikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hYTdhNmJlNTUyNzM1OGQ4IGlucHV0PTc3MjYyZDk5NGZlNTEwMGFdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmOwogICAgIGludCBsZW47CiAgICAgaW50IHNvY2tzdGF0ZTsKICAgICBpbnQgZXJyOwogICAgIGludCBub25ibG9ja2luZzsKLSAgICBQeVNvY2tldFNvY2tPYmplY3QgKnNvY2sKLSAgICAgID0gKFB5U29ja2V0U29ja09iamVjdCAqKSBQeVdlYWtyZWZfR2V0T2JqZWN0KHNlbGYtPlNvY2tldCk7CisgICAgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrID0gR0VUX1NPQ0tFVChzZWxmKTsKKyAgICBfUHlUaW1lX3QgdGltZW91dCwgZGVhZGxpbmUgPSAwOworICAgIGludCBoYXNfdGltZW91dDsKIAotICAgIGlmICgoKFB5T2JqZWN0Kilzb2NrKSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIF9zZXRTU0xFcnJvcigiVW5kZXJseWluZyBzb2NrZXQgY29ubmVjdGlvbiBnb25lIiwKLSAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9FUlJPUl9OT19TT0NLRVQsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBQeV9JTkNSRUYoc29jayk7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOndyaXRlIiwgJmJ1ZikpIHsKLSAgICAgICAgUHlfREVDUkVGKHNvY2spOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc29jayAhPSBOVUxMKSB7CisgICAgICAgIGlmICgoKFB5T2JqZWN0Kilzb2NrKSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBfc2V0U1NMRXJyb3IoIlVuZGVybHlpbmcgc29ja2V0IGNvbm5lY3Rpb24gZ29uZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX0VSUk9SX05PX1NPQ0tFVCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRihzb2NrKTsKICAgICB9CiAKLSAgICBpZiAoYnVmLmxlbiA+IElOVF9NQVgpIHsKKyAgICBpZiAoYi0+bGVuID4gSU5UX01BWCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgbG9uZ2VyIHRoYW4gJWQgYnl0ZXMiLCBJTlRfTUFYKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICAvKiBqdXN0IGluIGNhc2UgdGhlIGJsb2NraW5nIHN0YXRlIG9mIHRoZSBzb2NrZXQgaGFzIGJlZW4gY2hhbmdlZCAqLwotICAgIG5vbmJsb2NraW5nID0gKHNvY2stPnNvY2tfdGltZW91dCA+PSAwLjApOwotICAgIEJJT19zZXRfbmJpbyhTU0xfZ2V0X3JiaW8oc2VsZi0+c3NsKSwgbm9uYmxvY2tpbmcpOwotICAgIEJJT19zZXRfbmJpbyhTU0xfZ2V0X3diaW8oc2VsZi0+c3NsKSwgbm9uYmxvY2tpbmcpOworICAgIGlmIChzb2NrICE9IE5VTEwpIHsKKyAgICAgICAgLyoganVzdCBpbiBjYXNlIHRoZSBibG9ja2luZyBzdGF0ZSBvZiB0aGUgc29ja2V0IGhhcyBiZWVuIGNoYW5nZWQgKi8KKyAgICAgICAgbm9uYmxvY2tpbmcgPSAoc29jay0+c29ja190aW1lb3V0ID49IDApOworICAgICAgICBCSU9fc2V0X25iaW8oU1NMX2dldF9yYmlvKHNlbGYtPnNzbCksIG5vbmJsb2NraW5nKTsKKyAgICAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfd2JpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7CisgICAgfQogCi0gICAgc29ja3N0YXRlID0gY2hlY2tfc29ja2V0X2FuZF93YWl0X2Zvcl90aW1lb3V0KHNvY2ssIDEpOworICAgIHRpbWVvdXQgPSBHRVRfU09DS0VUX1RJTUVPVVQoc29jayk7CisgICAgaGFzX3RpbWVvdXQgPSAodGltZW91dCA+IDApOworICAgIGlmIChoYXNfdGltZW91dCkKKyAgICAgICAgZGVhZGxpbmUgPSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCkgKyB0aW1lb3V0OworCisgICAgc29ja3N0YXRlID0gUHlTU0xfc2VsZWN0KHNvY2ssIDEsIHRpbWVvdXQpOwogICAgIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19USU1FRF9PVVQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U29ja2V0TW9kdWxlLnRpbWVvdXRfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHdyaXRlIG9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKQEAgLTE2MDEsMjEgKzE4MDcsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcmx5aW5nIHNvY2tldCB0b28gbGFyZ2UgZm9yIHNlbGVjdCgpLiIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKwogICAgIGRvIHsKICAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBsZW4gPSBTU0xfd3JpdGUoc2VsZi0+c3NsLCBidWYuYnVmLCAoaW50KWJ1Zi5sZW4pOworICAgICAgICBsZW4gPSBTU0xfd3JpdGUoc2VsZi0+c3NsLCBiLT5idWYsIChpbnQpYi0+bGVuKTsKICAgICAgICAgZXJyID0gU1NMX2dldF9lcnJvcihzZWxmLT5zc2wsIGxlbik7CiAgICAgICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgeworCisgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KKworICAgICAgICBpZiAoaGFzX3RpbWVvdXQpCisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCk7CisKICAgICAgICAgaWYgKGVyciA9PSBTU0xfRVJST1JfV0FOVF9SRUFEKSB7Ci0gICAgICAgICAgICBzb2Nrc3RhdGUgPSBjaGVja19zb2NrZXRfYW5kX3dhaXRfZm9yX3RpbWVvdXQoc29jaywgMCk7CisgICAgICAgICAgICBzb2Nrc3RhdGUgPSBQeVNTTF9zZWxlY3Qoc29jaywgMCwgdGltZW91dCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZXJyID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7Ci0gICAgICAgICAgICBzb2Nrc3RhdGUgPSBjaGVja19zb2NrZXRfYW5kX3dhaXRfZm9yX3RpbWVvdXQoc29jaywgMSk7CisgICAgICAgICAgICBzb2Nrc3RhdGUgPSBQeVNTTF9zZWxlY3Qoc29jaywgMSwgdGltZW91dCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzb2Nrc3RhdGUgPSBTT0NLRVRfT1BFUkFUSU9OX09LOwogICAgICAgICB9CisKICAgICAgICAgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX1RJTUVEX09VVCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U29ja2V0TW9kdWxlLnRpbWVvdXRfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSB3cml0ZSBvcGVyYXRpb24gdGltZWQgb3V0Iik7CkBAIC0xNjI5LDI2ICsxODQxLDI2IEBACiAgICAgICAgIH0KICAgICB9IHdoaWxlIChlcnIgPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCB8fCBlcnIgPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEUpOwogCi0gICAgUHlfREVDUkVGKHNvY2spOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgUHlfWERFQ1JFRihzb2NrKTsKICAgICBpZiAobGVuID4gMCkKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhsZW4pOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIFB5U1NMX1NldEVycm9yKHNlbGYsIGxlbiwgX19GSUxFX18sIF9fTElORV9fKTsKIAogZXJyb3I6Ci0gICAgUHlfREVDUkVGKHNvY2spOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgUHlfWERFQ1JFRihzb2NrKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX1NTTHdyaXRlX2RvYywKLSJ3cml0ZShzKSAtPiBsZW5cblwKLVxuXAotV3JpdGVzIHRoZSBzdHJpbmcgcyBpbnRvIHRoZSBTU0wgb2JqZWN0LiAgUmV0dXJucyB0aGUgbnVtYmVyXG5cCi1vZiBieXRlcyB3cml0dGVuLiIpOworLypbY2xpbmljIGlucHV0XQorX3NzbC5fU1NMU29ja2V0LnBlbmRpbmcKIAotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9TU0xwZW5kaW5nKFB5U1NMU29ja2V0ICpzZWxmKQorUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFscmVhZHkgZGVjcnlwdGVkIGJ5dGVzIGF2YWlsYWJsZSBmb3IgcmVhZCwgcGVuZGluZyBvbiB0aGUgY29ubmVjdGlvbi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9wZW5kaW5nX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTgzZDlmZWNkYzMwOGE4MyBpbnB1dD0yYjc3NDg3ZDZkZmQ1OTdmXSovCiB7CiAgICAgaW50IGNvdW50ID0gMDsKIApAQCAtMTY2MSw4MSArMTg3MywxMDkgQEAKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhjb3VudCk7CiB9CiAKLVB5RG9jX1NUUlZBUihQeVNTTF9TU0xwZW5kaW5nX2RvYywKLSJwZW5kaW5nKCkgLT4gY291bnRcblwKLVxuXAotUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFscmVhZHkgZGVjcnlwdGVkIGJ5dGVzIGF2YWlsYWJsZSBmb3IgcmVhZCxcblwKLXBlbmRpbmcgb24gdGhlIGNvbm5lY3Rpb24uXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTFNvY2tldC5yZWFkCisgICAgc2l6ZSBhcyBsZW46IGludAorICAgIFsKKyAgICBidWZmZXI6IFB5X2J1ZmZlcihhY2NlcHQ9e3J3YnVmZmVyfSkKKyAgICBdCisgICAgLwogCi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHJlYWQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorUmVhZCB1cCB0byBzaXplIGJ5dGVzIGZyb20gdGhlIFNTTCBzb2NrZXQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfcmVhZF9pbXBsKFB5U1NMU29ja2V0ICpzZWxmLCBpbnQgbGVuLCBpbnQgZ3JvdXBfcmlnaHRfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDAwOTc3NzZjZWMyYTBhZiBpbnB1dD1mZjE1N2ViOTE4ZDA5MDViXSovCiB7CiAgICAgUHlPYmplY3QgKmRlc3QgPSBOVUxMOwotICAgIFB5X2J1ZmZlciBidWY7CiAgICAgY2hhciAqbWVtOwotICAgIGludCBsZW4sIGNvdW50OwotICAgIGludCBidWZfcGFzc2VkID0gMDsKKyAgICBpbnQgY291bnQ7CiAgICAgaW50IHNvY2tzdGF0ZTsKICAgICBpbnQgZXJyOwogICAgIGludCBub25ibG9ja2luZzsKLSAgICBQeVNvY2tldFNvY2tPYmplY3QgKnNvY2sKLSAgICAgID0gKFB5U29ja2V0U29ja09iamVjdCAqKSBQeVdlYWtyZWZfR2V0T2JqZWN0KHNlbGYtPlNvY2tldCk7CisgICAgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrID0gR0VUX1NPQ0tFVChzZWxmKTsKKyAgICBfUHlUaW1lX3QgdGltZW91dCwgZGVhZGxpbmUgPSAwOworICAgIGludCBoYXNfdGltZW91dDsKIAotICAgIGlmICgoKFB5T2JqZWN0Kilzb2NrKSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIF9zZXRTU0xFcnJvcigiVW5kZXJseWluZyBzb2NrZXQgY29ubmVjdGlvbiBnb25lIiwKLSAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9FUlJPUl9OT19TT0NLRVQsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgaWYgKCFncm91cF9yaWdodF8xICYmIGxlbiA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzaXplIHNob3VsZCBub3QgYmUgbmVnYXRpdmUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihzb2NrKTsKIAotICAgIGJ1Zi5vYmogPSBOVUxMOwotICAgIGJ1Zi5idWYgPSBOVUxMOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXx3KjpyZWFkIiwgJmxlbiwgJmJ1ZikpCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKHNvY2sgIT0gTlVMTCkgeworICAgICAgICBpZiAoKChQeU9iamVjdCopc29jaykgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgX3NldFNTTEVycm9yKCJVbmRlcmx5aW5nIHNvY2tldCBjb25uZWN0aW9uIGdvbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9FUlJPUl9OT19TT0NLRVQsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYoc29jayk7CisgICAgfQogCi0gICAgaWYgKChidWYuYnVmID09IE5VTEwpICYmIChidWYub2JqID09IE5VTEwpKSB7CisgICAgaWYgKCFncm91cF9yaWdodF8xKSB7CiAgICAgICAgIGRlc3QgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbik7CiAgICAgICAgIGlmIChkZXN0ID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoc29jayk7CisgICAgICAgICAgICByZXR1cm4gZGVzdDsKKyAgICAgICAgfQogICAgICAgICBtZW0gPSBQeUJ5dGVzX0FTX1NUUklORyhkZXN0KTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGJ1Zl9wYXNzZWQgPSAxOwotICAgICAgICBtZW0gPSBidWYuYnVmOwotICAgICAgICBpZiAobGVuIDw9IDAgfHwgbGVuID4gYnVmLmxlbikgewotICAgICAgICAgICAgbGVuID0gKGludCkgYnVmLmxlbjsKLSAgICAgICAgICAgIGlmIChidWYubGVuICE9IGxlbikgeworICAgICAgICBtZW0gPSBidWZmZXItPmJ1ZjsKKyAgICAgICAgaWYgKGxlbiA8PSAwIHx8IGxlbiA+IGJ1ZmZlci0+bGVuKSB7CisgICAgICAgICAgICBsZW4gPSAoaW50KSBidWZmZXItPmxlbjsKKyAgICAgICAgICAgIGlmIChidWZmZXItPmxlbiAhPSBsZW4pIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heGltdW0gbGVuZ3RoIGNhbid0IGZpdCBpbiBhIEMgJ2ludCciKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIGp1c3QgaW4gY2FzZSB0aGUgYmxvY2tpbmcgc3RhdGUgb2YgdGhlIHNvY2tldCBoYXMgYmVlbiBjaGFuZ2VkICovCi0gICAgbm9uYmxvY2tpbmcgPSAoc29jay0+c29ja190aW1lb3V0ID49IDAuMCk7Ci0gICAgQklPX3NldF9uYmlvKFNTTF9nZXRfcmJpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7Ci0gICAgQklPX3NldF9uYmlvKFNTTF9nZXRfd2JpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7CisgICAgaWYgKHNvY2sgIT0gTlVMTCkgeworICAgICAgICAvKiBqdXN0IGluIGNhc2UgdGhlIGJsb2NraW5nIHN0YXRlIG9mIHRoZSBzb2NrZXQgaGFzIGJlZW4gY2hhbmdlZCAqLworICAgICAgICBub25ibG9ja2luZyA9IChzb2NrLT5zb2NrX3RpbWVvdXQgPj0gMCk7CisgICAgICAgIEJJT19zZXRfbmJpbyhTU0xfZ2V0X3JiaW8oc2VsZi0+c3NsKSwgbm9uYmxvY2tpbmcpOworICAgICAgICBCSU9fc2V0X25iaW8oU1NMX2dldF93YmlvKHNlbGYtPnNzbCksIG5vbmJsb2NraW5nKTsKKyAgICB9CisKKyAgICB0aW1lb3V0ID0gR0VUX1NPQ0tFVF9USU1FT1VUKHNvY2spOworICAgIGhhc190aW1lb3V0ID0gKHRpbWVvdXQgPiAwKTsKKyAgICBpZiAoaGFzX3RpbWVvdXQpCisgICAgICAgIGRlYWRsaW5lID0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpICsgdGltZW91dDsKIAogICAgIGRvIHsKICAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBjb3VudCA9IFNTTF9yZWFkKHNlbGYtPnNzbCwgbWVtLCBsZW4pOwogICAgICAgICBlcnIgPSBTU0xfZ2V0X2Vycm9yKHNlbGYtPnNzbCwgY291bnQpOwogICAgICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUworCiAgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKGhhc190aW1lb3V0KQorICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpOworCiAgICAgICAgIGlmIChlcnIgPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCkgewotICAgICAgICAgICAgc29ja3N0YXRlID0gY2hlY2tfc29ja2V0X2FuZF93YWl0X2Zvcl90aW1lb3V0KHNvY2ssIDApOworICAgICAgICAgICAgc29ja3N0YXRlID0gUHlTU0xfc2VsZWN0KHNvY2ssIDAsIHRpbWVvdXQpOwogICAgICAgICB9IGVsc2UgaWYgKGVyciA9PSBTU0xfRVJST1JfV0FOVF9XUklURSkgewotICAgICAgICAgICAgc29ja3N0YXRlID0gY2hlY2tfc29ja2V0X2FuZF93YWl0X2Zvcl90aW1lb3V0KHNvY2ssIDEpOwotICAgICAgICB9IGVsc2UgaWYgKChlcnIgPT0gU1NMX0VSUk9SX1pFUk9fUkVUVVJOKSAmJgotICAgICAgICAgICAgICAgICAgIChTU0xfZ2V0X3NodXRkb3duKHNlbGYtPnNzbCkgPT0KLSAgICAgICAgICAgICAgICAgICAgU1NMX1JFQ0VJVkVEX1NIVVRET1dOKSkKKyAgICAgICAgICAgIHNvY2tzdGF0ZSA9IFB5U1NMX3NlbGVjdChzb2NrLCAxLCB0aW1lb3V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gU1NMX0VSUk9SX1pFUk9fUkVUVVJOICYmCisgICAgICAgICAgICAgICAgICAgU1NMX2dldF9zaHV0ZG93bihzZWxmLT5zc2wpID09IFNTTF9SRUNFSVZFRF9TSFVURE9XTikKICAgICAgICAgewogICAgICAgICAgICAgY291bnQgPSAwOwogICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc29ja3N0YXRlID0gU09DS0VUX09QRVJBVElPTl9PSzsKICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBzb2Nrc3RhdGUgPSBTT0NLRVRfT1BFUkFUSU9OX09LOworCiAgICAgICAgIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19USU1FRF9PVVQpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNvY2tldE1vZHVsZS50aW1lb3V0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVhZCBvcGVyYXRpb24gdGltZWQgb3V0Iik7CkBAIC0xNzQ0LDU1ICsxOTg0LDY2IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKGVyciA9PSBTU0xfRVJST1JfV0FOVF9SRUFEIHx8IGVyciA9PSBTU0xfRVJST1JfV0FOVF9XUklURSk7CisKICAgICBpZiAoY291bnQgPD0gMCkgewogICAgICAgICBQeVNTTF9TZXRFcnJvcihzZWxmLCBjb3VudCwgX19GSUxFX18sIF9fTElORV9fKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKIGRvbmU6Ci0gICAgUHlfREVDUkVGKHNvY2spOwotICAgIGlmICghYnVmX3Bhc3NlZCkgeworICAgIFB5X1hERUNSRUYoc29jayk7CisgICAgaWYgKCFncm91cF9yaWdodF8xKSB7CiAgICAgICAgIF9QeUJ5dGVzX1Jlc2l6ZSgmZGVzdCwgY291bnQpOwogICAgICAgICByZXR1cm4gZGVzdDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoY291bnQpOwogICAgIH0KIAogZXJyb3I6Ci0gICAgUHlfREVDUkVGKHNvY2spOwotICAgIGlmICghYnVmX3Bhc3NlZCkKKyAgICBQeV9YREVDUkVGKHNvY2spOworICAgIGlmICghZ3JvdXBfcmlnaHRfMSkKICAgICAgICAgUHlfWERFQ1JFRihkZXN0KTsKLSAgICBlbHNlCi0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihQeVNTTF9TU0xyZWFkX2RvYywKLSJyZWFkKFtsZW5dKSAtPiBzdHJpbmdcblwKLVxuXAotUmVhZCB1cCB0byBsZW4gYnl0ZXMgZnJvbSB0aGUgU1NMIHNvY2tldC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTFNvY2tldC5zaHV0ZG93bgogCi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHNodXRkb3duKFB5U1NMU29ja2V0ICpzZWxmKQorRG9lcyB0aGUgU1NMIHNodXRkb3duIGhhbmRzaGFrZSB3aXRoIHRoZSByZW1vdGUgZW5kLgorCitSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfc2h1dGRvd25faW1wbChQeVNTTFNvY2tldCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jYTFhYTdlZDlkMjVjYTQyIGlucHV0PWVkZTJjYzFhMmRkZjBlZTRdKi8KIHsKICAgICBpbnQgZXJyLCBzc2xfZXJyLCBzb2Nrc3RhdGUsIG5vbmJsb2NraW5nOwogICAgIGludCB6ZXJvcyA9IDA7Ci0gICAgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrCi0gICAgICA9IChQeVNvY2tldFNvY2tPYmplY3QgKikgUHlXZWFrcmVmX0dldE9iamVjdChzZWxmLT5Tb2NrZXQpOworICAgIFB5U29ja2V0U29ja09iamVjdCAqc29jayA9IEdFVF9TT0NLRVQoc2VsZik7CisgICAgX1B5VGltZV90IHRpbWVvdXQsIGRlYWRsaW5lID0gMDsKKyAgICBpbnQgaGFzX3RpbWVvdXQ7CiAKLSAgICAvKiBHdWFyZCBhZ2FpbnN0IGNsb3NlZCBzb2NrZXQgKi8KLSAgICBpZiAoKCgoUHlPYmplY3QqKXNvY2spID09IFB5X05vbmUpIHx8IChzb2NrLT5zb2NrX2ZkIDwgMCkpIHsKLSAgICAgICAgX3NldFNTTEVycm9yKCJVbmRlcmx5aW5nIHNvY2tldCBjb25uZWN0aW9uIGdvbmUiLAotICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX0VSUk9SX05PX1NPQ0tFVCwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHNvY2sgIT0gTlVMTCkgeworICAgICAgICAvKiBHdWFyZCBhZ2FpbnN0IGNsb3NlZCBzb2NrZXQgKi8KKyAgICAgICAgaWYgKCgoKFB5T2JqZWN0Kilzb2NrKSA9PSBQeV9Ob25lKSB8fCAoc29jay0+c29ja19mZCA9PSBJTlZBTElEX1NPQ0tFVCkpIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcigiVW5kZXJseWluZyBzb2NrZXQgY29ubmVjdGlvbiBnb25lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfRVJST1JfTk9fU09DS0VULCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKHNvY2spOworCisgICAgICAgIC8qIEp1c3QgaW4gY2FzZSB0aGUgYmxvY2tpbmcgc3RhdGUgb2YgdGhlIHNvY2tldCBoYXMgYmVlbiBjaGFuZ2VkICovCisgICAgICAgIG5vbmJsb2NraW5nID0gKHNvY2stPnNvY2tfdGltZW91dCA+PSAwKTsKKyAgICAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfcmJpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7CisgICAgICAgIEJJT19zZXRfbmJpbyhTU0xfZ2V0X3diaW8oc2VsZi0+c3NsKSwgbm9uYmxvY2tpbmcpOwogICAgIH0KLSAgICBQeV9JTkNSRUYoc29jayk7CiAKLSAgICAvKiBKdXN0IGluIGNhc2UgdGhlIGJsb2NraW5nIHN0YXRlIG9mIHRoZSBzb2NrZXQgaGFzIGJlZW4gY2hhbmdlZCAqLwotICAgIG5vbmJsb2NraW5nID0gKHNvY2stPnNvY2tfdGltZW91dCA+PSAwLjApOwotICAgIEJJT19zZXRfbmJpbyhTU0xfZ2V0X3JiaW8oc2VsZi0+c3NsKSwgbm9uYmxvY2tpbmcpOwotICAgIEJJT19zZXRfbmJpbyhTU0xfZ2V0X3diaW8oc2VsZi0+c3NsKSwgbm9uYmxvY2tpbmcpOworICAgIHRpbWVvdXQgPSBHRVRfU09DS0VUX1RJTUVPVVQoc29jayk7CisgICAgaGFzX3RpbWVvdXQgPSAodGltZW91dCA+IDApOworICAgIGlmIChoYXNfdGltZW91dCkKKyAgICAgICAgZGVhZGxpbmUgPSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCkgKyB0aW1lb3V0OwogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMTgwOCw2ICsyMDU5LDcgQEAKICAgICAgICAgICAgIFNTTF9zZXRfcmVhZF9haGVhZChzZWxmLT5zc2wsIDApOwogICAgICAgICBlcnIgPSBTU0xfc2h1dGRvd24oc2VsZi0+c3NsKTsKICAgICAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKwogICAgICAgICAvKiBJZiBlcnIgPT0gMSwgYSBzZWN1cmUgc2h1dGRvd24gd2l0aCBTU0xfc2h1dGRvd24oKSBpcyBjb21wbGV0ZSAqLwogICAgICAgICBpZiAoZXJyID4gMCkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgyMiwxNCArMjA3NCwxOCBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoaGFzX3RpbWVvdXQpCisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCk7CisKICAgICAgICAgLyogUG9zc2libHkgcmV0cnkgc2h1dGRvd24gdW50aWwgdGltZW91dCBvciBmYWlsdXJlICovCiAgICAgICAgIHNzbF9lcnIgPSBTU0xfZ2V0X2Vycm9yKHNlbGYtPnNzbCwgZXJyKTsKICAgICAgICAgaWYgKHNzbF9lcnIgPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCkKLSAgICAgICAgICAgIHNvY2tzdGF0ZSA9IGNoZWNrX3NvY2tldF9hbmRfd2FpdF9mb3JfdGltZW91dChzb2NrLCAwKTsKKyAgICAgICAgICAgIHNvY2tzdGF0ZSA9IFB5U1NMX3NlbGVjdChzb2NrLCAwLCB0aW1lb3V0KTsKICAgICAgICAgZWxzZSBpZiAoc3NsX2VyciA9PSBTU0xfRVJST1JfV0FOVF9XUklURSkKLSAgICAgICAgICAgIHNvY2tzdGF0ZSA9IGNoZWNrX3NvY2tldF9hbmRfd2FpdF9mb3JfdGltZW91dChzb2NrLCAxKTsKKyAgICAgICAgICAgIHNvY2tzdGF0ZSA9IFB5U1NMX3NlbGVjdChzb2NrLCAxLCB0aW1lb3V0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX1RJTUVEX09VVCkgewogICAgICAgICAgICAgaWYgKHNzbF9lcnIgPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCkKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTb2NrZXRNb2R1bGUudGltZW91dF9lcnJvciwKQEAgLTE4NTAsMjcgKzIxMDYsMzEgQEAKICAgICB9CiAKICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoc29jayk7CisgICAgICAgIFB5X1hERUNSRUYoc29jayk7CiAgICAgICAgIHJldHVybiBQeVNTTF9TZXRFcnJvcihzZWxmLCBlcnIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CiAgICAgfQotICAgIGVsc2UKKyAgICBpZiAoc29jaykKICAgICAgICAgLyogSXQncyBhbHJlYWR5IElOQ1JFRidlZCAqLwogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNvY2s7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIAogZXJyb3I6Ci0gICAgUHlfREVDUkVGKHNvY2spOworICAgIFB5X1hERUNSRUYoc29jayk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihQeVNTTF9TU0xzaHV0ZG93bl9kb2MsCi0ic2h1dGRvd24ocykgLT4gc29ja2V0XG5cCi1cblwKLURvZXMgdGhlIFNTTCBzaHV0ZG93biBoYW5kc2hha2Ugd2l0aCB0aGUgcmVtb3RlIGVuZCwgYW5kIHJldHVybnNcblwKLXRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitfc3NsLl9TU0xTb2NrZXQudGxzX3VuaXF1ZV9jYgogCi0jaWYgSEFWRV9PUEVOU1NMX0ZJTklTSEVECitSZXR1cm5zIHRoZSAndGxzLXVuaXF1ZScgY2hhbm5lbCBiaW5kaW5nIGRhdGEsIGFzIGRlZmluZWQgYnkgUkZDIDU5MjkuCisKK0lmIHRoZSBUTFMgaGFuZHNoYWtlIGlzIG5vdCB5ZXQgY29tcGxldGUsIE5vbmUgaXMgcmV0dXJuZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVNTTF90bHNfdW5pcXVlX2NiKFB5U1NMU29ja2V0ICpzZWxmKQorX3NzbF9fU1NMU29ja2V0X3Rsc191bmlxdWVfY2JfaW1wbChQeVNTTFNvY2tldCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mM2E4MzJkNjAzZjU4NmFmIGlucHV0PTQzOTUyNWM3YjNkOGQzNGRdKi8KIHsKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKICAgICBjaGFyIGJ1ZltQeVNTTF9DQl9NQVhMRU5dOwpAQCAtMTg5NCw0MiArMjE1NCwzMiBAQAogICAgIHJldHVybiByZXR2YWw7CiB9CiAKLVB5RG9jX1NUUlZBUihQeVNTTF90bHNfdW5pcXVlX2NiX2RvYywKLSJ0bHNfdW5pcXVlX2NiKCkgLT4gYnl0ZXNcblwKLVxuXAotUmV0dXJucyB0aGUgJ3Rscy11bmlxdWUnIGNoYW5uZWwgYmluZGluZyBkYXRhLCBhcyBkZWZpbmVkIGJ5IFJGQyA1OTI5LlxuXAotXG5cCi1JZiB0aGUgVExTIGhhbmRzaGFrZSBpcyBub3QgeWV0IGNvbXBsZXRlLCBOb25lIGlzIHJldHVybmVkIik7Ci0KLSNlbmRpZiAvKiBIQVZFX09QRU5TU0xfRklOSVNIRUQgKi8KLQogc3RhdGljIFB5R2V0U2V0RGVmIHNzbF9nZXRzZXRsaXN0W10gPSB7CiAgICAgeyJjb250ZXh0IiwgKGdldHRlcikgUHlTU0xfZ2V0X2NvbnRleHQsCiAgICAgICAgICAgICAgICAgKHNldHRlcikgUHlTU0xfc2V0X2NvbnRleHQsIFB5U1NMX3NldF9jb250ZXh0X2RvY30sCisgICAgeyJzZXJ2ZXJfc2lkZSIsIChnZXR0ZXIpIFB5U1NMX2dldF9zZXJ2ZXJfc2lkZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgUHlTU0xfZ2V0X3NlcnZlcl9zaWRlX2RvY30sCisgICAgeyJzZXJ2ZXJfaG9zdG5hbWUiLCAoZ2V0dGVyKSBQeVNTTF9nZXRfc2VydmVyX2hvc3RuYW1lLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlTU0xfZ2V0X3NlcnZlcl9ob3N0bmFtZV9kb2N9LAorICAgIHsib3duZXIiLCAoZ2V0dGVyKSBQeVNTTF9nZXRfb3duZXIsIChzZXR0ZXIpIFB5U1NMX3NldF9vd25lciwKKyAgICAgICAgICAgICAgUHlTU0xfZ2V0X293bmVyX2RvY30sCiAgICAge05VTEx9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCiBzdGF0aWMgUHlNZXRob2REZWYgUHlTU0xNZXRob2RzW10gPSB7Ci0gICAgeyJkb19oYW5kc2hha2UiLCAoUHlDRnVuY3Rpb24pUHlTU0xfU1NMZG9faGFuZHNoYWtlLCBNRVRIX05PQVJHU30sCi0gICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbilQeVNTTF9TU0x3cml0ZSwgTUVUSF9WQVJBUkdTLAotICAgICBQeVNTTF9TU0x3cml0ZV9kb2N9LAotICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilQeVNTTF9TU0xyZWFkLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFB5U1NMX1NTTHJlYWRfZG9jfSwKLSAgICB7InBlbmRpbmciLCAoUHlDRnVuY3Rpb24pUHlTU0xfU1NMcGVuZGluZywgTUVUSF9OT0FSR1MsCi0gICAgIFB5U1NMX1NTTHBlbmRpbmdfZG9jfSwKLSAgICB7InBlZXJfY2VydGlmaWNhdGUiLCAoUHlDRnVuY3Rpb24pUHlTU0xfcGVlcmNlcnQsIE1FVEhfVkFSQVJHUywKLSAgICAgUHlTU0xfcGVlcmNlcnRfZG9jfSwKLSAgICB7ImNpcGhlciIsIChQeUNGdW5jdGlvbilQeVNTTF9jaXBoZXIsIE1FVEhfTk9BUkdTfSwKLSNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECi0gICAgeyJzZWxlY3RlZF9ucG5fcHJvdG9jb2wiLCAoUHlDRnVuY3Rpb24pUHlTU0xfc2VsZWN0ZWRfbnBuX3Byb3RvY29sLCBNRVRIX05PQVJHU30sCi0jZW5kaWYKLSAgICB7ImNvbXByZXNzaW9uIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX2NvbXByZXNzaW9uLCBNRVRIX05PQVJHU30sCi0gICAgeyJzaHV0ZG93biIsIChQeUNGdW5jdGlvbilQeVNTTF9TU0xzaHV0ZG93biwgTUVUSF9OT0FSR1MsCi0gICAgIFB5U1NMX1NTTHNodXRkb3duX2RvY30sCi0jaWYgSEFWRV9PUEVOU1NMX0ZJTklTSEVECi0gICAgeyJ0bHNfdW5pcXVlX2NiIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX3Rsc191bmlxdWVfY2IsIE1FVEhfTk9BUkdTLAotICAgICBQeVNTTF90bHNfdW5pcXVlX2NiX2RvY30sCi0jZW5kaWYKKyAgICBfU1NMX19TU0xTT0NLRVRfRE9fSEFORFNIQUtFX01FVEhPRERFRgorICAgIF9TU0xfX1NTTFNPQ0tFVF9XUklURV9NRVRIT0RERUYKKyAgICBfU1NMX19TU0xTT0NLRVRfUkVBRF9NRVRIT0RERUYKKyAgICBfU1NMX19TU0xTT0NLRVRfUEVORElOR19NRVRIT0RERUYKKyAgICBfU1NMX19TU0xTT0NLRVRfUEVFUl9DRVJUSUZJQ0FURV9NRVRIT0RERUYKKyAgICBfU1NMX19TU0xTT0NLRVRfQ0lQSEVSX01FVEhPRERFRgorICAgIF9TU0xfX1NTTFNPQ0tFVF9TSEFSRURfQ0lQSEVSU19NRVRIT0RERUYKKyAgICBfU1NMX19TU0xTT0NLRVRfVkVSU0lPTl9NRVRIT0RERUYKKyAgICBfU1NMX19TU0xTT0NLRVRfU0VMRUNURURfTlBOX1BST1RPQ09MX01FVEhPRERFRgorICAgIF9TU0xfX1NTTFNPQ0tFVF9TRUxFQ1RFRF9BTFBOX1BST1RPQ09MX01FVEhPRERFRgorICAgIF9TU0xfX1NTTFNPQ0tFVF9DT01QUkVTU0lPTl9NRVRIT0RERUYKKyAgICBfU1NMX19TU0xTT0NLRVRfU0hVVERPV05fTUVUSE9EREVGCisgICAgX1NTTF9fU1NMU09DS0VUX1RMU19VTklRVUVfQ0JfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9CiB9OwogCkBAIC0xOTcyLDE5ICsyMjIyLDIzIEBACiAgKiBfU1NMQ29udGV4dCBvYmplY3RzCiAgKi8KIAorLypbY2xpbmljIGlucHV0XQorQGNsYXNzbWV0aG9kCitfc3NsLl9TU0xDb250ZXh0Ll9fbmV3X18KKyAgICBwcm90b2NvbCBhcyBwcm90b192ZXJzaW9uOiBpbnQKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1jb250ZXh0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19zc2xfX1NTTENvbnRleHRfaW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIGludCBwcm90b192ZXJzaW9uKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTJjZjBkN2EwNzQxYjZiZDEgaW5wdXQ9OGQ1OGE4MDViOTVmYzUzNF0qLwogewotICAgIGNoYXIgKmt3bGlzdFtdID0geyJwcm90b2NvbCIsIE5VTEx9OwogICAgIFB5U1NMQ29udGV4dCAqc2VsZjsKLSAgICBpbnQgcHJvdG9fdmVyc2lvbiA9IFBZX1NTTF9WRVJTSU9OX1NTTDIzOwogICAgIGxvbmcgb3B0aW9uczsKICAgICBTU0xfQ1RYICpjdHggPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoCi0gICAgICAgIGFyZ3MsIGt3ZHMsICJpOl9TU0xDb250ZXh0Iiwga3dsaXN0LAotICAgICAgICAmcHJvdG9fdmVyc2lvbikpCi0gICAgICAgIHJldHVybiBOVUxMOworI2lmIGRlZmluZWQoU1NMX01PREVfUkVMRUFTRV9CVUZGRVJTKQorICAgIHVuc2lnbmVkIGxvbmcgbGlidmVyOworI2VuZGlmCiAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMSkKQEAgLTIwMzAsNiArMjI4NCw5IEBACiAjaWZkZWYgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAogICAgIHNlbGYtPm5wbl9wcm90b2NvbHMgPSBOVUxMOwogI2VuZGlmCisjaWZkZWYgSEFWRV9BTFBOCisgICAgc2VsZi0+YWxwbl9wcm90b2NvbHMgPSBOVUxMOworI2VuZGlmCiAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCiAgICAgc2VsZi0+c2V0X2hvc3RuYW1lID0gTlVMTDsKICNlbmRpZgpAQCAtMjA0NCw2ICsyMzAxLDIyIEBACiAgICAgICAgIG9wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYzOwogICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc2VsZi0+Y3R4LCBvcHRpb25zKTsKIAorI2lmIGRlZmluZWQoU1NMX01PREVfUkVMRUFTRV9CVUZGRVJTKQorICAgIC8qIFNldCBTU0xfTU9ERV9SRUxFQVNFX0JVRkZFUlMuIFRoaXMgcG90ZW50aWFsbHkgZ3JlYXRseSByZWR1Y2VzIG1lbW9yeQorICAgICAgIHVzYWdlIGZvciBubyBjb3N0IGF0IGFsbC4gSG93ZXZlciwgZG9uJ3QgZG8gdGhpcyBmb3IgT3BlblNTTCB2ZXJzaW9ucworICAgICAgIGJldHdlZW4gMS4wLjEgYW5kIDEuMC4xaCBvciAxLjAuMCBhbmQgMS4wLjBtLCB3aGljaCBhcmUgYWZmZWN0ZWQgYnkgQ1ZFCisgICAgICAgMjAxNC0wMTk4LiBJIGNhbid0IGZpbmQgZXhhY3RseSB3aGljaCBiZXRhIGZpeGVkIHRoaXMgQ1ZFLCBzbyBiZQorICAgICAgIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lIGl0IHdhc24ndCBmaXhlZCB1bnRpbCByZWxlYXNlLiBXZSBkbyB0aGlzIGNoZWNrCisgICAgICAgYXQgcnVudGltZSB0byBhdm9pZCBwcm9ibGVtcyBmcm9tIHRoZSBkeW5hbWljIGxpbmtlci4KKyAgICAgICBTZWUgIzI1NjcyIGZvciBtb3JlIG9uIHRoaXMuICovCisgICAgbGlidmVyID0gU1NMZWF5KCk7CisgICAgaWYgKCEobGlidmVyID49IDB4MTAwMDEwMDBVTCAmJiBsaWJ2ZXIgPCAweDEwMDAxMDhmVUwpICYmCisgICAgICAgICEobGlidmVyID49IDB4MTAwMDAwMDBVTCAmJiBsaWJ2ZXIgPCAweDEwMDAwMGRmVUwpKSB7CisgICAgICAgIFNTTF9DVFhfc2V0X21vZGUoc2VsZi0+Y3R4LCBTU0xfTU9ERV9SRUxFQVNFX0JVRkZFUlMpOworICAgIH0KKyNlbmRpZgorCisKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICiAgICAgLyogQWxsb3cgYXV0b21hdGljIEVDREggY3VydmUgc2VsZWN0aW9uIChvbiBPcGVuU1NMIDEuMC4yKyksIG9yIHVzZQogICAgICAgIHByaW1lMjU2djEgYnkgZGVmYXVsdC4gIFRoaXMgaXMgQXBhY2hlIG1vZF9zc2wncyBpbml0aWFsaXphdGlvbgpAQCAtMjEwMCwyMCArMjM3MywyNSBAQAogICAgIGNvbnRleHRfY2xlYXIoc2VsZik7CiAgICAgU1NMX0NUWF9mcmVlKHNlbGYtPmN0eCk7CiAjaWZkZWYgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAotICAgIFB5TWVtX0ZyZWUoc2VsZi0+bnBuX3Byb3RvY29scyk7CisgICAgUHlNZW1fRlJFRShzZWxmLT5ucG5fcHJvdG9jb2xzKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfQUxQTgorICAgIFB5TWVtX0ZSRUUoc2VsZi0+YWxwbl9wcm90b2NvbHMpOwogI2VuZGlmCiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXNldF9jaXBoZXJzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgaW50IHJldDsKLSAgICBjb25zdCBjaGFyICpjaXBoZXJsaXN0OworLypbY2xpbmljIGlucHV0XQorX3NzbC5fU1NMQ29udGV4dC5zZXRfY2lwaGVycworICAgIGNpcGhlcmxpc3Q6IHN0cgorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpzZXRfY2lwaGVycyIsICZjaXBoZXJsaXN0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0ID0gU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Qoc2VsZi0+Y3R4LCBjaXBoZXJsaXN0KTsKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X3NldF9jaXBoZXJzX2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmLCBjb25zdCBjaGFyICpjaXBoZXJsaXN0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNhMzE2MmYzNTU3YzBmM2YgaW5wdXQ9YTdhYzkzMWI5ZjNjYTdmY10qLworeworICAgIGludCByZXQgPSBTU0xfQ1RYX3NldF9jaXBoZXJfbGlzdChzZWxmLT5jdHgsIGNpcGhlcmxpc3QpOwogICAgIGlmIChyZXQgPT0gMCkgewogICAgICAgICAvKiBDbGVhcmluZyB0aGUgZXJyb3IgcXVldWUgaXMgbmVjZXNzYXJ5IG9uIHNvbWUgT3BlblNTTCB2ZXJzaW9ucywKICAgICAgICAgICAgb3RoZXJ3aXNlIHRoZSBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGFnYWluIHdoZW4gYW5vdGhlciBTU0wgY2FsbApAQCAtMjEyNyw2ICsyNDA1LDMwIEBACiB9CiAKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECitzdGF0aWMgaW50Citkb19wcm90b2NvbF9zZWxlY3Rpb24oaW50IGFscG4sIHVuc2lnbmVkIGNoYXIgKipvdXQsIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZXJ2ZXJfcHJvdG9jb2xzLCB1bnNpZ25lZCBpbnQgc2VydmVyX3Byb3RvY29sc19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpZW50X3Byb3RvY29scywgdW5zaWduZWQgaW50IGNsaWVudF9wcm90b2NvbHNfbGVuKQoreworICAgIGludCByZXQ7CisgICAgaWYgKGNsaWVudF9wcm90b2NvbHMgPT0gTlVMTCkgeworICAgICAgICBjbGllbnRfcHJvdG9jb2xzID0gKHVuc2lnbmVkIGNoYXIgKikiIjsKKyAgICAgICAgY2xpZW50X3Byb3RvY29sc19sZW4gPSAwOworICAgIH0KKyAgICBpZiAoc2VydmVyX3Byb3RvY29scyA9PSBOVUxMKSB7CisgICAgICAgIHNlcnZlcl9wcm90b2NvbHMgPSAodW5zaWduZWQgY2hhciAqKSIiOworICAgICAgICBzZXJ2ZXJfcHJvdG9jb2xzX2xlbiA9IDA7CisgICAgfQorCisgICAgcmV0ID0gU1NMX3NlbGVjdF9uZXh0X3Byb3RvKG91dCwgb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcHJvdG9jb2xzLCBzZXJ2ZXJfcHJvdG9jb2xzX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3Byb3RvY29scywgY2xpZW50X3Byb3RvY29sc19sZW4pOworICAgIGlmIChhbHBuICYmIHJldCAhPSBPUEVOU1NMX05QTl9ORUdPVElBVEVEKQorICAgICAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfTk9BQ0s7CisKKyAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfT0s7Cit9CisKIC8qIHRoaXMgY2FsbGJhY2sgZ2V0cyBwYXNzZWQgdG8gU1NMX0NUWF9zZXRfbmV4dF9wcm90b3NfYWR2ZXJ0aXNlX2NiICovCiBzdGF0aWMgaW50CiBfYWR2ZXJ0aXNlTlBOX2NiKFNTTCAqcywKQEAgLTIxMzYsMTAgKzI0MzgsMTAgQEAKICAgICBQeVNTTENvbnRleHQgKnNzbF9jdHggPSAoUHlTU0xDb250ZXh0ICopIGFyZ3M7CiAKICAgICBpZiAoc3NsX2N0eC0+bnBuX3Byb3RvY29scyA9PSBOVUxMKSB7Ci0gICAgICAgICpkYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgIiI7CisgICAgICAgICpkYXRhID0gKHVuc2lnbmVkIGNoYXIgKikiIjsKICAgICAgICAgKmxlbiA9IDA7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgKmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBzc2xfY3R4LT5ucG5fcHJvdG9jb2xzOworICAgICAgICAqZGF0YSA9IHNzbF9jdHgtPm5wbl9wcm90b2NvbHM7CiAgICAgICAgICpsZW4gPSBzc2xfY3R4LT5ucG5fcHJvdG9jb2xzX2xlbjsKICAgICB9CiAKQEAgLTIxNTIsNDYgKzI0NTQsMzAgQEAKICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VydmVyLCB1bnNpZ25lZCBpbnQgc2VydmVyX2xlbiwKICAgICAgICAgICAgICAgdm9pZCAqYXJncykKIHsKLSAgICBQeVNTTENvbnRleHQgKnNzbF9jdHggPSAoUHlTU0xDb250ZXh0ICopIGFyZ3M7Ci0KLSAgICB1bnNpZ25lZCBjaGFyICpjbGllbnQgPSAodW5zaWduZWQgY2hhciAqKSBzc2xfY3R4LT5ucG5fcHJvdG9jb2xzOwotICAgIGludCBjbGllbnRfbGVuOwotCi0gICAgaWYgKGNsaWVudCA9PSBOVUxMKSB7Ci0gICAgICAgIGNsaWVudCA9ICh1bnNpZ25lZCBjaGFyICopICIiOwotICAgICAgICBjbGllbnRfbGVuID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBjbGllbnRfbGVuID0gc3NsX2N0eC0+bnBuX3Byb3RvY29sc19sZW47Ci0gICAgfQotCi0gICAgU1NMX3NlbGVjdF9uZXh0X3Byb3RvKG91dCwgb3V0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIsIHNlcnZlcl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudCwgY2xpZW50X2xlbik7Ci0KLSAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgUHlTU0xDb250ZXh0ICpjdHggPSAoUHlTU0xDb250ZXh0ICopYXJnczsKKyAgICByZXR1cm4gZG9fcHJvdG9jb2xfc2VsZWN0aW9uKDAsIG91dCwgb3V0bGVuLCBzZXJ2ZXIsIHNlcnZlcl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm5wbl9wcm90b2NvbHMsIGN0eC0+bnBuX3Byb3RvY29sc19sZW4pOwogfQogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTENvbnRleHQuX3NldF9ucG5fcHJvdG9jb2xzCisgICAgcHJvdG9zOiBQeV9idWZmZXIKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1fc2V0X25wbl9wcm90b2NvbHMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19zc2xfX1NTTENvbnRleHRfX3NldF9ucG5fcHJvdG9jb2xzX2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9idWZmZXIgKnByb3RvcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03MmIwMDJjMzMyNDM5MGM2IGlucHV0PTMxOWZjYjY2YWJmOTViZDddKi8KIHsKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECi0gICAgUHlfYnVmZmVyIHByb3RvczsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6c2V0X25wbl9wcm90b2NvbHMiLCAmcHJvdG9zKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoc2VsZi0+bnBuX3Byb3RvY29scyAhPSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+bnBuX3Byb3RvY29scyk7Ci0gICAgfQotCi0gICAgc2VsZi0+bnBuX3Byb3RvY29scyA9IFB5TWVtX01hbGxvYyhwcm90b3MubGVuKTsKLSAgICBpZiAoc2VsZi0+bnBuX3Byb3RvY29scyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnByb3Rvcyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5ucG5fcHJvdG9jb2xzKTsKKyAgICBzZWxmLT5ucG5fcHJvdG9jb2xzID0gUHlNZW1fTWFsbG9jKHByb3Rvcy0+bGVuKTsKKyAgICBpZiAoc2VsZi0+bnBuX3Byb3RvY29scyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9Ci0gICAgbWVtY3B5KHNlbGYtPm5wbl9wcm90b2NvbHMsIHByb3Rvcy5idWYsIHByb3Rvcy5sZW4pOwotICAgIHNlbGYtPm5wbl9wcm90b2NvbHNfbGVuID0gKGludCkgcHJvdG9zLmxlbjsKKyAgICBtZW1jcHkoc2VsZi0+bnBuX3Byb3RvY29scywgcHJvdG9zLT5idWYsIHByb3Rvcy0+bGVuKTsKKyAgICBzZWxmLT5ucG5fcHJvdG9jb2xzX2xlbiA9IChpbnQpIHByb3Rvcy0+bGVuOwogCiAgICAgLyogc2V0IGJvdGggc2VydmVyIGFuZCBjbGllbnQgY2FsbGJhY2tzLCBiZWNhdXNlIHRoZSBjb250ZXh0IGNhbgogICAgICAqIGJlIHVzZWQgdG8gY3JlYXRlIGJvdGggdHlwZXMgb2Ygc29ja2V0cyAqLwpAQCAtMjIwMiw3ICsyNDg4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2VsZWN0TlBOX2NiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpOwogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcHJvdG9zKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKICNlbHNlCiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCkBAIC0yMjExLDYgKzI0OTYsNTEgQEAKICNlbmRpZgogfQogCisjaWZkZWYgSEFWRV9BTFBOCitzdGF0aWMgaW50Citfc2VsZWN0QUxQTl9jYihTU0wgKnMsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKipvdXQsIHVuc2lnbmVkIGNoYXIgKm91dGxlbiwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2xpZW50X3Byb3RvY29scywgdW5zaWduZWQgaW50IGNsaWVudF9wcm90b2NvbHNfbGVuLAorICAgICAgICAgICAgICB2b2lkICphcmdzKQoreworICAgIFB5U1NMQ29udGV4dCAqY3R4ID0gKFB5U1NMQ29udGV4dCAqKWFyZ3M7CisgICAgcmV0dXJuIGRvX3Byb3RvY29sX3NlbGVjdGlvbigxLCAodW5zaWduZWQgY2hhciAqKilvdXQsIG91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+YWxwbl9wcm90b2NvbHMsIGN0eC0+YWxwbl9wcm90b2NvbHNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3Byb3RvY29scywgY2xpZW50X3Byb3RvY29sc19sZW4pOworfQorI2VuZGlmCisKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTENvbnRleHQuX3NldF9hbHBuX3Byb3RvY29scworICAgIHByb3RvczogUHlfYnVmZmVyCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMQ29udGV4dF9fc2V0X2FscG5fcHJvdG9jb2xzX2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfYnVmZmVyICpwcm90b3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODc1OTlhN2Y3NjY1MWE5YiBpbnB1dD05YmJhOTY0NTk1ZDUxOWJlXSovCit7CisjaWZkZWYgSEFWRV9BTFBOCisgICAgUHlNZW1fRlJFRShzZWxmLT5hbHBuX3Byb3RvY29scyk7CisgICAgc2VsZi0+YWxwbl9wcm90b2NvbHMgPSBQeU1lbV9NYWxsb2MocHJvdG9zLT5sZW4pOworICAgIGlmICghc2VsZi0+YWxwbl9wcm90b2NvbHMpCisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIG1lbWNweShzZWxmLT5hbHBuX3Byb3RvY29scywgcHJvdG9zLT5idWYsIHByb3Rvcy0+bGVuKTsKKyAgICBzZWxmLT5hbHBuX3Byb3RvY29sc19sZW4gPSBwcm90b3MtPmxlbjsKKworICAgIGlmIChTU0xfQ1RYX3NldF9hbHBuX3Byb3RvcyhzZWxmLT5jdHgsIHNlbGYtPmFscG5fcHJvdG9jb2xzLCBzZWxmLT5hbHBuX3Byb3RvY29sc19sZW4pKQorICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICBTU0xfQ1RYX3NldF9hbHBuX3NlbGVjdF9jYihzZWxmLT5jdHgsIF9zZWxlY3RBTFBOX2NiLCBzZWxmKTsKKworICAgIFB5X1JFVFVSTl9OT05FOworI2Vsc2UKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlRoZSBBTFBOIGV4dGVuc2lvbiByZXF1aXJlcyBPcGVuU1NMIDEuMC4yIG9yIGxhdGVyLiIpOworICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfdmVyaWZ5X21vZGUoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQogewpAQCAtMjI1NCw3ICsyNTg0LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotI2lmZGVmIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfdmVyaWZ5X2ZsYWdzKFB5U1NMQ29udGV4dCAqc2VsZiwgdm9pZCAqYykKIHsKQEAgLTIyOTIsNyArMjYyMSw2IEBACiAgICAgfQogICAgIHJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfb3B0aW9ucyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCkBAIC0yNDQ5LDExICsyNzc3LDE5IEBACiAgICAgcmV0dXJuIC0xOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfc3NsLl9TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbgorICAgIGNlcnRmaWxlOiBvYmplY3QKKyAgICBrZXlmaWxlOiBvYmplY3QgPSBOVUxMCisgICAgcGFzc3dvcmQ6IG9iamVjdCA9IE5VTEwKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbG9hZF9jZXJ0X2NoYWluKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3NzbF9fU1NMQ29udGV4dF9sb2FkX2NlcnRfY2hhaW5faW1wbChQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICpjZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmtleWZpbGUsIFB5T2JqZWN0ICpwYXNzd29yZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05NDgwYmMxYzM4MGUyMDk1IGlucHV0PTdjZjlhYzY3M2NiZWU2ZmNdKi8KIHsKLSAgICBjaGFyICprd2xpc3RbXSA9IHsiY2VydGZpbGUiLCAia2V5ZmlsZSIsICJwYXNzd29yZCIsIE5VTEx9OwotICAgIFB5T2JqZWN0ICpjZXJ0ZmlsZSwgKmtleWZpbGUgPSBOVUxMLCAqcGFzc3dvcmQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpjZXJ0ZmlsZV9ieXRlcyA9IE5VTEwsICprZXlmaWxlX2J5dGVzID0gTlVMTDsKICAgICBwZW1fcGFzc3dvcmRfY2IgKm9yaWdfcGFzc3dkX2NiID0gc2VsZi0+Y3R4LT5kZWZhdWx0X3Bhc3N3ZF9jYWxsYmFjazsKICAgICB2b2lkICpvcmlnX3Bhc3N3ZF91c2VyZGF0YSA9IHNlbGYtPmN0eC0+ZGVmYXVsdF9wYXNzd2RfY2FsbGJhY2tfdXNlcmRhdGE7CkBAIC0yNDYyLDEwICsyNzk4LDYgQEAKIAogICAgIGVycm5vID0gMDsKICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAotICAgICAgICAiT3xPTzpsb2FkX2NlcnRfY2hhaW4iLCBrd2xpc3QsCi0gICAgICAgICZjZXJ0ZmlsZSwgJmtleWZpbGUsICZwYXNzd29yZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChrZXlmaWxlID09IFB5X05vbmUpCiAgICAgICAgIGtleWZpbGUgPSBOVUxMOwogICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKGNlcnRmaWxlLCAmY2VydGZpbGVfYnl0ZXMpKSB7CkBAIC0yNjMzLDIxICsyOTY1LDI2IEBACiB9CiAKIAorLypbY2xpbmljIGlucHV0XQorX3NzbC5fU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMKKyAgICBjYWZpbGU6IG9iamVjdCA9IE5VTEwKKyAgICBjYXBhdGg6IG9iamVjdCA9IE5VTEwKKyAgICBjYWRhdGE6IG9iamVjdCA9IE5VTEwKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbG9hZF92ZXJpZnlfbG9jYXRpb25zKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3NzbF9fU1NMQ29udGV4dF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnNfaW1wbChQeVNTTENvbnRleHQgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjYWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjYXBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjYWRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDU0YzdlNDEyMzBjYTU1MSBpbnB1dD05OTdmMWZiM2E3ODRlZjg4XSovCiB7Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7ImNhZmlsZSIsICJjYXBhdGgiLCAiY2FkYXRhIiwgTlVMTH07Ci0gICAgUHlPYmplY3QgKmNhZmlsZSA9IE5VTEwsICpjYXBhdGggPSBOVUxMLCAqY2FkYXRhID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2FmaWxlX2J5dGVzID0gTlVMTCwgKmNhcGF0aF9ieXRlcyA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqY2FmaWxlX2J1ZiA9IE5VTEwsICpjYXBhdGhfYnVmID0gTlVMTDsKICAgICBpbnQgciA9IDAsIG9rID0gMTsKIAogICAgIGVycm5vID0gMDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAotICAgICAgICAifE9PTzpsb2FkX3ZlcmlmeV9sb2NhdGlvbnMiLCBrd2xpc3QsCi0gICAgICAgICZjYWZpbGUsICZjYXBhdGgsICZjYWRhdGEpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChjYWZpbGUgPT0gUHlfTm9uZSkKICAgICAgICAgY2FmaWxlID0gTlVMTDsKICAgICBpZiAoY2FwYXRoID09IFB5X05vbmUpCkBAIC0yNzQ0LDE4ICszMDgxLDI0IEBACiAgICAgfQogfQogCisvKltjbGluaWMgaW5wdXRdCitfc3NsLl9TU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zCisgICAgcGF0aCBhcyBmaWxlcGF0aDogb2JqZWN0CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1sb2FkX2RoX3BhcmFtcyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICpmaWxlcGF0aCkKK19zc2xfX1NTTENvbnRleHRfbG9hZF9kaF9wYXJhbXMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqZmlsZXBhdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWM4ZTU3YTM4ZTA1NWFmMCBpbnB1dD1jODg3MWYzYzc5NmFlMWQ2XSovCiB7CiAgICAgRklMRSAqZjsKICAgICBESCAqZGg7CiAKICAgICBmID0gX1B5X2ZvcGVuX29iaihmaWxlcGF0aCwgInJiIik7Ci0gICAgaWYgKGYgPT0gTlVMTCkgewotICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgZmlsZXBhdGgpOworICAgIGlmIChmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKwogICAgIGVycm5vID0gMDsKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZGggPSBQRU1fcmVhZF9ESHBhcmFtcyhmLCBOVUxMLCBOVUxMLCBOVUxMKTsKQEAgLTI3NzcsMzggKzMxMjAsNzYgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3NzbC5fU1NMQ29udGV4dC5fd3JhcF9zb2NrZXQKKyAgICBzb2NrOiBvYmplY3Qoc3ViY2xhc3Nfb2Y9IlB5U29ja2V0TW9kdWxlLlNvY2tfVHlwZSIpCisgICAgc2VydmVyX3NpZGU6IGludAorICAgIHNlcnZlcl9ob3N0bmFtZSBhcyBob3N0bmFtZV9vYmo6IG9iamVjdCA9IE5vbmUKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotY29udGV4dF93cmFwX3NvY2tldChQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19zc2xfX1NTTENvbnRleHRfX3dyYXBfc29ja2V0X2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcnZlcl9zaWRlLCBQeU9iamVjdCAqaG9zdG5hbWVfb2JqKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTY5NzNlNGI2MDk5NWU5MzMgaW5wdXQ9ODM4NTliOTE1NmRkZmM2M10qLwogewotICAgIGNoYXIgKmt3bGlzdFtdID0geyJzb2NrIiwgInNlcnZlcl9zaWRlIiwgInNlcnZlcl9ob3N0bmFtZSIsIE5VTEx9OwotICAgIFB5U29ja2V0U29ja09iamVjdCAqc29jazsKLSAgICBpbnQgc2VydmVyX3NpZGUgPSAwOwogICAgIGNoYXIgKmhvc3RuYW1lID0gTlVMTDsKLSAgICBQeU9iamVjdCAqaG9zdG5hbWVfb2JqLCAqcmVzOworICAgIFB5T2JqZWN0ICpyZXM7CiAKICAgICAvKiBzZXJ2ZXJfaG9zdG5hbWUgaXMgZWl0aGVyIE5vbmUgKG9yIGFic2VudCksIG9yIHRvIGJlIGVuY29kZWQKICAgICAgICB1c2luZyB0aGUgaWRuYSBlbmNvZGluZy4gKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiTyFpfE8hOl93cmFwX3NvY2tldCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVNvY2tldE1vZHVsZS5Tb2NrX1R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNvY2ssICZzZXJ2ZXJfc2lkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKFB5X05vbmUpLCAmaG9zdG5hbWVfb2JqKSkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiTyFpZXQ6X3dyYXBfc29ja2V0Iiwga3dsaXN0LAotICAgICAgICAgICAgUHlTb2NrZXRNb2R1bGUuU29ja19UeXBlLAotICAgICAgICAgICAgJnNvY2ssICZzZXJ2ZXJfc2lkZSwKLSAgICAgICAgICAgICJpZG5hIiwgJmhvc3RuYW1lKSkKKyAgICBpZiAoaG9zdG5hbWVfb2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZShob3N0bmFtZV9vYmosICJldCIsICJpZG5hIiwgJmhvc3RuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJlcyA9IChQeU9iamVjdCAqKSBuZXdQeVNTTFNvY2tldChzZWxmLCBzb2NrLCBzZXJ2ZXJfc2lkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdG5hbWUpOworICAgIHJlcyA9IChQeU9iamVjdCAqKSBuZXdQeVNTTFNvY2tldChzZWxmLCAoUHlTb2NrZXRTb2NrT2JqZWN0ICopc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGUsIGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKICAgICBpZiAoaG9zdG5hbWUgIT0gTlVMTCkKICAgICAgICAgUHlNZW1fRnJlZShob3N0bmFtZSk7CiAgICAgcmV0dXJuIHJlczsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3NzbC5fU1NMQ29udGV4dC5fd3JhcF9iaW8KKyAgICBpbmNvbWluZzogb2JqZWN0KHN1YmNsYXNzX29mPSImUHlTU0xNZW1vcnlCSU9fVHlwZSIsIHR5cGU9IlB5U1NMTWVtb3J5QklPICoiKQorICAgIG91dGdvaW5nOiBvYmplY3Qoc3ViY2xhc3Nfb2Y9IiZQeVNTTE1lbW9yeUJJT19UeXBlIiwgdHlwZT0iUHlTU0xNZW1vcnlCSU8gKiIpCisgICAgc2VydmVyX3NpZGU6IGludAorICAgIHNlcnZlcl9ob3N0bmFtZSBhcyBob3N0bmFtZV9vYmo6IG9iamVjdCA9IE5vbmUKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotc2Vzc2lvbl9zdGF0cyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCitfc3NsX19TU0xDb250ZXh0X193cmFwX2Jpb19pbXBsKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlTU0xNZW1vcnlCSU8gKmluY29taW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVNTTE1lbW9yeUJJTyAqb3V0Z29pbmcsIGludCBzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmhvc3RuYW1lX29iaikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00ZmU0YmE3NWFkOTU5NDBkIGlucHV0PTE3NzI1ZWNkYWMwYmYyMjBdKi8KK3sKKyAgICBjaGFyICpob3N0bmFtZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIC8qIHNlcnZlcl9ob3N0bmFtZSBpcyBlaXRoZXIgTm9uZSAob3IgYWJzZW50KSwgb3IgdG8gYmUgZW5jb2RlZAorICAgICAgIHVzaW5nIHRoZSBpZG5hIGVuY29kaW5nLiAqLworICAgIGlmIChob3N0bmFtZV9vYmogIT0gUHlfTm9uZSkgeworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlKGhvc3RuYW1lX29iaiwgImV0IiwgImlkbmEiLCAmaG9zdG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzID0gKFB5T2JqZWN0ICopIG5ld1B5U1NMU29ja2V0KHNlbGYsIE5VTEwsIHNlcnZlcl9zaWRlLCBob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcsIG91dGdvaW5nKTsKKworICAgIFB5TWVtX0ZyZWUoaG9zdG5hbWUpOworICAgIHJldHVybiByZXM7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTENvbnRleHQuc2Vzc2lvbl9zdGF0cworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMQ29udGV4dF9zZXNzaW9uX3N0YXRzX2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBkOTY0MTFjNDI4OTNiZmIgaW5wdXQ9N2UwYTgxZmIxMTEwMmM4Yl0qLwogewogICAgIGludCByOwogICAgIFB5T2JqZWN0ICp2YWx1ZSwgKnN0YXRzID0gUHlEaWN0X05ldygpOwpAQCAtMjg0Niw4ICszMjI3LDEzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorX3NzbF9fU1NMQ29udGV4dF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfaW1wbChQeVNTTENvbnRleHQgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGJlZTc0ZTZlMDlkZWFhYSBpbnB1dD0zNWYzNDA4MDIxNDYzZDc0XSovCiB7CiAgICAgaWYgKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhzZWxmLT5jdHgpKSB7CiAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOwpAQCAtMjg1Nyw4ICszMjQzLDE2IEBACiB9CiAKICNpZm5kZWYgT1BFTlNTTF9OT19FQ0RICisvKltjbGluaWMgaW5wdXRdCitfc3NsLl9TU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlCisgICAgbmFtZTogb2JqZWN0CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1zZXRfZWNkaF9jdXJ2ZShQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICpuYW1lKQorX3NzbF9fU1NMQ29udGV4dF9zZXRfZWNkaF9jdXJ2ZShQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIzMDIyYzE5NmU0MGQ3ZDIgaW5wdXQ9YzJiYWZiNmY2ZTM0NzI2Yl0qLwogewogICAgIFB5T2JqZWN0ICpuYW1lX2J5dGVzOwogICAgIGludCBuaWQ7CkBAIC0yOTEzLDExICszMzA3LDI1IEBACiAKICAgICBzc2wgPSBTU0xfZ2V0X2FwcF9kYXRhKHMpOwogICAgIGFzc2VydChQeVNTTFNvY2tldF9DaGVjayhzc2wpKTsKLSAgICBzc2xfc29ja2V0ID0gUHlXZWFrcmVmX0dldE9iamVjdChzc2wtPlNvY2tldCk7CisKKyAgICAvKiBUaGUgc2VydmVybmFtZSBjYWxsYmFjayBleHBlY3RzIGFuIGFyZ3VtZW50IHRoYXQgcmVwcmVzZW50cyB0aGUgY3VycmVudAorICAgICAqIFNTTCBjb25uZWN0aW9uIGFuZCB0aGF0IGhhcyBhIC5jb250ZXh0IGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSBjaGFuZ2VkIHRvCisgICAgICogaWRlbnRpZnkgdGhlIHJlcXVlc3RlZCBob3N0bmFtZS4gU2luY2UgdGhlIG9mZmljaWFsIEFQSSBpcyB0aGUgUHl0aG9uCisgICAgICogbGV2ZWwgQVBJIHdlIHdhbnQgdG8gcGFzcyB0aGUgY2FsbGJhY2sgYSBQeXRob24gbGV2ZWwgb2JqZWN0IHJhdGhlciB0aGFuCisgICAgICogYSBfc3NsLlNTTFNvY2tldCBpbnN0YW5jZS4gSWYgdGhlcmUncyBhbiAib3duZXIiICh0eXBpY2FsbHkgYW4KKyAgICAgKiBTU0xPYmplY3QpIHRoYXQgd2lsbCBiZSBwYXNzZWQuIE90aGVyd2lzZSBpZiB0aGVyZSdzIGEgc29ja2V0IHRoZW4gdGhhdAorICAgICAqIHdpbGwgYmUgcGFzc2VkLiBJZiBib3RoIGRvIG5vdCBleGlzdCBvbmx5IHRoZW4gdGhlIEMtbGV2ZWwgb2JqZWN0IGlzCisgICAgICogcGFzc2VkLiAqLworICAgIGlmIChzc2wtPm93bmVyKQorICAgICAgICBzc2xfc29ja2V0ID0gUHlXZWFrcmVmX0dldE9iamVjdChzc2wtPm93bmVyKTsKKyAgICBlbHNlIGlmIChzc2wtPlNvY2tldCkKKyAgICAgICAgc3NsX3NvY2tldCA9IFB5V2Vha3JlZl9HZXRPYmplY3Qoc3NsLT5Tb2NrZXQpOworICAgIGVsc2UKKyAgICAgICAgc3NsX3NvY2tldCA9IChQeU9iamVjdCAqKSBzc2w7CisKICAgICBQeV9JTkNSRUYoc3NsX3NvY2tldCk7Ci0gICAgaWYgKHNzbF9zb2NrZXQgPT0gUHlfTm9uZSkgeworICAgIGlmIChzc2xfc29ja2V0ID09IFB5X05vbmUpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQogCiAgICAgaWYgKHNlcnZlcm5hbWUgPT0gTlVMTCkgewogICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKQEAgLTI5NzgsMjUgKzMzODYsMjMgQEAKIH0KICNlbmRpZgogCi1QeURvY19TVFJWQVIoUHlTU0xfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tfZG9jLAotInNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKG1ldGhvZClcblwKLVxuXAotVGhpcyBzZXRzIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgc2VydmVyIG5hbWUgaXMgcHJvdmlkZWQgYnlcblwKLXRoZSBTU0wvVExTIGNsaWVudCBpbiB0aGUgU05JIGV4dGVuc2lvbi5cblwKLVxuXAotSWYgdGhlIGFyZ3VtZW50IGlzIE5vbmUgdGhlbiB0aGUgY2FsbGJhY2sgaXMgZGlzYWJsZWQuIFRoZSBtZXRob2QgaXMgY2FsbGVkXG5cCi13aXRoIHRoZSBTU0xTb2NrZXQsIHRoZSBzZXJ2ZXIgbmFtZSBhcyBhIHN0cmluZywgYW5kIHRoZSBTU0xDb250ZXh0IG9iamVjdC5cblwKLVNlZSBSRkMgNjA2NiBmb3IgZGV0YWlscyBvZiB0aGUgU05JIGV4dGVuc2lvbi4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuX1NTTENvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2sKKyAgICBtZXRob2QgYXMgY2I6IG9iamVjdAorICAgIC8KKworU2V0IGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgc2VydmVyIG5hbWUgaXMgcHJvdmlkZWQgYnkgdGhlIFNTTC9UTFMgY2xpZW50IGluIHRoZSBTTkkgZXh0ZW5zaW9uLgorCitJZiB0aGUgYXJndW1lbnQgaXMgTm9uZSB0aGVuIHRoZSBjYWxsYmFjayBpcyBkaXNhYmxlZC4gVGhlIG1ldGhvZCBpcyBjYWxsZWQKK3dpdGggdGhlIFNTTFNvY2tldCwgdGhlIHNlcnZlciBuYW1lIGFzIGEgc3RyaW5nLCBhbmQgdGhlIFNTTENvbnRleHQgb2JqZWN0LgorU2VlIFJGQyA2MDY2IGZvciBkZXRhaWxzIG9mIHRoZSBTTkkgZXh0ZW5zaW9uLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19zc2xfX1NTTENvbnRleHRfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqY2IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzQzOWExYjJkNWQzYjdlYSBpbnB1dD1hMmE4MzYyMDE5N2Q2MDJiXSovCiB7CiAjaWYgSEFWRV9TTkkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19UTFNFWFQpCi0gICAgUHlPYmplY3QgKmNiOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJmNiKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBQeV9DTEVBUihzZWxmLT5zZXRfaG9zdG5hbWUpOwogICAgIGlmIChjYiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgTlVMTCk7CkBAIC0zMDIzLDE3ICszNDI5LDIxIEBACiAjZW5kaWYKIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9zdGF0c19kb2MsCi0iY2VydF9zdG9yZV9zdGF0cygpIC0+IHsnY3JsJzogaW50LCAneDUwOV9jYSc6IGludCwgJ3g1MDknOiBpbnR9XG5cCi1cblwKLVJldHVybnMgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLiBYLjUwOSBjZXJ0aWZpY2F0ZXMgd2l0aCBhXG5cCi1DQSBleHRlbnNpb24gYW5kIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgaW5zaWRlIHRoZSBjb250ZXh0J3MgY2VydFxuXAotc3RvcmUuXG5cCi1OT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZVxuXAotYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuIik7CisvKltjbGluaWMgaW5wdXRdCitfc3NsLl9TU0xDb250ZXh0LmNlcnRfc3RvcmVfc3RhdHMKKworUmV0dXJucyBxdWFudGl0aWVzIG9mIGxvYWRlZCBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisKK1guNTA5IGNlcnRpZmljYXRlcyB3aXRoIGEgQ0EgZXh0ZW5zaW9uIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzCitpbnNpZGUgdGhlIGNvbnRleHQncyBjZXJ0IHN0b3JlLgorCitOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZQorYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jZXJ0X3N0b3JlX3N0YXRzKFB5U1NMQ29udGV4dCAqc2VsZikKK19zc2xfX1NTTENvbnRleHRfY2VydF9zdG9yZV9zdGF0c19pbXBsKFB5U1NMQ29udGV4dCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZjM1NmY0ZDljY2E4NzRkIGlucHV0PWViNDBkZDBmNmQwZTQwY2ZdKi8KIHsKICAgICBYNTA5X1NUT1JFICpzdG9yZTsKICAgICBYNTA5X09CSkVDVCAqb2JqOwpAQCAtMzA2NiwyNyArMzQ3NiwyNiBAQAogICAgICAgICAieDUwOV9jYSIsIGNhKTsKIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9jYV9jZXJ0c19kb2MsCi0iZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKSAtPiBsaXN0IG9mIGxvYWRlZCBjZXJ0aWZpY2F0ZVxuXAotXG5cCi1SZXR1cm5zIGEgbGlzdCBvZiBkaWN0cyB3aXRoIGluZm9ybWF0aW9uIG9mIGxvYWRlZCBDQSBjZXJ0cy4gSWYgdGhlXG5cCi1vcHRpb25hbCBhcmd1bWVudCBpcyBUcnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0EgY2VydGlmaWNhdGUuXG5cCi1OT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZVxuXAotYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuIik7CisvKltjbGluaWMgaW5wdXRdCitfc3NsLl9TU0xDb250ZXh0LmdldF9jYV9jZXJ0cworICAgIGJpbmFyeV9mb3JtOiBib29sID0gRmFsc2UKKworUmV0dXJucyBhIGxpc3Qgb2YgZGljdHMgd2l0aCBpbmZvcm1hdGlvbiBvZiBsb2FkZWQgQ0EgY2VydHMuCisKK0lmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBpcyBUcnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0EKK2NlcnRpZmljYXRlLgorCitOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZQorYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1nZXRfY2FfY2VydHMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfc3NsX19TU0xDb250ZXh0X2dldF9jYV9jZXJ0c19pbXBsKFB5U1NMQ29udGV4dCAqc2VsZiwgaW50IGJpbmFyeV9mb3JtKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBkNThmMTQ4ZjM3ZTI5MzggaW5wdXQ9Njg4N2I1YTA5YjdmOTA3Nl0qLwogewotICAgIGNoYXIgKmt3bGlzdFtdID0geyJiaW5hcnlfZm9ybSIsIE5VTEx9OwogICAgIFg1MDlfU1RPUkUgKnN0b3JlOwogICAgIFB5T2JqZWN0ICpjaSA9IE5VTEwsICpybGlzdCA9IE5VTEw7CiAgICAgaW50IGk7Ci0gICAgaW50IGJpbmFyeV9tb2RlID0gMDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8cDpnZXRfY2FfY2VydHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmJpbmFyeV9tb2RlKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICBpZiAoKHJsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMxMDcsNyArMzUxNiw3IEBACiAgICAgICAgIGlmICghWDUwOV9jaGVja19jYShjZXJ0KSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGJpbmFyeV9tb2RlKSB7CisgICAgICAgIGlmIChiaW5hcnlfZm9ybSkgewogICAgICAgICAgICAgY2kgPSBfY2VydGlmaWNhdGVfdG9fZGVyKGNlcnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY2kgPSBfZGVjb2RlX2NlcnRpZmljYXRlKGNlcnQpOwpAQCAtMzEzNCw0MiArMzU0MywyOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfY2hlY2tfaG9zdG5hbWUsIE5VTEx9LAogICAgIHsib3B0aW9ucyIsIChnZXR0ZXIpIGdldF9vcHRpb25zLAogICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF9vcHRpb25zLCBOVUxMfSwKLSNpZmRlZiBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCiAgICAgeyJ2ZXJpZnlfZmxhZ3MiLCAoZ2V0dGVyKSBnZXRfdmVyaWZ5X2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X3ZlcmlmeV9mbGFncywgTlVMTH0sCi0jZW5kaWYKICAgICB7InZlcmlmeV9tb2RlIiwgKGdldHRlcikgZ2V0X3ZlcmlmeV9tb2RlLAogICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfdmVyaWZ5X21vZGUsIE5VTEx9LAogICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBjb250ZXh0X21ldGhvZHNbXSA9IHsKLSAgICB7Il93cmFwX3NvY2tldCIsIChQeUNGdW5jdGlvbikgY29udGV4dF93cmFwX3NvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgTlVMTH0sCi0gICAgeyJzZXRfY2lwaGVycyIsIChQeUNGdW5jdGlvbikgc2V0X2NpcGhlcnMsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgTlVMTH0sCi0gICAgeyJfc2V0X25wbl9wcm90b2NvbHMiLCAoUHlDRnVuY3Rpb24pIF9zZXRfbnBuX3Byb3RvY29scywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgTlVMTH0sCi0gICAgeyJsb2FkX2NlcnRfY2hhaW4iLCAoUHlDRnVuY3Rpb24pIGxvYWRfY2VydF9jaGFpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIE5VTEx9LAotICAgIHsibG9hZF9kaF9wYXJhbXMiLCAoUHlDRnVuY3Rpb24pIGxvYWRfZGhfcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICBNRVRIX08sIE5VTEx9LAotICAgIHsibG9hZF92ZXJpZnlfbG9jYXRpb25zIiwgKFB5Q0Z1bmN0aW9uKSBsb2FkX3ZlcmlmeV9sb2NhdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBOVUxMfSwKLSAgICB7InNlc3Npb25fc3RhdHMiLCAoUHlDRnVuY3Rpb24pIHNlc3Npb25fc3RhdHMsCi0gICAgICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIE5VTEx9LAotICAgIHsic2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzIiwgKFB5Q0Z1bmN0aW9uKSBzZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgTlVMTH0sCi0jaWZuZGVmIE9QRU5TU0xfTk9fRUNESAotICAgIHsic2V0X2VjZGhfY3VydmUiLCAoUHlDRnVuY3Rpb24pIHNldF9lY2RoX2N1cnZlLAotICAgICAgICAgICAgICAgICAgICAgICBNRVRIX08sIE5VTEx9LAotI2VuZGlmCi0gICAgeyJzZXRfc2VydmVybmFtZV9jYWxsYmFjayIsIChQeUNGdW5jdGlvbikgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgUHlTU0xfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tfZG9jfSwKLSAgICB7ImNlcnRfc3RvcmVfc3RhdHMiLCAoUHlDRnVuY3Rpb24pIGNlcnRfc3RvcmVfc3RhdHMsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBQeVNTTF9nZXRfc3RhdHNfZG9jfSwKLSAgICB7ImdldF9jYV9jZXJ0cyIsIChQeUNGdW5jdGlvbikgZ2V0X2NhX2NlcnRzLAotICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF9nZXRfY2FfY2VydHNfZG9jfSwKKyAgICBfU1NMX19TU0xDT05URVhUX19XUkFQX1NPQ0tFVF9NRVRIT0RERUYKKyAgICBfU1NMX19TU0xDT05URVhUX19XUkFQX0JJT19NRVRIT0RERUYKKyAgICBfU1NMX19TU0xDT05URVhUX1NFVF9DSVBIRVJTX01FVEhPRERFRgorICAgIF9TU0xfX1NTTENPTlRFWFRfX1NFVF9BTFBOX1BST1RPQ09MU19NRVRIT0RERUYKKyAgICBfU1NMX19TU0xDT05URVhUX19TRVRfTlBOX1BST1RPQ09MU19NRVRIT0RERUYKKyAgICBfU1NMX19TU0xDT05URVhUX0xPQURfQ0VSVF9DSEFJTl9NRVRIT0RERUYKKyAgICBfU1NMX19TU0xDT05URVhUX0xPQURfREhfUEFSQU1TX01FVEhPRERFRgorICAgIF9TU0xfX1NTTENPTlRFWFRfTE9BRF9WRVJJRllfTE9DQVRJT05TX01FVEhPRERFRgorICAgIF9TU0xfX1NTTENPTlRFWFRfU0VTU0lPTl9TVEFUU19NRVRIT0RERUYKKyAgICBfU1NMX19TU0xDT05URVhUX1NFVF9ERUZBVUxUX1ZFUklGWV9QQVRIU19NRVRIT0RERUYKKyAgICBfU1NMX19TU0xDT05URVhUX1NFVF9FQ0RIX0NVUlZFX01FVEhPRERFRgorICAgIF9TU0xfX1NTTENPTlRFWFRfU0VUX1NFUlZFUk5BTUVfQ0FMTEJBQ0tfTUVUSE9EREVGCisgICAgX1NTTF9fU1NMQ09OVEVYVF9DRVJUX1NUT1JFX1NUQVRTX01FVEhPRERFRgorICAgIF9TU0xfX1NTTENPTlRFWFRfR0VUX0NBX0NFUlRTX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTMyMTEsMjMgKzM2MDYsMjUyIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdG9mZnNldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwotICAgIGNvbnRleHRfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25ldyovCisgICAgX3NzbF9fU1NMQ29udGV4dCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KIH07CiAKIAorLyoKKyAqIE1lbW9yeUJJTyBvYmplY3RzCisgKi8KIAotI2lmZGVmIEhBVkVfT1BFTlNTTF9SQU5ECisvKltjbGluaWMgaW5wdXRdCitAY2xhc3NtZXRob2QKK19zc2wuTWVtb3J5QklPLl9fbmV3X18KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9NZW1vcnlCSU9faW1wbChQeVR5cGVPYmplY3QgKnR5cGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODgyMGE1OGRiNzgzMzBhYyBpbnB1dD0yNmQyMmU0OTA5ZWNiMWI1XSovCit7CisgICAgQklPICpiaW87CisgICAgUHlTU0xNZW1vcnlCSU8gKnNlbGY7CisKKyAgICBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoYmlvID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U1NMRXJyb3JPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGFsbG9jYXRlIEJJTyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyogU2luY2Ugb3VyIEJJTyBpcyBub24tYmxvY2tpbmcgYW4gZW1wdHkgcmVhZCgpIGRvZXMgbm90IGluZGljYXRlIEVPRiwKKyAgICAgKiBqdXN0IHRoYXQgbm8gZGF0YSBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLiBUaGUgU1NMIHJvdXRpbmVzIHNob3VsZCByZXRyeQorICAgICAqIHRoZSByZWFkLCB3aGljaCB3ZSBjYW4gYWNoaWV2ZSBieSBjYWxsaW5nIEJJT19zZXRfcmV0cnlfcmVhZCgpLiAqLworICAgIEJJT19zZXRfcmV0cnlfcmVhZChiaW8pOworICAgIEJJT19zZXRfbWVtX2VvZl9yZXR1cm4oYmlvLCAtMSk7CisKKyAgICBhc3NlcnQodHlwZSAhPSBOVUxMICYmIHR5cGUtPnRwX2FsbG9jICE9IE5VTEwpOworICAgIHNlbGYgPSAoUHlTU0xNZW1vcnlCSU8gKikgdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkgeworICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2VsZi0+YmlvID0gYmlvOworICAgIHNlbGYtPmVvZl93cml0dGVuID0gMDsKKworICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKK30KKworc3RhdGljIHZvaWQKK21lbW9yeV9iaW9fZGVhbGxvYyhQeVNTTE1lbW9yeUJJTyAqc2VsZikKK3sKKyAgICBCSU9fZnJlZShzZWxmLT5iaW8pOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfYmlvX2dldF9wZW5kaW5nKFB5U1NMTWVtb3J5QklPICpzZWxmLCB2b2lkICpjKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoQklPX2N0cmxfcGVuZGluZyhzZWxmLT5iaW8pKTsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX21lbW9yeV9iaW9fcGVuZGluZ19kb2MsCisiVGhlIG51bWJlciBvZiBieXRlcyBwZW5kaW5nIGluIHRoZSBtZW1vcnkgQklPLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X2Jpb19nZXRfZW9mKFB5U1NMTWVtb3J5QklPICpzZWxmLCB2b2lkICpjKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKEJJT19jdHJsX3BlbmRpbmcoc2VsZi0+YmlvKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VsZi0+ZW9mX3dyaXR0ZW4pOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfbWVtb3J5X2Jpb19lb2ZfZG9jLAorIldoZXRoZXIgdGhlIG1lbW9yeSBCSU8gaXMgYXQgRU9GLiIpOworCisvKltjbGluaWMgaW5wdXRdCitfc3NsLk1lbW9yeUJJTy5yZWFkCisgICAgc2l6ZSBhcyBsZW46IGludCA9IC0xCisgICAgLworCitSZWFkIHVwIHRvIHNpemUgYnl0ZXMgZnJvbSB0aGUgbWVtb3J5IEJJTy4KKworSWYgc2l6ZSBpcyBub3Qgc3BlY2lmaWVkLCByZWFkIHRoZSBlbnRpcmUgYnVmZmVyLgorSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhbiBlbXB0eSBieXRlcyBpbnN0YW5jZSwgdGhpcyBtZWFucyBlaXRoZXIKK0VPRiBvciB0aGF0IG5vIGRhdGEgaXMgYXZhaWxhYmxlLiBVc2UgdGhlICJlb2YiIHByb3BlcnR5IHRvCitkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSB0d28uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX01lbW9yeUJJT19yZWFkX2ltcGwoUHlTU0xNZW1vcnlCSU8gKnNlbGYsIGludCBsZW4pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTY1N2FhMWU3OWNkMDFiMyBpbnB1dD01NzRkN2JlMDZhOTAyMzY2XSovCit7CisgICAgaW50IGF2YWlsLCBuYnl0ZXM7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKworICAgIGF2YWlsID0gQklPX2N0cmxfcGVuZGluZyhzZWxmLT5iaW8pOworICAgIGlmICgobGVuIDwgMCkgfHwgKGxlbiA+IGF2YWlsKSkKKyAgICAgICAgbGVuID0gYXZhaWw7CisKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbik7CisgICAgaWYgKChyZXN1bHQgPT0gTlVMTCkgfHwgKGxlbiA9PSAwKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIG5ieXRlcyA9IEJJT19yZWFkKHNlbGYtPmJpbywgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSwgbGVuKTsKKyAgICAvKiBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgYW55IHNob3J0IHJlYWRzIGJ1dCBjaGVjayBhbnl3YXkuICovCisgICAgaWYgKChuYnl0ZXMgPCBsZW4pICYmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgbGVuKSA8IDApKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKltjbGluaWMgaW5wdXRdCitfc3NsLk1lbW9yeUJJTy53cml0ZQorICAgIGI6IFB5X2J1ZmZlcgorICAgIC8KKworV3JpdGVzIHRoZSBieXRlcyBiIGludG8gdGhlIG1lbW9yeSBCSU8uCisKK1JldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9NZW1vcnlCSU9fd3JpdGVfaW1wbChQeVNTTE1lbW9yeUJJTyAqc2VsZiwgUHlfYnVmZmVyICpiKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE1NmVjNTkxMTBkNzU5MzUgaW5wdXQ9ZTQ1NzU3YjNlMTdjNDgwOF0qLworeworICAgIGludCBuYnl0ZXM7CisKKyAgICBpZiAoYi0+bGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgbG9uZ2VyIHRoYW4gJWQgYnl0ZXMiLCBJTlRfTUFYKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHNlbGYtPmVvZl93cml0dGVuKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCB3cml0ZSgpIGFmdGVyIHdyaXRlX2VvZigpIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG5ieXRlcyA9IEJJT193cml0ZShzZWxmLT5iaW8sIGItPmJ1ZiwgYi0+bGVuKTsKKyAgICBpZiAobmJ5dGVzIDwgMCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhuYnl0ZXMpOworfQorCisvKltjbGluaWMgaW5wdXRdCitfc3NsLk1lbW9yeUJJTy53cml0ZV9lb2YKKworV3JpdGUgYW4gRU9GIG1hcmtlciB0byB0aGUgbWVtb3J5IEJJTy4KKworV2hlbiBhbGwgZGF0YSBoYXMgYmVlbiByZWFkLCB0aGUgImVvZiIgcHJvcGVydHkgd2lsbCBiZSBUcnVlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9NZW1vcnlCSU9fd3JpdGVfZW9mX2ltcGwoUHlTU0xNZW1vcnlCSU8gKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDQxMDYyNzZjY2QxZWQzNCBpbnB1dD01NmE5NDVmMWQyOWU4YmQ2XSovCit7CisgICAgc2VsZi0+ZW9mX3dyaXR0ZW4gPSAxOworICAgIC8qIEFmdGVyIGFuIEVPRiBpcyB3cml0dGVuLCBhIHplcm8gcmV0dXJuIGZyb20gcmVhZCgpIHNob3VsZCBiZSBhIHJlYWwgRU9GCisgICAgICogaS5lLiBpdCBzaG91bGQgbm90IGJlIHJldHJpZWQuIENsZWFyIHRoZSBTSE9VTERfUkVUUlkgZmxhZy4gKi8KKyAgICBCSU9fY2xlYXJfcmV0cnlfZmxhZ3Moc2VsZi0+YmlvKTsKKyAgICBCSU9fc2V0X21lbV9lb2ZfcmV0dXJuKHNlbGYtPmJpbywgMCk7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5R2V0U2V0RGVmIG1lbW9yeV9iaW9fZ2V0c2V0bGlzdFtdID0geworICAgIHsicGVuZGluZyIsIChnZXR0ZXIpIG1lbW9yeV9iaW9fZ2V0X3BlbmRpbmcsIE5VTEwsCisgICAgICAgICAgICAgICAgUHlTU0xfbWVtb3J5X2Jpb19wZW5kaW5nX2RvY30sCisgICAgeyJlb2YiLCAoZ2V0dGVyKSBtZW1vcnlfYmlvX2dldF9lb2YsIE5VTEwsCisgICAgICAgICAgICBQeVNTTF9tZW1vcnlfYmlvX2VvZl9kb2N9LAorICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBtZW1vcnlfYmlvX21ldGhvZHNbXSA9IHsKKyAgICBfU1NMX01FTU9SWUJJT19SRUFEX01FVEhPRERFRgorICAgIF9TU0xfTUVNT1JZQklPX1dSSVRFX01FVEhPRERFRgorICAgIF9TU0xfTUVNT1JZQklPX1dSSVRFX0VPRl9NRVRIT0RERUYKKyAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IFB5U1NMTWVtb3J5QklPX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIl9zc2wuTWVtb3J5QklPIiwgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoUHlTU0xNZW1vcnlCSU8pLCAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAoZGVzdHJ1Y3RvciltZW1vcnlfYmlvX2RlYWxsb2MsICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2gqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZsYWdzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCisgICAgbWVtb3J5X2Jpb19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCisgICAgbWVtb3J5X2Jpb19nZXRzZXRsaXN0LCAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdG9mZnNldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLworICAgIF9zc2xfTWVtb3J5QklPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25ldyovCit9OworCiAKIC8qIGhlbHBlciByb3V0aW5lcyBmb3Igc2VlZGluZyB0aGUgU1NMIFBSTkcgKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1QeVNTTF9SQU5EX2FkZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgY2hhciAqYnVmOwotICAgIFB5X3NzaXplX3QgbGVuLCB3cml0dGVuOwotICAgIGRvdWJsZSBlbnRyb3B5OworLypbY2xpbmljIGlucHV0XQorX3NzbC5SQU5EX2FkZAorICAgIHN0cmluZyBhcyB2aWV3OiBQeV9idWZmZXIoYWNjZXB0PXtzdHIsIGJ1ZmZlcn0pCisgICAgZW50cm9weTogZG91YmxlCisgICAgLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2Q6UkFORF9hZGQiLCAmYnVmLCAmbGVuLCAmZW50cm9weSkpCi0gICAgICAgIHJldHVybiBOVUxMOworTWl4IHN0cmluZyBpbnRvIHRoZSBPcGVuU1NMIFBSTkcgc3RhdGUuCisKK2VudHJvcHkgKGEgZmxvYXQpIGlzIGEgbG93ZXIgYm91bmQgb24gdGhlIGVudHJvcHkgY29udGFpbmVkIGluCitzdHJpbmcuICBTZWUgUkZDIDE3NTAuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX1JBTkRfYWRkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICp2aWV3LCBkb3VibGUgZW50cm9weSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNmRkNDhkZjljOTAyNGU5IGlucHV0PTU4MGM4NWU2YTNhNGZlMjldKi8KK3sKKyAgICBjb25zdCBjaGFyICpidWY7CisgICAgUHlfc3NpemVfdCBsZW4sIHdyaXR0ZW47CisKKyAgICBidWYgPSAoY29uc3QgY2hhciAqKXZpZXctPmJ1ZjsKKyAgICBsZW4gPSB2aWV3LT5sZW47CiAgICAgZG8gewogICAgICAgICB3cml0dGVuID0gUHlfTUlOKGxlbiwgSU5UX01BWCk7CiAgICAgICAgIFJBTkRfYWRkKGJ1ZiwgKGludCl3cml0dGVuLCBlbnRyb3B5KTsKQEAgLTMyMzgsMTIgKzM4NjIsNiBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCi1QeURvY19TVFJWQVIoUHlTU0xfUkFORF9hZGRfZG9jLAotIlJBTkRfYWRkKHN0cmluZywgZW50cm9weSlcblwKLVxuXAotTWl4IHN0cmluZyBpbnRvIHRoZSBPcGVuU1NMIFBSTkcgc3RhdGUuICBlbnRyb3B5IChhIGZsb2F0KSBpcyBhIGxvd2VyXG5cCi1ib3VuZCBvbiB0aGUgZW50cm9weSBjb250YWluZWQgaW4gc3RyaW5nLiAgU2VlIFJGQyAxNzUwLiIpOwotCiBzdGF0aWMgUHlPYmplY3QgKgogUHlTU0xfUkFORChpbnQgbGVuLCBpbnQgcHNldWRvKQogewpAQCAtMzI4Myw2MCArMzkwMSw3MiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfc3NsLlJBTkRfYnl0ZXMKKyAgICBuOiBpbnQKKyAgICAvCisKK0dlbmVyYXRlIG4gY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIHBzZXVkby1yYW5kb20gYnl0ZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVNTTF9SQU5EX2J5dGVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19zc2xfUkFORF9ieXRlc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBuKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk3N2RhNjM1ZTQ4MzhiYzcgaW5wdXQ9Njc4ZGRmMjg3MmRmZWJmY10qLwogewotICAgIGludCBsZW47Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOlJBTkRfYnl0ZXMiLCAmbGVuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5U1NMX1JBTkQobGVuLCAwKTsKKyAgICByZXR1cm4gUHlTU0xfUkFORChuLCAwKTsKIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX1JBTkRfYnl0ZXNfZG9jLAotIlJBTkRfYnl0ZXMobikgLT4gYnl0ZXNcblwKLVxuXAotR2VuZXJhdGUgbiBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcgcHNldWRvLXJhbmRvbSBieXRlcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuUkFORF9wc2V1ZG9fYnl0ZXMKKyAgICBuOiBpbnQKKyAgICAvCisKK0dlbmVyYXRlIG4gcHNldWRvLXJhbmRvbSBieXRlcy4KKworUmV0dXJuIGEgcGFpciAoYnl0ZXMsIGlzX2NyeXB0b2dyYXBoaWMpLiAgaXNfY3J5cHRvZ3JhcGhpYyBpcyBUcnVlCitpZiB0aGUgYnl0ZXMgZ2VuZXJhdGVkIGFyZSBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVNTTF9SQU5EX3BzZXVkb19ieXRlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfc3NsX1JBTkRfcHNldWRvX2J5dGVzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG4pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjE1MDllOTM3MDAwZTUyZCBpbnB1dD01ODMxMmJkNTNmOWJiZGQwXSovCiB7Ci0gICAgaW50IGxlbjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6UkFORF9wc2V1ZG9fYnl0ZXMiLCAmbGVuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5U1NMX1JBTkQobGVuLCAxKTsKKyAgICByZXR1cm4gUHlTU0xfUkFORChuLCAxKTsKIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX1JBTkRfcHNldWRvX2J5dGVzX2RvYywKLSJSQU5EX3BzZXVkb19ieXRlcyhuKSAtPiAoYnl0ZXMsIGlzX2NyeXB0b2dyYXBoaWMpXG5cCi1cblwKLUdlbmVyYXRlIG4gcHNldWRvLXJhbmRvbSBieXRlcy4gaXNfY3J5cHRvZ3JhcGhpYyBpcyBUcnVlIGlmIHRoZSBieXRlc1wKLWdlbmVyYXRlZCBhcmUgY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nLiIpOworLypbY2xpbmljIGlucHV0XQorX3NzbC5SQU5EX3N0YXR1cworCitSZXR1cm5zIDEgaWYgdGhlIE9wZW5TU0wgUFJORyBoYXMgYmVlbiBzZWVkZWQgd2l0aCBlbm91Z2ggZGF0YSBhbmQgMCBpZiBub3QuCisKK0l0IGlzIG5lY2Vzc2FyeSB0byBzZWVkIHRoZSBQUk5HIHdpdGggUkFORF9hZGQoKSBvbiBzb21lIHBsYXRmb3JtcyBiZWZvcmUKK3VzaW5nIHRoZSBzc2woKSBmdW5jdGlvbi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5U1NMX1JBTkRfc3RhdHVzKFB5T2JqZWN0ICpzZWxmKQorX3NzbF9SQU5EX3N0YXR1c19pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2UwYWFhMmQzOWZkYzFhZCBpbnB1dD04YTc3NGIwMmQxZGM4MWYzXSovCiB7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhSQU5EX3N0YXR1cygpKTsKIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX1JBTkRfc3RhdHVzX2RvYywKLSJSQU5EX3N0YXR1cygpIC0+IDAgb3IgMVxuXAotXG5cCi1SZXR1cm5zIDEgaWYgdGhlIE9wZW5TU0wgUFJORyBoYXMgYmVlbiBzZWVkZWQgd2l0aCBlbm91Z2ggZGF0YSBhbmQgMCBpZiBub3QuXG5cCi1JdCBpcyBuZWNlc3NhcnkgdG8gc2VlZCB0aGUgUFJORyB3aXRoIFJBTkRfYWRkKCkgb24gc29tZSBwbGF0Zm9ybXMgYmVmb3JlXG5cCi11c2luZyB0aGUgc3NsKCkgZnVuY3Rpb24uIik7CisjaWZuZGVmIE9QRU5TU0xfTk9fRUdECisvKltjbGluaWMgaW5wdXRdCitfc3NsLlJBTkRfZWdkCisgICAgcGF0aDogb2JqZWN0KGNvbnZlcnRlcj0iUHlVbmljb2RlX0ZTQ29udmVydGVyIikKKyAgICAvCiAKLSNpZmRlZiBIQVZFX1JBTkRfRUdECitRdWVyaWVzIHRoZSBlbnRyb3B5IGdhdGhlciBkYWVtb24gKEVHRCkgb24gdGhlIHNvY2tldCBuYW1lZCBieSAncGF0aCcuCisKK1JldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBSYWlzZXMgU1NMRXJyb3IgaWYgY29ubmVjdGlvbiB0byBFR0QKK2ZhaWxzIG9yIGlmIGl0IGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGRhdGEgdG8gc2VlZCBQUk5HLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotUHlTU0xfUkFORF9lZ2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3NzbF9SQU5EX2VnZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpwYXRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAyYTY3YzdjMzY3ZjUyZmEgaW5wdXQ9MWFlYjdlYjk0ODMxMjE5NV0qLwogewotICAgIFB5T2JqZWN0ICpwYXRoOwotICAgIGludCBieXRlczsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6UkFORF9lZ2QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZwYXRoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBieXRlcyA9IFJBTkRfZWdkKFB5Qnl0ZXNfQXNTdHJpbmcocGF0aCkpOworICAgIGludCBieXRlcyA9IFJBTkRfZWdkKFB5Qnl0ZXNfQXNTdHJpbmcocGF0aCkpOwogICAgIFB5X0RFQ1JFRihwYXRoKTsKICAgICBpZiAoYnl0ZXMgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U1NMRXJyb3JPYmplY3QsCkBAIC0zMzQ2LDI3ICszOTc2LDIxIEBACiAgICAgfQogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoYnl0ZXMpOwogfQotCi1QeURvY19TVFJWQVIoUHlTU0xfUkFORF9lZ2RfZG9jLAotIlJBTkRfZWdkKHBhdGgpIC0+IGJ5dGVzXG5cCi1cblwKLVF1ZXJpZXMgdGhlIGVudHJvcHkgZ2F0aGVyIGRhZW1vbiAoRUdEKSBvbiB0aGUgc29ja2V0IG5hbWVkIGJ5ICdwYXRoJy5cblwKLVJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBSYWlzZXMgU1NMRXJyb3IgaWYgY29ubmVjdGlvbiB0byBFR0RcblwKLWZhaWxzIG9yIGlmIGl0IGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGRhdGEgdG8gc2VlZCBQUk5HLiIpOwotI2VuZGlmIC8qIEhBVkVfUkFORF9FR0QgKi8KLQotI2VuZGlmIC8qIEhBVkVfT1BFTlNTTF9SQU5EICovCisjZW5kaWYgLyogT1BFTlNTTF9OT19FR0QgKi8KIAogCi1QeURvY19TVFJWQVIoUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX2RvYywKLSJnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSAtPiB0dXBsZVxuXAotXG5cCi1SZXR1cm4gc2VhcmNoIHBhdGhzIGFuZCBlbnZpcm9ubWVudCB2YXJzIHRoYXQgYXJlIHVzZWQgYnkgU1NMQ29udGV4dCdzXG5cCi1zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSB0byBsb2FkIGRlZmF1bHQgQ0FzLiBUaGUgdmFsdWVzIGFyZVxuXAotJ2NlcnRfZmlsZV9lbnYnLCAnY2VydF9maWxlJywgJ2NlcnRfZGlyX2VudicsICdjZXJ0X2RpcicuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzCisKK1JldHVybiBzZWFyY2ggcGF0aHMgYW5kIGVudmlyb25tZW50IHZhcnMgdGhhdCBhcmUgdXNlZCBieSBTU0xDb250ZXh0J3Mgc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgdG8gbG9hZCBkZWZhdWx0IENBcy4KKworVGhlIHZhbHVlcyBhcmUgJ2NlcnRfZmlsZV9lbnYnLCAnY2VydF9maWxlJywgJ2NlcnRfZGlyX2VudicsICdjZXJ0X2RpcicuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoUHlPYmplY3QgKnNlbGYpCitfc3NsX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTViNjJhNDY2MjcxOTI4YiBpbnB1dD01MjEwYzk1M2Q5OGMzZWI1XSovCiB7CiAgICAgUHlPYmplY3QgKm9maWxlX2VudiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm9maWxlID0gTlVMTDsKQEAgLTM0MjUsMjYgKzQwNDksMjQgQEAKICAgICB9CiB9CiAKLVB5RG9jX1NUUlZBUihQeVNTTF90eHQyb2JqX2RvYywKLSJ0eHQyb2JqKHR4dCwgbmFtZT1GYWxzZSkgLT4gKG5pZCwgc2hvcnRuYW1lLCBsb25nbmFtZSwgb2lkKVxuXAotXG5cCi1Mb29rdXAgTklELCBzaG9ydCBuYW1lLCBsb25nIG5hbWUgYW5kIE9JRCBvZiBhbiBBU04xX09CSkVDVC4gQnkgZGVmYXVsdFxuXAotb2JqZWN0cyBhcmUgbG9va2VkIHVwIGJ5IE9JRC4gV2l0aCBuYW1lPVRydWUgc2hvcnQgYW5kIGxvbmcgbmFtZSBhcmUgYWxzb1xuXAotbWF0Y2hlZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wudHh0Mm9iagorICAgIHR4dDogc3RyCisgICAgbmFtZTogYm9vbCA9IEZhbHNlCiAKLXN0YXRpYyBQeU9iamVjdCoKLVB5U1NMX3R4dDJvYmooUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNULgorCitCeSBkZWZhdWx0IG9iamVjdHMgYXJlIGxvb2tlZCB1cCBieSBPSUQuIFdpdGggbmFtZT1UcnVlIHNob3J0IGFuZAorbG9uZyBuYW1lIGFyZSBhbHNvIG1hdGNoZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX3R4dDJvYmpfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICp0eHQsIGludCBuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWMzOGUzOTkxMzQ3MDc5YzEgaW5wdXQ9MWMxZTdkMGFhN2M0ODYwMl0qLwogewotICAgIGNoYXIgKmt3bGlzdFtdID0geyJ0eHQiLCAibmFtZSIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIGNoYXIgKnR4dDsKLSAgICBpbnQgbmFtZSA9IDA7CiAgICAgQVNOMV9PQkpFQ1QgKm9iajsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJzfHA6dHh0Mm9iaiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmdHh0LCAmbmFtZSkpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIG9iaiA9IE9CSl90eHQyb2JqKHR4dCwgbmFtZSA/IDAgOiAxKTsKICAgICBpZiAob2JqID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIG9iamVjdCAnJS4xMDBzJyIsIHR4dCk7CkBAIC0zNDU1LDIxICs0MDc3LDIxIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX25pZDJvYmpfZG9jLAotIm5pZDJvYmoobmlkKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCi1cblwKLUxvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNUIGJ5IE5JRC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wubmlkMm9iagorICAgIG5pZDogaW50CisgICAgLwogCi1zdGF0aWMgUHlPYmplY3QqCi1QeVNTTF9uaWQyb2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNUIGJ5IE5JRC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfbmlkMm9ial9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBuaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NGE5OGFiNjkxY2Q0Zjg0YSBpbnB1dD01MTc4N2EzYmVlN2Q4Zjk4XSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgaW50IG5pZDsKICAgICBBU04xX09CSkVDVCAqb2JqOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm5pZDJvYmoiLCAmbmlkKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgaWYgKG5pZCA8IE5JRF91bmRlZikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIk5JRCBtdXN0IGJlIHBvc2l0aXZlLiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM1NjksMzAgKzQxOTEsMjggQEAKICAgICByZXR1cm4gcmV0dmFsOwogfQogCi1QeURvY19TVFJWQVIoUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXNfZG9jLAotImVudW1fY2VydGlmaWNhdGVzKHN0b3JlX25hbWUpIC0+IFtdXG5cCi1cblwKLVJldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIGNlcnQgc3RvcmUuIHN0b3JlX25hbWUgbWF5IGJlIG9uZSBvZlxuXAotJ0NBJywgJ1JPT1QnIG9yICdNWScuIFRoZSBzeXN0ZW0gbWF5IHByb3ZpZGUgbW9yZSBjZXJ0IHN0b3JhZ2VzLCB0b28uXG5cCi1UaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGJ5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLiBUaGVcblwKLWVuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAotUEtDU183X0FTTl9FTkNPRElORy4gVGhlIHRydXN0IHNldHRpbmcgaXMgZWl0aGVyIGEgc2V0IG9mIE9JRHMgb3IgdGhlXG5cCi1ib29sZWFuIFRydWUuIik7CisvKltjbGluaWMgaW5wdXRdCitfc3NsLmVudW1fY2VydGlmaWNhdGVzCisgICAgc3RvcmVfbmFtZTogc3RyCisKK1JldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIGNlcnQgc3RvcmUuCisKK3N0b3JlX25hbWUgbWF5IGJlIG9uZSBvZiAnQ0EnLCAnUk9PVCcgb3IgJ01ZJy4gIFRoZSBzeXN0ZW0gbWF5IHByb3ZpZGUKK21vcmUgY2VydCBzdG9yYWdlcywgdG9vLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChieXRlcywKK2VuY29kaW5nX3R5cGUsIHRydXN0KSB0dXBsZXMuICBUaGUgZW5jb2RpbmdfdHlwZSBmbGFnIGNhbiBiZSBpbnRlcnByZXRlZAord2l0aCBYNTA5X0FTTl9FTkNPRElORyBvciBQS0NTXzdfQVNOX0VOQ09ESU5HLiBUaGUgdHJ1c3Qgc2V0dGluZyBpcyBlaXRoZXIKK2Egc2V0IG9mIE9JRHMgb3IgdGhlIGJvb2xlYW4gVHJ1ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5U1NMX2VudW1fY2VydGlmaWNhdGVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfc3NsX2VudW1fY2VydGlmaWNhdGVzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqc3RvcmVfbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MTM0ZGM4YmIzYTNjODkzIGlucHV0PTkxNWY2MGQ3MDQ2MWVhNGVdKi8KIHsKLSAgICBjaGFyICprd2xpc3RbXSA9IHsic3RvcmVfbmFtZSIsIE5VTEx9OwotICAgIGNoYXIgKnN0b3JlX25hbWU7CiAgICAgSENFUlRTVE9SRSBoU3RvcmUgPSBOVUxMOwogICAgIFBDQ0VSVF9DT05URVhUIHBDZXJ0Q3R4ID0gTlVMTDsKICAgICBQeU9iamVjdCAqa2V5dXNhZ2UgPSBOVUxMLCAqY2VydCA9IE5VTEwsICplbmMgPSBOVUxMLCAqdHVwID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJzOmVudW1fY2VydGlmaWNhdGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZzdG9yZV9uYW1lKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgcmVzdWx0ID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNjYwLDI5ICs0MjgwLDI3IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUHlEb2NfU1RSVkFSKFB5U1NMX2VudW1fY3Jsc19kb2MsCi0iZW51bV9jcmxzKHN0b3JlX25hbWUpIC0+IFtdXG5cCi1cblwKLVJldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzJyBjZXJ0IHN0b3JlLiBzdG9yZV9uYW1lIG1heSBiZSBvbmUgb2ZcblwKLSdDQScsICdST09UJyBvciAnTVknLiBUaGUgc3lzdGVtIG1heSBwcm92aWRlIG1vcmUgY2VydCBzdG9yYWdlcywgdG9vLlxuXAotVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChieXRlcywgZW5jb2RpbmdfdHlwZSkgdHVwbGVzLiBUaGVcblwKLWVuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAotUEtDU183X0FTTl9FTkNPRElORy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19zc2wuZW51bV9jcmxzCisgICAgc3RvcmVfbmFtZTogc3RyCisKK1JldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzJyBjZXJ0IHN0b3JlLgorCitzdG9yZV9uYW1lIG1heSBiZSBvbmUgb2YgJ0NBJywgJ1JPT1QnIG9yICdNWScuICBUaGUgc3lzdGVtIG1heSBwcm92aWRlCittb3JlIGNlcnQgc3RvcmFnZXMsIHRvby4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoYnl0ZXMsCitlbmNvZGluZ190eXBlKSB0dXBsZXMuICBUaGUgZW5jb2RpbmdfdHlwZSBmbGFnIGNhbiBiZSBpbnRlcnByZXRlZCB3aXRoCitYNTA5X0FTTl9FTkNPRElORyBvciBQS0NTXzdfQVNOX0VOQ09ESU5HLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlTU0xfZW51bV9jcmxzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfc3NsX2VudW1fY3Jsc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKnN0b3JlX25hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmNlNDY3ZjYwY2NkMDNiNiBpbnB1dD1hMWYxZDc2MjlmMWM1ZDNkXSovCiB7Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7InN0b3JlX25hbWUiLCBOVUxMfTsKLSAgICBjaGFyICpzdG9yZV9uYW1lOwogICAgIEhDRVJUU1RPUkUgaFN0b3JlID0gTlVMTDsKICAgICBQQ0NSTF9DT05URVhUIHBDcmxDdHggPSBOVUxMOwogICAgIFB5T2JqZWN0ICpjcmwgPSBOVUxMLCAqZW5jID0gTlVMTCwgKnR1cCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiczplbnVtX2NybHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnN0b3JlX25hbWUpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM3NDIsMzYgKzQzNjAsMTggQEAKICNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZS4gKi8KLQogc3RhdGljIFB5TWV0aG9kRGVmIFB5U1NMX21ldGhvZHNbXSA9IHsKLSAgICB7Il90ZXN0X2RlY29kZV9jZXJ0IiwgICAgICAgUHlTU0xfdGVzdF9kZWNvZGVfY2VydGlmaWNhdGUsCi0gICAgIE1FVEhfVkFSQVJHU30sCi0jaWZkZWYgSEFWRV9PUEVOU1NMX1JBTkQKLSAgICB7IlJBTkRfYWRkIiwgICAgICAgICAgICBQeVNTTF9SQU5EX2FkZCwgTUVUSF9WQVJBUkdTLAotICAgICBQeVNTTF9SQU5EX2FkZF9kb2N9LAotICAgIHsiUkFORF9ieXRlcyIsICAgICAgICAgIFB5U1NMX1JBTkRfYnl0ZXMsIE1FVEhfVkFSQVJHUywKLSAgICAgUHlTU0xfUkFORF9ieXRlc19kb2N9LAotICAgIHsiUkFORF9wc2V1ZG9fYnl0ZXMiLCAgIFB5U1NMX1JBTkRfcHNldWRvX2J5dGVzLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFB5U1NMX1JBTkRfcHNldWRvX2J5dGVzX2RvY30sCi0jaWZkZWYgSEFWRV9SQU5EX0VHRAotICAgIHsiUkFORF9lZ2QiLCAgICAgICAgICAgIFB5U1NMX1JBTkRfZWdkLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFB5U1NMX1JBTkRfZWdkX2RvY30sCi0jZW5kaWYKLSAgICB7IlJBTkRfc3RhdHVzIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlTU0xfUkFORF9zdGF0dXMsIE1FVEhfTk9BUkdTLAotICAgICBQeVNTTF9SQU5EX3N0YXR1c19kb2N9LAotI2VuZGlmCi0gICAgeyJnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzLAotICAgICBNRVRIX05PQVJHUywgUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX2RvY30sCi0jaWZkZWYgX01TQ19WRVIKLSAgICB7ImVudW1fY2VydGlmaWNhdGVzIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX2VudW1fY2VydGlmaWNhdGVzLAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF9lbnVtX2NlcnRpZmljYXRlc19kb2N9LAotICAgIHsiZW51bV9jcmxzIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX2VudW1fY3JscywKLSAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfZW51bV9jcmxzX2RvY30sCi0jZW5kaWYKLSAgICB7InR4dDJvYmoiLCAoUHlDRnVuY3Rpb24pUHlTU0xfdHh0Mm9iaiwKLSAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfdHh0Mm9ial9kb2N9LAotICAgIHsibmlkMm9iaiIsIChQeUNGdW5jdGlvbilQeVNTTF9uaWQyb2JqLAotICAgICBNRVRIX1ZBUkFSR1MsIFB5U1NMX25pZDJvYmpfZG9jfSwKKyAgICBfU1NMX19URVNUX0RFQ09ERV9DRVJUX01FVEhPRERFRgorICAgIF9TU0xfUkFORF9BRERfTUVUSE9EREVGCisgICAgX1NTTF9SQU5EX0JZVEVTX01FVEhPRERFRgorICAgIF9TU0xfUkFORF9QU0VVRE9fQllURVNfTUVUSE9EREVGCisgICAgX1NTTF9SQU5EX0VHRF9NRVRIT0RERUYKKyAgICBfU1NMX1JBTkRfU1RBVFVTX01FVEhPRERFRgorICAgIF9TU0xfR0VUX0RFRkFVTFRfVkVSSUZZX1BBVEhTX01FVEhPRERFRgorICAgIF9TU0xfRU5VTV9DRVJUSUZJQ0FURVNfTUVUSE9EREVGCisgICAgX1NTTF9FTlVNX0NSTFNfTUVUSE9EREVGCisgICAgX1NTTF9UWFQyT0JKX01FVEhPRERFRgorICAgIF9TU0xfTklEMk9CSl9NRVRIT0RERUYKICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCkBAIC0zOTExLDYgKzQ1MTEsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVNTTFNvY2tldF9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5U1NMTWVtb3J5QklPX1R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfc3NsbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQpAQCAtMzk3NCw2ICs0NTc2LDkgQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9TU0xTb2NrZXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmUHlTU0xTb2NrZXRfVHlwZSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJNZW1vcnlCSU8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmUHlTU0xNZW1vcnlCSU9fVHlwZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNTTF9FUlJPUl9aRVJPX1JFVFVSTiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX0VSUk9SX1pFUk9fUkVUVVJOKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1NMX0VSUk9SX1dBTlRfUkVBRCIsCkBAIC00MTE0LDExICs0NzE5LDcgQEAKICAgICBQeV9JTkNSRUYocik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJIQVNfU05JIiwgcik7CiAKLSNpZiBIQVZFX09QRU5TU0xfRklOSVNIRUQKICAgICByID0gUHlfVHJ1ZTsKLSNlbHNlCi0gICAgciA9IFB5X0ZhbHNlOwotI2VuZGlmCiAgICAgUHlfSU5DUkVGKHIpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiSEFTX1RMU19VTklRVUUiLCByKTsKIApAQCAtNDEzOCw2ICs0NzM5LDE0IEBACiAgICAgUHlfSU5DUkVGKHIpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiSEFTX05QTiIsIHIpOwogCisjaWZkZWYgSEFWRV9BTFBOCisgICAgciA9IFB5X1RydWU7CisjZWxzZQorICAgIHIgPSBQeV9GYWxzZTsKKyNlbmRpZgorICAgIFB5X0lOQ1JFRihyKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkhBU19BTFBOIiwgcik7CisKICAgICAvKiBNYXBwaW5ncyBmb3IgZXJyb3IgY29kZXMgKi8KICAgICBlcnJfY29kZXNfdG9fbmFtZXMgPSBQeURpY3RfTmV3KCk7CiAgICAgZXJyX25hbWVzX3RvX2NvZGVzID0gUHlEaWN0X05ldygpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3RhdC5jIGIvTW9kdWxlcy9fc3RhdC5jCmluZGV4IGEzMDFmYTguLmY2Y2IzMDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3N0YXQuYworKysgYi9Nb2R1bGVzL19zdGF0LmMKQEAgLTI3LDkgKzI3LDIxIEBACiAjZW5kaWYgLyogSEFWRV9TWVNfU1RBVF9IICovCiAKICNpZmRlZiBNU19XSU5ET1dTCisjaW5jbHVkZSA8d2luZG93cy5oPgogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7CisKKy8qIEZJTEVfQVRUUklCVVRFX0lOVEVHUklUWV9TVFJFQU0gYW5kIEZJTEVfQVRUUklCVVRFX05PX1NDUlVCX0RBVEEKKyAgIGFyZSBub3QgcHJlc2VudCBpbiBWQzIwMTAsIHNvIGRlZmluZSB0aGVtIG1hbnVhbGx5ICovCisjaWZuZGVmIEZJTEVfQVRUUklCVVRFX0lOVEVHUklUWV9TVFJFQU0KKyMgIGRlZmluZSBGSUxFX0FUVFJJQlVURV9JTlRFR1JJVFlfU1RSRUFNIDB4ODAwMAogI2VuZGlmCiAKKyNpZm5kZWYgRklMRV9BVFRSSUJVVEVfTk9fU0NSVUJfREFUQQorIyAgZGVmaW5lIEZJTEVfQVRUUklCVVRFX05PX1NDUlVCX0RBVEEgMHgyMDAwMAorI2VuZGlmCisKKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCisKIC8qIEZyb20gUHl0aG9uJ3Mgc3RhdC5weSAqLwogI2lmbmRlZiBTX0lNT0RFCiAjICBkZWZpbmUgU19JTU9ERSAwNzc3NwpAQCAtNDczLDYgKzQ4NSwxMCBAQAogU1RfQVRJTUVcblwKIFNUX01USU1FXG5cCiBTVF9DVElNRVxuXAorXG4iCisKKyJGSUxFX0FUVFJJQlVURV8qOiBXaW5kb3dzIGZpbGUgYXR0cmlidXRlIGNvbnN0YW50c1xuXAorICAgICAgICAgICAgICAgICAgIChvbmx5IHByZXNlbnQgb24gV2luZG93cylcblwKICIpOwogCiAKQEAgLTU1NSw2ICs1NzEsMjYgQEAKICAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX01USU1FIiwgOCkpIHJldHVybiBOVUxMOwogICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfQ1RJTUUiLCA5KSkgcmV0dXJuIE5VTEw7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZJTEVfQVRUUklCVVRFX0FSQ0hJVkUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGSUxFX0FUVFJJQlVURV9ERVZJQ0UpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZJTEVfQVRUUklCVVRFX0VOQ1JZUFRFRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGSUxFX0FUVFJJQlVURV9ISURERU4pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRklMRV9BVFRSSUJVVEVfSU5URUdSSVRZX1NUUkVBTSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRklMRV9BVFRSSUJVVEVfTk9UX0NPTlRFTlRfSU5ERVhFRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGSUxFX0FUVFJJQlVURV9OT19TQ1JVQl9EQVRBKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZJTEVfQVRUUklCVVRFX09GRkxJTkUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRklMRV9BVFRSSUJVVEVfUkVQQVJTRV9QT0lOVCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGSUxFX0FUVFJJQlVURV9TUEFSU0VfRklMRSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGSUxFX0FUVFJJQlVURV9TWVNURU0pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRklMRV9BVFRSSUJVVEVfVEVNUE9SQVJZKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZJTEVfQVRUUklCVVRFX1ZJUlRVQUwpKSByZXR1cm4gTlVMTDsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG07CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3N0cnVjdC5jIGIvTW9kdWxlcy9fc3RydWN0LmMKaW5kZXggYWQ5OTU5ZS4uZjk2NTU0MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3RydWN0LmMKKysrIGIvTW9kdWxlcy9fc3RydWN0LmMKQEAgLTg1LDggKzg1LDYgQEAKICNkZWZpbmUgQk9PTF9BTElHTiAwCiAjZW5kaWYKIAotI2RlZmluZSBTVFJJTkdJRlkoeCkgICAgI3gKLQogI2lmZGVmIF9fcG93ZXJjCiAjcHJhZ21hIG9wdGlvbnMgYWxpZ249cmVzZXQKICNlbmRpZgpAQCAtNTQ2LDggKzU0NCw4IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoeCA8IFNIUlRfTUlOIHx8IHggPiBTSFJUX01BWCl7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzaG9ydCBmb3JtYXQgcmVxdWlyZXMgIiBTVFJJTkdJRlkoU0hSVF9NSU4pCi0gICAgICAgICAgICAgICAgICAgICAgICAiIDw9IG51bWJlciA8PSAiIFNUUklOR0lGWShTSFJUX01BWCkpOworICAgICAgICAgICAgICAgICAgICAgICAgInNob3J0IGZvcm1hdCByZXF1aXJlcyAiIFB5X1NUUklOR0lGWShTSFJUX01JTikKKyAgICAgICAgICAgICAgICAgICAgICAgICIgPD0gbnVtYmVyIDw9ICIgUHlfU1RSSU5HSUZZKFNIUlRfTUFYKSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgeSA9IChzaG9ydCl4OwpAQCAtNTY0LDcgKzU2Miw4IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoeCA8IDAgfHwgeCA+IFVTSFJUX01BWCl7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ1c2hvcnQgZm9ybWF0IHJlcXVpcmVzIDAgPD0gbnVtYmVyIDw9ICIgU1RSSU5HSUZZKFVTSFJUX01BWCkpOworICAgICAgICAgICAgICAgICAgICAgICAgInVzaG9ydCBmb3JtYXQgcmVxdWlyZXMgMCA8PSBudW1iZXIgPD0gIgorICAgICAgICAgICAgICAgICAgICAgICAgUHlfU1RSSU5HSUZZKFVTSFJUX01BWCkpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHkgPSAodW5zaWduZWQgc2hvcnQpeDsKQEAgLTEyNjQsNyArMTI2Myw4IEBACiAgICAgY29uc3QgY2hhciAqczsKICAgICBjb25zdCBjaGFyICpmbXQ7CiAgICAgY2hhciBjOwotICAgIFB5X3NzaXplX3Qgc2l6ZSwgbGVuLCBuY29kZXMsIG51bSwgaXRlbXNpemU7CisgICAgUHlfc3NpemVfdCBzaXplLCBsZW4sIG51bSwgaXRlbXNpemU7CisgICAgc2l6ZV90IG5jb2RlczsKIAogICAgIGZtdCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPnNfZm9ybWF0KTsKIApAQCAtMTMyMCw3ICsxMzIwLDcgQEAKICAgICB9CiAKICAgICAvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KLSAgICBpZiAoKG5jb2RlcyArIDEpID4gKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKGZvcm1hdGNvZGUpKSkgeworICAgIGlmICgobmNvZGVzICsgMSkgPiAoKHNpemVfdClQWV9TU0laRV9UX01BWCAvIHNpemVvZihmb3JtYXRjb2RlKSkpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTE0MzcsOCArMTQzNyw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBQeV9DTEVBUihzb3NlbGYtPnNfZm9ybWF0KTsKLSAgICBzb3NlbGYtPnNfZm9ybWF0ID0gb19mb3JtYXQ7CisgICAgUHlfWFNFVFJFRihzb3NlbGYtPnNfZm9ybWF0LCBvX2Zvcm1hdCk7CiAKICAgICByZXQgPSBwcmVwYXJlX3Moc29zZWxmKTsKICAgICByZXR1cm4gcmV0OwpAQCAtMTQ5OCw4ICsxNDk3LDggQEAKICJTLnVucGFjayhidWZmZXIpIC0+ICh2MSwgdjIsIC4uLilcblwKIFxuXAogUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyB2YWx1ZXMgdW5wYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXRcblwKLXN0cmluZyBTLmZvcm1hdC4gIFJlcXVpcmVzIGxlbihidWZmZXIpID09IFMuc2l6ZS4gIFNlZSBoZWxwKHN0cnVjdClcblwKLWZvciBtb3JlIG9uIGZvcm1hdCBzdHJpbmdzLiIpOworc3RyaW5nIFMuZm9ybWF0LiAgVGhlIGJ1ZmZlcidzIHNpemUgaW4gYnl0ZXMgbXVzdCBiZSBTLnNpemUuICBTZWVcblwKK2hlbHAoc3RydWN0KSBmb3IgbW9yZSBvbiBmb3JtYXQgc3RyaW5ncy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHNfdW5wYWNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5wdXQpCkBAIC0xNTI4LDggKzE1MjcsOCBAQAogIlMudW5wYWNrX2Zyb20oYnVmZmVyLCBvZmZzZXQ9MCkgLT4gKHYxLCB2MiwgLi4uKVxuXAogXG5cCiBSZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIHZhbHVlcyB1bnBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdFxuXAotc3RyaW5nIFMuZm9ybWF0LiAgUmVxdWlyZXMgbGVuKGJ1ZmZlcltvZmZzZXQ6XSkgPj0gUy5zaXplLiAgU2VlXG5cCi1oZWxwKHN0cnVjdCkgZm9yIG1vcmUgb24gZm9ybWF0IHN0cmluZ3MuIik7CitzdHJpbmcgUy5mb3JtYXQuICBUaGUgYnVmZmVyJ3Mgc2l6ZSBpbiBieXRlcywgbWludXMgb2Zmc2V0LCBtdXN0IGJlIGF0XG5cCitsZWFzdCBTLnNpemUuICBTZWUgaGVscChzdHJ1Y3QpIGZvciBtb3JlIG9uIGZvcm1hdCBzdHJpbmdzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogc191bnBhY2tfZnJvbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtMTkyNCw3ICsxOTIzLDcgQEAKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgZm9ybWF0Y29kZSAqY29kZTsKIAotICAgIHNpemUgPSBzaXplb2YoUHlTdHJ1Y3RPYmplY3QpICsgc2l6ZW9mKGZvcm1hdGNvZGUpOworICAgIHNpemUgPSBfUHlPYmplY3RfU0laRShQeV9UWVBFKHNlbGYpKSArIHNpemVvZihmb3JtYXRjb2RlKTsKICAgICBmb3IgKGNvZGUgPSBzZWxmLT5zX2NvZGVzOyBjb2RlLT5mbXRkZWYgIT0gTlVMTDsgY29kZSsrKQogICAgICAgICBzaXplICs9IHNpemVvZihmb3JtYXRjb2RlKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNpemUpOwpAQCAtMjEzMSw4ICsyMTMwLDggQEAKICJ1bnBhY2soZm10LCBidWZmZXIpIC0+ICh2MSwgdjIsIC4uLilcblwKIFxuXAogUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyB2YWx1ZXMgdW5wYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQgc3RyaW5nXG5cCi1mbXQuICBSZXF1aXJlcyBsZW4oYnVmZmVyKSA9PSBjYWxjc2l6ZShmbXQpLiBTZWUgaGVscChzdHJ1Y3QpIGZvciBtb3JlXG5cCi1vbiBmb3JtYXQgc3RyaW5ncy4iKTsKK2ZtdC4gIFRoZSBidWZmZXIncyBzaXplIGluIGJ5dGVzIG11c3QgYmUgY2FsY3NpemUoZm10KS4gU2VlIGhlbHAoc3RydWN0KVxuXAorZm9yIG1vcmUgb24gZm9ybWF0IHN0cmluZ3MuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiB1bnBhY2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMjE1NCw4ICsyMTUzLDggQEAKICJ1bnBhY2tfZnJvbShmbXQsIGJ1ZmZlciwgb2Zmc2V0PTApIC0+ICh2MSwgdjIsIC4uLilcblwKIFxuXAogUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyB2YWx1ZXMgdW5wYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQgc3RyaW5nXG5cCi1mbXQuICBSZXF1aXJlcyBsZW4oYnVmZmVyW29mZnNldDpdKSA+PSBjYWxjc2l6ZShmbXQpLiAgU2VlIGhlbHAoc3RydWN0KVxuXAotZm9yIG1vcmUgb24gZm9ybWF0IHN0cmluZ3MuIik7CitmbXQuICBUaGUgYnVmZmVyJ3Mgc2l6ZSwgbWludXMgb2Zmc2V0LCBtdXN0IGJlIGF0IGxlYXN0IGNhbGNzaXplKGZtdCkuXG5cCitTZWUgaGVscChzdHJ1Y3QpIGZvciBtb3JlIG9uIGZvcm1hdCBzdHJpbmdzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogdW5wYWNrX2Zyb20oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RidWZmZXIuYyBiL01vZHVsZXMvX3Rlc3RidWZmZXIuYwppbmRleCAxNzZkZjdjLi40M2RiOGE4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKKysrIGIvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgICAgZWx0LT5wcmV2LT5uZXh0ID0gZWx0LT5uZXh0OwogICAgIGVsc2UKICAgICAgICAgbmQtPmhlYWQgPSBlbHQtPm5leHQ7Ci0gICAgCisKICAgICBpZiAoZWx0LT5uZXh0KQogICAgICAgICBlbHQtPm5leHQtPnByZXYgPSBlbHQtPnByZXY7CiAKQEAgLTc2Nyw3ICs3NjcsNyBAQAogICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwogICB8IGJhc2UucmVhZG9ubHkgICB8ICAgICAwICAgICB8ICAgICBPSyAgICAgIHwgICAgICAgT0sgICAgICAgfAogICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotICB8IGJhc2UuZm9ybWF0ICAgICB8ICAgIE5VTEwgICB8ICAgICBPSyAgICAgIHwgICAgICAgT0sgICAgICAgfCAgCisgIHwgYmFzZS5mb3JtYXQgICAgIHwgICAgTlVMTCAgIHwgICAgIE9LICAgICAgfCAgICAgICBPSyAgICAgICB8CiAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCiAgIHwgYmFzZS5uZGltICAgICAgIHwgICAgIDEgICAgIHwgICAgICAxICAgICAgfCAgICAgICBPSyAgICAgICB8CiAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCkBAIC0xNTEwLDYgKzE1MTAsMTkgQEAKICAgICAgICAgdmlldy0+c2hhcGUgPSBOVUxMOwogICAgIH0KIAorICAgIC8qIEFzY2VydGFpbiB0aGF0IHRoZSBuZXcgYnVmZmVyIGhhcyB0aGUgc2FtZSBjb250aWd1aXR5IGFzIHRoZSBleHBvcnRlciAqLworICAgIGlmIChORF9DX0NPTlRJR1VPVVMoYmFzZWZsYWdzKSAhPSBQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXModmlldywgJ0MnKSB8fAorICAgICAgICAvKiBza2lwIGNhc3QgdG8gMS1kICovCisgICAgICAgICh2aWV3LT5mb3JtYXQgIT0gTlVMTCAmJiB2aWV3LT5zaGFwZSAhPSBOVUxMICYmCisgICAgICAgICBORF9GT1JUUkFOX0NPTlRJR1VPVVMoYmFzZWZsYWdzKSAhPSBQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXModmlldywgJ0YnKSkgfHwKKyAgICAgICAgLyogY2FzdCB0byAxLWQgKi8KKyAgICAgICAgKHZpZXctPmZvcm1hdCA9PSBOVUxMICYmIHZpZXctPnNoYXBlID09IE5VTEwgJiYKKyAgICAgICAgICFQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXModmlldywgJ0YnKSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0J1ZmZlckVycm9yLAorICAgICAgICAgICAgIm5kYXJyYXk6IGNvbnRpZ3VpdHkgbWlzbWF0Y2ggaW4gZ2V0YnVmKCkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICB2aWV3LT5vYmogPSAoUHlPYmplY3QgKilzZWxmOwogICAgIFB5X0lOQ1JFRih2aWV3LT5vYmopOwogICAgIHNlbGYtPmhlYWQtPmV4cG9ydHMrKzsKQEAgLTIwMDUsNyArMjAxOCw3IEBACiB7CiAgICAgUHlfYnVmZmVyICpiYXNlID0gJnNlbGYtPmhlYWQtPmJhc2U7CiAKLSAgICBpZiAoYmFzZS0+b2JqID09IE5VTEwpIHsgCisgICAgaWYgKGJhc2UtPm9iaiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KICAgICBQeV9JTkNSRUYoYmFzZS0+b2JqKTsKQEAgLTIyMDYsNiArMjIxOSw4IEBACiAgICAgZm9yIChpID0gMDsgaSA8IGJhc2UtPm5kaW07IGkrKykKICAgICAgICAgYmFzZS0+c3Vib2Zmc2V0c1tpXSA9IC0xOwogCisgICAgbmQtPmhlYWQtPmZsYWdzICY9IH4oTkRfQ3xORF9GT1JUUkFOKTsKKwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC0yNDY5LDEzICsyNDg0LDEyIEBACiB7CiAgICAgUHlfc3NpemVfdCBpOwogCi0gICAgaWYgKG5kaW0gPT0gMSAmJiBzaGFwZSAmJiBzaGFwZVswXSA9PSAxKSB7Ci0gICAgICAgIC8qIFRoaXMgaXMgZm9yIGNvbXBhcmluZyBzdHJpZGVzOiBGb3IgZXhhbXBsZSwgdGhlIGFycmF5Ci0gICAgICAgICAgIFsxNzVdLCBzaGFwZT1bMV0sIHN0cmlkZXM9Wy01XSBpcyBjb25zaWRlcmVkIGNvbnRpZ3VvdXMuICovCi0gICAgICAgIHJldHVybiAxOwotICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBuZGltOyBpKyspIHsKKyAgICAgICAgaWYgKHNoYXBlICYmIHNoYXBlW2ldIDw9IDEpIHsKKyAgICAgICAgICAgIC8qIHN0cmlkZXMgY2FuIGRpZmZlciBpZiB0aGUgZGltZW5zaW9uIGlzIGxlc3MgdGhhbiAyICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYTFbaV0gIT0gYTJbaV0pIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0yNTQ0LDcgKzI1NTgsNyBAQAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnYxKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2Mik7CiAKLSAgICByZXQgPSBlcXVhbCA/IFB5X1RydWUgOiBQeV9GYWxzZTsgCisgICAgcmV0ID0gZXF1YWwgPyBQeV9UcnVlIDogUHlfRmFsc2U7CiAgICAgUHlfSU5DUkVGKHJldCk7CiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTI1NTUsMzAgKzI1NjksMzUgQEAKICAgICBQeU9iamVjdCAqb2JqOwogICAgIFB5T2JqZWN0ICpvcmRlcjsKICAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKLSAgICBQeV9idWZmZXIgdmlldzsKKyAgICBQeV9idWZmZXIgdmlldywgKmJhc2U7CiAgICAgY2hhciBvcmQ7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PIiwgJm9iaiwgJm9yZGVyKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKG9iaiwgJnZpZXcsIFB5QlVGX0ZVTExfUk8pIDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgImlzX2NvbnRpZ3VvdXM6IG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGJ1ZmZlciAiCi0gICAgICAgICAgICAicHJvdG9jb2wiKTsKKyAgICBvcmQgPSBnZXRfYXNjaWlfb3JkZXIob3JkZXIpOworICAgIGlmIChvcmQgPT0gQ0hBUl9NQVgpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgb3JkID0gZ2V0X2FzY2lpX29yZGVyKG9yZGVyKTsKLSAgICBpZiAob3JkID09IENIQVJfTUFYKSB7Ci0gICAgICAgIGdvdG8gcmVsZWFzZTsKKyAgICBpZiAoTkRBcnJheV9DaGVjayhvYmopKSB7CisgICAgICAgIC8qIFNraXAgdGhlIGJ1ZmZlciBwcm90b2NvbCB0byBjaGVjayBzaW1wbGUgZXRjLiBidWZmZXJzIGRpcmVjdGx5LiAqLworICAgICAgICBiYXNlID0gJigoTkRBcnJheU9iamVjdCAqKW9iaiktPmhlYWQtPmJhc2U7CisgICAgICAgIHJldCA9IFB5QnVmZmVyX0lzQ29udGlndW91cyhiYXNlLCBvcmQpID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihvYmosICZ2aWV3LCBQeUJVRl9GVUxMX1JPKSA8IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgImlzX2NvbnRpZ3VvdXM6IG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGJ1ZmZlciAiCisgICAgICAgICAgICAgICAgInByb3RvY29sIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXQgPSBQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoJnZpZXcsIG9yZCkgPyBQeV9UcnVlIDogUHlfRmFsc2U7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIH0KIAotICAgIHJldCA9IFB5QnVmZmVyX0lzQ29udGlndW91cygmdmlldywgb3JkKSA/IFB5X1RydWUgOiBQeV9GYWxzZTsKICAgICBQeV9JTkNSRUYocmV0KTsKLQotcmVsZWFzZToKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwppbmRleCA4ZWJlOTcwLi4zODEwZTk0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKQEAgLTEyLDYgKzEyLDExIEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiZGF0ZXRpbWUuaCIKICNpbmNsdWRlICJtYXJzaGFsLmgiCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZmRlZiBNU19XSU5ET1dTCisjICBpbmNsdWRlIDx3aW5zb2NrMi5oPiAgICAgICAgIC8qIHN0cnVjdCB0aW1ldmFsICovCisjZW5kaWYKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKQEAgLTY4LDYgKzczLDEwIEBACiBzdGF0aWMgUHlPYmplY3QqCiB0ZXN0X3NpemVvZl9jX3R5cGVzKFB5T2JqZWN0ICpzZWxmKQogeworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+IDUpKSkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3R5cGUtbGltaXRzIgorI2VuZGlmCiAjZGVmaW5lIENIRUNLX1NJWkVPRihUWVBFLCBFWFBFQ1RFRCkgICAgICAgICBcCiAgICAgaWYgKEVYUEVDVEVEICE9IHNpemVvZihUWVBFKSkgIHsgICAgICAgICBcCiAgICAgICAgIFB5RXJyX0Zvcm1hdChUZXN0RXJyb3IsICAgICAgICAgICAgICBcCkBAIC0xMjUsNiArMTM0LDkgQEAKICN1bmRlZiBJU19TSUdORUQKICN1bmRlZiBDSEVDS19TSUdORVNTCiAjdW5kZWYgQ0hFQ0tfU0laRU9GCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDQpIHx8ICgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID4gNSkpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgogfQogCiAKQEAgLTg2MCw2ICs4NzIsMTIwIEBACiAKICNlbmRpZiAgLyogaWZkZWYgSEFWRV9MT05HX0xPTkcgKi8KIAorc3RhdGljIFB5T2JqZWN0ICoKK3JldHVybl9ub25lKHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JhaXNlX2Vycm9yKHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeUVycl9TZXROb25lKFB5RXhjX1ZhbHVlRXJyb3IpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50Cit0ZXN0X2J1aWxkdmFsdWVfTl9lcnJvcihjb25zdCBjaGFyICpmbXQpCit7CisgICAgUHlPYmplY3QgKmFyZywgKnJlczsKKworICAgIGFyZyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKGFyZyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBQeV9JTkNSRUYoYXJnKTsKKyAgICByZXMgPSBQeV9CdWlsZFZhbHVlKGZtdCwgcmV0dXJuX25vbmUsIE5VTEwsIGFyZyk7CisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKFB5X1JFRkNOVChhcmcpICE9IDEpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFRlc3RFcnJvciwgInRlc3RfYnVpbGR2YWx1ZV9OOiAiCisgICAgICAgICAgICAgICAgICAgICAiYXJnIHdhcyBub3QgZGVjcmVmZWQgaW4gc3VjY2Vzc2Z1bCAiCisgICAgICAgICAgICAgICAgICAgICAiUHlfQnVpbGRWYWx1ZShcIiVzXCIpIiwgZm10KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIFB5X0lOQ1JFRihhcmcpOworICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoZm10LCByYWlzZV9lcnJvciwgTlVMTCwgYXJnKTsKKyAgICBpZiAocmVzICE9IE5VTEwgfHwgIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFRlc3RFcnJvciwgInRlc3RfYnVpbGR2YWx1ZV9OOiAiCisgICAgICAgICAgICAgICAgICAgICAiUHlfQnVpbGRWYWx1ZShcIiVzXCIpIGRpZG4ndCBjb21wbGFpbiIsIGZtdCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBpZiAoUHlfUkVGQ05UKGFyZykgIT0gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoVGVzdEVycm9yLCAidGVzdF9idWlsZHZhbHVlX046ICIKKyAgICAgICAgICAgICAgICAgICAgICJhcmcgd2FzIG5vdCBkZWNyZWZlZCBpbiBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgIlB5X0J1aWxkVmFsdWUoXCIlc1wiKSIsIGZtdCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUHlfREVDUkVGKGFyZyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2J1aWxkdmFsdWVfTihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICBQeU9iamVjdCAqYXJnLCAqcmVzOworCisgICAgYXJnID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoYXJnID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihhcmcpOworICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoIk4iLCBhcmcpOworICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHJlcyAhPSBhcmcpIHsKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2J1aWxkdmFsdWVfTiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHlfQnVpbGRWYWx1ZShcIk5cIikgcmV0dXJuZWQgd3JvbmcgcmVzdWx0Iik7CisgICAgfQorICAgIGlmIChQeV9SRUZDTlQoYXJnKSAhPSAyKSB7CisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9idWlsZHZhbHVlX04iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZyB3YXMgbm90IGRlY3JlZmVkIGluIFB5X0J1aWxkVmFsdWUoXCJOXCIpIik7CisgICAgfQorICAgIFB5X0RFQ1JFRihyZXMpOworICAgIFB5X0RFQ1JFRihhcmcpOworCisgICAgaWYgKHRlc3RfYnVpbGR2YWx1ZV9OX2Vycm9yKCJPJk4iKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh0ZXN0X2J1aWxkdmFsdWVfTl9lcnJvcigiKE8mTikiKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh0ZXN0X2J1aWxkdmFsdWVfTl9lcnJvcigiW08mTl0iKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh0ZXN0X2J1aWxkdmFsdWVfTl9lcnJvcigie08mTn0iKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh0ZXN0X2J1aWxkdmFsdWVfTl9lcnJvcigieygpTyYoKCkpTn0iKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKK2dldF9hcmdzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIGFyZ3MgPSBQeV9Ob25lOworICAgIH0KKyAgICBQeV9JTkNSRUYoYXJncyk7CisgICAgcmV0dXJuIGFyZ3M7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRfa3dhcmdzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpZiAoa3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAga3dhcmdzID0gUHlfTm9uZTsKKyAgICB9CisgICAgUHlfSU5DUkVGKGt3YXJncyk7CisgICAgcmV0dXJuIGt3YXJnczsKK30KKwogLyogVGVzdCB0dXBsZSBhcmd1bWVudCBwcm9jZXNzaW5nICovCiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0YXJnc190dXBsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0xMDcxLDEyICsxMTk3LDc4IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX2YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGZsb2F0IGY7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJmIiwgJmYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGYpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc19kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBkb3VibGUgZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImQiLCAmZCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoZCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX0QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X2NvbXBsZXggY3ZhbDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkQiLCAmY3ZhbCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGN2YWwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc19TKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiUyIsICZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYob2JqKTsKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc19ZKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiWSIsICZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYob2JqKTsKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc19VKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVSIsICZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYob2JqKTsKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogZ2V0YXJnc19jKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyIGM7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJjIiwgJmMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgmYywgMSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhciljKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldGFyZ3NfQyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGM7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJDIiwgJmMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGMpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTIzMSw2ICsxNDIzLDg0IEBACiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc19lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmFyZywgKnJlc3VsdDsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7CisgICAgY2hhciAqc3RyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHMiLCAmYXJnLCAmZW5jb2RpbmcpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImVzIiwgZW5jb2RpbmcsICZzdHIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoc3RyKTsKKyAgICBQeU1lbV9GcmVlKHN0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldGFyZ3NfZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICphcmcsICpyZXN1bHQ7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOworICAgIGNoYXIgKnN0cjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xzIiwgJmFyZywgJmVuY29kaW5nKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJldCIsIGVuY29kaW5nLCAmc3RyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nKHN0cik7CisgICAgUHlNZW1fRnJlZShzdHIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX2VzX2hhc2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICphcmcsICpyZXN1bHQ7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOworICAgIFB5Qnl0ZUFycmF5T2JqZWN0ICpidWZmZXIgPSBOVUxMOworICAgIGNoYXIgKnN0ciA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHNZIiwgJmFyZywgJmVuY29kaW5nLCAmYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGJ1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgIHN0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhidWZmZXIpOworICAgICAgICBzaXplID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoYnVmZmVyKTsKKyAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJlcyMiLCBlbmNvZGluZywgJnN0ciwgJnNpemUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHN0ciwgc2l6ZSk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICBQeU1lbV9GcmVlKHN0cik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldGFyZ3NfZXRfaGFzaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmFyZywgKnJlc3VsdDsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7CisgICAgUHlCeXRlQXJyYXlPYmplY3QgKmJ1ZmZlciA9IE5VTEw7CisgICAgY2hhciAqc3RyID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98c1kiLCAmYXJnLCAmZW5jb2RpbmcsICZidWZmZXIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoYnVmZmVyICE9IE5VTEwpIHsKKyAgICAgICAgc3RyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGJ1ZmZlcik7CisgICAgICAgIHNpemUgPSBQeUJ5dGVBcnJheV9HRVRfU0laRShidWZmZXIpOworICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImV0IyIsIGVuY29kaW5nLCAmc3RyLCAmc2l6ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc3RyLCBzaXplKTsKKyAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgIFB5TWVtX0ZyZWUoc3RyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBUZXN0IHRoZSBzIGFuZCB6IGNvZGVzIGZvciBQeUFyZ19QYXJzZVR1cGxlLgogKi8KIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNzE5LDcgKzE5ODksNyBAQAogICAgICAgICAgICAgIHstMHhmZmZmTCwgMTYsIC0xfSwKICAgICAgICAgICAgICB7MHhmZmZmZmZmTCwgMjgsIDF9LAogICAgICAgICAgICAgIHstMHhmZmZmZmZmTCwgMjgsIC0xfX07Ci0gICAgaW50IGk7CisgICAgc2l6ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfQVJSQVlfTEVOR1RIKHRlc3RjYXNlcyk7ICsraSkgewogICAgICAgICBzaXplX3QgbmJpdHM7CkBAIC0yNDgwLDcgKzI3NTAsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJmluZm8pOwogfQotIAorCiBzdGF0aWMgUHlPYmplY3QgKgogdGVzdF9mcm9tX2NvbnRpZ3VvdXMoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7CkBAIC0yNTMxLDYgKzI4MDEsNTggQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorI2lmIChkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykpICYmIGRlZmluZWQoX19HTlVDX18pCitleHRlcm4gUHlUeXBlT2JqZWN0IF9QeUJ5dGVzSU9CdWZmZXJfVHlwZTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcGVwMzExOF9vYnNvbGV0ZV93cml0ZV9sb2NrcyhQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICBQeVR5cGVPYmplY3QgKnR5cGUgPSAmX1B5Qnl0ZXNJT0J1ZmZlcl9UeXBlOworICAgIFB5T2JqZWN0ICpiOworICAgIGNoYXIgKmR1bW15WzFdOworICAgIGludCByZXQsIG1hdGNoOworCisgICAgLyogUHlCdWZmZXJfRmlsbEluZm8oKSAqLworICAgIHJldCA9IFB5QnVmZmVyX0ZpbGxJbmZvKE5VTEwsIE5VTEwsIGR1bW15LCAxLCAwLCBQeUJVRl9TSU1QTEUpOworICAgIG1hdGNoID0gUHlFcnJfT2NjdXJyZWQoKSAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0J1ZmZlckVycm9yKTsKKyAgICBQeUVycl9DbGVhcigpOworICAgIGlmIChyZXQgIT0gLTEgfHwgbWF0Y2ggPT0gMCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIC8qIGJ5dGVzaW9idWZfZ2V0YnVmZmVyKCkgKi8KKyAgICBiID0gdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXQgPSBQeU9iamVjdF9HZXRCdWZmZXIoYiwgTlVMTCwgUHlCVUZfU0lNUExFKTsKKyAgICBQeV9ERUNSRUYoYik7CisgICAgbWF0Y2ggPSBQeUVycl9PY2N1cnJlZCgpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQnVmZmVyRXJyb3IpOworICAgIFB5RXJyX0NsZWFyKCk7CisgICAgaWYgKHJldCAhPSAtMSB8fCBtYXRjaCA9PSAwKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgUHlfUkVUVVJOX05PTkU7CisKK2Vycm9yOgorICAgIFB5RXJyX1NldFN0cmluZyhUZXN0RXJyb3IsCisgICAgICAgICJ0ZXN0X3BlcDMxMThfb2Jzb2xldGVfd3JpdGVfbG9ja3M6IGZhaWx1cmUiKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisvKiBUaGlzIHRlc3RzIGZ1bmN0aW9ucyB0aGF0IGhpc3RvcmljYWxseSBzdXBwb3J0ZWQgd3JpdGUgbG9ja3MuICBJdCBpcworICAgd3JvbmcgdG8gY2FsbCBnZXRidWZmZXIoKSB3aXRoIHZpZXc9PU5VTEwgYW5kIGEgY29tcGxpYW50IGdldGJ1ZmZlcnByb2MKKyAgIGlzIGVudGl0bGVkIHRvIHNlZ2ZhdWx0IGluIHRoYXQgY2FzZS4gKi8KK3N0YXRpYyBQeU9iamVjdCAqCitnZXRidWZmZXJfd2l0aF9udWxsX3ZpZXcoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihvYmosIE5VTEwsIFB5QlVGX1NJTVBMRSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorCiAvKiBUZXN0IHRoYXQgdGhlIGZhdGFsIGVycm9yIGZyb20gbm90IGhhdmluZyBhIGN1cnJlbnQgdGhyZWFkIGRvZXNuJ3QKICAgIGNhdXNlIGFuIGluZmluaXRlIGxvb3AuICBSdW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSAqLwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI1ODIsNyArMjkwNCw3IEBACiBzdGF0aWMgaW50CiBjaGVja190aW1lX3JvdW5kaW5nKGludCByb3VuZCkKIHsKLSAgICBpZiAocm91bmQgIT0gX1B5VGltZV9ST1VORF9ET1dOICYmIHJvdW5kICE9IF9QeVRpbWVfUk9VTkRfVVApIHsKKyAgICBpZiAocm91bmQgIT0gX1B5VGltZV9ST1VORF9GTE9PUiAmJiByb3VuZCAhPSBfUHlUaW1lX1JPVU5EX0NFSUxJTkcpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIHJvdW5kaW5nIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0yNzE1LDYgKzMwMzcsMjEgQEAKICAgICByZXR1cm4gb2JqOwogfQogCitzdGF0aWMgUHlNZXRob2REZWYgbWw7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjcmVhdGVfY2Z1bmN0aW9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgoJm1sLCBzZWxmLCBOVUxMKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1sID0geworICAgICJjcmVhdGVfY2Z1bmN0aW9uIiwKKyAgICBjcmVhdGVfY2Z1bmN0aW9uLAorICAgIE1FVEhfTk9BUkdTLAorICAgIE5VTEwKK307CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfdGVzdF9pbmNyZWYoUHlPYmplY3QgKm9iKQogewpAQCAtMjc3Myw2ICszMTEwLDIwIEBACiB7CiAgICAgdm9pZCAqcHRyOwogCisgICAgcHRyID0gUHlNZW1fUmF3TWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlNZW1fUmF3TWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworCisgICAgcHRyID0gUHlNZW1fUmF3Q2FsbG9jKDAsIDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlNZW1fUmF3Q2FsbG9jKDAsIDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworCiAgICAgcHRyID0gUHlNZW1fTWFsbG9jKDApOwogICAgIGlmIChwdHIgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlNZW1fTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOwpAQCAtMjc4MCw2ICszMTMxLDEzIEBACiAgICAgfQogICAgIFB5TWVtX0ZyZWUocHRyKTsKIAorICAgIHB0ciA9IFB5TWVtX0NhbGxvYygwLCAwKTsKKyAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIlB5TWVtX0NhbGxvYygwLCAwKSByZXR1cm5zIE5VTEwiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5TWVtX0ZyZWUocHRyKTsKKwogICAgIHB0ciA9IFB5T2JqZWN0X01hbGxvYygwKTsKICAgICBpZiAocHRyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIlB5T2JqZWN0X01hbGxvYygwKSByZXR1cm5zIE5VTEwiKTsKQEAgLTI3ODcsMTMgKzMxNDUsMjIgQEAKICAgICB9CiAgICAgUHlPYmplY3RfRnJlZShwdHIpOwogCisgICAgcHRyID0gUHlPYmplY3RfQ2FsbG9jKDAsIDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlPYmplY3RfQ2FsbG9jKDAsIDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlPYmplY3RfRnJlZShwdHIpOworCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKyAgICBQeU1lbUFsbG9jYXRvckV4IGFsbG9jOwogCiAgICAgc2l6ZV90IG1hbGxvY19zaXplOworICAgIHNpemVfdCBjYWxsb2NfbmVsZW07CisgICAgc2l6ZV90IGNhbGxvY19lbHNpemU7CiAgICAgdm9pZCAqcmVhbGxvY19wdHI7CiAgICAgc2l6ZV90IHJlYWxsb2NfbmV3X3NpemU7CiAgICAgdm9pZCAqZnJlZV9wdHI7CkBAIC0yODA2LDYgKzMxNzMsMTQgQEAKICAgICByZXR1cm4gaG9vay0+YWxsb2MubWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgc2l6ZSk7CiB9CiAKK3N0YXRpYyB2b2lkKiBob29rX2NhbGxvYyAodm9pZCogY3R4LCBzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5jYWxsb2NfbmVsZW0gPSBuZWxlbTsKKyAgICBob29rLT5jYWxsb2NfZWxzaXplID0gZWxzaXplOworICAgIHJldHVybiBob29rLT5hbGxvYy5jYWxsb2MoaG9vay0+YWxsb2MuY3R4LCBuZWxlbSwgZWxzaXplKTsKK30KKwogc3RhdGljIHZvaWQqIGhvb2tfcmVhbGxvYyAodm9pZCogY3R4LCB2b2lkKiBwdHIsIHNpemVfdCBuZXdfc2l6ZSkKIHsKICAgICBhbGxvY19ob29rX3QgKmhvb2sgPSAoYWxsb2NfaG9va190ICopY3R4OwpAQCAtMjgyNywxNyArMzIwMiwxNSBAQAogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKmVycm9yX21zZzsKICAgICBhbGxvY19ob29rX3QgaG9vazsKLSAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKLSAgICBzaXplX3Qgc2l6ZSwgc2l6ZTI7CisgICAgUHlNZW1BbGxvY2F0b3JFeCBhbGxvYzsKKyAgICBzaXplX3Qgc2l6ZSwgc2l6ZTIsIG5lbGVtLCBlbHNpemU7CiAgICAgdm9pZCAqcHRyLCAqcHRyMjsKIAotICAgIGhvb2subWFsbG9jX3NpemUgPSAwOwotICAgIGhvb2sucmVhbGxvY19wdHIgPSBOVUxMOwotICAgIGhvb2sucmVhbGxvY19uZXdfc2l6ZSA9IDA7Ci0gICAgaG9vay5mcmVlX3B0ciA9IE5VTEw7CisgICAgbWVtc2V0KCZob29rLCAwLCBzaXplb2YoaG9vaykpOwogCiAgICAgYWxsb2MuY3R4ID0gJmhvb2s7CiAgICAgYWxsb2MubWFsbG9jID0gJmhvb2tfbWFsbG9jOworICAgIGFsbG9jLmNhbGxvYyA9ICZob29rX2NhbGxvYzsKICAgICBhbGxvYy5yZWFsbG9jID0gJmhvb2tfcmVhbGxvYzsKICAgICBhbGxvYy5mcmVlID0gJmhvb2tfZnJlZTsKICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CkBAIC0yODk0LDYgKzMyNjcsMzMgQEAKICAgICAgICAgZ290byBmYWlsOwogICAgIH0KIAorICAgIG5lbGVtID0gMjsKKyAgICBlbHNpemUgPSA1OworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogcHRyID0gUHlNZW1fUmF3Q2FsbG9jKG5lbGVtLCBlbHNpemUpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0ciA9IFB5TWVtX0NhbGxvYyhuZWxlbSwgZWxzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBwdHIgPSBQeU9iamVjdF9DYWxsb2MobmVsZW0sIGVsc2l6ZSk7IGJyZWFrOworICAgIGRlZmF1bHQ6IHB0ciA9IE5VTEw7IGJyZWFrOworICAgIH0KKworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAiY2FsbG9jIGZhaWxlZCI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaG9vay5jYWxsb2NfbmVsZW0gIT0gbmVsZW0gfHwgaG9vay5jYWxsb2NfZWxzaXplICE9IGVsc2l6ZSkgeworICAgICAgICBlcnJvcl9tc2cgPSAiY2FsbG9jIGludmFsaWQgbmVsZW0gb3IgZWxzaXplIjsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogUHlNZW1fUmF3RnJlZShwdHIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IFB5TWVtX0ZyZWUocHRyKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBQeU9iamVjdF9GcmVlKHB0cik7IGJyZWFrOworICAgIH0KKwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXMgPSBQeV9Ob25lOwogICAgIGdvdG8gZmluYWxseTsKQEAgLTI5NTMsNiArMzM1MywxMiBAQAogIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZS4iCiApOwogCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2J1dF9ub19kb2MsCisiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2J1dF9ub19kb2MoJG1vZHVsZSwgLywgc2lnKVxuIgorIi0tXG4iCisiXG4iCispOworCiBQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcywKICJkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzKCRtb2R1bGUsIC8sIHBhcmFtZXRlcilcbiIKICItLVxuIgpAQCAtMzA2Myw2ICszNDY5LDI0IEBACiB9CiAjZW5kaWYgICAvKiBXSVRIX1RIUkVBRCAqLwogCitzdGF0aWMgUHlPYmplY3QqCit0ZXN0X3JhaXNlX3NpZ25hbChQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHNpZ251bSwgZXJyOworCisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6cmFpc2Vfc2lnbmFsIiwgJnNpZ251bSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVyciA9IHJhaXNlKHNpZ251bSk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKworICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKIC8qIG1hcnNoYWwgKi8KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMzIxNiw2ICszNjQwLDE1MSBAQAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJObCIsIG9iaiwgcG9zKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0KgorcmV0dXJuX251bGxfd2l0aG91dF9lcnJvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgLyogaW52YWxpZCBjYWxsOiByZXR1cm4gTlVMTCB3aXRob3V0IHNldHRpbmcgYW4gZXJyb3IsCisgICAgICogX1B5X0NoZWNrRnVuY3Rpb25SZXN1bHQoKSBtdXN0IGRldGVjdCBzdWNoIGJ1ZyBhdCBydW50aW1lLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3JldHVybl9yZXN1bHRfd2l0aF9lcnJvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgLyogaW52YWxpZCBjYWxsOiByZXR1cm4gYSByZXN1bHQgd2l0aCBhbiBlcnJvciBzZXQsCisgICAgICogX1B5X0NoZWNrRnVuY3Rpb25SZXN1bHQoKSBtdXN0IGRldGVjdCBzdWNoIGJ1ZyBhdCBydW50aW1lLiAqLworICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfVmFsdWVFcnJvcik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5dGltZV9mcm9tc2Vjb25kcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHNlY29uZHM7CisgICAgX1B5VGltZV90IHRzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpIiwgJnNlY29uZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB0cyA9IF9QeVRpbWVfRnJvbVNlY29uZHMoc2Vjb25kcyk7CisgICAgcmV0dXJuIF9QeVRpbWVfQXNOYW5vc2Vjb25kc09iamVjdCh0cyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5dGltZV9mcm9tc2Vjb25kc29iamVjdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBpbnQgcm91bmQ7CisgICAgX1B5VGltZV90IHRzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaSIsICZvYmosICZyb3VuZCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChjaGVja190aW1lX3JvdW5kaW5nKHJvdW5kKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChfUHlUaW1lX0Zyb21TZWNvbmRzT2JqZWN0KCZ0cywgb2JqLCByb3VuZCkgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlUaW1lX0FzTmFub3NlY29uZHNPYmplY3QodHMpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weXRpbWVfYXNzZWNvbmRzZG91YmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQWV9MT05HX0xPTkcgbnM7CisgICAgX1B5VGltZV90IHRzOworICAgIGRvdWJsZSBkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJMIiwgJm5zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdHMgPSBfUHlUaW1lX0Zyb21OYW5vc2Vjb25kcyhucyk7CisgICAgZCA9IF9QeVRpbWVfQXNTZWNvbmRzRG91YmxlKHRzKTsKKyAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGQpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9QeVRpbWVfQXNUaW1ldmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQWV9MT05HX0xPTkcgbnM7CisgICAgaW50IHJvdW5kOworICAgIF9QeVRpbWVfdCB0OworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIFB5T2JqZWN0ICpzZWNvbmRzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJMaSIsICZucywgJnJvdW5kKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGNoZWNrX3RpbWVfcm91bmRpbmcocm91bmQpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdCA9IF9QeVRpbWVfRnJvbU5hbm9zZWNvbmRzKG5zKTsKKyAgICBpZiAoX1B5VGltZV9Bc1RpbWV2YWwodCwgJnR2LCByb3VuZCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlY29uZHMgPSBQeUxvbmdfRnJvbUxvbmcoKFBZX0xPTkdfTE9ORyl0di50dl9zZWMpOworICAgIGlmIChzZWNvbmRzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJObCIsIHNlY29uZHMsIHR2LnR2X3VzZWMpOworfQorCisjaWZkZWYgSEFWRV9DTE9DS19HRVRUSU1FCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9QeVRpbWVfQXNUaW1lc3BlYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUFlfTE9OR19MT05HIG5zOworICAgIF9QeVRpbWVfdCB0OworICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTCIsICZucykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHQgPSBfUHlUaW1lX0Zyb21OYW5vc2Vjb25kcyhucyk7CisgICAgaWYgKF9QeVRpbWVfQXNUaW1lc3BlYyh0LCAmdHMpID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmwiLCBfUHlMb25nX0Zyb21UaW1lX3QodHMudHZfc2VjKSwgdHMudHZfbnNlYyk7Cit9CisjZW5kaWYKKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfUHlUaW1lX0FzTWlsbGlzZWNvbmRzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQWV9MT05HX0xPTkcgbnM7CisgICAgaW50IHJvdW5kOworICAgIF9QeVRpbWVfdCB0LCBtczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTGkiLCAmbnMsICZyb3VuZCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChjaGVja190aW1lX3JvdW5kaW5nKHJvdW5kKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHQgPSBfUHlUaW1lX0Zyb21OYW5vc2Vjb25kcyhucyk7CisgICAgbXMgPSBfUHlUaW1lX0FzTWlsbGlzZWNvbmRzKHQsIHJvdW5kKTsKKyAgICAvKiBUaGlzIGNvbnZlcnNpb24gcmVseSBvbiB0aGUgZmFjdCB0aGF0IF9QeVRpbWVfdCBpcyBhIG51bWJlciBvZgorICAgICAgIG5hbm9zZWNvbmRzICovCisgICAgcmV0dXJuIF9QeVRpbWVfQXNOYW5vc2Vjb25kc09iamVjdChtcyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X1B5VGltZV9Bc01pY3Jvc2Vjb25kcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUFlfTE9OR19MT05HIG5zOworICAgIGludCByb3VuZDsKKyAgICBfUHlUaW1lX3QgdCwgbXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkxpIiwgJm5zLCAmcm91bmQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoY2hlY2tfdGltZV9yb3VuZGluZyhyb3VuZCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB0ID0gX1B5VGltZV9Gcm9tTmFub3NlY29uZHMobnMpOworICAgIG1zID0gX1B5VGltZV9Bc01pY3Jvc2Vjb25kcyh0LCByb3VuZCk7CisgICAgLyogVGhpcyBjb252ZXJzaW9uIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBfUHlUaW1lX3QgaXMgYSBudW1iZXIgb2YKKyAgICAgICBuYW5vc2Vjb25kcyAqLworICAgIHJldHVybiBfUHlUaW1lX0FzTmFub3NlY29uZHNPYmplY3QobXMpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitnZXRfcmVjdXJzaW9uX2RlcHRoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworCisgICAgLyogc3Vic3RyYWN0IG9uZSB0byBpZ25vcmUgdGhlIGZyYW1lIG9mIHRoZSBnZXRfcmVjdXJzaW9uX2RlcHRoKCkgY2FsbCAqLworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodHN0YXRlLT5yZWN1cnNpb25fZGVwdGggLSAxKTsKK30KKwogCiBzdGF0aWMgUHlNZXRob2REZWYgVGVzdE1ldGhvZHNbXSA9IHsKICAgICB7InJhaXNlX2V4Y2VwdGlvbiIsICAgICAgICAgcmFpc2VfZXhjZXB0aW9uLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKQEAgLTMyNDksNiArMzgxOCwxMyBAQAogICAgIHsidGVzdF91bmljb2RlX2NvbXBhcmVfd2l0aF9hc2NpaSIsIChQeUNGdW5jdGlvbil0ZXN0X3VuaWNvZGVfY29tcGFyZV93aXRoX2FzY2lpLCBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2NhcHN1bGUiLCAoUHlDRnVuY3Rpb24pdGVzdF9jYXBzdWxlLCBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2Zyb21fY29udGlndW91cyIsIChQeUNGdW5jdGlvbil0ZXN0X2Zyb21fY29udGlndW91cywgTUVUSF9OT0FSR1N9LAorI2lmIChkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykpICYmIGRlZmluZWQoX19HTlVDX18pCisgICAgeyJ0ZXN0X3BlcDMxMThfb2Jzb2xldGVfd3JpdGVfbG9ja3MiLCAoUHlDRnVuY3Rpb24pdGVzdF9wZXAzMTE4X29ic29sZXRlX3dyaXRlX2xvY2tzLCBNRVRIX05PQVJHU30sCisjZW5kaWYKKyAgICB7ImdldGJ1ZmZlcl93aXRoX251bGxfdmlldyIsIGdldGJ1ZmZlcl93aXRoX251bGxfdmlldywgTUVUSF9PfSwKKyAgICB7InRlc3RfYnVpbGR2YWx1ZV9OIiwgICAgICAgdGVzdF9idWlsZHZhbHVlX04sICAgICAgICAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0X2FyZ3MiLCBnZXRfYXJncywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldF9rd2FyZ3MiLCAoUHlDRnVuY3Rpb24pZ2V0X2t3YXJncywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiZ2V0YXJnc190dXBsZSIsICAgICAgICAgICBnZXRhcmdzX3R1cGxlLCAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19rZXl3b3JkcyIsIChQeUNGdW5jdGlvbilnZXRhcmdzX2tleXdvcmRzLAogICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LApAQCAtMzI3Miw3ICszODQ4LDE0IEBACiAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3csIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfTF9jb2RlIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfTF9jb2RlLCAgICAgICAgTUVUSF9OT0FSR1N9LAogI2VuZGlmCisgICAgeyJnZXRhcmdzX2YiLCAgICAgICAgICAgICAgIGdldGFyZ3NfZiwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRhcmdzX2QiLCAgICAgICAgICAgICAgIGdldGFyZ3NfZCwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRhcmdzX0QiLCAgICAgICAgICAgICAgIGdldGFyZ3NfRCwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRhcmdzX1MiLCAgICAgICAgICAgICAgIGdldGFyZ3NfUywgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRhcmdzX1kiLCAgICAgICAgICAgICAgIGdldGFyZ3NfWSwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRhcmdzX1UiLCAgICAgICAgICAgICAgIGdldGFyZ3NfVSwgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX2MiLCAgICAgICAgICAgICAgIGdldGFyZ3NfYywgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRhcmdzX0MiLCAgICAgICAgICAgICAgIGdldGFyZ3NfQywgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX3MiLCAgICAgICAgICAgICAgIGdldGFyZ3NfcywgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX3Nfc3RhciIsICAgICAgICAgIGdldGFyZ3Nfc19zdGFyLCAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX3NfaGFzaCIsICAgICAgICAgIGdldGFyZ3Nfc19oYXNoLCAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCkBAIC0zMjg3LDYgKzM4NzAsMTAgQEAKICAgICB7ImdldGFyZ3NfWiIsICAgICAgICAgICAgICAgZ2V0YXJnc19aLCAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldGFyZ3NfWl9oYXNoIiwgICAgICAgICAgZ2V0YXJnc19aX2hhc2gsICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldGFyZ3Nfd19zdGFyIiwgICAgICAgICAgZ2V0YXJnc193X3N0YXIsICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldGFyZ3NfZXMiLCAgICAgICAgICAgICAgZ2V0YXJnc19lcywgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldGFyZ3NfZXQiLCAgICAgICAgICAgICAgZ2V0YXJnc19ldCwgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldGFyZ3NfZXNfaGFzaCIsICAgICAgICAgZ2V0YXJnc19lc19oYXNoLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldGFyZ3NfZXRfaGFzaCIsICAgICAgICAgZ2V0YXJnc19ldF9oYXNoLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImNvZGVjX2luY3JlbWVudGFsZW5jb2RlciIsCiAgICAgIChQeUNGdW5jdGlvbiljb2RlY19pbmNyZW1lbnRhbGVuY29kZXIsICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJjb2RlY19pbmNyZW1lbnRhbGRlY29kZXIiLApAQCAtMzMyMiw2ICszOTA5LDcgQEAKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZXZhbCIsIHRlc3RfcHl0aW1lX29iamVjdF90b190aW1ldmFsLCAgTUVUSF9WQVJBUkdTfSwKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZXNwZWMsICBNRVRIX1ZBUkFSR1N9LAogICAgIHsid2l0aF90cF9kZWwiLCAgICAgICAgICAgICB3aXRoX3RwX2RlbCwgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiY3JlYXRlX2NmdW5jdGlvbiIsICAgICAgICBjcmVhdGVfY2Z1bmN0aW9uLCAgICAgICAgICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X3B5bWVtX2FsbG9jMCIsCiAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3B5bWVtX2FsbG9jMCwgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9weW1lbV9zZXRyYXdhbGxvY2F0b3JzIiwKQEAgLTMzNDcsMTIgKzM5MzUsMTcgQEAKICAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZSIsCiAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKICAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9idXRfbm9fZG9jIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYnV0X25vX2RvY30sCiAgICAgeyJkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzIiwKICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAogICAgICAgICBkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzfSwKICAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzIiwKICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAogICAgICAgICBkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfd2l0aF9kZWZhdWx0c30sCisgICAgeyJyYWlzZV9zaWduYWwiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9yYWlzZV9zaWduYWwsIE1FVEhfVkFSQVJHU30sCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICB7ImNhbGxfaW5fdGVtcG9yYXJ5X2NfdGhyZWFkIiwgY2FsbF9pbl90ZW1wb3JhcnlfY190aHJlYWQsIE1FVEhfTywKICAgICAgUHlEb2NfU1RSKCJzZXRfZXJyb3JfY2xhc3MoZXJyb3JfY2xhc3MpIC0+IE5vbmUiKX0sCkBAIC0zMzY5LDYgKzM5NjIsMjAgQEAKICAgICAgICAgcHltYXJzaGFsX3JlYWRfbGFzdF9vYmplY3RfZnJvbV9maWxlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsicHltYXJzaGFsX3JlYWRfb2JqZWN0X2Zyb21fZmlsZSIsCiAgICAgICAgIHB5bWFyc2hhbF9yZWFkX29iamVjdF9mcm9tX2ZpbGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyZXR1cm5fbnVsbF93aXRob3V0X2Vycm9yIiwKKyAgICAgICAgcmV0dXJuX251bGxfd2l0aG91dF9lcnJvciwgTUVUSF9OT0FSR1N9LAorICAgIHsicmV0dXJuX3Jlc3VsdF93aXRoX2Vycm9yIiwKKyAgICAgICAgcmV0dXJuX3Jlc3VsdF93aXRoX2Vycm9yLCBNRVRIX05PQVJHU30sCisgICAgeyJQeVRpbWVfRnJvbVNlY29uZHMiLCB0ZXN0X3B5dGltZV9mcm9tc2Vjb25kcywgIE1FVEhfVkFSQVJHU30sCisgICAgeyJQeVRpbWVfRnJvbVNlY29uZHNPYmplY3QiLCB0ZXN0X3B5dGltZV9mcm9tc2Vjb25kc29iamVjdCwgIE1FVEhfVkFSQVJHU30sCisgICAgeyJQeVRpbWVfQXNTZWNvbmRzRG91YmxlIiwgdGVzdF9weXRpbWVfYXNzZWNvbmRzZG91YmxlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiUHlUaW1lX0FzVGltZXZhbCIsIHRlc3RfUHlUaW1lX0FzVGltZXZhbCwgTUVUSF9WQVJBUkdTfSwKKyNpZmRlZiBIQVZFX0NMT0NLX0dFVFRJTUUKKyAgICB7IlB5VGltZV9Bc1RpbWVzcGVjIiwgdGVzdF9QeVRpbWVfQXNUaW1lc3BlYywgTUVUSF9WQVJBUkdTfSwKKyNlbmRpZgorICAgIHsiUHlUaW1lX0FzTWlsbGlzZWNvbmRzIiwgdGVzdF9QeVRpbWVfQXNNaWxsaXNlY29uZHMsIE1FVEhfVkFSQVJHU30sCisgICAgeyJQeVRpbWVfQXNNaWNyb3NlY29uZHMiLCB0ZXN0X1B5VGltZV9Bc01pY3Jvc2Vjb25kcywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldF9yZWN1cnNpb25fZGVwdGgiLCBnZXRfcmVjdXJzaW9uX2RlcHRoLCBNRVRIX05PQVJHU30sCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0zNTI4LDYgKzQxMzUsMjAxIEBACiB9OwogCiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECit9IG1hdG11bE9iamVjdDsKKworc3RhdGljIFB5T2JqZWN0ICoKK21hdG11bFR5cGVfbWF0bXVsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIpCit7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihzT08pIiwgIm1hdG11bCIsIHNlbGYsIG90aGVyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21hdG11bFR5cGVfaW1hdG11bChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyKQoreworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoc09PKSIsICJpbWF0bXVsIiwgc2VsZiwgb3RoZXIpOworfQorCitzdGF0aWMgdm9pZAorbWF0bXVsVHlwZV9kZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyBQeU51bWJlck1ldGhvZHMgbWF0bXVsVHlwZV9hc19udW1iZXIgPSB7CisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2FkZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9zdWJ0cmFjdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9tdWx0aXBseSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9yZW1haW5kZSByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfZGl2bW9kICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX3Bvd2VyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX25lZ2F0aXZlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Bvc2l0aXZlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Fic29sdXRlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jvb2wgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW52ZXJ0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2xzaGlmdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9yc2hpZnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfYW5kICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX3hvciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9vciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfcmVzZXJ2ZWQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfZmxvYXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9hZGQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9zdWJ0cmFjdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX211bHRpcGx5ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfcmVtYWluZGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfcG93ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9sc2hpZnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9yc2hpZnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9hbmQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV94b3IgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9vciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9mbG9vcl9kaXZpZGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfdHJ1ZV9kaXZpZGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9mbG9vcl9kaXZpZGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV90cnVlX2RpdmlkZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbmRleCAqLworICAgIG1hdG11bFR5cGVfbWF0bXVsLCAgICAgICAgLyogbmJfbWF0cml4X211bHRpcGx5ICovCisgICAgbWF0bXVsVHlwZV9pbWF0bXVsICAgICAgICAvKiBuYl9tYXRyaXhfaW5wbGFjZV9tdWx0aXBseSAqLworfTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBtYXRtdWxUeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJtYXRtdWxUeXBlIiwKKyAgICBzaXplb2YobWF0bXVsT2JqZWN0KSwgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIG1hdG11bFR5cGVfZGVhbGxvYywgICAgICAgICAgICAgICAgIC8qIGRlc3RydWN0b3IgdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAmbWF0bXVsVHlwZV9hc19udW1iZXIsICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHIsICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgICJDIGxldmVsIHR5cGUgd2l0aCBtYXRyaXggb3BlcmF0aW9ucyBkZWZpbmVkIiwKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cmF2ZXJzZXByb2MgdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsCisgICAgMCwKKyAgICAwLAorICAgIDAsCisgICAgMCwKKyAgICAwLAorICAgIDAsCisgICAgMCwKKyAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeU9iamVjdF9EZWwsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCit9OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKmFvX2l0ZXJhdG9yOworfSBhd2FpdE9iamVjdDsKKworCitzdGF0aWMgUHlPYmplY3QgKgorYXdhaXRPYmplY3RfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIFB5T2JqZWN0ICp2OworICAgIGF3YWl0T2JqZWN0ICphbzsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImF3YWl0T2JqZWN0IiwgMSwgMSwgJnYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGFvID0gKGF3YWl0T2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKGFvID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlfSU5DUkVGKHYpOworICAgIGFvLT5hb19pdGVyYXRvciA9IHY7CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopYW87Cit9CisKKworc3RhdGljIHZvaWQKK2F3YWl0T2JqZWN0X2RlYWxsb2MoYXdhaXRPYmplY3QgKmFvKQoreworICAgIFB5X0NMRUFSKGFvLT5hb19pdGVyYXRvcik7CisgICAgUHlfVFlQRShhbyktPnRwX2ZyZWUoYW8pOworfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCithd2FpdE9iamVjdF9hd2FpdChhd2FpdE9iamVjdCAqYW8pCit7CisgICAgUHlfSU5DUkVGKGFvLT5hb19pdGVyYXRvcik7CisgICAgcmV0dXJuIGFvLT5hb19pdGVyYXRvcjsKK30KKworc3RhdGljIFB5QXN5bmNNZXRob2RzIGF3YWl0VHlwZV9hc19hc3luYyA9IHsKKyAgICAodW5hcnlmdW5jKWF3YWl0T2JqZWN0X2F3YWl0LCAgICAgICAgICAgLyogYW1fYXdhaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW1fYWl0ZXIgKi8KKyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW1fYW5leHQgKi8KK307CisKKworc3RhdGljIFB5VHlwZU9iamVjdCBhd2FpdFR5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgImF3YWl0VHlwZSIsCisgICAgc2l6ZW9mKGF3YWl0T2JqZWN0KSwgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAoZGVzdHJ1Y3Rvcilhd2FpdE9iamVjdF9kZWFsbG9jLCAgICAvKiBkZXN0cnVjdG9yIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgJmF3YWl0VHlwZV9hc19hc3luYywgICAgICAgICAgICAgICAgLyogdHBfYXNfYXN5bmMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyLCAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAiQyBsZXZlbCB0eXBlIHdpdGggdHBfYXNfYXN5bmMiLAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyYXZlcnNlcHJvYyB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwKKyAgICAwLAorICAgIDAsCisgICAgMCwKKyAgICAwLAorICAgIDAsCisgICAgMCwKKyAgICAwLAorICAgIGF3YWl0T2JqZWN0X25ldywgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5T2JqZWN0X0RlbCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KK307CisKIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfdGVzdGNhcGltb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULApAQCAtMzU0MSw2ICs0MzQzLDkgQEAKICAgICBOVUxMCiB9OwogCisvKiBQZXIgUEVQIDQ4OSwgdGhpcyBtb2R1bGUgd2lsbCBub3QgYmUgY29udmVydGVkIHRvIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uCisgKi8KKwogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fdGVzdGNhcGkodm9pZCkKIHsKQEAgLTM1NTcsNiArNDM2MiwxNSBAQAogICAgIC8qIGRvbid0IHVzZSBhIG5hbWUgc3RhcnRpbmcgd2l0aCAidGVzdCIsIHNpbmNlIHdlIGRvbid0IHdhbnQKICAgICAgICB0ZXN0X2NhcGkgdG8gYXV0b21hdGljYWxseSBjYWxsIHRoaXMgKi8KICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIl90ZXN0X3N0cnVjdG1lbWJlcnNUeXBlIiwgKFB5T2JqZWN0ICopJnRlc3Rfc3RydWN0bWVtYmVyc1R5cGUpOworICAgIGlmIChQeVR5cGVfUmVhZHkoJm1hdG11bFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKCZtYXRtdWxUeXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIm1hdG11bFR5cGUiLCAoUHlPYmplY3QgKikmbWF0bXVsVHlwZSk7CisKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZhd2FpdFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKCZhd2FpdFR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiYXdhaXRUeXBlIiwgKFB5T2JqZWN0ICopJmF3YWl0VHlwZSk7CiAKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkNIQVJfTUFYIiwgUHlMb25nX0Zyb21Mb25nKENIQVJfTUFYKSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJDSEFSX01JTiIsIFB5TG9uZ19Gcm9tTG9uZyhDSEFSX01JTikpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdG11bHRpcGhhc2UuYyBiL01vZHVsZXMvX3Rlc3RtdWx0aXBoYXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwNTIwNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3Rlc3RtdWx0aXBoYXNlLmMKQEAgLTAsMCArMSw1OTQgQEAKKworLyogVGVzdGluZyBtb2R1bGUgZm9yIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uIG9mIGV4dGVuc2lvbiBtb2R1bGVzIChQRVAgNDg5KQorICovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKworLyogRXhhbXBsZSBvYmplY3RzICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICAgICAgICAgICAgKnhfYXR0cjsgICAgICAgIC8qIEF0dHJpYnV0ZXMgZGljdGlvbmFyeSAqLworfSBFeGFtcGxlT2JqZWN0OworCisvKiBFeGFtcGxlIG1ldGhvZHMgKi8KKworc3RhdGljIGludAorRXhhbXBsZV90cmF2ZXJzZShFeGFtcGxlT2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT54X2F0dHIpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitFeGFtcGxlX2ZpbmFsaXplKEV4YW1wbGVPYmplY3QgKnNlbGYpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+eF9hdHRyKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK0V4YW1wbGVfZGVtbyhFeGFtcGxlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqbyA9IE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpkZW1vIiwgJm8pKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobyAhPSBOVUxMICYmIFB5VW5pY29kZV9DaGVjayhvKSkgeworICAgICAgICBQeV9JTkNSRUYobyk7CisgICAgICAgIHJldHVybiBvOworICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIEV4YW1wbGVfbWV0aG9kc1tdID0geworICAgIHsiZGVtbyIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKUV4YW1wbGVfZGVtbywgIE1FVEhfVkFSQVJHUywKKyAgICAgICAgUHlEb2NfU1RSKCJkZW1vKCkgLT4gTm9uZSIpfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK0V4YW1wbGVfZ2V0YXR0cm8oRXhhbXBsZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5hbWUpCit7CisgICAgaWYgKHNlbGYtPnhfYXR0ciAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICp2ID0gUHlEaWN0X0dldEl0ZW0oc2VsZi0+eF9hdHRyLCBuYW1lKTsKKyAgICAgICAgaWYgKHYgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKHYpOworICAgICAgICAgICAgcmV0dXJuIHY7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOworfQorCitzdGF0aWMgaW50CitFeGFtcGxlX3NldGF0dHIoRXhhbXBsZU9iamVjdCAqc2VsZiwgY2hhciAqbmFtZSwgUHlPYmplY3QgKnYpCit7CisgICAgaWYgKHNlbGYtPnhfYXR0ciA9PSBOVUxMKSB7CisgICAgICAgIHNlbGYtPnhfYXR0ciA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgaWYgKHNlbGYtPnhfYXR0ciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIGludCBydiA9IFB5RGljdF9EZWxJdGVtU3RyaW5nKHNlbGYtPnhfYXR0ciwgbmFtZSk7CisgICAgICAgIGlmIChydiA8IDApCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgImRlbGV0ZSBub24tZXhpc3RpbmcgRXhhbXBsZSBhdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0dXJuIHJ2OworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeURpY3RfU2V0SXRlbVN0cmluZyhzZWxmLT54X2F0dHIsIG5hbWUsIHYpOworfQorCitzdGF0aWMgUHlUeXBlX1Nsb3QgRXhhbXBsZV9UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2RvYywgIlRoZSBFeGFtcGxlIHR5cGUifSwKKyAgICB7UHlfdHBfZmluYWxpemUsIEV4YW1wbGVfZmluYWxpemV9LAorICAgIHtQeV90cF90cmF2ZXJzZSwgRXhhbXBsZV90cmF2ZXJzZX0sCisgICAge1B5X3RwX2dldGF0dHJvLCBFeGFtcGxlX2dldGF0dHJvfSwKKyAgICB7UHlfdHBfc2V0YXR0ciwgRXhhbXBsZV9zZXRhdHRyfSwKKyAgICB7UHlfdHBfbWV0aG9kcywgRXhhbXBsZV9tZXRob2RzfSwKKyAgICB7MCwgMH0sCit9OworCitzdGF0aWMgUHlUeXBlX1NwZWMgRXhhbXBsZV9UeXBlX3NwZWMgPSB7CisgICAgIl90ZXN0aW1wb3J0ZXhlYy5FeGFtcGxlIiwKKyAgICBzaXplb2YoRXhhbXBsZU9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsCisgICAgRXhhbXBsZV9UeXBlX3Nsb3RzCit9OworCisvKiBGdW5jdGlvbiBvZiB0d28gaW50ZWdlcnMgcmV0dXJuaW5nIGludGVnZXIgKi8KKworUHlEb2NfU1RSVkFSKHRlc3RleHBvcnRfZm9vX2RvYywKKyJmb28oaSxqKVxuXAorXG5cCitSZXR1cm4gdGhlIHN1bSBvZiBpIGFuZCBqLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgordGVzdGV4cG9ydF9mb28oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGxvbmcgaSwgajsKKyAgICBsb25nIHJlczsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImxsOmZvbyIsICZpLCAmaikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcyA9IGkgKyBqOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmVzKTsKK30KKworLyogVGVzdCB0aGF0IFB5U3RhdGUgcmVnaXN0cmF0aW9uIGZhaWxzICAqLworCitQeURvY19TVFJWQVIoY2FsbF9zdGF0ZV9yZWdpc3RyYXRpb25fZnVuY19kb2MsCisicmVnaXN0ZXJfc3RhdGUoMCk6IGNhbGwgUHlTdGF0ZV9GaW5kTW9kdWxlKClcblwKK3JlZ2lzdGVyX3N0YXRlKDEpOiBjYWxsIFB5U3RhdGVfQWRkTW9kdWxlKClcblwKK3JlZ2lzdGVyX3N0YXRlKDIpOiBjYWxsIFB5U3RhdGVfUmVtb3ZlTW9kdWxlKCkiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NhbGxfc3RhdGVfcmVnaXN0cmF0aW9uX2Z1bmMoUHlPYmplY3QgKm1vZCwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGksIHJldDsKKyAgICBQeU1vZHVsZURlZiAqZGVmID0gUHlNb2R1bGVfR2V0RGVmKG1vZCk7CisgICAgaWYgKGRlZiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6Y2FsbF9zdGF0ZV9yZWdpc3RyYXRpb25fZnVuYyIsICZpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIG1vZCA9IFB5U3RhdGVfRmluZE1vZHVsZShkZWYpOworICAgICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbW9kOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXQgPSBQeVN0YXRlX0FkZE1vZHVsZShtb2QsIGRlZik7CisgICAgICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXQgPSBQeVN0YXRlX1JlbW92ZU1vZHVsZShkZWYpOworICAgICAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKworc3RhdGljIFB5VHlwZV9TbG90IFN0cl9UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2Jhc2UsIE5VTEx9LCAvKiBmaWxsZWQgb3V0IGluIG1vZHVsZSBleGVjIGZ1bmN0aW9uICovCisgICAgezAsIDB9LAorfTsKKworc3RhdGljIFB5VHlwZV9TcGVjIFN0cl9UeXBlX3NwZWMgPSB7CisgICAgIl90ZXN0aW1wb3J0ZXhlYy5TdHIiLAorICAgIDAsCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLAorICAgIFN0cl9UeXBlX3Nsb3RzCit9OworCitzdGF0aWMgUHlNZXRob2REZWYgdGVzdGV4cG9ydF9tZXRob2RzW10gPSB7CisgICAgeyJmb28iLCAgICAgICAgICAgICB0ZXN0ZXhwb3J0X2ZvbywgICAgICAgICBNRVRIX1ZBUkFSR1MsCisgICAgICAgIHRlc3RleHBvcnRfZm9vX2RvY30sCisgICAgeyJjYWxsX3N0YXRlX3JlZ2lzdHJhdGlvbl9mdW5jIiwgIGNhbGxfc3RhdGVfcmVnaXN0cmF0aW9uX2Z1bmMsCisgICAgICAgIE1FVEhfVkFSQVJHUywgY2FsbF9zdGF0ZV9yZWdpc3RyYXRpb25fZnVuY19kb2N9LAorICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgaW50IGV4ZWNmdW5jKFB5T2JqZWN0ICptKQoreworICAgIFB5T2JqZWN0ICp0ZW1wID0gTlVMTDsKKworICAgIC8qIER1ZSB0byBjcm9zcyBwbGF0Zm9ybSBjb21waWxlciBpc3N1ZXMgdGhlIHNsb3RzIG11c3QgYmUgZmlsbGVkCisgICAgICogaGVyZS4gSXQncyByZXF1aXJlZCBmb3IgcG9ydGFiaWxpdHkgdG8gV2luZG93cyB3aXRob3V0IHJlcXVpcmluZworICAgICAqIEMrKy4gKi8KKyAgICBTdHJfVHlwZV9zbG90c1swXS5wZnVuYyA9ICZQeVVuaWNvZGVfVHlwZTsKKworICAgIC8qIEFkZCBhIGN1c3RvbSB0eXBlICovCisgICAgdGVtcCA9IFB5VHlwZV9Gcm9tU3BlYygmRXhhbXBsZV9UeXBlX3NwZWMpOworICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJFeGFtcGxlIiwgdGVtcCkgIT0gMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogQWRkIGFuIGV4Y2VwdGlvbiB0eXBlICovCisgICAgdGVtcCA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3Rlc3RpbXBvcnRleGVjLmVycm9yIiwgTlVMTCwgTlVMTCk7CisgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgImVycm9yIiwgdGVtcCkgIT0gMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogQWRkIFN0ciAqLworICAgIHRlbXAgPSBQeVR5cGVfRnJvbVNwZWMoJlN0cl9UeXBlX3NwZWMpOworICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTdHIiLCB0ZW1wKSAhPSAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImludF9jb25zdCIsIDE5NjkpICE9IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAic3RyX2NvbnN0IiwgInNvbWV0aGluZyBkaWZmZXJlbnQiKSAhPSAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICByZXR1cm4gMDsKKyBmYWlsOgorICAgIHJldHVybiAtMTsKK30KKworLyogSGVscGVyIGZvciBtb2R1bGUgZGVmaW5pdGlvbnM7IHRoZXJlJ2xsIGJlIGEgbG90IG9mIHRoZW0gKi8KKyNkZWZpbmUgVEVTVF9NT0RVTEVfREVGKG5hbWUsIHNsb3RzLCBtZXRob2RzKSB7IFwKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsICAgICAgICAgICAgICAgICAgICAgIC8qIG1fYmFzZSAqLyBcCisgICAgbmFtZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtX25hbWUgKi8gXAorICAgIFB5RG9jX1NUUigiVGVzdCBtb2R1bGUgIiBuYW1lKSwgICAgICAgICAgICAgLyogbV9kb2MgKi8gXAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9zaXplICovIFwKKyAgICBtZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fbWV0aG9kcyAqLyBcCisgICAgc2xvdHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtX3Nsb3RzICovIFwKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fdHJhdmVyc2UgKi8gXAorICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9jbGVhciAqLyBcCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtX2ZyZWUgKi8gXAorfQorCitQeU1vZHVsZURlZl9TbG90IG1haW5fc2xvdHNbXSA9IHsKKyAgICB7UHlfbW9kX2V4ZWMsIGV4ZWNmdW5jfSwKKyAgICB7MCwgTlVMTH0sCit9OworCitzdGF0aWMgUHlNb2R1bGVEZWYgbWFpbl9kZWYgPSBURVNUX01PRFVMRV9ERUYoIm1haW4iLCBtYWluX3Nsb3RzLCB0ZXN0ZXhwb3J0X21ldGhvZHMpOworCitQeU1PRElOSVRfRlVOQworUHlJbml0X190ZXN0bXVsdGlwaGFzZShQeU9iamVjdCAqc3BlYykKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmbWFpbl9kZWYpOworfQorCisKKy8qKioqIEltcG9ydGluZyBhIG5vbi1tb2R1bGUgb2JqZWN0ICoqKiovCisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfbm9ubW9kdWxlOworCisvKiBDcmVhdGUgYSBTaW1wbGVOYW1lc3BhY2UodGhyZWU9MykgKi8KK3N0YXRpYyBQeU9iamVjdCoKK2NyZWF0ZWZ1bmNfbm9ubW9kdWxlKFB5T2JqZWN0ICpzcGVjLCBQeU1vZHVsZURlZiAqZGVmKQoreworICAgIFB5T2JqZWN0ICpkY3QsICpucywgKnRocmVlOworCisgICAgaWYgKGRlZiAhPSAmZGVmX25vbm1vZHVsZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJkZWYgZG9lcyBub3QgbWF0Y2giKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZGN0ID0gUHlEaWN0X05ldygpOworICAgIGlmIChkY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0aHJlZSA9IFB5TG9uZ19Gcm9tTG9uZygzKTsKKyAgICBpZiAodGhyZWUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZGN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRjdCwgInRocmVlIiwgdGhyZWUpOworICAgIFB5X0RFQ1JFRih0aHJlZSk7CisKKyAgICBucyA9IF9QeU5hbWVzcGFjZV9OZXcoZGN0KTsKKyAgICBQeV9ERUNSRUYoZGN0KTsKKyAgICByZXR1cm4gbnM7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZl9TbG90IHNsb3RzX2NyZWF0ZV9ub25tb2R1bGVbXSA9IHsKKyAgICB7UHlfbW9kX2NyZWF0ZSwgY3JlYXRlZnVuY19ub25tb2R1bGV9LAorICAgIHswLCBOVUxMfSwKK307CisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfbm9ubW9kdWxlID0gVEVTVF9NT0RVTEVfREVGKAorICAgICJfdGVzdG11bHRpcGhhc2Vfbm9ubW9kdWxlIiwgc2xvdHNfY3JlYXRlX25vbm1vZHVsZSwgTlVMTCk7CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3Rlc3RtdWx0aXBoYXNlX25vbm1vZHVsZShQeU9iamVjdCAqc3BlYykKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmZGVmX25vbm1vZHVsZSk7Cit9CisKKy8qKioqIE5vbi1BU0NJSS1uYW1lZCBtb2R1bGVzICoqKiovCisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfbm9uYXNjaWlfbGF0aW4gPSB7IFwKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsICAgICAgICAgICAgICAgICAgICAgIC8qIG1fYmFzZSAqLworICAgICJfdGVzdG11bHRpcGhhc2Vfbm9uYXNjaWlfbGF0aW4iLCAgICAgICAgICAgLyogbV9uYW1lICovCisgICAgUHlEb2NfU1RSKCJNb2R1bGUgbmFtZWQgaW4gQ3plY2giKSwgICAgICAgICAvKiBtX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9zaXplICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtX21ldGhvZHMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fc2xvdHMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fdHJhdmVyc2UgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fY2xlYXIgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fZnJlZSAqLworfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdFVfX3Rlc3RtdWx0aXBoYXNlX3prb3VrYV9uYXRlbl9ldmMwN2dpOGUoUHlPYmplY3QgKnNwZWMpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJmRlZl9ub25hc2NpaV9sYXRpbik7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfbm9uYXNjaWlfa2FuYSA9IHsgXAorICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwgICAgICAgICAgICAgICAgICAgICAgLyogbV9iYXNlICovCisgICAgIl90ZXN0bXVsdGlwaGFzZV9ub25hc2NpaV9rYW5hIiwgICAgICAgICAgICAvKiBtX25hbWUgKi8KKyAgICBQeURvY19TVFIoIk1vZHVsZSBuYW1lZCBpbiBKYXBhbmVzZSIpLCAgICAgIC8qIG1fZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtX3NpemUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fbWV0aG9kcyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9zbG90cyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV90cmF2ZXJzZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9jbGVhciAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9mcmVlICovCit9OworCitQeU1PRElOSVRfRlVOQworUHlJbml0VV9lY2t6YndiaGM2anBnemN4NDE1eChQeU9iamVjdCAqc3BlYykKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmZGVmX25vbmFzY2lpX2thbmEpOworfQorCisvKioqIE1vZHVsZSB3aXRoIGEgc2luZ2xlLWNoYXJhY3RlciBuYW1lICoqKi8KKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF94KFB5T2JqZWN0ICpzcGVjKQoreworICAgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZtYWluX2RlZik7Cit9CisKKy8qKioqIFRlc3RpbmcgTlVMTCBzbG90cyAqKioqLworCitzdGF0aWMgUHlNb2R1bGVEZWYgbnVsbF9zbG90c19kZWYgPSBURVNUX01PRFVMRV9ERUYoCisgICAgIl90ZXN0bXVsdGlwaGFzZV9udWxsX3Nsb3RzIiwgTlVMTCwgTlVMTCk7CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3Rlc3RtdWx0aXBoYXNlX251bGxfc2xvdHMoUHlPYmplY3QgKnNwZWMpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJm51bGxfc2xvdHNfZGVmKTsKK30KKworLyoqKiogUHJvYmxlbWF0aWMgbW9kdWxlcyAqKioqLworCitzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBzbG90c19iYWRfbGFyZ2VbXSA9IHsKKyAgICB7X1B5X21vZF9MQVNUX1NMT1QgKyAxLCBOVUxMfSwKKyAgICB7MCwgTlVMTH0sCit9OworCitzdGF0aWMgUHlNb2R1bGVEZWYgZGVmX2JhZF9sYXJnZSA9IFRFU1RfTU9EVUxFX0RFRigKKyAgICAiX3Rlc3RtdWx0aXBoYXNlX2JhZF9zbG90X2xhcmdlIiwgc2xvdHNfYmFkX2xhcmdlLCBOVUxMKTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fdGVzdG11bHRpcGhhc2VfYmFkX3Nsb3RfbGFyZ2UoUHlPYmplY3QgKnNwZWMpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJmRlZl9iYWRfbGFyZ2UpOworfQorCitzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBzbG90c19iYWRfbmVnYXRpdmVbXSA9IHsKKyAgICB7LTEsIE5VTEx9LAorICAgIHswLCBOVUxMfSwKK307CisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfYmFkX25lZ2F0aXZlID0gVEVTVF9NT0RVTEVfREVGKAorICAgICJfdGVzdG11bHRpcGhhc2VfYmFkX3Nsb3RfbmVnYXRpdmUiLCBzbG90c19iYWRfbmVnYXRpdmUsIE5VTEwpOworCitQeU1PRElOSVRfRlVOQworUHlJbml0X190ZXN0bXVsdGlwaGFzZV9iYWRfc2xvdF9uZWdhdGl2ZShQeU9iamVjdCAqc3BlYykKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmZGVmX2JhZF9uZWdhdGl2ZSk7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfY3JlYXRlX2ludF93aXRoX3N0YXRlID0geyBcCisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULCAgICAgICAgICAgICAgICAgICAgICAvKiBtX2Jhc2UgKi8KKyAgICAiY3JlYXRlX3dpdGhfc3RhdGUiLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fbmFtZSAqLworICAgIFB5RG9jX1NUUigiTm90IGEgUHlNb2R1bGVPYmplY3Qgb2JqZWN0LCBidXQgcmVxdWVzdHMgcGVyLW1vZHVsZSBzdGF0ZSIpLAorICAgIDEwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9zaXplICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtX21ldGhvZHMgKi8KKyAgICBzbG90c19jcmVhdGVfbm9ubW9kdWxlLCAgICAgICAgICAgICAgICAgICAgIC8qIG1fc2xvdHMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fdHJhdmVyc2UgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fY2xlYXIgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fZnJlZSAqLworfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fdGVzdG11bHRpcGhhc2VfY3JlYXRlX2ludF93aXRoX3N0YXRlKFB5T2JqZWN0ICpzcGVjKQoreworICAgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZkZWZfY3JlYXRlX2ludF93aXRoX3N0YXRlKTsKK30KKworCitzdGF0aWMgUHlNb2R1bGVEZWYgZGVmX25lZ2F0aXZlX3NpemUgPSB7IFwKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsICAgICAgICAgICAgICAgICAgICAgIC8qIG1fYmFzZSAqLworICAgICJuZWdhdGl2ZV9zaXplIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9uYW1lICovCisgICAgUHlEb2NfU1RSKCJQeU1vZHVsZURlZiB3aXRoIG5lZ2F0aXZlIG1fc2l6ZSIpLAorICAgIC0xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9zaXplICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtX21ldGhvZHMgKi8KKyAgICBzbG90c19jcmVhdGVfbm9ubW9kdWxlLCAgICAgICAgICAgICAgICAgICAgIC8qIG1fc2xvdHMgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fdHJhdmVyc2UgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fY2xlYXIgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fZnJlZSAqLworfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fdGVzdG11bHRpcGhhc2VfbmVnYXRpdmVfc2l6ZShQeU9iamVjdCAqc3BlYykKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmZGVmX25lZ2F0aXZlX3NpemUpOworfQorCisKK3N0YXRpYyBQeU1vZHVsZURlZiB1bmluaXRpYWxpemVkX2RlZiA9IFRFU1RfTU9EVUxFX0RFRigibWFpbiIsIG1haW5fc2xvdHMsIHRlc3RleHBvcnRfbWV0aG9kcyk7CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3Rlc3RtdWx0aXBoYXNlX2V4cG9ydF91bmluaXRpYWxpemVkKFB5T2JqZWN0ICpzcGVjKQoreworICAgIHJldHVybiAoUHlPYmplY3QqKSAmdW5pbml0aWFsaXplZF9kZWY7Cit9CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3Rlc3RtdWx0aXBoYXNlX2V4cG9ydF9udWxsKFB5T2JqZWN0ICpzcGVjKQoreworICAgIHJldHVybiBOVUxMOworfQorCitQeU1PRElOSVRfRlVOQworUHlJbml0X190ZXN0bXVsdGlwaGFzZV9leHBvcnRfcmFpc2UoUHlPYmplY3QgKnNwZWMpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiYmFkIGV4cG9ydCBmdW5jdGlvbiIpOworICAgIHJldHVybiBOVUxMOworfQorCitQeU1PRElOSVRfRlVOQworUHlJbml0X190ZXN0bXVsdGlwaGFzZV9leHBvcnRfdW5yZXBvcnRlZF9leGNlcHRpb24oUHlPYmplY3QgKnNwZWMpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiYmFkIGV4cG9ydCBmdW5jdGlvbiIpOworICAgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZtYWluX2RlZik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2NyZWF0ZWZ1bmNfbnVsbChQeU9iamVjdCAqc3BlYywgUHlNb2R1bGVEZWYgKmRlZikKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlNb2R1bGVEZWZfU2xvdCBzbG90c19jcmVhdGVfbnVsbFtdID0geworICAgIHtQeV9tb2RfY3JlYXRlLCBjcmVhdGVmdW5jX251bGx9LAorICAgIHswLCBOVUxMfSwKK307CisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfY3JlYXRlX251bGwgPSBURVNUX01PRFVMRV9ERUYoCisgICAgIl90ZXN0bXVsdGlwaGFzZV9jcmVhdGVfbnVsbCIsIHNsb3RzX2NyZWF0ZV9udWxsLCBOVUxMKTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fdGVzdG11bHRpcGhhc2VfY3JlYXRlX251bGwoUHlPYmplY3QgKnNwZWMpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJmRlZl9jcmVhdGVfbnVsbCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2NyZWF0ZWZ1bmNfcmFpc2UoUHlPYmplY3QgKnNwZWMsIFB5TW9kdWxlRGVmICpkZWYpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiYmFkIGNyZWF0ZSBmdW5jdGlvbiIpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBzbG90c19jcmVhdGVfcmFpc2VbXSA9IHsKKyAgICB7UHlfbW9kX2NyZWF0ZSwgY3JlYXRlZnVuY19yYWlzZX0sCisgICAgezAsIE5VTEx9LAorfTsKKworc3RhdGljIFB5TW9kdWxlRGVmIGRlZl9jcmVhdGVfcmFpc2UgPSBURVNUX01PRFVMRV9ERUYoCisgICAgIl90ZXN0bXVsdGlwaGFzZV9jcmVhdGVfbnVsbCIsIHNsb3RzX2NyZWF0ZV9yYWlzZSwgTlVMTCk7CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3Rlc3RtdWx0aXBoYXNlX2NyZWF0ZV9yYWlzZShQeU9iamVjdCAqc3BlYykKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmZGVmX2NyZWF0ZV9yYWlzZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2NyZWF0ZWZ1bmNfdW5yZXBvcnRlZF9leGNlcHRpb24oUHlPYmplY3QgKnNwZWMsIFB5TW9kdWxlRGVmICpkZWYpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiYmFkIGNyZWF0ZSBmdW5jdGlvbiIpOworICAgIHJldHVybiBQeU1vZHVsZV9OZXcoImZvbyIpOworfQorCitzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBzbG90c19jcmVhdGVfdW5yZXBvcnRlZF9leGNlcHRpb25bXSA9IHsKKyAgICB7UHlfbW9kX2NyZWF0ZSwgY3JlYXRlZnVuY191bnJlcG9ydGVkX2V4Y2VwdGlvbn0sCisgICAgezAsIE5VTEx9LAorfTsKKworc3RhdGljIFB5TW9kdWxlRGVmIGRlZl9jcmVhdGVfdW5yZXBvcnRlZF9leGNlcHRpb24gPSBURVNUX01PRFVMRV9ERUYoCisgICAgIl90ZXN0bXVsdGlwaGFzZV9jcmVhdGVfdW5yZXBvcnRlZF9leGNlcHRpb24iLCBzbG90c19jcmVhdGVfdW5yZXBvcnRlZF9leGNlcHRpb24sIE5VTEwpOworCitQeU1PRElOSVRfRlVOQworUHlJbml0X190ZXN0bXVsdGlwaGFzZV9jcmVhdGVfdW5yZXBvcnRlZF9leGNlcHRpb24oUHlPYmplY3QgKnNwZWMpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJmRlZl9jcmVhdGVfdW5yZXBvcnRlZF9leGNlcHRpb24pOworfQorCitzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBzbG90c19ub25tb2R1bGVfd2l0aF9leGVjX3Nsb3RzW10gPSB7CisgICAge1B5X21vZF9jcmVhdGUsIGNyZWF0ZWZ1bmNfbm9ubW9kdWxlfSwKKyAgICB7UHlfbW9kX2V4ZWMsIGV4ZWNmdW5jfSwKKyAgICB7MCwgTlVMTH0sCit9OworCitzdGF0aWMgUHlNb2R1bGVEZWYgZGVmX25vbm1vZHVsZV93aXRoX2V4ZWNfc2xvdHMgPSBURVNUX01PRFVMRV9ERUYoCisgICAgIl90ZXN0bXVsdGlwaGFzZV9ub25tb2R1bGVfd2l0aF9leGVjX3Nsb3RzIiwgc2xvdHNfbm9ubW9kdWxlX3dpdGhfZXhlY19zbG90cywgTlVMTCk7CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3Rlc3RtdWx0aXBoYXNlX25vbm1vZHVsZV93aXRoX2V4ZWNfc2xvdHMoUHlPYmplY3QgKnNwZWMpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJmRlZl9ub25tb2R1bGVfd2l0aF9leGVjX3Nsb3RzKTsKK30KKworc3RhdGljIGludAorZXhlY2Z1bmNfZXJyKFB5T2JqZWN0ICptb2QpCit7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBzbG90c19leGVjX2VycltdID0geworICAgIHtQeV9tb2RfZXhlYywgZXhlY2Z1bmNfZXJyfSwKKyAgICB7MCwgTlVMTH0sCit9OworCitzdGF0aWMgUHlNb2R1bGVEZWYgZGVmX2V4ZWNfZXJyID0gVEVTVF9NT0RVTEVfREVGKAorICAgICJfdGVzdG11bHRpcGhhc2VfZXhlY19lcnIiLCBzbG90c19leGVjX2VyciwgTlVMTCk7CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3Rlc3RtdWx0aXBoYXNlX2V4ZWNfZXJyKFB5T2JqZWN0ICpzcGVjKQoreworICAgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZkZWZfZXhlY19lcnIpOworfQorCitzdGF0aWMgaW50CitleGVjZnVuY19yYWlzZShQeU9iamVjdCAqc3BlYykKK3sKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJiYWQgZXhlYyBmdW5jdGlvbiIpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIFB5TW9kdWxlRGVmX1Nsb3Qgc2xvdHNfZXhlY19yYWlzZVtdID0geworICAgIHtQeV9tb2RfZXhlYywgZXhlY2Z1bmNfcmFpc2V9LAorICAgIHswLCBOVUxMfSwKK307CisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfZXhlY19yYWlzZSA9IFRFU1RfTU9EVUxFX0RFRigKKyAgICAiX3Rlc3RtdWx0aXBoYXNlX2V4ZWNfcmFpc2UiLCBzbG90c19leGVjX3JhaXNlLCBOVUxMKTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fdGVzdG11bHRpcGhhc2VfZXhlY19yYWlzZShQeU9iamVjdCAqbW9kKQoreworICAgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZkZWZfZXhlY19yYWlzZSk7Cit9CisKK3N0YXRpYyBpbnQKK2V4ZWNmdW5jX3VucmVwb3J0ZWRfZXhjZXB0aW9uKFB5T2JqZWN0ICptb2QpCit7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiYmFkIGV4ZWMgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5TW9kdWxlRGVmX1Nsb3Qgc2xvdHNfZXhlY191bnJlcG9ydGVkX2V4Y2VwdGlvbltdID0geworICAgIHtQeV9tb2RfZXhlYywgZXhlY2Z1bmNfdW5yZXBvcnRlZF9leGNlcHRpb259LAorICAgIHswLCBOVUxMfSwKK307CisKK3N0YXRpYyBQeU1vZHVsZURlZiBkZWZfZXhlY191bnJlcG9ydGVkX2V4Y2VwdGlvbiA9IFRFU1RfTU9EVUxFX0RFRigKKyAgICAiX3Rlc3RtdWx0aXBoYXNlX2V4ZWNfdW5yZXBvcnRlZF9leGNlcHRpb24iLCBzbG90c19leGVjX3VucmVwb3J0ZWRfZXhjZXB0aW9uLCBOVUxMKTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fdGVzdG11bHRpcGhhc2VfZXhlY191bnJlcG9ydGVkX2V4Y2VwdGlvbihQeU9iamVjdCAqc3BlYykKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmZGVmX2V4ZWNfdW5yZXBvcnRlZF9leGNlcHRpb24pOworfQorCisvKioqIEhlbHBlciBmb3IgaW1wIHRlc3QgKioqLworCitzdGF0aWMgUHlNb2R1bGVEZWYgaW1wX2R1bW15X2RlZiA9IFRFU1RfTU9EVUxFX0RFRigiaW1wX2R1bW15IiwgbWFpbl9zbG90cywgdGVzdGV4cG9ydF9tZXRob2RzKTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9pbXBfZHVtbXkoUHlPYmplY3QgKnNwZWMpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJmltcF9kdW1teV9kZWYpOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMgYi9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYwppbmRleCBmODBmNzZhLi45NjgxODFjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYworKysgYi9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYwpAQCAtNDksMjEgKzQ5LDE4IEBACiAgKiB0aW1lb3V0LgogICovCiBzdGF0aWMgUHlMb2NrU3RhdHVzCi1hY3F1aXJlX3RpbWVkKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrLCBQWV9USU1FT1VUX1QgbWljcm9zZWNvbmRzKQorYWNxdWlyZV90aW1lZChQeVRocmVhZF90eXBlX2xvY2sgbG9jaywgX1B5VGltZV90IHRpbWVvdXQpCiB7CiAgICAgUHlMb2NrU3RhdHVzIHI7Ci0gICAgX1B5VGltZV90aW1ldmFsIGN1cnRpbWU7Ci0gICAgX1B5VGltZV90aW1ldmFsIGVuZHRpbWU7CisgICAgX1B5VGltZV90IGVuZHRpbWUgPSAwOworICAgIF9QeVRpbWVfdCBtaWNyb3NlY29uZHM7CiAKLQotICAgIGlmIChtaWNyb3NlY29uZHMgPiAwKSB7Ci0gICAgICAgIF9QeVRpbWVfZ2V0dGltZW9mZGF5KCZlbmR0aW1lKTsKLSAgICAgICAgZW5kdGltZS50dl9zZWMgKz0gbWljcm9zZWNvbmRzIC8gKDEwMDAgKiAxMDAwKTsKLSAgICAgICAgZW5kdGltZS50dl91c2VjICs9IG1pY3Jvc2Vjb25kcyAlICgxMDAwICogMTAwMCk7Ci0gICAgfQotCisgICAgaWYgKHRpbWVvdXQgPiAwKQorICAgICAgICBlbmR0aW1lID0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpICsgdGltZW91dDsKIAogICAgIGRvIHsKKyAgICAgICAgbWljcm9zZWNvbmRzID0gX1B5VGltZV9Bc01pY3Jvc2Vjb25kcyh0aW1lb3V0LCBfUHlUaW1lX1JPVU5EX0NFSUxJTkcpOworCiAgICAgICAgIC8qIGZpcnN0IGEgc2ltcGxlIG5vbi1ibG9ja2luZyB0cnkgd2l0aG91dCByZWxlYXNpbmcgdGhlIEdJTCAqLwogICAgICAgICByID0gUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKGxvY2ssIDAsIDApOwogICAgICAgICBpZiAociA9PSBQWV9MT0NLX0ZBSUxVUkUgJiYgbWljcm9zZWNvbmRzICE9IDApIHsKQEAgLTgyLDE0ICs3OSwxMiBAQAogCiAgICAgICAgICAgICAvKiBJZiB3ZSdyZSB1c2luZyBhIHRpbWVvdXQsIHJlY29tcHV0ZSB0aGUgdGltZW91dCBhZnRlciBwcm9jZXNzaW5nCiAgICAgICAgICAgICAgKiBzaWduYWxzLCBzaW5jZSB0aG9zZSBjYW4gdGFrZSB0aW1lLiAgKi8KLSAgICAgICAgICAgIGlmIChtaWNyb3NlY29uZHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgX1B5VGltZV9nZXR0aW1lb2ZkYXkoJmN1cnRpbWUpOwotICAgICAgICAgICAgICAgIG1pY3Jvc2Vjb25kcyA9ICgoZW5kdGltZS50dl9zZWMgLSBjdXJ0aW1lLnR2X3NlYykgKiAxMDAwMDAwICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZHRpbWUudHZfdXNlYyAtIGN1cnRpbWUudHZfdXNlYykpOworICAgICAgICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7CisgICAgICAgICAgICAgICAgdGltZW91dCA9IGVuZHRpbWUgLSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCk7CiAKICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgbmVnYXRpdmUgdmFsdWVzLCBzaW5jZSB0aG9zZSBtZWFuIGJsb2NrIGZvcmV2ZXIuCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKG1pY3Jvc2Vjb25kcyA8PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHIgPSBQWV9MT0NLX0ZBSUxVUkU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTksNDQgKzk0LDYxIEBACiAgICAgcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1sb2NrX1B5VGhyZWFkX2FjcXVpcmVfbG9jayhsb2Nrb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitzdGF0aWMgaW50Citsb2NrX2FjcXVpcmVfcGFyc2VfYXJncyhQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMsCisgICAgICAgICAgICAgICAgICAgICAgICBfUHlUaW1lX3QgKnRpbWVvdXQpCiB7CiAgICAgY2hhciAqa3dsaXN0W10gPSB7ImJsb2NraW5nIiwgInRpbWVvdXQiLCBOVUxMfTsKICAgICBpbnQgYmxvY2tpbmcgPSAxOwotICAgIGRvdWJsZSB0aW1lb3V0ID0gLTE7Ci0gICAgUFlfVElNRU9VVF9UIG1pY3Jvc2Vjb25kczsKLSAgICBQeUxvY2tTdGF0dXMgcjsKKyAgICBQeU9iamVjdCAqdGltZW91dF9vYmogPSBOVUxMOworICAgIGNvbnN0IF9QeVRpbWVfdCB1bnNldF90aW1lb3V0ID0gX1B5VGltZV9Gcm9tU2Vjb25kcygtMSk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGlkOmFjcXVpcmUiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJsb2NraW5nLCAmdGltZW91dCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICp0aW1lb3V0ID0gdW5zZXRfdGltZW91dCA7CiAKLSAgICBpZiAoIWJsb2NraW5nICYmIHRpbWVvdXQgIT0gLTEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjYW4ndCBzcGVjaWZ5IGEgdGltZW91dCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGEgbm9uLWJsb2NraW5nIGNhbGwiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxpTzphY3F1aXJlIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZibG9ja2luZywgJnRpbWVvdXRfb2JqKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHRpbWVvdXRfb2JqCisgICAgICAgICYmIF9QeVRpbWVfRnJvbVNlY29uZHNPYmplY3QodGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29iaiwgX1B5VGltZV9ST1VORF9DRUlMSU5HKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICghYmxvY2tpbmcgJiYgKnRpbWVvdXQgIT0gdW5zZXRfdGltZW91dCApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3Qgc3BlY2lmeSBhIHRpbWVvdXQgZm9yIGEgbm9uLWJsb2NraW5nIGNhbGwiKTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAodGltZW91dCA8IDAgJiYgdGltZW91dCAhPSAtMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInRpbWVvdXQgdmFsdWUgbXVzdCBiZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0bHkgcG9zaXRpdmUiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCp0aW1lb3V0IDwgMCAmJiAqdGltZW91dCAhPSB1bnNldF90aW1lb3V0KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgdmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmICghYmxvY2tpbmcpCi0gICAgICAgIG1pY3Jvc2Vjb25kcyA9IDA7Ci0gICAgZWxzZSBpZiAodGltZW91dCA9PSAtMSkKLSAgICAgICAgbWljcm9zZWNvbmRzID0gLTE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRpbWVvdXQgKj0gMWU2OwotICAgICAgICBpZiAodGltZW91dCA+PSAoZG91YmxlKSBQWV9USU1FT1VUX01BWCkgeworICAgICAgICAqdGltZW91dCA9IDA7CisgICAgZWxzZSBpZiAoKnRpbWVvdXQgIT0gdW5zZXRfdGltZW91dCkgeworICAgICAgICBfUHlUaW1lX3QgbWljcm9zZWNvbmRzOworCisgICAgICAgIG1pY3Jvc2Vjb25kcyA9IF9QeVRpbWVfQXNNaWNyb3NlY29uZHMoKnRpbWVvdXQsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CisgICAgICAgIGlmIChtaWNyb3NlY29uZHMgPj0gUFlfVElNRU9VVF9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBsYXJnZSIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgbWljcm9zZWNvbmRzID0gKFBZX1RJTUVPVVRfVCkgdGltZW91dDsKICAgICB9CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICByID0gYWNxdWlyZV90aW1lZChzZWxmLT5sb2NrX2xvY2ssIG1pY3Jvc2Vjb25kcyk7CitzdGF0aWMgUHlPYmplY3QgKgorbG9ja19QeVRocmVhZF9hY3F1aXJlX2xvY2sobG9ja29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIF9QeVRpbWVfdCB0aW1lb3V0OworICAgIFB5TG9ja1N0YXR1cyByOworCisgICAgaWYgKGxvY2tfYWNxdWlyZV9wYXJzZV9hcmdzKGFyZ3MsIGt3ZHMsICZ0aW1lb3V0KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgciA9IGFjcXVpcmVfdGltZWQoc2VsZi0+bG9ja19sb2NrLCB0aW1lb3V0KTsKICAgICBpZiAociA9PSBQWV9MT0NLX0lOVFIpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTQ3LDcgKzE1OSw3IEBACiB9CiAKIFB5RG9jX1NUUlZBUihhY3F1aXJlX2RvYywKLSJhY3F1aXJlKFt3YWl0XSkgLT4gYm9vbFxuXAorImFjcXVpcmUoYmxvY2tpbmc9VHJ1ZSwgdGltZW91dD0tMSkgLT4gYm9vbFxuXAogKGFjcXVpcmVfbG9jaygpIGlzIGFuIG9ic29sZXRlIHN5bm9ueW0pXG5cCiBcblwKIExvY2sgdGhlIGxvY2suICBXaXRob3V0IGFyZ3VtZW50LCB0aGlzIGJsb2NrcyBpZiB0aGUgbG9jayBpcyBhbHJlYWR5XG5cCkBAIC0xOTIsNiArMjA0LDEzIEBACiBcblwKIFJldHVybiB3aGV0aGVyIHRoZSBsb2NrIGlzIGluIHRoZSBsb2NrZWQgc3RhdGUuIik7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitsb2NrX3JlcHIobG9ja29iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyAlcyBvYmplY3QgYXQgJXA+IiwKKyAgICAgICAgc2VsZi0+bG9ja2VkID8gImxvY2tlZCIgOiAidW5sb2NrZWQiLCBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLCBzZWxmKTsKK30KKwogc3RhdGljIFB5TWV0aG9kRGVmIGxvY2tfbWV0aG9kc1tdID0gewogICAgIHsiYWNxdWlyZV9sb2NrIiwgKFB5Q0Z1bmN0aW9uKWxvY2tfUHlUaHJlYWRfYWNxdWlyZV9sb2NrLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBhY3F1aXJlX2RvY30sCkBAIC0yMjMsNyArMjQyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAocmVwcmZ1bmMpbG9ja19yZXByLCAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLwpAQCAtMjc0LDQxICsyOTMsMTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBybG9ja19hY3F1aXJlKHJsb2Nrb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7ImJsb2NraW5nIiwgInRpbWVvdXQiLCBOVUxMfTsKLSAgICBpbnQgYmxvY2tpbmcgPSAxOwotICAgIGRvdWJsZSB0aW1lb3V0ID0gLTE7Ci0gICAgUFlfVElNRU9VVF9UIG1pY3Jvc2Vjb25kczsKKyAgICBfUHlUaW1lX3QgdGltZW91dDsKICAgICBsb25nIHRpZDsKICAgICBQeUxvY2tTdGF0dXMgciA9IFBZX0xPQ0tfQUNRVUlSRUQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGlkOmFjcXVpcmUiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJsb2NraW5nLCAmdGltZW91dCkpCisgICAgaWYgKGxvY2tfYWNxdWlyZV9wYXJzZV9hcmdzKGFyZ3MsIGt3ZHMsICZ0aW1lb3V0KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCFibG9ja2luZyAmJiB0aW1lb3V0ICE9IC0xKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY2FuJ3Qgc3BlY2lmeSBhIHRpbWVvdXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgImZvciBhIG5vbi1ibG9ja2luZyBjYWxsIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAodGltZW91dCA8IDAgJiYgdGltZW91dCAhPSAtMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInRpbWVvdXQgdmFsdWUgbXVzdCBiZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0bHkgcG9zaXRpdmUiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmICghYmxvY2tpbmcpCi0gICAgICAgIG1pY3Jvc2Vjb25kcyA9IDA7Ci0gICAgZWxzZSBpZiAodGltZW91dCA9PSAtMSkKLSAgICAgICAgbWljcm9zZWNvbmRzID0gLTE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRpbWVvdXQgKj0gMWU2OwotICAgICAgICBpZiAodGltZW91dCA+PSAoZG91YmxlKSBQWV9USU1FT1VUX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgdmFsdWUgaXMgdG9vIGxhcmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtaWNyb3NlY29uZHMgPSAoUFlfVElNRU9VVF9UKSB0aW1lb3V0OwotICAgIH0KLQogICAgIHRpZCA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKICAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwICYmIHRpZCA9PSBzZWxmLT5ybG9ja19vd25lcikgewogICAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50ID0gc2VsZi0+cmxvY2tfY291bnQgKyAxOwpAQCAtMzIwLDcgKzMxMSw3IEBACiAgICAgICAgIHNlbGYtPnJsb2NrX2NvdW50ID0gY291bnQ7CiAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogICAgIH0KLSAgICByID0gYWNxdWlyZV90aW1lZChzZWxmLT5ybG9ja19sb2NrLCBtaWNyb3NlY29uZHMpOworICAgIHIgPSBhY3F1aXJlX3RpbWVkKHNlbGYtPnJsb2NrX2xvY2ssIHRpbWVvdXQpOwogICAgIGlmIChyID09IFBZX0xPQ0tfQUNRVUlSRUQpIHsKICAgICAgICAgYXNzZXJ0KHNlbGYtPnJsb2NrX2NvdW50ID09IDApOwogICAgICAgICBzZWxmLT5ybG9ja19vd25lciA9IHRpZDsKQEAgLTQ3NSw4ICs0NjYsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBybG9ja19yZXByKHJsb2Nrb2JqZWN0ICpzZWxmKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG93bmVyPSVsZCBjb3VudD0lbHU+IiwKLSAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSwgc2VsZi0+cmxvY2tfb3duZXIsIHNlbGYtPnJsb2NrX2NvdW50KTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyAlcyBvYmplY3Qgb3duZXI9JWxkIGNvdW50PSVsdSBhdCAlcD4iLAorICAgICAgICBzZWxmLT5ybG9ja19jb3VudCA/ICJsb2NrZWQiIDogInVubG9ja2VkIiwKKyAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSwgc2VsZi0+cmxvY2tfb3duZXIsCisgICAgICAgIHNlbGYtPnJsb2NrX2NvdW50LCBzZWxmKTsKIH0KIAogCkBAIC0xMTQxLDcgKzExMzQsOCBAQAogImFsbG9jYXRlX2xvY2soKSAtPiBsb2NrIG9iamVjdFxuXAogKGFsbG9jYXRlKCkgaXMgYW4gb2Jzb2xldGUgc3lub255bSlcblwKIFxuXAotQ3JlYXRlIGEgbmV3IGxvY2sgb2JqZWN0LiAgU2VlIGhlbHAoTG9ja1R5cGUpIGZvciBpbmZvcm1hdGlvbiBhYm91dCBsb2Nrcy4iKTsKK0NyZWF0ZSBhIG5ldyBsb2NrIG9iamVjdC4gU2VlIGhlbHAodHlwZSh0aHJlYWRpbmcuTG9jaygpKSkgZm9yXG5cCitpbmZvcm1hdGlvbiBhYm91dCBsb2Nrcy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHRocmVhZF9nZXRfaWRlbnQoUHlPYmplY3QgKnNlbGYpCkBAIC0xMzMzLDcgKzEzMjcsNyBAQAogCiBQeURvY19TVFJWQVIobG9ja19kb2MsCiAiQSBsb2NrIG9iamVjdCBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUuICBUbyBjcmVhdGUgYSBsb2NrLFxuXAotY2FsbCB0aGUgUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpIGZ1bmN0aW9uLiAgTWV0aG9kcyBhcmU6XG5cCitjYWxsIHRocmVhZGluZy5Mb2NrKCkuICBNZXRob2RzIGFyZTpcblwKIFxuXAogYWNxdWlyZSgpIC0tIGxvY2sgdGhlIGxvY2ssIHBvc3NpYmx5IGJsb2NraW5nIHVudGlsIGl0IGNhbiBiZSBvYnRhaW5lZFxuXAogcmVsZWFzZSgpIC0tIHVubG9jayBvZiB0aGUgbG9ja1xuXApAQCAtMTM1OSw3ICsxMzUzLDkgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3RocmVhZCh2b2lkKQogewotICAgIFB5T2JqZWN0ICptLCAqZCwgKnRpbWVvdXRfbWF4OworICAgIFB5T2JqZWN0ICptLCAqZCwgKnY7CisgICAgZG91YmxlIHRpbWVfbWF4OworICAgIGRvdWJsZSB0aW1lb3V0X21heDsKIAogICAgIC8qIEluaXRpYWxpemUgdHlwZXM6ICovCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmbG9jYWxkdW1teXR5cGUpIDwgMCkKQEAgLTEzNzYsMTAgKzEzNzIsMTQgQEAKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHRpbWVvdXRfbWF4ID0gUHlGbG9hdF9Gcm9tRG91YmxlKFBZX1RJTUVPVVRfTUFYIC8gMTAwMDAwMCk7Ci0gICAgaWYgKCF0aW1lb3V0X21heCkKKyAgICB0aW1lb3V0X21heCA9IFBZX1RJTUVPVVRfTUFYIC8gMTAwMDAwMDsKKyAgICB0aW1lX21heCA9IGZsb29yKF9QeVRpbWVfQXNTZWNvbmRzRG91YmxlKF9QeVRpbWVfTUFYKSk7CisgICAgdGltZW91dF9tYXggPSBQeV9NSU4odGltZW91dF9tYXgsIHRpbWVfbWF4KTsKKworICAgIHYgPSBQeUZsb2F0X0Zyb21Eb3VibGUodGltZW91dF9tYXgpOworICAgIGlmICghdikKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVElNRU9VVF9NQVgiLCB0aW1lb3V0X21heCkgPCAwKQorICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRJTUVPVVRfTUFYIiwgdikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEFkZCBhIHN5bWJvbGljIGNvbnN0YW50ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190a2ludGVyLmMgYi9Nb2R1bGVzL190a2ludGVyLmMKaW5kZXggNTIwMjViYi4uMzE2ZjkzMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGtpbnRlci5jCisrKyBiL01vZHVsZXMvX3RraW50ZXIuYwpAQCAtOSw4ICs5LDggQEAKIAogLyogVENML1RLIFZFUlNJT04gSU5GTzoKIAotICAgIE9ubHkgVGNsL1RrIDguMy4xIGFuZCBsYXRlciBhcmUgc3VwcG9ydGVkLiAgT2xkZXIgdmVyc2lvbnMgYXJlIG5vdAotICAgIHN1cHBvcnRlZC4gVXNlIFB5dGhvbiAyLjYgb3Igb2xkZXIgaWYgeW91IGNhbm5vdCB1cGdyYWRlIHlvdXIKKyAgICBPbmx5IFRjbC9UayA4LjQgYW5kIGxhdGVyIGFyZSBzdXBwb3J0ZWQuICBPbGRlciB2ZXJzaW9ucyBhcmUgbm90CisgICAgc3VwcG9ydGVkLiBVc2UgUHl0aG9uIDMuNCBvciBvbGRlciBpZiB5b3UgY2Fubm90IHVwZ3JhZGUgeW91cgogICAgIFRjbC9UayBsaWJyYXJpZXMuCiAqLwogCkBAIC0yMSw2ICsyMSw3IEBACiAKICovCiAKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSA8Y3R5cGUuaD4KQEAgLTM2LDEzICszNyw2IEBACiAjZGVmaW5lIENIRUNLX1NJWkUoc2l6ZSwgZWxlbXNpemUpIFwKICAgICAoKHNpemVfdCkoc2l6ZSkgPD0gUHlfTUlOKChzaXplX3QpSU5UX01BWCwgVUlOVF9NQVggLyAoc2l6ZV90KShlbGVtc2l6ZSkpKQogCi0vKiBTdGFydGluZyB3aXRoIFRjbCA4LjQsIG1hbnkgQVBJcyBvZmZlciBjb25zdC1jb3JyZWN0bmVzcy4gIFVuZm9ydHVuYXRlbHksCi0gICBtYWtpbmcgX3RraW50ZXIgY29ycmVjdCBmb3IgdGhpcyBBUEkgbWVhbnMgdG8gYnJlYWsgZWFybGllcgotICAgdmVyc2lvbnMuIFVTRV9DT01QQVRfQ09OU1QgYWxsb3dzIHRvIG1ha2UgX3RraW50ZXIgd29yayB3aXRoIGJvdGggOC40IGFuZAotICAgZWFybGllciB2ZXJzaW9ucy4gT25jZSBUY2wgcmVsZWFzZXMgYmVmb3JlIDguNCBkb24ndCBuZWVkIHRvIGJlIHN1cHBvcnRlZAotICAgYW55bW9yZSwgdGhpcyBzaG91bGQgZ28uICovCi0jZGVmaW5lIFVTRV9DT01QQVRfQ09OU1QKLQogLyogSWYgVGNsIGlzIGNvbXBpbGVkIGZvciB0aHJlYWRzLCB3ZSBtdXN0IGFsc28gZGVmaW5lIFRDTF9USFJFQUQuIFdlIGRlZmluZQogICAgaXQgYWx3YXlzOyBpZiBUY2wgaXMgbm90IHRocmVhZGVkLCB0aGUgdGhyZWFkIGZ1bmN0aW9ucyBpbgogICAgVGNsIGFyZSBlbXB0eS4gICovCkBAIC01OCwxNSArNTIsOCBAQAogCiAjaW5jbHVkZSAidGtpbnRlci5oIgogCi0vKiBGb3IgVGNsIDguMiBhbmQgOC4zLCBDT05TVCogaXMgbm90IGRlZmluZWQgKGV4Y2VwdCBvbiBDeWd3aW4pLiAqLwotI2lmbmRlZiBDT05TVDg0X1JFVFVSTgotI2RlZmluZSBDT05TVDg0X1JFVFVSTgotI3VuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUCi0jZW5kaWYKLQotI2lmIFRLX0hFWF9WRVJTSU9OIDwgMHgwODAzMDIwMQotI2Vycm9yICJUayBvbGRlciB0aGFuIDguMy4xIG5vdCBzdXBwb3J0ZWQiCisjaWYgVEtfSEVYX1ZFUlNJT04gPCAweDA4MDQwMjAwCisjZXJyb3IgIlRrIG9sZGVyIHRoYW4gOC40IG5vdCBzdXBwb3J0ZWQiCiAjZW5kaWYKIAogI2lmIFRLX0hFWF9WRVJTSU9OID49IDB4MDgwNTAyMDggJiYgVEtfSEVYX1ZFUlNJT04gPCAweDA4MDYwMDAwIHx8IFwKQEAgLTExNCw3ICsxMDEsNjUgQEAKICNpZmRlZiBNU19XSU5ET1dTCiAjaW5jbHVkZSA8Y29uaW8uaD4KICNkZWZpbmUgV0FJVF9GT1JfU1RESU4KKworc3RhdGljIFB5T2JqZWN0ICoKK19nZXRfdGNsX2xpYl9wYXRoKCkKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKnRjbF9saWJyYXJ5X3BhdGggPSBOVUxMOworICAgIHN0YXRpYyBpbnQgYWxyZWFkeV9jaGVja2VkID0gMDsKKworICAgIGlmIChhbHJlYWR5X2NoZWNrZWQgPT0gMCkgeworICAgICAgICBQeU9iamVjdCAqcHJlZml4OworICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsKKyAgICAgICAgaW50IHN0YXRfcmV0dXJuX3ZhbHVlOworCisgICAgICAgIHByZWZpeCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoUHlfR2V0UHJlZml4KCksIC0xKTsKKyAgICAgICAgaWYgKHByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGV4cGVjdGVkIGxvY2F0aW9uIGZvciBhbiBpbnN0YWxsZWQgUHl0aG9uIGZpcnN0ICovCisgICAgICAgIHRjbF9saWJyYXJ5X3BhdGggPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiXFx0Y2xcXHRjbCIgVENMX1ZFUlNJT04pOworICAgICAgICBpZiAodGNsX2xpYnJhcnlfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB0Y2xfbGlicmFyeV9wYXRoID0gUHlVbmljb2RlX0NvbmNhdChwcmVmaXgsIHRjbF9saWJyYXJ5X3BhdGgpOworICAgICAgICBpZiAodGNsX2xpYnJhcnlfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdGF0X3JldHVybl92YWx1ZSA9IF9QeV9zdGF0KHRjbF9saWJyYXJ5X3BhdGgsICZzdGF0X2J1Zik7CisgICAgICAgIGlmIChzdGF0X3JldHVybl92YWx1ZSA9PSAtMikgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRfcmV0dXJuX3ZhbHVlID09IC0xKSB7CisgICAgICAgICAgICAvKiBpbnN0YWxsIGxvY2F0aW9uIGRvZXNuJ3QgZXhpc3QsIHJlc2V0IGVycm5vIGFuZCBzZWUgaWYKKyAgICAgICAgICAgICAgIHdlJ3JlIGEgcmVwb3NpdG9yeSBidWlsZCAqLworICAgICAgICAgICAgZXJybm8gPSAwOworI2lmZGVmIFB5X1RDTFRLX0RJUgorICAgICAgICAgICAgdGNsX2xpYnJhcnlfcGF0aCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVENMVEtfRElSICJcXGxpYlxcdGNsIiBUQ0xfVkVSU0lPTik7CisgICAgICAgICAgICBpZiAodGNsX2xpYnJhcnlfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0X3JldHVybl92YWx1ZSA9IF9QeV9zdGF0KHRjbF9saWJyYXJ5X3BhdGgsICZzdGF0X2J1Zik7CisgICAgICAgICAgICBpZiAoc3RhdF9yZXR1cm5fdmFsdWUgPT0gLTIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0X3JldHVybl92YWx1ZSA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8qIHRjbHRrRGlyIGZvciBhIHJlcG9zaXRvcnkgYnVpbGQgZG9lc24ndCBleGlzdCBlaXRoZXIsCisgICAgICAgICAgICAgICAgICAgcmVzZXQgZXJybm8gYW5kIGxlYXZlIFRjbCB0byBpdHMgb3duIGRldmljZXMgKi8KKyAgICAgICAgICAgICAgICBlcnJubyA9IDA7CisgICAgICAgICAgICAgICAgdGNsX2xpYnJhcnlfcGF0aCA9IE5VTEw7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgdGNsX2xpYnJhcnlfcGF0aCA9IE5VTEw7CiAjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBhbHJlYWR5X2NoZWNrZWQgPSAxOworICAgIH0KKyAgICByZXR1cm4gdGNsX2xpYnJhcnlfcGF0aDsKK30KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKICNpZmRlZiBXSVRIX1RIUkVBRAogCkBAIC0zODUsMTAgKzQzMCwxMCBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TcGxpdChjaGFyICpsaXN0KQorU3BsaXQoY29uc3QgY2hhciAqbGlzdCkKIHsKICAgICBpbnQgYXJnYzsKLSAgICBjaGFyICoqYXJndjsKKyAgICBjb25zdCBjaGFyICoqYXJndjsKICAgICBQeU9iamVjdCAqdjsKIAogICAgIGlmIChsaXN0ID09IE5VTEwpIHsKQEAgLTQzMiw3ICs0NzcsNyBAQAogU3BsaXRPYmooUHlPYmplY3QgKmFyZykKIHsKICAgICBpZiAoUHlUdXBsZV9DaGVjayhhcmcpKSB7Ci0gICAgICAgIGludCBpLCBzaXplOworICAgICAgICBQeV9zc2l6ZV90IGksIHNpemU7CiAgICAgICAgIFB5T2JqZWN0ICplbGVtLCAqbmV3ZWxlbSwgKnJlc3VsdDsKIAogICAgICAgICBzaXplID0gUHlUdXBsZV9TaXplKGFyZyk7CkBAIC00NDgsNyArNDkzLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgaW50IGs7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBrOwogICAgICAgICAgICAgICAgIGlmIChuZXdlbGVtID09IGVsZW0pIHsKICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5ld2VsZW0pOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ2OCw5ICs1MTMsMjkgQEAKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCwgcmV0dXJuaW5nIGFyZy4gKi8KICAgICB9CisgICAgZWxzZSBpZiAoUHlMaXN0X0NoZWNrKGFyZykpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpLCBzaXplOworICAgICAgICBQeU9iamVjdCAqZWxlbSwgKm5ld2VsZW0sICpyZXN1bHQ7CisKKyAgICAgICAgc2l6ZSA9IFB5TGlzdF9HRVRfU0laRShhcmcpOworICAgICAgICByZXN1bHQgPSBQeVR1cGxlX05ldyhzaXplKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogUmVjdXJzaXZlbHkgaW52b2tlIFNwbGl0T2JqIGZvciBhbGwgbGlzdCBpdGVtcy4gKi8KKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBlbGVtID0gUHlMaXN0X0dFVF9JVEVNKGFyZywgaSk7CisgICAgICAgICAgICBuZXdlbGVtID0gU3BsaXRPYmooZWxlbSk7CisgICAgICAgICAgICBpZiAoIW5ld2VsZW0pIHsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeVR1cGxlX1NldEl0ZW0ocmVzdWx0LCBpLCBuZXdlbGVtKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soYXJnKSkgewogICAgICAgICBpbnQgYXJnYzsKLSAgICAgICAgY2hhciAqKmFyZ3Y7CisgICAgICAgIGNvbnN0IGNoYXIgKiphcmd2OwogICAgICAgICBjaGFyICpsaXN0ID0gUHlVbmljb2RlX0FzVVRGOChhcmcpOwogCiAgICAgICAgIGlmIChsaXN0ID09IE5VTEwgfHwKQEAgLTQ4NSw3ICs1NTAsNyBAQAogICAgIH0KICAgICBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKGFyZykpIHsKICAgICAgICAgaW50IGFyZ2M7Ci0gICAgICAgIGNoYXIgKiphcmd2OworICAgICAgICBjb25zdCBjaGFyICoqYXJndjsKICAgICAgICAgY2hhciAqbGlzdCA9IFB5Qnl0ZXNfQXNTdHJpbmcoYXJnKTsKIAogICAgICAgICBpZiAoVGNsX1NwbGl0TGlzdCgoVGNsX0ludGVycCAqKU5VTEwsIGxpc3QsICZhcmdjLCAmYXJndikgIT0gVENMX09LKSB7CkBAIC01MDIsNiArNTY3LDE0IEBACiB9CiAKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF90a2ludGVyCitjbGFzcyBfdGtpbnRlci50a2FwcCAiVGthcHBPYmplY3QgKiIgIiZUa2FwcF9UeXBlX3NwZWMiCitjbGFzcyBfdGtpbnRlci5UY2xfT2JqICJQeVRjbE9iamVjdCAqIiAiJlB5VGNsT2JqZWN0X1R5cGVfc3BlYyIKK2NsYXNzIF90a2ludGVyLnRrdGltZXJ0b2tlbiAiVGt0dE9iamVjdCAqIiAiJlRrdHRfVHlwZV9zcGVjIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9YjFlYmYxNWMxNjJlZTIyOV0qLworCiAvKioqKiBUa2FwcCBPYmplY3QgKioqKi8KIAogI2lmbmRlZiBXSVRIX0FQUElOSVQKQEAgLTU1Miw4ICs2MjUsOSBAQAogc3RhdGljIHZvaWQgRGlzYWJsZUV2ZW50SG9vayh2b2lkKTsgLyogRm9yd2FyZCAqLwogCiBzdGF0aWMgVGthcHBPYmplY3QgKgotVGthcHBfTmV3KGNoYXIgKnNjcmVlbk5hbWUsIGNoYXIgKmNsYXNzTmFtZSwKLSAgICAgICAgICBpbnQgaW50ZXJhY3RpdmUsIGludCB3YW50b2JqZWN0cywgaW50IHdhbnRUaywgaW50IHN5bmMsIGNoYXIgKnVzZSkKK1RrYXBwX05ldyhjb25zdCBjaGFyICpzY3JlZW5OYW1lLCBjb25zdCBjaGFyICpjbGFzc05hbWUsCisgICAgICAgICAgaW50IGludGVyYWN0aXZlLCBpbnQgd2FudG9iamVjdHMsIGludCB3YW50VGssIGludCBzeW5jLAorICAgICAgICAgIGNvbnN0IGNoYXIgKnVzZSkKIHsKICAgICBUa2FwcE9iamVjdCAqdjsKICAgICBjaGFyICphcmd2MDsKQEAgLTYxMCw3ICs2ODQsNyBAQAogICAgICAgICBUY2xfU2V0VmFyKHYtPmludGVycCwgInRjbF9pbnRlcmFjdGl2ZSIsICIwIiwgVENMX0dMT0JBTF9PTkxZKTsKIAogICAgIC8qIFRoaXMgaXMgdXNlZCB0byBnZXQgdGhlIGFwcGxpY2F0aW9uIGNsYXNzIGZvciBUayA0LjEgYW5kIHVwICovCi0gICAgYXJndjAgPSAoY2hhciopYXR0ZW1wdGNrYWxsb2Moc3RybGVuKGNsYXNzTmFtZSkgKyAxKTsKKyAgICBhcmd2MCA9IChjaGFyKilQeU1lbV9NYWxsb2Moc3RybGVuKGNsYXNzTmFtZSkgKyAxKTsKICAgICBpZiAoIWFyZ3YwKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKQEAgLTYyMSw3ICs2OTUsNyBAQAogICAgIGlmIChQeV9JU1VQUEVSKFB5X0NIQVJNQVNLKGFyZ3YwWzBdKSkpCiAgICAgICAgIGFyZ3YwWzBdID0gUHlfVE9MT1dFUihQeV9DSEFSTUFTSyhhcmd2MFswXSkpOwogICAgIFRjbF9TZXRWYXIodi0+aW50ZXJwLCAiYXJndjAiLCBhcmd2MCwgVENMX0dMT0JBTF9PTkxZKTsKLSAgICBja2ZyZWUoYXJndjApOworICAgIFB5TWVtX0ZyZWUoYXJndjApOwogCiAgICAgaWYgKCEgd2FudFRrKSB7CiAgICAgICAgIFRjbF9TZXRWYXIodi0+aW50ZXJwLApAQCAtNjM3LDE0ICs3MTEsMTQgQEAKICAgICAvKiBzb21lIGluaXRpYWwgYXJndW1lbnRzIG5lZWQgdG8gYmUgaW4gYXJndiAqLwogICAgIGlmIChzeW5jIHx8IHVzZSkgewogICAgICAgICBjaGFyICphcmdzOwotICAgICAgICBpbnQgbGVuID0gMDsKKyAgICAgICAgUHlfc3NpemVfdCBsZW4gPSAwOwogCiAgICAgICAgIGlmIChzeW5jKQogICAgICAgICAgICAgbGVuICs9IHNpemVvZiAiLXN5bmMiOwogICAgICAgICBpZiAodXNlKQotICAgICAgICAgICAgbGVuICs9IHN0cmxlbih1c2UpICsgc2l6ZW9mICItdXNlICI7CisgICAgICAgICAgICBsZW4gKz0gc3RybGVuKHVzZSkgKyBzaXplb2YgIi11c2UgIjsgIC8qIG5ldmVyIG92ZXJmbG93cyAqLwogCi0gICAgICAgIGFyZ3MgPSAoY2hhciopYXR0ZW1wdGNrYWxsb2MobGVuKTsKKyAgICAgICAgYXJncyA9IChjaGFyKilQeU1lbV9NYWxsb2MobGVuKTsKICAgICAgICAgaWYgKCFhcmdzKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtNjYyLDkgKzczNiwzNiBAQAogICAgICAgICB9CiAKICAgICAgICAgVGNsX1NldFZhcih2LT5pbnRlcnAsICJhcmd2IiwgYXJncywgVENMX0dMT0JBTF9PTkxZKTsKLSAgICAgICAgY2tmcmVlKGFyZ3MpOworICAgICAgICBQeU1lbV9GcmVlKGFyZ3MpOwogICAgIH0KIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpzdHJfcGF0aDsKKyAgICAgICAgUHlPYmplY3QgKnV0ZjhfcGF0aDsKKyAgICAgICAgRFdPUkQgcmV0OworCisgICAgICAgIHJldCA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKEwiVENMX0xJQlJBUlkiLCBOVUxMLCAwKTsKKyAgICAgICAgaWYgKCFyZXQgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfRU5WVkFSX05PVF9GT1VORCkgeworICAgICAgICAgICAgc3RyX3BhdGggPSBfZ2V0X3RjbF9saWJfcGF0aCgpOworICAgICAgICAgICAgaWYgKHN0cl9wYXRoID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cl9wYXRoICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB1dGY4X3BhdGggPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKHN0cl9wYXRoKTsKKyAgICAgICAgICAgICAgICBpZiAodXRmOF9wYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRjbF9TZXRWYXIodi0+aW50ZXJwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInRjbF9saWJyYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQXNTdHJpbmcodXRmOF9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDTF9HTE9CQUxfT05MWSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHV0ZjhfcGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIGlmIChUY2xfQXBwSW5pdCh2LT5pbnRlcnApICE9IFRDTF9PSykgewogICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gVGtpbnRlcl9FcnJvcigoUHlPYmplY3QgKil2KTsKICNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCkBAIC05MjksOSArMTAzMCwxNCBAQAogewogICAgIFRjbF9PYmogKnJlc3VsdDsKIAotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkKKyAgICBpZiAoUHlCeXRlc19DaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodmFsdWUpID49IElOVF9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAiYnl0ZXMgb2JqZWN0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gVGNsX05ld0J5dGVBcnJheU9iaigodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KVB5Qnl0ZXNfR0VUX1NJWkUodmFsdWUpKTsKKyAgICB9CiAKICAgICBpZiAoUHlCb29sX0NoZWNrKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIFRjbF9OZXdCb29sZWFuT2JqKFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSkpOwpAQCAtOTcwLDI0ICsxMDc2LDI4IEBACiAgICAgaWYgKFB5RmxvYXRfQ2hlY2sodmFsdWUpKQogICAgICAgICByZXR1cm4gVGNsX05ld0RvdWJsZU9iaihQeUZsb2F0X0FTX0RPVUJMRSh2YWx1ZSkpOwogCi0gICAgaWYgKFB5VHVwbGVfQ2hlY2sodmFsdWUpKSB7CisgICAgaWYgKFB5VHVwbGVfQ2hlY2sodmFsdWUpIHx8IFB5TGlzdF9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgVGNsX09iaiAqKmFyZ3Y7CiAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwgaTsKIAotICAgICAgICBzaXplID0gUHlUdXBsZV9TaXplKHZhbHVlKTsKKyAgICAgICAgc2l6ZSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRSh2YWx1ZSk7CiAgICAgICAgIGlmIChzaXplID09IDApCiAgICAgICAgICAgICByZXR1cm4gVGNsX05ld0xpc3RPYmooMCwgTlVMTCk7CiAgICAgICAgIGlmICghQ0hFQ0tfU0laRShzaXplLCBzaXplb2YoVGNsX09iaiAqKSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAidHVwbGUgaXMgdG9vIGxvbmciKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfQ2hlY2sodmFsdWUpID8gInR1cGxlIGlzIHRvbyBsb25nIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdCBpcyB0b28gbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgYXJndiA9IChUY2xfT2JqICoqKSBhdHRlbXB0Y2thbGxvYygoKHNpemVfdClzaXplKSAqIHNpemVvZihUY2xfT2JqICopKTsKLSAgICAgICAgaWYoIWFyZ3YpCi0gICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGFyZ3YgPSAoVGNsX09iaiAqKikgUHlNZW1fTWFsbG9jKCgoc2l6ZV90KXNpemUpICogc2l6ZW9mKFRjbF9PYmogKikpOworICAgICAgICBpZiAoIWFyZ3YpIHsKKyAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgYXJndltpXSA9IEFzT2JqKFB5VHVwbGVfR2V0SXRlbSh2YWx1ZSxpKSk7Ci0gICAgICAgIHJlc3VsdCA9IFRjbF9OZXdMaXN0T2JqKFB5VHVwbGVfU2l6ZSh2YWx1ZSksIGFyZ3YpOwotICAgICAgICBja2ZyZWUoRlJFRUNBU1QgYXJndik7CisgICAgICAgICAgYXJndltpXSA9IEFzT2JqKFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTSh2YWx1ZSxpKSk7CisgICAgICAgIHJlc3VsdCA9IFRjbF9OZXdMaXN0T2JqKChpbnQpc2l6ZSwgYXJndik7CisgICAgICAgIFB5TWVtX0ZyZWUoYXJndik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDEyLDkgKzExMjIsOSBAQAogICAgICAgICB9CiAgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh2YWx1ZSk7CiAgICAgICAgIGlmIChraW5kID09IHNpemVvZihUY2xfVW5pQ2hhcikpCi0gICAgICAgICAgICByZXR1cm4gVGNsX05ld1VuaWNvZGVPYmooaW5idWYsIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIFRjbF9OZXdVbmljb2RlT2JqKGluYnVmLCAoaW50KXNpemUpOwogICAgICAgICBhbGxvY3NpemUgPSAoKHNpemVfdClzaXplKSAqIHNpemVvZihUY2xfVW5pQ2hhcik7Ci0gICAgICAgIG91dGJ1ZiA9IChUY2xfVW5pQ2hhciopYXR0ZW1wdGNrYWxsb2MoYWxsb2NzaXplKTsKKyAgICAgICAgb3V0YnVmID0gKFRjbF9VbmlDaGFyKilQeU1lbV9NYWxsb2MoYWxsb2NzaXplKTsKICAgICAgICAgLyogRWxzZSBvdmVyZmxvdyBvY2N1cnJlZCwgYW5kIHdlIHRha2UgdGhlIG5leHQgZXhpdCAqLwogICAgICAgICBpZiAoIW91dGJ1ZikgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwMzEsMTQgKzExNDEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBVKyV4IGlzIGFib3ZlIHRoZSByYW5nZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoVSswMDAwLVUrRkZGRikgYWxsb3dlZCBieSBUY2wiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCk7Ci0gICAgICAgICAgICAgICAgY2tmcmVlKEZSRUVDQVNUIG91dGJ1Zik7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShvdXRidWYpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgICAgICBvdXRidWZbaV0gPSBjaDsKICAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBUY2xfTmV3VW5pY29kZU9iaihvdXRidWYsIHNpemUpOwotICAgICAgICBja2ZyZWUoRlJFRUNBU1Qgb3V0YnVmKTsKKyAgICAgICAgcmVzdWx0ID0gVGNsX05ld1VuaWNvZGVPYmoob3V0YnVmLCAoaW50KXNpemUpOworICAgICAgICBQeU1lbV9GcmVlKG91dGJ1Zik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMDY3LDcgKzExNzcsNiBAQAogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoYm9vbFZhbHVlKTsKIH0KIAotI2lmZGVmIFRDTF9XSURFX0lOVF9UWVBFCiBzdGF0aWMgUHlPYmplY3QqCiBmcm9tV2lkZUludE9iaihQeU9iamVjdCogdGthcHAsIFRjbF9PYmogKnZhbHVlKQogewpAQCAtMTA4NCw3ICsxMTkzLDYgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTlVMTDsKIH0KLSNlbmRpZgogCiAjaWZkZWYgSEFWRV9MSUJUT01NQU1USAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMTE1Nyw3ICsxMjY1LDYgQEAKICAgICAgICAgICAgZmFsbCB0aHJvdWdoIHRvIHdpZGVJbnQgaGFuZGxpbmcuICovCiAgICAgfQogCi0jaWZkZWYgVENMX1dJREVfSU5UX1RZUEUKICAgICBpZiAodmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5JbnRUeXBlIHx8CiAgICAgICAgIHZhbHVlLT50eXBlUHRyID09IGFwcC0+V2lkZUludFR5cGUpIHsKICAgICAgICAgcmVzdWx0ID0gZnJvbVdpZGVJbnRPYmoodGthcHAsIHZhbHVlKTsKQEAgLTExNjcsNyArMTI3NCw2IEBACiAgICAgICAgIC8qIElmIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSB3aWRlSW50IGNvbnZlcnNpb24sCiAgICAgICAgICAgIGZhbGwgdGhyb3VnaCB0byBiaWdudW0gaGFuZGxpbmcuICovCiAgICAgfQotI2VuZGlmCiAKICNpZmRlZiBIQVZFX0xJQlRPTU1BTVRICiAgICAgaWYgKHZhbHVlLT50eXBlUHRyID09IGFwcC0+SW50VHlwZSB8fApAQCAtMTI1OCw3ICsxMzY0LDcgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqYzsgaSsrKQogICAgICAgICBUY2xfRGVjclJlZkNvdW50KG9ianZbaV0pOwogICAgIGlmIChvYmp2ICE9IG9ialN0b3JlKQotICAgICAgICBja2ZyZWUoRlJFRUNBU1Qgb2Jqdik7CisgICAgICAgIFB5TWVtX0ZyZWUob2Jqdik7CiB9CiAKIC8qIENvbnZlcnQgUHl0aG9uIG9iamVjdHMgdG8gVGNsIG9iamVjdHMuIFRoaXMgbXVzdCBoYXBwZW4gaW4gdGhlCkBAIC0xMjcyLDcgKzEzNzgsNyBAQAogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi87CiAKLSAgICBlbHNlIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgeworICAgIGVsc2UgaWYgKCEoUHlUdXBsZV9DaGVjayhhcmdzKSB8fCBQeUxpc3RfQ2hlY2soYXJncykpKSB7CiAgICAgICAgIG9ianZbMF0gPSBBc09iaihhcmdzKTsKICAgICAgICAgaWYgKG9ianZbMF0gPT0gMCkKICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKQEAgLTEyODAsMTQgKzEzODYsMTYgQEAKICAgICAgICAgVGNsX0luY3JSZWZDb3VudChvYmp2WzBdKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIG9iamMgPSBQeVR1cGxlX1NpemUoYXJncyk7CisgICAgICAgIG9iamMgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoYXJncyk7CiAKICAgICAgICAgaWYgKG9iamMgPiBBUkdTWikgewogICAgICAgICAgICAgaWYgKCFDSEVDS19TSVpFKG9iamMsIHNpemVvZihUY2xfT2JqICopKSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAidHVwbGUgaXMgdG9vIGxvbmciKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9DaGVjayhhcmdzKSA/ICJ0dXBsZSBpcyB0b28gbG9uZyIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QgaXMgdG9vIGxvbmciKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9ianYgPSAoVGNsX09iaiAqKilhdHRlbXB0Y2thbGxvYygoKHNpemVfdClvYmpjKSAqIHNpemVvZihUY2xfT2JqICopKTsKKyAgICAgICAgICAgIG9ianYgPSAoVGNsX09iaiAqKilQeU1lbV9NYWxsb2MoKChzaXplX3Qpb2JqYykgKiBzaXplb2YoVGNsX09iaiAqKSk7CiAgICAgICAgICAgICBpZiAob2JqdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICBvYmpjID0gMDsKQEAgLTEyOTYsNyArMTQwNCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2JqYzsgaSsrKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR2V0SXRlbShhcmdzLCBpKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKGFyZ3MsIGkpOwogICAgICAgICAgICAgaWYgKHYgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIG9iamMgPSBpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMxMSwxMCArMTQxOSwxMCBAQAogICAgICAgICAgICAgVGNsX0luY3JSZWZDb3VudChvYmp2W2ldKTsKICAgICAgICAgfQogICAgIH0KLSAgICAqcG9iamMgPSBvYmpjOworICAgICpwb2JqYyA9IChpbnQpb2JqYzsKICAgICByZXR1cm4gb2JqdjsKIGZpbmFsbHk6Ci0gICAgVGthcHBfQ2FsbERlYWxsb2NBcmdzKG9ianYsIG9ialN0b3JlLCBvYmpjKTsKKyAgICBUa2FwcF9DYWxsRGVhbGxvY0FyZ3Mob2Jqdiwgb2JqU3RvcmUsIChpbnQpb2JqYyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE0NzQsMTYgKzE1ODIsMjEgQEAKIH0KIAogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5ldmFsCisKKyAgICBzY3JpcHQ6IHN0cgorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl90a2FwcF9ldmFsX2ltcGwoVGthcHBPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKnNjcmlwdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNGI3OTgzMWY3MDBkZWEwIGlucHV0PTQ4MTQ4NDEyM2E0NTVmMjJdKi8KIHsKLSAgICBjaGFyICpzY3JpcHQ7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IGVycjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpldmFsIiwgJnNjcmlwdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzY3JpcHQpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCkBAIC0xNDkxLDIzICsxNjA0LDI4IEBACiAgICAgZXJyID0gVGNsX0V2YWwoVGthcHBfSW50ZXJwKHNlbGYpLCBzY3JpcHQpOwogICAgIEVOVEVSX09WRVJMQVAKICAgICBpZiAoZXJyID09IFRDTF9FUlJPUikKLSAgICAgICAgcmVzID0gVGtpbnRlcl9FcnJvcihzZWxmKTsKKyAgICAgICAgcmVzID0gVGtpbnRlcl9FcnJvcigoUHlPYmplY3QgKilzZWxmKTsKICAgICBlbHNlCiAgICAgICAgIHJlcyA9IHVuaWNvZGVGcm9tVGNsU3RyaW5nKFRrYXBwX1Jlc3VsdChzZWxmKSk7CiAgICAgTEVBVkVfT1ZFUkxBUF9UQ0wKICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5ldmFsZmlsZQorCisgICAgZmlsZU5hbWU6IHN0cgorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfRXZhbEZpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfdGthcHBfZXZhbGZpbGVfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqZmlsZU5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjNiZTg4ZGNlZTRmMTFkMyBpbnB1dD04NzNhYjcwN2U1ZTk0N2UxXSovCiB7Ci0gICAgY2hhciAqZmlsZU5hbWU7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IGVycjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpldmFsZmlsZSIsICZmaWxlTmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChmaWxlTmFtZSk7CiAgICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7CiAKQEAgLTE1MTUsMjMgKzE2MzMsMjggQEAKICAgICBlcnIgPSBUY2xfRXZhbEZpbGUoVGthcHBfSW50ZXJwKHNlbGYpLCBmaWxlTmFtZSk7CiAgICAgRU5URVJfT1ZFUkxBUAogICAgIGlmIChlcnIgPT0gVENMX0VSUk9SKQotICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOworICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKChQeU9iamVjdCAqKXNlbGYpOwogICAgIGVsc2UKICAgICAgICAgcmVzID0gdW5pY29kZUZyb21UY2xTdHJpbmcoVGthcHBfUmVzdWx0KHNlbGYpKTsKICAgICBMRUFWRV9PVkVSTEFQX1RDTAogICAgIHJldHVybiByZXM7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLnRrYXBwLnJlY29yZAorCisgICAgc2NyaXB0OiBzdHIKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX1JlY29yZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl90a2FwcF9yZWNvcmRfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqc2NyaXB0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBmZmUwOGEwMDYxNzMwZGYgaW5wdXQ9YzBiMGRiNWEyMTQxMmNhY10qLwogewotICAgIGNoYXIgKnNjcmlwdDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKICAgICBpbnQgZXJyOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOnJlY29yZCIsICZzY3JpcHQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIENIRUNLX1NUUklOR19MRU5HVEgoc2NyaXB0KTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIApAQCAtMTUzOSwyMCArMTY2MiwyNSBAQAogICAgIGVyciA9IFRjbF9SZWNvcmRBbmRFdmFsKFRrYXBwX0ludGVycChzZWxmKSwgc2NyaXB0LCBUQ0xfTk9fRVZBTCk7CiAgICAgRU5URVJfT1ZFUkxBUAogICAgIGlmIChlcnIgPT0gVENMX0VSUk9SKQotICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOworICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKChQeU9iamVjdCAqKXNlbGYpOwogICAgIGVsc2UKICAgICAgICAgcmVzID0gdW5pY29kZUZyb21UY2xTdHJpbmcoVGthcHBfUmVzdWx0KHNlbGYpKTsKICAgICBMRUFWRV9PVkVSTEFQX1RDTAogICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9BZGRFcnJvckluZm8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKm1zZzsKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLnRrYXBwLmFkZGVycmluZm8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczphZGRlcnJvcmluZm8iLCAmbXNnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbXNnOiBzdHIKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2FkZGVycmluZm9faW1wbChUa2FwcE9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqbXNnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBlMjIyZWUyMDUwZWIzNTcgaW5wdXQ9NDk3MTM5OTMxN2Q0YzEzNl0qLworewogICAgIENIRUNLX1NUUklOR19MRU5HVEgobXNnKTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIApAQCAtMTU4NSw2ICsxNzEzLDE1IEBACiB9IFZhckV2ZW50OwogI2VuZGlmCiAKKy8qW3B5dGhvbl0KKworY2xhc3MgdmFybmFtZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdjb25zdCBjaGFyIConCisgICAgY29udmVydGVyID0gJ3Zhcm5hbWVfY29udmVydGVyJworCitbcHl0aG9uXSovCisvKltweXRob24gY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogc3RhdGljIGludAogdmFybmFtZV9jb252ZXJ0ZXIoUHlPYmplY3QgKmluLCB2b2lkICpfb3V0KQogewpAQCAtMTU5Niw4ICsxNzMzLDggQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHMgPSBQeUJ5dGVzX0FzU3RyaW5nKGluKTsKLSAgICAgICAgaWYgKHN0cmxlbihzKSAhPSBQeUJ5dGVzX1NpemUoaW4pKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm51bGwgYnl0ZSBpbiBieXRlcyBvYmplY3QiKTsKKyAgICAgICAgaWYgKHN0cmxlbihzKSAhPSAoc2l6ZV90KVB5Qnl0ZXNfU2l6ZShpbikpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1iZWRkZWQgbnVsbCBieXRlIik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAqb3V0ID0gczsKQEAgLTE2MTMsOCArMTc1MCw4IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInN0cmluZyBpcyB0b28gbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmxlbihzKSAhPSBzaXplKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm51bGwgY2hhcmFjdGVyIGluIHN0cmluZyIpOworICAgICAgICBpZiAoc3RybGVuKHMpICE9IChzaXplX3Qpc2l6ZSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbWJlZGRlZCBudWxsIGNoYXJhY3RlciIpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgKm91dCA9IHM7CkBAIC0xNjY3LDcgKzE4MDQsNiBAQAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgVGthcHBPYmplY3QgKnNlbGYgPSAoVGthcHBPYmplY3QqKXNlbGZwdHI7CiAgICAgaWYgKHNlbGYtPnRocmVhZGVkICYmIHNlbGYtPnRocmVhZF9pZCAhPSBUY2xfR2V0Q3VycmVudFRocmVhZCgpKSB7Ci0gICAgICAgIFRrYXBwT2JqZWN0ICpzZWxmID0gKFRrYXBwT2JqZWN0KilzZWxmcHRyOwogICAgICAgICBWYXJFdmVudCAqZXY7CiAgICAgICAgIFB5T2JqZWN0ICpyZXMsICpleGNfdHlwZSwgKmV4Y192YWw7CiAgICAgICAgIFRjbF9Db25kaXRpb24gY29uZCA9IE5VTEw7CkBAIC0xODYyLDMxICsxOTk4LDM5IEBACiAKIC8qKiBUY2wgdG8gUHl0aG9uICoqLwogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5nZXRpbnQKKworICAgIGFyZzogb2JqZWN0CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HZXRJbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfdGthcHBfZ2V0aW50KFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg4Y2YyOTNmYWUzMDdjZmUgaW5wdXQ9MDM0MDI2OTk3YzViOTFmOF0qLwogewogICAgIGNoYXIgKnM7Ci0jaWYgZGVmaW5lZChUQ0xfV0lERV9JTlRfVFlQRSkgfHwgZGVmaW5lZChIQVZFX0xJQlRPTU1BTVRIKQogICAgIFRjbF9PYmogKnZhbHVlOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0jZWxzZQotICAgIGludCBpbnRWYWx1ZTsKLSNlbmRpZgogCi0gICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA9PSAxKSB7Ci0gICAgICAgIFB5T2JqZWN0KiBvID0gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIDApOwotICAgICAgICBpZiAoUHlMb25nX0NoZWNrKG8pKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYobyk7Ci0gICAgICAgICAgICByZXR1cm4gbzsKLSAgICAgICAgfQorICAgIGlmIChQeUxvbmdfQ2hlY2soYXJnKSkgeworICAgICAgICBQeV9JTkNSRUYoYXJnKTsKKyAgICAgICAgcmV0dXJuIGFyZzsKICAgICB9Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdldGludCIsICZzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKLSNpZiBkZWZpbmVkKFRDTF9XSURFX0lOVF9UWVBFKSB8fCBkZWZpbmVkKEhBVkVfTElCVE9NTUFNVEgpCi0gICAgdmFsdWUgPSBUY2xfTmV3U3RyaW5nT2JqKHMsIC0xKTsKLSAgICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7CisKKyAgICBpZiAoUHlUY2xPYmplY3RfQ2hlY2soYXJnKSkgeworICAgICAgICB2YWx1ZSA9ICgoUHlUY2xPYmplY3QqKWFyZyktPnZhbHVlOworICAgICAgICBUY2xfSW5jclJlZkNvdW50KHZhbHVlKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiczpnZXRpbnQiLCAmcykpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKKyAgICAgICAgdmFsdWUgPSBUY2xfTmV3U3RyaW5nT2JqKHMsIC0xKTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcigoUHlPYmplY3QgKilzZWxmKTsKKyAgICB9CiAgICAgLyogRG9uJ3QgdXNlIFRjbF9HZXRJbnQoKSBiZWNhdXNlIGl0IHJldHVybnMgYW1iaWd1b3VzIHJlc3VsdCBmb3IgdmFsdWUKICAgICAgICBpbiByYW5nZXMgLTIqKjMyLi4tMioqMzEtMSBhbmQgMioqMzEuLjIqKjMyLTEgKG9uIDMyLWJpdCBwbGF0Zm9ybSkuCiAKQEAgLTE4OTQsNDMgKzIwMzgsNjcgQEAKICAgICAgICB2YWx1ZSBpbiByYW5nZXMgLTIqKjY0Li4tMioqNjMtMSBhbmQgMioqNjMuLjIqKjY0LTEgKG9uIDMyLWJpdCBwbGF0Zm9ybSkuCiAgICAgICovCiAjaWZkZWYgSEFWRV9MSUJUT01NQU1USAotICAgIHJlc3VsdCA9IGZyb21CaWdudW1PYmooc2VsZiwgdmFsdWUpOworICAgIHJlc3VsdCA9IGZyb21CaWdudW1PYmooKFB5T2JqZWN0ICopc2VsZiwgdmFsdWUpOwogI2Vsc2UKLSAgICByZXN1bHQgPSBmcm9tV2lkZUludE9iaihzZWxmLCB2YWx1ZSk7CisgICAgcmVzdWx0ID0gZnJvbVdpZGVJbnRPYmooKFB5T2JqZWN0ICopc2VsZiwgdmFsdWUpOwogI2VuZGlmCiAgICAgVGNsX0RlY3JSZWZDb3VudCh2YWx1ZSk7CiAgICAgaWYgKHJlc3VsdCAhPSBOVUxMIHx8IFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0jZWxzZQotICAgIGlmIChUY2xfR2V0SW50KFRrYXBwX0ludGVycChzZWxmKSwgcywgJmludFZhbHVlKSA9PSBUQ0xfT0spCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoaW50VmFsdWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7CisgICAgcmV0dXJuIFRraW50ZXJfRXJyb3IoKFB5T2JqZWN0ICopc2VsZik7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLnRrYXBwLmdldGRvdWJsZQorCisgICAgYXJnOiBvYmplY3QKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX0dldERvdWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl90a2FwcF9nZXRkb3VibGUoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzUyYjEzOGJkOGI5NTZiOSBpbnB1dD0yMjAxNTcyOWNlOWVmN2Y4XSovCiB7CiAgICAgY2hhciAqczsKICAgICBkb3VibGUgdjsKIAotICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgPT0gMSkgewotICAgICAgICBQeU9iamVjdCAqbyA9IFB5VHVwbGVfR2V0SXRlbShhcmdzLCAwKTsKLSAgICAgICAgaWYgKFB5RmxvYXRfQ2hlY2sobykpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihvKTsKLSAgICAgICAgICAgIHJldHVybiBvOwotICAgICAgICB9CisgICAgaWYgKFB5RmxvYXRfQ2hlY2soYXJnKSkgeworICAgICAgICBQeV9JTkNSRUYoYXJnKTsKKyAgICAgICAgcmV0dXJuIGFyZzsKICAgICB9Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdldGRvdWJsZSIsICZzKSkKKworICAgIGlmIChQeU51bWJlcl9DaGVjayhhcmcpKSB7CisgICAgICAgIHJldHVybiBQeU51bWJlcl9GbG9hdChhcmcpOworICAgIH0KKworICAgIGlmIChQeVRjbE9iamVjdF9DaGVjayhhcmcpKSB7CisgICAgICAgIGlmIChUY2xfR2V0RG91YmxlRnJvbU9iaihUa2FwcF9JbnRlcnAoc2VsZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFB5VGNsT2JqZWN0KilhcmcpLT52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2KSA9PSBUQ0xfRVJST1IpCisgICAgICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcigoUHlPYmplY3QgKilzZWxmKTsKKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh2KTsKKyAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInM6Z2V0ZG91YmxlIiwgJnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIGlmIChUY2xfR2V0RG91YmxlKFRrYXBwX0ludGVycChzZWxmKSwgcywgJnYpID09IFRDTF9FUlJPUikKLSAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImQiLCB2KTsKKyAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3IoKFB5T2JqZWN0ICopc2VsZik7CisgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh2KTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3RraW50ZXIudGthcHAuZ2V0Ym9vbGVhbgorCisgICAgYXJnOiBvYmplY3QKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX0dldEJvb2xlYW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitfdGtpbnRlcl90a2FwcF9nZXRib29sZWFuKFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTcyNmE5YWU0NDU4MjFkOTEgaW5wdXQ9N2YxMTI0OGVmOGY4Nzc2ZV0qLwogewogICAgIGNoYXIgKnM7CiAgICAgaW50IHY7CkBAIC0xOTQzLDcgKzIxMTEsNyBAQAogICAgICAgICBpZiAoVGNsX0dldEJvb2xlYW5Gcm9tT2JqKFRrYXBwX0ludGVycChzZWxmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFB5VGNsT2JqZWN0KilhcmcpLT52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdikgPT0gVENMX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7CisgICAgICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcigoUHlPYmplY3QgKilzZWxmKTsKICAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyh2KTsKICAgICB9CiAKQEAgLTE5NTEsMjAgKzIxMTksMjUgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBpZiAoVGNsX0dldEJvb2xlYW4oVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdikgPT0gVENMX0VSUk9SKQotICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcihzZWxmKTsKKyAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3IoKFB5T2JqZWN0ICopc2VsZik7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyh2KTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3RraW50ZXIudGthcHAuZXhwcnN0cmluZworCisgICAgczogc3RyCisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9FeHByU3RyaW5nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK190a2ludGVyX3RrYXBwX2V4cHJzdHJpbmdfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iZWRhMzIzZDNlZDBhYmIxIGlucHV0PWZhNzhmNzUxYWZiMmYyMWJdKi8KIHsKLSAgICBjaGFyICpzOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogICAgIGludCByZXR2YWw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZXhwcnN0cmluZyIsICZzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCkBAIC0xOTcyLDI0ICsyMTQ1LDI5IEBACiAgICAgcmV0dmFsID0gVGNsX0V4cHJTdHJpbmcoVGthcHBfSW50ZXJwKHNlbGYpLCBzKTsKICAgICBFTlRFUl9PVkVSTEFQCiAgICAgaWYgKHJldHZhbCA9PSBUQ0xfRVJST1IpCi0gICAgICAgIHJlcyA9IFRraW50ZXJfRXJyb3Ioc2VsZik7CisgICAgICAgIHJlcyA9IFRraW50ZXJfRXJyb3IoKFB5T2JqZWN0ICopc2VsZik7CiAgICAgZWxzZQogICAgICAgICByZXMgPSB1bmljb2RlRnJvbVRjbFN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwogICAgIExFQVZFX09WRVJMQVBfVENMCiAgICAgcmV0dXJuIHJlczsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3RraW50ZXIudGthcHAuZXhwcmxvbmcKKworICAgIHM6IHN0cgorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfRXhwckxvbmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfdGthcHBfZXhwcmxvbmdfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZDZhNDZiNjNjNmViY2Y5IGlucHV0PTExYmQ3ZWVlMGM1N2I0ZGNdKi8KIHsKLSAgICBjaGFyICpzOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogICAgIGludCByZXR2YWw7CiAgICAgbG9uZyB2OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmV4cHJsb25nIiwgJnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIENIRUNLX1NUUklOR19MRU5HVEgocyk7CiAgICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7CiAKQEAgLTE5OTcsMjMgKzIxNzUsMjkgQEAKICAgICByZXR2YWwgPSBUY2xfRXhwckxvbmcoVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdik7CiAgICAgRU5URVJfT1ZFUkxBUAogICAgIGlmIChyZXR2YWwgPT0gVENMX0VSUk9SKQotICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOworICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKChQeU9iamVjdCAqKXNlbGYpOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgibCIsIHYpOworICAgICAgICByZXMgPSBQeUxvbmdfRnJvbUxvbmcodik7CiAgICAgTEVBVkVfT1ZFUkxBUF9UQ0wKICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5leHByZG91YmxlCisKKyAgICBzOiBzdHIKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX0V4cHJEb3VibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfdGthcHBfZXhwcmRvdWJsZV9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZmNzhkZjEwODFlYTQxNTggaW5wdXQ9ZmYwMmJjMTE3OTg4MzJkNV0qLwogewotICAgIGNoYXIgKnM7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgZG91YmxlIHY7CiAgICAgaW50IHJldHZhbDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpleHByZG91YmxlIiwgJnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoIlRrYXBwX0V4cHJEb3VibGUiLCByZXR1cm4gMCkKQEAgLTIwMjIsNjEgKzIyMDYsNzQgQEAKICAgICBFTlRFUl9PVkVSTEFQCiAgICAgUHlGUEVfRU5EX1BST1RFQ1QocmV0dmFsKQogICAgIGlmIChyZXR2YWwgPT0gVENMX0VSUk9SKQotICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOworICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKChQeU9iamVjdCAqKXNlbGYpOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgiZCIsIHYpOworICAgICAgICByZXMgPSBQeUZsb2F0X0Zyb21Eb3VibGUodik7CiAgICAgTEVBVkVfT1ZFUkxBUF9UQ0wKICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5leHByYm9vbGVhbgorCisgICAgczogc3RyCisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9FeHByQm9vbGVhbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl90a2FwcF9leHByYm9vbGVhbl9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThiMjgwMzhjMjI4ODczMTEgaW5wdXQ9YzhjNjYwMjJiZGI4ZDVkM10qLwogewotICAgIGNoYXIgKnM7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IHJldHZhbDsKICAgICBpbnQgdjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpleHByYm9vbGVhbiIsICZzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKICAgICBFTlRFUl9UQ0wKICAgICByZXR2YWwgPSBUY2xfRXhwckJvb2xlYW4oVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdik7CiAgICAgRU5URVJfT1ZFUkxBUAogICAgIGlmIChyZXR2YWwgPT0gVENMX0VSUk9SKQotICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOworICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKChQeU9iamVjdCAqKXNlbGYpOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgiaSIsIHYpOworICAgICAgICByZXMgPSBQeUxvbmdfRnJvbUxvbmcodik7CiAgICAgTEVBVkVfT1ZFUkxBUF9UQ0wKICAgICByZXR1cm4gcmVzOwogfQogCiAKIAorLypbY2xpbmljIGlucHV0XQorX3RraW50ZXIudGthcHAuc3BsaXRsaXN0CisKKyAgICBhcmc6IG9iamVjdAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfU3BsaXRMaXN0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK190a2ludGVyX3RrYXBwX3NwbGl0bGlzdChUa2FwcE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xM2I1MWQzNDM4NmQzNmZiIGlucHV0PTJiMmUxMzM1MWUzYzBiNTNdKi8KIHsKICAgICBjaGFyICpsaXN0OwogICAgIGludCBhcmdjOwotICAgIGNoYXIgKiphcmd2OwotICAgIFB5T2JqZWN0ICphcmcsICp2OworICAgIGNvbnN0IGNoYXIgKiphcmd2OworICAgIFB5T2JqZWN0ICp2OwogICAgIGludCBpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOnNwbGl0bGlzdCIsICZhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlUY2xPYmplY3RfQ2hlY2soYXJnKSkgewogICAgICAgICBpbnQgb2JqYzsKICAgICAgICAgVGNsX09iaiAqKm9ianY7CiAgICAgICAgIGlmIChUY2xfTGlzdE9iakdldEVsZW1lbnRzKFRrYXBwX0ludGVycChzZWxmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQeVRjbE9iamVjdCopYXJnKS0+dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYmpjLCAmb2JqdikgPT0gVENMX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcihzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiBUa2ludGVyX0Vycm9yKChQeU9iamVjdCAqKXNlbGYpOwogICAgICAgICB9CiAgICAgICAgIGlmICghKHYgPSBQeVR1cGxlX05ldyhvYmpjKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iamM7IGkrKykgewotICAgICAgICAgICAgUHlPYmplY3QgKnMgPSBGcm9tT2JqKHNlbGYsIG9ianZbaV0pOworICAgICAgICAgICAgUHlPYmplY3QgKnMgPSBGcm9tT2JqKChQeU9iamVjdCopc2VsZiwgb2JqdltpXSk7CiAgICAgICAgICAgICBpZiAoIXMgfHwgUHlUdXBsZV9TZXRJdGVtKHYsIGksIHMpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjA4OCwxNSArMjI4NSwxOCBAQAogICAgICAgICBQeV9JTkNSRUYoYXJnKTsKICAgICAgICAgcmV0dXJuIGFyZzsKICAgICB9CisgICAgaWYgKFB5TGlzdF9DaGVjayhhcmcpKSB7CisgICAgICAgIHJldHVybiBQeVNlcXVlbmNlX1R1cGxlKGFyZyk7CisgICAgfQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldDpzcGxpdGxpc3QiLCAidXRmLTgiLCAmbGlzdCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJldDpzcGxpdGxpc3QiLCAidXRmLTgiLCAmbGlzdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChsaXN0KTsKICAgICBpZiAoVGNsX1NwbGl0TGlzdChUa2FwcF9JbnRlcnAoc2VsZiksIGxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgJmFyZ2MsICZhcmd2KSA9PSBUQ0xfRVJST1IpICB7CiAgICAgICAgIFB5TWVtX0ZyZWUobGlzdCk7Ci0gICAgICAgIHJldHVybiBUa2ludGVyX0Vycm9yKHNlbGYpOworICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcigoUHlPYmplY3QgKilzZWxmKTsKICAgICB9CiAKICAgICBpZiAoISh2ID0gUHlUdXBsZV9OZXcoYXJnYykpKQpAQCAtMjExNywxNCArMjMxNywyMSBAQAogICAgIHJldHVybiB2OwogfQogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5zcGxpdAorCisgICAgYXJnOiBvYmplY3QKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX1NwbGl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK190a2ludGVyX3RrYXBwX3NwbGl0KFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWUwOGFkODMyMzYzZmFjZmQgaW5wdXQ9YTFjNzgzNDllYWNhYTE0MF0qLwogewotICAgIFB5T2JqZWN0ICphcmcsICp2OworICAgIFB5T2JqZWN0ICp2OwogICAgIGNoYXIgKmxpc3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86c3BsaXQiLCAmYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5VGNsT2JqZWN0X0NoZWNrKGFyZykpIHsKICAgICAgICAgVGNsX09iaiAqdmFsdWUgPSAoKFB5VGNsT2JqZWN0KilhcmcpLT52YWx1ZTsKICAgICAgICAgaW50IG9iamM7CkBAIC0yMTMyLDE2ICsyMzM5LDE2IEBACiAgICAgICAgIGludCBpOwogICAgICAgICBpZiAoVGNsX0xpc3RPYmpHZXRFbGVtZW50cyhUa2FwcF9JbnRlcnAoc2VsZiksIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqYywgJm9ianYpID09IFRDTF9FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuIEZyb21PYmooc2VsZiwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIEZyb21PYmooKFB5T2JqZWN0KilzZWxmLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG9iamMgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7CiAgICAgICAgIGlmIChvYmpjID09IDEpCi0gICAgICAgICAgICByZXR1cm4gRnJvbU9iaihzZWxmLCBvYmp2WzBdKTsKKyAgICAgICAgICAgIHJldHVybiBGcm9tT2JqKChQeU9iamVjdCopc2VsZiwgb2JqdlswXSk7CiAgICAgICAgIGlmICghKHYgPSBQeVR1cGxlX05ldyhvYmpjKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG9iamM7IGkrKykgewotICAgICAgICAgICAgUHlPYmplY3QgKnMgPSBGcm9tT2JqKHNlbGYsIG9ianZbaV0pOworICAgICAgICAgICAgUHlPYmplY3QgKnMgPSBGcm9tT2JqKChQeU9iamVjdCopc2VsZiwgb2JqdltpXSk7CiAgICAgICAgICAgICBpZiAoIXMgfHwgUHlUdXBsZV9TZXRJdGVtKHYsIGksIHMpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjE0OSwxMCArMjM1NiwxMCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB2OwogICAgIH0KLSAgICBpZiAoUHlUdXBsZV9DaGVjayhhcmcpKQorICAgIGlmIChQeVR1cGxlX0NoZWNrKGFyZykgfHwgUHlMaXN0X0NoZWNrKGFyZykpCiAgICAgICAgIHJldHVybiBTcGxpdE9iaihhcmcpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldDpzcGxpdCIsICJ1dGYtOCIsICZsaXN0KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImV0OnNwbGl0IiwgInV0Zi04IiwgJmxpc3QpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKGxpc3QpOwogICAgIHYgPSBTcGxpdChsaXN0KTsKQEAgLTIxODMsNyArMjM5MCw3IEBACiAgKiBmdW5jdGlvbiBvciBtZXRob2QuCiAgKi8KIHN0YXRpYyBpbnQKLVB5dGhvbkNtZChDbGllbnREYXRhIGNsaWVudERhdGEsIFRjbF9JbnRlcnAgKmludGVycCwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK1B5dGhvbkNtZChDbGllbnREYXRhIGNsaWVudERhdGEsIFRjbF9JbnRlcnAgKmludGVycCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIHsKICAgICBQeXRob25DbWRfQ2xpZW50RGF0YSAqZGF0YSA9IChQeXRob25DbWRfQ2xpZW50RGF0YSAqKWNsaWVudERhdGE7CiAgICAgUHlPYmplY3QgKmZ1bmMsICphcmcsICpyZXM7CkBAIC0yMjUyLDcgKzI0NTksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgQ29tbWFuZEV2ZW50ewogICAgIFRjbF9FdmVudCBldjsKICAgICBUY2xfSW50ZXJwKiBpbnRlcnA7Ci0gICAgY2hhciAqbmFtZTsKKyAgICBjb25zdCBjaGFyICpuYW1lOwogICAgIGludCBjcmVhdGU7CiAgICAgaW50ICpzdGF0dXM7CiAgICAgQ2xpZW50RGF0YSAqZGF0YTsKQEAgLTIyNzUsMTggKzI0ODIsMjUgQEAKIH0KICNlbmRpZgogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5jcmVhdGVjb21tYW5kCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlRrYXBwT2JqZWN0ICoiKQorICAgIG5hbWU6IHN0cgorICAgIGZ1bmM6IG9iamVjdAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfQ3JlYXRlQ29tbWFuZChQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl90a2FwcF9jcmVhdGVjb21tYW5kX2ltcGwoVGthcHBPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmExYzc5YTRlZTJhZjQxMCBpbnB1dD0yYmMyYzA0NmEwOTE0MjM0XSovCiB7Ci0gICAgVGthcHBPYmplY3QgKnNlbGYgPSAoVGthcHBPYmplY3QqKXNlbGZwdHI7CiAgICAgUHl0aG9uQ21kX0NsaWVudERhdGEgKmRhdGE7Ci0gICAgY2hhciAqY21kTmFtZTsKLSAgICBQeU9iamVjdCAqZnVuYzsKICAgICBpbnQgZXJyOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzTzpjcmVhdGVjb21tYW5kIiwgJmNtZE5hbWUsICZmdW5jKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChjbWROYW1lKTsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG5hbWUpOwogICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhmdW5jKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiY29tbWFuZCBub3QgY2FsbGFibGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzAzLDcgKzI1MTcsNyBAQAogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgUHlfSU5DUkVGKGZ1bmMpOwotICAgIGRhdGEtPnNlbGYgPSBzZWxmcHRyOworICAgIGRhdGEtPnNlbGYgPSAoUHlPYmplY3QgKikgc2VsZjsKICAgICBkYXRhLT5mdW5jID0gZnVuYzsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChzZWxmLT50aHJlYWRlZCAmJiBzZWxmLT50aHJlYWRfaWQgIT0gVGNsX0dldEN1cnJlbnRUaHJlYWQoKSkgewpAQCAtMjMxNyw3ICsyNTMxLDcgQEAKICAgICAgICAgZXYtPmV2LnByb2MgPSAoVGNsX0V2ZW50UHJvYyopVGthcHBfQ29tbWFuZFByb2M7CiAgICAgICAgIGV2LT5pbnRlcnAgPSBzZWxmLT5pbnRlcnA7CiAgICAgICAgIGV2LT5jcmVhdGUgPSAxOwotICAgICAgICBldi0+bmFtZSA9IGNtZE5hbWU7CisgICAgICAgIGV2LT5uYW1lID0gbmFtZTsKICAgICAgICAgZXYtPmRhdGEgPSAoQ2xpZW50RGF0YSlkYXRhOwogICAgICAgICBldi0+c3RhdHVzID0gJmVycjsKICAgICAgICAgZXYtPmRvbmUgPSAmY29uZDsKQEAgLTIzMjksNyArMjU0Myw3IEBACiAgICAgewogICAgICAgICBFTlRFUl9UQ0wKICAgICAgICAgZXJyID0gVGNsX0NyZWF0ZUNvbW1hbmQoCi0gICAgICAgICAgICBUa2FwcF9JbnRlcnAoc2VsZiksIGNtZE5hbWUsIFB5dGhvbkNtZCwKKyAgICAgICAgICAgIFRrYXBwX0ludGVycChzZWxmKSwgbmFtZSwgUHl0aG9uQ21kLAogICAgICAgICAgICAgKENsaWVudERhdGEpZGF0YSwgUHl0aG9uQ21kRGVsZXRlKSA9PSBOVUxMOwogICAgICAgICBMRUFWRV9UQ0wKICAgICB9CkBAIC0yMzQ0LDE2ICsyNTU4LDIyIEBACiAKIAogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5kZWxldGVjb21tYW5kCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlRrYXBwT2JqZWN0ICoiKQorICAgIG5hbWU6IHN0cgorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfRGVsZXRlQ29tbWFuZChQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl90a2FwcF9kZWxldGVjb21tYW5kX2ltcGwoVGthcHBPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTY3ZThjYjU4NDVlMGQyZCBpbnB1dD1iNjMwNjQ2OGYxMGIyMTljXSovCiB7Ci0gICAgVGthcHBPYmplY3QgKnNlbGYgPSAoVGthcHBPYmplY3QqKXNlbGZwdHI7Ci0gICAgY2hhciAqY21kTmFtZTsKICAgICBpbnQgZXJyOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmRlbGV0ZWNvbW1hbmQiLCAmY21kTmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIENIRUNLX1NUUklOR19MRU5HVEgoY21kTmFtZSk7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChuYW1lKTsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgaWYgKHNlbGYtPnRocmVhZGVkICYmIHNlbGYtPnRocmVhZF9pZCAhPSBUY2xfR2V0Q3VycmVudFRocmVhZCgpKSB7CkBAIC0yMzY3LDcgKzI1ODcsNyBAQAogICAgICAgICBldi0+ZXYucHJvYyA9IChUY2xfRXZlbnRQcm9jKilUa2FwcF9Db21tYW5kUHJvYzsKICAgICAgICAgZXYtPmludGVycCA9IHNlbGYtPmludGVycDsKICAgICAgICAgZXYtPmNyZWF0ZSA9IDA7Ci0gICAgICAgIGV2LT5uYW1lID0gY21kTmFtZTsKKyAgICAgICAgZXYtPm5hbWUgPSBuYW1lOwogICAgICAgICBldi0+c3RhdHVzID0gJmVycjsKICAgICAgICAgZXYtPmRvbmUgPSAmY29uZDsKICAgICAgICAgVGthcHBfVGhyZWFkU2VuZChzZWxmLCAoVGNsX0V2ZW50KilldiwgJmNvbmQsCkBAIC0yMzc4LDcgKzI1OTgsNyBAQAogI2VuZGlmCiAgICAgewogICAgICAgICBFTlRFUl9UQ0wKLSAgICAgICAgZXJyID0gVGNsX0RlbGV0ZUNvbW1hbmQoc2VsZi0+aW50ZXJwLCBjbWROYW1lKTsKKyAgICAgICAgZXJyID0gVGNsX0RlbGV0ZUNvbW1hbmQoc2VsZi0+aW50ZXJwLCBuYW1lKTsKICAgICAgICAgTEVBVkVfVENMCiAgICAgfQogICAgIGlmIChlcnIgPT0gLTEpIHsKQEAgLTI0NTksMTcgKzI2NzksMjMgQEAKICAgICBMRUFWRV9QWVRIT04KIH0KIAorLypbY2xpbmljIGlucHV0XQorX3RraW50ZXIudGthcHAuY3JlYXRlZmlsZWhhbmRsZXIKKworICAgIGZpbGU6IG9iamVjdAorICAgIG1hc2s6IGludAorICAgIGZ1bmM6IG9iamVjdAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfQ3JlYXRlRmlsZUhhbmRsZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAvKiBhcmdzIGlzIChmaWxlLCBtYXNrLCBmdW5jKSAqLworX3RraW50ZXJfdGthcHBfY3JlYXRlZmlsZWhhbmRsZXJfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXNrLCBQeU9iamVjdCAqZnVuYykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mNzNjZTgyZGU4MDFjMzUzIGlucHV0PTg0OTQzYTUyODZlNDc5NDddKi8KIHsKICAgICBGaWxlSGFuZGxlcl9DbGllbnREYXRhICpkYXRhOwotICAgIFB5T2JqZWN0ICpmaWxlLCAqZnVuYzsKLSAgICBpbnQgbWFzaywgdGZpbGU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pTzpjcmVhdGVmaWxlaGFuZGxlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmbWFzaywgJmZ1bmMpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpbnQgdGZpbGU7CiAKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIApAQCAtMjQ5MiwxNCArMjcxOCwxOSBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotVGthcHBfRGVsZXRlRmlsZUhhbmRsZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIGludCB0ZmlsZTsKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLnRrYXBwLmRlbGV0ZWZpbGVoYW5kbGVyCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZGVsZXRlZmlsZWhhbmRsZXIiLCAmZmlsZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGZpbGU6IG9iamVjdAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfZGVsZXRlZmlsZWhhbmRsZXIoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI1M2NjOTZlYmY5NDc2ZmQgaW5wdXQ9YWJiZWMxOWQ2NjMxMmUyYV0qLworeworICAgIGludCB0ZmlsZTsKIAogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCkBAIC0yNTI4LDE0ICsyNzU5LDIwIEBACiAgICAgUHlPYmplY3QgKmZ1bmM7CiB9IFRrdHRPYmplY3Q7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLnRrdGltZXJ0b2tlbi5kZWxldGV0aW1lcmhhbmRsZXIKKworICAgIHNlbGY6IHNlbGYodHlwZT0iVGt0dE9iamVjdCAqIikKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGt0dF9EZWxldGVUaW1lckhhbmRsZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfdGt0aW1lcnRva2VuX2RlbGV0ZXRpbWVyaGFuZGxlcl9pbXBsKFRrdHRPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmQ3ZmUxN2YzMjhjZmE1NSBpbnB1dD0yNWJhNWRkNTk0ZTUyMDg0XSovCiB7Ci0gICAgVGt0dE9iamVjdCAqdiA9IChUa3R0T2JqZWN0ICopc2VsZjsKKyAgICBUa3R0T2JqZWN0ICp2ID0gc2VsZjsKICAgICBQeU9iamVjdCAqZnVuYyA9IHYtPmZ1bmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpkZWxldGV0aW1lcmhhbmRsZXIiKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHYtPnRva2VuICE9IE5VTEwpIHsKICAgICAgICAgVGNsX0RlbGV0ZVRpbWVySGFuZGxlcih2LT50b2tlbik7CiAgICAgICAgIHYtPnRva2VuID0gTlVMTDsKQEAgLTI1NDgsMTIgKzI3ODUsNiBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1zdGF0aWMgUHlNZXRob2REZWYgVGt0dF9tZXRob2RzW10gPQotewotICAgIHsiZGVsZXRldGltZXJoYW5kbGVyIiwgVGt0dF9EZWxldGVUaW1lckhhbmRsZXIsIE1FVEhfVkFSQVJHU30sCi0gICAge05VTEwsIE5VTEx9Ci19OwotCiBzdGF0aWMgVGt0dE9iamVjdCAqCiBUa3R0X05ldyhQeU9iamVjdCAqZnVuYykKIHsKQEAgLTI1OTUsMjIgKzI4MjYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5mdW5jID09IE5VTEwgPyAiLCBoYW5kbGVyIGRlbGV0ZWQiIDogIiIpOwogfQogCi1zdGF0aWMgUHlUeXBlX1Nsb3QgVGt0dF9UeXBlX3Nsb3RzW10gPSB7Ci0gICAge1B5X3RwX2RlYWxsb2MsIFRrdHRfRGVhbGxvY30sCi0gICAge1B5X3RwX3JlcHIsIFRrdHRfUmVwcn0sCi0gICAge1B5X3RwX21ldGhvZHMsIFRrdHRfbWV0aG9kc30sCi0gICAgezAsIDB9Ci19OwotCi1zdGF0aWMgUHlUeXBlX1NwZWMgVGt0dF9UeXBlX3NwZWMgPSB7Ci0gICAgIl90a2ludGVyLnRrdGltZXJ0b2tlbiIsCi0gICAgc2l6ZW9mKFRrdHRPYmplY3QpLAotICAgIDAsCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULAotICAgIFRrdHRfVHlwZV9zbG90cywKLX07Ci0KLQogLyoqIFRpbWVyIEhhbmRsZXIgKiovCiAKIHN0YXRpYyB2b2lkCkBAIC0yNjQxLDE2ICsyODU2LDIyIEBACiAgICAgTEVBVkVfUFlUSE9OCiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLnRrYXBwLmNyZWF0ZXRpbWVyaGFuZGxlcgorCisgICAgbWlsbGlzZWNvbmRzOiBpbnQKKyAgICBmdW5jOiBvYmplY3QKKyAgICAvCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX0NyZWF0ZVRpbWVySGFuZGxlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl90a2FwcF9jcmVhdGV0aW1lcmhhbmRsZXJfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgaW50IG1pbGxpc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTJkYTU5NTliOWQwMzE5MTEgaW5wdXQ9YmE2NzI5ZjMyZjAyNzdhNV0qLwogewotICAgIGludCBtaWxsaXNlY29uZHM7Ci0gICAgUHlPYmplY3QgKmZ1bmM7CiAgICAgVGt0dE9iamVjdCAqdjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU86Y3JlYXRldGltZXJoYW5kbGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm1pbGxpc2Vjb25kcywgJmZ1bmMpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soZnVuYykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJhZCBhcmd1bWVudCBsaXN0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjY3MCwxOCArMjg5MSwyMyBAQAogCiAvKiogRXZlbnQgTG9vcCAqKi8KIAorLypbY2xpbmljIGlucHV0XQorX3RraW50ZXIudGthcHAubWFpbmxvb3AKKworICAgIHNlbGY6IHNlbGYodHlwZT0iVGthcHBPYmplY3QgKiIpCisgICAgdGhyZXNob2xkOiBpbnQgPSAwCisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9NYWluTG9vcChQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl90a2FwcF9tYWlubG9vcF9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBpbnQgdGhyZXNob2xkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBiYThlYWJiZTU3ODQxYjAgaW5wdXQ9YWQ1N2M5YzFkZDJiOTQ3MF0qLwogewotICAgIGludCB0aHJlc2hvbGQgPSAwOwotICAgIFRrYXBwT2JqZWN0ICpzZWxmID0gKFRrYXBwT2JqZWN0KilzZWxmcHRyOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKICNlbmRpZgogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTptYWlubG9vcCIsICZ0aHJlc2hvbGQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogICAgIHNlbGYtPmRpc3BhdGNoaW5nID0gMTsKIApAQCAtMjczMyw0NCArMjk1OSw1NiBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotVGthcHBfRG9PbmVFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgaW50IGZsYWdzID0gMDsKLSAgICBpbnQgcnY7CisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC5kb29uZWV2ZW50CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmRvb25lZXZlbnQiLCAmZmxhZ3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmbGFnczogaW50ID0gMAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfZG9vbmVldmVudF9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBpbnQgZmxhZ3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjdjNmIyYWE0NjRjYWMyOSBpbnB1dD02NTQyYjkyOGUzNjRiNzkzXSovCit7CisgICAgaW50IHJ2OwogCiAgICAgRU5URVJfVENMCiAgICAgcnYgPSBUY2xfRG9PbmVFdmVudChmbGFncyk7CiAgICAgTEVBVkVfVENMCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBydik7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhydik7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLnRrYXBwLnF1aXQKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX1F1aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfdGthcHBfcXVpdF9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdmMjFlZWZmNDgxZjc1NGYgaW5wdXQ9ZTAzMDIwZGMzOGFmZjIzY10qLwogewotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6cXVpdCIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHF1aXRNYWluTG9vcCA9IDE7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLnRrYXBwLmludGVycGFkZHIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX0ludGVycEFkZHIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfdGthcHBfaW50ZXJwYWRkcl9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZjYWFhZTMyNzNiM2M5NWEgaW5wdXQ9MmRkMzJjYmRkYjU1YTExMV0qLwogewotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6aW50ZXJwYWRkciIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHJldHVybiBQeUxvbmdfRnJvbVZvaWRQdHIoVGthcHBfSW50ZXJwKHNlbGYpKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3RraW50ZXIudGthcHAubG9hZHRrCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9Ua0luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfdGthcHBfbG9hZHRrX2ltcGwoVGthcHBPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTllMTBhOTU0Y2U0NmQyYSBpbnB1dD1iNWU4MmFmZWRkNjM1NGYwXSovCiB7CiAgICAgVGNsX0ludGVycCAqaW50ZXJwID0gVGthcHBfSW50ZXJwKHNlbGYpOwogICAgIGNvbnN0IGNoYXIgKiBfdGtfZXhpc3RzID0gTlVMTDsKQEAgLTI3OTYsNyArMzAzNCw3IEBACiAgICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpIHsKICAgICAgICAgLyogVGhpcyBzZXRzIGFuIGV4Y2VwdGlvbiwgYnV0IHdlIGNhbm5vdCByZXR1cm4gcmlnaHQKICAgICAgICAgICAgYXdheSBiZWNhdXNlIHdlIG5lZWQgdG8gZXhpdCB0aGUgb3ZlcmxhcCBmaXJzdC4gKi8KLSAgICAgICAgVGtpbnRlcl9FcnJvcihzZWxmKTsKKyAgICAgICAgVGtpbnRlcl9FcnJvcigoUHlPYmplY3QgKilzZWxmKTsKICAgICB9IGVsc2UgewogICAgICAgICBfdGtfZXhpc3RzID0gVGthcHBfUmVzdWx0KHNlbGYpOwogICAgIH0KQEAgLTI4MzEsNTkgKzMwNjksMjMgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX1dpbGxEaXNwYXRjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17CisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci50a2FwcC53aWxsZGlzcGF0Y2gKIAotICAgICgoVGthcHBPYmplY3QqKXNlbGYpLT5kaXNwYXRjaGluZyA9IDE7CisgICAgc2VsZjogc2VsZih0eXBlPSJUa2FwcE9iamVjdCAqIikKKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfd2lsbGRpc3BhdGNoX2ltcGwoVGthcHBPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGUzZjQ2ZDI0NDY0MjE1NSBpbnB1dD0yNjMwNjk5NzY3ODA4OTcwXSovCit7CisgICAgc2VsZi0+ZGlzcGF0Y2hpbmcgPSAxOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIAotLyoqKiogVGthcHAgTWV0aG9kIExpc3QgKioqKi8KLQotc3RhdGljIFB5TWV0aG9kRGVmIFRrYXBwX21ldGhvZHNbXSA9Ci17Ci0gICAgeyJ3aWxsZGlzcGF0Y2giLCAgICAgICBUa2FwcF9XaWxsRGlzcGF0Y2gsIE1FVEhfTk9BUkdTfSwKLSAgICB7IndhbnRvYmplY3RzIiwgICAgICAgICAgICBUa2FwcF9XYW50T2JqZWN0cywgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImNhbGwiLCAgICAgICAgICAgICAgICAgICBUa2FwcF9DYWxsLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZXZhbCIsICAgICAgICAgICAgICAgICAgIFRrYXBwX0V2YWwsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJldmFsZmlsZSIsICAgICAgICAgICAgICAgVGthcHBfRXZhbEZpbGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJyZWNvcmQiLCAgICAgICAgICAgICAgICAgVGthcHBfUmVjb3JkLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiYWRkZXJyb3JpbmZvIiwgICAgICAgVGthcHBfQWRkRXJyb3JJbmZvLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0dmFyIiwgICAgICAgICAgICAgICAgIFRrYXBwX1NldFZhciwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Imdsb2JhbHNldHZhciIsICAgICAgIFRrYXBwX0dsb2JhbFNldFZhciwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImdldHZhciIsICAgICAgICAgICAgICAgICBUa2FwcF9HZXRWYXIsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnbG9iYWxnZXR2YXIiLCAgICAgICBUa2FwcF9HbG9iYWxHZXRWYXIsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJ1bnNldHZhciIsICAgICAgICAgICAgICAgVGthcHBfVW5zZXRWYXIsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnbG9iYWx1bnNldHZhciIsICAgICBUa2FwcF9HbG9iYWxVbnNldFZhciwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImdldGludCIsICAgICAgICAgICAgICAgICBUa2FwcF9HZXRJbnQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnZXRkb3VibGUiLCAgICAgICAgICAgICAgVGthcHBfR2V0RG91YmxlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZ2V0Ym9vbGVhbiIsICAgICAgICAgICAgIFRrYXBwX0dldEJvb2xlYW4sIE1FVEhfT30sCi0gICAgeyJleHByc3RyaW5nIiwgICAgICAgICAgICAgVGthcHBfRXhwclN0cmluZywgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImV4cHJsb25nIiwgICAgICAgICAgICAgICBUa2FwcF9FeHByTG9uZywgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImV4cHJkb3VibGUiLCAgICAgICAgICAgICBUa2FwcF9FeHByRG91YmxlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZXhwcmJvb2xlYW4iLCAgICAgICAgVGthcHBfRXhwckJvb2xlYW4sIE1FVEhfVkFSQVJHU30sCi0gICAgeyJzcGxpdGxpc3QiLCAgICAgICAgICAgICAgVGthcHBfU3BsaXRMaXN0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHsic3BsaXQiLCAgICAgICAgICAgICAgICAgIFRrYXBwX1NwbGl0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiY3JlYXRlY29tbWFuZCIsICAgICAgVGthcHBfQ3JlYXRlQ29tbWFuZCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImRlbGV0ZWNvbW1hbmQiLCAgICAgIFRrYXBwX0RlbGV0ZUNvbW1hbmQsIE1FVEhfVkFSQVJHU30sCi0jaWZkZWYgSEFWRV9DUkVBVEVGSUxFSEFORExFUgotICAgIHsiY3JlYXRlZmlsZWhhbmRsZXIiLCAgVGthcHBfQ3JlYXRlRmlsZUhhbmRsZXIsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJkZWxldGVmaWxlaGFuZGxlciIsICBUa2FwcF9EZWxldGVGaWxlSGFuZGxlciwgTUVUSF9WQVJBUkdTfSwKLSNlbmRpZgotICAgIHsiY3JlYXRldGltZXJoYW5kbGVyIiwgVGthcHBfQ3JlYXRlVGltZXJIYW5kbGVyLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsibWFpbmxvb3AiLCAgICAgICAgICAgICAgIFRrYXBwX01haW5Mb29wLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZG9vbmVldmVudCIsICAgICAgICAgICAgIFRrYXBwX0RvT25lRXZlbnQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJxdWl0IiwgICAgICAgICAgICAgICAgICAgVGthcHBfUXVpdCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImludGVycGFkZHIiLCAgICAgICAgIFRrYXBwX0ludGVycEFkZHIsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJsb2FkdGsiLCAgICAgICAgICAgICAgICAgVGthcHBfVGtJbml0LCBNRVRIX05PQVJHU30sCi0gICAge05VTEwsICAgICAgICAgICAgICAgICAgICAgTlVMTH0KLX07Ci0KLQotCiAvKioqKiBUa2FwcCBUeXBlIE1ldGhvZHMgKioqKi8KIAogc3RhdGljIHZvaWQKQEAgLTI4OTksNDEgKzMxMDEsMjYgQEAKICAgICBEaXNhYmxlRXZlbnRIb29rKCk7CiB9CiAKLXN0YXRpYyBQeVR5cGVfU2xvdCBUa2FwcF9UeXBlX3Nsb3RzW10gPSB7Ci0gICAge1B5X3RwX2RlYWxsb2MsIFRrYXBwX0RlYWxsb2N9LAotICAgIHtQeV90cF9tZXRob2RzLCBUa2FwcF9tZXRob2RzfSwKLSAgICB7MCwgMH0KLX07Ci0KLQotc3RhdGljIFB5VHlwZV9TcGVjIFRrYXBwX1R5cGVfc3BlYyA9IHsKLSAgICAiX3RraW50ZXIudGthcHAiLAotICAgIHNpemVvZihUa2FwcE9iamVjdCksCi0gICAgMCwKLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCi0gICAgVGthcHBfVHlwZV9zbG90cywKLX07Ci0KIAogCiAvKioqKiBUa2ludGVyIE1vZHVsZSAqKioqLwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3QqIHR1cGxlOwotICAgIGludCBzaXplOyAvKiBjdXJyZW50IHNpemUgKi8KLSAgICBpbnQgbWF4c2l6ZTsgLyogYWxsb2NhdGVkIHNpemUgKi8KKyAgICBQeV9zc2l6ZV90IHNpemU7IC8qIGN1cnJlbnQgc2l6ZSAqLworICAgIFB5X3NzaXplX3QgbWF4c2l6ZTsgLyogYWxsb2NhdGVkIHNpemUgKi8KIH0gRmxhdHRlbkNvbnRleHQ7CiAKIHN0YXRpYyBpbnQKLV9idW1wKEZsYXR0ZW5Db250ZXh0KiBjb250ZXh0LCBpbnQgc2l6ZSkKK19idW1wKEZsYXR0ZW5Db250ZXh0KiBjb250ZXh0LCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgLyogZXhwYW5kIHR1cGxlIHRvIGhvbGQgKGF0IGxlYXN0KSBzaXplIG5ldyBpdGVtcy4KICAgICAgICByZXR1cm4gdHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZCAqLwogCi0gICAgaW50IG1heHNpemUgPSBjb250ZXh0LT5tYXhzaXplICogMjsKKyAgICBQeV9zc2l6ZV90IG1heHNpemUgPSBjb250ZXh0LT5tYXhzaXplICogMjsgIC8qIG5ldmVyIG92ZXJmbG93cyAqLwogCiAgICAgaWYgKG1heHNpemUgPCBjb250ZXh0LT5zaXplICsgc2l6ZSkKLSAgICAgICAgbWF4c2l6ZSA9IGNvbnRleHQtPnNpemUgKyBzaXplOworICAgICAgICBtYXhzaXplID0gY29udGV4dC0+c2l6ZSArIHNpemU7ICAvKiBuZXZlciBvdmVyZmxvd3MgKi8KIAogICAgIGNvbnRleHQtPm1heHNpemUgPSBtYXhzaXplOwogCkBAIC0yOTQ1LDQxICszMTMyLDIxIEBACiB7CiAgICAgLyogYWRkIHR1cGxlIG9yIGxpc3QgdG8gYXJndW1lbnQgdHVwbGUgKHJlY3Vyc2l2ZWx5KSAqLwogCi0gICAgaW50IGksIHNpemU7CisgICAgUHlfc3NpemVfdCBpLCBzaXplOwogCiAgICAgaWYgKGRlcHRoID4gMTAwMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJuZXN0aW5nIHRvbyBkZWVwIGluIF9mbGF0dGVuIik7CiAgICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSBpZiAoUHlMaXN0X0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgIHNpemUgPSBQeUxpc3RfR0VUX1NJWkUoaXRlbSk7CisgICAgfSBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKGl0ZW0pIHx8IFB5TGlzdF9DaGVjayhpdGVtKSkgeworICAgICAgICBzaXplID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKGl0ZW0pOwogICAgICAgICAvKiBwcmVhbGxvY2F0ZSAoYXNzdW1lIG5vIG5lc3RpbmcpICovCiAgICAgICAgIGlmIChjb250ZXh0LT5zaXplICsgc2l6ZSA+IGNvbnRleHQtPm1heHNpemUgJiYKICAgICAgICAgICAgICFfYnVtcChjb250ZXh0LCBzaXplKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAvKiBjb3B5IGl0ZW1zIHRvIG91dHB1dCB0dXBsZSAqLwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbyA9IFB5TGlzdF9HRVRfSVRFTShpdGVtLCBpKTsKLSAgICAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2sobykgfHwgUHlUdXBsZV9DaGVjayhvKSkgewotICAgICAgICAgICAgICAgIGlmICghX2ZsYXR0ZW4xKGNvbnRleHQsIG8sIGRlcHRoICsgMSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvICE9IFB5X05vbmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c2l6ZSArIDEgPiBjb250ZXh0LT5tYXhzaXplICYmCi0gICAgICAgICAgICAgICAgICAgICFfYnVtcChjb250ZXh0LCAxKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKG8pOwotICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oY29udGV4dC0+dHVwbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zaXplKyssIG8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgIC8qIHNhbWUsIGZvciB0dXBsZXMgKi8KLSAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VUX1NJWkUoaXRlbSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaXplICsgc2l6ZSA+IGNvbnRleHQtPm1heHNpemUgJiYKLSAgICAgICAgICAgICFfYnVtcChjb250ZXh0LCBzaXplKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbyA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgaSk7CisgICAgICAgICAgICBQeU9iamVjdCAqbyA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShpdGVtLCBpKTsKICAgICAgICAgICAgIGlmIChQeUxpc3RfQ2hlY2sobykgfHwgUHlUdXBsZV9DaGVjayhvKSkgewogICAgICAgICAgICAgICAgIGlmICghX2ZsYXR0ZW4xKGNvbnRleHQsIG8sIGRlcHRoICsgMSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjk5OSwxNCArMzE2NiwxOSBAQAogICAgIHJldHVybiAxOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci5fZmxhdHRlbgorCisgICAgaXRlbTogb2JqZWN0CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2ludGVyX0ZsYXR0ZW4oUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorX3RraW50ZXJfX2ZsYXR0ZW4oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKml0ZW0pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Y2FkMDJhM2Y5N2YyOTg2MiBpbnB1dD02YjljMTIyNjBhYTExNTdmXSovCiB7CiAgICAgRmxhdHRlbkNvbnRleHQgY29udGV4dDsKLSAgICBQeU9iamVjdCogaXRlbTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpfZmxhdHRlbiIsICZpdGVtKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBjb250ZXh0Lm1heHNpemUgPSBQeVNlcXVlbmNlX1NpemUoaXRlbSk7CiAgICAgaWYgKGNvbnRleHQubWF4c2l6ZSA8IDApCkBAIC0zMDI5LDI2ICszMjAxLDMzIEBACiAgICAgcmV0dXJuIGNvbnRleHQudHVwbGU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK190a2ludGVyLmNyZWF0ZQorCisgICAgc2NyZWVuTmFtZTogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgIGJhc2VOYW1lOiBzdHIgPSBOVUxMCisgICAgY2xhc3NOYW1lOiBzdHIgPSAiVGsiCisgICAgaW50ZXJhY3RpdmU6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgd2FudG9iamVjdHM6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgd2FudFRrOiBpbnQoY19kZWZhdWx0PSIxIikgPSBUcnVlCisgICAgICAgIGlmIGZhbHNlLCB0aGVuIFRrX0luaXQoKSBkb2Vzbid0IGdldCBjYWxsZWQKKyAgICBzeW5jOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorICAgICAgICBpZiB0cnVlLCB0aGVuIHBhc3MgLXN5bmMgdG8gd2lzaAorICAgIHVzZTogc3RyKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pID0gTlVMTAorICAgICAgICBpZiBub3QgTm9uZSwgdGhlbiBwYXNzIC11c2UgdG8gd2lzaAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotVGtpbnRlcl9DcmVhdGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3RraW50ZXJfY3JlYXRlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqc2NyZWVuTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VOYW1lLCBjb25zdCBjaGFyICpjbGFzc05hbWUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgaW50ZXJhY3RpdmUsIGludCB3YW50b2JqZWN0cywgaW50IHdhbnRUaywgaW50IHN5bmMsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2UpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTMzMTU2MDc2NDhlNmJiNCBpbnB1dD0wZDUyMmFhZDFjYjBjYTBlXSovCiB7Ci0gICAgY2hhciAqc2NyZWVuTmFtZSA9IE5VTEw7Ci0gICAgY2hhciAqYmFzZU5hbWUgPSBOVUxMOyAvKiBYWFggdGhpcyBpcyBub3QgdXNlZCBhbnltb3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IGdldHRpbmcgcmlkIG9mIGl0LiAqLwotICAgIGNoYXIgKmNsYXNzTmFtZSA9IE5VTEw7Ci0gICAgaW50IGludGVyYWN0aXZlID0gMDsKLSAgICBpbnQgd2FudG9iamVjdHMgPSAwOwotICAgIGludCB3YW50VGsgPSAxOyAgICAgLyogSWYgZmFsc2UsIHRoZW4gVGtfSW5pdCgpIGRvZXNuJ3QgZ2V0IGNhbGxlZCAqLwotICAgIGludCBzeW5jID0gMDsgLyogcGFzcyAtc3luYyB0byB3aXNoICovCi0gICAgY2hhciAqdXNlID0gTlVMTDsgLyogcGFzcyAtdXNlIHRvIHdpc2ggKi8KLQotICAgIGNsYXNzTmFtZSA9ICJUayI7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInx6c3NpaWlpejpjcmVhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc2NyZWVuTmFtZSwgJmJhc2VOYW1lLCAmY2xhc3NOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJhY3RpdmUsICZ3YW50b2JqZWN0cywgJndhbnRUaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnN5bmMsICZ1c2UpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBYWFggYmFzZU5hbWUgaXMgbm90IHVzZWQgYW55bW9yZTsKKyAgICAgKiB0cnkgZ2V0dGluZyByaWQgb2YgaXQuICovCiAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzY3JlZW5OYW1lKTsKICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKGJhc2VOYW1lKTsKICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKGNsYXNzTmFtZSk7CkBAIC0zMDU5LDEyICszMjM4LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luYywgdXNlKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3RraW50ZXIuc2V0YnVzeXdhaXRpbnRlcnZhbAorCisgICAgbmV3X3ZhbDogaW50CisgICAgLworCitTZXQgdGhlIGJ1c3ktd2FpdCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvIFRjbF9Eb09uZUV2ZW50IGluIGEgdGhyZWFkZWQgUHl0aG9uIGludGVycHJldGVyLgorCitJdCBzaG91bGQgYmUgc2V0IHRvIGEgZGl2aXNvciBvZiB0aGUgbWF4aW11bSB0aW1lIGJldHdlZW4gZnJhbWVzIGluIGFuIGFuaW1hdGlvbi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVRraW50ZXJfc2V0YnVzeXdhaXRpbnRlcnZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfdGtpbnRlcl9zZXRidXN5d2FpdGludGVydmFsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG5ld192YWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDJiZjc3NTdkYzJkMGFiNiBpbnB1dD1kZWNhMWQ2ZjllNmRhZTQ3XSovCiB7Ci0gICAgaW50IG5ld192YWw7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldGJ1c3l3YWl0aW50ZXJ2YWwiLCAmbmV3X3ZhbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChuZXdfdmFsIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJidXN5d2FpdGludGVydmFsIG11c3QgYmUgPj0gMCIpOwpAQCAtMzA3NCwzNCArMzI2MiwxMDMgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotc3RhdGljIGNoYXIgc2V0YnVzeXdhaXRpbnRlcnZhbF9kb2NbXSA9Ci0ic2V0YnVzeXdhaXRpbnRlcnZhbChuKSAtPiBOb25lXG5cCi1cblwKLVNldCB0aGUgYnVzeS13YWl0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHN1Y2Nlc3NpdmVcblwKLWNhbGxzIHRvIFRjbF9Eb09uZUV2ZW50IGluIGEgdGhyZWFkZWQgUHl0aG9uIGludGVycHJldGVyLlxuXAotSXQgc2hvdWxkIGJlIHNldCB0byBhIGRpdmlzb3Igb2YgdGhlIG1heGltdW0gdGltZSBiZXR3ZWVuXG5cCi1mcmFtZXMgaW4gYW4gYW5pbWF0aW9uLiI7CisvKltjbGluaWMgaW5wdXRdCitfdGtpbnRlci5nZXRidXN5d2FpdGludGVydmFsIC0+IGludAogCi1zdGF0aWMgUHlPYmplY3QgKgotVGtpbnRlcl9nZXRidXN5d2FpdGludGVydmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK1JldHVybiB0aGUgY3VycmVudCBidXN5LXdhaXQgaW50ZXJ2YWwgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvIFRjbF9Eb09uZUV2ZW50IGluIGEgdGhyZWFkZWQgUHl0aG9uIGludGVycHJldGVyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgaW50CitfdGtpbnRlcl9nZXRidXN5d2FpdGludGVydmFsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yM2I3MmQ1NTIwMDFmNWM3IGlucHV0PWE2OTU4NzhkMmQ1NzZhODRdKi8KIHsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKFRraW50ZXJfYnVzeXdhaXRpbnRlcnZhbCk7CisgICAgcmV0dXJuIFRraW50ZXJfYnVzeXdhaXRpbnRlcnZhbDsKIH0KIAotc3RhdGljIGNoYXIgZ2V0YnVzeXdhaXRpbnRlcnZhbF9kb2NbXSA9Ci0iZ2V0YnVzeXdhaXRpbnRlcnZhbCgpIC0+IGludFxuXAotXG5cCi1SZXR1cm4gdGhlIGN1cnJlbnQgYnVzeS13YWl0IGludGVydmFsIGJldHdlZW4gc3VjY2Vzc2l2ZVxuXAotY2FsbHMgdG8gVGNsX0RvT25lRXZlbnQgaW4gYSB0aHJlYWRlZCBQeXRob24gaW50ZXJwcmV0ZXIuIjsKKyNpbmNsdWRlICJjbGluaWMvX3RraW50ZXIuYy5oIgorCitzdGF0aWMgUHlNZXRob2REZWYgVGt0dF9tZXRob2RzW10gPQoreworICAgIF9US0lOVEVSX1RLVElNRVJUT0tFTl9ERUxFVEVUSU1FUkhBTkRMRVJfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlUeXBlX1Nsb3QgVGt0dF9UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2RlYWxsb2MsIFRrdHRfRGVhbGxvY30sCisgICAge1B5X3RwX3JlcHIsIFRrdHRfUmVwcn0sCisgICAge1B5X3RwX21ldGhvZHMsIFRrdHRfbWV0aG9kc30sCisgICAgezAsIDB9Cit9OworCitzdGF0aWMgUHlUeXBlX1NwZWMgVGt0dF9UeXBlX3NwZWMgPSB7CisgICAgIl90a2ludGVyLnRrdGltZXJ0b2tlbiIsCisgICAgc2l6ZW9mKFRrdHRPYmplY3QpLAorICAgIDAsCisgICAgUHlfVFBGTEFHU19ERUZBVUxULAorICAgIFRrdHRfVHlwZV9zbG90cywKK307CisKKworLyoqKiogVGthcHAgTWV0aG9kIExpc3QgKioqKi8KKworc3RhdGljIFB5TWV0aG9kRGVmIFRrYXBwX21ldGhvZHNbXSA9Cit7CisgICAgX1RLSU5URVJfVEtBUFBfV0lMTERJU1BBVENIX01FVEhPRERFRgorICAgIHsid2FudG9iamVjdHMiLCAgICAgICAgICAgIFRrYXBwX1dhbnRPYmplY3RzLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiY2FsbCIsICAgICAgICAgICAgICAgICAgIFRrYXBwX0NhbGwsIE1FVEhfVkFSQVJHU30sCisgICAgX1RLSU5URVJfVEtBUFBfRVZBTF9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9US0FQUF9FVkFMRklMRV9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9US0FQUF9SRUNPUkRfTUVUSE9EREVGCisgICAgX1RLSU5URVJfVEtBUFBfQURERVJSSU5GT19NRVRIT0RERUYKKyAgICB7InNldHZhciIsICAgICAgICAgICAgICAgICBUa2FwcF9TZXRWYXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnbG9iYWxzZXR2YXIiLCAgICAgICBUa2FwcF9HbG9iYWxTZXRWYXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXR2YXIiLCAgICAgICBUa2FwcF9HZXRWYXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnbG9iYWxnZXR2YXIiLCAgICAgICBUa2FwcF9HbG9iYWxHZXRWYXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ1bnNldHZhciIsICAgICBUa2FwcF9VbnNldFZhciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Imdsb2JhbHVuc2V0dmFyIiwgICAgIFRrYXBwX0dsb2JhbFVuc2V0VmFyLCBNRVRIX1ZBUkFSR1N9LAorICAgIF9US0lOVEVSX1RLQVBQX0dFVElOVF9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9US0FQUF9HRVRET1VCTEVfTUVUSE9EREVGCisgICAgX1RLSU5URVJfVEtBUFBfR0VUQk9PTEVBTl9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9US0FQUF9FWFBSU1RSSU5HX01FVEhPRERFRgorICAgIF9US0lOVEVSX1RLQVBQX0VYUFJMT05HX01FVEhPRERFRgorICAgIF9US0lOVEVSX1RLQVBQX0VYUFJET1VCTEVfTUVUSE9EREVGCisgICAgX1RLSU5URVJfVEtBUFBfRVhQUkJPT0xFQU5fTUVUSE9EREVGCisgICAgX1RLSU5URVJfVEtBUFBfU1BMSVRMSVNUX01FVEhPRERFRgorICAgIF9US0lOVEVSX1RLQVBQX1NQTElUX01FVEhPRERFRgorICAgIF9US0lOVEVSX1RLQVBQX0NSRUFURUNPTU1BTkRfTUVUSE9EREVGCisgICAgX1RLSU5URVJfVEtBUFBfREVMRVRFQ09NTUFORF9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9US0FQUF9DUkVBVEVGSUxFSEFORExFUl9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9US0FQUF9ERUxFVEVGSUxFSEFORExFUl9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9US0FQUF9DUkVBVEVUSU1FUkhBTkRMRVJfTUVUSE9EREVGCisgICAgX1RLSU5URVJfVEtBUFBfTUFJTkxPT1BfTUVUSE9EREVGCisgICAgX1RLSU5URVJfVEtBUFBfRE9PTkVFVkVOVF9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9US0FQUF9RVUlUX01FVEhPRERFRgorICAgIF9US0lOVEVSX1RLQVBQX0lOVEVSUEFERFJfTUVUSE9EREVGCisgICAgX1RLSU5URVJfVEtBUFBfTE9BRFRLX01FVEhPRERFRgorICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgIE5VTEx9Cit9OworCitzdGF0aWMgUHlUeXBlX1Nsb3QgVGthcHBfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCBUa2FwcF9EZWFsbG9jfSwKKyAgICB7UHlfdHBfbWV0aG9kcywgVGthcHBfbWV0aG9kc30sCisgICAgezAsIDB9Cit9OworCisKK3N0YXRpYyBQeVR5cGVfU3BlYyBUa2FwcF9UeXBlX3NwZWMgPSB7CisgICAgIl90a2ludGVyLnRrYXBwIiwKKyAgICBzaXplb2YoVGthcHBPYmplY3QpLAorICAgIDAsCisgICAgUHlfVFBGTEFHU19ERUZBVUxULAorICAgIFRrYXBwX1R5cGVfc2xvdHMsCit9OwogCiBzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlTWV0aG9kc1tdID0KIHsKLSAgICB7Il9mbGF0dGVuIiwgICAgICAgICAgIFRraW50ZXJfRmxhdHRlbiwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImNyZWF0ZSIsICAgICAgICAgICAgIFRraW50ZXJfQ3JlYXRlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0YnVzeXdhaXRpbnRlcnZhbCIsVGtpbnRlcl9zZXRidXN5d2FpdGludGVydmFsLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRidXN5d2FpdGludGVydmFsX2RvY30sCi0gICAgeyJnZXRidXN5d2FpdGludGVydmFsIiwoUHlDRnVuY3Rpb24pVGtpbnRlcl9nZXRidXN5d2FpdGludGVydmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIGdldGJ1c3l3YWl0aW50ZXJ2YWxfZG9jfSwKKyAgICBfVEtJTlRFUl9fRkxBVFRFTl9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9DUkVBVEVfTUVUSE9EREVGCisgICAgX1RLSU5URVJfU0VUQlVTWVdBSVRJTlRFUlZBTF9NRVRIT0RERUYKKyAgICBfVEtJTlRFUl9HRVRCVVNZV0FJVElOVEVSVkFMX01FVEhPRERFRgogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgTlVMTH0KIH07CiAKQEAgLTMyOTQsNiArMzU1MSw3IEBACiAgICAgICAgIFB5X0RFQ1JFRihtKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgICgoUHlUeXBlT2JqZWN0ICopbyktPnRwX25ldyA9IE5VTEw7CiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGthcHBUeXBlIiwgbykpIHsKICAgICAgICAgUHlfREVDUkVGKG8pOwogICAgICAgICBQeV9ERUNSRUYobSk7CkBAIC0zMzA2LDYgKzM1NjQsNyBAQAogICAgICAgICBQeV9ERUNSRUYobSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICAoKFB5VHlwZU9iamVjdCAqKW8pLT50cF9uZXcgPSBOVUxMOwogICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRrdHRUeXBlIiwgbykpIHsKICAgICAgICAgUHlfREVDUkVGKG8pOwogICAgICAgICBQeV9ERUNSRUYobSk7CkBAIC0zMzE4LDYgKzM1NzcsNyBAQAogICAgICAgICBQeV9ERUNSRUYobSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICAoKFB5VHlwZU9iamVjdCAqKW8pLT50cF9uZXcgPSBOVUxMOwogICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRjbF9PYmoiLCBvKSkgewogICAgICAgICBQeV9ERUNSRUYobyk7CiAgICAgICAgIFB5X0RFQ1JFRihtKTsKQEAgLTMzNDUsOCArMzYwNSw0MCBAQAogICAgIHVleGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKFB5X0dldFByb2dyYW1OYW1lKCksIC0xKTsKICAgICBpZiAodWV4ZSkgewogICAgICAgICBjZXhlID0gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdCh1ZXhlKTsKLSAgICAgICAgaWYgKGNleGUpCisgICAgICAgIGlmIChjZXhlKSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICAgICAgaW50IHNldF92YXIgPSAwOworICAgICAgICAgICAgUHlPYmplY3QgKnN0cl9wYXRoOworICAgICAgICAgICAgd2NoYXJfdCAqd2NzX3BhdGg7CisgICAgICAgICAgICBEV09SRCByZXQ7CisKKyAgICAgICAgICAgIHJldCA9IEdldEVudmlyb25tZW50VmFyaWFibGVXKEwiVENMX0xJQlJBUlkiLCBOVUxMLCAwKTsKKworICAgICAgICAgICAgaWYgKCFyZXQgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfRU5WVkFSX05PVF9GT1VORCkgeworICAgICAgICAgICAgICAgIHN0cl9wYXRoID0gX2dldF90Y2xfbGliX3BhdGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyX3BhdGggPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3RyX3BhdGggIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICB3Y3NfcGF0aCA9IFB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nKHN0cl9wYXRoLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdjc19wYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFNldEVudmlyb25tZW50VmFyaWFibGVXKEwiVENMX0xJQlJBUlkiLCB3Y3NfcGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHNldF92YXIgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgVGNsX0ZpbmRFeGVjdXRhYmxlKFB5Qnl0ZXNfQXNTdHJpbmcoY2V4ZSkpOworCisgICAgICAgICAgICBpZiAoc2V0X3ZhcikgeworICAgICAgICAgICAgICAgIFNldEVudmlyb25tZW50VmFyaWFibGVXKEwiVENMX0xJQlJBUlkiLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHdjc19wYXRoKTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBUY2xfRmluZEV4ZWN1dGFibGUoUHlCeXRlc19Bc1N0cmluZyhjZXhlKSk7CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLworICAgICAgICB9CiAgICAgICAgIFB5X1hERUNSRUYoY2V4ZSk7CiAgICAgICAgIFB5X0RFQ1JFRih1ZXhlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190cmFjZW1hbGxvYy5jIGIvTW9kdWxlcy9fdHJhY2VtYWxsb2MuYwppbmRleCA0MDlmNGRiLi43OTZhYzBmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCisrKyBiL01vZHVsZXMvX3RyYWNlbWFsbG9jLmMKQEAgLTE2LDE0ICsxNiwxMSBAQAogIyAgZGVmaW5lIFRSQUNFX0RFQlVHCiAjZW5kaWYKIAotI2RlZmluZSBfU1RSKFZBTCkgI1ZBTAotI2RlZmluZSBTVFIoVkFMKSBfU1RSKFZBTCkKLQogLyogUHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KIHN0YXRpYyBzdHJ1Y3QgewotICAgIFB5TWVtQWxsb2NhdG9yIG1lbTsKLSAgICBQeU1lbUFsbG9jYXRvciByYXc7Ci0gICAgUHlNZW1BbGxvY2F0b3Igb2JqOworICAgIFB5TWVtQWxsb2NhdG9yRXggbWVtOworICAgIFB5TWVtQWxsb2NhdG9yRXggcmF3OworICAgIFB5TWVtQWxsb2NhdG9yRXggb2JqOwogfSBhbGxvY2F0b3JzOwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTY5LDcgKzY2LDcgQEAKICNlbmRpZgogewogICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKLSAgICBpbnQgbGluZW5vOworICAgIHVuc2lnbmVkIGludCBsaW5lbm87CiB9IGZyYW1lX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTgyLDcgKzc5LDcgQEAKICAgICAgICAgKHNpemVvZih0cmFjZWJhY2tfdCkgKyBzaXplb2YoZnJhbWVfdCkgKiAoTkZSQU1FIC0gMSkpCiAKICNkZWZpbmUgTUFYX05GUkFNRSBcCi0gICAgICAgICgoSU5UX01BWCAtIHNpemVvZih0cmFjZWJhY2tfdCkpIC8gc2l6ZW9mKGZyYW1lX3QpICsgMSkKKyAgICAgICAgKChJTlRfTUFYIC0gKGludClzaXplb2YodHJhY2ViYWNrX3QpKSAvIChpbnQpc2l6ZW9mKGZyYW1lX3QpICsgMSkKIAogc3RhdGljIFB5T2JqZWN0ICp1bmtub3duX2ZpbGVuYW1lID0gTlVMTDsKIHN0YXRpYyB0cmFjZWJhY2tfdCB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2s7CkBAIC0xOTIsNyArMTg5LDcgQEAKIHN0YXRpYyB2b2lkCiBzZXRfcmVlbnRyYW50KGludCByZWVudHJhbnQpCiB7Ci0gICAgYXNzZXJ0KCFyZWVudHJhbnQgfHwgIWdldF9yZWVudHJhbnQoKSk7CisgICAgYXNzZXJ0KHJlZW50cmFudCAhPSB0cmFjZW1hbGxvY19yZWVudHJhbnQpOwogICAgIHRyYWNlbWFsbG9jX3JlZW50cmFudCA9IHJlZW50cmFudDsKIH0KICNlbmRpZgpAQCAtMjY5LDEyICsyNjYsMTMgQEAKICAgICBQeUNvZGVPYmplY3QgKmNvZGU7CiAgICAgUHlPYmplY3QgKmZpbGVuYW1lOwogICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgaW50IGxpbmVubzsKIAogICAgIGZyYW1lLT5maWxlbmFtZSA9IHVua25vd25fZmlsZW5hbWU7Ci0gICAgZnJhbWUtPmxpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihweWZyYW1lKTsKLSAgICBhc3NlcnQoZnJhbWUtPmxpbmVubyA+PSAwKTsKLSAgICBpZiAoZnJhbWUtPmxpbmVubyA8IDApCi0gICAgICAgIGZyYW1lLT5saW5lbm8gPSAwOworICAgIGxpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihweWZyYW1lKTsKKyAgICBpZiAobGluZW5vIDwgMCkKKyAgICAgICAgbGluZW5vID0gMDsKKyAgICBmcmFtZS0+bGluZW5vID0gKHVuc2lnbmVkIGludClsaW5lbm87CiAKICAgICBjb2RlID0gcHlmcmFtZS0+Zl9jb2RlOwogICAgIGlmIChjb2RlID09IE5VTEwpIHsKQEAgLTI5OCw3ICsyOTYsNyBAQAogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZmlsZW5hbWUpKSB7CiAjaWZkZWYgVFJBQ0VfREVCVUcKLSAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZpbGVuYW1lIGlzIG5vdCBhbiB1bmljb2RlIHN0cmluZyIpOworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmlsZW5hbWUgaXMgbm90IGEgdW5pY29kZSBzdHJpbmciKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzc4LDcgKzM3Niw2IEBACiAgICAgZm9yIChweWZyYW1lID0gdHN0YXRlLT5mcmFtZTsgcHlmcmFtZSAhPSBOVUxMOyBweWZyYW1lID0gcHlmcmFtZS0+Zl9iYWNrKSB7CiAgICAgICAgIHRyYWNlbWFsbG9jX2dldF9mcmFtZShweWZyYW1lLCAmdHJhY2ViYWNrLT5mcmFtZXNbdHJhY2ViYWNrLT5uZnJhbWVdKTsKICAgICAgICAgYXNzZXJ0KHRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXS5maWxlbmFtZSAhPSBOVUxMKTsKLSAgICAgICAgYXNzZXJ0KHRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXS5saW5lbm8gPj0gMCk7CiAgICAgICAgIHRyYWNlYmFjay0+bmZyYW1lKys7CiAgICAgICAgIGlmICh0cmFjZWJhY2stPm5mcmFtZSA9PSB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDc2LDE3ICs0NzMsMjIgQEAKIH0KIAogc3RhdGljIHZvaWQqCi10cmFjZW1hbGxvY19tYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3RyYWNlbWFsbG9jX2FsbG9jKGludCB1c2VfY2FsbG9jLCB2b2lkICpjdHgsIHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSkKIHsKLSAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisgICAgUHlNZW1BbGxvY2F0b3JFeCAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3JFeCAqKWN0eDsKICAgICB2b2lkICpwdHI7CiAKLSAgICBwdHIgPSBhbGxvYy0+bWFsbG9jKGFsbG9jLT5jdHgsIHNpemUpOworICAgIGFzc2VydChlbHNpemUgPT0gMCB8fCBuZWxlbSA8PSBQWV9TSVpFX01BWCAvIGVsc2l6ZSk7CisKKyAgICBpZiAodXNlX2NhbGxvYykKKyAgICAgICAgcHRyID0gYWxsb2MtPmNhbGxvYyhhbGxvYy0+Y3R4LCBuZWxlbSwgZWxzaXplKTsKKyAgICBlbHNlCisgICAgICAgIHB0ciA9IGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgbmVsZW0gKiBlbHNpemUpOwogICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBUQUJMRVNfTE9DSygpOwotICAgIGlmICh0cmFjZW1hbGxvY19hZGRfdHJhY2UocHRyLCBzaXplKSA8IDApIHsKKyAgICBpZiAodHJhY2VtYWxsb2NfYWRkX3RyYWNlKHB0ciwgbmVsZW0gKiBlbHNpemUpIDwgMCkgewogICAgICAgICAvKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSB0cmFjZSBmb3IgdGhlIG5ldyBtZW1vcnkgYmxvY2sgKi8KICAgICAgICAgVEFCTEVTX1VOTE9DSygpOwogICAgICAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOwpAQCAtNDk5LDcgKzUwMSw3IEBACiBzdGF0aWMgdm9pZCoKIHRyYWNlbWFsbG9jX3JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKIHsKLSAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisgICAgUHlNZW1BbGxvY2F0b3JFeCAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3JFeCAqKWN0eDsKICAgICB2b2lkICpwdHIyOwogCiAgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOwpAQCAtNTE3LDcgKzUxOSw3IEBACiAgICAgICAgICAgICAgICB0aGUgY2FsbGVyLCBiZWNhdXNlIHJlYWxsb2MoKSBtYXkgYWxyZWFkeSBoYXZlIHNocmlua2VkIHRoZQogICAgICAgICAgICAgICAgbWVtb3J5IGJsb2NrIGFuZCBzbyByZW1vdmVkIGJ5dGVzLgogCi0gICAgICAgICAgICAgICBUaGlzIGNhc2UgaXMgdmVyeSB1bmxpa2VseTogYW4gaGFzaCBlbnRyeSBoYXMganVzdCBiZWVuCisgICAgICAgICAgICAgICBUaGlzIGNhc2UgaXMgdmVyeSB1bmxpa2VseTogYSBoYXNoIGVudHJ5IGhhcyBqdXN0IGJlZW4KICAgICAgICAgICAgICAgIHJlbGVhc2VkLCBzbyB0aGUgaGFzaCB0YWJsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgZnJlZSBlbnRyeS4KIAogICAgICAgICAgICAgICAgVGhlIEdJTCBhbmQgdGhlIHRhYmxlIGxvY2sgZW5zdXJlcyB0aGF0IG9ubHkgb25lIHRocmVhZCBpcwpAQCAtNTQ0LDcgKzU0Niw3IEBACiBzdGF0aWMgdm9pZAogdHJhY2VtYWxsb2NfZnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cikKIHsKLSAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisgICAgUHlNZW1BbGxvY2F0b3JFeCAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3JFeCAqKWN0eDsKIAogICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTYwLDEzICs1NjIsMTYgQEAKIH0KIAogc3RhdGljIHZvaWQqCi10cmFjZW1hbGxvY19tYWxsb2NfZ2lsKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit0cmFjZW1hbGxvY19hbGxvY19naWwoaW50IHVzZV9jYWxsb2MsIHZvaWQgKmN0eCwgc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKQogewogICAgIHZvaWQgKnB0cjsKIAogICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKLSAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OwotICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICAgICAgUHlNZW1BbGxvY2F0b3JFeCAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3JFeCAqKWN0eDsKKyAgICAgICAgaWYgKHVzZV9jYWxsb2MpCisgICAgICAgICAgICByZXR1cm4gYWxsb2MtPmNhbGxvYyhhbGxvYy0+Y3R4LCBuZWxlbSwgZWxzaXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgbmVsZW0gKiBlbHNpemUpOwogICAgIH0KIAogICAgIC8qIElnbm9yZSByZWVudHJhbnQgY2FsbC4gUHlPYmpldF9NYWxsb2MoKSBjYWxscyBQeU1lbV9NYWxsb2MoKSBmb3IKQEAgLTU3NCwxMyArNTc5LDI1IEBACiAgICAgICAgYWxsb2NhdGlvbiB0d2ljZS4gKi8KICAgICBzZXRfcmVlbnRyYW50KDEpOwogCi0gICAgcHRyID0gdHJhY2VtYWxsb2NfbWFsbG9jKGN0eCwgc2l6ZSk7CisgICAgcHRyID0gdHJhY2VtYWxsb2NfYWxsb2ModXNlX2NhbGxvYywgY3R4LCBuZWxlbSwgZWxzaXplKTsKIAogICAgIHNldF9yZWVudHJhbnQoMCk7CiAgICAgcmV0dXJuIHB0cjsKIH0KIAogc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19tYWxsb2NfZ2lsKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX2FsbG9jX2dpbCgwLCBjdHgsIDEsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX2NhbGxvY19naWwodm9pZCAqY3R4LCBzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpCit7CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX2FsbG9jX2dpbCgxLCBjdHgsIG5lbGVtLCBlbHNpemUpOworfQorCitzdGF0aWMgdm9pZCoKIHRyYWNlbWFsbG9jX3JlYWxsb2NfZ2lsKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCiB7CiAgICAgdm9pZCAqcHRyMjsKQEAgLTU5MCw3ICs2MDcsNyBAQAogICAgICAgICAgICBFeGFtcGxlOiBQeU1lbV9SYXdSZWFsbG9jKCkgaXMgY2FsbGVkIGludGVybmFsbHkgYnkgcHltYWxsb2MKICAgICAgICAgICAgKF9QeU9iamVjdF9NYWxsb2MoKSBhbmQgIF9QeU9iamVjdF9SZWFsbG9jKCkpIHRvIGFsbG9jYXRlIGEgbmV3CiAgICAgICAgICAgIGFyZW5hIChuZXdfYXJlbmEoKSkuICovCi0gICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKyAgICAgICAgUHlNZW1BbGxvY2F0b3JFeCAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3JFeCAqKWN0eDsKIAogICAgICAgICBwdHIyID0gYWxsb2MtPnJlYWxsb2MoYWxsb2MtPmN0eCwgcHRyLCBuZXdfc2l6ZSk7CiAgICAgICAgIGlmIChwdHIyICE9IE5VTEwgJiYgcHRyICE9IE5VTEwpIHsKQEAgLTYxNCw3ICs2MzEsNyBAQAogCiAjaWZkZWYgVFJBQ0VfUkFXX01BTExPQwogc3RhdGljIHZvaWQqCi10cmFjZW1hbGxvY19yYXdfbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit0cmFjZW1hbGxvY19yYXdfYWxsb2MoaW50IHVzZV9jYWxsb2MsIHZvaWQgKmN0eCwgc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKQogewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxfc3RhdGU7CkBAIC02MjIsOCArNjM5LDExIEBACiAgICAgdm9pZCAqcHRyOwogCiAgICAgaWYgKGdldF9yZWVudHJhbnQoKSkgewotICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7Ci0gICAgICAgIHJldHVybiBhbGxvYy0+bWFsbG9jKGFsbG9jLT5jdHgsIHNpemUpOworICAgICAgICBQeU1lbUFsbG9jYXRvckV4ICphbGxvYyA9IChQeU1lbUFsbG9jYXRvckV4ICopY3R4OworICAgICAgICBpZiAodXNlX2NhbGxvYykKKyAgICAgICAgICAgIHJldHVybiBhbGxvYy0+Y2FsbG9jKGFsbG9jLT5jdHgsIG5lbGVtLCBlbHNpemUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBuZWxlbSAqIGVsc2l6ZSk7CiAgICAgfQogCiAgICAgLyogSWdub3JlIHJlZW50cmFudCBjYWxsLiBQeUdJTFN0YXRlX0Vuc3VyZSgpIG1heSBjYWxsIFB5TWVtX1Jhd01hbGxvYygpCkBAIC02MzMsMTAgKzY1MywxMCBAQAogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBnaWxfc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwotICAgIHB0ciA9IHRyYWNlbWFsbG9jX21hbGxvYyhjdHgsIHNpemUpOworICAgIHB0ciA9IHRyYWNlbWFsbG9jX2FsbG9jKHVzZV9jYWxsb2MsIGN0eCwgbmVsZW0sIGVsc2l6ZSk7CiAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbF9zdGF0ZSk7CiAjZWxzZQotICAgIHB0ciA9IHRyYWNlbWFsbG9jX21hbGxvYyhjdHgsIHNpemUpOworICAgIHB0ciA9IHRyYWNlbWFsbG9jX2FsbG9jKHVzZV9jYWxsb2MsIGN0eCwgbmVsZW0sIGVsc2l6ZSk7CiAjZW5kaWYKIAogICAgIHNldF9yZWVudHJhbnQoMCk7CkBAIC02NDQsNiArNjY0LDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmF3X21hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19yYXdfYWxsb2MoMCwgY3R4LCAxLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yYXdfY2FsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKQoreworICAgIHJldHVybiB0cmFjZW1hbGxvY19yYXdfYWxsb2MoMSwgY3R4LCBuZWxlbSwgZWxzaXplKTsKK30KKworc3RhdGljIHZvaWQqCiB0cmFjZW1hbGxvY19yYXdfcmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQogewogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC02NTMsNyArNjg1LDcgQEAKIAogICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKICAgICAgICAgLyogUmVlbnRyYW50IGNhbGwgdG8gUHlNZW1fUmF3UmVhbGxvYygpLiAqLwotICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisgICAgICAgIFB5TWVtQWxsb2NhdG9yRXggKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yRXggKiljdHg7CiAKICAgICAgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOwogCkBAIC03MDgsMTAgKzc0MCw2IEBACiAgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CiAjZW5kaWYKIAotICAgIC8qIERpc2FibGUgYWxzbyByZWVudHJhbnQgY2FsbHMgdG8gdHJhY2VtYWxsb2NfbWFsbG9jKCkgdG8gbm90IGFkZCBhIG5ldwotICAgICAgIHRyYWNlIHdoaWxlIHdlIGFyZSBjbGVhcmluZyB0cmFjZXMgKi8KLSAgICBhc3NlcnQoZ2V0X3JlZW50cmFudCgpKTsKLQogICAgIFRBQkxFU19MT0NLKCk7CiAgICAgX1B5X2hhc2h0YWJsZV9jbGVhcih0cmFjZW1hbGxvY190cmFjZXMpOwogICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPSAwOwpAQCAtNzkxLDExICs4MTksNiBAQAogICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5mcmFtZXNbMF0ubGluZW5vID0gMDsKICAgICB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2suaGFzaCA9IHRyYWNlYmFja19oYXNoKCZ0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2spOwogCi0gICAgLyogRGlzYWJsZSB0cmFjaW5nIGFsbG9jYXRpb25zIHVudGlsIGhvb2tzIGFyZSBpbnN0YWxsZWQuIFNldAotICAgICAgIGFsc28gdGhlIHJlZW50cmFudCBmbGFnIHRvIGRldGVjdCBidWdzOiBmYWlsIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yCi0gICAgICAgaWYgc2V0X3JlZW50cmFudCgxKSBpcyBjYWxsZWQgd2hpbGUgdHJhY2luZyBpcyBkaXNhYmxlZC4gKi8KLSAgICBzZXRfcmVlbnRyYW50KDEpOwotCiAgICAgdHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID0gVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQ7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC04MzEsNyArODU0LDcgQEAKIHN0YXRpYyBpbnQKIHRyYWNlbWFsbG9jX3N0YXJ0KGludCBtYXhfbmZyYW1lKQogewotICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIFB5TWVtQWxsb2NhdG9yRXggYWxsb2M7CiAgICAgc2l6ZV90IHNpemU7CiAKICAgICBpZiAodHJhY2VtYWxsb2NfaW5pdCgpIDwgMCkKQEAgLTg1Niw2ICs4NzksNyBAQAogCiAjaWZkZWYgVFJBQ0VfUkFXX01BTExPQwogICAgIGFsbG9jLm1hbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19tYWxsb2M7CisgICAgYWxsb2MuY2FsbG9jID0gdHJhY2VtYWxsb2NfcmF3X2NhbGxvYzsKICAgICBhbGxvYy5yZWFsbG9jID0gdHJhY2VtYWxsb2NfcmF3X3JlYWxsb2M7CiAgICAgYWxsb2MuZnJlZSA9IHRyYWNlbWFsbG9jX2ZyZWU7CiAKQEAgLTg2NSw2ICs4ODksNyBAQAogI2VuZGlmCiAKICAgICBhbGxvYy5tYWxsb2MgPSB0cmFjZW1hbGxvY19tYWxsb2NfZ2lsOworICAgIGFsbG9jLmNhbGxvYyA9IHRyYWNlbWFsbG9jX2NhbGxvY19naWw7CiAgICAgYWxsb2MucmVhbGxvYyA9IHRyYWNlbWFsbG9jX3JlYWxsb2NfZ2lsOwogICAgIGFsbG9jLmZyZWUgPSB0cmFjZW1hbGxvY19mcmVlOwogCkBAIC04NzgsNyArOTAzLDYgQEAKIAogICAgIC8qIGV2ZXJ5dGhpbmcgaXMgcmVhZHk6IHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyAqLwogICAgIHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nID0gMTsKLSAgICBzZXRfcmVlbnRyYW50KDApOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC04OTIsMTAgKzkxNiw2IEBACiAgICAgLyogc3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KICAgICB0cmFjZW1hbGxvY19jb25maWcudHJhY2luZyA9IDA7CiAKLSAgICAvKiBzZXQgdGhlIHJlZW50cmFudCBmbGFnIHRvIGRldGVjdCBidWdzOiBmYWlsIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yIGlmCi0gICAgICAgc2V0X3JlZW50cmFudCgxKSBpcyBjYWxsZWQgd2hpbGUgdHJhY2luZyBpcyBkaXNhYmxlZC4gKi8KLSAgICBzZXRfcmVlbnRyYW50KDEpOwotCiAgICAgLyogdW5yZWdpc3RlciB0aGUgaG9vayBvbiBtZW1vcnkgYWxsb2NhdG9ycyAqLwogI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jYXRvcnMucmF3KTsKQEAgLTkwOSwxNSArOTI5LDYgQEAKICAgICB0cmFjZW1hbGxvY190cmFjZWJhY2sgPSBOVUxMOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCi1saW5lbm9fYXNfb2JqKGludCBsaW5lbm8pCi17Ci0gICAgaWYgKGxpbmVubyA+PSAwKQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGxpbmVubyk7Ci0gICAgZWxzZQotICAgICAgICBQeV9SRVRVUk5fTk9ORTsKLX0KLQogUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2lzX3RyYWNpbmdfZG9jLAogICAgICJpc190cmFjaW5nKCktPmJvb2xcbiIKICAgICAiXG4iCkBAIC05NjIsOCArOTczLDcgQEAKICAgICBQeV9JTkNSRUYoZnJhbWUtPmZpbGVuYW1lKTsKICAgICBQeVR1cGxlX1NFVF9JVEVNKGZyYW1lX29iaiwgMCwgZnJhbWUtPmZpbGVuYW1lKTsKIAotICAgIGFzc2VydChmcmFtZS0+bGluZW5vID49IDApOwotICAgIGxpbmVub19vYmogPSBsaW5lbm9fYXNfb2JqKGZyYW1lLT5saW5lbm8pOworICAgIGxpbmVub19vYmogPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhmcmFtZS0+bGluZW5vKTsKICAgICBpZiAobGluZW5vX29iaiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihmcmFtZV9vYmopOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExOTUsNyArMTIwNSw3IEBACiAgICAgaWYgKG5mcmFtZSA8IDEgfHwgbmZyYW1lID4gTUFYX05GUkFNRSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbnVtYmVyIG9mIGZyYW1lcyBtdXN0IGJlIGluIHJhbmdlIFsxOyAlaV0iLAotICAgICAgICAgICAgICAgICAgICAgKGludClNQVhfTkZSQU1FKTsKKyAgICAgICAgICAgICAgICAgICAgIE1BWF9ORlJBTUUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgbmZyYW1lX2ludCA9IFB5X1NBRkVfRE9XTkNBU1QobmZyYW1lLCBQeV9zc2l6ZV90LCBpbnQpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fd2Vha3JlZi5jIGIvTW9kdWxlcy9fd2Vha3JlZi5jCmluZGV4IGRhNTg5MzEuLjgwNWQ2ZDAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3dlYWtyZWYuYworKysgYi9Nb2R1bGVzL193ZWFrcmVmLmMKQEAgLTksNiArOSw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1mZmVjNzNiODU4NDY1OTZkXSovCiAKKyNpbmNsdWRlICJjbGluaWMvX3dlYWtyZWYuYy5oIgorCiAvKltjbGluaWMgaW5wdXRdCiAKIF93ZWFrcmVmLmdldHdlYWtyZWZjb3VudCAtPiBQeV9zc2l6ZV90CkBAIC0xOSwzNiArMjEsOSBAQAogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzIHRvICdvYmplY3QnLgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi1QeURvY19TVFJWQVIoX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfXywKLSJnZXR3ZWFrcmVmY291bnQoJG1vZHVsZSwgb2JqZWN0LCAvKVxuIgotIi0tXG4iCi0iXG4iCi0iUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzIHRvIFwnb2JqZWN0XCcuIik7Ci0KLSNkZWZpbmUgX1dFQUtSRUZfR0VUV0VBS1JFRkNPVU5UX01FVEhPRERFRiAgICBcCi0gICAgeyJnZXR3ZWFrcmVmY291bnQiLCAoUHlDRnVuY3Rpb24pX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50LCBNRVRIX08sIF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX199LAotCiBzdGF0aWMgUHlfc3NpemVfdAotX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1fd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCkKLXsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7Ci0KLSAgICBfcmV0dXJuX3ZhbHVlID0gX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwobW9kdWxlLCBvYmplY3QpOwotICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKLQotZXhpdDoKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwotfQotCi1zdGF0aWMgUHlfc3NpemVfdAotX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wMzJlZWRiZmQ3ZDY5ZTEwIGlucHV0PWNlZGI2OTcxMWI2YTI1MDddKi8KK193ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpvYmplY3QpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzAxODA2ZDU5NTU4ZmYzZSBpbnB1dD1jZWRiNjk3MTFiNmEyNTA3XSovCiB7CiAgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdDsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fd2luYXBpLmMgYi9Nb2R1bGVzL193aW5hcGkuYwppbmRleCBkNDcyYzllLi5lZGM2Y2Y0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL193aW5hcGkuYworKysgYi9Nb2R1bGVzL193aW5hcGkuYwpAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBXSU5ET1dTX0xFQU5fQU5EX01FQU4KICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSA8Y3J0ZGJnLmg+CisjaW5jbHVkZSAid2lucmVwYXJzZS5oIgogCiAjaWYgZGVmaW5lZChNU19XSU4zMikgJiYgIWRlZmluZWQoTVNfV0lONjQpCiAjZGVmaW5lIEhBTkRMRV9UT19QWU5VTShoYW5kbGUpIFwKQEAgLTU3LDggKzU4LDYgQEAKIAogI2RlZmluZSBGX0hBTkRMRSBGX1BPSU5URVIKICNkZWZpbmUgRl9EV09SRCAiayIKLSNkZWZpbmUgRl9CT09MICJpIgotI2RlZmluZSBGX1VJTlQgIkkiCiAKICNkZWZpbmUgVF9IQU5ETEUgVF9QT0lOVEVSCiAKQEAgLTE0NiwxNyArMTQ1LDY4IEBACiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgX3dpbmFwaQorY2xhc3MgX3dpbmFwaS5PdmVybGFwcGVkICJPdmVybGFwcGVkT2JqZWN0ICoiICImT3ZlcmxhcHBlZFR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1jMTNkM2Y1ZmQxZGFiYjg0XSovCisKKy8qW3B5dGhvbiBpbnB1dF0KK2RlZiBjcmVhdGVfY29udmVydGVyKHR5cGVfLCBmb3JtYXRfdW5pdCk6CisgICAgbmFtZSA9IHR5cGVfICsgJ19jb252ZXJ0ZXInCisgICAgIyByZWdpc3RlcmVkIHVwb24gY3JlYXRpb24gYnkgQ0NvbnZlcnRlcidzIG1ldGFjbGFzcworICAgIHR5cGUobmFtZSwgKENDb252ZXJ0ZXIsKSwgeyd0eXBlJzogdHlwZV8sICdmb3JtYXRfdW5pdCc6IGZvcm1hdF91bml0fSkKKworIyBmb3JtYXQgdW5pdCBkaWZmZXJzIGJldHdlZW4gcGxhdGZvcm1zIGZvciB0aGVzZQorY3JlYXRlX2NvbnZlcnRlcignSEFORExFJywgJyIgRl9IQU5ETEUgIicpCitjcmVhdGVfY29udmVydGVyKCdITU9EVUxFJywgJyIgRl9IQU5ETEUgIicpCitjcmVhdGVfY29udmVydGVyKCdMUFNFQ1VSSVRZX0FUVFJJQlVURVMnLCAnIiBGX1BPSU5URVIgIicpCisKK2NyZWF0ZV9jb252ZXJ0ZXIoJ0JPT0wnLCAnaScpICMgRl9CT09MIHVzZWQgcHJldmlvdXNseSAoYWx3YXlzICdpJykKK2NyZWF0ZV9jb252ZXJ0ZXIoJ0RXT1JEJywgJ2snKSAjIEZfRFdPUkQgaXMgYWx3YXlzICJrIiAod2hpY2ggaXMgbXVjaCBzaG9ydGVyKQorY3JlYXRlX2NvbnZlcnRlcignTFBDVFNUUicsICdzJykKK2NyZWF0ZV9jb252ZXJ0ZXIoJ0xQV1NUUicsICd1JykKK2NyZWF0ZV9jb252ZXJ0ZXIoJ1VJTlQnLCAnSScpICMgRl9VSU5UIHVzZWQgcHJldmlvdXNseSAoYWx3YXlzICdJJykKKworY2xhc3MgSEFORExFX3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdIQU5ETEUnCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmKCJfcmV0dXJuX3ZhbHVlID09IElOVkFMSURfSEFORExFX1ZBTFVFIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAnaWYgKF9yZXR1cm5fdmFsdWUgPT0gTlVMTClcbiAgICBQeV9SRVRVUk5fTk9ORTtcbicpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IEhBTkRMRV9UT19QWU5VTShfcmV0dXJuX3ZhbHVlKTtcbicpCisKK2NsYXNzIERXT1JEX3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdEV09SRCcKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gRFdPUkRfTUFYIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiayIsIF9yZXR1cm5fdmFsdWUpO1xuJykKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTM3NDA3Njk3OTU5NmViYmFdKi8KKworI2luY2x1ZGUgImNsaW5pYy9fd2luYXBpLmMuaCIKKworLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5PdmVybGFwcGVkLkdldE92ZXJsYXBwZWRSZXN1bHQKKworICAgIHdhaXQ6IGJvb2wKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1vdmVybGFwcGVkX0dldE92ZXJsYXBwZWRSZXN1bHQoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKndhaXRvYmopCitfd2luYXBpX092ZXJsYXBwZWRfR2V0T3ZlcmxhcHBlZFJlc3VsdF9pbXBsKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIGludCB3YWl0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJkZDBjMWVkNjUxOGNkMDMgaW5wdXQ9MTk0NTA1ZWU4ZTBlMzU2NV0qLwogewotICAgIGludCB3YWl0OwogICAgIEJPT0wgcmVzOwogICAgIERXT1JEIHRyYW5zZmVycmVkID0gMDsKICAgICBEV09SRCBlcnI7CiAKLSAgICB3YWl0ID0gUHlPYmplY3RfSXNUcnVlKHdhaXRvYmopOwotICAgIGlmICh3YWl0IDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJnRyYW5zZmVycmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCAhPSAwKTsKQEAgLTE4NSw4ICsyMzUsMTMgQEAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiSUkiLCAodW5zaWduZWQpIHRyYW5zZmVycmVkLCAodW5zaWduZWQpIGVycik7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuT3ZlcmxhcHBlZC5nZXRidWZmZXIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW92ZXJsYXBwZWRfZ2V0YnVmZmVyKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCitfd2luYXBpX092ZXJsYXBwZWRfZ2V0YnVmZmVyX2ltcGwoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05NWEzZWNlZWZhZTBmNzQ4IGlucHV0PTM0N2ZjZmQ1NmI0Y2VhYmRdKi8KIHsKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGlmICghc2VsZi0+Y29tcGxldGVkKSB7CkBAIC0yMDAsOCArMjU1LDEzIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5PdmVybGFwcGVkLmNhbmNlbAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotb3ZlcmxhcHBlZF9jYW5jZWwoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK193aW5hcGlfT3ZlcmxhcHBlZF9jYW5jZWxfaW1wbChPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZjYjlhYjVkZjRlYmRhZTUgaW5wdXQ9Y2JmM2RhMTQyMjkwMDM5Zl0qLwogewogICAgIEJPT0wgcmVzID0gVFJVRTsKIApAQCAtMjIyLDEwICsyODIsOSBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgb3ZlcmxhcHBlZF9tZXRob2RzW10gPSB7Ci0gICAgeyJHZXRPdmVybGFwcGVkUmVzdWx0IiwgKFB5Q0Z1bmN0aW9uKSBvdmVybGFwcGVkX0dldE92ZXJsYXBwZWRSZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9PLCBOVUxMfSwKLSAgICB7ImdldGJ1ZmZlciIsIChQeUNGdW5jdGlvbikgb3ZlcmxhcHBlZF9nZXRidWZmZXIsIE1FVEhfTk9BUkdTLCBOVUxMfSwKLSAgICB7ImNhbmNlbCIsIChQeUNGdW5jdGlvbikgb3ZlcmxhcHBlZF9jYW5jZWwsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICBfV0lOQVBJX09WRVJMQVBQRURfR0VUT1ZFUkxBUFBFRFJFU1VMVF9NRVRIT0RERUYKKyAgICBfV0lOQVBJX09WRVJMQVBQRURfR0VUQlVGRkVSX01FVEhPRERFRgorICAgIF9XSU5BUElfT1ZFUkxBUFBFRF9DQU5DRUxfTUVUSE9EREVGCiAgICAge05VTEx9CiB9OwogCkBAIC0yOTksMjIgKzM1OCwyMyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHdpbmRvd3MgQVBJIGZ1bmN0aW9ucyAqLwogCi1QeURvY19TVFJWQVIoQ2xvc2VIYW5kbGVfZG9jLAotIkNsb3NlSGFuZGxlKGhhbmRsZSkgLT4gTm9uZVxuXAotXG5cCi1DbG9zZSBoYW5kbGUuIik7CisvKltjbGluaWMgaW5wdXRdCitfd2luYXBpLkNsb3NlSGFuZGxlCisKKyAgICBoYW5kbGU6IEhBTkRMRQorICAgIC8KKworQ2xvc2UgaGFuZGxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0Nsb3NlSGFuZGxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK193aW5hcGlfQ2xvc2VIYW5kbGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgaGFuZGxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdhZDM3MzQ1ZjA3YmQ3ODIgaW5wdXQ9N2YwZTRhYzM2ZTAzNTJiOF0qLwogewotICAgIEhBTkRMRSBoT2JqZWN0OwogICAgIEJPT0wgc3VjY2VzczsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiOkNsb3NlSGFuZGxlIiwgJmhPYmplY3QpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzdWNjZXNzID0gQ2xvc2VIYW5kbGUoaE9iamVjdCk7CisgICAgc3VjY2VzcyA9IENsb3NlSGFuZGxlKGhhbmRsZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghc3VjY2VzcykKQEAgLTMyMywyOCArMzgzLDI5IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuQ29ubmVjdE5hbWVkUGlwZQorCisgICAgaGFuZGxlOiBIQU5ETEUKKyAgICBvdmVybGFwcGVkIGFzIHVzZV9vdmVybGFwcGVkOiBpbnQoY19kZWZhdWx0PScwJykgPSBGYWxzZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0Nvbm5lY3ROYW1lZFBpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK193aW5hcGlfQ29ubmVjdE5hbWVkUGlwZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNlX292ZXJsYXBwZWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzM1YTBlNzA4NjgwMDY3MSBpbnB1dD1lZGM4M2RhMDA3ZWJmM2JlXSovCiB7Ci0gICAgSEFORExFIGhOYW1lZFBpcGU7Ci0gICAgaW50IHVzZV9vdmVybGFwcGVkID0gMDsKICAgICBCT09MIHN1Y2Nlc3M7CiAgICAgT3ZlcmxhcHBlZE9iamVjdCAqb3ZlcmxhcHBlZCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJoYW5kbGUiLCAib3ZlcmxhcHBlZCIsIE5VTEx9OwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGX0hBTkRMRSAifCIgRl9CT09MLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhOYW1lZFBpcGUsICZ1c2Vfb3ZlcmxhcHBlZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHVzZV9vdmVybGFwcGVkKSB7Ci0gICAgICAgIG92ZXJsYXBwZWQgPSBuZXdfb3ZlcmxhcHBlZChoTmFtZWRQaXBlKTsKKyAgICAgICAgb3ZlcmxhcHBlZCA9IG5ld19vdmVybGFwcGVkKGhhbmRsZSk7CiAgICAgICAgIGlmICghb3ZlcmxhcHBlZCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzdWNjZXNzID0gQ29ubmVjdE5hbWVkUGlwZShoTmFtZWRQaXBlLAorICAgIHN1Y2Nlc3MgPSBDb25uZWN0TmFtZWRQaXBlKGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVybGFwcGVkID8gJm92ZXJsYXBwZWQtPm92ZXJsYXBwZWQgOiBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCkBAIC0zNjgsOTQgKzQyOSwyMzcgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXdpbmFwaV9DcmVhdGVGaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuQ3JlYXRlRmlsZSAtPiBIQU5ETEUKKworICAgIGZpbGVfbmFtZTogTFBDVFNUUgorICAgIGRlc2lyZWRfYWNjZXNzOiBEV09SRAorICAgIHNoYXJlX21vZGU6IERXT1JECisgICAgc2VjdXJpdHlfYXR0cmlidXRlczogTFBTRUNVUklUWV9BVFRSSUJVVEVTCisgICAgY3JlYXRpb25fZGlzcG9zaXRpb246IERXT1JECisgICAgZmxhZ3NfYW5kX2F0dHJpYnV0ZXM6IERXT1JECisgICAgdGVtcGxhdGVfZmlsZTogSEFORExFCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgSEFORExFCitfd2luYXBpX0NyZWF0ZUZpbGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBMUENUU1RSIGZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGRlc2lyZWRfYWNjZXNzLCBEV09SRCBzaGFyZV9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgTFBTRUNVUklUWV9BVFRSSUJVVEVTIHNlY3VyaXR5X2F0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBjcmVhdGlvbl9kaXNwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGZsYWdzX2FuZF9hdHRyaWJ1dGVzLCBIQU5ETEUgdGVtcGxhdGVfZmlsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MTdkZGNlYmZjNWEzZDUzIGlucHV0PTY0MjNjM2U0MDM3MmRiZDVdKi8KIHsKLSAgICBMUENUU1RSIGxwRmlsZU5hbWU7Ci0gICAgRFdPUkQgZHdEZXNpcmVkQWNjZXNzOwotICAgIERXT1JEIGR3U2hhcmVNb2RlOwotICAgIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscFNlY3VyaXR5QXR0cmlidXRlczsKLSAgICBEV09SRCBkd0NyZWF0aW9uRGlzcG9zaXRpb247Ci0gICAgRFdPUkQgZHdGbGFnc0FuZEF0dHJpYnV0ZXM7Ci0gICAgSEFORExFIGhUZW1wbGF0ZUZpbGU7CiAgICAgSEFORExFIGhhbmRsZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIgRl9EV09SRCBGX0RXT1JEIEZfUE9JTlRFUgotICAgICAgICAgICAgICAgICAgICAgICAgICBGX0RXT1JEIEZfRFdPUkQgRl9IQU5ETEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZscEZpbGVOYW1lLCAmZHdEZXNpcmVkQWNjZXNzLCAmZHdTaGFyZU1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZscFNlY3VyaXR5QXR0cmlidXRlcywgJmR3Q3JlYXRpb25EaXNwb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmR3RmxhZ3NBbmRBdHRyaWJ1dGVzLCAmaFRlbXBsYXRlRmlsZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGhhbmRsZSA9IENyZWF0ZUZpbGUobHBGaWxlTmFtZSwgZHdEZXNpcmVkQWNjZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgZHdTaGFyZU1vZGUsIGxwU2VjdXJpdHlBdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgZHdDcmVhdGlvbkRpc3Bvc2l0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgZHdGbGFnc0FuZEF0dHJpYnV0ZXMsIGhUZW1wbGF0ZUZpbGUpOworICAgIGhhbmRsZSA9IENyZWF0ZUZpbGUoZmlsZV9uYW1lLCBkZXNpcmVkX2FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlX21vZGUsIHNlY3VyaXR5X2F0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbl9kaXNwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJ1dGVzLCB0ZW1wbGF0ZV9maWxlKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKIAotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCBoYW5kbGUpOworICAgIHJldHVybiBoYW5kbGU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuQ3JlYXRlSnVuY3Rpb24KKworICAgIHNyY19wYXRoOiBMUFdTVFIKKyAgICBkc3RfcGF0aDogTFBXU1RSCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0NyZWF0ZU5hbWVkUGlwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfd2luYXBpX0NyZWF0ZUp1bmN0aW9uX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgTFBXU1RSIHNyY19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQV1NUUiBkc3RfcGF0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NmI3ZWI3NDZlMWRmYTI1IGlucHV0PThjZDFmOTk2NGI2ZTNkMzZdKi8KIHsKLSAgICBMUENUU1RSIGxwTmFtZTsKLSAgICBEV09SRCBkd09wZW5Nb2RlOwotICAgIERXT1JEIGR3UGlwZU1vZGU7Ci0gICAgRFdPUkQgbk1heEluc3RhbmNlczsKLSAgICBEV09SRCBuT3V0QnVmZmVyU2l6ZTsKLSAgICBEV09SRCBuSW5CdWZmZXJTaXplOwotICAgIERXT1JEIG5EZWZhdWx0VGltZU91dDsKLSAgICBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgbHBTZWN1cml0eUF0dHJpYnV0ZXM7CisgICAgLyogUHJpdmlsZWdlIGFkanVzdG1lbnQgKi8KKyAgICBIQU5ETEUgdG9rZW4gPSBOVUxMOworICAgIFRPS0VOX1BSSVZJTEVHRVMgdHA7CisKKyAgICAvKiBSZXBhcnNlIGRhdGEgYnVmZmVyICovCisgICAgY29uc3QgVVNIT1JUIHByZWZpeF9sZW4gPSA0OworICAgIFVTSE9SVCBwcmludF9sZW4gPSAwOworICAgIFVTSE9SVCByZGJfc2l6ZSA9IDA7CisgICAgUFJFUEFSU0VfREFUQV9CVUZGRVIgcmRiID0gTlVMTDsKKworICAgIC8qIEp1bmN0aW9uIHBvaW50IGNyZWF0aW9uICovCisgICAgSEFORExFIGp1bmN0aW9uID0gTlVMTDsKKyAgICBEV09SRCByZXQgPSAwOworCisgICAgaWYgKHNyY19wYXRoID09IE5VTEwgfHwgZHN0X3BhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKTsKKworICAgIGlmICh3Y3NuY21wKHNyY19wYXRoLCBMIlxcPz9cXCIsIHByZWZpeF9sZW4pID09IDApCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7CisKKyAgICAvKiBBZGp1c3QgcHJpdmlsZWdlcyB0byBhbGxvdyByZXdyaXRpbmcgZGlyZWN0b3J5IGVudHJ5IGFzIGEKKyAgICAgICBqdW5jdGlvbiBwb2ludC4gKi8KKyAgICBpZiAoIU9wZW5Qcm9jZXNzVG9rZW4oR2V0Q3VycmVudFByb2Nlc3MoKSwgVE9LRU5fQURKVVNUX1BSSVZJTEVHRVMsICZ0b2tlbikpCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGlmICghTG9va3VwUHJpdmlsZWdlVmFsdWUoTlVMTCwgU0VfUkVTVE9SRV9OQU1FLCAmdHAuUHJpdmlsZWdlc1swXS5MdWlkKSkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgdHAuUHJpdmlsZWdlQ291bnQgPSAxOworICAgIHRwLlByaXZpbGVnZXNbMF0uQXR0cmlidXRlcyA9IFNFX1BSSVZJTEVHRV9FTkFCTEVEOworICAgIGlmICghQWRqdXN0VG9rZW5Qcml2aWxlZ2VzKHRva2VuLCBGQUxTRSwgJnRwLCBzaXplb2YoVE9LRU5fUFJJVklMRUdFUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCkpCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGlmIChHZXRGaWxlQXR0cmlidXRlc1coc3JjX3BhdGgpID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICAvKiBTdG9yZSB0aGUgYWJzb2x1dGUgbGluayB0YXJnZXQgcGF0aCBsZW5ndGggaW4gcHJpbnRfbGVuLiAqLworICAgIHByaW50X2xlbiA9IChVU0hPUlQpR2V0RnVsbFBhdGhOYW1lVyhzcmNfcGF0aCwgMCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKHByaW50X2xlbiA9PSAwKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICAvKiBOVUwgdGVybWluYXRvciBzaG91bGQgbm90IGJlIHBhcnQgb2YgcHJpbnRfbGVuLiAqLworICAgIC0tcHJpbnRfbGVuOworCisgICAgLyogUkVQQVJTRV9EQVRBX0JVRkZFUiB1c2FnZSBpcyBoZWF2aWx5IHVuZGVyLWRvY3VtZW50ZWQsIGVzcGVjaWFsbHkgZm9yCisgICAgICAganVuY3Rpb24gcG9pbnRzLiBIZXJlJ3Mgd2hhdCBJJ3ZlIGxlYXJuZWQgYWxvbmcgdGhlIHdheToKKyAgICAgICAtIEEganVuY3Rpb24gcG9pbnQgaGFzIHR3byBjb21wb25lbnRzOiBhIHByaW50IG5hbWUgYW5kIGEgc3Vic3RpdHV0ZQorICAgICAgICAgbmFtZS4gVGhleSBib3RoIGRlc2NyaWJlIHRoZSBsaW5rIHRhcmdldCwgYnV0IHRoZSBzdWJzdGl0dXRlIG5hbWUgaXMKKyAgICAgICAgIHRoZSBwaHlzaWNhbCB0YXJnZXQgYW5kIHRoZSBwcmludCBuYW1lIGlzIHNob3duIGluIGRpcmVjdG9yeSBsaXN0aW5ncy4KKyAgICAgICAtIFRoZSBwcmludCBuYW1lIG11c3QgYmUgYSBuYXRpdmUgbmFtZSwgcHJlZml4ZWQgd2l0aCAiXD8/XCIuCisgICAgICAgLSBCb3RoIG5hbWVzIGFyZSBzdG9yZWQgYWZ0ZXIgZWFjaCBvdGhlciBpbiB0aGUgc2FtZSBidWZmZXIgKHRoZQorICAgICAgICAgUGF0aEJ1ZmZlcikgYW5kIGJvdGggbXVzdCBiZSBOVUwtdGVybWluYXRlZC4KKyAgICAgICAtIFRoZXJlIGFyZSBmb3VyIG1lbWJlcnMgZGVmaW5pbmcgdGhlaXIgcmVzcGVjdGl2ZSBvZmZzZXQgYW5kIGxlbmd0aAorICAgICAgICAgaW5zaWRlIFBhdGhCdWZmZXI6IFN1YnN0aXR1dGVOYW1lT2Zmc2V0LCBTdWJzdGl0dXRlTmFtZUxlbmd0aCwKKyAgICAgICAgIFByaW50TmFtZU9mZnNldCBhbmQgUHJpbnROYW1lTGVuZ3RoLgorICAgICAgIC0gVGhlIHRvdGFsIHNpemUgd2UgbmVlZCB0byBhbGxvY2F0ZSBmb3IgdGhlIFJFUEFSU0VfREFUQV9CVUZGRVIsIHRodXMsCisgICAgICAgICBpcyB0aGUgc3VtIG9mOgorICAgICAgICAgLSB0aGUgZml4ZWQgaGVhZGVyIHNpemUgKFJFUEFSU0VfREFUQV9CVUZGRVJfSEVBREVSX1NJWkUpCisgICAgICAgICAtIHRoZSBzaXplIG9mIHRoZSBNb3VudFBvaW50UmVwYXJzZUJ1ZmZlciBtZW1iZXIgd2l0aG91dCB0aGUgUGF0aEJ1ZmZlcgorICAgICAgICAgLSB0aGUgc2l6ZSBvZiB0aGUgcHJlZml4ICgiXD8/XCIpIGluIGJ5dGVzCisgICAgICAgICAtIHRoZSBzaXplIG9mIHRoZSBwcmludCBuYW1lIGluIGJ5dGVzCisgICAgICAgICAtIHRoZSBzaXplIG9mIHRoZSBzdWJzdGl0dXRlIG5hbWUgaW4gYnl0ZXMKKyAgICAgICAgIC0gdGhlIHNpemUgb2YgdHdvIE5VTCB0ZXJtaW5hdG9ycyBpbiBieXRlcyAqLworICAgIHJkYl9zaXplID0gUkVQQVJTRV9EQVRBX0JVRkZFUl9IRUFERVJfU0laRSArCisgICAgICAgIHNpemVvZihyZGItPk1vdW50UG9pbnRSZXBhcnNlQnVmZmVyKSAtCisgICAgICAgIHNpemVvZihyZGItPk1vdW50UG9pbnRSZXBhcnNlQnVmZmVyLlBhdGhCdWZmZXIpICsKKyAgICAgICAgLyogVHdvICsxJ3MgZm9yIE5VTCB0ZXJtaW5hdG9ycy4gKi8KKyAgICAgICAgKHByZWZpeF9sZW4gKyBwcmludF9sZW4gKyAxICsgcHJpbnRfbGVuICsgMSkgKiBzaXplb2YoV0NIQVIpOworICAgIHJkYiA9IChQUkVQQVJTRV9EQVRBX0JVRkZFUilQeU1lbV9SYXdNYWxsb2MocmRiX3NpemUpOworICAgIGlmIChyZGIgPT0gTlVMTCkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgbWVtc2V0KHJkYiwgMCwgcmRiX3NpemUpOworICAgIHJkYi0+UmVwYXJzZVRhZyA9IElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UOworICAgIHJkYi0+UmVwYXJzZURhdGFMZW5ndGggPSByZGJfc2l6ZSAtIFJFUEFSU0VfREFUQV9CVUZGRVJfSEVBREVSX1NJWkU7CisgICAgcmRiLT5Nb3VudFBvaW50UmVwYXJzZUJ1ZmZlci5TdWJzdGl0dXRlTmFtZU9mZnNldCA9IDA7CisgICAgcmRiLT5Nb3VudFBvaW50UmVwYXJzZUJ1ZmZlci5TdWJzdGl0dXRlTmFtZUxlbmd0aCA9CisgICAgICAgIChwcmVmaXhfbGVuICsgcHJpbnRfbGVuKSAqIHNpemVvZihXQ0hBUik7CisgICAgcmRiLT5Nb3VudFBvaW50UmVwYXJzZUJ1ZmZlci5QcmludE5hbWVPZmZzZXQgPQorICAgICAgICByZGItPk1vdW50UG9pbnRSZXBhcnNlQnVmZmVyLlN1YnN0aXR1dGVOYW1lTGVuZ3RoICsgc2l6ZW9mKFdDSEFSKTsKKyAgICByZGItPk1vdW50UG9pbnRSZXBhcnNlQnVmZmVyLlByaW50TmFtZUxlbmd0aCA9IHByaW50X2xlbiAqIHNpemVvZihXQ0hBUik7CisKKyAgICAvKiBTdG9yZSB0aGUgZnVsbCBuYXRpdmUgcGF0aCBvZiBsaW5rIHRhcmdldCBhdCB0aGUgc3Vic3RpdHV0ZSBuYW1lCisgICAgICAgb2Zmc2V0ICgwKS4gKi8KKyAgICB3Y3NjcHkocmRiLT5Nb3VudFBvaW50UmVwYXJzZUJ1ZmZlci5QYXRoQnVmZmVyLCBMIlxcPz9cXCIpOworICAgIGlmIChHZXRGdWxsUGF0aE5hbWVXKHNyY19wYXRoLCBwcmludF9sZW4gKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJkYi0+TW91bnRQb2ludFJlcGFyc2VCdWZmZXIuUGF0aEJ1ZmZlciArIHByZWZpeF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkgPT0gMCkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgLyogQ29weSBldmVyeXRoaW5nIGJ1dCB0aGUgbmF0aXZlIHByZWZpeCB0byB0aGUgcHJpbnQgbmFtZSBvZmZzZXQuICovCisgICAgd2NzY3B5KHJkYi0+TW91bnRQb2ludFJlcGFyc2VCdWZmZXIuUGF0aEJ1ZmZlciArCisgICAgICAgICAgICAgcHJlZml4X2xlbiArIHByaW50X2xlbiArIDEsCisgICAgICAgICAgICAgcmRiLT5Nb3VudFBvaW50UmVwYXJzZUJ1ZmZlci5QYXRoQnVmZmVyICsgcHJlZml4X2xlbik7CisKKyAgICAvKiBDcmVhdGUgYSBkaXJlY3RvcnkgZm9yIHRoZSBqdW5jdGlvbiBwb2ludC4gKi8KKyAgICBpZiAoIUNyZWF0ZURpcmVjdG9yeVcoZHN0X3BhdGgsIE5VTEwpKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBqdW5jdGlvbiA9IENyZWF0ZUZpbGVXKGRzdF9wYXRoLCBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLCAwLCBOVUxMLAorICAgICAgICBPUEVOX0VYSVNUSU5HLAorICAgICAgICBGSUxFX0ZMQUdfT1BFTl9SRVBBUlNFX1BPSU5UIHwgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5VTEwpOworICAgIGlmIChqdW5jdGlvbiA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgLyogTWFrZSB0aGUgZGlyZWN0b3J5IGVudHJ5IGEganVuY3Rpb24gcG9pbnQuICovCisgICAgaWYgKCFEZXZpY2VJb0NvbnRyb2woanVuY3Rpb24sIEZTQ1RMX1NFVF9SRVBBUlNFX1BPSU5ULCByZGIsIHJkYl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsICZyZXQsIE5VTEwpKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKK2NsZWFudXA6CisgICAgcmV0ID0gR2V0TGFzdEVycm9yKCk7CisKKyAgICBDbG9zZUhhbmRsZSh0b2tlbik7CisgICAgQ2xvc2VIYW5kbGUoanVuY3Rpb24pOworICAgIFB5TWVtX1Jhd0ZyZWUocmRiKTsKKworICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKHJldCk7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5DcmVhdGVOYW1lZFBpcGUgLT4gSEFORExFCisKKyAgICBuYW1lOiBMUENUU1RSCisgICAgb3Blbl9tb2RlOiBEV09SRAorICAgIHBpcGVfbW9kZTogRFdPUkQKKyAgICBtYXhfaW5zdGFuY2VzOiBEV09SRAorICAgIG91dF9idWZmZXJfc2l6ZTogRFdPUkQKKyAgICBpbl9idWZmZXJfc2l6ZTogRFdPUkQKKyAgICBkZWZhdWx0X3RpbWVvdXQ6IERXT1JECisgICAgc2VjdXJpdHlfYXR0cmlidXRlczogTFBTRUNVUklUWV9BVFRSSUJVVEVTCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgSEFORExFCitfd2luYXBpX0NyZWF0ZU5hbWVkUGlwZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIExQQ1RTVFIgbmFtZSwgRFdPUkQgb3Blbl9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBwaXBlX21vZGUsIERXT1JEIG1heF9pbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIG91dF9idWZmZXJfc2l6ZSwgRFdPUkQgaW5fYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGRlZmF1bHRfdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBTRUNVUklUWV9BVFRSSUJVVEVTIHNlY3VyaXR5X2F0dHJpYnV0ZXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODBmOGMwNzM0NmE5NGZiYyBpbnB1dD01YTczNTMwYjg0ZDhiYzM3XSovCit7CiAgICAgSEFORExFIGhhbmRsZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIgRl9EV09SRCBGX0RXT1JEIEZfRFdPUkQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRl9EV09SRCBGX0RXT1JEIEZfRFdPUkQgRl9QT0lOVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbHBOYW1lLCAmZHdPcGVuTW9kZSwgJmR3UGlwZU1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuTWF4SW5zdGFuY2VzLCAmbk91dEJ1ZmZlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuSW5CdWZmZXJTaXplLCAmbkRlZmF1bHRUaW1lT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbHBTZWN1cml0eUF0dHJpYnV0ZXMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBoYW5kbGUgPSBDcmVhdGVOYW1lZFBpcGUobHBOYW1lLCBkd09wZW5Nb2RlLCBkd1BpcGVNb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTWF4SW5zdGFuY2VzLCBuT3V0QnVmZmVyU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbkluQnVmZmVyU2l6ZSwgbkRlZmF1bHRUaW1lT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscFNlY3VyaXR5QXR0cmlidXRlcyk7CisgICAgaGFuZGxlID0gQ3JlYXRlTmFtZWRQaXBlKG5hbWUsIG9wZW5fbW9kZSwgcGlwZV9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfaW5zdGFuY2VzLCBvdXRfYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2J1ZmZlcl9zaXplLCBkZWZhdWx0X3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5X2F0dHJpYnV0ZXMpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIGhhbmRsZSk7CisgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotUHlEb2NfU1RSVkFSKENyZWF0ZVBpcGVfZG9jLAotIkNyZWF0ZVBpcGUocGlwZV9hdHRycywgc2l6ZSkgLT4gKHJlYWRfaGFuZGxlLCB3cml0ZV9oYW5kbGUpXG5cCi1cblwKLUNyZWF0ZSBhbiBhbm9ueW1vdXMgcGlwZSwgYW5kIHJldHVybiBoYW5kbGVzIHRvIHRoZSByZWFkIGFuZFxuXAotd3JpdGUgZW5kcyBvZiB0aGUgcGlwZS5cblwKLVxuXAotcGlwZV9hdHRycyBpcyBpZ25vcmVkIGludGVybmFsbHkgYW5kIGNhbiBiZSBOb25lLiIpOworLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5DcmVhdGVQaXBlCisKKyAgICBwaXBlX2F0dHJzOiBvYmplY3QKKyAgICAgICAgSWdub3JlZCBpbnRlcm5hbGx5LCBjYW4gYmUgTm9uZS4KKyAgICBzaXplOiBEV09SRAorICAgIC8KKworQ3JlYXRlIGFuIGFub255bW91cyBwaXBlLgorCitSZXR1cm5zIGEgMi10dXBsZSBvZiBoYW5kbGVzLCB0byB0aGUgcmVhZCBhbmQgd3JpdGUgZW5kcyBvZiB0aGUgcGlwZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdpbmFwaV9DcmVhdGVQaXBlKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK193aW5hcGlfQ3JlYXRlUGlwZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpwaXBlX2F0dHJzLCBEV09SRCBzaXplKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFjNDQxMWQ4Njk5ZjA5MjUgaW5wdXQ9YzRmMmNmYTU2ZWY2OGQ5MF0qLwogewogICAgIEhBTkRMRSByZWFkX3BpcGU7CiAgICAgSEFORExFIHdyaXRlX3BpcGU7CiAgICAgQk9PTCByZXN1bHQ7CiAKLSAgICBQeU9iamVjdCogcGlwZV9hdHRyaWJ1dGVzOyAvKiBpZ25vcmVkICovCi0gICAgRFdPUkQgc2l6ZTsKLQotICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iIEZfRFdPUkQgIjpDcmVhdGVQaXBlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaXBlX2F0dHJpYnV0ZXMsICZzaXplKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzdWx0ID0gQ3JlYXRlUGlwZSgmcmVhZF9waXBlLCAmd3JpdGVfcGlwZSwgTlVMTCwgc2l6ZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTU4NiwyMCArNzkwLDM2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihDcmVhdGVQcm9jZXNzX2RvYywKLSJDcmVhdGVQcm9jZXNzKGFwcF9uYW1lLCBjbWRfbGluZSwgcHJvY19hdHRycywgdGhyZWFkX2F0dHJzLFxuXAotICAgICAgICAgICAgICAgaW5oZXJpdCwgZmxhZ3MsIGVudl9tYXBwaW5nLCBjdXJkaXIsXG5cCi0gICAgICAgICAgICAgICBzdGFydHVwX2luZm8pIC0+IChwcm9jX2hhbmRsZSwgdGhyZWFkX2hhbmRsZSxcblwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgdGlkKVxuXAotXG5cCi1DcmVhdGUgYSBuZXcgcHJvY2VzcyBhbmQgaXRzIHByaW1hcnkgdGhyZWFkLiBUaGUgcmV0dXJuXG5cCi12YWx1ZSBpcyBhIHR1cGxlIG9mIHRoZSBwcm9jZXNzIGhhbmRsZSwgdGhyZWFkIGhhbmRsZSxcblwKLXByb2Nlc3MgSUQsIGFuZCB0aHJlYWQgSUQuXG5cCi1cblwKLXByb2NfYXR0cnMgYW5kIHRocmVhZF9hdHRycyBhcmUgaWdub3JlZCBpbnRlcm5hbGx5IGFuZCBjYW4gYmUgTm9uZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuQ3JlYXRlUHJvY2VzcworCisgICAgYXBwbGljYXRpb25fbmFtZTogUHlfVU5JQ09ERShhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KQorICAgIGNvbW1hbmRfbGluZTogUHlfVU5JQ09ERShhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KQorICAgIHByb2NfYXR0cnM6IG9iamVjdAorICAgICAgICBJZ25vcmVkIGludGVybmFsbHksIGNhbiBiZSBOb25lLgorICAgIHRocmVhZF9hdHRyczogb2JqZWN0CisgICAgICAgIElnbm9yZWQgaW50ZXJuYWxseSwgY2FuIGJlIE5vbmUuCisgICAgaW5oZXJpdF9oYW5kbGVzOiBCT09MCisgICAgY3JlYXRpb25fZmxhZ3M6IERXT1JECisgICAgZW52X21hcHBpbmc6IG9iamVjdAorICAgIGN1cnJlbnRfZGlyZWN0b3J5OiBQeV9VTklDT0RFKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pCisgICAgc3RhcnR1cF9pbmZvOiBvYmplY3QKKyAgICAvCisKK0NyZWF0ZSBhIG5ldyBwcm9jZXNzIGFuZCBpdHMgcHJpbWFyeSB0aHJlYWQuCisKK1RoZSByZXR1cm4gdmFsdWUgaXMgYSB0dXBsZSBvZiB0aGUgcHJvY2VzcyBoYW5kbGUsIHRocmVhZCBoYW5kbGUsCitwcm9jZXNzIElELCBhbmQgdGhyZWFkIElELgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0NyZWF0ZVByb2Nlc3MoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorX3dpbmFwaV9DcmVhdGVQcm9jZXNzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfVU5JQ09ERSAqYXBwbGljYXRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKmNvbW1hbmRfbGluZSwgUHlPYmplY3QgKnByb2NfYXR0cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGhyZWFkX2F0dHJzLCBCT09MIGluaGVyaXRfaGFuZGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGNyZWF0aW9uX2ZsYWdzLCBQeU9iamVjdCAqZW52X21hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFICpjdXJyZW50X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydHVwX2luZm8pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDY1MmEzM2FmZjRiMGFlMSBpbnB1dD00YTQzYjA1MDM4ZDYzOWJiXSovCiB7CiAgICAgQk9PTCByZXN1bHQ7CiAgICAgUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKQEAgLTYwNywyOCArODI3LDYgQEAKICAgICBQeU9iamVjdCogZW52aXJvbm1lbnQ7CiAgICAgd2NoYXJfdCAqd2Vudmlyb25tZW50OwogCi0gICAgd2NoYXJfdCogYXBwbGljYXRpb25fbmFtZTsKLSAgICB3Y2hhcl90KiBjb21tYW5kX2xpbmU7Ci0gICAgUHlPYmplY3QqIHByb2Nlc3NfYXR0cmlidXRlczsgLyogaWdub3JlZCAqLwotICAgIFB5T2JqZWN0KiB0aHJlYWRfYXR0cmlidXRlczsgLyogaWdub3JlZCAqLwotICAgIEJPT0wgaW5oZXJpdF9oYW5kbGVzOwotICAgIERXT1JEIGNyZWF0aW9uX2ZsYWdzOwotICAgIFB5T2JqZWN0KiBlbnZfbWFwcGluZzsKLSAgICB3Y2hhcl90KiBjdXJyZW50X2RpcmVjdG9yeTsKLSAgICBQeU9iamVjdCogc3RhcnR1cF9pbmZvOwotCi0gICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiWlpPTyIgRl9CT09MIEZfRFdPUkQgIk9aTzpDcmVhdGVQcm9jZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcHBsaWNhdGlvbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbW1hbmRfbGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9jZXNzX2F0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhyZWFkX2F0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5oZXJpdF9oYW5kbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNyZWF0aW9uX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudl9tYXBwaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1cnJlbnRfZGlyZWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0dXBfaW5mbykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgWmVyb01lbW9yeSgmc2ksIHNpemVvZihzaSkpOwogICAgIHNpLmNiID0gc2l6ZW9mKHNpKTsKIApAQCAtNjgyLDQxICs4ODAsMzUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBwaS5kd1RocmVhZElkKTsKIH0KIAotUHlEb2NfU1RSVkFSKER1cGxpY2F0ZUhhbmRsZV9kb2MsCi0iRHVwbGljYXRlSGFuZGxlKHNvdXJjZV9wcm9jX2hhbmRsZSwgc291cmNlX2hhbmRsZSxcblwKLSAgICAgICAgICAgICAgICAgdGFyZ2V0X3Byb2NfaGFuZGxlLCB0YXJnZXRfaGFuZGxlLCBhY2Nlc3MsXG5cCi0gICAgICAgICAgICAgICAgIGluaGVyaXRbLCBvcHRpb25zXSkgLT4gaGFuZGxlXG5cCi1cblwKLVJldHVybiBhIGR1cGxpY2F0ZSBoYW5kbGUgb2JqZWN0LlxuXAotXG5cCi1UaGUgZHVwbGljYXRlIGhhbmRsZSByZWZlcnMgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIHRoZSBvcmlnaW5hbFxuXAotaGFuZGxlLiBUaGVyZWZvcmUsIGFueSBjaGFuZ2VzIHRvIHRoZSBvYmplY3QgYXJlIHJlZmxlY3RlZFxuXAotdGhyb3VnaCBib3RoIGhhbmRsZXMuIik7CisvKltjbGluaWMgaW5wdXRdCitfd2luYXBpLkR1cGxpY2F0ZUhhbmRsZSAtPiBIQU5ETEUKIAotc3RhdGljIFB5T2JqZWN0ICoKLXdpbmFwaV9EdXBsaWNhdGVIYW5kbGUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorICAgIHNvdXJjZV9wcm9jZXNzX2hhbmRsZTogSEFORExFCisgICAgc291cmNlX2hhbmRsZTogSEFORExFCisgICAgdGFyZ2V0X3Byb2Nlc3NfaGFuZGxlOiBIQU5ETEUKKyAgICBkZXNpcmVkX2FjY2VzczogRFdPUkQKKyAgICBpbmhlcml0X2hhbmRsZTogQk9PTAorICAgIG9wdGlvbnM6IERXT1JEID0gMAorICAgIC8KKworUmV0dXJuIGEgZHVwbGljYXRlIGhhbmRsZSBvYmplY3QuCisKK1RoZSBkdXBsaWNhdGUgaGFuZGxlIHJlZmVycyB0byB0aGUgc2FtZSBvYmplY3QgYXMgdGhlIG9yaWdpbmFsCitoYW5kbGUuIFRoZXJlZm9yZSwgYW55IGNoYW5nZXMgdG8gdGhlIG9iamVjdCBhcmUgcmVmbGVjdGVkCit0aHJvdWdoIGJvdGggaGFuZGxlcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIEhBTkRMRQorX3dpbmFwaV9EdXBsaWNhdGVIYW5kbGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgc291cmNlX3Byb2Nlc3NfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEUgc291cmNlX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFIHRhcmdldF9wcm9jZXNzX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZGVzaXJlZF9hY2Nlc3MsIEJPT0wgaW5oZXJpdF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIG9wdGlvbnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YWQ5NzExMzk3YjVkY2Q0ZSBpbnB1dD1iOTMzZTNmMjM1NmE4YzEyXSovCiB7CiAgICAgSEFORExFIHRhcmdldF9oYW5kbGU7CiAgICAgQk9PTCByZXN1bHQ7CiAKLSAgICBIQU5ETEUgc291cmNlX3Byb2Nlc3NfaGFuZGxlOwotICAgIEhBTkRMRSBzb3VyY2VfaGFuZGxlOwotICAgIEhBTkRMRSB0YXJnZXRfcHJvY2Vzc19oYW5kbGU7Ci0gICAgRFdPUkQgZGVzaXJlZF9hY2Nlc3M7Ci0gICAgQk9PTCBpbmhlcml0X2hhbmRsZTsKLSAgICBEV09SRCBvcHRpb25zID0gMDsKLQotICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZfSEFORExFIEZfSEFORExFIEZfSEFORExFIEZfRFdPUkQgRl9CT09MIEZfRFdPUkQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICI6RHVwbGljYXRlSGFuZGxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2VfcHJvY2Vzc19oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmc291cmNlX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YXJnZXRfcHJvY2Vzc19oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVzaXJlZF9hY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5oZXJpdF9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9ucykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlc3VsdCA9IER1cGxpY2F0ZUhhbmRsZSgKICAgICAgICAgc291cmNlX3Byb2Nlc3NfaGFuZGxlLApAQCAtNzI5LDk4ICs5MjEsMTExIEBACiAgICAgKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgaWYgKCEgcmVzdWx0KQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIGlmICghIHJlc3VsdCkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICB9CiAKLSAgICByZXR1cm4gSEFORExFX1RPX1BZTlVNKHRhcmdldF9oYW5kbGUpOworICAgIHJldHVybiB0YXJnZXRfaGFuZGxlOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfd2luYXBpLkV4aXRQcm9jZXNzCisKKyAgICBFeGl0Q29kZTogVUlOVAorICAgIC8KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0V4aXRQcm9jZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK193aW5hcGlfRXhpdFByb2Nlc3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBVSU5UIEV4aXRDb2RlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWEzODdkZWI2NTExNzUzMDEgaW5wdXQ9NGYwNTQ2NmE5NDA2YzU1OF0qLwogewotICAgIFVJTlQgdUV4aXRDb2RlOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfVUlOVCwgJnVFeGl0Q29kZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgI2lmIGRlZmluZWQoUHlfREVCVUcpCiAgICAgICAgIFNldEVycm9yTW9kZShTRU1fRkFJTENSSVRJQ0FMRVJST1JTfFNFTV9OT0FMSUdOTUVOVEZBVUxURVhDRVBUfAogICAgICAgICAgICAgICAgICAgICAgU0VNX05PR1BGQVVMVEVSUk9SQk9YfFNFTV9OT09QRU5GSUxFRVJST1JCT1gpOwogICAgICAgICBfQ3J0U2V0UmVwb3J0TW9kZShfQ1JUX0FTU0VSVCwgX0NSVERCR19NT0RFX0RFQlVHKTsKICAgICAjZW5kaWYKIAotICAgIEV4aXRQcm9jZXNzKHVFeGl0Q29kZSk7CisgICAgRXhpdFByb2Nlc3MoRXhpdENvZGUpOwogCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihHZXRDdXJyZW50UHJvY2Vzc19kb2MsCi0iR2V0Q3VycmVudFByb2Nlc3MoKSAtPiBoYW5kbGVcblwKLVxuXAotUmV0dXJuIGEgaGFuZGxlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MgLT4gSEFORExFCiAKLXN0YXRpYyBQeU9iamVjdCAqCi13aW5hcGlfR2V0Q3VycmVudFByb2Nlc3MoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorUmV0dXJuIGEgaGFuZGxlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIEhBTkRMRQorX3dpbmFwaV9HZXRDdXJyZW50UHJvY2Vzc19pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGRlYjRkZDJmZmFkZjM0NCBpbnB1dD1iMjEzNDAzZmQ0Yjk2YjQxXSovCiB7Ci0gICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOkdldEN1cnJlbnRQcm9jZXNzIikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dXJuIEhBTkRMRV9UT19QWU5VTShHZXRDdXJyZW50UHJvY2VzcygpKTsKKyAgICByZXR1cm4gR2V0Q3VycmVudFByb2Nlc3MoKTsKIH0KIAotUHlEb2NfU1RSVkFSKEdldEV4aXRDb2RlUHJvY2Vzc19kb2MsCi0iR2V0RXhpdENvZGVQcm9jZXNzKGhhbmRsZSkgLT4gRXhpdCBjb2RlXG5cCi1cblwKLVJldHVybiB0aGUgdGVybWluYXRpb24gc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgcHJvY2Vzcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuR2V0RXhpdENvZGVQcm9jZXNzIC0+IERXT1JECiAKLXN0YXRpYyBQeU9iamVjdCAqCi13aW5hcGlfR2V0RXhpdENvZGVQcm9jZXNzKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKKyAgICBwcm9jZXNzOiBIQU5ETEUKKyAgICAvCisKK1JldHVybiB0aGUgdGVybWluYXRpb24gc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIERXT1JECitfd2luYXBpX0dldEV4aXRDb2RlUHJvY2Vzc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBwcm9jZXNzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI0NjIwYmRmMmJjY2YzNmIgaW5wdXQ9NjFiNmJmYzdkYzJlZTM3NF0qLwogewogICAgIERXT1JEIGV4aXRfY29kZTsKICAgICBCT09MIHJlc3VsdDsKIAotICAgIEhBTkRMRSBwcm9jZXNzOwotICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgIjpHZXRFeGl0Q29kZVByb2Nlc3MiLCAmcHJvY2VzcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgcmVzdWx0ID0gR2V0RXhpdENvZGVQcm9jZXNzKHByb2Nlc3MsICZleGl0X2NvZGUpOwogCi0gICAgaWYgKCEgcmVzdWx0KQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIGlmICghIHJlc3VsdCkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIGV4aXRfY29kZSA9IERXT1JEX01BWDsKKyAgICB9CiAKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoZXhpdF9jb2RlKTsKKyAgICByZXR1cm4gZXhpdF9jb2RlOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0dldExhc3RFcnJvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitfd2luYXBpLkdldExhc3RFcnJvciAtPiBEV09SRAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgRFdPUkQKK193aW5hcGlfR2V0TGFzdEVycm9yX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04NTg1YjgyN2NiMWE5MmM1IGlucHV0PTYyZDQ3ZmI5YmNlMDM4YmFdKi8KIHsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0RXT1JELCBHZXRMYXN0RXJyb3IoKSk7CisgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOwogfQogCi1QeURvY19TVFJWQVIoR2V0TW9kdWxlRmlsZU5hbWVfZG9jLAotIkdldE1vZHVsZUZpbGVOYW1lKG1vZHVsZSkgLT4gcGF0aFxuXAotXG5cCi1SZXR1cm4gdGhlIGZ1bGx5LXF1YWxpZmllZCBwYXRoIGZvciB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zXG5cCi10aGUgc3BlY2lmaWVkIG1vZHVsZS4gVGhlIG1vZHVsZSBtdXN0IGhhdmUgYmVlbiBsb2FkZWQgYnkgdGhlXG5cCi1jdXJyZW50IHByb2Nlc3MuXG5cCi1cblwKLVRoZSBtb2R1bGUgcGFyYW1ldGVyIHNob3VsZCBiZSBhIGhhbmRsZSB0byB0aGUgbG9hZGVkIG1vZHVsZVxuXAotd2hvc2UgcGF0aCBpcyBiZWluZyByZXF1ZXN0ZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIDAsIFxuXAotR2V0TW9kdWxlRmlsZU5hbWUgcmV0cmlldmVzIHRoZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIGZpbGVcblwKLW9mIHRoZSBjdXJyZW50IHByb2Nlc3MuIik7CisvKltjbGluaWMgaW5wdXRdCitfd2luYXBpLkdldE1vZHVsZUZpbGVOYW1lCisKKyAgICBtb2R1bGVfaGFuZGxlOiBITU9EVUxFCisgICAgLworCitSZXR1cm4gdGhlIGZ1bGx5LXF1YWxpZmllZCBwYXRoIGZvciB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIG1vZHVsZS4KKworVGhlIG1vZHVsZSBtdXN0IGhhdmUgYmVlbiBsb2FkZWQgYnkgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKworVGhlIG1vZHVsZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgaGFuZGxlIHRvIHRoZSBsb2FkZWQgbW9kdWxlCit3aG9zZSBwYXRoIGlzIGJlaW5nIHJlcXVlc3RlZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgMCwKK0dldE1vZHVsZUZpbGVOYW1lIHJldHJpZXZlcyB0aGUgcGF0aCBvZiB0aGUgZXhlY3V0YWJsZSBmaWxlCitvZiB0aGUgY3VycmVudCBwcm9jZXNzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0dldE1vZHVsZUZpbGVOYW1lKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK193aW5hcGlfR2V0TW9kdWxlRmlsZU5hbWVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBITU9EVUxFIG1vZHVsZV9oYW5kbGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODViNGI3MjhjNTE2MDMwNiBpbnB1dD02ZDY2ZmY3ZGVjYTVkMTFmXSovCiB7CiAgICAgQk9PTCByZXN1bHQ7Ci0gICAgSE1PRFVMRSBtb2R1bGU7CiAgICAgV0NIQVIgZmlsZW5hbWVbTUFYX1BBVEhdOwogCi0gICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiOkdldE1vZHVsZUZpbGVOYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZtb2R1bGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJlc3VsdCA9IEdldE1vZHVsZUZpbGVOYW1lVyhtb2R1bGUsIGZpbGVuYW1lLCBNQVhfUEFUSCk7CisgICAgcmVzdWx0ID0gR2V0TW9kdWxlRmlsZU5hbWVXKG1vZHVsZV9oYW5kbGUsIGZpbGVuYW1lLCBNQVhfUEFUSCk7CiAgICAgZmlsZW5hbWVbTUFYX1BBVEgtMV0gPSAnXDAnOwogCiAgICAgaWYgKCEgcmVzdWx0KQpAQCAtODI5LDgzICsxMDM0LDk2IEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoZmlsZW5hbWUsIHdjc2xlbihmaWxlbmFtZSkpOwogfQogCi1QeURvY19TVFJWQVIoR2V0U3RkSGFuZGxlX2RvYywKLSJHZXRTdGRIYW5kbGUoaGFuZGxlKSAtPiBpbnRlZ2VyXG5cCi1cblwKLVJldHVybiBhIGhhbmRsZSB0byB0aGUgc3BlY2lmaWVkIHN0YW5kYXJkIGRldmljZVxuXAotKFNURF9JTlBVVF9IQU5ETEUsIFNURF9PVVRQVVRfSEFORExFLCBTVERfRVJST1JfSEFORExFKS5cblwKLVRoZSBpbnRlZ2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGFuZGxlIG9iamVjdCBpcyByZXR1cm5lZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuR2V0U3RkSGFuZGxlIC0+IEhBTkRMRQogCi1zdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0dldFN0ZEhhbmRsZShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCisgICAgc3RkX2hhbmRsZTogRFdPUkQKKyAgICAgICAgT25lIG9mIFNURF9JTlBVVF9IQU5ETEUsIFNURF9PVVRQVVRfSEFORExFLCBvciBTVERfRVJST1JfSEFORExFLgorICAgIC8KKworUmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBzcGVjaWZpZWQgc3RhbmRhcmQgZGV2aWNlLgorCitUaGUgaW50ZWdlciBhc3NvY2lhdGVkIHdpdGggdGhlIGhhbmRsZSBvYmplY3QgaXMgcmV0dXJuZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBIQU5ETEUKK193aW5hcGlfR2V0U3RkSGFuZGxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgRFdPUkQgc3RkX2hhbmRsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wZTYxMzAwMWU3M2FiNjE0IGlucHV0PTA3MDE2YjA2YTJmYzg4MjZdKi8KIHsKICAgICBIQU5ETEUgaGFuZGxlOwotICAgIERXT1JEIHN0ZF9oYW5kbGU7Ci0KLSAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfRFdPUkQgIjpHZXRTdGRIYW5kbGUiLCAmc3RkX2hhbmRsZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGhhbmRsZSA9IEdldFN0ZEhhbmRsZShzdGRfaGFuZGxlKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOwogCi0gICAgaWYgKCEgaGFuZGxlKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5HZXRWZXJzaW9uIC0+IGxvbmcKKworUmV0dXJuIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgY3VycmVudCBvcGVyYXRpbmcgc3lzdGVtLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgbG9uZworX3dpbmFwaV9HZXRWZXJzaW9uX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNDFmMGRiNWEzYjgyNjgyIGlucHV0PWUyMWRmZjhkMGJhZWRlZDJdKi8KKy8qIERpc2FibGUgZGVwcmVjYXRpb24gd2FybmluZ3MgYWJvdXQgR2V0VmVyc2lvbkV4IGFzIHRoZSByZXN1bHQgaXMKKyAgIGJlaW5nIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSBjYWxsZXIsIHdobyBpcyByZXNwb25zaWJsZSBmb3IKKyAgIHVzaW5nIGl0IGNvcnJlY3RseS4gKi8KKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDk5NikKKworeworICAgIHJldHVybiBHZXRWZXJzaW9uKCk7Cit9CisKKyNwcmFnbWEgd2FybmluZyhwb3ApCisKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuT3BlblByb2Nlc3MgLT4gSEFORExFCisKKyAgICBkZXNpcmVkX2FjY2VzczogRFdPUkQKKyAgICBpbmhlcml0X2hhbmRsZTogQk9PTAorICAgIHByb2Nlc3NfaWQ6IERXT1JECisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgSEFORExFCitfd2luYXBpX09wZW5Qcm9jZXNzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgRFdPUkQgZGVzaXJlZF9hY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBpbmhlcml0X2hhbmRsZSwgRFdPUkQgcHJvY2Vzc19pZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iNDJiNmI4MWVhNWEwZmMzIGlucHV0PWVjOThjNGNmNGVhMmVjMzZdKi8KK3sKKyAgICBIQU5ETEUgaGFuZGxlOworCisgICAgaGFuZGxlID0gT3BlblByb2Nlc3MoZGVzaXJlZF9hY2Nlc3MsIGluaGVyaXRfaGFuZGxlLCBwcm9jZXNzX2lkKTsKKyAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIGhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICAgIH0KIAotICAgIC8qIG5vdGU6IHJldHVybnMgaW50ZWdlciwgbm90IGhhbmRsZSBvYmplY3QgKi8KLSAgICByZXR1cm4gSEFORExFX1RPX1BZTlVNKGhhbmRsZSk7CisgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotUHlEb2NfU1RSVkFSKEdldFZlcnNpb25fZG9jLAotIkdldFZlcnNpb24oKSAtPiB2ZXJzaW9uXG5cCi1cblwKLVJldHVybiB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuUGVla05hbWVkUGlwZQorCisgICAgaGFuZGxlOiBIQU5ETEUKKyAgICBzaXplOiBpbnQgPSAwCisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX0dldFZlcnNpb24oUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQorX3dpbmFwaV9QZWVrTmFtZWRQaXBlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEFORExFIGhhbmRsZSwgaW50IHNpemUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDBjM2UyOWU0OWQzMjNkZCBpbnB1dD1jN2FhNTNiZmJjZTY5ZDcwXSovCiB7Ci0gICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOkdldFZlcnNpb24iKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoR2V0VmVyc2lvbigpKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXdpbmFwaV9PcGVuUHJvY2VzcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgRFdPUkQgZHdEZXNpcmVkQWNjZXNzOwotICAgIEJPT0wgYkluaGVyaXRIYW5kbGU7Ci0gICAgRFdPUkQgZHdQcm9jZXNzSWQ7Ci0gICAgSEFORExFIGhhbmRsZTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0RXT1JEIEZfQk9PTCBGX0RXT1JELAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZHdEZXNpcmVkQWNjZXNzLCAmYkluaGVyaXRIYW5kbGUsICZkd1Byb2Nlc3NJZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaGFuZGxlID0gT3BlblByb2Nlc3MoZHdEZXNpcmVkQWNjZXNzLCBiSW5oZXJpdEhhbmRsZSwgZHdQcm9jZXNzSWQpOwotICAgIGlmIChoYW5kbGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIGhhbmRsZSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi13aW5hcGlfUGVla05hbWVkUGlwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgSEFORExFIGhhbmRsZTsKLSAgICBpbnQgc2l6ZSA9IDA7CiAgICAgUHlPYmplY3QgKmJ1ZiA9IE5VTEw7CiAgICAgRFdPUkQgbnJlYWQsIG5hdmFpbCwgbmxlZnQ7CiAgICAgQk9PTCByZXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgInxpOlBlZWtOYW1lZFBpcGUiICwgJmhhbmRsZSwgJnNpemUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5lZ2F0aXZlIHNpemUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05MzgsMjMgKzExNTYsMjQgQEAKICAgICB9CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK193aW5hcGkuUmVhZEZpbGUKKworICAgIGhhbmRsZTogSEFORExFCisgICAgc2l6ZTogaW50CisgICAgb3ZlcmxhcHBlZCBhcyB1c2Vfb3ZlcmxhcHBlZDogaW50KGNfZGVmYXVsdD0nMCcpID0gRmFsc2UKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXdpbmFwaV9SZWFkRmlsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3dpbmFwaV9SZWFkRmlsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBoYW5kbGUsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgIGludCB1c2Vfb3ZlcmxhcHBlZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00OTIwMjljYTk4MTYxZDg0IGlucHV0PThkZDgxMDE5NGU4NmFjN2RdKi8KIHsKLSAgICBIQU5ETEUgaGFuZGxlOwotICAgIGludCBzaXplOwogICAgIERXT1JEIG5yZWFkOwogICAgIFB5T2JqZWN0ICpidWY7CiAgICAgQk9PTCByZXQ7Ci0gICAgaW50IHVzZV9vdmVybGFwcGVkID0gMDsKICAgICBEV09SRCBlcnI7CiAgICAgT3ZlcmxhcHBlZE9iamVjdCAqb3ZlcmxhcHBlZCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJoYW5kbGUiLCAic2l6ZSIsICJvdmVybGFwcGVkIiwgTlVMTH07Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZfSEFORExFICJpfGk6UmVhZEZpbGUiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJnNpemUsICZ1c2Vfb3ZlcmxhcHBlZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgYnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKTsKICAgICBpZiAoIWJ1ZikKQEAgLTk5NywxOCArMTIxNiwyNyBAQAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOSSIsIGJ1ZiwgZXJyKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5TZXROYW1lZFBpcGVIYW5kbGVTdGF0ZQorCisgICAgbmFtZWRfcGlwZTogSEFORExFCisgICAgbW9kZTogb2JqZWN0CisgICAgbWF4X2NvbGxlY3Rpb25fY291bnQ6IG9iamVjdAorICAgIGNvbGxlY3RfZGF0YV90aW1lb3V0OiBvYmplY3QKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi13aW5hcGlfU2V0TmFtZWRQaXBlSGFuZGxlU3RhdGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3dpbmFwaV9TZXROYW1lZFBpcGVIYW5kbGVTdGF0ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBuYW1lZF9waXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXhfY29sbGVjdGlvbl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY29sbGVjdF9kYXRhX3RpbWVvdXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjIxMjlkMjIyY2JmYTA5NSBpbnB1dD05MTQyZDcyMTYzZDBmYWE2XSovCiB7Ci0gICAgSEFORExFIGhOYW1lZFBpcGU7Ci0gICAgUHlPYmplY3QgKm9BcmdzWzNdOworICAgIFB5T2JqZWN0ICpvQXJnc1szXSA9IHttb2RlLCBtYXhfY29sbGVjdGlvbl9jb3VudCwgY29sbGVjdF9kYXRhX3RpbWVvdXR9OwogICAgIERXT1JEIGR3QXJnc1szXSwgKnBBcmdzWzNdID0ge05VTEwsIE5VTEwsIE5VTEx9OwogICAgIGludCBpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJPT08iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaE5hbWVkUGlwZSwgJm9BcmdzWzBdLCAmb0FyZ3NbMV0sICZvQXJnc1syXSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgUHlFcnJfQ2xlYXIoKTsKIAogICAgIGZvciAoaSA9IDAgOyBpIDwgMyA7IGkrKykgewpAQCAtMTAyMCw0OSArMTI0OCw1NCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFTZXROYW1lZFBpcGVIYW5kbGVTdGF0ZShoTmFtZWRQaXBlLCBwQXJnc1swXSwgcEFyZ3NbMV0sIHBBcmdzWzJdKSkKKyAgICBpZiAoIVNldE5hbWVkUGlwZUhhbmRsZVN0YXRlKG5hbWVkX3BpcGUsIHBBcmdzWzBdLCBwQXJnc1sxXSwgcEFyZ3NbMl0pKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKFRlcm1pbmF0ZVByb2Nlc3NfZG9jLAotIlRlcm1pbmF0ZVByb2Nlc3MoaGFuZGxlLCBleGl0X2NvZGUpIC0+IE5vbmVcblwKLVxuXAotVGVybWluYXRlIHRoZSBzcGVjaWZpZWQgcHJvY2VzcyBhbmQgYWxsIG9mIGl0cyB0aHJlYWRzLiIpOworCisvKltjbGluaWMgaW5wdXRdCitfd2luYXBpLlRlcm1pbmF0ZVByb2Nlc3MKKworICAgIGhhbmRsZTogSEFORExFCisgICAgZXhpdF9jb2RlOiBVSU5UCisgICAgLworCitUZXJtaW5hdGUgdGhlIHNwZWNpZmllZCBwcm9jZXNzIGFuZCBhbGwgb2YgaXRzIHRocmVhZHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi13aW5hcGlfVGVybWluYXRlUHJvY2VzcyhQeU9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCitfd2luYXBpX1Rlcm1pbmF0ZVByb2Nlc3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCBleGl0X2NvZGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjRlOTlhYzNmMGIxZjM0YSBpbnB1dD1kNmJjMGFhMWVlM2JiNGRmXSovCiB7CiAgICAgQk9PTCByZXN1bHQ7CiAKLSAgICBIQU5ETEUgcHJvY2VzczsKLSAgICBVSU5UIGV4aXRfY29kZTsKLSAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfVUlOVCAiOlRlcm1pbmF0ZVByb2Nlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2Nlc3MsICZleGl0X2NvZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJlc3VsdCA9IFRlcm1pbmF0ZVByb2Nlc3MocHJvY2VzcywgZXhpdF9jb2RlKTsKKyAgICByZXN1bHQgPSBUZXJtaW5hdGVQcm9jZXNzKGhhbmRsZSwgZXhpdF9jb2RlKTsKIAogICAgIGlmICghIHJlc3VsdCkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5XYWl0TmFtZWRQaXBlCisKKyAgICBuYW1lOiBMUENUU1RSCisgICAgdGltZW91dDogRFdPUkQKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi13aW5hcGlfV2FpdE5hbWVkUGlwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfd2luYXBpX1dhaXROYW1lZFBpcGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBMUENUU1RSIG5hbWUsIERXT1JEIHRpbWVvdXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzI4NjZmNDQzOWIxZmUzOCBpbnB1dD0zNmZjNzgxMjkxYjE4NjJjXSovCiB7Ci0gICAgTFBDVFNUUiBscE5hbWVkUGlwZU5hbWU7Ci0gICAgRFdPUkQgblRpbWVPdXQ7CiAgICAgQk9PTCBzdWNjZXNzOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiBGX0RXT1JELCAmbHBOYW1lZFBpcGVOYW1lLCAmblRpbWVPdXQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzdWNjZXNzID0gV2FpdE5hbWVkUGlwZShscE5hbWVkUGlwZU5hbWUsIG5UaW1lT3V0KTsKKyAgICBzdWNjZXNzID0gV2FpdE5hbWVkUGlwZShuYW1lLCB0aW1lb3V0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFzdWNjZXNzKQpAQCAtMTA3MSwyMSArMTMwNCwyNCBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfd2luYXBpLldhaXRGb3JNdWx0aXBsZU9iamVjdHMKKworICAgIGhhbmRsZV9zZXE6IG9iamVjdAorICAgIHdhaXRfZmxhZzogQk9PTAorICAgIG1pbGxpc2Vjb25kczogRFdPUkQoY19kZWZhdWx0PSdJTkZJTklURScpID0gX3dpbmFwaS5JTkZJTklURQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXdpbmFwaV9XYWl0Rm9yTXVsdGlwbGVPYmplY3RzKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK193aW5hcGlfV2FpdEZvck11bHRpcGxlT2JqZWN0c19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpoYW5kbGVfc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCB3YWl0X2ZsYWcsIERXT1JEIG1pbGxpc2Vjb25kcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yOTVlM2YwMGI4ZTQ1ODk5IGlucHV0PTM2Zjc2Y2EwNTdjZDI4YTBdKi8KIHsKICAgICBEV09SRCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKmhhbmRsZV9zZXE7CiAgICAgSEFORExFIGhhbmRsZXNbTUFYSU1VTV9XQUlUX09CSkVDVFNdOwogICAgIEhBTkRMRSBzaWdpbnRfZXZlbnQgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbmhhbmRsZXMsIGk7Ci0gICAgQk9PTCB3YWl0X2ZsYWc7Ci0gICAgRFdPUkQgbWlsbGlzZWNvbmRzID0gSU5GSU5JVEU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iIEZfQk9PTCAifCIgRl9EV09SRAotICAgICAgICAgICAgICAgICAgICAgICAgICAiOldhaXRGb3JNdWx0aXBsZU9iamVjdHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlX3NlcSwgJndhaXRfZmxhZywgJm1pbGxpc2Vjb25kcykpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNrKGhhbmRsZV9zZXEpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC0xMTM5LDUzICsxMzc1LDU3IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygoaW50KSByZXN1bHQpOwogfQogCi1QeURvY19TVFJWQVIoV2FpdEZvclNpbmdsZU9iamVjdF9kb2MsCi0iV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIHRpbWVvdXQpIC0+IHJlc3VsdFxuXAotXG5cCi1XYWl0IHVudGlsIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGluIHRoZSBzaWduYWxlZCBzdGF0ZSBvclxuXAotdGhlIHRpbWUtb3V0IGludGVydmFsIGVsYXBzZXMuIFRoZSB0aW1lb3V0IHZhbHVlIGlzIHNwZWNpZmllZFxuXAotaW4gbWlsbGlzZWNvbmRzLiIpOworLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5XYWl0Rm9yU2luZ2xlT2JqZWN0IC0+IGxvbmcKIAotc3RhdGljIFB5T2JqZWN0ICoKLXdpbmFwaV9XYWl0Rm9yU2luZ2xlT2JqZWN0KFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKKyAgICBoYW5kbGU6IEhBTkRMRQorICAgIG1pbGxpc2Vjb25kczogRFdPUkQKKyAgICAvCisKK1dhaXQgZm9yIGEgc2luZ2xlIG9iamVjdC4KKworV2FpdCB1bnRpbCB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBpbiB0aGUgc2lnbmFsZWQgc3RhdGUgb3IKK3RoZSB0aW1lLW91dCBpbnRlcnZhbCBlbGFwc2VzLiBUaGUgdGltZW91dCB2YWx1ZSBpcyBzcGVjaWZpZWQKK2luIG1pbGxpc2Vjb25kcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGxvbmcKK193aW5hcGlfV2FpdEZvclNpbmdsZU9iamVjdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBtaWxsaXNlY29uZHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2M0NzE1ZDhmMWIzOTg1OSBpbnB1dD00NDNkMWFiMDc2ZWRjN2IxXSovCiB7CiAgICAgRFdPUkQgcmVzdWx0OwogCi0gICAgSEFORExFIGhhbmRsZTsKLSAgICBEV09SRCBtaWxsaXNlY29uZHM7Ci0gICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JEICI6V2FpdEZvclNpbmdsZU9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1pbGxpc2Vjb25kcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCBtaWxsaXNlY29uZHMpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAocmVzdWx0ID09IFdBSVRfRkFJTEVEKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIGlmIChyZXN1bHQgPT0gV0FJVF9GQUlMRUQpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX3dpbmFwaS5Xcml0ZUZpbGUKKworICAgIGhhbmRsZTogSEFORExFCisgICAgYnVmZmVyOiBvYmplY3QKKyAgICBvdmVybGFwcGVkIGFzIHVzZV9vdmVybGFwcGVkOiBpbnQoY19kZWZhdWx0PScwJykgPSBGYWxzZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotd2luYXBpX1dyaXRlRmlsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3dpbmFwaV9Xcml0ZUZpbGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgaGFuZGxlLCBQeU9iamVjdCAqYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNlX292ZXJsYXBwZWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmNhODBmNmJmM2ZhOTJlMyBpbnB1dD01MTg0NmE1YWY1MjA1M2ZkXSovCiB7Ci0gICAgSEFORExFIGhhbmRsZTsKICAgICBQeV9idWZmZXIgX2J1ZiwgKmJ1ZjsKLSAgICBQeU9iamVjdCAqYnVmb2JqOwogICAgIERXT1JEIGxlbiwgd3JpdHRlbjsKICAgICBCT09MIHJldDsKLSAgICBpbnQgdXNlX292ZXJsYXBwZWQgPSAwOwogICAgIERXT1JEIGVycjsKICAgICBPdmVybGFwcGVkT2JqZWN0ICpvdmVybGFwcGVkID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImhhbmRsZSIsICJidWZmZXIiLCAib3ZlcmxhcHBlZCIsIE5VTEx9OwotCi0gICAgLyogRmlyc3QgZ2V0IGhhbmRsZSBhbmQgdXNlX292ZXJsYXBwZWQgdG8ga25vdyB3aGljaCBQeV9idWZmZXIgdG8gdXNlICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGX0hBTkRMRSAiT3xpOldyaXRlRmlsZSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmYnVmb2JqLCAmdXNlX292ZXJsYXBwZWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICh1c2Vfb3ZlcmxhcHBlZCkgewogICAgICAgICBvdmVybGFwcGVkID0gbmV3X292ZXJsYXBwZWQoaGFuZGxlKTsKQEAgLTExOTYsNyArMTQzNiw3IEBACiAgICAgZWxzZQogICAgICAgICBidWYgPSAmX2J1ZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2UoYnVmb2JqLCAieSoiLCBidWYpKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZShidWZmZXIsICJ5KiIsIGJ1ZikpIHsKICAgICAgICAgUHlfWERFQ1JFRihvdmVybGFwcGVkKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTIyOSw1MiArMTQ2OSwzMCBAQAogCiAKIHN0YXRpYyBQeU1ldGhvZERlZiB3aW5hcGlfZnVuY3Rpb25zW10gPSB7Ci0gICAgeyJDbG9zZUhhbmRsZSIsIHdpbmFwaV9DbG9zZUhhbmRsZSwgTUVUSF9WQVJBUkdTLAotICAgICBDbG9zZUhhbmRsZV9kb2N9LAotICAgIHsiQ29ubmVjdE5hbWVkUGlwZSIsIChQeUNGdW5jdGlvbil3aW5hcGlfQ29ubmVjdE5hbWVkUGlwZSwKLSAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgIiJ9LAotICAgIHsiQ3JlYXRlRmlsZSIsIHdpbmFwaV9DcmVhdGVGaWxlLCBNRVRIX1ZBUkFSR1MsCi0gICAgICIifSwKLSAgICB7IkNyZWF0ZU5hbWVkUGlwZSIsIHdpbmFwaV9DcmVhdGVOYW1lZFBpcGUsIE1FVEhfVkFSQVJHUywKLSAgICAgIiJ9LAotICAgIHsiQ3JlYXRlUGlwZSIsIHdpbmFwaV9DcmVhdGVQaXBlLCBNRVRIX1ZBUkFSR1MsCi0gICAgIENyZWF0ZVBpcGVfZG9jfSwKLSAgICB7IkNyZWF0ZVByb2Nlc3MiLCB3aW5hcGlfQ3JlYXRlUHJvY2VzcywgTUVUSF9WQVJBUkdTLAotICAgICBDcmVhdGVQcm9jZXNzX2RvY30sCi0gICAgeyJEdXBsaWNhdGVIYW5kbGUiLCB3aW5hcGlfRHVwbGljYXRlSGFuZGxlLCBNRVRIX1ZBUkFSR1MsCi0gICAgIER1cGxpY2F0ZUhhbmRsZV9kb2N9LAotICAgIHsiRXhpdFByb2Nlc3MiLCB3aW5hcGlfRXhpdFByb2Nlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgIiJ9LAotICAgIHsiR2V0Q3VycmVudFByb2Nlc3MiLCB3aW5hcGlfR2V0Q3VycmVudFByb2Nlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgR2V0Q3VycmVudFByb2Nlc3NfZG9jfSwKLSAgICB7IkdldEV4aXRDb2RlUHJvY2VzcyIsIHdpbmFwaV9HZXRFeGl0Q29kZVByb2Nlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgR2V0RXhpdENvZGVQcm9jZXNzX2RvY30sCi0gICAgeyJHZXRMYXN0RXJyb3IiLCB3aW5hcGlfR2V0TGFzdEVycm9yLCBNRVRIX05PQVJHUywKLSAgICAgR2V0Q3VycmVudFByb2Nlc3NfZG9jfSwKLSAgICB7IkdldE1vZHVsZUZpbGVOYW1lIiwgd2luYXBpX0dldE1vZHVsZUZpbGVOYW1lLCBNRVRIX1ZBUkFSR1MsCi0gICAgIEdldE1vZHVsZUZpbGVOYW1lX2RvY30sCi0gICAgeyJHZXRTdGRIYW5kbGUiLCB3aW5hcGlfR2V0U3RkSGFuZGxlLCBNRVRIX1ZBUkFSR1MsCi0gICAgIEdldFN0ZEhhbmRsZV9kb2N9LAotICAgIHsiR2V0VmVyc2lvbiIsIHdpbmFwaV9HZXRWZXJzaW9uLCBNRVRIX1ZBUkFSR1MsCi0gICAgIEdldFZlcnNpb25fZG9jfSwKLSAgICB7Ik9wZW5Qcm9jZXNzIiwgd2luYXBpX09wZW5Qcm9jZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICIifSwKLSAgICB7IlBlZWtOYW1lZFBpcGUiLCB3aW5hcGlfUGVla05hbWVkUGlwZSwgTUVUSF9WQVJBUkdTLAotICAgICAiIn0sCi0gICAgeyJSZWFkRmlsZSIsIChQeUNGdW5jdGlvbil3aW5hcGlfUmVhZEZpbGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICIifSwKLSAgICB7IlNldE5hbWVkUGlwZUhhbmRsZVN0YXRlIiwgd2luYXBpX1NldE5hbWVkUGlwZUhhbmRsZVN0YXRlLCBNRVRIX1ZBUkFSR1MsCi0gICAgICIifSwKLSAgICB7IlRlcm1pbmF0ZVByb2Nlc3MiLCB3aW5hcGlfVGVybWluYXRlUHJvY2VzcywgTUVUSF9WQVJBUkdTLAotICAgICBUZXJtaW5hdGVQcm9jZXNzX2RvY30sCi0gICAgeyJXYWl0TmFtZWRQaXBlIiwgd2luYXBpX1dhaXROYW1lZFBpcGUsIE1FVEhfVkFSQVJHUywKLSAgICAgIiJ9LAotICAgIHsiV2FpdEZvck11bHRpcGxlT2JqZWN0cyIsIHdpbmFwaV9XYWl0Rm9yTXVsdGlwbGVPYmplY3RzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICIifSwKLSAgICB7IldhaXRGb3JTaW5nbGVPYmplY3QiLCB3aW5hcGlfV2FpdEZvclNpbmdsZU9iamVjdCwgTUVUSF9WQVJBUkdTLAotICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0X2RvY30sCi0gICAgeyJXcml0ZUZpbGUiLCAoUHlDRnVuY3Rpb24pd2luYXBpX1dyaXRlRmlsZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgIiJ9LAorICAgIF9XSU5BUElfQ0xPU0VIQU5ETEVfTUVUSE9EREVGCisgICAgX1dJTkFQSV9DT05ORUNUTkFNRURQSVBFX01FVEhPRERFRgorICAgIF9XSU5BUElfQ1JFQVRFRklMRV9NRVRIT0RERUYKKyAgICBfV0lOQVBJX0NSRUFURU5BTUVEUElQRV9NRVRIT0RERUYKKyAgICBfV0lOQVBJX0NSRUFURVBJUEVfTUVUSE9EREVGCisgICAgX1dJTkFQSV9DUkVBVEVQUk9DRVNTX01FVEhPRERFRgorICAgIF9XSU5BUElfQ1JFQVRFSlVOQ1RJT05fTUVUSE9EREVGCisgICAgX1dJTkFQSV9EVVBMSUNBVEVIQU5ETEVfTUVUSE9EREVGCisgICAgX1dJTkFQSV9FWElUUFJPQ0VTU19NRVRIT0RERUYKKyAgICBfV0lOQVBJX0dFVENVUlJFTlRQUk9DRVNTX01FVEhPRERFRgorICAgIF9XSU5BUElfR0VURVhJVENPREVQUk9DRVNTX01FVEhPRERFRgorICAgIF9XSU5BUElfR0VUTEFTVEVSUk9SX01FVEhPRERFRgorICAgIF9XSU5BUElfR0VUTU9EVUxFRklMRU5BTUVfTUVUSE9EREVGCisgICAgX1dJTkFQSV9HRVRTVERIQU5ETEVfTUVUSE9EREVGCisgICAgX1dJTkFQSV9HRVRWRVJTSU9OX01FVEhPRERFRgorICAgIF9XSU5BUElfT1BFTlBST0NFU1NfTUVUSE9EREVGCisgICAgX1dJTkFQSV9QRUVLTkFNRURQSVBFX01FVEhPRERFRgorICAgIF9XSU5BUElfUkVBREZJTEVfTUVUSE9EREVGCisgICAgX1dJTkFQSV9TRVROQU1FRFBJUEVIQU5ETEVTVEFURV9NRVRIT0RERUYKKyAgICBfV0lOQVBJX1RFUk1JTkFURVBST0NFU1NfTUVUSE9EREVGCisgICAgX1dJTkFQSV9XQUlUTkFNRURQSVBFX01FVEhPRERFRgorICAgIF9XSU5BUElfV0FJVEZPUk1VTFRJUExFT0JKRUNUU19NRVRIT0RERUYKKyAgICBfV0lOQVBJX1dBSVRGT1JTSU5HTEVPQkpFQ1RfTUVUSE9EREVGCisgICAgX1dJTkFQSV9XUklURUZJTEVfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9CiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKaW5kZXggNWFiMWFiNi4uYjlmODdhZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jCisrKyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwpAQCAtMTUsNiArMTUsMTEgQEAKICNlbmRpZiAvKiBIQVZFX1NZU19UWVBFU19IICovCiAjZW5kaWYgLyogIVNURENfSEVBREVSUyAqLwogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgYXJyYXkKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTdkMWI4ZDdmNTk1OGZkODNdKi8KKwogc3RydWN0IGFycmF5b2JqZWN0OyAvKiBGb3J3YXJkICovCiAKIC8qIEFsbCBwb3NzaWJsZSBhcnJheWRlc2NyIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiB0aGUgdmVjdG9yICJkZXNjcmlwdG9ycyIKQEAgLTQyLDYgKzQ3LDYzIEBACiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgQXJyYXl0eXBlOwogCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5X3NzaXplX3QgaW5kZXg7CisgICAgYXJyYXlvYmplY3QgKmFvOworICAgIFB5T2JqZWN0KiAoKmdldGl0ZW0pKHN0cnVjdCBhcnJheW9iamVjdCAqLCBQeV9zc2l6ZV90KTsKK30gYXJyYXlpdGVyb2JqZWN0OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IFB5QXJyYXlJdGVyX1R5cGU7CisKKyNkZWZpbmUgUHlBcnJheUl0ZXJfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlB5QXJyYXlJdGVyX1R5cGUpCisKK2VudW0gbWFjaGluZV9mb3JtYXRfY29kZSB7CisgICAgVU5LTk9XTl9GT1JNQVQgPSAtMSwKKyAgICAvKiBVTktOT1dOX0ZPUk1BVCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIG1hY2hpbmUgZm9ybWF0IGZvciBhbgorICAgICAqIGFycmF5IHR5cGUgY29kZSBjYW5ub3QgYmUgaW50ZXJwcmV0ZWQuIFdoZW4gdGhpcyBvY2N1cnMsIGEgbGlzdCBvZgorICAgICAqIFB5dGhvbiBvYmplY3RzIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb250ZW50IG9mIHRoZSBhcnJheQorICAgICAqIGluc3RlYWQgb2YgdXNpbmcgdGhlIG1lbW9yeSBjb250ZW50IG9mIHRoZSBhcnJheSBkaXJlY3RseS4gSW4gdGhhdAorICAgICAqIGNhc2UsIHRoZSBhcnJheV9yZWNvbnN0cnVjdG9yIG1lY2hhbmlzbSBpcyBieXBhc3NlZCBjb21wbGV0ZWx5LCBhbmQKKyAgICAgKiB0aGUgc3RhbmRhcmQgYXJyYXkgY29uc3RydWN0b3IgaXMgdXNlZCBpbnN0ZWFkLgorICAgICAqCisgICAgICogVGhpcyBpcyB3aWxsIG1vc3QgbGlrZWx5IG9jY3VyIHdoZW4gdGhlIG1hY2hpbmUgZG9lc24ndCB1c2UgSUVFRQorICAgICAqIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuCisgICAgICovCisKKyAgICBVTlNJR05FRF9JTlQ4ID0gMCwKKyAgICBTSUdORURfSU5UOCA9IDEsCisgICAgVU5TSUdORURfSU5UMTZfTEUgPSAyLAorICAgIFVOU0lHTkVEX0lOVDE2X0JFID0gMywKKyAgICBTSUdORURfSU5UMTZfTEUgPSA0LAorICAgIFNJR05FRF9JTlQxNl9CRSA9IDUsCisgICAgVU5TSUdORURfSU5UMzJfTEUgPSA2LAorICAgIFVOU0lHTkVEX0lOVDMyX0JFID0gNywKKyAgICBTSUdORURfSU5UMzJfTEUgPSA4LAorICAgIFNJR05FRF9JTlQzMl9CRSA9IDksCisgICAgVU5TSUdORURfSU5UNjRfTEUgPSAxMCwKKyAgICBVTlNJR05FRF9JTlQ2NF9CRSA9IDExLAorICAgIFNJR05FRF9JTlQ2NF9MRSA9IDEyLAorICAgIFNJR05FRF9JTlQ2NF9CRSA9IDEzLAorICAgIElFRUVfNzU0X0ZMT0FUX0xFID0gMTQsCisgICAgSUVFRV83NTRfRkxPQVRfQkUgPSAxNSwKKyAgICBJRUVFXzc1NF9ET1VCTEVfTEUgPSAxNiwKKyAgICBJRUVFXzc1NF9ET1VCTEVfQkUgPSAxNywKKyAgICBVVEYxNl9MRSA9IDE4LAorICAgIFVURjE2X0JFID0gMTksCisgICAgVVRGMzJfTEUgPSAyMCwKKyAgICBVVEYzMl9CRSA9IDIxCit9OworI2RlZmluZSBNQUNISU5FX0ZPUk1BVF9DT0RFX01JTiAwCisjZGVmaW5lIE1BQ0hJTkVfRk9STUFUX0NPREVfTUFYIDIxCisKKworLyoKKyAqIE11c3QgY29tZSBhZnRlciBhcnJheW9iamVjdCwgYXJyYXlpdGVyb2JqZWN0LAorICogYW5kIGVudW0gbWFjaGluZV9jb2RlX3R5cGUgZGVmaW5pdGlvbnMuCisgKi8KKyNpbmNsdWRlICJjbGluaWMvYXJyYXltb2R1bGUuYy5oIgorCiAjZGVmaW5lIGFycmF5X0NoZWNrKG9wKSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsICZBcnJheXR5cGUpCiAjZGVmaW5lIGFycmF5X0NoZWNrRXhhY3Qob3ApIChQeV9UWVBFKG9wKSA9PSAmQXJyYXl0eXBlKQogCkBAIC00NzEsNiArNTMzLDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogSW1wbGVtZW50YXRpb25zIG9mIGFycmF5IG9iamVjdCBtZXRob2RzLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qW2NsaW5pYyBpbnB1dF0KK2NsYXNzIGFycmF5LmFycmF5ICJhcnJheW9iamVjdCAqIiAiJkFycmF5dHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWFkNDNkMzdlOTQyYTg4NTRdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKIG5ld2FycmF5b2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlfc3NpemVfdCBzaXplLCBzdHJ1Y3QgYXJyYXlkZXNjciAqZGVzY3IpCkBAIC02ODQsMTYgKzc1MCwzNSBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKilucDsKIH0KIAorCisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheS5fX2NvcHlfXworCitSZXR1cm4gYSBjb3B5IG9mIHRoZSBhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2NvcHkoYXJyYXlvYmplY3QgKmEsIFB5T2JqZWN0ICp1bnVzZWQpCithcnJheV9hcnJheV9fX2NvcHlfX19pbXBsKGFycmF5b2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRlYzdjM2Y5MjVkOTYxOWUgaW5wdXQ9YWQxZWU1YjA4Njk2NWYwOV0qLwogewotICAgIHJldHVybiBhcnJheV9zbGljZShhLCAwLCBQeV9TSVpFKGEpKTsKKyAgICByZXR1cm4gYXJyYXlfc2xpY2Uoc2VsZiwgMCwgUHlfU0laRShzZWxmKSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjb3B5X2RvYywKLSJjb3B5KGFycmF5KVxuXAotXG5cCi0gUmV0dXJuIGEgY29weSBvZiB0aGUgYXJyYXkuIik7CisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheS5fX2RlZXBjb3B5X18KKworICAgIHVudXNlZDogb2JqZWN0CisgICAgLworCitSZXR1cm4gYSBjb3B5IG9mIHRoZSBhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2FycmF5X19fZGVlcGNvcHlfXyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xZWM3NDhkOGUxNGE5ZmFhIGlucHV0PTI0MDVlY2I0OTMzNzQ4YzRdKi8KK3sKKyAgICByZXR1cm4gYXJyYXlfYXJyYXlfX19jb3B5X19faW1wbChzZWxmKTsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X2NvbmNhdChhcnJheW9iamVjdCAqYSwgUHlPYmplY3QgKmJiKQpAQCAtOTYxLDggKzEwNDYsMTggQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkuY291bnQKKworICAgIHY6IG9iamVjdAorICAgIC8KKworUmV0dXJuIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB2IGluIHRoZSBhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2NvdW50KGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK2FycmF5X2FycmF5X2NvdW50KGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zZGQzNjI0YmY3MTM1YTNhIGlucHV0PWQ5YmNlOWQ2NWUzOWQxZjVdKi8KIHsKICAgICBQeV9zc2l6ZV90IGNvdW50ID0gMDsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC05ODQsMTMgKzEwNzksMTkgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGNvdW50KTsKIH0KIAotUHlEb2NfU1RSVkFSKGNvdW50X2RvYywKLSJjb3VudCh4KVxuXAotXG5cCi1SZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHggaW4gdGhlIGFycmF5LiIpOworCisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheS5pbmRleAorCisgICAgdjogb2JqZWN0CisgICAgLworCitSZXR1cm4gaW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiB2IGluIHRoZSBhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2luZGV4KGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK2FycmF5X2FycmF5X2luZGV4KGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNDg0OThkMzI1NjAyMTY3IGlucHV0PWNmNjE5ODk4YzY2NDlkMDhdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAKQEAgLTEwMTMsMTEgKzExMTQsNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoaW5kZXhfZG9jLAotImluZGV4KHgpXG5cCi1cblwKLVJldHVybiBpbmRleCBvZiBmaXJzdCBvY2N1cnJlbmNlIG9mIHggaW4gdGhlIGFycmF5LiIpOwotCiBzdGF0aWMgaW50CiBhcnJheV9jb250YWlucyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCiB7CkBAIC0xMDM0LDggKzExMzAsMTggQEAKICAgICByZXR1cm4gY21wOwogfQogCisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheS5yZW1vdmUKKworICAgIHY6IG9iamVjdAorICAgIC8KKworUmVtb3ZlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHYgaW4gdGhlIGFycmF5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXJyYXlfcmVtb3ZlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK2FycmF5X2FycmF5X3JlbW92ZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmVmMDZiZTlmZGY5ZGNlYiBpbnB1dD0wYjFlNWFlZDI1NTkwMDI3XSovCiB7CiAgICAgaW50IGk7CiAKQEAgLTEwNjIsMTggKzExNjgsMjMgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHJlbW92ZV9kb2MsCi0icmVtb3ZlKHgpXG5cCi1cblwKLVJlbW92ZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB4IGluIHRoZSBhcnJheS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2FycmF5LmFycmF5LnBvcAorCisgICAgaTogUHlfc3NpemVfdCA9IC0xCisgICAgLworCitSZXR1cm4gdGhlIGktdGggZWxlbWVudCBhbmQgZGVsZXRlIGl0IGZyb20gdGhlIGFycmF5LgorCitpIGRlZmF1bHRzIHRvIC0xLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXJyYXlfcG9wKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2FycmF5X2FycmF5X3BvcF9pbXBsKGFycmF5b2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGkpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmMxZjBjNTRmZTUzMDhlNCBpbnB1dD04ZTVmZWI0YzFhMTFjZDQ0XSovCiB7Ci0gICAgUHlfc3NpemVfdCBpID0gLTE7CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwb3AiLCAmaSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKFB5X1NJWkUoc2VsZikgPT0gMCkgewogICAgICAgICAvKiBTcGVjaWFsLWNhc2UgbW9zdCBjb21tb24gZmFpbHVyZSBjYXVzZSAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInBvcCBmcm9tIGVtcHR5IGFycmF5Iik7CkBAIC0xMDk1LDEzICsxMjA2LDE4IEBACiAgICAgcmV0dXJuIHY7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3BfZG9jLAotInBvcChbaV0pXG5cCi1cblwKLVJldHVybiB0aGUgaS10aCBlbGVtZW50IGFuZCBkZWxldGUgaXQgZnJvbSB0aGUgYXJyYXkuIGkgZGVmYXVsdHMgdG8gLTEuIik7CisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheS5leHRlbmQKKworICAgIGJiOiBvYmplY3QKKyAgICAvCisKK0FwcGVuZCBpdGVtcyB0byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2V4dGVuZChhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmJiKQorYXJyYXlfYXJyYXlfZXh0ZW5kKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYmIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmJkZGJjOGU4YmVmODcxZCBpbnB1dD00M2JlODZhYmE1YzMxZTQ0XSovCiB7CiAgICAgaWYgKGFycmF5X2RvX2V4dGVuZChzZWxmLCBiYikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTEwOSwyOSArMTIyNSwzNSBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCi1QeURvY19TVFJWQVIoZXh0ZW5kX2RvYywKLSJleHRlbmQoYXJyYXkgb3IgaXRlcmFibGUpXG5cCi1cblwKLSBBcHBlbmQgaXRlbXMgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIik7CisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheS5pbnNlcnQKKworICAgIGk6IFB5X3NzaXplX3QKKyAgICB2OiBvYmplY3QKKyAgICAvCisKK0luc2VydCBhIG5ldyBpdGVtIHYgaW50byB0aGUgYXJyYXkgYmVmb3JlIHBvc2l0aW9uIGkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hcnJheV9pbnNlcnQoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXJyYXlfYXJyYXlfaW5zZXJ0X2ltcGwoYXJyYXlvYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKnYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWEzNjQ4ZTI3ODM0ODU2NCBpbnB1dD01NTc3ZDFiNDM4M2U5MzEzXSovCiB7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICp2OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibk86aW5zZXJ0IiwgJmksICZ2KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIGlucyhzZWxmLCBpLCB2KTsKIH0KIAotUHlEb2NfU1RSVkFSKGluc2VydF9kb2MsCi0iaW5zZXJ0KGkseClcblwKLVxuXAotSW5zZXJ0IGEgbmV3IGl0ZW0geCBpbnRvIHRoZSBhcnJheSBiZWZvcmUgcG9zaXRpb24gaS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2FycmF5LmFycmF5LmJ1ZmZlcl9pbmZvCiAKK1JldHVybiBhIHR1cGxlIChhZGRyZXNzLCBsZW5ndGgpIGdpdmluZyB0aGUgY3VycmVudCBtZW1vcnkgYWRkcmVzcyBhbmQgdGhlIGxlbmd0aCBpbiBpdGVtcyBvZiB0aGUgYnVmZmVyIHVzZWQgdG8gaG9sZCBhcnJheSdzIGNvbnRlbnRzLgorCitUaGUgbGVuZ3RoIHNob3VsZCBiZSBtdWx0aXBsaWVkIGJ5IHRoZSBpdGVtc2l6ZSBhdHRyaWJ1dGUgdG8gY2FsY3VsYXRlCit0aGUgYnVmZmVyIGxlbmd0aCBpbiBieXRlcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2J1ZmZlcl9pbmZvKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorYXJyYXlfYXJyYXlfYnVmZmVyX2luZm9faW1wbChhcnJheW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05YjJhNGVjM2FlN2U5OGU3IGlucHV0PWE1OGJhZTVjNmUxYWM2YTZdKi8KIHsKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTCwgKnY7CiAKQEAgLTExNDYsNyArMTI2OCw3IEBACiAgICAgfQogICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAwLCB2KTsKIAotICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpKFB5X1NJWkUoc2VsZikpKTsKKyAgICB2ID0gUHlMb25nX0Zyb21Tc2l6ZV90KFB5X1NJWkUoc2VsZikpOwogICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTE1NiwyOSArMTI3OCwzNCBAQAogICAgIHJldHVybiByZXR2YWw7CiB9CiAKLVB5RG9jX1NUUlZBUihidWZmZXJfaW5mb19kb2MsCi0iYnVmZmVyX2luZm8oKSAtPiAoYWRkcmVzcywgbGVuZ3RoKVxuXAotXG5cCi1SZXR1cm4gYSB0dXBsZSAoYWRkcmVzcywgbGVuZ3RoKSBnaXZpbmcgdGhlIGN1cnJlbnQgbWVtb3J5IGFkZHJlc3MgYW5kXG5cCi10aGUgbGVuZ3RoIGluIGl0ZW1zIG9mIHRoZSBidWZmZXIgdXNlZCB0byBob2xkIGFycmF5J3MgY29udGVudHNcblwKLVRoZSBsZW5ndGggc2hvdWxkIGJlIG11bHRpcGxpZWQgYnkgdGhlIGl0ZW1zaXplIGF0dHJpYnV0ZSB0byBjYWxjdWxhdGVcblwKLXRoZSBidWZmZXIgbGVuZ3RoIGluIGJ5dGVzLiIpOworLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkuYXBwZW5kCiAKKyAgICB2OiBvYmplY3QKKyAgICAvCisKK0FwcGVuZCBuZXcgdmFsdWUgdiB0byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2FwcGVuZChhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCithcnJheV9hcnJheV9hcHBlbmQoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTc0NWEwNjY5YmY4ZGIwZTIgaW5wdXQ9MGI5OGQ5ZDc4ZTc4ZjBmYV0qLwogewogICAgIHJldHVybiBpbnMoc2VsZiwgUHlfU0laRShzZWxmKSwgdik7CiB9CiAKLVB5RG9jX1NUUlZBUihhcHBlbmRfZG9jLAotImFwcGVuZCh4KVxuXAotXG5cCi1BcHBlbmQgbmV3IHZhbHVlIHggdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIik7CisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheS5ieXRlc3dhcAogCitCeXRlc3dhcCBhbGwgaXRlbXMgb2YgdGhlIGFycmF5LgorCitJZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IGFyZSBub3QgMSwgMiwgNCwgb3IgOCBieXRlcyBpbiBzaXplLCBSdW50aW1lRXJyb3IgaXMKK3JhaXNlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2J5dGVzd2FwKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorYXJyYXlfYXJyYXlfYnl0ZXN3YXBfaW1wbChhcnJheW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZjgyMzZjYmRmMGQ5MGI1IGlucHV0PTZhODU1OTFiOTUwYTAxODZdKi8KIHsKICAgICBjaGFyICpwOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTEyMjgsMTQgKzEzNTUsMTUgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAotUHlEb2NfU1RSVkFSKGJ5dGVzd2FwX2RvYywKLSJieXRlc3dhcCgpXG5cCi1cblwKLUJ5dGVzd2FwIGFsbCBpdGVtcyBvZiB0aGUgYXJyYXkuICBJZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IGFyZSBub3QgMSwgMixcblwKLTQsIG9yIDggYnl0ZXMgaW4gc2l6ZSwgUnVudGltZUVycm9yIGlzIHJhaXNlZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2FycmF5LmFycmF5LnJldmVyc2UKKworUmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIGl0ZW1zIGluIHRoZSBhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X3JldmVyc2UoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCithcnJheV9hcnJheV9yZXZlcnNlX2ltcGwoYXJyYXlvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzA0ODY4YjM2ZjZmNDA4OSBpbnB1dD1jZDkwNGYwMWIyN2Q5NjZhXSovCiB7CiAgICAgUHlfc3NpemVfdCBpdGVtc2l6ZSA9IHNlbGYtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKICAgICBjaGFyICpwLCAqcTsKQEAgLTEyNjEsMjcgKzEzODksMjYgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAotUHlEb2NfU1RSVkFSKHJldmVyc2VfZG9jLAotInJldmVyc2UoKVxuXAotXG5cCi1SZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LiIpOworLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkuZnJvbWZpbGUKIAorICAgIGY6IG9iamVjdAorICAgIG46IFB5X3NzaXplX3QKKyAgICAvCiAKLS8qIEZvcndhcmQgKi8KLXN0YXRpYyBQeU9iamVjdCAqYXJyYXlfZnJvbWJ5dGVzKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CitSZWFkIG4gb2JqZWN0cyBmcm9tIHRoZSBmaWxlIG9iamVjdCBmIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2Zyb21maWxlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2FycmF5X2FycmF5X2Zyb21maWxlX2ltcGwoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmLCBQeV9zc2l6ZV90IG4pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZWM5ZjYwMGUxMGY1MzUxMCBpbnB1dD1lMTg4YWZlOGU1OGFkZjQwXSovCiB7Ci0gICAgUHlPYmplY3QgKmYsICpiLCAqcmVzOworICAgIFB5T2JqZWN0ICpiLCAqcmVzOwogICAgIFB5X3NzaXplX3QgaXRlbXNpemUgPSBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemU7Ci0gICAgUHlfc3NpemVfdCBuLCBuYnl0ZXM7CisgICAgUHlfc3NpemVfdCBuYnl0ZXM7CiAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CiAgICAgaW50IG5vdF9lbm91Z2hfYnl0ZXM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9uOmZyb21maWxlIiwgJmYsICZuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAobiA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJuZWdhdGl2ZSBjb3VudCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzMDUsMTMgKzE0MzIsOCBAQAogCiAgICAgbm90X2Vub3VnaF9ieXRlcyA9IChQeUJ5dGVzX0dFVF9TSVpFKGIpICE9IG5ieXRlcyk7CiAKLSAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKE8pIiwgYik7CisgICAgcmVzID0gYXJyYXlfYXJyYXlfZnJvbWJ5dGVzKHNlbGYsIGIpOwogICAgIFB5X0RFQ1JFRihiKTsKLSAgICBpZiAoYXJncyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJlcyA9IGFycmF5X2Zyb21ieXRlcyhzZWxmLCBhcmdzKTsKLSAgICBQeV9ERUNSRUYoYXJncyk7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTMyNSwxNSArMTQ0NywxOCBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLVB5RG9jX1NUUlZBUihmcm9tZmlsZV9kb2MsCi0iZnJvbWZpbGUoZiwgbilcblwKLVxuXAotUmVhZCBuIG9iamVjdHMgZnJvbSB0aGUgZmlsZSBvYmplY3QgZiBhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIGVuZCBvZiB0aGVcblwKLWFycmF5LiIpOworLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkudG9maWxlCiAKKyAgICBmOiBvYmplY3QKKyAgICAvCisKK1dyaXRlIGFsbCBpdGVtcyAoYXMgbWFjaGluZSB2YWx1ZXMpIHRvIHRoZSBmaWxlIG9iamVjdCBmLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXJyYXlfdG9maWxlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZikKK2FycmF5X2FycmF5X3RvZmlsZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2EyY2ZhODEyOGRmMDc3NyBpbnB1dD1iMDY2OWE0ODRhYWIwODMxXSovCiB7CiAgICAgUHlfc3NpemVfdCBuYnl0ZXMgPSBQeV9TSVpFKHNlbGYpICogc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOwogICAgIC8qIFdyaXRlIDY0SyBibG9ja3MgYXQgYSB0aW1lICovCkBAIC0xMzY4LDE0ICsxNDkzLDE4IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLVB5RG9jX1NUUlZBUih0b2ZpbGVfZG9jLAotInRvZmlsZShmKVxuXAotXG5cCi1Xcml0ZSBhbGwgaXRlbXMgKGFzIG1hY2hpbmUgdmFsdWVzKSB0byB0aGUgZmlsZSBvYmplY3QgZi4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2FycmF5LmFycmF5LmZyb21saXN0CiAKKyAgICBsaXN0OiBvYmplY3QKKyAgICAvCisKK0FwcGVuZCBpdGVtcyB0byBhcnJheSBmcm9tIGxpc3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hcnJheV9mcm9tbGlzdChhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmxpc3QpCithcnJheV9hcnJheV9mcm9tbGlzdChhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmxpc3QpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjY0MTFjMmQyMjhhM2UzZiBpbnB1dD1iZTI2MDVhOTZjNDk2ODBmXSovCiB7CiAgICAgUHlfc3NpemVfdCBuOwogCkBAIC0xNDAyLDEzICsxNTMxLDE1IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLVB5RG9jX1NUUlZBUihmcm9tbGlzdF9kb2MsCi0iZnJvbWxpc3QobGlzdClcblwKLVxuXAotQXBwZW5kIGl0ZW1zIHRvIGFycmF5IGZyb20gbGlzdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2FycmF5LmFycmF5LnRvbGlzdAorCitDb252ZXJ0IGFycmF5IHRvIGFuIG9yZGluYXJ5IGxpc3Qgd2l0aCB0aGUgc2FtZSBpdGVtcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X3RvbGlzdChhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK2FycmF5X2FycmF5X3RvbGlzdF9pbXBsKGFycmF5b2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAwYjYwY2M5ZWFiOGVmODkgaW5wdXQ9YThkNzc4NGE5NGY4NmI1M10qLwogewogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQeV9TSVpFKHNlbGYpKTsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC0xNDI5LDExICsxNTYwLDYgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHRvbGlzdF9kb2MsCi0idG9saXN0KCkgLT4gbGlzdFxuXAotXG5cCi1Db252ZXJ0IGFycmF5IHRvIGFuIG9yZGluYXJ5IGxpc3Qgd2l0aCB0aGUgc2FtZSBpdGVtcy4iKTsKLQogc3RhdGljIFB5T2JqZWN0ICoKIGZyb21ieXRlcyhhcnJheW9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCiB7CkBAIC0xNDcxLDQ3ICsxNTk3LDUyIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2FycmF5LmFycmF5LmZyb21zdHJpbmcKKworICAgIGJ1ZmZlcjogUHlfYnVmZmVyKGFjY2VwdD17c3RyLCBidWZmZXJ9KQorICAgIC8KKworQXBwZW5kcyBpdGVtcyBmcm9tIHRoZSBzdHJpbmcsIGludGVycHJldGluZyBpdCBhcyBhbiBhcnJheSBvZiBtYWNoaW5lIHZhbHVlcywgYXMgaWYgaXQgaGFkIGJlZW4gcmVhZCBmcm9tIGEgZmlsZSB1c2luZyB0aGUgZnJvbWZpbGUoKSBtZXRob2QpLgorCitUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgZnJvbWJ5dGVzIGluc3RlYWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hcnJheV9mcm9tc3RyaW5nKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2FycmF5X2FycmF5X2Zyb21zdHJpbmdfaW1wbChhcnJheW9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzFjNGJhYTc3OWRmODRjZSBpbnB1dD1hMzM0MWE1MTJlMTFkNzczXSovCiB7Ci0gICAgUHlfYnVmZmVyIGJ1ZmZlcjsKICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKICAgICAgICAgICAgICJmcm9tc3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gVXNlIGZyb21ieXRlcygpIGluc3RlYWQuIiwgMikgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjpmcm9tc3RyaW5nIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZyb21ieXRlcyhzZWxmLCAmYnVmZmVyKTsKKyAgICByZXR1cm4gZnJvbWJ5dGVzKHNlbGYsIGJ1ZmZlcik7CiB9CiAKLVB5RG9jX1NUUlZBUihmcm9tc3RyaW5nX2RvYywKLSJmcm9tc3RyaW5nKHN0cmluZylcblwKLVxuXAotQXBwZW5kcyBpdGVtcyBmcm9tIHRoZSBzdHJpbmcsIGludGVycHJldGluZyBpdCBhcyBhbiBhcnJheSBvZiBtYWNoaW5lXG5cCi12YWx1ZXMsIGFzIGlmIGl0IGhhZCBiZWVuIHJlYWQgZnJvbSBhIGZpbGUgdXNpbmcgdGhlIGZyb21maWxlKCkgbWV0aG9kKS5cblwKLVxuXAotVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIGZyb21ieXRlcyBpbnN0ZWFkLiIpOworLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkuZnJvbWJ5dGVzCiAKKyAgICBidWZmZXI6IFB5X2J1ZmZlcgorICAgIC8KKworQXBwZW5kcyBpdGVtcyBmcm9tIHRoZSBzdHJpbmcsIGludGVycHJldGluZyBpdCBhcyBhbiBhcnJheSBvZiBtYWNoaW5lIHZhbHVlcywgYXMgaWYgaXQgaGFkIGJlZW4gcmVhZCBmcm9tIGEgZmlsZSB1c2luZyB0aGUgZnJvbWZpbGUoKSBtZXRob2QpLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXJyYXlfZnJvbWJ5dGVzKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2FycmF5X2FycmF5X2Zyb21ieXRlc19pbXBsKGFycmF5b2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmJ1ZmZlcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kOTg0MmM4Zjc1MTBhNTE2IGlucHV0PTJiYmYyYjUzZWJmY2M5ODhdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6ZnJvbWJ5dGVzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZyb21ieXRlcyhzZWxmLCAmYnVmZmVyKTsKKyAgICByZXR1cm4gZnJvbWJ5dGVzKHNlbGYsIGJ1ZmZlcik7CiB9CiAKLVB5RG9jX1NUUlZBUihmcm9tYnl0ZXNfZG9jLAotImZyb21ieXRlcyhieXRlc3RyaW5nKVxuXAotXG5cCi1BcHBlbmRzIGl0ZW1zIGZyb20gdGhlIHN0cmluZywgaW50ZXJwcmV0aW5nIGl0IGFzIGFuIGFycmF5IG9mIG1hY2hpbmVcblwKLXZhbHVlcywgYXMgaWYgaXQgaGFkIGJlZW4gcmVhZCBmcm9tIGEgZmlsZSB1c2luZyB0aGUgZnJvbWZpbGUoKSBtZXRob2QpLiIpOworLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkudG9ieXRlcwogCitDb252ZXJ0IHRoZSBhcnJheSB0byBhbiBhcnJheSBvZiBtYWNoaW5lIHZhbHVlcyBhbmQgcmV0dXJuIHRoZSBieXRlcyByZXByZXNlbnRhdGlvbi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X3RvYnl0ZXMoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCithcnJheV9hcnJheV90b2J5dGVzX2ltcGwoYXJyYXlvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODczMThlNGVkY2RjMmJiNiBpbnB1dD05MGVlNDk1Zjk2ZGUzNGY1XSovCiB7CiAgICAgaWYgKFB5X1NJWkUoc2VsZikgPD0gUFlfU1NJWkVfVF9NQVggLyBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemUpIHsKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfaXRlbSwKQEAgLTE1MjEsNDAgKzE2NTIsNDQgQEAKICAgICB9CiB9CiAKLVB5RG9jX1NUUlZBUih0b2J5dGVzX2RvYywKLSJ0b2J5dGVzKCkgLT4gYnl0ZXNcblwKLVxuXAotQ29udmVydCB0aGUgYXJyYXkgdG8gYW4gYXJyYXkgb2YgbWFjaGluZSB2YWx1ZXMgYW5kIHJldHVybiB0aGUgYnl0ZXNcblwKLXJlcHJlc2VudGF0aW9uLiIpOworLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkudG9zdHJpbmcKIAorQ29udmVydCB0aGUgYXJyYXkgdG8gYW4gYXJyYXkgb2YgbWFjaGluZSB2YWx1ZXMgYW5kIHJldHVybiB0aGUgYnl0ZXMgcmVwcmVzZW50YXRpb24uCisKK1RoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFVzZSB0b2J5dGVzIGluc3RlYWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hcnJheV90b3N0cmluZyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK2FycmF5X2FycmF5X3Rvc3RyaW5nX2ltcGwoYXJyYXlvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2Q2YmQ5Mjc0NWEyYzhmMyBpbnB1dD1iNmMwZGRlZTdiMzA0NTdlXSovCiB7CiAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCiAgICAgICAgICAgICAidG9zdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBVc2UgdG9ieXRlcygpIGluc3RlYWQuIiwgMikgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIGFycmF5X3RvYnl0ZXMoc2VsZiwgdW51c2VkKTsKKyAgICByZXR1cm4gYXJyYXlfYXJyYXlfdG9ieXRlc19pbXBsKHNlbGYpOwogfQogCi1QeURvY19TVFJWQVIodG9zdHJpbmdfZG9jLAotInRvc3RyaW5nKCkgLT4gYnl0ZXNcblwKLVxuXAotQ29udmVydCB0aGUgYXJyYXkgdG8gYW4gYXJyYXkgb2YgbWFjaGluZSB2YWx1ZXMgYW5kIHJldHVybiB0aGUgYnl0ZXNcblwKLXJlcHJlc2VudGF0aW9uLlxuXAotXG5cCi1UaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgdG9ieXRlcyBpbnN0ZWFkLiIpOworLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkuZnJvbXVuaWNvZGUKIAorICAgIHVzdHI6IFB5X1VOSUNPREUoemVyb2VzPVRydWUpCisgICAgLworCitFeHRlbmRzIHRoaXMgYXJyYXkgd2l0aCBkYXRhIGZyb20gdGhlIHVuaWNvZGUgc3RyaW5nIHVzdHIuCisKK1RoZSBhcnJheSBtdXN0IGJlIGEgdW5pY29kZSB0eXBlIGFycmF5OyBvdGhlcndpc2UgYSBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KK1VzZSBhcnJheS5mcm9tYnl0ZXModXN0ci5lbmNvZGUoLi4uKSkgdG8gYXBwZW5kIFVuaWNvZGUgZGF0YSB0byBhbiBhcnJheSBvZgorc29tZSBvdGhlciB0eXBlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXJyYXlfZnJvbXVuaWNvZGUoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXJyYXlfYXJyYXlfZnJvbXVuaWNvZGVfaW1wbChhcnJheW9iamVjdCAqc2VsZiwgUHlfVU5JQ09ERSAqdXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfY2xlYW5fdCB1c3RyX2xlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lYmI3MmZjMTY5NzVlMDZkIGlucHV0PTE1MGYwMDU2NmZmYmNhNmVdKi8KIHsKLSAgICBQeV9VTklDT0RFICp1c3RyOwotICAgIFB5X3NzaXplX3QgbjsKICAgICBjaGFyIHR5cGVjb2RlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ1Izpmcm9tdW5pY29kZSIsICZ1c3RyLCAmbikpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIHR5cGVjb2RlID0gc2VsZi0+b2JfZGVzY3ItPnR5cGVjb2RlOwogICAgIGlmICh0eXBlY29kZSAhPSAndScpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC0xNTYyLDI5ICsxNjk3LDMwIEBACiAgICAgICAgICAgICAidW5pY29kZSB0eXBlIGFycmF5cyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKG4gPiAwKSB7CisgICAgaWYgKHVzdHJfbGVuZ3RoID4gMCkgewogICAgICAgICBQeV9zc2l6ZV90IG9sZF9zaXplID0gUHlfU0laRShzZWxmKTsKLSAgICAgICAgaWYgKGFycmF5X3Jlc2l6ZShzZWxmLCBvbGRfc2l6ZSArIG4pID09IC0xKQorICAgICAgICBpZiAoYXJyYXlfcmVzaXplKHNlbGYsIG9sZF9zaXplICsgdXN0cl9sZW5ndGgpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIG1lbWNweShzZWxmLT5vYl9pdGVtICsgb2xkX3NpemUgKiBzaXplb2YoUHlfVU5JQ09ERSksCi0gICAgICAgICAgICAgICB1c3RyLCBuICogc2l6ZW9mKFB5X1VOSUNPREUpKTsKKyAgICAgICAgICAgICAgIHVzdHIsIHVzdHJfbGVuZ3RoICogc2l6ZW9mKFB5X1VOSUNPREUpKTsKICAgICB9CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihmcm9tdW5pY29kZV9kb2MsCi0iZnJvbXVuaWNvZGUodXN0cilcblwKLVxuXAotRXh0ZW5kcyB0aGlzIGFycmF5IHdpdGggZGF0YSBmcm9tIHRoZSB1bmljb2RlIHN0cmluZyB1c3RyLlxuXAotVGhlIGFycmF5IG11c3QgYmUgYSB1bmljb2RlIHR5cGUgYXJyYXk7IG90aGVyd2lzZSBhIFZhbHVlRXJyb3JcblwKLWlzIHJhaXNlZC4gIFVzZSBhcnJheS5mcm9tYnl0ZXModXN0ci5lbmNvZGUoLi4uKSkgdG9cblwKLWFwcGVuZCBVbmljb2RlIGRhdGEgdG8gYW4gYXJyYXkgb2Ygc29tZSBvdGhlciB0eXBlLiIpOworLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkudG91bmljb2RlCiAKK0V4dGVuZHMgdGhpcyBhcnJheSB3aXRoIGRhdGEgZnJvbSB0aGUgdW5pY29kZSBzdHJpbmcgdXN0ci4KKworQ29udmVydCB0aGUgYXJyYXkgdG8gYSB1bmljb2RlIHN0cmluZy4gIFRoZSBhcnJheSBtdXN0IGJlIGEgdW5pY29kZSB0eXBlIGFycmF5Oworb3RoZXJ3aXNlIGEgVmFsdWVFcnJvciBpcyByYWlzZWQuICBVc2UgYXJyYXkudG9ieXRlcygpLmRlY29kZSgpIHRvIG9idGFpbiBhCit1bmljb2RlIHN0cmluZyBmcm9tIGFuIGFycmF5IG9mIHNvbWUgb3RoZXIgdHlwZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X3RvdW5pY29kZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK2FycmF5X2FycmF5X3RvdW5pY29kZV9pbXBsKGFycmF5b2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA4ZTQ0MjM3ODMzNmUxZWYgaW5wdXQ9MTI3MjQyZWViZTcwYjY2ZF0qLwogewogICAgIGNoYXIgdHlwZWNvZGU7CiAgICAgdHlwZWNvZGUgPSBzZWxmLT5vYl9kZXNjci0+dHlwZWNvZGU7CkBAIC0xNTk2LDcwICsxNzMyLDI0IEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tVW5pY29kZSgoUHlfVU5JQ09ERSAqKSBzZWxmLT5vYl9pdGVtLCBQeV9TSVpFKHNlbGYpKTsKIH0KIAotUHlEb2NfU1RSVkFSKHRvdW5pY29kZV9kb2MsCi0idG91bmljb2RlKCkgLT4gdW5pY29kZVxuXAotXG5cCi1Db252ZXJ0IHRoZSBhcnJheSB0byBhIHVuaWNvZGUgc3RyaW5nLiAgVGhlIGFycmF5IG11c3QgYmVcblwKLWEgdW5pY29kZSB0eXBlIGFycmF5OyBvdGhlcndpc2UgYSBWYWx1ZUVycm9yIGlzIHJhaXNlZC4gIFVzZVxuXAotYXJyYXkudG9ieXRlcygpLmRlY29kZSgpIHRvIG9idGFpbiBhIHVuaWNvZGUgc3RyaW5nIGZyb21cblwKLWFuIGFycmF5IG9mIHNvbWUgb3RoZXIgdHlwZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2FycmF5LmFycmF5Ll9fc2l6ZW9mX18KIAorU2l6ZSBvZiB0aGUgYXJyYXkgaW4gbWVtb3J5LCBpbiBieXRlcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X3NpemVvZihhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK2FycmF5X2FycmF5X19fc2l6ZW9mX19faW1wbChhcnJheW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kOGUxYzYxZWJiZTNlYWVkIGlucHV0PTgwNTU4NjU2NWJmMmIzYzZdKi8KIHsKICAgICBQeV9zc2l6ZV90IHJlczsKLSAgICByZXMgPSBzaXplb2YoYXJyYXlvYmplY3QpICsgc2VsZi0+YWxsb2NhdGVkICogc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOworICAgIHJlcyA9IF9QeU9iamVjdF9TSVpFKFB5X1RZUEUoc2VsZikpICsgc2VsZi0+YWxsb2NhdGVkICogc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKIH0KIAotUHlEb2NfU1RSVkFSKHNpemVvZl9kb2MsCi0iX19zaXplb2ZfXygpIC0+IGludFxuXAotXG5cCi1TaXplIG9mIHRoZSBhcnJheSBpbiBtZW1vcnksIGluIGJ5dGVzLiIpOwotCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiBQaWNrbGluZyBzdXBwb3J0ICoqKioqKioqKioqKioqKioqKioqKioqKi8KIAotZW51bSBtYWNoaW5lX2Zvcm1hdF9jb2RlIHsKLSAgICBVTktOT1dOX0ZPUk1BVCA9IC0xLAotICAgIC8qIFVOS05PV05fRk9STUFUIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbWFjaGluZSBmb3JtYXQgZm9yIGFuCi0gICAgICogYXJyYXkgdHlwZSBjb2RlIGNhbm5vdCBiZSBpbnRlcnByZXRlZC4gV2hlbiB0aGlzIG9jY3VycywgYSBsaXN0IG9mCi0gICAgICogUHl0aG9uIG9iamVjdHMgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGFycmF5Ci0gICAgICogaW5zdGVhZCBvZiB1c2luZyB0aGUgbWVtb3J5IGNvbnRlbnQgb2YgdGhlIGFycmF5IGRpcmVjdGx5LiBJbiB0aGF0Ci0gICAgICogY2FzZSwgdGhlIGFycmF5X3JlY29uc3RydWN0b3IgbWVjaGFuaXNtIGlzIGJ5cGFzc2VkIGNvbXBsZXRlbHksIGFuZAotICAgICAqIHRoZSBzdGFuZGFyZCBhcnJheSBjb25zdHJ1Y3RvciBpcyB1c2VkIGluc3RlYWQuCi0gICAgICoKLSAgICAgKiBUaGlzIGlzIHdpbGwgbW9zdCBsaWtlbHkgb2NjdXIgd2hlbiB0aGUgbWFjaGluZSBkb2Vzbid0IHVzZSBJRUVFCi0gICAgICogZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KLSAgICAgKi8KLQotICAgIFVOU0lHTkVEX0lOVDggPSAwLAotICAgIFNJR05FRF9JTlQ4ID0gMSwKLSAgICBVTlNJR05FRF9JTlQxNl9MRSA9IDIsCi0gICAgVU5TSUdORURfSU5UMTZfQkUgPSAzLAotICAgIFNJR05FRF9JTlQxNl9MRSA9IDQsCi0gICAgU0lHTkVEX0lOVDE2X0JFID0gNSwKLSAgICBVTlNJR05FRF9JTlQzMl9MRSA9IDYsCi0gICAgVU5TSUdORURfSU5UMzJfQkUgPSA3LAotICAgIFNJR05FRF9JTlQzMl9MRSA9IDgsCi0gICAgU0lHTkVEX0lOVDMyX0JFID0gOSwKLSAgICBVTlNJR05FRF9JTlQ2NF9MRSA9IDEwLAotICAgIFVOU0lHTkVEX0lOVDY0X0JFID0gMTEsCi0gICAgU0lHTkVEX0lOVDY0X0xFID0gMTIsCi0gICAgU0lHTkVEX0lOVDY0X0JFID0gMTMsCi0gICAgSUVFRV83NTRfRkxPQVRfTEUgPSAxNCwKLSAgICBJRUVFXzc1NF9GTE9BVF9CRSA9IDE1LAotICAgIElFRUVfNzU0X0RPVUJMRV9MRSA9IDE2LAotICAgIElFRUVfNzU0X0RPVUJMRV9CRSA9IDE3LAotICAgIFVURjE2X0xFID0gMTgsCi0gICAgVVRGMTZfQkUgPSAxOSwKLSAgICBVVEYzMl9MRSA9IDIwLAotICAgIFVURjMyX0JFID0gMjEKLX07Ci0jZGVmaW5lIE1BQ0hJTkVfRk9STUFUX0NPREVfTUlOIDAKLSNkZWZpbmUgTUFDSElORV9GT1JNQVRfQ09ERV9NQVggMjEKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBtZm9ybWF0ZGVzY3IgewogICAgIHNpemVfdCBzaXplOwogICAgIGludCBpc19zaWduZWQ7CkBAIC0xODM1LDIxICsxOTI1LDI5IEBACiAgKiBUaGlzIGZ1bmN0aW9ucyBpcyBhIHNwZWNpYWwgY29uc3RydWN0b3IgdXNlZCB3aGVuIHVucGlja2xpbmcgYW4gYXJyYXkuIEl0CiAgKiBwcm92aWRlcyBhIHBvcnRhYmxlIHdheSB0byByZWJ1aWxkIGFuIGFycmF5IGZyb20gaXRzIG1lbW9yeSByZXByZXNlbnRhdGlvbi4KICAqLworLypbY2xpbmljIGlucHV0XQorYXJyYXkuX2FycmF5X3JlY29uc3RydWN0b3IKKworICAgIGFycmF5dHlwZTogb2JqZWN0KHR5cGU9IlB5VHlwZU9iamVjdCAqIikKKyAgICB0eXBlY29kZTogaW50KGFjY2VwdD17c3RyfSkKKyAgICBtZm9ybWF0X2NvZGU6IGludCh0eXBlPSJlbnVtIG1hY2hpbmVfZm9ybWF0X2NvZGUiKQorICAgIGl0ZW1zOiBvYmplY3QKKyAgICAvCisKK0ludGVybmFsLiBVc2VkIGZvciBwaWNrbGluZyBzdXBwb3J0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXJyYXlfcmVjb25zdHJ1Y3RvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithcnJheV9fYXJyYXlfcmVjb25zdHJ1Y3Rvcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5VHlwZU9iamVjdCAqYXJyYXl0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9mb3JtYXRfY29kZSBtZm9ybWF0X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lMDUyNjMxNDFiYTI4MzY1IGlucHV0PTI0NjRkYzhmNGM3NzM2YjVdKi8KIHsKLSAgICBQeVR5cGVPYmplY3QgKmFycmF5dHlwZTsKLSAgICBQeU9iamVjdCAqaXRlbXM7CiAgICAgUHlPYmplY3QgKmNvbnZlcnRlZF9pdGVtczsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGludCB0eXBlY29kZTsKLSAgICBlbnVtIG1hY2hpbmVfZm9ybWF0X2NvZGUgbWZvcm1hdF9jb2RlOwogICAgIHN0cnVjdCBhcnJheWRlc2NyICpkZXNjcjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT0NpTzphcnJheS5fYXJyYXlfcmVjb25zdHJ1Y3RvciIsCi0gICAgICAgICAgICAgICAgICAgICZhcnJheXR5cGUsICZ0eXBlY29kZSwgJm1mb3JtYXRfY29kZSwgJml0ZW1zKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoIVB5VHlwZV9DaGVjayhhcnJheXR5cGUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAiZmlyc3QgYXJndW1lbnQgbXVzdCBhIHR5cGUgb2JqZWN0LCBub3QgJS4yMDBzIiwKQEAgLTE5OTIsNyArMjA5MCw3IEBACiAgICAgICAgICAqIHRoYXQgZml0cyBiZXR0ZXIuIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBhcnJheSB3aXRoIG5hcnJvd2VyCiAgICAgICAgICAqIG9yIHdpZGVyIGVsZW1lbnRzLgogICAgICAgICAgKgotICAgICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYSAzMi1iaXQgbWFjaGluZSBwaWNrbGVzIGEgTC1jb2RlIGFycmF5IG9mCisgICAgICAgICAqIEZvciBleGFtcGxlLCBpZiBhIDMyLWJpdCBtYWNoaW5lIHBpY2tsZXMgYW4gTC1jb2RlIGFycmF5IG9mCiAgICAgICAgICAqIHVuc2lnbmVkIGxvbmdzLCB0aGVuIHRoZSBhcnJheSB3aWxsIGJlIHVucGlja2xlZCBieSA2NC1iaXQKICAgICAgICAgICogbWFjaGluZSBhcyBhbiBJLWNvZGUgYXJyYXkgb2YgdW5zaWduZWQgaW50cy4KICAgICAgICAgICoKQEAgLTIwMDAsNyArMjA5OCw3IEBACiAgICAgICAgICAqLwogICAgICAgICBmb3IgKGRlc2NyID0gZGVzY3JpcHRvcnM7IGRlc2NyLT50eXBlY29kZSAhPSAnXDAnOyBkZXNjcisrKSB7CiAgICAgICAgICAgICBpZiAoZGVzY3ItPmlzX2ludGVnZXJfdHlwZSAmJgotICAgICAgICAgICAgICAgIGRlc2NyLT5pdGVtc2l6ZSA9PSBtZl9kZXNjci5zaXplICYmCisgICAgICAgICAgICAgICAgKHNpemVfdClkZXNjci0+aXRlbXNpemUgPT0gbWZfZGVzY3Iuc2l6ZSAmJgogICAgICAgICAgICAgICAgIGRlc2NyLT5pc19zaWduZWQgPT0gbWZfZGVzY3IuaXNfc2lnbmVkKQogICAgICAgICAgICAgICAgIHR5cGVjb2RlID0gZGVzY3ItPnR5cGVjb2RlOwogICAgICAgICB9CkBAIC0yMDM4LDEzICsyMTM2LDIzIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXJyYXkuYXJyYXkuX19yZWR1Y2VfZXhfXworCisgICAgdmFsdWU6IG9iamVjdAorICAgIC8KKworUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X3JlZHVjZV9leChhcnJheW9iamVjdCAqYXJyYXksIFB5T2JqZWN0ICp2YWx1ZSkKK2FycmF5X2FycmF5X19fcmVkdWNlX2V4X18oYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wNTFlMGE2MTc1ZDBlZGRiIGlucHV0PWMzNmMzZjg1ZGU3ZGY2Y2RdKi8KIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIFB5T2JqZWN0ICphcnJheV9zdHI7Ci0gICAgaW50IHR5cGVjb2RlID0gYXJyYXktPm9iX2Rlc2NyLT50eXBlY29kZTsKKyAgICBpbnQgdHlwZWNvZGUgPSBzZWxmLT5vYl9kZXNjci0+dHlwZWNvZGU7CiAgICAgaW50IG1mb3JtYXRfY29kZTsKICAgICBzdGF0aWMgUHlPYmplY3QgKmFycmF5X3JlY29uc3RydWN0b3IgPSBOVUxMOwogICAgIGxvbmcgcHJvdG9jb2w7CkBAIC0yMDcyLDcgKzIxODAsNyBAQAogICAgIGlmIChwcm90b2NvbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGRpY3QgPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKWFycmF5LCAmUHlJZF9fX2RpY3RfXyk7CisgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfX19kaWN0X18pOwogICAgIGlmIChkaWN0ID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjA5NSwzMiArMjIwMywzMCBAQAogICAgICAgICAgKiBjb2VyY2luZyB1bmljb2RlIG9iamVjdHMgdG8gYnl0ZXMgaW4gYXJyYXlfcmVjb25zdHJ1Y3Rvci4KICAgICAgICAgICovCiAgICAgICAgIFB5T2JqZWN0ICpsaXN0OwotICAgICAgICBsaXN0ID0gYXJyYXlfdG9saXN0KGFycmF5LCBOVUxMKTsKKyAgICAgICAgbGlzdCA9IGFycmF5X2FycmF5X3RvbGlzdF9pbXBsKHNlbGYpOwogICAgICAgICBpZiAobGlzdCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBQeV9CdWlsZFZhbHVlKAotICAgICAgICAgICAgIk8oQ08pTyIsIFB5X1RZUEUoYXJyYXkpLCB0eXBlY29kZSwgbGlzdCwgZGljdCk7CisgICAgICAgICAgICAiTyhDTylPIiwgUHlfVFlQRShzZWxmKSwgdHlwZWNvZGUsIGxpc3QsIGRpY3QpOwogICAgICAgICBQeV9ERUNSRUYobGlzdCk7CiAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBhcnJheV9zdHIgPSBhcnJheV90b2J5dGVzKGFycmF5LCBOVUxMKTsKKyAgICBhcnJheV9zdHIgPSBhcnJheV9hcnJheV90b2J5dGVzX2ltcGwoc2VsZik7CiAgICAgaWYgKGFycmF5X3N0ciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoCi0gICAgICAgICJPKE9DaU4pTyIsIGFycmF5X3JlY29uc3RydWN0b3IsIFB5X1RZUEUoYXJyYXkpLCB0eXBlY29kZSwKKyAgICAgICAgIk8oT0NpTilPIiwgYXJyYXlfcmVjb25zdHJ1Y3RvciwgUHlfVFlQRShzZWxmKSwgdHlwZWNvZGUsCiAgICAgICAgIG1mb3JtYXRfY29kZSwgYXJyYXlfc3RyLCBkaWN0KTsKICAgICBQeV9ERUNSRUYoZGljdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUHlEb2NfU1RSVkFSKHJlZHVjZV9kb2MsICJSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nLiIpOwotCiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfZ2V0X3R5cGVjb2RlKGFycmF5b2JqZWN0ICphLCB2b2lkICpjbG9zdXJlKQogewpAQCAtMjE0Myw1NSArMjI0OSwzMSBAQAogfTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIGFycmF5X21ldGhvZHNbXSA9IHsKLSAgICB7ImFwcGVuZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilhcnJheV9hcHBlbmQsICAgICAgTUVUSF9PLAotICAgICBhcHBlbmRfZG9jfSwKLSAgICB7ImJ1ZmZlcl9pbmZvIiwgICAgIChQeUNGdW5jdGlvbilhcnJheV9idWZmZXJfaW5mbywgTUVUSF9OT0FSR1MsCi0gICAgIGJ1ZmZlcl9pbmZvX2RvY30sCi0gICAgeyJieXRlc3dhcCIsICAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfYnl0ZXN3YXAsICAgIE1FVEhfTk9BUkdTLAotICAgICBieXRlc3dhcF9kb2N9LAotICAgIHsiX19jb3B5X18iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X2NvcHksICAgICAgICBNRVRIX05PQVJHUywKLSAgICAgY29weV9kb2N9LAotICAgIHsiY291bnQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X2NvdW50LCAgICAgICBNRVRIX08sCi0gICAgIGNvdW50X2RvY30sCi0gICAgeyJfX2RlZXBjb3B5X18iLCAgICAoUHlDRnVuY3Rpb24pYXJyYXlfY29weSwgICAgICAgIE1FVEhfTywKLSAgICAgY29weV9kb2N9LAotICAgIHsiZXh0ZW5kIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X2V4dGVuZCwgICAgICBNRVRIX08sCi0gICAgIGV4dGVuZF9kb2N9LAotICAgIHsiZnJvbWZpbGUiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X2Zyb21maWxlLCAgICBNRVRIX1ZBUkFSR1MsCi0gICAgIGZyb21maWxlX2RvY30sCi0gICAgeyJmcm9tbGlzdCIsICAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfZnJvbWxpc3QsICAgIE1FVEhfTywKLSAgICAgZnJvbWxpc3RfZG9jfSwKLSAgICB7ImZyb21zdHJpbmciLCAgICAgIChQeUNGdW5jdGlvbilhcnJheV9mcm9tc3RyaW5nLCAgTUVUSF9WQVJBUkdTLAotICAgICBmcm9tc3RyaW5nX2RvY30sCi0gICAgeyJmcm9tYnl0ZXMiLCAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfZnJvbWJ5dGVzLCAgIE1FVEhfVkFSQVJHUywKLSAgICAgZnJvbWJ5dGVzX2RvY30sCi0gICAgeyJmcm9tdW5pY29kZSIsICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfZnJvbXVuaWNvZGUsIE1FVEhfVkFSQVJHUywKLSAgICAgZnJvbXVuaWNvZGVfZG9jfSwKLSAgICB7ImluZGV4IiwgICAgICAgICAgIChQeUNGdW5jdGlvbilhcnJheV9pbmRleCwgICAgICAgTUVUSF9PLAotICAgICBpbmRleF9kb2N9LAotICAgIHsiaW5zZXJ0IiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X2luc2VydCwgICAgICBNRVRIX1ZBUkFSR1MsCi0gICAgIGluc2VydF9kb2N9LAotICAgIHsicG9wIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3BvcCwgICAgICAgICBNRVRIX1ZBUkFSR1MsCi0gICAgIHBvcF9kb2N9LAotICAgIHsiX19yZWR1Y2VfZXhfXyIsICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3JlZHVjZV9leCwgICBNRVRIX08sCi0gICAgIHJlZHVjZV9kb2N9LAotICAgIHsicmVtb3ZlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3JlbW92ZSwgICAgICBNRVRIX08sCi0gICAgIHJlbW92ZV9kb2N9LAotICAgIHsicmV2ZXJzZSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3JldmVyc2UsICAgICBNRVRIX05PQVJHUywKLSAgICAgcmV2ZXJzZV9kb2N9LAotICAgIHsidG9maWxlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3RvZmlsZSwgICAgICBNRVRIX08sCi0gICAgIHRvZmlsZV9kb2N9LAotICAgIHsidG9saXN0IiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3RvbGlzdCwgICAgICBNRVRIX05PQVJHUywKLSAgICAgdG9saXN0X2RvY30sCi0gICAgeyJ0b3N0cmluZyIsICAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfdG9zdHJpbmcsICAgIE1FVEhfTk9BUkdTLAotICAgICB0b3N0cmluZ19kb2N9LAotICAgIHsidG9ieXRlcyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3RvYnl0ZXMsICAgICBNRVRIX05PQVJHUywKLSAgICAgdG9ieXRlc19kb2N9LAotICAgIHsidG91bmljb2RlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3RvdW5pY29kZSwgICBNRVRIX05PQVJHUywKLSAgICAgdG91bmljb2RlX2RvY30sCi0gICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAotICAgICBzaXplb2ZfZG9jfSwKLSAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICAgIEFSUkFZX0FSUkFZX0FQUEVORF9NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWV9CVUZGRVJfSU5GT19NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWV9CWVRFU1dBUF9NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWV9fX0NPUFlfX19NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWV9DT1VOVF9NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWV9fX0RFRVBDT1BZX19fTUVUSE9EREVGCisgICAgQVJSQVlfQVJSQVlfRVhURU5EX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX0ZST01GSUxFX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX0ZST01MSVNUX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX0ZST01TVFJJTkdfTUVUSE9EREVGCisgICAgQVJSQVlfQVJSQVlfRlJPTUJZVEVTX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX0ZST01VTklDT0RFX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX0lOREVYX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX0lOU0VSVF9NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWV9QT1BfTUVUSE9EREVGCisgICAgQVJSQVlfQVJSQVlfX19SRURVQ0VfRVhfX19NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWV9SRU1PVkVfTUVUSE9EREVGCisgICAgQVJSQVlfQVJSQVlfUkVWRVJTRV9NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWV9UT0ZJTEVfTUVUSE9EREVGCisgICAgQVJSQVlfQVJSQVlfVE9MSVNUX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX1RPU1RSSU5HX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX1RPQllURVNfTUVUSE9EREVGCisgICAgQVJSQVlfQVJSQVlfVE9VTklDT0RFX01FVEhPRERFRgorICAgIEFSUkFZX0FSUkFZX19fU0laRU9GX19fTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9ICAvKiBzZW50aW5lbCAqLwogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIyMDcsOSArMjI4OSw5IEBACiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiYXJyYXkoJyVjJykiLCAoaW50KXR5cGVjb2RlKTsKICAgICB9CiAgICAgaWYgKHR5cGVjb2RlID09ICd1JykgewotICAgICAgICB2ID0gYXJyYXlfdG91bmljb2RlKGEsIE5VTEwpOworICAgICAgICB2ID0gYXJyYXlfYXJyYXlfdG91bmljb2RlX2ltcGwoYSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdiA9IGFycmF5X3RvbGlzdChhLCBOVUxMKTsKKyAgICAgICAgdiA9IGFycmF5X2FycmF5X3RvbGlzdF9pbXBsKGEpOwogICAgIH0KICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI0NDYsNyArMjUyOCwxMSBAQAogc3RhdGljIGludAogYXJyYXlfYnVmZmVyX2dldGJ1ZihhcnJheW9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICp2aWV3LCBpbnQgZmxhZ3MpCiB7Ci0gICAgaWYgKHZpZXc9PU5VTEwpIGdvdG8gZmluaXNoOworICAgIGlmICh2aWV3ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0J1ZmZlckVycm9yLAorICAgICAgICAgICAgImFycmF5X2J1ZmZlcl9nZXRidWY6IHZpZXc9PU5VTEwgYXJndW1lbnQgaXMgb2Jzb2xldGUiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIHZpZXctPmJ1ZiA9ICh2b2lkICopc2VsZi0+b2JfaXRlbTsKICAgICB2aWV3LT5vYmogPSAoUHlPYmplY3QqKXNlbGY7CkBAIC0yNDc2LDcgKzI1NjIsNiBAQAogI2VuZGlmCiAgICAgfQogCi0gZmluaXNoOgogICAgIHNlbGYtPm9iX2V4cG9ydHMrKzsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI1ODYsMTUgKzI2NzEsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoaW5pdGlhbCAhPSBOVUxMICYmIChQeUJ5dGVBcnJheV9DaGVjayhpbml0aWFsKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQ2hlY2soaW5pdGlhbCkpKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnRfaW5pdGlhbCwgKnY7Ci0gICAgICAgICAgICAgICAgdF9pbml0aWFsID0gUHlUdXBsZV9QYWNrKDEsIGluaXRpYWwpOwotICAgICAgICAgICAgICAgIGlmICh0X2luaXRpYWwgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2ID0gYXJyYXlfZnJvbWJ5dGVzKChhcnJheW9iamVjdCAqKWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfaW5pdGlhbCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHRfaW5pdGlhbCk7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnY7CisgICAgICAgICAgICAgICAgdiA9IGFycmF5X2FycmF5X2Zyb21ieXRlcygoYXJyYXlvYmplY3QgKilhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCk7CiAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjc2NiwxNiArMjg0NSwxMCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKiogQXJyYXkgSXRlcmF0b3IgKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECi0gICAgUHlfc3NpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg7Ci0gICAgYXJyYXlvYmplY3QgICAgICAgICAgICAgICAgICphbzsKLSAgICBQeU9iamVjdCAgICAgICAgICAgICAgICAgICAgKiAoKmdldGl0ZW0pKHN0cnVjdCBhcnJheW9iamVjdCAqLCBQeV9zc2l6ZV90KTsKLX0gYXJyYXlpdGVyb2JqZWN0OwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFB5QXJyYXlJdGVyX1R5cGU7Ci0KLSNkZWZpbmUgUHlBcnJheUl0ZXJfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlB5QXJyYXlJdGVyX1R5cGUpCisvKltjbGluaWMgaW5wdXRdCitjbGFzcyBhcnJheS5hcnJheWl0ZXJhdG9yICJhcnJheWl0ZXJvYmplY3QgKiIgIiZQeUFycmF5SXRlcl9UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NWFlZmQyZDc0ZDhjOGUzMF0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfaXRlcihhcnJheW9iamVjdCAqYW8pCkBAIC0yODIzLDMzICsyODk2LDQ3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1hcnJheWl0ZXJfcmVkdWNlKGFycmF5aXRlcm9iamVjdCAqaXQpCi17Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTyluIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+YW8sIGl0LT5pbmRleCk7Ci19CisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheWl0ZXJhdG9yLl9fcmVkdWNlX18KKworUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5aXRlcl9zZXRzdGF0ZShhcnJheWl0ZXJvYmplY3QgKml0LCBQeU9iamVjdCAqc3RhdGUpCithcnJheV9hcnJheWl0ZXJhdG9yX19fcmVkdWNlX19faW1wbChhcnJheWl0ZXJvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Nzg5OGE1MmU4ZTY2ZTAxNiBpbnB1dD1hMDYyZWExZTk5NTE0MTdhXSovCit7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTyluIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5hbywgc2VsZi0+aW5kZXgpOworfQorCisvKltjbGluaWMgaW5wdXRdCithcnJheS5hcnJheWl0ZXJhdG9yLl9fc2V0c3RhdGVfXworCisgICAgc3RhdGU6IG9iamVjdAorICAgIC8KKworU2V0IHN0YXRlIGluZm9ybWF0aW9uIGZvciB1bnBpY2tsaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlpdGVyYXRvcl9fX3NldHN0YXRlX18oYXJyYXlpdGVyb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RhdGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Mzk3ZGE5OTA0ZTQ0M2NiZSBpbnB1dD1mNDdkNWNlZGExOWU3ODdiXSovCiB7CiAgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TG9uZ19Bc1NzaXplX3Qoc3RhdGUpOwogICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoaW5kZXggPCAwKQogICAgICAgICBpbmRleCA9IDA7Ci0gICAgZWxzZSBpZiAoaW5kZXggPiBQeV9TSVpFKGl0LT5hbykpCi0gICAgICAgIGluZGV4ID0gUHlfU0laRShpdC0+YW8pOyAvKiBpdGVyYXRvciBleGhhdXN0ZWQgKi8KLSAgICBpdC0+aW5kZXggPSBpbmRleDsKKyAgICBlbHNlIGlmIChpbmRleCA+IFB5X1NJWkUoc2VsZi0+YW8pKQorICAgICAgICBpbmRleCA9IFB5X1NJWkUoc2VsZi0+YW8pOyAvKiBpdGVyYXRvciBleGhhdXN0ZWQgKi8KKyAgICBzZWxmLT5pbmRleCA9IGluZGV4OwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIoc2V0c3RhdGVfZG9jLCAiU2V0IHN0YXRlIGluZm9ybWF0aW9uIGZvciB1bnBpY2tsaW5nLiIpOwogc3RhdGljIFB5TWV0aG9kRGVmIGFycmF5aXRlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJfX3JlZHVjZV9fIiwgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlpdGVyX3JlZHVjZSwgTUVUSF9OT0FSR1MsCi0gICAgIHJlZHVjZV9kb2N9LAotICAgIHsiX19zZXRzdGF0ZV9fIiwgICAgKFB5Q0Z1bmN0aW9uKWFycmF5aXRlcl9zZXRzdGF0ZSwgTUVUSF9PLAotICAgICBzZXRzdGF0ZV9kb2N9LAorICAgIEFSUkFZX0FSUkFZSVRFUkFUT1JfX19SRURVQ0VfX19NRVRIT0RERUYKKyAgICBBUlJBWV9BUlJBWUlURVJBVE9SX19fU0VUU1RBVEVfX19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI4OTAsMzkgKzI5NzcsMjEgQEAKIAogLyogTm8gZnVuY3Rpb25zIGluIGFycmF5IG1vZHVsZS4gKi8KIHN0YXRpYyBQeU1ldGhvZERlZiBhX21ldGhvZHNbXSA9IHsKLSAgICB7Il9hcnJheV9yZWNvbnN0cnVjdG9yIiwgYXJyYXlfcmVjb25zdHJ1Y3RvciwgTUVUSF9WQVJBUkdTLAotICAgICBQeURvY19TVFIoIkludGVybmFsLiBVc2VkIGZvciBwaWNrbGluZyBzdXBwb3J0LiIpfSwKKyAgICBBUlJBWV9fQVJSQVlfUkVDT05TVFJVQ1RPUl9NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTCwgMCwgTlVMTH0gICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCi1zdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGFycmF5bW9kdWxlID0gewotICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAiYXJyYXkiLAotICAgIG1vZHVsZV9kb2MsCi0gICAgLTEsCi0gICAgYV9tZXRob2RzLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKLX07Ci0KLQotUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9hcnJheSh2b2lkKQorc3RhdGljIGludAorYXJyYXlfbW9kZXhlYyhQeU9iamVjdCAqbSkKIHsKLSAgICBQeU9iamVjdCAqbTsKICAgICBjaGFyIGJ1ZmZlcltQeV9BUlJBWV9MRU5HVEgoZGVzY3JpcHRvcnMpXSwgKnA7CiAgICAgUHlPYmplY3QgKnR5cGVjb2RlczsKICAgICBQeV9zc2l6ZV90IHNpemUgPSAwOwogICAgIHN0cnVjdCBhcnJheWRlc2NyICpkZXNjcjsKIAogICAgIGlmIChQeVR5cGVfUmVhZHkoJkFycmF5dHlwZSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIFB5X1RZUEUoJlB5QXJyYXlJdGVyX1R5cGUpID0gJlB5VHlwZV9UeXBlOwotICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJmFycmF5bW9kdWxlKTsKLSAgICBpZiAobSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmQXJyYXl0eXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkFycmF5VHlwZSIsIChQeU9iamVjdCAqKSZBcnJheXR5cGUpOwpAQCAtMjk0NSw1ICszMDE0LDMwIEBACiAgICAgICAgIFB5X0RFQ1JFRihtKTsKICAgICAgICAgbSA9IE5VTEw7CiAgICAgfQotICAgIHJldHVybiBtOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBhcnJheXNsb3RzW10gPSB7CisgICAge1B5X21vZF9leGVjLCBhcnJheV9tb2RleGVjfSwKKyAgICB7MCwgTlVMTH0KK307CisKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBhcnJheW1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgImFycmF5IiwKKyAgICBtb2R1bGVfZG9jLAorICAgIDAsCisgICAgYV9tZXRob2RzLAorICAgIGFycmF5c2xvdHMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9hcnJheSh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZhcnJheW1vZHVsZSk7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jIGIvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYwppbmRleCBiOWMzNDRhLi4zY2RmMmQ3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKQEAgLTYwLDcgKzYwLDcgQEAKICAgICBtb2RzdGF0ZS0+bmNhbGxiYWNrcyA9IDA7CiB9CiAKLS8qIEluc3RhbGxlZCBpbnRvIHB5dGhvbnJ1bi5jJ3MgYXRleGl0IG1lY2hhbmlzbSAqLworLyogSW5zdGFsbGVkIGludG8gcHlsaWZlY3ljbGUuYydzIGF0ZXhpdCBtZWNoYW5pc20gKi8KIAogc3RhdGljIHZvaWQKIGF0ZXhpdF9jYWxsZnVuY3Modm9pZCkKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgICAgIGlmIChleGNfdHlwZSkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihleGNfdHlwZSk7CiAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihleGNfdmFsdWUpOwotICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoZXhjX3RiKTsgICAgCisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihleGNfdGIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4Y190eXBlLCAmZXhjX3ZhbHVlLCAmZXhjX3RiKTsKICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TeXN0ZW1FeGl0KSkgewpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICJyZWdpc3RlcigpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIik7Ci0gICAgICAgIHJldHVybiBOVUxMOyAKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgZnVuYyA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7CkBAIC0xNTksNyArMTU5LDcgQEAKIAogICAgIG5ld19jYWxsYmFjayA9IFB5TWVtX01hbGxvYyhzaXplb2YoYXRleGl0X2NhbGxiYWNrKSk7CiAgICAgaWYgKG5ld19jYWxsYmFjayA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsgICAKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKICAgICBuZXdfY2FsbGJhY2stPmFyZ3MgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDEsIFB5VHVwbGVfR0VUX1NJWkUoYXJncykpOwogICAgIGlmIChuZXdfY2FsbGJhY2stPmFyZ3MgPT0gTlVMTCkgewpAQCAtMzM2LDcgKzMzNiw3IEBACiAgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKG0pOwogICAgIG1vZHN0YXRlLT5jYWxsYmFja19sZW4gPSAzMjsKICAgICBtb2RzdGF0ZS0+bmNhbGxiYWNrcyA9IDA7Ci0gICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3MgPSBQeU1lbV9OZXcoYXRleGl0X2NhbGxiYWNrKiwgCisgICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3MgPSBQeU1lbV9OZXcoYXRleGl0X2NhbGxiYWNrKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RzdGF0ZS0+Y2FsbGJhY2tfbGVuKTsKICAgICBpZiAobW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2F1ZGlvb3AuYyBiL01vZHVsZXMvYXVkaW9vcC5jCmluZGV4IDlhNWQ4YzEuLjFlMTMxZDIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXVkaW9vcC5jCisrKyBiL01vZHVsZXMvYXVkaW9vcC5jCkBAIC00Niw3ICs0Niw3IEBACiAgKi8KICNkZWZpbmUgQklBUyAweDg0ICAgLyogZGVmaW5lIHRoZSBhZGQtaW4gYmlhcyBmb3IgMTYgYml0IHNhbXBsZXMgKi8KICNkZWZpbmUgQ0xJUCAzMjYzNQotI2RlZmluZSBTSUdOX0JJVCAgICAgICAgKDB4ODApICAgICAgICAgIC8qIFNpZ24gYml0IGZvciBhIEEtbGF3IGJ5dGUuICovCisjZGVmaW5lIFNJR05fQklUICAgICAgICAoMHg4MCkgICAgICAgICAgLyogU2lnbiBiaXQgZm9yIGFuIEEtbGF3IGJ5dGUuICovCiAjZGVmaW5lIFFVQU5UX01BU0sgICAgICAoMHhmKSAgICAgICAgICAgLyogUXVhbnRpemF0aW9uIGZpZWxkIG1hc2suICovCiAjZGVmaW5lIFNFR19TSElGVCAgICAgICAoNCkgICAgICAgICAgICAgLyogTGVmdCBzaGlmdCBmb3Igc2VnbWVudCBudW1iZXIuICovCiAjZGVmaW5lIFNFR19NQVNLICAgICAgICAoMHg3MCkgICAgICAgICAgLyogU2VnbWVudCBmaWVsZCBtYXNrLiAqLwpAQCAtMjE3LDcgKzIxNyw3IEBACiB9OwogCiAvKgotICogbGluZWFyMmFsYXcoKSBhY2NlcHRzIGFuIDEzLWJpdCBzaWduZWQgaW50ZWdlciBhbmQgZW5jb2RlcyBpdCBhcyBBLWxhdyBkYXRhCisgKiBsaW5lYXIyYWxhdygpIGFjY2VwdHMgYSAxMy1iaXQgc2lnbmVkIGludGVnZXIgYW5kIGVuY29kZXMgaXQgYXMgQS1sYXcgZGF0YQogICogc3RvcmVkIGluIGFuIHVuc2lnbmVkIGNoYXIuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoCiAgKiB0aGUgZGF0YSBzaGlmdGVkIHN1Y2ggdGhhdCBpdCBvbmx5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGluIHRoZSBsb3dlcgogICogMTMtYml0cy4KQEAgLTM5MSwxMCArMzkxLDkgQEAKIH0KIAogLypbY2xpbmljIGlucHV0XQotb3V0cHV0IHByZXNldCBmaWxlCiBtb2R1bGUgYXVkaW9vcAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NTYxOWY5MzVmMjY5MTk5YV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OGZhOGY2NjExYmUzNTkxYV0qLwogCiAvKltjbGluaWMgaW5wdXRdCiBhdWRpb29wLmdldHNhbXBsZQpAQCAtNDA4LDggKzQwNyw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2dldHNhbXBsZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlfc3NpemVfdCBpbmRleCkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mNDQ4MjQ5N2U2ZjZlNzhmIGlucHV0PTg4ZWRiZTI4NzEzOTM1NDldKi8KK2F1ZGlvb3BfZ2V0c2FtcGxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThmZTFiMTc3NTEzNGYzOWEgaW5wdXQ9ODhlZGJlMjg3MTM5MzU0OV0qLwogewogICAgIGludCB2YWw7CiAKQEAgLTQzNCw4ICs0MzQsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODUwNDdlZTEwMDFmMjMwNSBpbnB1dD0zMmJlYTVlYTBhYzhjMjIzXSovCithdWRpb29wX21heF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNmM1OTUyNzE0ZjFjM2YwIGlucHV0PTMyYmVhNWVhMGFjOGMyMjNdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgdW5zaWduZWQgaW50IGFic3ZhbCwgbWF4ID0gMDsKQEAgLTQ2Miw4ICs0NjIsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9taW5tYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YWU4ZjU1MTNjNjRmZDU2OSBpbnB1dD04OTg0OGU5YjkyN2EwNjk2XSovCithdWRpb29wX21pbm1heF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00NzNmZGE2NmIxNWM4MzZlIGlucHV0PTg5ODQ4ZTliOTI3YTA2OTZdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgLyogLTEgdHJpY2sgYmVsb3cgaXMgbmVlZGVkIG9uIFdpbmRvd3MgdG8gc3VwcG9ydCAtMHg4MDAwMDAwMCB3aXRob3V0CkBAIC00OTEsOCArNDkxLDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYXZnX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdmY2NkNjQ1Yzk1ZjQ4NjAgaW5wdXQ9MTExNDQ5M2M3NjExMzM0ZF0qLworYXVkaW9vcF9hdmdfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDQxMGE0YzEyYzM1ODZlNiBpbnB1dD0xMTE0NDkzYzc2MTEzMzRkXSovCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBhdmc7CkBAIC01MjAsOCArNTIwLDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3Bfcm1zX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdiMzk4NzAyYzgxYjcwOWQgaW5wdXQ9NGNjNTdjNmM5NDIxOWQ3OF0qLworYXVkaW9vcF9ybXNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWU3ODcxYzgyNjQ0NTY5OCBpbnB1dD00Y2M1N2M2Yzk0MjE5ZDc4XSovCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIHVuc2lnbmVkIGludCByZXM7CkBAIC01OTQsOCArNTk0LDkgQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZmluZGZpdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X2J1ZmZlciAqcmVmZXJlbmNlKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUwNWZkMDRkNDI0NGRiMzEgaW5wdXQ9NjJjMzA1NjA1ZTE4M2M5YV0qLworYXVkaW9vcF9maW5kZml0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqcmVmZXJlbmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU3NTIzMDZkODNjYmJhZGEgaW5wdXQ9NjJjMzA1NjA1ZTE4M2M5YV0qLwogewogICAgIGNvbnN0IHNob3J0ICpjcDEsICpjcDI7CiAgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOwpAQCAtNjYyLDggKzY2Myw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2ZpbmRmYWN0b3JfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9idWZmZXIgKnJlZmVyZW5jZSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kZGYzNWExZTU3NTc1Y2U0IGlucHV0PTgxNjY4MDMwMWQwMTJiMjFdKi8KK2F1ZGlvb3BfZmluZGZhY3Rvcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9idWZmZXIgKnJlZmVyZW5jZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xNGVhOTU2NTJjMWFmY2Y4IGlucHV0PTgxNjY4MDMwMWQwMTJiMjFdKi8KIHsKICAgICBjb25zdCBzaG9ydCAqY3AxLCAqY3AyOwogICAgIFB5X3NzaXplX3QgbGVuOwpAQCAtNzAzLDggKzcwNSw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2ZpbmRtYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9zc2l6ZV90IGxlbmd0aCkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMWQwYzJhMWU1NjU1MTM0IGlucHV0PTJmMzA0ODAxZWQ0MjM4M2NdKi8KK2F1ZGlvb3BfZmluZG1heF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mMDA4MTI4MjMzNTIzMDQwIGlucHV0PTJmMzA0ODAxZWQ0MjM4M2NdKi8KIHsKICAgICBjb25zdCBzaG9ydCAqY3AxOwogICAgIFB5X3NzaXplX3QgbGVuMTsKQEAgLTc1Niw4ICs3NTksOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hdmdwcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wNmM4MzgwZmQ2ZTM0MjA3IGlucHV0PTBiM2NjZWVhZTQyMGE3ZDldKi8KK2F1ZGlvb3BfYXZncHBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjY5NTk2YjBkNWFlMGIyYiBpbnB1dD0wYjNjY2VlYWU0MjBhN2Q5XSovCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBwcmV2dmFsLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwgcHJldmV4dHJlbWUgPSAwOwpAQCAtODEzLDggKzgxNiw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21heHBwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWMzMDBjMGJkN2U4NTM1YzAgaW5wdXQ9NjcxYTEzZTE1MThmODBhMV0qLworYXVkaW9vcF9tYXhwcF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01YjkxOGVkNWRiYmRiOTc4IGlucHV0PTY3MWExM2UxNTE4ZjgwYTFdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHByZXZ2YWwsIHByZXZleHRyZW1ldmFsaWQgPSAwLCBwcmV2ZXh0cmVtZSA9IDA7CkBAIC04NjYsOCArODY5LDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfY3Jvc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTllNjU3MmQ3ZDdjZGJmMSBpbnB1dD1iMWIzZjE1YjgzZjZiNDFhXSovCithdWRpb29wX2Nyb3NzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU5MzhkY2RkNzRhMWY0MzEgaW5wdXQ9YjFiM2YxNWI4M2Y2YjQxYV0qLwogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgcHJldnZhbDsKQEAgLTg5Nyw4ICs5MDAsOSBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tdWxfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBmYWN0b3IpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTY5N2ViYmQ1ODUyZDM4ZiBpbnB1dD1jNzI2NjY3YmFhMTU3ZDNjXSovCithdWRpb29wX211bF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgZG91YmxlIGZhY3RvcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02Y2Q0OGZlNzk2ZGEwZWE0IGlucHV0PWM3MjY2NjdiYWExNTdkM2NdKi8KIHsKICAgICBzaWduZWQgY2hhciAqbmNwOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTkzOCw4ICs5NDIsOSBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF90b21vbm9faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBsZmFjdG9yLCBkb3VibGUgcmZhY3RvcikKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MzZlNzcxMDUyMTY2MWRkIGlucHV0PWM0ZWM5NDliM2Y0ZGRkZmFdKi8KK2F1ZGlvb3BfdG9tb25vX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjM1YzgyNzcyMTZkNGU0ZSBpbnB1dD1jNGVjOTQ5YjNmNGRkZGZhXSovCiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwpAQCAtOTg2LDggKzk5MSw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3Rvc3RlcmVvX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmZmNTA2ODFjODdmNGMxYyBpbnB1dD0yN2I2Mzk1ZWJmZGZmMzdhXSovCithdWRpb29wX3Rvc3RlcmVvX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsZmFjdG9yLCBkb3VibGUgcmZhY3RvcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wNDZmMTNkZWZhNWYxNTk1IGlucHV0PTI3YjYzOTVlYmZkZmYzN2FdKi8KIHsKICAgICBzaWduZWQgY2hhciAqbmNwOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTEwMzMsOCArMTAzOSw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2FkZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQxLCBQeV9idWZmZXIgKmZyYWdtZW50MiwgaW50IHdpZHRoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWY5MjE4YmY5ZWE3NWMzZjEgaW5wdXQ9NGE4ZDRiYWU0YzE2MDVjN10qLworYXVkaW9vcF9hZGRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50MSwKKyAgICAgICAgICAgICAgICAgUHlfYnVmZmVyICpmcmFnbWVudDIsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MDE0MGFmNGQxYWFiNmYyIGlucHV0PTRhOGQ0YmFlNGMxNjA1YzddKi8KIHsKICAgICBzaWduZWQgY2hhciAqbmNwOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTEwOTEsOCArMTA5OCw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2JpYXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBiaWFzKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThlYzgwYjNmNWQ1MTBhNTEgaW5wdXQ9MmI1Y2NlNWMzYmI0ODM4Y10qLworYXVkaW9vcF9iaWFzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgYmlhcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02ZTBhYThmNjhmMDQ1MDkzIGlucHV0PTJiNWNjZTVjM2JiNDgzOGNdKi8KIHsKICAgICBzaWduZWQgY2hhciAqbmNwOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTExNTAsOCArMTE1Nyw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3JldmVyc2VfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmVjM2M5MTMzN2Y1OTI1ZSBpbnB1dD02NjhmODkwY2Y5ZjlkMjI1XSovCithdWRpb29wX3JldmVyc2VfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjQ0MTM1Njk4NDE4ZGExNCBpbnB1dD02NjhmODkwY2Y5ZjlkMjI1XSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTExODMsOCArMTE5MCw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2J5dGVzd2FwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJmZTRhYTU4NGI3YTNmNWIgaW5wdXQ9ZmFlNzYxMWNlZmZhNWM4Ml0qLworYXVkaW9vcF9ieXRlc3dhcF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MDgzOGE5ZTRiODdjZDRkIGlucHV0PWZhZTc2MTFjZWZmYTVjODJdKi8KIHsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7CiAgICAgUHlfc3NpemVfdCBpOwpAQCAtMTIxOCw4ICsxMjI1LDkgQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbGluMmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IG5ld3dpZHRoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNmOTQ2OGE3NDQ3MmE5M2UgaW5wdXQ9NWNlMDhjOGFhMmYyNGQ5Nl0qLworYXVkaW9vcF9saW4ybGluX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgaW50IG5ld3dpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE3YjE0MTA5MjQ4ZjFkOTkgaW5wdXQ9NWNlMDhjOGFhMmYyNGQ5Nl0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKICAgICBQeV9zc2l6ZV90IGksIGo7CkBAIC0xMjc1LDggKzEyODMsMTAgQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfcmF0ZWN2X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgbmNoYW5uZWxzLCBpbnQgaW5yYXRlLCBpbnQgb3V0cmF0ZSwgUHlPYmplY3QgKnN0YXRlLCBpbnQgd2VpZ2h0QSwgaW50IHdlaWdodEIpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTU4NWRkZGM0YjVmZjIzNiBpbnB1dD1hZmYzYWNkYzk0NDc2MTkxXSovCithdWRpb29wX3JhdGVjdl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50IG5jaGFubmVscywgaW50IGlucmF0ZSwgaW50IG91dHJhdGUsIFB5T2JqZWN0ICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodEEsIGludCB3ZWlnaHRCKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTYyNDAzOGU4NDMyNDMxMzkgaW5wdXQ9YWZmM2FjZGM5NDQ3NjE5MV0qLwogewogICAgIGNoYXIgKmNwLCAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuOwpAQCAtMTQ1NCw4ICsxNDY0LDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbGluMnVsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjYyNjNjYzg3N2M1ZTFiYyBpbnB1dD0yNDUwZDFiODcwYjZiYWMyXSovCithdWRpb29wX2xpbjJ1bGF3X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE0ZmI2MmIxNmZlOGVhOGUgaW5wdXQ9MjQ1MGQxYjg3MGI2YmFjMl0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC0xNDg3LDggKzE0OTcsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF91bGF3Mmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ODY0Y2IzNGUzYTFkODc2IGlucHV0PTQ1ZDUzZGRjZTViZTdkMDZdKi8KK2F1ZGlvb3BfdWxhdzJsaW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Mzc4MzU2YjA0NzUyMWJhMiBpbnB1dD00NWQ1M2RkY2U1YmU3ZDA2XSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqY3A7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKQEAgLTE1MjcsOCArMTUzNyw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJhbGF3X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ1YmYxNGJkMGZlNmZkY2QgaW5wdXQ9ZmZiMWVmOGJiMzlkYTk0NV0qLworYXVkaW9vcF9saW4yYWxhd19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMDc2ZjEzMDEyMWE4MmYwIGlucHV0PWZmYjFlZjhiYjM5ZGE5NDVdKi8KIHsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7CiAgICAgUHlfc3NpemVfdCBpOwpAQCAtMTU2MCw4ICsxNTcwLDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYWxhdzJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDJiNjA0ZGRkMDM2ZTFjZCBpbnB1dD00MTQwNjI2MDQ2Y2QxNzcyXSovCithdWRpb29wX2FsYXcybGluX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg1YzM2NWVjNTU5ZGY2NDcgaW5wdXQ9NDE0MDYyNjA0NmNkMTc3Ml0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwogICAgIHNpZ25lZCBjaGFyICpuY3A7CkBAIC0xNjAyLDggKzE2MTIsOSBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4yYWRwY21faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5T2JqZWN0ICpzdGF0ZSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00NjU0YzI5ZDI3MzFmYWZlIGlucHV0PTEyOTE5ZDU0OWI5MGM5MGFdKi8KK2F1ZGlvb3BfbGluMmFkcGNtX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhdGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Y2MxOWYxNTlmMTZjNjc5MyBpbnB1dD0xMjkxOWQ1NDliOTBjOTBhXSovCiB7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC0xNzI5LDggKzE3NDAsOSBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hZHBjbTJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5T2JqZWN0ICpzdGF0ZSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zNzE5NjVjZGNjMGFhNjliIGlucHV0PWY1MjIxMTQ0ZjVjYTllZjBdKi8KK2F1ZGlvb3BfYWRwY20ybGluX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhdGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzQ0MGVhMTA1YWNiMzQ1NiBpbnB1dD1mNTIyMTE0NGY1Y2E5ZWYwXSovCiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHNpZ25lZCBjaGFyICpuY3A7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2JpbmFzY2lpLmMgYi9Nb2R1bGVzL2JpbmFzY2lpLmMKaW5kZXggZWExNGQzYy4uMTM3ODBiMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9iaW5hc2NpaS5jCisrKyBiL01vZHVsZXMvYmluYXNjaWkuYwpAQCAtNTYsNiArNTYsNyBAQAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAKICNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJweXN0cmhleC5oIgogI2lmZGVmIFVTRV9aTElCX0NSQzMyCiAjaW5jbHVkZSAiemxpYi5oIgogI2VuZGlmCkBAIC0xODQsMTAgKzE4NSw5IEBACiB9OwogCiAvKltjbGluaWMgaW5wdXRdCi1vdXRwdXQgcHJlc2V0IGZpbGUKIG1vZHVsZSBiaW5hc2NpaQogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NDRjNmY4NDBjZTcwOGYwY10qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZGU4OWZiNDZiY2FmM2ZlY10qLwogCiAvKltweXRob24gaW5wdXRdCiAKQEAgLTI1Myw4ICsyNTMsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX3V1X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU3NzlmMzliMGI0ODQ1OWYgaW5wdXQ9N2NhZmVhZjczZGY2M2QxY10qLworYmluYXNjaWlfYTJiX3V1X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWUwMjdmOGUwYjA1OTg3NDIgaW5wdXQ9N2NhZmVhZjczZGY2M2QxY10qLwogewogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwpAQCAtMzM5LDggKzMzOSw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfdXVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTgxMDIxYjY5YmI5YTQxNCBpbnB1dD0wMGZkZjQ1OGNlOGI0NjViXSovCitiaW5hc2NpaV9iMmFfdXVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDA3MDY3MGU1MmU0YWE2YiBpbnB1dD0wMGZkZjQ1OGNlOGI0NjViXSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CkBAIC00MjYsOCArNDI2LDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2EyYl9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2UzNTFiNzAyYmVkNTZkMiBpbnB1dD01ODcyYWNmNmUxY2FjMjQzXSovCitiaW5hc2NpaV9hMmJfYmFzZTY0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA2MjgyMjNmMTlmZDNmOWIgaW5wdXQ9NTg3MmFjZjZlMWNhYzI0M10qLwogewogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwpAQCAtNTM0LDggKzUzNCw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfYmFzZTY0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNjZDYxZmJlZTI5MTMyODUgaW5wdXQ9MTRlYzRlNDczNzExNzRhOV0qLworYmluYXNjaWlfYjJhX2Jhc2U2NF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00ZDk2NjYzMTcwNzc4ZGMzIGlucHV0PTE0ZWM0ZTQ3MzcxMTc0YTldKi8KIHsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKQEAgLTYwMSw4ICs2MDEsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MGJjZGJiZDI4YjEwNWNkIGlucHV0PTBkOTE0YzY4MGUwZWVkNTVdKi8KK2JpbmFzY2lpX2EyYl9ocXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NGQ2ZDhjNTRkNTRlYTFjMSBpbnB1dD0wZDkxNGM2ODBlMGVlZDU1XSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CkBAIC02ODQsOCArNjg0LDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3JsZWNvZGVfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA5MDVkYTM0NGRiZjA2NDggaW5wdXQ9ZTFmMTcxMjQ0N2E4MmIwOV0qLworYmluYXNjaWlfcmxlY29kZV9ocXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzkzZDc5MzM4ZjVmNTYyOSBpbnB1dD1lMWYxNzEyNDQ3YTgyYjA5XSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqaW5fZGF0YSwgKm91dF9kYXRhOwogICAgIFB5T2JqZWN0ICpydjsKQEAgLTc0OCw4ICs3NDgsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYjJhX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01YTk4NzgxMGQ1ZTNjZGJiIGlucHV0PTk1OTZlYmUwMTlmZTEyYmFdKi8KK2JpbmFzY2lpX2IyYV9ocXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDBhYTVhNzA0YmM5ZjdkZSBpbnB1dD05NTk2ZWJlMDE5ZmUxMmJhXSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CkBAIC04MDUsOCArODA1LDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3JsZWRlY29kZV9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjdhZmQ4OWI3ODk5NDZhYiBpbnB1dD01NGNkZDQ5ZmMwMTQ0MDJjXSovCitiaW5hc2NpaV9ybGVkZWNvZGVfaHF4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk4MjY2MTk1NjVkZTFjNmMgaW5wdXQ9NTRjZGQ0OWZjMDE0NDAyY10qLwogewogICAgIHVuc2lnbmVkIGNoYXIgKmluX2RhdGEsICpvdXRfZGF0YTsKICAgICB1bnNpZ25lZCBjaGFyIGluX2J5dGUsIGluX3JlcGVhdDsKQEAgLTkxOSw4ICs5MTksOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1iaW5hc2NpaV9jcmNfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgY3JjKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE2N2MyZGFjNjI2MjU3MTcgaW5wdXQ9YWRkOGM1MzcxMmNjY2VkYV0qLworYmluYXNjaWlfY3JjX2hxeF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IGNyYykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04ZWMyYTc4NTkwZDE5MTcwIGlucHV0PWFkZDhjNTM3MTJjY2NlZGFdKi8KIHsKICAgICB1bnNpZ25lZCBjaGFyICpiaW5fZGF0YTsKICAgICBQeV9zc2l6ZV90IGxlbjsKQEAgLTEwNjcsOCArMTA2Nyw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWJpbmFzY2lpX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgY3JjKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTYyMGE5NjE2NDMzOTNjNGYgaW5wdXQ9YmJlMzQwYmM5OWQyNWFhOF0qLworYmluYXNjaWlfY3JjMzJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBjcmMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTJjZjU5MDU2YTc4NTkzYiBpbnB1dD1iYmUzNDBiYzk5ZDI1YWE4XSovCiAKICNpZmRlZiBVU0VfWkxJQl9DUkMzMgogLyogVGhpcyB3YXMgdGFrZW4gZnJvbSB6bGlibW9kdWxlLmMgUHlabGliX2NyYzMyIChidXQgaXMgUFlfU1NJWkVfVF9DTEVBTikgKi8KQEAgLTExMTUsMzYgKzExMTUsMTAgQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV9oZXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTc5MzE4OTIyYzJmOGZkYSBpbnB1dD05NjQyM2NmYTI5OWZmM2IxXSovCitiaW5hc2NpaV9iMmFfaGV4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTkyZmVjMWE5NWM5ODk3YTAgaW5wdXQ9OTY0MjNjZmEyOTlmZjNiMV0qLwogewotICAgIGNoYXIqIGFyZ2J1ZjsKLSAgICBQeV9zc2l6ZV90IGFyZ2xlbjsKLSAgICBQeU9iamVjdCAqcmV0dmFsOwotICAgIGNoYXIqIHJldGJ1ZjsKLSAgICBQeV9zc2l6ZV90IGksIGo7Ci0KLSAgICBhcmdidWYgPSBkYXRhLT5idWY7Ci0gICAgYXJnbGVuID0gZGF0YS0+bGVuOwotCi0gICAgYXNzZXJ0KGFyZ2xlbiA+PSAwKTsKLSAgICBpZiAoYXJnbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKQotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLQotICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYXJnbGVuKjIpOwotICAgIGlmICghcmV0dmFsKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXRidWYgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpOwotCi0gICAgLyogbWFrZSBoZXggdmVyc2lvbiBvZiBzdHJpbmcsIHRha2VuIGZyb20gc2hhbW9kdWxlLmMgKi8KLSAgICBmb3IgKGk9aj0wOyBpIDwgYXJnbGVuOyBpKyspIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjOwotICAgICAgICBjID0gKGFyZ2J1ZltpXSA+PiA0KSAmIDB4ZjsKLSAgICAgICAgcmV0YnVmW2orK10gPSBQeV9oZXhkaWdpdHNbY107Ci0gICAgICAgIGMgPSBhcmdidWZbaV0gJiAweGY7Ci0gICAgICAgIHJldGJ1ZltqKytdID0gUHlfaGV4ZGlnaXRzW2NdOwotICAgIH0KLSAgICByZXR1cm4gcmV0dmFsOworICAgIHJldHVybiBfUHlfc3RyaGV4X2J5dGVzKChjb25zdCBjaGFyICopZGF0YS0+YnVmLCBkYXRhLT5sZW4pOwogfQogCiAvKltjbGluaWMgaW5wdXRdCkBAIC0xMTU2LDEwICsxMTMwLDEwIEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9oZXhsaWZ5X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTYwOTg0NDAwOTFmYjYxZGMgaW5wdXQ9MmUzYWZhZTdmMDgzZjA2MV0qLworYmluYXNjaWlfaGV4bGlmeV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NDllOTVlNTNjMTQ4ODBjIGlucHV0PTJlM2FmYWU3ZjA4M2YwNjFdKi8KIHsKLSAgICByZXR1cm4gYmluYXNjaWlfYjJhX2hleF9pbXBsKG1vZHVsZSwgZGF0YSk7CisgICAgcmV0dXJuIF9QeV9zdHJoZXhfYnl0ZXMoKGNvbnN0IGNoYXIgKilkYXRhLT5idWYsIGRhdGEtPmxlbik7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTExOTAsOCArMTE2NCw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9hMmJfaGV4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDYxZGE0NTJiNWM2ZDI5MCBpbnB1dD05ZTFlN2YyZjk0ZGIyNGZkXSovCitiaW5hc2NpaV9hMmJfaGV4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGNjMWExMzlhZjBlZWVjYiBpbnB1dD05ZTFlN2YyZjk0ZGIyNGZkXSovCiB7CiAgICAgY2hhciogYXJnYnVmOwogICAgIFB5X3NzaXplX3QgYXJnbGVuOwpAQCAtMTI0NCw4ICsxMjE4LDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3VuaGV4bGlmeV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqaGV4c3RyKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE3Y2VjNzU0NDQ5OTgwM2UgaW5wdXQ9ZGQ4YzAxMjcyNWY0NjJkYV0qLworYmluYXNjaWlfdW5oZXhsaWZ5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTFhNjRjMDZjNzk2MjllMyBpbnB1dD1kZDhjMDEyNzI1ZjQ2MmRhXSovCiB7CiAgICAgcmV0dXJuIGJpbmFzY2lpX2EyYl9oZXhfaW1wbChtb2R1bGUsIGhleHN0cik7CiB9CkBAIC0xMjc2LDggKzEyNTAsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX3FwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgaGVhZGVyKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE0NGVmODgyNzAzNTIxMTQgaW5wdXQ9NTE4N2EwZDNkOGU1NGYzYl0qLworYmluYXNjaWlfYTJiX3FwX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgaGVhZGVyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWU5OWY3ODQ2Y2ZiOWJjNTMgaW5wdXQ9NTE4N2EwZDNkOGU1NGYzYl0qLwogewogICAgIFB5X3NzaXplX3QgaW4sIG91dDsKICAgICBjaGFyIGNoOwpAQCAtMTM4Miw4ICsxMzU2LDkgQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHF1b3RldGFicywgaW50IGlzdGV4dCwgaW50IGhlYWRlcikKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZjI5OTFiYTY0MGZmZjNlIGlucHV0PTdmMmE5YWFhMDA4ZTkyYjJdKi8KK2JpbmFzY2lpX2IyYV9xcF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHF1b3RldGFicywKKyAgICAgICAgICAgICAgICAgICAgIGludCBpc3RleHQsIGludCBoZWFkZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTk4ODQ0NzJlYmIxYTk0YyBpbnB1dD03ZjJhOWFhYTAwOGU5MmIyXSovCiB7CiAgICAgUHlfc3NpemVfdCBpbiwgb3V0OwogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGFidWYsICpvZGF0YTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKaW5kZXggNWM0MDFhYS4uMWNlNDIxOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmluYnVmLCBQeV9zc2l6ZV90ICppbmxlZnQpCiB7CiAgICAgdW5zaWduZWQgY2hhciBjaGFyc2V0LCBkZXNpZ25hdGlvbjsKLSAgICBQeV9zc2l6ZV90IGksIGVzY2xlbjsKKyAgICBQeV9zc2l6ZV90IGksIGVzY2xlbiA9IDA7CiAKICAgICBmb3IgKGkgPSAxO2kgPCBNQVhfRVNDU0VRTEVOO2krKykgewogICAgICAgICBpZiAoaSA+PSAqaW5sZWZ0KQpAQCAtMzA3LDEwICszMDcsOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGkgPj0gTUFYX0VTQ1NFUUxFTikKLSAgICAgICAgcmV0dXJuIDE7IC8qIHVudGVybWluYXRlZCBlc2NhcGUgc2VxdWVuY2UgKi8KLQogICAgIHN3aXRjaCAoZXNjbGVuKSB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gMTsgLyogdW50ZXJtaW5hdGVkIGVzY2FwZSBzZXF1ZW5jZSAqLwogICAgIGNhc2UgMzoKICAgICAgICAgaWYgKElOQllURTIgPT0gJyQnKSB7CiAgICAgICAgICAgICBjaGFyc2V0ID0gSU5CWVRFMyB8IENIQVJTRVRfREJDUzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKaW5kZXggZDE1Y2NmYi4uYjcyYTNmMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmgKQEAgLTMyOCwyMiArMzI4LDI2IEBACiAgICAgbWluID0gMDsKICAgICBtYXggPSBoYXlzdGFja3NpemU7CiAKLSAgICBmb3IgKHBvcyA9IGhheXN0YWNrc2l6ZSA+PiAxOyBtaW4gIT0gbWF4OyBwb3MgPSAobWluICsgbWF4KSA+PiAxKQorICAgIGZvciAocG9zID0gaGF5c3RhY2tzaXplID4+IDE7IG1pbiAhPSBtYXg7IHBvcyA9IChtaW4gKyBtYXgpID4+IDEpIHsKICAgICAgICAgaWYgKHZhbHVlIDwgaGF5c3RhY2tbcG9zXS51bmlzZXEpIHsKLSAgICAgICAgICAgIGlmIChtYXggPT0gcG9zKSBicmVhazsKLSAgICAgICAgICAgIGVsc2UgbWF4ID0gcG9zOworICAgICAgICAgICAgaWYgKG1heCAhPSBwb3MpIHsKKyAgICAgICAgICAgICAgICBtYXggPSBwb3M7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBoYXlzdGFja1twb3NdLnVuaXNlcSkgewotICAgICAgICAgICAgaWYgKG1pbiA9PSBwb3MpIGJyZWFrOwotICAgICAgICAgICAgZWxzZSBtaW4gPSBwb3M7CisgICAgICAgICAgICBpZiAobWluICE9IHBvcykgeworICAgICAgICAgICAgICAgIG1pbiA9IHBvczsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi0gICAgICAgIGlmICh2YWx1ZSA9PSBoYXlzdGFja1twb3NdLnVuaXNlcSkKLSAgICAgICAgICAgIHJldHVybiBoYXlzdGFja1twb3NdLmNvZGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBEQkNJTlY7CisgICAgaWYgKHZhbHVlID09IGhheXN0YWNrW3Bvc10udW5pc2VxKSB7CisgICAgICAgIHJldHVybiBoYXlzdGFja1twb3NdLmNvZGU7CisgICAgfQorICAgIHJldHVybiBEQkNJTlY7CiB9CiAjZW5kaWYKIApAQCAtMzYyLDcgKzM2Niw3IEBACiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBvID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtb2QsIChjaGFyKilzeW1ib2wpOworICAgIG8gPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG1vZCwgc3ltYm9sKTsKICAgICBpZiAobyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICBlbHNlIGlmICghUHlDYXBzdWxlX0lzVmFsaWQobywgUHlNdWx0aWJ5dGVDb2RlY19DQVBTVUxFX05BTUUpKSB7CkBAIC00MDEsNyArNDA1LDcgQEAKICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBQeU9iamVjdCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQeU1PRElOSVRfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBQeUluaXRfX2NvZGVjc18jI2xvYyh2b2lkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgUHlPYmplY3QgKm0gPSBQeU1vZHVsZV9DcmVhdGUoJl9fbW9kdWxlKTsgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2NsaW5pYy9tdWx0aWJ5dGVjb2RlYy5jLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9jbGluaWMvbXVsdGlieXRlY29kZWMuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDdmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9jbGluaWMvbXVsdGlieXRlY29kZWMuYy5oCkBAIC0wLDAgKzEsMzIwIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUNvZGVjX2VuY29kZV9fZG9jX18sCisiZW5jb2RlKCRzZWxmLCAvLCBpbnB1dCwgZXJyb3JzPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYW4gZW5jb2RlZCBzdHJpbmcgdmVyc2lvbiBvZiBgaW5wdXRcJy5cbiIKKyJcbiIKKyJcJ2Vycm9yc1wnIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBEZWZhdWx0IGlzXG4iCisiXCdzdHJpY3RcJyBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgVW5pY29kZUVuY29kZUVycm9yLiBPdGhlciBwb3NzaWJsZVxuIgorInZhbHVlcyBhcmUgXCdpZ25vcmVcJywgXCdyZXBsYWNlXCcgYW5kIFwneG1sY2hhcnJlZnJlcGxhY2VcJyBhcyB3ZWxsIGFzIGFueSBvdGhlciBuYW1lXG4iCisicmVnaXN0ZXJlZCB3aXRoIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGNhbiBoYW5kbGUgVW5pY29kZUVuY29kZUVycm9ycy4iKTsKKworI2RlZmluZSBfTVVMVElCWVRFQ09ERUNfTVVMVElCWVRFQ09ERUNfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJlbmNvZGUiLCAoUHlDRnVuY3Rpb24pX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUNvZGVjX2VuY29kZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVDb2RlY19lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVDb2RlY19lbmNvZGVfaW1wbChNdWx0aWJ5dGVDb2RlY09iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVDb2RlY19lbmNvZGUoTXVsdGlieXRlQ29kZWNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiaW5wdXQiLCAiZXJyb3JzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmlucHV0OworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfHo6ZW5jb2RlIiwgX2tleXdvcmRzLAorICAgICAgICAmaW5wdXQsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUNvZGVjX2VuY29kZV9pbXBsKHNlbGYsIGlucHV0LCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlQ29kZWNfZGVjb2RlX19kb2NfXywKKyJkZWNvZGUoJHNlbGYsIC8sIGlucHV0LCBlcnJvcnM9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZXMgXCdpbnB1dFwnLlxuIgorIlxuIgorIlwnZXJyb3JzXCcgbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuIERlZmF1bHQgaXNcbiIKKyJcJ3N0cmljdFwnIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSBVbmljb2RlRGVjb2RlRXJyb3IuIE90aGVyIHBvc3NpYmxlXG4iCisidmFsdWVzIGFyZSBcJ2lnbm9yZVwnIGFuZCBcJ3JlcGxhY2VcJyBhcyB3ZWxsIGFzIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgd2l0aFxuIgorImNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGlzIGFibGUgdG8gaGFuZGxlIFVuaWNvZGVEZWNvZGVFcnJvcnMuXCIiKTsKKworI2RlZmluZSBfTVVMVElCWVRFQ09ERUNfTVVMVElCWVRFQ09ERUNfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUNvZGVjX2RlY29kZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVDb2RlY19kZWNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVDb2RlY19kZWNvZGVfaW1wbChNdWx0aWJ5dGVDb2RlY09iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9idWZmZXIgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlQ29kZWNfZGVjb2RlKE11bHRpYnl0ZUNvZGVjT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImlucHV0IiwgImVycm9ycyIsIE5VTEx9OworICAgIFB5X2J1ZmZlciBpbnB1dCA9IHtOVUxMLCBOVUxMfTsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAieSp8ejpkZWNvZGUiLCBfa2V5d29yZHMsCisgICAgICAgICZpbnB1dCwgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlQ29kZWNfZGVjb2RlX2ltcGwoc2VsZiwgJmlucHV0LCBlcnJvcnMpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGlucHV0ICovCisgICAgaWYgKGlucHV0Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZpbnB1dCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUluY3JlbWVudGFsRW5jb2Rlcl9lbmNvZGVfX2RvY19fLAorImVuY29kZSgkc2VsZiwgLywgaW5wdXQsIGZpbmFsPUZhbHNlKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfTVVMVElCWVRFQ09ERUNfTVVMVElCWVRFSU5DUkVNRU5UQUxFTkNPREVSX0VOQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsiZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKV9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVJbmNyZW1lbnRhbEVuY29kZXJfZW5jb2RlLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUluY3JlbWVudGFsRW5jb2Rlcl9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVJbmNyZW1lbnRhbEVuY29kZXJfZW5jb2RlX2ltcGwoTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyT2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaW5hbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyX2VuY29kZShNdWx0aWJ5dGVJbmNyZW1lbnRhbEVuY29kZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiaW5wdXQiLCAiZmluYWwiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqaW5wdXQ7CisgICAgaW50IGZpbmFsID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98aTplbmNvZGUiLCBfa2V5d29yZHMsCisgICAgICAgICZpbnB1dCwgJmZpbmFsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVJbmNyZW1lbnRhbEVuY29kZXJfZW5jb2RlX2ltcGwoc2VsZiwgaW5wdXQsIGZpbmFsKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUluY3JlbWVudGFsRW5jb2Rlcl9yZXNldF9fZG9jX18sCisicmVzZXQoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVJTkNSRU1FTlRBTEVOQ09ERVJfUkVTRVRfTUVUSE9EREVGICAgIFwKKyAgICB7InJlc2V0IiwgKFB5Q0Z1bmN0aW9uKV9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVJbmNyZW1lbnRhbEVuY29kZXJfcmVzZXQsIE1FVEhfTk9BUkdTLCBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyX3Jlc2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyX3Jlc2V0X2ltcGwoTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVJbmNyZW1lbnRhbEVuY29kZXJfcmVzZXQoTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyX3Jlc2V0X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyX2RlY29kZV9fZG9jX18sCisiZGVjb2RlKCRzZWxmLCAvLCBpbnB1dCwgZmluYWw9RmFsc2UpXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVJTkNSRU1FTlRBTERFQ09ERVJfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUluY3JlbWVudGFsRGVjb2Rlcl9kZWNvZGUsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUluY3JlbWVudGFsRGVjb2Rlcl9kZWNvZGVfaW1wbChNdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXJPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaW5hbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyX2RlY29kZShNdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiaW5wdXQiLCAiZmluYWwiLCBOVUxMfTsKKyAgICBQeV9idWZmZXIgaW5wdXQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IGZpbmFsID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfGk6ZGVjb2RlIiwgX2tleXdvcmRzLAorICAgICAgICAmaW5wdXQsICZmaW5hbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyX2RlY29kZV9pbXBsKHNlbGYsICZpbnB1dCwgZmluYWwpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGlucHV0ICovCisgICAgaWYgKGlucHV0Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZpbnB1dCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUluY3JlbWVudGFsRGVjb2Rlcl9yZXNldF9fZG9jX18sCisicmVzZXQoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVJTkNSRU1FTlRBTERFQ09ERVJfUkVTRVRfTUVUSE9EREVGICAgIFwKKyAgICB7InJlc2V0IiwgKFB5Q0Z1bmN0aW9uKV9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXJfcmVzZXQsIE1FVEhfTk9BUkdTLCBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyX3Jlc2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyX3Jlc2V0X2ltcGwoTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXJfcmVzZXQoTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyX3Jlc2V0X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRfX2RvY19fLAorInJlYWQoJHNlbGYsIHNpemVvYmo9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX01VTFRJQllURUNPREVDX01VTFRJQllURVNUUkVBTVJFQURFUl9SRUFEX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkIiwgKFB5Q0Z1bmN0aW9uKV9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVhZCwgTUVUSF9WQVJBUkdTLCBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVhZF9pbXBsKE11bHRpYnl0ZVN0cmVhbVJlYWRlck9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzaXplb2JqKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVhZChNdWx0aWJ5dGVTdHJlYW1SZWFkZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzaXplb2JqID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInJlYWQiLAorICAgICAgICAwLCAxLAorICAgICAgICAmc2l6ZW9iaikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRfaW1wbChzZWxmLCBzaXplb2JqKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVJlYWRlcl9yZWFkbGluZV9fZG9jX18sCisicmVhZGxpbmUoJHNlbGYsIHNpemVvYmo9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX01VTFRJQllURUNPREVDX01VTFRJQllURVNUUkVBTVJFQURFUl9SRUFETElORV9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZGxpbmUiLCAoUHlDRnVuY3Rpb24pX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVJlYWRlcl9yZWFkbGluZSwgTUVUSF9WQVJBUkdTLCBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRsaW5lX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRsaW5lX2ltcGwoTXVsdGlieXRlU3RyZWFtUmVhZGVyT2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzaXplb2JqKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVhZGxpbmUoTXVsdGlieXRlU3RyZWFtUmVhZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc2l6ZW9iaiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZWFkbGluZSIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZzaXplb2JqKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVhZGxpbmVfaW1wbChzZWxmLCBzaXplb2JqKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVJlYWRlcl9yZWFkbGluZXNfX2RvY19fLAorInJlYWRsaW5lcygkc2VsZiwgc2l6ZWhpbnRvYmo9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX01VTFRJQllURUNPREVDX01VTFRJQllURVNUUkVBTVJFQURFUl9SRUFETElORVNfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWRsaW5lcyIsIChQeUNGdW5jdGlvbilfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRsaW5lcywgTUVUSF9WQVJBUkdTLCBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRsaW5lc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVJlYWRlcl9yZWFkbGluZXNfaW1wbChNdWx0aWJ5dGVTdHJlYW1SZWFkZXJPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzaXplaGludG9iaik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRsaW5lcyhNdWx0aWJ5dGVTdHJlYW1SZWFkZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzaXplaGludG9iaiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZWFkbGluZXMiLAorICAgICAgICAwLCAxLAorICAgICAgICAmc2l6ZWhpbnRvYmopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVJlYWRlcl9yZWFkbGluZXNfaW1wbChzZWxmLCBzaXplaGludG9iaik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVzZXRfX2RvY19fLAorInJlc2V0KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfTVVMVElCWVRFQ09ERUNfTVVMVElCWVRFU1RSRUFNUkVBREVSX1JFU0VUX01FVEhPRERFRiAgICBcCisgICAgeyJyZXNldCIsIChQeUNGdW5jdGlvbilfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3Jlc2V0LCBNRVRIX05PQVJHUywgX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVJlYWRlcl9yZXNldF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVJlYWRlcl9yZXNldF9pbXBsKE11bHRpYnl0ZVN0cmVhbVJlYWRlck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3Jlc2V0KE11bHRpYnl0ZVN0cmVhbVJlYWRlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVJlYWRlcl9yZXNldF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVdyaXRlcl93cml0ZV9fZG9jX18sCisid3JpdGUoJHNlbGYsIHN0cm9iaiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX01VTFRJQllURUNPREVDX01VTFRJQllURVNUUkVBTVdSSVRFUl9XUklURV9NRVRIT0RERUYgICAgXAorICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVdyaXRlcl93cml0ZSwgTUVUSF9PLCBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtV3JpdGVyX3dyaXRlX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtV3JpdGVyX3dyaXRlbGluZXNfX2RvY19fLAorIndyaXRlbGluZXMoJHNlbGYsIGxpbmVzLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfTVVMVElCWVRFQ09ERUNfTVVMVElCWVRFU1RSRUFNV1JJVEVSX1dSSVRFTElORVNfTUVUSE9EREVGICAgIFwKKyAgICB7IndyaXRlbGluZXMiLCAoUHlDRnVuY3Rpb24pX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVdyaXRlcl93cml0ZWxpbmVzLCBNRVRIX08sIF9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1Xcml0ZXJfd3JpdGVsaW5lc19fZG9jX199LAorCitQeURvY19TVFJWQVIoX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVdyaXRlcl9yZXNldF9fZG9jX18sCisicmVzZXQoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVTVFJFQU1XUklURVJfUkVTRVRfTUVUSE9EREVGICAgIFwKKyAgICB7InJlc2V0IiwgKFB5Q0Z1bmN0aW9uKV9tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1Xcml0ZXJfcmVzZXQsIE1FVEhfTk9BUkdTLCBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtV3JpdGVyX3Jlc2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtV3JpdGVyX3Jlc2V0X2ltcGwoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1Xcml0ZXJfcmVzZXQoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtV3JpdGVyX3Jlc2V0X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfbXVsdGlieXRlY29kZWNfX19jcmVhdGVfY29kZWNfX2RvY19fLAorIl9fY3JlYXRlX2NvZGVjKCRtb2R1bGUsIGFyZywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX01VTFRJQllURUNPREVDX19fQ1JFQVRFX0NPREVDX01FVEhPRERFRiAgICBcCisgICAgeyJfX2NyZWF0ZV9jb2RlYyIsIChQeUNGdW5jdGlvbilfbXVsdGlieXRlY29kZWNfX19jcmVhdGVfY29kZWMsIE1FVEhfTywgX211bHRpYnl0ZWNvZGVjX19fY3JlYXRlX2NvZGVjX19kb2NfX30sCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZWViYjIxZTE4YzMwNDNkMSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYwppbmRleCBlMGQ5YjY3Li5mNWM4NDIxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKQEAgLTgsNiArOCwxMyBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgIm11bHRpYnl0ZWNvZGVjLmgiCisjaW5jbHVkZSAiY2xpbmljL211bHRpYnl0ZWNvZGVjLmMuaCIKKworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9tdWx0aWJ5dGVjb2RlYworY2xhc3MgX211bHRpYnl0ZWNvZGVjLk11bHRpYnl0ZUNvZGVjICJNdWx0aWJ5dGVDb2RlY09iamVjdCAqIiAiJk11bHRpYnl0ZUNvZGVjX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD02YWQ2ODk1NDZjYmI1NDUwXSovCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdCAgICAgICAgICAgICppbm9iajsKQEAgLTIyLDI3ICsyOSw3IEBACiAgICAgX1B5VW5pY29kZVdyaXRlciAgICB3cml0ZXI7CiB9IE11bHRpYnl0ZURlY29kZUJ1ZmZlcjsKIAotUHlEb2NfU1RSVkFSKE11bHRpYnl0ZUNvZGVjX0VuY29kZV9fZG9jX18sCi0iSS5lbmNvZGUodW5pY29kZVssIGVycm9yc10pIC0+IChzdHJpbmcsIGxlbmd0aCBjb25zdW1lZClcblwKLVxuXAotUmV0dXJuIGFuIGVuY29kZWQgc3RyaW5nIHZlcnNpb24gb2YgYHVuaWNvZGUnLiBlcnJvcnMgbWF5IGJlIGdpdmVuIHRvXG5cCi1zZXQgYSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBEZWZhdWx0IGlzICdzdHJpY3QnIG1lYW5pbmcgdGhhdFxuXAotZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgVW5pY29kZUVuY29kZUVycm9yLiBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlXG5cCi0naWdub3JlJywgJ3JlcGxhY2UnIGFuZCAneG1sY2hhcnJlZnJlcGxhY2UnIGFzIHdlbGwgYXMgYW55IG90aGVyIG5hbWVcblwKLXJlZ2lzdGVyZWQgd2l0aCBjb2RlY3MucmVnaXN0ZXJfZXJyb3IgdGhhdCBjYW4gaGFuZGxlIFVuaWNvZGVFbmNvZGVFcnJvcnMuIik7Ci0KLVB5RG9jX1NUUlZBUihNdWx0aWJ5dGVDb2RlY19EZWNvZGVfX2RvY19fLAotIkkuZGVjb2RlKHN0cmluZ1ssIGVycm9yc10pIC0+ICh1bmljb2Rlb2JqZWN0LCBsZW5ndGggY29uc3VtZWQpXG5cCi1cblwKLURlY29kZXMgYHN0cmluZycgdXNpbmcgSSwgYW4gTXVsdGlieXRlQ29kZWMgaW5zdGFuY2UuIGVycm9ycyBtYXkgYmUgZ2l2ZW5cblwKLXRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuIERlZmF1bHQgaXMgJ3N0cmljdCcgbWVhbmluZ1xuXAotdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSBVbmljb2RlRGVjb2RlRXJyb3IuIE90aGVyIHBvc3NpYmxlIHZhbHVlc1xuXAotYXJlICdpZ25vcmUnIGFuZCAncmVwbGFjZScgYXMgd2VsbCBhcyBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHdpdGhcblwKLWNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGlzIGFibGUgdG8gaGFuZGxlIFVuaWNvZGVEZWNvZGVFcnJvcnMuIik7Ci0KLXN0YXRpYyBjaGFyICpjb2RlY2t3YXJnbGlzdFtdID0geyJpbnB1dCIsICJlcnJvcnMiLCBOVUxMfTsKIHN0YXRpYyBjaGFyICppbmNuZXdrd2FyZ2xpc3RbXSA9IHsiZXJyb3JzIiwgTlVMTH07Ci1zdGF0aWMgY2hhciAqaW5jcmVtZW50YWxrd2FyZ2xpc3RbXSA9IHsiaW5wdXQiLCAiZmluYWwiLCBOVUxMfTsKIHN0YXRpYyBjaGFyICpzdHJlYW1rd2FyZ2xpc3RbXSA9IHsic3RyZWFtIiwgImVycm9ycyIsIE5VTEx9OwogCiBzdGF0aWMgUHlPYmplY3QgKm11bHRpYnl0ZWNvZGVjX2VuY29kZShNdWx0aWJ5dGVDb2RlYyAqLApAQCAtNTUzLDI2ICs1NDAsMzcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX211bHRpYnl0ZWNvZGVjLk11bHRpYnl0ZUNvZGVjLmVuY29kZQorCisgIGlucHV0OiBvYmplY3QKKyAgZXJyb3JzOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisKK1JldHVybiBhbiBlbmNvZGVkIHN0cmluZyB2ZXJzaW9uIG9mIGBpbnB1dCcuCisKKydlcnJvcnMnIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBEZWZhdWx0IGlzCisnc3RyaWN0JyBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgVW5pY29kZUVuY29kZUVycm9yLiBPdGhlciBwb3NzaWJsZQordmFsdWVzIGFyZSAnaWdub3JlJywgJ3JlcGxhY2UnIGFuZCAneG1sY2hhcnJlZnJlcGxhY2UnIGFzIHdlbGwgYXMgYW55IG90aGVyIG5hbWUKK3JlZ2lzdGVyZWQgd2l0aCBjb2RlY3MucmVnaXN0ZXJfZXJyb3IgdGhhdCBjYW4gaGFuZGxlIFVuaWNvZGVFbmNvZGVFcnJvcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1NdWx0aWJ5dGVDb2RlY19FbmNvZGUoTXVsdGlieXRlQ29kZWNPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlQ29kZWNfZW5jb2RlX2ltcGwoTXVsdGlieXRlQ29kZWNPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03YjI2NjUyMDQ1YmE1NmE5IGlucHV0PTA1ZjZjZWQzYzhkZDA1ODJdKi8KIHsKICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSBzdGF0ZTsKLSAgICBQeU9iamVjdCAqZXJyb3JjYiwgKnIsICphcmcsICp1Y3Z0OwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmVycm9yY2IsICpyLCAqdWN2dDsKICAgICBQeV9zc2l6ZV90IGRhdGFsZW47CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfHo6ZW5jb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY2t3YXJnbGlzdCwgJmFyZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhhcmcpKQorICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soaW5wdXQpKQogICAgICAgICB1Y3Z0ID0gTlVMTDsKICAgICBlbHNlIHsKLSAgICAgICAgYXJnID0gdWN2dCA9IFB5T2JqZWN0X1N0cihhcmcpOwotICAgICAgICBpZiAoYXJnID09IE5VTEwpCisgICAgICAgIGlucHV0ID0gdWN2dCA9IFB5T2JqZWN0X1N0cihpbnB1dCk7CisgICAgICAgIGlmIChpbnB1dCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2soYXJnKSkgeworICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKGlucHV0KSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAiY291bGRuJ3QgY29udmVydCB0aGUgb2JqZWN0IHRvIHVuaWNvZGUuIik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodWN2dCk7CkBAIC01ODAsMTEgKzU3OCwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShhcmcpIDwgMCkgeworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaW5wdXQpIDwgMCkgewogICAgICAgICBQeV9YREVDUkVGKHVjdnQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZGF0YWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGFyZyk7CisgICAgZGF0YWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGlucHV0KTsKIAogICAgIGVycm9yY2IgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChlcnJvcmNiID09IE5VTEwpIHsKQEAgLTU5Niw3ICs1OTQsNyBAQAogICAgICAgICBzZWxmLT5jb2RlYy0+ZW5jaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoc2VsZi0+Y29kZWMsICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgYXJnLCBOVUxMLCBlcnJvcmNiLAorICAgICAgICAgICAgICAgICAgICBpbnB1dCwgTlVMTCwgZXJyb3JjYiwKICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCk7CiAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC02MTEsMzEgKzYwOSw0MSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfbXVsdGlieXRlY29kZWMuTXVsdGlieXRlQ29kZWMuZGVjb2RlCisKKyAgaW5wdXQ6IFB5X2J1ZmZlcgorICBlcnJvcnM6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKworRGVjb2RlcyAnaW5wdXQnLgorCisnZXJyb3JzJyBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gRGVmYXVsdCBpcworJ3N0cmljdCcgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhIFVuaWNvZGVEZWNvZGVFcnJvci4gT3RoZXIgcG9zc2libGUKK3ZhbHVlcyBhcmUgJ2lnbm9yZScgYW5kICdyZXBsYWNlJyBhcyB3ZWxsIGFzIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgd2l0aAorY29kZWNzLnJlZ2lzdGVyX2Vycm9yIHRoYXQgaXMgYWJsZSB0byBoYW5kbGUgVW5pY29kZURlY29kZUVycm9ycy4iCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1NdWx0aWJ5dGVDb2RlY19EZWNvZGUoTXVsdGlieXRlQ29kZWNPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlQ29kZWNfZGVjb2RlX2ltcGwoTXVsdGlieXRlQ29kZWNPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfYnVmZmVyICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmY0MTlmNjViYWQ2Y2M3NyBpbnB1dD1hN2Q0NWY4N2Y3NWU1ZTAyXSovCiB7CiAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgc3RhdGU7CiAgICAgTXVsdGlieXRlRGVjb2RlQnVmZmVyIGJ1ZjsKICAgICBQeU9iamVjdCAqZXJyb3JjYiwgKnJlczsKLSAgICBQeV9idWZmZXIgcGRhdGE7Ci0gICAgY29uc3QgY2hhciAqZGF0YSwgKmVycm9ycyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZGF0YTsKICAgICBQeV9zc2l6ZV90IGRhdGFsZW47CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ5Knx6OmRlY29kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNrd2FyZ2xpc3QsICZwZGF0YSwgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGRhdGEgPSBwZGF0YS5idWY7Ci0gICAgZGF0YWxlbiA9IHBkYXRhLmxlbjsKKyAgICBkYXRhID0gaW5wdXQtPmJ1ZjsKKyAgICBkYXRhbGVuID0gaW5wdXQtPmxlbjsKIAogICAgIGVycm9yY2IgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChlcnJvcmNiID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpZiAoZGF0YWxlbiA9PSAwKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwogICAgICAgICByZXR1cm4gbWFrZV90dXBsZShQeVVuaWNvZGVfTmV3KDAsIDApLCAwKTsKICAgICB9CkBAIC02NjgsMTMgKzY3NiwxMSBAQAogICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKICAgICBFUlJPUl9ERUNSRUYoZXJyb3JjYik7CiAgICAgcmV0dXJuIG1ha2VfdHVwbGUocmVzLCBkYXRhbGVuKTsKIAogZXJyb3JleGl0OgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBFUlJPUl9ERUNSRUYoZXJyb3JjYik7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKICAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwpAQCAtNjgzLDEzICs2ODksOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG11bHRpYnl0ZWNvZGVjX21ldGhvZHNbXSA9IHsKLSAgICB7ImVuY29kZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilNdWx0aWJ5dGVDb2RlY19FbmNvZGUsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX0VuY29kZV9fZG9jX199LAotICAgIHsiZGVjb2RlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKU11bHRpYnl0ZUNvZGVjX0RlY29kZSwKLSAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfRGVjb2RlX19kb2NfX30sCi0gICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSwKKyAgICBfTVVMVElCWVRFQ09ERUNfTVVMVElCWVRFQ09ERUNfRU5DT0RFX01FVEhPRERFRgorICAgIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVDT0RFQ19ERUNPREVfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9LAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTc5MSw4ICs3OTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5lcnJvcnMsIGZpbmFsID8gTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCA6IDApOwogICAgIGlmIChyID09IE5VTEwpIHsKICAgICAgICAgLyogcmVjb3ZlciB0aGUgb3JpZ2luYWwgcGVuZGluZyBidWZmZXIgKi8KLSAgICAgICAgUHlfQ0xFQVIoY3R4LT5wZW5kaW5nKTsKLSAgICAgICAgY3R4LT5wZW5kaW5nID0gb3JpZ3BlbmRpbmc7CisgICAgICAgIFB5X1hTRVRSRUYoY3R4LT5wZW5kaW5nLCBvcmlncGVuZGluZyk7CiAgICAgICAgIG9yaWdwZW5kaW5nID0gTlVMTDsKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQpAQCAtODczLDI2ICs4NzQsMzQgQEAKIH0KIAogCi0vKioKLSAqIE11bHRpYnl0ZUluY3JlbWVudGFsRW5jb2RlciBvYmplY3QKLSAqLworLypbY2xpbmljIGlucHV0XQorIGNsYXNzIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVJbmNyZW1lbnRhbEVuY29kZXIgIk11bHRpYnl0ZUluY3JlbWVudGFsRW5jb2Rlck9iamVjdCAqIiAiJk11bHRpYnl0ZUluY3JlbWVudGFsRW5jb2Rlcl9UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9M2JlODI5MDljZDA4OTI0ZF0qLworCisvKltjbGluaWMgaW5wdXRdCitfbXVsdGlieXRlY29kZWMuTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyLmVuY29kZQorCisgICAgaW5wdXQ6IG9iamVjdAorICAgIGZpbmFsOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotbWJpZW5jb2Rlcl9lbmNvZGUoTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyX2VuY29kZV9pbXBsKE11bHRpYnl0ZUluY3JlbWVudGFsRW5jb2Rlck9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmluYWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTIzMzYxYjZjNTA1ZTJjMSBpbnB1dD1hMzQ1YzY4OGZhNjY0ZjkyXSovCiB7Ci0gICAgUHlPYmplY3QgKmRhdGE7Ci0gICAgaW50IGZpbmFsID0gMDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98aTplbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbGt3YXJnbGlzdCwgJmRhdGEsICZmaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dXJuIGVuY29kZXJfZW5jb2RlX3N0YXRlZnVsKFNUQVRFRlVMX0VDVFgoc2VsZiksIGRhdGEsIGZpbmFsKTsKKyAgICByZXR1cm4gZW5jb2Rlcl9lbmNvZGVfc3RhdGVmdWwoU1RBVEVGVUxfRUNUWChzZWxmKSwgaW5wdXQsIGZpbmFsKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX211bHRpYnl0ZWNvZGVjLk11bHRpYnl0ZUluY3JlbWVudGFsRW5jb2Rlci5yZXNldAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbWJpZW5jb2Rlcl9yZXNldChNdWx0aWJ5dGVJbmNyZW1lbnRhbEVuY29kZXJPYmplY3QgKnNlbGYpCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyX3Jlc2V0X2ltcGwoTXVsdGlieXRlSW5jcmVtZW50YWxFbmNvZGVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI0MTI1ZDhmNTM3YTI1M2YgaW5wdXQ9OTMwZjA2NzYwNzA3YjZlYV0qLwogewogICAgIC8qIExvbmdlc3Qgb3V0cHV0OiA0IGJ5dGVzIChiJ1x4MEZceDFGKEInKSB3aXRoIElTTyAyMDIyICovCiAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF0sICpvdXRidWY7CkBAIC05MDksMTEgKzkxOCw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbWJpZW5jb2Rlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJlbmNvZGUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pbWJpZW5jb2Rlcl9lbmNvZGUsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIE5VTEx9LAotICAgIHsicmVzZXQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW1iaWVuY29kZXJfcmVzZXQsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBOVUxMfSwKLSAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9LAorICAgIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVJTkNSRU1FTlRBTEVOQ09ERVJfRU5DT0RFX01FVEhPRERFRgorICAgIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVJTkNSRU1FTlRBTEVOQ09ERVJfUkVTRVRfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9LAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEwMjQsMjYgKzEwMzEsMzEgQEAKIH07CiAKIAotLyoqCi0gKiBNdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXIgb2JqZWN0Ci0gKi8KKy8qW2NsaW5pYyBpbnB1dF0KKyBjbGFzcyBfbXVsdGlieXRlY29kZWMuTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyICJNdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXJPYmplY3QgKiIgIiZNdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXJfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWY2MDAzZmFhZjJjZWE2OTJdKi8KKworLypbY2xpbmljIGlucHV0XQorX211bHRpYnl0ZWNvZGVjLk11bHRpYnl0ZUluY3JlbWVudGFsRGVjb2Rlci5kZWNvZGUKKworICAgIGlucHV0OiBQeV9idWZmZXIKKyAgICBmaW5hbDogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLW1iaWRlY29kZXJfZGVjb2RlKE11bHRpYnl0ZUluY3JlbWVudGFsRGVjb2Rlck9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZUluY3JlbWVudGFsRGVjb2Rlcl9kZWNvZGVfaW1wbChNdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXJPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaW5hbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iOWI5MDkwZThhOWNlMmJhIGlucHV0PTU3NjYzMWM2MTkwNmQzOWRdKi8KIHsKICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgYnVmOwogICAgIGNoYXIgKmRhdGEsICp3ZGF0YSA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIHBkYXRhOwogICAgIFB5X3NzaXplX3Qgd3NpemUsIHNpemUsIG9yaWdwZW5kaW5nOwotICAgIGludCBmaW5hbCA9IDA7CiAgICAgUHlPYmplY3QgKnJlczsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfGk6ZGVjb2RlIiwKLSAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxrd2FyZ2xpc3QsICZwZGF0YSwgJmZpbmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZGF0YSA9IHBkYXRhLmJ1ZjsKLSAgICBzaXplID0gcGRhdGEubGVuOworICAgIGRhdGEgPSBpbnB1dC0+YnVmOworICAgIHNpemUgPSBpbnB1dC0+bGVuOwogCiAgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKICAgICBidWYuZXhjb2JqID0gTlVMTDsKQEAgLTEwOTQsMTQgKzExMDYsMTIgQEAKICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIGlmICh3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7CiAgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBpZiAod2RhdGEgIT0gTlVMTCAmJiB3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7CkBAIC0xMTA5LDggKzExMTksMTMgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX211bHRpYnl0ZWNvZGVjLk11bHRpYnl0ZUluY3JlbWVudGFsRGVjb2Rlci5yZXNldAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbWJpZGVjb2Rlcl9yZXNldChNdWx0aWJ5dGVJbmNyZW1lbnRhbERlY29kZXJPYmplY3QgKnNlbGYpCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyX3Jlc2V0X2ltcGwoTXVsdGlieXRlSW5jcmVtZW50YWxEZWNvZGVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhNDIzYjE3ODJjMjNlZDEgaW5wdXQ9M2I2M2IzYmU4NWIyZmI0NV0qLwogewogICAgIGlmIChzZWxmLT5jb2RlYy0+ZGVjcmVzZXQgIT0gTlVMTCAmJgogICAgICAgICBzZWxmLT5jb2RlYy0+ZGVjcmVzZXQoJnNlbGYtPnN0YXRlLCBzZWxmLT5jb2RlYy0+Y29uZmlnKSAhPSAwKQpAQCAtMTEyMSwxMSArMTEzNiw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbWJpZGVjb2Rlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJkZWNvZGUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pbWJpZGVjb2Rlcl9kZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIE5VTEx9LAotICAgIHsicmVzZXQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW1iaWRlY29kZXJfcmVzZXQsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBOVUxMfSwKLSAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9LAorICAgIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVJTkNSRU1FTlRBTERFQ09ERVJfREVDT0RFX01FVEhPRERFRgorICAgIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVJTkNSRU1FTlRBTERFQ09ERVJfUkVTRVRfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9LAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEyMzYsOSArMTI0OSwxMCBAQAogfTsKIAogCi0vKioKLSAqIE11bHRpYnl0ZVN0cmVhbVJlYWRlciBvYmplY3QKLSAqLworLypbY2xpbmljIGlucHV0XQorIGNsYXNzIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVTdHJlYW1SZWFkZXIgIk11bHRpYnl0ZVN0cmVhbVJlYWRlck9iamVjdCAqIiAiTXVsdGlieXRlU3RyZWFtUmVhZGVyX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1kMzIzNjM0Yjc0OTc2ZjA5XSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBtYnN0cmVhbXJlYWRlcl9pcmVhZChNdWx0aWJ5dGVTdHJlYW1SZWFkZXJPYmplY3QgKnNlbGYsCkBAIC0xMjYwLDEwICsxMjc0LDEwIEBACiAKICAgICAgICAgaWYgKHNpemVoaW50IDwgMCkKICAgICAgICAgICAgIGNyZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKW1ldGhvZCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLCBOVUxMKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY3JlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc2VsZi0+c3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopbWV0aG9kLCAiaSIsIHNpemVoaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsICJpIiwgc2l6ZWhpbnQpOwogICAgICAgICBpZiAoY3JlcyA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKQEAgLTEzNDUsMTYgKzEzNTksMjEgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVTdHJlYW1SZWFkZXIucmVhZAorCisgICAgc2l6ZW9iajogb2JqZWN0ID0gTm9uZQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW1ic3RyZWFtcmVhZGVyX3JlYWQoTXVsdGlieXRlU3RyZWFtUmVhZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVhZF9pbXBsKE11bHRpYnl0ZVN0cmVhbVJlYWRlck9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzaXplb2JqKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM1NjIxZWI3NTM1NWQ1YjggaW5wdXQ9MDE1YjBkM2ZmMmZjYTQ4NV0qLwogewotICAgIFB5T2JqZWN0ICpzaXplb2JqID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZWFkIiwgMCwgMSwgJnNpemVvYmopKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChzaXplb2JqID09IFB5X05vbmUgfHwgc2l6ZW9iaiA9PSBOVUxMKQorICAgIGlmIChzaXplb2JqID09IFB5X05vbmUpCiAgICAgICAgIHNpemUgPSAtMTsKICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2soc2l6ZW9iaikpCiAgICAgICAgIHNpemUgPSBQeUxvbmdfQXNTc2l6ZV90KHNpemVvYmopOwpAQCAtMTM2OSwxNiArMTM4OCwyMSBAQAogICAgIHJldHVybiBtYnN0cmVhbXJlYWRlcl9pcmVhZChzZWxmLCAicmVhZCIsIHNpemUpOwogfQogCisvKltjbGluaWMgaW5wdXRdCisgX211bHRpYnl0ZWNvZGVjLk11bHRpYnl0ZVN0cmVhbVJlYWRlci5yZWFkbGluZQorCisgICAgc2l6ZW9iajogb2JqZWN0ID0gTm9uZQorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW1ic3RyZWFtcmVhZGVyX3JlYWRsaW5lKE11bHRpYnl0ZVN0cmVhbVJlYWRlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtUmVhZGVyX3JlYWRsaW5lX2ltcGwoTXVsdGlieXRlU3RyZWFtUmVhZGVyT2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzaXplb2JqKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRmYmZhYWUxZWQ0NTdhMTEgaW5wdXQ9NDFjY2M2NGY5YmIwY2VjM10qLwogewotICAgIFB5T2JqZWN0ICpzaXplb2JqID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZWFkbGluZSIsIDAsIDEsICZzaXplb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoc2l6ZW9iaiA9PSBQeV9Ob25lIHx8IHNpemVvYmogPT0gTlVMTCkKKyAgICBpZiAoc2l6ZW9iaiA9PSBQeV9Ob25lKQogICAgICAgICBzaXplID0gLTE7CiAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHNpemVvYmopKQogICAgICAgICBzaXplID0gUHlMb25nX0FzU3NpemVfdChzaXplb2JqKTsKQEAgLTEzOTMsMTYgKzE0MTcsMjIgQEAKICAgICByZXR1cm4gbWJzdHJlYW1yZWFkZXJfaXJlYWQoc2VsZiwgInJlYWRsaW5lIiwgc2l6ZSk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KKyBfbXVsdGlieXRlY29kZWMuTXVsdGlieXRlU3RyZWFtUmVhZGVyLnJlYWRsaW5lcworCisgICAgc2l6ZWhpbnRvYmo6IG9iamVjdCA9IE5vbmUKKyAgICAvCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1tYnN0cmVhbXJlYWRlcl9yZWFkbGluZXMoTXVsdGlieXRlU3RyZWFtUmVhZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVhZGxpbmVzX2ltcGwoTXVsdGlieXRlU3RyZWFtUmVhZGVyT2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc2l6ZWhpbnRvYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTdjNDMxMDc2OGVkMmFkNCBpbnB1dD01NDkzMmY1ZDRkODhlODgwXSovCiB7Ci0gICAgUHlPYmplY3QgKnNpemVoaW50b2JqID0gTlVMTCwgKnIsICpzcjsKKyAgICBQeU9iamVjdCAqciwgKnNyOwogICAgIFB5X3NzaXplX3Qgc2l6ZWhpbnQ7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyZWFkbGluZXMiLCAwLCAxLCAmc2l6ZWhpbnRvYmopKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChzaXplaGludG9iaiA9PSBQeV9Ob25lIHx8IHNpemVoaW50b2JqID09IE5VTEwpCisgICAgaWYgKHNpemVoaW50b2JqID09IFB5X05vbmUpCiAgICAgICAgIHNpemVoaW50ID0gLTE7CiAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHNpemVoaW50b2JqKSkKICAgICAgICAgc2l6ZWhpbnQgPSBQeUxvbmdfQXNTc2l6ZV90KHNpemVoaW50b2JqKTsKQEAgLTE0MjMsOCArMTQ1MywxMyBAQAogICAgIHJldHVybiBzcjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVTdHJlYW1SZWFkZXIucmVzZXQKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW1ic3RyZWFtcmVhZGVyX3Jlc2V0KE11bHRpYnl0ZVN0cmVhbVJlYWRlck9iamVjdCAqc2VsZikKK19tdWx0aWJ5dGVjb2RlY19NdWx0aWJ5dGVTdHJlYW1SZWFkZXJfcmVzZXRfaW1wbChNdWx0aWJ5dGVTdHJlYW1SZWFkZXJPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTM4NDkwMzcwYTY4MGFiYyBpbnB1dD01ZDQxNDBkYjg0YjVlMWUyXSovCiB7CiAgICAgaWYgKHNlbGYtPmNvZGVjLT5kZWNyZXNldCAhPSBOVUxMICYmCiAgICAgICAgIHNlbGYtPmNvZGVjLT5kZWNyZXNldCgmc2VsZi0+c3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCkBAIC0xNDM1LDE0ICsxNDcwLDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbWJzdHJlYW1yZWFkZXJfbWV0aG9kc1tdID0gewotICAgIHsicmVhZCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW1ic3RyZWFtcmVhZGVyX3JlYWQsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgTlVMTH0sCi0gICAgeyJyZWFkbGluZSIsICAgICAgICAoUHlDRnVuY3Rpb24pbWJzdHJlYW1yZWFkZXJfcmVhZGxpbmUsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgTlVMTH0sCi0gICAgeyJyZWFkbGluZXMiLCAgICAgICAoUHlDRnVuY3Rpb24pbWJzdHJlYW1yZWFkZXJfcmVhZGxpbmVzLAotICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsIE5VTEx9LAotICAgIHsicmVzZXQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW1ic3RyZWFtcmVhZGVyX3Jlc2V0LAotICAgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgX01VTFRJQllURUNPREVDX01VTFRJQllURVNUUkVBTVJFQURFUl9SRUFEX01FVEhPRERFRgorICAgIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVTVFJFQU1SRUFERVJfUkVBRExJTkVfTUVUSE9EREVGCisgICAgX01VTFRJQllURUNPREVDX01VTFRJQllURVNUUkVBTVJFQURFUl9SRUFETElORVNfTUVUSE9EREVGCisgICAgX01VTFRJQllURUNPREVDX01VTFRJQllURVNUUkVBTVJFQURFUl9SRVNFVF9NRVRIT0RERUYKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9LAogfTsKIApAQCAtMTU2NSw5ICsxNTk2LDEwIEBACiB9OwogCiAKLS8qKgotICogTXVsdGlieXRlU3RyZWFtV3JpdGVyIG9iamVjdAotICovCisvKltjbGluaWMgaW5wdXRdCisgY2xhc3MgX211bHRpYnl0ZWNvZGVjLk11bHRpYnl0ZVN0cmVhbVdyaXRlciAiTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICoiICImTXVsdGlieXRlU3RyZWFtV3JpdGVyX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1jZGUyMjc4MGEyMTVkNmFjXSovCiAKIHN0YXRpYyBpbnQKIG1ic3RyZWFtd3JpdGVyX2l3cml0ZShNdWx0aWJ5dGVTdHJlYW1Xcml0ZXJPYmplY3QgKnNlbGYsCkBAIC0xNTg4LDggKzE2MjAsMTcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVTdHJlYW1Xcml0ZXIud3JpdGUKKworICAgIHN0cm9iajogb2JqZWN0CisgICAgLworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbWJzdHJlYW13cml0ZXJfd3JpdGUoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3Ryb2JqKQorX211bHRpYnl0ZWNvZGVjX011bHRpYnl0ZVN0cmVhbVdyaXRlcl93cml0ZShNdWx0aWJ5dGVTdHJlYW1Xcml0ZXJPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJvYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTEzYWU4NDFjODk1MjUxZSBpbnB1dD01NTFkYzRjMDE4YzEwYTJiXSovCiB7CiAgICAgaWYgKG1ic3RyZWFtd3JpdGVyX2l3cml0ZShzZWxmLCBzdHJvYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1OTcsOCArMTYzOCwxNyBAQAogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVTdHJlYW1Xcml0ZXIud3JpdGVsaW5lcworCisgICAgbGluZXM6IG9iamVjdAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW1ic3RyZWFtd3JpdGVyX3dyaXRlbGluZXMoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbGluZXMpCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtV3JpdGVyX3dyaXRlbGluZXMoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsaW5lcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNWM0Mjg1YWM4ZTdkNTIyIGlucHV0PTU3Nzk3ZmU3MDA4ZDRlOTZdKi8KIHsKICAgICBQeU9iamVjdCAqc3Ryb2JqOwogICAgIGludCBpLCByOwpAQCAtMTYyNCw4ICsxNjc0LDEzIEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KKyBfbXVsdGlieXRlY29kZWMuTXVsdGlieXRlU3RyZWFtV3JpdGVyLnJlc2V0CitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1tYnN0cmVhbXdyaXRlcl9yZXNldChNdWx0aWJ5dGVTdHJlYW1Xcml0ZXJPYmplY3QgKnNlbGYpCitfbXVsdGlieXRlY29kZWNfTXVsdGlieXRlU3RyZWFtV3JpdGVyX3Jlc2V0X2ltcGwoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThmNTRhNGQ5YjAzZGI1ZmYgaW5wdXQ9YjU2ZGJjYmFmMzVjYzEwY10qLwogewogICAgIFB5T2JqZWN0ICpwd3J0OwogCkBAIC0xNzI3LDEzICsxNzgyLDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbWJzdHJlYW13cml0ZXJfbWV0aG9kc1tdID0gewotICAgIHsid3JpdGUiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW1ic3RyZWFtd3JpdGVyX3dyaXRlLAotICAgICAgICAgICAgICAgICAgICBNRVRIX08sIE5VTEx9LAotICAgIHsid3JpdGVsaW5lcyIsICAgICAgKFB5Q0Z1bmN0aW9uKW1ic3RyZWFtd3JpdGVyX3dyaXRlbGluZXMsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfTywgTlVMTH0sCi0gICAgeyJyZXNldCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pbWJzdHJlYW13cml0ZXJfcmVzZXQsCi0gICAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBOVUxMfSwKLSAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9LAorICAgIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVTVFJFQU1XUklURVJfV1JJVEVfTUVUSE9EREVGCisgICAgX01VTFRJQllURUNPREVDX01VTFRJQllURVNUUkVBTVdSSVRFUl9XUklURUxJTkVTX01FVEhPRERFRgorICAgIF9NVUxUSUJZVEVDT0RFQ19NVUxUSUJZVEVTVFJFQU1XUklURVJfUkVTRVRfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9LAogfTsKIAogc3RhdGljIFB5TWVtYmVyRGVmIG1ic3RyZWFtd3JpdGVyX21lbWJlcnNbXSA9IHsKQEAgLTE3ODcsMTIgKzE4MzksMTYgQEAKIH07CiAKIAotLyoqCi0gKiBFeHBvc2VkIGZhY3RvcnkgZnVuY3Rpb24KLSAqLworLypbY2xpbmljIGlucHV0XQorX211bHRpYnl0ZWNvZGVjLl9fY3JlYXRlX2NvZGVjCisKKyAgICBhcmc6IG9iamVjdAorICAgIC8KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLV9fY3JlYXRlX2NvZGVjKFB5T2JqZWN0ICppZ25vcmUsIFB5T2JqZWN0ICphcmcpCitfbXVsdGlieXRlY29kZWNfX19jcmVhdGVfY29kZWMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jZmEzZGNlODI2MGU4MDlkIGlucHV0PTY4NDBiMmE2YjE4M2ZjZmFdKi8KIHsKICAgICBNdWx0aWJ5dGVDb2RlY09iamVjdCAqc2VsZjsKICAgICBNdWx0aWJ5dGVDb2RlYyAqY29kZWM7CkBAIC0xODE1LDcgKzE4NzEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIF9fbWV0aG9kc1tdID0gewotICAgIHsiX19jcmVhdGVfY29kZWMiLCAoUHlDRnVuY3Rpb24pX19jcmVhdGVfY29kZWMsIE1FVEhfT30sCisgICAgX01VTFRJQllURUNPREVDX19fQ1JFQVRFX0NPREVDX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSwKIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL19iejJtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvX2J6Mm1vZHVsZS5jLmgKaW5kZXggOGEyMDFhMC4uM2VkODMwMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbGluaWMvX2J6Mm1vZHVsZS5jLmgKKysrIGIvTW9kdWxlcy9jbGluaWMvX2J6Mm1vZHVsZS5jLmgKQEAgLTE0LDIwICsxNCwxOCBAQAogImZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4iKTsKIAogI2RlZmluZSBfQloyX0JaMkNPTVBSRVNTT1JfQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKLSAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3NfX2RvY19ffSwKKyAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9PLCBfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3NfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKIF9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3MoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3MoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSo6Y29tcHJlc3MiLAotICAgICAgICAmZGF0YSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ5Kjpjb21wcmVzcyIsICZkYXRhKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IF9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKIApAQCAtODQsOCArODIsNyBAQAogICAgIGlmICgoUHlfVFlQRShzZWxmKSA9PSAmQloyQ29tcHJlc3Nvcl9UeXBlKSAmJgogICAgICAgICAhX1B5QXJnX05vS2V5d29yZHMoIkJaMkNvbXByZXNzb3IiLCBrd2FyZ3MpKQogICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ8aTpCWjJDb21wcmVzc29yIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOkJaMkNvbXByZXNzb3IiLAogICAgICAgICAmY29tcHJlc3NsZXZlbCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19faW1wbCgoQloyQ29tcHJlc3NvciAqKXNlbGYsIGNvbXByZXNzbGV2ZWwpOwpAQCAtOTUsMzQgKzkyLDQzIEBACiB9CiAKIFB5RG9jX1NUUlZBUihfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfXywKLSJkZWNvbXByZXNzKCRzZWxmLCBkYXRhLCAvKVxuIgorImRlY29tcHJlc3MoJHNlbGYsIC8sIGRhdGEsIG1heF9sZW5ndGg9LTEpXG4iCiAiLS1cbiIKICJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuXG4iCisiRGVjb21wcmVzcyAqZGF0YSosIHJldHVybmluZyB1bmNvbXByZXNzZWQgZGF0YSBhcyBieXRlcy5cbiIKICJcbiIKLSJSZXR1cm5zIGEgY2h1bmsgb2YgZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcJ1wnIG90aGVyd2lzZS5cbiIKKyJJZiAqbWF4X2xlbmd0aCogaXMgbm9ubmVnYXRpdmUsIHJldHVybnMgYXQgbW9zdCAqbWF4X2xlbmd0aCogYnl0ZXMgb2ZcbiIKKyJkZWNvbXByZXNzZWQgZGF0YS4gSWYgdGhpcyBsaW1pdCBpcyByZWFjaGVkIGFuZCBmdXJ0aGVyIG91dHB1dCBjYW4gYmVcbiIKKyJwcm9kdWNlZCwgKnNlbGYubmVlZHNfaW5wdXQqIHdpbGwgYmUgc2V0IHRvIGBgRmFsc2VgYC4gSW4gdGhpcyBjYXNlLCB0aGUgbmV4dFxuIgorImNhbGwgdG8gKmRlY29tcHJlc3MoKSogbWF5IHByb3ZpZGUgKmRhdGEqIGFzIGJcJ1wnIHRvIG9idGFpbiBtb3JlIG9mIHRoZSBvdXRwdXQuXG4iCiAiXG4iCi0iQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZFxuIgotInJhaXNlcyBhbiBFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbVxuIgotImlzIGlnbm9yZWQgYW5kIHNhdmVkIGluIHRoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuIik7CisiSWYgYWxsIG9mIHRoZSBpbnB1dCBkYXRhIHdhcyBkZWNvbXByZXNzZWQgYW5kIHJldHVybmVkIChlaXRoZXIgYmVjYXVzZSB0aGlzXG4iCisid2FzIGxlc3MgdGhhbiAqbWF4X2xlbmd0aCogYnl0ZXMsIG9yIGJlY2F1c2UgKm1heF9sZW5ndGgqIHdhcyBuZWdhdGl2ZSksXG4iCisiKnNlbGYubmVlZHNfaW5wdXQqIHdpbGwgYmUgc2V0IHRvIFRydWUuXG4iCisiXG4iCisiQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZCByYWlzZXMgYW5cbiIKKyJFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSBpcyBpZ25vcmVkIGFuZCBzYXZlZCBpblxuIgorInRoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuIik7CiAKICNkZWZpbmUgX0JaMl9CWjJERUNPTVBSRVNTT1JfREVDT01QUkVTU19NRVRIT0RERUYgICAgXAotICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIF9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX2RvY19ffSwKKyAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLV9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChCWjJEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CitfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhfbGVuZ3RoKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLV9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3MoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3MoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImRhdGEiLCAibWF4X2xlbmd0aCIsIE5VTEx9OwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIFB5X3NzaXplX3QgbWF4X2xlbmd0aCA9IC0xOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KjpkZWNvbXByZXNzIiwKLSAgICAgICAgJmRhdGEpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfG46ZGVjb21wcmVzcyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRhdGEsICZtYXhfbGVuZ3RoKSkKICAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IF9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSk7CisgICAgcmV0dXJuX3ZhbHVlID0gX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKHNlbGYsICZkYXRhLCBtYXhfbGVuZ3RoKTsKIAogZXhpdDoKICAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCkBAIC0xNTksNCArMTY1LDQgQEAKIGV4aXQ6CiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMWNhNDQwNTUxOWEwOTMxIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZWYyOWI3NmIzMzE0ZmM3IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL19jb2RlY3Ntb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvX2NvZGVjc21vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwNmM2ZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL19jb2RlY3Ntb2R1bGUuYy5oCkBAIC0wLDAgKzEsMTM5NSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfcmVnaXN0ZXJfX2RvY19fLAorInJlZ2lzdGVyKCRtb2R1bGUsIHNlYXJjaF9mdW5jdGlvbiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlZ2lzdGVyIGEgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLlxuIgorIlxuIgorIlNlYXJjaCBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIHRha2Ugb25lIGFyZ3VtZW50LCB0aGUgZW5jb2RpbmcgbmFtZSBpblxuIgorImFsbCBsb3dlciBjYXNlIGxldHRlcnMsIGFuZCBlaXRoZXIgcmV0dXJuIE5vbmUsIG9yIGEgdHVwbGUgb2YgZnVuY3Rpb25zXG4iCisiKGVuY29kZXIsIGRlY29kZXIsIHN0cmVhbV9yZWFkZXIsIHN0cmVhbV93cml0ZXIpIChvciBhIENvZGVjSW5mbyBvYmplY3QpLiIpOworCisjZGVmaW5lIF9DT0RFQ1NfUkVHSVNURVJfTUVUSE9EREVGICAgIFwKKyAgICB7InJlZ2lzdGVyIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfcmVnaXN0ZXIsIE1FVEhfTywgX2NvZGVjc19yZWdpc3Rlcl9fZG9jX199LAorCitQeURvY19TVFJWQVIoX2NvZGVjc19sb29rdXBfX2RvY19fLAorImxvb2t1cCgkbW9kdWxlLCBlbmNvZGluZywgLylcbiIKKyItLVxuIgorIlxuIgorIkxvb2tzIHVwIGEgY29kZWMgdHVwbGUgaW4gdGhlIFB5dGhvbiBjb2RlYyByZWdpc3RyeSBhbmQgcmV0dXJucyBhIENvZGVjSW5mbyBvYmplY3QuIik7CisKKyNkZWZpbmUgX0NPREVDU19MT09LVVBfTUVUSE9EREVGICAgIFwKKyAgICB7Imxvb2t1cCIsIChQeUNGdW5jdGlvbilfY29kZWNzX2xvb2t1cCwgTUVUSF9PLCBfY29kZWNzX2xvb2t1cF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19sb29rdXBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICplbmNvZGluZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2xvb2t1cChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJzOmxvb2t1cCIsICZlbmNvZGluZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX2xvb2t1cF9pbXBsKG1vZHVsZSwgZW5jb2RpbmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX2VuY29kZV9fZG9jX18sCisiZW5jb2RlKCRtb2R1bGUsIC8sIG9iaiwgZW5jb2Rpbmc9XCd1dGYtOFwnLCBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyItLVxuIgorIlxuIgorIkVuY29kZXMgb2JqIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciBlbmNvZGluZy5cbiIKKyJcbiIKKyJUaGUgZGVmYXVsdCBlbmNvZGluZyBpcyBcJ3V0Zi04XCcuICBlcnJvcnMgbWF5IGJlIGdpdmVuIHRvIHNldCBhXG4iCisiZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gIERlZmF1bHQgaXMgXCdzdHJpY3RcJyBtZWFuaW5nIHRoYXQgZW5jb2RpbmdcbiIKKyJlcnJvcnMgcmFpc2UgYSBWYWx1ZUVycm9yLiAgT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSBcJ2lnbm9yZVwnLCBcJ3JlcGxhY2VcJ1xuIgorImFuZCBcJ2JhY2tzbGFzaHJlcGxhY2VcJyBhcyB3ZWxsIGFzIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgd2l0aFxuIgorImNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGNhbiBoYW5kbGUgVmFsdWVFcnJvcnMuIik7CisKKyNkZWZpbmUgX0NPREVDU19FTkNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7ImVuY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX2VuY29kZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9jb2RlY3NfZW5jb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19lbmNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJvYmoiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98c3M6ZW5jb2RlIiwgX2tleXdvcmRzLAorICAgICAgICAmb2JqLCAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19lbmNvZGVfaW1wbChtb2R1bGUsIG9iaiwgZW5jb2RpbmcsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfZGVjb2RlX19kb2NfXywKKyJkZWNvZGUoJG1vZHVsZSwgLywgb2JqLCBlbmNvZGluZz1cJ3V0Zi04XCcsIGVycm9ycz1cJ3N0cmljdFwnKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlcyBvYmogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yIGVuY29kaW5nLlxuIgorIlxuIgorIkRlZmF1bHQgZW5jb2RpbmcgaXMgXCd1dGYtOFwnLiAgZXJyb3JzIG1heSBiZSBnaXZlbiB0byBzZXQgYVxuIgorImRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBEZWZhdWx0IGlzIFwnc3RyaWN0XCcgbWVhbmluZyB0aGF0IGVuY29kaW5nXG4iCisiZXJyb3JzIHJhaXNlIGEgVmFsdWVFcnJvci4gIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgXCdpZ25vcmVcJywgXCdyZXBsYWNlXCdcbiIKKyJhbmQgXCdiYWNrc2xhc2hyZXBsYWNlXCcgYXMgd2VsbCBhcyBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHdpdGhcbiIKKyJjb2RlY3MucmVnaXN0ZXJfZXJyb3IgdGhhdCBjYW4gaGFuZGxlIFZhbHVlRXJyb3JzLiIpOworCisjZGVmaW5lIF9DT0RFQ1NfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc19kZWNvZGUsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfY29kZWNzX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfZGVjb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsib2JqIiwgImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfHNzOmRlY29kZSIsIF9rZXl3b3JkcywKKyAgICAgICAgJm9iaiwgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfZGVjb2RlX2ltcGwobW9kdWxlLCBvYmosIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX19mb3JnZXRfY29kZWNfX2RvY19fLAorIl9mb3JnZXRfY29kZWMoJG1vZHVsZSwgZW5jb2RpbmcsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQdXJnZSB0aGUgbmFtZWQgY29kZWMgZnJvbSB0aGUgaW50ZXJuYWwgY29kZWMgbG9va3VwIGNhY2hlIik7CisKKyNkZWZpbmUgX0NPREVDU19fRk9SR0VUX0NPREVDX01FVEhPRERFRiAgICBcCisgICAgeyJfZm9yZ2V0X2NvZGVjIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfX2ZvcmdldF9jb2RlYywgTUVUSF9PLCBfY29kZWNzX19mb3JnZXRfY29kZWNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfX2ZvcmdldF9jb2RlY19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfX2ZvcmdldF9jb2RlYyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJzOl9mb3JnZXRfY29kZWMiLCAmZW5jb2RpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwobW9kdWxlLCBlbmNvZGluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfZXNjYXBlX2RlY29kZV9fZG9jX18sCisiZXNjYXBlX2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19FU0NBUEVfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJlc2NhcGVfZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfZXNjYXBlX2RlY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX2VzY2FwZV9kZWNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfZXNjYXBlX2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2VzY2FwZV9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyp8ejplc2NhcGVfZGVjb2RlIiwKKyAgICAgICAgJmRhdGEsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19lc2NhcGVfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfZXNjYXBlX2VuY29kZV9fZG9jX18sCisiZXNjYXBlX2VuY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19FU0NBUEVfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJlc2NhcGVfZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfZXNjYXBlX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX2VzY2FwZV9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfZXNjYXBlX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfZXNjYXBlX2VuY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZGF0YTsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXx6OmVzY2FwZV9lbmNvZGUiLAorICAgICAgICAmUHlCeXRlc19UeXBlLCAmZGF0YSwgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX2VzY2FwZV9lbmNvZGVfaW1wbChtb2R1bGUsIGRhdGEsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdW5pY29kZV9pbnRlcm5hbF9kZWNvZGVfX2RvY19fLAorInVuaWNvZGVfaW50ZXJuYWxfZGVjb2RlKCRtb2R1bGUsIG9iaiwgZXJyb3JzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfVU5JQ09ERV9JTlRFUk5BTF9ERUNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InVuaWNvZGVfaW50ZXJuYWxfZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfdW5pY29kZV9pbnRlcm5hbF9kZWNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc191bmljb2RlX2ludGVybmFsX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191bmljb2RlX2ludGVybmFsX2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdW5pY29kZV9pbnRlcm5hbF9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6dW5pY29kZV9pbnRlcm5hbF9kZWNvZGUiLAorICAgICAgICAmb2JqLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfdW5pY29kZV9pbnRlcm5hbF9kZWNvZGVfaW1wbChtb2R1bGUsIG9iaiwgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2NvZGVjc191dGZfN19kZWNvZGVfX2RvY19fLAorInV0Zl83X2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgZmluYWw9RmFsc2UsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfVVRGXzdfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJ1dGZfN19kZWNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191dGZfN19kZWNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc191dGZfN19kZWNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzdfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl83X2RlY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworICAgIGludCBmaW5hbCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfHppOnV0Zl83X2RlY29kZSIsCisgICAgICAgICZkYXRhLCAmZXJyb3JzLCAmZmluYWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191dGZfN19kZWNvZGVfaW1wbChtb2R1bGUsICZkYXRhLCBlcnJvcnMsIGZpbmFsKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzhfZGVjb2RlX19kb2NfXywKKyJ1dGZfOF9kZWNvZGUoJG1vZHVsZSwgZGF0YSwgZXJyb3JzPU5vbmUsIGZpbmFsPUZhbHNlLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX1VURl84X0RFQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsidXRmXzhfZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfdXRmXzhfZGVjb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfdXRmXzhfZGVjb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl84X2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfOF9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBpbnQgZmluYWwgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfOF9kZWNvZGUiLAorICAgICAgICAmZGF0YSwgJmVycm9ycywgJmZpbmFsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfdXRmXzhfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzLCBmaW5hbCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3V0Zl8xNl9kZWNvZGVfX2RvY19fLAorInV0Zl8xNl9kZWNvZGUoJG1vZHVsZSwgZGF0YSwgZXJyb3JzPU5vbmUsIGZpbmFsPUZhbHNlLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX1VURl8xNl9ERUNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InV0Zl8xNl9kZWNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191dGZfMTZfZGVjb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfdXRmXzE2X2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfZGVjb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgaW50IGZpbmFsID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8emk6dXRmXzE2X2RlY29kZSIsCisgICAgICAgICZkYXRhLCAmZXJyb3JzLCAmZmluYWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191dGZfMTZfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzLCBmaW5hbCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3V0Zl8xNl9sZV9kZWNvZGVfX2RvY19fLAorInV0Zl8xNl9sZV9kZWNvZGUoJG1vZHVsZSwgZGF0YSwgZXJyb3JzPU5vbmUsIGZpbmFsPUZhbHNlLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX1VURl8xNl9MRV9ERUNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InV0Zl8xNl9sZV9kZWNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191dGZfMTZfbGVfZGVjb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfdXRmXzE2X2xlX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfbGVfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfbGVfZGVjb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgaW50IGZpbmFsID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8emk6dXRmXzE2X2xlX2RlY29kZSIsCisgICAgICAgICZkYXRhLCAmZXJyb3JzLCAmZmluYWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191dGZfMTZfbGVfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzLCBmaW5hbCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3V0Zl8xNl9iZV9kZWNvZGVfX2RvY19fLAorInV0Zl8xNl9iZV9kZWNvZGUoJG1vZHVsZSwgZGF0YSwgZXJyb3JzPU5vbmUsIGZpbmFsPUZhbHNlLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX1VURl8xNl9CRV9ERUNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InV0Zl8xNl9iZV9kZWNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191dGZfMTZfYmVfZGVjb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfdXRmXzE2X2JlX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfYmVfZGVjb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfYmVfZGVjb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgaW50IGZpbmFsID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8emk6dXRmXzE2X2JlX2RlY29kZSIsCisgICAgICAgICZkYXRhLCAmZXJyb3JzLCAmZmluYWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191dGZfMTZfYmVfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzLCBmaW5hbCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3V0Zl8xNl9leF9kZWNvZGVfX2RvY19fLAorInV0Zl8xNl9leF9kZWNvZGUoJG1vZHVsZSwgZGF0YSwgZXJyb3JzPU5vbmUsIGJ5dGVvcmRlcj0wLCBmaW5hbD1GYWxzZSxcbiIKKyIgICAgICAgICAgICAgICAgIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfVVRGXzE2X0VYX0RFQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsidXRmXzE2X2V4X2RlY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX3V0Zl8xNl9leF9kZWNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc191dGZfMTZfZXhfZGVjb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8xNl9leF9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBieXRlb3JkZXIsIGludCBmaW5hbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8xNl9leF9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBpbnQgYnl0ZW9yZGVyID0gMDsKKyAgICBpbnQgZmluYWwgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aWk6dXRmXzE2X2V4X2RlY29kZSIsCisgICAgICAgICZkYXRhLCAmZXJyb3JzLCAmYnl0ZW9yZGVyLCAmZmluYWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191dGZfMTZfZXhfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzLCBieXRlb3JkZXIsIGZpbmFsKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzMyX2RlY29kZV9fZG9jX18sCisidXRmXzMyX2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgZmluYWw9RmFsc2UsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfVVRGXzMyX0RFQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsidXRmXzMyX2RlY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX3V0Zl8zMl9kZWNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc191dGZfMzJfZGVjb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBpbnQgZmluYWwgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfMzJfZGVjb2RlIiwKKyAgICAgICAgJmRhdGEsICZlcnJvcnMsICZmaW5hbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX3V0Zl8zMl9kZWNvZGVfaW1wbChtb2R1bGUsICZkYXRhLCBlcnJvcnMsIGZpbmFsKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzMyX2xlX2RlY29kZV9fZG9jX18sCisidXRmXzMyX2xlX2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgZmluYWw9RmFsc2UsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfVVRGXzMyX0xFX0RFQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsidXRmXzMyX2xlX2RlY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX3V0Zl8zMl9sZV9kZWNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc191dGZfMzJfbGVfZGVjb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9sZV9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9sZV9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBpbnQgZmluYWwgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfMzJfbGVfZGVjb2RlIiwKKyAgICAgICAgJmRhdGEsICZlcnJvcnMsICZmaW5hbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX3V0Zl8zMl9sZV9kZWNvZGVfaW1wbChtb2R1bGUsICZkYXRhLCBlcnJvcnMsIGZpbmFsKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzMyX2JlX2RlY29kZV9fZG9jX18sCisidXRmXzMyX2JlX2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgZmluYWw9RmFsc2UsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfVVRGXzMyX0JFX0RFQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsidXRmXzMyX2JlX2RlY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX3V0Zl8zMl9iZV9kZWNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc191dGZfMzJfYmVfZGVjb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9iZV9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8zMl9iZV9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBpbnQgZmluYWwgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6aTp1dGZfMzJfYmVfZGVjb2RlIiwKKyAgICAgICAgJmRhdGEsICZlcnJvcnMsICZmaW5hbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX3V0Zl8zMl9iZV9kZWNvZGVfaW1wbChtb2R1bGUsICZkYXRhLCBlcnJvcnMsIGZpbmFsKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzMyX2V4X2RlY29kZV9fZG9jX18sCisidXRmXzMyX2V4X2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgYnl0ZW9yZGVyPTAsIGZpbmFsPUZhbHNlLFxuIgorIiAgICAgICAgICAgICAgICAgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19VVEZfMzJfRVhfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJ1dGZfMzJfZXhfZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfdXRmXzMyX2V4X2RlY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX3V0Zl8zMl9leF9kZWNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzMyX2V4X2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgaW50IGJ5dGVvcmRlciwgaW50IGZpbmFsKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzMyX2V4X2RlY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworICAgIGludCBieXRlb3JkZXIgPSAwOworICAgIGludCBmaW5hbCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfHppaTp1dGZfMzJfZXhfZGVjb2RlIiwKKyAgICAgICAgJmRhdGEsICZlcnJvcnMsICZieXRlb3JkZXIsICZmaW5hbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX3V0Zl8zMl9leF9kZWNvZGVfaW1wbChtb2R1bGUsICZkYXRhLCBlcnJvcnMsIGJ5dGVvcmRlciwgZmluYWwpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2NvZGVjc191bmljb2RlX2VzY2FwZV9kZWNvZGVfX2RvY19fLAorInVuaWNvZGVfZXNjYXBlX2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19VTklDT0RFX0VTQ0FQRV9ERUNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InVuaWNvZGVfZXNjYXBlX2RlY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX3VuaWNvZGVfZXNjYXBlX2RlY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX3VuaWNvZGVfZXNjYXBlX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191bmljb2RlX2VzY2FwZV9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3VuaWNvZGVfZXNjYXBlX2RlY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKnx6OnVuaWNvZGVfZXNjYXBlX2RlY29kZSIsCisgICAgICAgICZkYXRhLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfdW5pY29kZV9lc2NhcGVfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfcmF3X3VuaWNvZGVfZXNjYXBlX2RlY29kZV9fZG9jX18sCisicmF3X3VuaWNvZGVfZXNjYXBlX2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19SQVdfVU5JQ09ERV9FU0NBUEVfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJyYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfcmF3X3VuaWNvZGVfZXNjYXBlX2RlY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX3Jhd191bmljb2RlX2VzY2FwZV9kZWNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfcmF3X3VuaWNvZGVfZXNjYXBlX2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3Jhd191bmljb2RlX2VzY2FwZV9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyp8ejpyYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlIiwKKyAgICAgICAgJmRhdGEsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19yYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfbGF0aW5fMV9kZWNvZGVfX2RvY19fLAorImxhdGluXzFfZGVjb2RlKCRtb2R1bGUsIGRhdGEsIGVycm9ycz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX0xBVElOXzFfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJsYXRpbl8xX2RlY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX2xhdGluXzFfZGVjb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfbGF0aW5fMV9kZWNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfbGF0aW5fMV9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfbGF0aW5fMV9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8ejpsYXRpbl8xX2RlY29kZSIsCisgICAgICAgICZkYXRhLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfbGF0aW5fMV9kZWNvZGVfaW1wbChtb2R1bGUsICZkYXRhLCBlcnJvcnMpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2NvZGVjc19hc2NpaV9kZWNvZGVfX2RvY19fLAorImFzY2lpX2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19BU0NJSV9ERUNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7ImFzY2lpX2RlY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX2FzY2lpX2RlY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX2FzY2lpX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19hc2NpaV9kZWNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2FzY2lpX2RlY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Knx6OmFzY2lpX2RlY29kZSIsCisgICAgICAgICZkYXRhLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfYXNjaWlfZGVjb2RlX2ltcGwobW9kdWxlLCAmZGF0YSwgZXJyb3JzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfY2hhcm1hcF9kZWNvZGVfX2RvY19fLAorImNoYXJtYXBfZGVjb2RlKCRtb2R1bGUsIGRhdGEsIGVycm9ycz1Ob25lLCBtYXBwaW5nPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfQ0hBUk1BUF9ERUNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7ImNoYXJtYXBfZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfY2hhcm1hcF9kZWNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc19jaGFybWFwX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19jaGFybWFwX2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIFB5T2JqZWN0ICptYXBwaW5nKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfY2hhcm1hcF9kZWNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbWFwcGluZyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfHpPOmNoYXJtYXBfZGVjb2RlIiwKKyAgICAgICAgJmRhdGEsICZlcnJvcnMsICZtYXBwaW5nKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfY2hhcm1hcF9kZWNvZGVfaW1wbChtb2R1bGUsICZkYXRhLCBlcnJvcnMsIG1hcHBpbmcpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX01CQ1MpCisKK1B5RG9jX1NUUlZBUihfY29kZWNzX21iY3NfZGVjb2RlX19kb2NfXywKKyJtYmNzX2RlY29kZSgkbW9kdWxlLCBkYXRhLCBlcnJvcnM9Tm9uZSwgZmluYWw9RmFsc2UsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfTUJDU19ERUNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7Im1iY3NfZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfbWJjc19kZWNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc19tYmNzX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19tYmNzX2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBmaW5hbCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX21iY3NfZGVjb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgaW50IGZpbmFsID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8emk6bWJjc19kZWNvZGUiLAorICAgICAgICAmZGF0YSwgJmVycm9ycywgJmZpbmFsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfbWJjc19kZWNvZGVfaW1wbChtb2R1bGUsICZkYXRhLCBlcnJvcnMsIGZpbmFsKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9NQkNTKSAqLworCisjaWYgZGVmaW5lZChIQVZFX01CQ1MpCisKK1B5RG9jX1NUUlZBUihfY29kZWNzX2NvZGVfcGFnZV9kZWNvZGVfX2RvY19fLAorImNvZGVfcGFnZV9kZWNvZGUoJG1vZHVsZSwgY29kZXBhZ2UsIGRhdGEsIGVycm9ycz1Ob25lLCBmaW5hbD1GYWxzZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19DT0RFX1BBR0VfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJjb2RlX3BhZ2VfZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfY29kZV9wYWdlX2RlY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX2NvZGVfcGFnZV9kZWNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfY29kZV9wYWdlX2RlY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBjb2RlcGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqZGF0YSwgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgZmluYWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19jb2RlX3BhZ2VfZGVjb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBjb2RlcGFnZTsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworICAgIGludCBmaW5hbCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml5Knx6aTpjb2RlX3BhZ2VfZGVjb2RlIiwKKyAgICAgICAgJmNvZGVwYWdlLCAmZGF0YSwgJmVycm9ycywgJmZpbmFsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfY29kZV9wYWdlX2RlY29kZV9pbXBsKG1vZHVsZSwgY29kZXBhZ2UsICZkYXRhLCBlcnJvcnMsIGZpbmFsKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9NQkNTKSAqLworCitQeURvY19TVFJWQVIoX2NvZGVjc19yZWFkYnVmZmVyX2VuY29kZV9fZG9jX18sCisicmVhZGJ1ZmZlcl9lbmNvZGUoJG1vZHVsZSwgZGF0YSwgZXJyb3JzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfUkVBREJVRkZFUl9FTkNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWRidWZmZXJfZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfcmVhZGJ1ZmZlcl9lbmNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc19yZWFkYnVmZmVyX2VuY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19yZWFkYnVmZmVyX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19yZWFkYnVmZmVyX2VuY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKnx6OnJlYWRidWZmZXJfZW5jb2RlIiwKKyAgICAgICAgJmRhdGEsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19yZWFkYnVmZmVyX2VuY29kZV9pbXBsKG1vZHVsZSwgJmRhdGEsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3VuaWNvZGVfaW50ZXJuYWxfZW5jb2RlX19kb2NfXywKKyJ1bmljb2RlX2ludGVybmFsX2VuY29kZSgkbW9kdWxlLCBvYmosIGVycm9ycz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX1VOSUNPREVfSU5URVJOQUxfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJ1bmljb2RlX2ludGVybmFsX2VuY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX3VuaWNvZGVfaW50ZXJuYWxfZW5jb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfdW5pY29kZV9pbnRlcm5hbF9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdW5pY29kZV9pbnRlcm5hbF9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3VuaWNvZGVfaW50ZXJuYWxfZW5jb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OnVuaWNvZGVfaW50ZXJuYWxfZW5jb2RlIiwKKyAgICAgICAgJm9iaiwgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX3VuaWNvZGVfaW50ZXJuYWxfZW5jb2RlX2ltcGwobW9kdWxlLCBvYmosIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzdfZW5jb2RlX19kb2NfXywKKyJ1dGZfN19lbmNvZGUoJG1vZHVsZSwgc3RyLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19VVEZfN19FTkNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InV0Zl83X2VuY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX3V0Zl83X2VuY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX3V0Zl83X2VuY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfN19lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfN19lbmNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6dXRmXzdfZW5jb2RlIiwKKyAgICAgICAgJnN0ciwgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX3V0Zl83X2VuY29kZV9pbXBsKG1vZHVsZSwgc3RyLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3V0Zl84X2VuY29kZV9fZG9jX18sCisidXRmXzhfZW5jb2RlKCRtb2R1bGUsIHN0ciwgZXJyb3JzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfVVRGXzhfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJ1dGZfOF9lbmNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191dGZfOF9lbmNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc191dGZfOF9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzhfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzhfZW5jb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OnV0Zl84X2VuY29kZSIsCisgICAgICAgICZzdHIsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191dGZfOF9lbmNvZGVfaW1wbChtb2R1bGUsIHN0ciwgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2NvZGVjc191dGZfMTZfZW5jb2RlX19kb2NfXywKKyJ1dGZfMTZfZW5jb2RlKCRtb2R1bGUsIHN0ciwgZXJyb3JzPU5vbmUsIGJ5dGVvcmRlcj0wLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX1VURl8xNl9FTkNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InV0Zl8xNl9lbmNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191dGZfMTZfZW5jb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfdXRmXzE2X2VuY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgaW50IGJ5dGVvcmRlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8xNl9lbmNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworICAgIGludCBieXRlb3JkZXIgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHppOnV0Zl8xNl9lbmNvZGUiLAorICAgICAgICAmc3RyLCAmZXJyb3JzLCAmYnl0ZW9yZGVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfdXRmXzE2X2VuY29kZV9pbXBsKG1vZHVsZSwgc3RyLCBlcnJvcnMsIGJ5dGVvcmRlcik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzE2X2xlX2VuY29kZV9fZG9jX18sCisidXRmXzE2X2xlX2VuY29kZSgkbW9kdWxlLCBzdHIsIGVycm9ycz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX1VURl8xNl9MRV9FTkNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InV0Zl8xNl9sZV9lbmNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191dGZfMTZfbGVfZW5jb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfdXRmXzE2X2xlX2VuY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfbGVfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8xNl9sZV9lbmNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6dXRmXzE2X2xlX2VuY29kZSIsCisgICAgICAgICZzdHIsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191dGZfMTZfbGVfZW5jb2RlX2ltcGwobW9kdWxlLCBzdHIsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzE2X2JlX2VuY29kZV9fZG9jX18sCisidXRmXzE2X2JlX2VuY29kZSgkbW9kdWxlLCBzdHIsIGVycm9ycz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX1VURl8xNl9CRV9FTkNPREVfTUVUSE9EREVGICAgIFwKKyAgICB7InV0Zl8xNl9iZV9lbmNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191dGZfMTZfYmVfZW5jb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfdXRmXzE2X2JlX2VuY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMTZfYmVfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3V0Zl8xNl9iZV9lbmNvZGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHo6dXRmXzE2X2JlX2VuY29kZSIsCisgICAgICAgICZzdHIsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191dGZfMTZfYmVfZW5jb2RlX2ltcGwobW9kdWxlLCBzdHIsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfdXRmXzMyX2VuY29kZV9fZG9jX18sCisidXRmXzMyX2VuY29kZSgkbW9kdWxlLCBzdHIsIGVycm9ycz1Ob25lLCBieXRlb3JkZXI9MCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19VVEZfMzJfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJ1dGZfMzJfZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfdXRmXzMyX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX3V0Zl8zMl9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzMyX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGludCBieXRlb3JkZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMzJfZW5jb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBpbnQgYnl0ZW9yZGVyID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6aTp1dGZfMzJfZW5jb2RlIiwKKyAgICAgICAgJnN0ciwgJmVycm9ycywgJmJ5dGVvcmRlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX3V0Zl8zMl9lbmNvZGVfaW1wbChtb2R1bGUsIHN0ciwgZXJyb3JzLCBieXRlb3JkZXIpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3V0Zl8zMl9sZV9lbmNvZGVfX2RvY19fLAorInV0Zl8zMl9sZV9lbmNvZGUoJG1vZHVsZSwgc3RyLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19VVEZfMzJfTEVfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJ1dGZfMzJfbGVfZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfdXRmXzMyX2xlX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX3V0Zl8zMl9sZV9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzMyX2xlX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMzJfbGVfZW5jb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OnV0Zl8zMl9sZV9lbmNvZGUiLAorICAgICAgICAmc3RyLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfdXRmXzMyX2xlX2VuY29kZV9pbXBsKG1vZHVsZSwgc3RyLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3V0Zl8zMl9iZV9lbmNvZGVfX2RvY19fLAorInV0Zl8zMl9iZV9lbmNvZGUoJG1vZHVsZSwgc3RyLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19VVEZfMzJfQkVfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJ1dGZfMzJfYmVfZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfdXRmXzMyX2JlX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX3V0Zl8zMl9iZV9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdXRmXzMyX2JlX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc191dGZfMzJfYmVfZW5jb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OnV0Zl8zMl9iZV9lbmNvZGUiLAorICAgICAgICAmc3RyLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfdXRmXzMyX2JlX2VuY29kZV9pbXBsKG1vZHVsZSwgc3RyLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX3VuaWNvZGVfZXNjYXBlX2VuY29kZV9fZG9jX18sCisidW5pY29kZV9lc2NhcGVfZW5jb2RlKCRtb2R1bGUsIHN0ciwgZXJyb3JzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfVU5JQ09ERV9FU0NBUEVfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJ1bmljb2RlX2VzY2FwZV9lbmNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc191bmljb2RlX2VzY2FwZV9lbmNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc191bmljb2RlX2VzY2FwZV9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdW5pY29kZV9lc2NhcGVfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfdW5pY29kZV9lc2NhcGVfZW5jb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OnVuaWNvZGVfZXNjYXBlX2VuY29kZSIsCisgICAgICAgICZzdHIsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc191bmljb2RlX2VzY2FwZV9lbmNvZGVfaW1wbChtb2R1bGUsIHN0ciwgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2NvZGVjc19yYXdfdW5pY29kZV9lc2NhcGVfZW5jb2RlX19kb2NfXywKKyJyYXdfdW5pY29kZV9lc2NhcGVfZW5jb2RlKCRtb2R1bGUsIHN0ciwgZXJyb3JzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfUkFXX1VOSUNPREVfRVNDQVBFX0VOQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsicmF3X3VuaWNvZGVfZXNjYXBlX2VuY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX3Jhd191bmljb2RlX2VzY2FwZV9lbmNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc19yYXdfdW5pY29kZV9lc2NhcGVfZW5jb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3Jhd191bmljb2RlX2VzY2FwZV9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfcmF3X3VuaWNvZGVfZXNjYXBlX2VuY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RyOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98ejpyYXdfdW5pY29kZV9lc2NhcGVfZW5jb2RlIiwKKyAgICAgICAgJnN0ciwgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfY29kZWNzX3Jhd191bmljb2RlX2VzY2FwZV9lbmNvZGVfaW1wbChtb2R1bGUsIHN0ciwgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2NvZGVjc19sYXRpbl8xX2VuY29kZV9fZG9jX18sCisibGF0aW5fMV9lbmNvZGUoJG1vZHVsZSwgc3RyLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19MQVRJTl8xX0VOQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsibGF0aW5fMV9lbmNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc19sYXRpbl8xX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX2xhdGluXzFfZW5jb2RlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2xhdGluXzFfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19sYXRpbl8xX2VuY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RyOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98ejpsYXRpbl8xX2VuY29kZSIsCisgICAgICAgICZzdHIsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19sYXRpbl8xX2VuY29kZV9pbXBsKG1vZHVsZSwgc3RyLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX2FzY2lpX2VuY29kZV9fZG9jX18sCisiYXNjaWlfZW5jb2RlKCRtb2R1bGUsIHN0ciwgZXJyb3JzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9DT0RFQ1NfQVNDSUlfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJhc2NpaV9lbmNvZGUiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc19hc2NpaV9lbmNvZGUsIE1FVEhfVkFSQVJHUywgX2NvZGVjc19hc2NpaV9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfYXNjaWlfZW5jb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfYXNjaWlfZW5jb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3x6OmFzY2lpX2VuY29kZSIsCisgICAgICAgICZzdHIsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19hc2NpaV9lbmNvZGVfaW1wbChtb2R1bGUsIHN0ciwgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2NvZGVjc19jaGFybWFwX2VuY29kZV9fZG9jX18sCisiY2hhcm1hcF9lbmNvZGUoJG1vZHVsZSwgc3RyLCBlcnJvcnM9Tm9uZSwgbWFwcGluZz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX0NIQVJNQVBfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJjaGFybWFwX2VuY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX2NoYXJtYXBfZW5jb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfY2hhcm1hcF9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfY2hhcm1hcF9lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKm1hcHBpbmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19jaGFybWFwX2VuY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RyOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgUHlPYmplY3QgKm1hcHBpbmcgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfHpPOmNoYXJtYXBfZW5jb2RlIiwKKyAgICAgICAgJnN0ciwgJmVycm9ycywgJm1hcHBpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19jaGFybWFwX2VuY29kZV9pbXBsKG1vZHVsZSwgc3RyLCBlcnJvcnMsIG1hcHBpbmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfY29kZWNzX2NoYXJtYXBfYnVpbGRfX2RvY19fLAorImNoYXJtYXBfYnVpbGQoJG1vZHVsZSwgbWFwLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX0NIQVJNQVBfQlVJTERfTUVUSE9EREVGICAgIFwKKyAgICB7ImNoYXJtYXBfYnVpbGQiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc19jaGFybWFwX2J1aWxkLCBNRVRIX08sIF9jb2RlY3NfY2hhcm1hcF9idWlsZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19jaGFybWFwX2J1aWxkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm1hcCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2NoYXJtYXBfYnVpbGQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbWFwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJVOmNoYXJtYXBfYnVpbGQiLCAmbWFwKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfY2hhcm1hcF9idWlsZF9pbXBsKG1vZHVsZSwgbWFwKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX01CQ1MpCisKK1B5RG9jX1NUUlZBUihfY29kZWNzX21iY3NfZW5jb2RlX19kb2NfXywKKyJtYmNzX2VuY29kZSgkbW9kdWxlLCBzdHIsIGVycm9ycz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfQ09ERUNTX01CQ1NfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJtYmNzX2VuY29kZSIsIChQeUNGdW5jdGlvbilfY29kZWNzX21iY3NfZW5jb2RlLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfbWJjc19lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfbWJjc19lbmNvZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyLCBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19tYmNzX2VuY29kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RyOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98ejptYmNzX2VuY29kZSIsCisgICAgICAgICZzdHIsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19tYmNzX2VuY29kZV9pbXBsKG1vZHVsZSwgc3RyLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTUJDUykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9NQkNTKQorCitQeURvY19TVFJWQVIoX2NvZGVjc19jb2RlX3BhZ2VfZW5jb2RlX19kb2NfXywKKyJjb2RlX3BhZ2VfZW5jb2RlKCRtb2R1bGUsIGNvZGVfcGFnZSwgc3RyLCBlcnJvcnM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0NPREVDU19DT0RFX1BBR0VfRU5DT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJjb2RlX3BhZ2VfZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfY29kZV9wYWdlX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX2NvZGVfcGFnZV9lbmNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfY29kZV9wYWdlX2VuY29kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBjb2RlX3BhZ2UsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19jb2RlX3BhZ2VfZW5jb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBjb2RlX3BhZ2U7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpT3x6OmNvZGVfcGFnZV9lbmNvZGUiLAorICAgICAgICAmY29kZV9wYWdlLCAmc3RyLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfY29kZV9wYWdlX2VuY29kZV9pbXBsKG1vZHVsZSwgY29kZV9wYWdlLCBzdHIsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9NQkNTKSAqLworCitQeURvY19TVFJWQVIoX2NvZGVjc19yZWdpc3Rlcl9lcnJvcl9fZG9jX18sCisicmVnaXN0ZXJfZXJyb3IoJG1vZHVsZSwgZXJyb3JzLCBoYW5kbGVyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVnaXN0ZXIgdGhlIHNwZWNpZmllZCBlcnJvciBoYW5kbGVyIHVuZGVyIHRoZSBuYW1lIGVycm9ycy5cbiIKKyJcbiIKKyJoYW5kbGVyIG11c3QgYmUgYSBjYWxsYWJsZSBvYmplY3QsIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb25cbiIKKyJpbnN0YW5jZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZW5jb2RpbmcvZGVjb2RpbmdcbiIKKyJlcnJvciBhbmQgbXVzdCByZXR1cm4gYSAocmVwbGFjZW1lbnQsIG5ldyBwb3NpdGlvbikgdHVwbGUuIik7CisKKyNkZWZpbmUgX0NPREVDU19SRUdJU1RFUl9FUlJPUl9NRVRIT0RERUYgICAgXAorICAgIHsicmVnaXN0ZXJfZXJyb3IiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc19yZWdpc3Rlcl9lcnJvciwgTUVUSF9WQVJBUkdTLCBfY29kZWNzX3JlZ2lzdGVyX2Vycm9yX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX3JlZ2lzdGVyX2Vycm9yX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpoYW5kbGVyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfcmVnaXN0ZXJfZXJyb3IoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZXJyb3JzOworICAgIFB5T2JqZWN0ICpoYW5kbGVyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzTzpyZWdpc3Rlcl9lcnJvciIsCisgICAgICAgICZlcnJvcnMsICZoYW5kbGVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfcmVnaXN0ZXJfZXJyb3JfaW1wbChtb2R1bGUsIGVycm9ycywgaGFuZGxlcik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfbG9va3VwX2Vycm9yX19kb2NfXywKKyJsb29rdXBfZXJyb3IoJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorImxvb2t1cF9lcnJvcihlcnJvcnMpIC0+IGhhbmRsZXJcbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGVycm9yIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWZpZWQgZXJyb3IgaGFuZGxpbmcgbmFtZSBvciByYWlzZSBhXG4iCisiTG9va3VwRXJyb3IsIGlmIG5vIGhhbmRsZXIgZXhpc3RzIHVuZGVyIHRoaXMgbmFtZS4iKTsKKworI2RlZmluZSBfQ09ERUNTX0xPT0tVUF9FUlJPUl9NRVRIT0RERUYgICAgXAorICAgIHsibG9va3VwX2Vycm9yIiwgKFB5Q0Z1bmN0aW9uKV9jb2RlY3NfbG9va3VwX2Vycm9yLCBNRVRIX08sIF9jb2RlY3NfbG9va3VwX2Vycm9yX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfY29kZWNzX2xvb2t1cF9lcnJvcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19sb29rdXBfZXJyb3IoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJzOmxvb2t1cF9lcnJvciIsICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9jb2RlY3NfbG9va3VwX2Vycm9yX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWZuZGVmIF9DT0RFQ1NfTUJDU19ERUNPREVfTUVUSE9EREVGCisgICAgI2RlZmluZSBfQ09ERUNTX01CQ1NfREVDT0RFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKF9DT0RFQ1NfTUJDU19ERUNPREVfTUVUSE9EREVGKSAqLworCisjaWZuZGVmIF9DT0RFQ1NfQ09ERV9QQUdFX0RFQ09ERV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIF9DT0RFQ1NfQ09ERV9QQUdFX0RFQ09ERV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfQ09ERUNTX0NPREVfUEFHRV9ERUNPREVfTUVUSE9EREVGKSAqLworCisjaWZuZGVmIF9DT0RFQ1NfTUJDU19FTkNPREVfTUVUSE9EREVGCisgICAgI2RlZmluZSBfQ09ERUNTX01CQ1NfRU5DT0RFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKF9DT0RFQ1NfTUJDU19FTkNPREVfTUVUSE9EREVGKSAqLworCisjaWZuZGVmIF9DT0RFQ1NfQ09ERV9QQUdFX0VOQ09ERV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIF9DT0RFQ1NfQ09ERV9QQUdFX0VOQ09ERV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfQ09ERUNTX0NPREVfUEFHRV9FTkNPREVfTUVUSE9EREVGKSAqLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQyZmVkOTRlMmFiNzY1YmEgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX2NyeXB0bW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL19jcnlwdG1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMzcxYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL19jcnlwdG1vZHVsZS5jLmgKQEAgLTAsMCArMSwzNyBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGNyeXB0X2NyeXB0X19kb2NfXywKKyJjcnlwdCgkbW9kdWxlLCB3b3JkLCBzYWx0LCAvKVxuIgorIi0tXG4iCisiXG4iCisiSGFzaCBhICp3b3JkKiB3aXRoIHRoZSBnaXZlbiAqc2FsdCogYW5kIHJldHVybiB0aGUgaGFzaGVkIHBhc3N3b3JkLlxuIgorIlxuIgorIip3b3JkKiB3aWxsIHVzdWFsbHkgYmUgYSB1c2VyXCdzIHBhc3N3b3JkLiAgKnNhbHQqIChlaXRoZXIgYSByYW5kb20gMiBvciAxNlxuIgorImNoYXJhY3RlciBzdHJpbmcsIHBvc3NpYmx5IHByZWZpeGVkIHdpdGggJGRpZ2l0JCB0byBpbmRpY2F0ZSB0aGUgbWV0aG9kKVxuIgorIndpbGwgYmUgdXNlZCB0byBwZXJ0dXJiIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSBhbmQgcHJvZHVjZSBkaXN0aW5jdFxuIgorInJlc3VsdHMgZm9yIGEgZ2l2ZW4gKndvcmQqLiIpOworCisjZGVmaW5lIENSWVBUX0NSWVBUX01FVEhPRERFRiAgICBcCisgICAgeyJjcnlwdCIsIChQeUNGdW5jdGlvbiljcnlwdF9jcnlwdCwgTUVUSF9WQVJBUkdTLCBjcnlwdF9jcnlwdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorY3J5cHRfY3J5cHRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICp3b3JkLCBjb25zdCBjaGFyICpzYWx0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NyeXB0X2NyeXB0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKndvcmQ7CisgICAgY29uc3QgY2hhciAqc2FsdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3M6Y3J5cHQiLAorICAgICAgICAmd29yZCwgJnNhbHQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gY3J5cHRfY3J5cHRfaW1wbChtb2R1bGUsIHdvcmQsIHNhbHQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTA0OTNhOTY5MTUzNzY5MCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fY3Vyc2VzbW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL19jdXJzZXNtb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMTE3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9fY3Vyc2VzbW9kdWxlLmMuaApAQCAtMCwwICsxLDcxIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoY3Vyc2VzX3dpbmRvd19hZGRjaF9fZG9jX18sCisiYWRkY2goW3ksIHgsXSBjaCwgW2F0dHJdKVxuIgorIlBhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIuXG4iCisiXG4iCisiICB5XG4iCisiICAgIFktY29vcmRpbmF0ZS5cbiIKKyIgIHhcbiIKKyIgICAgWC1jb29yZGluYXRlLlxuIgorIiAgY2hcbiIKKyIgICAgQ2hhcmFjdGVyIHRvIGFkZC5cbiIKKyIgIGF0dHJcbiIKKyIgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci5cbiIKKyJcbiIKKyJQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLFxuIgorIm92ZXJ3cml0aW5nIGFueSBjaGFyYWN0ZXIgcHJldmlvdXNseSBwYWludGVkIGF0IHRoYXQgbG9jYXRpb24uXG4iCisiQnkgZGVmYXVsdCwgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBhbmQgYXR0cmlidXRlcyBhcmUgdGhlXG4iCisiY3VycmVudCBzZXR0aW5ncyBmb3IgdGhlIHdpbmRvdyBvYmplY3QuIik7CisKKyNkZWZpbmUgQ1VSU0VTX1dJTkRPV19BRERDSF9NRVRIT0RERUYgICAgXAorICAgIHsiYWRkY2giLCAoUHlDRnVuY3Rpb24pY3Vyc2VzX3dpbmRvd19hZGRjaCwgTUVUSF9WQVJBUkdTLCBjdXJzZXNfd2luZG93X2FkZGNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIGludCBncm91cF9sZWZ0XzEsIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBQeU9iamVjdCAqY2gsIGludCBncm91cF9yaWdodF8xLCBsb25nIGF0dHIpOworCitzdGF0aWMgUHlPYmplY3QgKgorY3Vyc2VzX3dpbmRvd19hZGRjaChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGdyb3VwX2xlZnRfMSA9IDA7CisgICAgaW50IHkgPSAwOworICAgIGludCB4ID0gMDsKKyAgICBQeU9iamVjdCAqY2g7CisgICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOworICAgIGxvbmcgYXR0ciA9IDA7CisKKyAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmFkZGNoIiwgJmNoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbDphZGRjaCIsICZjaCwgJmF0dHIpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPOmFkZGNoIiwgJnksICZ4LCAmY2gpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9sOmFkZGNoIiwgJnksICZ4LCAmY2gsICZhdHRyKSkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJjdXJzZXMud2luZG93LmFkZGNoIHJlcXVpcmVzIDEgdG8gNCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcmV0dXJuX3ZhbHVlID0gY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKHNlbGYsIGdyb3VwX2xlZnRfMSwgeSwgeCwgY2gsIGdyb3VwX3JpZ2h0XzEsIGF0dHIpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTgyYjFlNzA5NTc3ZjNlYyBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fZGF0ZXRpbWVtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvX2RhdGV0aW1lbW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODhjOTAzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX2RhdGV0aW1lbW9kdWxlLmMuaApAQCAtMCwwICsxLDM3IEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X19kb2NfXywKKyJub3coJHR5cGUsIC8sIHR6PU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIG5ldyBkYXRldGltZSBvYmplY3QgcmVwcmVzZW50aW5nIGN1cnJlbnQgdGltZSBsb2NhbCB0byB0ei5cbiIKKyJcbiIKKyIgIHR6XG4iCisiICAgIFRpbWV6b25lIG9iamVjdC5cbiIKKyJcbiIKKyJJZiBubyB0eiBpcyBzcGVjaWZpZWQsIHVzZXMgbG9jYWwgdGltZXpvbmUuIik7CisKKyNkZWZpbmUgREFURVRJTUVfREFURVRJTUVfTk9XX01FVEhPRERFRiAgICBcCisgICAgeyJub3ciLCAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfZGF0ZXRpbWVfbm93LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU3xNRVRIX0NMQVNTLCBkYXRldGltZV9kYXRldGltZV9ub3dfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2RhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnR6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RhdGV0aW1lX2RhdGV0aW1lX25vdyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqdHogPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE86bm93IiwgX2tleXdvcmRzLAorICAgICAgICAmdHopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X2ltcGwodHlwZSwgdHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2Y0NWM2NzBkNmU0OTUzYSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fZGJtbW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL19kYm1tb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Y2JjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9fZGJtbW9kdWxlLmMuaApAQCAtMCwwICsxLDE0MSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9kYm1fZGJtX2Nsb3NlX19kb2NfXywKKyJjbG9zZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNsb3NlIHRoZSBkYXRhYmFzZS4iKTsKKworI2RlZmluZSBfREJNX0RCTV9DTE9TRV9NRVRIT0RERUYgICAgXAorICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pX2RibV9kYm1fY2xvc2UsIE1FVEhfTk9BUkdTLCBfZGJtX2RibV9jbG9zZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2RibV9kYm1fY2xvc2VfaW1wbChkYm1vYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2RibV9kYm1fY2xvc2UoZGJtb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfZGJtX2RibV9jbG9zZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2RibV9kYm1fa2V5c19fZG9jX18sCisia2V5cygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGxpc3Qgb2YgYWxsIGtleXMgaW4gdGhlIGRhdGFiYXNlLiIpOworCisjZGVmaW5lIF9EQk1fREJNX0tFWVNfTUVUSE9EREVGICAgIFwKKyAgICB7ImtleXMiLCAoUHlDRnVuY3Rpb24pX2RibV9kYm1fa2V5cywgTUVUSF9OT0FSR1MsIF9kYm1fZGJtX2tleXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19kYm1fZGJtX2tleXNfaW1wbChkYm1vYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2RibV9kYm1fa2V5cyhkYm1vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9kYm1fZGJtX2tleXNfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9kYm1fZGJtX2dldF9fZG9jX18sCisiZ2V0KCRzZWxmLCBrZXksIGRlZmF1bHQ9YlwnXCcsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuIik7CisKKyNkZWZpbmUgX0RCTV9EQk1fR0VUX01FVEhPRERFRiAgICBcCisgICAgeyJnZXQiLCAoUHlDRnVuY3Rpb24pX2RibV9kYm1fZ2V0LCBNRVRIX1ZBUkFSR1MsIF9kYm1fZGJtX2dldF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2RibV9kYm1fZ2V0X2ltcGwoZGJtb2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICprZXksCisgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGgsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19kYm1fZGJtX2dldChkYm1vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGg7CisgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3xPOmdldCIsCisgICAgICAgICZrZXksICZrZXlfbGVuZ3RoLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZGJtX2RibV9nZXRfaW1wbChzZWxmLCBrZXksIGtleV9sZW5ndGgsIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZGJtX2RibV9zZXRkZWZhdWx0X19kb2NfXywKKyJzZXRkZWZhdWx0KCRzZWxmLCBrZXksIGRlZmF1bHQ9YlwnXCcsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuXG4iCisiXG4iCisiSWYga2V5IGlzIG5vdCBpbiB0aGUgZGF0YWJhc2UsIGl0IGlzIGluc2VydGVkIHdpdGggZGVmYXVsdCBhcyB0aGUgdmFsdWUuIik7CisKKyNkZWZpbmUgX0RCTV9EQk1fU0VUREVGQVVMVF9NRVRIT0RERUYgICAgXAorICAgIHsic2V0ZGVmYXVsdCIsIChQeUNGdW5jdGlvbilfZGJtX2RibV9zZXRkZWZhdWx0LCBNRVRIX1ZBUkFSR1MsIF9kYm1fZGJtX3NldGRlZmF1bHRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19kYm1fZGJtX3NldGRlZmF1bHRfaW1wbChkYm1vYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2RibV9kYm1fc2V0ZGVmYXVsdChkYm1vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGg7CisgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3xPOnNldGRlZmF1bHQiLAorICAgICAgICAma2V5LCAma2V5X2xlbmd0aCwgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2RibV9kYm1fc2V0ZGVmYXVsdF9pbXBsKHNlbGYsIGtleSwga2V5X2xlbmd0aCwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGRibW9wZW5fX2RvY19fLAorIm9wZW4oJG1vZHVsZSwgZmlsZW5hbWUsIGZsYWdzPVwnclwnLCBtb2RlPTBvNjY2LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LlxuIgorIlxuIgorIiAgZmlsZW5hbWVcbiIKKyIgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uXG4iCisiICBmbGFnc1xuIgorIiAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gIFwiclwiIGZvciByZWFkaW5nLCBcIndcIiBmb3Igd3JpdGluZywgZXRjLlxuIgorIiAgbW9kZVxuIgorIiAgICBJZiBjcmVhdGluZyBhIG5ldyBmaWxlLCB0aGUgbW9kZSBiaXRzIGZvciB0aGUgbmV3IGZpbGVcbiIKKyIgICAgKGUuZy4gb3MuT19SRFdSKS4iKTsKKworI2RlZmluZSBEQk1PUEVOX01FVEhPRERFRiAgICBcCisgICAgeyJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWRibW9wZW4sIE1FVEhfVkFSQVJHUywgZGJtb3Blbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3Blbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywKKyAgICAgICAgICAgICBpbnQgbW9kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworICAgIGNvbnN0IGNoYXIgKmZsYWdzID0gInIiOworICAgIGludCBtb2RlID0gNDM4OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzfHNpOm9wZW4iLAorICAgICAgICAmZmlsZW5hbWUsICZmbGFncywgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtb3Blbl9pbXBsKG1vZHVsZSwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZmZjEyZjE2OGNkZjhiNDMgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX2VsZW1lbnR0cmVlLmMuaCBiL01vZHVsZXMvY2xpbmljL19lbGVtZW50dHJlZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiNGM0YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL19lbGVtZW50dHJlZS5jLmgKQEAgLTAsMCArMSw2NzkgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9hcHBlbmRfX2RvY19fLAorImFwcGVuZCgkc2VsZiwgc3ViZWxlbWVudCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX0VMRU1FTlRfQVBQRU5EX01FVEhPRERFRiAgICBcCisgICAgeyJhcHBlbmQiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX0VsZW1lbnRfYXBwZW5kLCBNRVRIX08sIF9lbGVtZW50dHJlZV9FbGVtZW50X2FwcGVuZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfYXBwZW5kX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN1YmVsZW1lbnQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfYXBwZW5kKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN1YmVsZW1lbnQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8hOmFwcGVuZCIsICZFbGVtZW50X1R5cGUsICZzdWJlbGVtZW50KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9lbGVtZW50dHJlZV9FbGVtZW50X2FwcGVuZF9pbXBsKHNlbGYsIHN1YmVsZW1lbnQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9jbGVhcl9fZG9jX18sCisiY2xlYXIoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0NMRUFSX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhciIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfRWxlbWVudF9jbGVhciwgTUVUSF9OT0FSR1MsIF9lbGVtZW50dHJlZV9FbGVtZW50X2NsZWFyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9jbGVhcl9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfY2xlYXIoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2VsZW1lbnR0cmVlX0VsZW1lbnRfY2xlYXJfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X19fY29weV9fX19kb2NfXywKKyJfX2NvcHlfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX0VMRU1FTlRfX19DT1BZX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fY29weV9fIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9FbGVtZW50X19fY29weV9fLCBNRVRIX05PQVJHUywgX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19jb3B5X19fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X19fY29weV9fX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9fX2NvcHlfXyhFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfZWxlbWVudHRyZWVfRWxlbWVudF9fX2NvcHlfX19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19kZWVwY29weV9fX19kb2NfXywKKyJfX2RlZXBjb3B5X18oJHNlbGYsIG1lbW8sIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX19fREVFUENPUFlfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19kZWVwY29weV9fIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9FbGVtZW50X19fZGVlcGNvcHlfXywgTUVUSF9PLCBfZWxlbWVudHRyZWVfRWxlbWVudF9fX2RlZXBjb3B5X19fX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X19fc2l6ZW9mX19fX2RvY19fLAorIl9fc2l6ZW9mX18oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX19fU0laRU9GX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIF9lbGVtZW50dHJlZV9FbGVtZW50X19fc2l6ZW9mX19fX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK19lbGVtZW50dHJlZV9FbGVtZW50X19fc2l6ZW9mX19faW1wbChFbGVtZW50T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X19fc2l6ZW9mX18oRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19zaXplb2ZfX19pbXBsKHNlbGYpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19nZXRzdGF0ZV9fX19kb2NfXywKKyJfX2dldHN0YXRlX18oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX19fR0VUU1RBVEVfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9FbGVtZW50X19fZ2V0c3RhdGVfXywgTUVUSF9OT0FSR1MsIF9lbGVtZW50dHJlZV9FbGVtZW50X19fZ2V0c3RhdGVfX19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19nZXRzdGF0ZV9fX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9fX2dldHN0YXRlX18oRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2VsZW1lbnR0cmVlX0VsZW1lbnRfX19nZXRzdGF0ZV9fX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9fX3NldHN0YXRlX19fX2RvY19fLAorIl9fc2V0c3RhdGVfXygkc2VsZiwgc3RhdGUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX19fU0VUU1RBVEVfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19zZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9FbGVtZW50X19fc2V0c3RhdGVfXywgTUVUSF9PLCBfZWxlbWVudHRyZWVfRWxlbWVudF9fX3NldHN0YXRlX19fX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X2V4dGVuZF9fZG9jX18sCisiZXh0ZW5kKCRzZWxmLCBlbGVtZW50cywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX0VMRU1FTlRfRVhURU5EX01FVEhPRERFRiAgICBcCisgICAgeyJleHRlbmQiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX0VsZW1lbnRfZXh0ZW5kLCBNRVRIX08sIF9lbGVtZW50dHJlZV9FbGVtZW50X2V4dGVuZF9fZG9jX199LAorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX0VsZW1lbnRfZmluZF9fZG9jX18sCisiZmluZCgkc2VsZiwgLywgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfRUxFTUVOVF9GSU5EX01FVEhPRERFRiAgICBcCisgICAgeyJmaW5kIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9FbGVtZW50X2ZpbmQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWVzcGFjZXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfZmluZChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpwYXRoOworICAgIFB5T2JqZWN0ICpuYW1lc3BhY2VzID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98TzpmaW5kIiwgX2tleXdvcmRzLAorICAgICAgICAmcGF0aCwgJm5hbWVzcGFjZXMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2VsZW1lbnR0cmVlX0VsZW1lbnRfZmluZF9pbXBsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kdGV4dF9fZG9jX18sCisiZmluZHRleHQoJHNlbGYsIC8sIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfRUxFTUVOVF9GSU5EVEVYVF9NRVRIT0RERUYgICAgXAorICAgIHsiZmluZHRleHQiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX0VsZW1lbnRfZmluZHRleHQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kdGV4dF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfZmluZHRleHRfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lc3BhY2VzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X2ZpbmR0ZXh0KEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJkZWZhdWx0IiwgIm5hbWVzcGFjZXMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcGF0aDsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKm5hbWVzcGFjZXMgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xPTzpmaW5kdGV4dCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnBhdGgsICZkZWZhdWx0X3ZhbHVlLCAmbmFtZXNwYWNlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kdGV4dF9pbXBsKHNlbGYsIHBhdGgsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kYWxsX19kb2NfXywKKyJmaW5kYWxsKCRzZWxmLCAvLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0ZJTkRBTExfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRhbGwiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX0VsZW1lbnRfZmluZGFsbCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9lbGVtZW50dHJlZV9FbGVtZW50X2ZpbmRhbGxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X2ZpbmRhbGxfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZXNwYWNlcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kYWxsKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnBhdGg7CisgICAgUHlPYmplY3QgKm5hbWVzcGFjZXMgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xPOmZpbmRhbGwiLCBfa2V5d29yZHMsCisgICAgICAgICZwYXRoLCAmbmFtZXNwYWNlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZWxlbWVudHRyZWVfRWxlbWVudF9maW5kYWxsX2ltcGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X2l0ZXJmaW5kX19kb2NfXywKKyJpdGVyZmluZCgkc2VsZiwgLywgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfRUxFTUVOVF9JVEVSRklORF9NRVRIT0RERUYgICAgXAorICAgIHsiaXRlcmZpbmQiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlcmZpbmQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVyZmluZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlcmZpbmRfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWVzcGFjZXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlcmZpbmQoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcGF0aDsKKyAgICBQeU9iamVjdCAqbmFtZXNwYWNlcyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfE86aXRlcmZpbmQiLCBfa2V5d29yZHMsCisgICAgICAgICZwYXRoLCAmbmFtZXNwYWNlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVyZmluZF9pbXBsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9nZXRfX2RvY19fLAorImdldCgkc2VsZiwgLywga2V5LCBkZWZhdWx0PU5vbmUpXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0dFVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0IiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9FbGVtZW50X2dldCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9lbGVtZW50dHJlZV9FbGVtZW50X2dldF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfZ2V0X2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X2dldChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImtleSIsICJkZWZhdWx0IiwgTlVMTH07CisgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfE86Z2V0IiwgX2tleXdvcmRzLAorICAgICAgICAma2V5LCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZWxlbWVudHRyZWVfRWxlbWVudF9nZXRfaW1wbChzZWxmLCBrZXksIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9nZXRjaGlsZHJlbl9fZG9jX18sCisiZ2V0Y2hpbGRyZW4oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0dFVENISUxEUkVOX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRjaGlsZHJlbiIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfRWxlbWVudF9nZXRjaGlsZHJlbiwgTUVUSF9OT0FSR1MsIF9lbGVtZW50dHJlZV9FbGVtZW50X2dldGNoaWxkcmVuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9nZXRjaGlsZHJlbl9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfZ2V0Y2hpbGRyZW4oRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2VsZW1lbnR0cmVlX0VsZW1lbnRfZ2V0Y2hpbGRyZW5faW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X2l0ZXJfX2RvY19fLAorIml0ZXIoJHNlbGYsIC8sIHRhZz1Ob25lKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfRUxFTUVOVF9JVEVSX01FVEhPRERFRiAgICBcCisgICAgeyJpdGVyIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9FbGVtZW50X2l0ZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVyX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnRhZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVyKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsidGFnIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnRhZyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TzppdGVyIiwgX2tleXdvcmRzLAorICAgICAgICAmdGFnKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9lbGVtZW50dHJlZV9FbGVtZW50X2l0ZXJfaW1wbChzZWxmLCB0YWcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVydGV4dF9fZG9jX18sCisiaXRlcnRleHQoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9FTEVNRU5UX0lURVJURVhUX01FVEhPRERFRiAgICBcCisgICAgeyJpdGVydGV4dCIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVydGV4dCwgTUVUSF9OT0FSR1MsIF9lbGVtZW50dHJlZV9FbGVtZW50X2l0ZXJ0ZXh0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVydGV4dF9pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlcnRleHQoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlcnRleHRfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X2luc2VydF9fZG9jX18sCisiaW5zZXJ0KCRzZWxmLCBpbmRleCwgc3ViZWxlbWVudCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX0VMRU1FTlRfSU5TRVJUX01FVEhPRERFRiAgICBcCisgICAgeyJpbnNlcnQiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX0VsZW1lbnRfaW5zZXJ0LCBNRVRIX1ZBUkFSR1MsIF9lbGVtZW50dHJlZV9FbGVtZW50X2luc2VydF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfaW5zZXJ0X2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdWJlbGVtZW50KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X2luc2VydChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGluZGV4OworICAgIFB5T2JqZWN0ICpzdWJlbGVtZW50OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJuTyE6aW5zZXJ0IiwKKyAgICAgICAgJmluZGV4LCAmRWxlbWVudF9UeXBlLCAmc3ViZWxlbWVudCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZWxlbWVudHRyZWVfRWxlbWVudF9pbnNlcnRfaW1wbChzZWxmLCBpbmRleCwgc3ViZWxlbWVudCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X2l0ZW1zX19kb2NfXywKKyJpdGVtcygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX0VMRU1FTlRfSVRFTVNfTUVUSE9EREVGICAgIFwKKyAgICB7Iml0ZW1zIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9FbGVtZW50X2l0ZW1zLCBNRVRIX05PQVJHUywgX2VsZW1lbnR0cmVlX0VsZW1lbnRfaXRlbXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X2l0ZW1zX2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVtcyhFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfZWxlbWVudHRyZWVfRWxlbWVudF9pdGVtc19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX0VsZW1lbnRfa2V5c19fZG9jX18sCisia2V5cygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX0VMRU1FTlRfS0VZU19NRVRIT0RERUYgICAgXAorICAgIHsia2V5cyIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfRWxlbWVudF9rZXlzLCBNRVRIX05PQVJHUywgX2VsZW1lbnR0cmVlX0VsZW1lbnRfa2V5c19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfa2V5c19pbXBsKEVsZW1lbnRPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX0VsZW1lbnRfa2V5cyhFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfZWxlbWVudHRyZWVfRWxlbWVudF9rZXlzX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfRWxlbWVudF9tYWtlZWxlbWVudF9fZG9jX18sCisibWFrZWVsZW1lbnQoJHNlbGYsIHRhZywgYXR0cmliLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfRUxFTUVOVF9NQUtFRUxFTUVOVF9NRVRIT0RERUYgICAgXAorICAgIHsibWFrZWVsZW1lbnQiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX0VsZW1lbnRfbWFrZWVsZW1lbnQsIE1FVEhfVkFSQVJHUywgX2VsZW1lbnR0cmVlX0VsZW1lbnRfbWFrZWVsZW1lbnRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X21ha2VlbGVtZW50X2ltcGwoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnRhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmF0dHJpYik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9tYWtlZWxlbWVudChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdGFnOworICAgIFB5T2JqZWN0ICphdHRyaWI7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJtYWtlZWxlbWVudCIsCisgICAgICAgIDIsIDIsCisgICAgICAgICZ0YWcsICZhdHRyaWIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2VsZW1lbnR0cmVlX0VsZW1lbnRfbWFrZWVsZW1lbnRfaW1wbChzZWxmLCB0YWcsIGF0dHJpYik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X3JlbW92ZV9fZG9jX18sCisicmVtb3ZlKCRzZWxmLCBzdWJlbGVtZW50LCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfRUxFTUVOVF9SRU1PVkVfTUVUSE9EREVGICAgIFwKKyAgICB7InJlbW92ZSIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfRWxlbWVudF9yZW1vdmUsIE1FVEhfTywgX2VsZW1lbnR0cmVlX0VsZW1lbnRfcmVtb3ZlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9yZW1vdmVfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3ViZWxlbWVudCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9yZW1vdmUoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3ViZWxlbWVudDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyE6cmVtb3ZlIiwgJkVsZW1lbnRfVHlwZSwgJnN1YmVsZW1lbnQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2VsZW1lbnR0cmVlX0VsZW1lbnRfcmVtb3ZlX2ltcGwoc2VsZiwgc3ViZWxlbWVudCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9FbGVtZW50X3NldF9fZG9jX18sCisic2V0KCRzZWxmLCBrZXksIHZhbHVlLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfRUxFTUVOVF9TRVRfTUVUSE9EREVGICAgIFwKKyAgICB7InNldCIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfRWxlbWVudF9zZXQsIE1FVEhfVkFSQVJHUywgX2VsZW1lbnR0cmVlX0VsZW1lbnRfc2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfRWxlbWVudF9zZXRfaW1wbChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9FbGVtZW50X3NldChFbGVtZW50T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqa2V5OworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNldCIsCisgICAgICAgIDIsIDIsCisgICAgICAgICZrZXksICZ2YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZWxlbWVudHRyZWVfRWxlbWVudF9zZXRfaW1wbChzZWxmLCBrZXksIHZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgaW50CitfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfX19pbml0X19faW1wbChUcmVlQnVpbGRlck9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplbGVtZW50X2ZhY3RvcnkpOworCitzdGF0aWMgaW50CitfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImVsZW1lbnRfZmFjdG9yeSIsIE5VTEx9OworICAgIFB5T2JqZWN0ICplbGVtZW50X2ZhY3RvcnkgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE86VHJlZUJ1aWxkZXIiLCBfa2V5d29yZHMsCisgICAgICAgICZlbGVtZW50X2ZhY3RvcnkpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX19faW5pdF9fX2ltcGwoKFRyZWVCdWlsZGVyT2JqZWN0ICopc2VsZiwgZWxlbWVudF9mYWN0b3J5KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX2RhdGFfX2RvY19fLAorImRhdGEoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9UUkVFQlVJTERFUl9EQVRBX01FVEhPRERFRiAgICBcCisgICAgeyJkYXRhIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9UcmVlQnVpbGRlcl9kYXRhLCBNRVRIX08sIF9lbGVtZW50dHJlZV9UcmVlQnVpbGRlcl9kYXRhX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfZW5kX19kb2NfXywKKyJlbmQoJHNlbGYsIHRhZywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX1RSRUVCVUlMREVSX0VORF9NRVRIT0RERUYgICAgXAorICAgIHsiZW5kIiwgKFB5Q0Z1bmN0aW9uKV9lbGVtZW50dHJlZV9UcmVlQnVpbGRlcl9lbmQsIE1FVEhfTywgX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX2VuZF9fZG9jX199LAorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX2Nsb3NlX19kb2NfXywKKyJjbG9zZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX1RSRUVCVUlMREVSX0NMT1NFX01FVEhPRERFRiAgICBcCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfY2xvc2UsIE1FVEhfTk9BUkdTLCBfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfY2xvc2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9UcmVlQnVpbGRlcl9jbG9zZV9pbXBsKFRyZWVCdWlsZGVyT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9UcmVlQnVpbGRlcl9jbG9zZShUcmVlQnVpbGRlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX2Nsb3NlX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfc3RhcnRfX2RvY19fLAorInN0YXJ0KCRzZWxmLCB0YWcsIGF0dHJzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9FTEVNRU5UVFJFRV9UUkVFQlVJTERFUl9TVEFSVF9NRVRIT0RERUYgICAgXAorICAgIHsic3RhcnQiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX3N0YXJ0LCBNRVRIX1ZBUkFSR1MsIF9lbGVtZW50dHJlZV9UcmVlQnVpbGRlcl9zdGFydF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX3N0YXJ0X2ltcGwoVHJlZUJ1aWxkZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXR0cnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1RyZWVCdWlsZGVyX3N0YXJ0KFRyZWVCdWlsZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdGFnOworICAgIFB5T2JqZWN0ICphdHRycyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzdGFydCIsCisgICAgICAgIDEsIDIsCisgICAgICAgICZ0YWcsICZhdHRycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZWxlbWVudHRyZWVfVHJlZUJ1aWxkZXJfc3RhcnRfaW1wbChzZWxmLCB0YWcsIGF0dHJzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgaW50CitfZWxlbWVudHRyZWVfWE1MUGFyc2VyX19faW5pdF9fX2ltcGwoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaHRtbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGFyZ2V0LCBjb25zdCBjaGFyICplbmNvZGluZyk7CisKK3N0YXRpYyBpbnQKK19lbGVtZW50dHJlZV9YTUxQYXJzZXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7Imh0bWwiLCAidGFyZ2V0IiwgImVuY29kaW5nIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmh0bWwgPSBOVUxMOworICAgIFB5T2JqZWN0ICp0YXJnZXQgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPT3o6WE1MUGFyc2VyIiwgX2tleXdvcmRzLAorICAgICAgICAmaHRtbCwgJnRhcmdldCwgJmVuY29kaW5nKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9lbGVtZW50dHJlZV9YTUxQYXJzZXJfX19pbml0X19faW1wbCgoWE1MUGFyc2VyT2JqZWN0ICopc2VsZiwgaHRtbCwgdGFyZ2V0LCBlbmNvZGluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9lbGVtZW50dHJlZV9YTUxQYXJzZXJfY2xvc2VfX2RvY19fLAorImNsb3NlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfWE1MUEFSU0VSX0NMT1NFX01FVEhPRERFRiAgICBcCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfWE1MUGFyc2VyX2Nsb3NlLCBNRVRIX05PQVJHUywgX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9jbG9zZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9jbG9zZV9pbXBsKFhNTFBhcnNlck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfWE1MUGFyc2VyX2Nsb3NlKFhNTFBhcnNlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9jbG9zZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9mZWVkX19kb2NfXywKKyJmZWVkKCRzZWxmLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfWE1MUEFSU0VSX0ZFRURfTUVUSE9EREVGICAgIFwKKyAgICB7ImZlZWQiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9mZWVkLCBNRVRIX08sIF9lbGVtZW50dHJlZV9YTUxQYXJzZXJfZmVlZF9fZG9jX199LAorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9fcGFyc2Vfd2hvbGVfX2RvY19fLAorIl9wYXJzZV93aG9sZSgkc2VsZiwgZmlsZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX0VMRU1FTlRUUkVFX1hNTFBBUlNFUl9fUEFSU0VfV0hPTEVfTUVUSE9EREVGICAgIFwKKyAgICB7Il9wYXJzZV93aG9sZSIsIChQeUNGdW5jdGlvbilfZWxlbWVudHRyZWVfWE1MUGFyc2VyX19wYXJzZV93aG9sZSwgTUVUSF9PLCBfZWxlbWVudHRyZWVfWE1MUGFyc2VyX19wYXJzZV93aG9sZV9fZG9jX199LAorCitQeURvY19TVFJWQVIoX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9kb2N0eXBlX19kb2NfXywKKyJkb2N0eXBlKCRzZWxmLCBuYW1lLCBwdWJpZCwgc3lzdGVtLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfWE1MUEFSU0VSX0RPQ1RZUEVfTUVUSE9EREVGICAgIFwKKyAgICB7ImRvY3R5cGUiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9kb2N0eXBlLCBNRVRIX1ZBUkFSR1MsIF9lbGVtZW50dHJlZV9YTUxQYXJzZXJfZG9jdHlwZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9kb2N0eXBlX2ltcGwoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwdWJpZCwgUHlPYmplY3QgKnN5c3RlbSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZWxlbWVudHRyZWVfWE1MUGFyc2VyX2RvY3R5cGUoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZTsKKyAgICBQeU9iamVjdCAqcHViaWQ7CisgICAgUHlPYmplY3QgKnN5c3RlbTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImRvY3R5cGUiLAorICAgICAgICAzLCAzLAorICAgICAgICAmbmFtZSwgJnB1YmlkLCAmc3lzdGVtKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9lbGVtZW50dHJlZV9YTUxQYXJzZXJfZG9jdHlwZV9pbXBsKHNlbGYsIG5hbWUsIHB1YmlkLCBzeXN0ZW0pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZWxlbWVudHRyZWVfWE1MUGFyc2VyX19zZXRldmVudHNfX2RvY19fLAorIl9zZXRldmVudHMoJHNlbGYsIGV2ZW50c19xdWV1ZSwgZXZlbnRzX3RvX3JlcG9ydD1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfRUxFTUVOVFRSRUVfWE1MUEFSU0VSX19TRVRFVkVOVFNfTUVUSE9EREVGICAgIFwKKyAgICB7Il9zZXRldmVudHMiLCAoUHlDRnVuY3Rpb24pX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9fc2V0ZXZlbnRzLCBNRVRIX1ZBUkFSR1MsIF9lbGVtZW50dHJlZV9YTUxQYXJzZXJfX3NldGV2ZW50c19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2VsZW1lbnR0cmVlX1hNTFBhcnNlcl9fc2V0ZXZlbnRzX2ltcGwoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmV2ZW50c19xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpldmVudHNfdG9fcmVwb3J0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19lbGVtZW50dHJlZV9YTUxQYXJzZXJfX3NldGV2ZW50cyhYTUxQYXJzZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpldmVudHNfcXVldWU7CisgICAgUHlPYmplY3QgKmV2ZW50c190b19yZXBvcnQgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOl9zZXRldmVudHMiLAorICAgICAgICAmUHlMaXN0X1R5cGUsICZldmVudHNfcXVldWUsICZldmVudHNfdG9fcmVwb3J0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9lbGVtZW50dHJlZV9YTUxQYXJzZXJfX3NldGV2ZW50c19pbXBsKHNlbGYsIGV2ZW50c19xdWV1ZSwgZXZlbnRzX3RvX3JlcG9ydCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNWI4YmY3ZTdmMjE1MWNhIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL19nZGJtbW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL19nZGJtbW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg3Y2ZjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX2dkYm1tb2R1bGUuYy5oCkBAIC0wLDAgKzEsMjUyIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2dkYm1fZ2RibV9nZXRfX2RvY19fLAorImdldCgkc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJHZXQgdGhlIHZhbHVlIGZvciBrZXksIG9yIGRlZmF1bHQgaWYgbm90IHByZXNlbnQuIik7CisKKyNkZWZpbmUgX0dEQk1fR0RCTV9HRVRfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldCIsIChQeUNGdW5jdGlvbilfZ2RibV9nZGJtX2dldCwgTUVUSF9WQVJBUkdTLCBfZ2RibV9nZGJtX2dldF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2dkYm1fZ2RibV9nZXRfaW1wbChkYm1vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19nZGJtX2dkYm1fZ2V0KGRibW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJnZXQiLAorICAgICAgICAxLCAyLAorICAgICAgICAma2V5LCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZ2RibV9nZGJtX2dldF9pbXBsKHNlbGYsIGtleSwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9nZGJtX2dkYm1fc2V0ZGVmYXVsdF9fZG9jX18sCisic2V0ZGVmYXVsdCgkc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJHZXQgdmFsdWUgZm9yIGtleSwgb3Igc2V0IGl0IHRvIGRlZmF1bHQgYW5kIHJldHVybiBkZWZhdWx0IGlmIG5vdCBwcmVzZW50LiIpOworCisjZGVmaW5lIF9HREJNX0dEQk1fU0VUREVGQVVMVF9NRVRIT0RERUYgICAgXAorICAgIHsic2V0ZGVmYXVsdCIsIChQeUNGdW5jdGlvbilfZ2RibV9nZGJtX3NldGRlZmF1bHQsIE1FVEhfVkFSQVJHUywgX2dkYm1fZ2RibV9zZXRkZWZhdWx0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZ2RibV9nZGJtX3NldGRlZmF1bHRfaW1wbChkYm1vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZ2RibV9nZGJtX3NldGRlZmF1bHQoZGJtb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqa2V5OworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNldGRlZmF1bHQiLAorICAgICAgICAxLCAyLAorICAgICAgICAma2V5LCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfZ2RibV9nZGJtX3NldGRlZmF1bHRfaW1wbChzZWxmLCBrZXksIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfZ2RibV9nZGJtX2Nsb3NlX19kb2NfXywKKyJjbG9zZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNsb3NlIHRoZSBkYXRhYmFzZS4iKTsKKworI2RlZmluZSBfR0RCTV9HREJNX0NMT1NFX01FVEhPRERFRiAgICBcCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilfZ2RibV9nZGJtX2Nsb3NlLCBNRVRIX05PQVJHUywgX2dkYm1fZ2RibV9jbG9zZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2dkYm1fZ2RibV9jbG9zZV9pbXBsKGRibW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfZ2RibV9nZGJtX2Nsb3NlKGRibW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2dkYm1fZ2RibV9jbG9zZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2dkYm1fZ2RibV9rZXlzX19kb2NfXywKKyJrZXlzKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiR2V0IGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuIik7CisKKyNkZWZpbmUgX0dEQk1fR0RCTV9LRVlTX01FVEhPRERFRiAgICBcCisgICAgeyJrZXlzIiwgKFB5Q0Z1bmN0aW9uKV9nZGJtX2dkYm1fa2V5cywgTUVUSF9OT0FSR1MsIF9nZGJtX2dkYm1fa2V5c19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2dkYm1fZ2RibV9rZXlzX2ltcGwoZGJtb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19nZGJtX2dkYm1fa2V5cyhkYm1vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9nZGJtX2dkYm1fa2V5c19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2dkYm1fZ2RibV9maXJzdGtleV9fZG9jX18sCisiZmlyc3RrZXkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHN0YXJ0aW5nIGtleSBmb3IgdGhlIHRyYXZlcnNhbC5cbiIKKyJcbiIKKyJJdFwncyBwb3NzaWJsZSB0byBsb29wIG92ZXIgZXZlcnkga2V5IGluIHRoZSBkYXRhYmFzZSB1c2luZyB0aGlzIG1ldGhvZFxuIgorImFuZCB0aGUgbmV4dGtleSgpIG1ldGhvZC4gIFRoZSB0cmF2ZXJzYWwgaXMgb3JkZXJlZCBieSBHREJNXCdzIGludGVybmFsXG4iCisiaGFzaCB2YWx1ZXMsIGFuZCB3b25cJ3QgYmUgc29ydGVkIGJ5IHRoZSBrZXkgdmFsdWVzLiIpOworCisjZGVmaW5lIF9HREJNX0dEQk1fRklSU1RLRVlfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpcnN0a2V5IiwgKFB5Q0Z1bmN0aW9uKV9nZGJtX2dkYm1fZmlyc3RrZXksIE1FVEhfTk9BUkdTLCBfZ2RibV9nZGJtX2ZpcnN0a2V5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZ2RibV9nZGJtX2ZpcnN0a2V5X2ltcGwoZGJtb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19nZGJtX2dkYm1fZmlyc3RrZXkoZGJtb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfZ2RibV9nZGJtX2ZpcnN0a2V5X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfZ2RibV9nZGJtX25leHRrZXlfX2RvY19fLAorIm5leHRrZXkoJHNlbGYsIGtleSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgdGhlIGtleSB0aGF0IGZvbGxvd3Mga2V5IGluIHRoZSB0cmF2ZXJzYWwuXG4iCisiXG4iCisiVGhlIGZvbGxvd2luZyBjb2RlIHByaW50cyBldmVyeSBrZXkgaW4gdGhlIGRhdGFiYXNlIGRiLCB3aXRob3V0IGhhdmluZ1xuIgorInRvIGNyZWF0ZSBhIGxpc3QgaW4gbWVtb3J5IHRoYXQgY29udGFpbnMgdGhlbSBhbGw6XG4iCisiXG4iCisiICAgICAgayA9IGRiLmZpcnN0a2V5KClcbiIKKyIgICAgICB3aGlsZSBrICE9IE5vbmU6XG4iCisiICAgICAgICAgIHByaW50KGspXG4iCisiICAgICAgICAgIGsgPSBkYi5uZXh0a2V5KGspIik7CisKKyNkZWZpbmUgX0dEQk1fR0RCTV9ORVhUS0VZX01FVEhPRERFRiAgICBcCisgICAgeyJuZXh0a2V5IiwgKFB5Q0Z1bmN0aW9uKV9nZGJtX2dkYm1fbmV4dGtleSwgTUVUSF9PLCBfZ2RibV9nZGJtX25leHRrZXlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19nZGJtX2dkYm1fbmV4dGtleV9pbXBsKGRibW9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19nZGJtX2dkYm1fbmV4dGtleShkYm1vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqa2V5OworICAgIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAicyM6bmV4dGtleSIsICZrZXksICZrZXlfbGVuZ3RoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9nZGJtX2dkYm1fbmV4dGtleV9pbXBsKHNlbGYsIGtleSwga2V5X2xlbmd0aCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9nZGJtX2dkYm1fcmVvcmdhbml6ZV9fZG9jX18sCisicmVvcmdhbml6ZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlb3JnYW5pemUgdGhlIGRhdGFiYXNlLlxuIgorIlxuIgorIklmIHlvdSBoYXZlIGNhcnJpZWQgb3V0IGEgbG90IG9mIGRlbGV0aW9ucyBhbmQgd291bGQgbGlrZSB0byBzaHJpbmtcbiIKKyJ0aGUgc3BhY2UgdXNlZCBieSB0aGUgR0RCTSBmaWxlLCB0aGlzIHJvdXRpbmUgd2lsbCByZW9yZ2FuaXplIHRoZVxuIgorImRhdGFiYXNlLiAgR0RCTSB3aWxsIG5vdCBzaG9ydGVuIHRoZSBsZW5ndGggb2YgYSBkYXRhYmFzZSBmaWxlIGV4Y2VwdFxuIgorImJ5IHVzaW5nIHRoaXMgcmVvcmdhbml6YXRpb247IG90aGVyd2lzZSwgZGVsZXRlZCBmaWxlIHNwYWNlIHdpbGwgYmVcbiIKKyJrZXB0IGFuZCByZXVzZWQgYXMgbmV3IChrZXksdmFsdWUpIHBhaXJzIGFyZSBhZGRlZC4iKTsKKworI2RlZmluZSBfR0RCTV9HREJNX1JFT1JHQU5JWkVfTUVUSE9EREVGICAgIFwKKyAgICB7InJlb3JnYW5pemUiLCAoUHlDRnVuY3Rpb24pX2dkYm1fZ2RibV9yZW9yZ2FuaXplLCBNRVRIX05PQVJHUywgX2dkYm1fZ2RibV9yZW9yZ2FuaXplX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZ2RibV9nZGJtX3Jlb3JnYW5pemVfaW1wbChkYm1vYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2dkYm1fZ2RibV9yZW9yZ2FuaXplKGRibW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2dkYm1fZ2RibV9yZW9yZ2FuaXplX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfZ2RibV9nZGJtX3N5bmNfX2RvY19fLAorInN5bmMoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJGbHVzaCB0aGUgZGF0YWJhc2UgdG8gdGhlIGRpc2sgZmlsZS5cbiIKKyJcbiIKKyJXaGVuIHRoZSBkYXRhYmFzZSBoYXMgYmVlbiBvcGVuZWQgaW4gZmFzdCBtb2RlLCB0aGlzIG1ldGhvZCBmb3JjZXNcbiIKKyJhbnkgdW53cml0dGVuIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGlzay4iKTsKKworI2RlZmluZSBfR0RCTV9HREJNX1NZTkNfTUVUSE9EREVGICAgIFwKKyAgICB7InN5bmMiLCAoUHlDRnVuY3Rpb24pX2dkYm1fZ2RibV9zeW5jLCBNRVRIX05PQVJHUywgX2dkYm1fZ2RibV9zeW5jX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfZ2RibV9nZGJtX3N5bmNfaW1wbChkYm1vYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2dkYm1fZ2RibV9zeW5jKGRibW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2dkYm1fZ2RibV9zeW5jX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihkYm1vcGVuX19kb2NfXywKKyJvcGVuKCRtb2R1bGUsIGZpbGVuYW1lLCBmbGFncz1cJ3JcJywgbW9kZT0wbzY2NiwgLylcbiIKKyItLVxuIgorIlxuIgorIk9wZW4gYSBkYm0gZGF0YWJhc2UgYW5kIHJldHVybiBhIGRibSBvYmplY3QuXG4iCisiXG4iCisiVGhlIGZpbGVuYW1lIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSBmaWxlLlxuIgorIlxuIgorIlRoZSBvcHRpb25hbCBmbGFncyBhcmd1bWVudCBjYW4gYmUgXCdyXCcgKHRvIG9wZW4gYW4gZXhpc3RpbmcgZGF0YWJhc2VcbiIKKyJmb3IgcmVhZGluZyBvbmx5IC0tIGRlZmF1bHQpLCBcJ3dcJyAodG8gb3BlbiBhbiBleGlzdGluZyBkYXRhYmFzZSBmb3JcbiIKKyJyZWFkaW5nIGFuZCB3cml0aW5nKSwgXCdjXCcgKHdoaWNoIGNyZWF0ZXMgdGhlIGRhdGFiYXNlIGlmIGl0IGRvZXNuXCd0XG4iCisiZXhpc3QpLCBvciBcJ25cJyAod2hpY2ggYWx3YXlzIGNyZWF0ZXMgYSBuZXcgZW1wdHkgZGF0YWJhc2UpLlxuIgorIlxuIgorIlNvbWUgdmVyc2lvbnMgb2YgZ2RibSBzdXBwb3J0IGFkZGl0aW9uYWwgZmxhZ3Mgd2hpY2ggbXVzdCBiZVxuIgorImFwcGVuZGVkIHRvIG9uZSBvZiB0aGUgZmxhZ3MgZGVzY3JpYmVkIGFib3ZlLiAgVGhlIG1vZHVsZSBjb25zdGFudFxuIgorIlwnb3Blbl9mbGFnc1wnIGlzIGEgc3RyaW5nIG9mIHZhbGlkIGFkZGl0aW9uYWwgZmxhZ3MuICBUaGUgXCdmXCcgZmxhZ1xuIgorIm9wZW5zIHRoZSBkYXRhYmFzZSBpbiBmYXN0IG1vZGU7IGFsdGVyZWQgZGF0YSB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5XG4iCisiYmUgd3JpdHRlbiB0byB0aGUgZGlzayBhZnRlciBldmVyeSBjaGFuZ2UuICBUaGlzIHJlc3VsdHMgaW4gZmFzdGVyXG4iCisid3JpdGVzIHRvIHRoZSBkYXRhYmFzZSwgYnV0IG1heSByZXN1bHQgaW4gYW4gaW5jb25zaXN0ZW50IGRhdGFiYXNlXG4iCisiaWYgdGhlIHByb2dyYW0gY3Jhc2hlcyB3aGlsZSB0aGUgZGF0YWJhc2UgaXMgc3RpbGwgb3Blbi4gIFVzZSB0aGVcbiIKKyJzeW5jKCkgbWV0aG9kIHRvIGZvcmNlIGFueSB1bndyaXR0ZW4gZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBkaXNrLlxuIgorIlRoZSBcJ3NcJyBmbGFnIGNhdXNlcyBhbGwgZGF0YWJhc2Ugb3BlcmF0aW9ucyB0byBiZSBzeW5jaHJvbml6ZWQgdG9cbiIKKyJkaXNrLiAgVGhlIFwndVwnIGZsYWcgZGlzYWJsZXMgbG9ja2luZyBvZiB0aGUgZGF0YWJhc2UgZmlsZS5cbiIKKyJcbiIKKyJUaGUgb3B0aW9uYWwgbW9kZSBhcmd1bWVudCBpcyB0aGUgVW5peCBtb2RlIG9mIHRoZSBmaWxlLCB1c2VkIG9ubHlcbiIKKyJ3aGVuIHRoZSBkYXRhYmFzZSBoYXMgdG8gYmUgY3JlYXRlZC4gIEl0IGRlZmF1bHRzIHRvIG9jdGFsIDBvNjY2LiIpOworCisjZGVmaW5lIERCTU9QRU5fTUVUSE9EREVGICAgIFwKKyAgICB7Im9wZW4iLCAoUHlDRnVuY3Rpb24pZGJtb3BlbiwgTUVUSF9WQVJBUkdTLCBkYm1vcGVuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZmxhZ3MsIGludCBtb2RlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RibW9wZW4oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBjaGFyICpmbGFncyA9ICJyIjsKKyAgICBpbnQgbW9kZSA9IDQzODsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3xzaTpvcGVuIiwKKyAgICAgICAgJm5hbWUsICZmbGFncywgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtb3Blbl9pbXBsKG1vZHVsZSwgbmFtZSwgZmxhZ3MsIG1vZGUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWFjN2E4OTg1OGE5NzY1ZiBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fbHptYW1vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fbHptYW1vZHVsZS5jLmgKaW5kZXggYzFhZDg4Mi4uZjhkMzhlYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbGluaWMvX2x6bWFtb2R1bGUuYy5oCisrKyBiL01vZHVsZXMvY2xpbmljL19sem1hbW9kdWxlLmMuaApAQCAtMTQsMjAgKzE0LDE4IEBACiAiZmx1c2goKSBtZXRob2QgdG8gZmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLiIpOwogCiAjZGVmaW5lIF9MWk1BX0xaTUFDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRiAgICBcCi0gICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbilfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX199LAorICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3MsIE1FVEhfTywgX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3NfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKIF9sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoQ29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLV9sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzKENvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3MoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSo6Y29tcHJlc3MiLAotICAgICAgICAmZGF0YSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ5Kjpjb21wcmVzcyIsICZkYXRhKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IF9sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoc2VsZiwgJmRhdGEpOwogCkBAIC02MiwzNCArNjAsNDMgQEAKIH0KIAogUHlEb2NfU1RSVkFSKF9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcygkc2VsZiwgZGF0YSwgLylcbiIKKyJkZWNvbXByZXNzKCRzZWxmLCAvLCBkYXRhLCBtYXhfbGVuZ3RoPS0xKVxuIgogIi0tXG4iCiAiXG4iCi0iUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LlxuIgorIkRlY29tcHJlc3MgKmRhdGEqLCByZXR1cm5pbmcgdW5jb21wcmVzc2VkIGRhdGEgYXMgYnl0ZXMuXG4iCiAiXG4iCi0iUmV0dXJucyBhIGNodW5rIG9mIGRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCdcJyBvdGhlcndpc2UuXG4iCisiSWYgKm1heF9sZW5ndGgqIGlzIG5vbm5lZ2F0aXZlLCByZXR1cm5zIGF0IG1vc3QgKm1heF9sZW5ndGgqIGJ5dGVzIG9mXG4iCisiZGVjb21wcmVzc2VkIGRhdGEuIElmIHRoaXMgbGltaXQgaXMgcmVhY2hlZCBhbmQgZnVydGhlciBvdXRwdXQgY2FuIGJlXG4iCisicHJvZHVjZWQsICpzZWxmLm5lZWRzX2lucHV0KiB3aWxsIGJlIHNldCB0byBgYEZhbHNlYGAuIEluIHRoaXMgY2FzZSwgdGhlIG5leHRcbiIKKyJjYWxsIHRvICpkZWNvbXByZXNzKCkqIG1heSBwcm92aWRlICpkYXRhKiBhcyBiXCdcJyB0byBvYnRhaW4gbW9yZSBvZiB0aGUgb3V0cHV0LlxuIgogIlxuIgotIkF0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWRcbiIKLSJyYWlzZXMgYW4gRU9GRXJyb3IuICBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW1cbiIKLSJpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLiIpOworIklmIGFsbCBvZiB0aGUgaW5wdXQgZGF0YSB3YXMgZGVjb21wcmVzc2VkIGFuZCByZXR1cm5lZCAoZWl0aGVyIGJlY2F1c2UgdGhpc1xuIgorIndhcyBsZXNzIHRoYW4gKm1heF9sZW5ndGgqIGJ5dGVzLCBvciBiZWNhdXNlICptYXhfbGVuZ3RoKiB3YXMgbmVnYXRpdmUpLFxuIgorIipzZWxmLm5lZWRzX2lucHV0KiB3aWxsIGJlIHNldCB0byBUcnVlLlxuIgorIlxuIgorIkF0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWQgcmFpc2VzIGFuXG4iCisiRU9GRXJyb3IuICBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW5cbiIKKyJ0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLiIpOwogCiAjZGVmaW5lIF9MWk1BX0xaTUFERUNPTVBSRVNTT1JfREVDT01QUkVTU19NRVRIT0RERUYgICAgXAotICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfX30sCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpOworX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heF9sZW5ndGgpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzKERlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3MoRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImRhdGEiLCAibWF4X2xlbmd0aCIsIE5VTEx9OwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIFB5X3NzaXplX3QgbWF4X2xlbmd0aCA9IC0xOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KjpkZWNvbXByZXNzIiwKLSAgICAgICAgJmRhdGEpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfG46ZGVjb21wcmVzcyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRhdGEsICZtYXhfbGVuZ3RoKSkKICAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IF9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKKyAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSwgbWF4X2xlbmd0aCk7CiAKIGV4aXQ6CiAgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLwpAQCAtMTIzLDcgKzEzMCw4IEBACiAiRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuIik7CiAKIHN0YXRpYyBpbnQKLV9sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19faW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIGludCBmb3JtYXQsIFB5T2JqZWN0ICptZW1saW1pdCwgUHlPYmplY3QgKmZpbHRlcnMpOworX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKERlY29tcHJlc3NvciAqc2VsZiwgaW50IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWVtbGltaXQsIFB5T2JqZWN0ICpmaWx0ZXJzKTsKIAogc3RhdGljIGludAogX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCkBAIC0xMzQsOCArMTQyLDcgQEAKICAgICBQeU9iamVjdCAqbWVtbGltaXQgPSBQeV9Ob25lOwogICAgIFB5T2JqZWN0ICpmaWx0ZXJzID0gUHlfTm9uZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKLSAgICAgICAgInxpT086TFpNQURlY29tcHJlc3NvciIsIF9rZXl3b3JkcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aU9POkxaTUFEZWNvbXByZXNzb3IiLCBfa2V5d29yZHMsCiAgICAgICAgICZmb3JtYXQsICZtZW1saW1pdCwgJmZpbHRlcnMpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKChEZWNvbXByZXNzb3IgKilzZWxmLCBmb3JtYXQsIG1lbWxpbWl0LCBmaWx0ZXJzKTsKQEAgLTE1MywyMCArMTYwLDE4IEBACiAiQWx3YXlzIHJldHVybnMgVHJ1ZSBmb3IgQ0hFQ0tfTk9ORSBhbmQgQ0hFQ0tfQ1JDMzIuIik7CiAKICNkZWZpbmUgX0xaTUFfSVNfQ0hFQ0tfU1VQUE9SVEVEX01FVEhPRERFRiAgICBcCi0gICAgeyJpc19jaGVja19zdXBwb3J0ZWQiLCAoUHlDRnVuY3Rpb24pX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkLCBNRVRIX1ZBUkFSR1MsIF9sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9fZG9jX199LAorICAgIHsiaXNfY2hlY2tfc3VwcG9ydGVkIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX2lzX2NoZWNrX3N1cHBvcnRlZCwgTUVUSF9PLCBfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLV9sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBjaGVja19pZCk7CitfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgY2hlY2tfaWQpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX2lkOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJpOmlzX2NoZWNrX3N1cHBvcnRlZCIsCi0gICAgICAgICZjaGVja19pZCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOmlzX2NoZWNrX3N1cHBvcnRlZCIsICZjaGVja19pZCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfaW1wbChtb2R1bGUsIGNoZWNrX2lkKTsKIApAQCAtMTgzLDIwICsxODgsMTggQEAKICJUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuIik7CiAKICNkZWZpbmUgX0xaTUFfX0VOQ09ERV9GSUxURVJfUFJPUEVSVElFU19NRVRIT0RERUYgICAgXAotICAgIHsiX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLCBNRVRIX1ZBUkFSR1MsIF9sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfX2RvY19ffSwKKyAgICB7Il9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLCAoUHlDRnVuY3Rpb24pX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcywgTUVUSF9PLCBfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgbHptYV9maWx0ZXIgZmlsdGVyKTsKK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBsem1hX2ZpbHRlciBmaWx0ZXIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBsem1hX2ZpbHRlciBmaWx0ZXIgPSB7TFpNQV9WTElfVU5LTk9XTiwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgIk8mOl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAotICAgICAgICBsem1hX2ZpbHRlcl9jb252ZXJ0ZXIsICZmaWx0ZXIpKQorICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyY6X2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIGx6bWFfZmlsdGVyX2NvbnZlcnRlciwgJmZpbHRlcikpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwobW9kdWxlLCBmaWx0ZXIpOwogCkBAIC0yMjAsMTcgKzIyMywxNyBAQAogICAgIHsiX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLCBNRVRIX1ZBUkFSR1MsIF9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLV9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX3ZsaSBmaWx0ZXJfaWQsIFB5X2J1ZmZlciAqZW5jb2RlZF9wcm9wcyk7CitfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgbHptYV92bGkgZmlsdGVyX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqZW5jb2RlZF9wcm9wcyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBsem1hX3ZsaSBmaWx0ZXJfaWQ7CiAgICAgUHlfYnVmZmVyIGVuY29kZWRfcHJvcHMgPSB7TlVMTCwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgIk8meSo6X2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnkqOl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAogICAgICAgICBsem1hX3ZsaV9jb252ZXJ0ZXIsICZmaWx0ZXJfaWQsICZlbmNvZGVkX3Byb3BzKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IF9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChtb2R1bGUsIGZpbHRlcl9pZCwgJmVuY29kZWRfcHJvcHMpOwpAQCAtMjQyLDQgKzI0NSw0IEBACiAKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTgwOGZlYzgyMTZhYzcxMmIgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZhZGEwNjAyMGZkMzE4Y2MgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX29wY29kZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fb3Bjb2RlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWY2NDQyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX29wY29kZS5jLmgKQEAgLTAsMCArMSwzNiBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9vcGNvZGVfc3RhY2tfZWZmZWN0X19kb2NfXywKKyJzdGFja19lZmZlY3QoJG1vZHVsZSwgb3Bjb2RlLCBvcGFyZz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29tcHV0ZSB0aGUgc3RhY2sgZWZmZWN0IG9mIHRoZSBvcGNvZGUuIik7CisKKyNkZWZpbmUgX09QQ09ERV9TVEFDS19FRkZFQ1RfTUVUSE9EREVGICAgIFwKKyAgICB7InN0YWNrX2VmZmVjdCIsIChQeUNGdW5jdGlvbilfb3Bjb2RlX3N0YWNrX2VmZmVjdCwgTUVUSF9WQVJBUkdTLCBfb3Bjb2RlX3N0YWNrX2VmZmVjdF9fZG9jX199LAorCitzdGF0aWMgaW50Citfb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpvcGFyZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfb3Bjb2RlX3N0YWNrX2VmZmVjdChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgb3Bjb2RlOworICAgIFB5T2JqZWN0ICpvcGFyZyA9IFB5X05vbmU7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml8TzpzdGFja19lZmZlY3QiLAorICAgICAgICAmb3Bjb2RlLCAmb3BhcmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IF9vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwobW9kdWxlLCBvcGNvZGUsIG9wYXJnKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ODRkNmRlMTQwMzAzZDEwIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL19waWNrbGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvX3BpY2tsZS5jLmgKaW5kZXggYzBjNTRkMi4uYmQxMmQyYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbGluaWMvX3BpY2tsZS5jLmgKKysrIGIvTW9kdWxlcy9jbGluaWMvX3BpY2tsZS5jLmgKQEAgLTg1LDcgKzg1LDggQEAKICIyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4iKTsKIAogc3RhdGljIGludAotX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKK19waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpOwogCiBzdGF0aWMgaW50CiBfcGlja2xlX1BpY2tsZXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQpAQCAtOTYsOCArOTcsNyBAQAogICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CiAgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKLSAgICAgICAgIk98T3A6UGlja2xlciIsIF9rZXl3b3JkcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfE9wOlBpY2tsZXIiLCBfa2V5d29yZHMsCiAgICAgICAgICZmaWxlLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbCgoUGlja2xlck9iamVjdCAqKXNlbGYsIGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CkBAIC0xOTksNyArMTk5LDkgQEAKICAgICB7ImZpbmRfY2xhc3MiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzcywgTUVUSF9WQVJBUkdTLCBfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSk7CitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZ2xvYmFsX25hbWUpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMjYyLDcgKzI2NCw3IEBACiAib3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgogIlxuIgogIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKixcbiIKLSJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtXG4iCisid2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKICJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgogIm1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZVxuIgogIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCkBAIC0yNzEsNyArMjczLDkgQEAKICJzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuIik7CiAKIHN0YXRpYyBpbnQKLV9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKK19waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKIAogc3RhdGljIGludAogX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQpAQCAtMjgzLDggKzI4Nyw3IEBACiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiQVNDSUkiOwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9ICJzdHJpY3QiOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAiT3wkcHNzOlVucGlja2xlciIsIF9rZXl3b3JkcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfCRwc3M6VW5waWNrbGVyIiwgX2tleXdvcmRzLAogICAgICAgICAmZmlsZSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbCgoVW5waWNrbGVyT2JqZWN0ICopc2VsZiwgZmlsZSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOwpAQCAtMzc3LDEwICszODAsMTEgQEAKICAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9kdW1wLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fcGlja2xlX2R1bXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpOworX3BpY2tsZV9kdW1wX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmZpbGUsCisgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fcGlja2xlX2R1bXAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfcGlja2xlX2R1bXAoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJvYmoiLCAiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIE5VTEx9OwpAQCAtMzg5LDggKzM5Myw3IEBACiAgICAgUHlPYmplY3QgKnByb3RvY29sID0gTlVMTDsKICAgICBpbnQgZml4X2ltcG9ydHMgPSAxOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAiT098TyRwOmR1bXAiLCBfa2V5d29yZHMsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT098TyRwOmR1bXAiLCBfa2V5d29yZHMsCiAgICAgICAgICZvYmosICZmaWxlLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2R1bXBfaW1wbChtb2R1bGUsIG9iaiwgZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKTsKQEAgLTQyMSwxMCArNDI0LDExIEBACiAgICAgeyJkdW1wcyIsIChQeUNGdW5jdGlvbilfcGlja2xlX2R1bXBzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotX3BpY2tsZV9kdW1wc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKK19waWNrbGVfZHVtcHNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgaW50IGZpeF9pbXBvcnRzKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLV9waWNrbGVfZHVtcHMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfcGlja2xlX2R1bXBzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgTlVMTH07CkBAIC00MzIsOCArNDM2LDcgQEAKICAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOwogICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCi0gICAgICAgICJPfE8kcDpkdW1wcyIsIF9rZXl3b3JkcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfE8kcDpkdW1wcyIsIF9rZXl3b3JkcywKICAgICAgICAgJm9iaiwgJnByb3RvY29sLCAmZml4X2ltcG9ydHMpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9kdW1wc19pbXBsKG1vZHVsZSwgb2JqLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOwpAQCAtNDYzLDcgKzQ2Niw3IEBACiAib3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgogIlxuIgogIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKixcbiIKLSJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtXG4iCisid2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKICJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgogIm1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZVxuIgogIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCkBAIC00NzUsMTAgKzQ3OCwxMSBAQAogICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilfcGlja2xlX2xvYWQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2xvYWRfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLV9waWNrbGVfbG9hZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOworX3BpY2tsZV9sb2FkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotX3BpY2tsZV9sb2FkKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorX3BpY2tsZV9sb2FkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmlsZSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKQEAgLTQ4Nyw4ICs0OTEsNyBAQAogICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKICAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKLSAgICAgICAgIk98JHBzczpsb2FkIiwgX2tleXdvcmRzLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk98JHBzczpsb2FkIiwgX2tleXdvcmRzLAogICAgICAgICAmZmlsZSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9sb2FkX2ltcGwobW9kdWxlLCBmaWxlLCBmaXhfaW1wb3J0cywgZW5jb2RpbmcsIGVycm9ycyk7CkBAIC01MDksNyArNTEyLDcgQEAKICJyZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC5cbiIKICJcbiIKICJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosXG4iCi0id2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbVxuIgorIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtXG4iCiAiZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKICJtYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGVcbiIKICIqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZ1xuIgpAQCAtNTIxLDEwICs1MjQsMTEgQEAKICAgICB7ImxvYWRzIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfbG9hZHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2xvYWRzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fcGlja2xlX2xvYWRzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmRhdGEsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycyk7CitfcGlja2xlX2xvYWRzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmRhdGEsIGludCBmaXhfaW1wb3J0cywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLV9waWNrbGVfbG9hZHMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfcGlja2xlX2xvYWRzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKQEAgLTUzMyw4ICs1MzcsNyBAQAogICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKICAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKLSAgICAgICAgIk98JHBzczpsb2FkcyIsIF9rZXl3b3JkcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfCRwc3M6bG9hZHMiLCBfa2V5d29yZHMsCiAgICAgICAgICZkYXRhLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2xvYWRzX2ltcGwobW9kdWxlLCBkYXRhLCBmaXhfaW1wb3J0cywgZW5jb2RpbmcsIGVycm9ycyk7CkBAIC01NDIsNCArNTQ1LDQgQEAKIGV4aXQ6CiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xYmEyMTAxNTJlMjI2MWQ4IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05MzY1N2U1NWQ2YTc0OGFmIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL19zcmUuYy5oIGIvTW9kdWxlcy9jbGluaWMvX3NyZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4MTcxNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL19zcmUuYy5oCkBAIC0wLDAgKzEsNjkzIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX3NyZV9nZXRjb2Rlc2l6ZV9fZG9jX18sCisiZ2V0Y29kZXNpemUoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NSRV9HRVRDT0RFU0laRV9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0Y29kZXNpemUiLCAoUHlDRnVuY3Rpb24pX3NyZV9nZXRjb2Rlc2l6ZSwgTUVUSF9OT0FSR1MsIF9zcmVfZ2V0Y29kZXNpemVfX2RvY19ffSwKKworc3RhdGljIGludAorX3NyZV9nZXRjb2Rlc2l6ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9nZXRjb2Rlc2l6ZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgX3JldHVybl92YWx1ZSA9IF9zcmVfZ2V0Y29kZXNpemVfaW1wbChtb2R1bGUpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NyZV9nZXRsb3dlcl9fZG9jX18sCisiZ2V0bG93ZXIoJG1vZHVsZSwgY2hhcmFjdGVyLCBmbGFncywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NSRV9HRVRMT1dFUl9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0bG93ZXIiLCAoUHlDRnVuY3Rpb24pX3NyZV9nZXRsb3dlciwgTUVUSF9WQVJBUkdTLCBfc3JlX2dldGxvd2VyX19kb2NfX30sCisKK3N0YXRpYyBpbnQKK19zcmVfZ2V0bG93ZXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgY2hhcmFjdGVyLCBpbnQgZmxhZ3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9nZXRsb3dlcihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgY2hhcmFjdGVyOworICAgIGludCBmbGFnczsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6Z2V0bG93ZXIiLAorICAgICAgICAmY2hhcmFjdGVyLCAmZmxhZ3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IF9zcmVfZ2V0bG93ZXJfaW1wbChtb2R1bGUsIGNoYXJhY3RlciwgZmxhZ3MpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NyZV9TUkVfUGF0dGVybl9tYXRjaF9fZG9jX18sCisibWF0Y2goJHNlbGYsIC8sIHN0cmluZz1Ob25lLCBwb3M9MCwgZW5kcG9zPXN5cy5tYXhzaXplLCAqLCBwYXR0ZXJuPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJNYXRjaGVzIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4iKTsKKworI2RlZmluZSBfU1JFX1NSRV9QQVRURVJOX01BVENIX01FVEhPRERFRiAgICBcCisgICAgeyJtYXRjaCIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9QYXR0ZXJuX21hdGNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NyZV9TUkVfUGF0dGVybl9tYXRjaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9tYXRjaF9pbXBsKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MsIFB5X3NzaXplX3QgZW5kcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwYXR0ZXJuKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fbWF0Y2goUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdHJpbmciLCAicG9zIiwgImVuZHBvcyIsICJwYXR0ZXJuIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBwb3MgPSAwOworICAgIFB5X3NzaXplX3QgZW5kcG9zID0gUFlfU1NJWkVfVF9NQVg7CisgICAgUHlPYmplY3QgKnBhdHRlcm4gPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE9ubiRPOm1hdGNoIiwgX2tleXdvcmRzLAorICAgICAgICAmc3RyaW5nLCAmcG9zLCAmZW5kcG9zLCAmcGF0dGVybikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3JlX1NSRV9QYXR0ZXJuX21hdGNoX2ltcGwoc2VsZiwgc3RyaW5nLCBwb3MsIGVuZHBvcywgcGF0dGVybik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zcmVfU1JFX1BhdHRlcm5fZnVsbG1hdGNoX19kb2NfXywKKyJmdWxsbWF0Y2goJHNlbGYsIC8sIHN0cmluZz1Ob25lLCBwb3M9MCwgZW5kcG9zPXN5cy5tYXhzaXplLCAqLFxuIgorIiAgICAgICAgICBwYXR0ZXJuPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJNYXRjaGVzIGFnYWluc3QgYWxsIG9mIHRoZSBzdHJpbmciKTsKKworI2RlZmluZSBfU1JFX1NSRV9QQVRURVJOX0ZVTExNQVRDSF9NRVRIT0RERUYgICAgXAorICAgIHsiZnVsbG1hdGNoIiwgKFB5Q0Z1bmN0aW9uKV9zcmVfU1JFX1BhdHRlcm5fZnVsbG1hdGNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NyZV9TUkVfUGF0dGVybl9mdWxsbWF0Y2hfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fZnVsbG1hdGNoX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MsIFB5X3NzaXplX3QgZW5kcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcGF0dGVybik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9QYXR0ZXJuX2Z1bGxtYXRjaChQYXR0ZXJuT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InN0cmluZyIsICJwb3MiLCAiZW5kcG9zIiwgInBhdHRlcm4iLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc3RyaW5nID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CisgICAgUHlfc3NpemVfdCBlbmRwb3MgPSBQWV9TU0laRV9UX01BWDsKKyAgICBQeU9iamVjdCAqcGF0dGVybiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8T25uJE86ZnVsbG1hdGNoIiwgX2tleXdvcmRzLAorICAgICAgICAmc3RyaW5nLCAmcG9zLCAmZW5kcG9zLCAmcGF0dGVybikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3JlX1NSRV9QYXR0ZXJuX2Z1bGxtYXRjaF9pbXBsKHNlbGYsIHN0cmluZywgcG9zLCBlbmRwb3MsIHBhdHRlcm4pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3JlX1NSRV9QYXR0ZXJuX3NlYXJjaF9fZG9jX18sCisic2VhcmNoKCRzZWxmLCAvLCBzdHJpbmc9Tm9uZSwgcG9zPTAsIGVuZHBvcz1zeXMubWF4c2l6ZSwgKixcbiIKKyIgICAgICAgcGF0dGVybj1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZyBtYXRjaCBvYmplY3QgaW5zdGFuY2UuXG4iCisiXG4iCisiUmV0dXJuIE5vbmUgaWYgbm8gcG9zaXRpb24gaW4gdGhlIHN0cmluZyBtYXRjaGVzLiIpOworCisjZGVmaW5lIF9TUkVfU1JFX1BBVFRFUk5fU0VBUkNIX01FVEhPRERFRiAgICBcCisgICAgeyJzZWFyY2giLCAoUHlDRnVuY3Rpb24pX3NyZV9TUkVfUGF0dGVybl9zZWFyY2gsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfc3JlX1NSRV9QYXR0ZXJuX3NlYXJjaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9zZWFyY2hfaW1wbChQYXR0ZXJuT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcywgUHlfc3NpemVfdCBlbmRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwYXR0ZXJuKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fc2VhcmNoKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RyaW5nIiwgInBvcyIsICJlbmRwb3MiLCAicGF0dGVybiIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZHBvcyA9IFBZX1NTSVpFX1RfTUFYOworICAgIFB5T2JqZWN0ICpwYXR0ZXJuID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPbm4kTzpzZWFyY2giLCBfa2V5d29yZHMsCisgICAgICAgICZzdHJpbmcsICZwb3MsICZlbmRwb3MsICZwYXR0ZXJuKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zcmVfU1JFX1BhdHRlcm5fc2VhcmNoX2ltcGwoc2VsZiwgc3RyaW5nLCBwb3MsIGVuZHBvcywgcGF0dGVybik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zcmVfU1JFX1BhdHRlcm5fZmluZGFsbF9fZG9jX18sCisiZmluZGFsbCgkc2VsZiwgLywgc3RyaW5nPU5vbmUsIHBvcz0wLCBlbmRwb3M9c3lzLm1heHNpemUsICosXG4iCisiICAgICAgICBzb3VyY2U9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGxpc3Qgb2YgYWxsIG5vbi1vdmVybGFwcGluZyBtYXRjaGVzIG9mIHBhdHRlcm4gaW4gc3RyaW5nLiIpOworCisjZGVmaW5lIF9TUkVfU1JFX1BBVFRFUk5fRklOREFMTF9NRVRIT0RERUYgICAgXAorICAgIHsiZmluZGFsbCIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9QYXR0ZXJuX2ZpbmRhbGwsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfc3JlX1NSRV9QYXR0ZXJuX2ZpbmRhbGxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fZmluZGFsbF9pbXBsKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcywgUHlfc3NpemVfdCBlbmRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc291cmNlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fZmluZGFsbChQYXR0ZXJuT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InN0cmluZyIsICJwb3MiLCAiZW5kcG9zIiwgInNvdXJjZSIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZHBvcyA9IFBZX1NTSVpFX1RfTUFYOworICAgIFB5T2JqZWN0ICpzb3VyY2UgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE9ubiRPOmZpbmRhbGwiLCBfa2V5d29yZHMsCisgICAgICAgICZzdHJpbmcsICZwb3MsICZlbmRwb3MsICZzb3VyY2UpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NyZV9TUkVfUGF0dGVybl9maW5kYWxsX2ltcGwoc2VsZiwgc3RyaW5nLCBwb3MsIGVuZHBvcywgc291cmNlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NyZV9TUkVfUGF0dGVybl9maW5kaXRlcl9fZG9jX18sCisiZmluZGl0ZXIoJHNlbGYsIC8sIHN0cmluZywgcG9zPTAsIGVuZHBvcz1zeXMubWF4c2l6ZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBub24tb3ZlcmxhcHBpbmcgbWF0Y2hlcyBmb3IgdGhlIFJFIHBhdHRlcm4gaW4gc3RyaW5nLlxuIgorIlxuIgorIkZvciBlYWNoIG1hdGNoLCB0aGUgaXRlcmF0b3IgcmV0dXJucyBhIG1hdGNoIG9iamVjdC4iKTsKKworI2RlZmluZSBfU1JFX1NSRV9QQVRURVJOX0ZJTkRJVEVSX01FVEhPRERFRiAgICBcCisgICAgeyJmaW5kaXRlciIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9QYXR0ZXJuX2ZpbmRpdGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NyZV9TUkVfUGF0dGVybl9maW5kaXRlcl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9maW5kaXRlcl9pbXBsKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MsIFB5X3NzaXplX3QgZW5kcG9zKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fZmluZGl0ZXIoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdHJpbmciLCAicG9zIiwgImVuZHBvcyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpzdHJpbmc7CisgICAgUHlfc3NpemVfdCBwb3MgPSAwOworICAgIFB5X3NzaXplX3QgZW5kcG9zID0gUFlfU1NJWkVfVF9NQVg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfG5uOmZpbmRpdGVyIiwgX2tleXdvcmRzLAorICAgICAgICAmc3RyaW5nLCAmcG9zLCAmZW5kcG9zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zcmVfU1JFX1BhdHRlcm5fZmluZGl0ZXJfaW1wbChzZWxmLCBzdHJpbmcsIHBvcywgZW5kcG9zKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NyZV9TUkVfUGF0dGVybl9zY2FubmVyX19kb2NfXywKKyJzY2FubmVyKCRzZWxmLCAvLCBzdHJpbmcsIHBvcz0wLCBlbmRwb3M9c3lzLm1heHNpemUpXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9TUkVfU1JFX1BBVFRFUk5fU0NBTk5FUl9NRVRIT0RERUYgICAgXAorICAgIHsic2Nhbm5lciIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9QYXR0ZXJuX3NjYW5uZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfc3JlX1NSRV9QYXR0ZXJuX3NjYW5uZXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fc2Nhbm5lcl9pbXBsKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcywgUHlfc3NpemVfdCBlbmRwb3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9zY2FubmVyKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RyaW5nIiwgInBvcyIsICJlbmRwb3MiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc3RyaW5nOworICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZHBvcyA9IFBZX1NTSVpFX1RfTUFYOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xubjpzY2FubmVyIiwgX2tleXdvcmRzLAorICAgICAgICAmc3RyaW5nLCAmcG9zLCAmZW5kcG9zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zcmVfU1JFX1BhdHRlcm5fc2Nhbm5lcl9pbXBsKHNlbGYsIHN0cmluZywgcG9zLCBlbmRwb3MpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3JlX1NSRV9QYXR0ZXJuX3NwbGl0X19kb2NfXywKKyJzcGxpdCgkc2VsZiwgLywgc3RyaW5nPU5vbmUsIG1heHNwbGl0PTAsICosIHNvdXJjZT1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiU3BsaXQgc3RyaW5nIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiBwYXR0ZXJuLiIpOworCisjZGVmaW5lIF9TUkVfU1JFX1BBVFRFUk5fU1BMSVRfTUVUSE9EREVGICAgIFwKKyAgICB7InNwbGl0IiwgKFB5Q0Z1bmN0aW9uKV9zcmVfU1JFX1BhdHRlcm5fc3BsaXQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfc3JlX1NSRV9QYXR0ZXJuX3NwbGl0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9QYXR0ZXJuX3NwbGl0X2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heHNwbGl0LCBQeU9iamVjdCAqc291cmNlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fc3BsaXQoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdHJpbmciLCAibWF4c3BsaXQiLCAic291cmNlIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IDA7CisgICAgUHlPYmplY3QgKnNvdXJjZSA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8T24kTzpzcGxpdCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0cmluZywgJm1heHNwbGl0LCAmc291cmNlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zcmVfU1JFX1BhdHRlcm5fc3BsaXRfaW1wbChzZWxmLCBzdHJpbmcsIG1heHNwbGl0LCBzb3VyY2UpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3JlX1NSRV9QYXR0ZXJuX3N1Yl9fZG9jX18sCisic3ViKCRzZWxmLCAvLCByZXBsLCBzdHJpbmcsIGNvdW50PTApXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHN0cmluZyBvYnRhaW5lZCBieSByZXBsYWNpbmcgdGhlIGxlZnRtb3N0IG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBwYXR0ZXJuIGluIHN0cmluZyBieSB0aGUgcmVwbGFjZW1lbnQgcmVwbC4iKTsKKworI2RlZmluZSBfU1JFX1NSRV9QQVRURVJOX1NVQl9NRVRIT0RERUYgICAgXAorICAgIHsic3ViIiwgKFB5Q0Z1bmN0aW9uKV9zcmVfU1JFX1BhdHRlcm5fc3ViLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NyZV9TUkVfUGF0dGVybl9zdWJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fc3ViX2ltcGwoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnJlcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJpbmcsIFB5X3NzaXplX3QgY291bnQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9zdWIoUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJyZXBsIiwgInN0cmluZyIsICJjb3VudCIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpyZXBsOworICAgIFB5T2JqZWN0ICpzdHJpbmc7CisgICAgUHlfc3NpemVfdCBjb3VudCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPT3xuOnN1YiIsIF9rZXl3b3JkcywKKyAgICAgICAgJnJlcGwsICZzdHJpbmcsICZjb3VudCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3JlX1NSRV9QYXR0ZXJuX3N1Yl9pbXBsKHNlbGYsIHJlcGwsIHN0cmluZywgY291bnQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3JlX1NSRV9QYXR0ZXJuX3N1Ym5fX2RvY19fLAorInN1Ym4oJHNlbGYsIC8sIHJlcGwsIHN0cmluZywgY291bnQ9MClcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgdHVwbGUgKG5ld19zdHJpbmcsIG51bWJlcl9vZl9zdWJzX21hZGUpIGZvdW5kIGJ5IHJlcGxhY2luZyB0aGUgbGVmdG1vc3Qgbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHBhdHRlcm4gd2l0aCB0aGUgcmVwbGFjZW1lbnQgcmVwbC4iKTsKKworI2RlZmluZSBfU1JFX1NSRV9QQVRURVJOX1NVQk5fTUVUSE9EREVGICAgIFwKKyAgICB7InN1Ym4iLCAoUHlDRnVuY3Rpb24pX3NyZV9TUkVfUGF0dGVybl9zdWJuLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NyZV9TUkVfUGF0dGVybl9zdWJuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9QYXR0ZXJuX3N1Ym5faW1wbChQYXR0ZXJuT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcmVwbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJpbmcsIFB5X3NzaXplX3QgY291bnQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfUGF0dGVybl9zdWJuKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicmVwbCIsICJzdHJpbmciLCAiY291bnQiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmVwbDsKKyAgICBQeU9iamVjdCAqc3RyaW5nOworICAgIFB5X3NzaXplX3QgY291bnQgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT098bjpzdWJuIiwgX2tleXdvcmRzLAorICAgICAgICAmcmVwbCwgJnN0cmluZywgJmNvdW50KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zcmVfU1JFX1BhdHRlcm5fc3Vibl9pbXBsKHNlbGYsIHJlcGwsIHN0cmluZywgY291bnQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3JlX1NSRV9QYXR0ZXJuX19fY29weV9fX19kb2NfXywKKyJfX2NvcHlfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NSRV9TUkVfUEFUVEVSTl9fX0NPUFlfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19jb3B5X18iLCAoUHlDRnVuY3Rpb24pX3NyZV9TUkVfUGF0dGVybl9fX2NvcHlfXywgTUVUSF9OT0FSR1MsIF9zcmVfU1JFX1BhdHRlcm5fX19jb3B5X19fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fX19jb3B5X19faW1wbChQYXR0ZXJuT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fX19jb3B5X18oUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3NyZV9TUkVfUGF0dGVybl9fX2NvcHlfX19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3NyZV9TUkVfUGF0dGVybl9fX2RlZXBjb3B5X19fX2RvY19fLAorIl9fZGVlcGNvcHlfXygkc2VsZiwgLywgbWVtbylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NSRV9TUkVfUEFUVEVSTl9fX0RFRVBDT1BZX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fZGVlcGNvcHlfXyIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9QYXR0ZXJuX19fZGVlcGNvcHlfXywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zcmVfU1JFX1BhdHRlcm5fX19kZWVwY29weV9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9QYXR0ZXJuX19fZGVlcGNvcHlfX19pbXBsKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICptZW1vKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1BhdHRlcm5fX19kZWVwY29weV9fKFBhdHRlcm5PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsibWVtbyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICptZW1vOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTzpfX2RlZXBjb3B5X18iLCBfa2V5d29yZHMsCisgICAgICAgICZtZW1vKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zcmVfU1JFX1BhdHRlcm5fX19kZWVwY29weV9fX2ltcGwoc2VsZiwgbWVtbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zcmVfY29tcGlsZV9fZG9jX18sCisiY29tcGlsZSgkbW9kdWxlLCAvLCBwYXR0ZXJuLCBmbGFncywgY29kZSwgZ3JvdXBzLCBncm91cGluZGV4LFxuIgorIiAgICAgICAgaW5kZXhncm91cClcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NSRV9DT01QSUxFX01FVEhPRERFRiAgICBcCisgICAgeyJjb21waWxlIiwgKFB5Q0Z1bmN0aW9uKV9zcmVfY29tcGlsZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zcmVfY29tcGlsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9jb21waWxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnBhdHRlcm4sIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlLCBQeV9zc2l6ZV90IGdyb3VwcywgUHlPYmplY3QgKmdyb3VwaW5kZXgsCisgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW5kZXhncm91cCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX2NvbXBpbGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXR0ZXJuIiwgImZsYWdzIiwgImNvZGUiLCAiZ3JvdXBzIiwgImdyb3VwaW5kZXgiLCAiaW5kZXhncm91cCIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpwYXR0ZXJuOworICAgIGludCBmbGFnczsKKyAgICBQeU9iamVjdCAqY29kZTsKKyAgICBQeV9zc2l6ZV90IGdyb3VwczsKKyAgICBQeU9iamVjdCAqZ3JvdXBpbmRleDsKKyAgICBQeU9iamVjdCAqaW5kZXhncm91cDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk9pTyFuT086Y29tcGlsZSIsIF9rZXl3b3JkcywKKyAgICAgICAgJnBhdHRlcm4sICZmbGFncywgJlB5TGlzdF9UeXBlLCAmY29kZSwgJmdyb3VwcywgJmdyb3VwaW5kZXgsICZpbmRleGdyb3VwKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zcmVfY29tcGlsZV9pbXBsKG1vZHVsZSwgcGF0dGVybiwgZmxhZ3MsIGNvZGUsIGdyb3VwcywgZ3JvdXBpbmRleCwgaW5kZXhncm91cCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zcmVfU1JFX01hdGNoX2V4cGFuZF9fZG9jX18sCisiZXhwYW5kKCRzZWxmLCAvLCB0ZW1wbGF0ZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IGRvaW5nIGJhY2tzbGFzaCBzdWJzdGl0dXRpb24gb24gdGhlIHN0cmluZyB0ZW1wbGF0ZSwgYXMgZG9uZSBieSB0aGUgc3ViKCkgbWV0aG9kLiIpOworCisjZGVmaW5lIF9TUkVfU1JFX01BVENIX0VYUEFORF9NRVRIT0RERUYgICAgXAorICAgIHsiZXhwYW5kIiwgKFB5Q0Z1bmN0aW9uKV9zcmVfU1JFX01hdGNoX2V4cGFuZCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zcmVfU1JFX01hdGNoX2V4cGFuZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfTWF0Y2hfZXhwYW5kX2ltcGwoTWF0Y2hPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0ZW1wbGF0ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9NYXRjaF9leHBhbmQoTWF0Y2hPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsidGVtcGxhdGUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqdGVtcGxhdGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPOmV4cGFuZCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnRlbXBsYXRlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zcmVfU1JFX01hdGNoX2V4cGFuZF9pbXBsKHNlbGYsIHRlbXBsYXRlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NyZV9TUkVfTWF0Y2hfZ3JvdXBzX19kb2NfXywKKyJncm91cHMoJHNlbGYsIC8sIGRlZmF1bHQ9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHRoZSBzdWJncm91cHMgb2YgdGhlIG1hdGNoLCBmcm9tIDEuXG4iCisiXG4iCisiICBkZWZhdWx0XG4iCisiICAgIElzIHVzZWQgZm9yIGdyb3VwcyB0aGF0IGRpZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoLiIpOworCisjZGVmaW5lIF9TUkVfU1JFX01BVENIX0dST1VQU19NRVRIT0RERUYgICAgXAorICAgIHsiZ3JvdXBzIiwgKFB5Q0Z1bmN0aW9uKV9zcmVfU1JFX01hdGNoX2dyb3VwcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zcmVfU1JFX01hdGNoX2dyb3Vwc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfTWF0Y2hfZ3JvdXBzX2ltcGwoTWF0Y2hPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX01hdGNoX2dyb3VwcyhNYXRjaE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJkZWZhdWx0IiwgTlVMTH07CisgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE86Z3JvdXBzIiwgX2tleXdvcmRzLAorICAgICAgICAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3JlX1NSRV9NYXRjaF9ncm91cHNfaW1wbChzZWxmLCBkZWZhdWx0X3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NyZV9TUkVfTWF0Y2hfZ3JvdXBkaWN0X19kb2NfXywKKyJncm91cGRpY3QoJHNlbGYsIC8sIGRlZmF1bHQ9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgdGhlIG5hbWVkIHN1Ymdyb3VwcyBvZiB0aGUgbWF0Y2gsIGtleWVkIGJ5IHRoZSBzdWJncm91cCBuYW1lLlxuIgorIlxuIgorIiAgZGVmYXVsdFxuIgorIiAgICBJcyB1c2VkIGZvciBncm91cHMgdGhhdCBkaWQgbm90IHBhcnRpY2lwYXRlIGluIHRoZSBtYXRjaC4iKTsKKworI2RlZmluZSBfU1JFX1NSRV9NQVRDSF9HUk9VUERJQ1RfTUVUSE9EREVGICAgIFwKKyAgICB7Imdyb3VwZGljdCIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9NYXRjaF9ncm91cGRpY3QsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfc3JlX1NSRV9NYXRjaF9ncm91cGRpY3RfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX01hdGNoX2dyb3VwZGljdF9pbXBsKE1hdGNoT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9NYXRjaF9ncm91cGRpY3QoTWF0Y2hPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGVmYXVsdCIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPOmdyb3VwZGljdCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NyZV9TUkVfTWF0Y2hfZ3JvdXBkaWN0X2ltcGwoc2VsZiwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zcmVfU1JFX01hdGNoX3N0YXJ0X19kb2NfXywKKyJzdGFydCgkc2VsZiwgZ3JvdXA9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBpbmRleCBvZiB0aGUgc3RhcnQgb2YgdGhlIHN1YnN0cmluZyBtYXRjaGVkIGJ5IGdyb3VwLiIpOworCisjZGVmaW5lIF9TUkVfU1JFX01BVENIX1NUQVJUX01FVEhPRERFRiAgICBcCisgICAgeyJzdGFydCIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9NYXRjaF9zdGFydCwgTUVUSF9WQVJBUkdTLCBfc3JlX1NSRV9NYXRjaF9zdGFydF9fZG9jX199LAorCitzdGF0aWMgUHlfc3NpemVfdAorX3NyZV9TUkVfTWF0Y2hfc3RhcnRfaW1wbChNYXRjaE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmdyb3VwKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX01hdGNoX3N0YXJ0KE1hdGNoT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZ3JvdXAgPSBOVUxMOworICAgIFB5X3NzaXplX3QgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInN0YXJ0IiwKKyAgICAgICAgMCwgMSwKKyAgICAgICAgJmdyb3VwKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBfc3JlX1NSRV9NYXRjaF9zdGFydF9pbXBsKHNlbGYsIGdyb3VwKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zcmVfU1JFX01hdGNoX2VuZF9fZG9jX18sCisiZW5kKCRzZWxmLCBncm91cD0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGluZGV4IG9mIHRoZSBlbmQgb2YgdGhlIHN1YnN0cmluZyBtYXRjaGVkIGJ5IGdyb3VwLiIpOworCisjZGVmaW5lIF9TUkVfU1JFX01BVENIX0VORF9NRVRIT0RERUYgICAgXAorICAgIHsiZW5kIiwgKFB5Q0Z1bmN0aW9uKV9zcmVfU1JFX01hdGNoX2VuZCwgTUVUSF9WQVJBUkdTLCBfc3JlX1NSRV9NYXRjaF9lbmRfX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK19zcmVfU1JFX01hdGNoX2VuZF9pbXBsKE1hdGNoT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZ3JvdXApOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfTWF0Y2hfZW5kKE1hdGNoT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZ3JvdXAgPSBOVUxMOworICAgIFB5X3NzaXplX3QgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImVuZCIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZncm91cCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3NyZV9TUkVfTWF0Y2hfZW5kX2ltcGwoc2VsZiwgZ3JvdXApOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NyZV9TUkVfTWF0Y2hfc3Bhbl9fZG9jX18sCisic3Bhbigkc2VsZiwgZ3JvdXA9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIkZvciBNYXRjaE9iamVjdCBtLCByZXR1cm4gdGhlIDItdHVwbGUgKG0uc3RhcnQoZ3JvdXApLCBtLmVuZChncm91cCkpLiIpOworCisjZGVmaW5lIF9TUkVfU1JFX01BVENIX1NQQU5fTUVUSE9EREVGICAgIFwKKyAgICB7InNwYW4iLCAoUHlDRnVuY3Rpb24pX3NyZV9TUkVfTWF0Y2hfc3BhbiwgTUVUSF9WQVJBUkdTLCBfc3JlX1NSRV9NYXRjaF9zcGFuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9NYXRjaF9zcGFuX2ltcGwoTWF0Y2hPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpncm91cCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9NYXRjaF9zcGFuKE1hdGNoT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZ3JvdXAgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic3BhbiIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZncm91cCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3JlX1NSRV9NYXRjaF9zcGFuX2ltcGwoc2VsZiwgZ3JvdXApOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3JlX1NSRV9NYXRjaF9fX2NvcHlfX19fZG9jX18sCisiX19jb3B5X18oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9TUkVfU1JFX01BVENIX19fQ09QWV9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX2NvcHlfXyIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9NYXRjaF9fX2NvcHlfXywgTUVUSF9OT0FSR1MsIF9zcmVfU1JFX01hdGNoX19fY29weV9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9NYXRjaF9fX2NvcHlfX19pbXBsKE1hdGNoT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX01hdGNoX19fY29weV9fKE1hdGNoT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfc3JlX1NSRV9NYXRjaF9fX2NvcHlfX19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3NyZV9TUkVfTWF0Y2hfX19kZWVwY29weV9fX19kb2NfXywKKyJfX2RlZXBjb3B5X18oJHNlbGYsIC8sIG1lbW8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9TUkVfU1JFX01BVENIX19fREVFUENPUFlfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19kZWVwY29weV9fIiwgKFB5Q0Z1bmN0aW9uKV9zcmVfU1JFX01hdGNoX19fZGVlcGNvcHlfXywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zcmVfU1JFX01hdGNoX19fZGVlcGNvcHlfX19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfTWF0Y2hfX19kZWVwY29weV9fX2ltcGwoTWF0Y2hPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICptZW1vKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX01hdGNoX19fZGVlcGNvcHlfXyhNYXRjaE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJtZW1vIiwgTlVMTH07CisgICAgUHlPYmplY3QgKm1lbW87CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPOl9fZGVlcGNvcHlfXyIsIF9rZXl3b3JkcywKKyAgICAgICAgJm1lbW8pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NyZV9TUkVfTWF0Y2hfX19kZWVwY29weV9fX2ltcGwoc2VsZiwgbWVtbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zcmVfU1JFX1NjYW5uZXJfbWF0Y2hfX2RvY19fLAorIm1hdGNoKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1JFX1NSRV9TQ0FOTkVSX01BVENIX01FVEhPRERFRiAgICBcCisgICAgeyJtYXRjaCIsIChQeUNGdW5jdGlvbilfc3JlX1NSRV9TY2FubmVyX21hdGNoLCBNRVRIX05PQVJHUywgX3NyZV9TUkVfU2Nhbm5lcl9tYXRjaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfU2Nhbm5lcl9tYXRjaF9pbXBsKFNjYW5uZXJPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NyZV9TUkVfU2Nhbm5lcl9tYXRjaChTY2FubmVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfc3JlX1NSRV9TY2FubmVyX21hdGNoX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfc3JlX1NSRV9TY2FubmVyX3NlYXJjaF9fZG9jX18sCisic2VhcmNoKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1JFX1NSRV9TQ0FOTkVSX1NFQVJDSF9NRVRIT0RERUYgICAgXAorICAgIHsic2VhcmNoIiwgKFB5Q0Z1bmN0aW9uKV9zcmVfU1JFX1NjYW5uZXJfc2VhcmNoLCBNRVRIX05PQVJHUywgX3NyZV9TUkVfU2Nhbm5lcl9zZWFyY2hfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zcmVfU1JFX1NjYW5uZXJfc2VhcmNoX2ltcGwoU2Nhbm5lck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3JlX1NSRV9TY2FubmVyX3NlYXJjaChTY2FubmVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfc3JlX1NSRV9TY2FubmVyX3NlYXJjaF9pbXBsKHNlbGYpOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE0Y2U5ZTViNzQ4Y2U1MzIgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX3NzbC5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fc3NsLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTJlMzY1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX3NzbC5jLmgKQEAgLTAsMCArMSwxMTA1IEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX3NzbF9fU1NMU29ja2V0X2RvX2hhbmRzaGFrZV9fZG9jX18sCisiZG9faGFuZHNoYWtlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1NMX19TU0xTT0NLRVRfRE9fSEFORFNIQUtFX01FVEhPRERFRiAgICBcCisgICAgeyJkb19oYW5kc2hha2UiLCAoUHlDRnVuY3Rpb24pX3NzbF9fU1NMU29ja2V0X2RvX2hhbmRzaGFrZSwgTUVUSF9OT0FSR1MsIF9zc2xfX1NTTFNvY2tldF9kb19oYW5kc2hha2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9kb19oYW5kc2hha2VfaW1wbChQeVNTTFNvY2tldCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfZG9faGFuZHNoYWtlKFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfc3NsX19TU0xTb2NrZXRfZG9faGFuZHNoYWtlX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX190ZXN0X2RlY29kZV9jZXJ0X19kb2NfXywKKyJfdGVzdF9kZWNvZGVfY2VydCgkbW9kdWxlLCBwYXRoLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1NMX19URVNUX0RFQ09ERV9DRVJUX01FVEhPRERFRiAgICBcCisgICAgeyJfdGVzdF9kZWNvZGVfY2VydCIsIChQeUNGdW5jdGlvbilfc3NsX190ZXN0X2RlY29kZV9jZXJ0LCBNRVRIX08sIF9zc2xfX3Rlc3RfZGVjb2RlX2NlcnRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX3Rlc3RfZGVjb2RlX2NlcnRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcGF0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX190ZXN0X2RlY29kZV9jZXJ0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnBhdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOl90ZXN0X2RlY29kZV9jZXJ0IiwgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmcGF0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3NsX190ZXN0X2RlY29kZV9jZXJ0X2ltcGwobW9kdWxlLCBwYXRoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMU29ja2V0X3BlZXJfY2VydGlmaWNhdGVfX2RvY19fLAorInBlZXJfY2VydGlmaWNhdGUoJHNlbGYsIGRlcj1GYWxzZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgdGhlIGNlcnRpZmljYXRlIGZvciB0aGUgcGVlci5cbiIKKyJcbiIKKyJJZiBubyBjZXJ0aWZpY2F0ZSB3YXMgcHJvdmlkZWQsIHJldHVybnMgTm9uZS4gIElmIGEgY2VydGlmaWNhdGUgd2FzXG4iCisicHJvdmlkZWQsIGJ1dCBub3QgdmFsaWRhdGVkLCByZXR1cm5zIGFuIGVtcHR5IGRpY3Rpb25hcnkuICBPdGhlcndpc2VcbiIKKyJyZXR1cm5zIGEgZGljdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZWVyIGNlcnRpZmljYXRlLlxuIgorIlxuIgorIklmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBpcyBUcnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGVcbiIKKyJwZWVyIGNlcnRpZmljYXRlLCBvciBOb25lIGlmIG5vIGNlcnRpZmljYXRlIHdhcyBwcm92aWRlZC4gIFRoaXMgd2lsbFxuIgorInJldHVybiB0aGUgY2VydGlmaWNhdGUgZXZlbiBpZiBpdCB3YXNuXCd0IHZhbGlkYXRlZC4iKTsKKworI2RlZmluZSBfU1NMX19TU0xTT0NLRVRfUEVFUl9DRVJUSUZJQ0FURV9NRVRIT0RERUYgICAgXAorICAgIHsicGVlcl9jZXJ0aWZpY2F0ZSIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xTb2NrZXRfcGVlcl9jZXJ0aWZpY2F0ZSwgTUVUSF9WQVJBUkdTLCBfc3NsX19TU0xTb2NrZXRfcGVlcl9jZXJ0aWZpY2F0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3BlZXJfY2VydGlmaWNhdGVfaW1wbChQeVNTTFNvY2tldCAqc2VsZiwgaW50IGJpbmFyeV9tb2RlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9wZWVyX2NlcnRpZmljYXRlKFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgYmluYXJ5X21vZGUgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8cDpwZWVyX2NlcnRpZmljYXRlIiwKKyAgICAgICAgJmJpbmFyeV9tb2RlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zc2xfX1NTTFNvY2tldF9wZWVyX2NlcnRpZmljYXRlX2ltcGwoc2VsZiwgYmluYXJ5X21vZGUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xTb2NrZXRfc2hhcmVkX2NpcGhlcnNfX2RvY19fLAorInNoYXJlZF9jaXBoZXJzKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1NMX19TU0xTT0NLRVRfU0hBUkVEX0NJUEhFUlNfTUVUSE9EREVGICAgIFwKKyAgICB7InNoYXJlZF9jaXBoZXJzIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTFNvY2tldF9zaGFyZWRfY2lwaGVycywgTUVUSF9OT0FSR1MsIF9zc2xfX1NTTFNvY2tldF9zaGFyZWRfY2lwaGVyc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3NoYXJlZF9jaXBoZXJzX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3NoYXJlZF9jaXBoZXJzKFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfc3NsX19TU0xTb2NrZXRfc2hhcmVkX2NpcGhlcnNfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9zc2xfX1NTTFNvY2tldF9jaXBoZXJfX2RvY19fLAorImNpcGhlcigkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMU09DS0VUX0NJUEhFUl9NRVRIT0RERUYgICAgXAorICAgIHsiY2lwaGVyIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTFNvY2tldF9jaXBoZXIsIE1FVEhfTk9BUkdTLCBfc3NsX19TU0xTb2NrZXRfY2lwaGVyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfY2lwaGVyX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X2NpcGhlcihQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3NzbF9fU1NMU29ja2V0X2NpcGhlcl9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMU29ja2V0X3ZlcnNpb25fX2RvY19fLAorInZlcnNpb24oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9TU0xfX1NTTFNPQ0tFVF9WRVJTSU9OX01FVEhPRERFRiAgICBcCisgICAgeyJ2ZXJzaW9uIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTFNvY2tldF92ZXJzaW9uLCBNRVRIX05PQVJHUywgX3NzbF9fU1NMU29ja2V0X3ZlcnNpb25fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF92ZXJzaW9uX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3ZlcnNpb24oUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9zc2xfX1NTTFNvY2tldF92ZXJzaW9uX2ltcGwoc2VsZik7Cit9CisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfTlBOX05FR09USUFURUQpCisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xTb2NrZXRfc2VsZWN0ZWRfbnBuX3Byb3RvY29sX19kb2NfXywKKyJzZWxlY3RlZF9ucG5fcHJvdG9jb2woJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9TU0xfX1NTTFNPQ0tFVF9TRUxFQ1RFRF9OUE5fUFJPVE9DT0xfTUVUSE9EREVGICAgIFwKKyAgICB7InNlbGVjdGVkX25wbl9wcm90b2NvbCIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xTb2NrZXRfc2VsZWN0ZWRfbnBuX3Byb3RvY29sLCBNRVRIX05PQVJHUywgX3NzbF9fU1NMU29ja2V0X3NlbGVjdGVkX25wbl9wcm90b2NvbF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3NlbGVjdGVkX25wbl9wcm90b2NvbF9pbXBsKFB5U1NMU29ja2V0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9zZWxlY3RlZF9ucG5fcHJvdG9jb2woUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9zc2xfX1NTTFNvY2tldF9zZWxlY3RlZF9ucG5fcHJvdG9jb2xfaW1wbChzZWxmKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoT1BFTlNTTF9OUE5fTkVHT1RJQVRFRCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9BTFBOKQorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMU29ja2V0X3NlbGVjdGVkX2FscG5fcHJvdG9jb2xfX2RvY19fLAorInNlbGVjdGVkX2FscG5fcHJvdG9jb2woJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9TU0xfX1NTTFNPQ0tFVF9TRUxFQ1RFRF9BTFBOX1BST1RPQ09MX01FVEhPRERFRiAgICBcCisgICAgeyJzZWxlY3RlZF9hbHBuX3Byb3RvY29sIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTFNvY2tldF9zZWxlY3RlZF9hbHBuX3Byb3RvY29sLCBNRVRIX05PQVJHUywgX3NzbF9fU1NMU29ja2V0X3NlbGVjdGVkX2FscG5fcHJvdG9jb2xfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9zZWxlY3RlZF9hbHBuX3Byb3RvY29sX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3NlbGVjdGVkX2FscG5fcHJvdG9jb2woUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9zc2xfX1NTTFNvY2tldF9zZWxlY3RlZF9hbHBuX3Byb3RvY29sX2ltcGwoc2VsZik7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfQUxQTikgKi8KKworUHlEb2NfU1RSVkFSKF9zc2xfX1NTTFNvY2tldF9jb21wcmVzc2lvbl9fZG9jX18sCisiY29tcHJlc3Npb24oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9TU0xfX1NTTFNPQ0tFVF9DT01QUkVTU0lPTl9NRVRIT0RERUYgICAgXAorICAgIHsiY29tcHJlc3Npb24iLCAoUHlDRnVuY3Rpb24pX3NzbF9fU1NMU29ja2V0X2NvbXByZXNzaW9uLCBNRVRIX05PQVJHUywgX3NzbF9fU1NMU29ja2V0X2NvbXByZXNzaW9uX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfY29tcHJlc3Npb25faW1wbChQeVNTTFNvY2tldCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfY29tcHJlc3Npb24oUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9zc2xfX1NTTFNvY2tldF9jb21wcmVzc2lvbl9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMU29ja2V0X3dyaXRlX19kb2NfXywKKyJ3cml0ZSgkc2VsZiwgYiwgLylcbiIKKyItLVxuIgorIlxuIgorIldyaXRlcyB0aGUgYnl0ZXMtbGlrZSBvYmplY3QgYiBpbnRvIHRoZSBTU0wgb2JqZWN0LlxuIgorIlxuIgorIlJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiIpOworCisjZGVmaW5lIF9TU0xfX1NTTFNPQ0tFVF9XUklURV9NRVRIT0RERUYgICAgXAorICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pX3NzbF9fU1NMU29ja2V0X3dyaXRlLCBNRVRIX08sIF9zc2xfX1NTTFNvY2tldF93cml0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3dyaXRlX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYsIFB5X2J1ZmZlciAqYik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfd3JpdGUoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGIgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInkqOndyaXRlIiwgJmIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9fU1NMU29ja2V0X3dyaXRlX2ltcGwoc2VsZiwgJmIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGIgKi8KKyAgICBpZiAoYi5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMU29ja2V0X3BlbmRpbmdfX2RvY19fLAorInBlbmRpbmcoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxyZWFkeSBkZWNyeXB0ZWQgYnl0ZXMgYXZhaWxhYmxlIGZvciByZWFkLCBwZW5kaW5nIG9uIHRoZSBjb25uZWN0aW9uLiIpOworCisjZGVmaW5lIF9TU0xfX1NTTFNPQ0tFVF9QRU5ESU5HX01FVEhPRERFRiAgICBcCisgICAgeyJwZW5kaW5nIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTFNvY2tldF9wZW5kaW5nLCBNRVRIX05PQVJHUywgX3NzbF9fU1NMU29ja2V0X3BlbmRpbmdfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9wZW5kaW5nX2ltcGwoUHlTU0xTb2NrZXQgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3BlbmRpbmcoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9zc2xfX1NTTFNvY2tldF9wZW5kaW5nX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xTb2NrZXRfcmVhZF9fZG9jX18sCisicmVhZChzaXplLCBbYnVmZmVyXSlcbiIKKyJSZWFkIHVwIHRvIHNpemUgYnl0ZXMgZnJvbSB0aGUgU1NMIHNvY2tldC4iKTsKKworI2RlZmluZSBfU1NMX19TU0xTT0NLRVRfUkVBRF9NRVRIT0RERUYgICAgXAorICAgIHsicmVhZCIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xTb2NrZXRfcmVhZCwgTUVUSF9WQVJBUkdTLCBfc3NsX19TU0xTb2NrZXRfcmVhZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3JlYWRfaW1wbChQeVNTTFNvY2tldCAqc2VsZiwgaW50IGxlbiwgaW50IGdyb3VwX3JpZ2h0XzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqYnVmZmVyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9yZWFkKFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgbGVuOworICAgIGludCBncm91cF9yaWdodF8xID0gMDsKKyAgICBQeV9idWZmZXIgYnVmZmVyID0ge05VTEwsIE5VTEx9OworCisgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpyZWFkIiwgJmxlbikpCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXcqOnJlYWQiLCAmbGVuLCAmYnVmZmVyKSkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIl9zc2wuX1NTTFNvY2tldC5yZWFkIHJlcXVpcmVzIDEgdG8gMiBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9fU1NMU29ja2V0X3JlYWRfaW1wbChzZWxmLCBsZW4sIGdyb3VwX3JpZ2h0XzEsICZidWZmZXIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGJ1ZmZlciAqLworICAgIGlmIChidWZmZXIub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMU29ja2V0X3NodXRkb3duX19kb2NfXywKKyJzaHV0ZG93bigkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkRvZXMgdGhlIFNTTCBzaHV0ZG93biBoYW5kc2hha2Ugd2l0aCB0aGUgcmVtb3RlIGVuZC5cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMU09DS0VUX1NIVVRET1dOX01FVEhPRERFRiAgICBcCisgICAgeyJzaHV0ZG93biIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xTb2NrZXRfc2h1dGRvd24sIE1FVEhfTk9BUkdTLCBfc3NsX19TU0xTb2NrZXRfc2h1dGRvd25fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9zaHV0ZG93bl9pbXBsKFB5U1NMU29ja2V0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTFNvY2tldF9zaHV0ZG93bihQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3NzbF9fU1NMU29ja2V0X3NodXRkb3duX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xTb2NrZXRfdGxzX3VuaXF1ZV9jYl9fZG9jX18sCisidGxzX3VuaXF1ZV9jYigkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgdGhlIFwndGxzLXVuaXF1ZVwnIGNoYW5uZWwgYmluZGluZyBkYXRhLCBhcyBkZWZpbmVkIGJ5IFJGQyA1OTI5LlxuIgorIlxuIgorIklmIHRoZSBUTFMgaGFuZHNoYWtlIGlzIG5vdCB5ZXQgY29tcGxldGUsIE5vbmUgaXMgcmV0dXJuZWQuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMU09DS0VUX1RMU19VTklRVUVfQ0JfTUVUSE9EREVGICAgIFwKKyAgICB7InRsc191bmlxdWVfY2IiLCAoUHlDRnVuY3Rpb24pX3NzbF9fU1NMU29ja2V0X3Rsc191bmlxdWVfY2IsIE1FVEhfTk9BUkdTLCBfc3NsX19TU0xTb2NrZXRfdGxzX3VuaXF1ZV9jYl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMU29ja2V0X3Rsc191bmlxdWVfY2JfaW1wbChQeVNTTFNvY2tldCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xTb2NrZXRfdGxzX3VuaXF1ZV9jYihQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3NzbF9fU1NMU29ja2V0X3Rsc191bmlxdWVfY2JfaW1wbChzZWxmKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfaW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIGludCBwcm90b192ZXJzaW9uKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHQoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgcHJvdG9fdmVyc2lvbjsKKworICAgIGlmICgodHlwZSA9PSAmUHlTU0xDb250ZXh0X1R5cGUpICYmCisgICAgICAgICFfUHlBcmdfTm9LZXl3b3JkcygiX1NTTENvbnRleHQiLCBrd2FyZ3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOl9TU0xDb250ZXh0IiwKKyAgICAgICAgJnByb3RvX3ZlcnNpb24pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9fU1NMQ29udGV4dF9pbXBsKHR5cGUsIHByb3RvX3ZlcnNpb24pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xDb250ZXh0X3NldF9jaXBoZXJzX19kb2NfXywKKyJzZXRfY2lwaGVycygkc2VsZiwgY2lwaGVybGlzdCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMQ09OVEVYVF9TRVRfQ0lQSEVSU19NRVRIT0RERUYgICAgXAorICAgIHsic2V0X2NpcGhlcnMiLCAoUHlDRnVuY3Rpb24pX3NzbF9fU1NMQ29udGV4dF9zZXRfY2lwaGVycywgTUVUSF9PLCBfc3NsX19TU0xDb250ZXh0X3NldF9jaXBoZXJzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X3NldF9jaXBoZXJzX2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmLCBjb25zdCBjaGFyICpjaXBoZXJsaXN0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfc2V0X2NpcGhlcnMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmNpcGhlcmxpc3Q7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInM6c2V0X2NpcGhlcnMiLCAmY2lwaGVybGlzdCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3NsX19TU0xDb250ZXh0X3NldF9jaXBoZXJzX2ltcGwoc2VsZiwgY2lwaGVybGlzdCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zc2xfX1NTTENvbnRleHRfX3NldF9ucG5fcHJvdG9jb2xzX19kb2NfXywKKyJfc2V0X25wbl9wcm90b2NvbHMoJHNlbGYsIHByb3RvcywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMQ09OVEVYVF9fU0VUX05QTl9QUk9UT0NPTFNfTUVUSE9EREVGICAgIFwKKyAgICB7Il9zZXRfbnBuX3Byb3RvY29scyIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xDb250ZXh0X19zZXRfbnBuX3Byb3RvY29scywgTUVUSF9PLCBfc3NsX19TU0xDb250ZXh0X19zZXRfbnBuX3Byb3RvY29sc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMQ29udGV4dF9fc2V0X25wbl9wcm90b2NvbHNfaW1wbChQeVNTTENvbnRleHQgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqcHJvdG9zKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfX3NldF9ucG5fcHJvdG9jb2xzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgcHJvdG9zID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ5Kjpfc2V0X25wbl9wcm90b2NvbHMiLCAmcHJvdG9zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zc2xfX1NTTENvbnRleHRfX3NldF9ucG5fcHJvdG9jb2xzX2ltcGwoc2VsZiwgJnByb3Rvcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcHJvdG9zICovCisgICAgaWYgKHByb3Rvcy5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcHJvdG9zKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xDb250ZXh0X19zZXRfYWxwbl9wcm90b2NvbHNfX2RvY19fLAorIl9zZXRfYWxwbl9wcm90b2NvbHMoJHNlbGYsIHByb3RvcywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMQ09OVEVYVF9fU0VUX0FMUE5fUFJPVE9DT0xTX01FVEhPRERFRiAgICBcCisgICAgeyJfc2V0X2FscG5fcHJvdG9jb2xzIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTENvbnRleHRfX3NldF9hbHBuX3Byb3RvY29scywgTUVUSF9PLCBfc3NsX19TU0xDb250ZXh0X19zZXRfYWxwbl9wcm90b2NvbHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfX3NldF9hbHBuX3Byb3RvY29sc19pbXBsKFB5U1NMQ29udGV4dCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqcHJvdG9zKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfX3NldF9hbHBuX3Byb3RvY29scyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIHByb3RvcyA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAieSo6X3NldF9hbHBuX3Byb3RvY29scyIsICZwcm90b3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9fU1NMQ29udGV4dF9fc2V0X2FscG5fcHJvdG9jb2xzX2ltcGwoc2VsZiwgJnByb3Rvcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcHJvdG9zICovCisgICAgaWYgKHByb3Rvcy5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcHJvdG9zKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xDb250ZXh0X2xvYWRfY2VydF9jaGFpbl9fZG9jX18sCisibG9hZF9jZXJ0X2NoYWluKCRzZWxmLCAvLCBjZXJ0ZmlsZSwga2V5ZmlsZT1Ob25lLCBwYXNzd29yZD1Ob25lKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1NMX19TU0xDT05URVhUX0xPQURfQ0VSVF9DSEFJTl9NRVRIT0RERUYgICAgXAorICAgIHsibG9hZF9jZXJ0X2NoYWluIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTENvbnRleHRfbG9hZF9jZXJ0X2NoYWluLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NzbF9fU1NMQ29udGV4dF9sb2FkX2NlcnRfY2hhaW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfbG9hZF9jZXJ0X2NoYWluX2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqY2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICprZXlmaWxlLCBQeU9iamVjdCAqcGFzc3dvcmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMQ29udGV4dF9sb2FkX2NlcnRfY2hhaW4oUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImNlcnRmaWxlIiwgImtleWZpbGUiLCAicGFzc3dvcmQiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqY2VydGZpbGU7CisgICAgUHlPYmplY3QgKmtleWZpbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpwYXNzd29yZCA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfE9POmxvYWRfY2VydF9jaGFpbiIsIF9rZXl3b3JkcywKKyAgICAgICAgJmNlcnRmaWxlLCAma2V5ZmlsZSwgJnBhc3N3b3JkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zc2xfX1NTTENvbnRleHRfbG9hZF9jZXJ0X2NoYWluX2ltcGwoc2VsZiwgY2VydGZpbGUsIGtleWZpbGUsIHBhc3N3b3JkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMQ29udGV4dF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnNfX2RvY19fLAorImxvYWRfdmVyaWZ5X2xvY2F0aW9ucygkc2VsZiwgLywgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSlcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMQ09OVEVYVF9MT0FEX1ZFUklGWV9MT0NBVElPTlNfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWRfdmVyaWZ5X2xvY2F0aW9ucyIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xDb250ZXh0X2xvYWRfdmVyaWZ5X2xvY2F0aW9ucywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zc2xfX1NTTENvbnRleHRfbG9hZF92ZXJpZnlfbG9jYXRpb25zX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X2xvYWRfdmVyaWZ5X2xvY2F0aW9uc19pbXBsKFB5U1NMQ29udGV4dCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNhZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNhcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNhZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiY2FmaWxlIiwgImNhcGF0aCIsICJjYWRhdGEiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqY2FmaWxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY2FwYXRoID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY2FkYXRhID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPT086bG9hZF92ZXJpZnlfbG9jYXRpb25zIiwgX2tleXdvcmRzLAorICAgICAgICAmY2FmaWxlLCAmY2FwYXRoLCAmY2FkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zc2xfX1NTTENvbnRleHRfbG9hZF92ZXJpZnlfbG9jYXRpb25zX2ltcGwoc2VsZiwgY2FmaWxlLCBjYXBhdGgsIGNhZGF0YSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zc2xfX1NTTENvbnRleHRfbG9hZF9kaF9wYXJhbXNfX2RvY19fLAorImxvYWRfZGhfcGFyYW1zKCRzZWxmLCBwYXRoLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1NMX19TU0xDT05URVhUX0xPQURfREhfUEFSQU1TX01FVEhPRERFRiAgICBcCisgICAgeyJsb2FkX2RoX3BhcmFtcyIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xDb250ZXh0X2xvYWRfZGhfcGFyYW1zLCBNRVRIX08sIF9zc2xfX1NTTENvbnRleHRfbG9hZF9kaF9wYXJhbXNfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF9zc2xfX1NTTENvbnRleHRfX3dyYXBfc29ja2V0X19kb2NfXywKKyJfd3JhcF9zb2NrZXQoJHNlbGYsIC8sIHNvY2ssIHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSlcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMQ09OVEVYVF9fV1JBUF9TT0NLRVRfTUVUSE9EREVGICAgIFwKKyAgICB7Il93cmFwX3NvY2tldCIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xDb250ZXh0X193cmFwX3NvY2tldCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zc2xfX1NTTENvbnRleHRfX3dyYXBfc29ja2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X193cmFwX3NvY2tldF9pbXBsKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXJ2ZXJfc2lkZSwgUHlPYmplY3QgKmhvc3RuYW1lX29iaik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X193cmFwX3NvY2tldChQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic29jayIsICJzZXJ2ZXJfc2lkZSIsICJzZXJ2ZXJfaG9zdG5hbWUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc29jazsKKyAgICBpbnQgc2VydmVyX3NpZGU7CisgICAgUHlPYmplY3QgKmhvc3RuYW1lX29iaiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPIWl8Tzpfd3JhcF9zb2NrZXQiLCBfa2V5d29yZHMsCisgICAgICAgIFB5U29ja2V0TW9kdWxlLlNvY2tfVHlwZSwgJnNvY2ssICZzZXJ2ZXJfc2lkZSwgJmhvc3RuYW1lX29iaikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3NsX19TU0xDb250ZXh0X193cmFwX3NvY2tldF9pbXBsKHNlbGYsIHNvY2ssIHNlcnZlcl9zaWRlLCBob3N0bmFtZV9vYmopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xDb250ZXh0X193cmFwX2Jpb19fZG9jX18sCisiX3dyYXBfYmlvKCRzZWxmLCAvLCBpbmNvbWluZywgb3V0Z29pbmcsIHNlcnZlcl9zaWRlLFxuIgorIiAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSlcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1NTTF9fU1NMQ09OVEVYVF9fV1JBUF9CSU9fTUVUSE9EREVGICAgIFwKKyAgICB7Il93cmFwX2JpbyIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xDb250ZXh0X193cmFwX2JpbywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zc2xfX1NTTENvbnRleHRfX3dyYXBfYmlvX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X193cmFwX2Jpb19pbXBsKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlTU0xNZW1vcnlCSU8gKmluY29taW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVNTTE1lbW9yeUJJTyAqb3V0Z29pbmcsIGludCBzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmhvc3RuYW1lX29iaik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X193cmFwX2JpbyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiaW5jb21pbmciLCAib3V0Z29pbmciLCAic2VydmVyX3NpZGUiLCAic2VydmVyX2hvc3RuYW1lIiwgTlVMTH07CisgICAgUHlTU0xNZW1vcnlCSU8gKmluY29taW5nOworICAgIFB5U1NMTWVtb3J5QklPICpvdXRnb2luZzsKKyAgICBpbnQgc2VydmVyX3NpZGU7CisgICAgUHlPYmplY3QgKmhvc3RuYW1lX29iaiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPIU8haXxPOl93cmFwX2JpbyIsIF9rZXl3b3JkcywKKyAgICAgICAgJlB5U1NMTWVtb3J5QklPX1R5cGUsICZpbmNvbWluZywgJlB5U1NMTWVtb3J5QklPX1R5cGUsICZvdXRnb2luZywgJnNlcnZlcl9zaWRlLCAmaG9zdG5hbWVfb2JqKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zc2xfX1NTTENvbnRleHRfX3dyYXBfYmlvX2ltcGwoc2VsZiwgaW5jb21pbmcsIG91dGdvaW5nLCBzZXJ2ZXJfc2lkZSwgaG9zdG5hbWVfb2JqKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMQ29udGV4dF9zZXNzaW9uX3N0YXRzX19kb2NfXywKKyJzZXNzaW9uX3N0YXRzKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1NMX19TU0xDT05URVhUX1NFU1NJT05fU1RBVFNfTUVUSE9EREVGICAgIFwKKyAgICB7InNlc3Npb25fc3RhdHMiLCAoUHlDRnVuY3Rpb24pX3NzbF9fU1NMQ29udGV4dF9zZXNzaW9uX3N0YXRzLCBNRVRIX05PQVJHUywgX3NzbF9fU1NMQ29udGV4dF9zZXNzaW9uX3N0YXRzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X3Nlc3Npb25fc3RhdHNfaW1wbChQeVNTTENvbnRleHQgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMQ29udGV4dF9zZXNzaW9uX3N0YXRzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3NzbF9fU1NMQ29udGV4dF9zZXNzaW9uX3N0YXRzX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xDb250ZXh0X3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19fZG9jX18sCisic2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1NMX19TU0xDT05URVhUX1NFVF9ERUZBVUxUX1ZFUklGWV9QQVRIU19NRVRIT0RERUYgICAgXAorICAgIHsic2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTENvbnRleHRfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzLCBNRVRIX05PQVJHUywgX3NzbF9fU1NMQ29udGV4dF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3NzbF9fU1NMQ29udGV4dF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfaW1wbChzZWxmKTsKK30KKworI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fRUNESCkKKworUHlEb2NfU1RSVkFSKF9zc2xfX1NTTENvbnRleHRfc2V0X2VjZGhfY3VydmVfX2RvY19fLAorInNldF9lY2RoX2N1cnZlKCRzZWxmLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfU1NMX19TU0xDT05URVhUX1NFVF9FQ0RIX0NVUlZFX01FVEhPRERFRiAgICBcCisgICAgeyJzZXRfZWNkaF9jdXJ2ZSIsIChQeUNGdW5jdGlvbilfc3NsX19TU0xDb250ZXh0X3NldF9lY2RoX2N1cnZlLCBNRVRIX08sIF9zc2xfX1NTTENvbnRleHRfc2V0X2VjZGhfY3VydmVfX2RvY19ffSwKKworI2VuZGlmIC8qICFkZWZpbmVkKE9QRU5TU0xfTk9fRUNESCkgKi8KKworUHlEb2NfU1RSVkFSKF9zc2xfX1NTTENvbnRleHRfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tfX2RvY19fLAorInNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKCRzZWxmLCBtZXRob2QsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTZXQgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBzZXJ2ZXIgbmFtZSBpcyBwcm92aWRlZCBieSB0aGUgU1NML1RMUyBjbGllbnQgaW4gdGhlIFNOSSBleHRlbnNpb24uXG4iCisiXG4iCisiSWYgdGhlIGFyZ3VtZW50IGlzIE5vbmUgdGhlbiB0aGUgY2FsbGJhY2sgaXMgZGlzYWJsZWQuIFRoZSBtZXRob2QgaXMgY2FsbGVkXG4iCisid2l0aCB0aGUgU1NMU29ja2V0LCB0aGUgc2VydmVyIG5hbWUgYXMgYSBzdHJpbmcsIGFuZCB0aGUgU1NMQ29udGV4dCBvYmplY3QuXG4iCisiU2VlIFJGQyA2MDY2IGZvciBkZXRhaWxzIG9mIHRoZSBTTkkgZXh0ZW5zaW9uLiIpOworCisjZGVmaW5lIF9TU0xfX1NTTENPTlRFWFRfU0VUX1NFUlZFUk5BTUVfQ0FMTEJBQ0tfTUVUSE9EREVGICAgIFwKKyAgICB7InNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTENvbnRleHRfc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssIE1FVEhfTywgX3NzbF9fU1NMQ29udGV4dF9zZXRfc2VydmVybmFtZV9jYWxsYmFja19fZG9jX199LAorCitQeURvY19TVFJWQVIoX3NzbF9fU1NMQ29udGV4dF9jZXJ0X3N0b3JlX3N0YXRzX19kb2NfXywKKyJjZXJ0X3N0b3JlX3N0YXRzKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBxdWFudGl0aWVzIG9mIGxvYWRlZCBYLjUwOSBjZXJ0aWZpY2F0ZXMuXG4iCisiXG4iCisiWC41MDkgY2VydGlmaWNhdGVzIHdpdGggYSBDQSBleHRlbnNpb24gYW5kIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHNcbiIKKyJpbnNpZGUgdGhlIGNvbnRleHRcJ3MgY2VydCBzdG9yZS5cbiIKKyJcbiIKKyJOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW5cJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmVcbiIKKyJiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4iKTsKKworI2RlZmluZSBfU1NMX19TU0xDT05URVhUX0NFUlRfU1RPUkVfU1RBVFNfTUVUSE9EREVGICAgIFwKKyAgICB7ImNlcnRfc3RvcmVfc3RhdHMiLCAoUHlDRnVuY3Rpb24pX3NzbF9fU1NMQ29udGV4dF9jZXJ0X3N0b3JlX3N0YXRzLCBNRVRIX05PQVJHUywgX3NzbF9fU1NMQ29udGV4dF9jZXJ0X3N0b3JlX3N0YXRzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX19TU0xDb250ZXh0X2NlcnRfc3RvcmVfc3RhdHNfaW1wbChQeVNTTENvbnRleHQgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMQ29udGV4dF9jZXJ0X3N0b3JlX3N0YXRzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3NzbF9fU1NMQ29udGV4dF9jZXJ0X3N0b3JlX3N0YXRzX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX19TU0xDb250ZXh0X2dldF9jYV9jZXJ0c19fZG9jX18sCisiZ2V0X2NhX2NlcnRzKCRzZWxmLCAvLCBiaW5hcnlfZm9ybT1GYWxzZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBsaXN0IG9mIGRpY3RzIHdpdGggaW5mb3JtYXRpb24gb2YgbG9hZGVkIENBIGNlcnRzLlxuIgorIlxuIgorIklmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBpcyBUcnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0FcbiIKKyJjZXJ0aWZpY2F0ZS5cbiIKKyJcbiIKKyJOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW5cJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmVcbiIKKyJiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4iKTsKKworI2RlZmluZSBfU1NMX19TU0xDT05URVhUX0dFVF9DQV9DRVJUU19NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0X2NhX2NlcnRzIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfX1NTTENvbnRleHRfZ2V0X2NhX2NlcnRzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NzbF9fU1NMQ29udGV4dF9nZXRfY2FfY2VydHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfX1NTTENvbnRleHRfZ2V0X2NhX2NlcnRzX2ltcGwoUHlTU0xDb250ZXh0ICpzZWxmLCBpbnQgYmluYXJ5X2Zvcm0pOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9fU1NMQ29udGV4dF9nZXRfY2FfY2VydHMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImJpbmFyeV9mb3JtIiwgTlVMTH07CisgICAgaW50IGJpbmFyeV9mb3JtID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxwOmdldF9jYV9jZXJ0cyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmJpbmFyeV9mb3JtKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zc2xfX1NTTENvbnRleHRfZ2V0X2NhX2NlcnRzX2ltcGwoc2VsZiwgYmluYXJ5X2Zvcm0pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX01lbW9yeUJJT19pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX01lbW9yeUJJTyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworCisgICAgaWYgKCh0eXBlID09ICZQeVNTTE1lbW9yeUJJT19UeXBlKSAmJgorICAgICAgICAhX1B5QXJnX05vUG9zaXRpb25hbCgiTWVtb3J5QklPIiwgYXJncykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoKHR5cGUgPT0gJlB5U1NMTWVtb3J5QklPX1R5cGUpICYmCisgICAgICAgICFfUHlBcmdfTm9LZXl3b3JkcygiTWVtb3J5QklPIiwga3dhcmdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zc2xfTWVtb3J5QklPX2ltcGwodHlwZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zc2xfTWVtb3J5QklPX3JlYWRfX2RvY19fLAorInJlYWQoJHNlbGYsIHNpemU9LTEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIHVwIHRvIHNpemUgYnl0ZXMgZnJvbSB0aGUgbWVtb3J5IEJJTy5cbiIKKyJcbiIKKyJJZiBzaXplIGlzIG5vdCBzcGVjaWZpZWQsIHJlYWQgdGhlIGVudGlyZSBidWZmZXIuXG4iCisiSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhbiBlbXB0eSBieXRlcyBpbnN0YW5jZSwgdGhpcyBtZWFucyBlaXRoZXJcbiIKKyJFT0Ygb3IgdGhhdCBubyBkYXRhIGlzIGF2YWlsYWJsZS4gVXNlIHRoZSBcImVvZlwiIHByb3BlcnR5IHRvXG4iCisiZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvLiIpOworCisjZGVmaW5lIF9TU0xfTUVNT1JZQklPX1JFQURfTUVUSE9EREVGICAgIFwKKyAgICB7InJlYWQiLCAoUHlDRnVuY3Rpb24pX3NzbF9NZW1vcnlCSU9fcmVhZCwgTUVUSF9WQVJBUkdTLCBfc3NsX01lbW9yeUJJT19yZWFkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX01lbW9yeUJJT19yZWFkX2ltcGwoUHlTU0xNZW1vcnlCSU8gKnNlbGYsIGludCBsZW4pOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9NZW1vcnlCSU9fcmVhZChQeVNTTE1lbW9yeUJJTyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGxlbiA9IC0xOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpyZWFkIiwKKyAgICAgICAgJmxlbikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3NsX01lbW9yeUJJT19yZWFkX2ltcGwoc2VsZiwgbGVuKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NzbF9NZW1vcnlCSU9fd3JpdGVfX2RvY19fLAorIndyaXRlKCRzZWxmLCBiLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV3JpdGVzIHRoZSBieXRlcyBiIGludG8gdGhlIG1lbW9yeSBCSU8uXG4iCisiXG4iCisiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uIik7CisKKyNkZWZpbmUgX1NTTF9NRU1PUllCSU9fV1JJVEVfTUVUSE9EREVGICAgIFwKKyAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfTWVtb3J5QklPX3dyaXRlLCBNRVRIX08sIF9zc2xfTWVtb3J5QklPX3dyaXRlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX01lbW9yeUJJT193cml0ZV9pbXBsKFB5U1NMTWVtb3J5QklPICpzZWxmLCBQeV9idWZmZXIgKmIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9NZW1vcnlCSU9fd3JpdGUoUHlTU0xNZW1vcnlCSU8gKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGIgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInkqOndyaXRlIiwgJmIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9NZW1vcnlCSU9fd3JpdGVfaW1wbChzZWxmLCAmYik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgYiAqLworICAgIGlmIChiLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZiKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX01lbW9yeUJJT193cml0ZV9lb2ZfX2RvY19fLAorIndyaXRlX2VvZigkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIldyaXRlIGFuIEVPRiBtYXJrZXIgdG8gdGhlIG1lbW9yeSBCSU8uXG4iCisiXG4iCisiV2hlbiBhbGwgZGF0YSBoYXMgYmVlbiByZWFkLCB0aGUgXCJlb2ZcIiBwcm9wZXJ0eSB3aWxsIGJlIFRydWUuIik7CisKKyNkZWZpbmUgX1NTTF9NRU1PUllCSU9fV1JJVEVfRU9GX01FVEhPRERFRiAgICBcCisgICAgeyJ3cml0ZV9lb2YiLCAoUHlDRnVuY3Rpb24pX3NzbF9NZW1vcnlCSU9fd3JpdGVfZW9mLCBNRVRIX05PQVJHUywgX3NzbF9NZW1vcnlCSU9fd3JpdGVfZW9mX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX01lbW9yeUJJT193cml0ZV9lb2ZfaW1wbChQeVNTTE1lbW9yeUJJTyAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX01lbW9yeUJJT193cml0ZV9lb2YoUHlTU0xNZW1vcnlCSU8gKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9zc2xfTWVtb3J5QklPX3dyaXRlX2VvZl9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3NzbF9SQU5EX2FkZF9fZG9jX18sCisiUkFORF9hZGQoJG1vZHVsZSwgc3RyaW5nLCBlbnRyb3B5LCAvKVxuIgorIi0tXG4iCisiXG4iCisiTWl4IHN0cmluZyBpbnRvIHRoZSBPcGVuU1NMIFBSTkcgc3RhdGUuXG4iCisiXG4iCisiZW50cm9weSAoYSBmbG9hdCkgaXMgYSBsb3dlciBib3VuZCBvbiB0aGUgZW50cm9weSBjb250YWluZWQgaW5cbiIKKyJzdHJpbmcuICBTZWUgUkZDIDE3NTAuIik7CisKKyNkZWZpbmUgX1NTTF9SQU5EX0FERF9NRVRIT0RERUYgICAgXAorICAgIHsiUkFORF9hZGQiLCAoUHlDRnVuY3Rpb24pX3NzbF9SQU5EX2FkZCwgTUVUSF9WQVJBUkdTLCBfc3NsX1JBTkRfYWRkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX1JBTkRfYWRkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICp2aWV3LCBkb3VibGUgZW50cm9weSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX1JBTkRfYWRkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciB2aWV3ID0ge05VTEwsIE5VTEx9OworICAgIGRvdWJsZSBlbnRyb3B5OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKmQ6UkFORF9hZGQiLAorICAgICAgICAmdmlldywgJmVudHJvcHkpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9SQU5EX2FkZF9pbXBsKG1vZHVsZSwgJnZpZXcsIGVudHJvcHkpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHZpZXcgKi8KKyAgICBpZiAodmlldy5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NzbF9SQU5EX2J5dGVzX19kb2NfXywKKyJSQU5EX2J5dGVzKCRtb2R1bGUsIG4sIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJHZW5lcmF0ZSBuIGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZyBwc2V1ZG8tcmFuZG9tIGJ5dGVzLiIpOworCisjZGVmaW5lIF9TU0xfUkFORF9CWVRFU19NRVRIT0RERUYgICAgXAorICAgIHsiUkFORF9ieXRlcyIsIChQeUNGdW5jdGlvbilfc3NsX1JBTkRfYnl0ZXMsIE1FVEhfTywgX3NzbF9SQU5EX2J5dGVzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX1JBTkRfYnl0ZXNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgbik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX1JBTkRfYnl0ZXMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgbjsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaTpSQU5EX2J5dGVzIiwgJm4pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9SQU5EX2J5dGVzX2ltcGwobW9kdWxlLCBuKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3NzbF9SQU5EX3BzZXVkb19ieXRlc19fZG9jX18sCisiUkFORF9wc2V1ZG9fYnl0ZXMoJG1vZHVsZSwgbiwgLylcbiIKKyItLVxuIgorIlxuIgorIkdlbmVyYXRlIG4gcHNldWRvLXJhbmRvbSBieXRlcy5cbiIKKyJcbiIKKyJSZXR1cm4gYSBwYWlyIChieXRlcywgaXNfY3J5cHRvZ3JhcGhpYykuICBpc19jcnlwdG9ncmFwaGljIGlzIFRydWVcbiIKKyJpZiB0aGUgYnl0ZXMgZ2VuZXJhdGVkIGFyZSBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcuIik7CisKKyNkZWZpbmUgX1NTTF9SQU5EX1BTRVVET19CWVRFU19NRVRIT0RERUYgICAgXAorICAgIHsiUkFORF9wc2V1ZG9fYnl0ZXMiLCAoUHlDRnVuY3Rpb24pX3NzbF9SQU5EX3BzZXVkb19ieXRlcywgTUVUSF9PLCBfc3NsX1JBTkRfcHNldWRvX2J5dGVzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX1JBTkRfcHNldWRvX2J5dGVzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG4pOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9SQU5EX3BzZXVkb19ieXRlcyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBuOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOlJBTkRfcHNldWRvX2J5dGVzIiwgJm4pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9SQU5EX3BzZXVkb19ieXRlc19pbXBsKG1vZHVsZSwgbik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zc2xfUkFORF9zdGF0dXNfX2RvY19fLAorIlJBTkRfc3RhdHVzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIDEgaWYgdGhlIE9wZW5TU0wgUFJORyBoYXMgYmVlbiBzZWVkZWQgd2l0aCBlbm91Z2ggZGF0YSBhbmQgMCBpZiBub3QuXG4iCisiXG4iCisiSXQgaXMgbmVjZXNzYXJ5IHRvIHNlZWQgdGhlIFBSTkcgd2l0aCBSQU5EX2FkZCgpIG9uIHNvbWUgcGxhdGZvcm1zIGJlZm9yZVxuIgorInVzaW5nIHRoZSBzc2woKSBmdW5jdGlvbi4iKTsKKworI2RlZmluZSBfU1NMX1JBTkRfU1RBVFVTX01FVEhPRERFRiAgICBcCisgICAgeyJSQU5EX3N0YXR1cyIsIChQeUNGdW5jdGlvbilfc3NsX1JBTkRfc3RhdHVzLCBNRVRIX05PQVJHUywgX3NzbF9SQU5EX3N0YXR1c19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9SQU5EX3N0YXR1c19pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9SQU5EX3N0YXR1cyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfc3NsX1JBTkRfc3RhdHVzX2ltcGwobW9kdWxlKTsKK30KKworI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fRUdEKQorCitQeURvY19TVFJWQVIoX3NzbF9SQU5EX2VnZF9fZG9jX18sCisiUkFORF9lZ2QoJG1vZHVsZSwgcGF0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlF1ZXJpZXMgdGhlIGVudHJvcHkgZ2F0aGVyIGRhZW1vbiAoRUdEKSBvbiB0aGUgc29ja2V0IG5hbWVkIGJ5IFwncGF0aFwnLlxuIgorIlxuIgorIlJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBSYWlzZXMgU1NMRXJyb3IgaWYgY29ubmVjdGlvbiB0byBFR0RcbiIKKyJmYWlscyBvciBpZiBpdCBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBkYXRhIHRvIHNlZWQgUFJORy4iKTsKKworI2RlZmluZSBfU1NMX1JBTkRfRUdEX01FVEhPRERFRiAgICBcCisgICAgeyJSQU5EX2VnZCIsIChQeUNGdW5jdGlvbilfc3NsX1JBTkRfZWdkLCBNRVRIX08sIF9zc2xfUkFORF9lZ2RfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfUkFORF9lZ2RfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcGF0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX1JBTkRfZWdkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnBhdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOlJBTkRfZWdkIiwgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmcGF0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc3NsX1JBTkRfZWdkX2ltcGwobW9kdWxlLCBwYXRoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogIWRlZmluZWQoT1BFTlNTTF9OT19FR0QpICovCisKK1B5RG9jX1NUUlZBUihfc3NsX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19fZG9jX18sCisiZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gc2VhcmNoIHBhdGhzIGFuZCBlbnZpcm9ubWVudCB2YXJzIHRoYXQgYXJlIHVzZWQgYnkgU1NMQ29udGV4dFwncyBzZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSB0byBsb2FkIGRlZmF1bHQgQ0FzLlxuIgorIlxuIgorIlRoZSB2YWx1ZXMgYXJlIFwnY2VydF9maWxlX2VudlwnLCBcJ2NlcnRfZmlsZVwnLCBcJ2NlcnRfZGlyX2VudlwnLCBcJ2NlcnRfZGlyXCcuIik7CisKKyNkZWZpbmUgX1NTTF9HRVRfREVGQVVMVF9WRVJJRllfUEFUSFNfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyIsIChQeUNGdW5jdGlvbilfc3NsX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRocywgTUVUSF9OT0FSR1MsIF9zc2xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3NzbF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfaW1wbChtb2R1bGUpOworfQorCitQeURvY19TVFJWQVIoX3NzbF90eHQyb2JqX19kb2NfXywKKyJ0eHQyb2JqKCRtb2R1bGUsIC8sIHR4dCwgbmFtZT1GYWxzZSlcbiIKKyItLVxuIgorIlxuIgorIkxvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNULlxuIgorIlxuIgorIkJ5IGRlZmF1bHQgb2JqZWN0cyBhcmUgbG9va2VkIHVwIGJ5IE9JRC4gV2l0aCBuYW1lPVRydWUgc2hvcnQgYW5kXG4iCisibG9uZyBuYW1lIGFyZSBhbHNvIG1hdGNoZWQuIik7CisKKyNkZWZpbmUgX1NTTF9UWFQyT0JKX01FVEhPRERFRiAgICBcCisgICAgeyJ0eHQyb2JqIiwgKFB5Q0Z1bmN0aW9uKV9zc2xfdHh0Mm9iaiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zc2xfdHh0Mm9ial9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF90eHQyb2JqX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqdHh0LCBpbnQgbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX3R4dDJvYmooUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJ0eHQiLCAibmFtZSIsIE5VTEx9OworICAgIGNvbnN0IGNoYXIgKnR4dDsKKyAgICBpbnQgbmFtZSA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfHA6dHh0Mm9iaiIsIF9rZXl3b3JkcywKKyAgICAgICAgJnR4dCwgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF90eHQyb2JqX2ltcGwobW9kdWxlLCB0eHQsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfc3NsX25pZDJvYmpfX2RvY19fLAorIm5pZDJvYmooJG1vZHVsZSwgbmlkLCAvKVxuIgorIi0tXG4iCisiXG4iCisiTG9va3VwIE5JRCwgc2hvcnQgbmFtZSwgbG9uZyBuYW1lIGFuZCBPSUQgb2YgYW4gQVNOMV9PQkpFQ1QgYnkgTklELiIpOworCisjZGVmaW5lIF9TU0xfTklEMk9CSl9NRVRIT0RERUYgICAgXAorICAgIHsibmlkMm9iaiIsIChQeUNGdW5jdGlvbilfc3NsX25pZDJvYmosIE1FVEhfTywgX3NzbF9uaWQyb2JqX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc3NsX25pZDJvYmpfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgbmlkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfbmlkMm9iaihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBuaWQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImk6bmlkMm9iaiIsICZuaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9uaWQyb2JqX2ltcGwobW9kdWxlLCBuaWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorCitQeURvY19TVFJWQVIoX3NzbF9lbnVtX2NlcnRpZmljYXRlc19fZG9jX18sCisiZW51bV9jZXJ0aWZpY2F0ZXMoJG1vZHVsZSwgLywgc3RvcmVfbmFtZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3NcJyBjZXJ0IHN0b3JlLlxuIgorIlxuIgorInN0b3JlX25hbWUgbWF5IGJlIG9uZSBvZiBcJ0NBXCcsIFwnUk9PVFwnIG9yIFwnTVlcJy4gIFRoZSBzeXN0ZW0gbWF5IHByb3ZpZGVcbiIKKyJtb3JlIGNlcnQgc3RvcmFnZXMsIHRvby4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoYnl0ZXMsXG4iCisiZW5jb2RpbmdfdHlwZSwgdHJ1c3QpIHR1cGxlcy4gIFRoZSBlbmNvZGluZ190eXBlIGZsYWcgY2FuIGJlIGludGVycHJldGVkXG4iCisid2l0aCBYNTA5X0FTTl9FTkNPRElORyBvciBQS0NTXzdfQVNOX0VOQ09ESU5HLiBUaGUgdHJ1c3Qgc2V0dGluZyBpcyBlaXRoZXJcbiIKKyJhIHNldCBvZiBPSURzIG9yIHRoZSBib29sZWFuIFRydWUuIik7CisKKyNkZWZpbmUgX1NTTF9FTlVNX0NFUlRJRklDQVRFU19NRVRIT0RERUYgICAgXAorICAgIHsiZW51bV9jZXJ0aWZpY2F0ZXMiLCAoUHlDRnVuY3Rpb24pX3NzbF9lbnVtX2NlcnRpZmljYXRlcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zc2xfZW51bV9jZXJ0aWZpY2F0ZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfZW51bV9jZXJ0aWZpY2F0ZXNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICpzdG9yZV9uYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfZW51bV9jZXJ0aWZpY2F0ZXMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY29uc3QgY2hhciAqc3RvcmVfbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInM6ZW51bV9jZXJ0aWZpY2F0ZXMiLCBfa2V5d29yZHMsCisgICAgICAgICZzdG9yZV9uYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zc2xfZW51bV9jZXJ0aWZpY2F0ZXNfaW1wbChtb2R1bGUsIHN0b3JlX25hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9NU0NfVkVSKSAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKworUHlEb2NfU1RSVkFSKF9zc2xfZW51bV9jcmxzX19kb2NfXywKKyJlbnVtX2NybHMoJG1vZHVsZSwgLywgc3RvcmVfbmFtZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzXCcgY2VydCBzdG9yZS5cbiIKKyJcbiIKKyJzdG9yZV9uYW1lIG1heSBiZSBvbmUgb2YgXCdDQVwnLCBcJ1JPT1RcJyBvciBcJ01ZXCcuICBUaGUgc3lzdGVtIG1heSBwcm92aWRlXG4iCisibW9yZSBjZXJ0IHN0b3JhZ2VzLCB0b28uICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGJ5dGVzLFxuIgorImVuY29kaW5nX3R5cGUpIHR1cGxlcy4gIFRoZSBlbmNvZGluZ190eXBlIGZsYWcgY2FuIGJlIGludGVycHJldGVkIHdpdGhcbiIKKyJYNTA5X0FTTl9FTkNPRElORyBvciBQS0NTXzdfQVNOX0VOQ09ESU5HLiIpOworCisjZGVmaW5lIF9TU0xfRU5VTV9DUkxTX01FVEhPRERFRiAgICBcCisgICAgeyJlbnVtX2NybHMiLCAoUHlDRnVuY3Rpb24pX3NzbF9lbnVtX2NybHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfc3NsX2VudW1fY3Jsc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NzbF9lbnVtX2NybHNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICpzdG9yZV9uYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zc2xfZW51bV9jcmxzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RvcmVfbmFtZSIsIE5VTEx9OworICAgIGNvbnN0IGNoYXIgKnN0b3JlX25hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzOmVudW1fY3JscyIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0b3JlX25hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NzbF9lbnVtX2NybHNfaW1wbChtb2R1bGUsIHN0b3JlX25hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9NU0NfVkVSKSAqLworCisjaWZuZGVmIF9TU0xfX1NTTFNPQ0tFVF9TRUxFQ1RFRF9OUE5fUFJPVE9DT0xfTUVUSE9EREVGCisgICAgI2RlZmluZSBfU1NMX19TU0xTT0NLRVRfU0VMRUNURURfTlBOX1BST1RPQ09MX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKF9TU0xfX1NTTFNPQ0tFVF9TRUxFQ1RFRF9OUE5fUFJPVE9DT0xfTUVUSE9EREVGKSAqLworCisjaWZuZGVmIF9TU0xfX1NTTFNPQ0tFVF9TRUxFQ1RFRF9BTFBOX1BST1RPQ09MX01FVEhPRERFRgorICAgICNkZWZpbmUgX1NTTF9fU1NMU09DS0VUX1NFTEVDVEVEX0FMUE5fUFJPVE9DT0xfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoX1NTTF9fU1NMU09DS0VUX1NFTEVDVEVEX0FMUE5fUFJPVE9DT0xfTUVUSE9EREVGKSAqLworCisjaWZuZGVmIF9TU0xfX1NTTENPTlRFWFRfU0VUX0VDREhfQ1VSVkVfTUVUSE9EREVGCisgICAgI2RlZmluZSBfU1NMX19TU0xDT05URVhUX1NFVF9FQ0RIX0NVUlZFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKF9TU0xfX1NTTENPTlRFWFRfU0VUX0VDREhfQ1VSVkVfTUVUSE9EREVGKSAqLworCisjaWZuZGVmIF9TU0xfUkFORF9FR0RfTUVUSE9EREVGCisgICAgI2RlZmluZSBfU1NMX1JBTkRfRUdEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKF9TU0xfUkFORF9FR0RfTUVUSE9EREVGKSAqLworCisjaWZuZGVmIF9TU0xfRU5VTV9DRVJUSUZJQ0FURVNfTUVUSE9EREVGCisgICAgI2RlZmluZSBfU1NMX0VOVU1fQ0VSVElGSUNBVEVTX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKF9TU0xfRU5VTV9DRVJUSUZJQ0FURVNfTUVUSE9EREVGKSAqLworCisjaWZuZGVmIF9TU0xfRU5VTV9DUkxTX01FVEhPRERFRgorICAgICNkZWZpbmUgX1NTTF9FTlVNX0NSTFNfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoX1NTTF9FTlVNX0NSTFNfTUVUSE9EREVGKSAqLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZmYjEwNTk0ZDgzNTFkYzUgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX3RraW50ZXIuYy5oIGIvTW9kdWxlcy9jbGluaWMvX3RraW50ZXIuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YWYwODMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9fdGtpbnRlci5jLmgKQEAgLTAsMCArMSw2MjQgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfdGtpbnRlcl90a2FwcF9ldmFsX19kb2NfXywKKyJldmFsKCRzZWxmLCBzY3JpcHQsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLQVBQX0VWQUxfTUVUSE9EREVGICAgIFwKKyAgICB7ImV2YWwiLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfdGthcHBfZXZhbCwgTUVUSF9PLCBfdGtpbnRlcl90a2FwcF9ldmFsX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9ldmFsX2ltcGwoVGthcHBPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKnNjcmlwdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9ldmFsKFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnNjcmlwdDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiczpldmFsIiwgJnNjcmlwdCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfdGtpbnRlcl90a2FwcF9ldmFsX2ltcGwoc2VsZiwgc2NyaXB0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfZXZhbGZpbGVfX2RvY19fLAorImV2YWxmaWxlKCRzZWxmLCBmaWxlTmFtZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfRVZBTEZJTEVfTUVUSE9EREVGICAgIFwKKyAgICB7ImV2YWxmaWxlIiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX2V2YWxmaWxlLCBNRVRIX08sIF90a2ludGVyX3RrYXBwX2V2YWxmaWxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9ldmFsZmlsZV9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpmaWxlTmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9ldmFsZmlsZShUa2FwcE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpmaWxlTmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiczpldmFsZmlsZSIsICZmaWxlTmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfdGtpbnRlcl90a2FwcF9ldmFsZmlsZV9pbXBsKHNlbGYsIGZpbGVOYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfcmVjb3JkX19kb2NfXywKKyJyZWNvcmQoJHNlbGYsIHNjcmlwdCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfUkVDT1JEX01FVEhPRERFRiAgICBcCisgICAgeyJyZWNvcmQiLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfdGthcHBfcmVjb3JkLCBNRVRIX08sIF90a2ludGVyX3RrYXBwX3JlY29yZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfcmVjb3JkX2ltcGwoVGthcHBPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKnNjcmlwdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9yZWNvcmQoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqc2NyaXB0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJzOnJlY29yZCIsICZzY3JpcHQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3RraW50ZXJfdGthcHBfcmVjb3JkX2ltcGwoc2VsZiwgc2NyaXB0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfYWRkZXJyaW5mb19fZG9jX18sCisiYWRkZXJyaW5mbygkc2VsZiwgbXNnLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfVEtJTlRFUl9US0FQUF9BRERFUlJJTkZPX01FVEhPRERFRiAgICBcCisgICAgeyJhZGRlcnJpbmZvIiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX2FkZGVycmluZm8sIE1FVEhfTywgX3RraW50ZXJfdGthcHBfYWRkZXJyaW5mb19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfYWRkZXJyaW5mb19pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICptc2cpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfYWRkZXJyaW5mbyhUa2FwcE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICptc2c7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInM6YWRkZXJyaW5mbyIsICZtc2cpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3RraW50ZXJfdGthcHBfYWRkZXJyaW5mb19pbXBsKHNlbGYsIG1zZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF90a2ludGVyX3RrYXBwX2dldGludF9fZG9jX18sCisiZ2V0aW50KCRzZWxmLCBhcmcsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLQVBQX0dFVElOVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0aW50IiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX2dldGludCwgTUVUSF9PLCBfdGtpbnRlcl90a2FwcF9nZXRpbnRfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF90a2ludGVyX3RrYXBwX2dldGRvdWJsZV9fZG9jX18sCisiZ2V0ZG91YmxlKCRzZWxmLCBhcmcsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLQVBQX0dFVERPVUJMRV9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0ZG91YmxlIiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX2dldGRvdWJsZSwgTUVUSF9PLCBfdGtpbnRlcl90a2FwcF9nZXRkb3VibGVfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF90a2ludGVyX3RrYXBwX2dldGJvb2xlYW5fX2RvY19fLAorImdldGJvb2xlYW4oJHNlbGYsIGFyZywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfR0VUQk9PTEVBTl9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0Ym9vbGVhbiIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a2FwcF9nZXRib29sZWFuLCBNRVRIX08sIF90a2ludGVyX3RrYXBwX2dldGJvb2xlYW5fX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF90a2ludGVyX3RrYXBwX2V4cHJzdHJpbmdfX2RvY19fLAorImV4cHJzdHJpbmcoJHNlbGYsIHMsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLQVBQX0VYUFJTVFJJTkdfTUVUSE9EREVGICAgIFwKKyAgICB7ImV4cHJzdHJpbmciLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfdGthcHBfZXhwcnN0cmluZywgTUVUSF9PLCBfdGtpbnRlcl90a2FwcF9leHByc3RyaW5nX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9leHByc3RyaW5nX2ltcGwoVGthcHBPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfZXhwcnN0cmluZyhUa2FwcE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJzOmV4cHJzdHJpbmciLCAmcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfdGtpbnRlcl90a2FwcF9leHByc3RyaW5nX2ltcGwoc2VsZiwgcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF90a2ludGVyX3RrYXBwX2V4cHJsb25nX19kb2NfXywKKyJleHBybG9uZygkc2VsZiwgcywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfRVhQUkxPTkdfTUVUSE9EREVGICAgIFwKKyAgICB7ImV4cHJsb25nIiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX2V4cHJsb25nLCBNRVRIX08sIF90a2ludGVyX3RrYXBwX2V4cHJsb25nX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9leHBybG9uZ19pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2V4cHJsb25nKFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInM6ZXhwcmxvbmciLCAmcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfdGtpbnRlcl90a2FwcF9leHBybG9uZ19pbXBsKHNlbGYsIHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfdGtpbnRlcl90a2FwcF9leHByZG91YmxlX19kb2NfXywKKyJleHByZG91YmxlKCRzZWxmLCBzLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfVEtJTlRFUl9US0FQUF9FWFBSRE9VQkxFX01FVEhPRERFRiAgICBcCisgICAgeyJleHByZG91YmxlIiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX2V4cHJkb3VibGUsIE1FVEhfTywgX3RraW50ZXJfdGthcHBfZXhwcmRvdWJsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfZXhwcmRvdWJsZV9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2V4cHJkb3VibGUoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqczsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiczpleHByZG91YmxlIiwgJnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3RraW50ZXJfdGthcHBfZXhwcmRvdWJsZV9pbXBsKHNlbGYsIHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfdGtpbnRlcl90a2FwcF9leHByYm9vbGVhbl9fZG9jX18sCisiZXhwcmJvb2xlYW4oJHNlbGYsIHMsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLQVBQX0VYUFJCT09MRUFOX01FVEhPRERFRiAgICBcCisgICAgeyJleHByYm9vbGVhbiIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a2FwcF9leHByYm9vbGVhbiwgTUVUSF9PLCBfdGtpbnRlcl90a2FwcF9leHByYm9vbGVhbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfZXhwcmJvb2xlYW5faW1wbChUa2FwcE9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9leHByYm9vbGVhbihUa2FwcE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJzOmV4cHJib29sZWFuIiwgJnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3RraW50ZXJfdGthcHBfZXhwcmJvb2xlYW5faW1wbChzZWxmLCBzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfc3BsaXRsaXN0X19kb2NfXywKKyJzcGxpdGxpc3QoJHNlbGYsIGFyZywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfU1BMSVRMSVNUX01FVEhPRERFRiAgICBcCisgICAgeyJzcGxpdGxpc3QiLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfdGthcHBfc3BsaXRsaXN0LCBNRVRIX08sIF90a2ludGVyX3RrYXBwX3NwbGl0bGlzdF9fZG9jX199LAorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfc3BsaXRfX2RvY19fLAorInNwbGl0KCRzZWxmLCBhcmcsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLQVBQX1NQTElUX01FVEhPRERFRiAgICBcCisgICAgeyJzcGxpdCIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a2FwcF9zcGxpdCwgTUVUSF9PLCBfdGtpbnRlcl90a2FwcF9zcGxpdF9fZG9jX199LAorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfY3JlYXRlY29tbWFuZF9fZG9jX18sCisiY3JlYXRlY29tbWFuZCgkc2VsZiwgbmFtZSwgZnVuYywgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfQ1JFQVRFQ09NTUFORF9NRVRIT0RERUYgICAgXAorICAgIHsiY3JlYXRlY29tbWFuZCIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a2FwcF9jcmVhdGVjb21tYW5kLCBNRVRIX1ZBUkFSR1MsIF90a2ludGVyX3RrYXBwX2NyZWF0ZWNvbW1hbmRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2NyZWF0ZWNvbW1hbmRfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9jcmVhdGVjb21tYW5kKFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIFB5T2JqZWN0ICpmdW5jOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzTzpjcmVhdGVjb21tYW5kIiwKKyAgICAgICAgJm5hbWUsICZmdW5jKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF90a2ludGVyX3RrYXBwX2NyZWF0ZWNvbW1hbmRfaW1wbChzZWxmLCBuYW1lLCBmdW5jKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfZGVsZXRlY29tbWFuZF9fZG9jX18sCisiZGVsZXRlY29tbWFuZCgkc2VsZiwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfREVMRVRFQ09NTUFORF9NRVRIT0RERUYgICAgXAorICAgIHsiZGVsZXRlY29tbWFuZCIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a2FwcF9kZWxldGVjb21tYW5kLCBNRVRIX08sIF90a2ludGVyX3RrYXBwX2RlbGV0ZWNvbW1hbmRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2RlbGV0ZWNvbW1hbmRfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9kZWxldGVjb21tYW5kKFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInM6ZGVsZXRlY29tbWFuZCIsICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF90a2ludGVyX3RrYXBwX2RlbGV0ZWNvbW1hbmRfaW1wbChzZWxmLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX0NSRUFURUZJTEVIQU5ETEVSKQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfY3JlYXRlZmlsZWhhbmRsZXJfX2RvY19fLAorImNyZWF0ZWZpbGVoYW5kbGVyKCRzZWxmLCBmaWxlLCBtYXNrLCBmdW5jLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfVEtJTlRFUl9US0FQUF9DUkVBVEVGSUxFSEFORExFUl9NRVRIT0RERUYgICAgXAorICAgIHsiY3JlYXRlZmlsZWhhbmRsZXIiLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfdGthcHBfY3JlYXRlZmlsZWhhbmRsZXIsIE1FVEhfVkFSQVJHUywgX3RraW50ZXJfdGthcHBfY3JlYXRlZmlsZWhhbmRsZXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2NyZWF0ZWZpbGVoYW5kbGVyX2ltcGwoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWFzaywgUHlPYmplY3QgKmZ1bmMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfY3JlYXRlZmlsZWhhbmRsZXIoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlOworICAgIGludCBtYXNrOworICAgIFB5T2JqZWN0ICpmdW5jOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaU86Y3JlYXRlZmlsZWhhbmRsZXIiLAorICAgICAgICAmZmlsZSwgJm1hc2ssICZmdW5jKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF90a2ludGVyX3RrYXBwX2NyZWF0ZWZpbGVoYW5kbGVyX2ltcGwoc2VsZiwgZmlsZSwgbWFzaywgZnVuYyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9DUkVBVEVGSUxFSEFORExFUikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9DUkVBVEVGSUxFSEFORExFUikKKworUHlEb2NfU1RSVkFSKF90a2ludGVyX3RrYXBwX2RlbGV0ZWZpbGVoYW5kbGVyX19kb2NfXywKKyJkZWxldGVmaWxlaGFuZGxlcigkc2VsZiwgZmlsZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfREVMRVRFRklMRUhBTkRMRVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlbGV0ZWZpbGVoYW5kbGVyIiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX2RlbGV0ZWZpbGVoYW5kbGVyLCBNRVRIX08sIF90a2ludGVyX3RrYXBwX2RlbGV0ZWZpbGVoYW5kbGVyX19kb2NfX30sCisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfQ1JFQVRFRklMRUhBTkRMRVIpICovCisKK1B5RG9jX1NUUlZBUihfdGtpbnRlcl90a3RpbWVydG9rZW5fZGVsZXRldGltZXJoYW5kbGVyX19kb2NfXywKKyJkZWxldGV0aW1lcmhhbmRsZXIoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLVElNRVJUT0tFTl9ERUxFVEVUSU1FUkhBTkRMRVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlbGV0ZXRpbWVyaGFuZGxlciIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a3RpbWVydG9rZW5fZGVsZXRldGltZXJoYW5kbGVyLCBNRVRIX05PQVJHUywgX3RraW50ZXJfdGt0aW1lcnRva2VuX2RlbGV0ZXRpbWVyaGFuZGxlcl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGt0aW1lcnRva2VuX2RlbGV0ZXRpbWVyaGFuZGxlcl9pbXBsKFRrdHRPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGt0aW1lcnRva2VuX2RlbGV0ZXRpbWVyaGFuZGxlcihUa3R0T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfdGtpbnRlcl90a3RpbWVydG9rZW5fZGVsZXRldGltZXJoYW5kbGVyX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfdGtpbnRlcl90a2FwcF9jcmVhdGV0aW1lcmhhbmRsZXJfX2RvY19fLAorImNyZWF0ZXRpbWVyaGFuZGxlcigkc2VsZiwgbWlsbGlzZWNvbmRzLCBmdW5jLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfVEtJTlRFUl9US0FQUF9DUkVBVEVUSU1FUkhBTkRMRVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImNyZWF0ZXRpbWVyaGFuZGxlciIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a2FwcF9jcmVhdGV0aW1lcmhhbmRsZXIsIE1FVEhfVkFSQVJHUywgX3RraW50ZXJfdGthcHBfY3JlYXRldGltZXJoYW5kbGVyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9jcmVhdGV0aW1lcmhhbmRsZXJfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgaW50IG1pbGxpc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2NyZWF0ZXRpbWVyaGFuZGxlcihUa2FwcE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IG1pbGxpc2Vjb25kczsKKyAgICBQeU9iamVjdCAqZnVuYzsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU86Y3JlYXRldGltZXJoYW5kbGVyIiwKKyAgICAgICAgJm1pbGxpc2Vjb25kcywgJmZ1bmMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3RraW50ZXJfdGthcHBfY3JlYXRldGltZXJoYW5kbGVyX2ltcGwoc2VsZiwgbWlsbGlzZWNvbmRzLCBmdW5jKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfbWFpbmxvb3BfX2RvY19fLAorIm1haW5sb29wKCRzZWxmLCB0aHJlc2hvbGQ9MCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfTUFJTkxPT1BfTUVUSE9EREVGICAgIFwKKyAgICB7Im1haW5sb29wIiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX21haW5sb29wLCBNRVRIX1ZBUkFSR1MsIF90a2ludGVyX3RrYXBwX21haW5sb29wX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9tYWlubG9vcF9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmLCBpbnQgdGhyZXNob2xkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX21haW5sb29wKFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgdGhyZXNob2xkID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6bWFpbmxvb3AiLAorICAgICAgICAmdGhyZXNob2xkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF90a2ludGVyX3RrYXBwX21haW5sb29wX2ltcGwoc2VsZiwgdGhyZXNob2xkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfZG9vbmVldmVudF9fZG9jX18sCisiZG9vbmVldmVudCgkc2VsZiwgZmxhZ3M9MCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfRE9PTkVFVkVOVF9NRVRIT0RERUYgICAgXAorICAgIHsiZG9vbmVldmVudCIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a2FwcF9kb29uZWV2ZW50LCBNRVRIX1ZBUkFSR1MsIF90a2ludGVyX3RrYXBwX2Rvb25lZXZlbnRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2Rvb25lZXZlbnRfaW1wbChUa2FwcE9iamVjdCAqc2VsZiwgaW50IGZsYWdzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2Rvb25lZXZlbnQoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmbGFncyA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmRvb25lZXZlbnQiLAorICAgICAgICAmZmxhZ3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3RraW50ZXJfdGthcHBfZG9vbmVldmVudF9pbXBsKHNlbGYsIGZsYWdzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfcXVpdF9fZG9jX18sCisicXVpdCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfUVVJVF9NRVRIT0RERUYgICAgXAorICAgIHsicXVpdCIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl90a2FwcF9xdWl0LCBNRVRIX05PQVJHUywgX3RraW50ZXJfdGthcHBfcXVpdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfcXVpdF9pbXBsKFRrYXBwT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX3F1aXQoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF90a2ludGVyX3RrYXBwX3F1aXRfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF90a2ludGVyX3RrYXBwX2ludGVycGFkZHJfX2RvY19fLAorImludGVycGFkZHIoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLQVBQX0lOVEVSUEFERFJfTUVUSE9EREVGICAgIFwKKyAgICB7ImludGVycGFkZHIiLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfdGthcHBfaW50ZXJwYWRkciwgTUVUSF9OT0FSR1MsIF90a2ludGVyX3RrYXBwX2ludGVycGFkZHJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK190a2ludGVyX3RrYXBwX2ludGVycGFkZHJfaW1wbChUa2FwcE9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9pbnRlcnBhZGRyKFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfdGtpbnRlcl90a2FwcF9pbnRlcnBhZGRyX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfdGtpbnRlcl90a2FwcF9sb2FkdGtfX2RvY19fLAorImxvYWR0aygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfVEtBUFBfTE9BRFRLX01FVEhPRERFRiAgICBcCisgICAgeyJsb2FkdGsiLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfdGthcHBfbG9hZHRrLCBNRVRIX05PQVJHUywgX3RraW50ZXJfdGthcHBfbG9hZHRrX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9sb2FkdGtfaW1wbChUa2FwcE9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl90a2FwcF9sb2FkdGsoVGthcHBPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF90a2ludGVyX3RrYXBwX2xvYWR0a19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfdGthcHBfd2lsbGRpc3BhdGNoX19kb2NfXywKKyJ3aWxsZGlzcGF0Y2goJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9US0lOVEVSX1RLQVBQX1dJTExESVNQQVRDSF9NRVRIT0RERUYgICAgXAorICAgIHsid2lsbGRpc3BhdGNoIiwgKFB5Q0Z1bmN0aW9uKV90a2ludGVyX3RrYXBwX3dpbGxkaXNwYXRjaCwgTUVUSF9OT0FSR1MsIF90a2ludGVyX3RrYXBwX3dpbGxkaXNwYXRjaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfd2lsbGRpc3BhdGNoX2ltcGwoVGthcHBPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfdGthcHBfd2lsbGRpc3BhdGNoKFRrYXBwT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfdGtpbnRlcl90a2FwcF93aWxsZGlzcGF0Y2hfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF90a2ludGVyX19mbGF0dGVuX19kb2NfXywKKyJfZmxhdHRlbigkbW9kdWxlLCBpdGVtLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfVEtJTlRFUl9fRkxBVFRFTl9NRVRIT0RERUYgICAgXAorICAgIHsiX2ZsYXR0ZW4iLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfX2ZsYXR0ZW4sIE1FVEhfTywgX3RraW50ZXJfX2ZsYXR0ZW5fX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF90a2ludGVyX2NyZWF0ZV9fZG9jX18sCisiY3JlYXRlKCRtb2R1bGUsIHNjcmVlbk5hbWU9Tm9uZSwgYmFzZU5hbWU9Tm9uZSwgY2xhc3NOYW1lPVwnVGtcJyxcbiIKKyIgICAgICAgaW50ZXJhY3RpdmU9RmFsc2UsIHdhbnRvYmplY3RzPUZhbHNlLCB3YW50VGs9VHJ1ZSwgc3luYz1GYWxzZSxcbiIKKyIgICAgICAgdXNlPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJcbiIKKyJcbiIKKyIgIHdhbnRUa1xuIgorIiAgICBpZiBmYWxzZSwgdGhlbiBUa19Jbml0KCkgZG9lc25cJ3QgZ2V0IGNhbGxlZFxuIgorIiAgc3luY1xuIgorIiAgICBpZiB0cnVlLCB0aGVuIHBhc3MgLXN5bmMgdG8gd2lzaFxuIgorIiAgdXNlXG4iCisiICAgIGlmIG5vdCBOb25lLCB0aGVuIHBhc3MgLXVzZSB0byB3aXNoIik7CisKKyNkZWZpbmUgX1RLSU5URVJfQ1JFQVRFX01FVEhPRERFRiAgICBcCisgICAgeyJjcmVhdGUiLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfY3JlYXRlLCBNRVRIX1ZBUkFSR1MsIF90a2ludGVyX2NyZWF0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfY3JlYXRlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqc2NyZWVuTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJhc2VOYW1lLCBjb25zdCBjaGFyICpjbGFzc05hbWUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgaW50ZXJhY3RpdmUsIGludCB3YW50b2JqZWN0cywgaW50IHdhbnRUaywgaW50IHN5bmMsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2UpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfY3JlYXRlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnNjcmVlbk5hbWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmJhc2VOYW1lID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpjbGFzc05hbWUgPSAiVGsiOworICAgIGludCBpbnRlcmFjdGl2ZSA9IDA7CisgICAgaW50IHdhbnRvYmplY3RzID0gMDsKKyAgICBpbnQgd2FudFRrID0gMTsKKyAgICBpbnQgc3luYyA9IDA7CisgICAgY29uc3QgY2hhciAqdXNlID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHpzc2lpaWl6OmNyZWF0ZSIsCisgICAgICAgICZzY3JlZW5OYW1lLCAmYmFzZU5hbWUsICZjbGFzc05hbWUsICZpbnRlcmFjdGl2ZSwgJndhbnRvYmplY3RzLCAmd2FudFRrLCAmc3luYywgJnVzZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfdGtpbnRlcl9jcmVhdGVfaW1wbChtb2R1bGUsIHNjcmVlbk5hbWUsIGJhc2VOYW1lLCBjbGFzc05hbWUsIGludGVyYWN0aXZlLCB3YW50b2JqZWN0cywgd2FudFRrLCBzeW5jLCB1c2UpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfdGtpbnRlcl9zZXRidXN5d2FpdGludGVydmFsX19kb2NfXywKKyJzZXRidXN5d2FpdGludGVydmFsKCRtb2R1bGUsIG5ld192YWwsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTZXQgdGhlIGJ1c3ktd2FpdCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBzdWNjZXNzaXZlIGNhbGxzIHRvIFRjbF9Eb09uZUV2ZW50IGluIGEgdGhyZWFkZWQgUHl0aG9uIGludGVycHJldGVyLlxuIgorIlxuIgorIkl0IHNob3VsZCBiZSBzZXQgdG8gYSBkaXZpc29yIG9mIHRoZSBtYXhpbXVtIHRpbWUgYmV0d2VlbiBmcmFtZXMgaW4gYW4gYW5pbWF0aW9uLiIpOworCisjZGVmaW5lIF9US0lOVEVSX1NFVEJVU1lXQUlUSU5URVJWQUxfTUVUSE9EREVGICAgIFwKKyAgICB7InNldGJ1c3l3YWl0aW50ZXJ2YWwiLCAoUHlDRnVuY3Rpb24pX3RraW50ZXJfc2V0YnVzeXdhaXRpbnRlcnZhbCwgTUVUSF9PLCBfdGtpbnRlcl9zZXRidXN5d2FpdGludGVydmFsX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl9zZXRidXN5d2FpdGludGVydmFsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG5ld192YWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3RraW50ZXJfc2V0YnVzeXdhaXRpbnRlcnZhbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBuZXdfdmFsOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOnNldGJ1c3l3YWl0aW50ZXJ2YWwiLCAmbmV3X3ZhbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfdGtpbnRlcl9zZXRidXN5d2FpdGludGVydmFsX2ltcGwobW9kdWxlLCBuZXdfdmFsKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3RraW50ZXJfZ2V0YnVzeXdhaXRpbnRlcnZhbF9fZG9jX18sCisiZ2V0YnVzeXdhaXRpbnRlcnZhbCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBjdXJyZW50IGJ1c3ktd2FpdCBpbnRlcnZhbCBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gVGNsX0RvT25lRXZlbnQgaW4gYSB0aHJlYWRlZCBQeXRob24gaW50ZXJwcmV0ZXIuIik7CisKKyNkZWZpbmUgX1RLSU5URVJfR0VUQlVTWVdBSVRJTlRFUlZBTF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0YnVzeXdhaXRpbnRlcnZhbCIsIChQeUNGdW5jdGlvbilfdGtpbnRlcl9nZXRidXN5d2FpdGludGVydmFsLCBNRVRIX05PQVJHUywgX3RraW50ZXJfZ2V0YnVzeXdhaXRpbnRlcnZhbF9fZG9jX199LAorCitzdGF0aWMgaW50CitfdGtpbnRlcl9nZXRidXN5d2FpdGludGVydmFsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfdGtpbnRlcl9nZXRidXN5d2FpdGludGVydmFsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3RraW50ZXJfZ2V0YnVzeXdhaXRpbnRlcnZhbF9pbXBsKG1vZHVsZSk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZm5kZWYgX1RLSU5URVJfVEtBUFBfQ1JFQVRFRklMRUhBTkRMRVJfTUVUSE9EREVGCisgICAgI2RlZmluZSBfVEtJTlRFUl9US0FQUF9DUkVBVEVGSUxFSEFORExFUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfVEtJTlRFUl9US0FQUF9DUkVBVEVGSUxFSEFORExFUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgX1RLSU5URVJfVEtBUFBfREVMRVRFRklMRUhBTkRMRVJfTUVUSE9EREVGCisgICAgI2RlZmluZSBfVEtJTlRFUl9US0FQUF9ERUxFVEVGSUxFSEFORExFUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfVEtJTlRFUl9US0FQUF9ERUxFVEVGSUxFSEFORExFUl9NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjkwNTdjOGJmMjg4NjMzZCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fd2Vha3JlZi5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fd2Vha3JlZi5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgzYjMzZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL193ZWFrcmVmLmMuaApAQCAtMCwwICsxLDMxIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfXywKKyJnZXR3ZWFrcmVmY291bnQoJG1vZHVsZSwgb2JqZWN0LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzIHRvIFwnb2JqZWN0XCcuIik7CisKKyNkZWZpbmUgX1dFQUtSRUZfR0VUV0VBS1JFRkNPVU5UX01FVEhPRERFRiAgICBcCisgICAgeyJnZXR3ZWFrcmVmY291bnQiLCAoUHlDRnVuY3Rpb24pX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50LCBNRVRIX08sIF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX199LAorCitzdGF0aWMgUHlfc3NpemVfdAorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCkKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwobW9kdWxlLCBvYmplY3QpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ5MDg2Yzg1NzZkNDY5MzMgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX3dpbmFwaS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fd2luYXBpLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzM4ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX3dpbmFwaS5jLmgKQEAgLTAsMCArMSw4NTEgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfd2luYXBpX092ZXJsYXBwZWRfR2V0T3ZlcmxhcHBlZFJlc3VsdF9fZG9jX18sCisiR2V0T3ZlcmxhcHBlZFJlc3VsdCgkc2VsZiwgd2FpdCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9PVkVSTEFQUEVEX0dFVE9WRVJMQVBQRURSRVNVTFRfTUVUSE9EREVGICAgIFwKKyAgICB7IkdldE92ZXJsYXBwZWRSZXN1bHQiLCAoUHlDRnVuY3Rpb24pX3dpbmFwaV9PdmVybGFwcGVkX0dldE92ZXJsYXBwZWRSZXN1bHQsIE1FVEhfTywgX3dpbmFwaV9PdmVybGFwcGVkX0dldE92ZXJsYXBwZWRSZXN1bHRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfT3ZlcmxhcHBlZF9HZXRPdmVybGFwcGVkUmVzdWx0X2ltcGwoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgaW50IHdhaXQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3dpbmFwaV9PdmVybGFwcGVkX0dldE92ZXJsYXBwZWRSZXN1bHQoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgd2FpdDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAicDpHZXRPdmVybGFwcGVkUmVzdWx0IiwgJndhaXQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3dpbmFwaV9PdmVybGFwcGVkX0dldE92ZXJsYXBwZWRSZXN1bHRfaW1wbChzZWxmLCB3YWl0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9PdmVybGFwcGVkX2dldGJ1ZmZlcl9fZG9jX18sCisiZ2V0YnVmZmVyKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfV0lOQVBJX09WRVJMQVBQRURfR0VUQlVGRkVSX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRidWZmZXIiLCAoUHlDRnVuY3Rpb24pX3dpbmFwaV9PdmVybGFwcGVkX2dldGJ1ZmZlciwgTUVUSF9OT0FSR1MsIF93aW5hcGlfT3ZlcmxhcHBlZF9nZXRidWZmZXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfT3ZlcmxhcHBlZF9nZXRidWZmZXJfaW1wbChPdmVybGFwcGVkT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfT3ZlcmxhcHBlZF9nZXRidWZmZXIoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3dpbmFwaV9PdmVybGFwcGVkX2dldGJ1ZmZlcl9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9PdmVybGFwcGVkX2NhbmNlbF9fZG9jX18sCisiY2FuY2VsKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfV0lOQVBJX09WRVJMQVBQRURfQ0FOQ0VMX01FVEhPRERFRiAgICBcCisgICAgeyJjYW5jZWwiLCAoUHlDRnVuY3Rpb24pX3dpbmFwaV9PdmVybGFwcGVkX2NhbmNlbCwgTUVUSF9OT0FSR1MsIF93aW5hcGlfT3ZlcmxhcHBlZF9jYW5jZWxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfT3ZlcmxhcHBlZF9jYW5jZWxfaW1wbChPdmVybGFwcGVkT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfT3ZlcmxhcHBlZF9jYW5jZWwoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3dpbmFwaV9PdmVybGFwcGVkX2NhbmNlbF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9DbG9zZUhhbmRsZV9fZG9jX18sCisiQ2xvc2VIYW5kbGUoJG1vZHVsZSwgaGFuZGxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2xvc2UgaGFuZGxlLiIpOworCisjZGVmaW5lIF9XSU5BUElfQ0xPU0VIQU5ETEVfTUVUSE9EREVGICAgIFwKKyAgICB7IkNsb3NlSGFuZGxlIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfQ2xvc2VIYW5kbGUsIE1FVEhfTywgX3dpbmFwaV9DbG9zZUhhbmRsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3dpbmFwaV9DbG9zZUhhbmRsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBoYW5kbGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3dpbmFwaV9DbG9zZUhhbmRsZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIEhBTkRMRSBoYW5kbGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIiIgRl9IQU5ETEUgIjpDbG9zZUhhbmRsZSIsICZoYW5kbGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3dpbmFwaV9DbG9zZUhhbmRsZV9pbXBsKG1vZHVsZSwgaGFuZGxlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9Db25uZWN0TmFtZWRQaXBlX19kb2NfXywKKyJDb25uZWN0TmFtZWRQaXBlKCRtb2R1bGUsIC8sIGhhbmRsZSwgb3ZlcmxhcHBlZD1GYWxzZSlcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9DT05ORUNUTkFNRURQSVBFX01FVEhPRERFRiAgICBcCisgICAgeyJDb25uZWN0TmFtZWRQaXBlIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfQ29ubmVjdE5hbWVkUGlwZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF93aW5hcGlfQ29ubmVjdE5hbWVkUGlwZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3dpbmFwaV9Db25uZWN0TmFtZWRQaXBlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEFORExFIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2Vfb3ZlcmxhcHBlZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0Nvbm5lY3ROYW1lZFBpcGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJoYW5kbGUiLCAib3ZlcmxhcHBlZCIsIE5VTEx9OworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgaW50IHVzZV9vdmVybGFwcGVkID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIiIgRl9IQU5ETEUgInxpOkNvbm5lY3ROYW1lZFBpcGUiLCBfa2V5d29yZHMsCisgICAgICAgICZoYW5kbGUsICZ1c2Vfb3ZlcmxhcHBlZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfd2luYXBpX0Nvbm5lY3ROYW1lZFBpcGVfaW1wbChtb2R1bGUsIGhhbmRsZSwgdXNlX292ZXJsYXBwZWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfd2luYXBpX0NyZWF0ZUZpbGVfX2RvY19fLAorIkNyZWF0ZUZpbGUoJG1vZHVsZSwgZmlsZV9uYW1lLCBkZXNpcmVkX2FjY2Vzcywgc2hhcmVfbW9kZSxcbiIKKyIgICAgICAgICAgIHNlY3VyaXR5X2F0dHJpYnV0ZXMsIGNyZWF0aW9uX2Rpc3Bvc2l0aW9uLFxuIgorIiAgICAgICAgICAgZmxhZ3NfYW5kX2F0dHJpYnV0ZXMsIHRlbXBsYXRlX2ZpbGUsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9XSU5BUElfQ1JFQVRFRklMRV9NRVRIT0RERUYgICAgXAorICAgIHsiQ3JlYXRlRmlsZSIsIChQeUNGdW5jdGlvbilfd2luYXBpX0NyZWF0ZUZpbGUsIE1FVEhfVkFSQVJHUywgX3dpbmFwaV9DcmVhdGVGaWxlX19kb2NfX30sCisKK3N0YXRpYyBIQU5ETEUKK193aW5hcGlfQ3JlYXRlRmlsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIExQQ1RTVFIgZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZGVzaXJlZF9hY2Nlc3MsIERXT1JEIHNoYXJlX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgc2VjdXJpdHlfYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGNyZWF0aW9uX2Rpc3Bvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZmxhZ3NfYW5kX2F0dHJpYnV0ZXMsIEhBTkRMRSB0ZW1wbGF0ZV9maWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfQ3JlYXRlRmlsZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBMUENUU1RSIGZpbGVfbmFtZTsKKyAgICBEV09SRCBkZXNpcmVkX2FjY2VzczsKKyAgICBEV09SRCBzaGFyZV9tb2RlOworICAgIExQU0VDVVJJVFlfQVRUUklCVVRFUyBzZWN1cml0eV9hdHRyaWJ1dGVzOworICAgIERXT1JEIGNyZWF0aW9uX2Rpc3Bvc2l0aW9uOworICAgIERXT1JEIGZsYWdzX2FuZF9hdHRyaWJ1dGVzOworICAgIEhBTkRMRSB0ZW1wbGF0ZV9maWxlOworICAgIEhBTkRMRSBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJza2siIEZfUE9JTlRFUiAia2siIEZfSEFORExFICI6Q3JlYXRlRmlsZSIsCisgICAgICAgICZmaWxlX25hbWUsICZkZXNpcmVkX2FjY2VzcywgJnNoYXJlX21vZGUsICZzZWN1cml0eV9hdHRyaWJ1dGVzLCAmY3JlYXRpb25fZGlzcG9zaXRpb24sICZmbGFnc19hbmRfYXR0cmlidXRlcywgJnRlbXBsYXRlX2ZpbGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IF93aW5hcGlfQ3JlYXRlRmlsZV9pbXBsKG1vZHVsZSwgZmlsZV9uYW1lLCBkZXNpcmVkX2FjY2Vzcywgc2hhcmVfbW9kZSwgc2VjdXJpdHlfYXR0cmlidXRlcywgY3JlYXRpb25fZGlzcG9zaXRpb24sIGZsYWdzX2FuZF9hdHRyaWJ1dGVzLCB0ZW1wbGF0ZV9maWxlKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoX3JldHVybl92YWx1ZSA9PSBOVUxMKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICByZXR1cm5fdmFsdWUgPSBIQU5ETEVfVE9fUFlOVU0oX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfQ3JlYXRlSnVuY3Rpb25fX2RvY19fLAorIkNyZWF0ZUp1bmN0aW9uKCRtb2R1bGUsIHNyY19wYXRoLCBkc3RfcGF0aCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9DUkVBVEVKVU5DVElPTl9NRVRIT0RERUYgICAgXAorICAgIHsiQ3JlYXRlSnVuY3Rpb24iLCAoUHlDRnVuY3Rpb24pX3dpbmFwaV9DcmVhdGVKdW5jdGlvbiwgTUVUSF9WQVJBUkdTLCBfd2luYXBpX0NyZWF0ZUp1bmN0aW9uX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0NyZWF0ZUp1bmN0aW9uX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgTFBXU1RSIHNyY19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQV1NUUiBkc3RfcGF0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0NyZWF0ZUp1bmN0aW9uKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIExQV1NUUiBzcmNfcGF0aDsKKyAgICBMUFdTVFIgZHN0X3BhdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInV1OkNyZWF0ZUp1bmN0aW9uIiwKKyAgICAgICAgJnNyY19wYXRoLCAmZHN0X3BhdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3dpbmFwaV9DcmVhdGVKdW5jdGlvbl9pbXBsKG1vZHVsZSwgc3JjX3BhdGgsIGRzdF9wYXRoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9DcmVhdGVOYW1lZFBpcGVfX2RvY19fLAorIkNyZWF0ZU5hbWVkUGlwZSgkbW9kdWxlLCBuYW1lLCBvcGVuX21vZGUsIHBpcGVfbW9kZSwgbWF4X2luc3RhbmNlcyxcbiIKKyIgICAgICAgICAgICAgICAgb3V0X2J1ZmZlcl9zaXplLCBpbl9idWZmZXJfc2l6ZSwgZGVmYXVsdF90aW1lb3V0LFxuIgorIiAgICAgICAgICAgICAgICBzZWN1cml0eV9hdHRyaWJ1dGVzLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfV0lOQVBJX0NSRUFURU5BTUVEUElQRV9NRVRIT0RERUYgICAgXAorICAgIHsiQ3JlYXRlTmFtZWRQaXBlIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfQ3JlYXRlTmFtZWRQaXBlLCBNRVRIX1ZBUkFSR1MsIF93aW5hcGlfQ3JlYXRlTmFtZWRQaXBlX19kb2NfX30sCisKK3N0YXRpYyBIQU5ETEUKK193aW5hcGlfQ3JlYXRlTmFtZWRQaXBlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgTFBDVFNUUiBuYW1lLCBEV09SRCBvcGVuX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHBpcGVfbW9kZSwgRFdPUkQgbWF4X2luc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgb3V0X2J1ZmZlcl9zaXplLCBEV09SRCBpbl9idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZGVmYXVsdF90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgc2VjdXJpdHlfYXR0cmlidXRlcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0NyZWF0ZU5hbWVkUGlwZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBMUENUU1RSIG5hbWU7CisgICAgRFdPUkQgb3Blbl9tb2RlOworICAgIERXT1JEIHBpcGVfbW9kZTsKKyAgICBEV09SRCBtYXhfaW5zdGFuY2VzOworICAgIERXT1JEIG91dF9idWZmZXJfc2l6ZTsKKyAgICBEV09SRCBpbl9idWZmZXJfc2l6ZTsKKyAgICBEV09SRCBkZWZhdWx0X3RpbWVvdXQ7CisgICAgTFBTRUNVUklUWV9BVFRSSUJVVEVTIHNlY3VyaXR5X2F0dHJpYnV0ZXM7CisgICAgSEFORExFIF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNra2tra2siIEZfUE9JTlRFUiAiOkNyZWF0ZU5hbWVkUGlwZSIsCisgICAgICAgICZuYW1lLCAmb3Blbl9tb2RlLCAmcGlwZV9tb2RlLCAmbWF4X2luc3RhbmNlcywgJm91dF9idWZmZXJfc2l6ZSwgJmluX2J1ZmZlcl9zaXplLCAmZGVmYXVsdF90aW1lb3V0LCAmc2VjdXJpdHlfYXR0cmlidXRlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3dpbmFwaV9DcmVhdGVOYW1lZFBpcGVfaW1wbChtb2R1bGUsIG5hbWUsIG9wZW5fbW9kZSwgcGlwZV9tb2RlLCBtYXhfaW5zdGFuY2VzLCBvdXRfYnVmZmVyX3NpemUsIGluX2J1ZmZlcl9zaXplLCBkZWZhdWx0X3RpbWVvdXQsIHNlY3VyaXR5X2F0dHJpYnV0ZXMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybl92YWx1ZSA9IEhBTkRMRV9UT19QWU5VTShfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9DcmVhdGVQaXBlX19kb2NfXywKKyJDcmVhdGVQaXBlKCRtb2R1bGUsIHBpcGVfYXR0cnMsIHNpemUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGUgYW4gYW5vbnltb3VzIHBpcGUuXG4iCisiXG4iCisiICBwaXBlX2F0dHJzXG4iCisiICAgIElnbm9yZWQgaW50ZXJuYWxseSwgY2FuIGJlIE5vbmUuXG4iCisiXG4iCisiUmV0dXJucyBhIDItdHVwbGUgb2YgaGFuZGxlcywgdG8gdGhlIHJlYWQgYW5kIHdyaXRlIGVuZHMgb2YgdGhlIHBpcGUuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9DUkVBVEVQSVBFX01FVEhPRERFRiAgICBcCisgICAgeyJDcmVhdGVQaXBlIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfQ3JlYXRlUGlwZSwgTUVUSF9WQVJBUkdTLCBfd2luYXBpX0NyZWF0ZVBpcGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfQ3JlYXRlUGlwZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpwaXBlX2F0dHJzLCBEV09SRCBzaXplKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfQ3JlYXRlUGlwZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcGlwZV9hdHRyczsKKyAgICBEV09SRCBzaXplOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPazpDcmVhdGVQaXBlIiwKKyAgICAgICAgJnBpcGVfYXR0cnMsICZzaXplKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF93aW5hcGlfQ3JlYXRlUGlwZV9pbXBsKG1vZHVsZSwgcGlwZV9hdHRycywgc2l6ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfQ3JlYXRlUHJvY2Vzc19fZG9jX18sCisiQ3JlYXRlUHJvY2VzcygkbW9kdWxlLCBhcHBsaWNhdGlvbl9uYW1lLCBjb21tYW5kX2xpbmUsIHByb2NfYXR0cnMsXG4iCisiICAgICAgICAgICAgICB0aHJlYWRfYXR0cnMsIGluaGVyaXRfaGFuZGxlcywgY3JlYXRpb25fZmxhZ3MsXG4iCisiICAgICAgICAgICAgICBlbnZfbWFwcGluZywgY3VycmVudF9kaXJlY3RvcnksIHN0YXJ0dXBfaW5mbywgLylcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhIG5ldyBwcm9jZXNzIGFuZCBpdHMgcHJpbWFyeSB0aHJlYWQuXG4iCisiXG4iCisiICBwcm9jX2F0dHJzXG4iCisiICAgIElnbm9yZWQgaW50ZXJuYWxseSwgY2FuIGJlIE5vbmUuXG4iCisiICB0aHJlYWRfYXR0cnNcbiIKKyIgICAgSWdub3JlZCBpbnRlcm5hbGx5LCBjYW4gYmUgTm9uZS5cbiIKKyJcbiIKKyJUaGUgcmV0dXJuIHZhbHVlIGlzIGEgdHVwbGUgb2YgdGhlIHByb2Nlc3MgaGFuZGxlLCB0aHJlYWQgaGFuZGxlLFxuIgorInByb2Nlc3MgSUQsIGFuZCB0aHJlYWQgSUQuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9DUkVBVEVQUk9DRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJDcmVhdGVQcm9jZXNzIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfQ3JlYXRlUHJvY2VzcywgTUVUSF9WQVJBUkdTLCBfd2luYXBpX0NyZWF0ZVByb2Nlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfQ3JlYXRlUHJvY2Vzc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X1VOSUNPREUgKmFwcGxpY2F0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFICpjb21tYW5kX2xpbmUsIFB5T2JqZWN0ICpwcm9jX2F0dHJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRocmVhZF9hdHRycywgQk9PTCBpbmhlcml0X2hhbmRsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBjcmVhdGlvbl9mbGFncywgUHlPYmplY3QgKmVudl9tYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqY3VycmVudF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnR1cF9pbmZvKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfQ3JlYXRlUHJvY2VzcyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9VTklDT0RFICphcHBsaWNhdGlvbl9uYW1lOworICAgIFB5X1VOSUNPREUgKmNvbW1hbmRfbGluZTsKKyAgICBQeU9iamVjdCAqcHJvY19hdHRyczsKKyAgICBQeU9iamVjdCAqdGhyZWFkX2F0dHJzOworICAgIEJPT0wgaW5oZXJpdF9oYW5kbGVzOworICAgIERXT1JEIGNyZWF0aW9uX2ZsYWdzOworICAgIFB5T2JqZWN0ICplbnZfbWFwcGluZzsKKyAgICBQeV9VTklDT0RFICpjdXJyZW50X2RpcmVjdG9yeTsKKyAgICBQeU9iamVjdCAqc3RhcnR1cF9pbmZvOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJaWk9PaWtPWk86Q3JlYXRlUHJvY2VzcyIsCisgICAgICAgICZhcHBsaWNhdGlvbl9uYW1lLCAmY29tbWFuZF9saW5lLCAmcHJvY19hdHRycywgJnRocmVhZF9hdHRycywgJmluaGVyaXRfaGFuZGxlcywgJmNyZWF0aW9uX2ZsYWdzLCAmZW52X21hcHBpbmcsICZjdXJyZW50X2RpcmVjdG9yeSwgJnN0YXJ0dXBfaW5mbykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfd2luYXBpX0NyZWF0ZVByb2Nlc3NfaW1wbChtb2R1bGUsIGFwcGxpY2F0aW9uX25hbWUsIGNvbW1hbmRfbGluZSwgcHJvY19hdHRycywgdGhyZWFkX2F0dHJzLCBpbmhlcml0X2hhbmRsZXMsIGNyZWF0aW9uX2ZsYWdzLCBlbnZfbWFwcGluZywgY3VycmVudF9kaXJlY3RvcnksIHN0YXJ0dXBfaW5mbyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfRHVwbGljYXRlSGFuZGxlX19kb2NfXywKKyJEdXBsaWNhdGVIYW5kbGUoJG1vZHVsZSwgc291cmNlX3Byb2Nlc3NfaGFuZGxlLCBzb3VyY2VfaGFuZGxlLFxuIgorIiAgICAgICAgICAgICAgICB0YXJnZXRfcHJvY2Vzc19oYW5kbGUsIGRlc2lyZWRfYWNjZXNzLCBpbmhlcml0X2hhbmRsZSxcbiIKKyIgICAgICAgICAgICAgICAgb3B0aW9ucz0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZHVwbGljYXRlIGhhbmRsZSBvYmplY3QuXG4iCisiXG4iCisiVGhlIGR1cGxpY2F0ZSBoYW5kbGUgcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhcyB0aGUgb3JpZ2luYWxcbiIKKyJoYW5kbGUuIFRoZXJlZm9yZSwgYW55IGNoYW5nZXMgdG8gdGhlIG9iamVjdCBhcmUgcmVmbGVjdGVkXG4iCisidGhyb3VnaCBib3RoIGhhbmRsZXMuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9EVVBMSUNBVEVIQU5ETEVfTUVUSE9EREVGICAgIFwKKyAgICB7IkR1cGxpY2F0ZUhhbmRsZSIsIChQeUNGdW5jdGlvbilfd2luYXBpX0R1cGxpY2F0ZUhhbmRsZSwgTUVUSF9WQVJBUkdTLCBfd2luYXBpX0R1cGxpY2F0ZUhhbmRsZV9fZG9jX199LAorCitzdGF0aWMgSEFORExFCitfd2luYXBpX0R1cGxpY2F0ZUhhbmRsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBzb3VyY2VfcHJvY2Vzc19oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRSBzb3VyY2VfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEUgdGFyZ2V0X3Byb2Nlc3NfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkZXNpcmVkX2FjY2VzcywgQk9PTCBpbmhlcml0X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgb3B0aW9ucyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0R1cGxpY2F0ZUhhbmRsZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIQU5ETEUgc291cmNlX3Byb2Nlc3NfaGFuZGxlOworICAgIEhBTkRMRSBzb3VyY2VfaGFuZGxlOworICAgIEhBTkRMRSB0YXJnZXRfcHJvY2Vzc19oYW5kbGU7CisgICAgRFdPUkQgZGVzaXJlZF9hY2Nlc3M7CisgICAgQk9PTCBpbmhlcml0X2hhbmRsZTsKKyAgICBEV09SRCBvcHRpb25zID0gMDsKKyAgICBIQU5ETEUgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIiBGX0hBTkRMRSAiIiBGX0hBTkRMRSAiIiBGX0hBTkRMRSAia2l8azpEdXBsaWNhdGVIYW5kbGUiLAorICAgICAgICAmc291cmNlX3Byb2Nlc3NfaGFuZGxlLCAmc291cmNlX2hhbmRsZSwgJnRhcmdldF9wcm9jZXNzX2hhbmRsZSwgJmRlc2lyZWRfYWNjZXNzLCAmaW5oZXJpdF9oYW5kbGUsICZvcHRpb25zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBfd2luYXBpX0R1cGxpY2F0ZUhhbmRsZV9pbXBsKG1vZHVsZSwgc291cmNlX3Byb2Nlc3NfaGFuZGxlLCBzb3VyY2VfaGFuZGxlLCB0YXJnZXRfcHJvY2Vzc19oYW5kbGUsIGRlc2lyZWRfYWNjZXNzLCBpbmhlcml0X2hhbmRsZSwgb3B0aW9ucyk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKF9yZXR1cm5fdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgcmV0dXJuX3ZhbHVlID0gSEFORExFX1RPX1BZTlVNKF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfd2luYXBpX0V4aXRQcm9jZXNzX19kb2NfXywKKyJFeGl0UHJvY2VzcygkbW9kdWxlLCBFeGl0Q29kZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9FWElUUFJPQ0VTU19NRVRIT0RERUYgICAgXAorICAgIHsiRXhpdFByb2Nlc3MiLCAoUHlDRnVuY3Rpb24pX3dpbmFwaV9FeGl0UHJvY2VzcywgTUVUSF9PLCBfd2luYXBpX0V4aXRQcm9jZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0V4aXRQcm9jZXNzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgVUlOVCBFeGl0Q29kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0V4aXRQcm9jZXNzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgVUlOVCBFeGl0Q29kZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiSTpFeGl0UHJvY2VzcyIsICZFeGl0Q29kZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfd2luYXBpX0V4aXRQcm9jZXNzX2ltcGwobW9kdWxlLCBFeGl0Q29kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfR2V0Q3VycmVudFByb2Nlc3NfX2RvY19fLAorIkdldEN1cnJlbnRQcm9jZXNzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBoYW5kbGUgb2JqZWN0IGZvciB0aGUgY3VycmVudCBwcm9jZXNzLiIpOworCisjZGVmaW5lIF9XSU5BUElfR0VUQ1VSUkVOVFBST0NFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7IkdldEN1cnJlbnRQcm9jZXNzIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfR2V0Q3VycmVudFByb2Nlc3MsIE1FVEhfTk9BUkdTLCBfd2luYXBpX0dldEN1cnJlbnRQcm9jZXNzX19kb2NfX30sCisKK3N0YXRpYyBIQU5ETEUKK193aW5hcGlfR2V0Q3VycmVudFByb2Nlc3NfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfR2V0Q3VycmVudFByb2Nlc3MoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIQU5ETEUgX3JldHVybl92YWx1ZTsKKworICAgIF9yZXR1cm5fdmFsdWUgPSBfd2luYXBpX0dldEN1cnJlbnRQcm9jZXNzX2ltcGwobW9kdWxlKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoX3JldHVybl92YWx1ZSA9PSBOVUxMKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICByZXR1cm5fdmFsdWUgPSBIQU5ETEVfVE9fUFlOVU0oX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfR2V0RXhpdENvZGVQcm9jZXNzX19kb2NfXywKKyJHZXRFeGl0Q29kZVByb2Nlc3MoJG1vZHVsZSwgcHJvY2VzcywgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgdGVybWluYXRpb24gc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgcHJvY2Vzcy4iKTsKKworI2RlZmluZSBfV0lOQVBJX0dFVEVYSVRDT0RFUFJPQ0VTU19NRVRIT0RERUYgICAgXAorICAgIHsiR2V0RXhpdENvZGVQcm9jZXNzIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfR2V0RXhpdENvZGVQcm9jZXNzLCBNRVRIX08sIF93aW5hcGlfR2V0RXhpdENvZGVQcm9jZXNzX19kb2NfX30sCisKK3N0YXRpYyBEV09SRAorX3dpbmFwaV9HZXRFeGl0Q29kZVByb2Nlc3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgcHJvY2Vzcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0dldEV4aXRDb2RlUHJvY2VzcyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIEhBTkRMRSBwcm9jZXNzOworICAgIERXT1JEIF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIiIgRl9IQU5ETEUgIjpHZXRFeGl0Q29kZVByb2Nlc3MiLCAmcHJvY2VzcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3dpbmFwaV9HZXRFeGl0Q29kZVByb2Nlc3NfaW1wbChtb2R1bGUsIHByb2Nlc3MpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSBEV09SRF9NQVgpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCJrIiwgX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfR2V0TGFzdEVycm9yX19kb2NfXywKKyJHZXRMYXN0RXJyb3IoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9HRVRMQVNURVJST1JfTUVUSE9EREVGICAgIFwKKyAgICB7IkdldExhc3RFcnJvciIsIChQeUNGdW5jdGlvbilfd2luYXBpX0dldExhc3RFcnJvciwgTUVUSF9OT0FSR1MsIF93aW5hcGlfR2V0TGFzdEVycm9yX19kb2NfX30sCisKK3N0YXRpYyBEV09SRAorX3dpbmFwaV9HZXRMYXN0RXJyb3JfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfR2V0TGFzdEVycm9yKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgRFdPUkQgX3JldHVybl92YWx1ZTsKKworICAgIF9yZXR1cm5fdmFsdWUgPSBfd2luYXBpX0dldExhc3RFcnJvcl9pbXBsKG1vZHVsZSk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IERXT1JEX01BWCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoImsiLCBfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9HZXRNb2R1bGVGaWxlTmFtZV9fZG9jX18sCisiR2V0TW9kdWxlRmlsZU5hbWUoJG1vZHVsZSwgbW9kdWxlX2hhbmRsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgZnVsbHktcXVhbGlmaWVkIHBhdGggZm9yIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgbW9kdWxlLlxuIgorIlxuIgorIlRoZSBtb2R1bGUgbXVzdCBoYXZlIGJlZW4gbG9hZGVkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3MuXG4iCisiXG4iCisiVGhlIG1vZHVsZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgaGFuZGxlIHRvIHRoZSBsb2FkZWQgbW9kdWxlXG4iCisid2hvc2UgcGF0aCBpcyBiZWluZyByZXF1ZXN0ZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIDAsXG4iCisiR2V0TW9kdWxlRmlsZU5hbWUgcmV0cmlldmVzIHRoZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIGZpbGVcbiIKKyJvZiB0aGUgY3VycmVudCBwcm9jZXNzLiIpOworCisjZGVmaW5lIF9XSU5BUElfR0VUTU9EVUxFRklMRU5BTUVfTUVUSE9EREVGICAgIFwKKyAgICB7IkdldE1vZHVsZUZpbGVOYW1lIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfR2V0TW9kdWxlRmlsZU5hbWUsIE1FVEhfTywgX3dpbmFwaV9HZXRNb2R1bGVGaWxlTmFtZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3dpbmFwaV9HZXRNb2R1bGVGaWxlTmFtZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhNT0RVTEUgbW9kdWxlX2hhbmRsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0dldE1vZHVsZUZpbGVOYW1lKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSE1PRFVMRSBtb2R1bGVfaGFuZGxlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICIiIEZfSEFORExFICI6R2V0TW9kdWxlRmlsZU5hbWUiLCAmbW9kdWxlX2hhbmRsZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfd2luYXBpX0dldE1vZHVsZUZpbGVOYW1lX2ltcGwobW9kdWxlLCBtb2R1bGVfaGFuZGxlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9HZXRTdGRIYW5kbGVfX2RvY19fLAorIkdldFN0ZEhhbmRsZSgkbW9kdWxlLCBzdGRfaGFuZGxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBzcGVjaWZpZWQgc3RhbmRhcmQgZGV2aWNlLlxuIgorIlxuIgorIiAgc3RkX2hhbmRsZVxuIgorIiAgICBPbmUgb2YgU1REX0lOUFVUX0hBTkRMRSwgU1REX09VVFBVVF9IQU5ETEUsIG9yIFNURF9FUlJPUl9IQU5ETEUuXG4iCisiXG4iCisiVGhlIGludGVnZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBoYW5kbGUgb2JqZWN0IGlzIHJldHVybmVkLiIpOworCisjZGVmaW5lIF9XSU5BUElfR0VUU1RESEFORExFX01FVEhPRERFRiAgICBcCisgICAgeyJHZXRTdGRIYW5kbGUiLCAoUHlDRnVuY3Rpb24pX3dpbmFwaV9HZXRTdGRIYW5kbGUsIE1FVEhfTywgX3dpbmFwaV9HZXRTdGRIYW5kbGVfX2RvY19ffSwKKworc3RhdGljIEhBTkRMRQorX3dpbmFwaV9HZXRTdGRIYW5kbGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBEV09SRCBzdGRfaGFuZGxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfR2V0U3RkSGFuZGxlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgRFdPUkQgc3RkX2hhbmRsZTsKKyAgICBIQU5ETEUgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiazpHZXRTdGRIYW5kbGUiLCAmc3RkX2hhbmRsZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3dpbmFwaV9HZXRTdGRIYW5kbGVfaW1wbChtb2R1bGUsIHN0ZF9oYW5kbGUpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybl92YWx1ZSA9IEhBTkRMRV9UT19QWU5VTShfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9HZXRWZXJzaW9uX19kb2NfXywKKyJHZXRWZXJzaW9uKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50IG9wZXJhdGluZyBzeXN0ZW0uIik7CisKKyNkZWZpbmUgX1dJTkFQSV9HRVRWRVJTSU9OX01FVEhPRERFRiAgICBcCisgICAgeyJHZXRWZXJzaW9uIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfR2V0VmVyc2lvbiwgTUVUSF9OT0FSR1MsIF93aW5hcGlfR2V0VmVyc2lvbl9fZG9jX199LAorCitzdGF0aWMgbG9uZworX3dpbmFwaV9HZXRWZXJzaW9uX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX0dldFZlcnNpb24oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBsb25nIF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3dpbmFwaV9HZXRWZXJzaW9uX2ltcGwobW9kdWxlKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfT3BlblByb2Nlc3NfX2RvY19fLAorIk9wZW5Qcm9jZXNzKCRtb2R1bGUsIGRlc2lyZWRfYWNjZXNzLCBpbmhlcml0X2hhbmRsZSwgcHJvY2Vzc19pZCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9PUEVOUFJPQ0VTU19NRVRIT0RERUYgICAgXAorICAgIHsiT3BlblByb2Nlc3MiLCAoUHlDRnVuY3Rpb24pX3dpbmFwaV9PcGVuUHJvY2VzcywgTUVUSF9WQVJBUkdTLCBfd2luYXBpX09wZW5Qcm9jZXNzX19kb2NfX30sCisKK3N0YXRpYyBIQU5ETEUKK193aW5hcGlfT3BlblByb2Nlc3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBEV09SRCBkZXNpcmVkX2FjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGluaGVyaXRfaGFuZGxlLCBEV09SRCBwcm9jZXNzX2lkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfT3BlblByb2Nlc3MoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgRFdPUkQgZGVzaXJlZF9hY2Nlc3M7CisgICAgQk9PTCBpbmhlcml0X2hhbmRsZTsKKyAgICBEV09SRCBwcm9jZXNzX2lkOworICAgIEhBTkRMRSBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJraWs6T3BlblByb2Nlc3MiLAorICAgICAgICAmZGVzaXJlZF9hY2Nlc3MsICZpbmhlcml0X2hhbmRsZSwgJnByb2Nlc3NfaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IF93aW5hcGlfT3BlblByb2Nlc3NfaW1wbChtb2R1bGUsIGRlc2lyZWRfYWNjZXNzLCBpbmhlcml0X2hhbmRsZSwgcHJvY2Vzc19pZCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKF9yZXR1cm5fdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgcmV0dXJuX3ZhbHVlID0gSEFORExFX1RPX1BZTlVNKF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfd2luYXBpX1BlZWtOYW1lZFBpcGVfX2RvY19fLAorIlBlZWtOYW1lZFBpcGUoJG1vZHVsZSwgaGFuZGxlLCBzaXplPTAsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9XSU5BUElfUEVFS05BTUVEUElQRV9NRVRIT0RERUYgICAgXAorICAgIHsiUGVla05hbWVkUGlwZSIsIChQeUNGdW5jdGlvbilfd2luYXBpX1BlZWtOYW1lZFBpcGUsIE1FVEhfVkFSQVJHUywgX3dpbmFwaV9QZWVrTmFtZWRQaXBlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX1BlZWtOYW1lZFBpcGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgaGFuZGxlLCBpbnQgc2l6ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX1BlZWtOYW1lZFBpcGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBpbnQgc2l6ZSA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIgRl9IQU5ETEUgInxpOlBlZWtOYW1lZFBpcGUiLAorICAgICAgICAmaGFuZGxlLCAmc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfd2luYXBpX1BlZWtOYW1lZFBpcGVfaW1wbChtb2R1bGUsIGhhbmRsZSwgc2l6ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfUmVhZEZpbGVfX2RvY19fLAorIlJlYWRGaWxlKCRtb2R1bGUsIC8sIGhhbmRsZSwgc2l6ZSwgb3ZlcmxhcHBlZD1GYWxzZSlcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9SRUFERklMRV9NRVRIT0RERUYgICAgXAorICAgIHsiUmVhZEZpbGUiLCAoUHlDRnVuY3Rpb24pX3dpbmFwaV9SZWFkRmlsZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF93aW5hcGlfUmVhZEZpbGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfUmVhZEZpbGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgaGFuZGxlLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNlX292ZXJsYXBwZWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3dpbmFwaV9SZWFkRmlsZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImhhbmRsZSIsICJzaXplIiwgIm92ZXJsYXBwZWQiLCBOVUxMfTsKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIGludCBzaXplOworICAgIGludCB1c2Vfb3ZlcmxhcHBlZCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICIiIEZfSEFORExFICJpfGk6UmVhZEZpbGUiLCBfa2V5d29yZHMsCisgICAgICAgICZoYW5kbGUsICZzaXplLCAmdXNlX292ZXJsYXBwZWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3dpbmFwaV9SZWFkRmlsZV9pbXBsKG1vZHVsZSwgaGFuZGxlLCBzaXplLCB1c2Vfb3ZlcmxhcHBlZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfU2V0TmFtZWRQaXBlSGFuZGxlU3RhdGVfX2RvY19fLAorIlNldE5hbWVkUGlwZUhhbmRsZVN0YXRlKCRtb2R1bGUsIG5hbWVkX3BpcGUsIG1vZGUsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2NvbGxlY3Rpb25fY291bnQsIGNvbGxlY3RfZGF0YV90aW1lb3V0LCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBfV0lOQVBJX1NFVE5BTUVEUElQRUhBTkRMRVNUQVRFX01FVEhPRERFRiAgICBcCisgICAgeyJTZXROYW1lZFBpcGVIYW5kbGVTdGF0ZSIsIChQeUNGdW5jdGlvbilfd2luYXBpX1NldE5hbWVkUGlwZUhhbmRsZVN0YXRlLCBNRVRIX1ZBUkFSR1MsIF93aW5hcGlfU2V0TmFtZWRQaXBlSGFuZGxlU3RhdGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfU2V0TmFtZWRQaXBlSGFuZGxlU3RhdGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgbmFtZWRfcGlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWF4X2NvbGxlY3Rpb25fY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNvbGxlY3RfZGF0YV90aW1lb3V0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfU2V0TmFtZWRQaXBlSGFuZGxlU3RhdGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEFORExFIG5hbWVkX3BpcGU7CisgICAgUHlPYmplY3QgKm1vZGU7CisgICAgUHlPYmplY3QgKm1heF9jb2xsZWN0aW9uX2NvdW50OworICAgIFB5T2JqZWN0ICpjb2xsZWN0X2RhdGFfdGltZW91dDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIiBGX0hBTkRMRSAiT09POlNldE5hbWVkUGlwZUhhbmRsZVN0YXRlIiwKKyAgICAgICAgJm5hbWVkX3BpcGUsICZtb2RlLCAmbWF4X2NvbGxlY3Rpb25fY291bnQsICZjb2xsZWN0X2RhdGFfdGltZW91dCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfd2luYXBpX1NldE5hbWVkUGlwZUhhbmRsZVN0YXRlX2ltcGwobW9kdWxlLCBuYW1lZF9waXBlLCBtb2RlLCBtYXhfY29sbGVjdGlvbl9jb3VudCwgY29sbGVjdF9kYXRhX3RpbWVvdXQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfd2luYXBpX1Rlcm1pbmF0ZVByb2Nlc3NfX2RvY19fLAorIlRlcm1pbmF0ZVByb2Nlc3MoJG1vZHVsZSwgaGFuZGxlLCBleGl0X2NvZGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJUZXJtaW5hdGUgdGhlIHNwZWNpZmllZCBwcm9jZXNzIGFuZCBhbGwgb2YgaXRzIHRocmVhZHMuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9URVJNSU5BVEVQUk9DRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJUZXJtaW5hdGVQcm9jZXNzIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfVGVybWluYXRlUHJvY2VzcywgTUVUSF9WQVJBUkdTLCBfd2luYXBpX1Rlcm1pbmF0ZVByb2Nlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfVGVybWluYXRlUHJvY2Vzc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UIGV4aXRfY29kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX1Rlcm1pbmF0ZVByb2Nlc3MoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBVSU5UIGV4aXRfY29kZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIiBGX0hBTkRMRSAiSTpUZXJtaW5hdGVQcm9jZXNzIiwKKyAgICAgICAgJmhhbmRsZSwgJmV4aXRfY29kZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfd2luYXBpX1Rlcm1pbmF0ZVByb2Nlc3NfaW1wbChtb2R1bGUsIGhhbmRsZSwgZXhpdF9jb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9XYWl0TmFtZWRQaXBlX19kb2NfXywKKyJXYWl0TmFtZWRQaXBlKCRtb2R1bGUsIG5hbWUsIHRpbWVvdXQsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIF9XSU5BUElfV0FJVE5BTUVEUElQRV9NRVRIT0RERUYgICAgXAorICAgIHsiV2FpdE5hbWVkUGlwZSIsIChQeUNGdW5jdGlvbilfd2luYXBpX1dhaXROYW1lZFBpcGUsIE1FVEhfVkFSQVJHUywgX3dpbmFwaV9XYWl0TmFtZWRQaXBlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX1dhaXROYW1lZFBpcGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBMUENUU1RSIG5hbWUsIERXT1JEIHRpbWVvdXQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3dpbmFwaV9XYWl0TmFtZWRQaXBlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIExQQ1RTVFIgbmFtZTsKKyAgICBEV09SRCB0aW1lb3V0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzazpXYWl0TmFtZWRQaXBlIiwKKyAgICAgICAgJm5hbWUsICZ0aW1lb3V0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF93aW5hcGlfV2FpdE5hbWVkUGlwZV9pbXBsKG1vZHVsZSwgbmFtZSwgdGltZW91dCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF93aW5hcGlfV2FpdEZvck11bHRpcGxlT2JqZWN0c19fZG9jX18sCisiV2FpdEZvck11bHRpcGxlT2JqZWN0cygkbW9kdWxlLCBoYW5kbGVfc2VxLCB3YWl0X2ZsYWcsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHM9X3dpbmFwaS5JTkZJTklURSwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9XQUlURk9STVVMVElQTEVPQkpFQ1RTX01FVEhPRERFRiAgICBcCisgICAgeyJXYWl0Rm9yTXVsdGlwbGVPYmplY3RzIiwgKFB5Q0Z1bmN0aW9uKV93aW5hcGlfV2FpdEZvck11bHRpcGxlT2JqZWN0cywgTUVUSF9WQVJBUkdTLCBfd2luYXBpX1dhaXRGb3JNdWx0aXBsZU9iamVjdHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfV2FpdEZvck11bHRpcGxlT2JqZWN0c19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpoYW5kbGVfc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCB3YWl0X2ZsYWcsIERXT1JEIG1pbGxpc2Vjb25kcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX1dhaXRGb3JNdWx0aXBsZU9iamVjdHMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmhhbmRsZV9zZXE7CisgICAgQk9PTCB3YWl0X2ZsYWc7CisgICAgRFdPUkQgbWlsbGlzZWNvbmRzID0gSU5GSU5JVEU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pfGs6V2FpdEZvck11bHRpcGxlT2JqZWN0cyIsCisgICAgICAgICZoYW5kbGVfc2VxLCAmd2FpdF9mbGFnLCAmbWlsbGlzZWNvbmRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF93aW5hcGlfV2FpdEZvck11bHRpcGxlT2JqZWN0c19pbXBsKG1vZHVsZSwgaGFuZGxlX3NlcSwgd2FpdF9mbGFnLCBtaWxsaXNlY29uZHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfd2luYXBpX1dhaXRGb3JTaW5nbGVPYmplY3RfX2RvY19fLAorIldhaXRGb3JTaW5nbGVPYmplY3QoJG1vZHVsZSwgaGFuZGxlLCBtaWxsaXNlY29uZHMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXYWl0IGZvciBhIHNpbmdsZSBvYmplY3QuXG4iCisiXG4iCisiV2FpdCB1bnRpbCB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBpbiB0aGUgc2lnbmFsZWQgc3RhdGUgb3JcbiIKKyJ0aGUgdGltZS1vdXQgaW50ZXJ2YWwgZWxhcHNlcy4gVGhlIHRpbWVvdXQgdmFsdWUgaXMgc3BlY2lmaWVkXG4iCisiaW4gbWlsbGlzZWNvbmRzLiIpOworCisjZGVmaW5lIF9XSU5BUElfV0FJVEZPUlNJTkdMRU9CSkVDVF9NRVRIT0RERUYgICAgXAorICAgIHsiV2FpdEZvclNpbmdsZU9iamVjdCIsIChQeUNGdW5jdGlvbilfd2luYXBpX1dhaXRGb3JTaW5nbGVPYmplY3QsIE1FVEhfVkFSQVJHUywgX3dpbmFwaV9XYWl0Rm9yU2luZ2xlT2JqZWN0X19kb2NfX30sCisKK3N0YXRpYyBsb25nCitfd2luYXBpX1dhaXRGb3JTaW5nbGVPYmplY3RfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIQU5ETEUgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgbWlsbGlzZWNvbmRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK193aW5hcGlfV2FpdEZvclNpbmdsZU9iamVjdChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIG1pbGxpc2Vjb25kczsKKyAgICBsb25nIF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIgRl9IQU5ETEUgIms6V2FpdEZvclNpbmdsZU9iamVjdCIsCisgICAgICAgICZoYW5kbGUsICZtaWxsaXNlY29uZHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IF93aW5hcGlfV2FpdEZvclNpbmdsZU9iamVjdF9pbXBsKG1vZHVsZSwgaGFuZGxlLCBtaWxsaXNlY29uZHMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZyhfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3dpbmFwaV9Xcml0ZUZpbGVfX2RvY19fLAorIldyaXRlRmlsZSgkbW9kdWxlLCAvLCBoYW5kbGUsIGJ1ZmZlciwgb3ZlcmxhcHBlZD1GYWxzZSlcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgX1dJTkFQSV9XUklURUZJTEVfTUVUSE9EREVGICAgIFwKKyAgICB7IldyaXRlRmlsZSIsIChQeUNGdW5jdGlvbilfd2luYXBpX1dyaXRlRmlsZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF93aW5hcGlfV3JpdGVGaWxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX1dyaXRlRmlsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhBTkRMRSBoYW5kbGUsIFB5T2JqZWN0ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGludCB1c2Vfb3ZlcmxhcHBlZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfd2luYXBpX1dyaXRlRmlsZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImhhbmRsZSIsICJidWZmZXIiLCAib3ZlcmxhcHBlZCIsIE5VTEx9OworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgUHlPYmplY3QgKmJ1ZmZlcjsKKyAgICBpbnQgdXNlX292ZXJsYXBwZWQgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiIiBGX0hBTkRMRSAiT3xpOldyaXRlRmlsZSIsIF9rZXl3b3JkcywKKyAgICAgICAgJmhhbmRsZSwgJmJ1ZmZlciwgJnVzZV9vdmVybGFwcGVkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF93aW5hcGlfV3JpdGVGaWxlX2ltcGwobW9kdWxlLCBoYW5kbGUsIGJ1ZmZlciwgdXNlX292ZXJsYXBwZWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTRjNGIyYTlmY2IwYmVhMSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9hcnJheW1vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9hcnJheW1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3MDYxYQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL2FycmF5bW9kdWxlLmMuaApAQCAtMCwwICsxLDQ5OSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X19fY29weV9fX19kb2NfXywKKyJfX2NvcHlfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGNvcHkgb2YgdGhlIGFycmF5LiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX19fQ09QWV9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX2NvcHlfXyIsIChQeUNGdW5jdGlvbilhcnJheV9hcnJheV9fX2NvcHlfXywgTUVUSF9OT0FSR1MsIGFycmF5X2FycmF5X19fY29weV9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV9fX2NvcHlfX19pbXBsKGFycmF5b2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2FycmF5X19fY29weV9fKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBhcnJheV9hcnJheV9fX2NvcHlfX19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoYXJyYXlfYXJyYXlfX19kZWVwY29weV9fX19kb2NfXywKKyJfX2RlZXBjb3B5X18oJHNlbGYsIHVudXNlZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGNvcHkgb2YgdGhlIGFycmF5LiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX19fREVFUENPUFlfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19kZWVwY29weV9fIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X19fZGVlcGNvcHlfXywgTUVUSF9PLCBhcnJheV9hcnJheV9fX2RlZXBjb3B5X19fX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X2NvdW50X19kb2NfXywKKyJjb3VudCgkc2VsZiwgdiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdiBpbiB0aGUgYXJyYXkuIik7CisKKyNkZWZpbmUgQVJSQVlfQVJSQVlfQ09VTlRfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvdW50IiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X2NvdW50LCBNRVRIX08sIGFycmF5X2FycmF5X2NvdW50X19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihhcnJheV9hcnJheV9pbmRleF9fZG9jX18sCisiaW5kZXgoJHNlbGYsIHYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gaW5kZXggb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiB2IGluIHRoZSBhcnJheS4iKTsKKworI2RlZmluZSBBUlJBWV9BUlJBWV9JTkRFWF9NRVRIT0RERUYgICAgXAorICAgIHsiaW5kZXgiLCAoUHlDRnVuY3Rpb24pYXJyYXlfYXJyYXlfaW5kZXgsIE1FVEhfTywgYXJyYXlfYXJyYXlfaW5kZXhfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X3JlbW92ZV9fZG9jX18sCisicmVtb3ZlKCRzZWxmLCB2LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVtb3ZlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHYgaW4gdGhlIGFycmF5LiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX1JFTU9WRV9NRVRIT0RERUYgICAgXAorICAgIHsicmVtb3ZlIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X3JlbW92ZSwgTUVUSF9PLCBhcnJheV9hcnJheV9yZW1vdmVfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X3BvcF9fZG9jX18sCisicG9wKCRzZWxmLCBpPS0xLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBpLXRoIGVsZW1lbnQgYW5kIGRlbGV0ZSBpdCBmcm9tIHRoZSBhcnJheS5cbiIKKyJcbiIKKyJpIGRlZmF1bHRzIHRvIC0xLiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX1BPUF9NRVRIT0RERUYgICAgXAorICAgIHsicG9wIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X3BvcCwgTUVUSF9WQVJBUkdTLCBhcnJheV9hcnJheV9wb3BfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2FycmF5X3BvcF9pbXBsKGFycmF5b2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGkpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfcG9wKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGkgPSAtMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cG9wIiwKKyAgICAgICAgJmkpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXJyYXlfYXJyYXlfcG9wX2ltcGwoc2VsZiwgaSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X2V4dGVuZF9fZG9jX18sCisiZXh0ZW5kKCRzZWxmLCBiYiwgLylcbiIKKyItLVxuIgorIlxuIgorIkFwcGVuZCBpdGVtcyB0byB0aGUgZW5kIG9mIHRoZSBhcnJheS4iKTsKKworI2RlZmluZSBBUlJBWV9BUlJBWV9FWFRFTkRfTUVUSE9EREVGICAgIFwKKyAgICB7ImV4dGVuZCIsIChQeUNGdW5jdGlvbilhcnJheV9hcnJheV9leHRlbmQsIE1FVEhfTywgYXJyYXlfYXJyYXlfZXh0ZW5kX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihhcnJheV9hcnJheV9pbnNlcnRfX2RvY19fLAorImluc2VydCgkc2VsZiwgaSwgdiwgLylcbiIKKyItLVxuIgorIlxuIgorIkluc2VydCBhIG5ldyBpdGVtIHYgaW50byB0aGUgYXJyYXkgYmVmb3JlIHBvc2l0aW9uIGkuIik7CisKKyNkZWZpbmUgQVJSQVlfQVJSQVlfSU5TRVJUX01FVEhPRERFRiAgICBcCisgICAgeyJpbnNlcnQiLCAoUHlDRnVuY3Rpb24pYXJyYXlfYXJyYXlfaW5zZXJ0LCBNRVRIX1ZBUkFSR1MsIGFycmF5X2FycmF5X2luc2VydF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfaW5zZXJ0X2ltcGwoYXJyYXlvYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKnYpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfaW5zZXJ0KGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKnY7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIm5POmluc2VydCIsCisgICAgICAgICZpLCAmdikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhcnJheV9hcnJheV9pbnNlcnRfaW1wbChzZWxmLCBpLCB2KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXJyYXlfYXJyYXlfYnVmZmVyX2luZm9fX2RvY19fLAorImJ1ZmZlcl9pbmZvKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgdHVwbGUgKGFkZHJlc3MsIGxlbmd0aCkgZ2l2aW5nIHRoZSBjdXJyZW50IG1lbW9yeSBhZGRyZXNzIGFuZCB0aGUgbGVuZ3RoIGluIGl0ZW1zIG9mIHRoZSBidWZmZXIgdXNlZCB0byBob2xkIGFycmF5XCdzIGNvbnRlbnRzLlxuIgorIlxuIgorIlRoZSBsZW5ndGggc2hvdWxkIGJlIG11bHRpcGxpZWQgYnkgdGhlIGl0ZW1zaXplIGF0dHJpYnV0ZSB0byBjYWxjdWxhdGVcbiIKKyJ0aGUgYnVmZmVyIGxlbmd0aCBpbiBieXRlcy4iKTsKKworI2RlZmluZSBBUlJBWV9BUlJBWV9CVUZGRVJfSU5GT19NRVRIT0RERUYgICAgXAorICAgIHsiYnVmZmVyX2luZm8iLCAoUHlDRnVuY3Rpb24pYXJyYXlfYXJyYXlfYnVmZmVyX2luZm8sIE1FVEhfTk9BUkdTLCBhcnJheV9hcnJheV9idWZmZXJfaW5mb19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfYnVmZmVyX2luZm9faW1wbChhcnJheW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV9idWZmZXJfaW5mbyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gYXJyYXlfYXJyYXlfYnVmZmVyX2luZm9faW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X2FwcGVuZF9fZG9jX18sCisiYXBwZW5kKCRzZWxmLCB2LCAvKVxuIgorIi0tXG4iCisiXG4iCisiQXBwZW5kIG5ldyB2YWx1ZSB2IHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX0FQUEVORF9NRVRIT0RERUYgICAgXAorICAgIHsiYXBwZW5kIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X2FwcGVuZCwgTUVUSF9PLCBhcnJheV9hcnJheV9hcHBlbmRfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X2J5dGVzd2FwX19kb2NfXywKKyJieXRlc3dhcCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkJ5dGVzd2FwIGFsbCBpdGVtcyBvZiB0aGUgYXJyYXkuXG4iCisiXG4iCisiSWYgdGhlIGl0ZW1zIGluIHRoZSBhcnJheSBhcmUgbm90IDEsIDIsIDQsIG9yIDggYnl0ZXMgaW4gc2l6ZSwgUnVudGltZUVycm9yIGlzXG4iCisicmFpc2VkLiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX0JZVEVTV0FQX01FVEhPRERFRiAgICBcCisgICAgeyJieXRlc3dhcCIsIChQeUNGdW5jdGlvbilhcnJheV9hcnJheV9ieXRlc3dhcCwgTUVUSF9OT0FSR1MsIGFycmF5X2FycmF5X2J5dGVzd2FwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV9ieXRlc3dhcF9pbXBsKGFycmF5b2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2FycmF5X2J5dGVzd2FwKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBhcnJheV9hcnJheV9ieXRlc3dhcF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoYXJyYXlfYXJyYXlfcmV2ZXJzZV9fZG9jX18sCisicmV2ZXJzZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkuIik7CisKKyNkZWZpbmUgQVJSQVlfQVJSQVlfUkVWRVJTRV9NRVRIT0RERUYgICAgXAorICAgIHsicmV2ZXJzZSIsIChQeUNGdW5jdGlvbilhcnJheV9hcnJheV9yZXZlcnNlLCBNRVRIX05PQVJHUywgYXJyYXlfYXJyYXlfcmV2ZXJzZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfcmV2ZXJzZV9pbXBsKGFycmF5b2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2FycmF5X3JldmVyc2UoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIGFycmF5X2FycmF5X3JldmVyc2VfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X2Zyb21maWxlX19kb2NfXywKKyJmcm9tZmlsZSgkc2VsZiwgZiwgbiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgbiBvYmplY3RzIGZyb20gdGhlIGZpbGUgb2JqZWN0IGYgYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX0ZST01GSUxFX01FVEhPRERFRiAgICBcCisgICAgeyJmcm9tZmlsZSIsIChQeUNGdW5jdGlvbilhcnJheV9hcnJheV9mcm9tZmlsZSwgTUVUSF9WQVJBUkdTLCBhcnJheV9hcnJheV9mcm9tZmlsZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfZnJvbWZpbGVfaW1wbChhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmYsIFB5X3NzaXplX3Qgbik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV9mcm9tZmlsZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmY7CisgICAgUHlfc3NpemVfdCBuOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbjpmcm9tZmlsZSIsCisgICAgICAgICZmLCAmbikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhcnJheV9hcnJheV9mcm9tZmlsZV9pbXBsKHNlbGYsIGYsIG4pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhcnJheV9hcnJheV90b2ZpbGVfX2RvY19fLAorInRvZmlsZSgkc2VsZiwgZiwgLylcbiIKKyItLVxuIgorIlxuIgorIldyaXRlIGFsbCBpdGVtcyAoYXMgbWFjaGluZSB2YWx1ZXMpIHRvIHRoZSBmaWxlIG9iamVjdCBmLiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX1RPRklMRV9NRVRIT0RERUYgICAgXAorICAgIHsidG9maWxlIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X3RvZmlsZSwgTUVUSF9PLCBhcnJheV9hcnJheV90b2ZpbGVfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X2Zyb21saXN0X19kb2NfXywKKyJmcm9tbGlzdCgkc2VsZiwgbGlzdCwgLylcbiIKKyItLVxuIgorIlxuIgorIkFwcGVuZCBpdGVtcyB0byBhcnJheSBmcm9tIGxpc3QuIik7CisKKyNkZWZpbmUgQVJSQVlfQVJSQVlfRlJPTUxJU1RfTUVUSE9EREVGICAgIFwKKyAgICB7ImZyb21saXN0IiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X2Zyb21saXN0LCBNRVRIX08sIGFycmF5X2FycmF5X2Zyb21saXN0X19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihhcnJheV9hcnJheV90b2xpc3RfX2RvY19fLAorInRvbGlzdCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgYXJyYXkgdG8gYW4gb3JkaW5hcnkgbGlzdCB3aXRoIHRoZSBzYW1lIGl0ZW1zLiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX1RPTElTVF9NRVRIT0RERUYgICAgXAorICAgIHsidG9saXN0IiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X3RvbGlzdCwgTUVUSF9OT0FSR1MsIGFycmF5X2FycmF5X3RvbGlzdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfdG9saXN0X2ltcGwoYXJyYXlvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfdG9saXN0KGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBhcnJheV9hcnJheV90b2xpc3RfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X2Zyb21zdHJpbmdfX2RvY19fLAorImZyb21zdHJpbmcoJHNlbGYsIGJ1ZmZlciwgLylcbiIKKyItLVxuIgorIlxuIgorIkFwcGVuZHMgaXRlbXMgZnJvbSB0aGUgc3RyaW5nLCBpbnRlcnByZXRpbmcgaXQgYXMgYW4gYXJyYXkgb2YgbWFjaGluZSB2YWx1ZXMsIGFzIGlmIGl0IGhhZCBiZWVuIHJlYWQgZnJvbSBhIGZpbGUgdXNpbmcgdGhlIGZyb21maWxlKCkgbWV0aG9kKS5cbiIKKyJcbiIKKyJUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgZnJvbWJ5dGVzIGluc3RlYWQuIik7CisKKyNkZWZpbmUgQVJSQVlfQVJSQVlfRlJPTVNUUklOR19NRVRIT0RERUYgICAgXAorICAgIHsiZnJvbXN0cmluZyIsIChQeUNGdW5jdGlvbilhcnJheV9hcnJheV9mcm9tc3RyaW5nLCBNRVRIX08sIGFycmF5X2FycmF5X2Zyb21zdHJpbmdfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2FycmF5X2Zyb21zdHJpbmdfaW1wbChhcnJheW9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpidWZmZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfZnJvbXN0cmluZyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYnVmZmVyID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJzKjpmcm9tc3RyaW5nIiwgJmJ1ZmZlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhcnJheV9hcnJheV9mcm9tc3RyaW5nX2ltcGwoc2VsZiwgJmJ1ZmZlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgYnVmZmVyICovCisgICAgaWYgKGJ1ZmZlci5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhcnJheV9hcnJheV9mcm9tYnl0ZXNfX2RvY19fLAorImZyb21ieXRlcygkc2VsZiwgYnVmZmVyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQXBwZW5kcyBpdGVtcyBmcm9tIHRoZSBzdHJpbmcsIGludGVycHJldGluZyBpdCBhcyBhbiBhcnJheSBvZiBtYWNoaW5lIHZhbHVlcywgYXMgaWYgaXQgaGFkIGJlZW4gcmVhZCBmcm9tIGEgZmlsZSB1c2luZyB0aGUgZnJvbWZpbGUoKSBtZXRob2QpLiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX0ZST01CWVRFU19NRVRIT0RERUYgICAgXAorICAgIHsiZnJvbWJ5dGVzIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X2Zyb21ieXRlcywgTUVUSF9PLCBhcnJheV9hcnJheV9mcm9tYnl0ZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2FycmF5X2Zyb21ieXRlc19pbXBsKGFycmF5b2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmJ1ZmZlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV9mcm9tYnl0ZXMoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGJ1ZmZlciA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAieSo6ZnJvbWJ5dGVzIiwgJmJ1ZmZlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhcnJheV9hcnJheV9mcm9tYnl0ZXNfaW1wbChzZWxmLCAmYnVmZmVyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBidWZmZXIgKi8KKyAgICBpZiAoYnVmZmVyLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X3RvYnl0ZXNfX2RvY19fLAorInRvYnl0ZXMoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IHRoZSBhcnJheSB0byBhbiBhcnJheSBvZiBtYWNoaW5lIHZhbHVlcyBhbmQgcmV0dXJuIHRoZSBieXRlcyByZXByZXNlbnRhdGlvbi4iKTsKKworI2RlZmluZSBBUlJBWV9BUlJBWV9UT0JZVEVTX01FVEhPRERFRiAgICBcCisgICAgeyJ0b2J5dGVzIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X3RvYnl0ZXMsIE1FVEhfTk9BUkdTLCBhcnJheV9hcnJheV90b2J5dGVzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV90b2J5dGVzX2ltcGwoYXJyYXlvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfdG9ieXRlcyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gYXJyYXlfYXJyYXlfdG9ieXRlc19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoYXJyYXlfYXJyYXlfdG9zdHJpbmdfX2RvY19fLAorInRvc3RyaW5nKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCB0aGUgYXJyYXkgdG8gYW4gYXJyYXkgb2YgbWFjaGluZSB2YWx1ZXMgYW5kIHJldHVybiB0aGUgYnl0ZXMgcmVwcmVzZW50YXRpb24uXG4iCisiXG4iCisiVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gVXNlIHRvYnl0ZXMgaW5zdGVhZC4iKTsKKworI2RlZmluZSBBUlJBWV9BUlJBWV9UT1NUUklOR19NRVRIT0RERUYgICAgXAorICAgIHsidG9zdHJpbmciLCAoUHlDRnVuY3Rpb24pYXJyYXlfYXJyYXlfdG9zdHJpbmcsIE1FVEhfTk9BUkdTLCBhcnJheV9hcnJheV90b3N0cmluZ19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfdG9zdHJpbmdfaW1wbChhcnJheW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV90b3N0cmluZyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gYXJyYXlfYXJyYXlfdG9zdHJpbmdfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X2Zyb211bmljb2RlX19kb2NfXywKKyJmcm9tdW5pY29kZSgkc2VsZiwgdXN0ciwgLylcbiIKKyItLVxuIgorIlxuIgorIkV4dGVuZHMgdGhpcyBhcnJheSB3aXRoIGRhdGEgZnJvbSB0aGUgdW5pY29kZSBzdHJpbmcgdXN0ci5cbiIKKyJcbiIKKyJUaGUgYXJyYXkgbXVzdCBiZSBhIHVuaWNvZGUgdHlwZSBhcnJheTsgb3RoZXJ3aXNlIGEgVmFsdWVFcnJvciBpcyByYWlzZWQuXG4iCisiVXNlIGFycmF5LmZyb21ieXRlcyh1c3RyLmVuY29kZSguLi4pKSB0byBhcHBlbmQgVW5pY29kZSBkYXRhIHRvIGFuIGFycmF5IG9mXG4iCisic29tZSBvdGhlciB0eXBlLiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX0ZST01VTklDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJmcm9tdW5pY29kZSIsIChQeUNGdW5jdGlvbilhcnJheV9hcnJheV9mcm9tdW5pY29kZSwgTUVUSF9PLCBhcnJheV9hcnJheV9mcm9tdW5pY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfZnJvbXVuaWNvZGVfaW1wbChhcnJheW9iamVjdCAqc2VsZiwgUHlfVU5JQ09ERSAqdXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfY2xlYW5fdCB1c3RyX2xlbmd0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV9mcm9tdW5pY29kZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9VTklDT0RFICp1c3RyOworICAgIFB5X3NzaXplX2NsZWFuX3QgdXN0cl9sZW5ndGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInUjOmZyb211bmljb2RlIiwgJnVzdHIsICZ1c3RyX2xlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhcnJheV9hcnJheV9mcm9tdW5pY29kZV9pbXBsKHNlbGYsIHVzdHIsIHVzdHJfbGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXJyYXlfYXJyYXlfdG91bmljb2RlX19kb2NfXywKKyJ0b3VuaWNvZGUoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJFeHRlbmRzIHRoaXMgYXJyYXkgd2l0aCBkYXRhIGZyb20gdGhlIHVuaWNvZGUgc3RyaW5nIHVzdHIuXG4iCisiXG4iCisiQ29udmVydCB0aGUgYXJyYXkgdG8gYSB1bmljb2RlIHN0cmluZy4gIFRoZSBhcnJheSBtdXN0IGJlIGEgdW5pY29kZSB0eXBlIGFycmF5O1xuIgorIm90aGVyd2lzZSBhIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiAgVXNlIGFycmF5LnRvYnl0ZXMoKS5kZWNvZGUoKSB0byBvYnRhaW4gYVxuIgorInVuaWNvZGUgc3RyaW5nIGZyb20gYW4gYXJyYXkgb2Ygc29tZSBvdGhlciB0eXBlLiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX1RPVU5JQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsidG91bmljb2RlIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X3RvdW5pY29kZSwgTUVUSF9OT0FSR1MsIGFycmF5X2FycmF5X3RvdW5pY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfdG91bmljb2RlX2ltcGwoYXJyYXlvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlfdG91bmljb2RlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBhcnJheV9hcnJheV90b3VuaWNvZGVfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X19fc2l6ZW9mX19fX2RvY19fLAorIl9fc2l6ZW9mX18oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTaXplIG9mIHRoZSBhcnJheSBpbiBtZW1vcnksIGluIGJ5dGVzLiIpOworCisjZGVmaW5lIEFSUkFZX0FSUkFZX19fU0laRU9GX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pYXJyYXlfYXJyYXlfX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIGFycmF5X2FycmF5X19fc2l6ZW9mX19fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2FycmF5X19fc2l6ZW9mX19faW1wbChhcnJheW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheV9fX3NpemVvZl9fKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBhcnJheV9hcnJheV9fX3NpemVvZl9fX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihhcnJheV9fYXJyYXlfcmVjb25zdHJ1Y3Rvcl9fZG9jX18sCisiX2FycmF5X3JlY29uc3RydWN0b3IoJG1vZHVsZSwgYXJyYXl0eXBlLCB0eXBlY29kZSwgbWZvcm1hdF9jb2RlLCBpdGVtcyxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAvKVxuIgorIi0tXG4iCisiXG4iCisiSW50ZXJuYWwuIFVzZWQgZm9yIHBpY2tsaW5nIHN1cHBvcnQuIik7CisKKyNkZWZpbmUgQVJSQVlfX0FSUkFZX1JFQ09OU1RSVUNUT1JfTUVUSE9EREVGICAgIFwKKyAgICB7Il9hcnJheV9yZWNvbnN0cnVjdG9yIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X19hcnJheV9yZWNvbnN0cnVjdG9yLCBNRVRIX1ZBUkFSR1MsIGFycmF5X19hcnJheV9yZWNvbnN0cnVjdG9yX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9fYXJyYXlfcmVjb25zdHJ1Y3Rvcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5VHlwZU9iamVjdCAqYXJyYXl0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gbWFjaGluZV9mb3JtYXRfY29kZSBtZm9ybWF0X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9fYXJyYXlfcmVjb25zdHJ1Y3RvcihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeVR5cGVPYmplY3QgKmFycmF5dHlwZTsKKyAgICBpbnQgdHlwZWNvZGU7CisgICAgZW51bSBtYWNoaW5lX2Zvcm1hdF9jb2RlIG1mb3JtYXRfY29kZTsKKyAgICBQeU9iamVjdCAqaXRlbXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9DaU86X2FycmF5X3JlY29uc3RydWN0b3IiLAorICAgICAgICAmYXJyYXl0eXBlLCAmdHlwZWNvZGUsICZtZm9ybWF0X2NvZGUsICZpdGVtcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhcnJheV9fYXJyYXlfcmVjb25zdHJ1Y3Rvcl9pbXBsKG1vZHVsZSwgYXJyYXl0eXBlLCB0eXBlY29kZSwgbWZvcm1hdF9jb2RlLCBpdGVtcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGFycmF5X2FycmF5X19fcmVkdWNlX2V4X19fX2RvY19fLAorIl9fcmVkdWNlX2V4X18oJHNlbGYsIHZhbHVlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4iKTsKKworI2RlZmluZSBBUlJBWV9BUlJBWV9fX1JFRFVDRV9FWF9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX3JlZHVjZV9leF9fIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5X19fcmVkdWNlX2V4X18sIE1FVEhfTywgYXJyYXlfYXJyYXlfX19yZWR1Y2VfZXhfX19fZG9jX199LAorCitQeURvY19TVFJWQVIoYXJyYXlfYXJyYXlpdGVyYXRvcl9fX3JlZHVjZV9fX19kb2NfXywKKyJfX3JlZHVjZV9fKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4iKTsKKworI2RlZmluZSBBUlJBWV9BUlJBWUlURVJBVE9SX19fUkVEVUNFX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pYXJyYXlfYXJyYXlpdGVyYXRvcl9fX3JlZHVjZV9fLCBNRVRIX05PQVJHUywgYXJyYXlfYXJyYXlpdGVyYXRvcl9fX3JlZHVjZV9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithcnJheV9hcnJheWl0ZXJhdG9yX19fcmVkdWNlX19faW1wbChhcnJheWl0ZXJvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfYXJyYXlpdGVyYXRvcl9fX3JlZHVjZV9fKGFycmF5aXRlcm9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gYXJyYXlfYXJyYXlpdGVyYXRvcl9fX3JlZHVjZV9fX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihhcnJheV9hcnJheWl0ZXJhdG9yX19fc2V0c3RhdGVfX19fZG9jX18sCisiX19zZXRzdGF0ZV9fKCRzZWxmLCBzdGF0ZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdW5waWNrbGluZy4iKTsKKworI2RlZmluZSBBUlJBWV9BUlJBWUlURVJBVE9SX19fU0VUU1RBVEVfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19zZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKWFycmF5X2FycmF5aXRlcmF0b3JfX19zZXRzdGF0ZV9fLCBNRVRIX08sIGFycmF5X2FycmF5aXRlcmF0b3JfX19zZXRzdGF0ZV9fX19kb2NfX30sCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzA1ZGYzZjU3OTYwMzllNCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9hdWRpb29wLmMuaCBiL01vZHVsZXMvY2xpbmljL2F1ZGlvb3AuYy5oCmluZGV4IDQwZWY1ZTIuLjYyZTMxM2I1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2NsaW5pYy9hdWRpb29wLmMuaAorKysgYi9Nb2R1bGVzL2NsaW5pYy9hdWRpb29wLmMuaApAQCAtMTIsMTggKzEyLDE4IEBACiAgICAgeyJnZXRzYW1wbGUiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9nZXRzYW1wbGUsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9nZXRzYW1wbGVfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZ2V0c2FtcGxlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBQeV9zc2l6ZV90IGluZGV4KTsKK2F1ZGlvb3BfZ2V0c2FtcGxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4KTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZ2V0c2FtcGxlKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9nZXRzYW1wbGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OwogICAgIGludCB3aWR0aDsKICAgICBQeV9zc2l6ZV90IGluZGV4OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KmluOmdldHNhbXBsZSIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmluOmdldHNhbXBsZSIsCiAgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmaW5kZXgpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9nZXRzYW1wbGVfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGluZGV4KTsKQEAgLTQ2LDE3ICs0NiwxNiBAQAogICAgIHsibWF4IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbWF4LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWF4X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CithdWRpb29wX21heF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21heChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbWF4KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgd2lkdGg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqaTptYXgiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOm1heCIsCiAgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbWF4X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKQEAgLTc5LDE3ICs3OCwxNiBAQAogICAgIHsibWlubWF4IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbWlubWF4LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWlubWF4X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21pbm1heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CithdWRpb29wX21pbm1heF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21pbm1heChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbWlubWF4KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgd2lkdGg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqaTptaW5tYXgiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOm1pbm1heCIsCiAgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbWlubWF4X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKQEAgLTExMiwxNyArMTEwLDE2IEBACiAgICAgeyJhdmciLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9hdmcsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9hdmdfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYXZnX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKK2F1ZGlvb3BfYXZnX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYXZnKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hdmcoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OwogICAgIGludCB3aWR0aDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSppOmF2ZyIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6YXZnIiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9hdmdfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOwpAQCAtMTQ1LDE3ICsxNDIsMTYgQEAKICAgICB7InJtcyIsIChQeUNGdW5jdGlvbilhdWRpb29wX3JtcywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3Jtc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9ybXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworYXVkaW9vcF9ybXNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9ybXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3JtcyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5Kmk6cm1zIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpybXMiLAogICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3Jtc19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CkBAIC0xNzgsMTcgKzE3NCwxNyBAQAogICAgIHsiZmluZGZpdCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2ZpbmRmaXQsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9maW5kZml0X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2ZpbmRmaXRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9idWZmZXIgKnJlZmVyZW5jZSk7CithdWRpb29wX2ZpbmRmaXRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgUHlfYnVmZmVyICpyZWZlcmVuY2UpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9maW5kZml0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9maW5kZml0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKICAgICBQeV9idWZmZXIgcmVmZXJlbmNlID0ge05VTEwsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KnkqOmZpbmRmaXQiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp5KjpmaW5kZml0IiwKICAgICAgICAgJmZyYWdtZW50LCAmcmVmZXJlbmNlKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfZmluZGZpdF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCAmcmVmZXJlbmNlKTsKQEAgLTIxNCwxNyArMjEwLDE3IEBACiAgICAgeyJmaW5kZmFjdG9yIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfZmluZGZhY3RvciwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2ZpbmRmYWN0b3JfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZmluZGZhY3Rvcl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X2J1ZmZlciAqcmVmZXJlbmNlKTsKK2F1ZGlvb3BfZmluZGZhY3Rvcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9idWZmZXIgKnJlZmVyZW5jZSk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2ZpbmRmYWN0b3IoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2ZpbmRmYWN0b3IoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OwogICAgIFB5X2J1ZmZlciByZWZlcmVuY2UgPSB7TlVMTCwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqeSo6ZmluZGZhY3RvciIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqOmZpbmRmYWN0b3IiLAogICAgICAgICAmZnJhZ21lbnQsICZyZWZlcmVuY2UpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9maW5kZmFjdG9yX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsICZyZWZlcmVuY2UpOwpAQCAtMjUwLDE3ICsyNDYsMTcgQEAKICAgICB7ImZpbmRtYXgiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9maW5kbWF4LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfZmluZG1heF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9maW5kbWF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgUHlfc3NpemVfdCBsZW5ndGgpOworYXVkaW9vcF9maW5kbWF4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuZ3RoKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZmluZG1heChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfZmluZG1heChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgUHlfc3NpemVfdCBsZW5ndGg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqbjpmaW5kbWF4IiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqbjpmaW5kbWF4IiwKICAgICAgICAgJmZyYWdtZW50LCAmbGVuZ3RoKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfZmluZG1heF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCBsZW5ndGgpOwpAQCAtMjgzLDE3ICsyNzksMTYgQEAKICAgICB7ImF2Z3BwIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYXZncHAsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9hdmdwcF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hdmdwcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CithdWRpb29wX2F2Z3BwX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYXZncHAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2F2Z3BwKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgd2lkdGg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqaTphdmdwcCIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6YXZncHAiLAogICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2F2Z3BwX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKQEAgLTMxNiwxNyArMzExLDE2IEBACiAgICAgeyJtYXhwcCIsIChQeUNGdW5jdGlvbilhdWRpb29wX21heHBwLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWF4cHBfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbWF4cHBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworYXVkaW9vcF9tYXhwcF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21heHBwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9tYXhwcChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5Kmk6bWF4cHAiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOm1heHBwIiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9tYXhwcF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CkBAIC0zNDksMTcgKzM0MywxNiBAQAogICAgIHsiY3Jvc3MiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9jcm9zcywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2Nyb3NzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2Nyb3NzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKK2F1ZGlvb3BfY3Jvc3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9jcm9zcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfY3Jvc3MoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OwogICAgIGludCB3aWR0aDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSppOmNyb3NzIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpjcm9zcyIsCiAgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfY3Jvc3NfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOwpAQCAtMzgyLDE4ICszNzUsMTggQEAKICAgICB7Im11bCIsIChQeUNGdW5jdGlvbilhdWRpb29wX211bCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX211bF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tdWxfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBmYWN0b3IpOworYXVkaW9vcF9tdWxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgIGRvdWJsZSBmYWN0b3IpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tdWwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX211bChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogICAgIGRvdWJsZSBmYWN0b3I7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqaWQ6bXVsIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWQ6bXVsIiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZmYWN0b3IpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9tdWxfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGZhY3Rvcik7CkBAIC00MTYsMTAgKzQwOSwxMSBAQAogICAgIHsidG9tb25vIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfdG9tb25vLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfdG9tb25vX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3RvbW9ub19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGxmYWN0b3IsIGRvdWJsZSByZmFjdG9yKTsKK2F1ZGlvb3BfdG9tb25vX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF90b21vbm8oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3RvbW9ubyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CkBAIC00MjcsOCArNDIxLDcgQEAKICAgICBkb3VibGUgbGZhY3RvcjsKICAgICBkb3VibGUgcmZhY3RvcjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSppZGQ6dG9tb25vIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWRkOnRvbW9ubyIsCiAgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmbGZhY3RvciwgJnJmYWN0b3IpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF90b21vbm9faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGxmYWN0b3IsIHJmYWN0b3IpOwpAQCAtNDUxLDEwICs0NDQsMTEgQEAKICAgICB7InRvc3RlcmVvIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfdG9zdGVyZW8sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF90b3N0ZXJlb19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF90b3N0ZXJlb19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGxmYWN0b3IsIGRvdWJsZSByZmFjdG9yKTsKK2F1ZGlvb3BfdG9zdGVyZW9faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxmYWN0b3IsIGRvdWJsZSByZmFjdG9yKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfdG9zdGVyZW8oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3Rvc3RlcmVvKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKQEAgLTQ2Miw4ICs0NTYsNyBAQAogICAgIGRvdWJsZSBsZmFjdG9yOwogICAgIGRvdWJsZSByZmFjdG9yOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KmlkZDp0b3N0ZXJlbyIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlkZDp0b3N0ZXJlbyIsCiAgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmbGZhY3RvciwgJnJmYWN0b3IpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF90b3N0ZXJlb19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgbGZhY3RvciwgcmZhY3Rvcik7CkBAIC00ODYsMTggKzQ3OSwxOCBAQAogICAgIHsiYWRkIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYWRkLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYWRkX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2FkZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQxLCBQeV9idWZmZXIgKmZyYWdtZW50MiwgaW50IHdpZHRoKTsKK2F1ZGlvb3BfYWRkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudDEsCisgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqZnJhZ21lbnQyLCBpbnQgd2lkdGgpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hZGQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2FkZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQxID0ge05VTEwsIE5VTEx9OwogICAgIFB5X2J1ZmZlciBmcmFnbWVudDIgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KnkqaTphZGQiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp5Kmk6YWRkIiwKICAgICAgICAgJmZyYWdtZW50MSwgJmZyYWdtZW50MiwgJndpZHRoKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYWRkX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQxLCAmZnJhZ21lbnQyLCB3aWR0aCk7CkBAIC01MjMsMTggKzUxNiwxNyBAQAogICAgIHsiYmlhcyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2JpYXMsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9iaWFzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2JpYXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBiaWFzKTsKK2F1ZGlvb3BfYmlhc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IGJpYXMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9iaWFzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9iaWFzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGJpYXM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqaWk6YmlhcyIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlpOmJpYXMiLAogICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJmJpYXMpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9iaWFzX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBiaWFzKTsKQEAgLTU1NywxNyArNTQ5LDE2IEBACiAgICAgeyJyZXZlcnNlIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfcmV2ZXJzZSwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3JldmVyc2VfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfcmV2ZXJzZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CithdWRpb29wX3JldmVyc2VfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9yZXZlcnNlKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9yZXZlcnNlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgd2lkdGg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqaTpyZXZlcnNlIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpyZXZlcnNlIiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9yZXZlcnNlX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKQEAgLTU5MCwxNyArNTgxLDE2IEBACiAgICAgeyJieXRlc3dhcCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2J5dGVzd2FwLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYnl0ZXN3YXBfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYnl0ZXN3YXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworYXVkaW9vcF9ieXRlc3dhcF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2J5dGVzd2FwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9ieXRlc3dhcChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5Kmk6Ynl0ZXN3YXAiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmJ5dGVzd2FwIiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9ieXRlc3dhcF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CkBAIC02MjMsMTggKzYxMywxOCBAQAogICAgIHsibGluMmxpbiIsIChQeUNGdW5jdGlvbilhdWRpb29wX2xpbjJsaW4sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9saW4ybGluX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBuZXd3aWR0aCk7CithdWRpb29wX2xpbjJsaW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICBpbnQgbmV3d2lkdGgpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4ybGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9saW4ybGluKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IG5ld3dpZHRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KmlpOmxpbjJsaW4iLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppaTpsaW4ybGluIiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZuZXd3aWR0aCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIG5ld3dpZHRoKTsKQEAgLTY1OCwxMCArNjQ4LDEyIEBACiAgICAgeyJyYXRlY3YiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9yYXRlY3YsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9yYXRlY3ZfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfcmF0ZWN2X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgbmNoYW5uZWxzLCBpbnQgaW5yYXRlLCBpbnQgb3V0cmF0ZSwgUHlPYmplY3QgKnN0YXRlLCBpbnQgd2VpZ2h0QSwgaW50IHdlaWdodEIpOworYXVkaW9vcF9yYXRlY3ZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgIGludCBuY2hhbm5lbHMsIGludCBpbnJhdGUsIGludCBvdXRyYXRlLCBQeU9iamVjdCAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgIGludCB3ZWlnaHRBLCBpbnQgd2VpZ2h0Qik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3JhdGVjdihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfcmF0ZWN2KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKQEAgLTY3Myw4ICs2NjUsNyBAQAogICAgIGludCB3ZWlnaHRBID0gMTsKICAgICBpbnQgd2VpZ2h0QiA9IDA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqaWlpaU98aWk6cmF0ZWN2IiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWlpaU98aWk6cmF0ZWN2IiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZuY2hhbm5lbHMsICZpbnJhdGUsICZvdXRyYXRlLCAmc3RhdGUsICZ3ZWlnaHRBLCAmd2VpZ2h0QikpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3JhdGVjdl9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgbmNoYW5uZWxzLCBpbnJhdGUsIG91dHJhdGUsIHN0YXRlLCB3ZWlnaHRBLCB3ZWlnaHRCKTsKQEAgLTY5NywxNyArNjg4LDE2IEBACiAgICAgeyJsaW4ydWxhdyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2xpbjJ1bGF3LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMnVsYXdfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbGluMnVsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworYXVkaW9vcF9saW4ydWxhd19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJ1bGF3KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9saW4ydWxhdyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5Kmk6bGluMnVsYXciLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmxpbjJ1bGF3IiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9saW4ydWxhd19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CkBAIC03MzAsMTcgKzcyMCwxNiBAQAogICAgIHsidWxhdzJsaW4iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF91bGF3MmxpbiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3VsYXcybGluX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3VsYXcybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKK2F1ZGlvb3BfdWxhdzJsaW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF91bGF3MmxpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfdWxhdzJsaW4oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OwogICAgIGludCB3aWR0aDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSppOnVsYXcybGluIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTp1bGF3MmxpbiIsCiAgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfdWxhdzJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOwpAQCAtNzYzLDE3ICs3NTIsMTYgQEAKICAgICB7ImxpbjJhbGF3IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbGluMmFsYXcsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9saW4yYWxhd19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4yYWxhd19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CithdWRpb29wX2xpbjJhbGF3X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbGluMmFsYXcoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2xpbjJhbGF3KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgd2lkdGg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqaTpsaW4yYWxhdyIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6bGluMmFsYXciLAogICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJhbGF3X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKQEAgLTc5NiwxNyArNzg0LDE2IEBACiAgICAgeyJhbGF3MmxpbiIsIChQeUNGdW5jdGlvbilhdWRpb29wX2FsYXcybGluLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYWxhdzJsaW5fX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYWxhdzJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworYXVkaW9vcF9hbGF3Mmxpbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2FsYXcybGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hbGF3MmxpbihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5Kmk6YWxhdzJsaW4iLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmFsYXcybGluIiwKICAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9hbGF3Mmxpbl9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CkBAIC04MjksMTggKzgxNiwxOCBAQAogICAgIHsibGluMmFkcGNtIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbGluMmFkcGNtLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMmFkcGNtX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJhZHBjbV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlPYmplY3QgKnN0YXRlKTsKK2F1ZGlvb3BfbGluMmFkcGNtX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhdGUpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4yYWRwY20oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2xpbjJhZHBjbShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogICAgIFB5T2JqZWN0ICpzdGF0ZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSppTzpsaW4yYWRwY20iLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppTzpsaW4yYWRwY20iLAogICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJnN0YXRlKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbGluMmFkcGNtX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBzdGF0ZSk7CkBAIC04NjMsMTggKzg1MCwxOCBAQAogICAgIHsiYWRwY20ybGluIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYWRwY20ybGluLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYWRwY20ybGluX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2FkcGNtMmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlPYmplY3QgKnN0YXRlKTsKK2F1ZGlvb3BfYWRwY20ybGluX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhdGUpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hZHBjbTJsaW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2FkcGNtMmxpbihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CiAgICAgaW50IHdpZHRoOwogICAgIFB5T2JqZWN0ICpzdGF0ZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSppTzphZHBjbTJsaW4iLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppTzphZHBjbTJsaW4iLAogICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJnN0YXRlKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYWRwY20ybGluX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBzdGF0ZSk7CkBAIC04ODYsNCArODczLDQgQEAKIAogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9Ci0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmU4NDBiYmE1ZDQwYzJjZSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Mzg1ZmIwOWZhMjFhNjJjMCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9iaW5hc2NpaS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9iaW5hc2NpaS5jLmgKaW5kZXggZWY2NDZkZC4uZTIwY2FjMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbGluaWMvYmluYXNjaWkuYy5oCisrKyBiL01vZHVsZXMvY2xpbmljL2JpbmFzY2lpLmMuaApAQCAtOSwyMCArOSwxOCBAQAogIkRlY29kZSBhIGxpbmUgb2YgdXVlbmNvZGVkIGRhdGEuIik7CiAKICNkZWZpbmUgQklOQVNDSUlfQTJCX1VVX01FVEhPRERFRiAgICBcCi0gICAgeyJhMmJfdXUiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX3V1LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2EyYl91dV9fZG9jX199LAorICAgIHsiYTJiX3V1IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl91dSwgTUVUSF9PLCBiaW5hc2NpaV9hMmJfdXVfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2EyYl91dV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CitiaW5hc2NpaV9hMmJfdXVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX3V1KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYTJiX3V1KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgIk8mOmEyYl91dSIsCi0gICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOmEyYl91dSIsIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl91dV9pbXBsKG1vZHVsZSwgJmRhdGEpOwogCkBAIC00MSwyMCArMzksMTggQEAKICJVdWVuY29kZSBsaW5lIG9mIGRhdGEuIik7CiAKICNkZWZpbmUgQklOQVNDSUlfQjJBX1VVX01FVEhPRERFRiAgICBcCi0gICAgeyJiMmFfdXUiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX3V1LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2IyYV91dV9fZG9jX199LAorICAgIHsiYjJhX3V1IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV91dSwgTUVUSF9PLCBiaW5hc2NpaV9iMmFfdXVfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV91dV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CitiaW5hc2NpaV9iMmFfdXVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYjJhX3V1KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYjJhX3V1KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqOmIyYV91dSIsCi0gICAgICAgICZkYXRhKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInkqOmIyYV91dSIsICZkYXRhKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2IyYV91dV9pbXBsKG1vZHVsZSwgJmRhdGEpOwogCkBAIC03MywyMCArNjksMTggQEAKICJEZWNvZGUgYSBsaW5lIG9mIGJhc2U2NCBkYXRhLiIpOwogCiAjZGVmaW5lIEJJTkFTQ0lJX0EyQl9CQVNFNjRfTUVUSE9EREVGICAgIFwKLSAgICB7ImEyYl9iYXNlNjQiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX2Jhc2U2NCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9hMmJfYmFzZTY0X19kb2NfX30sCisgICAgeyJhMmJfYmFzZTY0IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl9iYXNlNjQsIE1FVEhfTywgYmluYXNjaWlfYTJiX2Jhc2U2NF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX2Jhc2U2NF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CitiaW5hc2NpaV9hMmJfYmFzZTY0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2EyYl9iYXNlNjQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9hMmJfYmFzZTY0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgIk8mOmEyYl9iYXNlNjQiLAotICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmZGF0YSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjphMmJfYmFzZTY0IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmRhdGEpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYTJiX2Jhc2U2NF9pbXBsKG1vZHVsZSwgJmRhdGEpOwogCkBAIC0xMDUsMjAgKzk5LDE4IEBACiAiQmFzZTY0LWNvZGUgbGluZSBvZiBkYXRhLiIpOwogCiAjZGVmaW5lIEJJTkFTQ0lJX0IyQV9CQVNFNjRfTUVUSE9EREVGICAgIFwKLSAgICB7ImIyYV9iYXNlNjQiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX2Jhc2U2NCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9iMmFfYmFzZTY0X19kb2NfX30sCisgICAgeyJiMmFfYmFzZTY0IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9iYXNlNjQsIE1FVEhfTywgYmluYXNjaWlfYjJhX2Jhc2U2NF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYjJhX2Jhc2U2NF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CitiaW5hc2NpaV9iMmFfYmFzZTY0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV9iYXNlNjQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9iMmFfYmFzZTY0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqOmIyYV9iYXNlNjQiLAotICAgICAgICAmZGF0YSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ5KjpiMmFfYmFzZTY0IiwgJmRhdGEpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX2Jhc2U2NF9pbXBsKG1vZHVsZSwgJmRhdGEpOwogCkBAIC0xMzcsMjAgKzEyOSwxOCBAQAogIkRlY29kZSAuaHF4IGNvZGluZy4iKTsKIAogI2RlZmluZSBCSU5BU0NJSV9BMkJfSFFYX01FVEhPRERFRiAgICBcCi0gICAgeyJhMmJfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl9ocXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYTJiX2hxeF9fZG9jX199LAorICAgIHsiYTJiX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfaHF4LCBNRVRIX08sIGJpbmFzY2lpX2EyYl9ocXhfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2EyYl9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworYmluYXNjaWlfYTJiX2hxeF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9hMmJfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYTJiX2hxeChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJPJjphMmJfaHF4IiwKLSAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmRhdGEpKQorICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyY6YTJiX2hxeCIsIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl9ocXhfaW1wbChtb2R1bGUsICZkYXRhKTsKIApAQCAtMTY5LDIwICsxNTksMTggQEAKICJCaW5oZXggUkxFLWNvZGUgYmluYXJ5IGRhdGEuIik7CiAKICNkZWZpbmUgQklOQVNDSUlfUkxFQ09ERV9IUVhfTUVUSE9EREVGICAgIFwKLSAgICB7InJsZWNvZGVfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX3JsZWNvZGVfaHF4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX3JsZWNvZGVfaHF4X19kb2NfX30sCisgICAgeyJybGVjb2RlX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9ybGVjb2RlX2hxeCwgTUVUSF9PLCBiaW5hc2NpaV9ybGVjb2RlX2hxeF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfcmxlY29kZV9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworYmluYXNjaWlfcmxlY29kZV9ocXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfcmxlY29kZV9ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9ybGVjb2RlX2hxeChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KjpybGVjb2RlX2hxeCIsCi0gICAgICAgICZkYXRhKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInkqOnJsZWNvZGVfaHF4IiwgJmRhdGEpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfcmxlY29kZV9ocXhfaW1wbChtb2R1bGUsICZkYXRhKTsKIApAQCAtMjAxLDIwICsxODksMTggQEAKICJFbmNvZGUgLmhxeCBkYXRhLiIpOwogCiAjZGVmaW5lIEJJTkFTQ0lJX0IyQV9IUVhfTUVUSE9EREVGICAgIFwKLSAgICB7ImIyYV9ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9iMmFfaHF4X19kb2NfX30sCisgICAgeyJiMmFfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9ocXgsIE1FVEhfTywgYmluYXNjaWlfYjJhX2hxeF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYjJhX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CitiaW5hc2NpaV9iMmFfaHF4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV9ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9iMmFfaHF4KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqOmIyYV9ocXgiLAotICAgICAgICAmZGF0YSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ5KjpiMmFfaHF4IiwgJmRhdGEpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX2hxeF9pbXBsKG1vZHVsZSwgJmRhdGEpOwogCkBAIC0yMzMsMjAgKzIxOSwxOCBAQAogIkRlY29kZSBoZXhiaW4gUkxFLWNvZGVkIHN0cmluZy4iKTsKIAogI2RlZmluZSBCSU5BU0NJSV9STEVERUNPREVfSFFYX01FVEhPRERFRiAgICBcCi0gICAgeyJybGVkZWNvZGVfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX3JsZWRlY29kZV9ocXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9fZG9jX199LAorICAgIHsicmxlZGVjb2RlX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9ybGVkZWNvZGVfaHF4LCBNRVRIX08sIGJpbmFzY2lpX3JsZWRlY29kZV9ocXhfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3JsZWRlY29kZV9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9ybGVkZWNvZGVfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfcmxlZGVjb2RlX2hxeChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KjpybGVkZWNvZGVfaHF4IiwKLSAgICAgICAgJmRhdGEpKQorICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAieSo6cmxlZGVjb2RlX2hxeCIsICZkYXRhKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX3JsZWRlY29kZV9ocXhfaW1wbChtb2R1bGUsICZkYXRhKTsKIApAQCAtMjY4LDIyICsyNTIsMjEgQEAKICAgICB7ImNyY19ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfY3JjX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9jcmNfaHF4X19kb2NfX30sCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWJpbmFzY2lpX2NyY19ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBjcmMpOworYmluYXNjaWlfY3JjX2hxeF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IGNyYyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9jcmNfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfY3JjX2hxeChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKICAgICB1bnNpZ25lZCBpbnQgY3JjOwogICAgIHVuc2lnbmVkIGludCBfcmV0dXJuX3ZhbHVlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5Kkk6Y3JjX2hxeCIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kkk6Y3JjX2hxeCIsCiAgICAgICAgICZkYXRhLCAmY3JjKSkKICAgICAgICAgZ290byBleGl0OwogICAgIF9yZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9jcmNfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSwgY3JjKTsKLSAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09ICh1bnNpZ25lZCBpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZylfcmV0dXJuX3ZhbHVlKTsKIApAQCAtMzA1LDIyICsyODgsMjEgQEAKICAgICB7ImNyYzMyIiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2NyYzMyLCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2NyYzMyX19kb2NfX30sCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWJpbmFzY2lpX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgY3JjKTsKK2JpbmFzY2lpX2NyYzMyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgY3JjKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2NyYzMyKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfY3JjMzIoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CiAgICAgdW5zaWduZWQgaW50IGNyYyA9IDA7CiAgICAgdW5zaWduZWQgaW50IF9yZXR1cm5fdmFsdWU7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqfEk6Y3JjMzIiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STpjcmMzMiIsCiAgICAgICAgICZkYXRhLCAmY3JjKSkKICAgICAgICAgZ290byBleGl0OwogICAgIF9yZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9jcmMzMl9pbXBsKG1vZHVsZSwgJmRhdGEsIGNyYyk7Ci0gICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAodW5zaWduZWQgaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpX3JldHVybl92YWx1ZSk7CiAKQEAgLTM0MiwyMCArMzI0LDE4IEBACiAiYXZhaWxhYmxlIGFzIFwiaGV4bGlmeSgpXCIuIik7CiAKICNkZWZpbmUgQklOQVNDSUlfQjJBX0hFWF9NRVRIT0RERUYgICAgXAotICAgIHsiYjJhX2hleCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfaGV4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2IyYV9oZXhfX2RvY19ffSwKKyAgICB7ImIyYV9oZXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX2hleCwgTUVUSF9PLCBiaW5hc2NpaV9iMmFfaGV4X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfaGV4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKK2JpbmFzY2lpX2IyYV9oZXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYjJhX2hleChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2IyYV9oZXgoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSo6YjJhX2hleCIsCi0gICAgICAgICZkYXRhKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInkqOmIyYV9oZXgiLCAmZGF0YSkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfaGV4X2ltcGwobW9kdWxlLCAmZGF0YSk7CiAKQEAgLTM3NiwyMCArMzU2LDE4IEBACiAiVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4iKTsKIAogI2RlZmluZSBCSU5BU0NJSV9IRVhMSUZZX01FVEhPRERFRiAgICBcCi0gICAgeyJoZXhsaWZ5IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2hleGxpZnksIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfaGV4bGlmeV9fZG9jX199LAorICAgIHsiaGV4bGlmeSIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9oZXhsaWZ5LCBNRVRIX08sIGJpbmFzY2lpX2hleGxpZnlfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2hleGxpZnlfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworYmluYXNjaWlfaGV4bGlmeV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9oZXhsaWZ5KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfaGV4bGlmeShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KjpoZXhsaWZ5IiwKLSAgICAgICAgJmRhdGEpKQorICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAieSo6aGV4bGlmeSIsICZkYXRhKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2hleGxpZnlfaW1wbChtb2R1bGUsICZkYXRhKTsKIApAQCAtNDExLDIwICszODksMTggQEAKICJUaGlzIGZ1bmN0aW9uIGlzIGFsc28gYXZhaWxhYmxlIGFzIFwidW5oZXhsaWZ5KClcIi4iKTsKIAogI2RlZmluZSBCSU5BU0NJSV9BMkJfSEVYX01FVEhPRERFRiAgICBcCi0gICAgeyJhMmJfaGV4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl9oZXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYTJiX2hleF9fZG9jX199LAorICAgIHsiYTJiX2hleCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfaGV4LCBNRVRIX08sIGJpbmFzY2lpX2EyYl9oZXhfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2EyYl9oZXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cik7CitiaW5hc2NpaV9hMmJfaGV4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX2hleChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl9oZXgoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgaGV4c3RyID0ge05VTEwsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJPJjphMmJfaGV4IiwKLSAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmhleHN0cikpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjphMmJfaGV4IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmhleHN0cikpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfaGV4X2ltcGwobW9kdWxlLCAmaGV4c3RyKTsKIApAQCAtNDQ1LDIwICs0MjEsMTggQEAKICJoZXhzdHIgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGhleCBkaWdpdHMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLiIpOwogCiAjZGVmaW5lIEJJTkFTQ0lJX1VOSEVYTElGWV9NRVRIT0RERUYgICAgXAotICAgIHsidW5oZXhsaWZ5IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX3VuaGV4bGlmeSwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV91bmhleGxpZnlfX2RvY19ffSwKKyAgICB7InVuaGV4bGlmeSIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV91bmhleGxpZnksIE1FVEhfTywgYmluYXNjaWlfdW5oZXhsaWZ5X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV91bmhleGxpZnlfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cik7CitiaW5hc2NpaV91bmhleGxpZnlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV91bmhleGxpZnkoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV91bmhleGxpZnkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgaGV4c3RyID0ge05VTEwsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJPJjp1bmhleGxpZnkiLAotICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmaGV4c3RyKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOnVuaGV4bGlmeSIsIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZoZXhzdHIpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfdW5oZXhsaWZ5X2ltcGwobW9kdWxlLCAmaGV4c3RyKTsKIApAQCAtNDgwLDE4ICs0NTQsMTcgQEAKICAgICB7ImEyYl9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfcXAsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBiaW5hc2NpaV9hMmJfcXBfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2EyYl9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IGhlYWRlcik7CitiaW5hc2NpaV9hMmJfcXBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBoZWFkZXIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX3FwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorYmluYXNjaWlfYTJiX3FwKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJoZWFkZXIiLCBOVUxMfTsKICAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgaGVhZGVyID0gMDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKLSAgICAgICAgIk8mfGk6YTJiX3FwIiwgX2tleXdvcmRzLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfGk6YTJiX3FwIiwgX2tleXdvcmRzLAogICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmZGF0YSwgJmhlYWRlcikpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfcXBfaW1wbChtb2R1bGUsICZkYXRhLCBoZWFkZXIpOwpAQCAtNTE4LDEwICs0OTEsMTEgQEAKICAgICB7ImIyYV9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfcXAsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBiaW5hc2NpaV9iMmFfcXBfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHF1b3RldGFicywgaW50IGlzdGV4dCwgaW50IGhlYWRlcik7CitiaW5hc2NpaV9iMmFfcXBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBxdW90ZXRhYnMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgaXN0ZXh0LCBpbnQgaGVhZGVyKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2IyYV9xcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK2JpbmFzY2lpX2IyYV9xcChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImRhdGEiLCAicXVvdGV0YWJzIiwgImlzdGV4dCIsICJoZWFkZXIiLCBOVUxMfTsKQEAgLTUzMCw4ICs1MDQsNyBAQAogICAgIGludCBpc3RleHQgPSAxOwogICAgIGludCBoZWFkZXIgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAieSp8aWlpOmIyYV9xcCIsIF9rZXl3b3JkcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ5KnxpaWk6YjJhX3FwIiwgX2tleXdvcmRzLAogICAgICAgICAmZGF0YSwgJnF1b3RldGFicywgJmlzdGV4dCwgJmhlYWRlcikpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfcXBfaW1wbChtb2R1bGUsICZkYXRhLCBxdW90ZXRhYnMsIGlzdGV4dCwgaGVhZGVyKTsKQEAgLTU0Myw0ICs1MTYsNCBAQAogCiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMjc2MWIzNmY0ZjllNWJiIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MTE3M2ZjOTcxOGE1ZWRjIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL2NtYXRobW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL2NtYXRobW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjU1MzUzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvY21hdGhtb2R1bGUuYy5oCkBAIC0wLDAgKzEsODYwIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoY21hdGhfYWNvc19fZG9jX18sCisiYWNvcygkbW9kdWxlLCB6LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBhcmMgY29zaW5lIG9mIHouIik7CisKKyNkZWZpbmUgQ01BVEhfQUNPU19NRVRIT0RERUYgICAgXAorICAgIHsiYWNvcyIsIChQeUNGdW5jdGlvbiljbWF0aF9hY29zLCBNRVRIX08sIGNtYXRoX2Fjb3NfX2RvY19ffSwKKworc3RhdGljIFB5X2NvbXBsZXgKK2NtYXRoX2Fjb3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopOworCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfYWNvcyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2NvbXBsZXggejsKKyAgICBQeV9jb21wbGV4IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkQ6YWNvcyIsICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIC8qIG1vZGlmaWNhdGlvbnMgZm9yIHogKi8KKyAgICBlcnJubyA9IDA7IFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCBnb3RvIGV4aXQpOworICAgIF9yZXR1cm5fdmFsdWUgPSBjbWF0aF9hY29zX2ltcGwobW9kdWxlLCB6KTsKKyAgICBQeUZQRV9FTkRfUFJPVEVDVChfcmV0dXJuX3ZhbHVlKTsKKyAgICBpZiAoZXJybm8gPT0gRURPTSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1hdGggZG9tYWluIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibWF0aCByYW5nZSBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm5fdmFsdWUgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KF9yZXR1cm5fdmFsdWUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoY21hdGhfYWNvc2hfX2RvY19fLAorImFjb3NoKCRtb2R1bGUsIHosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGludmVyc2UgaHlwZXJib2xpYyBjb3NpbmUgb2Ygei4iKTsKKworI2RlZmluZSBDTUFUSF9BQ09TSF9NRVRIT0RERUYgICAgXAorICAgIHsiYWNvc2giLCAoUHlDRnVuY3Rpb24pY21hdGhfYWNvc2gsIE1FVEhfTywgY21hdGhfYWNvc2hfX2RvY19ffSwKKworc3RhdGljIFB5X2NvbXBsZXgKK2NtYXRoX2Fjb3NoX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX2Fjb3NoKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworICAgIFB5X2NvbXBsZXggX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDphY29zaCIsICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIC8qIG1vZGlmaWNhdGlvbnMgZm9yIHogKi8KKyAgICBlcnJubyA9IDA7IFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCBnb3RvIGV4aXQpOworICAgIF9yZXR1cm5fdmFsdWUgPSBjbWF0aF9hY29zaF9pbXBsKG1vZHVsZSwgeik7CisgICAgUHlGUEVfRU5EX1BST1RFQ1QoX3JldHVybl92YWx1ZSk7CisgICAgaWYgKGVycm5vID09IEVET00pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgaWYgKGVycm5vID09IEVSQU5HRSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgIm1hdGggcmFuZ2UgZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChfcmV0dXJuX3ZhbHVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGNtYXRoX2FzaW5fX2RvY19fLAorImFzaW4oJG1vZHVsZSwgeiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgYXJjIHNpbmUgb2Ygei4iKTsKKworI2RlZmluZSBDTUFUSF9BU0lOX01FVEhPRERFRiAgICBcCisgICAgeyJhc2luIiwgKFB5Q0Z1bmN0aW9uKWNtYXRoX2FzaW4sIE1FVEhfTywgY21hdGhfYXNpbl9fZG9jX199LAorCitzdGF0aWMgUHlfY29tcGxleAorY21hdGhfYXNpbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjbWF0aF9hc2luKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworICAgIFB5X2NvbXBsZXggX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDphc2luIiwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgLyogbW9kaWZpY2F0aW9ucyBmb3IgeiAqLworICAgIGVycm5vID0gMDsgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleCBmdW5jdGlvbiIsIGdvdG8gZXhpdCk7CisgICAgX3JldHVybl92YWx1ZSA9IGNtYXRoX2FzaW5faW1wbChtb2R1bGUsIHopOworICAgIFB5RlBFX0VORF9QUk9URUNUKF9yZXR1cm5fdmFsdWUpOworICAgIGlmIChlcnJubyA9PSBFRE9NKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF0aCBkb21haW4gZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJtYXRoIHJhbmdlIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybl92YWx1ZSA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoX3JldHVybl92YWx1ZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9hc2luaF9fZG9jX18sCisiYXNpbmgoJG1vZHVsZSwgeiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgb2Ygei4iKTsKKworI2RlZmluZSBDTUFUSF9BU0lOSF9NRVRIT0RERUYgICAgXAorICAgIHsiYXNpbmgiLCAoUHlDRnVuY3Rpb24pY21hdGhfYXNpbmgsIE1FVEhfTywgY21hdGhfYXNpbmhfX2RvY19ffSwKKworc3RhdGljIFB5X2NvbXBsZXgKK2NtYXRoX2FzaW5oX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX2FzaW5oKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworICAgIFB5X2NvbXBsZXggX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDphc2luaCIsICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIC8qIG1vZGlmaWNhdGlvbnMgZm9yIHogKi8KKyAgICBlcnJubyA9IDA7IFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCBnb3RvIGV4aXQpOworICAgIF9yZXR1cm5fdmFsdWUgPSBjbWF0aF9hc2luaF9pbXBsKG1vZHVsZSwgeik7CisgICAgUHlGUEVfRU5EX1BST1RFQ1QoX3JldHVybl92YWx1ZSk7CisgICAgaWYgKGVycm5vID09IEVET00pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgaWYgKGVycm5vID09IEVSQU5HRSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgIm1hdGggcmFuZ2UgZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChfcmV0dXJuX3ZhbHVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGNtYXRoX2F0YW5fX2RvY19fLAorImF0YW4oJG1vZHVsZSwgeiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgYXJjIHRhbmdlbnQgb2Ygei4iKTsKKworI2RlZmluZSBDTUFUSF9BVEFOX01FVEhPRERFRiAgICBcCisgICAgeyJhdGFuIiwgKFB5Q0Z1bmN0aW9uKWNtYXRoX2F0YW4sIE1FVEhfTywgY21hdGhfYXRhbl9fZG9jX199LAorCitzdGF0aWMgUHlfY29tcGxleAorY21hdGhfYXRhbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjbWF0aF9hdGFuKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworICAgIFB5X2NvbXBsZXggX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDphdGFuIiwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgLyogbW9kaWZpY2F0aW9ucyBmb3IgeiAqLworICAgIGVycm5vID0gMDsgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleCBmdW5jdGlvbiIsIGdvdG8gZXhpdCk7CisgICAgX3JldHVybl92YWx1ZSA9IGNtYXRoX2F0YW5faW1wbChtb2R1bGUsIHopOworICAgIFB5RlBFX0VORF9QUk9URUNUKF9yZXR1cm5fdmFsdWUpOworICAgIGlmIChlcnJubyA9PSBFRE9NKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF0aCBkb21haW4gZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJtYXRoIHJhbmdlIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybl92YWx1ZSA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoX3JldHVybl92YWx1ZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9hdGFuaF9fZG9jX18sCisiYXRhbmgoJG1vZHVsZSwgeiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2Ygei4iKTsKKworI2RlZmluZSBDTUFUSF9BVEFOSF9NRVRIT0RERUYgICAgXAorICAgIHsiYXRhbmgiLCAoUHlDRnVuY3Rpb24pY21hdGhfYXRhbmgsIE1FVEhfTywgY21hdGhfYXRhbmhfX2RvY19ffSwKKworc3RhdGljIFB5X2NvbXBsZXgKK2NtYXRoX2F0YW5oX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX2F0YW5oKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworICAgIFB5X2NvbXBsZXggX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDphdGFuaCIsICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIC8qIG1vZGlmaWNhdGlvbnMgZm9yIHogKi8KKyAgICBlcnJubyA9IDA7IFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCBnb3RvIGV4aXQpOworICAgIF9yZXR1cm5fdmFsdWUgPSBjbWF0aF9hdGFuaF9pbXBsKG1vZHVsZSwgeik7CisgICAgUHlGUEVfRU5EX1BST1RFQ1QoX3JldHVybl92YWx1ZSk7CisgICAgaWYgKGVycm5vID09IEVET00pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgaWYgKGVycm5vID09IEVSQU5HRSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgIm1hdGggcmFuZ2UgZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChfcmV0dXJuX3ZhbHVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGNtYXRoX2Nvc19fZG9jX18sCisiY29zKCRtb2R1bGUsIHosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGNvc2luZSBvZiB6LiIpOworCisjZGVmaW5lIENNQVRIX0NPU19NRVRIT0RERUYgICAgXAorICAgIHsiY29zIiwgKFB5Q0Z1bmN0aW9uKWNtYXRoX2NvcywgTUVUSF9PLCBjbWF0aF9jb3NfX2RvY19ffSwKKworc3RhdGljIFB5X2NvbXBsZXgKK2NtYXRoX2Nvc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjbWF0aF9jb3MoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9jb21wbGV4IHo7CisgICAgUHlfY29tcGxleCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJEOmNvcyIsICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIC8qIG1vZGlmaWNhdGlvbnMgZm9yIHogKi8KKyAgICBlcnJubyA9IDA7IFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCBnb3RvIGV4aXQpOworICAgIF9yZXR1cm5fdmFsdWUgPSBjbWF0aF9jb3NfaW1wbChtb2R1bGUsIHopOworICAgIFB5RlBFX0VORF9QUk9URUNUKF9yZXR1cm5fdmFsdWUpOworICAgIGlmIChlcnJubyA9PSBFRE9NKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF0aCBkb21haW4gZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJtYXRoIHJhbmdlIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybl92YWx1ZSA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoX3JldHVybl92YWx1ZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9jb3NoX19kb2NfXywKKyJjb3NoKCRtb2R1bGUsIHosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHouIik7CisKKyNkZWZpbmUgQ01BVEhfQ09TSF9NRVRIT0RERUYgICAgXAorICAgIHsiY29zaCIsIChQeUNGdW5jdGlvbiljbWF0aF9jb3NoLCBNRVRIX08sIGNtYXRoX2Nvc2hfX2RvY19ffSwKKworc3RhdGljIFB5X2NvbXBsZXgKK2NtYXRoX2Nvc2hfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopOworCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfY29zaChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2NvbXBsZXggejsKKyAgICBQeV9jb21wbGV4IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkQ6Y29zaCIsICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIC8qIG1vZGlmaWNhdGlvbnMgZm9yIHogKi8KKyAgICBlcnJubyA9IDA7IFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCBnb3RvIGV4aXQpOworICAgIF9yZXR1cm5fdmFsdWUgPSBjbWF0aF9jb3NoX2ltcGwobW9kdWxlLCB6KTsKKyAgICBQeUZQRV9FTkRfUFJPVEVDVChfcmV0dXJuX3ZhbHVlKTsKKyAgICBpZiAoZXJybm8gPT0gRURPTSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1hdGggZG9tYWluIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibWF0aCByYW5nZSBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm5fdmFsdWUgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KF9yZXR1cm5fdmFsdWUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoY21hdGhfZXhwX19kb2NfXywKKyJleHAoJG1vZHVsZSwgeiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgZXhwb25lbnRpYWwgdmFsdWUgZSoqei4iKTsKKworI2RlZmluZSBDTUFUSF9FWFBfTUVUSE9EREVGICAgIFwKKyAgICB7ImV4cCIsIChQeUNGdW5jdGlvbiljbWF0aF9leHAsIE1FVEhfTywgY21hdGhfZXhwX19kb2NfX30sCisKK3N0YXRpYyBQeV9jb21wbGV4CitjbWF0aF9leHBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopOworCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfZXhwKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworICAgIFB5X2NvbXBsZXggX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDpleHAiLCAmeikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICAvKiBtb2RpZmljYXRpb25zIGZvciB6ICovCisgICAgZXJybm8gPSAwOyBQeUZQRV9TVEFSVF9QUk9URUNUKCJjb21wbGV4IGZ1bmN0aW9uIiwgZ290byBleGl0KTsKKyAgICBfcmV0dXJuX3ZhbHVlID0gY21hdGhfZXhwX2ltcGwobW9kdWxlLCB6KTsKKyAgICBQeUZQRV9FTkRfUFJPVEVDVChfcmV0dXJuX3ZhbHVlKTsKKyAgICBpZiAoZXJybm8gPT0gRURPTSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1hdGggZG9tYWluIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibWF0aCByYW5nZSBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm5fdmFsdWUgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KF9yZXR1cm5fdmFsdWUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoY21hdGhfbG9nMTBfX2RvY19fLAorImxvZzEwKCRtb2R1bGUsIHosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIHouIik7CisKKyNkZWZpbmUgQ01BVEhfTE9HMTBfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvZzEwIiwgKFB5Q0Z1bmN0aW9uKWNtYXRoX2xvZzEwLCBNRVRIX08sIGNtYXRoX2xvZzEwX19kb2NfX30sCisKK3N0YXRpYyBQeV9jb21wbGV4CitjbWF0aF9sb2cxMF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjbWF0aF9sb2cxMChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2NvbXBsZXggejsKKyAgICBQeV9jb21wbGV4IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkQ6bG9nMTAiLCAmeikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICAvKiBtb2RpZmljYXRpb25zIGZvciB6ICovCisgICAgZXJybm8gPSAwOyBQeUZQRV9TVEFSVF9QUk9URUNUKCJjb21wbGV4IGZ1bmN0aW9uIiwgZ290byBleGl0KTsKKyAgICBfcmV0dXJuX3ZhbHVlID0gY21hdGhfbG9nMTBfaW1wbChtb2R1bGUsIHopOworICAgIFB5RlBFX0VORF9QUk9URUNUKF9yZXR1cm5fdmFsdWUpOworICAgIGlmIChlcnJubyA9PSBFRE9NKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF0aCBkb21haW4gZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJtYXRoIHJhbmdlIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybl92YWx1ZSA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoX3JldHVybl92YWx1ZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9zaW5fX2RvY19fLAorInNpbigkbW9kdWxlLCB6LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBzaW5lIG9mIHouIik7CisKKyNkZWZpbmUgQ01BVEhfU0lOX01FVEhPRERFRiAgICBcCisgICAgeyJzaW4iLCAoUHlDRnVuY3Rpb24pY21hdGhfc2luLCBNRVRIX08sIGNtYXRoX3Npbl9fZG9jX199LAorCitzdGF0aWMgUHlfY29tcGxleAorY21hdGhfc2luX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX3NpbihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2NvbXBsZXggejsKKyAgICBQeV9jb21wbGV4IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkQ6c2luIiwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgLyogbW9kaWZpY2F0aW9ucyBmb3IgeiAqLworICAgIGVycm5vID0gMDsgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleCBmdW5jdGlvbiIsIGdvdG8gZXhpdCk7CisgICAgX3JldHVybl92YWx1ZSA9IGNtYXRoX3Npbl9pbXBsKG1vZHVsZSwgeik7CisgICAgUHlGUEVfRU5EX1BST1RFQ1QoX3JldHVybl92YWx1ZSk7CisgICAgaWYgKGVycm5vID09IEVET00pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgaWYgKGVycm5vID09IEVSQU5HRSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgIm1hdGggcmFuZ2UgZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChfcmV0dXJuX3ZhbHVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGNtYXRoX3NpbmhfX2RvY19fLAorInNpbmgoJG1vZHVsZSwgeiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIHouIik7CisKKyNkZWZpbmUgQ01BVEhfU0lOSF9NRVRIT0RERUYgICAgXAorICAgIHsic2luaCIsIChQeUNGdW5jdGlvbiljbWF0aF9zaW5oLCBNRVRIX08sIGNtYXRoX3NpbmhfX2RvY19ffSwKKworc3RhdGljIFB5X2NvbXBsZXgKK2NtYXRoX3NpbmhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopOworCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfc2luaChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2NvbXBsZXggejsKKyAgICBQeV9jb21wbGV4IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkQ6c2luaCIsICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIC8qIG1vZGlmaWNhdGlvbnMgZm9yIHogKi8KKyAgICBlcnJubyA9IDA7IFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCBnb3RvIGV4aXQpOworICAgIF9yZXR1cm5fdmFsdWUgPSBjbWF0aF9zaW5oX2ltcGwobW9kdWxlLCB6KTsKKyAgICBQeUZQRV9FTkRfUFJPVEVDVChfcmV0dXJuX3ZhbHVlKTsKKyAgICBpZiAoZXJybm8gPT0gRURPTSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1hdGggZG9tYWluIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibWF0aCByYW5nZSBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm5fdmFsdWUgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KF9yZXR1cm5fdmFsdWUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoY21hdGhfc3FydF9fZG9jX18sCisic3FydCgkbW9kdWxlLCB6LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB6LiIpOworCisjZGVmaW5lIENNQVRIX1NRUlRfTUVUSE9EREVGICAgIFwKKyAgICB7InNxcnQiLCAoUHlDRnVuY3Rpb24pY21hdGhfc3FydCwgTUVUSF9PLCBjbWF0aF9zcXJ0X19kb2NfX30sCisKK3N0YXRpYyBQeV9jb21wbGV4CitjbWF0aF9zcXJ0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX3NxcnQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9jb21wbGV4IHo7CisgICAgUHlfY29tcGxleCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJEOnNxcnQiLCAmeikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICAvKiBtb2RpZmljYXRpb25zIGZvciB6ICovCisgICAgZXJybm8gPSAwOyBQeUZQRV9TVEFSVF9QUk9URUNUKCJjb21wbGV4IGZ1bmN0aW9uIiwgZ290byBleGl0KTsKKyAgICBfcmV0dXJuX3ZhbHVlID0gY21hdGhfc3FydF9pbXBsKG1vZHVsZSwgeik7CisgICAgUHlGUEVfRU5EX1BST1RFQ1QoX3JldHVybl92YWx1ZSk7CisgICAgaWYgKGVycm5vID09IEVET00pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgaWYgKGVycm5vID09IEVSQU5HRSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgIm1hdGggcmFuZ2UgZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChfcmV0dXJuX3ZhbHVlKTsKKyAgICB9CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGNtYXRoX3Rhbl9fZG9jX18sCisidGFuKCRtb2R1bGUsIHosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHRhbmdlbnQgb2Ygei4iKTsKKworI2RlZmluZSBDTUFUSF9UQU5fTUVUSE9EREVGICAgIFwKKyAgICB7InRhbiIsIChQeUNGdW5jdGlvbiljbWF0aF90YW4sIE1FVEhfTywgY21hdGhfdGFuX19kb2NfX30sCisKK3N0YXRpYyBQeV9jb21wbGV4CitjbWF0aF90YW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopOworCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfdGFuKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworICAgIFB5X2NvbXBsZXggX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDp0YW4iLCAmeikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICAvKiBtb2RpZmljYXRpb25zIGZvciB6ICovCisgICAgZXJybm8gPSAwOyBQeUZQRV9TVEFSVF9QUk9URUNUKCJjb21wbGV4IGZ1bmN0aW9uIiwgZ290byBleGl0KTsKKyAgICBfcmV0dXJuX3ZhbHVlID0gY21hdGhfdGFuX2ltcGwobW9kdWxlLCB6KTsKKyAgICBQeUZQRV9FTkRfUFJPVEVDVChfcmV0dXJuX3ZhbHVlKTsKKyAgICBpZiAoZXJybm8gPT0gRURPTSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1hdGggZG9tYWluIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibWF0aCByYW5nZSBlcnJvciIpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm5fdmFsdWUgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KF9yZXR1cm5fdmFsdWUpOworICAgIH0KKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoY21hdGhfdGFuaF9fZG9jX18sCisidGFuaCgkbW9kdWxlLCB6LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2Ygei4iKTsKKworI2RlZmluZSBDTUFUSF9UQU5IX01FVEhPRERFRiAgICBcCisgICAgeyJ0YW5oIiwgKFB5Q0Z1bmN0aW9uKWNtYXRoX3RhbmgsIE1FVEhfTywgY21hdGhfdGFuaF9fZG9jX199LAorCitzdGF0aWMgUHlfY29tcGxleAorY21hdGhfdGFuaF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjbWF0aF90YW5oKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworICAgIFB5X2NvbXBsZXggX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDp0YW5oIiwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgLyogbW9kaWZpY2F0aW9ucyBmb3IgeiAqLworICAgIGVycm5vID0gMDsgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleCBmdW5jdGlvbiIsIGdvdG8gZXhpdCk7CisgICAgX3JldHVybl92YWx1ZSA9IGNtYXRoX3RhbmhfaW1wbChtb2R1bGUsIHopOworICAgIFB5RlBFX0VORF9QUk9URUNUKF9yZXR1cm5fdmFsdWUpOworICAgIGlmIChlcnJubyA9PSBFRE9NKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF0aCBkb21haW4gZXJyb3IiKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJtYXRoIHJhbmdlIGVycm9yIik7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybl92YWx1ZSA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoX3JldHVybl92YWx1ZSk7CisgICAgfQorCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9sb2dfX2RvY19fLAorImxvZygkbW9kdWxlLCB4LCB5X29iaj1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVGhlIGxvZ2FyaXRobSBvZiB6IHRvIHRoZSBnaXZlbiBiYXNlLlxuIgorIlxuIgorIklmIHRoZSBiYXNlIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIChiYXNlIGUpIG9mIHouIik7CisKKyNkZWZpbmUgQ01BVEhfTE9HX01FVEhPRERFRiAgICBcCisgICAgeyJsb2ciLCAoUHlDRnVuY3Rpb24pY21hdGhfbG9nLCBNRVRIX1ZBUkFSR1MsIGNtYXRoX2xvZ19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfbG9nX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB4LCBQeU9iamVjdCAqeV9vYmopOworCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfbG9nKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2NvbXBsZXggeDsKKyAgICBQeU9iamVjdCAqeV9vYmogPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJEfE86bG9nIiwKKyAgICAgICAgJngsICZ5X29iaikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBjbWF0aF9sb2dfaW1wbChtb2R1bGUsIHgsIHlfb2JqKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoY21hdGhfcGhhc2VfX2RvY19fLAorInBoYXNlKCRtb2R1bGUsIHosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYXJndW1lbnQsIGFsc28ga25vd24gYXMgdGhlIHBoYXNlIGFuZ2xlLCBvZiBhIGNvbXBsZXguIik7CisKKyNkZWZpbmUgQ01BVEhfUEhBU0VfTUVUSE9EREVGICAgIFwKKyAgICB7InBoYXNlIiwgKFB5Q0Z1bmN0aW9uKWNtYXRoX3BoYXNlLCBNRVRIX08sIGNtYXRoX3BoYXNlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitjbWF0aF9waGFzZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjbWF0aF9waGFzZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2NvbXBsZXggejsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiRDpwaGFzZSIsICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGNtYXRoX3BoYXNlX2ltcGwobW9kdWxlLCB6KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoY21hdGhfcG9sYXJfX2RvY19fLAorInBvbGFyKCRtb2R1bGUsIHosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IGEgY29tcGxleCBmcm9tIHJlY3Rhbmd1bGFyIGNvb3JkaW5hdGVzIHRvIHBvbGFyIGNvb3JkaW5hdGVzLlxuIgorIlxuIgorInIgaXMgdGhlIGRpc3RhbmNlIGZyb20gMCBhbmQgcGhpIHRoZSBwaGFzZSBhbmdsZS4iKTsKKworI2RlZmluZSBDTUFUSF9QT0xBUl9NRVRIT0RERUYgICAgXAorICAgIHsicG9sYXIiLCAoUHlDRnVuY3Rpb24pY21hdGhfcG9sYXIsIE1FVEhfTywgY21hdGhfcG9sYXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX3BvbGFyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX3BvbGFyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJEOnBvbGFyIiwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gY21hdGhfcG9sYXJfaW1wbChtb2R1bGUsIHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9yZWN0X19kb2NfXywKKyJyZWN0KCRtb2R1bGUsIHIsIHBoaSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgZnJvbSBwb2xhciBjb29yZGluYXRlcyB0byByZWN0YW5ndWxhciBjb29yZGluYXRlcy4iKTsKKworI2RlZmluZSBDTUFUSF9SRUNUX01FVEhPRERFRiAgICBcCisgICAgeyJyZWN0IiwgKFB5Q0Z1bmN0aW9uKWNtYXRoX3JlY3QsIE1FVEhfVkFSQVJHUywgY21hdGhfcmVjdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfcmVjdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGRvdWJsZSByLCBkb3VibGUgcGhpKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX3JlY3QoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgZG91YmxlIHI7CisgICAgZG91YmxlIHBoaTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZGQ6cmVjdCIsCisgICAgICAgICZyLCAmcGhpKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGNtYXRoX3JlY3RfaW1wbChtb2R1bGUsIHIsIHBoaSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGNtYXRoX2lzZmluaXRlX19kb2NfXywKKyJpc2Zpbml0ZSgkbW9kdWxlLCB6LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgYm90aCB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIHogYXJlIGZpbml0ZSwgZWxzZSBGYWxzZS4iKTsKKworI2RlZmluZSBDTUFUSF9JU0ZJTklURV9NRVRIT0RERUYgICAgXAorICAgIHsiaXNmaW5pdGUiLCAoUHlDRnVuY3Rpb24pY21hdGhfaXNmaW5pdGUsIE1FVEhfTywgY21hdGhfaXNmaW5pdGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX2lzZmluaXRlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX2lzZmluaXRlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJEOmlzZmluaXRlIiwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gY21hdGhfaXNmaW5pdGVfaW1wbChtb2R1bGUsIHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9pc25hbl9fZG9jX18sCisiaXNuYW4oJG1vZHVsZSwgeiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNoZWNrcyBpZiB0aGUgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBvZiB6IG5vdCBhIG51bWJlciAoTmFOKS4iKTsKKworI2RlZmluZSBDTUFUSF9JU05BTl9NRVRIT0RERUYgICAgXAorICAgIHsiaXNuYW4iLCAoUHlDRnVuY3Rpb24pY21hdGhfaXNuYW4sIE1FVEhfTywgY21hdGhfaXNuYW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX2lzbmFuX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX2lzbmFuKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfY29tcGxleCB6OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJEOmlzbmFuIiwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gY21hdGhfaXNuYW5faW1wbChtb2R1bGUsIHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9pc2luZl9fZG9jX18sCisiaXNpbmYoJG1vZHVsZSwgeiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNoZWNrcyBpZiB0aGUgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBvZiB6IGlzIGluZmluaXRlLiIpOworCisjZGVmaW5lIENNQVRIX0lTSU5GX01FVEhPRERFRiAgICBcCisgICAgeyJpc2luZiIsIChQeUNGdW5jdGlvbiljbWF0aF9pc2luZiwgTUVUSF9PLCBjbWF0aF9pc2luZl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfaXNpbmZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopOworCitzdGF0aWMgUHlPYmplY3QgKgorY21hdGhfaXNpbmYoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9jb21wbGV4IHo7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkQ6aXNpbmYiLCAmeikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBjbWF0aF9pc2luZl9pbXBsKG1vZHVsZSwgeik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGNtYXRoX2lzY2xvc2VfX2RvY19fLAorImlzY2xvc2UoJG1vZHVsZSwgLywgYSwgYiwgKiwgcmVsX3RvbD0xZS0wOSwgYWJzX3RvbD0wLjApXG4iCisiLS1cbiIKKyJcbiIKKyJEZXRlcm1pbmUgd2hldGhlciB0d28gY29tcGxleCBudW1iZXJzIGFyZSBjbG9zZSBpbiB2YWx1ZS5cbiIKKyJcbiIKKyIgIHJlbF90b2xcbiIKKyIgICAgbWF4aW11bSBkaWZmZXJlbmNlIGZvciBiZWluZyBjb25zaWRlcmVkIFwiY2xvc2VcIiwgcmVsYXRpdmUgdG8gdGhlXG4iCisiICAgIG1hZ25pdHVkZSBvZiB0aGUgaW5wdXQgdmFsdWVzXG4iCisiICBhYnNfdG9sXG4iCisiICAgIG1heGltdW0gZGlmZmVyZW5jZSBmb3IgYmVpbmcgY29uc2lkZXJlZCBcImNsb3NlXCIsIHJlZ2FyZGxlc3Mgb2YgdGhlXG4iCisiICAgIG1hZ25pdHVkZSBvZiB0aGUgaW5wdXQgdmFsdWVzXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgYSBpcyBjbG9zZSBpbiB2YWx1ZSB0byBiLCBhbmQgRmFsc2Ugb3RoZXJ3aXNlLlxuIgorIlxuIgorIkZvciB0aGUgdmFsdWVzIHRvIGJlIGNvbnNpZGVyZWQgY2xvc2UsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBtdXN0IGJlXG4iCisic21hbGxlciB0aGFuIGF0IGxlYXN0IG9uZSBvZiB0aGUgdG9sZXJhbmNlcy5cbiIKKyJcbiIKKyItaW5mLCBpbmYgYW5kIE5hTiBiZWhhdmUgc2ltaWxhcmx5IHRvIHRoZSBJRUVFIDc1NCBTdGFuZGFyZC4gVGhhdCBpcywgTmFOIGlzXG4iCisibm90IGNsb3NlIHRvIGFueXRoaW5nLCBldmVuIGl0c2VsZi4gaW5mIGFuZCAtaW5mIGFyZSBvbmx5IGNsb3NlIHRvIHRoZW1zZWx2ZXMuIik7CisKKyNkZWZpbmUgQ01BVEhfSVNDTE9TRV9NRVRIT0RERUYgICAgXAorICAgIHsiaXNjbG9zZSIsIChQeUNGdW5jdGlvbiljbWF0aF9pc2Nsb3NlLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgY21hdGhfaXNjbG9zZV9fZG9jX199LAorCitzdGF0aWMgaW50CitjbWF0aF9pc2Nsb3NlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCBhLCBQeV9jb21wbGV4IGIsCisgICAgICAgICAgICAgICAgICAgZG91YmxlIHJlbF90b2wsIGRvdWJsZSBhYnNfdG9sKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NtYXRoX2lzY2xvc2UoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJhIiwgImIiLCAicmVsX3RvbCIsICJhYnNfdG9sIiwgTlVMTH07CisgICAgUHlfY29tcGxleCBhOworICAgIFB5X2NvbXBsZXggYjsKKyAgICBkb3VibGUgcmVsX3RvbCA9IDFlLTA5OworICAgIGRvdWJsZSBhYnNfdG9sID0gMC4wOworICAgIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiRER8JGRkOmlzY2xvc2UiLCBfa2V5d29yZHMsCisgICAgICAgICZhLCAmYiwgJnJlbF90b2wsICZhYnNfdG9sKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBjbWF0aF9pc2Nsb3NlX2ltcGwobW9kdWxlLCBhLCBiLCByZWxfdG9sLCBhYnNfdG9sKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03MzIxOTQwMjliN2ZiMWU3IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL2ZjbnRsbW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL2ZjbnRsbW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzY2MGViCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvZmNudGxtb2R1bGUuYy5oCkBAIC0wLDAgKzEsMTg1IEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoZmNudGxfZmNudGxfX2RvY19fLAorImZjbnRsKCRtb2R1bGUsIGZkLCBjbWQsIGFyZz0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUGVyZm9ybSB0aGUgb3BlcmF0aW9uIGBjbWRgIG9uIGZpbGUgZGVzY3JpcHRvciBmZC5cbiIKKyJcbiIKKyJUaGUgdmFsdWVzIHVzZWQgZm9yIGBjbWRgIGFyZSBvcGVyYXRpbmcgc3lzdGVtIGRlcGVuZGVudCwgYW5kIGFyZSBhdmFpbGFibGVcbiIKKyJhcyBjb25zdGFudHMgaW4gdGhlIGZjbnRsIG1vZHVsZSwgdXNpbmcgdGhlIHNhbWUgbmFtZXMgYXMgdXNlZCBpblxuIgorInRoZSByZWxldmFudCBDIGhlYWRlciBmaWxlcy4gIFRoZSBhcmd1bWVudCBhcmcgaXMgb3B0aW9uYWwsIGFuZFxuIgorImRlZmF1bHRzIHRvIDA7IGl0IG1heSBiZSBhbiBpbnQgb3IgYSBzdHJpbmcuICBJZiBhcmcgaXMgZ2l2ZW4gYXMgYSBzdHJpbmcsXG4iCisidGhlIHJldHVybiB2YWx1ZSBvZiBmY250bCBpcyBhIHN0cmluZyBvZiB0aGF0IGxlbmd0aCwgY29udGFpbmluZyB0aGVcbiIKKyJyZXN1bHRpbmcgdmFsdWUgcHV0IGluIHRoZSBhcmcgYnVmZmVyIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIGxlbmd0aFxuIgorIm9mIHRoZSBhcmcgc3RyaW5nIGlzIG5vdCBhbGxvd2VkIHRvIGV4Y2VlZCAxMDI0IGJ5dGVzLiAgSWYgdGhlIGFyZyBnaXZlblxuIgorImlzIGFuIGludGVnZXIgb3IgaWYgbm9uZSBpcyBzcGVjaWZpZWQsIHRoZSByZXN1bHQgdmFsdWUgaXMgYW4gaW50ZWdlclxuIgorImNvcnJlc3BvbmRpbmcgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmNudGwgY2FsbCBpbiB0aGUgQyBjb2RlLiIpOworCisjZGVmaW5lIEZDTlRMX0ZDTlRMX01FVEhPRERFRiAgICBcCisgICAgeyJmY250bCIsIChQeUNGdW5jdGlvbilmY250bF9mY250bCwgTUVUSF9WQVJBUkdTLCBmY250bF9mY250bF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZmNudGxfZmNudGxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBjb2RlLCBQeU9iamVjdCAqYXJnKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2ZjbnRsX2ZjbnRsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBpbnQgY29kZTsKKyAgICBQeU9iamVjdCAqYXJnID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpfE86ZmNudGwiLAorICAgICAgICBjb252X2Rlc2NyaXB0b3IsICZmZCwgJmNvZGUsICZhcmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZmNudGxfZmNudGxfaW1wbChtb2R1bGUsIGZkLCBjb2RlLCBhcmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihmY250bF9pb2N0bF9fZG9jX18sCisiaW9jdGwoJG1vZHVsZSwgZmQsIHJlcXVlc3QsIGFyZz0wLCBtdXRhdGVfZmxhZz1UcnVlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUGVyZm9ybSB0aGUgb3BlcmF0aW9uIGByZXF1ZXN0YCBvbiBmaWxlIGRlc2NyaXB0b3IgYGZkYC5cbiIKKyJcbiIKKyJUaGUgdmFsdWVzIHVzZWQgZm9yIGByZXF1ZXN0YCBhcmUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQsIGFuZCBhcmUgYXZhaWxhYmxlXG4iCisiYXMgY29uc3RhbnRzIGluIHRoZSBmY250bCBvciB0ZXJtaW9zIGxpYnJhcnkgbW9kdWxlcywgdXNpbmcgdGhlIHNhbWUgbmFtZXMgYXNcbiIKKyJ1c2VkIGluIHRoZSByZWxldmFudCBDIGhlYWRlciBmaWxlcy5cbiIKKyJcbiIKKyJUaGUgYXJndW1lbnQgYGFyZ2AgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byAwOyBpdCBtYXkgYmUgYW4gaW50IG9yIGFcbiIKKyJidWZmZXIgY29udGFpbmluZyBjaGFyYWN0ZXIgZGF0YSAobW9zdCBsaWtlbHkgYSBzdHJpbmcgb3IgYW4gYXJyYXkpLlxuIgorIlxuIgorIklmIHRoZSBhcmd1bWVudCBpcyBhIG11dGFibGUgYnVmZmVyIChzdWNoIGFzIGFuIGFycmF5KSBhbmQgaWYgdGhlXG4iCisibXV0YXRlX2ZsYWcgYXJndW1lbnQgKHdoaWNoIGlzIG9ubHkgYWxsb3dlZCBpbiB0aGlzIGNhc2UpIGlzIHRydWUgdGhlbiB0aGVcbiIKKyJidWZmZXIgaXMgKGluIGVmZmVjdCkgcGFzc2VkIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCBjaGFuZ2VzIG1hZGUgYnlcbiIKKyJ0aGUgT1Mgd2lsbCBiZSByZWZsZWN0ZWQgaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIGNhbGwgaGFzXG4iCisicmV0dXJuZWQuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHJldHVybmVkIGJ5IHRoZSBpb2N0bCBzeXN0ZW1cbiIKKyJjYWxsLlxuIgorIlxuIgorIklmIHRoZSBhcmd1bWVudCBpcyBhIG11dGFibGUgYnVmZmVyIGFuZCB0aGUgbXV0YWJsZV9mbGFnIGFyZ3VtZW50IGlzIGZhbHNlLFxuIgorInRoZSBiZWhhdmlvciBpcyBhcyBpZiBhIHN0cmluZyBoYWQgYmVlbiBwYXNzZWQuXG4iCisiXG4iCisiSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGltbXV0YWJsZSBidWZmZXIgKG1vc3QgbGlrZWx5IGEgc3RyaW5nKSB0aGVuIGEgY29weVxuIgorIm9mIHRoZSBidWZmZXIgaXMgcGFzc2VkIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFcbiIKKyJzdHJpbmcgb2YgdGhlIHNhbWUgbGVuZ3RoIGNvbnRhaW5pbmcgd2hhdGV2ZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gcHV0IGluXG4iCisidGhlIGJ1ZmZlci4gIFRoZSBsZW5ndGggb2YgdGhlIGFyZyBidWZmZXIgaW4gdGhpcyBjYXNlIGlzIG5vdCBhbGxvd2VkIHRvXG4iCisiZXhjZWVkIDEwMjQgYnl0ZXMuXG4iCisiXG4iCisiSWYgdGhlIGFyZyBnaXZlbiBpcyBhbiBpbnRlZ2VyIG9yIGlmIG5vbmUgaXMgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IHZhbHVlIGlzXG4iCisiYW4gaW50ZWdlciBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGlvY3RsIGNhbGwgaW4gdGhlIENcbiIKKyJjb2RlLiIpOworCisjZGVmaW5lIEZDTlRMX0lPQ1RMX01FVEhPRERFRiAgICBcCisgICAgeyJpb2N0bCIsIChQeUNGdW5jdGlvbilmY250bF9pb2N0bCwgTUVUSF9WQVJBUkdTLCBmY250bF9pb2N0bF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZmNudGxfaW9jdGxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIHVuc2lnbmVkIGludCBjb2RlLAorICAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JfYXJnLCBpbnQgbXV0YXRlX2FyZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitmY250bF9pb2N0bChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgdW5zaWduZWQgaW50IGNvZGU7CisgICAgUHlPYmplY3QgKm9iX2FyZyA9IE5VTEw7CisgICAgaW50IG11dGF0ZV9hcmcgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJkl8T3A6aW9jdGwiLAorICAgICAgICBjb252X2Rlc2NyaXB0b3IsICZmZCwgJmNvZGUsICZvYl9hcmcsICZtdXRhdGVfYXJnKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGZjbnRsX2lvY3RsX2ltcGwobW9kdWxlLCBmZCwgY29kZSwgb2JfYXJnLCBtdXRhdGVfYXJnKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoZmNudGxfZmxvY2tfX2RvY19fLAorImZsb2NrKCRtb2R1bGUsIGZkLCBvcGVyYXRpb24sIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQZXJmb3JtIHRoZSBsb2NrIG9wZXJhdGlvbiBgb3BlcmF0aW9uYCBvbiBmaWxlIGRlc2NyaXB0b3IgYGZkYC5cbiIKKyJcbiIKKyJTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UgZm9yIGZsb2NrKDIpIGZvciBkZXRhaWxzIChPbiBzb21lIHN5c3RlbXMsIHRoaXNcbiIKKyJmdW5jdGlvbiBpcyBlbXVsYXRlZCB1c2luZyBmY250bCgpKS4iKTsKKworI2RlZmluZSBGQ05UTF9GTE9DS19NRVRIT0RERUYgICAgXAorICAgIHsiZmxvY2siLCAoUHlDRnVuY3Rpb24pZmNudGxfZmxvY2ssIE1FVEhfVkFSQVJHUywgZmNudGxfZmxvY2tfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2ZjbnRsX2Zsb2NrX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBpbnQgY29kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitmY250bF9mbG9jayhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgaW50IGNvZGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpmbG9jayIsCisgICAgICAgIGNvbnZfZGVzY3JpcHRvciwgJmZkLCAmY29kZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBmY250bF9mbG9ja19pbXBsKG1vZHVsZSwgZmQsIGNvZGUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihmY250bF9sb2NrZl9fZG9jX18sCisibG9ja2YoJG1vZHVsZSwgZmQsIGNtZCwgbGVuPTAsIHN0YXJ0PTAsIHdoZW5jZT0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQSB3cmFwcGVyIGFyb3VuZCB0aGUgZmNudGwoKSBsb2NraW5nIGNhbGxzLlxuIgorIlxuIgorImBmZGAgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZmlsZSB0byBsb2NrIG9yIHVubG9jaywgYW5kIG9wZXJhdGlvbiBpcyBvbmVcbiIKKyJvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiIKKyJcbiIKKyIgICAgTE9DS19VTiAtIHVubG9ja1xuIgorIiAgICBMT0NLX1NIIC0gYWNxdWlyZSBhIHNoYXJlZCBsb2NrXG4iCisiICAgIExPQ0tfRVggLSBhY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrXG4iCisiXG4iCisiV2hlbiBvcGVyYXRpb24gaXMgTE9DS19TSCBvciBMT0NLX0VYLCBpdCBjYW4gYWxzbyBiZSBiaXR3aXNlIE9SZWQgd2l0aFxuIgorIkxPQ0tfTkIgdG8gYXZvaWQgYmxvY2tpbmcgb24gbG9jayBhY3F1aXNpdGlvbi4gIElmIExPQ0tfTkIgaXMgdXNlZCBhbmQgdGhlXG4iCisibG9jayBjYW5ub3QgYmUgYWNxdWlyZWQsIGFuIE9TRXJyb3Igd2lsbCBiZSByYWlzZWQgYW5kIHRoZSBleGNlcHRpb24gd2lsbFxuIgorImhhdmUgYW4gZXJybm8gYXR0cmlidXRlIHNldCB0byBFQUNDRVMgb3IgRUFHQUlOIChkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGluZ1xuIgorInN5c3RlbSAtLSBmb3IgcG9ydGFiaWxpdHksIGNoZWNrIGZvciBlaXRoZXIgdmFsdWUpLlxuIgorIlxuIgorImBsZW5gIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbG9jaywgd2l0aCB0aGUgZGVmYXVsdCBtZWFuaW5nIHRvIGxvY2sgdG9cbiIKKyJFT0YuICBgc3RhcnRgIGlzIHRoZSBieXRlIG9mZnNldCwgcmVsYXRpdmUgdG8gYHdoZW5jZWAsIHRvIHRoYXQgdGhlIGxvY2tcbiIKKyJzdGFydHMuICBgd2hlbmNlYCBpcyBhcyB3aXRoIGZpbGVvYmouc2VlaygpLCBzcGVjaWZpY2FsbHk6XG4iCisiXG4iCisiICAgIDAgLSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgKFNFRUtfU0VUKVxuIgorIiAgICAxIC0gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIHBvc2l0aW9uIChTRUVLX0NVUilcbiIKKyIgICAgMiAtIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgKFNFRUtfRU5EKSIpOworCisjZGVmaW5lIEZDTlRMX0xPQ0tGX01FVEhPRERFRiAgICBcCisgICAgeyJsb2NrZiIsIChQeUNGdW5jdGlvbilmY250bF9sb2NrZiwgTUVUSF9WQVJBUkdTLCBmY250bF9sb2NrZl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZmNudGxfbG9ja2ZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBjb2RlLCBQeU9iamVjdCAqbGVub2JqLAorICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRvYmosIGludCB3aGVuY2UpOworCitzdGF0aWMgUHlPYmplY3QgKgorZmNudGxfbG9ja2YoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGZkOworICAgIGludCBjb2RlOworICAgIFB5T2JqZWN0ICpsZW5vYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdGFydG9iaiA9IE5VTEw7CisgICAgaW50IHdoZW5jZSA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maXxPT2k6bG9ja2YiLAorICAgICAgICBjb252X2Rlc2NyaXB0b3IsICZmZCwgJmNvZGUsICZsZW5vYmosICZzdGFydG9iaiwgJndoZW5jZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBmY250bF9sb2NrZl9pbXBsKG1vZHVsZSwgZmQsIGNvZGUsIGxlbm9iaiwgc3RhcnRvYmosIHdoZW5jZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05N2IxMzA2Yjg2NGMwMWM4IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL2dycG1vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9ncnBtb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDdhNDIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9ncnBtb2R1bGUuYy5oCkBAIC0wLDAgKzEsODUgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihncnBfZ2V0Z3JnaWRfX2RvY19fLAorImdldGdyZ2lkKCRtb2R1bGUsIC8sIGlkKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBncm91cCBkYXRhYmFzZSBlbnRyeSBmb3IgdGhlIGdpdmVuIG51bWVyaWMgZ3JvdXAgSUQuXG4iCisiXG4iCisiSWYgaWQgaXMgbm90IHZhbGlkLCByYWlzZSBLZXlFcnJvci4iKTsKKworI2RlZmluZSBHUlBfR0VUR1JHSURfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldGdyZ2lkIiwgKFB5Q0Z1bmN0aW9uKWdycF9nZXRncmdpZCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIGdycF9nZXRncmdpZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZ3JwX2dldGdyZ2lkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmlkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2dycF9nZXRncmdpZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImlkIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmlkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTzpnZXRncmdpZCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmlkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGdycF9nZXRncmdpZF9pbXBsKG1vZHVsZSwgaWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihncnBfZ2V0Z3JuYW1fX2RvY19fLAorImdldGdybmFtKCRtb2R1bGUsIC8sIG5hbWUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiIKKyJcbiIKKyJJZiBuYW1lIGlzIG5vdCB2YWxpZCwgcmFpc2UgS2V5RXJyb3IuIik7CisKKyNkZWZpbmUgR1JQX0dFVEdSTkFNX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRncm5hbSIsIChQeUNGdW5jdGlvbilncnBfZ2V0Z3JuYW0sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBncnBfZ2V0Z3JuYW1fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2dycF9nZXRncm5hbV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2dycF9nZXRncm5hbShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7Im5hbWUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIlU6Z2V0Z3JuYW0iLCBfa2V5d29yZHMsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGdycF9nZXRncm5hbV9pbXBsKG1vZHVsZSwgbmFtZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGdycF9nZXRncmFsbF9fZG9jX18sCisiZ2V0Z3JhbGwoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBncm91cCBlbnRyaWVzLCBpbiBhcmJpdHJhcnkgb3JkZXIuXG4iCisiXG4iCisiQW4gZW50cnkgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBcJytcJyBvciBcJy1cJyByZXByZXNlbnRzIGFuIGluc3RydWN0aW9uXG4iCisidG8gdXNlIFlQL05JUyBhbmQgbWF5IG5vdCBiZSBhY2Nlc3NpYmxlIHZpYSBnZXRncm5hbSBvciBnZXRncmdpZC4iKTsKKworI2RlZmluZSBHUlBfR0VUR1JBTExfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldGdyYWxsIiwgKFB5Q0Z1bmN0aW9uKWdycF9nZXRncmFsbCwgTUVUSF9OT0FSR1MsIGdycF9nZXRncmFsbF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZ3JwX2dldGdyYWxsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitncnBfZ2V0Z3JhbGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gZ3JwX2dldGdyYWxsX2ltcGwobW9kdWxlKTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iZWUwOWZlZWZjNTRhMmNiIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL21kNW1vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9tZDVtb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDk1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9tZDVtb2R1bGUuYy5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihNRDVUeXBlX2NvcHlfX2RvY19fLAorImNvcHkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIG9iamVjdC4iKTsKKworI2RlZmluZSBNRDVUWVBFX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pTUQ1VHlwZV9jb3B5LCBNRVRIX05PQVJHUywgTUQ1VHlwZV9jb3B5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitNRDVUeXBlX2NvcHlfaW1wbChNRDVvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorTUQ1VHlwZV9jb3B5KE1ENW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gTUQ1VHlwZV9jb3B5X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihNRDVUeXBlX2RpZ2VzdF9fZG9jX18sCisiZGlnZXN0KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgYmluYXJ5IGRhdGEuIik7CisKKyNkZWZpbmUgTUQ1VFlQRV9ESUdFU1RfTUVUSE9EREVGICAgIFwKKyAgICB7ImRpZ2VzdCIsIChQeUNGdW5jdGlvbilNRDVUeXBlX2RpZ2VzdCwgTUVUSF9OT0FSR1MsIE1ENVR5cGVfZGlnZXN0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitNRDVUeXBlX2RpZ2VzdF9pbXBsKE1ENW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitNRDVUeXBlX2RpZ2VzdChNRDVvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIE1ENVR5cGVfZGlnZXN0X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihNRDVUeXBlX2hleGRpZ2VzdF9fZG9jX18sCisiaGV4ZGlnZXN0KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLiIpOworCisjZGVmaW5lIE1ENVRZUEVfSEVYRElHRVNUX01FVEhPRERFRiAgICBcCisgICAgeyJoZXhkaWdlc3QiLCAoUHlDRnVuY3Rpb24pTUQ1VHlwZV9oZXhkaWdlc3QsIE1FVEhfTk9BUkdTLCBNRDVUeXBlX2hleGRpZ2VzdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorTUQ1VHlwZV9oZXhkaWdlc3RfaW1wbChNRDVvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorTUQ1VHlwZV9oZXhkaWdlc3QoTUQ1b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBNRDVUeXBlX2hleGRpZ2VzdF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoTUQ1VHlwZV91cGRhdGVfX2RvY19fLAorInVwZGF0ZSgkc2VsZiwgb2JqLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVXBkYXRlIHRoaXMgaGFzaCBvYmplY3RcJ3Mgc3RhdGUgd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLiIpOworCisjZGVmaW5lIE1ENVRZUEVfVVBEQVRFX01FVEhPRERFRiAgICBcCisgICAgeyJ1cGRhdGUiLCAoUHlDRnVuY3Rpb24pTUQ1VHlwZV91cGRhdGUsIE1FVEhfTywgTUQ1VHlwZV91cGRhdGVfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF9tZDVfbWQ1X19kb2NfXywKKyJtZDUoJG1vZHVsZSwgLywgc3RyaW5nPWJcJ1wnKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgbmV3IE1ENSBoYXNoIG9iamVjdDsgb3B0aW9uYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RyaW5nLiIpOworCisjZGVmaW5lIF9NRDVfTUQ1X01FVEhPRERFRiAgICBcCisgICAgeyJtZDUiLCAoUHlDRnVuY3Rpb24pX21kNV9tZDUsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfbWQ1X21kNV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX21kNV9tZDVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyaW5nKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19tZDVfbWQ1KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RyaW5nIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TzptZDUiLCBfa2V5d29yZHMsCisgICAgICAgICZzdHJpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX21kNV9tZDVfaW1wbChtb2R1bGUsIHN0cmluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00Y2QzY2M5NmUzNTU2M2QyIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL3Bvc2l4bW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL3Bvc2l4bW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTJlNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvcG9zaXhtb2R1bGUuYy5oCkBAIC0wLDAgKzEsNTc4NyBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKG9zX3N0YXRfX2RvY19fLAorInN0YXQoJG1vZHVsZSwgLywgcGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguXG4iCisiXG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggdG8gYmUgZXhhbWluZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgYSByZWxhdGl2ZSBzdHJpbmc7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvXG4iCisiICAgIHRoYXQgZGlyZWN0b3J5LlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIHN0YXQgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJkaXJfZmQgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG4iCisiICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuIgorIlxuIgorIkl0XCdzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzXG4iCisiICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKworI2RlZmluZSBPU19TVEFUX01FVEhPRERFRiAgICBcCisgICAgeyJzdGF0IiwgKFB5Q0Z1bmN0aW9uKW9zX3N0YXQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19zdGF0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zdGF0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJzdGF0IiwgInBhdGgiLCAwLCAxKTsKKyAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CisgICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyZwOnN0YXQiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgRlNUQVRBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3N0YXRfaW1wbChtb2R1bGUsICZwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIob3NfbHN0YXRfX2RvY19fLAorImxzdGF0KCRtb2R1bGUsIC8sIHBhdGgsICosIGRpcl9mZD1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGgsIHdpdGhvdXQgZm9sbG93aW5nIHN5bWJvbGljIGxpbmtzLlxuIgorIlxuIgorIkxpa2Ugc3RhdCgpLCBidXQgZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cbiIKKyJFcXVpdmFsZW50IHRvIHN0YXQocGF0aCwgZm9sbG93X3N5bWxpbmtzPUZhbHNlKS4iKTsKKworI2RlZmluZSBPU19MU1RBVF9NRVRIT0RERUYgICAgXAorICAgIHsibHN0YXQiLCAoUHlDRnVuY3Rpb24pb3NfbHN0YXQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19sc3RhdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbHN0YXRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBkaXJfZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbHN0YXQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImxzdGF0IiwgInBhdGgiLCAwLCAwKTsKKyAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6bHN0YXQiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgRlNUQVRBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2xzdGF0X2ltcGwobW9kdWxlLCAmcGF0aCwgZGlyX2ZkKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihvc19hY2Nlc3NfX2RvY19fLAorImFjY2VzcygkbW9kdWxlLCAvLCBwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcbiIKKyIgICAgICAgZm9sbG93X3N5bWxpbmtzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJVc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIHRvIGJlIHRlc3RlZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC5cbiIKKyIgIG1vZGVcbiIKKyIgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsXG4iCisiICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXRcbiIKKyIgICAgZGlyZWN0b3J5LlxuIgorIiAgZWZmZWN0aXZlX2lkc1xuIgorIiAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2ZcbiIKKyIgICAgdGhlIHJlYWwgdWlkL2dpZC5cbiIKKyIgIGZvbGxvd19zeW1saW5rc1xuIgorIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgorIiAgICBhY2Nlc3Mgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJkaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgorIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgorIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXNcbiIKKyIgIHJvdXRpbmUgY2FuIGJlIHVzZWQgaW4gYSBzdWlkL3NnaWQgZW52aXJvbm1lbnQgdG8gdGVzdCBpZiB0aGUgaW52b2tpbmcgdXNlclxuIgorIiAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLiIpOworCisjZGVmaW5lIE9TX0FDQ0VTU19NRVRIT0RERUYgICAgXAorICAgIHsiYWNjZXNzIiwgKFB5Q0Z1bmN0aW9uKW9zX2FjY2VzcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2FjY2Vzc19fZG9jX199LAorCitzdGF0aWMgaW50Citvc19hY2Nlc3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkLAorICAgICAgICAgICAgICAgaW50IGVmZmVjdGl2ZV9pZHMsIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfYWNjZXNzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRpcl9mZCIsICJlZmZlY3RpdmVfaWRzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImFjY2VzcyIsICJwYXRoIiwgMCwgMSk7CisgICAgaW50IG1vZGU7CisgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOworICAgIGludCBlZmZlY3RpdmVfaWRzID0gMDsKKyAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXwkTyZwcDphY2Nlc3MiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsIEZBQ0NFU1NBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZWZmZWN0aXZlX2lkcywgJmZvbGxvd19zeW1saW5rcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfYWNjZXNzX2ltcGwobW9kdWxlLCAmcGF0aCwgbW9kZSwgZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBmb2xsb3dfc3ltbGlua3MpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfVFRZTkFNRSkKKworUHlEb2NfU1RSVkFSKG9zX3R0eW5hbWVfX2RvY19fLAorInR0eW5hbWUoJG1vZHVsZSwgZmQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gXCdmZFwnLlxuIgorIlxuIgorIiAgZmRcbiIKKyIgICAgSW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgaGFuZGxlLiIpOworCisjZGVmaW5lIE9TX1RUWU5BTUVfTUVUSE9EREVGICAgIFwKKyAgICB7InR0eW5hbWUiLCAoUHlDRnVuY3Rpb24pb3NfdHR5bmFtZSwgTUVUSF9PLCBvc190dHluYW1lX19kb2NfX30sCisKK3N0YXRpYyBjaGFyICoKK29zX3R0eW5hbWVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdHR5bmFtZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBjaGFyICpfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOnR0eW5hbWUiLCAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3R0eW5hbWVfaW1wbChtb2R1bGUsIGZkKTsKKyAgICBpZiAoX3JldHVybl92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1RUWU5BTUUpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfQ1RFUk1JRCkKKworUHlEb2NfU1RSVkFSKG9zX2N0ZXJtaWRfX2RvY19fLAorImN0ZXJtaWQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgZm9yIHRoaXMgcHJvY2Vzcy4iKTsKKworI2RlZmluZSBPU19DVEVSTUlEX01FVEhPRERFRiAgICBcCisgICAgeyJjdGVybWlkIiwgKFB5Q0Z1bmN0aW9uKW9zX2N0ZXJtaWQsIE1FVEhfTk9BUkdTLCBvc19jdGVybWlkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jdGVybWlkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jdGVybWlkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX2N0ZXJtaWRfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0NURVJNSUQpICovCisKK1B5RG9jX1NUUlZBUihvc19jaGRpcl9fZG9jX18sCisiY2hkaXIoJG1vZHVsZSwgLywgcGF0aClcbiIKKyItLVxuIgorIlxuIgorIkNoYW5nZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIHBhdGguXG4iCisiXG4iCisicGF0aCBtYXkgYWx3YXlzIGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZy5cbiIKKyJPbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uIik7CisKKyNkZWZpbmUgT1NfQ0hESVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImNoZGlyIiwgKFB5Q0Z1bmN0aW9uKW9zX2NoZGlyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfY2hkaXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2NoZGlyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2NoZGlyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImNoZGlyIiwgInBhdGgiLCAwLCBQQVRIX0hBVkVfRkNIRElSKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mOmNoZGlyIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfY2hkaXJfaW1wbChtb2R1bGUsICZwYXRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfRkNIRElSKQorCitQeURvY19TVFJWQVIob3NfZmNoZGlyX19kb2NfXywKKyJmY2hkaXIoJG1vZHVsZSwgLywgZmQpXG4iCisiLS1cbiIKKyJcbiIKKyJDaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLlxuIgorIlxuIgorImZkIG11c3QgYmUgb3BlbmVkIG9uIGEgZGlyZWN0b3J5LCBub3QgYSBmaWxlLlxuIgorIkVxdWl2YWxlbnQgdG8gb3MuY2hkaXIoZmQpLiIpOworCisjZGVmaW5lIE9TX0ZDSERJUl9NRVRIT0RERUYgICAgXAorICAgIHsiZmNoZGlyIiwgKFB5Q0Z1bmN0aW9uKW9zX2ZjaGRpciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2ZjaGRpcl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZmNoZGlyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2ZjaGRpcihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZkIiwgTlVMTH07CisgICAgaW50IGZkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyY6ZmNoZGlyIiwgX2tleXdvcmRzLAorICAgICAgICBmaWxkZXNfY29udmVydGVyLCAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZmNoZGlyX2ltcGwobW9kdWxlLCBmZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9GQ0hESVIpICovCisKK1B5RG9jX1NUUlZBUihvc19jaG1vZF9fZG9jX18sCisiY2htb2QoJG1vZHVsZSwgLywgcGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgb2YgYSBmaWxlLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIHRvIGJlIG1vZGlmaWVkLiAgTWF5IGFsd2F5cyBiZSBzcGVjaWZpZWQgYXMgYSBzdHIgb3IgYnl0ZXMuXG4iCisiICAgIE9uIHNvbWUgcGxhdGZvcm1zLCBwYXRoIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cbiIKKyIgICAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgYW4gZXhjZXB0aW9uLlxuIgorIiAgbW9kZVxuIgorIiAgICBPcGVyYXRpbmctc3lzdGVtIG1vZGUgYml0ZmllbGQuXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXRcbiIKKyIgICAgZGlyZWN0b3J5LlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIGNobW9kIHdpbGwgbW9kaWZ5IHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJJdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuIgorIiAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuIgorIiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CisKKyNkZWZpbmUgT1NfQ0hNT0RfTUVUSE9EREVGICAgIFwKKyAgICB7ImNobW9kIiwgKFB5Q0Z1bmN0aW9uKW9zX2NobW9kLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfY2htb2RfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2NobW9kX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSwgaW50IGRpcl9mZCwKKyAgICAgICAgICAgICAgaW50IGZvbGxvd19zeW1saW5rcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jaG1vZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkaXJfZmQiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgiY2htb2QiLCAicGF0aCIsIDAsIFBBVEhfSEFWRV9GQ0hNT0QpOworICAgIGludCBtb2RlOworICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKKyAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXwkTyZwOmNobW9kIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLCBGQ0hNT0RBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2NobW9kX2ltcGwobW9kdWxlLCAmcGF0aCwgbW9kZSwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9GQ0hNT0QpCisKK1B5RG9jX1NUUlZBUihvc19mY2htb2RfX2RvY19fLAorImZjaG1vZCgkbW9kdWxlLCAvLCBmZCwgbW9kZSlcbiIKKyItLVxuIgorIlxuIgorIkNoYW5nZSB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIG9mIHRoZSBmaWxlIGdpdmVuIGJ5IGZpbGUgZGVzY3JpcHRvciBmZC5cbiIKKyJcbiIKKyJFcXVpdmFsZW50IHRvIG9zLmNobW9kKGZkLCBtb2RlKS4iKTsKKworI2RlZmluZSBPU19GQ0hNT0RfTUVUSE9EREVGICAgIFwKKyAgICB7ImZjaG1vZCIsIChQeUNGdW5jdGlvbilvc19mY2htb2QsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19mY2htb2RfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2ZjaG1vZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgaW50IG1vZGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZmNobW9kKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmQiLCAibW9kZSIsIE5VTEx9OworICAgIGludCBmZDsKKyAgICBpbnQgbW9kZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImlpOmZjaG1vZCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZkLCAmbW9kZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19mY2htb2RfaW1wbChtb2R1bGUsIGZkLCBtb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0ZDSE1PRCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9MQ0hNT0QpCisKK1B5RG9jX1NUUlZBUihvc19sY2htb2RfX2RvY19fLAorImxjaG1vZCgkbW9kdWxlLCAvLCBwYXRoLCBtb2RlKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgb2YgYSBmaWxlLCB3aXRob3V0IGZvbGxvd2luZyBzeW1ib2xpYyBsaW5rcy5cbiIKKyJcbiIKKyJJZiBwYXRoIGlzIGEgc3ltbGluaywgdGhpcyBhZmZlY3RzIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiB0aGUgdGFyZ2V0LlxuIgorIkVxdWl2YWxlbnQgdG8gY2htb2QocGF0aCwgbW9kZSwgZm9sbG93X3N5bWxpbmtzPUZhbHNlKS5cIiIpOworCisjZGVmaW5lIE9TX0xDSE1PRF9NRVRIT0RERUYgICAgXAorICAgIHsibGNobW9kIiwgKFB5Q0Z1bmN0aW9uKW9zX2xjaG1vZCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2xjaG1vZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbGNobW9kX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19sY2htb2QoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJsY2htb2QiLCAicGF0aCIsIDAsIDApOworICAgIGludCBtb2RlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpOmxjaG1vZCIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19sY2htb2RfaW1wbChtb2R1bGUsICZwYXRoLCBtb2RlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTENITU9EKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0NIRkxBR1MpCisKK1B5RG9jX1NUUlZBUihvc19jaGZsYWdzX19kb2NfXywKKyJjaGZsYWdzKCRtb2R1bGUsIC8sIHBhdGgsIGZsYWdzLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIlNldCBmaWxlIGZsYWdzLlxuIgorIlxuIgorIklmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuIgorIiAgbGluaywgY2hmbGFncyB3aWxsIGNoYW5nZSBmbGFncyBvbiB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGVcbiIKKyIgIGZpbGUgdGhlIGxpbmsgcG9pbnRzIHRvLlxuIgorImZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uICBJZiBpdCBpc1xuIgorInVuYXZhaWxhYmxlLCB1c2luZyBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4iKTsKKworI2RlZmluZSBPU19DSEZMQUdTX01FVEhPRERFRiAgICBcCisgICAgeyJjaGZsYWdzIiwgKFB5Q0Z1bmN0aW9uKW9zX2NoZmxhZ3MsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19jaGZsYWdzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jaGZsYWdzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorICAgICAgICAgICAgICAgIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfY2hmbGFncyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiZmxhZ3MiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgiY2hmbGFncyIsICJwYXRoIiwgMCwgMCk7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8ma3xwOmNoZmxhZ3MiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJmZsYWdzLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2NoZmxhZ3NfaW1wbChtb2R1bGUsICZwYXRoLCBmbGFncywgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfQ0hGTEFHUykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9MQ0hGTEFHUykKKworUHlEb2NfU1RSVkFSKG9zX2xjaGZsYWdzX19kb2NfXywKKyJsY2hmbGFncygkbW9kdWxlLCAvLCBwYXRoLCBmbGFncylcbiIKKyItLVxuIgorIlxuIgorIlNldCBmaWxlIGZsYWdzLlxuIgorIlxuIgorIlRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLlxuIgorIkVxdWl2YWxlbnQgdG8gY2hmbGFncyhwYXRoLCBmbGFncywgZm9sbG93X3N5bWxpbmtzPUZhbHNlKS4iKTsKKworI2RlZmluZSBPU19MQ0hGTEFHU19NRVRIT0RERUYgICAgXAorICAgIHsibGNoZmxhZ3MiLCAoUHlDRnVuY3Rpb24pb3NfbGNoZmxhZ3MsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19sY2hmbGFnc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbGNoZmxhZ3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbGNoZmxhZ3MoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgImZsYWdzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgibGNoZmxhZ3MiLCAicGF0aCIsIDAsIDApOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJms6bGNoZmxhZ3MiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJmZsYWdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2xjaGZsYWdzX2ltcGwobW9kdWxlLCAmcGF0aCwgZmxhZ3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MQ0hGTEFHUykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9DSFJPT1QpCisKK1B5RG9jX1NUUlZBUihvc19jaHJvb3RfX2RvY19fLAorImNocm9vdCgkbW9kdWxlLCAvLCBwYXRoKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlIHJvb3QgZGlyZWN0b3J5IHRvIHBhdGguIik7CisKKyNkZWZpbmUgT1NfQ0hST09UX01FVEhPRERFRiAgICBcCisgICAgeyJjaHJvb3QiLCAoUHlDRnVuY3Rpb24pb3NfY2hyb290LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfY2hyb290X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jaHJvb3RfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfY2hyb290KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImNocm9vdCIsICJwYXRoIiwgMCwgMCk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJjpjaHJvb3QiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19jaHJvb3RfaW1wbChtb2R1bGUsICZwYXRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfQ0hST09UKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0ZTWU5DKQorCitQeURvY19TVFJWQVIob3NfZnN5bmNfX2RvY19fLAorImZzeW5jKCRtb2R1bGUsIC8sIGZkKVxuIgorIi0tXG4iCisiXG4iCisiRm9yY2Ugd3JpdGUgb2YgZmQgdG8gZGlzay4iKTsKKworI2RlZmluZSBPU19GU1lOQ19NRVRIT0RERUYgICAgXAorICAgIHsiZnN5bmMiLCAoUHlDRnVuY3Rpb24pb3NfZnN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19mc3luY19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnN5bmNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnN5bmMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmZCIsIE5VTEx9OworICAgIGludCBmZDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mOmZzeW5jIiwgX2tleXdvcmRzLAorICAgICAgICBmaWxkZXNfY29udmVydGVyLCAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZnN5bmNfaW1wbChtb2R1bGUsIGZkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0ZTWU5DKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NZTkMpCisKK1B5RG9jX1NUUlZBUihvc19zeW5jX19kb2NfXywKKyJzeW5jKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJGb3JjZSB3cml0ZSBvZiBldmVyeXRoaW5nIHRvIGRpc2suIik7CisKKyNkZWZpbmUgT1NfU1lOQ19NRVRIT0RERUYgICAgXAorICAgIHsic3luYyIsIChQeUNGdW5jdGlvbilvc19zeW5jLCBNRVRIX05PQVJHUywgb3Nfc3luY19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3luY19pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3luYyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19zeW5jX2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TWU5DKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0ZEQVRBU1lOQykKKworUHlEb2NfU1RSVkFSKG9zX2ZkYXRhc3luY19fZG9jX18sCisiZmRhdGFzeW5jKCRtb2R1bGUsIC8sIGZkKVxuIgorIi0tXG4iCisiXG4iCisiRm9yY2Ugd3JpdGUgb2YgZmQgdG8gZGlzayB3aXRob3V0IGZvcmNpbmcgdXBkYXRlIG9mIG1ldGFkYXRhLiIpOworCisjZGVmaW5lIE9TX0ZEQVRBU1lOQ19NRVRIT0RERUYgICAgXAorICAgIHsiZmRhdGFzeW5jIiwgKFB5Q0Z1bmN0aW9uKW9zX2ZkYXRhc3luYywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2ZkYXRhc3luY19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZmRhdGFzeW5jX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2ZkYXRhc3luYyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZkIiwgTlVMTH07CisgICAgaW50IGZkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyY6ZmRhdGFzeW5jIiwgX2tleXdvcmRzLAorICAgICAgICBmaWxkZXNfY29udmVydGVyLCAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZmRhdGFzeW5jX2ltcGwobW9kdWxlLCBmZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9GREFUQVNZTkMpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfQ0hPV04pCisKK1B5RG9jX1NUUlZBUihvc19jaG93bl9fZG9jX18sCisiY2hvd24oJG1vZHVsZSwgLywgcGF0aCwgdWlkLCBnaWQsICosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIkNoYW5nZSB0aGUgb3duZXIgYW5kIGdyb3VwIGlkIG9mIHBhdGggdG8gdGhlIG51bWVyaWMgdWlkIGFuZCBnaWQuXFxcbiIKKyJcbiIKKyIgIHBhdGhcbiIKKyIgICAgUGF0aCB0byBiZSBleGFtaW5lZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC5cbiIKKyIgIGRpcl9mZFxuIgorIiAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICAgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdFxuIgorIiAgICBkaXJlY3RvcnkuXG4iCisiICBmb2xsb3dfc3ltbGlua3NcbiIKKyIgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayxcbiIKKyIgICAgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcbiIKKyIgICAgdGhlIGxpbmsgcG9pbnRzIHRvLlxuIgorIlxuIgorInBhdGggbWF5IGFsd2F5cyBiZSBzcGVjaWZpZWQgYXMgYSBzdHJpbmcuXG4iCisiT24gc29tZSBwbGF0Zm9ybXMsIHBhdGggbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuIgorIiAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgYW4gZXhjZXB0aW9uLlxuIgorIklmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuIgorIklmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuIgorIiAgbGluaywgY2hvd24gd2lsbCBtb2RpZnkgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUgdGhlXG4iCisiICBsaW5rIHBvaW50cyB0by5cbiIKKyJJdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuIgorIiAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuIgorIiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CisKKyNkZWZpbmUgT1NfQ0hPV05fTUVUSE9EREVGICAgIFwKKyAgICB7ImNob3duIiwgKFB5Q0Z1bmN0aW9uKW9zX2Nob3duLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfY2hvd25fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2Nob3duX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCB1aWRfdCB1aWQsIGdpZF90IGdpZCwKKyAgICAgICAgICAgICAgaW50IGRpcl9mZCwgaW50IGZvbGxvd19zeW1saW5rcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jaG93bihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAidWlkIiwgImdpZCIsICJkaXJfZmQiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgiY2hvd24iLCAicGF0aCIsIDAsIFBBVEhfSEFWRV9GQ0hPV04pOworICAgIHVpZF90IHVpZDsKKyAgICBnaWRfdCBnaWQ7CisgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOworICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJk8mfCRPJnA6Y2hvd24iLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgX1B5X1VpZF9Db252ZXJ0ZXIsICZ1aWQsIF9QeV9HaWRfQ29udmVydGVyLCAmZ2lkLCBGQ0hPV05BVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2Nob3duX2ltcGwobW9kdWxlLCAmcGF0aCwgdWlkLCBnaWQsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfQ0hPV04pICovCisKKyNpZiBkZWZpbmVkKEhBVkVfRkNIT1dOKQorCitQeURvY19TVFJWQVIob3NfZmNob3duX19kb2NfXywKKyJmY2hvd24oJG1vZHVsZSwgLywgZmQsIHVpZCwgZ2lkKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlIHRoZSBvd25lciBhbmQgZ3JvdXAgaWQgb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGZpbGUgZGVzY3JpcHRvci5cbiIKKyJcbiIKKyJFcXVpdmFsZW50IHRvIG9zLmNob3duKGZkLCB1aWQsIGdpZCkuIik7CisKKyNkZWZpbmUgT1NfRkNIT1dOX01FVEhPRERFRiAgICBcCisgICAgeyJmY2hvd24iLCAoUHlDRnVuY3Rpb24pb3NfZmNob3duLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfZmNob3duX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19mY2hvd25faW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2ZjaG93bihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZkIiwgInVpZCIsICJnaWQiLCBOVUxMfTsKKyAgICBpbnQgZmQ7CisgICAgdWlkX3QgdWlkOworICAgIGdpZF90IGdpZDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImlPJk8mOmZjaG93biIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZkLCBfUHlfVWlkX0NvbnZlcnRlciwgJnVpZCwgX1B5X0dpZF9Db252ZXJ0ZXIsICZnaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZmNob3duX2ltcGwobW9kdWxlLCBmZCwgdWlkLCBnaWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfRkNIT1dOKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0xDSE9XTikKKworUHlEb2NfU1RSVkFSKG9zX2xjaG93bl9fZG9jX18sCisibGNob3duKCRtb2R1bGUsIC8sIHBhdGgsIHVpZCwgZ2lkKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlIHRoZSBvd25lciBhbmQgZ3JvdXAgaWQgb2YgcGF0aCB0byB0aGUgbnVtZXJpYyB1aWQgYW5kIGdpZC5cbiIKKyJcbiIKKyJUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cbiIKKyJFcXVpdmFsZW50IHRvIG9zLmNob3duKHBhdGgsIHVpZCwgZ2lkLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpLiIpOworCisjZGVmaW5lIE9TX0xDSE9XTl9NRVRIT0RERUYgICAgXAorICAgIHsibGNob3duIiwgKFB5Q0Z1bmN0aW9uKW9zX2xjaG93biwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2xjaG93bl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbGNob3duX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCB1aWRfdCB1aWQsIGdpZF90IGdpZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19sY2hvd24oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgInVpZCIsICJnaWQiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJsY2hvd24iLCAicGF0aCIsIDAsIDApOworICAgIHVpZF90IHVpZDsKKyAgICBnaWRfdCBnaWQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mTyY6bGNob3duIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsIF9QeV9VaWRfQ29udmVydGVyLCAmdWlkLCBfUHlfR2lkX0NvbnZlcnRlciwgJmdpZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19sY2hvd25faW1wbChtb2R1bGUsICZwYXRoLCB1aWQsIGdpZCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xDSE9XTikgKi8KKworUHlEb2NfU1RSVkFSKG9zX2dldGN3ZF9fZG9jX18sCisiZ2V0Y3dkKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSB1bmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIik7CisKKyNkZWZpbmUgT1NfR0VUQ1dEX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRjd2QiLCAoUHlDRnVuY3Rpb24pb3NfZ2V0Y3dkLCBNRVRIX05PQVJHUywgb3NfZ2V0Y3dkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRjd2RfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldGN3ZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19nZXRjd2RfaW1wbChtb2R1bGUpOworfQorCitQeURvY19TVFJWQVIob3NfZ2V0Y3dkYl9fZG9jX18sCisiZ2V0Y3dkYigkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4iKTsKKworI2RlZmluZSBPU19HRVRDV0RCX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRjd2RiIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldGN3ZGIsIE1FVEhfTk9BUkdTLCBvc19nZXRjd2RiX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRjd2RiX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRjd2RiKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX2dldGN3ZGJfaW1wbChtb2R1bGUpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0xJTkspCisKK1B5RG9jX1NUUlZBUihvc19saW5rX19kb2NfXywKKyJsaW5rKCRtb2R1bGUsIC8sIHNyYywgZHN0LCAqLCBzcmNfZGlyX2ZkPU5vbmUsIGRzdF9kaXJfZmQ9Tm9uZSxcbiIKKyIgICAgIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgaGFyZCBsaW5rIHRvIGEgZmlsZS5cbiIKKyJcbiIKKyJJZiBlaXRoZXIgc3JjX2Rpcl9mZCBvciBkc3RfZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlXG4iCisiICBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksIGFuZCB0aGUgcmVzcGVjdGl2ZSBwYXRoIHN0cmluZyAoc3JjIG9yIGRzdClcbiIKKyIgIHNob3VsZCBiZSByZWxhdGl2ZTsgdGhlIHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuIgorIklmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2Ygc3JjIGlzIGEgc3ltYm9saWNcbiIKKyIgIGxpbmssIGxpbmsgd2lsbCBjcmVhdGUgYSBsaW5rIHRvIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZVxuIgorIiAgZmlsZSB0aGUgbGluayBwb2ludHMgdG8uXG4iCisic3JjX2Rpcl9mZCwgZHN0X2Rpcl9mZCwgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXJcbiIKKyIgIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisjZGVmaW5lIE9TX0xJTktfTUVUSE9EREVGICAgIFwKKyAgICB7ImxpbmsiLCAoUHlDRnVuY3Rpb24pb3NfbGluaywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2xpbmtfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2xpbmtfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnNyYywgcGF0aF90ICpkc3QsIGludCBzcmNfZGlyX2ZkLAorICAgICAgICAgICAgIGludCBkc3RfZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2xpbmsoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzcmMiLCAiZHN0IiwgInNyY19kaXJfZmQiLCAiZHN0X2Rpcl9mZCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKKyAgICBwYXRoX3Qgc3JjID0gUEFUSF9UX0lOSVRJQUxJWkUoImxpbmsiLCAic3JjIiwgMCwgMCk7CisgICAgcGF0aF90IGRzdCA9IFBBVEhfVF9JTklUSUFMSVpFKCJsaW5rIiwgImRzdCIsIDAsIDApOworICAgIGludCBzcmNfZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CisgICAgaW50IGRzdF9kaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKKyAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8JE8mTyZwOmxpbmsiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLCBwYXRoX2NvbnZlcnRlciwgJmRzdCwgZGlyX2ZkX2NvbnZlcnRlciwgJnNyY19kaXJfZmQsIGRpcl9mZF9jb252ZXJ0ZXIsICZkc3RfZGlyX2ZkLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2xpbmtfaW1wbChtb2R1bGUsICZzcmMsICZkc3QsIHNyY19kaXJfZmQsIGRzdF9kaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3Igc3JjICovCisgICAgcGF0aF9jbGVhbnVwKCZzcmMpOworICAgIC8qIENsZWFudXAgZm9yIGRzdCAqLworICAgIHBhdGhfY2xlYW51cCgmZHN0KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElOSykgKi8KKworUHlEb2NfU1RSVkFSKG9zX2xpc3RkaXJfX2RvY19fLAorImxpc3RkaXIoJG1vZHVsZSwgLywgcGF0aD1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS5cbiIKKyJcbiIKKyJwYXRoIGNhbiBiZSBzcGVjaWZpZWQgYXMgZWl0aGVyIHN0ciBvciBieXRlcy4gIElmIHBhdGggaXMgYnl0ZXMsXG4iCisiICB0aGUgZmlsZW5hbWVzIHJldHVybmVkIHdpbGwgYWxzbyBiZSBieXRlczsgaW4gYWxsIG90aGVyIGNpcmN1bXN0YW5jZXNcbiIKKyIgIHRoZSBmaWxlbmFtZXMgcmV0dXJuZWQgd2lsbCBiZSBzdHIuXG4iCisiSWYgcGF0aCBpcyBOb25lLCB1c2VzIHRoZSBwYXRoPVwnLlwnLlxuIgorIk9uIHNvbWUgcGxhdGZvcm1zLCBwYXRoIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvcjtcXFxuIgorIiAgdGhlIGZpbGUgZGVzY3JpcHRvciBtdXN0IHJlZmVyIHRvIGEgZGlyZWN0b3J5LlxuIgorIiAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKKyJcbiIKKyJUaGUgbGlzdCBpcyBpbiBhcmJpdHJhcnkgb3JkZXIuICBJdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzcGVjaWFsXG4iCisiZW50cmllcyBcJy5cJyBhbmQgXCcuLlwnIGV2ZW4gaWYgdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgZGlyZWN0b3J5LiIpOworCisjZGVmaW5lIE9TX0xJU1RESVJfTUVUSE9EREVGICAgIFwKKyAgICB7Imxpc3RkaXIiLCAoUHlDRnVuY3Rpb24pb3NfbGlzdGRpciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2xpc3RkaXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2xpc3RkaXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbGlzdGRpcihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJsaXN0ZGlyIiwgInBhdGgiLCAxLCBQQVRIX0hBVkVfRkRPUEVORElSKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJjpsaXN0ZGlyIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfbGlzdGRpcl9pbXBsKG1vZHVsZSwgJnBhdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoTVNfV0lORE9XUykKKworUHlEb2NfU1RSVkFSKG9zX19nZXRmdWxscGF0aG5hbWVfX2RvY19fLAorIl9nZXRmdWxscGF0aG5hbWUoJG1vZHVsZSwgcGF0aCwgLylcbiIKKyItLVxuIgorIlxuIik7CisKKyNkZWZpbmUgT1NfX0dFVEZVTExQQVRITkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsiX2dldGZ1bGxwYXRobmFtZSIsIChQeUNGdW5jdGlvbilvc19fZ2V0ZnVsbHBhdGhuYW1lLCBNRVRIX08sIG9zX19nZXRmdWxscGF0aG5hbWVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX19nZXRmdWxscGF0aG5hbWVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfX2dldGZ1bGxwYXRobmFtZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoIl9nZXRmdWxscGF0aG5hbWUiLCAicGF0aCIsIDAsIDApOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjpfZ2V0ZnVsbHBhdGhuYW1lIiwgcGF0aF9jb252ZXJ0ZXIsICZwYXRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX19nZXRmdWxscGF0aG5hbWVfaW1wbChtb2R1bGUsICZwYXRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCisKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK1B5RG9jX1NUUlZBUihvc19fZ2V0ZmluYWxwYXRobmFtZV9fZG9jX18sCisiX2dldGZpbmFscGF0aG5hbWUoJG1vZHVsZSwgcGF0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkEgaGVscGVyIGZ1bmN0aW9uIGZvciBzYW1lcGF0aCBvbiB3aW5kb3dzLiIpOworCisjZGVmaW5lIE9TX19HRVRGSU5BTFBBVEhOQU1FX01FVEhPRERFRiAgICBcCisgICAgeyJfZ2V0ZmluYWxwYXRobmFtZSIsIChQeUNGdW5jdGlvbilvc19fZ2V0ZmluYWxwYXRobmFtZSwgTUVUSF9PLCBvc19fZ2V0ZmluYWxwYXRobmFtZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfX2dldGZpbmFscGF0aG5hbWVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcGF0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19fZ2V0ZmluYWxwYXRobmFtZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpwYXRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJVOl9nZXRmaW5hbHBhdGhuYW1lIiwgJnBhdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfX2dldGZpbmFscGF0aG5hbWVfaW1wbChtb2R1bGUsIHBhdGgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCisKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK1B5RG9jX1NUUlZBUihvc19faXNkaXJfX2RvY19fLAorIl9pc2RpcigkbW9kdWxlLCBwYXRoLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBPU19fSVNESVJfTUVUSE9EREVGICAgIFwKKyAgICB7Il9pc2RpciIsIChQeUNGdW5jdGlvbilvc19faXNkaXIsIE1FVEhfTywgb3NfX2lzZGlyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19faXNkaXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfX2lzZGlyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgiX2lzZGlyIiwgInBhdGgiLCAwLCAwKTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyY6X2lzZGlyIiwgcGF0aF9jb252ZXJ0ZXIsICZwYXRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX19pc2Rpcl9pbXBsKG1vZHVsZSwgJnBhdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoTVNfV0lORE9XUykgKi8KKworI2lmIGRlZmluZWQoTVNfV0lORE9XUykKKworUHlEb2NfU1RSVkFSKG9zX19nZXR2b2x1bWVwYXRobmFtZV9fZG9jX18sCisiX2dldHZvbHVtZXBhdGhuYW1lKCRtb2R1bGUsIC8sIHBhdGgpXG4iCisiLS1cbiIKKyJcbiIKKyJBIGhlbHBlciBmdW5jdGlvbiBmb3IgaXNtb3VudCBvbiBXaW4zMi4iKTsKKworI2RlZmluZSBPU19fR0VUVk9MVU1FUEFUSE5BTUVfTUVUSE9EREVGICAgIFwKKyAgICB7Il9nZXR2b2x1bWVwYXRobmFtZSIsIChQeUNGdW5jdGlvbilvc19fZ2V0dm9sdW1lcGF0aG5hbWUsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19fZ2V0dm9sdW1lcGF0aG5hbWVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX19nZXR2b2x1bWVwYXRobmFtZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpwYXRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX19nZXR2b2x1bWVwYXRobmFtZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcGF0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIlU6X2dldHZvbHVtZXBhdGhuYW1lIiwgX2tleXdvcmRzLAorICAgICAgICAmcGF0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19fZ2V0dm9sdW1lcGF0aG5hbWVfaW1wbChtb2R1bGUsIHBhdGgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCisKK1B5RG9jX1NUUlZBUihvc19ta2Rpcl9fZG9jX18sCisibWtkaXIoJG1vZHVsZSwgLywgcGF0aCwgbW9kZT01MTEsICosIGRpcl9mZD1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgZGlyZWN0b3J5LlxuIgorIlxuIgorIklmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuIgorImRpcl9mZCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uXG4iCisiICBJZiBpdCBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuXG4iCisiXG4iCisiVGhlIG1vZGUgYXJndW1lbnQgaXMgaWdub3JlZCBvbiBXaW5kb3dzLiIpOworCisjZGVmaW5lIE9TX01LRElSX01FVEhPRERFRiAgICBcCisgICAgeyJta2RpciIsIChQeUNGdW5jdGlvbilvc19ta2RpciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX21rZGlyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19ta2Rpcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGludCBkaXJfZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbWtkaXIoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgibWtkaXIiLCAicGF0aCIsIDAsIDApOworICAgIGludCBtb2RlID0gNTExOworICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfGkkTyY6bWtkaXIiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsIE1LRElSQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19ta2Rpcl9pbXBsKG1vZHVsZSwgJnBhdGgsIG1vZGUsIGRpcl9mZCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX05JQ0UpCisKK1B5RG9jX1NUUlZBUihvc19uaWNlX19kb2NfXywKKyJuaWNlKCRtb2R1bGUsIGluY3JlbWVudCwgLylcbiIKKyItLVxuIgorIlxuIgorIkFkZCBpbmNyZW1lbnQgdG8gdGhlIHByaW9yaXR5IG9mIHByb2Nlc3MgYW5kIHJldHVybiB0aGUgbmV3IHByaW9yaXR5LiIpOworCisjZGVmaW5lIE9TX05JQ0VfTUVUSE9EREVGICAgIFwKKyAgICB7Im5pY2UiLCAoUHlDRnVuY3Rpb24pb3NfbmljZSwgTUVUSF9PLCBvc19uaWNlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19uaWNlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGluY3JlbWVudCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19uaWNlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGluY3JlbWVudDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaTpuaWNlIiwgJmluY3JlbWVudCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19uaWNlX2ltcGwobW9kdWxlLCBpbmNyZW1lbnQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTklDRSkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9HRVRQUklPUklUWSkKKworUHlEb2NfU1RSVkFSKG9zX2dldHByaW9yaXR5X19kb2NfXywKKyJnZXRwcmlvcml0eSgkbW9kdWxlLCAvLCB3aGljaCwgd2hvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHByb2dyYW0gc2NoZWR1bGluZyBwcmlvcml0eS4iKTsKKworI2RlZmluZSBPU19HRVRQUklPUklUWV9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0cHJpb3JpdHkiLCAoUHlDRnVuY3Rpb24pb3NfZ2V0cHJpb3JpdHksIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19nZXRwcmlvcml0eV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0cHJpb3JpdHlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgd2hpY2gsIGludCB3aG8pOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0cHJpb3JpdHkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJ3aGljaCIsICJ3aG8iLCBOVUxMfTsKKyAgICBpbnQgd2hpY2g7CisgICAgaW50IHdobzsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImlpOmdldHByaW9yaXR5IiwgX2tleXdvcmRzLAorICAgICAgICAmd2hpY2gsICZ3aG8pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZ2V0cHJpb3JpdHlfaW1wbChtb2R1bGUsIHdoaWNoLCB3aG8pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfR0VUUFJJT1JJVFkpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VUUFJJT1JJVFkpCisKK1B5RG9jX1NUUlZBUihvc19zZXRwcmlvcml0eV9fZG9jX18sCisic2V0cHJpb3JpdHkoJG1vZHVsZSwgLywgd2hpY2gsIHdobywgcHJpb3JpdHkpXG4iCisiLS1cbiIKKyJcbiIKKyJTZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5LiIpOworCisjZGVmaW5lIE9TX1NFVFBSSU9SSVRZX01FVEhPRERFRiAgICBcCisgICAgeyJzZXRwcmlvcml0eSIsIChQeUNGdW5jdGlvbilvc19zZXRwcmlvcml0eSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3NldHByaW9yaXR5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRwcmlvcml0eV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCB3aGljaCwgaW50IHdobywgaW50IHByaW9yaXR5KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NldHByaW9yaXR5KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsid2hpY2giLCAid2hvIiwgInByaW9yaXR5IiwgTlVMTH07CisgICAgaW50IHdoaWNoOworICAgIGludCB3aG87CisgICAgaW50IHByaW9yaXR5OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaWlpOnNldHByaW9yaXR5IiwgX2tleXdvcmRzLAorICAgICAgICAmd2hpY2gsICZ3aG8sICZwcmlvcml0eSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zZXRwcmlvcml0eV9pbXBsKG1vZHVsZSwgd2hpY2gsIHdobywgcHJpb3JpdHkpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUUFJJT1JJVFkpICovCisKK1B5RG9jX1NUUlZBUihvc19yZW5hbWVfX2RvY19fLAorInJlbmFtZSgkbW9kdWxlLCAvLCBzcmMsIGRzdCwgKiwgc3JjX2Rpcl9mZD1Ob25lLCBkc3RfZGlyX2ZkPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZW5hbWUgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiIKKyJcbiIKKyJJZiBlaXRoZXIgc3JjX2Rpcl9mZCBvciBkc3RfZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlXG4iCisiICBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksIGFuZCB0aGUgcmVzcGVjdGl2ZSBwYXRoIHN0cmluZyAoc3JjIG9yIGRzdClcbiIKKyIgIHNob3VsZCBiZSByZWxhdGl2ZTsgdGhlIHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuIgorInNyY19kaXJfZmQgYW5kIGRzdF9kaXJfZmQsIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cbiIKKyIgIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisjZGVmaW5lIE9TX1JFTkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsicmVuYW1lIiwgKFB5Q0Z1bmN0aW9uKW9zX3JlbmFtZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3JlbmFtZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcmVuYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpzcmMsIHBhdGhfdCAqZHN0LCBpbnQgc3JjX2Rpcl9mZCwKKyAgICAgICAgICAgICAgIGludCBkc3RfZGlyX2ZkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3JlbmFtZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InNyYyIsICJkc3QiLCAic3JjX2Rpcl9mZCIsICJkc3RfZGlyX2ZkIiwgTlVMTH07CisgICAgcGF0aF90IHNyYyA9IFBBVEhfVF9JTklUSUFMSVpFKCJyZW5hbWUiLCAic3JjIiwgMCwgMCk7CisgICAgcGF0aF90IGRzdCA9IFBBVEhfVF9JTklUSUFMSVpFKCJyZW5hbWUiLCAiZHN0IiwgMCwgMCk7CisgICAgaW50IHNyY19kaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKKyAgICBpbnQgZHN0X2Rpcl9mZCA9IERFRkFVTFRfRElSX0ZEOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkTyZPJjpyZW5hbWUiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLCBwYXRoX2NvbnZlcnRlciwgJmRzdCwgZGlyX2ZkX2NvbnZlcnRlciwgJnNyY19kaXJfZmQsIGRpcl9mZF9jb252ZXJ0ZXIsICZkc3RfZGlyX2ZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3JlbmFtZV9pbXBsKG1vZHVsZSwgJnNyYywgJmRzdCwgc3JjX2Rpcl9mZCwgZHN0X2Rpcl9mZCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3Igc3JjICovCisgICAgcGF0aF9jbGVhbnVwKCZzcmMpOworICAgIC8qIENsZWFudXAgZm9yIGRzdCAqLworICAgIHBhdGhfY2xlYW51cCgmZHN0KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihvc19yZXBsYWNlX19kb2NfXywKKyJyZXBsYWNlKCRtb2R1bGUsIC8sIHNyYywgZHN0LCAqLCBzcmNfZGlyX2ZkPU5vbmUsIGRzdF9kaXJfZmQ9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIlJlbmFtZSBhIGZpbGUgb3IgZGlyZWN0b3J5LCBvdmVyd3JpdGluZyB0aGUgZGVzdGluYXRpb24uXG4iCisiXG4iCisiSWYgZWl0aGVyIHNyY19kaXJfZmQgb3IgZHN0X2Rpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZVxuIgorIiAgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LCBhbmQgdGhlIHJlc3BlY3RpdmUgcGF0aCBzdHJpbmcgKHNyYyBvciBkc3QpXG4iCisiICBzaG91bGQgYmUgcmVsYXRpdmU7IHRoZSBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cbiIKKyJzcmNfZGlyX2ZkIGFuZCBkc3RfZGlyX2ZkLCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uXG4iCisiICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci5cIiIpOworCisjZGVmaW5lIE9TX1JFUExBQ0VfTUVUSE9EREVGICAgIFwKKyAgICB7InJlcGxhY2UiLCAoUHlDRnVuY3Rpb24pb3NfcmVwbGFjZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3JlcGxhY2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3JlcGxhY2VfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnNyYywgcGF0aF90ICpkc3QsIGludCBzcmNfZGlyX2ZkLAorICAgICAgICAgICAgICAgIGludCBkc3RfZGlyX2ZkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3JlcGxhY2UoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzcmMiLCAiZHN0IiwgInNyY19kaXJfZmQiLCAiZHN0X2Rpcl9mZCIsIE5VTEx9OworICAgIHBhdGhfdCBzcmMgPSBQQVRIX1RfSU5JVElBTElaRSgicmVwbGFjZSIsICJzcmMiLCAwLCAwKTsKKyAgICBwYXRoX3QgZHN0ID0gUEFUSF9UX0lOSVRJQUxJWkUoInJlcGxhY2UiLCAiZHN0IiwgMCwgMCk7CisgICAgaW50IHNyY19kaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKKyAgICBpbnQgZHN0X2Rpcl9mZCA9IERFRkFVTFRfRElSX0ZEOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkTyZPJjpyZXBsYWNlIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnNyYywgcGF0aF9jb252ZXJ0ZXIsICZkc3QsIGRpcl9mZF9jb252ZXJ0ZXIsICZzcmNfZGlyX2ZkLCBkaXJfZmRfY29udmVydGVyLCAmZHN0X2Rpcl9mZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19yZXBsYWNlX2ltcGwobW9kdWxlLCAmc3JjLCAmZHN0LCBzcmNfZGlyX2ZkLCBkc3RfZGlyX2ZkKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBzcmMgKi8KKyAgICBwYXRoX2NsZWFudXAoJnNyYyk7CisgICAgLyogQ2xlYW51cCBmb3IgZHN0ICovCisgICAgcGF0aF9jbGVhbnVwKCZkc3QpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG9zX3JtZGlyX19kb2NfXywKKyJybWRpcigkbW9kdWxlLCAvLCBwYXRoLCAqLCBkaXJfZmQ9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIlJlbW92ZSBhIGRpcmVjdG9yeS5cbiIKKyJcbiIKKyJJZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cbiIKKyJkaXJfZmQgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuIgorIiAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisjZGVmaW5lIE9TX1JNRElSX01FVEhPRERFRiAgICBcCisgICAgeyJybWRpciIsIChQeUNGdW5jdGlvbilvc19ybWRpciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3JtZGlyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19ybWRpcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGRpcl9mZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19ybWRpcihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgicm1kaXIiLCAicGF0aCIsIDAsIDApOworICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpybWRpciIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCBVTkxJTktBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3JtZGlyX2ltcGwobW9kdWxlLCAmcGF0aCwgZGlyX2ZkKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfU1lTVEVNKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK1B5RG9jX1NUUlZBUihvc19zeXN0ZW1fX2RvY19fLAorInN5c3RlbSgkbW9kdWxlLCAvLCBjb21tYW5kKVxuIgorIi0tXG4iCisiXG4iCisiRXhlY3V0ZSB0aGUgY29tbWFuZCBpbiBhIHN1YnNoZWxsLiIpOworCisjZGVmaW5lIE9TX1NZU1RFTV9NRVRIT0RERUYgICAgXAorICAgIHsic3lzdGVtIiwgKFB5Q0Z1bmN0aW9uKW9zX3N5c3RlbSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3N5c3RlbV9fZG9jX199LAorCitzdGF0aWMgbG9uZworb3Nfc3lzdGVtX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfVU5JQ09ERSAqY29tbWFuZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zeXN0ZW0oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJjb21tYW5kIiwgTlVMTH07CisgICAgUHlfVU5JQ09ERSAqY29tbWFuZDsKKyAgICBsb25nIF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ1OnN5c3RlbSIsIF9rZXl3b3JkcywKKyAgICAgICAgJmNvbW1hbmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3N5c3RlbV9pbXBsKG1vZHVsZSwgY29tbWFuZCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lTVEVNKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU1lTVEVNKSAmJiAhZGVmaW5lZChNU19XSU5ET1dTKQorCitQeURvY19TVFJWQVIob3Nfc3lzdGVtX19kb2NfXywKKyJzeXN0ZW0oJG1vZHVsZSwgLywgY29tbWFuZClcbiIKKyItLVxuIgorIlxuIgorIkV4ZWN1dGUgdGhlIGNvbW1hbmQgaW4gYSBzdWJzaGVsbC4iKTsKKworI2RlZmluZSBPU19TWVNURU1fTUVUSE9EREVGICAgIFwKKyAgICB7InN5c3RlbSIsIChQeUNGdW5jdGlvbilvc19zeXN0ZW0sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19zeXN0ZW1fX2RvY19ffSwKKworc3RhdGljIGxvbmcKK29zX3N5c3RlbV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpjb21tYW5kKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N5c3RlbShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImNvbW1hbmQiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqY29tbWFuZCA9IE5VTEw7CisgICAgbG9uZyBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyY6c3lzdGVtIiwgX2tleXdvcmRzLAorICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZjb21tYW5kKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19zeXN0ZW1faW1wbChtb2R1bGUsIGNvbW1hbmQpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZyhfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBjb21tYW5kICovCisgICAgUHlfWERFQ1JFRihjb21tYW5kKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lTVEVNKSAmJiAhZGVmaW5lZChNU19XSU5ET1dTKSAqLworCitQeURvY19TVFJWQVIob3NfdW1hc2tfX2RvY19fLAorInVtYXNrKCRtb2R1bGUsIG1hc2ssIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTZXQgdGhlIGN1cnJlbnQgbnVtZXJpYyB1bWFzayBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyB1bWFzay4iKTsKKworI2RlZmluZSBPU19VTUFTS19NRVRIT0RERUYgICAgXAorICAgIHsidW1hc2siLCAoUHlDRnVuY3Rpb24pb3NfdW1hc2ssIE1FVEhfTywgb3NfdW1hc2tfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3VtYXNrX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG1hc2spOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdW1hc2soUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgbWFzazsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaTp1bWFzayIsICZtYXNrKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3VtYXNrX2ltcGwobW9kdWxlLCBtYXNrKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIob3NfdW5saW5rX19kb2NfXywKKyJ1bmxpbmsoJG1vZHVsZSwgLywgcGF0aCwgKiwgZGlyX2ZkPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZW1vdmUgYSBmaWxlIChzYW1lIGFzIHJlbW92ZSgpKS5cbiIKKyJcbiIKKyJJZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cbiIKKyJkaXJfZmQgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuIgorIiAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisjZGVmaW5lIE9TX1VOTElOS19NRVRIT0RERUYgICAgXAorICAgIHsidW5saW5rIiwgKFB5Q0Z1bmN0aW9uKW9zX3VubGluaywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3VubGlua19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdW5saW5rX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3VubGluayhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgidW5saW5rIiwgInBhdGgiLCAwLCAwKTsKKyAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6dW5saW5rIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsIFVOTElOS0FUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfdW5saW5rX2ltcGwobW9kdWxlLCAmcGF0aCwgZGlyX2ZkKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihvc19yZW1vdmVfX2RvY19fLAorInJlbW92ZSgkbW9kdWxlLCAvLCBwYXRoLCAqLCBkaXJfZmQ9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIlJlbW92ZSBhIGZpbGUgKHNhbWUgYXMgdW5saW5rKCkpLlxuIgorIlxuIgorIklmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuIgorImRpcl9mZCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uXG4iCisiICBJZiBpdCBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CisKKyNkZWZpbmUgT1NfUkVNT1ZFX01FVEhPRERFRiAgICBcCisgICAgeyJyZW1vdmUiLCAoUHlDRnVuY3Rpb24pb3NfcmVtb3ZlLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfcmVtb3ZlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19yZW1vdmVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBkaXJfZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcmVtb3ZlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJyZW1vdmUiLCAicGF0aCIsIDAsIDApOworICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpyZW1vdmUiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgVU5MSU5LQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19yZW1vdmVfaW1wbChtb2R1bGUsICZwYXRoLCBkaXJfZmQpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9VTkFNRSkKKworUHlEb2NfU1RSVkFSKG9zX3VuYW1lX19kb2NfXywKKyJ1bmFtZSgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGFuIG9iamVjdCBpZGVudGlmeWluZyB0aGUgY3VycmVudCBvcGVyYXRpbmcgc3lzdGVtLlxuIgorIlxuIgorIlRoZSBvYmplY3QgYmVoYXZlcyBsaWtlIGEgbmFtZWQgdHVwbGUgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiIKKyIgIChzeXNuYW1lLCBub2RlbmFtZSwgcmVsZWFzZSwgdmVyc2lvbiwgbWFjaGluZSkiKTsKKworI2RlZmluZSBPU19VTkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsidW5hbWUiLCAoUHlDRnVuY3Rpb24pb3NfdW5hbWUsIE1FVEhfTk9BUkdTLCBvc191bmFtZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdW5hbWVfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3VuYW1lKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX3VuYW1lX2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9VTkFNRSkgKi8KKworUHlEb2NfU1RSVkFSKG9zX3V0aW1lX19kb2NfXywKKyJ1dGltZSgkbW9kdWxlLCAvLCBwYXRoLCB0aW1lcz1Ob25lLCAqLCBucz1Ob25lLCBkaXJfZmQ9Tm9uZSxcbiIKKyIgICAgICBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgYWNjZXNzIGFuZCBtb2RpZmllZCB0aW1lIG9mIHBhdGguXG4iCisiXG4iCisicGF0aCBtYXkgYWx3YXlzIGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZy5cbiIKKyJPbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uXG4iCisiXG4iCisiSWYgdGltZXMgaXMgbm90IE5vbmUsIGl0IG11c3QgYmUgYSB0dXBsZSAoYXRpbWUsIG10aW1lKTtcbiIKKyIgICAgYXRpbWUgYW5kIG10aW1lIHNob3VsZCBiZSBleHByZXNzZWQgYXMgZmxvYXQgc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guXG4iCisiSWYgbnMgaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGEgdHVwbGUgKGF0aW1lX25zLCBtdGltZV9ucyk7XG4iCisiICAgIGF0aW1lX25zIGFuZCBtdGltZV9ucyBzaG91bGQgYmUgZXhwcmVzc2VkIGFzIGludGVnZXIgbmFub3NlY29uZHNcbiIKKyIgICAgc2luY2UgdGhlIGVwb2NoLlxuIgorIklmIHRpbWVzIGlzIE5vbmUgYW5kIG5zIGlzIHVuc3BlY2lmaWVkLCB1dGltZSB1c2VzIHRoZSBjdXJyZW50IHRpbWUuXG4iCisiU3BlY2lmeWluZyB0dXBsZXMgZm9yIGJvdGggdGltZXMgYW5kIG5zIGlzIGFuIGVycm9yLlxuIgorIlxuIgorIklmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuIgorIklmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuIgorIiAgbGluaywgdXRpbWUgd2lsbCBtb2RpZnkgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUgdGhlXG4iCisiICBsaW5rIHBvaW50cyB0by5cbiIKKyJJdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aFxuIgorIiAgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybS5cbiIKKyIgIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisjZGVmaW5lIE9TX1VUSU1FX01FVEhPRERFRiAgICBcCisgICAgeyJ1dGltZSIsIChQeUNGdW5jdGlvbilvc191dGltZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3V0aW1lX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc191dGltZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgUHlPYmplY3QgKnRpbWVzLCBQeU9iamVjdCAqbnMsCisgICAgICAgICAgICAgIGludCBkaXJfZmQsIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdXRpbWUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgInRpbWVzIiwgIm5zIiwgImRpcl9mZCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJ1dGltZSIsICJwYXRoIiwgMCwgUEFUSF9VVElNRV9IQVZFX0ZEKTsKKyAgICBQeU9iamVjdCAqdGltZXMgPSBOVUxMOworICAgIFB5T2JqZWN0ICpucyA9IE5VTEw7CisgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOworICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8TyRPTyZwOnV0aW1lIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZ0aW1lcywgJm5zLCBGVVRJTUVOU0FUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfdXRpbWVfaW1wbChtb2R1bGUsICZwYXRoLCB0aW1lcywgbnMsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihvc19fZXhpdF9fZG9jX18sCisiX2V4aXQoJG1vZHVsZSwgLywgc3RhdHVzKVxuIgorIi0tXG4iCisiXG4iCisiRXhpdCB0byB0aGUgc3lzdGVtIHdpdGggc3BlY2lmaWVkIHN0YXR1cywgd2l0aG91dCBub3JtYWwgZXhpdCBwcm9jZXNzaW5nLiIpOworCisjZGVmaW5lIE9TX19FWElUX01FVEhPRERFRiAgICBcCisgICAgeyJfZXhpdCIsIChQeUNGdW5jdGlvbilvc19fZXhpdCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX19leGl0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19fZXhpdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfX2V4aXQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdGF0dXMiLCBOVUxMfTsKKyAgICBpbnQgc3RhdHVzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaTpfZXhpdCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0YXR1cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19fZXhpdF9pbXBsKG1vZHVsZSwgc3RhdHVzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX0VYRUNWKQorCitQeURvY19TVFJWQVIob3NfZXhlY3ZfX2RvY19fLAorImV4ZWN2KCRtb2R1bGUsIHBhdGgsIGFyZ3YsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJFeGVjdXRlIGFuIGV4ZWN1dGFibGUgcGF0aCB3aXRoIGFyZ3VtZW50cywgcmVwbGFjaW5nIGN1cnJlbnQgcHJvY2Vzcy5cbiIKKyJcbiIKKyIgIHBhdGhcbiIKKyIgICAgUGF0aCBvZiBleGVjdXRhYmxlIGZpbGUuXG4iCisiICBhcmd2XG4iCisiICAgIFR1cGxlIG9yIGxpc3Qgb2Ygc3RyaW5ncy4iKTsKKworI2RlZmluZSBPU19FWEVDVl9NRVRIT0RERUYgICAgXAorICAgIHsiZXhlY3YiLCAoUHlDRnVuY3Rpb24pb3NfZXhlY3YsIE1FVEhfVkFSQVJHUywgb3NfZXhlY3ZfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2V4ZWN2X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnBhdGgsIFB5T2JqZWN0ICphcmd2KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2V4ZWN2KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpwYXRoID0gTlVMTDsKKyAgICBQeU9iamVjdCAqYXJndjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZPOmV4ZWN2IiwKKyAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmcGF0aCwgJmFyZ3YpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZXhlY3ZfaW1wbChtb2R1bGUsIHBhdGgsIGFyZ3YpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBQeV9YREVDUkVGKHBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9FWEVDVikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9FWEVDVikKKworUHlEb2NfU1RSVkFSKG9zX2V4ZWN2ZV9fZG9jX18sCisiZXhlY3ZlKCRtb2R1bGUsIC8sIHBhdGgsIGFyZ3YsIGVudilcbiIKKyItLVxuIgorIlxuIgorIkV4ZWN1dGUgYW4gZXhlY3V0YWJsZSBwYXRoIHdpdGggYXJndW1lbnRzLCByZXBsYWNpbmcgY3VycmVudCBwcm9jZXNzLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIG9mIGV4ZWN1dGFibGUgZmlsZS5cbiIKKyIgIGFyZ3ZcbiIKKyIgICAgVHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzLlxuIgorIiAgZW52XG4iCisiICAgIERpY3Rpb25hcnkgb2Ygc3RyaW5ncyBtYXBwaW5nIHRvIHN0cmluZ3MuIik7CisKKyNkZWZpbmUgT1NfRVhFQ1ZFX01FVEhPRERFRiAgICBcCisgICAgeyJleGVjdmUiLCAoUHlDRnVuY3Rpb24pb3NfZXhlY3ZlLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfZXhlY3ZlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19leGVjdmVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIFB5T2JqZWN0ICphcmd2LCBQeU9iamVjdCAqZW52KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2V4ZWN2ZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiYXJndiIsICJlbnYiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJleGVjdmUiLCAicGF0aCIsIDAsIFBBVEhfSEFWRV9GRVhFQ1ZFKTsKKyAgICBQeU9iamVjdCAqYXJndjsKKyAgICBQeU9iamVjdCAqZW52OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPTzpleGVjdmUiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJmFyZ3YsICZlbnYpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZXhlY3ZlX2ltcGwobW9kdWxlLCAmcGF0aCwgYXJndiwgZW52KTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfRVhFQ1YpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU1BBV05WKQorCitQeURvY19TVFJWQVIob3Nfc3Bhd252X19kb2NfXywKKyJzcGF3bnYoJG1vZHVsZSwgbW9kZSwgcGF0aCwgYXJndiwgLylcbiIKKyItLVxuIgorIlxuIgorIkV4ZWN1dGUgdGhlIHByb2dyYW0gc3BlY2lmaWVkIGJ5IHBhdGggaW4gYSBuZXcgcHJvY2Vzcy5cbiIKKyJcbiIKKyIgIG1vZGVcbiIKKyIgICAgTW9kZSBvZiBwcm9jZXNzIGNyZWF0aW9uLlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIG9mIGV4ZWN1dGFibGUgZmlsZS5cbiIKKyIgIGFyZ3ZcbiIKKyIgICAgVHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzLiIpOworCisjZGVmaW5lIE9TX1NQQVdOVl9NRVRIT0RERUYgICAgXAorICAgIHsic3Bhd252IiwgKFB5Q0Z1bmN0aW9uKW9zX3NwYXdudiwgTUVUSF9WQVJBUkdTLCBvc19zcGF3bnZfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NwYXdudl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBtb2RlLCBQeU9iamVjdCAqcGF0aCwgUHlPYmplY3QgKmFyZ3YpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3Bhd252KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBtb2RlOworICAgIFB5T2JqZWN0ICpwYXRoID0gTlVMTDsKKyAgICBQeU9iamVjdCAqYXJndjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU8mTzpzcGF3bnYiLAorICAgICAgICAmbW9kZSwgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmcGF0aCwgJmFyZ3YpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc3Bhd252X2ltcGwobW9kdWxlLCBtb2RlLCBwYXRoLCBhcmd2KTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgUHlfWERFQ1JFRihwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1BBV05WKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NQQVdOVikKKworUHlEb2NfU1RSVkFSKG9zX3NwYXdudmVfX2RvY19fLAorInNwYXdudmUoJG1vZHVsZSwgbW9kZSwgcGF0aCwgYXJndiwgZW52LCAvKVxuIgorIi0tXG4iCisiXG4iCisiRXhlY3V0ZSB0aGUgcHJvZ3JhbSBzcGVjaWZpZWQgYnkgcGF0aCBpbiBhIG5ldyBwcm9jZXNzLlxuIgorIlxuIgorIiAgbW9kZVxuIgorIiAgICBNb2RlIG9mIHByb2Nlc3MgY3JlYXRpb24uXG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggb2YgZXhlY3V0YWJsZSBmaWxlLlxuIgorIiAgYXJndlxuIgorIiAgICBUdXBsZSBvciBsaXN0IG9mIHN0cmluZ3MuXG4iCisiICBlbnZcbiIKKyIgICAgRGljdGlvbmFyeSBvZiBzdHJpbmdzIG1hcHBpbmcgdG8gc3RyaW5ncy4iKTsKKworI2RlZmluZSBPU19TUEFXTlZFX01FVEhPRERFRiAgICBcCisgICAgeyJzcGF3bnZlIiwgKFB5Q0Z1bmN0aW9uKW9zX3NwYXdudmUsIE1FVEhfVkFSQVJHUywgb3Nfc3Bhd252ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3Bhd252ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBtb2RlLCBQeU9iamVjdCAqcGF0aCwgUHlPYmplY3QgKmFyZ3YsCisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVudik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zcGF3bnZlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBtb2RlOworICAgIFB5T2JqZWN0ICpwYXRoID0gTlVMTDsKKyAgICBQeU9iamVjdCAqYXJndjsKKyAgICBQeU9iamVjdCAqZW52OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyZPTzpzcGF3bnZlIiwKKyAgICAgICAgJm1vZGUsIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJnBhdGgsICZhcmd2LCAmZW52KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3NwYXdudmVfaW1wbChtb2R1bGUsIG1vZGUsIHBhdGgsIGFyZ3YsIGVudik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIFB5X1hERUNSRUYocGF0aCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NQQVdOVikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9GT1JLMSkKKworUHlEb2NfU1RSVkFSKG9zX2ZvcmsxX19kb2NfXywKKyJmb3JrMSgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRm9yayBhIGNoaWxkIHByb2Nlc3Mgd2l0aCBhIHNpbmdsZSBtdWx0aXBsZXhlZCAoaS5lLiwgbm90IGJvdW5kKSB0aHJlYWQuXG4iCisiXG4iCisiUmV0dXJuIDAgdG8gY2hpbGQgcHJvY2VzcyBhbmQgUElEIG9mIGNoaWxkIHRvIHBhcmVudCBwcm9jZXNzLiIpOworCisjZGVmaW5lIE9TX0ZPUksxX01FVEhPRERFRiAgICBcCisgICAgeyJmb3JrMSIsIChQeUNGdW5jdGlvbilvc19mb3JrMSwgTUVUSF9OT0FSR1MsIG9zX2ZvcmsxX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19mb3JrMV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZm9yazEoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gb3NfZm9yazFfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0ZPUksxKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0ZPUkspCisKK1B5RG9jX1NUUlZBUihvc19mb3JrX19kb2NfXywKKyJmb3JrKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJGb3JrIGEgY2hpbGQgcHJvY2Vzcy5cbiIKKyJcbiIKKyJSZXR1cm4gMCB0byBjaGlsZCBwcm9jZXNzIGFuZCBQSUQgb2YgY2hpbGQgdG8gcGFyZW50IHByb2Nlc3MuIik7CisKKyNkZWZpbmUgT1NfRk9SS19NRVRIT0RERUYgICAgXAorICAgIHsiZm9yayIsIChQeUNGdW5jdGlvbilvc19mb3JrLCBNRVRIX05PQVJHUywgb3NfZm9ya19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZm9ya19pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZm9yayhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19mb3JrX2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9GT1JLKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NDSEVEX0gpICYmIGRlZmluZWQoSEFWRV9TQ0hFRF9HRVRfUFJJT1JJVFlfTUFYKQorCitQeURvY19TVFJWQVIob3Nfc2NoZWRfZ2V0X3ByaW9yaXR5X21heF9fZG9jX18sCisic2NoZWRfZ2V0X3ByaW9yaXR5X21heCgkbW9kdWxlLCAvLCBwb2xpY3kpXG4iCisiLS1cbiIKKyJcbiIKKyJHZXQgdGhlIG1heGltdW0gc2NoZWR1bGluZyBwcmlvcml0eSBmb3IgcG9saWN5LiIpOworCisjZGVmaW5lIE9TX1NDSEVEX0dFVF9QUklPUklUWV9NQVhfTUVUSE9EREVGICAgIFwKKyAgICB7InNjaGVkX2dldF9wcmlvcml0eV9tYXgiLCAoUHlDRnVuY3Rpb24pb3Nfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3NjaGVkX2dldF9wcmlvcml0eV9tYXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NjaGVkX2dldF9wcmlvcml0eV9tYXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgcG9saWN5KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NjaGVkX2dldF9wcmlvcml0eV9tYXgoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwb2xpY3kiLCBOVUxMfTsKKyAgICBpbnQgcG9saWN5OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaTpzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IiwgX2tleXdvcmRzLAorICAgICAgICAmcG9saWN5KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3NjaGVkX2dldF9wcmlvcml0eV9tYXhfaW1wbChtb2R1bGUsIHBvbGljeSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAmJiBkZWZpbmVkKEhBVkVfU0NIRURfR0VUX1BSSU9SSVRZX01BWCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAmJiBkZWZpbmVkKEhBVkVfU0NIRURfR0VUX1BSSU9SSVRZX01BWCkKKworUHlEb2NfU1RSVkFSKG9zX3NjaGVkX2dldF9wcmlvcml0eV9taW5fX2RvY19fLAorInNjaGVkX2dldF9wcmlvcml0eV9taW4oJG1vZHVsZSwgLywgcG9saWN5KVxuIgorIi0tXG4iCisiXG4iCisiR2V0IHRoZSBtaW5pbXVtIHNjaGVkdWxpbmcgcHJpb3JpdHkgZm9yIHBvbGljeS4iKTsKKworI2RlZmluZSBPU19TQ0hFRF9HRVRfUFJJT1JJVFlfTUlOX01FVEhPRERFRiAgICBcCisgICAgeyJzY2hlZF9nZXRfcHJpb3JpdHlfbWluIiwgKFB5Q0Z1bmN0aW9uKW9zX3NjaGVkX2dldF9wcmlvcml0eV9taW4sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19zY2hlZF9nZXRfcHJpb3JpdHlfbWluX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zY2hlZF9nZXRfcHJpb3JpdHlfbWluX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHBvbGljeSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zY2hlZF9nZXRfcHJpb3JpdHlfbWluKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicG9saWN5IiwgTlVMTH07CisgICAgaW50IHBvbGljeTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImk6c2NoZWRfZ2V0X3ByaW9yaXR5X21pbiIsIF9rZXl3b3JkcywKKyAgICAgICAgJnBvbGljeSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zY2hlZF9nZXRfcHJpb3JpdHlfbWluX2ltcGwobW9kdWxlLCBwb2xpY3kpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0NIRURfSCkgJiYgZGVmaW5lZChIQVZFX1NDSEVEX0dFVF9QUklPUklUWV9NQVgpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0NIRURfSCkgJiYgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFNDSEVEVUxFUikKKworUHlEb2NfU1RSVkFSKG9zX3NjaGVkX2dldHNjaGVkdWxlcl9fZG9jX18sCisic2NoZWRfZ2V0c2NoZWR1bGVyKCRtb2R1bGUsIHBpZCwgLylcbiIKKyItLVxuIgorIlxuIgorIkdldCB0aGUgc2NoZWR1bGluZyBwb2xpY3kgZm9yIHRoZSBwcm9jZXNzIGlkZW50aWZpZWR5IGJ5IHBpZC5cbiIKKyJcbiIKKyJQYXNzaW5nIDAgZm9yIHBpZCByZXR1cm5zIHRoZSBzY2hlZHVsaW5nIHBvbGljeSBmb3IgdGhlIGNhbGxpbmcgcHJvY2Vzcy4iKTsKKworI2RlZmluZSBPU19TQ0hFRF9HRVRTQ0hFRFVMRVJfTUVUSE9EREVGICAgIFwKKyAgICB7InNjaGVkX2dldHNjaGVkdWxlciIsIChQeUNGdW5jdGlvbilvc19zY2hlZF9nZXRzY2hlZHVsZXIsIE1FVEhfTywgb3Nfc2NoZWRfZ2V0c2NoZWR1bGVyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zY2hlZF9nZXRzY2hlZHVsZXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfZ2V0c2NoZWR1bGVyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgcGlkX3QgcGlkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICIiIF9QeV9QQVJTRV9QSUQgIjpzY2hlZF9nZXRzY2hlZHVsZXIiLCAmcGlkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3NjaGVkX2dldHNjaGVkdWxlcl9pbXBsKG1vZHVsZSwgcGlkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NDSEVEX0gpICYmIGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0NIRURfSCkgJiYgKGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIpIHx8IGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRQQVJBTSkpCisKK1B5RG9jX1NUUlZBUihvc19zY2hlZF9wYXJhbV9fZG9jX18sCisic2NoZWRfcGFyYW0oc2NoZWRfcHJpb3JpdHkpXG4iCisiLS1cbiIKKyJcbiIKKyJDdXJyZW50IGhhcyBvbmx5IG9uZSBmaWVsZDogc2NoZWRfcHJpb3JpdHlcIik7XG4iCisiXG4iCisiICBzY2hlZF9wcmlvcml0eVxuIgorIiAgICBBIHNjaGVkdWxpbmcgcGFyYW1ldGVyLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfcGFyYW1faW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpzY2hlZF9wcmlvcml0eSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zY2hlZF9wYXJhbShQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic2NoZWRfcHJpb3JpdHkiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc2NoZWRfcHJpb3JpdHk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPOnNjaGVkX3BhcmFtIiwgX2tleXdvcmRzLAorICAgICAgICAmc2NoZWRfcHJpb3JpdHkpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc2NoZWRfcGFyYW1faW1wbCh0eXBlLCBzY2hlZF9wcmlvcml0eSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAmJiAoZGVmaW5lZChIQVZFX1NDSEVEX1NFVFNDSEVEVUxFUikgfHwgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFBBUkFNKSkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAmJiBkZWZpbmVkKEhBVkVfU0NIRURfU0VUU0NIRURVTEVSKQorCitQeURvY19TVFJWQVIob3Nfc2NoZWRfc2V0c2NoZWR1bGVyX19kb2NfXywKKyJzY2hlZF9zZXRzY2hlZHVsZXIoJG1vZHVsZSwgcGlkLCBwb2xpY3ksIHBhcmFtLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2V0IHRoZSBzY2hlZHVsaW5nIHBvbGljeSBmb3IgdGhlIHByb2Nlc3MgaWRlbnRpZmllZCBieSBwaWQuXG4iCisiXG4iCisiSWYgcGlkIGlzIDAsIHRoZSBjYWxsaW5nIHByb2Nlc3MgaXMgY2hhbmdlZC5cbiIKKyJwYXJhbSBpcyBhbiBpbnN0YW5jZSBvZiBzY2hlZF9wYXJhbS4iKTsKKworI2RlZmluZSBPU19TQ0hFRF9TRVRTQ0hFRFVMRVJfTUVUSE9EREVGICAgIFwKKyAgICB7InNjaGVkX3NldHNjaGVkdWxlciIsIChQeUNGdW5jdGlvbilvc19zY2hlZF9zZXRzY2hlZHVsZXIsIE1FVEhfVkFSQVJHUywgb3Nfc2NoZWRfc2V0c2NoZWR1bGVyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zY2hlZF9zZXRzY2hlZHVsZXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQsIGludCBwb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NjaGVkX3NldHNjaGVkdWxlcihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBwaWRfdCBwaWQ7CisgICAgaW50IHBvbGljeTsKKyAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIgX1B5X1BBUlNFX1BJRCAiaU8mOnNjaGVkX3NldHNjaGVkdWxlciIsCisgICAgICAgICZwaWQsICZwb2xpY3ksIGNvbnZlcnRfc2NoZWRfcGFyYW0sICZwYXJhbSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zY2hlZF9zZXRzY2hlZHVsZXJfaW1wbChtb2R1bGUsIHBpZCwgcG9saWN5LCAmcGFyYW0pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0NIRURfSCkgJiYgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFNDSEVEVUxFUikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAmJiBkZWZpbmVkKEhBVkVfU0NIRURfU0VUUEFSQU0pCisKK1B5RG9jX1NUUlZBUihvc19zY2hlZF9nZXRwYXJhbV9fZG9jX18sCisic2NoZWRfZ2V0cGFyYW0oJG1vZHVsZSwgcGlkLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBwcm9jZXNzIGlkZW50aWZpZWQgYnkgcGlkLlxuIgorIlxuIgorIklmIHBpZCBpcyAwLCByZXR1cm5zIHBhcmFtZXRlcnMgZm9yIHRoZSBjYWxsaW5nIHByb2Nlc3MuXG4iCisiUmV0dXJuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIHNjaGVkX3BhcmFtLiIpOworCisjZGVmaW5lIE9TX1NDSEVEX0dFVFBBUkFNX01FVEhPRERFRiAgICBcCisgICAgeyJzY2hlZF9nZXRwYXJhbSIsIChQeUNGdW5jdGlvbilvc19zY2hlZF9nZXRwYXJhbSwgTUVUSF9PLCBvc19zY2hlZF9nZXRwYXJhbV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfZ2V0cGFyYW1faW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfZ2V0cGFyYW0oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBwaWRfdCBwaWQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIiIgX1B5X1BBUlNFX1BJRCAiOnNjaGVkX2dldHBhcmFtIiwgJnBpZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zY2hlZF9nZXRwYXJhbV9pbXBsKG1vZHVsZSwgcGlkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NDSEVEX0gpICYmIGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRQQVJBTSkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAmJiBkZWZpbmVkKEhBVkVfU0NIRURfU0VUUEFSQU0pCisKK1B5RG9jX1NUUlZBUihvc19zY2hlZF9zZXRwYXJhbV9fZG9jX18sCisic2NoZWRfc2V0cGFyYW0oJG1vZHVsZSwgcGlkLCBwYXJhbSwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBwcm9jZXNzIGlkZW50aWZpZWQgYnkgcGlkLlxuIgorIlxuIgorIklmIHBpZCBpcyAwLCBzZXRzIHBhcmFtZXRlcnMgZm9yIHRoZSBjYWxsaW5nIHByb2Nlc3MuXG4iCisicGFyYW0gc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIHNjaGVkX3BhcmFtLiIpOworCisjZGVmaW5lIE9TX1NDSEVEX1NFVFBBUkFNX01FVEhPRERFRiAgICBcCisgICAgeyJzY2hlZF9zZXRwYXJhbSIsIChQeUNGdW5jdGlvbilvc19zY2hlZF9zZXRwYXJhbSwgTUVUSF9WQVJBUkdTLCBvc19zY2hlZF9zZXRwYXJhbV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfc2V0cGFyYW1faW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfc2V0cGFyYW0oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgcGlkX3QgcGlkOworICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIiBfUHlfUEFSU0VfUElEICJPJjpzY2hlZF9zZXRwYXJhbSIsCisgICAgICAgICZwaWQsIGNvbnZlcnRfc2NoZWRfcGFyYW0sICZwYXJhbSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zY2hlZF9zZXRwYXJhbV9pbXBsKG1vZHVsZSwgcGlkLCAmcGFyYW0pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0NIRURfSCkgJiYgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFBBUkFNKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NDSEVEX0gpICYmIGRlZmluZWQoSEFWRV9TQ0hFRF9SUl9HRVRfSU5URVJWQUwpCisKK1B5RG9jX1NUUlZBUihvc19zY2hlZF9ycl9nZXRfaW50ZXJ2YWxfX2RvY19fLAorInNjaGVkX3JyX2dldF9pbnRlcnZhbCgkbW9kdWxlLCBwaWQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHJvdW5kLXJvYmluIHF1YW50dW0gZm9yIHRoZSBwcm9jZXNzIGlkZW50aWZpZWQgYnkgcGlkLCBpbiBzZWNvbmRzLlxuIgorIlxuIgorIlZhbHVlIHJldHVybmVkIGlzIGEgZmxvYXQuIik7CisKKyNkZWZpbmUgT1NfU0NIRURfUlJfR0VUX0lOVEVSVkFMX01FVEhPRERFRiAgICBcCisgICAgeyJzY2hlZF9ycl9nZXRfaW50ZXJ2YWwiLCAoUHlDRnVuY3Rpb24pb3Nfc2NoZWRfcnJfZ2V0X2ludGVydmFsLCBNRVRIX08sIG9zX3NjaGVkX3JyX2dldF9pbnRlcnZhbF9fZG9jX199LAorCitzdGF0aWMgZG91YmxlCitvc19zY2hlZF9ycl9nZXRfaW50ZXJ2YWxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfcnJfZ2V0X2ludGVydmFsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgcGlkX3QgcGlkOworICAgIGRvdWJsZSBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICIiIF9QeV9QQVJTRV9QSUQgIjpzY2hlZF9ycl9nZXRfaW50ZXJ2YWwiLCAmcGlkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19zY2hlZF9ycl9nZXRfaW50ZXJ2YWxfaW1wbChtb2R1bGUsIHBpZCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xLjApICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUZsb2F0X0Zyb21Eb3VibGUoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAmJiBkZWZpbmVkKEhBVkVfU0NIRURfUlJfR0VUX0lOVEVSVkFMKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NDSEVEX0gpCisKK1B5RG9jX1NUUlZBUihvc19zY2hlZF95aWVsZF9fZG9jX18sCisic2NoZWRfeWllbGQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlZvbHVudGFyaWx5IHJlbGlucXVpc2ggdGhlIENQVS4iKTsKKworI2RlZmluZSBPU19TQ0hFRF9ZSUVMRF9NRVRIT0RERUYgICAgXAorICAgIHsic2NoZWRfeWllbGQiLCAoUHlDRnVuY3Rpb24pb3Nfc2NoZWRfeWllbGQsIE1FVEhfTk9BUkdTLCBvc19zY2hlZF95aWVsZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfeWllbGRfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NjaGVkX3lpZWxkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX3NjaGVkX3lpZWxkX2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NDSEVEX0gpICYmIGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRBRkZJTklUWSkKKworUHlEb2NfU1RSVkFSKG9zX3NjaGVkX3NldGFmZmluaXR5X19kb2NfXywKKyJzY2hlZF9zZXRhZmZpbml0eSgkbW9kdWxlLCBwaWQsIG1hc2ssIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTZXQgdGhlIENQVSBhZmZpbml0eSBvZiB0aGUgcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHBpZCB0byBtYXNrLlxuIgorIlxuIgorIm1hc2sgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIGludGVnZXJzIGlkZW50aWZ5aW5nIENQVXMuIik7CisKKyNkZWZpbmUgT1NfU0NIRURfU0VUQUZGSU5JVFlfTUVUSE9EREVGICAgIFwKKyAgICB7InNjaGVkX3NldGFmZmluaXR5IiwgKFB5Q0Z1bmN0aW9uKW9zX3NjaGVkX3NldGFmZmluaXR5LCBNRVRIX1ZBUkFSR1MsIG9zX3NjaGVkX3NldGFmZmluaXR5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zY2hlZF9zZXRhZmZpbml0eV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCwgUHlPYmplY3QgKm1hc2spOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfc2V0YWZmaW5pdHkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgcGlkX3QgcGlkOworICAgIFB5T2JqZWN0ICptYXNrOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiIF9QeV9QQVJTRV9QSUQgIk86c2NoZWRfc2V0YWZmaW5pdHkiLAorICAgICAgICAmcGlkLCAmbWFzaykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zY2hlZF9zZXRhZmZpbml0eV9pbXBsKG1vZHVsZSwgcGlkLCBtYXNrKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NDSEVEX0gpICYmIGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRBRkZJTklUWSkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TQ0hFRF9IKSAmJiBkZWZpbmVkKEhBVkVfU0NIRURfU0VUQUZGSU5JVFkpCisKK1B5RG9jX1NUUlZBUihvc19zY2hlZF9nZXRhZmZpbml0eV9fZG9jX18sCisic2NoZWRfZ2V0YWZmaW5pdHkoJG1vZHVsZSwgcGlkLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBhZmZpbml0eSBvZiB0aGUgcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHBpZC5cbiIKKyJcbiIKKyJUaGUgYWZmaW5pdHkgaXMgcmV0dXJuZWQgYXMgYSBzZXQgb2YgQ1BVIGlkZW50aWZpZXJzLiIpOworCisjZGVmaW5lIE9TX1NDSEVEX0dFVEFGRklOSVRZX01FVEhPRERFRiAgICBcCisgICAgeyJzY2hlZF9nZXRhZmZpbml0eSIsIChQeUNGdW5jdGlvbilvc19zY2hlZF9nZXRhZmZpbml0eSwgTUVUSF9PLCBvc19zY2hlZF9nZXRhZmZpbml0eV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfZ2V0YWZmaW5pdHlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2NoZWRfZ2V0YWZmaW5pdHkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBwaWRfdCBwaWQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIiIgX1B5X1BBUlNFX1BJRCAiOnNjaGVkX2dldGFmZmluaXR5IiwgJnBpZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zY2hlZF9nZXRhZmZpbml0eV9pbXBsKG1vZHVsZSwgcGlkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NDSEVEX0gpICYmIGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRBRkZJTklUWSkgKi8KKworI2lmIChkZWZpbmVkKEhBVkVfT1BFTlBUWSkgfHwgZGVmaW5lZChIQVZFX19HRVRQVFkpIHx8IGRlZmluZWQoSEFWRV9ERVZfUFRNWCkpCisKK1B5RG9jX1NUUlZBUihvc19vcGVucHR5X19kb2NfXywKKyJvcGVucHR5KCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJPcGVuIGEgcHNldWRvLXRlcm1pbmFsLlxuIgorIlxuIgorIlJldHVybiBhIHR1cGxlIG9mIChtYXN0ZXJfZmQsIHNsYXZlX2ZkKSBjb250YWluaW5nIG9wZW4gZmlsZSBkZXNjcmlwdG9yc1xuIgorImZvciBib3RoIHRoZSBtYXN0ZXIgYW5kIHNsYXZlIGVuZHMuIik7CisKKyNkZWZpbmUgT1NfT1BFTlBUWV9NRVRIT0RERUYgICAgXAorICAgIHsib3BlbnB0eSIsIChQeUNGdW5jdGlvbilvc19vcGVucHR5LCBNRVRIX05PQVJHUywgb3Nfb3BlbnB0eV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfb3BlbnB0eV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfb3BlbnB0eShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19vcGVucHR5X2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIChkZWZpbmVkKEhBVkVfT1BFTlBUWSkgfHwgZGVmaW5lZChIQVZFX19HRVRQVFkpIHx8IGRlZmluZWQoSEFWRV9ERVZfUFRNWCkpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfRk9SS1BUWSkKKworUHlEb2NfU1RSVkFSKG9zX2ZvcmtwdHlfX2RvY19fLAorImZvcmtwdHkoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkZvcmsgYSBuZXcgcHJvY2VzcyB3aXRoIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBhcyBjb250cm9sbGluZyB0dHkuXG4iCisiXG4iCisiUmV0dXJucyBhIHR1cGxlIG9mIChwaWQsIG1hc3Rlcl9mZCkuXG4iCisiTGlrZSBmb3JrKCksIHJldHVybiBwaWQgb2YgMCB0byB0aGUgY2hpbGQgcHJvY2VzcyxcbiIKKyJhbmQgcGlkIG9mIGNoaWxkIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcy5cbiIKKyJUbyBib3RoLCByZXR1cm4gZmQgb2YgbmV3bHkgb3BlbmVkIHBzZXVkby10ZXJtaW5hbC4iKTsKKworI2RlZmluZSBPU19GT1JLUFRZX01FVEhPRERFRiAgICBcCisgICAgeyJmb3JrcHR5IiwgKFB5Q0Z1bmN0aW9uKW9zX2ZvcmtwdHksIE1FVEhfTk9BUkdTLCBvc19mb3JrcHR5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19mb3JrcHR5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19mb3JrcHR5KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX2ZvcmtwdHlfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0ZPUktQVFkpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VURUdJRCkKKworUHlEb2NfU1RSVkFSKG9zX2dldGVnaWRfX2RvY19fLAorImdldGVnaWQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgY3VycmVudCBwcm9jZXNzXCdzIGVmZmVjdGl2ZSBncm91cCBpZC4iKTsKKworI2RlZmluZSBPU19HRVRFR0lEX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRlZ2lkIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldGVnaWQsIE1FVEhfTk9BUkdTLCBvc19nZXRlZ2lkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRlZ2lkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRlZ2lkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX2dldGVnaWRfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVEVHSUQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VURVVJRCkKKworUHlEb2NfU1RSVkFSKG9zX2dldGV1aWRfX2RvY19fLAorImdldGV1aWQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgY3VycmVudCBwcm9jZXNzXCdzIGVmZmVjdGl2ZSB1c2VyIGlkLiIpOworCisjZGVmaW5lIE9TX0dFVEVVSURfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldGV1aWQiLCAoUHlDRnVuY3Rpb24pb3NfZ2V0ZXVpZCwgTUVUSF9OT0FSR1MsIG9zX2dldGV1aWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldGV1aWRfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldGV1aWQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gb3NfZ2V0ZXVpZF9pbXBsKG1vZHVsZSk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfR0VURVVJRCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9HRVRHSUQpCisKK1B5RG9jX1NUUlZBUihvc19nZXRnaWRfX2RvY19fLAorImdldGdpZCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3NcJ3MgZ3JvdXAgaWQuIik7CisKKyNkZWZpbmUgT1NfR0VUR0lEX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRnaWQiLCAoUHlDRnVuY3Rpb24pb3NfZ2V0Z2lkLCBNRVRIX05PQVJHUywgb3NfZ2V0Z2lkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRnaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldGdpZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19nZXRnaWRfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVEdJRCkgKi8KKworUHlEb2NfU1RSVkFSKG9zX2dldHBpZF9fZG9jX18sCisiZ2V0cGlkKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcyBpZC4iKTsKKworI2RlZmluZSBPU19HRVRQSURfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldHBpZCIsIChQeUNGdW5jdGlvbilvc19nZXRwaWQsIE1FVEhfTk9BUkdTLCBvc19nZXRwaWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldHBpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0cGlkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX2dldHBpZF9pbXBsKG1vZHVsZSk7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUR1JPVVBTKQorCitQeURvY19TVFJWQVIob3NfZ2V0Z3JvdXBzX19kb2NfXywKKyJnZXRncm91cHMoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBsaXN0IG9mIHN1cHBsZW1lbnRhbCBncm91cCBJRHMgZm9yIHRoZSBwcm9jZXNzLiIpOworCisjZGVmaW5lIE9TX0dFVEdST1VQU19NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0Z3JvdXBzIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldGdyb3VwcywgTUVUSF9OT0FSR1MsIG9zX2dldGdyb3Vwc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0Z3JvdXBzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRncm91cHMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gb3NfZ2V0Z3JvdXBzX2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9HRVRHUk9VUFMpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUEdJRCkKKworUHlEb2NfU1RSVkFSKG9zX2dldHBnaWRfX2RvY19fLAorImdldHBnaWQoJG1vZHVsZSwgLywgcGlkKVxuIgorIi0tXG4iCisiXG4iCisiQ2FsbCB0aGUgc3lzdGVtIGNhbGwgZ2V0cGdpZCgpLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuIik7CisKKyNkZWZpbmUgT1NfR0VUUEdJRF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0cGdpZCIsIChQeUNGdW5jdGlvbilvc19nZXRwZ2lkLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfZ2V0cGdpZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0cGdpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRwZ2lkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGlkIiwgTlVMTH07CisgICAgcGlkX3QgcGlkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiIiBfUHlfUEFSU0VfUElEICI6Z2V0cGdpZCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnBpZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19nZXRwZ2lkX2ltcGwobW9kdWxlLCBwaWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfR0VUUEdJRCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9HRVRQR1JQKQorCitQeURvY19TVFJWQVIob3NfZ2V0cGdycF9fZG9jX18sCisiZ2V0cGdycCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MgZ3JvdXAgaWQuIik7CisKKyNkZWZpbmUgT1NfR0VUUEdSUF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0cGdycCIsIChQeUNGdW5jdGlvbilvc19nZXRwZ3JwLCBNRVRIX05PQVJHUywgb3NfZ2V0cGdycF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0cGdycF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0cGdycChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19nZXRwZ3JwX2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9HRVRQR1JQKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NFVFBHUlApCisKK1B5RG9jX1NUUlZBUihvc19zZXRwZ3JwX19kb2NfXywKKyJzZXRwZ3JwKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJNYWtlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGhlIGxlYWRlciBvZiBpdHMgcHJvY2VzcyBncm91cC4iKTsKKworI2RlZmluZSBPU19TRVRQR1JQX01FVEhPRERFRiAgICBcCisgICAgeyJzZXRwZ3JwIiwgKFB5Q0Z1bmN0aW9uKW9zX3NldHBncnAsIE1FVEhfTk9BUkdTLCBvc19zZXRwZ3JwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRwZ3JwX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRwZ3JwKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX3NldHBncnBfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NFVFBHUlApICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUFBJRCkKKworUHlEb2NfU1RSVkFSKG9zX2dldHBwaWRfX2RvY19fLAorImdldHBwaWQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgcGFyZW50XCdzIHByb2Nlc3MgaWQuXG4iCisiXG4iCisiSWYgdGhlIHBhcmVudCBwcm9jZXNzIGhhcyBhbHJlYWR5IGV4aXRlZCwgV2luZG93cyBtYWNoaW5lcyB3aWxsIHN0aWxsXG4iCisicmV0dXJuIGl0cyBpZDsgb3RoZXJzIHN5c3RlbXMgd2lsbCByZXR1cm4gdGhlIGlkIG9mIHRoZSBcJ2luaXRcJyBwcm9jZXNzICgxKS4iKTsKKworI2RlZmluZSBPU19HRVRQUElEX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRwcGlkIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldHBwaWQsIE1FVEhfTk9BUkdTLCBvc19nZXRwcGlkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRwcGlkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRwcGlkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX2dldHBwaWRfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVFBQSUQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUTE9HSU4pCisKK1B5RG9jX1NUUlZBUihvc19nZXRsb2dpbl9fZG9jX18sCisiZ2V0bG9naW4oJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgYWN0dWFsIGxvZ2luIG5hbWUuIik7CisKKyNkZWZpbmUgT1NfR0VUTE9HSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImdldGxvZ2luIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldGxvZ2luLCBNRVRIX05PQVJHUywgb3NfZ2V0bG9naW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldGxvZ2luX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRsb2dpbihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19nZXRsb2dpbl9pbXBsKG1vZHVsZSk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfR0VUTE9HSU4pICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUVUlEKQorCitQeURvY19TVFJWQVIob3NfZ2V0dWlkX19kb2NfXywKKyJnZXR1aWQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgY3VycmVudCBwcm9jZXNzXCdzIHVzZXIgaWQuIik7CisKKyNkZWZpbmUgT1NfR0VUVUlEX01FVEhPRERFRiAgICBcCisgICAgeyJnZXR1aWQiLCAoUHlDRnVuY3Rpb24pb3NfZ2V0dWlkLCBNRVRIX05PQVJHUywgb3NfZ2V0dWlkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXR1aWRfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldHVpZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19nZXR1aWRfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVFVJRCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9LSUxMKQorCitQeURvY19TVFJWQVIob3Nfa2lsbF9fZG9jX18sCisia2lsbCgkbW9kdWxlLCBwaWQsIHNpZ25hbCwgLylcbiIKKyItLVxuIgorIlxuIgorIktpbGwgYSBwcm9jZXNzIHdpdGggYSBzaWduYWwuIik7CisKKyNkZWZpbmUgT1NfS0lMTF9NRVRIT0RERUYgICAgXAorICAgIHsia2lsbCIsIChQeUNGdW5jdGlvbilvc19raWxsLCBNRVRIX1ZBUkFSR1MsIG9zX2tpbGxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2tpbGxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQsIFB5X3NzaXplX3Qgc2lnbmFsKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2tpbGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgcGlkX3QgcGlkOworICAgIFB5X3NzaXplX3Qgc2lnbmFsOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiIF9QeV9QQVJTRV9QSUQgIm46a2lsbCIsCisgICAgICAgICZwaWQsICZzaWduYWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfa2lsbF9pbXBsKG1vZHVsZSwgcGlkLCBzaWduYWwpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfS0lMTCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9LSUxMUEcpCisKK1B5RG9jX1NUUlZBUihvc19raWxscGdfX2RvY19fLAorImtpbGxwZygkbW9kdWxlLCBwZ2lkLCBzaWduYWwsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJLaWxsIGEgcHJvY2VzcyBncm91cCB3aXRoIGEgc2lnbmFsLiIpOworCisjZGVmaW5lIE9TX0tJTExQR19NRVRIT0RERUYgICAgXAorICAgIHsia2lsbHBnIiwgKFB5Q0Z1bmN0aW9uKW9zX2tpbGxwZywgTUVUSF9WQVJBUkdTLCBvc19raWxscGdfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2tpbGxwZ19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBnaWQsIGludCBzaWduYWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfa2lsbHBnKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHBpZF90IHBnaWQ7CisgICAgaW50IHNpZ25hbDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIiBfUHlfUEFSU0VfUElEICJpOmtpbGxwZyIsCisgICAgICAgICZwZ2lkLCAmc2lnbmFsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2tpbGxwZ19pbXBsKG1vZHVsZSwgcGdpZCwgc2lnbmFsKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0tJTExQRykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9QTE9DSykKKworUHlEb2NfU1RSVkFSKG9zX3Bsb2NrX19kb2NfXywKKyJwbG9jaygkbW9kdWxlLCBvcCwgLylcbiIKKyItLVxuIgorIlxuIgorIkxvY2sgcHJvZ3JhbSBzZWdtZW50cyBpbnRvIG1lbW9yeS5cIik7Iik7CisKKyNkZWZpbmUgT1NfUExPQ0tfTUVUSE9EREVGICAgIFwKKyAgICB7InBsb2NrIiwgKFB5Q0Z1bmN0aW9uKW9zX3Bsb2NrLCBNRVRIX08sIG9zX3Bsb2NrX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19wbG9ja19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBvcCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19wbG9jayhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBvcDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaTpwbG9jayIsICZvcCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19wbG9ja19pbXBsKG1vZHVsZSwgb3ApOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfUExPQ0spICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VUVUlEKQorCitQeURvY19TVFJWQVIob3Nfc2V0dWlkX19kb2NfXywKKyJzZXR1aWQoJG1vZHVsZSwgdWlkLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2V0IHRoZSBjdXJyZW50IHByb2Nlc3NcJ3MgdXNlciBpZC4iKTsKKworI2RlZmluZSBPU19TRVRVSURfTUVUSE9EREVGICAgIFwKKyAgICB7InNldHVpZCIsIChQeUNGdW5jdGlvbilvc19zZXR1aWQsIE1FVEhfTywgb3Nfc2V0dWlkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXR1aWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCB1aWRfdCB1aWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0dWlkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgdWlkX3QgdWlkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjpzZXR1aWQiLCBfUHlfVWlkX0NvbnZlcnRlciwgJnVpZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zZXR1aWRfaW1wbChtb2R1bGUsIHVpZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TRVRVSUQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VURVVJRCkKKworUHlEb2NfU1RSVkFSKG9zX3NldGV1aWRfX2RvY19fLAorInNldGV1aWQoJG1vZHVsZSwgZXVpZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgY3VycmVudCBwcm9jZXNzXCdzIGVmZmVjdGl2ZSB1c2VyIGlkLiIpOworCisjZGVmaW5lIE9TX1NFVEVVSURfTUVUSE9EREVGICAgIFwKKyAgICB7InNldGV1aWQiLCAoUHlDRnVuY3Rpb24pb3Nfc2V0ZXVpZCwgTUVUSF9PLCBvc19zZXRldWlkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRldWlkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgdWlkX3QgZXVpZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRldWlkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgdWlkX3QgZXVpZDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyY6c2V0ZXVpZCIsIF9QeV9VaWRfQ29udmVydGVyLCAmZXVpZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zZXRldWlkX2ltcGwobW9kdWxlLCBldWlkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NFVEVVSUQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VURUdJRCkKKworUHlEb2NfU1RSVkFSKG9zX3NldGVnaWRfX2RvY19fLAorInNldGVnaWQoJG1vZHVsZSwgZWdpZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgY3VycmVudCBwcm9jZXNzXCdzIGVmZmVjdGl2ZSBncm91cCBpZC4iKTsKKworI2RlZmluZSBPU19TRVRFR0lEX01FVEhPRERFRiAgICBcCisgICAgeyJzZXRlZ2lkIiwgKFB5Q0Z1bmN0aW9uKW9zX3NldGVnaWQsIE1FVEhfTywgb3Nfc2V0ZWdpZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0ZWdpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGdpZF90IGVnaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0ZWdpZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGdpZF90IGVnaWQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOnNldGVnaWQiLCBfUHlfR2lkX0NvbnZlcnRlciwgJmVnaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc2V0ZWdpZF9pbXBsKG1vZHVsZSwgZWdpZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TRVRFR0lEKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NFVFJFVUlEKQorCitQeURvY19TVFJWQVIob3Nfc2V0cmV1aWRfX2RvY19fLAorInNldHJldWlkKCRtb2R1bGUsIHJ1aWQsIGV1aWQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTZXQgdGhlIGN1cnJlbnQgcHJvY2Vzc1wncyByZWFsIGFuZCBlZmZlY3RpdmUgdXNlciBpZHMuIik7CisKKyNkZWZpbmUgT1NfU0VUUkVVSURfTUVUSE9EREVGICAgIFwKKyAgICB7InNldHJldWlkIiwgKFB5Q0Z1bmN0aW9uKW9zX3NldHJldWlkLCBNRVRIX1ZBUkFSR1MsIG9zX3NldHJldWlkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRyZXVpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHVpZF90IHJ1aWQsIHVpZF90IGV1aWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0cmV1aWQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgdWlkX3QgcnVpZDsKKyAgICB1aWRfdCBldWlkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJk8mOnNldHJldWlkIiwKKyAgICAgICAgX1B5X1VpZF9Db252ZXJ0ZXIsICZydWlkLCBfUHlfVWlkX0NvbnZlcnRlciwgJmV1aWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc2V0cmV1aWRfaW1wbChtb2R1bGUsIHJ1aWQsIGV1aWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUUkVVSUQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VUUkVHSUQpCisKK1B5RG9jX1NUUlZBUihvc19zZXRyZWdpZF9fZG9jX18sCisic2V0cmVnaWQoJG1vZHVsZSwgcmdpZCwgZWdpZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgY3VycmVudCBwcm9jZXNzXCdzIHJlYWwgYW5kIGVmZmVjdGl2ZSBncm91cCBpZHMuIik7CisKKyNkZWZpbmUgT1NfU0VUUkVHSURfTUVUSE9EREVGICAgIFwKKyAgICB7InNldHJlZ2lkIiwgKFB5Q0Z1bmN0aW9uKW9zX3NldHJlZ2lkLCBNRVRIX1ZBUkFSR1MsIG9zX3NldHJlZ2lkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRyZWdpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGdpZF90IHJnaWQsIGdpZF90IGVnaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0cmVnaWQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgZ2lkX3QgcmdpZDsKKyAgICBnaWRfdCBlZ2lkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJk8mOnNldHJlZ2lkIiwKKyAgICAgICAgX1B5X0dpZF9Db252ZXJ0ZXIsICZyZ2lkLCBfUHlfR2lkX0NvbnZlcnRlciwgJmVnaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc2V0cmVnaWRfaW1wbChtb2R1bGUsIHJnaWQsIGVnaWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUUkVHSUQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0VUR0lEKQorCitQeURvY19TVFJWQVIob3Nfc2V0Z2lkX19kb2NfXywKKyJzZXRnaWQoJG1vZHVsZSwgZ2lkLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2V0IHRoZSBjdXJyZW50IHByb2Nlc3NcJ3MgZ3JvdXAgaWQuIik7CisKKyNkZWZpbmUgT1NfU0VUR0lEX01FVEhPRERFRiAgICBcCisgICAgeyJzZXRnaWQiLCAoUHlDRnVuY3Rpb24pb3Nfc2V0Z2lkLCBNRVRIX08sIG9zX3NldGdpZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0Z2lkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgZ2lkX3QgZ2lkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NldGdpZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGdpZF90IGdpZDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyY6c2V0Z2lkIiwgX1B5X0dpZF9Db252ZXJ0ZXIsICZnaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc2V0Z2lkX2ltcGwobW9kdWxlLCBnaWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUR0lEKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NFVEdST1VQUykKKworUHlEb2NfU1RSVkFSKG9zX3NldGdyb3Vwc19fZG9jX18sCisic2V0Z3JvdXBzKCRtb2R1bGUsIGdyb3VwcywgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgZ3JvdXBzIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MgdG8gbGlzdC4iKTsKKworI2RlZmluZSBPU19TRVRHUk9VUFNfTUVUSE9EREVGICAgIFwKKyAgICB7InNldGdyb3VwcyIsIChQeUNGdW5jdGlvbilvc19zZXRncm91cHMsIE1FVEhfTywgb3Nfc2V0Z3JvdXBzX19kb2NfX30sCisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUR1JPVVBTKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1dBSVQzKQorCitQeURvY19TVFJWQVIob3Nfd2FpdDNfX2RvY19fLAorIndhaXQzKCRtb2R1bGUsIC8sIG9wdGlvbnMpXG4iCisiLS1cbiIKKyJcbiIKKyJXYWl0IGZvciBjb21wbGV0aW9uIG9mIGEgY2hpbGQgcHJvY2Vzcy5cbiIKKyJcbiIKKyJSZXR1cm5zIGEgdHVwbGUgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoaWxkIHByb2Nlc3M6XG4iCisiICAocGlkLCBzdGF0dXMsIHJ1c2FnZSkiKTsKKworI2RlZmluZSBPU19XQUlUM19NRVRIT0RERUYgICAgXAorICAgIHsid2FpdDMiLCAoUHlDRnVuY3Rpb24pb3Nfd2FpdDMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc193YWl0M19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfd2FpdDNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgb3B0aW9ucyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc193YWl0MyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7Im9wdGlvbnMiLCBOVUxMfTsKKyAgICBpbnQgb3B0aW9uczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImk6d2FpdDMiLCBfa2V5d29yZHMsCisgICAgICAgICZvcHRpb25zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3dhaXQzX2ltcGwobW9kdWxlLCBvcHRpb25zKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1dBSVQzKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1dBSVQ0KQorCitQeURvY19TVFJWQVIob3Nfd2FpdDRfX2RvY19fLAorIndhaXQ0KCRtb2R1bGUsIC8sIHBpZCwgb3B0aW9ucylcbiIKKyItLVxuIgorIlxuIgorIldhaXQgZm9yIGNvbXBsZXRpb24gb2YgYSBzcGVjaWZpYyBjaGlsZCBwcm9jZXNzLlxuIgorIlxuIgorIlJldHVybnMgYSB0dXBsZSBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hpbGQgcHJvY2VzczpcbiIKKyIgIChwaWQsIHN0YXR1cywgcnVzYWdlKSIpOworCisjZGVmaW5lIE9TX1dBSVQ0X01FVEhPRERFRiAgICBcCisgICAgeyJ3YWl0NCIsIChQeUNGdW5jdGlvbilvc193YWl0NCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3dhaXQ0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc193YWl0NF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCwgaW50IG9wdGlvbnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfd2FpdDQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwaWQiLCAib3B0aW9ucyIsIE5VTEx9OworICAgIHBpZF90IHBpZDsKKyAgICBpbnQgb3B0aW9uczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIiIgX1B5X1BBUlNFX1BJRCAiaTp3YWl0NCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnBpZCwgJm9wdGlvbnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfd2FpdDRfaW1wbChtb2R1bGUsIHBpZCwgb3B0aW9ucyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9XQUlUNCkgKi8KKworI2lmIChkZWZpbmVkKEhBVkVfV0FJVElEKSAmJiAhZGVmaW5lZChfX0FQUExFX18pKQorCitQeURvY19TVFJWQVIob3Nfd2FpdGlkX19kb2NfXywKKyJ3YWl0aWQoJG1vZHVsZSwgaWR0eXBlLCBpZCwgb3B0aW9ucywgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgdGhlIHJlc3VsdCBvZiB3YWl0aW5nIGZvciBhIHByb2Nlc3Mgb3IgcHJvY2Vzc2VzLlxuIgorIlxuIgorIiAgaWR0eXBlXG4iCisiICAgIE11c3QgYmUgb25lIG9mIGJlIFBfUElELCBQX1BHSUQgb3IgUF9BTEwuXG4iCisiICBpZFxuIgorIiAgICBUaGUgaWQgdG8gd2FpdCBvbi5cbiIKKyIgIG9wdGlvbnNcbiIKKyIgICAgQ29uc3RydWN0ZWQgZnJvbSB0aGUgT1Jpbmcgb2Ygb25lIG9yIG1vcmUgb2YgV0VYSVRFRCwgV1NUT1BQRURcbiIKKyIgICAgb3IgV0NPTlRJTlVFRCBhbmQgYWRkaXRpb25hbGx5IG1heSBiZSBPUmVkIHdpdGggV05PSEFORyBvciBXTk9XQUlULlxuIgorIlxuIgorIlJldHVybnMgZWl0aGVyIHdhaXRpZF9yZXN1bHQgb3IgTm9uZSBpZiBXTk9IQU5HIGlzIHNwZWNpZmllZCBhbmQgdGhlcmUgYXJlXG4iCisibm8gY2hpbGRyZW4gaW4gYSB3YWl0YWJsZSBzdGF0ZS4iKTsKKworI2RlZmluZSBPU19XQUlUSURfTUVUSE9EREVGICAgIFwKKyAgICB7IndhaXRpZCIsIChQeUNGdW5jdGlvbilvc193YWl0aWQsIE1FVEhfVkFSQVJHUywgb3Nfd2FpdGlkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc193YWl0aWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpZHR5cGVfdCBpZHR5cGUsIGlkX3QgaWQsIGludCBvcHRpb25zKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3dhaXRpZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpZHR5cGVfdCBpZHR5cGU7CisgICAgaWRfdCBpZDsKKyAgICBpbnQgb3B0aW9uczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaSIgX1B5X1BBUlNFX1BJRCAiaTp3YWl0aWQiLAorICAgICAgICAmaWR0eXBlLCAmaWQsICZvcHRpb25zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3dhaXRpZF9pbXBsKG1vZHVsZSwgaWR0eXBlLCBpZCwgb3B0aW9ucyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIChkZWZpbmVkKEhBVkVfV0FJVElEKSAmJiAhZGVmaW5lZChfX0FQUExFX18pKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1dBSVRQSUQpCisKK1B5RG9jX1NUUlZBUihvc193YWl0cGlkX19kb2NfXywKKyJ3YWl0cGlkKCRtb2R1bGUsIHBpZCwgb3B0aW9ucywgLylcbiIKKyItLVxuIgorIlxuIgorIldhaXQgZm9yIGNvbXBsZXRpb24gb2YgYSBnaXZlbiBjaGlsZCBwcm9jZXNzLlxuIgorIlxuIgorIlJldHVybnMgYSB0dXBsZSBvZiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGNoaWxkIHByb2Nlc3M6XG4iCisiICAgIChwaWQsIHN0YXR1cylcbiIKKyJcbiIKKyJUaGUgb3B0aW9ucyBhcmd1bWVudCBpcyBpZ25vcmVkIG9uIFdpbmRvd3MuIik7CisKKyNkZWZpbmUgT1NfV0FJVFBJRF9NRVRIT0RERUYgICAgXAorICAgIHsid2FpdHBpZCIsIChQeUNGdW5jdGlvbilvc193YWl0cGlkLCBNRVRIX1ZBUkFSR1MsIG9zX3dhaXRwaWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3dhaXRwaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQsIGludCBvcHRpb25zKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3dhaXRwaWQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgcGlkX3QgcGlkOworICAgIGludCBvcHRpb25zOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiIF9QeV9QQVJTRV9QSUQgImk6d2FpdHBpZCIsCisgICAgICAgICZwaWQsICZvcHRpb25zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3dhaXRwaWRfaW1wbChtb2R1bGUsIHBpZCwgb3B0aW9ucyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9XQUlUUElEKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0NXQUlUKQorCitQeURvY19TVFJWQVIob3Nfd2FpdHBpZF9fZG9jX18sCisid2FpdHBpZCgkbW9kdWxlLCBwaWQsIG9wdGlvbnMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXYWl0IGZvciBjb21wbGV0aW9uIG9mIGEgZ2l2ZW4gcHJvY2Vzcy5cbiIKKyJcbiIKKyJSZXR1cm5zIGEgdHVwbGUgb2YgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBwcm9jZXNzOlxuIgorIiAgICAocGlkLCBzdGF0dXMgPDwgOClcbiIKKyJcbiIKKyJUaGUgb3B0aW9ucyBhcmd1bWVudCBpcyBpZ25vcmVkIG9uIFdpbmRvd3MuIik7CisKKyNkZWZpbmUgT1NfV0FJVFBJRF9NRVRIT0RERUYgICAgXAorICAgIHsid2FpdHBpZCIsIChQeUNGdW5jdGlvbilvc193YWl0cGlkLCBNRVRIX1ZBUkFSR1MsIG9zX3dhaXRwaWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3dhaXRwaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9pbnRwdHJfdCBwaWQsIGludCBvcHRpb25zKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3dhaXRwaWQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfaW50cHRyX3QgcGlkOworICAgIGludCBvcHRpb25zOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiIF9QeV9QQVJTRV9JTlRQVFIgImk6d2FpdHBpZCIsCisgICAgICAgICZwaWQsICZvcHRpb25zKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3dhaXRwaWRfaW1wbChtb2R1bGUsIHBpZCwgb3B0aW9ucyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9DV0FJVCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9XQUlUKQorCitQeURvY19TVFJWQVIob3Nfd2FpdF9fZG9jX18sCisid2FpdCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV2FpdCBmb3IgY29tcGxldGlvbiBvZiBhIGNoaWxkIHByb2Nlc3MuXG4iCisiXG4iCisiUmV0dXJucyBhIHR1cGxlIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGlsZCBwcm9jZXNzOlxuIgorIiAgICAocGlkLCBzdGF0dXMpIik7CisKKyNkZWZpbmUgT1NfV0FJVF9NRVRIT0RERUYgICAgXAorICAgIHsid2FpdCIsIChQeUNGdW5jdGlvbilvc193YWl0LCBNRVRIX05PQVJHUywgb3Nfd2FpdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfd2FpdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfd2FpdChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc193YWl0X2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9XQUlUKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NZTUxJTkspCisKK1B5RG9jX1NUUlZBUihvc19zeW1saW5rX19kb2NfXywKKyJzeW1saW5rKCRtb2R1bGUsIC8sIHNyYywgZHN0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlLCAqLCBkaXJfZmQ9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgcG9pbnRpbmcgdG8gc3JjIG5hbWVkIGRzdC5cbiIKKyJcbiIKKyJ0YXJnZXRfaXNfZGlyZWN0b3J5IGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MgaWYgdGhlIHRhcmdldCBpcyB0byBiZVxuIgorIiAgaW50ZXJwcmV0ZWQgYXMgYSBkaXJlY3RvcnkuICAoT24gV2luZG93cywgc3ltbGluayByZXF1aXJlc1xuIgorIiAgV2luZG93cyA2LjAgb3IgZ3JlYXRlciwgYW5kIHJhaXNlcyBhIE5vdEltcGxlbWVudGVkRXJyb3Igb3RoZXJ3aXNlLilcbiIKKyIgIHRhcmdldF9pc19kaXJlY3RvcnkgaXMgaWdub3JlZCBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMuXG4iCisiXG4iCisiSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcbiIKKyIgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuXG4iCisiZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cbiIKKyIgIElmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4iKTsKKworI2RlZmluZSBPU19TWU1MSU5LX01FVEhPRERFRiAgICBcCisgICAgeyJzeW1saW5rIiwgKFB5Q0Z1bmN0aW9uKW9zX3N5bWxpbmssIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19zeW1saW5rX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zeW1saW5rX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpzcmMsIHBhdGhfdCAqZHN0LAorICAgICAgICAgICAgICAgIGludCB0YXJnZXRfaXNfZGlyZWN0b3J5LCBpbnQgZGlyX2ZkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N5bWxpbmsoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzcmMiLCAiZHN0IiwgInRhcmdldF9pc19kaXJlY3RvcnkiLCAiZGlyX2ZkIiwgTlVMTH07CisgICAgcGF0aF90IHNyYyA9IFBBVEhfVF9JTklUSUFMSVpFKCJzeW1saW5rIiwgInNyYyIsIDAsIDApOworICAgIHBhdGhfdCBkc3QgPSBQQVRIX1RfSU5JVElBTElaRSgic3ltbGluayIsICJkc3QiLCAwLCAwKTsKKyAgICBpbnQgdGFyZ2V0X2lzX2RpcmVjdG9yeSA9IDA7CisgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnxwJE8mOnN5bWxpbmsiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLCBwYXRoX2NvbnZlcnRlciwgJmRzdCwgJnRhcmdldF9pc19kaXJlY3RvcnksIFNZTUxJTktBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3N5bWxpbmtfaW1wbChtb2R1bGUsICZzcmMsICZkc3QsIHRhcmdldF9pc19kaXJlY3RvcnksIGRpcl9mZCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3Igc3JjICovCisgICAgcGF0aF9jbGVhbnVwKCZzcmMpOworICAgIC8qIENsZWFudXAgZm9yIGRzdCAqLworICAgIHBhdGhfY2xlYW51cCgmZHN0KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lNTElOSykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9USU1FUykKKworUHlEb2NfU1RSVkFSKG9zX3RpbWVzX19kb2NfXywKKyJ0aW1lcygkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgY29sbGVjdGlvbiBjb250YWluaW5nIHByb2Nlc3MgdGltaW5nIGluZm9ybWF0aW9uLlxuIgorIlxuIgorIlRoZSBvYmplY3QgcmV0dXJuZWQgYmVoYXZlcyBsaWtlIGEgbmFtZWQgdHVwbGUgd2l0aCB0aGVzZSBmaWVsZHM6XG4iCisiICAodXRpbWUsIHN0aW1lLCBjdXRpbWUsIGNzdGltZSwgZWxhcHNlZF90aW1lKVxuIgorIkFsbCBmaWVsZHMgYXJlIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIik7CisKKyNkZWZpbmUgT1NfVElNRVNfTUVUSE9EREVGICAgIFwKKyAgICB7InRpbWVzIiwgKFB5Q0Z1bmN0aW9uKW9zX3RpbWVzLCBNRVRIX05PQVJHUywgb3NfdGltZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3RpbWVzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc190aW1lcyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc190aW1lc19pbXBsKG1vZHVsZSk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfVElNRVMpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUU0lEKQorCitQeURvY19TVFJWQVIob3NfZ2V0c2lkX19kb2NfXywKKyJnZXRzaWQoJG1vZHVsZSwgcGlkLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2FsbCB0aGUgc3lzdGVtIGNhbGwgZ2V0c2lkKHBpZCkgYW5kIHJldHVybiB0aGUgcmVzdWx0LiIpOworCisjZGVmaW5lIE9TX0dFVFNJRF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0c2lkIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldHNpZCwgTUVUSF9PLCBvc19nZXRzaWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldHNpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRzaWQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBwaWRfdCBwaWQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIiIgX1B5X1BBUlNFX1BJRCAiOmdldHNpZCIsICZwaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZ2V0c2lkX2ltcGwobW9kdWxlLCBwaWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfR0VUU0lEKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NFVFNJRCkKKworUHlEb2NfU1RSVkFSKG9zX3NldHNpZF9fZG9jX18sCisic2V0c2lkKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDYWxsIHRoZSBzeXN0ZW0gY2FsbCBzZXRzaWQoKS4iKTsKKworI2RlZmluZSBPU19TRVRTSURfTUVUSE9EREVGICAgIFwKKyAgICB7InNldHNpZCIsIChQeUNGdW5jdGlvbilvc19zZXRzaWQsIE1FVEhfTk9BUkdTLCBvc19zZXRzaWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NldHNpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0c2lkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIG9zX3NldHNpZF9pbXBsKG1vZHVsZSk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUU0lEKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NFVFBHSUQpCisKK1B5RG9jX1NUUlZBUihvc19zZXRwZ2lkX19kb2NfXywKKyJzZXRwZ2lkKCRtb2R1bGUsIHBpZCwgcGdycCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNhbGwgdGhlIHN5c3RlbSBjYWxsIHNldHBnaWQocGlkLCBwZ3JwKS4iKTsKKworI2RlZmluZSBPU19TRVRQR0lEX01FVEhPRERFRiAgICBcCisgICAgeyJzZXRwZ2lkIiwgKFB5Q0Z1bmN0aW9uKW9zX3NldHBnaWQsIE1FVEhfVkFSQVJHUywgb3Nfc2V0cGdpZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0cGdpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCwgcGlkX3QgcGdycCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRwZ2lkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHBpZF90IHBpZDsKKyAgICBwaWRfdCBwZ3JwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiIF9QeV9QQVJTRV9QSUQgIiIgX1B5X1BBUlNFX1BJRCAiOnNldHBnaWQiLAorICAgICAgICAmcGlkLCAmcGdycCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zZXRwZ2lkX2ltcGwobW9kdWxlLCBwaWQsIHBncnApOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUUEdJRCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9UQ0dFVFBHUlApCisKK1B5RG9jX1NUUlZBUihvc190Y2dldHBncnBfX2RvY19fLAorInRjZ2V0cGdycCgkbW9kdWxlLCBmZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgcHJvY2VzcyBncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIHRlcm1pbmFsIHNwZWNpZmllZCBieSBmZC4iKTsKKworI2RlZmluZSBPU19UQ0dFVFBHUlBfTUVUSE9EREVGICAgIFwKKyAgICB7InRjZ2V0cGdycCIsIChQeUNGdW5jdGlvbilvc190Y2dldHBncnAsIE1FVEhfTywgb3NfdGNnZXRwZ3JwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc190Y2dldHBncnBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdGNnZXRwZ3JwKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGZkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOnRjZ2V0cGdycCIsICZmZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc190Y2dldHBncnBfaW1wbChtb2R1bGUsIGZkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1RDR0VUUEdSUCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9UQ1NFVFBHUlApCisKK1B5RG9jX1NUUlZBUihvc190Y3NldHBncnBfX2RvY19fLAorInRjc2V0cGdycCgkbW9kdWxlLCBmZCwgcGdpZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgcHJvY2VzcyBncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIHRlcm1pbmFsIHNwZWNpZmllZCBieSBmZC4iKTsKKworI2RlZmluZSBPU19UQ1NFVFBHUlBfTUVUSE9EREVGICAgIFwKKyAgICB7InRjc2V0cGdycCIsIChQeUNGdW5jdGlvbilvc190Y3NldHBncnAsIE1FVEhfVkFSQVJHUywgb3NfdGNzZXRwZ3JwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc190Y3NldHBncnBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIHBpZF90IHBnaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdGNzZXRwZ3JwKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBwaWRfdCBwZ2lkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpIiBfUHlfUEFSU0VfUElEICI6dGNzZXRwZ3JwIiwKKyAgICAgICAgJmZkLCAmcGdpZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc190Y3NldHBncnBfaW1wbChtb2R1bGUsIGZkLCBwZ2lkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1RDU0VUUEdSUCkgKi8KKworUHlEb2NfU1RSVkFSKG9zX29wZW5fX2RvY19fLAorIm9wZW4oJG1vZHVsZSwgLywgcGF0aCwgZmxhZ3MsIG1vZGU9NTExLCAqLCBkaXJfZmQ9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIk9wZW4gYSBmaWxlIGZvciBsb3cgbGV2ZWwgSU8uICBSZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yIChpbnRlZ2VyKS5cbiIKKyJcbiIKKyJJZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cbiIKKyJkaXJfZmQgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuIgorIiAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisjZGVmaW5lIE9TX09QRU5fTUVUSE9EREVGICAgIFwKKyAgICB7Im9wZW4iLCAoUHlDRnVuY3Rpb24pb3Nfb3BlbiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX29wZW5fX2RvY19ffSwKKworc3RhdGljIGludAorb3Nfb3Blbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGZsYWdzLCBpbnQgbW9kZSwgaW50IGRpcl9mZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19vcGVuKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJmbGFncyIsICJtb2RlIiwgImRpcl9mZCIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoIm9wZW4iLCAicGF0aCIsIDAsIDApOworICAgIGludCBmbGFnczsKKyAgICBpbnQgbW9kZSA9IDUxMTsKKyAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJml8aSRPJjpvcGVuIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZmbGFncywgJm1vZGUsIE9QRU5BVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19vcGVuX2ltcGwobW9kdWxlLCAmcGF0aCwgZmxhZ3MsIG1vZGUsIGRpcl9mZCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG9zX2Nsb3NlX19kb2NfXywKKyJjbG9zZSgkbW9kdWxlLCAvLCBmZClcbiIKKyItLVxuIgorIlxuIgorIkNsb3NlIGEgZmlsZSBkZXNjcmlwdG9yLiIpOworCisjZGVmaW5lIE9TX0NMT1NFX01FVEhPRERFRiAgICBcCisgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbilvc19jbG9zZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2Nsb3NlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jbG9zZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jbG9zZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZkIiwgTlVMTH07CisgICAgaW50IGZkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaTpjbG9zZSIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2Nsb3NlX2ltcGwobW9kdWxlLCBmZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG9zX2Nsb3NlcmFuZ2VfX2RvY19fLAorImNsb3NlcmFuZ2UoJG1vZHVsZSwgZmRfbG93LCBmZF9oaWdoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2xvc2VzIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGluIFtmZF9sb3csIGZkX2hpZ2gpLCBpZ25vcmluZyBlcnJvcnMuIik7CisKKyNkZWZpbmUgT1NfQ0xPU0VSQU5HRV9NRVRIT0RERUYgICAgXAorICAgIHsiY2xvc2VyYW5nZSIsIChQeUNGdW5jdGlvbilvc19jbG9zZXJhbmdlLCBNRVRIX1ZBUkFSR1MsIG9zX2Nsb3NlcmFuZ2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2Nsb3NlcmFuZ2VfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmRfbG93LCBpbnQgZmRfaGlnaCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jbG9zZXJhbmdlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZF9sb3c7CisgICAgaW50IGZkX2hpZ2g7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOmNsb3NlcmFuZ2UiLAorICAgICAgICAmZmRfbG93LCAmZmRfaGlnaCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19jbG9zZXJhbmdlX2ltcGwobW9kdWxlLCBmZF9sb3csIGZkX2hpZ2gpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihvc19kdXBfX2RvY19fLAorImR1cCgkbW9kdWxlLCBmZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGR1cGxpY2F0ZSBvZiBhIGZpbGUgZGVzY3JpcHRvci4iKTsKKworI2RlZmluZSBPU19EVVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1cCIsIChQeUNGdW5jdGlvbilvc19kdXAsIE1FVEhfTywgb3NfZHVwX19kb2NfX30sCisKK3N0YXRpYyBpbnQKK29zX2R1cF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19kdXAoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImk6ZHVwIiwgJmZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19kdXBfaW1wbChtb2R1bGUsIGZkKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG9zX2R1cDJfX2RvY19fLAorImR1cDIoJG1vZHVsZSwgLywgZmQsIGZkMiwgaW5oZXJpdGFibGU9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIkR1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3IuIik7CisKKyNkZWZpbmUgT1NfRFVQMl9NRVRIT0RERUYgICAgXAorICAgIHsiZHVwMiIsIChQeUNGdW5jdGlvbilvc19kdXAyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfZHVwMl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZHVwMl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgaW50IGZkMiwgaW50IGluaGVyaXRhYmxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2R1cDIoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmZCIsICJmZDIiLCAiaW5oZXJpdGFibGUiLCBOVUxMfTsKKyAgICBpbnQgZmQ7CisgICAgaW50IGZkMjsKKyAgICBpbnQgaW5oZXJpdGFibGUgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaWl8cDpkdXAyIiwgX2tleXdvcmRzLAorICAgICAgICAmZmQsICZmZDIsICZpbmhlcml0YWJsZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19kdXAyX2ltcGwobW9kdWxlLCBmZCwgZmQyLCBpbmhlcml0YWJsZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9MT0NLRikKKworUHlEb2NfU1RSVkFSKG9zX2xvY2tmX19kb2NfXywKKyJsb2NrZigkbW9kdWxlLCBmZCwgY29tbWFuZCwgbGVuZ3RoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQXBwbHksIHRlc3Qgb3IgcmVtb3ZlIGEgUE9TSVggbG9jayBvbiBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cbiIKKyJcbiIKKyIgIGZkXG4iCisiICAgIEFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuIgorIiAgY29tbWFuZFxuIgorIiAgICBPbmUgb2YgRl9MT0NLLCBGX1RMT0NLLCBGX1VMT0NLIG9yIEZfVEVTVC5cbiIKKyIgIGxlbmd0aFxuIgorIiAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGxvY2ssIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLiIpOworCisjZGVmaW5lIE9TX0xPQ0tGX01FVEhPRERFRiAgICBcCisgICAgeyJsb2NrZiIsIChQeUNGdW5jdGlvbilvc19sb2NrZiwgTUVUSF9WQVJBUkdTLCBvc19sb2NrZl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbG9ja2ZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBjb21tYW5kLCBQeV9vZmZfdCBsZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbG9ja2YoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGZkOworICAgIGludCBjb21tYW5kOworICAgIFB5X29mZl90IGxlbmd0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPJjpsb2NrZiIsCisgICAgICAgICZmZCwgJmNvbW1hbmQsIFB5X29mZl90X2NvbnZlcnRlciwgJmxlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19sb2NrZl9pbXBsKG1vZHVsZSwgZmQsIGNvbW1hbmQsIGxlbmd0aCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT0NLRikgKi8KKworUHlEb2NfU1RSVkFSKG9zX2xzZWVrX19kb2NfXywKKyJsc2VlaygkbW9kdWxlLCBmZCwgcG9zaXRpb24sIGhvdywgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgcG9zaXRpb24gb2YgYSBmaWxlIGRlc2NyaXB0b3IuICBSZXR1cm4gdGhlIG5ldyBwb3NpdGlvbi5cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG5ldyBjdXJzb3IgcG9zaXRpb24gaW4gbnVtYmVyIG9mIGJ5dGVzXG4iCisicmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4iKTsKKworI2RlZmluZSBPU19MU0VFS19NRVRIT0RERUYgICAgXAorICAgIHsibHNlZWsiLCAoUHlDRnVuY3Rpb24pb3NfbHNlZWssIE1FVEhfVkFSQVJHUywgb3NfbHNlZWtfX2RvY19ffSwKKworc3RhdGljIFB5X29mZl90Citvc19sc2Vla19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgUHlfb2ZmX3QgcG9zaXRpb24sIGludCBob3cpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbHNlZWsoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGZkOworICAgIFB5X29mZl90IHBvc2l0aW9uOworICAgIGludCBob3c7CisgICAgUHlfb2ZmX3QgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU8maTpsc2VlayIsCisgICAgICAgICZmZCwgUHlfb2ZmX3RfY29udmVydGVyLCAmcG9zaXRpb24sICZob3cpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX2xzZWVrX2ltcGwobW9kdWxlLCBmZCwgcG9zaXRpb24sIGhvdyk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21QeV9vZmZfdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIob3NfcmVhZF9fZG9jX18sCisicmVhZCgkbW9kdWxlLCBmZCwgbGVuZ3RoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVhZCBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yLiAgUmV0dXJucyBhIGJ5dGVzIG9iamVjdC4iKTsKKworI2RlZmluZSBPU19SRUFEX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkIiwgKFB5Q0Z1bmN0aW9uKW9zX3JlYWQsIE1FVEhfVkFSQVJHUywgb3NfcmVhZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcmVhZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgUHlfc3NpemVfdCBsZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcmVhZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgUHlfc3NpemVfdCBsZW5ndGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImluOnJlYWQiLAorICAgICAgICAmZmQsICZsZW5ndGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfcmVhZF9pbXBsKG1vZHVsZSwgZmQsIGxlbmd0aCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9SRUFEVikKKworUHlEb2NfU1RSVkFSKG9zX3JlYWR2X19kb2NfXywKKyJyZWFkdigkbW9kdWxlLCBmZCwgYnVmZmVycywgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvciBmZCBpbnRvIGFuIGl0ZXJhYmxlIG9mIGJ1ZmZlcnMuXG4iCisiXG4iCisiVGhlIGJ1ZmZlcnMgc2hvdWxkIGJlIG11dGFibGUgYnVmZmVycyBhY2NlcHRpbmcgYnl0ZXMuXG4iCisicmVhZHYgd2lsbCB0cmFuc2ZlciBkYXRhIGludG8gZWFjaCBidWZmZXIgdW50aWwgaXQgaXMgZnVsbFxuIgorImFuZCB0aGVuIG1vdmUgb24gdG8gdGhlIG5leHQgYnVmZmVyIGluIHRoZSBzZXF1ZW5jZSB0byBob2xkXG4iCisidGhlIHJlc3Qgb2YgdGhlIGRhdGEuXG4iCisiXG4iCisicmVhZHYgcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQsXG4iCisid2hpY2ggbWF5IGJlIGxlc3MgdGhhbiB0aGUgdG90YWwgY2FwYWNpdHkgb2YgYWxsIHRoZSBidWZmZXJzLiIpOworCisjZGVmaW5lIE9TX1JFQURWX01FVEhPRERFRiAgICBcCisgICAgeyJyZWFkdiIsIChQeUNGdW5jdGlvbilvc19yZWFkdiwgTUVUSF9WQVJBUkdTLCBvc19yZWFkdl9fZG9jX199LAorCitzdGF0aWMgUHlfc3NpemVfdAorb3NfcmVhZHZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIFB5T2JqZWN0ICpidWZmZXJzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3JlYWR2KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBQeU9iamVjdCAqYnVmZmVyczsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPOnJlYWR2IiwKKyAgICAgICAgJmZkLCAmYnVmZmVycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfcmVhZHZfaW1wbChtb2R1bGUsIGZkLCBidWZmZXJzKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9SRUFEVikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9QUkVBRCkKKworUHlEb2NfU1RSVkFSKG9zX3ByZWFkX19kb2NfXywKKyJwcmVhZCgkbW9kdWxlLCBmZCwgbGVuZ3RoLCBvZmZzZXQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIGEgbnVtYmVyIG9mIGJ5dGVzIGZyb20gYSBmaWxlIGRlc2NyaXB0b3Igc3RhcnRpbmcgYXQgYSBwYXJ0aWN1bGFyIG9mZnNldC5cbiIKKyJcbiIKKyJSZWFkIGxlbmd0aCBieXRlcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBmZCwgc3RhcnRpbmcgYXQgb2Zmc2V0IGJ5dGVzIGZyb21cbiIKKyJ0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlIGZpbGUgb2Zmc2V0IHJlbWFpbnMgdW5jaGFuZ2VkLiIpOworCisjZGVmaW5lIE9TX1BSRUFEX01FVEhPRERFRiAgICBcCisgICAgeyJwcmVhZCIsIChQeUNGdW5jdGlvbilvc19wcmVhZCwgTUVUSF9WQVJBUkdTLCBvc19wcmVhZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcHJlYWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBsZW5ndGgsIFB5X29mZl90IG9mZnNldCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19wcmVhZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgaW50IGxlbmd0aDsKKyAgICBQeV9vZmZfdCBvZmZzZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpTyY6cHJlYWQiLAorICAgICAgICAmZmQsICZsZW5ndGgsIFB5X29mZl90X2NvbnZlcnRlciwgJm9mZnNldCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19wcmVhZF9pbXBsKG1vZHVsZSwgZmQsIGxlbmd0aCwgb2Zmc2V0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1BSRUFEKSAqLworCitQeURvY19TVFJWQVIob3Nfd3JpdGVfX2RvY19fLAorIndyaXRlKCRtb2R1bGUsIGZkLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV3JpdGUgYSBieXRlcyBvYmplY3QgdG8gYSBmaWxlIGRlc2NyaXB0b3IuIik7CisKKyNkZWZpbmUgT1NfV1JJVEVfTUVUSE9EREVGICAgIFwKKyAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKW9zX3dyaXRlLCBNRVRIX1ZBUkFSR1MsIG9zX3dyaXRlX19kb2NfX30sCisKK3N0YXRpYyBQeV9zc2l6ZV90Citvc193cml0ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3dyaXRlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml5Kjp3cml0ZSIsCisgICAgICAgICZmZCwgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3dyaXRlX2ltcGwobW9kdWxlLCBmZCwgJmRhdGEpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG9zX2ZzdGF0X19kb2NfXywKKyJmc3RhdCgkbW9kdWxlLCAvLCBmZClcbiIKKyItLVxuIgorIlxuIgorIlBlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiXG4iCisiTGlrZSBzdGF0KCksIGJ1dCBmb3IgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiRXF1aXZhbGVudCB0byBvcy5zdGF0KGZkKS4iKTsKKworI2RlZmluZSBPU19GU1RBVF9NRVRIT0RERUYgICAgXAorICAgIHsiZnN0YXQiLCAoUHlDRnVuY3Rpb24pb3NfZnN0YXQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19mc3RhdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnN0YXRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnN0YXQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmZCIsIE5VTEx9OworICAgIGludCBmZDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImk6ZnN0YXQiLCBfa2V5d29yZHMsCisgICAgICAgICZmZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19mc3RhdF9pbXBsKG1vZHVsZSwgZmQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihvc19pc2F0dHlfX2RvY19fLAorImlzYXR0eSgkbW9kdWxlLCBmZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBUcnVlIGlmIHRoZSBmZCBpcyBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC5cbiIKKyJcbiIKKyJSZXR1cm4gVHJ1ZSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yXG4iCisiY29ubmVjdGVkIHRvIHRoZSBzbGF2ZSBlbmQgb2YgYSB0ZXJtaW5hbC4iKTsKKworI2RlZmluZSBPU19JU0FUVFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImlzYXR0eSIsIChQeUNGdW5jdGlvbilvc19pc2F0dHksIE1FVEhfTywgb3NfaXNhdHR5X19kb2NfX30sCisKK3N0YXRpYyBpbnQKK29zX2lzYXR0eV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19pc2F0dHkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImk6aXNhdHR5IiwgJmZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19pc2F0dHlfaW1wbChtb2R1bGUsIGZkKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9QSVBFKQorCitQeURvY19TVFJWQVIob3NfcGlwZV9fZG9jX18sCisicGlwZSgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgcGlwZS5cbiIKKyJcbiIKKyJSZXR1cm5zIGEgdHVwbGUgb2YgdHdvIGZpbGUgZGVzY3JpcHRvcnM6XG4iCisiICAocmVhZF9mZCwgd3JpdGVfZmQpIik7CisKKyNkZWZpbmUgT1NfUElQRV9NRVRIT0RERUYgICAgXAorICAgIHsicGlwZSIsIChQeUNGdW5jdGlvbilvc19waXBlLCBNRVRIX05PQVJHUywgb3NfcGlwZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcGlwZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcGlwZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19waXBlX2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9QSVBFKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1BJUEUyKQorCitQeURvY19TVFJWQVIob3NfcGlwZTJfX2RvY19fLAorInBpcGUyKCRtb2R1bGUsIGZsYWdzLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgcGlwZSB3aXRoIGZsYWdzIHNldCBhdG9taWNhbGx5LlxuIgorIlxuIgorIlJldHVybnMgYSB0dXBsZSBvZiB0d28gZmlsZSBkZXNjcmlwdG9yczpcbiIKKyIgIChyZWFkX2ZkLCB3cml0ZV9mZClcbiIKKyJcbiIKKyJmbGFncyBjYW4gYmUgY29uc3RydWN0ZWQgYnkgT1JpbmcgdG9nZXRoZXIgb25lIG9yIG1vcmUgb2YgdGhlc2UgdmFsdWVzOlxuIgorIk9fTk9OQkxPQ0ssIE9fQ0xPRVhFQy4iKTsKKworI2RlZmluZSBPU19QSVBFMl9NRVRIT0RERUYgICAgXAorICAgIHsicGlwZTIiLCAoUHlDRnVuY3Rpb24pb3NfcGlwZTIsIE1FVEhfTywgb3NfcGlwZTJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3BpcGUyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZsYWdzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3BpcGUyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGZsYWdzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOnBpcGUyIiwgJmZsYWdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3BpcGUyX2ltcGwobW9kdWxlLCBmbGFncyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9QSVBFMikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9XUklURVYpCisKK1B5RG9jX1NUUlZBUihvc193cml0ZXZfX2RvY19fLAorIndyaXRldigkbW9kdWxlLCBmZCwgYnVmZmVycywgLylcbiIKKyItLVxuIgorIlxuIgorIkl0ZXJhdGUgb3ZlciBidWZmZXJzLCBhbmQgd3JpdGUgdGhlIGNvbnRlbnRzIG9mIGVhY2ggdG8gYSBmaWxlIGRlc2NyaXB0b3IuXG4iCisiXG4iCisiUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uXG4iCisiYnVmZmVycyBtdXN0IGJlIGEgc2VxdWVuY2Ugb2YgYnl0ZXMtbGlrZSBvYmplY3RzLiIpOworCisjZGVmaW5lIE9TX1dSSVRFVl9NRVRIT0RERUYgICAgXAorICAgIHsid3JpdGV2IiwgKFB5Q0Z1bmN0aW9uKW9zX3dyaXRldiwgTUVUSF9WQVJBUkdTLCBvc193cml0ZXZfX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK29zX3dyaXRldl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgUHlPYmplY3QgKmJ1ZmZlcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfd3JpdGV2KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBQeU9iamVjdCAqYnVmZmVyczsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPOndyaXRldiIsCisgICAgICAgICZmZCwgJmJ1ZmZlcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3dyaXRldl9pbXBsKG1vZHVsZSwgZmQsIGJ1ZmZlcnMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1dSSVRFVikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9QV1JJVEUpCisKK1B5RG9jX1NUUlZBUihvc19wd3JpdGVfX2RvY19fLAorInB3cml0ZSgkbW9kdWxlLCBmZCwgYnVmZmVyLCBvZmZzZXQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXcml0ZSBieXRlcyB0byBhIGZpbGUgZGVzY3JpcHRvciBzdGFydGluZyBhdCBhIHBhcnRpY3VsYXIgb2Zmc2V0LlxuIgorIlxuIgorIldyaXRlIGJ1ZmZlciB0byBmZCwgc3RhcnRpbmcgYXQgb2Zmc2V0IGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZlxuIgorInRoZSBmaWxlLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZS4gIERvZXMgbm90IGNoYW5nZSB0aGVcbiIKKyJjdXJyZW50IGZpbGUgb2Zmc2V0LiIpOworCisjZGVmaW5lIE9TX1BXUklURV9NRVRIT0RERUYgICAgXAorICAgIHsicHdyaXRlIiwgKFB5Q0Z1bmN0aW9uKW9zX3B3cml0ZSwgTUVUSF9WQVJBUkdTLCBvc19wd3JpdGVfX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK29zX3B3cml0ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgUHlfYnVmZmVyICpidWZmZXIsIFB5X29mZl90IG9mZnNldCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19wd3JpdGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGZkOworICAgIFB5X2J1ZmZlciBidWZmZXIgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfb2ZmX3Qgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXkqTyY6cHdyaXRlIiwKKyAgICAgICAgJmZkLCAmYnVmZmVyLCBQeV9vZmZfdF9jb252ZXJ0ZXIsICZvZmZzZXQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3B3cml0ZV9pbXBsKG1vZHVsZSwgZmQsICZidWZmZXIsIG9mZnNldCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGJ1ZmZlciAqLworICAgIGlmIChidWZmZXIub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1BXUklURSkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9NS0ZJRk8pCisKK1B5RG9jX1NUUlZBUihvc19ta2ZpZm9fX2RvY19fLAorIm1rZmlmbygkbW9kdWxlLCAvLCBwYXRoLCBtb2RlPTQzOCwgKiwgZGlyX2ZkPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGUgYSBcImZpZm9cIiAoYSBQT1NJWCBuYW1lZCBwaXBlKS5cbiIKKyJcbiIKKyJJZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cbiIKKyJkaXJfZmQgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuIgorIiAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisjZGVmaW5lIE9TX01LRklGT19NRVRIT0RERUYgICAgXAorICAgIHsibWtmaWZvIiwgKFB5Q0Z1bmN0aW9uKW9zX21rZmlmbywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX21rZmlmb19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbWtmaWZvX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSwgaW50IGRpcl9mZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19ta2ZpZm8oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgibWtmaWZvIiwgInBhdGgiLCAwLCAwKTsKKyAgICBpbnQgbW9kZSA9IDQzODsKKyAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnxpJE8mOm1rZmlmbyIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSwgTUtGSUZPQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19ta2ZpZm9faW1wbChtb2R1bGUsICZwYXRoLCBtb2RlLCBkaXJfZmQpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9NS0ZJRk8pICovCisKKyNpZiAoZGVmaW5lZChIQVZFX01LTk9EKSAmJiBkZWZpbmVkKEhBVkVfTUFLRURFVikpCisKK1B5RG9jX1NUUlZBUihvc19ta25vZF9fZG9jX18sCisibWtub2QoJG1vZHVsZSwgLywgcGF0aCwgbW9kZT0zODQsIGRldmljZT0wLCAqLCBkaXJfZmQ9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhIG5vZGUgaW4gdGhlIGZpbGUgc3lzdGVtLlxuIgorIlxuIgorIkNyZWF0ZSBhIG5vZGUgaW4gdGhlIGZpbGUgc3lzdGVtIChmaWxlLCBkZXZpY2Ugc3BlY2lhbCBmaWxlIG9yIG5hbWVkIHBpcGUpXG4iCisiYXQgcGF0aC4gIG1vZGUgc3BlY2lmaWVzIGJvdGggdGhlIHBlcm1pc3Npb25zIHRvIHVzZSBhbmQgdGhlXG4iCisidHlwZSBvZiBub2RlIHRvIGJlIGNyZWF0ZWQsIGJlaW5nIGNvbWJpbmVkIChiaXR3aXNlIE9SKSB3aXRoIG9uZSBvZlxuIgorIlNfSUZSRUcsIFNfSUZDSFIsIFNfSUZCTEssIGFuZCBTX0lGSUZPLiAgSWYgU19JRkNIUiBvciBTX0lGQkxLIGlzIHNldCBvbiBtb2RlLFxuIgorImRldmljZSBkZWZpbmVzIHRoZSBuZXdseSBjcmVhdGVkIGRldmljZSBzcGVjaWFsIGZpbGUgKHByb2JhYmx5IHVzaW5nXG4iCisib3MubWFrZWRldigpKS4gIE90aGVyd2lzZSBkZXZpY2UgaXMgaWdub3JlZC5cbiIKKyJcbiIKKyJJZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cbiIKKyJkaXJfZmQgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuIgorIiAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisjZGVmaW5lIE9TX01LTk9EX01FVEhPRERFRiAgICBcCisgICAgeyJta25vZCIsIChQeUNGdW5jdGlvbilvc19ta25vZCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX21rbm9kX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19ta25vZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGRldl90IGRldmljZSwKKyAgICAgICAgICAgICAgaW50IGRpcl9mZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19ta25vZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkZXZpY2UiLCAiZGlyX2ZkIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgibWtub2QiLCAicGF0aCIsIDAsIDApOworICAgIGludCBtb2RlID0gMzg0OworICAgIGRldl90IGRldmljZSA9IDA7CisgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aU8mJE8mOm1rbm9kIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLCBfUHlfRGV2X0NvbnZlcnRlciwgJmRldmljZSwgTUtOT0RBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX21rbm9kX2ltcGwobW9kdWxlLCAmcGF0aCwgbW9kZSwgZGV2aWNlLCBkaXJfZmQpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIChkZWZpbmVkKEhBVkVfTUtOT0QpICYmIGRlZmluZWQoSEFWRV9NQUtFREVWKSkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9ERVZJQ0VfTUFDUk9TKQorCitQeURvY19TVFJWQVIob3NfbWFqb3JfX2RvY19fLAorIm1ham9yKCRtb2R1bGUsIGRldmljZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkV4dHJhY3RzIGEgZGV2aWNlIG1ham9yIG51bWJlciBmcm9tIGEgcmF3IGRldmljZSBudW1iZXIuIik7CisKKyNkZWZpbmUgT1NfTUFKT1JfTUVUSE9EREVGICAgIFwKKyAgICB7Im1ham9yIiwgKFB5Q0Z1bmN0aW9uKW9zX21ham9yLCBNRVRIX08sIG9zX21ham9yX19kb2NfX30sCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK29zX21ham9yX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgZGV2X3QgZGV2aWNlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX21ham9yKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgZGV2X3QgZGV2aWNlOworICAgIHVuc2lnbmVkIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjptYWpvciIsIF9QeV9EZXZfQ29udmVydGVyLCAmZGV2aWNlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19tYWpvcl9pbXBsKG1vZHVsZSwgZGV2aWNlKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gKHVuc2lnbmVkIGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfREVWSUNFX01BQ1JPUykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9ERVZJQ0VfTUFDUk9TKQorCitQeURvY19TVFJWQVIob3NfbWlub3JfX2RvY19fLAorIm1pbm9yKCRtb2R1bGUsIGRldmljZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkV4dHJhY3RzIGEgZGV2aWNlIG1pbm9yIG51bWJlciBmcm9tIGEgcmF3IGRldmljZSBudW1iZXIuIik7CisKKyNkZWZpbmUgT1NfTUlOT1JfTUVUSE9EREVGICAgIFwKKyAgICB7Im1pbm9yIiwgKFB5Q0Z1bmN0aW9uKW9zX21pbm9yLCBNRVRIX08sIG9zX21pbm9yX19kb2NfX30sCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK29zX21pbm9yX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgZGV2X3QgZGV2aWNlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX21pbm9yKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgZGV2X3QgZGV2aWNlOworICAgIHVuc2lnbmVkIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjptaW5vciIsIF9QeV9EZXZfQ29udmVydGVyLCAmZGV2aWNlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19taW5vcl9pbXBsKG1vZHVsZSwgZGV2aWNlKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gKHVuc2lnbmVkIGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfREVWSUNFX01BQ1JPUykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9ERVZJQ0VfTUFDUk9TKQorCitQeURvY19TVFJWQVIob3NfbWFrZWRldl9fZG9jX18sCisibWFrZWRldigkbW9kdWxlLCBtYWpvciwgbWlub3IsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb21wb3NlcyBhIHJhdyBkZXZpY2UgbnVtYmVyIGZyb20gdGhlIG1ham9yIGFuZCBtaW5vciBkZXZpY2UgbnVtYmVycy4iKTsKKworI2RlZmluZSBPU19NQUtFREVWX01FVEhPRERFRiAgICBcCisgICAgeyJtYWtlZGV2IiwgKFB5Q0Z1bmN0aW9uKW9zX21ha2VkZXYsIE1FVEhfVkFSQVJHUywgb3NfbWFrZWRldl9fZG9jX199LAorCitzdGF0aWMgZGV2X3QKK29zX21ha2VkZXZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgbWFqb3IsIGludCBtaW5vcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19tYWtlZGV2KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBtYWpvcjsKKyAgICBpbnQgbWlub3I7CisgICAgZGV2X3QgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6bWFrZWRldiIsCisgICAgICAgICZtYWpvciwgJm1pbm9yKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19tYWtlZGV2X2ltcGwobW9kdWxlLCBtYWpvciwgbWlub3IpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAoZGV2X3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfUHlMb25nX0Zyb21EZXYoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9ERVZJQ0VfTUFDUk9TKSAqLworCisjaWYgKGRlZmluZWQgSEFWRV9GVFJVTkNBVEUgfHwgZGVmaW5lZCBNU19XSU5ET1dTKQorCitQeURvY19TVFJWQVIob3NfZnRydW5jYXRlX19kb2NfXywKKyJmdHJ1bmNhdGUoJG1vZHVsZSwgZmQsIGxlbmd0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlRydW5jYXRlIGEgZmlsZSwgc3BlY2lmaWVkIGJ5IGZpbGUgZGVzY3JpcHRvciwgdG8gYSBzcGVjaWZpYyBsZW5ndGguIik7CisKKyNkZWZpbmUgT1NfRlRSVU5DQVRFX01FVEhPRERFRiAgICBcCisgICAgeyJmdHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pb3NfZnRydW5jYXRlLCBNRVRIX1ZBUkFSR1MsIG9zX2Z0cnVuY2F0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnRydW5jYXRlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBQeV9vZmZfdCBsZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnRydW5jYXRlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBQeV9vZmZfdCBsZW5ndGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPJjpmdHJ1bmNhdGUiLAorICAgICAgICAmZmQsIFB5X29mZl90X2NvbnZlcnRlciwgJmxlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19mdHJ1bmNhdGVfaW1wbChtb2R1bGUsIGZkLCBsZW5ndGgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiAoZGVmaW5lZCBIQVZFX0ZUUlVOQ0FURSB8fCBkZWZpbmVkIE1TX1dJTkRPV1MpICovCisKKyNpZiAoZGVmaW5lZCBIQVZFX1RSVU5DQVRFIHx8IGRlZmluZWQgTVNfV0lORE9XUykKKworUHlEb2NfU1RSVkFSKG9zX3RydW5jYXRlX19kb2NfXywKKyJ0cnVuY2F0ZSgkbW9kdWxlLCAvLCBwYXRoLCBsZW5ndGgpXG4iCisiLS1cbiIKKyJcbiIKKyJUcnVuY2F0ZSBhIGZpbGUsIHNwZWNpZmllZCBieSBwYXRoLCB0byBhIHNwZWNpZmljIGxlbmd0aC5cbiIKKyJcbiIKKyJPbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uIik7CisKKyNkZWZpbmUgT1NfVFJVTkNBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7InRydW5jYXRlIiwgKFB5Q0Z1bmN0aW9uKW9zX3RydW5jYXRlLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfdHJ1bmNhdGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3RydW5jYXRlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBQeV9vZmZfdCBsZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdHJ1bmNhdGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgImxlbmd0aCIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoInRydW5jYXRlIiwgInBhdGgiLCAwLCBQQVRIX0hBVkVfRlRSVU5DQVRFKTsKKyAgICBQeV9vZmZfdCBsZW5ndGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mOnRydW5jYXRlIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsIFB5X29mZl90X2NvbnZlcnRlciwgJmxlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc190cnVuY2F0ZV9pbXBsKG1vZHVsZSwgJnBhdGgsIGxlbmd0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogKGRlZmluZWQgSEFWRV9UUlVOQ0FURSB8fCBkZWZpbmVkIE1TX1dJTkRPV1MpICovCisKKyNpZiAoZGVmaW5lZChIQVZFX1BPU0lYX0ZBTExPQ0FURSkgJiYgIWRlZmluZWQoUE9TSVhfRkFEVklTRV9BSVhfQlVHKSkKKworUHlEb2NfU1RSVkFSKG9zX3Bvc2l4X2ZhbGxvY2F0ZV9fZG9jX18sCisicG9zaXhfZmFsbG9jYXRlKCRtb2R1bGUsIGZkLCBvZmZzZXQsIGxlbmd0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkVuc3VyZSBhIGZpbGUgaGFzIGFsbG9jYXRlZCBhdCBsZWFzdCBhIHBhcnRpY3VsYXIgbnVtYmVyIG9mIGJ5dGVzIG9uIGRpc2suXG4iCisiXG4iCisiRW5zdXJlIHRoYXQgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGZkIGVuY29tcGFzc2VzIGEgcmFuZ2Ugb2YgYnl0ZXNcbiIKKyJzdGFydGluZyBhdCBvZmZzZXQgYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCBjb250aW51aW5nIGZvciBsZW5ndGggYnl0ZXMuIik7CisKKyNkZWZpbmUgT1NfUE9TSVhfRkFMTE9DQVRFX01FVEhPRERFRiAgICBcCisgICAgeyJwb3NpeF9mYWxsb2NhdGUiLCAoUHlDRnVuY3Rpb24pb3NfcG9zaXhfZmFsbG9jYXRlLCBNRVRIX1ZBUkFSR1MsIG9zX3Bvc2l4X2ZhbGxvY2F0ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcG9zaXhfZmFsbG9jYXRlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBQeV9vZmZfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9vZmZfdCBsZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcG9zaXhfZmFsbG9jYXRlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBQeV9vZmZfdCBvZmZzZXQ7CisgICAgUHlfb2ZmX3QgbGVuZ3RoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyZPJjpwb3NpeF9mYWxsb2NhdGUiLAorICAgICAgICAmZmQsIFB5X29mZl90X2NvbnZlcnRlciwgJm9mZnNldCwgUHlfb2ZmX3RfY29udmVydGVyLCAmbGVuZ3RoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3Bvc2l4X2ZhbGxvY2F0ZV9pbXBsKG1vZHVsZSwgZmQsIG9mZnNldCwgbGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogKGRlZmluZWQoSEFWRV9QT1NJWF9GQUxMT0NBVEUpICYmICFkZWZpbmVkKFBPU0lYX0ZBRFZJU0VfQUlYX0JVRykpICovCisKKyNpZiAoZGVmaW5lZChIQVZFX1BPU0lYX0ZBRFZJU0UpICYmICFkZWZpbmVkKFBPU0lYX0ZBRFZJU0VfQUlYX0JVRykpCisKK1B5RG9jX1NUUlZBUihvc19wb3NpeF9mYWR2aXNlX19kb2NfXywKKyJwb3NpeF9mYWR2aXNlKCRtb2R1bGUsIGZkLCBvZmZzZXQsIGxlbmd0aCwgYWR2aWNlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQW5ub3VuY2UgYW4gaW50ZW50aW9uIHRvIGFjY2VzcyBkYXRhIGluIGEgc3BlY2lmaWMgcGF0dGVybi5cbiIKKyJcbiIKKyJBbm5vdW5jZSBhbiBpbnRlbnRpb24gdG8gYWNjZXNzIGRhdGEgaW4gYSBzcGVjaWZpYyBwYXR0ZXJuLCB0aHVzIGFsbG93aW5nXG4iCisidGhlIGtlcm5lbCB0byBtYWtlIG9wdGltaXphdGlvbnMuXG4iCisiVGhlIGFkdmljZSBhcHBsaWVzIHRvIHRoZSByZWdpb24gb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGZkIHN0YXJ0aW5nIGF0XG4iCisib2Zmc2V0IGFuZCBjb250aW51aW5nIGZvciBsZW5ndGggYnl0ZXMuXG4iCisiYWR2aWNlIGlzIG9uZSBvZiBQT1NJWF9GQURWX05PUk1BTCwgUE9TSVhfRkFEVl9TRVFVRU5USUFMLFxuIgorIlBPU0lYX0ZBRFZfUkFORE9NLCBQT1NJWF9GQURWX05PUkVVU0UsIFBPU0lYX0ZBRFZfV0lMTE5FRUQsIG9yXG4iCisiUE9TSVhfRkFEVl9ET05UTkVFRC4iKTsKKworI2RlZmluZSBPU19QT1NJWF9GQURWSVNFX01FVEhPRERFRiAgICBcCisgICAgeyJwb3NpeF9mYWR2aXNlIiwgKFB5Q0Z1bmN0aW9uKW9zX3Bvc2l4X2ZhZHZpc2UsIE1FVEhfVkFSQVJHUywgb3NfcG9zaXhfZmFkdmlzZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcG9zaXhfZmFkdmlzZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgUHlfb2ZmX3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgIFB5X29mZl90IGxlbmd0aCwgaW50IGFkdmljZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19wb3NpeF9mYWR2aXNlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBQeV9vZmZfdCBvZmZzZXQ7CisgICAgUHlfb2ZmX3QgbGVuZ3RoOworICAgIGludCBhZHZpY2U7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPJk8maTpwb3NpeF9mYWR2aXNlIiwKKyAgICAgICAgJmZkLCBQeV9vZmZfdF9jb252ZXJ0ZXIsICZvZmZzZXQsIFB5X29mZl90X2NvbnZlcnRlciwgJmxlbmd0aCwgJmFkdmljZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19wb3NpeF9mYWR2aXNlX2ltcGwobW9kdWxlLCBmZCwgb2Zmc2V0LCBsZW5ndGgsIGFkdmljZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIChkZWZpbmVkKEhBVkVfUE9TSVhfRkFEVklTRSkgJiYgIWRlZmluZWQoUE9TSVhfRkFEVklTRV9BSVhfQlVHKSkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9QVVRFTlYpICYmIGRlZmluZWQoTVNfV0lORE9XUykKKworUHlEb2NfU1RSVkFSKG9zX3B1dGVudl9fZG9jX18sCisicHV0ZW52KCRtb2R1bGUsIG5hbWUsIHZhbHVlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlIG9yIGFkZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4iKTsKKworI2RlZmluZSBPU19QVVRFTlZfTUVUSE9EREVGICAgIFwKKyAgICB7InB1dGVudiIsIChQeUNGdW5jdGlvbilvc19wdXRlbnYsIE1FVEhfVkFSQVJHUywgb3NfcHV0ZW52X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19wdXRlbnZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3B1dGVudihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZTsKKyAgICBQeU9iamVjdCAqdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVVOnB1dGVudiIsCisgICAgICAgICZuYW1lLCAmdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfcHV0ZW52X2ltcGwobW9kdWxlLCBuYW1lLCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9QVVRFTlYpICYmIGRlZmluZWQoTVNfV0lORE9XUykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9QVVRFTlYpICYmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisKK1B5RG9jX1NUUlZBUihvc19wdXRlbnZfX2RvY19fLAorInB1dGVudigkbW9kdWxlLCBuYW1lLCB2YWx1ZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNoYW5nZSBvciBhZGQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIik7CisKKyNkZWZpbmUgT1NfUFVURU5WX01FVEhPRERFRiAgICBcCisgICAgeyJwdXRlbnYiLCAoUHlDRnVuY3Rpb24pb3NfcHV0ZW52LCBNRVRIX1ZBUkFSR1MsIG9zX3B1dGVudl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcHV0ZW52X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICp2YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19wdXRlbnYoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp2YWx1ZSA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTyY6cHV0ZW52IiwKKyAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmbmFtZSwgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfcHV0ZW52X2ltcGwobW9kdWxlLCBuYW1lLCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgbmFtZSAqLworICAgIFB5X1hERUNSRUYobmFtZSk7CisgICAgLyogQ2xlYW51cCBmb3IgdmFsdWUgKi8KKyAgICBQeV9YREVDUkVGKHZhbHVlKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfUFVURU5WKSAmJiAhZGVmaW5lZChNU19XSU5ET1dTKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1VOU0VURU5WKQorCitQeURvY19TVFJWQVIob3NfdW5zZXRlbnZfX2RvY19fLAorInVuc2V0ZW52KCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZWxldGUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIik7CisKKyNkZWZpbmUgT1NfVU5TRVRFTlZfTUVUSE9EREVGICAgIFwKKyAgICB7InVuc2V0ZW52IiwgKFB5Q0Z1bmN0aW9uKW9zX3Vuc2V0ZW52LCBNRVRIX08sIG9zX3Vuc2V0ZW52X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc191bnNldGVudl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3Vuc2V0ZW52KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjp1bnNldGVudiIsIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfdW5zZXRlbnZfaW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIG5hbWUgKi8KKyAgICBQeV9YREVDUkVGKG5hbWUpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9VTlNFVEVOVikgKi8KKworUHlEb2NfU1RSVkFSKG9zX3N0cmVycm9yX19kb2NfXywKKyJzdHJlcnJvcigkbW9kdWxlLCBjb2RlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVHJhbnNsYXRlIGFuIGVycm9yIGNvZGUgdG8gYSBtZXNzYWdlIHN0cmluZy4iKTsKKworI2RlZmluZSBPU19TVFJFUlJPUl9NRVRIT0RERUYgICAgXAorICAgIHsic3RyZXJyb3IiLCAoUHlDRnVuY3Rpb24pb3Nfc3RyZXJyb3IsIE1FVEhfTywgb3Nfc3RyZXJyb3JfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0cmVycm9yX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGNvZGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3RyZXJyb3IoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgY29kZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaTpzdHJlcnJvciIsICZjb2RlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3N0cmVycm9yX2ltcGwobW9kdWxlLCBjb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoV0NPUkVEVU1QKQorCitQeURvY19TVFJWQVIob3NfV0NPUkVEVU1QX19kb2NfXywKKyJXQ09SRURVTVAoJG1vZHVsZSwgc3RhdHVzLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgdGhlIHByb2Nlc3MgcmV0dXJuaW5nIHN0YXR1cyB3YXMgZHVtcGVkIHRvIGEgY29yZSBmaWxlLiIpOworCisjZGVmaW5lIE9TX1dDT1JFRFVNUF9NRVRIT0RERUYgICAgXAorICAgIHsiV0NPUkVEVU1QIiwgKFB5Q0Z1bmN0aW9uKW9zX1dDT1JFRFVNUCwgTUVUSF9PLCBvc19XQ09SRURVTVBfX2RvY19ffSwKKworc3RhdGljIGludAorb3NfV0NPUkVEVU1QX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHN0YXR1cyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19XQ09SRURVTVAoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgc3RhdHVzOworICAgIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOldDT1JFRFVNUCIsICZzdGF0dXMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX1dDT1JFRFVNUF9pbXBsKG1vZHVsZSwgc3RhdHVzKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TWVNfV0FJVF9IKSAmJiBkZWZpbmVkKFdDT1JFRFVNUCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TWVNfV0FJVF9IKSAmJiBkZWZpbmVkKFdJRkNPTlRJTlVFRCkKKworUHlEb2NfU1RSVkFSKG9zX1dJRkNPTlRJTlVFRF9fZG9jX18sCisiV0lGQ09OVElOVUVEKCRtb2R1bGUsIC8sIHN0YXR1cylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBUcnVlIGlmIGEgcGFydGljdWxhciBwcm9jZXNzIHdhcyBjb250aW51ZWQgZnJvbSBhIGpvYiBjb250cm9sIHN0b3AuXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgdGhlIHByb2Nlc3MgcmV0dXJuaW5nIHN0YXR1cyB3YXMgY29udGludWVkIGZyb20gYVxuIgorImpvYiBjb250cm9sIHN0b3AuIik7CisKKyNkZWZpbmUgT1NfV0lGQ09OVElOVUVEX01FVEhPRERFRiAgICBcCisgICAgeyJXSUZDT05USU5VRUQiLCAoUHlDRnVuY3Rpb24pb3NfV0lGQ09OVElOVUVELCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfV0lGQ09OVElOVUVEX19kb2NfX30sCisKK3N0YXRpYyBpbnQKK29zX1dJRkNPTlRJTlVFRF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfV0lGQ09OVElOVUVEKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RhdHVzIiwgTlVMTH07CisgICAgaW50IHN0YXR1czsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImk6V0lGQ09OVElOVUVEIiwgX2tleXdvcmRzLAorICAgICAgICAmc3RhdHVzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19XSUZDT05USU5VRURfaW1wbChtb2R1bGUsIHN0YXR1cyk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lTX1dBSVRfSCkgJiYgZGVmaW5lZChXSUZDT05USU5VRUQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX1dBSVRfSCkgJiYgZGVmaW5lZChXSUZTVE9QUEVEKQorCitQeURvY19TVFJWQVIob3NfV0lGU1RPUFBFRF9fZG9jX18sCisiV0lGU1RPUFBFRCgkbW9kdWxlLCAvLCBzdGF0dXMpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvY2VzcyByZXR1cm5pbmcgc3RhdHVzIHdhcyBzdG9wcGVkLiIpOworCisjZGVmaW5lIE9TX1dJRlNUT1BQRURfTUVUSE9EREVGICAgIFwKKyAgICB7IldJRlNUT1BQRUQiLCAoUHlDRnVuY3Rpb24pb3NfV0lGU1RPUFBFRCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX1dJRlNUT1BQRURfX2RvY19ffSwKKworc3RhdGljIGludAorb3NfV0lGU1RPUFBFRF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfV0lGU1RPUFBFRChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InN0YXR1cyIsIE5VTEx9OworICAgIGludCBzdGF0dXM7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpOldJRlNUT1BQRUQiLCBfa2V5d29yZHMsCisgICAgICAgICZzdGF0dXMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX1dJRlNUT1BQRURfaW1wbChtb2R1bGUsIHN0YXR1cyk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lTX1dBSVRfSCkgJiYgZGVmaW5lZChXSUZTVE9QUEVEKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoV0lGU0lHTkFMRUQpCisKK1B5RG9jX1NUUlZBUihvc19XSUZTSUdOQUxFRF9fZG9jX18sCisiV0lGU0lHTkFMRUQoJG1vZHVsZSwgLywgc3RhdHVzKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgdGhlIHByb2Nlc3MgcmV0dXJuaW5nIHN0YXR1cyB3YXMgdGVybWluYXRlZCBieSBhIHNpZ25hbC4iKTsKKworI2RlZmluZSBPU19XSUZTSUdOQUxFRF9NRVRIT0RERUYgICAgXAorICAgIHsiV0lGU0lHTkFMRUQiLCAoUHlDRnVuY3Rpb24pb3NfV0lGU0lHTkFMRUQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19XSUZTSUdOQUxFRF9fZG9jX199LAorCitzdGF0aWMgaW50Citvc19XSUZTSUdOQUxFRF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfV0lGU0lHTkFMRUQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdGF0dXMiLCBOVUxMfTsKKyAgICBpbnQgc3RhdHVzOworICAgIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaTpXSUZTSUdOQUxFRCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0YXR1cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfV0lGU0lHTkFMRURfaW1wbChtb2R1bGUsIHN0YXR1cyk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lTX1dBSVRfSCkgJiYgZGVmaW5lZChXSUZTSUdOQUxFRCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TWVNfV0FJVF9IKSAmJiBkZWZpbmVkKFdJRkVYSVRFRCkKKworUHlEb2NfU1RSVkFSKG9zX1dJRkVYSVRFRF9fZG9jX18sCisiV0lGRVhJVEVEKCRtb2R1bGUsIC8sIHN0YXR1cylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBUcnVlIGlmIHRoZSBwcm9jZXNzIHJldHVybmluZyBzdGF0dXMgZXhpdGVkIHZpYSB0aGUgZXhpdCgpIHN5c3RlbSBjYWxsLiIpOworCisjZGVmaW5lIE9TX1dJRkVYSVRFRF9NRVRIT0RERUYgICAgXAorICAgIHsiV0lGRVhJVEVEIiwgKFB5Q0Z1bmN0aW9uKW9zX1dJRkVYSVRFRCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX1dJRkVYSVRFRF9fZG9jX199LAorCitzdGF0aWMgaW50Citvc19XSUZFWElURURfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgc3RhdHVzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX1dJRkVYSVRFRChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InN0YXR1cyIsIE5VTEx9OworICAgIGludCBzdGF0dXM7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpOldJRkVYSVRFRCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0YXR1cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfV0lGRVhJVEVEX2ltcGwobW9kdWxlLCBzdGF0dXMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoV0lGRVhJVEVEKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoV0VYSVRTVEFUVVMpCisKK1B5RG9jX1NUUlZBUihvc19XRVhJVFNUQVRVU19fZG9jX18sCisiV0VYSVRTVEFUVVMoJG1vZHVsZSwgLywgc3RhdHVzKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBwcm9jZXNzIHJldHVybiBjb2RlIGZyb20gc3RhdHVzLiIpOworCisjZGVmaW5lIE9TX1dFWElUU1RBVFVTX01FVEhPRERFRiAgICBcCisgICAgeyJXRVhJVFNUQVRVUyIsIChQeUNGdW5jdGlvbilvc19XRVhJVFNUQVRVUywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX1dFWElUU1RBVFVTX19kb2NfX30sCisKK3N0YXRpYyBpbnQKK29zX1dFWElUU1RBVFVTX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHN0YXR1cyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19XRVhJVFNUQVRVUyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InN0YXR1cyIsIE5VTEx9OworICAgIGludCBzdGF0dXM7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpOldFWElUU1RBVFVTIiwgX2tleXdvcmRzLAorICAgICAgICAmc3RhdHVzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19XRVhJVFNUQVRVU19pbXBsKG1vZHVsZSwgc3RhdHVzKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TWVNfV0FJVF9IKSAmJiBkZWZpbmVkKFdFWElUU1RBVFVTKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoV1RFUk1TSUcpCisKK1B5RG9jX1NUUlZBUihvc19XVEVSTVNJR19fZG9jX18sCisiV1RFUk1TSUcoJG1vZHVsZSwgLywgc3RhdHVzKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBzaWduYWwgdGhhdCB0ZXJtaW5hdGVkIHRoZSBwcm9jZXNzIHRoYXQgcHJvdmlkZWQgdGhlIHN0YXR1cyB2YWx1ZS4iKTsKKworI2RlZmluZSBPU19XVEVSTVNJR19NRVRIT0RERUYgICAgXAorICAgIHsiV1RFUk1TSUciLCAoUHlDRnVuY3Rpb24pb3NfV1RFUk1TSUcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19XVEVSTVNJR19fZG9jX199LAorCitzdGF0aWMgaW50Citvc19XVEVSTVNJR19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfV1RFUk1TSUcoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdGF0dXMiLCBOVUxMfTsKKyAgICBpbnQgc3RhdHVzOworICAgIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaTpXVEVSTVNJRyIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0YXR1cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfV1RFUk1TSUdfaW1wbChtb2R1bGUsIHN0YXR1cyk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lTX1dBSVRfSCkgJiYgZGVmaW5lZChXVEVSTVNJRykgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TWVNfV0FJVF9IKSAmJiBkZWZpbmVkKFdTVE9QU0lHKQorCitQeURvY19TVFJWQVIob3NfV1NUT1BTSUdfX2RvY19fLAorIldTVE9QU0lHKCRtb2R1bGUsIC8sIHN0YXR1cylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgc2lnbmFsIHRoYXQgc3RvcHBlZCB0aGUgcHJvY2VzcyB0aGF0IHByb3ZpZGVkIHRoZSBzdGF0dXMgdmFsdWUuIik7CisKKyNkZWZpbmUgT1NfV1NUT1BTSUdfTUVUSE9EREVGICAgIFwKKyAgICB7IldTVE9QU0lHIiwgKFB5Q0Z1bmN0aW9uKW9zX1dTVE9QU0lHLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfV1NUT1BTSUdfX2RvY19ffSwKKworc3RhdGljIGludAorb3NfV1NUT1BTSUdfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgc3RhdHVzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX1dTVE9QU0lHKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RhdHVzIiwgTlVMTH07CisgICAgaW50IHN0YXR1czsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgImk6V1NUT1BTSUciLCBfa2V5d29yZHMsCisgICAgICAgICZzdGF0dXMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX1dTVE9QU0lHX2ltcGwobW9kdWxlLCBzdGF0dXMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoV1NUT1BTSUcpICovCisKKyNpZiAoZGVmaW5lZChIQVZFX0ZTVEFUVkZTKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1NUQVRWRlNfSCkpCisKK1B5RG9jX1NUUlZBUihvc19mc3RhdHZmc19fZG9jX18sCisiZnN0YXR2ZnMoJG1vZHVsZSwgZmQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQZXJmb3JtIGFuIGZzdGF0dmZzIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBmZC5cbiIKKyJcbiIKKyJFcXVpdmFsZW50IHRvIHN0YXR2ZnMoZmQpLiIpOworCisjZGVmaW5lIE9TX0ZTVEFUVkZTX01FVEhPRERFRiAgICBcCisgICAgeyJmc3RhdHZmcyIsIChQeUNGdW5jdGlvbilvc19mc3RhdHZmcywgTUVUSF9PLCBvc19mc3RhdHZmc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnN0YXR2ZnNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnN0YXR2ZnMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImk6ZnN0YXR2ZnMiLCAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfZnN0YXR2ZnNfaW1wbChtb2R1bGUsIGZkKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogKGRlZmluZWQoSEFWRV9GU1RBVFZGUykgJiYgZGVmaW5lZChIQVZFX1NZU19TVEFUVkZTX0gpKSAqLworCisjaWYgKGRlZmluZWQoSEFWRV9TVEFUVkZTKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1NUQVRWRlNfSCkpCisKK1B5RG9jX1NUUlZBUihvc19zdGF0dmZzX19kb2NfXywKKyJzdGF0dmZzKCRtb2R1bGUsIC8sIHBhdGgpXG4iCisiLS1cbiIKKyJcbiIKKyJQZXJmb3JtIGEgc3RhdHZmcyBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC5cbiIKKyJcbiIKKyJwYXRoIG1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLlxuIgorIk9uIHNvbWUgcGxhdGZvcm1zLCBwYXRoIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cbiIKKyIgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4iKTsKKworI2RlZmluZSBPU19TVEFUVkZTX01FVEhPRERFRiAgICBcCisgICAgeyJzdGF0dmZzIiwgKFB5Q0Z1bmN0aW9uKW9zX3N0YXR2ZnMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19zdGF0dmZzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zdGF0dmZzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXR2ZnMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgic3RhdHZmcyIsICJwYXRoIiwgMCwgUEFUSF9IQVZFX0ZTVEFUVkZTKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mOnN0YXR2ZnMiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zdGF0dmZzX2ltcGwobW9kdWxlLCAmcGF0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogKGRlZmluZWQoSEFWRV9TVEFUVkZTKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1NUQVRWRlNfSCkpICovCisKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK1B5RG9jX1NUUlZBUihvc19fZ2V0ZGlza3VzYWdlX19kb2NfXywKKyJfZ2V0ZGlza3VzYWdlKCRtb2R1bGUsIC8sIHBhdGgpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gZGlzayB1c2FnZSBzdGF0aXN0aWNzIGFib3V0IHRoZSBnaXZlbiBwYXRoIGFzIGEgKHRvdGFsLCBmcmVlKSB0dXBsZS4iKTsKKworI2RlZmluZSBPU19fR0VURElTS1VTQUdFX01FVEhPRERFRiAgICBcCisgICAgeyJfZ2V0ZGlza3VzYWdlIiwgKFB5Q0Z1bmN0aW9uKW9zX19nZXRkaXNrdXNhZ2UsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19fZ2V0ZGlza3VzYWdlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19fZ2V0ZGlza3VzYWdlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfVU5JQ09ERSAqcGF0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19fZ2V0ZGlza3VzYWdlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OworICAgIFB5X1VOSUNPREUgKnBhdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ1Ol9nZXRkaXNrdXNhZ2UiLCBfa2V5d29yZHMsCisgICAgICAgICZwYXRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX19nZXRkaXNrdXNhZ2VfaW1wbChtb2R1bGUsIHBhdGgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfRlBBVEhDT05GKQorCitQeURvY19TVFJWQVIob3NfZnBhdGhjb25mX19kb2NfXywKKyJmcGF0aGNvbmYoJG1vZHVsZSwgZmQsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gbGltaXQgbmFtZSBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciBmZC5cbiIKKyJcbiIKKyJJZiB0aGVyZSBpcyBubyBsaW1pdCwgcmV0dXJuIC0xLiIpOworCisjZGVmaW5lIE9TX0ZQQVRIQ09ORl9NRVRIT0RERUYgICAgXAorICAgIHsiZnBhdGhjb25mIiwgKFB5Q0Z1bmN0aW9uKW9zX2ZwYXRoY29uZiwgTUVUSF9WQVJBUkdTLCBvc19mcGF0aGNvbmZfX2RvY19ffSwKKworc3RhdGljIGxvbmcKK29zX2ZwYXRoY29uZl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgaW50IG5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZnBhdGhjb25mKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBpbnQgbmFtZTsKKyAgICBsb25nIF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPJjpmcGF0aGNvbmYiLAorICAgICAgICAmZmQsIGNvbnZfcGF0aF9jb25mbmFtZSwgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX2ZwYXRoY29uZl9pbXBsKG1vZHVsZSwgZmQsIG5hbWUpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZyhfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0ZQQVRIQ09ORikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9QQVRIQ09ORikKKworUHlEb2NfU1RSVkFSKG9zX3BhdGhjb25mX19kb2NfXywKKyJwYXRoY29uZigkbW9kdWxlLCAvLCBwYXRoLCBuYW1lKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGxpbWl0IG5hbWUgZm9yIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBwYXRoLlxuIgorIlxuIgorIklmIHRoZXJlIGlzIG5vIGxpbWl0LCByZXR1cm4gLTEuXG4iCisiT24gc29tZSBwbGF0Zm9ybXMsIHBhdGggbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuIgorIiAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgYW4gZXhjZXB0aW9uLiIpOworCisjZGVmaW5lIE9TX1BBVEhDT05GX01FVEhPRERFRiAgICBcCisgICAgeyJwYXRoY29uZiIsIChQeUNGdW5jdGlvbilvc19wYXRoY29uZiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3BhdGhjb25mX19kb2NfX30sCisKK3N0YXRpYyBsb25nCitvc19wYXRoY29uZl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcGF0aGNvbmYoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgIm5hbWUiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJwYXRoY29uZiIsICJwYXRoIiwgMCwgUEFUSF9IQVZFX0ZQQVRIQ09ORik7CisgICAgaW50IG5hbWU7CisgICAgbG9uZyBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJjpwYXRoY29uZiIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCBjb252X3BhdGhfY29uZm5hbWUsICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19wYXRoY29uZl9pbXBsKG1vZHVsZSwgJnBhdGgsIG5hbWUpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZyhfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfUEFUSENPTkYpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfQ09ORlNUUikKKworUHlEb2NfU1RSVkFSKG9zX2NvbmZzdHJfX2RvY19fLAorImNvbmZzdHIoJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIHN0cmluZy12YWx1ZWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIik7CisKKyNkZWZpbmUgT1NfQ09ORlNUUl9NRVRIT0RERUYgICAgXAorICAgIHsiY29uZnN0ciIsIChQeUNGdW5jdGlvbilvc19jb25mc3RyLCBNRVRIX08sIG9zX2NvbmZzdHJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2NvbmZzdHJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jb25mc3RyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IG5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOmNvbmZzdHIiLCBjb252X2NvbmZzdHJfY29uZm5hbWUsICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2NvbmZzdHJfaW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfQ09ORlNUUikgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TWVNDT05GKQorCitQeURvY19TVFJWQVIob3Nfc3lzY29uZl9fZG9jX18sCisic3lzY29uZigkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGFuIGludGVnZXItdmFsdWVkIHN5c3RlbSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiIpOworCisjZGVmaW5lIE9TX1NZU0NPTkZfTUVUSE9EREVGICAgIFwKKyAgICB7InN5c2NvbmYiLCAoUHlDRnVuY3Rpb24pb3Nfc3lzY29uZiwgTUVUSF9PLCBvc19zeXNjb25mX19kb2NfX30sCisKK3N0YXRpYyBsb25nCitvc19zeXNjb25mX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3lzY29uZihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBuYW1lOworICAgIGxvbmcgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyY6c3lzY29uZiIsIGNvbnZfc3lzY29uZl9jb25mbmFtZSwgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3N5c2NvbmZfaW1wbChtb2R1bGUsIG5hbWUpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZyhfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NZU0NPTkYpICovCisKK1B5RG9jX1NUUlZBUihvc19hYm9ydF9fZG9jX18sCisiYWJvcnQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkFib3J0IHRoZSBpbnRlcnByZXRlciBpbW1lZGlhdGVseS5cbiIKKyJcbiIKKyJUaGlzIGZ1bmN0aW9uIFwnZHVtcHMgY29yZVwnIG9yIG90aGVyd2lzZSBmYWlscyBpbiB0aGUgaGFyZGVzdCB3YXkgcG9zc2libGVcbiIKKyJvbiB0aGUgaG9zdGluZyBvcGVyYXRpbmcgc3lzdGVtLiAgVGhpcyBmdW5jdGlvbiBuZXZlciByZXR1cm5zLiIpOworCisjZGVmaW5lIE9TX0FCT1JUX01FVEhPRERFRiAgICBcCisgICAgeyJhYm9ydCIsIChQeUNGdW5jdGlvbilvc19hYm9ydCwgTUVUSF9OT0FSR1MsIG9zX2Fib3J0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19hYm9ydF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfYWJvcnQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gb3NfYWJvcnRfaW1wbChtb2R1bGUpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0dFVExPQURBVkcpCisKK1B5RG9jX1NUUlZBUihvc19nZXRsb2FkYXZnX19kb2NfXywKKyJnZXRsb2FkYXZnKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYXZlcmFnZSByZWNlbnQgc3lzdGVtIGxvYWQgaW5mb3JtYXRpb24uXG4iCisiXG4iCisiUmV0dXJuIHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIGluIHRoZSBzeXN0ZW0gcnVuIHF1ZXVlIGF2ZXJhZ2VkIG92ZXJcbiIKKyJ0aGUgbGFzdCAxLCA1LCBhbmQgMTUgbWludXRlcyBhcyBhIHR1cGxlIG9mIHRocmVlIGZsb2F0cy5cbiIKKyJSYWlzZXMgT1NFcnJvciBpZiB0aGUgbG9hZCBhdmVyYWdlIHdhcyB1bm9idGFpbmFibGUuIik7CisKKyNkZWZpbmUgT1NfR0VUTE9BREFWR19NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0bG9hZGF2ZyIsIChQeUNGdW5jdGlvbilvc19nZXRsb2FkYXZnLCBNRVRIX05PQVJHUywgb3NfZ2V0bG9hZGF2Z19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0bG9hZGF2Z19pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0bG9hZGF2ZyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19nZXRsb2FkYXZnX2ltcGwobW9kdWxlKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9HRVRMT0FEQVZHKSAqLworCitQeURvY19TVFJWQVIob3NfZGV2aWNlX2VuY29kaW5nX19kb2NfXywKKyJkZXZpY2VfZW5jb2RpbmcoJG1vZHVsZSwgLywgZmQpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZW5jb2Rpbmcgb2YgYSB0ZXJtaW5hbFwncyBmaWxlIGRlc2NyaXB0b3IuXG4iCisiXG4iCisiVGhlIGZpbGUgZGVzY3JpcHRvciBtdXN0IGJlIGF0dGFjaGVkIHRvIGEgdGVybWluYWwuXG4iCisiSWYgdGhlIGRldmljZSBpcyBub3QgYSB0ZXJtaW5hbCwgcmV0dXJuIE5vbmUuIik7CisKKyNkZWZpbmUgT1NfREVWSUNFX0VOQ09ESU5HX01FVEhPRERFRiAgICBcCisgICAgeyJkZXZpY2VfZW5jb2RpbmciLCAoUHlDRnVuY3Rpb24pb3NfZGV2aWNlX2VuY29kaW5nLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfZGV2aWNlX2VuY29kaW5nX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19kZXZpY2VfZW5jb2RpbmdfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZGV2aWNlX2VuY29kaW5nKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmQiLCBOVUxMfTsKKyAgICBpbnQgZmQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpOmRldmljZV9lbmNvZGluZyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2RldmljZV9lbmNvZGluZ19pbXBsKG1vZHVsZSwgZmQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfU0VUUkVTVUlEKQorCitQeURvY19TVFJWQVIob3Nfc2V0cmVzdWlkX19kb2NfXywKKyJzZXRyZXN1aWQoJG1vZHVsZSwgcnVpZCwgZXVpZCwgc3VpZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgY3VycmVudCBwcm9jZXNzXCdzIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIHVzZXIgaWRzLiIpOworCisjZGVmaW5lIE9TX1NFVFJFU1VJRF9NRVRIT0RERUYgICAgXAorICAgIHsic2V0cmVzdWlkIiwgKFB5Q0Z1bmN0aW9uKW9zX3NldHJlc3VpZCwgTUVUSF9WQVJBUkdTLCBvc19zZXRyZXN1aWRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NldHJlc3VpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHVpZF90IHJ1aWQsIHVpZF90IGV1aWQsIHVpZF90IHN1aWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0cmVzdWlkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHVpZF90IHJ1aWQ7CisgICAgdWlkX3QgZXVpZDsKKyAgICB1aWRfdCBzdWlkOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJk8mTyY6c2V0cmVzdWlkIiwKKyAgICAgICAgX1B5X1VpZF9Db252ZXJ0ZXIsICZydWlkLCBfUHlfVWlkX0NvbnZlcnRlciwgJmV1aWQsIF9QeV9VaWRfQ29udmVydGVyLCAmc3VpZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zZXRyZXN1aWRfaW1wbChtb2R1bGUsIHJ1aWQsIGV1aWQsIHN1aWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUUkVTVUlEKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NFVFJFU0dJRCkKKworUHlEb2NfU1RSVkFSKG9zX3NldHJlc2dpZF9fZG9jX18sCisic2V0cmVzZ2lkKCRtb2R1bGUsIHJnaWQsIGVnaWQsIHNnaWQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTZXQgdGhlIGN1cnJlbnQgcHJvY2Vzc1wncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBncm91cCBpZHMuIik7CisKKyNkZWZpbmUgT1NfU0VUUkVTR0lEX01FVEhPRERFRiAgICBcCisgICAgeyJzZXRyZXNnaWQiLCAoUHlDRnVuY3Rpb24pb3Nfc2V0cmVzZ2lkLCBNRVRIX1ZBUkFSR1MsIG9zX3NldHJlc2dpZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc2V0cmVzZ2lkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgZ2lkX3QgcmdpZCwgZ2lkX3QgZWdpZCwgZ2lkX3Qgc2dpZCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRyZXNnaWQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgZ2lkX3QgcmdpZDsKKyAgICBnaWRfdCBlZ2lkOworICAgIGdpZF90IHNnaWQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTyZPJjpzZXRyZXNnaWQiLAorICAgICAgICBfUHlfR2lkX0NvbnZlcnRlciwgJnJnaWQsIF9QeV9HaWRfQ29udmVydGVyLCAmZWdpZCwgX1B5X0dpZF9Db252ZXJ0ZXIsICZzZ2lkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3NldHJlc2dpZF9pbXBsKG1vZHVsZSwgcmdpZCwgZWdpZCwgc2dpZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TRVRSRVNHSUQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUkVTVUlEKQorCitQeURvY19TVFJWQVIob3NfZ2V0cmVzdWlkX19kb2NfXywKKyJnZXRyZXN1aWQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIHR1cGxlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3NcJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgdXNlciBpZHMuIik7CisKKyNkZWZpbmUgT1NfR0VUUkVTVUlEX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRyZXN1aWQiLCAoUHlDRnVuY3Rpb24pb3NfZ2V0cmVzdWlkLCBNRVRIX05PQVJHUywgb3NfZ2V0cmVzdWlkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRyZXN1aWRfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldHJlc3VpZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19nZXRyZXN1aWRfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVFJFU1VJRCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9HRVRSRVNHSUQpCisKK1B5RG9jX1NUUlZBUihvc19nZXRyZXNnaWRfX2RvY19fLAorImdldHJlc2dpZCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgdHVwbGUgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzc1wncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBncm91cCBpZHMuIik7CisKKyNkZWZpbmUgT1NfR0VUUkVTR0lEX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRyZXNnaWQiLCAoUHlDRnVuY3Rpb24pb3NfZ2V0cmVzZ2lkLCBNRVRIX05PQVJHUywgb3NfZ2V0cmVzZ2lkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXRyZXNnaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldHJlc2dpZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19nZXRyZXNnaWRfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVFJFU0dJRCkgKi8KKworI2lmIGRlZmluZWQoVVNFX1hBVFRSUykKKworUHlEb2NfU1RSVkFSKG9zX2dldHhhdHRyX19kb2NfXywKKyJnZXR4YXR0cigkbW9kdWxlLCAvLCBwYXRoLCBhdHRyaWJ1dGUsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSB2YWx1ZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGUgYXR0cmlidXRlIG9uIHBhdGguXG4iCisiXG4iCisicGF0aCBtYXkgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuIgorIklmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuIgorIiAgbGluaywgZ2V0eGF0dHIgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICB0aGUgbGluayBwb2ludHMgdG8uIik7CisKKyNkZWZpbmUgT1NfR0VUWEFUVFJfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldHhhdHRyIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldHhhdHRyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfZ2V0eGF0dHJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldHhhdHRyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBwYXRoX3QgKmF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgaW50IGZvbGxvd19zeW1saW5rcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19nZXR4YXR0cihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiYXR0cmlidXRlIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImdldHhhdHRyIiwgInBhdGgiLCAwLCAxKTsKKyAgICBwYXRoX3QgYXR0cmlidXRlID0gUEFUSF9UX0lOSVRJQUxJWkUoImdldHhhdHRyIiwgImF0dHJpYnV0ZSIsIDAsIDApOworICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkcDpnZXR4YXR0ciIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCBwYXRoX2NvbnZlcnRlciwgJmF0dHJpYnV0ZSwgJmZvbGxvd19zeW1saW5rcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19nZXR4YXR0cl9pbXBsKG1vZHVsZSwgJnBhdGgsICZhdHRyaWJ1dGUsIGZvbGxvd19zeW1saW5rcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgLyogQ2xlYW51cCBmb3IgYXR0cmlidXRlICovCisgICAgcGF0aF9jbGVhbnVwKCZhdHRyaWJ1dGUpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoVVNFX1hBVFRSUykgKi8KKworI2lmIGRlZmluZWQoVVNFX1hBVFRSUykKKworUHlEb2NfU1RSVkFSKG9zX3NldHhhdHRyX19kb2NfXywKKyJzZXR4YXR0cigkbW9kdWxlLCAvLCBwYXRoLCBhdHRyaWJ1dGUsIHZhbHVlLCBmbGFncz0wLCAqLFxuIgorIiAgICAgICAgIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiU2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSBhdHRyaWJ1dGUgb24gcGF0aCB0byB2YWx1ZS5cbiIKKyJcbiIKKyJwYXRoIG1heSBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljXG4iCisiICBsaW5rLCBzZXR4YXR0ciB3aWxsIG1vZGlmeSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuIgorIiAgdGhlIGxpbmsgcG9pbnRzIHRvLiIpOworCisjZGVmaW5lIE9TX1NFVFhBVFRSX01FVEhPRERFRiAgICBcCisgICAgeyJzZXR4YXR0ciIsIChQeUNGdW5jdGlvbilvc19zZXR4YXR0ciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3NldHhhdHRyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXR4YXR0cl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgcGF0aF90ICphdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqdmFsdWUsIGludCBmbGFncywgaW50IGZvbGxvd19zeW1saW5rcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXR4YXR0cihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiYXR0cmlidXRlIiwgInZhbHVlIiwgImZsYWdzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoInNldHhhdHRyIiwgInBhdGgiLCAwLCAxKTsKKyAgICBwYXRoX3QgYXR0cmlidXRlID0gUEFUSF9UX0lOSVRJQUxJWkUoInNldHhhdHRyIiwgImF0dHJpYnV0ZSIsIDAsIDApOworICAgIFB5X2J1ZmZlciB2YWx1ZSA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnkqfGkkcDpzZXR4YXR0ciIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCBwYXRoX2NvbnZlcnRlciwgJmF0dHJpYnV0ZSwgJnZhbHVlLCAmZmxhZ3MsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc2V0eGF0dHJfaW1wbChtb2R1bGUsICZwYXRoLCAmYXR0cmlidXRlLCAmdmFsdWUsIGZsYWdzLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIC8qIENsZWFudXAgZm9yIGF0dHJpYnV0ZSAqLworICAgIHBhdGhfY2xlYW51cCgmYXR0cmlidXRlKTsKKyAgICAvKiBDbGVhbnVwIGZvciB2YWx1ZSAqLworICAgIGlmICh2YWx1ZS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFsdWUpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoVVNFX1hBVFRSUykgKi8KKworI2lmIGRlZmluZWQoVVNFX1hBVFRSUykKKworUHlEb2NfU1RSVkFSKG9zX3JlbW92ZXhhdHRyX19kb2NfXywKKyJyZW1vdmV4YXR0cigkbW9kdWxlLCAvLCBwYXRoLCBhdHRyaWJ1dGUsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiUmVtb3ZlIGV4dGVuZGVkIGF0dHJpYnV0ZSBhdHRyaWJ1dGUgb24gcGF0aC5cbiIKKyJcbiIKKyJwYXRoIG1heSBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG4iCisiSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljXG4iCisiICBsaW5rLCByZW1vdmV4YXR0ciB3aWxsIG1vZGlmeSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuIgorIiAgdGhlIGxpbmsgcG9pbnRzIHRvLiIpOworCisjZGVmaW5lIE9TX1JFTU9WRVhBVFRSX01FVEhPRERFRiAgICBcCisgICAgeyJyZW1vdmV4YXR0ciIsIChQeUNGdW5jdGlvbilvc19yZW1vdmV4YXR0ciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX3JlbW92ZXhhdHRyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19yZW1vdmV4YXR0cl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgcGF0aF90ICphdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcmVtb3ZleGF0dHIoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgImF0dHJpYnV0ZSIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJyZW1vdmV4YXR0ciIsICJwYXRoIiwgMCwgMSk7CisgICAgcGF0aF90IGF0dHJpYnV0ZSA9IFBBVEhfVF9JTklUSUFMSVpFKCJyZW1vdmV4YXR0ciIsICJhdHRyaWJ1dGUiLCAwLCAwKTsKKyAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8JHA6cmVtb3ZleGF0dHIiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgcGF0aF9jb252ZXJ0ZXIsICZhdHRyaWJ1dGUsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfcmVtb3ZleGF0dHJfaW1wbChtb2R1bGUsICZwYXRoLCAmYXR0cmlidXRlLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIC8qIENsZWFudXAgZm9yIGF0dHJpYnV0ZSAqLworICAgIHBhdGhfY2xlYW51cCgmYXR0cmlidXRlKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKFVTRV9YQVRUUlMpICovCisKKyNpZiBkZWZpbmVkKFVTRV9YQVRUUlMpCisKK1B5RG9jX1NUUlZBUihvc19saXN0eGF0dHJfX2RvY19fLAorImxpc3R4YXR0cigkbW9kdWxlLCAvLCBwYXRoPU5vbmUsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgbGlzdCBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIG9uIHBhdGguXG4iCisiXG4iCisicGF0aCBtYXkgYmUgZWl0aGVyIE5vbmUsIGEgc3RyaW5nLCBvciBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cbiIKKyJpZiBwYXRoIGlzIE5vbmUsIGxpc3R4YXR0ciB3aWxsIGV4YW1pbmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuIgorIklmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuIgorIiAgbGluaywgbGlzdHhhdHRyIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuIgorIiAgdGhlIGxpbmsgcG9pbnRzIHRvLiIpOworCisjZGVmaW5lIE9TX0xJU1RYQVRUUl9NRVRIT0RERUYgICAgXAorICAgIHsibGlzdHhhdHRyIiwgKFB5Q0Z1bmN0aW9uKW9zX2xpc3R4YXR0ciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2xpc3R4YXR0cl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfbGlzdHhhdHRyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2xpc3R4YXR0cihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgibGlzdHhhdHRyIiwgInBhdGgiLCAxLCAxKTsKKyAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJiRwOmxpc3R4YXR0ciIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2xpc3R4YXR0cl9pbXBsKG1vZHVsZSwgJnBhdGgsIGZvbGxvd19zeW1saW5rcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChVU0VfWEFUVFJTKSAqLworCitQeURvY19TVFJWQVIob3NfdXJhbmRvbV9fZG9jX18sCisidXJhbmRvbSgkbW9kdWxlLCBzaXplLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgcmFuZG9tIGJ5dGVzIHN1aXRhYmxlIGZvciBjcnlwdG9ncmFwaGljIHVzZS4iKTsKKworI2RlZmluZSBPU19VUkFORE9NX01FVEhPRERFRiAgICBcCisgICAgeyJ1cmFuZG9tIiwgKFB5Q0Z1bmN0aW9uKW9zX3VyYW5kb20sIE1FVEhfTywgb3NfdXJhbmRvbV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfdXJhbmRvbV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X3NzaXplX3Qgc2l6ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc191cmFuZG9tKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJuOnVyYW5kb20iLCAmc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc191cmFuZG9tX2ltcGwobW9kdWxlLCBzaXplKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIob3NfY3B1X2NvdW50X19kb2NfXywKKyJjcHVfY291bnQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbTsgcmV0dXJuIE5vbmUgaWYgaW5kZXRlcm1pbmFibGUuIik7CisKKyNkZWZpbmUgT1NfQ1BVX0NPVU5UX01FVEhPRERFRiAgICBcCisgICAgeyJjcHVfY291bnQiLCAoUHlDRnVuY3Rpb24pb3NfY3B1X2NvdW50LCBNRVRIX05PQVJHUywgb3NfY3B1X2NvdW50X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19jcHVfY291bnRfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2NwdV9jb3VudChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBvc19jcHVfY291bnRfaW1wbChtb2R1bGUpOworfQorCitQeURvY19TVFJWQVIob3NfZ2V0X2luaGVyaXRhYmxlX19kb2NfXywKKyJnZXRfaW5oZXJpdGFibGUoJG1vZHVsZSwgZmQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJHZXQgdGhlIGNsb3NlLW9uLWV4ZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCisjZGVmaW5lIE9TX0dFVF9JTkhFUklUQUJMRV9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0X2luaGVyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldF9pbmhlcml0YWJsZSwgTUVUSF9PLCBvc19nZXRfaW5oZXJpdGFibGVfX2RvY19ffSwKKworc3RhdGljIGludAorb3NfZ2V0X2luaGVyaXRhYmxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldF9pbmhlcml0YWJsZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaTpnZXRfaW5oZXJpdGFibGUiLCAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX2dldF9pbmhlcml0YWJsZV9pbXBsKG1vZHVsZSwgZmQpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIob3Nfc2V0X2luaGVyaXRhYmxlX19kb2NfXywKKyJzZXRfaW5oZXJpdGFibGUoJG1vZHVsZSwgZmQsIGluaGVyaXRhYmxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCisjZGVmaW5lIE9TX1NFVF9JTkhFUklUQUJMRV9NRVRIT0RERUYgICAgXAorICAgIHsic2V0X2luaGVyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKW9zX3NldF9pbmhlcml0YWJsZSwgTUVUSF9WQVJBUkdTLCBvc19zZXRfaW5oZXJpdGFibGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NldF9pbmhlcml0YWJsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgaW50IGluaGVyaXRhYmxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NldF9pbmhlcml0YWJsZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgaW50IGluaGVyaXRhYmxlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpzZXRfaW5oZXJpdGFibGUiLAorICAgICAgICAmZmQsICZpbmhlcml0YWJsZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zZXRfaW5oZXJpdGFibGVfaW1wbChtb2R1bGUsIGZkLCBpbmhlcml0YWJsZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoTVNfV0lORE9XUykKKworUHlEb2NfU1RSVkFSKG9zX2dldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19fLAorImdldF9oYW5kbGVfaW5oZXJpdGFibGUoJG1vZHVsZSwgaGFuZGxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiR2V0IHRoZSBjbG9zZS1vbi1leGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKKworI2RlZmluZSBPU19HRVRfSEFORExFX0lOSEVSSVRBQkxFX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKW9zX2dldF9oYW5kbGVfaW5oZXJpdGFibGUsIE1FVEhfTywgb3NfZ2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX199LAorCitzdGF0aWMgaW50Citvc19nZXRfaGFuZGxlX2luaGVyaXRhYmxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfaW50cHRyX3QgaGFuZGxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2dldF9oYW5kbGVfaW5oZXJpdGFibGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIiIgX1B5X1BBUlNFX0lOVFBUUiAiOmdldF9oYW5kbGVfaW5oZXJpdGFibGUiLCAmaGFuZGxlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc19nZXRfaGFuZGxlX2luaGVyaXRhYmxlX2ltcGwobW9kdWxlLCBoYW5kbGUpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChNU19XSU5ET1dTKSAqLworCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQorCitQeURvY19TVFJWQVIob3Nfc2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX18sCisic2V0X2hhbmRsZV9pbmhlcml0YWJsZSgkbW9kdWxlLCBoYW5kbGUsIGluaGVyaXRhYmxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlLiIpOworCisjZGVmaW5lIE9TX1NFVF9IQU5ETEVfSU5IRVJJVEFCTEVfTUVUSE9EREVGICAgIFwKKyAgICB7InNldF9oYW5kbGVfaW5oZXJpdGFibGUiLCAoUHlDRnVuY3Rpb24pb3Nfc2V0X2hhbmRsZV9pbmhlcml0YWJsZSwgTUVUSF9WQVJBUkdTLCBvc19zZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRfaGFuZGxlX2luaGVyaXRhYmxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfaW50cHRyX3QgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmhlcml0YWJsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRfaGFuZGxlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBpbnQgaW5oZXJpdGFibGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiIgX1B5X1BBUlNFX0lOVFBUUiAicDpzZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwKKyAgICAgICAgJmhhbmRsZSwgJmluaGVyaXRhYmxlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX3NldF9oYW5kbGVfaW5oZXJpdGFibGVfaW1wbChtb2R1bGUsIGhhbmRsZSwgaW5oZXJpdGFibGUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCisKKyNpZm5kZWYgT1NfVFRZTkFNRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1RUWU5BTUVfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfVFRZTkFNRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfQ1RFUk1JRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0NURVJNSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfQ1RFUk1JRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRkNIRElSX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfRkNIRElSX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0ZDSERJUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRkNITU9EX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfRkNITU9EX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0ZDSE1PRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTENITU9EX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfTENITU9EX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0xDSE1PRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfQ0hGTEFHU19NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0NIRkxBR1NfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfQ0hGTEFHU19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTENIRkxBR1NfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19MQ0hGTEFHU19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19MQ0hGTEFHU19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfQ0hST09UX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfQ0hST09UX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0NIUk9PVF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRlNZTkNfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19GU1lOQ19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19GU1lOQ19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU1lOQ19NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NZTkNfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU1lOQ19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRkRBVEFTWU5DX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfRkRBVEFTWU5DX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0ZEQVRBU1lOQ19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfQ0hPV05fTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19DSE9XTl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19DSE9XTl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRkNIT1dOX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfRkNIT1dOX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0ZDSE9XTl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTENIT1dOX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfTENIT1dOX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0xDSE9XTl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTElOS19NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0xJTktfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfTElOS19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfX0dFVEZVTExQQVRITkFNRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX19HRVRGVUxMUEFUSE5BTUVfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfX0dFVEZVTExQQVRITkFNRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfX0dFVEZJTkFMUEFUSE5BTUVfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19fR0VURklOQUxQQVRITkFNRV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19fR0VURklOQUxQQVRITkFNRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfX0lTRElSX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfX0lTRElSX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX19JU0RJUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfX0dFVFZPTFVNRVBBVEhOQU1FX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfX0dFVFZPTFVNRVBBVEhOQU1FX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX19HRVRWT0xVTUVQQVRITkFNRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTklDRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX05JQ0VfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfTklDRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUUFJJT1JJVFlfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19HRVRQUklPUklUWV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19HRVRQUklPUklUWV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUUFJJT1JJVFlfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TRVRQUklPUklUWV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TRVRQUklPUklUWV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU1lTVEVNX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU1lTVEVNX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NZU1RFTV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfVU5BTUVfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19VTkFNRV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19VTkFNRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRVhFQ1ZfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19FWEVDVl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19FWEVDVl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRVhFQ1ZFX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfRVhFQ1ZFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0VYRUNWRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU1BBV05WX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU1BBV05WX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NQQVdOVl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU1BBV05WRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NQQVdOVkVfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU1BBV05WRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRk9SSzFfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19GT1JLMV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19GT1JLMV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRk9SS19NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0ZPUktfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfRk9SS19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfR0VUX1BSSU9SSVRZX01BWF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NDSEVEX0dFVF9QUklPUklUWV9NQVhfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU0NIRURfR0VUX1BSSU9SSVRZX01BWF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfR0VUX1BSSU9SSVRZX01JTl9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NDSEVEX0dFVF9QUklPUklUWV9NSU5fTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU0NIRURfR0VUX1BSSU9SSVRZX01JTl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfR0VUU0NIRURVTEVSX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0NIRURfR0VUU0NIRURVTEVSX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NDSEVEX0dFVFNDSEVEVUxFUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfU0VUU0NIRURVTEVSX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0NIRURfU0VUU0NIRURVTEVSX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NDSEVEX1NFVFNDSEVEVUxFUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfR0VUUEFSQU1fTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TQ0hFRF9HRVRQQVJBTV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TQ0hFRF9HRVRQQVJBTV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfU0VUUEFSQU1fTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TQ0hFRF9TRVRQQVJBTV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TQ0hFRF9TRVRQQVJBTV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfUlJfR0VUX0lOVEVSVkFMX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0NIRURfUlJfR0VUX0lOVEVSVkFMX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NDSEVEX1JSX0dFVF9JTlRFUlZBTF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfWUlFTERfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TQ0hFRF9ZSUVMRF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TQ0hFRF9ZSUVMRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfU0VUQUZGSU5JVFlfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TQ0hFRF9TRVRBRkZJTklUWV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TQ0hFRF9TRVRBRkZJTklUWV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0NIRURfR0VUQUZGSU5JVFlfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TQ0hFRF9HRVRBRkZJTklUWV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TQ0hFRF9HRVRBRkZJTklUWV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfT1BFTlBUWV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX09QRU5QVFlfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfT1BFTlBUWV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRk9SS1BUWV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0ZPUktQVFlfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfRk9SS1BUWV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VURUdJRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0dFVEVHSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfR0VURUdJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VURVVJRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0dFVEVVSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfR0VURVVJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUR0lEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfR0VUR0lEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0dFVEdJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUR1JPVVBTX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfR0VUR1JPVVBTX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0dFVEdST1VQU19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUUEdJRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0dFVFBHSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfR0VUUEdJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUUEdSUF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0dFVFBHUlBfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfR0VUUEdSUF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUUEdSUF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NFVFBHUlBfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU0VUUEdSUF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUUFBJRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0dFVFBQSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfR0VUUFBJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUTE9HSU5fTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19HRVRMT0dJTl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19HRVRMT0dJTl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUVUlEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfR0VUVUlEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0dFVFVJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfS0lMTF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0tJTExfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfS0lMTF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfS0lMTFBHX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfS0lMTFBHX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0tJTExQR19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUExPQ0tfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19QTE9DS19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19QTE9DS19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUVUlEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0VUVUlEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NFVFVJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VURVVJRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NFVEVVSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU0VURVVJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VURUdJRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NFVEVHSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU0VURUdJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUUkVVSURfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TRVRSRVVJRF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TRVRSRVVJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUUkVHSURfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TRVRSRUdJRF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TRVRSRUdJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUR0lEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0VUR0lEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NFVEdJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUR1JPVVBTX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0VUR1JPVVBTX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NFVEdST1VQU19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0FJVDNfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19XQUlUM19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19XQUlUM19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0FJVDRfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19XQUlUNF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19XQUlUNF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0FJVElEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfV0FJVElEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1dBSVRJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0FJVFBJRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1dBSVRQSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfV0FJVFBJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0FJVF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1dBSVRfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfV0FJVF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU1lNTElOS19NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NZTUxJTktfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU1lNTElOS19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfVElNRVNfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19USU1FU19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19USU1FU19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUU0lEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfR0VUU0lEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0dFVFNJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUU0lEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0VUU0lEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NFVFNJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUUEdJRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NFVFBHSURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU0VUUEdJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfVENHRVRQR1JQX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfVENHRVRQR1JQX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1RDR0VUUEdSUF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfVENTRVRQR1JQX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfVENTRVRQR1JQX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1RDU0VUUEdSUF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTE9DS0ZfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19MT0NLRl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19MT0NLRl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUkVBRFZfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19SRUFEVl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19SRUFEVl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUFJFQURfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19QUkVBRF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19QUkVBRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUElQRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1BJUEVfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfUElQRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUElQRTJfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19QSVBFMl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19QSVBFMl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV1JJVEVWX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfV1JJVEVWX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1dSSVRFVl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUFdSSVRFX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfUFdSSVRFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1BXUklURV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTUtGSUZPX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfTUtGSUZPX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX01LRklGT19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTUtOT0RfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19NS05PRF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19NS05PRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTUFKT1JfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19NQUpPUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19NQUpPUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTUlOT1JfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19NSU5PUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19NSU5PUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTUFLRURFVl9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX01BS0VERVZfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfTUFLRURFVl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRlRSVU5DQVRFX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfRlRSVU5DQVRFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0ZUUlVOQ0FURV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfVFJVTkNBVEVfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19UUlVOQ0FURV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19UUlVOQ0FURV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUE9TSVhfRkFMTE9DQVRFX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfUE9TSVhfRkFMTE9DQVRFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1BPU0lYX0ZBTExPQ0FURV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUE9TSVhfRkFEVklTRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1BPU0lYX0ZBRFZJU0VfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfUE9TSVhfRkFEVklTRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUFVURU5WX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfUFVURU5WX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1BVVEVOVl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfVU5TRVRFTlZfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19VTlNFVEVOVl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19VTlNFVEVOVl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0NPUkVEVU1QX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfV0NPUkVEVU1QX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1dDT1JFRFVNUF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0lGQ09OVElOVUVEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfV0lGQ09OVElOVUVEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1dJRkNPTlRJTlVFRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0lGU1RPUFBFRF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1dJRlNUT1BQRURfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfV0lGU1RPUFBFRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0lGU0lHTkFMRURfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19XSUZTSUdOQUxFRF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19XSUZTSUdOQUxFRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0lGRVhJVEVEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfV0lGRVhJVEVEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1dJRkVYSVRFRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV0VYSVRTVEFUVVNfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19XRVhJVFNUQVRVU19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19XRVhJVFNUQVRVU19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV1RFUk1TSUdfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19XVEVSTVNJR19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19XVEVSTVNJR19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfV1NUT1BTSUdfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19XU1RPUFNJR19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19XU1RPUFNJR19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRlNUQVRWRlNfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19GU1RBVFZGU19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19GU1RBVFZGU19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU1RBVFZGU19NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NUQVRWRlNfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU1RBVFZGU19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfX0dFVERJU0tVU0FHRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX19HRVRESVNLVVNBR0VfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfX0dFVERJU0tVU0FHRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfRlBBVEhDT05GX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfRlBBVEhDT05GX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0ZQQVRIQ09ORl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUEFUSENPTkZfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19QQVRIQ09ORl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19QQVRIQ09ORl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfQ09ORlNUUl9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0NPTkZTVFJfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfQ09ORlNUUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU1lTQ09ORl9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NZU0NPTkZfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU1lTQ09ORl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUTE9BREFWR19NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0dFVExPQURBVkdfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfR0VUTE9BREFWR19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUUkVTVUlEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0VUUkVTVUlEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NFVFJFU1VJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUUkVTR0lEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfU0VUUkVTR0lEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX1NFVFJFU0dJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUUkVTVUlEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfR0VUUkVTVUlEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0dFVFJFU1VJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUUkVTR0lEX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfR0VUUkVTR0lEX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0dFVFJFU0dJRF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUWEFUVFJfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19HRVRYQVRUUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19HRVRYQVRUUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUWEFUVFJfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19TRVRYQVRUUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19TRVRYQVRUUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfUkVNT1ZFWEFUVFJfTUVUSE9EREVGCisgICAgI2RlZmluZSBPU19SRU1PVkVYQVRUUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19SRU1PVkVYQVRUUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfTElTVFhBVFRSX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfTElTVFhBVFRSX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE9TX0xJU1RYQVRUUl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfR0VUX0hBTkRMRV9JTkhFUklUQUJMRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX0dFVF9IQU5ETEVfSU5IRVJJVEFCTEVfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfR0VUX0hBTkRMRV9JTkhFUklUQUJMRV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgT1NfU0VUX0hBTkRMRV9JTkhFUklUQUJMRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1NFVF9IQU5ETEVfSU5IRVJJVEFCTEVfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfU0VUX0hBTkRMRV9JTkhFUklUQUJMRV9NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzI3MjIxOTg3Zjk4N2NmMyBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9wd2Rtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvcHdkbW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE5MWEwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvcHdkbW9kdWxlLmMuaApAQCAtMCwwICsxLDcxIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIocHdkX2dldHB3dWlkX19kb2NfXywKKyJnZXRwd3VpZCgkbW9kdWxlLCB1aWRvYmosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gbnVtZXJpYyB1c2VyIElELlxuIgorIlxuIgorIlNlZSBgaGVscChwd2QpYCBmb3IgbW9yZSBvbiBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLiIpOworCisjZGVmaW5lIFBXRF9HRVRQV1VJRF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0cHd1aWQiLCAoUHlDRnVuY3Rpb24pcHdkX2dldHB3dWlkLCBNRVRIX08sIHB3ZF9nZXRwd3VpZF9fZG9jX199LAorCitQeURvY19TVFJWQVIocHdkX2dldHB3bmFtX19kb2NfXywKKyJnZXRwd25hbSgkbW9kdWxlLCBhcmcsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gdXNlciBuYW1lLlxuIgorIlxuIgorIlNlZSBgaGVscChwd2QpYCBmb3IgbW9yZSBvbiBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLiIpOworCisjZGVmaW5lIFBXRF9HRVRQV05BTV9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0cHduYW0iLCAoUHlDRnVuY3Rpb24pcHdkX2dldHB3bmFtLCBNRVRIX08sIHB3ZF9nZXRwd25hbV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorcHdkX2dldHB3bmFtX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwd2RfZ2V0cHduYW0oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ18pCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmFyZzsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnXywgIlU6Z2V0cHduYW0iLCAmYXJnKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHB3ZF9nZXRwd25hbV9pbXBsKG1vZHVsZSwgYXJnKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX0dFVFBXRU5UKQorCitQeURvY19TVFJWQVIocHdkX2dldHB3YWxsX19kb2NfXywKKyJnZXRwd2FsbCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMsIGluIGFyYml0cmFyeSBvcmRlci5cbiIKKyJcbiIKKyJTZWUgaGVscChwd2QpIGZvciBtb3JlIG9uIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuIik7CisKKyNkZWZpbmUgUFdEX0dFVFBXQUxMX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRwd2FsbCIsIChQeUNGdW5jdGlvbilwd2RfZ2V0cHdhbGwsIE1FVEhfTk9BUkdTLCBwd2RfZ2V0cHdhbGxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3B3ZF9nZXRwd2FsbF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorcHdkX2dldHB3YWxsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIHB3ZF9nZXRwd2FsbF9pbXBsKG1vZHVsZSk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfR0VUUFdFTlQpICovCisKKyNpZm5kZWYgUFdEX0dFVFBXQUxMX01FVEhPRERFRgorICAgICNkZWZpbmUgUFdEX0dFVFBXQUxMX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKFBXRF9HRVRQV0FMTF9NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDBlYTFjNWM4MzJmMGMxYSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9weWV4cGF0LmMuaCBiL01vZHVsZXMvY2xpbmljL3B5ZXhwYXQuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjVjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9weWV4cGF0LmMuaApAQCAtMCwwICsxLDI4NCBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHB5ZXhwYXRfeG1scGFyc2VyX1BhcnNlX19kb2NfXywKKyJQYXJzZSgkc2VsZiwgZGF0YSwgaXNmaW5hbD1GYWxzZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlBhcnNlIFhNTCBkYXRhLlxuIgorIlxuIgorImBpc2ZpbmFsXCcgc2hvdWxkIGJlIHRydWUgYXQgZW5kIG9mIGlucHV0LiIpOworCisjZGVmaW5lIFBZRVhQQVRfWE1MUEFSU0VSX1BBUlNFX01FVEhPRERFRiAgICBcCisgICAgeyJQYXJzZSIsIChQeUNGdW5jdGlvbilweWV4cGF0X3htbHBhcnNlcl9QYXJzZSwgTUVUSF9WQVJBUkdTLCBweWV4cGF0X3htbHBhcnNlcl9QYXJzZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorcHlleHBhdF94bWxwYXJzZXJfUGFyc2VfaW1wbCh4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc2ZpbmFsKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXhwYXRfeG1scGFyc2VyX1BhcnNlKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZGF0YTsKKyAgICBpbnQgaXNmaW5hbCA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aTpQYXJzZSIsCisgICAgICAgICZkYXRhLCAmaXNmaW5hbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBweWV4cGF0X3htbHBhcnNlcl9QYXJzZV9pbXBsKHNlbGYsIGRhdGEsIGlzZmluYWwpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihweWV4cGF0X3htbHBhcnNlcl9QYXJzZUZpbGVfX2RvY19fLAorIlBhcnNlRmlsZSgkc2VsZiwgZmlsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlBhcnNlIFhNTCBkYXRhIGZyb20gZmlsZS1saWtlIG9iamVjdC4iKTsKKworI2RlZmluZSBQWUVYUEFUX1hNTFBBUlNFUl9QQVJTRUZJTEVfTUVUSE9EREVGICAgIFwKKyAgICB7IlBhcnNlRmlsZSIsIChQeUNGdW5jdGlvbilweWV4cGF0X3htbHBhcnNlcl9QYXJzZUZpbGUsIE1FVEhfTywgcHlleHBhdF94bWxwYXJzZXJfUGFyc2VGaWxlX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihweWV4cGF0X3htbHBhcnNlcl9TZXRCYXNlX19kb2NfXywKKyJTZXRCYXNlKCRzZWxmLCBiYXNlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2V0IHRoZSBiYXNlIFVSTCBmb3IgdGhlIHBhcnNlci4iKTsKKworI2RlZmluZSBQWUVYUEFUX1hNTFBBUlNFUl9TRVRCQVNFX01FVEhPRERFRiAgICBcCisgICAgeyJTZXRCYXNlIiwgKFB5Q0Z1bmN0aW9uKXB5ZXhwYXRfeG1scGFyc2VyX1NldEJhc2UsIE1FVEhfTywgcHlleHBhdF94bWxwYXJzZXJfU2V0QmFzZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorcHlleHBhdF94bWxwYXJzZXJfU2V0QmFzZV9pbXBsKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpiYXNlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXhwYXRfeG1scGFyc2VyX1NldEJhc2UoeG1scGFyc2VvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqYmFzZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiczpTZXRCYXNlIiwgJmJhc2UpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gcHlleHBhdF94bWxwYXJzZXJfU2V0QmFzZV9pbXBsKHNlbGYsIGJhc2UpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihweWV4cGF0X3htbHBhcnNlcl9HZXRCYXNlX19kb2NfXywKKyJHZXRCYXNlKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGJhc2UgVVJMIHN0cmluZyBmb3IgdGhlIHBhcnNlci4iKTsKKworI2RlZmluZSBQWUVYUEFUX1hNTFBBUlNFUl9HRVRCQVNFX01FVEhPRERFRiAgICBcCisgICAgeyJHZXRCYXNlIiwgKFB5Q0Z1bmN0aW9uKXB5ZXhwYXRfeG1scGFyc2VyX0dldEJhc2UsIE1FVEhfTk9BUkdTLCBweWV4cGF0X3htbHBhcnNlcl9HZXRCYXNlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X3htbHBhcnNlcl9HZXRCYXNlX2ltcGwoeG1scGFyc2VvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorcHlleHBhdF94bWxwYXJzZXJfR2V0QmFzZSh4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gcHlleHBhdF94bWxwYXJzZXJfR2V0QmFzZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIocHlleHBhdF94bWxwYXJzZXJfR2V0SW5wdXRDb250ZXh0X19kb2NfXywKKyJHZXRJbnB1dENvbnRleHQoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHVudHJhbnNsYXRlZCB0ZXh0IG9mIHRoZSBpbnB1dCB0aGF0IGNhdXNlZCB0aGUgY3VycmVudCBldmVudC5cbiIKKyJcbiIKKyJJZiB0aGUgZXZlbnQgd2FzIGdlbmVyYXRlZCBieSBhIGxhcmdlIGFtb3VudCBvZiB0ZXh0IChzdWNoIGFzIGEgc3RhcnQgdGFnXG4iCisiZm9yIGFuIGVsZW1lbnQgd2l0aCBtYW55IGF0dHJpYnV0ZXMpLCBub3QgYWxsIG9mIHRoZSB0ZXh0IG1heSBiZSBhdmFpbGFibGUuIik7CisKKyNkZWZpbmUgUFlFWFBBVF9YTUxQQVJTRVJfR0VUSU5QVVRDT05URVhUX01FVEhPRERFRiAgICBcCisgICAgeyJHZXRJbnB1dENvbnRleHQiLCAoUHlDRnVuY3Rpb24pcHlleHBhdF94bWxwYXJzZXJfR2V0SW5wdXRDb250ZXh0LCBNRVRIX05PQVJHUywgcHlleHBhdF94bWxwYXJzZXJfR2V0SW5wdXRDb250ZXh0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X3htbHBhcnNlcl9HZXRJbnB1dENvbnRleHRfaW1wbCh4bWxwYXJzZW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X3htbHBhcnNlcl9HZXRJbnB1dENvbnRleHQoeG1scGFyc2VvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIHB5ZXhwYXRfeG1scGFyc2VyX0dldElucHV0Q29udGV4dF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIocHlleHBhdF94bWxwYXJzZXJfRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGVfX2RvY19fLAorIkV4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlKCRzZWxmLCBjb250ZXh0LCBlbmNvZGluZz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgcGFyc2VyIGZvciBwYXJzaW5nIGFuIGV4dGVybmFsIGVudGl0eSBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gcGFzc2VkIHRvIHRoZSBFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIuIik7CisKKyNkZWZpbmUgUFlFWFBBVF9YTUxQQVJTRVJfRVhURVJOQUxFTlRJVFlQQVJTRVJDUkVBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7IkV4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlIiwgKFB5Q0Z1bmN0aW9uKXB5ZXhwYXRfeG1scGFyc2VyX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlLCBNRVRIX1ZBUkFSR1MsIHB5ZXhwYXRfeG1scGFyc2VyX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X3htbHBhcnNlcl9FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZV9pbXBsKHhtbHBhcnNlb2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X3htbHBhcnNlcl9FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZSh4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqY29udGV4dDsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInp8czpFeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZSIsCisgICAgICAgICZjb250ZXh0LCAmZW5jb2RpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gcHlleHBhdF94bWxwYXJzZXJfRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGVfaW1wbChzZWxmLCBjb250ZXh0LCBlbmNvZGluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHB5ZXhwYXRfeG1scGFyc2VyX1NldFBhcmFtRW50aXR5UGFyc2luZ19fZG9jX18sCisiU2V0UGFyYW1FbnRpdHlQYXJzaW5nKCRzZWxmLCBmbGFnLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udHJvbHMgcGFyc2luZyBvZiBwYXJhbWV0ZXIgZW50aXRpZXMgKGluY2x1ZGluZyB0aGUgZXh0ZXJuYWwgRFREIHN1YnNldCkuXG4iCisiXG4iCisiUG9zc2libGUgZmxhZyB2YWx1ZXMgYXJlIFhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19ORVZFUixcbiIKKyJYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfVU5MRVNTX1NUQU5EQUxPTkUgYW5kXG4iCisiWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX0FMV0FZUy4gUmV0dXJucyB0cnVlIGlmIHNldHRpbmcgdGhlIGZsYWdcbiIKKyJ3YXMgc3VjY2Vzc2Z1bC4iKTsKKworI2RlZmluZSBQWUVYUEFUX1hNTFBBUlNFUl9TRVRQQVJBTUVOVElUWVBBUlNJTkdfTUVUSE9EREVGICAgIFwKKyAgICB7IlNldFBhcmFtRW50aXR5UGFyc2luZyIsIChQeUNGdW5jdGlvbilweWV4cGF0X3htbHBhcnNlcl9TZXRQYXJhbUVudGl0eVBhcnNpbmcsIE1FVEhfTywgcHlleHBhdF94bWxwYXJzZXJfU2V0UGFyYW1FbnRpdHlQYXJzaW5nX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X3htbHBhcnNlcl9TZXRQYXJhbUVudGl0eVBhcnNpbmdfaW1wbCh4bWxwYXJzZW9iamVjdCAqc2VsZiwgaW50IGZsYWcpOworCitzdGF0aWMgUHlPYmplY3QgKgorcHlleHBhdF94bWxwYXJzZXJfU2V0UGFyYW1FbnRpdHlQYXJzaW5nKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmbGFnOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOlNldFBhcmFtRW50aXR5UGFyc2luZyIsICZmbGFnKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHB5ZXhwYXRfeG1scGFyc2VyX1NldFBhcmFtRW50aXR5UGFyc2luZ19pbXBsKHNlbGYsIGZsYWcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZiAoWE1MX0NPTUJJTkVEX1ZFUlNJT04gPj0gMTk1MDUpCisKK1B5RG9jX1NUUlZBUihweWV4cGF0X3htbHBhcnNlcl9Vc2VGb3JlaWduRFREX19kb2NfXywKKyJVc2VGb3JlaWduRFREKCRzZWxmLCBmbGFnPVRydWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJBbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHByb3ZpZGUgYW4gYXJ0aWZpY2lhbCBleHRlcm5hbCBzdWJzZXQgaWYgb25lIGlzIG5vdCBzcGVjaWZpZWQgYXMgcGFydCBvZiB0aGUgZG9jdW1lbnQgaW5zdGFuY2UuXG4iCisiXG4iCisiVGhpcyByZWFkaWx5IGFsbG93cyB0aGUgdXNlIG9mIGEgXCdkZWZhdWx0XCcgZG9jdW1lbnQgdHlwZSBjb250cm9sbGVkIGJ5IHRoZVxuIgorImFwcGxpY2F0aW9uLCB3aGlsZSBzdGlsbCBnZXR0aW5nIHRoZSBhZHZhbnRhZ2Ugb2YgcHJvdmlkaW5nIGRvY3VtZW50IHR5cGVcbiIKKyJpbmZvcm1hdGlvbiB0byB0aGUgcGFyc2VyLiBcJ2ZsYWdcJyBkZWZhdWx0cyB0byBUcnVlIGlmIG5vdCBwcm92aWRlZC4iKTsKKworI2RlZmluZSBQWUVYUEFUX1hNTFBBUlNFUl9VU0VGT1JFSUdORFREX01FVEhPRERFRiAgICBcCisgICAgeyJVc2VGb3JlaWduRFREIiwgKFB5Q0Z1bmN0aW9uKXB5ZXhwYXRfeG1scGFyc2VyX1VzZUZvcmVpZ25EVEQsIE1FVEhfVkFSQVJHUywgcHlleHBhdF94bWxwYXJzZXJfVXNlRm9yZWlnbkRURF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorcHlleHBhdF94bWxwYXJzZXJfVXNlRm9yZWlnbkRURF9pbXBsKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBpbnQgZmxhZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X3htbHBhcnNlcl9Vc2VGb3JlaWduRFREKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmxhZyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxwOlVzZUZvcmVpZ25EVEQiLAorICAgICAgICAmZmxhZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBweWV4cGF0X3htbHBhcnNlcl9Vc2VGb3JlaWduRFREX2ltcGwoc2VsZiwgZmxhZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIChYTUxfQ09NQklORURfVkVSU0lPTiA+PSAxOTUwNSkgKi8KKworUHlEb2NfU1RSVkFSKHB5ZXhwYXRfeG1scGFyc2VyX19fZGlyX19fX2RvY19fLAorIl9fZGlyX18oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIFBZRVhQQVRfWE1MUEFSU0VSX19fRElSX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fZGlyX18iLCAoUHlDRnVuY3Rpb24pcHlleHBhdF94bWxwYXJzZXJfX19kaXJfXywgTUVUSF9OT0FSR1MsIHB5ZXhwYXRfeG1scGFyc2VyX19fZGlyX19fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXhwYXRfeG1scGFyc2VyX19fZGlyX19faW1wbCh4bWxwYXJzZW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X3htbHBhcnNlcl9fX2Rpcl9fKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBweWV4cGF0X3htbHBhcnNlcl9fX2Rpcl9fX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihweWV4cGF0X1BhcnNlckNyZWF0ZV9fZG9jX18sCisiUGFyc2VyQ3JlYXRlKCRtb2R1bGUsIC8sIGVuY29kaW5nPU5vbmUsIG5hbWVzcGFjZV9zZXBhcmF0b3I9Tm9uZSxcbiIKKyIgICAgICAgICAgICAgaW50ZXJuPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBuZXcgWE1MIHBhcnNlciBvYmplY3QuIik7CisKKyNkZWZpbmUgUFlFWFBBVF9QQVJTRVJDUkVBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7IlBhcnNlckNyZWF0ZSIsIChQeUNGdW5jdGlvbilweWV4cGF0X1BhcnNlckNyZWF0ZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIHB5ZXhwYXRfUGFyc2VyQ3JlYXRlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X1BhcnNlckNyZWF0ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lc3BhY2Vfc2VwYXJhdG9yLCBQeU9iamVjdCAqaW50ZXJuKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXhwYXRfUGFyc2VyQ3JlYXRlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZW5jb2RpbmciLCAibmFtZXNwYWNlX3NlcGFyYXRvciIsICJpbnRlcm4iLCBOVUxMfTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqbmFtZXNwYWNlX3NlcGFyYXRvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmludGVybiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8enpPOlBhcnNlckNyZWF0ZSIsIF9rZXl3b3JkcywKKyAgICAgICAgJmVuY29kaW5nLCAmbmFtZXNwYWNlX3NlcGFyYXRvciwgJmludGVybikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBweWV4cGF0X1BhcnNlckNyZWF0ZV9pbXBsKG1vZHVsZSwgZW5jb2RpbmcsIG5hbWVzcGFjZV9zZXBhcmF0b3IsIGludGVybik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHB5ZXhwYXRfRXJyb3JTdHJpbmdfX2RvY19fLAorIkVycm9yU3RyaW5nKCRtb2R1bGUsIGNvZGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHN0cmluZyBlcnJvciBmb3IgZ2l2ZW4gbnVtYmVyLiIpOworCisjZGVmaW5lIFBZRVhQQVRfRVJST1JTVFJJTkdfTUVUSE9EREVGICAgIFwKKyAgICB7IkVycm9yU3RyaW5nIiwgKFB5Q0Z1bmN0aW9uKXB5ZXhwYXRfRXJyb3JTdHJpbmcsIE1FVEhfTywgcHlleHBhdF9FcnJvclN0cmluZ19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorcHlleHBhdF9FcnJvclN0cmluZ19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGxvbmcgY29kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitweWV4cGF0X0Vycm9yU3RyaW5nKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgbG9uZyBjb2RlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJsOkVycm9yU3RyaW5nIiwgJmNvZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gcHlleHBhdF9FcnJvclN0cmluZ19pbXBsKG1vZHVsZSwgY29kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmbmRlZiBQWUVYUEFUX1hNTFBBUlNFUl9VU0VGT1JFSUdORFREX01FVEhPRERFRgorICAgICNkZWZpbmUgUFlFWFBBVF9YTUxQQVJTRVJfVVNFRk9SRUlHTkRURF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChQWUVYUEFUX1hNTFBBUlNFUl9VU0VGT1JFSUdORFREX01FVEhPRERFRikgKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNDc5Y2ZhYjYwN2U5ZGM4IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL3NoYTFtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvc2hhMW1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI4ZGI4MAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL3NoYTFtb2R1bGUuYy5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihTSEExVHlwZV9jb3B5X19kb2NfXywKKyJjb3B5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgY29weSBvZiB0aGUgaGFzaCBvYmplY3QuIik7CisKKyNkZWZpbmUgU0hBMVRZUEVfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbilTSEExVHlwZV9jb3B5LCBNRVRIX05PQVJHUywgU0hBMVR5cGVfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorU0hBMVR5cGVfY29weV9pbXBsKFNIQTFvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBMVR5cGVfY29weShTSEExb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBTSEExVHlwZV9jb3B5X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihTSEExVHlwZV9kaWdlc3RfX2RvY19fLAorImRpZ2VzdCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGJpbmFyeSBkYXRhLiIpOworCisjZGVmaW5lIFNIQTFUWVBFX0RJR0VTVF9NRVRIT0RERUYgICAgXAorICAgIHsiZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKVNIQTFUeXBlX2RpZ2VzdCwgTUVUSF9OT0FSR1MsIFNIQTFUeXBlX2RpZ2VzdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorU0hBMVR5cGVfZGlnZXN0X2ltcGwoU0hBMW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEExVHlwZV9kaWdlc3QoU0hBMW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gU0hBMVR5cGVfZGlnZXN0X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihTSEExVHlwZV9oZXhkaWdlc3RfX2RvY19fLAorImhleGRpZ2VzdCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIGRpZ2l0cy4iKTsKKworI2RlZmluZSBTSEExVFlQRV9IRVhESUdFU1RfTUVUSE9EREVGICAgIFwKKyAgICB7ImhleGRpZ2VzdCIsIChQeUNGdW5jdGlvbilTSEExVHlwZV9oZXhkaWdlc3QsIE1FVEhfTk9BUkdTLCBTSEExVHlwZV9oZXhkaWdlc3RfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTFUeXBlX2hleGRpZ2VzdF9pbXBsKFNIQTFvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBMVR5cGVfaGV4ZGlnZXN0KFNIQTFvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIFNIQTFUeXBlX2hleGRpZ2VzdF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoU0hBMVR5cGVfdXBkYXRlX19kb2NfXywKKyJ1cGRhdGUoJHNlbGYsIG9iaiwgLylcbiIKKyItLVxuIgorIlxuIgorIlVwZGF0ZSB0aGlzIGhhc2ggb2JqZWN0XCdzIHN0YXRlIHdpdGggdGhlIHByb3ZpZGVkIHN0cmluZy4iKTsKKworI2RlZmluZSBTSEExVFlQRV9VUERBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7InVwZGF0ZSIsIChQeUNGdW5jdGlvbilTSEExVHlwZV91cGRhdGUsIE1FVEhfTywgU0hBMVR5cGVfdXBkYXRlX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihfc2hhMV9zaGExX19kb2NfXywKKyJzaGExKCRtb2R1bGUsIC8sIHN0cmluZz1iXCdcJylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIG5ldyBTSEExIGhhc2ggb2JqZWN0OyBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJpbmcuIik7CisKKyNkZWZpbmUgX1NIQTFfU0hBMV9NRVRIT0RERUYgICAgXAorICAgIHsic2hhMSIsIChQeUNGdW5jdGlvbilfc2hhMV9zaGExLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NoYTFfc2hhMV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NoYTFfc2hhMV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzdHJpbmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NoYTFfc2hhMShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InN0cmluZyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE86c2hhMSIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0cmluZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc2hhMV9zaGExX2ltcGwobW9kdWxlLCBzdHJpbmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGI2YTE5NGZiYjBiOTRmMiBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9zaGEyNTZtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvc2hhMjU2bW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjE1NjljCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvc2hhMjU2bW9kdWxlLmMuaApAQCAtMCwwICsxLDEyMyBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKFNIQTI1NlR5cGVfY29weV9fZG9jX18sCisiY29weSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGNvcHkgb2YgdGhlIGhhc2ggb2JqZWN0LiIpOworCisjZGVmaW5lIFNIQTI1NlRZUEVfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbilTSEEyNTZUeXBlX2NvcHksIE1FVEhfTk9BUkdTLCBTSEEyNTZUeXBlX2NvcHlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTI1NlR5cGVfY29weV9pbXBsKFNIQW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEyNTZUeXBlX2NvcHkoU0hBb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBTSEEyNTZUeXBlX2NvcHlfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKFNIQTI1NlR5cGVfZGlnZXN0X19kb2NfXywKKyJkaWdlc3QoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBiaW5hcnkgZGF0YS4iKTsKKworI2RlZmluZSBTSEEyNTZUWVBFX0RJR0VTVF9NRVRIT0RERUYgICAgXAorICAgIHsiZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKVNIQTI1NlR5cGVfZGlnZXN0LCBNRVRIX05PQVJHUywgU0hBMjU2VHlwZV9kaWdlc3RfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTI1NlR5cGVfZGlnZXN0X2ltcGwoU0hBb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTI1NlR5cGVfZGlnZXN0KFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gU0hBMjU2VHlwZV9kaWdlc3RfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKFNIQTI1NlR5cGVfaGV4ZGlnZXN0X19kb2NfXywKKyJoZXhkaWdlc3QoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuIik7CisKKyNkZWZpbmUgU0hBMjU2VFlQRV9IRVhESUdFU1RfTUVUSE9EREVGICAgIFwKKyAgICB7ImhleGRpZ2VzdCIsIChQeUNGdW5jdGlvbilTSEEyNTZUeXBlX2hleGRpZ2VzdCwgTUVUSF9OT0FSR1MsIFNIQTI1NlR5cGVfaGV4ZGlnZXN0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEyNTZUeXBlX2hleGRpZ2VzdF9pbXBsKFNIQW9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEyNTZUeXBlX2hleGRpZ2VzdChTSEFvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIFNIQTI1NlR5cGVfaGV4ZGlnZXN0X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihTSEEyNTZUeXBlX3VwZGF0ZV9fZG9jX18sCisidXBkYXRlKCRzZWxmLCBvYmosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJVcGRhdGUgdGhpcyBoYXNoIG9iamVjdFwncyBzdGF0ZSB3aXRoIHRoZSBwcm92aWRlZCBzdHJpbmcuIik7CisKKyNkZWZpbmUgU0hBMjU2VFlQRV9VUERBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7InVwZGF0ZSIsIChQeUNGdW5jdGlvbilTSEEyNTZUeXBlX3VwZGF0ZSwgTUVUSF9PLCBTSEEyNTZUeXBlX3VwZGF0ZV9fZG9jX199LAorCitQeURvY19TVFJWQVIoX3NoYTI1Nl9zaGEyNTZfX2RvY19fLAorInNoYTI1NigkbW9kdWxlLCAvLCBzdHJpbmc9YlwnXCcpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBuZXcgU0hBLTI1NiBoYXNoIG9iamVjdDsgb3B0aW9uYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RyaW5nLiIpOworCisjZGVmaW5lIF9TSEEyNTZfU0hBMjU2X01FVEhPRERFRiAgICBcCisgICAgeyJzaGEyNTYiLCAoUHlDRnVuY3Rpb24pX3NoYTI1Nl9zaGEyNTYsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfc2hhMjU2X3NoYTI1Nl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NoYTI1Nl9zaGEyNTZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyaW5nKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zaGEyNTZfc2hhMjU2KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RyaW5nIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TzpzaGEyNTYiLCBfa2V5d29yZHMsCisgICAgICAgICZzdHJpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NoYTI1Nl9zaGEyNTZfaW1wbChtb2R1bGUsIHN0cmluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9zaGEyNTZfc2hhMjI0X19kb2NfXywKKyJzaGEyMjQoJG1vZHVsZSwgLywgc3RyaW5nPWJcJ1wnKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgbmV3IFNIQS0yMjQgaGFzaCBvYmplY3Q7IG9wdGlvbmFsbHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHN0cmluZy4iKTsKKworI2RlZmluZSBfU0hBMjU2X1NIQTIyNF9NRVRIT0RERUYgICAgXAorICAgIHsic2hhMjI0IiwgKFB5Q0Z1bmN0aW9uKV9zaGEyNTZfc2hhMjI0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3NoYTI1Nl9zaGEyMjRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19zaGEyNTZfc2hhMjI0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0cmluZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfc2hhMjU2X3NoYTIyNChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InN0cmluZyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE86c2hhMjI0IiwgX2tleXdvcmRzLAorICAgICAgICAmc3RyaW5nKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9zaGEyNTZfc2hhMjI0X2ltcGwobW9kdWxlLCBzdHJpbmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWExZmM1NDgwZTM5OWY5NSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9zaGE1MTJtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvc2hhNTEybW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjRjMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvc2hhNTEybW9kdWxlLmMuaApAQCAtMCwwICsxLDE3MSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworI2lmIGRlZmluZWQoUFlfTE9OR19MT05HKQorCitQeURvY19TVFJWQVIoU0hBNTEyVHlwZV9jb3B5X19kb2NfXywKKyJjb3B5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgY29weSBvZiB0aGUgaGFzaCBvYmplY3QuIik7CisKKyNkZWZpbmUgU0hBNTEyVFlQRV9DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKVNIQTUxMlR5cGVfY29weSwgTUVUSF9OT0FSR1MsIFNIQTUxMlR5cGVfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorU0hBNTEyVHlwZV9jb3B5X2ltcGwoU0hBb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTUxMlR5cGVfY29weShTSEFvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIFNIQTUxMlR5cGVfY29weV9pbXBsKHNlbGYpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChQWV9MT05HX0xPTkcpICovCisKKyNpZiBkZWZpbmVkKFBZX0xPTkdfTE9ORykKKworUHlEb2NfU1RSVkFSKFNIQTUxMlR5cGVfZGlnZXN0X19kb2NfXywKKyJkaWdlc3QoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBiaW5hcnkgZGF0YS4iKTsKKworI2RlZmluZSBTSEE1MTJUWVBFX0RJR0VTVF9NRVRIT0RERUYgICAgXAorICAgIHsiZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKVNIQTUxMlR5cGVfZGlnZXN0LCBNRVRIX05PQVJHUywgU0hBNTEyVHlwZV9kaWdlc3RfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTUxMlR5cGVfZGlnZXN0X2ltcGwoU0hBb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTUxMlR5cGVfZGlnZXN0KFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gU0hBNTEyVHlwZV9kaWdlc3RfaW1wbChzZWxmKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoUFlfTE9OR19MT05HKSAqLworCisjaWYgZGVmaW5lZChQWV9MT05HX0xPTkcpCisKK1B5RG9jX1NUUlZBUihTSEE1MTJUeXBlX2hleGRpZ2VzdF9fZG9jX18sCisiaGV4ZGlnZXN0KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLiIpOworCisjZGVmaW5lIFNIQTUxMlRZUEVfSEVYRElHRVNUX01FVEhPRERFRiAgICBcCisgICAgeyJoZXhkaWdlc3QiLCAoUHlDRnVuY3Rpb24pU0hBNTEyVHlwZV9oZXhkaWdlc3QsIE1FVEhfTk9BUkdTLCBTSEE1MTJUeXBlX2hleGRpZ2VzdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorU0hBNTEyVHlwZV9oZXhkaWdlc3RfaW1wbChTSEFvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBNTEyVHlwZV9oZXhkaWdlc3QoU0hBb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBTSEE1MTJUeXBlX2hleGRpZ2VzdF9pbXBsKHNlbGYpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChQWV9MT05HX0xPTkcpICovCisKKyNpZiBkZWZpbmVkKFBZX0xPTkdfTE9ORykKKworUHlEb2NfU1RSVkFSKFNIQTUxMlR5cGVfdXBkYXRlX19kb2NfXywKKyJ1cGRhdGUoJHNlbGYsIG9iaiwgLylcbiIKKyItLVxuIgorIlxuIgorIlVwZGF0ZSB0aGlzIGhhc2ggb2JqZWN0XCdzIHN0YXRlIHdpdGggdGhlIHByb3ZpZGVkIHN0cmluZy4iKTsKKworI2RlZmluZSBTSEE1MTJUWVBFX1VQREFURV9NRVRIT0RERUYgICAgXAorICAgIHsidXBkYXRlIiwgKFB5Q0Z1bmN0aW9uKVNIQTUxMlR5cGVfdXBkYXRlLCBNRVRIX08sIFNIQTUxMlR5cGVfdXBkYXRlX19kb2NfX30sCisKKyNlbmRpZiAvKiBkZWZpbmVkKFBZX0xPTkdfTE9ORykgKi8KKworI2lmIGRlZmluZWQoUFlfTE9OR19MT05HKQorCitQeURvY19TVFJWQVIoX3NoYTUxMl9zaGE1MTJfX2RvY19fLAorInNoYTUxMigkbW9kdWxlLCAvLCBzdHJpbmc9YlwnXCcpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBuZXcgU0hBLTUxMiBoYXNoIG9iamVjdDsgb3B0aW9uYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RyaW5nLiIpOworCisjZGVmaW5lIF9TSEE1MTJfU0hBNTEyX01FVEhPRERFRiAgICBcCisgICAgeyJzaGE1MTIiLCAoUHlDRnVuY3Rpb24pX3NoYTUxMl9zaGE1MTIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfc2hhNTEyX3NoYTUxMl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3NoYTUxMl9zaGE1MTJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyaW5nKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19zaGE1MTJfc2hhNTEyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic3RyaW5nIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TzpzaGE1MTIiLCBfa2V5d29yZHMsCisgICAgICAgICZzdHJpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3NoYTUxMl9zaGE1MTJfaW1wbChtb2R1bGUsIHN0cmluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoUFlfTE9OR19MT05HKSAqLworCisjaWYgZGVmaW5lZChQWV9MT05HX0xPTkcpCisKK1B5RG9jX1NUUlZBUihfc2hhNTEyX3NoYTM4NF9fZG9jX18sCisic2hhMzg0KCRtb2R1bGUsIC8sIHN0cmluZz1iXCdcJylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIG5ldyBTSEEtMzg0IGhhc2ggb2JqZWN0OyBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJpbmcuIik7CisKKyNkZWZpbmUgX1NIQTUxMl9TSEEzODRfTUVUSE9EREVGICAgIFwKKyAgICB7InNoYTM4NCIsIChQeUNGdW5jdGlvbilfc2hhNTEyX3NoYTM4NCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9zaGE1MTJfc2hhMzg0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfc2hhNTEyX3NoYTM4NF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzdHJpbmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3NoYTUxMl9zaGEzODQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdHJpbmciLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc3RyaW5nID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPOnNoYTM4NCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0cmluZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfc2hhNTEyX3NoYTM4NF9pbXBsKG1vZHVsZSwgc3RyaW5nKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChQWV9MT05HX0xPTkcpICovCisKKyNpZm5kZWYgU0hBNTEyVFlQRV9DT1BZX01FVEhPRERFRgorICAgICNkZWZpbmUgU0hBNTEyVFlQRV9DT1BZX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKFNIQTUxMlRZUEVfQ09QWV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgU0hBNTEyVFlQRV9ESUdFU1RfTUVUSE9EREVGCisgICAgI2RlZmluZSBTSEE1MTJUWVBFX0RJR0VTVF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSEE1MTJUWVBFX0RJR0VTVF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgU0hBNTEyVFlQRV9IRVhESUdFU1RfTUVUSE9EREVGCisgICAgI2RlZmluZSBTSEE1MTJUWVBFX0hFWERJR0VTVF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSEE1MTJUWVBFX0hFWERJR0VTVF9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgU0hBNTEyVFlQRV9VUERBVEVfTUVUSE9EREVGCisgICAgI2RlZmluZSBTSEE1MTJUWVBFX1VQREFURV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSEE1MTJUWVBFX1VQREFURV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgX1NIQTUxMl9TSEE1MTJfTUVUSE9EREVGCisgICAgI2RlZmluZSBfU0hBNTEyX1NIQTUxMl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfU0hBNTEyX1NIQTUxMl9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgX1NIQTUxMl9TSEEzODRfTUVUSE9EREVGCisgICAgI2RlZmluZSBfU0hBNTEyX1NIQTM4NF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfU0hBNTEyX1NIQTM4NF9NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmI4N2Y0OTRkZjUwZmZjMCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9zaWduYWxtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvc2lnbmFsbW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGY0Y2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvc2lnbmFsbW9kdWxlLmMuaApAQCAtMCwwICsxLDQzMiBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworI2lmIGRlZmluZWQoSEFWRV9BTEFSTSkKKworUHlEb2NfU1RSVkFSKHNpZ25hbF9hbGFybV9fZG9jX18sCisiYWxhcm0oJG1vZHVsZSwgc2Vjb25kcywgLylcbiIKKyItLVxuIgorIlxuIgorIkFycmFuZ2UgZm9yIFNJR0FMUk0gdG8gYXJyaXZlIGFmdGVyIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4iKTsKKworI2RlZmluZSBTSUdOQUxfQUxBUk1fTUVUSE9EREVGICAgIFwKKyAgICB7ImFsYXJtIiwgKFB5Q0Z1bmN0aW9uKXNpZ25hbF9hbGFybSwgTUVUSF9PLCBzaWduYWxfYWxhcm1fX2RvY19ffSwKKworc3RhdGljIGxvbmcKK3NpZ25hbF9hbGFybV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzZWNvbmRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NpZ25hbF9hbGFybShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBzZWNvbmRzOworICAgIGxvbmcgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaTphbGFybSIsICZzZWNvbmRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBzaWduYWxfYWxhcm1faW1wbChtb2R1bGUsIHNlY29uZHMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZyhfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0FMQVJNKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1BBVVNFKQorCitQeURvY19TVFJWQVIoc2lnbmFsX3BhdXNlX19kb2NfXywKKyJwYXVzZSgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV2FpdCB1bnRpbCBhIHNpZ25hbCBhcnJpdmVzLiIpOworCisjZGVmaW5lIFNJR05BTF9QQVVTRV9NRVRIT0RERUYgICAgXAorICAgIHsicGF1c2UiLCAoUHlDRnVuY3Rpb24pc2lnbmFsX3BhdXNlLCBNRVRIX05PQVJHUywgc2lnbmFsX3BhdXNlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitzaWduYWxfcGF1c2VfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NpZ25hbF9wYXVzZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBzaWduYWxfcGF1c2VfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1BBVVNFKSAqLworCitQeURvY19TVFJWQVIoc2lnbmFsX3NpZ25hbF9fZG9jX18sCisic2lnbmFsKCRtb2R1bGUsIHNpZ25hbG51bSwgaGFuZGxlciwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldCB0aGUgYWN0aW9uIGZvciB0aGUgZ2l2ZW4gc2lnbmFsLlxuIgorIlxuIgorIlRoZSBhY3Rpb24gY2FuIGJlIFNJR19ERkwsIFNJR19JR04sIG9yIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdC5cbiIKKyJUaGUgcHJldmlvdXMgYWN0aW9uIGlzIHJldHVybmVkLiAgU2VlIGdldHNpZ25hbCgpIGZvciBwb3NzaWJsZSByZXR1cm4gdmFsdWVzLlxuIgorIlxuIgorIioqKiBJTVBPUlRBTlQgTk9USUNFICoqKlxuIgorIkEgc2lnbmFsIGhhbmRsZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czpcbiIKKyJ0aGUgZmlyc3QgaXMgdGhlIHNpZ25hbCBudW1iZXIsIHRoZSBzZWNvbmQgaXMgdGhlIGludGVycnVwdGVkIHN0YWNrIGZyYW1lLiIpOworCisjZGVmaW5lIFNJR05BTF9TSUdOQUxfTUVUSE9EREVGICAgIFwKKyAgICB7InNpZ25hbCIsIChQeUNGdW5jdGlvbilzaWduYWxfc2lnbmFsLCBNRVRIX1ZBUkFSR1MsIHNpZ25hbF9zaWduYWxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3NpZ25hbF9zaWduYWxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgc2lnbmFsbnVtLCBQeU9iamVjdCAqaGFuZGxlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzaWduYWxfc2lnbmFsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBzaWduYWxudW07CisgICAgUHlPYmplY3QgKmhhbmRsZXI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPOnNpZ25hbCIsCisgICAgICAgICZzaWduYWxudW0sICZoYW5kbGVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHNpZ25hbF9zaWduYWxfaW1wbChtb2R1bGUsIHNpZ25hbG51bSwgaGFuZGxlcik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHNpZ25hbF9nZXRzaWduYWxfX2RvY19fLAorImdldHNpZ25hbCgkbW9kdWxlLCBzaWduYWxudW0sIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGN1cnJlbnQgYWN0aW9uIGZvciB0aGUgZ2l2ZW4gc2lnbmFsLlxuIgorIlxuIgorIlRoZSByZXR1cm4gdmFsdWUgY2FuIGJlOlxuIgorIiAgU0lHX0lHTiAtLSBpZiB0aGUgc2lnbmFsIGlzIGJlaW5nIGlnbm9yZWRcbiIKKyIgIFNJR19ERkwgLS0gaWYgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgc2lnbmFsIGlzIGluIGVmZmVjdFxuIgorIiAgTm9uZSAgICAtLSBpZiBhbiB1bmtub3duIGhhbmRsZXIgaXMgaW4gZWZmZWN0XG4iCisiICBhbnl0aGluZyBlbHNlIC0tIHRoZSBjYWxsYWJsZSBQeXRob24gb2JqZWN0IHVzZWQgYXMgYSBoYW5kbGVyIik7CisKKyNkZWZpbmUgU0lHTkFMX0dFVFNJR05BTF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0c2lnbmFsIiwgKFB5Q0Z1bmN0aW9uKXNpZ25hbF9nZXRzaWduYWwsIE1FVEhfTywgc2lnbmFsX2dldHNpZ25hbF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX2dldHNpZ25hbF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzaWduYWxudW0pOworCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX2dldHNpZ25hbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBzaWduYWxudW07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImk6Z2V0c2lnbmFsIiwgJnNpZ25hbG51bSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBzaWduYWxfZ2V0c2lnbmFsX2ltcGwobW9kdWxlLCBzaWduYWxudW0pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfU0lHSU5URVJSVVBUKQorCitQeURvY19TVFJWQVIoc2lnbmFsX3NpZ2ludGVycnVwdF9fZG9jX18sCisic2lnaW50ZXJydXB0KCRtb2R1bGUsIHNpZ25hbG51bSwgZmxhZywgLylcbiIKKyItLVxuIgorIlxuIgorIkNoYW5nZSBzeXN0ZW0gY2FsbCByZXN0YXJ0IGJlaGF2aW91ci5cbiIKKyJcbiIKKyJJZiBmbGFnIGlzIEZhbHNlLCBzeXN0ZW0gY2FsbHMgd2lsbCBiZSByZXN0YXJ0ZWQgd2hlbiBpbnRlcnJ1cHRlZCBieVxuIgorInNpZ25hbCBzaWcsIGVsc2Ugc3lzdGVtIGNhbGxzIHdpbGwgYmUgaW50ZXJydXB0ZWQuIik7CisKKyNkZWZpbmUgU0lHTkFMX1NJR0lOVEVSUlVQVF9NRVRIT0RERUYgICAgXAorICAgIHsic2lnaW50ZXJydXB0IiwgKFB5Q0Z1bmN0aW9uKXNpZ25hbF9zaWdpbnRlcnJ1cHQsIE1FVEhfVkFSQVJHUywgc2lnbmFsX3NpZ2ludGVycnVwdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX3NpZ2ludGVycnVwdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzaWduYWxudW0sIGludCBmbGFnKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NpZ25hbF9zaWdpbnRlcnJ1cHQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IHNpZ25hbG51bTsKKyAgICBpbnQgZmxhZzsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c2lnaW50ZXJydXB0IiwKKyAgICAgICAgJnNpZ25hbG51bSwgJmZsYWcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gc2lnbmFsX3NpZ2ludGVycnVwdF9pbXBsKG1vZHVsZSwgc2lnbmFsbnVtLCBmbGFnKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NJR0lOVEVSUlVQVCkgKi8KKworI2lmIGRlZmluZWQoSEFWRV9TRVRJVElNRVIpCisKK1B5RG9jX1NUUlZBUihzaWduYWxfc2V0aXRpbWVyX19kb2NfXywKKyJzZXRpdGltZXIoJG1vZHVsZSwgd2hpY2gsIHNlY29uZHMsIGludGVydmFsPTAuMCwgLylcbiIKKyItLVxuIgorIlxuIgorIlNldHMgZ2l2ZW4gaXRpbWVyIChvbmUgb2YgSVRJTUVSX1JFQUwsIElUSU1FUl9WSVJUVUFMIG9yIElUSU1FUl9QUk9GKS5cbiIKKyJcbiIKKyJUaGUgdGltZXIgd2lsbCBmaXJlIGFmdGVyIHZhbHVlIHNlY29uZHMgYW5kIGFmdGVyIHRoYXQgZXZlcnkgaW50ZXJ2YWwgc2Vjb25kcy5cbiIKKyJUaGUgaXRpbWVyIGNhbiBiZSBjbGVhcmVkIGJ5IHNldHRpbmcgc2Vjb25kcyB0byB6ZXJvLlxuIgorIlxuIgorIlJldHVybnMgb2xkIHZhbHVlcyBhcyBhIHR1cGxlOiAoZGVsYXksIGludGVydmFsKS4iKTsKKworI2RlZmluZSBTSUdOQUxfU0VUSVRJTUVSX01FVEhPRERFRiAgICBcCisgICAgeyJzZXRpdGltZXIiLCAoUHlDRnVuY3Rpb24pc2lnbmFsX3NldGl0aW1lciwgTUVUSF9WQVJBUkdTLCBzaWduYWxfc2V0aXRpbWVyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitzaWduYWxfc2V0aXRpbWVyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHdoaWNoLCBkb3VibGUgc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgaW50ZXJ2YWwpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX3NldGl0aW1lcihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgd2hpY2g7CisgICAgZG91YmxlIHNlY29uZHM7CisgICAgZG91YmxlIGludGVydmFsID0gMC4wOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpZHxkOnNldGl0aW1lciIsCisgICAgICAgICZ3aGljaCwgJnNlY29uZHMsICZpbnRlcnZhbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBzaWduYWxfc2V0aXRpbWVyX2ltcGwobW9kdWxlLCB3aGljaCwgc2Vjb25kcywgaW50ZXJ2YWwpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0VUSVRJTUVSKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0dFVElUSU1FUikKKworUHlEb2NfU1RSVkFSKHNpZ25hbF9nZXRpdGltZXJfX2RvY19fLAorImdldGl0aW1lcigkbW9kdWxlLCB3aGljaCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgY3VycmVudCB2YWx1ZSBvZiBnaXZlbiBpdGltZXIuIik7CisKKyNkZWZpbmUgU0lHTkFMX0dFVElUSU1FUl9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0aXRpbWVyIiwgKFB5Q0Z1bmN0aW9uKXNpZ25hbF9nZXRpdGltZXIsIE1FVEhfTywgc2lnbmFsX2dldGl0aW1lcl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX2dldGl0aW1lcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCB3aGljaCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzaWduYWxfZ2V0aXRpbWVyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IHdoaWNoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOmdldGl0aW1lciIsICZ3aGljaCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBzaWduYWxfZ2V0aXRpbWVyX2ltcGwobW9kdWxlLCB3aGljaCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9HRVRJVElNRVIpICovCisKKyNpZiBkZWZpbmVkKFBZUFRIUkVBRF9TSUdNQVNLKQorCitQeURvY19TVFJWQVIoc2lnbmFsX3B0aHJlYWRfc2lnbWFza19fZG9jX18sCisicHRocmVhZF9zaWdtYXNrKCRtb2R1bGUsIGhvdywgbWFzaywgLylcbiIKKyItLVxuIgorIlxuIgorIkZldGNoIGFuZC9vciBjaGFuZ2UgdGhlIHNpZ25hbCBtYXNrIG9mIHRoZSBjYWxsaW5nIHRocmVhZC4iKTsKKworI2RlZmluZSBTSUdOQUxfUFRIUkVBRF9TSUdNQVNLX01FVEhPRERFRiAgICBcCisgICAgeyJwdGhyZWFkX3NpZ21hc2siLCAoUHlDRnVuY3Rpb24pc2lnbmFsX3B0aHJlYWRfc2lnbWFzaywgTUVUSF9WQVJBUkdTLCBzaWduYWxfcHRocmVhZF9zaWdtYXNrX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitzaWduYWxfcHRocmVhZF9zaWdtYXNrX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGhvdywgUHlPYmplY3QgKm1hc2spOworCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX3B0aHJlYWRfc2lnbWFzayhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgaG93OworICAgIFB5T2JqZWN0ICptYXNrOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTzpwdGhyZWFkX3NpZ21hc2siLAorICAgICAgICAmaG93LCAmbWFzaykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBzaWduYWxfcHRocmVhZF9zaWdtYXNrX2ltcGwobW9kdWxlLCBob3csIG1hc2spOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKFBZUFRIUkVBRF9TSUdNQVNLKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NJR1BFTkRJTkcpCisKK1B5RG9jX1NUUlZBUihzaWduYWxfc2lncGVuZGluZ19fZG9jX18sCisic2lncGVuZGluZygkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRXhhbWluZSBwZW5kaW5nIHNpZ25hbHMuXG4iCisiXG4iCisiUmV0dXJucyBhIHNldCBvZiBzaWduYWwgbnVtYmVycyB0aGF0IGFyZSBwZW5kaW5nIGZvciBkZWxpdmVyeSB0b1xuIgorInRoZSBjYWxsaW5nIHRocmVhZC4iKTsKKworI2RlZmluZSBTSUdOQUxfU0lHUEVORElOR19NRVRIT0RERUYgICAgXAorICAgIHsic2lncGVuZGluZyIsIChQeUNGdW5jdGlvbilzaWduYWxfc2lncGVuZGluZywgTUVUSF9OT0FSR1MsIHNpZ25hbF9zaWdwZW5kaW5nX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitzaWduYWxfc2lncGVuZGluZ19pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX3NpZ3BlbmRpbmcoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gc2lnbmFsX3NpZ3BlbmRpbmdfaW1wbChtb2R1bGUpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NJR1BFTkRJTkcpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0lHV0FJVCkKKworUHlEb2NfU1RSVkFSKHNpZ25hbF9zaWd3YWl0X19kb2NfXywKKyJzaWd3YWl0KCRtb2R1bGUsIHNpZ3NldCwgLylcbiIKKyItLVxuIgorIlxuIgorIldhaXQgZm9yIGEgc2lnbmFsLlxuIgorIlxuIgorIlN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZSBjYWxsaW5nIHRocmVhZCB1bnRpbCB0aGUgZGVsaXZlcnkgb2Ygb25lIG9mIHRoZVxuIgorInNpZ25hbHMgc3BlY2lmaWVkIGluIHRoZSBzaWduYWwgc2V0IHNpZ3NldC4gIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBzaWduYWxcbiIKKyJhbmQgcmV0dXJucyB0aGUgc2lnbmFsIG51bWJlci4iKTsKKworI2RlZmluZSBTSUdOQUxfU0lHV0FJVF9NRVRIT0RERUYgICAgXAorICAgIHsic2lnd2FpdCIsIChQeUNGdW5jdGlvbilzaWduYWxfc2lnd2FpdCwgTUVUSF9PLCBzaWduYWxfc2lnd2FpdF9fZG9jX199LAorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NJR1dBSVQpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0lHV0FJVElORk8pCisKK1B5RG9jX1NUUlZBUihzaWduYWxfc2lnd2FpdGluZm9fX2RvY19fLAorInNpZ3dhaXRpbmZvKCRtb2R1bGUsIHNpZ3NldCwgLylcbiIKKyItLVxuIgorIlxuIgorIldhaXQgc3luY2hyb25vdXNseSB1bnRpbCBvbmUgb2YgdGhlIHNpZ25hbHMgaW4gKnNpZ3NldCogaXMgZGVsaXZlcmVkLlxuIgorIlxuIgorIlJldHVybnMgYSBzdHJ1Y3Rfc2lnaW5mbyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzaWduYWwuIik7CisKKyNkZWZpbmUgU0lHTkFMX1NJR1dBSVRJTkZPX01FVEhPRERFRiAgICBcCisgICAgeyJzaWd3YWl0aW5mbyIsIChQeUNGdW5jdGlvbilzaWduYWxfc2lnd2FpdGluZm8sIE1FVEhfTywgc2lnbmFsX3NpZ3dhaXRpbmZvX19kb2NfX30sCisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU0lHV0FJVElORk8pICovCisKKyNpZiBkZWZpbmVkKEhBVkVfU0lHVElNRURXQUlUKQorCitQeURvY19TVFJWQVIoc2lnbmFsX3NpZ3RpbWVkd2FpdF9fZG9jX18sCisic2lndGltZWR3YWl0KCRtb2R1bGUsIHNpZ3NldCwgdGltZW91dCwgLylcbiIKKyItLVxuIgorIlxuIgorIkxpa2Ugc2lnd2FpdGluZm8oKSwgYnV0IHdpdGggYSB0aW1lb3V0LlxuIgorIlxuIgorIlRoZSB0aW1lb3V0IGlzIHNwZWNpZmllZCBpbiBzZWNvbmRzLCB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYWxsb3dlZC4iKTsKKworI2RlZmluZSBTSUdOQUxfU0lHVElNRURXQUlUX01FVEhPRERFRiAgICBcCisgICAgeyJzaWd0aW1lZHdhaXQiLCAoUHlDRnVuY3Rpb24pc2lnbmFsX3NpZ3RpbWVkd2FpdCwgTUVUSF9WQVJBUkdTLCBzaWduYWxfc2lndGltZWR3YWl0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitzaWduYWxfc2lndGltZWR3YWl0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnNpZ3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGltZW91dF9vYmopOworCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX3NpZ3RpbWVkd2FpdChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc2lnc2V0OworICAgIFB5T2JqZWN0ICp0aW1lb3V0X29iajsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNpZ3RpbWVkd2FpdCIsCisgICAgICAgIDIsIDIsCisgICAgICAgICZzaWdzZXQsICZ0aW1lb3V0X29iaikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBzaWduYWxfc2lndGltZWR3YWl0X2ltcGwobW9kdWxlLCBzaWdzZXQsIHRpbWVvdXRfb2JqKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NJR1RJTUVEV0FJVCkgKi8KKworI2lmIChkZWZpbmVkKEhBVkVfUFRIUkVBRF9LSUxMKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKSkKKworUHlEb2NfU1RSVkFSKHNpZ25hbF9wdGhyZWFkX2tpbGxfX2RvY19fLAorInB0aHJlYWRfa2lsbCgkbW9kdWxlLCB0aHJlYWRfaWQsIHNpZ25hbG51bSwgLylcbiIKKyItLVxuIgorIlxuIgorIlNlbmQgYSBzaWduYWwgdG8gYSB0aHJlYWQuIik7CisKKyNkZWZpbmUgU0lHTkFMX1BUSFJFQURfS0lMTF9NRVRIT0RERUYgICAgXAorICAgIHsicHRocmVhZF9raWxsIiwgKFB5Q0Z1bmN0aW9uKXNpZ25hbF9wdGhyZWFkX2tpbGwsIE1FVEhfVkFSQVJHUywgc2lnbmFsX3B0aHJlYWRfa2lsbF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorc2lnbmFsX3B0aHJlYWRfa2lsbF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGxvbmcgdGhyZWFkX2lkLCBpbnQgc2lnbmFsbnVtKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NpZ25hbF9wdGhyZWFkX2tpbGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgbG9uZyB0aHJlYWRfaWQ7CisgICAgaW50IHNpZ25hbG51bTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibGk6cHRocmVhZF9raWxsIiwKKyAgICAgICAgJnRocmVhZF9pZCwgJnNpZ25hbG51bSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBzaWduYWxfcHRocmVhZF9raWxsX2ltcGwobW9kdWxlLCB0aHJlYWRfaWQsIHNpZ25hbG51bSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIChkZWZpbmVkKEhBVkVfUFRIUkVBRF9LSUxMKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKSkgKi8KKworI2lmbmRlZiBTSUdOQUxfQUxBUk1fTUVUSE9EREVGCisgICAgI2RlZmluZSBTSUdOQUxfQUxBUk1fTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoU0lHTkFMX0FMQVJNX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfUEFVU0VfTUVUSE9EREVGCisgICAgI2RlZmluZSBTSUdOQUxfUEFVU0VfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoU0lHTkFMX1BBVVNFX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfU0lHSU5URVJSVVBUX01FVEhPRERFRgorICAgICNkZWZpbmUgU0lHTkFMX1NJR0lOVEVSUlVQVF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSUdOQUxfU0lHSU5URVJSVVBUX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfU0VUSVRJTUVSX01FVEhPRERFRgorICAgICNkZWZpbmUgU0lHTkFMX1NFVElUSU1FUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSUdOQUxfU0VUSVRJTUVSX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfR0VUSVRJTUVSX01FVEhPRERFRgorICAgICNkZWZpbmUgU0lHTkFMX0dFVElUSU1FUl9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSUdOQUxfR0VUSVRJTUVSX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfUFRIUkVBRF9TSUdNQVNLX01FVEhPRERFRgorICAgICNkZWZpbmUgU0lHTkFMX1BUSFJFQURfU0lHTUFTS19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSUdOQUxfUFRIUkVBRF9TSUdNQVNLX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfU0lHUEVORElOR19NRVRIT0RERUYKKyAgICAjZGVmaW5lIFNJR05BTF9TSUdQRU5ESU5HX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKFNJR05BTF9TSUdQRU5ESU5HX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfU0lHV0FJVF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIFNJR05BTF9TSUdXQUlUX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKFNJR05BTF9TSUdXQUlUX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfU0lHV0FJVElORk9fTUVUSE9EREVGCisgICAgI2RlZmluZSBTSUdOQUxfU0lHV0FJVElORk9fTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoU0lHTkFMX1NJR1dBSVRJTkZPX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfU0lHVElNRURXQUlUX01FVEhPRERFRgorICAgICNkZWZpbmUgU0lHTkFMX1NJR1RJTUVEV0FJVF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSUdOQUxfU0lHVElNRURXQUlUX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBTSUdOQUxfUFRIUkVBRF9LSUxMX01FVEhPRERFRgorICAgICNkZWZpbmUgU0lHTkFMX1BUSFJFQURfS0lMTF9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChTSUdOQUxfUFRIUkVBRF9LSUxMX01FVEhPRERFRikgKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYWZhNTk4NDEyYmZiOGQyIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL3Nwd2Rtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvc3B3ZG1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2YWNmMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL3Nwd2Rtb2R1bGUuYy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUU1BOQU0pCisKK1B5RG9jX1NUUlZBUihzcHdkX2dldHNwbmFtX19kb2NfXywKKyJnZXRzcG5hbSgkbW9kdWxlLCBhcmcsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHNoYWRvdyBwYXNzd29yZCBkYXRhYmFzZSBlbnRyeSBmb3IgdGhlIGdpdmVuIHVzZXIgbmFtZS5cbiIKKyJcbiIKKyJTZWUgYGhlbHAoc3B3ZClgIGZvciBtb3JlIG9uIHNoYWRvdyBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLiIpOworCisjZGVmaW5lIFNQV0RfR0VUU1BOQU1fTUVUSE9EREVGICAgIFwKKyAgICB7ImdldHNwbmFtIiwgKFB5Q0Z1bmN0aW9uKXNwd2RfZ2V0c3BuYW0sIE1FVEhfTywgc3B3ZF9nZXRzcG5hbV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorc3B3ZF9nZXRzcG5hbV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3B3ZF9nZXRzcG5hbShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnXykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqYXJnOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmdfLCAiVTpnZXRzcG5hbSIsICZhcmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gc3B3ZF9nZXRzcG5hbV9pbXBsKG1vZHVsZSwgYXJnKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX0dFVFNQTkFNKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0dFVFNQRU5UKQorCitQeURvY19TVFJWQVIoc3B3ZF9nZXRzcGFsbF9fZG9jX18sCisiZ2V0c3BhbGwoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzaGFkb3cgcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcywgaW4gYXJiaXRyYXJ5IG9yZGVyLlxuIgorIlxuIgorIlNlZSBgaGVscChzcHdkKWAgZm9yIG1vcmUgb24gc2hhZG93IHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuIik7CisKKyNkZWZpbmUgU1BXRF9HRVRTUEFMTF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0c3BhbGwiLCAoUHlDRnVuY3Rpb24pc3B3ZF9nZXRzcGFsbCwgTUVUSF9OT0FSR1MsIHNwd2RfZ2V0c3BhbGxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3Nwd2RfZ2V0c3BhbGxfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Nwd2RfZ2V0c3BhbGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gc3B3ZF9nZXRzcGFsbF9pbXBsKG1vZHVsZSk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfR0VUU1BFTlQpICovCisKKyNpZm5kZWYgU1BXRF9HRVRTUE5BTV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIFNQV0RfR0VUU1BOQU1fTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoU1BXRF9HRVRTUE5BTV9NRVRIT0RERUYpICovCisKKyNpZm5kZWYgU1BXRF9HRVRTUEFMTF9NRVRIT0RERUYKKyAgICAjZGVmaW5lIFNQV0RfR0VUU1BBTExfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoU1BXRF9HRVRTUEFMTF9NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTEwZjY4MWIzNmY1NGMzMCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy91bmljb2RlZGF0YS5jLmggYi9Nb2R1bGVzL2NsaW5pYy91bmljb2RlZGF0YS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyMGMxZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL3VuaWNvZGVkYXRhLmMuaApAQCAtMCwwICsxLDM2OCBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX19kb2NfXywKKyJkZWNpbWFsKCRzZWxmLCBjaHIsIGRlZmF1bHQ9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIHZhbHVlLlxuIgorIlxuIgorIlJldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGNoYXJhY3RlciBjaHIgYXMgaW50ZWdlci5cbiIKKyJJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZiBub3QgZ2l2ZW4sXG4iCisiVmFsdWVFcnJvciBpcyByYWlzZWQuIik7CisKKyNkZWZpbmUgVU5JQ09ERURBVEFfVUNEX0RFQ0lNQUxfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY2ltYWwiLCAoUHlDRnVuY3Rpb24pdW5pY29kZWRhdGFfVUNEX2RlY2ltYWwsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBjaHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgY2hyOworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiQ3xPOmRlY2ltYWwiLAorICAgICAgICAmY2hyLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKHNlbGYsIGNociwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX1VDRF9kaWdpdF9fZG9jX18sCisiZGlnaXQoJHNlbGYsIGNociwgZGVmYXVsdD1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydHMgYSBVbmljb2RlIGNoYXJhY3RlciBpbnRvIGl0cyBlcXVpdmFsZW50IGRpZ2l0IHZhbHVlLlxuIgorIlxuIgorIlJldHVybnMgdGhlIGRpZ2l0IHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBjaGFyYWN0ZXIgY2hyIGFzIGludGVnZXIuXG4iCisiSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWYgbm90IGdpdmVuLFxuIgorIlZhbHVlRXJyb3IgaXMgcmFpc2VkLiIpOworCisjZGVmaW5lIFVOSUNPREVEQVRBX1VDRF9ESUdJVF9NRVRIT0RERUYgICAgXAorICAgIHsiZGlnaXQiLCAoUHlDRnVuY3Rpb24pdW5pY29kZWRhdGFfVUNEX2RpZ2l0LCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX1VDRF9kaWdpdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX2RpZ2l0X2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBjaHIsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9kaWdpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGNocjsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkN8TzpkaWdpdCIsCisgICAgICAgICZjaHIsICZkZWZhdWx0X3ZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVkYXRhX1VDRF9kaWdpdF9pbXBsKHNlbGYsIGNociwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX1VDRF9udW1lcmljX19kb2NfXywKKyJudW1lcmljKCRzZWxmLCBjaHIsIGRlZmF1bHQ9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBudW1lcmljIHZhbHVlLlxuIgorIlxuIgorIlJldHVybnMgdGhlIG51bWVyaWMgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGNoYXJhY3RlciBjaHIgYXMgZmxvYXQuXG4iCisiSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWYgbm90IGdpdmVuLFxuIgorIlZhbHVlRXJyb3IgaXMgcmFpc2VkLiIpOworCisjZGVmaW5lIFVOSUNPREVEQVRBX1VDRF9OVU1FUklDX01FVEhPRERFRiAgICBcCisgICAgeyJudW1lcmljIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVkYXRhX1VDRF9udW1lcmljLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX1VDRF9udW1lcmljX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfbnVtZXJpY19pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfbnVtZXJpYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGNocjsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkN8TzpudW1lcmljIiwKKyAgICAgICAgJmNociwgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gdW5pY29kZWRhdGFfVUNEX251bWVyaWNfaW1wbChzZWxmLCBjaHIsIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9VQ0RfY2F0ZWdvcnlfX2RvY19fLAorImNhdGVnb3J5KCRzZWxmLCBjaHIsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBnZW5lcmFsIGNhdGVnb3J5IGFzc2lnbmVkIHRvIHRoZSBjaGFyYWN0ZXIgY2hyIGFzIHN0cmluZy4iKTsKKworI2RlZmluZSBVTklDT0RFREFUQV9VQ0RfQ0FURUdPUllfTUVUSE9EREVGICAgIFwKKyAgICB7ImNhdGVnb3J5IiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVkYXRhX1VDRF9jYXRlZ29yeSwgTUVUSF9PLCB1bmljb2RlZGF0YV9VQ0RfY2F0ZWdvcnlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9jYXRlZ29yeV9pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgY2hyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9jYXRlZ29yeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgY2hyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJDOmNhdGVnb3J5IiwgJmNocikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfY2F0ZWdvcnlfaW1wbChzZWxmLCBjaHIpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9VQ0RfYmlkaXJlY3Rpb25hbF9fZG9jX18sCisiYmlkaXJlY3Rpb25hbCgkc2VsZiwgY2hyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyB0aGUgYmlkaXJlY3Rpb25hbCBjbGFzcyBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBzdHJpbmcuXG4iCisiXG4iCisiSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuIik7CisKKyNkZWZpbmUgVU5JQ09ERURBVEFfVUNEX0JJRElSRUNUSU9OQUxfTUVUSE9EREVGICAgIFwKKyAgICB7ImJpZGlyZWN0aW9uYWwiLCAoUHlDRnVuY3Rpb24pdW5pY29kZWRhdGFfVUNEX2JpZGlyZWN0aW9uYWwsIE1FVEhfTywgdW5pY29kZWRhdGFfVUNEX2JpZGlyZWN0aW9uYWxfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9iaWRpcmVjdGlvbmFsX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBjaHIpOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX2JpZGlyZWN0aW9uYWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGNocjsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiQzpiaWRpcmVjdGlvbmFsIiwgJmNocikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfYmlkaXJlY3Rpb25hbF9pbXBsKHNlbGYsIGNocik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX1VDRF9jb21iaW5pbmdfX2RvY19fLAorImNvbWJpbmluZygkc2VsZiwgY2hyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyB0aGUgY2Fub25pY2FsIGNvbWJpbmluZyBjbGFzcyBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBpbnRlZ2VyLlxuIgorIlxuIgorIlJldHVybnMgMCBpZiBubyBjb21iaW5pbmcgY2xhc3MgaXMgZGVmaW5lZC4iKTsKKworI2RlZmluZSBVTklDT0RFREFUQV9VQ0RfQ09NQklOSU5HX01FVEhPRERFRiAgICBcCisgICAgeyJjb21iaW5pbmciLCAoUHlDRnVuY3Rpb24pdW5pY29kZWRhdGFfVUNEX2NvbWJpbmluZywgTUVUSF9PLCB1bmljb2RlZGF0YV9VQ0RfY29tYmluaW5nX19kb2NfX30sCisKK3N0YXRpYyBpbnQKK3VuaWNvZGVkYXRhX1VDRF9jb21iaW5pbmdfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGNocik7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfY29tYmluaW5nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBjaHI7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkM6Y29tYmluaW5nIiwgJmNocikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gdW5pY29kZWRhdGFfVUNEX2NvbWJpbmluZ19pbXBsKHNlbGYsIGNocik7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9VQ0RfbWlycm9yZWRfX2RvY19fLAorIm1pcnJvcmVkKCRzZWxmLCBjaHIsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBtaXJyb3JlZCBwcm9wZXJ0eSBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBpbnRlZ2VyLlxuIgorIlxuIgorIlJldHVybnMgMSBpZiB0aGUgY2hhcmFjdGVyIGhhcyBiZWVuIGlkZW50aWZpZWQgYXMgYSBcIm1pcnJvcmVkXCJcbiIKKyJjaGFyYWN0ZXIgaW4gYmlkaXJlY3Rpb25hbCB0ZXh0LCAwIG90aGVyd2lzZS4iKTsKKworI2RlZmluZSBVTklDT0RFREFUQV9VQ0RfTUlSUk9SRURfTUVUSE9EREVGICAgIFwKKyAgICB7Im1pcnJvcmVkIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVkYXRhX1VDRF9taXJyb3JlZCwgTUVUSF9PLCB1bmljb2RlZGF0YV9VQ0RfbWlycm9yZWRfX2RvY19ffSwKKworc3RhdGljIGludAordW5pY29kZWRhdGFfVUNEX21pcnJvcmVkX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBjaHIpOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX21pcnJvcmVkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBjaHI7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkM6bWlycm9yZWQiLCAmY2hyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfbWlycm9yZWRfaW1wbChzZWxmLCBjaHIpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIodW5pY29kZWRhdGFfVUNEX2Vhc3RfYXNpYW5fd2lkdGhfX2RvY19fLAorImVhc3RfYXNpYW5fd2lkdGgoJHNlbGYsIGNociwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgdGhlIGVhc3QgYXNpYW4gd2lkdGggYXNzaWduZWQgdG8gdGhlIGNoYXJhY3RlciBjaHIgYXMgc3RyaW5nLiIpOworCisjZGVmaW5lIFVOSUNPREVEQVRBX1VDRF9FQVNUX0FTSUFOX1dJRFRIX01FVEhPRERFRiAgICBcCisgICAgeyJlYXN0X2FzaWFuX3dpZHRoIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVkYXRhX1VDRF9lYXN0X2FzaWFuX3dpZHRoLCBNRVRIX08sIHVuaWNvZGVkYXRhX1VDRF9lYXN0X2FzaWFuX3dpZHRoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfZWFzdF9hc2lhbl93aWR0aF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgY2hyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9lYXN0X2FzaWFuX3dpZHRoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBjaHI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkM6ZWFzdF9hc2lhbl93aWR0aCIsICZjaHIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gdW5pY29kZWRhdGFfVUNEX2Vhc3RfYXNpYW5fd2lkdGhfaW1wbChzZWxmLCBjaHIpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9VQ0RfZGVjb21wb3NpdGlvbl9fZG9jX18sCisiZGVjb21wb3NpdGlvbigkc2VsZiwgY2hyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyB0aGUgY2hhcmFjdGVyIGRlY29tcG9zaXRpb24gbWFwcGluZyBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBzdHJpbmcuXG4iCisiXG4iCisiQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGluIGNhc2Ugbm8gc3VjaCBtYXBwaW5nIGlzIGRlZmluZWQuIik7CisKKyNkZWZpbmUgVU5JQ09ERURBVEFfVUNEX0RFQ09NUE9TSVRJT05fTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcG9zaXRpb24iLCAoUHlDRnVuY3Rpb24pdW5pY29kZWRhdGFfVUNEX2RlY29tcG9zaXRpb24sIE1FVEhfTywgdW5pY29kZWRhdGFfVUNEX2RlY29tcG9zaXRpb25fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9kZWNvbXBvc2l0aW9uX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBjaHIpOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX2RlY29tcG9zaXRpb24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGNocjsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiQzpkZWNvbXBvc2l0aW9uIiwgJmNocikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfZGVjb21wb3NpdGlvbl9pbXBsKHNlbGYsIGNocik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX1VDRF9ub3JtYWxpemVfX2RvY19fLAorIm5vcm1hbGl6ZSgkc2VsZiwgZm9ybSwgdW5pc3RyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBub3JtYWwgZm9ybSBcJ2Zvcm1cJyBmb3IgdGhlIFVuaWNvZGUgc3RyaW5nIHVuaXN0ci5cbiIKKyJcbiIKKyJWYWxpZCB2YWx1ZXMgZm9yIGZvcm0gYXJlIFwnTkZDXCcsIFwnTkZLQ1wnLCBcJ05GRFwnLCBhbmQgXCdORktEXCcuIik7CisKKyNkZWZpbmUgVU5JQ09ERURBVEFfVUNEX05PUk1BTElaRV9NRVRIT0RERUYgICAgXAorICAgIHsibm9ybWFsaXplIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVkYXRhX1VDRF9ub3JtYWxpemUsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfVUNEX25vcm1hbGl6ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX25vcm1hbGl6ZV9pbXBsKFB5T2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppbnB1dCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0Rfbm9ybWFsaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpmb3JtOworICAgIFB5T2JqZWN0ICppbnB1dDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic08hOm5vcm1hbGl6ZSIsCisgICAgICAgICZmb3JtLCAmUHlVbmljb2RlX1R5cGUsICZpbnB1dCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0Rfbm9ybWFsaXplX2ltcGwoc2VsZiwgZm9ybSwgaW5wdXQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9VQ0RfbmFtZV9fZG9jX18sCisibmFtZSgkc2VsZiwgY2hyLCBkZWZhdWx0PU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBjaGFyYWN0ZXIgY2hyIGFzIGEgc3RyaW5nLlxuIgorIlxuIgorIklmIG5vIG5hbWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmIG5vdCBnaXZlbixcbiIKKyJWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBVTklDT0RFREFUQV9VQ0RfTkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsibmFtZSIsIChQeUNGdW5jdGlvbil1bmljb2RlZGF0YV9VQ0RfbmFtZSwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9VQ0RfbmFtZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX25hbWVfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX25hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBjaHI7CisgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJDfE86bmFtZSIsCisgICAgICAgICZjaHIsICZkZWZhdWx0X3ZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVkYXRhX1VDRF9uYW1lX2ltcGwoc2VsZiwgY2hyLCBkZWZhdWx0X3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIodW5pY29kZWRhdGFfVUNEX2xvb2t1cF9fZG9jX18sCisibG9va3VwKCRzZWxmLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiTG9vayB1cCBjaGFyYWN0ZXIgYnkgbmFtZS5cbiIKKyJcbiIKKyJJZiBhIGNoYXJhY3RlciB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIGZvdW5kLCByZXR1cm4gdGhlXG4iCisiY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIuICBJZiBub3QgZm91bmQsIEtleUVycm9yIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBVTklDT0RFREFUQV9VQ0RfTE9PS1VQX01FVEhPRERFRiAgICBcCisgICAgeyJsb29rdXAiLCAoUHlDRnVuY3Rpb24pdW5pY29kZWRhdGFfVUNEX2xvb2t1cCwgTUVUSF9PLCB1bmljb2RlZGF0YV9VQ0RfbG9va3VwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfbG9va3VwX2ltcGwoUHlPYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfY2xlYW5fdCBuYW1lX2xlbmd0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfbG9va3VwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgUHlfc3NpemVfY2xlYW5fdCBuYW1lX2xlbmd0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAicyM6bG9va3VwIiwgJm5hbWUsICZuYW1lX2xlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfbG9va3VwX2ltcGwoc2VsZiwgbmFtZSwgbmFtZV9sZW5ndGgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NGY4ZGEzM2M2YmM2ZWZjOSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy96bGlibW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oCmluZGV4IGY1NGE4MDUuLmIxYWY3Y2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oCisrKyBiL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oCkBAIC0xNywxNyArMTcsMTYgQEAKICAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgemxpYl9jb21wcmVzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotemxpYl9jb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqYnl0ZXMsIGludCBsZXZlbCk7Cit6bGliX2NvbXByZXNzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpieXRlcywgaW50IGxldmVsKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXpsaWJfY29tcHJlc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit6bGliX2NvbXByZXNzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBieXRlcyA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqfGk6Y29tcHJlc3MiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8aTpjb21wcmVzcyIsCiAgICAgICAgICZieXRlcywgJmxldmVsKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY29tcHJlc3NfaW1wbChtb2R1bGUsICZieXRlcywgbGV2ZWwpOwpAQCAtNDksNyArNDgsNyBAQAogIiAgZGF0YVxuIgogIiAgICBDb21wcmVzc2VkIGRhdGEuXG4iCiAiICB3Yml0c1xuIgotIiAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLlxuIgorIiAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplIGFuZCBjb250YWluZXIgZm9ybWF0LlxuIgogIiAgYnVmc2l6ZVxuIgogIiAgICBUaGUgaW5pdGlhbCBvdXRwdXQgYnVmZmVyIHNpemUuIik7CiAKQEAgLTU3LDE5ICs1NiwxOSBAQAogICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbil6bGliX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgemxpYl9kZWNvbXByZXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2RlY29tcHJlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCB3Yml0cywgdW5zaWduZWQgaW50IGJ1ZnNpemUpOworemxpYl9kZWNvbXByZXNzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgd2JpdHMsCisgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGJ1ZnNpemUpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotemxpYl9kZWNvbXByZXNzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoremxpYl9kZWNvbXByZXNzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OwogICAgIGludCB3Yml0cyA9IE1BWF9XQklUUzsKLSAgICB1bnNpZ25lZCBpbnQgYnVmc2l6ZSA9IERFRl9CVUZfU0laRTsKKyAgICBQeV9zc2l6ZV90IGJ1ZnNpemUgPSBERUZfQlVGX1NJWkU7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgInkqfGlPJjpkZWNvbXByZXNzIiwKLSAgICAgICAgJmRhdGEsICZ3Yml0cywgdWludF9jb252ZXJ0ZXIsICZidWZzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGlPJjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEsICZ3Yml0cywgc3NpemVfdF9jb252ZXJ0ZXIsICZidWZzaXplKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IHpsaWJfZGVjb21wcmVzc19pbXBsKG1vZHVsZSwgJmRhdGEsIHdiaXRzLCBidWZzaXplKTsKIApAQCAtOTAsMTIgKzg5LDE2IEBACiAiUmV0dXJuIGEgY29tcHJlc3NvciBvYmplY3QuXG4iCiAiXG4iCiAiICBsZXZlbFxuIgotIiAgICBUaGUgY29tcHJlc3Npb24gbGV2ZWwgKGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAtOTsgZGVmYXVsdCBpcyA2KS5cbiIKLSIgICAgSGlnaGVyIGNvbXByZXNzaW9uIGxldmVscyBhcmUgc2xvd2VyLCBidXQgcHJvZHVjZSBzbWFsbGVyIHJlc3VsdHMuXG4iCisiICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCAoYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05IG9yIC0xOyBkZWZhdWx0IGlzXG4iCisiICAgIGN1cnJlbnRseSBlcXVpdmFsZW50IHRvIDYpLiAgSGlnaGVyIGNvbXByZXNzaW9uIGxldmVscyBhcmUgc2xvd2VyLFxuIgorIiAgICBidXQgcHJvZHVjZSBzbWFsbGVyIHJlc3VsdHMuXG4iCiAiICBtZXRob2RcbiIKICIgICAgVGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gIElmIGdpdmVuLCB0aGlzIG11c3QgYmUgREVGTEFURUQuXG4iCiAiICB3Yml0c1xuIgotIiAgICBUaGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAocmFuZ2U6IDguLjE1KS5cbiIKKyIgICAgKzkgdG8gKzE1OiBUaGUgYmFzZS10d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZS4gIEluY2x1ZGUgYSB6bGliXG4iCisiICAgICAgICBjb250YWluZXIuXG4iCisiICAgIC05IHRvIC0xNTogR2VuZXJhdGUgYSByYXcgc3RyZWFtLlxuIgorIiAgICArMjUgdG8gKzMxOiBJbmNsdWRlIGEgZ3ppcCBjb250YWluZXIuXG4iCiAiICBtZW1MZXZlbFxuIgogIiAgICBDb250cm9scyB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGZvciBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS5cbiIKICIgICAgVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMSB0byA5LiAgSGlnaGVyIHZhbHVlcyByZXN1bHQgaW4gaGlnaGVyIG1lbW9yeVxuIgpAQCAtMTExLDEwICsxMTQsMTEgQEAKICAgICB7ImNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfY29tcHJlc3NvYmosIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCB6bGliX2NvbXByZXNzb2JqX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2NvbXByZXNzb2JqX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGxldmVsLCBpbnQgbWV0aG9kLCBpbnQgd2JpdHMsIGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LCBQeV9idWZmZXIgKnpkaWN0KTsKK3psaWJfY29tcHJlc3NvYmpfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgbGV2ZWwsIGludCBtZXRob2QsIGludCB3Yml0cywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVtTGV2ZWwsIGludCBzdHJhdGVneSwgUHlfYnVmZmVyICp6ZGljdCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2NvbXByZXNzb2JqKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoremxpYl9jb21wcmVzc29iaihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImxldmVsIiwgIm1ldGhvZCIsICJ3Yml0cyIsICJtZW1MZXZlbCIsICJzdHJhdGVneSIsICJ6ZGljdCIsIE5VTEx9OwpAQCAtMTI1LDggKzEyOSw3IEBACiAgICAgaW50IHN0cmF0ZWd5ID0gWl9ERUZBVUxUX1NUUkFURUdZOwogICAgIFB5X2J1ZmZlciB6ZGljdCA9IHtOVUxMLCBOVUxMfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKLSAgICAgICAgInxpaWlpaXkqOmNvbXByZXNzb2JqIiwgX2tleXdvcmRzLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpaWlpaXkqOmNvbXByZXNzb2JqIiwgX2tleXdvcmRzLAogICAgICAgICAmbGV2ZWwsICZtZXRob2QsICZ3Yml0cywgJm1lbUxldmVsLCAmc3RyYXRlZ3ksICZ6ZGljdCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSB6bGliX2NvbXByZXNzb2JqX2ltcGwobW9kdWxlLCBsZXZlbCwgbWV0aG9kLCB3Yml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCAmemRpY3QpOwpAQCAtMTQ2LDcgKzE0OSw3IEBACiAiUmV0dXJuIGEgZGVjb21wcmVzc29yIG9iamVjdC5cbiIKICJcbiIKICIgIHdiaXRzXG4iCi0iICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUuXG4iCisiICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUgYW5kIGNvbnRhaW5lciBmb3JtYXQuXG4iCiAiICB6ZGljdFxuIgogIiAgICBUaGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LiAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lXG4iCiAiICAgIGRpY3Rpb25hcnkgYXMgdXNlZCBieSB0aGUgY29tcHJlc3NvciB0aGF0IHByb2R1Y2VkIHRoZSBpbnB1dCBkYXRhLiIpOwpAQCAtMTU1LDE4ICsxNTgsMTcgQEAKICAgICB7ImRlY29tcHJlc3NvYmoiLCAoUHlDRnVuY3Rpb24pemxpYl9kZWNvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgemxpYl9kZWNvbXByZXNzb2JqX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2RlY29tcHJlc3NvYmpfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgd2JpdHMsIFB5T2JqZWN0ICp6ZGljdCk7Cit6bGliX2RlY29tcHJlc3NvYmpfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgd2JpdHMsIFB5T2JqZWN0ICp6ZGljdCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2RlY29tcHJlc3NvYmooUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit6bGliX2RlY29tcHJlc3NvYmooUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJ3Yml0cyIsICJ6ZGljdCIsIE5VTEx9OwogICAgIGludCB3Yml0cyA9IE1BWF9XQklUUzsKICAgICBQeU9iamVjdCAqemRpY3QgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAifGlPOmRlY29tcHJlc3NvYmoiLCBfa2V5d29yZHMsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGlPOmRlY29tcHJlc3NvYmoiLCBfa2V5d29yZHMsCiAgICAgICAgICZ3Yml0cywgJnpkaWN0KSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IHpsaWJfZGVjb21wcmVzc29ial9pbXBsKG1vZHVsZSwgd2JpdHMsIHpkaWN0KTsKQEAgLTE4OSwyMCArMTkxLDE4IEBACiAiQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy4iKTsKIAogI2RlZmluZSBaTElCX0NPTVBSRVNTX0NPTVBSRVNTX01FVEhPRERFRiAgICBcCi0gICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbil6bGliX0NvbXByZXNzX2NvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfQ29tcHJlc3NfY29tcHJlc3NfX2RvY19ffSwKKyAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfQ29tcHJlc3NfY29tcHJlc3MsIE1FVEhfTywgemxpYl9Db21wcmVzc19jb21wcmVzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgogemxpYl9Db21wcmVzc19jb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX0NvbXByZXNzX2NvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9Db21wcmVzc19jb21wcmVzcyhjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5Kjpjb21wcmVzcyIsCi0gICAgICAgICZkYXRhKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInkqOmNvbXByZXNzIiwgJmRhdGEpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9Db21wcmVzc19jb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKIApAQCAtMjM1LDE4ICsyMzUsMTggQEAKICAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWF4X2xlbmd0aCk7Cit6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhfbGVuZ3RoKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OwotICAgIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoID0gMDsKKyAgICBQeV9zc2l6ZV90IG1heF9sZW5ndGggPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KnxPJjpkZWNvbXByZXNzIiwKLSAgICAgICAgJmRhdGEsIHVpbnRfY29udmVydGVyLCAmbWF4X2xlbmd0aCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxPJjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEsIHNzaXplX3RfY29udmVydGVyLCAmbWF4X2xlbmd0aCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSB6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKHNlbGYsICZkYXRhLCBtYXhfbGVuZ3RoKTsKIApAQCAtMjgyLDggKzI4Miw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgaW50IG1vZGUgPSBaX0ZJTklTSDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAifGk6Zmx1c2giLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6Zmx1c2giLAogICAgICAgICAmbW9kZSkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSB6bGliX0NvbXByZXNzX2ZsdXNoX2ltcGwoc2VsZiwgbW9kZSk7CkBAIC0zMTQsMTAgKzMxMyw2IEBACiAKICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfWkxJQl9DT1BZKSAqLwogCi0jaWZuZGVmIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKLSAgICAjZGVmaW5lIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKLSNlbmRpZiAvKiAhZGVmaW5lZChaTElCX0NPTVBSRVNTX0NPUFlfTUVUSE9EREVGKSAqLwotCiAjaWYgZGVmaW5lZChIQVZFX1pMSUJfQ09QWSkKIAogUHlEb2NfU1RSVkFSKHpsaWJfRGVjb21wcmVzc19jb3B5X19kb2NfXywKQEAgLTM0MCwxMCArMzM1LDYgQEAKIAogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9aTElCX0NPUFkpICovCiAKLSNpZm5kZWYgWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGCi0gICAgI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKLSNlbmRpZiAvKiAhZGVmaW5lZChaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYpICovCi0KIFB5RG9jX1NUUlZBUih6bGliX0RlY29tcHJlc3NfZmx1c2hfX2RvY19fLAogImZsdXNoKCRzZWxmLCBsZW5ndGg9emxpYi5ERUZfQlVGX1NJWkUsIC8pXG4iCiAiLS1cbiIKQEAgLTM1NywxNyArMzQ4LDE2IEBACiAgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbil6bGliX0RlY29tcHJlc3NfZmx1c2gsIE1FVEhfVkFSQVJHUywgemxpYl9EZWNvbXByZXNzX2ZsdXNoX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX0RlY29tcHJlc3NfZmx1c2hfaW1wbChjb21wb2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKK3psaWJfRGVjb21wcmVzc19mbHVzaF9pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbGVuZ3RoKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHpsaWJfRGVjb21wcmVzc19mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGX0JVRl9TSVpFOworICAgIFB5X3NzaXplX3QgbGVuZ3RoID0gREVGX0JVRl9TSVpFOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ8TyY6Zmx1c2giLAotICAgICAgICB1aW50X2NvbnZlcnRlciwgJmxlbmd0aCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6Zmx1c2giLAorICAgICAgICBzc2l6ZV90X2NvbnZlcnRlciwgJmxlbmd0aCkpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICByZXR1cm5fdmFsdWUgPSB6bGliX0RlY29tcHJlc3NfZmx1c2hfaW1wbChzZWxmLCBsZW5ndGgpOwogCkBAIC0zOTAsMTcgKzM4MCwxNiBAQAogICAgIHsiYWRsZXIzMiIsIChQeUNGdW5jdGlvbil6bGliX2FkbGVyMzIsIE1FVEhfVkFSQVJHUywgemxpYl9hZGxlcjMyX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2FkbGVyMzJfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCB2YWx1ZSk7Cit6bGliX2FkbGVyMzJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCB2YWx1ZSk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2FkbGVyMzIoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit6bGliX2FkbGVyMzIoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CiAgICAgdW5zaWduZWQgaW50IHZhbHVlID0gMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAieSp8STphZGxlcjMyIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfEk6YWRsZXIzMiIsCiAgICAgICAgICZkYXRhLCAmdmFsdWUpKQogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9hZGxlcjMyX2ltcGwobW9kdWxlLCAmZGF0YSwgdmFsdWUpOwpAQCAtNDI4LDE3ICs0MTcsMTYgQEAKICAgICB7ImNyYzMyIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfY3JjMzIsIE1FVEhfVkFSQVJHUywgemxpYl9jcmMzMl9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotemxpYl9jcmMzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IHZhbHVlKTsKK3psaWJfY3JjMzJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCB2YWx1ZSk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2NyYzMyKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoremxpYl9jcmMzMihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKICAgICB1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJ5KnxJOmNyYzMyIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfEk6Y3JjMzIiLAogICAgICAgICAmZGF0YSwgJnZhbHVlKSkKICAgICAgICAgZ290byBleGl0OwogICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY3JjMzJfaW1wbChtb2R1bGUsICZkYXRhLCB2YWx1ZSk7CkBAIC00NTAsNCArNDM4LDggQEAKIAogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9Ci0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmM5NDczNzIxY2E3Yzk2MiBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCisKKyNpZm5kZWYgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgorICAgICNkZWZpbmUgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzcxMWVmMDJkMWQ1Nzc2YyBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NtYXRobW9kdWxlLmMgYi9Nb2R1bGVzL2NtYXRobW9kdWxlLmMKaW5kZXggYjM0MWMzNC4uY2JhNDJhNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbWF0aG1vZHVsZS5jCisrKyBiL01vZHVsZXMvY21hdGhtb2R1bGUuYwpAQCAtOCw2ICs4LDQwIEBACiAgICBmbG9hdC5oLiAgV2UgYXNzdW1lIHRoYXQgRkxUX1JBRElYIGlzIGVpdGhlciAyIG9yIDE2LiAqLwogI2luY2x1ZGUgPGZsb2F0Lmg+CiAKKyNpbmNsdWRlICJjbGluaWMvY21hdGhtb2R1bGUuYy5oIgorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIGNtYXRoCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0zMDhkNjgzOWY0YTQ2MzMzXSovCisKKy8qW3B5dGhvbiBpbnB1dF0KK2NsYXNzIFB5X2NvbXBsZXhfcHJvdGVjdGVkX2NvbnZlcnRlcihQeV9jb21wbGV4X2NvbnZlcnRlcik6CisgICAgZGVmIG1vZGlmeShzZWxmKToKKyAgICAgICAgcmV0dXJuICdlcnJubyA9IDA7IFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCBnb3RvIGV4aXQpOycKKworCitjbGFzcyBQeV9jb21wbGV4X3Byb3RlY3RlZF9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiUHlfY29tcGxleCIKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoIiIiCitQeUZQRV9FTkRfUFJPVEVDVChfcmV0dXJuX3ZhbHVlKTsKK2lmIChlcnJubyA9PSBFRE9NKSB7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOworICAgIGdvdG8gZXhpdDsKK30KK2Vsc2UgaWYgKGVycm5vID09IEVSQU5HRSkgeworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibWF0aCByYW5nZSBlcnJvciIpOworICAgIGdvdG8gZXhpdDsKK30KK2Vsc2UgeworICAgIHJldHVybl92YWx1ZSA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoX3JldHVybl92YWx1ZSk7Cit9CisiIiIuc3RyaXAoKSkKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTM0NWRhYTA3NWIxMDI4ZTddKi8KKwogI2lmIChGTFRfUkFESVggIT0gMiAmJiBGTFRfUkFESVggIT0gMTYpCiAjZXJyb3IgIk1vZHVsZXMvY21hdGhtb2R1bGUuYyBleHBlY3RzIEZMVF9SQURJWCB0byBiZSAyIG9yIDE2IgogI2VuZGlmCkBAIC00OCwxMiArODIsMTIgQEAKICNkZWZpbmUgQ01fU0NBTEVfRE9XTiAoLShDTV9TQ0FMRV9VUCsxKS8yKQogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwotc3RhdGljIFB5X2NvbXBsZXggY19hc2luaChQeV9jb21wbGV4KTsKLXN0YXRpYyBQeV9jb21wbGV4IGNfYXRhbmgoUHlfY29tcGxleCk7Ci1zdGF0aWMgUHlfY29tcGxleCBjX2Nvc2goUHlfY29tcGxleCk7Ci1zdGF0aWMgUHlfY29tcGxleCBjX3NpbmgoUHlfY29tcGxleCk7Ci1zdGF0aWMgUHlfY29tcGxleCBjX3NxcnQoUHlfY29tcGxleCk7Ci1zdGF0aWMgUHlfY29tcGxleCBjX3RhbmgoUHlfY29tcGxleCk7CitzdGF0aWMgUHlfY29tcGxleCBjbWF0aF9hc2luaF9pbXBsKFB5T2JqZWN0ICosIFB5X2NvbXBsZXgpOworc3RhdGljIFB5X2NvbXBsZXggY21hdGhfYXRhbmhfaW1wbChQeU9iamVjdCAqLCBQeV9jb21wbGV4KTsKK3N0YXRpYyBQeV9jb21wbGV4IGNtYXRoX2Nvc2hfaW1wbChQeU9iamVjdCAqLCBQeV9jb21wbGV4KTsKK3N0YXRpYyBQeV9jb21wbGV4IGNtYXRoX3NpbmhfaW1wbChQeU9iamVjdCAqLCBQeV9jb21wbGV4KTsKK3N0YXRpYyBQeV9jb21wbGV4IGNtYXRoX3NxcnRfaW1wbChQeU9iamVjdCAqLCBQeV9jb21wbGV4KTsKK3N0YXRpYyBQeV9jb21wbGV4IGNtYXRoX3RhbmhfaW1wbChQeU9iamVjdCAqLCBQeV9jb21wbGV4KTsKIHN0YXRpYyBQeU9iamVjdCAqIG1hdGhfZXJyb3Iodm9pZCk7CiAKIC8qIENvZGUgdG8gZGVhbCB3aXRoIHNwZWNpYWwgdmFsdWVzIChpbmZpbml0aWVzLCBOYU5zLCBldGMuKS4gKi8KQEAgLTEyMyw4ICsxNTcsMTggQEAKIAogc3RhdGljIFB5X2NvbXBsZXggYWNvc19zcGVjaWFsX3ZhbHVlc1s3XVs3XTsKIAorLypbY2xpbmljIGlucHV0XQorY21hdGguYWNvcyAtPiBQeV9jb21wbGV4X3Byb3RlY3RlZAorCisgICAgejogUHlfY29tcGxleF9wcm90ZWN0ZWQKKyAgICAvCisKK1JldHVybiB0aGUgYXJjIGNvc2luZSBvZiB6LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlfY29tcGxleAotY19hY29zKFB5X2NvbXBsZXggeikKK2NtYXRoX2Fjb3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDBiZDQyODUzZmQ0NjBhZSBpbnB1dD1iZDZjYmQ3OGFlODUxOTI3XSovCiB7CiAgICAgUHlfY29tcGxleCBzMSwgczIsIHI7CiAKQEAgLTE0NSwxMCArMTg5LDEwIEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgczEucmVhbCA9IDEuLXoucmVhbDsKICAgICAgICAgczEuaW1hZyA9IC16LmltYWc7Ci0gICAgICAgIHMxID0gY19zcXJ0KHMxKTsKKyAgICAgICAgczEgPSBjbWF0aF9zcXJ0X2ltcGwobW9kdWxlLCBzMSk7CiAgICAgICAgIHMyLnJlYWwgPSAxLit6LnJlYWw7CiAgICAgICAgIHMyLmltYWcgPSB6LmltYWc7Ci0gICAgICAgIHMyID0gY19zcXJ0KHMyKTsKKyAgICAgICAgczIgPSBjbWF0aF9zcXJ0X2ltcGwobW9kdWxlLCBzMik7CiAgICAgICAgIHIucmVhbCA9IDIuKmF0YW4yKHMxLnJlYWwsIHMyLnJlYWwpOwogICAgICAgICByLmltYWcgPSBtX2FzaW5oKHMyLnJlYWwqczEuaW1hZyAtIHMyLmltYWcqczEucmVhbCk7CiAgICAgfQpAQCAtMTU2LDE2ICsyMDAsMTggQEAKICAgICByZXR1cm4gcjsKIH0KIAotUHlEb2NfU1RSVkFSKGNfYWNvc19kb2MsCi0iYWNvcyh4KVxuIgotIlxuIgotIlJldHVybiB0aGUgYXJjIGNvc2luZSBvZiB4LiIpOwotCiAKIHN0YXRpYyBQeV9jb21wbGV4IGFjb3NoX3NwZWNpYWxfdmFsdWVzWzddWzddOwogCisvKltjbGluaWMgaW5wdXRdCitjbWF0aC5hY29zaCA9IGNtYXRoLmFjb3MKKworUmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lIG9mIHouCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeV9jb21wbGV4Ci1jX2Fjb3NoKFB5X2NvbXBsZXggeikKK2NtYXRoX2Fjb3NoX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNlMjQ1NGQ0ZmNmNDA0Y2EgaW5wdXQ9M2Y2MWJlZTdkNzAzZTUzY10qLwogewogICAgIFB5X2NvbXBsZXggczEsIHMyLCByOwogCkBAIC0xNzgsMTAgKzIyNCwxMCBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIHMxLnJlYWwgPSB6LnJlYWwgLSAxLjsKICAgICAgICAgczEuaW1hZyA9IHouaW1hZzsKLSAgICAgICAgczEgPSBjX3NxcnQoczEpOworICAgICAgICBzMSA9IGNtYXRoX3NxcnRfaW1wbChtb2R1bGUsIHMxKTsKICAgICAgICAgczIucmVhbCA9IHoucmVhbCArIDEuOwogICAgICAgICBzMi5pbWFnID0gei5pbWFnOwotICAgICAgICBzMiA9IGNfc3FydChzMik7CisgICAgICAgIHMyID0gY21hdGhfc3FydF9pbXBsKG1vZHVsZSwgczIpOwogICAgICAgICByLnJlYWwgPSBtX2FzaW5oKHMxLnJlYWwqczIucmVhbCArIHMxLmltYWcqczIuaW1hZyk7CiAgICAgICAgIHIuaW1hZyA9IDIuKmF0YW4yKHMxLmltYWcsIHMyLnJlYWwpOwogICAgIH0KQEAgLTE4OSwzNSArMjM1LDM4IEBACiAgICAgcmV0dXJuIHI7CiB9CiAKLVB5RG9jX1NUUlZBUihjX2Fjb3NoX2RvYywKLSJhY29zaCh4KVxuIgotIlxuIgotIlJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZSBvZiB4LiIpOworLypbY2xpbmljIGlucHV0XQorY21hdGguYXNpbiA9IGNtYXRoLmFjb3MKIAorUmV0dXJuIHRoZSBhcmMgc2luZSBvZiB6LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlfY29tcGxleAotY19hc2luKFB5X2NvbXBsZXggeikKK2NtYXRoX2FzaW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2IyNjRjZDFiMTZiZjRlMSBpbnB1dD1iZTBiZjBjZmRkNTIzOWM1XSovCiB7CiAgICAgLyogYXNpbih6KSA9IC1pIGFzaW5oKGl6KSAqLwogICAgIFB5X2NvbXBsZXggcywgcjsKICAgICBzLnJlYWwgPSAtei5pbWFnOwogICAgIHMuaW1hZyA9IHoucmVhbDsKLSAgICBzID0gY19hc2luaChzKTsKKyAgICBzID0gY21hdGhfYXNpbmhfaW1wbChtb2R1bGUsIHMpOwogICAgIHIucmVhbCA9IHMuaW1hZzsKICAgICByLmltYWcgPSAtcy5yZWFsOwogICAgIHJldHVybiByOwogfQogCi1QeURvY19TVFJWQVIoY19hc2luX2RvYywKLSJhc2luKHgpXG4iCi0iXG4iCi0iUmV0dXJuIHRoZSBhcmMgc2luZSBvZiB4LiIpOwotCiAKIHN0YXRpYyBQeV9jb21wbGV4IGFzaW5oX3NwZWNpYWxfdmFsdWVzWzddWzddOwogCisvKltjbGluaWMgaW5wdXRdCitjbWF0aC5hc2luaCA9IGNtYXRoLmFjb3MKKworUmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBvZiB6LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlfY29tcGxleAotY19hc2luaChQeV9jb21wbGV4IHopCitjbWF0aF9hc2luaF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03MzNkODEwNzg0MWE3NTk5IGlucHV0PTVjMDk0NDhmY2ZjODlhNzldKi8KIHsKICAgICBQeV9jb21wbGV4IHMxLCBzMiwgcjsKIApAQCAtMjM1LDEwICsyODQsMTAgQEAKICAgICB9IGVsc2UgewogICAgICAgICBzMS5yZWFsID0gMS4rei5pbWFnOwogICAgICAgICBzMS5pbWFnID0gLXoucmVhbDsKLSAgICAgICAgczEgPSBjX3NxcnQoczEpOworICAgICAgICBzMSA9IGNtYXRoX3NxcnRfaW1wbChtb2R1bGUsIHMxKTsKICAgICAgICAgczIucmVhbCA9IDEuLXouaW1hZzsKICAgICAgICAgczIuaW1hZyA9IHoucmVhbDsKLSAgICAgICAgczIgPSBjX3NxcnQoczIpOworICAgICAgICBzMiA9IGNtYXRoX3NxcnRfaW1wbChtb2R1bGUsIHMyKTsKICAgICAgICAgci5yZWFsID0gbV9hc2luaChzMS5yZWFsKnMyLmltYWctczIucmVhbCpzMS5pbWFnKTsKICAgICAgICAgci5pbWFnID0gYXRhbjIoei5pbWFnLCBzMS5yZWFsKnMyLnJlYWwtczEuaW1hZypzMi5pbWFnKTsKICAgICB9CkBAIC0yNDYsMjAgKzI5NSwyMiBAQAogICAgIHJldHVybiByOwogfQogCi1QeURvY19TVFJWQVIoY19hc2luaF9kb2MsCi0iYXNpbmgoeClcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIGludmVyc2UgaHlwZXJib2xpYyBzaW5lIG9mIHguIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NtYXRoLmF0YW4gPSBjbWF0aC5hY29zCisKK1JldHVybiB0aGUgYXJjIHRhbmdlbnQgb2Ygei4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5X2NvbXBsZXgKLWNfYXRhbihQeV9jb21wbGV4IHopCitjbWF0aF9hdGFuX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI2YmZjNDk3MDU4YWNiYTQgaW5wdXQ9M2IyMWZmN2Q1ZWFjNjMyYV0qLwogewogICAgIC8qIGF0YW4oeikgPSAtaSBhdGFuaChpeikgKi8KICAgICBQeV9jb21wbGV4IHMsIHI7CiAgICAgcy5yZWFsID0gLXouaW1hZzsKICAgICBzLmltYWcgPSB6LnJlYWw7Ci0gICAgcyA9IGNfYXRhbmgocyk7CisgICAgcyA9IGNtYXRoX2F0YW5oX2ltcGwobW9kdWxlLCBzKTsKICAgICByLnJlYWwgPSBzLmltYWc7CiAgICAgci5pbWFnID0gLXMucmVhbDsKICAgICByZXR1cm4gcjsKQEAgLTI5NSwxNiArMzQ2LDE4IEBACiAgICAgcmV0dXJuIGF0YW4yKHouaW1hZywgei5yZWFsKTsKIH0KIAotUHlEb2NfU1RSVkFSKGNfYXRhbl9kb2MsCi0iYXRhbih4KVxuIgotIlxuIgotIlJldHVybiB0aGUgYXJjIHRhbmdlbnQgb2YgeC4iKTsKLQogCiBzdGF0aWMgUHlfY29tcGxleCBhdGFuaF9zcGVjaWFsX3ZhbHVlc1s3XVs3XTsKIAorLypbY2xpbmljIGlucHV0XQorY21hdGguYXRhbmggPSBjbWF0aC5hY29zCisKK1JldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2Ygei4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5X2NvbXBsZXgKLWNfYXRhbmgoUHlfY29tcGxleCB6KQorY21hdGhfYXRhbmhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTgzMzU1ZjkzYTk4OWM5ZSBpbnB1dD0yYjNmZGI4MmZiMzQ0ODdiXSovCiB7CiAgICAgUHlfY29tcGxleCByOwogICAgIGRvdWJsZSBheSwgaDsKQEAgLTMxMyw3ICszNjYsNyBAQAogCiAgICAgLyogUmVkdWNlIHRvIGNhc2Ugd2hlcmUgei5yZWFsID49IDAuLCB1c2luZyBhdGFuaCh6KSA9IC1hdGFuaCgteikuICovCiAgICAgaWYgKHoucmVhbCA8IDAuKSB7Ci0gICAgICAgIHJldHVybiBjX25lZyhjX2F0YW5oKGNfbmVnKHopKSk7CisgICAgICAgIHJldHVybiBfUHlfY19uZWcoY21hdGhfYXRhbmhfaW1wbChtb2R1bGUsIF9QeV9jX25lZyh6KSkpOwogICAgIH0KIAogICAgIGF5ID0gZmFicyh6LmltYWcpOwpAQCAtMzUwLDM0ICs0MDMsMzggQEAKICAgICByZXR1cm4gcjsKIH0KIAotUHlEb2NfU1RSVkFSKGNfYXRhbmhfZG9jLAotImF0YW5oKHgpXG4iCi0iXG4iCi0iUmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiB4LiIpOwogCisvKltjbGluaWMgaW5wdXRdCitjbWF0aC5jb3MgPSBjbWF0aC5hY29zCisKK1JldHVybiB0aGUgY29zaW5lIG9mIHouCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeV9jb21wbGV4Ci1jX2NvcyhQeV9jb21wbGV4IHopCitjbWF0aF9jb3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmQ2NDkxOGQ1YjMxODZkYiBpbnB1dD02MDIyZTM5Yjc3MTI3YWM3XSovCiB7CiAgICAgLyogY29zKHopID0gY29zaChpeikgKi8KICAgICBQeV9jb21wbGV4IHI7CiAgICAgci5yZWFsID0gLXouaW1hZzsKICAgICByLmltYWcgPSB6LnJlYWw7Ci0gICAgciA9IGNfY29zaChyKTsKKyAgICByID0gY21hdGhfY29zaF9pbXBsKG1vZHVsZSwgcik7CiAgICAgcmV0dXJuIHI7CiB9CiAKLVB5RG9jX1NUUlZBUihjX2Nvc19kb2MsCi0iY29zKHgpXG4iCi0iXG4iCi0iUmV0dXJuIHRoZSBjb3NpbmUgb2YgeC4iKTsKLQogCiAvKiBjb3NoKGluZmluaXR5ICsgaSp5KSBuZWVkcyB0byBiZSBkZWFsdCB3aXRoIHNwZWNpYWxseSAqLwogc3RhdGljIFB5X2NvbXBsZXggY29zaF9zcGVjaWFsX3ZhbHVlc1s3XVs3XTsKIAorLypbY2xpbmljIGlucHV0XQorY21hdGguY29zaCA9IGNtYXRoLmFjb3MKKworUmV0dXJuIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB6LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlfY29tcGxleAotY19jb3NoKFB5X2NvbXBsZXggeikKK2NtYXRoX2Nvc2hfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmU5NjkwNDdkYTYwMWJkYiBpbnB1dD1kNmI2NjMzOWU5Y2MzMzJiXSovCiB7CiAgICAgUHlfY29tcGxleCByOwogICAgIGRvdWJsZSB4X21pbnVzX29uZTsKQEAgLTQyNiwxOCArNDgzLDIwIEBACiAgICAgcmV0dXJuIHI7CiB9CiAKLVB5RG9jX1NUUlZBUihjX2Nvc2hfZG9jLAotImNvc2goeClcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHguIik7Ci0KIAogLyogZXhwKGluZmluaXR5ICsgaSp5KSBhbmQgZXhwKC1pbmZpbml0eSArIGkqeSkgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBmb3IKICAgIGZpbml0ZSB5ICovCiBzdGF0aWMgUHlfY29tcGxleCBleHBfc3BlY2lhbF92YWx1ZXNbN11bN107CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NtYXRoLmV4cCA9IGNtYXRoLmFjb3MKKworUmV0dXJuIHRoZSBleHBvbmVudGlhbCB2YWx1ZSBlKip6LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlfY29tcGxleAotY19leHAoUHlfY29tcGxleCB6KQorY21hdGhfZXhwX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWVkY2VjNjFmYjlkZmRhNmMgaW5wdXQ9OGI5ZTZjZjhhOTIxNzRjM10qLwogewogICAgIFB5X2NvbXBsZXggcjsKICAgICBkb3VibGUgbDsKQEAgLTQ4NiwxMiArNTQ1LDYgQEAKICAgICByZXR1cm4gcjsKIH0KIAotUHlEb2NfU1RSVkFSKGNfZXhwX2RvYywKLSJleHAoeClcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIGV4cG9uZW50aWFsIHZhbHVlIGUqKnguIik7Ci0KLQogc3RhdGljIFB5X2NvbXBsZXggbG9nX3NwZWNpYWxfdmFsdWVzWzddWzddOwogCiBzdGF0aWMgUHlfY29tcGxleApAQCAtNTY0LDggKzYxNywxNSBAQAogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NtYXRoLmxvZzEwID0gY21hdGguYWNvcworCitSZXR1cm4gdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIHouCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeV9jb21wbGV4Ci1jX2xvZzEwKFB5X2NvbXBsZXggeikKK2NtYXRoX2xvZzEwX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTI5MjI3NzlhN2MzOGNiZTEgaW5wdXQ9Y2ZmNTY0NGY3M2MxNTE5Y10qLwogewogICAgIFB5X2NvbXBsZXggcjsKICAgICBpbnQgZXJybm9fc2F2ZTsKQEAgLTU3OCwzNiArNjM4LDQwIEBACiAgICAgcmV0dXJuIHI7CiB9CiAKLVB5RG9jX1NUUlZBUihjX2xvZzEwX2RvYywKLSJsb2cxMCh4KVxuIgotIlxuIgotIlJldHVybiB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgeC4iKTsKIAorLypbY2xpbmljIGlucHV0XQorY21hdGguc2luID0gY21hdGguYWNvcworCitSZXR1cm4gdGhlIHNpbmUgb2Ygei4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5X2NvbXBsZXgKLWNfc2luKFB5X2NvbXBsZXggeikKK2NtYXRoX3Npbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ODAzNzBkMmZmMGJiNWFhIGlucHV0PTJkMzUxOTg0MmE4YjRiODVdKi8KIHsKICAgICAvKiBzaW4oeikgPSAtaSBzaW4oaXopICovCiAgICAgUHlfY29tcGxleCBzLCByOwogICAgIHMucmVhbCA9IC16LmltYWc7CiAgICAgcy5pbWFnID0gei5yZWFsOwotICAgIHMgPSBjX3Npbmgocyk7CisgICAgcyA9IGNtYXRoX3NpbmhfaW1wbChtb2R1bGUsIHMpOwogICAgIHIucmVhbCA9IHMuaW1hZzsKICAgICByLmltYWcgPSAtcy5yZWFsOwogICAgIHJldHVybiByOwogfQogCi1QeURvY19TVFJWQVIoY19zaW5fZG9jLAotInNpbih4KVxuIgotIlxuIgotIlJldHVybiB0aGUgc2luZSBvZiB4LiIpOwotCiAKIC8qIHNpbmgoaW5maW5pdHkgKyBpKnkpIG5lZWRzIHRvIGJlIGRlYWx0IHdpdGggc3BlY2lhbGx5ICovCiBzdGF0aWMgUHlfY29tcGxleCBzaW5oX3NwZWNpYWxfdmFsdWVzWzddWzddOwogCisvKltjbGluaWMgaW5wdXRdCitjbWF0aC5zaW5oID0gY21hdGguYWNvcworCitSZXR1cm4gdGhlIGh5cGVyYm9saWMgc2luZSBvZiB6LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlfY29tcGxleAotY19zaW5oKFB5X2NvbXBsZXggeikKK2NtYXRoX3NpbmhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzhiMGE2Y2NlMjZmMzUzNiBpbnB1dD1kMmQzZmM4YzFkZGZkMmRkXSovCiB7CiAgICAgUHlfY29tcGxleCByOwogICAgIGRvdWJsZSB4X21pbnVzX29uZTsKQEAgLTY1NSwxNiArNzE5LDE4IEBACiAgICAgcmV0dXJuIHI7CiB9CiAKLVB5RG9jX1NUUlZBUihjX3NpbmhfZG9jLAotInNpbmgoeClcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIGh5cGVyYm9saWMgc2luZSBvZiB4LiIpOwotCiAKIHN0YXRpYyBQeV9jb21wbGV4IHNxcnRfc3BlY2lhbF92YWx1ZXNbN11bN107CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NtYXRoLnNxcnQgPSBjbWF0aC5hY29zCisKK1JldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2Ygei4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5X2NvbXBsZXgKLWNfc3FydChQeV9jb21wbGV4IHopCitjbWF0aF9zcXJ0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI2NTA3YjMwMjljMzM5ZmMgaW5wdXQ9NzA4OGIxNjZmYzlhNThjN10qLwogewogICAgIC8qCiAgICAgICAgTWV0aG9kOiB1c2Ugc3ltbWV0cmllcyB0byByZWR1Y2UgdG8gdGhlIGNhc2Ugd2hlbiB4ID0gei5yZWFsIGFuZCB5CkBAIC03MzAsMzYgKzc5Niw0MCBAQAogICAgIHJldHVybiByOwogfQogCi1QeURvY19TVFJWQVIoY19zcXJ0X2RvYywKLSJzcXJ0KHgpXG4iCi0iXG4iCi0iUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB4LiIpOwogCisvKltjbGluaWMgaW5wdXRdCitjbWF0aC50YW4gPSBjbWF0aC5hY29zCisKK1JldHVybiB0aGUgdGFuZ2VudCBvZiB6LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlfY29tcGxleAotY190YW4oUHlfY29tcGxleCB6KQorY21hdGhfdGFuX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdjNWYxMzE1OGE3MmViMTMgaW5wdXQ9ZmMxNjdlNTI4NzY3ODg4ZV0qLwogewogICAgIC8qIHRhbih6KSA9IC1pIHRhbmgoaXopICovCiAgICAgUHlfY29tcGxleCBzLCByOwogICAgIHMucmVhbCA9IC16LmltYWc7CiAgICAgcy5pbWFnID0gei5yZWFsOwotICAgIHMgPSBjX3Rhbmgocyk7CisgICAgcyA9IGNtYXRoX3RhbmhfaW1wbChtb2R1bGUsIHMpOwogICAgIHIucmVhbCA9IHMuaW1hZzsKICAgICByLmltYWcgPSAtcy5yZWFsOwogICAgIHJldHVybiByOwogfQogCi1QeURvY19TVFJWQVIoY190YW5fZG9jLAotInRhbih4KVxuIgotIlxuIgotIlJldHVybiB0aGUgdGFuZ2VudCBvZiB4LiIpOwotCiAKIC8qIHRhbmgoaW5maW5pdHkgKyBpKnkpIG5lZWRzIHRvIGJlIGRlYWx0IHdpdGggc3BlY2lhbGx5ICovCiBzdGF0aWMgUHlfY29tcGxleCB0YW5oX3NwZWNpYWxfdmFsdWVzWzddWzddOwogCisvKltjbGluaWMgaW5wdXRdCitjbWF0aC50YW5oID0gY21hdGguYWNvcworCitSZXR1cm4gdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiB6LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlfY29tcGxleAotY190YW5oKFB5X2NvbXBsZXggeikKK2NtYXRoX3RhbmhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzZkNTQ3ZWY3YWNhMTE2YyBpbnB1dD0yMmY2N2Y5ZGM2ZDI5Njg1XSovCiB7CiAgICAgLyogRm9ybXVsYToKIApAQCAtODIyLDI3ICs4OTIsMzUgQEAKICAgICByZXR1cm4gcjsKIH0KIAotUHlEb2NfU1RSVkFSKGNfdGFuaF9kb2MsCi0idGFuaCh4KVxuIgotIlxuIgotIlJldHVybiB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIHguIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NtYXRoLmxvZworCisgICAgeDogUHlfY29tcGxleAorICAgIHlfb2JqOiBvYmplY3QgPSBOVUxMCisgICAgLworCitUaGUgbG9nYXJpdGhtIG9mIHogdG8gdGhlIGdpdmVuIGJhc2UuCisKK0lmIHRoZSBiYXNlIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIChiYXNlIGUpIG9mIHouCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jbWF0aF9sb2coUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorY21hdGhfbG9nX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB4LCBQeU9iamVjdCAqeV9vYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NGVmZmRiN2QyNThlMGQ5NCBpbnB1dD1lZTBlODIzYTdjNmU2OGVhXSovCiB7Ci0gICAgUHlfY29tcGxleCB4OwogICAgIFB5X2NvbXBsZXggeTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiRHxEIiwgJngsICZ5KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBlcnJubyA9IDA7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleCBmdW5jdGlvbiIsIHJldHVybiAwKQogICAgIHggPSBjX2xvZyh4KTsKLSAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSA9PSAyKSB7CisgICAgaWYgKHlfb2JqICE9IE5VTEwpIHsKKyAgICAgICAgeSA9IFB5Q29tcGxleF9Bc0NDb21wbGV4KHlfb2JqKTsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIHkgPSBjX2xvZyh5KTsKLSAgICAgICAgeCA9IGNfcXVvdCh4LCB5KTsKKyAgICAgICAgeCA9IF9QeV9jX3F1b3QoeCwgeSk7CiAgICAgfQogICAgIFB5RlBFX0VORF9QUk9URUNUKHgpCiAgICAgaWYgKGVycm5vICE9IDApCkBAIC04NTAsMTAgKzkyOCw2IEBACiAgICAgcmV0dXJuIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoeCk7CiB9CiAKLVB5RG9jX1NUUlZBUihjbWF0aF9sb2dfZG9jLAotImxvZyh4WywgYmFzZV0pIC0+IHRoZSBsb2dhcml0aG0gb2YgeCB0byB0aGUgZ2l2ZW4gYmFzZS5cblwKLUlmIHRoZSBiYXNlIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIChiYXNlIGUpIG9mIHguIik7Ci0KIAogLyogQW5kIG5vdyB0aGUgZ2x1ZSB0byBtYWtlIHRoZW0gYXZhaWxhYmxlIGZyb20gUHl0aG9uOiAqLwogCkBAIC04NjksNTcgKzk0MywyMiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotbWF0aF8xKFB5T2JqZWN0ICphcmdzLCBQeV9jb21wbGV4ICgqZnVuYykoUHlfY29tcGxleCkpCi17Ci0gICAgUHlfY29tcGxleCB4LHIgOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiRCIsICZ4KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZXJybm8gPSAwOwotICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXggZnVuY3Rpb24iLCByZXR1cm4gMCk7Ci0gICAgciA9ICgqZnVuYykoeCk7Ci0gICAgUHlGUEVfRU5EX1BST1RFQ1Qocik7Ci0gICAgaWYgKGVycm5vID09IEVET00pIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibWF0aCByYW5nZSBlcnJvciIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KHIpOwotICAgIH0KLX0KIAotI2RlZmluZSBGVU5DMShzdHVibmFtZSwgZnVuYykgXAotICAgIHN0YXRpYyBQeU9iamVjdCAqIHN0dWJuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgeyBcCi0gICAgICAgIHJldHVybiBtYXRoXzEoYXJncywgZnVuYyk7IFwKLSAgICB9CisvKltjbGluaWMgaW5wdXRdCitjbWF0aC5waGFzZQogCi1GVU5DMShjbWF0aF9hY29zLCBjX2Fjb3MpCi1GVU5DMShjbWF0aF9hY29zaCwgY19hY29zaCkKLUZVTkMxKGNtYXRoX2FzaW4sIGNfYXNpbikKLUZVTkMxKGNtYXRoX2FzaW5oLCBjX2FzaW5oKQotRlVOQzEoY21hdGhfYXRhbiwgY19hdGFuKQotRlVOQzEoY21hdGhfYXRhbmgsIGNfYXRhbmgpCi1GVU5DMShjbWF0aF9jb3MsIGNfY29zKQotRlVOQzEoY21hdGhfY29zaCwgY19jb3NoKQotRlVOQzEoY21hdGhfZXhwLCBjX2V4cCkKLUZVTkMxKGNtYXRoX2xvZzEwLCBjX2xvZzEwKQotRlVOQzEoY21hdGhfc2luLCBjX3NpbikKLUZVTkMxKGNtYXRoX3NpbmgsIGNfc2luaCkKLUZVTkMxKGNtYXRoX3NxcnQsIGNfc3FydCkKLUZVTkMxKGNtYXRoX3RhbiwgY190YW4pCi1GVU5DMShjbWF0aF90YW5oLCBjX3RhbmgpCisgICAgejogUHlfY29tcGxleAorICAgIC8KKworUmV0dXJuIGFyZ3VtZW50LCBhbHNvIGtub3duIGFzIHRoZSBwaGFzZSBhbmdsZSwgb2YgYSBjb21wbGV4LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotY21hdGhfcGhhc2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorY21hdGhfcGhhc2VfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9jb21wbGV4IHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTA3MjUwODZhN2JmZDI1MyBpbnB1dD01Y2Y3NTIyOGJhOTRiNjlkXSovCiB7Ci0gICAgUHlfY29tcGxleCB6OwogICAgIGRvdWJsZSBwaGk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJEOnBoYXNlIiwgJnopKQotICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGVycm5vID0gMDsKICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJhcmcgZnVuY3Rpb24iLCByZXR1cm4gMCkKICAgICBwaGkgPSBjX2F0YW4yKHopOwpAQCAtOTMwLDIxICs5NjksMjcgQEAKICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShwaGkpOwogfQogCi1QeURvY19TVFJWQVIoY21hdGhfcGhhc2VfZG9jLAotInBoYXNlKHopIC0+IGZsb2F0XG5cblwKLVJldHVybiBhcmd1bWVudCwgYWxzbyBrbm93biBhcyB0aGUgcGhhc2UgYW5nbGUsIG9mIGEgY29tcGxleC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2NtYXRoLnBvbGFyCisKKyAgICB6OiBQeV9jb21wbGV4CisgICAgLworCitDb252ZXJ0IGEgY29tcGxleCBmcm9tIHJlY3Rhbmd1bGFyIGNvb3JkaW5hdGVzIHRvIHBvbGFyIGNvb3JkaW5hdGVzLgorCityIGlzIHRoZSBkaXN0YW5jZSBmcm9tIDAgYW5kIHBoaSB0aGUgcGhhc2UgYW5nbGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jbWF0aF9wb2xhcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitjbWF0aF9wb2xhcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggeikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMGE4MTQ3YzQxZGJiNjU0IGlucHV0PTI2YzM1MzU3NGZkMWE4NjFdKi8KIHsKLSAgICBQeV9jb21wbGV4IHo7CiAgICAgZG91YmxlIHIsIHBoaTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkQ6cG9sYXIiLCAmeikpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgZXJybm8gPSAwOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoInBvbGFyIGZ1bmN0aW9uIiwgcmV0dXJuIDApCiAgICAgcGhpID0gY19hdGFuMih6KTsgLyogc2hvdWxkIG5vdCBjYXVzZSBhbnkgZXhjZXB0aW9uICovCi0gICAgciA9IGNfYWJzKHopOyAvKiBzZXRzIGVycm5vIHRvIEVSQU5HRSBvbiBvdmVyZmxvdyAqLworICAgIHIgPSBfUHlfY19hYnMoeik7IC8qIHNldHMgZXJybm8gdG8gRVJBTkdFIG9uIG92ZXJmbG93ICovCiAgICAgUHlGUEVfRU5EX1BST1RFQ1QocikKICAgICBpZiAoZXJybm8gIT0gMCkKICAgICAgICAgcmV0dXJuIG1hdGhfZXJyb3IoKTsKQEAgLTk1MiwxMSArOTk3LDYgQEAKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImRkIiwgciwgcGhpKTsKIH0KIAotUHlEb2NfU1RSVkFSKGNtYXRoX3BvbGFyX2RvYywKLSJwb2xhcih6KSAtPiByOiBmbG9hdCwgcGhpOiBmbG9hdFxuXG5cCi1Db252ZXJ0IGEgY29tcGxleCBmcm9tIHJlY3Rhbmd1bGFyIGNvb3JkaW5hdGVzIHRvIHBvbGFyIGNvb3JkaW5hdGVzLiByIGlzXG5cCi10aGUgZGlzdGFuY2UgZnJvbSAwIGFuZCBwaGkgdGhlIHBoYXNlIGFuZ2xlLiIpOwotCiAvKgogICByZWN0KCkgaXNuJ3QgY292ZXJlZCBieSB0aGUgQzk5IHN0YW5kYXJkLCBidXQgaXQncyBub3QgdG9vIGhhcmQgdG8KICAgZmlndXJlIG91dCAnc3Bpcml0IG9mIEM5OScgcnVsZXMgZm9yIHNwZWNpYWwgdmFsdWUgaGFuZGluZzoKQEAgLTk3MCwxMyArMTAxMCwyMSBAQAogCiBzdGF0aWMgUHlfY29tcGxleCByZWN0X3NwZWNpYWxfdmFsdWVzWzddWzddOwogCisvKltjbGluaWMgaW5wdXRdCitjbWF0aC5yZWN0CisKKyAgICByOiBkb3VibGUKKyAgICBwaGk6IGRvdWJsZQorICAgIC8KKworQ29udmVydCBmcm9tIHBvbGFyIGNvb3JkaW5hdGVzIHRvIHJlY3Rhbmd1bGFyIGNvb3JkaW5hdGVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotY21hdGhfcmVjdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitjbWF0aF9yZWN0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgZG91YmxlIHIsIGRvdWJsZSBwaGkpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Mzg1YTA2OTA5MjVkZjJkNSBpbnB1dD0yNGM1NjQ2ZDE0N2VmZDY5XSovCiB7CiAgICAgUHlfY29tcGxleCB6OwotICAgIGRvdWJsZSByLCBwaGk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJkZDpyZWN0IiwgJnIsICZwaGkpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBlcnJubyA9IDA7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgicmVjdCBmdW5jdGlvbiIsIHJldHVybiAwKQogCkBAIC0xMDI3LDc5ICsxMDc1LDE0MyBAQAogICAgICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleCh6KTsKIH0KIAotUHlEb2NfU1RSVkFSKGNtYXRoX3JlY3RfZG9jLAotInJlY3QociwgcGhpKSAtPiB6OiBjb21wbGV4XG5cblwKLUNvbnZlcnQgZnJvbSBwb2xhciBjb29yZGluYXRlcyB0byByZWN0YW5ndWxhciBjb29yZGluYXRlcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2NtYXRoLmlzZmluaXRlID0gY21hdGgucG9sYXIKKworUmV0dXJuIFRydWUgaWYgYm90aCB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIHogYXJlIGZpbml0ZSwgZWxzZSBGYWxzZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWNtYXRoX2lzZmluaXRlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2NtYXRoX2lzZmluaXRlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWFjNzY2MTFlMmM3NzRhMzYgaW5wdXQ9ODQ4ZTdlZTcwMTg5NTgxNV0qLwogewotICAgIFB5X2NvbXBsZXggejsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkQ6aXNmaW5pdGUiLCAmeikpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoUHlfSVNfRklOSVRFKHoucmVhbCkgJiYgUHlfSVNfRklOSVRFKHouaW1hZykpOwogfQogCi1QeURvY19TVFJWQVIoY21hdGhfaXNmaW5pdGVfZG9jLAotImlzZmluaXRlKHopIC0+IGJvb2xcblwKLVJldHVybiBUcnVlIGlmIGJvdGggdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiB6IGFyZSBmaW5pdGUsIGVsc2UgRmFsc2UuIik7CisvKltjbGluaWMgaW5wdXRdCitjbWF0aC5pc25hbiA9IGNtYXRoLnBvbGFyCisKK0NoZWNrcyBpZiB0aGUgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBvZiB6IG5vdCBhIG51bWJlciAoTmFOKS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWNtYXRoX2lzbmFuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2NtYXRoX2lzbmFuX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWU3YWJmNmUwYjI4YmVhYjcgaW5wdXQ9NzE3OTlmNWQyODRjOWJhZl0qLwogewotICAgIFB5X2NvbXBsZXggejsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkQ6aXNuYW4iLCAmeikpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoUHlfSVNfTkFOKHoucmVhbCkgfHwgUHlfSVNfTkFOKHouaW1hZykpOwogfQogCi1QeURvY19TVFJWQVIoY21hdGhfaXNuYW5fZG9jLAotImlzbmFuKHopIC0+IGJvb2xcblwKLUNoZWNrcyBpZiB0aGUgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBvZiB6IG5vdCBhIG51bWJlciAoTmFOKSIpOworLypbY2xpbmljIGlucHV0XQorY21hdGguaXNpbmYgPSBjbWF0aC5wb2xhcgorCitDaGVja3MgaWYgdGhlIHJlYWwgb3IgaW1hZ2luYXJ5IHBhcnQgb2YgeiBpcyBpbmZpbml0ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWNtYXRoX2lzaW5mKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2NtYXRoX2lzaW5mX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfY29tcGxleCB6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUwMmE3NWE3OWM3NzM0NjkgaW5wdXQ9MzYzZGYxNTVjNzE4MTMyOV0qLwogewotICAgIFB5X2NvbXBsZXggejsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkQ6aXNpbmYiLCAmeikpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoUHlfSVNfSU5GSU5JVFkoei5yZWFsKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfSVNfSU5GSU5JVFkoei5pbWFnKSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjbWF0aF9pc2luZl9kb2MsCi0iaXNpbmYoeikgLT4gYm9vbFxuXAotQ2hlY2tzIGlmIHRoZSByZWFsIG9yIGltYWdpbmFyeSBwYXJ0IG9mIHogaXMgaW5maW5pdGUuIik7CisvKltjbGluaWMgaW5wdXRdCitjbWF0aC5pc2Nsb3NlIC0+IGJvb2wKIAorICAgIGE6IFB5X2NvbXBsZXgKKyAgICBiOiBQeV9jb21wbGV4CisgICAgKgorICAgIHJlbF90b2w6IGRvdWJsZSA9IDFlLTA5CisgICAgICAgIG1heGltdW0gZGlmZmVyZW5jZSBmb3IgYmVpbmcgY29uc2lkZXJlZCAiY2xvc2UiLCByZWxhdGl2ZSB0byB0aGUKKyAgICAgICAgbWFnbml0dWRlIG9mIHRoZSBpbnB1dCB2YWx1ZXMKKyAgICBhYnNfdG9sOiBkb3VibGUgPSAwLjAKKyAgICAgICAgbWF4aW11bSBkaWZmZXJlbmNlIGZvciBiZWluZyBjb25zaWRlcmVkICJjbG9zZSIsIHJlZ2FyZGxlc3Mgb2YgdGhlCisgICAgICAgIG1hZ25pdHVkZSBvZiB0aGUgaW5wdXQgdmFsdWVzCisKK0RldGVybWluZSB3aGV0aGVyIHR3byBjb21wbGV4IG51bWJlcnMgYXJlIGNsb3NlIGluIHZhbHVlLgorCitSZXR1cm4gVHJ1ZSBpZiBhIGlzIGNsb3NlIGluIHZhbHVlIHRvIGIsIGFuZCBGYWxzZSBvdGhlcndpc2UuCisKK0ZvciB0aGUgdmFsdWVzIHRvIGJlIGNvbnNpZGVyZWQgY2xvc2UsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBtdXN0IGJlCitzbWFsbGVyIHRoYW4gYXQgbGVhc3Qgb25lIG9mIHRoZSB0b2xlcmFuY2VzLgorCistaW5mLCBpbmYgYW5kIE5hTiBiZWhhdmUgc2ltaWxhcmx5IHRvIHRoZSBJRUVFIDc1NCBTdGFuZGFyZC4gVGhhdCBpcywgTmFOIGlzCitub3QgY2xvc2UgdG8gYW55dGhpbmcsIGV2ZW4gaXRzZWxmLiBpbmYgYW5kIC1pbmYgYXJlIG9ubHkgY2xvc2UgdG8gdGhlbXNlbHZlcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorY21hdGhfaXNjbG9zZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2NvbXBsZXggYSwgUHlfY29tcGxleCBiLAorICAgICAgICAgICAgICAgICAgIGRvdWJsZSByZWxfdG9sLCBkb3VibGUgYWJzX3RvbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04YTI0ODZjYzZlMDAxNGQxIGlucHV0PWRmOTYzNmQ3ZGUxZDRhYzNdKi8KK3sKKyAgICBkb3VibGUgZGlmZjsKKworICAgIC8qIHNhbml0eSBjaGVjayBvbiB0aGUgaW5wdXRzICovCisgICAgaWYgKHJlbF90b2wgPCAwLjAgfHwgYWJzX3RvbCA8IDAuMCApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidG9sZXJhbmNlcyBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCAoYS5yZWFsID09IGIucmVhbCkgJiYgKGEuaW1hZyA9PSBiLmltYWcpICkgeworICAgICAgICAvKiBzaG9ydCBjaXJjdWl0IGV4YWN0IGVxdWFsaXR5IC0tIG5lZWRlZCB0byBjYXRjaCB0d28gaW5maW5pdGllcyBvZgorICAgICAgICAgICB0aGUgc2FtZSBzaWduLiBBbmQgcGVyaGFwcyBzcGVlZHMgdGhpbmdzIHVwIGEgYml0IHNvbWV0aW1lcy4KKyAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogVGhpcyBjYXRjaGVzIHRoZSBjYXNlIG9mIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24sIG9yCisgICAgICAgb25lIGluZmluaXR5IGFuZCBvbmUgZmluaXRlIG51bWJlci4gVHdvIGluZmluaXRpZXMgb2Ygb3Bwb3NpdGUKKyAgICAgICBzaWduIHdvdWxkIG90aGVyd2lzZSBoYXZlIGFuIGluZmluaXRlIHJlbGF0aXZlIHRvbGVyYW5jZS4KKyAgICAgICBUd28gaW5maW5pdGllcyBvZiB0aGUgc2FtZSBzaWduIGFyZSBjYXVnaHQgYnkgdGhlIGVxdWFsaXR5IGNoZWNrCisgICAgICAgYWJvdmUuCisgICAgKi8KKworICAgIGlmIChQeV9JU19JTkZJTklUWShhLnJlYWwpIHx8IFB5X0lTX0lORklOSVRZKGEuaW1hZykgfHwKKyAgICAgICAgUHlfSVNfSU5GSU5JVFkoYi5yZWFsKSB8fCBQeV9JU19JTkZJTklUWShiLmltYWcpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIG5vdyBkbyB0aGUgcmVndWxhciBjb21wdXRhdGlvbgorICAgICAgIHRoaXMgaXMgZXNzZW50aWFsbHkgdGhlICJ3ZWFrIiB0ZXN0IGZyb20gdGhlIEJvb3N0IGxpYnJhcnkKKyAgICAqLworCisgICAgZGlmZiA9IF9QeV9jX2FicyhfUHlfY19kaWZmKGEsIGIpKTsKKworICAgIHJldHVybiAoKChkaWZmIDw9IHJlbF90b2wgKiBfUHlfY19hYnMoYikpIHx8CisgICAgICAgICAgICAgKGRpZmYgPD0gcmVsX3RvbCAqIF9QeV9jX2FicyhhKSkpIHx8CisgICAgICAgICAgICAoZGlmZiA8PSBhYnNfdG9sKSk7Cit9CiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfZG9jLAogIlRoaXMgbW9kdWxlIGlzIGFsd2F5cyBhdmFpbGFibGUuIEl0IHByb3ZpZGVzIGFjY2VzcyB0byBtYXRoZW1hdGljYWxcbiIKICJmdW5jdGlvbnMgZm9yIGNvbXBsZXggbnVtYmVycy4iKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIGNtYXRoX21ldGhvZHNbXSA9IHsKLSAgICB7ImFjb3MiLCAgIGNtYXRoX2Fjb3MsICBNRVRIX1ZBUkFSR1MsIGNfYWNvc19kb2N9LAotICAgIHsiYWNvc2giLCAgY21hdGhfYWNvc2gsIE1FVEhfVkFSQVJHUywgY19hY29zaF9kb2N9LAotICAgIHsiYXNpbiIsICAgY21hdGhfYXNpbiwgIE1FVEhfVkFSQVJHUywgY19hc2luX2RvY30sCi0gICAgeyJhc2luaCIsICBjbWF0aF9hc2luaCwgTUVUSF9WQVJBUkdTLCBjX2FzaW5oX2RvY30sCi0gICAgeyJhdGFuIiwgICBjbWF0aF9hdGFuLCAgTUVUSF9WQVJBUkdTLCBjX2F0YW5fZG9jfSwKLSAgICB7ImF0YW5oIiwgIGNtYXRoX2F0YW5oLCBNRVRIX1ZBUkFSR1MsIGNfYXRhbmhfZG9jfSwKLSAgICB7ImNvcyIsICAgIGNtYXRoX2NvcywgICBNRVRIX1ZBUkFSR1MsIGNfY29zX2RvY30sCi0gICAgeyJjb3NoIiwgICBjbWF0aF9jb3NoLCAgTUVUSF9WQVJBUkdTLCBjX2Nvc2hfZG9jfSwKLSAgICB7ImV4cCIsICAgIGNtYXRoX2V4cCwgICBNRVRIX1ZBUkFSR1MsIGNfZXhwX2RvY30sCi0gICAgeyJpc2Zpbml0ZSIsIGNtYXRoX2lzZmluaXRlLCBNRVRIX1ZBUkFSR1MsIGNtYXRoX2lzZmluaXRlX2RvY30sCi0gICAgeyJpc2luZiIsICBjbWF0aF9pc2luZiwgTUVUSF9WQVJBUkdTLCBjbWF0aF9pc2luZl9kb2N9LAotICAgIHsiaXNuYW4iLCAgY21hdGhfaXNuYW4sIE1FVEhfVkFSQVJHUywgY21hdGhfaXNuYW5fZG9jfSwKLSAgICB7ImxvZyIsICAgIGNtYXRoX2xvZywgICBNRVRIX1ZBUkFSR1MsIGNtYXRoX2xvZ19kb2N9LAotICAgIHsibG9nMTAiLCAgY21hdGhfbG9nMTAsIE1FVEhfVkFSQVJHUywgY19sb2cxMF9kb2N9LAotICAgIHsicGhhc2UiLCAgY21hdGhfcGhhc2UsIE1FVEhfVkFSQVJHUywgY21hdGhfcGhhc2VfZG9jfSwKLSAgICB7InBvbGFyIiwgIGNtYXRoX3BvbGFyLCBNRVRIX1ZBUkFSR1MsIGNtYXRoX3BvbGFyX2RvY30sCi0gICAgeyJyZWN0IiwgICBjbWF0aF9yZWN0LCAgTUVUSF9WQVJBUkdTLCBjbWF0aF9yZWN0X2RvY30sCi0gICAgeyJzaW4iLCAgICBjbWF0aF9zaW4sICAgTUVUSF9WQVJBUkdTLCBjX3Npbl9kb2N9LAotICAgIHsic2luaCIsICAgY21hdGhfc2luaCwgIE1FVEhfVkFSQVJHUywgY19zaW5oX2RvY30sCi0gICAgeyJzcXJ0IiwgICBjbWF0aF9zcXJ0LCAgTUVUSF9WQVJBUkdTLCBjX3NxcnRfZG9jfSwKLSAgICB7InRhbiIsICAgIGNtYXRoX3RhbiwgICBNRVRIX1ZBUkFSR1MsIGNfdGFuX2RvY30sCi0gICAgeyJ0YW5oIiwgICBjbWF0aF90YW5oLCAgTUVUSF9WQVJBUkdTLCBjX3RhbmhfZG9jfSwKLSAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICAgIENNQVRIX0FDT1NfTUVUSE9EREVGCisgICAgQ01BVEhfQUNPU0hfTUVUSE9EREVGCisgICAgQ01BVEhfQVNJTl9NRVRIT0RERUYKKyAgICBDTUFUSF9BU0lOSF9NRVRIT0RERUYKKyAgICBDTUFUSF9BVEFOX01FVEhPRERFRgorICAgIENNQVRIX0FUQU5IX01FVEhPRERFRgorICAgIENNQVRIX0NPU19NRVRIT0RERUYKKyAgICBDTUFUSF9DT1NIX01FVEhPRERFRgorICAgIENNQVRIX0VYUF9NRVRIT0RERUYKKyAgICBDTUFUSF9JU0NMT1NFX01FVEhPRERFRgorICAgIENNQVRIX0lTRklOSVRFX01FVEhPRERFRgorICAgIENNQVRIX0lTSU5GX01FVEhPRERFRgorICAgIENNQVRIX0lTTkFOX01FVEhPRERFRgorICAgIENNQVRIX0xPR19NRVRIT0RERUYKKyAgICBDTUFUSF9MT0cxMF9NRVRIT0RERUYKKyAgICBDTUFUSF9QSEFTRV9NRVRIT0RERUYKKyAgICBDTUFUSF9QT0xBUl9NRVRIT0RERUYKKyAgICBDTUFUSF9SRUNUX01FVEhPRERFRgorICAgIENNQVRIX1NJTl9NRVRIT0RERUYKKyAgICBDTUFUSF9TSU5IX01FVEhPRERFRgorICAgIENNQVRIX1NRUlRfTUVUSE9EREVGCisgICAgQ01BVEhfVEFOX01FVEhPRERFRgorICAgIENNQVRIX1RBTkhfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9ICAvKiBzZW50aW5lbCAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NvbmZpZy5jLmluIGIvTW9kdWxlcy9jb25maWcuYy5pbgppbmRleCA3YTI0ZTJkLi43Yjc3MTk5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2NvbmZpZy5jLmluCisrKyBiL01vZHVsZXMvY29uZmlnLmMuaW4KQEAgLTEzLDcgKzEzLDcgQEAKIC8qICEhISAhISEgISEhIFRoaXMgZmlsZSBpcyBlZGl0ZWQgYnkgdGhlIG1ha2VzZXR1cCBzY3JpcHQgISEhICEhISAhISEgKi8KIAogLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgotICAgU2VlIGluaXRfYnVpbHRpbigpIGluIGltcG9ydC5jLiAqLworICAgU2VlIGNyZWF0ZV9idWlsdGluKCkgaW4gaW1wb3J0LmMuICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYyBiL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKaW5kZXggMTQ5M2Y4ZC4uZjFmZGE0OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYworKysgYi9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCkBAIC01LDcgKzUsMTMgQEAKICNpbmNsdWRlIDxmcmFtZW9iamVjdC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2lmIGRlZmluZWQoSEFWRV9QVEhSRUFEX1NJR01BU0spICYmICFkZWZpbmVkKEhBVkVfQlJPS0VOX1BUSFJFQURfU0lHTUFTSykKLSNpbmNsdWRlIDxwdGhyZWFkLmg+CisjICBpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKyNpZmRlZiBNU19XSU5ET1dTCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICisjICBpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNlbmRpZgogCiAvKiBBbGxvY2F0ZSBhdCBtYXhpbXVtIDEwMCBNQiBvZiB0aGUgc3RhY2sgdG8gcmFpc2UgdGhlIHN0YWNrIG92ZXJmbG93ICovCkBAIC0yMiw5ICsyOCw3IEBACiAjICBkZWZpbmUgRkFVTFRIQU5ETEVSX1VTRVIKICNlbmRpZgogCi0vKiBjYXN0IHNpemVfdCB0byBpbnQgYmVjYXVzZSB3cml0ZSgpIHRha2VzIGFuIGludCBvbiBXaW5kb3dzCi0gICAoYW55d2F5LCB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiAzMCBjaGFyYWN0ZXJzKSAqLwotI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIChpbnQpc3RybGVuKHN0cikpCisjZGVmaW5lIFBVVFMoZmQsIHN0cikgX1B5X3dyaXRlX25vcmFpc2UoZmQsIHN0ciwgc3RybGVuKHN0cikpCiAKIF9QeV9JREVOVElGSUVSKGVuYWJsZSk7CiBfUHlfSURFTlRJRklFUihmaWxlbm8pOwpAQCAtMTI3LDMyICsxMzEsNDYgQEAKICAgIGNhbGwgaXRzIGZsdXNoKCkgbWV0aG9kLgogCiAgICBJZiBmaWxlIGlzIE5VTEwgb3IgUHlfTm9uZSwgdXNlIHN5cy5zdGRlcnIgYXMgdGhlIG5ldyBmaWxlLgorICAgSWYgZmlsZSBpcyBhbiBpbnRlZ2VyLCBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgZmlsZSBkZXNjcmlwdG9yLgogCi0gICBPbiBzdWNjZXNzLCByZXR1cm4gdGhlIG5ldyBmaWxlIGFuZCB3cml0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGludG8gKnBfZmQuCi0gICBPbiBlcnJvciwgcmV0dXJuIE5VTEwuICovCisgICBPbiBzdWNjZXNzLCByZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQgd3JpdGUgdGhlIG5ldyBmaWxlIGludG8gKmZpbGVfcHRyLgorICAgT24gZXJyb3IsIHJldHVybiAtMS4gKi8KIAotc3RhdGljIFB5T2JqZWN0KgotZmF1bHRoYW5kbGVyX2dldF9maWxlbm8oUHlPYmplY3QgKmZpbGUsIGludCAqcF9mZCkKK3N0YXRpYyBpbnQKK2ZhdWx0aGFuZGxlcl9nZXRfZmlsZW5vKFB5T2JqZWN0ICoqZmlsZV9wdHIpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBsb25nIGZkX2xvbmc7CiAgICAgaW50IGZkOworICAgIFB5T2JqZWN0ICpmaWxlID0gKmZpbGVfcHRyOwogCiAgICAgaWYgKGZpbGUgPT0gTlVMTCB8fCBmaWxlID09IFB5X05vbmUpIHsKICAgICAgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMuc3RkZXJyIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBpZiAoZmlsZSA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAic3lzLnN0ZGVyciBpcyBOb25lIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2soZmlsZSkpIHsKKyAgICAgICAgZmQgPSBfUHlMb25nX0FzSW50KGZpbGUpOworICAgICAgICBpZiAoZmQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGZkIDwgMCB8fCAhX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdGVyIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmZpbGVfcHRyID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIGZkOworICAgIH0KIAogICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZmlsZSwgJlB5SWRfZmlsZW5vLCAiIik7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgZmQgPSAtMTsKICAgICBpZiAoUHlMb25nX0NoZWNrKHJlc3VsdCkpIHsKQEAgLTE2NSw3ICsxODMsNyBAQAogICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUuZmlsZW5vKCkgaXMgbm90IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmaWxlLCAmUHlJZF9mbHVzaCwgIiIpOwpAQCAtMTc1LDggKzE5Myw4IEBACiAgICAgICAgIC8qIGlnbm9yZSBmbHVzaCgpIGVycm9yICovCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQotICAgICpwX2ZkID0gZmQ7Ci0gICAgcmV0dXJuIGZpbGU7CisgICAgKmZpbGVfcHRyID0gZmlsZTsKKyAgICByZXR1cm4gZmQ7CiB9CiAKIC8qIEdldCB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgdGhyZWFkOiBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB0aGUgY3VycmVudApAQCAtMTkzLDYgKzIxMSw0MiBAQAogICAgIHJldHVybiB0c3RhdGU7CiB9CiAKK3N0YXRpYyB2b2lkCitmYXVsdGhhbmRsZXJfZHVtcF90cmFjZWJhY2soaW50IGZkLCBpbnQgYWxsX3RocmVhZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCit7CisgICAgc3RhdGljIHZvbGF0aWxlIGludCByZWVudHJhbnQgPSAwOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKKworICAgIGlmIChyZWVudHJhbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHJlZW50cmFudCA9IDE7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIC8qIFNJR1NFR1YsIFNJR0ZQRSwgU0lHQUJSVCwgU0lHQlVTIGFuZCBTSUdJTEwgYXJlIHN5bmNocm9ub3VzIHNpZ25hbHMgYW5kCisgICAgICAgYXJlIHRodXMgZGVsaXZlcmVkIHRvIHRoZSB0aHJlYWQgdGhhdCBjYXVzZWQgdGhlIGZhdWx0LiBHZXQgdGhlIFB5dGhvbgorICAgICAgIHRocmVhZCBzdGF0ZSBvZiB0aGUgY3VycmVudCB0aHJlYWQuCisKKyAgICAgICBQeVRocmVhZFN0YXRlX0dldCgpIGRvZXNuJ3QgZ2l2ZSB0aGUgc3RhdGUgb2YgdGhlIHRocmVhZCB0aGF0IGNhdXNlZCB0aGUKKyAgICAgICBmYXVsdCBpZiB0aGUgdGhyZWFkIHJlbGVhc2VkIHRoZSBHSUwsIGFuZCBzbyB0aGlzIGZ1bmN0aW9uIGNhbm5vdCBiZQorICAgICAgIHVzZWQuIFJlYWQgdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIGluc3RlYWQ6IGNhbGwKKyAgICAgICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpLiAqLworICAgIHRzdGF0ZSA9IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCk7CisjZWxzZQorICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CisjZW5kaWYKKworICAgIGlmIChhbGxfdGhyZWFkcykKKyAgICAgICAgX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKGZkLCBpbnRlcnAsIHRzdGF0ZSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICh0c3RhdGUgIT0gTlVMTCkKKyAgICAgICAgICAgIF9QeV9EdW1wVHJhY2ViYWNrKGZkLCB0c3RhdGUpOworICAgIH0KKworICAgIHJlZW50cmFudCA9IDA7Cit9CisKIHN0YXRpYyBQeU9iamVjdCoKIGZhdWx0aGFuZGxlcl9kdW1wX3RyYWNlYmFja19weShQeU9iamVjdCAqc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKQEAgLTIwOSw4ICsyNjMsOCBAQAogICAgICAgICAmZmlsZSwgJmFsbF90aHJlYWRzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmaWxlID0gZmF1bHRoYW5kbGVyX2dldF9maWxlbm8oZmlsZSwgJmZkKTsKLSAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgIGZkID0gZmF1bHRoYW5kbGVyX2dldF9maWxlbm8oJmZpbGUpOworICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgdHN0YXRlID0gZ2V0X3RocmVhZF9zdGF0ZSgpOwpAQCAtMjI3LDYgKzI4MSwxMCBAQAogICAgIGVsc2UgewogICAgICAgICBfUHlfRHVtcFRyYWNlYmFjayhmZCwgdHN0YXRlKTsKICAgICB9CisKKyAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTI1MCw3ICszMDgsNiBAQAogICAgIGNvbnN0IGludCBmZCA9IGZhdGFsX2Vycm9yLmZkOwogICAgIHVuc2lnbmVkIGludCBpOwogICAgIGZhdWx0X2hhbmRsZXJfdCAqaGFuZGxlciA9IE5VTEw7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOwogICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CiAKICAgICBpZiAoIWZhdGFsX2Vycm9yLmVuYWJsZWQpCkBAIC0yNzgsMjYgKzMzNSw4IEBACiAgICAgUFVUUyhmZCwgaGFuZGxlci0+bmFtZSk7CiAgICAgUFVUUyhmZCwgIlxuXG4iKTsKIAotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgLyogU0lHU0VHViwgU0lHRlBFLCBTSUdBQlJULCBTSUdCVVMgYW5kIFNJR0lMTCBhcmUgc3luY2hyb25vdXMgc2lnbmFscyBhbmQKLSAgICAgICBhcmUgdGh1cyBkZWxpdmVyZWQgdG8gdGhlIHRocmVhZCB0aGF0IGNhdXNlZCB0aGUgZmF1bHQuIEdldCB0aGUgUHl0aG9uCi0gICAgICAgdGhyZWFkIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRocmVhZC4KLQotICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0KCkgZG9lc24ndCBnaXZlIHRoZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIHRoYXQgY2F1c2VkIHRoZQotICAgICAgIGZhdWx0IGlmIHRoZSB0aHJlYWQgcmVsZWFzZWQgdGhlIEdJTCwgYW5kIHNvIHRoaXMgZnVuY3Rpb24gY2Fubm90IGJlCi0gICAgICAgdXNlZC4gUmVhZCB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykgaW5zdGVhZDogY2FsbAotICAgICAgIFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCkuICovCi0gICAgdHN0YXRlID0gUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKTsKLSNlbHNlCi0gICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKLSNlbmRpZgotCi0gICAgaWYgKGZhdGFsX2Vycm9yLmFsbF90aHJlYWRzKQotICAgICAgICBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHMoZmQsIGZhdGFsX2Vycm9yLmludGVycCwgdHN0YXRlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHRzdGF0ZSAhPSBOVUxMKQotICAgICAgICAgICAgX1B5X0R1bXBUcmFjZWJhY2soZmQsIHRzdGF0ZSk7Ci0gICAgfQorICAgIGZhdWx0aGFuZGxlcl9kdW1wX3RyYWNlYmFjayhmZCwgZmF0YWxfZXJyb3IuYWxsX3RocmVhZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsX2Vycm9yLmludGVycCk7CiAKICAgICBlcnJubyA9IHNhdmVfZXJybm87CiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtMzMzLDE3ICszNzIsMTYgQEAKICAgICAgICAgInxPaTplbmFibGUiLCBrd2xpc3QsICZmaWxlLCAmYWxsX3RocmVhZHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGZpbGUgPSBmYXVsdGhhbmRsZXJfZ2V0X2ZpbGVubyhmaWxlLCAmZmQpOwotICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgZmQgPSBmYXVsdGhhbmRsZXJfZ2V0X2ZpbGVubygmZmlsZSk7CisgICAgaWYgKGZkIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB0c3RhdGUgPSBnZXRfdGhyZWFkX3N0YXRlKCk7CiAgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5X1hERUNSRUYoZmF0YWxfZXJyb3IuZmlsZSk7Ci0gICAgUHlfSU5DUkVGKGZpbGUpOwotICAgIGZhdGFsX2Vycm9yLmZpbGUgPSBmaWxlOworICAgIFB5X1hJTkNSRUYoZmlsZSk7CisgICAgUHlfWFNFVFJFRihmYXRhbF9lcnJvci5maWxlLCBmaWxlKTsKICAgICBmYXRhbF9lcnJvci5mZCA9IGZkOwogICAgIGZhdGFsX2Vycm9yLmFsbF90aHJlYWRzID0gYWxsX3RocmVhZHM7CiAgICAgZmF0YWxfZXJyb3IuaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CkBAIC00NTIsOSArNDkwLDkgQEAKICAgICAgICAgYXNzZXJ0KHN0ID09IFBZX0xPQ0tfRkFJTFVSRSk7CiAKICAgICAgICAgLyogZ2V0IHRoZSB0aHJlYWQgaG9sZGluZyB0aGUgR0lMLCBOVUxMIGlmIG5vIHRocmVhZCBob2xkIHRoZSBHSUwgKi8KLSAgICAgICAgY3VycmVudCA9IF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKKyAgICAgICAgY3VycmVudCA9IF9QeVRocmVhZFN0YXRlX1VuY2hlY2tlZEdldCgpOwogCi0gICAgICAgIHdyaXRlKHRocmVhZC5mZCwgdGhyZWFkLmhlYWRlciwgKGludCl0aHJlYWQuaGVhZGVyX2xlbik7CisgICAgICAgIF9QeV93cml0ZV9ub3JhaXNlKHRocmVhZC5mZCwgdGhyZWFkLmhlYWRlciwgKGludCl0aHJlYWQuaGVhZGVyX2xlbik7CiAKICAgICAgICAgZXJybXNnID0gX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKHRocmVhZC5mZCwgdGhyZWFkLmludGVycCwgY3VycmVudCk7CiAgICAgICAgIG9rID0gKGVycm1zZyA9PSBOVUxMKTsKQEAgLTU0Nyw4ICs1ODUsOCBAQAogICAgIGlmICh0c3RhdGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmaWxlID0gZmF1bHRoYW5kbGVyX2dldF9maWxlbm8oZmlsZSwgJmZkKTsKLSAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgIGZkID0gZmF1bHRoYW5kbGVyX2dldF9maWxlbm8oJmZpbGUpOworICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogZm9ybWF0IHRoZSB0aW1lb3V0ICovCkBAIC01NjAsOSArNTk4LDggQEAKICAgICAvKiBDYW5jZWwgcHJldmlvdXMgdGhyZWFkLCBpZiBydW5uaW5nICovCiAgICAgY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCk7CiAKLSAgICBQeV9YREVDUkVGKHRocmVhZC5maWxlKTsKLSAgICBQeV9JTkNSRUYoZmlsZSk7Ci0gICAgdGhyZWFkLmZpbGUgPSBmaWxlOworICAgIFB5X1hJTkNSRUYoZmlsZSk7CisgICAgUHlfWFNFVFJFRih0aHJlYWQuZmlsZSwgZmlsZSk7CiAgICAgdGhyZWFkLmZkID0gZmQ7CiAgICAgdGhyZWFkLnRpbWVvdXRfdXMgPSB0aW1lb3V0X3VzOwogICAgIHRocmVhZC5yZXBlYXQgPSByZXBlYXQ7CkBAIC02NDAsMjggKzY3NywxNCBAQAogZmF1bHRoYW5kbGVyX3VzZXIoaW50IHNpZ251bSkKIHsKICAgICB1c2VyX3NpZ25hbF90ICp1c2VyOwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKICAgICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOwogCiAgICAgdXNlciA9ICZ1c2VyX3NpZ25hbHNbc2lnbnVtXTsKICAgICBpZiAoIXVzZXItPmVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgLyogUHlUaHJlYWRTdGF0ZV9HZXQoKSBkb2Vzbid0IGdpdmUgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHRocmVhZCBpZgotICAgICAgIHRoZSB0aHJlYWQgZG9lc24ndCBob2xkIHRoZSBHSUwuIFJlYWQgdGhlIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpCi0gICAgICAgaW5zdGVhZDogY2FsbCBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpLiAqLwotICAgIHRzdGF0ZSA9IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCk7Ci0jZWxzZQotICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7Ci0jZW5kaWYKKyAgICBmYXVsdGhhbmRsZXJfZHVtcF90cmFjZWJhY2sodXNlci0+ZmQsIHVzZXItPmFsbF90aHJlYWRzLCB1c2VyLT5pbnRlcnApOwogCi0gICAgaWYgKHVzZXItPmFsbF90aHJlYWRzKQotICAgICAgICBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHModXNlci0+ZmQsIHVzZXItPmludGVycCwgdHN0YXRlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHRzdGF0ZSAhPSBOVUxMKQotICAgICAgICAgICAgX1B5X0R1bXBUcmFjZWJhY2sodXNlci0+ZmQsIHRzdGF0ZSk7Ci0gICAgfQogI2lmZGVmIEhBVkVfU0lHQUNUSU9OCiAgICAgaWYgKHVzZXItPmNoYWluKSB7CiAgICAgICAgICh2b2lkKXNpZ2FjdGlvbihzaWdudW0sICZ1c2VyLT5wcmV2aW91cywgTlVMTCk7CkBAIC03MzEsOCArNzU0LDggQEAKICAgICBpZiAodHN0YXRlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZmlsZSA9IGZhdWx0aGFuZGxlcl9nZXRfZmlsZW5vKGZpbGUsICZmZCk7Ci0gICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICBmZCA9IGZhdWx0aGFuZGxlcl9nZXRfZmlsZW5vKCZmaWxlKTsKKyAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICh1c2VyX3NpZ25hbHMgPT0gTlVMTCkgewpAQCAtNzUzLDkgKzc3Niw4IEBACiAgICAgICAgIHVzZXItPnByZXZpb3VzID0gcHJldmlvdXM7CiAgICAgfQogCi0gICAgUHlfWERFQ1JFRih1c2VyLT5maWxlKTsKLSAgICBQeV9JTkNSRUYoZmlsZSk7Ci0gICAgdXNlci0+ZmlsZSA9IGZpbGU7CisgICAgUHlfWElOQ1JFRihmaWxlKTsKKyAgICBQeV9YU0VUUkVGKHVzZXItPmZpbGUsIGZpbGUpOwogICAgIHVzZXItPmZkID0gZmQ7CiAgICAgdXNlci0+YWxsX3RocmVhZHMgPSBhbGxfdGhyZWFkczsKICAgICB1c2VyLT5jaGFpbiA9IGNoYWluOwpAQCAtODA0LDEyICs4MjYsNDEgQEAKICNlbmRpZiAgIC8qIEZBVUxUSEFORExFUl9VU0VSICovCiAKIAorc3RhdGljIHZvaWQKK2ZhdWx0aGFuZGxlcl9zdXBwcmVzc19jcmFzaF9yZXBvcnQodm9pZCkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgVUlOVCBtb2RlOworCisgICAgLyogQ29uZmlndXJlIFdpbmRvd3MgdG8gbm90IGRpc3BsYXkgdGhlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZyAqLworICAgIG1vZGUgPSBTZXRFcnJvck1vZGUoU0VNX05PR1BGQVVMVEVSUk9SQk9YKTsKKyAgICBTZXRFcnJvck1vZGUobW9kZSB8IFNFTV9OT0dQRkFVTFRFUlJPUkJPWCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1JFU09VUkNFX0gKKyAgICBzdHJ1Y3QgcmxpbWl0IHJsOworCisgICAgLyogRGlzYWJsZSBjcmVhdGlvbiBvZiBjb3JlIGR1bXAgKi8KKyAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9DT1JFLCAmcmwpICE9IDApIHsKKyAgICAgICAgcmwucmxpbV9jdXIgPSAwOworICAgICAgICBzZXRybGltaXQoUkxJTUlUX0NPUkUsICZybCk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBfTVNDX1ZFUgorICAgIC8qIFZpc3VhbCBTdHVkaW86IGNvbmZpZ3VyZSBhYm9ydCgpIHRvIG5vdCBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugbm9yCisgICAgICAgb3BlbiBhIHBvcHVwIGFza2luZyB0byByZXBvcnQgdGhlIGZhdWx0LiAqLworICAgIF9zZXRfYWJvcnRfYmVoYXZpb3IoMCwgX1dSSVRFX0FCT1JUX01TRyB8IF9DQUxMX1JFUE9SVEZBVUxUKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgUHlPYmplY3QgKgogZmF1bHRoYW5kbGVyX3JlYWRfbnVsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgdm9sYXRpbGUgaW50ICp4OwogICAgIHZvbGF0aWxlIGludCB5OwogCisgICAgZmF1bHRoYW5kbGVyX3N1cHByZXNzX2NyYXNoX3JlcG9ydCgpOwogICAgIHggPSBOVUxMOwogICAgIHkgPSAqeDsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHkpOwpAQCAtODE5LDYgKzg3MCw3IEBACiBzdGF0aWMgdm9pZAogZmF1bHRoYW5kbGVyX3JhaXNlX3NpZ3NlZ3Yodm9pZCkKIHsKKyAgICBmYXVsdGhhbmRsZXJfc3VwcHJlc3NfY3Jhc2hfcmVwb3J0KCk7CiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIC8qIEZvciBTSUdTRUdWLCBmYXVsdGhhbmRsZXJfZmF0YWxfZXJyb3IoKSByZXN0b3JlcyB0aGUgcHJldmlvdXMgc2lnbmFsCiAgICAgICAgaGFuZGxlciBhbmQgdGhlbiBnaXZlcyBiYWNrIHRoZSBleGVjdXRpb24gZmxvdyB0byB0aGUgcHJvZ3JhbSAod2l0aG91dApAQCAtODYxLDYgKzkxMyw3IEBACiAgICAgLyogRG8gYW4gaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvOiByYWlzZSBhIFNJR0ZQRSBvbiBJbnRlbCBDUFUsIGJ1dCBub3Qgb24KICAgICAgICBQb3dlclBDLiBVc2Ugdm9sYXRpbGUgdG8gZGlzYWJsZSBjb21waWxlLXRpbWUgb3B0aW1pemF0aW9ucy4gKi8KICAgICB2b2xhdGlsZSBpbnQgeCA9IDEsIHkgPSAwLCB6OworICAgIGZhdWx0aGFuZGxlcl9zdXBwcmVzc19jcmFzaF9yZXBvcnQoKTsKICAgICB6ID0geCAvIHk7CiAgICAgLyogSWYgdGhlIGRpdmlzaW9uIGJ5IHplcm8gZGlkbid0IHJhaXNlIGEgU0lHRlBFIChlLmcuIG9uIFBvd2VyUEMpLAogICAgICAgIHJhaXNlIGl0IG1hbnVhbGx5LiAqLwpAQCAtODczLDQwICs5MjYsMjcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBmYXVsdGhhbmRsZXJfc2lnYWJydChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0jaWZkZWYgX01TQ19WRVIKLSAgICAvKiBWaXN1YWwgU3R1ZGlvOiBjb25maWd1cmUgYWJvcnQoKSB0byBub3QgZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIG5vcgotICAgICAgIG9wZW4gYSBwb3B1cCBhc2tpbmcgdG8gcmVwb3J0IHRoZSBmYXVsdC4gKi8KLSAgICBfc2V0X2Fib3J0X2JlaGF2aW9yKDAsIF9XUklURV9BQk9SVF9NU0cgfCBfQ0FMTF9SRVBPUlRGQVVMVCk7Ci0jZW5kaWYKKyAgICBmYXVsdGhhbmRsZXJfc3VwcHJlc3NfY3Jhc2hfcmVwb3J0KCk7CiAgICAgYWJvcnQoKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotI2lmZGVmIFNJR0JVUwotc3RhdGljIFB5T2JqZWN0ICoKLWZhdWx0aGFuZGxlcl9zaWdidXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIHJhaXNlKFNJR0JVUyk7Ci0gICAgUHlfUkVUVVJOX05PTkU7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFNJR0lMTAotc3RhdGljIFB5T2JqZWN0ICoKLWZhdWx0aGFuZGxlcl9zaWdpbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIHJhaXNlKFNJR0lMTCk7Ci0gICAgUHlfUkVUVVJOX05PTkU7Ci19Ci0jZW5kaWYKLQogc3RhdGljIFB5T2JqZWN0ICoKIGZhdWx0aGFuZGxlcl9mYXRhbF9lcnJvcl9weShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqbWVzc2FnZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInk6ZmF0YWxfZXJyb3IiLCAmbWVzc2FnZSkpCisgICAgaW50IHJlbGVhc2VfZ2lsID0gMDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInl8aTpmYXRhbF9lcnJvciIsICZtZXNzYWdlLCAmcmVsZWFzZV9naWwpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9GYXRhbEVycm9yKG1lc3NhZ2UpOworICAgIGZhdWx0aGFuZGxlcl9zdXBwcmVzc19jcmFzaF9yZXBvcnQoKTsKKyAgICBpZiAocmVsZWFzZV9naWwpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBQeV9GYXRhbEVycm9yKG1lc3NhZ2UpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfRmF0YWxFcnJvcihtZXNzYWdlKTsKKyAgICB9CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTkzOSw2ICs5NzksNyBAQAogICAgIFB5X3VpbnRwdHJfdCBzcCA9IChQeV91aW50cHRyX3QpJmRlcHRoOwogICAgIFB5X3VpbnRwdHJfdCBzdG9wOwogCisgICAgZmF1bHRoYW5kbGVyX3N1cHByZXNzX2NyYXNoX3JlcG9ydCgpOwogICAgIGRlcHRoID0gMDsKICAgICBzdG9wID0gc3RhY2tfb3ZlcmZsb3coc3AgLSBTVEFDS19PVkVSRkxPV19NQVhfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AgKyBTVEFDS19PVkVSRkxPV19NQVhfU0laRSwKQEAgLTEwMTAsNyArMTA1MSw3IEBACiAgICAgeyJyZWdpc3RlciIsCiAgICAgIChQeUNGdW5jdGlvbilmYXVsdGhhbmRsZXJfcmVnaXN0ZXJfcHksIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAogICAgICBQeURvY19TVFIoInJlZ2lzdGVyKHNpZ251bSwgZmlsZT1zeXMuc3RkZXJyLCBhbGxfdGhyZWFkcz1UcnVlLCBjaGFpbj1GYWxzZSk6ICIKLSAgICAgICAgICAgICAgICJyZWdpc3RlciBhbiBoYW5kbGVyIGZvciB0aGUgc2lnbmFsICdzaWdudW0nOiBkdW1wIHRoZSAiCisgICAgICAgICAgICAgICAicmVnaXN0ZXIgYSBoYW5kbGVyIGZvciB0aGUgc2lnbmFsICdzaWdudW0nOiBkdW1wIHRoZSAiCiAgICAgICAgICAgICAgICAidHJhY2ViYWNrIG9mIHRoZSBjdXJyZW50IHRocmVhZCwgb3Igb2YgYWxsIHRocmVhZHMgaWYgIgogICAgICAgICAgICAgICAgImFsbF90aHJlYWRzIGlzIFRydWUsIGludG8gZmlsZSIpfSwKICAgICB7InVucmVnaXN0ZXIiLApAQCAtMTAyOCwxNCArMTA2OSw2IEBACiAgICAgIFB5RG9jX1NUUigiX3NpZ2FicnQoKTogcmFpc2UgYSBTSUdBQlJUIHNpZ25hbCIpfSwKICAgICB7Il9zaWdmcGUiLCAoUHlDRnVuY3Rpb24pZmF1bHRoYW5kbGVyX3NpZ2ZwZSwgTUVUSF9OT0FSR1MsCiAgICAgIFB5RG9jX1NUUigiX3NpZ2ZwZSgpOiByYWlzZSBhIFNJR0ZQRSBzaWduYWwiKX0sCi0jaWZkZWYgU0lHQlVTCi0gICAgeyJfc2lnYnVzIiwgKFB5Q0Z1bmN0aW9uKWZhdWx0aGFuZGxlcl9zaWdidXMsIE1FVEhfTk9BUkdTLAotICAgICBQeURvY19TVFIoIl9zaWdidXMoKTogcmFpc2UgYSBTSUdCVVMgc2lnbmFsIil9LAotI2VuZGlmCi0jaWZkZWYgU0lHSUxMCi0gICAgeyJfc2lnaWxsIiwgKFB5Q0Z1bmN0aW9uKWZhdWx0aGFuZGxlcl9zaWdpbGwsIE1FVEhfTk9BUkdTLAotICAgICBQeURvY19TVFIoIl9zaWdpbGwoKTogcmFpc2UgYSBTSUdJTEwgc2lnbmFsIil9LAotI2VuZGlmCiAgICAgeyJfZmF0YWxfZXJyb3IiLCBmYXVsdGhhbmRsZXJfZmF0YWxfZXJyb3JfcHksIE1FVEhfVkFSQVJHUywKICAgICAgUHlEb2NfU1RSKCJfZmF0YWxfZXJyb3IobWVzc2FnZSk6IGNhbGwgUHlfRmF0YWxFcnJvcihtZXNzYWdlKSIpfSwKICNpZiBkZWZpbmVkKEhBVkVfU0lHQUxUU1RBQ0spICYmIGRlZmluZWQoSEFWRV9TSUdBQ1RJT04pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMgYi9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKaW5kZXggOTMyNTk0MC4uN2JkMThhYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9mY250bG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZmNudGxtb2R1bGUuYwpAQCAtMTUsNiArMTUsMTEgQEAKICNpbmNsdWRlIDxzdHJvcHRzLmg+CiAjZW5kaWYKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIGZjbnRsCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0xMjRiNTgzODdjMTU4MTc5XSovCisKIHN0YXRpYyBpbnQKIGNvbnZfZGVzY3JpcHRvcihQeU9iamVjdCAqb2JqZWN0LCBpbnQgKnRhcmdldCkKIHsKQEAgLTI2LDQ4ICszMSw3MiBAQAogICAgIHJldHVybiAxOwogfQogCisvKiBNdXN0IGNvbWUgYWZ0ZXIgY29udl9kZXNjcmlwdG9yIGRlZmluaXRpb24uICovCisjaW5jbHVkZSAiY2xpbmljL2ZjbnRsbW9kdWxlLmMuaCIKIAotLyogZmNudGwoZmQsIG9wLCBbYXJnXSkgKi8KKy8qW2NsaW5pYyBpbnB1dF0KK2ZjbnRsLmZjbnRsCisKKyAgICBmZDogb2JqZWN0KHR5cGU9J2ludCcsIGNvbnZlcnRlcj0nY29udl9kZXNjcmlwdG9yJykKKyAgICBjbWQgYXMgY29kZTogaW50CisgICAgYXJnOiBvYmplY3QoY19kZWZhdWx0PSdOVUxMJykgPSAwCisgICAgLworCitQZXJmb3JtIHRoZSBvcGVyYXRpb24gYGNtZGAgb24gZmlsZSBkZXNjcmlwdG9yIGZkLgorCitUaGUgdmFsdWVzIHVzZWQgZm9yIGBjbWRgIGFyZSBvcGVyYXRpbmcgc3lzdGVtIGRlcGVuZGVudCwgYW5kIGFyZSBhdmFpbGFibGUKK2FzIGNvbnN0YW50cyBpbiB0aGUgZmNudGwgbW9kdWxlLCB1c2luZyB0aGUgc2FtZSBuYW1lcyBhcyB1c2VkIGluCit0aGUgcmVsZXZhbnQgQyBoZWFkZXIgZmlsZXMuICBUaGUgYXJndW1lbnQgYXJnIGlzIG9wdGlvbmFsLCBhbmQKK2RlZmF1bHRzIHRvIDA7IGl0IG1heSBiZSBhbiBpbnQgb3IgYSBzdHJpbmcuICBJZiBhcmcgaXMgZ2l2ZW4gYXMgYSBzdHJpbmcsCit0aGUgcmV0dXJuIHZhbHVlIG9mIGZjbnRsIGlzIGEgc3RyaW5nIG9mIHRoYXQgbGVuZ3RoLCBjb250YWluaW5nIHRoZQorcmVzdWx0aW5nIHZhbHVlIHB1dCBpbiB0aGUgYXJnIGJ1ZmZlciBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBsZW5ndGgKK29mIHRoZSBhcmcgc3RyaW5nIGlzIG5vdCBhbGxvd2VkIHRvIGV4Y2VlZCAxMDI0IGJ5dGVzLiAgSWYgdGhlIGFyZyBnaXZlbgoraXMgYW4gaW50ZWdlciBvciBpZiBub25lIGlzIHNwZWNpZmllZCwgdGhlIHJlc3VsdCB2YWx1ZSBpcyBhbiBpbnRlZ2VyCitjb3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZjbnRsIGNhbGwgaW4gdGhlIEMgY29kZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWZjbnRsX2ZjbnRsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2ZjbnRsX2ZjbnRsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBpbnQgY29kZSwgUHlPYmplY3QgKmFyZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04ODhmYzkzYjUxYzI5NWJkIGlucHV0PThjZWZiZTU5YjI5ZWZiZTJdKi8KIHsKLSAgICBpbnQgZmQ7Ci0gICAgaW50IGNvZGU7Ci0gICAgaW50IGFyZzsKKyAgICB1bnNpZ25lZCBpbnQgaW50X2FyZyA9IDA7CiAgICAgaW50IHJldDsKICAgICBjaGFyICpzdHI7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgY2hhciBidWZbMTAyNF07CiAKLSAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpcyM6ZmNudGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZfZGVzY3JpcHRvciwgJmZkLCAmY29kZSwgJnN0ciwgJmxlbikpIHsKLSAgICAgICAgaWYgKGxlbiA+IHNpemVvZiBidWYpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmY250bCBzdHJpbmcgYXJnIHRvbyBsb25nIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoYXJnICE9IE5VTEwpIHsKKyAgICAgICAgaW50IHBhcnNlX3Jlc3VsdDsKKworICAgICAgICBpZiAoUHlBcmdfUGFyc2UoYXJnLCAicyMiLCAmc3RyLCAmbGVuKSkgeworICAgICAgICAgICAgaWYgKChzaXplX3QpbGVuID4gc2l6ZW9mIGJ1ZikgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmNudGwgc3RyaW5nIGFyZyB0b28gbG9uZyIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc3RyLCBsZW4pOworICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgcmV0ID0gZmNudGwoZmQsIGNvZGUsIGJ1Zik7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIGxlbik7CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGJ1Ziwgc3RyLCBsZW4pOwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJldCA9IGZjbnRsKGZkLCBjb2RlLCBidWYpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcGFyc2VfcmVzdWx0ID0gUHlBcmdfUGFyc2UoYXJnLAorICAgICAgICAgICAgIkk7ZmNudGwgcmVxdWlyZXMgYSBmaWxlIG9yIGZpbGUgZGVzY3JpcHRvciwiCisgICAgICAgICAgICAiIGFuIGludGVnZXIgYW5kIG9wdGlvbmFsbHkgYSB0aGlyZCBpbnRlZ2VyIG9yIGEgc3RyaW5nIiwKKyAgICAgICAgICAgICZpbnRfYXJnKTsKKyAgICAgICAgaWYgKCFwYXJzZV9yZXN1bHQpIHsKKyAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIGxlbik7CiAgICAgfQogCi0gICAgUHlFcnJfQ2xlYXIoKTsKLSAgICBhcmcgPSAwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgIk8maXxJO2ZjbnRsIHJlcXVpcmVzIGEgZmlsZSBvciBmaWxlIGRlc2NyaXB0b3IsIgotICAgICAgICAgIiBhbiBpbnRlZ2VyIGFuZCBvcHRpb25hbGx5IGEgdGhpcmQgaW50ZWdlciBvciBhIHN0cmluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZfZGVzY3JpcHRvciwgJmZkLCAmY29kZSwgJmFyZykpIHsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gZmNudGwoZmQsIGNvZGUsIGFyZyk7CisgICAgcmV0ID0gZmNudGwoZmQsIGNvZGUsIChpbnQpaW50X2FyZyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CkBAIC03NiwzMyArMTA1LDU0IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylyZXQpOwogfQogCi1QeURvY19TVFJWQVIoZmNudGxfZG9jLAotImZjbnRsKGZkLCBvcCwgW2FyZ10pXG5cCi1cblwKLVBlcmZvcm0gdGhlIG9wZXJhdGlvbiBvcCBvbiBmaWxlIGRlc2NyaXB0b3IgZmQuICBUaGUgdmFsdWVzIHVzZWRcblwKLWZvciBvcCBhcmUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQsIGFuZCBhcmUgYXZhaWxhYmxlXG5cCi1hcyBjb25zdGFudHMgaW4gdGhlIGZjbnRsIG1vZHVsZSwgdXNpbmcgdGhlIHNhbWUgbmFtZXMgYXMgdXNlZCBpblxuXAotdGhlIHJlbGV2YW50IEMgaGVhZGVyIGZpbGVzLiAgVGhlIGFyZ3VtZW50IGFyZyBpcyBvcHRpb25hbCwgYW5kXG5cCi1kZWZhdWx0cyB0byAwOyBpdCBtYXkgYmUgYW4gaW50IG9yIGEgc3RyaW5nLiAgSWYgYXJnIGlzIGdpdmVuIGFzIGEgc3RyaW5nLFxuXAotdGhlIHJldHVybiB2YWx1ZSBvZiBmY250bCBpcyBhIHN0cmluZyBvZiB0aGF0IGxlbmd0aCwgY29udGFpbmluZyB0aGVcblwKLXJlc3VsdGluZyB2YWx1ZSBwdXQgaW4gdGhlIGFyZyBidWZmZXIgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBUaGUgbGVuZ3RoXG5cCi1vZiB0aGUgYXJnIHN0cmluZyBpcyBub3QgYWxsb3dlZCB0byBleGNlZWQgMTAyNCBieXRlcy4gIElmIHRoZSBhcmcgZ2l2ZW5cblwKLWlzIGFuIGludGVnZXIgb3IgaWYgbm9uZSBpcyBzcGVjaWZpZWQsIHRoZSByZXN1bHQgdmFsdWUgaXMgYW4gaW50ZWdlclxuXAotY29ycmVzcG9uZGluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmY250bCBjYWxsIGluIHRoZSBDIGNvZGUuIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2ZjbnRsLmlvY3RsCiAKLS8qIGlvY3RsKGZkLCBvcCwgW2FyZ10pICovCisgICAgZmQ6IG9iamVjdCh0eXBlPSdpbnQnLCBjb252ZXJ0ZXI9J2NvbnZfZGVzY3JpcHRvcicpCisgICAgcmVxdWVzdCBhcyBjb2RlOiB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKQorICAgIGFyZyBhcyBvYl9hcmc6IG9iamVjdChjX2RlZmF1bHQ9J05VTEwnKSA9IDAKKyAgICBtdXRhdGVfZmxhZyBhcyBtdXRhdGVfYXJnOiBib29sID0gVHJ1ZQorICAgIC8KKworUGVyZm9ybSB0aGUgb3BlcmF0aW9uIGByZXF1ZXN0YCBvbiBmaWxlIGRlc2NyaXB0b3IgYGZkYC4KKworVGhlIHZhbHVlcyB1c2VkIGZvciBgcmVxdWVzdGAgYXJlIG9wZXJhdGluZyBzeXN0ZW0gZGVwZW5kZW50LCBhbmQgYXJlIGF2YWlsYWJsZQorYXMgY29uc3RhbnRzIGluIHRoZSBmY250bCBvciB0ZXJtaW9zIGxpYnJhcnkgbW9kdWxlcywgdXNpbmcgdGhlIHNhbWUgbmFtZXMgYXMKK3VzZWQgaW4gdGhlIHJlbGV2YW50IEMgaGVhZGVyIGZpbGVzLgorCitUaGUgYXJndW1lbnQgYGFyZ2AgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byAwOyBpdCBtYXkgYmUgYW4gaW50IG9yIGEKK2J1ZmZlciBjb250YWluaW5nIGNoYXJhY3RlciBkYXRhIChtb3N0IGxpa2VseSBhIHN0cmluZyBvciBhbiBhcnJheSkuCisKK0lmIHRoZSBhcmd1bWVudCBpcyBhIG11dGFibGUgYnVmZmVyIChzdWNoIGFzIGFuIGFycmF5KSBhbmQgaWYgdGhlCittdXRhdGVfZmxhZyBhcmd1bWVudCAod2hpY2ggaXMgb25seSBhbGxvd2VkIGluIHRoaXMgY2FzZSkgaXMgdHJ1ZSB0aGVuIHRoZQorYnVmZmVyIGlzIChpbiBlZmZlY3QpIHBhc3NlZCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgY2hhbmdlcyBtYWRlIGJ5Cit0aGUgT1Mgd2lsbCBiZSByZWZsZWN0ZWQgaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIGNhbGwgaGFzCityZXR1cm5lZC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGludGVnZXIgcmV0dXJuZWQgYnkgdGhlIGlvY3RsIHN5c3RlbQorY2FsbC4KKworSWYgdGhlIGFyZ3VtZW50IGlzIGEgbXV0YWJsZSBidWZmZXIgYW5kIHRoZSBtdXRhYmxlX2ZsYWcgYXJndW1lbnQgaXMgZmFsc2UsCit0aGUgYmVoYXZpb3IgaXMgYXMgaWYgYSBzdHJpbmcgaGFkIGJlZW4gcGFzc2VkLgorCitJZiB0aGUgYXJndW1lbnQgaXMgYW4gaW1tdXRhYmxlIGJ1ZmZlciAobW9zdCBsaWtlbHkgYSBzdHJpbmcpIHRoZW4gYSBjb3B5CitvZiB0aGUgYnVmZmVyIGlzIHBhc3NlZCB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyBhCitzdHJpbmcgb2YgdGhlIHNhbWUgbGVuZ3RoIGNvbnRhaW5pbmcgd2hhdGV2ZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gcHV0IGluCit0aGUgYnVmZmVyLiAgVGhlIGxlbmd0aCBvZiB0aGUgYXJnIGJ1ZmZlciBpbiB0aGlzIGNhc2UgaXMgbm90IGFsbG93ZWQgdG8KK2V4Y2VlZCAxMDI0IGJ5dGVzLgorCitJZiB0aGUgYXJnIGdpdmVuIGlzIGFuIGludGVnZXIgb3IgaWYgbm9uZSBpcyBzcGVjaWZpZWQsIHRoZSByZXN1bHQgdmFsdWUgaXMKK2FuIGludGVnZXIgY29ycmVzcG9uZGluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBpb2N0bCBjYWxsIGluIHRoZSBDCitjb2RlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZmNudGxfaW9jdGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorZmNudGxfaW9jdGxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIHVuc2lnbmVkIGludCBjb2RlLAorICAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JfYXJnLCBpbnQgbXV0YXRlX2FyZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03ZjdmNTg0MGM2NTk5MWJlIGlucHV0PWVkZTcwYzQzM2NjY2JiYjJdKi8KIHsKICNkZWZpbmUgSU9DVExfQlVGU1ogMTAyNAotICAgIGludCBmZDsKLSAgICAvKiBJbiBQeUFyZ19QYXJzZVR1cGxlIGJlbG93LCB3ZSB1c2UgdGhlIHVuc2lnbmVkIG5vbi1jaGVja2VkICdJJwotICAgICAgIGZvcm1hdCBmb3IgdGhlICdjb2RlJyBwYXJhbWV0ZXIgYmVjYXVzZSBQeXRob24gdHVybnMgMHg4MDAwMDAwCi0gICAgICAgaW50byBlaXRoZXIgYSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIgKFB5TG9uZyBvciBQeUludCBvbiA2NC1iaXQKLSAgICAgICBwbGF0Zm9ybXMpIG9yIGEgbmVnYXRpdmUgbnVtYmVyIG9uIG90aGVycyAoMzItYml0IFB5SW50KQotICAgICAgIHdoZXJlYXMgdGhlIHN5c3RlbSBleHBlY3RzIGl0IHRvIGJlIGEgMzJiaXQgYml0IGZpZWxkIHZhbHVlCisgICAgLyogV2UgdXNlIHRoZSB1bnNpZ25lZCBub24tY2hlY2tlZCAnSScgZm9ybWF0IGZvciB0aGUgJ2NvZGUnIHBhcmFtZXRlcgorICAgICAgIGJlY2F1c2UgdGhlIHN5c3RlbSBleHBlY3RzIGl0IHRvIGJlIGEgMzJiaXQgYml0IGZpZWxkIHZhbHVlCiAgICAgICAgcmVnYXJkbGVzcyBvZiBpdCBiZWluZyBwYXNzZWQgYXMgYW4gaW50IG9yIHVuc2lnbmVkIGxvbmcgb24KICAgICAgICB2YXJpb3VzIHBsYXRmb3Jtcy4gIFNlZSB0aGUgdGVybWlvcy5USU9DU1dJTlNaIGNvbnN0YW50IGFjcm9zcwogICAgICAgIHBsYXRmb3JtcyBmb3IgYW4gZXhhbXBsZSBvZiB0aGlzLgpAQCAtMTExLDEwMSArMTYxLDk4IEBACiAgICAgICAgaW4gdGhlaXIgdW5zaWduZWQgbG9uZyBpb2N0bCBjb2RlcyB0aGlzIHdpbGwgYnJlYWsgYW5kIG5lZWQKICAgICAgICBzcGVjaWFsIGNhc2luZyBiYXNlZCBvbiB0aGUgcGxhdGZvcm0gYmVpbmcgYnVpbHQgb24uCiAgICAgICovCi0gICAgdW5zaWduZWQgaW50IGNvZGU7Ci0gICAgaW50IGFyZzsKKyAgICBpbnQgYXJnID0gMDsKICAgICBpbnQgcmV0OwogICAgIFB5X2J1ZmZlciBwc3RyOwogICAgIGNoYXIgKnN0cjsKICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBpbnQgbXV0YXRlX2FyZyA9IDE7CiAgICAgY2hhciBidWZbSU9DVExfQlVGU1orMV07ICAvKiBhcmd1bWVudCBwbHVzIE5VTCBieXRlICovCiAKLSAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZJdyp8aTppb2N0bCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29udl9kZXNjcmlwdG9yLCAmZmQsICZjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICZwc3RyLCAmbXV0YXRlX2FyZykpIHsKLSAgICAgICAgY2hhciAqYXJnOwotICAgICAgICBzdHIgPSBwc3RyLmJ1ZjsKLSAgICAgICAgbGVuID0gcHN0ci5sZW47CisgICAgaWYgKG9iX2FyZyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChQeUFyZ19QYXJzZShvYl9hcmcsICJ3Kjppb2N0bCIsICZwc3RyKSkgeworICAgICAgICAgICAgY2hhciAqYXJnOworICAgICAgICAgICAgc3RyID0gcHN0ci5idWY7CisgICAgICAgICAgICBsZW4gPSBwc3RyLmxlbjsKIAotICAgICAgICBpZiAobXV0YXRlX2FyZykgewotICAgICAgICAgICAgaWYgKGxlbiA8PSBJT0NUTF9CVUZTWikgewotICAgICAgICAgICAgICAgIG1lbWNweShidWYsIHN0ciwgbGVuKTsKLSAgICAgICAgICAgICAgICBidWZbbGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYXJnID0gYnVmOworICAgICAgICAgICAgaWYgKG11dGF0ZV9hcmcpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDw9IElPQ1RMX0JVRlNaKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShidWYsIHN0ciwgbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBidWY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhcmcgPSBzdHI7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXJnID0gc3RyOworICAgICAgICAgICAgICAgIGlmIChsZW4gPiBJT0NUTF9CVUZTWikgeworICAgICAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW9jdGwgc3RyaW5nIGFyZyB0b28gbG9uZyIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShidWYsIHN0ciwgbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICBhcmcgPSBidWY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJ1ZiA9PSBhcmcpIHsKKyAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTIC8qIHRoaW5rIGFycmF5LnJlc2l6ZSgpICovCisgICAgICAgICAgICAgICAgcmV0ID0gaW9jdGwoZmQsIGNvZGUsIGFyZyk7CisgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldCA9IGlvY3RsKGZkLCBjb2RlLCBhcmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG11dGF0ZV9hcmcgJiYgKGxlbiA8PSBJT0NUTF9CVUZTWikpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoc3RyLCBidWYsIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwc3RyKTsgLyogTm8gZnVydGhlciBhY2Nlc3MgdG8gc3RyIGJlbG93IHRoaXMgcG9pbnQgKi8KKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG11dGF0ZV9hcmcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIGxlbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKFB5QXJnX1BhcnNlKG9iX2FyZywgInMqOmlvY3RsIiwgJnBzdHIpKSB7CisgICAgICAgICAgICBzdHIgPSBwc3RyLmJ1ZjsKKyAgICAgICAgICAgIGxlbiA9IHBzdHIubGVuOwogICAgICAgICAgICAgaWYgKGxlbiA+IElPQ1RMX0JVRlNaKSB7CiAgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcHN0cik7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJpb2N0bCBzdHJpbmcgYXJnIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpb2N0bCBzdHJpbmcgYXJnIHRvbyBsb25nIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoYnVmLCBzdHIsIGxlbik7Ci0gICAgICAgICAgICAgICAgYnVmW2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGFyZyA9IGJ1ZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoYnVmID09IGFyZykgewotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyAvKiB0aGluayBhcnJheS5yZXNpemUoKSAqLwotICAgICAgICAgICAgcmV0ID0gaW9jdGwoZmQsIGNvZGUsIGFyZyk7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBzdHIsIGxlbik7CisgICAgICAgICAgICBidWZbbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICByZXQgPSBpb2N0bChmZCwgY29kZSwgYnVmKTsKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXQgPSBpb2N0bChmZCwgY29kZSwgYXJnKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobXV0YXRlX2FyZyAmJiAobGVuIDw9IElPQ1RMX0JVRlNaKSkgewotICAgICAgICAgICAgbWVtY3B5KHN0ciwgYnVmLCBsZW4pOwotICAgICAgICB9Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBzdHIpOyAvKiBObyBmdXJ0aGVyIGFjY2VzcyB0byBzdHIgYmVsb3cgdGhpcyBwb2ludCAqLwotICAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG11dGF0ZV9hcmcpIHsKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmV0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcHN0cik7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcHN0cik7CiAgICAgICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIGxlbik7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBQeUVycl9DbGVhcigpOwotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJklzKjppb2N0bCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29udl9kZXNjcmlwdG9yLCAmZmQsICZjb2RlLCAmcHN0cikpIHsKLSAgICAgICAgc3RyID0gcHN0ci5idWY7Ci0gICAgICAgIGxlbiA9IHBzdHIubGVuOwotICAgICAgICBpZiAobGVuID4gSU9DVExfQlVGU1opIHsKLSAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBzdHIpOwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImlvY3RsIHN0cmluZyBhcmcgdG9vIGxvbmciKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlKG9iX2FyZywKKyAgICAgICAgICAgICAiaTtpb2N0bCByZXF1aXJlcyBhIGZpbGUgb3IgZmlsZSBkZXNjcmlwdG9yLCIKKyAgICAgICAgICAgICAiIGFuIGludGVnZXIgYW5kIG9wdGlvbmFsbHkgYW4gaW50ZWdlciBvciBidWZmZXIgYXJndW1lbnQiLAorICAgICAgICAgICAgICZhcmcpKSB7CisgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGJ1Ziwgc3RyLCBsZW4pOwotICAgICAgICBidWZbbGVuXSA9ICdcMCc7Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmV0ID0gaW9jdGwoZmQsIGNvZGUsIGJ1Zik7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwc3RyKTsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBzdHIpOwotICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIGxlbik7Ci0gICAgfQotCi0gICAgUHlFcnJfQ2xlYXIoKTsKLSAgICBhcmcgPSAwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgIk8mSXxpO2lvY3RsIHJlcXVpcmVzIGEgZmlsZSBvciBmaWxlIGRlc2NyaXB0b3IsIgotICAgICAgICAgIiBhbiBpbnRlZ2VyIGFuZCBvcHRpb25hbGx5IGFuIGludGVnZXIgb3IgYnVmZmVyIGFyZ3VtZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29udl9kZXNjcmlwdG9yLCAmZmQsICZjb2RlLCAmYXJnKSkgewotICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8vIEZhbGwtdGhyb3VnaCB0byBvdXRzaWRlIHRoZSAnaWYnIHN0YXRlbWVudC4KICAgICB9CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJldCA9IGlvY3RsKGZkLCBjb2RlLCBhcmcpOwpAQCAtMjE4LDUyICsyNjUsMjUgQEAKICN1bmRlZiBJT0NUTF9CVUZTWgogfQogCi1QeURvY19TVFJWQVIoaW9jdGxfZG9jLAotImlvY3RsKGZkLCBvcFssIGFyZ1ssIG11dGF0ZV9mbGFnXV0pXG5cCi1cblwKLVBlcmZvcm0gdGhlIG9wZXJhdGlvbiBvcCBvbiBmaWxlIGRlc2NyaXB0b3IgZmQuICBUaGUgdmFsdWVzIHVzZWQgZm9yIG9wXG5cCi1hcmUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQsIGFuZCBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50cyBpbiB0aGVcblwKLWZjbnRsIG9yIHRlcm1pb3MgbGlicmFyeSBtb2R1bGVzLCB1c2luZyB0aGUgc2FtZSBuYW1lcyBhcyB1c2VkIGluIHRoZVxuXAotcmVsZXZhbnQgQyBoZWFkZXIgZmlsZXMuXG5cCi1cblwKLVRoZSBhcmd1bWVudCBhcmcgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byAwOyBpdCBtYXkgYmUgYW4gaW50IG9yIGFcblwKLWJ1ZmZlciBjb250YWluaW5nIGNoYXJhY3RlciBkYXRhIChtb3N0IGxpa2VseSBhIHN0cmluZyBvciBhbiBhcnJheSkuIFxuXAotXG5cCi1JZiB0aGUgYXJndW1lbnQgaXMgYSBtdXRhYmxlIGJ1ZmZlciAoc3VjaCBhcyBhbiBhcnJheSkgYW5kIGlmIHRoZVxuXAotbXV0YXRlX2ZsYWcgYXJndW1lbnQgKHdoaWNoIGlzIG9ubHkgYWxsb3dlZCBpbiB0aGlzIGNhc2UpIGlzIHRydWUgdGhlbiB0aGVcblwKLWJ1ZmZlciBpcyAoaW4gZWZmZWN0KSBwYXNzZWQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIGNoYW5nZXMgbWFkZSBieVxuXAotdGhlIE9TIHdpbGwgYmUgcmVmbGVjdGVkIGluIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGFmdGVyIHRoZSBjYWxsIGhhc1xuXAotcmV0dXJuZWQuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHJldHVybmVkIGJ5IHRoZSBpb2N0bCBzeXN0ZW1cblwKLWNhbGwuXG5cCi1cblwKLUlmIHRoZSBhcmd1bWVudCBpcyBhIG11dGFibGUgYnVmZmVyIGFuZCB0aGUgbXV0YWJsZV9mbGFnIGFyZ3VtZW50IGlzIG5vdFxuXAotcGFzc2VkIG9yIGlzIGZhbHNlLCB0aGUgYmVoYXZpb3IgaXMgYXMgaWYgYSBzdHJpbmcgaGFkIGJlZW4gcGFzc2VkLiAgVGhpc1xuXAotYmVoYXZpb3Igd2lsbCBjaGFuZ2UgaW4gZnV0dXJlIHJlbGVhc2VzIG9mIFB5dGhvbi5cblwKLVxuXAotSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGltbXV0YWJsZSBidWZmZXIgKG1vc3QgbGlrZWx5IGEgc3RyaW5nKSB0aGVuIGEgY29weVxuXAotb2YgdGhlIGJ1ZmZlciBpcyBwYXNzZWQgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgYVxuXAotc3RyaW5nIG9mIHRoZSBzYW1lIGxlbmd0aCBjb250YWluaW5nIHdoYXRldmVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHB1dCBpblxuXAotdGhlIGJ1ZmZlci4gIFRoZSBsZW5ndGggb2YgdGhlIGFyZyBidWZmZXIgaW4gdGhpcyBjYXNlIGlzIG5vdCBhbGxvd2VkIHRvXG5cCi1leGNlZWQgMTAyNCBieXRlcy5cblwKLVxuXAotSWYgdGhlIGFyZyBnaXZlbiBpcyBhbiBpbnRlZ2VyIG9yIGlmIG5vbmUgaXMgc3BlY2lmaWVkLCB0aGUgcmVzdWx0IHZhbHVlIGlzXG5cCi1hbiBpbnRlZ2VyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgaW9jdGwgY2FsbCBpbiB0aGUgQ1xuXAotY29kZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2ZjbnRsLmZsb2NrCiAKKyAgICBmZDogb2JqZWN0KHR5cGU9J2ludCcsIGNvbnZlcnRlcj0nY29udl9kZXNjcmlwdG9yJykKKyAgICBvcGVyYXRpb24gYXMgY29kZTogaW50CisgICAgLwogCi0vKiBmbG9jayhmZCwgb3BlcmF0aW9uKSAqLworUGVyZm9ybSB0aGUgbG9jayBvcGVyYXRpb24gYG9wZXJhdGlvbmAgb24gZmlsZSBkZXNjcmlwdG9yIGBmZGAuCisKK1NlZSB0aGUgVW5peCBtYW51YWwgcGFnZSBmb3IgZmxvY2soMikgZm9yIGRldGFpbHMgKE9uIHNvbWUgc3lzdGVtcywgdGhpcworZnVuY3Rpb24gaXMgZW11bGF0ZWQgdXNpbmcgZmNudGwoKSkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1mY250bF9mbG9jayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitmY250bF9mbG9ja19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgaW50IGNvZGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODQwNTllMmIzN2QyZmM2NCBpbnB1dD1iNzBhMGE0MWNhMjJhOGEwXSovCiB7Ci0gICAgaW50IGZkOwotICAgIGludCBjb2RlOwogICAgIGludCByZXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpmbG9jayIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZfZGVzY3JpcHRvciwgJmZkLCAmY29kZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAjaWZkZWYgSEFWRV9GTE9DSwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXQgPSBmbG9jayhmZCwgY29kZSk7CkBAIC0yOTksMjkgKzMxOSw1MCBAQAogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihmbG9ja19kb2MsCi0iZmxvY2soZmQsIG9wZXJhdGlvbilcblwKLVxuXAotUGVyZm9ybSB0aGUgbG9jayBvcGVyYXRpb24gb3Agb24gZmlsZSBkZXNjcmlwdG9yIGZkLiAgU2VlIHRoZSBVbml4IFxuXAotbWFudWFsIHBhZ2UgZm9yIGZsb2NrKDIpIGZvciBkZXRhaWxzLiAgKE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpc1xuXAotZW11bGF0ZWQgdXNpbmcgZmNudGwoKS4pIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2ZjbnRsLmxvY2tmCiAKLS8qIGxvY2tmKGZkLCBvcGVyYXRpb24pICovCisgICAgZmQ6IG9iamVjdCh0eXBlPSdpbnQnLCBjb252ZXJ0ZXI9J2NvbnZfZGVzY3JpcHRvcicpCisgICAgY21kIGFzIGNvZGU6IGludAorICAgIGxlbiBhcyBsZW5vYmo6IG9iamVjdChjX2RlZmF1bHQ9J05VTEwnKSA9IDAKKyAgICBzdGFydCBhcyBzdGFydG9iajogb2JqZWN0KGNfZGVmYXVsdD0nTlVMTCcpID0gMAorICAgIHdoZW5jZTogaW50ID0gMAorICAgIC8KKworQSB3cmFwcGVyIGFyb3VuZCB0aGUgZmNudGwoKSBsb2NraW5nIGNhbGxzLgorCitgZmRgIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gbG9jayBvciB1bmxvY2ssIGFuZCBvcGVyYXRpb24gaXMgb25lCitvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAgIExPQ0tfVU4gLSB1bmxvY2sKKyAgICBMT0NLX1NIIC0gYWNxdWlyZSBhIHNoYXJlZCBsb2NrCisgICAgTE9DS19FWCAtIGFjcXVpcmUgYW4gZXhjbHVzaXZlIGxvY2sKKworV2hlbiBvcGVyYXRpb24gaXMgTE9DS19TSCBvciBMT0NLX0VYLCBpdCBjYW4gYWxzbyBiZSBiaXR3aXNlIE9SZWQgd2l0aAorTE9DS19OQiB0byBhdm9pZCBibG9ja2luZyBvbiBsb2NrIGFjcXVpc2l0aW9uLiAgSWYgTE9DS19OQiBpcyB1c2VkIGFuZCB0aGUKK2xvY2sgY2Fubm90IGJlIGFjcXVpcmVkLCBhbiBPU0Vycm9yIHdpbGwgYmUgcmFpc2VkIGFuZCB0aGUgZXhjZXB0aW9uIHdpbGwKK2hhdmUgYW4gZXJybm8gYXR0cmlidXRlIHNldCB0byBFQUNDRVMgb3IgRUFHQUlOIChkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGluZworc3lzdGVtIC0tIGZvciBwb3J0YWJpbGl0eSwgY2hlY2sgZm9yIGVpdGhlciB2YWx1ZSkuCisKK2BsZW5gIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gbG9jaywgd2l0aCB0aGUgZGVmYXVsdCBtZWFuaW5nIHRvIGxvY2sgdG8KK0VPRi4gIGBzdGFydGAgaXMgdGhlIGJ5dGUgb2Zmc2V0LCByZWxhdGl2ZSB0byBgd2hlbmNlYCwgdG8gdGhhdCB0aGUgbG9jaworc3RhcnRzLiAgYHdoZW5jZWAgaXMgYXMgd2l0aCBmaWxlb2JqLnNlZWsoKSwgc3BlY2lmaWNhbGx5OgorCisgICAgMCAtIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlsZSAoU0VFS19TRVQpCisgICAgMSAtIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciBwb3NpdGlvbiAoU0VFS19DVVIpCisgICAgMiAtIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgKFNFRUtfRU5EKQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotZmNudGxfbG9ja2YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorZmNudGxfbG9ja2ZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBjb2RlLCBQeU9iamVjdCAqbGVub2JqLAorICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRvYmosIGludCB3aGVuY2UpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDk4NWU3YTE3MmU3NDYxYSBpbnB1dD0zYTVkYzAxYjA0MzcxZjFhXSovCiB7Ci0gICAgaW50IGZkLCBjb2RlLCByZXQsIHdoZW5jZSA9IDA7Ci0gICAgUHlPYmplY3QgKmxlbm9iaiA9IE5VTEwsICpzdGFydG9iaiA9IE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maXxPT2k6bG9ja2YiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb252X2Rlc2NyaXB0b3IsICZmZCwgJmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZsZW5vYmosICZzdGFydG9iaiwgJndoZW5jZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGludCByZXQ7CiAKICNpZm5kZWYgTE9DS19TSAogI2RlZmluZSBMT0NLX1NIICAgICAgICAgMSAgICAgICAvKiBzaGFyZWQgbG9jayAqLwpAQCAtMzc0LDQzICs0MTUsMTcgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIobG9ja2ZfZG9jLAotImxvY2tmIChmZCwgb3BlcmF0aW9uLCBsZW5ndGg9MCwgc3RhcnQ9MCwgd2hlbmNlPTApXG5cCi1cblwKLVRoaXMgaXMgZXNzZW50aWFsbHkgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZmNudGwoKSBsb2NraW5nIGNhbGxzLiAgZmQgaXMgdGhlXG5cCi1maWxlIGRlc2NyaXB0b3Igb2YgdGhlIGZpbGUgdG8gbG9jayBvciB1bmxvY2ssIGFuZCBvcGVyYXRpb24gaXMgb25lIG9mIHRoZVxuXAotZm9sbG93aW5nIHZhbHVlczpcblwKLVxuXAotICAgIExPQ0tfVU4gLSB1bmxvY2tcblwKLSAgICBMT0NLX1NIIC0gYWNxdWlyZSBhIHNoYXJlZCBsb2NrXG5cCi0gICAgTE9DS19FWCAtIGFjcXVpcmUgYW4gZXhjbHVzaXZlIGxvY2tcblwKLVxuXAotV2hlbiBvcGVyYXRpb24gaXMgTE9DS19TSCBvciBMT0NLX0VYLCBpdCBjYW4gYWxzbyBiZSBiaXR3aXNlIE9SZWQgd2l0aFxuXAotTE9DS19OQiB0byBhdm9pZCBibG9ja2luZyBvbiBsb2NrIGFjcXVpc2l0aW9uLiAgSWYgTE9DS19OQiBpcyB1c2VkIGFuZCB0aGVcblwKLWxvY2sgY2Fubm90IGJlIGFjcXVpcmVkLCBhbiBJT0Vycm9yIHdpbGwgYmUgcmFpc2VkIGFuZCB0aGUgZXhjZXB0aW9uIHdpbGxcblwKLWhhdmUgYW4gZXJybm8gYXR0cmlidXRlIHNldCB0byBFQUNDRVMgb3IgRUFHQUlOIChkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGluZ1xuXAotc3lzdGVtIC0tIGZvciBwb3J0YWJpbGl0eSwgY2hlY2sgZm9yIGVpdGhlciB2YWx1ZSkuXG5cCi1cblwKLWxlbmd0aCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGxvY2ssIHdpdGggdGhlIGRlZmF1bHQgbWVhbmluZyB0byBsb2NrIHRvXG5cCi1FT0YuICBzdGFydCBpcyB0aGUgYnl0ZSBvZmZzZXQsIHJlbGF0aXZlIHRvIHdoZW5jZSwgdG8gdGhhdCB0aGUgbG9ja1xuXAotc3RhcnRzLiAgd2hlbmNlIGlzIGFzIHdpdGggZmlsZW9iai5zZWVrKCksIHNwZWNpZmljYWxseTpcblwKLVxuXAotICAgIDAgLSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgKFNFRUtfU0VUKVxuXAotICAgIDEgLSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBidWZmZXIgcG9zaXRpb24gKFNFRUtfQ1VSKVxuXAotICAgIDIgLSByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIChTRUVLX0VORCkiKTsKLQogLyogTGlzdCBvZiBmdW5jdGlvbnMgKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIGZjbnRsX21ldGhvZHNbXSA9IHsKLSAgICB7ImZjbnRsIiwgICAgICAgICAgIGZjbnRsX2ZjbnRsLCBNRVRIX1ZBUkFSR1MsIGZjbnRsX2RvY30sCi0gICAgeyJpb2N0bCIsICAgICAgICAgICBmY250bF9pb2N0bCwgTUVUSF9WQVJBUkdTLCBpb2N0bF9kb2N9LAotICAgIHsiZmxvY2siLCAgICAgICAgICAgZmNudGxfZmxvY2ssIE1FVEhfVkFSQVJHUywgZmxvY2tfZG9jfSwKLSAgICB7ImxvY2tmIiwgICAgICAgZmNudGxfbG9ja2YsIE1FVEhfVkFSQVJHUywgbG9ja2ZfZG9jfSwKLSAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICAgIEZDTlRMX0ZDTlRMX01FVEhPRERFRgorICAgIEZDTlRMX0lPQ1RMX01FVEhPRERFRgorICAgIEZDTlRMX0ZMT0NLX01FVEhPRERFRgorICAgIEZDTlRMX0xPQ0tGX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMfSAgLyogc2VudGluZWwgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nY21vZHVsZS5jIGIvTW9kdWxlcy9nY21vZHVsZS5jCmluZGV4IDliYjM2NjYuLmNiNzIyMmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL2djbW9kdWxlLmMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiICAgICAgICAvKiBmb3IgUHlGcmFtZV9DbGVhckZyZWVMaXN0ICovCisjaW5jbHVkZSAicHl0aW1lLmgiICAgICAgICAgICAgIC8qIGZvciBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCkgKi8KIAogLyogR2V0IGFuIG9iamVjdCdzIEdDIGhlYWQgKi8KICNkZWZpbmUgQVNfR0MobykgKChQeUdDX0hlYWQgKikobyktMSkKQEAgLTE2Niw3ICsxNjcsNiBAQAogICAgICAgICAgICAgICAgIERFQlVHX1VOQ09MTEVDVEFCTEUgfCBcCiAgICAgICAgICAgICAgICAgREVCVUdfU0FWRUFMTAogc3RhdGljIGludCBkZWJ1ZzsKLXN0YXRpYyBQeU9iamVjdCAqdG1vZCA9IE5VTEw7CiAKIC8qIFJ1bm5pbmcgc3RhdHMgcGVyIGdlbmVyYXRpb24gKi8KIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHsKQEAgLTg5NCwyNiArODk0LDYgQEAKICAgICAodm9pZClQeVNldF9DbGVhckZyZWVMaXN0KCk7CiB9CiAKLXN0YXRpYyBkb3VibGUKLWdldF90aW1lKHZvaWQpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IDA7Ci0gICAgaWYgKHRtb2QgIT0gTlVMTCkgewotICAgICAgICBfUHlfSURFTlRJRklFUih0aW1lKTsKLQotICAgICAgICBQeU9iamVjdCAqZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodG1vZCwgJlB5SWRfdGltZSwgTlVMTCk7Ci0gICAgICAgIGlmIChmID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUHlGbG9hdF9DaGVjayhmKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBQeUZsb2F0X0FzRG91YmxlKGYpOwotICAgICAgICAgICAgUHlfREVDUkVGKGYpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8qIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24uICBSZWFkIHRoaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlCiAgKiBjb2xsZWN0aW9uIHByb2Nlc3Mgd29ya3MuICovCiBzdGF0aWMgUHlfc3NpemVfdApAQCAtOTI4LDcgKzkwOCw4IEBACiAgICAgUHlHQ19IZWFkIHVucmVhY2hhYmxlOyAvKiBub24tcHJvYmxlbWF0aWMgdW5yZWFjaGFibGUgdHJhc2ggKi8KICAgICBQeUdDX0hlYWQgZmluYWxpemVyczsgIC8qIG9iamVjdHMgd2l0aCwgJiByZWFjaGFibGUgZnJvbSwgX19kZWxfXyAqLwogICAgIFB5R0NfSGVhZCAqZ2M7Ci0gICAgZG91YmxlIHQxID0gMC4wOworICAgIF9QeVRpbWVfdCB0MSA9IDA7ICAgLyogaW5pdGlhbGl6ZSB0byBwcmV2ZW50IGEgY29tcGlsZXIgd2FybmluZyAqLworCiAgICAgc3RydWN0IGdjX2dlbmVyYXRpb25fc3RhdHMgKnN0YXRzID0gJmdlbmVyYXRpb25fc3RhdHNbZ2VuZXJhdGlvbl07CiAKICAgICBpZiAoZGVidWcgJiBERUJVR19TVEFUUykgewpAQCAtOTM2LDkgKzkxNywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uKTsKICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoImdjOiBvYmplY3RzIGluIGVhY2ggZ2VuZXJhdGlvbjoiKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HRU5FUkFUSU9OUzsgaSsrKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwKKyAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiICV6ZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY19saXN0X3NpemUoR0VOX0hFQUQoaSkpKTsKLSAgICAgICAgdDEgPSBnZXRfdGltZSgpOworICAgICAgICB0MSA9IF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKTsKKwogICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiXG4iKTsKICAgICB9CiAKQEAgLTEwNDIsMTkgKzEwMjQsMTYgQEAKICAgICAgICAgICAgIGRlYnVnX2N5Y2xlKCJ1bmNvbGxlY3RhYmxlIiwgRlJPTV9HQyhnYykpOwogICAgIH0KICAgICBpZiAoZGVidWcgJiBERUJVR19TVEFUUykgewotICAgICAgICBkb3VibGUgdDIgPSBnZXRfdGltZSgpOworICAgICAgICBfUHlUaW1lX3QgdDIgPSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCk7CisKICAgICAgICAgaWYgKG0gPT0gMCAmJiBuID09IDApCiAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiZ2M6IGRvbmUiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoCi0gICAgICAgICAgICAgICAgImdjOiBkb25lLCAiCi0gICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgdW5yZWFjaGFibGUsICIKLSAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZCB1bmNvbGxlY3RhYmxlIiwKKyAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigKKyAgICAgICAgICAgICAgICAiZ2M6IGRvbmUsICV6ZCB1bnJlYWNoYWJsZSwgJXpkIHVuY29sbGVjdGFibGUiLAogICAgICAgICAgICAgICAgIG4rbSwgbik7Ci0gICAgICAgIGlmICh0MSAmJiB0MikgewotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiwgJS40ZnMgZWxhcHNlZCIsIHQyLXQxKTsKLSAgICAgICAgfQotICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiLlxuIik7CisgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIsICUuNGZzIGVsYXBzZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfQXNTZWNvbmRzRG91YmxlKHQyIC0gdDEpKTsKICAgICB9CiAKICAgICAvKiBBcHBlbmQgaW5zdGFuY2VzIGluIHRoZSB1bmNvbGxlY3RhYmxlIHNldCB0byBhIFB5dGhvbgpAQCAtMTU4MSwxOCArMTU2MCw2IEBACiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiY2FsbGJhY2tzIiwgY2FsbGJhY2tzKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogSW1wb3J0aW5nIGNhbid0IGJlIGRvbmUgaW4gY29sbGVjdCgpIGJlY2F1c2UgY29sbGVjdCgpCi0gICAgICogY2FuIGJlIGNhbGxlZCB2aWEgUHlHQ19Db2xsZWN0KCkgaW4gUHlfRmluYWxpemUoKS4KLSAgICAgKiBUaGlzIHdvdWxkbid0IGJlIGEgcHJvYmxlbSwgZXhjZXB0IHRoYXQgPGluaXRpYWxpemVkPiBpcwotICAgICAqIHJlc2V0IHRvIDAgYmVmb3JlIGNhbGxpbmcgY29sbGVjdCB3aGljaCB0cmlwcyB1cAotICAgICAqIHRoZSBpbXBvcnQgYW5kIHRyaWdnZXJzIGFuIGFzc2VydGlvbi4KLSAgICAgKi8KLSAgICBpZiAodG1vZCA9PSBOVUxMKSB7Ci0gICAgICAgIHRtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrKCJ0aW1lIik7Ci0gICAgICAgIGlmICh0bW9kID09IE5VTEwpCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgIH0KLQogI2RlZmluZSBBRERfSU5UKE5BTUUpIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAjTkFNRSwgTkFNRSkgPCAwKSByZXR1cm4gTlVMTAogICAgIEFERF9JTlQoREVCVUdfU1RBVFMpOwogICAgIEFERF9JTlQoREVCVUdfQ09MTEVDVEFCTEUpOwpAQCAtMTY4MSw3ICsxNjQ4LDYgQEAKIF9QeUdDX0Zpbmkodm9pZCkKIHsKICAgICBQeV9DTEVBUihjYWxsYmFja3MpOwotICAgIFB5X0NMRUFSKHRtb2QpOwogfQogCiAvKiBmb3IgZGVidWdnaW5nICovCkBAIC0xNzE1LDE1ICsxNjgxLDE5IEBACiAgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKG9wKTsKIH0KIAotUHlPYmplY3QgKgotX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplX3QgYmFzaWNzaXplKQorc3RhdGljIFB5T2JqZWN0ICoKK19QeU9iamVjdF9HQ19BbGxvYyhpbnQgdXNlX2NhbGxvYywgc2l6ZV90IGJhc2ljc2l6ZSkKIHsKICAgICBQeU9iamVjdCAqb3A7CiAgICAgUHlHQ19IZWFkICpnOworICAgIHNpemVfdCBzaXplOwogICAgIGlmIChiYXNpY3NpemUgPiBQWV9TU0laRV9UX01BWCAtIHNpemVvZihQeUdDX0hlYWQpKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBnID0gKFB5R0NfSGVhZCAqKVB5T2JqZWN0X01BTExPQygKLSAgICAgICAgc2l6ZW9mKFB5R0NfSGVhZCkgKyBiYXNpY3NpemUpOworICAgIHNpemUgPSBzaXplb2YoUHlHQ19IZWFkKSArIGJhc2ljc2l6ZTsKKyAgICBpZiAodXNlX2NhbGxvYykKKyAgICAgICAgZyA9IChQeUdDX0hlYWQgKilQeU9iamVjdF9DYWxsb2MoMSwgc2l6ZSk7CisgICAgZWxzZQorICAgICAgICBnID0gKFB5R0NfSGVhZCAqKVB5T2JqZWN0X01hbGxvYyhzaXplKTsKICAgICBpZiAoZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBnLT5nYy5nY19yZWZzID0gMDsKQEAgLTE3NDMsNiArMTcxMywxOCBAQAogfQogCiBQeU9iamVjdCAqCitfUHlPYmplY3RfR0NfTWFsbG9jKHNpemVfdCBiYXNpY3NpemUpCit7CisgICAgcmV0dXJuIF9QeU9iamVjdF9HQ19BbGxvYygwLCBiYXNpY3NpemUpOworfQorCitQeU9iamVjdCAqCitfUHlPYmplY3RfR0NfQ2FsbG9jKHNpemVfdCBiYXNpY3NpemUpCit7CisgICAgcmV0dXJuIF9QeU9iamVjdF9HQ19BbGxvYygxLCBiYXNpY3NpemUpOworfQorCitQeU9iamVjdCAqCiBfUHlPYmplY3RfR0NfTmV3KFB5VHlwZU9iamVjdCAqdHApCiB7CiAgICAgUHlPYmplY3QgKm9wID0gX1B5T2JqZWN0X0dDX01hbGxvYyhfUHlPYmplY3RfU0laRSh0cCkpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nZXRhZGRyaW5mby5jIGIvTW9kdWxlcy9nZXRhZGRyaW5mby5jCmluZGV4IGUyYTJlZGYuLmQ4MTY3ZWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2V0YWRkcmluZm8uYworKysgYi9Nb2R1bGVzL2dldGFkZHJpbmZvLmMKQEAgLTE1LDE0ICsxNSwxNCBAQAogICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEdBSV9BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKICAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEdBSV9BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAogICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKICAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEdBSV9BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBHQUlfQU5ZIFdBWQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2dldHBhdGguYyBiL01vZHVsZXMvZ2V0cGF0aC5jCmluZGV4IDEzZTM4MTcuLjE4ZGViNjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2V0cGF0aC5jCisrKyBiL01vZHVsZXMvZ2V0cGF0aC5jCkBAIC0xMDEsMjUgKzEwMSw4IEBACiAjZW5kaWYKIAogCi0jaWZuZGVmIFZFUlNJT04KLSNkZWZpbmUgVkVSU0lPTiAiMi4xIgotI2VuZGlmCi0KLSNpZm5kZWYgVlBBVEgKLSNkZWZpbmUgVlBBVEggIi4iCi0jZW5kaWYKLQotI2lmbmRlZiBQUkVGSVgKLSMgIGRlZmluZSBQUkVGSVggIi91c3IvbG9jYWwiCi0jZW5kaWYKLQotI2lmbmRlZiBFWEVDX1BSRUZJWAotI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKLSNlbmRpZgotCi0jaWZuZGVmIFBZVEhPTlBBVEgKLSNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICI6IiBcCi0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorI2lmICFkZWZpbmVkKFBSRUZJWCkgfHwgIWRlZmluZWQoRVhFQ19QUkVGSVgpIHx8ICFkZWZpbmVkKFZFUlNJT04pIHx8ICFkZWZpbmVkKFZQQVRIKQorI2Vycm9yICJQUkVGSVgsIEVYRUNfUFJFRklYLCBWRVJTSU9OLCBhbmQgVlBBVEggbXVzdCBiZSBjb25zdGFudCBkZWZpbmVkIgogI2VuZGlmCiAKICNpZm5kZWYgTEFORE1BUksKQEAgLTEzMSw2ICsxMTQsMjMgQEAKIHN0YXRpYyB3Y2hhcl90IHByb2dwYXRoW01BWFBBVEhMRU4rMV07CiBzdGF0aWMgd2NoYXJfdCAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKIAorLyogR2V0IGZpbGUgc3RhdHVzLiBFbmNvZGUgdGhlIHBhdGggdG8gdGhlIGxvY2FsZSBlbmNvZGluZy4gKi8KKworc3RhdGljIGludAorX1B5X3dzdGF0KGNvbnN0IHdjaGFyX3QqIHBhdGgsIHN0cnVjdCBzdGF0ICpidWYpCit7CisgICAgaW50IGVycjsKKyAgICBjaGFyICpmbmFtZTsKKyAgICBmbmFtZSA9IFB5X0VuY29kZUxvY2FsZShwYXRoLCBOVUxMKTsKKyAgICBpZiAoZm5hbWUgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlcnIgPSBzdGF0KGZuYW1lLCBidWYpOworICAgIFB5TWVtX0ZyZWUoZm5hbWUpOworICAgIHJldHVybiBlcnI7Cit9CisKIHN0YXRpYyB2b2lkCiByZWR1Y2Uod2NoYXJfdCAqZGlyKQogewpAQCAtMTUzLDE0ICsxNTMsMTQgQEAKIAogCiBzdGF0aWMgaW50Ci1pc21vZHVsZSh3Y2hhcl90ICpmaWxlbmFtZSkgICAgICAgIC8qIElzIG1vZHVsZSAtLSBjaGVjayBmb3IgLnB5Yy8ucHlvIHRvbyAqLworaXNtb2R1bGUod2NoYXJfdCAqZmlsZW5hbWUpICAgICAgICAvKiBJcyBtb2R1bGUgLS0gY2hlY2sgZm9yIC5weWMgdG9vICovCiB7CiAgICAgaWYgKGlzZmlsZShmaWxlbmFtZSkpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgLyogQ2hlY2sgZm9yIHRoZSBjb21waWxlZCB2ZXJzaW9uIG9mIHByZWZpeC4gKi8KICAgICBpZiAod2NzbGVuKGZpbGVuYW1lKSA8IE1BWFBBVEhMRU4pIHsKLSAgICAgICAgd2NzY2F0KGZpbGVuYW1lLCBQeV9PcHRpbWl6ZUZsYWcgPyBMIm8iIDogTCJjIik7CisgICAgICAgIHdjc2NhdChmaWxlbmFtZSwgTCJjIik7CiAgICAgICAgIGlmIChpc2ZpbGUoZmlsZW5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpAQCAtMzM2LDcgKzMzNiw3IEBACiAgICAgam9pbnBhdGgocHJlZml4LCBMIk1vZHVsZXMvU2V0dXAiKTsKICAgICBpZiAoaXNmaWxlKHByZWZpeCkpIHsKICAgICAgICAgLyogQ2hlY2sgVlBBVEggdG8gc2VlIGlmIGFyZ3YwX3BhdGggaXMgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4gKi8KLSAgICAgICAgdnBhdGggPSBfUHlfY2hhcjJ3Y2hhcihWUEFUSCwgTlVMTCk7CisgICAgICAgIHZwYXRoID0gUHlfRGVjb2RlTG9jYWxlKFZQQVRILCBOVUxMKTsKICAgICAgICAgaWYgKHZwYXRoICE9IE5VTEwpIHsKICAgICAgICAgICAgIHdjc25jcHkocHJlZml4LCBhcmd2MF9wYXRoLCBNQVhQQVRITEVOKTsKICAgICAgICAgICAgIHByZWZpeFtNQVhQQVRITEVOXSA9IEwnXDAnOwpAQCAtNDkxLDEwICs0OTEsMTAgQEAKICAgICB3Y2hhcl90ICpfcHl0aG9ucGF0aCwgKl9wcmVmaXgsICpfZXhlY19wcmVmaXg7CiAgICAgd2NoYXJfdCAqbGliX3B5dGhvbjsKIAotICAgIF9weXRob25wYXRoID0gX1B5X2NoYXIyd2NoYXIoUFlUSE9OUEFUSCwgTlVMTCk7Ci0gICAgX3ByZWZpeCA9IF9QeV9jaGFyMndjaGFyKFBSRUZJWCwgTlVMTCk7Ci0gICAgX2V4ZWNfcHJlZml4ID0gX1B5X2NoYXIyd2NoYXIoRVhFQ19QUkVGSVgsIE5VTEwpOwotICAgIGxpYl9weXRob24gPSBfUHlfY2hhcjJ3Y2hhcigibGliL3B5dGhvbiIgVkVSU0lPTiwgTlVMTCk7CisgICAgX3B5dGhvbnBhdGggPSBQeV9EZWNvZGVMb2NhbGUoUFlUSE9OUEFUSCwgTlVMTCk7CisgICAgX3ByZWZpeCA9IFB5X0RlY29kZUxvY2FsZShQUkVGSVgsIE5VTEwpOworICAgIF9leGVjX3ByZWZpeCA9IFB5X0RlY29kZUxvY2FsZShFWEVDX1BSRUZJWCwgTlVMTCk7CisgICAgbGliX3B5dGhvbiA9IFB5X0RlY29kZUxvY2FsZSgibGliL3B5dGhvbiIgVkVSU0lPTiwgTlVMTCk7CiAKICAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXggfHwgIWxpYl9weXRob24pIHsKICAgICAgICAgUHlfRmF0YWxFcnJvcigKQEAgLTUwMyw3ICs1MDMsNyBAQAogICAgIH0KIAogICAgIGlmIChfcGF0aCkgewotICAgICAgICBwYXRoX2J1ZmZlciA9IF9QeV9jaGFyMndjaGFyKF9wYXRoLCBOVUxMKTsKKyAgICAgICAgcGF0aF9idWZmZXIgPSBQeV9EZWNvZGVMb2NhbGUoX3BhdGgsIE5VTEwpOwogICAgICAgICBwYXRoID0gcGF0aF9idWZmZXI7CiAgICAgfQogCkBAIC01ODQsNyArNTg0LDcgQEAKICAgICAgICAgKiogYmUgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgc28gd2UgdXNlIHRoZQogICAgICAgICAqKiBidWlsZC1kaXJlY3Rvcnktc3BlY2lmaWMgbG9naWMgdG8gZmluZCBMaWIgYW5kIHN1Y2guCiAgICAgICAgICovCi0gICAgICAgIHdjaGFyX3QqIHdidWYgPSBfUHlfY2hhcjJ3Y2hhcihtb2RQYXRoLCBOVUxMKTsKKyAgICAgICAgd2NoYXJfdCogd2J1ZiA9IFB5X0RlY29kZUxvY2FsZShtb2RQYXRoLCBOVUxMKTsKICAgICAgICAgaWYgKHdidWYgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2Fubm90IGRlY29kZSBmcmFtZXdvcmsgbG9jYXRpb24iKTsKICAgICAgICAgfQpAQCAtNzA5LDcgKzcwOSw3IEBACiAKICAgICBpZiAoX3J0cHlwYXRoICYmIF9ydHB5cGF0aFswXSAhPSAnXDAnKSB7CiAgICAgICAgIHNpemVfdCBydHB5cGF0aF9sZW47Ci0gICAgICAgIHJ0cHlwYXRoID0gX1B5X2NoYXIyd2NoYXIoX3J0cHlwYXRoLCAmcnRweXBhdGhfbGVuKTsKKyAgICAgICAgcnRweXBhdGggPSBQeV9EZWNvZGVMb2NhbGUoX3J0cHlwYXRoLCAmcnRweXBhdGhfbGVuKTsKICAgICAgICAgaWYgKHJ0cHlwYXRoICE9IE5VTEwpCiAgICAgICAgICAgICBidWZzeiArPSBydHB5cGF0aF9sZW4gKyAxOwogICAgIH0KQEAgLTg3NCw0ICs4NzQsMyBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9ncnBtb2R1bGUuYyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKaW5kZXggZGE3ODI1My4uM2ExMzRhMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9ncnBtb2R1bGUuYworKysgYi9Nb2R1bGVzL2dycG1vZHVsZS5jCkBAIC02LDYgKzYsMTIgQEAKIAogI2luY2x1ZGUgPGdycC5oPgogCisjaW5jbHVkZSAiY2xpbmljL2dycG1vZHVsZS5jLmgiCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgZ3JwCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1jYWRlNjNmMmVkMWJkOWY4XSovCisKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIHN0cnVjdF9ncm91cF90eXBlX2ZpZWxkc1tdID0gewogICAgeyJncl9uYW1lIiwgImdyb3VwIG5hbWUifSwKICAgIHsiZ3JfcGFzc3dkIiwgInBhc3N3b3JkIn0sCkBAIC03NiwxNCArODIsMjUgQEAKICAgICByZXR1cm4gdjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorZ3JwLmdldGdyZ2lkCisKKyAgICBpZDogb2JqZWN0CisKK1JldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgZm9yIHRoZSBnaXZlbiBudW1lcmljIGdyb3VwIElELgorCitJZiBpZCBpcyBub3QgdmFsaWQsIHJhaXNlIEtleUVycm9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotZ3JwX2dldGdyZ2lkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcHlvX2lkKQorZ3JwX2dldGdyZ2lkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmlkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTMwNzk3YzI4OTUwNGExYmEgaW5wdXQ9MTVmYTBlMmNjZjVjZGEyNV0qLwogewogICAgIFB5T2JqZWN0ICpweV9pbnRfaWQ7CiAgICAgZ2lkX3QgZ2lkOwogICAgIHN0cnVjdCBncm91cCAqcDsKIAotICAgIHB5X2ludF9pZCA9IFB5TnVtYmVyX0xvbmcocHlvX2lkKTsKKyAgICBweV9pbnRfaWQgPSBQeU51bWJlcl9Mb25nKGlkKTsKICAgICBpZiAoIXB5X2ludF9pZCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICghX1B5X0dpZF9Db252ZXJ0ZXIocHlfaW50X2lkLCAmZ2lkKSkgewpAQCAtMTAzLDIyICsxMjAsMzEgQEAKICAgICByZXR1cm4gbWtncmVudChwKTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWdycF9nZXRncm5hbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgY2hhciAqbmFtZTsKLSAgICBzdHJ1Y3QgZ3JvdXAgKnA7Ci0gICAgUHlPYmplY3QgKmFyZywgKmJ5dGVzLCAqcmV0dmFsID0gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK2dycC5nZXRncm5hbQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmdldGdybmFtIiwgJmFyZykpCisgICAgbmFtZTogdW5pY29kZQorCitSZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS4KKworSWYgbmFtZSBpcyBub3QgdmFsaWQsIHJhaXNlIEtleUVycm9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorZ3JwX2dldGdybmFtX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Njc5MDUwODZmNDAzYzIxYyBpbnB1dD0wOGRlZDI5YWZmYTNjODYzXSovCit7CisgICAgY2hhciAqbmFtZV9jaGFyczsKKyAgICBzdHJ1Y3QgZ3JvdXAgKnA7CisgICAgUHlPYmplY3QgKmJ5dGVzLCAqcmV0dmFsID0gTlVMTDsKKworICAgIGlmICgoYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KG5hbWUpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoKGJ5dGVzID0gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdChhcmcpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoYnl0ZXMsICZuYW1lLCBOVUxMKSA9PSAtMSkKKyAgICBpZiAoUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoYnl0ZXMsICZuYW1lX2NoYXJzLCBOVUxMKSA9PSAtMSkKICAgICAgICAgZ290byBvdXQ7CiAKLSAgICBpZiAoKHAgPSBnZXRncm5hbShuYW1lKSkgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3IsICJnZXRncm5hbSgpOiBuYW1lIG5vdCBmb3VuZDogJXMiLCBuYW1lKTsKKyAgICBpZiAoKHAgPSBnZXRncm5hbShuYW1lX2NoYXJzKSkgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3IsICJnZXRncm5hbSgpOiBuYW1lIG5vdCBmb3VuZDogJXMiLCBuYW1lX2NoYXJzKTsKICAgICAgICAgZ290byBvdXQ7CiAgICAgfQogICAgIHJldHZhbCA9IG1rZ3JlbnQocCk7CkBAIC0xMjcsOCArMTUzLDE4IEBACiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorZ3JwLmdldGdyYWxsCisKK1JldHVybiBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBncm91cCBlbnRyaWVzLCBpbiBhcmJpdHJhcnkgb3JkZXIuCisKK0FuIGVudHJ5IHdob3NlIG5hbWUgc3RhcnRzIHdpdGggJysnIG9yICctJyByZXByZXNlbnRzIGFuIGluc3RydWN0aW9uCit0byB1c2UgWVAvTklTIGFuZCBtYXkgbm90IGJlIGFjY2Vzc2libGUgdmlhIGdldGdybmFtIG9yIGdldGdyZ2lkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotZ3JwX2dldGdyYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaWdub3JlKQorZ3JwX2dldGdyYWxsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ODVkYWQzNWUyZTc2M2Q3IGlucHV0PWQ3ZGY3NmM4MjVjMzY3ZGZdKi8KIHsKICAgICBQeU9iamVjdCAqZDsKICAgICBzdHJ1Y3QgZ3JvdXAgKnA7CkBAIC0xNTEsMjAgKzE4NywxMCBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgZ3JwX21ldGhvZHNbXSA9IHsKLSAgICB7ImdldGdyZ2lkIiwgICAgICAgIGdycF9nZXRncmdpZCwgICBNRVRIX08sCi0gICAgICJnZXRncmdpZChpZCkgLT4gKGdyX25hbWUsZ3JfcGFzc3dkLGdyX2dpZCxncl9tZW0pXG5cCi1SZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gbnVtZXJpYyBncm91cCBJRC4gIElmXG5cCi1pZCBpcyBub3QgdmFsaWQsIHJhaXNlIEtleUVycm9yLiJ9LAotICAgIHsiZ2V0Z3JuYW0iLCAgICAgICAgZ3JwX2dldGdybmFtLCAgIE1FVEhfVkFSQVJHUywKLSAgICAgImdldGdybmFtKG5hbWUpIC0+IChncl9uYW1lLGdyX3Bhc3N3ZCxncl9naWQsZ3JfbWVtKVxuXAotUmV0dXJuIHRoZSBncm91cCBkYXRhYmFzZSBlbnRyeSBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuICBJZlxuXAotbmFtZSBpcyBub3QgdmFsaWQsIHJhaXNlIEtleUVycm9yLiJ9LAotICAgIHsiZ2V0Z3JhbGwiLCAgICAgICAgZ3JwX2dldGdyYWxsLCAgIE1FVEhfTk9BUkdTLAotICAgICAiZ2V0Z3JhbGwoKSAtPiBsaXN0IG9mIHR1cGxlc1xuXAotUmV0dXJuIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGdyb3VwIGVudHJpZXMsIGluIGFyYml0cmFyeSBvcmRlci5cblwKLUFuIGVudHJ5IHdob3NlIG5hbWUgc3RhcnRzIHdpdGggJysnIG9yICctJyByZXByZXNlbnRzIGFuIGluc3RydWN0aW9uXG5cCi10byB1c2UgWVAvTklTIGFuZCBtYXkgbm90IGJlIGFjY2Vzc2libGUgdmlhIGdldGdybmFtIG9yIGdldGdyZ2lkLiJ9LAotICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCisgICAgR1JQX0dFVEdSR0lEX01FVEhPRERFRgorICAgIEdSUF9HRVRHUk5BTV9NRVRIT0RERUYKKyAgICBHUlBfR0VUR1JBTExfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9CiB9OwogCiBQeURvY19TVFJWQVIoZ3JwX19kb2NfXywKZGlmZiAtLWdpdCBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCmluZGV4IDU1ZDg4YTguLjZmZjI0MWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwpAQCAtMTU3LDE1ICsxNTcsMTIgQEAKICAgICBQeU9iamVjdCAqY3VycmtleSwgKmN1cnJ2YWx1ZSwgKnRndGtleTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJPT08iLCAmY3VycmtleSwgJmN1cnJ2YWx1ZSwgJnRndGtleSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0NMRUFSKGx6LT5jdXJya2V5KTsKLSAgICBsei0+Y3VycmtleSA9IGN1cnJrZXk7Ci0gICAgUHlfSU5DUkVGKGx6LT5jdXJya2V5KTsKLSAgICBQeV9DTEVBUihsei0+Y3VycnZhbHVlKTsKLSAgICBsei0+Y3VycnZhbHVlID0gY3VycnZhbHVlOwotICAgIFB5X0lOQ1JFRihsei0+Y3VycnZhbHVlKTsKLSAgICBQeV9DTEVBUihsei0+dGd0a2V5KTsKLSAgICBsei0+dGd0a2V5ID0gdGd0a2V5OwotICAgIFB5X0lOQ1JFRihsei0+dGd0a2V5KTsKKyAgICBQeV9JTkNSRUYoY3VycmtleSk7CisgICAgUHlfWFNFVFJFRihsei0+Y3VycmtleSwgY3VycmtleSk7CisgICAgUHlfSU5DUkVGKGN1cnJ2YWx1ZSk7CisgICAgUHlfWFNFVFJFRihsei0+Y3VycnZhbHVlLCBjdXJydmFsdWUpOworICAgIFB5X0lOQ1JFRih0Z3RrZXkpOworICAgIFB5X1hTRVRSRUYobHotPnRndGtleSwgdGd0a2V5KTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtNjM0LDggKzYzMSw3IEBACiAgICAgICAgIGxpbmsgPSB0ZWVkYXRhb2JqZWN0X2p1bXBsaW5rKHRvLT5kYXRhb2JqKTsKICAgICAgICAgaWYgKGxpbmsgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeV9ERUNSRUYodG8tPmRhdGFvYmopOwotICAgICAgICB0by0+ZGF0YW9iaiA9ICh0ZWVkYXRhb2JqZWN0ICopbGluazsKKyAgICAgICAgUHlfU0VUUkVGKHRvLT5kYXRhb2JqLCAodGVlZGF0YW9iamVjdCAqKWxpbmspOwogICAgICAgICB0by0+aW5kZXggPSAwOwogICAgIH0KICAgICB2YWx1ZSA9IHRlZWRhdGFvYmplY3RfZ2V0aXRlbSh0by0+ZGF0YW9iaiwgdG8tPmluZGV4KTsKQEAgLTc0Niw5ICs3NDIsOCBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfQ0xFQVIodG8tPmRhdGFvYmopOwotICAgIHRvLT5kYXRhb2JqID0gdGRvOwotICAgIFB5X0lOQ1JFRih0by0+ZGF0YW9iaik7CisgICAgUHlfSU5DUkVGKHRkbyk7CisgICAgUHlfWFNFVFJFRih0by0+ZGF0YW9iaiwgdGRvKTsKICAgICB0by0+aW5kZXggPSBpbmRleDsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTk3Myw5ICs5NjgsOCBAQAogICAgIGludCBmaXJzdHBhc3M7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiT2kiLCAmc2F2ZWQsICZmaXJzdHBhc3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9DTEVBUihsei0+c2F2ZWQpOwotICAgIGx6LT5zYXZlZCA9IHNhdmVkOwotICAgIFB5X1hJTkNSRUYobHotPnNhdmVkKTsKKyAgICBQeV9YSU5DUkVGKHNhdmVkKTsKKyAgICBQeV9YU0VUUkVGKGx6LT5zYXZlZCwgc2F2ZWQpOwogICAgIGx6LT5maXJzdHBhc3MgPSBmaXJzdHBhc3MgIT0gMDsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTE5MDAsMTIgKzE4OTQsMTAgQEAKICAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiT3xPIiwgJnNvdXJjZSwgJmFjdGl2ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlfQ0xFQVIobHotPnNvdXJjZSk7Ci0gICAgbHotPnNvdXJjZSA9IHNvdXJjZTsKLSAgICBQeV9JTkNSRUYobHotPnNvdXJjZSk7Ci0gICAgUHlfQ0xFQVIobHotPmFjdGl2ZSk7Ci0gICAgbHotPmFjdGl2ZSA9IGFjdGl2ZTsKLSAgICBQeV9YSU5DUkVGKGx6LT5hY3RpdmUpOworICAgIFB5X0lOQ1JFRihzb3VyY2UpOworICAgIFB5X1hTRVRSRUYobHotPnNvdXJjZSwgc291cmNlKTsKKyAgICBQeV9YSU5DUkVGKGFjdGl2ZSk7CisgICAgUHlfWFNFVFJFRihsei0+YWN0aXZlLCBhY3RpdmUpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC0xOTE5LDcgKzE5MTEsNyBAQAogUHlEb2NfU1RSVkFSKGNoYWluX2Zyb21faXRlcmFibGVfZG9jLAogImNoYWluLmZyb21faXRlcmFibGUoaXRlcmFibGUpIC0tPiBjaGFpbiBvYmplY3RcblwKIFxuXAotQWx0ZXJuYXRlIGNoYWluKCkgY29udHJ1Y3RvciB0YWtpbmcgYSBzaW5nbGUgaXRlcmFibGUgYXJndW1lbnRcblwKK0FsdGVybmF0ZSBjaGFpbigpIGNvbnN0cnVjdG9yIHRha2luZyBhIHNpbmdsZSBpdGVyYWJsZSBhcmd1bWVudFxuXAogdGhhdCBldmFsdWF0ZXMgbGF6aWx5LiIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgY2hhaW5fbWV0aG9kc1tdID0gewpAQCAtMjA4Nyw3ICsyMDc5LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlczsKIAotICAgIHJlcyA9IHNpemVvZihwcm9kdWN0b2JqZWN0KTsKKyAgICByZXMgPSBfUHlPYmplY3RfU0laRShQeV9UWVBFKGx6KSk7CiAgICAgcmVzICs9IFB5VHVwbGVfR0VUX1NJWkUobHotPnBvb2xzKSAqIHNpemVvZihQeV9zc2l6ZV90KTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7CiB9CkBAIC0yMjYxLDggKzIyNTMsNyBAQAogICAgICAgICBQeV9JTkNSRUYoZWxlbWVudCk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpLCBlbGVtZW50KTsKICAgICB9Ci0gICAgUHlfQ0xFQVIobHotPnJlc3VsdCk7Ci0gICAgbHotPnJlc3VsdCA9IHJlc3VsdDsKKyAgICBQeV9YU0VUUkVGKGx6LT5yZXN1bHQsIHJlc3VsdCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTI0MTgsNyArMjQwOSw3IEBACiB7CiAgICAgUHlfc3NpemVfdCByZXM7CiAKLSAgICByZXMgPSBzaXplb2YoY29tYmluYXRpb25zb2JqZWN0KTsKKyAgICByZXMgPSBfUHlPYmplY3RfU0laRShQeV9UWVBFKGNvKSk7CiAgICAgcmVzICs9IGNvLT5yICogc2l6ZW9mKFB5X3NzaXplX3QpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKIH0KQEAgLTI1ODQsOCArMjU3NSw3IEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpLCBlbGVtZW50KTsKICAgICB9CiAKLSAgICBQeV9DTEVBUihsei0+cmVzdWx0KTsKLSAgICBsei0+cmVzdWx0ID0gcmVzdWx0OworICAgIFB5X1hTRVRSRUYobHotPnJlc3VsdCwgcmVzdWx0KTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjc1OSw3ICsyNzQ5LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHJlczsKIAotICAgIHJlcyA9IHNpemVvZihjd3JvYmplY3QpOworICAgIHJlcyA9IF9QeU9iamVjdF9TSVpFKFB5X1RZUEUoY28pKTsKICAgICByZXMgKz0gY28tPnIgKiBzaXplb2YoUHlfc3NpemVfdCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwogfQpAQCAtMjkxNSw4ICsyOTA1LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKGVsZW1lbnQpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSwgZWxlbWVudCk7CiAgICAgfQotICAgIFB5X0NMRUFSKGx6LT5yZXN1bHQpOwotICAgIGx6LT5yZXN1bHQgPSByZXN1bHQ7CisgICAgUHlfWFNFVFJFRihsei0+cmVzdWx0LCByZXN1bHQpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC0zMTA4LDcgKzMwOTcsNyBAQAogewogICAgIFB5X3NzaXplX3QgcmVzOwogCi0gICAgcmVzID0gc2l6ZW9mKHBlcm11dGF0aW9uc29iamVjdCk7CisgICAgcmVzID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRShwbykpOwogICAgIHJlcyArPSBQeVR1cGxlX0dFVF9TSVpFKHBvLT5wb29sKSAqIHNpemVvZihQeV9zc2l6ZV90KTsKICAgICByZXMgKz0gcG8tPnIgKiBzaXplb2YoUHlfc3NpemVfdCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwpAQCAtMzMwOSw4ICszMjk4LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKGVsZW1lbnQpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSwgZWxlbWVudCk7CiAgICAgfQotICAgIFB5X0NMRUFSKHBvLT5yZXN1bHQpOwotICAgIHBvLT5yZXN1bHQgPSByZXN1bHQ7CisgICAgUHlfWFNFVFJFRihwby0+cmVzdWx0LCByZXN1bHQpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC0zNDcyLDYgKzM0NjAsMjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhY2N1bXVsYXRlX3JlZHVjZShhY2N1bXVsYXRlb2JqZWN0ICpseikKIHsKKyAgICBpZiAobHotPnRvdGFsID09IFB5X05vbmUpIHsKKyAgICAgICAgUHlPYmplY3QgKml0OworCisgICAgICAgIGlmIChQeVR5cGVfUmVhZHkoJmNoYWluX3R5cGUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KCZpc2xpY2VfdHlwZSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGl0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKSZjaGFpbl90eXBlLCAiKE8pTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6LT50b3RhbCwgbHotPml0KTsKKyAgICAgICAgaWYgKGl0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaXQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopUHlfVFlQRShseiksICJOTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBsei0+Ymlub3AgPyBsei0+Ymlub3AgOiBQeV9Ob25lKTsKKyAgICAgICAgaWYgKGl0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oTmlPKSIsICZpc2xpY2VfdHlwZSwgaXQsIDEsIFB5X05vbmUpOworICAgIH0KICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPTylPIiwgUHlfVFlQRShseiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHotPml0LCBsei0+Ymlub3A/bHotPmJpbm9wOlB5X05vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHotPnRvdGFsP2x6LT50b3RhbDpQeV9Ob25lKTsKQEAgLTM0ODAsOSArMzQ4NSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYWNjdW11bGF0ZV9zZXRzdGF0ZShhY2N1bXVsYXRlb2JqZWN0ICpseiwgUHlPYmplY3QgKnN0YXRlKQogewotICAgIFB5X0NMRUFSKGx6LT50b3RhbCk7Ci0gICAgbHotPnRvdGFsID0gc3RhdGU7Ci0gICAgUHlfSU5DUkVGKGx6LT50b3RhbCk7CisgICAgUHlfSU5DUkVGKHN0YXRlKTsKKyAgICBQeV9YU0VUUkVGKGx6LT50b3RhbCwgc3RhdGUpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC0zODgyLDcgKzM4ODYsNyBAQAogCiBmYXN0X21vZGU6ICB3aGVuIGNudCBhbiBpbnRlZ2VyIDwgUFlfU1NJWkVfVF9NQVggYW5kIG5vIHN0ZXAgaXMgc3BlY2lmaWVkLgogCi0gICAgYXNzZXJ0KGNudCAhPSBQWV9TU0laRV9UX01BWCAmJiBsb25nX2NudCA9PSBOVUxMICYmIGxvbmdfc3RlcD09UHlJbnQoMSkpOworICAgIGFzc2VydChjbnQgIT0gUFlfU1NJWkVfVF9NQVggJiYgbG9uZ19jbnQgPT0gTlVMTCAmJiBsb25nX3N0ZXA9PVB5TG9uZygxKSk7CiAgICAgQWR2YW5jZXMgd2l0aDogIGNudCArPSAxCiAgICAgV2hlbiBjb3VudCBoaXRzIFlfU1NJWkVfVF9NQVgsIHN3aXRjaCB0byBzbG93X21vZGUuCiAKQEAgLTQ0NjMsOSArNDQ2Nyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogemlwX2xvbmdlc3Rfc2V0c3RhdGUoemlwbG9uZ2VzdG9iamVjdCAqbHosIFB5T2JqZWN0ICpzdGF0ZSkKIHsKLSAgICBQeV9DTEVBUihsei0+ZmlsbHZhbHVlKTsKLSAgICBsei0+ZmlsbHZhbHVlID0gc3RhdGU7Ci0gICAgUHlfSU5DUkVGKGx6LT5maWxsdmFsdWUpOworICAgIFB5X0lOQ1JFRihzdGF0ZSk7CisgICAgUHlfWFNFVFJFRihsei0+ZmlsbHZhbHVlLCBzdGF0ZSk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTQ0ODAsNyArNDQ4Myw3IEBACiBQeURvY19TVFJWQVIoemlwX2xvbmdlc3RfZG9jLAogInppcF9sb25nZXN0KGl0ZXIxIFssaXRlcjIgWy4uLl1dLCBbZmlsbHZhbHVlPU5vbmVdKSAtLT4gemlwX2xvbmdlc3Qgb2JqZWN0XG5cCiBcblwKLVJldHVybiBhbiB6aXBfbG9uZ2VzdCBvYmplY3Qgd2hvc2UgLl9fbmV4dF9fKCkgbWV0aG9kIHJldHVybnMgYSB0dXBsZSB3aGVyZVxuXAorUmV0dXJuIGEgemlwX2xvbmdlc3Qgb2JqZWN0IHdob3NlIC5fX25leHRfXygpIG1ldGhvZCByZXR1cm5zIGEgdHVwbGUgd2hlcmVcblwKIHRoZSBpLXRoIGVsZW1lbnQgY29tZXMgZnJvbSB0aGUgaS10aCBpdGVyYWJsZSBhcmd1bWVudC4gIFRoZSAuX19uZXh0X18oKVxuXAogbWV0aG9kIGNvbnRpbnVlcyB1bnRpbCB0aGUgbG9uZ2VzdCBpdGVyYWJsZSBpbiB0aGUgYXJndW1lbnQgc2VxdWVuY2VcblwKIGlzIGV4aGF1c3RlZCBhbmQgdGhlbiBpdCByYWlzZXMgU3RvcEl0ZXJhdGlvbi4gIFdoZW4gdGhlIHNob3J0ZXIgaXRlcmFibGVzXG5cCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2xkX3NvX2FpeC5pbiBiL01vZHVsZXMvbGRfc29fYWl4LmluCmluZGV4IDg2YTlmN2UuLmFkZDZiM2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbGRfc29fYWl4LmluCisrKyBiL01vZHVsZXMvbGRfc29fYWl4LmluCkBAIC01LDE0ICs1LDE0IEBACiAjICAgVFlQRTogICAgICAgICAgIGV4ZWN1dGFibGUsIHVzZXMgbWFrZXhwX2FpeAogIyAgIFNZU1RFTTogICAgICAgICBBSVgKICMKLSMgICBERVNDUklQVElPTjogICAgQ3JlYXRlcyBhIHNoYXJlYWJsZSAubyBmcm9tIGEgc2V0IG9mIHByZS1jb21waWxlZCAKKyMgICBERVNDUklQVElPTjogICAgQ3JlYXRlcyBhIHNoYXJlYWJsZSAubyBmcm9tIGEgc2V0IG9mIHByZS1jb21waWxlZAogIyAgICAgICAgICAgICAgICAgICAodW5zaGFyZWQpIC5vIGZpbGVzCiAjCiAjICAgVVNBR0U6ICAgICAgICAgIGxkX3NvX2FpeCBbQ0NdIFthcmd1bWVudHNdCiAjCiAjICAgQVJHVU1FTlRTOiAgICAgIFNhbWUgYXMgZm9yICJsZCIuIFRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGFyZSBwcm9jZXNzZWQKICMgICAgICAgICAgICAgICAgICAgb3Igc3VwcGxpZWQgYnkgdGhpcyBzY3JpcHQgKHRob3NlIG1hcmtlZCB3aXRoIGFuIGFzdGVyaXNrCi0jICAgICAgICAgICAgICAgICAgIGNhbiBiZSBvdmVycmlkZW4gZnJvbSBjb21tYW5kIGxpbmUpOgorIyAgICAgICAgICAgICAgICAgICBjYW4gYmUgb3ZlcnJpZGRlbiBmcm9tIGNvbW1hbmQgbGluZSk6CiAjCiAjICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudCAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUKICMgICAgICAgICAgICAgICAgICAgKCopIC1vIFtPdXRwdXRGaWxlTmFtZV0gICAgICAgICAgLW8gc2hyLm8KQEAgLTQ2LDcgKzQ2LDcgQEAKICMgICAgICAgICAgICAgICAgICAgNC4gIFVuY29tbWVudGluZyB0aGUgImVjaG8iIGxpbmVzIGdpdmVzIGRldGFpbGVkIG91dHB1dAogIyAgICAgICAgICAgICAgICAgICAgICAgYWJvdXQgdGhlIGNvbW1hbmRzIGV4ZWN1dGVkIGluIHRoZSBzY3JpcHQuCiAjCi0jICAgICAgICAgICAgICAgICAgICAgICAKKyMKICMgICBISVNUT1JZOiAgICAgICAgT2N0LTE5OTYgICAgLS0gU3VwcG9ydCBhZGRlZCBmb3IgbXVsdGlwbGUgLm8gZmlsZXMgLS0KICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gYW5kIG9wdGlvbmFsIGFyZ3VtZW50cyBwcm9jZXNzaW5nLiAgLS0KICMgICAgICAgICAgICAgICAgICAgQ2hyaXMgTXllcnMgKG15ZXJzQHRjLmNvcm5lbGwuZWR1KSwgS2VpdGggS3dvawpAQCAtODUsNyArODUsNyBAQAogZmkKIAogIyBEZWZhdWx0IGltcG9ydCBmaWxlIGZvciBQeXRob24KLSMgQ2FuIGJlIG92ZXJyaWRlbiBieSBwcm92aWRpbmcgYSAtYkk6IGFyZ3VtZW50LgorIyBDYW4gYmUgb3ZlcnJpZGRlbiBieSBwcm92aWRpbmcgYSAtYkk6IGFyZ3VtZW50LgogaW1wZmlsZT0iLi9weXRob24uZXhwIgogCiAjIFBhcnNlIGFyZ3VtZW50cwpAQCAtMTMyLDcgKzEzMiw3IEBACiBkb25lCiAKIGlmIHRlc3QgIiRvYmpmaWxlIiA9ICJsaWJweXRob25AVkVSU0lPTkBAQUJJRkxBR1NALnNvIjsgdGhlbgotICBsZHNvY29yZW1vZGU9InRydWUiIAorICBsZHNvY29yZW1vZGU9InRydWUiCiBmaQogCiBpZiB0ZXN0IC16ICIkb2JqcyI7IHRoZW4KQEAgLTE1Niw3ICsxNTYsNyBAQAogZmkKIAogIyBEZWZhdWx0IGVudHJ5IHN5bWJvbCBmb3IgUHl0aG9uIG1vZHVsZXMgPSBpbml0W21vZHVsZW5hbWVdCi0jIENhbiBiZSBvdmVycmlkZW4gYnkgcHJvdmlkaW5nIGEgLWUgYXJndW1lbnQuCisjIENhbiBiZSBvdmVycmlkZGVuIGJ5IHByb3ZpZGluZyBhIC1lIGFyZ3VtZW50LgogaWYgdGVzdCAteiAiJGVudHJ5IjsgdGhlbgogICBlbnRyeT1QeUluaXRfYGVjaG8gJGZpbGVuYW1lIHwgc2VkICJzL21vZHVsZS4qLy8iYAogZmkKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWFpbi5jIGIvTW9kdWxlcy9tYWluLmMKaW5kZXggODdhMjFkNy4uZTRjOTU1ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYWluLmMKKysrIGIvTW9kdWxlcy9tYWluLmMKQEAgLTksNyArOSw2IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2lmZGVmIEhBVkVfRkNOVExfSAogI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KICNlbmRpZgogI2VuZGlmCiAKQEAgLTg2LDExICs4NSwxMSBAQAogYXJnIC4uLjogYXJndW1lbnRzIHBhc3NlZCB0byBwcm9ncmFtIGluIHN5cy5hcmd2WzE6XVxuXG5cCiBPdGhlciBlbnZpcm9ubWVudCB2YXJpYWJsZXM6XG5cCiBQWVRIT05TVEFSVFVQOiBmaWxlIGV4ZWN1dGVkIG9uIGludGVyYWN0aXZlIHN0YXJ0dXAgKG5vIGRlZmF1bHQpXG5cCi1QWVRIT05QQVRIICAgOiAnJWMnLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHByZWZpeGVkIHRvIHRoZVxuXAorUFlUSE9OUEFUSCAgIDogJyVsYyctc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgcHJlZml4ZWQgdG8gdGhlXG5cCiAgICAgICAgICAgICAgICBkZWZhdWx0IG1vZHVsZSBzZWFyY2ggcGF0aC4gIFRoZSByZXN1bHQgaXMgc3lzLnBhdGguXG5cCiAiOwogc3RhdGljIGNoYXIgKnVzYWdlXzUgPQotIlBZVEhPTkhPTUUgICA6IGFsdGVybmF0ZSA8cHJlZml4PiBkaXJlY3RvcnkgKG9yIDxwcmVmaXg+JWM8ZXhlY19wcmVmaXg+KS5cbiIKKyJQWVRIT05IT01FICAgOiBhbHRlcm5hdGUgPHByZWZpeD4gZGlyZWN0b3J5IChvciA8cHJlZml4PiVsYzxleGVjX3ByZWZpeD4pLlxuIgogIiAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IG1vZHVsZSBzZWFyY2ggcGF0aCB1c2VzICVzLlxuIgogIlBZVEhPTkNBU0VPSyA6IGlnbm9yZSBjYXNlIGluICdpbXBvcnQnIHN0YXRlbWVudHMgKFdpbmRvd3MpLlxuIgogIlBZVEhPTklPRU5DT0RJTkc6IEVuY29kaW5nWzplcnJvcnNdIHVzZWQgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIuXG4iCkBAIC0xMTUsOCArMTE0LDggQEAKICAgICAgICAgZnB1dHModXNhZ2VfMSwgZik7CiAgICAgICAgIGZwdXRzKHVzYWdlXzIsIGYpOwogICAgICAgICBmcHV0cyh1c2FnZV8zLCBmKTsKLSAgICAgICAgZnByaW50ZihmLCB1c2FnZV80LCBERUxJTSk7Ci0gICAgICAgIGZwcmludGYoZiwgdXNhZ2VfNSwgREVMSU0sIFBZVEhPTkhPTUVIRUxQKTsKKyAgICAgICAgZnByaW50ZihmLCB1c2FnZV80LCAod2ludF90KURFTElNKTsKKyAgICAgICAgZnByaW50ZihmLCB1c2FnZV81LCAod2ludF90KURFTElNLCBQWVRIT05IT01FSEVMUCk7CiAgICAgICAgIGZwdXRzKHVzYWdlXzYsIGYpOwogICAgIH0KICAgICByZXR1cm4gZXhpdGNvZGU7CkBAIC0zNDMsNiArMzQyLDggQEAKICAgICBpbnQgdmVyc2lvbiA9IDA7CiAgICAgaW50IHNhd191bmJ1ZmZlcmVkX2ZsYWcgPSAwOwogICAgIFB5Q29tcGlsZXJGbGFncyBjZjsKKyAgICBQeU9iamVjdCAqd2FybmluZ19vcHRpb24gPSBOVUxMOworICAgIFB5T2JqZWN0ICp3YXJuaW5nX29wdGlvbnMgPSBOVUxMOwogCiAgICAgY2YuY2ZfZmxhZ3MgPSAwOwogCkBAIC00NjUsNyArNDY2LDE1IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdXJzoKLSAgICAgICAgICAgIFB5U3lzX0FkZFdhcm5PcHRpb24oX1B5T1Nfb3B0YXJnKTsKKyAgICAgICAgICAgIGlmICh3YXJuaW5nX29wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB3YXJuaW5nX29wdGlvbnMgPSBQeUxpc3RfTmV3KDApOworICAgICAgICAgICAgaWYgKHdhcm5pbmdfb3B0aW9ucyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImZhaWx1cmUgaW4gaGFuZGxpbmcgb2YgLVcgYXJndW1lbnQiKTsKKyAgICAgICAgICAgIHdhcm5pbmdfb3B0aW9uID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihfUHlPU19vcHRhcmcsIC0xKTsKKyAgICAgICAgICAgIGlmICh3YXJuaW5nX29wdGlvbiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImZhaWx1cmUgaW4gaGFuZGxpbmcgb2YgLVcgYXJndW1lbnQiKTsKKyAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQod2FybmluZ19vcHRpb25zLCB3YXJuaW5nX29wdGlvbik7CisgICAgICAgICAgICBQeV9ERUNSRUYod2FybmluZ19vcHRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnWCc6CkBAIC01MTEsMTYgKzUyMCwxNiBAQAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoIVB5X0lnbm9yZUVudmlyb25tZW50RmxhZyAmJiAod3AgPSBfd2dldGVudihMIlBZVEhPTldBUk5JTkdTIikpICYmCiAgICAgICAgICp3cCAhPSBMJ1wwJykgewotICAgICAgICB3Y2hhcl90ICpidWYsICp3YXJuaW5nOworICAgICAgICB3Y2hhcl90ICpidWYsICp3YXJuaW5nLCAqY29udGV4dCA9IE5VTEw7CiAKICAgICAgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbih3cCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBQWVRIT05XQVJOSU5HUyIpOwogICAgICAgICB3Y3NjcHkoYnVmLCB3cCk7Ci0gICAgICAgIGZvciAod2FybmluZyA9IHdjc3RvayhidWYsIEwiLCIpOworICAgICAgICBmb3IgKHdhcm5pbmcgPSB3Y3N0b2tfcyhidWYsIEwiLCIsICZjb250ZXh0KTsKICAgICAgICAgICAgICB3YXJuaW5nICE9IE5VTEw7Ci0gICAgICAgICAgICAgd2FybmluZyA9IHdjc3RvayhOVUxMLCBMIiwiKSkgeworICAgICAgICAgICAgIHdhcm5pbmcgPSB3Y3N0b2tfcyhOVUxMLCBMIiwiLCAmY29udGV4dCkpIHsKICAgICAgICAgICAgIFB5U3lzX0FkZFdhcm5PcHRpb24od2FybmluZyk7CiAgICAgICAgIH0KICAgICAgICAgUHlNZW1fUmF3RnJlZShidWYpOwpAQCAtNTU5LDYgKzU2OCwxMiBAQAogICAgICAgICBQeU1lbV9SYXdGcmVlKGJ1Zik7CiAgICAgfQogI2VuZGlmCisgICAgaWYgKHdhcm5pbmdfb3B0aW9ucyAhPSBOVUxMKSB7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9HRVRfU0laRSh3YXJuaW5nX29wdGlvbnMpOyBpKyspIHsKKyAgICAgICAgICAgIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlKFB5TGlzdF9HRVRfSVRFTSh3YXJuaW5nX29wdGlvbnMsIGkpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmIChjb21tYW5kID09IE5VTEwgJiYgbW9kdWxlID09IE5VTEwgJiYgX1B5T1Nfb3B0aW5kIDwgYXJnYyAmJgogICAgICAgICB3Y3NjbXAoYXJndltfUHlPU19vcHRpbmRdLCBMIi0iKSAhPSAwKQpAQCAtNjMxLDcgKzY0Niw3IEBACiAgICAgICAgICAgICAvKiBVc2VkIGJ5IE1hYy9Ub29scy9weXRob253LmMgdG8gZm9yd2FyZAogICAgICAgICAgICAgICogdGhlIGFyZ3YwIG9mIHRoZSBzdHViIGV4ZWN1dGFibGUKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgd2NoYXJfdCogd2J1ZiA9IF9QeV9jaGFyMndjaGFyKHB5dmVudl9sYXVuY2hlciwgTlVMTCk7CisgICAgICAgICAgICB3Y2hhcl90KiB3YnVmID0gUHlfRGVjb2RlTG9jYWxlKHB5dmVudl9sYXVuY2hlciwgTlVMTCk7CiAKICAgICAgICAgICAgIGlmICh3YnVmID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW5ub3QgZGVjb2RlIF9fUFlWRU5WX0xBVU5DSEVSX18iKTsKQEAgLTY1Miw2ICs2NjcsNyBAQAogICAgIFB5X1NldFByb2dyYW1OYW1lKGFyZ3ZbMF0pOwogI2VuZGlmCiAgICAgUHlfSW5pdGlhbGl6ZSgpOworICAgIFB5X1hERUNSRUYod2FybmluZ19vcHRpb25zKTsKIAogICAgIGlmICghUHlfUXVpZXRGbGFnICYmIChQeV9WZXJib3NlRmxhZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1hbmQgPT0gTlVMTCAmJiBmaWxlbmFtZSA9PSBOVUxMICYmCkBAIC03MTMsNyArNzI5LDcgQEAKICAgICAgICAgICAgICAgICBjaGFyICpjZmlsZW5hbWVfYnVmZmVyOwogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNmaWxlbmFtZTsKICAgICAgICAgICAgICAgICBpbnQgZXJyID0gZXJybm87Ci0gICAgICAgICAgICAgICAgY2ZpbGVuYW1lX2J1ZmZlciA9IF9QeV93Y2hhcjJjaGFyKGZpbGVuYW1lLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBjZmlsZW5hbWVfYnVmZmVyID0gUHlfRW5jb2RlTG9jYWxlKGZpbGVuYW1lLCBOVUxMKTsKICAgICAgICAgICAgICAgICBpZiAoY2ZpbGVuYW1lX2J1ZmZlciAhPSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBjZmlsZW5hbWUgPSBjZmlsZW5hbWVfYnVmZmVyOwogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTczNiwxMSArNzUyLDEyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIFhYWDogZG9lcyB0aGlzIHdvcmsgb24gV2luL1dpbjY0PyAoc2VlIHBvc2l4X2ZzdGF0KSAqLwotICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHNiOwotICAgICAgICAgICAgICAgIGlmIChmc3RhdChmaWxlbm8oZnApLCAmc2IpID09IDAgJiYKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0IHNiOworICAgICAgICAgICAgICAgIGlmIChfUHlfZnN0YXRfbm9yYWlzZShmaWxlbm8oZnApLCAmc2IpID09IDAgJiYKICAgICAgICAgICAgICAgICAgICAgU19JU0RJUihzYi5zdF9tb2RlKSkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVsczogJyVscycgaXMgYSBkaXJlY3RvcnksIGNhbm5vdCBjb250aW51ZVxuIiwgYXJndlswXSwgZmlsZW5hbWUpOworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWxzOiAnJWxzJyBpcyBhIGRpcmVjdG9yeSwgY2Fubm90IGNvbnRpbnVlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0sIGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGZwKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tYWtlc2V0dXAgYi9Nb2R1bGVzL21ha2VzZXR1cAppbmRleCA4YjVjYzI4Li45MGRiNDJlIDEwMDc1NQotLS0gYS9Nb2R1bGVzL21ha2VzZXR1cAorKysgYi9Nb2R1bGVzL21ha2VzZXR1cApAQCAtMjY2LDcgKzI2Niw3IEBACiAJKikgIHNlZCAtZSAiCiAJCTFpJE5MLyogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSAkY29uZmlnIGJ5IG1ha2VzZXR1cC4gKi8KIAkJL01BUktFUiAxL2kkTkwkRVhUREVDTFMKLSAKKwogCQkvTUFSS0VSIDIvaSROTCRJTklUQklUUwogCiAJCSIgJGNvbmZpZyA+Y29uZmlnLmMKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWF0aG1vZHVsZS5jIGIvTW9kdWxlcy9tYXRobW9kdWxlLmMKaW5kZXggMjQzZTJhMy4uN2ViZjhlOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYXRobW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tYXRobW9kdWxlLmMKQEAgLTIyMyw2ICsyMjMsMzUgQEAKICAgICByZXR1cm4gbnVtL2RlbjsKIH0KIAorLyogQ29uc3RhbnQgZm9yICtpbmZpbml0eSwgZ2VuZXJhdGVkIGluIHRoZSBzYW1lIHdheSBhcyBmbG9hdCgnaW5mJykuICovCisKK3N0YXRpYyBkb3VibGUKK21faW5mKHZvaWQpCit7CisjaWZuZGVmIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIKKyAgICByZXR1cm4gX1B5X2RnX2luZmluaXR5KDApOworI2Vsc2UKKyAgICByZXR1cm4gUHlfSFVHRV9WQUw7CisjZW5kaWYKK30KKworLyogQ29uc3RhbnQgbmFuIHZhbHVlLCBnZW5lcmF0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZsb2F0KCduYW4nKS4gKi8KKy8qIFdlIGRvbid0IGN1cnJlbnRseSBhc3N1bWUgdGhhdCBQeV9OQU4gaXMgZGVmaW5lZCBldmVyeXdoZXJlLiAqLworCisjaWYgIWRlZmluZWQoUFlfTk9fU0hPUlRfRkxPQVRfUkVQUikgfHwgZGVmaW5lZChQeV9OQU4pCisKK3N0YXRpYyBkb3VibGUKK21fbmFuKHZvaWQpCit7CisjaWZuZGVmIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIKKyAgICByZXR1cm4gX1B5X2RnX3N0ZG5hbigwKTsKKyNlbHNlCisgICAgcmV0dXJuIFB5X05BTjsKKyNlbmRpZgorfQorCisjZW5kaWYKKwogc3RhdGljIGRvdWJsZQogbV90Z2FtbWEoZG91YmxlIHgpCiB7CkBAIC0zNzEsOSArNDAwLDggQEAKICAgIEltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmKHgpIGFuZCB0aGUgY29tcGxlbWVudGFyeSBlcnJvcgogICAgZnVuY3Rpb24gZXJmYyh4KS4KIAotICAgTWV0aG9kOiBmb2xsb3dpbmcgJ051bWVyaWNhbCBSZWNpcGVzJyBieSBGbGFubmVyeSwgUHJlc3MgZXQuIGFsLiAoMm5kIGVkLiwKLSAgIENhbWJyaWRnZSBVbml2ZXJzaXR5IFByZXNzKSwgd2UgdXNlIGEgc2VyaWVzIGFwcHJveGltYXRpb24gZm9yIGVyZiBmb3IKLSAgIHNtYWxsIHgsIGFuZCBhIGNvbnRpbnVlZCBmcmFjdGlvbiBhcHByb3hpbWF0aW9uIGZvciBlcmZjKHgpIGZvciBsYXJnZXIgeDsKKyAgIE1ldGhvZDogd2UgdXNlIGEgc2VyaWVzIGFwcHJveGltYXRpb24gZm9yIGVyZiBmb3Igc21hbGwgeCwgYW5kIGEgY29udGludWVkCisgICBmcmFjdGlvbiBhcHByb3hpbWF0aW9uIGZvciBlcmZjKHgpIGZvciBsYXJnZXIgeDsKICAgIGNvbWJpbmVkIHdpdGggdGhlIHJlbGF0aW9ucyBlcmYoLXgpID0gLWVyZih4KSBhbmQgZXJmYyh4KSA9IDEuMCAtIGVyZih4KSwKICAgIHRoaXMgZ2l2ZXMgdXMgZXJmKHgpIGFuZCBlcmZjKHgpIGZvciBhbGwgeC4KIApAQCAtNjU2LDYgKzY4NCwzMyBAQAogfQogCiAKK3N0YXRpYyBQeU9iamVjdCAqCittYXRoX2djZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmEsICpiLCAqZzsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086Z2NkIiwgJmEsICZiKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhID0gUHlOdW1iZXJfSW5kZXgoYSk7CisgICAgaWYgKGEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYiA9IFB5TnVtYmVyX0luZGV4KGIpOworICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGEpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZyA9IF9QeUxvbmdfR0NEKGEsIGIpOworICAgIFB5X0RFQ1JFRihhKTsKKyAgICBQeV9ERUNSRUYoYik7CisgICAgcmV0dXJuIGc7Cit9CisKK1B5RG9jX1NUUlZBUihtYXRoX2djZF9kb2MsCisiZ2NkKHgsIHkpIC0+IGludFxuXAorZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgeCBhbmQgeSIpOworCisKIC8qIENhbGwgaXNfZXJyb3Igd2hlbiBlcnJubyAhPSAwLCBhbmQgd2hlcmUgeCBpcyB0aGUgcmVzdWx0IGxpYm0KICAqIHJldHVybmVkLiAgaXNfZXJyb3Igd2lsbCB1c3VhbGx5IHNldCB1cCBhbiBleGNlcHRpb24gYW5kIHJldHVybgogICogdHJ1ZSAoMSksIGJ1dCBtYXkgcmV0dXJuIGZhbHNlICgwKSB3aXRob3V0IHNldHRpbmcgdXAgYW4gZXhjZXB0aW9uLgpAQCAtOTAyLDggKzk1Nyw4IEBACiB9CiAKIFB5RG9jX1NUUlZBUihtYXRoX2NlaWxfZG9jLAotICAgICAgICAgICAgICJjZWlsKHgpXG5cblJldHVybiB0aGUgY2VpbGluZyBvZiB4IGFzIGFuIGludC5cbiIKLSAgICAgICAgICAgICAiVGhpcyBpcyB0aGUgc21hbGxlc3QgaW50ZWdyYWwgdmFsdWUgPj0geC4iKTsKKyAgICAgICAgICAgICAiY2VpbCh4KVxuXG5SZXR1cm4gdGhlIGNlaWxpbmcgb2YgeCBhcyBhbiBJbnRlZ3JhbC5cbiIKKyAgICAgICAgICAgICAiVGhpcyBpcyB0aGUgc21hbGxlc3QgaW50ZWdlciA+PSB4LiIpOwogCiBGVU5DMihjb3B5c2lnbiwgY29weXNpZ24sCiAgICAgICAiY29weXNpZ24oeCwgeSlcblxuUmV0dXJuIGEgZmxvYXQgd2l0aCB0aGUgbWFnbml0dWRlIChhYnNvbHV0ZSB2YWx1ZSkgIgpAQCAtOTQyLDggKzk5Nyw4IEBACiB9CiAKIFB5RG9jX1NUUlZBUihtYXRoX2Zsb29yX2RvYywKLSAgICAgICAgICAgICAiZmxvb3IoeClcblxuUmV0dXJuIHRoZSBmbG9vciBvZiB4IGFzIGFuIGludC5cbiIKLSAgICAgICAgICAgICAiVGhpcyBpcyB0aGUgbGFyZ2VzdCBpbnRlZ3JhbCB2YWx1ZSA8PSB4LiIpOworICAgICAgICAgICAgICJmbG9vcih4KVxuXG5SZXR1cm4gdGhlIGZsb29yIG9mIHggYXMgYW4gSW50ZWdyYWwuXG4iCisgICAgICAgICAgICAgIlRoaXMgaXMgdGhlIGxhcmdlc3QgaW50ZWdlciA8PSB4LiIpOwogCiBGVU5DMUEoZ2FtbWEsIG1fdGdhbW1hLAogICAgICAgImdhbW1hKHgpXG5cbkdhbW1hIGZ1bmN0aW9uIGF0IHguIikKQEAgLTEwMTAsNyArMTA2NSw3IEBACiAgICAgUHlfc3NpemVfdCBtID0gKm1fcHRyOwogCiAgICAgbSArPSBtOyAgLyogZG91YmxlICovCi0gICAgaWYgKG4gPCBtICYmIG0gPCAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoZG91YmxlKSkpIHsKKyAgICBpZiAobiA8IG0gJiYgKHNpemVfdCltIDwgKChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoZG91YmxlKSkpIHsKICAgICAgICAgZG91YmxlICpwID0gKnBfcHRyOwogICAgICAgICBpZiAocCA9PSBwcykgewogICAgICAgICAgICAgdiA9IFB5TWVtX01hbGxvYyhzaXplb2YoZG91YmxlKSAqIG0pOwpAQCAtMTQwOCw2ICsxNDYzLDcgQEAKIG1hdGhfZmFjdG9yaWFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewogICAgIGxvbmcgeDsKKyAgICBpbnQgb3ZlcmZsb3c7CiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKm9kZF9wYXJ0LCAqdHdvX3ZhbHVhdGlvbjsKIAogICAgIGlmIChQeUZsb2F0X0NoZWNrKGFyZykpIHsKQEAgLTE0MjEsMTUgKzE0NzcsMjIgQEAKICAgICAgICAgbHggPSBQeUxvbmdfRnJvbURvdWJsZShkeCk7CiAgICAgICAgIGlmIChseCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHggPSBQeUxvbmdfQXNMb25nKGx4KTsKKyAgICAgICAgeCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhseCwgJm92ZXJmbG93KTsKICAgICAgICAgUHlfREVDUkVGKGx4KTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICB4ID0gUHlMb25nX0FzTG9uZyhhcmcpOworICAgICAgICB4ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGFyZywgJm92ZXJmbG93KTsKIAotICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoeCA8IDApIHsKKyAgICB9CisgICAgZWxzZSBpZiAob3ZlcmZsb3cgPT0gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJmYWN0b3JpYWwoKSBhcmd1bWVudCBzaG91bGQgbm90IGV4Y2VlZCAlbGQiLAorICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAob3ZlcmZsb3cgPT0gLTEgfHwgeCA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZmFjdG9yaWFsKCkgbm90IGRlZmluZWQgZm9yIG5lZ2F0aXZlIHZhbHVlcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE5MjYsNiArMTk4OSw4MyBAQAogImlzaW5mKHgpIC0+IGJvb2xcblxuXAogUmV0dXJuIFRydWUgaWYgeCBpcyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGluZmluaXR5LCBhbmQgRmFsc2Ugb3RoZXJ3aXNlLiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorbWF0aF9pc2Nsb3NlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBkb3VibGUgYSwgYjsKKyAgICBkb3VibGUgcmVsX3RvbCA9IDFlLTk7CisgICAgZG91YmxlIGFic190b2wgPSAwLjA7CisgICAgZG91YmxlIGRpZmYgPSAwLjA7CisgICAgbG9uZyByZXN1bHQgPSAwOworCisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImEiLCAiYiIsICJyZWxfdG9sIiwgImFic190b2wiLCBOVUxMfTsKKworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiZGR8JGRkOmlzY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhLCAmYiwgJnJlbF90b2wsICZhYnNfdG9sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBzYW5pdHkgY2hlY2sgb24gdGhlIGlucHV0cyAqLworICAgIGlmIChyZWxfdG9sIDwgMC4wIHx8IGFic190b2wgPCAwLjAgKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRvbGVyYW5jZXMgbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCBhID09IGIgKSB7CisgICAgICAgIC8qIHNob3J0IGNpcmN1aXQgZXhhY3QgZXF1YWxpdHkgLS0gbmVlZGVkIHRvIGNhdGNoIHR3byBpbmZpbml0aWVzIG9mCisgICAgICAgICAgIHRoZSBzYW1lIHNpZ24uIEFuZCBwZXJoYXBzIHNwZWVkcyB0aGluZ3MgdXAgYSBiaXQgc29tZXRpbWVzLgorICAgICAgICAqLworICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICB9CisKKyAgICAvKiBUaGlzIGNhdGNoZXMgdGhlIGNhc2Ugb2YgdHdvIGluZmluaXRpZXMgb2Ygb3Bwb3NpdGUgc2lnbiwgb3IKKyAgICAgICBvbmUgaW5maW5pdHkgYW5kIG9uZSBmaW5pdGUgbnVtYmVyLiBUd28gaW5maW5pdGllcyBvZiBvcHBvc2l0ZQorICAgICAgIHNpZ24gd291bGQgb3RoZXJ3aXNlIGhhdmUgYW4gaW5maW5pdGUgcmVsYXRpdmUgdG9sZXJhbmNlLgorICAgICAgIFR3byBpbmZpbml0aWVzIG9mIHRoZSBzYW1lIHNpZ24gYXJlIGNhdWdodCBieSB0aGUgZXF1YWxpdHkgY2hlY2sKKyAgICAgICBhYm92ZS4KKyAgICAqLworCisgICAgaWYgKFB5X0lTX0lORklOSVRZKGEpIHx8IFB5X0lTX0lORklOSVRZKGIpKSB7CisgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKKyAgICB9CisKKyAgICAvKiBub3cgZG8gdGhlIHJlZ3VsYXIgY29tcHV0YXRpb24KKyAgICAgICB0aGlzIGlzIGVzc2VudGlhbGx5IHRoZSAid2VhayIgdGVzdCBmcm9tIHRoZSBCb29zdCBsaWJyYXJ5CisgICAgKi8KKworICAgIGRpZmYgPSBmYWJzKGIgLSBhKTsKKworICAgIHJlc3VsdCA9ICgoKGRpZmYgPD0gZmFicyhyZWxfdG9sICogYikpIHx8CisgICAgICAgICAgICAgICAoZGlmZiA8PSBmYWJzKHJlbF90b2wgKiBhKSkpIHx8CisgICAgICAgICAgICAgIChkaWZmIDw9IGFic190b2wpKTsKKworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKK30KKworUHlEb2NfU1RSVkFSKG1hdGhfaXNjbG9zZV9kb2MsCisiaXNjbG9zZShhLCBiLCAqLCByZWxfdG9sPTFlLTA5LCBhYnNfdG9sPTAuMCkgLT4gYm9vbFxuIgorIlxuIgorIkRldGVybWluZSB3aGV0aGVyIHR3byBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFyZSBjbG9zZSBpbiB2YWx1ZS5cbiIKKyJcbiIKKyIgICByZWxfdG9sXG4iCisiICAgICAgIG1heGltdW0gZGlmZmVyZW5jZSBmb3IgYmVpbmcgY29uc2lkZXJlZCBcImNsb3NlXCIsIHJlbGF0aXZlIHRvIHRoZVxuIgorIiAgICAgICBtYWduaXR1ZGUgb2YgdGhlIGlucHV0IHZhbHVlc1xuIgorIiAgICBhYnNfdG9sXG4iCisiICAgICAgIG1heGltdW0gZGlmZmVyZW5jZSBmb3IgYmVpbmcgY29uc2lkZXJlZCBcImNsb3NlXCIsIHJlZ2FyZGxlc3Mgb2YgdGhlXG4iCisiICAgICAgIG1hZ25pdHVkZSBvZiB0aGUgaW5wdXQgdmFsdWVzXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgYSBpcyBjbG9zZSBpbiB2YWx1ZSB0byBiLCBhbmQgRmFsc2Ugb3RoZXJ3aXNlLlxuIgorIlxuIgorIkZvciB0aGUgdmFsdWVzIHRvIGJlIGNvbnNpZGVyZWQgY2xvc2UsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbVxuIgorIm11c3QgYmUgc21hbGxlciB0aGFuIGF0IGxlYXN0IG9uZSBvZiB0aGUgdG9sZXJhbmNlcy5cbiIKKyJcbiIKKyItaW5mLCBpbmYgYW5kIE5hTiBiZWhhdmUgc2ltaWxhcmx5IHRvIHRoZSBJRUVFIDc1NCBTdGFuZGFyZC4gIFRoYXRcbiIKKyJpcywgTmFOIGlzIG5vdCBjbG9zZSB0byBhbnl0aGluZywgZXZlbiBpdHNlbGYuICBpbmYgYW5kIC1pbmYgYXJlXG4iCisib25seSBjbG9zZSB0byB0aGVtc2VsdmVzLiIpOworCiBzdGF0aWMgUHlNZXRob2REZWYgbWF0aF9tZXRob2RzW10gPSB7CiAgICAgeyJhY29zIiwgICAgICAgICAgICBtYXRoX2Fjb3MsICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfYWNvc19kb2N9LAogICAgIHsiYWNvc2giLCAgICAgICAgICAgbWF0aF9hY29zaCwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2Fjb3NoX2RvY30sCkBAIC0xOTUwLDcgKzIwOTAsMTAgQEAKICAgICB7ImZyZXhwIiwgICAgICAgICAgIG1hdGhfZnJleHAsICAgICBNRVRIX08sICAgICAgICAgbWF0aF9mcmV4cF9kb2N9LAogICAgIHsiZnN1bSIsICAgICAgICAgICAgbWF0aF9mc3VtLCAgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2ZzdW1fZG9jfSwKICAgICB7ImdhbW1hIiwgICAgICAgICAgIG1hdGhfZ2FtbWEsICAgICBNRVRIX08sICAgICAgICAgbWF0aF9nYW1tYV9kb2N9LAorICAgIHsiZ2NkIiwgICAgICAgICAgICAgbWF0aF9nY2QsICAgICAgIE1FVEhfVkFSQVJHUywgICBtYXRoX2djZF9kb2N9LAogICAgIHsiaHlwb3QiLCAgICAgICAgICAgbWF0aF9oeXBvdCwgICAgIE1FVEhfVkFSQVJHUywgICBtYXRoX2h5cG90X2RvY30sCisgICAgeyJpc2Nsb3NlIiwgKFB5Q0Z1bmN0aW9uKSBtYXRoX2lzY2xvc2UsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCisgICAgbWF0aF9pc2Nsb3NlX2RvY30sCiAgICAgeyJpc2Zpbml0ZSIsICAgICAgICBtYXRoX2lzZmluaXRlLCAgTUVUSF9PLCAgICAgICAgIG1hdGhfaXNmaW5pdGVfZG9jfSwKICAgICB7ImlzaW5mIiwgICAgICAgICAgIG1hdGhfaXNpbmYsICAgICBNRVRIX08sICAgICAgICAgbWF0aF9pc2luZl9kb2N9LAogICAgIHsiaXNuYW4iLCAgICAgICAgICAgbWF0aF9pc25hbiwgICAgIE1FVEhfTywgICAgICAgICBtYXRoX2lzbmFuX2RvY30sCkBAIC0yMDAxLDcgKzIxNDQsMTEgQEAKIAogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAicGkiLCBQeUZsb2F0X0Zyb21Eb3VibGUoUHlfTUFUSF9QSSkpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZSIsIFB5RmxvYXRfRnJvbURvdWJsZShQeV9NQVRIX0UpKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImluZiIsIFB5RmxvYXRfRnJvbURvdWJsZShtX2luZigpKSk7CisjaWYgIWRlZmluZWQoUFlfTk9fU0hPUlRfRkxPQVRfUkVQUikgfHwgZGVmaW5lZChQeV9OQU4pCisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJuYW4iLCBQeUZsb2F0X0Zyb21Eb3VibGUobV9uYW4oKSkpOworI2VuZGlmCiAKLSAgICBmaW5hbGx5OgorICBmaW5hbGx5OgogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tZDVtb2R1bGUuYyBiL01vZHVsZXMvbWQ1bW9kdWxlLmMKaW5kZXggNWNiM2QzNi4uZjk0YWNjNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tZDVtb2R1bGUuYworKysgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCkBAIC0xOCw3ICsxOCwxMyBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAiaGFzaGxpYi5oIgorI2luY2x1ZGUgInB5c3RyaGV4LmgiCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfbWQ1CitjbGFzcyBNRDVUeXBlICJNRDVvYmplY3QgKiIgIiZQeVR5cGVfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTZlNTI2MTcxOTk1N2E5MTJdKi8KIAogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIApAQCAtNDgsNiArNTQsNyBAQAogICAgIHN0cnVjdCBtZDVfc3RhdGUgaGFzaF9zdGF0ZTsKIH0gTUQ1b2JqZWN0OwogCisjaW5jbHVkZSAiY2xpbmljL21kNW1vZHVsZS5jLmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKQEAgLTMzMiwzMCArMzM5LDM0IEBACiAKIC8qIEV4dGVybmFsIG1ldGhvZHMgZm9yIGEgaGFzaCBvYmplY3QgKi8KIAotUHlEb2NfU1RSVkFSKE1ENV9jb3B5X19kb2NfXywgIlJldHVybiBhIGNvcHkgb2YgdGhlIGhhc2ggb2JqZWN0LiIpOworLypbY2xpbmljIGlucHV0XQorTUQ1VHlwZS5jb3B5CisKK1JldHVybiBhIGNvcHkgb2YgdGhlIGhhc2ggb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotTUQ1X2NvcHkoTUQ1b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorTUQ1VHlwZV9jb3B5X2ltcGwoTUQ1b2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU5NmViMzY4NTJmMDIwNzEgaW5wdXQ9MmMwOWU2ZDI0OTNmMzA3OV0qLwogewogICAgIE1ENW9iamVjdCAqbmV3b2JqOwogCi0gICAgaWYgKFB5X1RZUEUoc2VsZikgPT0gJk1ENXR5cGUpIHsKLSAgICAgICAgaWYgKCAobmV3b2JqID0gbmV3TUQ1b2JqZWN0KCkpPT1OVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCAobmV3b2JqID0gbmV3TUQ1b2JqZWN0KCkpPT1OVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICgobmV3b2JqID0gbmV3TUQ1b2JqZWN0KCkpPT1OVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIG5ld29iai0+aGFzaF9zdGF0ZSA9IHNlbGYtPmhhc2hfc3RhdGU7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld29iajsKIH0KIAotUHlEb2NfU1RSVkFSKE1ENV9kaWdlc3RfX2RvY19fLAotIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGJpbmFyeSBkYXRhLiIpOworLypbY2xpbmljIGlucHV0XQorTUQ1VHlwZS5kaWdlc3QKKworUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgYmluYXJ5IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1NRDVfZGlnZXN0KE1ENW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK01ENVR5cGVfZGlnZXN0X2ltcGwoTUQ1b2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWViNjkxZGM0MTkwYTA3ZWMgaW5wdXQ9N2I5NmU2NTM4OTQxMmEzNF0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W01ENV9ESUdFU1RTSVpFXTsKICAgICBzdHJ1Y3QgbWQ1X3N0YXRlIHRlbXA7CkBAIC0zNjUsNTQgKzM3Niw0MSBAQAogICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyICopZGlnZXN0LCBNRDVfRElHRVNUU0laRSk7CiB9CiAKLVB5RG9jX1NUUlZBUihNRDVfaGV4ZGlnZXN0X19kb2NfXywKLSJSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuIik7CisvKltjbGluaWMgaW5wdXRdCitNRDVUeXBlLmhleGRpZ2VzdAorCitSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1NRDVfaGV4ZGlnZXN0KE1ENW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK01ENVR5cGVfaGV4ZGlnZXN0X2ltcGwoTUQ1b2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE3YmFkY2VkMWYzYWM5MzIgaW5wdXQ9YjYwYjE5ZGU2NDQ3OThkZF0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W01ENV9ESUdFU1RTSVpFXTsKICAgICBzdHJ1Y3QgbWQ1X3N0YXRlIHRlbXA7Ci0gICAgUHlPYmplY3QgKnJldHZhbDsKLSAgICBQeV9VQ1MxICpoZXhfZGlnZXN0OwotICAgIGludCBpLCBqOwogCiAgICAgLyogR2V0IHRoZSByYXcgKGJpbmFyeSkgZGlnZXN0IHZhbHVlICovCiAgICAgdGVtcCA9IHNlbGYtPmhhc2hfc3RhdGU7CiAgICAgbWQ1X2RvbmUoJnRlbXAsIGRpZ2VzdCk7CiAKLSAgICAvKiBDcmVhdGUgYSBuZXcgc3RyaW5nICovCi0gICAgcmV0dmFsID0gUHlVbmljb2RlX05ldyhNRDVfRElHRVNUU0laRSAqIDIsIDEyNyk7Ci0gICAgaWYgKCFyZXR2YWwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBoZXhfZGlnZXN0ID0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmV0dmFsKTsKLQotICAgIC8qIE1ha2UgaGV4IHZlcnNpb24gb2YgdGhlIGRpZ2VzdCAqLwotICAgIGZvcihpPWo9MDsgaTxNRDVfRElHRVNUU0laRTsgaSsrKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKLSAgICAgICAgYyA9IChkaWdlc3RbaV0gPj4gNCkgJiAweGY7Ci0gICAgICAgIGhleF9kaWdlc3RbaisrXSA9IFB5X2hleGRpZ2l0c1tjXTsKLSAgICAgICAgYyA9IChkaWdlc3RbaV0gJiAweGYpOwotICAgICAgICBoZXhfZGlnZXN0W2orK10gPSBQeV9oZXhkaWdpdHNbY107Ci0gICAgfQotI2lmZGVmIFB5X0RFQlVHCi0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXR2YWwsIDEpKTsKLSNlbmRpZgotICAgIHJldHVybiByZXR2YWw7CisgICAgcmV0dXJuIF9QeV9zdHJoZXgoKGNvbnN0IGNoYXIqKWRpZ2VzdCwgTUQ1X0RJR0VTVFNJWkUpOwogfQogCi1QeURvY19TVFJWQVIoTUQ1X3VwZGF0ZV9fZG9jX18sCi0iVXBkYXRlIHRoaXMgaGFzaCBvYmplY3QncyBzdGF0ZSB3aXRoIHRoZSBwcm92aWRlZCBzdHJpbmcuIik7CisvKltjbGluaWMgaW5wdXRdCitNRDVUeXBlLnVwZGF0ZQorCisgICAgb2JqOiBvYmplY3QKKyAgICAvCisKK1VwZGF0ZSB0aGlzIGhhc2ggb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotTUQ1X3VwZGF0ZShNRDVvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorTUQ1VHlwZV91cGRhdGUoTUQ1b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWY2YWQxNjg0MTYzMzg0MjMgaW5wdXQ9NmUxZWZjZDllY2YxNzAzMl0qLwogewotICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp1cGRhdGUiLCAmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKG9iaiwgJmJ1Zik7CiAKICAgICBtZDVfcHJvY2Vzcygmc2VsZi0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbik7CkBAIC00MjMsMTAgKzQyMSwxMCBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgTUQ1X21ldGhvZHNbXSA9IHsKLSAgICB7ImNvcHkiLCAgICAgIChQeUNGdW5jdGlvbilNRDVfY29weSwgICAgICBNRVRIX05PQVJHUywgIE1ENV9jb3B5X19kb2NfX30sCi0gICAgeyJkaWdlc3QiLCAgICAoUHlDRnVuY3Rpb24pTUQ1X2RpZ2VzdCwgICAgTUVUSF9OT0FSR1MsICBNRDVfZGlnZXN0X19kb2NfX30sCi0gICAgeyJoZXhkaWdlc3QiLCAoUHlDRnVuY3Rpb24pTUQ1X2hleGRpZ2VzdCwgTUVUSF9OT0FSR1MsICBNRDVfaGV4ZGlnZXN0X19kb2NfX30sCi0gICAgeyJ1cGRhdGUiLCAgICAoUHlDRnVuY3Rpb24pTUQ1X3VwZGF0ZSwgICAgTUVUSF9WQVJBUkdTLCBNRDVfdXBkYXRlX19kb2NfX30sCisgICAgTUQ1VFlQRV9DT1BZX01FVEhPRERFRgorICAgIE1ENVRZUEVfRElHRVNUX01FVEhPRERFRgorICAgIE1ENVRZUEVfSEVYRElHRVNUX01FVEhPRERFRgorICAgIE1ENVRZUEVfVVBEQVRFX01FVEhPRERFRgogICAgIHtOVUxMLCAgICAgICAgTlVMTH0gICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNTAyLDI3ICs1MDAsMjYgQEAKIAogLyogVGhlIHNpbmdsZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb246IG5ldygpICovCiAKLVB5RG9jX1NUUlZBUihNRDVfbmV3X19kb2NfXywKLSJSZXR1cm4gYSBuZXcgTUQ1IGhhc2ggb2JqZWN0OyBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJpbmcuIik7CisvKltjbGluaWMgaW5wdXRdCitfbWQ1Lm1kNQorCisgICAgc3RyaW5nOiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSBiJycKKworUmV0dXJuIGEgbmV3IE1ENSBoYXNoIG9iamVjdDsgb3B0aW9uYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RyaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotTUQ1X25ldyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCitfbWQ1X21kNV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzdHJpbmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmNmZDBmOGMwOTFiOTdlNiBpbnB1dD1kMTJlZjhmNzJkNjg0ZjdiXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzdHJpbmciLCBOVUxMfTsKICAgICBNRDVvYmplY3QgKm5ldzsKLSAgICBQeU9iamVjdCAqZGF0YV9vYmogPSBOVUxMOwogICAgIFB5X2J1ZmZlciBidWY7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJ8TzpuZXciLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2JqKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YV9vYmopCi0gICAgICAgIEdFVF9CVUZGRVJfVklFV19PUl9FUlJPVVQoZGF0YV9vYmosICZidWYpOworICAgIGlmIChzdHJpbmcpCisgICAgICAgIEdFVF9CVUZGRVJfVklFV19PUl9FUlJPVVQoc3RyaW5nLCAmYnVmKTsKIAogICAgIGlmICgobmV3ID0gbmV3TUQ1b2JqZWN0KCkpID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGRhdGFfb2JqKQorICAgICAgICBpZiAoc3RyaW5nKQogICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNTMxLDExICs1MjgsMTEgQEAKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXcpOwotICAgICAgICBpZiAoZGF0YV9vYmopCisgICAgICAgIGlmIChzdHJpbmcpCiAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGRhdGFfb2JqKSB7CisgICAgaWYgKHN0cmluZykgewogICAgICAgICBtZDVfcHJvY2VzcygmbmV3LT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuKTsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICB9CkBAIC01NDcsNyArNTQ0LDcgQEAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgTUQ1X2Z1bmN0aW9uc1tdID0gewotICAgIHsibWQ1IiwgKFB5Q0Z1bmN0aW9uKU1ENV9uZXcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBNRDVfbmV3X19kb2NfX30sCisgICAgX01ENV9NRDVfTUVUSE9EREVGCiAgICAge05VTEwsICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwppbmRleCBhMGNjZWViLi5iYjk4YTk5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL21tYXBtb2R1bGUuYworKysgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwpAQCAtMzAxLDE2ICszMDEsMTcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gc2VsZi0+cG9zOwogICAgIFB5X3NzaXplX3QgZW5kID0gc2VsZi0+c2l6ZTsKLSAgICBjb25zdCBjaGFyICpuZWVkbGU7Ci0gICAgUHlfc3NpemVfdCBsZW47CisgICAgUHlfYnVmZmVyIHZpZXc7CiAKICAgICBDSEVDS19WQUxJRChOVUxMKTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgcmV2ZXJzZSA/ICJ5I3xubjpyZmluZCIgOiAieSN8bm46ZmluZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkbGUsICZsZW4sICZzdGFydCwgJmVuZCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgcmV2ZXJzZSA/ICJ5KnxubjpyZmluZCIgOiAieSp8bm46ZmluZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc3RhcnQsICZlbmQpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IGNoYXIgKnAsICpzdGFydF9wLCAqZW5kX3A7CiAgICAgICAgIGludCBzaWduID0gcmV2ZXJzZSA/IC0xIDogMTsKKyAgICAgICAgY29uc3QgY2hhciAqbmVlZGxlID0gdmlldy5idWY7CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gdmlldy5sZW47CiAKICAgICAgICAgaWYgKHN0YXJ0IDwgMCkKICAgICAgICAgICAgIHN0YXJ0ICs9IHNlbGYtPnNpemU7CkBAIC0zMzUsOSArMzM2LDExIEBACiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuICYmIG5lZWRsZVtpXSA9PSBwW2ldOyArK2kpCiAgICAgICAgICAgICAgICAgLyogbm90aGluZyAqLzsKICAgICAgICAgICAgIGlmIChpID09IGxlbikgeworICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocCAtIHNlbGYtPmRhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKC0xKTsKICAgICB9CiB9CkBAIC0zODUsMjIgKzM4OCwyNSBAQAogbW1hcF93cml0ZV9tZXRob2QobW1hcF9vYmplY3QgKnNlbGYsCiAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IGxlbmd0aDsKLSAgICBjaGFyICpkYXRhOworICAgIFB5X2J1ZmZlciBkYXRhOwogCiAgICAgQ0hFQ0tfVkFMSUQoTlVMTCk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Izp3cml0ZSIsICZkYXRhLCAmbGVuZ3RoKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOndyaXRlIiwgJmRhdGEpKQogICAgICAgICByZXR1cm4oTlVMTCk7CiAKLSAgICBpZiAoIWlzX3dyaXRhYmxlKHNlbGYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICgoc2VsZi0+cG9zICsgbGVuZ3RoKSA+IHNlbGYtPnNpemUpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJkYXRhIG91dCBvZiByYW5nZSIpOworICAgIGlmICghaXNfd3JpdGFibGUoc2VsZikpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBtZW1jcHkoc2VsZi0+ZGF0YStzZWxmLT5wb3MsIGRhdGEsIGxlbmd0aCk7Ci0gICAgc2VsZi0+cG9zID0gc2VsZi0+cG9zK2xlbmd0aDsKKworICAgIGlmICgoc2VsZi0+cG9zICsgZGF0YS5sZW4pID4gc2VsZi0+c2l6ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImRhdGEgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtY3B5KHNlbGYtPmRhdGEgKyBzZWxmLT5wb3MsIGRhdGEuYnVmLCBkYXRhLmxlbik7CisgICAgc2VsZi0+cG9zID0gc2VsZi0+cG9zICsgZGF0YS5sZW47CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNDU5LDE1ICs0NjUsMTMgQEAKIAogI2lmZGVmIFVOSVgKICAgICB7Ci0gICAgICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICAgICAgaWYgKC0xID09IGZzdGF0KHNlbGYtPmZkLCAmYnVmKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0IHN0YXR1czsKKyAgICAgICAgaWYgKF9QeV9mc3RhdChzZWxmLT5mZCwgJnN0YXR1cykgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogI2lmZGVmIEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQKLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoYnVmLnN0X3NpemUpOworICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZyhzdGF0dXMuc3Rfc2l6ZSk7CiAjZWxzZQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGJ1Zi5zdF9zaXplKTsKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzdGF0dXMuc3Rfc2l6ZSk7CiAjZW5kaWYKICAgICB9CiAjZW5kaWYgLyogVU5JWCAqLwpAQCAtNzE1LDcgKzcxOSw3IEBACiB7CiAgICAgUHlfc3NpemVfdCByZXM7CiAKLSAgICByZXMgPSBzaXplb2YobW1hcF9vYmplY3QpOworICAgIHJlcyA9IF9QeU9iamVjdF9TSVpFKFB5X1RZUEUoc2VsZikpOwogICAgIGlmIChzZWxmLT50YWduYW1lKQogICAgICAgICByZXMgKz0gc3RybGVuKHNlbGYtPnRhZ25hbWUpICsgMTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7CkBAIC0xMTA2LDkgKzExMTAsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG5ld19tbWFwX29iamVjdChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQogewotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKLSNlbmRpZgorICAgIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3Qgc3RhdHVzOwogICAgIG1tYXBfb2JqZWN0ICptX29iajsKICAgICBQeU9iamVjdCAqbWFwX3NpemVfb2JqID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IG1hcF9zaXplOwpAQCAtMTE3MywzMiArMTE3NSwzMSBAQAogICAgIGlmIChmZCAhPSAtMSkKICAgICAgICAgKHZvaWQpZmNudGwoZmQsIEZfRlVMTEZTWU5DKTsKICNlbmRpZgotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICBpZiAoZmQgIT0gLTEgJiYgZnN0YXQoZmQsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisgICAgaWYgKGZkICE9IC0xICYmIF9QeV9mc3RhdF9ub3JhaXNlKGZkLCAmc3RhdHVzKSA9PSAwCisgICAgICAgICYmIFNfSVNSRUcoc3RhdHVzLnN0X21vZGUpKSB7CiAgICAgICAgIGlmIChtYXBfc2l6ZSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoc3Quc3Rfc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc3RhdHVzLnN0X3NpemUgPT0gMCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IG1tYXAgYW4gZW1wdHkgZmlsZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBzdC5zdF9zaXplKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID49IHN0YXR1cy5zdF9zaXplKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbWFwIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gZmlsZSBzaXplIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3Quc3Rfc2l6ZSAtIG9mZnNldCA+IFBZX1NTSVpFX1RfTUFYKSB7CisgICAgICAgICAgICBpZiAoc3RhdHVzLnN0X3NpemUgLSBvZmZzZXQgPiBQWV9TU0laRV9UX01BWCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tYXAgbGVuZ3RoIGlzIHRvbyBsYXJnZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFwX3NpemUgPSAoUHlfc3NpemVfdCkgKHN0LnN0X3NpemUgLSBvZmZzZXQpOwotICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCArIChzaXplX3QpbWFwX3NpemUgPiBzdC5zdF9zaXplKSB7CisgICAgICAgICAgICBtYXBfc2l6ZSA9IChQeV9zc2l6ZV90KSAoc3RhdHVzLnN0X3NpemUgLSBvZmZzZXQpOworICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCArIG1hcF9zaXplID4gc3RhdHVzLnN0X3NpemUpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbWFwIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gZmlsZSBzaXplIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSNlbmRpZgogICAgIG1fb2JqID0gKG1tYXBfb2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CiAgICAgaWYgKG1fb2JqID09IE5VTEwpIHtyZXR1cm4gTlVMTDt9CiAgICAgbV9vYmotPmRhdGEgPSBOVUxMOwpAQCAtMTIyMSw3ICsxMjIyLDYgQEAKICAgICAgICAgZmQgPSBkZXZ6ZXJvID0gX1B5X29wZW4oIi9kZXYvemVybyIsIE9fUkRXUik7CiAgICAgICAgIGlmIChkZXZ6ZXJvID09IC0xKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobV9vYmopOwotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMTMyNSwxMSArMTMyNSwxMyBAQAogICAgICAqLwogICAgIGlmIChmaWxlbm8gIT0gLTEgJiYgZmlsZW5vICE9IDApIHsKICAgICAgICAgLyogRW5zdXJlIHRoYXQgZmlsZW5vIGlzIHdpdGhpbiB0aGUgQ1JUJ3MgdmFsaWQgcmFuZ2UgKi8KLSAgICAgICAgaWYgKF9QeVZlcmlmeV9mZChmaWxlbm8pID09IDApIHsKKyAgICAgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmlsZW5vKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAogICAgICAgICBmaCA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmlsZW5vKTsKKyAgICAgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKICAgICAgICAgaWYgKGZoPT0oSEFORExFKS0xKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvbmlzbW9kdWxlLmMgYi9Nb2R1bGVzL25pc21vZHVsZS5jCmluZGV4IDBhZjQ5NWYuLjY0ZWI1ZGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbmlzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9uaXNtb2R1bGUuYwpAQCAtNDU2LDggKzQ1Niw4IEBACiAgICAgTlVMTAogfTsKIAotUHlPYmplY3QqCi1QeUluaXRfbmlzICh2b2lkKQorUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9uaXModm9pZCkKIHsKICAgICBQeU9iamVjdCAqbSwgKmQ7CiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmbmlzbW9kdWxlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvb3NzYXVkaW9kZXYuYyBiL01vZHVsZXMvb3NzYXVkaW9kZXYuYwppbmRleCAyZDBkZDA5Li5kMmZkNWM4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKKysrIGIvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiAkSWQkCiAgKi8KIAorI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKQEAgLTUxLDggKzUyLDggQEAKICAgICBjaGFyICAgICpkZXZpY2VuYW1lOyAgICAgICAgICAgICAgLyogbmFtZSBvZiB0aGUgZGV2aWNlIGZpbGUgKi8KICAgICBpbnQgICAgICBmZDsgICAgICAgICAgICAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCiAgICAgaW50ICAgICAgbW9kZTsgICAgICAgICAgICAgICAgICAgIC8qIGZpbGUgbW9kZSAoT19SRE9OTFksIGV0Yy4pICovCi0gICAgaW50ICAgICAgaWNvdW50OyAgICAgICAgICAgICAgICAgIC8qIGlucHV0IGNvdW50ICovCi0gICAgaW50ICAgICAgb2NvdW50OyAgICAgICAgICAgICAgICAgIC8qIG91dHB1dCBjb3VudCAqLworICAgIFB5X3NzaXplX3QgaWNvdW50OyAgICAgICAgICAgICAgICAvKiBpbnB1dCBjb3VudCAqLworICAgIFB5X3NzaXplX3Qgb2NvdW50OyAgICAgICAgICAgICAgICAvKiBvdXRwdXQgY291bnQgKi8KICAgICB1aW50MzJfdCBhZm10czsgICAgICAgICAgICAgICAgICAgLyogYXVkaW8gZm9ybWF0cyBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgKi8KIH0gb3NzX2F1ZGlvX3Q7CiAKQEAgLTExNiwxMSArMTE3LDggQEAKICAgICAgICBwcm92aWRlcyBhIHNwZWNpYWwgaW9jdGwoKSBmb3Igbm9uLWJsb2NraW5nIHJlYWQvd3JpdGUsIHdoaWNoIGlzCiAgICAgICAgZXhwb3NlZCB2aWEgb3NzX25vbmJsb2NrKCkgYmVsb3cuICovCiAgICAgZmQgPSBfUHlfb3BlbihkZXZpY2VuYW1lLCBpbW9kZXxPX05PTkJMT0NLKTsKLQotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZGV2aWNlbmFtZSk7CisgICAgaWYgKGZkID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICAvKiBBbmQgKHRyeSB0bykgcHV0IGl0IGJhY2sgaW4gYmxvY2tpbmcgbW9kZSBzbyB3ZSBnZXQgdGhlCiAgICAgICAgZXhwZWN0ZWQgd3JpdGUoKSBzZW1hbnRpY3MuICovCkBAIC0xODAsMTAgKzE3OCw4IEBACiAgICAgfQogCiAgICAgZmQgPSBfUHlfb3BlbihkZXZpY2VuYW1lLCBPX1JEV1IpOwotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZGV2aWNlbmFtZSk7CisgICAgaWYgKGZkID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICBpZiAoKHNlbGYgPSBQeU9iamVjdF9OZXcob3NzX21peGVyX3QsICZPU1NNaXhlclR5cGUpKSA9PSBOVUxMKSB7CiAgICAgICAgIGNsb3NlKGZkKTsKQEAgLTQwNCwyOSArNDAwLDI1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogb3NzX3JlYWQob3NzX2F1ZGlvX3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBzaXplLCBjb3VudDsKLSAgICBjaGFyICpjcDsKKyAgICBQeV9zc2l6ZV90IHNpemUsIGNvdW50OwogICAgIFB5T2JqZWN0ICpydjsKIAogICAgIGlmICghX2lzX2ZkX3ZhbGlkKHNlbGYtPmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6cmVhZCIsICZzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIm46cmVhZCIsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSk7CiAgICAgaWYgKHJ2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGNwID0gUHlCeXRlc19BU19TVFJJTkcocnYpOwogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGNvdW50ID0gcmVhZChzZWxmLT5mZCwgY3AsIHNpemUpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICBjb3VudCA9IF9QeV9yZWFkKHNlbGYtPmZkLCBQeUJ5dGVzX0FTX1NUUklORyhydiksIHNpemUpOworICAgIGlmIChjb3VudCA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKICAgICBzZWxmLT5pY291bnQgKz0gY291bnQ7CiAgICAgX1B5Qnl0ZXNfUmVzaXplKCZydiwgY291bnQpOwogICAgIHJldHVybiBydjsKQEAgLTQzNSwzMyArNDI3LDMyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogb3NzX3dyaXRlKG9zc19hdWRpb190ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBjaGFyICpjcDsKLSAgICBpbnQgcnYsIHNpemU7CisgICAgUHlfYnVmZmVyIGRhdGE7CisgICAgUHlfc3NpemVfdCBydjsKIAogICAgIGlmICghX2lzX2ZkX3ZhbGlkKHNlbGYtPmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkjOndyaXRlIiwgJmNwLCAmc2l6ZSkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOndyaXRlIiwgJmRhdGEpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBydiA9IHdyaXRlKHNlbGYtPmZkLCBjcCwgc2l6ZSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBydiA9IF9QeV93cml0ZShzZWxmLT5mZCwgZGF0YS5idWYsIGRhdGEubGVuKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKyAgICBpZiAocnYgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKHJ2ID09IC0xKSB7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2VsZi0+b2NvdW50ICs9IHJ2OwotICAgIH0KKyAgICBzZWxmLT5vY291bnQgKz0gcnY7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhydik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBvc3Nfd3JpdGVhbGwob3NzX2F1ZGlvX3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNoYXIgKmNwOwotICAgIGludCBydiwgc2l6ZTsKKyAgICBQeV9idWZmZXIgZGF0YTsKKyAgICBjb25zdCBjaGFyICpjcDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlfc3NpemVfdCBydjsKICAgICBmZF9zZXQgd3JpdGVfc2V0X2ZkczsKICAgICBpbnQgc2VsZWN0X3J2OwogCkBAIC00NzUsNDEgKzQ2Niw1MCBAQAogICAgIGlmICghX2lzX2ZkX3ZhbGlkKHNlbGYtPmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkjOndyaXRlIiwgJmNwLCAmc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kjp3cml0ZWFsbCIsICZkYXRhKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIV9QeUlzU2VsZWN0YWJsZV9mZChzZWxmLT5mZCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSBkZXNjcmlwdG9yIG91dCBvZiByYW5nZSBmb3Igc2VsZWN0Iik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogdXNlIHNlbGVjdCB0byB3YWl0IGZvciBhdWRpbyBkZXZpY2UgdG8gYmUgYXZhaWxhYmxlICovCiAgICAgRkRfWkVSTygmd3JpdGVfc2V0X2Zkcyk7CiAgICAgRkRfU0VUKHNlbGYtPmZkLCAmd3JpdGVfc2V0X2Zkcyk7CisgICAgY3AgPSAoY29uc3QgY2hhciAqKWRhdGEuYnVmOworICAgIHNpemUgPSBkYXRhLmxlbjsKIAogICAgIHdoaWxlIChzaXplID4gMCkgewogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHNlbGVjdF9ydiA9IHNlbGVjdChzZWxmLT5mZCsxLCBOVUxMLCAmd3JpdGVfc2V0X2ZkcywgTlVMTCwgTlVMTCk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGFzc2VydChzZWxlY3RfcnYgIT0gMCk7ICAgICAgICAgLyogbm8gdGltZW91dCwgY2FuJ3QgZXhwaXJlICovCi0gICAgICAgIGlmIChzZWxlY3RfcnYgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogCi0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcnYgPSB3cml0ZShzZWxmLT5mZCwgY3AsIHNpemUpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAocnYgPT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsgICAgICAvKiBidWZmZXIgaXMgZnVsbCwgdHJ5IGFnYWluICovCi0gICAgICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgIC8qIGl0J3MgYSByZWFsIGVycm9yICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiB3cm90ZSBydiBieXRlcyAqLwotICAgICAgICAgICAgc2VsZi0+b2NvdW50ICs9IHJ2OwotICAgICAgICAgICAgc2l6ZSAtPSBydjsKLSAgICAgICAgICAgIGNwICs9IHJ2OworICAgICAgICBhc3NlcnQoc2VsZWN0X3J2ICE9IDApOyAgIC8qIG5vIHRpbWVvdXQsIGNhbid0IGV4cGlyZSAqLworICAgICAgICBpZiAoc2VsZWN0X3J2ID09IC0xKSB7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAgICAgICAgIH0KKworICAgICAgICBydiA9IF9QeV93cml0ZShzZWxmLT5mZCwgY3AsIFB5X01JTihzaXplLCBJTlRfTUFYKSk7CisgICAgICAgIGlmIChydiA9PSAtMSkgeworICAgICAgICAgICAgLyogYnVmZmVyIGlzIGZ1bGwsIHRyeSBhZ2FpbiAqLworICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikgeworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBpdCdzIGEgcmVhbCBlcnJvciAqLworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdyb3RlIHJ2IGJ5dGVzICovCisgICAgICAgIHNlbGYtPm9jb3VudCArPSBydjsKKyAgICAgICAgc2l6ZSAtPSBydjsKKyAgICAgICAgY3AgKz0gcnY7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvb3ZlcmxhcHBlZC5jIGIvTW9kdWxlcy9vdmVybGFwcGVkLmMKaW5kZXggZWY3N2M4OC4uZjg1ZTViYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9vdmVybGFwcGVkLmMKKysrIGIvTW9kdWxlcy9vdmVybGFwcGVkLmMKQEAgLTIzLDYgKzIzLDEyIEBACiAjICBkZWZpbmUgVF9QT0lOVEVSIFRfVUxPTkdMT05HCiAjZW5kaWYKIAorLyogQ29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjMgKi8KKyNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNDAwMDAKKyMgICAgZGVmaW5lIFB5TWVtX1Jhd01hbGxvYyBQeU1lbV9NYWxsb2MKKyMgICAgZGVmaW5lIFB5TWVtX1Jhd0ZyZWUgUHlNZW1fRnJlZQorI2VuZGlmCisKICNkZWZpbmUgRl9IQU5ETEUgRl9QT0lOVEVSCiAjZGVmaW5lIEZfVUxPTkdfUFRSIEZfUE9JTlRFUgogI2RlZmluZSBGX0RXT1JEICJrIgpAQCAtMjM4LDcgKzI0NCw3IEBACiAgICAgUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMocC0+Q29tcGxldGlvblBvcnQsIFRpbWVyT3JXYWl0RmlyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcC0+T3ZlcmxhcHBlZCk7CiAgICAgLyogaWdub3JlIHBvc3NpYmxlIGVycm9yISAqLwotICAgIFB5TWVtX0ZyZWUocCk7CisgICAgUHlNZW1fUmF3RnJlZShwKTsKIH0KIAogUHlEb2NfU1RSVkFSKApAQCAtMjYyLDcgKzI2OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmTWlsbGlzZWNvbmRzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBwZGF0YSA9IFB5TWVtX01hbGxvYyhzaXplb2Yoc3RydWN0IFBvc3RDYWxsYmFja0RhdGEpKTsKKyAgICAvKiBVc2UgUHlNZW1fUmF3TWFsbG9jKCkgcmF0aGVyIHRoYW4gUHlNZW1fTWFsbG9jKCksIHNpbmNlCisgICAgICAgUG9zdFRvUXVldWVDYWxsYmFjaygpIHdpbGwgY2FsbCBQeU1lbV9GcmVlKCkgZnJvbSBhIG5ldyBDIHRocmVhZAorICAgICAgIHdoaWNoIGRvZXNuJ3QgaG9sZCB0aGUgR0lMLiAqLworICAgIHBkYXRhID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZihzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSkpOwogICAgIGlmIChwZGF0YSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAKQEAgLTI3Myw3ICsyODIsNyBAQAogICAgICAgICAgICAgcGRhdGEsIE1pbGxpc2Vjb25kcywKICAgICAgICAgICAgIFdUX0VYRUNVVEVJTldBSVRUSFJFQUQgfCBXVF9FWEVDVVRFT05MWU9OQ0UpKQogICAgIHsKLSAgICAgICAgUHlNZW1fRnJlZShwZGF0YSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocGRhdGEpOwogICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jIGIvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYwppbmRleCAzNmU5ODkzLi42NDcxYjhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCisrKyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKQEAgLTIzLDYgKzIzLDExIEBACiAgKiAgdGhhdCBsaW50IGRldGVjdHMgYXJlIGdvbmUsIGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2FybmluZ3Mgd2l0aAogICogIFB5X1tYXURFQ1JFRigpIGFuZCBQeV9bWF1JTkNSRUYoKSBtYWNyb3MuICBUaGUgbGludCBhbm5vdGF0aW9ucwogICogIGxvb2sgbGlrZSAiTk9URSguLi4pIi4KKyAqCisgKiAgVG8gZGVidWcgcGFyc2VyIGVycm9ycyBsaWtlCisgKiAgICAgICJwYXJzZXIuUGFyc2VyRXJyb3I6IEV4cGVjdGVkIG5vZGUgdHlwZSAxMiwgZ290IDMzMy4iCisgKiAgZGVjb2RlIHN5bWJvbCBudW1iZXJzIHVzaW5nIHRoZSBhdXRvbWF0aWNhbGx5LWdlbmVyYXRlZCBmaWxlcworICogIExpYi9zeW1ib2wuaCBhbmQgSW5jbHVkZS90b2tlbi5oLgogICovCiAKICNpbmNsdWRlICJQeXRob24uaCIgICAgICAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIFB5dGhvbiBBUEkgICAgICAgICAgICAgKi8KQEAgLTM5Miw3ICszOTcsNyBAQAogewogICAgIFB5X3NzaXplX3QgcmVzOwogCi0gICAgcmVzID0gc2l6ZW9mKFB5U1RfT2JqZWN0KSArIF9QeU5vZGVfU2l6ZU9mKHN0LT5zdF9ub2RlKTsKKyAgICByZXMgPSBfUHlPYmplY3RfU0laRShQeV9UWVBFKHN0KSkgKyBfUHlOb2RlX1NpemVPZihzdC0+c3Rfbm9kZSk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwogfQogCkBAIC0xMDM2LDYgKzEwNDEsOCBAQAogVkFMSURBVEVSKG9yX3Rlc3QpOwogVkFMSURBVEVSKHRlc3Rfbm9jb25kKTsgICAgICAgICBWQUxJREFURVIobGFtYmRlZl9ub2NvbmQpOwogVkFMSURBVEVSKHlpZWxkX2FyZyk7CitWQUxJREFURVIoYXN5bmNfZnVuY2RlZik7ICAgICAgIFZBTElEQVRFUihhc3luY19zdG10KTsKK1ZBTElEQVRFUihhdG9tX2V4cHIpOwogCiAjdW5kZWYgVkFMSURBVEVSCiAKQEAgLTEwODcsMzAgKzEwOTQsNTYgQEAKICAgICByZXR1cm4gKHJlcyk7CiB9CiAKLQotLyogIFggKCcsJyBYKSBbJywnXQotICovCisvKiAgWCAoJywnIFgpIFsnLCddICovCiBzdGF0aWMgaW50Ci12YWxpZGF0ZV9yZXBlYXRpbmdfbGlzdChub2RlICp0cmVlLCBpbnQgbnR5cGUsIGludCAoKnZmdW5jKShub2RlICopLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uc3QgbmFtZSkKK3ZhbGlkYXRlX3JlcGVhdGluZ19saXN0X3ZhcmlhYmxlKG5vZGUgKnRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGlzdF9ub2RlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCp2YWxpZGF0ZV9jaGlsZF9mdW5jX2luYykobm9kZSAqLCBpbnQgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnN0IGxpc3Rfbm9kZV90eXBlX25hbWUpCiB7CiAgICAgaW50IG5jaCA9IE5DSCh0cmVlKTsKLSAgICBpbnQgcmVzID0gKG5jaCAmJiB2YWxpZGF0ZV9udHlwZSh0cmVlLCBudHlwZSkKLSAgICAgICAgICAgICAgICYmIHZmdW5jKENISUxEKHRyZWUsIDApKSk7CisgICAgaW50IHJlcyA9IChuY2ggJiYgdmFsaWRhdGVfbnR5cGUodHJlZSwgbGlzdF9ub2RlX3R5cGUpKTsKIAotICAgIGlmICghcmVzICYmICFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAodm9pZCkgdmFsaWRhdGVfbnVtbm9kZXModHJlZSwgMSwgbmFtZSk7CisgICAgaWYgKCFyZXMgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgLyogVW5jb25kaXRpb25hbGx5IHJhaXNlLiAqLworICAgICAgICAodm9pZCkgdmFsaWRhdGVfbnVtbm9kZXModHJlZSwgMSwgbGlzdF9ub2RlX3R5cGVfbmFtZSk7CisgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoaXNfZXZlbihuY2gpKQotICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgLS1uY2gpKTsKLSAgICAgICAgaWYgKHJlcyAmJiBuY2ggPiAxKSB7Ci0gICAgICAgICAgICBpbnQgcG9zID0gMTsKLSAgICAgICAgICAgIGZvciAoIDsgcmVzICYmIHBvcyA8IG5jaDsgcG9zICs9IDIpCi0gICAgICAgICAgICAgICAgcmVzID0gKHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIHBvcykpCi0gICAgICAgICAgICAgICAgICAgICAgICYmIHZmdW5jKENISUxEKHRyZWUsIHBvcyArIDEpKSk7CisgICAgICAgIGZvciAoIDsgcmVzICYmICpwb3MgPCBuY2g7ICkgeworICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfY2hpbGRfZnVuY19pbmModHJlZSwgcG9zKTsKKyAgICAgICAgICAgIGlmICghcmVzIHx8ICpwb3MgPj0gbmNoKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgKCpwb3MpKyspKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKHJlcyk7CisgICAgcmV0dXJuIHJlczsKK30KKworLyogIFggKCcsJyBYKSBbJywnXSAqLworc3RhdGljIGludAordmFsaWRhdGVfcmVwZWF0aW5nX2xpc3Qobm9kZSAqdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaXN0X25vZGVfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnZhbGlkYXRlX2NoaWxkX2Z1bmMpKG5vZGUgKiksCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb25zdCBsaXN0X25vZGVfdHlwZV9uYW1lKQoreworICAgIGludCBuY2ggPSBOQ0godHJlZSk7CisgICAgaW50IHJlcyA9IChuY2ggJiYgdmFsaWRhdGVfbnR5cGUodHJlZSwgbGlzdF9ub2RlX3R5cGUpKTsKKyAgICBpbnQgcG9zID0gMDsKKworICAgIGlmICghcmVzICYmICFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIC8qIFVuY29uZGl0aW9uYWxseSByYWlzZS4gKi8KKyAgICAgICAgKHZvaWQpIHZhbGlkYXRlX251bW5vZGVzKHRyZWUsIDEsIGxpc3Rfbm9kZV90eXBlX25hbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZm9yICggOyByZXMgJiYgcG9zIDwgbmNoOyApIHsKKyAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX2NoaWxkX2Z1bmMoQ0hJTEQodHJlZSwgcG9zKyspKTsKKyAgICAgICAgICAgIGlmICghcmVzIHx8IHBvcyA+PSBuY2gpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV9jb21tYShDSElMRCh0cmVlLCBwb3MrKykpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXM7CiB9CiAKIApAQCAtMTU3Nyw2ICsxNjEwLDcgQEAKICAgICAgICAgICB8fCAobnR5cGUgPT0gdHJ5X3N0bXQpCiAgICAgICAgICAgfHwgKG50eXBlID09IHdpdGhfc3RtdCkKICAgICAgICAgICB8fCAobnR5cGUgPT0gZnVuY2RlZikKKyAgICAgICAgICB8fCAobnR5cGUgPT0gYXN5bmNfc3RtdCkKICAgICAgICAgICB8fCAobnR5cGUgPT0gY2xhc3NkZWYpCiAgICAgICAgICAgfHwgKG50eXBlID09IGRlY29yYXRlZCkpCiAgICAgICAgIHJlcyA9IHZhbGlkYXRlX25vZGUodHJlZSk7CkBAIC0yNDA5LDI3ICsyNDQzLDYwIEBACiAKIC8qICBwb3dlcjoKICAqCi0gKiAgcG93ZXI6IGF0b20gdHJhaWxlciogKCcqKicgZmFjdG9yKSoKKyAqICBwb3dlcjogYXRvbV9leHByIHRyYWlsZXIqIFsnKionIGZhY3Rvcl0KICAqLwogc3RhdGljIGludAogdmFsaWRhdGVfcG93ZXIobm9kZSAqdHJlZSkKIHsKLSAgICBpbnQgcG9zID0gMTsKICAgICBpbnQgbmNoID0gTkNIKHRyZWUpOwogICAgIGludCByZXMgPSAodmFsaWRhdGVfbnR5cGUodHJlZSwgcG93ZXIpICYmIChuY2ggPj0gMSkKLSAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX2F0b20oQ0hJTEQodHJlZSwgMCkpKTsKKyAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX2F0b21fZXhwcihDSElMRCh0cmVlLCAwKSkpOwogCi0gICAgd2hpbGUgKHJlcyAmJiAocG9zIDwgbmNoKSAmJiAoVFlQRShDSElMRCh0cmVlLCBwb3MpKSA9PSB0cmFpbGVyKSkKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfdHJhaWxlcihDSElMRCh0cmVlLCBwb3MrKykpOwotICAgIGlmIChyZXMgJiYgKHBvcyA8IG5jaCkpIHsKLSAgICAgICAgaWYgKCFpc19ldmVuKG5jaCAtIHBvcykpIHsKKyAgICBpZiAobmNoID4gMSkgeworICAgICAgICBpZiAobmNoICE9IDMpIHsKICAgICAgICAgICAgIGVycl9zdHJpbmcoImlsbGVnYWwgbnVtYmVyIG9mIG5vZGVzIGZvciAncG93ZXInIik7CiAgICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoIDsgcmVzICYmIChwb3MgPCAobmNoIC0gMSkpOyBwb3MgKz0gMikKLSAgICAgICAgICAgIHJlcyA9ICh2YWxpZGF0ZV9kb3VibGVzdGFyKENISUxEKHRyZWUsIHBvcykpCi0gICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfZmFjdG9yKENISUxEKHRyZWUsIHBvcyArIDEpKSk7CisgICAgICAgIHJlcyA9ICh2YWxpZGF0ZV9kb3VibGVzdGFyKENISUxEKHRyZWUsIDEpKQorICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfZmFjdG9yKENISUxEKHRyZWUsIDIpKSk7CiAgICAgfQorCisgICAgcmV0dXJuIChyZXMpOworfQorCisKKy8qICBhdG9tX2V4cHI6CisgKgorICogIGF0b21fZXhwcjogW0FXQUlUXSBhdG9tIHRyYWlsZXIqCisgKi8KK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2F0b21fZXhwcihub2RlICp0cmVlKQoreworICAgIGludCBzdGFydCA9IDA7CisgICAgaW50IG5jaCA9IE5DSCh0cmVlKTsKKyAgICBpbnQgcmVzOworICAgIGludCBwb3M7CisKKyAgICByZXMgPSB2YWxpZGF0ZV9udHlwZSh0cmVlLCBhdG9tX2V4cHIpICYmIChuY2ggPj0gMSk7CisgICAgaWYgKCFyZXMpIHsKKyAgICAgICAgcmV0dXJuIChyZXMpOworICAgIH0KKworICAgIGlmIChUWVBFKENISUxEKHRyZWUsIDApKSA9PSBBV0FJVCkgeworICAgICAgICBzdGFydCA9IDE7CisgICAgICAgIGlmIChuY2ggPCAyKSB7CisgICAgICAgICAgICBlcnJfc3RyaW5nKCJpbGxlZ2FsIG51bWJlciBvZiBub2RlcyBmb3IgJ2F0b21fZXhwciciKTsKKyAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXMgPSB2YWxpZGF0ZV9hdG9tKENISUxEKHRyZWUsIHN0YXJ0KSk7CisgICAgaWYgKHJlcykgeworICAgICAgICBwb3MgPSBzdGFydCArIDE7CisgICAgICAgIHdoaWxlIChyZXMgJiYgKHBvcyA8IG5jaCkgJiYgKFRZUEUoQ0hJTEQodHJlZSwgcG9zKSkgPT0gdHJhaWxlcikpCisgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV90cmFpbGVyKENISUxEKHRyZWUsIHBvcysrKSk7CisgICAgfQorCiAgICAgcmV0dXJuIChyZXMpOwogfQogCkBAIC0yNDkzLDM5ICsyNTYwLDI4IEBACiAKIAogLyogIHRlc3RsaXN0X2NvbXA6Ci0gKiAgICB0ZXN0ICggY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApCisgKiAgICAodGVzdHxzdGFyX2V4cHIpICggY29tcF9mb3IgfCAoJywnICh0ZXN0fHN0YXJfZXhwcikpKiBbJywnXSApCiAgKi8KIHN0YXRpYyBpbnQKIHZhbGlkYXRlX3Rlc3RsaXN0X2NvbXAobm9kZSAqdHJlZSkKIHsKICAgICBpbnQgbmNoID0gTkNIKHRyZWUpOwotICAgIGludCBvayA9IG5jaDsKKyAgICBpbnQgb2s7CiAKLSAgICBpZiAobmNoID09IDApCisgICAgaWYgKG5jaCA9PSAwKSB7CiAgICAgICAgIGVycl9zdHJpbmcoIm1pc3NpbmcgY2hpbGQgbm9kZXMgb2YgdGVzdGxpc3RfY29tcCIpOwotICAgIGVsc2UgewotICAgICAgICBvayA9IHZhbGlkYXRlX3Rlc3Rfb3Jfc3Rhcl9leHByKENISUxEKHRyZWUsIDApKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiAgY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXQotICAgICAqLwotICAgIGlmIChuY2ggPT0gMiAmJiBUWVBFKENISUxEKHRyZWUsIDEpKSA9PSBjb21wX2ZvcikKLSAgICAgICAgb2sgPSB2YWxpZGF0ZV9jb21wX2ZvcihDSElMRCh0cmVlLCAxKSk7CisgICAgaWYgKG5jaCA9PSAyICYmIFRZUEUoQ0hJTEQodHJlZSwgMSkpID09IGNvbXBfZm9yKSB7CisgICAgICAgIG9rID0gKHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMCkpCisgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgMSkpKTsKKyAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qICAoJywnIHRlc3QpKiBbJywnXSAgKi8KLSAgICAgICAgaW50IGkgPSAxOwotICAgICAgICB3aGlsZSAob2sgJiYgbmNoIC0gaSA+PSAyKSB7Ci0gICAgICAgICAgICBvayA9ICh2YWxpZGF0ZV9jb21tYShDSElMRCh0cmVlLCBpKSkKLSAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3Rfb3Jfc3Rhcl9leHByKENISUxEKHRyZWUsIGkrMSkpKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgfQotICAgICAgICBpZiAob2sgJiYgaSA9PSBuY2gtMSkKLSAgICAgICAgICAgIG9rID0gdmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgaSkpOwotICAgICAgICBlbHNlIGlmIChpICE9IG5jaCkgewotICAgICAgICAgICAgb2sgPSAwOwotICAgICAgICAgICAgZXJyX3N0cmluZygiaWxsZWdhbCB0cmFpbGluZyBub2RlcyBmb3IgdGVzdGxpc3RfY29tcCIpOwotICAgICAgICB9CisgICAgICAgIG9rID0gdmFsaWRhdGVfcmVwZWF0aW5nX2xpc3QodHJlZSwKKyAgICAgICAgICAgICAgICB0ZXN0bGlzdF9jb21wLAorICAgICAgICAgICAgICAgIHZhbGlkYXRlX3Rlc3Rfb3Jfc3Rhcl9leHByLAorICAgICAgICAgICAgICAgICJ0ZXN0bGlzdF9jb21wIik7CiAgICAgfQogICAgIHJldHVybiBvazsKIH0KQEAgLTI2MzgsNiArMjY5NCw1NSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKKy8qIGFzeW5jX2Z1bmNkZWY6IEFTWU5DIGZ1bmNkZWYgKi8KKworc3RhdGljIGludAordmFsaWRhdGVfYXN5bmNfZnVuY2RlZihub2RlICp0cmVlKQoreworICAgIGludCBuY2ggPSBOQ0godHJlZSk7CisgICAgaW50IHJlcyA9IHZhbGlkYXRlX250eXBlKHRyZWUsIGFzeW5jX2Z1bmNkZWYpOworICAgIGlmIChyZXMpIHsKKyAgICAgICAgaWYgKG5jaCA9PSAyKSB7CisgICAgICAgICAgICByZXMgPSAodmFsaWRhdGVfbnR5cGUoQ0hJTEQodHJlZSwgMCksIEFTWU5DKQorICAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX2Z1bmNkZWYoQ0hJTEQodHJlZSwgMSkpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IDA7CisgICAgICAgICAgICBlcnJfc3RyaW5nKCJpbGxlZ2FsIG51bWJlciBvZiBjaGlsZHJlbiBmb3IgYXN5bmNfZnVuY2RlZiIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKworLyogYXN5bmNfc3RtdDogQVNZTkMgKGZ1bmNkZWYgfCB3aXRoX3N0bXQgfCBmb3Jfc3RtdCkgKi8KKworc3RhdGljIGludAordmFsaWRhdGVfYXN5bmNfc3RtdChub2RlICp0cmVlKQoreworICAgIGludCBuY2ggPSBOQ0godHJlZSk7CisgICAgaW50IHJlcyA9ICh2YWxpZGF0ZV9udHlwZSh0cmVlLCBhc3luY19zdG10KQorICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX250eXBlKENISUxEKHRyZWUsIDApLCBBU1lOQykpOworCisgICAgaWYgKG5jaCAhPSAyKSB7CisgICAgICAgIHJlcyA9IDA7CisgICAgICAgIGVycl9zdHJpbmcoImlsbGVnYWwgbnVtYmVyIG9mIGNoaWxkcmVuIGZvciBhc3luY19zdG10Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKFRZUEUoQ0hJTEQodHJlZSwgMSkpID09IGZ1bmNkZWYpIHsKKyAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX2Z1bmNkZWYoQ0hJTEQodHJlZSwgMSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQodHJlZSwgMSkpID09IHdpdGhfc3RtdCkgeworICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfd2l0aF9zdG10KENISUxEKHRyZWUsIDEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChUWVBFKENISUxEKHRyZWUsIDEpKSA9PSBmb3Jfc3RtdCkgeworICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfZm9yKENISUxEKHRyZWUsIDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXM7Cit9CisKKwogCiAvKiBkZWNvcmF0ZWQKICAqICAgZGVjb3JhdG9ycyAoY2xhc3NkZWYgfCBmdW5jZGVmKQpAQCAtMjczMiw5ICsyODM3LDYgQEAKICAgICB9CiAgICAgb2sgPSAxOwogICAgIGlmIChuY2gtaSA+IDApIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogYXJndW1lbnQgfCAnKicgdGVzdCBbJywnICcqKicgdGVzdF0gfCAnKionIHRlc3QKLSAgICAgICAgICovCiAgICAgICAgIGludCBzeW0gPSBUWVBFKENISUxEKHRyZWUsIGkpKTsKIAogICAgICAgICBpZiAoc3ltID09IGFyZ3VtZW50KSB7CkBAIC0yNzQ1LDMwICsyODQ3LDcgQEAKICAgICAgICAgICAgICAgICBvayA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3ltID09IFNUQVIpIHsKLSAgICAgICAgICAgIG9rID0gdmFsaWRhdGVfc3RhcihDSElMRCh0cmVlLCBpKSk7Ci0gICAgICAgICAgICBpZiAob2sgJiYgKG5jaC1pID09IDIpKQotICAgICAgICAgICAgICAgIG9rID0gdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCBpKzEpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9rICYmIChuY2gtaSA9PSA1KSkKLSAgICAgICAgICAgICAgICBvayA9ICh2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrMSkpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgaSsyKSkKLSAgICAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9kb3VibGVzdGFyKENISUxEKHRyZWUsIGkrMykpCi0gICAgICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCBpKzQpKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBlcnJfc3RyaW5nKCJpbGxlZ2FsIHVzZSBvZiAnKicgaW4gYXJnbGlzdCIpOwotICAgICAgICAgICAgICAgIG9rID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzeW0gPT0gRE9VQkxFU1RBUikgewotICAgICAgICAgICAgaWYgKG5jaC1pID09IDIpCi0gICAgICAgICAgICAgICAgb2sgPSAodmFsaWRhdGVfZG91Ymxlc3RhcihDSElMRCh0cmVlLCBpKSkKLSAgICAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrMSkpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGVycl9zdHJpbmcoImlsbGVnYWwgdXNlIG9mICcqKicgaW4gYXJnbGlzdCIpOwotICAgICAgICAgICAgICAgIG9rID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGVycl9zdHJpbmcoImlsbGVnYWwgYXJnbGlzdCBzcGVjaWZpY2F0aW9uIik7CiAgICAgICAgICAgICBvayA9IDA7CiAgICAgICAgIH0KQEAgLTI3NzgsOSArMjg1NywxMCBAQAogCiAKIAotLyogIGFyZ3VtZW50OgotICoKLSAqICBbdGVzdCAnPSddIHRlc3QgW2NvbXBfZm9yXQorLyogIGFyZ3VtZW50OiAoIHRlc3QgW2NvbXBfZm9yXSB8CisgKiAgICAgICAgICAgICAgdGVzdCAnPScgdGVzdCB8CisgKiAgICAgICAgICAgICAgJyoqJyB0ZXN0IHwKKyAqICAgICAgICAgICAgICAnKicgdGVzdCApCiAgKi8KIHN0YXRpYyBpbnQKIHZhbGlkYXRlX2FyZ3VtZW50KG5vZGUgKnRyZWUpCkBAIC0yNzg4LDE0ICsyODY4LDI3IEBACiAgICAgaW50IG5jaCA9IE5DSCh0cmVlKTsKICAgICBpbnQgcmVzID0gKHZhbGlkYXRlX250eXBlKHRyZWUsIGFyZ3VtZW50KQogICAgICAgICAgICAgICAgJiYgKChuY2ggPT0gMSkgfHwgKG5jaCA9PSAyKSB8fCAobmNoID09IDMpKSk7Ci0gICAgaWYgKHJlcykgCi0gICAgICAgIHJlcyA9IHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMCkpOwotICAgIGlmIChyZXMgJiYgKG5jaCA9PSAyKSkKLSAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgMSkpOwotICAgIGVsc2UgaWYgKHJlcyAmJiAobmNoID09IDMpKQotICAgICAgICByZXMgPSAodmFsaWRhdGVfZXF1YWwoQ0hJTEQodHJlZSwgMSkpCi0gICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDIpKSk7CiAKKyAgICBpZiAocmVzKSB7CisgICAgICAgIGlmIChUWVBFKENISUxEKHRyZWUsIDApKSA9PSBET1VCTEVTVEFSKSB7CisgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChUWVBFKENISUxEKHRyZWUsIDApKSA9PSBTVEFSKSB7CisgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDEpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuY2ggPT0gMSkgeworICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAwKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobmNoID09IDIpIHsKKyAgICAgICAgICAgIHJlcyA9ICh2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDApKQorICAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9jb21wX2ZvcihDSElMRCh0cmVlLCAxKSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJlcyAmJiAobmNoID09IDMpKSB7CisgICAgICAgICAgICByZXMgPSAodmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfZXF1YWwoQ0hJTEQodHJlZSwgMSkpCisgICAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgMikpKTsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gKHJlcyk7CiB9CiAKQEAgLTI5NDgsMTEgKzMwNDEsNDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2V4cHJfb3Jfc3Rhcl9leHByLCAiZXhwcmxpc3QiKSk7CiB9CiAKKy8qIEluY3JlbWVudGluZyB2YWxpZGF0ZSBmdW5jdGlvbnMgcmV0dXJucyBub256ZXJvIGlmZiBzdWNjZXNzIChsaWtlIG90aGVyCisgKiB2YWxpZGF0ZSBmdW5jdGlvbnMsIGFuZCBhZHZhbmNlICppIGJ5IHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgcGF0dGVybi4gKi8KKworLyogdGVzdCAnOicgdGVzdCAqLworc3RhdGljIGludAordmFsaWRhdGVfdGVzdF9jb2xvbl90ZXN0X2luYyhub2RlICp0cmVlLCBpbnQgKmkpCit7CisgICAgcmV0dXJuICh2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsICgqaSkrKykpCisgICAgICAgICAgICAmJiB2YWxpZGF0ZV9jb2xvbihDSElMRCh0cmVlLCAoKmkpKyspKQorICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCAoKmkpKyspKSk7Cit9CisKKy8qIHRlc3QgJzonIHRlc3QgfCAnKionIGV4cHIgKi8KK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2RpY3RfZWxlbWVudF9pbmMobm9kZSAqdHJlZSwgaW50ICppKQoreworICAgIGludCBuY2ggPSBOQ0godHJlZSk7CisgICAgaW50IHJlcyA9IDA7CisgICAgaWYgKG5jaCAtICppID49IDIpIHsKKyAgICAgICAgaWYgKFRZUEUoQ0hJTEQodHJlZSwgKmkrMSkpID09IENPTE9OKSB7CisgICAgICAgICAgICAvKiB0ZXN0ICc6JyB0ZXN0ICovCisgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV90ZXN0X2NvbG9uX3Rlc3RfaW5jKHRyZWUsIGkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogJyoqJyBleHByICovCisgICAgICAgICAgICByZXMgPSAodmFsaWRhdGVfZG91Ymxlc3RhcihDSElMRCh0cmVlLCAoKmkpKyspKQorICAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9leHByKENISUxEKHRyZWUsICgqaSkrKykpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCiAvKgogICogIGRpY3RvcnNldG1ha2VyOgogICoKLSAqICAodGVzdCAnOicgdGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkpIHwKLSAqICAodGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSkpCisgKiAgICggKCh0ZXN0ICc6JyB0ZXN0IHwgJyoqJyBleHByKQorICogICAgICAoY29tcF9mb3IgfCAoJywnICh0ZXN0ICc6JyB0ZXN0IHwgJyoqJyBleHByKSkqIFsnLCddKSkgfAorICogICAgICgodGVzdCB8ICcqJyB0ZXN0KQorICogICAgICAoY29tcF9mb3IgfCAoJywnICh0ZXN0IHwgJyonIHRlc3QpKSogWycsJ10pKSApCiAgKi8KIHN0YXRpYyBpbnQKIHZhbGlkYXRlX2RpY3RvcnNldG1ha2VyKG5vZGUgKnRyZWUpCkBAIC0yOTY2LDY1ICszMDkyLDQ0IEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKG5jaCAtIGkgPCAxKSB7CisgICAgICAgIC8qIFVuY29uZGl0aW9uYWxseSByYWlzZS4gKi8KICAgICAgICAgKHZvaWQpIHZhbGlkYXRlX251bW5vZGVzKHRyZWUsIDEsICJkaWN0b3JzZXRtYWtlciIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXMgPSB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrKykpOwotICAgIGlmICghcmVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChuY2ggLSBpID49IDIgJiYgVFlQRShDSElMRCh0cmVlLCBpKSkgPT0gQ09MT04pIHsKKyAgICBpZiAobmNoIC0gaSA+PSAyCisgICAgICAgICYmICgoVFlQRShDSElMRCh0cmVlLCBpKzEpKSA9PSBDT0xPTikgfHwKKyAgICAgICAgICAgIChUWVBFKENISUxEKHRyZWUsIGkpKSA9PSBET1VCTEVTVEFSKSkpIHsKICAgICAgICAgLyogRGljdGlvbmFyeSBkaXNwbGF5IG9yIGRpY3Rpb25hcnkgY29tcHJlaGVuc2lvbi4gKi8KLSAgICAgICAgcmVzID0gKHZhbGlkYXRlX2NvbG9uKENISUxEKHRyZWUsIGkrKykpCi0gICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrKykpKTsKLSAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAobmNoIC0gaSA+PSAxICYmIFRZUEUoQ0hJTEQodHJlZSwgaSkpID09IGNvbXBfZm9yKSB7CisgICAgICAgIGlmIChuY2ggLSBpID49IDQgJiYgVFlQRShDSElMRCh0cmVlLCBpKzMpKSA9PSBjb21wX2ZvcikgewogICAgICAgICAgICAgLyogRGljdGlvbmFyeSBjb21wcmVoZW5zaW9uLiAqLwotICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgaSsrKSk7CisgICAgICAgICAgICByZXMgPSAodmFsaWRhdGVfdGVzdF9jb2xvbl90ZXN0X2luYyh0cmVlLCAmaSkKKyAgICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgaSsrKSkpOwogICAgICAgICAgICAgaWYgKCFyZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBEaWN0aW9uYXJ5IGRpc3BsYXkuICovCi0gICAgICAgICAgICB3aGlsZSAobmNoIC0gaSA+PSA0KSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gKHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIGkrKykpCi0gICAgICAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3QoQ0hJTEQodHJlZSwgaSsrKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29sb24oQ0hJTEQodHJlZSwgaSsrKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCBpKyspKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5jaCAtIGkgPT0gMSkgewotICAgICAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIGkrKykpOwotICAgICAgICAgICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZV9yZXBlYXRpbmdfbGlzdF92YXJpYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgZGljdG9yc2V0bWFrZXIsCisgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2RpY3RfZWxlbWVudF9pbmMsCisgICAgICAgICAgICAgICAgICAgICZpLAorICAgICAgICAgICAgICAgICAgICAiZGljdG9yc2V0bWFrZXIiKTsKICAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAgICAgICAvKiBTZXQgZGlzcGxheSBvciBzZXQgY29tcHJlaGVuc2lvbi4gKi8KLSAgICAgICAgaWYgKG5jaCAtIGkgPj0gMSAmJiBUWVBFKENISUxEKHRyZWUsIGkpKSA9PSBjb21wX2ZvcikgeworICAgICAgICBpZiAobmNoIC0gaSA+PSAyICYmIFRZUEUoQ0hJTEQodHJlZSwgaSArIDEpKSA9PSBjb21wX2ZvcikgewogICAgICAgICAgICAgLyogU2V0IGNvbXByZWhlbnNpb24uICovCi0gICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV9jb21wX2ZvcihDSElMRCh0cmVlLCBpKyspKTsKKyAgICAgICAgICAgIHJlcyA9ICh2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrKykpCisgICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfY29tcF9mb3IoQ0hJTEQodHJlZSwgaSsrKSkpOwogICAgICAgICAgICAgaWYgKCFyZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBTZXQgZGlzcGxheS4gKi8KLSAgICAgICAgICAgIHdoaWxlIChuY2ggLSBpID49IDIpIHsKLSAgICAgICAgICAgICAgICByZXMgPSAodmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgaSsrKSkKLSAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdChDSElMRCh0cmVlLCBpKyspKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5jaCAtIGkgPT0gMSkgewotICAgICAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX2NvbW1hKENISUxEKHRyZWUsIGkrKykpOwotICAgICAgICAgICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlX3JlcGVhdGluZ19saXN0KHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0b3JzZXRtYWtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX3Rlc3Rfb3Jfc3Rhcl9leHByLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpY3RvcnNldG1ha2VyIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMwNjgsNiArMzE3MywxMiBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqICBEZWZpbml0aW9uIG5vZGVzLgogICAgICAgICAgICAgICovCisgICAgICAgICAgY2FzZSBhc3luY19mdW5jZGVmOgorICAgICAgICAgICAgcmVzID0gdmFsaWRhdGVfYXN5bmNfZnVuY2RlZih0cmVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgYXN5bmNfc3RtdDoKKyAgICAgICAgICAgIHJlcyA9IHZhbGlkYXRlX2FzeW5jX3N0bXQodHJlZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIGZ1bmNkZWY6CiAgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV9mdW5jZGVmKHRyZWUpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKaW5kZXggN2M5MzdlMC4uYjg1NGNhZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwpAQCAtNiw3ICs2LDcgQEAKICAgIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHVuaW1wbGVtZW50ZWQgb3IgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkuICBUaGUgc291cmNlCiAgICBhc3N1bWVzIHRoYXQgZm9yIFdpbmRvd3MgTlQsIHRoZSBtYWNybyAnTVNfV0lORE9XUycgaXMgZGVmaW5lZCBpbmRlcGVuZGVudAogICAgb2YgdGhlIGNvbXBpbGVyIHVzZWQuICBEaWZmZXJlbnQgY29tcGlsZXJzIGRlZmluZSB0aGVpciBvd24gZmVhdHVyZQotICAgdGVzdCBtYWNybywgZS5nLiAnX19CT1JMQU5EQ19fJyBvciAnX01TQ19WRVInLiAqLworICAgdGVzdCBtYWNybywgZS5nLiAnX01TQ19WRVInLiAqLwogCiAKIApAQCAtMjUsMTAgKzI1LDE1IEBACiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2lmbmRlZiBNU19XSU5ET1dTCiAjaW5jbHVkZSAicG9zaXhtb2R1bGUuaCIKKyNlbHNlCisjaW5jbHVkZSAid2lucmVwYXJzZS5oIgogI2VuZGlmCiAKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogbmVlZGVkIGZvciBjdGVybWlkKCkgKi8KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtMTQxLDEzICsxNDYsNiBAQAogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNlbHNlCi0jaWZkZWYgX19CT1JMQU5EQ19fICAgICAgICAgICAgIC8qIEJvcmxhbmQgY29tcGlsZXIgKi8KLSNkZWZpbmUgSEFWRV9FWEVDViAgICAgIDEKLSNkZWZpbmUgSEFWRV9PUEVORElSICAgIDEKLSNkZWZpbmUgSEFWRV9QSVBFICAgICAgIDEKLSNkZWZpbmUgSEFWRV9TWVNURU0gICAgIDEKLSNkZWZpbmUgSEFWRV9XQUlUICAgICAgIDEKLSNlbHNlCiAjaWZkZWYgX01TQ19WRVIgICAgICAgICAvKiBNaWNyb3NvZnQgY29tcGlsZXIgKi8KICNkZWZpbmUgSEFWRV9HRVRQUElEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRMT0dJTiAgIDEKQEAgLTE3NywxNCArMTc1LDE0IEBACiAjZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCiAjZGVmaW5lIEhBVkVfVFRZTkFNRSAgICAxCiAjZW5kaWYgIC8qIF9NU0NfVkVSICovCi0jZW5kaWYgIC8qIF9fQk9STEFORENfXyAqLwogI2VuZGlmICAvKiAhIF9fV0FUQ09NQ19fIHx8IF9fUU5YX18gKi8KIAogCiAvKltjbGluaWMgaW5wdXRdCisjIG9uZSBvZiB0aGUgZmV3IHRpbWVzIHdlIGxpZSBhYm91dCB0aGlzIG5hbWUhCiBtb2R1bGUgb3MKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PThjZmYwOTZkMTEzMzI4OGZdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTk0YTBmMGY5NzhhY2FlMTddKi8KIAogI2lmbmRlZiBfTVNDX1ZFUgogCkBAIC0yMTEsMTEgKzIwOSw3IEBACiBleHRlcm4gaW50IGNoZGlyKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IHJtZGlyKGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKLSNpZmRlZiBfX0JPUkxBTkRDX18KLWV4dGVybiBpbnQgY2htb2QoY29uc3QgY2hhciAqLCBpbnQpOwotI2Vsc2UKIGV4dGVybiBpbnQgY2htb2QoY29uc3QgY2hhciAqLCBtb2RlX3QpOwotI2VuZGlmCiAvKiNpZmRlZiBIQVZFX0ZDSE1PRAogZXh0ZXJuIGludCBmY2htb2QoaW50LCBtb2RlX3QpOwogI2VuZGlmKi8KQEAgLTMwMSw2ICsyOTUsOSBAQAogI2lmbmRlZiBJT19SRVBBUlNFX1RBR19TWU1MSU5LCiAjZGVmaW5lIElPX1JFUEFSU0VfVEFHX1NZTUxJTksgKDB4QTAwMDAwMENMKQogI2VuZGlmCisjaWZuZGVmIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UCisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICgweEEwMDAwMDAzTCkKKyNlbmRpZgogI2luY2x1ZGUgIm9zZGVmcy5oIgogI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTM1Niw4ICszNTMsOCBAQAogI2lmZGVmIE1TX1dJTkRPV1MKICMgICAgICAgZGVmaW5lIFNUQVQgd2luMzJfc3RhdAogIyAgICAgICBkZWZpbmUgTFNUQVQgd2luMzJfbHN0YXQKLSMgICAgICAgZGVmaW5lIEZTVEFUIHdpbjMyX2ZzdGF0Ci0jICAgICAgIGRlZmluZSBTVFJVQ1RfU1RBVCBzdHJ1Y3Qgd2luMzJfc3RhdAorIyAgICAgICBkZWZpbmUgRlNUQVQgX1B5X2ZzdGF0X25vcmFpc2UKKyMgICAgICAgZGVmaW5lIFNUUlVDVF9TVEFUIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3QKICNlbHNlCiAjICAgICAgIGRlZmluZSBTVEFUIHN0YXQKICMgICAgICAgZGVmaW5lIExTVEFUIGxzdGF0CkBAIC0zNzgsNiArMzc1LDIwIEBACiAKICNkZWZpbmUgRFdPUkRfTUFYIDQyOTQ5NjcyOTVVCiAKKyNpZmRlZiBNU19XSU5ET1dTCisjZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9udAorI2RlZmluZSBNT0ROQU1FICJudCIKKyNlbHNlCisjZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9wb3NpeAorI2RlZmluZSBNT0ROQU1FICJwb3NpeCIKKyNlbmRpZgorCisjaWZkZWYgTVNfV0lORE9XUworLyogZGVmaW5lZCBpbiBmaWxldXRpbHMuYyAqLworUHlBUElfRlVOQyh2b2lkKSBfUHlfdGltZV90X3RvX0ZJTEVfVElNRSh0aW1lX3QsIGludCwgRklMRVRJTUUgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9hdHRyaWJ1dGVfZGF0YV90b19zdGF0KEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HLCBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0ICopOworI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCiBzdGF0aWMgaW50CkBAIC03MDEsNyArNzEyLDYgQEAKIH0KIAogCi0KIC8qCiAgKiBBIFB5QXJnX1BhcnNlVHVwbGUgImNvbnZlcnRlciIgZnVuY3Rpb24KICAqIHRoYXQgaGFuZGxlcyBmaWxlc3lzdGVtIHBhdGhzIGluIHRoZSBtYW5uZXIKQEAgLTc5Nyw4ICs4MDcsOCBAQAogICAgIFB5T2JqZWN0ICpjbGVhbnVwOwogfSBwYXRoX3Q7CiAKLSNkZWZpbmUgUEFUSF9UX0lOSVRJQUxJWkUoZnVuY3Rpb25fbmFtZSwgbnVsbGFibGUsIGFsbG93X2ZkKSBcCi0gICAge2Z1bmN0aW9uX25hbWUsIE5VTEwsIG51bGxhYmxlLCBhbGxvd19mZCwgTlVMTCwgTlVMTCwgMCwgMCwgTlVMTCwgTlVMTH0KKyNkZWZpbmUgUEFUSF9UX0lOSVRJQUxJWkUoZnVuY3Rpb25fbmFtZSwgYXJndW1lbnRfbmFtZSwgbnVsbGFibGUsIGFsbG93X2ZkKSBcCisgICAge2Z1bmN0aW9uX25hbWUsIGFyZ3VtZW50X25hbWUsIG51bGxhYmxlLCBhbGxvd19mZCwgTlVMTCwgTlVMTCwgLTEsIDAsIE5VTEwsIE5VTEx9CiAKIHN0YXRpYyB2b2lkCiBwYXRoX2NsZWFudXAocGF0aF90ICpwYXRoKSB7CkBAIC04NTksNyArODY5LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIGlmICh3Y3NsZW4od2lkZSkgIT0gbGVuZ3RoKSB7Ci0gICAgICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1R5cGVFcnJvciwgImVtYmVkZGVkIG51bGwgY2hhcmFjdGVyIik7CisgICAgICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1ZhbHVlRXJyb3IsICJlbWJlZGRlZCBudWxsIGNoYXJhY3RlciIpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTkyNSw4ICs5MzUsOCBAQAogI2VuZGlmCiAKICAgICBuYXJyb3cgPSBQeUJ5dGVzX0FTX1NUUklORyhieXRlcyk7Ci0gICAgaWYgKGxlbmd0aCAhPSBzdHJsZW4obmFycm93KSkgewotICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1ZhbHVlRXJyb3IsICJlbWJlZGRlZCBOVUwgY2hhcmFjdGVyIGluICVzIik7CisgICAgaWYgKChzaXplX3QpbGVuZ3RoICE9IHN0cmxlbihuYXJyb3cpKSB7CisgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgImVtYmVkZGVkIG51bGwgY2hhcmFjdGVyIGluICVzIik7CiAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTEwMjcsOTcgKzEwMzcsNDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotLyogQSBoZWxwZXIgdXNlZCBieSBhIG51bWJlciBvZiBQT1NJWC1vbmx5IGZ1bmN0aW9ucyAqLwotI2lmbmRlZiBNU19XSU5ET1dTCi1zdGF0aWMgaW50Ci1fcGFyc2Vfb2ZmX3QoUHlPYmplY3QqIGFyZywgdm9pZCogYWRkcikKLXsKLSNpZiAhZGVmaW5lZChIQVZFX0xBUkdFRklMRV9TVVBQT1JUKQotICAgICooKG9mZl90KilhZGRyKSA9IFB5TG9uZ19Bc0xvbmcoYXJnKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgdHlwZWRlZiBQWV9MT05HX0xPTkcgUHlfb2ZmX3Q7CiAjZWxzZQotICAgICooKG9mZl90KilhZGRyKSA9IFB5TG9uZ19Bc0xvbmdMb25nKGFyZyk7CisgICAgdHlwZWRlZiBvZmZfdCBQeV9vZmZfdDsKKyNlbmRpZgorCitzdGF0aWMgaW50CitQeV9vZmZfdF9jb252ZXJ0ZXIoUHlPYmplY3QgKmFyZywgdm9pZCAqYWRkcikKK3sKKyNpZmRlZiBIQVZFX0xBUkdFRklMRV9TVVBQT1JUCisgICAgKigoUHlfb2ZmX3QgKilhZGRyKSA9IFB5TG9uZ19Bc0xvbmdMb25nKGFyZyk7CisjZWxzZQorICAgICooKFB5X29mZl90ICopYWRkcikgPSBQeUxvbmdfQXNMb25nKGFyZyk7CiAjZW5kaWYKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIDE7CiB9Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMAotLyogTWljcm9zb2Z0IENSVCBpbiBWUzIwMDUgYW5kIGhpZ2hlciB3aWxsIHZlcmlmeSB0aGF0IGEgZmlsZWhhbmRsZSBpcwotICogdmFsaWQgYW5kIHJhaXNlIGFuIGFzc2VydGlvbiBpZiBpdCBpc24ndC4KLSAqIE5vcm1hbGx5LCBhbiBpbnZhbGlkIGZkIGlzIGxpa2VseSB0byBiZSBhIEMgcHJvZ3JhbSBlcnJvciBhbmQgdGhlcmVmb3JlCi0gKiBhbiBhc3NlcnRpb24gY2FuIGJlIHVzZWZ1bCwgYnV0IGl0IGRvZXMgY29udHJhZGljdCB0aGUgUE9TSVggc3RhbmRhcmQKLSAqIHdoaWNoIGZvciB3cml0ZSgyKSBzdGF0ZXM6Ci0gKiAgICAiT3RoZXJ3aXNlLCAtMSBzaGFsbCBiZSByZXR1cm5lZCBhbmQgZXJybm8gc2V0IHRvIGluZGljYXRlIHRoZSBlcnJvci4iCi0gKiAgICAiW0VCQURGXSBUaGUgZmlsZGVzIGFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvciBvcGVuIGZvcgotICogICAgIHdyaXRpbmcuIgotICogRnVydGhlcm1vcmUsIHB5dGhvbiBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW55IG9sZCBpbnRlZ2VyCi0gKiBhcyBhIGZkIGFuZCBzaG91bGQgbWVyZWx5IHJhaXNlIGEgcHl0aG9uIGV4Y2VwdGlvbiBvbiBlcnJvci4KLSAqIFRoZSBNaWNyb3NvZnQgQ1JUIGRvZXNuJ3QgcHJvdmlkZSBhbiBvZmZpY2lhbCB3YXkgdG8gY2hlY2sgZm9yIHRoZQotICogdmFsaWRpdHkgb2YgYSBmaWxlIGRlc2NyaXB0b3IsIGJ1dCB3ZSBjYW4gZW11bGF0ZSBpdHMgaW50ZXJuYWwgYmVoYXZpb3VyCi0gKiBieSB1c2luZyB0aGUgZXhwb3J0ZWQgX19waW5mbyBkYXRhIG1lbWJlciBhbmQga25vd2xlZGdlIG9mIHRoZQotICogaW50ZXJuYWwgc3RydWN0dXJlcyBpbnZvbHZlZC4KLSAqIFRoZSBzdHJ1Y3R1cmVzIGJlbG93IG11c3QgYmUgdXBkYXRlZCBmb3IgZWFjaCB2ZXJzaW9uIG9mIHZpc3VhbCBzdHVkaW8KLSAqIGFjY29yZGluZyB0byB0aGUgZmlsZSBpbnRlcm5hbC5oIGluIHRoZSBDUlQgc291cmNlLCB1bnRpbCBNUyBjb21lcwotICogdXAgd2l0aCBhIGxlc3MgaGFja3kgd2F5IHRvIGRvIHRoaXMuCi0gKiAoYWxsIG9mIHRoaXMgaXMgdG8gYXZvaWQgZ2xvYmFsbHkgbW9kaWZ5aW5nIHRoZSBDUlQgYmVoYXZpb3VyIHVzaW5nCi0gKiBfc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIoKSBhbmQgX0NydFNldFJlcG9ydE1vZGUoKSkKLSAqLwotLyogVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgZGV0ZXJtaW5lZCBhdCBydW50aW1lLgotICogT25seSB0aGUgZmlyc3QgaXRlbXMgbXVzdCBiZSBwcmVzZW50LgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50cHRyX3Qgb3NmaG5kOwotICAgIGNoYXIgb3NmaWxlOwotfSBteV9pb2luZm87Ci0KLWV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciAqIF9fcGlvaW5mb1tdOwotI2RlZmluZSBJT0lORk9fTDJFIDUKLSNkZWZpbmUgSU9JTkZPX0FSUkFZX0VMVFMgICAoMSA8PCBJT0lORk9fTDJFKQotI2RlZmluZSBJT0lORk9fQVJSQVlTIDY0Ci0jZGVmaW5lIF9OSEFORExFXyAgICAgICAgICAgKElPSU5GT19BUlJBWVMgKiBJT0lORk9fQVJSQVlfRUxUUykKLSNkZWZpbmUgRk9QRU4gMHgwMQotI2RlZmluZSBfTk9fQ09OU09MRV9GSUxFTk8gKGludHB0cl90KS0yCi0KLS8qIFRoaXMgZnVuY3Rpb24gZW11bGF0ZXMgd2hhdCB0aGUgd2luZG93cyBDUlQgZG9lcyB0byB2YWxpZGF0ZSBmaWxlIGhhbmRsZXMgKi8KLWludAotX1B5VmVyaWZ5X2ZkKGludCBmZCkKK3N0YXRpYyBQeU9iamVjdCAqCitQeUxvbmdfRnJvbVB5X29mZl90KFB5X29mZl90IG9mZnNldCkKIHsKLSAgICBjb25zdCBpbnQgaTEgPSBmZCA+PiBJT0lORk9fTDJFOwotICAgIGNvbnN0IGludCBpMiA9IGZkICYgKCgxIDw8IElPSU5GT19MMkUpIC0gMSk7Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemVvZl9pb2luZm8gPSAwOwotCi0gICAgLyogRGV0ZXJtaW5lIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgaW9pbmZvIHN0cnVjdHVyZSwKLSAgICAgKiBhcyB1c2VkIGJ5IHRoZSBDUlQgbG9hZGVkIGluIG1lbW9yeQotICAgICAqLwotICAgIGlmIChzaXplb2ZfaW9pbmZvID09IDAgJiYgX19waW9pbmZvWzBdICE9IE5VTEwpIHsKLSAgICAgICAgc2l6ZW9mX2lvaW5mbyA9IF9tc2l6ZShfX3Bpb2luZm9bMF0pIC8gSU9JTkZPX0FSUkFZX0VMVFM7Ci0gICAgfQotICAgIGlmIChzaXplb2ZfaW9pbmZvID09IDApIHsKLSAgICAgICAgLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbi4uLiAqLwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgLyogU2VlIHRoYXQgaXQgaXNuJ3QgYSBzcGVjaWFsIENMRUFSIGZpbGVubyAqLwotICAgIGlmIChmZCAhPSBfTk9fQ09OU09MRV9GSUxFTk8pIHsKLSAgICAgICAgLyogTWljcm9zb2Z0IENSVCB3b3VsZCBjaGVjayB0aGF0IDA8PWZkPF9uaGFuZGxlIGJ1dCB3ZSBjYW4ndCBkbyB0aGF0LiAgSW5zdGVhZAotICAgICAgICAgKiB3ZSBjaGVjayBwb2ludGVyIHZhbGlkaXR5IGFuZCBvdGhlciBpbmZvCi0gICAgICAgICAqLwotICAgICAgICBpZiAoMCA8PSBpMSAmJiBpMSA8IElPSU5GT19BUlJBWVMgJiYgX19waW9pbmZvW2kxXSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvKiBmaW5hbGx5LCBjaGVjayB0aGF0IHRoZSBmaWxlIGlzIG9wZW4gKi8KLSAgICAgICAgICAgIG15X2lvaW5mbyogaW5mbyA9IChteV9pb2luZm8qKShfX3Bpb2luZm9baTFdICsgaTIgKiBzaXplb2ZfaW9pbmZvKTsKLSAgICAgICAgICAgIGlmIChpbmZvLT5vc2ZpbGUgJiBGT1BFTikgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICBmYWlsOgotICAgIGVycm5vID0gRUJBREY7Ci0gICAgcmV0dXJuIDA7CisjaWZkZWYgSEFWRV9MQVJHRUZJTEVfU1VQUE9SVAorICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKG9mZnNldCk7CisjZWxzZQorICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcob2Zmc2V0KTsKKyNlbmRpZgogfQogCisKKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAgJiYgX01TQ19WRVIgPCAxOTAwCisvKiBMZWdhY3kgaW1wbGVtZW50YXRpb24gb2YgX1B5VmVyaWZ5X2ZkX2R1cDIgd2hpbGUgdHJhbnNpdGlvbmluZyB0bworICogTVNWQyAxNC4wLiBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuIChpc3N1ZTIzNTI0KQorICovCisjZGVmaW5lIElPSU5GT19MMkUgNQorI2RlZmluZSBJT0lORk9fQVJSQVlTIDY0CisjZGVmaW5lIElPSU5GT19BUlJBWV9FTFRTICAgKDEgPDwgSU9JTkZPX0wyRSkKKyNkZWZpbmUgX05IQU5ETEVfICAgICAgICAgICAoSU9JTkZPX0FSUkFZUyAqIElPSU5GT19BUlJBWV9FTFRTKQorI2RlZmluZSBfTk9fQ09OU09MRV9GSUxFTk8gKGludHB0cl90KS0yCisKIC8qIHRoZSBzcGVjaWFsIGNhc2Ugb2YgY2hlY2tpbmcgZHVwMi4gIFRoZSB0YXJnZXQgZmQgbXVzdCBiZSBpbiBhIHNlbnNpYmxlIHJhbmdlICovCiBzdGF0aWMgaW50CiBfUHlWZXJpZnlfZmRfZHVwMihpbnQgZmQxLCBpbnQgZmQyKQpAQCAtMTEzMiw0NiArMTA5MSwxMCBAQAogICAgICAgICByZXR1cm4gMDsKIH0KICNlbHNlCi0vKiBkdW1teSB2ZXJzaW9uLiBfUHlWZXJpZnlfZmQoKSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZmlsZW9iamVjdC5oICovCi0jZGVmaW5lIF9QeVZlcmlmeV9mZF9kdXAyKEEsIEIpICgxKQorI2RlZmluZSBfUHlWZXJpZnlfZmRfZHVwMihmZDEsIGZkMikgKF9QeVZlcmlmeV9mZChmZDEpICYmIChmZDIpID49IDApCiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLS8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHdhcyBjb3BpZWQgZnJvbQotICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzkxNTE0LmFzcHggYXMgdGhlIHJlcXVpcmVkCi0gICBpbmNsdWRlIGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50IGluIHRoZSBXaW5kb3dzIFNESyAoYXQgbGVhc3QgYXMgaW5jbHVkZWQKLSAgIHdpdGggVmlzdWFsIFN0dWRpbyBFeHByZXNzKS4gKi8KLXR5cGVkZWYgc3RydWN0IF9SRVBBUlNFX0RBVEFfQlVGRkVSIHsKLSAgICBVTE9ORyBSZXBhcnNlVGFnOwotICAgIFVTSE9SVCBSZXBhcnNlRGF0YUxlbmd0aDsKLSAgICBVU0hPUlQgUmVzZXJ2ZWQ7Ci0gICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgVVNIT1JUIFN1YnN0aXR1dGVOYW1lT2Zmc2V0OwotICAgICAgICAgICAgVVNIT1JUIFN1YnN0aXR1dGVOYW1lTGVuZ3RoOwotICAgICAgICAgICAgVVNIT1JUIFByaW50TmFtZU9mZnNldDsKLSAgICAgICAgICAgIFVTSE9SVCBQcmludE5hbWVMZW5ndGg7Ci0gICAgICAgICAgICBVTE9ORyBGbGFnczsKLSAgICAgICAgICAgIFdDSEFSIFBhdGhCdWZmZXJbMV07Ci0gICAgICAgIH0gU3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlcjsKLQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgVVNIT1JUIFN1YnN0aXR1dGVOYW1lT2Zmc2V0OwotICAgICAgICAgICAgVVNIT1JUICBTdWJzdGl0dXRlTmFtZUxlbmd0aDsKLSAgICAgICAgICAgIFVTSE9SVCAgUHJpbnROYW1lT2Zmc2V0OwotICAgICAgICAgICAgVVNIT1JUICBQcmludE5hbWVMZW5ndGg7Ci0gICAgICAgICAgICBXQ0hBUiAgUGF0aEJ1ZmZlclsxXTsKLSAgICAgICAgfSBNb3VudFBvaW50UmVwYXJzZUJ1ZmZlcjsKLQotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgVUNIQVIgIERhdGFCdWZmZXJbMV07Ci0gICAgICAgIH0gR2VuZXJpY1JlcGFyc2VCdWZmZXI7Ci0gICAgfTsKLX0gUkVQQVJTRV9EQVRBX0JVRkZFUiwgKlBSRVBBUlNFX0RBVEFfQlVGRkVSOwotCi0jZGVmaW5lIFJFUEFSU0VfREFUQV9CVUZGRVJfSEVBREVSX1NJWkUgIEZJRUxEX09GRlNFVChSRVBBUlNFX0RBVEFfQlVGRkVSLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNSZXBhcnNlQnVmZmVyKQotI2RlZmluZSBNQVhJTVVNX1JFUEFSU0VfREFUQV9CVUZGRVJfU0laRSAgKCAxNiAqIDEwMjQgKQogCiBzdGF0aWMgaW50CiB3aW4zMl9nZXRfcmVwYXJzZV90YWcoSEFORExFIHJlcGFyc2VfcG9pbnRfaGFuZGxlLCBVTE9ORyAqcmVwYXJzZV90YWcpCkBAIC0xMzU2LDQ3ICsxMjc5LDM3IEBACiAKIC8qIFBPU0lYIGdlbmVyaWMgbWV0aG9kcyAqLwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZmlsZGVzKFB5T2JqZWN0ICpmZG9iaiwgaW50ICgqZnVuYykoaW50KSkKK3N0YXRpYyBpbnQKK2ZpbGRlc19jb252ZXJ0ZXIoUHlPYmplY3QgKm8sIHZvaWQgKnApCiB7CiAgICAgaW50IGZkOwotICAgIGludCByZXM7Ci0gICAgZmQgPSBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yKGZkb2JqKTsKKyAgICBpbnQgKnBvaW50ZXIgPSAoaW50ICopcDsKKyAgICBmZCA9IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3Iobyk7CiAgICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gKCpmdW5jKShmZCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgICAgICByZXR1cm4gMDsKKyAgICAqcG9pbnRlciA9IGZkOworICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfMXN0cihjb25zdCBjaGFyICpmdW5jX25hbWUsIFB5T2JqZWN0ICphcmdzLCBjaGFyICpmb3JtYXQsCi0gICAgICAgICAgIGludCAoKmZ1bmMpKGNvbnN0IGNoYXIqKSkKK3Bvc2l4X2ZpbGRlc19mZChpbnQgZmQsIGludCAoKmZ1bmMpKGludCkpCiB7Ci0gICAgcGF0aF90IHBhdGg7CiAgICAgaW50IHJlczsKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gZnVuY19uYW1lOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSAoKmZ1bmMpKHBhdGgubmFycm93KTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwotICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgaW50IGFzeW5jX2VyciA9IDA7CisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyAgICAgICAgcmVzID0gKCpmdW5jKShmZCk7CisgICAgICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAocmVzICE9IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTE0MzQsMTYgKzEzNDcsMTYgQEAKIHN0YXRpYyBCT09MIF9fc3RkY2FsbAogd2luMzJfd2NoZGlyKExQQ1dTVFIgcGF0aCkKIHsKLSAgICB3Y2hhcl90IF9uZXdfcGF0aFtNQVhfUEFUSF0sICpuZXdfcGF0aCA9IF9uZXdfcGF0aDsKKyAgICB3Y2hhcl90IHBhdGhfYnVmW01BWF9QQVRIXSwgKm5ld19wYXRoID0gcGF0aF9idWY7CiAgICAgaW50IHJlc3VsdDsKICAgICB3Y2hhcl90IGVudls0XSA9IEwiPXg6IjsKIAogICAgIGlmKCFTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCksIG5ld19wYXRoKTsKKyAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhQeV9BUlJBWV9MRU5HVEgocGF0aF9idWYpLCBuZXdfcGF0aCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpZiAocmVzdWx0ID4gUHlfQVJSQVlfTEVOR1RIKG5ld19wYXRoKSkgeworICAgIGlmIChyZXN1bHQgPiBQeV9BUlJBWV9MRU5HVEgocGF0aF9idWYpKSB7CiAgICAgICAgIG5ld19wYXRoID0gUHlNZW1fUmF3TWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghbmV3X3BhdGgpIHsKICAgICAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CkBAIC0xNDYxLDcgKzEzNzQsNyBAQAogICAgICAgICByZXR1cm4gVFJVRTsKICAgICBlbnZbMV0gPSBuZXdfcGF0aFswXTsKICAgICByZXN1bHQgPSBTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhlbnYsIG5ld19wYXRoKTsKLSAgICBpZiAobmV3X3BhdGggIT0gX25ld19wYXRoKQorICAgIGlmIChuZXdfcGF0aCAhPSBwYXRoX2J1ZikKICAgICAgICAgUHlNZW1fUmF3RnJlZShuZXdfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0NzUsODkgKzEzODgsNyBAQAogICAgVGhlcmVmb3JlLCB3ZSBpbXBsZW1lbnQgb3VyIG93biBzdGF0LCBiYXNlZCBvbiB0aGUgV2luMzIgQVBJIGRpcmVjdGx5LgogKi8KICNkZWZpbmUgSEFWRV9TVEFUX05TRUMgMQotCi1zdHJ1Y3Qgd2luMzJfc3RhdHsKLSAgICB1bnNpZ25lZCBsb25nIHN0X2RldjsKLSAgICBfX2ludDY0IHN0X2lubzsKLSAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwotICAgIGludCBzdF9ubGluazsKLSAgICBpbnQgc3RfdWlkOwotICAgIGludCBzdF9naWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwotICAgIF9faW50NjQgc3Rfc2l6ZTsKLSAgICB0aW1lX3Qgc3RfYXRpbWU7Ci0gICAgaW50IHN0X2F0aW1lX25zZWM7Ci0gICAgdGltZV90IHN0X210aW1lOwotICAgIGludCBzdF9tdGltZV9uc2VjOwotICAgIHRpbWVfdCBzdF9jdGltZTsKLSAgICBpbnQgc3RfY3RpbWVfbnNlYzsKLX07Ci0KLXN0YXRpYyBfX2ludDY0IHNlY3NfYmV0d2Vlbl9lcG9jaHMgPSAxMTY0NDQ3MzYwMDsgLyogU2Vjb25kcyBiZXR3ZWVuIDEuMS4xNjAxIGFuZCAxLjEuMTk3MCAqLwotCi1zdGF0aWMgdm9pZAotRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKEZJTEVUSU1FICppbl9wdHIsIHRpbWVfdCAqdGltZV9vdXQsIGludCogbnNlY19vdXQpCi17Ci0gICAgLyogWFhYIGVuZGlhbm5lc3MuIFNob3VsZG4ndCBtYXR0ZXIsIGFzIGFsbCBXaW5kb3dzIGltcGxlbWVudGF0aW9ucyBhcmUgbGl0dGxlLWVuZGlhbiAqLwotICAgIC8qIENhbm5vdCBzaW1wbHkgY2FzdCBhbmQgZGVyZWZlcmVuY2UgaW5fcHRyLAotICAgICAgIHNpbmNlIGl0IG1pZ2h0IG5vdCBiZSBhbGlnbmVkIHByb3Blcmx5ICovCi0gICAgX19pbnQ2NCBpbjsKLSAgICBtZW1jcHkoJmluLCBpbl9wdHIsIHNpemVvZihpbikpOwotICAgICpuc2VjX291dCA9IChpbnQpKGluICUgMTAwMDAwMDApICogMTAwOyAvKiBGSUxFVElNRSBpcyBpbiB1bml0cyBvZiAxMDAgbnNlYy4gKi8KLSAgICAqdGltZV9vdXQgPSBQeV9TQUZFX0RPV05DQVNUKChpbiAvIDEwMDAwMDAwKSAtIHNlY3NfYmV0d2Vlbl9lcG9jaHMsIF9faW50NjQsIHRpbWVfdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10aW1lX3RfdG9fRklMRV9USU1FKHRpbWVfdCB0aW1lX2luLCBpbnQgbnNlY19pbiwgRklMRVRJTUUgKm91dF9wdHIpCi17Ci0gICAgLyogWFhYIGVuZGlhbm5lc3MgKi8KLSAgICBfX2ludDY0IG91dDsKLSAgICBvdXQgPSB0aW1lX2luICsgc2Vjc19iZXR3ZWVuX2Vwb2NoczsKLSAgICBvdXQgPSBvdXQgKiAxMDAwMDAwMCArIG5zZWNfaW4gLyAxMDA7Ci0gICAgbWVtY3B5KG91dF9wdHIsICZvdXQsIHNpemVvZihvdXQpKTsKLX0KLQotLyogQmVsb3csIHdlICprbm93KiB0aGF0IHVnbytyIGlzIDA0NDQgKi8KLSNpZiBfU19JUkVBRCAhPSAwNDAwCi0jZXJyb3IgVW5zdXBwb3J0ZWQgQyBsaWJyYXJ5Ci0jZW5kaWYKLXN0YXRpYyBpbnQKLWF0dHJpYnV0ZXNfdG9fbW9kZShEV09SRCBhdHRyKQotewotICAgIGludCBtID0gMDsKLSAgICBpZiAoYXR0ciAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgbSB8PSBfU19JRkRJUiB8IDAxMTE7IC8qIElGRVhFQyBmb3IgdXNlcixncm91cCxvdGhlciAqLwotICAgIGVsc2UKLSAgICAgICAgbSB8PSBfU19JRlJFRzsKLSAgICBpZiAoYXR0ciAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKQotICAgICAgICBtIHw9IDA0NDQ7Ci0gICAgZWxzZQotICAgICAgICBtIHw9IDA2NjY7Ci0gICAgcmV0dXJuIG07Ci19Ci0KLXN0YXRpYyBpbnQKLWF0dHJpYnV0ZV9kYXRhX3RvX3N0YXQoQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gKmluZm8sIFVMT05HIHJlcGFyc2VfdGFnLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0KQotewotICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7Ci0gICAgcmVzdWx0LT5zdF9tb2RlID0gYXR0cmlidXRlc190b19tb2RlKGluZm8tPmR3RmlsZUF0dHJpYnV0ZXMpOwotICAgIHJlc3VsdC0+c3Rfc2l6ZSA9ICgoKF9faW50NjQpaW5mby0+bkZpbGVTaXplSGlnaCk8PDMyKSArIGluZm8tPm5GaWxlU2l6ZUxvdzsKLSAgICByZXN1bHQtPnN0X2RldiA9IGluZm8tPmR3Vm9sdW1lU2VyaWFsTnVtYmVyOwotICAgIHJlc3VsdC0+c3RfcmRldiA9IHJlc3VsdC0+c3RfZGV2OwotICAgIEZJTEVfVElNRV90b190aW1lX3RfbnNlYygmaW5mby0+ZnRDcmVhdGlvblRpbWUsICZyZXN1bHQtPnN0X2N0aW1lLCAmcmVzdWx0LT5zdF9jdGltZV9uc2VjKTsKLSAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdFdyaXRlVGltZSwgJnJlc3VsdC0+c3RfbXRpbWUsICZyZXN1bHQtPnN0X210aW1lX25zZWMpOwotICAgIEZJTEVfVElNRV90b190aW1lX3RfbnNlYygmaW5mby0+ZnRMYXN0QWNjZXNzVGltZSwgJnJlc3VsdC0+c3RfYXRpbWUsICZyZXN1bHQtPnN0X2F0aW1lX25zZWMpOwotICAgIHJlc3VsdC0+c3RfbmxpbmsgPSBpbmZvLT5uTnVtYmVyT2ZMaW5rczsKLSAgICByZXN1bHQtPnN0X2lubyA9ICgoKF9faW50NjQpaW5mby0+bkZpbGVJbmRleEhpZ2gpPDwzMikgKyBpbmZvLT5uRmlsZUluZGV4TG93OwotICAgIGlmIChyZXBhcnNlX3RhZyA9PSBJT19SRVBBUlNFX1RBR19TWU1MSU5LKSB7Ci0gICAgICAgIC8qIGZpcnN0IGNsZWFyIHRoZSBTX0lGTVQgYml0cyAqLwotICAgICAgICByZXN1bHQtPnN0X21vZGUgXj0gKHJlc3VsdC0+c3RfbW9kZSAmIFNfSUZNVCk7Ci0gICAgICAgIC8qIG5vdyBzZXQgdGhlIGJpdHMgdGhhdCBtYWtlIHRoaXMgYSBzeW1saW5rICovCi0gICAgICAgIHJlc3VsdC0+c3RfbW9kZSB8PSBTX0lGTE5LOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NUX0ZJTEVfQVRUUklCVVRFUyAxCiAKIHN0YXRpYyBCT09MCiBhdHRyaWJ1dGVzX2Zyb21fZGlyKExQQ1NUUiBwc3pGaWxlLCBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiAqaW5mbywgVUxPTkcgKnJlcGFyc2VfdGFnKQpAQCAtMTU4Miw2ICsxNDEzLDI1IEBACiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5kX2RhdGFfdG9fZmlsZV9pbmZvX3coV0lOMzJfRklORF9EQVRBVyAqcEZpbGVEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HICpyZXBhcnNlX3RhZykKK3sKKyAgICBtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisgICAgaW5mby0+ZHdGaWxlQXR0cmlidXRlcyA9IHBGaWxlRGF0YS0+ZHdGaWxlQXR0cmlidXRlczsKKyAgICBpbmZvLT5mdENyZWF0aW9uVGltZSAgID0gcEZpbGVEYXRhLT5mdENyZWF0aW9uVGltZTsKKyAgICBpbmZvLT5mdExhc3RBY2Nlc3NUaW1lID0gcEZpbGVEYXRhLT5mdExhc3RBY2Nlc3NUaW1lOworICAgIGluZm8tPmZ0TGFzdFdyaXRlVGltZSAgPSBwRmlsZURhdGEtPmZ0TGFzdFdyaXRlVGltZTsKKyAgICBpbmZvLT5uRmlsZVNpemVIaWdoICAgID0gcEZpbGVEYXRhLT5uRmlsZVNpemVIaWdoOworICAgIGluZm8tPm5GaWxlU2l6ZUxvdyAgICAgPSBwRmlsZURhdGEtPm5GaWxlU2l6ZUxvdzsKKy8qICBpbmZvLT5uTnVtYmVyT2ZMaW5rcyAgID0gMTsgKi8KKyAgICBpZiAocEZpbGVEYXRhLT5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVQQVJTRV9QT0lOVCkKKyAgICAgICAgKnJlcGFyc2VfdGFnID0gcEZpbGVEYXRhLT5kd1Jlc2VydmVkMDsKKyAgICBlbHNlCisgICAgICAgICpyZXBhcnNlX3RhZyA9IDA7Cit9CisKIHN0YXRpYyBCT09MCiBhdHRyaWJ1dGVzX2Zyb21fZGlyX3coTFBDV1NUUiBwc3pGaWxlLCBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiAqaW5mbywgVUxPTkcgKnJlcGFyc2VfdGFnKQogewpAQCAtMTU5MSw0NSArMTQ0MSwxMCBAQAogICAgIGlmIChoRmluZEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICBGaW5kQ2xvc2UoaEZpbmRGaWxlKTsKLSAgICBtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0gICAgKnJlcGFyc2VfdGFnID0gMDsKLSAgICBpbmZvLT5kd0ZpbGVBdHRyaWJ1dGVzID0gRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlczsKLSAgICBpbmZvLT5mdENyZWF0aW9uVGltZSAgID0gRmlsZURhdGEuZnRDcmVhdGlvblRpbWU7Ci0gICAgaW5mby0+ZnRMYXN0QWNjZXNzVGltZSA9IEZpbGVEYXRhLmZ0TGFzdEFjY2Vzc1RpbWU7Ci0gICAgaW5mby0+ZnRMYXN0V3JpdGVUaW1lICA9IEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGltZTsKLSAgICBpbmZvLT5uRmlsZVNpemVIaWdoICAgID0gRmlsZURhdGEubkZpbGVTaXplSGlnaDsKLSAgICBpbmZvLT5uRmlsZVNpemVMb3cgICAgID0gRmlsZURhdGEubkZpbGVTaXplTG93OwotLyogIGluZm8tPm5OdW1iZXJPZkxpbmtzICAgPSAxOyAqLwotICAgIGlmIChGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVQQVJTRV9QT0lOVCkKLSAgICAgICAgKnJlcGFyc2VfdGFnID0gRmlsZURhdGEuZHdSZXNlcnZlZDA7CisgICAgZmluZF9kYXRhX3RvX2ZpbGVfaW5mb193KCZGaWxlRGF0YSwgaW5mbywgcmVwYXJzZV90YWcpOwogICAgIHJldHVybiBUUlVFOwogfQogCi0vKiBHcmFiIEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCi1zdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAtMTsKLXN0YXRpYyBEV09SRCAoQ0FMTEJBQ0sgKlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcpKEhBTkRMRSwgTFBXU1RSLCBEV09SRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEKTsKLXN0YXRpYyBpbnQKLWNoZWNrX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSgpCi17Ci0gICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKLSAgICBEV09SRCAoQ0FMTEJBQ0sgKlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZUEpKEhBTkRMRSwgTFBTVFIsIERXT1JELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQpOwotCi0gICAgLyogb25seSByZWNoZWNrICovCi0gICAgaWYgKC0xID09IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUpCi0gICAgewotICAgICAgICBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGVXKEwiS0VSTkVMMzIiKTsKLSAgICAgICAgKihGQVJQUk9DKikmUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlQSA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVBIik7Ci0gICAgICAgICooRkFSUFJPQyopJlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlVyIpOwotICAgICAgICBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlID0gUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlQSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlVzsKLSAgICB9Ci0gICAgcmV0dXJuIGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGU7Ci19Ci0KIHN0YXRpYyBCT09MCiBnZXRfdGFyZ2V0X3BhdGgoSEFORExFIGhkbCwgd2NoYXJfdCAqKnRhcmdldF9wYXRoKQogewpAQCAtMTYzOCw4ICsxNDUzLDggQEAKIAogICAgIC8qIFdlIGhhdmUgYSBnb29kIGhhbmRsZSB0byB0aGUgdGFyZ2V0LCB1c2UgaXQgdG8gZGV0ZXJtaW5lCiAgICAgICAgdGhlIHRhcmdldCBwYXRoIG5hbWUgKHRoZW4gd2UnbGwgY2FsbCBsc3RhdCBvbiBpdCkuICovCi0gICAgYnVmX3NpemUgPSBQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKGhkbCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVk9MVU1FX05BTUVfRE9TKTsKKyAgICBidWZfc2l6ZSA9IEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcoaGRsLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWT0xVTUVfTkFNRV9ET1MpOwogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCkBAIC0xNjQ5LDcgKzE0NjQsNyBAQAogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgcmVzdWx0X2xlbmd0aCA9IFB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcoaGRsLAorICAgIHJlc3VsdF9sZW5ndGggPSBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKGhkbCwKICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWZfc2l6ZSwgVk9MVU1FX05BTUVfRE9TKTsKIAogICAgIGlmKCFyZXN1bHRfbGVuZ3RoKSB7CkBAIC0xNjY5LDEwICsxNDg0LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLXdpbjMyX3hzdGF0X2ltcGxfdyhjb25zdCB3Y2hhcl90ICpwYXRoLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0LAord2luMzJfeHN0YXRfaW1wbF93KGNvbnN0IHdjaGFyX3QgKnBhdGgsIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3QgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICBCT09MIHRyYXZlcnNlKTsKIHN0YXRpYyBpbnQKLXdpbjMyX3hzdGF0X2ltcGwoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHdpbjMyX3N0YXQgKnJlc3VsdCwKK3dpbjMyX3hzdGF0X2ltcGwoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IF9QeV9zdGF0X3N0cnVjdCAqcmVzdWx0LAogICAgICAgICAgICAgICAgICBCT09MIHRyYXZlcnNlKQogewogICAgIGludCBjb2RlOwpAQCAtMTY4MiwxMiArMTQ5Nyw2IEBACiAgICAgd2NoYXJfdCAqdGFyZ2V0X3BhdGg7CiAgICAgY29uc3QgY2hhciAqZG90OwogCi0gICAgaWYoIWNoZWNrX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSgpKSB7Ci0gICAgICAgIC8qIElmIHRoZSBPUyBkb2Vzbid0IGhhdmUgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlLCBkb24ndAotICAgICAgICAgICB0cmF2ZXJzZSByZXBhcnNlIHBvaW50LiAqLwotICAgICAgICB0cmF2ZXJzZSA9IEZBTFNFOwotICAgIH0KLQogICAgIGhGaWxlID0gQ3JlYXRlRmlsZUEoCiAgICAgICAgIHBhdGgsCiAgICAgICAgIEZJTEVfUkVBRF9BVFRSSUJVVEVTLCAvKiBkZXNpcmVkIGFjY2VzcyAqLwpAQCAtMTc1NSw3ICsxNTY0LDcgQEAKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7CiAgICAgfQotICAgIGF0dHJpYnV0ZV9kYXRhX3RvX3N0YXQoJmluZm8sIHJlcGFyc2VfdGFnLCByZXN1bHQpOworICAgIF9QeV9hdHRyaWJ1dGVfZGF0YV90b19zdGF0KCZpbmZvLCByZXBhcnNlX3RhZywgcmVzdWx0KTsKIAogICAgIC8qIFNldCBTX0lFWEVDIGlmIGl0IGlzIGFuIC5leGUsIC5iYXQsIC4uLiAqLwogICAgIGRvdCA9IHN0cnJjaHIocGF0aCwgJy4nKTsKQEAgLTE3NjgsNyArMTU3Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXdpbjMyX3hzdGF0X2ltcGxfdyhjb25zdCB3Y2hhcl90ICpwYXRoLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0LAord2luMzJfeHN0YXRfaW1wbF93KGNvbnN0IHdjaGFyX3QgKnBhdGgsIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3QgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICBCT09MIHRyYXZlcnNlKQogewogICAgIGludCBjb2RlOwpAQCAtMTc3OCwxMiArMTU4Nyw2IEBACiAgICAgd2NoYXJfdCAqdGFyZ2V0X3BhdGg7CiAgICAgY29uc3Qgd2NoYXJfdCAqZG90OwogCi0gICAgaWYoIWNoZWNrX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSgpKSB7Ci0gICAgICAgIC8qIElmIHRoZSBPUyBkb2Vzbid0IGhhdmUgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlLCBkb24ndAotICAgICAgICAgICB0cmF2ZXJzZSByZXBhcnNlIHBvaW50LiAqLwotICAgICAgICB0cmF2ZXJzZSA9IEZBTFNFOwotICAgIH0KLQogICAgIGhGaWxlID0gQ3JlYXRlRmlsZVcoCiAgICAgICAgIHBhdGgsCiAgICAgICAgIEZJTEVfUkVBRF9BVFRSSUJVVEVTLCAvKiBkZXNpcmVkIGFjY2VzcyAqLwpAQCAtMTg1MSw3ICsxNjU0LDcgQEAKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7CiAgICAgfQotICAgIGF0dHJpYnV0ZV9kYXRhX3RvX3N0YXQoJmluZm8sIHJlcGFyc2VfdGFnLCByZXN1bHQpOworICAgIF9QeV9hdHRyaWJ1dGVfZGF0YV90b19zdGF0KCZpbmZvLCByZXBhcnNlX3RhZywgcmVzdWx0KTsKIAogICAgIC8qIFNldCBTX0lFWEVDIGlmIGl0IGlzIGFuIC5leGUsIC5iYXQsIC4uLiAqLwogICAgIGRvdCA9IHdjc3JjaHIocGF0aCwgJy4nKTsKQEAgLTE4NjQsNyArMTY2Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXdpbjMyX3hzdGF0KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQsIEJPT0wgdHJhdmVyc2UpCit3aW4zMl94c3RhdChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0ICpyZXN1bHQsIEJPT0wgdHJhdmVyc2UpCiB7CiAgICAgLyogUHJvdG9jb2wgdmlvbGF0aW9uOiB3ZSBleHBsaWNpdGx5IGNsZWFyIGVycm5vLCBpbnN0ZWFkIG9mCiAgICAgICAgc2V0dGluZyBpdCB0byBhIFBPU0lYIGVycm9yLiBDYWxsZXJzIHNob3VsZCB1c2UgR2V0TGFzdEVycm9yLiAqLwpAQCAtMTg3NCw3ICsxNjc3LDcgQEAKIH0KIAogc3RhdGljIGludAotd2luMzJfeHN0YXRfdyhjb25zdCB3Y2hhcl90ICpwYXRoLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0LCBCT09MIHRyYXZlcnNlKQord2luMzJfeHN0YXRfdyhjb25zdCB3Y2hhcl90ICpwYXRoLCBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0ICpyZXN1bHQsIEJPT0wgdHJhdmVyc2UpCiB7CiAgICAgLyogUHJvdG9jb2wgdmlvbGF0aW9uOiB3ZSBleHBsaWNpdGx5IGNsZWFyIGVycm5vLCBpbnN0ZWFkIG9mCiAgICAgICAgc2V0dGluZyBpdCB0byBhIFBPU0lYIGVycm9yLiBDYWxsZXJzIHNob3VsZCB1c2UgR2V0TGFzdEVycm9yLiAqLwpAQCAtMTg5Niw4MCArMTY5OSwyOSBAQAogICAgVGhlIF93IHJlcHJlc2VudCBVbmljb2RlIGVxdWl2YWxlbnRzIG9mIHRoZSBhZm9yZW1lbnRpb25lZCBBTlNJIGZ1bmN0aW9ucy4gKi8KIAogc3RhdGljIGludAotd2luMzJfbHN0YXQoY29uc3QgY2hhciogcGF0aCwgc3RydWN0IHdpbjMyX3N0YXQgKnJlc3VsdCkKK3dpbjMyX2xzdGF0KGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3QgKnJlc3VsdCkKIHsKICAgICByZXR1cm4gd2luMzJfeHN0YXQocGF0aCwgcmVzdWx0LCBGQUxTRSk7CiB9CiAKIHN0YXRpYyBpbnQKLXdpbjMyX2xzdGF0X3coY29uc3Qgd2NoYXJfdCogcGF0aCwgc3RydWN0IHdpbjMyX3N0YXQgKnJlc3VsdCkKK3dpbjMyX2xzdGF0X3coY29uc3Qgd2NoYXJfdCogcGF0aCwgc3RydWN0IF9QeV9zdGF0X3N0cnVjdCAqcmVzdWx0KQogewogICAgIHJldHVybiB3aW4zMl94c3RhdF93KHBhdGgsIHJlc3VsdCwgRkFMU0UpOwogfQogCiBzdGF0aWMgaW50Ci13aW4zMl9zdGF0KGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQpCit3aW4zMl9zdGF0KGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3QgKnJlc3VsdCkKIHsKICAgICByZXR1cm4gd2luMzJfeHN0YXQocGF0aCwgcmVzdWx0LCBUUlVFKTsKIH0KIAogc3RhdGljIGludAotd2luMzJfc3RhdF93KGNvbnN0IHdjaGFyX3QqIHBhdGgsIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQpCit3aW4zMl9zdGF0X3coY29uc3Qgd2NoYXJfdCogcGF0aCwgc3RydWN0IF9QeV9zdGF0X3N0cnVjdCAqcmVzdWx0KQogewogICAgIHJldHVybiB3aW4zMl94c3RhdF93KHBhdGgsIHJlc3VsdCwgVFJVRSk7CiB9CiAKLXN0YXRpYyBpbnQKLXdpbjMyX2ZzdGF0KGludCBmaWxlX251bWJlciwgc3RydWN0IHdpbjMyX3N0YXQgKnJlc3VsdCkKLXsKLSAgICBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBpbmZvOwotICAgIEhBTkRMRSBoOwotICAgIGludCB0eXBlOwotCi0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmlsZV9udW1iZXIpKQotICAgICAgICBoID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0gICAgZWxzZQotICAgICAgICBoID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmaWxlX251bWJlcik7Ci0KLSAgICAvKiBQcm90b2NvbCB2aW9sYXRpb246IHdlIGV4cGxpY2l0bHkgY2xlYXIgZXJybm8sIGluc3RlYWQgb2YKLSAgICAgICBzZXR0aW5nIGl0IHRvIGEgUE9TSVggZXJyb3IuIENhbGxlcnMgc2hvdWxkIHVzZSBHZXRMYXN0RXJyb3IuICovCi0gICAgZXJybm8gPSAwOwotCi0gICAgaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgLyogVGhpcyBpcyByZWFsbHkgYSBDIGxpYnJhcnkgZXJyb3IgKGludmFsaWQgZmlsZSBoYW5kbGUpLgotICAgICAgICAgICBXZSBzZXQgdGhlIFdpbjMyIGVycm9yIHRvIHRoZSBjbG9zZXMgb25lIG1hdGNoaW5nLiAqLwotICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfSU5WQUxJRF9IQU5ETEUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7Ci0KLSAgICB0eXBlID0gR2V0RmlsZVR5cGUoaCk7Ci0gICAgaWYgKHR5cGUgPT0gRklMRV9UWVBFX1VOS05PV04pIHsKLSAgICAgICAgRFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgaWYgKGVycm9yICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICAvKiBlbHNlOiB2YWxpZCBidXQgdW5rbm93biBmaWxlICovCi0gICAgfQotCi0gICAgaWYgKHR5cGUgIT0gRklMRV9UWVBFX0RJU0spIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gRklMRV9UWVBFX0NIQVIpCi0gICAgICAgICAgICByZXN1bHQtPnN0X21vZGUgPSBfU19JRkNIUjsKLSAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGSUxFX1RZUEVfUElQRSkKLSAgICAgICAgICAgIHJlc3VsdC0+c3RfbW9kZSA9IF9TX0lGSUZPOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoIUdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGgsICZpbmZvKSkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgYXR0cmlidXRlX2RhdGFfdG9fc3RhdCgmaW5mbywgMCwgcmVzdWx0KTsKLSAgICAvKiBzcGVjaWZpYyB0byBmc3RhdCgpICovCi0gICAgcmVzdWx0LT5zdF9pbm8gPSAoKChfX2ludDY0KWluZm8ubkZpbGVJbmRleEhpZ2gpPDwzMikgKyBpbmZvLm5GaWxlSW5kZXhMb3c7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIFB5RG9jX1NUUlZBUihzdGF0X3Jlc3VsdF9fZG9jX18sCkBAIC0yMDE5LDYgKzE3NzEsOSBAQAogI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQklSVEhUSU1FCiAgICAgeyJzdF9iaXJ0aHRpbWUiLCAgICJ0aW1lIG9mIGNyZWF0aW9uIn0sCiAjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0ZJTEVfQVRUUklCVVRFUworICAgIHsic3RfZmlsZV9hdHRyaWJ1dGVzIiwgIldpbmRvd3MgZmlsZSBhdHRyaWJ1dGUgYml0cyJ9LAorI2VuZGlmCiAgICAgezB9CiB9OwogCkBAIC0yMDU4LDYgKzE4MTMsMTIgQEAKICNkZWZpbmUgU1RfQklSVEhUSU1FX0lEWCBTVF9HRU5fSURYCiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfRklMRV9BVFRSSUJVVEVTCisjZGVmaW5lIFNUX0ZJTEVfQVRUUklCVVRFU19JRFggKFNUX0JJUlRIVElNRV9JRFgrMSkKKyNlbHNlCisjZGVmaW5lIFNUX0ZJTEVfQVRUUklCVVRFU19JRFggU1RfQklSVEhUSU1FX0lEWAorI2VuZGlmCisKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2Mgc3RhdF9yZXN1bHRfZGVzYyA9IHsKICAgICAic3RhdF9yZXN1bHQiLCAvKiBuYW1lICovCiAgICAgc3RhdF9yZXN1bHRfX2RvY19fLCAvKiBkb2MgKi8KQEAgLTIxNTksMTAgKzE5MjAsMTIgQEAKIFB5RG9jX1NUUlZBUihzdGF0X2Zsb2F0X3RpbWVzX19kb2NfXywKICJzdGF0X2Zsb2F0X3RpbWVzKFtuZXd2YWxdKSAtPiBvbGR2YWxcblxuXAogRGV0ZXJtaW5lIHdoZXRoZXIgb3MuW2xmXXN0YXQgcmVwcmVzZW50cyB0aW1lIHN0YW1wcyBhcyBmbG9hdCBvYmplY3RzLlxuXAotSWYgbmV3dmFsIGlzIFRydWUsIGZ1dHVyZSBjYWxscyB0byBzdGF0KCkgcmV0dXJuIGZsb2F0cywgaWYgaXQgaXMgRmFsc2UsXG5cCi1mdXR1cmUgY2FsbHMgcmV0dXJuIGludHMuIFxuXAotSWYgbmV3dmFsIGlzIG9taXR0ZWQsIHJldHVybiB0aGUgY3VycmVudCBzZXR0aW5nLlxuIik7CitcblwKK0lmIHZhbHVlIGlzIFRydWUsIGZ1dHVyZSBjYWxscyB0byBzdGF0KCkgcmV0dXJuIGZsb2F0czsgaWYgaXQgaXMgRmFsc2UsXG5cCitmdXR1cmUgY2FsbHMgcmV0dXJuIGludHMuXG5cCitJZiB2YWx1ZSBpcyBvbWl0dGVkLCByZXR1cm4gdGhlIGN1cnJlbnQgc2V0dGluZy5cbiIpOwogCisvKiBBQyAzLjU6IHRoZSBwdWJsaWMgZGVmYXVsdCB2YWx1ZSBzaG91bGQgYmUgTm9uZSwgbm90IHJlYWR5IGZvciB0aGF0IHlldCAqLwogc3RhdGljIFB5T2JqZWN0Kgogc3RhdF9mbG9hdF90aW1lcyhQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0yMzIyLDYgKzIwODUsMTAgQEAKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIFNUX0ZMQUdTX0lEWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZygobG9uZylzdC0+c3RfZmxhZ3MpKTsKICNlbmRpZgorI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfRklMRV9BVFRSSUJVVEVTCisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCBTVF9GSUxFX0FUVFJJQlVURVNfSURYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc3QtPnN0X2ZpbGVfYXR0cmlidXRlcykpOworI2VuZGlmCiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYodik7CkBAIC0yMzg1LDEyICsyMTUyLDE4MSBAQAogICAgIHJldHVybiBfcHlzdGF0X2Zyb21zdHJ1Y3RzdGF0KCZzdCk7CiB9CiAKLSNpZmRlZiBIQVZFX0ZTVEFUQVQKLSAgICAjZGVmaW5lIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisvKltweXRob24gaW5wdXRdCisKK2ZvciBzIGluICIiIgorCitGQUNDRVNTQVQKK0ZDSE1PREFUCitGQ0hPV05BVAorRlNUQVRBVAorTElOS0FUCitNS0RJUkFUCitNS0ZJRk9BVAorTUtOT0RBVAorT1BFTkFUCitSRUFETElOS0FUCitTWU1MSU5LQVQKK1VOTElOS0FUCisKKyIiIi5zdHJpcCgpLnNwbGl0KCk6CisgICAgcyA9IHMuc3RyaXAoKQorICAgIHByaW50KCIiIgorI2lmZGVmIEhBVkVfe3N9CisgICAgI2RlZmluZSB7c31fRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCiAjZWxzZQotICAgICNkZWZpbmUgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorICAgICNkZWZpbmUge3N9X0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX3VuYXZhaWxhYmxlCisjZW5kaWYKKyIiIi5yc3RyaXAoKS5mb3JtYXQocz1zKSkKKworZm9yIHMgaW4gIiIiCisKK0ZDSERJUgorRkNITU9ECitGQ0hPV04KK0ZET1BFTkRJUgorRkVYRUNWRQorRlBBVEhDT05GCitGU1RBVFZGUworRlRSVU5DQVRFCisKKyIiIi5zdHJpcCgpLnNwbGl0KCk6CisgICAgcyA9IHMuc3RyaXAoKQorICAgIHByaW50KCIiIgorI2lmZGVmIEhBVkVfe3N9CisgICAgI2RlZmluZSBQQVRIX0hBVkVfe3N9IDEKKyNlbHNlCisgICAgI2RlZmluZSBQQVRIX0hBVkVfe3N9IDAKICNlbmRpZgogCisiIiIucnN0cmlwKCkuZm9ybWF0KHM9cykpCitbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAorICAgICNkZWZpbmUgRkFDQ0VTU0FUX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIEZBQ0NFU1NBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDSE1PREFUCisgICAgI2RlZmluZSBGQ0hNT0RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF9jb252ZXJ0ZXIKKyNlbHNlCisgICAgI2RlZmluZSBGQ0hNT0RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDSE9XTkFUCisgICAgI2RlZmluZSBGQ0hPV05BVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF9jb252ZXJ0ZXIKKyNlbHNlCisgICAgI2RlZmluZSBGQ0hPV05BVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZTVEFUQVQKKyAgICAjZGVmaW5lIEZTVEFUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgRlNUQVRBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJTktBVAorICAgICNkZWZpbmUgTElOS0FUX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIExJTktBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX01LRElSQVQKKyAgICAjZGVmaW5lIE1LRElSQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgTUtESVJBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX01LRklGT0FUCisgICAgI2RlZmluZSBNS0ZJRk9BVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF9jb252ZXJ0ZXIKKyNlbHNlCisgICAgI2RlZmluZSBNS0ZJRk9BVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX01LTk9EQVQKKyAgICAjZGVmaW5lIE1LTk9EQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgTUtOT0RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX09QRU5BVAorICAgICNkZWZpbmUgT1BFTkFUX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIE9QRU5BVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1JFQURMSU5LQVQKKyAgICAjZGVmaW5lIFJFQURMSU5LQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgUkVBRExJTktBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZTUxJTktBVAorICAgICNkZWZpbmUgU1lNTElOS0FUX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIFNZTUxJTktBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1VOTElOS0FUCisgICAgI2RlZmluZSBVTkxJTktBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF9jb252ZXJ0ZXIKKyNlbHNlCisgICAgI2RlZmluZSBVTkxJTktBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDSERJUgorICAgICNkZWZpbmUgUEFUSF9IQVZFX0ZDSERJUiAxCisjZWxzZQorICAgICNkZWZpbmUgUEFUSF9IQVZFX0ZDSERJUiAwCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkNITU9ECisgICAgI2RlZmluZSBQQVRIX0hBVkVfRkNITU9EIDEKKyNlbHNlCisgICAgI2RlZmluZSBQQVRIX0hBVkVfRkNITU9EIDAKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9GQ0hPV04KKyAgICAjZGVmaW5lIFBBVEhfSEFWRV9GQ0hPV04gMQorI2Vsc2UKKyAgICAjZGVmaW5lIFBBVEhfSEFWRV9GQ0hPV04gMAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZET1BFTkRJUgorICAgICNkZWZpbmUgUEFUSF9IQVZFX0ZET1BFTkRJUiAxCisjZWxzZQorICAgICNkZWZpbmUgUEFUSF9IQVZFX0ZET1BFTkRJUiAwCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkVYRUNWRQorICAgICNkZWZpbmUgUEFUSF9IQVZFX0ZFWEVDVkUgMQorI2Vsc2UKKyAgICAjZGVmaW5lIFBBVEhfSEFWRV9GRVhFQ1ZFIDAKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9GUEFUSENPTkYKKyAgICAjZGVmaW5lIFBBVEhfSEFWRV9GUEFUSENPTkYgMQorI2Vsc2UKKyAgICAjZGVmaW5lIFBBVEhfSEFWRV9GUEFUSENPTkYgMAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZTVEFUVkZTCisgICAgI2RlZmluZSBQQVRIX0hBVkVfRlNUQVRWRlMgMQorI2Vsc2UKKyAgICAjZGVmaW5lIFBBVEhfSEFWRV9GU1RBVFZGUyAwCisjZW5kaWYKKworI2lmZGVmIEhBVkVfRlRSVU5DQVRFCisgICAgI2RlZmluZSBQQVRIX0hBVkVfRlRSVU5DQVRFIDEKKyNlbHNlCisgICAgI2RlZmluZSBQQVRIX0hBVkVfRlRSVU5DQVRFIDAKKyNlbmRpZgorLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRiZDRmNmY3ZDQxMjY3ZjEgaW5wdXQ9ODBiNGM4OTBiNjc3NGVhNV0qLworCisjaWZkZWYgTVNfV0lORE9XUworICAgICN1bmRlZiBQQVRIX0hBVkVfRlRSVU5DQVRFCisgICAgI2RlZmluZSBQQVRIX0hBVkVfRlRSVU5DQVRFIDEKKyNlbmRpZgogCiAvKltweXRob24gaW5wdXRdCiAKQEAgLTI0MDUsMjIgKzIzNDEsMjUgQEAKICAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYWxsb3dfZmQ9RmFsc2UsIG51bGxhYmxlPUZhbHNlKToKICAgICAgICAgIyByaWdodCBub3cgcGF0aF90IGRvZXNuJ3Qgc3VwcG9ydCBkZWZhdWx0IHZhbHVlcy4KICAgICAgICAgIyB0byBzdXBwb3J0IGEgZGVmYXVsdCB2YWx1ZSwgeW91J2xsIG5lZWQgdG8gb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpLgotICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgbm90IGluICh1bnNwZWNpZmllZCwgTm9uZSk6CiAgICAgICAgICAgICBmYWlsKCJDYW4ndCBzcGVjaWZ5IGEgZGVmYXVsdCB0byB0aGUgcGF0aF90IGNvbnZlcnRlciEiKQogCi0gICAgICAgIGlmIHNlbGYuY19kZWZhdWx0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZmFpbCgiQ2FuJ3Qgc3BlY2lmeSBhIGNfZGVmYXVsdCB0byB0aGUgcGF0aF90IGNvbnZlcnRlciEiKQorICAgICAgICBpZiBzZWxmLmNfZGVmYXVsdCBub3QgaW4gKE5vbmUsICdQeV9Ob25lJyk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IHNwZWNpZnkgYSBjX2RlZmF1bHQgdG8gdGhlIHBhdGhfdCBjb252ZXJ0ZXIhIikKIAogICAgICAgICBzZWxmLm51bGxhYmxlID0gbnVsbGFibGUKICAgICAgICAgc2VsZi5hbGxvd19mZCA9IGFsbG93X2ZkCiAKICAgICBkZWYgcHJlX3JlbmRlcihzZWxmKToKICAgICAgICAgZGVmIHN0cmlmeSh2YWx1ZSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQogICAgICAgICAgICAgcmV0dXJuIHN0cihpbnQoYm9vbCh2YWx1ZSkpKQogCiAgICAgICAgICMgYWRkIHNlbGYucHlfbmFtZSBoZXJlIHdoZW4gbWVyZ2luZyB3aXRoIHBvc2l4bW9kdWxlIGNvbnZlcnNpb24KLSAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSAnUEFUSF9UX0lOSVRJQUxJWkUoInt9Iiwge30sIHt9KScuZm9ybWF0KAorICAgICAgICBzZWxmLmNfZGVmYXVsdCA9ICdQQVRIX1RfSU5JVElBTElaRSgie30iLCAie30iLCB7fSwge30pJy5mb3JtYXQoCiAgICAgICAgICAgICBzZWxmLmZ1bmN0aW9uLm5hbWUsCisgICAgICAgICAgICBzZWxmLm5hbWUsCiAgICAgICAgICAgICBzdHJpZnkoc2VsZi5udWxsYWJsZSksCiAgICAgICAgICAgICBzdHJpZnkoc2VsZi5hbGxvd19mZCksCiAgICAgICAgICAgICApCkBAIC0yNDMxLDE1ICsyMzcwLDg3IEBACiAKIGNsYXNzIGRpcl9mZF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CiAgICAgdHlwZSA9ICdpbnQnCi0gICAgY29udmVydGVyID0gJ09TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUicKIAotICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgcmVxdWlyZXM9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuZGVmYXVsdCBpbiAodW5zcGVjaWZpZWQsIE5vbmUpOgogICAgICAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSAnREVGQVVMVF9ESVJfRkQnCisgICAgICAgIGlmIGlzaW5zdGFuY2UocmVxdWlyZXMsIHN0cik6CisgICAgICAgICAgICBzZWxmLmNvbnZlcnRlciA9IHJlcXVpcmVzLnVwcGVyKCkgKyAnX0RJUl9GRF9DT05WRVJURVInCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNvbnZlcnRlciA9ICdkaXJfZmRfY29udmVydGVyJwogCitjbGFzcyBmaWxkZXNfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnaW50JworICAgIGNvbnZlcnRlciA9ICdmaWxkZXNfY29udmVydGVyJworCitjbGFzcyB1aWRfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICJ1aWRfdCIKKyAgICBjb252ZXJ0ZXIgPSAnX1B5X1VpZF9Db252ZXJ0ZXInCisKK2NsYXNzIGdpZF90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gImdpZF90IgorICAgIGNvbnZlcnRlciA9ICdfUHlfR2lkX0NvbnZlcnRlcicKKworY2xhc3MgZGV2X3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZGV2X3QnCisgICAgY29udmVydGVyID0gJ19QeV9EZXZfQ29udmVydGVyJworCitjbGFzcyBkZXZfdF9yZXR1cm5fY29udmVydGVyKHVuc2lnbmVkX2xvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdkZXZfdCcKKyAgICBjb252ZXJzaW9uX2ZuID0gJ19QeUxvbmdfRnJvbURldicKKyAgICB1bnNpZ25lZF9jYXN0ID0gJyhkZXZfdCknCisKK2NsYXNzIEZTQ29udmVydGVyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgY29udmVydGVyID0gJ1B5VW5pY29kZV9GU0NvbnZlcnRlcicKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBmYWlsKCJGU0NvbnZlcnRlcl9jb252ZXJ0ZXIgZG9lcyBub3Qgc3VwcG9ydCBkZWZhdWx0IHZhbHVlcyIpCisgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ05VTEwnCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgcmV0dXJuICJQeV9YREVDUkVGKCIgKyBzZWxmLm5hbWUgKyAiKTtcbiIKKworY2xhc3MgcGlkX3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAncGlkX3QnCisgICAgZm9ybWF0X3VuaXQgPSAnIiBfUHlfUEFSU0VfUElEICInCisKK2NsYXNzIGlkdHlwZV90X2NvbnZlcnRlcihpbnRfY29udmVydGVyKToKKyAgICB0eXBlID0gJ2lkdHlwZV90JworCitjbGFzcyBpZF90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2lkX3QnCisgICAgZm9ybWF0X3VuaXQgPSAnIiBfUHlfUEFSU0VfUElEICInCisKK2NsYXNzIFB5X2ludHB0cl90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2ludHB0cl90JworICAgIGZvcm1hdF91bml0ID0gJyIgX1B5X1BBUlNFX0lOVFBUUiAiJworCitjbGFzcyBQeV9vZmZfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9vZmZfdCcKKyAgICBjb252ZXJ0ZXIgPSAnUHlfb2ZmX3RfY29udmVydGVyJworCitjbGFzcyBQeV9vZmZfdF9yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9vZmZfdCcKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tUHlfb2ZmX3QnCisKK2NsYXNzIHBhdGhfY29uZm5hbWVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGU9ImludCIKKyAgICBjb252ZXJ0ZXI9ImNvbnZfcGF0aF9jb25mbmFtZSIKKworY2xhc3MgY29uZnN0cl9jb25mbmFtZV9jb252ZXJ0ZXIocGF0aF9jb25mbmFtZV9jb252ZXJ0ZXIpOgorICAgIGNvbnZlcnRlcj0nY29udl9jb25mc3RyX2NvbmZuYW1lJworCitjbGFzcyBzeXNjb25mX2NvbmZuYW1lX2NvbnZlcnRlcihwYXRoX2NvbmZuYW1lX2NvbnZlcnRlcik6CisgICAgY29udmVydGVyPSJjb252X3N5c2NvbmZfY29uZm5hbWUiCisKK2NsYXNzIHNjaGVkX3BhcmFtX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3N0cnVjdCBzY2hlZF9wYXJhbScKKyAgICBjb252ZXJ0ZXIgPSAnY29udmVydF9zY2hlZF9wYXJhbScKKyAgICBpbXBsX2J5X3JlZmVyZW5jZSA9IFRydWU7CiAKIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KLS8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTVjOWY0NTZmNTMyNDRmYzNdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWFmZmU2ODMxNmYxNjA0MDFdKi8KIAogLypbY2xpbmljIGlucHV0XQogCkBAIC0yNDUwLDcgKzI0NjEsNyBAQAogCiAgICAgKgogCi0gICAgZGlyX2ZkIDogZGlyX2ZkID0gTm9uZQorICAgIGRpcl9mZCA6IGRpcl9mZChyZXF1aXJlcz0nZnN0YXRhdCcpID0gTm9uZQogICAgICAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksCiAgICAgICAgIGFuZCBwYXRoIHNob3VsZCBiZSBhIHJlbGF0aXZlIHN0cmluZzsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8KICAgICAgICAgdGhhdCBkaXJlY3RvcnkuCkBAIC0yNDcxLDEwMyArMjQ4Miw0MCBAQAogCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihvc19zdGF0X19kb2NfXywKLSJzdGF0KCRtb2R1bGUsIC8sIHBhdGgsICosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcbiIKLSItLVxuIgotIlxuIgotIlBlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLlxuIgotIlxuIgotIiAgcGF0aFxuIgotIiAgICBQYXRoIHRvIGJlIGV4YW1pbmVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LlxuIgotIiAgZGlyX2ZkXG4iCi0iICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcbiIKLSIgICAgYW5kIHBhdGggc2hvdWxkIGJlIGEgcmVsYXRpdmUgc3RyaW5nOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0b1xuIgotIiAgICB0aGF0IGRpcmVjdG9yeS5cbiIKLSIgIGZvbGxvd19zeW1saW5rc1xuIgotIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgotIiAgICBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuIgotIiAgICB0aGUgbGluayBwb2ludHMgdG8uXG4iCi0iXG4iCi0iZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgotIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgotIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKLSJcbiIKLSJJdFwncyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuIgotIiAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuIik7Ci0KLSNkZWZpbmUgT1NfU1RBVF9NRVRIT0RERUYgICAgXAotICAgIHsic3RhdCIsIChQeUNGdW5jdGlvbilvc19zdGF0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3Nfc3RhdF9fZG9jX199LAotCiBzdGF0aWMgUHlPYmplY3QgKgotb3Nfc3RhdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGRpcl9mZCwgaW50IGZvbGxvd19zeW1saW5rcyk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1vc19zdGF0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQotewotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07Ci0gICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgic3RhdCIsIDAsIDEpOwotICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKLSAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKLSAgICAgICAgIk8mfCRPJnA6c3RhdCIsIF9rZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgcmV0dXJuX3ZhbHVlID0gb3Nfc3RhdF9pbXBsKG1vZHVsZSwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKLQotZXhpdDoKLSAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLQotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1vc19zdGF0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWYxZGNhYTVlMjRkYjk4ODIgaW5wdXQ9NWFlMTU1YmQ0NzVmZDIwYV0qLworb3Nfc3RhdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGRpcl9mZCwgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03ZDQ5NzZlNmYxOGE1OWM1IGlucHV0PTA5OWQzNTZjMzA2ZmEyNGFdKi8KIHsKICAgICByZXR1cm4gcG9zaXhfZG9fc3RhdCgic3RhdCIsIHBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X2xzdGF0X19kb2NfXywKLSJsc3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSkgLT4gc3RhdCByZXN1bHRcblxuXAotTGlrZSBzdGF0KCksIGJ1dCBkbyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLlxuXAotRXF1aXZhbGVudCB0byBzdGF0KHBhdGgsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmxzdGF0CisKKyAgICBwYXRoIDogcGF0aF90CisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQocmVxdWlyZXM9J2ZzdGF0YXQnKSA9IE5vbmUKKworUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGgsIHdpdGhvdXQgZm9sbG93aW5nIHN5bWJvbGljIGxpbmtzLgorCitMaWtlIHN0YXQoKSwgYnV0IGRvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuCitFcXVpdmFsZW50IHRvIHN0YXQocGF0aCwgZm9sbG93X3N5bWxpbmtzPUZhbHNlKS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2xzdGF0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX2xzdGF0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWVmODJhNWQzNWNlOGFiMzcgaW5wdXQ9MGI3NDc0NzY1OTI3YjkyNV0qLwogewotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsIE5VTEx9OwotICAgIHBhdGhfdCBwYXRoOwotICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMDsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOwotCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsc3RhdCI7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOmxzdGF0Iiwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKLSNpZmRlZiBIQVZFX0ZTVEFUQVQKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkCi0jZW5kaWYKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuX3ZhbHVlID0gcG9zaXhfZG9fc3RhdCgibHN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOwotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKKyAgICByZXR1cm4gcG9zaXhfZG9fc3RhdCgibHN0YXQiLCBwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CiB9CiAKIAotI2lmZGVmIEhBVkVfRkFDQ0VTU0FUCi0gICAgI2RlZmluZSBPU19BQ0NFU1NfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCi0jZWxzZQotICAgICNkZWZpbmUgT1NfQUNDRVNTX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX3VuYXZhaWxhYmxlCi0jZW5kaWYKIC8qW2NsaW5pYyBpbnB1dF0KLW9zLmFjY2Vzcworb3MuYWNjZXNzIC0+IGJvb2wKIAogICAgIHBhdGg6IHBhdGhfdChhbGxvd19mZD1UcnVlKQogICAgICAgICBQYXRoIHRvIGJlIHRlc3RlZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC4KQEAgLTI1NzgsNyArMjUyNiw3IEBACiAKICAgICAqCiAKLSAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgZGlyX2ZkIDogZGlyX2ZkKHJlcXVpcmVzPSdmYWNjZXNzYXQnKSA9IE5vbmUKICAgICAgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAogICAgICAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQKICAgICAgICAgZGlyZWN0b3J5LgpAQCAtMjYwNSw3MyArMjU1MywxMiBAQAogCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihvc19hY2Nlc3NfX2RvY19fLAotImFjY2VzcygkbW9kdWxlLCAvLCBwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcbiIKLSIgICAgICAgZm9sbG93X3N5bWxpbmtzPVRydWUpXG4iCi0iLS1cbiIKLSJcbiIKLSJVc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLlxuIgotIlxuIgotIiAgcGF0aFxuIgotIiAgICBQYXRoIHRvIGJlIHRlc3RlZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC5cbiIKLSIgIG1vZGVcbiIKLSIgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsXG4iCi0iICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suXG4iCi0iICBkaXJfZmRcbiIKLSIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgotIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXRcbiIKLSIgICAgZGlyZWN0b3J5LlxuIgotIiAgZWZmZWN0aXZlX2lkc1xuIgotIiAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2ZcbiIKLSIgICAgdGhlIHJlYWwgdWlkL2dpZC5cbiIKLSIgIGZvbGxvd19zeW1saW5rc1xuIgotIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgotIiAgICBhY2Nlc3Mgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCi0iICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKLSJcbiIKLSJkaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgotIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgotIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKLSJcbiIKLSJOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXNcbiIKLSIgIHJvdXRpbmUgY2FuIGJlIHVzZWQgaW4gYSBzdWlkL3NnaWQgZW52aXJvbm1lbnQgdG8gdGVzdCBpZiB0aGUgaW52b2tpbmcgdXNlclxuIgotIiAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLiIpOwotCi0jZGVmaW5lIE9TX0FDQ0VTU19NRVRIT0RERUYgICAgXAotICAgIHsiYWNjZXNzIiwgKFB5Q0Z1bmN0aW9uKW9zX2FjY2VzcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2FjY2Vzc19fZG9jX199LAotCi1zdGF0aWMgUHlPYmplY3QgKgotb3NfYWNjZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSwgaW50IGRpcl9mZCwgaW50IGVmZmVjdGl2ZV9pZHMsIGludCBmb2xsb3dfc3ltbGlua3MpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotb3NfYWNjZXNzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorc3RhdGljIGludAorb3NfYWNjZXNzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSwgaW50IGRpcl9mZCwKKyAgICAgICAgICAgICAgIGludCBlZmZlY3RpdmVfaWRzLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWNmODQxNThiYzkwYjFhNzcgaW5wdXQ9Yjc1YTc1Njc5N2FmNDVlY10qLwogewotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRpcl9mZCIsICJlZmZlY3RpdmVfaWRzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwotICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImFjY2VzcyIsIDAsIDEpOwotICAgIGludCBtb2RlOwotICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKLSAgICBpbnQgZWZmZWN0aXZlX2lkcyA9IDA7Ci0gICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCi0gICAgICAgICJPJml8JE8mcHA6YWNjZXNzIiwgX2tleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLCBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZlZmZlY3RpdmVfaWRzLCAmZm9sbG93X3N5bWxpbmtzKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IG9zX2FjY2Vzc19pbXBsKG1vZHVsZSwgJnBhdGgsIG1vZGUsIGRpcl9mZCwgZWZmZWN0aXZlX2lkcywgZm9sbG93X3N5bWxpbmtzKTsKLQotZXhpdDoKLSAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLQotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1vc19hY2Nlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkLCBpbnQgZWZmZWN0aXZlX2lkcywgaW50IGZvbGxvd19zeW1saW5rcykKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNmVkNGYxNTFiZTlkZjBmIGlucHV0PTJlMmU3NTk0MzcxZjViN2VdKi8KLXsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgcmV0dXJuX3ZhbHVlOwogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIERXT1JEIGF0dHI7CkBAIC0yNjgxLDExICsyNTY4LDExIEBACiAKICNpZm5kZWYgSEFWRV9GQUNDRVNTQVQKICAgICBpZiAoZm9sbG93X3N5bWxpbmtzX3NwZWNpZmllZCgiYWNjZXNzIiwgZm9sbG93X3N5bWxpbmtzKSkKLSAgICAgICAgZ290byBleGl0OworICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoZWZmZWN0aXZlX2lkcykgewogICAgICAgICBhcmd1bWVudF91bmF2YWlsYWJsZV9lcnJvcigiYWNjZXNzIiwgImVmZmVjdGl2ZV9pZHMiKTsKLSAgICAgICAgZ290byBleGl0OworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogI2VuZGlmCiAKQEAgLTI3MDUsMTEgKzI1OTIsMTAgQEAKICAgICAgKiAgICAgKiBvciBpdCdzIGEgZGlyZWN0b3J5LgogICAgICAqIChEaXJlY3RvcmllcyBjYW5ub3QgYmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MuKQogICAgICovCi0gICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKAotICAgICAgICAoYXR0ciAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgJiYKKyAgICByZXR1cm5fdmFsdWUgPSAoYXR0ciAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgJiYKICAgICAgICAgICAgICghKG1vZGUgJiAyKSB8fAogICAgICAgICAgICAgIShhdHRyICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpIHx8Ci0gICAgICAgICAgICAoYXR0ciAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpKTsKKyAgICAgICAgICAgIChhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSk7CiAjZWxzZQogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMjcyOCwxMiArMjYxNCw5IEBACiAjZW5kaWYKICAgICAgICAgcmVzdWx0ID0gYWNjZXNzKHBhdGgtPm5hcnJvdywgbW9kZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoIXJlc3VsdCk7CisgICAgcmV0dXJuX3ZhbHVlID0gIXJlc3VsdDsKICNlbmRpZgogCi0jaWZuZGVmIEhBVkVfRkFDQ0VTU0FUCi1leGl0OgotI2VuZGlmCiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIApAQCAtMjc1Miw3ICsyNjM1LDYgQEAKIAogCiAjaWZkZWYgSEFWRV9UVFlOQU1FCi0KIC8qW2NsaW5pYyBpbnB1dF0KIG9zLnR0eW5hbWUgLT4gRGVjb2RlRlNEZWZhdWx0CiAKQEAgLTI3NjQsNDQgKzI2NDYsOSBAQAogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvICdmZCcuCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihvc190dHluYW1lX19kb2NfXywKLSJ0dHluYW1lKCRtb2R1bGUsIGZkLCAvKVxuIgotIi0tXG4iCi0iXG4iCi0iUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvIFwnZmRcJy5cbiIKLSJcbiIKLSIgIGZkXG4iCi0iICAgIEludGVnZXIgZmlsZSBkZXNjcmlwdG9yIGhhbmRsZS4iKTsKLQotI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRiAgICBcCi0gICAgeyJ0dHluYW1lIiwgKFB5Q0Z1bmN0aW9uKW9zX3R0eW5hbWUsIE1FVEhfVkFSQVJHUywgb3NfdHR5bmFtZV9fZG9jX199LAotCiBzdGF0aWMgY2hhciAqCi1vc190dHluYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGZkKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLW9zX3R0eW5hbWUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgaW50IGZkOwotICAgIGNoYXIgKl9yZXR1cm5fdmFsdWU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgImk6dHR5bmFtZSIsCi0gICAgICAgICZmZCkpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICBfcmV0dXJuX3ZhbHVlID0gb3NfdHR5bmFtZV9pbXBsKG1vZHVsZSwgZmQpOwotICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICByZXR1cm5fdmFsdWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KF9yZXR1cm5fdmFsdWUpOwotCi1leGl0OgotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyBjaGFyICoKLW9zX3R0eW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgZmQpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Y2VlN2JjNGNmZmVjMDFhMiBpbnB1dD01ZjcyY2E4M2U3NmIzYjQ1XSovCitvc190dHluYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWVkMTZhZDIxNmQ4MTM1OTEgaW5wdXQ9NWY3MmNhODNlNzZiM2I0NV0qLwogewogICAgIGNoYXIgKnJldDsKIApAQCAtMjgxMCwxNyArMjY1NywxOCBAQAogICAgICAgICBwb3NpeF9lcnJvcigpOwogICAgIHJldHVybiByZXQ7CiB9Ci0jZWxzZQotI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRgogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0NURVJNSUQKLVB5RG9jX1NUUlZBUihwb3NpeF9jdGVybWlkX19kb2NfXywKLSJjdGVybWlkKCkgLT4gc3RyaW5nXG5cblwKLVJldHVybiB0aGUgbmFtZSBvZiB0aGUgY29udHJvbGxpbmcgdGVybWluYWwgZm9yIHRoaXMgcHJvY2Vzcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmN0ZXJtaWQKKworUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBmb3IgdGhpcyBwcm9jZXNzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfY3Rlcm1pZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK29zX2N0ZXJtaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAyZjAxN2U2YzllNjIwZGIgaW5wdXQ9M2I4N2ZkZDUyNTU2MzgyZF0qLwogewogICAgIGNoYXIgKnJldDsKICAgICBjaGFyIGJ1ZmZlcltMX2N0ZXJtaWRdOwpAQCAtMjgzNCwxMDYgKzI2ODIsMTEyIEBACiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGJ1ZmZlcik7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0NURVJNSUQgKi8KIAotUHlEb2NfU1RSVkFSKHBvc2l4X2NoZGlyX19kb2NfXywKLSJjaGRpcihwYXRoKVxuXG5cCi1DaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBwYXRoLlxuXAotXG5cCi1wYXRoIG1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLlxuXAotT24gc29tZSBwbGF0Zm9ybXMsIHBhdGggbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuXAotICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmNoZGlyCisKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9J1BBVEhfSEFWRV9GQ0hESVInKQorCitDaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBwYXRoLgorCitwYXRoIG1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLgorT24gc29tZSBwbGF0Zm9ybXMsIHBhdGggbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgorICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9jaGRpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19jaGRpcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zYmU2NDAwZWVlMjZlYWFlIGlucHV0PTFhNGExNWI0ZDEyY2IxNWRdKi8KIHsKLSAgICBwYXRoX3QgcGF0aDsKICAgICBpbnQgcmVzdWx0OwotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07Ci0KLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNoZGlyIjsKLSNpZmRlZiBIQVZFX0ZDSERJUgotICAgIHBhdGguYWxsb3dfZmQgPSAxOwotI2VuZGlmCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyY6Y2hkaXIiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoCi0gICAgICAgICkpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAocGF0aC53aWRlKQotICAgICAgICByZXN1bHQgPSB3aW4zMl93Y2hkaXIocGF0aC53aWRlKTsKKyAgICBpZiAocGF0aC0+d2lkZSkKKyAgICAgICAgcmVzdWx0ID0gd2luMzJfd2NoZGlyKHBhdGgtPndpZGUpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gd2luMzJfY2hkaXIocGF0aC5uYXJyb3cpOworICAgICAgICByZXN1bHQgPSB3aW4zMl9jaGRpcihwYXRoLT5uYXJyb3cpOwogICAgIHJlc3VsdCA9ICFyZXN1bHQ7IC8qIG9uIHVuaXgsIHN1Y2Nlc3MgPSAwLCBvbiB3aW5kb3dzLCBzdWNjZXNzID0gITAgKi8KICNlbHNlCiAjaWZkZWYgSEFWRV9GQ0hESVIKLSAgICBpZiAocGF0aC5mZCAhPSAtMSkKLSAgICAgICAgcmVzdWx0ID0gZmNoZGlyKHBhdGguZmQpOworICAgIGlmIChwYXRoLT5mZCAhPSAtMSkKKyAgICAgICAgcmVzdWx0ID0gZmNoZGlyKHBhdGgtPmZkKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gY2hkaXIocGF0aC5uYXJyb3cpOworICAgICAgICByZXN1bHQgPSBjaGRpcihwYXRoLT5uYXJyb3cpOwogI2VuZGlmCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7Ci0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CiAgICAgfQogCi0gICAgcmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0KLWV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCisKICNpZmRlZiBIQVZFX0ZDSERJUgotUHlEb2NfU1RSVkFSKHBvc2l4X2ZjaGRpcl9fZG9jX18sCi0iZmNoZGlyKGZkKVxuXG5cCi1DaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLiAgZmQgbXVzdCBiZVxuXAotb3BlbmVkIG9uIGEgZGlyZWN0b3J5LCBub3QgYSBmaWxlLiAgRXF1aXZhbGVudCB0byBvcy5jaGRpcihmZCkuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5mY2hkaXIKKworICAgIGZkOiBmaWxkZXMKKworQ2hhbmdlIHRvIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGdpdmVuIGZpbGUgZGVzY3JpcHRvci4KKworZmQgbXVzdCBiZSBvcGVuZWQgb24gYSBkaXJlY3RvcnksIG5vdCBhIGZpbGUuCitFcXVpdmFsZW50IHRvIG9zLmNoZGlyKGZkKS4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZmNoZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmRvYmopCitvc19mY2hkaXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDJlMDY0ZWM0ZGMwMGFiMCBpbnB1dD0xOGU4MTY0NzlhMmZhOTg1XSovCiB7Ci0gICAgcmV0dXJuIHBvc2l4X2ZpbGRlcyhmZG9iaiwgZmNoZGlyKTsKKyAgICByZXR1cm4gcG9zaXhfZmlsZGVzX2ZkKGZkLCBmY2hkaXIpOwogfQogI2VuZGlmIC8qIEhBVkVfRkNIRElSICovCiAKIAotUHlEb2NfU1RSVkFSKHBvc2l4X2NobW9kX19kb2NfXywKLSJjaG1vZChwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cblwKLUNoYW5nZSB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIG9mIGEgZmlsZS5cblwKLVxuXAotcGF0aCBtYXkgYWx3YXlzIGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZy5cblwKLU9uIHNvbWUgcGxhdGZvcm1zLCBwYXRoIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLSAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgYW4gZXhjZXB0aW9uLlxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCBjaG1vZCB3aWxsIG1vZGlmeSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1JdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuXAotICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLWRpcl9mZCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cblwKLSAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5jaG1vZAorCisgICAgcGF0aDogcGF0aF90KGFsbG93X2ZkPSdQQVRIX0hBVkVfRkNITU9EJykKKyAgICAgICAgUGF0aCB0byBiZSBtb2RpZmllZC4gIE1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyIG9yIGJ5dGVzLgorICAgICAgICBPbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworICAgIG1vZGU6IGludAorICAgICAgICBPcGVyYXRpbmctc3lzdGVtIG1vZGUgYml0ZmllbGQuCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQocmVxdWlyZXM9J2ZjaG1vZGF0JykgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0CisgICAgICAgIGRpcmVjdG9yeS4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgY2htb2Qgd2lsbCBtb2RpZnkgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgICAgICAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitDaGFuZ2UgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBvZiBhIGZpbGUuCisKK0l0IGlzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzCisgIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgorZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLgorICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfY2htb2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfY2htb2RfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkLAorICAgICAgICAgICAgICBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVjZjZhOTQ5MTVjYzdiZmYgaW5wdXQ9N2YxNjE4ZTVlMTVjYzE5Nl0qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIGludCBtb2RlOwotICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKLSAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKICAgICBpbnQgcmVzdWx0OwotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgRFdPUkQgYXR0cjsKQEAgLTI5NDMsMzMgKzI3OTcsMTcgQEAKICAgICBpbnQgZmNobW9kYXRfbm9mb2xsb3dfdW5zdXBwb3J0ZWQgPSAwOwogI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNobW9kIjsKLSNpZmRlZiBIQVZFX0ZDSE1PRAotICAgIHBhdGguYWxsb3dfZmQgPSAxOwotI2VuZGlmCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpfCRPJnA6Y2htb2QiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotICAgICAgICAmbW9kZSwKLSNpZmRlZiBIQVZFX0ZDSE1PREFUCi0gICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQsCi0jZWxzZQotICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQsCi0jZW5kaWYKLSAgICAgICAgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAjaWYgIShkZWZpbmVkKEhBVkVfRkNITU9EQVQpIHx8IGRlZmluZWQoSEFWRV9MQ0hNT0QpKQogICAgIGlmIChmb2xsb3dfc3ltbGlua3Nfc3BlY2lmaWVkKCJjaG1vZCIsIGZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgaWYgKHBhdGgud2lkZSkKLSAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLndpZGUpOworICAgIGlmIChwYXRoLT53aWRlKQorICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgtPndpZGUpOwogICAgIGVsc2UKLSAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLm5hcnJvdyk7CisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC0+bmFycm93KTsKICAgICBpZiAoYXR0ciA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykKICAgICAgICAgcmVzdWx0ID0gMDsKICAgICBlbHNlIHsKQEAgLTI5NzcsMjcgKzI4MTUsMjYgQEAKICAgICAgICAgICAgIGF0dHIgJj0gfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhdHRyIHw9IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwotICAgICAgICBpZiAocGF0aC53aWRlKQotICAgICAgICAgICAgcmVzdWx0ID0gU2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgud2lkZSwgYXR0cik7CisgICAgICAgIGlmIChwYXRoLT53aWRlKQorICAgICAgICAgICAgcmVzdWx0ID0gU2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgtPndpZGUsIGF0dHIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBTZXRGaWxlQXR0cmlidXRlc0EocGF0aC5uYXJyb3csIGF0dHIpOworICAgICAgICAgICAgcmVzdWx0ID0gU2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgtPm5hcnJvdywgYXR0cik7CiAgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKLSAgICAgICAgZ290byBleGl0OworICAgICAgICByZXR1cm4gcGF0aF9lcnJvcihwYXRoKTsKICAgICB9CiAjZWxzZSAvKiBNU19XSU5ET1dTICovCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIEhBVkVfRkNITU9ECi0gICAgaWYgKHBhdGguZmQgIT0gLTEpCi0gICAgICAgIHJlc3VsdCA9IGZjaG1vZChwYXRoLmZkLCBtb2RlKTsKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpCisgICAgICAgIHJlc3VsdCA9IGZjaG1vZChwYXRoLT5mZCwgbW9kZSk7CiAgICAgZWxzZQogI2VuZGlmCiAjaWZkZWYgSEFWRV9MQ0hNT0QKICAgICBpZiAoKCFmb2xsb3dfc3ltbGlua3MpICYmIChkaXJfZmQgPT0gREVGQVVMVF9ESVJfRkQpKQotICAgICAgICByZXN1bHQgPSBsY2htb2QocGF0aC5uYXJyb3csIG1vZGUpOworICAgICAgICByZXN1bHQgPSBsY2htb2QocGF0aC0+bmFycm93LCBtb2RlKTsKICAgICBlbHNlCiAjZW5kaWYKICNpZmRlZiBIQVZFX0ZDSE1PREFUCkBAIC0zMDEyLDcgKzI4NDksNyBAQAogICAgICAgICAgKiBzdXBwb3J0IGRpcl9mZCBhbmQgZm9sbG93X3N5bWxpbmtzPUZhbHNlLiAgKEhvcGVmdWxseS4pCiAgICAgICAgICAqIFVudGlsIHRoZW4sIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aGF0IGV4Y2VwdGlvbiB3ZSByYWlzZS4KICAgICAgICAgICovCi0gICAgICAgIHJlc3VsdCA9IGZjaG1vZGF0KGRpcl9mZCwgcGF0aC5uYXJyb3csIG1vZGUsCisgICAgICAgIHJlc3VsdCA9IGZjaG1vZGF0KGRpcl9mZCwgcGF0aC0+bmFycm93LCBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfc3ltbGlua3MgPyAwIDogQVRfU1lNTElOS19OT0ZPTExPVyk7CiAgICAgICAgIC8qCiAgICAgICAgICAqIEJ1dCB3YWl0ISAgV2UgY2FuJ3QgdGhyb3cgdGhlIGV4Y2VwdGlvbiB3aXRob3V0IGFsbG93aW5nIHRocmVhZHMsCkBAIC0zMDI1LDcgKzI4NjIsNyBAQAogICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gY2htb2QocGF0aC5uYXJyb3csIG1vZGUpOworICAgICAgICByZXN1bHQgPSBjaG1vZChwYXRoLT5uYXJyb3csIG1vZGUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7CkBAIC0zMDM5LDI3MiArMjg3NiwyODkgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwotICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yKHBhdGgpOwogICAgIH0KICNlbmRpZgogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybl92YWx1ZSA9IFB5X05vbmU7Ci1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCiAjaWZkZWYgSEFWRV9GQ0hNT0QKLVB5RG9jX1NUUlZBUihwb3NpeF9mY2htb2RfX2RvY19fLAotImZjaG1vZChmZCwgbW9kZSlcblxuXAotQ2hhbmdlIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgb2YgdGhlIGZpbGUgZ2l2ZW4gYnkgZmlsZVxuXAotZGVzY3JpcHRvciBmZC4gIEVxdWl2YWxlbnQgdG8gb3MuY2htb2QoZmQsIG1vZGUpLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuZmNobW9kCisKKyAgICBmZDogaW50CisgICAgbW9kZTogaW50CisKK0NoYW5nZSB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIG9mIHRoZSBmaWxlIGdpdmVuIGJ5IGZpbGUgZGVzY3JpcHRvciBmZC4KKworRXF1aXZhbGVudCB0byBvcy5jaG1vZChmZCwgbW9kZSkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9mY2htb2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfZmNobW9kX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBpbnQgbW9kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hZmQ5YmMwNWI0ZTQyNmIzIGlucHV0PThhYjExOTc1Y2EwMWVlNWJdKi8KIHsKLSAgICBpbnQgZmQsIG1vZGUsIHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOmZjaG1vZCIsICZmZCwgJm1vZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gZmNobW9kKGZkLCBtb2RlKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICBpbnQgcmVzOworICAgIGludCBhc3luY19lcnIgPSAwOworCisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGZjaG1vZChmZCwgbW9kZSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAocmVzICE9IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOworCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9GQ0hNT0QgKi8KIAorCiAjaWZkZWYgSEFWRV9MQ0hNT0QKLVB5RG9jX1NUUlZBUihwb3NpeF9sY2htb2RfX2RvY19fLAotImxjaG1vZChwYXRoLCBtb2RlKVxuXG5cCi1DaGFuZ2UgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBvZiBhIGZpbGUuIElmIHBhdGggaXMgYSBzeW1saW5rLCB0aGlzXG5cCi1hZmZlY3RzIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiB0aGUgdGFyZ2V0LlxuXAotRXF1aXZhbGVudCB0byBjaG1vZChwYXRoLCBtb2RlLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpLiIpOworLypbY2xpbmljIGlucHV0XQorb3MubGNobW9kCisKKyAgICBwYXRoOiBwYXRoX3QKKyAgICBtb2RlOiBpbnQKKworQ2hhbmdlIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgb2YgYSBmaWxlLCB3aXRob3V0IGZvbGxvd2luZyBzeW1ib2xpYyBsaW5rcy4KKworSWYgcGF0aCBpcyBhIHN5bWxpbmssIHRoaXMgYWZmZWN0cyB0aGUgbGluayBpdHNlbGYgcmF0aGVyIHRoYW4gdGhlIHRhcmdldC4KK0VxdWl2YWxlbnQgdG8gY2htb2QocGF0aCwgbW9kZSwgZm9sbG93X3N5bWxpbmtzPUZhbHNlKS4iCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9sY2htb2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfbGNobW9kX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wODIzNDQwMjJiNTFhMWQ1IGlucHV0PTkwYzU2NjNjNzQ2NWQyNGZdKi8KIHsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBpbnQgaTsKICAgICBpbnQgcmVzOwotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNobW9kIjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpsY2htb2QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaG1vZChwYXRoLm5hcnJvdywgaSk7CisgICAgcmVzID0gbGNobW9kKHBhdGgtPm5hcnJvdywgbW9kZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKLSAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hNT0QgKi8KIAogCiAjaWZkZWYgSEFWRV9DSEZMQUdTCi1QeURvY19TVFJWQVIocG9zaXhfY2hmbGFnc19fZG9jX18sCi0iY2hmbGFncyhwYXRoLCBmbGFncywgKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cblwKLVNldCBmaWxlIGZsYWdzLlxuXAotXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgY2hmbGFncyB3aWxsIGNoYW5nZSBmbGFncyBvbiB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGVcblwKLSAgZmlsZSB0aGUgbGluayBwb2ludHMgdG8uXG5cCi1mb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgaXQgaXNcblwKLXVuYXZhaWxhYmxlLCB1c2luZyBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmNoZmxhZ3MKKworICAgIHBhdGg6IHBhdGhfdAorICAgIGZsYWdzOiB1bnNpZ25lZF9sb25nKGJpdHdpc2U9VHJ1ZSkKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2w9VHJ1ZQorCitTZXQgZmlsZSBmbGFncy4KKworSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljCisgIGxpbmssIGNoZmxhZ3Mgd2lsbCBjaGFuZ2UgZmxhZ3Mgb24gdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlCisgIGZpbGUgdGhlIGxpbmsgcG9pbnRzIHRvLgorZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS4gIElmIGl0IGlzCit1bmF2YWlsYWJsZSwgdXNpbmcgaXQgd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2NoZmxhZ3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfY2hmbGFnc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgdW5zaWduZWQgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg1NTcxYzY3Mzc2NjFjZTkgaW5wdXQ9MDMyN2UyOWZlYjg3NjIzNl0qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7CiAgICAgaW50IHJlc3VsdDsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmbGFncyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKLQotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hmbGFncyI7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZrfCRpOmNoZmxhZ3MiLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MsICZmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogI2lmbmRlZiBIQVZFX0xDSEZMQUdTCiAgICAgaWYgKGZvbGxvd19zeW1saW5rc19zcGVjaWZpZWQoImNoZmxhZ3MiLCBmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgSEFWRV9MQ0hGTEFHUwogICAgIGlmICghZm9sbG93X3N5bWxpbmtzKQotICAgICAgICByZXN1bHQgPSBsY2hmbGFncyhwYXRoLm5hcnJvdywgZmxhZ3MpOworICAgICAgICByZXN1bHQgPSBsY2hmbGFncyhwYXRoLT5uYXJyb3csIGZsYWdzKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gY2hmbGFncyhwYXRoLm5hcnJvdywgZmxhZ3MpOworICAgICAgICByZXN1bHQgPSBjaGZsYWdzKHBhdGgtPm5hcnJvdywgZmxhZ3MpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQorICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yKHBhdGgpOwogCi0gICAgcmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0KLWV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfQ0hGTEFHUyAqLwogCisKICNpZmRlZiBIQVZFX0xDSEZMQUdTCi1QeURvY19TVFJWQVIocG9zaXhfbGNoZmxhZ3NfX2RvY19fLAotImxjaGZsYWdzKHBhdGgsIGZsYWdzKVxuXG5cCi1TZXQgZmlsZSBmbGFncy5cblwKLVRoaXMgZnVuY3Rpb24gd2lsbCBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLlxuXAotRXF1aXZhbGVudCB0byBjaGZsYWdzKHBhdGgsIGZsYWdzLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpLiIpOworLypbY2xpbmljIGlucHV0XQorb3MubGNoZmxhZ3MKKworICAgIHBhdGg6IHBhdGhfdAorICAgIGZsYWdzOiB1bnNpZ25lZF9sb25nKGJpdHdpc2U9VHJ1ZSkKKworU2V0IGZpbGUgZmxhZ3MuCisKK1RoaXMgZnVuY3Rpb24gd2lsbCBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLgorRXF1aXZhbGVudCB0byBjaGZsYWdzKHBhdGgsIGZsYWdzLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbGNoZmxhZ3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfbGNoZmxhZ3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzBhZTk1ODY5NWMwNzMxNiBpbnB1dD1mOWY4MmVhOGI1ODVjYTlkXSovCiB7Ci0gICAgcGF0aF90IHBhdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBpbnQgcmVzOwotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNoZmxhZ3MiOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZrOmxjaGZsYWdzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmZmxhZ3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNoZmxhZ3MocGF0aC5uYXJyb3csIGZsYWdzKTsKKyAgICByZXMgPSBsY2hmbGFncyhwYXRoLT5uYXJyb3csIGZsYWdzKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwotICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CiAgICAgfQotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hGTEFHUyAqLwogCisKICNpZmRlZiBIQVZFX0NIUk9PVAotUHlEb2NfU1RSVkFSKHBvc2l4X2Nocm9vdF9fZG9jX18sCi0iY2hyb290KHBhdGgpXG5cblwKLUNoYW5nZSByb290IGRpcmVjdG9yeSB0byBwYXRoLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuY2hyb290CisgICAgcGF0aDogcGF0aF90CisKK0NoYW5nZSByb290IGRpcmVjdG9yeSB0byBwYXRoLgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9jaHJvb3QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfY2hyb290X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRlODBiZWZjNzYzYTQ0NzUgaW5wdXQ9MTQ4MjI5NjU2NTJjM2RjM10qLwogewotICAgIHJldHVybiBwb3NpeF8xc3RyKCJjaHJvb3QiLCBhcmdzLCAiTyY6Y2hyb290IiwgY2hyb290KTsKKyAgICBpbnQgcmVzOworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXMgPSBjaHJvb3QocGF0aC0+bmFycm93KTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gcGF0aF9lcnJvcihwYXRoKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfQ0hST09UICovCisKIAogI2lmZGVmIEhBVkVfRlNZTkMKLVB5RG9jX1NUUlZBUihwb3NpeF9mc3luY19fZG9jX18sCi0iZnN5bmMoZmlsZGVzKVxuXG5cCi1mb3JjZSB3cml0ZSBvZiBmaWxlIHdpdGggZmlsZWRlc2NyaXB0b3IgdG8gZGlzay4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmZzeW5jCisKKyAgICBmZDogZmlsZGVzCisKK0ZvcmNlIHdyaXRlIG9mIGZkIHRvIGRpc2suCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9mc3luYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZkb2JqKQorb3NfZnN5bmNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NGExMGQ3NzNmNTJiMzU4NCBpbnB1dD0yMWMzNjQ1YzA1Njk2N2YyXSovCiB7Ci0gICAgcmV0dXJuIHBvc2l4X2ZpbGRlcyhmZG9iaiwgZnN5bmMpOworICAgIHJldHVybiBwb3NpeF9maWxkZXNfZmQoZmQsIGZzeW5jKTsKIH0KICNlbmRpZiAvKiBIQVZFX0ZTWU5DICovCiAKKwogI2lmZGVmIEhBVkVfU1lOQwotUHlEb2NfU1RSVkFSKHBvc2l4X3N5bmNfX2RvY19fLAotInN5bmMoKVxuXG5cCi1Gb3JjZSB3cml0ZSBvZiBldmVyeXRoaW5nIHRvIGRpc2suIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5zeW5jCisKK0ZvcmNlIHdyaXRlIG9mIGV2ZXJ5dGhpbmcgdG8gZGlzay4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3N5bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19zeW5jX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNzk2YjFmMDgxOGNkNzFjIGlucHV0PTg0NzQ5ZmU1ZTliNDA0ZmZdKi8KIHsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc3luYygpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1NZTkMgKi8KKwogCiAjaWZkZWYgSEFWRV9GREFUQVNZTkMKLQogI2lmZGVmIF9faHB1eAogZXh0ZXJuIGludCBmZGF0YXN5bmMoaW50KTsgLyogT24gSFAtVVgsIGluIGxpYmMgYnV0IG5vdCBpbiB1bmlzdGQuaCAqLwogI2VuZGlmCiAKLVB5RG9jX1NUUlZBUihwb3NpeF9mZGF0YXN5bmNfX2RvY19fLAotImZkYXRhc3luYyhmaWxkZXMpXG5cblwKLWZvcmNlIHdyaXRlIG9mIGZpbGUgd2l0aCBmaWxlZGVzY3JpcHRvciB0byBkaXNrLlxuXAotIGRvZXMgbm90IGZvcmNlIHVwZGF0ZSBvZiBtZXRhZGF0YS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmZkYXRhc3luYworCisgICAgZmQ6IGZpbGRlcworCitGb3JjZSB3cml0ZSBvZiBmZCB0byBkaXNrIHdpdGhvdXQgZm9yY2luZyB1cGRhdGUgb2YgbWV0YWRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9mZGF0YXN5bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmZG9iaikKK29zX2ZkYXRhc3luY19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iNGI5Njk4YjVkN2UyNmRkIGlucHV0PWJjNzQ3OTFlZTU0ZGQyOTFdKi8KIHsKLSAgICByZXR1cm4gcG9zaXhfZmlsZGVzKGZkb2JqLCBmZGF0YXN5bmMpOworICAgIHJldHVybiBwb3NpeF9maWxkZXNfZmQoZmQsIGZkYXRhc3luYyk7CiB9CiAjZW5kaWYgLyogSEFWRV9GREFUQVNZTkMgKi8KIAogCiAjaWZkZWYgSEFWRV9DSE9XTgotUHlEb2NfU1RSVkFSKHBvc2l4X2Nob3duX19kb2NfXywKLSJjaG93bihwYXRoLCB1aWQsIGdpZCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuXG5cCi1DaGFuZ2UgdGhlIG93bmVyIGFuZCBncm91cCBpZCBvZiBwYXRoIHRvIHRoZSBudW1lcmljIHVpZCBhbmQgZ2lkLlxuXAotXG5cCi1wYXRoIG1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLlxuXAotT24gc29tZSBwbGF0Zm9ybXMsIHBhdGggbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuXAotICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljXG5cCi0gIGxpbmssIGNob3duIHdpbGwgbW9kaWZ5IHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlIHRoZVxuXAotICBsaW5rIHBvaW50cyB0by5cblwKLUl0IGlzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzXG5cCi0gIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuXAotZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuXAotICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmNob3duCisKKyAgICBwYXRoIDogcGF0aF90KGFsbG93X2ZkPSdQQVRIX0hBVkVfRkNIT1dOJykKKyAgICAgICAgUGF0aCB0byBiZSBleGFtaW5lZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC4KKworICAgIHVpZDogdWlkX3QKKworICAgIGdpZDogZ2lkX3QKKworICAgICoKKworICAgIGRpcl9mZCA6IGRpcl9mZChyZXF1aXJlcz0nZmNob3duYXQnKSA9IE5vbmUKKyAgICAgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAorICAgICAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQKKyAgICAgICAgZGlyZWN0b3J5LgorCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgICAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLAorICAgICAgICBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICAgICAgICB0aGUgbGluayBwb2ludHMgdG8uCisKK0NoYW5nZSB0aGUgb3duZXIgYW5kIGdyb3VwIGlkIG9mIHBhdGggdG8gdGhlIG51bWVyaWMgdWlkIGFuZCBnaWQuXAorCitwYXRoIG1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLgorT24gc29tZSBwbGF0Zm9ybXMsIHBhdGggbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgorICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uCitJZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAorICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LgorSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljCisgIGxpbmssIGNob3duIHdpbGwgbW9kaWZ5IHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlIHRoZQorICBsaW5rIHBvaW50cyB0by4KK0l0IGlzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzCisgIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgorZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLgorICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfY2hvd24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfY2hvd25faW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLAorICAgICAgICAgICAgICBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRiZWFkYWIwZGI1ZjcwY2QgaW5wdXQ9YTYxY2MzNTU3NDgxNGQ1ZF0qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIHVpZF90IHVpZDsKLSAgICBnaWRfdCBnaWQ7Ci0gICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOwotICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOwogICAgIGludCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAidWlkIiwgImdpZCIsICJkaXJfZmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKLQotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hvd24iOwotI2lmZGVmIEhBVkVfRkNIT1dOCi0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mTyZ8JE8mcDpjaG93biIsIGtleXdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfVWlkX0NvbnZlcnRlciwgJnVpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfR2lkX0NvbnZlcnRlciwgJmdpZCwKLSNpZmRlZiBIQVZFX0ZDSE9XTkFUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZCwKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAjaWYgIShkZWZpbmVkKEhBVkVfTENIT1dOKSB8fCBkZWZpbmVkKEhBVkVfRkNIT1dOQVQpKQogICAgIGlmIChmb2xsb3dfc3ltbGlua3Nfc3BlY2lmaWVkKCJjaG93biIsIGZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKLSAgICBpZiAoZGlyX2ZkX2FuZF9mZF9pbnZhbGlkKCJjaG93biIsIGRpcl9mZCwgcGF0aC5mZCkgfHwKLSAgICAgICAgZmRfYW5kX2ZvbGxvd19zeW1saW5rc19pbnZhbGlkKCJjaG93biIsIHBhdGguZmQsIGZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoZGlyX2ZkX2FuZF9mZF9pbnZhbGlkKCJjaG93biIsIGRpcl9mZCwgcGF0aC0+ZmQpIHx8CisgICAgICAgIGZkX2FuZF9mb2xsb3dfc3ltbGlua3NfaW52YWxpZCgiY2hvd24iLCBwYXRoLT5mZCwgZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICNpZmRlZiBfX0FQUExFX18KICAgICAvKgpAQCAtMzMxNSwxMDIgKzMxNjksOTggQEAKICAgICAgKi8KICAgICBpZiAoKCFmb2xsb3dfc3ltbGlua3MpICYmIChsY2hvd24gPT0gTlVMTCkpIHsKICAgICAgICAgZm9sbG93X3N5bWxpbmtzX3NwZWNpZmllZCgiY2hvd24iLCBmb2xsb3dfc3ltbGlua3MpOwotICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNlbmRpZgogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIEhBVkVfRkNIT1dOCi0gICAgaWYgKHBhdGguZmQgIT0gLTEpCi0gICAgICAgIHJlc3VsdCA9IGZjaG93bihwYXRoLmZkLCB1aWQsIGdpZCk7CisgICAgaWYgKHBhdGgtPmZkICE9IC0xKQorICAgICAgICByZXN1bHQgPSBmY2hvd24ocGF0aC0+ZmQsIHVpZCwgZ2lkKTsKICAgICBlbHNlCiAjZW5kaWYKICNpZmRlZiBIQVZFX0xDSE9XTgogICAgIGlmICgoIWZvbGxvd19zeW1saW5rcykgJiYgKGRpcl9mZCA9PSBERUZBVUxUX0RJUl9GRCkpCi0gICAgICAgIHJlc3VsdCA9IGxjaG93bihwYXRoLm5hcnJvdywgdWlkLCBnaWQpOworICAgICAgICByZXN1bHQgPSBsY2hvd24ocGF0aC0+bmFycm93LCB1aWQsIGdpZCk7CiAgICAgZWxzZQogI2VuZGlmCiAjaWZkZWYgSEFWRV9GQ0hPV05BVAogICAgIGlmICgoZGlyX2ZkICE9IERFRkFVTFRfRElSX0ZEKSB8fCAoIWZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJlc3VsdCA9IGZjaG93bmF0KGRpcl9mZCwgcGF0aC5uYXJyb3csIHVpZCwgZ2lkLAorICAgICAgICByZXN1bHQgPSBmY2hvd25hdChkaXJfZmQsIHBhdGgtPm5hcnJvdywgdWlkLCBnaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd19zeW1saW5rcyA/IDAgOiBBVF9TWU1MSU5LX05PRk9MTE9XKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gY2hvd24ocGF0aC5uYXJyb3csIHVpZCwgZ2lkKTsKKyAgICAgICAgcmVzdWx0ID0gY2hvd24ocGF0aC0+bmFycm93LCB1aWQsIGdpZCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CiAKLSAgICByZXR1cm5fdmFsdWUgPSBQeV9Ob25lOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLQotZXhpdDoKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotICAgIHJldHVybiByZXR1cm5fdmFsdWU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9DSE9XTiAqLwogCisKICNpZmRlZiBIQVZFX0ZDSE9XTgotUHlEb2NfU1RSVkFSKHBvc2l4X2ZjaG93bl9fZG9jX18sCi0iZmNob3duKGZkLCB1aWQsIGdpZClcblxuXAotQ2hhbmdlIHRoZSBvd25lciBhbmQgZ3JvdXAgaWQgb2YgdGhlIGZpbGUgZ2l2ZW4gYnkgZmlsZSBkZXNjcmlwdG9yXG5cCi1mZCB0byB0aGUgbnVtZXJpYyB1aWQgYW5kIGdpZC4gIEVxdWl2YWxlbnQgdG8gb3MuY2hvd24oZmQsIHVpZCwgZ2lkKS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmZjaG93bgorCisgICAgZmQ6IGludAorICAgIHVpZDogdWlkX3QKKyAgICBnaWQ6IGdpZF90CisKK0NoYW5nZSB0aGUgb3duZXIgYW5kIGdyb3VwIGlkIG9mIHRoZSBmaWxlIHNwZWNpZmllZCBieSBmaWxlIGRlc2NyaXB0b3IuCisKK0VxdWl2YWxlbnQgdG8gb3MuY2hvd24oZmQsIHVpZCwgZ2lkKS4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZmNob3duKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX2ZjaG93bl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTdkMjFjYmQ1YTQzNTBhNiBpbnB1dD0zYWY1NDRiYTFiMTNhMGQ3XSovCiB7Ci0gICAgaW50IGZkOwotICAgIHVpZF90IHVpZDsKLSAgICBnaWRfdCBnaWQ7CiAgICAgaW50IHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPJk8mOmZjaG93biIsICZmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X1VpZF9Db252ZXJ0ZXIsICZ1aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9HaWRfQ29udmVydGVyLCAmZ2lkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGZjaG93bihmZCwgdWlkLCBnaWQpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIGludCBhc3luY19lcnIgPSAwOworCisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGZjaG93bihmZCwgdWlkLCBnaWQpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKHJlcyAhPSAwICYmIGVycm5vID09IEVJTlRSICYmICEoYXN5bmNfZXJyID0gUHlFcnJfQ2hlY2tTaWduYWxzKCkpKTsKKyAgICBpZiAocmVzICE9IDApCisgICAgICAgIHJldHVybiAoIWFzeW5jX2VycikgPyBwb3NpeF9lcnJvcigpIDogTlVMTDsKKwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfRkNIT1dOICovCiAKKwogI2lmZGVmIEhBVkVfTENIT1dOCi1QeURvY19TVFJWQVIocG9zaXhfbGNob3duX19kb2NfXywKLSJsY2hvd24ocGF0aCwgdWlkLCBnaWQpXG5cblwKLUNoYW5nZSB0aGUgb3duZXIgYW5kIGdyb3VwIGlkIG9mIHBhdGggdG8gdGhlIG51bWVyaWMgdWlkIGFuZCBnaWQuXG5cCi1UaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cblwKLUVxdWl2YWxlbnQgdG8gb3MuY2hvd24ocGF0aCwgdWlkLCBnaWQsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5sY2hvd24KKworICAgIHBhdGggOiBwYXRoX3QKKyAgICB1aWQ6IHVpZF90CisgICAgZ2lkOiBnaWRfdAorCitDaGFuZ2UgdGhlIG93bmVyIGFuZCBncm91cCBpZCBvZiBwYXRoIHRvIHRoZSBudW1lcmljIHVpZCBhbmQgZ2lkLgorCitUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4KK0VxdWl2YWxlbnQgdG8gb3MuY2hvd24ocGF0aCwgdWlkLCBnaWQsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9sY2hvd24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfbGNob3duX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNWVhZjZhZjQxMmZkZjJmIGlucHV0PWIxYzYwMTRkNTYzYTcxNjFdKi8KIHsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICB1aWRfdCB1aWQ7Ci0gICAgZ2lkX3QgZ2lkOwogICAgIGludCByZXM7Ci0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2hvd24iOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZPJk8mOmxjaG93biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X1VpZF9Db252ZXJ0ZXIsICZ1aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9HaWRfQ29udmVydGVyLCAmZ2lkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaG93bihwYXRoLm5hcnJvdywgdWlkLCBnaWQpOworICAgIHJlcyA9IGxjaG93bihwYXRoLT5uYXJyb3csIHVpZCwgZ2lkKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKSB7Ci0gICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwotICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CiAgICAgfQotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfTENIT1dOICovCiAKQEAgLTM0ODcsMTQ4ICszMzM3LDEyNSBAQAogICAgIHJldHVybiBvYmo7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXRjd2RfX2RvY19fLAotImdldGN3ZCgpIC0+IHBhdGhcblxuXAotUmV0dXJuIGEgdW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy5nZXRjd2QKKworUmV0dXJuIGEgdW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZ2V0Y3dkX3VuaWNvZGUoUHlPYmplY3QgKnNlbGYpCitvc19nZXRjd2RfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIxYmFkZmFlMmVhOTlkZGMgaW5wdXQ9ZjA2OTIxMWJiNzBlM2QzOV0qLwogewogICAgIHJldHVybiBwb3NpeF9nZXRjd2QoMCk7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXRjd2RiX19kb2NfXywKLSJnZXRjd2RiKCkgLT4gcGF0aFxuXG5cCi1SZXR1cm4gYSBieXRlcyBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy5nZXRjd2RiCisKK1JldHVybiBhIGJ5dGVzIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9nZXRjd2RfYnl0ZXMoUHlPYmplY3QgKnNlbGYpCitvc19nZXRjd2RiX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zZGQ0NzkwOTQ4MGU0ODI0IGlucHV0PWY2ZjZhMzc4ZGFkM2Q5Y2JdKi8KIHsKICAgICByZXR1cm4gcG9zaXhfZ2V0Y3dkKDEpOwogfQogCisKICNpZiAoKCFkZWZpbmVkKEhBVkVfTElOSykpICYmIGRlZmluZWQoTVNfV0lORE9XUykpCiAjZGVmaW5lIEhBVkVfTElOSyAxCiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfTElOSwotUHlEb2NfU1RSVkFSKHBvc2l4X2xpbmtfX2RvY19fLAotImxpbmsoc3JjLCBkc3QsICosIHNyY19kaXJfZmQ9Tm9uZSwgZHN0X2Rpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcblxuXAotQ3JlYXRlIGEgaGFyZCBsaW5rIHRvIGEgZmlsZS5cblwKLVxuXAotSWYgZWl0aGVyIHNyY19kaXJfZmQgb3IgZHN0X2Rpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZVxuXAotICBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksIGFuZCB0aGUgcmVzcGVjdGl2ZSBwYXRoIHN0cmluZyAoc3JjIG9yIGRzdClcblwKLSAgc2hvdWxkIGJlIHJlbGF0aXZlOyB0aGUgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHNyYyBpcyBhIHN5bWJvbGljXG5cCi0gIGxpbmssIGxpbmsgd2lsbCBjcmVhdGUgYSBsaW5rIHRvIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZVxuXAotICBmaWxlIHRoZSBsaW5rIHBvaW50cyB0by5cblwKLXNyY19kaXJfZmQsIGRzdF9kaXJfZmQsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyXG5cCi0gIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG5cCi0gIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CisvKltjbGluaWMgaW5wdXRdCisKK29zLmxpbmsKKworICAgIHNyYyA6IHBhdGhfdAorICAgIGRzdCA6IHBhdGhfdAorICAgICoKKyAgICBzcmNfZGlyX2ZkIDogZGlyX2ZkID0gTm9uZQorICAgIGRzdF9kaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorCitDcmVhdGUgYSBoYXJkIGxpbmsgdG8gYSBmaWxlLgorCitJZiBlaXRoZXIgc3JjX2Rpcl9mZCBvciBkc3RfZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlCisgIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwgYW5kIHRoZSByZXNwZWN0aXZlIHBhdGggc3RyaW5nIChzcmMgb3IgZHN0KQorICBzaG91bGQgYmUgcmVsYXRpdmU7IHRoZSBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS4KK0lmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2Ygc3JjIGlzIGEgc3ltYm9saWMKKyAgbGluaywgbGluayB3aWxsIGNyZWF0ZSBhIGxpbmsgdG8gdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlCisgIGZpbGUgdGhlIGxpbmsgcG9pbnRzIHRvLgorc3JjX2Rpcl9mZCwgZHN0X2Rpcl9mZCwgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIKKyAgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEKKyAgTm90SW1wbGVtZW50ZWRFcnJvci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2xpbmsoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfbGlua19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqc3JjLCBwYXRoX3QgKmRzdCwgaW50IHNyY19kaXJfZmQsCisgICAgICAgICAgICAgaW50IGRzdF9kaXJfZmQsIGludCBmb2xsb3dfc3ltbGlua3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2YwMGY2MDA3ZmQ1MjY5YSBpbnB1dD1iMDA5NWViYmNiYWE3ZTA0XSovCiB7Ci0gICAgcGF0aF90IHNyYywgZHN0OwotICAgIGludCBzcmNfZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7Ci0gICAgaW50IGRzdF9kaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKLSAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsic3JjIiwgImRzdCIsICJzcmNfZGlyX2ZkIiwgImRzdF9kaXJfZmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgQk9PTCByZXN1bHQ7CiAjZWxzZQogICAgIGludCByZXN1bHQ7CiAjZW5kaWYKIAotICAgIG1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3JjKSk7Ci0gICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKLSAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKLSAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfE8mTyZwOmxpbmsiLCBrZXl3b3JkcywKLSAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLAotICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZkc3QsCi0gICAgICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmc3JjX2Rpcl9mZCwKLSAgICAgICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkc3RfZGlyX2ZkLAotICAgICAgICAgICAgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAjaWZuZGVmIEhBVkVfTElOS0FUCiAgICAgaWYgKChzcmNfZGlyX2ZkICE9IERFRkFVTFRfRElSX0ZEKSB8fCAoZHN0X2Rpcl9mZCAhPSBERUZBVUxUX0RJUl9GRCkpIHsKICAgICAgICAgYXJndW1lbnRfdW5hdmFpbGFibGVfZXJyb3IoImxpbmsiLCAic3JjX2Rpcl9mZCBhbmQgZHN0X2Rpcl9mZCIpOwotICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKChzcmMubmFycm93ICYmIGRzdC53aWRlKSB8fCAoc3JjLndpZGUgJiYgZHN0Lm5hcnJvdykpIHsKKyAgICBpZiAoKHNyYy0+bmFycm93ICYmIGRzdC0+d2lkZSkgfHwgKHNyYy0+d2lkZSAmJiBkc3QtPm5hcnJvdykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibGluazogc3JjIGFuZCBkc3QgbXVzdCBiZSB0aGUgc2FtZSB0eXBlIik7Ci0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoc3JjLndpZGUpCi0gICAgICAgIHJlc3VsdCA9IENyZWF0ZUhhcmRMaW5rVyhkc3Qud2lkZSwgc3JjLndpZGUsIE5VTEwpOworICAgIGlmIChzcmMtPndpZGUpCisgICAgICAgIHJlc3VsdCA9IENyZWF0ZUhhcmRMaW5rVyhkc3QtPndpZGUsIHNyYy0+d2lkZSwgTlVMTCk7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBDcmVhdGVIYXJkTGlua0EoZHN0Lm5hcnJvdywgc3JjLm5hcnJvdywgTlVMTCk7CisgICAgICAgIHJlc3VsdCA9IENyZWF0ZUhhcmRMaW5rQShkc3QtPm5hcnJvdywgc3JjLT5uYXJyb3csIE5VTEwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IyKHNyYywgZHN0KTsKICNlbHNlCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIEhBVkVfTElOS0FUCiAgICAgaWYgKChzcmNfZGlyX2ZkICE9IERFRkFVTFRfRElSX0ZEKSB8fAogICAgICAgICAoZHN0X2Rpcl9mZCAhPSBERUZBVUxUX0RJUl9GRCkgfHwKICAgICAgICAgKCFmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICByZXN1bHQgPSBsaW5rYXQoc3JjX2Rpcl9mZCwgc3JjLm5hcnJvdywKLSAgICAgICAgICAgIGRzdF9kaXJfZmQsIGRzdC5uYXJyb3csCisgICAgICAgIHJlc3VsdCA9IGxpbmthdChzcmNfZGlyX2ZkLCBzcmMtPm5hcnJvdywKKyAgICAgICAgICAgIGRzdF9kaXJfZmQsIGRzdC0+bmFycm93LAogICAgICAgICAgICAgZm9sbG93X3N5bWxpbmtzID8gQVRfU1lNTElOS19GT0xMT1cgOiAwKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gbGluayhzcmMubmFycm93LCBkc3QubmFycm93KTsKKyAgICAgICAgcmVzdWx0ID0gbGluayhzcmMtPm5hcnJvdywgZHN0LT5uYXJyb3cpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQorICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yMihzcmMsIGRzdCk7CiAjZW5kaWYKIAotICAgIHJldHVybl92YWx1ZSA9IFB5X05vbmU7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmc3JjKTsKLSAgICBwYXRoX2NsZWFudXAoJmRzdCk7Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZgogCiAKLQotUHlEb2NfU1RSVkFSKHBvc2l4X2xpc3RkaXJfX2RvY19fLAotImxpc3RkaXIocGF0aD0nLicpIC0+IGxpc3Rfb2ZfZmlsZW5hbWVzXG5cblwKLVJldHVybiBhIGxpc3QgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkuXG5cCi1UaGUgbGlzdCBpcyBpbiBhcmJpdHJhcnkgb3JkZXIuICBJdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzcGVjaWFsXG5cCi1lbnRyaWVzICcuJyBhbmQgJy4uJyBldmVuIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIGRpcmVjdG9yeS5cblwKLVxuXAotcGF0aCBjYW4gYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBzdHIgb3IgYnl0ZXMuICBJZiBwYXRoIGlzIGJ5dGVzLFxuXAotICB0aGUgZmlsZW5hbWVzIHJldHVybmVkIHdpbGwgYWxzbyBiZSBieXRlczsgaW4gYWxsIG90aGVyIGNpcmN1bXN0YW5jZXNcblwKLSAgdGhlIGZpbGVuYW1lcyByZXR1cm5lZCB3aWxsIGJlIHN0ci5cblwKLU9uIHNvbWUgcGxhdGZvcm1zLCBwYXRoIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvcjtcblwKLSAgdGhlIGZpbGUgZGVzY3JpcHRvciBtdXN0IHJlZmVyIHRvIGEgZGlyZWN0b3J5LlxuXAotICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOwotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCiBzdGF0aWMgUHlPYmplY3QgKgogX2xpc3RkaXJfd2luZG93c19ub19vcGVuZGlyKHBhdGhfdCAqcGF0aCwgUHlPYmplY3QgKmxpc3QpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqdjsKICAgICBIQU5ETEUgaEZpbmRGaWxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgICAgQk9PTCByZXN1bHQ7CkBAIC0zODg3LDEyMyArMzcxNCwxMTcgQEAKIH0gIC8qIGVuZCBvZiBfcG9zaXhfbGlzdGRpciAqLwogI2VuZGlmICAvKiB3aGljaCBPUyAqLwogCisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmxpc3RkaXIKKworICAgIHBhdGggOiBwYXRoX3QobnVsbGFibGU9VHJ1ZSwgYWxsb3dfZmQ9J1BBVEhfSEFWRV9GRE9QRU5ESVInKSA9IE5vbmUKKworUmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeS4KKworcGF0aCBjYW4gYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBzdHIgb3IgYnl0ZXMuICBJZiBwYXRoIGlzIGJ5dGVzLAorICB0aGUgZmlsZW5hbWVzIHJldHVybmVkIHdpbGwgYWxzbyBiZSBieXRlczsgaW4gYWxsIG90aGVyIGNpcmN1bXN0YW5jZXMKKyAgdGhlIGZpbGVuYW1lcyByZXR1cm5lZCB3aWxsIGJlIHN0ci4KK0lmIHBhdGggaXMgTm9uZSwgdXNlcyB0aGUgcGF0aD0nLicuCitPbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3I7XAorICB0aGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgcmVmZXIgdG8gYSBkaXJlY3RvcnkuCisgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IuCisKK1RoZSBsaXN0IGlzIGluIGFyYml0cmFyeSBvcmRlci4gIEl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHNwZWNpYWwKK2VudHJpZXMgJy4nIGFuZCAnLi4nIGV2ZW4gaWYgdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgZGlyZWN0b3J5LgorCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2xpc3RkaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfbGlzdGRpcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yOTMwNDU2NzNmY2QxYTc1IGlucHV0PTA5ZTMwMDQxNmUzY2Q3MjldKi8KIHsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOwotCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsaXN0ZGlyIjsKLSAgICBwYXRoLm51bGxhYmxlID0gMTsKLSNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIHBhdGguYWxsb3dfZmQgPSAxOwotICAgIHBhdGguZmQgPSAtMTsKLSNlbmRpZgotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mOmxpc3RkaXIiLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoSEFWRV9PUEVORElSKQotICAgIHJldHVybl92YWx1ZSA9IF9saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpcigmcGF0aCwgbGlzdCk7CisgICAgcmV0dXJuIF9saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpcihwYXRoLCBOVUxMKTsKICNlbHNlCi0gICAgcmV0dXJuX3ZhbHVlID0gX3Bvc2l4X2xpc3RkaXIoJnBhdGgsIGxpc3QpOworICAgIHJldHVybiBfcG9zaXhfbGlzdGRpcihwYXRoLCBOVUxMKTsKICNlbmRpZgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKIC8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBhYnNwYXRoIG9uIHdpbjMyICovCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfX2dldGZ1bGxwYXRobmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSF07Ci0gICAgY2hhciAqdGVtcDsKLSAgICBQeU9iamVjdCAqcG87CisvKltjbGluaWMgaW5wdXRdCitvcy5fZ2V0ZnVsbHBhdGhuYW1lCiAKLSAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXw6X2dldGZ1bGxwYXRobmFtZSIsICZwbykpCisgICAgcGF0aDogcGF0aF90CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19fZ2V0ZnVsbHBhdGhuYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJiODY3OWQ1Njg0NWJjOWIgaW5wdXQ9MzMyZWQ1MzdjMjlkMGEzZV0qLworeworICAgIGlmICghcGF0aC0+bmFycm93KQogICAgIHsKLSAgICAgICAgd2NoYXJfdCAqd3BhdGg7CiAgICAgICAgIHdjaGFyX3Qgd291dGJ1ZltNQVhfUEFUSF0sICp3b3V0YnVmcCA9IHdvdXRidWY7CiAgICAgICAgIHdjaGFyX3QgKnd0ZW1wOwogICAgICAgICBEV09SRCByZXN1bHQ7CiAgICAgICAgIFB5T2JqZWN0ICp2OwogCi0gICAgICAgIHdwYXRoID0gUHlVbmljb2RlX0FzVW5pY29kZShwbyk7Ci0gICAgICAgIGlmICh3cGF0aCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcod3BhdGgsCisgICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcocGF0aC0+d2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9BUlJBWV9MRU5HVEgod291dGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd291dGJ1ZiwgJnd0ZW1wKTsKICAgICAgICAgaWYgKHJlc3VsdCA+IFB5X0FSUkFZX0xFTkdUSCh3b3V0YnVmKSkgewogICAgICAgICAgICAgd291dGJ1ZnAgPSBQeU1lbV9OZXcod2NoYXJfdCwgcmVzdWx0KTsKICAgICAgICAgICAgIGlmICghd291dGJ1ZnApCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBHZXRGdWxsUGF0aE5hbWVXKHdwYXRoLCByZXN1bHQsIHdvdXRidWZwLCAmd3RlbXApOworICAgICAgICAgICAgcmVzdWx0ID0gR2V0RnVsbFBhdGhOYW1lVyhwYXRoLT53aWRlLCByZXN1bHQsIHdvdXRidWZwLCAmd3RlbXApOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3b3V0YnVmcCwgd2NzbGVuKHdvdXRidWZwKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHYgPSB3aW4zMl9lcnJvcl9vYmplY3QoIkdldEZ1bGxQYXRoTmFtZVciLCBwbyk7CisgICAgICAgICAgICB2ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGdWxsUGF0aE5hbWVXIiwgcGF0aC0+b2JqZWN0KTsKICAgICAgICAgaWYgKHdvdXRidWZwICE9IHdvdXRidWYpCiAgICAgICAgICAgICBQeU1lbV9GcmVlKHdvdXRidWZwKTsKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQotICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICBQeUVycl9DbGVhcigpOworICAgIGVsc2UgeworICAgICAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSF07CisgICAgICAgIGNoYXIgKnRlbXA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJ5Ol9nZXRmdWxscGF0aG5hbWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAod2luMzJfd2Fybl9ieXRlc19hcGkoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFHZXRGdWxsUGF0aE5hbWUocGF0aCwgUHlfQVJSQVlfTEVOR1RIKG91dGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3V0YnVmLCAmdGVtcCkpIHsKLSAgICAgICAgd2luMzJfZXJyb3IoIkdldEZ1bGxQYXRoTmFtZSIsIHBhdGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKCFHZXRGdWxsUGF0aE5hbWUocGF0aC0+bmFycm93LCBQeV9BUlJBWV9MRU5HVEgob3V0YnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0YnVmLCAmdGVtcCkpIHsKKyAgICAgICAgICAgIHdpbjMyX2Vycm9yX29iamVjdCgiR2V0RnVsbFBhdGhOYW1lIiwgcGF0aC0+b2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcob3V0YnVmKTsKICAgICB9Ci0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhQeVR1cGxlX0dldEl0ZW0oYXJncywgMCkpKSB7Ci0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlKG91dGJ1Ziwgc3RybGVuKG91dGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsIE5VTEwpOwotICAgIH0KLSAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKG91dGJ1Zik7Ci19IC8qIGVuZCBvZiBwb3NpeF9fZ2V0ZnVsbHBhdGhuYW1lICovCit9CiAKIAorLypbY2xpbmljIGlucHV0XQorb3MuX2dldGZpbmFscGF0aG5hbWUKIAotLyogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNhbWVwYXRoIG9uIHdpbmRvd3MgKi8KKyAgICBwYXRoOiB1bmljb2RlCisgICAgLworCitBIGhlbHBlciBmdW5jdGlvbiBmb3Igc2FtZXBhdGggb24gd2luZG93cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X19nZXRmaW5hbHBhdGhuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX19nZXRmaW5hbHBhdGhuYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnBhdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWJkNzhkMGU1Mjc4MmU3NSBpbnB1dD03MWQ1ZTg5MzM0ODkxYmY0XSovCiB7CiAgICAgSEFORExFIGhGaWxlOwogICAgIGludCBidWZfc2l6ZTsKICAgICB3Y2hhcl90ICp0YXJnZXRfcGF0aDsKICAgICBpbnQgcmVzdWx0X2xlbmd0aDsKLSAgICBQeU9iamVjdCAqcG8sICpyZXN1bHQ7Ci0gICAgd2NoYXJfdCAqcGF0aDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIHdjaGFyX3QgKnBhdGhfd2NoYXI7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8Ol9nZXRmaW5hbHBhdGhuYW1lIiwgJnBvKSkKKyAgICBwYXRoX3djaGFyID0gUHlVbmljb2RlX0FzVW5pY29kZShwYXRoKTsKKyAgICBpZiAocGF0aF93Y2hhciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlVbmljb2RlX0FzVW5pY29kZShwbyk7Ci0gICAgaWYgKHBhdGggPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZighY2hlY2tfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKCkpIHsKLSAgICAgICAgLyogSWYgdGhlIE9TIGRvZXNuJ3QgaGF2ZSBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUsIHJldHVybiBhCi0gICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IuICovCi0gICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKLSAgICAgICAgICAgICJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIik7Ci0gICAgfQogCiAgICAgaEZpbGUgPSBDcmVhdGVGaWxlVygKLSAgICAgICAgcGF0aCwKKyAgICAgICAgcGF0aF93Y2hhciwKICAgICAgICAgMCwgLyogZGVzaXJlZCBhY2Nlc3MgKi8KICAgICAgICAgMCwgLyogc2hhcmUgbW9kZSAqLwogICAgICAgICBOVUxMLCAvKiBzZWN1cml0eSBhdHRyaWJ1dGVzICovCkBAIC00MDEzLDg5ICszODM0LDg2IEBACiAgICAgICAgIE5VTEwpOwogCiAgICAgaWYoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoIkNyZWF0ZUZpbGVXIiwgcG8pOworICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KCJDcmVhdGVGaWxlVyIsIHBhdGgpOwogCiAgICAgLyogV2UgaGF2ZSBhIGdvb2QgaGFuZGxlIHRvIHRoZSB0YXJnZXQsIHVzZSBpdCB0byBkZXRlcm1pbmUgdGhlCiAgICAgICAgdGFyZ2V0IHBhdGggbmFtZS4gKi8KLSAgICBidWZfc2l6ZSA9IFB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcoaEZpbGUsIDAsIDAsIFZPTFVNRV9OQU1FX05UKTsKKyAgICBidWZfc2l6ZSA9IEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcoaEZpbGUsIDAsIDAsIFZPTFVNRV9OQU1FX05UKTsKIAogICAgIGlmKCFidWZfc2l6ZSkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdCgiR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIiwgcG8pOworICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUiLCBwYXRoKTsKIAogICAgIHRhcmdldF9wYXRoID0gUHlNZW1fTmV3KHdjaGFyX3QsIGJ1Zl9zaXplKzEpOwogICAgIGlmKCF0YXJnZXRfcGF0aCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKLSAgICByZXN1bHRfbGVuZ3RoID0gUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlVyhoRmlsZSwgdGFyZ2V0X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX3NpemUsIFZPTFVNRV9OQU1FX0RPUyk7CisgICAgcmVzdWx0X2xlbmd0aCA9IEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcoaEZpbGUsIHRhcmdldF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9zaXplLCBWT0xVTUVfTkFNRV9ET1MpOwogICAgIGlmKCFyZXN1bHRfbGVuZ3RoKQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGaW5hbFBhdGhOYW15QnlIYW5kbGUiLCBwbyk7CisgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoIkdldEZpbmFsUGF0aE5hbXlCeUhhbmRsZSIsIHBhdGgpOwogCiAgICAgaWYoIUNsb3NlSGFuZGxlKGhGaWxlKSkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdCgiQ2xvc2VIYW5kbGUiLCBwbyk7CisgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoIkNsb3NlSGFuZGxlIiwgcGF0aCk7CiAKICAgICB0YXJnZXRfcGF0aFtyZXN1bHRfbGVuZ3RoXSA9IDA7CiAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih0YXJnZXRfcGF0aCwgcmVzdWx0X2xlbmd0aCk7CiAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKLQotfSAvKiBlbmQgb2YgcG9zaXhfX2dldGZpbmFscGF0aG5hbWUgKi8KK30KIAogUHlEb2NfU1RSVkFSKHBvc2l4X19pc2Rpcl9fZG9jX18sCiAiUmV0dXJuIHRydWUgaWYgdGhlIHBhdGhuYW1lIHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnkuIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK29zLl9pc2RpcgorCisgICAgcGF0aDogcGF0aF90CisgICAgLworCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9faXNkaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfX2lzZGlyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTc1ZjU2ZjMyNzIwODM2Y2IgaW5wdXQ9ZTc5NGYxMmZhYWI2MmEyYV0qLwogewotICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKnBvOwogICAgIERXT1JEIGF0dHJpYnV0ZXM7CiAKLSAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXw6X2lzZGlyIiwgJnBvKSkgewotICAgICAgICB3Y2hhcl90ICp3cGF0aCA9IFB5VW5pY29kZV9Bc1VuaWNvZGUocG8pOwotICAgICAgICBpZiAod3BhdGggPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoIXBhdGgtPm5hcnJvdykKKyAgICAgICAgYXR0cmlidXRlcyA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLT53aWRlKTsKKyAgICBlbHNlCisgICAgICAgIGF0dHJpYnV0ZXMgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC0+bmFycm93KTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgICAgIGF0dHJpYnV0ZXMgPSBHZXRGaWxlQXR0cmlidXRlc1cod3BhdGgpOwotICAgICAgICBpZiAoYXR0cmlidXRlcyA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykKLSAgICAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKLSAgICAgICAgZ290byBjaGVjazsKLSAgICB9Ci0gICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwotICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgIFB5RXJyX0NsZWFyKCk7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInk6X2lzZGlyIiwgJnBhdGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAod2luMzJfd2Fybl9ieXRlc19hcGkoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXR0cmlidXRlcyA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoKTsKICAgICBpZiAoYXR0cmlidXRlcyA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykKICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogCi1jaGVjazoKICAgICBpZiAoYXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CiAgICAgZWxzZQogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWVfX2RvY19fLAotIlJldHVybiB2b2x1bWUgbW91bnQgcG9pbnQgb2YgdGhlIHNwZWNpZmllZCBwYXRoLiIpOwogCi0vKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgaXNtb3VudCBvbiB3aW5kb3dzICovCisvKltjbGluaWMgaW5wdXRdCitvcy5fZ2V0dm9sdW1lcGF0aG5hbWUKKworICAgIHBhdGg6IHVuaWNvZGUKKworQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGlzbW91bnQgb24gV2luMzIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfX2dldHZvbHVtZXBhdGhuYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnBhdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Y2JkY2JkMTA1OWNlZWY0YyBpbnB1dD03ZWFjYWRjNDBhY2JkYTZiXSovCiB7Ci0gICAgUHlPYmplY3QgKnBvLCAqcmVzdWx0OwotICAgIHdjaGFyX3QgKnBhdGgsICptb3VudHBhdGg9TlVMTDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIHdjaGFyX3QgKnBhdGhfd2NoYXIsICptb3VudHBhdGg9TlVMTDsKICAgICBzaXplX3QgYnVmbGVuOwogICAgIEJPT0wgcmV0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0dm9sdW1lcGF0aG5hbWUiLCAmcG8pKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocG8sICZidWZsZW4pOwotICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgcGF0aF93Y2hhciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHBhdGgsICZidWZsZW4pOworICAgIGlmIChwYXRoX3djaGFyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGJ1ZmxlbiArPSAxOwogCkBAIC00MTEyLDEyICszOTMwLDEyIEBACiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJldCA9IEdldFZvbHVtZVBhdGhOYW1lVyhwYXRoLCBtb3VudHBhdGgsCisgICAgcmV0ID0gR2V0Vm9sdW1lUGF0aE5hbWVXKHBhdGhfd2NoYXIsIG1vdW50cGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0FGRV9ET1dOQ0FTVChidWZsZW4sIHNpemVfdCwgRFdPUkQpKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgcmVzdWx0ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJfZ2V0dm9sdW1lcGF0aG5hbWUiLCBwbyk7CisgICAgICAgIHJlc3VsdCA9IHdpbjMyX2Vycm9yX29iamVjdCgiX2dldHZvbHVtZXBhdGhuYW1lIiwgcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihtb3VudHBhdGgsIHdjc2xlbihtb3VudHBhdGgpKTsKQEAgLTQxMjYsNzggKzM5NDQsNjYgQEAKICAgICBQeU1lbV9GcmVlKG1vdW50cGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLS8qIGVuZCBvZiBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUgKi8KIAogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAotUHlEb2NfU1RSVkFSKHBvc2l4X21rZGlyX19kb2NfXywKLSJta2RpcihwYXRoLCBtb2RlPTBvNzc3LCAqLCBkaXJfZmQ9Tm9uZSlcblxuXAotQ3JlYXRlIGEgZGlyZWN0b3J5LlxuXAotXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cblwKLSAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLlxuXAotXG5cCi1UaGUgbW9kZSBhcmd1bWVudCBpcyBpZ25vcmVkIG9uIFdpbmRvd3MuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLm1rZGlyCisKKyAgICBwYXRoIDogcGF0aF90CisKKyAgICBtb2RlOiBpbnQgPSAwbzc3NworCisgICAgKgorCisgICAgZGlyX2ZkIDogZGlyX2ZkKHJlcXVpcmVzPSdta2RpcmF0JykgPSBOb25lCisKKyMgIm1rZGlyKHBhdGgsIG1vZGU9MG83NzcsICosIGRpcl9mZD1Ob25lKVxuXG5cCisKK0NyZWF0ZSBhIGRpcmVjdG9yeS4KKworSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS4KK2Rpcl9mZCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uCisgIElmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4KKworVGhlIG1vZGUgYXJndW1lbnQgaXMgaWdub3JlZCBvbiBXaW5kb3dzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbWtkaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfbWtkaXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE3MDQ0NjkwM2FiZTgyMWYgaW5wdXQ9ZTk2NWY2ODM3N2U5YjFjZV0qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIGludCBtb2RlID0gMDc3NzsKLSAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkaXJfZmQiLCBOVUxMfTsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBpbnQgcmVzdWx0OwogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJta2RpciI7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aSRPJjpta2RpciIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLAotI2lmZGVmIEhBVkVfTUtESVJBVAotICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkCi0jZWxzZQotICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQKLSNlbmRpZgotICAgICAgICApKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgaWYgKHBhdGgud2lkZSkKLSAgICAgICAgcmVzdWx0ID0gQ3JlYXRlRGlyZWN0b3J5VyhwYXRoLndpZGUsIE5VTEwpOworICAgIGlmIChwYXRoLT53aWRlKQorICAgICAgICByZXN1bHQgPSBDcmVhdGVEaXJlY3RvcnlXKHBhdGgtPndpZGUsIE5VTEwpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQ3JlYXRlRGlyZWN0b3J5QShwYXRoLm5hcnJvdywgTlVMTCk7CisgICAgICAgIHJlc3VsdCA9IENyZWF0ZURpcmVjdG9yeUEocGF0aC0+bmFycm93LCBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yKHBhdGgpOwogI2Vsc2UKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWYgSEFWRV9NS0RJUkFUCiAgICAgaWYgKGRpcl9mZCAhPSBERUZBVUxUX0RJUl9GRCkKLSAgICAgICAgcmVzdWx0ID0gbWtkaXJhdChkaXJfZmQsIHBhdGgubmFycm93LCBtb2RlKTsKKyAgICAgICAgcmVzdWx0ID0gbWtkaXJhdChkaXJfZmQsIHBhdGgtPm5hcnJvdywgbW9kZSk7CiAgICAgZWxzZQogI2VuZGlmCiAjaWYgKCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKFBZQ0NfVkFDUFApICkgJiYgIWRlZmluZWQoX19RTlhfXykKLSAgICAgICAgcmVzdWx0ID0gbWtkaXIocGF0aC5uYXJyb3cpOworICAgICAgICByZXN1bHQgPSBta2RpcihwYXRoLT5uYXJyb3cpOwogI2Vsc2UKLSAgICAgICAgcmVzdWx0ID0gbWtkaXIocGF0aC5uYXJyb3csIG1vZGUpOworICAgICAgICByZXN1bHQgPSBta2RpcihwYXRoLT5uYXJyb3csIG1vZGUpOwogI2VuZGlmCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzdWx0IDwgMCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CiAjZW5kaWYKLSAgICByZXR1cm5fdmFsdWUgPSBQeV9Ob25lOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLWV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTQyMDgsMTcgKzQwMTQsMjAgQEAKIAogCiAjaWZkZWYgSEFWRV9OSUNFCi1QeURvY19TVFJWQVIocG9zaXhfbmljZV9fZG9jX18sCi0ibmljZShpbmMpIC0+IG5ld19wcmlvcml0eVxuXG5cCi1EZWNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgcHJvY2VzcyBieSBpbmMgYW5kIHJldHVybiB0aGUgbmV3IHByaW9yaXR5LiIpOworLypbY2xpbmljIGlucHV0XQorb3MubmljZQorCisgICAgaW5jcmVtZW50OiBpbnQKKyAgICAvCisKK0FkZCBpbmNyZW1lbnQgdG8gdGhlIHByaW9yaXR5IG9mIHByb2Nlc3MgYW5kIHJldHVybiB0aGUgbmV3IHByaW9yaXR5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbmljZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19uaWNlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGluY3JlbWVudCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ZGFkOGE5ZGE4MTA5OTQzIGlucHV0PTg2NGJlMmQ0MDJhMjFkYTJdKi8KIHsKLSAgICBpbnQgaW5jcmVtZW50LCB2YWx1ZTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpuaWNlIiwgJmluY3JlbWVudCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGludCB2YWx1ZTsKIAogICAgIC8qIFRoZXJlIGFyZSB0d28gZmxhdm91cnMgb2YgJ25pY2UnOiBvbmUgdGhhdCByZXR1cm5zIHRoZSBuZXcKICAgICAgICBwcmlvcml0eSAoYXMgcmVxdWlyZWQgYnkgYWxtb3N0IGFsbCBzdGFuZGFyZHMgb3V0IHRoZXJlKSBhbmQgdGhlCkBAIC00MjQ1LDE3ICs0MDU0LDIxIEBACiAKIAogI2lmZGVmIEhBVkVfR0VUUFJJT1JJVFkKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXRwcmlvcml0eV9fZG9jX18sCi0iZ2V0cHJpb3JpdHkod2hpY2gsIHdobykgLT4gY3VycmVudF9wcmlvcml0eVxuXG5cCi1HZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5LiIpOworLypbY2xpbmljIGlucHV0XQorb3MuZ2V0cHJpb3JpdHkKKworICAgIHdoaWNoOiBpbnQKKyAgICB3aG86IGludAorCitSZXR1cm4gcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZ2V0cHJpb3JpdHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfZ2V0cHJpb3JpdHlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgd2hpY2gsIGludCB3aG8pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzQxYjdiNjNjNzQyMDIyOCBpbnB1dD05YmU2MTVkNDBlMjU0NGVmXSovCiB7Ci0gICAgaW50IHdoaWNoLCB3aG8sIHJldHZhbDsKKyAgICBpbnQgcmV0dmFsOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaSIsICZ3aGljaCwgJndobykpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGVycm5vID0gMDsKICAgICByZXR2YWwgPSBnZXRwcmlvcml0eSh3aGljaCwgd2hvKTsKICAgICBpZiAoZXJybm8gIT0gMCkKQEAgLTQyNjYsMTggKzQwNzksMjMgQEAKIAogCiAjaWZkZWYgSEFWRV9TRVRQUklPUklUWQotUHlEb2NfU1RSVkFSKHBvc2l4X3NldHByaW9yaXR5X19kb2NfXywKLSJzZXRwcmlvcml0eSh3aGljaCwgd2hvLCBwcmlvKSAtPiBOb25lXG5cblwKLVNldCBwcm9ncmFtIHNjaGVkdWxpbmcgcHJpb3JpdHkuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5zZXRwcmlvcml0eQorCisgICAgd2hpY2g6IGludAorICAgIHdobzogaW50CisgICAgcHJpb3JpdHk6IGludAorCitTZXQgcHJvZ3JhbSBzY2hlZHVsaW5nIHByaW9yaXR5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc2V0cHJpb3JpdHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3Nfc2V0cHJpb3JpdHlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgd2hpY2gsIGludCB3aG8sIGludCBwcmlvcml0eSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zZDkxMGQ5NWE3NzcxZWIyIGlucHV0PTcxMGNjYmY2NWI5ZGM1MTNdKi8KIHsKLSAgICBpbnQgd2hpY2gsIHdobywgcHJpbywgcmV0dmFsOworICAgIGludCByZXR2YWw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaSIsICZ3aGljaCwgJndobywgJnByaW8pKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR2YWwgPSBzZXRwcmlvcml0eSh3aGljaCwgd2hvLCBwcmlvKTsKKyAgICByZXR2YWwgPSBzZXRwcmlvcml0eSh3aGljaCwgd2hvLCBwcmlvcml0eSk7CiAgICAgaWYgKHJldHZhbCA9PSAtMSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC00Mjg2LDE3ICs0MTA0LDEwIEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLWludGVybmFsX3JlbmFtZShQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncywgaW50IGlzX3JlcGxhY2UpCitpbnRlcm5hbF9yZW5hbWUocGF0aF90ICpzcmMsIHBhdGhfdCAqZHN0LCBpbnQgc3JjX2Rpcl9mZCwgaW50IGRzdF9kaXJfZmQsIGludCBpc19yZXBsYWNlKQogewogICAgIGNoYXIgKmZ1bmN0aW9uX25hbWUgPSBpc19yZXBsYWNlID8gInJlcGxhY2UiIDogInJlbmFtZSI7Ci0gICAgcGF0aF90IHNyYzsKLSAgICBwYXRoX3QgZHN0OwotICAgIGludCBzcmNfZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7Ci0gICAgaW50IGRzdF9kaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZGlyX2ZkX3NwZWNpZmllZDsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICBjaGFyIGZvcm1hdFsyNF07Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InNyYyIsICJkc3QiLCAic3JjX2Rpcl9mZCIsICJkc3RfZGlyX2ZkIiwgTlVMTH07CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgQk9PTCByZXN1bHQ7CkBAIC00MzA1LDIxMCArNDExNiwyMDAgQEAKICAgICBpbnQgcmVzdWx0OwogI2VuZGlmCiAKLSAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOwotICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7Ci0gICAgc3JjLmZ1bmN0aW9uX25hbWUgPSBmdW5jdGlvbl9uYW1lOwotICAgIGRzdC5mdW5jdGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZTsKLSAgICBzdHJjcHkoZm9ybWF0LCAiTyZPJnwkTyZPJjoiKTsKLSAgICBzdHJjYXQoZm9ybWF0LCBmdW5jdGlvbl9uYW1lKTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsIGZvcm1hdCwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJmRzdCwKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJnNyY19kaXJfZmQsCi0gICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkc3RfZGlyX2ZkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBkaXJfZmRfc3BlY2lmaWVkID0gKHNyY19kaXJfZmQgIT0gREVGQVVMVF9ESVJfRkQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIChkc3RfZGlyX2ZkICE9IERFRkFVTFRfRElSX0ZEKTsKICNpZm5kZWYgSEFWRV9SRU5BTUVBVAogICAgIGlmIChkaXJfZmRfc3BlY2lmaWVkKSB7CiAgICAgICAgIGFyZ3VtZW50X3VuYXZhaWxhYmxlX2Vycm9yKGZ1bmN0aW9uX25hbWUsICJzcmNfZGlyX2ZkIGFuZCBkc3RfZGlyX2ZkIik7Ci0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoKHNyYy5uYXJyb3cgJiYgZHN0LndpZGUpIHx8IChzcmMud2lkZSAmJiBkc3QubmFycm93KSkgeworICAgIGlmICgoc3JjLT5uYXJyb3cgJiYgZHN0LT53aWRlKSB8fCAoc3JjLT53aWRlICYmIGRzdC0+bmFycm93KSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICIlczogc3JjIGFuZCBkc3QgbXVzdCBiZSB0aGUgc2FtZSB0eXBlIiwgZnVuY3Rpb25fbmFtZSk7Ci0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoc3JjLndpZGUpCi0gICAgICAgIHJlc3VsdCA9IE1vdmVGaWxlRXhXKHNyYy53aWRlLCBkc3Qud2lkZSwgZmxhZ3MpOworICAgIGlmIChzcmMtPndpZGUpCisgICAgICAgIHJlc3VsdCA9IE1vdmVGaWxlRXhXKHNyYy0+d2lkZSwgZHN0LT53aWRlLCBmbGFncyk7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBNb3ZlRmlsZUV4QShzcmMubmFycm93LCBkc3QubmFycm93LCBmbGFncyk7CisgICAgICAgIHJlc3VsdCA9IE1vdmVGaWxlRXhBKHNyYy0+bmFycm93LCBkc3QtPm5hcnJvdywgZmxhZ3MpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IyKHNyYywgZHN0KTsKIAogI2Vsc2UKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgSEFWRV9SRU5BTUVBVAogICAgIGlmIChkaXJfZmRfc3BlY2lmaWVkKQotICAgICAgICByZXN1bHQgPSByZW5hbWVhdChzcmNfZGlyX2ZkLCBzcmMubmFycm93LCBkc3RfZGlyX2ZkLCBkc3QubmFycm93KTsKKyAgICAgICAgcmVzdWx0ID0gcmVuYW1lYXQoc3JjX2Rpcl9mZCwgc3JjLT5uYXJyb3csIGRzdF9kaXJfZmQsIGRzdC0+bmFycm93KTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gcmVuYW1lKHNyYy5uYXJyb3csIGRzdC5uYXJyb3cpOworICAgICAgICByZXN1bHQgPSByZW5hbWUoc3JjLT5uYXJyb3csIGRzdC0+bmFycm93KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gcGF0aF9lcnJvcjIoc3JjLCBkc3QpOwogI2VuZGlmCi0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKLWV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZzcmMpOwotICAgIHBhdGhfY2xlYW51cCgmZHN0KTsKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIocG9zaXhfcmVuYW1lX19kb2NfXywKLSJyZW5hbWUoc3JjLCBkc3QsICosIHNyY19kaXJfZmQ9Tm9uZSwgZHN0X2Rpcl9mZD1Ob25lKVxuXG5cCi1SZW5hbWUgYSBmaWxlIG9yIGRpcmVjdG9yeS5cblwKLVxuXAotSWYgZWl0aGVyIHNyY19kaXJfZmQgb3IgZHN0X2Rpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZVxuXAotICBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksIGFuZCB0aGUgcmVzcGVjdGl2ZSBwYXRoIHN0cmluZyAoc3JjIG9yIGRzdClcblwKLSAgc2hvdWxkIGJlIHJlbGF0aXZlOyB0aGUgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuXG5cCi1zcmNfZGlyX2ZkIGFuZCBkc3RfZGlyX2ZkLCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uXG5cCi0gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy5yZW5hbWUKKworICAgIHNyYyA6IHBhdGhfdAorICAgIGRzdCA6IHBhdGhfdAorICAgICoKKyAgICBzcmNfZGlyX2ZkIDogZGlyX2ZkID0gTm9uZQorICAgIGRzdF9kaXJfZmQgOiBkaXJfZmQgPSBOb25lCisKK1JlbmFtZSBhIGZpbGUgb3IgZGlyZWN0b3J5LgorCitJZiBlaXRoZXIgc3JjX2Rpcl9mZCBvciBkc3RfZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlCisgIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwgYW5kIHRoZSByZXNwZWN0aXZlIHBhdGggc3RyaW5nIChzcmMgb3IgZHN0KQorICBzaG91bGQgYmUgcmVsYXRpdmU7IHRoZSBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS4KK3NyY19kaXJfZmQgYW5kIGRzdF9kaXJfZmQsIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS4KKyAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9yZW5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfcmVuYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpzcmMsIHBhdGhfdCAqZHN0LCBpbnQgc3JjX2Rpcl9mZCwKKyAgICAgICAgICAgICAgIGludCBkc3RfZGlyX2ZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU5ZTgwMzA3MmNmNDEyMzAgaW5wdXQ9ZmFhNjFjODQ3OTEyYzg1MF0qLwogewotICAgIHJldHVybiBpbnRlcm5hbF9yZW5hbWUoYXJncywga3dhcmdzLCAwKTsKKyAgICByZXR1cm4gaW50ZXJuYWxfcmVuYW1lKHNyYywgZHN0LCBzcmNfZGlyX2ZkLCBkc3RfZGlyX2ZkLCAwKTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X3JlcGxhY2VfX2RvY19fLAotInJlcGxhY2Uoc3JjLCBkc3QsICosIHNyY19kaXJfZmQ9Tm9uZSwgZHN0X2Rpcl9mZD1Ob25lKVxuXG5cCi1SZW5hbWUgYSBmaWxlIG9yIGRpcmVjdG9yeSwgb3ZlcndyaXRpbmcgdGhlIGRlc3RpbmF0aW9uLlxuXAotXG5cCi1JZiBlaXRoZXIgc3JjX2Rpcl9mZCBvciBkc3RfZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlXG5cCi0gIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwgYW5kIHRoZSByZXNwZWN0aXZlIHBhdGggc3RyaW5nIChzcmMgb3IgZHN0KVxuXAotICBzaG91bGQgYmUgcmVsYXRpdmU7IHRoZSBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLXNyY19kaXJfZmQgYW5kIGRzdF9kaXJfZmQsIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cblwKLSAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnJlcGxhY2UgPSBvcy5yZW5hbWUKKworUmVuYW1lIGEgZmlsZSBvciBkaXJlY3RvcnksIG92ZXJ3cml0aW5nIHRoZSBkZXN0aW5hdGlvbi4KKworSWYgZWl0aGVyIHNyY19kaXJfZmQgb3IgZHN0X2Rpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZQorICBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksIGFuZCB0aGUgcmVzcGVjdGl2ZSBwYXRoIHN0cmluZyAoc3JjIG9yIGRzdCkKKyAgc2hvdWxkIGJlIHJlbGF0aXZlOyB0aGUgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuCitzcmNfZGlyX2ZkIGFuZCBkc3RfZGlyX2ZkLCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uCisgIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3JlcGxhY2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfcmVwbGFjZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqc3JjLCBwYXRoX3QgKmRzdCwgaW50IHNyY19kaXJfZmQsCisgICAgICAgICAgICAgICAgaW50IGRzdF9kaXJfZmQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTk2OGMwMmU3ODU3NDIyYiBpbnB1dD0yNTUxNWRmYjEwN2M4NDIxXSovCiB7Ci0gICAgcmV0dXJuIGludGVybmFsX3JlbmFtZShhcmdzLCBrd2FyZ3MsIDEpOworICAgIHJldHVybiBpbnRlcm5hbF9yZW5hbWUoc3JjLCBkc3QsIHNyY19kaXJfZmQsIGRzdF9kaXJfZmQsIDEpOwogfQogCi1QeURvY19TVFJWQVIocG9zaXhfcm1kaXJfX2RvY19fLAotInJtZGlyKHBhdGgsICosIGRpcl9mZD1Ob25lKVxuXG5cCi1SZW1vdmUgYSBkaXJlY3RvcnkuXG5cCi1cblwKLUlmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG5cCi0gIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuXG5cCi1kaXJfZmQgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLlxuXAotICBJZiBpdCBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnJtZGlyCisKKyAgICBwYXRoOiBwYXRoX3QKKyAgICAqCisgICAgZGlyX2ZkOiBkaXJfZmQocmVxdWlyZXM9J3VubGlua2F0JykgPSBOb25lCisKK1JlbW92ZSBhIGRpcmVjdG9yeS4KKworSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS4KK2Rpcl9mZCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uCisgIElmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3JtZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX3JtZGlyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA4MGViNTRmNTA2ZTgzMDEgaW5wdXQ9MzhjOGIzNzVjYTM0YTdlMl0qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCBOVUxMfTsKICAgICBpbnQgcmVzdWx0OwotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJybWRpciI7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOnJtZGlyIiwga2V5d29yZHMsCi0gICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0jaWZkZWYgSEFWRV9VTkxJTktBVAotICAgICAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZAotI2Vsc2UKLSAgICAgICAgICAgIGRpcl9mZF91bmF2YWlsYWJsZSwgJmRpcl9mZAotI2VuZGlmCi0gICAgICAgICAgICApKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKHBhdGgud2lkZSkKLSAgICAgICAgcmVzdWx0ID0gUmVtb3ZlRGlyZWN0b3J5VyhwYXRoLndpZGUpOworICAgIGlmIChwYXRoLT53aWRlKQorICAgICAgICByZXN1bHQgPSBSZW1vdmVEaXJlY3RvcnlXKHBhdGgtPndpZGUpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gUmVtb3ZlRGlyZWN0b3J5QShwYXRoLm5hcnJvdyk7CisgICAgICAgIHJlc3VsdCA9IFJlbW92ZURpcmVjdG9yeUEocGF0aC0+bmFycm93KTsKICAgICByZXN1bHQgPSAhcmVzdWx0OyAvKiBXaW5kb3dzLCBzdWNjZXNzPTEsIFVOSVgsIHN1Y2Nlc3M9MCAqLwogI2Vsc2UKICNpZmRlZiBIQVZFX1VOTElOS0FUCiAgICAgaWYgKGRpcl9mZCAhPSBERUZBVUxUX0RJUl9GRCkKLSAgICAgICAgcmVzdWx0ID0gdW5saW5rYXQoZGlyX2ZkLCBwYXRoLm5hcnJvdywgQVRfUkVNT1ZFRElSKTsKKyAgICAgICAgcmVzdWx0ID0gdW5saW5rYXQoZGlyX2ZkLCBwYXRoLT5uYXJyb3csIEFUX1JFTU9WRURJUik7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIHJlc3VsdCA9IHJtZGlyKHBhdGgubmFycm93KTsKKyAgICAgICAgcmVzdWx0ID0gcm1kaXIocGF0aC0+bmFycm93KTsKICNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQorICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yKHBhdGgpOwogCi0gICAgcmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0KLWV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKICNpZmRlZiBIQVZFX1NZU1RFTQotUHlEb2NfU1RSVkFSKHBvc2l4X3N5c3RlbV9fZG9jX18sCi0ic3lzdGVtKGNvbW1hbmQpIC0+IGV4aXRfc3RhdHVzXG5cblwKLUV4ZWN1dGUgdGhlIGNvbW1hbmQgKGEgc3RyaW5nKSBpbiBhIHN1YnNoZWxsLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3lzdGVtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBsb25nIHN0czsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgd2NoYXJfdCAqY29tbWFuZDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInU6c3lzdGVtIiwgJmNvbW1hbmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnN5c3RlbSAtPiBsb25nCiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3RzID0gX3dzeXN0ZW0oY29tbWFuZCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbHNlCi0gICAgUHlPYmplY3QgKmNvbW1hbmRfb2JqOwotICAgIGNoYXIgKmNvbW1hbmQ7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpzeXN0ZW0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZjb21tYW5kX29iaikpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGNvbW1hbmQ6IFB5X1VOSUNPREUKIAotICAgIGNvbW1hbmQgPSBQeUJ5dGVzX0FzU3RyaW5nKGNvbW1hbmRfb2JqKTsKK0V4ZWN1dGUgdGhlIGNvbW1hbmQgaW4gYSBzdWJzaGVsbC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGxvbmcKK29zX3N5c3RlbV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X1VOSUNPREUgKmNvbW1hbmQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTZjNGRmZmVlMzZkZmI0OCBpbnB1dD0zMDNmNWNlOTdkZjYwNmIwXSovCit7CisgICAgbG9uZyByZXN1bHQ7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHN0cyA9IHN5c3RlbShjb21tYW5kKTsKKyAgICByZXN1bHQgPSBfd3N5c3RlbShjb21tYW5kKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIFB5X0RFQ1JFRihjb21tYW5kX29iaik7Ci0jZW5kaWYKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHN0cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KKy8qW2NsaW5pYyBpbnB1dF0KK29zLnN5c3RlbSAtPiBsb25nCisKKyAgICBjb21tYW5kOiBGU0NvbnZlcnRlcgorCitFeGVjdXRlIHRoZSBjb21tYW5kIGluIGEgc3Vic2hlbGwuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBsb25nCitvc19zeXN0ZW1faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqY29tbWFuZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yOTBmYzQzN2RkNGYzM2EwIGlucHV0PTg2YTU4NTU0YmE2MDk0YWZdKi8KK3sKKyAgICBsb25nIHJlc3VsdDsKKyAgICBjaGFyICpieXRlcyA9IFB5Qnl0ZXNfQXNTdHJpbmcoY29tbWFuZCk7CisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJlc3VsdCA9IHN5c3RlbShieXRlcyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCisjZW5kaWYgLyogSEFWRV9TWVNURU0gKi8KIAogCi1QeURvY19TVFJWQVIocG9zaXhfdW1hc2tfX2RvY19fLAotInVtYXNrKG5ld19tYXNrKSAtPiBvbGRfbWFza1xuXG5cCi1TZXQgdGhlIGN1cnJlbnQgbnVtZXJpYyB1bWFzayBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyB1bWFzay4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnVtYXNrCisKKyAgICBtYXNrOiBpbnQKKyAgICAvCisKK1NldCB0aGUgY3VycmVudCBudW1lcmljIHVtYXNrIGFuZCByZXR1cm4gdGhlIHByZXZpb3VzIHVtYXNrLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdW1hc2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfdW1hc2tfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgbWFzaykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hMmUzM2NlM2JjMWE2ZTMzIGlucHV0PWFiNmJmZDliMjRkOGE3ZThdKi8KIHsKLSAgICBpbnQgaTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6dW1hc2siLCAmaSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGkgPSAoaW50KXVtYXNrKGkpOworICAgIGludCBpID0gKGludCl1bWFzayhtYXNrKTsKICAgICBpZiAoaSA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaSk7CkBAIC00NTM3LDcgKzQzMzgsMTAgQEAKICAgICAgICAgICAgIGZpbmRfZGF0YV9oYW5kbGUgPSBGaW5kRmlyc3RGaWxlVyhscEZpbGVOYW1lLCAmZmluZF9kYXRhKTsKIAogICAgICAgICAgICAgaWYoZmluZF9kYXRhX2hhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICAgICAgICAgIGlzX2xpbmsgPSBmaW5kX2RhdGEuZHdSZXNlcnZlZDAgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSzsKKyAgICAgICAgICAgICAgICAvKiBJT19SRVBBUlNFX1RBR19TWU1MSU5LIGlmIGl0IGlzIGEgc3ltbGluayBhbmQKKyAgICAgICAgICAgICAgICAgICBJT19SRVBBUlNFX1RBR19NT1VOVF9QT0lOVCBpZiBpdCBpcyBhIGp1bmN0aW9uIHBvaW50LiAqLworICAgICAgICAgICAgICAgIGlzX2xpbmsgPSBmaW5kX2RhdGEuZHdSZXNlcnZlZDAgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX2RhdGEuZHdSZXNlcnZlZDAgPT0gSU9fUkVQQVJTRV9UQUdfTU9VTlRfUE9JTlQ7CiAgICAgICAgICAgICAgICAgRmluZENsb3NlKGZpbmRfZGF0YV9oYW5kbGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NTUwLDgxICs0MzU0LDczIEBACiB9CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCi1QeURvY19TVFJWQVIocG9zaXhfdW5saW5rX19kb2NfXywKLSJ1bmxpbmsocGF0aCwgKiwgZGlyX2ZkPU5vbmUpXG5cblwKLVJlbW92ZSBhIGZpbGUgKHNhbWUgYXMgcmVtb3ZlKCkpLlxuXAotXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cblwKLSAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOwogCi1QeURvY19TVFJWQVIocG9zaXhfcmVtb3ZlX19kb2NfXywKLSJyZW1vdmUocGF0aCwgKiwgZGlyX2ZkPU5vbmUpXG5cblwKLVJlbW92ZSBhIGZpbGUgKHNhbWUgYXMgdW5saW5rKCkpLlxuXAotXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cblwKLSAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOworLypbY2xpbmljIGlucHV0XQorb3MudW5saW5rCisKKyAgICBwYXRoOiBwYXRoX3QKKyAgICAqCisgICAgZGlyX2ZkOiBkaXJfZmQocmVxdWlyZXM9J3VubGlua2F0Jyk9Tm9uZQorCitSZW1vdmUgYSBmaWxlIChzYW1lIGFzIHJlbW92ZSgpKS4KKworSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS4KK2Rpcl9mZCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uCisgIElmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdW5saW5rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX3VubGlua19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGRpcl9mZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MjE3OTc4MDdiOTk2M2IxIGlucHV0PWQ3YmNkZTJiMWIyYTI1NTJdKi8KIHsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgTlVMTH07CiAgICAgaW50IHJlc3VsdDsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLQotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidW5saW5rIjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6dW5saW5rIiwga2V5d29yZHMsCi0gICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0jaWZkZWYgSEFWRV9VTkxJTktBVAotICAgICAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZAotI2Vsc2UKLSAgICAgICAgICAgIGRpcl9mZF91bmF2YWlsYWJsZSwgJmRpcl9mZAotI2VuZGlmCi0gICAgICAgICAgICApKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChwYXRoLndpZGUpCi0gICAgICAgIHJlc3VsdCA9IFB5X0RlbGV0ZUZpbGVXKHBhdGgud2lkZSk7CisgICAgaWYgKHBhdGgtPndpZGUpCisgICAgICAgIHJlc3VsdCA9IFB5X0RlbGV0ZUZpbGVXKHBhdGgtPndpZGUpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gRGVsZXRlRmlsZUEocGF0aC5uYXJyb3cpOworICAgICAgICByZXN1bHQgPSBEZWxldGVGaWxlQShwYXRoLT5uYXJyb3cpOwogICAgIHJlc3VsdCA9ICFyZXN1bHQ7IC8qIFdpbmRvd3MsIHN1Y2Nlc3M9MSwgVU5JWCwgc3VjY2Vzcz0wICovCiAjZWxzZQogI2lmZGVmIEhBVkVfVU5MSU5LQVQKICAgICBpZiAoZGlyX2ZkICE9IERFRkFVTFRfRElSX0ZEKQotICAgICAgICByZXN1bHQgPSB1bmxpbmthdChkaXJfZmQsIHBhdGgubmFycm93LCAwKTsKKyAgICAgICAgcmVzdWx0ID0gdW5saW5rYXQoZGlyX2ZkLCBwYXRoLT5uYXJyb3csIDApOwogICAgIGVsc2UKICNlbmRpZiAvKiBIQVZFX1VOTElOS0FUICovCi0gICAgICAgIHJlc3VsdCA9IHVubGluayhwYXRoLm5hcnJvdyk7CisgICAgICAgIHJlc3VsdCA9IHVubGluayhwYXRoLT5uYXJyb3cpOwogI2VuZGlmCisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gcGF0aF9lcnJvcihwYXRoKTsKIAotICAgIHJldHVybl92YWx1ZSA9IFB5X05vbmU7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCi1QeURvY19TVFJWQVIocG9zaXhfdW5hbWVfX2RvY19fLAotInVuYW1lKCkgLT4gdW5hbWVfcmVzdWx0XG5cblwKLVJldHVybiBhbiBvYmplY3QgaWRlbnRpZnlpbmcgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIHN5c3RlbS5cblwKLVRoZSBvYmplY3QgYmVoYXZlcyBsaWtlIGEgbmFtZWQgdHVwbGUgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczpcblwKLSAgKHN5c25hbWUsIG5vZGVuYW1lLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lKSIpOworLypbY2xpbmljIGlucHV0XQorb3MucmVtb3ZlID0gb3MudW5saW5rCisKK1JlbW92ZSBhIGZpbGUgKHNhbWUgYXMgdW5saW5rKCkpLgorCitJZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAorICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LgorZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS4KKyAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcmVtb3ZlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE4NTM1YjI4ZjAwNjg4ODMgaW5wdXQ9ZTA1YzVhYjU1Y2QzMDk4M10qLworeworICAgIHJldHVybiBvc191bmxpbmtfaW1wbChtb2R1bGUsIHBhdGgsIGRpcl9mZCk7Cit9CisKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRmllbGQgdW5hbWVfcmVzdWx0X2ZpZWxkc1tdID0gewogICAgIHsic3lzbmFtZSIsICAgICJvcGVyYXRpbmcgc3lzdGVtIG5hbWUifSwKQEAgLTQ2NTQsOCArNDQ1MCwxOSBAQAogCiAKICNpZmRlZiBIQVZFX1VOQU1FCisvKltjbGluaWMgaW5wdXRdCitvcy51bmFtZQorCitSZXR1cm4gYW4gb2JqZWN0IGlkZW50aWZ5aW5nIHRoZSBjdXJyZW50IG9wZXJhdGluZyBzeXN0ZW0uCisKK1RoZSBvYmplY3QgYmVoYXZlcyBsaWtlIGEgbmFtZWQgdHVwbGUgd2l0aCB0aGUgZm9sbG93aW5nIGZpZWxkczoKKyAgKHN5c25hbWUsIG5vZGVuYW1lLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lKQorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF91bmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK29zX3VuYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNmE0OWNmMWExNTA4YTE5IGlucHV0PWU2OGJkMjQ2ZGIzMDQzZWRdKi8KIHsKICAgICBzdHJ1Y3QgdXRzbmFtZSB1OwogICAgIGludCByZXM7CkBAIC00Njk0LDMxICs0NTAxLDYgQEAKICNlbmRpZiAvKiBIQVZFX1VOQU1FICovCiAKIAotUHlEb2NfU1RSVkFSKHBvc2l4X3V0aW1lX19kb2NfXywKLSJ1dGltZShwYXRoLCB0aW1lcz1Ob25lLCAqWywgbnNdLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cCi1TZXQgdGhlIGFjY2VzcyBhbmQgbW9kaWZpZWQgdGltZSBvZiBwYXRoLlxuXAotXG5cCi1wYXRoIG1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLlxuXAotT24gc29tZSBwbGF0Zm9ybXMsIHBhdGggbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuXAotICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uXG5cCi1cblwKLUlmIHRpbWVzIGlzIG5vdCBOb25lLCBpdCBtdXN0IGJlIGEgdHVwbGUgKGF0aW1lLCBtdGltZSk7XG5cCi0gICAgYXRpbWUgYW5kIG10aW1lIHNob3VsZCBiZSBleHByZXNzZWQgYXMgZmxvYXQgc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guXG5cCi1JZiBucyBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgYSB0dXBsZSAoYXRpbWVfbnMsIG10aW1lX25zKTtcblwKLSAgICBhdGltZV9ucyBhbmQgbXRpbWVfbnMgc2hvdWxkIGJlIGV4cHJlc3NlZCBhcyBpbnRlZ2VyIG5hbm9zZWNvbmRzXG5cCi0gICAgc2luY2UgdGhlIGVwb2NoLlxuXAotSWYgdGltZXMgaXMgTm9uZSBhbmQgbnMgaXMgdW5zcGVjaWZpZWQsIHV0aW1lIHVzZXMgdGhlIGN1cnJlbnQgdGltZS5cblwKLVNwZWNpZnlpbmcgdHVwbGVzIGZvciBib3RoIHRpbWVzIGFuZCBucyBpcyBhbiBlcnJvci5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCB1dGltZSB3aWxsIG1vZGlmeSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1JdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aFxuXAotICBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLWRpcl9mZCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIHlvdXIgcGxhdGZvcm0uXG5cCi0gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgaW50ICAgIG5vdzsKQEAgLTQ4MDIsNiArNDU4NCw5IEBACiAjZW5kaWYKIH0KIAorICAgICNkZWZpbmUgRlVUSU1FTlNBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF9jb252ZXJ0ZXIKKyNlbHNlCisgICAgI2RlZmluZSBGVVRJTUVOU0FUX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX3VuYXZhaWxhYmxlCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9GVVRJTUVTKSB8fCBkZWZpbmVkKEhBVkVfRlVUSU1FTlMpCkBAIC00ODE4LDYgKzQ2MDMsOSBAQAogI2VuZGlmCiB9CiAKKyAgICAjZGVmaW5lIFBBVEhfVVRJTUVfSEFWRV9GRCAxCisjZWxzZQorICAgICNkZWZpbmUgUEFUSF9VVElNRV9IQVZFX0ZEIDAKICNlbmRpZgogCiAKQEAgLTQ4ODMsMTkgKzQ2NzEsNTAgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnV0aW1lCisKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9J1BBVEhfVVRJTUVfSEFWRV9GRCcpCisgICAgdGltZXM6IG9iamVjdCA9IE5VTEwKKyAgICAqCisgICAgbnM6IG9iamVjdCA9IE5VTEwKKyAgICBkaXJfZmQ6IGRpcl9mZChyZXF1aXJlcz0nZnV0aW1lbnNhdCcpID0gTm9uZQorICAgIGZvbGxvd19zeW1saW5rczogYm9vbD1UcnVlCisKKyMgInV0aW1lKHBhdGgsIHRpbWVzPU5vbmUsICpbLCBuc10sIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcblwKKworU2V0IHRoZSBhY2Nlc3MgYW5kIG1vZGlmaWVkIHRpbWUgb2YgcGF0aC4KKworcGF0aCBtYXkgYWx3YXlzIGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZy4KK09uIHNvbWUgcGxhdGZvcm1zLCBwYXRoIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KKyAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgYW4gZXhjZXB0aW9uLgorCitJZiB0aW1lcyBpcyBub3QgTm9uZSwgaXQgbXVzdCBiZSBhIHR1cGxlIChhdGltZSwgbXRpbWUpOworICAgIGF0aW1lIGFuZCBtdGltZSBzaG91bGQgYmUgZXhwcmVzc2VkIGFzIGZsb2F0IHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLgorSWYgbnMgaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGEgdHVwbGUgKGF0aW1lX25zLCBtdGltZV9ucyk7CisgICAgYXRpbWVfbnMgYW5kIG10aW1lX25zIHNob3VsZCBiZSBleHByZXNzZWQgYXMgaW50ZWdlciBuYW5vc2Vjb25kcworICAgIHNpbmNlIHRoZSBlcG9jaC4KK0lmIHRpbWVzIGlzIE5vbmUgYW5kIG5zIGlzIHVuc3BlY2lmaWVkLCB1dGltZSB1c2VzIHRoZSBjdXJyZW50IHRpbWUuCitTcGVjaWZ5aW5nIHR1cGxlcyBmb3IgYm90aCB0aW1lcyBhbmQgbnMgaXMgYW4gZXJyb3IuCisKK0lmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksCisgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuCitJZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMKKyAgbGluaywgdXRpbWUgd2lsbCBtb2RpZnkgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUgdGhlCisgIGxpbmsgcG9pbnRzIHRvLgorSXQgaXMgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGgKKyAgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCitkaXJfZmQgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtLgorICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdXRpbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfdXRpbWVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIFB5T2JqZWN0ICp0aW1lcywgUHlPYmplY3QgKm5zLAorICAgICAgICAgICAgICBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWNmY2FjNjlkMDI3YjgyY2YgaW5wdXQ9MDgxY2RjNTRjYTY4NTM4NV0qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIFB5T2JqZWN0ICp0aW1lcyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm5zID0gTlVMTDsKLSAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7Ci0gICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7Ci0gICAgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJ0aW1lcyIsICJucyIsICJkaXJfZmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwotCi0gICAgdXRpbWVfdCB1dGltZTsKLQogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBIQU5ETEUgaEZpbGU7CiAgICAgRklMRVRJTUUgYXRpbWUsIG10aW1lOwpAQCAtNDkwNCwyNSArNDcyMyw5IEBACiAjZW5kaWYKIAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHV0aW1lX3QgdXRpbWU7CiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInV0aW1lIjsKICAgICBtZW1zZXQoJnV0aW1lLCAwLCBzaXplb2YodXRpbWVfdCkpOwotI2lmIGRlZmluZWQoSEFWRV9GVVRJTUVTKSB8fCBkZWZpbmVkKEhBVkVfRlVUSU1FTlMpCi0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCi0gICAgICAgICAgICAiTyZ8TyRPTyZwOnV0aW1lIiwga2V5d29yZHMsCi0gICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0gICAgICAgICAgICAmdGltZXMsICZucywKLSNpZiBkZWZpbmVkKEhBVkVfRlVUSU1FU0FUKSB8fCBkZWZpbmVkKEhBVkVfVVRJTUVOU0FUKQotICAgICAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZCwKLSNlbHNlCi0gICAgICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQsCi0jZW5kaWYKLSAgICAgICAgICAgICZmb2xsb3dfc3ltbGlua3MKLSAgICAgICAgICAgICkpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHRpbWVzICYmICh0aW1lcyAhPSBQeV9Ob25lKSAmJiBucykgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTQ5NDIsOSArNDc0NSw5IEBACiAgICAgICAgIH0KICAgICAgICAgdXRpbWUubm93ID0gMDsKICAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhQeVR1cGxlX0dFVF9JVEVNKHRpbWVzLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYV9zZWMsICZhX25zZWMsIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYV9zZWMsICZhX25zZWMsIF9QeVRpbWVfUk9VTkRfRkxPT1IpID09IC0xIHx8CiAgICAgICAgICAgICBfUHlUaW1lX09iamVjdFRvVGltZXNwZWMoUHlUdXBsZV9HRVRfSVRFTSh0aW1lcywgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1fc2VjLCAmbV9uc2VjLCBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1fc2VjLCAmbV9uc2VjLCBfUHlUaW1lX1JPVU5EX0ZMT09SKSA9PSAtMSkgewogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgICAgIHV0aW1lLmF0aW1lX3MgPSBhX3NlYzsKQEAgLTQ5NzYsOSArNDc3OSw5IEBACiAgICAgICAgIGdvdG8gZXhpdDsKICNlbmRpZgogCi0gICAgaWYgKHBhdGhfYW5kX2Rpcl9mZF9pbnZhbGlkKCJ1dGltZSIsICZwYXRoLCBkaXJfZmQpIHx8Ci0gICAgICAgIGRpcl9mZF9hbmRfZmRfaW52YWxpZCgidXRpbWUiLCBkaXJfZmQsIHBhdGguZmQpIHx8Ci0gICAgICAgIGZkX2FuZF9mb2xsb3dfc3ltbGlua3NfaW52YWxpZCgidXRpbWUiLCBwYXRoLmZkLCBmb2xsb3dfc3ltbGlua3MpKQorICAgIGlmIChwYXRoX2FuZF9kaXJfZmRfaW52YWxpZCgidXRpbWUiLCBwYXRoLCBkaXJfZmQpIHx8CisgICAgICAgIGRpcl9mZF9hbmRfZmRfaW52YWxpZCgidXRpbWUiLCBkaXJfZmQsIHBhdGgtPmZkKSB8fAorICAgICAgICBmZF9hbmRfZm9sbG93X3N5bWxpbmtzX2ludmFsaWQoInV0aW1lIiwgcGF0aC0+ZmQsIGZvbGxvd19zeW1saW5rcykpCiAgICAgICAgIGdvdG8gZXhpdDsKIAogI2lmICFkZWZpbmVkKEhBVkVfVVRJTUVOU0FUKQpAQCAtNDk5MiwxNyArNDc5NSwxNyBAQAogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocGF0aC53aWRlKQotICAgICAgICBoRmlsZSA9IENyZWF0ZUZpbGVXKHBhdGgud2lkZSwgRklMRV9XUklURV9BVFRSSUJVVEVTLCAwLAorICAgIGlmIChwYXRoLT53aWRlKQorICAgICAgICBoRmlsZSA9IENyZWF0ZUZpbGVXKHBhdGgtPndpZGUsIEZJTEVfV1JJVEVfQVRUUklCVVRFUywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBPUEVOX0VYSVNUSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKICAgICBlbHNlCi0gICAgICAgIGhGaWxlID0gQ3JlYXRlRmlsZUEocGF0aC5uYXJyb3csIEZJTEVfV1JJVEVfQVRUUklCVVRFUywgMCwKKyAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlQShwYXRoLT5uYXJyb3csIEZJTEVfV1JJVEVfQVRUUklCVVRFUywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBPUEVOX0VYSVNUSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNTAxMSw4ICs0ODE0LDggQEAKICAgICAgICAgYXRpbWUgPSBtdGltZTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHRpbWVfdF90b19GSUxFX1RJTUUodXRpbWUuYXRpbWVfcywgdXRpbWUuYXRpbWVfbnMsICZhdGltZSk7Ci0gICAgICAgIHRpbWVfdF90b19GSUxFX1RJTUUodXRpbWUubXRpbWVfcywgdXRpbWUubXRpbWVfbnMsICZtdGltZSk7CisgICAgICAgIF9QeV90aW1lX3RfdG9fRklMRV9USU1FKHV0aW1lLmF0aW1lX3MsIHV0aW1lLmF0aW1lX25zLCAmYXRpbWUpOworICAgICAgICBfUHlfdGltZV90X3RvX0ZJTEVfVElNRSh1dGltZS5tdGltZV9zLCB1dGltZS5tdGltZV9ucywgJm10aW1lKTsKICAgICB9CiAgICAgaWYgKCFTZXRGaWxlVGltZShoRmlsZSwgTlVMTCwgJmF0aW1lLCAmbXRpbWUpKSB7CiAgICAgICAgIC8qIEF2b2lkIHB1dHRpbmcgdGhlIGZpbGUgbmFtZSBpbnRvIHRoZSBlcnJvciBoZXJlLApAQCAtNTAyNywyMyArNDgzMCwyMyBAQAogCiAjaWYgVVRJTUVfSEFWRV9OT0ZPTExPV19TWU1MSU5LUwogICAgIGlmICgoIWZvbGxvd19zeW1saW5rcykgJiYgKGRpcl9mZCA9PSBERUZBVUxUX0RJUl9GRCkpCi0gICAgICAgIHJlc3VsdCA9IHV0aW1lX25vZm9sbG93X3N5bWxpbmtzKCZ1dGltZSwgcGF0aC5uYXJyb3cpOworICAgICAgICByZXN1bHQgPSB1dGltZV9ub2ZvbGxvd19zeW1saW5rcygmdXRpbWUsIHBhdGgtPm5hcnJvdyk7CiAgICAgZWxzZQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfRlVUSU1FU0FUKSB8fCBkZWZpbmVkKEhBVkVfVVRJTUVOU0FUKQogICAgIGlmICgoZGlyX2ZkICE9IERFRkFVTFRfRElSX0ZEKSB8fCAoIWZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJlc3VsdCA9IHV0aW1lX2Rpcl9mZCgmdXRpbWUsIGRpcl9mZCwgcGF0aC5uYXJyb3csIGZvbGxvd19zeW1saW5rcyk7CisgICAgICAgIHJlc3VsdCA9IHV0aW1lX2Rpcl9mZCgmdXRpbWUsIGRpcl9mZCwgcGF0aC0+bmFycm93LCBmb2xsb3dfc3ltbGlua3MpOwogICAgIGVsc2UKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX0ZVVElNRVMpIHx8IGRlZmluZWQoSEFWRV9GVVRJTUVOUykKLSAgICBpZiAocGF0aC5mZCAhPSAtMSkKLSAgICAgICAgcmVzdWx0ID0gdXRpbWVfZmQoJnV0aW1lLCBwYXRoLmZkKTsKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpCisgICAgICAgIHJlc3VsdCA9IHV0aW1lX2ZkKCZ1dGltZSwgcGF0aC0+ZmQpOwogICAgIGVsc2UKICNlbmRpZgogCi0gICAgcmVzdWx0ID0gdXRpbWVfZGVmYXVsdCgmdXRpbWUsIHBhdGgubmFycm93KTsKKyAgICByZXN1bHQgPSB1dGltZV9kZWZhdWx0KCZ1dGltZSwgcGF0aC0+bmFycm93KTsKIAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKQEAgLTUwNTksNyArNDg2Miw2IEBACiAgICAgcmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKIAogZXhpdDoKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoaEZpbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCiAgICAgICAgIENsb3NlSGFuZGxlKGhGaWxlKTsKQEAgLTUwNjksMTcgKzQ4NzEsMjAgQEAKIAogLyogUHJvY2VzcyBvcGVyYXRpb25zICovCiAKLVB5RG9jX1NUUlZBUihwb3NpeF9fZXhpdF9fZG9jX18sCi0iX2V4aXQoc3RhdHVzKVxuXG5cCi1FeGl0IHRvIHRoZSBzeXN0ZW0gd2l0aCBzcGVjaWZpZWQgc3RhdHVzLCB3aXRob3V0IG5vcm1hbCBleGl0IHByb2Nlc3NpbmcuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLl9leGl0CisKKyAgICBzdGF0dXM6IGludAorCitFeGl0IHRvIHRoZSBzeXN0ZW0gd2l0aCBzcGVjaWZpZWQgc3RhdHVzLCB3aXRob3V0IG5vcm1hbCBleGl0IHByb2Nlc3NpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9fZXhpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19fZXhpdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTE2ZTUyZDljMjI2MGQ1NCBpbnB1dD01ZTZkNTc1NTZiMGM0YTYyXSovCiB7Ci0gICAgaW50IHN0czsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6X2V4aXQiLCAmc3RzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgX2V4aXQoc3RzKTsKKyAgICBfZXhpdChzdGF0dXMpOwogICAgIHJldHVybiBOVUxMOyAvKiBNYWtlIGdjYyAtV2FsbCBoYXBweSAqLwogfQogCkBAIC01MjE3LDk2ICs1MDIyLDgyIEBACiB9CiAjZW5kaWYKIAorCiAjaWZkZWYgSEFWRV9FWEVDVgotUHlEb2NfU1RSVkFSKHBvc2l4X2V4ZWN2X19kb2NfXywKLSJleGVjdihwYXRoLCBhcmdzKVxuXG5cCi1FeGVjdXRlIGFuIGV4ZWN1dGFibGUgcGF0aCB3aXRoIGFyZ3VtZW50cywgcmVwbGFjaW5nIGN1cnJlbnQgcHJvY2Vzcy5cblwKLVxuXAotICAgIHBhdGg6IHBhdGggb2YgZXhlY3V0YWJsZSBmaWxlXG5cCi0gICAgYXJnczogdHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5leGVjdgorCisgICAgcGF0aDogRlNDb252ZXJ0ZXIKKyAgICAgICAgUGF0aCBvZiBleGVjdXRhYmxlIGZpbGUuCisgICAgYXJndjogb2JqZWN0CisgICAgICAgIFR1cGxlIG9yIGxpc3Qgb2Ygc3RyaW5ncy4KKyAgICAvCisKK0V4ZWN1dGUgYW4gZXhlY3V0YWJsZSBwYXRoIHdpdGggYXJndW1lbnRzLCByZXBsYWNpbmcgY3VycmVudCBwcm9jZXNzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZXhlY3YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfZXhlY3ZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcGF0aCwgUHlPYmplY3QgKmFyZ3YpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjIxZGMzNGRlZWI1YjAwNCBpbnB1dD05NjA0MTU1OTkyNWU1MjI5XSovCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3Y7CisgICAgY2hhciAqcGF0aF9jaGFyOwogICAgIGNoYXIgKiphcmd2bGlzdDsKICAgICBQeV9zc2l6ZV90IGFyZ2M7CiAKICAgICAvKiBleGVjdiBoYXMgdHdvIGFyZ3VtZW50czogKHBhdGgsIGFyZ3YpLCB3aGVyZQogICAgICAgIGFyZ3YgaXMgYSBsaXN0IG9yIHR1cGxlIG9mIHN0cmluZ3MuICovCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTzpleGVjdiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmYXJndikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKKyAgICBwYXRoX2NoYXIgPSBQeUJ5dGVzX0FzU3RyaW5nKHBhdGgpOwogICAgIGlmICghUHlMaXN0X0NoZWNrKGFyZ3YpICYmICFQeVR1cGxlX0NoZWNrKGFyZ3YpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhlY3YoKSBhcmcgMiBtdXN0IGJlIGEgdHVwbGUgb3IgbGlzdCIpOwotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgYXJnYyA9IFB5U2VxdWVuY2VfU2l6ZShhcmd2KTsKICAgICBpZiAoYXJnYyA8IDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleGVjdigpIGFyZyAyIG11c3Qgbm90IGJlIGVtcHR5Iik7Ci0gICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGFyZ3ZsaXN0ID0gcGFyc2VfYXJnbGlzdChhcmd2LCAmYXJnYyk7CiAgICAgaWYgKGFyZ3ZsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZXhlY3YocGF0aCwgYXJndmxpc3QpOworICAgIGV4ZWN2KHBhdGhfY2hhciwgYXJndmxpc3QpOwogCiAgICAgLyogSWYgd2UgZ2V0IGhlcmUgaXQncyBkZWZpbml0ZWx5IGFuIGVycm9yICovCiAKICAgICBmcmVlX3N0cmluZ19hcnJheShhcmd2bGlzdCwgYXJnYyk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X2V4ZWN2ZV9fZG9jX18sCi0iZXhlY3ZlKHBhdGgsIGFyZ3MsIGVudilcblxuXAotRXhlY3V0ZSBhIHBhdGggd2l0aCBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50LCByZXBsYWNpbmcgY3VycmVudCBwcm9jZXNzLlxuXAotXG5cCi0gICAgcGF0aDogcGF0aCBvZiBleGVjdXRhYmxlIGZpbGVcblwKLSAgICBhcmdzOiB0dXBsZSBvciBsaXN0IG9mIGFyZ3VtZW50c1xuXAotICAgIGVudjogZGljdGlvbmFyeSBvZiBzdHJpbmdzIG1hcHBpbmcgdG8gc3RyaW5nc1xuXAotXG5cCi1PbiBzb21lIHBsYXRmb3JtcywgeW91IG1heSBzcGVjaWZ5IGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGZvciBwYXRoO1xuXAotICBleGVjdmUgd2lsbCBleGVjdXRlIHRoZSBwcm9ncmFtIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgb3BlbiB0by5cblwKLSAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvci4iKTsKKworLypbY2xpbmljIGlucHV0XQorb3MuZXhlY3ZlCisKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9J1BBVEhfSEFWRV9GRVhFQ1ZFJykKKyAgICAgICAgUGF0aCBvZiBleGVjdXRhYmxlIGZpbGUuCisgICAgYXJndjogb2JqZWN0CisgICAgICAgIFR1cGxlIG9yIGxpc3Qgb2Ygc3RyaW5ncy4KKyAgICBlbnY6IG9iamVjdAorICAgICAgICBEaWN0aW9uYXJ5IG9mIHN0cmluZ3MgbWFwcGluZyB0byBzdHJpbmdzLgorCitFeGVjdXRlIGFuIGV4ZWN1dGFibGUgcGF0aCB3aXRoIGFyZ3VtZW50cywgcmVwbGFjaW5nIGN1cnJlbnQgcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2V4ZWN2ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19leGVjdmVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIFB5T2JqZWN0ICphcmd2LCBQeU9iamVjdCAqZW52KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZmOWZhOGU0ZGE4YmRlNTggaW5wdXQ9NjI2ODA0ZmEwOTI2MDZkOV0qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIFB5T2JqZWN0ICphcmd2LCAqZW52OwogICAgIGNoYXIgKiphcmd2bGlzdCA9IE5VTEw7CiAgICAgY2hhciAqKmVudmxpc3Q7CiAgICAgUHlfc3NpemVfdCBhcmdjLCBlbnZjOwotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImFyZ3YiLCAiZW52aXJvbm1lbnQiLCBOVUxMfTsKIAogICAgIC8qIGV4ZWN2ZSBoYXMgdGhyZWUgYXJndW1lbnRzOiAocGF0aCwgYXJndiwgZW52KSwgd2hlcmUKICAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzIGFuZCBlbnYgaXMgYSBkaWN0aW9uYXJ5CiAgICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJleGVjdmUiOwotI2lmZGVmIEhBVkVfRkVYRUNWRQotICAgIHBhdGguYWxsb3dfZmQgPSAxOwotI2VuZGlmCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPTzpleGVjdmUiLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJndiwgJmVudgotICAgICAgICAgICAgICAgICAgICAgICAgICApKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmICghUHlMaXN0X0NoZWNrKGFyZ3YpICYmICFQeVR1cGxlX0NoZWNrKGFyZ3YpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhlY3ZlOiBhcmd2IG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7CkBAIC01MzI5LDE1ICs1MTIwLDE1IEBACiAgICAgICAgIGdvdG8gZmFpbDsKIAogI2lmZGVmIEhBVkVfRkVYRUNWRQotICAgIGlmIChwYXRoLmZkID4gLTEpCi0gICAgICAgIGZleGVjdmUocGF0aC5mZCwgYXJndmxpc3QsIGVudmxpc3QpOworICAgIGlmIChwYXRoLT5mZCA+IC0xKQorICAgICAgICBmZXhlY3ZlKHBhdGgtPmZkLCBhcmd2bGlzdCwgZW52bGlzdCk7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIGV4ZWN2ZShwYXRoLm5hcnJvdywgYXJndmxpc3QsIGVudmxpc3QpOworICAgICAgICBleGVjdmUocGF0aC0+bmFycm93LCBhcmd2bGlzdCwgZW52bGlzdCk7CiAKICAgICAvKiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGRlZmluaXRlbHkgYW4gZXJyb3IgKi8KIAotICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgIHBhdGhfZXJyb3IocGF0aCk7CiAKICAgICB3aGlsZSAoLS1lbnZjID49IDApCiAgICAgICAgIFB5TWVtX0RFTChlbnZsaXN0W2VudmNdKTsKQEAgLTUzNDUsMjkgKzUxMzYsMzMgQEAKICAgZmFpbDoKICAgICBpZiAoYXJndmxpc3QpCiAgICAgICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBhcmdjKTsKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiBOVUxMOwogfQogI2VuZGlmIC8qIEhBVkVfRVhFQ1YgKi8KIAogCiAjaWZkZWYgSEFWRV9TUEFXTlYKLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZfX2RvY19fLAotInNwYXdudihtb2RlLCBwYXRoLCBhcmdzKVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdwYXRoJyBpbiBhIG5ldyBwcm9jZXNzLlxuXAotXG5cCi0gICAgbW9kZTogbW9kZSBvZiBwcm9jZXNzIGNyZWF0aW9uXG5cCi0gICAgcGF0aDogcGF0aCBvZiBleGVjdXRhYmxlIGZpbGVcblwKLSAgICBhcmdzOiB0dXBsZSBvciBsaXN0IG9mIHN0cmluZ3MiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNwYXdudgorCisgICAgbW9kZTogaW50CisgICAgICAgIE1vZGUgb2YgcHJvY2VzcyBjcmVhdGlvbi4KKyAgICBwYXRoOiBGU0NvbnZlcnRlcgorICAgICAgICBQYXRoIG9mIGV4ZWN1dGFibGUgZmlsZS4KKyAgICBhcmd2OiBvYmplY3QKKyAgICAgICAgVHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzLgorICAgIC8KKworRXhlY3V0ZSB0aGUgcHJvZ3JhbSBzcGVjaWZpZWQgYnkgcGF0aCBpbiBhIG5ldyBwcm9jZXNzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3Bhd252KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3NwYXdudl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBtb2RlLCBQeU9iamVjdCAqcGF0aCwgUHlPYmplY3QgKmFyZ3YpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzQyN2MwY2U0MGYxMDYzOCBpbnB1dD0wNDJjOTFkZmMxZTZkZWJjXSovCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3Y7CisgICAgY2hhciAqcGF0aF9jaGFyOwogICAgIGNoYXIgKiphcmd2bGlzdDsKLSAgICBpbnQgbW9kZSwgaTsKKyAgICBpbnQgaTsKICAgICBQeV9zc2l6ZV90IGFyZ2M7CiAgICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7CiAgICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7CkBAIC01Mzc1LDExICs1MTcwLDcgQEAKICAgICAvKiBzcGF3bnYgaGFzIHRocmVlIGFyZ3VtZW50czogKG1vZGUsIHBhdGgsIGFyZ3YpLCB3aGVyZQogICAgICAgIGFyZ3YgaXMgYSBsaXN0IG9yIHR1cGxlIG9mIHN0cmluZ3MuICovCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPJk86c3Bhd252IiwgJm1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmYXJndikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKKyAgICBwYXRoX2NoYXIgPSBQeUJ5dGVzX0FzU3RyaW5nKHBhdGgpOwogICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKICAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwogICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07CkBAIC01MzkxLDEzICs1MTgyLDExIEBACiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252KCkgYXJnIDIgbXVzdCBiZSBhIHR1cGxlIG9yIGxpc3QiKTsKLSAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgYXJndmxpc3QgPSBQeU1lbV9ORVcoY2hhciAqLCBhcmdjKzEpOwogICAgIGlmIChhcmd2bGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CkBAIC01NDA3LDcgKzUxOTYsNiBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAic3Bhd252KCkgYXJnIDIgbXVzdCBjb250YWluIG9ubHkgc3RyaW5ncyIpOwotICAgICAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtNTQxNywxMSArNTIwNSwxMCBAQAogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IF9zcGF3bnYobW9kZSwgcGF0aCwgYXJndmxpc3QpOworICAgIHNwYXdudmFsID0gX3NwYXdudihtb2RlLCBwYXRoX2NoYXIsIGFyZ3ZsaXN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwpAQCAtNTQzMCwyNSArNTIxNywzMSBAQAogfQogCiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZlX19kb2NfXywKLSJzcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3MsIGVudilcblxuXAotRXhlY3V0ZSB0aGUgcHJvZ3JhbSAncGF0aCcgaW4gYSBuZXcgcHJvY2Vzcy5cblwKLVxuXAotICAgIG1vZGU6IG1vZGUgb2YgcHJvY2VzcyBjcmVhdGlvblxuXAotICAgIHBhdGg6IHBhdGggb2YgZXhlY3V0YWJsZSBmaWxlXG5cCi0gICAgYXJnczogdHVwbGUgb3IgbGlzdCBvZiBhcmd1bWVudHNcblwKLSAgICBlbnY6IGRpY3Rpb25hcnkgb2Ygc3RyaW5ncyBtYXBwaW5nIHRvIHN0cmluZ3MiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNwYXdudmUKKworICAgIG1vZGU6IGludAorICAgICAgICBNb2RlIG9mIHByb2Nlc3MgY3JlYXRpb24uCisgICAgcGF0aDogRlNDb252ZXJ0ZXIKKyAgICAgICAgUGF0aCBvZiBleGVjdXRhYmxlIGZpbGUuCisgICAgYXJndjogb2JqZWN0CisgICAgICAgIFR1cGxlIG9yIGxpc3Qgb2Ygc3RyaW5ncy4KKyAgICBlbnY6IG9iamVjdAorICAgICAgICBEaWN0aW9uYXJ5IG9mIHN0cmluZ3MgbWFwcGluZyB0byBzdHJpbmdzLgorICAgIC8KKworRXhlY3V0ZSB0aGUgcHJvZ3JhbSBzcGVjaWZpZWQgYnkgcGF0aCBpbiBhIG5ldyBwcm9jZXNzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3Bhd252ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zcGF3bnZlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG1vZGUsIFB5T2JqZWN0ICpwYXRoLCBQeU9iamVjdCAqYXJndiwKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZW52KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWViY2ZhNWY3YmEyZjQyMTkgaW5wdXQ9MDIzNjJmZDkzNzk2M2Y4Zl0qLwogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOwotICAgIFB5T2JqZWN0ICphcmd2LCAqZW52OworICAgIGNoYXIgKnBhdGhfY2hhcjsKICAgICBjaGFyICoqYXJndmxpc3Q7CiAgICAgY2hhciAqKmVudmxpc3Q7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgaW50IG1vZGU7CiAgICAgUHlfc3NpemVfdCBhcmdjLCBpLCBlbnZjOwogICAgIFB5X2ludHB0cl90IHNwYXdudmFsOwogICAgIFB5T2JqZWN0ICooKmdldGl0ZW0pKFB5T2JqZWN0ICosIFB5X3NzaXplX3QpOwpAQCAtNTQ1OCwxMSArNTI1MSw3IEBACiAgICAgICAgYXJndiBpcyBhIGxpc3Qgb3IgdHVwbGUgb2Ygc3RyaW5ncyBhbmQgZW52IGlzIGEgZGljdGlvbmFyeQogICAgICAgIGxpa2UgcG9zaXguZW52aXJvbi4gKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU8mT086c3Bhd252ZSIsICZtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmFyZ3YsICZlbnYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CisgICAgcGF0aF9jaGFyID0gUHlCeXRlc19Bc1N0cmluZyhwYXRoKTsKICAgICBpZiAoUHlMaXN0X0NoZWNrKGFyZ3YpKSB7CiAgICAgICAgIGFyZ2MgPSBQeUxpc3RfU2l6ZShhcmd2KTsKICAgICAgICAgZ2V0aXRlbSA9IFB5TGlzdF9HZXRJdGVtOwpAQCAtNTUwNiw3ICs1Mjk1LDcgQEAKICAgICAgICAgbW9kZSA9IF9QX09WRVJMQVk7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3Bhd252YWwgPSBfc3Bhd252ZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7CisgICAgc3Bhd252YWwgPSBfc3Bhd252ZShtb2RlLCBwYXRoX2NoYXIsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHNwYXdudmFsID09IC0xKQpAQCAtNTUyMCw3ICs1MzA5LDYgQEAKICAgZmFpbF8xOgogICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBsYXN0YXJnKTsKICAgZmFpbF8wOgotICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgcmV0dXJuIHJlczsKIH0KIApAQCAtNTUyOCwxNCArNTMxNiwxNyBAQAogCiAKICNpZmRlZiBIQVZFX0ZPUksxCi1QeURvY19TVFJWQVIocG9zaXhfZm9yazFfX2RvY19fLAotImZvcmsxKCkgLT4gcGlkXG5cblwKLUZvcmsgYSBjaGlsZCBwcm9jZXNzIHdpdGggYSBzaW5nbGUgbXVsdGlwbGV4ZWQgKGkuZS4sIG5vdCBib3VuZCkgdGhyZWFkLlxuXAotXG5cCi1SZXR1cm4gMCB0byBjaGlsZCBwcm9jZXNzIGFuZCBQSUQgb2YgY2hpbGQgdG8gcGFyZW50IHByb2Nlc3MuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5mb3JrMQorCitGb3JrIGEgY2hpbGQgcHJvY2VzcyB3aXRoIGEgc2luZ2xlIG11bHRpcGxleGVkIChpLmUuLCBub3QgYm91bmQpIHRocmVhZC4KKworUmV0dXJuIDAgdG8gY2hpbGQgcHJvY2VzcyBhbmQgUElEIG9mIGNoaWxkIHRvIHBhcmVudCBwcm9jZXNzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZm9yazEoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19mb3JrMV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGRlOGU2N2NlMmEzMTBiYyBpbnB1dD0xMmRiMDIxNjc4OTM5MjZlXSovCiB7CiAgICAgcGlkX3QgcGlkOwogICAgIGludCByZXN1bHQgPSAwOwpAQCAtNTU1OCwxNyArNTM0OSwyMSBAQAogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21QaWQocGlkKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfRk9SSzEgKi8KIAogCiAjaWZkZWYgSEFWRV9GT1JLCi1QeURvY19TVFJWQVIocG9zaXhfZm9ya19fZG9jX18sCi0iZm9yaygpIC0+IHBpZFxuXG5cCi1Gb3JrIGEgY2hpbGQgcHJvY2Vzcy5cblwKLVJldHVybiAwIHRvIGNoaWxkIHByb2Nlc3MgYW5kIFBJRCBvZiBjaGlsZCB0byBwYXJlbnQgcHJvY2Vzcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmZvcmsKKworRm9yayBhIGNoaWxkIHByb2Nlc3MuCisKK1JldHVybiAwIHRvIGNoaWxkIHByb2Nlc3MgYW5kIFBJRCBvZiBjaGlsZCB0byBwYXJlbnQgcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2ZvcmsoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19mb3JrX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zNjI2YzgxZjk4OTg1ZDQ5IGlucHV0PTEzYzk1NjQxMzExMGVlYWFdKi8KIHsKICAgICBwaWRfdCBwaWQ7CiAgICAgaW50IHJlc3VsdCA9IDA7CkBAIC01NTkxLDkyICs1Mzg2LDEwNiBAQAogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21QaWQocGlkKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfRk9SSyAqLworCiAKICNpZmRlZiBIQVZFX1NDSEVEX0gKLQogI2lmZGVmIEhBVkVfU0NIRURfR0VUX1BSSU9SSVRZX01BWAorLypbY2xpbmljIGlucHV0XQorb3Muc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogCi1QeURvY19TVFJWQVIocG9zaXhfc2NoZWRfZ2V0X3ByaW9yaXR5X21heF9fZG9jX18sCi0ic2NoZWRfZ2V0X3ByaW9yaXR5X21heChwb2xpY3kpXG5cblwKLUdldCB0aGUgbWF4aW11bSBzY2hlZHVsaW5nIHByaW9yaXR5IGZvciAqcG9saWN5Ki4iKTsKKyAgICBwb2xpY3k6IGludAorCitHZXQgdGhlIG1heGltdW0gc2NoZWR1bGluZyBwcmlvcml0eSBmb3IgcG9saWN5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc2NoZWRfZ2V0X3ByaW9yaXR5X21heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHBvbGljeSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ZTQ2NWM2ZTQzMTMwNTIxIGlucHV0PTIwOTdiNzk5OGVjYTY4NzRdKi8KIHsKLSAgICBpbnQgcG9saWN5LCBtYXg7CisgICAgaW50IG1heDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IiwgJnBvbGljeSkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIG1heCA9IHNjaGVkX2dldF9wcmlvcml0eV9tYXgocG9saWN5KTsKICAgICBpZiAobWF4IDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhtYXgpOwogfQogCi1QeURvY19TVFJWQVIocG9zaXhfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbl9fZG9jX18sCi0ic2NoZWRfZ2V0X3ByaW9yaXR5X21pbihwb2xpY3kpXG5cblwKLUdldCB0aGUgbWluaW11bSBzY2hlZHVsaW5nIHByaW9yaXR5IGZvciAqcG9saWN5Ki4iKTsKKworLypbY2xpbmljIGlucHV0XQorb3Muc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorCisgICAgcG9saWN5OiBpbnQKKworR2V0IHRoZSBtaW5pbXVtIHNjaGVkdWxpbmcgcHJpb3JpdHkgZm9yIHBvbGljeS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NjaGVkX2dldF9wcmlvcml0eV9taW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3Nfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBwb2xpY3kpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzU5NWMxMTM4Y2M0N2E2ZCBpbnB1dD0yMWJjOGZhMGQ3MDk4M2JmXSovCiB7Ci0gICAgaW50IHBvbGljeSwgbWluOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNjaGVkX2dldF9wcmlvcml0eV9taW4iLCAmcG9saWN5KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbWluID0gc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihwb2xpY3kpOworICAgIGludCBtaW4gPSBzY2hlZF9nZXRfcHJpb3JpdHlfbWluKHBvbGljeSk7CiAgICAgaWYgKG1pbiA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobWluKTsKIH0KLQogI2VuZGlmIC8qIEhBVkVfU0NIRURfR0VUX1BSSU9SSVRZX01BWCAqLwogCi0jaWZkZWYgSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIKIAotUHlEb2NfU1RSVkFSKHBvc2l4X3NjaGVkX2dldHNjaGVkdWxlcl9fZG9jX18sCi0ic2NoZWRfZ2V0c2NoZWR1bGVyKHBpZClcblxuXAotR2V0IHRoZSBzY2hlZHVsaW5nIHBvbGljeSBmb3IgdGhlIHByb2Nlc3Mgd2l0aCBhIFBJRCBvZiAqcGlkKi5cblwKLVBhc3NpbmcgYSBQSUQgb2YgMCByZXR1cm5zIHRoZSBzY2hlZHVsaW5nIHBvbGljeSBmb3IgdGhlIGNhbGxpbmcgcHJvY2Vzcy4iKTsKKyNpZmRlZiBIQVZFX1NDSEVEX1NFVFNDSEVEVUxFUgorLypbY2xpbmljIGlucHV0XQorb3Muc2NoZWRfZ2V0c2NoZWR1bGVyCisgICAgcGlkOiBwaWRfdAorICAgIC8KKworR2V0IHRoZSBzY2hlZHVsaW5nIHBvbGljeSBmb3IgdGhlIHByb2Nlc3MgaWRlbnRpZmllZHkgYnkgcGlkLgorCitQYXNzaW5nIDAgZm9yIHBpZCByZXR1cm5zIHRoZSBzY2hlZHVsaW5nIHBvbGljeSBmb3IgdGhlIGNhbGxpbmcgcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NjaGVkX2dldHNjaGVkdWxlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zY2hlZF9nZXRzY2hlZHVsZXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGNlNGMwYmQzZjFiMzRjOCBpbnB1dD01ZjE0Y2ZkMWYxODllMWEwXSovCiB7Ci0gICAgcGlkX3QgcGlkOwogICAgIGludCBwb2xpY3k7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiOnNjaGVkX2dldHNjaGVkdWxlciIsICZwaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwb2xpY3kgPSBzY2hlZF9nZXRzY2hlZHVsZXIocGlkKTsKICAgICBpZiAocG9saWN5IDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhwb2xpY3kpOwogfQorI2VuZGlmIC8qIEhBVkVfU0NIRURfU0VUU0NIRURVTEVSICovCiAKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFNDSEVEVUxFUikgfHwgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFBBUkFNKQorLypbY2xpbmljIGlucHV0XQorY2xhc3Mgb3Muc2NoZWRfcGFyYW0gIlB5T2JqZWN0ICoiICImU2NoZWRQYXJhbVR5cGUiCisKK0BjbGFzc21ldGhvZAorb3Muc2NoZWRfcGFyYW0uX19uZXdfXworCisgICAgc2NoZWRfcHJpb3JpdHk6IG9iamVjdAorICAgICAgICBBIHNjaGVkdWxpbmcgcGFyYW1ldGVyLgorCitDdXJyZW50IGhhcyBvbmx5IG9uZSBmaWVsZDogc2NoZWRfcHJpb3JpdHkiKTsKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXNjaGVkX3BhcmFtX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3Nfc2NoZWRfcGFyYW1faW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpzY2hlZF9wcmlvcml0eSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00OGY0MDY3ZDYwZjQ4YzEzIGlucHV0PTczYTRjMjJmNzA3MWZjNjJdKi8KIHsKLSAgICBQeU9iamVjdCAqcmVzLCAqcHJpb3JpdHk7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzY2hlZF9wcmlvcml0eSIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpyZXM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPOnNjaGVkX3BhcmFtIiwga3dsaXN0LCAmcHJpb3JpdHkpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXMgPSBQeVN0cnVjdFNlcXVlbmNlX05ldyh0eXBlKTsKICAgICBpZiAoIXJlcykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfSU5DUkVGKHByaW9yaXR5KTsKLSAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHJlcywgMCwgcHJpb3JpdHkpOworICAgIFB5X0lOQ1JFRihzY2hlZF9wcmlvcml0eSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShyZXMsIDAsIHNjaGVkX3ByaW9yaXR5KTsKICAgICByZXR1cm4gcmVzOwogfQogCi1QeURvY19TVFJWQVIoc2NoZWRfcGFyYW1fX2RvY19fLAotInNjaGVkX3BhcmFtKHNjaGVkX3ByaW9yaXR5KTogQSBzY2hlZHVsaW5nIHBhcmFtZXRlci5cblxuXAotQ3VycmVudCBoYXMgb25seSBvbmUgZmllbGQ6IHNjaGVkX3ByaW9yaXR5Iik7CisKK1B5RG9jX1ZBUihvc19zY2hlZF9wYXJhbV9fZG9jX18pOwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBzY2hlZF9wYXJhbV9maWVsZHNbXSA9IHsKICAgICB7InNjaGVkX3ByaW9yaXR5IiwgInRoZSBzY2hlZHVsaW5nIHByaW9yaXR5In0sCkBAIC01Njg1LDcgKzU0OTQsNyBAQAogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIHNjaGVkX3BhcmFtX2Rlc2MgPSB7CiAgICAgInNjaGVkX3BhcmFtIiwgLyogbmFtZSAqLwotICAgIHNjaGVkX3BhcmFtX19kb2NfXywgLyogZG9jICovCisgICAgb3Nfc2NoZWRfcGFyYW1fX2RvY19fLCAvKiBkb2MgKi8KICAgICBzY2hlZF9wYXJhbV9maWVsZHMsCiAgICAgMQogfTsKQEAgLTU3MDksMTE4ICs1NTE4LDEzNCBAQAogICAgIHJlcy0+c2NoZWRfcHJpb3JpdHkgPSBQeV9TQUZFX0RPV05DQVNUKHByaW9yaXR5LCBsb25nLCBpbnQpOwogICAgIHJldHVybiAxOwogfQorI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIpIHx8IGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRQQVJBTSkgKi8KIAotI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NDSEVEX1NFVFNDSEVEVUxFUgorLypbY2xpbmljIGlucHV0XQorb3Muc2NoZWRfc2V0c2NoZWR1bGVyCiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zY2hlZF9zZXRzY2hlZHVsZXJfX2RvY19fLAotInNjaGVkX3NldHNjaGVkdWxlcihwaWQsIHBvbGljeSwgcGFyYW0pXG5cblwKLVNldCB0aGUgc2NoZWR1bGluZyBwb2xpY3ksICpwb2xpY3kqLCBmb3IgKnBpZCouXG5cCi1JZiAqcGlkKiBpcyAwLCB0aGUgY2FsbGluZyBwcm9jZXNzIGlzIGNoYW5nZWQuXG5cCi0qcGFyYW0qIGlzIGFuIGluc3RhbmNlIG9mIHNjaGVkX3BhcmFtLiIpOworICAgIHBpZDogcGlkX3QKKyAgICBwb2xpY3k6IGludAorICAgIHBhcmFtOiBzY2hlZF9wYXJhbQorICAgIC8KKworU2V0IHRoZSBzY2hlZHVsaW5nIHBvbGljeSBmb3IgdGhlIHByb2Nlc3MgaWRlbnRpZmllZCBieSBwaWQuCisKK0lmIHBpZCBpcyAwLCB0aGUgY2FsbGluZyBwcm9jZXNzIGlzIGNoYW5nZWQuCitwYXJhbSBpcyBhbiBpbnN0YW5jZSBvZiBzY2hlZF9wYXJhbS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NjaGVkX3NldHNjaGVkdWxlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zY2hlZF9zZXRzY2hlZHVsZXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQsIGludCBwb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWIwYWMwYTcwZDNiMWQ3MDUgaW5wdXQ9YzU4MWY5NDY5YTUzMjdkZF0qLwogewotICAgIHBpZF90IHBpZDsKLSAgICBpbnQgcG9saWN5OwotICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpTyY6c2NoZWRfc2V0c2NoZWR1bGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpZCwgJnBvbGljeSwgJmNvbnZlcnRfc2NoZWRfcGFyYW0sICZwYXJhbSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgLyoKICAgICAqKiBzY2hlZF9zZXRzY2hlZHVsZXIoKSByZXR1cm5zIDAgaW4gTGludXgsIGJ1dCB0aGUgcHJldmlvdXMKICAgICAqKiBzY2hlZHVsaW5nIHBvbGljeSB1bmRlciBTb2xhcmlzL0lsbHVtb3MsIGFuZCBvdGhlcnMuCiAgICAgKiogT24gZXJyb3IsIC0xIGlzIHJldHVybmVkIGluIGFsbCBPcGVyYXRpbmcgU3lzdGVtcy4KICAgICAqLwotICAgIGlmIChzY2hlZF9zZXRzY2hlZHVsZXIocGlkLCBwb2xpY3ksICZwYXJhbSkgPT0gLTEpCisgICAgaWYgKHNjaGVkX3NldHNjaGVkdWxlcihwaWQsIHBvbGljeSwgcGFyYW0pID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KKyNlbmRpZiAgLyogSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIqLwogCi0jZW5kaWYKIAogI2lmZGVmIEhBVkVfU0NIRURfU0VUUEFSQU0KKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNjaGVkX2dldHBhcmFtCisgICAgcGlkOiBwaWRfdAorICAgIC8KIAotUHlEb2NfU1RSVkFSKHBvc2l4X3NjaGVkX2dldHBhcmFtX19kb2NfXywKLSJzY2hlZF9nZXRwYXJhbShwaWQpIC0+IHNjaGVkX3BhcmFtXG5cblwKLVJldHVybnMgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgcHJvY2VzcyB3aXRoICpwaWQqIGFzIGFuIGluc3RhbmNlIG9mIHRoZVxuXAotc2NoZWRfcGFyYW0gY2xhc3MuIEEgUElEIG9mIDAgbWVhbnMgdGhlIGNhbGxpbmcgcHJvY2Vzcy4iKTsKK1JldHVybnMgc2NoZWR1bGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHBpZC4KKworSWYgcGlkIGlzIDAsIHJldHVybnMgcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxpbmcgcHJvY2Vzcy4KK1JldHVybiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiBzY2hlZF9wYXJhbS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NjaGVkX2dldHBhcmFtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3NjaGVkX2dldHBhcmFtX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGlkX3QgcGlkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWIxOTRlODcwOGRjZjJkYjggaW5wdXQ9MThhMWVmOWMyZWZhZTI5Nl0qLwogewotICAgIHBpZF90IHBpZDsKICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07Ci0gICAgUHlPYmplY3QgKnJlcywgKnByaW9yaXR5OworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKnByaW9yaXR5OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIjpzY2hlZF9nZXRwYXJhbSIsICZwaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2NoZWRfZ2V0cGFyYW0ocGlkLCAmcGFyYW0pKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXMgPSBQeVN0cnVjdFNlcXVlbmNlX05ldygmU2NoZWRQYXJhbVR5cGUpOwotICAgIGlmICghcmVzKQorICAgIHJlc3VsdCA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZTY2hlZFBhcmFtVHlwZSk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHByaW9yaXR5ID0gUHlMb25nX0Zyb21Mb25nKHBhcmFtLnNjaGVkX3ByaW9yaXR5KTsKICAgICBpZiAoIXByaW9yaXR5KSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0ocmVzLCAwLCBwcmlvcml0eSk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHJlc3VsdCwgMCwgcHJpb3JpdHkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zY2hlZF9zZXRwYXJhbV9fZG9jX18sCi0ic2NoZWRfc2V0cGFyYW0ocGlkLCBwYXJhbSlcblxuXAotU2V0IHNjaGVkdWxpbmcgcGFyYW1ldGVycyBmb3IgYSBwcm9jZXNzIHdpdGggUElEICpwaWQqLlxuXAotQSBQSUQgb2YgMCBtZWFucyB0aGUgY2FsbGluZyBwcm9jZXNzLiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy5zY2hlZF9zZXRwYXJhbQorICAgIHBpZDogcGlkX3QKKyAgICBwYXJhbTogc2NoZWRfcGFyYW0KKyAgICAvCisKK1NldCBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIHRoZSBwcm9jZXNzIGlkZW50aWZpZWQgYnkgcGlkLgorCitJZiBwaWQgaXMgMCwgc2V0cyBwYXJhbWV0ZXJzIGZvciB0aGUgY2FsbGluZyBwcm9jZXNzLgorcGFyYW0gc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIHNjaGVkX3BhcmFtLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc2NoZWRfc2V0cGFyYW0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3Nfc2NoZWRfc2V0cGFyYW1faW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OGFmMDEzZjc4YTMyYjU5MSBpbnB1dD02YjhkNmRmY2VjZGMyMWJkXSovCiB7Ci0gICAgcGlkX3QgcGlkOwotICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJPJjpzY2hlZF9zZXRwYXJhbSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZwaWQsICZjb252ZXJ0X3NjaGVkX3BhcmFtLCAmcGFyYW0pKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoc2NoZWRfc2V0cGFyYW0ocGlkLCAmcGFyYW0pKQorICAgIGlmIChzY2hlZF9zZXRwYXJhbShwaWQsIHBhcmFtKSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CisjZW5kaWYgLyogSEFWRV9TQ0hFRF9TRVRQQVJBTSAqLwogCi0jZW5kaWYKIAogI2lmZGVmIEhBVkVfU0NIRURfUlJfR0VUX0lOVEVSVkFMCisvKltjbGluaWMgaW5wdXRdCitvcy5zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgLT4gZG91YmxlCisgICAgcGlkOiBwaWRfdAorICAgIC8KIAotUHlEb2NfU1RSVkFSKHBvc2l4X3NjaGVkX3JyX2dldF9pbnRlcnZhbF9fZG9jX18sCi0ic2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZCkgLT4gZmxvYXRcblxuXAotUmV0dXJuIHRoZSByb3VuZC1yb2JpbiBxdWFudHVtIGZvciB0aGUgcHJvY2VzcyB3aXRoIFBJRCAqcGlkKiBpbiBzZWNvbmRzLiIpOworUmV0dXJuIHRoZSByb3VuZC1yb2JpbiBxdWFudHVtIGZvciB0aGUgcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHBpZCwgaW4gc2Vjb25kcy4KIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NjaGVkX3JyX2dldF9pbnRlcnZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitWYWx1ZSByZXR1cm5lZCBpcyBhIGZsb2F0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgZG91YmxlCitvc19zY2hlZF9ycl9nZXRfaW50ZXJ2YWxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwaWRfdCBwaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2UyZDkzNTgzM2FiNDdkYyBpbnB1dD0yYTk3M2RhMTVjY2E2ZmFlXSovCiB7Ci0gICAgcGlkX3QgcGlkOwogICAgIHN0cnVjdCB0aW1lc3BlYyBpbnRlcnZhbDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICI6c2NoZWRfcnJfZ2V0X2ludGVydmFsIiwgJnBpZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkLCAmaW50ZXJ2YWwpKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKChkb3VibGUpaW50ZXJ2YWwudHZfc2VjICsgMWUtOSppbnRlcnZhbC50dl9uc2VjKTsKKyAgICBpZiAoc2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZCwgJmludGVydmFsKSkgeworICAgICAgICBwb3NpeF9lcnJvcigpOworICAgICAgICByZXR1cm4gLTEuMDsKKyAgICB9CisgICAgcmV0dXJuIChkb3VibGUpaW50ZXJ2YWwudHZfc2VjICsgMWUtOSppbnRlcnZhbC50dl9uc2VjOwogfQorI2VuZGlmIC8qIEhBVkVfU0NIRURfUlJfR0VUX0lOVEVSVkFMICovCiAKLSNlbmRpZgogCi1QeURvY19TVFJWQVIocG9zaXhfc2NoZWRfeWllbGRfX2RvY19fLAotInNjaGVkX3lpZWxkKClcblxuXAotVm9sdW50YXJpbHkgcmVsaW5xdWlzaCB0aGUgQ1BVLiIpOworLypbY2xpbmljIGlucHV0XQorb3Muc2NoZWRfeWllbGQKKworVm9sdW50YXJpbHkgcmVsaW5xdWlzaCB0aGUgQ1BVLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc2NoZWRfeWllbGQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19zY2hlZF95aWVsZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTAyMzIzNTAwZjIyMmNhYyBpbnB1dD1lNTRkNmY5ODE4OTM5MWQ0XSovCiB7CiAgICAgaWYgKHNjaGVkX3lpZWxkKCkpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwpAQCAtNTgyOCwzOSArNTY1Myw0MSBAQAogfQogCiAjaWZkZWYgSEFWRV9TQ0hFRF9TRVRBRkZJTklUWQotCiAvKiBUaGUgbWluaW11bSBudW1iZXIgb2YgQ1BVcyBhbGxvY2F0ZWQgaW4gYSBjcHVfc2V0X3QgKi8KIHN0YXRpYyBjb25zdCBpbnQgTkNQVVNfU1RBUlQgPSBzaXplb2YodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVDsKIAotUHlEb2NfU1RSVkFSKHBvc2l4X3NjaGVkX3NldGFmZmluaXR5X19kb2NfXywKLSJzY2hlZF9zZXRhZmZpbml0eShwaWQsIGNwdV9zZXQpXG5cblwKLVNldCB0aGUgYWZmaW5pdHkgb2YgdGhlIHByb2Nlc3Mgd2l0aCBQSUQgKnBpZCogdG8gKmNwdV9zZXQqLiIpOworLypbY2xpbmljIGlucHV0XQorb3Muc2NoZWRfc2V0YWZmaW5pdHkKKyAgICBwaWQ6IHBpZF90CisgICAgbWFzayA6IG9iamVjdAorICAgIC8KKworU2V0IHRoZSBDUFUgYWZmaW5pdHkgb2YgdGhlIHByb2Nlc3MgaWRlbnRpZmllZCBieSBwaWQgdG8gbWFzay4KKworbWFzayBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgaW50ZWdlcnMgaWRlbnRpZnlpbmcgQ1BVcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NjaGVkX3NldGFmZmluaXR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3NjaGVkX3NldGFmZmluaXR5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGlkX3QgcGlkLCBQeU9iamVjdCAqbWFzaykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04ODJkN2RkOWEyMjkzMzViIGlucHV0PWEwNzkxYTU5N2M3MDg1YmFdKi8KIHsKLSAgICBwaWRfdCBwaWQ7CiAgICAgaW50IG5jcHVzOwogICAgIHNpemVfdCBzZXRzaXplOwotICAgIGNwdV9zZXRfdCAqbWFzayA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKml0ZXJhYmxlLCAqaXRlcmF0b3IgPSBOVUxMLCAqaXRlbTsKKyAgICBjcHVfc2V0X3QgKmNwdV9zZXQgPSBOVUxMOworICAgIFB5T2JqZWN0ICppdGVyYXRvciA9IE5VTEwsICppdGVtOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIk86c2NoZWRfc2V0YWZmaW5pdHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlkLCAmaXRlcmFibGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGl0ZXJhdG9yID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CisgICAgaXRlcmF0b3IgPSBQeU9iamVjdF9HZXRJdGVyKG1hc2spOwogICAgIGlmIChpdGVyYXRvciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIG5jcHVzID0gTkNQVVNfU1RBUlQ7CiAgICAgc2V0c2l6ZSA9IENQVV9BTExPQ19TSVpFKG5jcHVzKTsKLSAgICBtYXNrID0gQ1BVX0FMTE9DKG5jcHVzKTsKLSAgICBpZiAobWFzayA9PSBOVUxMKSB7CisgICAgY3B1X3NldCA9IENQVV9BTExPQyhuY3B1cyk7CisgICAgaWYgKGNwdV9zZXQgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBDUFVfWkVST19TKHNldHNpemUsIG1hc2spOworICAgIENQVV9aRVJPX1Moc2V0c2l6ZSwgY3B1X3NldCk7CiAKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdGVyYXRvcikpKSB7CiAgICAgICAgIGxvbmcgY3B1OwpAQCAtNTkwMSw0OCArNTcyOCw1MCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbmV3c2V0c2l6ZSA9IENQVV9BTExPQ19TSVpFKG5ld25jcHVzKTsKICAgICAgICAgICAgIENQVV9aRVJPX1MobmV3c2V0c2l6ZSwgbmV3bWFzayk7Ci0gICAgICAgICAgICBtZW1jcHkobmV3bWFzaywgbWFzaywgc2V0c2l6ZSk7Ci0gICAgICAgICAgICBDUFVfRlJFRShtYXNrKTsKKyAgICAgICAgICAgIG1lbWNweShuZXdtYXNrLCBjcHVfc2V0LCBzZXRzaXplKTsKKyAgICAgICAgICAgIENQVV9GUkVFKGNwdV9zZXQpOwogICAgICAgICAgICAgc2V0c2l6ZSA9IG5ld3NldHNpemU7Ci0gICAgICAgICAgICBtYXNrID0gbmV3bWFzazsKKyAgICAgICAgICAgIGNwdV9zZXQgPSBuZXdtYXNrOwogICAgICAgICAgICAgbmNwdXMgPSBuZXduY3B1czsKICAgICAgICAgfQotICAgICAgICBDUFVfU0VUX1MoY3B1LCBzZXRzaXplLCBtYXNrKTsKKyAgICAgICAgQ1BVX1NFVF9TKGNwdSwgc2V0c2l6ZSwgY3B1X3NldCk7CiAgICAgfQogICAgIFB5X0NMRUFSKGl0ZXJhdG9yKTsKIAotICAgIGlmIChzY2hlZF9zZXRhZmZpbml0eShwaWQsIHNldHNpemUsIG1hc2spKSB7CisgICAgaWYgKHNjaGVkX3NldGFmZmluaXR5KHBpZCwgc2V0c2l6ZSwgY3B1X3NldCkpIHsKICAgICAgICAgcG9zaXhfZXJyb3IoKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgQ1BVX0ZSRUUobWFzayk7CisgICAgQ1BVX0ZSRUUoY3B1X3NldCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiAKIGVycm9yOgotICAgIGlmIChtYXNrKQotICAgICAgICBDUFVfRlJFRShtYXNrKTsKKyAgICBpZiAoY3B1X3NldCkKKyAgICAgICAgQ1BVX0ZSRUUoY3B1X3NldCk7CiAgICAgUHlfWERFQ1JFRihpdGVyYXRvcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zY2hlZF9nZXRhZmZpbml0eV9fZG9jX18sCi0ic2NoZWRfZ2V0YWZmaW5pdHkocGlkLCBuY3B1cykgLT4gY3B1X3NldFxuXG5cCi1SZXR1cm4gdGhlIGFmZmluaXR5IG9mIHRoZSBwcm9jZXNzIHdpdGggUElEICpwaWQqLlxuXAotVGhlIHJldHVybmVkIGNwdV9zZXQgd2lsbCBiZSBvZiBzaXplICpuY3B1cyouIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNjaGVkX2dldGFmZmluaXR5CisgICAgcGlkOiBwaWRfdAorICAgIC8KKworUmV0dXJuIHRoZSBhZmZpbml0eSBvZiB0aGUgcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHBpZC4KKworVGhlIGFmZmluaXR5IGlzIHJldHVybmVkIGFzIGEgc2V0IG9mIENQVSBpZGVudGlmaWVycy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NjaGVkX2dldGFmZmluaXR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3NjaGVkX2dldGFmZmluaXR5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGlkX3QgcGlkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWY3MjZmMmMxOTNjMTdhNGYgaW5wdXQ9ZWFmMTYxOTM2ODc0YjhhMV0qLwogewotICAgIHBpZF90IHBpZDsKICAgICBpbnQgY3B1LCBuY3B1cywgY291bnQ7CiAgICAgc2l6ZV90IHNldHNpemU7CiAgICAgY3B1X3NldF90ICptYXNrID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICI6c2NoZWRfZ2V0YWZmaW5pdHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBuY3B1cyA9IE5DUFVTX1NUQVJUOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIHNldHNpemUgPSBDUFVfQUxMT0NfU0laRShuY3B1cyk7CkBAIC01OTkyLDYgKzU4MjEsNyBAQAogCiAjZW5kaWYgLyogSEFWRV9TQ0hFRF9IICovCiAKKwogLyogQUlYIHVzZXMgL2Rldi9wdGMgYnV0IGlzIG90aGVyd2lzZSB0aGUgc2FtZSBhcyAvZGV2L3B0bXggKi8KIC8qIElSSVggaGFzIGJvdGggL2Rldi9wdGMgYW5kIC9kZXYvcHRteCwgdXNlIHB0bXggKi8KICNpZiBkZWZpbmVkKEhBVkVfREVWX1BUQykgJiYgIWRlZmluZWQoSEFWRV9ERVZfUFRNWCkKQEAgLTYwMTgsMTMgKzU4NDgsMjAgQEAKICNlbmRpZgogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfRk9SS1BUWSkgfHwgZGVmaW5lZChIQVZFX0RFVl9QVE1YICovCiAKKwogI2lmIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkgfHwgZGVmaW5lZChIQVZFX0RFVl9QVE1YKQotUHlEb2NfU1RSVkFSKHBvc2l4X29wZW5wdHlfX2RvY19fLAotIm9wZW5wdHkoKSAtPiAobWFzdGVyX2ZkLCBzbGF2ZV9mZClcblxuXAotT3BlbiBhIHBzZXVkby10ZXJtaW5hbCwgcmV0dXJuaW5nIG9wZW4gZmQncyBmb3IgYm90aCBtYXN0ZXIgYW5kIHNsYXZlIGVuZC5cbiIpOworLypbY2xpbmljIGlucHV0XQorb3Mub3BlbnB0eQorCitPcGVuIGEgcHNldWRvLXRlcm1pbmFsLgorCitSZXR1cm4gYSB0dXBsZSBvZiAobWFzdGVyX2ZkLCBzbGF2ZV9mZCkgY29udGFpbmluZyBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKK2ZvciBib3RoIHRoZSBtYXN0ZXIgYW5kIHNsYXZlIGVuZHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9vcGVucHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorb3Nfb3BlbnB0eV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTg4NDFjZTVlYzljZWYzYyBpbnB1dD1mM2Q5OWZkOTllNzYyOTA3XSovCiB7CiAgICAgaW50IG1hc3Rlcl9mZCA9IC0xLCBzbGF2ZV9mZCA9IC0xOwogI2lmbmRlZiBIQVZFX09QRU5QVFkKQEAgLTYwNTUsNyArNTg5Miw3IEBACiAKICAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKyAgICAgICAgZ290byBlcnJvcjsKIAogI2Vsc2UKICAgICBtYXN0ZXJfZmQgPSBvcGVuKERFVl9QVFlfRklMRSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIG1hc3RlciAqLwpAQCAtNjA4Myw4ICs1OTIwLDggQEAKICAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKIAogICAgIHNsYXZlX2ZkID0gX1B5X29wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCi0gICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKyAgICBpZiAoc2xhdmVfZmQgPT0gLTEpCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQsIDAsIE5VTEwpIDwgMCkKICAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKQEAgLTYxMDIsOSArNTkzOSw3IEBACiAKIHBvc2l4X2Vycm9yOgogICAgIHBvc2l4X2Vycm9yKCk7Ci0jaWYgZGVmaW5lZChIQVZFX09QRU5QVFkpIHx8IGRlZmluZWQoSEFWRV9fR0VUUFRZKQogZXJyb3I6Ci0jZW5kaWYKICAgICBpZiAobWFzdGVyX2ZkICE9IC0xKQogICAgICAgICBjbG9zZShtYXN0ZXJfZmQpOwogICAgIGlmIChzbGF2ZV9mZCAhPSAtMSkKQEAgLTYxMTMsMTUgKzU5NDgsMjIgQEAKIH0KICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfT1BFTlBUWSkgfHwgZGVmaW5lZChIQVZFX19HRVRQVFkpIHx8IGRlZmluZWQoSEFWRV9ERVZfUFRNWCkgKi8KIAorCiAjaWZkZWYgSEFWRV9GT1JLUFRZCi1QeURvY19TVFJWQVIocG9zaXhfZm9ya3B0eV9fZG9jX18sCi0iZm9ya3B0eSgpIC0+IChwaWQsIG1hc3Rlcl9mZClcblxuXAotRm9yayBhIG5ldyBwcm9jZXNzIHdpdGggYSBuZXcgcHNldWRvLXRlcm1pbmFsIGFzIGNvbnRyb2xsaW5nIHR0eS5cblxuXAotTGlrZSBmb3JrKCksIHJldHVybiAwIGFzIHBpZCB0byBjaGlsZCBwcm9jZXNzLCBhbmQgUElEIG9mIGNoaWxkIHRvIHBhcmVudC5cblwKLVRvIGJvdGgsIHJldHVybiBmZCBvZiBuZXdseSBvcGVuZWQgcHNldWRvLXRlcm1pbmFsLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5mb3JrcHR5CisKK0ZvcmsgYSBuZXcgcHJvY2VzcyB3aXRoIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBhcyBjb250cm9sbGluZyB0dHkuCisKK1JldHVybnMgYSB0dXBsZSBvZiAocGlkLCBtYXN0ZXJfZmQpLgorTGlrZSBmb3JrKCksIHJldHVybiBwaWQgb2YgMCB0byB0aGUgY2hpbGQgcHJvY2VzcywKK2FuZCBwaWQgb2YgY2hpbGQgdG8gdGhlIHBhcmVudCBwcm9jZXNzLgorVG8gYm90aCwgcmV0dXJuIGZkIG9mIG5ld2x5IG9wZW5lZCBwc2V1ZG8tdGVybWluYWwuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9mb3JrcHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorb3NfZm9ya3B0eV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjBkMGE1Yzc1MTJlNDA4NyBpbnB1dD1mMWY3ZjRiYWUzOTY2MDEwXSovCiB7CiAgICAgaW50IG1hc3Rlcl9mZCA9IC0xLCByZXN1bHQgPSAwOwogICAgIHBpZF90IHBpZDsKQEAgLTYxNDUsNTkgKzU5ODcsNzMgQEAKICAgICB9CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihOaSkiLCBQeUxvbmdfRnJvbVBpZChwaWQpLCBtYXN0ZXJfZmQpOwogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9GT1JLUFRZICovCiAKIAogI2lmZGVmIEhBVkVfR0VURUdJRAotUHlEb2NfU1RSVkFSKHBvc2l4X2dldGVnaWRfX2RvY19fLAotImdldGVnaWQoKSAtPiBlZ2lkXG5cblwKLVJldHVybiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZWZmZWN0aXZlIGdyb3VwIGlkLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuZ2V0ZWdpZAorCitSZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIGVmZmVjdGl2ZSBncm91cCBpZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2dldGVnaWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19nZXRlZ2lkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02N2Q5YmU3YWM2ODg5OGEyIGlucHV0PTE1OTZmNzlhZDExMDdkNWRdKi8KIHsKICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tR2lkKGdldGVnaWQoKSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0dFVEVHSUQgKi8KIAogCiAjaWZkZWYgSEFWRV9HRVRFVUlECi1QeURvY19TVFJWQVIocG9zaXhfZ2V0ZXVpZF9fZG9jX18sCi0iZ2V0ZXVpZCgpIC0+IGV1aWRcblxuXAotUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MncyBlZmZlY3RpdmUgdXNlciBpZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldGV1aWQKKworUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MncyBlZmZlY3RpdmUgdXNlciBpZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2dldGV1aWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19nZXRldWlkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lYTFiNjBmMGQ2YWJiNjZlIGlucHV0PTQ2NDRjNjYyZDNiZDlmMTldKi8KIHsKICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tVWlkKGdldGV1aWQoKSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0dFVEVVSUQgKi8KIAogCiAjaWZkZWYgSEFWRV9HRVRHSUQKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXRnaWRfX2RvY19fLAotImdldGdpZCgpIC0+IGdpZFxuXG5cCi1SZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIGdyb3VwIGlkLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuZ2V0Z2lkCisKK1JldHVybiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZ3JvdXAgaWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9nZXRnaWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19nZXRnaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRmMjhlYmM5ZDNlNWRmY2YgaW5wdXQ9NTg3OTYzNDRjZDg3YzBmNl0qLwogewogICAgIHJldHVybiBfUHlMb25nX0Zyb21HaWQoZ2V0Z2lkKCkpOwogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9HRVRHSUQgKi8KIAogCi1QeURvY19TVFJWQVIocG9zaXhfZ2V0cGlkX19kb2NfXywKLSJnZXRwaWQoKSAtPiBwaWRcblxuXAotUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MgaWQiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldHBpZAorCitSZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcyBpZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2dldHBpZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK29zX2dldHBpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWVhNmZkYWMwMWVkMmIzYyBpbnB1dD01YTlhMDBmMGFiNjhhYTAwXSovCiB7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tUGlkKGdldHBpZCgpKTsKIH0KIAogI2lmZGVmIEhBVkVfR0VUR1JPVVBMSVNUCisKKy8qIEFDIDMuNTogZnVubnkgYXBwbGUgbG9naWMgYmVsb3cgKi8KIFB5RG9jX1NUUlZBUihwb3NpeF9nZXRncm91cGxpc3RfX2RvY19fLAogImdldGdyb3VwbGlzdCh1c2VyLCBncm91cCkgLT4gbGlzdCBvZiBncm91cHMgdG8gd2hpY2ggYSB1c2VyIGJlbG9uZ3NcblxuXAogUmV0dXJucyBhIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIGEgdXNlciBiZWxvbmdzLlxuXG5cCkBAIC02MjcwLDE1ICs2MTI2LDE5IEBACiAKICAgICByZXR1cm4gbGlzdDsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfR0VUR1JPVVBMSVNUICovCisKIAogI2lmZGVmIEhBVkVfR0VUR1JPVVBTCi1QeURvY19TVFJWQVIocG9zaXhfZ2V0Z3JvdXBzX19kb2NfXywKLSJnZXRncm91cHMoKSAtPiBsaXN0IG9mIGdyb3VwIElEc1xuXG5cCi1SZXR1cm4gbGlzdCBvZiBzdXBwbGVtZW50YWwgZ3JvdXAgSURzIGZvciB0aGUgcHJvY2Vzcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldGdyb3VwcworCitSZXR1cm4gbGlzdCBvZiBzdXBwbGVtZW50YWwgZ3JvdXAgSURzIGZvciB0aGUgcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2dldGdyb3VwcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK29zX2dldGdyb3Vwc19pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDJiMGMxNzc1ODU2MWI1NiBpbnB1dD1kM2YxMDk0MTJlNmExNTVjXSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKQEAgLTYzNzcsNyArNjIzNyw3IEBACiAKICAgICByZXR1cm4gcmVzdWx0OwogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9HRVRHUk9VUFMgKi8KIAogI2lmZGVmIEhBVkVfSU5JVEdST1VQUwogUHlEb2NfU1RSVkFSKHBvc2l4X2luaXRncm91cHNfX2RvY19fLApAQCAtNjM4Niw2ICs2MjQ2LDcgQEAKIHRoZSBncm91cHMgb2Ygd2hpY2ggdGhlIHNwZWNpZmllZCB1c2VybmFtZSBpcyBhIG1lbWJlciwgcGx1cyB0aGUgc3BlY2lmaWVkXG5cCiBncm91cCBpZC4iKTsKIAorLyogQUMgMy41OiBmdW5ueSBhcHBsZSBsb2dpYyAqLwogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2luaXRncm91cHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNjQxOCwyMCArNjI3OSwyMyBAQAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfSU5JVEdST1VQUyAqLworCiAKICNpZmRlZiBIQVZFX0dFVFBHSUQKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXRwZ2lkX19kb2NfXywKLSJnZXRwZ2lkKHBpZCkgLT4gcGdpZFxuXG5cCi1DYWxsIHRoZSBzeXN0ZW0gY2FsbCBnZXRwZ2lkKCkuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5nZXRwZ2lkCisKKyAgICBwaWQ6IHBpZF90CisKK0NhbGwgdGhlIHN5c3RlbSBjYWxsIGdldHBnaWQoKSwgYW5kIHJldHVybiB0aGUgcmVzdWx0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZ2V0cGdpZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19nZXRwZ2lkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGlkX3QgcGlkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFkYjk1YTk3YmUyMDVkMTggaW5wdXQ9MzlkNzEwYWUzYmFhZjFjN10qLwogewotICAgIHBpZF90IHBpZCwgcGdpZDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiOmdldHBnaWQiLCAmcGlkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGdpZCA9IGdldHBnaWQocGlkKTsKKyAgICBwaWRfdCBwZ2lkID0gZ2V0cGdpZChwaWQpOwogICAgIGlmIChwZ2lkIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tUGlkKHBnaWQpOwpAQCAtNjQ0MCwxMiArNjMwNCwxNSBAQAogCiAKICNpZmRlZiBIQVZFX0dFVFBHUlAKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXRwZ3JwX19kb2NfXywKLSJnZXRwZ3JwKCkgLT4gcGdycFxuXG5cCi1SZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcyBncm91cCBpZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldHBncnAKKworUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MgZ3JvdXAgaWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9nZXRwZ3JwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorb3NfZ2V0cGdycF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzRmYzM4MWU1MTEwM2NmMyBpbnB1dD02ODQ2ZmIyYmI5YTM3MDVlXSovCiB7CiAjaWZkZWYgR0VUUEdSUF9IQVZFX0FSRwogICAgIHJldHVybiBQeUxvbmdfRnJvbVBpZChnZXRwZ3JwKDApKTsKQEAgLTY0NTcsMTIgKzYzMjQsMTUgQEAKIAogCiAjaWZkZWYgSEFWRV9TRVRQR1JQCi1QeURvY19TVFJWQVIocG9zaXhfc2V0cGdycF9fZG9jX18sCi0ic2V0cGdycCgpXG5cblwKLU1ha2UgdGhpcyBwcm9jZXNzIHRoZSBwcm9jZXNzIGdyb3VwIGxlYWRlci4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNldHBncnAKKworTWFrZSB0aGUgY3VycmVudCBwcm9jZXNzIHRoZSBsZWFkZXIgb2YgaXRzIHByb2Nlc3MgZ3JvdXAuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zZXRwZ3JwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorb3Nfc2V0cGdycF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjU1NDczNWIwYTYwZjBhMCBpbnB1dD0xZjA2MTlmY2I1NzMxZTdlXSovCiB7CiAjaWZkZWYgU0VUUEdSUF9IQVZFX0FSRwogICAgIGlmIChzZXRwZ3JwKDAsIDApIDwgMCkKQEAgLTY0NzMsNyArNjM0Myw2IEBACiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQotCiAjZW5kaWYgLyogSEFWRV9TRVRQR1JQICovCiAKICNpZmRlZiBIQVZFX0dFVFBQSUQKQEAgLTY1MjAsMTQgKzYzODksMTkgQEAKIH0KICNlbmRpZiAvKk1TX1dJTkRPV1MqLwogCi1QeURvY19TVFJWQVIocG9zaXhfZ2V0cHBpZF9fZG9jX18sCi0iZ2V0cHBpZCgpIC0+IHBwaWRcblxuXAotUmV0dXJuIHRoZSBwYXJlbnQncyBwcm9jZXNzIGlkLiAgSWYgdGhlIHBhcmVudCBwcm9jZXNzIGhhcyBhbHJlYWR5IGV4aXRlZCxcblwKLVdpbmRvd3MgbWFjaGluZXMgd2lsbCBzdGlsbCByZXR1cm4gaXRzIGlkOyBvdGhlcnMgc3lzdGVtcyB3aWxsIHJldHVybiB0aGUgaWRcblwKLW9mIHRoZSAnaW5pdCcgcHJvY2VzcyAoMSkuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldHBwaWQKKworUmV0dXJuIHRoZSBwYXJlbnQncyBwcm9jZXNzIGlkLgorCitJZiB0aGUgcGFyZW50IHByb2Nlc3MgaGFzIGFscmVhZHkgZXhpdGVkLCBXaW5kb3dzIG1hY2hpbmVzIHdpbGwgc3RpbGwKK3JldHVybiBpdHMgaWQ7IG90aGVycyBzeXN0ZW1zIHdpbGwgcmV0dXJuIHRoZSBpZCBvZiB0aGUgJ2luaXQnIHByb2Nlc3MgKDEpLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZ2V0cHBpZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK29zX2dldHBwaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQzYjJhOTQ2YThjNjAzYjQgaW5wdXQ9ZTYzN2NiODc1MzljMDMwZV0qLwogewogI2lmZGVmIE1TX1dJTkRPV1MKICAgICByZXR1cm4gd2luMzJfZ2V0cHBpZCgpOwpAQCAtNjUzOSwxMiArNjQxMywxNSBAQAogCiAKICNpZmRlZiBIQVZFX0dFVExPR0lOCi1QeURvY19TVFJWQVIocG9zaXhfZ2V0bG9naW5fX2RvY19fLAotImdldGxvZ2luKCkgLT4gc3RyaW5nXG5cblwKLVJldHVybiB0aGUgYWN0dWFsIGxvZ2luIG5hbWUuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5nZXRsb2dpbgorCitSZXR1cm4gdGhlIGFjdHVhbCBsb2dpbiBuYW1lLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZ2V0bG9naW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19nZXRsb2dpbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTMyZTY2YTdlNTcxNWRhYyBpbnB1dD0yYTIxYWIxZTkxNzE2M2RmXSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtNjU3Nyw3NyArNjQ1NCw1NCBAQAogfQogI2VuZGlmIC8qIEhBVkVfR0VUTE9HSU4gKi8KIAorCiAjaWZkZWYgSEFWRV9HRVRVSUQKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXR1aWRfX2RvY19fLAotImdldHVpZCgpIC0+IHVpZFxuXG5cCi1SZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIHVzZXIgaWQuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5nZXR1aWQKKworUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MncyB1c2VyIGlkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZ2V0dWlkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorb3NfZ2V0dWlkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MTVjMGI0MDFlYmVkMTFhIGlucHV0PWI1M2M4YjM1ZjExMGE1MTZdKi8KIHsKICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tVWlkKGdldHVpZCgpKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfR0VUVUlEICovCiAKIAotI2lmZGVmIEhBVkVfS0lMTAotUHlEb2NfU1RSVkFSKHBvc2l4X2tpbGxfX2RvY19fLAotImtpbGwocGlkLCBzaWcpXG5cblwKLUtpbGwgYSBwcm9jZXNzIHdpdGggYSBzaWduYWwuIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9raWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBwaWRfdCBwaWQ7Ci0gICAgaW50IHNpZzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTpraWxsIiwgJnBpZCwgJnNpZykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChraWxsKHBpZCwgc2lnKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX0tJTExQRwotUHlEb2NfU1RSVkFSKHBvc2l4X2tpbGxwZ19fZG9jX18sCi0ia2lsbHBnKHBnaWQsIHNpZylcblxuXAotS2lsbCBhIHByb2Nlc3MgZ3JvdXAgd2l0aCBhIHNpZ25hbC4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2tpbGxwZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgaW50IHNpZzsKLSAgICBwaWRfdCBwZ2lkOwotICAgIC8qIFhYWCBzb21lIG1hbiBwYWdlcyBtYWtlIHRoZSBgcGdpZGAgcGFyYW1ldGVyIGFuIGludCwgb3RoZXJzCi0gICAgICAgYSBwaWRfdC4gU2luY2UgZ2V0cGdycCgpIHJldHVybnMgYSBwaWRfdCwgd2UgYXNzdW1lIGtpbGxwZyBzaG91bGQKLSAgICAgICB0YWtlIHRoZSBzYW1lIHR5cGUuIE1vcmVvdmVyLCBwaWRfdCBpcyBhbHdheXMgYXQgbGVhc3QgYXMgd2lkZSBhcwotICAgICAgIGludCAoZWxzZSBjb21waWxhdGlvbiBvZiB0aGlzIG1vZHVsZSBmYWlscyksIHdoaWNoIGlzIHNhZmUuICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6a2lsbHBnIiwgJnBnaWQsICZzaWcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoa2lsbHBnKHBnaWQsIHNpZykgPT0gLTEpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKLX0KLSNlbmRpZgotCiAjaWZkZWYgTVNfV0lORE9XUwotUHlEb2NfU1RSVkFSKHdpbjMyX2tpbGxfX2RvY19fLAotImtpbGwocGlkLCBzaWcpXG5cblwKLUtpbGwgYSBwcm9jZXNzIHdpdGggYSBzaWduYWwuIik7CisjZGVmaW5lIEhBVkVfS0lMTAorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KKworI2lmZGVmIEhBVkVfS0lMTAorLypbY2xpbmljIGlucHV0XQorb3Mua2lsbAorCisgICAgcGlkOiBwaWRfdAorICAgIHNpZ25hbDogUHlfc3NpemVfdAorICAgIC8KKworS2lsbCBhIHByb2Nlc3Mgd2l0aCBhIHNpZ25hbC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdpbjMyX2tpbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3Nfa2lsbF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCwgUHlfc3NpemVfdCBzaWduYWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OGUzNDZhNjcwMWM4ODU2OCBpbnB1dD02MWEzNmI4NmNhMjc1YWI5XSovCisjaWZuZGVmIE1TX1dJTkRPV1MKK3sKKyAgICBpZiAoa2lsbChwaWQsIChpbnQpc2lnbmFsKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZWxzZSAvKiAhTVNfV0lORE9XUyAqLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgcGlkX3QgcGlkOwotICAgIERXT1JEIHNpZywgZXJyOworICAgIERXT1JEIHNpZyA9IChEV09SRClzaWduYWw7CisgICAgRFdPUkQgZXJyOwogICAgIEhBTkRMRSBoYW5kbGU7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiazpraWxsIiwgJnBpZCwgJnNpZykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgLyogQ29uc29sZSBwcm9jZXNzZXMgd2hpY2ggc2hhcmUgYSBjb21tb24gY29uc29sZSBjYW4gYmUgc2VudCBDVFJMK0Mgb3IKICAgICAgICBDVFJMK0JSRUFLIGV2ZW50cywgcHJvdmlkZWQgdGhleSBoYW5kbGUgc2FpZCBldmVudHMuICovCiAgICAgaWYgKHNpZyA9PSBDVFJMX0NfRVZFTlQgfHwgc2lnID09IENUUkxfQlJFQUtfRVZFTlQpIHsKQEAgLTY2NzgsMTAzICs2NTMyLDEzOCBAQAogICAgIENsb3NlSGFuZGxlKGhhbmRsZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLSNlbmRpZiAvKiBNU19XSU5ET1dTICovCisjZW5kaWYgLyogIU1TX1dJTkRPV1MgKi8KKyNlbmRpZiAvKiBIQVZFX0tJTEwgKi8KKworCisjaWZkZWYgSEFWRV9LSUxMUEcKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmtpbGxwZworCisgICAgcGdpZDogcGlkX3QKKyAgICBzaWduYWw6IGludAorICAgIC8KKworS2lsbCBhIHByb2Nlc3MgZ3JvdXAgd2l0aCBhIHNpZ25hbC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2tpbGxwZ19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBnaWQsIGludCBzaWduYWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmRiY2QyZjFmZGY1ZmRiYSBpbnB1dD0zOGI1NDQ5ZWI4ZmFlYzE5XSovCit7CisgICAgLyogWFhYIHNvbWUgbWFuIHBhZ2VzIG1ha2UgdGhlIGBwZ2lkYCBwYXJhbWV0ZXIgYW4gaW50LCBvdGhlcnMKKyAgICAgICBhIHBpZF90LiBTaW5jZSBnZXRwZ3JwKCkgcmV0dXJucyBhIHBpZF90LCB3ZSBhc3N1bWUga2lsbHBnIHNob3VsZAorICAgICAgIHRha2UgdGhlIHNhbWUgdHlwZS4gTW9yZW92ZXIsIHBpZF90IGlzIGFsd2F5cyBhdCBsZWFzdCBhcyB3aWRlIGFzCisgICAgICAgaW50IChlbHNlIGNvbXBpbGF0aW9uIG9mIHRoaXMgbW9kdWxlIGZhaWxzKSwgd2hpY2ggaXMgc2FmZS4gKi8KKyAgICBpZiAoa2lsbHBnKHBnaWQsIHNpZ25hbCkgPT0gLTEpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorI2VuZGlmIC8qIEhBVkVfS0lMTFBHICovCisKIAogI2lmZGVmIEhBVkVfUExPQ0sKLQogI2lmZGVmIEhBVkVfU1lTX0xPQ0tfSAogI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAjZW5kaWYKIAotUHlEb2NfU1RSVkFSKHBvc2l4X3Bsb2NrX19kb2NfXywKLSJwbG9jayhvcClcblxuXAorLypbY2xpbmljIGlucHV0XQorb3MucGxvY2sKKyAgICBvcDogaW50CisgICAgLworCiBMb2NrIHByb2dyYW0gc2VnbWVudHMgaW50byBtZW1vcnkuIik7CitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9wbG9jayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19wbG9ja19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBvcCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04MTQyNDE2NzAzM2IxNjhlIGlucHV0PWU2ZTVlMzQ4ZTE1MjVmNjBdKi8KIHsKLSAgICBpbnQgb3A7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnBsb2NrIiwgJm9wKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHBsb2NrKG9wKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9QTE9DSyAqLworCiAKICNpZmRlZiBIQVZFX1NFVFVJRAotUHlEb2NfU1RSVkFSKHBvc2l4X3NldHVpZF9fZG9jX18sCi0ic2V0dWlkKHVpZClcblxuXAotU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyB1c2VyIGlkLiIpOworLypbY2xpbmljIGlucHV0XQorb3Muc2V0dWlkCisKKyAgICB1aWQ6IHVpZF90CisgICAgLworCitTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHVzZXIgaWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zZXR1aWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3Nfc2V0dWlkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgdWlkX3QgdWlkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWEwYTQxZmQwZDFlYzU1NWYgaW5wdXQ9YzkyMWEzMjg1YWEyMjI1Nl0qLwogewotICAgIHVpZF90IHVpZDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOnNldHVpZCIsIF9QeV9VaWRfQ29udmVydGVyLCAmdWlkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHNldHVpZCh1aWQpIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfU0VUVUlEICovCiAKIAogI2lmZGVmIEhBVkVfU0VURVVJRAotUHlEb2NfU1RSVkFSKHBvc2l4X3NldGV1aWRfX2RvY19fLAotInNldGV1aWQodWlkKVxuXG5cCi1TZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGVmZmVjdGl2ZSB1c2VyIGlkLiIpOworLypbY2xpbmljIGlucHV0XQorb3Muc2V0ZXVpZAorCisgICAgZXVpZDogdWlkX3QKKyAgICAvCisKK1NldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZWZmZWN0aXZlIHVzZXIgaWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zZXRldWlkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zZXRldWlkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgdWlkX3QgZXVpZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xMDJlM2FkOTgzNjE1MTlhIGlucHV0PWJhOTNkOTI3ZTQ3ODFhYTldKi8KIHsKLSAgICB1aWRfdCBldWlkOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6c2V0ZXVpZCIsIF9QeV9VaWRfQ29udmVydGVyLCAmZXVpZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChzZXRldWlkKGV1aWQpIDwgMCkgeworICAgIGlmIChzZXRldWlkKGV1aWQpIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9TRVRFVUlEICovCiAKKwogI2lmZGVmIEhBVkVfU0VURUdJRAotUHlEb2NfU1RSVkFSKHBvc2l4X3NldGVnaWRfX2RvY19fLAotInNldGVnaWQoZ2lkKVxuXG5cCi1TZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGVmZmVjdGl2ZSBncm91cCBpZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNldGVnaWQKKworICAgIGVnaWQ6IGdpZF90CisgICAgLworCitTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGVmZmVjdGl2ZSBncm91cCBpZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NldGVnaWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3NldGVnaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBnaWRfdCBlZ2lkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRlNGI4MjVhNmExMDI1OGQgaW5wdXQ9NDA4MDUyNmQwY2NkNmNlM10qLwogewotICAgIGdpZF90IGVnaWQ7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpzZXRlZ2lkIiwgX1B5X0dpZF9Db252ZXJ0ZXIsICZlZ2lkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHNldGVnaWQoZWdpZCkgPCAwKSB7CisgICAgaWYgKHNldGVnaWQoZWdpZCkgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX1NFVEVHSUQgKi8KIAorCiAjaWZkZWYgSEFWRV9TRVRSRVVJRAotUHlEb2NfU1RSVkFSKHBvc2l4X3NldHJldWlkX19kb2NfXywKLSJzZXRyZXVpZChydWlkLCBldWlkKVxuXG5cCi1TZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNldHJldWlkCisKKyAgICBydWlkOiB1aWRfdAorICAgIGV1aWQ6IHVpZF90CisgICAgLworCitTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NldHJldWlkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zZXRyZXVpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHVpZF90IHJ1aWQsIHVpZF90IGV1aWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjJkOTkxMjEwMDA2NTMwYSBpbnB1dD0wY2E4OTc4ZGU2NjM4ODBjXSovCiB7Ci0gICAgdWlkX3QgcnVpZCwgZXVpZDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTyY6c2V0cmV1aWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfVWlkX0NvbnZlcnRlciwgJnJ1aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9VaWRfQ29udmVydGVyLCAmZXVpZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzZXRyZXVpZChydWlkLCBldWlkKSA8IDApIHsKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgfSBlbHNlIHsKQEAgLTY3ODQsNTMgKzY2NzMsNjIgQEAKIH0KICNlbmRpZiAvKiBIQVZFX1NFVFJFVUlEICovCiAKKwogI2lmZGVmIEhBVkVfU0VUUkVHSUQKLVB5RG9jX1NUUlZBUihwb3NpeF9zZXRyZWdpZF9fZG9jX18sCi0ic2V0cmVnaWQocmdpZCwgZWdpZClcblxuXAotU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsIGFuZCBlZmZlY3RpdmUgZ3JvdXAgaWRzLiIpOworLypbY2xpbmljIGlucHV0XQorb3Muc2V0cmVnaWQKKworICAgIHJnaWQ6IGdpZF90CisgICAgZWdpZDogZ2lkX3QKKyAgICAvCisKK1NldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCBhbmQgZWZmZWN0aXZlIGdyb3VwIGlkcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NldHJlZ2lkIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zZXRyZWdpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGdpZF90IHJnaWQsIGdpZF90IGVnaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YWE4MDM4MzVjZjUzNDJmMyBpbnB1dD1jNTk0OTlmNzI4NDZkYjc4XSovCiB7Ci0gICAgZ2lkX3QgcmdpZCwgZWdpZDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTyY6c2V0cmVnaWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfR2lkX0NvbnZlcnRlciwgJnJnaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9HaWRfQ29udmVydGVyLCAmZWdpZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChzZXRyZWdpZChyZ2lkLCBlZ2lkKSA8IDApIHsKKyAgICBpZiAoc2V0cmVnaWQocmdpZCwgZWdpZCkgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX1NFVFJFR0lEICovCiAKKwogI2lmZGVmIEhBVkVfU0VUR0lECi1QeURvY19TVFJWQVIocG9zaXhfc2V0Z2lkX19kb2NfXywKLSJzZXRnaWQoZ2lkKVxuXG5cCi1TZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGdyb3VwIGlkLiIpOworLypbY2xpbmljIGlucHV0XQorb3Muc2V0Z2lkCisgICAgZ2lkOiBnaWRfdAorICAgIC8KKworU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyBncm91cCBpZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NldGdpZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zZXRnaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBnaWRfdCBnaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmRjY2Q3NDAzZjZhZDhjMyBpbnB1dD0yN2QzMGM0MDU5MDQ1ZGM2XSovCiB7Ci0gICAgZ2lkX3QgZ2lkOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6c2V0Z2lkIiwgX1B5X0dpZF9Db252ZXJ0ZXIsICZnaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2V0Z2lkKGdpZCkgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9TRVRHSUQgKi8KIAorCiAjaWZkZWYgSEFWRV9TRVRHUk9VUFMKLVB5RG9jX1NUUlZBUihwb3NpeF9zZXRncm91cHNfX2RvY19fLAotInNldGdyb3VwcyhsaXN0KVxuXG5cCi1TZXQgdGhlIGdyb3VwcyBvZiB0aGUgY3VycmVudCBwcm9jZXNzIHRvIGxpc3QuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5zZXRncm91cHMKKworICAgIGdyb3Vwczogb2JqZWN0CisgICAgLworCitTZXQgdGhlIGdyb3VwcyBvZiB0aGUgY3VycmVudCBwcm9jZXNzIHRvIGxpc3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zZXRncm91cHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpncm91cHMpCitvc19zZXRncm91cHMoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmdyb3VwcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zZmNiMzJhYWQ1OGM1ZWNkIGlucHV0PWZhNzQyY2EzZGFmODVhN2VdKi8KIHsKICAgICBpbnQgaSwgbGVuOwogICAgIGdpZF90IGdyb3VwbGlzdFtNQVhfR1JPVVBTXTsKQEAgLTY5MzEsODMgKzY4MjksMTE0IEBACiB9CiAjZW5kaWYgLyogSEFWRV9XQUlUMyB8fCBIQVZFX1dBSVQ0ICovCiAKKwogI2lmZGVmIEhBVkVfV0FJVDMKLVB5RG9jX1NUUlZBUihwb3NpeF93YWl0M19fZG9jX18sCi0id2FpdDMob3B0aW9ucykgLT4gKHBpZCwgc3RhdHVzLCBydXNhZ2UpXG5cblwKLVdhaXQgZm9yIGNvbXBsZXRpb24gb2YgYSBjaGlsZCBwcm9jZXNzLiIpOworLypbY2xpbmljIGlucHV0XQorb3Mud2FpdDMKKworICAgIG9wdGlvbnM6IGludAorV2FpdCBmb3IgY29tcGxldGlvbiBvZiBhIGNoaWxkIHByb2Nlc3MuCisKK1JldHVybnMgYSB0dXBsZSBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hpbGQgcHJvY2VzczoKKyAgKHBpZCwgc3RhdHVzLCBydXNhZ2UpCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF93YWl0MyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc193YWl0M19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBvcHRpb25zKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTkyYzMyMjRlNmYyODIxN2EgaW5wdXQ9OGFjNGM1Njk1NmI2MTcxMF0qLwogewogICAgIHBpZF90IHBpZDsKLSAgICBpbnQgb3B0aW9uczsKICAgICBzdHJ1Y3QgcnVzYWdlIHJ1OworICAgIGludCBhc3luY19lcnIgPSAwOwogICAgIFdBSVRfVFlQRSBzdGF0dXM7CiAgICAgV0FJVF9TVEFUVVNfSU5UKHN0YXR1cykgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOndhaXQzIiwgJm9wdGlvbnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBwaWQgPSB3YWl0Mygmc3RhdHVzLCBvcHRpb25zLCAmcnUpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHBpZCA9IHdhaXQzKCZzdGF0dXMsIG9wdGlvbnMsICZydSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAocGlkIDwgMCAmJiBlcnJubyA9PSBFSU5UUiAmJiAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CisgICAgaWYgKHBpZCA8IDApCisgICAgICAgIHJldHVybiAoIWFzeW5jX2VycikgPyBwb3NpeF9lcnJvcigpIDogTlVMTDsKIAogICAgIHJldHVybiB3YWl0X2hlbHBlcihwaWQsIFdBSVRfU1RBVFVTX0lOVChzdGF0dXMpLCAmcnUpOwogfQogI2VuZGlmIC8qIEhBVkVfV0FJVDMgKi8KIAorCiAjaWZkZWYgSEFWRV9XQUlUNAotUHlEb2NfU1RSVkFSKHBvc2l4X3dhaXQ0X19kb2NfXywKLSJ3YWl0NChwaWQsIG9wdGlvbnMpIC0+IChwaWQsIHN0YXR1cywgcnVzYWdlKVxuXG5cCi1XYWl0IGZvciBjb21wbGV0aW9uIG9mIGEgZ2l2ZW4gY2hpbGQgcHJvY2Vzcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworb3Mud2FpdDQKKworICAgIHBpZDogcGlkX3QKKyAgICBvcHRpb25zOiBpbnQKKworV2FpdCBmb3IgY29tcGxldGlvbiBvZiBhIHNwZWNpZmljIGNoaWxkIHByb2Nlc3MuCisKK1JldHVybnMgYSB0dXBsZSBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hpbGQgcHJvY2VzczoKKyAgKHBpZCwgc3RhdHVzLCBydXNhZ2UpCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF93YWl0NChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc193YWl0NF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCwgaW50IG9wdGlvbnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjYxOTVhYTUwN2IzNWY3MCBpbnB1dD1kMTFkZWVkMDc1MDYwMGJhXSovCiB7Ci0gICAgcGlkX3QgcGlkOwotICAgIGludCBvcHRpb25zOworICAgIHBpZF90IHJlczsKICAgICBzdHJ1Y3QgcnVzYWdlIHJ1OworICAgIGludCBhc3luY19lcnIgPSAwOwogICAgIFdBSVRfVFlQRSBzdGF0dXM7CiAgICAgV0FJVF9TVEFUVVNfSU5UKHN0YXR1cykgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6d2FpdDQiLCAmcGlkLCAmb3B0aW9ucykpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSB3YWl0NChwaWQsICZzdGF0dXMsIG9wdGlvbnMsICZydSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAocmVzIDwgMCAmJiBlcnJubyA9PSBFSU5UUiAmJiAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAoIWFzeW5jX2VycikgPyBwb3NpeF9lcnJvcigpIDogTlVMTDsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBwaWQgPSB3YWl0NChwaWQsICZzdGF0dXMsIG9wdGlvbnMsICZydSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIHJldHVybiB3YWl0X2hlbHBlcihwaWQsIFdBSVRfU1RBVFVTX0lOVChzdGF0dXMpLCAmcnUpOworICAgIHJldHVybiB3YWl0X2hlbHBlcihyZXMsIFdBSVRfU1RBVFVTX0lOVChzdGF0dXMpLCAmcnUpOwogfQogI2VuZGlmIC8qIEhBVkVfV0FJVDQgKi8KIAorCiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQotUHlEb2NfU1RSVkFSKHBvc2l4X3dhaXRpZF9fZG9jX18sCi0id2FpdGlkKGlkdHlwZSwgaWQsIG9wdGlvbnMpIC0+IHdhaXRpZF9yZXN1bHRcblxuXAotV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2Ygb25lIG9yIG1vcmUgY2hpbGQgcHJvY2Vzc2VzLlxuXG5cCi1pZHR5cGUgY2FuIGJlIFBfUElELCBQX1BHSUQgb3IgUF9BTEwuXG5cCi1pZCBzcGVjaWZpZXMgdGhlIHBpZCB0byB3YWl0IG9uLlxuXAotb3B0aW9ucyBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBPUmluZyBvZiBvbmUgb3IgbW9yZSBvZiBXRVhJVEVELCBXU1RPUFBFRFxuXAotb3IgV0NPTlRJTlVFRCBhbmQgYWRkaXRpb25hbGx5IG1heSBiZSBPUmVkIHdpdGggV05PSEFORyBvciBXTk9XQUlULlxuXAotUmV0dXJucyBlaXRoZXIgd2FpdGlkX3Jlc3VsdCBvciBOb25lIGlmIFdOT0hBTkcgaXMgc3BlY2lmaWVkIGFuZCB0aGVyZSBhcmVcblwKLW5vIGNoaWxkcmVuIGluIGEgd2FpdGFibGUgc3RhdGUuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy53YWl0aWQKKworICAgIGlkdHlwZTogaWR0eXBlX3QKKyAgICAgICAgTXVzdCBiZSBvbmUgb2YgYmUgUF9QSUQsIFBfUEdJRCBvciBQX0FMTC4KKyAgICBpZDogaWRfdAorICAgICAgICBUaGUgaWQgdG8gd2FpdCBvbi4KKyAgICBvcHRpb25zOiBpbnQKKyAgICAgICAgQ29uc3RydWN0ZWQgZnJvbSB0aGUgT1Jpbmcgb2Ygb25lIG9yIG1vcmUgb2YgV0VYSVRFRCwgV1NUT1BQRUQKKyAgICAgICAgb3IgV0NPTlRJTlVFRCBhbmQgYWRkaXRpb25hbGx5IG1heSBiZSBPUmVkIHdpdGggV05PSEFORyBvciBXTk9XQUlULgorICAgIC8KKworUmV0dXJucyB0aGUgcmVzdWx0IG9mIHdhaXRpbmcgZm9yIGEgcHJvY2VzcyBvciBwcm9jZXNzZXMuCisKK1JldHVybnMgZWl0aGVyIHdhaXRpZF9yZXN1bHQgb3IgTm9uZSBpZiBXTk9IQU5HIGlzIHNwZWNpZmllZCBhbmQgdGhlcmUgYXJlCitubyBjaGlsZHJlbiBpbiBhIHdhaXRhYmxlIHN0YXRlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfd2FpdGlkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3dhaXRpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGlkdHlwZV90IGlkdHlwZSwgaWRfdCBpZCwgaW50IG9wdGlvbnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWQyZTFjMGJkZTYxZjRkOCBpbnB1dD1kOGU3Zjc2ZTA1MmI3OTIwXSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBpZHR5cGVfdCBpZHR5cGU7Ci0gICAgaWRfdCBpZDsKLSAgICBpbnQgb3B0aW9ucywgcmVzOworICAgIGludCByZXM7CisgICAgaW50IGFzeW5jX2VyciA9IDA7CiAgICAgc2lnaW5mb190IHNpOwogICAgIHNpLnNpX3BpZCA9IDA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpIiBfUHlfUEFSU0VfUElEICJpOndhaXRpZCIsICZpZHR5cGUsICZpZCwgJm9wdGlvbnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gd2FpdGlkKGlkdHlwZSwgaWQsICZzaSwgb3B0aW9ucyk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzID09IC0xKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSB3YWl0aWQoaWR0eXBlLCBpZCwgJnNpLCBvcHRpb25zKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9IHdoaWxlIChyZXMgPCAwICYmIGVycm5vID09IEVJTlRSICYmICEoYXN5bmNfZXJyID0gUHlFcnJfQ2hlY2tTaWduYWxzKCkpKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOwogCiAgICAgaWYgKHNpLnNpX3BpZCA9PSAwKQogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTcwMjgsNzkgKzY5NTcsMTExIEBACiAKICAgICByZXR1cm4gcmVzdWx0OwogfQotI2VuZGlmCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKSAqLwogCi0jaWZkZWYgSEFWRV9XQUlUUElECi1QeURvY19TVFJWQVIocG9zaXhfd2FpdHBpZF9fZG9jX18sCi0id2FpdHBpZChwaWQsIG9wdGlvbnMpIC0+IChwaWQsIHN0YXR1cylcblxuXAotV2FpdCBmb3IgY29tcGxldGlvbiBvZiBhIGdpdmVuIGNoaWxkIHByb2Nlc3MuIik7CisKKyNpZiBkZWZpbmVkKEhBVkVfV0FJVFBJRCkKKy8qW2NsaW5pYyBpbnB1dF0KK29zLndhaXRwaWQKKyAgICBwaWQ6IHBpZF90CisgICAgb3B0aW9uczogaW50CisgICAgLworCitXYWl0IGZvciBjb21wbGV0aW9uIG9mIGEgZ2l2ZW4gY2hpbGQgcHJvY2Vzcy4KKworUmV0dXJucyBhIHR1cGxlIG9mIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGUgY2hpbGQgcHJvY2VzczoKKyAgICAocGlkLCBzdGF0dXMpCisKK1RoZSBvcHRpb25zIGFyZ3VtZW50IGlzIGlnbm9yZWQgb24gV2luZG93cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3dhaXRwaWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3Nfd2FpdHBpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCwgaW50IG9wdGlvbnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWMzN2MwNjg4N2EyMDI3MCBpbnB1dD0wYmYxNjY2Yjg3NThmZGEzXSovCiB7Ci0gICAgcGlkX3QgcGlkOwotICAgIGludCBvcHRpb25zOworICAgIHBpZF90IHJlczsKKyAgICBpbnQgYXN5bmNfZXJyID0gMDsKICAgICBXQUlUX1RZUEUgc3RhdHVzOwogICAgIFdBSVRfU1RBVFVTX0lOVChzdGF0dXMpID0gMDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpOndhaXRwaWQiLCAmcGlkLCAmb3B0aW9ucykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBwaWQgPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgb3B0aW9ucyk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocGlkID09IC0xKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIG9wdGlvbnMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKHJlcyA8IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gKCFhc3luY19lcnIpID8gcG9zaXhfZXJyb3IoKSA6IE5VTEw7CiAKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmkiLCBQeUxvbmdfRnJvbVBpZChwaWQpLCBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5pIiwgUHlMb25nX0Zyb21QaWQocmVzKSwgV0FJVF9TVEFUVVNfSU5UKHN0YXR1cykpOwogfQotCiAjZWxpZiBkZWZpbmVkKEhBVkVfQ1dBSVQpCi0KIC8qIE1TIEMgaGFzIGEgdmFyaWFudCBvZiB3YWl0cGlkKCkgdGhhdCdzIHVzYWJsZSBmb3IgbW9zdCBwdXJwb3Nlcy4gKi8KLVB5RG9jX1NUUlZBUihwb3NpeF93YWl0cGlkX19kb2NfXywKLSJ3YWl0cGlkKHBpZCwgb3B0aW9ucykgLT4gKHBpZCwgc3RhdHVzIDw8IDgpXG5cbiIKLSJXYWl0IGZvciBjb21wbGV0aW9uIG9mIGEgZ2l2ZW4gcHJvY2Vzcy4gIG9wdGlvbnMgaXMgaWdub3JlZCBvbiBXaW5kb3dzLiIpOworLypbY2xpbmljIGlucHV0XQorb3Mud2FpdHBpZAorICAgIHBpZDogUHlfaW50cHRyX3QKKyAgICBvcHRpb25zOiBpbnQKKyAgICAvCisKK1dhaXQgZm9yIGNvbXBsZXRpb24gb2YgYSBnaXZlbiBwcm9jZXNzLgorCitSZXR1cm5zIGEgdHVwbGUgb2YgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBwcm9jZXNzOgorICAgIChwaWQsIHN0YXR1cyA8PCA4KQorCitUaGUgb3B0aW9ucyBhcmd1bWVudCBpcyBpZ25vcmVkIG9uIFdpbmRvd3MuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF93YWl0cGlkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3dhaXRwaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9pbnRwdHJfdCBwaWQsIGludCBvcHRpb25zKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE1ZjFjZTAwNWEzNDZiMDkgaW5wdXQ9NDQ0YzhmNTFjY2E1Yjg2Ml0qLwogewotICAgIFB5X2ludHB0cl90IHBpZDsKLSAgICBpbnQgc3RhdHVzLCBvcHRpb25zOworICAgIGludCBzdGF0dXM7CisgICAgUHlfaW50cHRyX3QgcmVzOworICAgIGludCBhc3luY19lcnIgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6d2FpdHBpZCIsICZwaWQsICZvcHRpb25zKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHBpZCA9IF9jd2FpdCgmc3RhdHVzLCBwaWQsIG9wdGlvbnMpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHBpZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IF9jd2FpdCgmc3RhdHVzLCBwaWQsIG9wdGlvbnMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKHJlcyA8IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gKCFhc3luY19lcnIpID8gcG9zaXhfZXJyb3IoKSA6IE5VTEw7CiAKICAgICAvKiBzaGlmdCB0aGUgc3RhdHVzIGxlZnQgYSBieXRlIHNvIHRoaXMgaXMgbW9yZSBsaWtlIHRoZSBQT1NJWCB3YWl0cGlkICovCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoX1B5X1BBUlNFX0lOVFBUUiAiaSIsIHBpZCwgc3RhdHVzIDw8IDgpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIgImkiLCByZXMsIHN0YXR1cyA8PCA4KTsKIH0KLSNlbmRpZiAvKiBIQVZFX1dBSVRQSUQgfHwgSEFWRV9DV0FJVCAqLworI2VuZGlmCisKIAogI2lmZGVmIEhBVkVfV0FJVAotUHlEb2NfU1RSVkFSKHBvc2l4X3dhaXRfX2RvY19fLAotIndhaXQoKSAtPiAocGlkLCBzdGF0dXMpXG5cblwKLVdhaXQgZm9yIGNvbXBsZXRpb24gb2YgYSBjaGlsZCBwcm9jZXNzLiIpOworLypbY2xpbmljIGlucHV0XQorb3Mud2FpdAorCitXYWl0IGZvciBjb21wbGV0aW9uIG9mIGEgY2hpbGQgcHJvY2Vzcy4KKworUmV0dXJucyBhIHR1cGxlIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGlsZCBwcm9jZXNzOgorICAgIChwaWQsIHN0YXR1cykKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3dhaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc193YWl0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02YmM0MTlhYzMyZmIzNjRiIGlucHV0PTAzYjAxODJkNGE0NzAwY2VdKi8KIHsKICAgICBwaWRfdCBwaWQ7CisgICAgaW50IGFzeW5jX2VyciA9IDA7CiAgICAgV0FJVF9UWVBFIHN0YXR1czsKICAgICBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSA9IDA7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcGlkID0gd2FpdCgmc3RhdHVzKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChwaWQgPT0gLTEpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBwaWQgPSB3YWl0KCZzdGF0dXMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKHBpZCA8IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworICAgIGlmIChwaWQgPCAwKQorICAgICAgICByZXR1cm4gKCFhc3luY19lcnIpID8gcG9zaXhfZXJyb3IoKSA6IE5VTEw7CiAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmkiLCBQeUxvbmdfRnJvbVBpZChwaWQpLCBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1dBSVQgKi8KIAogCiAjaWYgZGVmaW5lZChIQVZFX1JFQURMSU5LKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCkBAIC03MTE2LDYgKzcwNzcsNyBAQAogCiAjaWZkZWYgSEFWRV9SRUFETElOSwogCisvKiBBQyAzLjU6IG1lcmdlIHdpbjMyIGFuZCBub3QgdG9nZXRoZXIgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9yZWFkbGluayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CkBAIC03MTMwLDEyICs3MDkyLDcgQEAKICAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicmVhZGxpbmsiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpyZWFkbGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0jaWZkZWYgSEFWRV9SRUFETElOS0FUCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRpcl9mZF91bmF2YWlsYWJsZSwgJmRpcl9mZAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQURMSU5LQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtNzE2MSwyMyArNzExOCw4NiBAQAogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKLQogI2VuZGlmIC8qIEhBVkVfUkVBRExJTksgKi8KIAorI2lmICFkZWZpbmVkKEhBVkVfUkVBRExJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbl9yZWFkbGluayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgd2NoYXJfdCAqcGF0aDsKKyAgICBEV09SRCBuX2J5dGVzX3JldHVybmVkOworICAgIERXT1JEIGlvX3Jlc3VsdDsKKyAgICBQeU9iamVjdCAqcG8sICpyZXN1bHQ7CisgICAgICAgIGludCBkaXJfZmQ7CisgICAgSEFORExFIHJlcGFyc2VfcG9pbnRfaGFuZGxlOworCisgICAgY2hhciB0YXJnZXRfYnVmZmVyW01BWElNVU1fUkVQQVJTRV9EQVRBX0JVRkZFUl9TSVpFXTsKKyAgICBSRVBBUlNFX0RBVEFfQlVGRkVSICpyZGIgPSAoUkVQQVJTRV9EQVRBX0JVRkZFUiAqKXRhcmdldF9idWZmZXI7CisgICAgd2NoYXJfdCAqcHJpbnRfbmFtZTsKKworICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiVXwkTyY6cmVhZGxpbmsiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwYXRoID0gUHlVbmljb2RlX0FzVW5pY29kZShwbyk7CisgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBGaXJzdCBnZXQgYSBoYW5kbGUgdG8gdGhlIHJlcGFyc2UgcG9pbnQgKi8KKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmVwYXJzZV9wb2ludF9oYW5kbGUgPSBDcmVhdGVGaWxlVygKKyAgICAgICAgcGF0aCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgT1BFTl9FWElTVElORywKKyAgICAgICAgRklMRV9GTEFHX09QRU5fUkVQQVJTRV9QT0lOVHxGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUywKKyAgICAgICAgMCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXBhcnNlX3BvaW50X2hhbmRsZT09SU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoInJlYWRsaW5rIiwgcG8pOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIC8qIE5ldyBjYWxsIERldmljZUlvQ29udHJvbCB0byByZWFkIHRoZSByZXBhcnNlIHBvaW50ICovCisgICAgaW9fcmVzdWx0ID0gRGV2aWNlSW9Db250cm9sKAorICAgICAgICByZXBhcnNlX3BvaW50X2hhbmRsZSwKKyAgICAgICAgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQsCisgICAgICAgIDAsIDAsIC8qIGluIGJ1ZmZlciAqLworICAgICAgICB0YXJnZXRfYnVmZmVyLCBzaXplb2YodGFyZ2V0X2J1ZmZlciksCisgICAgICAgICZuX2J5dGVzX3JldHVybmVkLAorICAgICAgICAwIC8qIHdlJ3JlIG5vdCB1c2luZyBPVkVSTEFQUEVEX0lPICovCisgICAgICAgICk7CisgICAgQ2xvc2VIYW5kbGUocmVwYXJzZV9wb2ludF9oYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoaW9fcmVzdWx0PT0wKQorICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KCJyZWFkbGluayIsIHBvKTsKKworICAgIGlmIChyZGItPlJlcGFyc2VUYWcgIT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykKKyAgICB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJub3QgYSBzeW1ib2xpYyBsaW5rIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwcmludF9uYW1lID0gcmRiLT5TeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyLlBhdGhCdWZmZXIgKworICAgICAgICAgICAgICAgICByZGItPlN5bWJvbGljTGlua1JlcGFyc2VCdWZmZXIuUHJpbnROYW1lT2Zmc2V0OworCisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihwcmludF9uYW1lLAorICAgICAgICAgICAgICAgICAgICByZGItPlN5bWJvbGljTGlua1JlcGFyc2VCdWZmZXIuUHJpbnROYW1lTGVuZ3RoLzIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiAhZGVmaW5lZChIQVZFX1JFQURMSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCisKKwogCiAjaWZkZWYgSEFWRV9TWU1MSU5LCi1QeURvY19TVFJWQVIocG9zaXhfc3ltbGlua19fZG9jX18sCi0ic3ltbGluayhzcmMsIGRzdCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSwgKiwgZGlyX2ZkPU5vbmUpXG5cblwKLUNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgcG9pbnRpbmcgdG8gc3JjIG5hbWVkIGRzdC5cblxuXAotdGFyZ2V0X2lzX2RpcmVjdG9yeSBpcyByZXF1aXJlZCBvbiBXaW5kb3dzIGlmIHRoZSB0YXJnZXQgaXMgdG8gYmVcblwKLSAgaW50ZXJwcmV0ZWQgYXMgYSBkaXJlY3RvcnkuICAoT24gV2luZG93cywgc3ltbGluayByZXF1aXJlc1xuXAotICBXaW5kb3dzIDYuMCBvciBncmVhdGVyLCBhbmQgcmFpc2VzIGEgTm90SW1wbGVtZW50ZWRFcnJvciBvdGhlcndpc2UuKVxuXAotICB0YXJnZXRfaXNfZGlyZWN0b3J5IGlzIGlnbm9yZWQgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zLlxuXAotXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cblwKLSAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOwogCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogCkBAIC03MzIzLDE4OSArNzM0MywxMDIgQEAKICAgICAgICAgJiYgc3JjX2luZm8uZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWQogICAgICk7CiB9Ci0KICNlbmRpZgogCisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnN5bWxpbmsKKyAgICBzcmM6IHBhdGhfdAorICAgIGRzdDogcGF0aF90CisgICAgdGFyZ2V0X2lzX2RpcmVjdG9yeTogYm9vbCA9IEZhbHNlCisgICAgKgorICAgIGRpcl9mZDogZGlyX2ZkKHJlcXVpcmVzPSdzeW1saW5rYXQnKT1Ob25lCisKKyMgInN5bWxpbmsoc3JjLCBkc3QsIHRhcmdldF9pc19kaXJlY3Rvcnk9RmFsc2UsICosIGRpcl9mZD1Ob25lKVxuXG5cCisKK0NyZWF0ZSBhIHN5bWJvbGljIGxpbmsgcG9pbnRpbmcgdG8gc3JjIG5hbWVkIGRzdC4KKwordGFyZ2V0X2lzX2RpcmVjdG9yeSBpcyByZXF1aXJlZCBvbiBXaW5kb3dzIGlmIHRoZSB0YXJnZXQgaXMgdG8gYmUKKyAgaW50ZXJwcmV0ZWQgYXMgYSBkaXJlY3RvcnkuICAoT24gV2luZG93cywgc3ltbGluayByZXF1aXJlcworICBXaW5kb3dzIDYuMCBvciBncmVhdGVyLCBhbmQgcmFpc2VzIGEgTm90SW1wbGVtZW50ZWRFcnJvciBvdGhlcndpc2UuKQorICB0YXJnZXRfaXNfZGlyZWN0b3J5IGlzIGlnbm9yZWQgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zLgorCitJZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAorICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LgorZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS4KKyAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zeW1saW5rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX3N5bWxpbmtfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnNyYywgcGF0aF90ICpkc3QsCisgICAgICAgICAgICAgICAgaW50IHRhcmdldF9pc19kaXJlY3RvcnksIGludCBkaXJfZmQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDhjYTlmM2YzY2Y5NjBmNiBpbnB1dD1lODIwZWM0NDcyNTQ3YmMzXSovCiB7Ci0gICAgcGF0aF90IHNyYzsKLSAgICBwYXRoX3QgZHN0OwotICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKLSAgICBpbnQgdGFyZ2V0X2lzX2RpcmVjdG9yeSA9IDA7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InNyYyIsICJkc3QiLCAidGFyZ2V0X2lzX2RpcmVjdG9yeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcl9mZCIsIE5VTEx9OwotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIERXT1JEIHJlc3VsdDsKICNlbHNlCiAgICAgaW50IHJlc3VsdDsKICNlbmRpZgogCi0gICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKLSAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJzeW1saW5rIjsKLSAgICBzcmMuYXJndW1lbnRfbmFtZSA9ICJzcmMiOwotICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7Ci0gICAgZHN0LmZ1bmN0aW9uX25hbWUgPSAic3ltbGluayI7Ci0gICAgZHN0LmFyZ3VtZW50X25hbWUgPSAiZHN0IjsKLQogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoIWNoZWNrX0NyZWF0ZVN5bWJvbGljTGluaygpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAogICAgICAgICAgICAgIkNyZWF0ZVN5bWJvbGljTGluayBmdW5jdGlvbnMgbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgaWYgKCF3aW4zMl9jYW5fc3ltbGluaykgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwgInN5bWJvbGljIGxpbmsgcHJpdmlsZWdlIG5vdCBoZWxkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAjZW5kaWYKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8aSRPJjpzeW1saW5rIiwKLSAgICAgICAgICAgIGtleXdvcmRzLAotICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZzcmMsCi0gICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJmRzdCwKLSAgICAgICAgICAgICZ0YXJnZXRfaXNfZGlyZWN0b3J5LAotI2lmZGVmIEhBVkVfU1lNTElOS0FUCi0gICAgICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkCi0jZWxzZQotICAgICAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkCi0jZW5kaWYKLSAgICAgICAgICAgICkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKChzcmMubmFycm93ICYmIGRzdC53aWRlKSB8fCAoc3JjLndpZGUgJiYgZHN0Lm5hcnJvdykpIHsKKyAgICBpZiAoKHNyYy0+bmFycm93ICYmIGRzdC0+d2lkZSkgfHwgKHNyYy0+d2lkZSAmJiBkc3QtPm5hcnJvdykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAic3ltbGluazogc3JjIGFuZCBkc3QgbXVzdCBiZSB0aGUgc2FtZSB0eXBlIik7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAjaWZkZWYgTVNfV0lORE9XUwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGlmIChkc3Qud2lkZSkgeworICAgIGlmIChkc3QtPndpZGUpIHsKICAgICAgICAgLyogaWYgc3JjIGlzIGEgZGlyZWN0b3J5LCBlbnN1cmUgdGFyZ2V0X2lzX2RpcmVjdG9yeT09MSAqLwotICAgICAgICB0YXJnZXRfaXNfZGlyZWN0b3J5IHw9IF9jaGVja19kaXJXKHNyYy53aWRlLCBkc3Qud2lkZSk7Ci0gICAgICAgIHJlc3VsdCA9IFB5X0NyZWF0ZVN5bWJvbGljTGlua1coZHN0LndpZGUsIHNyYy53aWRlLAorICAgICAgICB0YXJnZXRfaXNfZGlyZWN0b3J5IHw9IF9jaGVja19kaXJXKHNyYy0+d2lkZSwgZHN0LT53aWRlKTsKKyAgICAgICAgcmVzdWx0ID0gUHlfQ3JlYXRlU3ltYm9saWNMaW5rVyhkc3QtPndpZGUsIHNyYy0+d2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfaXNfZGlyZWN0b3J5KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIGlmIHNyYyBpcyBhIGRpcmVjdG9yeSwgZW5zdXJlIHRhcmdldF9pc19kaXJlY3Rvcnk9PTEgKi8KLSAgICAgICAgdGFyZ2V0X2lzX2RpcmVjdG9yeSB8PSBfY2hlY2tfZGlyQShzcmMubmFycm93LCBkc3QubmFycm93KTsKLSAgICAgICAgcmVzdWx0ID0gUHlfQ3JlYXRlU3ltYm9saWNMaW5rQShkc3QubmFycm93LCBzcmMubmFycm93LAorICAgICAgICB0YXJnZXRfaXNfZGlyZWN0b3J5IHw9IF9jaGVja19kaXJBKHNyYy0+bmFycm93LCBkc3QtPm5hcnJvdyk7CisgICAgICAgIHJlc3VsdCA9IFB5X0NyZWF0ZVN5bWJvbGljTGlua0EoZHN0LT5uYXJyb3csIHNyYy0+bmFycm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9pc19kaXJlY3RvcnkpOwogICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcjIoJnNyYywgJmRzdCk7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yMihzcmMsIGRzdCk7CiAKICNlbHNlCiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWYgSEFWRV9TWU1MSU5LQVQKICAgICBpZiAoZGlyX2ZkICE9IERFRkFVTFRfRElSX0ZEKQotICAgICAgICByZXN1bHQgPSBzeW1saW5rYXQoc3JjLm5hcnJvdywgZGlyX2ZkLCBkc3QubmFycm93KTsKKyAgICAgICAgcmVzdWx0ID0gc3ltbGlua2F0KHNyYy0+bmFycm93LCBkaXJfZmQsIGRzdC0+bmFycm93KTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gc3ltbGluayhzcmMubmFycm93LCBkc3QubmFycm93KTsKKyAgICAgICAgcmVzdWx0ID0gc3ltbGluayhzcmMtPm5hcnJvdywgZHN0LT5uYXJyb3cpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQorICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yMihzcmMsIGRzdCk7CiAjZW5kaWYKIAotICAgIHJldHVybl92YWx1ZSA9IFB5X05vbmU7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIGdvdG8gZXhpdDsgLyogc2lsZW5jZSAidW51c2VkIGxhYmVsIiB3YXJuaW5nICovCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmc3JjKTsKLSAgICBwYXRoX2NsZWFudXAoJmRzdCk7Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KLQogI2VuZGlmIC8qIEhBVkVfU1lNTElOSyAqLwogCiAKLSNpZiAhZGVmaW5lZChIQVZFX1JFQURMSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpCi0KLXN0YXRpYyBQeU9iamVjdCAqCi13aW5fcmVhZGxpbmsoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQotewotICAgIHdjaGFyX3QgKnBhdGg7Ci0gICAgRFdPUkQgbl9ieXRlc19yZXR1cm5lZDsKLSAgICBEV09SRCBpb19yZXN1bHQ7Ci0gICAgUHlPYmplY3QgKnBvLCAqcmVzdWx0OwotICAgICAgICBpbnQgZGlyX2ZkOwotICAgIEhBTkRMRSByZXBhcnNlX3BvaW50X2hhbmRsZTsKLQotICAgIGNoYXIgdGFyZ2V0X2J1ZmZlcltNQVhJTVVNX1JFUEFSU0VfREFUQV9CVUZGRVJfU0laRV07Ci0gICAgUkVQQVJTRV9EQVRBX0JVRkZFUiAqcmRiID0gKFJFUEFSU0VfREFUQV9CVUZGRVIgKil0YXJnZXRfYnVmZmVyOwotICAgIHdjaGFyX3QgKnByaW50X25hbWU7Ci0KLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCBOVUxMfTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIlV8JE8mOnJlYWRsaW5rIiwga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZwbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcGF0aCA9IFB5VW5pY29kZV9Bc1VuaWNvZGUocG8pOwotICAgIGlmIChwYXRoID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogRmlyc3QgZ2V0IGEgaGFuZGxlIHRvIHRoZSByZXBhcnNlIHBvaW50ICovCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcGFyc2VfcG9pbnRfaGFuZGxlID0gQ3JlYXRlRmlsZVcoCi0gICAgICAgIHBhdGgsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIE9QRU5fRVhJU1RJTkcsCi0gICAgICAgIEZJTEVfRkxBR19PUEVOX1JFUEFSU0VfUE9JTlR8RklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsCi0gICAgICAgIDApOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAocmVwYXJzZV9wb2ludF9oYW5kbGU9PUlOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KCJyZWFkbGluayIsIHBvKTsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAvKiBOZXcgY2FsbCBEZXZpY2VJb0NvbnRyb2wgdG8gcmVhZCB0aGUgcmVwYXJzZSBwb2ludCAqLwotICAgIGlvX3Jlc3VsdCA9IERldmljZUlvQ29udHJvbCgKLSAgICAgICAgcmVwYXJzZV9wb2ludF9oYW5kbGUsCi0gICAgICAgIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5ULAotICAgICAgICAwLCAwLCAvKiBpbiBidWZmZXIgKi8KLSAgICAgICAgdGFyZ2V0X2J1ZmZlciwgc2l6ZW9mKHRhcmdldF9idWZmZXIpLAotICAgICAgICAmbl9ieXRlc19yZXR1cm5lZCwKLSAgICAgICAgMCAvKiB3ZSdyZSBub3QgdXNpbmcgT1ZFUkxBUFBFRF9JTyAqLwotICAgICAgICApOwotICAgIENsb3NlSGFuZGxlKHJlcGFyc2VfcG9pbnRfaGFuZGxlKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKGlvX3Jlc3VsdD09MCkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdCgicmVhZGxpbmsiLCBwbyk7Ci0KLSAgICBpZiAocmRiLT5SZXBhcnNlVGFnICE9IElPX1JFUEFSU0VfVEFHX1NZTUxJTkspCi0gICAgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAibm90IGEgc3ltYm9saWMgbGluayIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcHJpbnRfbmFtZSA9IHJkYi0+U3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlci5QYXRoQnVmZmVyICsKLSAgICAgICAgICAgICAgICAgcmRiLT5TeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyLlByaW50TmFtZU9mZnNldDsKLQotICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocHJpbnRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgcmRiLT5TeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyLlByaW50TmFtZUxlbmd0aC8yKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYgLyogIWRlZmluZWQoSEFWRV9SRUFETElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKSAqLwogCiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIHRpbWVzX3Jlc3VsdF9maWVsZHNbXSA9IHsKQEAgLTc1NzEsMTUgKzc1MDQsMjYgQEAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF90aW1lc19fZG9jX18sCi0idGltZXMoKSAtPiB0aW1lc19yZXN1bHRcblxuXAotUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgaW5kaWNhdGluZyBwcm9jZXNzXG5cCi10aW1lcy4gIFRoZSBvYmplY3QgYmVoYXZlcyBsaWtlIGEgbmFtZWQgdHVwbGUgd2l0aCB0aGVzZSBmaWVsZHM6XG5cCi0gICh1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lLCBlbGFwc2VkX3RpbWUpIik7CiAKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZuZGVmIE1TX1dJTkRPV1MKKyNkZWZpbmUgTkVFRF9USUNLU19QRVJfU0VDT05ECitzdGF0aWMgbG9uZyB0aWNrc19wZXJfc2Vjb25kID0gLTE7CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLworCisvKltjbGluaWMgaW5wdXRdCitvcy50aW1lcworCitSZXR1cm4gYSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgcHJvY2VzcyB0aW1pbmcgaW5mb3JtYXRpb24uCisKK1RoZSBvYmplY3QgcmV0dXJuZWQgYmVoYXZlcyBsaWtlIGEgbmFtZWQgdHVwbGUgd2l0aCB0aGVzZSBmaWVsZHM6CisgICh1dGltZSwgc3RpbWUsIGN1dGltZSwgY3N0aW1lLCBlbGFwc2VkX3RpbWUpCitBbGwgZmllbGRzIGFyZSBmbG9hdGluZyBwb2ludCBudW1iZXJzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc190aW1lc19pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzVmNjQwNTAzNTU3ZDMyYSBpbnB1dD0yYmY5ZGYzZDZhYjJlNDhiXSovCisjaWZkZWYgTVNfV0lORE9XUwogewogICAgIEZJTEVUSU1FIGNyZWF0ZSwgZXhpdCwga2VybmVsLCB1c2VyOwogICAgIEhBTkRMRSBoUHJvYzsKQEAgLTc1OTksMTIgKzc1NDMsMTAgQEAKICAgICAgICAgKGRvdWJsZSkwLAogICAgICAgICAoZG91YmxlKTApOwogfQotI2Vsc2UgLyogTm90IFdpbmRvd3MgKi8KLSNkZWZpbmUgTkVFRF9USUNLU19QRVJfU0VDT05ECi1zdGF0aWMgbG9uZyB0aWNrc19wZXJfc2Vjb25kID0gLTE7Ci1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCisjZWxzZSAvKiBNU19XSU5ET1dTICovCiB7CisKKwogICAgIHN0cnVjdCB0bXMgdDsKICAgICBjbG9ja190IGM7CiAgICAgZXJybm8gPSAwOwpAQCAtNzYxOCwyMyArNzU2MCwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpdC50bXNfY3N0aW1lIC8gdGlja3NfcGVyX3NlY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWMgLyB0aWNrc19wZXJfc2Vjb25kKTsKIH0KLSNlbmRpZgotCisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogI2VuZGlmIC8qIEhBVkVfVElNRVMgKi8KIAogCiAjaWZkZWYgSEFWRV9HRVRTSUQKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXRzaWRfX2RvY19fLAotImdldHNpZChwaWQpIC0+IHNpZFxuXG5cCi1DYWxsIHRoZSBzeXN0ZW0gY2FsbCBnZXRzaWQoKS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldHNpZAorCisgICAgcGlkOiBwaWRfdAorICAgIC8KKworQ2FsbCB0aGUgc3lzdGVtIGNhbGwgZ2V0c2lkKHBpZCkgYW5kIHJldHVybiB0aGUgcmVzdWx0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZ2V0c2lkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX2dldHNpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xMTJkZWFlNTZiMzA2NDYwIGlucHV0PWVlYjJiOTIzYTMwY2UwNGVdKi8KIHsKLSAgICBwaWRfdCBwaWQ7CiAgICAgaW50IHNpZDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiOmdldHNpZCIsICZwaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzaWQgPSBnZXRzaWQocGlkKTsKICAgICBpZiAoc2lkIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC03NjQ0LDUzICs3NTg4LDYwIEBACiAKIAogI2lmZGVmIEhBVkVfU0VUU0lECi1QeURvY19TVFJWQVIocG9zaXhfc2V0c2lkX19kb2NfXywKLSJzZXRzaWQoKVxuXG5cCi1DYWxsIHRoZSBzeXN0ZW0gY2FsbCBzZXRzaWQoKS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNldHNpZAorCitDYWxsIHRoZSBzeXN0ZW0gY2FsbCBzZXRzaWQoKS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NldHNpZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK29zX3NldHNpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTJkZGVkZDUxNzA4NmQ3NyBpbnB1dD01ZmZmNDU4NThlMmYwNzc2XSovCiB7CiAgICAgaWYgKHNldHNpZCgpIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfU0VUU0lEICovCiAKKwogI2lmZGVmIEhBVkVfU0VUUEdJRAotUHlEb2NfU1RSVkFSKHBvc2l4X3NldHBnaWRfX2RvY19fLAotInNldHBnaWQocGlkLCBwZ3JwKVxuXG5cCi1DYWxsIHRoZSBzeXN0ZW0gY2FsbCBzZXRwZ2lkKCkuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5zZXRwZ2lkCisKKyAgICBwaWQ6IHBpZF90CisgICAgcGdycDogcGlkX3QKKyAgICAvCisKK0NhbGwgdGhlIHN5c3RlbSBjYWxsIHNldHBnaWQocGlkLCBwZ3JwKS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3NldHBnaWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3Nfc2V0cGdpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBpZF90IHBpZCwgcGlkX3QgcGdycCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NDYxMTYwMzE5YTQzZDZhIGlucHV0PWZjZWIzOTVlY2E1NzJlMWFdKi8KIHsKLSAgICBwaWRfdCBwaWQ7Ci0gICAgaW50IHBncnA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6c2V0cGdpZCIsICZwaWQsICZwZ3JwKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHNldHBnaWQocGlkLCBwZ3JwKSA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX1NFVFBHSUQgKi8KIAogCiAjaWZkZWYgSEFWRV9UQ0dFVFBHUlAKLVB5RG9jX1NUUlZBUihwb3NpeF90Y2dldHBncnBfX2RvY19fLAotInRjZ2V0cGdycChmZCkgLT4gcGdpZFxuXG5cCi1SZXR1cm4gdGhlIHByb2Nlc3MgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXJtaW5hbCBnaXZlbiBieSBhIGZkLiIpOworLypbY2xpbmljIGlucHV0XQorb3MudGNnZXRwZ3JwCisKKyAgICBmZDogaW50CisgICAgLworCitSZXR1cm4gdGhlIHByb2Nlc3MgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXJtaW5hbCBzcGVjaWZpZWQgYnkgZmQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF90Y2dldHBncnAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfdGNnZXRwZ3JwX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWY4NjVlODhiZTg2YzI3MmIgaW5wdXQ9N2Y2YzE4ZWFjMTBhZGE4Nl0qLwogewotICAgIGludCBmZDsKLSAgICBwaWRfdCBwZ2lkOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTp0Y2dldHBncnAiLCAmZmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwZ2lkID0gdGNnZXRwZ3JwKGZkKTsKKyAgICBwaWRfdCBwZ2lkID0gdGNnZXRwZ3JwKGZkKTsKICAgICBpZiAocGdpZCA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVBpZChwZ2lkKTsKQEAgLTc2OTksMjEgKzc2NTAsMjMgQEAKIAogCiAjaWZkZWYgSEFWRV9UQ1NFVFBHUlAKLVB5RG9jX1NUUlZBUihwb3NpeF90Y3NldHBncnBfX2RvY19fLAotInRjc2V0cGdycChmZCwgcGdpZClcblxuXAotU2V0IHRoZSBwcm9jZXNzIGdyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGVybWluYWwgZ2l2ZW4gYnkgYSBmZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnRjc2V0cGdycAorCisgICAgZmQ6IGludAorICAgIHBnaWQ6IHBpZF90CisgICAgLworCitTZXQgdGhlIHByb2Nlc3MgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXJtaW5hbCBzcGVjaWZpZWQgYnkgZmQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF90Y3NldHBncnAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfdGNzZXRwZ3JwX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBwaWRfdCBwZ2lkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWYxODIxYTM4MWI5ZGFhMzkgaW5wdXQ9NWJkYzk5N2M2YTYxOTAyMF0qLwogewotICAgIGludCBmZDsKLSAgICBwaWRfdCBwZ2lkOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaSIgX1B5X1BBUlNFX1BJRCAiOnRjc2V0cGdycCIsICZmZCwgJnBnaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAodGNzZXRwZ3JwKGZkLCBwZ2lkKSA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX1RDU0VUUEdSUCAqLwogCkBAIC03NzIzLDE1OCArNzY3NiwxNjUgQEAKIGV4dGVybiBpbnQgX1B5X29wZW5fY2xvZXhlY193b3JrczsKICNlbmRpZgogCi1QeURvY19TVFJWQVIocG9zaXhfb3Blbl9fZG9jX18sCi0ib3BlbihwYXRoLCBmbGFncywgbW9kZT0wbzc3NywgKiwgZGlyX2ZkPU5vbmUpXG5cblwKLU9wZW4gYSBmaWxlIGZvciBsb3cgbGV2ZWwgSU8uICBSZXR1cm5zIGEgZmlsZSBoYW5kbGUgKGludGVnZXIpLlxuXAotXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cblwKLSAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfb3BlbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCisvKltjbGluaWMgaW5wdXRdCitvcy5vcGVuIC0+IGludAorICAgIHBhdGg6IHBhdGhfdAorICAgIGZsYWdzOiBpbnQKKyAgICBtb2RlOiBpbnQgPSAwbzc3NworICAgICoKKyAgICBkaXJfZmQ6IGRpcl9mZChyZXF1aXJlcz0nb3BlbmF0JykgPSBOb25lCisKKyMgIm9wZW4ocGF0aCwgZmxhZ3MsIG1vZGU9MG83NzcsICosIGRpcl9mZD1Ob25lKVxuXG5cCisKK09wZW4gYSBmaWxlIGZvciBsb3cgbGV2ZWwgSU8uICBSZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yIChpbnRlZ2VyKS4KKworSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS4KK2Rpcl9mZCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uCisgIElmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorb3Nfb3Blbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IGZsYWdzLCBpbnQgbW9kZSwgaW50IGRpcl9mZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hYmM3MjI3ODg4YzhiYzczIGlucHV0PWFkODYyM2IyOWFjZDI5MzRdKi8KIHsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBpbnQgZmxhZ3M7Ci0gICAgaW50IG1vZGUgPSAwNzc3OwotICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZmQ7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZmxhZ3MiLCAibW9kZSIsICJkaXJfZmQiLCBOVUxMfTsKKyAgICBpbnQgYXN5bmNfZXJyID0gMDsKKwogI2lmZGVmIE9fQ0xPRVhFQwogICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKICNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CiAjZW5kaWYKIAotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAib3BlbiI7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpfGkkTyY6b3BlbiIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0gICAgICAgICZmbGFncywgJm1vZGUsCi0jaWZkZWYgSEFWRV9PUEVOQVQKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkCi0jZW5kaWYKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICNpZmRlZiBNU19XSU5ET1dTCiAgICAgZmxhZ3MgfD0gT19OT0lOSEVSSVQ7CiAjZWxpZiBkZWZpbmVkKE9fQ0xPRVhFQykKICAgICBmbGFncyB8PSBPX0NMT0VYRUM7CiAjZW5kaWYKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChwYXRoLndpZGUpCi0gICAgICAgIGZkID0gX3dvcGVuKHBhdGgud2lkZSwgZmxhZ3MsIG1vZGUpOwotICAgIGVsc2UKKyAgICAgICAgaWYgKHBhdGgtPndpZGUpCisgICAgICAgICAgICBmZCA9IF93b3BlbihwYXRoLT53aWRlLCBmbGFncywgbW9kZSk7CisgICAgICAgIGVsc2UKICNlbmRpZgogI2lmZGVmIEhBVkVfT1BFTkFUCi0gICAgaWYgKGRpcl9mZCAhPSBERUZBVUxUX0RJUl9GRCkKLSAgICAgICAgZmQgPSBvcGVuYXQoZGlyX2ZkLCBwYXRoLm5hcnJvdywgZmxhZ3MsIG1vZGUpOwotICAgIGVsc2UKKyAgICAgICAgaWYgKGRpcl9mZCAhPSBERUZBVUxUX0RJUl9GRCkKKyAgICAgICAgICAgIGZkID0gb3BlbmF0KGRpcl9mZCwgcGF0aC0+bmFycm93LCBmbGFncywgbW9kZSk7CisgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICBmZCA9IG9wZW4ocGF0aC5uYXJyb3csIGZsYWdzLCBtb2RlKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgZmQgPSBvcGVuKHBhdGgtPm5hcnJvdywgZmxhZ3MsIG1vZGUpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKGZkIDwgMCAmJiBlcnJubyA9PSBFSU5UUiAmJiAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKIAotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgcGF0aC5vYmplY3QpOwotICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBpZiAoIWFzeW5jX2VycikKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBwYXRoLT5vYmplY3QpOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAjaWZuZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkgewogICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICNlbmRpZgogCi0gICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKLQotZXhpdDoKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotICAgIHJldHVybiByZXR1cm5fdmFsdWU7CisgICAgcmV0dXJuIGZkOwogfQogCi1QeURvY19TVFJWQVIocG9zaXhfY2xvc2VfX2RvY19fLAotImNsb3NlKGZkKVxuXG5cCi1DbG9zZSBhIGZpbGUgZGVzY3JpcHRvciAoZm9yIGxvdyBsZXZlbCBJTykuIik7CiAKLS8qCi1UaGUgdW5kZXJzY29yZSBhdCBlbmQgb2YgZnVuY3Rpb24gbmFtZSBhdm9pZHMgYSBuYW1lIGNsYXNoIHdpdGggdGhlIGxpYmMKLWZ1bmN0aW9uIHBvc2l4X2Nsb3NlLgotKi8KKy8qW2NsaW5pYyBpbnB1dF0KK29zLmNsb3NlCisKKyAgICBmZDogaW50CisKK0Nsb3NlIGEgZmlsZSBkZXNjcmlwdG9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfY2xvc2VfKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX2Nsb3NlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTJmZTRlOTM2MDI4MjJjMTQgaW5wdXQ9MmJjNDI0NTFjYTVjMzIyM10qLwogewotICAgIGludCBmZCwgcmVzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpjbG9zZSIsICZmZCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGludCByZXM7CiAgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAvKiBXZSBkbyBub3Qgd2FudCB0byByZXRyeSB1cG9uIEVJTlRSOiBzZWUgaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvNTc2NDc4LworICAgICAqIGFuZCBodHRwOi8vbGludXguZGVya2VpbGVyLmNvbS9NYWlsaW5nLUxpc3RzL0tlcm5lbC8yMDA1LTA5LzMwMDAuaHRtbAorICAgICAqIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICAgICByZXMgPSBjbG9zZShmZCk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIAotUHlEb2NfU1RSVkFSKHBvc2l4X2Nsb3NlcmFuZ2VfX2RvY19fLAotImNsb3NlcmFuZ2UoZmRfbG93LCBmZF9oaWdoKVxuXG5cCi1DbG9zZXMgYWxsIGZpbGUgZGVzY3JpcHRvcnMgaW4gW2ZkX2xvdywgZmRfaGlnaCksIGlnbm9yaW5nIGVycm9ycy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmNsb3NlcmFuZ2UKKworICAgIGZkX2xvdzogaW50CisgICAgZmRfaGlnaDogaW50CisgICAgLworCitDbG9zZXMgYWxsIGZpbGUgZGVzY3JpcHRvcnMgaW4gW2ZkX2xvdywgZmRfaGlnaCksIGlnbm9yaW5nIGVycm9ycy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2Nsb3NlcmFuZ2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfY2xvc2VyYW5nZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZF9sb3csIGludCBmZF9oaWdoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBjZTVjMjBmY2RhNjgxYzIgaW5wdXQ9NTg1NWEzZDA1M2ViZDRlY10qLwogewotICAgIGludCBmZF9mcm9tLCBmZF90bywgaTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOmNsb3NlcmFuZ2UiLCAmZmRfZnJvbSwgJmZkX3RvKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaW50IGk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGZvciAoaSA9IGZkX2Zyb207IGkgPCBmZF90bzsgaSsrKQorICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyAgICBmb3IgKGkgPSBmZF9sb3c7IGkgPCBmZF9oaWdoOyBpKyspCiAgICAgICAgIGlmIChfUHlWZXJpZnlfZmQoaSkpCiAgICAgICAgICAgICBjbG9zZShpKTsKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIAotUHlEb2NfU1RSVkFSKHBvc2l4X2R1cF9fZG9jX18sCi0iZHVwKGZkKSAtPiBmZDJcblxuXAotUmV0dXJuIGEgZHVwbGljYXRlIG9mIGEgZmlsZSBkZXNjcmlwdG9yLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuZHVwIC0+IGludAogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZHVwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICBmZDogaW50CisgICAgLworCitSZXR1cm4gYSBkdXBsaWNhdGUgb2YgYSBmaWxlIGRlc2NyaXB0b3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK29zX2R1cF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00ODZmNDg2MDYzNmIyYTlmIGlucHV0PTZmMTBmN2VhOTdmNzg1MmFdKi8KIHsKLSAgICBpbnQgZmQ7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZHVwIiwgJmZkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBmZCA9IF9QeV9kdXAoZmQpOwotICAgIGlmIChmZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKKyAgICByZXR1cm4gX1B5X2R1cChmZCk7CiB9CiAKIAotUHlEb2NfU1RSVkFSKHBvc2l4X2R1cDJfX2RvY19fLAotImR1cDIob2xkX2ZkLCBuZXdfZmQpXG5cblwKLUR1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3IuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5kdXAyCisgICAgZmQ6IGludAorICAgIGZkMjogaW50CisgICAgaW5oZXJpdGFibGU6IGJvb2w9VHJ1ZQorCitEdXBsaWNhdGUgZmlsZSBkZXNjcmlwdG9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZHVwMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19kdXAyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBpbnQgZmQyLCBpbnQgaW5oZXJpdGFibGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGI4MzJhMmQ4NzJjY2M1ZiBpbnB1dD03NmU5NmY1MTFiZTAzNTJmXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImZkIiwgImZkMiIsICJpbmhlcml0YWJsZSIsIE5VTEx9OwotICAgIGludCBmZCwgZmQyOwotICAgIGludCBpbmhlcml0YWJsZSA9IDE7CiAgICAgaW50IHJlczsKICNpZiBkZWZpbmVkKEhBVkVfRFVQMykgJiYgXAogICAgICEoZGVmaW5lZChIQVZFX0ZDTlRMX0gpICYmIGRlZmluZWQoRl9EVVAyRkRfQ0xPRVhFQykpCkBAIC03ODgyLDE2ICs3ODQyLDE4IEBACiAgICAgaW50IGR1cDNfd29ya3MgPSAtMTsKICNlbmRpZgogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaWl8aTpkdXAyIiwga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZkLCAmZmQyLCAmaW5oZXJpdGFibGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmICghX1B5VmVyaWZ5X2ZkX2R1cDIoZmQsIGZkMikpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogCisgICAgLyogZHVwMigpIGNhbiBmYWlsIHdpdGggRUlOVFIgaWYgdGhlIHRhcmdldCBGRCBpcyBhbHJlYWR5IG9wZW4sIGJlY2F1c2UgaXQKKyAgICAgKiB0aGVuIGhhcyB0byBiZSBjbG9zZWQuIFNlZSBvc19jbG9zZV9pbXBsKCkgZm9yIHdoeSB3ZSBkb24ndCBoYW5kbGUgRUlOVFIKKyAgICAgKiB1cG9uIGNsb3NlKCksIGFuZCB0aGVyZWZvcmUgYmVsb3cuCisgICAgICovCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICiAgICAgcmVzID0gZHVwMihmZCwgZmQyKTsKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwpAQCAtNzk0NiwzMCArNzkwOCwzNCBAQAogCiAjZW5kaWYKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorCiAjaWZkZWYgSEFWRV9MT0NLRgotUHlEb2NfU1RSVkFSKHBvc2l4X2xvY2tmX19kb2NfXywKLSJsb2NrZihmZCwgY21kLCBsZW4pXG5cblwKLUFwcGx5LCB0ZXN0IG9yIHJlbW92ZSBhIFBPU0lYIGxvY2sgb24gYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG5cblwKLWZkIGlzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLlxuXAotY21kIHNwZWNpZmllcyB0aGUgY29tbWFuZCB0byB1c2UgLSBvbmUgb2YgRl9MT0NLLCBGX1RMT0NLLCBGX1VMT0NLIG9yXG5cCi1GX1RFU1QuXG5cCi1sZW4gc3BlY2lmaWVzIHRoZSBzZWN0aW9uIG9mIHRoZSBmaWxlIHRvIGxvY2suIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5sb2NrZgorCisgICAgZmQ6IGludAorICAgICAgICBBbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KKyAgICBjb21tYW5kOiBpbnQKKyAgICAgICAgT25lIG9mIEZfTE9DSywgRl9UTE9DSywgRl9VTE9DSyBvciBGX1RFU1QuCisgICAgbGVuZ3RoOiBQeV9vZmZfdAorICAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGxvY2ssIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgIC8KKworQXBwbHksIHRlc3Qgb3IgcmVtb3ZlIGEgUE9TSVggbG9jayBvbiBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbG9ja2YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfbG9ja2ZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBjb21tYW5kLCBQeV9vZmZfdCBsZW5ndGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YWY3MDUxZjNlN2MyOTY1MSBpbnB1dD02NWRhNDFkMjEwNmU5Yjc5XSovCiB7Ci0gICAgaW50IGZkLCBjbWQsIHJlczsKLSAgICBvZmZfdCBsZW47Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU8mOmxvY2tmIiwKLSAgICAgICAgICAgICZmZCwgJmNtZCwgX3BhcnNlX29mZl90LCAmbGVuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaW50IHJlczsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsb2NrZihmZCwgY21kLCBsZW4pOworICAgIHJlcyA9IGxvY2tmKGZkLCBjb21tYW5kLCBsZW5ndGgpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzIDwgMCkKQEAgLTc5NzcsOTUgKzc5NDMsMTA1IEBACiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfTE9DS0YgKi8KIAogCi1QeURvY19TVFJWQVIocG9zaXhfbHNlZWtfX2RvY19fLAotImxzZWVrKGZkLCBwb3MsIGhvdykgLT4gbmV3cG9zXG5cblwKLVNldCB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBhIGZpbGUgZGVzY3JpcHRvci5cblwKLVJldHVybiB0aGUgbmV3IGN1cnNvciBwb3NpdGlvbiBpbiBieXRlcywgc3RhcnRpbmcgZnJvbSB0aGUgYmVnaW5uaW5nLiIpOworLypbY2xpbmljIGlucHV0XQorb3MubHNlZWsgLT4gUHlfb2ZmX3QKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2xzZWVrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICBmZDogaW50CisgICAgcG9zaXRpb246IFB5X29mZl90CisgICAgaG93OiBpbnQKKyAgICAvCisKK1NldCB0aGUgcG9zaXRpb24gb2YgYSBmaWxlIGRlc2NyaXB0b3IuICBSZXR1cm4gdGhlIG5ldyBwb3NpdGlvbi4KKworUmV0dXJuIHRoZSBuZXcgY3Vyc29yIHBvc2l0aW9uIGluIG51bWJlciBvZiBieXRlcworcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5X29mZl90Citvc19sc2Vla19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgUHlfb2ZmX3QgcG9zaXRpb24sIGludCBob3cpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTcxZTFlZmI2YjMwYmQyZiBpbnB1dD05MDI2NTRhZDNmOTZhNmQzXSovCiB7Ci0gICAgaW50IGZkLCBob3c7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgIFBZX0xPTkdfTE9ORyBwb3MsIHJlczsKLSNlbHNlCi0gICAgb2ZmX3QgcG9zLCByZXM7Ci0jZW5kaWYKLSAgICBQeU9iamVjdCAqcG9zb2JqOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU9pOmxzZWVrIiwgJmZkLCAmcG9zb2JqLCAmaG93KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfb2ZmX3QgcmVzdWx0OworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAjaWZkZWYgU0VFS19TRVQKICAgICAvKiBUdXJuIDAsIDEsIDIgaW50byBTRUVLX3tTRVQsQ1VSLEVORH0gKi8KICAgICBzd2l0Y2ggKGhvdykgewotICAgIGNhc2UgMDogaG93ID0gU0VFS19TRVQ7IGJyZWFrOwotICAgIGNhc2UgMTogaG93ID0gU0VFS19DVVI7IGJyZWFrOwotICAgIGNhc2UgMjogaG93ID0gU0VFS19FTkQ7IGJyZWFrOworICAgICAgICBjYXNlIDA6IGhvdyA9IFNFRUtfU0VUOyBicmVhazsKKyAgICAgICAgY2FzZSAxOiBob3cgPSBTRUVLX0NVUjsgYnJlYWs7CisgICAgICAgIGNhc2UgMjogaG93ID0gU0VFS19FTkQ7IGJyZWFrOwogICAgIH0KICNlbmRpZiAvKiBTRUVLX0VORCAqLwogCi0jaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKLSAgICBwb3MgPSBQeUxvbmdfQXNMb25nKHBvc29iaik7Ci0jZWxzZQotICAgIHBvcyA9IFB5TG9uZ19Bc0xvbmdMb25nKHBvc29iaik7Ci0jZW5kaWYKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIGhvdyk7CisgICAgcmVzdWx0ID0gX2xzZWVraTY0KGZkLCBwb3NpdGlvbiwgaG93KTsKICNlbHNlCi0gICAgcmVzID0gbHNlZWsoZmQsIHBvcywgaG93KTsKKyAgICByZXN1bHQgPSBsc2VlayhmZCwgcG9zaXRpb24sIGhvdyk7CiAjZW5kaWYKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICBwb3NpeF9lcnJvcigpOwogCi0jaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJlcyk7Ci0jZWxzZQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKHJlcyk7Ci0jZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKLVB5RG9jX1NUUlZBUihwb3NpeF9yZWFkX19kb2NfXywKLSJyZWFkKGZkLCBidWZmZXJzaXplKSAtPiBieXRlc1xuXG5cCi1SZWFkIGEgZmlsZSBkZXNjcmlwdG9yLiIpOworLypbY2xpbmljIGlucHV0XQorb3MucmVhZAorICAgIGZkOiBpbnQKKyAgICBsZW5ndGg6IFB5X3NzaXplX3QKKyAgICAvCisKK1JlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvci4gIFJldHVybnMgYSBieXRlcyBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9yZWFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3JlYWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIFB5X3NzaXplX3QgbGVuZ3RoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhZmJlOWE1Y2RkYjk4N2IgaW5wdXQ9MWRmMmVhYTI3YzBiZjFkM10qLwogewotICAgIGludCBmZCwgc2l6ZTsKICAgICBQeV9zc2l6ZV90IG47CiAgICAgUHlPYmplY3QgKmJ1ZmZlcjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOnJlYWQiLCAmZmQsICZzaXplKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHNpemUgPCAwKSB7CisKKyAgICBpZiAobGVuZ3RoIDwgMCkgewogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgfQotICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBzaXplKTsKKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAvKiBPbiBXaW5kb3dzLCB0aGUgY291bnQgcGFyYW1ldGVyIG9mIHJlYWQoKSBpcyBhbiBpbnQgKi8KKyAgICBpZiAobGVuZ3RoID4gSU5UX01BWCkKKyAgICAgICAgbGVuZ3RoID0gSU5UX01BWDsKKyNlbmRpZgorCisgICAgYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKU5VTEwsIGxlbmd0aCk7CiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKworICAgIG4gPSBfUHlfcmVhZChmZCwgUHlCeXRlc19BU19TVFJJTkcoYnVmZmVyKSwgbGVuZ3RoKTsKKyAgICBpZiAobiA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYoYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgbiA9IHJlYWQoZmQsIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1ZmZlciksIHNpemUpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICB9Ci0gICAgaWYgKG4gIT0gc2l6ZSkKKworICAgIGlmIChuICE9IGxlbmd0aCkKICAgICAgICAgX1B5Qnl0ZXNfUmVzaXplKCZidWZmZXIsIG4pOworCiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIApAQCAtODEyNywxMjAgKzgxMDMsMTM1IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfUkVBRFYKLVB5RG9jX1NUUlZBUihwb3NpeF9yZWFkdl9fZG9jX18sCi0icmVhZHYoZmQsIGJ1ZmZlcnMpIC0+IGJ5dGVzcmVhZFxuXG5cCi1SZWFkIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IgZmQgaW50byBhIG51bWJlciBvZiBtdXRhYmxlLCBieXRlcy1saWtlXG5cCi1vYmplY3RzIChcImJ1ZmZlcnNcIikuICByZWFkdiB3aWxsIHRyYW5zZmVyIGRhdGEgaW50byBlYWNoIGJ1ZmZlclxuXAotdW50aWwgaXQgaXMgZnVsbCBhbmQgdGhlbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGJ1ZmZlciBpbiB0aGUgc2VxdWVuY2VcblwKLXRvIGhvbGQgdGhlIHJlc3Qgb2YgdGhlIGRhdGEuXG5cblwKLXJlYWR2IHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyByZWFkICh3aGljaCBtYXkgYmUgbGVzcyB0aGFuXG5cCi10aGUgdG90YWwgY2FwYWNpdHkgb2YgYWxsIHRoZSBidWZmZXJzLiIpOwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfcmVhZHYoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorI2lmZGVmIEhBVkVfUkVBRFYKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnJlYWR2IC0+IFB5X3NzaXplX3QKKworICAgIGZkOiBpbnQKKyAgICBidWZmZXJzOiBvYmplY3QKKyAgICAvCisKK1JlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvciBmZCBpbnRvIGFuIGl0ZXJhYmxlIG9mIGJ1ZmZlcnMuCisKK1RoZSBidWZmZXJzIHNob3VsZCBiZSBtdXRhYmxlIGJ1ZmZlcnMgYWNjZXB0aW5nIGJ5dGVzLgorcmVhZHYgd2lsbCB0cmFuc2ZlciBkYXRhIGludG8gZWFjaCBidWZmZXIgdW50aWwgaXQgaXMgZnVsbAorYW5kIHRoZW4gbW92ZSBvbiB0byB0aGUgbmV4dCBidWZmZXIgaW4gdGhlIHNlcXVlbmNlIHRvIGhvbGQKK3RoZSByZXN0IG9mIHRoZSBkYXRhLgorCityZWFkdiByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZCwKK3doaWNoIG1heSBiZSBsZXNzIHRoYW4gdGhlIHRvdGFsIGNhcGFjaXR5IG9mIGFsbCB0aGUgYnVmZmVycy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5X3NzaXplX3QKK29zX3JlYWR2X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBQeU9iamVjdCAqYnVmZmVycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03OTJkYTA2MmQzZmNlYmRiIGlucHV0PWU2NzllYjVkYmZhMDM1N2RdKi8KIHsKLSAgICBpbnQgZmQsIGNudDsKKyAgICBpbnQgY250OwogICAgIFB5X3NzaXplX3QgbjsKLSAgICBQeU9iamVjdCAqc2VxOworICAgIGludCBhc3luY19lcnIgPSAwOwogICAgIHN0cnVjdCBpb3ZlYyAqaW92OwogICAgIFB5X2J1ZmZlciAqYnVmOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTzpyZWFkdiIsICZmZCwgJnNlcSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzZXEpKSB7CisgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNrKGJ1ZmZlcnMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAicmVhZHYoKSBhcmcgMiBtdXN0IGJlIGEgc2VxdWVuY2UiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgY250ID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7CiAKLSAgICBpZiAoaW92X3NldHVwKCZpb3YsICZidWYsIHNlcSwgY250LCBQeUJVRl9XUklUQUJMRSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBjbnQgPSBQeVNlcXVlbmNlX1NpemUoYnVmZmVycyk7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgbiA9IHJlYWR2KGZkLCBpb3YsIGNudCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoaW92X3NldHVwKCZpb3YsICZidWYsIGJ1ZmZlcnMsIGNudCwgUHlCVUZfV1JJVEFCTEUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIG4gPSByZWFkdihmZCwgaW92LCBjbnQpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKG4gPCAwICYmIGVycm5vID09IEVJTlRSICYmICEoYXN5bmNfZXJyID0gUHlFcnJfQ2hlY2tTaWduYWxzKCkpKTsKIAogICAgIGlvdl9jbGVhbnVwKGlvdiwgYnVmLCBjbnQpOwotICAgIGlmIChuIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgaWYgKG4gPCAwKSB7CisgICAgICAgIGlmICghYXN5bmNfZXJyKQorICAgICAgICAgICAgcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAotICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qobik7CisgICAgcmV0dXJuIG47CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1JFQURWICovCisKIAogI2lmZGVmIEhBVkVfUFJFQUQKLVB5RG9jX1NUUlZBUihwb3NpeF9wcmVhZF9fZG9jX18sCi0icHJlYWQoZmQsIGJ1ZmZlcnNpemUsIG9mZnNldCkgLT4gc3RyaW5nXG5cblwKLVJlYWQgZnJvbSBhIGZpbGUgZGVzY3JpcHRvciwgZmQsIGF0IGEgcG9zaXRpb24gb2Ygb2Zmc2V0LiBJdCB3aWxsIHJlYWQgdXBcblwKLXRvIGJ1ZmZlcnNpemUgbnVtYmVyIG9mIGJ5dGVzLiBUaGUgZmlsZSBvZmZzZXQgcmVtYWlucyB1bmNoYW5nZWQuIik7CisvKltjbGluaWMgaW5wdXRdCisjIFRPRE8gbGVuZ3RoIHNob3VsZCBiZSBzaXplX3QhICBidXQgUHl0aG9uIGRvZXNuJ3Qgc3VwcG9ydCBwYXJzaW5nIHNpemVfdCB5ZXQuCitvcy5wcmVhZAorCisgICAgZmQ6IGludAorICAgIGxlbmd0aDogaW50CisgICAgb2Zmc2V0OiBQeV9vZmZfdAorICAgIC8KKworUmVhZCBhIG51bWJlciBvZiBieXRlcyBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yIHN0YXJ0aW5nIGF0IGEgcGFydGljdWxhciBvZmZzZXQuCisKK1JlYWQgbGVuZ3RoIGJ5dGVzIGZyb20gZmlsZSBkZXNjcmlwdG9yIGZkLCBzdGFydGluZyBhdCBvZmZzZXQgYnl0ZXMgZnJvbQordGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBmaWxlIG9mZnNldCByZW1haW5zIHVuY2hhbmdlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3ByZWFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3ByZWFkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBpbnQgbGVuZ3RoLCBQeV9vZmZfdCBvZmZzZXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDM1YjI5ZWUzMmI1NGE3OCBpbnB1dD0wODQ5NDhkY2JhYTM1ZDRjXSovCiB7Ci0gICAgaW50IGZkLCBzaXplOwotICAgIG9mZl90IG9mZnNldDsKICAgICBQeV9zc2l6ZV90IG47CisgICAgaW50IGFzeW5jX2VyciA9IDA7CiAgICAgUHlPYmplY3QgKmJ1ZmZlcjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpTyY6cHJlYWQiLCAmZmQsICZzaXplLCBfcGFyc2Vfb2ZmX3QsICZvZmZzZXQpKQotICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChzaXplIDwgMCkgeworICAgIGlmIChsZW5ndGggPCAwKSB7CiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICB9Ci0gICAgYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKU5VTEwsIHNpemUpOworICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBsZW5ndGgpOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICB9Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIG4gPSBwcmVhZChmZCwgUHlCeXRlc19BU19TVFJJTkcoYnVmZmVyKSwgc2l6ZSwgb2Zmc2V0KTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyAgICAgICAgbiA9IHByZWFkKGZkLCBQeUJ5dGVzX0FTX1NUUklORyhidWZmZXIpLCBsZW5ndGgsIG9mZnNldCk7CisgICAgICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAobiA8IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworCiAgICAgaWYgKG4gPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOwogICAgIH0KLSAgICBpZiAobiAhPSBzaXplKQorICAgIGlmIChuICE9IGxlbmd0aCkKICAgICAgICAgX1B5Qnl0ZXNfUmVzaXplKCZidWZmZXIsIG4pOwogICAgIHJldHVybiBidWZmZXI7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1BSRUFEICovCiAKLVB5RG9jX1NUUlZBUihwb3NpeF93cml0ZV9fZG9jX18sCi0id3JpdGUoZmQsIGRhdGEpIC0+IGJ5dGVzd3JpdHRlblxuXG5cCi1Xcml0ZSBieXRlcyB0byBhIGZpbGUgZGVzY3JpcHRvci4iKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3dyaXRlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK29zLndyaXRlIC0+IFB5X3NzaXplX3QKKworICAgIGZkOiBpbnQKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK1dyaXRlIGEgYnl0ZXMgb2JqZWN0IHRvIGEgZmlsZSBkZXNjcmlwdG9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlfc3NpemVfdAorb3Nfd3JpdGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNGVmNWJjOTA0YjU4ZWY5IGlucHV0PTMyMDdlMjg5NjMyMzRmM2NdKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBpbnQgZmQ7Ci0gICAgUHlfc3NpemVfdCBzaXplLCBsZW47Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml5Kjp3cml0ZSIsICZmZCwgJnBidWYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIH0KLSAgICBsZW4gPSBwYnVmLmxlbjsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChsZW4gPiBJTlRfTUFYKQotICAgICAgICBsZW4gPSBJTlRfTUFYOwotICAgIHNpemUgPSB3cml0ZShmZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKLSNlbHNlCi0gICAgc2l6ZSA9IHdyaXRlKGZkLCBwYnVmLmJ1ZiwgbGVuKTsKLSNlbmRpZgotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKHNpemUgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNpemUpOworICAgIHJldHVybiBfUHlfd3JpdGUoZmQsIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuKTsKIH0KIAogI2lmZGVmIEhBVkVfU0VOREZJTEUKQEAgLTgyNTAsMTEgKzgyNDEsMTMgQEAKICAgICAgICAgICAgIC0+IGJ5dGVzd3JpdHRlblxuXAogQ29weSBjb3VudCBieXRlcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBpbiB0byBmaWxlIGRlc2NyaXB0b3Igb3V0LiIpOwogCisvKiBBQyAzLjU6IGRvbid0IGJvdGhlciBjb252ZXJ0aW5nLCBoYXMgb3B0aW9uYWwgZ3JvdXAqLwogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X3NlbmRmaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKIHsKICAgICBpbnQgaW4sIG91dDsKICAgICBQeV9zc2l6ZV90IHJldDsKKyAgICBpbnQgYXN5bmNfZXJyID0gMDsKICAgICBvZmZfdCBvZmZzZXQ7CiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQpAQCAtODI3NiwxMCArODI2OSwxMCBAQAogCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiaWlPJk8mfE9PaTpzZW5kZmlsZSIsCi0gICAgICAgIGtleXdvcmRzLCAmb3V0LCAmaW4sIF9wYXJzZV9vZmZfdCwgJm9mZnNldCwgX3BhcnNlX29mZl90LCAmc2J5dGVzLAorICAgICAgICBrZXl3b3JkcywgJm91dCwgJmluLCBQeV9vZmZfdF9jb252ZXJ0ZXIsICZvZmZzZXQsIFB5X29mZl90X2NvbnZlcnRlciwgJnNieXRlcywKICNlbHNlCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAiaWlPJm58T09pOnNlbmRmaWxlIiwKLSAgICAgICAga2V5d29yZHMsICZvdXQsICZpbiwgX3BhcnNlX29mZl90LCAmb2Zmc2V0LCAmbGVuLAorICAgICAgICBrZXl3b3JkcywgJm91dCwgJmluLCBQeV9vZmZfdF9jb252ZXJ0ZXIsICZvZmZzZXQsICZsZW4sCiAjZW5kaWYKICAgICAgICAgICAgICAgICAmaGVhZGVycywgJnRyYWlsZXJzLCAmZmxhZ3MpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MzE4LDEzICs4MzExLDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIF9fQVBQTEVfXwotICAgIHJldCA9IHNlbmRmaWxlKGluLCBvdXQsIG9mZnNldCwgJnNieXRlcywgJnNmLCBmbGFncyk7CisgICAgICAgIHJldCA9IHNlbmRmaWxlKGluLCBvdXQsIG9mZnNldCwgJnNieXRlcywgJnNmLCBmbGFncyk7CiAjZWxzZQotICAgIHJldCA9IHNlbmRmaWxlKGluLCBvdXQsIG9mZnNldCwgbGVuLCAmc2YsICZzYnl0ZXMsIGZsYWdzKTsKKyAgICAgICAgcmV0ID0gc2VuZGZpbGUoaW4sIG91dCwgb2Zmc2V0LCBsZW4sICZzZiwgJnNieXRlcywgZmxhZ3MpOwogI2VuZGlmCi0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSICYmICEoYXN5bmNfZXJyID0gUHlFcnJfQ2hlY2tTaWduYWxzKCkpKTsKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAogCiAgICAgaWYgKHNmLmhlYWRlcnMgIT0gTlVMTCkKICAgICAgICAgaW92X2NsZWFudXAoc2YuaGVhZGVycywgaGJ1Ziwgc2YuaGRyX2NudCk7CkBAIC04MzQzLDcgKzgzNDAsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICByZXR1cm4gKCFhc3luY19lcnIpID8gcG9zaXhfZXJyb3IoKSA6IE5VTEw7CiAgICAgfQogICAgIGdvdG8gZG9uZTsKIApAQCAtODM2NCw3NiArODM2MSwxMDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAjaWZkZWYgbGludXgKICAgICBpZiAob2Zmb2JqID09IFB5X05vbmUpIHsKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICByZXQgPSBzZW5kZmlsZShvdXQsIGluLCBOVUxMLCBjb3VudCk7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIHJldCA9IHNlbmRmaWxlKG91dCwgaW4sIE5VTEwsIGNvdW50KTsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIH0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOwogICAgICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOwogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibiIsIHJldCk7CiAgICAgfQogI2VuZGlmCi0gICAgaWYgKCFfcGFyc2Vfb2ZmX3Qob2Zmb2JqLCAmb2Zmc2V0KSkKKyAgICBpZiAoIVB5X29mZl90X2NvbnZlcnRlcihvZmZvYmosICZvZmZzZXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gc2VuZGZpbGUob3V0LCBpbiwgJm9mZnNldCwgY291bnQpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmV0ID0gc2VuZGZpbGUob3V0LCBpbiwgJm9mZnNldCwgY291bnQpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOwogICAgIGlmIChyZXQgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJuIiwgcmV0KTsKICNlbmRpZgogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9TRU5ERklMRSAqLwogCi1QeURvY19TVFJWQVIocG9zaXhfZnN0YXRfX2RvY19fLAotImZzdGF0KGZkKSAtPiBzdGF0IHJlc3VsdFxuXG5cCi1MaWtlIHN0YXQoKSwgYnV0IGZvciBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLUVxdWl2YWxlbnQgdG8gc3RhdChmZD1mZCkuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmZzdGF0CisKKyAgICBmZCA6IGludAorCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLgorCitMaWtlIHN0YXQoKSwgYnV0IGZvciBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KK0VxdWl2YWxlbnQgdG8gb3Muc3RhdChmZCkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9mc3RhdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19mc3RhdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lZmMwMzhjYjVmNjU0NDkyIGlucHV0PTI3ZTBlMGViYmU1NjAwYzldKi8KIHsKLSAgICBpbnQgZmQ7CiAgICAgU1RSVUNUX1NUQVQgc3Q7CiAgICAgaW50IHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZnN0YXQiLCAmZmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gRlNUQVQoZmQsICZzdCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpbnQgYXN5bmNfZXJyID0gMDsKKworICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSBGU1RBVChmZCwgJnN0KTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9IHdoaWxlIChyZXMgIT0gMCAmJiBlcnJubyA9PSBFSU5UUiAmJiAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CiAgICAgaWYgKHJlcyAhPSAwKSB7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAjZWxzZQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOwogI2VuZGlmCiAgICAgfQogCiAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X2lzYXR0eV9fZG9jX18sCi0iaXNhdHR5KGZkKSAtPiBib29sXG5cblwKLVJldHVybiBUcnVlIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgJ2ZkJyBpcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvclxuXAotY29ubmVjdGVkIHRvIHRoZSBzbGF2ZSBlbmQgb2YgYSB0ZXJtaW5hbC4iKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2lzYXR0eShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitvcy5pc2F0dHkgLT4gYm9vbAorICAgIGZkOiBpbnQKKyAgICAvCisKK1JldHVybiBUcnVlIGlmIHRoZSBmZCBpcyBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KKworUmV0dXJuIFRydWUgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvcgorY29ubmVjdGVkIHRvIHRoZSBzbGF2ZSBlbmQgb2YgYSB0ZXJtaW5hbC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorb3NfaXNhdHR5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZhNDhjOGI0ZTY0NGNhMDAgaW5wdXQ9MDhjZTk0YWExZWFmN2I1ZV0qLwogewotICAgIGludCBmZDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6aXNhdHR5IiwgJmZkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaW50IHJldHVybl92YWx1ZTsKICAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoMCk7Ci0gICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpc2F0dHkoZmQpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorICAgIHJldHVybl92YWx1ZSA9IGlzYXR0eShmZCk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCisKICNpZmRlZiBIQVZFX1BJUEUKLVB5RG9jX1NUUlZBUihwb3NpeF9waXBlX19kb2NfXywKLSJwaXBlKCkgLT4gKHJlYWRfZW5kLCB3cml0ZV9lbmQpXG5cblwKLUNyZWF0ZSBhIHBpcGUuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5waXBlCisKK0NyZWF0ZSBhIHBpcGUuCisKK1JldHVybnMgYSB0dXBsZSBvZiB0d28gZmlsZSBkZXNjcmlwdG9yczoKKyAgKHJlYWRfZmQsIHdyaXRlX2ZkKQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfcGlwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK29zX3BpcGVfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZmOWI3NjI1NTc5M2I0NDAgaW5wdXQ9MDI1MzVlOGM4ZmE2YzRkNF0qLwogewogICAgIGludCBmZHNbMl07CiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtODUwMSwyNSArODUyOCwzMCBAQAogfQogI2VuZGlmICAvKiBIQVZFX1BJUEUgKi8KIAorCiAjaWZkZWYgSEFWRV9QSVBFMgotUHlEb2NfU1RSVkFSKHBvc2l4X3BpcGUyX19kb2NfXywKLSJwaXBlMihmbGFncykgLT4gKHJlYWRfZW5kLCB3cml0ZV9lbmQpXG5cblwKLUNyZWF0ZSBhIHBpcGUgd2l0aCBmbGFncyBzZXQgYXRvbWljYWxseS5cblwKLWZsYWdzIGNhbiBiZSBjb25zdHJ1Y3RlZCBieSBPUmluZyB0b2dldGhlciBvbmUgb3IgbW9yZSBvZiB0aGVzZSB2YWx1ZXM6XG5cCi1PX05PTkJMT0NLLCBPX0NMT0VYRUMuXG5cCi0iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnBpcGUyCisKKyAgICBmbGFnczogaW50CisgICAgLworCitDcmVhdGUgYSBwaXBlIHdpdGggZmxhZ3Mgc2V0IGF0b21pY2FsbHkuCisKK1JldHVybnMgYSB0dXBsZSBvZiB0d28gZmlsZSBkZXNjcmlwdG9yczoKKyAgKHJlYWRfZmQsIHdyaXRlX2ZkKQorCitmbGFncyBjYW4gYmUgY29uc3RydWN0ZWQgYnkgT1JpbmcgdG9nZXRoZXIgb25lIG9yIG1vcmUgb2YgdGhlc2UgdmFsdWVzOgorT19OT05CTE9DSywgT19DTE9FWEVDLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfcGlwZTIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitvc19waXBlMl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmbGFncykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNTc1MWZiNDNhNDU1NDBmIGlucHV0PWYyNjFiNmU3ZTYzYzY4MTddKi8KIHsKLSAgICBpbnQgZmxhZ3M7CiAgICAgaW50IGZkc1syXTsKICAgICBpbnQgcmVzOwogCi0gICAgZmxhZ3MgPSBfUHlMb25nX0FzSW50KGFyZyk7Ci0gICAgaWYgKGZsYWdzID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgcmVzID0gcGlwZTIoZmRzLCBmbGFncyk7CiAgICAgaWYgKHJlcyAhPSAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKQEAgLTg1MjcsMzA2ICs4NTU5LDMzOSBAQAogfQogI2VuZGlmIC8qIEhBVkVfUElQRTIgKi8KIAotI2lmZGVmIEhBVkVfV1JJVEVWCi1QeURvY19TVFJWQVIocG9zaXhfd3JpdGV2X19kb2NfXywKLSJ3cml0ZXYoZmQsIGJ1ZmZlcnMpIC0+IGJ5dGVzd3JpdHRlblxuXG5cCi1Xcml0ZSB0aGUgY29udGVudHMgb2YgKmJ1ZmZlcnMqIHRvIGZpbGUgZGVzY3JpcHRvciAqZmQqLiAqYnVmZmVycypcblwKLW11c3QgYmUgYSBzZXF1ZW5jZSBvZiBieXRlcy1saWtlIG9iamVjdHMuXG5cblwKLXdyaXRldiB3cml0ZXMgdGhlIGNvbnRlbnRzIG9mIGVhY2ggb2JqZWN0IHRvIHRoZSBmaWxlIGRlc2NyaXB0b3JcblwKLWFuZCByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4iKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3dyaXRldihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisjaWZkZWYgSEFWRV9XUklURVYKKy8qW2NsaW5pYyBpbnB1dF0KK29zLndyaXRldiAtPiBQeV9zc2l6ZV90CisgICAgZmQ6IGludAorICAgIGJ1ZmZlcnM6IG9iamVjdAorICAgIC8KKworSXRlcmF0ZSBvdmVyIGJ1ZmZlcnMsIGFuZCB3cml0ZSB0aGUgY29udGVudHMgb2YgZWFjaCB0byBhIGZpbGUgZGVzY3JpcHRvci4KKworUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCitidWZmZXJzIG11c3QgYmUgYSBzZXF1ZW5jZSBvZiBieXRlcy1saWtlIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeV9zc2l6ZV90Citvc193cml0ZXZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIFB5T2JqZWN0ICpidWZmZXJzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU2NTY1Y2ZhYzNhYWMxNWIgaW5wdXQ9NWI4ZDE3ZmU0MTg5ZDJmZV0qLwogewotICAgIGludCBmZCwgY250OwotICAgIFB5X3NzaXplX3QgcmVzOwotICAgIFB5T2JqZWN0ICpzZXE7CisgICAgaW50IGNudDsKKyAgICBQeV9zc2l6ZV90IHJlc3VsdDsKKyAgICBpbnQgYXN5bmNfZXJyID0gMDsKICAgICBzdHJ1Y3QgaW92ZWMgKmlvdjsKICAgICBQeV9idWZmZXIgKmJ1ZjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPOndyaXRldiIsICZmZCwgJnNlcSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlTZXF1ZW5jZV9DaGVjayhzZXEpKSB7CisKKyAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2soYnVmZmVycykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICJ3cml0ZXYoKSBhcmcgMiBtdXN0IGJlIGEgc2VxdWVuY2UiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgY250ID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7CisgICAgY250ID0gUHlTZXF1ZW5jZV9TaXplKGJ1ZmZlcnMpOwogCi0gICAgaWYgKGlvdl9zZXR1cCgmaW92LCAmYnVmLCBzZXEsIGNudCwgUHlCVUZfU0lNUExFKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGlvdl9zZXR1cCgmaW92LCAmYnVmLCBidWZmZXJzLCBjbnQsIFB5QlVGX1NJTVBMRSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gd3JpdGV2KGZkLCBpb3YsIGNudCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzdWx0ID0gd3JpdGV2KGZkLCBpb3YsIGNudCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAocmVzdWx0IDwgMCAmJiBlcnJubyA9PSBFSU5UUiAmJiAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CiAKICAgICBpb3ZfY2xlYW51cChpb3YsIGJ1ZiwgY250KTsKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgaWYgKHJlc3VsdCA8IDAgJiYgIWFzeW5jX2VycikKKyAgICAgICAgcG9zaXhfZXJyb3IoKTsKIAotICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9QV1JJVEUKLVB5RG9jX1NUUlZBUihwb3NpeF9wd3JpdGVfX2RvY19fLAotInB3cml0ZShmZCwgc3RyaW5nLCBvZmZzZXQpIC0+IGJ5dGVzd3JpdHRlblxuXG5cCi1Xcml0ZSBzdHJpbmcgdG8gYSBmaWxlIGRlc2NyaXB0b3IsIGZkLCBmcm9tIG9mZnNldCwgbGVhdmluZyB0aGUgZmlsZVxuXAotb2Zmc2V0IHVuY2hhbmdlZC4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3B3cml0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgaW50IGZkOwotICAgIG9mZl90IG9mZnNldDsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml5Kk8mOnB3cml0ZSIsICZmZCwgJnBidWYsIF9wYXJzZV9vZmZfdCwgJm9mZnNldCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICB9Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHNpemUgPSBwd3JpdGUoZmQsIHBidWYuYnVmLCAoc2l6ZV90KXBidWYubGVuLCBvZmZzZXQpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgaWYgKHNpemUgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNpemUpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX01LRklGTwotUHlEb2NfU1RSVkFSKHBvc2l4X21rZmlmb19fZG9jX18sCi0ibWtmaWZvKHBhdGgsIG1vZGU9MG82NjYsICosIGRpcl9mZD1Ob25lKVxuXG5cCi1DcmVhdGUgYSBGSUZPIChhIFBPU0lYIG5hbWVkIHBpcGUpLlxuXAotXG5cCi1JZiBkaXJfZmQgaXMgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuXAotICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5LlxuXAotZGlyX2ZkIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgb24geW91ciBwbGF0Zm9ybS5cblwKLSAgSWYgaXQgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHdpbGwgcmFpc2UgYSBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbWtmaWZvKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBpbnQgbW9kZSA9IDA2NjY7Ci0gICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOwotICAgIGludCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkaXJfZmQiLCBOVUxMfTsKLQotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnxpJE8mOm1rZmlmbyIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0gICAgICAgICZtb2RlLAotI2lmZGVmIEhBVkVfTUtGSUZPQVQKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkCi0jZW5kaWYKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWZkZWYgSEFWRV9NS0ZJRk9BVAotICAgIGlmIChkaXJfZmQgIT0gREVGQVVMVF9ESVJfRkQpCi0gICAgICAgIHJlc3VsdCA9IG1rZmlmb2F0KGRpcl9mZCwgcGF0aC5uYXJyb3csIG1vZGUpOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICByZXN1bHQgPSBta2ZpZm8ocGF0aC5uYXJyb3csIG1vZGUpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAocmVzdWx0IDwgMCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9lcnJvcigpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuX3ZhbHVlID0gUHlfTm9uZTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0KLWV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfTUtOT0QpICYmIGRlZmluZWQoSEFWRV9NQUtFREVWKQotUHlEb2NfU1RSVkFSKHBvc2l4X21rbm9kX19kb2NfXywKLSJta25vZChwYXRoLCBtb2RlPTBvNjAwLCBkZXZpY2U9MCwgKiwgZGlyX2ZkPU5vbmUpXG5cblwKLUNyZWF0ZSBhIGZpbGVzeXN0ZW0gbm9kZSAoZmlsZSwgZGV2aWNlIHNwZWNpYWwgZmlsZSBvciBuYW1lZCBwaXBlKVxuXAotbmFtZWQgcGF0aC4gbW9kZSBzcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGVcblwKLXR5cGUgb2Ygbm9kZSB0byBiZSBjcmVhdGVkLCBiZWluZyBjb21iaW5lZCAoYml0d2lzZSBPUikgd2l0aCBvbmUgb2ZcblwKLVNfSUZSRUcsIFNfSUZDSFIsIFNfSUZCTEssIGFuZCBTX0lGSUZPLiBGb3IgU19JRkNIUiBhbmQgU19JRkJMSyxcblwKLWRldmljZSBkZWZpbmVzIHRoZSBuZXdseSBjcmVhdGVkIGRldmljZSBzcGVjaWFsIGZpbGUgKHByb2JhYmx5IHVzaW5nXG5cCi1vcy5tYWtlZGV2KCkpLCBvdGhlcndpc2UgaXQgaXMgaWdub3JlZC5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLWRpcl9mZCBtYXkgbm90IGJlIGltcGxlbWVudGVkIG9uIHlvdXIgcGxhdGZvcm0uXG5cCi0gIElmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci4iKTsKLQotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbWtub2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQotewotICAgIHBhdGhfdCBwYXRoOwotICAgIGludCBtb2RlID0gMDY2NjsKLSAgICBkZXZfdCBkZXZpY2UgPSAwOwotICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKLSAgICBpbnQgcmVzdWx0OwotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGV2aWNlIiwgImRpcl9mZCIsIE5VTEx9OwotCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfGlPJiRPJjpta25vZCIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0gICAgICAgICZtb2RlLCBfUHlfRGV2X0NvbnZlcnRlciwgJmRldmljZSwKLSNpZmRlZiBIQVZFX01LTk9EQVQKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZAotI2Vsc2UKLSAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkCi0jZW5kaWYKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWZkZWYgSEFWRV9NS05PREFUCi0gICAgaWYgKGRpcl9mZCAhPSBERUZBVUxUX0RJUl9GRCkKLSAgICAgICAgcmVzdWx0ID0gbWtub2RhdChkaXJfZmQsIHBhdGgubmFycm93LCBtb2RlLCBkZXZpY2UpOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICByZXN1bHQgPSBta25vZChwYXRoLm5hcnJvdywgbW9kZSwgZGV2aWNlKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcG9zaXhfZXJyb3IoKTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIHJldHVybl92YWx1ZSA9IFB5X05vbmU7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9ERVZJQ0VfTUFDUk9TCi1QeURvY19TVFJWQVIocG9zaXhfbWFqb3JfX2RvY19fLAotIm1ham9yKGRldmljZSkgLT4gbWFqb3IgbnVtYmVyXG5cCi1FeHRyYWN0cyBhIGRldmljZSBtYWpvciBudW1iZXIgZnJvbSBhIHJhdyBkZXZpY2UgbnVtYmVyLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbWFqb3IoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGRldl90IGRldmljZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOm1ham9yIiwgX1B5X0Rldl9Db252ZXJ0ZXIsICZkZXZpY2UpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKW1ham9yKGRldmljZSkpOwotfQotCi1QeURvY19TVFJWQVIocG9zaXhfbWlub3JfX2RvY19fLAotIm1pbm9yKGRldmljZSkgLT4gbWlub3IgbnVtYmVyXG5cCi1FeHRyYWN0cyBhIGRldmljZSBtaW5vciBudW1iZXIgZnJvbSBhIHJhdyBkZXZpY2UgbnVtYmVyLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbWlub3IoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGRldl90IGRldmljZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOm1pbm9yIiwgX1B5X0Rldl9Db252ZXJ0ZXIsICZkZXZpY2UpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKW1pbm9yKGRldmljZSkpOwotfQotCi1QeURvY19TVFJWQVIocG9zaXhfbWFrZWRldl9fZG9jX18sCi0ibWFrZWRldihtYWpvciwgbWlub3IpIC0+IGRldmljZSBudW1iZXJcblwKLUNvbXBvc2VzIGEgcmF3IGRldmljZSBudW1iZXIgZnJvbSB0aGUgbWFqb3IgYW5kIG1pbm9yIGRldmljZSBudW1iZXJzLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbWFrZWRldihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgaW50IG1ham9yLCBtaW5vcjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOm1ha2VkZXYiLCAmbWFqb3IsICZtaW5vcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBfUHlMb25nX0Zyb21EZXYobWFrZWRldihtYWpvciwgbWlub3IpKTsKLX0KLSNlbmRpZiAvKiBkZXZpY2UgbWFjcm9zICovCi0KLQotI2lmZGVmIEhBVkVfRlRSVU5DQVRFCi1QeURvY19TVFJWQVIocG9zaXhfZnRydW5jYXRlX19kb2NfXywKLSJmdHJ1bmNhdGUoZmQsIGxlbmd0aClcblxuXAotVHJ1bmNhdGUgYSBmaWxlIHRvIGEgc3BlY2lmaWVkIGxlbmd0aC4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2Z0cnVuY2F0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgaW50IGZkOwotICAgIG9mZl90IGxlbmd0aDsKLSAgICBpbnQgcmVzOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyY6ZnRydW5jYXRlIiwgJmZkLCBfcGFyc2Vfb2ZmX3QsICZsZW5ndGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBmdHJ1bmNhdGUoZmQsIGxlbmd0aCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1RSVU5DQVRFCi1QeURvY19TVFJWQVIocG9zaXhfdHJ1bmNhdGVfX2RvY19fLAotInRydW5jYXRlKHBhdGgsIGxlbmd0aClcblxuXAotVHJ1bmNhdGUgdGhlIGZpbGUgZ2l2ZW4gYnkgcGF0aCB0byBsZW5ndGggYnl0ZXMuXG5cCi1PbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG5cCi0gIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3RydW5jYXRlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBvZmZfdCBsZW5ndGg7Ci0gICAgaW50IHJlczsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJsZW5ndGgiLCBOVUxMfTsKLQotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidHJ1bmNhdGUiOwotI2lmZGVmIEhBVkVfRlRSVU5DQVRFCi0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mOnRydW5jYXRlIiwga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJzZV9vZmZfdCwgJmxlbmd0aCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmZGVmIEhBVkVfRlRSVU5DQVRFCi0gICAgaWYgKHBhdGguZmQgIT0gLTEpCi0gICAgICAgIHJlcyA9IGZ0cnVuY2F0ZShwYXRoLmZkLCBsZW5ndGgpOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICByZXMgPSB0cnVuY2F0ZShwYXRoLm5hcnJvdywgbGVuZ3RoKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXN1bHQgPSBwYXRoX2Vycm9yKCZwYXRoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXN1bHQgPSBQeV9Ob25lOwotICAgIH0KLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CisjZW5kaWYgLyogSEFWRV9XUklURVYgKi8KKworCisjaWZkZWYgSEFWRV9QV1JJVEUKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnB3cml0ZSAtPiBQeV9zc2l6ZV90CisKKyAgICBmZDogaW50CisgICAgYnVmZmVyOiBQeV9idWZmZXIKKyAgICBvZmZzZXQ6IFB5X29mZl90CisgICAgLworCitXcml0ZSBieXRlcyB0byBhIGZpbGUgZGVzY3JpcHRvciBzdGFydGluZyBhdCBhIHBhcnRpY3VsYXIgb2Zmc2V0LgorCitXcml0ZSBidWZmZXIgdG8gZmQsIHN0YXJ0aW5nIGF0IG9mZnNldCBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKK3RoZSBmaWxlLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZS4gIERvZXMgbm90IGNoYW5nZSB0aGUKK2N1cnJlbnQgZmlsZSBvZmZzZXQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeV9zc2l6ZV90Citvc19wd3JpdGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIFB5X2J1ZmZlciAqYnVmZmVyLCBQeV9vZmZfdCBvZmZzZXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Yzc0ZGE2MzA3NThlZTkyNSBpbnB1dD0xOTkwM2YxYjNkZDI2Mzc3XSovCit7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGludCBhc3luY19lcnIgPSAwOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorICAgICAgICBzaXplID0gcHdyaXRlKGZkLCBidWZmZXItPmJ1ZiwgKHNpemVfdClidWZmZXItPmxlbiwgb2Zmc2V0KTsKKyAgICAgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9IHdoaWxlIChzaXplIDwgMCAmJiBlcnJubyA9PSBFSU5UUiAmJiAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CisKKyAgICBpZiAoc2l6ZSA8IDAgJiYgIWFzeW5jX2VycikKKyAgICAgICAgcG9zaXhfZXJyb3IoKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKyNlbmRpZiAvKiBIQVZFX1BXUklURSAqLworCisKKyNpZmRlZiBIQVZFX01LRklGTworLypbY2xpbmljIGlucHV0XQorb3MubWtmaWZvCisKKyAgICBwYXRoOiBwYXRoX3QKKyAgICBtb2RlOiBpbnQ9MG82NjYKKyAgICAqCisgICAgZGlyX2ZkOiBkaXJfZmQocmVxdWlyZXM9J21rZmlmb2F0Jyk9Tm9uZQorCitDcmVhdGUgYSAiZmlmbyIgKGEgUE9TSVggbmFtZWQgcGlwZSkuCisKK0lmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksCisgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuCitkaXJfZmQgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLgorICBJZiBpdCBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19ta2ZpZm9faW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWNlNDFjZmFkMGU2OGM5NDAgaW5wdXQ9NzMwMzJlOThhMzZlMGUxOV0qLworeworICAgIGludCByZXN1bHQ7CisgICAgaW50IGFzeW5jX2VyciA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyNpZmRlZiBIQVZFX01LRklGT0FUCisgICAgICAgIGlmIChkaXJfZmQgIT0gREVGQVVMVF9ESVJfRkQpCisgICAgICAgICAgICByZXN1bHQgPSBta2ZpZm9hdChkaXJfZmQsIHBhdGgtPm5hcnJvdywgbW9kZSk7CisgICAgICAgIGVsc2UKICNlbmRpZgorICAgICAgICAgICAgcmVzdWx0ID0gbWtmaWZvKHBhdGgtPm5hcnJvdywgbW9kZSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAocmVzdWx0ICE9IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYKKyAgICAgICAgICAgICAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICByZXR1cm4gKCFhc3luY19lcnIpID8gcG9zaXhfZXJyb3IoKSA6IE5VTEw7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKyNlbmRpZiAvKiBIQVZFX01LRklGTyAqLworCisKKyNpZiBkZWZpbmVkKEhBVkVfTUtOT0QpICYmIGRlZmluZWQoSEFWRV9NQUtFREVWKQorLypbY2xpbmljIGlucHV0XQorb3MubWtub2QKKworICAgIHBhdGg6IHBhdGhfdAorICAgIG1vZGU6IGludD0wbzYwMAorICAgIGRldmljZTogZGV2X3Q9MAorICAgICoKKyAgICBkaXJfZmQ6IGRpcl9mZChyZXF1aXJlcz0nbWtub2RhdCcpPU5vbmUKKworQ3JlYXRlIGEgbm9kZSBpbiB0aGUgZmlsZSBzeXN0ZW0uCisKK0NyZWF0ZSBhIG5vZGUgaW4gdGhlIGZpbGUgc3lzdGVtIChmaWxlLCBkZXZpY2Ugc3BlY2lhbCBmaWxlIG9yIG5hbWVkIHBpcGUpCithdCBwYXRoLiAgbW9kZSBzcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGUKK3R5cGUgb2Ygbm9kZSB0byBiZSBjcmVhdGVkLCBiZWluZyBjb21iaW5lZCAoYml0d2lzZSBPUikgd2l0aCBvbmUgb2YKK1NfSUZSRUcsIFNfSUZDSFIsIFNfSUZCTEssIGFuZCBTX0lGSUZPLiAgSWYgU19JRkNIUiBvciBTX0lGQkxLIGlzIHNldCBvbiBtb2RlLAorZGV2aWNlIGRlZmluZXMgdGhlIG5ld2x5IGNyZWF0ZWQgZGV2aWNlIHNwZWNpYWwgZmlsZSAocHJvYmFibHkgdXNpbmcKK29zLm1ha2VkZXYoKSkuICBPdGhlcndpc2UgZGV2aWNlIGlzIGlnbm9yZWQuCisKK0lmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksCisgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuCitkaXJfZmQgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZCBvbiB5b3VyIHBsYXRmb3JtLgorICBJZiBpdCBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19ta25vZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGRldl90IGRldmljZSwKKyAgICAgICAgICAgICAgaW50IGRpcl9mZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05MmU1NWQzY2E4OTE3NDYxIGlucHV0PWVlNDQ1MzE1NTFhNGQ4M2JdKi8KK3sKKyAgICBpbnQgcmVzdWx0OworICAgIGludCBhc3luY19lcnIgPSAwOworCisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWZkZWYgSEFWRV9NS05PREFUCisgICAgICAgIGlmIChkaXJfZmQgIT0gREVGQVVMVF9ESVJfRkQpCisgICAgICAgICAgICByZXN1bHQgPSBta25vZGF0KGRpcl9mZCwgcGF0aC0+bmFycm93LCBtb2RlLCBkZXZpY2UpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHJlc3VsdCA9IG1rbm9kKHBhdGgtPm5hcnJvdywgbW9kZSwgZGV2aWNlKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9IHdoaWxlIChyZXN1bHQgIT0gMCAmJiBlcnJubyA9PSBFSU5UUiAmJgorICAgICAgICAgICAgICEoYXN5bmNfZXJyID0gUHlFcnJfQ2hlY2tTaWduYWxzKCkpKTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgIHJldHVybiAoIWFzeW5jX2VycikgPyBwb3NpeF9lcnJvcigpIDogTlVMTDsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9NS05PRCkgJiYgZGVmaW5lZChIQVZFX01BS0VERVYpICovCisKKworI2lmZGVmIEhBVkVfREVWSUNFX01BQ1JPUworLypbY2xpbmljIGlucHV0XQorb3MubWFqb3IgLT4gdW5zaWduZWRfaW50CisKKyAgICBkZXZpY2U6IGRldl90CisgICAgLworCitFeHRyYWN0cyBhIGRldmljZSBtYWpvciBudW1iZXIgZnJvbSBhIHJhdyBkZXZpY2UgbnVtYmVyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgdW5zaWduZWQgaW50Citvc19tYWpvcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGRldl90IGRldmljZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01YjNiMjU4OWJhZmI0OThlIGlucHV0PTFlMTZhNGQzMGM0ZDQ0NjJdKi8KK3sKKyAgICByZXR1cm4gbWFqb3IoZGV2aWNlKTsKK30KKworCisvKltjbGluaWMgaW5wdXRdCitvcy5taW5vciAtPiB1bnNpZ25lZF9pbnQKKworICAgIGRldmljZTogZGV2X3QKKyAgICAvCisKK0V4dHJhY3RzIGEgZGV2aWNlIG1pbm9yIG51bWJlciBmcm9tIGEgcmF3IGRldmljZSBudW1iZXIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK29zX21pbm9yX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgZGV2X3QgZGV2aWNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVlMWEyNWU2MzBiMDE1N2QgaW5wdXQ9MDg0MmM2ZDIzZjI0YzY1ZV0qLworeworICAgIHJldHVybiBtaW5vcihkZXZpY2UpOworfQorCisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLm1ha2VkZXYgLT4gZGV2X3QKKworICAgIG1ham9yOiBpbnQKKyAgICBtaW5vcjogaW50CisgICAgLworCitDb21wb3NlcyBhIHJhdyBkZXZpY2UgbnVtYmVyIGZyb20gdGhlIG1ham9yIGFuZCBtaW5vciBkZXZpY2UgbnVtYmVycy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGRldl90Citvc19tYWtlZGV2X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG1ham9yLCBpbnQgbWlub3IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODgxYWFhNGFiYTZmNmE1MiBpbnB1dD00YjlmZDhmYzczY2JlNDhmXSovCit7CisgICAgcmV0dXJuIG1ha2VkZXYobWFqb3IsIG1pbm9yKTsKK30KKyNlbmRpZiAvKiBIQVZFX0RFVklDRV9NQUNST1MgKi8KKworCisjaWYgZGVmaW5lZCBIQVZFX0ZUUlVOQ0FURSB8fCBkZWZpbmVkIE1TX1dJTkRPV1MKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmZ0cnVuY2F0ZQorCisgICAgZmQ6IGludAorICAgIGxlbmd0aDogUHlfb2ZmX3QKKyAgICAvCisKK1RydW5jYXRlIGEgZmlsZSwgc3BlY2lmaWVkIGJ5IGZpbGUgZGVzY3JpcHRvciwgdG8gYSBzcGVjaWZpYyBsZW5ndGguCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19mdHJ1bmNhdGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIFB5X29mZl90IGxlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mYmExNTUyMzcyMWJlN2U0IGlucHV0PTYzYjQzNjQxZTUyODE4ZjJdKi8KK3sKKyAgICBpbnQgcmVzdWx0OworICAgIGludCBhc3luY19lcnIgPSAwOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICByZXN1bHQgPSBfY2hzaXplX3MoZmQsIGxlbmd0aCk7CisjZWxzZQorICAgICAgICByZXN1bHQgPSBmdHJ1bmNhdGUoZmQsIGxlbmd0aCk7CisjZW5kaWYKKyAgICAgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9IHdoaWxlIChyZXN1bHQgIT0gMCAmJiBlcnJubyA9PSBFSU5UUiAmJgorICAgICAgICAgICAgICEoYXN5bmNfZXJyID0gUHlFcnJfQ2hlY2tTaWduYWxzKCkpKTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgIHJldHVybiAoIWFzeW5jX2VycikgPyBwb3NpeF9lcnJvcigpIDogTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKyNlbmRpZiAvKiBIQVZFX0ZUUlVOQ0FURSB8fCBNU19XSU5ET1dTICovCisKKworI2lmIGRlZmluZWQgSEFWRV9UUlVOQ0FURSB8fCBkZWZpbmVkIE1TX1dJTkRPV1MKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnRydW5jYXRlCisgICAgcGF0aDogcGF0aF90KGFsbG93X2ZkPSdQQVRIX0hBVkVfRlRSVU5DQVRFJykKKyAgICBsZW5ndGg6IFB5X29mZl90CisKK1RydW5jYXRlIGEgZmlsZSwgc3BlY2lmaWVkIGJ5IHBhdGgsIHRvIGEgc3BlY2lmaWMgbGVuZ3RoLgorCitPbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCisgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3RydW5jYXRlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBQeV9vZmZfdCBsZW5ndGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDMwMDljOGRmNWMwYTEyYiBpbnB1dD03NzIyOWNmMGI1MGE5Yjc3XSovCit7CisgICAgaW50IHJlc3VsdDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaW50IGZkOworI2VuZGlmCisKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpCisgICAgICAgIHJldHVybiBvc19mdHJ1bmNhdGVfaW1wbChtb2R1bGUsIHBhdGgtPmZkLCBsZW5ndGgpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKHBhdGgtPndpZGUpCisgICAgICAgIGZkID0gX3dvcGVuKHBhdGgtPndpZGUsIF9PX1dST05MWSB8IF9PX0JJTkFSWSB8IF9PX05PSU5IRVJJVCk7CisgICAgZWxzZQorICAgICAgICBmZCA9IF9vcGVuKHBhdGgtPm5hcnJvdywgX09fV1JPTkxZIHwgX09fQklOQVJZIHwgX09fTk9JTkhFUklUKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXN1bHQgPSAtMTsKKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gX2Noc2l6ZV9zKGZkLCBsZW5ndGgpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICAgICAgZXJybm8gPSByZXN1bHQ7CisgICAgfQorI2Vsc2UKKyAgICByZXN1bHQgPSB0cnVuY2F0ZShwYXRoLT5uYXJyb3csIGxlbmd0aCk7CisjZW5kaWYKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAorICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yKHBhdGgpOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZW5kaWYgLyogSEFWRV9UUlVOQ0FURSB8fCBNU19XSU5ET1dTICovCisKIAogLyogSXNzdWUgIzIyMzk2OiBPbiAzMi1iaXQgQUlYIHBsYXRmb3JtLCB0aGUgcHJvdG90eXBlcyBvZiBvcy5wb3NpeF9mYWR2aXNlKCkKICAgIGFuZCBvcy5wb3NpeF9mYWxsb2NhdGUoKSBpbiBzeXN0ZW0gaGVhZGVycyBhcmUgd3JvbmcgaWYgX0xBUkdFX0ZJTEVTIGlzCkBAIC04ODM2LDE4NiArODkwMSwyMTEgQEAKICMgIGRlZmluZSBQT1NJWF9GQURWSVNFX0FJWF9CVUcKICNlbmRpZgogCisKICNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFMTE9DQVRFKSAmJiAhZGVmaW5lZChQT1NJWF9GQURWSVNFX0FJWF9CVUcpCi1QeURvY19TVFJWQVIocG9zaXhfcG9zaXhfZmFsbG9jYXRlX19kb2NfXywKLSJwb3NpeF9mYWxsb2NhdGUoZmQsIG9mZnNldCwgbGVuKVxuXG5cCi1FbnN1cmVzIHRoYXQgZW5vdWdoIGRpc2sgc3BhY2UgaXMgYWxsb2NhdGVkIGZvciB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgZmRcblwKLXN0YXJ0aW5nIGZyb20gb2Zmc2V0IGFuZCBjb250aW51aW5nIGZvciBsZW4gYnl0ZXMuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5wb3NpeF9mYWxsb2NhdGUKKworICAgIGZkOiBpbnQKKyAgICBvZmZzZXQ6IFB5X29mZl90CisgICAgbGVuZ3RoOiBQeV9vZmZfdAorICAgIC8KKworRW5zdXJlIGEgZmlsZSBoYXMgYWxsb2NhdGVkIGF0IGxlYXN0IGEgcGFydGljdWxhciBudW1iZXIgb2YgYnl0ZXMgb24gZGlzay4KKworRW5zdXJlIHRoYXQgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGZkIGVuY29tcGFzc2VzIGEgcmFuZ2Ugb2YgYnl0ZXMKK3N0YXJ0aW5nIGF0IG9mZnNldCBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGNvbnRpbnVpbmcgZm9yIGxlbmd0aCBieXRlcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3Bvc2l4X2ZhbGxvY2F0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19wb3NpeF9mYWxsb2NhdGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIFB5X29mZl90IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X29mZl90IGxlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03M2YxMDcxMzk1NjRhYTlkIGlucHV0PWQ3YTJlZjBhYjJjYTUyZmJdKi8KIHsKLSAgICBvZmZfdCBsZW4sIG9mZnNldDsKLSAgICBpbnQgcmVzLCBmZDsKKyAgICBpbnQgcmVzdWx0OworICAgIGludCBhc3luY19lcnIgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyZPJjpwb3NpeF9mYWxsb2NhdGUiLAotICAgICAgICAgICAgJmZkLCBfcGFyc2Vfb2ZmX3QsICZvZmZzZXQsIF9wYXJzZV9vZmZfdCwgJmxlbikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IHBvc2l4X2ZhbGxvY2F0ZShmZCwgb2Zmc2V0LCBsZW4pOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyAhPSAwKSB7Ci0gICAgICAgIGVycm5vID0gcmVzOwotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICB9CisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlc3VsdCA9IHBvc2l4X2ZhbGxvY2F0ZShmZCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKHJlc3VsdCAhPSAwICYmIGVycm5vID09IEVJTlRSICYmCisgICAgICAgICAgICAgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9QT1NJWF9GQUxMT0NBVEUpICYmICFQT1NJWF9GQURWSVNFX0FJWF9CVUcgKi8KKwogCiAjaWYgZGVmaW5lZChIQVZFX1BPU0lYX0ZBRFZJU0UpICYmICFkZWZpbmVkKFBPU0lYX0ZBRFZJU0VfQUlYX0JVRykKLVB5RG9jX1NUUlZBUihwb3NpeF9wb3NpeF9mYWR2aXNlX19kb2NfXywKLSJwb3NpeF9mYWR2aXNlKGZkLCBvZmZzZXQsIGxlbiwgYWR2aWNlKVxuXG5cCi1Bbm5vdW5jZXMgYW4gaW50ZW50aW9uIHRvIGFjY2VzcyBkYXRhIGluIGEgc3BlY2lmaWMgcGF0dGVybiB0aHVzIGFsbG93aW5nXG5cCi10aGUga2VybmVsIHRvIG1ha2Ugb3B0aW1pemF0aW9ucy5cblwKLVRoZSBhZHZpY2UgYXBwbGllcyB0byB0aGUgcmVnaW9uIG9mIHRoZSBmaWxlIHNwZWNpZmllZCBieSBmZCBzdGFydGluZyBhdFxuXAotb2Zmc2V0IGFuZCBjb250aW51aW5nIGZvciBsZW4gYnl0ZXMuXG5cCi1hZHZpY2UgaXMgb25lIG9mIFBPU0lYX0ZBRFZfTk9STUFMLCBQT1NJWF9GQURWX1NFUVVFTlRJQUwsXG5cCi1QT1NJWF9GQURWX1JBTkRPTSwgUE9TSVhfRkFEVl9OT1JFVVNFLCBQT1NJWF9GQURWX1dJTExORUVEIG9yXG5cCi1QT1NJWF9GQURWX0RPTlRORUVELiIpOworLypbY2xpbmljIGlucHV0XQorb3MucG9zaXhfZmFkdmlzZQorCisgICAgZmQ6IGludAorICAgIG9mZnNldDogUHlfb2ZmX3QKKyAgICBsZW5ndGg6IFB5X29mZl90CisgICAgYWR2aWNlOiBpbnQKKyAgICAvCisKK0Fubm91bmNlIGFuIGludGVudGlvbiB0byBhY2Nlc3MgZGF0YSBpbiBhIHNwZWNpZmljIHBhdHRlcm4uCisKK0Fubm91bmNlIGFuIGludGVudGlvbiB0byBhY2Nlc3MgZGF0YSBpbiBhIHNwZWNpZmljIHBhdHRlcm4sIHRodXMgYWxsb3dpbmcKK3RoZSBrZXJuZWwgdG8gbWFrZSBvcHRpbWl6YXRpb25zLgorVGhlIGFkdmljZSBhcHBsaWVzIHRvIHRoZSByZWdpb24gb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGZkIHN0YXJ0aW5nIGF0CitvZmZzZXQgYW5kIGNvbnRpbnVpbmcgZm9yIGxlbmd0aCBieXRlcy4KK2FkdmljZSBpcyBvbmUgb2YgUE9TSVhfRkFEVl9OT1JNQUwsIFBPU0lYX0ZBRFZfU0VRVUVOVElBTCwKK1BPU0lYX0ZBRFZfUkFORE9NLCBQT1NJWF9GQURWX05PUkVVU0UsIFBPU0lYX0ZBRFZfV0lMTE5FRUQsIG9yCitQT1NJWF9GQURWX0RPTlRORUVELgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfcG9zaXhfZmFkdmlzZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19wb3NpeF9mYWR2aXNlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkLCBQeV9vZmZfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgUHlfb2ZmX3QgbGVuZ3RoLCBpbnQgYWR2aWNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQxMmVmNGFhNzBjOTg2NDIgaW5wdXQ9MGZiZTU1NGVkYzJmMDRiNV0qLwogewotICAgIG9mZl90IGxlbiwgb2Zmc2V0OwotICAgIGludCByZXMsIGZkLCBhZHZpY2U7CisgICAgaW50IHJlc3VsdDsKKyAgICBpbnQgYXN5bmNfZXJyID0gMDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU8mTyZpOnBvc2l4X2ZhZHZpc2UiLAotICAgICAgICAgICAgJmZkLCBfcGFyc2Vfb2ZmX3QsICZvZmZzZXQsIF9wYXJzZV9vZmZfdCwgJmxlbiwgJmFkdmljZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IHBvc2l4X2ZhZHZpc2UoZmQsIG9mZnNldCwgbGVuLCBhZHZpY2UpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyAhPSAwKSB7Ci0gICAgICAgIGVycm5vID0gcmVzOwotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICB9CisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlc3VsdCA9IHBvc2l4X2ZhZHZpc2UoZmQsIG9mZnNldCwgbGVuZ3RoLCBhZHZpY2UpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKHJlc3VsdCAhPSAwICYmIGVycm5vID09IEVJTlRSICYmCisgICAgICAgICAgICAgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgcmV0dXJuICghYXN5bmNfZXJyKSA/IHBvc2l4X2Vycm9yKCkgOiBOVUxMOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9QT1NJWF9GQURWSVNFICYmICFQT1NJWF9GQURWSVNFX0FJWF9CVUcgKi8KIAogI2lmZGVmIEhBVkVfUFVURU5WCi1QeURvY19TVFJWQVIocG9zaXhfcHV0ZW52X19kb2NfXywKLSJwdXRlbnYoa2V5LCB2YWx1ZSlcblxuXAotQ2hhbmdlIG9yIGFkZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4iKTsKIAogLyogU2F2ZSBwdXRlbnYoKSBwYXJhbWV0ZXJzIGFzIHZhbHVlcyBoZXJlLCBzbyB3ZSBjYW4gY29sbGVjdCB0aGVtIHdoZW4gdGhleQogICogZ2V0IHJlLXNldCB3aXRoIGFub3RoZXIgY2FsbCBmb3IgdGhlIHNhbWUga2V5LiAqLwogc3RhdGljIFB5T2JqZWN0ICpwb3NpeF9wdXRlbnZfZ2FyYmFnZTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3B1dGVudihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzdGF0aWMgdm9pZAorcG9zaXhfcHV0ZW52X2dhcmJhZ2Vfc2V0aXRlbShQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKQogewotICAgIFB5T2JqZWN0ICpuZXdzdHIgPSBOVUxMOworICAgIC8qIEluc3RhbGwgdGhlIGZpcnN0IGFyZyBhbmQgbmV3c3RyIGluIHBvc2l4X3B1dGVudl9nYXJiYWdlOworICAgICAqIHRoaXMgd2lsbCBjYXVzZSBwcmV2aW91cyB2YWx1ZSB0byBiZSBjb2xsZWN0ZWQuICBUaGlzIGhhcyB0bworICAgICAqIGhhcHBlbiBhZnRlciB0aGUgcmVhbCBwdXRlbnYoKSBjYWxsIGJlY2F1c2UgdGhlIG9sZCB2YWx1ZQorICAgICAqIHdhcyBzdGlsbCBhY2Nlc3NpYmxlIHVudGlsIHRoZW4uICovCisgICAgaWYgKFB5RGljdF9TZXRJdGVtKHBvc2l4X3B1dGVudl9nYXJiYWdlLCBuYW1lLCB2YWx1ZSkpCisgICAgICAgIC8qIHJlYWxseSBub3QgbXVjaCB3ZSBjYW4gZG87IGp1c3QgbGVhayAqLworICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKK30KKworCiAjaWZkZWYgTVNfV0lORE9XUwotICAgIFB5T2JqZWN0ICpvczEsICpvczI7Ci0gICAgd2NoYXJfdCAqbmV3ZW52OworLypbY2xpbmljIGlucHV0XQorb3MucHV0ZW52CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlVVOnB1dGVudiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvczEsICZvczIpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBuYW1lOiB1bmljb2RlCisgICAgdmFsdWU6IHVuaWNvZGUKKyAgICAvCiAKLSAgICBuZXdzdHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVU9JVUiLCBvczEsIG9zMik7Ci0gICAgaWYgKG5ld3N0ciA9PSBOVUxMKSB7CitDaGFuZ2Ugb3IgYWRkIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfcHV0ZW52X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICp2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMjlhNTY3ZDZiMjMyN2QyIGlucHV0PWJhNTg2NTgxYzJlNjEwNWZdKi8KK3sKKyAgICB3Y2hhcl90ICplbnY7CisKKyAgICBQeU9iamVjdCAqdW5pY29kZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlVT0lVSIsIG5hbWUsIHZhbHVlKTsKKyAgICBpZiAodW5pY29kZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoX01BWF9FTlYgPCBQeVVuaWNvZGVfR0VUX0xFTkdUSChuZXdzdHIpKSB7CisgICAgaWYgKF9NQVhfRU5WIDwgUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAidGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIGxvbmdlciB0aGFuICV1IGNoYXJhY3RlcnMiLAogICAgICAgICAgICAgICAgICAgICAgX01BWF9FTlYpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIG5ld2VudiA9IFB5VW5pY29kZV9Bc1VuaWNvZGUobmV3c3RyKTsKLSAgICBpZiAobmV3ZW52ID09IE5VTEwpCisgICAgZW52ID0gUHlVbmljb2RlX0FzVW5pY29kZSh1bmljb2RlKTsKKyAgICBpZiAoZW52ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKF93cHV0ZW52KG5ld2VudikpIHsKKyAgICBpZiAoX3dwdXRlbnYoZW52KSkgewogICAgICAgICBwb3NpeF9lcnJvcigpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSNlbHNlCi0gICAgUHlPYmplY3QgKm9zMSwgKm9zMjsKLSAgICBjaGFyICpzMSwgKnMyOwotICAgIGNoYXIgKm5ld2VudjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiTyZPJjpwdXRlbnYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvczEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9zMikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHMxID0gUHlCeXRlc19Bc1N0cmluZyhvczEpOwotICAgIHMyID0gUHlCeXRlc19Bc1N0cmluZyhvczIpOwotCi0gICAgbmV3c3RyID0gUHlCeXRlc19Gcm9tRm9ybWF0KCIlcz0lcyIsIHMxLCBzMik7Ci0gICAgaWYgKG5ld3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotCi0gICAgbmV3ZW52ID0gUHlCeXRlc19BU19TVFJJTkcobmV3c3RyKTsKLSAgICBpZiAocHV0ZW52KG5ld2VudikpIHsKLSAgICAgICAgcG9zaXhfZXJyb3IoKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8qIEluc3RhbGwgdGhlIGZpcnN0IGFyZyBhbmQgbmV3c3RyIGluIHBvc2l4X3B1dGVudl9nYXJiYWdlOwotICAgICAqIHRoaXMgd2lsbCBjYXVzZSBwcmV2aW91cyB2YWx1ZSB0byBiZSBjb2xsZWN0ZWQuICBUaGlzIGhhcyB0bwotICAgICAqIGhhcHBlbiBhZnRlciB0aGUgcmVhbCBwdXRlbnYoKSBjYWxsIGJlY2F1c2UgdGhlIG9sZCB2YWx1ZQotICAgICAqIHdhcyBzdGlsbCBhY2Nlc3NpYmxlIHVudGlsIHRoZW4uICovCi0gICAgaWYgKFB5RGljdF9TZXRJdGVtKHBvc2l4X3B1dGVudl9nYXJiYWdlLCBvczEsIG5ld3N0cikpIHsKLSAgICAgICAgLyogcmVhbGx5IG5vdCBtdWNoIHdlIGNhbiBkbzsganVzdCBsZWFrICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeV9ERUNSRUYobmV3c3RyKTsKLSAgICB9Ci0KLSNpZm5kZWYgTVNfV0lORE9XUwotICAgIFB5X0RFQ1JFRihvczEpOwotICAgIFB5X0RFQ1JFRihvczIpOwotI2VuZGlmCisgICAgcG9zaXhfcHV0ZW52X2dhcmJhZ2Vfc2V0aXRlbShuYW1lLCB1bmljb2RlKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIAogZXJyb3I6Ci0jaWZuZGVmIE1TX1dJTkRPV1MKLSAgICBQeV9ERUNSRUYob3MxKTsKLSAgICBQeV9ERUNSRUYob3MyKTsKLSNlbmRpZgotICAgIFB5X1hERUNSRUYobmV3c3RyKTsKKyAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYgLyogcHV0ZW52ICovCisjZWxzZSAvKiBNU19XSU5ET1dTICovCisvKltjbGluaWMgaW5wdXRdCitvcy5wdXRlbnYKIAotI2lmZGVmIEhBVkVfVU5TRVRFTlYKLVB5RG9jX1NUUlZBUihwb3NpeF91bnNldGVudl9fZG9jX18sCi0idW5zZXRlbnYoa2V5KVxuXG5cCi1EZWxldGUgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIik7CisgICAgbmFtZTogRlNDb252ZXJ0ZXIKKyAgICB2YWx1ZTogRlNDb252ZXJ0ZXIKKyAgICAvCisKK0NoYW5nZSBvciBhZGQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF91bnNldGVudihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19wdXRlbnZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQyOWE1NjdkNmIyMzI3ZDIgaW5wdXQ9YTk3YmM2MTUyZjY4OGQzMV0qLwogewotICAgIFB5T2JqZWN0ICpuYW1lOworICAgIFB5T2JqZWN0ICpieXRlcyA9IE5VTEw7CisgICAgY2hhciAqZW52OworICAgIGNoYXIgKm5hbWVfc3RyaW5nID0gUHlCeXRlc19Bc1N0cmluZyhuYW1lKTsKKyAgICBjaGFyICp2YWx1ZV9zdHJpbmcgPSBQeUJ5dGVzX0FzU3RyaW5nKHZhbHVlKTsKKworICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tRm9ybWF0KCIlcz0lcyIsIG5hbWVfc3RyaW5nLCB2YWx1ZV9zdHJpbmcpOworICAgIGlmIChieXRlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGVudiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKTsKKyAgICBpZiAocHV0ZW52KGVudikpIHsKKyAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgfQorCisgICAgcG9zaXhfcHV0ZW52X2dhcmJhZ2Vfc2V0aXRlbShuYW1lLCBieXRlcyk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLworI2VuZGlmIC8qIEhBVkVfUFVURU5WICovCisKKworI2lmZGVmIEhBVkVfVU5TRVRFTlYKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnVuc2V0ZW52CisgICAgbmFtZTogRlNDb252ZXJ0ZXIKKyAgICAvCisKK0RlbGV0ZSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3Vuc2V0ZW52X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTRjNDEzN2FiMTgzNGYwMiBpbnB1dD0yYmI1Mjg4YTU5OWM3MTA3XSovCit7CiAjaWZuZGVmIEhBVkVfQlJPS0VOX1VOU0VURU5WCiAgICAgaW50IGVycjsKICNlbmRpZgogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjp1bnNldGVudiIsCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAjaWZkZWYgSEFWRV9CUk9LRU5fVU5TRVRFTlYKICAgICB1bnNldGVudihQeUJ5dGVzX0FTX1NUUklORyhuYW1lKSk7CiAjZWxzZQogICAgIGVyciA9IHVuc2V0ZW52KFB5Qnl0ZXNfQVNfU1RSSU5HKG5hbWUpKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICBpZiAoZXJyKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICB9CiAjZW5kaWYKIAogICAgIC8qIFJlbW92ZSB0aGUga2V5IGZyb20gcG9zaXhfcHV0ZW52X2dhcmJhZ2U7CkBAIC05MDI3LDIzICs5MTE3LDI1IEBACiAgICAgICAgIC8qIHJlYWxseSBub3QgbXVjaCB3ZSBjYW4gZG87IGp1c3QgbGVhayAqLwogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KLSAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9Ci0jZW5kaWYgLyogdW5zZXRlbnYgKi8KKyNlbmRpZiAvKiBIQVZFX1VOU0VURU5WICovCiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zdHJlcnJvcl9fZG9jX18sCi0ic3RyZXJyb3IoY29kZSkgLT4gc3RyaW5nXG5cblwKLVRyYW5zbGF0ZSBhbiBlcnJvciBjb2RlIHRvIGEgbWVzc2FnZSBzdHJpbmcuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnN0cmVycm9yCisKKyAgICBjb2RlOiBpbnQKKyAgICAvCisKK1RyYW5zbGF0ZSBhbiBlcnJvciBjb2RlIHRvIGEgbWVzc2FnZSBzdHJpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zdHJlcnJvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19zdHJlcnJvcl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBjb2RlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJhZWJmMDlmYTAyYTc4ZjIgaW5wdXQ9NzVhODY3M2Q5NzkxNWE5MV0qLwogewotICAgIGludCBjb2RlOwotICAgIGNoYXIgKm1lc3NhZ2U7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnN0cmVycm9yIiwgJmNvZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBtZXNzYWdlID0gc3RyZXJyb3IoY29kZSk7CisgICAgY2hhciAqbWVzc2FnZSA9IHN0cmVycm9yKGNvZGUpOwogICAgIGlmIChtZXNzYWdlID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic3RyZXJyb3IoKSBhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTsKQEAgLTkwNTQsMTU1ICs5MTQ2LDE2OCBAQAogCiAKICNpZmRlZiBIQVZFX1NZU19XQUlUX0gKLQogI2lmZGVmIFdDT1JFRFVNUAotUHlEb2NfU1RSVkFSKHBvc2l4X1dDT1JFRFVNUF9fZG9jX18sCi0iV0NPUkVEVU1QKHN0YXR1cykgLT4gYm9vbFxuXG5cCi1SZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvY2VzcyByZXR1cm5pbmcgJ3N0YXR1cycgd2FzIGR1bXBlZCB0byBhIGNvcmUgZmlsZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLldDT1JFRFVNUCAtPiBib29sCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9XQ09SRURVTVAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgIHN0YXR1czogaW50CisgICAgLworCitSZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvY2VzcyByZXR1cm5pbmcgc3RhdHVzIHdhcyBkdW1wZWQgdG8gYSBjb3JlIGZpbGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK29zX1dDT1JFRFVNUF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWE1ODRiMTQ3YjE2YmQxOCBpbnB1dD04YjA1ZTdhYjM4NTI4ZDA0XSovCiB7Ci0gICAgV0FJVF9UWVBFIHN0YXR1czsKLSAgICBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSA9IDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6V0NPUkVEVU1QIiwgJldBSVRfU1RBVFVTX0lOVChzdGF0dXMpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKFdDT1JFRFVNUChzdGF0dXMpKTsKKyAgICBXQUlUX1RZUEUgd2FpdF9zdGF0dXM7CisgICAgV0FJVF9TVEFUVVNfSU5UKHdhaXRfc3RhdHVzKSA9IHN0YXR1czsKKyAgICByZXR1cm4gV0NPUkVEVU1QKHdhaXRfc3RhdHVzKTsKIH0KICNlbmRpZiAvKiBXQ09SRURVTVAgKi8KIAorCiAjaWZkZWYgV0lGQ09OVElOVUVECi1QeURvY19TVFJWQVIocG9zaXhfV0lGQ09OVElOVUVEX19kb2NfXywKLSJXSUZDT05USU5VRUQoc3RhdHVzKSAtPiBib29sXG5cblwKLVJldHVybiBUcnVlIGlmIHRoZSBwcm9jZXNzIHJldHVybmluZyAnc3RhdHVzJyB3YXMgY29udGludWVkIGZyb20gYVxuXAotam9iIGNvbnRyb2wgc3RvcC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLldJRkNPTlRJTlVFRCAtPiBib29sCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9XSUZDT05USU5VRUQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgIHN0YXR1czogaW50CisKK1JldHVybiBUcnVlIGlmIGEgcGFydGljdWxhciBwcm9jZXNzIHdhcyBjb250aW51ZWQgZnJvbSBhIGpvYiBjb250cm9sIHN0b3AuCisKK1JldHVybiBUcnVlIGlmIHRoZSBwcm9jZXNzIHJldHVybmluZyBzdGF0dXMgd2FzIGNvbnRpbnVlZCBmcm9tIGEKK2pvYiBjb250cm9sIHN0b3AuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK29zX1dJRkNPTlRJTlVFRF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWUzNTI5NWQ4NDQzNjRiZCBpbnB1dD1lNzc3ZTdkMzhlYjI1YmQ5XSovCiB7Ci0gICAgV0FJVF9UWVBFIHN0YXR1czsKLSAgICBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSA9IDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6V0NPTlRJTlVFRCIsICZXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhXSUZDT05USU5VRUQoc3RhdHVzKSk7CisgICAgV0FJVF9UWVBFIHdhaXRfc3RhdHVzOworICAgIFdBSVRfU1RBVFVTX0lOVCh3YWl0X3N0YXR1cykgPSBzdGF0dXM7CisgICAgcmV0dXJuIFdJRkNPTlRJTlVFRCh3YWl0X3N0YXR1cyk7CiB9CiAjZW5kaWYgLyogV0lGQ09OVElOVUVEICovCiAKKwogI2lmZGVmIFdJRlNUT1BQRUQKLVB5RG9jX1NUUlZBUihwb3NpeF9XSUZTVE9QUEVEX19kb2NfXywKLSJXSUZTVE9QUEVEKHN0YXR1cykgLT4gYm9vbFxuXG5cCi1SZXR1cm4gVHJ1ZSBpZiB0aGUgcHJvY2VzcyByZXR1cm5pbmcgJ3N0YXR1cycgd2FzIHN0b3BwZWQuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5XSUZTVE9QUEVEIC0+IGJvb2wKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X1dJRlNUT1BQRUQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgIHN0YXR1czogaW50CisKK1JldHVybiBUcnVlIGlmIHRoZSBwcm9jZXNzIHJldHVybmluZyBzdGF0dXMgd2FzIHN0b3BwZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK29zX1dJRlNUT1BQRURfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgc3RhdHVzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZkYjU3MTIyYTVjOWI0Y2IgaW5wdXQ9MDQzY2I3ZjEyODllZjkwNF0qLwogewotICAgIFdBSVRfVFlQRSBzdGF0dXM7Ci0gICAgV0FJVF9TVEFUVVNfSU5UKHN0YXR1cykgPSAwOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOldJRlNUT1BQRUQiLCAmV0FJVF9TVEFUVVNfSU5UKHN0YXR1cykpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoV0lGU1RPUFBFRChzdGF0dXMpKTsKKyAgICBXQUlUX1RZUEUgd2FpdF9zdGF0dXM7CisgICAgV0FJVF9TVEFUVVNfSU5UKHdhaXRfc3RhdHVzKSA9IHN0YXR1czsKKyAgICByZXR1cm4gV0lGU1RPUFBFRCh3YWl0X3N0YXR1cyk7CiB9CiAjZW5kaWYgLyogV0lGU1RPUFBFRCAqLwogCisKICNpZmRlZiBXSUZTSUdOQUxFRAotUHlEb2NfU1RSVkFSKHBvc2l4X1dJRlNJR05BTEVEX19kb2NfXywKLSJXSUZTSUdOQUxFRChzdGF0dXMpIC0+IGJvb2xcblxuXAotUmV0dXJuIFRydWUgaWYgdGhlIHByb2Nlc3MgcmV0dXJuaW5nICdzdGF0dXMnIHdhcyB0ZXJtaW5hdGVkIGJ5IGEgc2lnbmFsLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuV0lGU0lHTkFMRUQgLT4gYm9vbAogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfV0lGU0lHTkFMRUQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgIHN0YXR1czogaW50CisKK1JldHVybiBUcnVlIGlmIHRoZSBwcm9jZXNzIHJldHVybmluZyBzdGF0dXMgd2FzIHRlcm1pbmF0ZWQgYnkgYSBzaWduYWwuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK29zX1dJRlNJR05BTEVEX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHN0YXR1cykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMWRkZTRkY2M4MTlhNWY1IGlucHV0PWQ1NWJhN2NjOWNlNWRjNDNdKi8KIHsKLSAgICBXQUlUX1RZUEUgc3RhdHVzOwotICAgIFdBSVRfU1RBVFVTX0lOVChzdGF0dXMpID0gMDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpXSUZTSUdOQUxFRCIsICZXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhXSUZTSUdOQUxFRChzdGF0dXMpKTsKKyAgICBXQUlUX1RZUEUgd2FpdF9zdGF0dXM7CisgICAgV0FJVF9TVEFUVVNfSU5UKHdhaXRfc3RhdHVzKSA9IHN0YXR1czsKKyAgICByZXR1cm4gV0lGU0lHTkFMRUQod2FpdF9zdGF0dXMpOwogfQogI2VuZGlmIC8qIFdJRlNJR05BTEVEICovCiAKKwogI2lmZGVmIFdJRkVYSVRFRAotUHlEb2NfU1RSVkFSKHBvc2l4X1dJRkVYSVRFRF9fZG9jX18sCi0iV0lGRVhJVEVEKHN0YXR1cykgLT4gYm9vbFxuXG5cCi1SZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvY2VzcyByZXR1cm5pbmcgJ3N0YXR1cycgZXhpdGVkIHVzaW5nIHRoZSBleGl0KClcblwKLXN5c3RlbSBjYWxsLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuV0lGRVhJVEVEIC0+IGJvb2wKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X1dJRkVYSVRFRChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgc3RhdHVzOiBpbnQKKworUmV0dXJuIFRydWUgaWYgdGhlIHByb2Nlc3MgcmV0dXJuaW5nIHN0YXR1cyBleGl0ZWQgdmlhIHRoZSBleGl0KCkgc3lzdGVtIGNhbGwuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK29zX1dJRkVYSVRFRF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDFjMDlkNmViZmVlYTM5NyBpbnB1dD1kNjM3NzVhNjc5MTU4NmMwXSovCiB7Ci0gICAgV0FJVF9UWVBFIHN0YXR1czsKLSAgICBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSA9IDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6V0lGRVhJVEVEIiwgJldBSVRfU1RBVFVTX0lOVChzdGF0dXMpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgICBXQUlUX1RZUEUgd2FpdF9zdGF0dXM7CisgICAgV0FJVF9TVEFUVVNfSU5UKHdhaXRfc3RhdHVzKSA9IHN0YXR1czsKKyAgICByZXR1cm4gV0lGRVhJVEVEKHdhaXRfc3RhdHVzKTsKIH0KICNlbmRpZiAvKiBXSUZFWElURUQgKi8KIAorCiAjaWZkZWYgV0VYSVRTVEFUVVMKLVB5RG9jX1NUUlZBUihwb3NpeF9XRVhJVFNUQVRVU19fZG9jX18sCi0iV0VYSVRTVEFUVVMoc3RhdHVzKSAtPiBpbnRlZ2VyXG5cblwKLVJldHVybiB0aGUgcHJvY2VzcyByZXR1cm4gY29kZSBmcm9tICdzdGF0dXMnLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuV0VYSVRTVEFUVVMgLT4gaW50CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9XRVhJVFNUQVRVUyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgc3RhdHVzOiBpbnQKKworUmV0dXJuIHRoZSBwcm9jZXNzIHJldHVybiBjb2RlIGZyb20gc3RhdHVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgaW50Citvc19XRVhJVFNUQVRVU19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzdGF0dXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmUzZWZiYmExMWY2NDg4ZCBpbnB1dD1lMWZiNDk0NGUzNzc1ODViXSovCiB7Ci0gICAgV0FJVF9UWVBFIHN0YXR1czsKLSAgICBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSA9IDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6V0VYSVRTVEFUVVMiLCAmV0FJVF9TVEFUVVNfSU5UKHN0YXR1cykpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpIiwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisgICAgV0FJVF9UWVBFIHdhaXRfc3RhdHVzOworICAgIFdBSVRfU1RBVFVTX0lOVCh3YWl0X3N0YXR1cykgPSBzdGF0dXM7CisgICAgcmV0dXJuIFdFWElUU1RBVFVTKHdhaXRfc3RhdHVzKTsKIH0KICNlbmRpZiAvKiBXRVhJVFNUQVRVUyAqLwogCisKICNpZmRlZiBXVEVSTVNJRwotUHlEb2NfU1RSVkFSKHBvc2l4X1dURVJNU0lHX19kb2NfXywKLSJXVEVSTVNJRyhzdGF0dXMpIC0+IGludGVnZXJcblxuXAotUmV0dXJuIHRoZSBzaWduYWwgdGhhdCB0ZXJtaW5hdGVkIHRoZSBwcm9jZXNzIHRoYXQgcHJvdmlkZWQgdGhlICdzdGF0dXMnXG5cCi12YWx1ZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLldURVJNU0lHIC0+IGludAogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfV1RFUk1TSUcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgIHN0YXR1czogaW50CisKK1JldHVybiB0aGUgc2lnbmFsIHRoYXQgdGVybWluYXRlZCB0aGUgcHJvY2VzcyB0aGF0IHByb3ZpZGVkIHRoZSBzdGF0dXMgdmFsdWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK29zX1dURVJNU0lHX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHN0YXR1cykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xNzJmN2RmYzhkY2ZjM2FkIGlucHV0PTcyN2ZkN2Y4NGVjM2YyNDNdKi8KIHsKLSAgICBXQUlUX1RZUEUgc3RhdHVzOwotICAgIFdBSVRfU1RBVFVTX0lOVChzdGF0dXMpID0gMDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpXVEVSTVNJRyIsICZXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBXVEVSTVNJRyhzdGF0dXMpKTsKKyAgICBXQUlUX1RZUEUgd2FpdF9zdGF0dXM7CisgICAgV0FJVF9TVEFUVVNfSU5UKHdhaXRfc3RhdHVzKSA9IHN0YXR1czsKKyAgICByZXR1cm4gV1RFUk1TSUcod2FpdF9zdGF0dXMpOwogfQogI2VuZGlmIC8qIFdURVJNU0lHICovCiAKKwogI2lmZGVmIFdTVE9QU0lHCi1QeURvY19TVFJWQVIocG9zaXhfV1NUT1BTSUdfX2RvY19fLAotIldTVE9QU0lHKHN0YXR1cykgLT4gaW50ZWdlclxuXG5cCi1SZXR1cm4gdGhlIHNpZ25hbCB0aGF0IHN0b3BwZWQgdGhlIHByb2Nlc3MgdGhhdCBwcm92aWRlZFxuXAotdGhlICdzdGF0dXMnIHZhbHVlLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuV1NUT1BTSUcgLT4gaW50CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9XU1RPUFNJRyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgc3RhdHVzOiBpbnQKKworUmV0dXJuIHRoZSBzaWduYWwgdGhhdCBzdG9wcGVkIHRoZSBwcm9jZXNzIHRoYXQgcHJvdmlkZWQgdGhlIHN0YXR1cyB2YWx1ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorb3NfV1NUT1BTSUdfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgc3RhdHVzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBhYjc1ODYzOTZmNWQ4MmIgaW5wdXQ9NDZlYmYxZDFiMjkzYzVjMV0qLwogewotICAgIFdBSVRfVFlQRSBzdGF0dXM7Ci0gICAgV0FJVF9TVEFUVVNfSU5UKHN0YXR1cykgPSAwOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOldTVE9QU0lHIiwgJldBSVRfU1RBVFVTX0lOVChzdGF0dXMpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIFdTVE9QU0lHKHN0YXR1cykpOworICAgIFdBSVRfVFlQRSB3YWl0X3N0YXR1czsKKyAgICBXQUlUX1NUQVRVU19JTlQod2FpdF9zdGF0dXMpID0gc3RhdHVzOworICAgIHJldHVybiBXU1RPUFNJRyh3YWl0X3N0YXR1cyk7CiB9CiAjZW5kaWYgLyogV1NUT1BTSUcgKi8KLQogI2VuZGlmIC8qIEhBVkVfU1lTX1dBSVRfSCAqLwogCiAKQEAgLTkyNTcsMTA0ICs5MzYyLDEwMSBAQAogICAgIHJldHVybiB2OwogfQogCi1QeURvY19TVFJWQVIocG9zaXhfZnN0YXR2ZnNfX2RvY19fLAotImZzdGF0dmZzKGZkKSAtPiBzdGF0dmZzIHJlc3VsdFxuXG5cCi1QZXJmb3JtIGFuIGZzdGF0dmZzIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBmZC5cblwKLUVxdWl2YWxlbnQgdG8gc3RhdHZmcyhmZCkuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmZzdGF0dmZzCisgICAgZmQ6IGludAorICAgIC8KKworUGVyZm9ybSBhbiBmc3RhdHZmcyBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gZmQuCisKK0VxdWl2YWxlbnQgdG8gc3RhdHZmcyhmZCkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9mc3RhdHZmcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19mc3RhdHZmc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MzU0N2NmMGNjNTVlNmM1IGlucHV0PWQ4MTIyMjQzYWM1MDk3NWVdKi8KIHsKLSAgICBpbnQgZmQsIHJlczsKKyAgICBpbnQgcmVzdWx0OworICAgIGludCBhc3luY19lcnIgPSAwOwogICAgIHN0cnVjdCBzdGF0dmZzIHN0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmZzdGF0dmZzIiwgJmZkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGZzdGF0dmZzKGZkLCAmc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzdWx0ID0gZnN0YXR2ZnMoZmQsICZzdCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAocmVzdWx0ICE9IDAgJiYgZXJybm8gPT0gRUlOVFIgJiYKKyAgICAgICAgICAgICAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICByZXR1cm4gKCFhc3luY19lcnIpID8gcG9zaXhfZXJyb3IoKSA6IE5VTEw7CiAKICAgICByZXR1cm4gX3B5c3RhdHZmc19mcm9tc3RydWN0c3RhdHZmcyhzdCk7CiB9Ci0jZW5kaWYgLyogSEFWRV9GU1RBVFZGUyAmJiBIQVZFX1NZU19TVEFUVkZTX0ggKi8KKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfRlNUQVRWRlMpICYmIGRlZmluZWQoSEFWRV9TWVNfU1RBVFZGU19IKSAqLwogCiAKICNpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgJiYgZGVmaW5lZChIQVZFX1NZU19TVEFUVkZTX0gpCiAjaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKy8qW2NsaW5pYyBpbnB1dF0KK29zLnN0YXR2ZnMKIAotUHlEb2NfU1RSVkFSKHBvc2l4X3N0YXR2ZnNfX2RvY19fLAotInN0YXR2ZnMocGF0aClcblxuXAotUGVyZm9ybSBhIHN0YXR2ZnMgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguXG5cCi1cblwKLXBhdGggbWF5IGFsd2F5cyBiZSBzcGVjaWZpZWQgYXMgYSBzdHJpbmcuXG5cCi1PbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG5cCi0gIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4iKTsKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9J1BBVEhfSEFWRV9GU1RBVFZGUycpCisKK1BlcmZvcm0gYSBzdGF0dmZzIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgorCitwYXRoIG1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLgorT24gc29tZSBwbGF0Zm9ybXMsIHBhdGggbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgorICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBhbiBleGNlcHRpb24uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zdGF0dmZzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX3N0YXR2ZnNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODcxMDZkZDFiZWI4NTU2ZSBpbnB1dD0zZjVjMzU3OTFjNjY5YmQ5XSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKLSAgICBwYXRoX3QgcGF0aDsKICAgICBpbnQgcmVzdWx0OwotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIHN0cnVjdCBzdGF0dmZzIHN0OwogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJzdGF0dmZzIjsKLSNpZmRlZiBIQVZFX0ZTVEFUVkZTCi0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJjpzdGF0dmZzIiwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aAotICAgICAgICApKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBIQVZFX0ZTVEFUVkZTCi0gICAgaWYgKHBhdGguZmQgIT0gLTEpIHsKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpIHsKICNpZmRlZiBfX0FQUExFX18KICAgICAgICAgLyogaGFuZGxlIHdlYWstbGlua2luZyBvbiBNYWMgT1MgWCAxMC4zICovCiAgICAgICAgIGlmIChmc3RhdHZmcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmZF9zcGVjaWZpZWQoInN0YXR2ZnMiLCBwYXRoLmZkKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGZkX3NwZWNpZmllZCgic3RhdHZmcyIsIHBhdGgtPmZkKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gZnN0YXR2ZnMocGF0aC5mZCwgJnN0KTsKKyAgICAgICAgcmVzdWx0ID0gZnN0YXR2ZnMocGF0aC0+ZmQsICZzdCk7CiAgICAgfQogICAgIGVsc2UKICNlbmRpZgotICAgICAgICByZXN1bHQgPSBzdGF0dmZzKHBhdGgubmFycm93LCAmc3QpOworICAgICAgICByZXN1bHQgPSBzdGF0dmZzKHBhdGgtPm5hcnJvdywgJnN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKLSAgICAgICAgZ290byBleGl0OworICAgICAgICByZXR1cm4gcGF0aF9lcnJvcihwYXRoKTsKICAgICB9CiAKLSAgICByZXR1cm5fdmFsdWUgPSBfcHlzdGF0dmZzX2Zyb21zdHJ1Y3RzdGF0dmZzKHN0KTsKLQotZXhpdDoKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotICAgIHJldHVybiByZXR1cm5fdmFsdWU7CisgICAgcmV0dXJuIF9weXN0YXR2ZnNfZnJvbXN0cnVjdHN0YXR2ZnMoc3QpOwogfQotI2VuZGlmIC8qIEhBVkVfU1RBVFZGUyAqLworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TVEFUVkZTKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1NUQVRWRlNfSCkgKi8KKwogCiAjaWZkZWYgTVNfV0lORE9XUwotUHlEb2NfU1RSVkFSKHdpbjMyX19nZXRkaXNrdXNhZ2VfX2RvY19fLAotIl9nZXRkaXNrdXNhZ2UocGF0aCkgLT4gKHRvdGFsLCBmcmVlKVxuXG5cCi1SZXR1cm4gZGlzayB1c2FnZSBzdGF0aXN0aWNzIGFib3V0IHRoZSBnaXZlbiBwYXRoIGFzICh0b3RhbCwgZnJlZSkgdHVwbGUuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5fZ2V0ZGlza3VzYWdlCisKKyAgICBwYXRoOiBQeV9VTklDT0RFCisKK1JldHVybiBkaXNrIHVzYWdlIHN0YXRpc3RpY3MgYWJvdXQgdGhlIGdpdmVuIHBhdGggYXMgYSAodG90YWwsIGZyZWUpIHR1cGxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2luMzJfX2dldGRpc2t1c2FnZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19fZ2V0ZGlza3VzYWdlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfVU5JQ09ERSAqcGF0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NmQ2YWRjZDg2YjFkYjBiIGlucHV0PTY0NTgxMzNhZWQ4OTNjNzhdKi8KIHsKICAgICBCT09MIHJldHZhbDsKICAgICBVTEFSR0VfSU5URUdFUiBfLCB0b3RhbCwgZnJlZTsKLSAgICBjb25zdCB3Y2hhcl90ICpwYXRoOwotCi0gICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidSIsICZwYXRoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmV0dmFsID0gR2V0RGlza0ZyZWVTcGFjZUV4VyhwYXRoLCAmXywgJnRvdGFsLCAmZnJlZSk7CkBAIC05MzY0LDcgKzk0NjYsNyBAQAogCiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihMTCkiLCB0b3RhbC5RdWFkUGFydCwgZnJlZS5RdWFkUGFydCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIAogLyogVGhpcyBpcyB1c2VkIGZvciBmcGF0aGNvbmYoKSwgcGF0aGNvbmYoKSwgY29uZnN0cigpIGFuZCBzeXNjb25mKCkuCkBAIC05NTIxLDgxICs5NjIzLDczIEBACiB9CiAjZW5kaWYKIAorCiAjaWZkZWYgSEFWRV9GUEFUSENPTkYKLVB5RG9jX1NUUlZBUihwb3NpeF9mcGF0aGNvbmZfX2RvY19fLAotImZwYXRoY29uZihmZCwgbmFtZSkgLT4gaW50ZWdlclxuXG5cCi1SZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gbGltaXQgbmFtZSBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciBmZC5cblwKLUlmIHRoZXJlIGlzIG5vIGxpbWl0LCByZXR1cm4gLTEuIik7CisvKltjbGluaWMgaW5wdXRdCitvcy5mcGF0aGNvbmYgLT4gbG9uZwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZnBhdGhjb25mKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICBmZDogaW50CisgICAgbmFtZTogcGF0aF9jb25mbmFtZQorICAgIC8KKworUmV0dXJuIHRoZSBjb25maWd1cmF0aW9uIGxpbWl0IG5hbWUgZm9yIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuCisKK0lmIHRoZXJlIGlzIG5vIGxpbWl0LCByZXR1cm4gLTEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBsb25nCitvc19mcGF0aGNvbmZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ1YjcwNDI0MjVmYzNlMjEgaW5wdXQ9NTk0MmEwMjRkMzc3NzgxMF0qLwogewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIGludCBuYW1lLCBmZDsKKyAgICBsb25nIGxpbWl0OwogCi0gICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlPJjpmcGF0aGNvbmYiLCAmZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29udl9wYXRoX2NvbmZuYW1lLCAmbmFtZSkpIHsKLSAgICAgICAgbG9uZyBsaW1pdDsKKyAgICBlcnJubyA9IDA7CisgICAgbGltaXQgPSBmcGF0aGNvbmYoZmQsIG5hbWUpOworICAgIGlmIChsaW1pdCA9PSAtMSAmJiBlcnJubyAhPSAwKQorICAgICAgICBwb3NpeF9lcnJvcigpOwogCi0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbGltaXQgPSBmcGF0aGNvbmYoZmQsIG5hbWUpOwotICAgICAgICBpZiAobGltaXQgPT0gLTEgJiYgZXJybm8gIT0gMCkKLSAgICAgICAgICAgIHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZyhsaW1pdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGxpbWl0OwogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9GUEFUSENPTkYgKi8KIAogCiAjaWZkZWYgSEFWRV9QQVRIQ09ORgotUHlEb2NfU1RSVkFSKHBvc2l4X3BhdGhjb25mX19kb2NfXywKLSJwYXRoY29uZihwYXRoLCBuYW1lKSAtPiBpbnRlZ2VyXG5cblwKLVJldHVybiB0aGUgY29uZmlndXJhdGlvbiBsaW1pdCBuYW1lIGZvciB0aGUgZmlsZSBvciBkaXJlY3RvcnkgcGF0aC5cblwKLUlmIHRoZXJlIGlzIG5vIGxpbWl0LCByZXR1cm4gLTEuXG5cCi1PbiBzb21lIHBsYXRmb3JtcywgcGF0aCBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG5cCi0gIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnBhdGhjb25mIC0+IGxvbmcKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9J1BBVEhfSEFWRV9GUEFUSENPTkYnKQorICAgIG5hbWU6IHBhdGhfY29uZm5hbWUKIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3BhdGhjb25mKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK1JldHVybiB0aGUgY29uZmlndXJhdGlvbiBsaW1pdCBuYW1lIGZvciB0aGUgZmlsZSBvciBkaXJlY3RvcnkgcGF0aC4KKworSWYgdGhlcmUgaXMgbm8gbGltaXQsIHJldHVybiAtMS4KK09uIHNvbWUgcGxhdGZvcm1zLCBwYXRoIG1heSBhbHNvIGJlIHNwZWNpZmllZCBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KKyAgSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHVuYXZhaWxhYmxlLCB1c2luZyBpdCByYWlzZXMgYW4gZXhjZXB0aW9uLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgbG9uZworb3NfcGF0aGNvbmZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTViZWRlZTM1YjI5M2EwODkgaW5wdXQ9YmMzZTJhOTg1YWYyN2U1ZV0qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIGludCBuYW1lOwotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgIm5hbWUiLCBOVUxMfTsKLQotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicGF0aGNvbmYiOwotI2lmZGVmIEhBVkVfRlBBVEhDT05GCi0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0jZW5kaWYKLSAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyY6cGF0aGNvbmYiLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZfcGF0aF9jb25mbmFtZSwgJm5hbWUpKSB7CiAgICAgbG9uZyBsaW1pdDsKIAogICAgIGVycm5vID0gMDsKICNpZmRlZiBIQVZFX0ZQQVRIQ09ORgotICAgIGlmIChwYXRoLmZkICE9IC0xKQotICAgICAgICBsaW1pdCA9IGZwYXRoY29uZihwYXRoLmZkLCBuYW1lKTsKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpCisgICAgICAgIGxpbWl0ID0gZnBhdGhjb25mKHBhdGgtPmZkLCBuYW1lKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgbGltaXQgPSBwYXRoY29uZihwYXRoLm5hcnJvdywgbmFtZSk7CisgICAgICAgIGxpbWl0ID0gcGF0aGNvbmYocGF0aC0+bmFycm93LCBuYW1lKTsKICAgICBpZiAobGltaXQgPT0gLTEgJiYgZXJybm8gIT0gMCkgewogICAgICAgICBpZiAoZXJybm8gPT0gRUlOVkFMKQogICAgICAgICAgICAgLyogY291bGQgYmUgYSBwYXRoIG9yIG5hbWUgcHJvYmxlbSAqLwogICAgICAgICAgICAgcG9zaXhfZXJyb3IoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKHBhdGgpOwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZyhsaW1pdCk7Ci0gICAgfQotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBsaW1pdDsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfUEFUSENPTkYgKi8KIAogI2lmZGVmIEhBVkVfQ09ORlNUUgogc3RhdGljIHN0cnVjdCBjb25zdGRlZiBwb3NpeF9jb25zdGFudHNfY29uZnN0cltdID0gewpAQCAtOTc1OSwyMSArOTg1MywyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBzaXplb2Yoc3RydWN0IGNvbnN0ZGVmKSk7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9jb25mc3RyX19kb2NfXywKLSJjb25mc3RyKG5hbWUpIC0+IHN0cmluZ1xuXG5cCi1SZXR1cm4gYSBzdHJpbmctdmFsdWVkIHN5c3RlbSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy5jb25mc3RyCisKKyAgICBuYW1lOiBjb25mc3RyX2NvbmZuYW1lCisgICAgLworCitSZXR1cm4gYSBzdHJpbmctdmFsdWVkIHN5c3RlbSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfY29uZnN0cihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc19jb25mc3RyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmZiMGIxYjFlNDliOTM4MyBpbnB1dD0xOGZiNGQwNTY3MjQyZTY1XSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgaW50IG5hbWU7CiAgICAgY2hhciBidWZmZXJbMjU1XTsKICAgICBzaXplX3QgbGVuOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpjb25mc3RyIiwgY29udl9jb25mc3RyX2NvbmZuYW1lLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgZXJybm8gPSAwOwogICAgIGxlbiA9IGNvbmZzdHIobmFtZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CiAgICAgaWYgKGxlbiA9PSAwKSB7CkBAIC05Nzg3LDE4ICs5ODg0LDIwIEBACiAgICAgfQogCiAgICAgaWYgKGxlbiA+PSBzaXplb2YoYnVmZmVyKSkgeworICAgICAgICBzaXplX3QgbGVuMjsKICAgICAgICAgY2hhciAqYnVmID0gUHlNZW1fTWFsbG9jKGxlbik7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICBjb25mc3RyKG5hbWUsIGJ1ZiwgbGVuKTsKLSAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoYnVmLCBsZW4tMSk7CisgICAgICAgIGxlbjIgPSBjb25mc3RyKG5hbWUsIGJ1ZiwgbGVuKTsKKyAgICAgICAgYXNzZXJ0KGxlbiA9PSBsZW4yKTsKKyAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoYnVmLCBsZW4yLTEpOwogICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoYnVmZmVyLCBsZW4tMSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfQ09ORlNUUiAqLwogCiAKICNpZmRlZiBIQVZFX1NZU0NPTkYKQEAgLTEwMzA1LDI5ICsxMDQwNCwyOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBzaXplb2Yoc3RydWN0IGNvbnN0ZGVmKSk7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zeXNjb25mX19kb2NfXywKLSJzeXNjb25mKG5hbWUpIC0+IGludGVnZXJcblxuXAotUmV0dXJuIGFuIGludGVnZXItdmFsdWVkIHN5c3RlbSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiIpOwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3lzY29uZihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitvcy5zeXNjb25mIC0+IGxvbmcKKyAgICBuYW1lOiBzeXNjb25mX2NvbmZuYW1lCisgICAgLworCitSZXR1cm4gYW4gaW50ZWdlci12YWx1ZWQgc3lzdGVtIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBsb25nCitvc19zeXNjb25mX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzY2MmY5NDVmYzBjYzc1NiBpbnB1dD0yNzllMzQzMGEzM2YyOWU0XSovCiB7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgaW50IG5hbWU7CisgICAgbG9uZyB2YWx1ZTsKIAotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpzeXNjb25mIiwgY29udl9zeXNjb25mX2NvbmZuYW1lLCAmbmFtZSkpIHsKLSAgICAgICAgbG9uZyB2YWx1ZTsKLQotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHZhbHVlID0gc3lzY29uZihuYW1lKTsKLSAgICAgICAgaWYgKHZhbHVlID09IC0xICYmIGVycm5vICE9IDApCi0gICAgICAgICAgICBwb3NpeF9lcnJvcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcodmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIGVycm5vID0gMDsKKyAgICB2YWx1ZSA9IHN5c2NvbmYobmFtZSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIGVycm5vICE9IDApCisgICAgICAgIHBvc2l4X2Vycm9yKCk7CisgICAgcmV0dXJuIHZhbHVlOwogfQotI2VuZGlmCisjZW5kaWYgLyogSEFWRV9TWVNDT05GICovCiAKIAogLyogVGhpcyBjb2RlIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHRhYmxlcyBvZiBjb25maWd1cmF0aW9uIHZhbHVlIG5hbWVzCkBAIC0xMDQwNCwxMyArMTA1MDIsMTggQEAKIH0KIAogCi1QeURvY19TVFJWQVIocG9zaXhfYWJvcnRfX2RvY19fLAotImFib3J0KCkgLT4gZG9lcyBub3QgcmV0dXJuIVxuXG5cCi1BYm9ydCB0aGUgaW50ZXJwcmV0ZXIgaW1tZWRpYXRlbHkuICBUaGlzICdkdW1wcyBjb3JlJyBvciBvdGhlcndpc2UgZmFpbHNcblwKLWluIHRoZSBoYXJkZXN0IHdheSBwb3NzaWJsZSBvbiB0aGUgaG9zdGluZyBvcGVyYXRpbmcgc3lzdGVtLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuYWJvcnQKKworQWJvcnQgdGhlIGludGVycHJldGVyIGltbWVkaWF0ZWx5LgorCitUaGlzIGZ1bmN0aW9uICdkdW1wcyBjb3JlJyBvciBvdGhlcndpc2UgZmFpbHMgaW4gdGhlIGhhcmRlc3Qgd2F5IHBvc3NpYmxlCitvbiB0aGUgaG9zdGluZyBvcGVyYXRpbmcgc3lzdGVtLiAgVGhpcyBmdW5jdGlvbiBuZXZlciByZXR1cm5zLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfYWJvcnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19hYm9ydF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGNmNTI1ODZkYWQyNDY3YyBpbnB1dD1jZjJjN2Q5OGJjNTA0MDQ3XSovCiB7CiAgICAgYWJvcnQoKTsKICAgICAvKk5PVFJFQUNIRUQqLwpAQCAtMTA0MTksOSArMTA1MjIsMTEgQEAKIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKKy8qIEFDIDMuNTogY2hhbmdlIHRvIHBhdGhfdD8gYnV0IHRoYXQgbWlnaHQgY2hhbmdlIGV4Y2VwdGlvbnMgKi8KIFB5RG9jX1NUUlZBUih3aW4zMl9zdGFydGZpbGVfX2RvY19fLAotInN0YXJ0ZmlsZShmaWxlcGF0aCBbLCBvcGVyYXRpb25dKSAtIFN0YXJ0IGEgZmlsZSB3aXRoIGl0cyBhc3NvY2lhdGVkXG5cCi1hcHBsaWNhdGlvbi5cblwKKyJzdGFydGZpbGUoZmlsZXBhdGggWywgb3BlcmF0aW9uXSlcblwKK1xuXAorU3RhcnQgYSBmaWxlIHdpdGggaXRzIGFzc29jaWF0ZWQgYXBwbGljYXRpb24uXG5cCiBcblwKIFdoZW4gXCJvcGVyYXRpb25cIiBpcyBub3Qgc3BlY2lmaWVkIG9yIFwib3BlblwiLCB0aGlzIGFjdHMgbGlrZVxuXAogZG91YmxlLWNsaWNraW5nIHRoZSBmaWxlIGluIEV4cGxvcmVyLCBvciBnaXZpbmcgdGhlIGZpbGUgbmFtZSBhcyBhblxuXApAQCAtMTA0MzgsNiArMTA1NDMsMzcgQEAKIGFuIGFic29sdXRlIHBhdGgsIG1ha2Ugc3VyZSB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIG5vdCBhIHNsYXNoIChcIi9cIik7XG5cCiB0aGUgdW5kZXJseWluZyBXaW4zMiBTaGVsbEV4ZWN1dGUgZnVuY3Rpb24gZG9lc24ndCB3b3JrIGlmIGl0IGlzLiIpOwogCisvKiBHcmFiIFNoZWxsRXhlY3V0ZSBkeW5hbWljYWxseSBmcm9tIHNoZWxsMzIgKi8KK3N0YXRpYyBpbnQgaGFzX1NoZWxsRXhlY3V0ZSA9IC0xOworc3RhdGljIEhJTlNUQU5DRSAoQ0FMTEJBQ0sgKlB5X1NoZWxsRXhlY3V0ZUEpKEhXTkQsIExQQ1NUUiwgTFBDU1RSLCBMUENTVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDU1RSLCBJTlQpOworc3RhdGljIEhJTlNUQU5DRSAoQ0FMTEJBQ0sgKlB5X1NoZWxsRXhlY3V0ZVcpKEhXTkQsIExQQ1dTVFIsIExQQ1dTVFIsIExQQ1dTVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBDV1NUUiwgSU5UKTsKK3N0YXRpYyBpbnQKK2NoZWNrX1NoZWxsRXhlY3V0ZSgpCit7CisgICAgSElOU1RBTkNFIGhTaGVsbDMyOworCisgICAgLyogb25seSByZWNoZWNrICovCisgICAgaWYgKC0xID09IGhhc19TaGVsbEV4ZWN1dGUpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBoU2hlbGwzMiA9IExvYWRMaWJyYXJ5VyhMIlNIRUxMMzIiKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKGhTaGVsbDMyKSB7CisgICAgICAgICAgICAqKEZBUlBST0MqKSZQeV9TaGVsbEV4ZWN1dGVBID0gR2V0UHJvY0FkZHJlc3MoaFNoZWxsMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGVsbEV4ZWN1dGVBIik7CisgICAgICAgICAgICAqKEZBUlBST0MqKSZQeV9TaGVsbEV4ZWN1dGVXID0gR2V0UHJvY0FkZHJlc3MoaFNoZWxsMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaGVsbEV4ZWN1dGVXIik7CisgICAgICAgICAgICBoYXNfU2hlbGxFeGVjdXRlID0gUHlfU2hlbGxFeGVjdXRlQSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NoZWxsRXhlY3V0ZVc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBoYXNfU2hlbGxFeGVjdXRlID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGFzX1NoZWxsRXhlY3V0ZTsKK30KKworCiBzdGF0aWMgUHlPYmplY3QgKgogd2luMzJfc3RhcnRmaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTEwNDQ4LDYgKzEwNTg0LDE0IEBACiAgICAgSElOU1RBTkNFIHJjOwogCiAgICAgUHlPYmplY3QgKnVuaXBhdGgsICp1b3BlcmF0aW9uID0gTlVMTDsKKworICAgIGlmKCFjaGVja19TaGVsbEV4ZWN1dGUoKSkgeworICAgICAgICAvKiBJZiB0aGUgT1MgZG9lc24ndCBoYXZlIFNoZWxsRXhlY3V0ZSwgcmV0dXJuIGEKKyAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvci4gKi8KKyAgICAgICAgcmV0dXJuIFB5RXJyX0Zvcm1hdChQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgInN0YXJ0ZmlsZSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgcGxhdGZvcm0iKTsKKyAgICB9CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8czpzdGFydGZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmdW5pcGF0aCwgJm9wZXJhdGlvbikpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTEwNDc2LDggKzEwNjIwLDggQEAKICAgICAgICAgd29wZXJhdGlvbiA9IE5VTEw7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBTaGVsbEV4ZWN1dGVXKChIV05EKTAsIHdvcGVyYXRpb24sIHdwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBTV19TSE9XTk9STUFMKTsKKyAgICByYyA9IFB5X1NoZWxsRXhlY3V0ZVcoKEhXTkQpMCwgd29wZXJhdGlvbiwgd3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIFNXX1NIT1dOT1JNQUwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBQeV9YREVDUkVGKHVvcGVyYXRpb24pOwpAQCAtMTA0OTksOCArMTA2NDMsOCBAQAogICAgIH0KICAgICBmaWxlcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob2ZpbGVwYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBTaGVsbEV4ZWN1dGUoKEhXTkQpMCwgb3BlcmF0aW9uLCBmaWxlcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBTV19TSE9XTk9STUFMKTsKKyAgICByYyA9IFB5X1NoZWxsRXhlY3V0ZUEoKEhXTkQpMCwgb3BlcmF0aW9uLCBmaWxlcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgU1dfU0hPV05PUk1BTCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmMgPD0gKEhJTlNUQU5DRSkzMikgewogICAgICAgICBQeU9iamVjdCAqZXJydmFsID0gd2luMzJfZXJyb3IoInN0YXJ0ZmlsZSIsIGZpbGVwYXRoKTsKQEAgLTEwNTExLDE3ICsxMDY1NSwyMyBAQAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KKwogCiAjaWZkZWYgSEFWRV9HRVRMT0FEQVZHCi1QeURvY19TVFJWQVIocG9zaXhfZ2V0bG9hZGF2Z19fZG9jX18sCi0iZ2V0bG9hZGF2ZygpIC0+IChmbG9hdCwgZmxvYXQsIGZsb2F0KVxuXG5cCi1SZXR1cm4gdGhlIG51bWJlciBvZiBwcm9jZXNzZXMgaW4gdGhlIHN5c3RlbSBydW4gcXVldWUgYXZlcmFnZWQgb3ZlclxuXAotdGhlIGxhc3QgMSwgNSwgYW5kIDE1IG1pbnV0ZXMgb3IgcmFpc2VzIE9TRXJyb3IgaWYgdGhlIGxvYWQgYXZlcmFnZVxuXAotd2FzIHVub2J0YWluYWJsZSIpOworLypbY2xpbmljIGlucHV0XQorb3MuZ2V0bG9hZGF2ZworCitSZXR1cm4gYXZlcmFnZSByZWNlbnQgc3lzdGVtIGxvYWQgaW5mb3JtYXRpb24uCisKK1JldHVybiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgc3lzdGVtIHJ1biBxdWV1ZSBhdmVyYWdlZCBvdmVyCit0aGUgbGFzdCAxLCA1LCBhbmQgMTUgbWludXRlcyBhcyBhIHR1cGxlIG9mIHRocmVlIGZsb2F0cy4KK1JhaXNlcyBPU0Vycm9yIGlmIHRoZSBsb2FkIGF2ZXJhZ2Ugd2FzIHVub2J0YWluYWJsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2dldGxvYWRhdmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitvc19nZXRsb2FkYXZnX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05YWQzYTExYmZiNGY0YmQyIGlucHV0PTNkNmQ4MjZiNzZkOGEzNGVdKi8KIHsKICAgICBkb3VibGUgbG9hZGF2Z1szXTsKICAgICBpZiAoZ2V0bG9hZGF2Zyhsb2FkYXZnLCAzKSE9MykgewpAQCAtMTA1MzAsNzIgKzEwNjgwLDgzIEBACiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJkZGQiLCBsb2FkYXZnWzBdLCBsb2FkYXZnWzFdLCBsb2FkYXZnWzJdKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfR0VUTE9BREFWRyAqLwogCi1QeURvY19TVFJWQVIoZGV2aWNlX2VuY29kaW5nX19kb2NfXywKLSJkZXZpY2VfZW5jb2RpbmcoZmQpIC0+IHN0clxuXG5cCi1SZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGRldmljZVxuXAotaWYgdGhlIG91dHB1dCBpcyBhIHRlcm1pbmFsOyBlbHNlIHJldHVybiBOb25lLiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy5kZXZpY2VfZW5jb2RpbmcKKyAgICBmZDogaW50CisKK1JldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBlbmNvZGluZyBvZiBhIHRlcm1pbmFsJ3MgZmlsZSBkZXNjcmlwdG9yLgorCitUaGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgYmUgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbC4KK0lmIHRoZSBkZXZpY2UgaXMgbm90IGEgdGVybWluYWwsIHJldHVybiBOb25lLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGV2aWNlX2VuY29kaW5nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX2RldmljZV9lbmNvZGluZ19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lMGQyOTRiYmFiN2U4YzJiIGlucHV0PTllMWQ0YTQyYjY2ZGYzMTJdKi8KIHsKLSAgICBpbnQgZmQ7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZGV2aWNlX2VuY29kaW5nIiwgJmZkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICByZXR1cm4gX1B5X2RldmljZV9lbmNvZGluZyhmZCk7CiB9CiAKLSNpZmRlZiBIQVZFX1NFVFJFU1VJRAotUHlEb2NfU1RSVkFSKHBvc2l4X3NldHJlc3VpZF9fZG9jX18sCi0ic2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpXG5cblwKLVNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgdXNlciBpZHMuIik7CiAKLXN0YXRpYyBQeU9iamVjdCoKLXBvc2l4X3NldHJlc3VpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorI2lmZGVmIEhBVkVfU0VUUkVTVUlECisvKltjbGluaWMgaW5wdXRdCitvcy5zZXRyZXN1aWQKKworICAgIHJ1aWQ6IHVpZF90CisgICAgZXVpZDogdWlkX3QKKyAgICBzdWlkOiB1aWRfdAorICAgIC8KKworU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCB1c2VyIGlkcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3NldHJlc3VpZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHVpZF90IHJ1aWQsIHVpZF90IGV1aWQsIHVpZF90IHN1aWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODM0YTY0MWUxNTM3M2U5NyBpbnB1dD05ZTMzY2I3OWE4Mjc5MmYzXSovCiB7Ci0gICAgLyogV2UgYXNzdW1lIHVpZF90IGlzIG5vIGxhcmdlciB0aGFuIGEgbG9uZy4gKi8KLSAgICB1aWRfdCBydWlkLCBldWlkLCBzdWlkOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZPJk8mOnNldHJlc3VpZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9VaWRfQ29udmVydGVyLCAmcnVpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X1VpZF9Db252ZXJ0ZXIsICZldWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfVWlkX0NvbnZlcnRlciwgJnN1aWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX1NFVFJFU1VJRCAqLworCiAKICNpZmRlZiBIQVZFX1NFVFJFU0dJRAotUHlEb2NfU1RSVkFSKHBvc2l4X3NldHJlc2dpZF9fZG9jX18sCi0ic2V0cmVzZ2lkKHJnaWQsIGVnaWQsIHNnaWQpXG5cblwKLVNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgZ3JvdXAgaWRzLiIpOworLypbY2xpbmljIGlucHV0XQorb3Muc2V0cmVzZ2lkCiAKLXN0YXRpYyBQeU9iamVjdCoKLXBvc2l4X3NldHJlc2dpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgIHJnaWQ6IGdpZF90CisgICAgZWdpZDogZ2lkX3QKKyAgICBzZ2lkOiBnaWRfdAorICAgIC8KKworU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBncm91cCBpZHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRyZXNnaWRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBnaWRfdCByZ2lkLCBnaWRfdCBlZ2lkLCBnaWRfdCBzZ2lkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZhYTQwMmYzZDJlNTE0YTkgaW5wdXQ9MzNlOWUwNzg1ZWY0MjZiMV0qLwogewotICAgIGdpZF90IHJnaWQsIGVnaWQsIHNnaWQ7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJk8mTyY6c2V0cmVzZ2lkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0dpZF9Db252ZXJ0ZXIsICZyZ2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfR2lkX0NvbnZlcnRlciwgJmVnaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9HaWRfQ29udmVydGVyLCAmc2dpZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzZXRyZXNnaWQocmdpZCwgZWdpZCwgc2dpZCkgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfU0VUUkVTR0lEICovCisKIAogI2lmZGVmIEhBVkVfR0VUUkVTVUlECi1QeURvY19TVFJWQVIocG9zaXhfZ2V0cmVzdWlkX19kb2NfXywKLSJnZXRyZXN1aWQoKSAtPiAocnVpZCwgZXVpZCwgc3VpZClcblxuXAotR2V0IHR1cGxlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCB1c2VyIGlkcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldHJlc3VpZAogCi1zdGF0aWMgUHlPYmplY3QqCi1wb3NpeF9nZXRyZXN1aWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorUmV0dXJuIGEgdHVwbGUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIHVzZXIgaWRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0cmVzdWlkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04ZTBiZWNmZjVkZWNlNWJmIGlucHV0PTQxY2NmYThlMWY2NTE3YWRdKi8KIHsKICAgICB1aWRfdCBydWlkLCBldWlkLCBzdWlkOwogICAgIGlmIChnZXRyZXN1aWQoJnJ1aWQsICZldWlkLCAmc3VpZCkgPCAwKQpAQCAtMTA2MDQsOTAgKzEwNzY1LDg4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5TG9uZ19Gcm9tVWlkKGV1aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUxvbmdfRnJvbVVpZChzdWlkKSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0dFVFJFU1VJRCAqLworCiAKICNpZmRlZiBIQVZFX0dFVFJFU0dJRAotUHlEb2NfU1RSVkFSKHBvc2l4X2dldHJlc2dpZF9fZG9jX18sCi0iZ2V0cmVzZ2lkKCkgLT4gKHJnaWQsIGVnaWQsIHNnaWQpXG5cblwKLUdldCB0dXBsZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgZ3JvdXAgaWRzLiIpOworLypbY2xpbmljIGlucHV0XQorb3MuZ2V0cmVzZ2lkCiAKLXN0YXRpYyBQeU9iamVjdCoKLXBvc2l4X2dldHJlc2dpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitSZXR1cm4gYSB0dXBsZSBvZiB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgZ3JvdXAgaWRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfZ2V0cmVzZ2lkX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNzE5YzRiZmNmMjdmYjlmIGlucHV0PTUxN2U2OGRiOWNhMzJkZjZdKi8KIHsKLSAgICB1aWRfdCByZ2lkLCBlZ2lkLCBzZ2lkOworICAgIGdpZF90IHJnaWQsIGVnaWQsIHNnaWQ7CiAgICAgaWYgKGdldHJlc2dpZCgmcmdpZCwgJmVnaWQsICZzZ2lkKSA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTk5OKSIsIF9QeUxvbmdfRnJvbUdpZChyZ2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlMb25nX0Zyb21HaWQoZWdpZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5TG9uZ19Gcm9tR2lkKHNnaWQpKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIEhBVkVfR0VUUkVTR0lEICovCisKIAogI2lmZGVmIFVTRV9YQVRUUlMKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldHhhdHRyCiAKLVB5RG9jX1NUUlZBUihwb3NpeF9nZXR4YXR0cl9fZG9jX18sCi0iZ2V0eGF0dHIocGF0aCwgYXR0cmlidXRlLCAqLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkgLT4gdmFsdWVcblxuXAotUmV0dXJuIHRoZSB2YWx1ZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGUgYXR0cmlidXRlIG9uIHBhdGguXG5cCi1cblwKLXBhdGggbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCBnZXR4YXR0ciB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcblwKLSAgdGhlIGxpbmsgcG9pbnRzIHRvLiIpOworICAgIHBhdGg6IHBhdGhfdChhbGxvd19mZD1UcnVlKQorICAgIGF0dHJpYnV0ZTogcGF0aF90CisgICAgKgorICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKworUmV0dXJuIHRoZSB2YWx1ZSBvZiBleHRlbmRlZCBhdHRyaWJ1dGUgYXR0cmlidXRlIG9uIHBhdGguCisKK3BhdGggbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KK0lmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYworICBsaW5rLCBnZXR4YXR0ciB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9nZXR4YXR0cihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19nZXR4YXR0cl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgcGF0aF90ICphdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgIGludCBmb2xsb3dfc3ltbGlua3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWYyZjQ0MjAwYTQzY2ZmMiBpbnB1dD04YzhlYTNiYWI3OGQ4OWMyXSovCiB7Ci0gICAgcGF0aF90IHBhdGg7Ci0gICAgcGF0aF90IGF0dHJpYnV0ZTsKLSAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKmJ1ZmZlciA9IE5VTEw7Ci0gICAgaW50IGk7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiYXR0cmlidXRlIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7Ci0gICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImdldHhhdHRyIjsKLSAgICBhdHRyaWJ1dGUuZnVuY3Rpb25fbmFtZSA9ICJnZXR4YXR0ciI7Ci0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkcDpnZXR4YXR0ciIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmYXR0cmlidXRlLAotICAgICAgICAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICBpZiAoZmRfYW5kX2ZvbGxvd19zeW1saW5rc19pbnZhbGlkKCJnZXR4YXR0ciIsIHBhdGgtPmZkLCBmb2xsb3dfc3ltbGlua3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChmZF9hbmRfZm9sbG93X3N5bWxpbmtzX2ludmFsaWQoImdldHhhdHRyIiwgcGF0aC5mZCwgZm9sbG93X3N5bWxpbmtzKSkKLSAgICAgICAgZ290byBleGl0OwotCiAgICAgZm9yIChpID0gMDsgOyBpKyspIHsKICAgICAgICAgdm9pZCAqcHRyOwogICAgICAgICBzc2l6ZV90IHJlc3VsdDsKICAgICAgICAgc3RhdGljIFB5X3NzaXplX3QgYnVmZmVyX3NpemVzW10gPSB7MTI4LCBYQVRUUl9TSVpFX01BWCwgMH07CiAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZXNbaV07CiAgICAgICAgIGlmICghYnVmZmVyX3NpemUpIHsKLSAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwotICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgcGF0aF9lcnJvcihwYXRoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmZmVyX3NpemUpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBwdHIgPSBQeUJ5dGVzX0FTX1NUUklORyhidWZmZXIpOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFM7Ci0gICAgICAgIGlmIChwYXRoLmZkID49IDApCi0gICAgICAgICAgICByZXN1bHQgPSBmZ2V0eGF0dHIocGF0aC5mZCwgYXR0cmlidXRlLm5hcnJvdywgcHRyLCBidWZmZXJfc2l6ZSk7CisgICAgICAgIGlmIChwYXRoLT5mZCA+PSAwKQorICAgICAgICAgICAgcmVzdWx0ID0gZmdldHhhdHRyKHBhdGgtPmZkLCBhdHRyaWJ1dGUtPm5hcnJvdywgcHRyLCBidWZmZXJfc2l6ZSk7CiAgICAgICAgIGVsc2UgaWYgKGZvbGxvd19zeW1saW5rcykKLSAgICAgICAgICAgIHJlc3VsdCA9IGdldHhhdHRyKHBhdGgubmFycm93LCBhdHRyaWJ1dGUubmFycm93LCBwdHIsIGJ1ZmZlcl9zaXplKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGdldHhhdHRyKHBhdGgtPm5hcnJvdywgYXR0cmlidXRlLT5uYXJyb3csIHB0ciwgYnVmZmVyX3NpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBsZ2V0eGF0dHIocGF0aC5uYXJyb3csIGF0dHJpYnV0ZS5uYXJyb3csIHB0ciwgYnVmZmVyX3NpemUpOworICAgICAgICAgICAgcmVzdWx0ID0gbGdldHhhdHRyKHBhdGgtPm5hcnJvdywgYXR0cmlidXRlLT5uYXJyb3csIHB0ciwgYnVmZmVyX3NpemUpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUzsKIAogICAgICAgICBpZiAocmVzdWx0IDwgMCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7Ci0gICAgICAgICAgICBidWZmZXIgPSBOVUxMOwogICAgICAgICAgICAgaWYgKGVycm5vID09IEVSQU5HRSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwotICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgcGF0aF9lcnJvcihwYXRoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCAhPSBidWZmZXJfc2l6ZSkgewpAQCAtMTA2OTcsMTY4ICsxMDg1NiwxMzQgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcGF0aF9jbGVhbnVwKCZhdHRyaWJ1dGUpOwogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zZXR4YXR0cl9fZG9jX18sCi0ic2V0eGF0dHIocGF0aCwgYXR0cmlidXRlLCB2YWx1ZSwgZmxhZ3M9MCwgKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cblwKLVNldCBleHRlbmRlZCBhdHRyaWJ1dGUgYXR0cmlidXRlIG9uIHBhdGggdG8gdmFsdWUuXG5cCi1wYXRoIG1heSBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgc2V0eGF0dHIgd2lsbCBtb2RpZnkgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcblwKLSAgdGhlIGxpbmsgcG9pbnRzIHRvLiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy5zZXR4YXR0cgorCisgICAgcGF0aDogcGF0aF90KGFsbG93X2ZkPVRydWUpCisgICAgYXR0cmlidXRlOiBwYXRoX3QKKyAgICB2YWx1ZTogUHlfYnVmZmVyCisgICAgZmxhZ3M6IGludCA9IDAKKyAgICAqCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorCitTZXQgZXh0ZW5kZWQgYXR0cmlidXRlIGF0dHJpYnV0ZSBvbiBwYXRoIHRvIHZhbHVlLgorCitwYXRoIG1heSBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCitJZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMKKyAgbGluaywgc2V0eGF0dHIgd2lsbCBtb2RpZnkgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zZXR4YXR0cihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19zZXR4YXR0cl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgcGF0aF90ICphdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqdmFsdWUsIGludCBmbGFncywgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05OGI4M2Y2M2ZkZGUyNmJiIGlucHV0PWYwZDI2ODMzOTkyMDE1YzJdKi8KIHsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBwYXRoX3QgYXR0cmlidXRlOwotICAgIFB5X2J1ZmZlciB2YWx1ZTsKLSAgICBpbnQgZmxhZ3MgPSAwOwotICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOwotICAgIGludCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiYXR0cmlidXRlIiwgInZhbHVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmxhZ3MiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgc3NpemVfdCByZXN1bHQ7CiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInNldHhhdHRyIjsKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOwotICAgIG1lbXNldCgmdmFsdWUsIDAsIHNpemVvZih2YWx1ZSkpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ5KnxpJHA6c2V0eGF0dHIiLAotICAgICAgICBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJmF0dHJpYnV0ZSwKLSAgICAgICAgJnZhbHVlLCAmZmxhZ3MsCi0gICAgICAgICZmb2xsb3dfc3ltbGlua3MpKQorICAgIGlmIChmZF9hbmRfZm9sbG93X3N5bWxpbmtzX2ludmFsaWQoInNldHhhdHRyIiwgcGF0aC0+ZmQsIGZvbGxvd19zeW1saW5rcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGZkX2FuZF9mb2xsb3dfc3ltbGlua3NfaW52YWxpZCgic2V0eGF0dHIiLCBwYXRoLmZkLCBmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTOwotICAgIGlmIChwYXRoLmZkID4gLTEpCi0gICAgICAgIHJlc3VsdCA9IGZzZXR4YXR0cihwYXRoLmZkLCBhdHRyaWJ1dGUubmFycm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuYnVmLCB2YWx1ZS5sZW4sIGZsYWdzKTsKKyAgICBpZiAocGF0aC0+ZmQgPiAtMSkKKyAgICAgICAgcmVzdWx0ID0gZnNldHhhdHRyKHBhdGgtPmZkLCBhdHRyaWJ1dGUtPm5hcnJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5idWYsIHZhbHVlLT5sZW4sIGZsYWdzKTsKICAgICBlbHNlIGlmIChmb2xsb3dfc3ltbGlua3MpCi0gICAgICAgIHJlc3VsdCA9IHNldHhhdHRyKHBhdGgubmFycm93LCBhdHRyaWJ1dGUubmFycm93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuYnVmLCB2YWx1ZS5sZW4sIGZsYWdzKTsKKyAgICAgICAgcmVzdWx0ID0gc2V0eGF0dHIocGF0aC0+bmFycm93LCBhdHRyaWJ1dGUtPm5hcnJvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5idWYsIHZhbHVlLT5sZW4sIGZsYWdzKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGxzZXR4YXR0cihwYXRoLm5hcnJvdywgYXR0cmlidXRlLm5hcnJvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmJ1ZiwgdmFsdWUubGVuLCBmbGFncyk7CisgICAgICAgIHJlc3VsdCA9IGxzZXR4YXR0cihwYXRoLT5uYXJyb3csIGF0dHJpYnV0ZS0+bmFycm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmJ1ZiwgdmFsdWUtPmxlbiwgZmxhZ3MpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTOwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKLSAgICAgICAgZ290byBleGl0OworICAgICAgICBwYXRoX2Vycm9yKHBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm5fdmFsdWUgPSBQeV9Ob25lOwotICAgIFB5X0lOQ1JFRihyZXR1cm5fdmFsdWUpOwotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcGF0aF9jbGVhbnVwKCZhdHRyaWJ1dGUpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhbHVlKTsKLQotICAgIHJldHVybiByZXR1cm5fdmFsdWU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9yZW1vdmV4YXR0cl9fZG9jX18sCi0icmVtb3ZleGF0dHIocGF0aCwgYXR0cmlidXRlLCAqLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcblxuXAotUmVtb3ZlIGV4dGVuZGVkIGF0dHJpYnV0ZSBhdHRyaWJ1dGUgb24gcGF0aC5cblwKLXBhdGggbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCByZW1vdmV4YXR0ciB3aWxsIG1vZGlmeSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuXAotICB0aGUgbGluayBwb2ludHMgdG8uIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnJlbW92ZXhhdHRyCisKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9VHJ1ZSkKKyAgICBhdHRyaWJ1dGU6IHBhdGhfdAorICAgICoKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisKK1JlbW92ZSBleHRlbmRlZCBhdHRyaWJ1dGUgYXR0cmlidXRlIG9uIHBhdGguCisKK3BhdGggbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KK0lmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYworICBsaW5rLCByZW1vdmV4YXR0ciB3aWxsIG1vZGlmeSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICB0aGUgbGluayBwb2ludHMgdG8uCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3JlbW92ZXhhdHRyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX3JlbW92ZXhhdHRyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBwYXRoX3QgKmF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MjFhNTE4MTc5ODBjZGE2IGlucHV0PWNkYjU0ODM0MTYxZTMzMjldKi8KIHsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBwYXRoX3QgYXR0cmlidXRlOwotICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOwotICAgIGludCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiYXR0cmlidXRlIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHNzaXplX3QgcmVzdWx0OwogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJyZW1vdmV4YXR0ciI7Ci0gICAgbWVtc2V0KCZhdHRyaWJ1dGUsIDAsIHNpemVvZihhdHRyaWJ1dGUpKTsKLSAgICBhdHRyaWJ1dGUuZnVuY3Rpb25fbmFtZSA9ICJyZW1vdmV4YXR0ciI7Ci0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkcDpyZW1vdmV4YXR0ciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmYXR0cmlidXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb2xsb3dfc3ltbGlua3MpKQorICAgIGlmIChmZF9hbmRfZm9sbG93X3N5bWxpbmtzX2ludmFsaWQoInJlbW92ZXhhdHRyIiwgcGF0aC0+ZmQsIGZvbGxvd19zeW1saW5rcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGZkX2FuZF9mb2xsb3dfc3ltbGlua3NfaW52YWxpZCgicmVtb3ZleGF0dHIiLCBwYXRoLmZkLCBmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTOwotICAgIGlmIChwYXRoLmZkID4gLTEpCi0gICAgICAgIHJlc3VsdCA9IGZyZW1vdmV4YXR0cihwYXRoLmZkLCBhdHRyaWJ1dGUubmFycm93KTsKKyAgICBpZiAocGF0aC0+ZmQgPiAtMSkKKyAgICAgICAgcmVzdWx0ID0gZnJlbW92ZXhhdHRyKHBhdGgtPmZkLCBhdHRyaWJ1dGUtPm5hcnJvdyk7CiAgICAgZWxzZSBpZiAoZm9sbG93X3N5bWxpbmtzKQotICAgICAgICByZXN1bHQgPSByZW1vdmV4YXR0cihwYXRoLm5hcnJvdywgYXR0cmlidXRlLm5hcnJvdyk7CisgICAgICAgIHJlc3VsdCA9IHJlbW92ZXhhdHRyKHBhdGgtPm5hcnJvdywgYXR0cmlidXRlLT5uYXJyb3cpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gbHJlbW92ZXhhdHRyKHBhdGgubmFycm93LCBhdHRyaWJ1dGUubmFycm93KTsKKyAgICAgICAgcmVzdWx0ID0gbHJlbW92ZXhhdHRyKHBhdGgtPm5hcnJvdywgYXR0cmlidXRlLT5uYXJyb3cpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTOwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKLSAgICAgICAgZ290byBleGl0OworICAgICAgICByZXR1cm4gcGF0aF9lcnJvcihwYXRoKTsKICAgICB9CiAKLSAgICByZXR1cm5fdmFsdWUgPSBQeV9Ob25lOwotICAgIFB5X0lOQ1JFRihyZXR1cm5fdmFsdWUpOwotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0gICAgcGF0aF9jbGVhbnVwKCZhdHRyaWJ1dGUpOwotCi0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X2xpc3R4YXR0cl9fZG9jX18sCi0ibGlzdHhhdHRyKHBhdGg9Jy4nLCAqLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcblxuXAotUmV0dXJuIGEgbGlzdCBvZiBleHRlbmRlZCBhdHRyaWJ1dGVzIG9uIHBhdGguXG5cCi1cblwKLXBhdGggbWF5IGJlIGVpdGhlciBOb25lLCBhIHN0cmluZywgb3IgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG5cCi1pZiBwYXRoIGlzIE5vbmUsIGxpc3R4YXR0ciB3aWxsIGV4YW1pbmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuXAotSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljXG5cCi0gIGxpbmssIGxpc3R4YXR0ciB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcblwKLSAgdGhlIGxpbmsgcG9pbnRzIHRvLiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy5saXN0eGF0dHIKKworICAgIHBhdGg6IHBhdGhfdChhbGxvd19mZD1UcnVlLCBudWxsYWJsZT1UcnVlKSA9IE5vbmUKKyAgICAqCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorCitSZXR1cm4gYSBsaXN0IG9mIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb24gcGF0aC4KKworcGF0aCBtYXkgYmUgZWl0aGVyIE5vbmUsIGEgc3RyaW5nLCBvciBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4KK2lmIHBhdGggaXMgTm9uZSwgbGlzdHhhdHRyIHdpbGwgZXhhbWluZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCitJZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMKKyAgbGluaywgbGlzdHhhdHRyIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICB0aGUgbGluayBwb2ludHMgdG8uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9saXN0eGF0dHIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfbGlzdHhhdHRyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJlYmRiNGUyYWQwY2U0MzUgaW5wdXQ9MDhjY2E1M2FjMGIwN2MxM10qLwogewotICAgIHBhdGhfdCBwYXRoOwotICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpuYW1lOwogICAgIGNoYXIgKmJ1ZmZlciA9IE5VTEw7Ci0gICAgY2hhciAqbmFtZTsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGlzdHhhdHRyIjsKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBwYXRoLmZkID0gLTE7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mJHA6bGlzdHhhdHRyIiwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKLSAgICAgICAgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKGZkX2FuZF9mb2xsb3dfc3ltbGlua3NfaW52YWxpZCgibGlzdHhhdHRyIiwgcGF0aC5mZCwgZm9sbG93X3N5bWxpbmtzKSkKKyAgICBpZiAoZmRfYW5kX2ZvbGxvd19zeW1saW5rc19pbnZhbGlkKCJsaXN0eGF0dHIiLCBwYXRoLT5mZCwgZm9sbG93X3N5bWxpbmtzKSkKICAgICAgICAgZ290byBleGl0OwogCi0gICAgbmFtZSA9IHBhdGgubmFycm93ID8gcGF0aC5uYXJyb3cgOiAiLiI7CisgICAgbmFtZSA9IHBhdGgtPm5hcnJvdyA/IHBhdGgtPm5hcnJvdyA6ICIuIjsKKwogICAgIGZvciAoaSA9IDA7IDsgaSsrKSB7CiAgICAgICAgIGNoYXIgKnN0YXJ0LCAqdHJhY2UsICplbmQ7CiAgICAgICAgIHNzaXplX3QgbGVuZ3RoOwpAQCAtMTA4NjYsNyArMTA5OTEsNyBAQAogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemVzW2ldOwogICAgICAgICBpZiAoIWJ1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgICAvKiBFUkFOR0UgKi8KLSAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJ1ZmZlciA9IFB5TWVtX01BTExPQyhidWZmZXJfc2l6ZSk7CkBAIC0xMDg3Niw4ICsxMTAwMSw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTOwotICAgICAgICBpZiAocGF0aC5mZCA+IC0xKQotICAgICAgICAgICAgbGVuZ3RoID0gZmxpc3R4YXR0cihwYXRoLmZkLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKyAgICAgICAgaWYgKHBhdGgtPmZkID4gLTEpCisgICAgICAgICAgICBsZW5ndGggPSBmbGlzdHhhdHRyKHBhdGgtPmZkLCBidWZmZXIsIGJ1ZmZlcl9zaXplKTsKICAgICAgICAgZWxzZSBpZiAoZm9sbG93X3N5bWxpbmtzKQogICAgICAgICAgICAgbGVuZ3RoID0gbGlzdHhhdHRyKG5hbWUsIGJ1ZmZlciwgYnVmZmVyX3NpemUpOwogICAgICAgICBlbHNlCkBAIC0xMDg5MCw3ICsxMTAxNSw3IEBACiAgICAgICAgICAgICAgICAgYnVmZmVyID0gTlVMTDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwOTIzLDQzICsxMTA0OCw0MyBAQAogICAgIGJyZWFrOwogICAgIH0KIGV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBQeU1lbV9GUkVFKGJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLQogI2VuZGlmIC8qIFVTRV9YQVRUUlMgKi8KIAogCi1QeURvY19TVFJWQVIocG9zaXhfdXJhbmRvbV9fZG9jX18sCi0idXJhbmRvbShuKSAtPiBzdHJcblxuXAotUmV0dXJuIG4gcmFuZG9tIGJ5dGVzIHN1aXRhYmxlIGZvciBjcnlwdG9ncmFwaGljIHVzZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnVyYW5kb20KKworICAgIHNpemU6IFB5X3NzaXplX3QKKyAgICAvCisKK1JldHVybiBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHJhbmRvbSBieXRlcyBzdWl0YWJsZSBmb3IgY3J5cHRvZ3JhcGhpYyB1c2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF91cmFuZG9tKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3VyYW5kb21faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9zc2l6ZV90IHNpemUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDJjNWNjYTlkMTgwNjhlOSBpbnB1dD00MDY3Y2RiMWI2Nzc2YzI5XSovCiB7Ci0gICAgUHlfc3NpemVfdCBzaXplOwotICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgaW50IHJldDsKKyAgICBQeU9iamVjdCAqYnl0ZXM7CisgICAgaW50IHJlc3VsdDsKIAotICAgICAvKiBSZWFkIGFyZ3VtZW50cyAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibjp1cmFuZG9tIiwgJnNpemUpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVnYXRpdmUgYXJndW1lbnQgbm90IGFsbG93ZWQiKTsKLSAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSk7CisgICAgaWYgKGJ5dGVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0ID0gX1B5T1NfVVJhbmRvbShQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShyZXN1bHQpKTsKLSAgICBpZiAocmV0ID09IC0xKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJlc3VsdCA9IF9QeU9TX1VSYW5kb20oUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShieXRlcykpOworICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGJ5dGVzOwogfQogCiAvKiBUZXJtaW5hbCBzaXplIHF1ZXJ5aW5nICovCkBAIC0xMDk4Myw2ICsxMTEwOCw3IEBACiB9OwogCiAjaWYgZGVmaW5lZChURVJNU0laRV9VU0VfQ09OSU8pIHx8IGRlZmluZWQoVEVSTVNJWkVfVVNFX0lPQ1RMKQorLyogQUMgMy41OiBmZCBzaG91bGQgYWNjZXB0IE5vbmUgKi8KIFB5RG9jX1NUUlZBUih0ZXJtc2l6ZV9fZG9jX18sCiAgICAgIlJldHVybiB0aGUgc2l6ZSBvZiB0aGUgdGVybWluYWwgd2luZG93IGFzIChjb2x1bW5zLCBsaW5lcykuXG4iICAgICAgICBcCiAgICAgIlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMTA2OCwxMyArMTExOTQsMTYgQEAKIH0KICNlbmRpZiAvKiBkZWZpbmVkKFRFUk1TSVpFX1VTRV9DT05JTykgfHwgZGVmaW5lZChURVJNU0laRV9VU0VfSU9DVEwpICovCiAKLVB5RG9jX1NUUlZBUihwb3NpeF9jcHVfY291bnRfX2RvY19fLAotImNwdV9jb3VudCgpIC0+IGludGVnZXJcblxuXAotUmV0dXJuIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLCBvciBOb25lIGlmIHRoaXMgdmFsdWUgY2Fubm90IGJlXG5cCi1lc3RhYmxpc2hlZC4iKTsKKworLypbY2xpbmljIGlucHV0XQorb3MuY3B1X2NvdW50CisKK1JldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbTsgcmV0dXJuIE5vbmUgaWYgaW5kZXRlcm1pbmFibGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9jcHVfY291bnQoUHlPYmplY3QgKnNlbGYpCitvc19jcHVfY291bnRfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVmYzI5NDYzYzM5MzZhOWMgaW5wdXQ9ZDU1ZTJmOGYzODIzYTYyOF0qLwogewogICAgIGludCBuY3B1ID0gMDsKICNpZmRlZiBNU19XSU5ET1dTCkBAIC0xMTEwMywxMTEgKzExMjMyLDk1MCBAQAogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKGdldF9pbmhlcml0YWJsZV9fZG9jX18sCi0gICAgImdldF9pbmhlcml0YWJsZShmZCkgLT4gYm9vbFxuIiBcCi0gICAgIlxuIiBcCi0gICAgIkdldCB0aGUgY2xvc2Utb24tZXhlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CiAKLXN0YXRpYyBQeU9iamVjdCoKLXBvc2l4X2dldF9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitvcy5nZXRfaW5oZXJpdGFibGUgLT4gYm9vbAorCisgICAgZmQ6IGludAorICAgIC8KKworR2V0IHRoZSBjbG9zZS1vbi1leGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorb3NfZ2V0X2luaGVyaXRhYmxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IGZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA0NDVlMjBlMTQ5YWE1YjggaW5wdXQ9ODlhYzAwOGRjOWFiNmI5NV0qLwogewotICAgIGludCBmZDsKLSAgICBpbnQgaW5oZXJpdGFibGU7CisgICAgaW50IHJldHVybl92YWx1ZTsKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpnZXRfaW5oZXJpdGFibGUiLCAmZmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0KLSAgICBpbmhlcml0YWJsZSA9IF9QeV9nZXRfaW5oZXJpdGFibGUoZmQpOwotICAgIGlmIChpbmhlcml0YWJsZSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoaW5oZXJpdGFibGUpOworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyAgICByZXR1cm5fdmFsdWUgPSBfUHlfZ2V0X2luaGVyaXRhYmxlKGZkKTsKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAorICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKLVB5RG9jX1NUUlZBUihzZXRfaW5oZXJpdGFibGVfX2RvY19fLAotICAgICJzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKVxuIiBcCi0gICAgIlxuIiBcCi0gICAgIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKIAotc3RhdGljIFB5T2JqZWN0KgotcG9zaXhfc2V0X2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKy8qW2NsaW5pYyBpbnB1dF0KK29zLnNldF9pbmhlcml0YWJsZQorICAgIGZkOiBpbnQKKyAgICBpbmhlcml0YWJsZTogaW50CisgICAgLworCitTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRfaW5oZXJpdGFibGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBpbmhlcml0YWJsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mMWIxOTE4YTJmM2MzOGMyIGlucHV0PTljZWFlYWQ4N2ExZTI0MDJdKi8KIHsKLSAgICBpbnQgZmQsIGluaGVyaXRhYmxlOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpzZXRfaW5oZXJpdGFibGUiLCAmZmQsICZpbmhlcml0YWJsZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCisgICAgaW50IHJlc3VsdDsKICAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogCi0gICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCBOVUxMKSA8IDApCisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorICAgIHJlc3VsdCA9IF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCBOVUxMKTsKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAorICAgIGlmIChyZXN1bHQgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCiAjaWZkZWYgTVNfV0lORE9XUwotUHlEb2NfU1RSVkFSKGdldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19fLAotICAgICJnZXRfaGFuZGxlX2luaGVyaXRhYmxlKGZkKSAtPiBib29sXG4iIFwKLSAgICAiXG4iIFwKLSAgICAiR2V0IHRoZSBjbG9zZS1vbi1leGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK29zLmdldF9oYW5kbGVfaW5oZXJpdGFibGUgLT4gYm9vbAorICAgIGhhbmRsZTogUHlfaW50cHRyX3QKKyAgICAvCiAKLXN0YXRpYyBQeU9iamVjdCoKLXBvc2l4X2dldF9oYW5kbGVfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorR2V0IHRoZSBjbG9zZS1vbi1leGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorb3NfZ2V0X2hhbmRsZV9pbmhlcml0YWJsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2ludHB0cl90IGhhbmRsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ZTUzODliMGFhMDkxNmNlIGlucHV0PTVmNzc1OTQ0M2FhZTNkYzVdKi8KIHsKLSAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CiAgICAgRFdPUkQgZmxhZ3M7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiOmdldF9oYW5kbGVfaW5oZXJpdGFibGUiLCAmaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoIUdldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpaGFuZGxlLCAmZmxhZ3MpKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoZmxhZ3MgJiBIQU5ETEVfRkxBR19JTkhFUklUKTsKKyAgICByZXR1cm4gZmxhZ3MgJiBIQU5ETEVfRkxBR19JTkhFUklUOwogfQogCi1QeURvY19TVFJWQVIoc2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX18sCi0gICAgInNldF9oYW5kbGVfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKVxuIiBcCi0gICAgIlxuIiBcCi0gICAgIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZS4iKTsKIAotc3RhdGljIFB5T2JqZWN0KgotcG9zaXhfc2V0X2hhbmRsZV9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitvcy5zZXRfaGFuZGxlX2luaGVyaXRhYmxlCisgICAgaGFuZGxlOiBQeV9pbnRwdHJfdAorICAgIGluaGVyaXRhYmxlOiBib29sCisgICAgLworCitTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBoYW5kbGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zZXRfaGFuZGxlX2luaGVyaXRhYmxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfaW50cHRyX3QgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmhlcml0YWJsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iMWU2N2JmYTMyMTNkNzQ1IGlucHV0PWU2NGIyYjI3MzA0NjlkZWZdKi8KIHsKLSAgICBpbnQgaW5oZXJpdGFibGUgPSAxOwotICAgIFB5X2ludHB0cl90IGhhbmRsZTsKLSAgICBEV09SRCBmbGFnczsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOnNldF9oYW5kbGVfaW5oZXJpdGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmaW5oZXJpdGFibGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChpbmhlcml0YWJsZSkKLSAgICAgICAgZmxhZ3MgPSBIQU5ETEVfRkxBR19JTkhFUklUOwotICAgIGVsc2UKLSAgICAgICAgZmxhZ3MgPSAwOworICAgIERXT1JEIGZsYWdzID0gaW5oZXJpdGFibGUgPyBIQU5ETEVfRkxBR19JTkhFUklUIDogMDsKICAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpaGFuZGxlLCBIQU5ETEVfRkxBR19JTkhFUklULCBmbGFncykpIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KLSNlbmRpZiAgIC8qIE1TX1dJTkRPV1MgKi8KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKKyNpZm5kZWYgTVNfV0lORE9XUworUHlEb2NfU1RSVkFSKGdldF9ibG9ja2luZ19fZG9jX18sCisgICAgImdldF9ibG9ja2luZyhmZCkgLT4gYm9vbFxuIiBcCisgICAgIlxuIiBcCisgICAgIkdldCB0aGUgYmxvY2tpbmcgbW9kZSBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yOlxuIiBcCisgICAgIkZhbHNlIGlmIHRoZSBPX05PTkJMT0NLIGZsYWcgaXMgc2V0LCBUcnVlIGlmIHRoZSBmbGFnIGlzIGNsZWFyZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldF9ibG9ja2luZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkOworICAgIGludCBibG9ja2luZzsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpnZXRfYmxvY2tpbmciLCAmZmQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICisgICAgYmxvY2tpbmcgPSBfUHlfZ2V0X2Jsb2NraW5nKGZkKTsKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAorICAgIGlmIChibG9ja2luZyA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoYmxvY2tpbmcpOworfQorCitQeURvY19TVFJWQVIoc2V0X2Jsb2NraW5nX19kb2NfXywKKyAgICAic2V0X2Jsb2NraW5nKGZkLCBibG9ja2luZylcbiIgXAorICAgICJcbiIgXAorICAgICJTZXQgdGhlIGJsb2NraW5nIG1vZGUgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuXG4iIFwKKyAgICAiU2V0IHRoZSBPX05PTkJMT0NLIGZsYWcgaWYgYmxvY2tpbmcgaXMgRmFsc2UsXG4iIFwKKyAgICAiY2xlYXIgdGhlIE9fTk9OQkxPQ0sgZmxhZyBvdGhlcndpc2UuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldF9ibG9ja2luZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkLCBibG9ja2luZywgcmVzdWx0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpzZXRfYmxvY2tpbmciLCAmZmQsICZibG9ja2luZykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyAgICByZXN1bHQgPSBfUHlfc2V0X2Jsb2NraW5nKGZkLCBibG9ja2luZyk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZW5kaWYgICAvKiAhTVNfV0lORE9XUyAqLworCisKK1B5RG9jX1NUUlZBUihwb3NpeF9zY2FuZGlyX19kb2NfXywKKyJzY2FuZGlyKHBhdGg9Jy4nKSAtPiBpdGVyYXRvciBvZiBEaXJFbnRyeSBvYmplY3RzIGZvciBnaXZlbiBwYXRoIik7CisKK3N0YXRpYyBjaGFyICpmb2xsb3dfc3ltbGlua3Nfa2V5d29yZHNbXSA9IHsiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKm5hbWU7CisgICAgUHlPYmplY3QgKnBhdGg7CisgICAgUHlPYmplY3QgKnN0YXQ7CisgICAgUHlPYmplY3QgKmxzdGF0OworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0IHdpbjMyX2xzdGF0OworICAgIF9faW50NjQgd2luMzJfZmlsZV9pbmRleDsKKyAgICBpbnQgZ290X2ZpbGVfaW5kZXg7CisjZWxzZSAvKiBQT1NJWCAqLworI2lmZGVmIEhBVkVfRElSRU5UX0RfVFlQRQorICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOworI2VuZGlmCisgICAgaW5vX3QgZF9pbm87CisjZW5kaWYKK30gRGlyRW50cnk7CisKK3N0YXRpYyB2b2lkCitEaXJFbnRyeV9kZWFsbG9jKERpckVudHJ5ICplbnRyeSkKK3sKKyAgICBQeV9YREVDUkVGKGVudHJ5LT5uYW1lKTsKKyAgICBQeV9YREVDUkVGKGVudHJ5LT5wYXRoKTsKKyAgICBQeV9YREVDUkVGKGVudHJ5LT5zdGF0KTsKKyAgICBQeV9YREVDUkVGKGVudHJ5LT5sc3RhdCk7CisgICAgUHlfVFlQRShlbnRyeSktPnRwX2ZyZWUoKFB5T2JqZWN0ICopZW50cnkpOworfQorCisvKiBGb3J3YXJkIHJlZmVyZW5jZSAqLworc3RhdGljIGludAorRGlyRW50cnlfdGVzdF9tb2RlKERpckVudHJ5ICpzZWxmLCBpbnQgZm9sbG93X3N5bWxpbmtzLCB1bnNpZ25lZCBzaG9ydCBtb2RlX2JpdHMpOworCisvKiBTZXQgZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IsIDAgZm9yIEZhbHNlLCAxIGZvciBUcnVlICovCitzdGF0aWMgaW50CitEaXJFbnRyeV9pc19zeW1saW5rKERpckVudHJ5ICpzZWxmKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICByZXR1cm4gKHNlbGYtPndpbjMyX2xzdGF0LnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZMTks7CisjZWxpZiBkZWZpbmVkKEhBVkVfRElSRU5UX0RfVFlQRSkKKyAgICAvKiBQT1NJWCAqLworICAgIGlmIChzZWxmLT5kX3R5cGUgIT0gRFRfVU5LTk9XTikKKyAgICAgICAgcmV0dXJuIHNlbGYtPmRfdHlwZSA9PSBEVF9MTks7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRGlyRW50cnlfdGVzdF9tb2RlKHNlbGYsIDAsIFNfSUZMTkspOworI2Vsc2UKKyAgICAvKiBQT1NJWCB3aXRob3V0IGRfdHlwZSAqLworICAgIHJldHVybiBEaXJFbnRyeV90ZXN0X21vZGUoc2VsZiwgMCwgU19JRkxOSyk7CisjZW5kaWYKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK0RpckVudHJ5X3B5X2lzX3N5bWxpbmsoRGlyRW50cnkgKnNlbGYpCit7CisgICAgaW50IHJlc3VsdDsKKworICAgIHJlc3VsdCA9IERpckVudHJ5X2lzX3N5bWxpbmsoc2VsZik7CisgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyZXN1bHQpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorRGlyRW50cnlfZmV0Y2hfc3RhdChEaXJFbnRyeSAqc2VsZiwgaW50IGZvbGxvd19zeW1saW5rcykKK3sKKyAgICBpbnQgcmVzdWx0OworICAgIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3Qgc3Q7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgd2NoYXJfdCAqcGF0aDsKKworICAgIHBhdGggPSBQeVVuaWNvZGVfQXNVbmljb2RlKHNlbGYtPnBhdGgpOworICAgIGlmICghcGF0aCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZm9sbG93X3N5bWxpbmtzKQorICAgICAgICByZXN1bHQgPSB3aW4zMl9zdGF0X3cocGF0aCwgJnN0KTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IHdpbjMyX2xzdGF0X3cocGF0aCwgJnN0KTsKKworICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGYtPnBhdGgpOworICAgIH0KKyNlbHNlIC8qIFBPU0lYICovCisgICAgUHlPYmplY3QgKmJ5dGVzOworICAgIGNoYXIgKnBhdGg7CisKKyAgICBpZiAoIVB5VW5pY29kZV9GU0NvbnZlcnRlcihzZWxmLT5wYXRoLCAmYnl0ZXMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwYXRoID0gUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpOworCisgICAgaWYgKGZvbGxvd19zeW1saW5rcykKKyAgICAgICAgcmVzdWx0ID0gU1RBVChwYXRoLCAmc3QpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gTFNUQVQocGF0aCwgJnN0KTsKKyAgICBQeV9ERUNSRUYoYnl0ZXMpOworCisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHNlbGYtPnBhdGgpOworI2VuZGlmCisKKyAgICByZXR1cm4gX3B5c3RhdF9mcm9tc3RydWN0c3RhdCgmc3QpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorRGlyRW50cnlfZ2V0X2xzdGF0KERpckVudHJ5ICpzZWxmKQoreworICAgIGlmICghc2VsZi0+bHN0YXQpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIHNlbGYtPmxzdGF0ID0gX3B5c3RhdF9mcm9tc3RydWN0c3RhdCgmc2VsZi0+d2luMzJfbHN0YXQpOworI2Vsc2UgLyogUE9TSVggKi8KKyAgICAgICAgc2VsZi0+bHN0YXQgPSBEaXJFbnRyeV9mZXRjaF9zdGF0KHNlbGYsIDApOworI2VuZGlmCisgICAgfQorICAgIFB5X1hJTkNSRUYoc2VsZi0+bHN0YXQpOworICAgIHJldHVybiBzZWxmLT5sc3RhdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK0RpckVudHJ5X2dldF9zdGF0KERpckVudHJ5ICpzZWxmLCBpbnQgZm9sbG93X3N5bWxpbmtzKQoreworICAgIGlmICghZm9sbG93X3N5bWxpbmtzKQorICAgICAgICByZXR1cm4gRGlyRW50cnlfZ2V0X2xzdGF0KHNlbGYpOworCisgICAgaWYgKCFzZWxmLT5zdGF0KSB7CisgICAgICAgIGludCByZXN1bHQgPSBEaXJFbnRyeV9pc19zeW1saW5rKHNlbGYpOworICAgICAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGVsc2UgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYtPnN0YXQgPSBEaXJFbnRyeV9mZXRjaF9zdGF0KHNlbGYsIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWxmLT5zdGF0ID0gRGlyRW50cnlfZ2V0X2xzdGF0KHNlbGYpOworICAgIH0KKworICAgIFB5X1hJTkNSRUYoc2VsZi0+c3RhdCk7CisgICAgcmV0dXJuIHNlbGYtPnN0YXQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitEaXJFbnRyeV9zdGF0KERpckVudHJ5ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInwkcDpEaXJFbnRyeS5zdGF0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfc3ltbGlua3Nfa2V5d29yZHMsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBEaXJFbnRyeV9nZXRfc3RhdChzZWxmLCBmb2xsb3dfc3ltbGlua3MpOworfQorCisvKiBTZXQgZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IsIDAgZm9yIEZhbHNlLCAxIGZvciBUcnVlICovCitzdGF0aWMgaW50CitEaXJFbnRyeV90ZXN0X21vZGUoRGlyRW50cnkgKnNlbGYsIGludCBmb2xsb3dfc3ltbGlua3MsIHVuc2lnbmVkIHNob3J0IG1vZGVfYml0cykKK3sKKyAgICBQeU9iamVjdCAqc3RhdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN0X21vZGUgPSBOVUxMOworICAgIGxvbmcgbW9kZTsKKyAgICBpbnQgcmVzdWx0OworI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChIQVZFX0RJUkVOVF9EX1RZUEUpCisgICAgaW50IGlzX3N5bWxpbms7CisgICAgaW50IG5lZWRfc3RhdDsKKyNlbmRpZgorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICB1bnNpZ25lZCBsb25nIGRpcl9iaXRzOworI2VuZGlmCisgICAgX1B5X0lERU5USUZJRVIoc3RfbW9kZSk7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaXNfc3ltbGluayA9IChzZWxmLT53aW4zMl9sc3RhdC5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGTE5LOworICAgIG5lZWRfc3RhdCA9IGZvbGxvd19zeW1saW5rcyAmJiBpc19zeW1saW5rOworI2VsaWYgZGVmaW5lZChIQVZFX0RJUkVOVF9EX1RZUEUpCisgICAgaXNfc3ltbGluayA9IHNlbGYtPmRfdHlwZSA9PSBEVF9MTks7CisgICAgbmVlZF9zdGF0ID0gc2VsZi0+ZF90eXBlID09IERUX1VOS05PV04gfHwgKGZvbGxvd19zeW1saW5rcyAmJiBpc19zeW1saW5rKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKEhBVkVfRElSRU5UX0RfVFlQRSkKKyAgICBpZiAobmVlZF9zdGF0KSB7CisjZW5kaWYKKyAgICAgICAgc3RhdCA9IERpckVudHJ5X2dldF9zdGF0KHNlbGYsIGZvbGxvd19zeW1saW5rcyk7CisgICAgICAgIGlmICghc3RhdCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfRmlsZU5vdEZvdW5kRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgLyogSWYgZmlsZSBkb2Vzbid0IGV4aXN0IChhbnltb3JlKSwgdGhlbiByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAoaS5lLiwgc2F5IGl0J3Mgbm90IGEgZmlsZS9kaXJlY3RvcnkpICovCisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc3RfbW9kZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoc3RhdCwgJlB5SWRfc3RfbW9kZSk7CisgICAgICAgIGlmICghc3RfbW9kZSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgbW9kZSA9IFB5TG9uZ19Bc0xvbmcoc3RfbW9kZSk7CisgICAgICAgIGlmIChtb2RlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeV9DTEVBUihzdF9tb2RlKTsKKyAgICAgICAgUHlfQ0xFQVIoc3RhdCk7CisgICAgICAgIHJlc3VsdCA9IChtb2RlICYgU19JRk1UKSA9PSBtb2RlX2JpdHM7CisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKEhBVkVfRElSRU5UX0RfVFlQRSkKKyAgICB9CisgICAgZWxzZSBpZiAoaXNfc3ltbGluaykgeworICAgICAgICBhc3NlcnQobW9kZV9iaXRzICE9IFNfSUZMTkspOworICAgICAgICByZXN1bHQgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KG1vZGVfYml0cyA9PSBTX0lGRElSIHx8IG1vZGVfYml0cyA9PSBTX0lGUkVHKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGRpcl9iaXRzID0gc2VsZi0+d2luMzJfbHN0YXQuc3RfZmlsZV9hdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZOworICAgICAgICBpZiAobW9kZV9iaXRzID09IFNfSUZESVIpCisgICAgICAgICAgICByZXN1bHQgPSBkaXJfYml0cyAhPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBkaXJfYml0cyA9PSAwOworI2Vsc2UgLyogUE9TSVggKi8KKyAgICAgICAgaWYgKG1vZGVfYml0cyA9PSBTX0lGRElSKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi0+ZF90eXBlID09IERUX0RJUjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi0+ZF90eXBlID09IERUX1JFRzsKKyNlbmRpZgorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihzdF9tb2RlKTsKKyAgICBQeV9YREVDUkVGKHN0YXQpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK0RpckVudHJ5X3B5X3Rlc3RfbW9kZShEaXJFbnRyeSAqc2VsZiwgaW50IGZvbGxvd19zeW1saW5rcywgdW5zaWduZWQgc2hvcnQgbW9kZV9iaXRzKQoreworICAgIGludCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBEaXJFbnRyeV90ZXN0X21vZGUoc2VsZiwgZm9sbG93X3N5bWxpbmtzLCBtb2RlX2JpdHMpOworICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK0RpckVudHJ5X2lzX2RpcihEaXJFbnRyeSAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8JHA6RGlyRW50cnkuaXNfZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfc3ltbGlua3Nfa2V5d29yZHMsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBEaXJFbnRyeV9weV90ZXN0X21vZGUoc2VsZiwgZm9sbG93X3N5bWxpbmtzLCBTX0lGRElSKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK0RpckVudHJ5X2lzX2ZpbGUoRGlyRW50cnkgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifCRwOkRpckVudHJ5LmlzX2ZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd19zeW1saW5rc19rZXl3b3JkcywgJmZvbGxvd19zeW1saW5rcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIERpckVudHJ5X3B5X3Rlc3RfbW9kZShzZWxmLCBmb2xsb3dfc3ltbGlua3MsIFNfSUZSRUcpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorRGlyRW50cnlfaW5vZGUoRGlyRW50cnkgKnNlbGYpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmICghc2VsZi0+Z290X2ZpbGVfaW5kZXgpIHsKKyAgICAgICAgd2NoYXJfdCAqcGF0aDsKKyAgICAgICAgc3RydWN0IF9QeV9zdGF0X3N0cnVjdCBzdGF0OworCisgICAgICAgIHBhdGggPSBQeVVuaWNvZGVfQXNVbmljb2RlKHNlbGYtPnBhdGgpOworICAgICAgICBpZiAoIXBhdGgpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBpZiAod2luMzJfbHN0YXRfdyhwYXRoLCAmc3RhdCkgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2VsZi0+cGF0aCk7CisgICAgICAgIH0KKworICAgICAgICBzZWxmLT53aW4zMl9maWxlX2luZGV4ID0gc3RhdC5zdF9pbm87CisgICAgICAgIHNlbGYtPmdvdF9maWxlX2luZGV4ID0gMTsKKyAgICB9CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORylzZWxmLT53aW4zMl9maWxlX2luZGV4KTsKKyNlbHNlIC8qIFBPU0lYICovCisjaWZkZWYgSEFWRV9MQVJHRUZJTEVfU1VQUE9SVAorICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpc2VsZi0+ZF9pbm8pOworI2Vsc2UKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKXNlbGYtPmRfaW5vKTsKKyNlbmRpZgorI2VuZGlmCit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitEaXJFbnRyeV9yZXByKERpckVudHJ5ICpzZWxmKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPERpckVudHJ5ICVSPiIsIHNlbGYtPm5hbWUpOworfQorCitzdGF0aWMgUHlNZW1iZXJEZWYgRGlyRW50cnlfbWVtYmVyc1tdID0geworICAgIHsibmFtZSIsIFRfT0JKRUNUX0VYLCBvZmZzZXRvZihEaXJFbnRyeSwgbmFtZSksIFJFQURPTkxZLAorICAgICAidGhlIGVudHJ5J3MgYmFzZSBmaWxlbmFtZSwgcmVsYXRpdmUgdG8gc2NhbmRpcigpIFwicGF0aFwiIGFyZ3VtZW50In0sCisgICAgeyJwYXRoIiwgVF9PQkpFQ1RfRVgsIG9mZnNldG9mKERpckVudHJ5LCBwYXRoKSwgUkVBRE9OTFksCisgICAgICJ0aGUgZW50cnkncyBmdWxsIHBhdGggbmFtZTsgZXF1aXZhbGVudCB0byBvcy5wYXRoLmpvaW4oc2NhbmRpcl9wYXRoLCBlbnRyeS5uYW1lKSJ9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIERpckVudHJ5X21ldGhvZHNbXSA9IHsKKyAgICB7ImlzX2RpciIsIChQeUNGdW5jdGlvbilEaXJFbnRyeV9pc19kaXIsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCisgICAgICJyZXR1cm4gVHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSBkaXJlY3Rvcnk7IGNhY2hlZCBwZXIgZW50cnkiCisgICAgfSwKKyAgICB7ImlzX2ZpbGUiLCAoUHlDRnVuY3Rpb24pRGlyRW50cnlfaXNfZmlsZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKKyAgICAgInJldHVybiBUcnVlIGlmIHRoZSBlbnRyeSBpcyBhIGZpbGU7IGNhY2hlZCBwZXIgZW50cnkiCisgICAgfSwKKyAgICB7ImlzX3N5bWxpbmsiLCAoUHlDRnVuY3Rpb24pRGlyRW50cnlfcHlfaXNfc3ltbGluaywgTUVUSF9OT0FSR1MsCisgICAgICJyZXR1cm4gVHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSBzeW1ib2xpYyBsaW5rOyBjYWNoZWQgcGVyIGVudHJ5IgorICAgIH0sCisgICAgeyJzdGF0IiwgKFB5Q0Z1bmN0aW9uKURpckVudHJ5X3N0YXQsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCisgICAgICJyZXR1cm4gc3RhdF9yZXN1bHQgb2JqZWN0IGZvciB0aGUgZW50cnk7IGNhY2hlZCBwZXIgZW50cnkiCisgICAgfSwKKyAgICB7Imlub2RlIiwgKFB5Q0Z1bmN0aW9uKURpckVudHJ5X2lub2RlLCBNRVRIX05PQVJHUywKKyAgICAgInJldHVybiBpbm9kZSBvZiB0aGUgZW50cnk7IGNhY2hlZCBwZXIgZW50cnkiLAorICAgIH0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IERpckVudHJ5VHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICBNT0ROQU1FICIuRGlyRW50cnkiLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihEaXJFbnRyeSksICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpRGlyRW50cnlfZGVhbGxvYywgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAocmVwcmZ1bmMpRGlyRW50cnlfcmVwciwgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIERpckVudHJ5X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgRGlyRW50cnlfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KK307CisKKyNpZmRlZiBNU19XSU5ET1dTCisKK3N0YXRpYyB3Y2hhcl90ICoKK2pvaW5fcGF0aF9maWxlbmFtZVcod2NoYXJfdCAqcGF0aF93aWRlLCB3Y2hhcl90KiBmaWxlbmFtZSkKK3sKKyAgICBQeV9zc2l6ZV90IHBhdGhfbGVuOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICB3Y2hhcl90ICpyZXN1bHQ7CisgICAgd2NoYXJfdCBjaDsKKworICAgIGlmICghcGF0aF93aWRlKSB7IC8qIERlZmF1bHQgYXJnOiAiLiIgKi8KKyAgICAgICAgcGF0aF93aWRlID0gTCIuIjsKKyAgICAgICAgcGF0aF9sZW4gPSAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcGF0aF9sZW4gPSB3Y3NsZW4ocGF0aF93aWRlKTsKKyAgICB9CisKKyAgICAvKiBUaGUgKzEncyBhcmUgZm9yIHRoZSBwYXRoIHNlcGFyYXRvciBhbmQgdGhlIE5VTCAqLworICAgIHNpemUgPSBwYXRoX2xlbiArIDEgKyB3Y3NsZW4oZmlsZW5hbWUpICsgMTsKKyAgICByZXN1bHQgPSBQeU1lbV9OZXcod2NoYXJfdCwgc2l6ZSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHdjc2NweShyZXN1bHQsIHBhdGhfd2lkZSk7CisgICAgaWYgKHBhdGhfbGVuID4gMCkgeworICAgICAgICBjaCA9IHJlc3VsdFtwYXRoX2xlbiAtIDFdOworICAgICAgICBpZiAoY2ggIT0gU0VQICYmIGNoICE9IEFMVFNFUCAmJiBjaCAhPSBMJzonKQorICAgICAgICAgICAgcmVzdWx0W3BhdGhfbGVuKytdID0gU0VQOworICAgICAgICB3Y3NjcHkocmVzdWx0ICsgcGF0aF9sZW4sIGZpbGVuYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK0RpckVudHJ5X2Zyb21fZmluZF9kYXRhKHBhdGhfdCAqcGF0aCwgV0lOMzJfRklORF9EQVRBVyAqZGF0YVcpCit7CisgICAgRGlyRW50cnkgKmVudHJ5OworICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIGZpbGVfaW5mbzsKKyAgICBVTE9ORyByZXBhcnNlX3RhZzsKKyAgICB3Y2hhcl90ICpqb2luZWRfcGF0aDsKKworICAgIGVudHJ5ID0gUHlPYmplY3RfTmV3KERpckVudHJ5LCAmRGlyRW50cnlUeXBlKTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBlbnRyeS0+bmFtZSA9IE5VTEw7CisgICAgZW50cnktPnBhdGggPSBOVUxMOworICAgIGVudHJ5LT5zdGF0ID0gTlVMTDsKKyAgICBlbnRyeS0+bHN0YXQgPSBOVUxMOworICAgIGVudHJ5LT5nb3RfZmlsZV9pbmRleCA9IDA7CisKKyAgICBlbnRyeS0+bmFtZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoZGF0YVctPmNGaWxlTmFtZSwgLTEpOworICAgIGlmICghZW50cnktPm5hbWUpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBqb2luZWRfcGF0aCA9IGpvaW5fcGF0aF9maWxlbmFtZVcocGF0aC0+d2lkZSwgZGF0YVctPmNGaWxlTmFtZSk7CisgICAgaWYgKCFqb2luZWRfcGF0aCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGVudHJ5LT5wYXRoID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihqb2luZWRfcGF0aCwgLTEpOworICAgIFB5TWVtX0ZyZWUoam9pbmVkX3BhdGgpOworICAgIGlmICghZW50cnktPnBhdGgpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBmaW5kX2RhdGFfdG9fZmlsZV9pbmZvX3coZGF0YVcsICZmaWxlX2luZm8sICZyZXBhcnNlX3RhZyk7CisgICAgX1B5X2F0dHJpYnV0ZV9kYXRhX3RvX3N0YXQoJmZpbGVfaW5mbywgcmVwYXJzZV90YWcsICZlbnRyeS0+d2luMzJfbHN0YXQpOworCisgICAgcmV0dXJuIChQeU9iamVjdCAqKWVudHJ5OworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYoZW50cnkpOworICAgIHJldHVybiBOVUxMOworfQorCisjZWxzZSAvKiBQT1NJWCAqLworCitzdGF0aWMgY2hhciAqCitqb2luX3BhdGhfZmlsZW5hbWUoY2hhciAqcGF0aF9uYXJyb3csIGNoYXIqIGZpbGVuYW1lLCBQeV9zc2l6ZV90IGZpbGVuYW1lX2xlbikKK3sKKyAgICBQeV9zc2l6ZV90IHBhdGhfbGVuOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpyZXN1bHQ7CisKKyAgICBpZiAoIXBhdGhfbmFycm93KSB7IC8qIERlZmF1bHQgYXJnOiAiLiIgKi8KKyAgICAgICAgcGF0aF9uYXJyb3cgPSAiLiI7CisgICAgICAgIHBhdGhfbGVuID0gMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHBhdGhfbGVuID0gc3RybGVuKHBhdGhfbmFycm93KTsKKyAgICB9CisKKyAgICBpZiAoZmlsZW5hbWVfbGVuID09IC0xKQorICAgICAgICBmaWxlbmFtZV9sZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworCisgICAgLyogVGhlICsxJ3MgYXJlIGZvciB0aGUgcGF0aCBzZXBhcmF0b3IgYW5kIHRoZSBOVUwgKi8KKyAgICBzaXplID0gcGF0aF9sZW4gKyAxICsgZmlsZW5hbWVfbGVuICsgMTsKKyAgICByZXN1bHQgPSBQeU1lbV9OZXcoY2hhciwgc2l6ZSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN0cmNweShyZXN1bHQsIHBhdGhfbmFycm93KTsKKyAgICBpZiAocGF0aF9sZW4gPiAwICYmIHJlc3VsdFtwYXRoX2xlbiAtIDFdICE9ICcvJykKKyAgICAgICAgcmVzdWx0W3BhdGhfbGVuKytdID0gJy8nOworICAgIHN0cmNweShyZXN1bHQgKyBwYXRoX2xlbiwgZmlsZW5hbWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitEaXJFbnRyeV9mcm9tX3Bvc2l4X2luZm8ocGF0aF90ICpwYXRoLCBjaGFyICpuYW1lLCBQeV9zc2l6ZV90IG5hbWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlub190IGRfaW5vCisjaWZkZWYgSEFWRV9ESVJFTlRfRF9UWVBFCisgICAgICAgICAgICAgICAgICAgICAgICAgLCB1bnNpZ25lZCBjaGFyIGRfdHlwZQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgKQoreworICAgIERpckVudHJ5ICplbnRyeTsKKyAgICBjaGFyICpqb2luZWRfcGF0aDsKKworICAgIGVudHJ5ID0gUHlPYmplY3RfTmV3KERpckVudHJ5LCAmRGlyRW50cnlUeXBlKTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBlbnRyeS0+bmFtZSA9IE5VTEw7CisgICAgZW50cnktPnBhdGggPSBOVUxMOworICAgIGVudHJ5LT5zdGF0ID0gTlVMTDsKKyAgICBlbnRyeS0+bHN0YXQgPSBOVUxMOworCisgICAgam9pbmVkX3BhdGggPSBqb2luX3BhdGhfZmlsZW5hbWUocGF0aC0+bmFycm93LCBuYW1lLCBuYW1lX2xlbik7CisgICAgaWYgKCFqb2luZWRfcGF0aCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmICghcGF0aC0+bmFycm93IHx8ICFQeUJ5dGVzX0NoZWNrKHBhdGgtPm9iamVjdCkpIHsKKyAgICAgICAgZW50cnktPm5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZShuYW1lLCBuYW1lX2xlbik7CisgICAgICAgIGVudHJ5LT5wYXRoID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChqb2luZWRfcGF0aCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBlbnRyeS0+bmFtZSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUobmFtZSwgbmFtZV9sZW4pOworICAgICAgICBlbnRyeS0+cGF0aCA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhqb2luZWRfcGF0aCk7CisgICAgfQorICAgIFB5TWVtX0ZyZWUoam9pbmVkX3BhdGgpOworICAgIGlmICghZW50cnktPm5hbWUgfHwgIWVudHJ5LT5wYXRoKQorICAgICAgICBnb3RvIGVycm9yOworCisjaWZkZWYgSEFWRV9ESVJFTlRfRF9UWVBFCisgICAgZW50cnktPmRfdHlwZSA9IGRfdHlwZTsKKyNlbmRpZgorICAgIGVudHJ5LT5kX2lubyA9IGRfaW5vOworCisgICAgcmV0dXJuIChQeU9iamVjdCAqKWVudHJ5OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKGVudHJ5KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBwYXRoX3QgcGF0aDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBXSU4zMl9GSU5EX0RBVEFXIGZpbGVfZGF0YTsKKyAgICBpbnQgZmlyc3RfdGltZTsKKyNlbHNlIC8qIFBPU0lYICovCisgICAgRElSICpkaXJwOworI2VuZGlmCit9IFNjYW5kaXJJdGVyYXRvcjsKKworI2lmZGVmIE1TX1dJTkRPV1MKKworc3RhdGljIHZvaWQKK1NjYW5kaXJJdGVyYXRvcl9jbG9zZShTY2FuZGlySXRlcmF0b3IgKml0ZXJhdG9yKQoreworICAgIEhBTkRMRSBoYW5kbGUgPSBpdGVyYXRvci0+aGFuZGxlOworCisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXRlcmF0b3ItPmhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBGaW5kQ2xvc2UoaGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworfQorCitzdGF0aWMgUHlPYmplY3QgKgorU2NhbmRpckl0ZXJhdG9yX2l0ZXJuZXh0KFNjYW5kaXJJdGVyYXRvciAqaXRlcmF0b3IpCit7CisgICAgV0lOMzJfRklORF9EQVRBVyAqZmlsZV9kYXRhID0gJml0ZXJhdG9yLT5maWxlX2RhdGE7CisgICAgQk9PTCBzdWNjZXNzOworICAgIFB5T2JqZWN0ICplbnRyeTsKKworICAgIC8qIEhhcHBlbnMgaWYgdGhlIGl0ZXJhdG9yIGlzIGl0ZXJhdGVkIHR3aWNlICovCisgICAgaWYgKGl0ZXJhdG9yLT5oYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCFpdGVyYXRvci0+Zmlyc3RfdGltZSkgeworICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgc3VjY2VzcyA9IEZpbmROZXh0RmlsZVcoaXRlcmF0b3ItPmhhbmRsZSwgZmlsZV9kYXRhKTsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAvKiBFcnJvciBvciBubyBtb3JlIGZpbGVzICovCisgICAgICAgICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpCisgICAgICAgICAgICAgICAgICAgIHBhdGhfZXJyb3IoJml0ZXJhdG9yLT5wYXRoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpdGVyYXRvci0+Zmlyc3RfdGltZSA9IDA7CisKKyAgICAgICAgLyogU2tpcCBvdmVyIC4gYW5kIC4uICovCisgICAgICAgIGlmICh3Y3NjbXAoZmlsZV9kYXRhLT5jRmlsZU5hbWUsIEwiLiIpICE9IDAgJiYKKyAgICAgICAgICAgIHdjc2NtcChmaWxlX2RhdGEtPmNGaWxlTmFtZSwgTCIuLiIpICE9IDApIHsKKyAgICAgICAgICAgIGVudHJ5ID0gRGlyRW50cnlfZnJvbV9maW5kX2RhdGEoJml0ZXJhdG9yLT5wYXRoLCBmaWxlX2RhdGEpOworICAgICAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIExvb3AgdGlsbCB3ZSBnZXQgYSBub24tZG90IGRpcmVjdG9yeSBvciBmaW5pc2ggaXRlcmF0aW5nICovCisgICAgfQorCisgICAgLyogRXJyb3Igb3Igbm8gbW9yZSBmaWxlcyAqLworICAgIFNjYW5kaXJJdGVyYXRvcl9jbG9zZShpdGVyYXRvcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKyNlbHNlIC8qIFBPU0lYICovCisKK3N0YXRpYyB2b2lkCitTY2FuZGlySXRlcmF0b3JfY2xvc2UoU2NhbmRpckl0ZXJhdG9yICppdGVyYXRvcikKK3sKKyAgICBESVIgKmRpcnAgPSBpdGVyYXRvci0+ZGlycDsKKworICAgIGlmICghZGlycCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXRlcmF0b3ItPmRpcnAgPSBOVUxMOworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBjbG9zZWRpcihkaXJwKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIHJldHVybjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1NjYW5kaXJJdGVyYXRvcl9pdGVybmV4dChTY2FuZGlySXRlcmF0b3IgKml0ZXJhdG9yKQoreworICAgIHN0cnVjdCBkaXJlbnQgKmRpcmVudHA7CisgICAgUHlfc3NpemVfdCBuYW1lX2xlbjsKKyAgICBpbnQgaXNfZG90OworICAgIFB5T2JqZWN0ICplbnRyeTsKKworICAgIC8qIEhhcHBlbnMgaWYgdGhlIGl0ZXJhdG9yIGlzIGl0ZXJhdGVkIHR3aWNlICovCisgICAgaWYgKCFpdGVyYXRvci0+ZGlycCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZGlyZW50cCA9IHJlYWRkaXIoaXRlcmF0b3ItPmRpcnApOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmICghZGlyZW50cCkgeworICAgICAgICAgICAgLyogRXJyb3Igb3Igbm8gbW9yZSBmaWxlcyAqLworICAgICAgICAgICAgaWYgKGVycm5vICE9IDApCisgICAgICAgICAgICAgICAgcGF0aF9lcnJvcigmaXRlcmF0b3ItPnBhdGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBTa2lwIG92ZXIgLiBhbmQgLi4gKi8KKyAgICAgICAgbmFtZV9sZW4gPSBOQU1MRU4oZGlyZW50cCk7CisgICAgICAgIGlzX2RvdCA9IGRpcmVudHAtPmRfbmFtZVswXSA9PSAnLicgJiYKKyAgICAgICAgICAgICAgICAgKG5hbWVfbGVuID09IDEgfHwgKGRpcmVudHAtPmRfbmFtZVsxXSA9PSAnLicgJiYgbmFtZV9sZW4gPT0gMikpOworICAgICAgICBpZiAoIWlzX2RvdCkgeworICAgICAgICAgICAgZW50cnkgPSBEaXJFbnRyeV9mcm9tX3Bvc2l4X2luZm8oJml0ZXJhdG9yLT5wYXRoLCBkaXJlbnRwLT5kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuLCBkaXJlbnRwLT5kX2lubworI2lmZGVmIEhBVkVfRElSRU5UX0RfVFlQRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGRpcmVudHAtPmRfdHlwZQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICB9CisKKyAgICAgICAgLyogTG9vcCB0aWxsIHdlIGdldCBhIG5vbi1kb3QgZGlyZWN0b3J5IG9yIGZpbmlzaCBpdGVyYXRpbmcgKi8KKyAgICB9CisKKyAgICAvKiBFcnJvciBvciBubyBtb3JlIGZpbGVzICovCisgICAgU2NhbmRpckl0ZXJhdG9yX2Nsb3NlKGl0ZXJhdG9yKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2b2lkCitTY2FuZGlySXRlcmF0b3JfZGVhbGxvYyhTY2FuZGlySXRlcmF0b3IgKml0ZXJhdG9yKQoreworICAgIFNjYW5kaXJJdGVyYXRvcl9jbG9zZShpdGVyYXRvcik7CisgICAgUHlfWERFQ1JFRihpdGVyYXRvci0+cGF0aC5vYmplY3QpOworICAgIHBhdGhfY2xlYW51cCgmaXRlcmF0b3ItPnBhdGgpOworICAgIFB5X1RZUEUoaXRlcmF0b3IpLT50cF9mcmVlKChQeU9iamVjdCAqKWl0ZXJhdG9yKTsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCBTY2FuZGlySXRlcmF0b3JUeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgIE1PRE5BTUUgIi5TY2FuZGlySXRlcmF0b3IiLCAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgc2l6ZW9mKFNjYW5kaXJJdGVyYXRvciksICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3RvcilTY2FuZGlySXRlcmF0b3JfZGVhbGxvYywgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIFB5T2JqZWN0X1NlbGZJdGVyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgKGl0ZXJuZXh0ZnVuYylTY2FuZGlySXRlcmF0b3JfaXRlcm5leHQsIC8qIHRwX2l0ZXJuZXh0ICovCit9OworCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfc2NhbmRpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgU2NhbmRpckl0ZXJhdG9yICppdGVyYXRvcjsKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICB3Y2hhcl90ICpwYXRoX3N0clc7CisjZWxzZQorICAgIGNoYXIgKnBhdGg7CisjZW5kaWYKKworICAgIGl0ZXJhdG9yID0gUHlPYmplY3RfTmV3KFNjYW5kaXJJdGVyYXRvciwgJlNjYW5kaXJJdGVyYXRvclR5cGUpOworICAgIGlmICghaXRlcmF0b3IpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1lbXNldCgmaXRlcmF0b3ItPnBhdGgsIDAsIHNpemVvZihwYXRoX3QpKTsKKyAgICBpdGVyYXRvci0+cGF0aC5mdW5jdGlvbl9uYW1lID0gInNjYW5kaXIiOworICAgIGl0ZXJhdG9yLT5wYXRoLm51bGxhYmxlID0gMTsKKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpdGVyYXRvci0+aGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisjZWxzZQorICAgIGl0ZXJhdG9yLT5kaXJwID0gTlVMTDsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mOnNjYW5kaXIiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJml0ZXJhdG9yLT5wYXRoKSkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIC8qIHBhdGhfY29udmVydGVyIGRvZXNuJ3Qga2VlcCBwYXRoLm9iamVjdCBhcm91bmQsIHNvIGRvIGl0CisgICAgICAgbWFudWFsbHkgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgaXRlcmF0b3IgaGVyZSAodGhlIHJlZmNvdW50CisgICAgICAgaXMgZGVjcmVtZW50ZWQgaW4gU2NhbmRpckl0ZXJhdG9yX2RlYWxsb2MpCisgICAgKi8KKyAgICBQeV9YSU5DUkVGKGl0ZXJhdG9yLT5wYXRoLm9iamVjdCk7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKGl0ZXJhdG9yLT5wYXRoLm5hcnJvdykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9zLnNjYW5kaXIoKSBkb2Vzbid0IHN1cHBvcnQgYnl0ZXMgcGF0aCBvbiBXaW5kb3dzLCB1c2UgVW5pY29kZSBpbnN0ZWFkIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGl0ZXJhdG9yLT5maXJzdF90aW1lID0gMTsKKworICAgIHBhdGhfc3RyVyA9IGpvaW5fcGF0aF9maWxlbmFtZVcoaXRlcmF0b3ItPnBhdGgud2lkZSwgTCIqLioiKTsKKyAgICBpZiAoIXBhdGhfc3RyVykKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBpdGVyYXRvci0+aGFuZGxlID0gRmluZEZpcnN0RmlsZVcocGF0aF9zdHJXLCAmaXRlcmF0b3ItPmZpbGVfZGF0YSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIFB5TWVtX0ZyZWUocGF0aF9zdHJXKTsKKworICAgIGlmIChpdGVyYXRvci0+aGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJml0ZXJhdG9yLT5wYXRoKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisjZWxzZSAvKiBQT1NJWCAqLworICAgIGlmIChpdGVyYXRvci0+cGF0aC5uYXJyb3cpCisgICAgICAgIHBhdGggPSBpdGVyYXRvci0+cGF0aC5uYXJyb3c7CisgICAgZWxzZQorICAgICAgICBwYXRoID0gIi4iOworCisgICAgZXJybm8gPSAwOworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBpdGVyYXRvci0+ZGlycCA9IG9wZW5kaXIocGF0aCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghaXRlcmF0b3ItPmRpcnApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmaXRlcmF0b3ItPnBhdGgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0ZXJhdG9yOworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYoaXRlcmF0b3IpOworICAgIHJldHVybiBOVUxMOworfQorCisKKyNpbmNsdWRlICJjbGluaWMvcG9zaXhtb2R1bGUuYy5oIgogCiAvKltjbGluaWMgaW5wdXRdCiBkdW1wIGJ1ZmZlcgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwotCi0jaWZuZGVmIE9TX1RUWU5BTUVfTUVUSE9EREVGCi0gICAgI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRgotI2VuZGlmIC8qICFkZWZpbmVkKE9TX1RUWU5BTUVfTUVUSE9EREVGKSAqLwotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVkMDcxYmJjOGY0OWVhMTIgaW5wdXQ9NTI0Y2UyZTAyMWU0ZWJhNl0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NTI0Y2UyZTAyMWU0ZWJhNl0qLwogCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBwb3NpeF9tZXRob2RzW10gPSB7CkBAIC0xMTIxNSw3MSArMTIxODMsMjYgQEAKICAgICBPU19TVEFUX01FVEhPRERFRgogICAgIE9TX0FDQ0VTU19NRVRIT0RERUYKICAgICBPU19UVFlOQU1FX01FVEhPRERFRgotCi0gICAgeyJjaGRpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfY2hkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfY2hkaXJfX2RvY19ffSwKLSNpZmRlZiBIQVZFX0NIRkxBR1MKLSAgICB7ImNoZmxhZ3MiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9jaGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X2NoZmxhZ3NfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0NIRkxBR1MgKi8KLSAgICB7ImNobW9kIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9jaG1vZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9jaG1vZF9fZG9jX199LAotI2lmZGVmIEhBVkVfRkNITU9ECi0gICAgeyJmY2htb2QiLCAgICAgICAgICBwb3NpeF9mY2htb2QsIE1FVEhfVkFSQVJHUywgcG9zaXhfZmNobW9kX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9GQ0hNT0QgKi8KLSNpZmRlZiBIQVZFX0NIT1dOCi0gICAgeyJjaG93biIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfY2hvd24sCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfY2hvd25fX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0NIT1dOICovCi0jaWZkZWYgSEFWRV9MQ0hNT0QKLSAgICB7ImxjaG1vZCIsICAgICAgICAgIHBvc2l4X2xjaG1vZCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9sY2htb2RfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0xDSE1PRCAqLwotI2lmZGVmIEhBVkVfRkNIT1dOCi0gICAgeyJmY2hvd24iLCAgICAgICAgICBwb3NpeF9mY2hvd24sIE1FVEhfVkFSQVJHUywgcG9zaXhfZmNob3duX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9GQ0hPV04gKi8KLSNpZmRlZiBIQVZFX0xDSEZMQUdTCi0gICAgeyJsY2hmbGFncyIsICAgICAgICBwb3NpeF9sY2hmbGFncywgTUVUSF9WQVJBUkdTLCBwb3NpeF9sY2hmbGFnc19fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfTENIRkxBR1MgKi8KLSNpZmRlZiBIQVZFX0xDSE9XTgotICAgIHsibGNob3duIiwgICAgICAgICAgcG9zaXhfbGNob3duLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2xjaG93bl9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfTENIT1dOICovCi0jaWZkZWYgSEFWRV9DSFJPT1QKLSAgICB7ImNocm9vdCIsICAgICAgICAgIHBvc2l4X2Nocm9vdCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9jaHJvb3RfX2RvY19ffSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfQ1RFUk1JRAotICAgIHsiY3Rlcm1pZCIsICAgICAgICAgcG9zaXhfY3Rlcm1pZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2N0ZXJtaWRfX2RvY19ffSwKLSNlbmRpZgotICAgIHsiZ2V0Y3dkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2dldGN3ZF91bmljb2RlLAotICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRjd2RfX2RvY19ffSwKLSAgICB7ImdldGN3ZGIiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9nZXRjd2RfYnl0ZXMsCi0gICAgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGN3ZGJfX2RvY19ffSwKLSNpZiBkZWZpbmVkKEhBVkVfTElOSykgfHwgZGVmaW5lZChNU19XSU5ET1dTKQotICAgIHsibGluayIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2xpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfbGlua19fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfTElOSyAqLwotICAgIHsibGlzdGRpciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2xpc3RkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfbGlzdGRpcl9fZG9jX199LAotICAgIHsibHN0YXQiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2xzdGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X2xzdGF0X19kb2NfX30sCi0gICAgeyJta2RpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfbWtkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfbWtkaXJfX2RvY19ffSwKLSNpZmRlZiBIQVZFX05JQ0UKLSAgICB7Im5pY2UiLCAgICAgICAgICAgIHBvc2l4X25pY2UsIE1FVEhfVkFSQVJHUywgcG9zaXhfbmljZV9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfTklDRSAqLwotI2lmZGVmIEhBVkVfR0VUUFJJT1JJVFkKLSAgICB7ImdldHByaW9yaXR5IiwgICAgIHBvc2l4X2dldHByaW9yaXR5LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2dldHByaW9yaXR5X19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9HRVRQUklPUklUWSAqLwotI2lmZGVmIEhBVkVfU0VUUFJJT1JJVFkKLSAgICB7InNldHByaW9yaXR5IiwgICAgIHBvc2l4X3NldHByaW9yaXR5LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldHByaW9yaXR5X19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9TRVRQUklPUklUWSAqLworICAgIE9TX0NIRElSX01FVEhPRERFRgorICAgIE9TX0NIRkxBR1NfTUVUSE9EREVGCisgICAgT1NfQ0hNT0RfTUVUSE9EREVGCisgICAgT1NfRkNITU9EX01FVEhPRERFRgorICAgIE9TX0xDSE1PRF9NRVRIT0RERUYKKyAgICBPU19DSE9XTl9NRVRIT0RERUYKKyAgICBPU19GQ0hPV05fTUVUSE9EREVGCisgICAgT1NfTENIT1dOX01FVEhPRERFRgorICAgIE9TX0xDSEZMQUdTX01FVEhPRERFRgorICAgIE9TX0NIUk9PVF9NRVRIT0RERUYKKyAgICBPU19DVEVSTUlEX01FVEhPRERFRgorICAgIE9TX0dFVENXRF9NRVRIT0RERUYKKyAgICBPU19HRVRDV0RCX01FVEhPRERFRgorICAgIE9TX0xJTktfTUVUSE9EREVGCisgICAgT1NfTElTVERJUl9NRVRIT0RERUYKKyAgICBPU19MU1RBVF9NRVRIT0RERUYKKyAgICBPU19NS0RJUl9NRVRIT0RERUYKKyAgICBPU19OSUNFX01FVEhPRERFRgorICAgIE9TX0dFVFBSSU9SSVRZX01FVEhPRERFRgorICAgIE9TX1NFVFBSSU9SSVRZX01FVEhPRERFRgogI2lmZGVmIEhBVkVfUkVBRExJTksKICAgICB7InJlYWRsaW5rIiwgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9yZWFkbGluaywKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCkBAIC0xMTI5MCwzNzYgKzEyMjEzLDE2MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsaW5rX19kb2NfX30sCiAjZW5kaWYgLyogIWRlZmluZWQoSEFWRV9SRUFETElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKSAqLwotICAgIHsicmVuYW1lIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3JlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9yZW5hbWVfX2RvY19ffSwKLSAgICB7InJlcGxhY2UiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9yZXBsYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3JlcGxhY2VfX2RvY19ffSwKLSAgICB7InJtZGlyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9ybWRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9ybWRpcl9fZG9jX199LAorICAgIE9TX1JFTkFNRV9NRVRIT0RERUYKKyAgICBPU19SRVBMQUNFX01FVEhPRERFRgorICAgIE9TX1JNRElSX01FVEhPRERFRgogICAgIHsic3RhdF9mbG9hdF90aW1lcyIsIHN0YXRfZmxvYXRfdGltZXMsIE1FVEhfVkFSQVJHUywgc3RhdF9mbG9hdF90aW1lc19fZG9jX199LAotI2lmIGRlZmluZWQoSEFWRV9TWU1MSU5LKQotICAgIHsic3ltbGluayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3N5bWxpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfc3ltbGlua19fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfU1lNTElOSyAqLwotI2lmZGVmIEhBVkVfU1lTVEVNCi0gICAgeyJzeXN0ZW0iLCAgICAgICAgICBwb3NpeF9zeXN0ZW0sIE1FVEhfVkFSQVJHUywgcG9zaXhfc3lzdGVtX19kb2NfX30sCi0jZW5kaWYKLSAgICB7InVtYXNrIiwgICAgICAgICAgIHBvc2l4X3VtYXNrLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3VtYXNrX19kb2NfX30sCi0jaWZkZWYgSEFWRV9VTkFNRQotICAgIHsidW5hbWUiLCAgICAgICAgICAgcG9zaXhfdW5hbWUsIE1FVEhfTk9BUkdTLCBwb3NpeF91bmFtZV9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfVU5BTUUgKi8KLSAgICB7InVubGluayIsICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF91bmxpbmssCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfdW5saW5rX19kb2NfX30sCi0gICAgeyJyZW1vdmUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfdW5saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3JlbW92ZV9fZG9jX199LAotICAgIHsidXRpbWUiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3V0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgcG9zaXhfdXRpbWVfX2RvY19ffSwKLSNpZmRlZiBIQVZFX1RJTUVTCi0gICAgeyJ0aW1lcyIsICAgICAgICAgICBwb3NpeF90aW1lcywgTUVUSF9OT0FSR1MsIHBvc2l4X3RpbWVzX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9USU1FUyAqLwotICAgIHsiX2V4aXQiLCAgICAgICAgICAgcG9zaXhfX2V4aXQsIE1FVEhfVkFSQVJHUywgcG9zaXhfX2V4aXRfX2RvY19ffSwKLSNpZmRlZiBIQVZFX0VYRUNWCi0gICAgeyJleGVjdiIsICAgICAgICAgICBwb3NpeF9leGVjdiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9leGVjdl9fZG9jX199LAotICAgIHsiZXhlY3ZlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2V4ZWN2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9leGVjdmVfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0VYRUNWICovCi0jaWZkZWYgSEFWRV9TUEFXTlYKLSAgICB7InNwYXdudiIsICAgICAgICAgIHBvc2l4X3NwYXdudiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZfX2RvY19ffSwKLSAgICB7InNwYXdudmUiLCAgICAgICAgIHBvc2l4X3NwYXdudmUsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252ZV9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfU1BBV05WICovCi0jaWZkZWYgSEFWRV9GT1JLMQotICAgIHsiZm9yazEiLCAgICAgICBwb3NpeF9mb3JrMSwgTUVUSF9OT0FSR1MsIHBvc2l4X2ZvcmsxX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9GT1JLMSAqLwotI2lmZGVmIEhBVkVfRk9SSwotICAgIHsiZm9yayIsICAgICAgICAgICAgcG9zaXhfZm9yaywgTUVUSF9OT0FSR1MsIHBvc2l4X2ZvcmtfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0ZPUksgKi8KLSNpZmRlZiBIQVZFX1NDSEVEX0gKLSNpZmRlZiBIQVZFX1NDSEVEX0dFVF9QUklPUklUWV9NQVgKLSAgICB7InNjaGVkX2dldF9wcmlvcml0eV9tYXgiLCBwb3NpeF9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NjaGVkX2dldF9wcmlvcml0eV9tYXhfX2RvY19ffSwKLSAgICB7InNjaGVkX2dldF9wcmlvcml0eV9taW4iLCBwb3NpeF9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NjaGVkX2dldF9wcmlvcml0eV9taW5fX2RvY19ffSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfU0NIRURfU0VUUEFSQU0KLSAgICB7InNjaGVkX2dldHBhcmFtIiwgcG9zaXhfc2NoZWRfZ2V0cGFyYW0sIE1FVEhfVkFSQVJHUywgcG9zaXhfc2NoZWRfZ2V0cGFyYW1fX2RvY19ffSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfU0NIRURfU0VUU0NIRURVTEVSCi0gICAgeyJzY2hlZF9nZXRzY2hlZHVsZXIiLCBwb3NpeF9zY2hlZF9nZXRzY2hlZHVsZXIsIE1FVEhfVkFSQVJHUywgcG9zaXhfc2NoZWRfZ2V0c2NoZWR1bGVyX19kb2NfX30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1NDSEVEX1JSX0dFVF9JTlRFUlZBTAotICAgIHsic2NoZWRfcnJfZ2V0X2ludGVydmFsIiwgcG9zaXhfc2NoZWRfcnJfZ2V0X2ludGVydmFsLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NjaGVkX3JyX2dldF9pbnRlcnZhbF9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9TQ0hFRF9TRVRQQVJBTQotICAgIHsic2NoZWRfc2V0cGFyYW0iLCBwb3NpeF9zY2hlZF9zZXRwYXJhbSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zY2hlZF9zZXRwYXJhbV9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIKLSAgICB7InNjaGVkX3NldHNjaGVkdWxlciIsIHBvc2l4X3NjaGVkX3NldHNjaGVkdWxlciwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zY2hlZF9zZXRzY2hlZHVsZXJfX2RvY19ffSwKLSNlbmRpZgotICAgIHsic2NoZWRfeWllbGQiLCAgICAgcG9zaXhfc2NoZWRfeWllbGQsIE1FVEhfTk9BUkdTLCBwb3NpeF9zY2hlZF95aWVsZF9fZG9jX199LAotI2lmZGVmIEhBVkVfU0NIRURfU0VUQUZGSU5JVFkKLSAgICB7InNjaGVkX3NldGFmZmluaXR5IiwgcG9zaXhfc2NoZWRfc2V0YWZmaW5pdHksIE1FVEhfVkFSQVJHUywgcG9zaXhfc2NoZWRfc2V0YWZmaW5pdHlfX2RvY19ffSwKLSAgICB7InNjaGVkX2dldGFmZmluaXR5IiwgcG9zaXhfc2NoZWRfZ2V0YWZmaW5pdHksIE1FVEhfVkFSQVJHUywgcG9zaXhfc2NoZWRfZ2V0YWZmaW5pdHlfX2RvY19ffSwKLSNlbmRpZgotI2VuZGlmIC8qIEhBVkVfU0NIRURfSCAqLwotI2lmIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkgfHwgZGVmaW5lZChIQVZFX0RFVl9QVE1YKQotICAgIHsib3BlbnB0eSIsICAgICAgICAgcG9zaXhfb3BlbnB0eSwgTUVUSF9OT0FSR1MsIHBvc2l4X29wZW5wdHlfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX09QRU5QVFkgfHwgSEFWRV9fR0VUUFRZIHx8IEhBVkVfREVWX1BUTVggKi8KLSNpZmRlZiBIQVZFX0ZPUktQVFkKLSAgICB7ImZvcmtwdHkiLCAgICAgICAgIHBvc2l4X2ZvcmtwdHksIE1FVEhfTk9BUkdTLCBwb3NpeF9mb3JrcHR5X19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9GT1JLUFRZICovCi0jaWZkZWYgSEFWRV9HRVRFR0lECi0gICAgeyJnZXRlZ2lkIiwgICAgICAgICBwb3NpeF9nZXRlZ2lkLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0ZWdpZF9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfR0VURUdJRCAqLwotI2lmZGVmIEhBVkVfR0VURVVJRAotICAgIHsiZ2V0ZXVpZCIsICAgICAgICAgcG9zaXhfZ2V0ZXVpZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGV1aWRfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0dFVEVVSUQgKi8KLSNpZmRlZiBIQVZFX0dFVEdJRAotICAgIHsiZ2V0Z2lkIiwgICAgICAgICAgcG9zaXhfZ2V0Z2lkLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0Z2lkX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9HRVRHSUQgKi8KKyAgICBPU19TWU1MSU5LX01FVEhPRERFRgorICAgIE9TX1NZU1RFTV9NRVRIT0RERUYKKyAgICBPU19VTUFTS19NRVRIT0RERUYKKyAgICBPU19VTkFNRV9NRVRIT0RERUYKKyAgICBPU19VTkxJTktfTUVUSE9EREVGCisgICAgT1NfUkVNT1ZFX01FVEhPRERFRgorICAgIE9TX1VUSU1FX01FVEhPRERFRgorICAgIE9TX1RJTUVTX01FVEhPRERFRgorICAgIE9TX19FWElUX01FVEhPRERFRgorICAgIE9TX0VYRUNWX01FVEhPRERFRgorICAgIE9TX0VYRUNWRV9NRVRIT0RERUYKKyAgICBPU19TUEFXTlZfTUVUSE9EREVGCisgICAgT1NfU1BBV05WRV9NRVRIT0RERUYKKyAgICBPU19GT1JLMV9NRVRIT0RERUYKKyAgICBPU19GT1JLX01FVEhPRERFRgorICAgIE9TX1NDSEVEX0dFVF9QUklPUklUWV9NQVhfTUVUSE9EREVGCisgICAgT1NfU0NIRURfR0VUX1BSSU9SSVRZX01JTl9NRVRIT0RERUYKKyAgICBPU19TQ0hFRF9HRVRQQVJBTV9NRVRIT0RERUYKKyAgICBPU19TQ0hFRF9HRVRTQ0hFRFVMRVJfTUVUSE9EREVGCisgICAgT1NfU0NIRURfUlJfR0VUX0lOVEVSVkFMX01FVEhPRERFRgorICAgIE9TX1NDSEVEX1NFVFBBUkFNX01FVEhPRERFRgorICAgIE9TX1NDSEVEX1NFVFNDSEVEVUxFUl9NRVRIT0RERUYKKyAgICBPU19TQ0hFRF9ZSUVMRF9NRVRIT0RERUYKKyAgICBPU19TQ0hFRF9TRVRBRkZJTklUWV9NRVRIT0RERUYKKyAgICBPU19TQ0hFRF9HRVRBRkZJTklUWV9NRVRIT0RERUYKKyAgICBPU19PUEVOUFRZX01FVEhPRERFRgorICAgIE9TX0ZPUktQVFlfTUVUSE9EREVGCisgICAgT1NfR0VURUdJRF9NRVRIT0RERUYKKyAgICBPU19HRVRFVUlEX01FVEhPRERFRgorICAgIE9TX0dFVEdJRF9NRVRIT0RERUYKICNpZmRlZiBIQVZFX0dFVEdST1VQTElTVAogICAgIHsiZ2V0Z3JvdXBsaXN0IiwgICAgcG9zaXhfZ2V0Z3JvdXBsaXN0LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2dldGdyb3VwbGlzdF9fZG9jX199LAogI2VuZGlmCi0jaWZkZWYgSEFWRV9HRVRHUk9VUFMKLSAgICB7ImdldGdyb3VwcyIsICAgICAgIHBvc2l4X2dldGdyb3VwcywgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGdyb3Vwc19fZG9jX199LAotI2VuZGlmCi0gICAgeyJnZXRwaWQiLCAgICAgICAgICBwb3NpeF9nZXRwaWQsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRwaWRfX2RvY19ffSwKLSNpZmRlZiBIQVZFX0dFVFBHUlAKLSAgICB7ImdldHBncnAiLCAgICAgICAgIHBvc2l4X2dldHBncnAsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRwZ3JwX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9HRVRQR1JQICovCi0jaWZkZWYgSEFWRV9HRVRQUElECi0gICAgeyJnZXRwcGlkIiwgICAgICAgICBwb3NpeF9nZXRwcGlkLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0cHBpZF9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfR0VUUFBJRCAqLwotI2lmZGVmIEhBVkVfR0VUVUlECi0gICAgeyJnZXR1aWQiLCAgICAgICAgICBwb3NpeF9nZXR1aWQsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXR1aWRfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0dFVFVJRCAqLwotI2lmZGVmIEhBVkVfR0VUTE9HSU4KLSAgICB7ImdldGxvZ2luIiwgICAgICAgIHBvc2l4X2dldGxvZ2luLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0bG9naW5fX2RvY19ffSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfS0lMTAotICAgIHsia2lsbCIsICAgICAgICAgICAgcG9zaXhfa2lsbCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9raWxsX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9LSUxMICovCi0jaWZkZWYgSEFWRV9LSUxMUEcKLSAgICB7ImtpbGxwZyIsICAgICAgICAgIHBvc2l4X2tpbGxwZywgTUVUSF9WQVJBUkdTLCBwb3NpeF9raWxscGdfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0tJTExQRyAqLwotI2lmZGVmIEhBVkVfUExPQ0sKLSAgICB7InBsb2NrIiwgICAgICAgICAgIHBvc2l4X3Bsb2NrLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3Bsb2NrX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9QTE9DSyAqLworICAgIE9TX0dFVEdST1VQU19NRVRIT0RERUYKKyAgICBPU19HRVRQSURfTUVUSE9EREVGCisgICAgT1NfR0VUUEdSUF9NRVRIT0RERUYKKyAgICBPU19HRVRQUElEX01FVEhPRERFRgorICAgIE9TX0dFVFVJRF9NRVRIT0RERUYKKyAgICBPU19HRVRMT0dJTl9NRVRIT0RERUYKKyAgICBPU19LSUxMX01FVEhPRERFRgorICAgIE9TX0tJTExQR19NRVRIT0RERUYKKyAgICBPU19QTE9DS19NRVRIT0RERUYKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgeyJzdGFydGZpbGUiLCAgICAgICB3aW4zMl9zdGFydGZpbGUsIE1FVEhfVkFSQVJHUywgd2luMzJfc3RhcnRmaWxlX19kb2NfX30sCi0gICAgeyJraWxsIiwgICAgd2luMzJfa2lsbCwgTUVUSF9WQVJBUkdTLCB3aW4zMl9raWxsX19kb2NfX30sCiAjZW5kaWYKLSNpZmRlZiBIQVZFX1NFVFVJRAotICAgIHsic2V0dWlkIiwgICAgICAgICAgcG9zaXhfc2V0dWlkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldHVpZF9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfU0VUVUlEICovCi0jaWZkZWYgSEFWRV9TRVRFVUlECi0gICAgeyJzZXRldWlkIiwgICAgICAgICBwb3NpeF9zZXRldWlkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldGV1aWRfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX1NFVEVVSUQgKi8KLSNpZmRlZiBIQVZFX1NFVEVHSUQKLSAgICB7InNldGVnaWQiLCAgICAgICAgIHBvc2l4X3NldGVnaWQsIE1FVEhfVkFSQVJHUywgcG9zaXhfc2V0ZWdpZF9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfU0VURUdJRCAqLwotI2lmZGVmIEhBVkVfU0VUUkVVSUQKLSAgICB7InNldHJldWlkIiwgICAgICAgIHBvc2l4X3NldHJldWlkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldHJldWlkX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9TRVRSRVVJRCAqLwotI2lmZGVmIEhBVkVfU0VUUkVHSUQKLSAgICB7InNldHJlZ2lkIiwgICAgICAgIHBvc2l4X3NldHJlZ2lkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldHJlZ2lkX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9TRVRSRUdJRCAqLwotI2lmZGVmIEhBVkVfU0VUR0lECi0gICAgeyJzZXRnaWQiLCAgICAgICAgICBwb3NpeF9zZXRnaWQsIE1FVEhfVkFSQVJHUywgcG9zaXhfc2V0Z2lkX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9TRVRHSUQgKi8KLSNpZmRlZiBIQVZFX1NFVEdST1VQUwotICAgIHsic2V0Z3JvdXBzIiwgICAgICAgcG9zaXhfc2V0Z3JvdXBzLCBNRVRIX08sIHBvc2l4X3NldGdyb3Vwc19fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfU0VUR1JPVVBTICovCisgICAgT1NfU0VUVUlEX01FVEhPRERFRgorICAgIE9TX1NFVEVVSURfTUVUSE9EREVGCisgICAgT1NfU0VUUkVVSURfTUVUSE9EREVGCisgICAgT1NfU0VUR0lEX01FVEhPRERFRgorICAgIE9TX1NFVEVHSURfTUVUSE9EREVGCisgICAgT1NfU0VUUkVHSURfTUVUSE9EREVGCisgICAgT1NfU0VUR1JPVVBTX01FVEhPRERFRgogI2lmZGVmIEhBVkVfSU5JVEdST1VQUwogICAgIHsiaW5pdGdyb3VwcyIsICAgICAgcG9zaXhfaW5pdGdyb3VwcywgTUVUSF9WQVJBUkdTLCBwb3NpeF9pbml0Z3JvdXBzX19kb2NfX30sCiAjZW5kaWYgLyogSEFWRV9JTklUR1JPVVBTICovCi0jaWZkZWYgSEFWRV9HRVRQR0lECi0gICAgeyJnZXRwZ2lkIiwgICAgICAgICBwb3NpeF9nZXRwZ2lkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2dldHBnaWRfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX0dFVFBHSUQgKi8KLSNpZmRlZiBIQVZFX1NFVFBHUlAKLSAgICB7InNldHBncnAiLCAgICAgICAgIHBvc2l4X3NldHBncnAsIE1FVEhfTk9BUkdTLCBwb3NpeF9zZXRwZ3JwX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9TRVRQR1JQICovCi0jaWZkZWYgSEFWRV9XQUlUCi0gICAgeyJ3YWl0IiwgICAgICAgICAgICBwb3NpeF93YWl0LCBNRVRIX05PQVJHUywgcG9zaXhfd2FpdF9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfV0FJVCAqLwotI2lmZGVmIEhBVkVfV0FJVDMKLSAgICB7IndhaXQzIiwgICAgICAgICAgIHBvc2l4X3dhaXQzLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3dhaXQzX19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9XQUlUMyAqLwotI2lmZGVmIEhBVkVfV0FJVDQKLSAgICB7IndhaXQ0IiwgICAgICAgICAgIHBvc2l4X3dhaXQ0LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3dhaXQ0X19kb2NfX30sCi0jZW5kaWYgLyogSEFWRV9XQUlUNCAqLwotI2lmIGRlZmluZWQoSEFWRV9XQUlUSUQpICYmICFkZWZpbmVkKF9fQVBQTEVfXykKLSAgICB7IndhaXRpZCIsICAgICAgICAgIHBvc2l4X3dhaXRpZCwgTUVUSF9WQVJBUkdTLCBwb3NpeF93YWl0aWRfX2RvY19ffSwKLSNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9XQUlUUElEKSB8fCBkZWZpbmVkKEhBVkVfQ1dBSVQpCi0gICAgeyJ3YWl0cGlkIiwgICAgICAgICBwb3NpeF93YWl0cGlkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3dhaXRwaWRfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX1dBSVRQSUQgKi8KLSNpZmRlZiBIQVZFX0dFVFNJRAotICAgIHsiZ2V0c2lkIiwgICAgICAgICAgcG9zaXhfZ2V0c2lkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2dldHNpZF9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfR0VUU0lEICovCi0jaWZkZWYgSEFWRV9TRVRTSUQKLSAgICB7InNldHNpZCIsICAgICAgICAgIHBvc2l4X3NldHNpZCwgTUVUSF9OT0FSR1MsIHBvc2l4X3NldHNpZF9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfU0VUU0lEICovCi0jaWZkZWYgSEFWRV9TRVRQR0lECi0gICAgeyJzZXRwZ2lkIiwgICAgICAgICBwb3NpeF9zZXRwZ2lkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldHBnaWRfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX1NFVFBHSUQgKi8KLSNpZmRlZiBIQVZFX1RDR0VUUEdSUAotICAgIHsidGNnZXRwZ3JwIiwgICAgICAgcG9zaXhfdGNnZXRwZ3JwLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3RjZ2V0cGdycF9fZG9jX199LAotI2VuZGlmIC8qIEhBVkVfVENHRVRQR1JQICovCi0jaWZkZWYgSEFWRV9UQ1NFVFBHUlAKLSAgICB7InRjc2V0cGdycCIsICAgICAgIHBvc2l4X3Rjc2V0cGdycCwgTUVUSF9WQVJBUkdTLCBwb3NpeF90Y3NldHBncnBfX2RvY19ffSwKLSNlbmRpZiAvKiBIQVZFX1RDU0VUUEdSUCAqLwotICAgIHsib3BlbiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X29wZW4sXAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X29wZW5fX2RvY19ffSwKLSAgICB7ImNsb3NlIiwgICAgICAgICAgIHBvc2l4X2Nsb3NlXywgTUVUSF9WQVJBUkdTLCBwb3NpeF9jbG9zZV9fZG9jX199LAotICAgIHsiY2xvc2VyYW5nZSIsICAgICAgcG9zaXhfY2xvc2VyYW5nZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9jbG9zZXJhbmdlX19kb2NfX30sCi0gICAgeyJkZXZpY2VfZW5jb2RpbmciLCBkZXZpY2VfZW5jb2RpbmcsIE1FVEhfVkFSQVJHUywgZGV2aWNlX2VuY29kaW5nX19kb2NfX30sCi0gICAgeyJkdXAiLCAgICAgICAgICAgICBwb3NpeF9kdXAsIE1FVEhfVkFSQVJHUywgcG9zaXhfZHVwX19kb2NfX30sCi0gICAgeyJkdXAyIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZHVwMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHBvc2l4X2R1cDJfX2RvY19ffSwKLSNpZmRlZiBIQVZFX0xPQ0tGCi0gICAgeyJsb2NrZiIsICAgICAgICAgICBwb3NpeF9sb2NrZiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9sb2NrZl9fZG9jX199LAotI2VuZGlmCi0gICAgeyJsc2VlayIsICAgICAgICAgICBwb3NpeF9sc2VlaywgTUVUSF9WQVJBUkdTLCBwb3NpeF9sc2Vla19fZG9jX199LAotICAgIHsicmVhZCIsICAgICAgICAgICAgcG9zaXhfcmVhZCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9yZWFkX19kb2NfX30sCi0jaWZkZWYgSEFWRV9SRUFEVgotICAgIHsicmVhZHYiLCAgICAgICAgICAgcG9zaXhfcmVhZHYsIE1FVEhfVkFSQVJHUywgcG9zaXhfcmVhZHZfX2RvY19ffSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfUFJFQUQKLSAgICB7InByZWFkIiwgICAgICAgICAgIHBvc2l4X3ByZWFkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3ByZWFkX19kb2NfX30sCi0jZW5kaWYKLSAgICB7IndyaXRlIiwgICAgICAgICAgIHBvc2l4X3dyaXRlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3dyaXRlX19kb2NfX30sCi0jaWZkZWYgSEFWRV9XUklURVYKLSAgICB7IndyaXRldiIsICAgICAgICAgIHBvc2l4X3dyaXRldiwgTUVUSF9WQVJBUkdTLCBwb3NpeF93cml0ZXZfX2RvY19ffSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfUFdSSVRFCi0gICAgeyJwd3JpdGUiLCAgICAgICAgICBwb3NpeF9wd3JpdGUsIE1FVEhfVkFSQVJHUywgcG9zaXhfcHdyaXRlX19kb2NfX30sCi0jZW5kaWYKKyAgICBPU19HRVRQR0lEX01FVEhPRERFRgorICAgIE9TX1NFVFBHUlBfTUVUSE9EREVGCisgICAgT1NfV0FJVF9NRVRIT0RERUYKKyAgICBPU19XQUlUM19NRVRIT0RERUYKKyAgICBPU19XQUlUNF9NRVRIT0RERUYKKyAgICBPU19XQUlUSURfTUVUSE9EREVGCisgICAgT1NfV0FJVFBJRF9NRVRIT0RERUYKKyAgICBPU19HRVRTSURfTUVUSE9EREVGCisgICAgT1NfU0VUU0lEX01FVEhPRERFRgorICAgIE9TX1NFVFBHSURfTUVUSE9EREVGCisgICAgT1NfVENHRVRQR1JQX01FVEhPRERFRgorICAgIE9TX1RDU0VUUEdSUF9NRVRIT0RERUYKKyAgICBPU19PUEVOX01FVEhPRERFRgorICAgIE9TX0NMT1NFX01FVEhPRERFRgorICAgIE9TX0NMT1NFUkFOR0VfTUVUSE9EREVGCisgICAgT1NfREVWSUNFX0VOQ09ESU5HX01FVEhPRERFRgorICAgIE9TX0RVUF9NRVRIT0RERUYKKyAgICBPU19EVVAyX01FVEhPRERFRgorICAgIE9TX0xPQ0tGX01FVEhPRERFRgorICAgIE9TX0xTRUVLX01FVEhPRERFRgorICAgIE9TX1JFQURfTUVUSE9EREVGCisgICAgT1NfUkVBRFZfTUVUSE9EREVGCisgICAgT1NfUFJFQURfTUVUSE9EREVGCisgICAgT1NfV1JJVEVfTUVUSE9EREVGCisgICAgT1NfV1JJVEVWX01FVEhPRERFRgorICAgIE9TX1BXUklURV9NRVRIT0RERUYKICNpZmRlZiBIQVZFX1NFTkRGSUxFCiAgICAgeyJzZW5kZmlsZSIsICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfc2VuZGZpbGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfc2VuZGZpbGVfX2RvY19ffSwKICNlbmRpZgotICAgIHsiZnN0YXQiLCAgICAgICAgICAgcG9zaXhfZnN0YXQsIE1FVEhfVkFSQVJHUywgcG9zaXhfZnN0YXRfX2RvY19ffSwKLSAgICB7ImlzYXR0eSIsICAgICAgICAgIHBvc2l4X2lzYXR0eSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9pc2F0dHlfX2RvY19ffSwKLSNpZmRlZiBIQVZFX1BJUEUKLSAgICB7InBpcGUiLCAgICAgICAgICAgIHBvc2l4X3BpcGUsIE1FVEhfTk9BUkdTLCBwb3NpeF9waXBlX19kb2NfX30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1BJUEUyCi0gICAgeyJwaXBlMiIsICAgICAgICAgICBwb3NpeF9waXBlMiwgTUVUSF9PLCBwb3NpeF9waXBlMl9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9NS0ZJRk8KLSAgICB7Im1rZmlmbyIsICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9ta2ZpZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfbWtmaWZvX19kb2NfX30sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfTUtOT0QpICYmIGRlZmluZWQoSEFWRV9NQUtFREVWKQotICAgIHsibWtub2QiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X21rbm9kLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X21rbm9kX19kb2NfX30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX0RFVklDRV9NQUNST1MKLSAgICB7Im1ham9yIiwgICAgICAgICAgIHBvc2l4X21ham9yLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X21ham9yX19kb2NfX30sCi0gICAgeyJtaW5vciIsICAgICAgICAgICBwb3NpeF9taW5vciwgTUVUSF9WQVJBUkdTLCBwb3NpeF9taW5vcl9fZG9jX199LAotICAgIHsibWFrZWRldiIsICAgICAgICAgcG9zaXhfbWFrZWRldiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9tYWtlZGV2X19kb2NfX30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX0ZUUlVOQ0FURQotICAgIHsiZnRydW5jYXRlIiwgICAgICAgcG9zaXhfZnRydW5jYXRlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2Z0cnVuY2F0ZV9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9UUlVOQ0FURQotICAgIHsidHJ1bmNhdGUiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3RydW5jYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3RydW5jYXRlX19kb2NfX30sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFMTE9DQVRFKSAmJiAhZGVmaW5lZChQT1NJWF9GQURWSVNFX0FJWF9CVUcpCi0gICAgeyJwb3NpeF9mYWxsb2NhdGUiLCBwb3NpeF9wb3NpeF9mYWxsb2NhdGUsIE1FVEhfVkFSQVJHUywgcG9zaXhfcG9zaXhfZmFsbG9jYXRlX19kb2NfX30sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFEVklTRSkgJiYgIWRlZmluZWQoUE9TSVhfRkFEVklTRV9BSVhfQlVHKQotICAgIHsicG9zaXhfZmFkdmlzZSIsICAgcG9zaXhfcG9zaXhfZmFkdmlzZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9wb3NpeF9mYWR2aXNlX19kb2NfX30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1BVVEVOVgotICAgIHsicHV0ZW52IiwgICAgICAgICAgcG9zaXhfcHV0ZW52LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3B1dGVudl9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9VTlNFVEVOVgotICAgIHsidW5zZXRlbnYiLCAgICAgICAgcG9zaXhfdW5zZXRlbnYsIE1FVEhfVkFSQVJHUywgcG9zaXhfdW5zZXRlbnZfX2RvY19ffSwKLSNlbmRpZgotICAgIHsic3RyZXJyb3IiLCAgICAgICAgcG9zaXhfc3RyZXJyb3IsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3RyZXJyb3JfX2RvY19ffSwKLSNpZmRlZiBIQVZFX0ZDSERJUgotICAgIHsiZmNoZGlyIiwgICAgICAgICAgcG9zaXhfZmNoZGlyLCBNRVRIX08sIHBvc2l4X2ZjaGRpcl9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9GU1lOQwotICAgIHsiZnN5bmMiLCAgICAgICBwb3NpeF9mc3luYywgTUVUSF9PLCBwb3NpeF9mc3luY19fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWU5DCi0gICAgeyJzeW5jIiwgICAgICAgIHBvc2l4X3N5bmMsIE1FVEhfTk9BUkdTLCBwb3NpeF9zeW5jX19kb2NfX30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX0ZEQVRBU1lOQwotICAgIHsiZmRhdGFzeW5jIiwgICBwb3NpeF9mZGF0YXN5bmMsICBNRVRIX08sIHBvc2l4X2ZkYXRhc3luY19fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfV0FJVF9ICi0jaWZkZWYgV0NPUkVEVU1QCi0gICAgeyJXQ09SRURVTVAiLCAgICAgICBwb3NpeF9XQ09SRURVTVAsIE1FVEhfVkFSQVJHUywgcG9zaXhfV0NPUkVEVU1QX19kb2NfX30sCi0jZW5kaWYgLyogV0NPUkVEVU1QICovCi0jaWZkZWYgV0lGQ09OVElOVUVECi0gICAgeyJXSUZDT05USU5VRUQiLHBvc2l4X1dJRkNPTlRJTlVFRCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9XSUZDT05USU5VRURfX2RvY19ffSwKLSNlbmRpZiAvKiBXSUZDT05USU5VRUQgKi8KLSNpZmRlZiBXSUZTVE9QUEVECi0gICAgeyJXSUZTVE9QUEVEIiwgICAgICBwb3NpeF9XSUZTVE9QUEVELCBNRVRIX1ZBUkFSR1MsIHBvc2l4X1dJRlNUT1BQRURfX2RvY19ffSwKLSNlbmRpZiAvKiBXSUZTVE9QUEVEICovCi0jaWZkZWYgV0lGU0lHTkFMRUQKLSAgICB7IldJRlNJR05BTEVEIiwgICAgIHBvc2l4X1dJRlNJR05BTEVELCBNRVRIX1ZBUkFSR1MsIHBvc2l4X1dJRlNJR05BTEVEX19kb2NfX30sCi0jZW5kaWYgLyogV0lGU0lHTkFMRUQgKi8KLSNpZmRlZiBXSUZFWElURUQKLSAgICB7IldJRkVYSVRFRCIsICAgICAgIHBvc2l4X1dJRkVYSVRFRCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9XSUZFWElURURfX2RvY19ffSwKLSNlbmRpZiAvKiBXSUZFWElURUQgKi8KLSNpZmRlZiBXRVhJVFNUQVRVUwotICAgIHsiV0VYSVRTVEFUVVMiLCAgICAgcG9zaXhfV0VYSVRTVEFUVVMsIE1FVEhfVkFSQVJHUywgcG9zaXhfV0VYSVRTVEFUVVNfX2RvY19ffSwKLSNlbmRpZiAvKiBXRVhJVFNUQVRVUyAqLwotI2lmZGVmIFdURVJNU0lHCi0gICAgeyJXVEVSTVNJRyIsICAgICAgICBwb3NpeF9XVEVSTVNJRywgTUVUSF9WQVJBUkdTLCBwb3NpeF9XVEVSTVNJR19fZG9jX199LAotI2VuZGlmIC8qIFdURVJNU0lHICovCi0jaWZkZWYgV1NUT1BTSUcKLSAgICB7IldTVE9QU0lHIiwgICAgICAgIHBvc2l4X1dTVE9QU0lHLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X1dTVE9QU0lHX19kb2NfX30sCi0jZW5kaWYgLyogV1NUT1BTSUcgKi8KLSNlbmRpZiAvKiBIQVZFX1NZU19XQUlUX0ggKi8KLSNpZiBkZWZpbmVkKEhBVkVfRlNUQVRWRlMpICYmIGRlZmluZWQoSEFWRV9TWVNfU1RBVFZGU19IKQotICAgIHsiZnN0YXR2ZnMiLCAgICAgICAgcG9zaXhfZnN0YXR2ZnMsIE1FVEhfVkFSQVJHUywgcG9zaXhfZnN0YXR2ZnNfX2RvY19ffSwKLSNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9TVEFUVkZTKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1NUQVRWRlNfSCkKLSAgICB7InN0YXR2ZnMiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9zdGF0dmZzLAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3N0YXR2ZnNfX2RvY19ffSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfQ09ORlNUUgotICAgIHsiY29uZnN0ciIsICAgICAgICAgcG9zaXhfY29uZnN0ciwgTUVUSF9WQVJBUkdTLCBwb3NpeF9jb25mc3RyX19kb2NfX30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU0NPTkYKLSAgICB7InN5c2NvbmYiLCAgICAgICAgIHBvc2l4X3N5c2NvbmYsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3lzY29uZl9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9GUEFUSENPTkYKLSAgICB7ImZwYXRoY29uZiIsICAgICAgIHBvc2l4X2ZwYXRoY29uZiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9mcGF0aGNvbmZfX2RvY19ffSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfUEFUSENPTkYKLSAgICB7InBhdGhjb25mIiwgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9wYXRoY29uZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9wYXRoY29uZl9fZG9jX199LAotI2VuZGlmCi0gICAgeyJhYm9ydCIsICAgICAgICAgICBwb3NpeF9hYm9ydCwgTUVUSF9OT0FSR1MsIHBvc2l4X2Fib3J0X19kb2NfX30sCi0jaWZkZWYgTVNfV0lORE9XUwotICAgIHsiX2dldGZ1bGxwYXRobmFtZSIsICAgICAgICBwb3NpeF9fZ2V0ZnVsbHBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAotICAgIHsiX2dldGZpbmFscGF0aG5hbWUiLCAgICAgICBwb3NpeF9fZ2V0ZmluYWxwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKLSAgICB7Il9pc2RpciIsICAgICAgICAgICAgICAgICAgcG9zaXhfX2lzZGlyLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X19pc2Rpcl9fZG9jX199LAotICAgIHsiX2dldGRpc2t1c2FnZSIsICAgICAgICAgICB3aW4zMl9fZ2V0ZGlza3VzYWdlLCBNRVRIX1ZBUkFSR1MsIHdpbjMyX19nZXRkaXNrdXNhZ2VfX2RvY19ffSwKLSAgICB7Il9nZXR2b2x1bWVwYXRobmFtZSIsICAgICAgcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZV9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9HRVRMT0FEQVZHCi0gICAgeyJnZXRsb2FkYXZnIiwgICAgICBwb3NpeF9nZXRsb2FkYXZnLCBNRVRIX05PQVJHUywgcG9zaXhfZ2V0bG9hZGF2Z19fZG9jX199LAotI2VuZGlmCi0gICAgeyJ1cmFuZG9tIiwgICAgICAgICBwb3NpeF91cmFuZG9tLCAgIE1FVEhfVkFSQVJHUywgcG9zaXhfdXJhbmRvbV9fZG9jX199LAotI2lmZGVmIEhBVkVfU0VUUkVTVUlECi0gICAgeyJzZXRyZXN1aWQiLCAgICAgICBwb3NpeF9zZXRyZXN1aWQsIE1FVEhfVkFSQVJHUywgcG9zaXhfc2V0cmVzdWlkX19kb2NfX30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1NFVFJFU0dJRAotICAgIHsic2V0cmVzZ2lkIiwgICAgICAgcG9zaXhfc2V0cmVzZ2lkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldHJlc2dpZF9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9HRVRSRVNVSUQKLSAgICB7ImdldHJlc3VpZCIsICAgICAgIHBvc2l4X2dldHJlc3VpZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2dldHJlc3VpZF9fZG9jX199LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9HRVRSRVNHSUQKLSAgICB7ImdldHJlc2dpZCIsICAgICAgIHBvc2l4X2dldHJlc2dpZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2dldHJlc2dpZF9fZG9jX199LAotI2VuZGlmCisgICAgT1NfRlNUQVRfTUVUSE9EREVGCisgICAgT1NfSVNBVFRZX01FVEhPRERFRgorICAgIE9TX1BJUEVfTUVUSE9EREVGCisgICAgT1NfUElQRTJfTUVUSE9EREVGCisgICAgT1NfTUtGSUZPX01FVEhPRERFRgorICAgIE9TX01LTk9EX01FVEhPRERFRgorICAgIE9TX01BSk9SX01FVEhPRERFRgorICAgIE9TX01JTk9SX01FVEhPRERFRgorICAgIE9TX01BS0VERVZfTUVUSE9EREVGCisgICAgT1NfRlRSVU5DQVRFX01FVEhPRERFRgorICAgIE9TX1RSVU5DQVRFX01FVEhPRERFRgorICAgIE9TX1BPU0lYX0ZBTExPQ0FURV9NRVRIT0RERUYKKyAgICBPU19QT1NJWF9GQURWSVNFX01FVEhPRERFRgorICAgIE9TX1BVVEVOVl9NRVRIT0RERUYKKyAgICBPU19VTlNFVEVOVl9NRVRIT0RERUYKKyAgICBPU19TVFJFUlJPUl9NRVRIT0RERUYKKyAgICBPU19GQ0hESVJfTUVUSE9EREVGCisgICAgT1NfRlNZTkNfTUVUSE9EREVGCisgICAgT1NfU1lOQ19NRVRIT0RERUYKKyAgICBPU19GREFUQVNZTkNfTUVUSE9EREVGCisgICAgT1NfV0NPUkVEVU1QX01FVEhPRERFRgorICAgIE9TX1dJRkNPTlRJTlVFRF9NRVRIT0RERUYKKyAgICBPU19XSUZTVE9QUEVEX01FVEhPRERFRgorICAgIE9TX1dJRlNJR05BTEVEX01FVEhPRERFRgorICAgIE9TX1dJRkVYSVRFRF9NRVRIT0RERUYKKyAgICBPU19XRVhJVFNUQVRVU19NRVRIT0RERUYKKyAgICBPU19XVEVSTVNJR19NRVRIT0RERUYKKyAgICBPU19XU1RPUFNJR19NRVRIT0RERUYKKyAgICBPU19GU1RBVFZGU19NRVRIT0RERUYKKyAgICBPU19TVEFUVkZTX01FVEhPRERFRgorICAgIE9TX0NPTkZTVFJfTUVUSE9EREVGCisgICAgT1NfU1lTQ09ORl9NRVRIT0RERUYKKyAgICBPU19GUEFUSENPTkZfTUVUSE9EREVGCisgICAgT1NfUEFUSENPTkZfTUVUSE9EREVGCisgICAgT1NfQUJPUlRfTUVUSE9EREVGCisgICAgT1NfX0dFVEZVTExQQVRITkFNRV9NRVRIT0RERUYKKyAgICBPU19fSVNESVJfTUVUSE9EREVGCisgICAgT1NfX0dFVERJU0tVU0FHRV9NRVRIT0RERUYKKyAgICBPU19fR0VURklOQUxQQVRITkFNRV9NRVRIT0RERUYKKyAgICBPU19fR0VUVk9MVU1FUEFUSE5BTUVfTUVUSE9EREVGCisgICAgT1NfR0VUTE9BREFWR19NRVRIT0RERUYKKyAgICBPU19VUkFORE9NX01FVEhPRERFRgorICAgIE9TX1NFVFJFU1VJRF9NRVRIT0RERUYKKyAgICBPU19TRVRSRVNHSURfTUVUSE9EREVGCisgICAgT1NfR0VUUkVTVUlEX01FVEhPRERFRgorICAgIE9TX0dFVFJFU0dJRF9NRVRIT0RERUYKIAotI2lmZGVmIFVTRV9YQVRUUlMKLSAgICB7InNldHhhdHRyIiwgKFB5Q0Z1bmN0aW9uKXBvc2l4X3NldHhhdHRyLAotICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICBwb3NpeF9zZXR4YXR0cl9fZG9jX199LAotICAgIHsiZ2V0eGF0dHIiLCAoUHlDRnVuY3Rpb24pcG9zaXhfZ2V0eGF0dHIsCi0gICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgIHBvc2l4X2dldHhhdHRyX19kb2NfX30sCi0gICAgeyJyZW1vdmV4YXR0ciIsIChQeUNGdW5jdGlvbilwb3NpeF9yZW1vdmV4YXR0ciwKLSAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgcG9zaXhfcmVtb3ZleGF0dHJfX2RvY19ffSwKLSAgICB7Imxpc3R4YXR0ciIsIChQeUNGdW5jdGlvbilwb3NpeF9saXN0eGF0dHIsCi0gICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgIHBvc2l4X2xpc3R4YXR0cl9fZG9jX199LAotI2VuZGlmCisgICAgT1NfR0VUWEFUVFJfTUVUSE9EREVGCisgICAgT1NfU0VUWEFUVFJfTUVUSE9EREVGCisgICAgT1NfUkVNT1ZFWEFUVFJfTUVUSE9EREVGCisgICAgT1NfTElTVFhBVFRSX01FVEhPRERFRgorCiAjaWYgZGVmaW5lZChURVJNU0laRV9VU0VfQ09OSU8pIHx8IGRlZmluZWQoVEVSTVNJWkVfVVNFX0lPQ1RMKQogICAgIHsiZ2V0X3Rlcm1pbmFsX3NpemUiLCBnZXRfdGVybWluYWxfc2l6ZSwgTUVUSF9WQVJBUkdTLCB0ZXJtc2l6ZV9fZG9jX199LAogI2VuZGlmCi0gICAgeyJjcHVfY291bnQiLCAoUHlDRnVuY3Rpb24pcG9zaXhfY3B1X2NvdW50LAotICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2NwdV9jb3VudF9fZG9jX199LAotICAgIHsiZ2V0X2luaGVyaXRhYmxlIiwgcG9zaXhfZ2V0X2luaGVyaXRhYmxlLCBNRVRIX1ZBUkFSR1MsIGdldF9pbmhlcml0YWJsZV9fZG9jX199LAotICAgIHsic2V0X2luaGVyaXRhYmxlIiwgcG9zaXhfc2V0X2luaGVyaXRhYmxlLCBNRVRIX1ZBUkFSR1MsIHNldF9pbmhlcml0YWJsZV9fZG9jX199LAotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICB7ImdldF9oYW5kbGVfaW5oZXJpdGFibGUiLCBwb3NpeF9nZXRfaGFuZGxlX2luaGVyaXRhYmxlLAotICAgICBNRVRIX1ZBUkFSR1MsIGdldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19ffSwKLSAgICB7InNldF9oYW5kbGVfaW5oZXJpdGFibGUiLCBwb3NpeF9zZXRfaGFuZGxlX2luaGVyaXRhYmxlLAotICAgICBNRVRIX1ZBUkFSR1MsIHNldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19ffSwKKyAgICBPU19DUFVfQ09VTlRfTUVUSE9EREVGCisgICAgT1NfR0VUX0lOSEVSSVRBQkxFX01FVEhPRERFRgorICAgIE9TX1NFVF9JTkhFUklUQUJMRV9NRVRIT0RERUYKKyAgICBPU19HRVRfSEFORExFX0lOSEVSSVRBQkxFX01FVEhPRERFRgorICAgIE9TX1NFVF9IQU5ETEVfSU5IRVJJVEFCTEVfTUVUSE9EREVGCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICB7ImdldF9ibG9ja2luZyIsIHBvc2l4X2dldF9ibG9ja2luZywgTUVUSF9WQVJBUkdTLCBnZXRfYmxvY2tpbmdfX2RvY19ffSwKKyAgICB7InNldF9ibG9ja2luZyIsIHBvc2l4X3NldF9ibG9ja2luZywgTUVUSF9WQVJBUkdTLCBzZXRfYmxvY2tpbmdfX2RvY19ffSwKICNlbmRpZgorICAgIHsic2NhbmRpciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3NjYW5kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfc2NhbmRpcl9fZG9jX199LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIApAQCAtMTIwNDEsOSArMTI3NTAsMTUgQEAKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TQ0hFRF9ICisjaWZkZWYgU0NIRURfT1RIRVIKICAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfT1RIRVIpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBTQ0hFRF9GSUZPCiAgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0ZJRk8pKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBTQ0hFRF9SUgogICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9SUikpIHJldHVybiAtMTsKKyNlbmRpZgogI2lmZGVmIFNDSEVEX1NQT1JBRElDCiAgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1NQT1JBRElDKSByZXR1cm4gLTE7CiAjZW5kaWYKQEAgLTEyMTAyLDE1ICsxMjgxNyw2IEBACiB9CiAKIAotI2lmIChkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykpICYmICFkZWZpbmVkKF9fUU5YX18pCi0jZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9udAotI2RlZmluZSBNT0ROQU1FICJudCIKLQotI2Vsc2UKLSNkZWZpbmUgSU5JVEZVTkMgUHlJbml0X3Bvc2l4Ci0jZGVmaW5lIE1PRE5BTUUgInBvc2l4IgotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgcG9zaXhtb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAogICAgIE1PRE5BTUUsCkBAIC0xMjE3MCw3ICsxMjg3Niw3IEBACiAgICAgIkhBVkVfRlNUQVRWRlMiLAogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0ZUUlVOQ0FURQorI2lmIGRlZmluZWQgSEFWRV9GVFJVTkNBVEUgfHwgZGVmaW5lZCBNU19XSU5ET1dTCiAgICAgIkhBVkVfRlRSVU5DQVRFIiwKICNlbmRpZgogCkBAIC0xMjMyNCwxMyArMTMwMzAsMTkgQEAKICAgICAgICAgc2NoZWRfcGFyYW1fZGVzYy5uYW1lID0gTU9ETkFNRSAiLnNjaGVkX3BhcmFtIjsKICAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTY2hlZFBhcmFtVHlwZSwgJnNjaGVkX3BhcmFtX2Rlc2MpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBTY2hlZFBhcmFtVHlwZS50cF9uZXcgPSBzY2hlZF9wYXJhbV9uZXc7CisgICAgICAgIFNjaGVkUGFyYW1UeXBlLnRwX25ldyA9IG9zX3NjaGVkX3BhcmFtOwogI2VuZGlmCiAKICAgICAgICAgLyogaW5pdGlhbGl6ZSBUZXJtaW5hbFNpemVfaW5mbyAqLwogICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRlcm1pbmFsU2l6ZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVGVybWluYWxTaXplX2Rlc2MpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIC8qIGluaXRpYWxpemUgc2NhbmRpciB0eXBlcyAqLworICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTY2FuZGlySXRlcmF0b3JUeXBlKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5VHlwZV9SZWFkeSgmRGlyRW50cnlUeXBlKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmV2FpdGlkUmVzdWx0VHlwZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jIGIvTW9kdWxlcy9wd2Rtb2R1bGUuYwppbmRleCBlYmI4NzEyLi43NDE2Y2Y3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKQEAgLTYsNiArNiwxMiBAQAogCiAjaW5jbHVkZSA8cHdkLmg+CiAKKyNpbmNsdWRlICJjbGluaWMvcHdkbW9kdWxlLmMuaCIKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBwd2QKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTYwZjYyOGVmMzU2Yjk3YjZdKi8KKwogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRmllbGQgc3RydWN0X3B3ZF90eXBlX2ZpZWxkc1tdID0gewogICAgIHsicHdfbmFtZSIsICJ1c2VyIG5hbWUifSwKICAgICB7InB3X3Bhc3N3ZCIsICJwYXNzd29yZCJ9LApAQCAtODcsMTggKzkzLDI1IEBACiAgICAgcmV0dXJuIHY7CiB9CiAKLVB5RG9jX1NUUlZBUihwd2RfZ2V0cHd1aWRfX2RvY19fLAotImdldHB3dWlkKHVpZCkgLT4gKHB3X25hbWUscHdfcGFzc3dkLHB3X3VpZCxcblwKLSAgICAgICAgICAgICAgICAgIHB3X2dpZCxwd19nZWNvcyxwd19kaXIscHdfc2hlbGwpXG5cCi1SZXR1cm4gdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gbnVtZXJpYyB1c2VyIElELlxuXAotU2VlIGhlbHAocHdkKSBmb3IgbW9yZSBvbiBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLiIpOworLypbY2xpbmljIGlucHV0XQorcHdkLmdldHB3dWlkCisKKyAgICB1aWRvYmo6IG9iamVjdAorICAgIC8KKworUmV0dXJuIHRoZSBwYXNzd29yZCBkYXRhYmFzZSBlbnRyeSBmb3IgdGhlIGdpdmVuIG51bWVyaWMgdXNlciBJRC4KKworU2VlIGBoZWxwKHB3ZClgIGZvciBtb3JlIG9uIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wd2RfZ2V0cHd1aWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcHdkX2dldHB3dWlkKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICp1aWRvYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzRlZTFkNGQ0MjliODZjNCBpbnB1dD1hZTY0ZDUwN2ExYzZkM2U4XSovCiB7CiAgICAgdWlkX3QgdWlkOwogICAgIHN0cnVjdCBwYXNzd2QgKnA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpnZXRwd3VpZCIsIF9QeV9VaWRfQ29udmVydGVyLCAmdWlkKSkgeworCisgICAgaWYgKCFfUHlfVWlkX0NvbnZlcnRlcih1aWRvYmosICZ1aWQpKSB7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0tleUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRwd3VpZCgpOiB1aWQgbm90IGZvdW5kIik7CkBAIC0xMTYsMjEgKzEyOSwyNSBAQAogICAgIHJldHVybiBta3B3ZW50KHApOwogfQogCi1QeURvY19TVFJWQVIocHdkX2dldHB3bmFtX19kb2NfXywKLSJnZXRwd25hbShuYW1lKSAtPiAocHdfbmFtZSxwd19wYXNzd2QscHdfdWlkLFxuXAotICAgICAgICAgICAgICAgICAgICBwd19naWQscHdfZ2Vjb3MscHdfZGlyLHB3X3NoZWxsKVxuXAotUmV0dXJuIHRoZSBwYXNzd29yZCBkYXRhYmFzZSBlbnRyeSBmb3IgdGhlIGdpdmVuIHVzZXIgbmFtZS5cblwKLVNlZSBoZWxwKHB3ZCkgZm9yIG1vcmUgb24gcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3B3ZC5nZXRwd25hbQorCisgICAgYXJnOiB1bmljb2RlCisgICAgLworCitSZXR1cm4gdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gdXNlciBuYW1lLgorCitTZWUgYGhlbHAocHdkKWAgZm9yIG1vcmUgb24gcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXB3ZF9nZXRwd25hbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitwd2RfZ2V0cHduYW1faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZhYmVlZTkyNDMwZTQzZDIgaW5wdXQ9ZDVmN2U3MDA5MTliMDJkM10qLwogewogICAgIGNoYXIgKm5hbWU7CiAgICAgc3RydWN0IHBhc3N3ZCAqcDsKLSAgICBQeU9iamVjdCAqYXJnLCAqYnl0ZXMsICpyZXR2YWwgPSBOVUxMOworICAgIFB5T2JqZWN0ICpieXRlcywgKnJldHZhbCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6Z2V0cHduYW0iLCAmYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKChieXRlcyA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoYXJnKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKGJ5dGVzLCAmbmFtZSwgTlVMTCkgPT0gLTEpCkBAIC0xNDcsMTQgKzE2NCwxNyBAQAogfQogCiAjaWZkZWYgSEFWRV9HRVRQV0VOVAotUHlEb2NfU1RSVkFSKHB3ZF9nZXRwd2FsbF9fZG9jX18sCi0iZ2V0cHdhbGwoKSAtPiBsaXN0X29mX2VudHJpZXNcblwKLVJldHVybiBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLCBcCi1pbiBhcmJpdHJhcnkgb3JkZXIuXG5cCi1TZWUgaGVscChwd2QpIGZvciBtb3JlIG9uIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuIik7CisvKltjbGluaWMgaW5wdXRdCitwd2QuZ2V0cHdhbGwKKworUmV0dXJuIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMsIGluIGFyYml0cmFyeSBvcmRlci4KKworU2VlIGhlbHAocHdkKSBmb3IgbW9yZSBvbiBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcHdkX2dldHB3YWxsKFB5T2JqZWN0ICpzZWxmKQorcHdkX2dldHB3YWxsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00ODUzZDJmNWEwYWZhYzhhIGlucHV0PWQ3ZWNlYmZkOTAyMTliODVdKi8KIHsKICAgICBQeU9iamVjdCAqZDsKICAgICBzdHJ1Y3QgcGFzc3dkICpwOwpAQCAtMTc3LDExICsxOTcsMTAgQEAKICNlbmRpZgogCiBzdGF0aWMgUHlNZXRob2REZWYgcHdkX21ldGhvZHNbXSA9IHsKLSAgICB7ImdldHB3dWlkIiwgICAgICAgIHB3ZF9nZXRwd3VpZCwgTUVUSF9WQVJBUkdTLCBwd2RfZ2V0cHd1aWRfX2RvY19ffSwKLSAgICB7ImdldHB3bmFtIiwgICAgICAgIHB3ZF9nZXRwd25hbSwgTUVUSF9WQVJBUkdTLCBwd2RfZ2V0cHduYW1fX2RvY19ffSwKKyAgICBQV0RfR0VUUFdVSURfTUVUSE9EREVGCisgICAgUFdEX0dFVFBXTkFNX01FVEhPRERFRgogI2lmZGVmIEhBVkVfR0VUUFdFTlQKLSAgICB7ImdldHB3YWxsIiwgICAgICAgIChQeUNGdW5jdGlvbilwd2RfZ2V0cHdhbGwsCi0gICAgICAgIE1FVEhfTk9BUkdTLCAgcHdkX2dldHB3YWxsX19kb2NfX30sCisgICAgUFdEX0dFVFBXQUxMX01FVEhPRERFRgogI2VuZGlmCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B5ZXhwYXQuYyBiL01vZHVsZXMvcHlleHBhdC5jCmluZGV4IDZhOTAxZjcuLmViMzIyYzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHlleHBhdC5jCisrKyBiL01vZHVsZXMvcHlleHBhdC5jCkBAIC02LDYgKzYsMTMgQEAKIAogI2luY2x1ZGUgInB5ZXhwYXQuaCIKIAorLyogRG8gbm90IGVtaXQgQ2xpbmljIG91dHB1dCB0byBhIGZpbGUgYXMgdGhhdCB3cmVha3MgaGF2b2Mgd2l0aCBjb25kaXRpb25hbGx5CisgICBpbmNsdWRlZCBtZXRob2RzLiAqLworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIHB5ZXhwYXQKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWIxNjhkNTAzYTQ0OTBjMTVdKi8KKwogI2RlZmluZSBYTUxfQ09NQklORURfVkVSU0lPTiAoMTAwMDAqWE1MX01BSk9SX1ZFUlNJT04rMTAwKlhNTF9NSU5PUl9WRVJTSU9OK1hNTF9NSUNST19WRVJTSU9OKQogCiBzdGF0aWMgWE1MX01lbW9yeV9IYW5kbGluZ19TdWl0ZSBFeHBhdE1lbW9yeUhhbmRsZXIgPSB7CkBAIC02MSw2ICs2OCw4IEBACiAgICAgUHlPYmplY3QgKipoYW5kbGVyczsKIH0geG1scGFyc2VvYmplY3Q7CiAKKyNpbmNsdWRlICJjbGluaWMvcHlleHBhdC5jLmgiCisKICNkZWZpbmUgQ0hBUkFDVEVSX0RBVEFfQlVGRkVSX1NJWkUgODE5MgogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IFhtbHBhcnNldHlwZTsKQEAgLTY3MSw2ICs2ODAsMTEgQEAKIFZPSURfSEFORExFUihFbmREb2N0eXBlRGVjbCwgKHZvaWQgKnVzZXJEYXRhKSwgKCIoKSIpKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKltjbGluaWMgaW5wdXRdCitjbGFzcyBweWV4cGF0LnhtbHBhcnNlciAieG1scGFyc2VvYmplY3QgKiIgIiZYbWxwYXJzZXR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0yMzkzMTYyMzg1MjMyZTFjXSovCisKIAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9wYXJzZV9yZXN1bHQoeG1scGFyc2VvYmplY3QgKnNlbGYsIGludCBydikKQEAgLTY4NywyNSArNzAxLDMwIEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhydik7CiB9CiAKLVB5RG9jX1NUUlZBUih4bWxwYXJzZV9QYXJzZV9fZG9jX18sCi0iUGFyc2UoZGF0YVssIGlzZmluYWxdKVxuXAotUGFyc2UgWE1MIGRhdGEuICBgaXNmaW5hbCcgc2hvdWxkIGJlIHRydWUgYXQgZW5kIG9mIGlucHV0LiIpOwotCiAjZGVmaW5lIE1BWF9DSFVOS19TSVpFICgxIDw8IDIwKQogCisvKltjbGluaWMgaW5wdXRdCitweWV4cGF0LnhtbHBhcnNlci5QYXJzZQorCisgICAgZGF0YTogb2JqZWN0CisgICAgaXNmaW5hbDogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKKyAgICAvCisKK1BhcnNlIFhNTCBkYXRhLgorCitgaXNmaW5hbCcgc2hvdWxkIGJlIHRydWUgYXQgZW5kIG9mIGlucHV0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgoteG1scGFyc2VfUGFyc2UoeG1scGFyc2VvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcHlleHBhdF94bWxwYXJzZXJfUGFyc2VfaW1wbCh4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc2ZpbmFsKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWY0ZGI4NDNkZDFmNGVkNGIgaW5wdXQ9MTk5ZDllOGU5MmViYmI0Yl0qLwogewotICAgIFB5T2JqZWN0ICpkYXRhOwotICAgIGludCBpc0ZpbmFsID0gMDsKICAgICBjb25zdCBjaGFyICpzOwogICAgIFB5X3NzaXplX3Qgc2xlbjsKICAgICBQeV9idWZmZXIgdmlldzsKICAgICBpbnQgcmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aTpQYXJzZSIsICZkYXRhLCAmaXNGaW5hbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhkYXRhKSkgewogICAgICAgICB2aWV3LmJ1ZiA9IE5VTEw7CiAgICAgICAgIHMgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShkYXRhLCAmc2xlbik7CkBAIC03MjksNyArNzQ4LDcgQEAKICAgICAgICAgc2xlbiAtPSBNQVhfQ0hVTktfU0laRTsKICAgICB9CiAgICAgYXNzZXJ0KE1BWF9DSFVOS19TSVpFIDwgSU5UX01BWCAmJiBzbGVuIDwgSU5UX01BWCk7Ci0gICAgcmMgPSBYTUxfUGFyc2Uoc2VsZi0+aXRzZWxmLCBzLCAoaW50KXNsZW4sIGlzRmluYWwpOworICAgIHJjID0gWE1MX1BhcnNlKHNlbGYtPml0c2VsZiwgcywgKGludClzbGVuLCBpc2ZpbmFsKTsKIAogZG9uZToKICAgICBpZiAodmlldy5idWYgIT0gTlVMTCkKQEAgLTc4MCwxOCArNzk5LDI0IEBACiAgICAgcmV0dXJuIC0xOwogfQogCi1QeURvY19TVFJWQVIoeG1scGFyc2VfUGFyc2VGaWxlX19kb2NfXywKLSJQYXJzZUZpbGUoZmlsZSlcblwKLVBhcnNlIFhNTCBkYXRhIGZyb20gZmlsZS1saWtlIG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3B5ZXhwYXQueG1scGFyc2VyLlBhcnNlRmlsZQorCisgICAgZmlsZTogb2JqZWN0CisgICAgLworCitQYXJzZSBYTUwgZGF0YSBmcm9tIGZpbGUtbGlrZSBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi14bWxwYXJzZV9QYXJzZUZpbGUoeG1scGFyc2VvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmKQorcHlleHBhdF94bWxwYXJzZXJfUGFyc2VGaWxlKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yYWRjNmExMzEwMGNjNDJiIGlucHV0PWZiYjVhMTJiNjAzOGQ3MzVdKi8KIHsKICAgICBpbnQgcnYgPSAxOwogICAgIFB5T2JqZWN0ICpyZWFkbWV0aG9kID0gTlVMTDsKICAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKIAotICAgIHJlYWRtZXRob2QgPSBfUHlPYmplY3RfR2V0QXR0cklkKGYsICZQeUlkX3JlYWQpOworICAgIHJlYWRtZXRob2QgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZpbGUsICZQeUlkX3JlYWQpOwogICAgIGlmIChyZWFkbWV0aG9kID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBtdXN0IGhhdmUgJ3JlYWQnIGF0dHJpYnV0ZSIpOwpAQCAtODIzLDQyICs4NDgsNTAgQEAKICAgICByZXR1cm4gZ2V0X3BhcnNlX3Jlc3VsdChzZWxmLCBydik7CiB9CiAKLVB5RG9jX1NUUlZBUih4bWxwYXJzZV9TZXRCYXNlX19kb2NfXywKLSJTZXRCYXNlKGJhc2VfdXJsKVxuXAotU2V0IHRoZSBiYXNlIFVSTCBmb3IgdGhlIHBhcnNlci4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3B5ZXhwYXQueG1scGFyc2VyLlNldEJhc2UKKworICAgIGJhc2U6IHN0cgorICAgIC8KKworU2V0IHRoZSBiYXNlIFVSTCBmb3IgdGhlIHBhcnNlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXhtbHBhcnNlX1NldEJhc2UoeG1scGFyc2VvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcHlleHBhdF94bWxwYXJzZXJfU2V0QmFzZV9pbXBsKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpiYXNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWMyMTJkZGNlYjYwN2I1MzkgaW5wdXQ9YzY4NGU1ZGU4OTVlZTFhOF0qLwogewotICAgIGNoYXIgKmJhc2U7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6U2V0QmFzZSIsICZiYXNlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKCFYTUxfU2V0QmFzZShzZWxmLT5pdHNlbGYsIGJhc2UpKSB7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUih4bWxwYXJzZV9HZXRCYXNlX19kb2NfXywKLSJHZXRCYXNlKCkgLT4gdXJsXG5cCi1SZXR1cm4gYmFzZSBVUkwgc3RyaW5nIGZvciB0aGUgcGFyc2VyLiIpOworLypbY2xpbmljIGlucHV0XQorcHlleHBhdC54bWxwYXJzZXIuR2V0QmFzZQorCitSZXR1cm4gYmFzZSBVUkwgc3RyaW5nIGZvciB0aGUgcGFyc2VyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgoteG1scGFyc2VfR2V0QmFzZSh4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3B5ZXhwYXRfeG1scGFyc2VyX0dldEJhc2VfaW1wbCh4bWxwYXJzZW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yODg2Y2IyMWY5YTg3MzlhIGlucHV0PTkxOGQ3MWMzODAwOTYyMGVdKi8KIHsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgieiIsIFhNTF9HZXRCYXNlKHNlbGYtPml0c2VsZikpOwogfQogCi1QeURvY19TVFJWQVIoeG1scGFyc2VfR2V0SW5wdXRDb250ZXh0X19kb2NfXywKLSJHZXRJbnB1dENvbnRleHQoKSAtPiBzdHJpbmdcblwKLVJldHVybiB0aGUgdW50cmFuc2xhdGVkIHRleHQgb2YgdGhlIGlucHV0IHRoYXQgY2F1c2VkIHRoZSBjdXJyZW50IGV2ZW50LlxuXAotSWYgdGhlIGV2ZW50IHdhcyBnZW5lcmF0ZWQgYnkgYSBsYXJnZSBhbW91bnQgb2YgdGV4dCAoc3VjaCBhcyBhIHN0YXJ0IHRhZ1xuXAotZm9yIGFuIGVsZW1lbnQgd2l0aCBtYW55IGF0dHJpYnV0ZXMpLCBub3QgYWxsIG9mIHRoZSB0ZXh0IG1heSBiZSBhdmFpbGFibGUuIik7CisvKltjbGluaWMgaW5wdXRdCitweWV4cGF0LnhtbHBhcnNlci5HZXRJbnB1dENvbnRleHQKKworUmV0dXJuIHRoZSB1bnRyYW5zbGF0ZWQgdGV4dCBvZiB0aGUgaW5wdXQgdGhhdCBjYXVzZWQgdGhlIGN1cnJlbnQgZXZlbnQuCisKK0lmIHRoZSBldmVudCB3YXMgZ2VuZXJhdGVkIGJ5IGEgbGFyZ2UgYW1vdW50IG9mIHRleHQgKHN1Y2ggYXMgYSBzdGFydCB0YWcKK2ZvciBhbiBlbGVtZW50IHdpdGggbWFueSBhdHRyaWJ1dGVzKSwgbm90IGFsbCBvZiB0aGUgdGV4dCBtYXkgYmUgYXZhaWxhYmxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgoteG1scGFyc2VfR2V0SW5wdXRDb250ZXh0KHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorcHlleHBhdF94bWxwYXJzZXJfR2V0SW5wdXRDb250ZXh0X2ltcGwoeG1scGFyc2VvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTg4MDI2ZDY4M2ZjMjJjYyBpbnB1dD0wMzRkZjg3MTJkYjY4Mzc5XSovCiB7CiAgICAgaWYgKHNlbGYtPmluX2NhbGxiYWNrKSB7CiAgICAgICAgIGludCBvZmZzZXQsIHNpemU7CkBAIC04NzUsMjQgKzkwOCwyNSBAQAogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKHhtbHBhcnNlX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlX19kb2NfXywKLSJFeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZShjb250ZXh0WywgZW5jb2RpbmddKVxuXAotQ3JlYXRlIGEgcGFyc2VyIGZvciBwYXJzaW5nIGFuIGV4dGVybmFsIGVudGl0eSBiYXNlZCBvbiB0aGVcblwKLWluZm9ybWF0aW9uIHBhc3NlZCB0byB0aGUgRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyLiIpOworLypbY2xpbmljIGlucHV0XQorcHlleHBhdC54bWxwYXJzZXIuRXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGUKKworICAgIGNvbnRleHQ6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KQorICAgIGVuY29kaW5nOiBzdHIgPSBOVUxMCisgICAgLworCitDcmVhdGUgYSBwYXJzZXIgZm9yIHBhcnNpbmcgYW4gZXh0ZXJuYWwgZW50aXR5IGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBwYXNzZWQgdG8gdGhlIEV4dGVybmFsRW50aXR5UmVmSGFuZGxlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXhtbHBhcnNlX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3B5ZXhwYXRfeG1scGFyc2VyX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlX2ltcGwoeG1scGFyc2VvYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUzNWNkYTlkN2EwZmJjZDYgaW5wdXQ9YjkwNjcxNGNjMTIyYzMyMl0qLwogewotICAgIGNoYXIgKmNvbnRleHQ7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwogICAgIHhtbHBhcnNlb2JqZWN0ICpuZXdfcGFyc2VyOwogICAgIGludCBpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ6fHM6RXh0ZXJuYWxFbnRpdHlQYXJzZXJDcmVhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGV4dCwgJmVuY29kaW5nKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICBuZXdfcGFyc2VyID0gUHlPYmplY3RfR0NfTmV3KHhtbHBhcnNlb2JqZWN0LCAmWG1scGFyc2V0eXBlKTsKICAgICBpZiAobmV3X3BhcnNlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTk0OCw0MSArOTgyLDQ5IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld19wYXJzZXI7CiB9CiAKLVB5RG9jX1NUUlZBUih4bWxwYXJzZV9TZXRQYXJhbUVudGl0eVBhcnNpbmdfX2RvY19fLAotIlNldFBhcmFtRW50aXR5UGFyc2luZyhmbGFnKSAtPiBzdWNjZXNzXG5cCi1Db250cm9scyBwYXJzaW5nIG9mIHBhcmFtZXRlciBlbnRpdGllcyAoaW5jbHVkaW5nIHRoZSBleHRlcm5hbCBEVERcblwKLXN1YnNldCkuIFBvc3NpYmxlIGZsYWcgdmFsdWVzIGFyZSBYTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfTkVWRVIsXG5cCi1YTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfVU5MRVNTX1NUQU5EQUxPTkUgYW5kXG5cCi1YTUxfUEFSQU1fRU5USVRZX1BBUlNJTkdfQUxXQVlTLiBSZXR1cm5zIHRydWUgaWYgc2V0dGluZyB0aGUgZmxhZ1xuXAotd2FzIHN1Y2Nlc3NmdWwuIik7CisvKltjbGluaWMgaW5wdXRdCitweWV4cGF0LnhtbHBhcnNlci5TZXRQYXJhbUVudGl0eVBhcnNpbmcKIAotc3RhdGljIFB5T2JqZWN0KgoteG1scGFyc2VfU2V0UGFyYW1FbnRpdHlQYXJzaW5nKHhtbHBhcnNlb2JqZWN0ICpwLCBQeU9iamVjdCogYXJncykKKyAgICBmbGFnOiBpbnQKKyAgICAvCisKK0NvbnRyb2xzIHBhcnNpbmcgb2YgcGFyYW1ldGVyIGVudGl0aWVzIChpbmNsdWRpbmcgdGhlIGV4dGVybmFsIERURCBzdWJzZXQpLgorCitQb3NzaWJsZSBmbGFnIHZhbHVlcyBhcmUgWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX05FVkVSLAorWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX1VOTEVTU19TVEFOREFMT05FIGFuZAorWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX0FMV0FZUy4gUmV0dXJucyB0cnVlIGlmIHNldHRpbmcgdGhlIGZsYWcKK3dhcyBzdWNjZXNzZnVsLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorcHlleHBhdF94bWxwYXJzZXJfU2V0UGFyYW1FbnRpdHlQYXJzaW5nX2ltcGwoeG1scGFyc2VvYmplY3QgKnNlbGYsIGludCBmbGFnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE4NjY4ZWU4ZTc2MGQ2NGMgaW5wdXQ9OGFlYTE5YjRiMTVlOWFmMV0qLwogewotICAgIGludCBmbGFnOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaSIsICZmbGFnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZmxhZyA9IFhNTF9TZXRQYXJhbUVudGl0eVBhcnNpbmcocC0+aXRzZWxmLCBmbGFnKTsKKyAgICBmbGFnID0gWE1MX1NldFBhcmFtRW50aXR5UGFyc2luZyhzZWxmLT5pdHNlbGYsIGZsYWcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoZmxhZyk7CiB9CiAKIAogI2lmIFhNTF9DT01CSU5FRF9WRVJTSU9OID49IDE5NTA1Ci1QeURvY19TVFJWQVIoeG1scGFyc2VfVXNlRm9yZWlnbkRURF9fZG9jX18sCi0iVXNlRm9yZWlnbkRURChbZmxhZ10pXG5cCi1BbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIHByb3ZpZGUgYW4gYXJ0aWZpY2lhbCBleHRlcm5hbCBzdWJzZXQgaWYgb25lIGlzXG5cCi1ub3Qgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlIGRvY3VtZW50IGluc3RhbmNlLiAgVGhpcyByZWFkaWx5IGFsbG93cyB0aGVcblwKLXVzZSBvZiBhICdkZWZhdWx0JyBkb2N1bWVudCB0eXBlIGNvbnRyb2xsZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCB3aGlsZSBzdGlsbFxuXAotZ2V0dGluZyB0aGUgYWR2YW50YWdlIG9mIHByb3ZpZGluZyBkb2N1bWVudCB0eXBlIGluZm9ybWF0aW9uIHRvIHRoZSBwYXJzZXIuXG5cCi0nZmxhZycgZGVmYXVsdHMgdG8gVHJ1ZSBpZiBub3QgcHJvdmlkZWQuIik7CisvKltjbGluaWMgaW5wdXRdCitweWV4cGF0LnhtbHBhcnNlci5Vc2VGb3JlaWduRFRECisKKyAgICBmbGFnOiBib29sID0gVHJ1ZQorICAgIC8KKworQWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBwcm92aWRlIGFuIGFydGlmaWNpYWwgZXh0ZXJuYWwgc3Vic2V0IGlmIG9uZSBpcyBub3Qgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlIGRvY3VtZW50IGluc3RhbmNlLgorCitUaGlzIHJlYWRpbHkgYWxsb3dzIHRoZSB1c2Ugb2YgYSAnZGVmYXVsdCcgZG9jdW1lbnQgdHlwZSBjb250cm9sbGVkIGJ5IHRoZQorYXBwbGljYXRpb24sIHdoaWxlIHN0aWxsIGdldHRpbmcgdGhlIGFkdmFudGFnZSBvZiBwcm92aWRpbmcgZG9jdW1lbnQgdHlwZQoraW5mb3JtYXRpb24gdG8gdGhlIHBhcnNlci4gJ2ZsYWcnIGRlZmF1bHRzIHRvIFRydWUgaWYgbm90IHByb3ZpZGVkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgoteG1scGFyc2VfVXNlRm9yZWlnbkRURCh4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitweWV4cGF0X3htbHBhcnNlcl9Vc2VGb3JlaWduRFREX2ltcGwoeG1scGFyc2VvYmplY3QgKnNlbGYsIGludCBmbGFnKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWNmYWE5YWE1MGJiMGY2NWMgaW5wdXQ9NzgxNDRjNTE5ZDExNmE2ZV0qLwogewotICAgIGludCBmbGFnID0gMTsKICAgICBlbnVtIFhNTF9FcnJvciByYzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxwOlVzZUZvcmVpZ25EVEQiLCAmZmxhZykpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmMgPSBYTUxfVXNlRm9yZWlnbkRURChzZWxmLT5pdHNlbGYsIGZsYWcgPyBYTUxfVFJVRSA6IFhNTF9GQUxTRSk7CiAgICAgaWYgKHJjICE9IFhNTF9FUlJPUl9OT05FKSB7CiAgICAgICAgIHJldHVybiBzZXRfZXJyb3Ioc2VsZiwgcmMpOwpAQCAtOTkyLDI5ICsxMDM0LDcwIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIFB5T2JqZWN0ICp4bWxwYXJzZV9kaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0KiBub2FyZ3MpOworLypbY2xpbmljIGlucHV0XQorcHlleHBhdC54bWxwYXJzZXIuX19kaXJfXworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorcHlleHBhdF94bWxwYXJzZXJfX19kaXJfX19pbXBsKHhtbHBhcnNlb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJjMjI0NTFlZmI5ZTRkMTcgaW5wdXQ9NzZhYTQ1NWYyYTY2MTM4NF0qLworeworI2RlZmluZSBBUFBFTkQobGlzdCwgc3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHN0cik7ICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKG8gIT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQobGlzdCwgbyk7ICAgICAgICAgXAorICAgICAgICAgICAgICAgIFB5X1hERUNSRUYobyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisKKyAgICBpbnQgaTsKKyAgICBQeU9iamVjdCAqcmMgPSBQeUxpc3RfTmV3KDApOworICAgIGlmICghcmMpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykgeworICAgICAgICBQeU9iamVjdCAqbyA9IGdldF9oYW5kbGVyX25hbWUoJmhhbmRsZXJfaW5mb1tpXSk7CisgICAgICAgIGlmIChvICE9IE5VTEwpCisgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHJjLCBvKTsKKyAgICAgICAgUHlfWERFQ1JFRihvKTsKKyAgICB9CisgICAgQVBQRU5EKHJjLCAiRXJyb3JDb2RlIik7CisgICAgQVBQRU5EKHJjLCAiRXJyb3JMaW5lTnVtYmVyIik7CisgICAgQVBQRU5EKHJjLCAiRXJyb3JDb2x1bW5OdW1iZXIiKTsKKyAgICBBUFBFTkQocmMsICJFcnJvckJ5dGVJbmRleCIpOworICAgIEFQUEVORChyYywgIkN1cnJlbnRMaW5lTnVtYmVyIik7CisgICAgQVBQRU5EKHJjLCAiQ3VycmVudENvbHVtbk51bWJlciIpOworICAgIEFQUEVORChyYywgIkN1cnJlbnRCeXRlSW5kZXgiKTsKKyAgICBBUFBFTkQocmMsICJidWZmZXJfc2l6ZSIpOworICAgIEFQUEVORChyYywgImJ1ZmZlcl90ZXh0Iik7CisgICAgQVBQRU5EKHJjLCAiYnVmZmVyX3VzZWQiKTsKKyAgICBBUFBFTkQocmMsICJuYW1lc3BhY2VfcHJlZml4ZXMiKTsKKyAgICBBUFBFTkQocmMsICJvcmRlcmVkX2F0dHJpYnV0ZXMiKTsKKyAgICBBUFBFTkQocmMsICJzcGVjaWZpZWRfYXR0cmlidXRlcyIpOworICAgIEFQUEVORChyYywgImludGVybiIpOworCisjdW5kZWYgQVBQRU5ECisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYocmMpOworICAgICAgICByYyA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHhtbHBhcnNlX21ldGhvZHNbXSA9IHsKLSAgICB7IlBhcnNlIiwgICAgIChQeUNGdW5jdGlvbil4bWxwYXJzZV9QYXJzZSwKLSAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgeG1scGFyc2VfUGFyc2VfX2RvY19ffSwKLSAgICB7IlBhcnNlRmlsZSIsIChQeUNGdW5jdGlvbil4bWxwYXJzZV9QYXJzZUZpbGUsCi0gICAgICAgICAgICAgICAgICBNRVRIX08sICAgICAgIHhtbHBhcnNlX1BhcnNlRmlsZV9fZG9jX199LAotICAgIHsiU2V0QmFzZSIsICAgKFB5Q0Z1bmN0aW9uKXhtbHBhcnNlX1NldEJhc2UsCi0gICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsIHhtbHBhcnNlX1NldEJhc2VfX2RvY19ffSwKLSAgICB7IkdldEJhc2UiLCAgIChQeUNGdW5jdGlvbil4bWxwYXJzZV9HZXRCYXNlLAotICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIHhtbHBhcnNlX0dldEJhc2VfX2RvY19ffSwKLSAgICB7IkV4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlIiwgKFB5Q0Z1bmN0aW9uKXhtbHBhcnNlX0V4dGVybmFsRW50aXR5UGFyc2VyQ3JlYXRlLAotICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLCB4bWxwYXJzZV9FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZV9fZG9jX199LAotICAgIHsiU2V0UGFyYW1FbnRpdHlQYXJzaW5nIiwgKFB5Q0Z1bmN0aW9uKXhtbHBhcnNlX1NldFBhcmFtRW50aXR5UGFyc2luZywKLSAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywgeG1scGFyc2VfU2V0UGFyYW1FbnRpdHlQYXJzaW5nX19kb2NfX30sCi0gICAgeyJHZXRJbnB1dENvbnRleHQiLCAoUHlDRnVuY3Rpb24peG1scGFyc2VfR2V0SW5wdXRDb250ZXh0LAotICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIHhtbHBhcnNlX0dldElucHV0Q29udGV4dF9fZG9jX199LAorICAgIFBZRVhQQVRfWE1MUEFSU0VSX1BBUlNFX01FVEhPRERFRgorICAgIFBZRVhQQVRfWE1MUEFSU0VSX1BBUlNFRklMRV9NRVRIT0RERUYKKyAgICBQWUVYUEFUX1hNTFBBUlNFUl9TRVRCQVNFX01FVEhPRERFRgorICAgIFBZRVhQQVRfWE1MUEFSU0VSX0dFVEJBU0VfTUVUSE9EREVGCisgICAgUFlFWFBBVF9YTUxQQVJTRVJfR0VUSU5QVVRDT05URVhUX01FVEhPRERFRgorICAgIFBZRVhQQVRfWE1MUEFSU0VSX0VYVEVSTkFMRU5USVRZUEFSU0VSQ1JFQVRFX01FVEhPRERFRgorICAgIFBZRVhQQVRfWE1MUEFSU0VSX1NFVFBBUkFNRU5USVRZUEFSU0lOR19NRVRIT0RERUYKICNpZiBYTUxfQ09NQklORURfVkVSU0lPTiA+PSAxOTUwNQotICAgIHsiVXNlRm9yZWlnbkRURCIsIChQeUNGdW5jdGlvbil4bWxwYXJzZV9Vc2VGb3JlaWduRFRELAotICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLCB4bWxwYXJzZV9Vc2VGb3JlaWduRFREX19kb2NfX30sCisgICAgUFlFWFBBVF9YTUxQQVJTRVJfVVNFRk9SRUlHTkRURF9NRVRIT0RERUYKICNlbmRpZgotICAgIHsiX19kaXJfXyIsIHhtbHBhcnNlX2RpciwgTUVUSF9OT0FSR1N9LAotICAgIHtOVUxMLCAgICAgICAgTlVMTH0gICAgICAgICAvKiBzZW50aW5lbCAqLworICAgIFBZRVhQQVRfWE1MUEFSU0VSX19fRElSX19fTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9ICAvKiBzZW50aW5lbCAqLwogfTsKIAogLyogLS0tLS0tLS0tLSAqLwpAQCAtMTA3Nyw3ICsxMTYwLDcgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotbmV3eG1scGFyc2VvYmplY3QoY2hhciAqZW5jb2RpbmcsIGNoYXIgKm5hbWVzcGFjZV9zZXBhcmF0b3IsIFB5T2JqZWN0ICppbnRlcm4pCituZXd4bWxwYXJzZW9iamVjdChjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqbmFtZXNwYWNlX3NlcGFyYXRvciwgUHlPYmplY3QgKmludGVybikKIHsKICAgICBpbnQgaTsKICAgICB4bWxwYXJzZW9iamVjdCAqc2VsZjsKQEAgLTEyNTUsNTIgKzEzMzgsNiBAQAogICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cigoUHlPYmplY3QqKXNlbGYsIG5hbWVvYmopOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgoteG1scGFyc2VfZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCogbm9hcmdzKQotewotI2RlZmluZSBBUFBFTkQobGlzdCwgc3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqbyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHN0cik7ICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKG8gIT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQobGlzdCwgbyk7ICAgICAgICAgXAotICAgICAgICAgICAgICAgIFB5X1hERUNSRUYobyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gd2hpbGUgKDApCi0KLSAgICBpbnQgaTsKLSAgICBQeU9iamVjdCAqcmMgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmICghcmMpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykgewotICAgICAgICBQeU9iamVjdCAqbyA9IGdldF9oYW5kbGVyX25hbWUoJmhhbmRsZXJfaW5mb1tpXSk7Ci0gICAgICAgIGlmIChvICE9IE5VTEwpCi0gICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHJjLCBvKTsKLSAgICAgICAgUHlfWERFQ1JFRihvKTsKLSAgICB9Ci0gICAgQVBQRU5EKHJjLCAiRXJyb3JDb2RlIik7Ci0gICAgQVBQRU5EKHJjLCAiRXJyb3JMaW5lTnVtYmVyIik7Ci0gICAgQVBQRU5EKHJjLCAiRXJyb3JDb2x1bW5OdW1iZXIiKTsKLSAgICBBUFBFTkQocmMsICJFcnJvckJ5dGVJbmRleCIpOwotICAgIEFQUEVORChyYywgIkN1cnJlbnRMaW5lTnVtYmVyIik7Ci0gICAgQVBQRU5EKHJjLCAiQ3VycmVudENvbHVtbk51bWJlciIpOwotICAgIEFQUEVORChyYywgIkN1cnJlbnRCeXRlSW5kZXgiKTsKLSAgICBBUFBFTkQocmMsICJidWZmZXJfc2l6ZSIpOwotICAgIEFQUEVORChyYywgImJ1ZmZlcl90ZXh0Iik7Ci0gICAgQVBQRU5EKHJjLCAiYnVmZmVyX3VzZWQiKTsKLSAgICBBUFBFTkQocmMsICJuYW1lc3BhY2VfcHJlZml4ZXMiKTsKLSAgICBBUFBFTkQocmMsICJvcmRlcmVkX2F0dHJpYnV0ZXMiKTsKLSAgICBBUFBFTkQocmMsICJzcGVjaWZpZWRfYXR0cmlidXRlcyIpOwotICAgIEFQUEVORChyYywgImludGVybiIpOwotCi0jdW5kZWYgQVBQRU5ECi0KLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBQeV9ERUNSRUYocmMpOwotICAgICAgICByYyA9IE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCiBzdGF0aWMgaW50CiBzZXRoYW5kbGVyKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QqIHYpCiB7CkBAIC0xNTEyLDI0ICsxNTQ5LDI0IEBACiAvKiBFbmQgb2YgY29kZSBmb3IgeG1scGFyc2VyIG9iamVjdHMgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLVB5RG9jX1NUUlZBUihweWV4cGF0X1BhcnNlckNyZWF0ZV9fZG9jX18sCi0iUGFyc2VyQ3JlYXRlKFtlbmNvZGluZ1ssIG5hbWVzcGFjZV9zZXBhcmF0b3JdXSkgLT4gcGFyc2VyXG5cCi1SZXR1cm4gYSBuZXcgWE1MIHBhcnNlciBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitweWV4cGF0LlBhcnNlckNyZWF0ZQorCisgICAgZW5jb2Rpbmc6IHN0cihhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KSA9IE5VTEwKKyAgICBuYW1lc3BhY2Vfc2VwYXJhdG9yOiBzdHIoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkgPSBOVUxMCisgICAgaW50ZXJuOiBvYmplY3QgPSBOVUxMCisKK1JldHVybiBhIG5ldyBYTUwgcGFyc2VyIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXB5ZXhwYXRfUGFyc2VyQ3JlYXRlKFB5T2JqZWN0ICpub3R1c2VkLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQorcHlleHBhdF9QYXJzZXJDcmVhdGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZXNwYWNlX3NlcGFyYXRvciwgUHlPYmplY3QgKmludGVybikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yOTVjMGNmMDFhYjExNDZjIGlucHV0PTIzZDI5NzA0YWNhZDM4NWRdKi8KIHsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqbmFtZXNwYWNlX3NlcGFyYXRvciA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmludGVybiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBpbnQgaW50ZXJuX2RlY3JlZiA9IDA7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJlbmNvZGluZyIsICJuYW1lc3BhY2Vfc2VwYXJhdG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVybiIsIE5VTEx9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8enpPOlBhcnNlckNyZWF0ZSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jb2RpbmcsICZuYW1lc3BhY2Vfc2VwYXJhdG9yLCAmaW50ZXJuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKG5hbWVzcGFjZV9zZXBhcmF0b3IgIT0gTlVMTAogICAgICAgICAmJiBzdHJsZW4obmFtZXNwYWNlX3NlcGFyYXRvcikgPiAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtMTU1OSwyOSArMTU5NiwyOCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVB5RG9jX1NUUlZBUihweWV4cGF0X0Vycm9yU3RyaW5nX19kb2NfXywKLSJFcnJvclN0cmluZyhlcnJubykgLT4gc3RyaW5nXG5cCi1SZXR1cm5zIHN0cmluZyBlcnJvciBmb3IgZ2l2ZW4gbnVtYmVyLiIpOworLypbY2xpbmljIGlucHV0XQorcHlleHBhdC5FcnJvclN0cmluZworCisgICAgY29kZTogbG9uZworICAgIC8KKworUmV0dXJucyBzdHJpbmcgZXJyb3IgZm9yIGdpdmVuIG51bWJlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXB5ZXhwYXRfRXJyb3JTdHJpbmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcHlleHBhdF9FcnJvclN0cmluZ19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGxvbmcgY29kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yZmVhZTUwZDE2NmYyMTc0IGlucHV0PWNjNjdkZTAxMGQ5ZTYyYjNdKi8KIHsKLSAgICBsb25nIGNvZGUgPSAwOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsOkVycm9yU3RyaW5nIiwgJmNvZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgieiIsIFhNTF9FcnJvclN0cmluZygoaW50KWNvZGUpKTsKIH0KIAogLyogTGlzdCBvZiBtZXRob2RzIGRlZmluZWQgaW4gdGhlIG1vZHVsZSAqLwogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHB5ZXhwYXRfbWV0aG9kc1tdID0gewotICAgIHsiUGFyc2VyQ3JlYXRlIiwgICAgKFB5Q0Z1bmN0aW9uKXB5ZXhwYXRfUGFyc2VyQ3JlYXRlLAotICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgcHlleHBhdF9QYXJzZXJDcmVhdGVfX2RvY19ffSwKLSAgICB7IkVycm9yU3RyaW5nIiwgICAgIChQeUNGdW5jdGlvbilweWV4cGF0X0Vycm9yU3RyaW5nLAotICAgICBNRVRIX1ZBUkFSR1MsICAgICAgcHlleHBhdF9FcnJvclN0cmluZ19fZG9jX199LAotCi0gICAge05VTEwsICAgICAgIChQeUNGdW5jdGlvbilOVUxMLCAwLCBOVUxMfSAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCisgICAgUFlFWFBBVF9QQVJTRVJDUkVBVEVfTUVUSE9EREVGCisgICAgUFlFWFBBVF9FUlJPUlNUUklOR19NRVRIT0RERUYKKyAgICB7TlVMTCwgTlVMTH0gIC8qIHNlbnRpbmVsICovCiB9OwogCiAvKiBNb2R1bGUgZG9jc3RyaW5nICovCkBAIC0xNTk5LDE2ICsxNjM1LDYgQEAKICNkZWZpbmUgTU9EVUxFX0lOSVRGVU5DIFB5SW5pdF9weWV4cGF0CiAjZW5kaWYKIAotI2lmbmRlZiBQeU1PRElOSVRfRlVOQwotIyAgIGlmZGVmIE1TX1dJTkRPV1MKLSMgICAgICAgZGVmaW5lIFB5TU9ESU5JVF9GVU5DIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSB2b2lkCi0jICAgZWxzZQotIyAgICAgICBkZWZpbmUgUHlNT0RJTklUX0ZVTkMgdm9pZAotIyAgIGVuZGlmCi0jZW5kaWYKLQotUHlNT0RJTklUX0ZVTkMgTU9EVUxFX0lOSVRGVU5DKHZvaWQpOyAgLyogYXZvaWQgY29tcGlsZXIgd2FybmluZ3MgKi8KLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBweWV4cGF0bW9kdWxlID0gewogICAgICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgICAgIE1PRFVMRV9OQU1FLApAQCAtMTY2Niw3ICsxNjkyLDcgQEAKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlhNTFBhcnNlclR5cGUiLCAoUHlPYmplY3QgKikgJlhtbHBhcnNldHlwZSk7CiAKICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAiRVhQQVRfVkVSU0lPTiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgWE1MX0V4cGF0VmVyc2lvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRXhwYXRWZXJzaW9uKCkpOwogICAgIHsKICAgICAgICAgWE1MX0V4cGF0X1ZlcnNpb24gaW5mbyA9IFhNTF9FeHBhdFZlcnNpb25JbmZvKCk7CiAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAidmVyc2lvbl9pbmZvIiwKQEAgLTE3NDYsNyArMTc3Miw3IEBACiAKICNkZWZpbmUgTVlDT05TVChuYW1lKSBcCiAgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KGVycm9yc19tb2R1bGUsICNuYW1lLCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilYTUxfRXJyb3JTdHJpbmcobmFtZSkpIDwgMCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfRXJyb3JTdHJpbmcobmFtZSkpIDwgMCkgICAgICAgICBcCiAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB0bXBudW0gPSBQeUxvbmdfRnJvbUxvbmcobmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICh0bXBudW0gPT0gTlVMTCkgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xOTU3LDMgKzE5ODMsOCBAQAogCiAgICAge05VTEwsIE5VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OworCisvKltjbGluaWMgaW5wdXRdCitkdW1wIGJ1ZmZlcgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NTI0Y2UyZTAyMWU0ZWJhNl0qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IGU5ZWFiZjUuLjkxZjdjY2EgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTc4LDEwICs3OCwxMiBAQAogc3RhdGljIGNoYXIgKmNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnM7CiAKIHR5cGVkZWYgc3RydWN0IHsKKyAgLyogU3BlY2lmeSBob29rIGZ1bmN0aW9ucyBpbiBQeXRob24gKi8KICAgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2s7CiAgIFB5T2JqZWN0ICpzdGFydHVwX2hvb2s7CiAgIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vazsKLSAgUHlPYmplY3QgKmNvbXBsZXRlcjsKKworICBQeU9iamVjdCAqY29tcGxldGVyOyAvKiBTcGVjaWZ5IGEgd29yZCBjb21wbGV0ZXIgaW4gUHl0aG9uICovCiAgIFB5T2JqZWN0ICpiZWdpZHg7CiAgIFB5T2JqZWN0ICplbmRpZHg7CiB9IHJlYWRsaW5lc3RhdGU7CkBAIC0xMjYsMjAgKzEyOCw0MCBAQAogI2RlZmluZSByZWFkbGluZXN0YXRlX2dsb2JhbCAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJnJlYWRsaW5lbW9kdWxlKSkpCiAKIAorLyogQ29udmVydCB0by9mcm9tIG11bHRpYnl0ZSBDIHN0cmluZ3MgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZShQeU9iamVjdCAqYikKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZUxvY2FsZShiLCAic3Vycm9nYXRlZXNjYXBlIik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkZWNvZGUoY29uc3QgY2hhciAqcykKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUxvY2FsZShzLCAic3Vycm9nYXRlZXNjYXBlIik7Cit9CisKKwogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc2VuZCBvbmUgbGluZSB0byByZWFkbGluZSdzIGluaXQgZmlsZSBwYXJzZXIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBhcnNlX2FuZF9iaW5kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3BhcnNlX2FuZF9iaW5kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyaW5nKQogewotICAgIGNoYXIgKnMsICpjb3B5OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpwYXJzZV9hbmRfYmluZCIsICZzKSkKKyAgICBjaGFyICpjb3B5OworICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2RlKHN0cmluZyk7CisgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgLyogTWFrZSBhIGNvcHkgLS0gcmxfcGFyc2VfYW5kX2JpbmQoKSBtb2RpZmllcyBpdHMgYXJndW1lbnQgKi8KICAgICAvKiBCZXJuYXJkIEhlcnpvZyAqLwotICAgIGNvcHkgPSBQeU1lbV9NYWxsb2MoMSArIHN0cmxlbihzKSk7Ci0gICAgaWYgKGNvcHkgPT0gTlVMTCkKKyAgICBjb3B5ID0gUHlNZW1fTWFsbG9jKDEgKyBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgc3RyY3B5KGNvcHksIHMpOworICAgIH0KKyAgICBzdHJjcHkoY29weSwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCkpOworICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICBybF9wYXJzZV9hbmRfYmluZChjb3B5KTsKICAgICBQeU1lbV9GcmVlKGNvcHkpOyAvKiBGcmVlIHRoZSBjb3B5ICovCiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0xNDcsNyArMTY5LDcgQEAKIAogUHlEb2NfU1RSVkFSKGRvY19wYXJzZV9hbmRfYmluZCwKICJwYXJzZV9hbmRfYmluZChzdHJpbmcpIC0+IE5vbmVcblwKLVBhcnNlIGFuZCBleGVjdXRlIHNpbmdsZSBsaW5lIG9mIGEgcmVhZGxpbmUgaW5pdCBmaWxlLiIpOworRXhlY3V0ZSB0aGUgaW5pdCBsaW5lIHByb3ZpZGVkIGluIHRoZSBzdHJpbmcgYXJndW1lbnQuIik7CiAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gcGFyc2UgYSByZWFkbGluZSBpbml0IGZpbGUgKi8KQEAgLTE3Miw3ICsxOTQsNyBAQAogCiBQeURvY19TVFJWQVIoZG9jX3JlYWRfaW5pdF9maWxlLAogInJlYWRfaW5pdF9maWxlKFtmaWxlbmFtZV0pIC0+IE5vbmVcblwKLVBhcnNlIGEgcmVhZGxpbmUgaW5pdGlhbGl6YXRpb24gZmlsZS5cblwKK0V4ZWN1dGUgYSByZWFkbGluZSBpbml0aWFsaXphdGlvbiBmaWxlLlxuXAogVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMgdGhlIGxhc3QgZmlsZW5hbWUgdXNlZC4iKTsKIAogCkBAIC0yMzcsNiArMjU5LDQzIEBACiBUaGUgZGVmYXVsdCBmaWxlbmFtZSBpcyB+Ly5oaXN0b3J5LiIpOwogCiAKKyNpZmRlZiBIQVZFX1JMX0FQUEVORF9ISVNUT1JZCisvKiBFeHBvcnRlZCBmdW5jdGlvbiB0byBzYXZlIHBhcnQgb2YgYSByZWFkbGluZSBoaXN0b3J5IGZpbGUgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2FwcGVuZF9oaXN0b3J5X2ZpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBuZWxlbWVudHM7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lX29iaiA9IFB5X05vbmUsICpmaWxlbmFtZV9ieXRlczsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBpbnQgZXJyOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXxPOmFwcGVuZF9oaXN0b3J5X2ZpbGUiLCAmbmVsZW1lbnRzLCAmZmlsZW5hbWVfb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGZpbGVuYW1lX29iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKGZpbGVuYW1lX29iaiwgJmZpbGVuYW1lX2J5dGVzKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBmaWxlbmFtZSA9IFB5Qnl0ZXNfQXNTdHJpbmcoZmlsZW5hbWVfYnl0ZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbGVuYW1lX2J5dGVzID0gTlVMTDsKKyAgICAgICAgZmlsZW5hbWUgPSBOVUxMOworICAgIH0KKyAgICBlcnJubyA9IGVyciA9IGFwcGVuZF9oaXN0b3J5KG5lbGVtZW50cywgZmlsZW5hbWUpOworICAgIGlmICghZXJyICYmIF9oaXN0b3J5X2xlbmd0aCA+PSAwKQorICAgICAgICBoaXN0b3J5X3RydW5jYXRlX2ZpbGUoZmlsZW5hbWUsIF9oaXN0b3J5X2xlbmd0aCk7CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZV9ieXRlcyk7CisgICAgZXJybm8gPSBlcnI7CisgICAgaWYgKGVycm5vKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoZG9jX2FwcGVuZF9oaXN0b3J5X2ZpbGUsCisiYXBwZW5kX2hpc3RvcnlfZmlsZShuZWxlbWVudHNbLCBmaWxlbmFtZV0pIC0+IE5vbmVcblwKK0FwcGVuZCB0aGUgbGFzdCBuZWxlbWVudHMgaXRlbXMgb2YgdGhlIGhpc3RvcnkgbGlzdCB0byBmaWxlLlxuXAorVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMgfi8uaGlzdG9yeS4iKTsKKyNlbmRpZgorCisKIC8qIFNldCBoaXN0b3J5IGxlbmd0aCAqLwogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0yNTEsNyArMzEwLDcgQEAKIAogUHlEb2NfU1RSVkFSKHNldF9oaXN0b3J5X2xlbmd0aF9kb2MsCiAic2V0X2hpc3RvcnlfbGVuZ3RoKGxlbmd0aCkgLT4gTm9uZVxuXAotc2V0IHRoZSBtYXhpbWFsIG51bWJlciBvZiBpdGVtcyB3aGljaCB3aWxsIGJlIHdyaXR0ZW4gdG9cblwKK3NldCB0aGUgbWF4aW1hbCBudW1iZXIgb2YgbGluZXMgd2hpY2ggd2lsbCBiZSB3cml0dGVuIHRvXG5cCiB0aGUgaGlzdG9yeSBmaWxlLiBBIG5lZ2F0aXZlIGxlbmd0aCBpcyB1c2VkIHRvIGluaGliaXRcblwKIGhpc3RvcnkgdHJ1bmNhdGlvbi4iKTsKIApAQCAtMjY2LDcgKzMyNSw3IEBACiAKIFB5RG9jX1NUUlZBUihnZXRfaGlzdG9yeV9sZW5ndGhfZG9jLAogImdldF9oaXN0b3J5X2xlbmd0aCgpIC0+IGludFxuXAotcmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0b1xuXAorcmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0b1xuXAogdGhlIGhpc3RvcnkgZmlsZS4iKTsKIAogCkBAIC0yOTksMTMgKzM1OCw2IEBACiB9CiAKIAotLyogRXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHNwZWNpZnkgaG9vayBmdW5jdGlvbnMgaW4gUHl0aG9uICovCi0KLQotI2lmZGVmIEhBVkVfUkxfUFJFX0lOUFVUX0hPT0sKLQotI2VuZGlmCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0zNDEsNyArMzkzLDcgQEAKIAogUHlEb2NfU1RSVkFSKGRvY19zZXRfc3RhcnR1cF9ob29rLAogInNldF9zdGFydHVwX2hvb2soW2Z1bmN0aW9uXSkgLT4gTm9uZVxuXAotU2V0IG9yIHJlbW92ZSB0aGUgc3RhcnR1cF9ob29rIGZ1bmN0aW9uLlxuXAorU2V0IG9yIHJlbW92ZSB0aGUgZnVuY3Rpb24gaW52b2tlZCBieSB0aGUgcmxfc3RhcnR1cF9ob29rIGNhbGxiYWNrLlxuXAogVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cyBqdXN0XG5cCiBiZWZvcmUgcmVhZGxpbmUgcHJpbnRzIHRoZSBmaXJzdCBwcm9tcHQuIik7CiAKQEAgLTM1OCw3ICs0MTAsNyBAQAogCiBQeURvY19TVFJWQVIoZG9jX3NldF9wcmVfaW5wdXRfaG9vaywKICJzZXRfcHJlX2lucHV0X2hvb2soW2Z1bmN0aW9uXSkgLT4gTm9uZVxuXAotU2V0IG9yIHJlbW92ZSB0aGUgcHJlX2lucHV0X2hvb2sgZnVuY3Rpb24uXG5cCitTZXQgb3IgcmVtb3ZlIHRoZSBmdW5jdGlvbiBpbnZva2VkIGJ5IHRoZSBybF9wcmVfaW5wdXRfaG9vayBjYWxsYmFjay5cblwKIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgYWZ0ZXIgdGhlIGZpcnN0IHByb21wdFxuXAogaGFzIGJlZW4gcHJpbnRlZCBhbmQganVzdCBiZWZvcmUgcmVhZGxpbmUgc3RhcnRzIHJlYWRpbmcgaW5wdXRcblwKIGNoYXJhY3RlcnMuIik7CkBAIC0zNjYsMTQgKzQxOCw2IEBACiAjZW5kaWYKIAogCi0vKiBFeHBvcnRlZCBmdW5jdGlvbiB0byBzcGVjaWZ5IGEgd29yZCBjb21wbGV0ZXIgaW4gUHl0aG9uICovCi0KLQotCi0KLQotCi0KIC8qIEdldCB0aGUgY29tcGxldGlvbiB0eXBlIGZvciB0aGUgc2NvcGUgb2YgdGhlIHRhYi1jb21wbGV0aW9uICovCiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2NvbXBsZXRpb25fdHlwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQpAQCAtMzk3LDcgKzQ0MSw3IEBACiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2JlZ2lkeCwKICJnZXRfYmVnaWR4KCkgLT4gaW50XG5cCi1nZXQgdGhlIGJlZ2lubmluZyBpbmRleCBvZiB0aGUgcmVhZGxpbmUgdGFiLWNvbXBsZXRpb24gc2NvcGUiKTsKK2dldCB0aGUgYmVnaW5uaW5nIGluZGV4IG9mIHRoZSBjb21wbGV0aW9uIHNjb3BlIik7CiAKIAogLyogR2V0IHRoZSBlbmRpbmcgaW5kZXggZm9yIHRoZSBzY29wZSBvZiB0aGUgdGFiLWNvbXBsZXRpb24gKi8KQEAgLTQxMSwyMyArNDU1LDI0IEBACiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2VuZGlkeCwKICJnZXRfZW5kaWR4KCkgLT4gaW50XG5cCi1nZXQgdGhlIGVuZGluZyBpbmRleCBvZiB0aGUgcmVhZGxpbmUgdGFiLWNvbXBsZXRpb24gc2NvcGUiKTsKK2dldCB0aGUgZW5kaW5nIGluZGV4IG9mIHRoZSBjb21wbGV0aW9uIHNjb3BlIik7CiAKIAogLyogU2V0IHRoZSB0YWItY29tcGxldGlvbiB3b3JkLWRlbGltaXRlcnMgdGhhdCByZWFkbGluZSB1c2VzICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zZXRfY29tcGxldGVyX2RlbGltcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzZXRfY29tcGxldGVyX2RlbGltcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZykKIHsKICAgICBjaGFyICpicmVha19jaGFyczsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpzZXRfY29tcGxldGVyX2RlbGltcyIsICZicmVha19jaGFycykpIHsKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZShzdHJpbmcpOworICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIC8qIEtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW4gdGhlIG1vZHVsZSBzdGF0ZSBpbiBjYXNlCiAgICAgICAgc29tZSBvdGhlciBtb2R1bGUgbW9kaWZpZXMgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycwogICAgICAgIChzZWUgaXNzdWUgIzE3Mjg5KS4gKi8KLSAgICBicmVha19jaGFycyA9IHN0cmR1cChicmVha19jaGFycyk7CisgICAgYnJlYWtfY2hhcnMgPSBzdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCkpOworICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICBpZiAoYnJlYWtfY2hhcnMpIHsKICAgICAgICAgZnJlZShjb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzKTsKICAgICAgICAgY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyA9IGJyZWFrX2NoYXJzOwpAQCAtNDQwLDcgKzQ4NSw3IEBACiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X2NvbXBsZXRlcl9kZWxpbXMsCiAic2V0X2NvbXBsZXRlcl9kZWxpbXMoc3RyaW5nKSAtPiBOb25lXG5cCi1zZXQgdGhlIHJlYWRsaW5lIHdvcmQgZGVsaW1pdGVycyBmb3IgdGFiLWNvbXBsZXRpb24iKTsKK3NldCB0aGUgd29yZCBkZWxpbWl0ZXJzIGZvciBjb21wbGV0aW9uIik7CiAKIC8qIF9weV9mcmVlX2hpc3RvcnlfZW50cnk6IFV0aWxpdHkgZnVuY3Rpb24gdG8gZnJlZSBhIGhpc3RvcnkgZW50cnkuICovCiAKQEAgLTQ4MCw3ICs1MjUsNyBAQAogICAgIGludCBlbnRyeV9udW1iZXI7CiAgICAgSElTVF9FTlRSWSAqZW50cnk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6cmVtb3ZlX2hpc3RvcnkiLCAmZW50cnlfbnVtYmVyKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6cmVtb3ZlX2hpc3RvcnlfaXRlbSIsICZlbnRyeV9udW1iZXIpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoZW50cnlfbnVtYmVyIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTUwNywxMCArNTUyLDExIEBACiBweV9yZXBsYWNlX2hpc3RvcnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBlbnRyeV9udW1iZXI7Ci0gICAgY2hhciAqbGluZTsKKyAgICBQeU9iamVjdCAqbGluZTsKKyAgICBQeU9iamVjdCAqZW5jb2RlZDsKICAgICBISVNUX0VOVFJZICpvbGRfZW50cnk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlzOnJlcGxhY2VfaGlzdG9yeSIsICZlbnRyeV9udW1iZXIsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpVTpyZXBsYWNlX2hpc3RvcnlfaXRlbSIsICZlbnRyeV9udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC01MTksNyArNTY1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiSGlzdG9yeSBpbmRleCBjYW5ub3QgYmUgbmVnYXRpdmUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG9sZF9lbnRyeSA9IHJlcGxhY2VfaGlzdG9yeV9lbnRyeShlbnRyeV9udW1iZXIsIGxpbmUsICh2b2lkICopTlVMTCk7CisgICAgZW5jb2RlZCA9IGVuY29kZShsaW5lKTsKKyAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvbGRfZW50cnkgPSByZXBsYWNlX2hpc3RvcnlfZW50cnkoZW50cnlfbnVtYmVyLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwgKHZvaWQgKilOVUxMKTsKKyAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgaWYgKCFvbGRfZW50cnkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiTm8gaGlzdG9yeSBpdGVtIGF0IHBvc2l0aW9uICVkIiwKQEAgLTUzOCwyMCArNTg5LDIwIEBACiAvKiBBZGQgYSBsaW5lIHRvIHRoZSBoaXN0b3J5IGJ1ZmZlciAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcHlfYWRkX2hpc3RvcnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcHlfYWRkX2hpc3RvcnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJpbmcpCiB7Ci0gICAgY2hhciAqbGluZTsKLQotICAgIGlmKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmFkZF9oaXN0b3J5IiwgJmxpbmUpKSB7CisgICAgUHlPYmplY3QgKmVuY29kZWQgPSBlbmNvZGUoc3RyaW5nKTsKKyAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBhZGRfaGlzdG9yeShsaW5lKTsKKyAgICBhZGRfaGlzdG9yeShQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSk7CisgICAgUHlfREVDUkVGKGVuY29kZWQpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBQeURvY19TVFJWQVIoZG9jX2FkZF9oaXN0b3J5LAogImFkZF9oaXN0b3J5KHN0cmluZykgLT4gTm9uZVxuXAotYWRkIGEgbGluZSB0byB0aGUgaGlzdG9yeSBidWZmZXIiKTsKK2FkZCBhbiBpdGVtIHRvIHRoZSBoaXN0b3J5IGJ1ZmZlciIpOwogCiAKIC8qIEdldCB0aGUgdGFiLWNvbXBsZXRpb24gd29yZC1kZWxpbWl0ZXJzIHRoYXQgcmVhZGxpbmUgdXNlcyAqLwpAQCAtNTU5LDEyICs2MTAsMTIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfY29tcGxldGVyX2RlbGltcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhybF9jb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzKTsKKyAgICByZXR1cm4gZGVjb2RlKHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMpOwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9jb21wbGV0ZXJfZGVsaW1zLAogImdldF9jb21wbGV0ZXJfZGVsaW1zKCkgLT4gc3RyaW5nXG5cCi1nZXQgdGhlIHJlYWRsaW5lIHdvcmQgZGVsaW1pdGVycyBmb3IgdGFiLWNvbXBsZXRpb24iKTsKK2dldCB0aGUgd29yZCBkZWxpbWl0ZXJzIGZvciBjb21wbGV0aW9uIik7CiAKIAogLyogU2V0IHRoZSBjb21wbGV0ZXIgZnVuY3Rpb24gKi8KQEAgLTYyNSw3ICs2NzYsNyBAQAogICAgIGludCBpZHggPSAwOwogICAgIEhJU1RfRU5UUlkgKmhpc3RfZW50OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmluZGV4IiwgJmlkeCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmdldF9oaXN0b3J5X2l0ZW0iLCAmaWR4KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAjaWZkZWYgIF9fQVBQTEVfXwogICAgIGlmICh1c2luZ19saWJlZGl0X2VtdWxhdGlvbikgewpAQCAtNjQ5LDcgKzcwMCw3IEBACiAgICAgfQogI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwogICAgIGlmICgoaGlzdF9lbnQgPSBoaXN0b3J5X2dldChpZHgpKSkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGhpc3RfZW50LT5saW5lKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZShoaXN0X2VudC0+bGluZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KQEAgLTY3OCw3ICs3MjksNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9saW5lX2J1ZmZlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhybF9saW5lX2J1ZmZlcik7CisgICAgcmV0dXJuIGRlY29kZShybF9saW5lX2J1ZmZlcik7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2xpbmVfYnVmZmVyLApAQCAtNzA2LDE4ICs3NTcsMjAgQEAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIGluc2VydCB0ZXh0IGludG8gdGhlIGxpbmUgYnVmZmVyICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pbnNlcnRfdGV4dChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitpbnNlcnRfdGV4dChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZykKIHsKLSAgICBjaGFyICpzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczppbnNlcnRfdGV4dCIsICZzKSkKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZShzdHJpbmcpOworICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmxfaW5zZXJ0X3RleHQocyk7CisgICAgfQorICAgIHJsX2luc2VydF90ZXh0KFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpKTsKKyAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfaW5zZXJ0X3RleHQsCiAiaW5zZXJ0X3RleHQoc3RyaW5nKSAtPiBOb25lXG5cCi1JbnNlcnQgdGV4dCBpbnRvIHRoZSBjb21tYW5kIGxpbmUuIik7CitJbnNlcnQgdGV4dCBpbnRvIHRoZSBsaW5lIGJ1ZmZlciBhdCB0aGUgY3Vyc29yIHBvc2l0aW9uLiIpOwogCiAKIC8qIFJlZGlzcGxheSB0aGUgbGluZSBidWZmZXIgKi8KQEAgLTczOSwxNSArNzkyLDE5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgcmVhZGxpbmVfbWV0aG9kc1tdID0KIHsKLSAgICB7InBhcnNlX2FuZF9iaW5kIiwgcGFyc2VfYW5kX2JpbmQsIE1FVEhfVkFSQVJHUywgZG9jX3BhcnNlX2FuZF9iaW5kfSwKKyAgICB7InBhcnNlX2FuZF9iaW5kIiwgcGFyc2VfYW5kX2JpbmQsIE1FVEhfTywgZG9jX3BhcnNlX2FuZF9iaW5kfSwKICAgICB7ImdldF9saW5lX2J1ZmZlciIsIGdldF9saW5lX2J1ZmZlciwgTUVUSF9OT0FSR1MsIGRvY19nZXRfbGluZV9idWZmZXJ9LAotICAgIHsiaW5zZXJ0X3RleHQiLCBpbnNlcnRfdGV4dCwgTUVUSF9WQVJBUkdTLCBkb2NfaW5zZXJ0X3RleHR9LAorICAgIHsiaW5zZXJ0X3RleHQiLCBpbnNlcnRfdGV4dCwgTUVUSF9PLCBkb2NfaW5zZXJ0X3RleHR9LAogICAgIHsicmVkaXNwbGF5IiwgcmVkaXNwbGF5LCBNRVRIX05PQVJHUywgZG9jX3JlZGlzcGxheX0sCiAgICAgeyJyZWFkX2luaXRfZmlsZSIsIHJlYWRfaW5pdF9maWxlLCBNRVRIX1ZBUkFSR1MsIGRvY19yZWFkX2luaXRfZmlsZX0sCiAgICAgeyJyZWFkX2hpc3RvcnlfZmlsZSIsIHJlYWRfaGlzdG9yeV9maWxlLAogICAgICBNRVRIX1ZBUkFSR1MsIGRvY19yZWFkX2hpc3RvcnlfZmlsZX0sCiAgICAgeyJ3cml0ZV9oaXN0b3J5X2ZpbGUiLCB3cml0ZV9oaXN0b3J5X2ZpbGUsCiAgICAgIE1FVEhfVkFSQVJHUywgZG9jX3dyaXRlX2hpc3RvcnlfZmlsZX0sCisjaWZkZWYgSEFWRV9STF9BUFBFTkRfSElTVE9SWQorICAgIHsiYXBwZW5kX2hpc3RvcnlfZmlsZSIsIGFwcGVuZF9oaXN0b3J5X2ZpbGUsCisgICAgIE1FVEhfVkFSQVJHUywgZG9jX2FwcGVuZF9oaXN0b3J5X2ZpbGV9LAorI2VuZGlmCiAgICAgeyJnZXRfaGlzdG9yeV9pdGVtIiwgZ2V0X2hpc3RvcnlfaXRlbSwKICAgICAgTUVUSF9WQVJBUkdTLCBkb2NfZ2V0X2hpc3RvcnlfaXRlbX0sCiAgICAgeyJnZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCIsIChQeUNGdW5jdGlvbilnZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCwKQEAgLTc2NCw4ICs4MjEsOCBAQAogICAgIHsiZ2V0X2VuZGlkeCIsIGdldF9lbmRpZHgsIE1FVEhfTk9BUkdTLCBkb2NfZ2V0X2VuZGlkeH0sCiAKICAgICB7InNldF9jb21wbGV0ZXJfZGVsaW1zIiwgc2V0X2NvbXBsZXRlcl9kZWxpbXMsCi0gICAgIE1FVEhfVkFSQVJHUywgZG9jX3NldF9jb21wbGV0ZXJfZGVsaW1zfSwKLSAgICB7ImFkZF9oaXN0b3J5IiwgcHlfYWRkX2hpc3RvcnksIE1FVEhfVkFSQVJHUywgZG9jX2FkZF9oaXN0b3J5fSwKKyAgICAgTUVUSF9PLCBkb2Nfc2V0X2NvbXBsZXRlcl9kZWxpbXN9LAorICAgIHsiYWRkX2hpc3RvcnkiLCBweV9hZGRfaGlzdG9yeSwgTUVUSF9PLCBkb2NfYWRkX2hpc3Rvcnl9LAogICAgIHsicmVtb3ZlX2hpc3RvcnlfaXRlbSIsIHB5X3JlbW92ZV9oaXN0b3J5LCBNRVRIX1ZBUkFSR1MsIGRvY19yZW1vdmVfaGlzdG9yeX0sCiAgICAgeyJyZXBsYWNlX2hpc3RvcnlfaXRlbSIsIHB5X3JlcGxhY2VfaGlzdG9yeSwgTUVUSF9WQVJBUkdTLCBkb2NfcmVwbGFjZV9oaXN0b3J5fSwKICAgICB7ImdldF9jb21wbGV0ZXJfZGVsaW1zIiwgZ2V0X2NvbXBsZXRlcl9kZWxpbXMsCkBAIC04NjIsNyArOTE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9tYXRjaGVzLCBpbnQgbWF4X2xlbmd0aCkKIHsKICAgICBpbnQgaTsKLSAgICBQeU9iamVjdCAqbT1OVUxMLCAqcz1OVUxMLCAqcj1OVUxMOworICAgIFB5T2JqZWN0ICpzdWIsICptPU5VTEwsICpzPU5VTEwsICpyPU5VTEw7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKICNlbmRpZgpAQCAtODcwLDE2ICs5MjcsMTcgQEAKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fbWF0Y2hlczsgaSsrKSB7Ci0gICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtYXRjaGVzW2krMV0pOworICAgICAgICBzID0gZGVjb2RlKG1hdGNoZXNbaSsxXSk7CiAgICAgICAgIGlmIChzID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBpZiAoUHlMaXN0X1NldEl0ZW0obSwgaSwgcykgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKyAgICBzdWIgPSBkZWNvZGUobWF0Y2hlc1swXSk7CiAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzT2kiLCBtYXRjaGVzWzBdLCBtLCBtYXhfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOTmkiLCBzdWIsIG0sIG1heF9sZW5ndGgpOwogCi0gICAgUHlfREVDUkVGKG0pOyBtPU5VTEw7CisgICAgbT1OVUxMOwogCiAgICAgaWYgKHIgPT0gTlVMTCB8fAogICAgICAgICAociAhPSBQeV9Ob25lICYmIFB5TG9uZ19Bc0xvbmcocikgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIHsKQEAgLTkwMCw2ICs5NTgsMjYgQEAKIAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1JMX1JFU0laRV9URVJNSU5BTAorc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBzaWd3aW5jaF9yZWNlaXZlZDsKK3N0YXRpYyBQeU9TX3NpZ2hhbmRsZXJfdCBzaWd3aW5jaF9vaGFuZGxlcjsKKworc3RhdGljIHZvaWQKK3JlYWRsaW5lX3NpZ3dpbmNoX2hhbmRsZXIoaW50IHNpZ251bSkKK3sKKyAgICBzaWd3aW5jaF9yZWNlaXZlZCA9IDE7CisgICAgaWYgKHNpZ3dpbmNoX29oYW5kbGVyICYmCisgICAgICAgICAgICBzaWd3aW5jaF9vaGFuZGxlciAhPSBTSUdfSUdOICYmIHNpZ3dpbmNoX29oYW5kbGVyICE9IFNJR19ERkwpCisgICAgICAgIHNpZ3dpbmNoX29oYW5kbGVyKHNpZ251bSk7CisKKyNpZm5kZWYgSEFWRV9TSUdBQ1RJT04KKyAgICAvKiBJZiB0aGUgaGFuZGxlciB3YXMgaW5zdGFsbGVkIHdpdGggc2lnbmFsKCkgcmF0aGVyIHRoYW4gc2lnYWN0aW9uKCksCisgICAgd2UgbmVlZCB0byByZWluc3RhbGwgaXQuICovCisgICAgUHlPU19zZXRzaWcoU0lHV0lOQ0gsIHJlYWRsaW5lX3NpZ3dpbmNoX2hhbmRsZXIpOworI2VuZGlmCit9CisjZW5kaWYKKwogLyogQyBmdW5jdGlvbiB0byBjYWxsIHRoZSBQeXRob24gY29tcGxldGVyLiAqLwogCiBzdGF0aWMgY2hhciAqCkBAIC05MDcsMjIgKzk4NSwyNCBAQAogewogICAgIGNoYXIgKnJlc3VsdCA9IE5VTEw7CiAgICAgaWYgKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIgIT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqcjsKKyAgICAgICAgUHlPYmplY3QgKnIgPSBOVUxMLCAqdDsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKICNlbmRpZgogICAgICAgICBybF9hdHRlbXB0ZWRfY29tcGxldGlvbl9vdmVyID0gMTsKLSAgICAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyLCAic2kiLCB0ZXh0LCBzdGF0ZSk7CisgICAgICAgIHQgPSBkZWNvZGUodGV4dCk7CisgICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgIk5pIiwgdCwgc3RhdGUpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKHIgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgKnMgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHIpOwotICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2RlKHIpOworICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgcmVzdWx0ID0gc3RyZHVwKHMpOworICAgICAgICAgICAgcmVzdWx0ID0gc3RyZHVwKFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYocik7CiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTk0Niw2ICsxMDI2LDkgQEAKIGZsZXhfY29tcGxldGUoY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogewogICAgIGNoYXIgKipyZXN1bHQ7CisgICAgY2hhciBzYXZlZDsKKyAgICBzaXplX3Qgc3RhcnRfc2l6ZSwgZW5kX3NpemU7CisgICAgd2NoYXJfdCAqczsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCkBAIC05NTUsNiArMTAzOCwyNyBAQAogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9TVVBQUkVTU19BUFBFTkQKICAgICBybF9jb21wbGV0aW9uX3N1cHByZXNzX2FwcGVuZCA9IDA7CiAjZW5kaWYKKworICAgIHNhdmVkID0gcmxfbGluZV9idWZmZXJbc3RhcnRdOworICAgIHJsX2xpbmVfYnVmZmVyW3N0YXJ0XSA9IDA7CisgICAgcyA9IFB5X0RlY29kZUxvY2FsZShybF9saW5lX2J1ZmZlciwgJnN0YXJ0X3NpemUpOworICAgIHJsX2xpbmVfYnVmZmVyW3N0YXJ0XSA9IHNhdmVkOworICAgIGlmIChzID09IE5VTEwpIHsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBQeU1lbV9SYXdGcmVlKHMpOworICAgIHNhdmVkID0gcmxfbGluZV9idWZmZXJbZW5kXTsKKyAgICBybF9saW5lX2J1ZmZlcltlbmRdID0gMDsKKyAgICBzID0gUHlfRGVjb2RlTG9jYWxlKHJsX2xpbmVfYnVmZmVyICsgc3RhcnQsICZlbmRfc2l6ZSk7CisgICAgcmxfbGluZV9idWZmZXJbZW5kXSA9IHNhdmVkOworICAgIGlmIChzID09IE5VTEwpIHsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBQeU1lbV9SYXdGcmVlKHMpOworICAgIHN0YXJ0ID0gKGludClzdGFydF9zaXplOworICAgIGVuZCA9IHN0YXJ0ICsgKGludCllbmRfc2l6ZTsKKworZG9uZToKICAgICBQeV9YREVDUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOwogICAgIFB5X1hERUNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CiAgICAgcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3RhcnQpOwpAQCAtMTAwNSw2ICsxMTA5LDEwIEBACiAgICAgLyogQmluZCBib3RoIEVTQy1UQUIgYW5kIEVTQy1FU0MgdG8gdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KICAgICBybF9iaW5kX2tleV9pbl9tYXAgKCdcdCcsIHJsX2NvbXBsZXRlLCBlbWFjc19tZXRhX2tleW1hcCk7CiAgICAgcmxfYmluZF9rZXlfaW5fbWFwICgnXDAzMycsIHJsX2NvbXBsZXRlLCBlbWFjc19tZXRhX2tleW1hcCk7CisjaWZkZWYgSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwKKyAgICAvKiBTZXQgdXAgc2lnbmFsIGhhbmRsZXIgZm9yIHdpbmRvdyByZXNpemUgKi8KKyAgICBzaWd3aW5jaF9vaGFuZGxlciA9IFB5T1Nfc2V0c2lnKFNJR1dJTkNILCByZWFkbGluZV9zaWd3aW5jaF9oYW5kbGVyKTsKKyNlbmRpZgogICAgIC8qIFNldCBvdXIgaG9vayBmdW5jdGlvbnMgKi8KICAgICBybF9zdGFydHVwX2hvb2sgPSBvbl9zdGFydHVwX2hvb2s7CiAjaWZkZWYgSEFWRV9STF9QUkVfSU5QVVRfSE9PSwpAQCAtMTAyMyw3ICsxMTMxLDcgQEAKIAogI2lmbmRlZiBfX0FQUExFX18KICAgICBpZiAoIWlzYXR0eShTVERPVVRfRklMRU5PKSkgewotICAgICAgICAvKiBJc3N1ZSAjMTk4ODQ6IHN0ZG91dCBpcyBubyBhIHRlcm1pbmFsLiBEaXNhYmxlIG1ldGEgbW9kaWZpZXIKKyAgICAgICAgLyogSXNzdWUgIzE5ODg0OiBzdGRvdXQgaXMgbm90IGEgdGVybWluYWwuIERpc2FibGUgbWV0YSBtb2RpZmllcgogICAgICAgICAgICBrZXlzIHRvIG5vdCB3cml0ZSB0aGUgQU5TSSBzZXF1ZW5jZSAiXDAzM1sxMDM0aCIgaW50byBzdGRvdXQuIE9uCiAgICAgICAgICAgIHRlcm1pbmFscyBzdXBwb3J0aW5nIDggYml0IGNoYXJhY3RlcnMgbGlrZSBURVJNPXh0ZXJtLTI1NmNvbG9yCiAgICAgICAgICAgICh3aGljaCBpcyBub3cgdGhlIGRlZmF1bHQgRmVkb3JhIHNpbmNlIEZlZG9yYSAxOCksIHRoZSBtZXRhIGtleSBpcwpAQCAtMTA5MCw2ICsxMTk4LDEzIEBACiAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dHAgPSBOVUxMOwogICAgICAgICAgICAgaWYgKFB5T1NfSW5wdXRIb29rKQogICAgICAgICAgICAgICAgIHRpbWVvdXRwID0gJnRpbWVvdXQ7CisjaWZkZWYgSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwKKyAgICAgICAgICAgIC8qIFVwZGF0ZSByZWFkbGluZSdzIHZpZXcgb2YgdGhlIHdpbmRvdyBzaXplIGFmdGVyIFNJR1dJTkNIICovCisgICAgICAgICAgICBpZiAoc2lnd2luY2hfcmVjZWl2ZWQpIHsKKyAgICAgICAgICAgICAgICBzaWd3aW5jaF9yZWNlaXZlZCA9IDA7CisgICAgICAgICAgICAgICAgcmxfcmVzaXplX3Rlcm1pbmFsKCk7CisgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIEZEX1NFVChmaWxlbm8ocmxfaW5zdHJlYW0pLCAmc2VsZWN0c2V0KTsKICAgICAgICAgICAgIC8qIHNlbGVjdCByZXNldHMgc2VsZWN0c2V0IGlmIG5vIGlucHV0IHdhcyBhdmFpbGFibGUgKi8KICAgICAgICAgICAgIGhhc19pbnB1dCA9IHNlbGVjdChmaWxlbm8ocmxfaW5zdHJlYW0pICsgMSwgJnNlbGVjdHNldCwKQEAgLTExMTIsNiArMTIyNyw5IEBACiAjZW5kaWYKICAgICAgICAgICAgIGlmIChzIDwgMCkgewogICAgICAgICAgICAgICAgIHJsX2ZyZWVfbGluZV9zdGF0ZSgpOworI2lmIGRlZmluZWQoUkxfUkVBRExJTkVfVkVSU0lPTikgJiYgUkxfUkVBRExJTkVfVkVSU0lPTiA+PSAweDA3MDAKKyAgICAgICAgICAgICAgICBybF9jYWxsYmFja19zaWdjbGVhbnVwKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBybF9jbGVhbnVwX2FmdGVyX3NpZ25hbCgpOwogICAgICAgICAgICAgICAgIHJsX2NhbGxiYWNrX2hhbmRsZXJfcmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgKnNpZ25hbCA9IDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwppbmRleCA2NWZiNmE0Li4wMDMyNGE1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKQEAgLTE5Myw1MSArMTkzLDMyIEBACiAjZW5kaWYgLyogU0VMRUNUX1VTRVNfSEVBUCAqLwogICAgIFB5T2JqZWN0ICppZmRsaXN0LCAqb2ZkbGlzdCwgKmVmZGxpc3Q7CiAgICAgUHlPYmplY3QgKnJldCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnRvdXQgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICp0aW1lb3V0X29iaiA9IFB5X05vbmU7CiAgICAgZmRfc2V0IGlmZHNldCwgb2Zkc2V0LCBlZmRzZXQ7CiAgICAgc3RydWN0IHRpbWV2YWwgdHYsICp0dnA7CiAgICAgaW50IGltYXgsIG9tYXgsIGVtYXgsIG1heDsKICAgICBpbnQgbjsKKyAgICBfUHlUaW1lX3QgdGltZW91dCwgZGVhZGxpbmUgPSAwOwogCiAgICAgLyogY29udmVydCBhcmd1bWVudHMgKi8KICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZWxlY3QiLCAzLCA0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZkbGlzdCwgJm9mZGxpc3QsICZlZmRsaXN0LCAmdG91dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICZpZmRsaXN0LCAmb2ZkbGlzdCwgJmVmZGxpc3QsICZ0aW1lb3V0X29iaikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKHRvdXQgPT0gUHlfTm9uZSkKLSAgICAgICAgdHZwID0gKHN0cnVjdCB0aW1ldmFsICopMDsKLSAgICBlbHNlIGlmICghUHlOdW1iZXJfQ2hlY2sodG91dCkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IG11c3QgYmUgYSBmbG9hdCBvciBOb25lIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAodGltZW91dF9vYmogPT0gUHlfTm9uZSkKKyAgICAgICAgdHZwID0gKHN0cnVjdCB0aW1ldmFsICopTlVMTDsKICAgICBlbHNlIHsKLSAgICAgICAgLyogT24gT3BlbkJTRCA1LjQsIHRpbWV2YWwudHZfc2VjIGlzIGEgbG9uZy4KLSAgICAgICAgICogRXhhbXBsZTogbG9uZyBpcyA2NC1iaXQsIHdoZXJlYXMgdGltZV90IGlzIDMyLWJpdC4gKi8KLSAgICAgICAgdGltZV90IHNlYzsKLSAgICAgICAgLyogT24gT1MgWCA2NC1iaXQsIHRpbWV2YWwudHZfdXNlYyBpcyBhbiBpbnQgKGFuZCB0aHVzIHN0aWxsIDQKLSAgICAgICAgICAgYnl0ZXMgYXMgcmVxdWlyZWQpLCBidXQgbm8gbG9uZ2VyIGRlZmluZWQgYnkgYSBsb25nLiAqLwotICAgICAgICBsb25nIHVzZWM7Ci0gICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXZhbCh0b3V0LCAmc2VjLCAmdXNlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfUk9VTkRfVVApID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAvKiBPbiBXaW5kb3dzLCB0aW1ldmFsLnR2X3NlYyBpcyBhIGxvbmcgKDMyIGJpdCksCi0gICAgICAgICAqIHdoZXJlYXMgdGltZV90IGNhbiBiZSA2NC1iaXQuICovCi0gICAgICAgIGFzc2VydChzaXplb2YodHYudHZfc2VjKSA9PSBzaXplb2YobG9uZykpOwotI2lmIFNJWkVPRl9USU1FX1QgPiBTSVpFT0ZfTE9ORwotICAgICAgICBpZiAoc2VjID4gTE9OR19NQVgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IGlzIHRvbyBsYXJnZSIpOworICAgICAgICBpZiAoX1B5VGltZV9Gcm9tU2Vjb25kc09iamVjdCgmdGltZW91dCwgdGltZW91dF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfUk9VTkRfQ0VJTElORykgPCAwKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgbXVzdCBiZSBhIGZsb2F0IG9yIE5vbmUiKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgdHYudHZfc2VjID0gKGxvbmcpc2VjOwotI2Vsc2UKLSAgICAgICAgYXNzZXJ0KHNpemVvZih0di50dl9zZWMpID49IHNpemVvZihzZWMpKTsKLSAgICAgICAgdHYudHZfc2VjID0gc2VjOwotI2VuZGlmCi0gICAgICAgIHR2LnR2X3VzZWMgPSB1c2VjOworCisgICAgICAgIGlmIChfUHlUaW1lX0FzVGltZXZhbCh0aW1lb3V0LCAmdHYsIF9QeVRpbWVfUk9VTkRfQ0VJTElORykgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKHR2LnR2X3NlYyA8IDApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidGltZW91dCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNDUsNyArMjI2LDYgQEAKICAgICAgICAgdHZwID0gJnR2OwogICAgIH0KIAotCiAjaWZkZWYgU0VMRUNUX1VTRVNfSEVBUAogICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGxpc3RzICovCiAgICAgcmZkMm9iaiA9IFB5TWVtX05FVyhweWxpc3QsIEZEX1NFVFNJWkUgKyAxKTsKQEAgLTI1OCw2ICsyMzgsNyBAQAogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9CiAjZW5kaWYgLyogU0VMRUNUX1VTRVNfSEVBUCAqLworCiAgICAgLyogQ29udmVydCBzZXF1ZW5jZXMgdG8gZmRfc2V0cywgYW5kIGdldCBtYXhpbXVtIGZkIG51bWJlcgogICAgICAqIHByb3BhZ2F0ZXMgdGhlIFB5dGhvbiBleGNlcHRpb24gc2V0IGluIHNlcTJzZXQoKQogICAgICAqLwpAQCAtMjcwLDEzICsyNTEsMzcgQEAKICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIGlmICgoZW1heD1zZXEyc2V0KGVmZGxpc3QsICZlZmRzZXQsIGVmZDJvYmopKSA8IDApCiAgICAgICAgIGdvdG8gZmluYWxseTsKKwogICAgIG1heCA9IGltYXg7CiAgICAgaWYgKG9tYXggPiBtYXgpIG1heCA9IG9tYXg7CiAgICAgaWYgKGVtYXggPiBtYXgpIG1heCA9IGVtYXg7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgbiA9IHNlbGVjdChtYXgsICZpZmRzZXQsICZvZmRzZXQsICZlZmRzZXQsIHR2cCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAodHZwKQorICAgICAgICBkZWFkbGluZSA9IF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKSArIHRpbWVvdXQ7CisKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBuID0gc2VsZWN0KG1heCwgJmlmZHNldCwgJm9mZHNldCwgJmVmZHNldCwgdHZwKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBzZWxlY3QoKSB3YXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgKi8KKyAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKQorICAgICAgICAgICAgZ290byBmaW5hbGx5OworCisgICAgICAgIGlmICh0dnApIHsKKyAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKTsKKyAgICAgICAgICAgIGlmICh0aW1lb3V0IDwgMCkgeworICAgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX1B5VGltZV9Bc1RpbWV2YWxfbm9yYWlzZSh0aW1lb3V0LCAmdHYsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CisgICAgICAgICAgICAvKiByZXRyeSBzZWxlY3QoKSB3aXRoIHRoZSByZWNvbXB1dGVkIHRpbWVvdXQgKi8KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKDEpOwogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChuID09IFNPQ0tFVF9FUlJPUikgewpAQCAtNTE2LDMwICs1MjEsMzkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb2xsX3BvbGwocG9sbE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnJlc3VsdF9saXN0ID0gTlVMTCwgKnRvdXQgPSBOVUxMOwotICAgIGludCB0aW1lb3V0ID0gMCwgcG9sbF9yZXN1bHQsIGksIGo7CisgICAgUHlPYmplY3QgKnJlc3VsdF9saXN0ID0gTlVMTCwgKnRpbWVvdXRfb2JqID0gTlVMTDsKKyAgICBpbnQgcG9sbF9yZXN1bHQsIGksIGo7CiAgICAgUHlPYmplY3QgKnZhbHVlID0gTlVMTCwgKm51bSA9IE5VTEw7CisgICAgX1B5VGltZV90IHRpbWVvdXQsIG1zLCBkZWFkbGluZTsKKyAgICBpbnQgYXN5bmNfZXJyID0gMDsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInBvbGwiLCAwLCAxLCAmdG91dCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnBvbGwiLCAmdGltZW91dF9vYmopKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIENoZWNrIHZhbHVlcyBmb3IgdGltZW91dCAqLwotICAgIGlmICh0b3V0ID09IE5VTEwgfHwgdG91dCA9PSBQeV9Ob25lKQorICAgIGlmICh0aW1lb3V0X29iaiA9PSBOVUxMIHx8IHRpbWVvdXRfb2JqID09IFB5X05vbmUpIHsKICAgICAgICAgdGltZW91dCA9IC0xOwotICAgIGVsc2UgaWYgKCFQeU51bWJlcl9DaGVjayh0b3V0KSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG1zID0gLTE7CisgICAgICAgIGRlYWRsaW5lID0gMDsgICAvKiBpbml0aWFsaXplIHRvIHByZXZlbnQgZ2NjIHdhcm5pbmcgKi8KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHRvdXQgPSBQeU51bWJlcl9Mb25nKHRvdXQpOwotICAgICAgICBpZiAoIXRvdXQpCisgICAgICAgIGlmIChfUHlUaW1lX0Zyb21NaWxsaXNlY29uZHNPYmplY3QoJnRpbWVvdXQsIHRpbWVvdXRfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfUk9VTkRfQ0VJTElORykgPCAwKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUiKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB0aW1lb3V0ID0gX1B5TG9uZ19Bc0ludCh0b3V0KTsKLSAgICAgICAgUHlfREVDUkVGKHRvdXQpOwotICAgICAgICBpZiAodGltZW91dCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICB9CisKKyAgICAgICAgbXMgPSBfUHlUaW1lX0FzTWlsbGlzZWNvbmRzKHRpbWVvdXQsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CisgICAgICAgIGlmIChtcyA8IElOVF9NSU4gfHwgbXMgPiBJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInRpbWVvdXQgaXMgdG9vIGxhcmdlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGRlYWRsaW5lID0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpICsgdGltZW91dDsKICAgICB9CiAKICAgICAvKiBBdm9pZCBjb25jdXJyZW50IHBvbGwoKSBpbnZvY2F0aW9uLCBpc3N1ZSA4ODY1ICovCkBAIC01NTcsMTQgKzU3MSwzOCBAQAogICAgIHNlbGYtPnBvbGxfcnVubmluZyA9IDE7CiAKICAgICAvKiBjYWxsIHBvbGwoKSAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBwb2xsX3Jlc3VsdCA9IHBvbGwoc2VsZi0+dWZkcywgc2VsZi0+dWZkX2xlbiwgdGltZW91dCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBhc3luY19lcnIgPSAwOworICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIHBvbGxfcmVzdWx0ID0gcG9sbChzZWxmLT51ZmRzLCBzZWxmLT51ZmRfbGVuLCAoaW50KW1zKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBwb2xsKCkgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsICovCisgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgeworICAgICAgICAgICAgYXN5bmNfZXJyID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRpbWVvdXQgPj0gMCkgeworICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpOworICAgICAgICAgICAgaWYgKHRpbWVvdXQgPCAwKSB7CisgICAgICAgICAgICAgICAgcG9sbF9yZXN1bHQgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXMgPSBfUHlUaW1lX0FzTWlsbGlzZWNvbmRzKHRpbWVvdXQsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CisgICAgICAgICAgICAvKiByZXRyeSBwb2xsKCkgd2l0aCB0aGUgcmVjb21wdXRlZCB0aW1lb3V0ICovCisgICAgICAgIH0KKyAgICB9IHdoaWxlICgxKTsKIAogICAgIHNlbGYtPnBvbGxfcnVubmluZyA9IDA7CiAKICAgICBpZiAocG9sbF9yZXN1bHQgPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgaWYgKCFhc3luY19lcnIpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNTczLDQxICs2MTEsNDAgQEAKICAgICByZXN1bHRfbGlzdCA9IFB5TGlzdF9OZXcocG9sbF9yZXN1bHQpOwogICAgIGlmICghcmVzdWx0X2xpc3QpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsc2UgewotICAgICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaiA8IHBvbGxfcmVzdWx0OyBqKyspIHsKLSAgICAgICAgICAgIC8qIHNraXAgdG8gdGhlIG5leHQgZmlyZWQgZGVzY3JpcHRvciAqLwotICAgICAgICAgICAgd2hpbGUgKCFzZWxmLT51ZmRzW2ldLnJldmVudHMpIHsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBpZiB3ZSBoaXQgYSBOVUxMIHJldHVybiwgc2V0IHZhbHVlIHRvIE5VTEwKLSAgICAgICAgICAgICAgIGFuZCBicmVhayBvdXQgb2YgbG9vcDsgY29kZSBhdCBlbmQgd2lsbAotICAgICAgICAgICAgICAgY2xlYW4gdXAgcmVzdWx0X2xpc3QgKi8KLSAgICAgICAgICAgIHZhbHVlID0gUHlUdXBsZV9OZXcoMik7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nKHNlbGYtPnVmZHNbaV0uZmQpOwotICAgICAgICAgICAgaWYgKG51bSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh2YWx1ZSwgMCwgbnVtKTsKIAotICAgICAgICAgICAgLyogVGhlICYweGZmZmYgaXMgYSB3b3JrYXJvdW5kIGZvciBBSVguICAncmV2ZW50cycKLSAgICAgICAgICAgICAgIGlzIGEgMTYtYml0IHNob3J0LCBhbmQgSUJNIGFzc2lnbmVkIFBPTExOVkFMCi0gICAgICAgICAgICAgICB0byBiZSAweDgwMDAsIHNvIHRoZSBjb252ZXJzaW9uIHRvIGludCByZXN1bHRzCi0gICAgICAgICAgICAgICBpbiBhIG5lZ2F0aXZlIG51bWJlci4gU2VlIFNGIGJ1ZyAjOTIzMzE1LiAqLwotICAgICAgICAgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nKHNlbGYtPnVmZHNbaV0ucmV2ZW50cyAmIDB4ZmZmZik7Ci0gICAgICAgICAgICBpZiAobnVtID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHZhbHVlLCAxLCBudW0pOwotICAgICAgICAgICAgaWYgKChQeUxpc3RfU2V0SXRlbShyZXN1bHRfbGlzdCwgaiwgdmFsdWUpKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKGkgPSAwLCBqID0gMDsgaiA8IHBvbGxfcmVzdWx0OyBqKyspIHsKKyAgICAgICAgLyogc2tpcCB0byB0aGUgbmV4dCBmaXJlZCBkZXNjcmlwdG9yICovCisgICAgICAgIHdoaWxlICghc2VsZi0+dWZkc1tpXS5yZXZlbnRzKSB7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KKyAgICAgICAgLyogaWYgd2UgaGl0IGEgTlVMTCByZXR1cm4sIHNldCB2YWx1ZSB0byBOVUxMCisgICAgICAgICAgIGFuZCBicmVhayBvdXQgb2YgbG9vcDsgY29kZSBhdCBlbmQgd2lsbAorICAgICAgICAgICBjbGVhbiB1cCByZXN1bHRfbGlzdCAqLworICAgICAgICB2YWx1ZSA9IFB5VHVwbGVfTmV3KDIpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIG51bSA9IFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT51ZmRzW2ldLmZkKTsKKyAgICAgICAgaWYgKG51bSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHZhbHVlLCAwLCBudW0pOworCisgICAgICAgIC8qIFRoZSAmMHhmZmZmIGlzIGEgd29ya2Fyb3VuZCBmb3IgQUlYLiAgJ3JldmVudHMnCisgICAgICAgICAgIGlzIGEgMTYtYml0IHNob3J0LCBhbmQgSUJNIGFzc2lnbmVkIFBPTExOVkFMCisgICAgICAgICAgIHRvIGJlIDB4ODAwMCwgc28gdGhlIGNvbnZlcnNpb24gdG8gaW50IHJlc3VsdHMKKyAgICAgICAgICAgaW4gYSBuZWdhdGl2ZSBudW1iZXIuIFNlZSBTRiBidWcgIzkyMzMxNS4gKi8KKyAgICAgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nKHNlbGYtPnVmZHNbaV0ucmV2ZW50cyAmIDB4ZmZmZik7CisgICAgICAgIGlmIChudW0gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh2YWx1ZSwgMSwgbnVtKTsKKyAgICAgICAgaWYgKChQeUxpc3RfU2V0SXRlbShyZXN1bHRfbGlzdCwgaiwgdmFsdWUpKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaSsrOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0X2xpc3Q7CiAKQEAgLTcxOCwxNCArNzU1LDEwIEBACiAgICAgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9sbGZkKSpzZWxmLT5uX2ZkczsKICAgICBzZWxmLT5uX2ZkcyA9IDA7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgbiA9IHdyaXRlKHNlbGYtPmZkX2RldnBvbGwsIHNlbGYtPmZkcywgc2l6ZSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChuID09IC0xICkgewotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgbiA9IF9QeV93cml0ZShzZWxmLT5mZF9kZXZwb2xsLCBzZWxmLT5mZHMsIHNpemUpOworICAgIGlmIChuID09IC0xKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCiAgICAgaWYgKG4gPCBzaXplKSB7CiAgICAgICAgIC8qCiAgICAgICAgICoqIERhdGEgd3JpdGVkIHRvIC9kZXYvcG9sbCBpcyBhIGJpbmFyeSBkYXRhIHN0cnVjdHVyZS4gSXQgaXMgbm90CkBAIC04NDMsNDAgKzg3NiwzOCBAQAogZGV2cG9sbF9wb2xsKGRldnBvbGxPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHN0cnVjdCBkdnBvbGwgZHZwOwotICAgIFB5T2JqZWN0ICpyZXN1bHRfbGlzdCA9IE5VTEwsICp0b3V0ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzdWx0X2xpc3QgPSBOVUxMLCAqdGltZW91dF9vYmogPSBOVUxMOwogICAgIGludCBwb2xsX3Jlc3VsdCwgaTsKLSAgICBsb25nIHRpbWVvdXQ7CiAgICAgUHlPYmplY3QgKnZhbHVlLCAqbnVtMSwgKm51bTI7CisgICAgX1B5VGltZV90IHRpbWVvdXQsIG1zLCBkZWFkbGluZSA9IDA7CiAKICAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCiAgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInBvbGwiLCAwLCAxLCAmdG91dCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnBvbGwiLCAmdGltZW91dF9vYmopKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIENoZWNrIHZhbHVlcyBmb3IgdGltZW91dCAqLwotICAgIGlmICh0b3V0ID09IE5VTEwgfHwgdG91dCA9PSBQeV9Ob25lKQorICAgIGlmICh0aW1lb3V0X29iaiA9PSBOVUxMIHx8IHRpbWVvdXRfb2JqID09IFB5X05vbmUpIHsKICAgICAgICAgdGltZW91dCA9IC0xOwotICAgIGVsc2UgaWYgKCFQeU51bWJlcl9DaGVjayh0b3V0KSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG1zID0gLTE7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB0b3V0ID0gUHlOdW1iZXJfTG9uZyh0b3V0KTsKLSAgICAgICAgaWYgKCF0b3V0KQorICAgICAgICBpZiAoX1B5VGltZV9Gcm9tTWlsbGlzZWNvbmRzT2JqZWN0KCZ0aW1lb3V0LCB0aW1lb3V0X29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlUaW1lX1JPVU5EX0NFSUxJTkcpIDwgMCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IG11c3QgYmUgYW4gaW50ZWdlciBvciBOb25lIik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdGltZW91dCA9IFB5TG9uZ19Bc0xvbmcodG91dCk7Ci0gICAgICAgIFB5X0RFQ1JFRih0b3V0KTsKLSAgICAgICAgaWYgKHRpbWVvdXQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICAgICAgfQogCi0gICAgaWYgKCh0aW1lb3V0IDwgLTEpIHx8ICh0aW1lb3V0ID4gSU5UX01BWCkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dCBpcyBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG1zID0gX1B5VGltZV9Bc01pbGxpc2Vjb25kcyh0aW1lb3V0LCBfUHlUaW1lX1JPVU5EX0NFSUxJTkcpOworICAgICAgICBpZiAobXMgPCAtMSB8fCBtcyA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAidGltZW91dCBpcyB0b28gbGFyZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGRldnBvbGxfZmx1c2goc2VsZikpCkBAIC04ODQsMTIgKzkxNSwzNiBAQAogCiAgICAgZHZwLmRwX2ZkcyA9IHNlbGYtPmZkczsKICAgICBkdnAuZHBfbmZkcyA9IHNlbGYtPm1heF9uX2ZkczsKLSAgICBkdnAuZHBfdGltZW91dCA9IHRpbWVvdXQ7CisgICAgZHZwLmRwX3RpbWVvdXQgPSAoaW50KW1zOwogCi0gICAgLyogY2FsbCBkZXZwb2xsKCkgKi8KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcG9sbF9yZXN1bHQgPSBpb2N0bChzZWxmLT5mZF9kZXZwb2xsLCBEUF9QT0xMLCAmZHZwKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmICh0aW1lb3V0ID49IDApCisgICAgICAgIGRlYWRsaW5lID0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpICsgdGltZW91dDsKKworICAgIGRvIHsKKyAgICAgICAgLyogY2FsbCBkZXZwb2xsKCkgKi8KKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIHBvbGxfcmVzdWx0ID0gaW9jdGwoc2VsZi0+ZmRfZGV2cG9sbCwgRFBfUE9MTCwgJmR2cCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgaWYgKGVycm5vICE9IEVJTlRSKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogZGV2cG9sbCgpIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAqLworICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBpZiAodGltZW91dCA+PSAwKSB7CisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCk7CisgICAgICAgICAgICBpZiAodGltZW91dCA8IDApIHsKKyAgICAgICAgICAgICAgICBwb2xsX3Jlc3VsdCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtcyA9IF9QeVRpbWVfQXNNaWxsaXNlY29uZHModGltZW91dCwgX1B5VGltZV9ST1VORF9DRUlMSU5HKTsKKyAgICAgICAgICAgIGR2cC5kcF90aW1lb3V0ID0gKGludCltczsKKyAgICAgICAgICAgIC8qIHJldHJ5IGRldnBvbGwoKSB3aXRoIHRoZSByZWNvbXB1dGVkIHRpbWVvdXQgKi8KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKDEpOwogCiAgICAgaWYgKHBvbGxfcmVzdWx0IDwgMCkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CkBAIC04OTcsMjggKzk1MiwyNiBAQAogICAgIH0KIAogICAgIC8qIGJ1aWxkIHRoZSByZXN1bHQgbGlzdCAqLwotCiAgICAgcmVzdWx0X2xpc3QgPSBQeUxpc3RfTmV3KHBvbGxfcmVzdWx0KTsKICAgICBpZiAoIXJlc3VsdF9saXN0KQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvbGxfcmVzdWx0OyBpKyspIHsKLSAgICAgICAgICAgIG51bTEgPSBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+ZmRzW2ldLmZkKTsKLSAgICAgICAgICAgIG51bTIgPSBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+ZmRzW2ldLnJldmVudHMpOwotICAgICAgICAgICAgaWYgKChudW0xID09IE5VTEwpIHx8IChudW0yID09IE5VTEwpKSB7Ci0gICAgICAgICAgICAgICAgUHlfWERFQ1JFRihudW0xKTsKLSAgICAgICAgICAgICAgICBQeV9YREVDUkVGKG51bTIpOwotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YWx1ZSA9IFB5VHVwbGVfUGFjaygyLCBudW0xLCBudW0yKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihudW0xKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihudW0yKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBpZiAoKFB5TGlzdF9TZXRJdGVtKHJlc3VsdF9saXN0LCBpLCB2YWx1ZSkpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHBvbGxfcmVzdWx0OyBpKyspIHsKKyAgICAgICAgbnVtMSA9IFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5mZHNbaV0uZmQpOworICAgICAgICBudW0yID0gUHlMb25nX0Zyb21Mb25nKHNlbGYtPmZkc1tpXS5yZXZlbnRzKTsKKyAgICAgICAgaWYgKChudW0xID09IE5VTEwpIHx8IChudW0yID09IE5VTEwpKSB7CisgICAgICAgICAgICBQeV9YREVDUkVGKG51bTEpOworICAgICAgICAgICAgUHlfWERFQ1JFRihudW0yKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSBQeVR1cGxlX1BhY2soMiwgbnVtMSwgbnVtMik7CisgICAgICAgIFB5X0RFQ1JFRihudW0xKTsKKyAgICAgICAgUHlfREVDUkVGKG51bTIpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmICgoUHlMaXN0X1NldEl0ZW0ocmVzdWx0X2xpc3QsIGksIHZhbHVlKSkgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDEzLDcgKzEwNjYsNiBAQAogICAgIHN0cnVjdCBwb2xsZmQgKmZkczsKICAgICBzdHJ1Y3QgcmxpbWl0IGxpbWl0OwogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIC8qCiAgICAgKiogSWYgd2UgdHJ5IHRvIHByb2Nlc3MgbW9yZSB0aGF0IGdldHJsaW1pdCgpCiAgICAgKiogZmRzLCB0aGUga2VybmVsIHdpbGwgZ2l2ZSBhbiBlcnJvciwgc28KQEAgLTEwMjEsMTggKzEwNzMsMTQgQEAKICAgICAqKiB2YWx1ZSwgYmVjYXVzZSB3ZSBjYW4gY2hhbmdlIHJsaW1pdCgpIGFueXRpbWUuCiAgICAgKi8KICAgICBsaW1pdF9yZXN1bHQgPSBnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJmxpbWl0KTsKLSAgICBpZiAobGltaXRfcmVzdWx0ICE9IC0xKQotICAgICAgICBmZF9kZXZwb2xsID0gX1B5X29wZW4oIi9kZXYvcG9sbCIsIE9fUkRXUik7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQogICAgIGlmIChsaW1pdF9yZXN1bHQgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGZkX2RldnBvbGwgPT0gLTEpIHsKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsICIvZGV2L3BvbGwiKTsKKworICAgIGZkX2RldnBvbGwgPSBfUHlfb3BlbigiL2Rldi9wb2xsIiwgT19SRFdSKTsKKyAgICBpZiAoZmRfZGV2cG9sbCA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgZmRzID0gUHlNZW1fTkVXKHN0cnVjdCBwb2xsZmQsIGxpbWl0LnJsaW1fY3VyKTsKICAgICBpZiAoZmRzID09IE5VTEwpIHsKQEAgLTEzOTAsNyArMTQzOCw3IEBACiBSZWdpc3RlcnMgYSBuZXcgZmQgb3IgcmFpc2VzIGFuIE9TRXJyb3IgaWYgdGhlIGZkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5cblwKIGZkIGlzIHRoZSB0YXJnZXQgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBvcGVyYXRpb24uXG5cCiBldmVudHMgaXMgYSBiaXQgc2V0IGNvbXBvc2VkIG9mIHRoZSB2YXJpb3VzIEVQT0xMIGNvbnN0YW50czsgdGhlIGRlZmF1bHRcblwKLWlzIEVQT0xMX0lOIHwgRVBPTExfT1VUIHwgRVBPTExfUFJJLlxuXAoraXMgRVBPTExJTiB8IEVQT0xMT1VUIHwgRVBPTExQUkkuXG5cCiBcblwKIFRoZSBlcG9sbCBpbnRlcmZhY2Ugc3VwcG9ydHMgYWxsIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCBzdXBwb3J0IHBvbGwuIik7CiAKQEAgLTE0MzcsMzQgKzE0ODUsNDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBweWVwb2xsX3BvbGwocHlFcG9sbF9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBkb3VibGUgZHRpbWVvdXQgPSAtMS47Ci0gICAgaW50IHRpbWVvdXQ7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0aW1lb3V0IiwgIm1heGV2ZW50cyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICp0aW1lb3V0X29iaiA9IE5VTEw7CiAgICAgaW50IG1heGV2ZW50cyA9IC0xOwogICAgIGludCBuZmRzLCBpOwogICAgIFB5T2JqZWN0ICplbGlzdCA9IE5VTEwsICpldHVwbGUgPSBOVUxMOwogICAgIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZzID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InRpbWVvdXQiLCAibWF4ZXZlbnRzIiwgTlVMTH07CisgICAgX1B5VGltZV90IHRpbWVvdXQsIG1zLCBkZWFkbGluZTsKIAogICAgIGlmIChzZWxmLT5lcGZkIDwgMCkKICAgICAgICAgcmV0dXJuIHB5ZXBvbGxfZXJyX2Nsb3NlZCgpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxkaTpwb2xsIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdGltZW91dCwgJm1heGV2ZW50cykpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifE9pOnBvbGwiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRpbWVvdXRfb2JqLCAmbWF4ZXZlbnRzKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoZHRpbWVvdXQgPCAwKSB7CisgICAgaWYgKHRpbWVvdXRfb2JqID09IE5VTEwgfHwgdGltZW91dF9vYmogPT0gUHlfTm9uZSkgewogICAgICAgICB0aW1lb3V0ID0gLTE7Ci0gICAgfQotICAgIGVsc2UgaWYgKGR0aW1lb3V0ICogMTAwMC4wID4gSU5UX01BWCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IGlzIHRvbyBsYXJnZSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbXMgPSAtMTsKKyAgICAgICAgZGVhZGxpbmUgPSAwOyAgIC8qIGluaXRpYWxpemUgdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogZXBvbGxfd2FpdCgpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwgcm91bmQgYXdheSBmcm9tIHplcm8KLSAgICAgICAgICAgdG8gd2FpdCAqYXQgbGVhc3QqIGR0aW1lb3V0IHNlY29uZHMuICovCi0gICAgICAgIHRpbWVvdXQgPSAoaW50KWNlaWwoZHRpbWVvdXQgKiAxMDAwLjApOworICAgICAgICAvKiBlcG9sbF93YWl0KCkgaGFzIGEgcmVzb2x1dGlvbiBvZiAxIG1pbGxpc2Vjb25kLCByb3VuZCB0b3dhcmRzCisgICAgICAgICAgIGluZmluaXR5IHRvIHdhaXQgYXQgbGVhc3QgdGltZW91dCBzZWNvbmRzLiAqLworICAgICAgICBpZiAoX1B5VGltZV9Gcm9tU2Vjb25kc09iamVjdCgmdGltZW91dCwgdGltZW91dF9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfUk9VTkRfQ0VJTElORykgPCAwKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbXMgPSBfUHlUaW1lX0FzTWlsbGlzZWNvbmRzKHRpbWVvdXQsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CisgICAgICAgIGlmIChtcyA8IElOVF9NSU4gfHwgbXMgPiBJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInRpbWVvdXQgaXMgdG9vIGxhcmdlIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGRlYWRsaW5lID0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpICsgdGltZW91dDsKICAgICB9CiAKICAgICBpZiAobWF4ZXZlbnRzID09IC0xKSB7CkBAIC0xNDgzLDkgKzE1NDMsMzAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIG5mZHMgPSBlcG9sbF93YWl0KHNlbGYtPmVwZmQsIGV2cywgbWF4ZXZlbnRzLCB0aW1lb3V0KTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBlcnJubyA9IDA7CisgICAgICAgIG5mZHMgPSBlcG9sbF93YWl0KHNlbGYtPmVwZmQsIGV2cywgbWF4ZXZlbnRzLCAoaW50KW1zKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBwb2xsKCkgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsICovCisgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKHRpbWVvdXQgPj0gMCkgeworICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpOworICAgICAgICAgICAgaWYgKHRpbWVvdXQgPCAwKSB7CisgICAgICAgICAgICAgICAgbmZkcyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtcyA9IF9QeVRpbWVfQXNNaWxsaXNlY29uZHModGltZW91dCwgX1B5VGltZV9ST1VORF9DRUlMSU5HKTsKKyAgICAgICAgICAgIC8qIHJldHJ5IGVwb2xsX3dhaXQoKSB3aXRoIHRoZSByZWNvbXB1dGVkIHRpbWVvdXQgKi8KKyAgICAgICAgfQorICAgIH0gd2hpbGUoMSk7CisKICAgICBpZiAobmZkcyA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjAyMiw4ICsyMTAzLDkgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBzdHJ1Y3Qga2V2ZW50ICpldmwgPSBOVUxMOwogICAgIHN0cnVjdCBrZXZlbnQgKmNobCA9IE5VTEw7Ci0gICAgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQ7CisgICAgc3RydWN0IHRpbWVzcGVjIHRpbWVvdXRzcGVjOwogICAgIHN0cnVjdCB0aW1lc3BlYyAqcHRpbWVvdXRzcGVjOworICAgIF9QeVRpbWVfdCB0aW1lb3V0LCBkZWFkbGluZSA9IDA7CiAKICAgICBpZiAoc2VsZi0+a3FmZCA8IDApCiAgICAgICAgIHJldHVybiBrcXVldWVfcXVldWVfZXJyX2Nsb3NlZCgpOwpAQCAtMjA0MSwyNCArMjEyMywyNSBAQAogICAgIGlmIChvdGltZW91dCA9PSBQeV9Ob25lIHx8IG90aW1lb3V0ID09IE5VTEwpIHsKICAgICAgICAgcHRpbWVvdXRzcGVjID0gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlOdW1iZXJfQ2hlY2sob3RpbWVvdXQpKSB7Ci0gICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob3RpbWVvdXQsICZ0aW1lb3V0LnR2X3NlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGltZW91dC50dl9uc2VjLCBfUHlUaW1lX1JPVU5EX1VQKSA9PSAtMSkKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKF9QeVRpbWVfRnJvbVNlY29uZHNPYmplY3QoJnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aW1lb3V0LCBfUHlUaW1lX1JPVU5EX0NFSUxJTkcpIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAidGltZW91dCBhcmd1bWVudCBtdXN0IGJlIGFuIG51bWJlciAiCisgICAgICAgICAgICAgICAgIm9yIE5vbmUsIGdvdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgIFB5X1RZUEUob3RpbWVvdXQpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeVRpbWVfQXNUaW1lc3BlYyh0aW1lb3V0LCAmdGltZW91dHNwZWMpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgaWYgKHRpbWVvdXQudHZfc2VjIDwgMCkgeworICAgICAgICBpZiAodGltZW91dHNwZWMudHZfc2VjIDwgMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgbXVzdCBiZSBwb3NpdGl2ZSBvciBOb25lIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBwdGltZW91dHNwZWMgPSAmdGltZW91dDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAidGltZW91dCBhcmd1bWVudCBtdXN0IGJlIGFuIG51bWJlciAiCi0gICAgICAgICAgICAib3IgTm9uZSwgZ290ICUuMjAwcyIsCi0gICAgICAgICAgICBQeV9UWVBFKG90aW1lb3V0KS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBwdGltZW91dHNwZWMgPSAmdGltZW91dHNwZWM7CiAgICAgfQogCiAgICAgaWYgKGNoICE9IE5VTEwgJiYgY2ggIT0gUHlfTm9uZSkgewpAQCAtMjEwMywxMCArMjE4NiwzNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGdvdGV2ZW50cyA9IGtldmVudChzZWxmLT5rcWZkLCBjaGwsIG5jaGFuZ2VzLAotICAgICAgICAgICAgICAgICAgICAgICBldmwsIG5ldmVudHMsIHB0aW1lb3V0c3BlYyk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAocHRpbWVvdXRzcGVjKQorICAgICAgICBkZWFkbGluZSA9IF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKSArIHRpbWVvdXQ7CisKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICBnb3RldmVudHMgPSBrZXZlbnQoc2VsZi0+a3FmZCwgY2hsLCBuY2hhbmdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2bCwgbmV2ZW50cywgcHRpbWVvdXRzcGVjKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAoZXJybm8gIT0gRUlOVFIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBrZXZlbnQoKSB3YXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgKi8KKyAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAocHRpbWVvdXRzcGVjKSB7CisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCk7CisgICAgICAgICAgICBpZiAodGltZW91dCA8IDApIHsKKyAgICAgICAgICAgICAgICBnb3RldmVudHMgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeVRpbWVfQXNUaW1lc3BlYyh0aW1lb3V0LCAmdGltZW91dHNwZWMpID09IC0xKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAvKiByZXRyeSBrZXZlbnQoKSB3aXRoIHRoZSByZWNvbXB1dGVkIHRpbWVvdXQgKi8KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKDEpOwogCiAgICAgaWYgKGdvdGV2ZW50cyA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTFtb2R1bGUuYyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCmluZGV4IGI0NGZlMTguLjZjYjMyZWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhMW1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCkBAIC0xOCw3ICsxOCwxMyBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAiaGFzaGxpYi5oIgorI2luY2x1ZGUgInB5c3RyaGV4LmgiCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfc2hhMQorY2xhc3MgU0hBMVR5cGUgIlNIQTFvYmplY3QgKiIgIiZQeVR5cGVfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTNkYzlhMjBkMWJlY2I3NTldKi8KIAogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIApAQCAtNDgsNiArNTQsNyBAQAogICAgIHN0cnVjdCBzaGExX3N0YXRlIGhhc2hfc3RhdGU7CiB9IFNIQTFvYmplY3Q7CiAKKyNpbmNsdWRlICJjbGluaWMvc2hhMW1vZHVsZS5jLmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKQEAgLTMwOSwxMCArMzE2LDE1IEBACiAKIC8qIEV4dGVybmFsIG1ldGhvZHMgZm9yIGEgaGFzaCBvYmplY3QgKi8KIAotUHlEb2NfU1RSVkFSKFNIQTFfY29weV9fZG9jX18sICJSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK1NIQTFUeXBlLmNvcHkKKworUmV0dXJuIGEgY29weSBvZiB0aGUgaGFzaCBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TSEExX2NvcHkoU0hBMW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK1NIQTFUeXBlX2NvcHlfaW1wbChTSEExb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI0ZTAwMTI2NDYyMGYwMmEgaW5wdXQ9YjdlYWUxMGRmNmY4OWIzNl0qLwogewogICAgIFNIQTFvYmplY3QgKm5ld29iajsKIApAQCAtMzIzLDExICszMzUsMTUgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3b2JqOwogfQogCi1QeURvY19TVFJWQVIoU0hBMV9kaWdlc3RfX2RvY19fLAotIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGJpbmFyeSBkYXRhLiIpOworLypbY2xpbmljIGlucHV0XQorU0hBMVR5cGUuZGlnZXN0CisKK1JldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGJpbmFyeSBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotU0hBMV9kaWdlc3QoU0hBMW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK1NIQTFUeXBlX2RpZ2VzdF9pbXBsKFNIQTFvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmYwNTMwMmE3YWEyYjVjYiBpbnB1dD0yMDVkNDdlMTkyN2ZkMDA5XSovCiB7CiAgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMV9ESUdFU1RTSVpFXTsKICAgICBzdHJ1Y3Qgc2hhMV9zdGF0ZSB0ZW1wOwpAQCAtMzM3LDU0ICszNTMsNDEgQEAKICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKWRpZ2VzdCwgU0hBMV9ESUdFU1RTSVpFKTsKIH0KIAotUHlEb2NfU1RSVkFSKFNIQTFfaGV4ZGlnZXN0X19kb2NfXywKLSJSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuIik7CisvKltjbGluaWMgaW5wdXRdCitTSEExVHlwZS5oZXhkaWdlc3QKKworUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotU0hBMV9oZXhkaWdlc3QoU0hBMW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK1NIQTFUeXBlX2hleGRpZ2VzdF9pbXBsKFNIQTFvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDE2MWZkNzFlNjhjNjY1OSBpbnB1dD05NzY5MTA1NWMwYzc0YWIwXSovCiB7CiAgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMV9ESUdFU1RTSVpFXTsKICAgICBzdHJ1Y3Qgc2hhMV9zdGF0ZSB0ZW1wOwotICAgIFB5T2JqZWN0ICpyZXR2YWw7Ci0gICAgUHlfVUNTMSAqaGV4X2RpZ2VzdDsKLSAgICBpbnQgaSwgajsKIAogICAgIC8qIEdldCB0aGUgcmF3IChiaW5hcnkpIGRpZ2VzdCB2YWx1ZSAqLwogICAgIHRlbXAgPSBzZWxmLT5oYXNoX3N0YXRlOwogICAgIHNoYTFfZG9uZSgmdGVtcCwgZGlnZXN0KTsKIAotICAgIC8qIENyZWF0ZSBhIG5ldyBzdHJpbmcgKi8KLSAgICByZXR2YWwgPSBQeVVuaWNvZGVfTmV3KFNIQTFfRElHRVNUU0laRSAqIDIsIDEyNyk7Ci0gICAgaWYgKCFyZXR2YWwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBoZXhfZGlnZXN0ID0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmV0dmFsKTsKLQotICAgIC8qIE1ha2UgaGV4IHZlcnNpb24gb2YgdGhlIGRpZ2VzdCAqLwotICAgIGZvcihpPWo9MDsgaTxTSEExX0RJR0VTVFNJWkU7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGM7Ci0gICAgICAgIGMgPSAoZGlnZXN0W2ldID4+IDQpICYgMHhmOwotICAgICAgICBoZXhfZGlnZXN0W2orK10gPSBQeV9oZXhkaWdpdHNbY107Ci0gICAgICAgIGMgPSAoZGlnZXN0W2ldICYgMHhmKTsKLSAgICAgICAgaGV4X2RpZ2VzdFtqKytdID0gUHlfaGV4ZGlnaXRzW2NdOwotICAgIH0KLSNpZmRlZiBQeV9ERUJVRwotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmV0dmFsLCAxKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmV0dmFsOworICAgIHJldHVybiBfUHlfc3RyaGV4KChjb25zdCBjaGFyICopZGlnZXN0LCBTSEExX0RJR0VTVFNJWkUpOwogfQogCi1QeURvY19TVFJWQVIoU0hBMV91cGRhdGVfX2RvY19fLAotIlVwZGF0ZSB0aGlzIGhhc2ggb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLiIpOworLypbY2xpbmljIGlucHV0XQorU0hBMVR5cGUudXBkYXRlCisKKyAgICBvYmo6IG9iamVjdAorICAgIC8KKworVXBkYXRlIHRoaXMgaGFzaCBvYmplY3QncyBzdGF0ZSB3aXRoIHRoZSBwcm92aWRlZCBzdHJpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TSEExX3VwZGF0ZShTSEExb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK1NIQTFUeXBlX3VwZGF0ZShTSEExb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ5OTAyZjBlNTAxNWU5YWUgaW5wdXQ9YWFkOGUwNzgxMmVkYmJhM10qLwogewotICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp1cGRhdGUiLCAmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKG9iaiwgJmJ1Zik7CiAKICAgICBzaGExX3Byb2Nlc3MoJnNlbGYtPmhhc2hfc3RhdGUsIGJ1Zi5idWYsIGJ1Zi5sZW4pOwpAQCAtMzk1LDEwICszOTgsMTAgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIFNIQTFfbWV0aG9kc1tdID0gewotICAgIHsiY29weSIsICAgICAgKFB5Q0Z1bmN0aW9uKVNIQTFfY29weSwgICAgICBNRVRIX05PQVJHUywgIFNIQTFfY29weV9fZG9jX199LAotICAgIHsiZGlnZXN0IiwgICAgKFB5Q0Z1bmN0aW9uKVNIQTFfZGlnZXN0LCAgICBNRVRIX05PQVJHUywgIFNIQTFfZGlnZXN0X19kb2NfX30sCi0gICAgeyJoZXhkaWdlc3QiLCAoUHlDRnVuY3Rpb24pU0hBMV9oZXhkaWdlc3QsIE1FVEhfTk9BUkdTLCAgU0hBMV9oZXhkaWdlc3RfX2RvY19ffSwKLSAgICB7InVwZGF0ZSIsICAgIChQeUNGdW5jdGlvbilTSEExX3VwZGF0ZSwgICAgTUVUSF9WQVJBUkdTLCBTSEExX3VwZGF0ZV9fZG9jX199LAorICAgIFNIQTFUWVBFX0NPUFlfTUVUSE9EREVGCisgICAgU0hBMVRZUEVfRElHRVNUX01FVEhPRERFRgorICAgIFNIQTFUWVBFX0hFWERJR0VTVF9NRVRIT0RERUYKKyAgICBTSEExVFlQRV9VUERBVEVfTUVUSE9EREVGCiAgICAge05VTEwsICAgICAgICBOVUxMfSAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC00NzQsMjcgKzQ3NywyNiBAQAogCiAvKiBUaGUgc2luZ2xlIG1vZHVsZS1sZXZlbCBmdW5jdGlvbjogbmV3KCkgKi8KIAotUHlEb2NfU1RSVkFSKFNIQTFfbmV3X19kb2NfXywKLSJSZXR1cm4gYSBuZXcgU0hBMSBoYXNoIG9iamVjdDsgb3B0aW9uYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RyaW5nLiIpOworLypbY2xpbmljIGlucHV0XQorX3NoYTEuc2hhMQorCisgICAgc3RyaW5nOiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSBiJycKKworUmV0dXJuIGEgbmV3IFNIQTEgaGFzaCBvYmplY3Q7IG9wdGlvbmFsbHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVNIQTFfbmV3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK19zaGExX3NoYTFfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyaW5nKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWU1OTgyODMwZDFkZWNlNTEgaW5wdXQ9MjdlYTU0MjgxZDk5NWVjMl0qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3RyaW5nIiwgTlVMTH07CiAgICAgU0hBMW9iamVjdCAqbmV3OwotICAgIFB5T2JqZWN0ICpkYXRhX29iaiA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxPOm5ldyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9vYmopKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmIChkYXRhX29iaikKLSAgICAgICAgR0VUX0JVRkZFUl9WSUVXX09SX0VSUk9VVChkYXRhX29iaiwgJmJ1Zik7CisgICAgaWYgKHN0cmluZykKKyAgICAgICAgR0VUX0JVRkZFUl9WSUVXX09SX0VSUk9VVChzdHJpbmcsICZidWYpOwogCiAgICAgaWYgKChuZXcgPSBuZXdTSEExb2JqZWN0KCkpID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGRhdGFfb2JqKQorICAgICAgICBpZiAoc3RyaW5nKQogICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNTAzLDExICs1MDUsMTEgQEAKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXcpOwotICAgICAgICBpZiAoZGF0YV9vYmopCisgICAgICAgIGlmIChzdHJpbmcpCiAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGRhdGFfb2JqKSB7CisgICAgaWYgKHN0cmluZykgewogICAgICAgICBzaGExX3Byb2Nlc3MoJm5ldy0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbik7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgfQpAQCAtNTE5LDcgKzUyMSw3IEBACiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLwogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIFNIQTFfZnVuY3Rpb25zW10gPSB7Ci0gICAgeyJzaGExIiwoUHlDRnVuY3Rpb24pU0hBMV9uZXcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLFNIQTFfbmV3X19kb2NfX30sCisgICAgX1NIQTFfU0hBMV9NRVRIT0RERUYKICAgICB7TlVMTCwgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jIGIvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYwppbmRleCBiMDViZmMxLi44ZjA2N2YxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKQEAgLTE5LDcgKzE5LDEzIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiaGFzaGxpYi5oIgorI2luY2x1ZGUgInB5c3RyaGV4LmgiCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfc2hhMjU2CitjbGFzcyBTSEEyNTZUeXBlICJTSEFvYmplY3QgKiIgIiZQeVR5cGVfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTcxYTM5MTc0ZDRmMGE3NDRdKi8KIAogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIApAQCAtNDcsNiArNTMsOCBAQAogICAgIGludCBkaWdlc3RzaXplOwogfSBTSEFvYmplY3Q7CiAKKyNpbmNsdWRlICJjbGluaWMvc2hhMjU2bW9kdWxlLmMuaCIKKwogLyogV2hlbiBydW4gb24gYSBsaXR0bGUtZW5kaWFuIENQVSB3ZSBuZWVkIHRvIHBlcmZvcm0gYnl0ZSByZXZlcnNhbCBvbiBhbgogICAgYXJyYXkgb2YgbG9uZ3dvcmRzLiAqLwogCkBAIC05Miw3ICsxMDAsNyBAQAogICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCiAgKgogICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKLSAqIGd1cmFudGVlIGl0IHdvcmtzLgorICogZ3VhcmFudGVlIGl0IHdvcmtzLgogICoKICAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BpYWh1LmNhLCBodHRwOi8vbGlidG9tLm9yZwogICovCkBAIC0zOTMsMTAgKzQwMSwxNSBAQAogCiAvKiBFeHRlcm5hbCBtZXRob2RzIGZvciBhIGhhc2ggb2JqZWN0ICovCiAKLVB5RG9jX1NUUlZBUihTSEEyNTZfY29weV9fZG9jX18sICJSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK1NIQTI1NlR5cGUuY29weQorCitSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVNIQTI1Nl9jb3B5KFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK1NIQTI1NlR5cGVfY29weV9pbXBsKFNIQW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xYThiYmQ2NmEwYzljMTY4IGlucHV0PWY1ODg0MGE2MThkNGYyYTddKi8KIHsKICAgICBTSEFvYmplY3QgKm5ld29iajsKIApAQCAtNDEyLDExICs0MjUsMTUgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3b2JqOwogfQogCi1QeURvY19TVFJWQVIoU0hBMjU2X2RpZ2VzdF9fZG9jX18sCi0iUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgYmluYXJ5IGRhdGEuIik7CisvKltjbGluaWMgaW5wdXRdCitTSEEyNTZUeXBlLmRpZ2VzdAorCitSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBiaW5hcnkgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVNIQTI1Nl9kaWdlc3QoU0hBb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorU0hBMjU2VHlwZV9kaWdlc3RfaW1wbChTSEFvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDY2MTZhNWU5MDlmYmMzZCBpbnB1dD0xZmI3NTJlNTg5NTQxNTdkXSovCiB7CiAgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VTVFNJWkVdOwogICAgIFNIQW9iamVjdCB0ZW1wOwpAQCAtNDI2LDU0ICs0NDMsNDEgQEAKICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKWRpZ2VzdCwgc2VsZi0+ZGlnZXN0c2l6ZSk7CiB9CiAKLVB5RG9jX1NUUlZBUihTSEEyNTZfaGV4ZGlnZXN0X19kb2NfXywKLSJSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuIik7CisvKltjbGluaWMgaW5wdXRdCitTSEEyNTZUeXBlLmhleGRpZ2VzdAorCitSZXR1cm4gdGhlIGRpZ2VzdCB2YWx1ZSBhcyBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TSEEyNTZfaGV4ZGlnZXN0KFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK1NIQTI1NlR5cGVfaGV4ZGlnZXN0X2ltcGwoU0hBb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTcyNWY4YTcwNDFhZTk3ZjMgaW5wdXQ9MGNjNGM3MTQ2OTMwMTBkMV0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RTSVpFXTsKICAgICBTSEFvYmplY3QgdGVtcDsKLSAgICBQeU9iamVjdCAqcmV0dmFsOwotICAgIFB5X1VDUzEgKmhleF9kaWdlc3Q7Ci0gICAgaW50IGksIGo7CiAKICAgICAvKiBHZXQgdGhlIHJhdyAoYmluYXJ5KSBkaWdlc3QgdmFsdWUgKi8KICAgICBTSEFjb3B5KHNlbGYsICZ0ZW1wKTsKICAgICBzaGFfZmluYWwoZGlnZXN0LCAmdGVtcCk7CiAKLSAgICAvKiBDcmVhdGUgYSBuZXcgc3RyaW5nICovCi0gICAgcmV0dmFsID0gUHlVbmljb2RlX05ldyhzZWxmLT5kaWdlc3RzaXplICogMiwgMTI3KTsKLSAgICBpZiAoIXJldHZhbCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGhleF9kaWdlc3QgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXR2YWwpOwotCi0gICAgLyogTWFrZSBoZXggdmVyc2lvbiBvZiB0aGUgZGlnZXN0ICovCi0gICAgZm9yKGk9aj0wOyBpPHNlbGYtPmRpZ2VzdHNpemU7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGM7Ci0gICAgICAgIGMgPSAoZGlnZXN0W2ldID4+IDQpICYgMHhmOwotICAgICAgICBoZXhfZGlnZXN0W2orK10gPSBQeV9oZXhkaWdpdHNbY107Ci0gICAgICAgIGMgPSAoZGlnZXN0W2ldICYgMHhmKTsKLSAgICAgICAgaGV4X2RpZ2VzdFtqKytdID0gUHlfaGV4ZGlnaXRzW2NdOwotICAgIH0KLSNpZmRlZiBQeV9ERUJVRwotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmV0dmFsLCAxKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmV0dmFsOworICAgIHJldHVybiBfUHlfc3RyaGV4KChjb25zdCBjaGFyICopZGlnZXN0LCBzZWxmLT5kaWdlc3RzaXplKTsKIH0KIAotUHlEb2NfU1RSVkFSKFNIQTI1Nl91cGRhdGVfX2RvY19fLAotIlVwZGF0ZSB0aGlzIGhhc2ggb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLiIpOworLypbY2xpbmljIGlucHV0XQorU0hBMjU2VHlwZS51cGRhdGUKKworICAgIG9iajogb2JqZWN0CisgICAgLworCitVcGRhdGUgdGhpcyBoYXNoIG9iamVjdCdzIHN0YXRlIHdpdGggdGhlIHByb3ZpZGVkIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVNIQTI1Nl91cGRhdGUoU0hBb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK1NIQTI1NlR5cGVfdXBkYXRlKFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wOTY3ZmIyODYwYzY2YWY3IGlucHV0PWIyZDQ0OWQ1YjMwZjBmNWFdKi8KIHsKLSAgICBQeU9iamVjdCAqb2JqOwogICAgIFB5X2J1ZmZlciBidWY7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86dXBkYXRlIiwgJm9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgR0VUX0JVRkZFUl9WSUVXX09SX0VSUk9VVChvYmosICZidWYpOwogCiAgICAgc2hhX3VwZGF0ZShzZWxmLCBidWYuYnVmLCBidWYubGVuKTsKQEAgLTQ4NCwxMCArNDg4LDEwIEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBTSEFfbWV0aG9kc1tdID0gewotICAgIHsiY29weSIsICAgICAgKFB5Q0Z1bmN0aW9uKVNIQTI1Nl9jb3B5LCAgICAgIE1FVEhfTk9BUkdTLCAgU0hBMjU2X2NvcHlfX2RvY19ffSwKLSAgICB7ImRpZ2VzdCIsICAgIChQeUNGdW5jdGlvbilTSEEyNTZfZGlnZXN0LCAgICBNRVRIX05PQVJHUywgIFNIQTI1Nl9kaWdlc3RfX2RvY19ffSwKLSAgICB7ImhleGRpZ2VzdCIsIChQeUNGdW5jdGlvbilTSEEyNTZfaGV4ZGlnZXN0LCBNRVRIX05PQVJHUywgIFNIQTI1Nl9oZXhkaWdlc3RfX2RvY19ffSwKLSAgICB7InVwZGF0ZSIsICAgIChQeUNGdW5jdGlvbilTSEEyNTZfdXBkYXRlLCAgICBNRVRIX1ZBUkFSR1MsIFNIQTI1Nl91cGRhdGVfX2RvY19ffSwKKyAgICBTSEEyNTZUWVBFX0NPUFlfTUVUSE9EREVGCisgICAgU0hBMjU2VFlQRV9ESUdFU1RfTUVUSE9EREVGCisgICAgU0hBMjU2VFlQRV9IRVhESUdFU1RfTUVUSE9EREVGCisgICAgU0hBMjU2VFlQRV9VUERBVEVfTUVUSE9EREVGCiAgICAge05VTEwsICAgICAgICBOVUxMfSAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC01OTQsMjcgKzU5OCwyNiBAQAogCiAvKiBUaGUgc2luZ2xlIG1vZHVsZS1sZXZlbCBmdW5jdGlvbjogbmV3KCkgKi8KIAotUHlEb2NfU1RSVkFSKFNIQTI1Nl9uZXdfX2RvY19fLAotIlJldHVybiBhIG5ldyBTSEEtMjU2IGhhc2ggb2JqZWN0OyBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJpbmcuIik7CisvKltjbGluaWMgaW5wdXRdCitfc2hhMjU2LnNoYTI1NgorCisgICAgc3RyaW5nOiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSBiJycKKworUmV0dXJuIGEgbmV3IFNIQS0yNTYgaGFzaCBvYmplY3Q7IG9wdGlvbmFsbHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVNIQTI1Nl9uZXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQorX3NoYTI1Nl9zaGEyNTZfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyaW5nKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZhNjQ0NDM2ZGNlYTVjMzEgaW5wdXQ9MDljY2UzZmI4NTUwNTZiMl0qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3RyaW5nIiwgTlVMTH07CiAgICAgU0hBb2JqZWN0ICpuZXc7Ci0gICAgUHlPYmplY3QgKmRhdGFfb2JqID0gTlVMTDsKICAgICBQeV9idWZmZXIgYnVmOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAifE86bmV3Iiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29iaikpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKGRhdGFfb2JqKQotICAgICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKGRhdGFfb2JqLCAmYnVmKTsKKyAgICBpZiAoc3RyaW5nKQorICAgICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKHN0cmluZywgJmJ1Zik7CiAKICAgICBpZiAoKG5ldyA9IG5ld1NIQTI1Nm9iamVjdCgpKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChkYXRhX29iaikKKyAgICAgICAgaWYgKHN0cmluZykKICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTYyMywxMSArNjI2LDExIEBACiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobmV3KTsKLSAgICAgICAgaWYgKGRhdGFfb2JqKQorICAgICAgICBpZiAoc3RyaW5nKQogICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChkYXRhX29iaikgeworICAgIGlmIChzdHJpbmcpIHsKICAgICAgICAgc2hhX3VwZGF0ZShuZXcsIGJ1Zi5idWYsIGJ1Zi5sZW4pOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgIH0KQEAgLTYzNSwyNyArNjM4LDI2IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ldzsKIH0KIAotUHlEb2NfU1RSVkFSKFNIQTIyNF9uZXdfX2RvY19fLAotIlJldHVybiBhIG5ldyBTSEEtMjI0IGhhc2ggb2JqZWN0OyBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJpbmcuIik7CisvKltjbGluaWMgaW5wdXRdCitfc2hhMjU2LnNoYTIyNAorCisgICAgc3RyaW5nOiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSBiJycKKworUmV0dXJuIGEgbmV3IFNIQS0yMjQgaGFzaCBvYmplY3Q7IG9wdGlvbmFsbHkgaW5pdGlhbGl6ZWQgd2l0aCBhIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVNIQTIyNF9uZXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQorX3NoYTI1Nl9zaGEyMjRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3RyaW5nKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIxZTNiYTIyYzM0MDRmOTMgaW5wdXQ9MjdhMDRiYTI0YzM1M2E3M10qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic3RyaW5nIiwgTlVMTH07CiAgICAgU0hBb2JqZWN0ICpuZXc7Ci0gICAgUHlPYmplY3QgKmRhdGFfb2JqID0gTlVMTDsKICAgICBQeV9idWZmZXIgYnVmOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LCAifE86bmV3Iiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX29iaikpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKGRhdGFfb2JqKQotICAgICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKGRhdGFfb2JqLCAmYnVmKTsKKyAgICBpZiAoc3RyaW5nKQorICAgICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKHN0cmluZywgJmJ1Zik7CiAKICAgICBpZiAoKG5ldyA9IG5ld1NIQTIyNG9iamVjdCgpKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChkYXRhX29iaikKKyAgICAgICAgaWYgKHN0cmluZykKICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTY2NCwxMSArNjY2LDExIEBACiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobmV3KTsKLSAgICAgICAgaWYgKGRhdGFfb2JqKQorICAgICAgICBpZiAoc3RyaW5nKQogICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChkYXRhX29iaikgeworICAgIGlmIChzdHJpbmcpIHsKICAgICAgICAgc2hhX3VwZGF0ZShuZXcsIGJ1Zi5idWYsIGJ1Zi5sZW4pOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgIH0KQEAgLTY4MCw4ICs2ODIsOCBAQAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUgKi8KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBTSEFfZnVuY3Rpb25zW10gPSB7Ci0gICAgeyJzaGEyNTYiLCAoUHlDRnVuY3Rpb24pU0hBMjU2X25ldywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIFNIQTI1Nl9uZXdfX2RvY19ffSwKLSAgICB7InNoYTIyNCIsIChQeUNGdW5jdGlvbilTSEEyMjRfbmV3LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgU0hBMjI0X25ld19fZG9jX199LAorICAgIF9TSEEyNTZfU0hBMjU2X01FVEhPRERFRgorICAgIF9TSEEyNTZfU0hBMjI0X01FVEhPRERFRgogICAgIHtOVUxMLCAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhNTEybW9kdWxlLmMgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCmluZGV4IDQ3YzU3ZTUuLmY5ZmYwZWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYwpAQCAtMTksNiArMTksMTMgQEAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJoYXNobGliLmgiCisjaW5jbHVkZSAicHlzdHJoZXguaCIKKworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9zaGE1MTIKK2NsYXNzIFNIQTUxMlR5cGUgIlNIQW9iamVjdCAqIiAiJlB5VHlwZV9UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ODFhM2NjZGU5MmJjZmU4ZF0qLwogCiAjaWZkZWYgUFlfTE9OR19MT05HIC8qIElmIG5vIFBZX0xPTkdfTE9ORywgZG9uJ3QgY29tcGlsZSBhbnl0aGluZyEgKi8KIApAQCAtNDksNiArNTYsOCBAQAogICAgIGludCBkaWdlc3RzaXplOwogfSBTSEFvYmplY3Q7CiAKKyNpbmNsdWRlICJjbGluaWMvc2hhNTEybW9kdWxlLmMuaCIKKwogLyogV2hlbiBydW4gb24gYSBsaXR0bGUtZW5kaWFuIENQVSB3ZSBuZWVkIHRvIHBlcmZvcm0gYnl0ZSByZXZlcnNhbCBvbiBhbgogICAgYXJyYXkgb2YgbG9uZ3dvcmRzLiAqLwogCkBAIC0xMDIsNyArMTExLDcgQEAKICAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgogICoKICAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCi0gKiBndXJhbnRlZSBpdCB3b3Jrcy4KKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KICAqCiAgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAaWFodS5jYSwgaHR0cDovL2xpYnRvbS5vcmcKICAqLwpAQCAtNDU5LDEwICs0NjgsMTUgQEAKIAogLyogRXh0ZXJuYWwgbWV0aG9kcyBmb3IgYSBoYXNoIG9iamVjdCAqLwogCi1QeURvY19TVFJWQVIoU0hBNTEyX2NvcHlfX2RvY19fLCAiUmV0dXJuIGEgY29weSBvZiB0aGUgaGFzaCBvYmplY3QuIik7CisvKltjbGluaWMgaW5wdXRdCitTSEE1MTJUeXBlLmNvcHkKKworUmV0dXJuIGEgY29weSBvZiB0aGUgaGFzaCBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TSEE1MTJfY29weShTSEFvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCitTSEE1MTJUeXBlX2NvcHlfaW1wbChTSEFvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YWRlYTg5NmVkMzE2NDgyMSBpbnB1dD05ZjVmMzFlNmM0NTc3NzZhXSovCiB7CiAgICAgU0hBb2JqZWN0ICpuZXdvYmo7CiAKQEAgLTQ3OCwxMSArNDkyLDE1IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ld29iajsKIH0KIAotUHlEb2NfU1RSVkFSKFNIQTUxMl9kaWdlc3RfX2RvY19fLAotIlJldHVybiB0aGUgZGlnZXN0IHZhbHVlIGFzIGEgc3RyaW5nIG9mIGJpbmFyeSBkYXRhLiIpOworLypbY2xpbmljIGlucHV0XQorU0hBNTEyVHlwZS5kaWdlc3QKKworUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgYmluYXJ5IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TSEE1MTJfZGlnZXN0KFNIQW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK1NIQTUxMlR5cGVfZGlnZXN0X2ltcGwoU0hBb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTEwODBiYmVlZWY3ZGRlMWIgaW5wdXQ9NjBjMmNlZGU5ZTAyMzAxOF0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RTSVpFXTsKICAgICBTSEFvYmplY3QgdGVtcDsKQEAgLTQ5Miw1NCArNTEwLDQxIEBACiAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKilkaWdlc3QsIHNlbGYtPmRpZ2VzdHNpemUpOwogfQogCi1QeURvY19TVFJWQVIoU0hBNTEyX2hleGRpZ2VzdF9fZG9jX18sCi0iUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLiIpOworLypbY2xpbmljIGlucHV0XQorU0hBNTEyVHlwZS5oZXhkaWdlc3QKKworUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotU0hBNTEyX2hleGRpZ2VzdChTSEFvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCitTSEE1MTJUeXBlX2hleGRpZ2VzdF9pbXBsKFNIQW9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03MzczMzA1Yjg2MDFlMThiIGlucHV0PTQ5OGI4NzdiMjVjYmUwYTJdKi8KIHsKICAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUU0laRV07CiAgICAgU0hBb2JqZWN0IHRlbXA7Ci0gICAgUHlPYmplY3QgKnJldHZhbDsKLSAgICBQeV9VQ1MxICpoZXhfZGlnZXN0OwotICAgIGludCBpLCBqOwogCiAgICAgLyogR2V0IHRoZSByYXcgKGJpbmFyeSkgZGlnZXN0IHZhbHVlICovCiAgICAgU0hBY29weShzZWxmLCAmdGVtcCk7CiAgICAgc2hhNTEyX2ZpbmFsKGRpZ2VzdCwgJnRlbXApOwogCi0gICAgLyogQ3JlYXRlIGEgbmV3IHN0cmluZyAqLwotICAgIHJldHZhbCA9IFB5VW5pY29kZV9OZXcoc2VsZi0+ZGlnZXN0c2l6ZSAqIDIsIDEyNyk7Ci0gICAgaWYgKCFyZXR2YWwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBoZXhfZGlnZXN0ID0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmV0dmFsKTsKLQotICAgIC8qIE1ha2UgaGV4IHZlcnNpb24gb2YgdGhlIGRpZ2VzdCAqLwotICAgIGZvciAoaT1qPTA7IGk8c2VsZi0+ZGlnZXN0c2l6ZTsgaSsrKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKLSAgICAgICAgYyA9IChkaWdlc3RbaV0gPj4gNCkgJiAweGY7Ci0gICAgICAgIGhleF9kaWdlc3RbaisrXSA9IFB5X2hleGRpZ2l0c1tjXTsKLSAgICAgICAgYyA9IChkaWdlc3RbaV0gJiAweGYpOwotICAgICAgICBoZXhfZGlnZXN0W2orK10gPSBQeV9oZXhkaWdpdHNbY107Ci0gICAgfQotI2lmZGVmIFB5X0RFQlVHCi0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXR2YWwsIDEpKTsKLSNlbmRpZgotICAgIHJldHVybiByZXR2YWw7CisgICAgcmV0dXJuIF9QeV9zdHJoZXgoKGNvbnN0IGNoYXIgKilkaWdlc3QsIHNlbGYtPmRpZ2VzdHNpemUpOwogfQogCi1QeURvY19TVFJWQVIoU0hBNTEyX3VwZGF0ZV9fZG9jX18sCi0iVXBkYXRlIHRoaXMgaGFzaCBvYmplY3QncyBzdGF0ZSB3aXRoIHRoZSBwcm92aWRlZCBzdHJpbmcuIik7CisvKltjbGluaWMgaW5wdXRdCitTSEE1MTJUeXBlLnVwZGF0ZQorCisgICAgb2JqOiBvYmplY3QKKyAgICAvCisKK1VwZGF0ZSB0aGlzIGhhc2ggb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotU0hBNTEyX3VwZGF0ZShTSEFvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorU0hBNTEyVHlwZV91cGRhdGUoU0hBb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFjZjMzM2U3Mzk5NWE3OWUgaW5wdXQ9ZGVkMmI0NjY1NjU2NjI4M10qLwogewotICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp1cGRhdGUiLCAmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBHRVRfQlVGRkVSX1ZJRVdfT1JfRVJST1VUKG9iaiwgJmJ1Zik7CiAKICAgICBzaGE1MTJfdXBkYXRlKHNlbGYsIGJ1Zi5idWYsIGJ1Zi5sZW4pOwpAQCAtNTQ4LDEyICs1NTMsMTYgQEAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CisvKltjbGluaWMgaW5wdXRdCitkdW1wIGJ1ZmZlcgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NTI0Y2UyZTAyMWU0ZWJhNl0qLwogCiBzdGF0aWMgUHlNZXRob2REZWYgU0hBX21ldGhvZHNbXSA9IHsKLSAgICB7ImNvcHkiLCAgICAgIChQeUNGdW5jdGlvbilTSEE1MTJfY29weSwgICAgICBNRVRIX05PQVJHUywgU0hBNTEyX2NvcHlfX2RvY19ffSwKLSAgICB7ImRpZ2VzdCIsICAgIChQeUNGdW5jdGlvbilTSEE1MTJfZGlnZXN0LCAgICBNRVRIX05PQVJHUywgU0hBNTEyX2RpZ2VzdF9fZG9jX199LAotICAgIHsiaGV4ZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKVNIQTUxMl9oZXhkaWdlc3QsIE1FVEhfTk9BUkdTLCBTSEE1MTJfaGV4ZGlnZXN0X19kb2NfX30sCi0gICAgeyJ1cGRhdGUiLCAgICAoUHlDRnVuY3Rpb24pU0hBNTEyX3VwZGF0ZSwgICAgTUVUSF9WQVJBUkdTLCBTSEE1MTJfdXBkYXRlX19kb2NfX30sCisgICAgU0hBNTEyVFlQRV9DT1BZX01FVEhPRERFRgorICAgIFNIQTUxMlRZUEVfRElHRVNUX01FVEhPRERFRgorICAgIFNIQTUxMlRZUEVfSEVYRElHRVNUX01FVEhPRERFRgorICAgIFNIQTUxMlRZUEVfVVBEQVRFX01FVEhPRERFRgogICAgIHtOVUxMLCAgICAgICAgTlVMTH0gICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNjYwLDI3ICs2NjksMjYgQEAKIAogLyogVGhlIHNpbmdsZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb246IG5ldygpICovCiAKLVB5RG9jX1NUUlZBUihTSEE1MTJfbmV3X19kb2NfXywKLSJSZXR1cm4gYSBuZXcgU0hBLTUxMiBoYXNoIG9iamVjdDsgb3B0aW9uYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RyaW5nLiIpOworLypbY2xpbmljIGlucHV0XQorX3NoYTUxMi5zaGE1MTIKKworICAgIHN0cmluZzogb2JqZWN0KGNfZGVmYXVsdD0iTlVMTCIpID0gYicnCisKK1JldHVybiBhIG5ldyBTSEEtNTEyIGhhc2ggb2JqZWN0OyBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TSEE1MTJfbmV3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK19zaGE1MTJfc2hhNTEyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0cmluZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04Yjg2NWEyZGY3M2JkMzg3IGlucHV0PWU2OWJhZDlhZTliNmEzMDhdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OwogICAgIFNIQW9iamVjdCAqbmV3OwotICAgIFB5T2JqZWN0ICpkYXRhX29iaiA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxPOm5ldyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9vYmopKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmIChkYXRhX29iaikKLSAgICAgICAgR0VUX0JVRkZFUl9WSUVXX09SX0VSUk9VVChkYXRhX29iaiwgJmJ1Zik7CisgICAgaWYgKHN0cmluZykKKyAgICAgICAgR0VUX0JVRkZFUl9WSUVXX09SX0VSUk9VVChzdHJpbmcsICZidWYpOwogCiAgICAgaWYgKChuZXcgPSBuZXdTSEE1MTJvYmplY3QoKSkgPT0gTlVMTCkgewotICAgICAgICBpZiAoZGF0YV9vYmopCisgICAgICAgIGlmIChzdHJpbmcpCiAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC02ODksMTEgKzY5NywxMSBAQAogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG5ldyk7Ci0gICAgICAgIGlmIChkYXRhX29iaikKKyAgICAgICAgaWYgKHN0cmluZykKICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoZGF0YV9vYmopIHsKKyAgICBpZiAoc3RyaW5nKSB7CiAgICAgICAgIHNoYTUxMl91cGRhdGUobmV3LCBidWYuYnVmLCBidWYubGVuKTsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICB9CkBAIC03MDEsMjcgKzcwOSwyNiBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKiluZXc7CiB9CiAKLVB5RG9jX1NUUlZBUihTSEEzODRfbmV3X19kb2NfXywKLSJSZXR1cm4gYSBuZXcgU0hBLTM4NCBoYXNoIG9iamVjdDsgb3B0aW9uYWxseSBpbml0aWFsaXplZCB3aXRoIGEgc3RyaW5nLiIpOworLypbY2xpbmljIGlucHV0XQorX3NoYTUxMi5zaGEzODQKKworICAgIHN0cmluZzogb2JqZWN0KGNfZGVmYXVsdD0iTlVMTCIpID0gYicnCisKK1JldHVybiBhIG5ldyBTSEEtMzg0IGhhc2ggb2JqZWN0OyBvcHRpb25hbGx5IGluaXRpYWxpemVkIHdpdGggYSBzdHJpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1TSEEzODRfbmV3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK19zaGE1MTJfc2hhMzg0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnN0cmluZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hZTRiMmUyNmRlY2Y4MWU4IGlucHV0PWM5MzI3Nzg4ZDRlYTQ1NDVdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OwogICAgIFNIQW9iamVjdCAqbmV3OwotICAgIFB5T2JqZWN0ICpkYXRhX29iaiA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInxPOm5ldyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9vYmopKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmIChkYXRhX29iaikKLSAgICAgICAgR0VUX0JVRkZFUl9WSUVXX09SX0VSUk9VVChkYXRhX29iaiwgJmJ1Zik7CisgICAgaWYgKHN0cmluZykKKyAgICAgICAgR0VUX0JVRkZFUl9WSUVXX09SX0VSUk9VVChzdHJpbmcsICZidWYpOwogCiAgICAgaWYgKChuZXcgPSBuZXdTSEEzODRvYmplY3QoKSkgPT0gTlVMTCkgewotICAgICAgICBpZiAoZGF0YV9vYmopCisgICAgICAgIGlmIChzdHJpbmcpCiAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC03MzAsMTEgKzczNywxMSBAQAogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG5ldyk7Ci0gICAgICAgIGlmIChkYXRhX29iaikKKyAgICAgICAgaWYgKHN0cmluZykKICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoZGF0YV9vYmopIHsKKyAgICBpZiAoc3RyaW5nKSB7CiAgICAgICAgIHNoYTUxMl91cGRhdGUobmV3LCBidWYuYnVmLCBidWYubGVuKTsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICB9CkBAIC03NDMsMTEgKzc1MCwxNiBAQAogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK2R1bXAgYnVmZmVyCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD01MjRjZTJlMDIxZTRlYmE2XSovCisKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgU0hBX2Z1bmN0aW9uc1tdID0gewotICAgIHsic2hhNTEyIiwgKFB5Q0Z1bmN0aW9uKVNIQTUxMl9uZXcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBTSEE1MTJfbmV3X19kb2NfX30sCi0gICAgeyJzaGEzODQiLCAoUHlDRnVuY3Rpb24pU0hBMzg0X25ldywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIFNIQTM4NF9uZXdfX2RvY19ffSwKKyAgICBfU0hBNTEyX1NIQTUxMl9NRVRIT0RERUYKKyAgICBfU0hBNTEyX1NIQTM4NF9NRVRIT0RERUYKICAgICB7TlVMTCwgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwppbmRleCBmZWRhZGRmLi5hMWExOGIwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKQEAgLTcsNiArNyw5IEBACiAjaWZuZGVmIE1TX1dJTkRPV1MKICNpbmNsdWRlICJwb3NpeG1vZHVsZS5oIgogI2VuZGlmCisjaWZkZWYgTVNfV0lORE9XUworI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIiAgIC8qIG5lZWRlZCBmb3IgU09DS0VUX1QgKi8KKyNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTQ5LDYgKzUyLDEzIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2luY2x1ZGUgImNsaW5pYy9zaWduYWxtb2R1bGUuYy5oIgorCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgc2lnbmFsCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1iMDMwMWEzYmRlNWZlOWQzXSovCisKIAogLyoKICAgIE5PVEVTIE9OIFRIRSBJTlRFUkFDVElPTiBCRVRXRUVOIFNJR05BTFMgQU5EIFRIUkVBRFMKQEAgLTg3LDcgKzk3LDIwIEBACiAgICAgUHlPYmplY3QgKmZ1bmM7CiB9IEhhbmRsZXJzW05TSUddOwogCisjaWZkZWYgTVNfV0lORE9XUworI2RlZmluZSBJTlZBTElEX0ZEICgoU09DS0VUX1QpLTEpCisKK3N0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgeworICAgIFNPQ0tFVF9UIGZkOworICAgIGludCB1c2Vfc2VuZDsKKyAgICBpbnQgc2VuZF9lcnJfc2V0OworICAgIGludCBzZW5kX2Vycm5vOworICAgIGludCBzZW5kX3dpbl9lcnJvcjsKK30gd2FrZXVwID0ge0lOVkFMSURfRkQsIDAsIDB9OworI2Vsc2UKKyNkZWZpbmUgSU5WQUxJRF9GRCAoLTEpCiBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHdha2V1cF9mZCA9IC0xOworI2VuZGlmCiAKIC8qIFNwZWVkIHVwIHNpZ2NoZWNrKCkgd2hlbiBub25lIHRyaXBwZWQgKi8KIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgaXNfdHJpcHBlZCA9IDA7CkBAIC0xNzIsNyArMTk1LDcgQEAKIH0KIAogc3RhdGljIGludAotcmVwb3J0X3dha2V1cF9lcnJvcih2b2lkICpkYXRhKQorcmVwb3J0X3dha2V1cF93cml0ZV9lcnJvcih2b2lkICpkYXRhKQogewogICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CiAgICAgZXJybm8gPSAoaW50KSAoUHlfaW50cHRyX3QpIGRhdGE7CkBAIC0xODQsMjUgKzIwNyw4NyBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgTVNfV0lORE9XUworc3RhdGljIGludAorcmVwb3J0X3dha2V1cF9zZW5kX2Vycm9yKHZvaWQqIFB5X1VOVVNFRChkYXRhKSkKK3sKKyAgICBQeU9iamVjdCAqcmVzOworCisgICAgaWYgKHdha2V1cC5zZW5kX3dpbl9lcnJvcikgeworICAgICAgICAvKiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycigpIGludm9rZXMgRm9ybWF0TWVzc2FnZSgpIHdoaWNoCisgICAgICAgICAgIHJlY29nbml6ZXMgdGhlIGVycm9yIGNvZGVzIHVzZWQgYnkgYm90aCBHZXRMYXN0RXJyb3IoKSBhbmQKKyAgICAgICAgICAgV1NBR2V0TGFzdEVycm9yICovCisgICAgICAgIHJlcyA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5RXhjX09TRXJyb3IsIHdha2V1cC5zZW5kX3dpbl9lcnJvcik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBlcnJubyA9IHdha2V1cC5zZW5kX2Vycm5vOworICAgICAgICByZXMgPSBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgfQorCisgICAgYXNzZXJ0KHJlcyA9PSBOVUxMKTsKKyAgICB3YWtldXAuc2VuZF9lcnJfc2V0ID0gMDsKKworICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJFeGNlcHRpb24gaWdub3JlZCB3aGVuIHRyeWluZyB0byBzZW5kIHRvIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbCB3YWtldXAgZmQ6XG4iKTsKKyAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAgIC8qIE1TX1dJTkRPV1MgKi8KKwogc3RhdGljIHZvaWQKIHRyaXBfc2lnbmFsKGludCBzaWdfbnVtKQogewogICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKLSAgICBpbnQgcmMgPSAwOworICAgIGludCBmZDsKKyAgICBQeV9zc2l6ZV90IHJjOwogCiAgICAgSGFuZGxlcnNbc2lnX251bV0udHJpcHBlZCA9IDE7Ci0gICAgaWYgKHdha2V1cF9mZCAhPSAtMSkgeworCisjaWZkZWYgTVNfV0lORE9XUworICAgIGZkID0gUHlfU0FGRV9ET1dOQ0FTVCh3YWtldXAuZmQsIFNPQ0tFVF9ULCBpbnQpOworI2Vsc2UKKyAgICBmZCA9IHdha2V1cF9mZDsKKyNlbmRpZgorCisgICAgaWYgKGZkICE9IElOVkFMSURfRkQpIHsKICAgICAgICAgYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKXNpZ19udW07Ci0gICAgICAgIHdoaWxlICgocmMgPSB3cml0ZSh3YWtldXBfZmQsICZieXRlLCAxKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOwotICAgICAgICBpZiAocmMgPT0gLTEpCi0gICAgICAgICAgICBQeV9BZGRQZW5kaW5nQ2FsbChyZXBvcnRfd2FrZXVwX2Vycm9yLCAodm9pZCAqKSAoUHlfaW50cHRyX3QpIGVycm5vKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmICh3YWtldXAudXNlX3NlbmQpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByYyA9IHNlbmQoZmQsICZieXRlLCAxLCAwKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHJjIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgICAgICAgICAgIC8qIHdlIG9ubHkgaGF2ZSBhIHN0b3JhZ2UgZm9yIG9uZSBlcnJvciBpbiB0aGUgd2FrZXVwIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgaWYgKHJjIDwgMCAmJiAhd2FrZXVwLnNlbmRfZXJyX3NldCkgeworICAgICAgICAgICAgICAgIHdha2V1cC5zZW5kX2Vycl9zZXQgPSAxOworICAgICAgICAgICAgICAgIHdha2V1cC5zZW5kX2Vycm5vID0gZXJybm87CisgICAgICAgICAgICAgICAgd2FrZXVwLnNlbmRfd2luX2Vycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgUHlfQWRkUGVuZGluZ0NhbGwocmVwb3J0X3dha2V1cF9zZW5kX2Vycm9yLCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKXNpZ19udW07CisKKyAgICAgICAgICAgIC8qIF9QeV93cml0ZV9ub3JhaXNlKCkgcmV0cmllcyB3cml0ZSgpIGlmIHdyaXRlKCkgaXMgaW50ZXJydXB0ZWQgYnkKKyAgICAgICAgICAgICAgIGEgc2lnbmFsIChmYWlscyB3aXRoIEVJTlRSKS4gKi8KKyAgICAgICAgICAgIHJjID0gX1B5X3dyaXRlX25vcmFpc2UoZmQsICZieXRlLCAxKTsKKworICAgICAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsKHJlcG9ydF93YWtldXBfd3JpdGVfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikoUHlfaW50cHRyX3QpZXJybm8pOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIGlmIChpc190cmlwcGVkKQotICAgICAgICByZXR1cm47Ci0gICAgLyogU2V0IGlzX3RyaXBwZWQgYWZ0ZXIgc2V0dGluZyAudHJpcHBlZCwgYXMgaXQgZ2V0cwotICAgICAgIGNsZWFyZWQgaW4gUHlFcnJfQ2hlY2tTaWduYWxzKCkgYmVmb3JlIC50cmlwcGVkLiAqLwotICAgIGlzX3RyaXBwZWQgPSAxOwotICAgIFB5X0FkZFBlbmRpbmdDYWxsKGNoZWNrc2lnbmFsc193aXRoYXJnLCBOVUxMKTsKKworICAgIGlmICghaXNfdHJpcHBlZCkgeworICAgICAgICAvKiBTZXQgaXNfdHJpcHBlZCBhZnRlciBzZXR0aW5nIC50cmlwcGVkLCBhcyBpdCBnZXRzCisgICAgICAgICAgIGNsZWFyZWQgaW4gUHlFcnJfQ2hlY2tTaWduYWxzKCkgYmVmb3JlIC50cmlwcGVkLiAqLworICAgICAgICBpc190cmlwcGVkID0gMTsKKyAgICAgICAgUHlfQWRkUGVuZGluZ0NhbGwoY2hlY2tzaWduYWxzX3dpdGhhcmcsIE5VTEwpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTIyNyw3ICszMTIsNyBAQAogICAgIGlmIChzaWdfbnVtICE9IFNJR0NITEQpCiAjZW5kaWYKICAgICAvKiBJZiB0aGUgaGFuZGxlciB3YXMgbm90IHNldCB1cCB3aXRoIHNpZ2FjdGlvbiwgcmVpbnN0YWxsIGl0LiAgU2VlCi0gICAgICogUHl0aG9uL3B5dGhvbnJ1bi5jIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgUHlPU19zZXRzaWcgd2hpY2gKKyAgICAgKiBQeXRob24vcHlsaWZlY3ljbGUuYyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIFB5T1Nfc2V0c2lnIHdoaWNoCiAgICAgICogbWFrZXMgdGhpcyB0cnVlLiAgU2VlIGFsc28gaXNzdWU4MzU0LiAqLwogICAgIFB5T1Nfc2V0c2lnKHNpZ19udW0sIHNpZ25hbF9oYW5kbGVyKTsKICNlbmRpZgpAQCAtMjQ0LDI1ICszMjksMzcgQEAKIAogCiAjaWZkZWYgSEFWRV9BTEFSTQotc3RhdGljIFB5T2JqZWN0ICoKLXNpZ25hbF9hbGFybShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisKKy8qW2NsaW5pYyBpbnB1dF0KK3NpZ25hbC5hbGFybSAtPiBsb25nCisKKyAgICBzZWNvbmRzOiBpbnQKKyAgICAvCisKK0FycmFuZ2UgZm9yIFNJR0FMUk0gdG8gYXJyaXZlIGFmdGVyIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGxvbmcKK3NpZ25hbF9hbGFybV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzZWNvbmRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE0NDIzMjI5MDgxNGMyOTggaW5wdXQ9MGQ1ZTk3ZTBlNmYzOWU4Nl0qLwogewotICAgIGludCB0OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTphbGFybSIsICZ0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogYWxhcm0oKSByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyByZW1haW5pbmcgKi8KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWFsYXJtKHQpKTsKKyAgICByZXR1cm4gKGxvbmcpYWxhcm0oc2Vjb25kcyk7CiB9CiAKLVB5RG9jX1NUUlZBUihhbGFybV9kb2MsCi0iYWxhcm0oc2Vjb25kcylcblwKLVxuXAotQXJyYW5nZSBmb3IgU0lHQUxSTSB0byBhcnJpdmUgYWZ0ZXIgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLiIpOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1BBVVNFCisKKy8qW2NsaW5pYyBpbnB1dF0KK3NpZ25hbC5wYXVzZQorCitXYWl0IHVudGlsIGEgc2lnbmFsIGFycml2ZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1zaWduYWxfcGF1c2UoUHlPYmplY3QgKnNlbGYpCitzaWduYWxfcGF1c2VfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM5MTY1Njc4OGIzYzM5MjkgaW5wdXQ9ZjAzZGUwZjg3NTc1MjA2Ml0qLwogewogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAodm9pZClwYXVzZSgpOwpAQCAtMjczLDI5ICszNzAsMzggQEAKICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQotUHlEb2NfU1RSVkFSKHBhdXNlX2RvYywKLSJwYXVzZSgpXG5cCi1cblwKLVdhaXQgdW50aWwgYSBzaWduYWwgYXJyaXZlcy4iKTsKIAogI2VuZGlmCiAKIAorLypbY2xpbmljIGlucHV0XQorc2lnbmFsLnNpZ25hbAorCisgICAgc2lnbmFsbnVtOiBpbnQKKyAgICBoYW5kbGVyOiAgIG9iamVjdAorICAgIC8KKworU2V0IHRoZSBhY3Rpb24gZm9yIHRoZSBnaXZlbiBzaWduYWwuCisKK1RoZSBhY3Rpb24gY2FuIGJlIFNJR19ERkwsIFNJR19JR04sIG9yIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdC4KK1RoZSBwcmV2aW91cyBhY3Rpb24gaXMgcmV0dXJuZWQuICBTZWUgZ2V0c2lnbmFsKCkgZm9yIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMuCisKKyoqKiBJTVBPUlRBTlQgTk9USUNFICoqKgorQSBzaWduYWwgaGFuZGxlciBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOgordGhlIGZpcnN0IGlzIHRoZSBzaWduYWwgbnVtYmVyLCB0aGUgc2Vjb25kIGlzIHRoZSBpbnRlcnJ1cHRlZCBzdGFjayBmcmFtZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXNpZ25hbF9zaWduYWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc2lnbmFsX3NpZ25hbF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzaWduYWxudW0sIFB5T2JqZWN0ICpoYW5kbGVyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI0NGNmZGE0Mzc4MGYzYTEgaW5wdXQ9ZGVlZTg0YWY1ZmEwNDMyY10qLwogewotICAgIFB5T2JqZWN0ICpvYmo7Ci0gICAgaW50IHNpZ19udW07CiAgICAgUHlPYmplY3QgKm9sZF9oYW5kbGVyOwogICAgIHZvaWQgKCpmdW5jKShpbnQpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU86c2lnbmFsIiwgJnNpZ19udW0sICZvYmopKQotICAgICAgICByZXR1cm4gTlVMTDsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgLyogVmFsaWRhdGUgdGhhdCBzaWdfbnVtIGlzIG9uZSBvZiB0aGUgYWxsb3dhYmxlIHNpZ25hbHMgKi8KLSAgICBzd2l0Y2ggKHNpZ19udW0pIHsKKyAgICAvKiBWYWxpZGF0ZSB0aGF0IHNpZ25hbG51bSBpcyBvbmUgb2YgdGhlIGFsbG93YWJsZSBzaWduYWxzICovCisgICAgc3dpdGNoIChzaWduYWxudW0pIHsKICAgICAgICAgY2FzZSBTSUdBQlJUOiBicmVhazsKICNpZmRlZiBTSUdCUkVBSwogICAgICAgICAvKiBJc3N1ZSAjMTAwMDM6IFNJR0JSRUFLIGlzIG5vdCBkb2N1bWVudGVkIGFzIHBlcm1pdHRlZCwgYnV0IHdvcmtzCkBAIC0zMTksNjEgKzQyNSw2MyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjZW5kaWYKLSAgICBpZiAoc2lnX251bSA8IDEgfHwgc2lnX251bSA+PSBOU0lHKSB7CisgICAgaWYgKHNpZ25hbG51bSA8IDEgfHwgc2lnbmFsbnVtID49IE5TSUcpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsIG51bWJlciBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChvYmogPT0gSWdub3JlSGFuZGxlcikKKyAgICBpZiAoaGFuZGxlciA9PSBJZ25vcmVIYW5kbGVyKQogICAgICAgICBmdW5jID0gU0lHX0lHTjsKLSAgICBlbHNlIGlmIChvYmogPT0gRGVmYXVsdEhhbmRsZXIpCisgICAgZWxzZSBpZiAoaGFuZGxlciA9PSBEZWZhdWx0SGFuZGxlcikKICAgICAgICAgZnVuYyA9IFNJR19ERkw7Ci0gICAgZWxzZSBpZiAoIVB5Q2FsbGFibGVfQ2hlY2sob2JqKSkgeworICAgIGVsc2UgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGhhbmRsZXIpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAic2lnbmFsIGhhbmRsZXIgbXVzdCBiZSBzaWduYWwuU0lHX0lHTiwgc2lnbmFsLlNJR19ERkwsIG9yIGEgY2FsbGFibGUgb2JqZWN0Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgZnVuYyA9IHNpZ25hbF9oYW5kbGVyOwotICAgIGlmIChQeU9TX3NldHNpZyhzaWdfbnVtLCBmdW5jKSA9PSBTSUdfRVJSKSB7CisgICAgaWYgKFB5T1Nfc2V0c2lnKHNpZ25hbG51bSwgZnVuYykgPT0gU0lHX0VSUikgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBvbGRfaGFuZGxlciA9IEhhbmRsZXJzW3NpZ19udW1dLmZ1bmM7Ci0gICAgSGFuZGxlcnNbc2lnX251bV0udHJpcHBlZCA9IDA7Ci0gICAgUHlfSU5DUkVGKG9iaik7Ci0gICAgSGFuZGxlcnNbc2lnX251bV0uZnVuYyA9IG9iajsKKyAgICBvbGRfaGFuZGxlciA9IEhhbmRsZXJzW3NpZ25hbG51bV0uZnVuYzsKKyAgICBIYW5kbGVyc1tzaWduYWxudW1dLnRyaXBwZWQgPSAwOworICAgIFB5X0lOQ1JFRihoYW5kbGVyKTsKKyAgICBIYW5kbGVyc1tzaWduYWxudW1dLmZ1bmMgPSBoYW5kbGVyOwogICAgIGlmIChvbGRfaGFuZGxlciAhPSBOVUxMKQogICAgICAgICByZXR1cm4gb2xkX2hhbmRsZXI7CiAgICAgZWxzZQogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKHNpZ25hbF9kb2MsCi0ic2lnbmFsKHNpZywgYWN0aW9uKSAtPiBhY3Rpb25cblwKLVxuXAotU2V0IHRoZSBhY3Rpb24gZm9yIHRoZSBnaXZlbiBzaWduYWwuICBUaGUgYWN0aW9uIGNhbiBiZSBTSUdfREZMLFxuXAotU0lHX0lHTiwgb3IgYSBjYWxsYWJsZSBQeXRob24gb2JqZWN0LiAgVGhlIHByZXZpb3VzIGFjdGlvbiBpc1xuXAotcmV0dXJuZWQuICBTZWUgZ2V0c2lnbmFsKCkgZm9yIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMuXG5cCi1cblwKLSoqKiBJTVBPUlRBTlQgTk9USUNFICoqKlxuXAotQSBzaWduYWwgaGFuZGxlciBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOlxuXAotdGhlIGZpcnN0IGlzIHRoZSBzaWduYWwgbnVtYmVyLCB0aGUgc2Vjb25kIGlzIHRoZSBpbnRlcnJ1cHRlZCBzdGFjayBmcmFtZS4iKTsKIAorLypbY2xpbmljIGlucHV0XQorc2lnbmFsLmdldHNpZ25hbAorCisgICAgc2lnbmFsbnVtOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgY3VycmVudCBhY3Rpb24gZm9yIHRoZSBnaXZlbiBzaWduYWwuCisKK1RoZSByZXR1cm4gdmFsdWUgY2FuIGJlOgorICBTSUdfSUdOIC0tIGlmIHRoZSBzaWduYWwgaXMgYmVpbmcgaWdub3JlZAorICBTSUdfREZMIC0tIGlmIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIHNpZ25hbCBpcyBpbiBlZmZlY3QKKyAgTm9uZSAgICAtLSBpZiBhbiB1bmtub3duIGhhbmRsZXIgaXMgaW4gZWZmZWN0CisgIGFueXRoaW5nIGVsc2UgLS0gdGhlIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QgdXNlZCBhcyBhIGhhbmRsZXIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXNpZ25hbF9nZXRzaWduYWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc2lnbmFsX2dldHNpZ25hbF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBzaWduYWxudW0pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzViM2UwZTc5NmZkNTU1ZSBpbnB1dD1hYzIzYTAwZjE5ZGZhNTA5XSovCiB7Ci0gICAgaW50IHNpZ19udW07CiAgICAgUHlPYmplY3QgKm9sZF9oYW5kbGVyOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpnZXRzaWduYWwiLCAmc2lnX251bSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChzaWdfbnVtIDwgMSB8fCBzaWdfbnVtID49IE5TSUcpIHsKKyAgICBpZiAoc2lnbmFsbnVtIDwgMSB8fCBzaWduYWxudW0gPj0gTlNJRykgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwgbnVtYmVyIG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgb2xkX2hhbmRsZXIgPSBIYW5kbGVyc1tzaWdfbnVtXS5mdW5jOworICAgIG9sZF9oYW5kbGVyID0gSGFuZGxlcnNbc2lnbmFsbnVtXS5mdW5jOwogICAgIGlmIChvbGRfaGFuZGxlciAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihvbGRfaGFuZGxlcik7CiAgICAgICAgIHJldHVybiBvbGRfaGFuZGxlcjsKQEAgLTM4Myw1MyArNDkxLDY1IEBACiAgICAgfQogfQogCi1QeURvY19TVFJWQVIoZ2V0c2lnbmFsX2RvYywKLSJnZXRzaWduYWwoc2lnKSAtPiBhY3Rpb25cblwKLVxuXAotUmV0dXJuIHRoZSBjdXJyZW50IGFjdGlvbiBmb3IgdGhlIGdpdmVuIHNpZ25hbC4gIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlOlxuXAotU0lHX0lHTiAtLSBpZiB0aGUgc2lnbmFsIGlzIGJlaW5nIGlnbm9yZWRcblwKLVNJR19ERkwgLS0gaWYgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgc2lnbmFsIGlzIGluIGVmZmVjdFxuXAotTm9uZSAtLSBpZiBhbiB1bmtub3duIGhhbmRsZXIgaXMgaW4gZWZmZWN0XG5cCi1hbnl0aGluZyBlbHNlIC0tIHRoZSBjYWxsYWJsZSBQeXRob24gb2JqZWN0IHVzZWQgYXMgYSBoYW5kbGVyIik7Ci0KICNpZmRlZiBIQVZFX1NJR0lOVEVSUlVQVAotUHlEb2NfU1RSVkFSKHNpZ2ludGVycnVwdF9kb2MsCi0ic2lnaW50ZXJydXB0KHNpZywgZmxhZykgLT4gTm9uZVxuXAotY2hhbmdlIHN5c3RlbSBjYWxsIHJlc3RhcnQgYmVoYXZpb3VyOiBpZiBmbGFnIGlzIEZhbHNlLCBzeXN0ZW0gY2FsbHNcblwKLXdpbGwgYmUgcmVzdGFydGVkIHdoZW4gaW50ZXJydXB0ZWQgYnkgc2lnbmFsIHNpZywgZWxzZSBzeXN0ZW0gY2FsbHNcblwKLXdpbGwgYmUgaW50ZXJydXB0ZWQuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK3NpZ25hbC5zaWdpbnRlcnJ1cHQKKworICAgIHNpZ25hbG51bTogaW50CisgICAgZmxhZzogICAgICBpbnQKKyAgICAvCisKK0NoYW5nZSBzeXN0ZW0gY2FsbCByZXN0YXJ0IGJlaGF2aW91ci4KKworSWYgZmxhZyBpcyBGYWxzZSwgc3lzdGVtIGNhbGxzIHdpbGwgYmUgcmVzdGFydGVkIHdoZW4gaW50ZXJydXB0ZWQgYnkKK3NpZ25hbCBzaWcsIGVsc2Ugc3lzdGVtIGNhbGxzIHdpbGwgYmUgaW50ZXJydXB0ZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zaWduYWxfc2lnaW50ZXJydXB0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3NpZ25hbF9zaWdpbnRlcnJ1cHRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgc2lnbmFsbnVtLCBpbnQgZmxhZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wNjM4MTYyNDNkODVkZDE5IGlucHV0PTQxNjBhY2FjY2EzZTIwOTldKi8KIHsKLSAgICBpbnQgc2lnX251bTsKLSAgICBpbnQgZmxhZzsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c2lnaW50ZXJydXB0IiwgJnNpZ19udW0sICZmbGFnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHNpZ19udW0gPCAxIHx8IHNpZ19udW0gPj0gTlNJRykgeworICAgIGlmIChzaWduYWxudW0gPCAxIHx8IHNpZ25hbG51bSA+PSBOU0lHKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbCBudW1iZXIgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoc2lnaW50ZXJydXB0KHNpZ19udW0sIGZsYWcpPDApIHsKKyAgICBpZiAoc2lnaW50ZXJydXB0KHNpZ25hbG51bSwgZmxhZyk8MCkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogI2VuZGlmCiAKLXN0YXRpYyBQeU9iamVjdCAqCisKK3N0YXRpYyBQeU9iamVjdCoKIHNpZ25hbF9zZXRfd2FrZXVwX2ZkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7CisgICAgc3RydWN0IF9QeV9zdGF0X3N0cnVjdCBzdGF0dXM7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5T2JqZWN0ICpmZG9iajsKKyAgICBTT0NLRVRfVCBzb2NrZmQsIG9sZF9zb2NrZmQ7CisgICAgaW50IHJlczsKKyAgICBpbnQgcmVzX3NpemUgPSBzaXplb2YgcmVzOworICAgIFB5T2JqZWN0ICptb2Q7CisgICAgaW50IGlzX3NvY2tldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpzZXRfd2FrZXVwX2ZkIiwgJmZkb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzb2NrZmQgPSBQeUxvbmdfQXNTb2NrZXRfdChmZG9iaik7CisgICAgaWYgKHNvY2tmZCA9PSAoU09DS0VUX1QpKC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbHNlCiAgICAgaW50IGZkLCBvbGRfZmQ7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6c2V0X3dha2V1cF9mZCIsICZmZCkpCiAgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmCisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC00MzcsMjEgKzU1Nyw5MCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjZW5kaWYKLSAgICBpZiAoZmQgIT0gLTEgJiYgKCFfUHlWZXJpZnlfZmQoZmQpIHx8IGZzdGF0KGZkLCAmYnVmKSAhPSAwKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgZmQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaXNfc29ja2V0ID0gMDsKKyAgICBpZiAoc29ja2ZkICE9IElOVkFMSURfRkQpIHsKKyAgICAgICAgLyogSW1wb3J0IHRoZSBfc29ja2V0IG1vZHVsZSB0byBjYWxsIFdTQVN0YXJ0dXAoKSAqLworICAgICAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrKCJfc29ja2V0Iik7CisgICAgICAgIGlmIChtb2QgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBQeV9ERUNSRUYobW9kKTsKKworICAgICAgICAvKiB0ZXN0IHRoZSBzb2NrZXQgKi8KKyAgICAgICAgaWYgKGdldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikmcmVzLCAmcmVzX3NpemUpICE9IDApIHsKKyAgICAgICAgICAgIGludCBmZCwgZXJyOworCisgICAgICAgICAgICBlcnIgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gV1NBRU5PVFNPQ0spIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19PU0Vycm9yLCBlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmZCA9IChpbnQpc29ja2ZkOworICAgICAgICAgICAgaWYgKChTT0NLRVRfVClmZCAhPSBzb2NrZmQgfHwgIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImludmFsaWQgZmQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKF9QeV9mc3RhdChmZCwgJnN0YXR1cykgIT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgLyogb24gV2luZG93cywgYSBmaWxlIGNhbm5vdCBiZSBzZXQgdG8gbm9uLWJsb2NraW5nIG1vZGUgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlzX3NvY2tldCA9IDE7CisKKyAgICAgICAgICAgIC8qIFdpbmRvd3MgZG9lcyBub3QgcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIHRlc3QgaWYgYSBzb2NrZXQKKyAgICAgICAgICAgICAgIGlzIGluIG5vbi1ibG9ja2luZyBtb2RlICovCisgICAgICAgIH0KICAgICB9CisKKyAgICBvbGRfc29ja2ZkID0gd2FrZXVwLmZkOworICAgIHdha2V1cC5mZCA9IHNvY2tmZDsKKyAgICB3YWtldXAudXNlX3NlbmQgPSBpc19zb2NrZXQ7CisKKyAgICBpZiAob2xkX3NvY2tmZCAhPSBJTlZBTElEX0ZEKQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Tb2NrZXRfdChvbGRfc29ja2ZkKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoLTEpOworI2Vsc2UKKyAgICBpZiAoZmQgIT0gLTEpIHsKKyAgICAgICAgaW50IGJsb2NraW5nOworCisgICAgICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGZkIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlfZnN0YXQoZmQsICZzdGF0dXMpICE9IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBibG9ja2luZyA9IF9QeV9nZXRfYmxvY2tpbmcoZmQpOworICAgICAgICBpZiAoYmxvY2tpbmcgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChibG9ja2luZykgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBmZCAlaSBtdXN0IGJlIGluIG5vbi1ibG9ja2luZyBtb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmZCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIG9sZF9mZCA9IHdha2V1cF9mZDsKICAgICB3YWtldXBfZmQgPSBmZDsKKwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcob2xkX2ZkKTsKKyNlbmRpZgogfQogCiBQeURvY19TVFJWQVIoc2V0X3dha2V1cF9mZF9kb2MsCiAic2V0X3dha2V1cF9mZChmZCkgLT4gZmRcblwKIFxuXAotU2V0cyB0aGUgZmQgdG8gYmUgd3JpdHRlbiB0byAod2l0aCAnXFwwJykgd2hlbiBhIHNpZ25hbFxuXAorU2V0cyB0aGUgZmQgdG8gYmUgd3JpdHRlbiB0byAod2l0aCB0aGUgc2lnbmFsIG51bWJlcikgd2hlbiBhIHNpZ25hbFxuXAogY29tZXMgaW4uICBBIGxpYnJhcnkgY2FuIHVzZSB0aGlzIHRvIHdha2V1cCBzZWxlY3Qgb3IgcG9sbC5cblwKLVRoZSBwcmV2aW91cyBmZCBpcyByZXR1cm5lZC5cblwKK1RoZSBwcmV2aW91cyBmZCBvciAtMSBpcyByZXR1cm5lZC5cblwKIFxuXAogVGhlIGZkIG11c3QgYmUgbm9uLWJsb2NraW5nLiIpOwogCkBAIC00NTksNzEgKzY0OCw4NSBAQAogaW50CiBQeVNpZ25hbF9TZXRXYWtldXBGZChpbnQgZmQpCiB7Ci0gICAgaW50IG9sZF9mZCA9IHdha2V1cF9mZDsKKyAgICBpbnQgb2xkX2ZkOwogICAgIGlmIChmZCA8IDApCiAgICAgICAgIGZkID0gLTE7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgb2xkX2ZkID0gUHlfU0FGRV9ET1dOQ0FTVCh3YWtldXAuZmQsIFNPQ0tFVF9ULCBpbnQpOworICAgIHdha2V1cC5mZCA9IGZkOworI2Vsc2UKKyAgICBvbGRfZmQgPSB3YWtldXBfZmQ7CiAgICAgd2FrZXVwX2ZkID0gZmQ7CisjZW5kaWYKICAgICByZXR1cm4gb2xkX2ZkOwogfQogCiAKICNpZmRlZiBIQVZFX1NFVElUSU1FUgorCisvKltjbGluaWMgaW5wdXRdCitzaWduYWwuc2V0aXRpbWVyCisKKyAgICB3aGljaDogICAgaW50CisgICAgc2Vjb25kczogIGRvdWJsZQorICAgIGludGVydmFsOiBkb3VibGUgPSAwLjAKKyAgICAvCisKK1NldHMgZ2l2ZW4gaXRpbWVyIChvbmUgb2YgSVRJTUVSX1JFQUwsIElUSU1FUl9WSVJUVUFMIG9yIElUSU1FUl9QUk9GKS4KKworVGhlIHRpbWVyIHdpbGwgZmlyZSBhZnRlciB2YWx1ZSBzZWNvbmRzIGFuZCBhZnRlciB0aGF0IGV2ZXJ5IGludGVydmFsIHNlY29uZHMuCitUaGUgaXRpbWVyIGNhbiBiZSBjbGVhcmVkIGJ5IHNldHRpbmcgc2Vjb25kcyB0byB6ZXJvLgorCitSZXR1cm5zIG9sZCB2YWx1ZXMgYXMgYSB0dXBsZTogKGRlbGF5LCBpbnRlcnZhbCkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1zaWduYWxfc2V0aXRpbWVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3NpZ25hbF9zZXRpdGltZXJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgd2hpY2gsIGRvdWJsZSBzZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBpbnRlcnZhbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02ZjUxZGEwZmUwNzg3ZjJjIGlucHV0PTBkMjdkNDE3Y2ZjYmQ1MWFdKi8KIHsKLSAgICBkb3VibGUgZmlyc3Q7Ci0gICAgZG91YmxlIGludGVydmFsID0gMDsKLSAgICBpbnQgd2hpY2g7CiAgICAgc3RydWN0IGl0aW1lcnZhbCBuZXcsIG9sZDsKIAotICAgIGlmKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpZHxkOnNldGl0aW1lciIsICZ3aGljaCwgJmZpcnN0LCAmaW50ZXJ2YWwpKQotICAgIHJldHVybiBOVUxMOwotCi0gICAgdGltZXZhbF9mcm9tX2RvdWJsZShmaXJzdCwgJm5ldy5pdF92YWx1ZSk7CisgICAgdGltZXZhbF9mcm9tX2RvdWJsZShzZWNvbmRzLCAmbmV3Lml0X3ZhbHVlKTsKICAgICB0aW1ldmFsX2Zyb21fZG91YmxlKGludGVydmFsLCAmbmV3Lml0X2ludGVydmFsKTsKICAgICAvKiBMZXQgT1MgY2hlY2sgIndoaWNoIiB2YWx1ZSAqLwogICAgIGlmIChzZXRpdGltZXIod2hpY2gsICZuZXcsICZvbGQpICE9IDApIHsKLSAgICBQeUVycl9TZXRGcm9tRXJybm8oSXRpbWVyRXJyb3IpOwotICAgIHJldHVybiBOVUxMOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oSXRpbWVyRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gaXRpbWVyX3JldHZhbCgmb2xkKTsKIH0KIAotUHlEb2NfU1RSVkFSKHNldGl0aW1lcl9kb2MsCi0ic2V0aXRpbWVyKHdoaWNoLCBzZWNvbmRzWywgaW50ZXJ2YWxdKVxuXAotXG5cCi1TZXRzIGdpdmVuIGl0aW1lciAob25lIG9mIElUSU1FUl9SRUFMLCBJVElNRVJfVklSVFVBTFxuXAotb3IgSVRJTUVSX1BST0YpIHRvIGZpcmUgYWZ0ZXIgdmFsdWUgc2Vjb25kcyBhbmQgYWZ0ZXJcblwKLXRoYXQgZXZlcnkgaW50ZXJ2YWwgc2Vjb25kcy5cblwKLVRoZSBpdGltZXIgY2FuIGJlIGNsZWFyZWQgYnkgc2V0dGluZyBzZWNvbmRzIHRvIHplcm8uXG5cCi1cblwKLVJldHVybnMgb2xkIHZhbHVlcyBhcyBhIHR1cGxlOiAoZGVsYXksIGludGVydmFsKS4iKTsKICNlbmRpZgogCiAKICNpZmRlZiBIQVZFX0dFVElUSU1FUgorCisvKltjbGluaWMgaW5wdXRdCitzaWduYWwuZ2V0aXRpbWVyCisKKyAgICB3aGljaDogICAgaW50CisgICAgLworCitSZXR1cm5zIGN1cnJlbnQgdmFsdWUgb2YgZ2l2ZW4gaXRpbWVyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotc2lnbmFsX2dldGl0aW1lcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzaWduYWxfZ2V0aXRpbWVyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHdoaWNoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTllMDUzMTc1ZDUxN2RiNDAgaW5wdXQ9ZjdkMjFkMzhmMzQ5MDYyN10qLwogewotICAgIGludCB3aGljaDsKICAgICBzdHJ1Y3QgaXRpbWVydmFsIG9sZDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpnZXRpdGltZXIiLCAmd2hpY2gpKQotICAgIHJldHVybiBOVUxMOwotCiAgICAgaWYgKGdldGl0aW1lcih3aGljaCwgJm9sZCkgIT0gMCkgewotICAgIFB5RXJyX1NldEZyb21FcnJubyhJdGltZXJFcnJvcik7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhJdGltZXJFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHVybiBpdGltZXJfcmV0dmFsKCZvbGQpOwogfQogCi1QeURvY19TVFJWQVIoZ2V0aXRpbWVyX2RvYywKLSJnZXRpdGltZXIod2hpY2gpXG5cCi1cblwKLVJldHVybnMgY3VycmVudCB2YWx1ZSBvZiBnaXZlbiBpdGltZXIuIik7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoUFlQVEhSRUFEX1NJR01BU0spIHx8IGRlZmluZWQoSEFWRV9TSUdXQUlUKSB8fCBcCkBAIC02MTQsMjEgKzgxNywyOCBAQAogI2VuZGlmCiAKICNpZmRlZiBQWVBUSFJFQURfU0lHTUFTSworCisvKltjbGluaWMgaW5wdXRdCitzaWduYWwucHRocmVhZF9zaWdtYXNrCisKKyAgICBob3c6ICBpbnQKKyAgICBtYXNrOiBvYmplY3QKKyAgICAvCisKK0ZldGNoIGFuZC9vciBjaGFuZ2UgdGhlIHNpZ25hbCBtYXNrIG9mIHRoZSBjYWxsaW5nIHRocmVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXNpZ25hbF9wdGhyZWFkX3NpZ21hc2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc2lnbmFsX3B0aHJlYWRfc2lnbWFza19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBob3csIFB5T2JqZWN0ICptYXNrKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZmNjQwZmUwOTJiYzkxODEgaW5wdXQ9ZjNiN2Q3YTYxYjdiODI4M10qLwogewotICAgIGludCBob3c7Ci0gICAgUHlPYmplY3QgKnNpZ25hbHM7Ci0gICAgc2lnc2V0X3QgbWFzaywgcHJldmlvdXM7CisgICAgc2lnc2V0X3QgbmV3bWFzaywgcHJldmlvdXM7CiAgICAgaW50IGVycjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU86cHRocmVhZF9zaWdtYXNrIiwgJmhvdywgJnNpZ25hbHMpKQorICAgIGlmIChpdGVyYWJsZV90b19zaWdzZXQobWFzaywgJm5ld21hc2spKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChpdGVyYWJsZV90b19zaWdzZXQoc2lnbmFscywgJm1hc2spKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGVyciA9IHB0aHJlYWRfc2lnbWFzayhob3csICZtYXNrLCAmcHJldmlvdXMpOworICAgIGVyciA9IHB0aHJlYWRfc2lnbWFzayhob3csICZuZXdtYXNrLCAmcHJldmlvdXMpOwogICAgIGlmIChlcnIgIT0gMCkgewogICAgICAgICBlcnJubyA9IGVycjsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwpAQCAtNjQyLDE2ICs4NTIsMjMgQEAKICAgICByZXR1cm4gc2lnc2V0X3RvX3NldChwcmV2aW91cyk7CiB9CiAKLVB5RG9jX1NUUlZBUihzaWduYWxfcHRocmVhZF9zaWdtYXNrX2RvYywKLSJwdGhyZWFkX3NpZ21hc2soaG93LCBtYXNrKSAtPiBvbGQgbWFza1xuXAotXG5cCi1GZXRjaCBhbmQvb3IgY2hhbmdlIHRoZSBzaWduYWwgbWFzayBvZiB0aGUgY2FsbGluZyB0aHJlYWQuIik7CiAjZW5kaWYgICAvKiAjaWZkZWYgUFlQVEhSRUFEX1NJR01BU0sgKi8KIAogCiAjaWZkZWYgSEFWRV9TSUdQRU5ESU5HCisKKy8qW2NsaW5pYyBpbnB1dF0KK3NpZ25hbC5zaWdwZW5kaW5nCisKK0V4YW1pbmUgcGVuZGluZyBzaWduYWxzLgorCitSZXR1cm5zIGEgc2V0IG9mIHNpZ25hbCBudW1iZXJzIHRoYXQgYXJlIHBlbmRpbmcgZm9yIGRlbGl2ZXJ5IHRvCit0aGUgY2FsbGluZyB0aHJlYWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1zaWduYWxfc2lncGVuZGluZyhQeU9iamVjdCAqc2VsZikKK3NpZ25hbF9zaWdwZW5kaW5nX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MzM3NWZmZTg5MzI1MDIyIGlucHV0PWUwMDM2YzAxNmY4NzRlMjldKi8KIHsKICAgICBpbnQgZXJyOwogICAgIHNpZ3NldF90IG1hc2s7CkBAIC02NjEsMjUgKzg3OCwzMiBAQAogICAgIHJldHVybiBzaWdzZXRfdG9fc2V0KG1hc2spOwogfQogCi1QeURvY19TVFJWQVIoc2lnbmFsX3NpZ3BlbmRpbmdfZG9jLAotInNpZ3BlbmRpbmcoKSAtPiBsaXN0XG5cCi1cblwKLUV4YW1pbmUgcGVuZGluZyBzaWduYWxzLiIpOwogI2VuZGlmICAgLyogI2lmZGVmIEhBVkVfU0lHUEVORElORyAqLwogCiAKICNpZmRlZiBIQVZFX1NJR1dBSVQKKworLypbY2xpbmljIGlucHV0XQorc2lnbmFsLnNpZ3dhaXQKKworICAgIHNpZ3NldDogb2JqZWN0CisgICAgLworCitXYWl0IGZvciBhIHNpZ25hbC4KKworU3VzcGVuZCBleGVjdXRpb24gb2YgdGhlIGNhbGxpbmcgdGhyZWFkIHVudGlsIHRoZSBkZWxpdmVyeSBvZiBvbmUgb2YgdGhlCitzaWduYWxzIHNwZWNpZmllZCBpbiB0aGUgc2lnbmFsIHNldCBzaWdzZXQuICBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0aGUgc2lnbmFsCithbmQgcmV0dXJucyB0aGUgc2lnbmFsIG51bWJlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLXNpZ25hbF9zaWd3YWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3NpZ25hbF9zaWd3YWl0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzaWdzZXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTU3MTczNjQ3NDI0ZjZlNCBpbnB1dD0xMWFmMmQ4MmQ4M2MyZTk0XSovCiB7Ci0gICAgUHlPYmplY3QgKnNpZ25hbHM7CiAgICAgc2lnc2V0X3Qgc2V0OwogICAgIGludCBlcnIsIHNpZ251bTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpzaWd3YWl0IiwgJnNpZ25hbHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChpdGVyYWJsZV90b19zaWdzZXQoc2lnbmFscywgJnNldCkpCisgICAgaWYgKGl0ZXJhYmxlX3RvX3NpZ3NldChzaWdzZXQsICZzZXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTY5MywxMSArOTE3LDggQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHNpZ251bSk7CiB9CiAKLVB5RG9jX1NUUlZBUihzaWduYWxfc2lnd2FpdF9kb2MsCi0ic2lnd2FpdChzaWdzZXQpIC0+IHNpZ251bVxuXAotXG5cCi1XYWl0IGEgc2lnbmFsLiIpOwotI2VuZGlmICAgLyogI2lmZGVmIEhBVkVfU0lHUEVORElORyAqLworI2VuZGlmICAgLyogI2lmZGVmIEhBVkVfU0lHV0FJVCAqLworCiAKICNpZiBkZWZpbmVkKEhBVkVfU0lHV0FJVElORk8pIHx8IGRlZmluZWQoSEFWRV9TSUdUSU1FRFdBSVQpCiBzdGF0aWMgaW50IGluaXRpYWxpemVkOwpAQCAtNzUyLDEwMCArOTczLDEzNiBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NJR1dBSVRJTkZPCisKKy8qW2NsaW5pYyBpbnB1dF0KK3NpZ25hbC5zaWd3YWl0aW5mbworCisgICAgc2lnc2V0OiBvYmplY3QKKyAgICAvCisKK1dhaXQgc3luY2hyb25vdXNseSB1bnRpbCBvbmUgb2YgdGhlIHNpZ25hbHMgaW4gKnNpZ3NldCogaXMgZGVsaXZlcmVkLgorCitSZXR1cm5zIGEgc3RydWN0X3NpZ2luZm8gY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2lnbmFsLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotc2lnbmFsX3NpZ3dhaXRpbmZvKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3NpZ25hbF9zaWd3YWl0aW5mbyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc2lnc2V0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWM0MGYyN2IyNjljZDIzMDkgaW5wdXQ9ZjM3NzlhNzRhOTkxZTE3MV0qLwogewotICAgIFB5T2JqZWN0ICpzaWduYWxzOwogICAgIHNpZ3NldF90IHNldDsKICAgICBzaWdpbmZvX3Qgc2k7CiAgICAgaW50IGVycjsKKyAgICBpbnQgYXN5bmNfZXJyID0gMDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpzaWd3YWl0aW5mbyIsICZzaWduYWxzKSkKKyAgICBpZiAoaXRlcmFibGVfdG9fc2lnc2V0KHNpZ3NldCwgJnNldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGl0ZXJhYmxlX3RvX3NpZ3NldChzaWduYWxzLCAmc2V0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZXJyID0gc2lnd2FpdGluZm8oJnNldCwgJnNpKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGRvIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBlcnIgPSBzaWd3YWl0aW5mbygmc2V0LCAmc2kpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKGVyciA9PSAtMQorICAgICAgICAgICAgICYmIGVycm5vID09IEVJTlRSICYmICEoYXN5bmNfZXJyID0gUHlFcnJfQ2hlY2tTaWduYWxzKCkpKTsKICAgICBpZiAoZXJyID09IC0xKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gKCFhc3luY19lcnIpID8gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpIDogTlVMTDsKIAogICAgIHJldHVybiBmaWxsX3NpZ2luZm8oJnNpKTsKIH0KIAotUHlEb2NfU1RSVkFSKHNpZ25hbF9zaWd3YWl0aW5mb19kb2MsCi0ic2lnd2FpdGluZm8oc2lnc2V0KSAtPiBzdHJ1Y3Rfc2lnaW5mb1xuXAotXG5cCi1XYWl0IHN5bmNocm9ub3VzbHkgZm9yIGEgc2lnbmFsIHVudGlsIG9uZSBvZiB0aGUgc2lnbmFscyBpbiAqc2lnc2V0KiBpc1xuXAotZGVsaXZlcmVkLlxuXAotUmV0dXJucyBhIHN0cnVjdF9zaWdpbmZvIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNpZ25hbC4iKTsKICNlbmRpZiAgIC8qICNpZmRlZiBIQVZFX1NJR1dBSVRJTkZPICovCiAKICNpZmRlZiBIQVZFX1NJR1RJTUVEV0FJVAorCisvKltjbGluaWMgaW5wdXRdCitzaWduYWwuc2lndGltZWR3YWl0CisKKyAgICBzaWdzZXQ6ICBvYmplY3QKKyAgICB0aW1lb3V0IGFzIHRpbWVvdXRfb2JqOiBvYmplY3QKKyAgICAvCisKK0xpa2Ugc2lnd2FpdGluZm8oKSwgYnV0IHdpdGggYSB0aW1lb3V0LgorCitUaGUgdGltZW91dCBpcyBzcGVjaWZpZWQgaW4gc2Vjb25kcywgd2l0aCBmbG9hdGluZyBwb2ludCBudW1iZXJzIGFsbG93ZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1zaWduYWxfc2lndGltZWR3YWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3NpZ25hbF9zaWd0aW1lZHdhaXRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc2lnc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0aW1lb3V0X29iaikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mN2VmZjMxZTY3OWY0MzEyIGlucHV0PTUzZmQ0ZWEzZTM3MjRlYjhdKi8KIHsKLSAgICBQeU9iamVjdCAqc2lnbmFscywgKnRpbWVvdXQ7Ci0gICAgc3RydWN0IHRpbWVzcGVjIGJ1ZjsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CiAgICAgc2lnc2V0X3Qgc2V0OwogICAgIHNpZ2luZm9fdCBzaTsKLSAgICB0aW1lX3QgdHZfc2VjOwotICAgIGxvbmcgdHZfbnNlYzsKLSAgICBpbnQgZXJyOworICAgIGludCByZXM7CisgICAgX1B5VGltZV90IHRpbWVvdXQsIGRlYWRsaW5lLCBtb25vdG9uaWM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POnNpZ3RpbWVkd2FpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYWxzLCAmdGltZW91dCkpCisgICAgaWYgKF9QeVRpbWVfRnJvbVNlY29uZHNPYmplY3QoJnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dF9vYmosIF9QeVRpbWVfUk9VTkRfQ0VJTElORykgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWModGltZW91dCwgJnR2X3NlYywgJnR2X25zZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBidWYudHZfc2VjID0gdHZfc2VjOwotICAgIGJ1Zi50dl9uc2VjID0gdHZfbnNlYzsKLQotICAgIGlmIChidWYudHZfc2VjIDwgMCB8fCBidWYudHZfbnNlYyA8IDApIHsKKyAgICBpZiAodGltZW91dCA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0aW1lb3V0IG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChpdGVyYWJsZV90b19zaWdzZXQoc2lnbmFscywgJnNldCkpCisgICAgaWYgKGl0ZXJhYmxlX3RvX3NpZ3NldChzaWdzZXQsICZzZXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBlcnIgPSBzaWd0aW1lZHdhaXQoJnNldCwgJnNpLCAmYnVmKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChlcnIgPT0gLTEpIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKLSAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwotICAgIH0KKyAgICBkZWFkbGluZSA9IF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKSArIHRpbWVvdXQ7CisKKyAgICBkbyB7CisgICAgICAgIGlmIChfUHlUaW1lX0FzVGltZXNwZWModGltZW91dCwgJnRzKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IHNpZ3RpbWVkd2FpdCgmc2V0LCAmc2ksICZ0cyk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgaWYgKHJlcyAhPSAtMSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKKyAgICAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICB9CisKKyAgICAgICAgLyogc2lndGltZWR3YWl0KCkgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIChFSU5UUikgKi8KKyAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgbW9ub3RvbmljID0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpOworICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBtb25vdG9uaWM7CisgICAgICAgIGlmICh0aW1lb3V0IDwgMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0gd2hpbGUgKDEpOwogCiAgICAgcmV0dXJuIGZpbGxfc2lnaW5mbygmc2kpOwogfQogCi1QeURvY19TVFJWQVIoc2lnbmFsX3NpZ3RpbWVkd2FpdF9kb2MsCi0ic2lndGltZWR3YWl0KHNpZ3NldCwgKHRpbWVvdXRfc2VjLCB0aW1lb3V0X25zZWMpKSAtPiBzdHJ1Y3Rfc2lnaW5mb1xuXAotXG5cCi1MaWtlIHNpZ3dhaXRpbmZvKCksIGJ1dCB3aXRoIGEgdGltZW91dCBzcGVjaWZpZWQgYXMgYSB0dXBsZSBvZiAoc2Vjb25kcyxcblwKLW5hbm9zZWNvbmRzKS4iKTsKICNlbmRpZiAgIC8qICNpZmRlZiBIQVZFX1NJR1RJTUVEV0FJVCAqLwogCiAKICNpZiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9LSUxMKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQorCisvKltjbGluaWMgaW5wdXRdCitzaWduYWwucHRocmVhZF9raWxsCisKKyAgICB0aHJlYWRfaWQ6ICBsb25nCisgICAgc2lnbmFsbnVtOiAgaW50CisgICAgLworCitTZW5kIGEgc2lnbmFsIHRvIGEgdGhyZWFkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotc2lnbmFsX3B0aHJlYWRfa2lsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzaWduYWxfcHRocmVhZF9raWxsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgbG9uZyB0aHJlYWRfaWQsIGludCBzaWduYWxudW0pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmEwOWNlNDFmMWM0MjI4YSBpbnB1dD03N2VkNmEzYjZmMmE4MTIyXSovCiB7Ci0gICAgbG9uZyB0aWQ7Ci0gICAgaW50IHNpZ251bTsKICAgICBpbnQgZXJyOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsaTpwdGhyZWFkX2tpbGwiLCAmdGlkLCAmc2lnbnVtKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBlcnIgPSBwdGhyZWFkX2tpbGwoKHB0aHJlYWRfdCl0aWQsIHNpZ251bSk7CisgICAgZXJyID0gcHRocmVhZF9raWxsKChwdGhyZWFkX3QpdGhyZWFkX2lkLCBzaWduYWxudW0pOwogICAgIGlmIChlcnIgIT0gMCkgewogICAgICAgICBlcnJubyA9IGVycjsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwpAQCAtODU5LDYyICsxMTE2LDI5IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihzaWduYWxfcHRocmVhZF9raWxsX2RvYywKLSJwdGhyZWFkX2tpbGwodGhyZWFkX2lkLCBzaWdudW0pXG5cCi1cblwKLVNlbmQgYSBzaWduYWwgdG8gYSB0aHJlYWQuIik7CiAjZW5kaWYgICAvKiAjaWYgZGVmaW5lZChIQVZFX1BUSFJFQURfS0lMTCkgJiYgZGVmaW5lZChXSVRIX1RIUkVBRCkgKi8KIAogCiAKLS8qIExpc3Qgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSAqLworLyogTGlzdCBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlIC0tIHNvbWUgb2YgdGhlIG1ldGhvZGRlZnMgYXJlCisgICBkZWZpbmVkIHRvIG5vdGhpbmcgaWYgdGhlIGNvcnJlc3BvbmRpbmcgQyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLiAqLwogc3RhdGljIFB5TWV0aG9kRGVmIHNpZ25hbF9tZXRob2RzW10gPSB7Ci0jaWZkZWYgSEFWRV9BTEFSTQotICAgIHsiYWxhcm0iLCAgICAgICAgICAgICAgICAgICBzaWduYWxfYWxhcm0sIE1FVEhfVkFSQVJHUywgYWxhcm1fZG9jfSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfU0VUSVRJTUVSCi0gICAgeyJzZXRpdGltZXIiLCAgICAgICBzaWduYWxfc2V0aXRpbWVyLCBNRVRIX1ZBUkFSR1MsIHNldGl0aW1lcl9kb2N9LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9HRVRJVElNRVIKLSAgICB7ImdldGl0aW1lciIsICAgICAgIHNpZ25hbF9nZXRpdGltZXIsIE1FVEhfVkFSQVJHUywgZ2V0aXRpbWVyX2RvY30sCi0jZW5kaWYKLSAgICB7InNpZ25hbCIsICAgICAgICAgICAgICAgICAgc2lnbmFsX3NpZ25hbCwgTUVUSF9WQVJBUkdTLCBzaWduYWxfZG9jfSwKLSAgICB7ImdldHNpZ25hbCIsICAgICAgICAgICAgICAgc2lnbmFsX2dldHNpZ25hbCwgTUVUSF9WQVJBUkdTLCBnZXRzaWduYWxfZG9jfSwKKyAgICB7ImRlZmF1bHRfaW50X2hhbmRsZXIiLCBzaWduYWxfZGVmYXVsdF9pbnRfaGFuZGxlciwgTUVUSF9WQVJBUkdTLCBkZWZhdWx0X2ludF9oYW5kbGVyX2RvY30sCisgICAgU0lHTkFMX0FMQVJNX01FVEhPRERFRgorICAgIFNJR05BTF9TRVRJVElNRVJfTUVUSE9EREVGCisgICAgU0lHTkFMX0dFVElUSU1FUl9NRVRIT0RERUYKKyAgICBTSUdOQUxfU0lHTkFMX01FVEhPRERFRgorICAgIFNJR05BTF9HRVRTSUdOQUxfTUVUSE9EREVGCiAgICAgeyJzZXRfd2FrZXVwX2ZkIiwgICAgICAgICAgIHNpZ25hbF9zZXRfd2FrZXVwX2ZkLCBNRVRIX1ZBUkFSR1MsIHNldF93YWtldXBfZmRfZG9jfSwKLSNpZmRlZiBIQVZFX1NJR0lOVEVSUlVQVAotICAgIHsic2lnaW50ZXJydXB0IiwgICAgICAgICAgICBzaWduYWxfc2lnaW50ZXJydXB0LCBNRVRIX1ZBUkFSR1MsIHNpZ2ludGVycnVwdF9kb2N9LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9QQVVTRQotICAgIHsicGF1c2UiLCAgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pc2lnbmFsX3BhdXNlLAotICAgICBNRVRIX05PQVJHUywgcGF1c2VfZG9jfSwKLSNlbmRpZgotICAgIHsiZGVmYXVsdF9pbnRfaGFuZGxlciIsIHNpZ25hbF9kZWZhdWx0X2ludF9oYW5kbGVyLAotICAgICBNRVRIX1ZBUkFSR1MsIGRlZmF1bHRfaW50X2hhbmRsZXJfZG9jfSwKLSNpZiBkZWZpbmVkKEhBVkVfUFRIUkVBRF9LSUxMKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQotICAgIHsicHRocmVhZF9raWxsIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pc2lnbmFsX3B0aHJlYWRfa2lsbCwKLSAgICAgTUVUSF9WQVJBUkdTLCBzaWduYWxfcHRocmVhZF9raWxsX2RvY30sCi0jZW5kaWYKLSNpZmRlZiBQWVBUSFJFQURfU0lHTUFTSwotICAgIHsicHRocmVhZF9zaWdtYXNrIiwgICAgICAgICAoUHlDRnVuY3Rpb24pc2lnbmFsX3B0aHJlYWRfc2lnbWFzaywKLSAgICAgTUVUSF9WQVJBUkdTLCBzaWduYWxfcHRocmVhZF9zaWdtYXNrX2RvY30sCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1NJR1BFTkRJTkcKLSAgICB7InNpZ3BlbmRpbmciLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXNpZ25hbF9zaWdwZW5kaW5nLAotICAgICBNRVRIX05PQVJHUywgc2lnbmFsX3NpZ3BlbmRpbmdfZG9jfSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfU0lHV0FJVAotICAgIHsic2lnd2FpdCIsICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pc2lnbmFsX3NpZ3dhaXQsCi0gICAgIE1FVEhfVkFSQVJHUywgc2lnbmFsX3NpZ3dhaXRfZG9jfSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfU0lHV0FJVElORk8KLSAgICB7InNpZ3dhaXRpbmZvIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXNpZ25hbF9zaWd3YWl0aW5mbywKLSAgICAgTUVUSF9WQVJBUkdTLCBzaWduYWxfc2lnd2FpdGluZm9fZG9jfSwKLSNlbmRpZgotI2lmZGVmIEhBVkVfU0lHVElNRURXQUlUCi0gICAgeyJzaWd0aW1lZHdhaXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilzaWduYWxfc2lndGltZWR3YWl0LAotICAgICBNRVRIX1ZBUkFSR1MsIHNpZ25hbF9zaWd0aW1lZHdhaXRfZG9jfSwKLSNlbmRpZgotICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KKyAgICBTSUdOQUxfU0lHSU5URVJSVVBUX01FVEhPRERFRgorICAgIFNJR05BTF9QQVVTRV9NRVRIT0RERUYKKyAgICBTSUdOQUxfUFRIUkVBRF9LSUxMX01FVEhPRERFRgorICAgIFNJR05BTF9QVEhSRUFEX1NJR01BU0tfTUVUSE9EREVGCisgICAgU0lHTkFMX1NJR1BFTkRJTkdfTUVUSE9EREVGCisgICAgU0lHTkFMX1NJR1dBSVRfTUVUSE9EREVGCisgICAgU0lHTkFMX1NJR1dBSVRJTkZPX01FVEhPRERFRgorICAgIFNJR05BTF9TSUdUSU1FRFdBSVRfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAogCkBAIC05NTYsNyArMTE4MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgc2lnbmFsbW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAic2lnbmFsIiwKKyAgICAiX3NpZ25hbCIsCiAgICAgbW9kdWxlX2RvYywKICAgICAtMSwKICAgICBzaWduYWxfbWV0aG9kcywKQEAgLTk2Nyw3ICsxMTkxLDcgQEAKIH07CiAKIFB5TU9ESU5JVF9GVU5DCi1QeUluaXRfc2lnbmFsKHZvaWQpCitQeUluaXRfX3NpZ25hbCh2b2lkKQogewogICAgIFB5T2JqZWN0ICptLCAqZCwgKng7CiAgICAgaW50IGk7CkBAIC0xMDQyLDggKzEyNjYsNyBAQAogICAgIGlmIChIYW5kbGVyc1tTSUdJTlRdLmZ1bmMgPT0gRGVmYXVsdEhhbmRsZXIpIHsKICAgICAgICAgLyogSW5zdGFsbCBkZWZhdWx0IGludCBoYW5kbGVyICovCiAgICAgICAgIFB5X0lOQ1JFRihJbnRIYW5kbGVyKTsKLSAgICAgICAgUHlfREVDUkVGKEhhbmRsZXJzW1NJR0lOVF0uZnVuYyk7Ci0gICAgICAgIEhhbmRsZXJzW1NJR0lOVF0uZnVuYyA9IEludEhhbmRsZXI7CisgICAgICAgIFB5X1NFVFJFRihIYW5kbGVyc1tTSUdJTlRdLmZ1bmMsIEludEhhbmRsZXIpOwogICAgICAgICBvbGRfc2lnaW50aGFuZGxlciA9IFB5T1Nfc2V0c2lnKFNJR0lOVCwgc2lnbmFsX2hhbmRsZXIpOwogICAgIH0KIApAQCAtMTM4MCw3ICsxNjAzLDcgQEAKIHZvaWQKIFB5T1NfSW5pdEludGVycnVwdHModm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgic2lnbmFsIik7CisgICAgUHlPYmplY3QgKm0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9zaWduYWwiKTsKICAgICBpZiAobSkgewogICAgICAgICBQeV9ERUNSRUYobSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKaW5kZXggMjMwMTllZS4uYjM0OTgxYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCkBAIC04NCw2ICs4NCwxMSBAQAogKi8KIAogI2lmZGVmIF9fQVBQTEVfXworI2luY2x1ZGUgPEF2YWlsYWJpbGl0eU1hY3Jvcy5oPgorLyogZm9yIGdldGFkZHJpbmZvIHRocmVhZCBzYWZldHkgdGVzdCBvbiBvbGQgdmVyc2lvbnMgb2YgT1MgWCAqLworI2lmbmRlZiBNQUNfT1NfWF9WRVJTSU9OXzEwXzUKKyNkZWZpbmUgTUFDX09TX1hfVkVSU0lPTl8xMF81IDEwNTAKKyNlbmRpZgogICAvKgogICAgKiBpbmV0X2F0b24gaXMgbm90IGF2YWlsYWJsZSBvbiBPU1ggMTAuMywgeWV0IHdlIHdhbnQgdG8gdXNlIGEgYmluYXJ5CiAgICAqIHRoYXQgd2FzIGJ1aWxkIG9uIDEwLjQgb3IgbGF0ZXIgdG8gd29yayBvbiB0aGF0IHJlbGVhc2UsIHdlYWsgbGlua2luZwpAQCAtMTIxLDcgKzEyNiw3IEBACiBnZXRzb2NrbmFtZSgpIC0tIHJldHVybiBsb2NhbCBhZGRyZXNzXG5cCiBnZXRzb2Nrb3B0KGxldmVsLCBvcHRuYW1lWywgYnVmbGVuXSkgLS0gZ2V0IHNvY2tldCBvcHRpb25zXG5cCiBnZXR0aW1lb3V0KCkgLS0gcmV0dXJuIHRpbWVvdXQgb3IgTm9uZVxuXAotbGlzdGVuKG4pIC0tIHN0YXJ0IGxpc3RlbmluZyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnNcblwKK2xpc3Rlbihbbl0pIC0tIHN0YXJ0IGxpc3RlbmluZyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnNcblwKIHJlY3YoYnVmbGVuWywgZmxhZ3NdKSAtLSByZWNlaXZlIGRhdGFcblwKIHJlY3ZfaW50byhidWZmZXJbLCBuYnl0ZXNbLCBmbGFnc11dKSAtLSByZWNlaXZlIGRhdGEgKGludG8gYSBidWZmZXIpXG5cCiByZWN2ZnJvbShidWZsZW5bLCBmbGFnc10pIC0tIHJlY2VpdmUgZGF0YSBhbmQgc2VuZGVyXCdzIGFkZHJlc3NcblwKQEAgLTE3OSwxNSArMTg0LDMyIEBACiAjIGRlZmluZSBVU0VfR0VUSE9TVEJZTkFNRV9MT0NLCiAjZW5kaWYKIAotLyogVG8gdXNlIF9fRnJlZUJTRF92ZXJzaW9uICovCisvKiBUbyB1c2UgX19GcmVlQlNEX3ZlcnNpb24sIF9fT3BlbkJTRF9fLCBhbmQgX19OZXRCU0RfVmVyc2lvbl9fICovCiAjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2VuZGlmCiAvKiBPbiBzeXN0ZW1zIG9uIHdoaWNoIGdldGFkZHJpbmZvKCkgaXMgYmVsaWV2ZWQgdG8gbm90IGJlIHRocmVhZC1zYWZlLAotICAgKHRoaXMgaW5jbHVkZXMgdGhlIGdldGFkZHJpbmZvIGVtdWxhdGlvbikgcHJvdGVjdCBhY2Nlc3Mgd2l0aCBhIGxvY2suICovCi0jaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgKGRlZmluZWQoX19BUFBMRV9fKSB8fCBcCisgICAodGhpcyBpbmNsdWRlcyB0aGUgZ2V0YWRkcmluZm8gZW11bGF0aW9uKSBwcm90ZWN0IGFjY2VzcyB3aXRoIGEgbG9jay4KKworICAgZ2V0YWRkcmluZm8gaXMgdGhyZWFkLXNhZmUgb24gTWFjIE9TIFggMTAuNSBhbmQgbGF0ZXIuIE9yaWdpbmFsbHkgaXQgd2FzCisgICBhIG1peCBvZiBjb2RlIGluY2x1ZGluZyBhbiB1bnNhZmUgaW1wbGVtZW50YXRpb24gZnJvbSBhbiBvbGQgQlNEJ3MKKyAgIGxpYnJlc29sdi4gSW4gMTAuNSBBcHBsZSByZWltcGxlbWVudGVkIGl0IGFzIGEgc2FmZSBJUEMgY2FsbCB0byB0aGUKKyAgIG1ETlNSZXNwb25kZXIgcHJvY2Vzcy4gMTAuNSBpcyB0aGUgZmlyc3QgYmUgVU5JWCAnMDMgY2VydGlmaWVkLCB3aGljaAorICAgaW5jbHVkZXMgdGhlIHJlcXVpcmVtZW50IHRoYXQgZ2V0YWRkcmluZm8gYmUgdGhyZWFkLXNhZmUuIFNlZSBpc3N1ZSAjMjU5MjQuCisKKyAgIEl0J3MgdGhyZWFkLXNhZmUgaW4gT3BlbkJTRCBzdGFydGluZyB3aXRoIDUuNCwgcmVsZWFzZWQgTm92IDIwMTM6CisgICBodHRwOi8vd3d3Lm9wZW5ic2Qub3JnL3BsdXM1NC5odG1sCisKKyAgIEl0J3MgdGhyZWFkLXNhZmUgaW4gTmV0QlNEIHN0YXJ0aW5nIHdpdGggNC4wLCByZWxlYXNlZCBEZWMgMjAwNzoKKworaHR0cDovL2N2c3dlYi5uZXRic2Qub3JnL2JzZHdlYi5jZ2kvc3JjL2xpYi9saWJjL25ldC9nZXRhZGRyaW5mby5jLmRpZmY/cjE9MS44MiZyMj0xLjgzCisgKi8KKyNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiAoIFwKKyAgICAoZGVmaW5lZChfX0FQUExFX18pICYmIFwKKyAgICAgICAgTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCBNQUNfT1NfWF9WRVJTSU9OXzEwXzUpIHx8IFwKICAgICAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24rMCA8IDUwMzAwMCkgfHwgXAotICAgIGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgXAorICAgIChkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiBPcGVuQlNEKzAgPCAyMDEzMTEpIHx8IFwKKyAgICAoZGVmaW5lZChfX05ldEJTRF9fKSAmJiBfX05ldEJTRF9WZXJzaW9uX18rMCA8IDQwMDAwMDAwMCkgfHwgXAogICAgICFkZWZpbmVkKEhBVkVfR0VUQUREUklORk8pKQogI2RlZmluZSBVU0VfR0VUQUREUklORk9fTE9DSwogI2VuZGlmCkBAIC0yODQsMTQgKzMwNiwxNSBAQAogIyAgaW5jbHVkZSA8ZmNudGwuaD4KICMgZW5kaWYKIAorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE4MDAKKy8qIFByb3ZpZGVzIHRoZSBJc1dpbmRvd3M3U1AxT3JHcmVhdGVyKCkgZnVuY3Rpb24gKi8KKyNpbmNsdWRlIDxWZXJzaW9uSGVscGVycy5oPgorI2VuZGlmCisKICNlbmRpZgogCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKLSNpZm5kZWYgb2Zmc2V0b2YKLSMgZGVmaW5lIG9mZnNldG9mKHR5cGUsIG1lbWJlcikgKChzaXplX3QpKCYoKHR5cGUgKikwKS0+bWVtYmVyKSkKLSNlbmRpZgotCiAjaWZuZGVmIE9fTk9OQkxPQ0sKICMgZGVmaW5lIE9fTk9OQkxPQ0sgT19OREVMQVkKICNlbmRpZgpAQCAtNDU5LDcgKzQ4Miw3IEBACiAjZWxzZQogLyogSWYgdGhlcmUncyBubyB0aW1lb3V0IGxlZnQsIHdlIGRvbid0IGhhdmUgdG8gY2FsbCBzZWxlY3QsIHNvIGl0J3MgYSBzYWZlLAogICogbGl0dGxlIHdoaXRlIGxpZS4gKi8KLSNkZWZpbmUgSVNfU0VMRUNUQUJMRShzKSAoX1B5SXNTZWxlY3RhYmxlX2ZkKChzKS0+c29ja19mZCkgfHwgKHMpLT5zb2NrX3RpbWVvdXQgPD0gMC4wKQorI2RlZmluZSBJU19TRUxFQ1RBQkxFKHMpIChfUHlJc1NlbGVjdGFibGVfZmQoKHMpLT5zb2NrX2ZkKSB8fCAocyktPnNvY2tfdGltZW91dCA8PSAwKQogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTQ4MSw2ICs1MDQsMTkgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUworIyAgZGVmaW5lIEdFVF9TT0NLX0VSUk9SIFdTQUdldExhc3RFcnJvcigpCisjICBkZWZpbmUgU0VUX1NPQ0tfRVJST1IoZXJyKSBXU0FTZXRMYXN0RXJyb3IoZXJyKQorIyAgZGVmaW5lIFNPQ0tfVElNRU9VVF9FUlIgV1NBRVdPVUxEQkxPQ0sKKyMgIGRlZmluZSBTT0NLX0lOUFJPR1JFU1NfRVJSIFdTQUVXT1VMREJMT0NLCisjZWxzZQorIyAgZGVmaW5lIEdFVF9TT0NLX0VSUk9SIGVycm5vCisjICBkZWZpbmUgU0VUX1NPQ0tfRVJST1IoZXJyKSBkbyB7IGVycm5vID0gZXJyOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIFNPQ0tfVElNRU9VVF9FUlIgRVdPVUxEQkxPQ0sKKyMgIGRlZmluZSBTT0NLX0lOUFJPR1JFU1NfRVJSIEVJTlBST0dSRVNTCisjZW5kaWYKKworCisjaWZkZWYgTVNfV0lORE9XUwogLyogRG9lcyBXU0FTb2NrZXQoKSBzdXBwb3J0IHRoZSBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCBmbGFnPyAqLwogc3RhdGljIGludCBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gLTE7CiAjZW5kaWYKQEAgLTU1Miw2ICs1ODgsOSBAQAogc3RhdGljIGludAogaW50ZXJuYWxfc2V0YmxvY2tpbmcoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBpbnQgYmxvY2spCiB7CisjaWZkZWYgTVNfV0lORE9XUworICAgIHVfbG9uZyBhcmc7CisjZW5kaWYKICNpZiAhZGVmaW5lZChNU19XSU5ET1dTKSBcCiAgICAgJiYgISgoZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKSAmJiBkZWZpbmVkKEZJT05CSU8pKSkKICAgICBpbnQgZGVsYXlfZmxhZywgbmV3X2RlbGF5X2ZsYWc7CkBAIC01NzgsOCArNjE3LDggQEAKICAgICAgICAgZmNudGwocy0+c29ja19mZCwgRl9TRVRGTCwgbmV3X2RlbGF5X2ZsYWcpOwogI2VuZGlmCiAjZWxzZSAvKiBNU19XSU5ET1dTICovCi0gICAgYmxvY2sgPSAhYmxvY2s7Ci0gICAgaW9jdGxzb2NrZXQocy0+c29ja19mZCwgRklPTkJJTywgKHVfbG9uZyopJmJsb2NrKTsKKyAgICBhcmcgPSAhYmxvY2s7CisgICAgaW9jdGxzb2NrZXQocy0+c29ja19mZCwgRklPTkJJTywgJmFyZyk7CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKQEAgLTU4Nyw2MCArNjI2LDc5IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLS8qIERvIGEgc2VsZWN0KCkvcG9sbCgpIG9uIHRoZSBzb2NrZXQsIGlmIG5lY2Vzc2FyeSAoc29ja190aW1lb3V0ID4gMCkuCi0gICBUaGUgYXJndW1lbnQgd3JpdGluZyBpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbi4KLSAgIFRoaXMgZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uOyB3ZSdsbCBsZXQgb3VyIGNhbGxlciBkbyB0aGF0Ci0gICBhZnRlciB0aGV5J3ZlIHJlYWNxdWlyZWQgdGhlIGludGVycHJldGVyIGxvY2suCi0gICBSZXR1cm5zIDEgb24gdGltZW91dCwgLTEgb24gZXJyb3IsIDAgb3RoZXJ3aXNlLiAqLwogc3RhdGljIGludAotaW50ZXJuYWxfc2VsZWN0X2V4KFB5U29ja2V0U29ja09iamVjdCAqcywgaW50IHdyaXRpbmcsIGRvdWJsZSBpbnRlcnZhbCkKK2ludGVybmFsX3NlbGVjdChQeVNvY2tldFNvY2tPYmplY3QgKnMsIGludCB3cml0aW5nLCBfUHlUaW1lX3QgaW50ZXJ2YWwsCisgICAgICAgICAgICAgICAgaW50IGNvbm5lY3QpCiB7CiAgICAgaW50IG47CisjaWZkZWYgSEFWRV9QT0xMCisgICAgc3RydWN0IHBvbGxmZCBwb2xsZmQ7CisgICAgX1B5VGltZV90IG1zOworI2Vsc2UKKyAgICBmZF9zZXQgZmRzLCBlZmRzOworICAgIHN0cnVjdCB0aW1ldmFsIHR2LCAqdHZwOworI2VuZGlmCiAKLSAgICAvKiBOb3RoaW5nIHRvIGRvIHVubGVzcyB3ZSdyZSBpbiB0aW1lb3V0IG1vZGUgKG5vdCBub24tYmxvY2tpbmcpICovCi0gICAgaWYgKHMtPnNvY2tfdGltZW91dCA8PSAwLjApCi0gICAgICAgIHJldHVybiAwOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgLyogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgR0lMIGhlbGQgKi8KKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgLyogRXJyb3IgY29uZGl0aW9uIGlzIGZvciBvdXRwdXQgb25seSAqLworICAgIGFzc2VydCghKGNvbm5lY3QgJiYgIXdyaXRpbmcpKTsKIAogICAgIC8qIEd1YXJkIGFnYWluc3QgY2xvc2VkIHNvY2tldCAqLwotICAgIGlmIChzLT5zb2NrX2ZkIDwgMCkKKyAgICBpZiAocy0+c29ja19mZCA9PSBJTlZBTElEX1NPQ0tFVCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvKiBIYW5kbGluZyB0aGlzIGNvbmRpdGlvbiBoZXJlIHNpbXBsaWZpZXMgdGhlIHNlbGVjdCBsb29wcyAqLwotICAgIGlmIChpbnRlcnZhbCA8IDAuMCkKLSAgICAgICAgcmV0dXJuIDE7Ci0KICAgICAvKiBQcmVmZXIgcG9sbCwgaWYgYXZhaWxhYmxlLCBzaW5jZSB5b3UgY2FuIHBvbGwoKSBhbnkgZmQKICAgICAgKiB3aGljaCBjYW4ndCBiZSBkb25lIHdpdGggc2VsZWN0KCkuICovCiAjaWZkZWYgSEFWRV9QT0xMCi0gICAgewotICAgICAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxmZDsKLSAgICAgICAgaW50IHRpbWVvdXQ7Ci0KLSAgICAgICAgcG9sbGZkLmZkID0gcy0+c29ja19mZDsKLSAgICAgICAgcG9sbGZkLmV2ZW50cyA9IHdyaXRpbmcgPyBQT0xMT1VUIDogUE9MTElOOwotCi0gICAgICAgIC8qIHMtPnNvY2tfdGltZW91dCBpcyBpbiBzZWNvbmRzLCB0aW1lb3V0IGluIG1zICovCi0gICAgICAgIHRpbWVvdXQgPSAoaW50KShpbnRlcnZhbCAqIDEwMDAgKyAwLjUpOwotICAgICAgICBuID0gcG9sbCgmcG9sbGZkLCAxLCB0aW1lb3V0KTsKKyAgICBwb2xsZmQuZmQgPSBzLT5zb2NrX2ZkOworICAgIHBvbGxmZC5ldmVudHMgPSB3cml0aW5nID8gUE9MTE9VVCA6IFBPTExJTjsKKyAgICBpZiAoY29ubmVjdCkgeworICAgICAgICAvKiBPbiBXaW5kb3dzLCB0aGUgc29ja2V0IGJlY29tZXMgd3JpdGFibGUgb24gY29ubmVjdGlvbiBzdWNjZXNzLAorICAgICAgICAgICBidXQgYSBjb25uZWN0aW9uIGZhaWx1cmUgaXMgbm90aWZpZWQgYXMgYW4gZXJyb3IuIE9uIFBPU0lYLCB0aGUKKyAgICAgICAgICAgc29ja2V0IGJlY29tZXMgd3JpdGFibGUgb24gY29ubmVjdGlvbiBzdWNjZXNzIG9yIG9uIGNvbm5lY3Rpb24KKyAgICAgICAgICAgZmFpbHVyZS4gKi8KKyAgICAgICAgcG9sbGZkLmV2ZW50cyB8PSBQT0xMRVJSOwogICAgIH0KKworICAgIC8qIHMtPnNvY2tfdGltZW91dCBpcyBpbiBzZWNvbmRzLCB0aW1lb3V0IGluIG1zICovCisgICAgbXMgPSBfUHlUaW1lX0FzTWlsbGlzZWNvbmRzKGludGVydmFsLCBfUHlUaW1lX1JPVU5EX0NFSUxJTkcpOworICAgIGFzc2VydChtcyA8PSBJTlRfTUFYKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFM7CisgICAgbiA9IHBvbGwoJnBvbGxmZCwgMSwgKGludCltcyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7CiAjZWxzZQotICAgIHsKLSAgICAgICAgLyogQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gc2VsZWN0ICovCi0gICAgICAgIGZkX3NldCBmZHM7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgICAgICB0di50dl9zZWMgPSAoaW50KWludGVydmFsOwotICAgICAgICB0di50dl91c2VjID0gKGludCkoKGludGVydmFsIC0gdHYudHZfc2VjKSAqIDFlNik7Ci0gICAgICAgIEZEX1pFUk8oJmZkcyk7Ci0gICAgICAgIEZEX1NFVChzLT5zb2NrX2ZkLCAmZmRzKTsKLQotICAgICAgICAvKiBTZWUgaWYgdGhlIHNvY2tldCBpcyByZWFkeSAqLwotICAgICAgICBpZiAod3JpdGluZykKLSAgICAgICAgICAgIG4gPSBzZWxlY3QoUHlfU0FGRV9ET1dOQ0FTVChzLT5zb2NrX2ZkKzEsIFNPQ0tFVF9ULCBpbnQpLAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmZmRzLCBOVUxMLCAmdHYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgJmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKKyAgICBpZiAoaW50ZXJ2YWwgPj0gMCkgeworICAgICAgICBfUHlUaW1lX0FzVGltZXZhbF9ub3JhaXNlKGludGVydmFsLCAmdHYsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CisgICAgICAgIHR2cCA9ICZ0djsKICAgICB9CisgICAgZWxzZQorICAgICAgICB0dnAgPSBOVUxMOworCisgICAgRkRfWkVSTygmZmRzKTsKKyAgICBGRF9TRVQocy0+c29ja19mZCwgJmZkcyk7CisgICAgRkRfWkVSTygmZWZkcyk7CisgICAgaWYgKGNvbm5lY3QpIHsKKyAgICAgICAgLyogT24gV2luZG93cywgdGhlIHNvY2tldCBiZWNvbWVzIHdyaXRhYmxlIG9uIGNvbm5lY3Rpb24gc3VjY2VzcywKKyAgICAgICAgICAgYnV0IGEgY29ubmVjdGlvbiBmYWlsdXJlIGlzIG5vdGlmaWVkIGFzIGFuIGVycm9yLiBPbiBQT1NJWCwgdGhlCisgICAgICAgICAgIHNvY2tldCBiZWNvbWVzIHdyaXRhYmxlIG9uIGNvbm5lY3Rpb24gc3VjY2VzcyBvciBvbiBjb25uZWN0aW9uCisgICAgICAgICAgIGZhaWx1cmUuICovCisgICAgICAgIEZEX1NFVChzLT5zb2NrX2ZkLCAmZWZkcyk7CisgICAgfQorCisgICAgLyogU2VlIGlmIHRoZSBzb2NrZXQgaXMgcmVhZHkgKi8KKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTOworICAgIGlmICh3cml0aW5nKQorICAgICAgICBuID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKKyAgICAgICAgICAgICAgICAgICBOVUxMLCAmZmRzLCAmZWZkcywgdHZwKTsKKyAgICBlbHNlCisgICAgICAgIG4gPSBzZWxlY3QoUHlfU0FGRV9ET1dOQ0FTVChzLT5zb2NrX2ZkKzEsIFNPQ0tFVF9ULCBpbnQpLAorICAgICAgICAgICAgICAgICAgICZmZHMsIE5VTEwsICZlZmRzLCB0dnApOworICAgIFB5X0VORF9BTExPV19USFJFQURTOwogI2VuZGlmCiAKICAgICBpZiAobiA8IDApCkBAIC02NTAsNTYgKzcwOCwxNjggQEAKICAgICByZXR1cm4gMDsKIH0KIAorLyogQ2FsbCBhIHNvY2tldCBmdW5jdGlvbi4KKworICAgT24gZXJyb3IsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIGlmIGVyciBpcyBzZXQsIG9yIGZpbGwgZXJyIGFuZAorICAgcmV0dXJuIC0xIG90aGVyd2lzZS4gSWYgYSBzaWduYWwgd2FzIHJlY2VpdmVkIGFuZCB0aGUgc2lnbmFsIGhhbmRsZXIgcmFpc2VkCisgICBhbiBleGNlcHRpb24sIHJldHVybiAtMSwgYW5kIHNldCBlcnIgdG8gLTEgaWYgZXJyIGlzIHNldC4KKworICAgT24gc3VjY2VzcywgcmV0dXJuIDAsIGFuZCBzZXQgZXJyIHRvIDAgaWYgZXJyIGlzIHNldC4KKworICAgSWYgdGhlIHNvY2tldCBoYXMgYSB0aW1lb3V0LCB3YWl0IHVudGlsIHRoZSBzb2NrZXQgaXMgcmVhZHkgYmVmb3JlIGNhbGxpbmcKKyAgIHRoZSBmdW5jdGlvbjogd2FpdCB1bnRpbCB0aGUgc29ja2V0IGlzIHdyaXRhYmxlIGlmIHdyaXRpbmcgaXMgbm9uemVybywgd2FpdAorICAgdW50aWwgdGhlIHNvY2tldCByZWNlaXZlZCBkYXRhIG90aGVyd2lzZS4KKworICAgSWYgdGhlIHNvY2tldCBmdW5jdGlvbiBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZmFpbGVkIHdpdGggRUlOVFIpOiByZXRyeQorICAgdGhlIGZ1bmN0aW9uLCBleGNlcHQgaWYgdGhlIHNpZ25hbCBoYW5kbGVyIHJhaXNlZCBhbiBleGNlcHRpb24gKFBFUCA0NzUpLgorCisgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyByZXRyaWVkLCByZWNvbXB1dGUgdGhlIHRpbWVvdXQgdXNpbmcgYSBtb25vdG9uaWMgY2xvY2suCisKKyAgIHNvY2tfY2FsbF9leCgpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIEdJTCBoZWxkLiBUaGUgc29ja2V0IGZ1bmN0aW9uIGlzCisgICBjYWxsZWQgd2l0aCB0aGUgR0lMIHJlbGVhc2VkLiAqLwogc3RhdGljIGludAotaW50ZXJuYWxfc2VsZWN0KFB5U29ja2V0U29ja09iamVjdCAqcywgaW50IHdyaXRpbmcpCitzb2NrX2NhbGxfZXgoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLAorICAgICAgICAgICAgIGludCB3cml0aW5nLAorICAgICAgICAgICAgIGludCAoKnNvY2tfZnVuYykgKFB5U29ja2V0U29ja09iamVjdCAqcywgdm9pZCAqZGF0YSksCisgICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICBpbnQgY29ubmVjdCwKKyAgICAgICAgICAgICBpbnQgKmVyciwKKyAgICAgICAgICAgICBfUHlUaW1lX3QgdGltZW91dCkKIHsKLSAgICByZXR1cm4gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIHdyaXRpbmcsIHMtPnNvY2tfdGltZW91dCk7Ci19CisgICAgaW50IGhhc190aW1lb3V0ID0gKHRpbWVvdXQgPiAwKTsKKyAgICBfUHlUaW1lX3QgZGVhZGxpbmUgPSAwOworICAgIGludCBkZWFkbGluZV9pbml0aWFsaXplZCA9IDA7CisgICAgaW50IHJlczsKIAotLyoKLSAgIFR3byBtYWNyb3MgZm9yIGF1dG9tYXRpYyByZXRyeSBvZiBzZWxlY3QoKSBpbiBjYXNlIG9mIGZhbHNlIHBvc2l0aXZlcwotICAgKGZvciBleGFtcGxlLCBzZWxlY3QoKSBjb3VsZCBpbmRpY2F0ZSBhIHNvY2tldCBpcyByZWFkeSBmb3IgcmVhZGluZwotICAgIGJ1dCB0aGUgZGF0YSB0aGVuIGRpc2NhcmRlZCBieSB0aGUgT1MgYmVjYXVzZSBvZiBhIHdyb25nIGNoZWNrc3VtKS4KLSAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB1c2U6CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICAvKiBzb2NrX2NhbGwoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBHSUwgaGVsZC4gKi8KKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgogCi0gICAgQkVHSU5fU0VMRUNUX0xPT1AocykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQotICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHRpbWVvdXQgPT0gMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKKyAgICAvKiBvdXRlciBsb29wIHRvIHJldHJ5IHNlbGVjdCgpIHdoZW4gc2VsZWN0KCkgaXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwKKyAgICAgICBvciB0byByZXRyeSBzZWxlY3QoKStzb2NrX2Z1bmMoKSBvbiBmYWxzZSBwb3NpdGl2ZSAoc2VlIGFib3ZlKSAqLworICAgIHdoaWxlICgxKSB7CisgICAgICAgIC8qIEZvciBjb25uZWN0KCksIHBvbGwgZXZlbiBmb3IgYmxvY2tpbmcgc29ja2V0LiBUaGUgY29ubmVjdGlvbgorICAgICAgICAgICBydW5zIGFzeW5jaHJvbm91c2x5LiAqLworICAgICAgICBpZiAoaGFzX3RpbWVvdXQgfHwgY29ubmVjdCkgeworICAgICAgICAgICAgaWYgKGhhc190aW1lb3V0KSB7CisgICAgICAgICAgICAgICAgX1B5VGltZV90IGludGVydmFsOworCisgICAgICAgICAgICAgICAgaWYgKGRlYWRsaW5lX2luaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlY29tcHV0ZSB0aGUgdGltZW91dCAqLworICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbCA9IGRlYWRsaW5lIC0gX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmVfaW5pdGlhbGl6ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBkZWFkbGluZSA9IF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKSArIHRpbWVvdXQ7CisgICAgICAgICAgICAgICAgICAgIGludGVydmFsID0gdGltZW91dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJ2YWwgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gaW50ZXJuYWxfc2VsZWN0KHMsIHdyaXRpbmcsIGludGVydmFsLCBjb25uZWN0KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlcyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXMgPSBpbnRlcm5hbF9zZWxlY3Qocywgd3JpdGluZywgdGltZW91dCwgY29ubmVjdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZXMgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgICAgICAgICAqZXJyID0gR0VUX1NPQ0tfRVJST1I7CisKKyAgICAgICAgICAgICAgICBpZiAoQ0hFQ0tfRVJSTk8oRUlOVFIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHNlbGVjdCgpIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmVyciA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogcmV0cnkgc2VsZWN0KCkgKi8KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogc2VsZWN0KCkgZmFpbGVkICovCisgICAgICAgICAgICAgICAgcy0+ZXJyb3JoYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVzID09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgICAgICAgICAqZXJyID0gU09DS19USU1FT1VUX0VSUjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzb2NrZXRfdGltZW91dCwgInRpbWVkIG91dCIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogdGhlIHNvY2tldCBpcyByZWFkeSAqLworICAgICAgICB9CisKKyAgICAgICAgLyogaW5uZXIgbG9vcCB0byByZXRyeSBzb2NrX2Z1bmMoKSB3aGVuIHNvY2tfZnVuYygpIGlzIGludGVycnVwdGVkCisgICAgICAgICAgIGJ5IGEgc2lnbmFsICovCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICByZXMgPSBzb2NrX2Z1bmMocywgZGF0YSk7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgICAgICBpZiAocmVzKSB7CisgICAgICAgICAgICAgICAgLyogc29ja19mdW5jKCkgc3VjY2VlZGVkICovCisgICAgICAgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgICAgICAgICAgKmVyciA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICAgICAgKmVyciA9IEdFVF9TT0NLX0VSUk9SOworCisgICAgICAgICAgICBpZiAoIUNIRUNLX0VSUk5PKEVJTlRSKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogc29ja19mdW5jKCkgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsICovCisgICAgICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgICAgICAgICAqZXJyID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiByZXRyeSBzb2NrX2Z1bmMoKSAqLworICAgICAgICB9CisKKyAgICAgICAgaWYgKHMtPnNvY2tfdGltZW91dCA+IDAKKyAgICAgICAgICAgICYmIChDSEVDS19FUlJOTyhFV09VTERCTE9DSykgfHwgQ0hFQ0tfRVJSTk8oRUFHQUlOKSkpIHsKKyAgICAgICAgICAgIC8qIEZhbHNlIHBvc2l0aXZlOiBzb2NrX2Z1bmMoKSBmYWlsZWQgd2l0aCBFV09VTERCTE9DSyBvciBFQUdBSU4uCisKKyAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCBzZWxlY3QoKSBjb3VsZCBpbmRpY2F0ZSBhIHNvY2tldCBpcyByZWFkeSBmb3IKKyAgICAgICAgICAgICAgIHJlYWRpbmcsIGJ1dCB0aGUgZGF0YSB0aGVuIGRpc2NhcmRlZCBieSB0aGUgT1MgYmVjYXVzZSBvZiBhCisgICAgICAgICAgICAgICB3cm9uZyBjaGVja3N1bS4KKworICAgICAgICAgICAgICAgTG9vcCBvbiBzZWxlY3QoKSB0byByZWNoZWNrIGZvciBzb2NrZXQgcmVhZHluZXNzLiAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBzb2NrX2Z1bmMoKSBmYWlsZWQgKi8KKyAgICAgICAgaWYgKCFlcnIpCisgICAgICAgICAgICBzLT5lcnJvcmhhbmRsZXIoKTsKKyAgICAgICAgLyogZWxzZTogZXJyIHdhcyBhbHJlYWR5IHNldCBiZWZvcmUgKi8KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBFTkRfU0VMRUNUX0xPT1AocykKLSovCit9CiAKLSNkZWZpbmUgQkVHSU5fU0VMRUNUX0xPT1AocykgXAotICAgIHsgXAotICAgICAgICBfUHlUaW1lX3RpbWV2YWwgbm93LCBkZWFkbGluZSA9IHswLCAwfTsgXAotICAgICAgICBkb3VibGUgaW50ZXJ2YWwgPSBzLT5zb2NrX3RpbWVvdXQ7IFwKLSAgICAgICAgaW50IGhhc190aW1lb3V0ID0gcy0+c29ja190aW1lb3V0ID4gMC4wOyBcCi0gICAgICAgIGlmIChoYXNfdGltZW91dCkgeyBcCi0gICAgICAgICAgICBfUHlUaW1lX2dldHRpbWVvZmRheSgmbm93KTsgXAotICAgICAgICAgICAgZGVhZGxpbmUgPSBub3c7IFwKLSAgICAgICAgICAgIF9QeVRpbWVfQUREX1NFQ09ORFMoZGVhZGxpbmUsIHMtPnNvY2tfdGltZW91dCk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIHdoaWxlICgxKSB7IFwKLSAgICAgICAgICAgIGVycm5vID0gMDsgXAorc3RhdGljIGludAorc29ja19jYWxsKFB5U29ja2V0U29ja09iamVjdCAqcywKKyAgICAgICAgICBpbnQgd3JpdGluZywKKyAgICAgICAgICBpbnQgKCpmdW5jKSAoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCB2b2lkICpkYXRhKSwKKyAgICAgICAgICB2b2lkICpkYXRhKQoreworICAgIHJldHVybiBzb2NrX2NhbGxfZXgocywgd3JpdGluZywgZnVuYywgZGF0YSwgMCwgTlVMTCwgcy0+c29ja190aW1lb3V0KTsKK30KIAotI2RlZmluZSBFTkRfU0VMRUNUX0xPT1AocykgXAotICAgICAgICAgICAgaWYgKCFoYXNfdGltZW91dCB8fCBcCi0gICAgICAgICAgICAgICAgKCFDSEVDS19FUlJOTyhFV09VTERCTE9DSykgJiYgIUNIRUNLX0VSUk5PKEVBR0FJTikpKSBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgIF9QeVRpbWVfZ2V0dGltZW9mZGF5KCZub3cpOyBcCi0gICAgICAgICAgICBpbnRlcnZhbCA9IF9QeVRpbWVfSU5URVJWQUwobm93LCBkZWFkbGluZSk7IFwKLSAgICAgICAgfSBcCi0gICAgfSBcCiAKIC8qIEluaXRpYWxpemUgYSBuZXcgc29ja2V0IG9iamVjdC4gKi8KIAotc3RhdGljIGRvdWJsZSBkZWZhdWx0dGltZW91dCA9IC0xLjA7IC8qIERlZmF1bHQgdGltZW91dCBmb3IgbmV3IHNvY2tldHMgKi8KKy8qIERlZmF1bHQgdGltZW91dCBmb3IgbmV3IHNvY2tldHMgKi8KK3N0YXRpYyBfUHlUaW1lX3QgZGVmYXVsdHRpbWVvdXQgPSBfUFlUSU1FX0ZST01TRUNPTkRTKC0xKTsKIAogc3RhdGljIHZvaWQKIGluaXRfc29ja29iamVjdChQeVNvY2tldFNvY2tPYmplY3QgKnMsCkBAIC03MTMsMTIgKzg4MywxMiBAQAogICAgIHMtPmVycm9yaGFuZGxlciA9ICZzZXRfZXJyb3I7CiAjaWZkZWYgU09DS19OT05CTE9DSwogICAgIGlmICh0eXBlICYgU09DS19OT05CTE9DSykKLSAgICAgICAgcy0+c29ja190aW1lb3V0ID0gMC4wOworICAgICAgICBzLT5zb2NrX3RpbWVvdXQgPSAwOwogICAgIGVsc2UKICNlbmRpZgogICAgIHsKICAgICAgICAgcy0+c29ja190aW1lb3V0ID0gZGVmYXVsdHRpbWVvdXQ7Ci0gICAgICAgIGlmIChkZWZhdWx0dGltZW91dCA+PSAwLjApCisgICAgICAgIGlmIChkZWZhdWx0dGltZW91dCA+PSAwKQogICAgICAgICAgICAgaW50ZXJuYWxfc2V0YmxvY2tpbmcocywgMCk7CiAgICAgfQogCkBAIC0xMjE0LDYgKzEzODQsNzEgQEAKICAgICB9CiB9CiAKKy8qIEhlbHBlciBmb3IgZ2V0c29ja2FkZHJhcmc6IGJ5cGFzcyBJRE5BIGZvciBBU0NJSS1vbmx5IGhvc3QgbmFtZXMKKyAgIChpbiBwYXJ0aWN1bGFyLCBudW1lcmljIElQIGFkZHJlc3NlcykuICovCitzdHJ1Y3QgbWF5YmVfaWRuYSB7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBjaGFyICpidWY7Cit9OworCitzdGF0aWMgdm9pZAoraWRuYV9jbGVhbnVwKHN0cnVjdCBtYXliZV9pZG5hICpkYXRhKQoreworICAgIFB5X0NMRUFSKGRhdGEtPm9iaik7Cit9CisKK3N0YXRpYyBpbnQKK2lkbmFfY29udmVydGVyKFB5T2JqZWN0ICpvYmosIHN0cnVjdCBtYXliZV9pZG5hICpkYXRhKQoreworICAgIHNpemVfdCBsZW47CisgICAgUHlPYmplY3QgKm9iajIsICpvYmozOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBpZG5hX2NsZWFudXAoZGF0YSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBkYXRhLT5vYmogPSBOVUxMOworICAgIGxlbiA9IC0xOworICAgIGlmIChQeUJ5dGVzX0NoZWNrKG9iaikpIHsKKyAgICAgICAgZGF0YS0+YnVmID0gUHlCeXRlc19Bc1N0cmluZyhvYmopOworICAgICAgICBsZW4gPSBQeUJ5dGVzX1NpemUob2JqKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfQ2hlY2sob2JqKSkgeworICAgICAgICBkYXRhLT5idWYgPSBQeUJ5dGVBcnJheV9Bc1N0cmluZyhvYmopOworICAgICAgICBsZW4gPSBQeUJ5dGVBcnJheV9TaXplKG9iaik7CisgICAgfQorICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhvYmopICYmIFB5VW5pY29kZV9SRUFEWShvYmopID09IDAgJiYgUHlVbmljb2RlX0lTX0NPTVBBQ1RfQVNDSUkob2JqKSkgeworICAgICAgICBkYXRhLT5idWYgPSBQeVVuaWNvZGVfREFUQShvYmopOworICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgb2JqMiA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KG9iaik7CisgICAgICAgIGlmICghb2JqMikgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgInN0cmluZyBvciB1bmljb2RlIHRleHQgYnVmZmVyIGV4cGVjdGVkLCBub3QgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9iai0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBvYmozID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhvYmoyLCAiaWRuYSIsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYob2JqMik7CisgICAgICAgIGlmICghb2JqMykgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImVuY29kaW5nIG9mIGhvc3RuYW1lIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKG9iajMpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqMyk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZW5jb2Rpbmcgb2YgaG9zdG5hbWUgZmFpbGVkIHRvIHJldHVybiBieXRlcyIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZGF0YS0+b2JqID0gb2JqMzsKKyAgICAgICAgZGF0YS0+YnVmID0gUHlCeXRlc19BU19TVFJJTkcob2JqMyk7CisgICAgICAgIGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUob2JqMyk7CisgICAgfQorICAgIGlmIChzdHJsZW4oZGF0YS0+YnVmKSAhPSBsZW4pIHsKKyAgICAgICAgUHlfQ0xFQVIoZGF0YS0+b2JqKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImhvc3QgbmFtZSBtdXN0IG5vdCBjb250YWluIG51bGwgY2hhcmFjdGVyIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gUHlfQ0xFQU5VUF9TVVBQT1JURUQ7Cit9CiAKIC8qIFBhcnNlIGEgc29ja2V0IGFkZHJlc3MgYXJndW1lbnQgYWNjb3JkaW5nIHRvIHRoZSBzb2NrZXQgb2JqZWN0J3MKICAgIGFkZHJlc3MgZmFtaWx5LiAgUmV0dXJuIDEgaWYgdGhlIGFkZHJlc3Mgd2FzIGluIHRoZSBwcm9wZXIgZm9ybWF0LApAQCAtMTIzMCw4ICsxNDY1LDcgQEAKICAgICBjYXNlIEFGX1VOSVg6CiAgICAgewogICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4qIGFkZHI7Ci0gICAgICAgIGNoYXIgKnBhdGg7Ci0gICAgICAgIGludCBsZW47CisgICAgICAgIFB5X2J1ZmZlciBwYXRoOwogICAgICAgICBpbnQgcmV0dmFsID0gMDsKIAogICAgICAgICAvKiBQRVAgMzgzLiAgTm90IHVzaW5nIFB5VW5pY29kZV9GU0NvbnZlcnRlciBzaW5jZSB3ZSBuZWVkIHRvCkBAIC0xMjQyLDE0ICsxNDc2LDE3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlfSU5DUkVGKGFyZ3MpOwotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZ3MsICJ5IyIsICZwYXRoLCAmbGVuKSkKLSAgICAgICAgICAgIGdvdG8gdW5peF9vdXQ7CisgICAgICAgIGlmICghUHlBcmdfUGFyc2UoYXJncywgInkqIiwgJnBhdGgpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICB9CisgICAgICAgIGFzc2VydChwYXRoLmxlbiA+PSAwKTsKIAogICAgICAgICBhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl91biopYWRkcl9yZXQ7CiAjaWZkZWYgbGludXgKLSAgICAgICAgaWYgKGxlbiA+IDAgJiYgcGF0aFswXSA9PSAwKSB7CisgICAgICAgIGlmIChwYXRoLmxlbiA+IDAgJiYgKihjb25zdCBjaGFyICopcGF0aC5idWYgPT0gMCkgewogICAgICAgICAgICAgLyogTGludXggYWJzdHJhY3QgbmFtZXNwYWNlIGV4dGVuc2lvbiAqLwotICAgICAgICAgICAgaWYgKGxlbiA+IHNpemVvZiBhZGRyLT5zdW5fcGF0aCkgeworICAgICAgICAgICAgaWYgKChzaXplX3QpcGF0aC5sZW4gPiBzaXplb2YgYWRkci0+c3VuX3BhdGgpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFGX1VOSVggcGF0aCB0b28gbG9uZyIpOwogICAgICAgICAgICAgICAgIGdvdG8gdW5peF9vdXQ7CkBAIC0xMjU5LDE4ICsxNDk2LDE5IEBACiAjZW5kaWYgLyogbGludXggKi8KICAgICAgICAgewogICAgICAgICAgICAgLyogcmVndWxhciBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nICovCi0gICAgICAgICAgICBpZiAobGVuID49IHNpemVvZiBhZGRyLT5zdW5fcGF0aCkgeworICAgICAgICAgICAgaWYgKChzaXplX3QpcGF0aC5sZW4gPj0gc2l6ZW9mIGFkZHItPnN1bl9wYXRoKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRl9VTklYIHBhdGggdG9vIGxvbmciKTsKICAgICAgICAgICAgICAgICBnb3RvIHVuaXhfb3V0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYWRkci0+c3VuX3BhdGhbbGVuXSA9IDA7CisgICAgICAgICAgICBhZGRyLT5zdW5fcGF0aFtwYXRoLmxlbl0gPSAwOwogICAgICAgICB9CiAgICAgICAgIGFkZHItPnN1bl9mYW1pbHkgPSBzLT5zb2NrX2ZhbWlseTsKLSAgICAgICAgbWVtY3B5KGFkZHItPnN1bl9wYXRoLCBwYXRoLCBsZW4pOwotICAgICAgICAqbGVuX3JldCA9IGxlbiArIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpOworICAgICAgICBtZW1jcHkoYWRkci0+c3VuX3BhdGgsIHBhdGguYnVmLCBwYXRoLmxlbik7CisgICAgICAgICpsZW5fcmV0ID0gcGF0aC5sZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKICAgICAgICAgcmV0dmFsID0gMTsKICAgICB1bml4X291dDoKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGF0aCk7CiAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICAgICAgcmV0dXJuIHJldHZhbDsKICAgICB9CkBAIC0xMzA4LDcgKzE1NDYsNyBAQAogICAgIGNhc2UgQUZfSU5FVDoKICAgICB7CiAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiogYWRkcjsKLSAgICAgICAgY2hhciAqaG9zdDsKKyAgICAgICAgc3RydWN0IG1heWJlX2lkbmEgaG9zdCA9IHtOVUxMLCBOVUxMfTsKICAgICAgICAgaW50IHBvcnQsIHJlc3VsdDsKICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCkBAIC0xMzE4LDEzICsxNTU2LDEzIEBACiAgICAgICAgICAgICAgICAgUHlfVFlQRShhcmdzKS0+dHBfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0aTpnZXRzb2NrYWRkcmFyZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWRuYSIsICZob3N0LCAmcG9ydCkpCisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpOmdldHNvY2thZGRyYXJnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkbmFfY29udmVydGVyLCAmaG9zdCwgJnBvcnQpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGFkZHI9KHN0cnVjdCBzb2NrYWRkcl9pbiopYWRkcl9yZXQ7Ci0gICAgICAgIHJlc3VsdCA9IHNldGlwYWRkcihob3N0LCAoc3RydWN0IHNvY2thZGRyICopYWRkciwKKyAgICAgICAgcmVzdWx0ID0gc2V0aXBhZGRyKGhvc3QuYnVmLCAoc3RydWN0IHNvY2thZGRyICopYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqYWRkciksICBBRl9JTkVUKTsKLSAgICAgICAgUHlNZW1fRnJlZShob3N0KTsKKyAgICAgICAgaWRuYV9jbGVhbnVwKCZob3N0KTsKICAgICAgICAgaWYgKHJlc3VsdCA8IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiAweGZmZmYpIHsKQEAgLTEzNDMsNyArMTU4MSw3IEBACiAgICAgY2FzZSBBRl9JTkVUNjoKICAgICB7CiAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYqIGFkZHI7Ci0gICAgICAgIGNoYXIgKmhvc3Q7CisgICAgICAgIHN0cnVjdCBtYXliZV9pZG5hIGhvc3QgPSB7TlVMTCwgTlVMTH07CiAgICAgICAgIGludCBwb3J0LCByZXN1bHQ7CiAgICAgICAgIHVuc2lnbmVkIGludCBmbG93aW5mbywgc2NvcGVfaWQ7CiAgICAgICAgIGZsb3dpbmZvID0gc2NvcGVfaWQgPSAwOwpAQCAtMTM1NSwxNSArMTU5MywxNSBAQAogICAgICAgICAgICAgICAgIFB5X1RZUEUoYXJncyktPnRwX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldGl8SUkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlkbmEiLCAmaG9zdCwgJnBvcnQsICZmbG93aW5mbywKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJml8SUkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRuYV9jb252ZXJ0ZXIsICZob3N0LCAmcG9ydCwgJmZsb3dpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjb3BlX2lkKSkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42KilhZGRyX3JldDsKLSAgICAgICAgcmVzdWx0ID0gc2V0aXBhZGRyKGhvc3QsIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyLAorICAgICAgICByZXN1bHQgPSBzZXRpcGFkZHIoaG9zdC5idWYsIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCphZGRyKSwgQUZfSU5FVDYpOwotICAgICAgICBQeU1lbV9GcmVlKGhvc3QpOworICAgICAgICBpZG5hX2NsZWFudXAoJmhvc3QpOwogICAgICAgICBpZiAocmVzdWx0IDwgMCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAocG9ydCA8IDAgfHwgcG9ydCA+IDB4ZmZmZikgewpAQCAtMTQ5Miw4ICsxNzMwLDcgQEAKICAgICAgICAgaW50IHByb3RvTnVtYmVyOwogICAgICAgICBpbnQgaGF0eXBlID0gMDsKICAgICAgICAgaW50IHBrdHR5cGUgPSAwOwotICAgICAgICBjaGFyICpoYWRkciA9IE5VTEw7Ci0gICAgICAgIHVuc2lnbmVkIGludCBoYWxlbiA9IDA7CisgICAgICAgIFB5X2J1ZmZlciBoYWRkciA9IHtOVUxMLCBOVUxMfTsKIAogICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKQEAgLTE1MDMsMjUgKzE3NDAsMjggQEAKICAgICAgICAgICAgICAgICBQeV9UWVBFKGFyZ3MpLT50cF9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic2l8aWl5IyIsICZpbnRlcmZhY2VOYW1lLAorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNpfGlpeSoiLCAmaW50ZXJmYWNlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm90b051bWJlciwgJnBrdHR5cGUsICZoYXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFkZHIsICZoYWxlbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFkZHIpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBpbnRlcmZhY2VOYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CiAgICAgICAgIGlmci5pZnJfbmFtZVsoc2l6ZW9mKGlmci5pZnJfbmFtZSkpLTFdID0gJ1wwJzsKICAgICAgICAgaWYgKGlvY3RsKHMtPnNvY2tfZmQsIFNJT0NHSUZJTkRFWCwgJmlmcikgPCAwKSB7CiAgICAgICAgICAgICBzLT5lcnJvcmhhbmRsZXIoKTsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmhhZGRyKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGlmIChoYWxlbiA+IDgpIHsKLSAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkhhcmR3YXJlIGFkZHJlc3MgbXVzdCBiZSA4IGJ5dGVzIG9yIGxlc3MiKTsKLSAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGhhZGRyLmJ1ZiAmJiBoYWRkci5sZW4gPiA4KSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFyZHdhcmUgYWRkcmVzcyBtdXN0IGJlIDggYnl0ZXMgb3IgbGVzcyIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmaGFkZHIpOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByb3RvTnVtYmVyIDwgMCB8fCBwcm90b051bWJlciA+IDB4ZmZmZikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgICAgIFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgImdldHNvY2thZGRyYXJnOiBwcm90b051bWJlciBtdXN0IGJlIDAtNjU1MzUuIik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZoYWRkcik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9sbCopYWRkcl9yZXQ7CkBAIC0xNTMwLDExICsxNzcwLDE0IEBACiAgICAgICAgIGFkZHItPnNsbF9pZmluZGV4ID0gaWZyLmlmcl9pZmluZGV4OwogICAgICAgICBhZGRyLT5zbGxfcGt0dHlwZSA9IHBrdHR5cGU7CiAgICAgICAgIGFkZHItPnNsbF9oYXR5cGUgPSBoYXR5cGU7Ci0gICAgICAgIGlmIChoYWxlbiAhPSAwKSB7Ci0gICAgICAgICAgbWVtY3B5KCZhZGRyLT5zbGxfYWRkciwgaGFkZHIsIGhhbGVuKTsKKyAgICAgICAgaWYgKGhhZGRyLmJ1ZikgeworICAgICAgICAgICAgbWVtY3B5KCZhZGRyLT5zbGxfYWRkciwgaGFkZHIuYnVmLCBoYWRkci5sZW4pOworICAgICAgICAgICAgYWRkci0+c2xsX2hhbGVuID0gaGFkZHIubGVuOwogICAgICAgICB9Ci0gICAgICAgIGFkZHItPnNsbF9oYWxlbiA9IGhhbGVuOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhZGRyLT5zbGxfaGFsZW4gPSAwOwogICAgICAgICAqbGVuX3JldCA9IHNpemVvZiAqYWRkcjsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmaGFkZHIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAjZW5kaWYKQEAgLTE2MTEsNyArMTg1NCw3IEBACiAKICAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgewogICAgICAgICAgICAgICAgIGlmci5pZnJfaWZpbmRleCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA8IHNpemVvZihpZnIuaWZyX25hbWUpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChzaXplX3QpbGVuIDwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpIHsKICAgICAgICAgICAgICAgICBzdHJuY3B5KGlmci5pZnJfbmFtZSwgUHlCeXRlc19BU19TVFJJTkcoaW50ZXJmYWNlTmFtZSksIHNpemVvZihpZnIuaWZyX25hbWUpKTsKICAgICAgICAgICAgICAgICBpZnIuaWZyX25hbWVbKHNpemVvZihpZnIuaWZyX25hbWUpKS0xXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAgaWYgKGlvY3RsKHMtPnNvY2tfZmQsIFNJT0NHSUZJTkRFWCwgJmlmcikgPCAwKSB7CkBAIC0xNjYxLDcgKzE5MDQsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShjdGxfbmFtZSkgPiBzaXplb2YoaW5mby5jdGxfbmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShjdGxfbmFtZSkgPiAoUHlfc3NpemVfdClzaXplb2YoaW5mby5jdGxfbmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZWQgc3RyaW5nIGlzIHRvbyBsb25nIik7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjdGxfbmFtZSk7CkBAIC0xODk2LDggKzIxMzksMTUgQEAKICAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogICAgICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3RhdXRvbG9naWNhbC1jb21wYXJlIgogICAgICNlbmRpZgorICAgICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gNCkgfHwgKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPiA1KSkpCisgICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3R5cGUtbGltaXRzIgorICAgICNlbmRpZgogICAgIGlmIChtc2ctPm1zZ19jb250cm9sbGVuIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CisgICAgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiA0KSB8fCAoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+IDUpKSkKKyAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICAgICNlbmRpZgogICAgICNpZmRlZiBfX2NsYW5nX18KICAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAgICAgI2VuZGlmCkBAIC0xOTU1LDIyICsyMjA1LDU2IEBACiAjZW5kaWYgICAgLyogQ01TR19MRU4gKi8KIAogCitzdHJ1Y3Qgc29ja19hY2NlcHQgeworICAgIHNvY2tsZW5fdCAqYWRkcmxlbjsKKyAgICBzb2NrX2FkZHJfdCAqYWRkcmJ1ZjsKKyAgICBTT0NLRVRfVCByZXN1bHQ7Cit9OworCisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorLyogYWNjZXB0NCgpIGlzIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjgrIGFuZCBnbGliYyAyLjEwICovCitzdGF0aWMgaW50IGFjY2VwdDRfd29ya3MgPSAtMTsKKyNlbmRpZgorCitzdGF0aWMgaW50Citzb2NrX2FjY2VwdF9pbXBsKFB5U29ja2V0U29ja09iamVjdCAqcywgdm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3Qgc29ja19hY2NlcHQgKmN0eCA9IGRhdGE7CisKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgaWYgKGFjY2VwdDRfd29ya3MgIT0gMCkgeworICAgICAgICBjdHgtPnJlc3VsdCA9IGFjY2VwdDQocy0+c29ja19mZCwgU0FTMlNBKGN0eC0+YWRkcmJ1ZiksIGN0eC0+YWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfQ0xPRVhFQyk7CisgICAgICAgIGlmIChjdHgtPnJlc3VsdCA9PSBJTlZBTElEX1NPQ0tFVCAmJiBhY2NlcHQ0X3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICAvKiBPbiBMaW51eCBvbGRlciB0aGFuIDIuNi4yOCwgYWNjZXB0NCgpIGZhaWxzIHdpdGggRU5PU1lTICovCisgICAgICAgICAgICBhY2NlcHQ0X3dvcmtzID0gKGVycm5vICE9IEVOT1NZUyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFjY2VwdDRfd29ya3MgPT0gMCkKKyAgICAgICAgY3R4LT5yZXN1bHQgPSBhY2NlcHQocy0+c29ja19mZCwgU0FTMlNBKGN0eC0+YWRkcmJ1ZiksIGN0eC0+YWRkcmxlbik7CisjZWxzZQorICAgIGN0eC0+cmVzdWx0ID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQShjdHgtPmFkZHJidWYpLCBjdHgtPmFkZHJsZW4pOworI2VuZGlmCisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgcmV0dXJuIChjdHgtPnJlc3VsdCAhPSBJTlZBTElEX1NPQ0tFVCk7CisjZWxzZQorICAgIHJldHVybiAoY3R4LT5yZXN1bHQgPj0gMCk7CisjZW5kaWYKK30KKwogLyogcy5fYWNjZXB0KCkgLT4gKGZkLCBhZGRyZXNzKSAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgogc29ja19hY2NlcHQoUHlTb2NrZXRTb2NrT2JqZWN0ICpzKQogewogICAgIHNvY2tfYWRkcl90IGFkZHJidWY7Ci0gICAgU09DS0VUX1QgbmV3ZmQgPSBJTlZBTElEX1NPQ0tFVDsKKyAgICBTT0NLRVRfVCBuZXdmZDsKICAgICBzb2NrbGVuX3QgYWRkcmxlbjsKICAgICBQeU9iamVjdCAqc29jayA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmFkZHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotICAgIGludCB0aW1lb3V0OwotI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKLSAgICAvKiBhY2NlcHQ0KCkgaXMgYXZhaWxhYmxlIG9uIExpbnV4IDIuNi4yOCsgYW5kIGdsaWJjIDIuMTAgKi8KLSAgICBzdGF0aWMgaW50IGFjY2VwdDRfd29ya3MgPSAtMTsKLSNlbmRpZgorICAgIHN0cnVjdCBzb2NrX2FjY2VwdCBjdHg7CiAKICAgICBpZiAoIWdldHNvY2thZGRybGVuKHMsICZhZGRybGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTc5LDM2ICsyMjYzLDExIEBACiAgICAgaWYgKCFJU19TRUxFQ1RBQkxFKHMpKQogICAgICAgICByZXR1cm4gc2VsZWN0X2Vycm9yKCk7CiAKLSAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkgewotI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKLSAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgIT0gMCkgewotICAgICAgICAgICAgbmV3ZmQgPSBhY2NlcHQ0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfQ0xPRVhFQyk7Ci0gICAgICAgICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQgJiYgYWNjZXB0NF93b3JrcyA9PSAtMSkgewotICAgICAgICAgICAgICAgIC8qIE9uIExpbnV4IG9sZGVyIHRoYW4gMi42LjI4LCBhY2NlcHQ0KCkgZmFpbHMgd2l0aCBFTk9TWVMgKi8KLSAgICAgICAgICAgICAgICBhY2NlcHQ0X3dvcmtzID0gKGVycm5vICE9IEVOT1NZUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgPT0gMCkKLSAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKLSNlbHNlCi0gICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKLSNlbmRpZgotICAgIH0KLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHRpbWVvdXQgPT0gMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKKyAgICBjdHguYWRkcmxlbiA9ICZhZGRybGVuOworICAgIGN0eC5hZGRyYnVmID0gJmFkZHJidWY7CisgICAgaWYgKHNvY2tfY2FsbChzLCAwLCBzb2NrX2FjY2VwdF9pbXBsLCAmY3R4KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBFTkRfU0VMRUNUX0xPT1AocykKLQotICAgIGlmIChuZXdmZCA9PSBJTlZBTElEX1NPQ0tFVCkKLSAgICAgICAgcmV0dXJuIHMtPmVycm9yaGFuZGxlcigpOworICAgIG5ld2ZkID0gY3R4LnJlc3VsdDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpbmV3ZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CkBAIC0yMDY5LDcgKzIzMjgsNyBAQAogICAgIGlmIChibG9jayA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHMtPnNvY2tfdGltZW91dCA9IGJsb2NrID8gLTEuMCA6IDAuMDsKKyAgICBzLT5zb2NrX3RpbWVvdXQgPSBfUHlUaW1lX0Zyb21TZWNvbmRzKGJsb2NrID8gLTEgOiAwKTsKICAgICBpbnRlcm5hbF9zZXRibG9ja2luZyhzLCBibG9jayk7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CkBAIC0yMDgzLDYgKzIzNDIsNDcgQEAKIHNldGJsb2NraW5nKFRydWUpIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGltZW91dChOb25lKTtcblwKIHNldGJsb2NraW5nKEZhbHNlKSBpcyBlcXVpdmFsZW50IHRvIHNldHRpbWVvdXQoMC4wKS4iKTsKIAorc3RhdGljIGludAorc29ja2V0X3BhcnNlX3RpbWVvdXQoX1B5VGltZV90ICp0aW1lb3V0LCBQeU9iamVjdCAqdGltZW91dF9vYmopCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworI2VuZGlmCisjaWZuZGVmIEhBVkVfUE9MTAorICAgIF9QeVRpbWVfdCBtczsKKyNlbmRpZgorICAgIGludCBvdmVyZmxvdyA9IDA7CisKKyAgICBpZiAodGltZW91dF9vYmogPT0gUHlfTm9uZSkgeworICAgICAgICAqdGltZW91dCA9IF9QeVRpbWVfRnJvbVNlY29uZHMoLTEpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoX1B5VGltZV9Gcm9tU2Vjb25kc09iamVjdCh0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRfb2JqLCBfUHlUaW1lX1JPVU5EX0NFSUxJTkcpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKCp0aW1lb3V0IDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIlRpbWVvdXQgdmFsdWUgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgb3ZlcmZsb3cgfD0gKF9QeVRpbWVfQXNUaW1ldmFsKCp0aW1lb3V0LCAmdHYsIF9QeVRpbWVfUk9VTkRfQ0VJTElORykgPCAwKTsKKyNlbmRpZgorI2lmbmRlZiBIQVZFX1BPTEwKKyAgICBtcyA9IF9QeVRpbWVfQXNNaWxsaXNlY29uZHMoKnRpbWVvdXQsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CisgICAgb3ZlcmZsb3cgfD0gKG1zID4gSU5UX01BWCk7CisjZW5kaWYKKyAgICBpZiAob3ZlcmZsb3cpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidGltZW91dCBkb2Vzbid0IGZpdCBpbnRvIEMgdGltZXZhbCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIC8qIHMuc2V0dGltZW91dCh0aW1lb3V0KSBtZXRob2QuICBBcmd1bWVudDoKICAgIE5vbmUgLS0gbm8gdGltZW91dCwgYmxvY2tpbmcgbW9kZTsgc2FtZSBhcyBzZXRibG9ja2luZyhUcnVlKQogICAgMC4wICAtLSBub24tYmxvY2tpbmcgbW9kZTsgc2FtZSBhcyBzZXRibG9ja2luZyhGYWxzZSkKQEAgLTIwOTIsMjIgKzIzOTIsMTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrX3NldHRpbWVvdXQoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBQeU9iamVjdCAqYXJnKQogewotICAgIGRvdWJsZSB0aW1lb3V0OworICAgIF9QeVRpbWVfdCB0aW1lb3V0OwogCi0gICAgaWYgKGFyZyA9PSBQeV9Ob25lKQotICAgICAgICB0aW1lb3V0ID0gLTEuMDsKLSAgICBlbHNlIHsKLSAgICAgICAgdGltZW91dCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKLSAgICAgICAgaWYgKHRpbWVvdXQgPCAwLjApIHsKLSAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVvdXQgdmFsdWUgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoc29ja2V0X3BhcnNlX3RpbWVvdXQoJnRpbWVvdXQsIGFyZykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHMtPnNvY2tfdGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgaW50ZXJuYWxfc2V0YmxvY2tpbmcocywgdGltZW91dCA8IDAuMCk7CisgICAgaW50ZXJuYWxfc2V0YmxvY2tpbmcocywgdGltZW91dCA8IDApOwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtMjEyNiwxMiArMjQxNywxNCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tfZ2V0dGltZW91dChQeVNvY2tldFNvY2tPYmplY3QgKnMpCiB7Ci0gICAgaWYgKHMtPnNvY2tfdGltZW91dCA8IDAuMCkgeworICAgIGlmIChzLT5zb2NrX3RpbWVvdXQgPCAwKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShzLT5zb2NrX3RpbWVvdXQpOworICAgIGVsc2UgeworICAgICAgICBkb3VibGUgc2Vjb25kcyA9IF9QeVRpbWVfQXNTZWNvbmRzRG91YmxlKHMtPnNvY2tfdGltZW91dCk7CisgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoc2Vjb25kcyk7CisgICAgfQogfQogCiBQeURvY19TVFJWQVIoZ2V0dGltZW91dF9kb2MsCkBAIC0yMTUyLDIyICsyNDQ1LDIyIEBACiAgICAgaW50IGxldmVsOwogICAgIGludCBvcHRuYW1lOwogICAgIGludCByZXM7Ci0gICAgY2hhciAqYnVmOwotICAgIGludCBidWZsZW47CisgICAgUHlfYnVmZmVyIG9wdHZhbDsKICAgICBpbnQgZmxhZzsKIAogICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWk6c2V0c29ja29wdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJmxldmVsLCAmb3B0bmFtZSwgJmZsYWcpKSB7Ci0gICAgICAgIGJ1ZiA9IChjaGFyICopICZmbGFnOwotICAgICAgICBidWZsZW4gPSBzaXplb2YgZmxhZzsKKyAgICAgICAgcmVzID0gc2V0c29ja29wdChzLT5zb2NrX2ZkLCBsZXZlbCwgb3B0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopJmZsYWcsIHNpemVvZiBmbGFnKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWl5IzpzZXRzb2Nrb3B0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZXZlbCwgJm9wdG5hbWUsICZidWYsICZidWZsZW4pKQorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpeSo6c2V0c29ja29wdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGV2ZWwsICZvcHRuYW1lLCAmb3B0dmFsKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXMgPSBzZXRzb2Nrb3B0KHMtPnNvY2tfZmQsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwuYnVmLCBvcHR2YWwubGVuKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmb3B0dmFsKTsKICAgICB9Ci0gICAgcmVzID0gc2V0c29ja29wdChzLT5zb2NrX2ZkLCBsZXZlbCwgb3B0bmFtZSwgKHZvaWQgKilidWYsIGJ1Zmxlbik7CiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CkBAIC0yMjcxLDggKzI1NjQsMTMgQEAKIHsKICAgICBTT0NLRVRfVCBmZDsKIAotICAgIGlmICgoZmQgPSBzLT5zb2NrX2ZkKSAhPSAtMSkgewotICAgICAgICBzLT5zb2NrX2ZkID0gLTE7CisgICAgLyogV2UgZG8gbm90IHdhbnQgdG8gcmV0cnkgdXBvbiBFSU5UUjogc2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzU3NjQ3OC8KKyAgICAgKiBhbmQgaHR0cDovL2xpbnV4LmRlcmtlaWxlci5jb20vTWFpbGluZy1MaXN0cy9LZXJuZWwvMjAwNS0wOS8zMDAwLmh0bWwKKyAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAqLworICAgIGZkID0gcy0+c29ja19mZDsKKyAgICBpZiAoZmQgIT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgcy0+c29ja19mZCA9IElOVkFMSURfU09DS0VUOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICh2b2lkKSBTT0NLRVRDTE9TRShmZCk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC0yMjkwLDcgKzI1ODgsNyBAQAogc29ja19kZXRhY2goUHlTb2NrZXRTb2NrT2JqZWN0ICpzKQogewogICAgIFNPQ0tFVF9UIGZkID0gcy0+c29ja19mZDsKLSAgICBzLT5zb2NrX2ZkID0gLTE7CisgICAgcy0+c29ja19mZCA9IElOVkFMSURfU09DS0VUOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNvY2tldF90KGZkKTsKIH0KIApAQCAtMjMwMiw5MiArMjYwMCw5MCBAQAogY2FuIGJlIHJldXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuICBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJldHVybmVkLiIpOwogCiBzdGF0aWMgaW50Ci1pbnRlcm5hbF9jb25uZWN0KFB5U29ja2V0U29ja09iamVjdCAqcywgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgYWRkcmxlbiwKLSAgICAgICAgICAgICAgICAgaW50ICp0aW1lb3V0cCkKK3NvY2tfY29ubmVjdF9pbXBsKFB5U29ja2V0U29ja09iamVjdCAqcywgdm9pZCogUHlfVU5VU0VEKGRhdGEpKQogewotICAgIGludCByZXMsIHRpbWVvdXQ7CisgICAgaW50IGVycjsKKyAgICBzb2NrbGVuX3Qgc2l6ZSA9IHNpemVvZiBlcnI7CiAKLSAgICB0aW1lb3V0ID0gMDsKKyAgICBpZiAoZ2V0c29ja29wdChzLT5zb2NrX2ZkLCBTT0xfU09DS0VULCBTT19FUlJPUiwgKHZvaWQgKikmZXJyLCAmc2l6ZSkpIHsKKyAgICAgICAgLyogZ2V0c29ja29wdCgpIGZhaWxlZCAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoZXJyID09IEVJU0NPTk4pCisgICAgICAgIHJldHVybiAxOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAvKiBzb2NrX2NhbGxfZXgoKSB1c2VzIEdFVF9TT0NLX0VSUk9SKCkgdG8gZ2V0IHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIFNFVF9TT0NLX0VSUk9SKGVycik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAoraW50ZXJuYWxfY29ubmVjdChQeVNvY2tldFNvY2tPYmplY3QgKnMsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJsZW4sCisgICAgICAgICAgICAgICAgIGludCByYWlzZSkKK3sKKyAgICBpbnQgcmVzLCBlcnIsIHdhaXRfY29ubmVjdDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBjb25uZWN0KHMtPnNvY2tfZmQsIGFkZHIsIGFkZHJsZW4pOworICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSNpZmRlZiBNU19XSU5ET1dTCi0KLSAgICBpZiAocy0+c29ja190aW1lb3V0ID4gMC4wKSB7Ci0gICAgICAgIGlmIChyZXMgPCAwICYmIFdTQUdldExhc3RFcnJvcigpID09IFdTQUVXT1VMREJMT0NLICYmCi0gICAgICAgICAgICBJU19TRUxFQ1RBQkxFKHMpKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGlzIGEgbWVzcy4gIEJlc3Qgc29sdXRpb246IHRydXN0IHNlbGVjdCAqLwotICAgICAgICAgICAgZmRfc2V0IGZkczsKLSAgICAgICAgICAgIGZkX3NldCBmZHNfZXhjOwotICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgdHY7Ci0gICAgICAgICAgICB0di50dl9zZWMgPSAoaW50KXMtPnNvY2tfdGltZW91dDsKLSAgICAgICAgICAgIHR2LnR2X3VzZWMgPSAoaW50KSgocy0+c29ja190aW1lb3V0IC0gdHYudHZfc2VjKSAqIDFlNik7Ci0gICAgICAgICAgICBGRF9aRVJPKCZmZHMpOwotICAgICAgICAgICAgRkRfU0VUKHMtPnNvY2tfZmQsICZmZHMpOwotICAgICAgICAgICAgRkRfWkVSTygmZmRzX2V4Yyk7Ci0gICAgICAgICAgICBGRF9TRVQocy0+c29ja19mZCwgJmZkc19leGMpOwotICAgICAgICAgICAgcmVzID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmZmRzLCAmZmRzX2V4YywgJnR2KTsKLSAgICAgICAgICAgIGlmIChyZXMgPT0gMCkgewotICAgICAgICAgICAgICAgIHJlcyA9IFdTQUVXT1VMREJMT0NLOwotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAxOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZEX0lTU0VUKHMtPnNvY2tfZmQsICZmZHMpKQotICAgICAgICAgICAgICAgICAgICAvKiBUaGUgc29ja2V0IGlzIGluIHRoZSB3cml0YWJsZSBzZXQgLSB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgIG1lYW5zIGNvbm5lY3RlZCAqLwotICAgICAgICAgICAgICAgICAgICByZXMgPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvKiBBcyBwZXIgTVMgZG9jcywgd2UgbmVlZCB0byBjYWxsIGdldHNvY2tvcHQoKQotICAgICAgICAgICAgICAgICAgICAgICB0byBnZXQgdGhlIHVuZGVybHlpbmcgZXJyb3IgKi8KLSAgICAgICAgICAgICAgICAgICAgaW50IHJlc19zaXplID0gc2l6ZW9mIHJlczsKLSAgICAgICAgICAgICAgICAgICAgLyogSXQgbXVzdCBiZSBpbiB0aGUgZXhjZXB0aW9uIHNldCAqLwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoRkRfSVNTRVQocy0+c29ja19mZCwgJmZkc19leGMpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gZ2V0c29ja29wdChzLT5zb2NrX2ZkLCBTT0xfU09DS0VULCBTT19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSZyZXMsICZyZXNfc2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXRzb2Nrb3B0IGFsc28gY2xlYXJzIFdTQUdldExhc3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvIHJlc2V0IGl0IGJhY2suICovCi0gICAgICAgICAgICAgICAgICAgICAgICBXU0FTZXRMYXN0RXJyb3IocmVzKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gV1NBR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogZWxzZSBpZiAocmVzIDwgMCkgYW4gZXJyb3Igb2NjdXJyZWQgKi8KLSAgICAgICAgfQorICAgIGlmICghcmVzKSB7CisgICAgICAgIC8qIGNvbm5lY3QoKSBzdWNjZWVkZWQsIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkICovCisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXMgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICAvKiBjb25uZWN0KCkgZmFpbGVkICovCiAKLSNlbHNlCisgICAgLyogc2F2ZSBlcnJvciwgUHlFcnJfQ2hlY2tTaWduYWxzKCkgY2FuIHJlcGxhY2UgaXQgKi8KKyAgICBlcnIgPSBHRVRfU09DS19FUlJPUjsKKyAgICBpZiAoQ0hFQ0tfRVJSTk8oRUlOVFIpKSB7CisgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmIChzLT5zb2NrX3RpbWVvdXQgPiAwLjApIHsKLSAgICAgICAgaWYgKHJlcyA8IDAgJiYgZXJybm8gPT0gRUlOUFJPR1JFU1MgJiYgSVNfU0VMRUNUQUJMRShzKSkgewotICAgICAgICAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdChzLCAxKTsKLSAgICAgICAgICAgIGlmICh0aW1lb3V0ID09IDApIHsKLSAgICAgICAgICAgICAgICAvKiBCdWcgIzEwMTk4MDg6IGluIGNhc2Ugb2YgYW4gRUlOUFJPR1JFU1MsCi0gICAgICAgICAgICAgICAgICAgdXNlIGdldHNvY2tvcHQoU09fRVJST1IpIHRvIGdldCB0aGUgcmVhbAotICAgICAgICAgICAgICAgICAgIGVycm9yLiAqLwotICAgICAgICAgICAgICAgIHNvY2tsZW5fdCByZXNfc2l6ZSA9IHNpemVvZiByZXM7Ci0gICAgICAgICAgICAgICAgKHZvaWQpZ2V0c29ja29wdChzLT5zb2NrX2ZkLCBTT0xfU09DS0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU09fRVJST1IsICZyZXMsICZyZXNfc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSBFSVNDT05OKQotICAgICAgICAgICAgICAgICAgICByZXMgPSAwOwotICAgICAgICAgICAgICAgIGVycm5vID0gcmVzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGltZW91dCA9PSAtMSkgewotICAgICAgICAgICAgICAgIHJlcyA9IGVycm5vOyAgICAgICAgICAgIC8qIGhhZCBlcnJvciAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlcyA9IEVXT1VMREJMT0NLOyAgICAgICAgICAgICAgICAgICAgICAvKiB0aW1lZCBvdXQgKi8KLSAgICAgICAgfQorICAgICAgICAvKiBJc3N1ZSAjMjM2MTg6IHdoZW4gY29ubmVjdCgpIGZhaWxzIHdpdGggRUlOVFIsIHRoZSBjb25uZWN0aW9uIGlzCisgICAgICAgICAgIHJ1bm5pbmcgYXN5bmNocm9ub3VzbHkuCisKKyAgICAgICAgICAgSWYgdGhlIHNvY2tldCBpcyBibG9ja2luZyBvciBoYXMgYSB0aW1lb3V0LCB3YWl0IHVudGlsIHRoZQorICAgICAgICAgICBjb25uZWN0aW9uIGNvbXBsZXRlcywgZmFpbHMgb3IgdGltZWQgb3V0IHVzaW5nIHNlbGVjdCgpLCBhbmQgdGhlbgorICAgICAgICAgICBnZXQgdGhlIGNvbm5lY3Rpb24gc3RhdHVzIHVzaW5nIGdldHNvY2tvcHQoU09fRVJST1IpLgorCisgICAgICAgICAgIElmIHRoZSBzb2NrZXQgaXMgbm9uLWJsb2NraW5nLCByYWlzZSBJbnRlcnJ1cHRlZEVycm9yLiBUaGUgY2FsbGVyIGlzCisgICAgICAgICAgIHJlc3BvbnNpYmxlIHRvIHdhaXQgdW50aWwgdGhlIGNvbm5lY3Rpb24gY29tcGxldGVzLCBmYWlscyBvciB0aW1lZAorICAgICAgICAgICBvdXQgKGl0J3MgdGhlIGNhc2UgaW4gYXN5bmNpbyBmb3IgZXhhbXBsZSkuICovCisgICAgICAgIHdhaXRfY29ubmVjdCA9IChzLT5zb2NrX3RpbWVvdXQgIT0gMCAmJiBJU19TRUxFQ1RBQkxFKHMpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdhaXRfY29ubmVjdCA9IChzLT5zb2NrX3RpbWVvdXQgPiAwICYmIGVyciA9PSBTT0NLX0lOUFJPR1JFU1NfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBJU19TRUxFQ1RBQkxFKHMpKTsKICAgICB9CiAKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmVzID0gZXJybm87CisgICAgaWYgKCF3YWl0X2Nvbm5lY3QpIHsKKyAgICAgICAgaWYgKHJhaXNlKSB7CisgICAgICAgICAgICAvKiByZXN0b3JlIGVycm9yLCBtYXliZSByZXBsYWNlZCBieSBQeUVycl9DaGVja1NpZ25hbHMoKSAqLworICAgICAgICAgICAgU0VUX1NPQ0tfRVJST1IoZXJyKTsKKyAgICAgICAgICAgIHMtPmVycm9yaGFuZGxlcigpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQogCi0jZW5kaWYKLSAgICAqdGltZW91dHAgPSB0aW1lb3V0OwotCi0gICAgcmV0dXJuIHJlczsKKyAgICBpZiAocmFpc2UpIHsKKyAgICAgICAgLyogc29ja2V0LmNvbm5lY3QoKSByYWlzZXMgYW4gZXhjZXB0aW9uIG9uIGVycm9yICovCisgICAgICAgIGlmIChzb2NrX2NhbGxfZXgocywgMSwgc29ja19jb25uZWN0X2ltcGwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgMSwgTlVMTCwgcy0+c29ja190aW1lb3V0KSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBzb2NrZXQuY29ubmVjdF9leCgpIHJldHVybnMgdGhlIGVycm9yIGNvZGUgb24gZXJyb3IgKi8KKyAgICAgICAgaWYgKHNvY2tfY2FsbF9leChzLCAxLCBzb2NrX2Nvbm5lY3RfaW1wbCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmZXJyLCBzLT5zb2NrX3RpbWVvdXQpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCiAvKiBzLmNvbm5lY3Qoc29ja2FkZHIpIG1ldGhvZCAqLwpAQCAtMjM5OCwyMyArMjY5NCwxNSBAQAogICAgIHNvY2tfYWRkcl90IGFkZHJidWY7CiAgICAgaW50IGFkZHJsZW47CiAgICAgaW50IHJlczsKLSAgICBpbnQgdGltZW91dDsKIAogICAgIGlmICghZ2V0c29ja2FkZHJhcmcocywgYWRkcm8sIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gaW50ZXJuYWxfY29ubmVjdChzLCBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuLCAmdGltZW91dCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmICh0aW1lb3V0ID09IDEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF90aW1lb3V0LCAidGltZWQgb3V0Iik7CisgICAgcmVzID0gaW50ZXJuYWxfY29ubmVjdChzLCBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuLCAxKTsKKyAgICBpZiAocmVzIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIHMtPmVycm9yaGFuZGxlcigpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBQeURvY19TVFJWQVIoY29ubmVjdF9kb2MsCkBAIC0yNDMyLDIxICsyNzIwLDEzIEBACiAgICAgc29ja19hZGRyX3QgYWRkcmJ1ZjsKICAgICBpbnQgYWRkcmxlbjsKICAgICBpbnQgcmVzOwotICAgIGludCB0aW1lb3V0OwogCiAgICAgaWYgKCFnZXRzb2NrYWRkcmFyZyhzLCBhZGRybywgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBpbnRlcm5hbF9jb25uZWN0KHMsIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4sICZ0aW1lb3V0KTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgLyogU2lnbmFscyBhcmUgbm90IGVycm9ycyAodGhvdWdoIHRoZXkgbWF5IHJhaXNlIGV4Y2VwdGlvbnMpLiAgQWRhcHRlZAotICAgICAgIGZyb20gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KCkuICovCi0jaWZkZWYgRUlOVFIKLSAgICBpZiAocmVzID09IEVJTlRSICYmIFB5RXJyX0NoZWNrU2lnbmFscygpKQorICAgIHJlcyA9IGludGVybmFsX2Nvbm5lY3QocywgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbiwgMCk7CisgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCiAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKSByZXMpOwogfQpAQCAtMjUzNCwxNCArMjgxNCwxNiBAQAogLyogcy5saXN0ZW4obikgbWV0aG9kICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zb2NrX2xpc3RlbihQeVNvY2tldFNvY2tPYmplY3QgKnMsIFB5T2JqZWN0ICphcmcpCitzb2NrX2xpc3RlbihQeVNvY2tldFNvY2tPYmplY3QgKnMsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBiYWNrbG9nOworICAgIC8qIFdlIHRyeSB0byBjaG9vc2UgYSBkZWZhdWx0IGJhY2tsb2cgaGlnaCBlbm91Z2ggdG8gYXZvaWQgY29ubmVjdGlvbiBkcm9wcworICAgICAqIGZvciBjb21tb24gd29ya2xvYWRzLCB5ZXQgbm90IHRvbyBoaWdoIHRvIGxpbWl0IHJlc291cmNlIHVzYWdlLiAqLworICAgIGludCBiYWNrbG9nID0gUHlfTUlOKFNPTUFYQ09OTiwgMTI4KTsKICAgICBpbnQgcmVzOwogCi0gICAgYmFja2xvZyA9IF9QeUxvbmdfQXNJbnQoYXJnKTsKLSAgICBpZiAoYmFja2xvZyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6bGlzdGVuIiwgJmJhY2tsb2cpKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAvKiBUbyBhdm9pZCBwcm9ibGVtcyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgYWxsb3cgYSBuZWdhdGl2ZSBiYWNrbG9nCiAgICAgICogKHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBhbnl3YXkpIHdlIGZvcmNlIGEgbWluaW11bSB2YWx1ZSBvZiAwLiAqLwpAQCAtMjU1NiwxMiArMjgzOCwzNCBAQAogfQogCiBQeURvY19TVFJWQVIobGlzdGVuX2RvYywKLSJsaXN0ZW4oYmFja2xvZylcblwKKyJsaXN0ZW4oW2JhY2tsb2ddKVxuXAogXG5cCi1FbmFibGUgYSBzZXJ2ZXIgdG8gYWNjZXB0IGNvbm5lY3Rpb25zLiAgVGhlIGJhY2tsb2cgYXJndW1lbnQgbXVzdCBiZSBhdFxuXAotbGVhc3QgMCAoaWYgaXQgaXMgbG93ZXIsIGl0IGlzIHNldCB0byAwKTsgaXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2ZcblwKK0VuYWJsZSBhIHNlcnZlciB0byBhY2NlcHQgY29ubmVjdGlvbnMuICBJZiBiYWNrbG9nIGlzIHNwZWNpZmllZCwgaXQgbXVzdCBiZVxuXAorYXQgbGVhc3QgMCAoaWYgaXQgaXMgbG93ZXIsIGl0IGlzIHNldCB0byAwKTsgaXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2ZcblwKIHVuYWNjZXB0ZWQgY29ubmVjdGlvbnMgdGhhdCB0aGUgc3lzdGVtIHdpbGwgYWxsb3cgYmVmb3JlIHJlZnVzaW5nIG5ld1xuXAotY29ubmVjdGlvbnMuIik7Citjb25uZWN0aW9ucy4gSWYgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHJlYXNvbmFibGUgdmFsdWUgaXMgY2hvc2VuLiIpOworCitzdHJ1Y3Qgc29ja19yZWN2IHsKKyAgICBjaGFyICpjYnVmOworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCBmbGFnczsKKyAgICBQeV9zc2l6ZV90IHJlc3VsdDsKK307CisKK3N0YXRpYyBpbnQKK3NvY2tfcmVjdl9pbXBsKFB5U29ja2V0U29ja09iamVjdCAqcywgdm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3Qgc29ja19yZWN2ICpjdHggPSBkYXRhOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChjdHgtPmxlbiA+IElOVF9NQVgpCisgICAgICAgIGN0eC0+bGVuID0gSU5UX01BWDsKKyAgICBjdHgtPnJlc3VsdCA9IHJlY3Yocy0+c29ja19mZCwgY3R4LT5jYnVmLCAoaW50KWN0eC0+bGVuLCBjdHgtPmZsYWdzKTsKKyNlbHNlCisgICAgY3R4LT5yZXN1bHQgPSByZWN2KHMtPnNvY2tfZmQsIGN0eC0+Y2J1ZiwgY3R4LT5sZW4sIGN0eC0+ZmxhZ3MpOworI2VuZGlmCisgICAgcmV0dXJuIChjdHgtPnJlc3VsdCA+PSAwKTsKK30KIAogCiAvKgpAQCAtMjU3Niw4ICsyODgwLDcgQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBzb2NrX3JlY3ZfZ3V0cyhQeVNvY2tldFNvY2tPYmplY3QgKnMsIGNoYXIqIGNidWYsIFB5X3NzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCiB7Ci0gICAgUHlfc3NpemVfdCBvdXRsZW4gPSAtMTsKLSAgICBpbnQgdGltZW91dDsKKyAgICBzdHJ1Y3Qgc29ja19yZWN2IGN0eDsKIAogICAgIGlmICghSVNfU0VMRUNUQUJMRShzKSkgewogICAgICAgICBzZWxlY3RfZXJyb3IoKTsKQEAgLTI1ODgsMzIgKzI4OTEsMTMgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQkVHSU5fU0VMRUNUX0xPT1AocykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KSB7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKLSAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7Ci0gICAgICAgIG91dGxlbiA9IHJlY3Yocy0+c29ja19mZCwgY2J1ZiwgKGludClsZW4sIGZsYWdzKTsKLSNlbHNlCi0gICAgICAgIG91dGxlbiA9IHJlY3Yocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncyk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBjdHguY2J1ZiA9IGNidWY7CisgICAgY3R4LmxlbiA9IGxlbjsKKyAgICBjdHguZmxhZ3MgPSBmbGFnczsKKyAgICBpZiAoc29ja19jYWxsKHMsIDAsIHNvY2tfcmVjdl9pbXBsLCAmY3R4KSA8IDApCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICh0aW1lb3V0ID09IDEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF90aW1lb3V0LCAidGltZWQgb3V0Iik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgRU5EX1NFTEVDVF9MT09QKHMpCi0gICAgaWYgKG91dGxlbiA8IDApIHsKLSAgICAgICAgLyogTm90ZTogdGhlIGNhbGwgdG8gZXJyb3JoYW5kbGVyKCkgQUxXQVlTIGluZGlyZWN0bHkgcmV0dXJuZWQKLSAgICAgICAgICAgTlVMTCwgc28gaWdub3JlIGl0cyByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgcy0+ZXJyb3JoYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIG91dGxlbjsKKyAgICByZXR1cm4gY3R4LnJlc3VsdDsKIH0KIAogCkBAIC0yNzI3LDYgKzMwMTEsMzQgQEAKIFxuXAogU2VlIHJlY3YoKSBmb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgZmxhZ3MuIik7CiAKK3N0cnVjdCBzb2NrX3JlY3Zmcm9tIHsKKyAgICBjaGFyKiBjYnVmOworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCBmbGFnczsKKyAgICBzb2NrbGVuX3QgKmFkZHJsZW47CisgICAgc29ja19hZGRyX3QgKmFkZHJidWY7CisgICAgUHlfc3NpemVfdCByZXN1bHQ7Cit9OworCitzdGF0aWMgaW50Citzb2NrX3JlY3Zmcm9tX2ltcGwoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCBzb2NrX3JlY3Zmcm9tICpjdHggPSBkYXRhOworCisgICAgbWVtc2V0KGN0eC0+YWRkcmJ1ZiwgMCwgKmN0eC0+YWRkcmxlbik7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKGN0eC0+bGVuID4gSU5UX01BWCkKKyAgICAgICAgY3R4LT5sZW4gPSBJTlRfTUFYOworICAgIGN0eC0+cmVzdWx0ID0gcmVjdmZyb20ocy0+c29ja19mZCwgY3R4LT5jYnVmLCAoaW50KWN0eC0+bGVuLCBjdHgtPmZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FTMlNBKGN0eC0+YWRkcmJ1ZiksIGN0eC0+YWRkcmxlbik7CisjZWxzZQorICAgIGN0eC0+cmVzdWx0ID0gcmVjdmZyb20ocy0+c29ja19mZCwgY3R4LT5jYnVmLCBjdHgtPmxlbiwgY3R4LT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBUzJTQShjdHgtPmFkZHJidWYpLCBjdHgtPmFkZHJsZW4pOworI2VuZGlmCisgICAgcmV0dXJuIChjdHgtPnJlc3VsdCA+PSAwKTsKK30KKwogCiAvKgogICogVGhpcyBpcyB0aGUgZ3V0cyBvZiB0aGUgcmVjdmZyb20oKSBhbmQgcmVjdmZyb21faW50bygpIG1ldGhvZHMsIHdoaWNoIHJlYWRzCkBAIC0yNzQ0LDkgKzMwNTYsOCBAQAogICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiogYWRkcikKIHsKICAgICBzb2NrX2FkZHJfdCBhZGRyYnVmOwotICAgIGludCB0aW1lb3V0OwotICAgIFB5X3NzaXplX3QgbiA9IC0xOwogICAgIHNvY2tsZW5fdCBhZGRybGVuOworICAgIHN0cnVjdCBzb2NrX3JlY3Zmcm9tIGN0eDsKIAogICAgICphZGRyID0gTlVMTDsKIApAQCAtMjc1OCwzOCArMzA2OSwyMCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgQkVHSU5fU0VMRUNUX0xPT1AocykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgbWVtc2V0KCZhZGRyYnVmLCAwLCBhZGRybGVuKTsKLSAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKLSAgICBpZiAoIXRpbWVvdXQpIHsKLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQotICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKLSAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIChpbnQpbGVuLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICZhZGRyYnVmLCAmYWRkcmxlbik7Ci0jZWxzZQotICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKLSNlbmRpZgotICAgIH0KLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHRpbWVvdXQgPT0gMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBFTkRfU0VMRUNUX0xPT1AocykKLSAgICBpZiAobiA8IDApIHsKLSAgICAgICAgcy0+ZXJyb3JoYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoISgqYWRkciA9IG1ha2Vzb2NrYWRkcihzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJsZW4sIHMtPnNvY2tfcHJvdG8pKSkKKyAgICBjdHguY2J1ZiA9IGNidWY7CisgICAgY3R4LmxlbiA9IGxlbjsKKyAgICBjdHguZmxhZ3MgPSBmbGFnczsKKyAgICBjdHguYWRkcmJ1ZiA9ICZhZGRyYnVmOworICAgIGN0eC5hZGRybGVuID0gJmFkZHJsZW47CisgICAgaWYgKHNvY2tfY2FsbChzLCAwLCBzb2NrX3JlY3Zmcm9tX2ltcGwsICZjdHgpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmV0dXJuIG47CisgICAgKmFkZHIgPSBtYWtlc29ja2FkZHIocy0+c29ja19mZCwgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zb2NrX3Byb3RvKTsKKyAgICBpZiAoKmFkZHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIGN0eC5yZXN1bHQ7CiB9CiAKIC8qIHMucmVjdmZyb20obmJ5dGVzIFssZmxhZ3NdKSBtZXRob2QgKi8KQEAgLTI5MDAsMTAgKzMxOTMsMjQgQEAKIFxuXAogTGlrZSByZWN2X2ludG8oYnVmZmVyWywgbmJ5dGVzWywgZmxhZ3NdXSkgYnV0IGFsc28gcmV0dXJuIHRoZSBzZW5kZXIncyBhZGRyZXNzIGluZm8uIik7CiAKLQogLyogVGhlIHNlbmRtc2coKSBhbmQgcmVjdm1zZ1tfaW50b10oKSBtZXRob2RzIHJlcXVpcmUgYSB3b3JraW5nCiAgICBDTVNHX0xFTigpLiAgU2VlIHRoZSBjb21tZW50IG5lYXIgZ2V0X0NNU0dfTEVOKCkuICovCiAjaWZkZWYgQ01TR19MRU4KK3N0cnVjdCBzb2NrX3JlY3Ztc2cgeworICAgIHN0cnVjdCBtc2doZHIgKm1zZzsKKyAgICBpbnQgZmxhZ3M7CisgICAgc3NpemVfdCByZXN1bHQ7Cit9OworCitzdGF0aWMgaW50Citzb2NrX3JlY3Ztc2dfaW1wbChQeVNvY2tldFNvY2tPYmplY3QgKnMsIHZvaWQgKmRhdGEpCit7CisgICAgc3RydWN0IHNvY2tfcmVjdm1zZyAqY3R4ID0gZGF0YTsKKworICAgIGN0eC0+cmVzdWx0ID0gcmVjdm1zZyhzLT5zb2NrX2ZkLCBjdHgtPm1zZywgY3R4LT5mbGFncyk7CisgICAgcmV0dXJuICAoY3R4LT5yZXN1bHQgPj0gMCk7Cit9CisKIC8qCiAgKiBDYWxsIHJlY3Ztc2coKSB3aXRoIHRoZSBzdXBwbGllZCBpb3ZlYyBzdHJ1Y3R1cmVzLCBmbGFncywgYW5kCiAgKiBhbmNpbGxhcnkgZGF0YSBidWZmZXIgc2l6ZSAoY29udHJvbGxlbikuICBSZXR1cm5zIHRoZSB0dXBsZSByZXR1cm4KQEAgLTI5MTksOCArMzIyNiw2IEBACiAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIFB5X3NzaXplX3QgY29udHJvbGxlbiwKICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICooKm1ha2V2YWwpKHNzaXplX3QsIHZvaWQgKiksIHZvaWQgKm1ha2V2YWxfZGF0YSkKIHsKLSAgICBzc2l6ZV90IGJ5dGVzX3JlY2VpdmVkID0gLTE7Ci0gICAgaW50IHRpbWVvdXQ7CiAgICAgc29ja19hZGRyX3QgYWRkcmJ1ZjsKICAgICBzb2NrbGVuX3QgYWRkcmJ1ZmxlbjsKICAgICBzdHJ1Y3QgbXNnaGRyIG1zZyA9IHswfTsKQEAgLTI5MjksNiArMzIzNCw3IEBACiAgICAgc3RydWN0IGNtc2doZHIgKmNtc2doOwogICAgIHNpemVfdCBjbXNnZGF0YWxlbiA9IDA7CiAgICAgaW50IGNtc2dfc3RhdHVzOworICAgIHN0cnVjdCBzb2NrX3JlY3Ztc2cgY3R4OwogCiAgICAgLyogWFhYOiBQT1NJWCBzYXlzIHRoYXQgbXNnX25hbWUgYW5kIG1zZ19uYW1lbGVuICJzaGFsbCBiZQogICAgICAgIGlnbm9yZWQiIHdoZW4gdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQgKExpbnV4IGZpbGxzIHRoZW0gaW4KQEAgLTI5NTUsMjggKzMyNjEsMTcgQEAKICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIH0KIAotICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUzsKICAgICBtc2cubXNnX25hbWUgPSBTQVMyU0EoJmFkZHJidWYpOwogICAgIG1zZy5tc2dfbmFtZWxlbiA9IGFkZHJidWZsZW47CiAgICAgbXNnLm1zZ19pb3YgPSBpb3Y7CiAgICAgbXNnLm1zZ19pb3ZsZW4gPSBpb3ZsZW47CiAgICAgbXNnLm1zZ19jb250cm9sID0gY29udHJvbGJ1ZjsKICAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBjb250cm9sbGVuOwotICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKLSAgICAgICAgYnl0ZXNfcmVjZWl2ZWQgPSByZWN2bXNnKHMtPnNvY2tfZmQsICZtc2csIGZsYWdzKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUzsKLSAgICBpZiAodGltZW91dCA9PSAxKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhzb2NrZXRfdGltZW91dCwgInRpbWVkIG91dCIpOwotICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgfQotICAgIEVORF9TRUxFQ1RfTE9PUChzKQogCi0gICAgaWYgKGJ5dGVzX3JlY2VpdmVkIDwgMCkgewotICAgICAgICBzLT5lcnJvcmhhbmRsZXIoKTsKKyAgICBjdHgubXNnID0gJm1zZzsKKyAgICBjdHguZmxhZ3MgPSBmbGFnczsKKyAgICBpZiAoc29ja19jYWxsKHMsIDAsIHNvY2tfcmVjdm1zZ19pbXBsLCAmY3R4KSA8IDApCiAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICB9CiAKICAgICAvKiBNYWtlIGxpc3Qgb2YgKGxldmVsLCB0eXBlLCBkYXRhKSB0dXBsZXMgZnJvbSBjb250cm9sIG1lc3NhZ2VzLiAqLwogICAgIGlmICgoY21zZ19saXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkKQEAgLTMwMTgsNyArMzMxMyw3IEBACiAgICAgfQogCiAgICAgcmV0dmFsID0gUHlfQnVpbGRWYWx1ZSgiTk9pTiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoKm1ha2V2YWwpKGJ5dGVzX3JlY2VpdmVkLCBtYWtldmFsX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCptYWtldmFsKShjdHgucmVzdWx0LCBtYWtldmFsX2RhdGEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zZ19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCltc2cubXNnX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXNvY2thZGRyKHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksCkBAIC0zMjI2LDE1ICszNTIxLDM2IEBACiAjZW5kaWYgICAgLyogQ01TR19MRU4gKi8KIAogCitzdHJ1Y3Qgc29ja19zZW5kIHsKKyAgICBjaGFyICpidWY7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaW50IGZsYWdzOworICAgIFB5X3NzaXplX3QgcmVzdWx0OworfTsKKworc3RhdGljIGludAorc29ja19zZW5kX2ltcGwoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCBzb2NrX3NlbmQgKmN0eCA9IGRhdGE7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKGN0eC0+bGVuID4gSU5UX01BWCkKKyAgICAgICAgY3R4LT5sZW4gPSBJTlRfTUFYOworICAgIGN0eC0+cmVzdWx0ID0gc2VuZChzLT5zb2NrX2ZkLCBjdHgtPmJ1ZiwgKGludCljdHgtPmxlbiwgY3R4LT5mbGFncyk7CisjZWxzZQorICAgIGN0eC0+cmVzdWx0ID0gc2VuZChzLT5zb2NrX2ZkLCBjdHgtPmJ1ZiwgY3R4LT5sZW4sIGN0eC0+ZmxhZ3MpOworI2VuZGlmCisgICAgcmV0dXJuIChjdHgtPnJlc3VsdCA+PSAwKTsKK30KKwogLyogcy5zZW5kKGRhdGEgWyxmbGFnc10pIG1ldGhvZCAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgogc29ja19zZW5kKFB5U29ja2V0U29ja09iamVjdCAqcywgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgY2hhciAqYnVmOwotICAgIFB5X3NzaXplX3QgbGVuLCBuID0gLTE7Ci0gICAgaW50IGZsYWdzID0gMCwgdGltZW91dDsKKyAgICBpbnQgZmxhZ3MgPSAwOwogICAgIFB5X2J1ZmZlciBwYnVmOworICAgIHN0cnVjdCBzb2NrX3NlbmQgY3R4OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOnNlbmQiLCAmcGJ1ZiwgJmZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMjQzLDMzICszNTU5LDE2IEBACiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgICAgICByZXR1cm4gc2VsZWN0X2Vycm9yKCk7CiAgICAgfQotICAgIGJ1ZiA9IHBidWYuYnVmOwotICAgIGxlbiA9IHBidWYubGVuOwotCi0gICAgQkVHSU5fU0VMRUNUX0xPT1AocykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAxLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KSB7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKLSAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7Ci0gICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgKGludClsZW4sIGZsYWdzKTsKLSNlbHNlCi0gICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAodGltZW91dCA9PSAxKSB7CisgICAgY3R4LmJ1ZiA9IHBidWYuYnVmOworICAgIGN0eC5sZW4gPSBwYnVmLmxlbjsKKyAgICBjdHguZmxhZ3MgPSBmbGFnczsKKyAgICBpZiAoc29ja19jYWxsKHMsIDEsIHNvY2tfc2VuZF9pbXBsLCAmY3R4KSA8IDApIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhzb2NrZXRfdGltZW91dCwgInRpbWVkIG91dCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgRU5EX1NFTEVDVF9MT09QKHMpCi0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICBpZiAobiA8IDApCi0gICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOworCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChjdHgucmVzdWx0KTsKIH0KIAogUHlEb2NfU1RSVkFSKHNlbmRfZG9jLApAQCAtMzI4Niw5ICszNTg1LDE1IEBACiBzb2NrX3NlbmRhbGwoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpidWY7Ci0gICAgUHlfc3NpemVfdCBsZW4sIG4gPSAtMTsKLSAgICBpbnQgZmxhZ3MgPSAwLCB0aW1lb3V0LCBzYXZlZF9lcnJubzsKKyAgICBQeV9zc2l6ZV90IGxlbiwgbjsKKyAgICBpbnQgZmxhZ3MgPSAwOwogICAgIFB5X2J1ZmZlciBwYnVmOworICAgIHN0cnVjdCBzb2NrX3NlbmQgY3R4OworICAgIGludCBoYXNfdGltZW91dCA9IChzLT5zb2NrX3RpbWVvdXQgPiAwKTsKKyAgICBfUHlUaW1lX3QgaW50ZXJ2YWwgPSBzLT5zb2NrX3RpbWVvdXQ7CisgICAgX1B5VGltZV90IGRlYWRsaW5lID0gMDsKKyAgICBpbnQgZGVhZGxpbmVfaW5pdGlhbGl6ZWQgPSAwOworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOnNlbmRhbGwiLCAmcGJ1ZiwgJmZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMzAxLDUwICszNjA2LDQ3IEBACiAgICAgfQogCiAgICAgZG8gewotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3QocywgMSk7Ci0gICAgICAgIG4gPSAtMTsKLSAgICAgICAgaWYgKCF0aW1lb3V0KSB7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCi0gICAgICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKLSAgICAgICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgKGludClsZW4sIGZsYWdzKTsKLSNlbHNlCi0gICAgICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwotI2VuZGlmCisgICAgICAgIGlmIChoYXNfdGltZW91dCkgeworICAgICAgICAgICAgaWYgKGRlYWRsaW5lX2luaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgLyogcmVjb21wdXRlIHRoZSB0aW1lb3V0ICovCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSBkZWFkbGluZSAtIF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRlYWRsaW5lX2luaXRpYWxpemVkID0gMTsKKyAgICAgICAgICAgICAgICBkZWFkbGluZSA9IF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKSArIHMtPnNvY2tfdGltZW91dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGludGVydmFsIDw9IDApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIC8qIFB5RXJyX0NoZWNrU2lnbmFscygpIG1pZ2h0IGNoYW5nZSBlcnJubyAqLwotICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworCisgICAgICAgIGN0eC5idWYgPSBidWY7CisgICAgICAgIGN0eC5sZW4gPSBsZW47CisgICAgICAgIGN0eC5mbGFncyA9IGZsYWdzOworICAgICAgICBpZiAoc29ja19jYWxsX2V4KHMsIDEsIHNvY2tfc2VuZF9pbXBsLCAmY3R4LCAwLCBOVUxMLCBpbnRlcnZhbCkgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBuID0gY3R4LnJlc3VsdDsKKyAgICAgICAgYXNzZXJ0KG4gPj0gMCk7CisKKyAgICAgICAgYnVmICs9IG47CisgICAgICAgIGxlbiAtPSBuOworCiAgICAgICAgIC8qIFdlIG11c3QgcnVuIG91ciBzaWduYWwgaGFuZGxlcnMgYmVmb3JlIGxvb3BpbmcgYWdhaW4uCiAgICAgICAgICAgIHNlbmQoKSBjYW4gcmV0dXJuIGEgc3VjY2Vzc2Z1bCBwYXJ0aWFsIHdyaXRlIHdoZW4gaXQgaXMKICAgICAgICAgICAgaW50ZXJydXB0ZWQsIHNvIHdlIGNhbid0IHJlc3RyaWN0IG91cnNlbHZlcyB0byBFSU5UUi4gKi8KLSAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSB7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAgICAgLyogSWYgaW50ZXJydXB0ZWQsIHRyeSBhZ2FpbiAqLwotICAgICAgICAgICAgaWYgKHNhdmVkX2Vycm5vID09IEVJTlRSKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJ1ZiArPSBuOwotICAgICAgICBsZW4gLT0gbjsKKyAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKQorICAgICAgICAgICAgZ290byBkb25lOwogICAgIH0gd2hpbGUgKGxlbiA+IDApOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogCi0gICAgaWYgKG4gPCAwKQotICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7Ci0KICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgcmVzID0gUHlfTm9uZTsKKworZG9uZToKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBQeURvY19TVFJWQVIoc2VuZGFsbF9kb2MsCkBAIC0zMzU2LDYgKzM2NTgsMzIgQEAKIHRvIHRlbGwgaG93IG11Y2ggZGF0YSBoYXMgYmVlbiBzZW50LiIpOwogCiAKK3N0cnVjdCBzb2NrX3NlbmR0byB7CisgICAgY2hhciAqYnVmOworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGludCBmbGFnczsKKyAgICBpbnQgYWRkcmxlbjsKKyAgICBzb2NrX2FkZHJfdCAqYWRkcmJ1ZjsKKyAgICBQeV9zc2l6ZV90IHJlc3VsdDsKK307CisKK3N0YXRpYyBpbnQKK3NvY2tfc2VuZHRvX2ltcGwoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCBzb2NrX3NlbmR0byAqY3R4ID0gZGF0YTsKKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoY3R4LT5sZW4gPiBJTlRfTUFYKQorICAgICAgICBjdHgtPmxlbiA9IElOVF9NQVg7CisgICAgY3R4LT5yZXN1bHQgPSBzZW5kdG8ocy0+c29ja19mZCwgY3R4LT5idWYsIChpbnQpY3R4LT5sZW4sIGN0eC0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgU0FTMlNBKGN0eC0+YWRkcmJ1ZiksIGN0eC0+YWRkcmxlbik7CisjZWxzZQorICAgIGN0eC0+cmVzdWx0ID0gc2VuZHRvKHMtPnNvY2tfZmQsIGN0eC0+YnVmLCBjdHgtPmxlbiwgY3R4LT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTQVMyU0EoY3R4LT5hZGRyYnVmKSwgY3R4LT5hZGRybGVuKTsKKyNlbmRpZgorICAgIHJldHVybiAoY3R4LT5yZXN1bHQgPj0gMCk7Cit9CisKIC8qIHMuc2VuZHRvKGRhdGEsIFtmbGFncyxdIHNvY2thZGRyKSBtZXRob2QgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTMzNjMsMTEgKzM2OTEsMTAgQEAKIHsKICAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICBQeU9iamVjdCAqYWRkcm87Ci0gICAgY2hhciAqYnVmOwotICAgIFB5X3NzaXplX3QgbGVuLCBhcmdsZW47CisgICAgUHlfc3NpemVfdCBhcmdsZW47CiAgICAgc29ja19hZGRyX3QgYWRkcmJ1ZjsKLSAgICBpbnQgYWRkcmxlbiwgZmxhZ3MsIHRpbWVvdXQ7Ci0gICAgUHlfc3NpemVfdCBuID0gLTE7CisgICAgaW50IGFkZHJsZW4sIGZsYWdzOworICAgIHN0cnVjdCBzb2NrX3NlbmR0byBjdHg7CiAKICAgICBmbGFncyA9IDA7CiAgICAgYXJnbGVuID0gUHlUdXBsZV9TaXplKGFyZ3MpOwpAQCAtMzM4OCw5ICszNzE1LDYgQEAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBidWYgPSBwYnVmLmJ1ZjsKLSAgICBsZW4gPSBwYnVmLmxlbjsKLQogICAgIGlmICghSVNfU0VMRUNUQUJMRShzKSkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICAgICAgcmV0dXJuIHNlbGVjdF9lcnJvcigpOwpAQCAtMzQwMSwzMiArMzcyNSwxOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDEsIGludGVydmFsKTsKLSAgICBpZiAoIXRpbWVvdXQpIHsKLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQotICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKLSAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuKTsKLSNlbHNlCi0gICAgICAgIG4gPSBzZW5kdG8ocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzLAotICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOwotI2VuZGlmCi0gICAgfQotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAodGltZW91dCA9PSAxKSB7CisgICAgY3R4LmJ1ZiA9IHBidWYuYnVmOworICAgIGN0eC5sZW4gPSBwYnVmLmxlbjsKKyAgICBjdHguZmxhZ3MgPSBmbGFnczsKKyAgICBjdHguYWRkcmxlbiA9IGFkZHJsZW47CisgICAgY3R4LmFkZHJidWYgPSAmYWRkcmJ1ZjsKKyAgICBpZiAoc29ja19jYWxsKHMsIDEsIHNvY2tfc2VuZHRvX2ltcGwsICZjdHgpIDwgMCkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF90aW1lb3V0LCAidGltZWQgb3V0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBFTkRfU0VMRUNUX0xPT1AocykKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICBpZiAobiA8IDApCi0gICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOworCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChjdHgucmVzdWx0KTsKIH0KIAogUHlEb2NfU1RSVkFSKHNlbmR0b19kb2MsCkBAIC0zNDM5LDYgKzM3NDksMjEgQEAKIC8qIFRoZSBzZW5kbXNnKCkgYW5kIHJlY3Ztc2dbX2ludG9dKCkgbWV0aG9kcyByZXF1aXJlIGEgd29ya2luZwogICAgQ01TR19MRU4oKS4gIFNlZSB0aGUgY29tbWVudCBuZWFyIGdldF9DTVNHX0xFTigpLiAqLwogI2lmZGVmIENNU0dfTEVOCitzdHJ1Y3Qgc29ja19zZW5kbXNnIHsKKyAgICBzdHJ1Y3QgbXNnaGRyICptc2c7CisgICAgaW50IGZsYWdzOworICAgIHNzaXplX3QgcmVzdWx0OworfTsKKworc3RhdGljIGludAorc29ja19zZW5kbXNnX2ltcGwoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCBzb2NrX3NlbmRtc2cgKmN0eCA9IGRhdGE7CisKKyAgICBjdHgtPnJlc3VsdCA9IHNlbmRtc2cocy0+c29ja19mZCwgY3R4LT5tc2csIGN0eC0+ZmxhZ3MpOworICAgIHJldHVybiAoY3R4LT5yZXN1bHQgPj0gMCk7Cit9CisKIC8qIHMuc2VuZG1zZyhidWZmZXJzWywgYW5jZGF0YVssIGZsYWdzWywgYWRkcmVzc11dXSkgbWV0aG9kICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNDU2LDEwICszNzgxLDEwIEBACiAgICAgfSAqY21zZ3MgPSBOVUxMOwogICAgIHZvaWQgKmNvbnRyb2xidWYgPSBOVUxMOwogICAgIHNpemVfdCBjb250cm9sbGVuLCBjb250cm9sbGVuX2xhc3Q7Ci0gICAgc3NpemVfdCBieXRlc19zZW50ID0gLTE7Ci0gICAgaW50IGFkZHJsZW4sIHRpbWVvdXQsIGZsYWdzID0gMDsKKyAgICBpbnQgYWRkcmxlbiwgZmxhZ3MgPSAwOwogICAgIFB5T2JqZWN0ICpkYXRhX2FyZywgKmNtc2dfYXJnID0gTlVMTCwgKmFkZHJfYXJnID0gTlVMTCwgKmRhdGFfZmFzdCA9IE5VTEwsCiAgICAgICAgICpjbXNnX2Zhc3QgPSBOVUxMLCAqcmV0dmFsID0gTlVMTDsKKyAgICBzdHJ1Y3Qgc29ja19zZW5kbXNnIGN0eDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPaU86c2VuZG1zZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX2FyZywgJmNtc2dfYXJnLCAmZmxhZ3MsICZhZGRyX2FyZykpCkBAIC0zNjEzLDIzICszOTM4LDEyIEBACiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICB9CiAKLSAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFM7Ci0gICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAxLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQotICAgICAgICBieXRlc19zZW50ID0gc2VuZG1zZyhzLT5zb2NrX2ZkLCAmbXNnLCBmbGFncyk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7Ci0gICAgaWYgKHRpbWVvdXQgPT0gMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKKyAgICBjdHgubXNnID0gJm1zZzsKKyAgICBjdHguZmxhZ3MgPSBmbGFnczsKKyAgICBpZiAoc29ja19jYWxsKHMsIDEsIHNvY2tfc2VuZG1zZ19pbXBsLCAmY3R4KSA8IDApCiAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICB9Ci0gICAgRU5EX1NFTEVDVF9MT09QKHMpCiAKLSAgICBpZiAoYnl0ZXNfc2VudCA8IDApIHsKLSAgICAgICAgcy0+ZXJyb3JoYW5kbGVyKCk7Ci0gICAgICAgIGdvdG8gZmluYWxseTsKLSAgICB9Ci0gICAgcmV0dmFsID0gUHlMb25nX0Zyb21Tc2l6ZV90KGJ5dGVzX3NlbnQpOworICAgIHJldHZhbCA9IFB5TG9uZ19Gcm9tU3NpemVfdChjdHgucmVzdWx0KTsKIAogZmluYWxseToKICAgICBQeU1lbV9GcmVlKGNvbnRyb2xidWYpOwpAQCAtMzc5Niw3ICs0MTEwLDcgQEAKICAgICB7InNoYXJlIiwgICAgICAgICAoUHlDRnVuY3Rpb24pc29ja19zaGFyZSwgTUVUSF9WQVJBUkdTLAogICAgICAgICAgICAgICAgICAgICAgIHNvY2tfc2hhcmVfZG9jfSwKICNlbmRpZgotICAgIHsibGlzdGVuIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pc29ja19saXN0ZW4sIE1FVEhfTywKKyAgICB7Imxpc3RlbiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXNvY2tfbGlzdGVuLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuX2RvY30sCiAgICAgeyJyZWN2IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilzb2NrX3JlY3YsIE1FVEhfVkFSQVJHUywKICAgICAgICAgICAgICAgICAgICAgICByZWN2X2RvY30sCkBAIC0zODM4LDE3ICs0MTUyLDIxIEBACiAgICAgICAgeyJmYW1pbHkiLCBUX0lOVCwgb2Zmc2V0b2YoUHlTb2NrZXRTb2NrT2JqZWN0LCBzb2NrX2ZhbWlseSksIFJFQURPTkxZLCAidGhlIHNvY2tldCBmYW1pbHkifSwKICAgICAgICB7InR5cGUiLCBUX0lOVCwgb2Zmc2V0b2YoUHlTb2NrZXRTb2NrT2JqZWN0LCBzb2NrX3R5cGUpLCBSRUFET05MWSwgInRoZSBzb2NrZXQgdHlwZSJ9LAogICAgICAgIHsicHJvdG8iLCBUX0lOVCwgb2Zmc2V0b2YoUHlTb2NrZXRTb2NrT2JqZWN0LCBzb2NrX3Byb3RvKSwgUkVBRE9OTFksICJ0aGUgc29ja2V0IHByb3RvY29sIn0sCi0gICAgICAgeyJ0aW1lb3V0IiwgVF9ET1VCTEUsIG9mZnNldG9mKFB5U29ja2V0U29ja09iamVjdCwgc29ja190aW1lb3V0KSwgUkVBRE9OTFksICJ0aGUgc29ja2V0IHRpbWVvdXQifSwKICAgICAgICB7MH0sCiB9OwogCitzdGF0aWMgUHlHZXRTZXREZWYgc29ja19nZXRzZXRsaXN0W10gPSB7CisgICAgeyJ0aW1lb3V0IiwgKGdldHRlcilzb2NrX2dldHRpbWVvdXQsIE5VTEwsIFB5RG9jX1NUUigidGhlIHNvY2tldCB0aW1lb3V0Iil9LAorICAgIHtOVUxMfSAvKiBzZW50aW5lbCAqLworfTsKKwogLyogRGVhbGxvY2F0ZSBhIHNvY2tldCBvYmplY3QgaW4gcmVzcG9uc2UgdG8gdGhlIGxhc3QgUHlfREVDUkVGKCkuCiAgICBGaXJzdCBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdGlvbi4gKi8KIAogc3RhdGljIHZvaWQKIHNvY2tfZGVhbGxvYyhQeVNvY2tldFNvY2tPYmplY3QgKnMpCiB7Ci0gICAgaWYgKHMtPnNvY2tfZmQgIT0gLTEpIHsKKyAgICBpZiAocy0+c29ja19mZCAhPSBJTlZBTElEX1NPQ0tFVCkgewogICAgICAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CiAgICAgICAgIFB5X3NzaXplX3Qgb2xkX3JlZmNvdW50ID0gUHlfUkVGQ05UKHMpOwogICAgICAgICArK1B5X1JFRkNOVChzKTsKQEAgLTM5MDQsOCArNDIyMiw4IEBACiAKICAgICBuZXcgPSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKICAgICBpZiAobmV3ICE9IE5VTEwpIHsKLSAgICAgICAgKChQeVNvY2tldFNvY2tPYmplY3QgKiluZXcpLT5zb2NrX2ZkID0gLTE7Ci0gICAgICAgICgoUHlTb2NrZXRTb2NrT2JqZWN0ICopbmV3KS0+c29ja190aW1lb3V0ID0gLTEuMDsKKyAgICAgICAgKChQeVNvY2tldFNvY2tPYmplY3QgKiluZXcpLT5zb2NrX2ZkID0gSU5WQUxJRF9TT0NLRVQ7CisgICAgICAgICgoUHlTb2NrZXRTb2NrT2JqZWN0ICopbmV3KS0+c29ja190aW1lb3V0ID0gX1B5VGltZV9Gcm9tU2Vjb25kcygtMSk7CiAgICAgICAgICgoUHlTb2NrZXRTb2NrT2JqZWN0ICopbmV3KS0+ZXJyb3JoYW5kbGVyID0gJnNldF9lcnJvcjsKICAgICB9CiAgICAgcmV0dXJuIG5ldzsKQEAgLTQwODgsNyArNDQwNiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIHNvY2tfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIHNvY2tfbWVtYmVybGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgc29ja19nZXRzZXRsaXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwpAQCAtNDIyNCwxNiArNDU0MiwzMCBAQAogUmV0dXJuIHRoZSBJUCBhZGRyZXNzIChhIHN0cmluZyBvZiB0aGUgZm9ybSAnMjU1LjI1NS4yNTUuMjU1JykgZm9yIGEgaG9zdC4iKTsKIAogCitzdGF0aWMgUHlPYmplY3QqCitzb2NrX2RlY29kZV9ob3N0bmFtZShjb25zdCBjaGFyICpuYW1lKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAvKiBJc3N1ZSAjMjYyMjc6IGdldGhvc3RieWFkZHIoKSByZXR1cm5zIGEgc3RyaW5nIGVuY29kZWQKKyAgICAgKiB0byB0aGUgQU5TSSBjb2RlIHBhZ2UgKi8KKyAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChuYW1lKTsKKyNlbHNlCisgICAgLyogRGVjb2RlIGZyb20gVVRGLTggKi8KKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcobmFtZSk7CisjZW5kaWYKK30KKwogLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gY29tbW9uIHRvIGdldGhvc3RieW5hbWVfZXggYW5kIGdldGhvc3RieWFkZHIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWdldGhvc3RfY29tbW9uKHN0cnVjdCBob3N0ZW50ICpoLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhbGVuLCBpbnQgYWYpCitnZXRob3N0X2NvbW1vbihzdHJ1Y3QgaG9zdGVudCAqaCwgc3RydWN0IHNvY2thZGRyICphZGRyLCBzaXplX3QgYWxlbiwgaW50IGFmKQogewogICAgIGNoYXIgKipwY2g7CiAgICAgUHlPYmplY3QgKnJ0bl90dXBsZSA9IChQeU9iamVjdCAqKU5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWVfbGlzdCA9IChQeU9iamVjdCAqKU5VTEw7CiAgICAgUHlPYmplY3QgKmFkZHJfbGlzdCA9IChQeU9iamVjdCAqKU5VTEw7CiAgICAgUHlPYmplY3QgKnRtcDsKKyAgICBQeU9iamVjdCAqbmFtZTsKIAogICAgIGlmIChoID09IE5VTEwpIHsKICAgICAgICAgLyogTGV0J3MgZ2V0IHJlYWwgZXJyb3IgbWVzc2FnZSB0byByZXR1cm4gKi8KQEAgLTQzNDIsNyArNDY3NCwxMCBAQAogICAgICAgICAgICAgZ290byBlcnI7CiAgICAgfQogCi0gICAgcnRuX3R1cGxlID0gUHlfQnVpbGRWYWx1ZSgic09PIiwgaC0+aF9uYW1lLCBuYW1lX2xpc3QsIGFkZHJfbGlzdCk7CisgICAgbmFtZSA9IHNvY2tfZGVjb2RlX2hvc3RuYW1lKGgtPmhfbmFtZSk7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnI7CisgICAgcnRuX3R1cGxlID0gUHlfQnVpbGRWYWx1ZSgiTk9PIiwgbmFtZSwgbmFtZV9saXN0LCBhZGRyX2xpc3QpOwogCiAgZXJyOgogICAgIFB5X1hERUNSRUYobmFtZV9saXN0KTsKQEAgLTQ5NDQsMjEgKzUyNzksMjIgQEAKIHN0YXRpYyBQeU9iamVjdCoKIHNvY2tldF9pbmV0X250b2EoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNoYXIgKnBhY2tlZF9zdHI7Ci0gICAgaW50IGFkZHJfbGVuOworICAgIFB5X2J1ZmZlciBwYWNrZWRfaXA7CiAgICAgc3RydWN0IGluX2FkZHIgcGFja2VkX2FkZHI7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkjOmluZXRfbnRvYSIsICZwYWNrZWRfc3RyLCAmYWRkcl9sZW4pKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjppbmV0X250b2EiLCAmcGFja2VkX2lwKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHBhY2tlZF9hZGRyKSkgeworICAgIGlmIChwYWNrZWRfaXAubGVuICE9IHNpemVvZihwYWNrZWRfYWRkcikpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAicGFja2VkIElQIHdyb25nIGxlbmd0aCBmb3IgaW5ldF9udG9hIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhY2tlZF9pcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG1lbWNweSgmcGFja2VkX2FkZHIsIHBhY2tlZF9zdHIsIGFkZHJfbGVuKTsKKyAgICBtZW1jcHkoJnBhY2tlZF9hZGRyLCBwYWNrZWRfaXAuYnVmLCBwYWNrZWRfaXAubGVuKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYWNrZWRfaXApOwogCiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGluZXRfbnRvYShwYWNrZWRfYWRkcikpOwogfQpAQCAtNTA2OSw4ICs1NDA1LDcgQEAKIHNvY2tldF9pbmV0X250b3AoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBhZjsKLSAgICBjaGFyKiBwYWNrZWQ7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9idWZmZXIgcGFja2VkX2lwOwogICAgIGNvbnN0IGNoYXIqIHJldHZhbDsKICNpZmRlZiBFTkFCTEVfSVBWNgogICAgIGNoYXIgaXBbUHlfTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKQEAgLTUwODEsMzEgKzU0MTYsMzUgQEAKICAgICAvKiBHdWFyYW50ZWUgTlVMLXRlcm1pbmF0aW9uIGZvciBQeVVuaWNvZGVfRnJvbVN0cmluZygpIGJlbG93ICovCiAgICAgbWVtc2V0KCh2b2lkICopICZpcFswXSwgJ1wwJywgc2l6ZW9mKGlwKSk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml5IzppbmV0X250b3AiLCAmYWYsICZwYWNrZWQsICZsZW4pKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpeSo6aW5ldF9udG9wIiwgJmFmLCAmcGFja2VkX2lwKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpZiAoYWYgPT0gQUZfSU5FVCkgewotICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKyAgICAgICAgaWYgKHBhY2tlZF9pcC5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgImludmFsaWQgbGVuZ3RoIG9mIHBhY2tlZCBJUCBhZGRyZXNzIHN0cmluZyIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFja2VkX2lwKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAjaWZkZWYgRU5BQkxFX0lQVjYKICAgICB9IGVsc2UgaWYgKGFmID09IEFGX0lORVQ2KSB7Ci0gICAgICAgIGlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKKyAgICAgICAgaWYgKHBhY2tlZF9pcC5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICJpbnZhbGlkIGxlbmd0aCBvZiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmciKTsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhY2tlZF9pcCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogI2VuZGlmCiAgICAgfSBlbHNlIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAidW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCIsIGFmKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFja2VkX2lwKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcmV0dmFsID0gaW5ldF9udG9wKGFmLCBwYWNrZWQsIGlwLCBzaXplb2YoaXApKTsKKyAgICByZXR2YWwgPSBpbmV0X250b3AoYWYsIHBhY2tlZF9pcC5idWYsIGlwLCBzaXplb2YoaXApKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYWNrZWRfaXApOwogICAgIGlmICghcmV0dmFsKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC01MTI0LDggKzU0NjMsNyBAQAogc29ja2V0X2luZXRfbnRvcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgaW50IGFmOwotICAgIGNoYXIqIHBhY2tlZDsKLSAgICBpbnQgbGVuOworICAgIFB5X2J1ZmZlciBwYWNrZWRfaXA7CiAgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOwogICAgIERXT1JEIGFkZHJsZW4sIHJldCwgcmV0bGVuOwogI2lmZGVmIEVOQUJMRV9JUFY2CkBAIC01MTM3LDM4ICs1NDc1LDQyIEBACiAgICAgLyogR3VhcmFudGVlIE5VTC10ZXJtaW5hdGlvbiBmb3IgUHlVbmljb2RlX0Zyb21TdHJpbmcoKSBiZWxvdyAqLwogICAgIG1lbXNldCgodm9pZCAqKSAmaXBbMF0sICdcMCcsIHNpemVvZihpcCkpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpeSM6aW5ldF9udG9wIiwgJmFmLCAmcGFja2VkLCAmbGVuKSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXkqOmluZXRfbnRvcCIsICZhZiwgJnBhY2tlZF9pcCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKGFmID09IEFGX0lORVQpIHsKICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICogYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmFkZHI7CiAKLSAgICAgICAgaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7CisgICAgICAgIGlmIChwYWNrZWRfaXAubGVuICE9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICJpbnZhbGlkIGxlbmd0aCBvZiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmciKTsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhY2tlZF9pcCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBtZW1zZXQoYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKICAgICAgICAgYWRkcjQtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgICAgICBtZW1jcHkoJihhZGRyNC0+c2luX2FkZHIpLCBwYWNrZWQsIHNpemVvZihhZGRyNC0+c2luX2FkZHIpKTsKKyAgICAgICAgbWVtY3B5KCYoYWRkcjQtPnNpbl9hZGRyKSwgcGFja2VkX2lwLmJ1Ziwgc2l6ZW9mKGFkZHI0LT5zaW5fYWRkcikpOwogICAgICAgICBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiAgICAgfSBlbHNlIGlmIChhZiA9PSBBRl9JTkVUNikgewotICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CisgICAgICAgIGlmIChwYWNrZWRfaXAubGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAiaW52YWxpZCBsZW5ndGggb2YgcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nIik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYWNrZWRfaXApOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CiAgICAgICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSAgICAgICAgbWVtY3B5KCYoYWRkci5zaW42X2FkZHIpLCBwYWNrZWQsIHNpemVvZihhZGRyLnNpbjZfYWRkcikpOworICAgICAgICBtZW1jcHkoJihhZGRyLnNpbjZfYWRkciksIHBhY2tlZF9pcC5idWYsIHNpemVvZihhZGRyLnNpbjZfYWRkcikpOwogICAgICAgICBhZGRybGVuID0gc2l6ZW9mKGFkZHIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgInVua25vd24gYWRkcmVzcyBmYW1pbHkgJWQiLCBhZik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhY2tlZF9pcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYWNrZWRfaXApOwogCiAgICAgcmV0bGVuID0gc2l6ZW9mKGlwKTsKICAgICByZXQgPSBXU0FBZGRyZXNzVG9TdHJpbmdBKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCBhZGRybGVuLCBOVUxMLApAQCAtNTMyMSw2ICs1NjYzLDcgQEAKICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXMgPSBOVUxMOwogICAgIGludCBlcnJvcjsKICAgICBQeU9iamVjdCAqcmV0ID0gKFB5T2JqZWN0ICopTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZTsKIAogICAgIGZsYWdzID0gZmxvd2luZm8gPSBzY29wZV9pZCA9IDA7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaTpnZXRuYW1laW5mbyIsICZzYSwgJmZsYWdzKSkKQEAgLTUzODQsNyArNTcyNywxMSBAQAogICAgICAgICBzZXRfZ2FpZXJyb3IoZXJyb3IpOwogICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQotICAgIHJldCA9IFB5X0J1aWxkVmFsdWUoInNzIiwgaGJ1ZiwgcGJ1Zik7CisKKyAgICBuYW1lID0gc29ja19kZWNvZGVfaG9zdG5hbWUoaGJ1Zik7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIHJldCA9IFB5X0J1aWxkVmFsdWUoIk5zIiwgbmFtZSwgcGJ1Zik7CiAKIGZhaWw6CiAgICAgaWYgKHJlcykKQEAgLTU0MDMsMTIgKzU3NTAsMTQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrZXRfZ2V0ZGVmYXVsdHRpbWVvdXQoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgaWYgKGRlZmF1bHR0aW1lb3V0IDwgMC4wKSB7CisgICAgaWYgKGRlZmF1bHR0aW1lb3V0IDwgMCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoZGVmYXVsdHRpbWVvdXQpOworICAgIGVsc2UgeworICAgICAgICBkb3VibGUgc2Vjb25kcyA9IF9QeVRpbWVfQXNTZWNvbmRzRG91YmxlKGRlZmF1bHR0aW1lb3V0KTsKKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShzZWNvbmRzKTsKKyAgICB9CiB9CiAKIFB5RG9jX1NUUlZBUihnZXRkZWZhdWx0dGltZW91dF9kb2MsCkBAIC01NDIxLDE5ICs1NzcwLDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogc29ja2V0X3NldGRlZmF1bHR0aW1lb3V0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewotICAgIGRvdWJsZSB0aW1lb3V0OworICAgIF9QeVRpbWVfdCB0aW1lb3V0OwogCi0gICAgaWYgKGFyZyA9PSBQeV9Ob25lKQotICAgICAgICB0aW1lb3V0ID0gLTEuMDsKLSAgICBlbHNlIHsKLSAgICAgICAgdGltZW91dCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKLSAgICAgICAgaWYgKHRpbWVvdXQgPCAwLjApIHsKLSAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVvdXQgdmFsdWUgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAoc29ja2V0X3BhcnNlX3RpbWVvdXQoJnRpbWVvdXQsIGFyZykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGRlZmF1bHR0aW1lb3V0ID0gdGltZW91dDsKIApAQCAtNTc4MCwxMSArNjEyMCwxNSBAQAogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChzdXBwb3J0X3dzYV9ub19pbmhlcml0ID09IC0xKSB7CisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTgwMAorICAgICAgICBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gSXNXaW5kb3dzN1NQMU9yR3JlYXRlcigpOworI2Vsc2UKICAgICAgICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsKICAgICAgICAgRFdPUkQgbWFqb3IgPSAoRFdPUkQpTE9CWVRFKExPV09SRCh2ZXJzaW9uKSk7CiAgICAgICAgIERXT1JEIG1pbm9yID0gKERXT1JEKUhJQllURShMT1dPUkQodmVyc2lvbikpOwogICAgICAgICAvKiBuZWVkIFdpbmRvd3MgNyBTUDEsIDIwMDggUjIgU1AxIG9yIGxhdGVyICovCi0gICAgICAgIHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPSAobWFqb3IgPj0gNiAmJiBtaW5vciA+PSAxKTsKKyAgICAgICAgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IG1ham9yID4gNiB8fCAobWFqb3IgPT0gNiAmJiBtaW5vciA+PSAxKTsKKyNlbmRpZgogICAgIH0KICNlbmRpZgogCkBAIC02MTgzLDYgKzY1MjcsOSBAQAogI2lmZGVmICBTT19QUklPUklUWQogICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1BSSU9SSVRZKTsKICNlbmRpZgorI2lmZGVmICBTT19NQVJLCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fTUFSSyk7CisjZW5kaWYKIAogICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciAibGlzdGVuIiAqLwogI2lmZGVmICBTT01BWENPTk4KQEAgLTYzMjAsNiArNjY2Nyw5IEBACiAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19MT09QQkFDSyk7CiAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19SRUNWX09XTl9NU0dTKTsKICNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfQ0FOX1JBV19GRF9GUkFNRVMKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0ZEX0ZSQU1FUyk7CisjZW5kaWYKICNpZmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAogICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9CQ00pOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1NFVFVQIiwgVFhfU0VUVVApOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaCBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKaW5kZXggYjgzZjlhZi4uM2NjZTkyNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAorKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCkBAIC0xNCw2ICsxNCwxMyBAQAogCiAjZWxzZSAvKiBNU19XSU5ET1dTICovCiAjIGluY2x1ZGUgPHdpbnNvY2syLmg+CisvKiBXaW5kb3dzICdzdXBwb3J0cycgQ01TR19MRU4sIGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIFBPU0lYIHN0YW5kYXJkCisgKiBpbnRlcmZhY2UgYXQgYWxsLCBzbyB0aGVyZSBpcyBubyBwb2ludCBpbmNsdWRpbmcgdGhlIGNvZGUgdGhhdAorICogYXR0ZW1wdHMgdG8gdXNlIGl0LgorICovCisjIGlmZGVmIFB5U29ja2V0X0JVSUxESU5HX1NPQ0tFVAorIyAgdW5kZWYgQ01TR19MRU4KKyMgZW5kaWYKICMgaW5jbHVkZSA8d3MydGNwaXAuaD4KIC8qIFZDNiBpcyBzaGlwcGVkIHdpdGggb2xkIHBsYXRmb3JtIGhlYWRlcnMsIGFuZCBkb2VzIG5vdCBoYXZlIE1TVGNwSVAuaAogICogU2VwYXJhdGUgU0RLcyBoYXZlIGFsbCB0aGUgZnVuY3Rpb25zIHdlIHdhbnQsIGJ1dCBvbGRlciBvbmVzIGRvbid0IGhhdmUKQEAgLTE2Nyw3ICsxNzQsNyBAQAogICAgIFB5T2JqZWN0ICooKmVycm9yaGFuZGxlcikodm9pZCk7IC8qIEVycm9yIGhhbmRsZXI7IGNoZWNrcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLCByZXR1cm5zIE5VTEwgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0cyBhIFB5dGhvbiBleGNlcHRpb24gKi8KLSAgICBkb3VibGUgc29ja190aW1lb3V0OyAgICAgICAgICAgICAgICAgLyogT3BlcmF0aW9uIHRpbWVvdXQgaW4gc2Vjb25kczsKKyAgICBfUHlUaW1lX3Qgc29ja190aW1lb3V0OyAgICAgLyogT3BlcmF0aW9uIHRpbWVvdXQgaW4gc2Vjb25kczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAgbWVhbnMgbm9uLWJsb2NraW5nICovCiB9IFB5U29ja2V0U29ja09iamVjdDsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcHdkbW9kdWxlLmMgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwppbmRleCA2OGVhMWI1Li40YjlmM2NkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwpAQCAtMTAsNiArMTAsMTIgQEAKICNpbmNsdWRlIDxzaGFkb3cuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY2xpbmljL3Nwd2Rtb2R1bGUuYy5oIgorCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgc3B3ZAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9YzBiODQxYjkwYTZhMDdjZV0qLwogCiBQeURvY19TVFJWQVIoc3B3ZF9fZG9jX18sCiAiVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbml4IHNoYWRvdyBwYXNzd29yZCBkYXRhYmFzZS5cblwKQEAgLTEwNywyMCArMTEzLDI1IEBACiAKICNpZmRlZiBIQVZFX0dFVFNQTkFNCiAKLVB5RG9jX1NUUlZBUihzcHdkX2dldHNwbmFtX19kb2NfXywKLSJnZXRzcG5hbShuYW1lKSAtPiAoc3BfbmFtcCwgc3BfcHdkcCwgc3BfbHN0Y2hnLCBzcF9taW4sIHNwX21heCxcblwKLSAgICAgICAgICAgICAgICAgICAgc3Bfd2Fybiwgc3BfaW5hY3QsIHNwX2V4cGlyZSwgc3BfZmxhZylcblwKLVJldHVybiB0aGUgc2hhZG93IHBhc3N3b3JkIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gdXNlciBuYW1lLlxuXAotU2VlIHNwd2QuX19kb2NfXyBmb3IgbW9yZSBvbiBzaGFkb3cgcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3Nwd2QuZ2V0c3BuYW0KIAotc3RhdGljIFB5T2JqZWN0KiBzcHdkX2dldHNwbmFtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICBhcmc6IHVuaWNvZGUKKyAgICAvCisKK1JldHVybiB0aGUgc2hhZG93IHBhc3N3b3JkIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gdXNlciBuYW1lLgorCitTZWUgYGhlbHAoc3B3ZClgIGZvciBtb3JlIG9uIHNoYWRvdyBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorc3B3ZF9nZXRzcG5hbV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzAxMjUwY2Y1N2RjNmViZSBpbnB1dD1kZDg5NDI5ZTYxNjdhMDBmXSovCiB7CiAgICAgY2hhciAqbmFtZTsKICAgICBzdHJ1Y3Qgc3B3ZCAqcDsKLSAgICBQeU9iamVjdCAqYXJnLCAqYnl0ZXMsICpyZXR2YWwgPSBOVUxMOworICAgIFB5T2JqZWN0ICpieXRlcywgKnJldHZhbCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6Z2V0c3BuYW0iLCAmYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKChieXRlcyA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoYXJnKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKGJ5dGVzLCAmbmFtZSwgTlVMTCkgPT0gLTEpCkBAIC0xMzksMTQgKzE1MCwxNyBAQAogCiAjaWZkZWYgSEFWRV9HRVRTUEVOVAogCi1QeURvY19TVFJWQVIoc3B3ZF9nZXRzcGFsbF9fZG9jX18sCi0iZ2V0c3BhbGwoKSAtPiBsaXN0X29mX2VudHJpZXNcblwKLVJldHVybiBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzaGFkb3cgcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcywgXAotaW4gYXJiaXRyYXJ5IG9yZGVyLlxuXAotU2VlIHNwd2QuX19kb2NfXyBmb3IgbW9yZSBvbiBzaGFkb3cgcGFzc3dvcmQgZGF0YWJhc2UgZW50cmllcy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3Nwd2QuZ2V0c3BhbGwKKworUmV0dXJuIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNoYWRvdyBwYXNzd29yZCBkYXRhYmFzZSBlbnRyaWVzLCBpbiBhcmJpdHJhcnkgb3JkZXIuCisKK1NlZSBgaGVscChzcHdkKWAgZm9yIG1vcmUgb24gc2hhZG93IHBhc3N3b3JkIGRhdGFiYXNlIGVudHJpZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zcHdkX2dldHNwYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3Nwd2RfZ2V0c3BhbGxfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRmZGEyOThkNmJmNmQwNTcgaW5wdXQ9YjJjODRiNzg1N2Q2MjJiZF0qLwogewogICAgIFB5T2JqZWN0ICpkOwogICAgIHN0cnVjdCBzcHdkICpwOwpAQCAtMTcxLDEwICsxODUsMTAgQEAKIAogc3RhdGljIFB5TWV0aG9kRGVmIHNwd2RfbWV0aG9kc1tdID0gewogI2lmZGVmIEhBVkVfR0VUU1BOQU0KLSAgICB7ImdldHNwbmFtIiwgICAgICAgIHNwd2RfZ2V0c3BuYW0sIE1FVEhfVkFSQVJHUywgc3B3ZF9nZXRzcG5hbV9fZG9jX199LAorICAgIFNQV0RfR0VUU1BOQU1fTUVUSE9EREVGCiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVFNQRU5UCi0gICAgeyJnZXRzcGFsbCIsICAgICAgICBzcHdkX2dldHNwYWxsLCBNRVRIX05PQVJHUywgc3B3ZF9nZXRzcGFsbF9fZG9jX199LAorICAgIFNQV0RfR0VUU1BBTExfTUVUSE9EREVGCiAjZW5kaWYKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlLmggYi9Nb2R1bGVzL3NyZS5oCmluZGV4IDQyZmUyOGQuLmI2MzIxNjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3JlLmgKKysrIGIvTW9kdWxlcy9zcmUuaApAQCAtMTgsOCArMTgsMTAgQEAKICNkZWZpbmUgU1JFX0NPREUgUHlfVUNTNAogI2lmIFNJWkVPRl9TSVpFX1QgPiA0CiAjIGRlZmluZSBTUkVfTUFYUkVQRUFUICh+KFNSRV9DT0RFKTApCisjIGRlZmluZSBTUkVfTUFYR1JPVVBTICgofihTUkVfQ09ERSkwKSAvIDIpCiAjZWxzZQogIyBkZWZpbmUgU1JFX01BWFJFUEVBVCAoKFNSRV9DT0RFKVBZX1NTSVpFX1RfTUFYKQorIyBkZWZpbmUgU1JFX01BWEdST1VQUyAoKFNSRV9DT0RFKVBZX1NTSVpFX1RfTUFYIC8gU0laRU9GX1NJWkVfVCAvIDIpCiAjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNTIsOSArNTQsNiBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGludCAoKlNSRV9UT0xPV0VSX0hPT0spKHVuc2lnbmVkIGludCBjaCk7CiAKLS8qIEZJWE1FOiA8Zmw+IHNob3VsZG4ndCBiZSBhIGNvbnN0YW50LCByZWFsbHkuLi4gKi8KLSNkZWZpbmUgU1JFX01BUktfU0laRSAyMDAKLQogdHlwZWRlZiBzdHJ1Y3QgU1JFX1JFUEVBVF9UIHsKICAgICBQeV9zc2l6ZV90IGNvdW50OwogICAgIFNSRV9DT0RFKiBwYXR0ZXJuOyAvKiBwb2ludHMgdG8gUkVQRUFUIG9wZXJhdG9yIGFyZ3VtZW50cyAqLwpAQCAtNzYsNyArNzUsNyBAQAogICAgIC8qIHJlZ2lzdGVycyAqLwogICAgIFB5X3NzaXplX3QgbGFzdGluZGV4OwogICAgIFB5X3NzaXplX3QgbGFzdG1hcms7Ci0gICAgdm9pZCogbWFya1tTUkVfTUFSS19TSVpFXTsKKyAgICB2b2lkKiogbWFyazsKICAgICAvKiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3R1ZmYgKi8KICAgICBjaGFyKiBkYXRhX3N0YWNrOwogICAgIHNpemVfdCBkYXRhX3N0YWNrX3NpemU7CkBAIC04NSw3ICs4NCw3IEBACiAgICAgLyogY3VycmVudCByZXBlYXQgY29udGV4dCAqLwogICAgIFNSRV9SRVBFQVQgKnJlcGVhdDsKICAgICAvKiBob29rcyAqLwotICAgIFNSRV9UT0xPV0VSX0hPT0sgbG93ZXI7CisgICAgU1JFX1RPTE9XRVJfSE9PSyBsb3dlciwgdXBwZXI7CiB9IFNSRV9TVEFURTsKIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmggYi9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaAppbmRleCA1OTQwZDVhLi42NjMyNDQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaAorKysgYi9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaApAQCAtMTEsNyArMTEsNyBAQAogICogU2VlIHRoZSBfc3JlLmMgZmlsZSBmb3IgaW5mb3JtYXRpb24gb24gdXNhZ2UgYW5kIHJlZGlzdHJpYnV0aW9uLgogICovCiAKLSNkZWZpbmUgU1JFX01BR0lDIDIwMDMxMDE3CisjZGVmaW5lIFNSRV9NQUdJQyAyMDE0MDkxNwogI2RlZmluZSBTUkVfT1BfRkFJTFVSRSAwCiAjZGVmaW5lIFNSRV9PUF9TVUNDRVNTIDEKICNkZWZpbmUgU1JFX09QX0FOWSAyCkBAIC00NCw2ICs0NCw3IEBACiAjZGVmaW5lIFNSRV9PUF9SRVBFQVRfT05FIDI5CiAjZGVmaW5lIFNSRV9PUF9TVUJQQVRURVJOIDMwCiAjZGVmaW5lIFNSRV9PUF9NSU5fUkVQRUFUX09ORSAzMQorI2RlZmluZSBTUkVfT1BfUkFOR0VfSUdOT1JFIDMyCiAjZGVmaW5lIFNSRV9BVF9CRUdJTk5JTkcgMAogI2RlZmluZSBTUkVfQVRfQkVHSU5OSU5HX0xJTkUgMQogI2RlZmluZSBTUkVfQVRfQkVHSU5OSU5HX1NUUklORyAyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZV9saWIuaCBiL01vZHVsZXMvc3JlX2xpYi5oCmluZGV4IDEwNDlkZTQuLjEyOGM3MWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3JlX2xpYi5oCisrKyBiL01vZHVsZXMvc3JlX2xpYi5oCkBAIC0xMDEsNyArMTAxLDcgQEAKIH0KIAogTE9DQUwoaW50KQotU1JFKGNoYXJzZXQpKFNSRV9DT0RFKiBzZXQsIFNSRV9DT0RFIGNoKQorU1JFKGNoYXJzZXQpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBzZXQsIFNSRV9DT0RFIGNoKQogewogICAgIC8qIGNoZWNrIGlmIGNoYXJhY3RlciBpcyBhIG1lbWJlciBvZiB0aGUgZ2l2ZW4gc2V0ICovCiAKQEAgLTE0Miw2ICsxNDIsMjAgQEAKICAgICAgICAgICAgIHNldCArPSAyOwogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0VfSUdOT1JFOgorICAgICAgICAgICAgLyogPFJBTkdFX0lHTk9SRT4gPGxvd2VyPiA8dXBwZXI+ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIFNSRV9DT0RFIHVjaDsKKyAgICAgICAgICAgIC8qIGNoIGlzIGFscmVhZHkgbG93ZXIgY2FzZWQgKi8KKyAgICAgICAgICAgIGlmIChzZXRbMF0gPD0gY2ggJiYgY2ggPD0gc2V0WzFdKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHVjaCA9IHN0YXRlLT51cHBlcihjaCk7CisgICAgICAgICAgICBpZiAoc2V0WzBdIDw9IHVjaCAmJiB1Y2ggPD0gc2V0WzFdKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFNSRV9PUF9ORUdBVEU6CiAgICAgICAgICAgICBvayA9ICFvazsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkzLDcgKzIwNyw3IEBACiAgICAgY2FzZSBTUkVfT1BfSU46CiAgICAgICAgIC8qIHJlcGVhdGVkIHNldCAqLwogICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBJTlxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgU1JFKGNoYXJzZXQpKHBhdHRlcm4gKyAyLCAqcHRyKSkKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBTUkUoY2hhcnNldCkoc3RhdGUsIHBhdHRlcm4gKyAyLCAqcHRyKSkKICAgICAgICAgICAgIHB0cisrOwogICAgICAgICBicmVhazsKIApAQCAtNjI4LDcgKzY0Miw4IEBACiAgICAgICAgICAgICAvKiBtYXRjaCBzZXQgbWVtYmVyIChvciBub25fbWVtYmVyKSAqLwogICAgICAgICAgICAgLyogPElOPiA8c2tpcD4gPHNldD4gKi8KICAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuICsgMSwgKmN0eC0+cHRyKSkKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAhU1JFKGNoYXJzZXQpKHN0YXRlLCBjdHgtPnBhdHRlcm4gKyAxLCAqY3R4LT5wdHIpKQogICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwogICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKICAgICAgICAgICAgIGN0eC0+cHRyKys7CkBAIC02NTcsNyArNjcyLDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfSU5fSUdOT1JFOgogICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5fSUdOT1JFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CiAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kCi0gICAgICAgICAgICAgICAgfHwgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4rMSwKKyAgICAgICAgICAgICAgICB8fCAhU1JFKGNoYXJzZXQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSlzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSkpCiAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CiAgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwpAQCAtNjg4LDcgKzcwMyw4IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0lOICYmCiAgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuICsgMywgKFNSRV9DT0RFKSAqY3R4LT5wdHIpKSkKKyAgICAgICAgICAgICAgICAgICAgICFTUkUoY2hhcnNldCkoc3RhdGUsIGN0eC0+cGF0dGVybiArIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSkgKmN0eC0+cHRyKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQlJBTkNILCBqdW1wX2JyYW5jaCwgY3R4LT5wYXR0ZXJuKzEpOwpAQCAtMTMxOCw3ICsxMzM0LDcgQEAKICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCiAgICAgICAgIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRShjaGFyc2V0KShjaGFyc2V0LCAqcHRyKSkKKyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRShjaGFyc2V0KShzdGF0ZSwgY2hhcnNldCwgKnB0cikpCiAgICAgICAgICAgICAgICAgcHRyKys7CiAgICAgICAgICAgICBpZiAocHRyID49IGVuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwppbmRleCBjZGI0ZmZjLi5mODRjYzc4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCkBAIC04NCw5ICs4NCw2IEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfQ0xBU1MiLCBDbGFzc0Jsb2NrKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9NT0RVTEUiLCBNb2R1bGVCbG9jayk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPUFRfSU1QT1JUX1NUQVIpOwotICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9QVF9UT1BMRVZFTCk7Ci0KICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NBTCk7CiAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgR0xPQkFMX0VYUExJQ0lUKTsKICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBHTE9CQUxfSU1QTElDSVQpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy90aW1lbW9kdWxlLmMgYi9Nb2R1bGVzL3RpbWVtb2R1bGUuYwppbmRleCBkNzFiM2FjLi5kMmNhYWNkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3RpbWVtb2R1bGUuYworKysgYi9Nb2R1bGVzL3RpbWVtb2R1bGUuYwpAQCAtMjcsMjggKzI3LDEzIEBACiAjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKLQotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQotLyogVGhlc2Ugb3ZlcnJpZGVzIG5vdCBuZWVkZWQgZm9yIFdpbjMyICovCi0jZGVmaW5lIHRpbWV6b25lIF90aW1lem9uZQotI2RlZmluZSB0em5hbWUgX3R6bmFtZQotI2RlZmluZSBkYXlsaWdodCBfZGF5bGlnaHQKLSNlbmRpZiAvKiBfX0JPUkxBTkRDX18gKi8KICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAjZW5kaWYgLyogIV9fV0FUQ09NQ19fIHx8IF9fUU5YX18gKi8KIAotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+Ci0jZW5kaWYKLQogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyBpbnQgZmxvYXRzbGVlcChkb3VibGUpOworc3RhdGljIGludCBweXNsZWVwKF9QeVRpbWVfdCk7CiBzdGF0aWMgUHlPYmplY3QqIGZsb2F0dGltZShfUHlfY2xvY2tfaW5mb190ICppbmZvKTsKIAotI2lmZGVmIE1TX1dJTkRPV1MKLXN0YXRpYyBPU1ZFUlNJT05JTkZPRVggd2ludmVyOwotI2VuZGlmCi0KIHN0YXRpYyBQeU9iamVjdCAqCiB0aW1lX3RpbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CkBAIC05MiwxMiArNzcsMTIgQEAKIH0KICNlbmRpZiAvKiBIQVZFX0NMT0NLICovCiAKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykKKyNpZmRlZiBNU19XSU5ET1dTCiAjZGVmaW5lIFdJTjMyX1BFUkZfQ09VTlRFUgogLyogV2luMzIgaGFzIGJldHRlciBjbG9jayByZXBsYWNlbWVudDsgd2UgaGF2ZSBvdXIgb3duIHZlcnNpb24sIGR1ZSB0byBNYXJrCiAgICBIYW1tb25kIGFuZCBUaW0gUGV0ZXJzICovCi1zdGF0aWMgaW50Ci13aW5fcGVyZl9jb3VudGVyKF9QeV9jbG9ja19pbmZvX3QgKmluZm8sIFB5T2JqZWN0ICoqcmVzdWx0KQorc3RhdGljIFB5T2JqZWN0Kgord2luX3BlcmZfY291bnRlcihfUHlfY2xvY2tfaW5mb190ICppbmZvKQogewogICAgIHN0YXRpYyBMT05HTE9ORyBjcHVfZnJlcXVlbmN5ID0gMDsKICAgICBzdGF0aWMgTE9OR0xPTkcgY3RyU3RhcnQ7CkBAIC0xMDksMTAgKzk0LDggQEAKICAgICAgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJm5vdyk7CiAgICAgICAgIGN0clN0YXJ0ID0gbm93LlF1YWRQYXJ0OwogICAgICAgICBpZiAoIVF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koJmZyZXEpIHx8IGZyZXEuUXVhZFBhcnQgPT0gMCkgewotICAgICAgICAgICAgLyogVW5saWtlbHkgdG8gaGFwcGVuIC0gdGhpcyB3b3JrcyBvbiBhbGwgaW50ZWwKLSAgICAgICAgICAgICAgIG1hY2hpbmVzIGF0IGxlYXN0ISAgUmV2ZXJ0IHRvIGNsb2NrKCkgKi8KLSAgICAgICAgICAgICpyZXN1bHQgPSBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBjcHVfZnJlcXVlbmN5ID0gZnJlcS5RdWFkUGFydDsKICAgICB9CkBAIC0xMjQsMTAgKzEwNyw5IEBACiAgICAgICAgIGluZm8tPm1vbm90b25pYyA9IDE7CiAgICAgICAgIGluZm8tPmFkanVzdGFibGUgPSAwOwogICAgIH0KLSAgICAqcmVzdWx0ID0gUHlGbG9hdF9Gcm9tRG91YmxlKGRpZmYgLyAoZG91YmxlKWNwdV9mcmVxdWVuY3kpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoZGlmZiAvIChkb3VibGUpY3B1X2ZyZXF1ZW5jeSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAgIC8qIE1TX1dJTkRPV1MgKi8KIAogI2lmIGRlZmluZWQoV0lOMzJfUEVSRl9DT1VOVEVSKSB8fCBkZWZpbmVkKEhBVkVfQ0xPQ0spCiAjZGVmaW5lIFBZQ0xPQ0sKQEAgLTEzNSwxMSArMTE3LDEwIEBACiBweWNsb2NrKF9QeV9jbG9ja19pbmZvX3QgKmluZm8pCiB7CiAjaWZkZWYgV0lOMzJfUEVSRl9DT1VOVEVSCi0gICAgUHlPYmplY3QgKnJlczsKLSAgICBpZiAod2luX3BlcmZfY291bnRlcihpbmZvLCAmcmVzKSA9PSAwKQotICAgICAgICByZXR1cm4gcmVzOwotI2VuZGlmCisgICAgcmV0dXJuIHdpbl9wZXJmX2NvdW50ZXIoaW5mbyk7CisjZWxzZQogICAgIHJldHVybiBmbG9hdGNsb2NrKGluZm8pOworI2VuZGlmCiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNjksNyArMTUwLDcgQEAKIAogICAgIHJldCA9IGNsb2NrX2dldHRpbWUoKGNsb2NraWRfdCljbGtfaWQsICZ0cCk7CiAgICAgaWYgKHJldCAhPSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh0cC50dl9zZWMgKyB0cC50dl9uc2VjICogMWUtOSk7CkBAIC0xODUsMjIgKzE2NiwyMiBAQAogewogICAgIGludCBjbGtfaWQ7CiAgICAgUHlPYmplY3QgKm9iajsKLSAgICB0aW1lX3QgdHZfc2VjOwotICAgIGxvbmcgdHZfbnNlYzsKKyAgICBfUHlUaW1lX3QgdDsKICAgICBzdHJ1Y3QgdGltZXNwZWMgdHA7CiAgICAgaW50IHJldDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU86Y2xvY2tfc2V0dGltZSIsICZjbGtfaWQsICZvYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob2JqLCAmdHZfc2VjLCAmdHZfbnNlYywgX1B5VGltZV9ST1VORF9ET1dOKSA9PSAtMSkKKyAgICBpZiAoX1B5VGltZV9Gcm9tU2Vjb25kc09iamVjdCgmdCwgb2JqLCBfUHlUaW1lX1JPVU5EX0ZMT09SKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHRwLnR2X3NlYyA9IHR2X3NlYzsKLSAgICB0cC50dl9uc2VjID0gdHZfbnNlYzsKKworICAgIGlmIChfUHlUaW1lX0FzVGltZXNwZWModCwgJnRwKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXQgPSBjbG9ja19zZXR0aW1lKChjbG9ja2lkX3QpY2xrX2lkLCAmdHApOwogICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjIzLDcgKzIwNCw3IEBACiAKICAgICByZXQgPSBjbG9ja19nZXRyZXMoKGNsb2NraWRfdCljbGtfaWQsICZ0cCk7CiAgICAgaWYgKHJldCAhPSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTIzNywxNyArMjE4LDE3IEBACiAjZW5kaWYgICAvKiBIQVZFX0NMT0NLX0dFVFRJTUUgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXRpbWVfc2xlZXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQordGltZV9zbGVlcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBkb3VibGUgc2VjczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImQ6c2xlZXAiLCAmc2VjcykpCisgICAgX1B5VGltZV90IHNlY3M7CisgICAgaWYgKF9QeVRpbWVfRnJvbVNlY29uZHNPYmplY3QoJnNlY3MsIG9iaiwgX1B5VGltZV9ST1VORF9DRUlMSU5HKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHNlY3MgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInNsZWVwIGxlbmd0aCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGZsb2F0c2xlZXAoc2VjcykgIT0gMCkKKyAgICBpZiAocHlzbGVlcChzZWNzKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC0zNDEsNyArMzIyLDcgQEAKICAgICAgICAgd2hlbnQgPSB0aW1lKE5VTEwpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lX3Qob3QsICZ3aGVudCwgX1B5VGltZV9ST1VORF9ET1dOKSA9PSAtMSkKKyAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lX3Qob3QsICZ3aGVudCwgX1B5VGltZV9ST1VORF9GTE9PUikgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgKnB3aGVuID0gd2hlbnQ7CkBAIC02MjksMjEgKzYxMCwxNSBAQAogCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX1dDU0ZUSU1FKQogICAgIC8qIGNoZWNrIHRoYXQgdGhlIGZvcm1hdCBzdHJpbmcgY29udGFpbnMgb25seSB2YWxpZCBkaXJlY3RpdmVzICovCi0gICAgZm9yKG91dGJ1ZiA9IHN0cmNocihmbXQsICclJyk7CisgICAgZm9yIChvdXRidWYgPSBzdHJjaHIoZm10LCAnJScpOwogICAgICAgICBvdXRidWYgIT0gTlVMTDsKICAgICAgICAgb3V0YnVmID0gc3RyY2hyKG91dGJ1ZisyLCAnJScpKQogICAgIHsKLSAgICAgICAgaWYgKG91dGJ1ZlsxXT09JyMnKQorICAgICAgICBpZiAob3V0YnVmWzFdID09ICcjJykKICAgICAgICAgICAgICsrb3V0YnVmOyAvKiBub3QgZG9jdW1lbnRlZCBieSBweXRob24sICovCi0gICAgICAgIGlmIChvdXRidWZbMV09PSdcMCcgfHwKLSAgICAgICAgICAgICFzdHJjaHIoImFBYkJjZEhJam1NcFNVd1d4WHlZelolIiwgb3V0YnVmWzFdKSkKLSAgICAgICAgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJbnZhbGlkIGZvcm1hdCBzdHJpbmciKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihmb3JtYXQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChvdXRidWZbMV0gPT0gJ3knKSAmJiBidWYudG1feWVhciA8IDApCi0gICAgICAgIHsKKyAgICAgICAgaWYgKG91dGJ1ZlsxXSA9PSAnXDAnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgob3V0YnVmWzFdID09ICd5JykgJiYgYnVmLnRtX3llYXIgPCAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgJXkgcmVxdWlyZXMgeWVhciA+PSAxOTAwIG9uIFdpbmRvd3MiKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihmb3JtYXQpOwpAQCAtNjUxLDcgKzYyNiw3IEBACiAgICAgICAgIH0KICAgICB9CiAjZWxpZiAoZGVmaW5lZChfQUlYKSB8fCBkZWZpbmVkKHN1bikpICYmIGRlZmluZWQoSEFWRV9XQ1NGVElNRSkKLSAgICBmb3Iob3V0YnVmID0gd2NzY2hyKGZtdCwgJyUnKTsKKyAgICBmb3IgKG91dGJ1ZiA9IHdjc2NocihmbXQsICclJyk7CiAgICAgICAgIG91dGJ1ZiAhPSBOVUxMOwogICAgICAgICBvdXRidWYgPSB3Y3NjaHIob3V0YnVmKzIsICclJykpCiAgICAgewpAQCAtNjczLDE3ICs2NDgsMjQgQEAKICAgICAgKiB3aWxsIGJlIGFoZWFkIG9mIHRpbWUuLi4KICAgICAgKi8KICAgICBmb3IgKGkgPSAxMDI0OyA7IGkgKz0gaSkgewotI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMCAmJiBkZWZpbmVkKF9fU1REQ19TRUNVUkVfTElCX18pCi0gICAgICAgIGludCBlcnI7Ci0jZW5kaWYKICAgICAgICAgb3V0YnVmID0gKHRpbWVfY2hhciAqKVB5TWVtX01hbGxvYyhpKnNpemVvZih0aW1lX2NoYXIpKTsKICAgICAgICAgaWYgKG91dGJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgYnVmbGVuID0gZm9ybWF0X3RpbWUob3V0YnVmLCBpLCBmbXQsICZidWYpOwogI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMCAmJiBkZWZpbmVkKF9fU1REQ19TRUNVUkVfTElCX18pCi0gICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBlcnJubyA9IDA7CisjZW5kaWYKKyAgICAgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorICAgICAgICBidWZsZW4gPSBmb3JtYXRfdGltZShvdXRidWYsIGksIGZtdCwgJmJ1Zik7CisgICAgICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICisjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwICYmIGRlZmluZWQoX19TVERDX1NFQ1VSRV9MSUJfXykKKyAgICAgICAgLyogVmlzdWFsU3R1ZGlvIC5ORVQgMjAwNSBkb2VzIHRoaXMgcHJvcGVybHkgKi8KKyAgICAgICAgaWYgKGJ1ZmxlbiA9PSAwICYmIGVycm5vID09IEVJTlZBTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJbnZhbGlkIGZvcm1hdCBzdHJpbmciKTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUob3V0YnVmKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgaWYgKGJ1ZmxlbiA+IDAgfHwgaSA+PSAyNTYgKiBmbXRsZW4pIHsKICAgICAgICAgICAgIC8qIElmIHRoZSBidWZmZXIgaXMgMjU2IHRpbWVzIGFzIGxvbmcgYXMgdGhlIGZvcm1hdCwKQEAgLTcwMSwxMyArNjgzLDYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIFB5TWVtX0ZyZWUob3V0YnVmKTsKLSNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAgJiYgZGVmaW5lZChfX1NURENfU0VDVVJFX0xJQl9fKQotICAgICAgICAvKiBWaXN1YWxTdHVkaW8gLk5FVCAyMDA1IGRvZXMgdGhpcyBwcm9wZXJseSAqLwotICAgICAgICBpZiAoYnVmbGVuID09IDAgJiYgZXJyID09IEVJTlZBTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJbnZhbGlkIGZvcm1hdCBzdHJpbmciKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAjaWZkZWYgSEFWRV9XQ1NGVElNRQogICAgIFB5TWVtX0ZyZWUoZm9ybWF0KTsKQEAgLTkwNSwxMjIgKzg4MCwxNyBAQAogc2hvdWxkIG5vdCBiZSByZWxpZWQgb24uIik7CiAjZW5kaWYgLyogSEFWRV9XT1JLSU5HX1RaU0VUICovCiAKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19BUFBMRV9fKSBcCi0gICAgfHwgKGRlZmluZWQoSEFWRV9DTE9DS19HRVRUSU1FKSBcCi0gICAgICAgICYmIChkZWZpbmVkKENMT0NLX0hJR0hSRVMpIHx8IGRlZmluZWQoQ0xPQ0tfTU9OT1RPTklDKSkpCi0jZGVmaW5lIFBZTU9OT1RPTklDCi0jZW5kaWYKLQotI2lmZGVmIFBZTU9OT1RPTklDCi1zdGF0aWMgUHlPYmplY3QqCitzdGF0aWMgUHlPYmplY3QgKgogcHltb25vdG9uaWMoX1B5X2Nsb2NrX2luZm9fdCAqaW5mbykKIHsKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCi0gICAgc3RhdGljIFVMT05HTE9ORyAoKkdldFRpY2tDb3VudDY0KSAodm9pZCkgPSBOVUxMOwotICAgIHN0YXRpYyBVTE9OR0xPTkcgKENBTExCQUNLICpQeV9HZXRUaWNrQ291bnQ2NCkodm9pZCk7Ci0gICAgc3RhdGljIGludCBoYXNfZ2V0aWNrY291bnQ2NCA9IC0xOwotICAgIGRvdWJsZSByZXN1bHQ7Ci0KLSAgICBpZiAoaGFzX2dldGlja2NvdW50NjQgPT0gLTEpIHsKLSAgICAgICAgLyogR2V0VGlja0NvdW50NjQoKSB3YXMgYWRkZWQgdG8gV2luZG93cyBWaXN0YSAqLwotICAgICAgICBpZiAod2ludmVyLmR3TWFqb3JWZXJzaW9uID49IDYpIHsKLSAgICAgICAgICAgIEhJTlNUQU5DRSBoS2VybmVsMzI7Ci0gICAgICAgICAgICBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGVXKEwiS0VSTkVMMzIiKTsKLSAgICAgICAgICAgICooRkFSUFJPQyopJlB5X0dldFRpY2tDb3VudDY0ID0gR2V0UHJvY0FkZHJlc3MoaEtlcm5lbDMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2V0VGlja0NvdW50NjQiKTsKLSAgICAgICAgICAgIGhhc19nZXRpY2tjb3VudDY0ID0gKFB5X0dldFRpY2tDb3VudDY0ICE9IE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGhhc19nZXRpY2tjb3VudDY0ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoaGFzX2dldGlja2NvdW50NjQpIHsKLSAgICAgICAgVUxPTkdMT05HIHRpY2tzOwotICAgICAgICB0aWNrcyA9IFB5X0dldFRpY2tDb3VudDY0KCk7Ci0gICAgICAgIHJlc3VsdCA9IChkb3VibGUpdGlja3MgKiAxZS0zOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc3RhdGljIERXT1JEIGxhc3RfdGlja3MgPSAwOwotICAgICAgICBzdGF0aWMgRFdPUkQgbl9vdmVyZmxvdyA9IDA7Ci0gICAgICAgIERXT1JEIHRpY2tzOwotCi0gICAgICAgIHRpY2tzID0gR2V0VGlja0NvdW50KCk7Ci0gICAgICAgIGlmICh0aWNrcyA8IGxhc3RfdGlja3MpCi0gICAgICAgICAgICBuX292ZXJmbG93Kys7Ci0gICAgICAgIGxhc3RfdGlja3MgPSB0aWNrczsKLQotICAgICAgICByZXN1bHQgPSBsZGV4cChuX292ZXJmbG93LCAzMik7Ci0gICAgICAgIHJlc3VsdCArPSB0aWNrczsKLSAgICAgICAgcmVzdWx0ICo9IDFlLTM7Ci0gICAgfQotCi0gICAgaWYgKGluZm8pIHsKLSAgICAgICAgRFdPUkQgdGltZUFkanVzdG1lbnQsIHRpbWVJbmNyZW1lbnQ7Ci0gICAgICAgIEJPT0wgaXNUaW1lQWRqdXN0bWVudERpc2FibGVkLCBvazsKLSAgICAgICAgaWYgKGhhc19nZXRpY2tjb3VudDY0KQotICAgICAgICAgICAgaW5mby0+aW1wbGVtZW50YXRpb24gPSAiR2V0VGlja0NvdW50NjQoKSI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluZm8tPmltcGxlbWVudGF0aW9uID0gIkdldFRpY2tDb3VudCgpIjsKLSAgICAgICAgaW5mby0+bW9ub3RvbmljID0gMTsKLSAgICAgICAgb2sgPSBHZXRTeXN0ZW1UaW1lQWRqdXN0bWVudCgmdGltZUFkanVzdG1lbnQsICZ0aW1lSW5jcmVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc1RpbWVBZGp1c3RtZW50RGlzYWJsZWQpOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGluZm8tPnJlc29sdXRpb24gPSB0aW1lSW5jcmVtZW50ICogMWUtNzsKLSAgICAgICAgaW5mby0+YWRqdXN0YWJsZSA9IDA7Ci0gICAgfQotICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUocmVzdWx0KTsKLQotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgc3RhdGljIG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2U7Ci0gICAgdWludDY0X3QgdGltZTsKLSAgICBkb3VibGUgc2VjczsKLQotICAgIGlmICh0aW1lYmFzZS5kZW5vbSA9PSAwKSB7Ci0gICAgICAgIC8qIEFjY29yZGluZyB0byB0aGUgVGVjaG5pY2FsIFEmQSBRQTEzOTgsIG1hY2hfdGltZWJhc2VfaW5mbygpIGNhbm5vdAotICAgICAgICAgICBmYWlsOiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvI3FhL3FhMTM5OC8gKi8KLSAgICAgICAgKHZvaWQpbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1lYmFzZSk7Ci0gICAgfQotCi0gICAgdGltZSA9IG1hY2hfYWJzb2x1dGVfdGltZSgpOwotICAgIHNlY3MgPSAoZG91YmxlKXRpbWUgKiB0aW1lYmFzZS5udW1lciAvIHRpbWViYXNlLmRlbm9tICogMWUtOTsKLSAgICBpZiAoaW5mbykgewotICAgICAgICBpbmZvLT5pbXBsZW1lbnRhdGlvbiA9ICJtYWNoX2Fic29sdXRlX3RpbWUoKSI7Ci0gICAgICAgIGluZm8tPnJlc29sdXRpb24gPSAoZG91YmxlKXRpbWViYXNlLm51bWVyIC8gdGltZWJhc2UuZGVub20gKiAxZS05OwotICAgICAgICBpbmZvLT5tb25vdG9uaWMgPSAxOwotICAgICAgICBpbmZvLT5hZGp1c3RhYmxlID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShzZWNzKTsKLQotI2VsaWYgZGVmaW5lZChIQVZFX0NMT0NLX0dFVFRJTUUpICYmIChkZWZpbmVkKENMT0NLX0hJR0hSRVMpIHx8IGRlZmluZWQoQ0xPQ0tfTU9OT1RPTklDKSkKLSAgICBzdHJ1Y3QgdGltZXNwZWMgdHA7Ci0jaWZkZWYgQ0xPQ0tfSElHSFJFUwotICAgIGNvbnN0IGNsb2NraWRfdCBjbGtfaWQgPSBDTE9DS19ISUdIUkVTOwotICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uID0gImNsb2NrX2dldHRpbWUoQ0xPQ0tfSElHSFJFUykiOwotI2Vsc2UKLSAgICBjb25zdCBjbG9ja2lkX3QgY2xrX2lkID0gQ0xPQ0tfTU9OT1RPTklDOwotICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uID0gImNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDKSI7Ci0jZW5kaWYKLQotICAgIGlmIChjbG9ja19nZXR0aW1lKGNsa19pZCwgJnRwKSAhPSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICBfUHlUaW1lX3QgdDsKKyAgICBkb3VibGUgZDsKKyAgICBpZiAoX1B5VGltZV9HZXRNb25vdG9uaWNDbG9ja1dpdGhJbmZvKCZ0LCBpbmZvKSA8IDApIHsKKyAgICAgICAgYXNzZXJ0KGluZm8gIT0gTlVMTCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQotICAgIGlmIChpbmZvKSB7Ci0gICAgICAgIHN0cnVjdCB0aW1lc3BlYyByZXM7Ci0gICAgICAgIGluZm8tPm1vbm90b25pYyA9IDE7Ci0gICAgICAgIGluZm8tPmltcGxlbWVudGF0aW9uID0gZnVuY3Rpb247Ci0gICAgICAgIGluZm8tPmFkanVzdGFibGUgPSAwOwotICAgICAgICBpZiAoY2xvY2tfZ2V0cmVzKGNsa19pZCwgJnJlcykgPT0gMCkKLSAgICAgICAgICAgIGluZm8tPnJlc29sdXRpb24gPSByZXMudHZfc2VjICsgcmVzLnR2X25zZWMgKiAxZS05OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmZvLT5yZXNvbHV0aW9uID0gMWUtOTsKLSAgICB9Ci0gICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSh0cC50dl9zZWMgKyB0cC50dl9uc2VjICogMWUtOSk7Ci0jZW5kaWYKKyAgICBkID0gX1B5VGltZV9Bc1NlY29uZHNEb3VibGUodCk7CisgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShkKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEwMzMsNDAgKzkwMywxNSBAQAogIm1vbm90b25pYygpIC0+IGZsb2F0XG5cCiBcblwKIE1vbm90b25pYyBjbG9jaywgY2Fubm90IGdvIGJhY2t3YXJkLiIpOwotI2VuZGlmICAgLyogUFlNT05PVE9OSUMgKi8KIAogc3RhdGljIFB5T2JqZWN0KgogcGVyZl9jb3VudGVyKF9QeV9jbG9ja19pbmZvX3QgKmluZm8pCiB7Ci0jaWYgZGVmaW5lZChXSU4zMl9QRVJGX0NPVU5URVIpIHx8IGRlZmluZWQoUFlNT05PVE9OSUMpCi0gICAgUHlPYmplY3QgKnJlczsKLSNlbmRpZgotI2lmIGRlZmluZWQoV0lOMzJfUEVSRl9DT1VOVEVSKQotICAgIHN0YXRpYyBpbnQgdXNlX3BlcmZfY291bnRlciA9IDE7Ci0jZW5kaWYKLSNpZmRlZiBQWU1PTk9UT05JQwotICAgIHN0YXRpYyBpbnQgdXNlX21vbm90b25pYyA9IDE7Ci0jZW5kaWYKLQogI2lmZGVmIFdJTjMyX1BFUkZfQ09VTlRFUgotICAgIGlmICh1c2VfcGVyZl9jb3VudGVyKSB7Ci0gICAgICAgIGlmICh3aW5fcGVyZl9jb3VudGVyKGluZm8sICZyZXMpID09IDApCi0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB1c2VfcGVyZl9jb3VudGVyID0gMDsKLSAgICB9CisgICAgcmV0dXJuIHdpbl9wZXJmX2NvdW50ZXIoaW5mbyk7CisjZWxzZQorICAgIHJldHVybiBweW1vbm90b25pYyhpbmZvKTsKICNlbmRpZgotCi0jaWZkZWYgUFlNT05PVE9OSUMKLSAgICBpZiAodXNlX21vbm90b25pYykgewotICAgICAgICByZXMgPSBweW1vbm90b25pYyhpbmZvKTsKLSAgICAgICAgaWYgKHJlcyAhPSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgdXNlX21vbm90b25pYyA9IDA7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gZmxvYXR0aW1lKGluZm8pOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTIzMywxMCArMTA3OCw4IEBACiAgICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJjbG9jayIpID09IDApCiAgICAgICAgIG9iaiA9IHB5Y2xvY2soJmluZm8pOwogI2VuZGlmCi0jaWZkZWYgUFlNT05PVE9OSUMKICAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgIm1vbm90b25pYyIpID09IDApCiAgICAgICAgIG9iaiA9IHB5bW9ub3RvbmljKCZpbmZvKTsKLSNlbmRpZgogICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAicGVyZl9jb3VudGVyIikgPT0gMCkKICAgICAgICAgb2JqID0gcGVyZl9jb3VudGVyKCZpbmZvKTsKICAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgInByb2Nlc3NfdGltZSIpID09IDApCkBAIC0xNDEzLDcgKzEyNTYsNyBAQAogICAgIHsiY2xvY2tfc2V0dGltZSIsICAgdGltZV9jbG9ja19zZXR0aW1lLCBNRVRIX1ZBUkFSR1MsIGNsb2NrX3NldHRpbWVfZG9jfSwKICAgICB7ImNsb2NrX2dldHJlcyIsICAgIHRpbWVfY2xvY2tfZ2V0cmVzLCBNRVRIX1ZBUkFSR1MsIGNsb2NrX2dldHJlc19kb2N9LAogI2VuZGlmCi0gICAgeyJzbGVlcCIsICAgICAgICAgICB0aW1lX3NsZWVwLCBNRVRIX1ZBUkFSR1MsIHNsZWVwX2RvY30sCisgICAgeyJzbGVlcCIsICAgICAgICAgICB0aW1lX3NsZWVwLCBNRVRIX08sIHNsZWVwX2RvY30sCiAgICAgeyJnbXRpbWUiLCAgICAgICAgICB0aW1lX2dtdGltZSwgTUVUSF9WQVJBUkdTLCBnbXRpbWVfZG9jfSwKICAgICB7ImxvY2FsdGltZSIsICAgICAgIHRpbWVfbG9jYWx0aW1lLCBNRVRIX1ZBUkFSR1MsIGxvY2FsdGltZV9kb2N9LAogICAgIHsiYXNjdGltZSIsICAgICAgICAgdGltZV9hc2N0aW1lLCBNRVRIX1ZBUkFSR1MsIGFzY3RpbWVfZG9jfSwKQEAgLTE0MjgsOSArMTI3MSw3IEBACiAjaWZkZWYgSEFWRV9XT1JLSU5HX1RaU0VUCiAgICAgeyJ0enNldCIsICAgICAgICAgICB0aW1lX3R6c2V0LCBNRVRIX05PQVJHUywgdHpzZXRfZG9jfSwKICNlbmRpZgotI2lmZGVmIFBZTU9OT1RPTklDCiAgICAgeyJtb25vdG9uaWMiLCAgICAgICB0aW1lX21vbm90b25pYywgTUVUSF9OT0FSR1MsIG1vbm90b25pY19kb2N9LAotI2VuZGlmCiAgICAgeyJwcm9jZXNzX3RpbWUiLCAgICB0aW1lX3Byb2Nlc3NfdGltZSwgTUVUSF9OT0FSR1MsIHByb2Nlc3NfdGltZV9kb2N9LAogICAgIHsicGVyZl9jb3VudGVyIiwgICAgdGltZV9wZXJmX2NvdW50ZXIsIE1FVEhfTk9BUkdTLCBwZXJmX2NvdW50ZXJfZG9jfSwKICAgICB7ImdldF9jbG9ja19pbmZvIiwgIHRpbWVfZ2V0X2Nsb2NrX2luZm8sIE1FVEhfVkFSQVJHUywgZ2V0X2Nsb2NrX2luZm9fZG9jfSwKQEAgLTE1MTIsMTUgKzEzNTMsNiBAQAogICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFRpbWVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF90aW1lX3R5cGVfZGVzYykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIHdpbnZlci5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHdpbnZlcik7Ci0gICAgICAgIGlmICghR2V0VmVyc2lvbkV4KChPU1ZFUlNJT05JTkZPKikmd2ludmVyKSkgewotICAgICAgICAgICAgUHlfREVDUkVGKG0pOwotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgfQogICAgIFB5X0lOQ1JFRigmU3RydWN0VGltZVR5cGUpOwogI2lmZGVmIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUKQEAgLTE1MzYsMTA5ICsxMzY4LDkzIEBACiBzdGF0aWMgUHlPYmplY3QqCiBmbG9hdHRpbWUoX1B5X2Nsb2NrX2luZm9fdCAqaW5mbykKIHsKLSAgICBfUHlUaW1lX3RpbWV2YWwgdDsKLSNpZmRlZiBIQVZFX0NMT0NLX0dFVFRJTUUKLSAgICBzdHJ1Y3QgdGltZXNwZWMgdHA7Ci0gICAgaW50IHJldDsKLQotICAgIC8qIF9QeVRpbWVfZ2V0dGltZW9mZGF5KCkgZG9lcyBub3QgdXNlIGNsb2NrX2dldHRpbWUoKQotICAgICAgIGJlY2F1c2UgaXQgd291bGQgcmVxdWlyZSB0byBsaW5rIFB5dGhvbiB0byB0aGUgcnQgKHJlYWwtdGltZSkKLSAgICAgICBsaWJyYXJ5LCBhdCBsZWFzdCBvbiBMaW51eCAqLwotICAgIHJldCA9IGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cCk7Ci0gICAgaWYgKHJldCA9PSAwKSB7Ci0gICAgICAgIGlmIChpbmZvKSB7Ci0gICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgcmVzOwotICAgICAgICAgICAgaW5mby0+aW1wbGVtZW50YXRpb24gPSAiY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSkiOwotICAgICAgICAgICAgaW5mby0+bW9ub3RvbmljID0gMDsKLSAgICAgICAgICAgIGluZm8tPmFkanVzdGFibGUgPSAxOwotICAgICAgICAgICAgaWYgKGNsb2NrX2dldHJlcyhDTE9DS19SRUFMVElNRSwgJnJlcykgPT0gMCkKLSAgICAgICAgICAgICAgICBpbmZvLT5yZXNvbHV0aW9uID0gcmVzLnR2X3NlYyArIHJlcy50dl9uc2VjICogMWUtOTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpbmZvLT5yZXNvbHV0aW9uID0gMWUtOTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHRwLnR2X3NlYyArIHRwLnR2X25zZWMgKiAxZS05KTsKKyAgICBfUHlUaW1lX3QgdDsKKyAgICBkb3VibGUgZDsKKyAgICBpZiAoX1B5VGltZV9HZXRTeXN0ZW1DbG9ja1dpdGhJbmZvKCZ0LCBpbmZvKSA8IDApIHsKKyAgICAgICAgYXNzZXJ0KGluZm8gIT0gTlVMTCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSNlbmRpZgotICAgIF9QeVRpbWVfZ2V0dGltZW9mZGF5X2luZm8oJnQsIGluZm8pOwotICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoKGRvdWJsZSl0LnR2X3NlYyArIHQudHZfdXNlYyAqIDFlLTYpOworICAgIGQgPSBfUHlUaW1lX0FzU2Vjb25kc0RvdWJsZSh0KTsKKyAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGQpOwogfQogCiAKLS8qIEltcGxlbWVudCBmbG9hdHNsZWVwKCkgZm9yIHZhcmlvdXMgcGxhdGZvcm1zLgorLyogSW1wbGVtZW50IHB5c2xlZXAoKSBmb3IgdmFyaW91cyBwbGF0Zm9ybXMuCiAgICBXaGVuIGludGVycnVwdGVkIChvciB3aGVuIGFub3RoZXIgZXJyb3Igb2NjdXJzKSwgcmV0dXJuIC0xIGFuZAogICAgc2V0IGFuIGV4Y2VwdGlvbjsgZWxzZSByZXR1cm4gMC4gKi8KIAogc3RhdGljIGludAotZmxvYXRzbGVlcChkb3VibGUgc2VjcykKK3B5c2xlZXAoX1B5VGltZV90IHNlY3MpCiB7Ci0vKiBYWFggU2hvdWxkIHRlc3QgZm9yIE1TX1dJTkRPV1MgZmlyc3QhICovCi0jaWYgZGVmaW5lZChIQVZFX1NFTEVDVCkgJiYgIWRlZmluZWQoX19FTVhfXykKLSAgICBzdHJ1Y3QgdGltZXZhbCB0OwotICAgIGRvdWJsZSBmcmFjOwotICAgIGludCBlcnI7Ci0KLSAgICBmcmFjID0gZm1vZChzZWNzLCAxLjApOwotICAgIHNlY3MgPSBmbG9vcihzZWNzKTsKLSAgICB0LnR2X3NlYyA9IChsb25nKXNlY3M7Ci0gICAgdC50dl91c2VjID0gKGxvbmcpKGZyYWMqMTAwMDAwMC4wKTsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZXJyID0gc2VsZWN0KDAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAsICZ0KTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChlcnIgIT0gMCkgewotI2lmZGVmIEVJTlRSCi0gICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgewotICAgICAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgX1B5VGltZV90IGRlYWRsaW5lLCBtb25vdG9uaWM7CisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgIGludCBlcnIgPSAwOworI2Vsc2UKKyAgICBfUHlUaW1lX3QgbWlsbGlzZWNzOworICAgIHVuc2lnbmVkIGxvbmcgdWxfbWlsbGlzOworICAgIERXT1JEIHJjOworICAgIEhBTkRMRSBoSW50ZXJydXB0RXZlbnQ7CiAjZW5kaWYKLSAgICAgICAgewotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworCisgICAgZGVhZGxpbmUgPSBfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrKCkgKyBzZWNzOworCisgICAgZG8geworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChfUHlUaW1lX0FzVGltZXZhbChzZWNzLCAmdGltZW91dCwgX1B5VGltZV9ST1VORF9DRUlMSU5HKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBlcnIgPSBzZWxlY3QoMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAoZmRfc2V0ICopMCwgJnRpbWVvdXQpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChlcnIgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgfQotI2VsaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoX19RTlhfXykKLSAgICAvKiBYWFggQ2FuJ3QgaW50ZXJydXB0IHRoaXMgc2xlZXAgKi8KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZGVsYXkoKGludCkoc2VjcyAqIDEwMDAgKyAwLjUpKTsgIC8qIGRlbGF5KCkgdXNlcyBtaWxsaXNlY29uZHMgKi8KLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQotICAgIHsKLSAgICAgICAgZG91YmxlIG1pbGxpc2VjcyA9IHNlY3MgKiAxMDAwLjA7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdWxfbWlsbGlzOwotCisjZWxzZQorICAgICAgICBtaWxsaXNlY3MgPSBfUHlUaW1lX0FzTWlsbGlzZWNvbmRzKHNlY3MsIF9QeVRpbWVfUk9VTkRfQ0VJTElORyk7CiAgICAgICAgIGlmIChtaWxsaXNlY3MgPiAoZG91YmxlKVVMT05HX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsZWVwIGxlbmd0aCBpcyB0b28gbGFyZ2UiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisKICAgICAgICAgLyogQWxsb3cgc2xlZXAoMCkgdG8gbWFpbnRhaW4gd2luMzIgc2VtYW50aWNzLCBhbmQgYXMgZGVjcmVlZAogICAgICAgICAgKiBieSBHdWlkbywgb25seSB0aGUgbWFpbiB0aHJlYWQgY2FuIGJlIGludGVycnVwdGVkLgogICAgICAgICAgKi8KICAgICAgICAgdWxfbWlsbGlzID0gKHVuc2lnbmVkIGxvbmcpbWlsbGlzZWNzOwotICAgICAgICBpZiAodWxfbWlsbGlzID09IDAgfHwgIV9QeU9TX0lzTWFpblRocmVhZCgpKQorICAgICAgICBpZiAodWxfbWlsbGlzID09IDAgfHwgIV9QeU9TX0lzTWFpblRocmVhZCgpKSB7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICBTbGVlcCh1bF9taWxsaXMpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERXT1JEIHJjOwotICAgICAgICAgICAgSEFORExFIGhJbnRlcnJ1cHRFdmVudCA9IF9QeU9TX1NpZ2ludEV2ZW50KCk7Ci0gICAgICAgICAgICBSZXNldEV2ZW50KGhJbnRlcnJ1cHRFdmVudCk7Ci0gICAgICAgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3RFeChoSW50ZXJydXB0RXZlbnQsIHVsX21pbGxpcywgRkFMU0UpOwotICAgICAgICAgICAgaWYgKHJjID09IFdBSVRfT0JKRUNUXzApIHsKLSAgICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0gICAgICAgICAgICAgICAgZXJybm8gPSBFSU5UUjsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKKyAgICAgICAgUmVzZXRFdmVudChoSW50ZXJydXB0RXZlbnQpOworCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMsIEZBTFNFKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICB9Ci0jZWxzZQotICAgIC8qIFhYWCBDYW4ndCBpbnRlcnJ1cHQgdGhpcyBzbGVlcCAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzbGVlcCgoaW50KXNlY3MpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgaWYgKHJjICE9IFdBSVRfT0JKRUNUXzApCisgICAgICAgICAgICBicmVhazsKICNlbmRpZgogCisgICAgICAgIC8qIHNsZWVwIHdhcyBpbnRlcnJ1cHRlZCBieSBTSUdJTlQgKi8KKyAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIG1vbm90b25pYyA9IF9QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2soKTsKKyAgICAgICAgc2VjcyA9IGRlYWRsaW5lIC0gbW9ub3RvbmljOworICAgICAgICBpZiAoc2VjcyA8IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogcmV0cnkgd2l0aCB0aGUgcmVjb21wdXRlZCBkZWxheSAqLworICAgIH0gd2hpbGUgKDEpOworCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RrYXBwaW5pdC5jIGIvTW9kdWxlcy90a2FwcGluaXQuYwppbmRleCAyZWQ4NTk0Li43NjE2ZDlkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3RrYXBwaW5pdC5jCisrKyBiL01vZHVsZXMvdGthcHBpbml0LmMKQEAgLTI2LDkgKzI2LDYgQEAKIGludAogVGNsX0FwcEluaXQoVGNsX0ludGVycCAqaW50ZXJwKQogewotI2lmZGVmIFdJVEhfTU9SRUJVVFRPTlMKLSAgICBUa19XaW5kb3cgbWFpbl93aW5kb3c7Ci0jZW5kaWYKICAgICBjb25zdCBjaGFyICpfdGtpbnRlcl9za2lwX3RrX2luaXQ7CiAjaWZkZWYgVEtJTlRFUl9QUk9URUNUX0xPQURUSwogICAgIGNvbnN0IGNoYXIgKl90a2ludGVyX3RrX2ZhaWxlZDsKQEAgLTExMywyOSArMTEwLDEzIEBACiAgICAgICAgIHJldHVybiBUQ0xfRVJST1I7CiAgICAgfQogCi0jaWZkZWYgV0lUSF9NT1JFQlVUVE9OUwotICAgIG1haW5fd2luZG93ID0gVGtfTWFpbldpbmRvdyhpbnRlcnApOwotI2Vsc2UKICAgICBUa19NYWluV2luZG93KGludGVycCk7Ci0jZW5kaWYKIAogI2lmZGVmIFRLX0FRVUEKICAgICBUa01hY09TWEluaXRBcHBsZUV2ZW50cyhpbnRlcnApOwogICAgIFRrTWFjT1NYSW5pdE1lbnVzKGludGVycCk7CiAjZW5kaWYKIAotI2lmZGVmIFdJVEhfTU9SRUJVVFRPTlMKLSAgICB7Ci0gICAgICAgIGV4dGVybiBUY2xfQ21kUHJvYyBzdHVkQnV0dG9uQ21kOwotICAgICAgICBleHRlcm4gVGNsX0NtZFByb2MgdHJpQnV0dG9uQ21kOwotCi0gICAgICAgIFRjbF9DcmVhdGVDb21tYW5kKGludGVycCwgInN0dWRidXR0b24iLCBzdHVkQnV0dG9uQ21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoQ2xpZW50RGF0YSkgbWFpbl93aW5kb3csIE5VTEwpOwotICAgICAgICBUY2xfQ3JlYXRlQ29tbWFuZChpbnRlcnAsICJ0cmlidXR0b24iLCB0cmlCdXR0b25DbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChDbGllbnREYXRhKSBtYWluX3dpbmRvdywgTlVMTCk7Ci0gICAgfQotI2VuZGlmCi0KICNpZmRlZiBXSVRIX1BJTCAvKiAwLjJiNSBhbmQgbGF0ZXIgLS0gbm90IHlldCByZWxlYXNlZCBhcyBvZiBNYXkgMTQgKi8KICAgICB7CiAgICAgICAgIGV4dGVybiB2b2lkIFRrSW1hZ2luZ19Jbml0KFRjbF9JbnRlcnAgKik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RraW50ZXIuaCBiL01vZHVsZXMvdGtpbnRlci5oCmluZGV4IDNjNTU2NzYuLmNiNWE4MDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdGtpbnRlci5oCisrKyBiL01vZHVsZXMvdGtpbnRlci5oCkBAIC0xNiwxNCArMTYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKFRLX1JFTEVBU0VfTEVWRUwgPDwgOCkgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAoVEtfUkVMRUFTRV9TRVJJQUwgPDwgMCkpCiAKLS8qIFRLX1ZFUlNJT05fSEVYIHBhY2tzIGZpZWxkcyBpbiB3cm9uZyBvcmRlciwgbm90IHN1aXRhYmxlIGZvciBjb21wYXJpbmcgb2YKLSAqIG5vbi1maW5hbCByZWxlYXNlcy4gIExlZnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi0gKi8KLSNkZWZpbmUgVEtfVkVSU0lPTl9IRVggKChUS19NQUpPUl9WRVJTSU9OIDw8IDI0KSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChUS19NSU5PUl9WRVJTSU9OIDw8IDE2KSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChUS19SRUxFQVNFX1NFUklBTCA8PCA4KSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChUS19SRUxFQVNFX0xFVkVMIDw8IDApKQotCiAvKiBQcm90ZWN0IFRrIDguNC4xMyBhbmQgb2xkZXIgZnJvbSBhIGRlYWRsb2NrIHRoYXQgaGFwcGVucyB3aGVuIHRyeWluZwogICogdG8gbG9hZCB0ayBhZnRlciBhIGZhaWxlZCBhdHRlbXB0LiAqLwogI2lmIFRLX0hFWF9WRVJTSU9OIDwgMHgwODA0MDIwZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YS5jIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCmluZGV4IDUwN2NlZjMuLmZlNGU5MDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGEuYworKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKQEAgLTczLDYgKzczLDggQEAKICAgICBQeV9VQ1M0ICgqbm9ybWFsaXphdGlvbikoUHlfVUNTNCk7CiB9IFByZXZpb3VzREJWZXJzaW9uOwogCisjaW5jbHVkZSAiY2xpbmljL3VuaWNvZGVkYXRhLmMuaCIKKwogI2RlZmluZSBnZXRfb2xkX3JlY29yZChzZWxmLCB2KSAgICAoKCgoUHJldmlvdXNEQlZlcnNpb24qKXNlbGYpLT5nZXRyZWNvcmQpKHYpKQogCiBzdGF0aWMgUHlNZW1iZXJEZWYgREJfbWVtYmVyc1tdID0gewpAQCAtOTksODEgKzEwMSwzMSBAQAogfQogCiAKLXN0YXRpYyBQeV9VQ1M0IGdldHVjaGFyKFB5VW5pY29kZU9iamVjdCAqb2JqKQotewotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSkKLSAgICAgICAgcmV0dXJuIChQeV9VQ1M0KS0xOwotICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopID09IDEpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopKQotICAgICAgICAgICAgcmV0dXJuIChQeV9VQ1M0KS0xOwotICAgICAgICByZXR1cm4gUHlVbmljb2RlX1JFQURfQ0hBUihvYmosIDApOwotICAgIH0KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAibmVlZCBhIHNpbmdsZSBVbmljb2RlIGNoYXJhY3RlciBhcyBwYXJhbWV0ZXIiKTsKLSAgICByZXR1cm4gKFB5X1VDUzQpLTE7Ci19Ci0KIC8qIC0tLSBNb2R1bGUgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKltjbGluaWMgaW5wdXRdCi0KIHVuaWNvZGVkYXRhLlVDRC5kZWNpbWFsCiAKLSAgICB1bmljaHI6IG9iamVjdCh0eXBlPSdQeVVuaWNvZGVPYmplY3QgKicsIHN1YmNsYXNzX29mPScmUHlVbmljb2RlX1R5cGUnKQorICAgIHNlbGY6IHNlbGYKKyAgICBjaHI6IGludChhY2NlcHQ9e3N0cn0pCiAgICAgZGVmYXVsdDogb2JqZWN0PU5VTEwKICAgICAvCiAKIENvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIHZhbHVlLgogCi1SZXR1cm5zIHRoZSBkZWNpbWFsIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHIKLWFzIGludGVnZXIuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmCi1ub3QgZ2l2ZW4sIFZhbHVlRXJyb3IgaXMgcmFpc2VkLgorUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBpbnRlZ2VyLgorSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWYgbm90IGdpdmVuLAorVmFsdWVFcnJvciBpcyByYWlzZWQuCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9fZG9jX18sCi0iZGVjaW1hbCgkc2VsZiwgdW5pY2hyLCBkZWZhdWx0PU5vbmUsIC8pXG4iCi0iLS1cbiIKLSJcbiIKLSJDb252ZXJ0cyBhIFVuaWNvZGUgY2hhcmFjdGVyIGludG8gaXRzIGVxdWl2YWxlbnQgZGVjaW1hbCB2YWx1ZS5cbiIKLSJcbiIKLSJSZXR1cm5zIHRoZSBkZWNpbWFsIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHJcbiIKLSJhcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZlxuIgotIm5vdCBnaXZlbiwgVmFsdWVFcnJvciBpcyByYWlzZWQuIik7Ci0KLSNkZWZpbmUgVU5JQ09ERURBVEFfVUNEX0RFQ0lNQUxfTUVUSE9EREVGICAgIFwKLSAgICB7ImRlY2ltYWwiLCAoUHlDRnVuY3Rpb24pdW5pY29kZWRhdGFfVUNEX2RlY2ltYWwsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfX2RvY19ffSwKLQogc3RhdGljIFB5T2JqZWN0ICoKLXVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoUHJldmlvdXNEQlZlcnNpb24gKnNlbGYsIFB5VW5pY29kZU9iamVjdCAqdW5pY2hyLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlZGF0YV9VQ0RfZGVjaW1hbChQcmV2aW91c0RCVmVyc2lvbiAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgUHlVbmljb2RlT2JqZWN0ICp1bmljaHI7Ci0gICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJPIXxPOmRlY2ltYWwiLAotICAgICAgICAmUHlVbmljb2RlX1R5cGUsICZ1bmljaHIsICZkZWZhdWx0X3ZhbHVlKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoc2VsZiwgdW5pY2hyLCBkZWZhdWx0X3ZhbHVlKTsKLQotZXhpdDoKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfaW1wbChQcmV2aW91c0RCVmVyc2lvbiAqc2VsZiwgUHlVbmljb2RlT2JqZWN0ICp1bmljaHIsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg2ODk2Njk4OTZkMjkzZGYgaW5wdXQ9YzI1YzlkMmI0ZGUwNzZiMV0qLwordW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGNociwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmUyMzM3NmUxYTE4NTIzMSBpbnB1dD05MzNmODEwNzk5M2YyM2QwXSovCiB7CiAgICAgaW50IGhhdmVfb2xkID0gMDsKICAgICBsb25nIHJjOwotICAgIFB5X1VDUzQgYzsKLQotICAgIGMgPSBnZXR1Y2hhcih1bmljaHIpOwotICAgIGlmIChjID09IChQeV9VQ1M0KS0xKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9VQ1M0IGMgPSAoUHlfVUNTNCljaHI7CiAKICAgICBpZiAoc2VsZiAmJiBVQ0RfQ2hlY2soc2VsZikpIHsKICAgICAgICAgY29uc3QgY2hhbmdlX3JlY29yZCAqb2xkID0gZ2V0X29sZF9yZWNvcmQoc2VsZiwgYyk7CkBAIC0yMDQsNjEgKzE1Niw2NCBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmMpOwogfQogCi1QeURvY19TVFJWQVIodW5pY29kZWRhdGFfZGlnaXRfX2RvY19fLAotImRpZ2l0KHVuaWNoclssIGRlZmF1bHRdKVxuXAotXG5cCi1SZXR1cm5zIHRoZSBkaWdpdCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyIGFzXG5cCi1pbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZlxuXAotbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3VuaWNvZGVkYXRhLlVDRC5kaWdpdAorCisgICAgc2VsZjogc2VsZgorICAgIGNocjogaW50KGFjY2VwdD17c3RyfSkKKyAgICBkZWZhdWx0OiBvYmplY3Q9TlVMTAorICAgIC8KKworQ29udmVydHMgYSBVbmljb2RlIGNoYXJhY3RlciBpbnRvIGl0cyBlcXVpdmFsZW50IGRpZ2l0IHZhbHVlLgorCitSZXR1cm5zIHRoZSBkaWdpdCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBpbnRlZ2VyLgorSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWYgbm90IGdpdmVuLAorVmFsdWVFcnJvciBpcyByYWlzZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlZGF0YV9kaWdpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlZGF0YV9VQ0RfZGlnaXRfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTZlMThjOTUwMTcxZmQyZiBpbnB1dD1lMjdkNmU0NTY1Y2QyOWYyXSovCiB7Ci0gICAgUHlVbmljb2RlT2JqZWN0ICp2OwotICAgIFB5T2JqZWN0ICpkZWZvYmogPSBOVUxMOwogICAgIGxvbmcgcmM7Ci0gICAgUHlfVUNTNCBjOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOmRpZ2l0IiwgJlB5VW5pY29kZV9UeXBlLCAmdiwgJmRlZm9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGMgPSBnZXR1Y2hhcih2KTsKLSAgICBpZiAoYyA9PSAoUHlfVUNTNCktMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfVUNTNCBjID0gKFB5X1VDUzQpY2hyOwogICAgIHJjID0gUHlfVU5JQ09ERV9UT0RJR0lUKGMpOwogICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgaWYgKGRlZm9iaiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChkZWZhdWx0X3ZhbHVlID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibm90IGEgZGlnaXQiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlfSU5DUkVGKGRlZm9iaik7Ci0gICAgICAgICAgICByZXR1cm4gZGVmb2JqOworICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHRfdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyYyk7CiB9CiAKLVB5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9udW1lcmljX19kb2NfXywKLSJudW1lcmljKHVuaWNoclssIGRlZmF1bHRdKVxuXAotXG5cCi1SZXR1cm5zIHRoZSBudW1lcmljIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHJcblwKLWFzIGZsb2F0LiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZlxuXAotbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3VuaWNvZGVkYXRhLlVDRC5udW1lcmljCisKKyAgICBzZWxmOiBzZWxmCisgICAgY2hyOiBpbnQoYWNjZXB0PXtzdHJ9KQorICAgIGRlZmF1bHQ6IG9iamVjdD1OVUxMCisgICAgLworCitDb252ZXJ0cyBhIFVuaWNvZGUgY2hhcmFjdGVyIGludG8gaXRzIGVxdWl2YWxlbnQgbnVtZXJpYyB2YWx1ZS4KKworUmV0dXJucyB0aGUgbnVtZXJpYyB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBmbG9hdC4KK0lmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmIG5vdCBnaXZlbiwKK1ZhbHVlRXJyb3IgaXMgcmFpc2VkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfbnVtZXJpYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlZGF0YV9VQ0RfbnVtZXJpY19pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgY2hyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01M2NlMjgxZmU4NWIxMGM0IGlucHV0PWZkZjU4NzFhNTU0Mjg5M2NdKi8KIHsKLSAgICBQeVVuaWNvZGVPYmplY3QgKnY7Ci0gICAgUHlPYmplY3QgKmRlZm9iaiA9IE5VTEw7CiAgICAgaW50IGhhdmVfb2xkID0gMDsKICAgICBkb3VibGUgcmM7Ci0gICAgUHlfVUNTNCBjOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOm51bWVyaWMiLCAmUHlVbmljb2RlX1R5cGUsICZ2LCAmZGVmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYyA9IGdldHVjaGFyKHYpOwotICAgIGlmIChjID09IChQeV9VQ1M0KS0xKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9VQ1M0IGMgPSAoUHlfVUNTNCljaHI7CiAKICAgICBpZiAoc2VsZiAmJiBVQ0RfQ2hlY2soc2VsZikpIHsKICAgICAgICAgY29uc3QgY2hhbmdlX3JlY29yZCAqb2xkID0gZ2V0X29sZF9yZWNvcmQoc2VsZiwgYyk7CkBAIC0yNzYsMzcgKzIzMSwzNCBAQAogICAgIGlmICghaGF2ZV9vbGQpCiAgICAgICAgIHJjID0gUHlfVU5JQ09ERV9UT05VTUVSSUMoYyk7CiAgICAgaWYgKHJjID09IC0xLjApIHsKLSAgICAgICAgaWYgKGRlZm9iaiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChkZWZhdWx0X3ZhbHVlID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibm90IGEgbnVtZXJpYyBjaGFyYWN0ZXIiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlfSU5DUkVGKGRlZm9iaik7Ci0gICAgICAgICAgICByZXR1cm4gZGVmb2JqOworICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHRfdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyYyk7CiB9CiAKLVB5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9jYXRlZ29yeV9fZG9jX18sCi0iY2F0ZWdvcnkodW5pY2hyKVxuXAotXG5cCi1SZXR1cm5zIHRoZSBnZW5lcmFsIGNhdGVnb3J5IGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuXAotdW5pY2hyIGFzIHN0cmluZy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3VuaWNvZGVkYXRhLlVDRC5jYXRlZ29yeQorCisgICAgc2VsZjogc2VsZgorICAgIGNocjogaW50KGFjY2VwdD17c3RyfSkKKyAgICAvCisKK1JldHVybnMgdGhlIGdlbmVyYWwgY2F0ZWdvcnkgYXNzaWduZWQgdG8gdGhlIGNoYXJhY3RlciBjaHIgYXMgc3RyaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfY2F0ZWdvcnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQordW5pY29kZWRhdGFfVUNEX2NhdGVnb3J5X2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBjaHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODU3MTUzOWVlMmU2NzgzYSBpbnB1dD0yN2Q2ZjNkODUwNTBiYzA2XSovCiB7Ci0gICAgUHlVbmljb2RlT2JqZWN0ICp2OwogICAgIGludCBpbmRleDsKLSAgICBQeV9VQ1M0IGM7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hOmNhdGVnb3J5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VW5pY29kZV9UeXBlLCAmdikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGMgPSBnZXR1Y2hhcih2KTsKLSAgICBpZiAoYyA9PSAoUHlfVUNTNCktMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfVUNTNCBjID0gKFB5X1VDUzQpY2hyOwogICAgIGluZGV4ID0gKGludCkgX2dldHJlY29yZF9leChjKS0+Y2F0ZWdvcnk7CiAgICAgaWYgKHNlbGYgJiYgVUNEX0NoZWNrKHNlbGYpKSB7CiAgICAgICAgIGNvbnN0IGNoYW5nZV9yZWNvcmQgKm9sZCA9IGdldF9vbGRfcmVjb3JkKHNlbGYsIGMpOwpAQCAtMzE2LDI2ICsyNjgsMjQgQEAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoX1B5VW5pY29kZV9DYXRlZ29yeU5hbWVzW2luZGV4XSk7CiB9CiAKLVB5RG9jX1NUUlZBUih1bmljb2RlZGF0YV9iaWRpcmVjdGlvbmFsX19kb2NfXywKLSJiaWRpcmVjdGlvbmFsKHVuaWNocilcblwKLVxuXAotUmV0dXJucyB0aGUgYmlkaXJlY3Rpb25hbCBjbGFzcyBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcblwKLXVuaWNociBhcyBzdHJpbmcuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgYW4gZW1wdHkgc3RyaW5nIGlzXG5cCi1yZXR1cm5lZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3VuaWNvZGVkYXRhLlVDRC5iaWRpcmVjdGlvbmFsCisKKyAgICBzZWxmOiBzZWxmCisgICAgY2hyOiBpbnQoYWNjZXB0PXtzdHJ9KQorICAgIC8KKworUmV0dXJucyB0aGUgYmlkaXJlY3Rpb25hbCBjbGFzcyBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBzdHJpbmcuCisKK0lmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfYmlkaXJlY3Rpb25hbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlZGF0YV9VQ0RfYmlkaXJlY3Rpb25hbF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgY2hyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQzNjMxMGNlMjAzOWJiOTIgaW5wdXQ9YjNkOGY0MmNlYmZjZjQ3NV0qLwogewotICAgIFB5VW5pY29kZU9iamVjdCAqdjsKICAgICBpbnQgaW5kZXg7Ci0gICAgUHlfVUNTNCBjOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPITpiaWRpcmVjdGlvbmFsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VW5pY29kZV9UeXBlLCAmdikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGMgPSBnZXR1Y2hhcih2KTsKLSAgICBpZiAoYyA9PSAoUHlfVUNTNCktMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfVUNTNCBjID0gKFB5X1VDUzQpY2hyOwogICAgIGluZGV4ID0gKGludCkgX2dldHJlY29yZF9leChjKS0+YmlkaXJlY3Rpb25hbDsKICAgICBpZiAoc2VsZiAmJiBVQ0RfQ2hlY2soc2VsZikpIHsKICAgICAgICAgY29uc3QgY2hhbmdlX3JlY29yZCAqb2xkID0gZ2V0X29sZF9yZWNvcmQoc2VsZiwgYyk7CkBAIC0zNDcsNTUgKzI5Nyw1MiBAQAogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhfUHlVbmljb2RlX0JpZGlyZWN0aW9uYWxOYW1lc1tpbmRleF0pOwogfQogCi1QeURvY19TVFJWQVIodW5pY29kZWRhdGFfY29tYmluaW5nX19kb2NfXywKLSJjb21iaW5pbmcodW5pY2hyKVxuXAotXG5cCi1SZXR1cm5zIHRoZSBjYW5vbmljYWwgY29tYmluaW5nIGNsYXNzIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlXG5cCi1jaGFyYWN0ZXIgdW5pY2hyIGFzIGludGVnZXIuIFJldHVybnMgMCBpZiBubyBjb21iaW5pbmcgY2xhc3MgaXNcblwKLWRlZmluZWQuIik7CisvKltjbGluaWMgaW5wdXRdCit1bmljb2RlZGF0YS5VQ0QuY29tYmluaW5nIC0+IGludAogCi1zdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfY29tYmluaW5nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICBzZWxmOiBzZWxmCisgICAgY2hyOiBpbnQoYWNjZXB0PXtzdHJ9KQorICAgIC8KKworUmV0dXJucyB0aGUgY2Fub25pY2FsIGNvbWJpbmluZyBjbGFzcyBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBpbnRlZ2VyLgorCitSZXR1cm5zIDAgaWYgbm8gY29tYmluaW5nIGNsYXNzIGlzIGRlZmluZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK3VuaWNvZGVkYXRhX1VDRF9jb21iaW5pbmdfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGNocikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jYWQwNTZkMGNiNmE1OTIwIGlucHV0PTlmMmQ2YjJhOTVkMGEyMmFdKi8KIHsKLSAgICBQeVVuaWNvZGVPYmplY3QgKnY7CiAgICAgaW50IGluZGV4OwotICAgIFB5X1VDUzQgYzsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE6Y29tYmluaW5nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VW5pY29kZV9UeXBlLCAmdikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGMgPSBnZXR1Y2hhcih2KTsKLSAgICBpZiAoYyA9PSAoUHlfVUNTNCktMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfVUNTNCBjID0gKFB5X1VDUzQpY2hyOwogICAgIGluZGV4ID0gKGludCkgX2dldHJlY29yZF9leChjKS0+Y29tYmluaW5nOwogICAgIGlmIChzZWxmICYmIFVDRF9DaGVjayhzZWxmKSkgewogICAgICAgICBjb25zdCBjaGFuZ2VfcmVjb3JkICpvbGQgPSBnZXRfb2xkX3JlY29yZChzZWxmLCBjKTsKICAgICAgICAgaWYgKG9sZC0+Y2F0ZWdvcnlfY2hhbmdlZCA9PSAwKQogICAgICAgICAgICAgaW5kZXggPSAwOyAvKiB1bmFzc2lnbmVkICovCiAgICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoaW5kZXgpOworICAgIHJldHVybiBpbmRleDsKIH0KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX21pcnJvcmVkX19kb2NfXywKLSJtaXJyb3JlZCh1bmljaHIpXG5cCi1cblwKLVJldHVybnMgdGhlIG1pcnJvcmVkIHByb3BlcnR5IGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuXAotdW5pY2hyIGFzIGludGVnZXIuIFJldHVybnMgMSBpZiB0aGUgY2hhcmFjdGVyIGhhcyBiZWVuIGlkZW50aWZpZWQgYXNcblwKLWEgXCJtaXJyb3JlZFwiIGNoYXJhY3RlciBpbiBiaWRpcmVjdGlvbmFsIHRleHQsIDAgb3RoZXJ3aXNlLiIpOworLypbY2xpbmljIGlucHV0XQordW5pY29kZWRhdGEuVUNELm1pcnJvcmVkIC0+IGludAogCi1zdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfbWlycm9yZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorICAgIHNlbGY6IHNlbGYKKyAgICBjaHI6IGludChhY2NlcHQ9e3N0cn0pCisgICAgLworCitSZXR1cm5zIHRoZSBtaXJyb3JlZCBwcm9wZXJ0eSBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBpbnRlZ2VyLgorCitSZXR1cm5zIDEgaWYgdGhlIGNoYXJhY3RlciBoYXMgYmVlbiBpZGVudGlmaWVkIGFzIGEgIm1pcnJvcmVkIgorY2hhcmFjdGVyIGluIGJpZGlyZWN0aW9uYWwgdGV4dCwgMCBvdGhlcndpc2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK3VuaWNvZGVkYXRhX1VDRF9taXJyb3JlZF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgY2hyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTI1MzJkYmY4MTIxYjUwZTYgaW5wdXQ9NWRkNDAwZDM1MWFlNmYzYl0qLwogewotICAgIFB5VW5pY29kZU9iamVjdCAqdjsKICAgICBpbnQgaW5kZXg7Ci0gICAgUHlfVUNTNCBjOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPITptaXJyb3JlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZQeVVuaWNvZGVfVHlwZSwgJnYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBjID0gZ2V0dWNoYXIodik7Ci0gICAgaWYgKGMgPT0gKFB5X1VDUzQpLTEpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1VDUzQgYyA9IChQeV9VQ1M0KWNocjsKICAgICBpbmRleCA9IChpbnQpIF9nZXRyZWNvcmRfZXgoYyktPm1pcnJvcmVkOwogICAgIGlmIChzZWxmICYmIFVDRF9DaGVjayhzZWxmKSkgewogICAgICAgICBjb25zdCBjaGFuZ2VfcmVjb3JkICpvbGQgPSBnZXRfb2xkX3JlY29yZChzZWxmLCBjKTsKQEAgLTQwNCwyOCArMzUxLDI1IEBACiAgICAgICAgIGVsc2UgaWYgKG9sZC0+bWlycm9yZWRfY2hhbmdlZCAhPSAweEZGKQogICAgICAgICAgICAgaW5kZXggPSBvbGQtPm1pcnJvcmVkX2NoYW5nZWQ7CiAgICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoaW5kZXgpOworICAgIHJldHVybiBpbmRleDsKIH0KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX2Vhc3RfYXNpYW5fd2lkdGhfX2RvY19fLAotImVhc3RfYXNpYW5fd2lkdGgodW5pY2hyKVxuXAotXG5cCi1SZXR1cm5zIHRoZSBlYXN0IGFzaWFuIHdpZHRoIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuXAotdW5pY2hyIGFzIHN0cmluZy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3VuaWNvZGVkYXRhLlVDRC5lYXN0X2FzaWFuX3dpZHRoCisKKyAgICBzZWxmOiBzZWxmCisgICAgY2hyOiBpbnQoYWNjZXB0PXtzdHJ9KQorICAgIC8KKworUmV0dXJucyB0aGUgZWFzdCBhc2lhbiB3aWR0aCBhc3NpZ25lZCB0byB0aGUgY2hhcmFjdGVyIGNociBhcyBzdHJpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlZGF0YV9lYXN0X2FzaWFuX3dpZHRoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3VuaWNvZGVkYXRhX1VDRF9lYXN0X2FzaWFuX3dpZHRoX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBjaHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDg0ZTg1MzdkOWVlODE5NyBpbnB1dD1jNDg1NDc5OGFhYjAyNmUwXSovCiB7Ci0gICAgUHlVbmljb2RlT2JqZWN0ICp2OwogICAgIGludCBpbmRleDsKLSAgICBQeV9VQ1M0IGM7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hOmVhc3RfYXNpYW5fd2lkdGgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlVbmljb2RlX1R5cGUsICZ2KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYyA9IGdldHVjaGFyKHYpOwotICAgIGlmIChjID09IChQeV9VQ1M0KS0xKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9VQ1M0IGMgPSAoUHlfVUNTNCljaHI7CiAgICAgaW5kZXggPSAoaW50KSBfZ2V0cmVjb3JkX2V4KGMpLT5lYXN0X2FzaWFuX3dpZHRoOwogICAgIGlmIChzZWxmICYmIFVDRF9DaGVjayhzZWxmKSkgewogICAgICAgICBjb25zdCBjaGFuZ2VfcmVjb3JkICpvbGQgPSBnZXRfb2xkX3JlY29yZChzZWxmLCBjKTsKQEAgLTQzNSwyOSArMzc5LDI3IEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKF9QeVVuaWNvZGVfRWFzdEFzaWFuV2lkdGhOYW1lc1tpbmRleF0pOwogfQogCi1QeURvY19TVFJWQVIodW5pY29kZWRhdGFfZGVjb21wb3NpdGlvbl9fZG9jX18sCi0iZGVjb21wb3NpdGlvbih1bmljaHIpXG5cCi1cblwKLVJldHVybnMgdGhlIGNoYXJhY3RlciBkZWNvbXBvc2l0aW9uIG1hcHBpbmcgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGVcblwKLWNoYXJhY3RlciB1bmljaHIgYXMgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgaW4gY2FzZSBub1xuXAotc3VjaCBtYXBwaW5nIGlzIGRlZmluZWQuIik7CisvKltjbGluaWMgaW5wdXRdCit1bmljb2RlZGF0YS5VQ0QuZGVjb21wb3NpdGlvbgorCisgICAgc2VsZjogc2VsZgorICAgIGNocjogaW50KGFjY2VwdD17c3RyfSkKKyAgICAvCisKK1JldHVybnMgdGhlIGNoYXJhY3RlciBkZWNvbXBvc2l0aW9uIG1hcHBpbmcgYXNzaWduZWQgdG8gdGhlIGNoYXJhY3RlciBjaHIgYXMgc3RyaW5nLgorCitBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgaW4gY2FzZSBubyBzdWNoIG1hcHBpbmcgaXMgZGVmaW5lZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXVuaWNvZGVkYXRhX2RlY29tcG9zaXRpb24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQordW5pY29kZWRhdGFfVUNEX2RlY29tcG9zaXRpb25faW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGNocikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03ZDY5OWYzZWM3NTY1ZDI3IGlucHV0PWU0YzEyNDU5YWQ2ODUwN2JdKi8KIHsKLSAgICBQeVVuaWNvZGVPYmplY3QgKnY7CiAgICAgY2hhciBkZWNvbXBbMjU2XTsKICAgICBpbnQgY29kZSwgaW5kZXgsIGNvdW50OwogICAgIHNpemVfdCBpOwogICAgIHVuc2lnbmVkIGludCBwcmVmaXhfaW5kZXg7Ci0gICAgUHlfVUNTNCBjOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPITpkZWNvbXBvc2l0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VW5pY29kZV9UeXBlLCAmdikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGMgPSBnZXR1Y2hhcih2KTsKLSAgICBpZiAoYyA9PSAoUHlfVUNTNCktMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfVUNTNCBjID0gKFB5X1VDUzQpY2hyOwogCiAgICAgY29kZSA9IChpbnQpYzsKIApAQCAtODU4LDIyICs4MDAsMjQgQEAKICAgICByZXR1cm4gMTsgLyogY2VydGFpbmx5IG5vcm1hbGl6ZWQgKi8KIH0KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX25vcm1hbGl6ZV9fZG9jX18sCi0ibm9ybWFsaXplKGZvcm0sIHVuaXN0cilcblwKLVxuXAotUmV0dXJuIHRoZSBub3JtYWwgZm9ybSAnZm9ybScgZm9yIHRoZSBVbmljb2RlIHN0cmluZyB1bmlzdHIuICBWYWxpZFxuXAotdmFsdWVzIGZvciBmb3JtIGFyZSAnTkZDJywgJ05GS0MnLCAnTkZEJywgYW5kICdORktEJy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3VuaWNvZGVkYXRhLlVDRC5ub3JtYWxpemUKIAotc3RhdGljIFB5T2JqZWN0KgotdW5pY29kZWRhdGFfbm9ybWFsaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICBzZWxmOiBzZWxmCisgICAgZm9ybTogc3RyCisgICAgdW5pc3RyIGFzIGlucHV0OiBvYmplY3Qoc3ViY2xhc3Nfb2Y9JyZQeVVuaWNvZGVfVHlwZScpCisgICAgLworCitSZXR1cm4gdGhlIG5vcm1hbCBmb3JtICdmb3JtJyBmb3IgdGhlIFVuaWNvZGUgc3RyaW5nIHVuaXN0ci4KKworVmFsaWQgdmFsdWVzIGZvciBmb3JtIGFyZSAnTkZDJywgJ05GS0MnLCAnTkZEJywgYW5kICdORktEJy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9ub3JtYWxpemVfaW1wbChQeU9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqaW5wdXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjJkMWY4ODcwMDI3ZWZkYyBpbnB1dD1jZDA5MmU2MzFjZjExODgzXSovCiB7Ci0gICAgY2hhciAqZm9ybTsKLSAgICBQeU9iamVjdCAqaW5wdXQ7Ci0KLSAgICBpZighUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic08hOm5vcm1hbGl6ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm0sICZQeVVuaWNvZGVfVHlwZSwgJmlucHV0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGlucHV0KSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTk3NywxMCArOTIxLDExIEBACiB7CiAgICAgcmV0dXJuCiAgICAgICAgICgweDM0MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NERCNSkgICB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBBICovCi0gICAgICAgICgweDRFMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4OUZDQykgICB8fCAvKiBDSksgSWRlb2dyYXBoICovCisgICAgICAgICgweDRFMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4OUZENSkgICB8fCAvKiBDSksgSWRlb2dyYXBoICovCiAgICAgICAgICgweDIwMDAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJBNkQ2KSB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBCICovCiAgICAgICAgICgweDJBNzAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJCNzM0KSB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBDICovCi0gICAgICAgICgweDJCNzQwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJCODFEKTsgICAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBEICovCisgICAgICAgICgweDJCNzQwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJCODFEKSB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBEICovCisgICAgICAgICgweDJCODIwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJDRUExKTsgICAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBFICovCiB9CiAKIC8qIG1hY3JvcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgZ2l2ZW4gY29kZSBwb2ludCBpcyBpbiB0aGUgUFVBIHJhbmdlIHRoYXQKQEAgLTEyMzIsNjQgKzExNzcsNjcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBQeXRob24gYmluZGluZ3MgKi8KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX25hbWVfX2RvY19fLAotIm5hbWUodW5pY2hyWywgZGVmYXVsdF0pXG5cCi1SZXR1cm5zIHRoZSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHIgYXMgYVxuXAotc3RyaW5nLiBJZiBubyBuYW1lIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZiBub3RcblwKLWdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3VuaWNvZGVkYXRhLlVDRC5uYW1lCisKKyAgICBzZWxmOiBzZWxmCisgICAgY2hyOiBpbnQoYWNjZXB0PXtzdHJ9KQorICAgIGRlZmF1bHQ6IG9iamVjdD1OVUxMCisgICAgLworCitSZXR1cm5zIHRoZSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBjaGFyYWN0ZXIgY2hyIGFzIGEgc3RyaW5nLgorCitJZiBubyBuYW1lIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZiBub3QgZ2l2ZW4sCitWYWx1ZUVycm9yIGlzIHJhaXNlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXVuaWNvZGVkYXRhX25hbWUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQordW5pY29kZWRhdGFfVUNEX25hbWVfaW1wbChQeU9iamVjdCAqc2VsZiwgaW50IGNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmJiYjM3YTMyNjQwNzcwNyBpbnB1dD0zZTAzNjdmNTM0ZGU1NmQ5XSovCiB7CiAgICAgY2hhciBuYW1lW05BTUVfTUFYTEVOXTsKLSAgICBQeV9VQ1M0IGM7Ci0KLSAgICBQeVVuaWNvZGVPYmplY3QqIHY7Ci0gICAgUHlPYmplY3QqIGRlZm9iaiA9IE5VTEw7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOm5hbWUiLCAmUHlVbmljb2RlX1R5cGUsICZ2LCAmZGVmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBjID0gZ2V0dWNoYXIodik7Ci0gICAgaWYgKGMgPT0gKFB5X1VDUzQpLTEpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1VDUzQgYyA9IChQeV9VQ1M0KWNocjsKIAogICAgIGlmICghX2dldHVjbmFtZShzZWxmLCBjLCBuYW1lLCBzaXplb2YobmFtZSksIDApKSB7Ci0gICAgICAgIGlmIChkZWZvYmogPT0gTlVMTCkgeworICAgICAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5vIHN1Y2ggbmFtZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZGVmb2JqKTsKLSAgICAgICAgICAgIHJldHVybiBkZWZvYmo7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhuYW1lKTsKIH0KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX2xvb2t1cF9fZG9jX18sCi0ibG9va3VwKG5hbWUpXG5cCi1cblwKLUxvb2sgdXAgY2hhcmFjdGVyIGJ5IG5hbWUuICBJZiBhIGNoYXJhY3RlciB3aXRoIHRoZVxuXAotZ2l2ZW4gbmFtZSBpcyBmb3VuZCwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGVcblwKLWNoYXJhY3Rlci4gIElmIG5vdCBmb3VuZCwgS2V5RXJyb3IgaXMgcmFpc2VkLiIpOworLypbY2xpbmljIGlucHV0XQordW5pY29kZWRhdGEuVUNELmxvb2t1cAorCisgICAgc2VsZjogc2VsZgorICAgIG5hbWU6IHN0cihhY2NlcHQ9e3N0ciwgcm9idWZmZXJ9LCB6ZXJvZXM9VHJ1ZSkKKyAgICAvCisKK0xvb2sgdXAgY2hhcmFjdGVyIGJ5IG5hbWUuCisKK0lmIGEgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgZm91bmQsIHJldHVybiB0aGUKK2NvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiAgSWYgbm90IGZvdW5kLCBLZXlFcnJvciBpcyByYWlzZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlZGF0YV9sb29rdXAoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQordW5pY29kZWRhdGFfVUNEX2xvb2t1cF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX2NsZWFuX3QgbmFtZV9sZW5ndGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzY1Y2I4MTg2Nzg4ZTZiZSBpbnB1dD1hNTU3YmUwZjg2MDdhMGQ2XSovCiB7CiAgICAgUHlfVUNTNCBjb2RlOwotCi0gICAgY2hhciogbmFtZTsKLSAgICBQeV9zc2l6ZV90IG5hbWVsZW47CiAgICAgdW5zaWduZWQgaW50IGluZGV4OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6bG9va3VwIiwgJm5hbWUsICZuYW1lbGVuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKG5hbWVsZW4gPiBJTlRfTUFYKSB7CisgICAgaWYgKG5hbWVfbGVuZ3RoID4gSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfS2V5RXJyb3IsICJuYW1lIHRvbyBsb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICghX2dldGNvZGUoc2VsZiwgbmFtZSwgKGludCluYW1lbGVuLCAmY29kZSwgMSkpIHsKKyAgICBpZiAoIV9nZXRjb2RlKHNlbGYsIG5hbWUsIChpbnQpbmFtZV9sZW5ndGgsICZjb2RlLCAxKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3IsICJ1bmRlZmluZWQgY2hhcmFjdGVyIG5hbWUgJyVzJyIsIG5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMzA4LDI0ICsxMjU2LDE3IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZiB1bmljb2RlZGF0YV9mdW5jdGlvbnNbXSA9IHsKICAgICBVTklDT0RFREFUQV9VQ0RfREVDSU1BTF9NRVRIT0RERUYKLSAgICB7ImRpZ2l0IiwgdW5pY29kZWRhdGFfZGlnaXQsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfZGlnaXRfX2RvY19ffSwKLSAgICB7Im51bWVyaWMiLCB1bmljb2RlZGF0YV9udW1lcmljLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX251bWVyaWNfX2RvY19ffSwKLSAgICB7ImNhdGVnb3J5IiwgdW5pY29kZWRhdGFfY2F0ZWdvcnksIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgdW5pY29kZWRhdGFfY2F0ZWdvcnlfX2RvY19ffSwKLSAgICB7ImJpZGlyZWN0aW9uYWwiLCB1bmljb2RlZGF0YV9iaWRpcmVjdGlvbmFsLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgICAgICAgdW5pY29kZWRhdGFfYmlkaXJlY3Rpb25hbF9fZG9jX199LAotICAgIHsiY29tYmluaW5nIiwgdW5pY29kZWRhdGFfY29tYmluaW5nLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgICB1bmljb2RlZGF0YV9jb21iaW5pbmdfX2RvY19ffSwKLSAgICB7Im1pcnJvcmVkIiwgdW5pY29kZWRhdGFfbWlycm9yZWQsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgdW5pY29kZWRhdGFfbWlycm9yZWRfX2RvY19ffSwKLSAgICB7ImVhc3RfYXNpYW5fd2lkdGgiLCB1bmljb2RlZGF0YV9lYXN0X2FzaWFuX3dpZHRoLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZWRhdGFfZWFzdF9hc2lhbl93aWR0aF9fZG9jX199LAotICAgIHsiZGVjb21wb3NpdGlvbiIsIHVuaWNvZGVkYXRhX2RlY29tcG9zaXRpb24sIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlZGF0YV9kZWNvbXBvc2l0aW9uX19kb2NfX30sCi0gICAgeyJuYW1lIiwgdW5pY29kZWRhdGFfbmFtZSwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9uYW1lX19kb2NfX30sCi0gICAgeyJsb29rdXAiLCB1bmljb2RlZGF0YV9sb29rdXAsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfbG9va3VwX19kb2NfX30sCi0gICAgeyJub3JtYWxpemUiLCB1bmljb2RlZGF0YV9ub3JtYWxpemUsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgIHVuaWNvZGVkYXRhX25vcm1hbGl6ZV9fZG9jX199LAorICAgIFVOSUNPREVEQVRBX1VDRF9ESUdJVF9NRVRIT0RERUYKKyAgICBVTklDT0RFREFUQV9VQ0RfTlVNRVJJQ19NRVRIT0RERUYKKyAgICBVTklDT0RFREFUQV9VQ0RfQ0FURUdPUllfTUVUSE9EREVGCisgICAgVU5JQ09ERURBVEFfVUNEX0JJRElSRUNUSU9OQUxfTUVUSE9EREVGCisgICAgVU5JQ09ERURBVEFfVUNEX0NPTUJJTklOR19NRVRIT0RERUYKKyAgICBVTklDT0RFREFUQV9VQ0RfTUlSUk9SRURfTUVUSE9EREVGCisgICAgVU5JQ09ERURBVEFfVUNEX0VBU1RfQVNJQU5fV0lEVEhfTUVUSE9EREVGCisgICAgVU5JQ09ERURBVEFfVUNEX0RFQ09NUE9TSVRJT05fTUVUSE9EREVGCisgICAgVU5JQ09ERURBVEFfVUNEX05BTUVfTUVUSE9EREVGCisgICAgVU5JQ09ERURBVEFfVUNEX0xPT0tVUF9NRVRIT0RERUYKKyAgICBVTklDT0RFREFUQV9VQ0RfTk9STUFMSVpFX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCmluZGV4IGVjMTFmYTEuLjg5ZDg3NjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKQEAgLTEsNiArMSw2IEBACiAvKiB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAzLjIgKi8KIAotI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMy4wIgorI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjguMC4wIgogLyogYSBsaXN0IG9mIHVuaXF1ZSBkYXRhYmFzZSByZWNvcmRzICovCiBjb25zdCBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkIF9QeVVuaWNvZGVfRGF0YWJhc2VfUmVjb3Jkc1tdID0gewogICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKQEAgLTMyMyw3ICszMjMsMTEgQEAKICAgICB7MjcsIDAsIDE5LCAwLCAxLCAxMzZ9LAogICAgIHsxNCwgMCwgMTksIDAsIDUsIDB9LAogICAgIHs4LCAwLCAxOSwgMCwgNSwgMH0sCisgICAgezksIDAsIDksIDAsIDUsIDB9LAogICAgIHs5LCAwLCA0LCAwLCA1LCAwfSwKKyAgICB7MzAsIDAsIDQsIDAsIDUsIDB9LAorICAgIHsxLCAwLCA0LCAwLCA1LCAwfSwKKyAgICB7MiwgMCwgNCwgMCwgNSwgMH0sCiAgICAgezksIDAsIDEyLCAwLCA1LCAwfSwKICAgICB7MzAsIDAsIDEsIDAsIDUsIDE3MH0sCiAgICAgezUsIDIxNiwgMSwgMCwgNSwgMH0sCkBAIC0zMzUsOCArMzM5LDggQEAKIH07CiAKIC8qIFJlaW5kZXhpbmcgb2YgTkZDIGZpcnN0IGNoYXJhY3RlcnMuICovCi0jZGVmaW5lIFRPVEFMX0ZJUlNUIDM3MgotI2RlZmluZSBUT1RBTF9MQVNUIDU2CisjZGVmaW5lIFRPVEFMX0ZJUlNUIDM3NgorI2RlZmluZSBUT1RBTF9MQVNUIDYyCiBzdHJ1Y3QgcmVpbmRleHtpbnQgc3RhcnQ7c2hvcnQgY291bnQsaW5kZXg7fTsKIHN0YXRpYyBzdHJ1Y3QgcmVpbmRleCBuZmNfZmlyc3RbXSA9IHsKICAgeyA2MCwgMiwgMH0sCkBAIC01NDYsNiArNTUwLDkgQEAKICAgeyA2OTc4NywgMCwgMzY4fSwKICAgeyA2OTc5NywgMCwgMzY5fSwKICAgeyA2OTkzNywgMSwgMzcwfSwKKyAgeyA3MDQ3MSwgMCwgMzcyfSwKKyAgeyA3MDg0MSwgMCwgMzczfSwKKyAgeyA3MTA5NiwgMSwgMzc0fSwKICAgezAsMCwwfQogfTsKIApAQCAtNTgzLDYgKzU5MCwxMiBAQAogICB7IDEyNDQxLCAxLCA1Mn0sCiAgIHsgNjk4MTgsIDAsIDU0fSwKICAgeyA2OTkyNywgMCwgNTV9LAorICB7IDcwNDYyLCAwLCA1Nn0sCisgIHsgNzA0ODcsIDAsIDU3fSwKKyAgeyA3MDgzMiwgMCwgNTh9LAorICB7IDcwODQyLCAwLCA1OX0sCisgIHsgNzA4NDUsIDAsIDYwfSwKKyAgeyA3MTA4NywgMCwgNjF9LAogICB7MCwwLDB9CiB9OwogCkBAIC03MTQsMzYgKzcyNyw0MyBAQAogICAgIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAKICAgICAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgCiAgICAgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjIsIDEyMiwgMTIzLCAxMjQsIAotICAgIDEyNSwgMTI2LCAxMjcsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCA4NCwgCi0gICAgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDE0MywgODQsIDE0NCwgMTQ1LCAxNDYsIAotICAgIDg0LCAxNDcsIDg0LCAxNDgsIDg0LCA4NCwgODQsIDE0OSwgODQsIDg0LCA4NCwgMTUwLCAxNTEsIDE1MiwgMTUzLCA4NCwgCi0gICAgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAxNTQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDE1NSwgODQsIDE1NiwgCi0gICAgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgCi0gICAgODQsIDg0LCA4NCwgODQsIDg0LCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDE1NywgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDQxLCA0MSwgNDEsIDQxLCAxNTgsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDE1OSwgMTYwLCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDE2MSwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgNzgsIDE2MiwgMTYzLCAxNjQsIDE2NSwgODQsIDE2NiwgODQsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIAotICAgIDE3MywgMTc0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgCi0gICAgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgCi0gICAgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDE3NSwgMTc2LCA4NCwgODQsIDE3NywgMTc4LCAxNzksIAotICAgIDE4MCwgMTgxLCA4NCwgMTgyLCAxODMsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgODQsIDg0LCA4NCwgCi0gICAgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAxMDEsIDEwMSwgMTAxLCAKKyAgICAxMjUsIDEyNiwgMTI3LCAxMjcsIDEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgCisgICAgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxMzgsIDQxLCA0MSwgMTQ1LCAxMzgsIDE0NiwgMTQ3LCAxNDgsIAorICAgIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTM4LCAxMzgsIDE1NiwgMTM4LCAxMzgsIDEzOCwgMTU3LCAKKyAgICAxNTgsIDE1OSwgMTYwLCAxNjEsIDE2MiwgMTYzLCAxMzgsIDEzOCwgMTY0LCAxMzgsIDE2NSwgMTY2LCAxNjcsIDE2OCwgCisgICAgMTM4LCAxMzgsIDE2OSwgMTM4LCAxMzgsIDEzOCwgMTcwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCAxNzEsIDE3MiwgNDEsIDE3MywgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCAxNzQsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgNDEsIDQxLCA0MSwgNDEsIDE3NSwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCA0MSwgNDEsIDQxLCA0MSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxODAsIDE4MSwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE4MiwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDE4MywgMTg0LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgNzgsIDE4NSwgCisgICAgMTg2LCAxODcsIDE4OCwgMTM4LCAxODksIDEzOCwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCAxOTgsIDE5OSwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDIwMCwgMjAxLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDIwMiwgMjAzLCAxMzgsIDEzOCwgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDEzOCwgMjA5LCAyMTAsIDIwOSwgMjA5LCAKKyAgICAyMTEsIDIxMiwgMjA5LCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIAogICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAKICAgICAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgCiAgICAgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIApAQCAtNzY3LDM1OSArNzg3LDQ1OSBAQAogICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAKICAgICAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgCiAgICAgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIAotICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxOTEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAKKyAgICAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMjIwLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgCiAgICAgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIAotICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTkyLCAKLSAgICAxMDEsIDE5MywgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDEyMiwgMTIyLCAxMjIsIDEyMiwgMTk0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCAKLSAgICAxOTUsIDg0LCAxOTYsIDE5NywgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAotICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgCisgICAgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAyMjEsIDEwMSwgMjIyLCAxMDEsIAorICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAKKyAgICAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgCisgICAgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIAorICAgIDEwMSwgMjIzLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEyMiwgMTIyLCAxMjIsIDEyMiwgMjI0LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAyMjUsIDEzOCwgMjI2LCAyMjcsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgCisgICAgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIAogICAgIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAKICAgICAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgCiAgICAgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIApAQCAtMTE1NSw4ICsxMjc1LDggQEAKICAgICAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgCiAgICAgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIAogICAgIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAKKyAgICAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDIyOCwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgCiAgICAgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIAotICAgIDE5OCwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAKICAgICAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgCiAgICAgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIAogICAgIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAKQEAgLTExOTIsNyArMTMxMiw3IEBACiAgICAgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIAogICAgIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAKICAgICAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgCi0gICAgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDEyMSwgMTIxLCAxMjEsIDE5OCwgCisgICAgMTIxLCAyMjgsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZGV4MltdID0gewpAQCAtMTI0NCw3ICsxMzY0LDcgQEAKICAgICA2OSwgNTksIDY5LCA2OSwgNzAsIDYwLCA2MiwgNjIsIDYyLCA2MCwgNjAsIDYwLCA2MiwgNjIsIDcxLCA2MCwgNjAsIDYwLCAKICAgICA2MiwgNjIsIDYyLCA2MiwgNjAsIDYxLCA2MiwgNjIsIDYwLCA3MiwgNzMsIDczLCA3MiwgNzMsIDczLCA3MiwgNjAsIDYwLCAKICAgICA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsIDQ0LCA0NywgNDQsIDQ3LCA3NCwgNTQsIDQ0LCAKLSAgICA0NywgMCwgMCwgNTEsIDQ3LCA0NywgNDcsIDc1LCAwLCAwLCAwLCAwLCAwLCA1OCwgNzYsIDM4LCA3NSwgMzgsIDM4LCAzOCwgCisgICAgNDcsIDAsIDAsIDUxLCA0NywgNDcsIDQ3LCA3NSwgNDQsIDAsIDAsIDAsIDAsIDU4LCA3NiwgMzgsIDc1LCAzOCwgMzgsIDM4LCAKICAgICAwLCAzOCwgMCwgMzgsIDM4LCA0MywgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIAogICAgIDM5LCAzOSwgMzksIDM5LCAwLCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzgsIDM4LCA0MywgNDMsIDQzLCA0MywgCiAgICAgNDMsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgCkBAIC0xMjY3LDk3ICsxMzg3LDk4IEBACiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDQsIDQ3LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCA0NCwgNDcsIDM4LCA0MywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCiAgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCi0gICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCisgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKICAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAwLCAwLCA1MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgNDcsIDQ3LCA0NywgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgMCwgMCwgNTMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMzUsIAotICAgIDAsIDgzLCA4NCwgMCwgMCwgMCwgMCwgODUsIDAsIDg2LCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCA4MSwgODEsIDg3LCA4NiwgCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4NywgCi0gICAgODgsIDgxLCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAKLSAgICAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNCwgODEsIDg2LCAxMDQsIDk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMDcsIDEwNywgMTA3LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA4LCAxMDgsIAotICAgIDEwOCwgMTA4LCAxMDgsIDAsIDc4LCA3OCwgMTA5LCAxMTAsIDExMCwgMTExLCAxMTIsIDExMywgMjYsIDI2LCA4MSwgODEsIAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDExNCwgMTE1LCAxMTYsIDExMywgMTE3LCAwLCAxMTMsIDExMywgMTE4LCAxMTgsIAotICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKLSAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCi0gICAgMTE4LCAxMTgsIDEyMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMjEsIAotICAgIDEyMiwgMTIzLCAxMTQsIDExNSwgMTE2LCAxMjQsIDEyNSwgMTI2LCAxMjYsIDEyNywgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgODYsIDgxLCA4MSwgODYsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTEwLCAKLSAgICAxMjksIDEyOSwgMTEzLCAxMTgsIDExOCwgMTMwLCAxMTgsIDExOCwgMTE4LCAxMTgsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCi0gICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKLSAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCi0gICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKLSAgICAxMTgsIDExOSwgMTE4LCAxMTksIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCi0gICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE5LCAxMTMsIDExOCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDEwOCwgMjYsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDEyMCwgMTIwLCA4MSwgODEsIDI2LCA4NiwgODEsIDgxLCA4NiwgCi0gICAgMTE4LCAxMTgsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTE4LCAxMTgsIAotICAgIDExOCwgMTMzLCAxMzMsIDExOCwgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDExNywgMTE4LCAxMzQsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCi0gICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCAKLSAgICA4NiwgODYsIDg2LCA4MSwgODYsIDg2LCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4MSwgODYsIDgxLCA4NiwgODEsIDg2LCAKLSAgICA4MSwgODEsIDAsIDAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKLSAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCi0gICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAotICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKLSAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCi0gICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIAotICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDEzNywgMTM3LCAyNiwgMTM4LCAxMzgsIDEzOCwgMTM3LCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDM1LCAwLCA4MywgODQsIDAsIDAsIDI2LCAyNiwgODUsIDAsIDg2LCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCAKKyAgICA4MSwgODEsIDg3LCA4NiwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODEsIDgxLCAKKyAgICA4NiwgODEsIDgxLCA4NywgODgsIDgxLCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTgsIDk5LCAKKyAgICAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNCwgODEsIDg2LCAxMDQsIDk3LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDgxLCA4MSwgODEsIDgxLCAxMzcsIDgxLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDEzNywgODEsIDgxLCA4MSwgMTM3LCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIAotICAgIDAsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAKLSAgICAxMDQsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgODYsIDg2LCA4NiwgCi0gICAgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgCisgICAgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA0LCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDc4LCA3OCwgMTA5LCAxMTAsIDExMCwgMTExLCAxMTIsIDExMywgMjYsIAorICAgIDI2LCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDExNCwgMTE1LCAxMTYsIDExMywgMTE3LCAwLCAxMTMsIDExMywgCisgICAgMTE4LCAxMTgsIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDEyMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMjEsIDEyMiwgMTIzLCAxMTQsIDExNSwgMTE2LCAxMjQsIDEyNSwgMTI2LCAxMjYsIDEyNywgODYsIDgxLCA4MSwgCisgICAgODEsIDgxLCA4MSwgODYsIDgxLCA4MSwgODYsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTEwLCAxMjksIDEyOSwgMTEzLCAxMTgsIDExOCwgMTMwLCAxMTgsIDExOCwgMTE4LCAxMTgsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOSwgMTE4LCAxMTksIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE5LCAxMTMsIDExOCwgODEsIDgxLCA4MSwgODEsIAorICAgIDgxLCA4MSwgODEsIDEwOCwgMjYsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDEyMCwgMTIwLCA4MSwgODEsIDI2LCA4NiwgCisgICAgODEsIDgxLCA4NiwgMTE4LCAxMTgsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCisgICAgMTE4LCAxMTgsIDExOCwgMTMzLCAxMzMsIDExOCwgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAorICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDExNywgMTE4LCAxMzQsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDgxLCA4NiwgODEsIDgxLCAKKyAgICA4NiwgODEsIDgxLCA4NiwgODYsIDg2LCA4MSwgODYsIDg2LCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4MSwgODYsIDgxLCAKKyAgICA4NiwgODEsIDg2LCA4MSwgODEsIDAsIDAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDEzNywgMTM3LCAyNiwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM3LCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDgxLCA4MSwgCisgICAgODEsIDgxLCAxMzcsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDEzNywgODEsIDgxLCA4MSwgMTM3LCAKKyAgICA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIAorICAgIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgODYsIDg2LCA4NiwgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTgsIDAsIDExOCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAogICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIAotICAgIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgMTIxLCAxMjIsIDEyMywgODEsIDgxLCA4MSwgCi0gICAgODYsIDgxLCA4MSwgODYsIDg2LCA4MSwgODEsIDgxLCA4MSwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIAorICAgIDgxLCA4MSwgODYsIDg2LCA4NiwgMTIxLCAxMjIsIDEyMywgODEsIDgxLCA4MSwgODYsIDgxLCA4MSwgODYsIDg2LCA4MSwgCisgICAgODEsIDgxLCA4MSwgODEsIDEzNSwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzksIAotICAgIDE0MSwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgCi0gICAgMTM5LCAxMzksIDE0MiwgMTM5LCAxMzksIDQ4LCA4MSwgODYsIDgxLCA4MSwgMTM1LCAxMzUsIDEzNSwgMTQzLCAxNDMsIAotICAgIDE0MywgMTQzLCAxNDMsIDE0MywgMTQzLCAxNDMsIDQ4LCA0OCwgMTM1LCAxMzUsIDgzLCA4MywgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgNTMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAxMzUsIDEzOSwgMTM5LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDAsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAKLSAgICA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDE0NSwgNDgsIDE0NiwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMCwgMCwgMTM5LCAxMzksIDAsIDAsIDE0NywgMTQ3LCAxNDIsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxNDYsIDAsIDAsIDAsIDAsIDE0MywgMTQzLCAwLCAxNDMsIDQ4LCA0OCwgMTM1LCAxMzUsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgNDgsIDQ4LCA4NSwgODUsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDgwLCA4NSwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDQ4LCAxNDMsIDAsIDQ4LCAxNDMsIDAsIDQ4LCA0OCwgMCwgMCwgMTQ1LCAwLCAxMzksIDEzOSwgMTM5LCAxMzUsIAotICAgIDEzNSwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDAsIDAsIDEzNSwgMTM1LCAxNDIsIDAsIDAsIDAsIDEzNSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTQzLCAxNDMsIDE0MywgNDgsIDAsIDE0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxMzUsIDEzNSwgNDgsIDQ4LCA0OCwgMTM1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAxNDUsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMCwgMTM1LCAxMzUsIDEzOSwgMCwgMTM5LCAxMzksIDE0MiwgMCwgMCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgMTM1LCAxMzUsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMzUsIDEzOSwgMTM5LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgCi0gICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTQwLCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzOSwgMTQxLCA0OCwgMTM5LCAxMzksIDEzOSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTQyLCAxMzksIAorICAgIDEzOSwgNDgsIDgxLCA4NiwgODEsIDgxLCAxMzUsIDEzNSwgMTM1LCAxNDMsIDE0MywgMTQzLCAxNDMsIDE0MywgMTQzLCAKKyAgICAxNDMsIDE0MywgNDgsIDQ4LCAxMzUsIDEzNSwgODMsIDgzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDE0NCwgMTQ0LCAxNDQsIDgzLCA1MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMTM1LCAxMzksIDEzOSwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAxNDUsIDQ4LCAxNDYsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDAsIDAsIAorICAgIDEzOSwgMTM5LCAwLCAwLCAxNDcsIDE0NywgMTQyLCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ2LCAwLCAwLCAwLCAKKyAgICAwLCAxNDMsIDE0MywgMCwgMTQzLCA0OCwgNDgsIDEzNSwgMTM1LCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDQ4LCA0OCwgODUsIDg1LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICA4MCwgODUsIDAsIDAsIDAsIDAsIDAsIDEzNSwgMTM1LCAxMzksIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAorICAgIDAsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCisgICAgMTQzLCAwLCA0OCwgMTQzLCAwLCA0OCwgNDgsIDAsIDAsIDE0NSwgMCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDAsIDAsIAorICAgIDAsIDAsIDEzNSwgMTM1LCAwLCAwLCAxMzUsIDEzNSwgMTQyLCAwLCAwLCAwLCAxMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE0MywgMTQzLCAxNDMsIDQ4LCAwLCAxNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTM1LCAxMzUsIDQ4LCA0OCwgNDgsIDEzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMTQ1LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDAsIDEzNSwgMTM1LCAxMzksIDAsIDEzOSwgMTM5LCAxNDIsIDAsIDAsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDEzNSwgMTM1LCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCA4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEzNSwgMTM5LCAxMzksIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCAwLCAKKyAgICAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgMCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCAwLCAwLCAxNDUsIDQ4LCAxNDYsIDEzNSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDAsIDAsIDEzOSwgCiAgICAgMTQ3LCAwLCAwLCAxNDcsIDE0NywgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDksIDE0NiwgMCwgMCwgMCwgMCwgCkBAIC0xMzY5LDEyMyArMTQ5MCwxMjQgQEAKICAgICA0OCwgMCwgMCwgMCwgMCwgMTQ2LCAxMzksIDEzNSwgMTM5LCAxMzksIDAsIDAsIDAsIDEzOSwgMTM5LCAxMzksIDAsIDE0NywgCiAgICAgMTQ3LCAxNDcsIDE0MiwgMCwgMCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4NSwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOSwgMTM5LCAKKyAgICAxNDgsIDE0OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODUsIDI2LCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzOSwgMTM5LCAKICAgICAxMzksIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAKKyAgICA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIAogICAgIDAsIDAsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxMzksIDAsIDEzNSwgMTM1LCAxNTAsIDAsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUxLCAxNTIsIDAsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTM1LCAxMzUsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUxLCAxNTIsIDAsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIAogICAgIDAsIDQ4LCA0OCwgMTM1LCAxMzUsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCA4MCwgMCwgMCwgCisgICAgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDgwLCAwLCAKKyAgICAxMzUsIDEzOSwgMTM5LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgMCwgMCwgMTQ1LCA0OCwgMTM5LCAxNTQsIDE0NywgMTM5LCAxNDYsIDEzOSwgMTM5LCAwLCAxNTQsIDE0NywgCisgICAgMTQ3LCAwLCAxNDcsIDE0NywgMTM1LCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NiwgMTQ2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0OCwgMCwgNDgsIDQ4LCAxMzUsIDEzNSwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAwLCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgCiAgICAgMTM5LCAxMzksIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCAwLCAxNDUsIDQ4LCAxMzksIDE1NCwgMTQ3LCAxMzksIDE0NiwgMTM5LCAxMzksIDAsIDE1NCwgMTQ3LCAxNDcsIAotICAgIDAsIDE0NywgMTQ3LCAxMzUsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ2LCAxNDYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ4LCAwLCA0OCwgNDgsIDEzNSwgMTM1LCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDAsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM5LCAKLSAgICAxMzksIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCAxNDYsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDAsIDEzOSwgMTM5LCAKKyAgICAxMzksIDAsIDE0NywgMTQ3LCAxNDcsIDE0MiwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgODAsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDAsIDAsIDEzOSwgMTM5LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIAorICAgIDAsIDAsIDE1NSwgMCwgMCwgMCwgMCwgMTQ2LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMCwgMTM1LCAwLCAxMzksIDEzOSwgCisgICAgMTQ3LCAxMzksIDE0NywgMTQ3LCAxNDcsIDE0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAxMzksIDEzOSwgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgNDgsIDE0NiwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMCwgMTM5LCAxMzksIDEzOSwgMCwgCi0gICAgMTQ3LCAxNDcsIDE0NywgMTQyLCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0OCwgNDgsIDEzNSwgMTM1LCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDgwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICAwLCAwLCAxMzksIDEzOSwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAKLSAgICAxNTUsIDAsIDAsIDAsIDAsIDE0NiwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMCwgMTM5LCAxMzksIDE0NywgCi0gICAgMTM5LCAxNDcsIDE0NywgMTQ3LCAxNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEzOSwgMTM5LCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCA0OCwgMTU2LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE1NywgCi0gICAgMTU3LCAxNDIsIDAsIDAsIDAsIDAsIDg1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgMTM1LCAxNTgsIDE1OCwgMTU4LCAKLSAgICAxNTgsIDEzNSwgMTM1LCAxMzUsIDgzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAwLCA0OCwgMCwgMCwgNDgsIDQ4LCAKLSAgICAwLCA0OCwgMCwgMCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCAwLCAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICAxMzUsIDQ4LCAxNTYsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTU5LCAxNTksIDAsIDEzNSwgMTM1LCA0OCwgMCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCA1MywgMCwgMTYwLCAxNjAsIDE2MCwgMTYwLCAxMzUsIDEzNSwgMCwgMCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAxNTYsIDE1NiwgNDgsIDQ4LCAwLCAwLCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgNDgsIDE1NiwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNTcsIDE1NywgMTQyLCAwLCAwLCAwLCAwLCA4NSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNTMsIDEzNSwgMTU4LCAxNTgsIDE1OCwgMTU4LCAxMzUsIDEzNSwgMTM1LCA4MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA4MCwgODAsIDgwLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDE2MSwgODMsIAotICAgIDgzLCA4MywgODMsIDgzLCA4MywgODAsIDgzLCA4MCwgODAsIDgwLCA4NiwgODYsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCA4MCwgODYsIDgwLCA4NiwgODAsIDE2MiwgMTYzLCAxNjQsIDE2MywgCi0gICAgMTY0LCAxMzksIDEzOSwgNDgsIDQ4LCA0OCwgMTQzLCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDE0MywgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDE0MywgNDgsIDQ4LCA0OCwgNDgsIDE0MywgNDgsIDQ4LCA0OCwgNDgsIDE0MywgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQzLCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAxNjUsIAotICAgIDE2NiwgMTY3LCAxNjgsIDE2NywgMTY3LCAxNjksIDE2NywgMTY5LCAxNjYsIDE2NiwgMTY2LCAxNjYsIDEzNSwgMTM5LCAKLSAgICAxNjYsIDE2NywgODEsIDgxLCAxNDIsIDgzLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTY3LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTY3LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDE2NywgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNjcsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTY3LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNjcsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODYsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDAsIDgwLCA4MCwgODMsIDgzLCA4MywgODMsIDgzLCA4MCwgODAsIDgwLCA4MCwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgNDgsIDQ4LCAwLCA0OCwgMCwgMCwgNDgsIDQ4LCAwLCA0OCwgMCwgMCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCAKKyAgICAwLCAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDQ4LCAxNTYsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTU5LCAKKyAgICAxNTksIDAsIDEzNSwgMTM1LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA1MywgMCwgMTYwLCAxNjAsIDE2MCwgCisgICAgMTYwLCAxMzUsIDEzNSwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAKKyAgICAwLCAxNTYsIDE1NiwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgODAsIDgwLCA4MCwgODMsIDgzLCA4MywgCisgICAgODMsIDgzLCA4MywgODMsIDgzLCAxNjEsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgwLCA4MywgODAsIDgwLCA4MCwgODYsIAorICAgIDg2LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgODAsIDg2LCA4MCwgODYsIAorICAgIDgwLCAxNjIsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTM5LCAxMzksIDQ4LCA0OCwgNDgsIDE0MywgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDQ4LCA0OCwgNDgsIDQ4LCAxNDMsIDQ4LCA0OCwgNDgsIDQ4LCAxNDMsIDQ4LCA0OCwgNDgsIDQ4LCAxNDMsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCAxNDMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MywgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgMCwgMCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjcsIDE2NywgMTY5LCAxNjcsIDE2OSwgMTY2LCAxNjYsIAorICAgIDE2NiwgMTY2LCAxMzUsIDEzOSwgMTY2LCAxNjcsIDgxLCA4MSwgMTQyLCA4MywgODEsIDgxLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE2NywgMTM1LCAxMzUsIDEzNSwgMTM1LCAwLCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDE2NywgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNjcsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTY3LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDE2NywgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTY3LCAxMzUsIDEzNSwgMTM1LCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDg2LCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCAwLCA4MCwgODAsIDgzLCA4MywgODMsIDgzLCA4MywgODAsIDgwLCA4MCwgODAsIDgzLCAKKyAgICA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzNSwgMTQ5LCAxMzUsIAotICAgIDEzNSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTQ1LCAxMzksIDE0MiwgMTQyLCAxMzksIDEzOSwgMTM1LCAKLSAgICAxMzUsIDQ4LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCA4MywgODMsIAotICAgIDgzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzUsIDEzNSwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDEzNSwgMTM1LCAxMzUsIDQ4LCAxMzksIDEzOSwgMTM5LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDg2LCA0OCwgMTM5LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzNSwgODAsIDgwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgCisgICAgMTM5LCAxMzUsIDE0OSwgMTM1LCAxMzUsIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE0NSwgMTM5LCAxNDIsIAorICAgIDE0MiwgMTM5LCAxMzksIDEzNSwgMTM1LCA0OCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzUsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCA0OCwgMTM5LCAxMzksIDEzOSwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAKKyAgICAxMzksIDEzOSwgMTM5LCAxMzksIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAKKyAgICAxMzksIDEzOSwgMTM5LCA4NiwgNDgsIDEzOSwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxMzksIDEzOSwgMTM5LCAxMzUsIDgwLCA4MCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAogICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAotICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDAsIDQ0LCAwLCAwLCAwLCAwLCAwLCA0NCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAwLCA0NCwgMCwgMCwgMCwgMCwgMCwgNDQsIDAsIDAsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDgzLCA1MSwgNDgsIDQ4LCA0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgNTEsIDQ4LCA0OCwgNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDQ4LCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAotICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCA0OCwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKICAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCi0gICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgODEsIDgxLCAKLSAgICA4MSwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIAotICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAKKyAgICA4MSwgODEsIDgxLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDAsIDAsIDg0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNTA1LDM1NyArMTYyNywzNTkgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMTcyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2MywgMTY0LCAwLCAwLCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2MywgMTY0LCAKKyAgICAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCAxNzMsIDE3MywgMTczLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMTM1LCAxMzUsIDE0MiwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDQ4LCA0OCwgNDgsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgODMsIDgzLCA4MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgCi0gICAgMTQyLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgMCwgMTM1LCAxMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCisgICAgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDE0MiwgMTM1LCA4MywgODMsIDgzLCA1MywgODMsIDgzLCA4MywgODUsIDQ4LCA4MSwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIAorICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAKKyAgICAxMzgsIDg0LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzNSwgMTM1LCAxMzUsIDE3NCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM5LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzUsIAotICAgIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNDIsIDEzNSwgODMsIDgzLCAKLSAgICA4MywgNTMsIDgzLCA4MywgODMsIDg1LCA0OCwgODEsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAotICAgIDE1MywgMTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA4NCwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzUsIDEzNSwgMTM1LCAxNzQsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODgsIDQ4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDg4LCA0OCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIAotICAgIDEzOSwgMCwgMCwgMCwgMCwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgODcsIDgxLCA4NiwgCi0gICAgMCwgMCwgMCwgMCwgMjYsIDAsIDAsIDAsIDEzOCwgMTM4LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCAwLCAwLCAwLCAwLCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0OCwgCi0gICAgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODEsIDg2LCAxMzksIDEzOSwgMTM1LCAwLCAwLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzUsIDEzOSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAwLCAxNDIsIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCA4MSwgODEsIAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDg2LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDUzLCA4MywgODMsIDgzLCA4MywgCi0gICAgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgNDgsIDE0MCwgNDgsIAotICAgIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIDE0NiwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE0NywgMTM1LCAxNDcsIDEzOSwgMTM5LCAxNDcsIDE0NywgMTM1LCAxNDcsIDE3NSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIDgzLCAKLSAgICA4MywgODMsIDgzLCA4MywgODMsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MSwgODYsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAxMzUsIAotICAgIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxNzUsIDE0MiwgMTM5LCAxMzksIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKKyAgICAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMCwgMCwgMCwgMCwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKKyAgICAxMzksIDEzOSwgODcsIDgxLCA4NiwgMCwgMCwgMCwgMCwgMjYsIDAsIDAsIDAsIDEzOCwgMTM4LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ1LCAKLSAgICAxMzksIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNzUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTQ1LCAwLCAwLCAwLCA4MywgCi0gICAgODMsIDgzLCA4MywgODMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgCi0gICAgMCwgNDgsIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA4MywgODMsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDE0OCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODEsIDg2LCAxMzksIDEzOSwgMTM1LCAwLCAwLCA4MywgODMsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzUsIDEzOSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAwLCAxNDIsIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCA4MSwgCisgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDg2LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDUzLCA4MywgODMsIDgzLCAKKyAgICA4MywgODMsIDgzLCAwLCAwLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgxLCA4MSwgODYsIAorICAgIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzOSwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIDE0NiwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDE0NywgMTM1LCAxNDcsIDEzOSwgMTM5LCAxNDcsIDE0NywgMTM1LCAxNDcsIDE3NSwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MSwgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxNzUsIDE0MiwgMTM1LCAKKyAgICAxMzUsIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzNSwgCisgICAgMTM1LCAxMzUsIDE3NSwgMTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCA4MywgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIAorICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzksIDEzOSwgMTM1LCAxNDUsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCA4MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgCi0gICAgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MywgMTc2LCA4NiwgODYsIDg2LCA4NiwgODYsIAotICAgIDgxLCA4MSwgODYsIDg2LCA4NiwgODYsIDgxLCAxMzksIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDg2LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDgxLCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAwLCAwLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIAorICAgIDgzLCAxNzYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODEsIDgxLCA4NiwgODYsIDg2LCA4NiwgODEsIDEzOSwgMTc2LCAxNzYsIAorICAgIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCA0OCwgNDgsIDQ4LCA0OCwgODYsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgCisgICAgODEsIDQ4LCA0OCwgMCwgODEsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MSwgNTEsIDUxLCA1MywgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MywgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTMsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTEsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MSwgNTEsIDUxLCA1MSwgNTEsIAorICAgIDUxLCA1MSwgNTEsIDUzLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUzLCA1MSwgNTEsIAorICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MywgNTEsIAogICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAotICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgODEsIDgxLCA4NiwgODEsIAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgODEsIDE3NywgMTc4LCA4NiwgMTc5LCA4MSwgODEsIDgxLCA4MSwgCisgICAgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDUxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCisgICAgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCisgICAgNTEsIDUxLCA1MSwgNTEsIDgxLCA4MSwgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDgxLCAxNzcsIAorICAgIDE3OCwgODYsIDE3OSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCiAgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwLCA4NiwgCi0gICAgODEsIDg2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgMzUsIDE4MSwgNDcsIDQ3LCA0NCwgNDcsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAotICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMzgsIAotICAgIDM4LCAzOCwgMzgsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCAwLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAwLCAKLSAgICAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIAorICAgIDgxLCA4MSwgODEsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAxODAsIDg2LCA4MSwgODYsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgCisgICAgNDMsIDQzLCA0MywgNDMsIDQzLCAzNSwgMTgxLCA0NywgNDcsIDQ0LCA0NywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDMsIAogICAgIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCA0MywgNDMsIAogICAgIDQzLCA0MywgNDMsIDAsIDAsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIAotICAgIDQzLCA0MywgMCwgMzgsIDAsIDM4LCAwLCAzOCwgMCwgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIAotICAgIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCAKLSAgICA0MywgMTgyLCA0MywgMTgyLCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAotICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTg0LCAKLSAgICAxODMsIDU4LCAxODIsIDU4LCA1OCwgNzYsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4NCwgMzgsIDE4NCwgMTgzLCAKLSAgICA3NiwgNzYsIDc2LCA0MywgNDMsIDQzLCAxODIsIDAsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTg0LCAwLCA3NiwgNzYsIAotICAgIDc2LCA0MywgNDMsIDQzLCAxODIsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIDM4LCA3NiwgMTg1LCAxODUsIAotICAgIDAsIDAsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4NCwgMzgsIDE4NCwgMTgzLCAxODUsIDU4LCAwLCAxODYsIDE4NiwgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTc0LCAxNzQsIDE3NCwgMTg4LCAxODksIAotICAgIDE5MCwgMTkxLCA4NCwgMTkwLCAxOTAsIDE5MCwgMjIsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTMsIDE5NCwgMTk1LCAKLSAgICAxOTYsIDIyLCAyMiwgMjIsIDEzOCwgMTk3LCAxOTcsIDE5NywgMjIsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIAotICAgIDIwNCwgMjEsIDIwNSwgMTEwLCAyMDUsIDIwNiwgMjA3LCAyMiwgMTkyLCAxOTIsIDEzOCwgMjgsIDM2LCAyMiwgMTkyLCAKLSAgICAxMzgsIDE5NywgMjA4LCAyMDgsIDEzOCwgMTM4LCAxMzgsIDIwOSwgMTYzLCAxNjQsIDE5MiwgMTkyLCAxOTIsIDEzOCwgCi0gICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA3OCwgMTM4LCAyMDgsIDEzOCwgMTM4LCAxOTIsIDEzOCwgMTM4LCAKLSAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTg3LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMCwgMjEwLCAyMTEsIDIxMiwgCi0gICAgMjEzLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAyMTQsIDUxLCAwLCAwLCAzNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAKLSAgICAyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIxNCwgMzQsIDM0LCAzNCwgMzQsIDIxNCwgMjE0LCAyMTQsIAotICAgIDIxNCwgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMCwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCi0gICAgNTEsIDUxLCA1MSwgNTEsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMjIwLCAyMjEsIDg1LCAKLSAgICA4NSwgMjMsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCAxNzYsIDE3NiwgCi0gICAgODEsIDgxLCA4MSwgODEsIDE3NiwgMTc2LCAxNzYsIDgxLCA4MSwgODIsIDgyLCA4MiwgODIsIDgxLCA4MiwgODIsIDgyLCAKLSAgICAxNzYsIDE3NiwgODEsIDg2LCA4MSwgMTc2LCAxNzYsIDg2LCA4NiwgODYsIDg2LCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIyLCAyMjIsIDQ5LCAyMjMsIDI2LCAyMjMsIDIyMiwgNDksIDI2LCAyMjMsIDM1LCAKLSAgICA0OSwgNDksIDQ5LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ2LCAyNiwgNDksIDIyMywgMjYsIDc4LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDI2LCAyNiwgMjIyLCAyMjMsIDIyMywgMjYsIDQ5LCAyNiwgMjI0LCAyNiwgNDksIDI2LCAxODQsIDIyNCwgNDksIDQ5LCAKLSAgICAyMjUsIDM1LCA0OSwgNDksIDQ0LCA0OSwgMzUsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMzUsIDI2LCAyMjIsIDM1LCAzNSwgNDksIAotICAgIDQ5LCAyMjYsIDc4LCA3OCwgNzgsIDc4LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDI2LCA3OCwgMjYsIDI2LCA0NywgODAsIDIyNywgCi0gICAgMjI3LCAyMjcsIDM3LCAzNywgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDIyNywgMzcsIDM3LCAzNywgMzcsIDIyNywgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIyOSwgCi0gICAgMjI5LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMjksIAotICAgIDIyOSwgMjI5LCAyMjksIDE3MywgMTczLCAxNzMsIDQ0LCA0NywgMTczLCAxNzMsIDE3MywgMTczLCAzNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDIzMCwgMjMwLCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzAsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMSwgMjMwLCAyMzAsIDI2LCAyNiwgNDAsIDI2LCA0MCwgCisgICAgNDMsIDQzLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCisgICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCAwLCAzOCwgMzgsIDM4LCAKKyAgICAzOCwgMzgsIDM4LCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDM4LCAwLCAzOCwgMCwgMzgsIDAsIAorICAgIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIAorICAgIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgMCwgMCwgNDMsIDQzLCAKKyAgICA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCAKKyAgICA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCAKKyAgICA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCAKKyAgICA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgMTgzLCA1OCwgMTgyLCA1OCwgNTgsIDc2LCA0MywgNDMsIAorICAgIDQzLCAwLCA0MywgNDMsIDM4LCAxODQsIDM4LCAxODQsIDE4MywgNzYsIDc2LCA3NiwgNDMsIDQzLCA0MywgMTgyLCAwLCAwLCAKKyAgICA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgMCwgNzYsIDc2LCA3NiwgNDMsIDQzLCA0MywgMTgyLCA0MywgNDMsIDQzLCA0MywgCisgICAgMzgsIDM4LCAzOCwgMTg0LCAzOCwgNzYsIDE4NSwgMTg1LCAwLCAwLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODQsIAorICAgIDM4LCAxODQsIDE4MywgMTg1LCA1OCwgMCwgMTg2LCAxODYsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCisgICAgMTg3LCAxODcsIDE3NCwgMTc0LCAxNzQsIDE4OCwgMTg5LCAxOTAsIDE5MSwgODQsIDE5MCwgMTkwLCAxOTAsIDIyLCAxOTIsIAorICAgIDE5MywgMTk0LCAxOTUsIDE5NiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAyMiwgMjIsIDIyLCAxMzgsIDE5NywgMTk3LCAxOTcsIAorICAgIDIyLCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIxLCAyMDUsIDExMCwgMjA1LCAyMDYsIDIwNywgMjIsIAorICAgIDE5MiwgMTkyLCAxMzgsIDI4LCAzNiwgMjIsIDE5MiwgMTM4LCAxOTcsIDIwOCwgMjA4LCAxMzgsIDEzOCwgMTM4LCAyMDksIAorICAgIDE2MywgMTY0LCAxOTIsIDE5MiwgMTkyLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgNzgsIDEzOCwgCisgICAgMjA4LCAxMzgsIDEzOCwgMTkyLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE4NywgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDAsIDIxMCwgMjExLCAyMTIsIDIxMywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMjE0LCAKKyAgICA1MSwgMCwgMCwgMzQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMTQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDAsIDUxLCAKKyAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgCisgICAgODUsIDg1LCA4NSwgODUsIDIyMCwgMjIxLCA4NSwgODUsIDIzLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAKKyAgICA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDE3NiwgMTc2LCA4MSwgODEsIDgxLCA4MSwgMTc2LCAxNzYsIDE3NiwgODEsIDgxLCAKKyAgICA4MiwgODIsIDgyLCA4MiwgODEsIDgyLCA4MiwgODIsIDE3NiwgMTc2LCA4MSwgODYsIDgxLCAxNzYsIDE3NiwgODYsIDg2LCAKKyAgICA4NiwgODYsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjIsIDIyMiwgNDksIAorICAgIDIyMywgMjYsIDIyMywgMjIyLCA0OSwgMjYsIDIyMywgMzUsIDQ5LCA0OSwgNDksIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDYsIAorICAgIDI2LCA0OSwgMjIzLCAyNiwgNzgsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMjYsIDI2LCAyMjIsIDIyMywgMjIzLCAyNiwgNDksIAorICAgIDI2LCAyMjQsIDI2LCA0OSwgMjYsIDE4NCwgMjI0LCA0OSwgNDksIDIyNSwgMzUsIDQ5LCA0OSwgNDQsIDQ5LCAzNSwgMTU2LCAKKyAgICAxNTYsIDE1NiwgMTU2LCAzNSwgMjYsIDIyMiwgMzUsIDM1LCA0OSwgNDksIDIyNiwgNzgsIDc4LCA3OCwgNzgsIDQ5LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMjYsIDc4LCAyNiwgMjYsIDQ3LCA4MCwgMjI3LCAyMjcsIDIyNywgMzcsIDM3LCAyMjcsIDIyNywgMjI3LCAKKyAgICAyMjcsIDIyNywgMjI3LCAzNywgMzcsIDM3LCAzNywgMjI3LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAorICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjksIDIyOSwgMjI5LCAyMjksIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKKyAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIyOSwgMjI5LCAyMjksIDIyOSwgMTczLCAxNzMsIDE3MywgNDQsIAorICAgIDQ3LCAxNzMsIDE3MywgMTczLCAxNzMsIDM3LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMzAsIAorICAgIDMwLCAzMCwgMzAsIDMwLCAyMzAsIDIzMCwgMjYsIDI2LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDc4LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA0MCwgMjMyLCAyMzMsIDIzMywgMjM0LCA3OCwgNzgsIDQwLCAyMzMsIDIzNCwgCi0gICAgMjMyLCAyMzMsIDIzNCwgMjMyLCA3OCwgNDAsIDc4LCAyMzMsIDIzNSwgMjM2LCA3OCwgMjMzLCAyMzIsIDc4LCA3OCwgNzgsIAotICAgIDIzMywgMjMyLCAyMzIsIDIzMywgNDAsIDIzMywgMjMzLCAyMzIsIDIzMiwgNDAsIDIzNCwgNDAsIDIzNCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDIzMywgMjM3LCAyMjYsIDIzMywgMjI2LCAyMjYsIDIzMiwgMjMyLCAyMzIsIDQwLCA0MCwgNDAsIDQwLCA3OCwgMjMyLCAKLSAgICA3OCwgMjMyLCAyMzMsIDIzMywgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzMsIAotICAgIDIzNCwgMjMyLCAyMzIsIDIzMywgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzMsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjM4LCA0MCwgMjM0LCA3OCwgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzIsIAotICAgIDIzMiwgMjMzLCAyMzMsIDc4LCAyMzAsIDIzOCwgMjM4LCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzIsIDIzMiwgCi0gICAgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzMsIDIzMywgMjM0LCAyMzQsIAotICAgIDIzMywgMjMzLCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgCi0gICAgNDAsIDc4LCA3OCwgMjMyLCA0MCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDQwLCAKLSAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCi0gICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzMsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAKLSAgICAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzQsIDIzNCwgNzgsIDc4LCAyMzIsIDIzMiwgCi0gICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTYzLCAxNjQsIDE2MywgMTY0LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMiwgMjMyLCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjM5LCAyNDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDIzMSwgMjMwLCAyMzAsIDI2LCAyNiwgNDAsIDI2LCA0MCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDQwLCAKKyAgICAyMzIsIDIzMywgMjMzLCAyMzQsIDc4LCA3OCwgNDAsIDIzMywgMjM0LCAyMzIsIDIzMywgMjM0LCAyMzIsIDc4LCA0MCwgNzgsIAorICAgIDIzMywgMjM1LCAyMzYsIDc4LCAyMzMsIDIzMiwgNzgsIDc4LCA3OCwgMjMzLCAyMzIsIDIzMiwgMjMzLCA0MCwgMjMzLCAKKyAgICAyMzMsIDIzMiwgMjMyLCA0MCwgMjM0LCA0MCwgMjM0LCA0MCwgNDAsIDQwLCA0MCwgMjMzLCAyMzcsIDIyNiwgMjMzLCAyMjYsIAorICAgIDIyNiwgMjMyLCAyMzIsIDIzMiwgNDAsIDQwLCA0MCwgNDAsIDc4LCAyMzIsIDc4LCAyMzIsIDIzMywgMjMzLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzMywgMjM0LCAyMzIsIDIzMiwgMjMzLCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDIzMywgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAKKyAgICAyMzgsIDQwLCAyMzQsIDc4LCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMiwgMjMyLCAyMzMsIDIzMywgNzgsIDIzMCwgMjM4LCAKKyAgICAyMzgsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzMywgMjMzLCAyMzQsIDIzNCwgMjMzLCAyMzMsIDIzNCwgMjM0LCAyMzIsIAorICAgIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA0MCwgNzgsIDc4LCAyMzIsIDQwLCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNDAsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMywgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjM0LCAyMzQsIDIzNCwgMjM0LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAxNjMsIDE2NCwgMTYzLCAxNjQsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMyLCAyMzIsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzksIAorICAgIDI0MCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAyNiwgNzgsIDI2LCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAyNiwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDgwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDgwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKICAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDI0MSwgMjQxLCAKICAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCiAgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAogICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKICAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDIyNywgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAotICAgIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAKLSAgICAyNDIsIDI0MiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyMjcsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCisgICAgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKLSAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKLSAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKLSAgICAzMCwgMzAsIDI2LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAzMCwgMzAsIDI2LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAzMCwgMzAsIDI2LCAyNiwgMzAsIDQwLCAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAyNiwgMjYsIDMwLCA0MCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDMwLCAzMCwgMzAsIDI2LCAyNiwgMzAsIDI2LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDMwLCAzMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAzMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAKLSAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAKLSAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDI2LCAzMCwgMzAsIDMwLCAKLSAgICAyNiwgMzAsIDMwLCAzMCwgMzAsIDI2LCAzMCwgMzAsIDI2LCA0MCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAzMCwgMzAsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKKyAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKKyAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDI2LCAKKyAgICAyNiwgMzAsIDMwLCAzMCwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDI2LCAKKyAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDI2LCAKKyAgICAyNiwgMzAsIDQwLCAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAyNiwgMjYsIDMwLCA0MCwgMjYsIDI2LCAyNiwgMjYsIDMwLCAKKyAgICAzMCwgMzAsIDI2LCAyNiwgMzAsIDI2LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAzMCwgMjYsIDI2LCAyNiwgMjYsIDMwLCAKKyAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAzMCwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAzMCwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODAsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDI2LCAzMCwgMzAsIDMwLCAKLSAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjYsIDMwLCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKLSAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAzMCwgMjYsIDMwLCAzMCwgMzAsIDI2LCAzMCwgMzAsIAorICAgIDMwLCAzMCwgMjYsIDMwLCAzMCwgMjYsIDQwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIAorICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MCwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMzAsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjYsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAorICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyNiwgMzAsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAorICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgCi0gICAgMTYzLCAxNjQsIDE2MywgMTY0LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIAorICAgIDE2MywgMTY0LCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDE1MywgMTUzLCAKICAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCi0gICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzIsIDc4LCA3OCwgCi0gICAgMjMyLCAyMzIsIDE2MywgMTY0LCA3OCwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIAotICAgIDIzMiwgMjMyLCAyMzIsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMyLCA3OCwgNzgsIDIzMiwgCisgICAgMjMyLCAxNjMsIDE2NCwgNzgsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCA5LCAxMCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMTYzLCAKKyAgICAxNjQsIDksIDEwLCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAKKyAgICAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgCisgICAgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjI2LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDc4LCA3OCwgMjMyLCA3OCwgMjMyLCA3OCwgNzgsIDIzMiwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDE2MywgMTY0LCA5LCAxMCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIAotICAgIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKLSAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCi0gICAgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAKLSAgICAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgMTYzLCAxNjQsIDE2MywgMTY0LCAyMzIsIDc4LCA3OCwgNzgsIAotICAgIDc4LCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIyNiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKLSAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIAotICAgIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgNzgsIDIzMiwgNzgsIDc4LCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAKLSAgICAyMjYsIDIxNiwgMjE2LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjI2LCAyMTYsIAorICAgIDIxNiwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKICAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCiAgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAotICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKLSAgICA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAyMzIsIAogICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKLSAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDI0MywgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgCi0gICAgMjMyLCAyMzIsIDc4LCAyMzIsIDc4LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgMjQzLCA3OCwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgNzgsIDIzMiwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCAyNiwgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgMjYsIDI2LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCiAgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgMCwgNDcsIDQ3LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ0LCA0NywgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NCwgCi0gICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgNDcsIDQ0LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA1MSwgNTEsIDQ0LCA0NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCi0gICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCi0gICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCi0gICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCi0gICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCi0gICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ3LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCA0NCwgNDcsIDQ0LCA0NywgODEsIDgxLCA4MSwgNDQsIDQ3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDE1MywgMTM4LCAxMzgsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDAsIDQ0LCA0NywgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDcsIDQ0LCA0NywgNDcsIDQ0LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MSwgNTEsIDQ0LCA0NCwgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgCisgICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ3LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA0NCwgNDcsIDQ0LCA0NywgCisgICAgODEsIDgxLCA4MSwgNDQsIDQ3LCAwLCAwLCAwLCAwLCAwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE1MywgMTM4LCAxMzgsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgCi0gICAgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMCwgNDcsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDE0MiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgODMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAogICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDEzOCwgMTM4LCAyOCwgMzYsIDI4LCAzNiwgMTM4LCAxMzgsIDEzOCwgMjgsIDM2LCAxMzgsIDI4LCAzNiwgMTM4LCAxMzgsIAotICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDEzOCwgMTM4LCA4NCwgMTM4LCAyOCwgMzYsIDEzOCwgCi0gICAgMTM4LCAyOCwgMzYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAotICAgIDEzOCwgNTIsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDg0LCAwLCAwLCAKKyAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDEzOCwgMTM4LCAyOCwgMzYsIDI4LCAzNiwgMTM4LCAxMzgsIDEzOCwgCisgICAgMjgsIDM2LCAxMzgsIDI4LCAzNiwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIAorICAgIDEzOCwgMTM4LCA4NCwgMTM4LCAyOCwgMzYsIDEzOCwgMTM4LCAyOCwgMzYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAKKyAgICAxNjQsIDE2MywgMTY0LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgNTIsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDg0LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDg0LCAxMzgsIDE5NSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKICAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCi0gICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ1LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ1LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKICAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCiAgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAogICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKICAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCiAgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAotICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKICAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCiAgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAogICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKQEAgLTE4NzAsNjMgKzE5OTQsNjIgQEAKICAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCiAgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAogICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKLSAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAotICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAyNDYsIDI0NywgMjQ3LCAyNDcsIAotICAgIDI0NCwgMjQ4LCAxNzAsIDI0OSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAKLSAgICAyNDQsIDI0NCwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NCwgCi0gICAgMjQ0LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNTUsIDI1NiwgMjU3LCAyNTgsIAotICAgIDI1OSwgMjU5LCAyNTIsIDI0OCwgMjQ4LCAyNDgsIDI0OCwgMjQ4LCAyNDUsIDI0NCwgMjYwLCAyNjAsIDI2MCwgMjQ4LCAKLSAgICAxNzAsIDI0NywgMjQ0LCAyNiwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDI0NiwgMjQ3LCAyNDcsIDI0NywgMjQ0LCAyNDgsIDE3MCwgMjQ5LCAyNTAsIDI1MSwgCisgICAgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI0NCwgMjQ0LCAyNTAsIDI1MSwgMjUwLCAyNTEsIAorICAgIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU0LCAyNDQsIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAKKyAgICAyNDksIDI0OSwgMjQ5LCAyNDksIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNTksIDI1MiwgMjQ4LCAyNDgsIDI0OCwgCisgICAgMjQ4LCAyNDgsIDI0NSwgMjQ0LCAyNjAsIDI2MCwgMjYwLCAyNDgsIDE3MCwgMjQ3LCAyNDQsIDI2LCAwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIAogICAgIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAKLSAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAyNjEsIDE3MCwgCi0gICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIAotICAgIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIAorICAgIDE3MCwgMjYxLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMCwgCisgICAgMCwgMjYyLCAyNjIsIDI2MywgMjYzLCAyNDgsIDI2NCwgMjY1LCAyNTIsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgCisgICAgMTcwLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIAorICAgIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMCwgMCwgMjYyLCAyNjIsIDI2MywgMjYzLCAyNDgsIDI2NCwgMjY1LCAKLSAgICAyNTIsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDE3MCwgCi0gICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIAotICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgCi0gICAgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNDcsIDI0OCwgMjQ4LCAyNjQsIDI2NSwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDI2MSwgMTcwLCAxNzAsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjQ3LCAyNDgsIDI0OCwgMjY0LCAyNjUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAogICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKICAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCiAgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAogICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKICAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCiAgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAotICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMCwgMjY2LCAyNjYsIDI2NywgMjY3LCAKLSAgICAyNjcsIDI2NywgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAxNzAsIDE3MCwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAwLCAyNjYsIDI2NiwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKICAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCiAgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAotICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI2OCwgMjY4LCAyNjgsIAogICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNDUsIDI0NSwgMCwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCi0gICAgMjY3LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAwLCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCiAgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNDUsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY5LCAyNjksIAorICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI0NSwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKKyAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCiAgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAKLSAgICAyNDUsIDI0NSwgMjY2LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNDUsIDI2NiwgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKICAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCiAgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKKyAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAogICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKICAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDAsIDI2OCwgCiAgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAogICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKICAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCkBAIC0xOTM0LDE3ICsyMDU3LDE4IEBACiAgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAogICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKICAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNDUsIAotICAgIDI0NSwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAogICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKICAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCiAgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAogICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKICAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCiAgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNDUsIDI0NSwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI2OCwgCiAgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI0NSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIApAQCAtMTk1NywyMCArMjA4MSwyMCBAQAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgCisgICAgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMjYsIDI2LCAyNiwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIApAQCAtMTk3OSwxNCArMjEwMywxNCBAQAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMTcwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKICAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCiAgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAogICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKLSAgICAyNDQsIDI0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCA1MywgNTMsIDUzLCA1MywgCi0gICAgNTMsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDEzOCwgMTM4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAKKyAgICA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCAxMzgsIDEzOCwgCiAgICAgMTM4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCkBAIC0xOTk0LDc3ICsyMTE4LDgwIEBACiAgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCiAgICAgNDQsIDQ3LCA0OCwgODEsIDgyLCA4MiwgODIsIDEzOCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAogICAgIDEzOCwgNTIsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCAKLSAgICA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTEsIDUxLCA4MSwgODEsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCA4MSwgODEsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCAKLSAgICA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTQsIDU0LCAKLSAgICA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ3LCA0NywgNDQsIDQ3LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgODEsIDgxLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIAorICAgIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTQsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDU0LCA1NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NywgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAogICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIAotICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ0LCA0NywgNDQsIAotICAgIDQ3LCA0NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUyLCAyNzEsIDI3MSwgNDQsIDQ3LCA0NCwgCi0gICAgNDcsIDAsIDQ0LCA0NywgNDQsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDcsIDQ0LCAKLSAgICA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDQsIAorICAgIDQ3LCA0NCwgNDcsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTIsIDI3MSwgMjcxLCA0NCwgCisgICAgNDcsIDQ0LCA0NywgNDgsIDQ0LCA0NywgNDQsIDQ3LCA0NywgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCisgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ0LCA0NCwgNDQsIDAsIDAsIDQ0LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIDUxLCA0NywgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDEzNSwgNDgsIDQ4LCA0OCwgMTQyLCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDUxLCA1MSwgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDQ4LCA0OCwgNDgsIDE0MiwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDEzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzOSwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDgwLCA4MCwgODUsIDIyNSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzksIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCA4MCwgODAsIDg1LCAyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM4LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzksIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTM5LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKKyAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4MywgODMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKKyAgICA4MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDgzLCA4MywgNDgsIDgzLCA0OCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM5LCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA4MywgODMsIDgzLCA0OCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDg2LCAKLSAgICA4NiwgODYsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCAxNzAsIAorICAgIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgODYsIDg2LCA4NiwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgCi0gICAgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgCi0gICAgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTc1LCA4MywgODMsIAotICAgIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAKKyAgICAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTc1LCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIAorICAgIDgzLCA4MywgMCwgNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgCisgICAgMCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgNTMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgCiAgICAgMTM5LCAxMzksIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAxMzUsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzksIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODAsIDgwLCA4MCwgCi0gICAgNDgsIDEzOSwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAxMzksIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MSwgCi0gICAgNDgsIDgxLCA4MSwgODYsIDQ4LCA0OCwgODEsIDgxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgxLCA4MSwgNDgsIDgxLCA0OCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDgsIDQ4LCA1MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM1LCAKLSAgICAxMzUsIDEzOSwgMTM5LCA4MywgODMsIDQ4LCA1MywgNTMsIDEzOSwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDgxLCA0OCwgODEsIDgxLCA4NiwgNDgsIDQ4LCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODEsIDgxLCA0OCwgCisgICAgODEsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0OCwgNDgsIDUzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIDgzLCA4MywgNDgsIDUzLCA1MywgMTM5LCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDI3MSwgCisgICAgNTEsIDUxLCA1MSwgNTEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgODMsIDEzOSwgCiAgICAgMTQyLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIApAQCAtMjE1OSw3ICsyMjg2LDcgQEAKICAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCiAgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAogICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKLSAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxOTUsIDI3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMjc5LCAxOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKICAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCiAgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIApAQCAtMjE3MywxMiArMjMwMCwxMiBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCiAgICAgMTMxLCAxMzEsIDI4MCwgMjYsIDAsIDAsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MiwgMjgzLCAyODEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODEsIAotICAgIDI4NCwgMjg0LCAyODUsIDI4NSwgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAKLSAgICAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyNDcsIDI0NywgMjgyLCAyODMsIDI4MSwgMjgxLCAyODEsIDI4MSwgCi0gICAgMjg1LCAyODUsIDI4NSwgMjg2LCAyODEsIDI4NiwgMCwgMjgxLCAyODYsIDI4MSwgMjgxLCAyODQsIDI4NywgMjg4LCAyODcsIAotICAgIDI4OCwgMjg3LCAyODgsIDI4OSwgMjgxLCAyODEsIDI5MCwgMjkxLCAyOTIsIDI5MiwgMjkzLCAwLCAyODEsIDI5NCwgMjg5LCAKLSAgICAyODEsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDExOCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4MSwgCisgICAgODEsIDI4MSwgMjg0LCAyODQsIDI4NSwgMjg1LCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAKKyAgICAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI0NywgMjQ3LCAyODIsIDI4MywgMjgxLCAyODEsIDI4MSwgCisgICAgMjgxLCAyODUsIDI4NSwgMjg1LCAyODYsIDI4MSwgMjg2LCAwLCAyODEsIDI4NiwgMjgxLCAyODEsIDI4NCwgMjg3LCAyODgsIAorICAgIDI4NywgMjg4LCAyODcsIDI4OCwgMjg5LCAyODEsIDI4MSwgMjkwLCAyOTEsIDI5MiwgMjkyLCAyOTMsIDAsIDI4MSwgMjk0LCAKKyAgICAyODksIDI4MSwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTE4LCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCiAgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAogICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKICAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCkBAIC0yMTg4LDcyICsyMzE1LDc5IEBACiAgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAogICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKICAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCi0gICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAxNzQsIDAsIDI5NSwgMjk1LCAyOTYsIDI5NywgMjk2LCAyOTUsIDI5NSwgMjk4LCAKLSAgICAyOTksIDI5NSwgMzAwLCAzMDEsIDMwMiwgMzAxLCAzMDEsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgCi0gICAgMzAzLCAzMDMsIDMwMywgMzAxLCAyOTUsIDMwNCwgMzA1LCAzMDQsIDI5NSwgMjk1LCAzMDYsIDMwNiwgMzA2LCAzMDYsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAxNzQsIDAsIDI5NSwgMjk1LCAyOTYsIDI5NywgMjk2LCAyOTUsIDI5NSwgCisgICAgMjk4LCAyOTksIDI5NSwgMzAwLCAzMDEsIDMwMiwgMzAxLCAzMDEsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIAorICAgIDMwMywgMzAzLCAzMDMsIDMwMywgMzAxLCAyOTUsIDMwNCwgMzA1LCAzMDQsIDI5NSwgMjk1LCAzMDYsIDMwNiwgMzA2LCAKICAgICAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgCi0gICAgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDI5OCwgMjk1LCAyOTksIDMwNywgMzA4LCAzMDcsIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAyOTgsIDMwNSwgCi0gICAgMjk5LCAzMDUsIDI5OCwgMjk5LCAzMTAsIDMxMSwgMzEyLCAzMTAsIDMxMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAotICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTQsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAyOTgsIDI5NSwgMjk5LCAzMDcsIDMwOCwgCisgICAgMzA3LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAorICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMjk4LCAKKyAgICAzMDUsIDI5OSwgMzA1LCAyOTgsIDI5OSwgMzEwLCAzMTEsIDMxMiwgMzEwLCAzMTAsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAogICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKICAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCi0gICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTQsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTQsIDMxMywgMzEzLCAKICAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCi0gICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIAotICAgIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAotICAgIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDAsIDI5NywgCi0gICAgMjk3LCAzMDUsIDMwNywgMzE1LCAyOTcsIDI5NywgMCwgMzE2LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNiwgMzE2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDMxOCwgMzE4LCAyNiwgMzAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDAsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDAsIDAsIAorICAgIDAsIDI5NywgMjk3LCAzMDUsIDMwNywgMzE1LCAyOTcsIDI5NywgMCwgMzE2LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNiwgCisgICAgMzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDMxOCwgMzE4LCAyNiwgMzAsIDAsIDAsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCAwLCAwLCAwLCAwLCA4MywgMTM4LCA4MywgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDgzLCAxMzgsIDgzLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAKICAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCiAgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgCisgICAgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCiAgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAogICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKICAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCi0gICAgMzE5LCAzMTksIDE1MywgMTUzLCAxNTMsIDE1MywgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNTMsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTUzLCAxNTMsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NiwgMCwgMCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA4MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODYsIDMyMCwgMzIwLCAzMjAsIAorICAgIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAKKyAgICAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgODEsIDgxLCA4MSwgODEsIDgxLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA4MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKICAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKICAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKQEAgLTIyNjYsMjk4ICsyNDAwLDQ4NyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDEwNywgMCwgMTA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMTA3LCAwLCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAxMDcsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAxMDcsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMCwgMTA0LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA3LCAxMDcsIDEwNywgMCwgMTA0LCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDMyMiwgMzIyLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgCisgICAgMzIxLCAzMjEsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgCi0gICAgMzIwLCAwLCAwLCAwLCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjEsIDMyMSwgCisgICAgMzIxLCAzMjEsIDMyMSwgMzIxLCAwLCAwLCAwLCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAwLCAwLCAwLCAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAzMjEsIDMyMSwgMTA3LCAxMDcsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMCwgMCwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgCisgICAgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAxMDcsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAxMzUsIDg2LCAxMzUsIAorICAgIDgxLCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDgxLCAxNzYsIDg2LCAwLCAwLCAwLCAKKyAgICAwLCAxNDIsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMzIxLCAzMjEsIDEwNCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDMyMSwgMzIxLCAzMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjIsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgODEsIDg2LCAwLCAwLCAwLCAwLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAxMzgsIDEzOCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgCisgICAgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDcsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAxMzUsIDg2LCAxMzUsIDgxLCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgODEsIDE3NiwgODYsIDAsIDAsIDAsIDAsIDE0MiwgCi0gICAgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMTA0LCAKLSAgICAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjAsIDMyMCwgCi0gICAgMTA0LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAKLSAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMCwgMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMCwgMCwgMCwgMCwgMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgCisgICAgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIAorICAgIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAKKyAgICAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKKyAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCisgICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAorICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKLSAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgCi0gICAgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAwLCAxMzksIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNSwgMzI1LCAzMjUsIDMyNSwgMzI1LCAzMjUsIAorICAgIDMyNSwgMzI1LCAzMjUsIDMyNSwgMzI1LCAzMjUsIDMyNSwgMzI1LCAzMjUsIDMyNSwgMzI1LCAzMjUsIDMyNSwgMzI1LCAKKyAgICAzMjUsIDMyNSwgMzI1LCAzMjUsIDMyNSwgMzI1LCAzMjUsIDMyNSwgMzI1LCAzMjUsIDMyNSwgMCwgMTM5LCAxMzUsIDEzOSwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE0MiwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgCi0gICAgODMsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKLSAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDE0MiwgMTQxLCA4MywgODMsIDE4OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDgxLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDE0OSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzNSwgMTUwLCAxNTAsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDE0MiwgMTQyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCAKLSAgICA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NSwgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDgzLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIAotICAgIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTc1LCAxNDUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNDIsIDgzLCAKKyAgICA4MywgODMsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAorICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNDIsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDE0MiwgMTQxLCA4MywgODMsIDE4OCwgODMsIAorICAgIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0OSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzNSwgCisgICAgMTUwLCAxNTAsIDEzNSwgMTM1LCAxMzUsIDE0MiwgMTQyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDE0NCwgMTQ0LCAxNDQsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgODMsIAorICAgIDgzLCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM5LCAxNzUsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCA4MywgODMsIDE0NSwgMTM1LCAxMzUsIAorICAgIDgzLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDQ4LCA4MywgNDgsIAorICAgIDgzLCA4MywgODMsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAKKyAgICAxMzksIDEzNSwgMTc1LCAxNDUsIDEzNSwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTQ1LCAxNDIsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgMTM5LCAwLCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMTQ1LCA0OCwgMTQ2LCAKKyAgICAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM5LCAwLCAwLCAxMzksIDEzOSwgMCwgMCwgMTQ3LCAxNDcsIDE3NSwgMCwgMCwgCisgICAgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NiwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgCisgICAgMCwgMCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgxLCA4MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTQ2LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNDksIDE0NywgMTQ3LCAxNDYsIAorICAgIDE0NywgMTM1LCAxMzUsIDEzOSwgMTQyLCAxNDUsIDQ4LCA0OCwgODMsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ2LCAxMzksIAorICAgIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAwLCAwLCAxMzksIDEzOSwgMTQ3LCAxNDcsIDEzNSwgMTM1LCAxMzksIDE0MiwgCisgICAgMTQ1LCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIAorICAgIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTQyLCAxMzUsIDgzLCA4MywgCisgICAgODMsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTc1LCAxNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTQyLCAwLCAKKyAgICAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0OCwgMTQ4LCA4MywgCisgICAgODMsIDgzLCA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgODMsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCA4MywgODMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCAKKyAgICA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgzLCA4MywgODMsIDgzLCA4MywgODAsIDgwLCA4MCwgODAsIAorICAgIDUzLCA1MywgNTMsIDUzLCA4MywgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAogICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKICAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCi0gICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIDUzLCA1MywgNTMsIAotICAgIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgCisgICAgNTMsIDUzLCA1MywgNTMsIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIAorICAgIDAsIDgwLCAxMzUsIDE3NiwgODMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI3LCAzMjcsIDE3NiwgMTc2LCAxNzYsIDgwLCA4MCwgODAsIDMyOCwgMzI3LCAzMjcsIDMyNywgMzI3LCAzMjcsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgwLCAKKyAgICA4MCwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODYsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIzLCAzMjMsIDE3NiwgMTc2LCAxNzYsIDgwLCA4MCwgODAsIAotICAgIDMyNCwgMzIzLCAzMjMsIDMyMywgMzIzLCAzMjMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCA4NiwgCi0gICAgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgwLCA4MCwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODYsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MSwgODEsIDgxLCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODEsIDgxLCA4MSwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDAsIAotICAgIDQ5LCA0OSwgMCwgMCwgNDksIDAsIDAsIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIAotICAgIDQ5LCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAwLCA0OSwgNDksIDAsIDAsIDQ5LCAwLCAKKyAgICAwLCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAwLCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgCisgICAgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjksIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAzNSwgMCwgMCwgMzI2LCAzMjYsIAotICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKLSAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCi0gICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAotICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKLSAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCi0gICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgCi0gICAgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAKLSAgICAxMzEsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMCwgMCwgMCwgMCwgMTMxLCAwLCAxMzEsIAotICAgIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgCi0gICAgMCwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAKLSAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIAotICAgIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgCi0gICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAotICAgIDEzMSwgMTMxLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgCi0gICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAotICAgIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI5LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgMzI5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMzUsIDAsIDAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIAorICAgIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAKKyAgICAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgCisgICAgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIDMzMCwgMzMwLCAzMzAsIAorICAgIDMzMCwgMzMwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDgwLCA4MCwgODAsIDgwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCAxMzUsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgMTM1LCA4MCwgODAsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4LCA3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgCisgICAgMCwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgCisgICAgODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAKKyAgICAxMzEsIDAsIDEzMSwgMCwgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMCwgMCwgCisgICAgMCwgMCwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgCisgICAgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDAsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4LCA3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAwLCAwLCAwLCAwLCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDE1MywgMTUzLCAwLCAwLCAwLCAyNDEsIDI0MSwgMjQxLCAKICAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzI3LCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMzMxLCAwLCAKICAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDMyOCwgMzI4LCAzMjgsIAotICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKLSAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAyMjIsIDIyMiwgMCwgMCwgMCwgMCwgMzI4LCAKLSAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCi0gICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAotICAgIDMyOCwgMzI4LCAzMjgsIDI0MSwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAwLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIAorICAgIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAKKyAgICAzMzIsIDMzMiwgMjIyLCAyMjIsIDAsIDAsIDAsIDAsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAKKyAgICAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgCisgICAgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAyNDEsIDMzMiwgMzMyLCAzMzIsIAorICAgIDMzMiwgMzMyLCAzMzIsIDMzMiwgMzMyLCAzMzIsIDMzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIAogICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKICAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIAorICAgIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgNTQsIDU0LCAKKyAgICA1NCwgNTQsIDU0LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAwLCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCkBAIC0yNTY2LDYwICsyODg5LDc2IEBACiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIApAQCAtMzE0NiwzNTkgKzM0ODUsMzU1IEBACiAgICAgNTAsIDQ5LCAyNjA4NSwgNzcwLCA1MCwgNTAsIDI2MDg1LCA3NzAsIDUwLCA1MSwgMjYwODUsIDc3MCwgNTAsIDUyLCAKICAgICAyNjA4NSwgNzcwLCA1MCwgNTMsIDI2MDg1LCA3NzAsIDUwLCA1NCwgMjYwODUsIDc3MCwgNTAsIDU1LCAyNjA4NSwgNzcwLCAKICAgICA1MCwgNTYsIDI2MDg1LCA3NzAsIDUwLCA1NywgMjYwODUsIDc3MCwgNTEsIDQ4LCAyNjA4NSwgNzcwLCA1MSwgNDksIAotICAgIDI2MDg1LCA3NzgsIDEwMywgOTcsIDEwOCwgMjU5LCA0Mjg2MywgMjU5LCAyOTQsIDI1OSwgMzM5LCAyNTYsIDM1OTEyLCAKLSAgICAyNTYsIDI2MzU2LCAyNTYsIDM2NTU0LCAyNTYsIDM2MDQwLCAyNTYsIDI4MzY5LCAyNTYsIDIwMDE4LCAyNTYsIDIxNDc3LCAKLSAgICAyNTYsIDQwODYwLCAyNTYsIDQwODYwLCAyNTYsIDIyODY1LCAyNTYsIDM3MzI5LCAyNTYsIDIxODk1LCAyNTYsIDIyODU2LCAKLSAgICAyNTYsIDI1MDc4LCAyNTYsIDMwMzEzLCAyNTYsIDMyNjQ1LCAyNTYsIDM0MzY3LCAyNTYsIDM0NzQ2LCAyNTYsIDM1MDY0LCAKLSAgICAyNTYsIDM3MDA3LCAyNTYsIDI3MTM4LCAyNTYsIDI3OTMxLCAyNTYsIDI4ODg5LCAyNTYsIDI5NjYyLCAyNTYsIDMzODUzLCAKLSAgICAyNTYsIDM3MjI2LCAyNTYsIDM5NDA5LCAyNTYsIDIwMDk4LCAyNTYsIDIxMzY1LCAyNTYsIDI3Mzk2LCAyNTYsIDI5MjExLCAKLSAgICAyNTYsIDM0MzQ5LCAyNTYsIDQwNDc4LCAyNTYsIDIzODg4LCAyNTYsIDI4NjUxLCAyNTYsIDM0MjUzLCAyNTYsIDM1MTcyLCAKLSAgICAyNTYsIDI1Mjg5LCAyNTYsIDMzMjQwLCAyNTYsIDM0ODQ3LCAyNTYsIDI0MjY2LCAyNTYsIDI2MzkxLCAyNTYsIDI4MDEwLCAKLSAgICAyNTYsIDI5NDM2LCAyNTYsIDM3MDcwLCAyNTYsIDIwMzU4LCAyNTYsIDIwOTE5LCAyNTYsIDIxMjE0LCAyNTYsIDI1Nzk2LCAKLSAgICAyNTYsIDI3MzQ3LCAyNTYsIDI5MjAwLCAyNTYsIDMwNDM5LCAyNTYsIDMyNzY5LCAyNTYsIDM0MzEwLCAyNTYsIDM0Mzk2LCAKLSAgICAyNTYsIDM2MzM1LCAyNTYsIDM4NzA2LCAyNTYsIDM5NzkxLCAyNTYsIDQwNDQyLCAyNTYsIDMwODYwLCAyNTYsIDMxMTAzLCAKLSAgICAyNTYsIDMyMTYwLCAyNTYsIDMzNzM3LCAyNTYsIDM3NjM2LCAyNTYsIDQwNTc1LCAyNTYsIDM1NTQyLCAyNTYsIDIyNzUxLCAKLSAgICAyNTYsIDI0MzI0LCAyNTYsIDMxODQwLCAyNTYsIDMyODk0LCAyNTYsIDI5MjgyLCAyNTYsIDMwOTIyLCAyNTYsIDM2MDM0LCAKLSAgICAyNTYsIDM4NjQ3LCAyNTYsIDIyNzQ0LCAyNTYsIDIzNjUwLCAyNTYsIDI3MTU1LCAyNTYsIDI4MTIyLCAyNTYsIDI4NDMxLCAKLSAgICAyNTYsIDMyMDQ3LCAyNTYsIDMyMzExLCAyNTYsIDM4NDc1LCAyNTYsIDIxMjAyLCAyNTYsIDMyOTA3LCAyNTYsIDIwOTU2LCAKLSAgICAyNTYsIDIwOTQwLCAyNTYsIDMxMjYwLCAyNTYsIDMyMTkwLCAyNTYsIDMzNzc3LCAyNTYsIDM4NTE3LCAyNTYsIDM1NzEyLCAKLSAgICAyNTYsIDI1Mjk1LCAyNTYsIDI3MTM4LCAyNTYsIDM1NTgyLCAyNTYsIDIwMDI1LCAyNTYsIDIzNTI3LCAyNTYsIDI0NTk0LCAKLSAgICAyNTYsIDI5NTc1LCAyNTYsIDMwMDY0LCAyNTYsIDIxMjcxLCAyNTYsIDMwOTcxLCAyNTYsIDIwNDE1LCAyNTYsIDI0NDg5LCAKLSAgICAyNTYsIDE5OTgxLCAyNTYsIDI3ODUyLCAyNTYsIDI1OTc2LCAyNTYsIDMyMDM0LCAyNTYsIDIxNDQzLCAyNTYsIDIyNjIyLCAKLSAgICAyNTYsIDMwNDY1LCAyNTYsIDMzODY1LCAyNTYsIDM1NDk4LCAyNTYsIDI3NTc4LCAyNTYsIDM2Nzg0LCAyNTYsIDI3Nzg0LCAKLSAgICAyNTYsIDI1MzQyLCAyNTYsIDMzNTA5LCAyNTYsIDI1NTA0LCAyNTYsIDMwMDUzLCAyNTYsIDIwMTQyLCAyNTYsIDIwODQxLCAKLSAgICAyNTYsIDIwOTM3LCAyNTYsIDI2NzUzLCAyNTYsIDMxOTc1LCAyNTYsIDMzMzkxLCAyNTYsIDM1NTM4LCAyNTYsIDM3MzI3LCAKLSAgICAyNTYsIDIxMjM3LCAyNTYsIDIxNTcwLCAyNTYsIDIyODk5LCAyNTYsIDI0MzAwLCAyNTYsIDI2MDUzLCAyNTYsIDI4NjcwLCAKLSAgICAyNTYsIDMxMDE4LCAyNTYsIDM4MzE3LCAyNTYsIDM5NTMwLCAyNTYsIDQwNTk5LCAyNTYsIDQwNjU0LCAyNTYsIDIxMTQ3LCAKLSAgICAyNTYsIDI2MzEwLCAyNTYsIDI3NTExLCAyNTYsIDM2NzA2LCAyNTYsIDI0MTgwLCAyNTYsIDI0OTc2LCAyNTYsIDI1MDg4LCAKLSAgICAyNTYsIDI1NzU0LCAyNTYsIDI4NDUxLCAyNTYsIDI5MDAxLCAyNTYsIDI5ODMzLCAyNTYsIDMxMTc4LCAyNTYsIDMyMjQ0LCAKLSAgICAyNTYsIDMyODc5LCAyNTYsIDM2NjQ2LCAyNTYsIDM0MDMwLCAyNTYsIDM2ODk5LCAyNTYsIDM3NzA2LCAyNTYsIDIxMDE1LCAKLSAgICAyNTYsIDIxMTU1LCAyNTYsIDIxNjkzLCAyNTYsIDI4ODcyLCAyNTYsIDM1MDEwLCAyNTYsIDM1NDk4LCAyNTYsIDI0MjY1LCAKLSAgICAyNTYsIDI0NTY1LCAyNTYsIDI1NDY3LCAyNTYsIDI3NTY2LCAyNTYsIDMxODA2LCAyNTYsIDI5NTU3LCAyNTYsIDIwMTk2LCAKLSAgICAyNTYsIDIyMjY1LCAyNTYsIDIzNTI3LCAyNTYsIDIzOTk0LCAyNTYsIDI0NjA0LCAyNTYsIDI5NjE4LCAyNTYsIDI5ODAxLCAKLSAgICAyNTYsIDMyNjY2LCAyNTYsIDMyODM4LCAyNTYsIDM3NDI4LCAyNTYsIDM4NjQ2LCAyNTYsIDM4NzI4LCAyNTYsIDM4OTM2LCAKLSAgICAyNTYsIDIwMzYzLCAyNTYsIDMxMTUwLCAyNTYsIDM3MzAwLCAyNTYsIDM4NTg0LCAyNTYsIDI0ODAxLCAyNTYsIDIwMTAyLCAKLSAgICAyNTYsIDIwNjk4LCAyNTYsIDIzNTM0LCAyNTYsIDIzNjE1LCAyNTYsIDI2MDA5LCAyNTYsIDI3MTM4LCAyNTYsIDI5MTM0LCAKLSAgICAyNTYsIDMwMjc0LCAyNTYsIDM0MDQ0LCAyNTYsIDM2OTg4LCAyNTYsIDQwODQ1LCAyNTYsIDI2MjQ4LCAyNTYsIDM4NDQ2LCAKLSAgICAyNTYsIDIxMTI5LCAyNTYsIDI2NDkxLCAyNTYsIDI2NjExLCAyNTYsIDI3OTY5LCAyNTYsIDI4MzE2LCAyNTYsIDI5NzA1LCAKLSAgICAyNTYsIDMwMDQxLCAyNTYsIDMwODI3LCAyNTYsIDMyMDE2LCAyNTYsIDM5MDA2LCAyNTYsIDIwODQ1LCAyNTYsIDI1MTM0LCAKLSAgICAyNTYsIDM4NTIwLCAyNTYsIDIwNTIzLCAyNTYsIDIzODMzLCAyNTYsIDI4MTM4LCAyNTYsIDM2NjUwLCAyNTYsIDI0NDU5LCAKLSAgICAyNTYsIDI0OTAwLCAyNTYsIDI2NjQ3LCAyNTYsIDI5NTc1LCAyNTYsIDM4NTM0LCAyNTYsIDIxMDMzLCAyNTYsIDIxNTE5LCAKLSAgICAyNTYsIDIzNjUzLCAyNTYsIDI2MTMxLCAyNTYsIDI2NDQ2LCAyNTYsIDI2NzkyLCAyNTYsIDI3ODc3LCAyNTYsIDI5NzAyLCAKLSAgICAyNTYsIDMwMTc4LCAyNTYsIDMyNjMzLCAyNTYsIDM1MDIzLCAyNTYsIDM1MDQxLCAyNTYsIDM3MzI0LCAyNTYsIDM4NjI2LCAKLSAgICAyNTYsIDIxMzExLCAyNTYsIDI4MzQ2LCAyNTYsIDIxNTMzLCAyNTYsIDI5MTM2LCAyNTYsIDI5ODQ4LCAyNTYsIDM0Mjk4LCAKLSAgICAyNTYsIDM4NTYzLCAyNTYsIDQwMDIzLCAyNTYsIDQwNjA3LCAyNTYsIDI2NTE5LCAyNTYsIDI4MTA3LCAyNTYsIDMzMjU2LCAKLSAgICAyNTYsIDMxNDM1LCAyNTYsIDMxNTIwLCAyNTYsIDMxODkwLCAyNTYsIDI5Mzc2LCAyNTYsIDI4ODI1LCAyNTYsIDM1NjcyLCAKLSAgICAyNTYsIDIwMTYwLCAyNTYsIDMzNTkwLCAyNTYsIDIxMDUwLCAyNTYsIDIwOTk5LCAyNTYsIDI0MjMwLCAyNTYsIDI1Mjk5LCAKLSAgICAyNTYsIDMxOTU4LCAyNTYsIDIzNDI5LCAyNTYsIDI3OTM0LCAyNTYsIDI2MjkyLCAyNTYsIDM2NjY3LCAyNTYsIDM0ODkyLCAKLSAgICAyNTYsIDM4NDc3LCAyNTYsIDM1MjExLCAyNTYsIDI0Mjc1LCAyNTYsIDIwODAwLCAyNTYsIDIxOTUyLCAyNTYsIDIyNjE4LCAKLSAgICAyNTYsIDI2MjI4LCAyNTYsIDIwOTU4LCAyNTYsIDI5NDgyLCAyNTYsIDMwNDEwLCAyNTYsIDMxMDM2LCAyNTYsIDMxMDcwLCAKLSAgICAyNTYsIDMxMDc3LCAyNTYsIDMxMTE5LCAyNTYsIDM4NzQyLCAyNTYsIDMxOTM0LCAyNTYsIDMyNzAxLCAyNTYsIDM0MzIyLCAKLSAgICAyNTYsIDM1NTc2LCAyNTYsIDM2OTIwLCAyNTYsIDM3MTE3LCAyNTYsIDM5MTUxLCAyNTYsIDM5MTY0LCAyNTYsIDM5MjA4LCAKLSAgICAyNTYsIDQwMzcyLCAyNTYsIDM3MDg2LCAyNTYsIDM4NTgzLCAyNTYsIDIwMzk4LCAyNTYsIDIwNzExLCAyNTYsIDIwODEzLCAKLSAgICAyNTYsIDIxMTkzLCAyNTYsIDIxMjIwLCAyNTYsIDIxMzI5LCAyNTYsIDIxOTE3LCAyNTYsIDIyMDIyLCAyNTYsIDIyMTIwLCAKLSAgICAyNTYsIDIyNTkyLCAyNTYsIDIyNjk2LCAyNTYsIDIzNjUyLCAyNTYsIDIzNjYyLCAyNTYsIDI0NzI0LCAyNTYsIDI0OTM2LCAKLSAgICAyNTYsIDI0OTc0LCAyNTYsIDI1MDc0LCAyNTYsIDI1OTM1LCAyNTYsIDI2MDgyLCAyNTYsIDI2MjU3LCAyNTYsIDI2NzU3LCAKLSAgICAyNTYsIDI4MDIzLCAyNTYsIDI4MTg2LCAyNTYsIDI4NDUwLCAyNTYsIDI5MDM4LCAyNTYsIDI5MjI3LCAyNTYsIDI5NzMwLCAKLSAgICAyNTYsIDMwODY1LCAyNTYsIDMxMDM4LCAyNTYsIDMxMDQ5LCAyNTYsIDMxMDQ4LCAyNTYsIDMxMDU2LCAyNTYsIDMxMDYyLCAKLSAgICAyNTYsIDMxMDY5LCAyNTYsIDMxMTE3LCAyNTYsIDMxMTE4LCAyNTYsIDMxMjk2LCAyNTYsIDMxMzYxLCAyNTYsIDMxNjgwLCAKLSAgICAyNTYsIDMyMjQ0LCAyNTYsIDMyMjY1LCAyNTYsIDMyMzIxLCAyNTYsIDMyNjI2LCAyNTYsIDMyNzczLCAyNTYsIDMzMjYxLCAKLSAgICAyNTYsIDMzNDAxLCAyNTYsIDMzNDAxLCAyNTYsIDMzODc5LCAyNTYsIDM1MDg4LCAyNTYsIDM1MjIyLCAyNTYsIDM1NTg1LCAKLSAgICAyNTYsIDM1NjQxLCAyNTYsIDM2MDUxLCAyNTYsIDM2MTA0LCAyNTYsIDM2NzkwLCAyNTYsIDM2OTIwLCAyNTYsIDM4NjI3LCAKLSAgICAyNTYsIDM4OTExLCAyNTYsIDM4OTcxLCAyNTYsIDI0NjkzLCAyNTYsIDE0ODIwNiwgMjU2LCAzMzMwNCwgMjU2LCAyMDAwNiwgCi0gICAgMjU2LCAyMDkxNywgMjU2LCAyMDg0MCwgMjU2LCAyMDM1MiwgMjU2LCAyMDgwNSwgMjU2LCAyMDg2NCwgMjU2LCAyMTE5MSwgCi0gICAgMjU2LCAyMTI0MiwgMjU2LCAyMTkxNywgMjU2LCAyMTg0NSwgMjU2LCAyMTkxMywgMjU2LCAyMTk4NiwgMjU2LCAyMjYxOCwgCi0gICAgMjU2LCAyMjcwNywgMjU2LCAyMjg1MiwgMjU2LCAyMjg2OCwgMjU2LCAyMzEzOCwgMjU2LCAyMzMzNiwgMjU2LCAyNDI3NCwgCi0gICAgMjU2LCAyNDI4MSwgMjU2LCAyNDQyNSwgMjU2LCAyNDQ5MywgMjU2LCAyNDc5MiwgMjU2LCAyNDkxMCwgMjU2LCAyNDg0MCwgCi0gICAgMjU2LCAyNDk3NCwgMjU2LCAyNDkyOCwgMjU2LCAyNTA3NCwgMjU2LCAyNTE0MCwgMjU2LCAyNTU0MCwgMjU2LCAyNTYyOCwgCi0gICAgMjU2LCAyNTY4MiwgMjU2LCAyNTk0MiwgMjU2LCAyNjIyOCwgMjU2LCAyNjM5MSwgMjU2LCAyNjM5NSwgMjU2LCAyNjQ1NCwgCi0gICAgMjU2LCAyNzUxMywgMjU2LCAyNzU3OCwgMjU2LCAyNzk2OSwgMjU2LCAyODM3OSwgMjU2LCAyODM2MywgMjU2LCAyODQ1MCwgCi0gICAgMjU2LCAyODcwMiwgMjU2LCAyOTAzOCwgMjU2LCAzMDYzMSwgMjU2LCAyOTIzNywgMjU2LCAyOTM1OSwgMjU2LCAyOTQ4MiwgCi0gICAgMjU2LCAyOTgwOSwgMjU2LCAyOTk1OCwgMjU2LCAzMDAxMSwgMjU2LCAzMDIzNywgMjU2LCAzMDIzOSwgMjU2LCAzMDQxMCwgCi0gICAgMjU2LCAzMDQyNywgMjU2LCAzMDQ1MiwgMjU2LCAzMDUzOCwgMjU2LCAzMDUyOCwgMjU2LCAzMDkyNCwgMjU2LCAzMTQwOSwgCi0gICAgMjU2LCAzMTY4MCwgMjU2LCAzMTg2NywgMjU2LCAzMjA5MSwgMjU2LCAzMjI0NCwgMjU2LCAzMjU3NCwgMjU2LCAzMjc3MywgCi0gICAgMjU2LCAzMzYxOCwgMjU2LCAzMzc3NSwgMjU2LCAzNDY4MSwgMjU2LCAzNTEzNywgMjU2LCAzNTIwNiwgMjU2LCAzNTIyMiwgCi0gICAgMjU2LCAzNTUxOSwgMjU2LCAzNTU3NiwgMjU2LCAzNTUzMSwgMjU2LCAzNTU4NSwgMjU2LCAzNTU4MiwgMjU2LCAzNTU2NSwgCi0gICAgMjU2LCAzNTY0MSwgMjU2LCAzNTcyMiwgMjU2LCAzNjEwNCwgMjU2LCAzNjY2NCwgMjU2LCAzNjk3OCwgMjU2LCAzNzI3MywgCi0gICAgMjU2LCAzNzQ5NCwgMjU2LCAzODUyNCwgMjU2LCAzODYyNywgMjU2LCAzODc0MiwgMjU2LCAzODg3NSwgMjU2LCAzODkxMSwgCi0gICAgMjU2LCAzODkyMywgMjU2LCAzODk3MSwgMjU2LCAzOTY5OCwgMjU2LCA0MDg2MCwgMjU2LCAxNDEzODYsIDI1NiwgMTQxMzgwLCAKLSAgICAyNTYsIDE0NDM0MSwgMjU2LCAxNTI2MSwgMjU2LCAxNjQwOCwgMjU2LCAxNjQ0MSwgMjU2LCAxNTIxMzcsIDI1NiwgCi0gICAgMTU0ODMyLCAyNTYsIDE2MzUzOSwgMjU2LCA0MDc3MSwgMjU2LCA0MDg0NiwgNTE0LCAxMDIsIDEwMiwgNTE0LCAxMDIsIAotICAgIDEwNSwgNTE0LCAxMDIsIDEwOCwgNzcwLCAxMDIsIDEwMiwgMTA1LCA3NzAsIDEwMiwgMTAyLCAxMDgsIDUxNCwgMzgzLCAKLSAgICAxMTYsIDUxNCwgMTE1LCAxMTYsIDUxNCwgMTM5NiwgMTM5OCwgNTE0LCAxMzk2LCAxMzgxLCA1MTQsIDEzOTYsIDEzODcsIAotICAgIDUxNCwgMTQwNiwgMTM5OCwgNTE0LCAxMzk2LCAxMzg5LCA1MTIsIDE0OTcsIDE0NjAsIDUxMiwgMTUyMiwgMTQ2MywgMjYyLCAKLSAgICAxNTA2LCAyNjIsIDE0ODgsIDI2MiwgMTQ5MSwgMjYyLCAxNDkyLCAyNjIsIDE0OTksIDI2MiwgMTUwMCwgMjYyLCAxNTAxLCAKLSAgICAyNjIsIDE1MTIsIDI2MiwgMTUxNCwgMjYyLCA0MywgNTEyLCAxNTEzLCAxNDczLCA1MTIsIDE1MTMsIDE0NzQsIDUxMiwgCi0gICAgNjQzMjksIDE0NzMsIDUxMiwgNjQzMjksIDE0NzQsIDUxMiwgMTQ4OCwgMTQ2MywgNTEyLCAxNDg4LCAxNDY0LCA1MTIsIAotICAgIDE0ODgsIDE0NjgsIDUxMiwgMTQ4OSwgMTQ2OCwgNTEyLCAxNDkwLCAxNDY4LCA1MTIsIDE0OTEsIDE0NjgsIDUxMiwgMTQ5MiwgCi0gICAgMTQ2OCwgNTEyLCAxNDkzLCAxNDY4LCA1MTIsIDE0OTQsIDE0NjgsIDUxMiwgMTQ5NiwgMTQ2OCwgNTEyLCAxNDk3LCAxNDY4LCAKLSAgICA1MTIsIDE0OTgsIDE0NjgsIDUxMiwgMTQ5OSwgMTQ2OCwgNTEyLCAxNTAwLCAxNDY4LCA1MTIsIDE1MDIsIDE0NjgsIDUxMiwgCi0gICAgMTUwNCwgMTQ2OCwgNTEyLCAxNTA1LCAxNDY4LCA1MTIsIDE1MDcsIDE0NjgsIDUxMiwgMTUwOCwgMTQ2OCwgNTEyLCAxNTEwLCAKLSAgICAxNDY4LCA1MTIsIDE1MTEsIDE0NjgsIDUxMiwgMTUxMiwgMTQ2OCwgNTEyLCAxNTEzLCAxNDY4LCA1MTIsIDE1MTQsIDE0NjgsIAotICAgIDUxMiwgMTQ5MywgMTQ2NSwgNTEyLCAxNDg5LCAxNDcxLCA1MTIsIDE0OTksIDE0NzEsIDUxMiwgMTUwOCwgMTQ3MSwgNTE0LCAKLSAgICAxNDg4LCAxNTAwLCAyNjcsIDE2NDksIDI2OCwgMTY0OSwgMjY3LCAxNjU5LCAyNjgsIDE2NTksIDI2OSwgMTY1OSwgMjcwLCAKLSAgICAxNjU5LCAyNjcsIDE2NjIsIDI2OCwgMTY2MiwgMjY5LCAxNjYyLCAyNzAsIDE2NjIsIDI2NywgMTY2NCwgMjY4LCAxNjY0LCAKLSAgICAyNjksIDE2NjQsIDI3MCwgMTY2NCwgMjY3LCAxNjU4LCAyNjgsIDE2NTgsIDI2OSwgMTY1OCwgMjcwLCAxNjU4LCAyNjcsIAotICAgIDE2NjMsIDI2OCwgMTY2MywgMjY5LCAxNjYzLCAyNzAsIDE2NjMsIDI2NywgMTY1NywgMjY4LCAxNjU3LCAyNjksIDE2NTcsIAotICAgIDI3MCwgMTY1NywgMjY3LCAxNzAwLCAyNjgsIDE3MDAsIDI2OSwgMTcwMCwgMjcwLCAxNzAwLCAyNjcsIDE3MDIsIDI2OCwgCi0gICAgMTcwMiwgMjY5LCAxNzAyLCAyNzAsIDE3MDIsIDI2NywgMTY2OCwgMjY4LCAxNjY4LCAyNjksIDE2NjgsIDI3MCwgMTY2OCwgCi0gICAgMjY3LCAxNjY3LCAyNjgsIDE2NjcsIDI2OSwgMTY2NywgMjcwLCAxNjY3LCAyNjcsIDE2NzAsIDI2OCwgMTY3MCwgMjY5LCAKLSAgICAxNjcwLCAyNzAsIDE2NzAsIDI2NywgMTY3MSwgMjY4LCAxNjcxLCAyNjksIDE2NzEsIDI3MCwgMTY3MSwgMjY3LCAxNjc3LCAKLSAgICAyNjgsIDE2NzcsIDI2NywgMTY3NiwgMjY4LCAxNjc2LCAyNjcsIDE2NzgsIDI2OCwgMTY3OCwgMjY3LCAxNjcyLCAyNjgsIAotICAgIDE2NzIsIDI2NywgMTY4OCwgMjY4LCAxNjg4LCAyNjcsIDE2ODEsIDI2OCwgMTY4MSwgMjY3LCAxNzA1LCAyNjgsIDE3MDUsIAotICAgIDI2OSwgMTcwNSwgMjcwLCAxNzA1LCAyNjcsIDE3MTEsIDI2OCwgMTcxMSwgMjY5LCAxNzExLCAyNzAsIDE3MTEsIDI2NywgCi0gICAgMTcxNSwgMjY4LCAxNzE1LCAyNjksIDE3MTUsIDI3MCwgMTcxNSwgMjY3LCAxNzEzLCAyNjgsIDE3MTMsIDI2OSwgMTcxMywgCi0gICAgMjcwLCAxNzEzLCAyNjcsIDE3MjIsIDI2OCwgMTcyMiwgMjY3LCAxNzIzLCAyNjgsIDE3MjMsIDI2OSwgMTcyMywgMjcwLCAKLSAgICAxNzIzLCAyNjcsIDE3MjgsIDI2OCwgMTcyOCwgMjY3LCAxNzI5LCAyNjgsIDE3MjksIDI2OSwgMTcyOSwgMjcwLCAxNzI5LCAKLSAgICAyNjcsIDE3MjYsIDI2OCwgMTcyNiwgMjY5LCAxNzI2LCAyNzAsIDE3MjYsIDI2NywgMTc0NiwgMjY4LCAxNzQ2LCAyNjcsIAotICAgIDE3NDcsIDI2OCwgMTc0NywgMjY3LCAxNzA5LCAyNjgsIDE3MDksIDI2OSwgMTcwOSwgMjcwLCAxNzA5LCAyNjcsIDE3MzUsIAotICAgIDI2OCwgMTczNSwgMjY3LCAxNzM0LCAyNjgsIDE3MzQsIDI2NywgMTczNiwgMjY4LCAxNzM2LCAyNjcsIDE2NTUsIDI2NywgCi0gICAgMTczOSwgMjY4LCAxNzM5LCAyNjcsIDE3MzMsIDI2OCwgMTczMywgMjY3LCAxNzM3LCAyNjgsIDE3MzcsIDI2NywgMTc0NCwgCi0gICAgMjY4LCAxNzQ0LCAyNjksIDE3NDQsIDI3MCwgMTc0NCwgMjY5LCAxNjA5LCAyNzAsIDE2MDksIDUyMywgMTU3NCwgMTU3NSwgCi0gICAgNTI0LCAxNTc0LCAxNTc1LCA1MjMsIDE1NzQsIDE3NDksIDUyNCwgMTU3NCwgMTc0OSwgNTIzLCAxNTc0LCAxNjA4LCA1MjQsIAotICAgIDE1NzQsIDE2MDgsIDUyMywgMTU3NCwgMTczNSwgNTI0LCAxNTc0LCAxNzM1LCA1MjMsIDE1NzQsIDE3MzQsIDUyNCwgMTU3NCwgCi0gICAgMTczNCwgNTIzLCAxNTc0LCAxNzM2LCA1MjQsIDE1NzQsIDE3MzYsIDUyMywgMTU3NCwgMTc0NCwgNTI0LCAxNTc0LCAxNzQ0LCAKLSAgICA1MjUsIDE1NzQsIDE3NDQsIDUyMywgMTU3NCwgMTYwOSwgNTI0LCAxNTc0LCAxNjA5LCA1MjUsIDE1NzQsIDE2MDksIDI2NywgCi0gICAgMTc0MCwgMjY4LCAxNzQwLCAyNjksIDE3NDAsIDI3MCwgMTc0MCwgNTIzLCAxNTc0LCAxNTgwLCA1MjMsIDE1NzQsIDE1ODEsIAotICAgIDUyMywgMTU3NCwgMTYwNSwgNTIzLCAxNTc0LCAxNjA5LCA1MjMsIDE1NzQsIDE2MTAsIDUyMywgMTU3NiwgMTU4MCwgNTIzLCAKLSAgICAxNTc2LCAxNTgxLCA1MjMsIDE1NzYsIDE1ODIsIDUyMywgMTU3NiwgMTYwNSwgNTIzLCAxNTc2LCAxNjA5LCA1MjMsIDE1NzYsIAotICAgIDE2MTAsIDUyMywgMTU3OCwgMTU4MCwgNTIzLCAxNTc4LCAxNTgxLCA1MjMsIDE1NzgsIDE1ODIsIDUyMywgMTU3OCwgMTYwNSwgCi0gICAgNTIzLCAxNTc4LCAxNjA5LCA1MjMsIDE1NzgsIDE2MTAsIDUyMywgMTU3OSwgMTU4MCwgNTIzLCAxNTc5LCAxNjA1LCA1MjMsIAotICAgIDE1NzksIDE2MDksIDUyMywgMTU3OSwgMTYxMCwgNTIzLCAxNTgwLCAxNTgxLCA1MjMsIDE1ODAsIDE2MDUsIDUyMywgMTU4MSwgCi0gICAgMTU4MCwgNTIzLCAxNTgxLCAxNjA1LCA1MjMsIDE1ODIsIDE1ODAsIDUyMywgMTU4MiwgMTU4MSwgNTIzLCAxNTgyLCAxNjA1LCAKLSAgICA1MjMsIDE1ODcsIDE1ODAsIDUyMywgMTU4NywgMTU4MSwgNTIzLCAxNTg3LCAxNTgyLCA1MjMsIDE1ODcsIDE2MDUsIDUyMywgCi0gICAgMTU4OSwgMTU4MSwgNTIzLCAxNTg5LCAxNjA1LCA1MjMsIDE1OTAsIDE1ODAsIDUyMywgMTU5MCwgMTU4MSwgNTIzLCAxNTkwLCAKLSAgICAxNTgyLCA1MjMsIDE1OTAsIDE2MDUsIDUyMywgMTU5MSwgMTU4MSwgNTIzLCAxNTkxLCAxNjA1LCA1MjMsIDE1OTIsIDE2MDUsIAotICAgIDUyMywgMTU5MywgMTU4MCwgNTIzLCAxNTkzLCAxNjA1LCA1MjMsIDE1OTQsIDE1ODAsIDUyMywgMTU5NCwgMTYwNSwgNTIzLCAKLSAgICAxNjAxLCAxNTgwLCA1MjMsIDE2MDEsIDE1ODEsIDUyMywgMTYwMSwgMTU4MiwgNTIzLCAxNjAxLCAxNjA1LCA1MjMsIDE2MDEsIAotICAgIDE2MDksIDUyMywgMTYwMSwgMTYxMCwgNTIzLCAxNjAyLCAxNTgxLCA1MjMsIDE2MDIsIDE2MDUsIDUyMywgMTYwMiwgMTYwOSwgCi0gICAgNTIzLCAxNjAyLCAxNjEwLCA1MjMsIDE2MDMsIDE1NzUsIDUyMywgMTYwMywgMTU4MCwgNTIzLCAxNjAzLCAxNTgxLCA1MjMsIAotICAgIDE2MDMsIDE1ODIsIDUyMywgMTYwMywgMTYwNCwgNTIzLCAxNjAzLCAxNjA1LCA1MjMsIDE2MDMsIDE2MDksIDUyMywgMTYwMywgCi0gICAgMTYxMCwgNTIzLCAxNjA0LCAxNTgwLCA1MjMsIDE2MDQsIDE1ODEsIDUyMywgMTYwNCwgMTU4MiwgNTIzLCAxNjA0LCAxNjA1LCAKLSAgICA1MjMsIDE2MDQsIDE2MDksIDUyMywgMTYwNCwgMTYxMCwgNTIzLCAxNjA1LCAxNTgwLCA1MjMsIDE2MDUsIDE1ODEsIDUyMywgCi0gICAgMTYwNSwgMTU4MiwgNTIzLCAxNjA1LCAxNjA1LCA1MjMsIDE2MDUsIDE2MDksIDUyMywgMTYwNSwgMTYxMCwgNTIzLCAxNjA2LCAKLSAgICAxNTgwLCA1MjMsIDE2MDYsIDE1ODEsIDUyMywgMTYwNiwgMTU4MiwgNTIzLCAxNjA2LCAxNjA1LCA1MjMsIDE2MDYsIDE2MDksIAotICAgIDUyMywgMTYwNiwgMTYxMCwgNTIzLCAxNjA3LCAxNTgwLCA1MjMsIDE2MDcsIDE2MDUsIDUyMywgMTYwNywgMTYwOSwgNTIzLCAKLSAgICAxNjA3LCAxNjEwLCA1MjMsIDE2MTAsIDE1ODAsIDUyMywgMTYxMCwgMTU4MSwgNTIzLCAxNjEwLCAxNTgyLCA1MjMsIDE2MTAsIAotICAgIDE2MDUsIDUyMywgMTYxMCwgMTYwOSwgNTIzLCAxNjEwLCAxNjEwLCA1MjMsIDE1ODQsIDE2NDgsIDUyMywgMTU4NSwgMTY0OCwgCi0gICAgNTIzLCAxNjA5LCAxNjQ4LCA3NzksIDMyLCAxNjEyLCAxNjE3LCA3NzksIDMyLCAxNjEzLCAxNjE3LCA3NzksIDMyLCAxNjE0LCAKLSAgICAxNjE3LCA3NzksIDMyLCAxNjE1LCAxNjE3LCA3NzksIDMyLCAxNjE2LCAxNjE3LCA3NzksIDMyLCAxNjE3LCAxNjQ4LCA1MjQsIAotICAgIDE1NzQsIDE1ODUsIDUyNCwgMTU3NCwgMTU4NiwgNTI0LCAxNTc0LCAxNjA1LCA1MjQsIDE1NzQsIDE2MDYsIDUyNCwgMTU3NCwgCi0gICAgMTYwOSwgNTI0LCAxNTc0LCAxNjEwLCA1MjQsIDE1NzYsIDE1ODUsIDUyNCwgMTU3NiwgMTU4NiwgNTI0LCAxNTc2LCAxNjA1LCAKLSAgICA1MjQsIDE1NzYsIDE2MDYsIDUyNCwgMTU3NiwgMTYwOSwgNTI0LCAxNTc2LCAxNjEwLCA1MjQsIDE1NzgsIDE1ODUsIDUyNCwgCi0gICAgMTU3OCwgMTU4NiwgNTI0LCAxNTc4LCAxNjA1LCA1MjQsIDE1NzgsIDE2MDYsIDUyNCwgMTU3OCwgMTYwOSwgNTI0LCAxNTc4LCAKLSAgICAxNjEwLCA1MjQsIDE1NzksIDE1ODUsIDUyNCwgMTU3OSwgMTU4NiwgNTI0LCAxNTc5LCAxNjA1LCA1MjQsIDE1NzksIDE2MDYsIAotICAgIDUyNCwgMTU3OSwgMTYwOSwgNTI0LCAxNTc5LCAxNjEwLCA1MjQsIDE2MDEsIDE2MDksIDUyNCwgMTYwMSwgMTYxMCwgNTI0LCAKLSAgICAxNjAyLCAxNjA5LCA1MjQsIDE2MDIsIDE2MTAsIDUyNCwgMTYwMywgMTU3NSwgNTI0LCAxNjAzLCAxNjA0LCA1MjQsIDE2MDMsIAotICAgIDE2MDUsIDUyNCwgMTYwMywgMTYwOSwgNTI0LCAxNjAzLCAxNjEwLCA1MjQsIDE2MDQsIDE2MDUsIDUyNCwgMTYwNCwgMTYwOSwgCi0gICAgNTI0LCAxNjA0LCAxNjEwLCA1MjQsIDE2MDUsIDE1NzUsIDUyNCwgMTYwNSwgMTYwNSwgNTI0LCAxNjA2LCAxNTg1LCA1MjQsIAotICAgIDE2MDYsIDE1ODYsIDUyNCwgMTYwNiwgMTYwNSwgNTI0LCAxNjA2LCAxNjA2LCA1MjQsIDE2MDYsIDE2MDksIDUyNCwgMTYwNiwgCi0gICAgMTYxMCwgNTI0LCAxNjA5LCAxNjQ4LCA1MjQsIDE2MTAsIDE1ODUsIDUyNCwgMTYxMCwgMTU4NiwgNTI0LCAxNjEwLCAxNjA1LCAKLSAgICA1MjQsIDE2MTAsIDE2MDYsIDUyNCwgMTYxMCwgMTYwOSwgNTI0LCAxNjEwLCAxNjEwLCA1MjUsIDE1NzQsIDE1ODAsIDUyNSwgCi0gICAgMTU3NCwgMTU4MSwgNTI1LCAxNTc0LCAxNTgyLCA1MjUsIDE1NzQsIDE2MDUsIDUyNSwgMTU3NCwgMTYwNywgNTI1LCAxNTc2LCAKLSAgICAxNTgwLCA1MjUsIDE1NzYsIDE1ODEsIDUyNSwgMTU3NiwgMTU4MiwgNTI1LCAxNTc2LCAxNjA1LCA1MjUsIDE1NzYsIDE2MDcsIAotICAgIDUyNSwgMTU3OCwgMTU4MCwgNTI1LCAxNTc4LCAxNTgxLCA1MjUsIDE1NzgsIDE1ODIsIDUyNSwgMTU3OCwgMTYwNSwgNTI1LCAKLSAgICAxNTc4LCAxNjA3LCA1MjUsIDE1NzksIDE2MDUsIDUyNSwgMTU4MCwgMTU4MSwgNTI1LCAxNTgwLCAxNjA1LCA1MjUsIDE1ODEsIAotICAgIDE1ODAsIDUyNSwgMTU4MSwgMTYwNSwgNTI1LCAxNTgyLCAxNTgwLCA1MjUsIDE1ODIsIDE2MDUsIDUyNSwgMTU4NywgMTU4MCwgCi0gICAgNTI1LCAxNTg3LCAxNTgxLCA1MjUsIDE1ODcsIDE1ODIsIDUyNSwgMTU4NywgMTYwNSwgNTI1LCAxNTg5LCAxNTgxLCA1MjUsIAotICAgIDE1ODksIDE1ODIsIDUyNSwgMTU4OSwgMTYwNSwgNTI1LCAxNTkwLCAxNTgwLCA1MjUsIDE1OTAsIDE1ODEsIDUyNSwgMTU5MCwgCi0gICAgMTU4MiwgNTI1LCAxNTkwLCAxNjA1LCA1MjUsIDE1OTEsIDE1ODEsIDUyNSwgMTU5MiwgMTYwNSwgNTI1LCAxNTkzLCAxNTgwLCAKLSAgICA1MjUsIDE1OTMsIDE2MDUsIDUyNSwgMTU5NCwgMTU4MCwgNTI1LCAxNTk0LCAxNjA1LCA1MjUsIDE2MDEsIDE1ODAsIDUyNSwgCi0gICAgMTYwMSwgMTU4MSwgNTI1LCAxNjAxLCAxNTgyLCA1MjUsIDE2MDEsIDE2MDUsIDUyNSwgMTYwMiwgMTU4MSwgNTI1LCAxNjAyLCAKLSAgICAxNjA1LCA1MjUsIDE2MDMsIDE1ODAsIDUyNSwgMTYwMywgMTU4MSwgNTI1LCAxNjAzLCAxNTgyLCA1MjUsIDE2MDMsIDE2MDQsIAotICAgIDUyNSwgMTYwMywgMTYwNSwgNTI1LCAxNjA0LCAxNTgwLCA1MjUsIDE2MDQsIDE1ODEsIDUyNSwgMTYwNCwgMTU4MiwgNTI1LCAKLSAgICAxNjA0LCAxNjA1LCA1MjUsIDE2MDQsIDE2MDcsIDUyNSwgMTYwNSwgMTU4MCwgNTI1LCAxNjA1LCAxNTgxLCA1MjUsIDE2MDUsIAotICAgIDE1ODIsIDUyNSwgMTYwNSwgMTYwNSwgNTI1LCAxNjA2LCAxNTgwLCA1MjUsIDE2MDYsIDE1ODEsIDUyNSwgMTYwNiwgMTU4MiwgCi0gICAgNTI1LCAxNjA2LCAxNjA1LCA1MjUsIDE2MDYsIDE2MDcsIDUyNSwgMTYwNywgMTU4MCwgNTI1LCAxNjA3LCAxNjA1LCA1MjUsIAotICAgIDE2MDcsIDE2NDgsIDUyNSwgMTYxMCwgMTU4MCwgNTI1LCAxNjEwLCAxNTgxLCA1MjUsIDE2MTAsIDE1ODIsIDUyNSwgMTYxMCwgCi0gICAgMTYwNSwgNTI1LCAxNjEwLCAxNjA3LCA1MjYsIDE1NzQsIDE2MDUsIDUyNiwgMTU3NCwgMTYwNywgNTI2LCAxNTc2LCAxNjA1LCAKLSAgICA1MjYsIDE1NzYsIDE2MDcsIDUyNiwgMTU3OCwgMTYwNSwgNTI2LCAxNTc4LCAxNjA3LCA1MjYsIDE1NzksIDE2MDUsIDUyNiwgCi0gICAgMTU3OSwgMTYwNywgNTI2LCAxNTg3LCAxNjA1LCA1MjYsIDE1ODcsIDE2MDcsIDUyNiwgMTU4OCwgMTYwNSwgNTI2LCAxNTg4LCAKLSAgICAxNjA3LCA1MjYsIDE2MDMsIDE2MDQsIDUyNiwgMTYwMywgMTYwNSwgNTI2LCAxNjA0LCAxNjA1LCA1MjYsIDE2MDYsIDE2MDUsIAotICAgIDUyNiwgMTYwNiwgMTYwNywgNTI2LCAxNjEwLCAxNjA1LCA1MjYsIDE2MTAsIDE2MDcsIDc4MiwgMTYwMCwgMTYxNCwgMTYxNywgCi0gICAgNzgyLCAxNjAwLCAxNjE1LCAxNjE3LCA3ODIsIDE2MDAsIDE2MTYsIDE2MTcsIDUyMywgMTU5MSwgMTYwOSwgNTIzLCAxNTkxLCAKLSAgICAxNjEwLCA1MjMsIDE1OTMsIDE2MDksIDUyMywgMTU5MywgMTYxMCwgNTIzLCAxNTk0LCAxNjA5LCA1MjMsIDE1OTQsIDE2MTAsIAotICAgIDUyMywgMTU4NywgMTYwOSwgNTIzLCAxNTg3LCAxNjEwLCA1MjMsIDE1ODgsIDE2MDksIDUyMywgMTU4OCwgMTYxMCwgNTIzLCAKLSAgICAxNTgxLCAxNjA5LCA1MjMsIDE1ODEsIDE2MTAsIDUyMywgMTU4MCwgMTYwOSwgNTIzLCAxNTgwLCAxNjEwLCA1MjMsIDE1ODIsIAotICAgIDE2MDksIDUyMywgMTU4MiwgMTYxMCwgNTIzLCAxNTg5LCAxNjA5LCA1MjMsIDE1ODksIDE2MTAsIDUyMywgMTU5MCwgMTYwOSwgCi0gICAgNTIzLCAxNTkwLCAxNjEwLCA1MjMsIDE1ODgsIDE1ODAsIDUyMywgMTU4OCwgMTU4MSwgNTIzLCAxNTg4LCAxNTgyLCA1MjMsIAotICAgIDE1ODgsIDE2MDUsIDUyMywgMTU4OCwgMTU4NSwgNTIzLCAxNTg3LCAxNTg1LCA1MjMsIDE1ODksIDE1ODUsIDUyMywgMTU5MCwgCi0gICAgMTU4NSwgNTI0LCAxNTkxLCAxNjA5LCA1MjQsIDE1OTEsIDE2MTAsIDUyNCwgMTU5MywgMTYwOSwgNTI0LCAxNTkzLCAxNjEwLCAKLSAgICA1MjQsIDE1OTQsIDE2MDksIDUyNCwgMTU5NCwgMTYxMCwgNTI0LCAxNTg3LCAxNjA5LCA1MjQsIDE1ODcsIDE2MTAsIDUyNCwgCi0gICAgMTU4OCwgMTYwOSwgNTI0LCAxNTg4LCAxNjEwLCA1MjQsIDE1ODEsIDE2MDksIDUyNCwgMTU4MSwgMTYxMCwgNTI0LCAxNTgwLCAKLSAgICAxNjA5LCA1MjQsIDE1ODAsIDE2MTAsIDUyNCwgMTU4MiwgMTYwOSwgNTI0LCAxNTgyLCAxNjEwLCA1MjQsIDE1ODksIDE2MDksIAotICAgIDUyNCwgMTU4OSwgMTYxMCwgNTI0LCAxNTkwLCAxNjA5LCA1MjQsIDE1OTAsIDE2MTAsIDUyNCwgMTU4OCwgMTU4MCwgNTI0LCAKLSAgICAxNTg4LCAxNTgxLCA1MjQsIDE1ODgsIDE1ODIsIDUyNCwgMTU4OCwgMTYwNSwgNTI0LCAxNTg4LCAxNTg1LCA1MjQsIDE1ODcsIAotICAgIDE1ODUsIDUyNCwgMTU4OSwgMTU4NSwgNTI0LCAxNTkwLCAxNTg1LCA1MjUsIDE1ODgsIDE1ODAsIDUyNSwgMTU4OCwgMTU4MSwgCi0gICAgNTI1LCAxNTg4LCAxNTgyLCA1MjUsIDE1ODgsIDE2MDUsIDUyNSwgMTU4NywgMTYwNywgNTI1LCAxNTg4LCAxNjA3LCA1MjUsIAotICAgIDE1OTEsIDE2MDUsIDUyNiwgMTU4NywgMTU4MCwgNTI2LCAxNTg3LCAxNTgxLCA1MjYsIDE1ODcsIDE1ODIsIDUyNiwgMTU4OCwgCi0gICAgMTU4MCwgNTI2LCAxNTg4LCAxNTgxLCA1MjYsIDE1ODgsIDE1ODIsIDUyNiwgMTU5MSwgMTYwNSwgNTI2LCAxNTkyLCAxNjA1LCAKLSAgICA1MjQsIDE1NzUsIDE2MTEsIDUyMywgMTU3NSwgMTYxMSwgNzgxLCAxNTc4LCAxNTgwLCAxNjA1LCA3ODAsIDE1NzgsIDE1ODEsIAotICAgIDE1ODAsIDc4MSwgMTU3OCwgMTU4MSwgMTU4MCwgNzgxLCAxNTc4LCAxNTgxLCAxNjA1LCA3ODEsIDE1NzgsIDE1ODIsIAotICAgIDE2MDUsIDc4MSwgMTU3OCwgMTYwNSwgMTU4MCwgNzgxLCAxNTc4LCAxNjA1LCAxNTgxLCA3ODEsIDE1NzgsIDE2MDUsIAotICAgIDE1ODIsIDc4MCwgMTU4MCwgMTYwNSwgMTU4MSwgNzgxLCAxNTgwLCAxNjA1LCAxNTgxLCA3ODAsIDE1ODEsIDE2MDUsIAotICAgIDE2MTAsIDc4MCwgMTU4MSwgMTYwNSwgMTYwOSwgNzgxLCAxNTg3LCAxNTgxLCAxNTgwLCA3ODEsIDE1ODcsIDE1ODAsIAotICAgIDE1ODEsIDc4MCwgMTU4NywgMTU4MCwgMTYwOSwgNzgwLCAxNTg3LCAxNjA1LCAxNTgxLCA3ODEsIDE1ODcsIDE2MDUsIAotICAgIDE1ODEsIDc4MSwgMTU4NywgMTYwNSwgMTU4MCwgNzgwLCAxNTg3LCAxNjA1LCAxNjA1LCA3ODEsIDE1ODcsIDE2MDUsIAotICAgIDE2MDUsIDc4MCwgMTU4OSwgMTU4MSwgMTU4MSwgNzgxLCAxNTg5LCAxNTgxLCAxNTgxLCA3ODAsIDE1ODksIDE2MDUsIAotICAgIDE2MDUsIDc4MCwgMTU4OCwgMTU4MSwgMTYwNSwgNzgxLCAxNTg4LCAxNTgxLCAxNjA1LCA3ODAsIDE1ODgsIDE1ODAsIAotICAgIDE2MTAsIDc4MCwgMTU4OCwgMTYwNSwgMTU4MiwgNzgxLCAxNTg4LCAxNjA1LCAxNTgyLCA3ODAsIDE1ODgsIDE2MDUsIAotICAgIDE2MDUsIDc4MSwgMTU4OCwgMTYwNSwgMTYwNSwgNzgwLCAxNTkwLCAxNTgxLCAxNjA5LCA3ODAsIDE1OTAsIDE1ODIsIAotICAgIDE2MDUsIDc4MSwgMTU5MCwgMTU4MiwgMTYwNSwgNzgwLCAxNTkxLCAxNjA1LCAxNTgxLCA3ODEsIDE1OTEsIDE2MDUsIAotICAgIDE1ODEsIDc4MSwgMTU5MSwgMTYwNSwgMTYwNSwgNzgwLCAxNTkxLCAxNjA1LCAxNjEwLCA3ODAsIDE1OTMsIDE1ODAsIAotICAgIDE2MDUsIDc4MCwgMTU5MywgMTYwNSwgMTYwNSwgNzgxLCAxNTkzLCAxNjA1LCAxNjA1LCA3ODAsIDE1OTMsIDE2MDUsIAotICAgIDE2MDksIDc4MCwgMTU5NCwgMTYwNSwgMTYwNSwgNzgwLCAxNTk0LCAxNjA1LCAxNjEwLCA3ODAsIDE1OTQsIDE2MDUsIAotICAgIDE2MDksIDc4MCwgMTYwMSwgMTU4MiwgMTYwNSwgNzgxLCAxNjAxLCAxNTgyLCAxNjA1LCA3ODAsIDE2MDIsIDE2MDUsIAotICAgIDE1ODEsIDc4MCwgMTYwMiwgMTYwNSwgMTYwNSwgNzgwLCAxNjA0LCAxNTgxLCAxNjA1LCA3ODAsIDE2MDQsIDE1ODEsIAotICAgIDE2MTAsIDc4MCwgMTYwNCwgMTU4MSwgMTYwOSwgNzgxLCAxNjA0LCAxNTgwLCAxNTgwLCA3ODAsIDE2MDQsIDE1ODAsIAotICAgIDE1ODAsIDc4MCwgMTYwNCwgMTU4MiwgMTYwNSwgNzgxLCAxNjA0LCAxNTgyLCAxNjA1LCA3ODAsIDE2MDQsIDE2MDUsIAotICAgIDE1ODEsIDc4MSwgMTYwNCwgMTYwNSwgMTU4MSwgNzgxLCAxNjA1LCAxNTgxLCAxNTgwLCA3ODEsIDE2MDUsIDE1ODEsIAotICAgIDE2MDUsIDc4MCwgMTYwNSwgMTU4MSwgMTYxMCwgNzgxLCAxNjA1LCAxNTgwLCAxNTgxLCA3ODEsIDE2MDUsIDE1ODAsIAotICAgIDE2MDUsIDc4MSwgMTYwNSwgMTU4MiwgMTU4MCwgNzgxLCAxNjA1LCAxNTgyLCAxNjA1LCA3ODEsIDE2MDUsIDE1ODAsIAotICAgIDE1ODIsIDc4MSwgMTYwNywgMTYwNSwgMTU4MCwgNzgxLCAxNjA3LCAxNjA1LCAxNjA1LCA3ODEsIDE2MDYsIDE1ODEsIAotICAgIDE2MDUsIDc4MCwgMTYwNiwgMTU4MSwgMTYwOSwgNzgwLCAxNjA2LCAxNTgwLCAxNjA1LCA3ODEsIDE2MDYsIDE1ODAsIAotICAgIDE2MDUsIDc4MCwgMTYwNiwgMTU4MCwgMTYwOSwgNzgwLCAxNjA2LCAxNjA1LCAxNjEwLCA3ODAsIDE2MDYsIDE2MDUsIAotICAgIDE2MDksIDc4MCwgMTYxMCwgMTYwNSwgMTYwNSwgNzgxLCAxNjEwLCAxNjA1LCAxNjA1LCA3ODAsIDE1NzYsIDE1ODIsIAotICAgIDE2MTAsIDc4MCwgMTU3OCwgMTU4MCwgMTYxMCwgNzgwLCAxNTc4LCAxNTgwLCAxNjA5LCA3ODAsIDE1NzgsIDE1ODIsIAotICAgIDE2MTAsIDc4MCwgMTU3OCwgMTU4MiwgMTYwOSwgNzgwLCAxNTc4LCAxNjA1LCAxNjEwLCA3ODAsIDE1NzgsIDE2MDUsIAotICAgIDE2MDksIDc4MCwgMTU4MCwgMTYwNSwgMTYxMCwgNzgwLCAxNTgwLCAxNTgxLCAxNjA5LCA3ODAsIDE1ODAsIDE2MDUsIAotICAgIDE2MDksIDc4MCwgMTU4NywgMTU4MiwgMTYwOSwgNzgwLCAxNTg5LCAxNTgxLCAxNjEwLCA3ODAsIDE1ODgsIDE1ODEsIAotICAgIDE2MTAsIDc4MCwgMTU5MCwgMTU4MSwgMTYxMCwgNzgwLCAxNjA0LCAxNTgwLCAxNjEwLCA3ODAsIDE2MDQsIDE2MDUsIAotICAgIDE2MTAsIDc4MCwgMTYxMCwgMTU4MSwgMTYxMCwgNzgwLCAxNjEwLCAxNTgwLCAxNjEwLCA3ODAsIDE2MTAsIDE2MDUsIAotICAgIDE2MTAsIDc4MCwgMTYwNSwgMTYwNSwgMTYxMCwgNzgwLCAxNjAyLCAxNjA1LCAxNjEwLCA3ODAsIDE2MDYsIDE1ODEsIAotICAgIDE2MTAsIDc4MSwgMTYwMiwgMTYwNSwgMTU4MSwgNzgxLCAxNjA0LCAxNTgxLCAxNjA1LCA3ODAsIDE1OTMsIDE2MDUsIAotICAgIDE2MTAsIDc4MCwgMTYwMywgMTYwNSwgMTYxMCwgNzgxLCAxNjA2LCAxNTgwLCAxNTgxLCA3ODAsIDE2MDUsIDE1ODIsIAotICAgIDE2MTAsIDc4MSwgMTYwNCwgMTU4MCwgMTYwNSwgNzgwLCAxNjAzLCAxNjA1LCAxNjA1LCA3ODAsIDE2MDQsIDE1ODAsIAotICAgIDE2MDUsIDc4MCwgMTYwNiwgMTU4MCwgMTU4MSwgNzgwLCAxNTgwLCAxNTgxLCAxNjEwLCA3ODAsIDE1ODEsIDE1ODAsIAotICAgIDE2MTAsIDc4MCwgMTYwNSwgMTU4MCwgMTYxMCwgNzgwLCAxNjAxLCAxNjA1LCAxNjEwLCA3ODAsIDE1NzYsIDE1ODEsIAotICAgIDE2MTAsIDc4MSwgMTYwMywgMTYwNSwgMTYwNSwgNzgxLCAxNTkzLCAxNTgwLCAxNjA1LCA3ODEsIDE1ODksIDE2MDUsIAotICAgIDE2MDUsIDc4MCwgMTU4NywgMTU4MiwgMTYxMCwgNzgwLCAxNjA2LCAxNTgwLCAxNjEwLCA3NzksIDE1ODksIDE2MDQsIAotICAgIDE3NDYsIDc3OSwgMTYwMiwgMTYwNCwgMTc0NiwgMTAzNSwgMTU3NSwgMTYwNCwgMTYwNCwgMTYwNywgMTAzNSwgMTU3NSwgCi0gICAgMTYwMywgMTU3NiwgMTU4NSwgMTAzNSwgMTYwNSwgMTU4MSwgMTYwNSwgMTU4MywgMTAzNSwgMTU4OSwgMTYwNCwgMTU5MywgCi0gICAgMTYwNSwgMTAzNSwgMTU4NSwgMTU4NywgMTYwOCwgMTYwNCwgMTAzNSwgMTU5MywgMTYwNCwgMTYxMCwgMTYwNywgMTAzNSwgCi0gICAgMTYwOCwgMTU4NywgMTYwNCwgMTYwNSwgNzc5LCAxNTg5LCAxNjA0LCAxNjA5LCA0NjE5LCAxNTg5LCAxNjA0LCAxNjA5LCAKLSAgICAzMiwgMTU3NSwgMTYwNCwgMTYwNCwgMTYwNywgMzIsIDE1OTMsIDE2MDQsIDE2MTAsIDE2MDcsIDMyLCAxNjA4LCAxNTg3LCAKLSAgICAxNjA0LCAxNjA1LCAyMDU5LCAxNTgwLCAxNjA0LCAzMiwgMTU4MCwgMTYwNCwgMTU3NSwgMTYwNCwgMTYwNywgMTAzNSwgCi0gICAgMTU4NSwgMTc0MCwgMTU3NSwgMTYwNCwgMjY1LCA0NCwgMjY1LCAxMjI4OSwgMjY1LCAxMjI5MCwgMjY1LCA1OCwgMjY1LCAKLSAgICA1OSwgMjY1LCAzMywgMjY1LCA2MywgMjY1LCAxMjMxMCwgMjY1LCAxMjMxMSwgMjY1LCA4MjMwLCAyNjUsIDgyMjksIDI2NSwgCi0gICAgODIxMiwgMjY1LCA4MjExLCAyNjUsIDk1LCAyNjUsIDk1LCAyNjUsIDQwLCAyNjUsIDQxLCAyNjUsIDEyMywgMjY1LCAxMjUsIAotICAgIDI2NSwgMTIzMDgsIDI2NSwgMTIzMDksIDI2NSwgMTIzMDQsIDI2NSwgMTIzMDUsIDI2NSwgMTIyOTgsIDI2NSwgMTIyOTksIAotICAgIDI2NSwgMTIyOTYsIDI2NSwgMTIyOTcsIDI2NSwgMTIzMDAsIDI2NSwgMTIzMDEsIDI2NSwgMTIzMDIsIDI2NSwgMTIzMDMsIAotICAgIDI2NSwgOTEsIDI2NSwgOTMsIDI1OCwgODI1NCwgMjU4LCA4MjU0LCAyNTgsIDgyNTQsIDI1OCwgODI1NCwgMjU4LCA5NSwgCi0gICAgMjU4LCA5NSwgMjU4LCA5NSwgMjcxLCA0NCwgMjcxLCAxMjI4OSwgMjcxLCA0NiwgMjcxLCA1OSwgMjcxLCA1OCwgMjcxLCAKLSAgICA2MywgMjcxLCAzMywgMjcxLCA4MjEyLCAyNzEsIDQwLCAyNzEsIDQxLCAyNzEsIDEyMywgMjcxLCAxMjUsIDI3MSwgMTIzMDgsIAotICAgIDI3MSwgMTIzMDksIDI3MSwgMzUsIDI3MSwgMzgsIDI3MSwgNDIsIDI3MSwgNDMsIDI3MSwgNDUsIDI3MSwgNjAsIDI3MSwgCi0gICAgNjIsIDI3MSwgNjEsIDI3MSwgOTIsIDI3MSwgMzYsIDI3MSwgMzcsIDI3MSwgNjQsIDUyMywgMzIsIDE2MTEsIDUyNiwgCi0gICAgMTYwMCwgMTYxMSwgNTIzLCAzMiwgMTYxMiwgNTIzLCAzMiwgMTYxMywgNTIzLCAzMiwgMTYxNCwgNTI2LCAxNjAwLCAxNjE0LCAKLSAgICA1MjMsIDMyLCAxNjE1LCA1MjYsIDE2MDAsIDE2MTUsIDUyMywgMzIsIDE2MTYsIDUyNiwgMTYwMCwgMTYxNiwgNTIzLCAzMiwgCi0gICAgMTYxNywgNTI2LCAxNjAwLCAxNjE3LCA1MjMsIDMyLCAxNjE4LCA1MjYsIDE2MDAsIDE2MTgsIDI2NywgMTU2OSwgMjY3LCAKLSAgICAxNTcwLCAyNjgsIDE1NzAsIDI2NywgMTU3MSwgMjY4LCAxNTcxLCAyNjcsIDE1NzIsIDI2OCwgMTU3MiwgMjY3LCAxNTczLCAKLSAgICAyNjgsIDE1NzMsIDI2NywgMTU3NCwgMjY4LCAxNTc0LCAyNjksIDE1NzQsIDI3MCwgMTU3NCwgMjY3LCAxNTc1LCAyNjgsIAotICAgIDE1NzUsIDI2NywgMTU3NiwgMjY4LCAxNTc2LCAyNjksIDE1NzYsIDI3MCwgMTU3NiwgMjY3LCAxNTc3LCAyNjgsIDE1NzcsIAotICAgIDI2NywgMTU3OCwgMjY4LCAxNTc4LCAyNjksIDE1NzgsIDI3MCwgMTU3OCwgMjY3LCAxNTc5LCAyNjgsIDE1NzksIDI2OSwgCi0gICAgMTU3OSwgMjcwLCAxNTc5LCAyNjcsIDE1ODAsIDI2OCwgMTU4MCwgMjY5LCAxNTgwLCAyNzAsIDE1ODAsIDI2NywgMTU4MSwgCi0gICAgMjY4LCAxNTgxLCAyNjksIDE1ODEsIDI3MCwgMTU4MSwgMjY3LCAxNTgyLCAyNjgsIDE1ODIsIDI2OSwgMTU4MiwgMjcwLCAKLSAgICAxNTgyLCAyNjcsIDE1ODMsIDI2OCwgMTU4MywgMjY3LCAxNTg0LCAyNjgsIDE1ODQsIDI2NywgMTU4NSwgMjY4LCAxNTg1LCAKLSAgICAyNjcsIDE1ODYsIDI2OCwgMTU4NiwgMjY3LCAxNTg3LCAyNjgsIDE1ODcsIDI2OSwgMTU4NywgMjcwLCAxNTg3LCAyNjcsIAotICAgIDE1ODgsIDI2OCwgMTU4OCwgMjY5LCAxNTg4LCAyNzAsIDE1ODgsIDI2NywgMTU4OSwgMjY4LCAxNTg5LCAyNjksIDE1ODksIAotICAgIDI3MCwgMTU4OSwgMjY3LCAxNTkwLCAyNjgsIDE1OTAsIDI2OSwgMTU5MCwgMjcwLCAxNTkwLCAyNjcsIDE1OTEsIDI2OCwgCi0gICAgMTU5MSwgMjY5LCAxNTkxLCAyNzAsIDE1OTEsIDI2NywgMTU5MiwgMjY4LCAxNTkyLCAyNjksIDE1OTIsIDI3MCwgMTU5MiwgCi0gICAgMjY3LCAxNTkzLCAyNjgsIDE1OTMsIDI2OSwgMTU5MywgMjcwLCAxNTkzLCAyNjcsIDE1OTQsIDI2OCwgMTU5NCwgMjY5LCAKLSAgICAxNTk0LCAyNzAsIDE1OTQsIDI2NywgMTYwMSwgMjY4LCAxNjAxLCAyNjksIDE2MDEsIDI3MCwgMTYwMSwgMjY3LCAxNjAyLCAKLSAgICAyNjgsIDE2MDIsIDI2OSwgMTYwMiwgMjcwLCAxNjAyLCAyNjcsIDE2MDMsIDI2OCwgMTYwMywgMjY5LCAxNjAzLCAyNzAsIAotICAgIDE2MDMsIDI2NywgMTYwNCwgMjY4LCAxNjA0LCAyNjksIDE2MDQsIDI3MCwgMTYwNCwgMjY3LCAxNjA1LCAyNjgsIDE2MDUsIAotICAgIDI2OSwgMTYwNSwgMjcwLCAxNjA1LCAyNjcsIDE2MDYsIDI2OCwgMTYwNiwgMjY5LCAxNjA2LCAyNzAsIDE2MDYsIDI2NywgCi0gICAgMTYwNywgMjY4LCAxNjA3LCAyNjksIDE2MDcsIDI3MCwgMTYwNywgMjY3LCAxNjA4LCAyNjgsIDE2MDgsIDI2NywgMTYwOSwgCi0gICAgMjY4LCAxNjA5LCAyNjcsIDE2MTAsIDI2OCwgMTYxMCwgMjY5LCAxNjEwLCAyNzAsIDE2MTAsIDUyMywgMTYwNCwgMTU3MCwgCi0gICAgNTI0LCAxNjA0LCAxNTcwLCA1MjMsIDE2MDQsIDE1NzEsIDUyNCwgMTYwNCwgMTU3MSwgNTIzLCAxNjA0LCAxNTczLCA1MjQsIAotICAgIDE2MDQsIDE1NzMsIDUyMywgMTYwNCwgMTU3NSwgNTI0LCAxNjA0LCAxNTc1LCAyNjQsIDMzLCAyNjQsIDM0LCAyNjQsIDM1LCAKLSAgICAyNjQsIDM2LCAyNjQsIDM3LCAyNjQsIDM4LCAyNjQsIDM5LCAyNjQsIDQwLCAyNjQsIDQxLCAyNjQsIDQyLCAyNjQsIDQzLCAKLSAgICAyNjQsIDQ0LCAyNjQsIDQ1LCAyNjQsIDQ2LCAyNjQsIDQ3LCAyNjQsIDQ4LCAyNjQsIDQ5LCAyNjQsIDUwLCAyNjQsIDUxLCAKLSAgICAyNjQsIDUyLCAyNjQsIDUzLCAyNjQsIDU0LCAyNjQsIDU1LCAyNjQsIDU2LCAyNjQsIDU3LCAyNjQsIDU4LCAyNjQsIDU5LCAKLSAgICAyNjQsIDYwLCAyNjQsIDYxLCAyNjQsIDYyLCAyNjQsIDYzLCAyNjQsIDY0LCAyNjQsIDY1LCAyNjQsIDY2LCAyNjQsIDY3LCAKLSAgICAyNjQsIDY4LCAyNjQsIDY5LCAyNjQsIDcwLCAyNjQsIDcxLCAyNjQsIDcyLCAyNjQsIDczLCAyNjQsIDc0LCAyNjQsIDc1LCAKLSAgICAyNjQsIDc2LCAyNjQsIDc3LCAyNjQsIDc4LCAyNjQsIDc5LCAyNjQsIDgwLCAyNjQsIDgxLCAyNjQsIDgyLCAyNjQsIDgzLCAKLSAgICAyNjQsIDg0LCAyNjQsIDg1LCAyNjQsIDg2LCAyNjQsIDg3LCAyNjQsIDg4LCAyNjQsIDg5LCAyNjQsIDkwLCAyNjQsIDkxLCAKLSAgICAyNjQsIDkyLCAyNjQsIDkzLCAyNjQsIDk0LCAyNjQsIDk1LCAyNjQsIDk2LCAyNjQsIDk3LCAyNjQsIDk4LCAyNjQsIDk5LCAKLSAgICAyNjQsIDEwMCwgMjY0LCAxMDEsIDI2NCwgMTAyLCAyNjQsIDEwMywgMjY0LCAxMDQsIDI2NCwgMTA1LCAyNjQsIDEwNiwgCi0gICAgMjY0LCAxMDcsIDI2NCwgMTA4LCAyNjQsIDEwOSwgMjY0LCAxMTAsIDI2NCwgMTExLCAyNjQsIDExMiwgMjY0LCAxMTMsIAotICAgIDI2NCwgMTE0LCAyNjQsIDExNSwgMjY0LCAxMTYsIDI2NCwgMTE3LCAyNjQsIDExOCwgMjY0LCAxMTksIDI2NCwgMTIwLCAKLSAgICAyNjQsIDEyMSwgMjY0LCAxMjIsIDI2NCwgMTIzLCAyNjQsIDEyNCwgMjY0LCAxMjUsIDI2NCwgMTI2LCAyNjQsIDEwNjI5LCAKLSAgICAyNjQsIDEwNjMwLCAyNzIsIDEyMjkwLCAyNzIsIDEyMzAwLCAyNzIsIDEyMzAxLCAyNzIsIDEyMjg5LCAyNzIsIDEyNTM5LCAKLSAgICAyNzIsIDEyNTMwLCAyNzIsIDEyNDQ5LCAyNzIsIDEyNDUxLCAyNzIsIDEyNDUzLCAyNzIsIDEyNDU1LCAyNzIsIDEyNDU3LCAKLSAgICAyNzIsIDEyNTE1LCAyNzIsIDEyNTE3LCAyNzIsIDEyNTE5LCAyNzIsIDEyNDgzLCAyNzIsIDEyNTQwLCAyNzIsIDEyNDUwLCAKLSAgICAyNzIsIDEyNDUyLCAyNzIsIDEyNDU0LCAyNzIsIDEyNDU2LCAyNzIsIDEyNDU4LCAyNzIsIDEyNDU5LCAyNzIsIDEyNDYxLCAKLSAgICAyNzIsIDEyNDYzLCAyNzIsIDEyNDY1LCAyNzIsIDEyNDY3LCAyNzIsIDEyNDY5LCAyNzIsIDEyNDcxLCAyNzIsIDEyNDczLCAKLSAgICAyNzIsIDEyNDc1LCAyNzIsIDEyNDc3LCAyNzIsIDEyNDc5LCAyNzIsIDEyNDgxLCAyNzIsIDEyNDg0LCAyNzIsIDEyNDg2LCAKLSAgICAyNzIsIDEyNDg4LCAyNzIsIDEyNDkwLCAyNzIsIDEyNDkxLCAyNzIsIDEyNDkyLCAyNzIsIDEyNDkzLCAyNzIsIDEyNDk0LCAKLSAgICAyNzIsIDEyNDk1LCAyNzIsIDEyNDk4LCAyNzIsIDEyNTAxLCAyNzIsIDEyNTA0LCAyNzIsIDEyNTA3LCAyNzIsIDEyNTEwLCAKLSAgICAyNzIsIDEyNTExLCAyNzIsIDEyNTEyLCAyNzIsIDEyNTEzLCAyNzIsIDEyNTE0LCAyNzIsIDEyNTE2LCAyNzIsIDEyNTE4LCAKLSAgICAyNzIsIDEyNTIwLCAyNzIsIDEyNTIxLCAyNzIsIDEyNTIyLCAyNzIsIDEyNTIzLCAyNzIsIDEyNTI0LCAyNzIsIDEyNTI1LCAKLSAgICAyNzIsIDEyNTI3LCAyNzIsIDEyNTMxLCAyNzIsIDEyNDQxLCAyNzIsIDEyNDQyLCAyNzIsIDEyNjQ0LCAyNzIsIDEyNTkzLCAKLSAgICAyNzIsIDEyNTk0LCAyNzIsIDEyNTk1LCAyNzIsIDEyNTk2LCAyNzIsIDEyNTk3LCAyNzIsIDEyNTk4LCAyNzIsIDEyNTk5LCAKLSAgICAyNzIsIDEyNjAwLCAyNzIsIDEyNjAxLCAyNzIsIDEyNjAyLCAyNzIsIDEyNjAzLCAyNzIsIDEyNjA0LCAyNzIsIDEyNjA1LCAKLSAgICAyNzIsIDEyNjA2LCAyNzIsIDEyNjA3LCAyNzIsIDEyNjA4LCAyNzIsIDEyNjA5LCAyNzIsIDEyNjEwLCAyNzIsIDEyNjExLCAKLSAgICAyNzIsIDEyNjEyLCAyNzIsIDEyNjEzLCAyNzIsIDEyNjE0LCAyNzIsIDEyNjE1LCAyNzIsIDEyNjE2LCAyNzIsIDEyNjE3LCAKLSAgICAyNzIsIDEyNjE4LCAyNzIsIDEyNjE5LCAyNzIsIDEyNjIwLCAyNzIsIDEyNjIxLCAyNzIsIDEyNjIyLCAyNzIsIDEyNjIzLCAKLSAgICAyNzIsIDEyNjI0LCAyNzIsIDEyNjI1LCAyNzIsIDEyNjI2LCAyNzIsIDEyNjI3LCAyNzIsIDEyNjI4LCAyNzIsIDEyNjI5LCAKLSAgICAyNzIsIDEyNjMwLCAyNzIsIDEyNjMxLCAyNzIsIDEyNjMyLCAyNzIsIDEyNjMzLCAyNzIsIDEyNjM0LCAyNzIsIDEyNjM1LCAKLSAgICAyNzIsIDEyNjM2LCAyNzIsIDEyNjM3LCAyNzIsIDEyNjM4LCAyNzIsIDEyNjM5LCAyNzIsIDEyNjQwLCAyNzIsIDEyNjQxLCAKLSAgICAyNzIsIDEyNjQyLCAyNzIsIDEyNjQzLCAyNjQsIDE2MiwgMjY0LCAxNjMsIDI2NCwgMTcyLCAyNjQsIDE3NSwgMjY0LCAxNjYsIAotICAgIDI2NCwgMTY1LCAyNjQsIDgzNjEsIDI3MiwgOTQ3NCwgMjcyLCA4NTkyLCAyNzIsIDg1OTMsIDI3MiwgODU5NCwgMjcyLCAKLSAgICA4NTk1LCAyNzIsIDk2MzIsIDI3MiwgOTY3NSwgNTEyLCA2OTc4NSwgNjk4MTgsIDUxMiwgNjk3ODcsIDY5ODE4LCA1MTIsIAotICAgIDY5Nzk3LCA2OTgxOCwgNTEyLCA2OTkzNywgNjk5MjcsIDUxMiwgNjk5MzgsIDY5OTI3LCA1MTIsIDExOTEyNywgMTE5MTQxLCAKLSAgICA1MTIsIDExOTEyOCwgMTE5MTQxLCA1MTIsIDExOTEzNSwgMTE5MTUwLCA1MTIsIDExOTEzNSwgMTE5MTUxLCA1MTIsIAotICAgIDExOTEzNSwgMTE5MTUyLCA1MTIsIDExOTEzNSwgMTE5MTUzLCA1MTIsIDExOTEzNSwgMTE5MTU0LCA1MTIsIDExOTIyNSwgCi0gICAgMTE5MTQxLCA1MTIsIDExOTIyNiwgMTE5MTQxLCA1MTIsIDExOTIyNywgMTE5MTUwLCA1MTIsIDExOTIyOCwgMTE5MTUwLCAKLSAgICA1MTIsIDExOTIyNywgMTE5MTUxLCA1MTIsIDExOTIyOCwgMTE5MTUxLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY3LCAyNjIsIAotICAgIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAyNjIsIDcyLCAyNjIsIDczLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIAotICAgIDc2LCAyNjIsIDc3LCAyNjIsIDc4LCAyNjIsIDc5LCAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgyLCAyNjIsIDgzLCAyNjIsIAotICAgIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDkwLCAyNjIsIDk3LCAyNjIsIAotICAgIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDQsIDI2MiwgMTA1LCAKLSAgICAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTExLCAyNjIsIDExMiwgCi0gICAgMjYyLCAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAxMTksIAotICAgIDI2MiwgMTIwLCAyNjIsIDEyMSwgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgNjgsIDI2MiwgCi0gICAgNjksIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzIsIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIDI2MiwgCi0gICAgNzcsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIDI2MiwgODEsIDI2MiwgODIsIDI2MiwgODMsIDI2MiwgODQsIDI2MiwgCi0gICAgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIDI2MiwgCi0gICAgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAKLSAgICAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgCi0gICAgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIAotICAgIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY3LCAyNjIsIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAKLSAgICAyNjIsIDcyLCAyNjIsIDczLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAyNjIsIDc4LCAyNjIsIDc5LCAKLSAgICAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgyLCAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAKLSAgICAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDkwLCAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDEsIAotICAgIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAKKyAgICAyNjA4NSwgNzc4LCAxMDMsIDk3LCAxMDgsIDI1OSwgMTA5OCwgMjU5LCAxMTAwLCAyNTksIDQyODYzLCAyNTksIDI5NCwgCisgICAgMjU5LCAzMzksIDI1OSwgNDI3OTEsIDI1OSwgNDM4MzEsIDI1OSwgNjE5LCAyNTksIDQzODU4LCAyNTYsIDM1OTEyLCAyNTYsIAorICAgIDI2MzU2LCAyNTYsIDM2NTU0LCAyNTYsIDM2MDQwLCAyNTYsIDI4MzY5LCAyNTYsIDIwMDE4LCAyNTYsIDIxNDc3LCAyNTYsIAorICAgIDQwODYwLCAyNTYsIDQwODYwLCAyNTYsIDIyODY1LCAyNTYsIDM3MzI5LCAyNTYsIDIxODk1LCAyNTYsIDIyODU2LCAyNTYsIAorICAgIDI1MDc4LCAyNTYsIDMwMzEzLCAyNTYsIDMyNjQ1LCAyNTYsIDM0MzY3LCAyNTYsIDM0NzQ2LCAyNTYsIDM1MDY0LCAyNTYsIAorICAgIDM3MDA3LCAyNTYsIDI3MTM4LCAyNTYsIDI3OTMxLCAyNTYsIDI4ODg5LCAyNTYsIDI5NjYyLCAyNTYsIDMzODUzLCAyNTYsIAorICAgIDM3MjI2LCAyNTYsIDM5NDA5LCAyNTYsIDIwMDk4LCAyNTYsIDIxMzY1LCAyNTYsIDI3Mzk2LCAyNTYsIDI5MjExLCAyNTYsIAorICAgIDM0MzQ5LCAyNTYsIDQwNDc4LCAyNTYsIDIzODg4LCAyNTYsIDI4NjUxLCAyNTYsIDM0MjUzLCAyNTYsIDM1MTcyLCAyNTYsIAorICAgIDI1Mjg5LCAyNTYsIDMzMjQwLCAyNTYsIDM0ODQ3LCAyNTYsIDI0MjY2LCAyNTYsIDI2MzkxLCAyNTYsIDI4MDEwLCAyNTYsIAorICAgIDI5NDM2LCAyNTYsIDM3MDcwLCAyNTYsIDIwMzU4LCAyNTYsIDIwOTE5LCAyNTYsIDIxMjE0LCAyNTYsIDI1Nzk2LCAyNTYsIAorICAgIDI3MzQ3LCAyNTYsIDI5MjAwLCAyNTYsIDMwNDM5LCAyNTYsIDMyNzY5LCAyNTYsIDM0MzEwLCAyNTYsIDM0Mzk2LCAyNTYsIAorICAgIDM2MzM1LCAyNTYsIDM4NzA2LCAyNTYsIDM5NzkxLCAyNTYsIDQwNDQyLCAyNTYsIDMwODYwLCAyNTYsIDMxMTAzLCAyNTYsIAorICAgIDMyMTYwLCAyNTYsIDMzNzM3LCAyNTYsIDM3NjM2LCAyNTYsIDQwNTc1LCAyNTYsIDM1NTQyLCAyNTYsIDIyNzUxLCAyNTYsIAorICAgIDI0MzI0LCAyNTYsIDMxODQwLCAyNTYsIDMyODk0LCAyNTYsIDI5MjgyLCAyNTYsIDMwOTIyLCAyNTYsIDM2MDM0LCAyNTYsIAorICAgIDM4NjQ3LCAyNTYsIDIyNzQ0LCAyNTYsIDIzNjUwLCAyNTYsIDI3MTU1LCAyNTYsIDI4MTIyLCAyNTYsIDI4NDMxLCAyNTYsIAorICAgIDMyMDQ3LCAyNTYsIDMyMzExLCAyNTYsIDM4NDc1LCAyNTYsIDIxMjAyLCAyNTYsIDMyOTA3LCAyNTYsIDIwOTU2LCAyNTYsIAorICAgIDIwOTQwLCAyNTYsIDMxMjYwLCAyNTYsIDMyMTkwLCAyNTYsIDMzNzc3LCAyNTYsIDM4NTE3LCAyNTYsIDM1NzEyLCAyNTYsIAorICAgIDI1Mjk1LCAyNTYsIDI3MTM4LCAyNTYsIDM1NTgyLCAyNTYsIDIwMDI1LCAyNTYsIDIzNTI3LCAyNTYsIDI0NTk0LCAyNTYsIAorICAgIDI5NTc1LCAyNTYsIDMwMDY0LCAyNTYsIDIxMjcxLCAyNTYsIDMwOTcxLCAyNTYsIDIwNDE1LCAyNTYsIDI0NDg5LCAyNTYsIAorICAgIDE5OTgxLCAyNTYsIDI3ODUyLCAyNTYsIDI1OTc2LCAyNTYsIDMyMDM0LCAyNTYsIDIxNDQzLCAyNTYsIDIyNjIyLCAyNTYsIAorICAgIDMwNDY1LCAyNTYsIDMzODY1LCAyNTYsIDM1NDk4LCAyNTYsIDI3NTc4LCAyNTYsIDM2Nzg0LCAyNTYsIDI3Nzg0LCAyNTYsIAorICAgIDI1MzQyLCAyNTYsIDMzNTA5LCAyNTYsIDI1NTA0LCAyNTYsIDMwMDUzLCAyNTYsIDIwMTQyLCAyNTYsIDIwODQxLCAyNTYsIAorICAgIDIwOTM3LCAyNTYsIDI2NzUzLCAyNTYsIDMxOTc1LCAyNTYsIDMzMzkxLCAyNTYsIDM1NTM4LCAyNTYsIDM3MzI3LCAyNTYsIAorICAgIDIxMjM3LCAyNTYsIDIxNTcwLCAyNTYsIDIyODk5LCAyNTYsIDI0MzAwLCAyNTYsIDI2MDUzLCAyNTYsIDI4NjcwLCAyNTYsIAorICAgIDMxMDE4LCAyNTYsIDM4MzE3LCAyNTYsIDM5NTMwLCAyNTYsIDQwNTk5LCAyNTYsIDQwNjU0LCAyNTYsIDIxMTQ3LCAyNTYsIAorICAgIDI2MzEwLCAyNTYsIDI3NTExLCAyNTYsIDM2NzA2LCAyNTYsIDI0MTgwLCAyNTYsIDI0OTc2LCAyNTYsIDI1MDg4LCAyNTYsIAorICAgIDI1NzU0LCAyNTYsIDI4NDUxLCAyNTYsIDI5MDAxLCAyNTYsIDI5ODMzLCAyNTYsIDMxMTc4LCAyNTYsIDMyMjQ0LCAyNTYsIAorICAgIDMyODc5LCAyNTYsIDM2NjQ2LCAyNTYsIDM0MDMwLCAyNTYsIDM2ODk5LCAyNTYsIDM3NzA2LCAyNTYsIDIxMDE1LCAyNTYsIAorICAgIDIxMTU1LCAyNTYsIDIxNjkzLCAyNTYsIDI4ODcyLCAyNTYsIDM1MDEwLCAyNTYsIDM1NDk4LCAyNTYsIDI0MjY1LCAyNTYsIAorICAgIDI0NTY1LCAyNTYsIDI1NDY3LCAyNTYsIDI3NTY2LCAyNTYsIDMxODA2LCAyNTYsIDI5NTU3LCAyNTYsIDIwMTk2LCAyNTYsIAorICAgIDIyMjY1LCAyNTYsIDIzNTI3LCAyNTYsIDIzOTk0LCAyNTYsIDI0NjA0LCAyNTYsIDI5NjE4LCAyNTYsIDI5ODAxLCAyNTYsIAorICAgIDMyNjY2LCAyNTYsIDMyODM4LCAyNTYsIDM3NDI4LCAyNTYsIDM4NjQ2LCAyNTYsIDM4NzI4LCAyNTYsIDM4OTM2LCAyNTYsIAorICAgIDIwMzYzLCAyNTYsIDMxMTUwLCAyNTYsIDM3MzAwLCAyNTYsIDM4NTg0LCAyNTYsIDI0ODAxLCAyNTYsIDIwMTAyLCAyNTYsIAorICAgIDIwNjk4LCAyNTYsIDIzNTM0LCAyNTYsIDIzNjE1LCAyNTYsIDI2MDA5LCAyNTYsIDI3MTM4LCAyNTYsIDI5MTM0LCAyNTYsIAorICAgIDMwMjc0LCAyNTYsIDM0MDQ0LCAyNTYsIDM2OTg4LCAyNTYsIDQwODQ1LCAyNTYsIDI2MjQ4LCAyNTYsIDM4NDQ2LCAyNTYsIAorICAgIDIxMTI5LCAyNTYsIDI2NDkxLCAyNTYsIDI2NjExLCAyNTYsIDI3OTY5LCAyNTYsIDI4MzE2LCAyNTYsIDI5NzA1LCAyNTYsIAorICAgIDMwMDQxLCAyNTYsIDMwODI3LCAyNTYsIDMyMDE2LCAyNTYsIDM5MDA2LCAyNTYsIDIwODQ1LCAyNTYsIDI1MTM0LCAyNTYsIAorICAgIDM4NTIwLCAyNTYsIDIwNTIzLCAyNTYsIDIzODMzLCAyNTYsIDI4MTM4LCAyNTYsIDM2NjUwLCAyNTYsIDI0NDU5LCAyNTYsIAorICAgIDI0OTAwLCAyNTYsIDI2NjQ3LCAyNTYsIDI5NTc1LCAyNTYsIDM4NTM0LCAyNTYsIDIxMDMzLCAyNTYsIDIxNTE5LCAyNTYsIAorICAgIDIzNjUzLCAyNTYsIDI2MTMxLCAyNTYsIDI2NDQ2LCAyNTYsIDI2NzkyLCAyNTYsIDI3ODc3LCAyNTYsIDI5NzAyLCAyNTYsIAorICAgIDMwMTc4LCAyNTYsIDMyNjMzLCAyNTYsIDM1MDIzLCAyNTYsIDM1MDQxLCAyNTYsIDM3MzI0LCAyNTYsIDM4NjI2LCAyNTYsIAorICAgIDIxMzExLCAyNTYsIDI4MzQ2LCAyNTYsIDIxNTMzLCAyNTYsIDI5MTM2LCAyNTYsIDI5ODQ4LCAyNTYsIDM0Mjk4LCAyNTYsIAorICAgIDM4NTYzLCAyNTYsIDQwMDIzLCAyNTYsIDQwNjA3LCAyNTYsIDI2NTE5LCAyNTYsIDI4MTA3LCAyNTYsIDMzMjU2LCAyNTYsIAorICAgIDMxNDM1LCAyNTYsIDMxNTIwLCAyNTYsIDMxODkwLCAyNTYsIDI5Mzc2LCAyNTYsIDI4ODI1LCAyNTYsIDM1NjcyLCAyNTYsIAorICAgIDIwMTYwLCAyNTYsIDMzNTkwLCAyNTYsIDIxMDUwLCAyNTYsIDIwOTk5LCAyNTYsIDI0MjMwLCAyNTYsIDI1Mjk5LCAyNTYsIAorICAgIDMxOTU4LCAyNTYsIDIzNDI5LCAyNTYsIDI3OTM0LCAyNTYsIDI2MjkyLCAyNTYsIDM2NjY3LCAyNTYsIDM0ODkyLCAyNTYsIAorICAgIDM4NDc3LCAyNTYsIDM1MjExLCAyNTYsIDI0Mjc1LCAyNTYsIDIwODAwLCAyNTYsIDIxOTUyLCAyNTYsIDIyNjE4LCAyNTYsIAorICAgIDI2MjI4LCAyNTYsIDIwOTU4LCAyNTYsIDI5NDgyLCAyNTYsIDMwNDEwLCAyNTYsIDMxMDM2LCAyNTYsIDMxMDcwLCAyNTYsIAorICAgIDMxMDc3LCAyNTYsIDMxMTE5LCAyNTYsIDM4NzQyLCAyNTYsIDMxOTM0LCAyNTYsIDMyNzAxLCAyNTYsIDM0MzIyLCAyNTYsIAorICAgIDM1NTc2LCAyNTYsIDM2OTIwLCAyNTYsIDM3MTE3LCAyNTYsIDM5MTUxLCAyNTYsIDM5MTY0LCAyNTYsIDM5MjA4LCAyNTYsIAorICAgIDQwMzcyLCAyNTYsIDM3MDg2LCAyNTYsIDM4NTgzLCAyNTYsIDIwMzk4LCAyNTYsIDIwNzExLCAyNTYsIDIwODEzLCAyNTYsIAorICAgIDIxMTkzLCAyNTYsIDIxMjIwLCAyNTYsIDIxMzI5LCAyNTYsIDIxOTE3LCAyNTYsIDIyMDIyLCAyNTYsIDIyMTIwLCAyNTYsIAorICAgIDIyNTkyLCAyNTYsIDIyNjk2LCAyNTYsIDIzNjUyLCAyNTYsIDIzNjYyLCAyNTYsIDI0NzI0LCAyNTYsIDI0OTM2LCAyNTYsIAorICAgIDI0OTc0LCAyNTYsIDI1MDc0LCAyNTYsIDI1OTM1LCAyNTYsIDI2MDgyLCAyNTYsIDI2MjU3LCAyNTYsIDI2NzU3LCAyNTYsIAorICAgIDI4MDIzLCAyNTYsIDI4MTg2LCAyNTYsIDI4NDUwLCAyNTYsIDI5MDM4LCAyNTYsIDI5MjI3LCAyNTYsIDI5NzMwLCAyNTYsIAorICAgIDMwODY1LCAyNTYsIDMxMDM4LCAyNTYsIDMxMDQ5LCAyNTYsIDMxMDQ4LCAyNTYsIDMxMDU2LCAyNTYsIDMxMDYyLCAyNTYsIAorICAgIDMxMDY5LCAyNTYsIDMxMTE3LCAyNTYsIDMxMTE4LCAyNTYsIDMxMjk2LCAyNTYsIDMxMzYxLCAyNTYsIDMxNjgwLCAyNTYsIAorICAgIDMyMjQ0LCAyNTYsIDMyMjY1LCAyNTYsIDMyMzIxLCAyNTYsIDMyNjI2LCAyNTYsIDMyNzczLCAyNTYsIDMzMjYxLCAyNTYsIAorICAgIDMzNDAxLCAyNTYsIDMzNDAxLCAyNTYsIDMzODc5LCAyNTYsIDM1MDg4LCAyNTYsIDM1MjIyLCAyNTYsIDM1NTg1LCAyNTYsIAorICAgIDM1NjQxLCAyNTYsIDM2MDUxLCAyNTYsIDM2MTA0LCAyNTYsIDM2NzkwLCAyNTYsIDM2OTIwLCAyNTYsIDM4NjI3LCAyNTYsIAorICAgIDM4OTExLCAyNTYsIDM4OTcxLCAyNTYsIDI0NjkzLCAyNTYsIDE0ODIwNiwgMjU2LCAzMzMwNCwgMjU2LCAyMDAwNiwgMjU2LCAKKyAgICAyMDkxNywgMjU2LCAyMDg0MCwgMjU2LCAyMDM1MiwgMjU2LCAyMDgwNSwgMjU2LCAyMDg2NCwgMjU2LCAyMTE5MSwgMjU2LCAKKyAgICAyMTI0MiwgMjU2LCAyMTkxNywgMjU2LCAyMTg0NSwgMjU2LCAyMTkxMywgMjU2LCAyMTk4NiwgMjU2LCAyMjYxOCwgMjU2LCAKKyAgICAyMjcwNywgMjU2LCAyMjg1MiwgMjU2LCAyMjg2OCwgMjU2LCAyMzEzOCwgMjU2LCAyMzMzNiwgMjU2LCAyNDI3NCwgMjU2LCAKKyAgICAyNDI4MSwgMjU2LCAyNDQyNSwgMjU2LCAyNDQ5MywgMjU2LCAyNDc5MiwgMjU2LCAyNDkxMCwgMjU2LCAyNDg0MCwgMjU2LCAKKyAgICAyNDk3NCwgMjU2LCAyNDkyOCwgMjU2LCAyNTA3NCwgMjU2LCAyNTE0MCwgMjU2LCAyNTU0MCwgMjU2LCAyNTYyOCwgMjU2LCAKKyAgICAyNTY4MiwgMjU2LCAyNTk0MiwgMjU2LCAyNjIyOCwgMjU2LCAyNjM5MSwgMjU2LCAyNjM5NSwgMjU2LCAyNjQ1NCwgMjU2LCAKKyAgICAyNzUxMywgMjU2LCAyNzU3OCwgMjU2LCAyNzk2OSwgMjU2LCAyODM3OSwgMjU2LCAyODM2MywgMjU2LCAyODQ1MCwgMjU2LCAKKyAgICAyODcwMiwgMjU2LCAyOTAzOCwgMjU2LCAzMDYzMSwgMjU2LCAyOTIzNywgMjU2LCAyOTM1OSwgMjU2LCAyOTQ4MiwgMjU2LCAKKyAgICAyOTgwOSwgMjU2LCAyOTk1OCwgMjU2LCAzMDAxMSwgMjU2LCAzMDIzNywgMjU2LCAzMDIzOSwgMjU2LCAzMDQxMCwgMjU2LCAKKyAgICAzMDQyNywgMjU2LCAzMDQ1MiwgMjU2LCAzMDUzOCwgMjU2LCAzMDUyOCwgMjU2LCAzMDkyNCwgMjU2LCAzMTQwOSwgMjU2LCAKKyAgICAzMTY4MCwgMjU2LCAzMTg2NywgMjU2LCAzMjA5MSwgMjU2LCAzMjI0NCwgMjU2LCAzMjU3NCwgMjU2LCAzMjc3MywgMjU2LCAKKyAgICAzMzYxOCwgMjU2LCAzMzc3NSwgMjU2LCAzNDY4MSwgMjU2LCAzNTEzNywgMjU2LCAzNTIwNiwgMjU2LCAzNTIyMiwgMjU2LCAKKyAgICAzNTUxOSwgMjU2LCAzNTU3NiwgMjU2LCAzNTUzMSwgMjU2LCAzNTU4NSwgMjU2LCAzNTU4MiwgMjU2LCAzNTU2NSwgMjU2LCAKKyAgICAzNTY0MSwgMjU2LCAzNTcyMiwgMjU2LCAzNjEwNCwgMjU2LCAzNjY2NCwgMjU2LCAzNjk3OCwgMjU2LCAzNzI3MywgMjU2LCAKKyAgICAzNzQ5NCwgMjU2LCAzODUyNCwgMjU2LCAzODYyNywgMjU2LCAzODc0MiwgMjU2LCAzODg3NSwgMjU2LCAzODkxMSwgMjU2LCAKKyAgICAzODkyMywgMjU2LCAzODk3MSwgMjU2LCAzOTY5OCwgMjU2LCA0MDg2MCwgMjU2LCAxNDEzODYsIDI1NiwgMTQxMzgwLCAyNTYsIAorICAgIDE0NDM0MSwgMjU2LCAxNTI2MSwgMjU2LCAxNjQwOCwgMjU2LCAxNjQ0MSwgMjU2LCAxNTIxMzcsIDI1NiwgMTU0ODMyLCAKKyAgICAyNTYsIDE2MzUzOSwgMjU2LCA0MDc3MSwgMjU2LCA0MDg0NiwgNTE0LCAxMDIsIDEwMiwgNTE0LCAxMDIsIDEwNSwgNTE0LCAKKyAgICAxMDIsIDEwOCwgNzcwLCAxMDIsIDEwMiwgMTA1LCA3NzAsIDEwMiwgMTAyLCAxMDgsIDUxNCwgMzgzLCAxMTYsIDUxNCwgCisgICAgMTE1LCAxMTYsIDUxNCwgMTM5NiwgMTM5OCwgNTE0LCAxMzk2LCAxMzgxLCA1MTQsIDEzOTYsIDEzODcsIDUxNCwgMTQwNiwgCisgICAgMTM5OCwgNTE0LCAxMzk2LCAxMzg5LCA1MTIsIDE0OTcsIDE0NjAsIDUxMiwgMTUyMiwgMTQ2MywgMjYyLCAxNTA2LCAyNjIsIAorICAgIDE0ODgsIDI2MiwgMTQ5MSwgMjYyLCAxNDkyLCAyNjIsIDE0OTksIDI2MiwgMTUwMCwgMjYyLCAxNTAxLCAyNjIsIDE1MTIsIAorICAgIDI2MiwgMTUxNCwgMjYyLCA0MywgNTEyLCAxNTEzLCAxNDczLCA1MTIsIDE1MTMsIDE0NzQsIDUxMiwgNjQzMjksIDE0NzMsIAorICAgIDUxMiwgNjQzMjksIDE0NzQsIDUxMiwgMTQ4OCwgMTQ2MywgNTEyLCAxNDg4LCAxNDY0LCA1MTIsIDE0ODgsIDE0NjgsIDUxMiwgCisgICAgMTQ4OSwgMTQ2OCwgNTEyLCAxNDkwLCAxNDY4LCA1MTIsIDE0OTEsIDE0NjgsIDUxMiwgMTQ5MiwgMTQ2OCwgNTEyLCAxNDkzLCAKKyAgICAxNDY4LCA1MTIsIDE0OTQsIDE0NjgsIDUxMiwgMTQ5NiwgMTQ2OCwgNTEyLCAxNDk3LCAxNDY4LCA1MTIsIDE0OTgsIDE0NjgsIAorICAgIDUxMiwgMTQ5OSwgMTQ2OCwgNTEyLCAxNTAwLCAxNDY4LCA1MTIsIDE1MDIsIDE0NjgsIDUxMiwgMTUwNCwgMTQ2OCwgNTEyLCAKKyAgICAxNTA1LCAxNDY4LCA1MTIsIDE1MDcsIDE0NjgsIDUxMiwgMTUwOCwgMTQ2OCwgNTEyLCAxNTEwLCAxNDY4LCA1MTIsIDE1MTEsIAorICAgIDE0NjgsIDUxMiwgMTUxMiwgMTQ2OCwgNTEyLCAxNTEzLCAxNDY4LCA1MTIsIDE1MTQsIDE0NjgsIDUxMiwgMTQ5MywgMTQ2NSwgCisgICAgNTEyLCAxNDg5LCAxNDcxLCA1MTIsIDE0OTksIDE0NzEsIDUxMiwgMTUwOCwgMTQ3MSwgNTE0LCAxNDg4LCAxNTAwLCAyNjcsIAorICAgIDE2NDksIDI2OCwgMTY0OSwgMjY3LCAxNjU5LCAyNjgsIDE2NTksIDI2OSwgMTY1OSwgMjcwLCAxNjU5LCAyNjcsIDE2NjIsIAorICAgIDI2OCwgMTY2MiwgMjY5LCAxNjYyLCAyNzAsIDE2NjIsIDI2NywgMTY2NCwgMjY4LCAxNjY0LCAyNjksIDE2NjQsIDI3MCwgCisgICAgMTY2NCwgMjY3LCAxNjU4LCAyNjgsIDE2NTgsIDI2OSwgMTY1OCwgMjcwLCAxNjU4LCAyNjcsIDE2NjMsIDI2OCwgMTY2MywgCisgICAgMjY5LCAxNjYzLCAyNzAsIDE2NjMsIDI2NywgMTY1NywgMjY4LCAxNjU3LCAyNjksIDE2NTcsIDI3MCwgMTY1NywgMjY3LCAKKyAgICAxNzAwLCAyNjgsIDE3MDAsIDI2OSwgMTcwMCwgMjcwLCAxNzAwLCAyNjcsIDE3MDIsIDI2OCwgMTcwMiwgMjY5LCAxNzAyLCAKKyAgICAyNzAsIDE3MDIsIDI2NywgMTY2OCwgMjY4LCAxNjY4LCAyNjksIDE2NjgsIDI3MCwgMTY2OCwgMjY3LCAxNjY3LCAyNjgsIAorICAgIDE2NjcsIDI2OSwgMTY2NywgMjcwLCAxNjY3LCAyNjcsIDE2NzAsIDI2OCwgMTY3MCwgMjY5LCAxNjcwLCAyNzAsIDE2NzAsIAorICAgIDI2NywgMTY3MSwgMjY4LCAxNjcxLCAyNjksIDE2NzEsIDI3MCwgMTY3MSwgMjY3LCAxNjc3LCAyNjgsIDE2NzcsIDI2NywgCisgICAgMTY3NiwgMjY4LCAxNjc2LCAyNjcsIDE2NzgsIDI2OCwgMTY3OCwgMjY3LCAxNjcyLCAyNjgsIDE2NzIsIDI2NywgMTY4OCwgCisgICAgMjY4LCAxNjg4LCAyNjcsIDE2ODEsIDI2OCwgMTY4MSwgMjY3LCAxNzA1LCAyNjgsIDE3MDUsIDI2OSwgMTcwNSwgMjcwLCAKKyAgICAxNzA1LCAyNjcsIDE3MTEsIDI2OCwgMTcxMSwgMjY5LCAxNzExLCAyNzAsIDE3MTEsIDI2NywgMTcxNSwgMjY4LCAxNzE1LCAKKyAgICAyNjksIDE3MTUsIDI3MCwgMTcxNSwgMjY3LCAxNzEzLCAyNjgsIDE3MTMsIDI2OSwgMTcxMywgMjcwLCAxNzEzLCAyNjcsIAorICAgIDE3MjIsIDI2OCwgMTcyMiwgMjY3LCAxNzIzLCAyNjgsIDE3MjMsIDI2OSwgMTcyMywgMjcwLCAxNzIzLCAyNjcsIDE3MjgsIAorICAgIDI2OCwgMTcyOCwgMjY3LCAxNzI5LCAyNjgsIDE3MjksIDI2OSwgMTcyOSwgMjcwLCAxNzI5LCAyNjcsIDE3MjYsIDI2OCwgCisgICAgMTcyNiwgMjY5LCAxNzI2LCAyNzAsIDE3MjYsIDI2NywgMTc0NiwgMjY4LCAxNzQ2LCAyNjcsIDE3NDcsIDI2OCwgMTc0NywgCisgICAgMjY3LCAxNzA5LCAyNjgsIDE3MDksIDI2OSwgMTcwOSwgMjcwLCAxNzA5LCAyNjcsIDE3MzUsIDI2OCwgMTczNSwgMjY3LCAKKyAgICAxNzM0LCAyNjgsIDE3MzQsIDI2NywgMTczNiwgMjY4LCAxNzM2LCAyNjcsIDE2NTUsIDI2NywgMTczOSwgMjY4LCAxNzM5LCAKKyAgICAyNjcsIDE3MzMsIDI2OCwgMTczMywgMjY3LCAxNzM3LCAyNjgsIDE3MzcsIDI2NywgMTc0NCwgMjY4LCAxNzQ0LCAyNjksIAorICAgIDE3NDQsIDI3MCwgMTc0NCwgMjY5LCAxNjA5LCAyNzAsIDE2MDksIDUyMywgMTU3NCwgMTU3NSwgNTI0LCAxNTc0LCAxNTc1LCAKKyAgICA1MjMsIDE1NzQsIDE3NDksIDUyNCwgMTU3NCwgMTc0OSwgNTIzLCAxNTc0LCAxNjA4LCA1MjQsIDE1NzQsIDE2MDgsIDUyMywgCisgICAgMTU3NCwgMTczNSwgNTI0LCAxNTc0LCAxNzM1LCA1MjMsIDE1NzQsIDE3MzQsIDUyNCwgMTU3NCwgMTczNCwgNTIzLCAxNTc0LCAKKyAgICAxNzM2LCA1MjQsIDE1NzQsIDE3MzYsIDUyMywgMTU3NCwgMTc0NCwgNTI0LCAxNTc0LCAxNzQ0LCA1MjUsIDE1NzQsIDE3NDQsIAorICAgIDUyMywgMTU3NCwgMTYwOSwgNTI0LCAxNTc0LCAxNjA5LCA1MjUsIDE1NzQsIDE2MDksIDI2NywgMTc0MCwgMjY4LCAxNzQwLCAKKyAgICAyNjksIDE3NDAsIDI3MCwgMTc0MCwgNTIzLCAxNTc0LCAxNTgwLCA1MjMsIDE1NzQsIDE1ODEsIDUyMywgMTU3NCwgMTYwNSwgCisgICAgNTIzLCAxNTc0LCAxNjA5LCA1MjMsIDE1NzQsIDE2MTAsIDUyMywgMTU3NiwgMTU4MCwgNTIzLCAxNTc2LCAxNTgxLCA1MjMsIAorICAgIDE1NzYsIDE1ODIsIDUyMywgMTU3NiwgMTYwNSwgNTIzLCAxNTc2LCAxNjA5LCA1MjMsIDE1NzYsIDE2MTAsIDUyMywgMTU3OCwgCisgICAgMTU4MCwgNTIzLCAxNTc4LCAxNTgxLCA1MjMsIDE1NzgsIDE1ODIsIDUyMywgMTU3OCwgMTYwNSwgNTIzLCAxNTc4LCAxNjA5LCAKKyAgICA1MjMsIDE1NzgsIDE2MTAsIDUyMywgMTU3OSwgMTU4MCwgNTIzLCAxNTc5LCAxNjA1LCA1MjMsIDE1NzksIDE2MDksIDUyMywgCisgICAgMTU3OSwgMTYxMCwgNTIzLCAxNTgwLCAxNTgxLCA1MjMsIDE1ODAsIDE2MDUsIDUyMywgMTU4MSwgMTU4MCwgNTIzLCAxNTgxLCAKKyAgICAxNjA1LCA1MjMsIDE1ODIsIDE1ODAsIDUyMywgMTU4MiwgMTU4MSwgNTIzLCAxNTgyLCAxNjA1LCA1MjMsIDE1ODcsIDE1ODAsIAorICAgIDUyMywgMTU4NywgMTU4MSwgNTIzLCAxNTg3LCAxNTgyLCA1MjMsIDE1ODcsIDE2MDUsIDUyMywgMTU4OSwgMTU4MSwgNTIzLCAKKyAgICAxNTg5LCAxNjA1LCA1MjMsIDE1OTAsIDE1ODAsIDUyMywgMTU5MCwgMTU4MSwgNTIzLCAxNTkwLCAxNTgyLCA1MjMsIDE1OTAsIAorICAgIDE2MDUsIDUyMywgMTU5MSwgMTU4MSwgNTIzLCAxNTkxLCAxNjA1LCA1MjMsIDE1OTIsIDE2MDUsIDUyMywgMTU5MywgMTU4MCwgCisgICAgNTIzLCAxNTkzLCAxNjA1LCA1MjMsIDE1OTQsIDE1ODAsIDUyMywgMTU5NCwgMTYwNSwgNTIzLCAxNjAxLCAxNTgwLCA1MjMsIAorICAgIDE2MDEsIDE1ODEsIDUyMywgMTYwMSwgMTU4MiwgNTIzLCAxNjAxLCAxNjA1LCA1MjMsIDE2MDEsIDE2MDksIDUyMywgMTYwMSwgCisgICAgMTYxMCwgNTIzLCAxNjAyLCAxNTgxLCA1MjMsIDE2MDIsIDE2MDUsIDUyMywgMTYwMiwgMTYwOSwgNTIzLCAxNjAyLCAxNjEwLCAKKyAgICA1MjMsIDE2MDMsIDE1NzUsIDUyMywgMTYwMywgMTU4MCwgNTIzLCAxNjAzLCAxNTgxLCA1MjMsIDE2MDMsIDE1ODIsIDUyMywgCisgICAgMTYwMywgMTYwNCwgNTIzLCAxNjAzLCAxNjA1LCA1MjMsIDE2MDMsIDE2MDksIDUyMywgMTYwMywgMTYxMCwgNTIzLCAxNjA0LCAKKyAgICAxNTgwLCA1MjMsIDE2MDQsIDE1ODEsIDUyMywgMTYwNCwgMTU4MiwgNTIzLCAxNjA0LCAxNjA1LCA1MjMsIDE2MDQsIDE2MDksIAorICAgIDUyMywgMTYwNCwgMTYxMCwgNTIzLCAxNjA1LCAxNTgwLCA1MjMsIDE2MDUsIDE1ODEsIDUyMywgMTYwNSwgMTU4MiwgNTIzLCAKKyAgICAxNjA1LCAxNjA1LCA1MjMsIDE2MDUsIDE2MDksIDUyMywgMTYwNSwgMTYxMCwgNTIzLCAxNjA2LCAxNTgwLCA1MjMsIDE2MDYsIAorICAgIDE1ODEsIDUyMywgMTYwNiwgMTU4MiwgNTIzLCAxNjA2LCAxNjA1LCA1MjMsIDE2MDYsIDE2MDksIDUyMywgMTYwNiwgMTYxMCwgCisgICAgNTIzLCAxNjA3LCAxNTgwLCA1MjMsIDE2MDcsIDE2MDUsIDUyMywgMTYwNywgMTYwOSwgNTIzLCAxNjA3LCAxNjEwLCA1MjMsIAorICAgIDE2MTAsIDE1ODAsIDUyMywgMTYxMCwgMTU4MSwgNTIzLCAxNjEwLCAxNTgyLCA1MjMsIDE2MTAsIDE2MDUsIDUyMywgMTYxMCwgCisgICAgMTYwOSwgNTIzLCAxNjEwLCAxNjEwLCA1MjMsIDE1ODQsIDE2NDgsIDUyMywgMTU4NSwgMTY0OCwgNTIzLCAxNjA5LCAxNjQ4LCAKKyAgICA3NzksIDMyLCAxNjEyLCAxNjE3LCA3NzksIDMyLCAxNjEzLCAxNjE3LCA3NzksIDMyLCAxNjE0LCAxNjE3LCA3NzksIDMyLCAKKyAgICAxNjE1LCAxNjE3LCA3NzksIDMyLCAxNjE2LCAxNjE3LCA3NzksIDMyLCAxNjE3LCAxNjQ4LCA1MjQsIDE1NzQsIDE1ODUsIAorICAgIDUyNCwgMTU3NCwgMTU4NiwgNTI0LCAxNTc0LCAxNjA1LCA1MjQsIDE1NzQsIDE2MDYsIDUyNCwgMTU3NCwgMTYwOSwgNTI0LCAKKyAgICAxNTc0LCAxNjEwLCA1MjQsIDE1NzYsIDE1ODUsIDUyNCwgMTU3NiwgMTU4NiwgNTI0LCAxNTc2LCAxNjA1LCA1MjQsIDE1NzYsIAorICAgIDE2MDYsIDUyNCwgMTU3NiwgMTYwOSwgNTI0LCAxNTc2LCAxNjEwLCA1MjQsIDE1NzgsIDE1ODUsIDUyNCwgMTU3OCwgMTU4NiwgCisgICAgNTI0LCAxNTc4LCAxNjA1LCA1MjQsIDE1NzgsIDE2MDYsIDUyNCwgMTU3OCwgMTYwOSwgNTI0LCAxNTc4LCAxNjEwLCA1MjQsIAorICAgIDE1NzksIDE1ODUsIDUyNCwgMTU3OSwgMTU4NiwgNTI0LCAxNTc5LCAxNjA1LCA1MjQsIDE1NzksIDE2MDYsIDUyNCwgMTU3OSwgCisgICAgMTYwOSwgNTI0LCAxNTc5LCAxNjEwLCA1MjQsIDE2MDEsIDE2MDksIDUyNCwgMTYwMSwgMTYxMCwgNTI0LCAxNjAyLCAxNjA5LCAKKyAgICA1MjQsIDE2MDIsIDE2MTAsIDUyNCwgMTYwMywgMTU3NSwgNTI0LCAxNjAzLCAxNjA0LCA1MjQsIDE2MDMsIDE2MDUsIDUyNCwgCisgICAgMTYwMywgMTYwOSwgNTI0LCAxNjAzLCAxNjEwLCA1MjQsIDE2MDQsIDE2MDUsIDUyNCwgMTYwNCwgMTYwOSwgNTI0LCAxNjA0LCAKKyAgICAxNjEwLCA1MjQsIDE2MDUsIDE1NzUsIDUyNCwgMTYwNSwgMTYwNSwgNTI0LCAxNjA2LCAxNTg1LCA1MjQsIDE2MDYsIDE1ODYsIAorICAgIDUyNCwgMTYwNiwgMTYwNSwgNTI0LCAxNjA2LCAxNjA2LCA1MjQsIDE2MDYsIDE2MDksIDUyNCwgMTYwNiwgMTYxMCwgNTI0LCAKKyAgICAxNjA5LCAxNjQ4LCA1MjQsIDE2MTAsIDE1ODUsIDUyNCwgMTYxMCwgMTU4NiwgNTI0LCAxNjEwLCAxNjA1LCA1MjQsIDE2MTAsIAorICAgIDE2MDYsIDUyNCwgMTYxMCwgMTYwOSwgNTI0LCAxNjEwLCAxNjEwLCA1MjUsIDE1NzQsIDE1ODAsIDUyNSwgMTU3NCwgMTU4MSwgCisgICAgNTI1LCAxNTc0LCAxNTgyLCA1MjUsIDE1NzQsIDE2MDUsIDUyNSwgMTU3NCwgMTYwNywgNTI1LCAxNTc2LCAxNTgwLCA1MjUsIAorICAgIDE1NzYsIDE1ODEsIDUyNSwgMTU3NiwgMTU4MiwgNTI1LCAxNTc2LCAxNjA1LCA1MjUsIDE1NzYsIDE2MDcsIDUyNSwgMTU3OCwgCisgICAgMTU4MCwgNTI1LCAxNTc4LCAxNTgxLCA1MjUsIDE1NzgsIDE1ODIsIDUyNSwgMTU3OCwgMTYwNSwgNTI1LCAxNTc4LCAxNjA3LCAKKyAgICA1MjUsIDE1NzksIDE2MDUsIDUyNSwgMTU4MCwgMTU4MSwgNTI1LCAxNTgwLCAxNjA1LCA1MjUsIDE1ODEsIDE1ODAsIDUyNSwgCisgICAgMTU4MSwgMTYwNSwgNTI1LCAxNTgyLCAxNTgwLCA1MjUsIDE1ODIsIDE2MDUsIDUyNSwgMTU4NywgMTU4MCwgNTI1LCAxNTg3LCAKKyAgICAxNTgxLCA1MjUsIDE1ODcsIDE1ODIsIDUyNSwgMTU4NywgMTYwNSwgNTI1LCAxNTg5LCAxNTgxLCA1MjUsIDE1ODksIDE1ODIsIAorICAgIDUyNSwgMTU4OSwgMTYwNSwgNTI1LCAxNTkwLCAxNTgwLCA1MjUsIDE1OTAsIDE1ODEsIDUyNSwgMTU5MCwgMTU4MiwgNTI1LCAKKyAgICAxNTkwLCAxNjA1LCA1MjUsIDE1OTEsIDE1ODEsIDUyNSwgMTU5MiwgMTYwNSwgNTI1LCAxNTkzLCAxNTgwLCA1MjUsIDE1OTMsIAorICAgIDE2MDUsIDUyNSwgMTU5NCwgMTU4MCwgNTI1LCAxNTk0LCAxNjA1LCA1MjUsIDE2MDEsIDE1ODAsIDUyNSwgMTYwMSwgMTU4MSwgCisgICAgNTI1LCAxNjAxLCAxNTgyLCA1MjUsIDE2MDEsIDE2MDUsIDUyNSwgMTYwMiwgMTU4MSwgNTI1LCAxNjAyLCAxNjA1LCA1MjUsIAorICAgIDE2MDMsIDE1ODAsIDUyNSwgMTYwMywgMTU4MSwgNTI1LCAxNjAzLCAxNTgyLCA1MjUsIDE2MDMsIDE2MDQsIDUyNSwgMTYwMywgCisgICAgMTYwNSwgNTI1LCAxNjA0LCAxNTgwLCA1MjUsIDE2MDQsIDE1ODEsIDUyNSwgMTYwNCwgMTU4MiwgNTI1LCAxNjA0LCAxNjA1LCAKKyAgICA1MjUsIDE2MDQsIDE2MDcsIDUyNSwgMTYwNSwgMTU4MCwgNTI1LCAxNjA1LCAxNTgxLCA1MjUsIDE2MDUsIDE1ODIsIDUyNSwgCisgICAgMTYwNSwgMTYwNSwgNTI1LCAxNjA2LCAxNTgwLCA1MjUsIDE2MDYsIDE1ODEsIDUyNSwgMTYwNiwgMTU4MiwgNTI1LCAxNjA2LCAKKyAgICAxNjA1LCA1MjUsIDE2MDYsIDE2MDcsIDUyNSwgMTYwNywgMTU4MCwgNTI1LCAxNjA3LCAxNjA1LCA1MjUsIDE2MDcsIDE2NDgsIAorICAgIDUyNSwgMTYxMCwgMTU4MCwgNTI1LCAxNjEwLCAxNTgxLCA1MjUsIDE2MTAsIDE1ODIsIDUyNSwgMTYxMCwgMTYwNSwgNTI1LCAKKyAgICAxNjEwLCAxNjA3LCA1MjYsIDE1NzQsIDE2MDUsIDUyNiwgMTU3NCwgMTYwNywgNTI2LCAxNTc2LCAxNjA1LCA1MjYsIDE1NzYsIAorICAgIDE2MDcsIDUyNiwgMTU3OCwgMTYwNSwgNTI2LCAxNTc4LCAxNjA3LCA1MjYsIDE1NzksIDE2MDUsIDUyNiwgMTU3OSwgMTYwNywgCisgICAgNTI2LCAxNTg3LCAxNjA1LCA1MjYsIDE1ODcsIDE2MDcsIDUyNiwgMTU4OCwgMTYwNSwgNTI2LCAxNTg4LCAxNjA3LCA1MjYsIAorICAgIDE2MDMsIDE2MDQsIDUyNiwgMTYwMywgMTYwNSwgNTI2LCAxNjA0LCAxNjA1LCA1MjYsIDE2MDYsIDE2MDUsIDUyNiwgMTYwNiwgCisgICAgMTYwNywgNTI2LCAxNjEwLCAxNjA1LCA1MjYsIDE2MTAsIDE2MDcsIDc4MiwgMTYwMCwgMTYxNCwgMTYxNywgNzgyLCAxNjAwLCAKKyAgICAxNjE1LCAxNjE3LCA3ODIsIDE2MDAsIDE2MTYsIDE2MTcsIDUyMywgMTU5MSwgMTYwOSwgNTIzLCAxNTkxLCAxNjEwLCA1MjMsIAorICAgIDE1OTMsIDE2MDksIDUyMywgMTU5MywgMTYxMCwgNTIzLCAxNTk0LCAxNjA5LCA1MjMsIDE1OTQsIDE2MTAsIDUyMywgMTU4NywgCisgICAgMTYwOSwgNTIzLCAxNTg3LCAxNjEwLCA1MjMsIDE1ODgsIDE2MDksIDUyMywgMTU4OCwgMTYxMCwgNTIzLCAxNTgxLCAxNjA5LCAKKyAgICA1MjMsIDE1ODEsIDE2MTAsIDUyMywgMTU4MCwgMTYwOSwgNTIzLCAxNTgwLCAxNjEwLCA1MjMsIDE1ODIsIDE2MDksIDUyMywgCisgICAgMTU4MiwgMTYxMCwgNTIzLCAxNTg5LCAxNjA5LCA1MjMsIDE1ODksIDE2MTAsIDUyMywgMTU5MCwgMTYwOSwgNTIzLCAxNTkwLCAKKyAgICAxNjEwLCA1MjMsIDE1ODgsIDE1ODAsIDUyMywgMTU4OCwgMTU4MSwgNTIzLCAxNTg4LCAxNTgyLCA1MjMsIDE1ODgsIDE2MDUsIAorICAgIDUyMywgMTU4OCwgMTU4NSwgNTIzLCAxNTg3LCAxNTg1LCA1MjMsIDE1ODksIDE1ODUsIDUyMywgMTU5MCwgMTU4NSwgNTI0LCAKKyAgICAxNTkxLCAxNjA5LCA1MjQsIDE1OTEsIDE2MTAsIDUyNCwgMTU5MywgMTYwOSwgNTI0LCAxNTkzLCAxNjEwLCA1MjQsIDE1OTQsIAorICAgIDE2MDksIDUyNCwgMTU5NCwgMTYxMCwgNTI0LCAxNTg3LCAxNjA5LCA1MjQsIDE1ODcsIDE2MTAsIDUyNCwgMTU4OCwgMTYwOSwgCisgICAgNTI0LCAxNTg4LCAxNjEwLCA1MjQsIDE1ODEsIDE2MDksIDUyNCwgMTU4MSwgMTYxMCwgNTI0LCAxNTgwLCAxNjA5LCA1MjQsIAorICAgIDE1ODAsIDE2MTAsIDUyNCwgMTU4MiwgMTYwOSwgNTI0LCAxNTgyLCAxNjEwLCA1MjQsIDE1ODksIDE2MDksIDUyNCwgMTU4OSwgCisgICAgMTYxMCwgNTI0LCAxNTkwLCAxNjA5LCA1MjQsIDE1OTAsIDE2MTAsIDUyNCwgMTU4OCwgMTU4MCwgNTI0LCAxNTg4LCAxNTgxLCAKKyAgICA1MjQsIDE1ODgsIDE1ODIsIDUyNCwgMTU4OCwgMTYwNSwgNTI0LCAxNTg4LCAxNTg1LCA1MjQsIDE1ODcsIDE1ODUsIDUyNCwgCisgICAgMTU4OSwgMTU4NSwgNTI0LCAxNTkwLCAxNTg1LCA1MjUsIDE1ODgsIDE1ODAsIDUyNSwgMTU4OCwgMTU4MSwgNTI1LCAxNTg4LCAKKyAgICAxNTgyLCA1MjUsIDE1ODgsIDE2MDUsIDUyNSwgMTU4NywgMTYwNywgNTI1LCAxNTg4LCAxNjA3LCA1MjUsIDE1OTEsIDE2MDUsIAorICAgIDUyNiwgMTU4NywgMTU4MCwgNTI2LCAxNTg3LCAxNTgxLCA1MjYsIDE1ODcsIDE1ODIsIDUyNiwgMTU4OCwgMTU4MCwgNTI2LCAKKyAgICAxNTg4LCAxNTgxLCA1MjYsIDE1ODgsIDE1ODIsIDUyNiwgMTU5MSwgMTYwNSwgNTI2LCAxNTkyLCAxNjA1LCA1MjQsIDE1NzUsIAorICAgIDE2MTEsIDUyMywgMTU3NSwgMTYxMSwgNzgxLCAxNTc4LCAxNTgwLCAxNjA1LCA3ODAsIDE1NzgsIDE1ODEsIDE1ODAsIDc4MSwgCisgICAgMTU3OCwgMTU4MSwgMTU4MCwgNzgxLCAxNTc4LCAxNTgxLCAxNjA1LCA3ODEsIDE1NzgsIDE1ODIsIDE2MDUsIDc4MSwgCisgICAgMTU3OCwgMTYwNSwgMTU4MCwgNzgxLCAxNTc4LCAxNjA1LCAxNTgxLCA3ODEsIDE1NzgsIDE2MDUsIDE1ODIsIDc4MCwgCisgICAgMTU4MCwgMTYwNSwgMTU4MSwgNzgxLCAxNTgwLCAxNjA1LCAxNTgxLCA3ODAsIDE1ODEsIDE2MDUsIDE2MTAsIDc4MCwgCisgICAgMTU4MSwgMTYwNSwgMTYwOSwgNzgxLCAxNTg3LCAxNTgxLCAxNTgwLCA3ODEsIDE1ODcsIDE1ODAsIDE1ODEsIDc4MCwgCisgICAgMTU4NywgMTU4MCwgMTYwOSwgNzgwLCAxNTg3LCAxNjA1LCAxNTgxLCA3ODEsIDE1ODcsIDE2MDUsIDE1ODEsIDc4MSwgCisgICAgMTU4NywgMTYwNSwgMTU4MCwgNzgwLCAxNTg3LCAxNjA1LCAxNjA1LCA3ODEsIDE1ODcsIDE2MDUsIDE2MDUsIDc4MCwgCisgICAgMTU4OSwgMTU4MSwgMTU4MSwgNzgxLCAxNTg5LCAxNTgxLCAxNTgxLCA3ODAsIDE1ODksIDE2MDUsIDE2MDUsIDc4MCwgCisgICAgMTU4OCwgMTU4MSwgMTYwNSwgNzgxLCAxNTg4LCAxNTgxLCAxNjA1LCA3ODAsIDE1ODgsIDE1ODAsIDE2MTAsIDc4MCwgCisgICAgMTU4OCwgMTYwNSwgMTU4MiwgNzgxLCAxNTg4LCAxNjA1LCAxNTgyLCA3ODAsIDE1ODgsIDE2MDUsIDE2MDUsIDc4MSwgCisgICAgMTU4OCwgMTYwNSwgMTYwNSwgNzgwLCAxNTkwLCAxNTgxLCAxNjA5LCA3ODAsIDE1OTAsIDE1ODIsIDE2MDUsIDc4MSwgCisgICAgMTU5MCwgMTU4MiwgMTYwNSwgNzgwLCAxNTkxLCAxNjA1LCAxNTgxLCA3ODEsIDE1OTEsIDE2MDUsIDE1ODEsIDc4MSwgCisgICAgMTU5MSwgMTYwNSwgMTYwNSwgNzgwLCAxNTkxLCAxNjA1LCAxNjEwLCA3ODAsIDE1OTMsIDE1ODAsIDE2MDUsIDc4MCwgCisgICAgMTU5MywgMTYwNSwgMTYwNSwgNzgxLCAxNTkzLCAxNjA1LCAxNjA1LCA3ODAsIDE1OTMsIDE2MDUsIDE2MDksIDc4MCwgCisgICAgMTU5NCwgMTYwNSwgMTYwNSwgNzgwLCAxNTk0LCAxNjA1LCAxNjEwLCA3ODAsIDE1OTQsIDE2MDUsIDE2MDksIDc4MCwgCisgICAgMTYwMSwgMTU4MiwgMTYwNSwgNzgxLCAxNjAxLCAxNTgyLCAxNjA1LCA3ODAsIDE2MDIsIDE2MDUsIDE1ODEsIDc4MCwgCisgICAgMTYwMiwgMTYwNSwgMTYwNSwgNzgwLCAxNjA0LCAxNTgxLCAxNjA1LCA3ODAsIDE2MDQsIDE1ODEsIDE2MTAsIDc4MCwgCisgICAgMTYwNCwgMTU4MSwgMTYwOSwgNzgxLCAxNjA0LCAxNTgwLCAxNTgwLCA3ODAsIDE2MDQsIDE1ODAsIDE1ODAsIDc4MCwgCisgICAgMTYwNCwgMTU4MiwgMTYwNSwgNzgxLCAxNjA0LCAxNTgyLCAxNjA1LCA3ODAsIDE2MDQsIDE2MDUsIDE1ODEsIDc4MSwgCisgICAgMTYwNCwgMTYwNSwgMTU4MSwgNzgxLCAxNjA1LCAxNTgxLCAxNTgwLCA3ODEsIDE2MDUsIDE1ODEsIDE2MDUsIDc4MCwgCisgICAgMTYwNSwgMTU4MSwgMTYxMCwgNzgxLCAxNjA1LCAxNTgwLCAxNTgxLCA3ODEsIDE2MDUsIDE1ODAsIDE2MDUsIDc4MSwgCisgICAgMTYwNSwgMTU4MiwgMTU4MCwgNzgxLCAxNjA1LCAxNTgyLCAxNjA1LCA3ODEsIDE2MDUsIDE1ODAsIDE1ODIsIDc4MSwgCisgICAgMTYwNywgMTYwNSwgMTU4MCwgNzgxLCAxNjA3LCAxNjA1LCAxNjA1LCA3ODEsIDE2MDYsIDE1ODEsIDE2MDUsIDc4MCwgCisgICAgMTYwNiwgMTU4MSwgMTYwOSwgNzgwLCAxNjA2LCAxNTgwLCAxNjA1LCA3ODEsIDE2MDYsIDE1ODAsIDE2MDUsIDc4MCwgCisgICAgMTYwNiwgMTU4MCwgMTYwOSwgNzgwLCAxNjA2LCAxNjA1LCAxNjEwLCA3ODAsIDE2MDYsIDE2MDUsIDE2MDksIDc4MCwgCisgICAgMTYxMCwgMTYwNSwgMTYwNSwgNzgxLCAxNjEwLCAxNjA1LCAxNjA1LCA3ODAsIDE1NzYsIDE1ODIsIDE2MTAsIDc4MCwgCisgICAgMTU3OCwgMTU4MCwgMTYxMCwgNzgwLCAxNTc4LCAxNTgwLCAxNjA5LCA3ODAsIDE1NzgsIDE1ODIsIDE2MTAsIDc4MCwgCisgICAgMTU3OCwgMTU4MiwgMTYwOSwgNzgwLCAxNTc4LCAxNjA1LCAxNjEwLCA3ODAsIDE1NzgsIDE2MDUsIDE2MDksIDc4MCwgCisgICAgMTU4MCwgMTYwNSwgMTYxMCwgNzgwLCAxNTgwLCAxNTgxLCAxNjA5LCA3ODAsIDE1ODAsIDE2MDUsIDE2MDksIDc4MCwgCisgICAgMTU4NywgMTU4MiwgMTYwOSwgNzgwLCAxNTg5LCAxNTgxLCAxNjEwLCA3ODAsIDE1ODgsIDE1ODEsIDE2MTAsIDc4MCwgCisgICAgMTU5MCwgMTU4MSwgMTYxMCwgNzgwLCAxNjA0LCAxNTgwLCAxNjEwLCA3ODAsIDE2MDQsIDE2MDUsIDE2MTAsIDc4MCwgCisgICAgMTYxMCwgMTU4MSwgMTYxMCwgNzgwLCAxNjEwLCAxNTgwLCAxNjEwLCA3ODAsIDE2MTAsIDE2MDUsIDE2MTAsIDc4MCwgCisgICAgMTYwNSwgMTYwNSwgMTYxMCwgNzgwLCAxNjAyLCAxNjA1LCAxNjEwLCA3ODAsIDE2MDYsIDE1ODEsIDE2MTAsIDc4MSwgCisgICAgMTYwMiwgMTYwNSwgMTU4MSwgNzgxLCAxNjA0LCAxNTgxLCAxNjA1LCA3ODAsIDE1OTMsIDE2MDUsIDE2MTAsIDc4MCwgCisgICAgMTYwMywgMTYwNSwgMTYxMCwgNzgxLCAxNjA2LCAxNTgwLCAxNTgxLCA3ODAsIDE2MDUsIDE1ODIsIDE2MTAsIDc4MSwgCisgICAgMTYwNCwgMTU4MCwgMTYwNSwgNzgwLCAxNjAzLCAxNjA1LCAxNjA1LCA3ODAsIDE2MDQsIDE1ODAsIDE2MDUsIDc4MCwgCisgICAgMTYwNiwgMTU4MCwgMTU4MSwgNzgwLCAxNTgwLCAxNTgxLCAxNjEwLCA3ODAsIDE1ODEsIDE1ODAsIDE2MTAsIDc4MCwgCisgICAgMTYwNSwgMTU4MCwgMTYxMCwgNzgwLCAxNjAxLCAxNjA1LCAxNjEwLCA3ODAsIDE1NzYsIDE1ODEsIDE2MTAsIDc4MSwgCisgICAgMTYwMywgMTYwNSwgMTYwNSwgNzgxLCAxNTkzLCAxNTgwLCAxNjA1LCA3ODEsIDE1ODksIDE2MDUsIDE2MDUsIDc4MCwgCisgICAgMTU4NywgMTU4MiwgMTYxMCwgNzgwLCAxNjA2LCAxNTgwLCAxNjEwLCA3NzksIDE1ODksIDE2MDQsIDE3NDYsIDc3OSwgCisgICAgMTYwMiwgMTYwNCwgMTc0NiwgMTAzNSwgMTU3NSwgMTYwNCwgMTYwNCwgMTYwNywgMTAzNSwgMTU3NSwgMTYwMywgMTU3NiwgCisgICAgMTU4NSwgMTAzNSwgMTYwNSwgMTU4MSwgMTYwNSwgMTU4MywgMTAzNSwgMTU4OSwgMTYwNCwgMTU5MywgMTYwNSwgMTAzNSwgCisgICAgMTU4NSwgMTU4NywgMTYwOCwgMTYwNCwgMTAzNSwgMTU5MywgMTYwNCwgMTYxMCwgMTYwNywgMTAzNSwgMTYwOCwgMTU4NywgCisgICAgMTYwNCwgMTYwNSwgNzc5LCAxNTg5LCAxNjA0LCAxNjA5LCA0NjE5LCAxNTg5LCAxNjA0LCAxNjA5LCAzMiwgMTU3NSwgCisgICAgMTYwNCwgMTYwNCwgMTYwNywgMzIsIDE1OTMsIDE2MDQsIDE2MTAsIDE2MDcsIDMyLCAxNjA4LCAxNTg3LCAxNjA0LCAxNjA1LCAKKyAgICAyMDU5LCAxNTgwLCAxNjA0LCAzMiwgMTU4MCwgMTYwNCwgMTU3NSwgMTYwNCwgMTYwNywgMTAzNSwgMTU4NSwgMTc0MCwgCisgICAgMTU3NSwgMTYwNCwgMjY1LCA0NCwgMjY1LCAxMjI4OSwgMjY1LCAxMjI5MCwgMjY1LCA1OCwgMjY1LCA1OSwgMjY1LCAzMywgCisgICAgMjY1LCA2MywgMjY1LCAxMjMxMCwgMjY1LCAxMjMxMSwgMjY1LCA4MjMwLCAyNjUsIDgyMjksIDI2NSwgODIxMiwgMjY1LCAKKyAgICA4MjExLCAyNjUsIDk1LCAyNjUsIDk1LCAyNjUsIDQwLCAyNjUsIDQxLCAyNjUsIDEyMywgMjY1LCAxMjUsIDI2NSwgMTIzMDgsIAorICAgIDI2NSwgMTIzMDksIDI2NSwgMTIzMDQsIDI2NSwgMTIzMDUsIDI2NSwgMTIyOTgsIDI2NSwgMTIyOTksIDI2NSwgMTIyOTYsIAorICAgIDI2NSwgMTIyOTcsIDI2NSwgMTIzMDAsIDI2NSwgMTIzMDEsIDI2NSwgMTIzMDIsIDI2NSwgMTIzMDMsIDI2NSwgOTEsIDI2NSwgCisgICAgOTMsIDI1OCwgODI1NCwgMjU4LCA4MjU0LCAyNTgsIDgyNTQsIDI1OCwgODI1NCwgMjU4LCA5NSwgMjU4LCA5NSwgMjU4LCAKKyAgICA5NSwgMjcxLCA0NCwgMjcxLCAxMjI4OSwgMjcxLCA0NiwgMjcxLCA1OSwgMjcxLCA1OCwgMjcxLCA2MywgMjcxLCAzMywgCisgICAgMjcxLCA4MjEyLCAyNzEsIDQwLCAyNzEsIDQxLCAyNzEsIDEyMywgMjcxLCAxMjUsIDI3MSwgMTIzMDgsIDI3MSwgMTIzMDksIAorICAgIDI3MSwgMzUsIDI3MSwgMzgsIDI3MSwgNDIsIDI3MSwgNDMsIDI3MSwgNDUsIDI3MSwgNjAsIDI3MSwgNjIsIDI3MSwgNjEsIAorICAgIDI3MSwgOTIsIDI3MSwgMzYsIDI3MSwgMzcsIDI3MSwgNjQsIDUyMywgMzIsIDE2MTEsIDUyNiwgMTYwMCwgMTYxMSwgNTIzLCAKKyAgICAzMiwgMTYxMiwgNTIzLCAzMiwgMTYxMywgNTIzLCAzMiwgMTYxNCwgNTI2LCAxNjAwLCAxNjE0LCA1MjMsIDMyLCAxNjE1LCAKKyAgICA1MjYsIDE2MDAsIDE2MTUsIDUyMywgMzIsIDE2MTYsIDUyNiwgMTYwMCwgMTYxNiwgNTIzLCAzMiwgMTYxNywgNTI2LCAKKyAgICAxNjAwLCAxNjE3LCA1MjMsIDMyLCAxNjE4LCA1MjYsIDE2MDAsIDE2MTgsIDI2NywgMTU2OSwgMjY3LCAxNTcwLCAyNjgsIAorICAgIDE1NzAsIDI2NywgMTU3MSwgMjY4LCAxNTcxLCAyNjcsIDE1NzIsIDI2OCwgMTU3MiwgMjY3LCAxNTczLCAyNjgsIDE1NzMsIAorICAgIDI2NywgMTU3NCwgMjY4LCAxNTc0LCAyNjksIDE1NzQsIDI3MCwgMTU3NCwgMjY3LCAxNTc1LCAyNjgsIDE1NzUsIDI2NywgCisgICAgMTU3NiwgMjY4LCAxNTc2LCAyNjksIDE1NzYsIDI3MCwgMTU3NiwgMjY3LCAxNTc3LCAyNjgsIDE1NzcsIDI2NywgMTU3OCwgCisgICAgMjY4LCAxNTc4LCAyNjksIDE1NzgsIDI3MCwgMTU3OCwgMjY3LCAxNTc5LCAyNjgsIDE1NzksIDI2OSwgMTU3OSwgMjcwLCAKKyAgICAxNTc5LCAyNjcsIDE1ODAsIDI2OCwgMTU4MCwgMjY5LCAxNTgwLCAyNzAsIDE1ODAsIDI2NywgMTU4MSwgMjY4LCAxNTgxLCAKKyAgICAyNjksIDE1ODEsIDI3MCwgMTU4MSwgMjY3LCAxNTgyLCAyNjgsIDE1ODIsIDI2OSwgMTU4MiwgMjcwLCAxNTgyLCAyNjcsIAorICAgIDE1ODMsIDI2OCwgMTU4MywgMjY3LCAxNTg0LCAyNjgsIDE1ODQsIDI2NywgMTU4NSwgMjY4LCAxNTg1LCAyNjcsIDE1ODYsIAorICAgIDI2OCwgMTU4NiwgMjY3LCAxNTg3LCAyNjgsIDE1ODcsIDI2OSwgMTU4NywgMjcwLCAxNTg3LCAyNjcsIDE1ODgsIDI2OCwgCisgICAgMTU4OCwgMjY5LCAxNTg4LCAyNzAsIDE1ODgsIDI2NywgMTU4OSwgMjY4LCAxNTg5LCAyNjksIDE1ODksIDI3MCwgMTU4OSwgCisgICAgMjY3LCAxNTkwLCAyNjgsIDE1OTAsIDI2OSwgMTU5MCwgMjcwLCAxNTkwLCAyNjcsIDE1OTEsIDI2OCwgMTU5MSwgMjY5LCAKKyAgICAxNTkxLCAyNzAsIDE1OTEsIDI2NywgMTU5MiwgMjY4LCAxNTkyLCAyNjksIDE1OTIsIDI3MCwgMTU5MiwgMjY3LCAxNTkzLCAKKyAgICAyNjgsIDE1OTMsIDI2OSwgMTU5MywgMjcwLCAxNTkzLCAyNjcsIDE1OTQsIDI2OCwgMTU5NCwgMjY5LCAxNTk0LCAyNzAsIAorICAgIDE1OTQsIDI2NywgMTYwMSwgMjY4LCAxNjAxLCAyNjksIDE2MDEsIDI3MCwgMTYwMSwgMjY3LCAxNjAyLCAyNjgsIDE2MDIsIAorICAgIDI2OSwgMTYwMiwgMjcwLCAxNjAyLCAyNjcsIDE2MDMsIDI2OCwgMTYwMywgMjY5LCAxNjAzLCAyNzAsIDE2MDMsIDI2NywgCisgICAgMTYwNCwgMjY4LCAxNjA0LCAyNjksIDE2MDQsIDI3MCwgMTYwNCwgMjY3LCAxNjA1LCAyNjgsIDE2MDUsIDI2OSwgMTYwNSwgCisgICAgMjcwLCAxNjA1LCAyNjcsIDE2MDYsIDI2OCwgMTYwNiwgMjY5LCAxNjA2LCAyNzAsIDE2MDYsIDI2NywgMTYwNywgMjY4LCAKKyAgICAxNjA3LCAyNjksIDE2MDcsIDI3MCwgMTYwNywgMjY3LCAxNjA4LCAyNjgsIDE2MDgsIDI2NywgMTYwOSwgMjY4LCAxNjA5LCAKKyAgICAyNjcsIDE2MTAsIDI2OCwgMTYxMCwgMjY5LCAxNjEwLCAyNzAsIDE2MTAsIDUyMywgMTYwNCwgMTU3MCwgNTI0LCAxNjA0LCAKKyAgICAxNTcwLCA1MjMsIDE2MDQsIDE1NzEsIDUyNCwgMTYwNCwgMTU3MSwgNTIzLCAxNjA0LCAxNTczLCA1MjQsIDE2MDQsIDE1NzMsIAorICAgIDUyMywgMTYwNCwgMTU3NSwgNTI0LCAxNjA0LCAxNTc1LCAyNjQsIDMzLCAyNjQsIDM0LCAyNjQsIDM1LCAyNjQsIDM2LCAKKyAgICAyNjQsIDM3LCAyNjQsIDM4LCAyNjQsIDM5LCAyNjQsIDQwLCAyNjQsIDQxLCAyNjQsIDQyLCAyNjQsIDQzLCAyNjQsIDQ0LCAKKyAgICAyNjQsIDQ1LCAyNjQsIDQ2LCAyNjQsIDQ3LCAyNjQsIDQ4LCAyNjQsIDQ5LCAyNjQsIDUwLCAyNjQsIDUxLCAyNjQsIDUyLCAKKyAgICAyNjQsIDUzLCAyNjQsIDU0LCAyNjQsIDU1LCAyNjQsIDU2LCAyNjQsIDU3LCAyNjQsIDU4LCAyNjQsIDU5LCAyNjQsIDYwLCAKKyAgICAyNjQsIDYxLCAyNjQsIDYyLCAyNjQsIDYzLCAyNjQsIDY0LCAyNjQsIDY1LCAyNjQsIDY2LCAyNjQsIDY3LCAyNjQsIDY4LCAKKyAgICAyNjQsIDY5LCAyNjQsIDcwLCAyNjQsIDcxLCAyNjQsIDcyLCAyNjQsIDczLCAyNjQsIDc0LCAyNjQsIDc1LCAyNjQsIDc2LCAKKyAgICAyNjQsIDc3LCAyNjQsIDc4LCAyNjQsIDc5LCAyNjQsIDgwLCAyNjQsIDgxLCAyNjQsIDgyLCAyNjQsIDgzLCAyNjQsIDg0LCAKKyAgICAyNjQsIDg1LCAyNjQsIDg2LCAyNjQsIDg3LCAyNjQsIDg4LCAyNjQsIDg5LCAyNjQsIDkwLCAyNjQsIDkxLCAyNjQsIDkyLCAKKyAgICAyNjQsIDkzLCAyNjQsIDk0LCAyNjQsIDk1LCAyNjQsIDk2LCAyNjQsIDk3LCAyNjQsIDk4LCAyNjQsIDk5LCAyNjQsIDEwMCwgCisgICAgMjY0LCAxMDEsIDI2NCwgMTAyLCAyNjQsIDEwMywgMjY0LCAxMDQsIDI2NCwgMTA1LCAyNjQsIDEwNiwgMjY0LCAxMDcsIAorICAgIDI2NCwgMTA4LCAyNjQsIDEwOSwgMjY0LCAxMTAsIDI2NCwgMTExLCAyNjQsIDExMiwgMjY0LCAxMTMsIDI2NCwgMTE0LCAKKyAgICAyNjQsIDExNSwgMjY0LCAxMTYsIDI2NCwgMTE3LCAyNjQsIDExOCwgMjY0LCAxMTksIDI2NCwgMTIwLCAyNjQsIDEyMSwgCisgICAgMjY0LCAxMjIsIDI2NCwgMTIzLCAyNjQsIDEyNCwgMjY0LCAxMjUsIDI2NCwgMTI2LCAyNjQsIDEwNjI5LCAyNjQsIDEwNjMwLCAKKyAgICAyNzIsIDEyMjkwLCAyNzIsIDEyMzAwLCAyNzIsIDEyMzAxLCAyNzIsIDEyMjg5LCAyNzIsIDEyNTM5LCAyNzIsIDEyNTMwLCAKKyAgICAyNzIsIDEyNDQ5LCAyNzIsIDEyNDUxLCAyNzIsIDEyNDUzLCAyNzIsIDEyNDU1LCAyNzIsIDEyNDU3LCAyNzIsIDEyNTE1LCAKKyAgICAyNzIsIDEyNTE3LCAyNzIsIDEyNTE5LCAyNzIsIDEyNDgzLCAyNzIsIDEyNTQwLCAyNzIsIDEyNDUwLCAyNzIsIDEyNDUyLCAKKyAgICAyNzIsIDEyNDU0LCAyNzIsIDEyNDU2LCAyNzIsIDEyNDU4LCAyNzIsIDEyNDU5LCAyNzIsIDEyNDYxLCAyNzIsIDEyNDYzLCAKKyAgICAyNzIsIDEyNDY1LCAyNzIsIDEyNDY3LCAyNzIsIDEyNDY5LCAyNzIsIDEyNDcxLCAyNzIsIDEyNDczLCAyNzIsIDEyNDc1LCAKKyAgICAyNzIsIDEyNDc3LCAyNzIsIDEyNDc5LCAyNzIsIDEyNDgxLCAyNzIsIDEyNDg0LCAyNzIsIDEyNDg2LCAyNzIsIDEyNDg4LCAKKyAgICAyNzIsIDEyNDkwLCAyNzIsIDEyNDkxLCAyNzIsIDEyNDkyLCAyNzIsIDEyNDkzLCAyNzIsIDEyNDk0LCAyNzIsIDEyNDk1LCAKKyAgICAyNzIsIDEyNDk4LCAyNzIsIDEyNTAxLCAyNzIsIDEyNTA0LCAyNzIsIDEyNTA3LCAyNzIsIDEyNTEwLCAyNzIsIDEyNTExLCAKKyAgICAyNzIsIDEyNTEyLCAyNzIsIDEyNTEzLCAyNzIsIDEyNTE0LCAyNzIsIDEyNTE2LCAyNzIsIDEyNTE4LCAyNzIsIDEyNTIwLCAKKyAgICAyNzIsIDEyNTIxLCAyNzIsIDEyNTIyLCAyNzIsIDEyNTIzLCAyNzIsIDEyNTI0LCAyNzIsIDEyNTI1LCAyNzIsIDEyNTI3LCAKKyAgICAyNzIsIDEyNTMxLCAyNzIsIDEyNDQxLCAyNzIsIDEyNDQyLCAyNzIsIDEyNjQ0LCAyNzIsIDEyNTkzLCAyNzIsIDEyNTk0LCAKKyAgICAyNzIsIDEyNTk1LCAyNzIsIDEyNTk2LCAyNzIsIDEyNTk3LCAyNzIsIDEyNTk4LCAyNzIsIDEyNTk5LCAyNzIsIDEyNjAwLCAKKyAgICAyNzIsIDEyNjAxLCAyNzIsIDEyNjAyLCAyNzIsIDEyNjAzLCAyNzIsIDEyNjA0LCAyNzIsIDEyNjA1LCAyNzIsIDEyNjA2LCAKKyAgICAyNzIsIDEyNjA3LCAyNzIsIDEyNjA4LCAyNzIsIDEyNjA5LCAyNzIsIDEyNjEwLCAyNzIsIDEyNjExLCAyNzIsIDEyNjEyLCAKKyAgICAyNzIsIDEyNjEzLCAyNzIsIDEyNjE0LCAyNzIsIDEyNjE1LCAyNzIsIDEyNjE2LCAyNzIsIDEyNjE3LCAyNzIsIDEyNjE4LCAKKyAgICAyNzIsIDEyNjE5LCAyNzIsIDEyNjIwLCAyNzIsIDEyNjIxLCAyNzIsIDEyNjIyLCAyNzIsIDEyNjIzLCAyNzIsIDEyNjI0LCAKKyAgICAyNzIsIDEyNjI1LCAyNzIsIDEyNjI2LCAyNzIsIDEyNjI3LCAyNzIsIDEyNjI4LCAyNzIsIDEyNjI5LCAyNzIsIDEyNjMwLCAKKyAgICAyNzIsIDEyNjMxLCAyNzIsIDEyNjMyLCAyNzIsIDEyNjMzLCAyNzIsIDEyNjM0LCAyNzIsIDEyNjM1LCAyNzIsIDEyNjM2LCAKKyAgICAyNzIsIDEyNjM3LCAyNzIsIDEyNjM4LCAyNzIsIDEyNjM5LCAyNzIsIDEyNjQwLCAyNzIsIDEyNjQxLCAyNzIsIDEyNjQyLCAKKyAgICAyNzIsIDEyNjQzLCAyNjQsIDE2MiwgMjY0LCAxNjMsIDI2NCwgMTcyLCAyNjQsIDE3NSwgMjY0LCAxNjYsIDI2NCwgMTY1LCAKKyAgICAyNjQsIDgzNjEsIDI3MiwgOTQ3NCwgMjcyLCA4NTkyLCAyNzIsIDg1OTMsIDI3MiwgODU5NCwgMjcyLCA4NTk1LCAyNzIsIAorICAgIDk2MzIsIDI3MiwgOTY3NSwgNTEyLCA2OTc4NSwgNjk4MTgsIDUxMiwgNjk3ODcsIDY5ODE4LCA1MTIsIDY5Nzk3LCA2OTgxOCwgCisgICAgNTEyLCA2OTkzNywgNjk5MjcsIDUxMiwgNjk5MzgsIDY5OTI3LCA1MTIsIDcwNDcxLCA3MDQ2MiwgNTEyLCA3MDQ3MSwgCisgICAgNzA0ODcsIDUxMiwgNzA4NDEsIDcwODQyLCA1MTIsIDcwODQxLCA3MDgzMiwgNTEyLCA3MDg0MSwgNzA4NDUsIDUxMiwgCisgICAgNzEwOTYsIDcxMDg3LCA1MTIsIDcxMDk3LCA3MTA4NywgNTEyLCAxMTkxMjcsIDExOTE0MSwgNTEyLCAxMTkxMjgsIAorICAgIDExOTE0MSwgNTEyLCAxMTkxMzUsIDExOTE1MCwgNTEyLCAxMTkxMzUsIDExOTE1MSwgNTEyLCAxMTkxMzUsIDExOTE1MiwgCisgICAgNTEyLCAxMTkxMzUsIDExOTE1MywgNTEyLCAxMTkxMzUsIDExOTE1NCwgNTEyLCAxMTkyMjUsIDExOTE0MSwgNTEyLCAKKyAgICAxMTkyMjYsIDExOTE0MSwgNTEyLCAxMTkyMjcsIDExOTE1MCwgNTEyLCAxMTkyMjgsIDExOTE1MCwgNTEyLCAxMTkyMjcsIAorICAgIDExOTE1MSwgNTEyLCAxMTkyMjgsIDExOTE1MSwgMjYyLCA2NSwgMjYyLCA2NiwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA2OSwgCisgICAgMjYyLCA3MCwgMjYyLCA3MSwgMjYyLCA3MiwgMjYyLCA3MywgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgCisgICAgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgMjYyLCA4MSwgMjYyLCA4MiwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgCisgICAgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgMjYyLCA4OSwgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgCisgICAgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwMiwgMjYyLCAxMDMsIDI2MiwgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIAorICAgIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAKKyAgICAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgCisgICAgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY3LCAyNjIsIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAKKyAgICAyNjIsIDcxLCAyNjIsIDcyLCAyNjIsIDczLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAyNjIsIDc4LCAKKyAgICAyNjIsIDc5LCAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgyLCAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAKKyAgICAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDkwLCAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgCisgICAgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDUsIDI2MiwgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIAogICAgIDI2MiwgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgMTEyLCAyNjIsIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAKICAgICAyNjIsIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgCi0gICAgMjYyLCA2NSwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA3MSwgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3OCwgMjYyLCA3OSwgCi0gICAgMjYyLCA4MCwgMjYyLCA4MSwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgCi0gICAgMjYyLCA4OSwgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgMjYyLCAxMDAsIDI2MiwgMTAyLCAyNjIsIAotICAgIDEwNCwgMjYyLCAxMDUsIDI2MiwgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIDI2MiwgMTA5LCAyNjIsIDExMCwgMjYyLCAKLSAgICAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIDExNywgMjYyLCAxMTgsIDI2MiwgCi0gICAgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY3LCAyNjIsIDY4LCAKLSAgICAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAyNjIsIDcyLCAyNjIsIDczLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAKLSAgICAyNjIsIDc3LCAyNjIsIDc4LCAyNjIsIDc5LCAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgyLCAyNjIsIDgzLCAyNjIsIDg0LCAKLSAgICAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDkwLCAyNjIsIDk3LCAyNjIsIDk4LCAKLSAgICAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDQsIDI2MiwgMTA1LCAyNjIsIAotICAgIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTExLCAyNjIsIDExMiwgMjYyLCAKLSAgICAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAxMTksIDI2MiwgCi0gICAgMTIwLCAyNjIsIDEyMSwgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjgsIDI2MiwgNjksIDI2MiwgNzAsIAotICAgIDI2MiwgNzEsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIDI2MiwgNzcsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIAorICAgIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgNjgsIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzIsIAorICAgIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIDI2MiwgNzcsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIAorICAgIDI2MiwgODEsIDI2MiwgODIsIDI2MiwgODMsIDI2MiwgODQsIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIAorICAgIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAKKyAgICAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAxMDUsIDI2MiwgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIDI2MiwgCisgICAgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgMTEyLCAyNjIsIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAyNjIsIAorICAgIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCA2NSwgCisgICAgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA3MSwgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgCiAgICAgMjYyLCA4MSwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgMjYyLCA4OSwgCi0gICAgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwMiwgMjYyLCAxMDMsIDI2MiwgCi0gICAgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgMTEwLCAyNjIsIAotICAgIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIDExNywgMjYyLCAKLSAgICAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY4LCAKLSAgICAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAyNjIsIDczLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAKLSAgICAyNjIsIDc5LCAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAKLSAgICAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAKLSAgICAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgCi0gICAgMTExLCAyNjIsIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIAotICAgIDExOCwgMjYyLCAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIAotICAgIDI2MiwgNjgsIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzIsIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIAotICAgIDI2MiwgNzYsIDI2MiwgNzcsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIDI2MiwgODEsIDI2MiwgODIsIDI2MiwgODMsIAotICAgIDI2MiwgODQsIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIAorICAgIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMiwgMjYyLCAxMDQsIDI2MiwgCisgICAgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTEyLCAyNjIsIAorICAgIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAyNjIsIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAKKyAgICAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCA2NSwgMjYyLCA2NiwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA2OSwgCisgICAgMjYyLCA3MCwgMjYyLCA3MSwgMjYyLCA3MiwgMjYyLCA3MywgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgCisgICAgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgMjYyLCA4MSwgMjYyLCA4MiwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgCisgICAgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgMjYyLCA4OSwgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgCisgICAgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwMiwgMjYyLCAxMDMsIDI2MiwgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIAorICAgIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAKKyAgICAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgCisgICAgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAKKyAgICAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAyNjIsIDc4LCAyNjIsIDc5LCAyNjIsIDgwLCAyNjIsIDgxLCAKKyAgICAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDk3LCAKKyAgICAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDQsIDI2MiwgCisgICAgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTExLCAyNjIsIAorICAgIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAKKyAgICAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjgsIDI2MiwgNjksIAorICAgIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIDI2MiwgNzcsIDI2MiwgNzksIAorICAgIDI2MiwgODMsIDI2MiwgODQsIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIDI2MiwgODksIDI2MiwgOTcsIAogICAgIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAKICAgICAxMDUsIDI2MiwgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIDI2MiwgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgCiAgICAgMTEyLCAyNjIsIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAyNjIsIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIApAQCAtMzUzNiwzMyArMzg3MSwxNSBAQAogICAgIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAKICAgICAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAxMDUsIDI2MiwgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIDI2MiwgCiAgICAgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgMTEyLCAyNjIsIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAyNjIsIAotICAgIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCAKLSAgICAzMDUsIDI2MiwgNTY3LCAyNjIsIDkxMywgMjYyLCA5MTQsIDI2MiwgOTE1LCAyNjIsIDkxNiwgMjYyLCA5MTcsIDI2MiwgCi0gICAgOTE4LCAyNjIsIDkxOSwgMjYyLCA5MjAsIDI2MiwgOTIxLCAyNjIsIDkyMiwgMjYyLCA5MjMsIDI2MiwgOTI0LCAyNjIsIAotICAgIDkyNSwgMjYyLCA5MjYsIDI2MiwgOTI3LCAyNjIsIDkyOCwgMjYyLCA5MjksIDI2MiwgMTAxMiwgMjYyLCA5MzEsIDI2MiwgCi0gICAgOTMyLCAyNjIsIDkzMywgMjYyLCA5MzQsIDI2MiwgOTM1LCAyNjIsIDkzNiwgMjYyLCA5MzcsIDI2MiwgODcxMSwgMjYyLCAKLSAgICA5NDUsIDI2MiwgOTQ2LCAyNjIsIDk0NywgMjYyLCA5NDgsIDI2MiwgOTQ5LCAyNjIsIDk1MCwgMjYyLCA5NTEsIDI2MiwgCi0gICAgOTUyLCAyNjIsIDk1MywgMjYyLCA5NTQsIDI2MiwgOTU1LCAyNjIsIDk1NiwgMjYyLCA5NTcsIDI2MiwgOTU4LCAyNjIsIAotICAgIDk1OSwgMjYyLCA5NjAsIDI2MiwgOTYxLCAyNjIsIDk2MiwgMjYyLCA5NjMsIDI2MiwgOTY0LCAyNjIsIDk2NSwgMjYyLCAKLSAgICA5NjYsIDI2MiwgOTY3LCAyNjIsIDk2OCwgMjYyLCA5NjksIDI2MiwgODcwNiwgMjYyLCAxMDEzLCAyNjIsIDk3NywgMjYyLCAKLSAgICAxMDA4LCAyNjIsIDk4MSwgMjYyLCAxMDA5LCAyNjIsIDk4MiwgMjYyLCA5MTMsIDI2MiwgOTE0LCAyNjIsIDkxNSwgMjYyLCAKLSAgICA5MTYsIDI2MiwgOTE3LCAyNjIsIDkxOCwgMjYyLCA5MTksIDI2MiwgOTIwLCAyNjIsIDkyMSwgMjYyLCA5MjIsIDI2MiwgCi0gICAgOTIzLCAyNjIsIDkyNCwgMjYyLCA5MjUsIDI2MiwgOTI2LCAyNjIsIDkyNywgMjYyLCA5MjgsIDI2MiwgOTI5LCAyNjIsIAotICAgIDEwMTIsIDI2MiwgOTMxLCAyNjIsIDkzMiwgMjYyLCA5MzMsIDI2MiwgOTM0LCAyNjIsIDkzNSwgMjYyLCA5MzYsIDI2MiwgCi0gICAgOTM3LCAyNjIsIDg3MTEsIDI2MiwgOTQ1LCAyNjIsIDk0NiwgMjYyLCA5NDcsIDI2MiwgOTQ4LCAyNjIsIDk0OSwgMjYyLCAKLSAgICA5NTAsIDI2MiwgOTUxLCAyNjIsIDk1MiwgMjYyLCA5NTMsIDI2MiwgOTU0LCAyNjIsIDk1NSwgMjYyLCA5NTYsIDI2MiwgCi0gICAgOTU3LCAyNjIsIDk1OCwgMjYyLCA5NTksIDI2MiwgOTYwLCAyNjIsIDk2MSwgMjYyLCA5NjIsIDI2MiwgOTYzLCAyNjIsIAotICAgIDk2NCwgMjYyLCA5NjUsIDI2MiwgOTY2LCAyNjIsIDk2NywgMjYyLCA5NjgsIDI2MiwgOTY5LCAyNjIsIDg3MDYsIDI2MiwgCi0gICAgMTAxMywgMjYyLCA5NzcsIDI2MiwgMTAwOCwgMjYyLCA5ODEsIDI2MiwgMTAwOSwgMjYyLCA5ODIsIDI2MiwgOTEzLCAyNjIsIAotICAgIDkxNCwgMjYyLCA5MTUsIDI2MiwgOTE2LCAyNjIsIDkxNywgMjYyLCA5MTgsIDI2MiwgOTE5LCAyNjIsIDkyMCwgMjYyLCAKLSAgICA5MjEsIDI2MiwgOTIyLCAyNjIsIDkyMywgMjYyLCA5MjQsIDI2MiwgOTI1LCAyNjIsIDkyNiwgMjYyLCA5MjcsIDI2MiwgCi0gICAgOTI4LCAyNjIsIDkyOSwgMjYyLCAxMDEyLCAyNjIsIDkzMSwgMjYyLCA5MzIsIDI2MiwgOTMzLCAyNjIsIDkzNCwgMjYyLCAKLSAgICA5MzUsIDI2MiwgOTM2LCAyNjIsIDkzNywgMjYyLCA4NzExLCAyNjIsIDk0NSwgMjYyLCA5NDYsIDI2MiwgOTQ3LCAyNjIsIAotICAgIDk0OCwgMjYyLCA5NDksIDI2MiwgOTUwLCAyNjIsIDk1MSwgMjYyLCA5NTIsIDI2MiwgOTUzLCAyNjIsIDk1NCwgMjYyLCAKLSAgICA5NTUsIDI2MiwgOTU2LCAyNjIsIDk1NywgMjYyLCA5NTgsIDI2MiwgOTU5LCAyNjIsIDk2MCwgMjYyLCA5NjEsIDI2MiwgCi0gICAgOTYyLCAyNjIsIDk2MywgMjYyLCA5NjQsIDI2MiwgOTY1LCAyNjIsIDk2NiwgMjYyLCA5NjcsIDI2MiwgOTY4LCAyNjIsIAotICAgIDk2OSwgMjYyLCA4NzA2LCAyNjIsIDEwMTMsIDI2MiwgOTc3LCAyNjIsIDEwMDgsIDI2MiwgOTgxLCAyNjIsIDEwMDksIDI2MiwgCi0gICAgOTgyLCAyNjIsIDkxMywgMjYyLCA5MTQsIDI2MiwgOTE1LCAyNjIsIDkxNiwgMjYyLCA5MTcsIDI2MiwgOTE4LCAyNjIsIAorICAgIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCA2NSwgCisgICAgMjYyLCA2NiwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA2OSwgMjYyLCA3MCwgMjYyLCA3MSwgMjYyLCA3MiwgMjYyLCA3MywgCisgICAgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgMjYyLCA4MSwgCisgICAgMjYyLCA4MiwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgMjYyLCA4OSwgCisgICAgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwMiwgMjYyLCAKKyAgICAxMDMsIDI2MiwgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgCisgICAgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIAorICAgIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDMwNSwgMjYyLCAKKyAgICA1NjcsIDI2MiwgOTEzLCAyNjIsIDkxNCwgMjYyLCA5MTUsIDI2MiwgOTE2LCAyNjIsIDkxNywgMjYyLCA5MTgsIDI2MiwgCiAgICAgOTE5LCAyNjIsIDkyMCwgMjYyLCA5MjEsIDI2MiwgOTIyLCAyNjIsIDkyMywgMjYyLCA5MjQsIDI2MiwgOTI1LCAyNjIsIAogICAgIDkyNiwgMjYyLCA5MjcsIDI2MiwgOTI4LCAyNjIsIDkyOSwgMjYyLCAxMDEyLCAyNjIsIDkzMSwgMjYyLCA5MzIsIDI2MiwgCiAgICAgOTMzLCAyNjIsIDkzNCwgMjYyLCA5MzUsIDI2MiwgOTM2LCAyNjIsIDkzNywgMjYyLCA4NzExLCAyNjIsIDk0NSwgMjYyLCAKQEAgLTM1NzgsMzM5ICszODk1LDU0NiBAQAogICAgIDk1MSwgMjYyLCA5NTIsIDI2MiwgOTUzLCAyNjIsIDk1NCwgMjYyLCA5NTUsIDI2MiwgOTU2LCAyNjIsIDk1NywgMjYyLCAKICAgICA5NTgsIDI2MiwgOTU5LCAyNjIsIDk2MCwgMjYyLCA5NjEsIDI2MiwgOTYyLCAyNjIsIDk2MywgMjYyLCA5NjQsIDI2MiwgCiAgICAgOTY1LCAyNjIsIDk2NiwgMjYyLCA5NjcsIDI2MiwgOTY4LCAyNjIsIDk2OSwgMjYyLCA4NzA2LCAyNjIsIDEwMTMsIDI2MiwgCi0gICAgOTc3LCAyNjIsIDEwMDgsIDI2MiwgOTgxLCAyNjIsIDEwMDksIDI2MiwgOTgyLCAyNjIsIDk4OCwgMjYyLCA5ODksIDI2MiwgCi0gICAgNDgsIDI2MiwgNDksIDI2MiwgNTAsIDI2MiwgNTEsIDI2MiwgNTIsIDI2MiwgNTMsIDI2MiwgNTQsIDI2MiwgNTUsIDI2MiwgCi0gICAgNTYsIDI2MiwgNTcsIDI2MiwgNDgsIDI2MiwgNDksIDI2MiwgNTAsIDI2MiwgNTEsIDI2MiwgNTIsIDI2MiwgNTMsIDI2MiwgCi0gICAgNTQsIDI2MiwgNTUsIDI2MiwgNTYsIDI2MiwgNTcsIDI2MiwgNDgsIDI2MiwgNDksIDI2MiwgNTAsIDI2MiwgNTEsIDI2MiwgCi0gICAgNTIsIDI2MiwgNTMsIDI2MiwgNTQsIDI2MiwgNTUsIDI2MiwgNTYsIDI2MiwgNTcsIDI2MiwgNDgsIDI2MiwgNDksIDI2MiwgCi0gICAgNTAsIDI2MiwgNTEsIDI2MiwgNTIsIDI2MiwgNTMsIDI2MiwgNTQsIDI2MiwgNTUsIDI2MiwgNTYsIDI2MiwgNTcsIDI2MiwgCi0gICAgNDgsIDI2MiwgNDksIDI2MiwgNTAsIDI2MiwgNTEsIDI2MiwgNTIsIDI2MiwgNTMsIDI2MiwgNTQsIDI2MiwgNTUsIDI2MiwgCi0gICAgNTYsIDI2MiwgNTcsIDI2MiwgMTU3NSwgMjYyLCAxNTc2LCAyNjIsIDE1ODAsIDI2MiwgMTU4MywgMjYyLCAxNjA4LCAyNjIsIAotICAgIDE1ODYsIDI2MiwgMTU4MSwgMjYyLCAxNTkxLCAyNjIsIDE2MTAsIDI2MiwgMTYwMywgMjYyLCAxNjA0LCAyNjIsIDE2MDUsIAotICAgIDI2MiwgMTYwNiwgMjYyLCAxNTg3LCAyNjIsIDE1OTMsIDI2MiwgMTYwMSwgMjYyLCAxNTg5LCAyNjIsIDE2MDIsIDI2MiwgCi0gICAgMTU4NSwgMjYyLCAxNTg4LCAyNjIsIDE1NzgsIDI2MiwgMTU3OSwgMjYyLCAxNTgyLCAyNjIsIDE1ODQsIDI2MiwgMTU5MCwgCi0gICAgMjYyLCAxNTkyLCAyNjIsIDE1OTQsIDI2MiwgMTY0NiwgMjYyLCAxNzIyLCAyNjIsIDE2OTcsIDI2MiwgMTY0NywgMjYyLCAKLSAgICAxNTc2LCAyNjIsIDE1ODAsIDI2MiwgMTYwNywgMjYyLCAxNTgxLCAyNjIsIDE2MTAsIDI2MiwgMTYwMywgMjYyLCAxNjA0LCAKLSAgICAyNjIsIDE2MDUsIDI2MiwgMTYwNiwgMjYyLCAxNTg3LCAyNjIsIDE1OTMsIDI2MiwgMTYwMSwgMjYyLCAxNTg5LCAyNjIsIAotICAgIDE2MDIsIDI2MiwgMTU4OCwgMjYyLCAxNTc4LCAyNjIsIDE1NzksIDI2MiwgMTU4MiwgMjYyLCAxNTkwLCAyNjIsIDE1OTQsIAotICAgIDI2MiwgMTU4MCwgMjYyLCAxNTgxLCAyNjIsIDE2MTAsIDI2MiwgMTYwNCwgMjYyLCAxNjA2LCAyNjIsIDE1ODcsIDI2MiwgCi0gICAgMTU5MywgMjYyLCAxNTg5LCAyNjIsIDE2MDIsIDI2MiwgMTU4OCwgMjYyLCAxNTgyLCAyNjIsIDE1OTAsIDI2MiwgMTU5NCwgCi0gICAgMjYyLCAxNzIyLCAyNjIsIDE2NDcsIDI2MiwgMTU3NiwgMjYyLCAxNTgwLCAyNjIsIDE2MDcsIDI2MiwgMTU4MSwgMjYyLCAKLSAgICAxNTkxLCAyNjIsIDE2MTAsIDI2MiwgMTYwMywgMjYyLCAxNjA1LCAyNjIsIDE2MDYsIDI2MiwgMTU4NywgMjYyLCAxNTkzLCAKLSAgICAyNjIsIDE2MDEsIDI2MiwgMTU4OSwgMjYyLCAxNjAyLCAyNjIsIDE1ODgsIDI2MiwgMTU3OCwgMjYyLCAxNTc5LCAyNjIsIAotICAgIDE1ODIsIDI2MiwgMTU5MCwgMjYyLCAxNTkyLCAyNjIsIDE1OTQsIDI2MiwgMTY0NiwgMjYyLCAxNjk3LCAyNjIsIDE1NzUsIAotICAgIDI2MiwgMTU3NiwgMjYyLCAxNTgwLCAyNjIsIDE1ODMsIDI2MiwgMTYwNywgMjYyLCAxNjA4LCAyNjIsIDE1ODYsIDI2MiwgCi0gICAgMTU4MSwgMjYyLCAxNTkxLCAyNjIsIDE2MTAsIDI2MiwgMTYwNCwgMjYyLCAxNjA1LCAyNjIsIDE2MDYsIDI2MiwgMTU4NywgCi0gICAgMjYyLCAxNTkzLCAyNjIsIDE2MDEsIDI2MiwgMTU4OSwgMjYyLCAxNjAyLCAyNjIsIDE1ODUsIDI2MiwgMTU4OCwgMjYyLCAKLSAgICAxNTc4LCAyNjIsIDE1NzksIDI2MiwgMTU4MiwgMjYyLCAxNTg0LCAyNjIsIDE1OTAsIDI2MiwgMTU5MiwgMjYyLCAxNTk0LCAKLSAgICAyNjIsIDE1NzYsIDI2MiwgMTU4MCwgMjYyLCAxNTgzLCAyNjIsIDE2MDgsIDI2MiwgMTU4NiwgMjYyLCAxNTgxLCAyNjIsIAotICAgIDE1OTEsIDI2MiwgMTYxMCwgMjYyLCAxNjA0LCAyNjIsIDE2MDUsIDI2MiwgMTYwNiwgMjYyLCAxNTg3LCAyNjIsIDE1OTMsIAotICAgIDI2MiwgMTYwMSwgMjYyLCAxNTg5LCAyNjIsIDE2MDIsIDI2MiwgMTU4NSwgMjYyLCAxNTg4LCAyNjIsIDE1NzgsIDI2MiwgCi0gICAgMTU3OSwgMjYyLCAxNTgyLCAyNjIsIDE1ODQsIDI2MiwgMTU5MCwgMjYyLCAxNTkyLCAyNjIsIDE1OTQsIDUxNCwgNDgsIDQ2LCAKLSAgICA1MTQsIDQ4LCA0NCwgNTE0LCA0OSwgNDQsIDUxNCwgNTAsIDQ0LCA1MTQsIDUxLCA0NCwgNTE0LCA1MiwgNDQsIDUxNCwgNTMsIAotICAgIDQ0LCA1MTQsIDU0LCA0NCwgNTE0LCA1NSwgNDQsIDUxNCwgNTYsIDQ0LCA1MTQsIDU3LCA0NCwgNzcwLCA0MCwgNjUsIDQxLCAKLSAgICA3NzAsIDQwLCA2NiwgNDEsIDc3MCwgNDAsIDY3LCA0MSwgNzcwLCA0MCwgNjgsIDQxLCA3NzAsIDQwLCA2OSwgNDEsIDc3MCwgCi0gICAgNDAsIDcwLCA0MSwgNzcwLCA0MCwgNzEsIDQxLCA3NzAsIDQwLCA3MiwgNDEsIDc3MCwgNDAsIDczLCA0MSwgNzcwLCA0MCwgCi0gICAgNzQsIDQxLCA3NzAsIDQwLCA3NSwgNDEsIDc3MCwgNDAsIDc2LCA0MSwgNzcwLCA0MCwgNzcsIDQxLCA3NzAsIDQwLCA3OCwgCi0gICAgNDEsIDc3MCwgNDAsIDc5LCA0MSwgNzcwLCA0MCwgODAsIDQxLCA3NzAsIDQwLCA4MSwgNDEsIDc3MCwgNDAsIDgyLCA0MSwgCi0gICAgNzcwLCA0MCwgODMsIDQxLCA3NzAsIDQwLCA4NCwgNDEsIDc3MCwgNDAsIDg1LCA0MSwgNzcwLCA0MCwgODYsIDQxLCA3NzAsIAotICAgIDQwLCA4NywgNDEsIDc3MCwgNDAsIDg4LCA0MSwgNzcwLCA0MCwgODksIDQxLCA3NzAsIDQwLCA5MCwgNDEsIDc3MCwgCi0gICAgMTIzMDgsIDgzLCAxMjMwOSwgMjYzLCA2NywgMjYzLCA4MiwgNTE5LCA2NywgNjgsIDUxOSwgODcsIDkwLCAyNjYsIDY1LCAKLSAgICAyNjYsIDY2LCAyNjYsIDY3LCAyNjYsIDY4LCAyNjYsIDY5LCAyNjYsIDcwLCAyNjYsIDcxLCAyNjYsIDcyLCAyNjYsIDczLCAKLSAgICAyNjYsIDc0LCAyNjYsIDc1LCAyNjYsIDc2LCAyNjYsIDc3LCAyNjYsIDc4LCAyNjYsIDc5LCAyNjYsIDgwLCAyNjYsIDgxLCAKLSAgICAyNjYsIDgyLCAyNjYsIDgzLCAyNjYsIDg0LCAyNjYsIDg1LCAyNjYsIDg2LCAyNjYsIDg3LCAyNjYsIDg4LCAyNjYsIDg5LCAKLSAgICAyNjYsIDkwLCA1MjIsIDcyLCA4NiwgNTIyLCA3NywgODYsIDUyMiwgODMsIDY4LCA1MjIsIDgzLCA4MywgNzc4LCA4MCwgODAsIAotICAgIDg2LCA1MjIsIDg3LCA2NywgNTE1LCA3NywgNjcsIDUxNSwgNzcsIDY4LCA1MjIsIDY4LCA3NCwgNTIyLCAxMjQxMSwgCi0gICAgMTIzNjMsIDUyMiwgMTI0NjcsIDEyNDY3LCAyNjYsIDEyNDY5LCAyNjYsIDI1MTYzLCAyNjYsIDIzMzgzLCAyNjYsIDIxNDUyLCAKLSAgICAyNjYsIDEyNDg3LCAyNjYsIDIwMTA4LCAyNjYsIDIyODEwLCAyNjYsIDM1Mjk5LCAyNjYsIDIyODI1LCAyNjYsIDIwMTMyLCAKLSAgICAyNjYsIDI2MTQ0LCAyNjYsIDI4OTYxLCAyNjYsIDI2MDA5LCAyNjYsIDIxMDY5LCAyNjYsIDI0NDYwLCAyNjYsIDIwODc3LCAKLSAgICAyNjYsIDI2MDMyLCAyNjYsIDIxMDIxLCAyNjYsIDMyMDY2LCAyNjYsIDI5OTgzLCAyNjYsIDM2MDA5LCAyNjYsIDIyNzY4LCAKLSAgICAyNjYsIDIxNTYxLCAyNjYsIDI4NDM2LCAyNjYsIDI1MjM3LCAyNjYsIDI1NDI5LCAyNjYsIDE5OTY4LCAyNjYsIDE5OTc3LCAKLSAgICAyNjYsIDM2OTM4LCAyNjYsIDI0MDM4LCAyNjYsIDIwMDEzLCAyNjYsIDIxNDkxLCAyNjYsIDI1MzUxLCAyNjYsIDM2MjA4LCAKLSAgICAyNjYsIDI1MTcxLCAyNjYsIDMxMTA1LCAyNjYsIDMxMzU0LCAyNjYsIDIxNTEyLCAyNjYsIDI4Mjg4LCAyNjYsIDI2Mzc3LCAKLSAgICAyNjYsIDI2Mzc2LCAyNjYsIDMwMDAzLCAyNjYsIDIxMTA2LCAyNjYsIDIxOTQyLCA3NzAsIDEyMzA4LCAyNjQxMiwgMTIzMDksIAotICAgIDc3MCwgMTIzMDgsIDE5OTc3LCAxMjMwOSwgNzcwLCAxMjMwOCwgMjAxMDgsIDEyMzA5LCA3NzAsIDEyMzA4LCAyMzQzMywgCi0gICAgMTIzMDksIDc3MCwgMTIzMDgsIDI4ODU3LCAxMjMwOSwgNzcwLCAxMjMwOCwgMjUxNzEsIDEyMzA5LCA3NzAsIDEyMzA4LCAKLSAgICAzMDQyMywgMTIzMDksIDc3MCwgMTIzMDgsIDIxMjEzLCAxMjMwOSwgNzcwLCAxMjMwOCwgMjU5NDMsIDEyMzA5LCAyNjMsIAotICAgIDI0NDcxLCAyNjMsIDIxNDg3LCAyNTYsIDIwMDI5LCAyNTYsIDIwMDI0LCAyNTYsIDIwMDMzLCAyNTYsIDEzMTM2MiwgMjU2LCAKLSAgICAyMDMyMCwgMjU2LCAyMDM5OCwgMjU2LCAyMDQxMSwgMjU2LCAyMDQ4MiwgMjU2LCAyMDYwMiwgMjU2LCAyMDYzMywgMjU2LCAKLSAgICAyMDcxMSwgMjU2LCAyMDY4NywgMjU2LCAxMzQ3MCwgMjU2LCAxMzI2NjYsIDI1NiwgMjA4MTMsIDI1NiwgMjA4MjAsIDI1NiwgCi0gICAgMjA4MzYsIDI1NiwgMjA4NTUsIDI1NiwgMTMyMzgwLCAyNTYsIDEzNDk3LCAyNTYsIDIwODM5LCAyNTYsIDIwODc3LCAyNTYsIAotICAgIDEzMjQyNywgMjU2LCAyMDg4NywgMjU2LCAyMDkwMCwgMjU2LCAyMDE3MiwgMjU2LCAyMDkwOCwgMjU2LCAyMDkxNywgMjU2LCAKLSAgICAxNjg0MTUsIDI1NiwgMjA5ODEsIDI1NiwgMjA5OTUsIDI1NiwgMTM1MzUsIDI1NiwgMjEwNTEsIDI1NiwgMjEwNjIsIDI1NiwgCi0gICAgMjExMDYsIDI1NiwgMjExMTEsIDI1NiwgMTM1ODksIDI1NiwgMjExOTEsIDI1NiwgMjExOTMsIDI1NiwgMjEyMjAsIDI1NiwgCi0gICAgMjEyNDIsIDI1NiwgMjEyNTMsIDI1NiwgMjEyNTQsIDI1NiwgMjEyNzEsIDI1NiwgMjEzMjEsIDI1NiwgMjEzMjksIDI1NiwgCi0gICAgMjEzMzgsIDI1NiwgMjEzNjMsIDI1NiwgMjEzNzMsIDI1NiwgMjEzNzUsIDI1NiwgMjEzNzUsIDI1NiwgMjEzNzUsIDI1NiwgCi0gICAgMTMzNjc2LCAyNTYsIDI4Nzg0LCAyNTYsIDIxNDUwLCAyNTYsIDIxNDcxLCAyNTYsIDEzMzk4NywgMjU2LCAyMTQ4MywgMjU2LCAKLSAgICAyMTQ4OSwgMjU2LCAyMTUxMCwgMjU2LCAyMTY2MiwgMjU2LCAyMTU2MCwgMjU2LCAyMTU3NiwgMjU2LCAyMTYwOCwgMjU2LCAKLSAgICAyMTY2NiwgMjU2LCAyMTc1MCwgMjU2LCAyMTc3NiwgMjU2LCAyMTg0MywgMjU2LCAyMTg1OSwgMjU2LCAyMTg5MiwgMjU2LCAKLSAgICAyMTg5MiwgMjU2LCAyMTkxMywgMjU2LCAyMTkzMSwgMjU2LCAyMTkzOSwgMjU2LCAyMTk1NCwgMjU2LCAyMjI5NCwgMjU2LCAKLSAgICAyMjAyMiwgMjU2LCAyMjI5NSwgMjU2LCAyMjA5NywgMjU2LCAyMjEzMiwgMjU2LCAyMDk5OSwgMjU2LCAyMjc2NiwgMjU2LCAKLSAgICAyMjQ3OCwgMjU2LCAyMjUxNiwgMjU2LCAyMjU0MSwgMjU2LCAyMjQxMSwgMjU2LCAyMjU3OCwgMjU2LCAyMjU3NywgMjU2LCAKLSAgICAyMjcwMCwgMjU2LCAxMzY0MjAsIDI1NiwgMjI3NzAsIDI1NiwgMjI3NzUsIDI1NiwgMjI3OTAsIDI1NiwgMjI4MTAsIDI1NiwgCi0gICAgMjI4MTgsIDI1NiwgMjI4ODIsIDI1NiwgMTM2ODcyLCAyNTYsIDEzNjkzOCwgMjU2LCAyMzAyMCwgMjU2LCAyMzA2NywgMjU2LCAKLSAgICAyMzA3OSwgMjU2LCAyMzAwMCwgMjU2LCAyMzE0MiwgMjU2LCAxNDA2MiwgMjU2LCAxNDA3NiwgMjU2LCAyMzMwNCwgMjU2LCAKLSAgICAyMzM1OCwgMjU2LCAyMzM1OCwgMjU2LCAxMzc2NzIsIDI1NiwgMjM0OTEsIDI1NiwgMjM1MTIsIDI1NiwgMjM1MjcsIDI1NiwgCi0gICAgMjM1MzksIDI1NiwgMTM4MDA4LCAyNTYsIDIzNTUxLCAyNTYsIDIzNTU4LCAyNTYsIDI0NDAzLCAyNTYsIDIzNTg2LCAyNTYsIAotICAgIDE0MjA5LCAyNTYsIDIzNjQ4LCAyNTYsIDIzNjYyLCAyNTYsIDIzNzQ0LCAyNTYsIDIzNjkzLCAyNTYsIDEzODcyNCwgMjU2LCAKLSAgICAyMzg3NSwgMjU2LCAxMzg3MjYsIDI1NiwgMjM5MTgsIDI1NiwgMjM5MTUsIDI1NiwgMjM5MzIsIDI1NiwgMjQwMzMsIDI1NiwgCi0gICAgMjQwMzQsIDI1NiwgMTQzODMsIDI1NiwgMjQwNjEsIDI1NiwgMjQxMDQsIDI1NiwgMjQxMjUsIDI1NiwgMjQxNjksIDI1NiwgCi0gICAgMTQ0MzQsIDI1NiwgMTM5NjUxLCAyNTYsIDE0NDYwLCAyNTYsIDI0MjQwLCAyNTYsIDI0MjQzLCAyNTYsIDI0MjQ2LCAyNTYsIAotICAgIDI0MjY2LCAyNTYsIDE3Mjk0NiwgMjU2LCAyNDMxOCwgMjU2LCAxNDAwODEsIDI1NiwgMTQwMDgxLCAyNTYsIDMzMjgxLCAKLSAgICAyNTYsIDI0MzU0LCAyNTYsIDI0MzU0LCAyNTYsIDE0NTM1LCAyNTYsIDE0NDA1NiwgMjU2LCAxNTYxMjIsIDI1NiwgMjQ0MTgsIAotICAgIDI1NiwgMjQ0MjcsIDI1NiwgMTQ1NjMsIDI1NiwgMjQ0NzQsIDI1NiwgMjQ1MjUsIDI1NiwgMjQ1MzUsIDI1NiwgMjQ1NjksIAotICAgIDI1NiwgMjQ3MDUsIDI1NiwgMTQ2NTAsIDI1NiwgMTQ2MjAsIDI1NiwgMjQ3MjQsIDI1NiwgMTQxMDEyLCAyNTYsIDI0Nzc1LCAKLSAgICAyNTYsIDI0OTA0LCAyNTYsIDI0OTA4LCAyNTYsIDI0OTEwLCAyNTYsIDI0OTA4LCAyNTYsIDI0OTU0LCAyNTYsIDI0OTc0LCAKLSAgICAyNTYsIDI1MDEwLCAyNTYsIDI0OTk2LCAyNTYsIDI1MDA3LCAyNTYsIDI1MDU0LCAyNTYsIDI1MDc0LCAyNTYsIDI1MDc4LCAKLSAgICAyNTYsIDI1MTA0LCAyNTYsIDI1MTE1LCAyNTYsIDI1MTgxLCAyNTYsIDI1MjY1LCAyNTYsIDI1MzAwLCAyNTYsIDI1NDI0LCAKLSAgICAyNTYsIDE0MjA5MiwgMjU2LCAyNTQwNSwgMjU2LCAyNTM0MCwgMjU2LCAyNTQ0OCwgMjU2LCAyNTQ3NSwgMjU2LCAyNTU3MiwgCi0gICAgMjU2LCAxNDIzMjEsIDI1NiwgMjU2MzQsIDI1NiwgMjU1NDEsIDI1NiwgMjU1MTMsIDI1NiwgMTQ4OTQsIDI1NiwgMjU3MDUsIAotICAgIDI1NiwgMjU3MjYsIDI1NiwgMjU3NTcsIDI1NiwgMjU3MTksIDI1NiwgMTQ5NTYsIDI1NiwgMjU5MzUsIDI1NiwgMjU5NjQsIAotICAgIDI1NiwgMTQzMzcwLCAyNTYsIDI2MDgzLCAyNTYsIDI2MzYwLCAyNTYsIDI2MTg1LCAyNTYsIDE1MTI5LCAyNTYsIDI2MjU3LCAKLSAgICAyNTYsIDE1MTEyLCAyNTYsIDE1MDc2LCAyNTYsIDIwODgyLCAyNTYsIDIwODg1LCAyNTYsIDI2MzY4LCAyNTYsIDI2MjY4LCAKLSAgICAyNTYsIDMyOTQxLCAyNTYsIDE3MzY5LCAyNTYsIDI2MzkxLCAyNTYsIDI2Mzk1LCAyNTYsIDI2NDAxLCAyNTYsIDI2NDYyLCAKLSAgICAyNTYsIDI2NDUxLCAyNTYsIDE0NDMyMywgMjU2LCAxNTE3NywgMjU2LCAyNjYxOCwgMjU2LCAyNjUwMSwgMjU2LCAyNjcwNiwgCi0gICAgMjU2LCAyNjc1NywgMjU2LCAxNDQ0OTMsIDI1NiwgMjY3NjYsIDI1NiwgMjY2NTUsIDI1NiwgMjY5MDAsIDI1NiwgMTUyNjEsIAotICAgIDI1NiwgMjY5NDYsIDI1NiwgMjcwNDMsIDI1NiwgMjcxMTQsIDI1NiwgMjczMDQsIDI1NiwgMTQ1MDU5LCAyNTYsIDI3MzU1LCAKLSAgICAyNTYsIDE1Mzg0LCAyNTYsIDI3NDI1LCAyNTYsIDE0NTU3NSwgMjU2LCAyNzQ3NiwgMjU2LCAxNTQzOCwgMjU2LCAyNzUwNiwgCi0gICAgMjU2LCAyNzU1MSwgMjU2LCAyNzU3OCwgMjU2LCAyNzU3OSwgMjU2LCAxNDYwNjEsIDI1NiwgMTM4NTA3LCAyNTYsIAotICAgIDE0NjE3MCwgMjU2LCAyNzcyNiwgMjU2LCAxNDY2MjAsIDI1NiwgMjc4MzksIDI1NiwgMjc4NTMsIDI1NiwgMjc3NTEsIDI1NiwgCi0gICAgMjc5MjYsIDI1NiwgMjc5NjYsIDI1NiwgMjgwMjMsIDI1NiwgMjc5NjksIDI1NiwgMjgwMDksIDI1NiwgMjgwMjQsIDI1NiwgCi0gICAgMjgwMzcsIDI1NiwgMTQ2NzE4LCAyNTYsIDI3OTU2LCAyNTYsIDI4MjA3LCAyNTYsIDI4MjcwLCAyNTYsIDE1NjY3LCAyNTYsIAotICAgIDI4MzYzLCAyNTYsIDI4MzU5LCAyNTYsIDE0NzE1MywgMjU2LCAyODE1MywgMjU2LCAyODUyNiwgMjU2LCAxNDcyOTQsIDI1NiwgCi0gICAgMTQ3MzQyLCAyNTYsIDI4NjE0LCAyNTYsIDI4NzI5LCAyNTYsIDI4NzAyLCAyNTYsIDI4Njk5LCAyNTYsIDE1NzY2LCAyNTYsIAotICAgIDI4NzQ2LCAyNTYsIDI4Nzk3LCAyNTYsIDI4NzkxLCAyNTYsIDI4ODQ1LCAyNTYsIDEzMjM4OSwgMjU2LCAyODk5NywgMjU2LCAKLSAgICAxNDgwNjcsIDI1NiwgMjkwODQsIDI1NiwgMTQ4Mzk1LCAyNTYsIDI5MjI0LCAyNTYsIDI5MjM3LCAyNTYsIDI5MjY0LCAyNTYsIAotICAgIDE0OTAwMCwgMjU2LCAyOTMxMiwgMjU2LCAyOTMzMywgMjU2LCAxNDkzMDEsIDI1NiwgMTQ5NTI0LCAyNTYsIDI5NTYyLCAKLSAgICAyNTYsIDI5NTc5LCAyNTYsIDE2MDQ0LCAyNTYsIDI5NjA1LCAyNTYsIDE2MDU2LCAyNTYsIDE2MDU2LCAyNTYsIDI5NzY3LCAKLSAgICAyNTYsIDI5Nzg4LCAyNTYsIDI5ODA5LCAyNTYsIDI5ODI5LCAyNTYsIDI5ODk4LCAyNTYsIDE2MTU1LCAyNTYsIDI5OTg4LCAKLSAgICAyNTYsIDE1MDU4MiwgMjU2LCAzMDAxNCwgMjU2LCAxNTA2NzQsIDI1NiwgMzAwNjQsIDI1NiwgMTM5Njc5LCAyNTYsIAotICAgIDMwMjI0LCAyNTYsIDE1MTQ1NywgMjU2LCAxNTE0ODAsIDI1NiwgMTUxNjIwLCAyNTYsIDE2MzgwLCAyNTYsIDE2MzkyLCAKLSAgICAyNTYsIDMwNDUyLCAyNTYsIDE1MTc5NSwgMjU2LCAxNTE3OTQsIDI1NiwgMTUxODMzLCAyNTYsIDE1MTg1OSwgMjU2LCAKLSAgICAzMDQ5NCwgMjU2LCAzMDQ5NSwgMjU2LCAzMDQ5NSwgMjU2LCAzMDUzOCwgMjU2LCAxNjQ0MSwgMjU2LCAzMDYwMywgMjU2LCAKLSAgICAxNjQ1NCwgMjU2LCAxNjUzNCwgMjU2LCAxNTI2MDUsIDI1NiwgMzA3OTgsIDI1NiwgMzA4NjAsIDI1NiwgMzA5MjQsIDI1NiwgCi0gICAgMTY2MTEsIDI1NiwgMTUzMTI2LCAyNTYsIDMxMDYyLCAyNTYsIDE1MzI0MiwgMjU2LCAxNTMyODUsIDI1NiwgMzExMTksIAotICAgIDI1NiwgMzEyMTEsIDI1NiwgMTY2ODcsIDI1NiwgMzEyOTYsIDI1NiwgMzEzMDYsIDI1NiwgMzEzMTEsIDI1NiwgMTUzOTgwLCAKLSAgICAyNTYsIDE1NDI3OSwgMjU2LCAxNTQyNzksIDI1NiwgMzE0NzAsIDI1NiwgMTY4OTgsIDI1NiwgMTU0NTM5LCAyNTYsIAotICAgIDMxNjg2LCAyNTYsIDMxNjg5LCAyNTYsIDE2OTM1LCAyNTYsIDE1NDc1MiwgMjU2LCAzMTk1NCwgMjU2LCAxNzA1NiwgMjU2LCAKLSAgICAzMTk3NiwgMjU2LCAzMTk3MSwgMjU2LCAzMjAwMCwgMjU2LCAxNTU1MjYsIDI1NiwgMzIwOTksIDI1NiwgMTcxNTMsIDI1NiwgCi0gICAgMzIxOTksIDI1NiwgMzIyNTgsIDI1NiwgMzIzMjUsIDI1NiwgMTcyMDQsIDI1NiwgMTU2MjAwLCAyNTYsIDE1NjIzMSwgMjU2LCAKLSAgICAxNzI0MSwgMjU2LCAxNTYzNzcsIDI1NiwgMzI2MzQsIDI1NiwgMTU2NDc4LCAyNTYsIDMyNjYxLCAyNTYsIDMyNzYyLCAyNTYsIAotICAgIDMyNzczLCAyNTYsIDE1Njg5MCwgMjU2LCAxNTY5NjMsIDI1NiwgMzI4NjQsIDI1NiwgMTU3MDk2LCAyNTYsIDMyODgwLCAKLSAgICAyNTYsIDE0NDIyMywgMjU2LCAxNzM2NSwgMjU2LCAzMjk0NiwgMjU2LCAzMzAyNywgMjU2LCAxNzQxOSwgMjU2LCAzMzA4NiwgCi0gICAgMjU2LCAyMzIyMSwgMjU2LCAxNTc2MDcsIDI1NiwgMTU3NjIxLCAyNTYsIDE0NDI3NSwgMjU2LCAxNDQyODQsIDI1NiwgCi0gICAgMzMyODEsIDI1NiwgMzMyODQsIDI1NiwgMzY3NjYsIDI1NiwgMTc1MTUsIDI1NiwgMzM0MjUsIDI1NiwgMzM0MTksIDI1NiwgCi0gICAgMzM0MzcsIDI1NiwgMjExNzEsIDI1NiwgMzM0NTcsIDI1NiwgMzM0NTksIDI1NiwgMzM0NjksIDI1NiwgMzM1MTAsIDI1NiwgCi0gICAgMTU4NTI0LCAyNTYsIDMzNTA5LCAyNTYsIDMzNTY1LCAyNTYsIDMzNjM1LCAyNTYsIDMzNzA5LCAyNTYsIDMzNTcxLCAyNTYsIAotICAgIDMzNzI1LCAyNTYsIDMzNzY3LCAyNTYsIDMzODc5LCAyNTYsIDMzNjE5LCAyNTYsIDMzNzM4LCAyNTYsIDMzNzQwLCAyNTYsIAotICAgIDMzNzU2LCAyNTYsIDE1ODc3NCwgMjU2LCAxNTkwODMsIDI1NiwgMTU4OTMzLCAyNTYsIDE3NzA3LCAyNTYsIDM0MDMzLCAKLSAgICAyNTYsIDM0MDM1LCAyNTYsIDM0MDcwLCAyNTYsIDE2MDcxNCwgMjU2LCAzNDE0OCwgMjU2LCAxNTk1MzIsIDI1NiwgMTc3NTcsIAotICAgIDI1NiwgMTc3NjEsIDI1NiwgMTU5NjY1LCAyNTYsIDE1OTk1NCwgMjU2LCAxNzc3MSwgMjU2LCAzNDM4NCwgMjU2LCAzNDM5NiwgCi0gICAgMjU2LCAzNDQwNywgMjU2LCAzNDQwOSwgMjU2LCAzNDQ3MywgMjU2LCAzNDQ0MCwgMjU2LCAzNDU3NCwgMjU2LCAzNDUzMCwgCi0gICAgMjU2LCAzNDY4MSwgMjU2LCAzNDYwMCwgMjU2LCAzNDY2NywgMjU2LCAzNDY5NCwgMjU2LCAxNzg3OSwgMjU2LCAzNDc4NSwgCi0gICAgMjU2LCAzNDgxNywgMjU2LCAxNzkxMywgMjU2LCAzNDkxMiwgMjU2LCAzNDkxNSwgMjU2LCAxNjEzODMsIDI1NiwgMzUwMzEsIAotICAgIDI1NiwgMzUwMzgsIDI1NiwgMTc5NzMsIDI1NiwgMzUwNjYsIDI1NiwgMTM0OTksIDI1NiwgMTYxOTY2LCAyNTYsIDE2MjE1MCwgCi0gICAgMjU2LCAxODExMCwgMjU2LCAxODExOSwgMjU2LCAzNTQ4OCwgMjU2LCAzNTU2NSwgMjU2LCAzNTcyMiwgMjU2LCAzNTkyNSwgCi0gICAgMjU2LCAxNjI5ODQsIDI1NiwgMzYwMTEsIDI1NiwgMzYwMzMsIDI1NiwgMzYxMjMsIDI1NiwgMzYyMTUsIDI1NiwgMTYzNjMxLCAKLSAgICAyNTYsIDEzMzEyNCwgMjU2LCAzNjI5OSwgMjU2LCAzNjI4NCwgMjU2LCAzNjMzNiwgMjU2LCAxMzMzNDIsIDI1NiwgMzY1NjQsIAotICAgIDI1NiwgMzY2NjQsIDI1NiwgMTY1MzMwLCAyNTYsIDE2NTM1NywgMjU2LCAzNzAxMiwgMjU2LCAzNzEwNSwgMjU2LCAzNzEzNywgCi0gICAgMjU2LCAxNjU2NzgsIDI1NiwgMzcxNDcsIDI1NiwgMzc0MzIsIDI1NiwgMzc1OTEsIDI1NiwgMzc1OTIsIDI1NiwgMzc1MDAsIAotICAgIDI1NiwgMzc4ODEsIDI1NiwgMzc5MDksIDI1NiwgMTY2OTA2LCAyNTYsIDM4MjgzLCAyNTYsIDE4ODM3LCAyNTYsIDM4MzI3LCAKLSAgICAyNTYsIDE2NzI4NywgMjU2LCAxODkxOCwgMjU2LCAzODU5NSwgMjU2LCAyMzk4NiwgMjU2LCAzODY5MSwgMjU2LCAxNjgyNjEsIAotICAgIDI1NiwgMTY4NDc0LCAyNTYsIDE5MDU0LCAyNTYsIDE5MDYyLCAyNTYsIDM4ODgwLCAyNTYsIDE2ODk3MCwgMjU2LCAxOTEyMiwgCi0gICAgMjU2LCAxNjkxMTAsIDI1NiwgMzg5MjMsIDI1NiwgMzg5MjMsIDI1NiwgMzg5NTMsIDI1NiwgMTY5Mzk4LCAyNTYsIDM5MTM4LCAKLSAgICAyNTYsIDE5MjUxLCAyNTYsIDM5MjA5LCAyNTYsIDM5MzM1LCAyNTYsIDM5MzYyLCAyNTYsIDM5NDIyLCAyNTYsIDE5NDA2LCAKLSAgICAyNTYsIDE3MDgwMCwgMjU2LCAzOTY5OCwgMjU2LCA0MDAwMCwgMjU2LCA0MDE4OSwgMjU2LCAxOTY2MiwgMjU2LCAxOTY5MywgCi0gICAgMjU2LCA0MDI5NSwgMjU2LCAxNzIyMzgsIDI1NiwgMTk3MDQsIDI1NiwgMTcyMjkzLCAyNTYsIDE3MjU1OCwgMjU2LCAKLSAgICAxNzI2ODksIDI1NiwgNDA2MzUsIDI1NiwgMTk3OTgsIDI1NiwgNDA2OTcsIDI1NiwgNDA3MDIsIDI1NiwgNDA3MDksIDI1NiwgCi0gICAgNDA3MTksIDI1NiwgNDA3MjYsIDI1NiwgNDA3NjMsIDI1NiwgMTczNTY4LCAKKyAgICA5NzcsIDI2MiwgMTAwOCwgMjYyLCA5ODEsIDI2MiwgMTAwOSwgMjYyLCA5ODIsIDI2MiwgOTEzLCAyNjIsIDkxNCwgMjYyLCAKKyAgICA5MTUsIDI2MiwgOTE2LCAyNjIsIDkxNywgMjYyLCA5MTgsIDI2MiwgOTE5LCAyNjIsIDkyMCwgMjYyLCA5MjEsIDI2MiwgCisgICAgOTIyLCAyNjIsIDkyMywgMjYyLCA5MjQsIDI2MiwgOTI1LCAyNjIsIDkyNiwgMjYyLCA5MjcsIDI2MiwgOTI4LCAyNjIsIAorICAgIDkyOSwgMjYyLCAxMDEyLCAyNjIsIDkzMSwgMjYyLCA5MzIsIDI2MiwgOTMzLCAyNjIsIDkzNCwgMjYyLCA5MzUsIDI2MiwgCisgICAgOTM2LCAyNjIsIDkzNywgMjYyLCA4NzExLCAyNjIsIDk0NSwgMjYyLCA5NDYsIDI2MiwgOTQ3LCAyNjIsIDk0OCwgMjYyLCAKKyAgICA5NDksIDI2MiwgOTUwLCAyNjIsIDk1MSwgMjYyLCA5NTIsIDI2MiwgOTUzLCAyNjIsIDk1NCwgMjYyLCA5NTUsIDI2MiwgCisgICAgOTU2LCAyNjIsIDk1NywgMjYyLCA5NTgsIDI2MiwgOTU5LCAyNjIsIDk2MCwgMjYyLCA5NjEsIDI2MiwgOTYyLCAyNjIsIAorICAgIDk2MywgMjYyLCA5NjQsIDI2MiwgOTY1LCAyNjIsIDk2NiwgMjYyLCA5NjcsIDI2MiwgOTY4LCAyNjIsIDk2OSwgMjYyLCAKKyAgICA4NzA2LCAyNjIsIDEwMTMsIDI2MiwgOTc3LCAyNjIsIDEwMDgsIDI2MiwgOTgxLCAyNjIsIDEwMDksIDI2MiwgOTgyLCAyNjIsIAorICAgIDkxMywgMjYyLCA5MTQsIDI2MiwgOTE1LCAyNjIsIDkxNiwgMjYyLCA5MTcsIDI2MiwgOTE4LCAyNjIsIDkxOSwgMjYyLCAKKyAgICA5MjAsIDI2MiwgOTIxLCAyNjIsIDkyMiwgMjYyLCA5MjMsIDI2MiwgOTI0LCAyNjIsIDkyNSwgMjYyLCA5MjYsIDI2MiwgCisgICAgOTI3LCAyNjIsIDkyOCwgMjYyLCA5MjksIDI2MiwgMTAxMiwgMjYyLCA5MzEsIDI2MiwgOTMyLCAyNjIsIDkzMywgMjYyLCAKKyAgICA5MzQsIDI2MiwgOTM1LCAyNjIsIDkzNiwgMjYyLCA5MzcsIDI2MiwgODcxMSwgMjYyLCA5NDUsIDI2MiwgOTQ2LCAyNjIsIAorICAgIDk0NywgMjYyLCA5NDgsIDI2MiwgOTQ5LCAyNjIsIDk1MCwgMjYyLCA5NTEsIDI2MiwgOTUyLCAyNjIsIDk1MywgMjYyLCAKKyAgICA5NTQsIDI2MiwgOTU1LCAyNjIsIDk1NiwgMjYyLCA5NTcsIDI2MiwgOTU4LCAyNjIsIDk1OSwgMjYyLCA5NjAsIDI2MiwgCisgICAgOTYxLCAyNjIsIDk2MiwgMjYyLCA5NjMsIDI2MiwgOTY0LCAyNjIsIDk2NSwgMjYyLCA5NjYsIDI2MiwgOTY3LCAyNjIsIAorICAgIDk2OCwgMjYyLCA5NjksIDI2MiwgODcwNiwgMjYyLCAxMDEzLCAyNjIsIDk3NywgMjYyLCAxMDA4LCAyNjIsIDk4MSwgMjYyLCAKKyAgICAxMDA5LCAyNjIsIDk4MiwgMjYyLCA5MTMsIDI2MiwgOTE0LCAyNjIsIDkxNSwgMjYyLCA5MTYsIDI2MiwgOTE3LCAyNjIsIAorICAgIDkxOCwgMjYyLCA5MTksIDI2MiwgOTIwLCAyNjIsIDkyMSwgMjYyLCA5MjIsIDI2MiwgOTIzLCAyNjIsIDkyNCwgMjYyLCAKKyAgICA5MjUsIDI2MiwgOTI2LCAyNjIsIDkyNywgMjYyLCA5MjgsIDI2MiwgOTI5LCAyNjIsIDEwMTIsIDI2MiwgOTMxLCAyNjIsIAorICAgIDkzMiwgMjYyLCA5MzMsIDI2MiwgOTM0LCAyNjIsIDkzNSwgMjYyLCA5MzYsIDI2MiwgOTM3LCAyNjIsIDg3MTEsIDI2MiwgCisgICAgOTQ1LCAyNjIsIDk0NiwgMjYyLCA5NDcsIDI2MiwgOTQ4LCAyNjIsIDk0OSwgMjYyLCA5NTAsIDI2MiwgOTUxLCAyNjIsIAorICAgIDk1MiwgMjYyLCA5NTMsIDI2MiwgOTU0LCAyNjIsIDk1NSwgMjYyLCA5NTYsIDI2MiwgOTU3LCAyNjIsIDk1OCwgMjYyLCAKKyAgICA5NTksIDI2MiwgOTYwLCAyNjIsIDk2MSwgMjYyLCA5NjIsIDI2MiwgOTYzLCAyNjIsIDk2NCwgMjYyLCA5NjUsIDI2MiwgCisgICAgOTY2LCAyNjIsIDk2NywgMjYyLCA5NjgsIDI2MiwgOTY5LCAyNjIsIDg3MDYsIDI2MiwgMTAxMywgMjYyLCA5NzcsIDI2MiwgCisgICAgMTAwOCwgMjYyLCA5ODEsIDI2MiwgMTAwOSwgMjYyLCA5ODIsIDI2MiwgOTg4LCAyNjIsIDk4OSwgMjYyLCA0OCwgMjYyLCAKKyAgICA0OSwgMjYyLCA1MCwgMjYyLCA1MSwgMjYyLCA1MiwgMjYyLCA1MywgMjYyLCA1NCwgMjYyLCA1NSwgMjYyLCA1NiwgMjYyLCAKKyAgICA1NywgMjYyLCA0OCwgMjYyLCA0OSwgMjYyLCA1MCwgMjYyLCA1MSwgMjYyLCA1MiwgMjYyLCA1MywgMjYyLCA1NCwgMjYyLCAKKyAgICA1NSwgMjYyLCA1NiwgMjYyLCA1NywgMjYyLCA0OCwgMjYyLCA0OSwgMjYyLCA1MCwgMjYyLCA1MSwgMjYyLCA1MiwgMjYyLCAKKyAgICA1MywgMjYyLCA1NCwgMjYyLCA1NSwgMjYyLCA1NiwgMjYyLCA1NywgMjYyLCA0OCwgMjYyLCA0OSwgMjYyLCA1MCwgMjYyLCAKKyAgICA1MSwgMjYyLCA1MiwgMjYyLCA1MywgMjYyLCA1NCwgMjYyLCA1NSwgMjYyLCA1NiwgMjYyLCA1NywgMjYyLCA0OCwgMjYyLCAKKyAgICA0OSwgMjYyLCA1MCwgMjYyLCA1MSwgMjYyLCA1MiwgMjYyLCA1MywgMjYyLCA1NCwgMjYyLCA1NSwgMjYyLCA1NiwgMjYyLCAKKyAgICA1NywgMjYyLCAxNTc1LCAyNjIsIDE1NzYsIDI2MiwgMTU4MCwgMjYyLCAxNTgzLCAyNjIsIDE2MDgsIDI2MiwgMTU4NiwgCisgICAgMjYyLCAxNTgxLCAyNjIsIDE1OTEsIDI2MiwgMTYxMCwgMjYyLCAxNjAzLCAyNjIsIDE2MDQsIDI2MiwgMTYwNSwgMjYyLCAKKyAgICAxNjA2LCAyNjIsIDE1ODcsIDI2MiwgMTU5MywgMjYyLCAxNjAxLCAyNjIsIDE1ODksIDI2MiwgMTYwMiwgMjYyLCAxNTg1LCAKKyAgICAyNjIsIDE1ODgsIDI2MiwgMTU3OCwgMjYyLCAxNTc5LCAyNjIsIDE1ODIsIDI2MiwgMTU4NCwgMjYyLCAxNTkwLCAyNjIsIAorICAgIDE1OTIsIDI2MiwgMTU5NCwgMjYyLCAxNjQ2LCAyNjIsIDE3MjIsIDI2MiwgMTY5NywgMjYyLCAxNjQ3LCAyNjIsIDE1NzYsIAorICAgIDI2MiwgMTU4MCwgMjYyLCAxNjA3LCAyNjIsIDE1ODEsIDI2MiwgMTYxMCwgMjYyLCAxNjAzLCAyNjIsIDE2MDQsIDI2MiwgCisgICAgMTYwNSwgMjYyLCAxNjA2LCAyNjIsIDE1ODcsIDI2MiwgMTU5MywgMjYyLCAxNjAxLCAyNjIsIDE1ODksIDI2MiwgMTYwMiwgCisgICAgMjYyLCAxNTg4LCAyNjIsIDE1NzgsIDI2MiwgMTU3OSwgMjYyLCAxNTgyLCAyNjIsIDE1OTAsIDI2MiwgMTU5NCwgMjYyLCAKKyAgICAxNTgwLCAyNjIsIDE1ODEsIDI2MiwgMTYxMCwgMjYyLCAxNjA0LCAyNjIsIDE2MDYsIDI2MiwgMTU4NywgMjYyLCAxNTkzLCAKKyAgICAyNjIsIDE1ODksIDI2MiwgMTYwMiwgMjYyLCAxNTg4LCAyNjIsIDE1ODIsIDI2MiwgMTU5MCwgMjYyLCAxNTk0LCAyNjIsIAorICAgIDE3MjIsIDI2MiwgMTY0NywgMjYyLCAxNTc2LCAyNjIsIDE1ODAsIDI2MiwgMTYwNywgMjYyLCAxNTgxLCAyNjIsIDE1OTEsIAorICAgIDI2MiwgMTYxMCwgMjYyLCAxNjAzLCAyNjIsIDE2MDUsIDI2MiwgMTYwNiwgMjYyLCAxNTg3LCAyNjIsIDE1OTMsIDI2MiwgCisgICAgMTYwMSwgMjYyLCAxNTg5LCAyNjIsIDE2MDIsIDI2MiwgMTU4OCwgMjYyLCAxNTc4LCAyNjIsIDE1NzksIDI2MiwgMTU4MiwgCisgICAgMjYyLCAxNTkwLCAyNjIsIDE1OTIsIDI2MiwgMTU5NCwgMjYyLCAxNjQ2LCAyNjIsIDE2OTcsIDI2MiwgMTU3NSwgMjYyLCAKKyAgICAxNTc2LCAyNjIsIDE1ODAsIDI2MiwgMTU4MywgMjYyLCAxNjA3LCAyNjIsIDE2MDgsIDI2MiwgMTU4NiwgMjYyLCAxNTgxLCAKKyAgICAyNjIsIDE1OTEsIDI2MiwgMTYxMCwgMjYyLCAxNjA0LCAyNjIsIDE2MDUsIDI2MiwgMTYwNiwgMjYyLCAxNTg3LCAyNjIsIAorICAgIDE1OTMsIDI2MiwgMTYwMSwgMjYyLCAxNTg5LCAyNjIsIDE2MDIsIDI2MiwgMTU4NSwgMjYyLCAxNTg4LCAyNjIsIDE1NzgsIAorICAgIDI2MiwgMTU3OSwgMjYyLCAxNTgyLCAyNjIsIDE1ODQsIDI2MiwgMTU5MCwgMjYyLCAxNTkyLCAyNjIsIDE1OTQsIDI2MiwgCisgICAgMTU3NiwgMjYyLCAxNTgwLCAyNjIsIDE1ODMsIDI2MiwgMTYwOCwgMjYyLCAxNTg2LCAyNjIsIDE1ODEsIDI2MiwgMTU5MSwgCisgICAgMjYyLCAxNjEwLCAyNjIsIDE2MDQsIDI2MiwgMTYwNSwgMjYyLCAxNjA2LCAyNjIsIDE1ODcsIDI2MiwgMTU5MywgMjYyLCAKKyAgICAxNjAxLCAyNjIsIDE1ODksIDI2MiwgMTYwMiwgMjYyLCAxNTg1LCAyNjIsIDE1ODgsIDI2MiwgMTU3OCwgMjYyLCAxNTc5LCAKKyAgICAyNjIsIDE1ODIsIDI2MiwgMTU4NCwgMjYyLCAxNTkwLCAyNjIsIDE1OTIsIDI2MiwgMTU5NCwgNTE0LCA0OCwgNDYsIDUxNCwgCisgICAgNDgsIDQ0LCA1MTQsIDQ5LCA0NCwgNTE0LCA1MCwgNDQsIDUxNCwgNTEsIDQ0LCA1MTQsIDUyLCA0NCwgNTE0LCA1MywgNDQsIAorICAgIDUxNCwgNTQsIDQ0LCA1MTQsIDU1LCA0NCwgNTE0LCA1NiwgNDQsIDUxNCwgNTcsIDQ0LCA3NzAsIDQwLCA2NSwgNDEsIDc3MCwgCisgICAgNDAsIDY2LCA0MSwgNzcwLCA0MCwgNjcsIDQxLCA3NzAsIDQwLCA2OCwgNDEsIDc3MCwgNDAsIDY5LCA0MSwgNzcwLCA0MCwgCisgICAgNzAsIDQxLCA3NzAsIDQwLCA3MSwgNDEsIDc3MCwgNDAsIDcyLCA0MSwgNzcwLCA0MCwgNzMsIDQxLCA3NzAsIDQwLCA3NCwgCisgICAgNDEsIDc3MCwgNDAsIDc1LCA0MSwgNzcwLCA0MCwgNzYsIDQxLCA3NzAsIDQwLCA3NywgNDEsIDc3MCwgNDAsIDc4LCA0MSwgCisgICAgNzcwLCA0MCwgNzksIDQxLCA3NzAsIDQwLCA4MCwgNDEsIDc3MCwgNDAsIDgxLCA0MSwgNzcwLCA0MCwgODIsIDQxLCA3NzAsIAorICAgIDQwLCA4MywgNDEsIDc3MCwgNDAsIDg0LCA0MSwgNzcwLCA0MCwgODUsIDQxLCA3NzAsIDQwLCA4NiwgNDEsIDc3MCwgNDAsIAorICAgIDg3LCA0MSwgNzcwLCA0MCwgODgsIDQxLCA3NzAsIDQwLCA4OSwgNDEsIDc3MCwgNDAsIDkwLCA0MSwgNzcwLCAxMjMwOCwgCisgICAgODMsIDEyMzA5LCAyNjMsIDY3LCAyNjMsIDgyLCA1MTksIDY3LCA2OCwgNTE5LCA4NywgOTAsIDI2NiwgNjUsIDI2NiwgNjYsIAorICAgIDI2NiwgNjcsIDI2NiwgNjgsIDI2NiwgNjksIDI2NiwgNzAsIDI2NiwgNzEsIDI2NiwgNzIsIDI2NiwgNzMsIDI2NiwgNzQsIAorICAgIDI2NiwgNzUsIDI2NiwgNzYsIDI2NiwgNzcsIDI2NiwgNzgsIDI2NiwgNzksIDI2NiwgODAsIDI2NiwgODEsIDI2NiwgODIsIAorICAgIDI2NiwgODMsIDI2NiwgODQsIDI2NiwgODUsIDI2NiwgODYsIDI2NiwgODcsIDI2NiwgODgsIDI2NiwgODksIDI2NiwgOTAsIAorICAgIDUyMiwgNzIsIDg2LCA1MjIsIDc3LCA4NiwgNTIyLCA4MywgNjgsIDUyMiwgODMsIDgzLCA3NzgsIDgwLCA4MCwgODYsIDUyMiwgCisgICAgODcsIDY3LCA1MTUsIDc3LCA2NywgNTE1LCA3NywgNjgsIDUyMiwgNjgsIDc0LCA1MjIsIDEyNDExLCAxMjM2MywgNTIyLCAKKyAgICAxMjQ2NywgMTI0NjcsIDI2NiwgMTI0NjksIDI2NiwgMjUxNjMsIDI2NiwgMjMzODMsIDI2NiwgMjE0NTIsIDI2NiwgMTI0ODcsIAorICAgIDI2NiwgMjAxMDgsIDI2NiwgMjI4MTAsIDI2NiwgMzUyOTksIDI2NiwgMjI4MjUsIDI2NiwgMjAxMzIsIDI2NiwgMjYxNDQsIAorICAgIDI2NiwgMjg5NjEsIDI2NiwgMjYwMDksIDI2NiwgMjEwNjksIDI2NiwgMjQ0NjAsIDI2NiwgMjA4NzcsIDI2NiwgMjYwMzIsIAorICAgIDI2NiwgMjEwMjEsIDI2NiwgMzIwNjYsIDI2NiwgMjk5ODMsIDI2NiwgMzYwMDksIDI2NiwgMjI3NjgsIDI2NiwgMjE1NjEsIAorICAgIDI2NiwgMjg0MzYsIDI2NiwgMjUyMzcsIDI2NiwgMjU0MjksIDI2NiwgMTk5NjgsIDI2NiwgMTk5NzcsIDI2NiwgMzY5MzgsIAorICAgIDI2NiwgMjQwMzgsIDI2NiwgMjAwMTMsIDI2NiwgMjE0OTEsIDI2NiwgMjUzNTEsIDI2NiwgMzYyMDgsIDI2NiwgMjUxNzEsIAorICAgIDI2NiwgMzExMDUsIDI2NiwgMzEzNTQsIDI2NiwgMjE1MTIsIDI2NiwgMjgyODgsIDI2NiwgMjYzNzcsIDI2NiwgMjYzNzYsIAorICAgIDI2NiwgMzAwMDMsIDI2NiwgMjExMDYsIDI2NiwgMjE5NDIsIDc3MCwgMTIzMDgsIDI2NDEyLCAxMjMwOSwgNzcwLCAxMjMwOCwgCisgICAgMTk5NzcsIDEyMzA5LCA3NzAsIDEyMzA4LCAyMDEwOCwgMTIzMDksIDc3MCwgMTIzMDgsIDIzNDMzLCAxMjMwOSwgNzcwLCAKKyAgICAxMjMwOCwgMjg4NTcsIDEyMzA5LCA3NzAsIDEyMzA4LCAyNTE3MSwgMTIzMDksIDc3MCwgMTIzMDgsIDMwNDIzLCAxMjMwOSwgCisgICAgNzcwLCAxMjMwOCwgMjEyMTMsIDEyMzA5LCA3NzAsIDEyMzA4LCAyNTk0MywgMTIzMDksIDI2MywgMjQ0NzEsIDI2MywgCisgICAgMjE0ODcsIDI1NiwgMjAwMjksIDI1NiwgMjAwMjQsIDI1NiwgMjAwMzMsIDI1NiwgMTMxMzYyLCAyNTYsIDIwMzIwLCAyNTYsIAorICAgIDIwMzk4LCAyNTYsIDIwNDExLCAyNTYsIDIwNDgyLCAyNTYsIDIwNjAyLCAyNTYsIDIwNjMzLCAyNTYsIDIwNzExLCAyNTYsIAorICAgIDIwNjg3LCAyNTYsIDEzNDcwLCAyNTYsIDEzMjY2NiwgMjU2LCAyMDgxMywgMjU2LCAyMDgyMCwgMjU2LCAyMDgzNiwgMjU2LCAKKyAgICAyMDg1NSwgMjU2LCAxMzIzODAsIDI1NiwgMTM0OTcsIDI1NiwgMjA4MzksIDI1NiwgMjA4NzcsIDI1NiwgMTMyNDI3LCAyNTYsIAorICAgIDIwODg3LCAyNTYsIDIwOTAwLCAyNTYsIDIwMTcyLCAyNTYsIDIwOTA4LCAyNTYsIDIwOTE3LCAyNTYsIDE2ODQxNSwgMjU2LCAKKyAgICAyMDk4MSwgMjU2LCAyMDk5NSwgMjU2LCAxMzUzNSwgMjU2LCAyMTA1MSwgMjU2LCAyMTA2MiwgMjU2LCAyMTEwNiwgMjU2LCAKKyAgICAyMTExMSwgMjU2LCAxMzU4OSwgMjU2LCAyMTE5MSwgMjU2LCAyMTE5MywgMjU2LCAyMTIyMCwgMjU2LCAyMTI0MiwgMjU2LCAKKyAgICAyMTI1MywgMjU2LCAyMTI1NCwgMjU2LCAyMTI3MSwgMjU2LCAyMTMyMSwgMjU2LCAyMTMyOSwgMjU2LCAyMTMzOCwgMjU2LCAKKyAgICAyMTM2MywgMjU2LCAyMTM3MywgMjU2LCAyMTM3NSwgMjU2LCAyMTM3NSwgMjU2LCAyMTM3NSwgMjU2LCAxMzM2NzYsIDI1NiwgCisgICAgMjg3ODQsIDI1NiwgMjE0NTAsIDI1NiwgMjE0NzEsIDI1NiwgMTMzOTg3LCAyNTYsIDIxNDgzLCAyNTYsIDIxNDg5LCAyNTYsIAorICAgIDIxNTEwLCAyNTYsIDIxNjYyLCAyNTYsIDIxNTYwLCAyNTYsIDIxNTc2LCAyNTYsIDIxNjA4LCAyNTYsIDIxNjY2LCAyNTYsIAorICAgIDIxNzUwLCAyNTYsIDIxNzc2LCAyNTYsIDIxODQzLCAyNTYsIDIxODU5LCAyNTYsIDIxODkyLCAyNTYsIDIxODkyLCAyNTYsIAorICAgIDIxOTEzLCAyNTYsIDIxOTMxLCAyNTYsIDIxOTM5LCAyNTYsIDIxOTU0LCAyNTYsIDIyMjk0LCAyNTYsIDIyMDIyLCAyNTYsIAorICAgIDIyMjk1LCAyNTYsIDIyMDk3LCAyNTYsIDIyMTMyLCAyNTYsIDIwOTk5LCAyNTYsIDIyNzY2LCAyNTYsIDIyNDc4LCAyNTYsIAorICAgIDIyNTE2LCAyNTYsIDIyNTQxLCAyNTYsIDIyNDExLCAyNTYsIDIyNTc4LCAyNTYsIDIyNTc3LCAyNTYsIDIyNzAwLCAyNTYsIAorICAgIDEzNjQyMCwgMjU2LCAyMjc3MCwgMjU2LCAyMjc3NSwgMjU2LCAyMjc5MCwgMjU2LCAyMjgxMCwgMjU2LCAyMjgxOCwgMjU2LCAKKyAgICAyMjg4MiwgMjU2LCAxMzY4NzIsIDI1NiwgMTM2OTM4LCAyNTYsIDIzMDIwLCAyNTYsIDIzMDY3LCAyNTYsIDIzMDc5LCAyNTYsIAorICAgIDIzMDAwLCAyNTYsIDIzMTQyLCAyNTYsIDE0MDYyLCAyNTYsIDE0MDc2LCAyNTYsIDIzMzA0LCAyNTYsIDIzMzU4LCAyNTYsIAorICAgIDIzMzU4LCAyNTYsIDEzNzY3MiwgMjU2LCAyMzQ5MSwgMjU2LCAyMzUxMiwgMjU2LCAyMzUyNywgMjU2LCAyMzUzOSwgMjU2LCAKKyAgICAxMzgwMDgsIDI1NiwgMjM1NTEsIDI1NiwgMjM1NTgsIDI1NiwgMjQ0MDMsIDI1NiwgMjM1ODYsIDI1NiwgMTQyMDksIDI1NiwgCisgICAgMjM2NDgsIDI1NiwgMjM2NjIsIDI1NiwgMjM3NDQsIDI1NiwgMjM2OTMsIDI1NiwgMTM4NzI0LCAyNTYsIDIzODc1LCAyNTYsIAorICAgIDEzODcyNiwgMjU2LCAyMzkxOCwgMjU2LCAyMzkxNSwgMjU2LCAyMzkzMiwgMjU2LCAyNDAzMywgMjU2LCAyNDAzNCwgMjU2LCAKKyAgICAxNDM4MywgMjU2LCAyNDA2MSwgMjU2LCAyNDEwNCwgMjU2LCAyNDEyNSwgMjU2LCAyNDE2OSwgMjU2LCAxNDQzNCwgMjU2LCAKKyAgICAxMzk2NTEsIDI1NiwgMTQ0NjAsIDI1NiwgMjQyNDAsIDI1NiwgMjQyNDMsIDI1NiwgMjQyNDYsIDI1NiwgMjQyNjYsIDI1NiwgCisgICAgMTcyOTQ2LCAyNTYsIDI0MzE4LCAyNTYsIDE0MDA4MSwgMjU2LCAxNDAwODEsIDI1NiwgMzMyODEsIDI1NiwgMjQzNTQsIAorICAgIDI1NiwgMjQzNTQsIDI1NiwgMTQ1MzUsIDI1NiwgMTQ0MDU2LCAyNTYsIDE1NjEyMiwgMjU2LCAyNDQxOCwgMjU2LCAyNDQyNywgCisgICAgMjU2LCAxNDU2MywgMjU2LCAyNDQ3NCwgMjU2LCAyNDUyNSwgMjU2LCAyNDUzNSwgMjU2LCAyNDU2OSwgMjU2LCAyNDcwNSwgCisgICAgMjU2LCAxNDY1MCwgMjU2LCAxNDYyMCwgMjU2LCAyNDcyNCwgMjU2LCAxNDEwMTIsIDI1NiwgMjQ3NzUsIDI1NiwgMjQ5MDQsIAorICAgIDI1NiwgMjQ5MDgsIDI1NiwgMjQ5MTAsIDI1NiwgMjQ5MDgsIDI1NiwgMjQ5NTQsIDI1NiwgMjQ5NzQsIDI1NiwgMjUwMTAsIAorICAgIDI1NiwgMjQ5OTYsIDI1NiwgMjUwMDcsIDI1NiwgMjUwNTQsIDI1NiwgMjUwNzQsIDI1NiwgMjUwNzgsIDI1NiwgMjUxMDQsIAorICAgIDI1NiwgMjUxMTUsIDI1NiwgMjUxODEsIDI1NiwgMjUyNjUsIDI1NiwgMjUzMDAsIDI1NiwgMjU0MjQsIDI1NiwgMTQyMDkyLCAKKyAgICAyNTYsIDI1NDA1LCAyNTYsIDI1MzQwLCAyNTYsIDI1NDQ4LCAyNTYsIDI1NDc1LCAyNTYsIDI1NTcyLCAyNTYsIDE0MjMyMSwgCisgICAgMjU2LCAyNTYzNCwgMjU2LCAyNTU0MSwgMjU2LCAyNTUxMywgMjU2LCAxNDg5NCwgMjU2LCAyNTcwNSwgMjU2LCAyNTcyNiwgCisgICAgMjU2LCAyNTc1NywgMjU2LCAyNTcxOSwgMjU2LCAxNDk1NiwgMjU2LCAyNTkzNSwgMjU2LCAyNTk2NCwgMjU2LCAxNDMzNzAsIAorICAgIDI1NiwgMjYwODMsIDI1NiwgMjYzNjAsIDI1NiwgMjYxODUsIDI1NiwgMTUxMjksIDI1NiwgMjYyNTcsIDI1NiwgMTUxMTIsIAorICAgIDI1NiwgMTUwNzYsIDI1NiwgMjA4ODIsIDI1NiwgMjA4ODUsIDI1NiwgMjYzNjgsIDI1NiwgMjYyNjgsIDI1NiwgMzI5NDEsIAorICAgIDI1NiwgMTczNjksIDI1NiwgMjYzOTEsIDI1NiwgMjYzOTUsIDI1NiwgMjY0MDEsIDI1NiwgMjY0NjIsIDI1NiwgMjY0NTEsIAorICAgIDI1NiwgMTQ0MzIzLCAyNTYsIDE1MTc3LCAyNTYsIDI2NjE4LCAyNTYsIDI2NTAxLCAyNTYsIDI2NzA2LCAyNTYsIDI2NzU3LCAKKyAgICAyNTYsIDE0NDQ5MywgMjU2LCAyNjc2NiwgMjU2LCAyNjY1NSwgMjU2LCAyNjkwMCwgMjU2LCAxNTI2MSwgMjU2LCAyNjk0NiwgCisgICAgMjU2LCAyNzA0MywgMjU2LCAyNzExNCwgMjU2LCAyNzMwNCwgMjU2LCAxNDUwNTksIDI1NiwgMjczNTUsIDI1NiwgMTUzODQsIAorICAgIDI1NiwgMjc0MjUsIDI1NiwgMTQ1NTc1LCAyNTYsIDI3NDc2LCAyNTYsIDE1NDM4LCAyNTYsIDI3NTA2LCAyNTYsIDI3NTUxLCAKKyAgICAyNTYsIDI3NTc4LCAyNTYsIDI3NTc5LCAyNTYsIDE0NjA2MSwgMjU2LCAxMzg1MDcsIDI1NiwgMTQ2MTcwLCAyNTYsIAorICAgIDI3NzI2LCAyNTYsIDE0NjYyMCwgMjU2LCAyNzgzOSwgMjU2LCAyNzg1MywgMjU2LCAyNzc1MSwgMjU2LCAyNzkyNiwgMjU2LCAKKyAgICAyNzk2NiwgMjU2LCAyODAyMywgMjU2LCAyNzk2OSwgMjU2LCAyODAwOSwgMjU2LCAyODAyNCwgMjU2LCAyODAzNywgMjU2LCAKKyAgICAxNDY3MTgsIDI1NiwgMjc5NTYsIDI1NiwgMjgyMDcsIDI1NiwgMjgyNzAsIDI1NiwgMTU2NjcsIDI1NiwgMjgzNjMsIDI1NiwgCisgICAgMjgzNTksIDI1NiwgMTQ3MTUzLCAyNTYsIDI4MTUzLCAyNTYsIDI4NTI2LCAyNTYsIDE0NzI5NCwgMjU2LCAxNDczNDIsIAorICAgIDI1NiwgMjg2MTQsIDI1NiwgMjg3MjksIDI1NiwgMjg3MDIsIDI1NiwgMjg2OTksIDI1NiwgMTU3NjYsIDI1NiwgMjg3NDYsIAorICAgIDI1NiwgMjg3OTcsIDI1NiwgMjg3OTEsIDI1NiwgMjg4NDUsIDI1NiwgMTMyMzg5LCAyNTYsIDI4OTk3LCAyNTYsIDE0ODA2NywgCisgICAgMjU2LCAyOTA4NCwgMjU2LCAxNDgzOTUsIDI1NiwgMjkyMjQsIDI1NiwgMjkyMzcsIDI1NiwgMjkyNjQsIDI1NiwgMTQ5MDAwLCAKKyAgICAyNTYsIDI5MzEyLCAyNTYsIDI5MzMzLCAyNTYsIDE0OTMwMSwgMjU2LCAxNDk1MjQsIDI1NiwgMjk1NjIsIDI1NiwgMjk1NzksIAorICAgIDI1NiwgMTYwNDQsIDI1NiwgMjk2MDUsIDI1NiwgMTYwNTYsIDI1NiwgMTYwNTYsIDI1NiwgMjk3NjcsIDI1NiwgMjk3ODgsIAorICAgIDI1NiwgMjk4MDksIDI1NiwgMjk4MjksIDI1NiwgMjk4OTgsIDI1NiwgMTYxNTUsIDI1NiwgMjk5ODgsIDI1NiwgMTUwNTgyLCAKKyAgICAyNTYsIDMwMDE0LCAyNTYsIDE1MDY3NCwgMjU2LCAzMDA2NCwgMjU2LCAxMzk2NzksIDI1NiwgMzAyMjQsIDI1NiwgCisgICAgMTUxNDU3LCAyNTYsIDE1MTQ4MCwgMjU2LCAxNTE2MjAsIDI1NiwgMTYzODAsIDI1NiwgMTYzOTIsIDI1NiwgMzA0NTIsIAorICAgIDI1NiwgMTUxNzk1LCAyNTYsIDE1MTc5NCwgMjU2LCAxNTE4MzMsIDI1NiwgMTUxODU5LCAyNTYsIDMwNDk0LCAyNTYsIAorICAgIDMwNDk1LCAyNTYsIDMwNDk1LCAyNTYsIDMwNTM4LCAyNTYsIDE2NDQxLCAyNTYsIDMwNjAzLCAyNTYsIDE2NDU0LCAyNTYsIAorICAgIDE2NTM0LCAyNTYsIDE1MjYwNSwgMjU2LCAzMDc5OCwgMjU2LCAzMDg2MCwgMjU2LCAzMDkyNCwgMjU2LCAxNjYxMSwgMjU2LCAKKyAgICAxNTMxMjYsIDI1NiwgMzEwNjIsIDI1NiwgMTUzMjQyLCAyNTYsIDE1MzI4NSwgMjU2LCAzMTExOSwgMjU2LCAzMTIxMSwgCisgICAgMjU2LCAxNjY4NywgMjU2LCAzMTI5NiwgMjU2LCAzMTMwNiwgMjU2LCAzMTMxMSwgMjU2LCAxNTM5ODAsIDI1NiwgMTU0Mjc5LCAKKyAgICAyNTYsIDE1NDI3OSwgMjU2LCAzMTQ3MCwgMjU2LCAxNjg5OCwgMjU2LCAxNTQ1MzksIDI1NiwgMzE2ODYsIDI1NiwgMzE2ODksIAorICAgIDI1NiwgMTY5MzUsIDI1NiwgMTU0NzUyLCAyNTYsIDMxOTU0LCAyNTYsIDE3MDU2LCAyNTYsIDMxOTc2LCAyNTYsIDMxOTcxLCAKKyAgICAyNTYsIDMyMDAwLCAyNTYsIDE1NTUyNiwgMjU2LCAzMjA5OSwgMjU2LCAxNzE1MywgMjU2LCAzMjE5OSwgMjU2LCAzMjI1OCwgCisgICAgMjU2LCAzMjMyNSwgMjU2LCAxNzIwNCwgMjU2LCAxNTYyMDAsIDI1NiwgMTU2MjMxLCAyNTYsIDE3MjQxLCAyNTYsIAorICAgIDE1NjM3NywgMjU2LCAzMjYzNCwgMjU2LCAxNTY0NzgsIDI1NiwgMzI2NjEsIDI1NiwgMzI3NjIsIDI1NiwgMzI3NzMsIDI1NiwgCisgICAgMTU2ODkwLCAyNTYsIDE1Njk2MywgMjU2LCAzMjg2NCwgMjU2LCAxNTcwOTYsIDI1NiwgMzI4ODAsIDI1NiwgMTQ0MjIzLCAKKyAgICAyNTYsIDE3MzY1LCAyNTYsIDMyOTQ2LCAyNTYsIDMzMDI3LCAyNTYsIDE3NDE5LCAyNTYsIDMzMDg2LCAyNTYsIDIzMjIxLCAKKyAgICAyNTYsIDE1NzYwNywgMjU2LCAxNTc2MjEsIDI1NiwgMTQ0Mjc1LCAyNTYsIDE0NDI4NCwgMjU2LCAzMzI4MSwgMjU2LCAKKyAgICAzMzI4NCwgMjU2LCAzNjc2NiwgMjU2LCAxNzUxNSwgMjU2LCAzMzQyNSwgMjU2LCAzMzQxOSwgMjU2LCAzMzQzNywgMjU2LCAKKyAgICAyMTE3MSwgMjU2LCAzMzQ1NywgMjU2LCAzMzQ1OSwgMjU2LCAzMzQ2OSwgMjU2LCAzMzUxMCwgMjU2LCAxNTg1MjQsIDI1NiwgCisgICAgMzM1MDksIDI1NiwgMzM1NjUsIDI1NiwgMzM2MzUsIDI1NiwgMzM3MDksIDI1NiwgMzM1NzEsIDI1NiwgMzM3MjUsIDI1NiwgCisgICAgMzM3NjcsIDI1NiwgMzM4NzksIDI1NiwgMzM2MTksIDI1NiwgMzM3MzgsIDI1NiwgMzM3NDAsIDI1NiwgMzM3NTYsIDI1NiwgCisgICAgMTU4Nzc0LCAyNTYsIDE1OTA4MywgMjU2LCAxNTg5MzMsIDI1NiwgMTc3MDcsIDI1NiwgMzQwMzMsIDI1NiwgMzQwMzUsIAorICAgIDI1NiwgMzQwNzAsIDI1NiwgMTYwNzE0LCAyNTYsIDM0MTQ4LCAyNTYsIDE1OTUzMiwgMjU2LCAxNzc1NywgMjU2LCAxNzc2MSwgCisgICAgMjU2LCAxNTk2NjUsIDI1NiwgMTU5OTU0LCAyNTYsIDE3NzcxLCAyNTYsIDM0Mzg0LCAyNTYsIDM0Mzk2LCAyNTYsIDM0NDA3LCAKKyAgICAyNTYsIDM0NDA5LCAyNTYsIDM0NDczLCAyNTYsIDM0NDQwLCAyNTYsIDM0NTc0LCAyNTYsIDM0NTMwLCAyNTYsIDM0NjgxLCAKKyAgICAyNTYsIDM0NjAwLCAyNTYsIDM0NjY3LCAyNTYsIDM0Njk0LCAyNTYsIDE3ODc5LCAyNTYsIDM0Nzg1LCAyNTYsIDM0ODE3LCAKKyAgICAyNTYsIDE3OTEzLCAyNTYsIDM0OTEyLCAyNTYsIDM0OTE1LCAyNTYsIDE2MTM4MywgMjU2LCAzNTAzMSwgMjU2LCAzNTAzOCwgCisgICAgMjU2LCAxNzk3MywgMjU2LCAzNTA2NiwgMjU2LCAxMzQ5OSwgMjU2LCAxNjE5NjYsIDI1NiwgMTYyMTUwLCAyNTYsIDE4MTEwLCAKKyAgICAyNTYsIDE4MTE5LCAyNTYsIDM1NDg4LCAyNTYsIDM1NTY1LCAyNTYsIDM1NzIyLCAyNTYsIDM1OTI1LCAyNTYsIDE2Mjk4NCwgCisgICAgMjU2LCAzNjAxMSwgMjU2LCAzNjAzMywgMjU2LCAzNjEyMywgMjU2LCAzNjIxNSwgMjU2LCAxNjM2MzEsIDI1NiwgMTMzMTI0LCAKKyAgICAyNTYsIDM2Mjk5LCAyNTYsIDM2Mjg0LCAyNTYsIDM2MzM2LCAyNTYsIDEzMzM0MiwgMjU2LCAzNjU2NCwgMjU2LCAzNjY2NCwgCisgICAgMjU2LCAxNjUzMzAsIDI1NiwgMTY1MzU3LCAyNTYsIDM3MDEyLCAyNTYsIDM3MTA1LCAyNTYsIDM3MTM3LCAyNTYsIAorICAgIDE2NTY3OCwgMjU2LCAzNzE0NywgMjU2LCAzNzQzMiwgMjU2LCAzNzU5MSwgMjU2LCAzNzU5MiwgMjU2LCAzNzUwMCwgMjU2LCAKKyAgICAzNzg4MSwgMjU2LCAzNzkwOSwgMjU2LCAxNjY5MDYsIDI1NiwgMzgyODMsIDI1NiwgMTg4MzcsIDI1NiwgMzgzMjcsIDI1NiwgCisgICAgMTY3Mjg3LCAyNTYsIDE4OTE4LCAyNTYsIDM4NTk1LCAyNTYsIDIzOTg2LCAyNTYsIDM4NjkxLCAyNTYsIDE2ODI2MSwgMjU2LCAKKyAgICAxNjg0NzQsIDI1NiwgMTkwNTQsIDI1NiwgMTkwNjIsIDI1NiwgMzg4ODAsIDI1NiwgMTY4OTcwLCAyNTYsIDE5MTIyLCAyNTYsIAorICAgIDE2OTExMCwgMjU2LCAzODkyMywgMjU2LCAzODkyMywgMjU2LCAzODk1MywgMjU2LCAxNjkzOTgsIDI1NiwgMzkxMzgsIDI1NiwgCisgICAgMTkyNTEsIDI1NiwgMzkyMDksIDI1NiwgMzkzMzUsIDI1NiwgMzkzNjIsIDI1NiwgMzk0MjIsIDI1NiwgMTk0MDYsIDI1NiwgCisgICAgMTcwODAwLCAyNTYsIDM5Njk4LCAyNTYsIDQwMDAwLCAyNTYsIDQwMTg5LCAyNTYsIDE5NjYyLCAyNTYsIDE5NjkzLCAyNTYsIAorICAgIDQwMjk1LCAyNTYsIDE3MjIzOCwgMjU2LCAxOTcwNCwgMjU2LCAxNzIyOTMsIDI1NiwgMTcyNTU4LCAyNTYsIDE3MjY4OSwgCisgICAgMjU2LCA0MDYzNSwgMjU2LCAxOTc5OCwgMjU2LCA0MDY5NywgMjU2LCA0MDcwMiwgMjU2LCA0MDcwOSwgMjU2LCA0MDcxOSwgCisgICAgMjU2LCA0MDcyNiwgMjU2LCA0MDc2MywgMjU2LCAxNzM1NjgsIAogfTsKIAogLyogaW5kZXggdGFibGVzIGZvciB0aGUgZGVjb21wb3NpdGlvbiBkYXRhICovCi0jZGVmaW5lIERFQ09NUF9TSElGVCA4CisjZGVmaW5lIERFQ09NUF9TSElGVCA3CiBzdGF0aWMgdW5zaWduZWQgY2hhciBkZWNvbXBfaW5kZXgxW10gPSB7Ci0gICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgMTYsIDcsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgNywgNywgNywgNywgNywgMjUsIAotICAgIDcsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgMzQsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIAotICAgIDQxLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA0MiwgNDMsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDQ0LCA3LCA3LCA0NSwgCi0gICAgNDYsIDQ3LCA0OCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNDksIDcsIDcsIDUwLCA1MSwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNTIsIDUzLCA1NCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMCwgMTAsIDExLCAxMiwgMCwgMCwgMCwgMCwgMTMsIDE0LCAxNSwgMCwgCisgICAgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgsIDAsIDAsIDAsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIAorICAgIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAwLCA0MiwgNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCAKKyAgICA0NSwgMCwgMCwgNDYsIDAsIDQ3LCAwLCAwLCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5LCA2MCwgNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDYyLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIAorICAgIDc0LCA3NSwgNzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3LCA3OCwgMCwgMCwgMCwgNzksIDAsIDAsIDgwLCAwLCAKKyAgICA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDgzLCAwLCAwLCAwLCAwLCA4NCwgODUsIAorICAgIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDkyLCA5MywgMCwgMCwgMCwgMCwgOTQsIDk1LCA5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlY29tcF9pbmRleDJbXSA9IHsKQEAgLTM5NzgsMzggKzQ1MDIsMjIgQEAKICAgICAwLCAwLCAwLCAwLCAxMDY2LCAxMDY5LCAxMDcyLCAxMDc1LCAwLCAwLCAxMDc4LCAxMDgxLCAwLCAwLCAxMDg0LCAxMDg3LCAKICAgICAxMDkwLCAxMDkzLCAxMDk2LCAxMDk5LCAwLCAwLCAxMTAyLCAxMTA1LCAxMTA4LCAxMTExLCAxMTE0LCAxMTE3LCAwLCAwLCAKICAgICAxMTIwLCAxMTIzLCAxMTI2LCAxMTI5LCAxMTMyLCAxMTM1LCAxMTM4LCAxMTQxLCAxMTQ0LCAxMTQ3LCAxMTUwLCAxMTUzLCAKLSAgICAwLCAwLCAxMTU2LCAxMTU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTY1LCAxMTY4LCAxMTcxLCAxMTc0LCAKLSAgICAxMTc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTgwLCAxMTgzLCAxMTg2LCAxMTg5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkyLCAwLCAxMTk1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMTU2LCAxMTU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTYyLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTY1LCAxMTY4LCAxMTcxLCAxMTc0LCAxMTc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMTgwLCAxMTgzLCAxMTg2LCAxMTg5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkyLCAwLCAxMTk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMTk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjAxLCAwLCAwLCAwLCAKQEAgLTQwMzEsMTkxICs0NTM5LDE3NSBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEyNjcsIDAsIDAsIDEyNzAsIDEyNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyNzYsIDEyNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODUsIDEyODgsIDEyOTEsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNjcsIDAsIDAsIDEyNzAsIDEyNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzYsIDEyNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODIsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyODUsIDEyODgsIDEyOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEyOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTcsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDAsIDEzMDMsIDAsIAotICAgIDEzMDYsIDEzMDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTIsIDEzMTUsIDEzMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEyOTcsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDAsIDEzMDMsIDAsIDEzMDYsIDEzMDksIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMjEsIDAsIDEzMjQsIDEzMjcsIDEzMzAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEzMTIsIDEzMTUsIDEzMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMzYsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMzksIDEzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzMjEsIDAsIDEzMjQsIDEzMjcsIDEzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEzMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzMzksIDEzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEzNTAsIDAsIDAsIDAsIDAsIDEzNTMsIDAsIDAsIDAsIDAsIDEzNTYsIDAsIDAsIDAsIDAsIDEzNTksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNjUsIDAsIAorICAgIDEzNjgsIDEzNzEsIDEzNzQsIDEzNzcsIDEzODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODMsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEzODksIDAsIDAsIDAsIDAsIDEzOTIsIDAsIDAsIDAsIDAsIDEzOTUsIDAsIDAsIDAsIDAsIDEzOTgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MDQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MDcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MDksIDAsIDE0MTIsIDAsIDE0MTUsIDAsIDE0MTgsIDAsIDE0MjEsIDAsIDAsIAorICAgIDAsIDE0MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MjcsIDAsIDE0MzAsIAorICAgIDAsIDAsIDE0MzMsIDE0MzYsIDAsIDE0MzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NDIsIDE0NDQsIDE0NDYsIDAsIAorICAgIDE0NDgsIDE0NTAsIDE0NTIsIDE0NTQsIDE0NTYsIDE0NTgsIDE0NjAsIDE0NjIsIDE0NjQsIDE0NjYsIDE0NjgsIDAsIAorICAgIDE0NzAsIDE0NzIsIDE0NzQsIDE0NzYsIDE0NzgsIDE0ODAsIDE0ODIsIDE0ODQsIDE0ODYsIDE0ODgsIDE0OTAsIDE0OTIsIAorICAgIDE0OTQsIDE0OTYsIDE0OTgsIDE1MDAsIDE1MDIsIDE1MDQsIDAsIDE1MDYsIDE1MDgsIDE1MTAsIDE1MTIsIDE1MTQsIAorICAgIDE1MTYsIDE1MTgsIDE1MjAsIDE1MjIsIDE1MjQsIDE1MjYsIDE1MjgsIDE1MzAsIDE1MzIsIDE1MzQsIDE1MzYsIDE1MzgsIAorICAgIDE1NDAsIDE1NDIsIDE1NDQsIDE1NDYsIDE1NDgsIDE1NTAsIDE1NTIsIDE1NTQsIDE1NTYsIDE1NTgsIDE1NjAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEzNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTAsIDAsIDAsIDAsIDAsIDEzNTMsIDAsIDAsIDAsIDAsIAotICAgIDEzNTYsIDAsIDAsIDAsIDAsIDEzNTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNjIsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNjUsIDAsIDEzNjgsIDEzNzEsIDEzNzQsIDEzNzcsIDEzODAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEzODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODksIDAsIDAsIDAsIDAsIDEzOTIsIDAsIDAsIDAsIDAsIDEzOTUsIDAsIAotICAgIDAsIDAsIDAsIDEzOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MDEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE1NjQsIDE1NjYsIDE1NjgsIDE1NzAsIDE1NzIsIDE1NzQsIDE1NzYsIDE1NzgsIDE1ODAsIDE1ODIsIDE1ODQsIDE1ODYsIAorICAgIDE1ODgsIDE1OTAsIDE1OTIsIDE1OTQsIDE1OTYsIDE1OTgsIDE2MDAsIDE2MDIsIDE2MDQsIDE2MDYsIDE2MDgsIDE2MTAsIAorICAgIDE2MTIsIDE2MTQsIDE2MTYsIDE2MTgsIDE2MjAsIDE2MjIsIDE2MjQsIDE2MjYsIDE2MjgsIDE2MzAsIDE2MzIsIDE2MzQsIAorICAgIDE2MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MzgsIDE2NDEsIDE2NDQsIAorICAgIDE2NDcsIDE2NTAsIDE2NTMsIDE2NTYsIDE2NTksIDE2NjIsIDE2NjUsIDE2NjgsIDE2NzEsIDE2NzQsIDE2NzcsIDE2ODAsIAorICAgIDE2ODMsIDE2ODYsIDE2ODksIDE2OTIsIDE2OTUsIDE2OTgsIDE3MDEsIDE3MDQsIDE3MDcsIDE3MTAsIDE3MTMsIDE3MTYsIAorICAgIDE3MTksIDE3MjIsIDE3MjUsIDE3MjgsIDE3MzEsIDE3MzQsIDE3MzcsIDE3NDAsIDE3NDMsIDE3NDYsIDE3NDksIDE3NTIsIAorICAgIDE3NTUsIDE3NTgsIDE3NjEsIDE3NjQsIDE3NjcsIDE3NzAsIDE3NzMsIDE3NzYsIDE3NzksIDE3ODIsIDE3ODUsIDE3ODgsIAorICAgIDE3OTEsIDE3OTQsIDE3OTcsIDE4MDAsIDE4MDMsIDE4MDYsIDE4MDksIDE4MTIsIDE4MTUsIDE4MTgsIDE4MjEsIDE4MjQsIAorICAgIDE4MjcsIDE4MzAsIDE4MzMsIDE4MzYsIDE4MzksIDE4NDIsIDE4NDUsIDE4NDgsIDE4NTEsIDE4NTQsIDE4NTcsIDE4NjAsIAorICAgIDE4NjMsIDE4NjYsIDE4NjksIDE4NzIsIDE4NzUsIDE4NzgsIDE4ODEsIDE4ODQsIDE4ODcsIDE4OTAsIDE4OTMsIDE4OTYsIAorICAgIDE4OTksIDE5MDIsIDE5MDUsIDE5MDgsIDE5MTEsIDE5MTQsIDE5MTcsIDE5MjAsIDE5MjMsIDE5MjYsIDE5MjksIDE5MzIsIAorICAgIDE5MzUsIDE5MzgsIDE5NDEsIDE5NDQsIDE5NDcsIDE5NTAsIDE5NTMsIDE5NTYsIDE5NTksIDE5NjIsIDE5NjUsIDE5NjgsIAorICAgIDE5NzEsIDE5NzQsIDE5NzcsIDE5ODAsIDE5ODMsIDE5ODYsIDE5ODksIDE5OTIsIDE5OTUsIDE5OTgsIDIwMDEsIDIwMDQsIAorICAgIDIwMDcsIDIwMTAsIDIwMTMsIDIwMTYsIDIwMTksIDIwMjIsIDIwMjUsIDIwMjgsIDIwMzEsIDIwMzQsIDIwMzcsIDIwNDAsIAorICAgIDIwNDMsIDIwNDYsIDIwNDksIDIwNTIsIDIwNTUsIDIwNTgsIDIwNjEsIDIwNjQsIDIwNjcsIDIwNzAsIDIwNzMsIDIwNzYsIAorICAgIDIwNzksIDIwODIsIDIwODUsIDIwODgsIDIwOTEsIDIwOTQsIDIwOTcsIDIxMDAsIDIxMDMsIDAsIDAsIDAsIDAsIDIxMDYsIAorICAgIDIxMDksIDIxMTIsIDIxMTUsIDIxMTgsIDIxMjEsIDIxMjQsIDIxMjcsIDIxMzAsIDIxMzMsIDIxMzYsIDIxMzksIDIxNDIsIAorICAgIDIxNDUsIDIxNDgsIDIxNTEsIDIxNTQsIDIxNTcsIDIxNjAsIDIxNjMsIDIxNjYsIDIxNjksIDIxNzIsIDIxNzUsIDIxNzgsIAorICAgIDIxODEsIDIxODQsIDIxODcsIDIxOTAsIDIxOTMsIDIxOTYsIDIxOTksIDIyMDIsIDIyMDUsIDIyMDgsIDIyMTEsIDIyMTQsIAorICAgIDIyMTcsIDIyMjAsIDIyMjMsIDIyMjYsIDIyMjksIDIyMzIsIDIyMzUsIDIyMzgsIDIyNDEsIDIyNDQsIDIyNDcsIDIyNTAsIAorICAgIDIyNTMsIDIyNTYsIDIyNTksIDIyNjIsIDIyNjUsIDIyNjgsIDIyNzEsIDIyNzQsIDIyNzcsIDIyODAsIDIyODMsIDIyODYsIAorICAgIDIyODksIDIyOTIsIDIyOTUsIDIyOTgsIDIzMDEsIDIzMDQsIDIzMDcsIDIzMTAsIDIzMTMsIDIzMTYsIDIzMTksIDIzMjIsIAorICAgIDIzMjUsIDIzMjgsIDIzMzEsIDIzMzQsIDIzMzcsIDIzNDAsIDIzNDMsIDIzNDYsIDIzNDksIDIzNTIsIDIzNTUsIDIzNTgsIAorICAgIDIzNjEsIDIzNjQsIDIzNjcsIDIzNzAsIDIzNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNzYsIDIzNzksIDIzODIsIDIzODUsIAorICAgIDIzODgsIDIzOTEsIDIzOTQsIDIzOTcsIDI0MDAsIDI0MDMsIDI0MDYsIDI0MDksIDI0MTIsIDI0MTUsIDI0MTgsIDI0MjEsIAorICAgIDI0MjQsIDI0MjcsIDI0MzAsIDI0MzMsIDI0MzYsIDI0MzksIDAsIDAsIDI0NDIsIDI0NDUsIDI0NDgsIDI0NTEsIDI0NTQsIAorICAgIDI0NTcsIDAsIDAsIDI0NjAsIDI0NjMsIDI0NjYsIDI0NjksIDI0NzIsIDI0NzUsIDI0NzgsIDI0ODEsIDI0ODQsIDI0ODcsIAorICAgIDI0OTAsIDI0OTMsIDI0OTYsIDI0OTksIDI1MDIsIDI1MDUsIDI1MDgsIDI1MTEsIDI1MTQsIDI1MTcsIDI1MjAsIDI1MjMsIAorICAgIDI1MjYsIDI1MjksIDI1MzIsIDI1MzUsIDI1MzgsIDI1NDEsIDI1NDQsIDI1NDcsIDI1NTAsIDI1NTMsIDI1NTYsIDI1NTksIAorICAgIDI1NjIsIDI1NjUsIDI1NjgsIDI1NzEsIDAsIDAsIDI1NzQsIDI1NzcsIDI1ODAsIDI1ODMsIDI1ODYsIDI1ODksIDAsIDAsIAorICAgIDI1OTIsIDI1OTUsIDI1OTgsIDI2MDEsIDI2MDQsIDI2MDcsIDI2MTAsIDI2MTMsIDAsIDI2MTYsIDAsIDI2MTksIDAsIAorICAgIDI2MjIsIDAsIDI2MjUsIDI2MjgsIDI2MzEsIDI2MzQsIDI2MzcsIDI2NDAsIDI2NDMsIDI2NDYsIDI2NDksIDI2NTIsIAorICAgIDI2NTUsIDI2NTgsIDI2NjEsIDI2NjQsIDI2NjcsIDI2NzAsIDI2NzMsIDI2NzYsIDI2NzksIDI2ODEsIDI2ODQsIDI2ODYsIAorICAgIDI2ODksIDI2OTEsIDI2OTQsIDI2OTYsIDI2OTksIDI3MDEsIDI3MDQsIDI3MDYsIDI3MDksIDAsIDAsIDI3MTEsIDI3MTQsIAorICAgIDI3MTcsIDI3MjAsIDI3MjMsIDI3MjYsIDI3MjksIDI3MzIsIDI3MzUsIDI3MzgsIDI3NDEsIDI3NDQsIDI3NDcsIDI3NTAsIAorICAgIDI3NTMsIDI3NTYsIDI3NTksIDI3NjIsIDI3NjUsIDI3NjgsIDI3NzEsIDI3NzQsIDI3NzcsIDI3ODAsIDI3ODMsIDI3ODYsIAorICAgIDI3ODksIDI3OTIsIDI3OTUsIDI3OTgsIDI4MDEsIDI4MDQsIDI4MDcsIDI4MTAsIDI4MTMsIDI4MTYsIDI4MTksIDI4MjIsIAorICAgIDI4MjUsIDI4MjgsIDI4MzEsIDI4MzQsIDI4MzcsIDI4NDAsIDI4NDMsIDI4NDYsIDI4NDksIDI4NTIsIDI4NTUsIDI4NTgsIAorICAgIDI4NjEsIDI4NjQsIDI4NjcsIDAsIDI4NzAsIDI4NzMsIDI4NzYsIDI4NzksIDI4ODIsIDI4ODUsIDI4ODcsIDI4OTAsIAorICAgIDI4OTMsIDI4OTUsIDI4OTgsIDI5MDEsIDI5MDQsIDI5MDcsIDI5MTAsIDAsIDI5MTMsIDI5MTYsIDI5MTksIDI5MjIsIAorICAgIDI5MjQsIDI5MjcsIDI5MjksIDI5MzIsIDI5MzUsIDI5MzgsIDI5NDEsIDI5NDQsIDI5NDcsIDI5NTAsIDAsIDAsIDI5NTIsIAorICAgIDI5NTUsIDI5NTgsIDI5NjEsIDI5NjQsIDI5NjcsIDAsIDI5NjksIDI5NzIsIDI5NzUsIDI5NzgsIDI5ODEsIDI5ODQsIAorICAgIDI5ODcsIDI5ODksIDI5OTIsIDI5OTUsIDI5OTgsIDMwMDEsIDMwMDQsIDMwMDcsIDMwMTAsIDMwMTIsIDMwMTUsIDMwMTgsIAorICAgIDMwMjAsIDAsIDAsIDMwMjIsIDMwMjUsIDMwMjgsIDAsIDMwMzEsIDMwMzQsIDMwMzcsIDMwNDAsIDMwNDIsIDMwNDUsIAorICAgIDMwNDcsIDMwNTAsIDMwNTIsIDAsIDMwNTUsIDMwNTcsIDMwNTksIDMwNjEsIDMwNjMsIDMwNjUsIDMwNjcsIDMwNjksIAorICAgIDMwNzEsIDMwNzMsIDMwNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDMwNzcsIDAsIDAsIDAsIDAsIDAsIDMwNzksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwODIsIDMwODQsIDMwODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDMwOTEsIDAsIDAsIDAsIDMwOTMsIDMwOTYsIDAsIDMxMDAsIDMxMDMsIDAsIDAsIDAsIDAsIDMxMDcsIDAsIDMxMTAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMTMsIDMxMTYsIDMxMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDMxMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDMxMjksIDMxMzEsIDAsIDAsIDMxMzMsIDMxMzUsIDMxMzcsIDMxMzksIDMxNDEsIDMxNDMsIAorICAgIDMxNDUsIDMxNDcsIDMxNDksIDMxNTEsIDMxNTMsIDMxNTUsIDMxNTcsIDMxNTksIDMxNjEsIDMxNjMsIDMxNjUsIDMxNjcsIAorICAgIDMxNjksIDMxNzEsIDMxNzMsIDMxNzUsIDMxNzcsIDMxNzksIDMxODEsIDMxODMsIDMxODUsIDAsIDMxODcsIDMxODksIAorICAgIDMxOTEsIDMxOTMsIDMxOTUsIDMxOTcsIDMxOTksIDMyMDEsIDMyMDMsIDMyMDUsIDMyMDcsIDMyMDksIDMyMTEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDMyMTYsIDMyMjAsIDMyMjQsIDMyMjYsIDAsIDMyMjksIDMyMzMsIDMyMzcsIDAsIDMyMzksIDMyNDIsIDMyNDQsIAorICAgIDMyNDYsIDMyNDgsIDMyNTAsIDMyNTIsIDMyNTQsIDMyNTYsIDMyNTgsIDMyNjAsIDAsIDMyNjIsIDMyNjQsIDAsIDAsIAorICAgIDMyNjcsIDMyNjksIDMyNzEsIDMyNzMsIDMyNzUsIDAsIDAsIDMyNzcsIDMyODAsIDMyODQsIDAsIDMyODcsIDAsIDMyODksIAorICAgIDAsIDMyOTEsIDAsIDMyOTMsIDMyOTUsIDMyOTcsIDMyOTksIDAsIDMzMDEsIDMzMDMsIDMzMDUsIDAsIDMzMDcsIDMzMDksIAorICAgIDMzMTEsIDMzMTMsIDMzMTUsIDMzMTcsIDMzMTksIDAsIDMzMjEsIDMzMjUsIDMzMjcsIDMzMjksIDMzMzEsIDMzMzMsIDAsIAorICAgIDAsIDAsIDAsIDMzMzUsIDMzMzcsIDMzMzksIDMzNDEsIDMzNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDMzNDUsIDMzNDksIAorICAgIDMzNTMsIDMzNTgsIDMzNjIsIDMzNjYsIDMzNzAsIDMzNzQsIDMzNzgsIDMzODIsIDMzODYsIDMzOTAsIDMzOTQsIDMzOTgsIAorICAgIDM0MDIsIDM0MDYsIDM0MDksIDM0MTEsIDM0MTQsIDM0MTgsIDM0MjEsIDM0MjMsIDM0MjYsIDM0MzAsIDM0MzUsIDM0MzgsIAorICAgIDM0NDAsIDM0NDMsIDM0NDcsIDM0NDksIDM0NTEsIDM0NTMsIDM0NTUsIDM0NTcsIDM0NjAsIDM0NjQsIDM0NjcsIDM0NjksIAorICAgIDM0NzIsIDM0NzYsIDM0ODEsIDM0ODQsIDM0ODYsIDM0ODksIDM0OTMsIDM0OTUsIDM0OTcsIDM0OTksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDM1MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM1MDUsIDM1MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MTEsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM1MTQsIDM1MTcsIDM1MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MjMsIDAsIDAsIDAsIDAsIDM1MjYsIAorICAgIDAsIDAsIDM1MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDM1MzIsIDAsIDM1MzUsIDAsIDAsIDAsIDAsIDAsIDM1MzgsIDM1NDEsIDAsIDM1NDUsIDM1NDgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NTIsIDAsIDAsIDM1NTUsIDAsIDAsIDM1NTgsIAorICAgIDAsIDM1NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDM1NjQsIDAsIDM1NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NzAsIDM1NzMsIDM1NzYsIDM1NzksIAorICAgIDM1ODIsIDAsIDAsIDM1ODUsIDM1ODgsIDAsIDAsIDM1OTEsIDM1OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDM1OTcsIDM2MDAsIAorICAgIDAsIDAsIDM2MDMsIDM2MDYsIDAsIDAsIDM2MDksIDM2MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MTUsIAorICAgIDM2MTgsIDM2MjEsIDM2MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDM2MzAsIDM2MzMsIDM2MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MzksIDM2NDIsIAorICAgIDM2NDUsIDM2NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE0MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MDksIDAsIDE0MTIsIDAsIAotICAgIDE0MTUsIDAsIDE0MTgsIDAsIDE0MjEsIDAsIDAsIDAsIDE0MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE0MjcsIDAsIDE0MzAsIDAsIDAsIDE0MzMsIDE0MzYsIDAsIDE0MzksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NDIsIDE0NDQsIDE0NDYsIDAsIDE0NDgsIDE0NTAsIDE0NTIsIAotICAgIDE0NTQsIDE0NTYsIDE0NTgsIDE0NjAsIDE0NjIsIDE0NjQsIDE0NjYsIDE0NjgsIDAsIDE0NzAsIDE0NzIsIDE0NzQsIAotICAgIDE0NzYsIDE0NzgsIDE0ODAsIDE0ODIsIDE0ODQsIDE0ODYsIDE0ODgsIDE0OTAsIDE0OTIsIDE0OTQsIDE0OTYsIDE0OTgsIAotICAgIDE1MDAsIDE1MDIsIDE1MDQsIDAsIDE1MDYsIDE1MDgsIDE1MTAsIDE1MTIsIDE1MTQsIDE1MTYsIDE1MTgsIDE1MjAsIAotICAgIDE1MjIsIDE1MjQsIDE1MjYsIDE1MjgsIDE1MzAsIDE1MzIsIDE1MzQsIDE1MzYsIDE1MzgsIDE1NDAsIDE1NDIsIDE1NDQsIAotICAgIDE1NDYsIDE1NDgsIDE1NTAsIDE1NTIsIDE1NTQsIDE1NTYsIDE1NTgsIDE1NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE1NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NjQsIDE1NjYsIDE1NjgsIAotICAgIDE1NzAsIDE1NzIsIDE1NzQsIDE1NzYsIDE1NzgsIDE1ODAsIDE1ODIsIDE1ODQsIDE1ODYsIDE1ODgsIDE1OTAsIDE1OTIsIAotICAgIDE1OTQsIDE1OTYsIDE1OTgsIDE2MDAsIDE2MDIsIDE2MDQsIDE2MDYsIDE2MDgsIDE2MTAsIDE2MTIsIDE2MTQsIDE2MTYsIAotICAgIDE2MTgsIDE2MjAsIDE2MjIsIDE2MjQsIDE2MjYsIDE2MjgsIDE2MzAsIDE2MzIsIDE2MzQsIDE2MzYsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MzgsIDE2NDEsIDE2NDQsIDE2NDcsIDE2NTAsIDE2NTMsIAotICAgIDE2NTYsIDE2NTksIDE2NjIsIDE2NjUsIDE2NjgsIDE2NzEsIDE2NzQsIDE2NzcsIDE2ODAsIDE2ODMsIDE2ODYsIDE2ODksIAotICAgIDE2OTIsIDE2OTUsIDE2OTgsIDE3MDEsIDE3MDQsIDE3MDcsIDE3MTAsIDE3MTMsIDE3MTYsIDE3MTksIDE3MjIsIDE3MjUsIAotICAgIDE3MjgsIDE3MzEsIDE3MzQsIDE3MzcsIDE3NDAsIDE3NDMsIDE3NDYsIDE3NDksIDE3NTIsIDE3NTUsIDE3NTgsIDE3NjEsIAotICAgIDE3NjQsIDE3NjcsIDE3NzAsIDE3NzMsIDE3NzYsIDE3NzksIDE3ODIsIDE3ODUsIDE3ODgsIDE3OTEsIDE3OTQsIDE3OTcsIAotICAgIDE4MDAsIDE4MDMsIDE4MDYsIDE4MDksIDE4MTIsIDE4MTUsIDE4MTgsIDE4MjEsIDE4MjQsIDE4MjcsIDE4MzAsIDE4MzMsIAotICAgIDE4MzYsIDE4MzksIDE4NDIsIDE4NDUsIDE4NDgsIDE4NTEsIDE4NTQsIDE4NTcsIDE4NjAsIDE4NjMsIDE4NjYsIDE4NjksIAotICAgIDE4NzIsIDE4NzUsIDE4NzgsIDE4ODEsIDE4ODQsIDE4ODcsIDE4OTAsIDE4OTMsIDE4OTYsIDE4OTksIDE5MDIsIDE5MDUsIAotICAgIDE5MDgsIDE5MTEsIDE5MTQsIDE5MTcsIDE5MjAsIDE5MjMsIDE5MjYsIDE5MjksIDE5MzIsIDE5MzUsIDE5MzgsIDE5NDEsIAotICAgIDE5NDQsIDE5NDcsIDE5NTAsIDE5NTMsIDE5NTYsIDE5NTksIDE5NjIsIDE5NjUsIDE5NjgsIDE5NzEsIDE5NzQsIDE5NzcsIAotICAgIDE5ODAsIDE5ODMsIDE5ODYsIDE5ODksIDE5OTIsIDE5OTUsIDE5OTgsIDIwMDEsIDIwMDQsIDIwMDcsIDIwMTAsIDIwMTMsIAotICAgIDIwMTYsIDIwMTksIDIwMjIsIDIwMjUsIDIwMjgsIDIwMzEsIDIwMzQsIDIwMzcsIDIwNDAsIDIwNDMsIDIwNDYsIDIwNDksIAotICAgIDIwNTIsIDIwNTUsIDIwNTgsIDIwNjEsIDIwNjQsIDIwNjcsIDIwNzAsIDIwNzMsIDIwNzYsIDIwNzksIDIwODIsIDIwODUsIAotICAgIDIwODgsIDIwOTEsIDIwOTQsIDIwOTcsIDIxMDAsIDIxMDMsIDAsIDAsIDAsIDAsIDIxMDYsIDIxMDksIDIxMTIsIDIxMTUsIAotICAgIDIxMTgsIDIxMjEsIDIxMjQsIDIxMjcsIDIxMzAsIDIxMzMsIDIxMzYsIDIxMzksIDIxNDIsIDIxNDUsIDIxNDgsIDIxNTEsIAotICAgIDIxNTQsIDIxNTcsIDIxNjAsIDIxNjMsIDIxNjYsIDIxNjksIDIxNzIsIDIxNzUsIDIxNzgsIDIxODEsIDIxODQsIDIxODcsIAotICAgIDIxOTAsIDIxOTMsIDIxOTYsIDIxOTksIDIyMDIsIDIyMDUsIDIyMDgsIDIyMTEsIDIyMTQsIDIyMTcsIDIyMjAsIDIyMjMsIAotICAgIDIyMjYsIDIyMjksIDIyMzIsIDIyMzUsIDIyMzgsIDIyNDEsIDIyNDQsIDIyNDcsIDIyNTAsIDIyNTMsIDIyNTYsIDIyNTksIAotICAgIDIyNjIsIDIyNjUsIDIyNjgsIDIyNzEsIDIyNzQsIDIyNzcsIDIyODAsIDIyODMsIDIyODYsIDIyODksIDIyOTIsIDIyOTUsIAotICAgIDIyOTgsIDIzMDEsIDIzMDQsIDIzMDcsIDIzMTAsIDIzMTMsIDIzMTYsIDIzMTksIDIzMjIsIDIzMjUsIDIzMjgsIDIzMzEsIAotICAgIDIzMzQsIDIzMzcsIDIzNDAsIDIzNDMsIDIzNDYsIDIzNDksIDIzNTIsIDIzNTUsIDIzNTgsIDIzNjEsIDIzNjQsIDIzNjcsIAotICAgIDIzNzAsIDIzNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNzYsIDIzNzksIDIzODIsIDIzODUsIDIzODgsIDIzOTEsIDIzOTQsIAotICAgIDIzOTcsIDI0MDAsIDI0MDMsIDI0MDYsIDI0MDksIDI0MTIsIDI0MTUsIDI0MTgsIDI0MjEsIDI0MjQsIDI0MjcsIDI0MzAsIAotICAgIDI0MzMsIDI0MzYsIDI0MzksIDAsIDAsIDI0NDIsIDI0NDUsIDI0NDgsIDI0NTEsIDI0NTQsIDI0NTcsIDAsIDAsIDI0NjAsIAotICAgIDI0NjMsIDI0NjYsIDI0NjksIDI0NzIsIDI0NzUsIDI0NzgsIDI0ODEsIDI0ODQsIDI0ODcsIDI0OTAsIDI0OTMsIDI0OTYsIAotICAgIDI0OTksIDI1MDIsIDI1MDUsIDI1MDgsIDI1MTEsIDI1MTQsIDI1MTcsIDI1MjAsIDI1MjMsIDI1MjYsIDI1MjksIDI1MzIsIAotICAgIDI1MzUsIDI1MzgsIDI1NDEsIDI1NDQsIDI1NDcsIDI1NTAsIDI1NTMsIDI1NTYsIDI1NTksIDI1NjIsIDI1NjUsIDI1NjgsIAotICAgIDI1NzEsIDAsIDAsIDI1NzQsIDI1NzcsIDI1ODAsIDI1ODMsIDI1ODYsIDI1ODksIDAsIDAsIDI1OTIsIDI1OTUsIDI1OTgsIAotICAgIDI2MDEsIDI2MDQsIDI2MDcsIDI2MTAsIDI2MTMsIDAsIDI2MTYsIDAsIDI2MTksIDAsIDI2MjIsIDAsIDI2MjUsIDI2MjgsIAotICAgIDI2MzEsIDI2MzQsIDI2MzcsIDI2NDAsIDI2NDMsIDI2NDYsIDI2NDksIDI2NTIsIDI2NTUsIDI2NTgsIDI2NjEsIDI2NjQsIAotICAgIDI2NjcsIDI2NzAsIDI2NzMsIDI2NzYsIDI2NzksIDI2ODEsIDI2ODQsIDI2ODYsIDI2ODksIDI2OTEsIDI2OTQsIDI2OTYsIAotICAgIDI2OTksIDI3MDEsIDI3MDQsIDI3MDYsIDI3MDksIDAsIDAsIDI3MTEsIDI3MTQsIDI3MTcsIDI3MjAsIDI3MjMsIDI3MjYsIAotICAgIDI3MjksIDI3MzIsIDI3MzUsIDI3MzgsIDI3NDEsIDI3NDQsIDI3NDcsIDI3NTAsIDI3NTMsIDI3NTYsIDI3NTksIDI3NjIsIAotICAgIDI3NjUsIDI3NjgsIDI3NzEsIDI3NzQsIDI3NzcsIDI3ODAsIDI3ODMsIDI3ODYsIDI3ODksIDI3OTIsIDI3OTUsIDI3OTgsIAotICAgIDI4MDEsIDI4MDQsIDI4MDcsIDI4MTAsIDI4MTMsIDI4MTYsIDI4MTksIDI4MjIsIDI4MjUsIDI4MjgsIDI4MzEsIDI4MzQsIAotICAgIDI4MzcsIDI4NDAsIDI4NDMsIDI4NDYsIDI4NDksIDI4NTIsIDI4NTUsIDI4NTgsIDI4NjEsIDI4NjQsIDI4NjcsIDAsIAotICAgIDI4NzAsIDI4NzMsIDI4NzYsIDI4NzksIDI4ODIsIDI4ODUsIDI4ODcsIDI4OTAsIDI4OTMsIDI4OTUsIDI4OTgsIDI5MDEsIAotICAgIDI5MDQsIDI5MDcsIDI5MTAsIDAsIDI5MTMsIDI5MTYsIDI5MTksIDI5MjIsIDI5MjQsIDI5MjcsIDI5MjksIDI5MzIsIAotICAgIDI5MzUsIDI5MzgsIDI5NDEsIDI5NDQsIDI5NDcsIDI5NTAsIDAsIDAsIDI5NTIsIDI5NTUsIDI5NTgsIDI5NjEsIDI5NjQsIAotICAgIDI5NjcsIDAsIDI5NjksIDI5NzIsIDI5NzUsIDI5NzgsIDI5ODEsIDI5ODQsIDI5ODcsIDI5ODksIDI5OTIsIDI5OTUsIAotICAgIDI5OTgsIDMwMDEsIDMwMDQsIDMwMDcsIDMwMTAsIDMwMTIsIDMwMTUsIDMwMTgsIDMwMjAsIDAsIDAsIDMwMjIsIDMwMjUsIAotICAgIDMwMjgsIDAsIDMwMzEsIDMwMzQsIDMwMzcsIDMwNDAsIDMwNDIsIDMwNDUsIDMwNDcsIDMwNTAsIDMwNTIsIDAsIDMwNTUsIAotICAgIDMwNTcsIDMwNTksIDMwNjEsIDMwNjMsIDMwNjUsIDMwNjcsIDMwNjksIDMwNzEsIDMwNzMsIDMwNzUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDMwNzcsIDAsIDAsIDAsIDAsIDAsIDMwNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDMwODIsIDMwODQsIDMwODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwOTEsIDAsIDAsIDAsIDMwOTMsIDMwOTYsIDAsIAotICAgIDMxMDAsIDMxMDMsIDAsIDAsIDAsIDAsIDMxMDcsIDAsIDMxMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMTMsIAotICAgIDMxMTYsIDMxMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMjIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDMxMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMjksIDMxMzEsIAotICAgIDAsIDAsIDMxMzMsIDMxMzUsIDMxMzcsIDMxMzksIDMxNDEsIDMxNDMsIDMxNDUsIDMxNDcsIDMxNDksIDMxNTEsIDMxNTMsIAotICAgIDMxNTUsIDMxNTcsIDMxNTksIDMxNjEsIDMxNjMsIDMxNjUsIDMxNjcsIDMxNjksIDMxNzEsIDMxNzMsIDMxNzUsIDMxNzcsIAotICAgIDMxNzksIDMxODEsIDMxODMsIDMxODUsIDAsIDMxODcsIDMxODksIDMxOTEsIDMxOTMsIDMxOTUsIDMxOTcsIDMxOTksIAotICAgIDMyMDEsIDMyMDMsIDMyMDUsIDMyMDcsIDMyMDksIDMyMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDMyMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMTYsIDMyMjAsIDMyMjQsIAotICAgIDMyMjYsIDAsIDMyMjksIDMyMzMsIDMyMzcsIDAsIDMyMzksIDMyNDIsIDMyNDQsIDMyNDYsIDMyNDgsIDMyNTAsIDMyNTIsIAotICAgIDMyNTQsIDMyNTYsIDMyNTgsIDMyNjAsIDAsIDMyNjIsIDMyNjQsIDAsIDAsIDMyNjcsIDMyNjksIDMyNzEsIDMyNzMsIAotICAgIDMyNzUsIDAsIDAsIDMyNzcsIDMyODAsIDMyODQsIDAsIDMyODcsIDAsIDMyODksIDAsIDMyOTEsIDAsIDMyOTMsIDMyOTUsIAotICAgIDMyOTcsIDMyOTksIDAsIDMzMDEsIDMzMDMsIDMzMDUsIDAsIDMzMDcsIDMzMDksIDMzMTEsIDMzMTMsIDMzMTUsIDMzMTcsIAotICAgIDMzMTksIDAsIDMzMjEsIDMzMjUsIDMzMjcsIDMzMjksIDMzMzEsIDMzMzMsIDAsIDAsIDAsIDAsIDMzMzUsIDMzMzcsIAotICAgIDMzMzksIDMzNDEsIDMzNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDMzNDUsIDMzNDksIDMzNTMsIDMzNTgsIDMzNjIsIDMzNjYsIAotICAgIDMzNzAsIDMzNzQsIDMzNzgsIDMzODIsIDMzODYsIDMzOTAsIDMzOTQsIDMzOTgsIDM0MDIsIDM0MDYsIDM0MDksIDM0MTEsIAotICAgIDM0MTQsIDM0MTgsIDM0MjEsIDM0MjMsIDM0MjYsIDM0MzAsIDM0MzUsIDM0MzgsIDM0NDAsIDM0NDMsIDM0NDcsIDM0NDksIAotICAgIDM0NTEsIDM0NTMsIDM0NTUsIDM0NTcsIDM0NjAsIDM0NjQsIDM0NjcsIDM0NjksIDM0NzIsIDM0NzYsIDM0ODEsIDM0ODQsIAotICAgIDM0ODYsIDM0ODksIDM0OTMsIDM0OTUsIDM0OTcsIDM0OTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MDEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MDUsIDM1MDgsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MTQsIAotICAgIDM1MTcsIDM1MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MjMsIDAsIDAsIDAsIDAsIDM1MjYsIDAsIDAsIDM1MjksIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MzIsIDAsIDM1MzUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDM1MzgsIDM1NDEsIDAsIDM1NDUsIDM1NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM1NTIsIDAsIDAsIDM1NTUsIDAsIDAsIDM1NTgsIDAsIDM1NjEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NjQsIDAsIDM1NjcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NzAsIDM1NzMsIDM1NzYsIDM1NzksIDM1ODIsIDAsIDAsIDM1ODUsIDM1ODgsIAotICAgIDAsIDAsIDM1OTEsIDM1OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDM1OTcsIDM2MDAsIDAsIDAsIDM2MDMsIDM2MDYsIDAsIDAsIAotICAgIDM2MDksIDM2MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MTUsIDM2MTgsIDM2MjEsIDM2MjQsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIAotICAgIDM2MzAsIDM2MzMsIDM2MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MzksIDM2NDIsIDM2NDUsIDM2NDgsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NTEsIDM2NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NTEsIDM2NTMsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNDI1NiwyMyArNDc0OCw3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDEwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEwMSwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEwMywgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC00MzcwLDE3MiArNDg0Niw3IEBACiAgICAgNjUzMCwgNjUzMywgNjUzNiwgNjUzOSwgNjU0MiwgNjU0NSwgNjU0OCwgNjU1MSwgNjU1NCwgNjU1OCwgNjU2MiwgNjU2NiwgCiAgICAgNjU3MCwgNjU3NCwgNjU3OCwgNjU4MiwgNjU4NiwgNjU5MCwgNjU5NCwgNjU5OCwgNjYwMiwgNjYwNiwgNjYxMCwgNjYxNCwgCiAgICAgNjYxOCwgNjYyMiwgNjYyNiwgNjYzMCwgNjYzNCwgNjYzOCwgNjY0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNjY0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjY0OCwgNjY1MCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY1MiwgNjY1NCwgNjY1NiwgNjY1OCwgNjY2MCwgNjY2MiwgNjY2NCwgCi0gICAgNjY2NiwgNjY2OCwgNjY3MCwgNjY3MiwgNjY3NCwgNjY3NiwgNjY3OCwgNjY4MCwgNjY4MiwgNjY4NCwgNjY4NiwgNjY4OCwgCi0gICAgNjY5MCwgNjY5MiwgNjY5NCwgNjY5NiwgNjY5OCwgNjcwMCwgNjcwMiwgNjcwNCwgNjcwNiwgNjcwOCwgNjcxMCwgNjcxMiwgCi0gICAgNjcxNCwgNjcxNiwgNjcxOCwgNjcyMCwgNjcyMiwgNjcyNCwgNjcyNiwgNjcyOCwgNjczMCwgNjczMiwgNjczNCwgNjczNiwgCi0gICAgNjczOCwgNjc0MCwgNjc0MiwgNjc0NCwgNjc0NiwgNjc0OCwgNjc1MCwgNjc1MiwgNjc1NCwgNjc1NiwgNjc1OCwgNjc2MCwgCi0gICAgNjc2MiwgNjc2NCwgNjc2NiwgNjc2OCwgNjc3MCwgNjc3MiwgNjc3NCwgNjc3NiwgNjc3OCwgNjc4MCwgNjc4MiwgNjc4NCwgCi0gICAgNjc4NiwgNjc4OCwgNjc5MCwgNjc5MiwgNjc5NCwgNjc5NiwgNjc5OCwgNjgwMCwgNjgwMiwgNjgwNCwgNjgwNiwgNjgwOCwgCi0gICAgNjgxMCwgNjgxMiwgNjgxNCwgNjgxNiwgNjgxOCwgNjgyMCwgNjgyMiwgNjgyNCwgNjgyNiwgNjgyOCwgNjgzMCwgNjgzMiwgCi0gICAgNjgzNCwgNjgzNiwgNjgzOCwgNjg0MCwgNjg0MiwgNjg0NCwgNjg0NiwgNjg0OCwgNjg1MCwgNjg1MiwgNjg1NCwgNjg1NiwgCi0gICAgNjg1OCwgNjg2MCwgNjg2MiwgNjg2NCwgNjg2NiwgNjg2OCwgNjg3MCwgNjg3MiwgNjg3NCwgNjg3NiwgNjg3OCwgNjg4MCwgCi0gICAgNjg4MiwgNjg4NCwgNjg4NiwgNjg4OCwgNjg5MCwgNjg5MiwgNjg5NCwgNjg5NiwgNjg5OCwgNjkwMCwgNjkwMiwgNjkwNCwgCi0gICAgNjkwNiwgNjkwOCwgNjkxMCwgNjkxMiwgNjkxNCwgNjkxNiwgNjkxOCwgNjkyMCwgNjkyMiwgNjkyNCwgNjkyNiwgNjkyOCwgCi0gICAgNjkzMCwgNjkzMiwgNjkzNCwgNjkzNiwgNjkzOCwgNjk0MCwgNjk0MiwgNjk0NCwgNjk0NiwgNjk0OCwgNjk1MCwgNjk1MiwgCi0gICAgNjk1NCwgNjk1NiwgNjk1OCwgNjk2MCwgNjk2MiwgNjk2NCwgNjk2NiwgNjk2OCwgNjk3MCwgNjk3MiwgNjk3NCwgNjk3NiwgCi0gICAgNjk3OCwgNjk4MCwgNjk4MiwgNjk4NCwgNjk4NiwgNjk4OCwgNjk5MCwgNjk5MiwgNjk5NCwgNjk5NiwgNjk5OCwgNzAwMCwgCi0gICAgNzAwMiwgNzAwNCwgNzAwNiwgNzAwOCwgNzAxMCwgNzAxMiwgNzAxNCwgNzAxNiwgNzAxOCwgNzAyMCwgNzAyMiwgNzAyNCwgCi0gICAgNzAyNiwgNzAyOCwgNzAzMCwgNzAzMiwgNzAzNCwgNzAzNiwgNzAzOCwgNzA0MCwgNzA0MiwgNzA0NCwgNzA0NiwgNzA0OCwgCi0gICAgNzA1MCwgNzA1MiwgNzA1NCwgNzA1NiwgNzA1OCwgNzA2MCwgNzA2MiwgNzA2NCwgNzA2NiwgNzA2OCwgNzA3MCwgNzA3MiwgCi0gICAgNzA3NCwgNzA3NiwgNzA3OCwgNzA4MCwgNzA4MiwgNzA4NCwgNzA4NiwgNzA4OCwgNzA5MCwgNzA5MiwgNzA5NCwgNzA5NiwgCi0gICAgNzA5OCwgNzEwMCwgNzEwMiwgNzEwNCwgNzEwNiwgNzEwOCwgNzExMCwgNzExMiwgNzExNCwgNzExNiwgNzExOCwgNzEyMCwgCi0gICAgNzEyMiwgNzEyNCwgNzEyNiwgNzEyOCwgNzEzMCwgNzEzMiwgNzEzNCwgNzEzNiwgNzEzOCwgNzE0MCwgNzE0MiwgNzE0NCwgCi0gICAgNzE0NiwgNzE0OCwgNzE1MCwgNzE1MiwgNzE1NCwgNzE1NiwgNzE1OCwgNzE2MCwgNzE2MiwgNzE2NCwgNzE2NiwgNzE2OCwgCi0gICAgNzE3MCwgNzE3MiwgNzE3NCwgNzE3NiwgNzE3OCwgNzE4MCwgNzE4MiwgNzE4NCwgNzE4NiwgNzE4OCwgNzE5MCwgMCwgMCwgCi0gICAgNzE5MiwgMCwgNzE5NCwgMCwgMCwgNzE5NiwgNzE5OCwgNzIwMCwgNzIwMiwgNzIwNCwgNzIwNiwgNzIwOCwgNzIxMCwgCi0gICAgNzIxMiwgNzIxNCwgMCwgNzIxNiwgMCwgNzIxOCwgMCwgMCwgNzIyMCwgNzIyMiwgMCwgMCwgMCwgNzIyNCwgNzIyNiwgCi0gICAgNzIyOCwgNzIzMCwgNzIzMiwgNzIzNCwgNzIzNiwgNzIzOCwgNzI0MCwgNzI0MiwgNzI0NCwgNzI0NiwgNzI0OCwgNzI1MCwgCi0gICAgNzI1MiwgNzI1NCwgNzI1NiwgNzI1OCwgNzI2MCwgNzI2MiwgNzI2NCwgNzI2NiwgNzI2OCwgNzI3MCwgNzI3MiwgNzI3NCwgCi0gICAgNzI3NiwgNzI3OCwgNzI4MCwgNzI4MiwgNzI4NCwgNzI4NiwgNzI4OCwgNzI5MCwgNzI5MiwgNzI5NCwgNzI5NiwgNzI5OCwgCi0gICAgNzMwMCwgNzMwMiwgNzMwNCwgNzMwNiwgNzMwOCwgNzMxMCwgNzMxMiwgNzMxNCwgNzMxNiwgNzMxOCwgNzMyMCwgNzMyMiwgCi0gICAgNzMyNCwgNzMyNiwgNzMyOCwgNzMzMCwgNzMzMiwgNzMzNCwgNzMzNiwgNzMzOCwgNzM0MCwgNzM0MiwgNzM0NCwgNzM0NiwgCi0gICAgNzM0OCwgNzM1MCwgNzM1MiwgNzM1NCwgNzM1NiwgNzM1OCwgMCwgMCwgNzM2MCwgNzM2MiwgNzM2NCwgNzM2NiwgNzM2OCwgCi0gICAgNzM3MCwgNzM3MiwgNzM3NCwgNzM3NiwgNzM3OCwgNzM4MCwgNzM4MiwgNzM4NCwgNzM4NiwgNzM4OCwgNzM5MCwgNzM5MiwgCi0gICAgNzM5NCwgNzM5NiwgNzM5OCwgNzQwMCwgNzQwMiwgNzQwNCwgNzQwNiwgNzQwOCwgNzQxMCwgNzQxMiwgNzQxNCwgNzQxNiwgCi0gICAgNzQxOCwgNzQyMCwgNzQyMiwgNzQyNCwgNzQyNiwgNzQyOCwgNzQzMCwgNzQzMiwgNzQzNCwgNzQzNiwgNzQzOCwgNzQ0MCwgCi0gICAgNzQ0MiwgNzQ0NCwgNzQ0NiwgNzQ0OCwgNzQ1MCwgNzQ1MiwgNzQ1NCwgNzQ1NiwgNzQ1OCwgNzQ2MCwgNzQ2MiwgNzQ2NCwgCi0gICAgNzQ2NiwgNzQ2OCwgNzQ3MCwgNzQ3MiwgNzQ3NCwgNzQ3NiwgNzQ3OCwgNzQ4MCwgNzQ4MiwgNzQ4NCwgNzQ4NiwgNzQ4OCwgCi0gICAgNzQ5MCwgNzQ5MiwgNzQ5NCwgNzQ5NiwgNzQ5OCwgNzUwMCwgNzUwMiwgNzUwNCwgNzUwNiwgNzUwOCwgNzUxMCwgNzUxMiwgCi0gICAgNzUxNCwgNzUxNiwgNzUxOCwgNzUyMCwgNzUyMiwgNzUyNCwgNzUyNiwgNzUyOCwgNzUzMCwgNzUzMiwgNzUzNCwgNzUzNiwgCi0gICAgNzUzOCwgNzU0MCwgNzU0MiwgNzU0NCwgNzU0NiwgNzU0OCwgNzU1MCwgNzU1MiwgNzU1NCwgNzU1NiwgNzU1OCwgNzU2MCwgCi0gICAgNzU2MiwgNzU2NCwgNzU2NiwgNzU2OCwgNzU3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzU3MiwgNzU3NSwgNzU3OCwgNzU4MSwgNzU4NSwgNzU4OSwgNzU5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzU5NSwgNzU5OCwgNzYwMSwgNzYwNCwgNzYwNywgMCwgMCwgMCwgMCwgMCwgNzYxMCwgMCwgNzYxMywgNzYxNiwgCi0gICAgNzYxOCwgNzYyMCwgNzYyMiwgNzYyNCwgNzYyNiwgNzYyOCwgNzYzMCwgNzYzMiwgNzYzNCwgNzYzNiwgNzYzOSwgNzY0MiwgCi0gICAgNzY0NSwgNzY0OCwgNzY1MSwgNzY1NCwgNzY1NywgNzY2MCwgNzY2MywgNzY2NiwgNzY2OSwgNzY3MiwgMCwgNzY3NSwgCi0gICAgNzY3OCwgNzY4MSwgNzY4NCwgNzY4NywgMCwgNzY5MCwgMCwgNzY5MywgNzY5NiwgMCwgNzY5OSwgNzcwMiwgMCwgNzcwNSwgCi0gICAgNzcwOCwgNzcxMSwgNzcxNCwgNzcxNywgNzcyMCwgNzcyMywgNzcyNiwgNzcyOSwgNzczMiwgNzczNSwgNzczNywgNzczOSwgCi0gICAgNzc0MSwgNzc0MywgNzc0NSwgNzc0NywgNzc0OSwgNzc1MSwgNzc1MywgNzc1NSwgNzc1NywgNzc1OSwgNzc2MSwgNzc2MywgCi0gICAgNzc2NSwgNzc2NywgNzc2OSwgNzc3MSwgNzc3MywgNzc3NSwgNzc3NywgNzc3OSwgNzc4MSwgNzc4MywgNzc4NSwgNzc4NywgCi0gICAgNzc4OSwgNzc5MSwgNzc5MywgNzc5NSwgNzc5NywgNzc5OSwgNzgwMSwgNzgwMywgNzgwNSwgNzgwNywgNzgwOSwgNzgxMSwgCi0gICAgNzgxMywgNzgxNSwgNzgxNywgNzgxOSwgNzgyMSwgNzgyMywgNzgyNSwgNzgyNywgNzgyOSwgNzgzMSwgNzgzMywgNzgzNSwgCi0gICAgNzgzNywgNzgzOSwgNzg0MSwgNzg0MywgNzg0NSwgNzg0NywgNzg0OSwgNzg1MSwgNzg1MywgNzg1NSwgNzg1NywgNzg1OSwgCi0gICAgNzg2MSwgNzg2MywgNzg2NSwgNzg2NywgNzg2OSwgNzg3MSwgNzg3MywgNzg3NSwgNzg3NywgNzg3OSwgNzg4MSwgNzg4MywgCi0gICAgNzg4NSwgNzg4NywgNzg4OSwgNzg5MSwgNzg5MywgNzg5NSwgNzg5NywgNzg5OSwgNzkwMSwgNzkwMywgNzkwNSwgNzkwNywgCi0gICAgNzkwOSwgNzkxMSwgNzkxMywgNzkxNSwgNzkxNywgNzkxOSwgNzkyMSwgNzkyMywgNzkyNSwgNzkyNywgNzkyOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkzMSwgNzkzMywgNzkzNSwgNzkzNywgNzkzOSwgNzk0MSwgNzk0MywgNzk0NSwgCi0gICAgNzk0NywgNzk0OSwgNzk1MSwgNzk1MywgNzk1NSwgNzk1NywgNzk1OSwgNzk2MSwgNzk2MywgNzk2NSwgNzk2NywgNzk2OSwgCi0gICAgNzk3MSwgNzk3MywgNzk3NSwgNzk3NywgNzk4MCwgNzk4MywgNzk4NiwgNzk4OSwgNzk5MiwgNzk5NSwgNzk5OCwgODAwMSwgCi0gICAgODAwNCwgODAwNywgODAxMCwgODAxMywgODAxNiwgODAxOSwgODAyMiwgODAyNSwgODAyOCwgODAzMSwgODAzMywgODAzNSwgCi0gICAgODAzNywgODAzOSwgODA0MiwgODA0NSwgODA0OCwgODA1MSwgODA1NCwgODA1NywgODA2MCwgODA2MywgODA2NiwgODA2OSwgCi0gICAgODA3MiwgODA3NSwgODA3OCwgODA4MSwgODA4NCwgODA4NywgODA5MCwgODA5MywgODA5NiwgODA5OSwgODEwMiwgODEwNSwgCi0gICAgODEwOCwgODExMSwgODExNCwgODExNywgODEyMCwgODEyMywgODEyNiwgODEyOSwgODEzMiwgODEzNSwgODEzOCwgODE0MSwgCi0gICAgODE0NCwgODE0NywgODE1MCwgODE1MywgODE1NiwgODE1OSwgODE2MiwgODE2NSwgODE2OCwgODE3MSwgODE3NCwgODE3NywgCi0gICAgODE4MCwgODE4MywgODE4NiwgODE4OSwgODE5MiwgODE5NSwgODE5OCwgODIwMSwgODIwNCwgODIwNywgODIxMCwgODIxMywgCi0gICAgODIxNiwgODIxOSwgODIyMiwgODIyNSwgODIyOCwgODIzMSwgODIzNCwgODIzNywgODI0MCwgODI0MywgODI0NiwgODI0OSwgCi0gICAgODI1MiwgODI1NSwgODI1OCwgODI2MSwgODI2NCwgODI2NywgODI3MCwgODI3MywgODI3NiwgODI3OSwgODI4MiwgODI4NSwgCi0gICAgODI4OCwgODI5MSwgODI5NCwgODI5NywgODMwMCwgODMwMywgODMwNiwgODMwOSwgODMxMiwgODMxNSwgODMxOCwgODMyMSwgCi0gICAgODMyNSwgODMyOSwgODMzMywgODMzNywgODM0MSwgODM0NSwgODM0OCwgODM1MSwgODM1NCwgODM1NywgODM2MCwgODM2MywgCi0gICAgODM2NiwgODM2OSwgODM3MiwgODM3NSwgODM3OCwgODM4MSwgODM4NCwgODM4NywgODM5MCwgODM5MywgODM5NiwgODM5OSwgCi0gICAgODQwMiwgODQwNSwgODQwOCwgODQxMSwgODQxNCwgODQxNywgODQyMCwgODQyMywgODQyNiwgODQyOSwgODQzMiwgODQzNSwgCi0gICAgODQzOCwgODQ0MSwgODQ0NCwgODQ0NywgODQ1MCwgODQ1MywgODQ1NiwgODQ1OSwgODQ2MiwgODQ2NSwgODQ2OCwgODQ3MSwgCi0gICAgODQ3NCwgODQ3NywgODQ4MCwgODQ4MywgODQ4NiwgODQ4OSwgODQ5MiwgODQ5NSwgODQ5OCwgODUwMSwgODUwNCwgODUwNywgCi0gICAgODUxMCwgODUxMywgODUxNiwgODUxOSwgODUyMiwgODUyNSwgODUyOCwgODUzMSwgODUzNCwgODUzNywgODU0MCwgODU0MywgCi0gICAgODU0NiwgODU0OSwgODU1MiwgODU1NSwgODU1OCwgODU2MSwgODU2NCwgODU2NywgODU3MCwgODU3MywgODU3NiwgODU3OSwgCi0gICAgODU4MiwgODU4NSwgODU4OCwgODU5MSwgODU5NCwgODU5NywgODYwMCwgODYwMywgODYwNiwgODYwOSwgODYxMiwgODYxNSwgCi0gICAgODYxOCwgODYyMSwgODYyNCwgODYyNywgODYzMCwgODYzMywgODYzNiwgODYzOSwgODY0MiwgODY0NSwgODY0OCwgODY1MSwgCi0gICAgODY1NCwgODY1NywgODY2MCwgODY2MywgODY2NiwgODY2OSwgODY3MiwgODY3NSwgODY3OCwgODY4MSwgODY4NCwgODY4NywgCi0gICAgODY5MCwgODY5MywgODY5NiwgODY5OSwgODcwMiwgODcwNSwgODcwOCwgODcxMSwgODcxNCwgODcxNywgODcyMCwgODcyMywgCi0gICAgODcyNiwgODcyOSwgODczMiwgODczNSwgODczOCwgODc0MSwgODc0NCwgODc0NywgODc1MCwgODc1MywgODc1NiwgODc1OSwgCi0gICAgODc2MiwgODc2NSwgODc2OCwgODc3MSwgODc3NSwgODc3OSwgODc4MywgODc4NiwgODc4OSwgODc5MiwgODc5NSwgODc5OCwgCi0gICAgODgwMSwgODgwNCwgODgwNywgODgxMCwgODgxMywgODgxNiwgODgxOSwgODgyMiwgODgyNSwgODgyOCwgODgzMSwgODgzNCwgCi0gICAgODgzNywgODg0MCwgODg0MywgODg0NiwgODg0OSwgODg1MiwgODg1NSwgODg1OCwgODg2MSwgODg2NCwgODg2NywgODg3MCwgCi0gICAgODg3MywgODg3NiwgODg3OSwgODg4MiwgODg4NSwgODg4OCwgODg5MSwgODg5NCwgODg5NywgODkwMCwgODkwMywgODkwNiwgCi0gICAgODkwOSwgODkxMiwgODkxNSwgODkxOCwgODkyMSwgODkyNCwgODkyNywgODkzMCwgODkzMywgODkzNiwgODkzOSwgODk0MiwgCi0gICAgODk0NSwgODk0OCwgODk1MSwgODk1NCwgODk1NywgODk2MCwgODk2MywgODk2NiwgODk2OSwgODk3MiwgODk3NSwgODk3OCwgCi0gICAgODk4MSwgODk4NCwgODk4NywgODk5MCwgODk5MywgODk5NiwgODk5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTAwMiwgOTAwNiwgOTAxMCwgOTAxNCwgOTAxOCwgOTAyMiwgOTAyNiwgOTAzMCwgCi0gICAgOTAzNCwgOTAzOCwgOTA0MiwgOTA0NiwgOTA1MCwgOTA1NCwgOTA1OCwgOTA2MiwgOTA2NiwgOTA3MCwgOTA3NCwgOTA3OCwgCi0gICAgOTA4MiwgOTA4NiwgOTA5MCwgOTA5NCwgOTA5OCwgOTEwMiwgOTEwNiwgOTExMCwgOTExNCwgOTExOCwgOTEyMiwgOTEyNiwgCi0gICAgOTEzMCwgOTEzNCwgOTEzOCwgOTE0MiwgOTE0NiwgOTE1MCwgOTE1NCwgOTE1OCwgOTE2MiwgOTE2NiwgOTE3MCwgOTE3NCwgCi0gICAgOTE3OCwgOTE4MiwgOTE4NiwgOTE5MCwgOTE5NCwgOTE5OCwgOTIwMiwgOTIwNiwgOTIxMCwgOTIxNCwgOTIxOCwgOTIyMiwgCi0gICAgOTIyNiwgOTIzMCwgOTIzNCwgOTIzOCwgOTI0MiwgOTI0NiwgOTI1MCwgOTI1NCwgMCwgMCwgOTI1OCwgOTI2MiwgOTI2NiwgCi0gICAgOTI3MCwgOTI3NCwgOTI3OCwgOTI4MiwgOTI4NiwgOTI5MCwgOTI5NCwgOTI5OCwgOTMwMiwgOTMwNiwgOTMxMCwgOTMxNCwgCi0gICAgOTMxOCwgOTMyMiwgOTMyNiwgOTMzMCwgOTMzNCwgOTMzOCwgOTM0MiwgOTM0NiwgOTM1MCwgOTM1NCwgOTM1OCwgOTM2MiwgCi0gICAgOTM2NiwgOTM3MCwgOTM3NCwgOTM3OCwgOTM4MiwgOTM4NiwgOTM5MCwgOTM5NCwgOTM5OCwgOTQwMiwgOTQwNiwgOTQxMCwgCi0gICAgOTQxNCwgOTQxOCwgOTQyMiwgOTQyNiwgOTQzMCwgOTQzNCwgOTQzOCwgOTQ0MiwgOTQ0NiwgOTQ1MCwgOTQ1NCwgOTQ1OCwgCi0gICAgOTQ2MiwgOTQ2NiwgOTQ3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ3NCwgCi0gICAgOTQ3OCwgOTQ4MiwgOTQ4NywgOTQ5MiwgOTQ5NywgOTUwMiwgOTUwNywgOTUxMiwgOTUxNywgOTUyMSwgOTU0MCwgOTU0OSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU1NCwgOTU1NiwgCi0gICAgOTU1OCwgOTU2MCwgOTU2MiwgOTU2NCwgOTU2NiwgOTU2OCwgOTU3MCwgOTU3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NCwgOTU3NiwgOTU3OCwgOTU4MCwgOTU4MiwgCi0gICAgOTU4NCwgOTU4NiwgOTU4OCwgOTU5MCwgOTU5MiwgOTU5NCwgOTU5NiwgOTU5OCwgOTYwMCwgOTYwMiwgOTYwNCwgOTYwNiwgCi0gICAgOTYwOCwgOTYxMCwgOTYxMiwgOTYxNCwgMCwgMCwgOTYxNiwgOTYxOCwgOTYyMCwgOTYyMiwgOTYyNCwgOTYyNiwgOTYyOCwgCi0gICAgOTYzMCwgOTYzMiwgOTYzNCwgOTYzNiwgOTYzOCwgMCwgOTY0MCwgOTY0MiwgOTY0NCwgOTY0NiwgOTY0OCwgOTY1MCwgCi0gICAgOTY1MiwgOTY1NCwgOTY1NiwgOTY1OCwgOTY2MCwgOTY2MiwgOTY2NCwgOTY2NiwgOTY2OCwgOTY3MCwgOTY3MiwgOTY3NCwgCi0gICAgOTY3NiwgMCwgOTY3OCwgOTY4MCwgOTY4MiwgOTY4NCwgMCwgMCwgMCwgMCwgOTY4NiwgOTY4OSwgOTY5MiwgMCwgOTY5NSwgCi0gICAgMCwgOTY5OCwgOTcwMSwgOTcwNCwgOTcwNywgOTcxMCwgOTcxMywgOTcxNiwgOTcxOSwgOTcyMiwgOTcyNSwgOTcyOCwgCi0gICAgOTczMCwgOTczMiwgOTczNCwgOTczNiwgOTczOCwgOTc0MCwgOTc0MiwgOTc0NCwgOTc0NiwgOTc0OCwgOTc1MCwgOTc1MiwgCi0gICAgOTc1NCwgOTc1NiwgOTc1OCwgOTc2MCwgOTc2MiwgOTc2NCwgOTc2NiwgOTc2OCwgOTc3MCwgOTc3MiwgOTc3NCwgOTc3NiwgCi0gICAgOTc3OCwgOTc4MCwgOTc4MiwgOTc4NCwgOTc4NiwgOTc4OCwgOTc5MCwgOTc5MiwgOTc5NCwgOTc5NiwgOTc5OCwgOTgwMCwgCi0gICAgOTgwMiwgOTgwNCwgOTgwNiwgOTgwOCwgOTgxMCwgOTgxMiwgOTgxNCwgOTgxNiwgOTgxOCwgOTgyMCwgOTgyMiwgOTgyNCwgCi0gICAgOTgyNiwgOTgyOCwgOTgzMCwgOTgzMiwgOTgzNCwgOTgzNiwgOTgzOCwgOTg0MCwgOTg0MiwgOTg0NCwgOTg0NiwgOTg0OCwgCi0gICAgOTg1MCwgOTg1MiwgOTg1NCwgOTg1NiwgOTg1OCwgOTg2MCwgOTg2MiwgOTg2NCwgOTg2NiwgOTg2OCwgOTg3MCwgOTg3MiwgCi0gICAgOTg3NCwgOTg3NiwgOTg3OCwgOTg4MCwgOTg4MiwgOTg4NCwgOTg4NiwgOTg4OCwgOTg5MCwgOTg5MiwgOTg5NCwgOTg5NiwgCi0gICAgOTg5OCwgOTkwMCwgOTkwMiwgOTkwNCwgOTkwNiwgOTkwOCwgOTkxMCwgOTkxMiwgOTkxNCwgOTkxNiwgOTkxOCwgOTkyMCwgCi0gICAgOTkyMiwgOTkyNCwgOTkyNiwgOTkyOCwgOTkzMCwgOTkzMiwgOTkzNCwgOTkzNiwgOTkzOCwgOTk0MCwgOTk0MiwgOTk0NCwgCi0gICAgOTk0NiwgOTk0OCwgOTk1MCwgOTk1MiwgOTk1NCwgOTk1NiwgOTk1OCwgOTk2MCwgOTk2MiwgOTk2NSwgOTk2OCwgOTk3MSwgCi0gICAgOTk3NCwgOTk3NywgOTk4MCwgOTk4MywgMCwgMCwgMCwgMCwgOTk4NiwgOTk4OCwgOTk5MCwgOTk5MiwgOTk5NCwgOTk5NiwgCi0gICAgOTk5OCwgMTAwMDAsIDEwMDAyLCAxMDAwNCwgMTAwMDYsIDEwMDA4LCAxMDAxMCwgMTAwMTIsIDEwMDE0LCAxMDAxNiwgCi0gICAgMTAwMTgsIDEwMDIwLCAxMDAyMiwgMTAwMjQsIDEwMDI2LCAxMDAyOCwgMTAwMzAsIDEwMDMyLCAxMDAzNCwgMTAwMzYsIAotICAgIDEwMDM4LCAxMDA0MCwgMTAwNDIsIDEwMDQ0LCAxMDA0NiwgMTAwNDgsIDEwMDUwLCAxMDA1MiwgMTAwNTQsIDEwMDU2LCAKLSAgICAxMDA1OCwgMTAwNjAsIDEwMDYyLCAxMDA2NCwgMTAwNjYsIDEwMDY4LCAxMDA3MCwgMTAwNzIsIDEwMDc0LCAxMDA3NiwgCi0gICAgMTAwNzgsIDEwMDgwLCAxMDA4MiwgMTAwODQsIDEwMDg2LCAxMDA4OCwgMTAwOTAsIDEwMDkyLCAxMDA5NCwgMTAwOTYsIAotICAgIDEwMDk4LCAxMDEwMCwgMTAxMDIsIDEwMTA0LCAxMDEwNiwgMTAxMDgsIDEwMTEwLCAxMDExMiwgMTAxMTQsIDEwMTE2LCAKLSAgICAxMDExOCwgMTAxMjAsIDEwMTIyLCAxMDEyNCwgMTAxMjYsIDEwMTI4LCAxMDEzMCwgMTAxMzIsIDEwMTM0LCAxMDEzNiwgCi0gICAgMTAxMzgsIDEwMTQwLCAxMDE0MiwgMTAxNDQsIDEwMTQ2LCAxMDE0OCwgMTAxNTAsIDEwMTUyLCAxMDE1NCwgMTAxNTYsIAotICAgIDEwMTU4LCAxMDE2MCwgMTAxNjIsIDEwMTY0LCAxMDE2NiwgMTAxNjgsIDEwMTcwLCAxMDE3MiwgMTAxNzQsIDEwMTc2LCAKLSAgICAxMDE3OCwgMTAxODAsIDEwMTgyLCAxMDE4NCwgMTAxODYsIDEwMTg4LCAxMDE5MCwgMTAxOTIsIDEwMTk0LCAxMDE5NiwgCi0gICAgMTAxOTgsIDEwMjAwLCAxMDIwMiwgMTAyMDQsIDEwMjA2LCAxMDIwOCwgMTAyMTAsIDEwMjEyLCAxMDIxNCwgMTAyMTYsIAotICAgIDEwMjE4LCAxMDIyMCwgMTAyMjIsIDEwMjI0LCAxMDIyNiwgMTAyMjgsIDEwMjMwLCAxMDIzMiwgMTAyMzQsIDEwMjM2LCAKLSAgICAxMDIzOCwgMTAyNDAsIDEwMjQyLCAxMDI0NCwgMTAyNDYsIDEwMjQ4LCAxMDI1MCwgMTAyNTIsIDEwMjU0LCAxMDI1NiwgCi0gICAgMTAyNTgsIDEwMjYwLCAxMDI2MiwgMTAyNjQsIDEwMjY2LCAxMDI2OCwgMTAyNzAsIDEwMjcyLCAxMDI3NCwgMTAyNzYsIAotICAgIDEwMjc4LCAxMDI4MCwgMTAyODIsIDEwMjg0LCAxMDI4NiwgMTAyODgsIDEwMjkwLCAxMDI5MiwgMTAyOTQsIDEwMjk2LCAKLSAgICAxMDI5OCwgMTAzMDAsIDEwMzAyLCAxMDMwNCwgMTAzMDYsIDEwMzA4LCAxMDMxMCwgMTAzMTIsIDEwMzE0LCAxMDMxNiwgCi0gICAgMTAzMTgsIDEwMzIwLCAxMDMyMiwgMTAzMjQsIDEwMzI2LCAxMDMyOCwgMTAzMzAsIDEwMzMyLCAxMDMzNCwgMTAzMzYsIAotICAgIDEwMzM4LCAxMDM0MCwgMTAzNDIsIDEwMzQ0LCAxMDM0NiwgMTAzNDgsIDEwMzUwLCAxMDM1MiwgMTAzNTQsIDEwMzU2LCAKLSAgICAxMDM1OCwgMTAzNjAsIDEwMzYyLCAxMDM2NCwgMCwgMCwgMCwgMTAzNjYsIDEwMzY4LCAxMDM3MCwgMTAzNzIsIDEwMzc0LCAKLSAgICAxMDM3NiwgMCwgMCwgMTAzNzgsIDEwMzgwLCAxMDM4MiwgMTAzODQsIDEwMzg2LCAxMDM4OCwgMCwgMCwgMTAzOTAsIAotICAgIDEwMzkyLCAxMDM5NCwgMTAzOTYsIDEwMzk4LCAxMDQwMCwgMCwgMCwgMTA0MDIsIDEwNDA0LCAxMDQwNiwgMCwgMCwgMCwgCi0gICAgMTA0MDgsIDEwNDEwLCAxMDQxMiwgMTA0MTQsIDEwNDE2LCAxMDQxOCwgMTA0MjAsIDAsIDEwNDIyLCAxMDQyNCwgMTA0MjYsIAotICAgIDEwNDI4LCAxMDQzMCwgMTA0MzIsIDEwNDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQzNiwgMCwgMTA0MzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQ0NSwgMTA0NDgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NDYsIDY2NDgsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNDU0NCw2MTEgKzQ4NTUsODEzIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY1MCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0NTEsIDEwNDU0LCAxMDQ1NywgMTA0NjAsIDEwNDYzLCAKLSAgICAxMDQ2NiwgMTA0NjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NTIsIDY2NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDcyLCAxMDQ3NSwgCi0gICAgMTA0NzgsIDEwNDgxLCAxMDQ4NCwgMTA0ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NTYsIDY2NTgsIDY2NjAsIDY2NjIsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEwNDkwLCAxMDQ5MiwgMTA0OTQsIDEwNDk2LCAxMDQ5OCwgMTA1MDAsIDEwNTAyLCAxMDUwNCwgMTA1MDYsIDEwNTA4LCAKLSAgICAxMDUxMCwgMTA1MTIsIDEwNTE0LCAxMDUxNiwgMTA1MTgsIDEwNTIwLCAxMDUyMiwgMTA1MjQsIDEwNTI2LCAxMDUyOCwgCi0gICAgMTA1MzAsIDEwNTMyLCAxMDUzNCwgMTA1MzYsIDEwNTM4LCAxMDU0MCwgMTA1NDIsIDEwNTQ0LCAxMDU0NiwgMTA1NDgsIAotICAgIDEwNTUwLCAxMDU1MiwgMTA1NTQsIDEwNTU2LCAxMDU1OCwgMTA1NjAsIDEwNTYyLCAxMDU2NCwgMTA1NjYsIDEwNTY4LCAKLSAgICAxMDU3MCwgMTA1NzIsIDEwNTc0LCAxMDU3NiwgMTA1NzgsIDEwNTgwLCAxMDU4MiwgMTA1ODQsIDEwNTg2LCAxMDU4OCwgCi0gICAgMTA1OTAsIDEwNTkyLCAxMDU5NCwgMTA1OTYsIDEwNTk4LCAxMDYwMCwgMTA2MDIsIDEwNjA0LCAxMDYwNiwgMTA2MDgsIAotICAgIDEwNjEwLCAxMDYxMiwgMTA2MTQsIDEwNjE2LCAxMDYxOCwgMTA2MjAsIDEwNjIyLCAxMDYyNCwgMTA2MjYsIDEwNjI4LCAKLSAgICAxMDYzMCwgMTA2MzIsIDEwNjM0LCAxMDYzNiwgMTA2MzgsIDEwNjQwLCAxMDY0MiwgMTA2NDQsIDEwNjQ2LCAxMDY0OCwgCi0gICAgMTA2NTAsIDEwNjUyLCAxMDY1NCwgMTA2NTYsIDEwNjU4LCAwLCAxMDY2MCwgMTA2NjIsIDEwNjY0LCAxMDY2NiwgMTA2NjgsIAotICAgIDEwNjcwLCAxMDY3MiwgMTA2NzQsIDEwNjc2LCAxMDY3OCwgMTA2ODAsIDEwNjgyLCAxMDY4NCwgMTA2ODYsIDEwNjg4LCAKLSAgICAxMDY5MCwgMTA2OTIsIDEwNjk0LCAxMDY5NiwgMTA2OTgsIDEwNzAwLCAxMDcwMiwgMTA3MDQsIDEwNzA2LCAxMDcwOCwgCi0gICAgMTA3MTAsIDEwNzEyLCAxMDcxNCwgMTA3MTYsIDEwNzE4LCAxMDcyMCwgMTA3MjIsIDEwNzI0LCAxMDcyNiwgMTA3MjgsIAotICAgIDEwNzMwLCAxMDczMiwgMTA3MzQsIDEwNzM2LCAxMDczOCwgMTA3NDAsIDEwNzQyLCAxMDc0NCwgMTA3NDYsIDEwNzQ4LCAKLSAgICAxMDc1MCwgMTA3NTIsIDEwNzU0LCAxMDc1NiwgMTA3NTgsIDEwNzYwLCAxMDc2MiwgMTA3NjQsIDEwNzY2LCAxMDc2OCwgCi0gICAgMTA3NzAsIDEwNzcyLCAxMDc3NCwgMTA3NzYsIDEwNzc4LCAxMDc4MCwgMTA3ODIsIDEwNzg0LCAxMDc4NiwgMTA3ODgsIAotICAgIDEwNzkwLCAxMDc5MiwgMTA3OTQsIDEwNzk2LCAxMDc5OCwgMTA4MDAsIDAsIDEwODAyLCAxMDgwNCwgMCwgMCwgMTA4MDYsIAotICAgIDAsIDAsIDEwODA4LCAxMDgxMCwgMCwgMCwgMTA4MTIsIDEwODE0LCAxMDgxNiwgMTA4MTgsIDAsIDEwODIwLCAxMDgyMiwgCi0gICAgMTA4MjQsIDEwODI2LCAxMDgyOCwgMTA4MzAsIDEwODMyLCAxMDgzNCwgMTA4MzYsIDEwODM4LCAxMDg0MCwgMTA4NDIsIDAsIAotICAgIDEwODQ0LCAwLCAxMDg0NiwgMTA4NDgsIDEwODUwLCAxMDg1MiwgMTA4NTQsIDEwODU2LCAxMDg1OCwgMCwgMTA4NjAsIAotICAgIDEwODYyLCAxMDg2NCwgMTA4NjYsIDEwODY4LCAxMDg3MCwgMTA4NzIsIDEwODc0LCAxMDg3NiwgMTA4NzgsIDEwODgwLCAKLSAgICAxMDg4MiwgMTA4ODQsIDEwODg2LCAxMDg4OCwgMTA4OTAsIDEwODkyLCAxMDg5NCwgMTA4OTYsIDEwODk4LCAxMDkwMCwgCi0gICAgMTA5MDIsIDEwOTA0LCAxMDkwNiwgMTA5MDgsIDEwOTEwLCAxMDkxMiwgMTA5MTQsIDEwOTE2LCAxMDkxOCwgMTA5MjAsIAotICAgIDEwOTIyLCAxMDkyNCwgMTA5MjYsIDEwOTI4LCAxMDkzMCwgMTA5MzIsIDEwOTM0LCAxMDkzNiwgMTA5MzgsIDEwOTQwLCAKLSAgICAxMDk0MiwgMTA5NDQsIDEwOTQ2LCAxMDk0OCwgMTA5NTAsIDEwOTUyLCAxMDk1NCwgMTA5NTYsIDEwOTU4LCAxMDk2MCwgCi0gICAgMTA5NjIsIDEwOTY0LCAxMDk2NiwgMTA5NjgsIDEwOTcwLCAxMDk3MiwgMTA5NzQsIDEwOTc2LCAxMDk3OCwgMTA5ODAsIAotICAgIDEwOTgyLCAxMDk4NCwgMTA5ODYsIDEwOTg4LCAwLCAxMDk5MCwgMTA5OTIsIDEwOTk0LCAxMDk5NiwgMCwgMCwgMTA5OTgsIAotICAgIDExMDAwLCAxMTAwMiwgMTEwMDQsIDExMDA2LCAxMTAwOCwgMTEwMTAsIDExMDEyLCAwLCAxMTAxNCwgMTEwMTYsIDExMDE4LCAKLSAgICAxMTAyMCwgMTEwMjIsIDExMDI0LCAxMTAyNiwgMCwgMTEwMjgsIDExMDMwLCAxMTAzMiwgMTEwMzQsIDExMDM2LCAxMTAzOCwgCi0gICAgMTEwNDAsIDExMDQyLCAxMTA0NCwgMTEwNDYsIDExMDQ4LCAxMTA1MCwgMTEwNTIsIDExMDU0LCAxMTA1NiwgMTEwNTgsIAotICAgIDExMDYwLCAxMTA2MiwgMTEwNjQsIDExMDY2LCAxMTA2OCwgMTEwNzAsIDExMDcyLCAxMTA3NCwgMTEwNzYsIDExMDc4LCAKLSAgICAxMTA4MCwgMTEwODIsIDAsIDExMDg0LCAxMTA4NiwgMTEwODgsIDExMDkwLCAwLCAxMTA5MiwgMTEwOTQsIDExMDk2LCAKLSAgICAxMTA5OCwgMTExMDAsIDAsIDExMTAyLCAwLCAwLCAwLCAxMTEwNCwgMTExMDYsIDExMTA4LCAxMTExMCwgMTExMTIsIAotICAgIDExMTE0LCAxMTExNiwgMCwgMTExMTgsIDExMTIwLCAxMTEyMiwgMTExMjQsIDExMTI2LCAxMTEyOCwgMTExMzAsIDExMTMyLCAKLSAgICAxMTEzNCwgMTExMzYsIDExMTM4LCAxMTE0MCwgMTExNDIsIDExMTQ0LCAxMTE0NiwgMTExNDgsIDExMTUwLCAxMTE1MiwgCi0gICAgMTExNTQsIDExMTU2LCAxMTE1OCwgMTExNjAsIDExMTYyLCAxMTE2NCwgMTExNjYsIDExMTY4LCAxMTE3MCwgMTExNzIsIAotICAgIDExMTc0LCAxMTE3NiwgMTExNzgsIDExMTgwLCAxMTE4MiwgMTExODQsIDExMTg2LCAxMTE4OCwgMTExOTAsIDExMTkyLCAKLSAgICAxMTE5NCwgMTExOTYsIDExMTk4LCAxMTIwMCwgMTEyMDIsIDExMjA0LCAxMTIwNiwgMTEyMDgsIDExMjEwLCAxMTIxMiwgCi0gICAgMTEyMTQsIDExMjE2LCAxMTIxOCwgMTEyMjAsIDExMjIyLCAxMTIyNCwgMTEyMjYsIDExMjI4LCAxMTIzMCwgMTEyMzIsIAotICAgIDExMjM0LCAxMTIzNiwgMTEyMzgsIDExMjQwLCAxMTI0MiwgMTEyNDQsIDExMjQ2LCAxMTI0OCwgMTEyNTAsIDExMjUyLCAKLSAgICAxMTI1NCwgMTEyNTYsIDExMjU4LCAxMTI2MCwgMTEyNjIsIDExMjY0LCAxMTI2NiwgMTEyNjgsIDExMjcwLCAxMTI3MiwgCi0gICAgMTEyNzQsIDExMjc2LCAxMTI3OCwgMTEyODAsIDExMjgyLCAxMTI4NCwgMTEyODYsIDExMjg4LCAxMTI5MCwgMTEyOTIsIAotICAgIDExMjk0LCAxMTI5NiwgMTEyOTgsIDExMzAwLCAxMTMwMiwgMTEzMDQsIDExMzA2LCAxMTMwOCwgMTEzMTAsIDExMzEyLCAKLSAgICAxMTMxNCwgMTEzMTYsIDExMzE4LCAxMTMyMCwgMTEzMjIsIDExMzI0LCAxMTMyNiwgMTEzMjgsIDExMzMwLCAxMTMzMiwgCi0gICAgMTEzMzQsIDExMzM2LCAxMTMzOCwgMTEzNDAsIDExMzQyLCAxMTM0NCwgMTEzNDYsIDExMzQ4LCAxMTM1MCwgMTEzNTIsIAotICAgIDExMzU0LCAxMTM1NiwgMTEzNTgsIDExMzYwLCAxMTM2MiwgMTEzNjQsIDExMzY2LCAxMTM2OCwgMTEzNzAsIDExMzcyLCAKLSAgICAxMTM3NCwgMTEzNzYsIDExMzc4LCAxMTM4MCwgMTEzODIsIDExMzg0LCAxMTM4NiwgMTEzODgsIDExMzkwLCAxMTM5MiwgCi0gICAgMTEzOTQsIDExMzk2LCAxMTM5OCwgMTE0MDAsIDExNDAyLCAxMTQwNCwgMTE0MDYsIDExNDA4LCAxMTQxMCwgMTE0MTIsIAotICAgIDExNDE0LCAxMTQxNiwgMTE0MTgsIDExNDIwLCAxMTQyMiwgMTE0MjQsIDExNDI2LCAxMTQyOCwgMTE0MzAsIDExNDMyLCAKLSAgICAxMTQzNCwgMTE0MzYsIDExNDM4LCAxMTQ0MCwgMTE0NDIsIDExNDQ0LCAxMTQ0NiwgMTE0NDgsIDExNDUwLCAxMTQ1MiwgCi0gICAgMTE0NTQsIDExNDU2LCAxMTQ1OCwgMTE0NjAsIDExNDYyLCAxMTQ2NCwgMTE0NjYsIDExNDY4LCAxMTQ3MCwgMTE0NzIsIAotICAgIDExNDc0LCAxMTQ3NiwgMTE0NzgsIDExNDgwLCAxMTQ4MiwgMTE0ODQsIDExNDg2LCAxMTQ4OCwgMTE0OTAsIDExNDkyLCAKLSAgICAxMTQ5NCwgMTE0OTYsIDExNDk4LCAxMTUwMCwgMTE1MDIsIDExNTA0LCAxMTUwNiwgMTE1MDgsIDExNTEwLCAxMTUxMiwgCi0gICAgMTE1MTQsIDExNTE2LCAxMTUxOCwgMTE1MjAsIDExNTIyLCAxMTUyNCwgMTE1MjYsIDExNTI4LCAxMTUzMCwgMTE1MzIsIAotICAgIDExNTM0LCAxMTUzNiwgMTE1MzgsIDExNTQwLCAxMTU0MiwgMTE1NDQsIDExNTQ2LCAxMTU0OCwgMTE1NTAsIDExNTUyLCAKLSAgICAxMTU1NCwgMTE1NTYsIDExNTU4LCAxMTU2MCwgMTE1NjIsIDExNTY0LCAxMTU2NiwgMTE1NjgsIDExNTcwLCAxMTU3MiwgCi0gICAgMTE1NzQsIDExNTc2LCAxMTU3OCwgMTE1ODAsIDExNTgyLCAxMTU4NCwgMTE1ODYsIDExNTg4LCAxMTU5MCwgMTE1OTIsIAotICAgIDExNTk0LCAxMTU5NiwgMTE1OTgsIDExNjAwLCAxMTYwMiwgMTE2MDQsIDExNjA2LCAxMTYwOCwgMTE2MTAsIDExNjEyLCAKLSAgICAxMTYxNCwgMTE2MTYsIDExNjE4LCAxMTYyMCwgMTE2MjIsIDExNjI0LCAxMTYyNiwgMTE2MjgsIDExNjMwLCAxMTYzMiwgCi0gICAgMTE2MzQsIDExNjM2LCAxMTYzOCwgMTE2NDAsIDExNjQyLCAxMTY0NCwgMTE2NDYsIDExNjQ4LCAxMTY1MCwgMTE2NTIsIAotICAgIDExNjU0LCAxMTY1NiwgMTE2NTgsIDExNjYwLCAxMTY2MiwgMTE2NjQsIDExNjY2LCAxMTY2OCwgMTE2NzAsIDExNjcyLCAKLSAgICAxMTY3NCwgMTE2NzYsIDExNjc4LCAxMTY4MCwgMTE2ODIsIDExNjg0LCAxMTY4NiwgMTE2ODgsIDExNjkwLCAxMTY5MiwgCi0gICAgMTE2OTQsIDExNjk2LCAxMTY5OCwgMTE3MDAsIDExNzAyLCAxMTcwNCwgMTE3MDYsIDExNzA4LCAxMTcxMCwgMTE3MTIsIAotICAgIDExNzE0LCAxMTcxNiwgMTE3MTgsIDExNzIwLCAxMTcyMiwgMTE3MjQsIDExNzI2LCAxMTcyOCwgMTE3MzAsIDExNzMyLCAKLSAgICAxMTczNCwgMTE3MzYsIDExNzM4LCAxMTc0MCwgMTE3NDIsIDExNzQ0LCAxMTc0NiwgMTE3NDgsIDExNzUwLCAxMTc1MiwgCi0gICAgMTE3NTQsIDExNzU2LCAxMTc1OCwgMTE3NjAsIDExNzYyLCAxMTc2NCwgMTE3NjYsIDExNzY4LCAxMTc3MCwgMTE3NzIsIAotICAgIDExNzc0LCAxMTc3NiwgMTE3NzgsIDExNzgwLCAxMTc4MiwgMTE3ODQsIDExNzg2LCAxMTc4OCwgMTE3OTAsIDExNzkyLCAKLSAgICAxMTc5NCwgMTE3OTYsIDAsIDAsIDExNzk4LCAxMTgwMCwgMTE4MDIsIDExODA0LCAxMTgwNiwgMTE4MDgsIDExODEwLCAKLSAgICAxMTgxMiwgMTE4MTQsIDExODE2LCAxMTgxOCwgMTE4MjAsIDExODIyLCAxMTgyNCwgMTE4MjYsIDExODI4LCAxMTgzMCwgCi0gICAgMTE4MzIsIDExODM0LCAxMTgzNiwgMTE4MzgsIDExODQwLCAxMTg0MiwgMTE4NDQsIDExODQ2LCAxMTg0OCwgMTE4NTAsIAotICAgIDExODUyLCAxMTg1NCwgMTE4NTYsIDExODU4LCAxMTg2MCwgMTE4NjIsIDExODY0LCAxMTg2NiwgMTE4NjgsIDExODcwLCAKLSAgICAxMTg3MiwgMTE4NzQsIDExODc2LCAxMTg3OCwgMTE4ODAsIDExODgyLCAxMTg4NCwgMTE4ODYsIDExODg4LCAxMTg5MCwgCi0gICAgMTE4OTIsIDExODk0LCAxMTg5NiwgMTE4OTgsIDExOTAwLCAxMTkwMiwgMTE5MDQsIDExOTA2LCAxMTkwOCwgMTE5MTAsIAotICAgIDExOTEyLCAxMTkxNCwgMTE5MTYsIDExOTE4LCAxMTkyMCwgMTE5MjIsIDExOTI0LCAxMTkyNiwgMTE5MjgsIDExOTMwLCAKLSAgICAxMTkzMiwgMTE5MzQsIDExOTM2LCAxMTkzOCwgMTE5NDAsIDExOTQyLCAxMTk0NCwgMTE5NDYsIDExOTQ4LCAxMTk1MCwgCi0gICAgMTE5NTIsIDExOTU0LCAxMTk1NiwgMTE5NTgsIDExOTYwLCAxMTk2MiwgMTE5NjQsIDExOTY2LCAxMTk2OCwgMTE5NzAsIAotICAgIDExOTcyLCAxMTk3NCwgMTE5NzYsIDExOTc4LCAxMTk4MCwgMTE5ODIsIDExOTg0LCAxMTk4NiwgMTE5ODgsIDExOTkwLCAKLSAgICAxMTk5MiwgMTE5OTQsIDExOTk2LCAxMTk5OCwgMTIwMDAsIDEyMDAyLCAxMjAwNCwgMTIwMDYsIDEyMDA4LCAxMjAxMCwgCi0gICAgMTIwMTIsIDEyMDE0LCAxMjAxNiwgMTIwMTgsIDEyMDIwLCAxMjAyMiwgMTIwMjQsIDEyMDI2LCAxMjAyOCwgMTIwMzAsIAotICAgIDEyMDMyLCAxMjAzNCwgMTIwMzYsIDEyMDM4LCAxMjA0MCwgMTIwNDIsIDEyMDQ0LCAxMjA0NiwgMTIwNDgsIDEyMDUwLCAKLSAgICAxMjA1MiwgMTIwNTQsIDEyMDU2LCAxMjA1OCwgMTIwNjAsIDEyMDYyLCAxMjA2NCwgMTIwNjYsIDEyMDY4LCAxMjA3MCwgCi0gICAgMTIwNzIsIDEyMDc0LCAxMjA3NiwgMTIwNzgsIDEyMDgwLCAxMjA4MiwgMTIwODQsIDEyMDg2LCAxMjA4OCwgMTIwOTAsIAotICAgIDEyMDkyLCAxMjA5NCwgMTIwOTYsIDEyMDk4LCAxMjEwMCwgMTIxMDIsIDEyMTA0LCAxMjEwNiwgMTIxMDgsIDEyMTEwLCAKLSAgICAxMjExMiwgMTIxMTQsIDEyMTE2LCAxMjExOCwgMTIxMjAsIDEyMTIyLCAxMjEyNCwgMTIxMjYsIDEyMTI4LCAxMjEzMCwgCi0gICAgMTIxMzIsIDEyMTM0LCAxMjEzNiwgMTIxMzgsIDEyMTQwLCAxMjE0MiwgMTIxNDQsIDEyMTQ2LCAxMjE0OCwgMTIxNTAsIAotICAgIDEyMTUyLCAxMjE1NCwgMTIxNTYsIDEyMTU4LCAxMjE2MCwgMTIxNjIsIDEyMTY0LCAxMjE2NiwgMTIxNjgsIDEyMTcwLCAKLSAgICAxMjE3MiwgMTIxNzQsIDEyMTc2LCAxMjE3OCwgMTIxODAsIDEyMTgyLCAxMjE4NCwgMTIxODYsIDEyMTg4LCAxMjE5MCwgCi0gICAgMTIxOTIsIDEyMTk0LCAxMjE5NiwgMTIxOTgsIDEyMjAwLCAxMjIwMiwgMTIyMDQsIDEyMjA2LCAxMjIwOCwgMTIyMTAsIAotICAgIDEyMjEyLCAxMjIxNCwgMTIyMTYsIDEyMjE4LCAxMjIyMCwgMTIyMjIsIDEyMjI0LCAxMjIyNiwgMTIyMjgsIDEyMjMwLCAKLSAgICAxMjIzMiwgMTIyMzQsIDEyMjM2LCAxMjIzOCwgMTIyNDAsIDEyMjQyLCAxMjI0NCwgMTIyNDYsIDEyMjQ4LCAxMjI1MCwgCi0gICAgMTIyNTIsIDEyMjU0LCAxMjI1NiwgMTIyNTgsIDEyMjYwLCAxMjI2MiwgMTIyNjQsIDEyMjY2LCAxMjI2OCwgMTIyNzAsIAotICAgIDEyMjcyLCAxMjI3NCwgMTIyNzYsIDEyMjc4LCAxMjI4MCwgMTIyODIsIDEyMjg0LCAxMjI4NiwgMTIyODgsIDEyMjkwLCAKLSAgICAxMjI5MiwgMTIyOTQsIDEyMjk2LCAxMjI5OCwgMTIzMDAsIDEyMzAyLCAxMjMwNCwgMTIzMDYsIDEyMzA4LCAxMjMxMCwgCi0gICAgMTIzMTIsIDEyMzE0LCAxMjMxNiwgMTIzMTgsIDEyMzIwLCAxMjMyMiwgMTIzMjQsIDEyMzI2LCAxMjMyOCwgMTIzMzAsIAotICAgIDEyMzMyLCAxMjMzNCwgMTIzMzYsIDEyMzM4LCAxMjM0MCwgMTIzNDIsIDEyMzQ0LCAxMjM0NiwgMTIzNDgsIDEyMzUwLCAKLSAgICAxMjM1MiwgMTIzNTQsIDEyMzU2LCAxMjM1OCwgMTIzNjAsIDEyMzYyLCAxMjM2NCwgMTIzNjYsIDEyMzY4LCAxMjM3MCwgCi0gICAgMTIzNzIsIDEyMzc0LCAxMjM3NiwgMTIzNzgsIDEyMzgwLCAwLCAwLCAxMjM4MiwgMTIzODQsIDEyMzg2LCAxMjM4OCwgCi0gICAgMTIzOTAsIDEyMzkyLCAxMjM5NCwgMTIzOTYsIDEyMzk4LCAxMjQwMCwgMTI0MDIsIDEyNDA0LCAxMjQwNiwgMTI0MDgsIAotICAgIDEyNDEwLCAxMjQxMiwgMTI0MTQsIDEyNDE2LCAxMjQxOCwgMTI0MjAsIDEyNDIyLCAxMjQyNCwgMTI0MjYsIDEyNDI4LCAKLSAgICAxMjQzMCwgMTI0MzIsIDEyNDM0LCAxMjQzNiwgMTI0MzgsIDEyNDQwLCAxMjQ0MiwgMTI0NDQsIDEyNDQ2LCAxMjQ0OCwgCi0gICAgMTI0NTAsIDEyNDUyLCAxMjQ1NCwgMTI0NTYsIDEyNDU4LCAxMjQ2MCwgMTI0NjIsIDEyNDY0LCAxMjQ2NiwgMTI0NjgsIAotICAgIDEyNDcwLCAxMjQ3MiwgMTI0NzQsIDEyNDc2LCAxMjQ3OCwgMTI0ODAsIDEyNDgyLCAxMjQ4NCwgMTI0ODYsIDEyNDg4LCAwLCAKLSAgICAxMjQ5MCwgMTI0OTIsIDEyNDk0LCAxMjQ5NiwgMTI0OTgsIDEyNTAwLCAxMjUwMiwgMTI1MDQsIDEyNTA2LCAxMjUwOCwgCi0gICAgMTI1MTAsIDEyNTEyLCAxMjUxNCwgMTI1MTYsIDEyNTE4LCAxMjUyMCwgMTI1MjIsIDEyNTI0LCAxMjUyNiwgMTI1MjgsIAotICAgIDEyNTMwLCAxMjUzMiwgMTI1MzQsIDEyNTM2LCAxMjUzOCwgMTI1NDAsIDEyNTQyLCAwLCAxMjU0NCwgMTI1NDYsIDAsIAotICAgIDEyNTQ4LCAwLCAwLCAxMjU1MCwgMCwgMTI1NTIsIDEyNTU0LCAxMjU1NiwgMTI1NTgsIDEyNTYwLCAxMjU2MiwgMTI1NjQsIAotICAgIDEyNTY2LCAxMjU2OCwgMTI1NzAsIDAsIDEyNTcyLCAxMjU3NCwgMTI1NzYsIDEyNTc4LCAwLCAxMjU4MCwgMCwgMTI1ODIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTg0LCAwLCAwLCAwLCAwLCAxMjU4NiwgMCwgMTI1ODgsIDAsIDEyNTkwLCAwLCAxMjU5MiwgCi0gICAgMTI1OTQsIDEyNTk2LCAwLCAxMjU5OCwgMTI2MDAsIDAsIDEyNjAyLCAwLCAwLCAxMjYwNCwgMCwgMTI2MDYsIDAsIDEyNjA4LCAKLSAgICAwLCAxMjYxMCwgMCwgMTI2MTIsIDAsIDEyNjE0LCAxMjYxNiwgMCwgMTI2MTgsIDAsIDAsIDEyNjIwLCAxMjYyMiwgMTI2MjQsIAotICAgIDEyNjI2LCAwLCAxMjYyOCwgMTI2MzAsIDEyNjMyLCAxMjYzNCwgMTI2MzYsIDEyNjM4LCAxMjY0MCwgMCwgMTI2NDIsIAotICAgIDEyNjQ0LCAxMjY0NiwgMTI2NDgsIDAsIDEyNjUwLCAxMjY1MiwgMTI2NTQsIDEyNjU2LCAwLCAxMjY1OCwgMCwgMTI2NjAsIAotICAgIDEyNjYyLCAxMjY2NCwgMTI2NjYsIDEyNjY4LCAxMjY3MCwgMTI2NzIsIDEyNjc0LCAxMjY3NiwgMTI2NzgsIDAsIDEyNjgwLCAKLSAgICAxMjY4MiwgMTI2ODQsIDEyNjg2LCAxMjY4OCwgMTI2OTAsIDEyNjkyLCAxMjY5NCwgMTI2OTYsIDEyNjk4LCAxMjcwMCwgCi0gICAgMTI3MDIsIDEyNzA0LCAxMjcwNiwgMTI3MDgsIDEyNzEwLCAxMjcxMiwgMCwgMCwgMCwgMCwgMCwgMTI3MTQsIDEyNzE2LCAKLSAgICAxMjcxOCwgMCwgMTI3MjAsIDEyNzIyLCAxMjcyNCwgMTI3MjYsIDEyNzI4LCAwLCAxMjczMCwgMTI3MzIsIDEyNzM0LCAKLSAgICAxMjczNiwgMTI3MzgsIDEyNzQwLCAxMjc0MiwgMTI3NDQsIDEyNzQ2LCAxMjc0OCwgMTI3NTAsIDEyNzUyLCAxMjc1NCwgCi0gICAgMTI3NTYsIDEyNzU4LCAxMjc2MCwgMTI3NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NjQsIDY2NjYsIDY2NjgsIDY2NzAsIDY2NzIsIDY2NzQsIDY2NzYsIDY2NzgsIAorICAgIDY2ODAsIDY2ODIsIDY2ODQsIDY2ODYsIDY2ODgsIDY2OTAsIDY2OTIsIDY2OTQsIDY2OTYsIDY2OTgsIDY3MDAsIDY3MDIsIAorICAgIDY3MDQsIDY3MDYsIDY3MDgsIDY3MTAsIDY3MTIsIDY3MTQsIDY3MTYsIDY3MTgsIDY3MjAsIDY3MjIsIDY3MjQsIDY3MjYsIAorICAgIDY3MjgsIDY3MzAsIDY3MzIsIDY3MzQsIDY3MzYsIDY3MzgsIDY3NDAsIDY3NDIsIDY3NDQsIDY3NDYsIDY3NDgsIDY3NTAsIAorICAgIDY3NTIsIDY3NTQsIDY3NTYsIDY3NTgsIDY3NjAsIDY3NjIsIDY3NjQsIDY3NjYsIDY3NjgsIDY3NzAsIDY3NzIsIDY3NzQsIAorICAgIDY3NzYsIDY3NzgsIDY3ODAsIDY3ODIsIDY3ODQsIDY3ODYsIDY3ODgsIDY3OTAsIDY3OTIsIDY3OTQsIDY3OTYsIDY3OTgsIAorICAgIDY4MDAsIDY4MDIsIDY4MDQsIDY4MDYsIDY4MDgsIDY4MTAsIDY4MTIsIDY4MTQsIDY4MTYsIDY4MTgsIDY4MjAsIDY4MjIsIAorICAgIDY4MjQsIDY4MjYsIDY4MjgsIDY4MzAsIDY4MzIsIDY4MzQsIDY4MzYsIDY4MzgsIDY4NDAsIDY4NDIsIDY4NDQsIDY4NDYsIAorICAgIDY4NDgsIDY4NTAsIDY4NTIsIDY4NTQsIDY4NTYsIDY4NTgsIDY4NjAsIDY4NjIsIDY4NjQsIDY4NjYsIDY4NjgsIDY4NzAsIAorICAgIDY4NzIsIDY4NzQsIDY4NzYsIDY4NzgsIDY4ODAsIDY4ODIsIDY4ODQsIDY4ODYsIDY4ODgsIDY4OTAsIDY4OTIsIDY4OTQsIAorICAgIDY4OTYsIDY4OTgsIDY5MDAsIDY5MDIsIDY5MDQsIDY5MDYsIDY5MDgsIDY5MTAsIDY5MTIsIDY5MTQsIDY5MTYsIDY5MTgsIAorICAgIDY5MjAsIDY5MjIsIDY5MjQsIDY5MjYsIDY5MjgsIDY5MzAsIDY5MzIsIDY5MzQsIDY5MzYsIDY5MzgsIDY5NDAsIDY5NDIsIAorICAgIDY5NDQsIDY5NDYsIDY5NDgsIDY5NTAsIDY5NTIsIDY5NTQsIDY5NTYsIDY5NTgsIDY5NjAsIDY5NjIsIDY5NjQsIDY5NjYsIAorICAgIDY5NjgsIDY5NzAsIDY5NzIsIDY5NzQsIDY5NzYsIDY5NzgsIDY5ODAsIDY5ODIsIDY5ODQsIDY5ODYsIDY5ODgsIDY5OTAsIAorICAgIDY5OTIsIDY5OTQsIDY5OTYsIDY5OTgsIDcwMDAsIDcwMDIsIDcwMDQsIDcwMDYsIDcwMDgsIDcwMTAsIDcwMTIsIDcwMTQsIAorICAgIDcwMTYsIDcwMTgsIDcwMjAsIDcwMjIsIDcwMjQsIDcwMjYsIDcwMjgsIDcwMzAsIDcwMzIsIDcwMzQsIDcwMzYsIDcwMzgsIAorICAgIDcwNDAsIDcwNDIsIDcwNDQsIDcwNDYsIDcwNDgsIDcwNTAsIDcwNTIsIDcwNTQsIDcwNTYsIDcwNTgsIDcwNjAsIDcwNjIsIAorICAgIDcwNjQsIDcwNjYsIDcwNjgsIDcwNzAsIDcwNzIsIDcwNzQsIDcwNzYsIDcwNzgsIDcwODAsIDcwODIsIDcwODQsIDcwODYsIAorICAgIDcwODgsIDcwOTAsIDcwOTIsIDcwOTQsIDcwOTYsIDcwOTgsIDcxMDAsIDcxMDIsIDcxMDQsIDcxMDYsIDcxMDgsIDcxMTAsIAorICAgIDcxMTIsIDcxMTQsIDcxMTYsIDcxMTgsIDcxMjAsIDcxMjIsIDcxMjQsIDcxMjYsIDcxMjgsIDcxMzAsIDcxMzIsIDcxMzQsIAorICAgIDcxMzYsIDcxMzgsIDcxNDAsIDcxNDIsIDcxNDQsIDcxNDYsIDcxNDgsIDcxNTAsIDcxNTIsIDcxNTQsIDcxNTYsIDcxNTgsIAorICAgIDcxNjAsIDcxNjIsIDcxNjQsIDcxNjYsIDcxNjgsIDcxNzAsIDcxNzIsIDcxNzQsIDcxNzYsIDcxNzgsIDcxODAsIDcxODIsIAorICAgIDcxODQsIDcxODYsIDcxODgsIDcxOTAsIDcxOTIsIDcxOTQsIDcxOTYsIDcxOTgsIDcyMDAsIDcyMDIsIDAsIDAsIDcyMDQsIAorICAgIDAsIDcyMDYsIDAsIDAsIDcyMDgsIDcyMTAsIDcyMTIsIDcyMTQsIDcyMTYsIDcyMTgsIDcyMjAsIDcyMjIsIDcyMjQsIAorICAgIDcyMjYsIDAsIDcyMjgsIDAsIDcyMzAsIDAsIDAsIDcyMzIsIDcyMzQsIDAsIDAsIDAsIDcyMzYsIDcyMzgsIDcyNDAsIAorICAgIDcyNDIsIDcyNDQsIDcyNDYsIDcyNDgsIDcyNTAsIDcyNTIsIDcyNTQsIDcyNTYsIDcyNTgsIDcyNjAsIDcyNjIsIDcyNjQsIAorICAgIDcyNjYsIDcyNjgsIDcyNzAsIDcyNzIsIDcyNzQsIDcyNzYsIDcyNzgsIDcyODAsIDcyODIsIDcyODQsIDcyODYsIDcyODgsIAorICAgIDcyOTAsIDcyOTIsIDcyOTQsIDcyOTYsIDcyOTgsIDczMDAsIDczMDIsIDczMDQsIDczMDYsIDczMDgsIDczMTAsIDczMTIsIAorICAgIDczMTQsIDczMTYsIDczMTgsIDczMjAsIDczMjIsIDczMjQsIDczMjYsIDczMjgsIDczMzAsIDczMzIsIDczMzQsIDczMzYsIAorICAgIDczMzgsIDczNDAsIDczNDIsIDczNDQsIDczNDYsIDczNDgsIDczNTAsIDczNTIsIDczNTQsIDczNTYsIDczNTgsIDczNjAsIAorICAgIDczNjIsIDczNjQsIDczNjYsIDczNjgsIDczNzAsIDAsIDAsIDczNzIsIDczNzQsIDczNzYsIDczNzgsIDczODAsIDczODIsIAorICAgIDczODQsIDczODYsIDczODgsIDczOTAsIDczOTIsIDczOTQsIDczOTYsIDczOTgsIDc0MDAsIDc0MDIsIDc0MDQsIDc0MDYsIAorICAgIDc0MDgsIDc0MTAsIDc0MTIsIDc0MTQsIDc0MTYsIDc0MTgsIDc0MjAsIDc0MjIsIDc0MjQsIDc0MjYsIDc0MjgsIDc0MzAsIAorICAgIDc0MzIsIDc0MzQsIDc0MzYsIDc0MzgsIDc0NDAsIDc0NDIsIDc0NDQsIDc0NDYsIDc0NDgsIDc0NTAsIDc0NTIsIDc0NTQsIAorICAgIDc0NTYsIDc0NTgsIDc0NjAsIDc0NjIsIDc0NjQsIDc0NjYsIDc0NjgsIDc0NzAsIDc0NzIsIDc0NzQsIDc0NzYsIDc0NzgsIAorICAgIDc0ODAsIDc0ODIsIDc0ODQsIDc0ODYsIDc0ODgsIDc0OTAsIDc0OTIsIDc0OTQsIDc0OTYsIDc0OTgsIDc1MDAsIDc1MDIsIAorICAgIDc1MDQsIDc1MDYsIDc1MDgsIDc1MTAsIDc1MTIsIDc1MTQsIDc1MTYsIDc1MTgsIDc1MjAsIDc1MjIsIDc1MjQsIDc1MjYsIAorICAgIDc1MjgsIDc1MzAsIDc1MzIsIDc1MzQsIDc1MzYsIDc1MzgsIDc1NDAsIDc1NDIsIDc1NDQsIDc1NDYsIDc1NDgsIDc1NTAsIAorICAgIDc1NTIsIDc1NTQsIDc1NTYsIDc1NTgsIDc1NjAsIDc1NjIsIDc1NjQsIDc1NjYsIDc1NjgsIDc1NzAsIDc1NzIsIDc1NzQsIAorICAgIDc1NzYsIDc1NzgsIDc1ODAsIDc1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1ODQsIAorICAgIDc1ODcsIDc1OTAsIDc1OTMsIDc1OTcsIDc2MDEsIDc2MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDc2MDcsIDc2MTAsIDc2MTMsIDc2MTYsIDc2MTksIDAsIDAsIDAsIDAsIDAsIDc2MjIsIDAsIDc2MjUsIDc2MjgsIDc2MzAsIAorICAgIDc2MzIsIDc2MzQsIDc2MzYsIDc2MzgsIDc2NDAsIDc2NDIsIDc2NDQsIDc2NDYsIDc2NDgsIDc2NTEsIDc2NTQsIDc2NTcsIAorICAgIDc2NjAsIDc2NjMsIDc2NjYsIDc2NjksIDc2NzIsIDc2NzUsIDc2NzgsIDc2ODEsIDc2ODQsIDAsIDc2ODcsIDc2OTAsIAorICAgIDc2OTMsIDc2OTYsIDc2OTksIDAsIDc3MDIsIDAsIDc3MDUsIDc3MDgsIDAsIDc3MTEsIDc3MTQsIDAsIDc3MTcsIDc3MjAsIAorICAgIDc3MjMsIDc3MjYsIDc3MjksIDc3MzIsIDc3MzUsIDc3MzgsIDc3NDEsIDc3NDQsIDc3NDcsIDc3NDksIDc3NTEsIDc3NTMsIAorICAgIDc3NTUsIDc3NTcsIDc3NTksIDc3NjEsIDc3NjMsIDc3NjUsIDc3NjcsIDc3NjksIDc3NzEsIDc3NzMsIDc3NzUsIDc3NzcsIAorICAgIDc3NzksIDc3ODEsIDc3ODMsIDc3ODUsIDc3ODcsIDc3ODksIDc3OTEsIDc3OTMsIDc3OTUsIDc3OTcsIDc3OTksIDc4MDEsIAorICAgIDc4MDMsIDc4MDUsIDc4MDcsIDc4MDksIDc4MTEsIDc4MTMsIDc4MTUsIDc4MTcsIDc4MTksIDc4MjEsIDc4MjMsIDc4MjUsIAorICAgIDc4MjcsIDc4MjksIDc4MzEsIDc4MzMsIDc4MzUsIDc4MzcsIDc4MzksIDc4NDEsIDc4NDMsIDc4NDUsIDc4NDcsIDc4NDksIAorICAgIDc4NTEsIDc4NTMsIDc4NTUsIDc4NTcsIDc4NTksIDc4NjEsIDc4NjMsIDc4NjUsIDc4NjcsIDc4NjksIDc4NzEsIDc4NzMsIAorICAgIDc4NzUsIDc4NzcsIDc4NzksIDc4ODEsIDc4ODMsIDc4ODUsIDc4ODcsIDc4ODksIDc4OTEsIDc4OTMsIDc4OTUsIDc4OTcsIAorICAgIDc4OTksIDc5MDEsIDc5MDMsIDc5MDUsIDc5MDcsIDc5MDksIDc5MTEsIDc5MTMsIDc5MTUsIDc5MTcsIDc5MTksIDc5MjEsIAorICAgIDc5MjMsIDc5MjUsIDc5MjcsIDc5MjksIDc5MzEsIDc5MzMsIDc5MzUsIDc5MzcsIDc5MzksIDc5NDEsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDc5NDMsIDc5NDUsIDc5NDcsIDc5NDksIDc5NTEsIDc5NTMsIDc5NTUsIDc5NTcsIDc5NTksIAorICAgIDc5NjEsIDc5NjMsIDc5NjUsIDc5NjcsIDc5NjksIDc5NzEsIDc5NzMsIDc5NzUsIDc5NzcsIDc5NzksIDc5ODEsIDc5ODMsIAorICAgIDc5ODUsIDc5ODcsIDc5ODksIDc5OTIsIDc5OTUsIDc5OTgsIDgwMDEsIDgwMDQsIDgwMDcsIDgwMTAsIDgwMTMsIDgwMTYsIAorICAgIDgwMTksIDgwMjIsIDgwMjUsIDgwMjgsIDgwMzEsIDgwMzQsIDgwMzcsIDgwNDAsIDgwNDMsIDgwNDUsIDgwNDcsIDgwNDksIAorICAgIDgwNTEsIDgwNTQsIDgwNTcsIDgwNjAsIDgwNjMsIDgwNjYsIDgwNjksIDgwNzIsIDgwNzUsIDgwNzgsIDgwODEsIDgwODQsIAorICAgIDgwODcsIDgwOTAsIDgwOTMsIDgwOTYsIDgwOTksIDgxMDIsIDgxMDUsIDgxMDgsIDgxMTEsIDgxMTQsIDgxMTcsIDgxMjAsIAorICAgIDgxMjMsIDgxMjYsIDgxMjksIDgxMzIsIDgxMzUsIDgxMzgsIDgxNDEsIDgxNDQsIDgxNDcsIDgxNTAsIDgxNTMsIDgxNTYsIAorICAgIDgxNTksIDgxNjIsIDgxNjUsIDgxNjgsIDgxNzEsIDgxNzQsIDgxNzcsIDgxODAsIDgxODMsIDgxODYsIDgxODksIDgxOTIsIAorICAgIDgxOTUsIDgxOTgsIDgyMDEsIDgyMDQsIDgyMDcsIDgyMTAsIDgyMTMsIDgyMTYsIDgyMTksIDgyMjIsIDgyMjUsIDgyMjgsIAorICAgIDgyMzEsIDgyMzQsIDgyMzcsIDgyNDAsIDgyNDMsIDgyNDYsIDgyNDksIDgyNTIsIDgyNTUsIDgyNTgsIDgyNjEsIDgyNjQsIAorICAgIDgyNjcsIDgyNzAsIDgyNzMsIDgyNzYsIDgyNzksIDgyODIsIDgyODUsIDgyODgsIDgyOTEsIDgyOTQsIDgyOTcsIDgzMDAsIAorICAgIDgzMDMsIDgzMDYsIDgzMDksIDgzMTIsIDgzMTUsIDgzMTgsIDgzMjEsIDgzMjQsIDgzMjcsIDgzMzAsIDgzMzMsIDgzMzcsIAorICAgIDgzNDEsIDgzNDUsIDgzNDksIDgzNTMsIDgzNTcsIDgzNjAsIDgzNjMsIDgzNjYsIDgzNjksIDgzNzIsIDgzNzUsIDgzNzgsIAorICAgIDgzODEsIDgzODQsIDgzODcsIDgzOTAsIDgzOTMsIDgzOTYsIDgzOTksIDg0MDIsIDg0MDUsIDg0MDgsIDg0MTEsIDg0MTQsIAorICAgIDg0MTcsIDg0MjAsIDg0MjMsIDg0MjYsIDg0MjksIDg0MzIsIDg0MzUsIDg0MzgsIDg0NDEsIDg0NDQsIDg0NDcsIDg0NTAsIAorICAgIDg0NTMsIDg0NTYsIDg0NTksIDg0NjIsIDg0NjUsIDg0NjgsIDg0NzEsIDg0NzQsIDg0NzcsIDg0ODAsIDg0ODMsIDg0ODYsIAorICAgIDg0ODksIDg0OTIsIDg0OTUsIDg0OTgsIDg1MDEsIDg1MDQsIDg1MDcsIDg1MTAsIDg1MTMsIDg1MTYsIDg1MTksIDg1MjIsIAorICAgIDg1MjUsIDg1MjgsIDg1MzEsIDg1MzQsIDg1MzcsIDg1NDAsIDg1NDMsIDg1NDYsIDg1NDksIDg1NTIsIDg1NTUsIDg1NTgsIAorICAgIDg1NjEsIDg1NjQsIDg1NjcsIDg1NzAsIDg1NzMsIDg1NzYsIDg1NzksIDg1ODIsIDg1ODUsIDg1ODgsIDg1OTEsIDg1OTQsIAorICAgIDg1OTcsIDg2MDAsIDg2MDMsIDg2MDYsIDg2MDksIDg2MTIsIDg2MTUsIDg2MTgsIDg2MjEsIDg2MjQsIDg2MjcsIDg2MzAsIAorICAgIDg2MzMsIDg2MzYsIDg2MzksIDg2NDIsIDg2NDUsIDg2NDgsIDg2NTEsIDg2NTQsIDg2NTcsIDg2NjAsIDg2NjMsIDg2NjYsIAorICAgIDg2NjksIDg2NzIsIDg2NzUsIDg2NzgsIDg2ODEsIDg2ODQsIDg2ODcsIDg2OTAsIDg2OTMsIDg2OTYsIDg2OTksIDg3MDIsIAorICAgIDg3MDUsIDg3MDgsIDg3MTEsIDg3MTQsIDg3MTcsIDg3MjAsIDg3MjMsIDg3MjYsIDg3MjksIDg3MzIsIDg3MzUsIDg3MzgsIAorICAgIDg3NDEsIDg3NDQsIDg3NDcsIDg3NTAsIDg3NTMsIDg3NTYsIDg3NTksIDg3NjIsIDg3NjUsIDg3NjgsIDg3NzEsIDg3NzQsIAorICAgIDg3NzcsIDg3ODAsIDg3ODMsIDg3ODcsIDg3OTEsIDg3OTUsIDg3OTgsIDg4MDEsIDg4MDQsIDg4MDcsIDg4MTAsIDg4MTMsIAorICAgIDg4MTYsIDg4MTksIDg4MjIsIDg4MjUsIDg4MjgsIDg4MzEsIDg4MzQsIDg4MzcsIDg4NDAsIDg4NDMsIDg4NDYsIDg4NDksIAorICAgIDg4NTIsIDg4NTUsIDg4NTgsIDg4NjEsIDg4NjQsIDg4NjcsIDg4NzAsIDg4NzMsIDg4NzYsIDg4NzksIDg4ODIsIDg4ODUsIAorICAgIDg4ODgsIDg4OTEsIDg4OTQsIDg4OTcsIDg5MDAsIDg5MDMsIDg5MDYsIDg5MDksIDg5MTIsIDg5MTUsIDg5MTgsIDg5MjEsIAorICAgIDg5MjQsIDg5MjcsIDg5MzAsIDg5MzMsIDg5MzYsIDg5MzksIDg5NDIsIDg5NDUsIDg5NDgsIDg5NTEsIDg5NTQsIDg5NTcsIAorICAgIDg5NjAsIDg5NjMsIDg5NjYsIDg5NjksIDg5NzIsIDg5NzUsIDg5NzgsIDg5ODEsIDg5ODQsIDg5ODcsIDg5OTAsIDg5OTMsIAorICAgIDg5OTYsIDg5OTksIDkwMDIsIDkwMDUsIDkwMDgsIDkwMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDkwMTQsIDkwMTgsIDkwMjIsIDkwMjYsIDkwMzAsIDkwMzQsIDkwMzgsIDkwNDIsIDkwNDYsIAorICAgIDkwNTAsIDkwNTQsIDkwNTgsIDkwNjIsIDkwNjYsIDkwNzAsIDkwNzQsIDkwNzgsIDkwODIsIDkwODYsIDkwOTAsIDkwOTQsIAorICAgIDkwOTgsIDkxMDIsIDkxMDYsIDkxMTAsIDkxMTQsIDkxMTgsIDkxMjIsIDkxMjYsIDkxMzAsIDkxMzQsIDkxMzgsIDkxNDIsIAorICAgIDkxNDYsIDkxNTAsIDkxNTQsIDkxNTgsIDkxNjIsIDkxNjYsIDkxNzAsIDkxNzQsIDkxNzgsIDkxODIsIDkxODYsIDkxOTAsIAorICAgIDkxOTQsIDkxOTgsIDkyMDIsIDkyMDYsIDkyMTAsIDkyMTQsIDkyMTgsIDkyMjIsIDkyMjYsIDkyMzAsIDkyMzQsIDkyMzgsIAorICAgIDkyNDIsIDkyNDYsIDkyNTAsIDkyNTQsIDkyNTgsIDkyNjIsIDkyNjYsIDAsIDAsIDkyNzAsIDkyNzQsIDkyNzgsIDkyODIsIAorICAgIDkyODYsIDkyOTAsIDkyOTQsIDkyOTgsIDkzMDIsIDkzMDYsIDkzMTAsIDkzMTQsIDkzMTgsIDkzMjIsIDkzMjYsIDkzMzAsIAorICAgIDkzMzQsIDkzMzgsIDkzNDIsIDkzNDYsIDkzNTAsIDkzNTQsIDkzNTgsIDkzNjIsIDkzNjYsIDkzNzAsIDkzNzQsIDkzNzgsIAorICAgIDkzODIsIDkzODYsIDkzOTAsIDkzOTQsIDkzOTgsIDk0MDIsIDk0MDYsIDk0MTAsIDk0MTQsIDk0MTgsIDk0MjIsIDk0MjYsIAorICAgIDk0MzAsIDk0MzQsIDk0MzgsIDk0NDIsIDk0NDYsIDk0NTAsIDk0NTQsIDk0NTgsIDk0NjIsIDk0NjYsIDk0NzAsIDk0NzQsIAorICAgIDk0NzgsIDk0ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0ODYsIDk0OTAsIAorICAgIDk0OTQsIDk0OTksIDk1MDQsIDk1MDksIDk1MTQsIDk1MTksIDk1MjQsIDk1MjksIDk1MzMsIDk1NTIsIDk1NjEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NjYsIDk1NjgsIDk1NzAsIAorICAgIDk1NzIsIDk1NzQsIDk1NzYsIDk1NzgsIDk1ODAsIDk1ODIsIDk1ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1ODYsIDk1ODgsIDk1OTAsIDk1OTIsIDk1OTQsIDk1OTYsIAorICAgIDk1OTgsIDk2MDAsIDk2MDIsIDk2MDQsIDk2MDYsIDk2MDgsIDk2MTAsIDk2MTIsIDk2MTQsIDk2MTYsIDk2MTgsIDk2MjAsIAorICAgIDk2MjIsIDk2MjQsIDk2MjYsIDAsIDAsIDk2MjgsIDk2MzAsIDk2MzIsIDk2MzQsIDk2MzYsIDk2MzgsIDk2NDAsIDk2NDIsIAorICAgIDk2NDQsIDk2NDYsIDk2NDgsIDk2NTAsIDAsIDk2NTIsIDk2NTQsIDk2NTYsIDk2NTgsIDk2NjAsIDk2NjIsIDk2NjQsIAorICAgIDk2NjYsIDk2NjgsIDk2NzAsIDk2NzIsIDk2NzQsIDk2NzYsIDk2NzgsIDk2ODAsIDk2ODIsIDk2ODQsIDk2ODYsIDk2ODgsIAorICAgIDAsIDk2OTAsIDk2OTIsIDk2OTQsIDk2OTYsIDAsIDAsIDAsIDAsIDk2OTgsIDk3MDEsIDk3MDQsIDAsIDk3MDcsIDAsIAorICAgIDk3MTAsIDk3MTMsIDk3MTYsIDk3MTksIDk3MjIsIDk3MjUsIDk3MjgsIDk3MzEsIDk3MzQsIDk3MzcsIDk3NDAsIDk3NDIsIAorICAgIDk3NDQsIDk3NDYsIDk3NDgsIDk3NTAsIDk3NTIsIDk3NTQsIDk3NTYsIDk3NTgsIDk3NjAsIDk3NjIsIDk3NjQsIDk3NjYsIAorICAgIDk3NjgsIDk3NzAsIDk3NzIsIDk3NzQsIDk3NzYsIDk3NzgsIDk3ODAsIDk3ODIsIDk3ODQsIDk3ODYsIDk3ODgsIDk3OTAsIAorICAgIDk3OTIsIDk3OTQsIDk3OTYsIDk3OTgsIDk4MDAsIDk4MDIsIDk4MDQsIDk4MDYsIDk4MDgsIDk4MTAsIDk4MTIsIDk4MTQsIAorICAgIDk4MTYsIDk4MTgsIDk4MjAsIDk4MjIsIDk4MjQsIDk4MjYsIDk4MjgsIDk4MzAsIDk4MzIsIDk4MzQsIDk4MzYsIDk4MzgsIAorICAgIDk4NDAsIDk4NDIsIDk4NDQsIDk4NDYsIDk4NDgsIDk4NTAsIDk4NTIsIDk4NTQsIDk4NTYsIDk4NTgsIDk4NjAsIDk4NjIsIAorICAgIDk4NjQsIDk4NjYsIDk4NjgsIDk4NzAsIDk4NzIsIDk4NzQsIDk4NzYsIDk4NzgsIDk4ODAsIDk4ODIsIDk4ODQsIDk4ODYsIAorICAgIDk4ODgsIDk4OTAsIDk4OTIsIDk4OTQsIDk4OTYsIDk4OTgsIDk5MDAsIDk5MDIsIDk5MDQsIDk5MDYsIDk5MDgsIDk5MTAsIAorICAgIDk5MTIsIDk5MTQsIDk5MTYsIDk5MTgsIDk5MjAsIDk5MjIsIDk5MjQsIDk5MjYsIDk5MjgsIDk5MzAsIDk5MzIsIDk5MzQsIAorICAgIDk5MzYsIDk5MzgsIDk5NDAsIDk5NDIsIDk5NDQsIDk5NDYsIDk5NDgsIDk5NTAsIDk5NTIsIDk5NTQsIDk5NTYsIDk5NTgsIAorICAgIDk5NjAsIDk5NjIsIDk5NjQsIDk5NjYsIDk5NjgsIDk5NzAsIDk5NzIsIDk5NzQsIDk5NzcsIDk5ODAsIDk5ODMsIDk5ODYsIAorICAgIDk5ODksIDk5OTIsIDk5OTUsIDAsIDAsIDAsIDAsIDk5OTgsIDEwMDAwLCAxMDAwMiwgMTAwMDQsIDEwMDA2LCAxMDAwOCwgCisgICAgMTAwMTAsIDEwMDEyLCAxMDAxNCwgMTAwMTYsIDEwMDE4LCAxMDAyMCwgMTAwMjIsIDEwMDI0LCAxMDAyNiwgMTAwMjgsIAorICAgIDEwMDMwLCAxMDAzMiwgMTAwMzQsIDEwMDM2LCAxMDAzOCwgMTAwNDAsIDEwMDQyLCAxMDA0NCwgMTAwNDYsIDEwMDQ4LCAKKyAgICAxMDA1MCwgMTAwNTIsIDEwMDU0LCAxMDA1NiwgMTAwNTgsIDEwMDYwLCAxMDA2MiwgMTAwNjQsIDEwMDY2LCAxMDA2OCwgCisgICAgMTAwNzAsIDEwMDcyLCAxMDA3NCwgMTAwNzYsIDEwMDc4LCAxMDA4MCwgMTAwODIsIDEwMDg0LCAxMDA4NiwgMTAwODgsIAorICAgIDEwMDkwLCAxMDA5MiwgMTAwOTQsIDEwMDk2LCAxMDA5OCwgMTAxMDAsIDEwMTAyLCAxMDEwNCwgMTAxMDYsIDEwMTA4LCAKKyAgICAxMDExMCwgMTAxMTIsIDEwMTE0LCAxMDExNiwgMTAxMTgsIDEwMTIwLCAxMDEyMiwgMTAxMjQsIDEwMTI2LCAxMDEyOCwgCisgICAgMTAxMzAsIDEwMTMyLCAxMDEzNCwgMTAxMzYsIDEwMTM4LCAxMDE0MCwgMTAxNDIsIDEwMTQ0LCAxMDE0NiwgMTAxNDgsIAorICAgIDEwMTUwLCAxMDE1MiwgMTAxNTQsIDEwMTU2LCAxMDE1OCwgMTAxNjAsIDEwMTYyLCAxMDE2NCwgMTAxNjYsIDEwMTY4LCAKKyAgICAxMDE3MCwgMTAxNzIsIDEwMTc0LCAxMDE3NiwgMTAxNzgsIDEwMTgwLCAxMDE4MiwgMTAxODQsIDEwMTg2LCAxMDE4OCwgCisgICAgMTAxOTAsIDEwMTkyLCAxMDE5NCwgMTAxOTYsIDEwMTk4LCAxMDIwMCwgMTAyMDIsIDEwMjA0LCAxMDIwNiwgMTAyMDgsIAorICAgIDEwMjEwLCAxMDIxMiwgMTAyMTQsIDEwMjE2LCAxMDIxOCwgMTAyMjAsIDEwMjIyLCAxMDIyNCwgMTAyMjYsIDEwMjI4LCAKKyAgICAxMDIzMCwgMTAyMzIsIDEwMjM0LCAxMDIzNiwgMTAyMzgsIDEwMjQwLCAxMDI0MiwgMTAyNDQsIDEwMjQ2LCAxMDI0OCwgCisgICAgMTAyNTAsIDEwMjUyLCAxMDI1NCwgMTAyNTYsIDEwMjU4LCAxMDI2MCwgMTAyNjIsIDEwMjY0LCAxMDI2NiwgMTAyNjgsIAorICAgIDEwMjcwLCAxMDI3MiwgMTAyNzQsIDEwMjc2LCAxMDI3OCwgMTAyODAsIDEwMjgyLCAxMDI4NCwgMTAyODYsIDEwMjg4LCAKKyAgICAxMDI5MCwgMTAyOTIsIDEwMjk0LCAxMDI5NiwgMTAyOTgsIDEwMzAwLCAxMDMwMiwgMTAzMDQsIDEwMzA2LCAxMDMwOCwgCisgICAgMTAzMTAsIDEwMzEyLCAxMDMxNCwgMTAzMTYsIDEwMzE4LCAxMDMyMCwgMTAzMjIsIDEwMzI0LCAxMDMyNiwgMTAzMjgsIAorICAgIDEwMzMwLCAxMDMzMiwgMTAzMzQsIDEwMzM2LCAxMDMzOCwgMTAzNDAsIDEwMzQyLCAxMDM0NCwgMTAzNDYsIDEwMzQ4LCAKKyAgICAxMDM1MCwgMTAzNTIsIDEwMzU0LCAxMDM1NiwgMTAzNTgsIDEwMzYwLCAxMDM2MiwgMTAzNjQsIDEwMzY2LCAxMDM2OCwgCisgICAgMTAzNzAsIDEwMzcyLCAxMDM3NCwgMTAzNzYsIDAsIDAsIDAsIDEwMzc4LCAxMDM4MCwgMTAzODIsIDEwMzg0LCAxMDM4NiwgCisgICAgMTAzODgsIDAsIDAsIDEwMzkwLCAxMDM5MiwgMTAzOTQsIDEwMzk2LCAxMDM5OCwgMTA0MDAsIDAsIDAsIDEwNDAyLCAKKyAgICAxMDQwNCwgMTA0MDYsIDEwNDA4LCAxMDQxMCwgMTA0MTIsIDAsIDAsIDEwNDE0LCAxMDQxNiwgMTA0MTgsIDAsIDAsIDAsIAorICAgIDEwNDIwLCAxMDQyMiwgMTA0MjQsIDEwNDI2LCAxMDQyOCwgMTA0MzAsIDEwNDMyLCAwLCAxMDQzNCwgMTA0MzYsIDEwNDM4LCAKKyAgICAxMDQ0MCwgMTA0NDIsIDEwNDQ0LCAxMDQ0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTI3NjQsIDEyNzY3LCAxMjc3MCwgMTI3NzMsIDEyNzc2LCAxMjc3OSwgMTI3ODIsIDEyNzg1LCAKLSAgICAxMjc4OCwgMTI3OTEsIDEyNzk0LCAwLCAwLCAwLCAwLCAwLCAxMjc5NywgMTI4MDEsIDEyODA1LCAxMjgwOSwgMTI4MTMsIAotICAgIDEyODE3LCAxMjgyMSwgMTI4MjUsIDEyODI5LCAxMjgzMywgMTI4MzcsIDEyODQxLCAxMjg0NSwgMTI4NDksIDEyODUzLCAKLSAgICAxMjg1NywgMTI4NjEsIDEyODY1LCAxMjg2OSwgMTI4NzMsIDEyODc3LCAxMjg4MSwgMTI4ODUsIDEyODg5LCAxMjg5MywgCi0gICAgMTI4OTcsIDEyOTAxLCAxMjkwNSwgMTI5MDcsIDEyOTA5LCAxMjkxMiwgMCwgMTI5MTUsIDEyOTE3LCAxMjkxOSwgMTI5MjEsIAotICAgIDEyOTIzLCAxMjkyNSwgMTI5MjcsIDEyOTI5LCAxMjkzMSwgMTI5MzMsIDEyOTM1LCAxMjkzNywgMTI5MzksIDEyOTQxLCAKLSAgICAxMjk0MywgMTI5NDUsIDEyOTQ3LCAxMjk0OSwgMTI5NTEsIDEyOTUzLCAxMjk1NSwgMTI5NTcsIDEyOTU5LCAxMjk2MSwgCi0gICAgMTI5NjMsIDEyOTY1LCAxMjk2NywgMTI5NzAsIDEyOTczLCAxMjk3NiwgMTI5NzksIDEyOTgzLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk4NiwgMTI5ODksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMDQ0OCwgMCwgMTA0NTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjk5NSwgMTI5OTgsIDEzMDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMzAwMywgMTMwMDUsIDEzMDA3LCAxMzAwOSwgMTMwMTEsIDEzMDEzLCAxMzAxNSwgMTMwMTcsIDEzMDE5LCAxMzAyMSwgCi0gICAgMTMwMjMsIDEzMDI1LCAxMzAyNywgMTMwMjksIDEzMDMxLCAxMzAzMywgMTMwMzUsIDEzMDM3LCAxMzAzOSwgMTMwNDEsIAotICAgIDEzMDQzLCAxMzA0NSwgMTMwNDcsIDEzMDQ5LCAxMzA1MSwgMTMwNTMsIDEzMDU1LCAxMzA1NywgMTMwNTksIDEzMDYxLCAKLSAgICAxMzA2MywgMTMwNjUsIDEzMDY3LCAxMzA2OSwgMTMwNzEsIDEzMDczLCAxMzA3NSwgMTMwNzcsIDEzMDc5LCAxMzA4MSwgCi0gICAgMTMwODMsIDEzMDg1LCAxMzA4NywgMCwgMCwgMCwgMCwgMCwgMTMwODksIDEzMDkzLCAxMzA5NywgMTMxMDEsIDEzMTA1LCAKLSAgICAxMzEwOSwgMTMxMTMsIDEzMTE3LCAxMzEyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMjUsIDEzMTI3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQ1NywgMTA0NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwNDYzLCAxMDQ2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTMxMjksIDEzMTMxLCAxMzEzMywgMTMxMzUsIDEzMTM3LCAxMzEzOSwgMTMxNDEsIDEzMTQzLCAxMzE0NSwgCi0gICAgMTMxNDcsIDEzMTQ5LCAxMzE1MSwgMTMxNTMsIDEzMTU1LCAxMzE1NywgMTMxNTksIDEzMTYxLCAxMzE2MywgMTMxNjUsIAotICAgIDEzMTY3LCAxMzE2OSwgMTMxNzEsIDEzMTczLCAxMzE3NSwgMTMxNzcsIDEzMTc5LCAxMzE4MSwgMTMxODMsIDEzMTg1LCAKLSAgICAxMzE4NywgMTMxODksIDEzMTkxLCAxMzE5MywgMTMxOTUsIDEzMTk3LCAxMzE5OSwgMTMyMDEsIDEzMjAzLCAxMzIwNSwgCi0gICAgMTMyMDcsIDEzMjA5LCAxMzIxMSwgMTMyMTMsIDEzMjE1LCAxMzIxNywgMTMyMTksIDEzMjIxLCAxMzIyMywgMTMyMjUsIAotICAgIDEzMjI3LCAxMzIyOSwgMTMyMzEsIDEzMjMzLCAxMzIzNSwgMTMyMzcsIDEzMjM5LCAxMzI0MSwgMTMyNDMsIDEzMjQ1LCAKLSAgICAxMzI0NywgMTMyNDksIDEzMjUxLCAxMzI1MywgMTMyNTUsIDEzMjU3LCAxMzI1OSwgMTMyNjEsIDEzMjYzLCAxMzI2NSwgCi0gICAgMTMyNjcsIDEzMjY5LCAxMzI3MSwgMTMyNzMsIDEzMjc1LCAxMzI3NywgMTMyNzksIDEzMjgxLCAxMzI4MywgMTMyODUsIAotICAgIDEzMjg3LCAxMzI4OSwgMTMyOTEsIDEzMjkzLCAxMzI5NSwgMTMyOTcsIDEzMjk5LCAxMzMwMSwgMTMzMDMsIDEzMzA1LCAKLSAgICAxMzMwNywgMTMzMDksIDEzMzExLCAxMzMxMywgMTMzMTUsIDEzMzE3LCAxMzMxOSwgMTMzMjEsIDEzMzIzLCAxMzMyNSwgCi0gICAgMTMzMjcsIDEzMzI5LCAxMzMzMSwgMTMzMzMsIDEzMzM1LCAxMzMzNywgMTMzMzksIDEzMzQxLCAxMzM0MywgMTMzNDUsIAotICAgIDEzMzQ3LCAxMzM0OSwgMTMzNTEsIDEzMzUzLCAxMzM1NSwgMTMzNTcsIDEzMzU5LCAxMzM2MSwgMTMzNjMsIDEzMzY1LCAKLSAgICAxMzM2NywgMTMzNjksIDEzMzcxLCAxMzM3MywgMTMzNzUsIDEzMzc3LCAxMzM3OSwgMTMzODEsIDEzMzgzLCAxMzM4NSwgCi0gICAgMTMzODcsIDEzMzg5LCAxMzM5MSwgMTMzOTMsIDEzMzk1LCAxMzM5NywgMTMzOTksIDEzNDAxLCAxMzQwMywgMTM0MDUsIAotICAgIDEzNDA3LCAxMzQwOSwgMTM0MTEsIDEzNDEzLCAxMzQxNSwgMTM0MTcsIDEzNDE5LCAxMzQyMSwgMTM0MjMsIDEzNDI1LCAKLSAgICAxMzQyNywgMTM0MjksIDEzNDMxLCAxMzQzMywgMTM0MzUsIDEzNDM3LCAxMzQzOSwgMTM0NDEsIDEzNDQzLCAxMzQ0NSwgCi0gICAgMTM0NDcsIDEzNDQ5LCAxMzQ1MSwgMTM0NTMsIDEzNDU1LCAxMzQ1NywgMTM0NTksIDEzNDYxLCAxMzQ2MywgMTM0NjUsIAotICAgIDEzNDY3LCAxMzQ2OSwgMTM0NzEsIDEzNDczLCAxMzQ3NSwgMTM0NzcsIDEzNDc5LCAxMzQ4MSwgMTM0ODMsIDEzNDg1LCAKLSAgICAxMzQ4NywgMTM0ODksIDEzNDkxLCAxMzQ5MywgMTM0OTUsIDEzNDk3LCAxMzQ5OSwgMTM1MDEsIDEzNTAzLCAxMzUwNSwgCi0gICAgMTM1MDcsIDEzNTA5LCAxMzUxMSwgMTM1MTMsIDEzNTE1LCAxMzUxNywgMTM1MTksIDEzNTIxLCAxMzUyMywgMTM1MjUsIAotICAgIDEzNTI3LCAxMzUyOSwgMTM1MzEsIDEzNTMzLCAxMzUzNSwgMTM1MzcsIDEzNTM5LCAxMzU0MSwgMTM1NDMsIDEzNTQ1LCAKLSAgICAxMzU0NywgMTM1NDksIDEzNTUxLCAxMzU1MywgMTM1NTUsIDEzNTU3LCAxMzU1OSwgMTM1NjEsIDEzNTYzLCAxMzU2NSwgCi0gICAgMTM1NjcsIDEzNTY5LCAxMzU3MSwgMTM1NzMsIDEzNTc1LCAxMzU3NywgMTM1NzksIDEzNTgxLCAxMzU4MywgMTM1ODUsIAotICAgIDEzNTg3LCAxMzU4OSwgMTM1OTEsIDEzNTkzLCAxMzU5NSwgMTM1OTcsIDEzNTk5LCAxMzYwMSwgMTM2MDMsIDEzNjA1LCAKLSAgICAxMzYwNywgMTM2MDksIDEzNjExLCAxMzYxMywgMTM2MTUsIDEzNjE3LCAxMzYxOSwgMTM2MjEsIDEzNjIzLCAxMzYyNSwgCi0gICAgMTM2MjcsIDEzNjI5LCAxMzYzMSwgMTM2MzMsIDEzNjM1LCAxMzYzNywgMTM2MzksIDEzNjQxLCAxMzY0MywgMTM2NDUsIAotICAgIDEzNjQ3LCAxMzY0OSwgMTM2NTEsIDEzNjUzLCAxMzY1NSwgMTM2NTcsIDEzNjU5LCAxMzY2MSwgMTM2NjMsIDEzNjY1LCAKLSAgICAxMzY2NywgMTM2NjksIDEzNjcxLCAxMzY3MywgMTM2NzUsIDEzNjc3LCAxMzY3OSwgMTM2ODEsIDEzNjgzLCAxMzY4NSwgCi0gICAgMTM2ODcsIDEzNjg5LCAxMzY5MSwgMTM2OTMsIDEzNjk1LCAxMzY5NywgMTM2OTksIDEzNzAxLCAxMzcwMywgMTM3MDUsIAotICAgIDEzNzA3LCAxMzcwOSwgMTM3MTEsIDEzNzEzLCAxMzcxNSwgMTM3MTcsIDEzNzE5LCAxMzcyMSwgMTM3MjMsIDEzNzI1LCAKLSAgICAxMzcyNywgMTM3MjksIDEzNzMxLCAxMzczMywgMTM3MzUsIDEzNzM3LCAxMzczOSwgMTM3NDEsIDEzNzQzLCAxMzc0NSwgCi0gICAgMTM3NDcsIDEzNzQ5LCAxMzc1MSwgMTM3NTMsIDEzNzU1LCAxMzc1NywgMTM3NTksIDEzNzYxLCAxMzc2MywgMTM3NjUsIAotICAgIDEzNzY3LCAxMzc2OSwgMTM3NzEsIDEzNzczLCAxMzc3NSwgMTM3NzcsIDEzNzc5LCAxMzc4MSwgMTM3ODMsIDEzNzg1LCAKLSAgICAxMzc4NywgMTM3ODksIDEzNzkxLCAxMzc5MywgMTM3OTUsIDEzNzk3LCAxMzc5OSwgMTM4MDEsIDEzODAzLCAxMzgwNSwgCi0gICAgMTM4MDcsIDEzODA5LCAxMzgxMSwgMTM4MTMsIDEzODE1LCAxMzgxNywgMTM4MTksIDEzODIxLCAxMzgyMywgMTM4MjUsIAotICAgIDEzODI3LCAxMzgyOSwgMTM4MzEsIDEzODMzLCAxMzgzNSwgMTM4MzcsIDEzODM5LCAxMzg0MSwgMTM4NDMsIDEzODQ1LCAKLSAgICAxMzg0NywgMTM4NDksIDEzODUxLCAxMzg1MywgMTM4NTUsIDEzODU3LCAxMzg1OSwgMTM4NjEsIDEzODYzLCAxMzg2NSwgCi0gICAgMTM4NjcsIDEzODY5LCAxMzg3MSwgMTM4NzMsIDEzODc1LCAxMzg3NywgMTM4NzksIDEzODgxLCAxMzg4MywgMTM4ODUsIAotICAgIDEzODg3LCAxMzg4OSwgMTM4OTEsIDEzODkzLCAxMzg5NSwgMTM4OTcsIDEzODk5LCAxMzkwMSwgMTM5MDMsIDEzOTA1LCAKLSAgICAxMzkwNywgMTM5MDksIDEzOTExLCAxMzkxMywgMTM5MTUsIDEzOTE3LCAxMzkxOSwgMTM5MjEsIDEzOTIzLCAxMzkyNSwgCi0gICAgMTM5MjcsIDEzOTI5LCAxMzkzMSwgMTM5MzMsIDEzOTM1LCAxMzkzNywgMTM5MzksIDEzOTQxLCAxMzk0MywgMTM5NDUsIAotICAgIDEzOTQ3LCAxMzk0OSwgMTM5NTEsIDEzOTUzLCAxMzk1NSwgMTM5NTcsIDEzOTU5LCAxMzk2MSwgMTM5NjMsIDEzOTY1LCAKLSAgICAxMzk2NywgMTM5NjksIDEzOTcxLCAxMzk3MywgMTM5NzUsIDEzOTc3LCAxMzk3OSwgMTM5ODEsIDEzOTgzLCAxMzk4NSwgCi0gICAgMTM5ODcsIDEzOTg5LCAxMzk5MSwgMTM5OTMsIDEzOTk1LCAxMzk5NywgMTM5OTksIDE0MDAxLCAxNDAwMywgMTQwMDUsIAotICAgIDE0MDA3LCAxNDAwOSwgMTQwMTEsIDE0MDEzLCAxNDAxNSwgMTQwMTcsIDE0MDE5LCAxNDAyMSwgMTQwMjMsIDE0MDI1LCAKLSAgICAxNDAyNywgMTQwMjksIDE0MDMxLCAxNDAzMywgMTQwMzUsIDE0MDM3LCAxNDAzOSwgMTQwNDEsIDE0MDQzLCAxNDA0NSwgCi0gICAgMTQwNDcsIDE0MDQ5LCAxNDA1MSwgMTQwNTMsIDE0MDU1LCAxNDA1NywgMTQwNTksIDE0MDYxLCAxNDA2MywgMTQwNjUsIAotICAgIDE0MDY3LCAxNDA2OSwgMTQwNzEsIDE0MDczLCAxNDA3NSwgMTQwNzcsIDE0MDc5LCAxNDA4MSwgMTQwODMsIDE0MDg1LCAKLSAgICAxNDA4NywgMTQwODksIDE0MDkxLCAxNDA5MywgMTQwOTUsIDE0MDk3LCAxNDA5OSwgMTQxMDEsIDE0MTAzLCAxNDEwNSwgCi0gICAgMTQxMDcsIDE0MTA5LCAxNDExMSwgMTQxMTMsIDE0MTE1LCAxNDExNywgMTQxMTksIDE0MTIxLCAxNDEyMywgMTQxMjUsIAotICAgIDE0MTI3LCAxNDEyOSwgMTQxMzEsIDE0MTMzLCAxNDEzNSwgMTQxMzcsIDE0MTM5LCAxNDE0MSwgMTQxNDMsIDE0MTQ1LCAKLSAgICAxNDE0NywgMTQxNDksIDE0MTUxLCAxNDE1MywgMTQxNTUsIDE0MTU3LCAxNDE1OSwgMTQxNjEsIDE0MTYzLCAxNDE2NSwgCi0gICAgMTQxNjcsIDE0MTY5LCAxNDE3MSwgMTQxNzMsIDE0MTc1LCAxNDE3NywgMTQxNzksIDE0MTgxLCAxNDE4MywgMTQxODUsIAotICAgIDE0MTg3LCAxNDE4OSwgMTQxOTEsIDE0MTkzLCAxNDE5NSwgMTQxOTcsIDE0MTk5LCAxNDIwMSwgMTQyMDMsIDE0MjA1LCAKLSAgICAxNDIwNywgMTQyMDksIDE0MjExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQ2OSwgCisgICAgMTA0NzIsIDAsIDEwNDc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQ3OCwgMTA0ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDg0LCAxMDQ4NywgMTA0OTAsIDEwNDkzLCAxMDQ5NiwgMTA0OTksIDEwNTAyLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDUwNSwgMTA1MDgsIDEwNTExLCAxMDUxNCwgMTA1MTcsIAorICAgIDEwNTIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDUyMywgMTA1MjUsIDEwNTI3LCAKKyAgICAxMDUyOSwgMTA1MzEsIDEwNTMzLCAxMDUzNSwgMTA1MzcsIDEwNTM5LCAxMDU0MSwgMTA1NDMsIDEwNTQ1LCAxMDU0NywgCisgICAgMTA1NDksIDEwNTUxLCAxMDU1MywgMTA1NTUsIDEwNTU3LCAxMDU1OSwgMTA1NjEsIDEwNTYzLCAxMDU2NSwgMTA1NjcsIAorICAgIDEwNTY5LCAxMDU3MSwgMTA1NzMsIDEwNTc1LCAxMDU3NywgMTA1NzksIDEwNTgxLCAxMDU4MywgMTA1ODUsIDEwNTg3LCAKKyAgICAxMDU4OSwgMTA1OTEsIDEwNTkzLCAxMDU5NSwgMTA1OTcsIDEwNTk5LCAxMDYwMSwgMTA2MDMsIDEwNjA1LCAxMDYwNywgCisgICAgMTA2MDksIDEwNjExLCAxMDYxMywgMTA2MTUsIDEwNjE3LCAxMDYxOSwgMTA2MjEsIDEwNjIzLCAxMDYyNSwgMTA2MjcsIAorICAgIDEwNjI5LCAxMDYzMSwgMTA2MzMsIDEwNjM1LCAxMDYzNywgMTA2MzksIDEwNjQxLCAxMDY0MywgMTA2NDUsIDEwNjQ3LCAKKyAgICAxMDY0OSwgMTA2NTEsIDEwNjUzLCAxMDY1NSwgMTA2NTcsIDEwNjU5LCAxMDY2MSwgMTA2NjMsIDEwNjY1LCAxMDY2NywgCisgICAgMTA2NjksIDEwNjcxLCAxMDY3MywgMTA2NzUsIDEwNjc3LCAxMDY3OSwgMTA2ODEsIDEwNjgzLCAxMDY4NSwgMTA2ODcsIAorICAgIDEwNjg5LCAxMDY5MSwgMCwgMTA2OTMsIDEwNjk1LCAxMDY5NywgMTA2OTksIDEwNzAxLCAxMDcwMywgMTA3MDUsIDEwNzA3LCAKKyAgICAxMDcwOSwgMTA3MTEsIDEwNzEzLCAxMDcxNSwgMTA3MTcsIDEwNzE5LCAxMDcyMSwgMTA3MjMsIDEwNzI1LCAxMDcyNywgCisgICAgMTA3MjksIDEwNzMxLCAxMDczMywgMTA3MzUsIDEwNzM3LCAxMDczOSwgMTA3NDEsIDEwNzQzLCAxMDc0NSwgMTA3NDcsIAorICAgIDEwNzQ5LCAxMDc1MSwgMTA3NTMsIDEwNzU1LCAxMDc1NywgMTA3NTksIDEwNzYxLCAxMDc2MywgMTA3NjUsIDEwNzY3LCAKKyAgICAxMDc2OSwgMTA3NzEsIDEwNzczLCAxMDc3NSwgMTA3NzcsIDEwNzc5LCAxMDc4MSwgMTA3ODMsIDEwNzg1LCAxMDc4NywgCisgICAgMTA3ODksIDEwNzkxLCAxMDc5MywgMTA3OTUsIDEwNzk3LCAxMDc5OSwgMTA4MDEsIDEwODAzLCAxMDgwNSwgMTA4MDcsIAorICAgIDEwODA5LCAxMDgxMSwgMTA4MTMsIDEwODE1LCAxMDgxNywgMTA4MTksIDEwODIxLCAxMDgyMywgMTA4MjUsIDEwODI3LCAKKyAgICAxMDgyOSwgMTA4MzEsIDEwODMzLCAwLCAxMDgzNSwgMTA4MzcsIDAsIDAsIDEwODM5LCAwLCAwLCAxMDg0MSwgMTA4NDMsIDAsIAorICAgIDAsIDEwODQ1LCAxMDg0NywgMTA4NDksIDEwODUxLCAwLCAxMDg1MywgMTA4NTUsIDEwODU3LCAxMDg1OSwgMTA4NjEsIAorICAgIDEwODYzLCAxMDg2NSwgMTA4NjcsIDEwODY5LCAxMDg3MSwgMTA4NzMsIDEwODc1LCAwLCAxMDg3NywgMCwgMTA4NzksIAorICAgIDEwODgxLCAxMDg4MywgMTA4ODUsIDEwODg3LCAxMDg4OSwgMTA4OTEsIDAsIDEwODkzLCAxMDg5NSwgMTA4OTcsIDEwODk5LCAKKyAgICAxMDkwMSwgMTA5MDMsIDEwOTA1LCAxMDkwNywgMTA5MDksIDEwOTExLCAxMDkxMywgMTA5MTUsIDEwOTE3LCAxMDkxOSwgCisgICAgMTA5MjEsIDEwOTIzLCAxMDkyNSwgMTA5MjcsIDEwOTI5LCAxMDkzMSwgMTA5MzMsIDEwOTM1LCAxMDkzNywgMTA5MzksIAorICAgIDEwOTQxLCAxMDk0MywgMTA5NDUsIDEwOTQ3LCAxMDk0OSwgMTA5NTEsIDEwOTUzLCAxMDk1NSwgMTA5NTcsIDEwOTU5LCAKKyAgICAxMDk2MSwgMTA5NjMsIDEwOTY1LCAxMDk2NywgMTA5NjksIDEwOTcxLCAxMDk3MywgMTA5NzUsIDEwOTc3LCAxMDk3OSwgCisgICAgMTA5ODEsIDEwOTgzLCAxMDk4NSwgMTA5ODcsIDEwOTg5LCAxMDk5MSwgMTA5OTMsIDEwOTk1LCAxMDk5NywgMTA5OTksIAorICAgIDExMDAxLCAxMTAwMywgMTEwMDUsIDExMDA3LCAxMTAwOSwgMTEwMTEsIDExMDEzLCAxMTAxNSwgMTEwMTcsIDExMDE5LCAKKyAgICAxMTAyMSwgMCwgMTEwMjMsIDExMDI1LCAxMTAyNywgMTEwMjksIDAsIDAsIDExMDMxLCAxMTAzMywgMTEwMzUsIDExMDM3LCAKKyAgICAxMTAzOSwgMTEwNDEsIDExMDQzLCAxMTA0NSwgMCwgMTEwNDcsIDExMDQ5LCAxMTA1MSwgMTEwNTMsIDExMDU1LCAxMTA1NywgCisgICAgMTEwNTksIDAsIDExMDYxLCAxMTA2MywgMTEwNjUsIDExMDY3LCAxMTA2OSwgMTEwNzEsIDExMDczLCAxMTA3NSwgMTEwNzcsIAorICAgIDExMDc5LCAxMTA4MSwgMTEwODMsIDExMDg1LCAxMTA4NywgMTEwODksIDExMDkxLCAxMTA5MywgMTEwOTUsIDExMDk3LCAKKyAgICAxMTA5OSwgMTExMDEsIDExMTAzLCAxMTEwNSwgMTExMDcsIDExMTA5LCAxMTExMSwgMTExMTMsIDExMTE1LCAwLCAxMTExNywgCisgICAgMTExMTksIDExMTIxLCAxMTEyMywgMCwgMTExMjUsIDExMTI3LCAxMTEyOSwgMTExMzEsIDExMTMzLCAwLCAxMTEzNSwgMCwgCisgICAgMCwgMCwgMTExMzcsIDExMTM5LCAxMTE0MSwgMTExNDMsIDExMTQ1LCAxMTE0NywgMTExNDksIDAsIDExMTUxLCAxMTE1MywgCisgICAgMTExNTUsIDExMTU3LCAxMTE1OSwgMTExNjEsIDExMTYzLCAxMTE2NSwgMTExNjcsIDExMTY5LCAxMTE3MSwgMTExNzMsIAorICAgIDExMTc1LCAxMTE3NywgMTExNzksIDExMTgxLCAxMTE4MywgMTExODUsIDExMTg3LCAxMTE4OSwgMTExOTEsIDExMTkzLCAKKyAgICAxMTE5NSwgMTExOTcsIDExMTk5LCAxMTIwMSwgMTEyMDMsIDExMjA1LCAxMTIwNywgMTEyMDksIDExMjExLCAxMTIxMywgCisgICAgMTEyMTUsIDExMjE3LCAxMTIxOSwgMTEyMjEsIDExMjIzLCAxMTIyNSwgMTEyMjcsIDExMjI5LCAxMTIzMSwgMTEyMzMsIAorICAgIDExMjM1LCAxMTIzNywgMTEyMzksIDExMjQxLCAxMTI0MywgMTEyNDUsIDExMjQ3LCAxMTI0OSwgMTEyNTEsIDExMjUzLCAKKyAgICAxMTI1NSwgMTEyNTcsIDExMjU5LCAxMTI2MSwgMTEyNjMsIDExMjY1LCAxMTI2NywgMTEyNjksIDExMjcxLCAxMTI3MywgCisgICAgMTEyNzUsIDExMjc3LCAxMTI3OSwgMTEyODEsIDExMjgzLCAxMTI4NSwgMTEyODcsIDExMjg5LCAxMTI5MSwgMTEyOTMsIAorICAgIDExMjk1LCAxMTI5NywgMTEyOTksIDExMzAxLCAxMTMwMywgMTEzMDUsIDExMzA3LCAxMTMwOSwgMTEzMTEsIDExMzEzLCAKKyAgICAxMTMxNSwgMTEzMTcsIDExMzE5LCAxMTMyMSwgMTEzMjMsIDExMzI1LCAxMTMyNywgMTEzMjksIDExMzMxLCAxMTMzMywgCisgICAgMTEzMzUsIDExMzM3LCAxMTMzOSwgMTEzNDEsIDExMzQzLCAxMTM0NSwgMTEzNDcsIDExMzQ5LCAxMTM1MSwgMTEzNTMsIAorICAgIDExMzU1LCAxMTM1NywgMTEzNTksIDExMzYxLCAxMTM2MywgMTEzNjUsIDExMzY3LCAxMTM2OSwgMTEzNzEsIDExMzczLCAKKyAgICAxMTM3NSwgMTEzNzcsIDExMzc5LCAxMTM4MSwgMTEzODMsIDExMzg1LCAxMTM4NywgMTEzODksIDExMzkxLCAxMTM5MywgCisgICAgMTEzOTUsIDExMzk3LCAxMTM5OSwgMTE0MDEsIDExNDAzLCAxMTQwNSwgMTE0MDcsIDExNDA5LCAxMTQxMSwgMTE0MTMsIAorICAgIDExNDE1LCAxMTQxNywgMTE0MTksIDExNDIxLCAxMTQyMywgMTE0MjUsIDExNDI3LCAxMTQyOSwgMTE0MzEsIDExNDMzLCAKKyAgICAxMTQzNSwgMTE0MzcsIDExNDM5LCAxMTQ0MSwgMTE0NDMsIDExNDQ1LCAxMTQ0NywgMTE0NDksIDExNDUxLCAxMTQ1MywgCisgICAgMTE0NTUsIDExNDU3LCAxMTQ1OSwgMTE0NjEsIDExNDYzLCAxMTQ2NSwgMTE0NjcsIDExNDY5LCAxMTQ3MSwgMTE0NzMsIAorICAgIDExNDc1LCAxMTQ3NywgMTE0NzksIDExNDgxLCAxMTQ4MywgMTE0ODUsIDExNDg3LCAxMTQ4OSwgMTE0OTEsIDExNDkzLCAKKyAgICAxMTQ5NSwgMTE0OTcsIDExNDk5LCAxMTUwMSwgMTE1MDMsIDExNTA1LCAxMTUwNywgMTE1MDksIDExNTExLCAxMTUxMywgCisgICAgMTE1MTUsIDExNTE3LCAxMTUxOSwgMTE1MjEsIDExNTIzLCAxMTUyNSwgMTE1MjcsIDExNTI5LCAxMTUzMSwgMTE1MzMsIAorICAgIDExNTM1LCAxMTUzNywgMTE1MzksIDExNTQxLCAxMTU0MywgMTE1NDUsIDExNTQ3LCAxMTU0OSwgMTE1NTEsIDExNTUzLCAKKyAgICAxMTU1NSwgMTE1NTcsIDExNTU5LCAxMTU2MSwgMTE1NjMsIDExNTY1LCAxMTU2NywgMTE1NjksIDExNTcxLCAxMTU3MywgCisgICAgMTE1NzUsIDExNTc3LCAxMTU3OSwgMTE1ODEsIDExNTgzLCAxMTU4NSwgMTE1ODcsIDExNTg5LCAxMTU5MSwgMTE1OTMsIAorICAgIDExNTk1LCAxMTU5NywgMTE1OTksIDExNjAxLCAxMTYwMywgMTE2MDUsIDExNjA3LCAxMTYwOSwgMTE2MTEsIDExNjEzLCAKKyAgICAxMTYxNSwgMTE2MTcsIDExNjE5LCAxMTYyMSwgMTE2MjMsIDExNjI1LCAxMTYyNywgMTE2MjksIDExNjMxLCAxMTYzMywgCisgICAgMTE2MzUsIDExNjM3LCAxMTYzOSwgMTE2NDEsIDExNjQzLCAxMTY0NSwgMTE2NDcsIDExNjQ5LCAxMTY1MSwgMTE2NTMsIAorICAgIDExNjU1LCAxMTY1NywgMTE2NTksIDExNjYxLCAxMTY2MywgMTE2NjUsIDExNjY3LCAxMTY2OSwgMTE2NzEsIDExNjczLCAKKyAgICAxMTY3NSwgMTE2NzcsIDExNjc5LCAxMTY4MSwgMTE2ODMsIDExNjg1LCAxMTY4NywgMTE2ODksIDExNjkxLCAxMTY5MywgCisgICAgMTE2OTUsIDExNjk3LCAxMTY5OSwgMTE3MDEsIDExNzAzLCAxMTcwNSwgMTE3MDcsIDExNzA5LCAxMTcxMSwgMTE3MTMsIAorICAgIDExNzE1LCAxMTcxNywgMTE3MTksIDExNzIxLCAxMTcyMywgMTE3MjUsIDExNzI3LCAxMTcyOSwgMTE3MzEsIDExNzMzLCAKKyAgICAxMTczNSwgMTE3MzcsIDExNzM5LCAxMTc0MSwgMTE3NDMsIDExNzQ1LCAxMTc0NywgMTE3NDksIDExNzUxLCAxMTc1MywgCisgICAgMTE3NTUsIDExNzU3LCAxMTc1OSwgMTE3NjEsIDExNzYzLCAxMTc2NSwgMTE3NjcsIDExNzY5LCAxMTc3MSwgMTE3NzMsIAorICAgIDExNzc1LCAxMTc3NywgMTE3NzksIDExNzgxLCAxMTc4MywgMTE3ODUsIDExNzg3LCAxMTc4OSwgMTE3OTEsIDExNzkzLCAKKyAgICAxMTc5NSwgMTE3OTcsIDExNzk5LCAxMTgwMSwgMTE4MDMsIDExODA1LCAxMTgwNywgMTE4MDksIDExODExLCAxMTgxMywgCisgICAgMTE4MTUsIDExODE3LCAxMTgxOSwgMTE4MjEsIDExODIzLCAxMTgyNSwgMTE4MjcsIDExODI5LCAwLCAwLCAxMTgzMSwgCisgICAgMTE4MzMsIDExODM1LCAxMTgzNywgMTE4MzksIDExODQxLCAxMTg0MywgMTE4NDUsIDExODQ3LCAxMTg0OSwgMTE4NTEsIAorICAgIDExODUzLCAxMTg1NSwgMTE4NTcsIDExODU5LCAxMTg2MSwgMTE4NjMsIDExODY1LCAxMTg2NywgMTE4NjksIDExODcxLCAKKyAgICAxMTg3MywgMTE4NzUsIDExODc3LCAxMTg3OSwgMTE4ODEsIDExODgzLCAxMTg4NSwgMTE4ODcsIDExODg5LCAxMTg5MSwgCisgICAgMTE4OTMsIDExODk1LCAxMTg5NywgMTE4OTksIDExOTAxLCAxMTkwMywgMTE5MDUsIDExOTA3LCAxMTkwOSwgMTE5MTEsIAorICAgIDExOTEzLCAxMTkxNSwgMTE5MTcsIDExOTE5LCAxMTkyMSwgMTE5MjMsIDExOTI1LCAxMTkyNywgMTE5MjksIDExOTMxLCAKKyAgICAxMTkzMywgMTE5MzUsIDExOTM3LCAxMTkzOSwgMTE5NDEsIDExOTQzLCAxMTk0NSwgMTE5NDcsIDExOTQ5LCAxMTk1MSwgCisgICAgMTE5NTMsIDExOTU1LCAxMTk1NywgMTE5NTksIDExOTYxLCAxMTk2MywgMTE5NjUsIDExOTY3LCAxMTk2OSwgMTE5NzEsIAorICAgIDExOTczLCAxMTk3NSwgMTE5NzcsIDExOTc5LCAxMTk4MSwgMTE5ODMsIDExOTg1LCAxMTk4NywgMTE5ODksIDExOTkxLCAKKyAgICAxMTk5MywgMTE5OTUsIDExOTk3LCAxMTk5OSwgMTIwMDEsIDEyMDAzLCAxMjAwNSwgMTIwMDcsIDEyMDA5LCAxMjAxMSwgCisgICAgMTIwMTMsIDEyMDE1LCAxMjAxNywgMTIwMTksIDEyMDIxLCAxMjAyMywgMTIwMjUsIDEyMDI3LCAxMjAyOSwgMTIwMzEsIAorICAgIDEyMDMzLCAxMjAzNSwgMTIwMzcsIDEyMDM5LCAxMjA0MSwgMTIwNDMsIDEyMDQ1LCAxMjA0NywgMTIwNDksIDEyMDUxLCAKKyAgICAxMjA1MywgMTIwNTUsIDEyMDU3LCAxMjA1OSwgMTIwNjEsIDEyMDYzLCAxMjA2NSwgMTIwNjcsIDEyMDY5LCAxMjA3MSwgCisgICAgMTIwNzMsIDEyMDc1LCAxMjA3NywgMTIwNzksIDEyMDgxLCAxMjA4MywgMTIwODUsIDEyMDg3LCAxMjA4OSwgMTIwOTEsIAorICAgIDEyMDkzLCAxMjA5NSwgMTIwOTcsIDEyMDk5LCAxMjEwMSwgMTIxMDMsIDEyMTA1LCAxMjEwNywgMTIxMDksIDEyMTExLCAKKyAgICAxMjExMywgMTIxMTUsIDEyMTE3LCAxMjExOSwgMTIxMjEsIDEyMTIzLCAxMjEyNSwgMTIxMjcsIDEyMTI5LCAxMjEzMSwgCisgICAgMTIxMzMsIDEyMTM1LCAxMjEzNywgMTIxMzksIDEyMTQxLCAxMjE0MywgMTIxNDUsIDEyMTQ3LCAxMjE0OSwgMTIxNTEsIAorICAgIDEyMTUzLCAxMjE1NSwgMTIxNTcsIDEyMTU5LCAxMjE2MSwgMTIxNjMsIDEyMTY1LCAxMjE2NywgMTIxNjksIDEyMTcxLCAKKyAgICAxMjE3MywgMTIxNzUsIDEyMTc3LCAxMjE3OSwgMTIxODEsIDEyMTgzLCAxMjE4NSwgMTIxODcsIDEyMTg5LCAxMjE5MSwgCisgICAgMTIxOTMsIDEyMTk1LCAxMjE5NywgMTIxOTksIDEyMjAxLCAxMjIwMywgMTIyMDUsIDEyMjA3LCAxMjIwOSwgMTIyMTEsIAorICAgIDEyMjEzLCAxMjIxNSwgMTIyMTcsIDEyMjE5LCAxMjIyMSwgMTIyMjMsIDEyMjI1LCAxMjIyNywgMTIyMjksIDEyMjMxLCAKKyAgICAxMjIzMywgMTIyMzUsIDEyMjM3LCAxMjIzOSwgMTIyNDEsIDEyMjQzLCAxMjI0NSwgMTIyNDcsIDEyMjQ5LCAxMjI1MSwgCisgICAgMTIyNTMsIDEyMjU1LCAxMjI1NywgMTIyNTksIDEyMjYxLCAxMjI2MywgMTIyNjUsIDEyMjY3LCAxMjI2OSwgMTIyNzEsIAorICAgIDEyMjczLCAxMjI3NSwgMTIyNzcsIDEyMjc5LCAxMjI4MSwgMTIyODMsIDEyMjg1LCAxMjI4NywgMTIyODksIDEyMjkxLCAKKyAgICAxMjI5MywgMTIyOTUsIDEyMjk3LCAxMjI5OSwgMTIzMDEsIDEyMzAzLCAxMjMwNSwgMTIzMDcsIDEyMzA5LCAxMjMxMSwgCisgICAgMTIzMTMsIDEyMzE1LCAxMjMxNywgMTIzMTksIDEyMzIxLCAxMjMyMywgMTIzMjUsIDEyMzI3LCAxMjMyOSwgMTIzMzEsIAorICAgIDEyMzMzLCAxMjMzNSwgMTIzMzcsIDEyMzM5LCAxMjM0MSwgMTIzNDMsIDEyMzQ1LCAxMjM0NywgMTIzNDksIDEyMzUxLCAKKyAgICAxMjM1MywgMTIzNTUsIDEyMzU3LCAxMjM1OSwgMTIzNjEsIDEyMzYzLCAxMjM2NSwgMTIzNjcsIDEyMzY5LCAxMjM3MSwgCisgICAgMTIzNzMsIDEyMzc1LCAxMjM3NywgMTIzNzksIDEyMzgxLCAxMjM4MywgMTIzODUsIDEyMzg3LCAxMjM4OSwgMTIzOTEsIAorICAgIDEyMzkzLCAxMjM5NSwgMTIzOTcsIDEyMzk5LCAxMjQwMSwgMTI0MDMsIDEyNDA1LCAxMjQwNywgMTI0MDksIDEyNDExLCAKKyAgICAxMjQxMywgMCwgMCwgMTI0MTUsIDEyNDE3LCAxMjQxOSwgMTI0MjEsIDEyNDIzLCAxMjQyNSwgMTI0MjcsIDEyNDI5LCAKKyAgICAxMjQzMSwgMTI0MzMsIDEyNDM1LCAxMjQzNywgMTI0MzksIDEyNDQxLCAxMjQ0MywgMTI0NDUsIDEyNDQ3LCAxMjQ0OSwgCisgICAgMTI0NTEsIDEyNDUzLCAxMjQ1NSwgMTI0NTcsIDEyNDU5LCAxMjQ2MSwgMTI0NjMsIDEyNDY1LCAxMjQ2NywgMTI0NjksIAorICAgIDEyNDcxLCAxMjQ3MywgMTI0NzUsIDEyNDc3LCAxMjQ3OSwgMTI0ODEsIDEyNDgzLCAxMjQ4NSwgMTI0ODcsIDEyNDg5LCAKKyAgICAxMjQ5MSwgMTI0OTMsIDEyNDk1LCAxMjQ5NywgMTI0OTksIDEyNTAxLCAxMjUwMywgMTI1MDUsIDEyNTA3LCAxMjUwOSwgCisgICAgMTI1MTEsIDEyNTEzLCAxMjUxNSwgMTI1MTcsIDEyNTE5LCAxMjUyMSwgMCwgMTI1MjMsIDEyNTI1LCAxMjUyNywgMTI1MjksIAorICAgIDEyNTMxLCAxMjUzMywgMTI1MzUsIDEyNTM3LCAxMjUzOSwgMTI1NDEsIDEyNTQzLCAxMjU0NSwgMTI1NDcsIDEyNTQ5LCAKKyAgICAxMjU1MSwgMTI1NTMsIDEyNTU1LCAxMjU1NywgMTI1NTksIDEyNTYxLCAxMjU2MywgMTI1NjUsIDEyNTY3LCAxMjU2OSwgCisgICAgMTI1NzEsIDEyNTczLCAxMjU3NSwgMCwgMTI1NzcsIDEyNTc5LCAwLCAxMjU4MSwgMCwgMCwgMTI1ODMsIDAsIDEyNTg1LCAKKyAgICAxMjU4NywgMTI1ODksIDEyNTkxLCAxMjU5MywgMTI1OTUsIDEyNTk3LCAxMjU5OSwgMTI2MDEsIDEyNjAzLCAwLCAxMjYwNSwgCisgICAgMTI2MDcsIDEyNjA5LCAxMjYxMSwgMCwgMTI2MTMsIDAsIDEyNjE1LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjYxNywgMCwgMCwgCisgICAgMCwgMCwgMTI2MTksIDAsIDEyNjIxLCAwLCAxMjYyMywgMCwgMTI2MjUsIDEyNjI3LCAxMjYyOSwgMCwgMTI2MzEsIDEyNjMzLCAKKyAgICAwLCAxMjYzNSwgMCwgMCwgMTI2MzcsIDAsIDEyNjM5LCAwLCAxMjY0MSwgMCwgMTI2NDMsIDAsIDEyNjQ1LCAwLCAxMjY0NywgCisgICAgMTI2NDksIDAsIDEyNjUxLCAwLCAwLCAxMjY1MywgMTI2NTUsIDEyNjU3LCAxMjY1OSwgMCwgMTI2NjEsIDEyNjYzLCAKKyAgICAxMjY2NSwgMTI2NjcsIDEyNjY5LCAxMjY3MSwgMTI2NzMsIDAsIDEyNjc1LCAxMjY3NywgMTI2NzksIDEyNjgxLCAwLCAKKyAgICAxMjY4MywgMTI2ODUsIDEyNjg3LCAxMjY4OSwgMCwgMTI2OTEsIDAsIDEyNjkzLCAxMjY5NSwgMTI2OTcsIDEyNjk5LCAKKyAgICAxMjcwMSwgMTI3MDMsIDEyNzA1LCAxMjcwNywgMTI3MDksIDEyNzExLCAwLCAxMjcxMywgMTI3MTUsIDEyNzE3LCAxMjcxOSwgCisgICAgMTI3MjEsIDEyNzIzLCAxMjcyNSwgMTI3MjcsIDEyNzI5LCAxMjczMSwgMTI3MzMsIDEyNzM1LCAxMjczNywgMTI3MzksIAorICAgIDEyNzQxLCAxMjc0MywgMTI3NDUsIDAsIDAsIDAsIDAsIDAsIDEyNzQ3LCAxMjc0OSwgMTI3NTEsIDAsIDEyNzUzLCAxMjc1NSwgCisgICAgMTI3NTcsIDEyNzU5LCAxMjc2MSwgMCwgMTI3NjMsIDEyNzY1LCAxMjc2NywgMTI3NjksIDEyNzcxLCAxMjc3MywgMTI3NzUsIAorICAgIDEyNzc3LCAxMjc3OSwgMTI3ODEsIDEyNzgzLCAxMjc4NSwgMTI3ODcsIDEyNzg5LCAxMjc5MSwgMTI3OTMsIDEyNzk1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjc5NywgMTI4MDAsIAorICAgIDEyODAzLCAxMjgwNiwgMTI4MDksIDEyODEyLCAxMjgxNSwgMTI4MTgsIDEyODIxLCAxMjgyNCwgMTI4MjcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEyODMwLCAxMjgzNCwgMTI4MzgsIDEyODQyLCAxMjg0NiwgMTI4NTAsIDEyODU0LCAxMjg1OCwgMTI4NjIsIAorICAgIDEyODY2LCAxMjg3MCwgMTI4NzQsIDEyODc4LCAxMjg4MiwgMTI4ODYsIDEyODkwLCAxMjg5NCwgMTI4OTgsIDEyOTAyLCAKKyAgICAxMjkwNiwgMTI5MTAsIDEyOTE0LCAxMjkxOCwgMTI5MjIsIDEyOTI2LCAxMjkzMCwgMTI5MzQsIDEyOTM4LCAxMjk0MCwgCisgICAgMTI5NDIsIDEyOTQ1LCAwLCAxMjk0OCwgMTI5NTAsIDEyOTUyLCAxMjk1NCwgMTI5NTYsIDEyOTU4LCAxMjk2MCwgMTI5NjIsIAorICAgIDEyOTY0LCAxMjk2NiwgMTI5NjgsIDEyOTcwLCAxMjk3MiwgMTI5NzQsIDEyOTc2LCAxMjk3OCwgMTI5ODAsIDEyOTgyLCAKKyAgICAxMjk4NCwgMTI5ODYsIDEyOTg4LCAxMjk5MCwgMTI5OTIsIDEyOTk0LCAxMjk5NiwgMTI5OTgsIDEzMDAwLCAxMzAwMywgCisgICAgMTMwMDYsIDEzMDA5LCAxMzAxMiwgMTMwMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDE5LCAxMzAyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTMwMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDI4LCAxMzAzMSwgCisgICAgMTMwMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDM2LCAxMzAzOCwgMTMwNDAsIDEzMDQyLCAKKyAgICAxMzA0NCwgMTMwNDYsIDEzMDQ4LCAxMzA1MCwgMTMwNTIsIDEzMDU0LCAxMzA1NiwgMTMwNTgsIDEzMDYwLCAxMzA2MiwgCisgICAgMTMwNjQsIDEzMDY2LCAxMzA2OCwgMTMwNzAsIDEzMDcyLCAxMzA3NCwgMTMwNzYsIDEzMDc4LCAxMzA4MCwgMTMwODIsIAorICAgIDEzMDg0LCAxMzA4NiwgMTMwODgsIDEzMDkwLCAxMzA5MiwgMTMwOTQsIDEzMDk2LCAxMzA5OCwgMTMxMDAsIDEzMTAyLCAKKyAgICAxMzEwNCwgMTMxMDYsIDEzMTA4LCAxMzExMCwgMTMxMTIsIDEzMTE0LCAxMzExNiwgMTMxMTgsIDEzMTIwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMzEyMiwgMTMxMjYsIDEzMTMwLCAxMzEzNCwgMTMxMzgsIDEzMTQyLCAxMzE0NiwgMTMxNTAsIDEzMTU0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMzE1OCwgMTMxNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTYyLCAxMzE2NCwgMTMxNjYsIDEzMTY4LCAxMzE3MCwgMTMxNzIsIDEzMTc0LCAKKyAgICAxMzE3NiwgMTMxNzgsIDEzMTgwLCAxMzE4MiwgMTMxODQsIDEzMTg2LCAxMzE4OCwgMTMxOTAsIDEzMTkyLCAxMzE5NCwgCisgICAgMTMxOTYsIDEzMTk4LCAxMzIwMCwgMTMyMDIsIDEzMjA0LCAxMzIwNiwgMTMyMDgsIDEzMjEwLCAxMzIxMiwgMTMyMTQsIAorICAgIDEzMjE2LCAxMzIxOCwgMTMyMjAsIDEzMjIyLCAxMzIyNCwgMTMyMjYsIDEzMjI4LCAxMzIzMCwgMTMyMzIsIDEzMjM0LCAKKyAgICAxMzIzNiwgMTMyMzgsIDEzMjQwLCAxMzI0MiwgMTMyNDQsIDEzMjQ2LCAxMzI0OCwgMTMyNTAsIDEzMjUyLCAxMzI1NCwgCisgICAgMTMyNTYsIDEzMjU4LCAxMzI2MCwgMTMyNjIsIDEzMjY0LCAxMzI2NiwgMTMyNjgsIDEzMjcwLCAxMzI3MiwgMTMyNzQsIAorICAgIDEzMjc2LCAxMzI3OCwgMTMyODAsIDEzMjgyLCAxMzI4NCwgMTMyODYsIDEzMjg4LCAxMzI5MCwgMTMyOTIsIDEzMjk0LCAKKyAgICAxMzI5NiwgMTMyOTgsIDEzMzAwLCAxMzMwMiwgMTMzMDQsIDEzMzA2LCAxMzMwOCwgMTMzMTAsIDEzMzEyLCAxMzMxNCwgCisgICAgMTMzMTYsIDEzMzE4LCAxMzMyMCwgMTMzMjIsIDEzMzI0LCAxMzMyNiwgMTMzMjgsIDEzMzMwLCAxMzMzMiwgMTMzMzQsIAorICAgIDEzMzM2LCAxMzMzOCwgMTMzNDAsIDEzMzQyLCAxMzM0NCwgMTMzNDYsIDEzMzQ4LCAxMzM1MCwgMTMzNTIsIDEzMzU0LCAKKyAgICAxMzM1NiwgMTMzNTgsIDEzMzYwLCAxMzM2MiwgMTMzNjQsIDEzMzY2LCAxMzM2OCwgMTMzNzAsIDEzMzcyLCAxMzM3NCwgCisgICAgMTMzNzYsIDEzMzc4LCAxMzM4MCwgMTMzODIsIDEzMzg0LCAxMzM4NiwgMTMzODgsIDEzMzkwLCAxMzM5MiwgMTMzOTQsIAorICAgIDEzMzk2LCAxMzM5OCwgMTM0MDAsIDEzNDAyLCAxMzQwNCwgMTM0MDYsIDEzNDA4LCAxMzQxMCwgMTM0MTIsIDEzNDE0LCAKKyAgICAxMzQxNiwgMTM0MTgsIDEzNDIwLCAxMzQyMiwgMTM0MjQsIDEzNDI2LCAxMzQyOCwgMTM0MzAsIDEzNDMyLCAxMzQzNCwgCisgICAgMTM0MzYsIDEzNDM4LCAxMzQ0MCwgMTM0NDIsIDEzNDQ0LCAxMzQ0NiwgMTM0NDgsIDEzNDUwLCAxMzQ1MiwgMTM0NTQsIAorICAgIDEzNDU2LCAxMzQ1OCwgMTM0NjAsIDEzNDYyLCAxMzQ2NCwgMTM0NjYsIDEzNDY4LCAxMzQ3MCwgMTM0NzIsIDEzNDc0LCAKKyAgICAxMzQ3NiwgMTM0NzgsIDEzNDgwLCAxMzQ4MiwgMTM0ODQsIDEzNDg2LCAxMzQ4OCwgMTM0OTAsIDEzNDkyLCAxMzQ5NCwgCisgICAgMTM0OTYsIDEzNDk4LCAxMzUwMCwgMTM1MDIsIDEzNTA0LCAxMzUwNiwgMTM1MDgsIDEzNTEwLCAxMzUxMiwgMTM1MTQsIAorICAgIDEzNTE2LCAxMzUxOCwgMTM1MjAsIDEzNTIyLCAxMzUyNCwgMTM1MjYsIDEzNTI4LCAxMzUzMCwgMTM1MzIsIDEzNTM0LCAKKyAgICAxMzUzNiwgMTM1MzgsIDEzNTQwLCAxMzU0MiwgMTM1NDQsIDEzNTQ2LCAxMzU0OCwgMTM1NTAsIDEzNTUyLCAxMzU1NCwgCisgICAgMTM1NTYsIDEzNTU4LCAxMzU2MCwgMTM1NjIsIDEzNTY0LCAxMzU2NiwgMTM1NjgsIDEzNTcwLCAxMzU3MiwgMTM1NzQsIAorICAgIDEzNTc2LCAxMzU3OCwgMTM1ODAsIDEzNTgyLCAxMzU4NCwgMTM1ODYsIDEzNTg4LCAxMzU5MCwgMTM1OTIsIDEzNTk0LCAKKyAgICAxMzU5NiwgMTM1OTgsIDEzNjAwLCAxMzYwMiwgMTM2MDQsIDEzNjA2LCAxMzYwOCwgMTM2MTAsIDEzNjEyLCAxMzYxNCwgCisgICAgMTM2MTYsIDEzNjE4LCAxMzYyMCwgMTM2MjIsIDEzNjI0LCAxMzYyNiwgMTM2MjgsIDEzNjMwLCAxMzYzMiwgMTM2MzQsIAorICAgIDEzNjM2LCAxMzYzOCwgMTM2NDAsIDEzNjQyLCAxMzY0NCwgMTM2NDYsIDEzNjQ4LCAxMzY1MCwgMTM2NTIsIDEzNjU0LCAKKyAgICAxMzY1NiwgMTM2NTgsIDEzNjYwLCAxMzY2MiwgMTM2NjQsIDEzNjY2LCAxMzY2OCwgMTM2NzAsIDEzNjcyLCAxMzY3NCwgCisgICAgMTM2NzYsIDEzNjc4LCAxMzY4MCwgMTM2ODIsIDEzNjg0LCAxMzY4NiwgMTM2ODgsIDEzNjkwLCAxMzY5MiwgMTM2OTQsIAorICAgIDEzNjk2LCAxMzY5OCwgMTM3MDAsIDEzNzAyLCAxMzcwNCwgMTM3MDYsIDEzNzA4LCAxMzcxMCwgMTM3MTIsIDEzNzE0LCAKKyAgICAxMzcxNiwgMTM3MTgsIDEzNzIwLCAxMzcyMiwgMTM3MjQsIDEzNzI2LCAxMzcyOCwgMTM3MzAsIDEzNzMyLCAxMzczNCwgCisgICAgMTM3MzYsIDEzNzM4LCAxMzc0MCwgMTM3NDIsIDEzNzQ0LCAxMzc0NiwgMTM3NDgsIDEzNzUwLCAxMzc1MiwgMTM3NTQsIAorICAgIDEzNzU2LCAxMzc1OCwgMTM3NjAsIDEzNzYyLCAxMzc2NCwgMTM3NjYsIDEzNzY4LCAxMzc3MCwgMTM3NzIsIDEzNzc0LCAKKyAgICAxMzc3NiwgMTM3NzgsIDEzNzgwLCAxMzc4MiwgMTM3ODQsIDEzNzg2LCAxMzc4OCwgMTM3OTAsIDEzNzkyLCAxMzc5NCwgCisgICAgMTM3OTYsIDEzNzk4LCAxMzgwMCwgMTM4MDIsIDEzODA0LCAxMzgwNiwgMTM4MDgsIDEzODEwLCAxMzgxMiwgMTM4MTQsIAorICAgIDEzODE2LCAxMzgxOCwgMTM4MjAsIDEzODIyLCAxMzgyNCwgMTM4MjYsIDEzODI4LCAxMzgzMCwgMTM4MzIsIDEzODM0LCAKKyAgICAxMzgzNiwgMTM4MzgsIDEzODQwLCAxMzg0MiwgMTM4NDQsIDEzODQ2LCAxMzg0OCwgMTM4NTAsIDEzODUyLCAxMzg1NCwgCisgICAgMTM4NTYsIDEzODU4LCAxMzg2MCwgMTM4NjIsIDEzODY0LCAxMzg2NiwgMTM4NjgsIDEzODcwLCAxMzg3MiwgMTM4NzQsIAorICAgIDEzODc2LCAxMzg3OCwgMTM4ODAsIDEzODgyLCAxMzg4NCwgMTM4ODYsIDEzODg4LCAxMzg5MCwgMTM4OTIsIDEzODk0LCAKKyAgICAxMzg5NiwgMTM4OTgsIDEzOTAwLCAxMzkwMiwgMTM5MDQsIDEzOTA2LCAxMzkwOCwgMTM5MTAsIDEzOTEyLCAxMzkxNCwgCisgICAgMTM5MTYsIDEzOTE4LCAxMzkyMCwgMTM5MjIsIDEzOTI0LCAxMzkyNiwgMTM5MjgsIDEzOTMwLCAxMzkzMiwgMTM5MzQsIAorICAgIDEzOTM2LCAxMzkzOCwgMTM5NDAsIDEzOTQyLCAxMzk0NCwgMTM5NDYsIDEzOTQ4LCAxMzk1MCwgMTM5NTIsIDEzOTU0LCAKKyAgICAxMzk1NiwgMTM5NTgsIDEzOTYwLCAxMzk2MiwgMTM5NjQsIDEzOTY2LCAxMzk2OCwgMTM5NzAsIDEzOTcyLCAxMzk3NCwgCisgICAgMTM5NzYsIDEzOTc4LCAxMzk4MCwgMTM5ODIsIDEzOTg0LCAxMzk4NiwgMTM5ODgsIDEzOTkwLCAxMzk5MiwgMTM5OTQsIAorICAgIDEzOTk2LCAxMzk5OCwgMTQwMDAsIDE0MDAyLCAxNDAwNCwgMTQwMDYsIDE0MDA4LCAxNDAxMCwgMTQwMTIsIDE0MDE0LCAKKyAgICAxNDAxNiwgMTQwMTgsIDE0MDIwLCAxNDAyMiwgMTQwMjQsIDE0MDI2LCAxNDAyOCwgMTQwMzAsIDE0MDMyLCAxNDAzNCwgCisgICAgMTQwMzYsIDE0MDM4LCAxNDA0MCwgMTQwNDIsIDE0MDQ0LCAxNDA0NiwgMTQwNDgsIDE0MDUwLCAxNDA1MiwgMTQwNTQsIAorICAgIDE0MDU2LCAxNDA1OCwgMTQwNjAsIDE0MDYyLCAxNDA2NCwgMTQwNjYsIDE0MDY4LCAxNDA3MCwgMTQwNzIsIDE0MDc0LCAKKyAgICAxNDA3NiwgMTQwNzgsIDE0MDgwLCAxNDA4MiwgMTQwODQsIDE0MDg2LCAxNDA4OCwgMTQwOTAsIDE0MDkyLCAxNDA5NCwgCisgICAgMTQwOTYsIDE0MDk4LCAxNDEwMCwgMTQxMDIsIDE0MTA0LCAxNDEwNiwgMTQxMDgsIDE0MTEwLCAxNDExMiwgMTQxMTQsIAorICAgIDE0MTE2LCAxNDExOCwgMTQxMjAsIDE0MTIyLCAxNDEyNCwgMTQxMjYsIDE0MTI4LCAxNDEzMCwgMTQxMzIsIDE0MTM0LCAKKyAgICAxNDEzNiwgMTQxMzgsIDE0MTQwLCAxNDE0MiwgMTQxNDQsIDE0MTQ2LCAxNDE0OCwgMTQxNTAsIDE0MTUyLCAxNDE1NCwgCisgICAgMTQxNTYsIDE0MTU4LCAxNDE2MCwgMTQxNjIsIDE0MTY0LCAxNDE2NiwgMTQxNjgsIDE0MTcwLCAxNDE3MiwgMTQxNzQsIAorICAgIDE0MTc2LCAxNDE3OCwgMTQxODAsIDE0MTgyLCAxNDE4NCwgMTQxODYsIDE0MTg4LCAxNDE5MCwgMTQxOTIsIDE0MTk0LCAKKyAgICAxNDE5NiwgMTQxOTgsIDE0MjAwLCAxNDIwMiwgMTQyMDQsIDE0MjA2LCAxNDIwOCwgMTQyMTAsIDE0MjEyLCAxNDIxNCwgCisgICAgMTQyMTYsIDE0MjE4LCAxNDIyMCwgMTQyMjIsIDE0MjI0LCAxNDIyNiwgMTQyMjgsIDE0MjMwLCAxNDIzMiwgMTQyMzQsIAorICAgIDE0MjM2LCAxNDIzOCwgMTQyNDAsIDE0MjQyLCAxNDI0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiAvKiBORkMgcGFpcnMgKi8KICNkZWZpbmUgQ09NUF9TSElGVCAyCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgY29tcF9pbmRleFtdID0gewotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDUsIDYsIDcsIDgsIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwLCAwLCAwLCAxMSwgMCwgMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzLCAKLSAgICAxNCwgMTUsIDAsIDAsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTgsIDAsIDE5LCAyMCwgMjEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAsIDMxLCAzMiwgMCwgMCwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDM0LCAzNSwgMzYsIDAsIDM3LCAzOCwgMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCA0MSwgNDIsIDQzLCA0NCwgCi0gICAgNDUsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDgsIDAsIDQ5LCAwLCA1MCwgNTEsIDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MywgMCwgNTQsIDAsIDU1LCA1NiwgNTcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4LCA1OSwgMCwgMCwgNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxLCA2MiwgCi0gICAgNjMsIDAsIDY0LCA2NSwgNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDczLCA3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzUsIDc2LCA3NywgCi0gICAgNzgsIDc5LCA4MCwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyLCA4MywgODQsIDAsIDg1LCA4NiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODcsIDg4LCAwLCA4OSwgOTAsIDkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MiwgOTMsIDk0LCAKLSAgICA5NSwgOTYsIDk3LCA5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTksIDAsIDAsIDAsIDEwMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTAxLCAxMDIsIDAsIDAsIDEwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDUsIDEwNiwgMTA3LCAwLCAxMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEwOSwgMTEwLCAxMTEsIDAsIDExMiwgMCwgMTEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQsIDExNSwgMTE2LCAKLSAgICAxMTcsIDExOCwgMTE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjAsIDAsIDAsIDEyMSwgMCwgMTIyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjMsIDEyNCwgMTI1LCAwLCAwLCAxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNywgCi0gICAgMTI4LCAwLCAxMjksIDEzMCwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAKLSAgICAxMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTQwLCAxNDEsIDE0MiwgMCwgMCwgMTQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NSwgMTQ2LCAwLCAxNDcsIAotICAgIDE0OCwgMTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE1NywgMCwgMTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTksIDAsIDE2MCwgCi0gICAgMCwgMTYxLCAxNjIsIDE2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY0LCAwLCAxNjUsIDAsIDE2NiwgMTY3LCAxNjgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE2OSwgMTcwLCAwLCAwLCAxNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MiwgCi0gICAgMTczLCAxNzQsIDAsIDE3NSwgMTc2LCAxNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAKLSAgICAxODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NCwgMTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLCAxOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5MywgMTk0LCAxOTUsIAotICAgIDAsIDE5NiwgMTk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTgsIDE5OSwgMCwgMjAwLCAyMDEsIDIwMiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyMTAsIDAsIDAsIDAsIDIxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEyLCAyMTMsIDIxNCwgMCwgMjE1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNywgCi0gICAgMjE4LCAyMTksIDAsIDIyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxLCAyMjIsIDIyMywgMCwgMjI0LCAwLCAKLSAgICAyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjI3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyMjgsIDAsIDIyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMiwgMjMzLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDIzNSwgMCwgMjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzOCwgMCwgMjM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNDAsIDI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ1LCAKLSAgICAyNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NywgMCwgMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUxLCAyNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU0LCAwLCAyNTUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU3LCAwLCAKLSAgICAyNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1OSwgMjYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYzLCAyNjQsIDI2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjY2LCAwLCAyNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2OCwgMCwgMjY5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI4MywgMCwgMjg0LCAwLCAyODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NiwgMCwgMjg3LCAwLCAKLSAgICAyODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4OSwgMCwgMjkwLCAwLCAyOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI5MiwgMCwgMjkzLCAwLCAyOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyOTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDMwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA1LCAzMDYsIDAsIDMwNywgCi0gICAgMCwgMCwgMCwgMzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDksIDAsIDAsIDMxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzExLCAwLCAwLCAzMTIsIDAsIDAsIDAsIDMxMywgMCwgMCwgMCwgMCwgMCwgMCwgMzE0LCAzMTUsIDAsIDMxNiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE3LCAwLCAwLCAzMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDMxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIwLCAzMjEsIDAsIDMyMiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIzLCAwLCAwLCAzMjQsIDAsIDAsIDAsIDMyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMzI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDMyOCwgMzI5LCAwLCAzMzAsIDAsIDAsIDAsIDMzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzMyLCAwLCAwLCAKLSAgICAzMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzNCwgMCwgMCwgMzM1LCAwLCAwLCAwLCAzMzYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDMzNywgMzM4LCAwLCAzMzksIDAsIDAsIDAsIDM0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQxLCAwLCAwLCAKLSAgICAzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzQ0LCAzNDUsIDAsIDM0NiwgMCwgMCwgMCwgMzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAzNDgsIDAsIDAsIDM0OSwgCi0gICAgMCwgMCwgMCwgMzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzUzLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMzU2LCAzNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAzNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MSwgMzYyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY1LCAzNjYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjksIDM3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzc0LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDM3NiwgMzc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzgsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzgwLCAKLSAgICAzODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODQsIDM4NSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMzg5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk1LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTYsIDM5NywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQwOSwgNDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEzLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTQsIDQxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDE5LCA0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzMywgMCwgCi0gICAgMCwgNDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQwLCA0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MiwgNDQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCA0NTAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1NywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDU4LCAwLCAwLCAwLCAwLCAwLCAwLCA0NTksIDAsIDAsIDAsIDAsIDAsIDAsIDQ2MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY0LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0NjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgNDczLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgNDgyLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODYsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MywgMCwgMCwgMCwgMCwgMCwgMCwgNDk0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDk3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0OTgsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5OSwgMCwgMCwgMCwgMCwgMCwgMCwgNTAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDUwNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTA2LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDUwOCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA1MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgNTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTksIDAsIDAsIDAsIDAsIDAsIDAsIDUyMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMzLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDUzOCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ1LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDU0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ4LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1MCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1NTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1MywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTgsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDU2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2OCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc1LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDU3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc4LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDU4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTk2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDU5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA2MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwMSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNjA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjExLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDYxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA2MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2MTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNjIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDYyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDYyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA2MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzMSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2MzMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQsIDUsIAorICAgIDYsIDcsIDgsIDksIDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMSwgMCwgMCwgMTIsIDAsIDEzLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNCwgMTUsIDE2LCAxNywgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE5LCAyMCwgMCwgMjEsIDIyLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgCisgICAgMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAzMiwgMzMsIDM0LCAzNSwgMCwgMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3LCAzOCwgMzksIDAsIAorICAgIDQwLCA0MSwgNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCA0NCwgNDUsIDQ2LCA0NywgMCwgNDgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgMCwgMCwgCisgICAgNTEsIDUyLCA1MywgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCAwLCA1NiwgMCwgNTcsIDU4LCA1OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjAsIDAsIDYxLCAwLCA2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjMsIDY0LCA2NSwgMCwgNjYsIDY3LCA2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjksIDcwLCA3MSwgNzIsIDczLCAwLCAKKyAgICA3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzUsIDc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3NywgMCwgNzgsIDc5LCA4MCwgODEsIDAsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgODQsIDg1LCAKKyAgICAwLCA4NiwgODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTAxLCAwLCAwLCAxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMywgMTA0LCAwLCAwLCAxMDUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTA3LCAxMDgsIDEwOSwgMCwgMTEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTEsIDExMiwgMTEzLCAKKyAgICAxMTQsIDExNSwgMCwgMCwgMTE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgCisgICAgMTIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjMsIDAsIDEyNCwgMCwgMCwgMTI1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMjYsIDEyNywgMTI4LCAwLCAwLCAxMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgMTM3LCAxMzgsIDEzOSwgCisgICAgMTQwLCAxNDEsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NSwgMTQ2LCAwLCAwLCAxNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU1LCAxNTYsIDE1NywgCisgICAgMTU4LCAxNTksIDE2MCwgMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjIsIDAsIDE2MywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY0LCAwLCAxNjUsIDAsIDE2NiwgMTY3LCAxNjgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE2OSwgMCwgMCwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NSwgCisgICAgMTc2LCAwLCAwLCAxNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAKKyAgICAxODMsIDE4NCwgMTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTIsIDAsIDE5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDEsIDIwMiwgCisgICAgMjAzLCAyMDQsIDIwNSwgMjA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDcsIDIwOCwgMCwgMjA5LCAKKyAgICAyMTAsIDIxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTksIDAsIDAsIDAsIDIyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjIxLCAyMjIsIDIyMywgMCwgMjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNiwgMjI3LCAyMjgsIDAsIDIyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjMwLCAyMzEsIDIzMiwgMCwgMjMzLCAwLCAyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzcsIDAsIDIzOCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MSwgMjQyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI0NCwgMjQ1LCAyNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ4LCAyNDksIDI1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjUxLCAyNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1MywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyNTUsIDI1NiwgMCwgMjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTgsIDAsIAorICAgIDI1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MiwgCisgICAgMjYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NSwgMjY2LCAyNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY5LCAyNzAsIDI3MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcyLCAyNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzYsIDI3NywgMCwgMjc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNzksIDAsIDI4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxLCAyODIsIAorICAgIDI4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyOTcsIDI5OCwgMjk5LCAwLCAzMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDMwMSwgMCwgMzAyLCAwLCAzMDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwNCwgMzA1LCAzMDYsIDAsIDMwNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA4LCAwLCAzMDksIDAsIDMxMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTIsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMzE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMzE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMzIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjEsIDMyMiwgMCwgMCwgCisgICAgMzIzLCAwLCAwLCAzMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNSwgMCwgMCwgMzI2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAzMjcsIDAsIDAsIDAsIDMyOCwgMCwgMCwgMzI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzAsIAorICAgIDMzMSwgMCwgMzMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzMsIDAsIDAsIDAsIDMzNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzMzYsIDMzNywgMzM4LCAwLCAzMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MCwgMCwgMCwgMzQxLCAKKyAgICAwLCAwLCAwLCAzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDUsIDM0NiwgMCwgCisgICAgMCwgMzQ3LCAwLCAwLCAzNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0OSwgMCwgMCwgMzUwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAzNTEsIDAsIDAsIDAsIDM1MiwgMCwgMCwgMzUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzNTQsIDM1NSwgMCwgMzU2LCAwLCAwLCAwLCAzNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1OCwgMCwgMCwgMCwgMzU5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDM2MSwgMzYyLCAzNjMsIDAsIDM2NCwgMCwgMCwgMzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjYsIDAsIAorICAgIDAsIDM2NywgMCwgMCwgMCwgMzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjksIDAsIDAsIDAsIDAsIDAsIDAsIDM3MCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzcxLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzc0LCAzNzUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMzc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3OSwgMzgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAzODEsIDM4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzgzLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODQsIDM4NSwgMzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAzODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4OCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzg5LCAzOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDM5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzkyLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDM5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTYsIDM5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMzk4LCAzOTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAxLCA0MDIsIDQwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNiwgNDA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEzLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIyLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI4LCAKKyAgICA0MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzMywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA0MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM3LCA0MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQzLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ2LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQ1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTMsIDAsIDAsIDAsIDQ1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDYxLCA0NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2MywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2NiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NjgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ2OSwgMCwgMCwgMCwgMCwgMCwgMCwgNDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQ3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc5LCAwLCAwLCAwLCAwLCAwLCAwLCA0ODAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODMsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODYsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDg4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MywgMCwgMCwgMCwgMCwgMCwgMCwgNDk0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDQ5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA1MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAzLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA1MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA1MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwOCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA1MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgNTEyLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTE1LCAwLCAwLCAwLCAwLCAwLCAwLCA1MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDUyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDUyMywgMCwgMCwgMCwgMCwgMCwgMCwgNTI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDUyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI3LCAwLCAwLCAwLCAwLCAwLCAwLCA1MjgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDUyOSwgMCwgMCwgMCwgMCwgMCwgMCwgNTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDUzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMzLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDUzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM2LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDUzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM5LCAwLCAwLCAwLCAwLCAwLCAwLCA1NDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDU0MSwgMCwgMCwgMCwgMCwgMCwgMCwgNTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA1NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1NTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1MywgMCwgMCwgMCwgMCwgMCwgMCwgNTU0LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDU1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU3LCAwLCAwLCAwLCAwLCAwLCAwLCA1NTgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNTYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNTYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzMsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNjA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTIsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNjE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNjIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjEsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNjIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjQsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNjI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNjI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNjMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzMsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjU2LCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29tcF9kYXRhW10gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgxNCwgMCwgMCwgMCwgODgwMCwgMCwgMCwgMCwgODgxNSwgMTkyLCAxOTMsIDE5NCwgCi0gICAgMTk1LCAyNTYsIDI1OCwgNTUwLCAxOTYsIDc4NDIsIDE5NywgMCwgNDYxLCA1MTIsIDUxNCwgMCwgMCwgMCwgNzg0MCwgMCwgCi0gICAgNzY4MCwgMCwgMCwgMjYwLCAwLCAwLCAwLCA3NjgyLCAwLCAwLCA3Njg0LCAwLCAwLCAwLCAwLCA3Njg2LCAwLCAwLCAyNjIsIAotICAgIDI2NCwgMCwgMCwgMCwgMjY2LCAwLCAwLCAwLCAwLCAyNjgsIDAsIDE5OSwgMCwgMCwgMCwgMCwgNzY5MCwgMCwgMCwgMCwgMCwgCi0gICAgMjcwLCAwLCA3NjkyLCAwLCAwLCAwLCA3Njk2LCAwLCA3Njk4LCAwLCAwLCA3Njk0LCAwLCAyMDAsIDIwMSwgMjAyLCA3ODY4LCAKLSAgICAyNzQsIDI3NiwgMjc4LCAyMDMsIDc4NjYsIDAsIDAsIDI4MiwgNTE2LCA1MTgsIDAsIDAsIDAsIDc4NjQsIDAsIDAsIDAsIAotICAgIDU1MiwgMjgwLCA3NzA0LCAwLCA3NzA2LCAwLCAwLCAwLCAwLCA3NzEwLCAwLCAwLCA1MDAsIDI4NCwgMCwgNzcxMiwgMjg2LCAKLSAgICAyODgsIDAsIDAsIDAsIDAsIDQ4NiwgMCwgMjkwLCAwLCAwLCAwLCAwLCAyOTIsIDAsIDAsIDAsIDc3MTQsIDc3MTgsIDAsIDAsIAotICAgIDAsIDU0MiwgMCwgNzcxNiwgMCwgMCwgMCwgNzcyMCwgMCwgMCwgNzcyMiwgMCwgMCwgMCwgMjA0LCAyMDUsIDIwNiwgMjk2LCAKLSAgICAyOTgsIDMwMCwgMzA0LCAyMDcsIDc4ODAsIDAsIDAsIDQ2MywgNTIwLCA1MjIsIDAsIDAsIDAsIDc4ODIsIDAsIDAsIDAsIDAsIAotICAgIDMwMiwgMCwgMCwgNzcyNCwgMCwgMCwgMCwgMCwgMzA4LCAwLCAwLCA3NzI4LCAwLCAwLCAwLCAwLCAwLCA0ODgsIDAsIAotICAgIDc3MzAsIDAsIDAsIDAsIDMxMCwgMCwgMCwgMCwgMCwgNzczMiwgMCwgMCwgMzEzLCAwLCAwLCAwLCAwLCAwLCAzMTcsIDAsIAotICAgIDc3MzQsIDAsIDAsIDAsIDMxNSwgMCwgNzc0MCwgMCwgMCwgNzczOCwgMCwgMCwgNzc0MiwgMCwgMCwgMCwgMCwgNzc0NCwgMCwgCi0gICAgMCwgNzc0NiwgMCwgMCwgNTA0LCAzMjMsIDAsIDIwOSwgMCwgMCwgNzc0OCwgMCwgMCwgMCwgMCwgMzI3LCAwLCA3NzUwLCAwLCAKLSAgICAwLCAwLCAzMjUsIDAsIDc3NTQsIDAsIDAsIDc3NTIsIDAsIDIxMCwgMjExLCAyMTIsIDIxMywgMzMyLCAzMzQsIDU1OCwgCi0gICAgMjE0LCA3ODg2LCAwLCAzMzYsIDQ2NSwgNTI0LCA1MjYsIDAsIDAsIDQxNiwgNzg4NCwgMCwgMCwgMCwgMCwgNDkwLCAwLCAwLCAKLSAgICA3NzY0LCAwLCAwLCAwLCAwLCA3NzY2LCAwLCAwLCAzNDAsIDAsIDAsIDAsIDAsIDc3NjgsIDAsIDAsIDAsIDAsIDM0NCwgCi0gICAgNTI4LCA1MzAsIDAsIDAsIDAsIDc3NzAsIDAsIDAsIDAsIDM0MiwgMCwgMCwgMCwgMCwgNzc3NCwgMCwgMCwgMzQ2LCAzNDgsIAotICAgIDAsIDAsIDAsIDc3NzYsIDAsIDAsIDAsIDAsIDM1MiwgMCwgNzc3OCwgMCwgMCwgNTM2LCAzNTAsIDAsIDAsIDAsIDAsIAotICAgIDc3ODYsIDAsIDAsIDAsIDAsIDM1NiwgMCwgNzc4OCwgMCwgMCwgNTM4LCAzNTQsIDAsIDc3OTIsIDAsIDAsIDc3OTAsIDAsIAotICAgIDIxNywgMjE4LCAyMTksIDM2MCwgMzYyLCAzNjQsIDAsIDIyMCwgNzkxMCwgMzY2LCAzNjgsIDQ2NywgNTMyLCA1MzQsIDAsIAotICAgIDAsIDQzMSwgNzkwOCwgNzc5NCwgMCwgMCwgMCwgMzcwLCA3Nzk4LCAwLCA3Nzk2LCAwLCAwLCAwLCAwLCAwLCA3ODA0LCAwLCAKLSAgICA3ODA2LCAwLCAwLCA3ODA4LCA3ODEwLCAzNzIsIDAsIDAsIDAsIDc4MTQsIDc4MTIsIDAsIDc4MTYsIDAsIDAsIDAsIDAsIAotICAgIDc4MTgsIDc4MjAsIDc5MjIsIDIyMSwgMzc0LCA3OTI4LCA1NjIsIDAsIDc4MjIsIDM3NiwgNzkyNiwgMCwgMCwgMCwgMCwgCi0gICAgNzkyNCwgMCwgMCwgMCwgMzc3LCA3ODI0LCAwLCAwLCAwLCAzNzksIDAsIDAsIDAsIDAsIDM4MSwgMCwgNzgyNiwgMCwgMCwgCi0gICAgMCwgMCwgNzgyOCwgMCwgMjI0LCAyMjUsIDIyNiwgMjI3LCAyNTcsIDI1OSwgNTUxLCAyMjgsIDc4NDMsIDIyOSwgMCwgNDYyLCAKLSAgICA1MTMsIDUxNSwgMCwgMCwgMCwgNzg0MSwgMCwgNzY4MSwgMCwgMCwgMjYxLCAwLCAwLCAwLCA3NjgzLCAwLCAwLCA3Njg1LCAKLSAgICAwLCAwLCAwLCAwLCA3Njg3LCAwLCAwLCAyNjMsIDI2NSwgMCwgMCwgMCwgMjY3LCAwLCAwLCAwLCAwLCAyNjksIDAsIDIzMSwgCi0gICAgMCwgMCwgMCwgMCwgNzY5MSwgMCwgMCwgMCwgMCwgMjcxLCAwLCA3NjkzLCAwLCAwLCAwLCA3Njk3LCAwLCA3Njk5LCAwLCAwLCAKLSAgICA3Njk1LCAwLCAyMzIsIDIzMywgMjM0LCA3ODY5LCAyNzUsIDI3NywgMjc5LCAyMzUsIDc4NjcsIDAsIDAsIDI4MywgNTE3LCAKLSAgICA1MTksIDAsIDAsIDAsIDc4NjUsIDAsIDAsIDAsIDU1MywgMjgxLCA3NzA1LCAwLCA3NzA3LCAwLCAwLCAwLCAwLCA3NzExLCAKLSAgICAwLCAwLCA1MDEsIDI4NSwgMCwgNzcxMywgMjg3LCAyODksIDAsIDAsIDAsIDAsIDQ4NywgMCwgMjkxLCAwLCAwLCAwLCAwLCAKLSAgICAyOTMsIDAsIDAsIDAsIDc3MTUsIDc3MTksIDAsIDAsIDAsIDU0MywgMCwgNzcxNywgMCwgMCwgMCwgNzcyMSwgMCwgMCwgCi0gICAgNzcyMywgMCwgNzgzMCwgMCwgMjM2LCAyMzcsIDIzOCwgMjk3LCAyOTksIDMwMSwgMCwgMjM5LCA3ODgxLCAwLCAwLCA0NjQsIAotICAgIDUyMSwgNTIzLCAwLCAwLCAwLCA3ODgzLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDAsIDc3MjUsIDAsIDAsIDAsIDAsIDMwOSwgMCwgCi0gICAgMCwgMCwgMCwgNDk2LCAwLCA3NzI5LCAwLCAwLCAwLCAwLCAwLCA0ODksIDAsIDc3MzEsIDAsIDAsIDAsIDMxMSwgMCwgMCwgCi0gICAgMCwgMCwgNzczMywgMCwgMCwgMzE0LCAwLCAwLCAwLCAwLCAwLCAzMTgsIDAsIDc3MzUsIDAsIDAsIDAsIDMxNiwgMCwgCi0gICAgNzc0MSwgMCwgMCwgNzczOSwgMCwgMCwgNzc0MywgMCwgMCwgMCwgMCwgNzc0NSwgMCwgMCwgNzc0NywgMCwgMCwgNTA1LCAKLSAgICAzMjQsIDAsIDI0MSwgMCwgMCwgNzc0OSwgMCwgMCwgMCwgMCwgMzI4LCAwLCA3NzUxLCAwLCAwLCAwLCAzMjYsIDAsIDc3NTUsIAotICAgIDAsIDAsIDc3NTMsIDAsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMzMzLCAzMzUsIDU1OSwgMjQ2LCA3ODg3LCAwLCAzMzcsIDQ2NiwgCi0gICAgNTI1LCA1MjcsIDAsIDAsIDQxNywgNzg4NSwgMCwgMCwgMCwgMCwgNDkxLCAwLCAwLCA3NzY1LCAwLCAwLCAwLCAwLCA3NzY3LCAKLSAgICAwLCAwLCAzNDEsIDAsIDAsIDAsIDAsIDc3NjksIDAsIDAsIDAsIDAsIDM0NSwgNTI5LCA1MzEsIDAsIDAsIDAsIDc3NzEsIDAsIAotICAgIDAsIDAsIDM0MywgMCwgMCwgMCwgMCwgNzc3NSwgMCwgMCwgMzQ3LCAzNDksIDAsIDAsIDAsIDc3NzcsIDAsIDAsIDAsIDAsIAotICAgIDM1MywgMCwgNzc3OSwgMCwgMCwgNTM3LCAzNTEsIDAsIDAsIDAsIDAsIDc3ODcsIDc4MzEsIDAsIDAsIDAsIDM1NywgMCwgCi0gICAgNzc4OSwgMCwgMCwgNTM5LCAzNTUsIDAsIDc3OTMsIDAsIDAsIDc3OTEsIDAsIDI0OSwgMjUwLCAyNTEsIDM2MSwgMzYzLCAKLSAgICAzNjUsIDAsIDI1MiwgNzkxMSwgMzY3LCAzNjksIDQ2OCwgNTMzLCA1MzUsIDAsIDAsIDQzMiwgNzkwOSwgNzc5NSwgMCwgMCwgCi0gICAgMCwgMzcxLCA3Nzk5LCAwLCA3Nzk3LCAwLCAwLCAwLCAwLCAwLCA3ODA1LCAwLCA3ODA3LCAwLCAwLCA3ODA5LCA3ODExLCAKLSAgICAzNzMsIDAsIDAsIDAsIDc4MTUsIDc4MTMsIDAsIDc4MzIsIDAsIDAsIDAsIDc4MTcsIDAsIDAsIDAsIDAsIDc4MTksIDc4MjEsIAotICAgIDc5MjMsIDI1MywgMzc1LCA3OTI5LCA1NjMsIDAsIDc4MjMsIDI1NSwgNzkyNywgNzgzMywgMCwgMCwgMCwgNzkyNSwgMCwgMCwgCi0gICAgMCwgMzc4LCA3ODI1LCAwLCAwLCAwLCAzODAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgNzgyNywgMCwgMCwgMCwgMCwgNzgyOSwgCi0gICAgMCwgODE3MywgOTAxLCAwLCAwLCA4MTI5LCAwLCAwLCAwLCA3ODQ2LCA3ODQ0LCAwLCA3ODUwLCA3ODQ4LCAwLCAwLCAwLCAKLSAgICA0NzgsIDAsIDAsIDAsIDAsIDUwNiwgMCwgMCwgMCwgNTA4LCAwLCAwLCA0ODIsIDAsIDAsIDAsIDAsIDc2ODgsIDAsIDAsIAotICAgIDc4NzIsIDc4NzAsIDAsIDc4NzYsIDc4NzQsIDAsIDAsIDAsIDAsIDc3MjYsIDAsIDAsIDc4OTAsIDc4ODgsIDAsIDc4OTQsIAotICAgIDc4OTIsIDAsIDAsIDAsIDAsIDc3NTYsIDAsIDAsIDU1NiwgMCwgMCwgNzc1OCwgNTU0LCAwLCAwLCAwLCAwLCA1MTAsIDAsIAotICAgIDAsIDQ3NSwgNDcxLCAwLCAwLCA0NjksIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MywgNzg0NywgNzg0NSwgMCwgNzg1MSwgNzg0OSwgCi0gICAgMCwgMCwgMCwgNDc5LCAwLCAwLCAwLCAwLCA1MDcsIDAsIDAsIDAsIDUwOSwgMCwgMCwgNDgzLCAwLCAwLCAwLCAwLCA3Njg5LCAKLSAgICAwLCAwLCA3ODczLCA3ODcxLCAwLCA3ODc3LCA3ODc1LCAwLCAwLCAwLCAwLCA3NzI3LCAwLCAwLCA3ODkxLCA3ODg5LCAwLCAKLSAgICA3ODk1LCA3ODkzLCAwLCAwLCAwLCAwLCA3NzU3LCAwLCAwLCA1NTcsIDAsIDAsIDc3NTksIDU1NSwgMCwgMCwgMCwgMCwgCi0gICAgNTExLCAwLCAwLCA0NzYsIDQ3MiwgMCwgMCwgNDcwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzQsIDc4NTYsIDc4NTQsIDAsIAotICAgIDc4NjAsIDc4NTgsIDAsIDAsIDAsIDc4NTcsIDc4NTUsIDAsIDc4NjEsIDc4NTksIDAsIDAsIDAsIDc3MDAsIDc3MDIsIDAsIAotICAgIDAsIDc3MDEsIDc3MDMsIDAsIDAsIDc3NjAsIDc3NjIsIDAsIDAsIDc3NjEsIDc3NjMsIDAsIDAsIDAsIDAsIDc3ODAsIDAsIAotICAgIDAsIDAsIDc3ODEsIDAsIDAsIDAsIDc3ODIsIDAsIDAsIDAsIDc3ODMsIDAsIDAsIDc4MDAsIDAsIDAsIDAsIDc4MDEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc4MDIsIDAsIDAsIDAsIDc4MDMsIDAsIDAsIDc4MzUsIDAsIDc5MDAsIDc4OTgsIDAsIDc5MDQsIAotICAgIDc5MDIsIDAsIDAsIDAsIDAsIDc5MDYsIDAsIDAsIDc5MDEsIDc4OTksIDAsIDc5MDUsIDc5MDMsIDAsIDAsIDAsIDAsIAotICAgIDc5MDcsIDAsIDAsIDc5MTQsIDc5MTIsIDAsIDc5MTgsIDc5MTYsIDAsIDAsIDAsIDAsIDc5MjAsIDAsIDAsIDc5MTUsIAotICAgIDc5MTMsIDAsIDc5MTksIDc5MTcsIDAsIDAsIDAsIDAsIDc5MjEsIDAsIDAsIDAsIDAsIDAsIDQ5NCwgNDkyLCAwLCAwLCAwLCAKLSAgICA0OTMsIDAsIDAsIDAsIDQ4MCwgMCwgMCwgMCwgNDgxLCAwLCAwLCAwLCAwLCA3NzA4LCAwLCAwLCAwLCA3NzA5LCAwLCAwLCAKLSAgICA1NjAsIDAsIDAsIDAsIDU2MSwgMCwgMCwgMCwgMCwgMCwgMCwgNDk1LCA4MTIyLCA5MDIsIDAsIDAsIDgxMjEsIDgxMjAsIDAsIAotICAgIDAsIDAsIDAsIDc5NDQsIDc5NDUsIDAsIDgxMjQsIDAsIDAsIDgxMzYsIDkwNCwgMCwgMCwgMCwgMCwgNzk2MCwgNzk2MSwgCi0gICAgODEzOCwgOTA1LCAwLCAwLCAwLCAwLCA3OTc2LCA3OTc3LCAwLCA4MTQwLCAwLCAwLCA4MTU0LCA5MDYsIDAsIDAsIDgxNTMsIAotICAgIDgxNTIsIDAsIDkzOCwgMCwgMCwgNzk5MiwgNzk5MywgODE4NCwgOTA4LCAwLCAwLCAwLCAwLCA4MDA4LCA4MDA5LCAwLCAwLCAKLSAgICAwLCA4MTcyLCA4MTcwLCA5MTAsIDAsIDAsIDgxNjksIDgxNjgsIDAsIDkzOSwgMCwgMCwgMCwgODAyNSwgODE4NiwgOTExLCAKLSAgICAwLCAwLCAwLCAwLCA4MDQwLCA4MDQxLCAwLCA4MTg4LCAwLCAwLCAwLCA4MTE2LCAwLCAwLCAwLCA4MTMyLCAwLCAwLCAKLSAgICA4MDQ4LCA5NDAsIDAsIDAsIDgxMTMsIDgxMTIsIDAsIDAsIDAsIDAsIDc5MzYsIDc5MzcsIDgxMTgsIDgxMTUsIDAsIDAsIAotICAgIDgwNTAsIDk0MSwgMCwgMCwgMCwgMCwgNzk1MiwgNzk1MywgODA1MiwgOTQyLCAwLCAwLCAwLCAwLCA3OTY4LCA3OTY5LCAKLSAgICA4MTM0LCA4MTMxLCAwLCAwLCA4MDU0LCA5NDMsIDAsIDAsIDgxNDUsIDgxNDQsIDAsIDk3MCwgMCwgMCwgNzk4NCwgNzk4NSwgCi0gICAgODE1MCwgMCwgMCwgMCwgODA1NiwgOTcyLCAwLCAwLCAwLCAwLCA4MDAwLCA4MDAxLCAwLCAwLCA4MTY0LCA4MTY1LCA4MDU4LCAKLSAgICA5NzMsIDAsIDAsIDgxNjEsIDgxNjAsIDAsIDk3MSwgMCwgMCwgODAxNiwgODAxNywgODE2NiwgMCwgMCwgMCwgODA2MCwgCi0gICAgOTc0LCAwLCAwLCAwLCAwLCA4MDMyLCA4MDMzLCA4MTgyLCA4MTc5LCAwLCAwLCA4MTQ2LCA5MTIsIDAsIDAsIDgxNTEsIDAsIAotICAgIDAsIDAsIDgxNjIsIDk0NCwgMCwgMCwgODE2NywgMCwgMCwgMCwgMCwgODE4MCwgMCwgMCwgMCwgOTc5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5ODAsIDAsIDAsIDAsIDEwMzEsIDAsIDEyMzIsIDAsIDEyMzQsIDAsIDEwMjcsIDAsIDAsIDEwMjQsIDAsIDAsIDAsIDAsIAotICAgIDEyMzgsIDAsIDEwMjUsIDAsIDEyMTcsIDAsIDEyNDQsIDAsIDAsIDAsIDEyNDYsIDEwMzcsIDAsIDAsIDAsIDEyNTAsIAotICAgIDEwNDksIDAsIDEyNTIsIDAsIDEwMzYsIDAsIDAsIDAsIDAsIDAsIDEyNTQsIDEyNjIsIDEwMzgsIDAsIDEyNjQsIDAsIDAsIAotICAgIDEyNjYsIDAsIDAsIDAsIDAsIDEyNjgsIDAsIDAsIDAsIDEyNzIsIDAsIDAsIDAsIDEyNjAsIDAsIDEyMzMsIDAsIDEyMzUsIAotICAgIDAsIDExMDcsIDAsIDAsIDExMDQsIDAsIDAsIDAsIDAsIDEyMzksIDAsIDExMDUsIDAsIDEyMTgsIDAsIDEyNDUsIDAsIDAsIAotICAgIDAsIDEyNDcsIDExMTcsIDAsIDAsIDAsIDEyNTEsIDEwODEsIDAsIDEyNTMsIDAsIDExMTYsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNTUsIDEyNjMsIDExMTgsIDAsIDEyNjUsIDAsIDAsIDEyNjcsIDAsIDAsIDAsIDAsIDEyNjksIDAsIDAsIDAsIDEyNzMsIAotICAgIDAsIDAsIDAsIDEyNjEsIDAsIDAsIDAsIDExMTEsIDExNDIsIDAsIDAsIDAsIDExNDMsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNDIsIDAsIDAsIDAsIDEyNDMsIDAsIDAsIDAsIDEyNTgsIDAsIDAsIDAsIDEyNTksIDAsIDAsIDE1NzAsIDE1NzEsIAotICAgIDE1NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NzIsIDAsIDAsIDAsIDE1NzQsIDAsIDAsIDAsIDE3MzAsIDAsIDAsIDAsIAotICAgIDE3NDcsIDAsIDAsIDAsIDE3MjgsIDAsIDIzNDUsIDAsIDAsIDAsIDIzNTMsIDAsIDAsIDAsIDIzNTYsIDAsIDAsIDAsIDAsIAotICAgIDI1MDcsIDI1MDgsIDI4OTEsIDI4ODgsIDI4OTIsIDAsIDI5NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMTgsIDMwMjAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDMwMTksIDAsIDMxNDQsIDAsIDAsIDAsIDAsIDAsIDMyNjQsIDAsIDAsIDMyNzQsIDMyNzEsIAotICAgIDMyNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNzUsIDAsIDM0MDIsIDM0MDQsIDAsIDAsIDM0MDMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM1NDYsIDM1NDgsIDM1NTAsIDAsIDAsIDAsIDAsIDAsIDM1NDksIDAsIDAsIDQxMzQsIDAsIDAsIDAsIDAsIDY5MTgsIDAsIAotICAgIDAsIDAsIDY5MjAsIDAsIDAsIDAsIDY5MjIsIDAsIDAsIDAsIDY5MjQsIDAsIDAsIDAsIDY5MjYsIDAsIDAsIDAsIDY5MzAsIAotICAgIDAsIDAsIDAsIDY5NzEsIDAsIDAsIDAsIDY5NzMsIDAsIDAsIDAsIDY5NzYsIDAsIDAsIDAsIDY5NzcsIDAsIDAsIDAsIAotICAgIDY5NzksIDc3MzYsIDAsIDAsIDAsIDc3MzcsIDAsIDAsIDAsIDc3NzIsIDAsIDAsIDAsIDc3NzMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3ODQsIDAsIDAsIDAsIDc3ODUsIDAsIDAsIDAsIDc4NTIsIDAsIDAsIDc4NjIsIDAsIDAsIDAsIDAsIDc4NTMsIDAsIDAsIAotICAgIDc4NjMsIDAsIDAsIDAsIDAsIDc4NzgsIDAsIDAsIDAsIDc4NzksIDAsIDAsIDAsIDc4OTYsIDAsIDAsIDAsIDc4OTcsIDAsIAotICAgIDc5MzgsIDc5NDAsIDAsIDAsIDc5NDIsIDgwNjQsIDAsIDAsIDc5MzksIDc5NDEsIDAsIDAsIDc5NDMsIDgwNjUsIDAsIDAsIAotICAgIDAsIDgwNjYsIDAsIDAsIDAsIDgwNjcsIDAsIDAsIDAsIDgwNjgsIDAsIDAsIDAsIDgwNjksIDAsIDAsIDAsIDgwNzAsIDAsIAotICAgIDAsIDAsIDgwNzEsIDAsIDAsIDc5NDYsIDc5NDgsIDAsIDAsIDc5NTAsIDgwNzIsIDAsIDAsIDc5NDcsIDc5NDksIDAsIDAsIAotICAgIDc5NTEsIDgwNzMsIDAsIDAsIDAsIDgwNzQsIDAsIDAsIDAsIDgwNzUsIDAsIDAsIDAsIDgwNzYsIDAsIDAsIDAsIDgwNzcsIAotICAgIDAsIDAsIDAsIDgwNzgsIDAsIDAsIDAsIDgwNzksIDAsIDAsIDc5NTQsIDc5NTYsIDAsIDAsIDc5NTUsIDc5NTcsIDAsIDAsIAotICAgIDc5NjIsIDc5NjQsIDAsIDAsIDc5NjMsIDc5NjUsIDAsIDAsIDc5NzAsIDc5NzIsIDAsIDAsIDc5NzQsIDgwODAsIDAsIDAsIAotICAgIDc5NzEsIDc5NzMsIDAsIDAsIDc5NzUsIDgwODEsIDAsIDAsIDAsIDgwODIsIDAsIDAsIDAsIDgwODMsIDAsIDAsIDAsIAotICAgIDgwODQsIDAsIDAsIDAsIDgwODUsIDAsIDAsIDAsIDgwODYsIDAsIDAsIDAsIDgwODcsIDAsIDAsIDc5NzgsIDc5ODAsIDAsIAotICAgIDAsIDc5ODIsIDgwODgsIDAsIDAsIDc5NzksIDc5ODEsIDAsIDAsIDc5ODMsIDgwODksIDAsIDAsIDAsIDgwOTAsIDAsIDAsIAotICAgIDAsIDgwOTEsIDAsIDAsIDAsIDgwOTIsIDAsIDAsIDAsIDgwOTMsIDAsIDAsIDAsIDgwOTQsIDAsIDAsIDAsIDgwOTUsIDAsIAotICAgIDAsIDc5ODYsIDc5ODgsIDAsIDAsIDc5OTAsIDAsIDAsIDAsIDc5ODcsIDc5ODksIDAsIDAsIDc5OTEsIDAsIDAsIDAsIAotICAgIDc5OTQsIDc5OTYsIDAsIDAsIDc5OTgsIDAsIDAsIDAsIDc5OTUsIDc5OTcsIDAsIDAsIDc5OTksIDAsIDAsIDAsIDgwMDIsIAotICAgIDgwMDQsIDAsIDAsIDgwMDMsIDgwMDUsIDAsIDAsIDgwMTAsIDgwMTIsIDAsIDAsIDgwMTEsIDgwMTMsIDAsIDAsIDgwMTgsIAotICAgIDgwMjAsIDAsIDAsIDgwMjIsIDAsIDAsIDAsIDgwMTksIDgwMjEsIDAsIDAsIDgwMjMsIDAsIDAsIDAsIDgwMjcsIDgwMjksIAotICAgIDAsIDAsIDgwMzEsIDAsIDAsIDAsIDgwMzQsIDgwMzYsIDAsIDAsIDgwMzgsIDgwOTYsIDAsIDAsIDgwMzUsIDgwMzcsIDAsIAotICAgIDAsIDgwMzksIDgwOTcsIDAsIDAsIDAsIDgwOTgsIDAsIDAsIDAsIDgwOTksIDAsIDAsIDAsIDgxMDAsIDAsIDAsIDAsIAotICAgIDgxMDEsIDAsIDAsIDAsIDgxMDIsIDAsIDAsIDAsIDgxMDMsIDAsIDAsIDgwNDIsIDgwNDQsIDAsIDAsIDgwNDYsIDgxMDQsIAotICAgIDAsIDAsIDgwNDMsIDgwNDUsIDAsIDAsIDgwNDcsIDgxMDUsIDAsIDAsIDAsIDgxMDYsIDAsIDAsIDAsIDgxMDcsIDAsIDAsIAotICAgIDAsIDgxMDgsIDAsIDAsIDAsIDgxMDksIDAsIDAsIDAsIDgxMTAsIDAsIDAsIDAsIDgxMTEsIDAsIDAsIDAsIDgxMTQsIDAsIAotICAgIDAsIDAsIDgxMzAsIDAsIDAsIDAsIDgxNzgsIDAsIDAsIDAsIDgxMTksIDAsIDAsIDgxNDEsIDgxNDIsIDAsIDAsIDgxNDMsIAotICAgIDAsIDAsIDAsIDAsIDgxMzUsIDAsIDAsIDAsIDgxODMsIDAsIDAsIDgxNTcsIDgxNTgsIDAsIDAsIDgxNTksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDg2MDIsIDAsIDAsIDAsIDg2MDMsIDAsIDAsIDAsIDg2MjIsIDAsIDAsIDAsIDg2NTMsIDAsIDAsIDAsIAotICAgIDg2NTUsIDAsIDAsIDAsIDg2NTQsIDAsIDAsIDAsIDg3MDgsIDAsIDAsIDAsIDg3MTMsIDAsIDAsIDAsIDg3MTYsIDAsIDAsIAotICAgIDAsIDg3NDAsIDAsIDAsIDAsIDg3NDIsIDAsIDAsIDAsIDg3NjksIDAsIDAsIDAsIDg3NzIsIDAsIDAsIDAsIDg3NzUsIDAsIAotICAgIDAsIDAsIDg3NzcsIDAsIDAsIDAsIDg4MTMsIDAsIDAsIDAsIDg4MDIsIDAsIDAsIDAsIDg4MTYsIDAsIDAsIDAsIDg4MTcsIAotICAgIDAsIDAsIDAsIDg4MjAsIDAsIDAsIDAsIDg4MjEsIDAsIDAsIDAsIDg4MjQsIDAsIDAsIDAsIDg4MjUsIDAsIDAsIDAsIAotICAgIDg4MzIsIDAsIDAsIDAsIDg4MzMsIDAsIDAsIDAsIDg5MjgsIDAsIDAsIDAsIDg5MjksIDAsIDAsIDAsIDg4MzYsIDAsIDAsIAotICAgIDAsIDg4MzcsIDAsIDAsIDAsIDg4NDAsIDAsIDAsIDAsIDg4NDEsIDAsIDAsIDAsIDg5MzAsIDAsIDAsIDAsIDg5MzEsIDAsIAotICAgIDAsIDAsIDg4NzYsIDAsIDAsIDAsIDg4NzcsIDAsIDAsIDAsIDg4NzgsIDAsIDAsIDAsIDg4NzksIDAsIDAsIDAsIDg5MzgsIAotICAgIDAsIDAsIDAsIDg5MzksIDAsIDAsIDAsIDg5NDAsIDAsIDAsIDAsIDg5NDEsIDEyNDM2LCAwLCAwLCAwLCAxMjM2NCwgMCwgMCwgCi0gICAgMCwgMTIzNjYsIDAsIDAsIDAsIDEyMzY4LCAwLCAwLCAwLCAxMjM3MCwgMCwgMCwgMCwgMTIzNzIsIDAsIDAsIDAsIDEyMzc0LCAKLSAgICAwLCAwLCAwLCAxMjM3NiwgMCwgMCwgMCwgMTIzNzgsIDAsIDAsIDAsIDEyMzgwLCAwLCAwLCAwLCAxMjM4MiwgMCwgMCwgMCwgCi0gICAgMTIzODQsIDAsIDAsIDAsIDEyMzg2LCAwLCAwLCAwLCAxMjM4OSwgMCwgMCwgMCwgMTIzOTEsIDAsIDAsIDAsIDEyMzkzLCAwLCAKLSAgICAwLCAwLCAxMjQwMCwgMTI0MDEsIDAsIDAsIDEyNDAzLCAxMjQwNCwgMCwgMCwgMTI0MDYsIDEyNDA3LCAwLCAwLCAxMjQwOSwgCi0gICAgMTI0MTAsIDAsIDAsIDEyNDEyLCAxMjQxMywgMCwgMCwgMTI0NDYsIDAsIDAsIDAsIDEyNTMyLCAwLCAwLCAwLCAxMjQ2MCwgCi0gICAgMCwgMCwgMCwgMTI0NjIsIDAsIDAsIDAsIDEyNDY0LCAwLCAwLCAwLCAxMjQ2NiwgMCwgMCwgMCwgMTI0NjgsIDAsIDAsIDAsIAotICAgIDEyNDcwLCAwLCAwLCAwLCAxMjQ3MiwgMCwgMCwgMCwgMTI0NzQsIDAsIDAsIDAsIDEyNDc2LCAwLCAwLCAwLCAxMjQ3OCwgMCwgCi0gICAgMCwgMCwgMTI0ODAsIDAsIDAsIDAsIDEyNDgyLCAwLCAwLCAwLCAxMjQ4NSwgMCwgMCwgMCwgMTI0ODcsIDAsIDAsIDAsIAotICAgIDEyNDg5LCAwLCAwLCAwLCAxMjQ5NiwgMTI0OTcsIDAsIDAsIDEyNDk5LCAxMjUwMCwgMCwgMCwgMTI1MDIsIDEyNTAzLCAwLCAKLSAgICAwLCAxMjUwNSwgMTI1MDYsIDAsIDAsIDEyNTA4LCAxMjUwOSwgMCwgMCwgMTI1MzUsIDAsIDAsIDAsIDEyNTM2LCAwLCAwLCAKLSAgICAwLCAxMjUzNywgMCwgMCwgMCwgMTI1MzgsIDAsIDAsIDAsIDEyNTQyLCAwLCAwLCAwLCAwLCAwLCA2OTc4NiwgMCwgMCwgMCwgCi0gICAgNjk3ODgsIDAsIDAsIDAsIDY5ODAzLCAwLCAwLCAwLCAwLCA2OTkzNCwgMCwgMCwgMCwgNjk5MzUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4MTQsIDAsIDg4MDAsIDAsIDAsIDAsIDAsIDAsIDg4MTUsIDAsIDAsIDE5MiwgMTkzLCAKKyAgICAxOTQsIDE5NSwgMjU2LCAyNTgsIDU1MCwgMTk2LCA3ODQyLCAxOTcsIDAsIDQ2MSwgNTEyLCA1MTQsIDAsIDAsIDAsIDc4NDAsIAorICAgIDAsIDc2ODAsIDAsIDAsIDI2MCwgMCwgMCwgMCwgMCwgMCwgNzY4MiwgMCwgMCwgNzY4NCwgMCwgMCwgMCwgMCwgNzY4NiwgMCwgCisgICAgMCwgMCwgMCwgMjYyLCAyNjQsIDAsIDAsIDAsIDI2NiwgMCwgMCwgMCwgMCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAxOTksIDAsIAorICAgIDAsIDc2OTAsIDAsIDAsIDAsIDAsIDI3MCwgMCwgNzY5MiwgMCwgMCwgMCwgNzY5NiwgMCwgNzY5OCwgMCwgMCwgNzY5NCwgMCwgCisgICAgMCwgMCwgMjAwLCAyMDEsIDIwMiwgNzg2OCwgMjc0LCAyNzYsIDI3OCwgMjAzLCA3ODY2LCAwLCAwLCAyODIsIDUxNiwgNTE4LCAKKyAgICAwLCAwLCAwLCA3ODY0LCAwLCAwLCAwLCA1NTIsIDI4MCwgNzcwNCwgMCwgNzcwNiwgMCwgMCwgNzcxMCwgMCwgMCwgMCwgMCwgCisgICAgNTAwLCAyODQsIDAsIDc3MTIsIDI4NiwgMjg4LCAwLCAwLCAwLCAwLCA0ODYsIDAsIDAsIDAsIDAsIDAsIDI5MCwgMCwgMCwgCisgICAgMjkyLCAwLCAwLCAwLCA3NzE0LCA3NzE4LCAwLCAwLCAwLCA1NDIsIDAsIDc3MTYsIDAsIDAsIDAsIDc3MjAsIDAsIDAsIAorICAgIDc3MjIsIDAsIDAsIDAsIDAsIDAsIDIwNCwgMjA1LCAyMDYsIDI5NiwgMjk4LCAzMDAsIDMwNCwgMjA3LCA3ODgwLCAwLCAwLCAKKyAgICA0NjMsIDUyMCwgNTIyLCAwLCAwLCAwLCA3ODgyLCAzMDIsIDAsIDAsIDc3MjQsIDAsIDAsIDMwOCwgMCwgMCwgMCwgMCwgCisgICAgNzcyOCwgMCwgNDg4LCAwLCAwLCAwLCAwLCAwLCA3NzMwLCAwLCAwLCAwLCAzMTAsIDc3MzIsIDAsIDAsIDAsIDAsIDMxMywgCisgICAgMCwgMCwgMCwgMCwgMCwgMzE3LCAwLCA3NzM0LCAwLCAwLCAwLCAzMTUsIDAsIDc3NDAsIDAsIDAsIDc3MzgsIDAsIDAsIDAsIAorICAgIDAsIDc3NDIsIDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDc3NDYsIDUwNCwgMzIzLCAwLCAyMDksIDAsIDAsIDc3NDgsIDAsIAorICAgIDAsIDAsIDAsIDMyNywgMCwgNzc1MCwgMCwgMCwgMCwgMzI1LCAwLCA3NzU0LCAwLCAwLCA3NzUyLCAwLCAwLCAwLCAyMTAsIAorICAgIDIxMSwgMjEyLCAyMTMsIDMzMiwgMzM0LCA1NTgsIDIxNCwgNzg4NiwgMCwgMzM2LCA0NjUsIDUyNCwgNTI2LCAwLCAwLCAKKyAgICA0MTYsIDc4ODQsIDQ5MCwgMCwgMCwgMCwgMCwgNzc2NCwgMCwgMCwgMCwgMCwgNzc2NiwgMCwgMCwgMCwgMCwgMzQwLCAKKyAgICA3NzY4LCAwLCAwLCAwLCAwLCAzNDQsIDUyOCwgNTMwLCAwLCAwLCAwLCA3NzcwLCAwLCAwLCAwLCAzNDIsIDc3NzQsIDAsIDAsIAorICAgIDAsIDAsIDM0NiwgMzQ4LCAwLCAwLCAwLCA3Nzc2LCAwLCAwLCAwLCAwLCAzNTIsIDAsIDc3NzgsIDAsIDAsIDUzNiwgMzUwLCAKKyAgICAwLCAwLCA3Nzg2LCAwLCAwLCAwLCAwLCAzNTYsIDAsIDAsIDAsIDAsIDAsIDc3ODgsIDAsIDAsIDUzOCwgMzU0LCAwLCAKKyAgICA3NzkyLCAwLCAwLCA3NzkwLCAwLCAwLCAwLCAyMTcsIDIxOCwgMjE5LCAzNjAsIDM2MiwgMzY0LCAwLCAyMjAsIDc5MTAsIAorICAgIDM2NiwgMzY4LCA0NjcsIDUzMiwgNTM0LCAwLCAwLCA0MzEsIDc5MDgsIDc3OTQsIDAsIDAsIDAsIDM3MCwgNzc5OCwgMCwgCisgICAgNzc5NiwgMCwgMCwgMCwgNzgwNCwgMCwgMCwgMCwgMCwgMCwgNzgwNiwgNzgwOCwgNzgxMCwgMzcyLCAwLCAwLCAwLCA3ODE0LCAKKyAgICA3ODEyLCAwLCA3ODE2LCAwLCAwLCA3ODE4LCA3ODIwLCAwLCAwLCA3OTIyLCAyMjEsIDM3NCwgNzkyOCwgNTYyLCAwLCAKKyAgICA3ODIyLCAzNzYsIDc5MjYsIDAsIDAsIDAsIDAsIDc5MjQsIDAsIDAsIDAsIDAsIDAsIDM3NywgNzgyNCwgMCwgMCwgMCwgCisgICAgMzc5LCAwLCAwLCAwLCAwLCAzODEsIDAsIDAsIDAsIDAsIDAsIDc4MjYsIDc4MjgsIDAsIDAsIDAsIDIyNCwgMjI1LCAyMjYsIAorICAgIDIyNywgMjU3LCAyNTksIDU1MSwgMjI4LCA3ODQzLCAyMjksIDAsIDQ2MiwgNTEzLCA1MTUsIDAsIDAsIDAsIDc4NDEsIDAsIAorICAgIDc2ODEsIDAsIDAsIDI2MSwgMCwgNzY4MywgMCwgMCwgMCwgMCwgMCwgMCwgNzY4NSwgNzY4NywgMCwgMCwgMCwgMCwgMjYzLCAKKyAgICAyNjUsIDAsIDAsIDAsIDI2NywgMCwgMCwgMCwgMCwgMjY5LCAwLCAyMzEsIDAsIDAsIDc2OTEsIDAsIDAsIDAsIDAsIDI3MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgNzY5MywgMCwgMCwgMCwgNzY5NywgMCwgNzY5OSwgMCwgMCwgNzY5NSwgMCwgMCwgMCwgMjMyLCAKKyAgICAyMzMsIDIzNCwgNzg2OSwgMjc1LCAyNzcsIDI3OSwgMjM1LCA3ODY3LCAwLCAwLCAyODMsIDUxNywgNTE5LCAwLCAwLCAwLCAKKyAgICA3ODY1LCAwLCAwLCAwLCA1NTMsIDI4MSwgNzcwNSwgMCwgNzcwNywgMCwgMCwgNzcxMSwgMCwgMCwgMCwgMCwgNTAxLCAyODUsIAorICAgIDAsIDc3MTMsIDI4NywgMjg5LCAwLCAwLCAwLCAwLCA0ODcsIDAsIDI5MSwgMCwgMCwgMjkzLCAwLCAwLCAwLCA3NzE1LCAKKyAgICA3NzE5LCAwLCAwLCAwLCA1NDMsIDAsIDAsIDAsIDAsIDAsIDc3MTcsIDAsIDAsIDAsIDc3MjEsIDAsIDAsIDc3MjMsIDAsIAorICAgIDc4MzAsIDAsIDAsIDAsIDIzNiwgMjM3LCAyMzgsIDI5NywgMjk5LCAzMDEsIDAsIDIzOSwgNzg4MSwgMCwgMCwgNDY0LCAKKyAgICA1MjEsIDUyMywgMCwgMCwgMCwgNzg4MywgMCwgMCwgMCwgMCwgMzAzLCAwLCAwLCA3NzI1LCAwLCAwLCAzMDksIDAsIDAsIDAsIAorICAgIDAsIDQ5NiwgMCwgMCwgMCwgNzcyOSwgMCwgMCwgMCwgMCwgMCwgNDg5LCAwLCA3NzMxLCAwLCAwLCAwLCAzMTEsIDAsIDAsIAorICAgIDAsIDAsIDc3MzMsIDAsIDAsIDAsIDAsIDMxNCwgMCwgMzE4LCAwLCAwLCAwLCAwLCAwLCA3NzM1LCAwLCAwLCAwLCAzMTYsIAorICAgIDAsIDc3NDEsIDAsIDAsIDc3MzksIDAsIDAsIDAsIDAsIDc3NDMsIDAsIDAsIDAsIDAsIDc3NDUsIDAsIDAsIDc3NDcsIDAsIAorICAgIDAsIDAsIDAsIDUwNSwgMzI0LCAwLCAyNDEsIDAsIDAsIDc3NDksIDAsIDAsIDAsIDAsIDMyOCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzc1MSwgMCwgMCwgMCwgMzI2LCAwLCA3NzU1LCAwLCAwLCA3NzUzLCAwLCAwLCAwLCAyNDIsIDI0MywgMjQ0LCAyNDUsIAorICAgIDMzMywgMzM1LCA1NTksIDI0NiwgNzg4NywgMCwgMzM3LCA0NjYsIDUyNSwgNTI3LCAwLCAwLCA0MTcsIDc4ODUsIDAsIDAsIAorICAgIDAsIDAsIDQ5MSwgMCwgMCwgMCwgMCwgNzc2NSwgNzc2NywgMCwgMCwgMCwgMCwgMzQxLCAwLCAwLCAwLCAwLCA3NzY5LCAwLCAKKyAgICAwLCAwLCAwLCAzNDUsIDUyOSwgNTMxLCAwLCAwLCAwLCA3NzcxLCAwLCAwLCAwLCAzNDMsIDAsIDAsIDAsIDAsIDc3NzUsIDAsIAorICAgIDAsIDAsIDAsIDM0NywgMzQ5LCAwLCAwLCAwLCA3Nzc3LCAwLCAwLCAwLCAwLCAzNTMsIDAsIDAsIDAsIDAsIDAsIDc3NzksIAorICAgIDAsIDAsIDUzNywgMzUxLCAwLCAwLCA3Nzg3LCA3ODMxLCAwLCAwLCAwLCAzNTcsIDAsIDc3ODksIDAsIDAsIDUzOSwgMzU1LCAKKyAgICAwLCA3NzkzLCAwLCAwLCA3NzkxLCAwLCAwLCAwLCAyNDksIDI1MCwgMjUxLCAzNjEsIDM2MywgMzY1LCAwLCAyNTIsIDc5MTEsIAorICAgIDM2NywgMzY5LCA0NjgsIDUzMywgNTM1LCAwLCAwLCA0MzIsIDc5MDksIDc3OTUsIDAsIDAsIDAsIDM3MSwgNzc5OSwgMCwgCisgICAgNzc5NywgMCwgMCwgMCwgNzgwNSwgMCwgNzgwNywgMCwgMCwgMCwgMCwgNzgwOSwgNzgxMSwgMzczLCAwLCAwLCAwLCA3ODE1LCAKKyAgICA3ODEzLCAwLCA3ODMyLCAwLCAwLCAwLCA3ODE3LCAwLCAwLCA3ODE5LCA3ODIxLCAwLCAwLCA3OTIzLCAyNTMsIDM3NSwgCisgICAgNzkyOSwgNTYzLCAwLCA3ODIzLCAyNTUsIDc5MjcsIDc4MzMsIDAsIDAsIDAsIDc5MjUsIDAsIDM3OCwgNzgyNSwgMCwgMCwgCisgICAgMCwgMzgwLCAwLCAwLCAwLCAwLCAzODIsIDAsIDc4MjcsIDAsIDAsIDAsIDAsIDc4MjksIDAsIDAsIDAsIDgxNzMsIDkwMSwgCisgICAgMCwgMCwgODEyOSwgMCwgNzg0NiwgNzg0NCwgMCwgNzg1MCwgNzg0OCwgMCwgMCwgMCwgMCwgMCwgNDc4LCAwLCAwLCA1MDYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDUwOCwgMCwgMCwgNDgyLCAwLCAwLCA3Njg4LCAwLCAwLCAwLCAwLCA3ODcyLCA3ODcwLCAwLCAKKyAgICA3ODc2LCAwLCAwLCAwLCAwLCA3ODc0LCAwLCAwLCA3NzI2LCAwLCAwLCAwLCAwLCA3ODkwLCA3ODg4LCAwLCA3ODk0LCAwLCAKKyAgICAwLCAwLCAwLCA3ODkyLCAwLCAwLCA3NzU2LCAwLCAwLCA1NTYsIDAsIDAsIDc3NTgsIDAsIDAsIDU1NCwgMCwgMCwgNTEwLCAKKyAgICAwLCAwLCAwLCAwLCA0NzUsIDQ3MSwgMCwgMCwgNDY5LCAwLCAwLCA0NzMsIDAsIDAsIDc4NDcsIDc4NDUsIDAsIDc4NTEsIAorICAgIDc4NDksIDAsIDAsIDAsIDAsIDAsIDQ3OSwgMCwgMCwgNTA3LCAwLCAwLCAwLCAwLCAwLCA1MDksIDAsIDAsIDQ4MywgMCwgMCwgCisgICAgNzY4OSwgMCwgMCwgMCwgMCwgNzg3MywgNzg3MSwgMCwgNzg3NywgMCwgMCwgMCwgMCwgNzg3NSwgMCwgMCwgNzcyNywgMCwgCisgICAgMCwgMCwgMCwgNzg5MSwgNzg4OSwgMCwgNzg5NSwgMCwgMCwgMCwgMCwgNzg5MywgMCwgMCwgNzc1NywgMCwgMCwgNTU3LCAwLCAKKyAgICAwLCA3NzU5LCAwLCAwLCA1NTUsIDAsIDAsIDUxMSwgMCwgMCwgMCwgMCwgNDc2LCA0NzIsIDAsIDAsIDQ3MCwgMCwgMCwgCisgICAgNDc0LCAwLCAwLCA3ODU2LCA3ODU0LCAwLCA3ODYwLCA3ODU4LCAwLCAwLCAwLCAwLCAwLCA3ODU3LCA3ODU1LCAwLCA3ODYxLCAKKyAgICAwLCAwLCAwLCAwLCA3ODU5LCAwLCA3NzAwLCA3NzAyLCAwLCAwLCAwLCAwLCA3NzAxLCA3NzAzLCA3NzYwLCA3NzYyLCAwLCAKKyAgICAwLCAwLCAwLCA3NzYxLCA3NzYzLCAwLCAwLCA3NzgwLCAwLCA3NzgxLCAwLCAwLCAwLCAwLCAwLCA3NzgyLCAwLCA3NzgzLCAKKyAgICAwLCAwLCAwLCAwLCA3ODAwLCAwLCAwLCAwLCAwLCAwLCA3ODAxLCAwLCAwLCAwLCA3ODAyLCAwLCA3ODAzLCAwLCAwLCAwLCAKKyAgICAwLCA3ODM1LCAwLCAwLCAwLCA3OTAwLCA3ODk4LCAwLCA3OTA0LCAwLCAwLCAwLCAwLCA3OTAyLCAwLCAwLCAwLCAwLCAKKyAgICA3OTA2LCA3OTAxLCA3ODk5LCAwLCA3OTA1LCA3OTAzLCAwLCAwLCAwLCAwLCA3OTA3LCAwLCAwLCAwLCAwLCA3OTE0LCAKKyAgICA3OTEyLCAwLCA3OTE4LCAwLCAwLCAwLCAwLCA3OTE2LCAwLCAwLCAwLCAwLCA3OTIwLCA3OTE1LCA3OTEzLCAwLCA3OTE5LCAKKyAgICA3OTE3LCAwLCAwLCAwLCAwLCA3OTIxLCAwLCAwLCAwLCA0OTQsIDAsIDAsIDQ5MiwgMCwgMCwgMCwgMCwgMCwgNDkzLCAwLCAKKyAgICA0ODAsIDAsIDAsIDAsIDAsIDAsIDQ4MSwgMCwgMCwgNzcwOCwgMCwgMCwgMCwgMCwgMCwgNzcwOSwgNTYwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NjEsIDAsIDAsIDAsIDAsIDQ5NSwgMCwgMCwgODEyMiwgOTAyLCAwLCAwLCA4MTIxLCA4MTIwLCA3OTQ0LCAKKyAgICA3OTQ1LCAwLCAwLCAwLCAwLCAwLCA4MTI0LCA4MTM2LCA5MDQsIDAsIDAsIDAsIDAsIDc5NjAsIDc5NjEsIDAsIDAsIDgxMzgsIAorICAgIDkwNSwgNzk3NiwgNzk3NywgMCwgMCwgMCwgMCwgMCwgODE0MCwgODE1NCwgOTA2LCAwLCAwLCA4MTUzLCA4MTUyLCAwLCAKKyAgICA5MzgsIDAsIDAsIDc5OTIsIDc5OTMsIDAsIDAsIDgxODQsIDkwOCwgODAwOCwgODAwOSwgMCwgMCwgMCwgMCwgMCwgODE3MiwgCisgICAgMCwgMCwgODE3MCwgOTEwLCAwLCAwLCA4MTY5LCA4MTY4LCAwLCA5MzksIDAsIDAsIDAsIDgwMjUsIDAsIDAsIDgxODYsIAorICAgIDkxMSwgMCwgMCwgMCwgMCwgODA0MCwgODA0MSwgMCwgODE4OCwgMCwgMCwgMCwgMCwgMCwgODExNiwgMCwgODEzMiwgMCwgMCwgCisgICAgMCwgMCwgODA0OCwgOTQwLCAwLCAwLCA4MTEzLCA4MTEyLCA3OTM2LCA3OTM3LCAwLCAwLCAwLCAwLCA4MTE4LCA4MTE1LCAKKyAgICA4MDUwLCA5NDEsIDAsIDAsIDAsIDAsIDc5NTIsIDc5NTMsIDAsIDAsIDgwNTIsIDk0MiwgNzk2OCwgNzk2OSwgMCwgMCwgMCwgCisgICAgMCwgODEzNCwgODEzMSwgODA1NCwgOTQzLCAwLCAwLCA4MTQ1LCA4MTQ0LCAwLCA5NzAsIDAsIDAsIDc5ODQsIDc5ODUsIAorICAgIDgxNTAsIDAsIDAsIDAsIDAsIDAsIDgwNTYsIDk3MiwgODAwMCwgODAwMSwgMCwgMCwgMCwgMCwgODE2NCwgODE2NSwgMCwgMCwgCisgICAgODA1OCwgOTczLCAwLCAwLCA4MTYxLCA4MTYwLCAwLCA5NzEsIDAsIDAsIDgwMTYsIDgwMTcsIDAsIDAsIDAsIDAsIDgxNjYsIAorICAgIDAsIDgwNjAsIDk3NCwgMCwgMCwgMCwgMCwgODAzMiwgODAzMywgODE4MiwgODE3OSwgMCwgMCwgMCwgMCwgODE0NiwgOTEyLCAKKyAgICAwLCAwLCA4MTUxLCAwLCA4MTYyLCA5NDQsIDAsIDAsIDgxNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDgxODAsIDAsIDk3OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgOTgwLCAwLCAxMDMxLCAwLCAwLCAwLCAxMjMyLCAwLCAxMjM0LCAwLCAwLCAwLCAxMDI3LCAxMDI0LCAwLCAKKyAgICAwLCAwLCAwLCAxMjM4LCAwLCAxMDI1LCAwLCAwLCAwLCAxMjE3LCAwLCAxMjQ0LCAwLCAwLCAwLCAwLCAwLCAxMjQ2LCAwLCAKKyAgICAwLCAxMDM3LCAwLCAwLCAwLCAxMjUwLCAxMDQ5LCAwLCAxMjUyLCAwLCAwLCAwLCAxMDM2LCAwLCAwLCAwLCAxMjU0LCAwLCAKKyAgICAwLCAxMjYyLCAxMDM4LCAwLCAxMjY0LCAwLCAwLCAxMjY2LCAwLCAwLCAxMjY4LCAwLCAwLCAwLCAwLCAwLCAxMjcyLCAwLCAKKyAgICAxMjYwLCAwLCAwLCAwLCAxMjMzLCAwLCAxMjM1LCAwLCAwLCAwLCAxMTA3LCAxMTA0LCAwLCAwLCAwLCAwLCAxMjM5LCAwLCAKKyAgICAxMTA1LCAwLCAwLCAwLCAxMjE4LCAwLCAxMjQ1LCAwLCAwLCAwLCAwLCAwLCAxMjQ3LCAwLCAwLCAxMTE3LCAwLCAwLCAwLCAKKyAgICAxMjUxLCAxMDgxLCAwLCAxMjUzLCAwLCAwLCAwLCAxMTE2LCAwLCAwLCAwLCAxMjU1LCAwLCAwLCAxMjYzLCAxMTE4LCAwLCAKKyAgICAxMjY1LCAwLCAwLCAxMjY3LCAwLCAwLCAxMjY5LCAwLCAwLCAwLCAwLCAwLCAxMjczLCAwLCAxMjYxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMTExLCAwLCAwLCAxMTQyLCAwLCAxMTQzLCAwLCAwLCAwLCAwLCAxMjQyLCAwLCAwLCAwLCAwLCAwLCAxMjQzLCAwLCAKKyAgICAxMjU4LCAwLCAwLCAwLCAwLCAwLCAxMjU5LCAxNTcwLCAxNTcxLCAxNTczLCAwLCAwLCAwLCAwLCAxNTcyLCAwLCAxNTc0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNzMwLCAwLCAxNzQ3LCAwLCAwLCAwLCAwLCAwLCAxNzI4LCAwLCAwLCAwLCAyMzQ1LCAwLCAKKyAgICAyMzUzLCAwLCAwLCAwLCAwLCAwLCAyMzU2LCAwLCAwLCAyNTA3LCAyNTA4LCAwLCAwLCAyODkxLCAyODg4LCAyODkyLCAwLCAKKyAgICAwLCAwLCAyOTY0LCAwLCAwLCAwLCAwLCAzMDE4LCAzMDIwLCAwLCAwLCAwLCAwLCAzMDE5LCAwLCAwLCAwLCAzMTQ0LCAwLCAKKyAgICAwLCAwLCAzMjY0LCAzMjc0LCAzMjcxLCAzMjcyLCAwLCAwLCAwLCAwLCAzMjc1LCAwLCAwLCAwLCAzNDAyLCAzNDA0LCAwLCAKKyAgICAwLCAwLCAwLCAzNDAzLCAwLCAwLCAwLCAzNTQ2LCAzNTQ4LCAzNTUwLCAwLCAwLCAwLCAzNTQ5LCA0MTM0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA2OTE4LCAwLCA2OTIwLCAwLCAwLCAwLCAwLCAwLCA2OTIyLCAwLCA2OTI0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2OTI2LCAwLCA2OTMwLCAwLCAwLCAwLCAwLCAwLCA2OTcxLCAwLCA2OTczLCAwLCAwLCAwLCAwLCAwLCA2OTc2LCAwLCAKKyAgICA2OTc3LCAwLCAwLCAwLCAwLCAwLCA2OTc5LCAwLCAwLCA3NzM2LCAwLCA3NzM3LCAwLCAwLCAwLCAwLCAwLCA3NzcyLCAwLCAKKyAgICA3NzczLCAwLCAwLCAwLCA3Nzg0LCAwLCAwLCAwLCAwLCAwLCA3Nzg1LCAwLCA3ODUyLCAwLCAwLCA3ODYyLCAwLCAwLCAKKyAgICA3ODUzLCAwLCAwLCA3ODYzLCAwLCAwLCA3ODc4LCAwLCAwLCAwLCAwLCAwLCA3ODc5LCAwLCA3ODk2LCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3ODk3LCAwLCAwLCAwLCA3OTM4LCA3OTQwLCAwLCAwLCA3OTQyLCA4MDY0LCA3OTM5LCA3OTQxLCAwLCAwLCA3OTQzLCAKKyAgICA4MDY1LCAwLCAwLCAwLCAwLCAwLCA4MDY2LCAwLCA4MDY3LCAwLCAwLCAwLCAwLCAwLCA4MDY4LCAwLCA4MDY5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA4MDcwLCAwLCA4MDcxLCAwLCAwLCAwLCAwLCA3OTQ2LCA3OTQ4LCAwLCAwLCA3OTUwLCA4MDcyLCA3OTQ3LCAKKyAgICA3OTQ5LCAwLCAwLCA3OTUxLCA4MDczLCAwLCAwLCAwLCAwLCAwLCA4MDc0LCAwLCA4MDc1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4MDc2LCAwLCA4MDc3LCAwLCAwLCAwLCAwLCAwLCA4MDc4LCAwLCA4MDc5LCAwLCAwLCAwLCAwLCA3OTU0LCA3OTU2LCAKKyAgICA3OTU1LCA3OTU3LCAwLCAwLCAwLCAwLCA3OTYyLCA3OTY0LCA3OTYzLCA3OTY1LCAwLCAwLCAwLCAwLCA3OTcwLCA3OTcyLCAKKyAgICAwLCAwLCA3OTc0LCA4MDgwLCA3OTcxLCA3OTczLCAwLCAwLCA3OTc1LCA4MDgxLCAwLCAwLCAwLCAwLCAwLCA4MDgyLCAwLCAKKyAgICA4MDgzLCAwLCAwLCAwLCAwLCAwLCA4MDg0LCAwLCA4MDg1LCAwLCAwLCAwLCAwLCAwLCA4MDg2LCAwLCA4MDg3LCAwLCAwLCAKKyAgICAwLCAwLCA3OTc4LCA3OTgwLCAwLCAwLCA3OTgyLCA4MDg4LCA3OTc5LCA3OTgxLCAwLCAwLCA3OTgzLCA4MDg5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA4MDkwLCAwLCA4MDkxLCAwLCAwLCAwLCAwLCAwLCA4MDkyLCAwLCA4MDkzLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4MDk0LCAwLCA4MDk1LCAwLCAwLCAwLCAwLCA3OTg2LCA3OTg4LCAwLCAwLCA3OTkwLCAwLCA3OTg3LCA3OTg5LCAwLCAwLCAKKyAgICA3OTkxLCAwLCAwLCAwLCAwLCAwLCA3OTk0LCA3OTk2LCAwLCAwLCA3OTk4LCAwLCA3OTk1LCA3OTk3LCAwLCAwLCA3OTk5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCA4MDAyLCA4MDA0LCA4MDAzLCA4MDA1LCAwLCAwLCAwLCAwLCA4MDEwLCA4MDEyLCA4MDExLCAKKyAgICA4MDEzLCAwLCAwLCAwLCAwLCA4MDE4LCA4MDIwLCAwLCAwLCA4MDIyLCAwLCA4MDE5LCA4MDIxLCAwLCAwLCA4MDIzLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA4MDI3LCA4MDI5LCAwLCAwLCA4MDMxLCAwLCA4MDM0LCA4MDM2LCAwLCAwLCA4MDM4LCA4MDk2LCAwLCAKKyAgICAwLCAwLCAwLCA4MDM1LCA4MDM3LCAwLCAwLCA4MDM5LCA4MDk3LCAwLCA4MDk4LCAwLCAwLCAwLCAwLCAwLCA4MDk5LCAwLCAKKyAgICA4MTAwLCAwLCAwLCAwLCAwLCAwLCA4MTAxLCAwLCA4MTAyLCAwLCAwLCAwLCAwLCAwLCA4MTAzLCA4MDQyLCA4MDQ0LCAwLCAKKyAgICAwLCA4MDQ2LCA4MTA0LCAwLCAwLCAwLCAwLCA4MDQzLCA4MDQ1LCAwLCAwLCA4MDQ3LCA4MTA1LCAwLCA4MTA2LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA4MTA3LCAwLCA4MTA4LCAwLCAwLCAwLCAwLCAwLCA4MTA5LCAwLCA4MTEwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4MTExLCAwLCA4MTE0LCAwLCAwLCAwLCAwLCAwLCA4MTMwLCAwLCA4MTc4LCAwLCAwLCAwLCAwLCAwLCA4MTE5LCA4MTQxLCAKKyAgICA4MTQyLCAwLCAwLCA4MTQzLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTM1LCAwLCA4MTgzLCAwLCAwLCAwLCAwLCA4MTU3LCAKKyAgICA4MTU4LCAwLCAwLCA4MTU5LCAwLCAwLCAwLCAwLCA4NjAyLCAwLCA4NjAzLCAwLCAwLCAwLCAwLCAwLCA4NjIyLCAwLCAKKyAgICA4NjUzLCAwLCAwLCAwLCAwLCAwLCA4NjU1LCAwLCA4NjU0LCAwLCAwLCAwLCAwLCAwLCA4NzA4LCAwLCA4NzEzLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA4NzE2LCAwLCA4NzQwLCAwLCAwLCAwLCAwLCAwLCA4NzQyLCAwLCA4NzY5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4NzcyLCAwLCA4Nzc1LCAwLCAwLCAwLCAwLCAwLCA4Nzc3LCAwLCA4ODEzLCAwLCAwLCAwLCAwLCAwLCA4ODAyLCAwLCAKKyAgICA4ODE2LCAwLCAwLCAwLCAwLCAwLCA4ODE3LCAwLCA4ODIwLCAwLCAwLCAwLCAwLCAwLCA4ODIxLCAwLCA4ODI0LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA4ODI1LCAwLCA4ODMyLCAwLCAwLCAwLCAwLCAwLCA4ODMzLCAwLCA4OTI4LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4OTI5LCAwLCA4ODM2LCAwLCAwLCAwLCAwLCAwLCA4ODM3LCAwLCA4ODQwLCAwLCAwLCAwLCAwLCAwLCA4ODQxLCAwLCAKKyAgICA4OTMwLCAwLCAwLCAwLCAwLCAwLCA4OTMxLCAwLCA4ODc2LCAwLCAwLCAwLCAwLCAwLCA4ODc3LCAwLCA4ODc4LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA4ODc5LCAwLCA4OTM4LCAwLCAwLCAwLCAwLCAwLCA4OTM5LCAwLCA4OTQwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4OTQxLCAwLCAwLCAxMjQzNiwgMCwgMTIzNjQsIDAsIDAsIDAsIDAsIDAsIDEyMzY2LCAwLCAxMjM2OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTIzNzAsIDAsIDEyMzcyLCAwLCAwLCAwLCAwLCAwLCAxMjM3NCwgMCwgMTIzNzYsIDAsIDAsIDAsIDAsIDAsIDEyMzc4LCAKKyAgICAwLCAxMjM4MCwgMCwgMCwgMCwgMCwgMCwgMTIzODIsIDAsIDEyMzg0LCAwLCAwLCAwLCAwLCAwLCAxMjM4NiwgMCwgMTIzODksIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyMzkxLCAwLCAxMjM5MywgMCwgMCwgMCwgMCwgMCwgMTI0MDAsIDEyNDAxLCAxMjQwMywgCisgICAgMTI0MDQsIDAsIDAsIDAsIDAsIDEyNDA2LCAxMjQwNywgMTI0MDksIDEyNDEwLCAwLCAwLCAwLCAwLCAxMjQxMiwgMTI0MTMsIAorICAgIDEyNDQ2LCAwLCAwLCAwLCAwLCAwLCAxMjUzMiwgMCwgMTI0NjAsIDAsIDAsIDAsIDAsIDAsIDEyNDYyLCAwLCAxMjQ2NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTI0NjYsIDAsIDEyNDY4LCAwLCAwLCAwLCAwLCAwLCAxMjQ3MCwgMCwgMTI0NzIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEyNDc0LCAwLCAxMjQ3NiwgMCwgMCwgMCwgMCwgMCwgMTI0NzgsIDAsIDEyNDgwLCAwLCAwLCAwLCAwLCAwLCAxMjQ4MiwgCisgICAgMCwgMTI0ODUsIDAsIDAsIDAsIDAsIDAsIDEyNDg3LCAwLCAxMjQ4OSwgMCwgMCwgMCwgMCwgMCwgMTI0OTYsIDEyNDk3LCAKKyAgICAxMjQ5OSwgMTI1MDAsIDAsIDAsIDAsIDAsIDEyNTAyLCAxMjUwMywgMTI1MDUsIDEyNTA2LCAwLCAwLCAwLCAwLCAxMjUwOCwgCisgICAgMTI1MDksIDEyNTM1LCAwLCAwLCAwLCAwLCAwLCAxMjUzNiwgMCwgMTI1MzcsIDAsIDAsIDAsIDAsIDAsIDEyNTM4LCAwLCAKKyAgICAxMjU0MiwgMCwgMCwgMCwgNjk3ODYsIDAsIDAsIDAsIDAsIDAsIDY5Nzg4LCAwLCA2OTgwMywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjk5MzQsIDAsIDY5OTM1LCAwLCAwLCA3MDQ3NSwgNzA0NzYsIDAsIDAsIDcwODQ0LCA3MDg0MywgNzA4NDYsIDAsIDAsIAorICAgIDcxMDk4LCAwLCAwLCAwLCAwLCAwLCA3MTA5OSwgCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhbmdlX3JlY29yZCBjaGFuZ2VfcmVjb3Jkc18zXzJfMFtdID0gewpAQCAtNTE4Myw2ICs1Njk2LDcgQEAKIAl7IDI1NSwgNywgNywgMjU1LCAwIH0sCiAJeyAyNTUsIDcsIDgsIDI1NSwgMCB9LAogCXsgMjU1LCA3LCA5LCAyNTUsIDAgfSwKKwl7IDI1NSwgMTksIDI1NSwgMjU1LCAwIH0sCiAJeyAxLCA1LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAxMCwgMjU1LCAyNTUsIDAgfSwKIAl7IDE4LCAyNTUsIDI1NSwgMjU1LCAwIH0sCkBAIC01MjA0LDc5ICs1NzE4LDgwIEBACiAJeyAyNTUsIDIwLCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCAxZSsxNiB9LAogCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCAxZSsyMCB9LAotCXsgMjU1LCAxOSwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMTksIDI1NSwgMjU1LCAtMSB9LAogCXsgMSwgMjU1LCAyNTUsIDAsIDAgfSwKIH07CiBzdGF0aWMgdW5zaWduZWQgY2hhciBjaGFuZ2VzXzNfMl8wX2luZGV4W10gPSB7CiAgICAgMCwgMSwgMiwgMiwgMywgNCwgNSwgNiwgMiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgCi0gICAgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMiwgMiwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAKLSAgICAzNiwgMiwgMiwgMiwgMzcsIDM4LCAyLCAzOSwgMiwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIAotICAgIDUwLCAyLCA1MSwgMiwgMiwgNTIsIDUzLCA1NCwgNTUsIDU2LCAyLCA1NywgNTgsIDU5LCA2MCwgMiwgMiwgNjEsIDYyLCA2MywgCi0gICAgNjQsIDY1LCA2NSwgMiwgMiwgMiwgMiwgNjYsIDIsIDY3LCA2OCwgNjksIDcwLCA3MSwgMiwgMiwgMiwgNzIsIDczLCA3NCwgCi0gICAgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDIsIDIsIDIsIDIsIDIsIDIsIDgyLCAyLCAyLCAyLCAyLCAyLCA4MywgMiwgCisgICAgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDIsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAKKyAgICAzNiwgMzcsIDIsIDIsIDIsIDM4LCAzOSwgMiwgNDAsIDIsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIAorICAgIDUwLCA1MSwgMiwgNTIsIDIsIDIsIDUzLCA1NCwgNTUsIDU2LCA1NywgMiwgNTgsIDU5LCA2MCwgNjEsIDIsIDIsIDYyLCA2MywgCisgICAgNjQsIDY1LCA2NiwgNjYsIDIsIDIsIDIsIDIsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCAyLCAyLCAyLCA3NCwgNzUsIAorICAgIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgMiwgMiwgMiwgMiwgMiwgMiwgODQsIDIsIDIsIDIsIDIsIDIsIDg1LCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4NCwgMiwgODUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDg2LCAKLSAgICA4NywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgODgsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDg5LCA5MCwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgODYsIDIsIDg3LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICA4OCwgODksIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MSwgCisgICAgOTIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkzLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTQsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NiwgOTcsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk4LCA1MCwgNTAsIAorICAgIDk5LCAxMDAsIDUwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk0LCA5NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTYsIDQ5LCA0OSwgCi0gICAgOTcsIDk4LCA0OSwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxMTAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDEwOCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMiwgMiwgMTE3LCAxMTgsIDExOSwgMiwgMTIwLCAKKyAgICAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMiwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMzAsIDEzMSwgMiwgNTAsIDUwLCAxMzIsIAorICAgIDIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMiwgMiwgMTQzLCAyLCAyLCAyLCAKKyAgICAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDIsIDIsIDE1MSwgMiwgMTUyLCAxNTMsIDE1NCwgMTU1LCAyLCAKKyAgICAyLCAxNTYsIDIsIDIsIDIsIDE1NywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDE1OCwgMTU5LCA1MCwgMTYwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE2MSwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMiwgMiwgMiwgMTE1LCAxMTYsIDIsIDExNywgMTE4LCAKLSAgICAxMTksIDEyMCwgMTIxLCAxMjIsIDIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAyLCAyLCAyLCAyLCAyLCAyLCAxMjgsIDIsIAotICAgIDEyOSwgMTMwLCAxMzEsIDIsIDEzMiwgMiwgMTMzLCAyLCAyLCAyLCAxMzQsIDIsIDIsIDIsIDEzNSwgMTM2LCAxMzcsIDEzOCwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTM5LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNDAsIDIsIDE0MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCAxNDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDUwLCA1MCwgNTAsIDUwLCAxNjIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCAxNDMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDE0NCwgMTQ1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgMTYzLCAxNjQsIDE2NSwgMTY2LCAyLCAyLCAyLCAyLCAyLCAyLCAxNjcsIDE2OCwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTQ2LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxNDcsIDIsIDE0OCwgMiwgMTQ5LCAyLCAyLCAxNTAsIDIsIDIsIDIsIDE1MSwgMTUyLCAKLSAgICAxNTMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDE1NCwgMTU1LCAKLSAgICAyLCAyLCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMiwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNDgsIAotICAgIDE2OCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTY5LCAxNzAsIDkzLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4MiwgMTcxLCAyLCAxNzIsIDE3MywgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTY5LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxNzAsIDE3MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTc0LCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxNzUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDE3NiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMTcyLCAxNzMsIDE3NCwgMiwgMTc1LCAyLCAyLCAxNzYsIDIsIDIsIDIsIDE3NywgMTc4LCAxNzksIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgMTgwLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgMTgxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxODIsIAorICAgIDE4MywgMiwgMiwgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDIsIDUwLCA1MCwgNTAsIDUwLCAxODksIDE5MCwgNTAsIDE5MSwgCisgICAgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTk4LCAKKyAgICAxOTksIDk1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4NCwgMjAwLCAyLCAyMDEsIAorICAgIDIwMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMjAzLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyMDQsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIwNSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMTc3LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyMDYsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTc4LCA0OSwgMTc5LCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDIwNywgNTAsIDIwOCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAyMDksIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIwMywgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMTc0LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTU1MTEsNyArNjAyNiw3IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDE4MCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDIxMCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01NTc1LDcgKzYwOTAsNyBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2hhbmdlc18zXzJfMF9kYXRhW10gPSB7CkBAIC01NjExLDcgKzYxMjYsNyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDEwLCAwLCA5LCA5LCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTU2MjMsMTYgKzYxMzgsMTYgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01NjYwLDE2ICs2MTc1LDE2IEBACiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCiAgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01Njg1LDcgKzYyMDAsNyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNTY5Niw4MjcgKzYyMTEsMzM4IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIsIDIzLCAKLSAgICAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMSwgMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCA0LCAwLCAwLCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAxLCAxLCAwLCAwLCAwLCAKLSAgICA0LCAzNSwgOCwgNiwgNywgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgMSwgMSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDUsIDQ2LCAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgCi0gICAgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMTksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgCisgICAgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgCisgICAgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgCisgICAgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgCisgICAgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgCisgICAgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzIsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgNCwgMCwgMCwgCisgICAgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgMSwgMSwgMCwgMCwgMCwgNCwgMzYsIDgsIDYsIDcsIDM3LCAzOCwgMzksIDQwLCAKKyAgICA0MSwgNDIsIDEsIDEsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NywgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgCisgICAgMCwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMSwgMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQsIDE0LCAxNCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKLSAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKLSAgICAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDksIDAsIDAsIDAsIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDAsIAotICAgIDksIDAsIDksIDAsIDksIDAsIDksIDAsIDksIDksIDAsIDksIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAotICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNjUyOCwyNiArNjU1NCw2NzYgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIAorICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDE5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAxLCAxLCAyMSwgMjEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNCwgMTQsIDE0LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDksIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDAsIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDksIDksIDAsIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDksIDksIDAsIDAsIDksIDksIDksIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgMCwgOSwgCisgICAgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgMCwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogfTsKIAogc3RhdGljIGNvbnN0IGNoYW5nZV9yZWNvcmQqIGdldF9jaGFuZ2VfM18yXzAoUHlfVUNTNCBuKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oIGIvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCmluZGV4IDdjY2IxMjYuLmQwZjljYjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKQEAgLTQsMjQ5ICs0LDI2NSBAQAogCiAvKiBsZXhpY29uICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBsZXhpY29uW10gPSB7Ci0gICAgNzYsIDY5LCA4NCwgODQsIDY5LCAyMTAsIDg3LCA3MywgODQsIDIwMCwgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzYsIAotICAgIDE5NywgODMsIDc3LCA2NSwgNzYsIDIwNCwgODMsIDczLCA3MSwgMjA2LCA2NywgNjUsIDgwLCA3MywgODQsIDY1LCAyMDQsIAotICAgIDc2LCA2NSwgODQsIDczLCAyMDYsIDg5LCAyMDEsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCA2NywgNzQsIDIwMywgNzcsIAotICAgIDY1LCA4NCwgNzIsIDY5LCA3NywgNjUsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3MSwgODksIDgwLCA4NCwgNzMsIDY1LCAKLSAgICAyMDYsIDcyLCA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDIwMCwgNjcsIDc5LCA3NywgODAsIDY1LCA4NCwgNzMsIAotICAgIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA2NywgODUsIDc4LCA2OSwgNzMsIDcwLCA3OSwgODIsIDIwNSwgODMsIDg5LCA3NywgCi0gICAgNjYsIDc5LCAyMDQsIDcwLCA3OSwgODIsIDc3LCAxMjgsIDY3LCA2NSwgNzgsIDY1LCA2OCwgNzMsIDY1LCAyMDYsIDgzLCAKLSAgICA4OSwgNzYsIDc2LCA2NSwgNjYsIDczLCA2NywgMjExLCA2NiwgNjUsIDc3LCA4NSwgMjA1LCA2OCwgNzMsIDcxLCA3MywgCi0gICAgMjEyLCA2NSwgNzgsIDE5NiwgNjYsIDc5LCA3NiwgMTk2LCA3MiwgNjUsIDc4LCA3MSwgODUsIDIwNCwgODYsIDc5LCA4NywgCi0gICAgNjksIDIwNCwgNzEsIDgyLCA2OSwgNjksIDIwMywgNzYsIDczLCA3MSwgNjUsIDg0LCA4NSwgODIsIDE5NywgNzcsIDg1LCAKLSAgICA4MywgNzMsIDY3LCA2NSwgMjA0LCA2OSwgODQsIDcyLCA3MywgNzksIDgwLCA3MywgMTk1LCA4NCwgNzMsIDc3LCA2OSwgCi0gICAgMjExLCA3MCwgNzksIDIxMCwgNzMsIDg0LCA2NSwgNzYsIDczLCAxOTUsIDY3LCA4OSwgODIsIDczLCA3NiwgNzYsIDczLCAKLSAgICAxOTUsIDgyLCA2NSwgNjgsIDczLCA2NywgNjUsIDIwNCwgODMsIDY1LCA3OCwgODMsIDQ1LCA4MywgNjksIDgyLCA3MywgCi0gICAgMTk4LCA4NCwgNjUsIDc3LCA3MywgMjA0LCA2NywgNzMsIDgyLCA2NywgNzYsIDY5LCAxOTYsIDY3LCA3OSwgNzcsIDY2LCAKLSAgICA3MywgNzgsIDczLCA3OCwgMTk5LCA4NCwgNjUsIDIwMSwgNzAsIDczLCA3OCwgNjUsIDIwNCwgODYsIDY1LCAyMDEsIDgzLCAKLSAgICA4MSwgODUsIDY1LCA4MiwgMTk3LCA3NiwgNjksIDcwLCAyMTIsIDgyLCA3MywgNzEsIDcyLCAyMTIsIDg2LCA2NSwgODIsIAotICAgIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NiwgODIsIDY1LCA3MywgNzYsIDc2LCAxOTcsIDgwLCA2NSwgODQsIDg0LCA2OSwgCi0gICAgODIsIDIwNiwgNjUsIDY2LCA3OSwgODYsIDY5LCAxMjgsIDY2LCA4OSwgOTAsIDY1LCA3OCwgODQsIDczLCA3OCwgMTk3LCAKLSAgICA4MywgNzMsIDcxLCA3OCwgMTI4LCA2NiwgNjksIDc2LCA3OSwgODcsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDc2LCAxOTcsIAotICAgIDczLCA4MywgNzksIDc2LCA2NSwgODQsIDY5LCAxOTYsIDc4LCA4NSwgNzcsIDY2LCA2OSwgMjEwLCA3NSwgNjUsIDg0LCA2NSwgCi0gICAgNzUsIDY1LCA3OCwgMTkzLCAxOTQsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCAyMTAsIDY4LCA3OSwgMjEyLCA3NSwgCi0gICAgNjUsIDc4LCA3MSwgODgsIDIwMSwgNjUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDg0LCA3MywgNjYsIDY5LCAKLSAgICA4NCwgNjUsIDIwNiwgNzksIDE5OCwgNzMsIDc4LCA3MywgODQsIDczLCA2NSwgMjA0LCA3NywgNjksIDY5LCAyMDUsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA4OSwgNjUsIDc4LCA3NywgNjUsIDIxMCwgODUsIDEyOCwgNzUsIAotICAgIDcyLCA3NywgNjksIDIxMCwgODcsIDcyLCA3MywgODQsIDE5NywgNjUsIDY2LCA3OSwgODYsIDE5NywgNjcsIDY1LCA4MiwgCi0gICAgODIsIDczLCA2OSwgMjEwLCA3MywgMTI4LCA2NSwgODIsIDgyLCA3OSwgODcsIDEyOCwgODksIDY5LCAyMDAsIDc5LCAxMjgsIAotICAgIDc3LCA2NSwgODIsIDc1LCAxMjgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDY3LCA3OSwgODAsIDg0LCA3MywgMTk1LCA4MCwgCi0gICAgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTcsIDc3LCA3OSwgNzgsIDcxLCA3OSwgNzYsIDczLCA2NSwgMjA2LCA2OCwgNjksIDg2LCAKLSAgICA2NSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAyMDEsIDY2LCA3NiwgNjUsIDY3LCAyMDMsIDg0LCA3MywgNzYsIDE5NywgODMsIAotICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKLSAgICAxOTYsIDg0LCA3MiwgNjUsIDIwNSwgNzQsIDc5LCA3OCwgNzEsIDgzLCA2OSwgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIAotICAgIDc5LCA3NSwgNjksIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTk2LCA2NiwgNzksIDIxNiwgNzIsIDY5LCA2NiwgCi0gICAgODIsIDY5LCAyMTUsIDc3LCA3MywgNjUsIDIwNywgODAsIDc2LCA4NSwgMjExLCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCAKLSAgICA2NSwgODIsIDY4LCAyMTEsIDcxLCA2OSwgNzksIDgyLCA3MSwgNzMsIDY1LCAyMDYsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIAotICAgIDcxLCAyMTEsIDY3LCA3MiwgNzksIDgzLCA2OSwgNzksIDc4LCAxOTksIDcyLCA2NSwgNzYsIDcwLCA4NywgNzMsIDY4LCA4NCwgCi0gICAgMjAwLCA2NiwgNjUsIDc2LCA3MywgNzgsIDY5LCA4MywgMTk3LCA3MiwgNzksIDc5LCA3NSwgMTI4LCAyMTMsIDg0LCA4NywgCi0gICAgNzksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk2LCAKLSAgICA2NSwgNzYsIDY3LCA3MiwgNjksIDc3LCA3MywgNjcsIDY1LCAyMDQsIDY1LCA3NiwgNjksIDE5OCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgNzksIDEyOCwgODQsIDg3LCAyMDcsIAotICAgIDcyLCA2OSwgNjUsIDg2LCAyMTcsIDc5LCA4NiwgNjksIDIxMCwgNjcsIDc5LCA3OCwgODMsIDc5LCA3OCwgNjUsIDc4LCAKLSAgICAyMTIsIDY2LCA4MiwgNjUsIDcyLCA3NywgMjAxLCA4MywgNjcsIDgyLCA3MywgODAsIDIxMiwgODUsIDIwOCwgNzYsIDc5LCAKLSAgICAyMTUsIDcyLCA2NSwgMjAwLCA3OSwgNzgsIDE5NywgNjgsIDc5LCA4NywgMjA2LCA3MiwgNzMsIDcxLCAyMDAsIDcwLCA4NSwgCi0gICAgNzYsIDc2LCA4NywgNzMsIDY4LCA4NCwgMjAwLCA2NiwgODIsIDY1LCA2NywgNzUsIDY5LCA4NCwgMTI4LCA2OSwgODEsIDg1LCAKLSAgICA2NSwgMjA0LCA4NCwgNjUsIDE5OSwgNjYsIDY1LCA4MiwgMTI4LCA2OCwgNzksIDc3LCA3MywgNzgsIDIwNywgNzgsIDg1LCAKLSAgICA3NywgNjksIDgyLCA3MywgMTk1LCA3MCwgODIsIDY1LCA3NSwgODQsIDg1LCAyMTAsIDg0LCA3MiwgODIsIDY5LCAxOTcsIAotICAgIDY3LCA3MiwgNjUsIDgyLCA2NSwgNjcsIDg0LCA2OSwgMjEwLCA3NywgNjUsIDc2LCA2NSwgODksIDY1LCA3NiwgNjUsIDIwNSwgCi0gICAgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk1LCA4NCwgNzksIDc4LCAxOTcsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCAKLSAgICA4MywgODQsIDgyLCA4NSwgNjcsIDIwMywgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCAyMTEsIDcyLCA3MywgODIsIAotICAgIDY1LCA3MSwgNjUsIDc4LCAxOTMsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NCwgODUsIDc4LCA3MSwgODMsIDY5LCA3OSwgCi0gICAgNzgsIDE5OSwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDg0LCA3MywgMTk1LCA2NiwgNjksIDc4LCA3MSwgNjUsIDc2LCAKLSAgICAyMDEsIDc3LCA2OSwgNjgsIDczLCA2NSwgMjA0LCA4NCwgNjksIDc2LCA4NSwgNzEsIDIxMywgODYsIDc5LCA2NywgNjUsIAotICAgIDc2LCA3MywgMTk1LCA2NSwgODIsIDc3LCA2OSwgNzgsIDczLCA2NSwgMjA2LCA3NCwgNjksIDY5LCAyMDUsIDc4LCA2OSwgCi0gICAgNzEsIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NCwgNjUsIDg2LCAKLSAgICA2NSwgNzgsIDY5LCA4MywgMTk3LCA3OSwgODIsIDczLCA4OSwgMTkzLCA4NCwgNzIsIDgyLCA2OSwgNjksIDEyOCwgODcsIAotICAgIDY5LCA4MywgODQsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDcwLCA3OSwgODUsIDgyLCAxMjgsIDcyLCA2NSwgMTI4LCA3MiwgCi0gICAgNjUsIDc2LCAxOTgsIDc3LCA2NSwgODIsIDIwMywgNzUsIDY1LCA3OCwgNzgsIDY1LCA2OCwgMTkzLCA3OCwgNjksIDIxNSwgCi0gICAgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTkzLCA4NCwgNzIsIDY1LCAyMDEsIDY3LCA3MiwgNjksIDgyLCA3OSwgNzUsIDY5LCAKLSAgICAxOTcsIDY4LCA3OSwgODQsIDIxMSwgNzEsIDg1LCA3NCwgNjUsIDgyLCA2NSwgODQsIDIwMSwgNjcsIDcyLCA2NSwgMjA1LCAKLSAgICA3NiwgODUsIDE5NywgODMsIDcyLCA2NSwgODIsIDY1LCA2OCwgMTkzLCA4MywgNzMsIDc4LCA3MiwgNjUsIDc2LCAxOTMsIAotICAgIDc1LCA2NSwgMTI4LCA4MiwgODUsIDc4LCA3MywgMTk1LCA4MywgNjUsIDg1LCA4MiwgNjUsIDgzLCA3MiwgODQsIDgyLCAKLSAgICAxOTMsIDg0LCA2OSwgODQsIDgyLCA2NSwgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNjksIDgzLCA2OSwgODIsIDY5LCAyMTIsIAotICAgIDcyLCA2NSwgNzcsIDkwLCAxOTMsIDgzLCA4OSwgODIsIDczLCA2NSwgMTk1LCA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgCi0gICAgNzEsIDg1LCA4MiwgNzcsIDg1LCA3NSwgNzIsIDIwMSwgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODksIDY5LCAyMDMsIDc3LCAKLSAgICA2OSwgNjksIDg0LCA2OSwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MCwgNzMsIDg2LCA2OSwgCi0gICAgMTI4LCA4MCwgNjUsIDEyOCwgODksIDY1LCAxMjgsIDc2LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA3MywgODgsIDEyOCwgNjksIAotICAgIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCA2OSwgODAsIDY3LCA3MiwgMTkzLCA3OCwgNjUsIDEyOCwgODMsIDY5LCA4NiwgCi0gICAgNjksIDc4LCAxMjgsIDc2LCA3OSwgNzgsIDE5OSwgNzgsIDczLCA3OCwgNjksIDEyOCwgODQsIDg1LCA4MiwgNzUsIDczLCAKLSAgICAxOTUsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDIwNCwgNzksIDgwLCA2OSwgMjA2LCA4MiwgNjUsIAotICAgIDEyOCwgODMsIDY1LCAxMjgsIDgzLCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA4NiwgNzMsIDY5LCAyMTIsIAotICAgIDc2LCA2NSwgMjA3LCA5MCwgOTAsIDg5LCA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4NCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgCi0gICAgODgsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDEyOCwgOTAsIDkwLCA4OSwgODAsIDEyOCwgOTAsIDkwLCA4OSwgNjUsIDEyOCwgCi0gICAgOTAsIDkwLCA4OSwgMTI4LCA5MCwgOTAsIDg1LCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDkwLCAKLSAgICA4NSwgODIsIDEyOCwgOTAsIDkwLCA4NSwgODAsIDEyOCwgOTAsIDkwLCA4NSwgMTI4LCA5MCwgOTAsIDgzLCA4OSwgNjUsIAotICAgIDEyOCwgOTAsIDkwLCA4MywgNjUsIDEyOCwgOTAsIDkwLCA3OSwgODgsIDEyOCwgOTAsIDkwLCA3OSwgODAsIDEyOCwgOTAsIAotICAgIDkwLCA3OSwgMTI4LCA5MCwgOTAsIDczLCA4OCwgMTI4LCA5MCwgOTAsIDczLCA4NCwgMTI4LCA5MCwgOTAsIDczLCA4MCwgCi0gICAgMTI4LCA5MCwgOTAsIDczLCA2OSwgODgsIDEyOCwgOTAsIDkwLCA3MywgNjksIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCAKLSAgICA4MCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgMTI4LCA5MCwgOTAsIDczLCAxMjgsIDkwLCA5MCwgNjksIDg4LCAxMjgsIDkwLCAKLSAgICA5MCwgNjksIDgwLCAxMjgsIDkwLCA5MCwgNjksIDY5LCAxMjgsIDkwLCA5MCwgNjksIDEyOCwgOTAsIDkwLCA2NSwgODgsIAotICAgIDEyOCwgOTAsIDkwLCA2NSwgODQsIDEyOCwgOTAsIDkwLCA2NSwgODAsIDEyOCwgOTAsIDkwLCA2NSwgNjUsIDEyOCwgOTAsIAotICAgIDkwLCA2NSwgMTI4LCA5MCwgODksIDcxLCA3OSwgODMsIDEyOCwgOTAsIDg3LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3OCwgCi0gICAgNzQsIDEyOCwgOTAsIDg3LCA3OCwgNjYsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc0LCAxMjgsIDkwLCA4NywgNjUsIDgyLCAKKyAgICA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgODMsIDczLCA3MSwgMjA2LCA4NywgNzMsIDg0LCAyMDAsIDgzLCA4OSwgNzYsIAorICAgIDc2LCA2NSwgNjYsIDc2LCAxOTcsIDgzLCA3NywgNjUsIDc2LCAyMDQsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDIwNCwgCisgICAgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgMjAwLCA3NiwgNjUsIDg0LCA3MywgMjA2LCA2NywgODUsIDc4LCAKKyAgICA2OSwgNzMsIDcwLCA3OSwgODIsIDIwNSwgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIDg5LCAyMDEsIDY3LCA3NCwgMjAzLCAKKyAgICA3NywgNjUsIDg0LCA3MiwgNjksIDc3LCA2NSwgODQsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA4OSwgODAsIDg0LCA3MywgCisgICAgNjUsIDIwNiwgNjcsIDc5LCA3NywgODAsIDY1LCA4NCwgNzMsIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA4MywgODksIDc3LCAKKyAgICA2NiwgNzksIDIwNCwgNjgsIDczLCA3MSwgNzMsIDIxMiwgNzAsIDc5LCA4MiwgNzcsIDEyOCwgNjcsIDY1LCA3OCwgNjUsIAorICAgIDY4LCA3MywgNjUsIDIwNiwgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzMsIDY3LCAyMTEsIDgzLCA3MywgNzEsIDc4LCA4NywgCisgICAgODIsIDczLCA4NCwgNzMsIDc4LCAxOTksIDg2LCA3OSwgODcsIDY5LCAyMDQsIDg0LCA3MywgNzcsIDY5LCAyMTEsIDY2LCAKKyAgICA2NSwgNzcsIDg1LCAyMDUsIDY1LCA3OCwgMTk2LCA2NiwgNzksIDc2LCAxOTYsIDY1LCA3OCwgNjUsIDg0LCA3OSwgNzYsIAorICAgIDczLCA2NSwgMjA2LCA3MiwgNjUsIDc4LCA3MSwgODUsIDIwNCwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDcxLCA4MiwgCisgICAgNjksIDY5LCAyMDMsIDc3LCA4NSwgODMsIDczLCA2NywgNjUsIDIwNCwgNzYsIDczLCA3MSwgNjUsIDg0LCA4NSwgODIsIAorICAgIDE5NywgNjksIDg0LCA3MiwgNzMsIDc5LCA4MCwgNzMsIDE5NSwgMTkzLCA3MCwgNzksIDIxMCwgNjcsIDg5LCA4MiwgNzMsIAorICAgIDc2LCA3NiwgNzMsIDE5NSwgNzMsIDg0LCA2NSwgNzYsIDczLCAxOTUsIDY3LCA3OSwgNzcsIDY2LCA3MywgNzgsIDczLCA3OCwgCisgICAgMTk5LCA4MiwgNjUsIDY4LCA3MywgNjcsIDY1LCAyMDQsIDgzLCA2NSwgNzgsIDgzLCA0NSwgODMsIDY5LCA4MiwgNzMsIAorICAgIDE5OCwgNzgsIDg1LCA3NywgNjYsIDY5LCAyMTAsIDY3LCA3MywgODIsIDY3LCA3NiwgNjksIDE5NiwgODQsIDY1LCA3NywgCisgICAgNzMsIDIwNCwgODQsIDY1LCAyMDEsIDcwLCA3MywgNzgsIDY1LCAyMDQsIDY1LCA4MiwgODIsIDc5LCA4NywgMTI4LCA4NiwgCisgICAgNjUsIDIwMSwgNzYsIDY5LCA3MCwgMjEyLCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODEsIDg1LCA2NSwgODIsIDE5NywgCisgICAgNjgsIDc5LCA4NSwgNjYsIDc2LCAxOTcsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDgzLCA3MywgNzEsIDc4LCAxMjgsIDY1LCAKKyAgICA2NiwgNzksIDg2LCA2OSwgMTI4LCA2NiwgNjksIDc2LCA3OSwgODcsIDEyOCwgODYsIDY1LCA4MiwgNzMsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDY2LCA4MiwgNjUsIDczLCA3NiwgNzYsIDE5NywgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgMjA2LCA2NiwgCisgICAgODksIDkwLCA2NSwgNzgsIDg0LCA3MywgNzgsIDE5NywgODcsIDcyLCA3MywgODQsIDE5NywgNjYsIDc2LCA2NSwgNjcsIAorICAgIDIwMywgNjUsIDEyOCwgNzMsIDgzLCA3OSwgNzYsIDY1LCA4NCwgNjksIDE5NiwgNzcsIDc5LCA2OCwgNzMsIDcwLCA3MywgCisgICAgNjksIDIxMCwgMTk0LCA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCA3OCwgMTkzLCA4NSwgMTI4LCA3NywgODksIDY1LCA3OCwgCisgICAgNzcsIDY1LCAyMTAsIDY4LCA3OSwgMjEyLCA3NSwgNjUsIDc4LCA3MSwgODgsIDIwMSwgNzUsIDczLCA3NSwgNjUsIDc1LCAKKyAgICA4NSwgMjAxLCA3NywgNjksIDc4LCA2OCwgMTk3LCA3MywgMTI4LCA3OSwgMTk4LCA4NCwgNzMsIDY2LCA2OSwgODQsIDY1LCAKKyAgICAyMDYsIDc5LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCAyMTcsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDczLCAKKyAgICA3OCwgNzMsIDg0LCA3MywgNjUsIDIwNCwgNzcsIDY1LCA4MiwgNzUsIDEyOCwgNzcsIDY5LCA2OSwgMjA1LCA2NywgNzksIAorICAgIDgwLCA4NCwgNzMsIDE5NSwgNzUsIDcyLCA3NywgNjksIDIxMCwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgCisgICAgMjExLCA2NSwgNjYsIDc5LCA4NiwgMTk3LCA2NywgNjUsIDgyLCA4MiwgNzMsIDY5LCAyMTAsIDg5LCA2OSwgMjAwLCA2NywgCisgICAgNzIsIDY5LCA4MiwgNzksIDc1LCA2OSwgMTk3LCA4MCwgNzYsIDg1LCAyMTEsIDY4LCA2OSwgODYsIDY1LCA3OCwgNjUsIDcxLCAKKyAgICA2NSwgODIsIDIwMSwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk3LCA3NywgNzksIDc4LCA3MSwgNzksIDc2LCA3MywgNjUsIAorICAgIDIwNiwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgCisgICAgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgMTI4LCA2NiwgNzksIDIxNiwgODQsIDczLCA3NiwgMTk3LCA2OCwgODUsIDgwLCAKKyAgICA3NiwgNzksIDg5LCA2NSwgMjA2LCA3NywgNzMsIDY4LCA2OCwgNzYsIDE5NywgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIAorICAgIDY5LCA4MywgNzMsIDkwLCA2OSwgMTk2LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxOTYsIDg0LCA3MiwgNjUsIDIwNSwgCisgICAgNzksIDc4LCA2OSwgMTI4LCAyMTMsIDc0LCA3OSwgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA4NCwgODcsIDc5LCAKKyAgICAxMjgsIDY3LCA3OSwgNzgsIDgzLCA3OSwgNzgsIDY1LCA3OCwgMjEyLCA3MiwgNjksIDY2LCA4MiwgNjksIDIxNSwgNzcsIAorICAgIDczLCA2NSwgMjA3LCA4NSwgMjA4LCA3MiwgNzksIDc5LCA3NSwgMTI4LCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgCisgICAgMjA2LCA3OSwgODYsIDY5LCAyMTAsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIDcxLCAyMTEsIDcyLCA3NywgNzksIDc4LCAKKyAgICAxOTksIDc5LCA3OCwgMTk3LCA4MCwgNjUsIDcyLCA2NSwgODcsIDIwMCwgODQsIDg3LCAyMDcsIDY4LCA3OSwgODcsIDIwNiwgCisgICAgNzMsIDc4LCA2OCwgNjksIDIxNiwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzYsIDc5LCAyMTUsIDg2LCAKKyAgICA3OSwgNjcsIDY1LCA3NiwgNzMsIDE5NSwgODQsIDcyLCA4MiwgNjksIDE5NywgNzIsIDY1LCA3NiwgNzAsIDg3LCA3MywgNjgsIAorICAgIDg0LCAyMDAsIDcyLCA2NSwgNzgsIDY4LCA0NSwgNzAsIDczLCA4MywgMjEyLCA3NywgNjksIDgyLCA3OSwgNzMsIDg0LCA3MywgCisgICAgMTk1LCA2NiwgNjUsIDc2LCA3MywgNzgsIDY5LCA4MywgMTk3LCA3NywgNjUsIDgyLCAyMDMsIDgzLCA2NywgODIsIDczLCAKKyAgICA4MCwgMjEyLCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTYsIAorICAgIDg0LCA3OSwgMTI4LCA2NSwgNzYsIDY3LCA3MiwgNjksIDc3LCA3MywgNjcsIDY1LCAyMDQsIDY1LCA3NiwgNjksIDE5OCwgCisgICAgNzIsIDczLCA3MSwgMjAwLCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA4MywgNzMsIDc4LCAKKyAgICA3MiwgNjUsIDc2LCAxOTMsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNzMsIDE5NSwgNjYsIDY1LCA4MiwgMTI4LCA4NCwgNzksIAorICAgIDc4LCAxOTcsIDY2LCA4MiwgNjUsIDcyLCA3NywgMjAxLCA3MiwgODUsIDc4LCA3MSwgNjUsIDgyLCA3MywgNjUsIDIwNiwgCisgICAgODQsIDcyLCA4MiwgNjksIDY5LCAxMjgsIDg0LCA3MiwgODUsIDc3LCAxOTQsIDcwLCA3OSwgODUsIDgyLCAxMjgsIDY2LCAKKyAgICA2NSwgODIsIDE5NCwgNzIsIDY1LCAyMDAsIDcyLCA2NSwgMTI4LCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3MCwgODUsIDc2LCAKKyAgICA3NiwgODcsIDczLCA2OCwgODQsIDIwMCwgNjYsIDgyLCA2NSwgNjcsIDc1LCA2OSwgODQsIDEyOCwgNjksIDgxLCA4NSwgNjUsIAorICAgIDIwNCwgNzYsIDczLCA3MSwgNzIsIDIxMiwgODQsIDY1LCAxOTksIDY4LCA3OSwgNzcsIDczLCA3OCwgMjA3LCA3MiwgNjUsIAorICAgIDc2LCAxOTgsIDc2LCA3OSwgNzgsIDE5OSwgNzcsIDY1LCA3NiwgNjUsIDg5LCA2NSwgNzYsIDY1LCAyMDUsIDY1LCA2NywgCisgICAgODUsIDg0LCA2OSwgMTI4LCA3MCwgODIsIDY1LCA3NSwgODQsIDg1LCAyMTAsIDY3LCA3MiwgNjUsIDgyLCA2NSwgNjcsIDg0LCAKKyAgICA2OSwgMjEwLCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTUsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA4MywgODQsIAorICAgIDgyLCA4NSwgNjcsIDIwMywgNzAsIDczLCA4NiwgNjksIDEyOCwgNzksIDgwLCA2OSwgMjA2LCA3MiwgNzMsIDgyLCA2NSwgCisgICAgNzEsIDY1LCA3OCwgMTkzLCA3NSwgNjUsIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDY1LCAyMDQsIDg0LCA2OSwgNzYsIDg1LCAKKyAgICA3MSwgMjEzLCA3NCwgODUsIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgCisgICAgMjExLCA2NSwgODIsIDc3LCA2OSwgNzgsIDczLCA2NSwgMjA2LCA2NiwgNjksIDc4LCA3MSwgNjUsIDc2LCAyMDEsIDcxLCAKKyAgICA3NiwgNjUsIDcxLCA3OSwgNzYsIDczLCA4NCwgNzMsIDE5NSwgODMsIDcyLCA2NSwgODIsIDY1LCA2OCwgMTkzLCA3OCwgNjksIAorICAgIDcxLCA2NSwgODQsIDczLCA4NiwgMTk3LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgNzQsIDY5LCA2OSwgCisgICAgMjA1LCA4MCwgNjUsIDEyOCwgODMsIDczLCA2OCwgNjgsIDcyLCA2NSwgMjA1LCA2OCwgNzksIDg0LCAyMTEsIDczLCA2OCwgCisgICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NCwgNjUsIDg2LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA2NywgODUsIDgyLCAKKyAgICA4MywgNzMsIDg2LCAxOTcsIDc3LCA2NSwgMTI4LCA3OSwgODIsIDczLCA4OSwgMTkzLCA4MywgMTI4LCA4MywgNzMsIDg4LCAKKyAgICAxMjgsIDg3LCA2OSwgODMsIDg0LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4MiwgODUsIDc4LCA3MywgMTk1LCA4OSwgNjUsIAorICAgIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc1LCA2NSwgNzgsIDc4LCA2NSwgNjgsIDE5MywgNzgsIDY1LCAxMjgsIAorICAgIDkwLCA5MCwgODksIDg4LCAxMjgsIDkwLCA5MCwgODksIDg0LCAxMjgsIDkwLCA5MCwgODksIDgyLCA4OCwgMTI4LCA5MCwgCisgICAgOTAsIDg5LCA4MiwgMTI4LCA5MCwgOTAsIDg5LCA4MCwgMTI4LCA5MCwgOTAsIDg5LCA2NSwgMTI4LCA5MCwgOTAsIDg5LCAKKyAgICAxMjgsIDkwLCA5MCwgODUsIDg4LCAxMjgsIDkwLCA5MCwgODUsIDgyLCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgMTI4LCAKKyAgICA5MCwgOTAsIDg1LCA4MCwgMTI4LCA5MCwgOTAsIDg1LCAxMjgsIDkwLCA5MCwgODMsIDg5LCA2NSwgMTI4LCA5MCwgOTAsIAorICAgIDgzLCA2NSwgMTI4LCA5MCwgOTAsIDc5LCA4OCwgMTI4LCA5MCwgOTAsIDc5LCA4MCwgMTI4LCA5MCwgOTAsIDc5LCAxMjgsIAorICAgIDkwLCA5MCwgNzMsIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDgwLCAxMjgsIDkwLCA5MCwgCisgICAgNzMsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODQsIDEyOCwgOTAsIDkwLCA3MywgNjksIDgwLCAxMjgsIDkwLCAKKyAgICA5MCwgNzMsIDY5LCAxMjgsIDkwLCA5MCwgNzMsIDEyOCwgOTAsIDkwLCA2OSwgODgsIDEyOCwgOTAsIDkwLCA2OSwgODAsIAorICAgIDEyOCwgOTAsIDkwLCA2OSwgNjksIDEyOCwgOTAsIDkwLCA2OSwgMTI4LCA5MCwgOTAsIDY1LCA4OCwgMTI4LCA5MCwgOTAsIAorICAgIDY1LCA4NCwgMTI4LCA5MCwgOTAsIDY1LCA4MCwgMTI4LCA5MCwgOTAsIDY1LCA2NSwgMTI4LCA5MCwgOTAsIDY1LCAxMjgsIAorICAgIDkwLCA4OSwgNzEsIDc5LCA4MywgMTI4LCA5MCwgODcsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc4LCA3NCwgMTI4LCA5MCwgCisgICAgODcsIDc4LCA2NiwgODMsIDgwLCAxMjgsIDkwLCA4NywgNzQsIDEyOCwgOTAsIDg3LCAyMDIsIDkwLCA4NywgNjUsIDgyLCAKICAgICA2NSwgNzUsIDY1LCA4OSwgMTI4LCA5MCwgODcsIDY1LCAxMjgsIDkwLCA4NSwgODQsIDEyOCwgOTAsIDg1LCA3OSwgODgsIAogICAgIDEyOCwgOTAsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDg1LCA3OSwgMTI4LCA5MCwgODUsIDc3LCAxMjgsIDkwLCA4NSwgNjYsIAotICAgIDg1LCA4MiwgMTI4LCA5MCwgODUsIDUzLCAxMjgsIDkwLCA4NSwgMTgxLCA5MCwgODMsIDcyLCA2NSwgMTI4LCA5MCwgODIsIAotICAgIDY1LCAxMjgsIDkwLCA4MSwgNjUsIDgwLCA3MiwgMTkzLCA5MCwgNzksIDg0LCAxMjgsIDkwLCA3OSwgNzksIDEyOCwgOTAsIAotICAgIDc5LCA2NSwgMTI4LCA5MCwgNzYsIDY1LCA3NywgMTkzLCA5MCwgNzYsIDY1LCAxMjgsIDkwLCA3NiwgMTkzLCA5MCwgNzQsIAotICAgIDY5LCAxMjgsIDkwLCA3MywgOTAsIDUwLCAxMjgsIDkwLCA3MywgODEsIDY1LCA2NSwgMTI4LCA5MCwgNzMsIDc4LCA3OSwgCi0gICAgODIsIDEyOCwgOTAsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDkwLCA3MywgNzEsIDkwLCA2NSwgMTk5LCA5MCwgNzMsIDcxLCAKLSAgICAxMjgsIDkwLCA3MywgNjgsIDE5MywgOTAsIDczLCA2NiwgMTI4LCA5MCwgNzMsIDE5NCwgOTAsIDczLCA1MSwgMTI4LCA5MCwgCi0gICAgMjAxLCA5MCwgNzIsIDg5LCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgODgsIDEyOCwgCi0gICAgOTAsIDcyLCA4OSwgODIsIDEyOCwgOTAsIDcyLCA4OSwgODAsIDEyOCwgOTAsIDcyLCA4OSwgMTI4LCA5MCwgNzIsIDg3LCAKLSAgICA2OSwgMTI4LCA5MCwgNzIsIDg3LCA2NSwgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4NCwgMTI4LCAKLSAgICA5MCwgNzIsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODIsIDEyOCwgOTAsIDcyLCA4NSwgODAsIDEyOCwgOTAsIAotICAgIDcyLCA4NSwgNzksIDg4LCAxMjgsIDkwLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgMTI4LCA5MCwgCi0gICAgNzIsIDg1LCAxMjgsIDkwLCA3MiwgNzksIDg4LCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIDkwLCA3MiwgNzksIDgwLCAKLSAgICAxMjgsIDkwLCA3MiwgNzksIDc5LCAxMjgsIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA3MywgODYsIDY5LCA4NCwgNjksIAotICAgIDEyOCwgOTAsIDcyLCA3MywgMTI4LCA5MCwgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIDY5LCA4NCwgMTI4LCA5MCwgNzIsIAotICAgIDY5LCA4MCwgMTI4LCA5MCwgNzIsIDY5LCA2OSwgMTI4LCA5MCwgNzIsIDY5LCAxMjgsIDkwLCA3MiwgMTk3LCA5MCwgNzIsIAotICAgIDY1LCA4OCwgMTI4LCA5MCwgNzIsIDY1LCA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4MiwgMTI4LCA5MCwgNzIsIDY1LCA4MCwgCi0gICAgMTI4LCA5MCwgNzIsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgNjUsIDEyOCwgOTAsIDcyLCA2NSwgMTI4LCA5MCwgCi0gICAgNzIsIDEyOCwgOTAsIDY5LCA4NCwgNjUsIDEyOCwgOTAsIDY5LCA4MiwgNzksIDEyOCwgOTAsIDY5LCA4MiwgMjA3LCA5MCwgCi0gICAgNjksIDc4LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA4OSwgNjUsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDc0LCA2NSwgMTI4LCAKLSAgICA5MCwgNjksIDUwLCAxMjgsIDkwLCAxOTcsIDkwLCA2NSwgODksIDc4LCAxMjgsIDkwLCA2NSwgODksIDczLCA3OCwgMTI4LCAKLSAgICA5MCwgNjUsIDg5LCA3MywgMjA2LCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgOTAsIDY1LCA4NCwgNjUsIAotICAgIDEyOCwgOTAsIDY1LCA4MiwgODEsIDY1LCAxMjgsIDkwLCA2NSwgODEsIDY5LCAxOTgsIDkwLCA2NSwgNzcsIDg4LCAxMjgsIAotICAgIDkwLCA2NSwgMjA0LCA5MCwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNjUsIDczLCAyMDYsIDkwLCA2NSwgNzMsIDEyOCwgOTAsIAotICAgIDY1LCA3MiwgMTI4LCA5MCwgNjUsIDIwMCwgOTAsIDY1LCA3MSwgMTI4LCA5MCwgNjUsIDY5LCA3MCwgMTI4LCA5MCwgNDgsIAotICAgIDQ5LCA1NCwgNzIsIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDcxLCAxMjgsIDkwLCA0OCwgNDksIDU0LCA3MCwgMTI4LCA5MCwgCi0gICAgNDgsIDQ5LCA1NCwgNjksIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDY4LCAxMjgsIDkwLCA0OCwgNDksIDU0LCA2NywgMTI4LCAKLSAgICA5MCwgNDgsIDQ5LCA1NCwgNjYsIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDkwLCA0OCwgNDksIDU0LCAxMjgsIAotICAgIDkwLCA0OCwgNDksIDUzLCA3MywgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNzIsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDcxLCAKLSAgICAxMjgsIDkwLCA0OCwgNDksIDUzLCA3MCwgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNjksIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIAotICAgIDY4LCAxMjgsIDkwLCA0OCwgNDksIDUzLCA2NywgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNjYsIDEyOCwgOTAsIDQ4LCA0OSwgCi0gICAgNTMsIDY1LCAxMjgsIDkwLCA0OCwgNDksIDUzLCAxMjgsIDkwLCA0OCwgNDksIDUyLCAxMjgsIDkwLCA0OCwgNDksIDUxLCAKLSAgICAxMjgsIDkwLCA0OCwgNDksIDUwLCAxMjgsIDkwLCA0OCwgNDksIDQ5LCAxMjgsIDkwLCA0OCwgNDksIDQ4LCAxMjgsIDkwLCAKLSAgICA0OCwgNDgsIDU3LCAxMjgsIDkwLCA0OCwgNDgsIDU2LCAxMjgsIDkwLCA0OCwgNDgsIDU1LCAxMjgsIDkwLCA0OCwgNDgsIAotICAgIDU0LCAxMjgsIDkwLCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA5MCwgNDgsIDQ4LCA1MywgMTI4LCA5MCwgNDgsIDQ4LCA1MiwgCi0gICAgNjUsIDEyOCwgOTAsIDQ4LCA0OCwgNTIsIDEyOCwgOTAsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDkwLCA0OCwgNDgsIDUxLCAKLSAgICA2NSwgMTI4LCA5MCwgNDgsIDQ4LCA1MSwgMTI4LCA5MCwgNDgsIDQ4LCA1MCwgNjgsIDEyOCwgOTAsIDQ4LCA0OCwgNTAsIAotICAgIDY3LCAxMjgsIDkwLCA0OCwgNDgsIDUwLCA2NiwgMTI4LCA5MCwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgOTAsIDQ4LCA0OCwgCi0gICAgNTAsIDEyOCwgOTAsIDQ4LCA0OCwgNDksIDEyOCwgOTAsIDEyOCwgMjE4LCA4OSwgODksIDg4LCAxMjgsIDg5LCA4OSwgODQsIAotICAgIDEyOCwgODksIDg5LCA4MiwgODgsIDEyOCwgODksIDg5LCA4MiwgMTI4LCA4OSwgODksIDgwLCAxMjgsIDg5LCA4OSwgNjksIAotICAgIDEyOCwgODksIDg5LCA2NSwgNjUsIDEyOCwgODksIDg5LCA2NSwgMTI4LCA4OSwgODksIDEyOCwgODksIDg3LCA3OSwgNzksIAotICAgIDEyOCwgODksIDg3LCA3OSwgMTI4LCA4OSwgODcsIDczLCA3MywgMTI4LCA4OSwgODcsIDczLCAxMjgsIDg5LCA4NywgNjksIAotICAgIDEyOCwgODksIDg3LCA2NSwgNjUsIDEyOCwgODksIDg3LCA2NSwgMTI4LCA4OSwgODYsIDEyOCwgODksIDg1LCA4OCwgMTI4LCAKLSAgICA4OSwgODUsIDg3LCA3OSwgODEsIDEyOCwgODksIDg1LCA4NSwgNzUsIDY1LCA3NiwgNjksIDY1LCA4MCwgNzMsIDc4LCA4NCwgCi0gICAgODUsIDEyOCwgODksIDg1LCA4NSwgMTI4LCA4OSwgODUsIDg0LCAxMjgsIDg5LCA4NSwgODMsIDEyOCwgODksIDg1LCAyMTEsIAotICAgIDg5LCA4NSwgODIsIDg4LCAxMjgsIDg5LCA4NSwgODIsIDEyOCwgODksIDg1LCA4MSwgMTI4LCA4OSwgODUsIDIwOSwgODksIAotICAgIDg1LCA4MCwgMTI4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA4OSwgODUsIDc5LCA4NCwgMTI4LCA4OSwgODUsIDc5LCA4MCwgCi0gICAgMTI4LCA4OSwgODUsIDc5LCA3NywgMTI4LCA4OSwgODUsIDc5LCAxMjgsIDg5LCA4NSwgNzgsIDEyOCwgODksIDg1LCA3NywgCi0gICAgMTI4LCA4OSwgODUsIDY5LCA4MSwgMTI4LCA4OSwgODUsIDY5LCAxMjgsIDg5LCA4NSwgNjgsIDcyLCAxMjgsIDg5LCA4NSwgCi0gICAgNjgsIDIwMCwgODksIDg1LCA2NSwgNzgsIDEyOCwgODksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDg5LCA4NSwgNDUsIDg5LCAKLSAgICA2OSwgNzksIDEyOCwgODksIDg1LCA0NSwgODksIDY5LCAxMjgsIDg5LCA4NSwgNDUsIDg1LCAxMjgsIDg5LCA4NSwgNDUsIAotICAgIDc5LCAxMjgsIDg5LCA4NSwgNDUsIDczLCAxMjgsIDg5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA4OSwgODUsIDQ1LCA2OSwgCi0gICAgMTI4LCA4OSwgODUsIDQ1LCA2NSwgNjksIDEyOCwgODksIDg1LCA0NSwgNjUsIDEyOCwgODksIDg1LCAxMjgsIDg5LCAyMTMsIAotICAgIDg5LCA4MCwgODMsIDczLCA3NiwgNzMsIDEyOCwgODksIDgwLCA3OSwgODIsIDgyLCA3OSwgNzMsIDEyOCwgODksIDgwLCA3OSwgCi0gICAgNzUsIDgyLCA3MywgODMsIDczLCA4MywgMTI4LCA4OSwgODAsIDc5LCA3NSwgODIsIDczLCA4MywgNzMsIDIxMSwgODksIDgwLCAKLSAgICA3OSwgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODksIDc5LCA4OSwgMTI4LCA4OSwgNzksIAotICAgIDg4LCAxMjgsIDg5LCA3OSwgODUsIDg0LCA3MiwgNzAsIDg1LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgODksIDc5LCA4NSwgCi0gICAgODQsIDcyLCA3MCwgODUsIDIwNCwgODksIDc5LCA4NCwgMTI4LCA4OSwgNzksIDgyLCA3MywgMTI4LCA4OSwgNzksIDgxLCAKLSAgICAxMjgsIDg5LCA3OSwgMjA5LCA4OSwgNzksIDgwLCAxMjgsIDg5LCA3OSwgNzksIDEyOCwgODksIDc5LCA3NywgNzksIDEyOCwgCi0gICAgODksIDc5LCA3MSwgNzIsIDEyOCwgODksIDc5LCA2OCwgNzIsIDEyOCwgODksIDc5LCA2OCwgMTI4LCA4OSwgNzksIDE5NiwgCi0gICAgODksIDc5LCA2NSwgMTI4LCA4OSwgNzksIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDg5LCA3OSwgNDUsIDg5LCA2NSwgNjksIAotICAgIDEyOCwgODksIDc5LCA0NSwgODksIDY1LCAxMjgsIDg5LCA3OSwgNDUsIDc5LCAxMjgsIDg5LCA3OSwgNDUsIDczLCAxMjgsIAotICAgIDg5LCA3OSwgNDUsIDY5LCA3OSwgMTI4LCA4OSwgNzksIDQ1LCA2NSwgNjksIDEyOCwgODksIDc5LCA0NSwgNjUsIDEyOCwgCi0gICAgODksIDc5LCAxMjgsIDg5LCAyMDcsIDg5LCA3MywgOTAsIDY5LCA4NCwgMTI4LCA4OSwgNzMsIDg4LCAxMjgsIDg5LCA3MywgCi0gICAgODcsIDc4LCAxMjgsIDg5LCA3MywgODQsIDEyOCwgODksIDczLCA4MCwgMTI4LCA4OSwgNzMsIDc4LCA3MSwgMTI4LCA4OSwgCi0gICAgNzMsIDczLCAxMjgsIDg5LCA3MywgMTk5LCA4OSwgNzMsIDY5LCA4OCwgMTI4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA4OSwgCi0gICAgNzMsIDY5LCA4MCwgMTI4LCA4OSwgNzMsIDY5LCA2OSwgMTI4LCA4OSwgNzMsIDY5LCAxMjgsIDg5LCA3MywgNjgsIDY4LCAKLSAgICA3MywgODMsIDIwMCwgODksIDczLCA0NSwgODUsIDEyOCwgODksIDczLCAxMjgsIDg5LCA3MCwgNjksIDgzLCA3MywgODMsIAotICAgIDEyOCwgODksIDcwLCA2OSwgODMsIDczLCAyMTEsIDg5LCA3MCwgNjksIDIwNiwgODksIDY5LCA4OSwgMTI4LCA4OSwgNjksIAotICAgIDg3LCAxMjgsIDg5LCA2OSwgODUsIDg4LCAxMjgsIDg5LCA2OSwgODUsIDgyLCA2NSwgNjksIDEyOCwgODksIDY5LCA4NSwgCi0gICAgODEsIDEyOCwgODksIDY5LCA4NSwgNzcsIDEyOCwgODksIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA4OSwgNjksIDg1LCAKLSAgICA2NSwgNjksIDEyOCwgODksIDY5LCA4NCwgNzMsIDg2LCAxMjgsIDg5LCA2OSwgODMsIDg0LCA4NSwgMTI4LCA4OSwgNjksIAotICAgIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCAKLSAgICA3OCwgNzEsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgCi0gICAgNzEsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzIsIAotICAgIDczLCA2OSwgODUsIDcyLCAxMjgsIDg5LCA2OSwgODMsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4OSwgNjksIDgyLCA4NSwgCi0gICAgMTI4LCA4OSwgNjksIDgyLCAyMTMsIDg5LCA2OSwgODIsIDczLCAxMjgsIDg5LCA2OSwgODIsIDY1LCAyMDAsIDg5LCA2OSwgCi0gICAgODIsIDEyOCwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDg5LCA2OSwgNzksIDQ1LCAKLSAgICA4OSwgNjUsIDEyOCwgODksIDY5LCA3OSwgNDUsIDg1LCAxMjgsIDg5LCA2OSwgNzksIDQ1LCA3OSwgMTI4LCA4OSwgNjksIAotICAgIDc4LCA3MywgODMsIDY5LCAyMDEsIDg5LCA2OSwgNzgsIDY1LCA4MCwgMTI4LCA4OSwgNjksIDc4LCAxMjgsIDg5LCA2OSwgCi0gICAgMjA2LCA4OSwgNjksIDc2LCA3NiwgNzksIDg3LCAxMjgsIDg5LCA2OSwgNzYsIDc2LCA3OSwgMjE1LCA4OSwgNjksIDcyLCAKLSAgICAxMjgsIDg5LCA2OSwgNjksIDEyOCwgODksIDY5LCA2NSwgMjEwLCA4OSwgNjksIDY1LCAxMjgsIDg5LCA2NSwgOTAsIDkwLCAKLSAgICAxMjgsIDg5LCA2NSwgOTAsIDcyLCAxMjgsIDg5LCA2NSwgOTAsIDEyOCwgODksIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgODksIDY1LCA4OSwgMTI4LCA4OSwgNjUsIDg3LCAxMjgsIDg5LCA2NSwgODYsIDEyOCwgODksIDY1LCA4NSwgMTI4LCAKLSAgICA4OSwgNjUsIDg0LCA4NCwgMTI4LCA4OSwgNjUsIDg0LCA3MywgMTI4LCA4OSwgNjUsIDg0LCA3MiwgMTI4LCA4OSwgNjUsIAotICAgIDg0LCAxMjgsIDg5LCA2NSwgODMsIDgzLCAxMjgsIDg5LCA2NSwgODMsIDcyLCAxMjgsIDg5LCA2NSwgODMsIDEyOCwgODksIAotICAgIDY1LCA4MiwgODIsIDEyOCwgODksIDY1LCA4MiwgMTI4LCA4OSwgNjUsIDIxMCwgODksIDY1LCA4MSwgMTI4LCA4OSwgNjUsIAotICAgIDgwLCAxMjgsIDg5LCA2NSwgNzgsIDgzLCA2NSwgODksIDY1LCAxMjgsIDg5LCA2NSwgNzgsIDcxLCAxMjgsIDg5LCA2NSwgCi0gICAgNzgsIDE5OSwgODksIDY1LCA3OCwgMTI4LCA4OSwgNjUsIDc3LCA3OSwgNzUsIDEyOCwgODksIDY1LCA3NywgNjUsIDc1LCAKLSAgICA3NSwgNjUsIDc4LCAxMjgsIDg5LCA2NSwgNzcsIDEyOCwgODksIDY1LCA3NiwgMTI4LCA4OSwgNjUsIDc1LCA3MiwgNzIsIAotICAgIDEyOCwgODksIDY1LCA3NSwgNzIsIDEyOCwgODksIDY1LCA3NSwgNjUsIDgzLCA3MiwgMTI4LCA4OSwgNjUsIDc1LCAxMjgsIAotICAgIDg5LCA2NSwgNzQsIDg1LCA4MiwgODYsIDY5LCA2OCwgNzMsIDE5NSwgODksIDY1LCA3NCwgMTI4LCA4OSwgNjUsIDczLCAKLSAgICAxMjgsIDg5LCA2NSwgNzIsIDcyLCAxMjgsIDg5LCA2NSwgNzIsIDEyOCwgODksIDY1LCA3MSwgNzgsIDEyOCwgODksIDY1LCAKLSAgICA3MSwgNzIsIDcyLCAxMjgsIDg5LCA2NSwgNzEsIDcyLCAxMjgsIDg5LCA2NSwgNzEsIDEyOCwgODksIDY1LCA3MCwgMjEzLCAKLSAgICA4OSwgNjUsIDcwLCAxMjgsIDg5LCA2NSwgNjksIDc3LCA3NywgNjUsIDY5LCAxMjgsIDg5LCA2NSwgNjgsIDcyLCAxMjgsIAotICAgIDg5LCA2NSwgNjgsIDY4LCA3MiwgMTI4LCA4OSwgNjUsIDY4LCA2OCwgMTI4LCA4OSwgNjUsIDY4LCAxMjgsIDg5LCA2NSwgCi0gICAgNjcsIDcyLCAxMjgsIDg5LCA2NSwgNjYsIDcyLCAxMjgsIDg5LCA2NSwgNjYsIDEyOCwgODksIDY1LCA2NSwgODIsIDg1LCAKLSAgICAxMjgsIDg5LCA2NSwgNjUsIDczLCAxMjgsIDg5LCA2NSwgNjUsIDY4LCA3OSwgMTI4LCA4OSwgNjUsIDQ1LCA4OSwgNzksIAotICAgIDEyOCwgODksIDY1LCA0NSwgODUsIDEyOCwgODksIDY1LCA0NSwgNzksIDEyOCwgODksIDQ4LCA0OCwgNTYsIDEyOCwgODksIAotICAgIDQ4LCA0OCwgNTUsIDEyOCwgODksIDQ4LCA0OCwgNTQsIDEyOCwgODksIDQ4LCA0OCwgNTMsIDEyOCwgODksIDQ4LCA0OCwgCi0gICAgNTIsIDEyOCwgODksIDQ4LCA0OCwgNTEsIDEyOCwgODksIDQ4LCA0OCwgNTAsIDEyOCwgODksIDQ4LCA0OCwgNDksIDY1LCAKLSAgICAxMjgsIDg5LCA0OCwgNDgsIDQ5LCAxMjgsIDg5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4OCwgODksIDg4LCAxMjgsIDg4LCAKLSAgICA4OSwgODUsIDEyOCwgODgsIDg5LCA4NCwgMTI4LCA4OCwgODksIDgyLCA4OCwgMTI4LCA4OCwgODksIDgyLCAxMjgsIDg4LCAKLSAgICA4OSwgODAsIDEyOCwgODgsIDg5LCA3OSwgMTI4LCA4OCwgODksIDczLCAxMjgsIDg4LCA4OSwgNjksIDY5LCAxMjgsIDg4LCAKLSAgICA4OSwgNjksIDEyOCwgODgsIDg5LCA2NSwgNjUsIDEyOCwgODgsIDg5LCA2NSwgMTI4LCA4OCwgODksIDEyOCwgODgsIDg3LCAKLSAgICA3MywgMTI4LCA4OCwgODcsIDY5LCA2OSwgMTI4LCA4OCwgODcsIDY5LCAxMjgsIDg4LCA4NywgNjUsIDY1LCAxMjgsIDg4LCAKLSAgICA4NywgNjUsIDEyOCwgODgsIDg2LCA2OSwgMTI4LCA4OCwgODYsIDY1LCAxMjgsIDg4LCA4NSwgNzksIDg4LCAxMjgsIDg4LCAKLSAgICA4NSwgNzksIDEyOCwgODgsIDg1LCAxMjgsIDg4LCA4MywgNzIsIDY1LCA2NSwgODksIDY1LCA4NCwgNzIsIDczLCA4OSwgNjUsIAotICAgIDEyOCwgODgsIDc5LCA4OCwgMTI4LCA4OCwgNzksIDg0LCAxMjgsIDg4LCA3OSwgODIsIDEyOCwgODgsIDc5LCA4MCwgMTI4LCAKLSAgICA4OCwgNzksIDY1LCAxMjgsIDg4LCA3OSwgMTI4LCA4OCwgNzMsIDg4LCAxMjgsIDg4LCA3MywgODQsIDEyOCwgODgsIDczLCAKLSAgICA4MiwgNzksIDIwNiwgODgsIDczLCA4MCwgMTI4LCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA4OCwgNzMsIDY5LCA4NCwgMTI4LCAKLSAgICA4OCwgNzMsIDY5LCA4MCwgMTI4LCA4OCwgNzMsIDY5LCAxMjgsIDg4LCA3MywgMTI4LCA4OCwgNzEsIDEyOCwgODgsIDY5LCAKLSAgICA4MywgODQsIDY5LCAyMTEsIDg4LCA2OSwgNzIsIDEyOCwgODgsIDY5LCA2OSwgMTI4LCA4OCwgNjksIDEyOCwgODgsIDY1LCAKLSAgICA3OCwgMTI4LCA4OCwgNjUsIDY1LCAxMjgsIDg4LCA2NSwgMTI4LCA4OCwgNDgsIDQ4LCA1NiwgNjUsIDEyOCwgODgsIDQ4LCAKLSAgICA0OCwgNTYsIDEyOCwgODgsIDQ4LCA0OCwgNTUsIDEyOCwgODgsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDg4LCA0OCwgNDgsIAotICAgIDU0LCAxMjgsIDg4LCA0OCwgNDgsIDUzLCAxMjgsIDg4LCA0OCwgNDgsIDUyLCA2NiwgMTI4LCA4OCwgNDgsIDQ4LCA1MiwgCi0gICAgNjUsIDEyOCwgODgsIDQ4LCA0OCwgNTIsIDEyOCwgODgsIDQ4LCA0OCwgNTEsIDEyOCwgODgsIDQ4LCA0OCwgNTAsIDEyOCwgCi0gICAgODgsIDQ4LCA0OCwgNDksIDEyOCwgODcsIDkwLCAxMjgsIDg3LCA4OSwgNzgsIDc4LCAxMjgsIDg3LCA4OSwgNzgsIDIwNiwgCi0gICAgODcsIDg2LCAxMjgsIDg3LCA4NSwgODAsIDEyOCwgODcsIDg1LCA3OSwgODgsIDEyOCwgODcsIDg1LCA3OSwgODAsIDEyOCwgCi0gICAgODcsIDg1LCA3OSwgMTI4LCA4NywgODUsIDc4LCA3NCwgMjA3LCA4NywgODUsIDc4LCAxMjgsIDg3LCA4NSwgNzYsIDg1LCAKLSAgICAxMjgsIDg3LCA4NSwgNzYsIDIxMywgODcsIDg1LCA2OSwgMTI4LCA4NywgODUsIDY1LCA2OSwgODQsIDEyOCwgODcsIDg1LCAKLSAgICA2NSwgNjksIDc4LCAxMjgsIDg3LCA4NSwgMTI4LCA4NywgODIsIDIxNywgODcsIDgyLCA3OSwgNzgsIDcxLCAxMjgsIDg3LCAKLSAgICA4MiwgNzMsIDg0LCA3MywgNzgsIDE5OSwgODcsIDgyLCA2OSwgNzgsIDY3LCA3MiwgMTI4LCA4NywgODIsIDY5LCA2NSwgODQsIAotICAgIDIwMCwgODcsIDgyLCA2NSwgODAsIDgwLCA2OSwgMTk2LCA4NywgODIsIDY1LCA4MCwgMTI4LCA4NywgNzksIDg4LCAxMjgsIAotICAgIDg3LCA3OSwgODIsIDgyLCA3MywgNjksIDE5NiwgODcsIDc5LCA4MiwgNzUsIDY5LCA4MiwgMTI4LCA4NywgNzksIDgyLCA3NSwgCi0gICAgMTI4LCA4NywgNzksIDgyLCAyMDMsIDg3LCA3OSwgODIsIDY4LCA4MywgODAsIDY1LCA2NywgNjksIDEyOCwgODcsIDc5LCAKLSAgICA4MiwgMTk2LCA4NywgNzksIDgwLCAxMjgsIDg3LCA3OSwgNzksIDc4LCAxMjgsIDg3LCA3OSwgNzksIDc2LCAxMjgsIDg3LCAKLSAgICA3OSwgNzksIDY4LCA4MywgNDUsIDY3LCA4MiwgNjksIDE5NywgODcsIDc5LCA3OSwgNjgsIDEyOCwgODcsIDc5LCA3OCwgCi0gICAgMTI4LCA4NywgNzksIDIwNiwgODcsIDc5LCA3NywgNjksIDc4LCAyMTEsIDg3LCA3OSwgNzcsIDY5LCAyMDYsIDg3LCA3OSwgCi0gICAgNzcsIDY1LCA3OCwgMjExLCA4NywgNzksIDc3LCA2NSwgNzgsIDEyOCwgODcsIDc5LCA3NywgNjUsIDIwNiwgODcsIDc5LCAKLSAgICA3NiwgNzksIDgzLCA3OSwgMTI4LCA4NywgNzksIDc2LCAxOTgsIDg3LCA3OSwgNjksIDEyOCwgODcsIDc5LCA2NSwgMTI4LCAKLSAgICA4NywgNzMsIDg0LCA3MiwgNzksIDg1LCAyMTIsIDg3LCA3MywgODQsIDcyLCA3MywgNzgsIDEyOCwgODcsIDczLCA3OCwgODQsIAotICAgIDY5LCA4MiwgMTI4LCA4NywgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDg3LCA3MywgNzgsIDc0LCA2NSwgMTI4LCA4NywgCi0gICAgNzMsIDc4LCA3MSwgODMsIDEyOCwgODcsIDczLCA3OCwgNjksIDEyOCwgODcsIDczLCA3OCwgMTk3LCA4NywgNzMsIDc4LCAKLSAgICA2OCwgODUsIDEyOCwgODcsIDczLCA3OCwgNjgsIDEyOCwgODcsIDczLCA3OCwgMTk2LCA4NywgNzMsIDc4LCAxMjgsIDg3LCAKLSAgICA3MywgNzEsIDc4LCA4OSwgNjUsIDc4LCAxMjgsIDg3LCA3MywgNzEsIDcxLCA3NiwgMjE3LCA4NywgNzMsIDY4LCA2OSwgNDUsIAotICAgIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NywgNzMsIDY4LCAxOTcsIDg3LCA3MywgNjUsIDc4LCA3MSwgODcsIDY1LCA2NSwgCi0gICAgNzUsIDEyOCwgODcsIDczLCA2NSwgNzgsIDcxLCAxMjgsIDg3LCA3MiwgNzksIDc2LCAxOTcsIDg3LCA3MiwgNzMsIDg0LCAKLSAgICA2OSwgNDUsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCA2OSwgMTk2LCA4NywgNzIsIDczLCA4NCwgNjksIDEyOCwgODcsIAotICAgIDcyLCA2OSwgNjksIDc2LCA2OSwgMTk2LCA4NywgNzIsIDY5LCA2OSwgNzYsIDY3LCA3MiwgNjUsIDczLCAyMTAsIDg3LCA3MiwgCi0gICAgNjksIDY5LCA3NiwgMTI4LCA4NywgNzIsIDY5LCA2OSwgMjA0LCA4NywgNzIsIDY5LCA2NSwgODQsIDEyOCwgODcsIDcyLCAKLSAgICA2NSwgNzYsIDY5LCAxMjgsIDg3LCA3MSwgMTI4LCA4NywgNjksIDg4LCAxMjgsIDg3LCA2OSwgODUsIDg4LCAxMjgsIDg3LCAKLSAgICA2OSwgODMsIDg0LCA2OSwgODIsIDIwNiwgODcsIDY5LCA4MywgODQsIDEyOCwgODcsIDY5LCA4MywgMjEyLCA4NywgNjksIAotICAgIDgwLCAxMjgsIDg3LCA2OSwgNzksIDEyOCwgODcsIDY5LCA3OCwgMTI4LCA4NywgNjksIDc2LCA3NiwgMTI4LCA4NywgNjksIAotICAgIDczLCA3MSwgNzIsIDIxMiwgODcsIDY5LCA3MywgNjksIDgyLCA4MywgODQsIDgyLCA2NSwgODMsIDIxMSwgODcsIDY5LCA2OSwgCi0gICAgNzgsIDEyOCwgODcsIDY5LCA2OCwgNzEsIDY5LCA0NSwgODQsIDY1LCA3MywgNzYsIDY5LCAxOTYsIDg3LCA2OSwgNjgsIDY4LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDg3LCA2OSwgNjUsIDgyLCAyMTcsIDg3LCA2OSwgNjUsIDgwLCA3OSwgNzgsIDEyOCwgODcsIAotICAgIDY3LCAxMjgsIDg3LCA2NiwgMTI4LCA4NywgNjUsIDg5LCAxMjgsIDg3LCA2NSwgMjE3LCA4NywgNjUsIDg4LCA3MywgNzgsIAotICAgIDE5OSwgODcsIDY1LCA4OCwgMTI4LCA4NywgNjUsIDg3LCA0NSwgNjUsIDg5LCA3MywgNzgsIDQ1LCA4MiwgNjksIDgzLCA3MiwgCi0gICAgMTI4LCA4NywgNjUsIDg3LCAxMjgsIDg3LCA2NSwgMjE1LCA4NywgNjUsIDg2LCAyMTcsIDg3LCA2NSwgODYsIDczLCA3OCwgCi0gICAgMTk5LCA4NywgNjUsIDg2LCA2OSwgODMsIDEyOCwgODcsIDY1LCA4NiwgNjksIDEyOCwgODcsIDY1LCA4NiwgMTk3LCA4NywgCi0gICAgNjUsIDg1LCAxMjgsIDg3LCA2NSwgODQsIDg0LCA3OSwgMTI4LCA4NywgNjUsIDg0LCA2OSwgODIsIDc3LCA2OSwgNzYsIDc5LCAKLSAgICA3OCwgMTI4LCA4NywgNjUsIDg0LCA2OSwgODIsIDEyOCwgODcsIDY1LCA4NCwgNjksIDIxMCwgODcsIDY1LCA4NCwgNjcsIAotICAgIDcyLCAxMjgsIDg3LCA2NSwgODQsIDEyOCwgODcsIDY1LCA4MywgODQsIDczLCA3OCwgNzEsIDEyOCwgODcsIDY1LCA4MywgCi0gICAgODMsIDY1LCA3NiwgNzYsIDY1LCA3NywgMTI4LCA4NywgNjUsIDgzLCA3NiwgNjUsIDEyOCwgODcsIDY1LCA4MywgNzYsIAotICAgIDE5MywgODcsIDY1LCA4MywgNjUsIDc2LCA3NiwgNjUsIDc3LCAxMjgsIDg3LCA2NSwgODMsIDY1LCA3NiwgNzYsIDY1LCAKLSAgICAyMDUsIDg3LCA2NSwgODIsIDc4LCA3MywgNzgsIDE5OSwgODcsIDY1LCA4MCwgMTI4LCA4NywgNjUsIDc4LCA3MywgNzgsIAotICAgIDE5OSwgODcsIDY1LCA3OCwgNzEsIDc1LCA4NSwgNzksIDgxLCAxMjgsIDg3LCA2NSwgNzgsIDY4LCA2OSwgODIsIDY5LCA4MiwgCi0gICAgMTI4LCA4NywgNjUsIDc4LCAxMjgsIDg3LCA2NSwgNzYsIDc2LCAxMjgsIDg3LCA2NSwgNzYsIDc1LCAxMjgsIDg3LCA2NSwgCi0gICAgNzYsIDIwMywgODcsIDY1LCA3MywgODQsIDczLCA3OCwgNzEsIDEyOCwgODcsIDY1LCA3MywgMTI4LCA4NywgNjUsIDY5LCAKLSAgICA3OCwgMTI4LCA4NywgNjUsIDY5LCAxMjgsIDg3LCA2NSwgNjUsIDg2LCA4NSwgMTI4LCA4NywgNDgsIDUwLCA1MywgMTI4LCAKKyAgICA4NSwgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDIxMywgOTAsIDgzLCA3MiwgNjUsIDEyOCwgCisgICAgOTAsIDgyLCA2NSwgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAKKyAgICAxMjgsIDkwLCA3OSwgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgCisgICAgOTAsIDc0LCA2OSwgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDgxLCA2NSwgNjUsIDEyOCwgOTAsIDczLCAKKyAgICA4MCwgODAsIDY5LCA4MiwgNDUsIDc3LCA3OSwgODUsIDg0LCAyMDAsIDkwLCA3MywgNzgsIDc5LCA4MiwgMTI4LCA5MCwgNzMsIAorICAgIDc2LCA2OCwgNjksIDEyOCwgOTAsIDczLCA3MSwgOTAsIDY1LCAxOTksIDkwLCA3MywgNzEsIDEyOCwgOTAsIDczLCA2OCwgCisgICAgMTkzLCA5MCwgNzMsIDY2LCAxMjgsIDkwLCA3MywgMTk0LCA5MCwgNzMsIDUxLCAxMjgsIDkwLCAyMDEsIDkwLCA3MiwgODksIAorICAgIDg4LCAxMjgsIDkwLCA3MiwgODksIDg0LCAxMjgsIDkwLCA3MiwgODksIDgyLCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgCisgICAgMTI4LCA5MCwgNzIsIDg5LCA4MCwgMTI4LCA5MCwgNzIsIDg5LCAxMjgsIDkwLCA3MiwgODcsIDY5LCAxMjgsIDkwLCA3MiwgCisgICAgODcsIDY1LCAxMjgsIDkwLCA3MiwgODUsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDg0LCAxMjgsIDkwLCA3MiwgODUsIDgyLCAKKyAgICA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgMTI4LCA5MCwgNzIsIDg1LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgODgsIAorICAgIDEyOCwgOTAsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA3MiwgODUsIDc5LCAxMjgsIDkwLCA3MiwgODUsIDEyOCwgOTAsIAorICAgIDcyLCA3OSwgODgsIDEyOCwgOTAsIDcyLCA3OSwgODQsIDEyOCwgOTAsIDcyLCA3OSwgODAsIDEyOCwgOTAsIDcyLCA3OSwgCisgICAgNzksIDEyOCwgOTAsIDcyLCA3OSwgNzMsIDEyOCwgOTAsIDcyLCA3OSwgMTI4LCA5MCwgNzIsIDczLCA4NiwgNjksIDg0LCAKKyAgICA2OSwgMTI4LCA5MCwgNzIsIDczLCA3NiwgMTI4LCA5MCwgNzIsIDczLCAxMjgsIDkwLCA3MiwgNjksIDg4LCAxMjgsIDkwLCAKKyAgICA3MiwgNjksIDg0LCAxMjgsIDkwLCA3MiwgNjksIDgwLCAxMjgsIDkwLCA3MiwgNjksIDY5LCAxMjgsIDkwLCA3MiwgNjksIAorICAgIDEyOCwgOTAsIDcyLCAxOTcsIDkwLCA3MiwgNjUsIDg5LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgODgsIDEyOCwgOTAsIAorICAgIDcyLCA2NSwgODQsIDEyOCwgOTAsIDcyLCA2NSwgODIsIDEyOCwgOTAsIDcyLCA2NSwgODAsIDEyOCwgOTAsIDcyLCA2NSwgCisgICAgNzMsIDc4LCAxMjgsIDkwLCA3MiwgNjUsIDY1LCAxMjgsIDkwLCA3MiwgNjUsIDEyOCwgOTAsIDcyLCAxMjgsIDkwLCA2OSwgCisgICAgODQsIDY1LCAxMjgsIDkwLCA2OSwgODIsIDc5LCAxMjgsIDkwLCA2OSwgODIsIDIwNywgOTAsIDY5LCA3OCwgMTI4LCA5MCwgCisgICAgNjksIDc3LCA3NiwgODksIDY1LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA3NCwgNjUsIDEyOCwgOTAsIDY5LCA1MCwgMTI4LCAKKyAgICA5MCwgMTk3LCA5MCwgNjUsIDg5LCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgNzgsIDEyOCwgOTAsIDY1LCA4OSwgNzMsIAorICAgIDIwNiwgOTAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDkwLCA2NSwgODQsIDY1LCAxMjgsIDkwLCA2NSwgCisgICAgODIsIDgxLCA2NSwgMTI4LCA5MCwgNjUsIDgyLCA3NiwgMTI4LCA5MCwgNjUsIDgxLCA2OSwgMTk4LCA5MCwgNjUsIDc3LCAKKyAgICA4OCwgMTI4LCA5MCwgNjUsIDIwNCwgOTAsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDY1LCA3MywgMjA2LCA5MCwgNjUsIDczLCAKKyAgICAxMjgsIDkwLCA2NSwgNzIsIDEyOCwgOTAsIDY1LCAyMDAsIDkwLCA2NSwgNzEsIDEyOCwgOTAsIDY1LCA2OSwgNzAsIDEyOCwgCisgICAgOTAsIDY1LCA1NSwgMTI4LCA5MCwgMTkzLCA5MCwgNDgsIDQ5LCA1NCwgNzIsIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDcxLCAKKyAgICAxMjgsIDkwLCA0OCwgNDksIDU0LCA3MCwgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgNjksIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIAorICAgIDY4LCAxMjgsIDkwLCA0OCwgNDksIDU0LCA2NywgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgNjYsIDEyOCwgOTAsIDQ4LCA0OSwgCisgICAgNTQsIDY1LCAxMjgsIDkwLCA0OCwgNDksIDU0LCAxMjgsIDkwLCA0OCwgNDksIDUzLCA3MywgMTI4LCA5MCwgNDgsIDQ5LCAKKyAgICA1MywgNzIsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDcxLCAxMjgsIDkwLCA0OCwgNDksIDUzLCA3MCwgMTI4LCA5MCwgNDgsIAorICAgIDQ5LCA1MywgNjksIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDY4LCAxMjgsIDkwLCA0OCwgNDksIDUzLCA2NywgMTI4LCA5MCwgCisgICAgNDgsIDQ5LCA1MywgNjYsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDkwLCA0OCwgNDksIDUzLCAxMjgsIDkwLCAKKyAgICA0OCwgNDksIDUyLCAxMjgsIDkwLCA0OCwgNDksIDUxLCAxMjgsIDkwLCA0OCwgNDksIDUwLCAxMjgsIDkwLCA0OCwgNDksIAorICAgIDQ5LCAxMjgsIDkwLCA0OCwgNDksIDQ4LCAxMjgsIDkwLCA0OCwgNDgsIDU3LCAxMjgsIDkwLCA0OCwgNDgsIDU2LCAxMjgsIAorICAgIDkwLCA0OCwgNDgsIDU1LCAxMjgsIDkwLCA0OCwgNDgsIDU0LCAxMjgsIDkwLCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA5MCwgCisgICAgNDgsIDQ4LCA1MywgMTI4LCA5MCwgNDgsIDQ4LCA1MiwgNjUsIDEyOCwgOTAsIDQ4LCA0OCwgNTIsIDEyOCwgOTAsIDQ4LCAKKyAgICA0OCwgNTEsIDY2LCAxMjgsIDkwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA5MCwgNDgsIDQ4LCA1MSwgMTI4LCA5MCwgNDgsIAorICAgIDQ4LCA1MCwgNjgsIDEyOCwgOTAsIDQ4LCA0OCwgNTAsIDY3LCAxMjgsIDkwLCA0OCwgNDgsIDUwLCA2NiwgMTI4LCA5MCwgCisgICAgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgOTAsIDQ4LCA0OCwgNTAsIDEyOCwgOTAsIDQ4LCA0OCwgNDksIDEyOCwgOTAsIDEyOCwgCisgICAgMjE4LCA4OSwgODksIDg4LCAxMjgsIDg5LCA4OSwgODQsIDEyOCwgODksIDg5LCA4MiwgODgsIDEyOCwgODksIDg5LCA4MiwgCisgICAgMTI4LCA4OSwgODksIDgwLCAxMjgsIDg5LCA4OSwgNjksIDEyOCwgODksIDg5LCA2NSwgNjUsIDEyOCwgODksIDg5LCA2NSwgCisgICAgMTI4LCA4OSwgODksIDEyOCwgODksIDg3LCA3OSwgNzksIDEyOCwgODksIDg3LCA3OSwgMTI4LCA4OSwgODcsIDczLCA3MywgCisgICAgMTI4LCA4OSwgODcsIDczLCAxMjgsIDg5LCA4NywgNjksIDEyOCwgODksIDg3LCA2NSwgNjUsIDEyOCwgODksIDg3LCA2NSwgCisgICAgMTI4LCA4OSwgODYsIDEyOCwgODksIDg1LCA4OCwgMTI4LCA4OSwgODUsIDg3LCA3OSwgODEsIDEyOCwgODksIDg1LCA4NSwgCisgICAgNzUsIDY1LCA3NiwgNjksIDY1LCA4MCwgNzMsIDc4LCA4NCwgODUsIDEyOCwgODksIDg1LCA4NSwgMTI4LCA4OSwgODUsIDg0LCAKKyAgICAxMjgsIDg5LCA4NSwgODMsIDEyOCwgODksIDg1LCAyMTEsIDg5LCA4NSwgODIsIDg4LCAxMjgsIDg5LCA4NSwgODIsIDEyOCwgCisgICAgODksIDg1LCA4MSwgMTI4LCA4OSwgODUsIDIwOSwgODksIDg1LCA4MCwgMTI4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA4OSwgCisgICAgODUsIDc5LCA4NCwgMTI4LCA4OSwgODUsIDc5LCA4MCwgMTI4LCA4OSwgODUsIDc5LCA3NywgMTI4LCA4OSwgODUsIDc5LCAKKyAgICAxMjgsIDg5LCA4NSwgNzgsIDEyOCwgODksIDg1LCA3NywgMTI4LCA4OSwgODUsIDc0LCAxMjgsIDg5LCA4NSwgNjksIDgxLCAKKyAgICAxMjgsIDg5LCA4NSwgNjksIDEyOCwgODksIDg1LCA2OCwgNzIsIDEyOCwgODksIDg1LCA2OCwgMjAwLCA4OSwgODUsIDY1LCAKKyAgICA3OCwgMTI4LCA4OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgODksIDg1LCA0NSwgODksIDY5LCA3OSwgMTI4LCA4OSwgODUsIAorICAgIDQ1LCA4OSwgNjksIDEyOCwgODksIDg1LCA0NSwgODUsIDEyOCwgODksIDg1LCA0NSwgNzksIDEyOCwgODksIDg1LCA0NSwgCisgICAgNzMsIDEyOCwgODksIDg1LCA0NSwgNjksIDc5LCAxMjgsIDg5LCA4NSwgNDUsIDY5LCAxMjgsIDg5LCA4NSwgNDUsIDY1LCAKKyAgICA2OSwgMTI4LCA4OSwgODUsIDQ1LCA2NSwgMTI4LCA4OSwgODUsIDEyOCwgODksIDIxMywgODksIDgyLCA4OSwgMTI4LCA4OSwgCisgICAgODAsIDgzLCA3MywgNzYsIDczLCAxMjgsIDg5LCA4MCwgNzksIDgyLCA4MiwgNzksIDczLCAxMjgsIDg5LCA4MCwgNzksIDc1LCAKKyAgICA4MiwgNzMsIDgzLCA3MywgODMsIDEyOCwgODksIDgwLCA3OSwgNzUsIDgyLCA3MywgODMsIDczLCAyMTEsIDg5LCA4MCwgNzksIAorICAgIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA2OSwgNzgsIDczLCAxMjgsIDg5LCA3OSwgODksIDEyOCwgODksIDc5LCA4OCwgCisgICAgMTI4LCA4OSwgNzksIDg3LCA2OCwgMTI4LCA4OSwgNzksIDg1LCA4NCwgNzIsIDcwLCA4NSwgNzYsIDc4LCA2OSwgODMsIDgzLCAKKyAgICAxMjgsIDg5LCA3OSwgODUsIDg0LCA3MiwgNzAsIDg1LCAyMDQsIDg5LCA3OSwgODQsIDEyOCwgODksIDc5LCA4MiwgNzMsIAorICAgIDEyOCwgODksIDc5LCA4MSwgMTI4LCA4OSwgNzksIDIwOSwgODksIDc5LCA4MCwgMTI4LCA4OSwgNzksIDc5LCAxMjgsIDg5LCAKKyAgICA3OSwgNzcsIDc5LCAxMjgsIDg5LCA3OSwgNzEsIDcyLCAxMjgsIDg5LCA3OSwgNjgsIDcyLCAxMjgsIDg5LCA3OSwgNjgsIAorICAgIDEyOCwgODksIDc5LCAxOTYsIDg5LCA3OSwgNjUsIDEyOCwgODksIDc5LCA0NSwgODksIDY5LCA3OSwgMTI4LCA4OSwgNzksIAorICAgIDQ1LCA4OSwgNjUsIDY5LCAxMjgsIDg5LCA3OSwgNDUsIDg5LCA2NSwgMTI4LCA4OSwgNzksIDQ1LCA3OSwgMTI4LCA4OSwgCisgICAgNzksIDQ1LCA3MywgMTI4LCA4OSwgNzksIDQ1LCA2OSwgNzksIDEyOCwgODksIDc5LCA0NSwgNjUsIDY5LCAxMjgsIDg5LCAKKyAgICA3OSwgNDUsIDY1LCAxMjgsIDg5LCA3OSwgMTI4LCA4OSwgMjA3LCA4OSwgNzMsIDkwLCA2OSwgODQsIDEyOCwgODksIDczLCAKKyAgICA4OCwgMTI4LCA4OSwgNzMsIDg3LCA3OCwgMTI4LCA4OSwgNzMsIDg0LCAxMjgsIDg5LCA3MywgODAsIDEyOCwgODksIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgODksIDczLCA3MywgMTI4LCA4OSwgNzMsIDE5OSwgODksIDczLCA2OSwgODgsIDEyOCwgODksIDczLCAKKyAgICA2OSwgODQsIDEyOCwgODksIDczLCA2OSwgODAsIDEyOCwgODksIDczLCA2OSwgNjksIDEyOCwgODksIDczLCA2OSwgMTI4LCAKKyAgICA4OSwgNzMsIDY4LCA2OCwgNzMsIDgzLCAyMDAsIDg5LCA3MywgNDUsIDg1LCAxMjgsIDg5LCA3MywgMTI4LCA4OSwgNzAsIAorICAgIDY5LCA4MywgNzMsIDgzLCAxMjgsIDg5LCA3MCwgNjksIDgzLCA3MywgMjExLCA4OSwgNzAsIDY5LCAyMDYsIDg5LCA2OSwgCisgICAgODksIDEyOCwgODksIDY5LCA4NywgMTI4LCA4OSwgNjksIDg1LCA4OCwgMTI4LCA4OSwgNjksIDg1LCA4MiwgNjUsIDY5LCAKKyAgICAxMjgsIDg5LCA2OSwgODUsIDgxLCAxMjgsIDg5LCA2OSwgODUsIDc3LCAxMjgsIDg5LCA2OSwgODUsIDY1LCA2OSwgODQsIAorICAgIDEyOCwgODksIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDg5LCA2OSwgODQsIDczLCA4NiwgMTI4LCA4OSwgNjksIDgzLCA4NCwgCisgICAgODUsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODksIDY5LCAKKyAgICA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODksIDY5LCA4MywgCisgICAgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDg5LCA2OSwgODMsIDczLCA2OSwgODUsIAorICAgIDc4LCA3MSwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgCisgICAgODksIDY5LCA4MiwgODUsIDEyOCwgODksIDY5LCA4MiwgMjEzLCA4OSwgNjksIDgyLCA3MywgMTI4LCA4OSwgNjksIDgyLCAKKyAgICA2NSwgMjAwLCA4OSwgNjksIDgyLCAxMjgsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgCisgICAgMTI4LCA4OSwgNjksIDc5LCA0NSwgODksIDY1LCAxMjgsIDg5LCA2OSwgNzksIDQ1LCA4NSwgMTI4LCA4OSwgNjksIDc5LCAKKyAgICA0NSwgNzksIDEyOCwgODksIDY5LCA3OCwgNzMsIDgzLCA2OSwgMjAxLCA4OSwgNjksIDc4LCA2NSwgODAsIDEyOCwgODksIAorICAgIDY5LCA3OCwgMTI4LCA4OSwgNjksIDIwNiwgODksIDY5LCA3NiwgNzYsIDc5LCA4NywgMTI4LCA4OSwgNjksIDc2LCA3NiwgCisgICAgNzksIDIxNSwgODksIDY5LCA3MywgNzgsIDEyOCwgODksIDY5LCA3MiwgMTI4LCA4OSwgNjksIDY5LCA3MSwgMTI4LCA4OSwgCisgICAgNjksIDY5LCAxMjgsIDg5LCA2OSwgNjUsIDIxMCwgODksIDY5LCA2NSwgMTI4LCA4OSwgNjUsIDkwLCA5MCwgMTI4LCA4OSwgCisgICAgNjUsIDkwLCA3MiwgMTI4LCA4OSwgNjUsIDkwLCAxMjgsIDg5LCA2NSwgODksIDY4LCAxMjgsIDg5LCA2NSwgODksIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDg5LCA2NSwgODksIDEyOCwgODksIDY1LCA4NywgNzgsIDEyOCwgODksIDY1LCA4NywgMTI4LCAKKyAgICA4OSwgNjUsIDg2LCAxMjgsIDg5LCA2NSwgODUsIDEyOCwgODksIDY1LCA4NCwgODQsIDEyOCwgODksIDY1LCA4NCwgNzMsIAorICAgIDEyOCwgODksIDY1LCA4NCwgNzIsIDEyOCwgODksIDY1LCA4NCwgMTI4LCA4OSwgNjUsIDgzLCA4MywgMTI4LCA4OSwgNjUsIAorICAgIDgzLCA3MiwgMTI4LCA4OSwgNjUsIDgzLCAxMjgsIDg5LCA2NSwgODIsIDgyLCAxMjgsIDg5LCA2NSwgODIsIDEyOCwgODksIAorICAgIDY1LCAyMTAsIDg5LCA2NSwgODEsIDEyOCwgODksIDY1LCA4MCwgMTI4LCA4OSwgNjUsIDc4LCA4MywgNjUsIDg5LCA2NSwgCisgICAgMTI4LCA4OSwgNjUsIDc4LCA3MSwgMTI4LCA4OSwgNjUsIDc4LCAxOTksIDg5LCA2NSwgNzgsIDEyOCwgODksIDY1LCA3NywgCisgICAgNzksIDc1LCAxMjgsIDg5LCA2NSwgNzcsIDY1LCA3NSwgNzUsIDY1LCA3OCwgMTI4LCA4OSwgNjUsIDc3LCAxMjgsIDg5LCAKKyAgICA2NSwgNzYsIDEyOCwgODksIDY1LCA3NSwgNzIsIDcyLCAxMjgsIDg5LCA2NSwgNzUsIDcyLCAxMjgsIDg5LCA2NSwgNzUsIAorICAgIDY1LCA4MywgNzIsIDEyOCwgODksIDY1LCA3NSwgMTI4LCA4OSwgNjUsIDc0LCA4NSwgODIsIDg2LCA2OSwgNjgsIDczLCAKKyAgICAxOTUsIDg5LCA2NSwgNzQsIDEyOCwgODksIDY1LCA3MywgMTI4LCA4OSwgNjUsIDcyLCA3MiwgMTI4LCA4OSwgNjUsIDcyLCAKKyAgICAxMjgsIDg5LCA2NSwgNzEsIDc4LCAxMjgsIDg5LCA2NSwgNzEsIDcyLCA3MiwgMTI4LCA4OSwgNjUsIDcxLCA3MiwgMTI4LCAKKyAgICA4OSwgNjUsIDcxLCAxMjgsIDg5LCA2NSwgNzAsIDIxMywgODksIDY1LCA3MCwgMTI4LCA4OSwgNjUsIDY5LCA3NywgNzcsIAorICAgIDY1LCA2OSwgMTI4LCA4OSwgNjUsIDY4LCA3MiwgMTI4LCA4OSwgNjUsIDY4LCA2OCwgNzIsIDEyOCwgODksIDY1LCA2OCwgCisgICAgNjgsIDEyOCwgODksIDY1LCA2OCwgMTI4LCA4OSwgNjUsIDY3LCA3MiwgMTI4LCA4OSwgNjUsIDY2LCA3MiwgMTI4LCA4OSwgCisgICAgNjUsIDY2LCAxMjgsIDg5LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA4OSwgNjUsIDY1LCA3MywgMTI4LCA4OSwgNjUsIDY1LCAKKyAgICA2OCwgNzksIDEyOCwgODksIDY1LCA0NSwgODksIDc5LCAxMjgsIDg5LCA2NSwgNDUsIDg1LCAxMjgsIDg5LCA2NSwgNDUsIAorICAgIDc5LCAxMjgsIDg5LCA0OCwgNDgsIDU2LCAxMjgsIDg5LCA0OCwgNDgsIDU1LCAxMjgsIDg5LCA0OCwgNDgsIDU0LCAxMjgsIAorICAgIDg5LCA0OCwgNDgsIDUzLCAxMjgsIDg5LCA0OCwgNDgsIDUyLCAxMjgsIDg5LCA0OCwgNDgsIDUxLCAxMjgsIDg5LCA0OCwgCisgICAgNDgsIDUwLCAxMjgsIDg5LCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4OSwgNDgsIDQ4LCA0OSwgMTI4LCA4OSwgNDUsIDY3LCAKKyAgICA4MiwgNjksIDE5NywgODgsIDg5LCA4OCwgMTI4LCA4OCwgODksIDg1LCAxMjgsIDg4LCA4OSwgODQsIDEyOCwgODgsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgODgsIDg5LCA4MiwgMTI4LCA4OCwgODksIDgwLCAxMjgsIDg4LCA4OSwgNzksIDc5LCA3NCwgMTI4LCAKKyAgICA4OCwgODksIDc5LCA3OSwgMTI4LCA4OCwgODksIDc5LCAxMjgsIDg4LCA4OSwgNzMsIDEyOCwgODgsIDg5LCA2OSwgNjksIAorICAgIDIwNSwgODgsIDg5LCA2OSwgNjksIDEyOCwgODgsIDg5LCA2OSwgMTI4LCA4OCwgODksIDY1LCA2NSwgMTI4LCA4OCwgODksIAorICAgIDY1LCAxMjgsIDg4LCA4OSwgMTI4LCA4OCwgODcsIDczLCAxMjgsIDg4LCA4NywgNjksIDY5LCAxMjgsIDg4LCA4NywgNjksIAorICAgIDEyOCwgODgsIDg3LCA2NSwgNjUsIDEyOCwgODgsIDg3LCA2NSwgMTI4LCA4OCwgODcsIDEyOCwgODgsIDg2LCA2OSwgMTI4LCAKKyAgICA4OCwgODYsIDY1LCAxMjgsIDg4LCA4NSwgNzksIDg4LCAxMjgsIDg4LCA4NSwgNzksIDEyOCwgODgsIDg1LCAxMjgsIDg4LCAKKyAgICA4MywgNzIsIDY1LCA2NSwgODksIDY1LCA4NCwgNzIsIDczLCA4OSwgNjUsIDEyOCwgODgsIDc5LCA4OCwgMTI4LCA4OCwgNzksIAorICAgIDg0LCAxMjgsIDg4LCA3OSwgODIsIDEyOCwgODgsIDc5LCA4MCwgNzIsIDEyOCwgODgsIDc5LCA4MCwgMTI4LCA4OCwgNzksIAorICAgIDY1LCAxMjgsIDg4LCA3OSwgMTI4LCA4OCwgNzMsIDg4LCAxMjgsIDg4LCA3MywgODQsIDEyOCwgODgsIDczLCA4MiwgNzksIAorICAgIDIwNiwgODgsIDczLCA4MCwgMTI4LCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA4OCwgNzMsIDY5LCA4NCwgMTI4LCA4OCwgNzMsIAorICAgIDY5LCA4MCwgMTI4LCA4OCwgNzMsIDY5LCAxMjgsIDg4LCA3MywgNjUsIDY2LCAxMjgsIDg4LCA3MywgMTI4LCA4OCwgNzEsIAorICAgIDEyOCwgODgsIDY5LCA4OSwgNzgsIDEyOCwgODgsIDY5LCA4MywgODQsIDY5LCAyMTEsIDg4LCA2OSwgNzIsIDEyOCwgODgsIAorICAgIDY5LCA2OSwgMTI4LCA4OCwgNjksIDEyOCwgODgsIDY1LCA4NSwgODMsIDEyOCwgODgsIDY1LCA4NSwgMTI4LCA4OCwgNjUsIAorICAgIDgwLCA3MiwgMTI4LCA4OCwgNjUsIDc4LCAxMjgsIDg4LCA2NSwgNjUsIDEyOCwgODgsIDY1LCAxMjgsIDg4LCA0OCwgNDgsIAorICAgIDU2LCA2NSwgMTI4LCA4OCwgNDgsIDQ4LCA1NiwgMTI4LCA4OCwgNDgsIDQ4LCA1NSwgMTI4LCA4OCwgNDgsIDQ4LCA1NCwgCisgICAgNjUsIDEyOCwgODgsIDQ4LCA0OCwgNTQsIDEyOCwgODgsIDQ4LCA0OCwgNTMsIDEyOCwgODgsIDQ4LCA0OCwgNTIsIDY2LCAKKyAgICAxMjgsIDg4LCA0OCwgNDgsIDUyLCA2NSwgMTI4LCA4OCwgNDgsIDQ4LCA1MiwgMTI4LCA4OCwgNDgsIDQ4LCA1MSwgMTI4LCAKKyAgICA4OCwgNDgsIDQ4LCA1MCwgMTI4LCA4OCwgNDgsIDQ4LCA0OSwgMTI4LCA4OCwgNDUsIDIxNiwgODcsIDkwLCAxMjgsIDg3LCAKKyAgICA4OSwgNzgsIDc4LCAxMjgsIDg3LCA4OSwgNzgsIDIwNiwgODcsIDg2LCA3MywgMTI4LCA4NywgODYsIDY5LCAxMjgsIDg3LCAKKyAgICA4NiwgNjUsIDEyOCwgODcsIDg2LCAxMjgsIDg3LCA4NSwgODAsIDEyOCwgODcsIDg1LCA3OSwgODgsIDEyOCwgODcsIDg1LCAKKyAgICA3OSwgODAsIDEyOCwgODcsIDg1LCA3OSwgMTI4LCA4NywgODUsIDc4LCA3NCwgMjA3LCA4NywgODUsIDc4LCAxMjgsIDg3LCAKKyAgICA4NSwgNzYsIDg1LCAxMjgsIDg3LCA4NSwgNzYsIDIxMywgODcsIDg1LCA3MywgMTI4LCA4NywgODUsIDY5LCAxMjgsIDg3LCAKKyAgICA4NSwgNjUsIDY5LCA4NCwgMTI4LCA4NywgODUsIDY1LCA2OSwgNzgsIDEyOCwgODcsIDg1LCAxMjgsIDg3LCA4MiwgMjE3LCAKKyAgICA4NywgODIsIDc5LCA3OCwgNzEsIDEyOCwgODcsIDgyLCA3MywgODMsIDIxMiwgODcsIDgyLCA3MywgNzgsIDc1LCA3NiwgNjksIAorICAgIDgzLCAxMjgsIDg3LCA4MiwgNzMsIDc4LCA3NSwgNzYsIDY5LCAyMTEsIDg3LCA4MiwgNzMsIDc4LCA3NSwgNzYsIDY5LCA2OCwgCisgICAgMTI4LCA4NywgODIsIDY5LCA3OCwgNjcsIDcyLCAxMjgsIDg3LCA4MiwgNjksIDY1LCA4NCwgMjAwLCA4NywgODIsIDY1LCAKKyAgICA4MCwgODAsIDY5LCAxOTYsIDg3LCA4MiwgNjUsIDgwLCAxMjgsIDg3LCA3OSwgODgsIDEyOCwgODcsIDc5LCA4NywgMTI4LCAKKyAgICA4NywgNzksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA4NywgNzksIDgyLCA4MiwgNzMsIDY5LCAxOTYsIDg3LCA3OSwgODIsIAorICAgIDc2LCAxOTYsIDg3LCA3OSwgODIsIDc1LCA2OSwgODIsIDEyOCwgODcsIDc5LCA4MiwgNzUsIDEyOCwgODcsIDc5LCA4MiwgCisgICAgMjAzLCA4NywgNzksIDgyLCA2OCwgODMsIDgwLCA2NSwgNjcsIDY5LCAxMjgsIDg3LCA3OSwgODIsIDE5NiwgODcsIDc5LCAKKyAgICA4MCwgMTI4LCA4NywgNzksIDc5LCA3OCwgMTI4LCA4NywgNzksIDc5LCA3NiwgMTI4LCA4NywgNzksIDc5LCA2OCwgODMsIAorICAgIDQ1LCA2NywgODIsIDY5LCAxOTcsIDg3LCA3OSwgNzksIDY4LCAxMjgsIDg3LCA3OSwgNzgsIDEyOCwgODcsIDc5LCAyMDYsIAorICAgIDg3LCA3OSwgNzcsIDY5LCA3OCwgMjExLCA4NywgNzksIDc3LCA2OSwgMjA2LCA4NywgNzksIDc3LCA2NSwgNzgsIDIxMSwgCisgICAgODcsIDc5LCA3NywgNjUsIDc4LCAxMjgsIDg3LCA3OSwgNzcsIDY1LCAyMDYsIDg3LCA3OSwgNzYsIDc5LCA4MywgNzksIAorICAgIDEyOCwgODcsIDc5LCA3NiwgMTk4LCA4NywgNzksIDY5LCAxMjgsIDg3LCA3OSwgNjUsIDEyOCwgODcsIDczLCA4NCwgNzIsIAorICAgIDc5LCA4NSwgMjEyLCA4NywgNzMsIDg0LCA3MiwgNzMsIDc4LCAxMjgsIDg3LCA3MywgODQsIDcyLCA3MywgMjA2LCA4NywgCisgICAgNzMsIDgyLCA2OSwgMTk2LCA4NywgNzMsIDc4LCA4NCwgNjksIDgyLCAxMjgsIDg3LCA3MywgNzgsIDc1LCA3MywgNzgsIAorICAgIDE5OSwgODcsIDczLCA3OCwgNzUsIDEyOCwgODcsIDczLCA3OCwgNzQsIDY1LCAxMjgsIDg3LCA3MywgNzgsIDcxLCA4MywgCisgICAgMTI4LCA4NywgNzMsIDc4LCA2OSwgMTI4LCA4NywgNzMsIDc4LCAxOTcsIDg3LCA3MywgNzgsIDY4LCA4NSwgMTI4LCA4NywgCisgICAgNzMsIDc4LCA2OCwgNzksIDg3LCAxMjgsIDg3LCA3MywgNzgsIDY4LCAxMjgsIDg3LCA3MywgNzgsIDE5NiwgODcsIDczLCAKKyAgICA3OCwgMTI4LCA4NywgNzMsIDcxLCA3OCwgODksIDY1LCA3OCwgMTI4LCA4NywgNzMsIDcxLCA3MSwgNzYsIDIxNywgODcsIAorICAgIDczLCA3MSwgNzEsIDc2LCA2OSwgODMsIDEyOCwgODcsIDczLCA2OCwgODQsIDcyLCAxMjgsIDg3LCA3MywgNjgsIDY5LCA3OCwgCisgICAgNzMsIDc4LCAxOTksIDg3LCA3MywgNjgsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg3LCA3MywgNjgsIAorICAgIDE5NywgODcsIDczLCA2NSwgNzgsIDcxLCA4NywgNjUsIDY1LCA3NSwgMTI4LCA4NywgNzMsIDY1LCA3OCwgNzEsIDEyOCwgCisgICAgODcsIDcyLCA3OSwgNzYsIDE5NywgODcsIDcyLCA3MywgODQsIDY5LCA0NSwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIAorICAgIDY5LCAxOTYsIDg3LCA3MiwgNzMsIDg0LCA2OSwgMTI4LCA4NywgNzIsIDY5LCA2OSwgNzYsIDY5LCAxOTYsIDg3LCA3MiwgCisgICAgNjksIDY5LCA3NiwgNjcsIDcyLCA2NSwgNzMsIDIxMCwgODcsIDcyLCA2OSwgNjksIDc2LCAxMjgsIDg3LCA3MiwgNjksIDY5LCAKKyAgICAyMDQsIDg3LCA3MiwgNjksIDY1LCA4NCwgMTI4LCA4NywgNzIsIDY1LCA3NiwgNjksIDEyOCwgODcsIDcyLCAxMjgsIDg3LCAKKyAgICA3MSwgMTI4LCA4NywgNjksIDg4LCAxMjgsIDg3LCA2OSwgODUsIDg4LCAxMjgsIDg3LCA2OSwgODMsIDg0LCA2OSwgODIsIAorICAgIDIwNiwgODcsIDY5LCA4MywgODQsIDEyOCwgODcsIDY5LCA4MywgMjEyLCA4NywgNjksIDgwLCAxMjgsIDg3LCA2OSwgNzksIAorICAgIDEyOCwgODcsIDY5LCA3OCwgMTI4LCA4NywgNjksIDc2LCA3NiwgMTI4LCA4NywgNjksIDczLCA3MSwgNzIsIDIxMiwgODcsIAorICAgIDY5LCA3MywgNjksIDgyLCA4MywgODQsIDgyLCA2NSwgODMsIDIxMSwgODcsIDY5LCA3MywgMTI4LCA4NywgNjksIDY5LCA3OCwgCisgICAgMTI4LCA4NywgNjksIDY4LCA3MSwgNjksIDQ1LCA4NCwgNjUsIDczLCA3NiwgNjksIDE5NiwgODcsIDY5LCA2OCwgNzEsIDY5LCAKKyAgICAxMjgsIDg3LCA2OSwgNjgsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDg3LCA2OSwgNjYsIDEyOCwgODcsIDY5LCA2NSwgODIsIAorICAgIDIxNywgODcsIDY5LCA2NSwgODAsIDc5LCA3OCwgMTI4LCA4NywgNjcsIDEyOCwgODcsIDY2LCAxMjgsIDg3LCA2NSwgODksIAorICAgIDEyOCwgODcsIDY1LCAyMTcsIDg3LCA2NSwgODgsIDczLCA3OCwgMTk5LCA4NywgNjUsIDg4LCAxMjgsIDg3LCA2NSwgODcsIAorICAgIDQ1LCA2NSwgODksIDczLCA3OCwgNDUsIDgyLCA2OSwgODMsIDcyLCAxMjgsIDg3LCA2NSwgODcsIDEyOCwgODcsIDY1LCAKKyAgICAyMTUsIDg3LCA2NSwgODYsIDIxNywgODcsIDY1LCA4NiwgNzMsIDc4LCAxOTksIDg3LCA2NSwgODYsIDY5LCA4MywgMTI4LCAKKyAgICA4NywgNjUsIDg2LCA2OSwgMTI4LCA4NywgNjUsIDg2LCAxOTcsIDg3LCA2NSwgODUsIDEyOCwgODcsIDY1LCA4NCwgODQsIAorICAgIDc5LCAxMjgsIDg3LCA2NSwgODQsIDY5LCA4MiwgNzcsIDY5LCA3NiwgNzksIDc4LCAxMjgsIDg3LCA2NSwgODQsIDY5LCA4MiwgCisgICAgMTI4LCA4NywgNjUsIDg0LCA2OSwgMjEwLCA4NywgNjUsIDg0LCA2NywgNzIsIDEyOCwgODcsIDY1LCA4NCwgMTI4LCA4NywgCisgICAgNjUsIDgzLCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA4NywgNjUsIDgzLCA4NCwgNjksIDY2LCA2NSwgODMsIDc1LCA2OSwgODQsIAorICAgIDEyOCwgODcsIDY1LCA4MywgODMsIDY1LCA3NiwgNzYsIDY1LCA3NywgMTI4LCA4NywgNjUsIDgzLCA3NiwgNjUsIDEyOCwgCisgICAgODcsIDY1LCA4MywgNzYsIDE5MywgODcsIDY1LCA4MywgNjUsIDc2LCA3NiwgNjUsIDc3LCAxMjgsIDg3LCA2NSwgODMsIDY1LCAKKyAgICA3NiwgNzYsIDY1LCAyMDUsIDg3LCA2NSwgODIsIDc4LCA3MywgNzgsIDE5OSwgODcsIDY1LCA4MiwgNjUsIDc4LCAxOTksIAorICAgIDg3LCA2NSwgODAsIDEyOCwgODcsIDY1LCA3OCwgNzMsIDc4LCAxOTksIDg3LCA2NSwgNzgsIDcxLCA3NSwgODUsIDc5LCA4MSwgCisgICAgMTI4LCA4NywgNjUsIDc4LCA2OCwgNjksIDgyLCA2OSwgODIsIDEyOCwgODcsIDY1LCA3OCwgMTI4LCA4NywgNjUsIDc2LCAKKyAgICA3NiwgODAsIDc2LCA2NSwgNzgsIDE5NywgODcsIDY1LCA3NiwgNzYsIDEyOCwgODcsIDY1LCA3NiwgMjA0LCA4NywgNjUsIAorICAgIDc2LCA3NSwgMTI4LCA4NywgNjUsIDc2LCAyMDMsIDg3LCA2NSwgNzMsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDg3LCA2NSwgCisgICAgNzMsIDgzLCA4NCwgMTI4LCA4NywgNjUsIDczLCAxMjgsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDg3LCA2NSwgNjksIDEyOCwgCisgICAgODcsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDg3LCA2NSwgNjUsIDg2LCA4NSwgMTI4LCA4NywgNDgsIDUwLCA1MywgMTI4LCAKICAgICA4NywgNDgsIDUwLCA1MiwgNjUsIDEyOCwgODcsIDQ4LCA1MCwgNTIsIDEyOCwgODcsIDQ4LCA1MCwgNTEsIDEyOCwgODcsIAogICAgIDQ4LCA1MCwgNTAsIDEyOCwgODcsIDQ4LCA1MCwgNDksIDEyOCwgODcsIDQ4LCA1MCwgNDgsIDEyOCwgODcsIDQ4LCA0OSwgCiAgICAgNTcsIDEyOCwgODcsIDQ4LCA0OSwgNTYsIDY1LCAxMjgsIDg3LCA0OCwgNDksIDU2LCAxMjgsIDg3LCA0OCwgNDksIDU1LCAKQEAgLTI1OCwxMDAgKzI3NCwxMDIgQEAKICAgICA4NywgNDgsIDQ4LCA1MiwgMTI4LCA4NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODcsIDQ4LCA0OCwgNTEsIDEyOCwgODcsIAogICAgIDQ4LCA0OCwgNTAsIDEyOCwgODcsIDQ4LCA0OCwgNDksIDEyOCwgODYsIDkwLCA3NywgNjksIDg0LCAxMjgsIDg2LCA4OSwgCiAgICAgODgsIDEyOCwgODYsIDg5LCA4NCwgMTI4LCA4NiwgODksIDgyLCA4OCwgMTI4LCA4NiwgODksIDgyLCAxMjgsIDg2LCA4OSwgCi0gICAgODAsIDEyOCwgODYsIDg5LCAxMjgsIDg2LCA4NywgNjUsIDEyOCwgODYsIDg1LCA4OCwgMTI4LCA4NiwgODUsIDg1LCAxMjgsIAotICAgIDg2LCA4NSwgODQsIDEyOCwgODYsIDg1LCA4MiwgODgsIDEyOCwgODYsIDg1LCA4MiwgMTI4LCA4NiwgODUsIDgwLCAxMjgsIAotICAgIDg2LCA4NSwgNzYsIDcxLCA2NSwgMjEwLCA4NiwgODUsIDY5LCA4MSwgMTI4LCA4NiwgODQsIDgzLCAxMjgsIDg2LCA4NCwgCi0gICAgMTI4LCA4NiwgODMsIDU3LCA1NywgMTI4LCA4NiwgODMsIDU3LCA1NiwgMTI4LCA4NiwgODMsIDU3LCA1NSwgMTI4LCA4NiwgCi0gICAgODMsIDU3LCA1NCwgMTI4LCA4NiwgODMsIDU3LCA1MywgMTI4LCA4NiwgODMsIDU3LCA1MiwgMTI4LCA4NiwgODMsIDU3LCAKLSAgICA1MSwgMTI4LCA4NiwgODMsIDU3LCA1MCwgMTI4LCA4NiwgODMsIDU3LCA0OSwgMTI4LCA4NiwgODMsIDU3LCA0OCwgMTI4LCAKLSAgICA4NiwgODMsIDU3LCAxMjgsIDg2LCA4MywgNTYsIDU3LCAxMjgsIDg2LCA4MywgNTYsIDU2LCAxMjgsIDg2LCA4MywgNTYsIAotICAgIDU1LCAxMjgsIDg2LCA4MywgNTYsIDU0LCAxMjgsIDg2LCA4MywgNTYsIDUzLCAxMjgsIDg2LCA4MywgNTYsIDUyLCAxMjgsIAotICAgIDg2LCA4MywgNTYsIDUxLCAxMjgsIDg2LCA4MywgNTYsIDUwLCAxMjgsIDg2LCA4MywgNTYsIDQ5LCAxMjgsIDg2LCA4MywgCi0gICAgNTYsIDQ4LCAxMjgsIDg2LCA4MywgNTYsIDEyOCwgODYsIDgzLCA1NSwgNTcsIDEyOCwgODYsIDgzLCA1NSwgNTYsIDEyOCwgCi0gICAgODYsIDgzLCA1NSwgNTUsIDEyOCwgODYsIDgzLCA1NSwgNTQsIDEyOCwgODYsIDgzLCA1NSwgNTMsIDEyOCwgODYsIDgzLCAKLSAgICA1NSwgNTIsIDEyOCwgODYsIDgzLCA1NSwgNTEsIDEyOCwgODYsIDgzLCA1NSwgNTAsIDEyOCwgODYsIDgzLCA1NSwgNDksIAotICAgIDEyOCwgODYsIDgzLCA1NSwgNDgsIDEyOCwgODYsIDgzLCA1NSwgMTI4LCA4NiwgODMsIDU0LCA1NywgMTI4LCA4NiwgODMsIAotICAgIDU0LCA1NiwgMTI4LCA4NiwgODMsIDU0LCA1NSwgMTI4LCA4NiwgODMsIDU0LCA1NCwgMTI4LCA4NiwgODMsIDU0LCA1MywgCi0gICAgMTI4LCA4NiwgODMsIDU0LCA1MiwgMTI4LCA4NiwgODMsIDU0LCA1MSwgMTI4LCA4NiwgODMsIDU0LCA1MCwgMTI4LCA4NiwgCi0gICAgODMsIDU0LCA0OSwgMTI4LCA4NiwgODMsIDU0LCA0OCwgMTI4LCA4NiwgODMsIDU0LCAxMjgsIDg2LCA4MywgNTMsIDU3LCAKLSAgICAxMjgsIDg2LCA4MywgNTMsIDU2LCAxMjgsIDg2LCA4MywgNTMsIDU1LCAxMjgsIDg2LCA4MywgNTMsIDU0LCAxMjgsIDg2LCAKLSAgICA4MywgNTMsIDUzLCAxMjgsIDg2LCA4MywgNTMsIDUyLCAxMjgsIDg2LCA4MywgNTMsIDUxLCAxMjgsIDg2LCA4MywgNTMsIAotICAgIDUwLCAxMjgsIDg2LCA4MywgNTMsIDQ5LCAxMjgsIDg2LCA4MywgNTMsIDQ4LCAxMjgsIDg2LCA4MywgNTMsIDEyOCwgODYsIAotICAgIDgzLCA1MiwgNTcsIDEyOCwgODYsIDgzLCA1MiwgNTYsIDEyOCwgODYsIDgzLCA1MiwgNTUsIDEyOCwgODYsIDgzLCA1MiwgCi0gICAgNTQsIDEyOCwgODYsIDgzLCA1MiwgNTMsIDEyOCwgODYsIDgzLCA1MiwgNTIsIDEyOCwgODYsIDgzLCA1MiwgNTEsIDEyOCwgCi0gICAgODYsIDgzLCA1MiwgNTAsIDEyOCwgODYsIDgzLCA1MiwgNDksIDEyOCwgODYsIDgzLCA1MiwgNDgsIDEyOCwgODYsIDgzLCAKLSAgICA1MiwgMTI4LCA4NiwgODMsIDUxLCA1NywgMTI4LCA4NiwgODMsIDUxLCA1NiwgMTI4LCA4NiwgODMsIDUxLCA1NSwgMTI4LCAKLSAgICA4NiwgODMsIDUxLCA1NCwgMTI4LCA4NiwgODMsIDUxLCA1MywgMTI4LCA4NiwgODMsIDUxLCA1MiwgMTI4LCA4NiwgODMsIAotICAgIDUxLCA1MSwgMTI4LCA4NiwgODMsIDUxLCA1MCwgMTI4LCA4NiwgODMsIDUxLCA0OSwgMTI4LCA4NiwgODMsIDUxLCA0OCwgCi0gICAgMTI4LCA4NiwgODMsIDUxLCAxMjgsIDg2LCA4MywgNTAsIDU3LCAxMjgsIDg2LCA4MywgNTAsIDU2LCAxMjgsIDg2LCA4MywgCi0gICAgNTAsIDU1LCAxMjgsIDg2LCA4MywgNTAsIDU0LCAxMjgsIDg2LCA4MywgNTAsIDUzLCA1NCwgMTI4LCA4NiwgODMsIDUwLCAKLSAgICA1MywgNTMsIDEyOCwgODYsIDgzLCA1MCwgNTMsIDUyLCAxMjgsIDg2LCA4MywgNTAsIDUzLCA1MSwgMTI4LCA4NiwgODMsIAotICAgIDUwLCA1MywgNTAsIDEyOCwgODYsIDgzLCA1MCwgNTMsIDQ5LCAxMjgsIDg2LCA4MywgNTAsIDUzLCA0OCwgMTI4LCA4NiwgCi0gICAgODMsIDUwLCA1MywgMTI4LCA4NiwgODMsIDUwLCA1MiwgNTcsIDEyOCwgODYsIDgzLCA1MCwgNTIsIDU2LCAxMjgsIDg2LCAKLSAgICA4MywgNTAsIDUyLCA1NSwgMTI4LCA4NiwgODMsIDUwLCA1MiwgNTQsIDEyOCwgODYsIDgzLCA1MCwgNTIsIDUzLCAxMjgsIAotICAgIDg2LCA4MywgNTAsIDUyLCA1MiwgMTI4LCA4NiwgODMsIDUwLCA1MiwgNTEsIDEyOCwgODYsIDgzLCA1MCwgNTIsIDUwLCAKLSAgICAxMjgsIDg2LCA4MywgNTAsIDUyLCA0OSwgMTI4LCA4NiwgODMsIDUwLCA1MiwgNDgsIDEyOCwgODYsIDgzLCA1MCwgNTIsIAotICAgIDEyOCwgODYsIDgzLCA1MCwgNTEsIDU3LCAxMjgsIDg2LCA4MywgNTAsIDUxLCA1NiwgMTI4LCA4NiwgODMsIDUwLCA1MSwgCi0gICAgNTUsIDEyOCwgODYsIDgzLCA1MCwgNTEsIDU0LCAxMjgsIDg2LCA4MywgNTAsIDUxLCA1MywgMTI4LCA4NiwgODMsIDUwLCAKLSAgICA1MSwgNTIsIDEyOCwgODYsIDgzLCA1MCwgNTEsIDUxLCAxMjgsIDg2LCA4MywgNTAsIDUxLCA1MCwgMTI4LCA4NiwgODMsIAotICAgIDUwLCA1MSwgNDksIDEyOCwgODYsIDgzLCA1MCwgNTEsIDQ4LCAxMjgsIDg2LCA4MywgNTAsIDUxLCAxMjgsIDg2LCA4MywgCi0gICAgNTAsIDUwLCA1NywgMTI4LCA4NiwgODMsIDUwLCA1MCwgNTYsIDEyOCwgODYsIDgzLCA1MCwgNTAsIDU1LCAxMjgsIDg2LCAKLSAgICA4MywgNTAsIDUwLCA1NCwgMTI4LCA4NiwgODMsIDUwLCA1MCwgNTMsIDEyOCwgODYsIDgzLCA1MCwgNTAsIDUyLCAxMjgsIAotICAgIDg2LCA4MywgNTAsIDUwLCA1MSwgMTI4LCA4NiwgODMsIDUwLCA1MCwgNTAsIDEyOCwgODYsIDgzLCA1MCwgNTAsIDQ5LCAKLSAgICAxMjgsIDg2LCA4MywgNTAsIDUwLCA0OCwgMTI4LCA4NiwgODMsIDUwLCA1MCwgMTI4LCA4NiwgODMsIDUwLCA0OSwgNTcsIAotICAgIDEyOCwgODYsIDgzLCA1MCwgNDksIDU2LCAxMjgsIDg2LCA4MywgNTAsIDQ5LCA1NSwgMTI4LCA4NiwgODMsIDUwLCA0OSwgCi0gICAgNTQsIDEyOCwgODYsIDgzLCA1MCwgNDksIDUzLCAxMjgsIDg2LCA4MywgNTAsIDQ5LCA1MiwgMTI4LCA4NiwgODMsIDUwLCAKLSAgICA0OSwgNTEsIDEyOCwgODYsIDgzLCA1MCwgNDksIDUwLCAxMjgsIDg2LCA4MywgNTAsIDQ5LCA0OSwgMTI4LCA4NiwgODMsIAotICAgIDUwLCA0OSwgNDgsIDEyOCwgODYsIDgzLCA1MCwgNDksIDEyOCwgODYsIDgzLCA1MCwgNDgsIDU3LCAxMjgsIDg2LCA4MywgCi0gICAgNTAsIDQ4LCA1NiwgMTI4LCA4NiwgODMsIDUwLCA0OCwgNTUsIDEyOCwgODYsIDgzLCA1MCwgNDgsIDU0LCAxMjgsIDg2LCAKLSAgICA4MywgNTAsIDQ4LCA1MywgMTI4LCA4NiwgODMsIDUwLCA0OCwgNTIsIDEyOCwgODYsIDgzLCA1MCwgNDgsIDUxLCAxMjgsIAotICAgIDg2LCA4MywgNTAsIDQ4LCA1MCwgMTI4LCA4NiwgODMsIDUwLCA0OCwgNDksIDEyOCwgODYsIDgzLCA1MCwgNDgsIDQ4LCAKLSAgICAxMjgsIDg2LCA4MywgNTAsIDQ4LCAxMjgsIDg2LCA4MywgNTAsIDEyOCwgODYsIDgzLCA0OSwgNTcsIDU3LCAxMjgsIDg2LCAKLSAgICA4MywgNDksIDU3LCA1NiwgMTI4LCA4NiwgODMsIDQ5LCA1NywgNTUsIDEyOCwgODYsIDgzLCA0OSwgNTcsIDU0LCAxMjgsIAotICAgIDg2LCA4MywgNDksIDU3LCA1MywgMTI4LCA4NiwgODMsIDQ5LCA1NywgNTIsIDEyOCwgODYsIDgzLCA0OSwgNTcsIDUxLCAKLSAgICAxMjgsIDg2LCA4MywgNDksIDU3LCA1MCwgMTI4LCA4NiwgODMsIDQ5LCA1NywgNDksIDEyOCwgODYsIDgzLCA0OSwgNTcsIAotICAgIDQ4LCAxMjgsIDg2LCA4MywgNDksIDU3LCAxMjgsIDg2LCA4MywgNDksIDU2LCA1NywgMTI4LCA4NiwgODMsIDQ5LCA1NiwgCi0gICAgNTYsIDEyOCwgODYsIDgzLCA0OSwgNTYsIDU1LCAxMjgsIDg2LCA4MywgNDksIDU2LCA1NCwgMTI4LCA4NiwgODMsIDQ5LCAKLSAgICA1NiwgNTMsIDEyOCwgODYsIDgzLCA0OSwgNTYsIDUyLCAxMjgsIDg2LCA4MywgNDksIDU2LCA1MSwgMTI4LCA4NiwgODMsIAotICAgIDQ5LCA1NiwgNTAsIDEyOCwgODYsIDgzLCA0OSwgNTYsIDQ5LCAxMjgsIDg2LCA4MywgNDksIDU2LCA0OCwgMTI4LCA4NiwgCi0gICAgODMsIDQ5LCA1NiwgMTI4LCA4NiwgODMsIDQ5LCA1NSwgNTcsIDEyOCwgODYsIDgzLCA0OSwgNTUsIDU2LCAxMjgsIDg2LCAKLSAgICA4MywgNDksIDU1LCA1NSwgMTI4LCA4NiwgODMsIDQ5LCA1NSwgNTQsIDEyOCwgODYsIDgzLCA0OSwgNTUsIDUzLCAxMjgsIAotICAgIDg2LCA4MywgNDksIDU1LCA1MiwgMTI4LCA4NiwgODMsIDQ5LCA1NSwgNTEsIDEyOCwgODYsIDgzLCA0OSwgNTUsIDUwLCAKLSAgICAxMjgsIDg2LCA4MywgNDksIDU1LCA0OSwgMTI4LCA4NiwgODMsIDQ5LCA1NSwgNDgsIDEyOCwgODYsIDgzLCA0OSwgNTUsIAotICAgIDEyOCwgODYsIDgzLCA0OSwgNTQsIDU3LCAxMjgsIDg2LCA4MywgNDksIDU0LCA1NiwgMTI4LCA4NiwgODMsIDQ5LCA1NCwgCi0gICAgNTUsIDEyOCwgODYsIDgzLCA0OSwgNTQsIDU0LCAxMjgsIDg2LCA4MywgNDksIDU0LCA1MywgMTI4LCA4NiwgODMsIDQ5LCAKLSAgICA1NCwgNTIsIDEyOCwgODYsIDgzLCA0OSwgNTQsIDUxLCAxMjgsIDg2LCA4MywgNDksIDU0LCA1MCwgMTI4LCA4NiwgODMsIAotICAgIDQ5LCA1NCwgNDksIDEyOCwgODYsIDgzLCA0OSwgNTQsIDQ4LCAxMjgsIDg2LCA4MywgNDksIDU0LCAxMjgsIDg2LCA4MywgCi0gICAgNDksIDUzLCA1NywgMTI4LCA4NiwgODMsIDQ5LCA1MywgNTYsIDEyOCwgODYsIDgzLCA0OSwgNTMsIDU1LCAxMjgsIDg2LCAKLSAgICA4MywgNDksIDUzLCA1NCwgMTI4LCA4NiwgODMsIDQ5LCA1MywgNTMsIDEyOCwgODYsIDgzLCA0OSwgNTMsIDUyLCAxMjgsIAotICAgIDg2LCA4MywgNDksIDUzLCA1MSwgMTI4LCA4NiwgODMsIDQ5LCA1MywgNTAsIDEyOCwgODYsIDgzLCA0OSwgNTMsIDQ5LCAKLSAgICAxMjgsIDg2LCA4MywgNDksIDUzLCA0OCwgMTI4LCA4NiwgODMsIDQ5LCA1MywgMTI4LCA4NiwgODMsIDQ5LCA1MiwgNTcsIAotICAgIDEyOCwgODYsIDgzLCA0OSwgNTIsIDU2LCAxMjgsIDg2LCA4MywgNDksIDUyLCA1NSwgMTI4LCA4NiwgODMsIDQ5LCA1MiwgCi0gICAgNTQsIDEyOCwgODYsIDgzLCA0OSwgNTIsIDUzLCAxMjgsIDg2LCA4MywgNDksIDUyLCA1MiwgMTI4LCA4NiwgODMsIDQ5LCAKLSAgICA1MiwgNTEsIDEyOCwgODYsIDgzLCA0OSwgNTIsIDUwLCAxMjgsIDg2LCA4MywgNDksIDUyLCA0OSwgMTI4LCA4NiwgODMsIAotICAgIDQ5LCA1MiwgNDgsIDEyOCwgODYsIDgzLCA0OSwgNTIsIDEyOCwgODYsIDgzLCA0OSwgNTEsIDU3LCAxMjgsIDg2LCA4MywgCi0gICAgNDksIDUxLCA1NiwgMTI4LCA4NiwgODMsIDQ5LCA1MSwgNTUsIDEyOCwgODYsIDgzLCA0OSwgNTEsIDU0LCAxMjgsIDg2LCAKLSAgICA4MywgNDksIDUxLCA1MywgMTI4LCA4NiwgODMsIDQ5LCA1MSwgNTIsIDEyOCwgODYsIDgzLCA0OSwgNTEsIDUxLCAxMjgsIAotICAgIDg2LCA4MywgNDksIDUxLCA1MCwgMTI4LCA4NiwgODMsIDQ5LCA1MSwgNDksIDEyOCwgODYsIDgzLCA0OSwgNTEsIDQ4LCAKLSAgICAxMjgsIDg2LCA4MywgNDksIDUxLCAxMjgsIDg2LCA4MywgNDksIDUwLCA1NywgMTI4LCA4NiwgODMsIDQ5LCA1MCwgNTYsIAotICAgIDEyOCwgODYsIDgzLCA0OSwgNTAsIDU1LCAxMjgsIDg2LCA4MywgNDksIDUwLCA1NCwgMTI4LCA4NiwgODMsIDQ5LCA1MCwgCi0gICAgNTMsIDEyOCwgODYsIDgzLCA0OSwgNTAsIDUyLCAxMjgsIDg2LCA4MywgNDksIDUwLCA1MSwgMTI4LCA4NiwgODMsIDQ5LCAKLSAgICA1MCwgNTAsIDEyOCwgODYsIDgzLCA0OSwgNTAsIDQ5LCAxMjgsIDg2LCA4MywgNDksIDUwLCA0OCwgMTI4LCA4NiwgODMsIAotICAgIDQ5LCA1MCwgMTI4LCA4NiwgODMsIDQ5LCA0OSwgNTcsIDEyOCwgODYsIDgzLCA0OSwgNDksIDU2LCAxMjgsIDg2LCA4MywgCi0gICAgNDksIDQ5LCA1NSwgMTI4LCA4NiwgODMsIDQ5LCA0OSwgNTQsIDEyOCwgODYsIDgzLCA0OSwgNDksIDUzLCAxMjgsIDg2LCAKLSAgICA4MywgNDksIDQ5LCA1MiwgMTI4LCA4NiwgODMsIDQ5LCA0OSwgNTEsIDEyOCwgODYsIDgzLCA0OSwgNDksIDUwLCAxMjgsIAotICAgIDg2LCA4MywgNDksIDQ5LCA0OSwgMTI4LCA4NiwgODMsIDQ5LCA0OSwgNDgsIDEyOCwgODYsIDgzLCA0OSwgNDksIDEyOCwgCi0gICAgODYsIDgzLCA0OSwgNDgsIDU3LCAxMjgsIDg2LCA4MywgNDksIDQ4LCA1NiwgMTI4LCA4NiwgODMsIDQ5LCA0OCwgNTUsIAotICAgIDEyOCwgODYsIDgzLCA0OSwgNDgsIDU0LCAxMjgsIDg2LCA4MywgNDksIDQ4LCA1MywgMTI4LCA4NiwgODMsIDQ5LCA0OCwgCi0gICAgNTIsIDEyOCwgODYsIDgzLCA0OSwgNDgsIDUxLCAxMjgsIDg2LCA4MywgNDksIDQ4LCA1MCwgMTI4LCA4NiwgODMsIDQ5LCAKLSAgICA0OCwgNDksIDEyOCwgODYsIDgzLCA0OSwgNDgsIDQ4LCAxMjgsIDg2LCA4MywgNDksIDQ4LCAxMjgsIDg2LCA4MywgNDksIAotICAgIDEyOCwgODYsIDgzLCAxMjgsIDg2LCA4MiwgNjUsIDY3LCA3MiwgODksIDEyOCwgODYsIDc5LCA4OCwgMTI4LCA4NiwgNzksIAotICAgIDg3LCA2OSwgNzYsIDQ1LCA2NywgNjUsIDgyLCA4MiwgNzMsIDY5LCAyMTAsIDg2LCA3OSwgODcsIDEyOCwgODYsIDc5LCA4NSwgCi0gICAgMTI4LCA4NiwgNzksIDg0LCAxMjgsIDg2LCA3OSwgODAsIDEyOCwgODYsIDc5LCA3OSwgMTI4LCA4NiwgNzksIDc3LCAxMjgsIAotICAgIDg2LCA3OSwgNzYsIDg1LCA3NywgMTk3LCA4NiwgNzksIDc2LCA4NCwgNjUsIDcxLCAxOTcsIDg2LCA3OSwgNzYsIDY3LCA2NSwgCi0gICAgNzgsIDc5LCAxMjgsIDg2LCA3OSwgNzMsIDE5NiwgODYsIDc5LCA3MywgNjcsIDczLCA3OCwgNzEsIDEyOCwgODYsIDc5LCAKLSAgICA3MywgNjcsIDY5LCA3NiwgNjksIDgzLCAyMTEsIDg2LCA3OSwgNzMsIDY3LCA2OSwgMTk2LCA4NiwgNzksIDY3LCA2NSwgNzYsIAotICAgIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODYsIDc5LCA2NywgNjUsIDIwNCwgODYsIDc5LCAxMjgsIDg2LCA3MywgCisgICAgODAsIDEyOCwgODYsIDg5LCAxMjgsIDg2LCA4NywgNzQsIDEyOCwgODYsIDg3LCA2NSwgMTI4LCA4NiwgODUsIDg4LCAxMjgsIAorICAgIDg2LCA4NSwgODUsIDEyOCwgODYsIDg1LCA4NCwgMTI4LCA4NiwgODUsIDgyLCA4OCwgMTI4LCA4NiwgODUsIDgyLCAxMjgsIAorICAgIDg2LCA4NSwgODAsIDEyOCwgODYsIDg1LCA3NiwgNzEsIDY1LCAyMTAsIDg2LCA4NSwgNjksIDgxLCAxMjgsIDg2LCA4NCwgCisgICAgODMsIDEyOCwgODYsIDg0LCAxMjgsIDg2LCA4MywgNTcsIDU3LCAxMjgsIDg2LCA4MywgNTcsIDU2LCAxMjgsIDg2LCA4MywgCisgICAgNTcsIDU1LCAxMjgsIDg2LCA4MywgNTcsIDU0LCAxMjgsIDg2LCA4MywgNTcsIDUzLCAxMjgsIDg2LCA4MywgNTcsIDUyLCAKKyAgICAxMjgsIDg2LCA4MywgNTcsIDUxLCAxMjgsIDg2LCA4MywgNTcsIDUwLCAxMjgsIDg2LCA4MywgNTcsIDQ5LCAxMjgsIDg2LCAKKyAgICA4MywgNTcsIDQ4LCAxMjgsIDg2LCA4MywgNTcsIDEyOCwgODYsIDgzLCA1NiwgNTcsIDEyOCwgODYsIDgzLCA1NiwgNTYsIAorICAgIDEyOCwgODYsIDgzLCA1NiwgNTUsIDEyOCwgODYsIDgzLCA1NiwgNTQsIDEyOCwgODYsIDgzLCA1NiwgNTMsIDEyOCwgODYsIAorICAgIDgzLCA1NiwgNTIsIDEyOCwgODYsIDgzLCA1NiwgNTEsIDEyOCwgODYsIDgzLCA1NiwgNTAsIDEyOCwgODYsIDgzLCA1NiwgCisgICAgNDksIDEyOCwgODYsIDgzLCA1NiwgNDgsIDEyOCwgODYsIDgzLCA1NiwgMTI4LCA4NiwgODMsIDU1LCA1NywgMTI4LCA4NiwgCisgICAgODMsIDU1LCA1NiwgMTI4LCA4NiwgODMsIDU1LCA1NSwgMTI4LCA4NiwgODMsIDU1LCA1NCwgMTI4LCA4NiwgODMsIDU1LCAKKyAgICA1MywgMTI4LCA4NiwgODMsIDU1LCA1MiwgMTI4LCA4NiwgODMsIDU1LCA1MSwgMTI4LCA4NiwgODMsIDU1LCA1MCwgMTI4LCAKKyAgICA4NiwgODMsIDU1LCA0OSwgMTI4LCA4NiwgODMsIDU1LCA0OCwgMTI4LCA4NiwgODMsIDU1LCAxMjgsIDg2LCA4MywgNTQsIAorICAgIDU3LCAxMjgsIDg2LCA4MywgNTQsIDU2LCAxMjgsIDg2LCA4MywgNTQsIDU1LCAxMjgsIDg2LCA4MywgNTQsIDU0LCAxMjgsIAorICAgIDg2LCA4MywgNTQsIDUzLCAxMjgsIDg2LCA4MywgNTQsIDUyLCAxMjgsIDg2LCA4MywgNTQsIDUxLCAxMjgsIDg2LCA4MywgCisgICAgNTQsIDUwLCAxMjgsIDg2LCA4MywgNTQsIDQ5LCAxMjgsIDg2LCA4MywgNTQsIDQ4LCAxMjgsIDg2LCA4MywgNTQsIDEyOCwgCisgICAgODYsIDgzLCA1MywgNTcsIDEyOCwgODYsIDgzLCA1MywgNTYsIDEyOCwgODYsIDgzLCA1MywgNTUsIDEyOCwgODYsIDgzLCAKKyAgICA1MywgNTQsIDEyOCwgODYsIDgzLCA1MywgNTMsIDEyOCwgODYsIDgzLCA1MywgNTIsIDEyOCwgODYsIDgzLCA1MywgNTEsIAorICAgIDEyOCwgODYsIDgzLCA1MywgNTAsIDEyOCwgODYsIDgzLCA1MywgNDksIDEyOCwgODYsIDgzLCA1MywgNDgsIDEyOCwgODYsIAorICAgIDgzLCA1MywgMTI4LCA4NiwgODMsIDUyLCA1NywgMTI4LCA4NiwgODMsIDUyLCA1NiwgMTI4LCA4NiwgODMsIDUyLCA1NSwgCisgICAgMTI4LCA4NiwgODMsIDUyLCA1NCwgMTI4LCA4NiwgODMsIDUyLCA1MywgMTI4LCA4NiwgODMsIDUyLCA1MiwgMTI4LCA4NiwgCisgICAgODMsIDUyLCA1MSwgMTI4LCA4NiwgODMsIDUyLCA1MCwgMTI4LCA4NiwgODMsIDUyLCA0OSwgMTI4LCA4NiwgODMsIDUyLCAKKyAgICA0OCwgMTI4LCA4NiwgODMsIDUyLCAxMjgsIDg2LCA4MywgNTEsIDU3LCAxMjgsIDg2LCA4MywgNTEsIDU2LCAxMjgsIDg2LCAKKyAgICA4MywgNTEsIDU1LCAxMjgsIDg2LCA4MywgNTEsIDU0LCAxMjgsIDg2LCA4MywgNTEsIDUzLCAxMjgsIDg2LCA4MywgNTEsIAorICAgIDUyLCAxMjgsIDg2LCA4MywgNTEsIDUxLCAxMjgsIDg2LCA4MywgNTEsIDUwLCAxMjgsIDg2LCA4MywgNTEsIDQ5LCAxMjgsIAorICAgIDg2LCA4MywgNTEsIDQ4LCAxMjgsIDg2LCA4MywgNTEsIDEyOCwgODYsIDgzLCA1MCwgNTcsIDEyOCwgODYsIDgzLCA1MCwgCisgICAgNTYsIDEyOCwgODYsIDgzLCA1MCwgNTUsIDEyOCwgODYsIDgzLCA1MCwgNTQsIDEyOCwgODYsIDgzLCA1MCwgNTMsIDU0LCAKKyAgICAxMjgsIDg2LCA4MywgNTAsIDUzLCA1MywgMTI4LCA4NiwgODMsIDUwLCA1MywgNTIsIDEyOCwgODYsIDgzLCA1MCwgNTMsIAorICAgIDUxLCAxMjgsIDg2LCA4MywgNTAsIDUzLCA1MCwgMTI4LCA4NiwgODMsIDUwLCA1MywgNDksIDEyOCwgODYsIDgzLCA1MCwgCisgICAgNTMsIDQ4LCAxMjgsIDg2LCA4MywgNTAsIDUzLCAxMjgsIDg2LCA4MywgNTAsIDUyLCA1NywgMTI4LCA4NiwgODMsIDUwLCAKKyAgICA1MiwgNTYsIDEyOCwgODYsIDgzLCA1MCwgNTIsIDU1LCAxMjgsIDg2LCA4MywgNTAsIDUyLCA1NCwgMTI4LCA4NiwgODMsIAorICAgIDUwLCA1MiwgNTMsIDEyOCwgODYsIDgzLCA1MCwgNTIsIDUyLCAxMjgsIDg2LCA4MywgNTAsIDUyLCA1MSwgMTI4LCA4NiwgCisgICAgODMsIDUwLCA1MiwgNTAsIDEyOCwgODYsIDgzLCA1MCwgNTIsIDQ5LCAxMjgsIDg2LCA4MywgNTAsIDUyLCA0OCwgMTI4LCAKKyAgICA4NiwgODMsIDUwLCA1MiwgMTI4LCA4NiwgODMsIDUwLCA1MSwgNTcsIDEyOCwgODYsIDgzLCA1MCwgNTEsIDU2LCAxMjgsIAorICAgIDg2LCA4MywgNTAsIDUxLCA1NSwgMTI4LCA4NiwgODMsIDUwLCA1MSwgNTQsIDEyOCwgODYsIDgzLCA1MCwgNTEsIDUzLCAKKyAgICAxMjgsIDg2LCA4MywgNTAsIDUxLCA1MiwgMTI4LCA4NiwgODMsIDUwLCA1MSwgNTEsIDEyOCwgODYsIDgzLCA1MCwgNTEsIAorICAgIDUwLCAxMjgsIDg2LCA4MywgNTAsIDUxLCA0OSwgMTI4LCA4NiwgODMsIDUwLCA1MSwgNDgsIDEyOCwgODYsIDgzLCA1MCwgCisgICAgNTEsIDEyOCwgODYsIDgzLCA1MCwgNTAsIDU3LCAxMjgsIDg2LCA4MywgNTAsIDUwLCA1NiwgMTI4LCA4NiwgODMsIDUwLCAKKyAgICA1MCwgNTUsIDEyOCwgODYsIDgzLCA1MCwgNTAsIDU0LCAxMjgsIDg2LCA4MywgNTAsIDUwLCA1MywgMTI4LCA4NiwgODMsIAorICAgIDUwLCA1MCwgNTIsIDEyOCwgODYsIDgzLCA1MCwgNTAsIDUxLCAxMjgsIDg2LCA4MywgNTAsIDUwLCA1MCwgMTI4LCA4NiwgCisgICAgODMsIDUwLCA1MCwgNDksIDEyOCwgODYsIDgzLCA1MCwgNTAsIDQ4LCAxMjgsIDg2LCA4MywgNTAsIDUwLCAxMjgsIDg2LCAKKyAgICA4MywgNTAsIDQ5LCA1NywgMTI4LCA4NiwgODMsIDUwLCA0OSwgNTYsIDEyOCwgODYsIDgzLCA1MCwgNDksIDU1LCAxMjgsIAorICAgIDg2LCA4MywgNTAsIDQ5LCA1NCwgMTI4LCA4NiwgODMsIDUwLCA0OSwgNTMsIDEyOCwgODYsIDgzLCA1MCwgNDksIDUyLCAKKyAgICAxMjgsIDg2LCA4MywgNTAsIDQ5LCA1MSwgMTI4LCA4NiwgODMsIDUwLCA0OSwgNTAsIDEyOCwgODYsIDgzLCA1MCwgNDksIAorICAgIDQ5LCAxMjgsIDg2LCA4MywgNTAsIDQ5LCA0OCwgMTI4LCA4NiwgODMsIDUwLCA0OSwgMTI4LCA4NiwgODMsIDUwLCA0OCwgCisgICAgNTcsIDEyOCwgODYsIDgzLCA1MCwgNDgsIDU2LCAxMjgsIDg2LCA4MywgNTAsIDQ4LCA1NSwgMTI4LCA4NiwgODMsIDUwLCAKKyAgICA0OCwgNTQsIDEyOCwgODYsIDgzLCA1MCwgNDgsIDUzLCAxMjgsIDg2LCA4MywgNTAsIDQ4LCA1MiwgMTI4LCA4NiwgODMsIAorICAgIDUwLCA0OCwgNTEsIDEyOCwgODYsIDgzLCA1MCwgNDgsIDUwLCAxMjgsIDg2LCA4MywgNTAsIDQ4LCA0OSwgMTI4LCA4NiwgCisgICAgODMsIDUwLCA0OCwgNDgsIDEyOCwgODYsIDgzLCA1MCwgNDgsIDEyOCwgODYsIDgzLCA1MCwgMTI4LCA4NiwgODMsIDQ5LCAKKyAgICA1NywgNTcsIDEyOCwgODYsIDgzLCA0OSwgNTcsIDU2LCAxMjgsIDg2LCA4MywgNDksIDU3LCA1NSwgMTI4LCA4NiwgODMsIAorICAgIDQ5LCA1NywgNTQsIDEyOCwgODYsIDgzLCA0OSwgNTcsIDUzLCAxMjgsIDg2LCA4MywgNDksIDU3LCA1MiwgMTI4LCA4NiwgCisgICAgODMsIDQ5LCA1NywgNTEsIDEyOCwgODYsIDgzLCA0OSwgNTcsIDUwLCAxMjgsIDg2LCA4MywgNDksIDU3LCA0OSwgMTI4LCAKKyAgICA4NiwgODMsIDQ5LCA1NywgNDgsIDEyOCwgODYsIDgzLCA0OSwgNTcsIDEyOCwgODYsIDgzLCA0OSwgNTYsIDU3LCAxMjgsIAorICAgIDg2LCA4MywgNDksIDU2LCA1NiwgMTI4LCA4NiwgODMsIDQ5LCA1NiwgNTUsIDEyOCwgODYsIDgzLCA0OSwgNTYsIDU0LCAKKyAgICAxMjgsIDg2LCA4MywgNDksIDU2LCA1MywgMTI4LCA4NiwgODMsIDQ5LCA1NiwgNTIsIDEyOCwgODYsIDgzLCA0OSwgNTYsIAorICAgIDUxLCAxMjgsIDg2LCA4MywgNDksIDU2LCA1MCwgMTI4LCA4NiwgODMsIDQ5LCA1NiwgNDksIDEyOCwgODYsIDgzLCA0OSwgCisgICAgNTYsIDQ4LCAxMjgsIDg2LCA4MywgNDksIDU2LCAxMjgsIDg2LCA4MywgNDksIDU1LCA1NywgMTI4LCA4NiwgODMsIDQ5LCAKKyAgICA1NSwgNTYsIDEyOCwgODYsIDgzLCA0OSwgNTUsIDU1LCAxMjgsIDg2LCA4MywgNDksIDU1LCA1NCwgMTI4LCA4NiwgODMsIAorICAgIDQ5LCA1NSwgNTMsIDEyOCwgODYsIDgzLCA0OSwgNTUsIDUyLCAxMjgsIDg2LCA4MywgNDksIDU1LCA1MSwgMTI4LCA4NiwgCisgICAgODMsIDQ5LCA1NSwgNTAsIDEyOCwgODYsIDgzLCA0OSwgNTUsIDQ5LCAxMjgsIDg2LCA4MywgNDksIDU1LCA0OCwgMTI4LCAKKyAgICA4NiwgODMsIDQ5LCA1NSwgMTI4LCA4NiwgODMsIDQ5LCA1NCwgNTcsIDEyOCwgODYsIDgzLCA0OSwgNTQsIDU2LCAxMjgsIAorICAgIDg2LCA4MywgNDksIDU0LCA1NSwgMTI4LCA4NiwgODMsIDQ5LCA1NCwgNTQsIDEyOCwgODYsIDgzLCA0OSwgNTQsIDUzLCAKKyAgICAxMjgsIDg2LCA4MywgNDksIDU0LCA1MiwgMTI4LCA4NiwgODMsIDQ5LCA1NCwgNTEsIDEyOCwgODYsIDgzLCA0OSwgNTQsIAorICAgIDUwLCAxMjgsIDg2LCA4MywgNDksIDU0LCA0OSwgMTI4LCA4NiwgODMsIDQ5LCA1NCwgNDgsIDEyOCwgODYsIDgzLCA0OSwgCisgICAgNTQsIDEyOCwgODYsIDgzLCA0OSwgNTMsIDU3LCAxMjgsIDg2LCA4MywgNDksIDUzLCA1NiwgMTI4LCA4NiwgODMsIDQ5LCAKKyAgICA1MywgNTUsIDEyOCwgODYsIDgzLCA0OSwgNTMsIDU0LCAxMjgsIDg2LCA4MywgNDksIDUzLCA1MywgMTI4LCA4NiwgODMsIAorICAgIDQ5LCA1MywgNTIsIDEyOCwgODYsIDgzLCA0OSwgNTMsIDUxLCAxMjgsIDg2LCA4MywgNDksIDUzLCA1MCwgMTI4LCA4NiwgCisgICAgODMsIDQ5LCA1MywgNDksIDEyOCwgODYsIDgzLCA0OSwgNTMsIDQ4LCAxMjgsIDg2LCA4MywgNDksIDUzLCAxMjgsIDg2LCAKKyAgICA4MywgNDksIDUyLCA1NywgMTI4LCA4NiwgODMsIDQ5LCA1MiwgNTYsIDEyOCwgODYsIDgzLCA0OSwgNTIsIDU1LCAxMjgsIAorICAgIDg2LCA4MywgNDksIDUyLCA1NCwgMTI4LCA4NiwgODMsIDQ5LCA1MiwgNTMsIDEyOCwgODYsIDgzLCA0OSwgNTIsIDUyLCAKKyAgICAxMjgsIDg2LCA4MywgNDksIDUyLCA1MSwgMTI4LCA4NiwgODMsIDQ5LCA1MiwgNTAsIDEyOCwgODYsIDgzLCA0OSwgNTIsIAorICAgIDQ5LCAxMjgsIDg2LCA4MywgNDksIDUyLCA0OCwgMTI4LCA4NiwgODMsIDQ5LCA1MiwgMTI4LCA4NiwgODMsIDQ5LCA1MSwgCisgICAgNTcsIDEyOCwgODYsIDgzLCA0OSwgNTEsIDU2LCAxMjgsIDg2LCA4MywgNDksIDUxLCA1NSwgMTI4LCA4NiwgODMsIDQ5LCAKKyAgICA1MSwgNTQsIDEyOCwgODYsIDgzLCA0OSwgNTEsIDUzLCAxMjgsIDg2LCA4MywgNDksIDUxLCA1MiwgMTI4LCA4NiwgODMsIAorICAgIDQ5LCA1MSwgNTEsIDEyOCwgODYsIDgzLCA0OSwgNTEsIDUwLCAxMjgsIDg2LCA4MywgNDksIDUxLCA0OSwgMTI4LCA4NiwgCisgICAgODMsIDQ5LCA1MSwgNDgsIDEyOCwgODYsIDgzLCA0OSwgNTEsIDEyOCwgODYsIDgzLCA0OSwgNTAsIDU3LCAxMjgsIDg2LCAKKyAgICA4MywgNDksIDUwLCA1NiwgMTI4LCA4NiwgODMsIDQ5LCA1MCwgNTUsIDEyOCwgODYsIDgzLCA0OSwgNTAsIDU0LCAxMjgsIAorICAgIDg2LCA4MywgNDksIDUwLCA1MywgMTI4LCA4NiwgODMsIDQ5LCA1MCwgNTIsIDEyOCwgODYsIDgzLCA0OSwgNTAsIDUxLCAKKyAgICAxMjgsIDg2LCA4MywgNDksIDUwLCA1MCwgMTI4LCA4NiwgODMsIDQ5LCA1MCwgNDksIDEyOCwgODYsIDgzLCA0OSwgNTAsIAorICAgIDQ4LCAxMjgsIDg2LCA4MywgNDksIDUwLCAxMjgsIDg2LCA4MywgNDksIDQ5LCA1NywgMTI4LCA4NiwgODMsIDQ5LCA0OSwgCisgICAgNTYsIDEyOCwgODYsIDgzLCA0OSwgNDksIDU1LCAxMjgsIDg2LCA4MywgNDksIDQ5LCA1NCwgMTI4LCA4NiwgODMsIDQ5LCAKKyAgICA0OSwgNTMsIDEyOCwgODYsIDgzLCA0OSwgNDksIDUyLCAxMjgsIDg2LCA4MywgNDksIDQ5LCA1MSwgMTI4LCA4NiwgODMsIAorICAgIDQ5LCA0OSwgNTAsIDEyOCwgODYsIDgzLCA0OSwgNDksIDQ5LCAxMjgsIDg2LCA4MywgNDksIDQ5LCA0OCwgMTI4LCA4NiwgCisgICAgODMsIDQ5LCA0OSwgMTI4LCA4NiwgODMsIDQ5LCA0OCwgNTcsIDEyOCwgODYsIDgzLCA0OSwgNDgsIDU2LCAxMjgsIDg2LCAKKyAgICA4MywgNDksIDQ4LCA1NSwgMTI4LCA4NiwgODMsIDQ5LCA0OCwgNTQsIDEyOCwgODYsIDgzLCA0OSwgNDgsIDUzLCAxMjgsIAorICAgIDg2LCA4MywgNDksIDQ4LCA1MiwgMTI4LCA4NiwgODMsIDQ5LCA0OCwgNTEsIDEyOCwgODYsIDgzLCA0OSwgNDgsIDUwLCAKKyAgICAxMjgsIDg2LCA4MywgNDksIDQ4LCA0OSwgMTI4LCA4NiwgODMsIDQ5LCA0OCwgNDgsIDEyOCwgODYsIDgzLCA0OSwgNDgsIAorICAgIDEyOCwgODYsIDgzLCA0OSwgMTI4LCA4NiwgODMsIDEyOCwgODYsIDgyLCA2NSwgNjcsIDcyLCA4OSwgMTI4LCA4NiwgNzksIAorICAgIDg4LCAxMjgsIDg2LCA3OSwgODcsIDY5LCA3NiwgNDUsIDY3LCA2NSwgODIsIDgyLCA3MywgNjksIDIxMCwgODYsIDc5LCA4NywgCisgICAgMTI4LCA4NiwgNzksIDg1LCAxMjgsIDg2LCA3OSwgODQsIDEyOCwgODYsIDc5LCAyMTEsIDg2LCA3OSwgODAsIDEyOCwgODYsIAorICAgIDc5LCA3OSwgNzMsIDEyOCwgODYsIDc5LCA3OSwgMTI4LCA4NiwgNzksIDc3LCAxMjgsIDg2LCA3OSwgNzYsIDg1LCA3NywgCisgICAgMTk3LCA4NiwgNzksIDc2LCA4NCwgNjUsIDcxLCAxOTcsIDg2LCA3OSwgNzYsIDc2LCA2OSwgODksIDY2LCA2NSwgNzYsIDc2LCAKKyAgICAxMjgsIDg2LCA3OSwgNzYsIDY3LCA2NSwgNzgsIDc5LCAxMjgsIDg2LCA3OSwgNzYsIDY1LCA4MCwgODUsIDIwMywgODYsIAorICAgIDc5LCA3MywgMTk2LCA4NiwgNzksIDczLCA2NywgNzMsIDc4LCA3MSwgMTI4LCA4NiwgNzksIDczLCA2NywgNjksIDc2LCA2OSwgCisgICAgODMsIDIxMSwgODYsIDc5LCA3MywgNjcsIDY5LCAxOTYsIDg2LCA3OSwgNjcsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCAKKyAgICA3OSwgMjA2LCA4NiwgNzksIDY3LCA2NSwgMjA0LCA4NiwgNzksIDEyOCwgODYsIDczLCA4OSwgNzksIDEyOCwgODYsIDczLCAKICAgICA4OCwgMTI4LCA4NiwgNzMsIDg0LCA4MiwgNzMsIDc5LCA3NiwgNDUsIDUwLCAxMjgsIDg2LCA3MywgODQsIDgyLCA3MywgNzksIAogICAgIDc2LCAxMjgsIDg2LCA3MywgODQsIDY1LCA2OSwgNDUsIDUwLCAxMjgsIDg2LCA3MywgODQsIDY1LCA2OSwgMTI4LCA4NiwgCiAgICAgNzMsIDg0LCAxMjgsIDg2LCA3MywgODMsIDczLCA3MSwgNzksIDg0LCA3MiwgNzMsIDE5NSwgODYsIDczLCA4MywgNjUsIDgyLCAKQEAgLTM2MCwxMjMgKzM3OCwxMjcgQEAKICAgICA4MiwgNzEsIDY1LCAxMjgsIDg2LCA3MywgODIsIDY1LCA3NywgNjUsIDEyOCwgODYsIDczLCA4MCwgMTI4LCA4NiwgNzMsIAogICAgIDc5LCA3NiwgNzMsIDc4LCAxMjgsIDg2LCA3MywgNzgsIDY5LCA3MSwgNjUsIDgyLCA0NSwgNTEsIDEyOCwgODYsIDczLCA3OCwgCiAgICAgNjksIDcxLCA2NSwgODIsIDQ1LCA1MCwgMTI4LCA4NiwgNzMsIDc4LCA2OSwgNzEsIDY1LCA4MiwgMTI4LCA4NiwgNzMsIDc4LCAKLSAgICA2OSwgNzEsIDY1LCAyMTAsIDg2LCA3MywgNzgsIDY5LCAxMjgsIDg2LCA3MywgNzgsIDEyOCwgODYsIDczLCA3NiwgNzYsIAotICAgIDY1LCA3MSwgNjksIDEyOCwgODYsIDczLCA3MywgMTI4LCA4NiwgNzMsIDY5LCA4OCwgMTI4LCA4NiwgNzMsIDY5LCA4NywgCi0gICAgNzMsIDc4LCAxOTksIDg2LCA3MywgNjksIDg3LCA2OCwgNjUsIDg0LCAxOTMsIDg2LCA3MywgNjksIDg0LCAxMjgsIDg2LCAKLSAgICA3MywgNjksIDgwLCAxMjgsIDg2LCA3MywgNjksIDEyOCwgODYsIDczLCA2OCwgNzQsIDQ1LCA1MCwgMTI4LCA4NiwgNzMsIAotICAgIDY4LCA3NCwgMTI4LCA4NiwgNzMsIDY4LCA2OSwgNzksIDY3LCA2NSwgODMsIDgzLCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4NiwgCi0gICAgNzMsIDY4LCA2OSwgMjA3LCA4NiwgNzMsIDY4LCA2NSwgMTI4LCA4NiwgNzMsIDY3LCA4NCwgNzksIDgyLCAyMTcsIDg2LCAKLSAgICA3MywgNjYsIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA4NiwgNzMsIDEyOCwgODYsIDcwLCA2NSwgMTI4LCA4NiwgNjksIAotICAgIDg4LCAxMjgsIDg2LCA2OSwgODcsIDEyOCwgODYsIDY5LCAyMTUsIDg2LCA2OSwgODUsIDg4LCAxMjgsIDg2LCA2OSwgODUsIAotICAgIDc3LCAxMjgsIDg2LCA2OSwgODUsIDY1LCA2OSwgODAsIDY5LCA3OCwgMTI4LCA4NiwgNjksIDg1LCA2NSwgNjksIDEyOCwgCi0gICAgODYsIDY5LCA4MywgODQsIDY1LCAxMjgsIDg2LCA2OSwgODMsIDgzLCA2OSwgMjA0LCA4NiwgNjksIDgyLCAyMTcsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNzYsIDg5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCi0gICAgNzYsIDIxNywgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1NCwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgCi0gICAgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MywgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgCi0gICAgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgCi0gICAgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MSwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCi0gICAgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUxLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MCwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgCi0gICAgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgCi0gICAgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OSwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgCi0gICAgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDU0LCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgCi0gICAgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIAotICAgIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCAKLSAgICA0OCwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgCi0gICAgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgMTI4LCA4NiwgNjksIDgyLCA4MywgNzMsIDY3LCA3NiwgNjksIDEyOCwgODYsIAotICAgIDY5LCA4MiwgODMsIDE5NywgODYsIDY5LCA4MiwgNzEsIDY5LCAxMjgsIDg2LCA2OSwgODIsIDY4LCA3MywgNzEsIDgyLCA3MywgCi0gICAgODMsIDEyOCwgODYsIDY5LCA4MCwgMTI4LCA4NiwgNjksIDc4LCA2OCwgMTI4LCA4NiwgNjksIDczLCA3NiwgMTI4LCA4NiwgCi0gICAgNjksIDcyLCA3MywgNjcsIDc2LCA2OSwgMTI4LCA4NiwgNjksIDcyLCAxMjgsIDg2LCA2OSwgMjAwLCA4NiwgNjksIDY5LCAKLSAgICAxMjgsIDg2LCA2OSwgMTk3LCA4NiwgNjksIDY4LCA2OSwgMTI4LCA4NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODYsIDY1LCAKLSAgICA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODYsIDY1LCA4OCwgMTI4LCA4NiwgNjUsIDg2LCAxMjgsIDg2LCA2NSwgMjE0LCAKLSAgICA4NiwgNjUsIDg1LCAxMjgsIDg2LCA2NSwgODQsIDcyLCA4OSwgMTI4LCA4NiwgNjUsIDg0LCAxMjgsIDg2LCA2NSwgODMsIAotICAgIDg0LCA3OCwgNjksIDgzLCAyMTEsIDg2LCA2NSwgODMsIDczLCA4MywgMTI4LCA4NiwgNjUsIDgyLCA4OSwgMjExLCA4NiwgCi0gICAgNjUsIDgyLCA3MywgNzUsIDY1LCAxMjgsIDg2LCA2NSwgODIsIDczLCA2NSwgNzgsIDIxMiwgODYsIDY1LCA4MiwgNzMsIDY1LCAKLSAgICAxMjgsIDg2LCA2NSwgODIsIDczLCAxOTMsIDg2LCA2NSwgODIsIDY5LCA3MywgNjUsIDIwMSwgODYsIDY1LCA4MiwgNjksIAotICAgIDczLCAxOTMsIDg2LCA2NSwgODAsIDc5LCA4NSwgODIsIDgzLCAxMjgsIDg2LCA2NSwgODAsIDEyOCwgODYsIDY1LCA3OCwgCi0gICAgNjksIDEyOCwgODYsIDY1LCA3NywgNjUsIDcxLCA3OSwgNzcsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDg2LCA2NSwgNzcsIDY1LCAKLSAgICA3MSwgNzksIDc3LCA4NSwgNzUsIDcyLCAxOTMsIDg2LCA2NSwgNzYsIDc2LCA2OSwgODksIDEyOCwgODYsIDY1LCA3MywgCi0gICAgMTI4LCA4NiwgNjUsIDcyLCAxMjgsIDg2LCA2NSwgNjUsIDg2LCA4NSwgMTI4LCA4NiwgNjUsIDY1LCAxMjgsIDg2LCA0OCwgCi0gICAgNTIsIDQ4LCA2NSwgMTI4LCA4NiwgNDgsIDUyLCA0OCwgMTI4LCA4NiwgNDgsIDUxLCA1NywgMTI4LCA4NiwgNDgsIDUxLCAKLSAgICA1NiwgMTI4LCA4NiwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgODYsIDQ4LCA1MSwgNTUsIDEyOCwgODYsIDQ4LCA1MSwgNTQsIAotICAgIDEyOCwgODYsIDQ4LCA1MSwgNTMsIDEyOCwgODYsIDQ4LCA1MSwgNTIsIDEyOCwgODYsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIAotICAgIDg2LCA0OCwgNTEsIDUxLCAxMjgsIDg2LCA0OCwgNTEsIDUwLCAxMjgsIDg2LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA4NiwgCi0gICAgNDgsIDUxLCA0OSwgMTI4LCA4NiwgNDgsIDUxLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCA1MSwgNDgsIDEyOCwgODYsIDQ4LCAKLSAgICA1MCwgNTcsIDY1LCAxMjgsIDg2LCA0OCwgNTAsIDU3LCAxMjgsIDg2LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA4NiwgNDgsIAotICAgIDUwLCA1NiwgMTI4LCA4NiwgNDgsIDUwLCA1NSwgMTI4LCA4NiwgNDgsIDUwLCA1NCwgMTI4LCA4NiwgNDgsIDUwLCA1MywgCi0gICAgMTI4LCA4NiwgNDgsIDUwLCA1MiwgMTI4LCA4NiwgNDgsIDUwLCA1MSwgNjUsIDEyOCwgODYsIDQ4LCA1MCwgNTEsIDEyOCwgCi0gICAgODYsIDQ4LCA1MCwgNTAsIDEyOCwgODYsIDQ4LCA1MCwgNDksIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDc2LCAxMjgsIDg2LCAKLSAgICA0OCwgNTAsIDQ4LCA3NSwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNzQsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDczLCAxMjgsIAotICAgIDg2LCA0OCwgNTAsIDQ4LCA3MiwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNzEsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDcwLCAKLSAgICAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA2OSwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjgsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIAotICAgIDY3LCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA2NiwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCA1MCwgCi0gICAgNDgsIDEyOCwgODYsIDQ4LCA0OSwgNTcsIDEyOCwgODYsIDQ4LCA0OSwgNTYsIDEyOCwgODYsIDQ4LCA0OSwgNTUsIDEyOCwgCi0gICAgODYsIDQ4LCA0OSwgNTQsIDEyOCwgODYsIDQ4LCA0OSwgNTMsIDEyOCwgODYsIDQ4LCA0OSwgNTIsIDEyOCwgODYsIDQ4LCAKLSAgICA0OSwgNTEsIDEyOCwgODYsIDQ4LCA0OSwgNTAsIDY2LCAxMjgsIDg2LCA0OCwgNDksIDUwLCA2NSwgMTI4LCA4NiwgNDgsIAotICAgIDQ5LCA1MCwgMTI4LCA4NiwgNDgsIDQ5LCA0OSwgNjcsIDEyOCwgODYsIDQ4LCA0OSwgNDksIDY2LCAxMjgsIDg2LCA0OCwgCi0gICAgNDksIDQ5LCA2NSwgMTI4LCA4NiwgNDgsIDQ5LCA0OSwgMTI4LCA4NiwgNDgsIDQ5LCA0OCwgMTI4LCA4NiwgNDgsIDQ4LCAKLSAgICA1NywgMTI4LCA4NiwgNDgsIDQ4LCA1NiwgMTI4LCA4NiwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgODYsIDQ4LCA0OCwgNTUsIAotICAgIDY1LCAxMjgsIDg2LCA0OCwgNDgsIDU1LCAxMjgsIDg2LCA0OCwgNDgsIDU0LCAxMjgsIDg2LCA0OCwgNDgsIDUzLCAxMjgsIAotICAgIDg2LCA0OCwgNDgsIDUyLCAxMjgsIDg2LCA0OCwgNDgsIDUxLCAxMjgsIDg2LCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4NiwgCi0gICAgNDgsIDQ4LCA1MCwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNzMsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDcyLCAxMjgsIDg2LCAKLSAgICA0OCwgNDgsIDQ5LCA3MSwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNzAsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDY5LCAxMjgsIAotICAgIDg2LCA0OCwgNDgsIDQ5LCA2OCwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNjcsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDY2LCAKLSAgICAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgMTI4LCA4NSwgOTAsIDg1LCAxMjgsIDg1LCAKLSAgICA5MCwgNTEsIDEyOCwgODUsIDkwLCAxNzksIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODUsIDg5LCAxMjgsIDg1LCAKLSAgICA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg1LCA4NSwgODUsIDg1LCAxMjgsIDg1LCA4NSwgODUsIDUxLCAxMjgsIAotICAgIDg1LCA4NSwgODUsIDUwLCAxMjgsIDg1LCA4NSwgNjksIDEyOCwgODUsIDg0LCA4NSwgNzUsIDczLCAxMjgsIDg1LCA4MywgCi0gICAgODMsIDg1LCA1MSwgMTI4LCA4NSwgODMsIDgzLCA4NSwgMTI4LCA4NSwgODMsIDcyLCA4OCwgMTI4LCA4NSwgODMsIDcyLCAKLSAgICA4NSwgNzcsIDg4LCAxMjgsIDg1LCA4MywgNzIsIDY5LCA3OCwgNzgsIDY1LCAxMjgsIDg1LCA4MywgNzIsIDUwLCAxMjgsIAotICAgIDg1LCA4MywgNzIsIDEyOCwgODUsIDgzLCAyMDAsIDg1LCA4MywgNjksIDE5NiwgODUsIDgzLCA2OSwgNDUsIDUwLCAxMjgsIAotICAgIDg1LCA4MywgNjksIDQ1LCA0OSwgMTI4LCA4NSwgODMsIDY5LCAxMjgsIDg1LCA4MywgMTk3LCA4NSwgODIsIDg1LCAyMTgsIAotICAgIDg1LCA4MiwgODUsIDgzLCAxMjgsIDg1LCA4MiwgODUsIDY4LCA2NSwgMTI4LCA4NSwgODIsIDg1LCA2OCwgMTkzLCA4NSwgCi0gICAgODIsIDg1LCAxMjgsIDg1LCA4MiwgMjEzLCA4NSwgODIsIDc4LCAxMjgsIDg1LCA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4NSwgCi0gICAgODIsIDczLCA1MSwgMTI4LCA4NSwgODIsIDczLCAxMjgsIDg1LCA4MiwgNjUsIDc4LCA4NSwgODMsIDEyOCwgODUsIDgyLCAKLSAgICA2NSwgMTI4LCA4NSwgODIsIDUyLCAxMjgsIDg1LCA4MiwgNTAsIDEyOCwgODUsIDgyLCAxNzgsIDg1LCA4MCwgODcsIDY1LCAKLSAgICA4MiwgNjgsIDgzLCAxMjgsIDg1LCA4MCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgCi0gICAgMTI4LCA4NSwgODAsIDg3LCA2NSwgODIsIDE5NiwgODUsIDgwLCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4NSwgODAsIDgzLCAKLSAgICA3MywgNzYsIDc5LCA3OCwgMTI4LCA4NSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIDg1LCA4MCwgODIsIDczLCA3MSwgNzIsIAotICAgIDIxMiwgODUsIDgwLCA4MCwgNjksIDIxMCwgODUsIDgwLCA2NSwgNjgsIDcyLCA3NywgNjUsIDc4LCA3MywgODksIDY1LCAKLSAgICAxMjgsIDg1LCA4MCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDg1LCA3OSwgNzgsIDEyOCwgODUsIAotICAgIDc4LCA3OCwgMTI4LCA4NSwgNzgsIDc3LCA2NSwgODIsIDgyLCA3MywgNjksIDE5NiwgODUsIDc4LCA3NSwgNzgsIDc5LCA4NywgCi0gICAgNzgsIDEyOCwgODUsIDc4LCA3MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg1LCA3OCwgNzMsIDg0LCA4OSwgMTI4LCAKLSAgICA4NSwgNzgsIDczLCA4NCwgMTI4LCA4NSwgNzgsIDczLCAyMTIsIDg1LCA3OCwgNzMsIDc5LCA3OCwgMTI4LCA4NSwgNzgsIAotICAgIDczLCA3OSwgMjA2LCA4NSwgNzgsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDg1LCA3OCwgNjgsIDIwNywgODUsIDc4LCA2OCwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY5LCAxMjgsIDg1LCA3OCwgNjgsIDY5LCA4MiwgNzYsIDczLCA3OCwgMTk3LCA4NSwgNzgsIDY4LCAKLSAgICA2OSwgODIsIDY4LCA3OSwgODQsIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA2NiwgNjUsIDgyLCAxMjgsIDg1LCA3OCwgNjgsIAotICAgIDY5LCAyMTAsIDg1LCA3OCwgNjcsIDczLCAxOTMsIDg1LCA3OCwgNjUsIDgzLCA4MCwgNzMsIDgyLCA2NSwgODQsIDY5LCA2OCwgCi0gICAgMTI4LCA4NSwgNzgsIDY1LCA4MCwgMTI4LCA4NSwgNzgsIDY1LCA3NywgODUsIDgzLCA2OSwgMTk2LCA4NSwgNzgsIDY1LCAKLSAgICAxMjgsIDg1LCAyMDYsIDg1LCA3NywgODUsIDc3LCAxMjgsIDg1LCA3NywgODUsIDIwNSwgODUsIDc3LCA2NiwgODIsIDY5LCAKLSAgICA3NiwgNzYsIDY1LCAxMjgsIDg1LCA3NywgNjYsIDgyLCA2OSwgNzYsIDc2LCAxOTMsIDg1LCA3NywgNjYsIDczLCA3OCwgCisgICAgNjksIDcxLCA2NSwgMjEwLCA4NiwgNzMsIDc4LCA2OSwgMTI4LCA4NiwgNzMsIDc4LCAxOTcsIDg2LCA3MywgNzgsIDEyOCwgCisgICAgODYsIDczLCA3NiwgNzYsIDY1LCA3MSwgNjksIDEyOCwgODYsIDczLCA3MywgMTI4LCA4NiwgNzMsIDY5LCA4OCwgMTI4LCAKKyAgICA4NiwgNzMsIDY5LCA4NywgNzMsIDc4LCAxOTksIDg2LCA3MywgNjksIDg3LCA2OCwgNjUsIDg0LCAxOTMsIDg2LCA3MywgNjksIAorICAgIDg0LCAxMjgsIDg2LCA3MywgNjksIDIxMiwgODYsIDczLCA2OSwgODAsIDEyOCwgODYsIDczLCA2OSwgMTI4LCA4NiwgNzMsIAorICAgIDY4LCA3NCwgNDUsIDUwLCAxMjgsIDg2LCA3MywgNjgsIDc0LCAxMjgsIDg2LCA3MywgNjgsIDY5LCA3OSwgNjcsIDY1LCA4MywgCisgICAgODMsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDg2LCA3MywgNjgsIDY5LCAyMDcsIDg2LCA3MywgNjgsIDY1LCAxMjgsIDg2LCAKKyAgICA3MywgNjcsIDg0LCA3OSwgODIsIDIxNywgODYsIDczLCA2NiwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDg2LCA3MCwgNjUsIAorICAgIDEyOCwgODYsIDY5LCA4OSwgOTAsIDEyOCwgODYsIDY5LCA4OCwgMTI4LCA4NiwgNjksIDg3LCAxMjgsIDg2LCA2OSwgMjE1LCAKKyAgICA4NiwgNjksIDg1LCA4OCwgMTI4LCA4NiwgNjksIDg1LCA3NywgMTI4LCA4NiwgNjksIDg1LCA2NSwgNjksIDgwLCA2OSwgNzgsIAorICAgIDEyOCwgODYsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDg2LCA2OSwgODMsIDg0LCA2NSwgMTI4LCA4NiwgNjksIDgzLCA4MywgCisgICAgNjksIDIwNCwgODYsIDY5LCA4MiwgMjE3LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDc2LCA4OSwgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAorICAgIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUyLCAKKyAgICAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCAKKyAgICA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIAorICAgIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUzLCAKKyAgICAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCAKKyAgICA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIAorICAgIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDU0LCAKKyAgICAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCAKKyAgICA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIAorICAgIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ4LCAKKyAgICAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCAKKyAgICA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIAorICAgIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ5LCAKKyAgICAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCAKKyAgICA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIAorICAgIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUwLCAKKyAgICAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCAKKyAgICA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIAorICAgIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUxLCAKKyAgICAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCAKKyAgICA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIAorICAgIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUyLCAKKyAgICAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCAKKyAgICA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDEyOCwgODYsIDY5LCAKKyAgICA4MiwgODMsIDczLCA2NywgNzYsIDY5LCAxMjgsIDg2LCA2OSwgODIsIDgzLCAxOTcsIDg2LCA2OSwgODIsIDcxLCA2OSwgCisgICAgMTI4LCA4NiwgNjksIDgyLCA2OCwgNzMsIDcxLCA4MiwgNzMsIDgzLCAxMjgsIDg2LCA2OSwgODIsIDEyOCwgODYsIDY5LCAKKyAgICA4MCwgMTI4LCA4NiwgNjksIDc4LCA2OCwgMTI4LCA4NiwgNjksIDczLCA3NiwgMTI4LCA4NiwgNjksIDcyLCA3MywgNjcsIAorICAgIDc2LCA2OSwgMTI4LCA4NiwgNjksIDcyLCAxMjgsIDg2LCA2OSwgMjAwLCA4NiwgNjksIDY5LCAxMjgsIDg2LCA2OSwgMTk3LCAKKyAgICA4NiwgNjksIDY4LCA2OSwgMTI4LCA4NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODYsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgODYsIDY1LCA4OCwgMTI4LCA4NiwgNjUsIDg2LCAxMjgsIDg2LCA2NSwgMjE0LCA4NiwgNjUsIDg1LCAxMjgsIDg2LCAKKyAgICA2NSwgODQsIDcyLCA4OSwgMTI4LCA4NiwgNjUsIDg0LCAxMjgsIDg2LCA2NSwgODMsIDg0LCA3OCwgNjksIDgzLCAyMTEsIAorICAgIDg2LCA2NSwgODMsIDczLCA4MywgMTI4LCA4NiwgNjUsIDgyLCA4OSwgMjExLCA4NiwgNjUsIDgyLCA3MywgNzUsIDY1LCAKKyAgICAxMjgsIDg2LCA2NSwgODIsIDczLCA2NSwgNzgsIDg0LCAxMjgsIDg2LCA2NSwgODIsIDczLCA2NSwgNzgsIDIxMiwgODYsIAorICAgIDY1LCA4MiwgNzMsIDY1LCAxMjgsIDg2LCA2NSwgODIsIDczLCAxOTMsIDg2LCA2NSwgODIsIDY5LCA3MywgNjUsIDIwMSwgCisgICAgODYsIDY1LCA4MiwgNjksIDczLCAxOTMsIDg2LCA2NSwgODAsIDc5LCA4NSwgODIsIDgzLCAxMjgsIDg2LCA2NSwgODAsIAorICAgIDEyOCwgODYsIDY1LCA3OCwgNjksIDEyOCwgODYsIDY1LCA3NywgNjUsIDcxLCA3OSwgNzcsIDg1LCA3NSwgNzIsIDY1LCAKKyAgICAxMjgsIDg2LCA2NSwgNzcsIDY1LCA3MSwgNzksIDc3LCA4NSwgNzUsIDcyLCAxOTMsIDg2LCA2NSwgNzYsIDc2LCA2OSwgODksIAorICAgIDEyOCwgODYsIDY1LCA3NCwgMTI4LCA4NiwgNjUsIDczLCAxMjgsIDg2LCA2NSwgNzIsIDEyOCwgODYsIDY1LCAyMDAsIDg2LCAKKyAgICA2NSwgNjUsIDg2LCA4NSwgMTI4LCA4NiwgNjUsIDY1LCAxMjgsIDg2LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA4NiwgNDgsIAorICAgIDUyLCA0OCwgMTI4LCA4NiwgNDgsIDUxLCA1NywgMTI4LCA4NiwgNDgsIDUxLCA1NiwgMTI4LCA4NiwgNDgsIDUxLCA1NSwgCisgICAgNjUsIDEyOCwgODYsIDQ4LCA1MSwgNTUsIDEyOCwgODYsIDQ4LCA1MSwgNTQsIDEyOCwgODYsIDQ4LCA1MSwgNTMsIDEyOCwgCisgICAgODYsIDQ4LCA1MSwgNTIsIDEyOCwgODYsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDg2LCA0OCwgNTEsIDUxLCAxMjgsIDg2LCAKKyAgICA0OCwgNTEsIDUwLCAxMjgsIDg2LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA4NiwgNDgsIDUxLCA0OSwgMTI4LCA4NiwgNDgsIAorICAgIDUxLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCA1MSwgNDgsIDEyOCwgODYsIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDg2LCA0OCwgCisgICAgNTAsIDU3LCAxMjgsIDg2LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA4NiwgNDgsIDUwLCA1NiwgMTI4LCA4NiwgNDgsIDUwLCAKKyAgICA1NSwgMTI4LCA4NiwgNDgsIDUwLCA1NCwgMTI4LCA4NiwgNDgsIDUwLCA1MywgMTI4LCA4NiwgNDgsIDUwLCA1MiwgMTI4LCAKKyAgICA4NiwgNDgsIDUwLCA1MSwgNjUsIDEyOCwgODYsIDQ4LCA1MCwgNTEsIDEyOCwgODYsIDQ4LCA1MCwgNTAsIDEyOCwgODYsIAorICAgIDQ4LCA1MCwgNDksIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDc2LCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA3NSwgMTI4LCA4NiwgCisgICAgNDgsIDUwLCA0OCwgNzQsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDczLCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA3MiwgMTI4LCAKKyAgICA4NiwgNDgsIDUwLCA0OCwgNzEsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDcwLCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA2OSwgCisgICAgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjgsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDY3LCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCAKKyAgICA2NiwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDEyOCwgODYsIDQ4LCA0OSwgNTcsIAorICAgIDEyOCwgODYsIDQ4LCA0OSwgNTYsIDEyOCwgODYsIDQ4LCA0OSwgNTUsIDEyOCwgODYsIDQ4LCA0OSwgNTQsIDEyOCwgODYsIAorICAgIDQ4LCA0OSwgNTMsIDEyOCwgODYsIDQ4LCA0OSwgNTIsIDEyOCwgODYsIDQ4LCA0OSwgNTEsIDEyOCwgODYsIDQ4LCA0OSwgCisgICAgNTAsIDY2LCAxMjgsIDg2LCA0OCwgNDksIDUwLCA2NSwgMTI4LCA4NiwgNDgsIDQ5LCA1MCwgMTI4LCA4NiwgNDgsIDQ5LCAKKyAgICA0OSwgNjcsIDEyOCwgODYsIDQ4LCA0OSwgNDksIDY2LCAxMjgsIDg2LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA4NiwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA4NiwgNDgsIDQ5LCA0OCwgMTI4LCA4NiwgNDgsIDQ4LCA1NywgMTI4LCA4NiwgNDgsIDQ4LCA1NiwgCisgICAgMTI4LCA4NiwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgODYsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDg2LCA0OCwgNDgsIDU1LCAKKyAgICAxMjgsIDg2LCA0OCwgNDgsIDU0LCAxMjgsIDg2LCA0OCwgNDgsIDUzLCAxMjgsIDg2LCA0OCwgNDgsIDUyLCAxMjgsIDg2LCAKKyAgICA0OCwgNDgsIDUxLCAxMjgsIDg2LCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4NiwgNDgsIDQ4LCA1MCwgMTI4LCA4NiwgNDgsIAorICAgIDQ4LCA0OSwgNzMsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDcyLCAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA3MSwgMTI4LCA4NiwgCisgICAgNDgsIDQ4LCA0OSwgNzAsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDY5LCAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA2OCwgMTI4LCAKKyAgICA4NiwgNDgsIDQ4LCA0OSwgNjcsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA2NSwgCisgICAgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgMTI4LCA4NSwgOTAsIDg1LCAxMjgsIDg1LCA5MCwgNTEsIDEyOCwgODUsIDkwLCAxNzksIAorICAgIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODUsIDg5LCAxMjgsIDg1LCA4NywgODUsIDEyOCwgODUsIDg1LCA4OSwgCisgICAgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODUsIDg1LCA4NSwgODUsIDEyOCwgODUsIDg1LCA4NSwgNTEsIDEyOCwgODUsIDg1LCAKKyAgICA4NSwgNTAsIDEyOCwgODUsIDg1LCA2OSwgMTI4LCA4NSwgODQsIDg1LCA3NSwgNzMsIDEyOCwgODUsIDgzLCA4MywgODUsIAorICAgIDUxLCAxMjgsIDg1LCA4MywgODMsIDg1LCAxMjgsIDg1LCA4MywgNzIsIDg4LCAxMjgsIDg1LCA4MywgNzIsIDg1LCA3NywgCisgICAgODgsIDEyOCwgODUsIDgzLCA3MiwgNjksIDc4LCA3OCwgNjUsIDEyOCwgODUsIDgzLCA3MiwgNTAsIDEyOCwgODUsIDgzLCAKKyAgICA3MiwgMTI4LCA4NSwgODMsIDIwMCwgODUsIDgzLCA2OSwgMTk2LCA4NSwgODMsIDY5LCA0NSwgNTAsIDEyOCwgODUsIDgzLCAKKyAgICA2OSwgNDUsIDQ5LCAxMjgsIDg1LCA4MywgNjksIDEyOCwgODUsIDgzLCAxOTcsIDg1LCA4MiwgODUsIDIxOCwgODUsIDgyLCAKKyAgICA4NSwgODMsIDEyOCwgODUsIDgyLCA4NSwgNjgsIDY1LCAxMjgsIDg1LCA4MiwgODUsIDY4LCAxOTMsIDg1LCA4MiwgODUsIAorICAgIDEyOCwgODUsIDgyLCAyMTMsIDg1LCA4MiwgNzgsIDEyOCwgODUsIDgyLCA3MywgNzgsIDY5LCAxMjgsIDg1LCA4MiwgNzMsIAorICAgIDUxLCAxMjgsIDg1LCA4MiwgNzMsIDEyOCwgODUsIDgyLCA2NSwgNzgsIDg1LCA4MywgMTI4LCA4NSwgODIsIDY1LCAxMjgsIAorICAgIDg1LCA4MiwgNTIsIDEyOCwgODUsIDgyLCA1MCwgMTI4LCA4NSwgODIsIDE3OCwgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgCisgICAgODMsIDEyOCwgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgMTI4LCA4NSwgODAsIDg3LCA2NSwgODIsIDE5NiwgODUsIDgwLCAKKyAgICA4NCwgODUsIDgyLCA3OCwgMTI4LCA4NSwgODAsIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA4NSwgODAsIDgzLCA3MywgNzYsIAorICAgIDc5LCAyMDYsIDg1LCA4MCwgODMsIDczLCA2OCwgNjksIDQ1LCA2OCwgNzksIDg3LCAyMDYsIDg1LCA4MCwgODIsIDczLCA3MSwgCisgICAgNzIsIDIxMiwgODUsIDgwLCA4MCwgNjksIDgyLCAxMjgsIDg1LCA4MCwgODAsIDY5LCAyMTAsIDg1LCA4MCwgNjUsIDY4LCAKKyAgICA3MiwgNzcsIDY1LCA3OCwgNzMsIDg5LCA2NSwgMTI4LCA4NSwgODAsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgCisgICAgMTk5LCA4NSwgNzksIDc4LCAxMjgsIDg1LCA3OCwgNzgsIDEyOCwgODUsIDc4LCA3NywgNjUsIDgyLCA4MiwgNzMsIDY5LCAKKyAgICAxOTYsIDg1LCA3OCwgNzUsIDc4LCA3OSwgODcsIDc4LCAxMjgsIDg1LCA3OCwgNzUsIDEyOCwgODUsIDc4LCA3MywgODYsIAorICAgIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg1LCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA4NSwgNzgsIDczLCA4NCwgMTI4LCA4NSwgCisgICAgNzgsIDczLCAyMTIsIDg1LCA3OCwgNzMsIDc5LCA3OCwgMTI4LCA4NSwgNzgsIDczLCA3OSwgMjA2LCA4NSwgNzgsIDczLCAKKyAgICA3MCwgNzMsIDY5LCAxOTYsIDg1LCA3OCwgNzMsIDY3LCA3OSwgODIsIDIwNiwgODUsIDc4LCA2OCwgMjA3LCA4NSwgNzgsIAorICAgIDY4LCA2OSwgODIsIDg0LCA3MywgNjksIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA3NiwgNzMsIDc4LCAxOTcsIDg1LCA3OCwgCisgICAgNjgsIDY5LCA4MiwgNjgsIDc5LCA4NCwgMTI4LCA4NSwgNzgsIDY4LCA2OSwgODIsIDY2LCA2NSwgODIsIDEyOCwgODUsIDc4LCAKKyAgICA2OCwgNjksIDgyLCAxMjgsIDg1LCA3OCwgNjgsIDY5LCAyMTAsIDg1LCA3OCwgNjcsIDczLCAxOTMsIDg1LCA3OCwgNjcsIAorICAgIDY5LCA4MiwgODQsIDY1LCA3MywgNzgsIDg0LCAyMTcsIDg1LCA3OCwgNjUsIDgzLCA4MCwgNzMsIDgyLCA2NSwgODQsIDY5LCAKKyAgICA2OCwgMTI4LCA4NSwgNzgsIDY1LCA4MCwgMTI4LCA4NSwgNzgsIDY1LCA3NywgODUsIDgzLCA2OSwgMTk2LCA4NSwgNzgsIAorICAgIDY1LCAxMjgsIDg1LCAyMDYsIDg1LCA3NywgODUsIDc3LCAxMjgsIDg1LCA3NywgODUsIDIwNSwgODUsIDc3LCA2NiwgODIsIAorICAgIDY5LCA3NiwgNzYsIDY1LCAxMjgsIDg1LCA3NywgNjYsIDgyLCA2OSwgNzYsIDc2LCAxOTMsIDg1LCA3NywgNjYsIDczLCA3OCwgCiAgICAgMTI4LCA4NSwgNzUsIDg1LCAxMjgsIDg1LCA3NSwgODIsIDY1LCA3MywgNzgsIDczLCA2NSwgMjA2LCA4NSwgNzUsIDY1LCAKICAgICA4MiwgNjUsIDEyOCwgODUsIDc1LCA2NSwgODIsIDE5MywgODUsIDc1LCAxMjgsIDg1LCA3MywgNzYsIDc2LCA2OSwgNjUsIAogICAgIDc4LCA3OCwgMTI4LCA4NSwgNzMsIDcxLCA3MiwgODUsIDIxMCwgODUsIDcxLCA2NSwgODIsIDczLCA4NCwgNzMsIDE5NSwgCkBAIC00OTksNTA1ICs1MjEsNTc2IEBACiAgICAgODUsIDQ4LCA0OCwgNTcsIDEyOCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgODUsIDQ4LCA0OCwgNTUsIDEyOCwgODUsIDQ4LCAKICAgICA0OCwgNTQsIDY2LCAxMjgsIDg1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA4NSwgNDgsIDQ4LCA1NCwgMTI4LCA4NSwgNDgsIAogICAgIDQ4LCA1MywgMTI4LCA4NSwgNDgsIDQ4LCA1MiwgMTI4LCA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA4NSwgNDgsIDQ4LCA1MCwgCi0gICAgMTI4LCA4NSwgNDgsIDQ4LCA0OSwgMTI4LCA4NSwgNDUsIDczLCA0NSwgNzMsIDEyOCwgODUsIDQ1LCA2OSwgNzksIDQ1LCAKLSAgICA2OSwgODUsIDEyOCwgODUsIDQ1LCA2NiwgODIsIDc0LCA3MSwgODUsIDEyOCwgODQsIDkwLCA4NSwgMTI4LCA4NCwgOTAsIAotICAgIDc5LCA2NSwgMTI4LCA4NCwgOTAsIDc5LCAxMjgsIDg0LCA5MCwgNzMsIDIxMCwgODQsIDkwLCA3MywgMTI4LCA4NCwgOTAsIAotICAgIDY5LCA2OSwgMTI4LCA4NCwgOTAsIDY5LCAxMjgsIDg0LCA5MCwgNjUsIDY1LCAxMjgsIDg0LCA5MCwgNjUsIDEyOCwgODQsIAotICAgIDkwLCAxMjgsIDg0LCA4OSwgMjEwLCA4NCwgODksIDgwLCA2OSwgNDUsIDE4MywgODQsIDg5LCA4MCwgNjksIDQ1LCAxODIsIAotICAgIDg0LCA4OSwgODAsIDY5LCA0NSwgMTgxLCA4NCwgODksIDgwLCA2OSwgNDUsIDE4MCwgODQsIDg5LCA4MCwgNjksIDQ1LCAKLSAgICAxNzksIDg0LCA4OSwgODAsIDY5LCA0NSwgMTc4LCA4NCwgODksIDgwLCA2OSwgNDUsIDE3NywgODQsIDg5LCA4MCwgMTk3LCAKLSAgICA4NCwgODksIDc5LCAxMjgsIDg0LCA4OSwgNzMsIDEyOCwgODQsIDg5LCA2OSwgMTI4LCA4NCwgODksIDY1LCAxMjgsIDg0LCAKLSAgICA4NywgNzksIDc5LCAxMjgsIDg0LCA4NywgNzksIDQ1LCA4NywgNjUsIDIxNywgODQsIDg3LCA3OSwgNDUsIDg0LCA3MiwgNzMsIAotICAgIDgyLCA4NCwgODksIDEyOCwgODQsIDg3LCA3OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgODQsIDg3LCA3OSwgNDUsIDcyLCA2OSwgCi0gICAgNjUsIDY4LCA2OSwgMTk2LCA4NCwgODcsIDc5LCA0NSwgNjksIDIwNSwgODQsIDg3LCA3MywgODMsIDg0LCA2OSwgMTk2LCAKLSAgICA4NCwgODcsIDczLCA3MywgMTI4LCA4NCwgODcsIDczLCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4NCwgODcsIAotICAgIDc5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4NCwgNzIsIDgyLCA2OSwgNjksIDEyOCwgODQsIDg3LCA2OSwgCi0gICAgNzgsIDg0LCA4OSwgNDUsIDgzLCA3MywgODgsIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDgzLCA2OSwgODYsIAotICAgIDY5LCA3OCwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgCi0gICAgODQsIDg5LCA0NSwgNzgsIDczLCA3OCwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDcwLCA3OSwgODUsIAotICAgIDgyLCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3MCwgNzMsIDg2LCA2OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgCi0gICAgODQsIDg5LCA0NSwgNjksIDczLCA3MSwgNzIsIDg0LCAyMDAsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA2OSwgNzMsIAotICAgIDcxLCA3MiwgODQsIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDIxNywgCi0gICAgODQsIDg3LCA2OSwgNzYsIDg2LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODQsIDg3LCA2OSwgNzYsIAotICAgIDg2LCA2OSwgMTI4LCA4NCwgODcsIDY5LCA3NiwgODYsIDE5NywgODQsIDg3LCA2OSwgMTI4LCA4NCwgODcsIDY1LCA2NSwgCi0gICAgMTI4LCA4NCwgODcsIDY1LCAxMjgsIDg0LCA4NiwgODIsIDczLCA2OCwgNzksIDEyOCwgODQsIDg2LCA3MywgNzcsIDY1LCAKLSAgICA2OCwgODUsIDIxMCwgODQsIDg1LCA4OCwgMTI4LCA4NCwgODUsIDg1LCA3NywgODUsIDEyOCwgODQsIDg1LCA4NSwgMTI4LCAKLSAgICA4NCwgODUsIDg0LCA4NCwgODksIDEyOCwgODQsIDg1LCA4NCwgNjksIDg5LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4NCwgODUsIAotICAgIDg0LCAxMjgsIDg0LCA4NSwgODIsIDg4LCAxMjgsIDg0LCA4NSwgODIsIDg1LCAxMjgsIDg0LCA4NSwgODIsIDg0LCA3NiwgCi0gICAgNjksIDEyOCwgODQsIDg1LCA4MiwgNzksIDUwLCAxMjgsIDg0LCA4NSwgODIsIDc4LCA4MywgODQsIDczLCA3NiwgNjksIAotICAgIDEyOCwgODQsIDg1LCA4MiwgNzgsIDY5LCAxOTYsIDg0LCA4NSwgODIsIDIwNiwgODQsIDg1LCA4MiwgNzUsIDczLCA4MywgCi0gICAgMjAwLCA4NCwgODUsIDgyLCA2NiwgNjUsIDc4LCAxMjgsIDg0LCA4NSwgODIsIDEyOCwgODQsIDg1LCA4MCwgMTI4LCA4NCwgCi0gICAgODUsIDc5LCA4OCwgMTI4LCA4NCwgODUsIDc5LCA4NCwgMTI4LCA4NCwgODUsIDc5LCA4MCwgMTI4LCA4NCwgODUsIDc5LCAKLSAgICAxMjgsIDg0LCA4NSwgNzgsIDc4LCA4OSwgMTI4LCA4NCwgODUsIDc3LCA2OSwgODQsIDY5LCA4MywgMTI4LCA4NCwgODUsIAotICAgIDc3LCA2NSwgNjksIDEyOCwgODQsIDg1LCA3NywgMTI4LCA4NCwgODUsIDc2LCA3MywgODAsIDEyOCwgODQsIDg1LCA3NSwgCi0gICAgODcsIDY5LCA3OCwgODQsIDczLCA4MywgMTI4LCA4NCwgODUsIDc1LCAxMjgsIDg0LCA4NSwgNzEsIDgyLCA3MywgMjAzLCAKLSAgICA4NCwgODUsIDcxLCA1MCwgMTI4LCA4NCwgODUsIDcxLCAxNzgsIDg0LCA4NSwgNjUsIDgyLCA2OSwgMTk5LCA4NCwgODUsIAotICAgIDY1LCA2OSwgODAsIDEyOCwgODQsIDg1LCA2NSwgNjksIDEyOCwgODQsIDIxMywgODQsIDg0LCA4NSwgODUsIDEyOCwgODQsIAotICAgIDg0LCA4NSwgNjgsIDY4LCA2NSwgNzEsIDEyOCwgODQsIDg0LCA4NSwgNjgsIDY4LCA2NSwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgCi0gICAgODUsIDEyOCwgODQsIDg0LCA4NCwgNzIsIDY1LCAxMjgsIDg0LCA4NCwgODQsIDY1LCAxMjgsIDg0LCA4NCwgODMsIDg1LCAKLSAgICAxMjgsIDg0LCA4NCwgODMsIDc5LCAxMjgsIDg0LCA4NCwgODMsIDczLCAxMjgsIDg0LCA4NCwgODMsIDY5LCA2OSwgMTI4LCAKLSAgICA4NCwgODQsIDgzLCA2OSwgMTI4LCA4NCwgODQsIDgzLCA2NSwgMTI4LCA4NCwgODQsIDc5LCA3OSwgMTI4LCA4NCwgODQsIAotICAgIDczLCA3MywgMTI4LCA4NCwgODQsIDczLCAxMjgsIDg0LCA4NCwgNzIsIDg3LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA4NSwgCi0gICAgMTI4LCA4NCwgODQsIDcyLCA3OSwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzMsIDEyOCwgCi0gICAgODQsIDg0LCA3MiwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY1LCA2NSwgMTI4LCAKLSAgICA4NCwgODQsIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCAyMDAsIAotICAgIDg0LCA4NCwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDIwMCwgODQsIDg0LCA2OSwgNjksIDEyOCwgODQsIDg0LCA2NSwgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA4NCwgNjUsIDg1LCAxMjgsIDg0LCA4NCwgNjUsIDczLCAxMjgsIDg0LCAKLSAgICA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNTAsIDEyOCwgODQsIDgzLCA4NywgNjksIDEyOCwgODQsIDgzLCA4NywgNjUsIAotICAgIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODMsIDgzLCA2OSwgMTI4LCA4NCwgODMsIDgzLCA2NSwgMTI4LCA4NCwgODMsIAotICAgIDcyLCA4NSwgNzEsIDgzLCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCAKLSAgICAyMDMsIDg0LCA4MywgNzIsIDY5LCA4MywgMTI4LCA4NCwgODMsIDcyLCA2OSwgNzEsIDEyOCwgODQsIDgzLCA3MiwgNjksIAotICAgIDE5OSwgODQsIDgzLCA3MiwgNjksIDEyOCwgODQsIDgzLCA3MiwgNjUsIDEyOCwgODQsIDgzLCA2OSwgODIsIDY5LCAxMjgsIAotICAgIDg0LCA4MywgNjUsIDY4LCA3MywgMTI4LCA4NCwgODMsIDY1LCA2OCwgMjAxLCA4NCwgODMsIDY1LCA2NSwgNjgsIDczLCA4OSwgCi0gICAgMTI4LCA4NCwgODMsIDY1LCA2NSwgMTI4LCA4NCwgODMsIDE5MywgODQsIDgyLCA4OSwgNjYsIDc2LCA3MywgNzksIDIwNiwgCi0gICAgODQsIDgyLCA4NSwgODQsIDcyLCAxMjgsIDg0LCA4MiwgODUsIDc4LCA3NSwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNjcsIDY1LCAKLSAgICA4NCwgNjksIDE5NiwgODQsIDgyLCA4NSwgNzcsIDgwLCA2OSwgODQsIDEyOCwgODQsIDgyLCA4NSwgNjksIDEyOCwgODQsIAotICAgIDgyLCA4NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgNzksIDgwLCA3MywgNjcsIDY1LCAyMDQsIDg0LCA4MiwgNzksIDgwLCA3MiwgCi0gICAgODksIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCAKLSAgICA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDg0LCA4MiwgCi0gICAgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODQsIAotICAgIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAyMDYsIDg0LCA4MiwgCi0gICAgNzksIDc3LCA3MywgNzUsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NiwgNzYsIAotICAgIDY5LCA4OSwgNjYsIDg1LCA4MywgMTI4LCA4NCwgODIsIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAyMDEsIDg0LCA4MiwgCi0gICAgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgNjUsIDIwNiwgODQsIDgyLCA3MywgODUsIDc3LCA4MCwgNzIsIDEyOCwgODQsIDgyLCAKLSAgICA3MywgODQsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIAotICAgIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDgyLCA3MywgODMsIDY5LCA3NywgNjksIDEyOCwgODQsIDgyLCA3MywgCi0gICAgODAsIDc5LCA2OCwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDczLCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgMTk3LCAKLSAgICA4NCwgODIsIDczLCA3OSwgMjA2LCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCA4NCwgODIsIDczLCA3MSwgODIsIAotICAgIDY1LCA3NywgNzcsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgODQsIDgyLCA3MywgNzEsIDc5LCA4MiwgCi0gICAgNzEsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgNzMsIDcwLCAKLSAgICA3OSwgNzYsIDczLCA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgODQsIDEyOCwgODQsIDgyLCA3MywgNjgsIAotICAgIDY5LCA3OCwgMjEyLCA4NCwgODIsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgCi0gICAgODUsIDc2LCA2NSwgMjEwLCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCAKLSAgICA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODQsIDgyLCA3MywgCi0gICAgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDY1LCAKLSAgICAxMjgsIDg0LCA4MiwgNzMsIDEyOCwgODQsIDgyLCA2OSwgODMsIDczLCA3NiwgNzYsIDc5LCAxMjgsIDg0LCA4MiwgNjksIAotICAgIDc4LCA2OCwgMTI4LCA4NCwgODIsIDY5LCA3OCwgMTk2LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUxLCAKLSAgICAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIAotICAgIDQ1LCA0OSwgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODIsIDY5LCAxOTcsIDg0LCA4MiwgNjksIDY1LCA2OCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4NCwgODIsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAKLSAgICAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg0LCA4MiwgNjUsIDc4LCA4MywgODAsIAotICAgIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDIxMiwgODQsIDgyLCA2NSwgCi0gICAgNzgsIDgzLCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIAotICAgIDgzLCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzcsIDg3LCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgNzcsIDEyOCwgCi0gICAgODQsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDY1LCA3MywgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzMsIDIwNiwgODQsIDgyLCAKLSAgICA2NSwgNzMsIDc2LCA3MywgNzgsIDE5OSwgODQsIDgyLCA2NSwgNzAsIDcwLCA3MywgNjcsIDEyOCwgODQsIDgyLCA2NSwgNzAsIAotICAgIDcwLCA3MywgMTk1LCA4NCwgODIsIDY1LCA2OCwgMTk3LCA4NCwgODIsIDY1LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4NCwgCi0gICAgODIsIDY1LCA2NywgNzUsIDEyOCwgODQsIDgyLCAxMjgsIDg0LCA3OSwgODgsIDEyOCwgODQsIDc5LCA4NywgNjksIDgyLCAKLSAgICAxMjgsIDg0LCA3OSwgODUsIDgyLCA3OCwgNzksIDczLCAyMTEsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA3OSwgODQsIAotICAgIDEyOCwgODQsIDc5LCA4MiwgODQsIDc5LCA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAKLSAgICAxMjgsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCAyMTEsIDg0LCA3OSwgODIsIDY3LCA3MiwgMTI4LCA4NCwgNzksIAotICAgIDgxLCAxMjgsIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgCi0gICAgNjksIDE5NiwgODQsIDc5LCA4MCwgMTI4LCA4NCwgNzksIDIwOCwgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA3OSwgCi0gICAgNzksIDc4LCAxMjgsIDg0LCA3OSwgNzgsIDc5LCA4MywgMTI4LCA4NCwgNzksIDc4LCA3MSwgODUsIDY5LCAxMjgsIDg0LCAKLSAgICA3OSwgNzgsIDcxLCA4NSwgMTk3LCA4NCwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU2LCAxMjgsIAotICAgIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTUsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgCi0gICAgNDUsIDUzLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTIsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MSwgMTI4LCAKLSAgICA4NCwgNzksIDc4LCA2OSwgNDUsIDUwLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNDksIDEyOCwgODQsIDc5LCA3OCwgNjksIAotICAgIDEyOCwgODQsIDc5LCA3OCwgNjUsIDIwNCwgODQsIDc5LCA3NywgODAsIDczLCAxMjgsIDg0LCA3OSwgNzcsIDY1LCA4NCwgCi0gICAgNzksIDEyOCwgODQsIDc5LCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc1LCA4OSwgMjA3LCA4NCwgNzksIDczLCAKLSAgICA3NiwgNjksIDg0LCAxMjgsIDg0LCA3OSwgNzEsIDY5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA4NCwgNzksIDY4LCAyMDcsIAotICAgIDg0LCA3OSwgNjUsIDc4LCA2OCwgNjUsIDc1LCA3MiwgNzMsIDY1LCA4NCwgMTI4LCA4NCwgNzksIDY1LCAxMjgsIDg0LCA3OCwgCi0gICAgMTI4LCA4NCwgNzYsIDg2LCAxMjgsIDg0LCA3NiwgODUsIDEyOCwgODQsIDc2LCA3OSwgMTI4LCA4NCwgNzYsIDczLCAxMjgsIAotICAgIDg0LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCA4NCwgNzYsIDcyLCA4NywgNjksIDEyOCwgODQsIDc2LCA3MiwgODUsIDEyOCwgCi0gICAgODQsIDc2LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDczLCAxMjgsIDg0LCAKLSAgICA3NiwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgNzYsIDcyLCA2OSwgMTI4LCA4NCwgNzYsIDcyLCA2NSwgMTI4LCA4NCwgNzYsIAotICAgIDY5LCA2OSwgMTI4LCA4NCwgNzYsIDY1LCAxMjgsIDg0LCA3NCwgNjksIDEyOCwgODQsIDczLCA4OCwgMTI4LCA4NCwgNzMsIAotICAgIDg3LCA3OCwgMTI4LCA4NCwgNzMsIDg3LCA2NSwgMjE4LCA4NCwgNzMsIDg0LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA4NCwgCi0gICAgNzMsIDg0LCA3NiwgNzksIDEyOCwgODQsIDczLCA4NCwgMTkzLCA4NCwgNzMsIDg0LCAxMjgsIDg0LCA3MywgODIsIDg5LCAKLSAgICA2NSwgNzUsIDEyOCwgODQsIDczLCA4MiwgODQsIDE5MywgODQsIDczLCA4MiwgNzksIDc4LCA3MywgNjUsIDIwNiwgODQsIAotICAgIDczLCA4MiwgNjksIDE5NiwgODQsIDczLCA4MiwgMTI4LCA4NCwgNzMsIDIxMCwgODQsIDczLCA4MCwgODAsIDczLCAxMjgsIAotICAgIDg0LCA3MywgODAsIDY5LCA3MiwgNjUsIDEyOCwgODQsIDczLCA4MCwgMTI4LCA4NCwgNzMsIDIwOCwgODQsIDczLCA3OCwgCi0gICAgODksIDEyOCwgODQsIDczLCA3OCwgMjE3LCA4NCwgNzMsIDc4LCA3OCwgNjksIDEyOCwgODQsIDczLCA3OCwgNjcsIDg0LCAKLSAgICA4NSwgODIsIDY5LCAxMjgsIDg0LCA3MywgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCA3MywgNzcsIDY5LCA4MywgCi0gICAgMTI4LCA4NCwgNzMsIDc3LCA2OSwgMjEwLCA4NCwgNzMsIDc3LCA2OSwgMTI4LCA4NCwgNzMsIDc2LCA2OCwgMTk3LCA4NCwgCi0gICAgNzMsIDc2LCAxMjgsIDg0LCA3MywgMjA0LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCAKLSAgICA4NCwgNzIsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgCi0gICAgNjksIDc5LCA3NSwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODQsIDczLCAKLSAgICA3NSwgNjksIDg1LCA4NCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODQsIDczLCA3NSwgCi0gICAgNjksIDg1LCA4NCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNjcsIAotICAgIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDIxMiwgODQsIDczLCA3MSwgNzIsIDg0LCA3NiwgODksIDQ1LCA2NywgNzYsIDc5LCA4MywgNjksIDE5NiwgODQsIDczLCAKLSAgICA3MSwgNzIsIDIxMiwgODQsIDczLCA3MSwgNjksIDgyLCAxMjgsIDg0LCA3MywgNzEsIDY5LCAyMTAsIDg0LCA3MywgNzAsIAotICAgIDczLCA3OCwgNjUsIDcxLCAyMDAsIDg0LCA3MywgNjksIDg4LCAxMjgsIDg0LCA3MywgNjksIDgwLCAxMjgsIDg0LCA3MywgCi0gICAgMTk3LCA4NCwgNzMsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDg0LCA3MywgNjcsIDc1LCAxMjgsIDg0LCA3MywgNjcsIDIwMywgCi0gICAgODQsIDczLCA2NSwgODIsIDY1LCAxMjgsIDg0LCA3MiwgOTAsIDEyOCwgODQsIDcyLCA4OSwgNzksIDc5LCAyMDUsIDg0LCAKLSAgICA3MiwgODcsIDc5LCA3OSwgMTI4LCA4NCwgNzIsIDg3LCA3OSwgMTI4LCA4NCwgNzIsIDg3LCA3MywgNzMsIDEyOCwgODQsIAotICAgIDcyLCA4NywgNzMsIDEyOCwgODQsIDcyLCA4NywgNjksIDY5LCAxMjgsIDg0LCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4NCwgCi0gICAgNzIsIDg3LCA2NSwgMTI4LCA4NCwgNzIsIDg1LCA4MiwgMjExLCA4NCwgNzIsIDg1LCA4MiwgNzMsIDgzLCA2NSwgMjE4LCAKLSAgICA4NCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODQsIDcyLCA4NSwgNzgsIDY4LCA2OSwgODIsIDgzLCA4NCwgNzksIDgyLCA3NywgCi0gICAgMTI4LCA4NCwgNzIsIDg1LCA3OCwgNjgsIDY5LCA4MiwgMTI4LCA4NCwgNzIsIDg1LCA3OCwgNjgsIDY5LCAyMTAsIDg0LCAKLSAgICA3MiwgODUsIDc3LCA2NiwgMjExLCA4NCwgNzIsIDgyLCA3OSwgODcsIDczLCA3OCwgMTk5LCA4NCwgNzIsIDgyLCA3OSwgODUsIAotICAgIDcxLCA3MiwgMTI4LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCAyMDAsIDg0LCA3MiwgODIsIDY5LCA2OSwgNDUsIDg0LCA3MiwgCi0gICAgNzMsIDgyLCA4NCwgODksIDEyOCwgODQsIDcyLCA4MiwgNjksIDY5LCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDg0LCAKLSAgICA3MiwgODIsIDY5LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgODQsIDcyLCA4MiwgNjksIDY5LCA0NSwgNjksIDIwNSwgODQsIAotICAgIDcyLCA4MiwgNjksIDY5LCA0NSwgMTk2LCA4NCwgNzIsIDgyLCA2OSwgNjUsIDY4LCAxMjgsIDg0LCA3MiwgNzksIDg1LCA4MywgCi0gICAgNjUsIDc4LCA2OCwgMjExLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY1LCA3OCwgNjgsIDEyOCwgODQsIDcyLCA3OSwgODUsIDgzLCAKLSAgICA2NSwgNzgsIDE5NiwgODQsIDcyLCA3OSwgODUsIDcxLCA3MiwgMjEyLCA4NCwgNzIsIDc5LCA4NSwgMTI4LCA4NCwgNzIsIAotICAgIDc5LCA4MiwgNzgsIDEyOCwgODQsIDcyLCA3OSwgODIsIDIwNiwgODQsIDcyLCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3MiwgCi0gICAgNzksIDY1LCAxMjgsIDg0LCA3MiwgMjA3LCA4NCwgNzIsIDczLCA4NSwgODQsIDcyLCAxMjgsIDg0LCA3MiwgNzMsIDg0LCAKLSAgICA2NSwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCA0NSwgODMsIDY5LCA2NywgNzksIDc4LCAxOTYsIDg0LCA3MiwgNzMsIAotICAgIDgyLCA4NCwgODksIDQ1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgMjE3LCA4NCwgNzIsIDczLCA4MiwgCi0gICAgODQsIDY5LCA2OSwgNzgsIDEyOCwgODQsIDcyLCA3MywgODIsIDg0LCA2OSwgNjksIDIwNiwgODQsIDcyLCA3MywgODIsIDY4LCAKLSAgICA4MywgMTI4LCA4NCwgNzIsIDczLCA4MiwgNjgsIDIxMSwgODQsIDcyLCA3MywgODIsIDY4LCAxMjgsIDg0LCA3MiwgNzMsIAotICAgIDgyLCAxOTYsIDg0LCA3MiwgNzMsIDIwNiwgODQsIDcyLCA3MywgNzMsIDEyOCwgODQsIDcyLCA3MywgNzEsIDcyLCAxMjgsIAotICAgIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDIwMCwgODQsIDcyLCA2OSwgODksIDEyOCwgODQsIDcyLCA2OSwgODQsIDcyLCA2OSwgCi0gICAgMTI4LCA4NCwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgODQsIDcyLCA2OSwgODQsIDY1LCAxMjgsIDg0LCA3MiwgNjksIDg0LCAKLSAgICAxOTMsIDg0LCA3MiwgNjksIDgzLCA4MCwgNzMsIDY1LCAyMDYsIDg0LCA3MiwgNjksIDgzLCA2OSwgNzksIDgzLCAxMjgsIAotICAgIDg0LCA3MiwgNjksIDgzLCA2OSwgNzksIDIxMSwgODQsIDcyLCA2OSwgMjExLCA4NCwgNzIsIDY5LCA4MiwgNzcsIDc5LCA2OCwgCi0gICAgODksIDc4LCA2NSwgNzcsIDczLCA2NywgMTI4LCA4NCwgNzIsIDY5LCA4MiwgNjksIDcwLCA3OSwgODIsIDY5LCAxMjgsIDg0LCAKLSAgICA3MiwgNjksIDgyLCAxOTcsIDg0LCA3MiwgNjksIDIwNiwgODQsIDcyLCA2OSwgNzcsIDY1LCA4NCwgNzMsIDgzLCA3NywgNzksIAotICAgIDIxMSwgODQsIDcyLCA2OSwgNzcsIDY1LCAxMjgsIDg0LCA3MiwgNjksIDc3LCAxOTMsIDg0LCA3MiwgNjksIDcyLCAxMjgsIAotICAgIDg0LCA3MiwgNjksIDIwMCwgODQsIDcyLCAxOTcsIDg0LCA3MiwgNjUsIDg3LCAxMjgsIDg0LCA3MiwgNjUsIDc4LCA4NCwgCi0gICAgNzIsIDY1LCA3NSwgNzIsIDY1LCA4NCwgMTI4LCA4NCwgNzIsIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA3MiwgNjUsIDc4LCAKLSAgICAxMjgsIDg0LCA3MiwgNjUsIDIwNiwgODQsIDcyLCA2NSwgNzYsIDEyOCwgODQsIDcyLCA2NSwgMjA0LCA4NCwgNzIsIDY1LCAKLSAgICA3MiwgNjUsIDc4LCAxMjgsIDg0LCA3MiwgNjUsIDY1LCA3OCwgMTkzLCA4NCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAxMjgsIAotICAgIDg0LCA3MiwgNDUsIDY3LCA4MiwgNjksIDE5NywgODQsIDY5LCA4OCwgODQsIDEyOCwgODQsIDY5LCA4OCwgMTI4LCA4NCwgCi0gICAgNjksIDg2LCA3MywgODIsIDEyOCwgODQsIDY5LCA4NSwgODQsIDY5LCA4NSwgODgsIDEyOCwgODQsIDY5LCA4NSwgODQsIDY5LCAKLSAgICA4NSwgODcsIDY5LCA3OCwgMTI4LCA4NCwgNjksIDg1LCA4NCwgMTI4LCA4NCwgNjksIDg1LCA3OCwgMTI4LCA4NCwgNjksIAotICAgIDg1LCA2NSwgNjksIDgxLCAxMjgsIDg0LCA2OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgODQsIDY5LCA4NSwgMTI4LCA4NCwgCi0gICAgNjksIDg0LCA4MiwgNjUsIDgzLCA3MywgNzcsIDc5LCA4NSwgMTI4LCA4NCwgNjksIDg0LCA4MiwgNjUsIDgzLCA2OSwgNzcsIAotICAgIDY5LCAxMjgsIDg0LCA2OSwgODQsIDgyLCA2NSwgODAsIDc2LCA3MywgMTI4LCA4NCwgNjksIDg0LCA4MiwgNjUsIDcwLCA3OSwgCi0gICAgNzgsIDczLCA2NSwgODMsIDEyOCwgODQsIDY5LCA4NCwgNzIsIDEyOCwgODQsIDY5LCA4NCwgMjAwLCA4NCwgNjksIDg0LCAKLSAgICA2NSwgODIsIDg0LCA3OSwgMjExLCA4NCwgNjksIDg0LCA2NSwgODIsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA4NCwgNjksIDg0LCAxMjgsIDg0LCA2OSwgMjEyLCA4NCwgNjksIDgzLCA4MywgNjksIDgyLCA2NSwgMTI4LCA4NCwgCi0gICAgNjksIDgzLCA4MywgNjksIDgyLCAxOTMsIDg0LCA2OSwgODMsIDgzLCA2NSwgODIsIDc5LCAyMDYsIDg0LCA2OSwgODMsIAotICAgIDIwMCwgODQsIDY5LCA4MiwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgODIsIDEyOCwgODQsIDY5LCA4MCwgMTI4LCA4NCwgCi0gICAgNjksIDc4LCA4NSwgODQsIDc5LCAxMjgsIDg0LCA2OSwgNzgsIDg1LCAxMjgsIDg0LCA2OSwgNzgsIDIxMywgODQsIDY5LCAKLSAgICA3OCwgODQsIDcyLCAxMjgsIDg0LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCA2OSwgNzgsIDIxMSwgODQsIDY5LCA3OCwgNzgsIAotICAgIDczLCAyMTEsIDg0LCA2OSwgNzgsIDcxLCAxOTcsIDg0LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAKLSAgICAxMjgsIDg0LCA2OSwgNzgsIDEyOCwgODQsIDY5LCAyMDYsIDg0LCA2OSwgNzcsIDgwLCA4NSwgMjExLCA4NCwgNjksIDc2LCAKLSAgICA4NSwgMTI4LCA4NCwgNjksIDc2LCA3OSwgODUsIDIxMSwgODQsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDg0LCA2OSwgNzYsIAotICAgIDczLCA4MywgNzIsIDE5MywgODQsIDY5LCA3NiwgNjksIDg2LCA3MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIDY5LCA3NiwgCi0gICAgNjksIDgzLCA2NywgNzksIDgwLCA2OSwgMTI4LCA4NCwgNjksIDc2LCA2OSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDg0LCAKLSAgICA2OSwgNzYsIDY5LCA4MCwgNzIsIDc5LCA3OCwgMTk3LCA4NCwgNjksIDc2LCA2OSwgNzMsIDY1LCAxMjgsIDg0LCA2OSwgNzYsIAotICAgIDY5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4NCwgNjksIDczLCA4NywgODMsIDEyOCwgODQsIDY5LCA3MSwgNjksIDcyLCAKLSAgICAxMjgsIDg0LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA4NCwgNjksIDE5NywgODQsIDY5LCA2OCwgODUsIDc4LCA3MSwgMTI4LCAKLSAgICA4NCwgNjksIDY1LCA4MiwgMjExLCA4NCwgNjksIDY1LCA4MiwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgODAsIDc5LCA3NSwgCi0gICAgNjksIDE5NiwgODQsIDY5LCA2NSwgODIsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIDcyLCA2NSwgNzgsIDc1LCA2OSwgMTk2LCAKLSAgICA4NCwgNjksIDY1LCA4MiwgNjgsIDgyLCA3OSwgODAsIDQ1LCA2NiwgNjUsIDgyLCA2NiwgNjksIDE5NiwgODQsIDY5LCA2NSwgCi0gICAgODIsIDQ1LCA3OSwgNzAsIDE5OCwgODQsIDY5LCA2NSwgNjcsIDg1LCAyMDgsIDg0LCA2OSwgNDUsIDg1LCAxMjgsIDg0LCAKLSAgICA2OSwgNDUsIDUwLCAxMjgsIDg0LCA2NywgNzIsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA2NywgNzIsIDY5LCA3MiwgNjksIAotICAgIDIwMCwgODQsIDY3LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA2NywgNzIsIDY5LCAyMDAsIDg0LCA2NywgNzIsIDY5LCAxMjgsIAotICAgIDg0LCAxOTUsIDg0LCA2NSwgODksIDEyOCwgODQsIDY1LCA4OCwgNzMsIDEyOCwgODQsIDY1LCA4OCwgMTI4LCA4NCwgNjUsIAotICAgIDg3LCA2OSwgNzYsIDc2LCA2OSwgNzcsIDY5LCAyMTIsIDg0LCA2NSwgODcsIDY1LCAxMjgsIDg0LCA2NSwgODcsIDEyOCwgCi0gICAgODQsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDg0LCA2NSwgODYsIDEyOCwgODQsIDY1LCAyMTQsIDg0LCAKLSAgICA2NSwgODUsIDgyLCA4NSwgODMsIDEyOCwgODQsIDY1LCAyMTMsIDg0LCA2NSwgODQsIDg3LCA2OSwgNjksIDc2LCAxMjgsIAotICAgIDg0LCA2NSwgODQsIDg3LCA2OSwgNjksIDIwNCwgODQsIDY1LCA4NCwgODQsIDc5LCA3OSwgNjksIDE5NiwgODQsIDY1LCA4NCwgCisgICAgMTI4LCA4NSwgNDgsIDQ4LCA0OSwgMTI4LCA4NSwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA4NSwgNDUsIDczLCAKKyAgICA0NSwgNzMsIDEyOCwgODUsIDQ1LCA2OSwgNzksIDQ1LCA2OSwgODUsIDEyOCwgODUsIDQ1LCA2NiwgODIsIDc0LCA3MSwgODUsIAorICAgIDEyOCwgODQsIDkwLCA4NSwgMTI4LCA4NCwgOTAsIDc5LCA2NSwgMTI4LCA4NCwgOTAsIDc5LCAxMjgsIDg0LCA5MCwgNzMsIAorICAgIDIxMCwgODQsIDkwLCA3MywgMTI4LCA4NCwgOTAsIDY5LCA2OSwgMTI4LCA4NCwgOTAsIDY5LCAxMjgsIDg0LCA5MCwgNjUsIAorICAgIDY1LCAxMjgsIDg0LCA5MCwgNjUsIDEyOCwgODQsIDkwLCAxMjgsIDg0LCA4OSwgMjEwLCA4NCwgODksIDgwLCA2OSwgNDUsIAorICAgIDE4MywgODQsIDg5LCA4MCwgNjksIDQ1LCA1NCwgMTI4LCA4NCwgODksIDgwLCA2OSwgNDUsIDE4MiwgODQsIDg5LCA4MCwgCisgICAgNjksIDQ1LCA1MywgMTI4LCA4NCwgODksIDgwLCA2OSwgNDUsIDE4MSwgODQsIDg5LCA4MCwgNjksIDQ1LCA1MiwgMTI4LCAKKyAgICA4NCwgODksIDgwLCA2OSwgNDUsIDE4MCwgODQsIDg5LCA4MCwgNjksIDQ1LCA1MSwgMTI4LCA4NCwgODksIDgwLCA2OSwgNDUsIAorICAgIDE3OSwgODQsIDg5LCA4MCwgNjksIDQ1LCAxNzgsIDg0LCA4OSwgODAsIDY5LCA0NSwgNDksIDQ1LCA1MCwgMTI4LCA4NCwgCisgICAgODksIDgwLCA2OSwgNDUsIDE3NywgODQsIDg5LCA4MCwgMTk3LCA4NCwgODksIDc5LCAxMjgsIDg0LCA4OSwgNzMsIDEyOCwgCisgICAgODQsIDg5LCA2OSwgMTI4LCA4NCwgODksIDY1LCA4OSwgMTI4LCA4NCwgODksIDY1LCAxMjgsIDg0LCA4OCwgODcsIDg2LCAKKyAgICAxMjgsIDg0LCA4OCwgODcsIDIxNCwgODQsIDg4LCA3MiwgNjksIDY5LCAyMDIsIDg0LCA4NywgNzksIDc5LCAxMjgsIDg0LCAKKyAgICA4NywgNzksIDQ1LCA4NywgNjUsIDIxNywgODQsIDg3LCA3OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODQsIAorICAgIDg3LCA3OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgODQsIDg3LCA3OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NCwgCisgICAgODcsIDc5LCA0NSwgNjksIDIwNSwgODQsIDg3LCA3OSwgNDUsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCA4NCwgODcsIDczLCAKKyAgICA4MywgODQsIDczLCA3OCwgNzEsIDEyOCwgODQsIDg3LCA3MywgODMsIDg0LCA2OSwgMTk2LCA4NCwgODcsIDczLCA3MywgCisgICAgMTI4LCA4NCwgODcsIDczLCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4NCwgODcsIDc5LCAxMjgsIDg0LCAKKyAgICA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4NCwgNzIsIDgyLCA2OSwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgCisgICAgNDUsIDgzLCA3MywgODgsIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDgzLCA2OSwgODYsIDY5LCA3OCwgMTI4LCAKKyAgICA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgCisgICAgNzgsIDczLCA3OCwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDcwLCA3OSwgODUsIDgyLCAxMjgsIDg0LCAKKyAgICA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3MCwgNzMsIDg2LCA2OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgCisgICAgNjksIDczLCA3MSwgNzIsIDg0LCAyMDAsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA2OSwgNzMsIDcxLCA3MiwgODQsIAorICAgIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDIxNywgODQsIDg3LCA2OSwgCisgICAgNzYsIDg2LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODQsIDg3LCA2OSwgNzYsIDg2LCA2OSwgMTI4LCAKKyAgICA4NCwgODcsIDY5LCA3NiwgODYsIDE5NywgODQsIDg3LCA2OSwgNzYsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIDg0LCA4NywgNjksIAorICAgIDc2LCA3MCwgODQsIDcyLCAxMjgsIDg0LCA4NywgNjksIDEyOCwgODQsIDg3LCA2NSwgNjUsIDEyOCwgODQsIDg3LCA2NSwgCisgICAgMTI4LCA4NCwgODYsIDgyLCA3MywgNjgsIDc5LCAxMjgsIDg0LCA4NiwgNzMsIDc3LCA2NSwgNjgsIDg1LCAyMTAsIDg0LCAKKyAgICA4NSwgODgsIDEyOCwgODQsIDg1LCA4NSwgNzcsIDg1LCAxMjgsIDg0LCA4NSwgODUsIDEyOCwgODQsIDg1LCA4NCwgODQsIAorICAgIDg5LCAxMjgsIDg0LCA4NSwgODQsIDY5LCA4OSwgNjUsIDgzLCA2NSwgODQsIDEyOCwgODQsIDg1LCA4NCwgMTI4LCA4NCwgCisgICAgODUsIDgyLCA4OCwgMTI4LCA4NCwgODUsIDgyLCA4NSwgMTI4LCA4NCwgODUsIDgyLCA4NCwgNzYsIDY5LCAxMjgsIDg0LCAKKyAgICA4NSwgODIsIDc5LCA1MCwgMTI4LCA4NCwgODUsIDgyLCA3OCwgODMsIDg0LCA3MywgNzYsIDY5LCAxMjgsIDg0LCA4NSwgODIsIAorICAgIDc4LCA2OSwgMTk2LCA4NCwgODUsIDgyLCAyMDYsIDg0LCA4NSwgODIsIDc1LCA3MywgODMsIDIwMCwgODQsIDg1LCA4MiwgCisgICAgNzUsIDczLCAxOTUsIDg0LCA4NSwgODIsIDc1LCA2OSwgODksIDEyOCwgODQsIDg1LCA4MiwgNjYsIDY1LCA3OCwgMTI4LCAKKyAgICA4NCwgODUsIDgyLCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIDg1LCA3OSwgODgsIDEyOCwgODQsIDg1LCA3OSwgODQsIAorICAgIDEyOCwgODQsIDg1LCA3OSwgODAsIDEyOCwgODQsIDg1LCA3OSwgMTI4LCA4NCwgODUsIDc4LCA3OCwgODksIDEyOCwgODQsIAorICAgIDg1LCA3NywgNjksIDg0LCA2OSwgODMsIDEyOCwgODQsIDg1LCA3NywgNjUsIDY5LCAxMjgsIDg0LCA4NSwgNzcsIDEyOCwgCisgICAgODQsIDg1LCAyMDUsIDg0LCA4NSwgNzYsIDczLCA4MCwgMTI4LCA4NCwgODUsIDc1LCA4NywgNjksIDc4LCA4NCwgNzMsIDgzLCAKKyAgICAxMjgsIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAyMDMsIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg0LCAKKyAgICA4NSwgNzEsIDE3OCwgODQsIDg1LCA2NiwgMTI4LCA4NCwgODUsIDY1LCA4MiwgNjksIDE5OSwgODQsIDg1LCA2NSwgNjksIAorICAgIDgwLCAxMjgsIDg0LCA4NSwgNjUsIDY5LCAxMjgsIDg0LCAyMTMsIDg0LCA4NCwgODUsIDg1LCAxMjgsIDg0LCA4NCwgODUsIAorICAgIDY4LCA2OCwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDY1LCA3MSwgMTI4LCA4NCwgODQsIDg1LCAKKyAgICAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgMTI4LCA4NCwgODQsIDg0LCA2NSwgMTI4LCA4NCwgODQsIDgzLCA4NSwgMTI4LCAKKyAgICA4NCwgODQsIDgzLCA3OSwgMTI4LCA4NCwgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2OSwgNjksIDEyOCwgODQsIAorICAgIDg0LCA4MywgNjksIDEyOCwgODQsIDg0LCA4MywgNjUsIDEyOCwgODQsIDg0LCA3OSwgNzksIDEyOCwgODQsIDg0LCA3MywgCisgICAgNzMsIDEyOCwgODQsIDg0LCA3MywgMTI4LCA4NCwgODQsIDcyLCA4NywgNjksIDEyOCwgODQsIDg0LCA3MiwgODUsIDEyOCwgCisgICAgODQsIDg0LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIDg0LCAKKyAgICA4NCwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2NSwgNjUsIDEyOCwgODQsIAorICAgIDg0LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCA4NCwgCisgICAgODQsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjUsIDg5LCAKKyAgICA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgODQsIDY1LCA4NSwgMTI4LCA4NCwgODQsIDY1LCA3MywgMTI4LCA4NCwgODQsIAorICAgIDY1LCA2NSwgMTI4LCA4NCwgODQsIDUwLCAxMjgsIDg0LCA4MywgODcsIDY5LCAxMjgsIDg0LCA4MywgODcsIDY2LCAxMjgsIAorICAgIDg0LCA4MywgODcsIDY1LCAxMjgsIDg0LCA4MywgODYsIDEyOCwgODQsIDgzLCA4MywgNjksIDEyOCwgODQsIDgzLCA4MywgCisgICAgNjUsIDEyOCwgODQsIDgzLCA3OSwgMjE0LCA4NCwgODMsIDczLCA4NSwgMTI4LCA4NCwgODMsIDcyLCA4NSwgNzEsIDgzLCAKKyAgICAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCAyMDMsIDg0LCA4MywgNzIsIAorICAgIDc5LCA3OSwgNzQsIDEyOCwgODQsIDgzLCA3MiwgNjksIDgzLCAxMjgsIDg0LCA4MywgNzIsIDY5LCA3MSwgMTI4LCA4NCwgCisgICAgODMsIDcyLCA2OSwgMTk5LCA4NCwgODMsIDcyLCA2OSwgNjksIDc0LCAxMjgsIDg0LCA4MywgNzIsIDY5LCAxMjgsIDg0LCAKKyAgICA4MywgNzIsIDY1LCAxOTQsIDg0LCA4MywgNzIsIDY1LCAxMjgsIDg0LCA4MywgNjksIDgyLCA2OSwgMTI4LCA4NCwgODMsIAorICAgIDY5LCA2OSwgNjYsIDEyOCwgODQsIDgzLCA2NSwgNjgsIDczLCAxMjgsIDg0LCA4MywgNjUsIDY4LCAyMDEsIDg0LCA4MywgCisgICAgNjUsIDY2LCAxMjgsIDg0LCA4MywgNjUsIDY1LCA2OCwgNzMsIDg5LCAxMjgsIDg0LCA4MywgNjUsIDY1LCAxMjgsIDg0LCAKKyAgICA4MywgMTkzLCA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCA4NCwgODIsIDg1LCA4NCwgNzIsIDEyOCwgODQsIAorICAgIDgyLCA4NSwgNzgsIDc1LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIDg0LCA2OSwgMTk2LCA4NCwgODIsIDg1LCA3NywgCisgICAgODAsIDY5LCA4NCwgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA1NywgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCAKKyAgICA1NiwgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA1NSwgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA1NCwgCisgICAgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA1MywgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA1MiwgMTI4LCAKKyAgICA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA1MSwgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA1MCwgNDksIDEyOCwgODQsIAorICAgIDgyLCA4NSwgNzcsIDgwLCA0NSwgNTAsIDQ4LCAxMjgsIDg0LCA4MiwgODUsIDc3LCA4MCwgNDUsIDUwLCAxMjgsIDg0LCA4MiwgCisgICAgODUsIDc3LCA4MCwgNDUsIDQ5LCA1NywgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA0OSwgNTYsIDEyOCwgODQsIDgyLCAKKyAgICA4NSwgNzcsIDgwLCA0NSwgNDksIDU1LCAxMjgsIDg0LCA4MiwgODUsIDc3LCA4MCwgNDUsIDQ5LCA1NCwgMTI4LCA4NCwgODIsIAorICAgIDg1LCA3NywgODAsIDQ1LCA0OSwgNTMsIDEyOCwgODQsIDgyLCA4NSwgNzcsIDgwLCA0NSwgNDksIDUyLCAxMjgsIDg0LCA4MiwgCisgICAgODUsIDc3LCA4MCwgNDUsIDQ5LCA1MSwgMTI4LCA4NCwgODIsIDg1LCA3NywgODAsIDQ1LCA0OSwgNTAsIDEyOCwgODQsIDgyLCAKKyAgICA4NSwgNzcsIDgwLCA0NSwgNDksIDQ5LCAxMjgsIDg0LCA4MiwgODUsIDc3LCA4MCwgNDUsIDQ5LCA0OCwgMTI4LCA4NCwgODIsIAorICAgIDg1LCA3NywgODAsIDQ1LCA0OSwgMTI4LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgODIsIDg1LCA2NywgNzUsIDEyOCwgCisgICAgODQsIDgyLCA3OSwgODAsIDczLCA2NywgNjUsIDIwNCwgODQsIDgyLCA3OSwgODAsIDcyLCA4OSwgMTI4LCA4NCwgODIsIDc5LCAKKyAgICA3NywgNzMsIDc1LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgCisgICAgNzksIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAorICAgIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCAKKyAgICA3OSwgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDIwNiwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAorICAgIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc2LCA3NiwgNjksIDg5LCA2NiwgODUsIDgzLCAKKyAgICAxMjgsIDg0LCA4MiwgNzksIDc1LCA4NSwgODQsIDY1LCA4MywgODQsIDIwMSwgODQsIDgyLCA3OSwgNjksIDkwLCA2OSwgNzgsIAorICAgIDczLCA2NSwgMjA2LCA4NCwgODIsIDczLCA4NSwgNzcsIDgwLCA3MiwgMTI4LCA4NCwgODIsIDczLCA4NCwgNzksIDIxMSwgCisgICAgODQsIDgyLCA3MywgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA3MywgNzcsIAorICAgIDc5LCA4NSwgMTI4LCA4NCwgODIsIDczLCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzksIDY4LCAKKyAgICAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCA2OSwgMTI4LCA4NCwgODIsIAorICAgIDczLCA4MCwgNzYsIDE5NywgODQsIDgyLCA3MywgNzksIDIwNiwgODQsIDgyLCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCA4MywgCisgICAgMTI4LCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAKKyAgICAyMTEsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgODQsIDgyLCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCA3OCwgCisgICAgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzYsIDczLCAKKyAgICA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgODQsIDEyOCwgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgCisgICAgMjEyLCA4NCwgODIsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCAKKyAgICA2NSwgMjEwLCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCA4NCwgODIsIAorICAgIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODQsIDgyLCA3MywgNjUsIDc4LCAKKyAgICA3MSwgNzYsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDY1LCAxMjgsIAorICAgIDg0LCA4MiwgNzMsIDEyOCwgODQsIDgyLCA2OSwgODMsIDczLCA3NiwgNzYsIDc5LCAxMjgsIDg0LCA4MiwgNjksIDc4LCA2OCwgCisgICAgMTI4LCA4NCwgODIsIDY5LCA3OCwgMTk2LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUxLCAxMjgsIDg0LCAKKyAgICA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA0OSwgCisgICAgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODIsIDY5LCAxOTcsIDg0LCA4MiwgNjksIDY1LCA2OCwgNzMsIDc4LCAKKyAgICA3MSwgMTI4LCA4NCwgODIsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA4NiwgNjksIDc2LCA0NSwgODcsIDY1LCA3NiwgNzYsIAorICAgIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDg0LCA4MiwgNjUsIDg2LCA2OSwgNzYsIDQ1LCA3MCwgNzYsIDc5LCA3OSwgODIsIDgwLCAKKyAgICA3NiwgNjUsIDc4LCAxOTcsIDg0LCA4MiwgNjUsIDgwLCA2OSwgOTAsIDczLCA4NSwgNzcsIDEyOCwgODQsIDgyLCA2NSwgNzgsIAorICAgIDgzLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4MCwgNzksIDgzLCA3MywgODQsIDczLCAKKyAgICA3OSwgMjA2LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgMjEyLCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIAorICAgIDgzLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgMjA2LCA4NCwgCisgICAgODIsIDY1LCA3NywgODcsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA3NywgMTI4LCA4NCwgODIsIDY1LCAyMDUsIDg0LCAKKyAgICA4MiwgNjUsIDczLCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3MywgMjA2LCA4NCwgODIsIDY1LCA3MywgNzYsIDczLCA3OCwgCisgICAgMTk5LCA4NCwgODIsIDY1LCA3MCwgNzAsIDczLCA2NywgMTI4LCA4NCwgODIsIDY1LCA3MCwgNzAsIDczLCAxOTUsIDg0LCAKKyAgICA4MiwgNjUsIDY4LCAxOTcsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA4MiwgNjUsIDY3LCA3NSwgNjYsIAorICAgIDY1LCA3NiwgNzYsIDEyOCwgODQsIDgyLCA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgNjUsIDEyOCwgODQsIDgyLCAxMjgsIAorICAgIDg0LCA3OSwgODgsIDEyOCwgODQsIDc5LCA4NywgNjksIDgyLCAxMjgsIDg0LCA3OSwgODcsIDY1LCA4MiwgNjgsIDIxMSwgCisgICAgODQsIDc5LCA4NiwgMTI4LCA4NCwgNzksIDg1LCA4MiwgNzgsIDc5LCA3MywgMjExLCA4NCwgNzksIDg1LCA2NywgNzIsIDg0LCAKKyAgICA3OSwgNzgsIDE5NywgODQsIDc5LCA4NSwgNjcsIDcyLCA3MywgNzgsIDE5OSwgODQsIDc5LCA4NSwgNjcsIDcyLCA2OSwgCisgICAgMjExLCA4NCwgNzksIDg1LCA2NywgMjAwLCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgNzksIDg0LCAxMjgsIDg0LCA3OSwgCisgICAgODMsIDEyOCwgODQsIDc5LCA4MiwgODQsIDc5LCA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgODMsIDc5LCA0NSwgODcsIDY1LCAKKyAgICA3NiwgNzYsIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDg0LCA3OSwgODIsIDgzLCA3OSwgNDUsIDcwLCA3NiwgNzksIDc5LCA4MiwgCisgICAgODAsIDc2LCA2NSwgNzgsIDE5NywgODQsIDc5LCA4MiwgODMsIDc5LCAxMjgsIDg0LCA3OSwgODIsIDc4LCA2NSwgNjgsIDc5LCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgMTI4LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgCisgICAgMjExLCA4NCwgNzksIDgyLCA2NywgNzIsIDEyOCwgODQsIDc5LCA4MSwgMTI4LCA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAKKyAgICAxMjgsIDg0LCA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDY5LCAxOTYsIDg0LCA3OSwgODAsIDEyOCwgODQsIAorICAgIDc5LCAyMDgsIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgNzksIDc5LCA3OCwgMTI4LCA4NCwgNzksIDc4LCA3OSwgCisgICAgODMsIDEyOCwgODQsIDc5LCA3OCwgNzEsIDg1LCA2OSwgMTI4LCA4NCwgNzksIDc4LCA3MSwgODUsIDE5NywgODQsIDc5LCAKKyAgICA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NiwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU1LCAxMjgsIAorICAgIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MywgMTI4LCA4NCwgNzksIDc4LCA2OSwgCisgICAgNDUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MCwgMTI4LCAKKyAgICA4NCwgNzksIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgNzgsIDY1LCAyMDQsIAorICAgIDg0LCA3OSwgNzcsIDgwLCA3MywgMTI4LCA4NCwgNzksIDc3LCA2NSwgODQsIDc5LCAxMjgsIDg0LCA3OSwgNzYsIDc5LCA3OCwgCisgICAgNzEsIDEyOCwgODQsIDc5LCA3NSwgODksIDIwNywgODQsIDc5LCA3MywgNzYsIDY5LCA4NCwgMTI4LCA4NCwgNzksIDcxLCAKKyAgICA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDc5LCA2OCwgMjA3LCA4NCwgNzksIDY1LCA3OCwgNjgsIDY1LCA3NSwgNzIsIAorICAgIDczLCA2NSwgODQsIDEyOCwgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIDEyOCwgODQsIDc2LCA4NiwgMTI4LCA4NCwgNzYsIAorICAgIDg1LCAxMjgsIDg0LCA3NiwgNzksIDEyOCwgODQsIDc2LCA3MywgMTI4LCA4NCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgODQsIAorICAgIDc2LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDg1LCAxMjgsIDg0LCA3NiwgNzIsIDc5LCA3OSwgMTI4LCA4NCwgCisgICAgNzYsIDcyLCA3OSwgMTI4LCA4NCwgNzYsIDcyLCA3MywgMTI4LCA4NCwgNzYsIDcyLCA2OSwgNjksIDEyOCwgODQsIDc2LCAKKyAgICA3MiwgNjksIDEyOCwgODQsIDc2LCA3MiwgNjUsIDEyOCwgODQsIDc2LCA2OSwgNjksIDEyOCwgODQsIDc2LCA2NSwgMTI4LCAKKyAgICA4NCwgNzQsIDY5LCAxMjgsIDg0LCA3MywgODgsIDEyOCwgODQsIDczLCA4NywgODIsIDEyOCwgODQsIDczLCA4NywgNzgsIAorICAgIDEyOCwgODQsIDczLCA4NywgNjUsIDIxOCwgODQsIDczLCA4NCwgODUsIDY1LCA2OSwgODAsIDEyOCwgODQsIDczLCA4NCwgCisgICAgNzYsIDc5LCAxMjgsIDg0LCA3MywgODQsIDc2LCAyMDcsIDg0LCA3MywgODQsIDE5MywgODQsIDczLCA4NCwgMTI4LCA4NCwgCisgICAgNzMsIDgyLCA4OSwgNjUsIDc1LCAxMjgsIDg0LCA3MywgODIsIDg0LCAxOTMsIDg0LCA3MywgODIsIDc5LCA3OCwgNzMsIDY1LCAKKyAgICAyMDYsIDg0LCA3MywgODIsIDcyLCA4NSwgODQsIDE5MywgODQsIDczLCA4MiwgNjksIDE5NiwgODQsIDczLCA4MiwgMTI4LCAKKyAgICA4NCwgNzMsIDIxMCwgODQsIDczLCA4MCwgODAsIDczLCAxMjgsIDg0LCA3MywgODAsIDY5LCA3MiwgNjUsIDEyOCwgODQsIAorICAgIDczLCA4MCwgMTI4LCA4NCwgNzMsIDIwOCwgODQsIDczLCA3OCwgODksIDEyOCwgODQsIDczLCA3OCwgMjE3LCA4NCwgNzMsIAorICAgIDc4LCA3OCwgNjksIDEyOCwgODQsIDczLCA3OCwgNjcsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDg0LCA3MywgNzgsIDY1LCA3MSwgCisgICAgNzcsIDY1LCAxMjgsIDg0LCA3MywgNzcsIDY5LCA4MywgMTI4LCA4NCwgNzMsIDc3LCA2OSwgMjEwLCA4NCwgNzMsIDc3LCAKKyAgICA2OSwgMTI4LCA4NCwgNzMsIDc2LCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA4NCwgNzMsIDc2LCA4NCwgNzMsIDc4LCAxOTksIAorICAgIDg0LCA3MywgNzYsIDg0LCAxMjgsIDg0LCA3MywgNzYsIDY5LCA4MywgMTI4LCA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgCisgICAgODQsIDczLCA3NiwgNjgsIDE5NywgODQsIDczLCA3NiwgMTI4LCA4NCwgNzMsIDIwNCwgODQsIDczLCA3NSwgNjksIDg1LCAKKyAgICA4NCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MywgCisgICAgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIAorICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgCisgICAgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIAorICAgIDg0LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3NSwgNzMsIDg5LCAKKyAgICA2OSwgNzksIDc1LCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDg0LCA3MywgNzUsIDY5LCAKKyAgICA4NSwgODQsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCAyMTIsIDg0LCA3MywgNzEsIDcyLCA4NCwgNzYsIDg5LCA0NSwgNjcsIAorICAgIDc2LCA3OSwgODMsIDY5LCAxOTYsIDg0LCA3MywgNzEsIDcyLCAyMTIsIDg0LCA3MywgNzEsIDY5LCA4MiwgMTI4LCA4NCwgCisgICAgNzMsIDcxLCA2OSwgMjEwLCA4NCwgNzMsIDcwLCA3MywgNzgsIDY1LCA3MSwgMjAwLCA4NCwgNzMsIDY5LCA4OCwgMTI4LCAKKyAgICA4NCwgNzMsIDY5LCA4MCwgMTI4LCA4NCwgNzMsIDE5NywgODQsIDczLCA2NywgNzUsIDY5LCA4NCwgODMsIDEyOCwgODQsIAorICAgIDczLCA2NywgNzUsIDY5LCA4NCwgMTI4LCA4NCwgNzMsIDY3LCA3NSwgMTI4LCA4NCwgNzMsIDY3LCAyMDMsIDg0LCA3MywgCisgICAgNjUsIDgyLCA2NSwgMTI4LCA4NCwgNzMsIDUwLCAxMjgsIDg0LCA3MiwgOTAsIDEyOCwgODQsIDcyLCA4OSwgNzksIDc5LCAKKyAgICAyMDUsIDg0LCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4NCwgNzIsIDg3LCA3OSwgMTI4LCA4NCwgNzIsIDg3LCA3MywgNzMsIAorICAgIDEyOCwgODQsIDcyLCA4NywgNzMsIDEyOCwgODQsIDcyLCA4NywgNjksIDY5LCAxMjgsIDg0LCA3MiwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA4NCwgNzIsIDg3LCA2NSwgMTI4LCA4NCwgNzIsIDg1LCA4MiwgMjExLCA4NCwgNzIsIDg1LCA4MiwgNzMsIDgzLCAKKyAgICA2NSwgMjE4LCA4NCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODQsIDcyLCA4NSwgNzgsIDY4LCA2OSwgODIsIDgzLCA4NCwgNzksIAorICAgIDgyLCA3NywgMTI4LCA4NCwgNzIsIDg1LCA3OCwgNjgsIDY5LCA4MiwgMTI4LCA4NCwgNzIsIDg1LCA3OCwgNjgsIDY5LCAKKyAgICAyMTAsIDg0LCA3MiwgODUsIDc3LCA2NiwgMjExLCA4NCwgNzIsIDg1LCA3NywgNjYsIDEyOCwgODQsIDcyLCA4MiwgNzksIAorICAgIDg3LCA3MywgNzgsIDE5OSwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgNzIsIDEyOCwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgCisgICAgMjAwLCA4NCwgNzIsIDgyLCA2OSwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDg0LCA3MiwgODIsIDY5LCAKKyAgICA2OSwgNDUsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDIxMCwgODQsIDcyLCA4MiwgNjksIDY5LCA0NSwgODAsIDY5LCA4MiwgCisgICAgNDUsIDY5LCAyMDUsIDg0LCA3MiwgODIsIDY5LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgODQsIDcyLCA4MiwgNjksIDY5LCAKKyAgICA0NSwgNjksIDIwNSwgODQsIDcyLCA4MiwgNjksIDY5LCA0NSwgMTk2LCA4NCwgNzIsIDgyLCA2OSwgNjksIDQ1LCA2NywgNzMsIAorICAgIDgyLCA2NywgNzYsIDE5NywgODQsIDcyLCA4MiwgNjksIDY1LCA2OCwgMTI4LCA4NCwgNzIsIDc5LCA4NSwgODMsIDY1LCA3OCwgCisgICAgNjgsIDgzLCAxMjgsIDg0LCA3MiwgNzksIDg1LCA4MywgNjUsIDc4LCA2OCwgMjExLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY1LCAKKyAgICA3OCwgNjgsIDEyOCwgODQsIDcyLCA3OSwgODUsIDgzLCA2NSwgNzgsIDE5NiwgODQsIDcyLCA3OSwgODUsIDcxLCA3MiwgCisgICAgMjEyLCA4NCwgNzIsIDc5LCA4NSwgMTI4LCA4NCwgNzIsIDc5LCA4MiwgNzgsIDEyOCwgODQsIDcyLCA3OSwgODIsIDIwNiwgCisgICAgODQsIDcyLCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3MiwgNzksIDc3LCAxMjgsIDg0LCA3MiwgNzksIDc0LCAxMjgsIDg0LCAKKyAgICA3MiwgNzksIDY1LCAxMjgsIDg0LCA3MiwgMjA3LCA4NCwgNzIsIDczLCA4NSwgODQsIDcyLCAxMjgsIDg0LCA3MiwgNzMsIAorICAgIDg0LCA2NSwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCA0NSwgODMsIDY5LCA2NywgNzksIDc4LCAxOTYsIDg0LCA3MiwgCisgICAgNzMsIDgyLCA4NCwgODksIDQ1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgMjE3LCA4NCwgNzIsIDczLCAKKyAgICA4MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgODQsIDcyLCA3MywgODIsIDg0LCA2OSwgNjksIDIwNiwgODQsIDcyLCA3MywgODIsIAorICAgIDY4LCA4MywgMTI4LCA4NCwgNzIsIDczLCA4MiwgNjgsIDIxMSwgODQsIDcyLCA3MywgODIsIDY4LCA0NSwgODMsIDg0LCA2NSwgCisgICAgNzEsIDE5NywgODQsIDcyLCA3MywgODIsIDY4LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCAxOTYsIDg0LCA3MiwgNzMsIDc4LCAKKyAgICA3NSwgNzMsIDc4LCAxOTksIDg0LCA3MiwgNzMsIDczLCAxMjgsIDg0LCA3MiwgNzMsIDcxLCA3MiwgMTI4LCA4NCwgNzIsIAorICAgIDczLCA2OSwgODUsIDg0LCAyMDAsIDg0LCA3MiwgNzMsIDY3LCAyMDMsIDg0LCA3MiwgNzMsIDY1LCA2NiwgMTI4LCA4NCwgCisgICAgNzIsIDY5LCA4OSwgMTI4LCA4NCwgNzIsIDY5LCA4NCwgNzIsIDY5LCAxMjgsIDg0LCA3MiwgNjksIDg0LCA3MiwgMTI4LCAKKyAgICA4NCwgNzIsIDY5LCA4NCwgNjUsIDEyOCwgODQsIDcyLCA2OSwgODQsIDE5MywgODQsIDcyLCA2OSwgODMsIDgwLCA3MywgNjUsIAorICAgIDIwNiwgODQsIDcyLCA2OSwgODMsIDY5LCA3OSwgODMsIDEyOCwgODQsIDcyLCA2OSwgODMsIDY5LCA3OSwgMjExLCA4NCwgCisgICAgNzIsIDY5LCAyMTEsIDg0LCA3MiwgNjksIDgyLCA3NywgNzksIDc3LCA2OSwgODQsIDY5LCA4MiwgMTI4LCA4NCwgNzIsIDY5LCAKKyAgICA4MiwgNzcsIDc5LCA2OCwgODksIDc4LCA2NSwgNzcsIDczLCA2NywgMTI4LCA4NCwgNzIsIDY5LCA4MiwgNjksIDcwLCA3OSwgCisgICAgODIsIDY5LCAxMjgsIDg0LCA3MiwgNjksIDgyLCAxOTcsIDg0LCA3MiwgNjksIDIwNiwgODQsIDcyLCA2OSwgNzcsIDY1LCAKKyAgICA4NCwgNzMsIDgzLCA3NywgNzksIDIxMSwgODQsIDcyLCA2OSwgNzcsIDY1LCAxMjgsIDg0LCA3MiwgNjksIDc3LCAxOTMsIAorICAgIDg0LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA3MiwgNjksIDIwMCwgODQsIDcyLCA2OSwgNjUsIDEyOCwgODQsIDcyLCAxOTcsIAorICAgIDg0LCA3MiwgNjUsIDg3LCAxMjgsIDg0LCA3MiwgNjUsIDc4LCA4NCwgNzIsIDY1LCA3NSwgNzIsIDY1LCA4NCwgMTI4LCA4NCwgCisgICAgNzIsIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDg0LCA3MiwgNjUsIDIwNiwgODQsIDcyLCAKKyAgICA2NSwgNzcsIDY5LCA2OCwgNzIsIDEyOCwgODQsIDcyLCA2NSwgNzYsIDEyOCwgODQsIDcyLCA2NSwgMjA0LCA4NCwgNzIsIAorICAgIDY1LCA3NCwgMTI4LCA4NCwgNzIsIDY1LCAyMDEsIDg0LCA3MiwgNjUsIDcyLCA2NSwgNzgsIDEyOCwgODQsIDcyLCA2NSwgCisgICAgNjUsIDc4LCAxOTMsIDg0LCA3MiwgNjUsIDY1LCA3NiwgODUsIDEyOCwgODQsIDcyLCA0NSwgNjcsIDgyLCA2OSwgMTk3LCAKKyAgICA4NCwgNjksIDg4LCA4NCwgMTI4LCA4NCwgNjksIDg4LCAyMTIsIDg0LCA2OSwgODgsIDEyOCwgODQsIDY5LCA4NiwgNzMsIAorICAgIDgyLCAxMjgsIDg0LCA2OSwgODUsIDg0LCA2OSwgODUsIDg4LCAxMjgsIDg0LCA2OSwgODUsIDg0LCA2OSwgODUsIDg3LCA2OSwgCisgICAgNzgsIDEyOCwgODQsIDY5LCA4NSwgODQsIDEyOCwgODQsIDY5LCA4NSwgNzgsIDEyOCwgODQsIDY5LCA4NSwgNjUsIDY5LCAKKyAgICA4MSwgMTI4LCA4NCwgNjksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDg0LCA2OSwgODUsIDEyOCwgODQsIDY5LCA4NCwgODIsIAorICAgIDY1LCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgCisgICAgNjksIDg0LCA4MiwgNjUsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA3MSwgODIsIDY1LCAyMDUsIDg0LCAKKyAgICA2OSwgODQsIDgyLCA2NSwgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgNjksIDg0LCA3MiwgMTI4LCA4NCwgNjksIAorICAgIDg0LCAyMDAsIDg0LCA2OSwgODQsIDY1LCA4MiwgODQsIDc5LCAyMTEsIDg0LCA2OSwgODQsIDY1LCA4MiwgODQsIDczLCA3NywgCisgICAgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA2OSwgODQsIDEyOCwgODQsIDY5LCAyMTIsIDg0LCA2OSwgODMsIDgzLCAKKyAgICA2OSwgODIsIDY1LCAxMjgsIDg0LCA2OSwgODMsIDgzLCA2OSwgODIsIDE5MywgODQsIDY5LCA4MywgODMsIDY1LCA4MiwgNzksIAorICAgIDIwNiwgODQsIDY5LCA4MywgMjAwLCA4NCwgNjksIDgyLCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA4NCwgCisgICAgNjksIDgwLCAxMjgsIDg0LCA2OSwgNzgsIDg1LCA4NCwgNzksIDEyOCwgODQsIDY5LCA3OCwgODUsIDEyOCwgODQsIDY5LCAKKyAgICA3OCwgMjEzLCA4NCwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODQsIDY5LCA3OCwgODQsIDEyOCwgODQsIDY5LCA3OCwgODMsIAorICAgIDY5LCAxMjgsIDg0LCA2OSwgNzgsIDgzLCAxOTcsIDg0LCA2OSwgNzgsIDgzLCAxMjgsIDg0LCA2OSwgNzgsIDIxMSwgODQsIAorICAgIDY5LCA3OCwgNzgsIDczLCAyMTEsIDg0LCA2OSwgNzgsIDcxLCAxOTcsIDg0LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgCisgICAgODQsIDg5LCAxMjgsIDg0LCA2OSwgNzgsIDEyOCwgODQsIDY5LCAyMDYsIDg0LCA2OSwgNzcsIDgwLCA4NSwgMjExLCA4NCwgCisgICAgNjksIDc2LCA4NSwgMTI4LCA4NCwgNjksIDc2LCA3OSwgODUsIDIxMSwgODQsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDg0LCAKKyAgICA2OSwgNzYsIDczLCA4MywgNzIsIDE5MywgODQsIDY5LCA3NiwgNjksIDg2LCA3MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIAorICAgIDY5LCA3NiwgNjksIDgzLCA2NywgNzksIDgwLCA2OSwgMTI4LCA4NCwgNjksIDc2LCA2OSwgODAsIDcyLCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDg0LCA2OSwgNzYsIDY5LCA4MCwgNzIsIDc5LCA3OCwgMTk3LCA4NCwgNjksIDc2LCA2OSwgNzMsIDY1LCAxMjgsIAorICAgIDg0LCA2OSwgNzYsIDY5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4NCwgNjksIDc1LCAxMjgsIDg0LCA2OSwgNzMsIDg3LCA4MywgCisgICAgMTI4LCA4NCwgNjksIDcxLCA2OSwgNzIsIDEyOCwgODQsIDY5LCA2OSwgODQsIDcyLCAxMjgsIDg0LCA2OSwgNjksIDg0LCAKKyAgICAyMDAsIDg0LCA2OSwgNjksIDc4LCA4MywgMTI4LCA4NCwgNjksIDY5LCA2OSwgNjksIDEyOCwgODQsIDY5LCAxOTcsIDg0LCAKKyAgICA2OSwgNjgsIDg1LCA3OCwgNzEsIDEyOCwgODQsIDY5LCA2NSwgODIsIDIxMSwgODQsIDY5LCA2NSwgODIsIDY4LCA4MiwgNzksIAorICAgIDgwLCA0NSwgODMsIDgwLCA3OSwgNzUsIDY5LCAxOTYsIDg0LCA2OSwgNjUsIDgyLCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCAKKyAgICA3MiwgNjUsIDc4LCA3NSwgNjksIDE5NiwgODQsIDY5LCA2NSwgODIsIDY4LCA4MiwgNzksIDgwLCA0NSwgNjYsIDY1LCA4MiwgCisgICAgNjYsIDY5LCAxOTYsIDg0LCA2OSwgNjUsIDgyLCA0NSwgNzksIDcwLCAxOTgsIDg0LCA2OSwgNjUsIDY3LCA4NSwgMjA4LCAKKyAgICA4NCwgNjksIDQ1LCA4NSwgMTI4LCA4NCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNjcsIDcyLCA2OSwgNzIsIDY5LCA3MiwgCisgICAgMTI4LCA4NCwgNjcsIDcyLCA2OSwgNzIsIDY5LCAyMDAsIDg0LCA2NywgNzIsIDY5LCA3MiwgMTI4LCA4NCwgNjcsIDcyLCAKKyAgICA2OSwgMjAwLCA4NCwgNjcsIDcyLCA2OSwgMTI4LCA4NCwgMTk1LCA4NCwgNjUsIDg5LCAxMjgsIDg0LCA2NSwgODgsIDczLCAKKyAgICAxMjgsIDg0LCA2NSwgODgsIDEyOCwgODQsIDY1LCA4NywgNjksIDc2LCA3NiwgNjksIDc3LCA2OSwgMjEyLCA4NCwgNjUsIAorICAgIDg3LCA2NSwgMTI4LCA4NCwgNjUsIDg3LCAxMjgsIDg0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4NCwgCisgICAgNjUsIDg2LCAxMjgsIDg0LCA2NSwgMjE0LCA4NCwgNjUsIDg1LCA4MiwgODUsIDgzLCAxMjgsIDg0LCA2NSwgODUsIDc3LCAKKyAgICAxMjgsIDg0LCA2NSwgMjEzLCA4NCwgNjUsIDg0LCA4NywgNjksIDY5LCA3NiwgMTI4LCA4NCwgNjUsIDg0LCA4NywgNjksIAorICAgIDY5LCAyMDQsIDg0LCA2NSwgODQsIDg0LCA3OSwgNzksIDY5LCAxOTYsIDg0LCA2NSwgODQsIDEyOCwgODQsIDY1LCA4MywgCiAgICAgMTI4LCA4NCwgNjUsIDgyLCA4NSwgNzgsIDcxLCAxMjgsIDg0LCA2NSwgODIsIDg0LCA2NSwgODIsIDQ1LCA1MCwgMTI4LCAKLSAgICA4NCwgNjUsIDgyLCA4NCwgNjUsIDgyLCAxMjgsIDg0LCA2NSwgODEsIDEyOCwgODQsIDY1LCA4MCwgNjksIDgyLCAxMjgsIAotICAgIDg0LCA2NSwgODAsIDE5NywgODQsIDY1LCA4MCwgMTI4LCA4NCwgNjUsIDc5LCAxMjgsIDg0LCA2NSwgNzgsIDc4LCA2OSwgCi0gICAgMTk2LCA4NCwgNjUsIDc4LCA3MSwgNjksIDgyLCA3MywgNzgsIDY5LCAxMjgsIDg0LCA2NSwgNzgsIDE5OSwgODQsIDY1LCAKLSAgICA3OCwgNjUsIDY2LCA2NSwgODQsIDE5MywgODQsIDY1LCA3OCwgMTI4LCA4NCwgNjUsIDc3LCA3MywgNzgsIDcxLCAxMjgsIAotICAgIDg0LCA2NSwgNzcsIDEyOCwgODQsIDY1LCA3NiwgNzYsIDEyOCwgODQsIDY1LCA3NiwgMjA0LCA4NCwgNjUsIDc2LCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDg0LCA2NSwgNzYsIDczLCA3OCwgMTk5LCA4NCwgNjUsIDc2LCA2OSwgNzgsIDg0LCA4MywgMTI4LCAKLSAgICA4NCwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgODQsIDY1LCA3NSwgODIsIDIwMSwgODQsIDY1LCA3NSwgNzIsIDY1LCA3NiwgNzYsIAotICAgIDg1LCA4MywgMTI4LCA4NCwgNjUsIDc1LCA2OSwgMTI4LCA4NCwgNjUsIDc1LCA1MiwgMTI4LCA4NCwgNjUsIDc1LCAxMjgsIAotICAgIDg0LCA2NSwgNzMsIDgzLCA4OSwgNzksIDg1LCAxMjgsIDg0LCA2NSwgNzMsIDc2LCA3NiwgNjksIDgzLCAyMTEsIDg0LCA2NSwgCi0gICAgNzMsIDc2LCAxMjgsIDg0LCA2NSwgNzMsIDIwNCwgODQsIDY1LCA3MiwgMTI4LCA4NCwgNjUsIDIwMCwgODQsIDY1LCA3MSwgCi0gICAgNjYsIDY1LCA3OCwgODcsIDE5MywgODQsIDY1LCA3MSwgNjUsIDc2LCA3OSwgMTk5LCA4NCwgNjUsIDcxLCAxMjgsIDg0LCAKLSAgICA2NSwgNjksIDIwNiwgODQsIDY1LCA2NywgNzUsIDEyOCwgODQsIDY1LCA2NywgMjAzLCA4NCwgNjUsIDY2LCA4NSwgNzYsIAotICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgNjUsIDY2LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA2NSwgCi0gICAgNjYsIDgzLCAxMjgsIDg0LCA2NSwgNjYsIDc2LCA2OSwgMTI4LCA4NCwgNjUsIDY2LCAxMjgsIDg0LCA2NSwgMTk0LCA4NCwgCi0gICAgNjUsIDY1LCA4MywgNzIsIDY1LCA2OSwgMTI4LCA4NCwgNjUsIDY1LCA4MSwgMTI4LCA4NCwgNjUsIDY1LCA3NywgMTI4LCAKLSAgICA4NCwgNjUsIDY1LCA3NiwgODUsIDc0LCAxOTMsIDg0LCA2NSwgNjUsIDczLCAxMjgsIDg0LCA2NSwgNjUsIDcwLCAxMjgsIAotICAgIDg0LCA2NSwgNTAsIDEyOCwgODQsIDY1LCA0NSwgODIsIDc5LCA3NiwgMTI4LCA4NCwgNjUsIDQ1LCA1MCwgMTI4LCA4NCwgCi0gICAgNDgsIDUxLCA1NCwgMTI4LCA4NCwgNDgsIDUxLCA1MywgMTI4LCA4NCwgNDgsIDUxLCA1MiwgMTI4LCA4NCwgNDgsIDUxLCAKLSAgICA1MSwgNjUsIDEyOCwgODQsIDQ4LCA1MSwgNTEsIDEyOCwgODQsIDQ4LCA1MSwgNTAsIDY1LCAxMjgsIDg0LCA0OCwgNTEsIAotICAgIDUwLCAxMjgsIDg0LCA0OCwgNTEsIDQ5LCAxMjgsIDg0LCA0OCwgNTEsIDQ4LCAxMjgsIDg0LCA0OCwgNTAsIDU3LCAxMjgsIAotICAgIDg0LCA0OCwgNTAsIDU2LCAxMjgsIDg0LCA0OCwgNTAsIDU1LCAxMjgsIDg0LCA0OCwgNTAsIDU0LCAxMjgsIDg0LCA0OCwgCi0gICAgNTAsIDUzLCAxMjgsIDg0LCA0OCwgNTAsIDUyLCAxMjgsIDg0LCA0OCwgNTAsIDUxLCAxMjgsIDg0LCA0OCwgNTAsIDUwLCAKLSAgICAxMjgsIDg0LCA0OCwgNTAsIDQ5LCAxMjgsIDg0LCA0OCwgNTAsIDQ4LCAxMjgsIDg0LCA0OCwgNDksIDU3LCAxMjgsIDg0LCAKLSAgICA0OCwgNDksIDU2LCAxMjgsIDg0LCA0OCwgNDksIDU1LCAxMjgsIDg0LCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4NCwgNDgsIAotICAgIDQ5LCA1NCwgMTI4LCA4NCwgNDgsIDQ5LCA1MywgMTI4LCA4NCwgNDgsIDQ5LCA1MiwgMTI4LCA4NCwgNDgsIDQ5LCA1MSwgCi0gICAgMTI4LCA4NCwgNDgsIDQ5LCA1MCwgMTI4LCA4NCwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgODQsIDQ4LCA0OSwgNDksIDEyOCwgCi0gICAgODQsIDQ4LCA0OSwgNDgsIDEyOCwgODQsIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDg0LCA0OCwgNDgsIDU3LCAxMjgsIDg0LCAKLSAgICA0OCwgNDgsIDU2LCA2NSwgMTI4LCA4NCwgNDgsIDQ4LCA1NiwgMTI4LCA4NCwgNDgsIDQ4LCA1NSwgNjUsIDEyOCwgODQsIAotICAgIDQ4LCA0OCwgNTUsIDEyOCwgODQsIDQ4LCA0OCwgNTQsIDEyOCwgODQsIDQ4LCA0OCwgNTMsIDEyOCwgODQsIDQ4LCA0OCwgCi0gICAgNTIsIDEyOCwgODQsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDg0LCA0OCwgNDgsIDUxLCAxMjgsIDg0LCA0OCwgNDgsIDUwLCAKLSAgICAxMjgsIDg0LCA0OCwgNDgsIDQ5LCAxMjgsIDg0LCA0NSwgODMsIDcyLCA3MywgODIsIDg0LCAxMjgsIDgzLCA5MCwgOTAsIAotICAgIDEyOCwgODMsIDkwLCA4NywgNzEsIDEyOCwgODMsIDkwLCA4NywgNjUsIDEyOCwgODMsIDkwLCA4NSwgMTI4LCA4MywgOTAsIAotICAgIDc5LCAxMjgsIDgzLCA5MCwgNzMsIDEyOCwgODMsIDkwLCA2OSwgNjksIDEyOCwgODMsIDkwLCA2OSwgMTI4LCA4MywgOTAsIAotICAgIDY1LCA2NSwgMTI4LCA4MywgOTAsIDY1LCAxMjgsIDgzLCA5MCwgMTI4LCA4MywgODksIDg4LCAxMjgsIDgzLCA4OSwgODQsIAotICAgIDEyOCwgODMsIDg5LCA4MywgODQsIDY5LCAyMDUsIDgzLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA4OSwgODIsIDc3LCA2NSwgCi0gICAgODQsIDczLCA3NSwgNzMsIDEyOCwgODMsIDg5LCA4MiwgNzcsIDY1LCAxMjgsIDgzLCA4OSwgODIsIDczLCA3OCwgNzEsIDY5LCAKLSAgICAxMjgsIDgzLCA4OSwgODIsIDEyOCwgODMsIDg5LCA4MCwgMTI4LCA4MywgODksIDc5LCA4NSwgODcsIDY1LCAxMjgsIDgzLCAKLSAgICA4OSwgNzgsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgzLCA4OSwgNzgsIDY4LCA2OSwgODMsIDc3LCA3OSwgMjExLCA4MywgODksIAotICAgIDc4LCA2NywgNzIsIDgyLCA3OSwgNzgsIDc5LCA4NSwgMjExLCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCAxOTMsIDgzLCA4OSwgCi0gICAgNzgsIDY1LCA3MCwgNzMsIDEyOCwgODMsIDg5LCA3OCwgMTI4LCA4MywgODksIDc3LCA3NywgNjksIDg0LCA4MiwgODksIAotICAgIDEyOCwgODMsIDg5LCA3NywgNzcsIDY5LCA4NCwgODIsIDczLCAxOTUsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDgzLCAKLSAgICAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTYsIAotICAgIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU1LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1NCwgCi0gICAgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDUyLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCAKLSAgICA1MywgNTEsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA1MCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIAotICAgIDc2LCA0NSwgNTMsIDQ5LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgNDgsIDEyOCwgODMsIDg5LCA3NywgCi0gICAgNjYsIDc5LCA3NiwgNDUsIDUzLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTcsIDEyOCwgODMsIDg5LCAKLSAgICA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1NiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDU1LCAxMjgsIAotICAgIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCAKLSAgICA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAotICAgIDQ1LCA1MiwgNDgsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgCi0gICAgNzYsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgODksIDc3LCAKLSAgICA2NiwgNzksIDc2LCA0NSwgNTEsIDU1LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIAotICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA1MCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDQ4LCAKLSAgICAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIAotICAgIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDUwLCA1NCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKLSAgICA3OSwgNzYsIDQ1LCA1MCwgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNDksIDEyOCwgCi0gICAgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIAotICAgIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgCi0gICAgNDksIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCAKLSAgICA3NiwgNDUsIDQ5LCA1NCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDUzLCAxMjgsIDgzLCA4OSwgNzcsIAotICAgIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1MSwgMTI4LCA4MywgCi0gICAgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNDksIAotICAgIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgCi0gICAgNDksIDEyOCwgODMsIDg5LCA3NiwgNzksIDg0LCAyMDEsIDgzLCA4OSwgMTI4LCA4MywgODcsIDkwLCAxMjgsIDgzLCA4NywgCi0gICAgODUsIDc4LCAxOTksIDgzLCA4NywgNzksIDgyLCA2OCwgODMsIDEyOCwgODMsIDg3LCA3OSwgODIsIDY4LCAxMjgsIDgzLCAKLSAgICA4NywgNzksIDc5LCAxMjgsIDgzLCA4NywgNzksIDEyOCwgODMsIDg3LCA3MywgODIsIDIwNCwgODMsIDg3LCA3MywgNzcsIAotICAgIDc3LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NywgNzMsIDc3LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NywgNzMsIDczLCAKLSAgICAxMjgsIDgzLCA4NywgNzMsIDEyOCwgODMsIDg3LCA3MSwgMTI4LCA4MywgODcsIDY5LCA2OSwgODQsIDEyOCwgODMsIDg3LCAKLSAgICA2OSwgNjksIDIxMiwgODMsIDg3LCA2OSwgNjUsIDg0LCAxMjgsIDgzLCA4NywgNjksIDY1LCAyMTIsIDgzLCA4NywgNjUsIAotICAgIDgzLCAyMDAsIDgzLCA4NywgNjUsIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODcsIDY1LCA2NSwgMTI4LCA4MywgCi0gICAgODcsIDEyOCwgODMsIDg2LCA2NSwgODMsIDg0LCAyMDEsIDgzLCA4NiwgNjUsIDgyLCA3MywgODQsIDY1LCAxMjgsIDgzLCAKLSAgICA4NiwgNjUsIDgyLCA3MywgODQsIDE5MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODUsIDg1LCAxMjgsIDgzLCA4NSwgODQsIAotICAgIDEyOCwgODMsIDg1LCA4MywgODAsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCA4MywgODUsIDgzLCA3MiwgNzMsIDEyOCwgCi0gICAgODMsIDg1LCA4MiwgODksIDY1LCAxMjgsIDgzLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA4NSwgODIsIDgyLCA3OSwgODUsIDc4LCAKLSAgICA2OCwgMTI4LCA4MywgODUsIDgyLCA4MiwgNzksIDg1LCA3OCwgMTk2LCA4MywgODUsIDgyLCA3MCwgNjksIDgyLCAxMjgsIAotICAgIDgzLCA4NSwgODIsIDcwLCA2NSwgNjcsIDE5NywgODMsIDg1LCA4MiwgNjksIDEyOCwgODMsIDg1LCA4MiwgNjUsIDc4LCA3MSwgCi0gICAgMTI4LCA4MywgODUsIDgyLCA1NywgMTI4LCA4MywgODUsIDgyLCAxMjgsIDgzLCA4NSwgMjEwLCA4MywgODUsIDgwLCA4MiwgCi0gICAgNjUsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MywgODUsIDgwLCA2OSwgODIsIDg2LCA3MywgODMsIDY5LCAxMjgsIDgzLCAKLSAgICA4NSwgODAsIDY5LCA4MiwgODMsIDY5LCA4NCwgMTI4LCA4MywgODUsIDgwLCA2OSwgODIsIDgzLCA2OSwgMjEyLCA4MywgODUsIAotICAgIDgwLCA2OSwgODIsIDgzLCA2NywgODIsIDczLCA4MCwgMjEyLCA4MywgODUsIDgwLCA2OSwgODIsIDczLCA3NywgODAsIDc5LCAKLSAgICA4MywgNjksIDE5NiwgODMsIDg1LCA4MCwgNjksIDgyLCA3MCwgNzMsIDg4LCA2OSwgMTk2LCA4MywgODUsIDgwLCA2OSwgCi0gICAgMjEwLCA4MywgODUsIDgwLCAxMjgsIDgzLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA4NSwgNzksIDgwLCAxMjgsIDgzLCA4NSwgCi0gICAgNzksIDEyOCwgODMsIDg1LCA3OCwgODMsIDY5LCAyMTIsIDgzLCA4NSwgNzgsIDgyLCA3MywgODMsIDY5LCAxMjgsIDgzLCAKLSAgICA4NSwgNzgsIDgyLCA3MywgODMsIDE5NywgODMsIDg1LCA3OCwgNzEsIDc2LCA2NSwgODMsIDgzLCA2OSwgODMsIDEyOCwgODMsIAotICAgIDg1LCA3OCwgNzEsIDEyOCwgODMsIDg1LCA3OCwgNzAsIDc2LCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MywgODUsIDc4LCAKLSAgICAxMjgsIDgzLCA4NSwgMjA2LCA4MywgODUsIDc3LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NSwgNzcsIDc3LCA2NSwgODQsIAotICAgIDczLCA3OSwgNzgsIDEyOCwgODMsIDg1LCA3NywgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA4NSwgNzcsIDY1LCA4MywgCi0gICAgNzIsIDEyOCwgODMsIDg1LCA3NywgMTI4LCA4MywgODUsIDc2LCA3MCwgODUsIDgyLCAxMjgsIDgzLCA4NSwgNzUsIDg1LCAKLSAgICA3OCwgMTI4LCA4MywgODUsIDc1LCA4NSwgMjA2LCA4MywgODUsIDc1LCA4NSwgMTI4LCA4MywgODUsIDc1LCAyMTMsIDgzLCAKLSAgICA4NSwgNzMsIDg0LCA2NSwgNjYsIDc2LCA2OSwgMTI4LCA4MywgODUsIDczLCA4NCwgMTI4LCA4MywgODUsIDcyLCA4NSwgODIsIAotICAgIDEyOCwgODMsIDg1LCA2OSwgMTI4LCA4MywgODUsIDY4LCA1MCwgMTI4LCA4MywgODUsIDY4LCAxMjgsIDgzLCA4NSwgNjcsIAotICAgIDY3LCA2OSwgNjksIDY4LCA4MywgMTI4LCA4MywgODUsIDY3LCA2NywgNjksIDY5LCA2OCwgMjExLCA4MywgODUsIDY3LCA2NywgCi0gICAgNjksIDY5LCA2OCwgMTI4LCA4MywgODUsIDY3LCA2NywgNjksIDY5LCAxOTYsIDgzLCA4NSwgNjYsIDg1LCA3OCwgNzMsIDg0LCAKLSAgICAxMjgsIDgzLCA4NSwgNjYsIDgzLCA4NCwgNzMsIDg0LCA4NSwgODQsIDczLCA3OSwgMjA2LCA4MywgODUsIDY2LCA4MywgODQsIAotICAgIDczLCA4NCwgODUsIDg0LCA2OSwgMTI4LCA4MywgODUsIDY2LCA4MywgODQsIDczLCA4NCwgODUsIDg0LCAxOTcsIDgzLCA4NSwgCi0gICAgNjYsIDgzLCA2OSwgODQsIDEyOCwgODMsIDg1LCA2NiwgODMsIDY5LCAyMTIsIDgzLCA4NSwgNjYsIDgzLCA2NywgODIsIDczLCAKLSAgICA4MCwgMjEyLCA4MywgODUsIDY2LCA4MCwgODUsIDc4LCA2NywgODQsIDczLCA4MywgMTI4LCA4MywgODUsIDY2LCA3NiwgNzMsIAotICAgIDc4LCA2OSwgNjUsIDIxMCwgODMsIDg1LCA2NiwgNzYsIDczLCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NSwgCi0gICAgNjYsIDc2LCA3MywgNzcsIDY1LCA4NCwgNjksIDQ1LCA1MSwgMTI4LCA4MywgODUsIDY2LCA3NiwgNzMsIDc3LCA2NSwgODQsIAotICAgIDY5LCA0NSwgNTAsIDEyOCwgODMsIDg1LCA2NiwgNzYsIDczLCA3NywgNjUsIDg0LCA2OSwgMTI4LCA4MywgODUsIDY2LCA3NiwgCi0gICAgNzMsIDc3LCA2NSwgODQsIDE5NywgODMsIDg1LCA2NiwgNzQsIDc5LCA3MywgNzgsIDY5LCAxOTYsIDgzLCA4NSwgNjYsIDc0LCAKLSAgICA2OSwgNjcsIDg0LCAxMjgsIDgzLCA4NSwgNjYsIDczLCA4NCwgNzksIDEyOCwgODMsIDg1LCA2NiwgNzEsIDgyLCA3OSwgODUsIAotICAgIDgwLCAxMjgsIDgzLCA4NSwgNjYsIDcxLCA4MiwgNzksIDg1LCAyMDgsIDgzLCA4NSwgNjYsIDEyOCwgODMsIDg1LCA2NSwgCi0gICAgNjksIDg0LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA4MywgODUsIDY1LCAKLSAgICAxMjgsIDgzLCAyMTMsIDgzLCA4NCwgODgsIDEyOCwgODMsIDg0LCA4NywgNjUsIDEyOCwgODMsIDg0LCA4NSwgNjgsIDg5LCAKLSAgICAxMjgsIDgzLCA4NCwgODUsIDY3LCA3NSwgNDUsIDc5LCA4NSwgMjEyLCA4MywgODQsIDgzLCAxMjgsIDgzLCA4NCwgODIsIAotICAgIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA4MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICAyMTEsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTYsIAotICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU1LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NCwgCi0gICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUyLCAKLSAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTAsIAotICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgCi0gICAgNDksIDQ4LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIAotICAgIDE5NywgODMsIDg0LCA4MiwgNzMsIDgwLCA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDczLCA3OCwgMTk5LCA4MywgODQsIDgyLCA3MywgNzUsIDY5LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCAKLSAgICA4MywgODQsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDc2LCAyMTcsIDgzLCA4NCwgODIsIAotICAgIDY5LCA4NCwgNjcsIDcyLCA2OSwgMTk2LCA4MywgODQsIDgyLCA2OSwgODMsIDIxMSwgODMsIDg0LCA4MiwgNjksIDc4LCA3MSwgCi0gICAgODQsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDY5LCA2NSwgNzcsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgODcsIDY2LCAKLSAgICA2OSwgODIsIDgyLCA4OSwgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCA3NywgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIAotICAgIDY1LCA4NCwgODUsIDc3LCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDIwNSwgODMsIDg0LCA4MiwgNjUsIDg0LCA3MywgCi0gICAgNjUsIDIwNiwgODMsIDg0LCA4MiwgNjUsIDczLCA3OCwgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDIxMiwgODMsIDg0LCA4MiwgNjUsIAotICAgIDczLCA3MCwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzEsIDcxLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgzLCA4NCwgCi0gICAgNzksIDg2LCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MiwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDg3LCA2NSwgODQsIDY3LCAKLSAgICA3MiwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA2NSwgNzEsIAotICAgIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCAxMjgsIDgzLCA4NCwgNzksIDIwOCwgODMsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDgzLCA4NCwgNzksIDY3LCA3NSwgMTI4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDgzLCA4NCwgNzMsIDc2LCAKLSAgICAyMDQsIDgzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4NCwgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDg0LCA2OSwgODAsIAotICAgIDEyOCwgODMsIDg0LCA2OSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDc3LCA3MywgNzgsIDE5OSwgODMsIDg0LCA2OSwgCi0gICAgNjUsIDc3LCAxMjgsIDgzLCA4NCwgNjksIDY1LCAyMDUsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDg1LCAxMjgsIDgzLCAKLSAgICA4NCwgNjUsIDg2LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDIxMSwgODMsIDg0LCA2NSwgODUsIAotICAgIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODQsIDg1LCAxOTcsIDgzLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MywgODQsIAotICAgIDY1LCA4MiwgMjEyLCA4MywgODQsIDY1LCA4MiwgODMsIDEyOCwgODMsIDg0LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA4MywgCi0gICAgODQsIDY1LCA4MiwgNzUsIDEyOCwgODMsIDg0LCA2NSwgODIsIDEyOCwgODMsIDg0LCA2NSwgMjEwLCA4MywgODQsIDY1LCAKLSAgICA3OCwgNjgsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA4MywgODQsIDY1LCA3OCwgNjgsIDY1LCA4MiwgMTk2LCA4MywgODQsIAotICAgIDY1LCA3OCwgNjgsIDEyOCwgODMsIDg0LCA2NSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgNzYsIDc2LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDcwLCA3MCwgMTI4LCA4MywgODQsIDY1LCA3MCwgMTk4LCA4MywgODQsIDY1LCA2NywgNjcsIAotICAgIDY1LCA4NCwgNzksIDEyOCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDczLCA4MywgODMsIDczLCA3NywgNzksIDEyOCwgCi0gICAgODMsIDg0LCA1MCwgMTI4LCA4MywgODMsIDg5LCA4OCwgMTI4LCA4MywgODMsIDg5LCA4NCwgMTI4LCA4MywgODMsIDg5LCAKLSAgICA4MiwgODgsIDEyOCwgODMsIDgzLCA4OSwgODIsIDEyOCwgODMsIDgzLCA4OSwgODAsIDEyOCwgODMsIDgzLCA4OSwgMTI4LCAKLSAgICA4MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODMsIDg1LCA4NSwgMTI4LCA4MywgODMsIDg1LCA4NCwgMTI4LCA4MywgODMsIAotICAgIDg1LCA4MCwgMTI4LCA4MywgODMsIDc5LCA4OCwgMTI4LCA4MywgODMsIDc5LCA4NCwgMTI4LCA4MywgODMsIDc5LCA4MCwgCi0gICAgMTI4LCA4MywgODMsIDc5LCA3OSwgMTI4LCA4MywgODMsIDc5LCAxMjgsIDgzLCA4MywgNzMsIDg4LCAxMjgsIDgzLCA4MywgCi0gICAgNzMsIDg0LCAxMjgsIDgzLCA4MywgNzMsIDgwLCAxMjgsIDgzLCA4MywgNzMsIDczLCAxMjgsIDgzLCA4MywgNzMsIDY5LCAKLSAgICA4OCwgMTI4LCA4MywgODMsIDczLCA2OSwgODAsIDEyOCwgODMsIDgzLCA3MywgNjksIDEyOCwgODMsIDgzLCA3MywgMTI4LCAKLSAgICA4MywgODMsIDcyLCA2OSwgMTI4LCA4MywgODMsIDY5LCA4OCwgMTI4LCA4MywgODMsIDY5LCA4MCwgMTI4LCA4MywgODMsIAotICAgIDY5LCA2OSwgMTI4LCA4MywgODMsIDY1LCA4OCwgMTI4LCA4MywgODMsIDY1LCA4NSwgMTI4LCA4MywgODMsIDY1LCA4NCwgCi0gICAgMTI4LCA4MywgODMsIDY1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCAKLSAgICA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCAKLSAgICA4MywgNjUsIDc4LCA3MSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAKLSAgICA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIAotICAgIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDgzLCAKLSAgICA2NSwgNzgsIDcxLCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgCi0gICAgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA4MywgNjUsIDc4LCAKLSAgICA3MSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCA0NSwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCAKLSAgICA4MywgNjUsIDc4LCA3MSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDgzLCA4MywgNjUsIDczLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDY1LCAxMjgsIDgzLCA4MywgNTEsIDEyOCwgODMsIDgzLCA1MCwgMTI4LCA4MywgODIsIDEyOCwgODMsIDgxLCA4NSwgNzMsIAotICAgIDgzLCAyMDAsIDgzLCA4MSwgODUsIDczLCA4MiwgODIsIDY5LCAyMDQsIDgzLCA4MSwgODUsIDczLCA3MSwgNzEsIDc2LCAKLSAgICAxOTcsIDgzLCA4MSwgODUsIDY1LCAyMTIsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDgzLCAxMjgsIDgzLCA4MSwgODUsIAotICAgIDY1LCA4MiwgNjksIDY4LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDEyOCwgODMsIDgwLCA4NywgNjUsIDEyOCwgCi0gICAgODMsIDgwLCA4NSwgNzgsIDcxLCAyMTEsIDgzLCA4MCwgODIsIDc5LCA4NSwgODQsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCAKLSAgICA3MSwgODMsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjcsIDcyLCA3MSwgNjksIAotICAgIDgzLCA2NSwgNzgsIDE5OSwgODMsIDgwLCA3OSwgODUsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3OSwgODQsIDEyOCwgCi0gICAgODMsIDgwLCA3OSwgNzksIDc4LCAxMjgsIDgzLCA4MCwgNzYsIDczLCA4NCwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc2LCAKLSAgICA2NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODMsIDgwLCA3MywgODIsIDczLCA4NCwgODUsIDIxMSwgODMsIDgwLCA3MywgODIsIAotICAgIDczLCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNzMsIDIxMiwgODMsIDgwLCA3MywgODIsIDY1LCA3OCwgODQsIDEyOCwgCi0gICAgODMsIDgwLCA3MywgODIsIDY1LCA3NiwgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDIwNCwgODMsIDgwLCA3MywgNjgsIDY5LCAKLSAgICA4MiwgMjE3LCA4MywgODAsIDczLCA2NywgNjksIDEyOCwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCAyMDQsIAorICAgIDg0LCA2NSwgODIsIDg0LCA2NSwgODIsIDEyOCwgODQsIDY1LCA4MiwgNzEsIDY5LCA4NCwgMTI4LCA4NCwgNjUsIDgxLCAKKyAgICAxMjgsIDg0LCA2NSwgODAsIDY5LCA4MiwgMTI4LCA4NCwgNjUsIDgwLCAxOTcsIDg0LCA2NSwgODAsIDEyOCwgODQsIDY1LCAKKyAgICA3OSwgMTI4LCA4NCwgNjUsIDc4LCA3OCwgNjksIDE5NiwgODQsIDY1LCA3OCwgNzEsIDY5LCA4MiwgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA4NCwgNjUsIDc4LCA3MSwgNjksIDc4LCA4NCwgMTI4LCA4NCwgNjUsIDc4LCA3MSwgNjksIDc4LCAyMTIsIDg0LCAKKyAgICA2NSwgNzgsIDE5OSwgODQsIDY1LCA3OCwgNjUsIDY2LCA2NSwgODQsIDE5MywgODQsIDY1LCA3OCwgMTI4LCA4NCwgNjUsIAorICAgIDc3LCA3MywgNzgsIDcxLCAxMjgsIDg0LCA2NSwgNzcsIDEyOCwgODQsIDY1LCA3NiwgNzYsIDEyOCwgODQsIDY1LCA3NiwgCisgICAgMjA0LCA4NCwgNjUsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDg0LCA2NSwgNzYsIDczLCA3OCwgMTk5LCA4NCwgNjUsIDc2LCAKKyAgICA2OSwgNzgsIDg0LCA4MywgMTI4LCA4NCwgNjUsIDc2LCA2OSwgNzgsIDIxMiwgODQsIDY1LCA3NSwgODIsIDIwMSwgODQsIAorICAgIDY1LCA3NSwgNzIsIDY1LCA3NiwgNzYsIDg1LCA4MywgMTI4LCA4NCwgNjUsIDc1LCA2OSwgMTI4LCA4NCwgNjUsIDc1LCA1MiwgCisgICAgMTI4LCA4NCwgNjUsIDc1LCAxODAsIDg0LCA2NSwgNzUsIDEyOCwgODQsIDY1LCA3MywgODMsIDg5LCA3OSwgODUsIDEyOCwgCisgICAgODQsIDY1LCA3MywgNzYsIDc2LCA2OSwgODMsIDIxMSwgODQsIDY1LCA3MywgNzYsIDEyOCwgODQsIDY1LCA3MywgMjA0LCAKKyAgICA4NCwgNjUsIDcyLCAxMjgsIDg0LCA2NSwgMjAwLCA4NCwgNjUsIDcxLCA2NiwgNjUsIDc4LCA4NywgMTkzLCA4NCwgNjUsIAorICAgIDcxLCA2NSwgNzYsIDc5LCAxOTksIDg0LCA2NSwgNzEsIDEyOCwgODQsIDY1LCA2OSwgMjA2LCA4NCwgNjUsIDY3LCA3OSwgCisgICAgMTI4LCA4NCwgNjUsIDY3LCA3NSwgMTI4LCA4NCwgNjUsIDY3LCAyMDMsIDg0LCA2NSwgNjYsIDg1LCA3NiwgNjUsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDg0LCA2NSwgNjYsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgODQsIDY1LCA2NiwgODMsIAorICAgIDEyOCwgODQsIDY1LCA2NiwgNzYsIDY5LCAxMjgsIDg0LCA2NSwgNjYsIDc2LCAxOTcsIDg0LCA2NSwgNjYsIDEyOCwgODQsIAorICAgIDY1LCAxOTQsIDg0LCA2NSwgNjUsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDg0LCA2NSwgNjUsIDgxLCAxMjgsIDg0LCA2NSwgCisgICAgNjUsIDc3LCAxMjgsIDg0LCA2NSwgNjUsIDc2LCA4NSwgNzQsIDE5MywgODQsIDY1LCA2NSwgNzMsIDEyOCwgODQsIDY1LCAKKyAgICA2NSwgNzAsIDEyOCwgODQsIDY1LCA1MCwgMTI4LCA4NCwgNjUsIDQ1LCA4MiwgNzksIDc2LCAxMjgsIDg0LCA2NSwgNDUsIAorICAgIDUwLCAxMjgsIDg0LCA0OCwgNTEsIDU0LCAxMjgsIDg0LCA0OCwgNTEsIDUzLCAxMjgsIDg0LCA0OCwgNTEsIDUyLCAxMjgsIAorICAgIDg0LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA4NCwgNDgsIDUxLCA1MSwgMTI4LCA4NCwgNDgsIDUxLCA1MCwgNjUsIDEyOCwgCisgICAgODQsIDQ4LCA1MSwgNTAsIDEyOCwgODQsIDQ4LCA1MSwgNDksIDEyOCwgODQsIDQ4LCA1MSwgNDgsIDEyOCwgODQsIDQ4LCAKKyAgICA1MCwgNTcsIDEyOCwgODQsIDQ4LCA1MCwgNTYsIDEyOCwgODQsIDQ4LCA1MCwgNTUsIDEyOCwgODQsIDQ4LCA1MCwgNTQsIAorICAgIDEyOCwgODQsIDQ4LCA1MCwgNTMsIDEyOCwgODQsIDQ4LCA1MCwgNTIsIDEyOCwgODQsIDQ4LCA1MCwgNTEsIDEyOCwgODQsIAorICAgIDQ4LCA1MCwgNTAsIDEyOCwgODQsIDQ4LCA1MCwgNDksIDEyOCwgODQsIDQ4LCA1MCwgNDgsIDEyOCwgODQsIDQ4LCA0OSwgCisgICAgNTcsIDEyOCwgODQsIDQ4LCA0OSwgNTYsIDEyOCwgODQsIDQ4LCA0OSwgNTUsIDEyOCwgODQsIDQ4LCA0OSwgNTQsIDY1LCAKKyAgICAxMjgsIDg0LCA0OCwgNDksIDU0LCAxMjgsIDg0LCA0OCwgNDksIDUzLCAxMjgsIDg0LCA0OCwgNDksIDUyLCAxMjgsIDg0LCAKKyAgICA0OCwgNDksIDUxLCAxMjgsIDg0LCA0OCwgNDksIDUwLCAxMjgsIDg0LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA4NCwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA4NCwgNDgsIDQ5LCA0OCwgMTI4LCA4NCwgNDgsIDQ4LCA1NywgNjUsIDEyOCwgODQsIDQ4LCA0OCwgCisgICAgNTcsIDEyOCwgODQsIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDg0LCA0OCwgNDgsIDU2LCAxMjgsIDg0LCA0OCwgNDgsIDU1LCAKKyAgICA2NSwgMTI4LCA4NCwgNDgsIDQ4LCA1NSwgMTI4LCA4NCwgNDgsIDQ4LCA1NCwgMTI4LCA4NCwgNDgsIDQ4LCA1MywgMTI4LCAKKyAgICA4NCwgNDgsIDQ4LCA1MiwgMTI4LCA4NCwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODQsIDQ4LCA0OCwgNTEsIDEyOCwgODQsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgODQsIDQ4LCA0OCwgNDksIDEyOCwgODQsIDQ1LCA4MywgNzIsIDczLCA4MiwgODQsIDEyOCwgCisgICAgODMsIDkwLCA5MCwgMTI4LCA4MywgOTAsIDg3LCA3MSwgMTI4LCA4MywgOTAsIDg3LCA2NSwgMTI4LCA4MywgOTAsIDg1LCAKKyAgICAxMjgsIDgzLCA5MCwgNzksIDEyOCwgODMsIDkwLCA3MywgMTI4LCA4MywgOTAsIDY5LCA2OSwgMTI4LCA4MywgOTAsIDY5LCAKKyAgICAxMjgsIDgzLCA5MCwgNjUsIDY1LCAxMjgsIDgzLCA5MCwgNjUsIDEyOCwgODMsIDkwLCAxMjgsIDgzLCA4OSwgODgsIDEyOCwgCisgICAgODMsIDg5LCA4NCwgMTI4LCA4MywgODksIDgzLCA4NCwgNjksIDIwNSwgODMsIDg5LCA4MiwgODgsIDEyOCwgODMsIDg5LCAKKyAgICA4MiwgNzcsIDY1LCA4NCwgNzMsIDc1LCA3MywgMTI4LCA4MywgODksIDgyLCA3NywgNjUsIDEyOCwgODMsIDg5LCA4MiwgNzMsIAorICAgIDc4LCA3MSwgNjksIDEyOCwgODMsIDg5LCA4MiwgNzMsIDY1LCAxOTUsIDgzLCA4OSwgODIsIDEyOCwgODMsIDg5LCA4MCwgCisgICAgMTI4LCA4MywgODksIDc5LCA4NSwgODcsIDY1LCAxMjgsIDgzLCA4OSwgNzgsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgzLCAKKyAgICA4OSwgNzgsIDY4LCA2OSwgODMsIDc3LCA3OSwgMjExLCA4MywgODksIDc4LCA2NywgNzIsIDgyLCA3OSwgNzgsIDc5LCA4NSwgCisgICAgMjExLCA4MywgODksIDc4LCA2NSwgNzEsIDc5LCA3MSwgODUsIDY5LCAxMjgsIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIAorICAgIDE5MywgODMsIDg5LCA3OCwgNjUsIDcwLCA3MywgMTI4LCA4MywgODksIDc4LCAxMjgsIDgzLCA4OSwgNzcsIDc3LCA2OSwgCisgICAgODQsIDgyLCA4OSwgMTI4LCA4MywgODksIDc3LCA3NywgNjksIDg0LCA4MiwgNzMsIDE5NSwgODMsIDg5LCA3NywgNjYsIDc5LCAKKyAgICA3NiwgODMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAorICAgIDQ1LCA1NiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCisgICAgNDUsIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCAKKyAgICA3NiwgNDUsIDUzLCA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIAorICAgIDY2LCA3OSwgNzYsIDQ1LCA1MywgNDksIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1NywgMTI4LCAKKyAgICA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgCisgICAgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1MywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKKyAgICA0NSwgNTIsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIAorICAgIDc5LCA3NiwgNDUsIDUyLCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDEyOCwgODMsIDg5LCA3NywgCisgICAgNjYsIDc5LCA3NiwgNDUsIDUxLCA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDU2LCAxMjgsIDgzLCAKKyAgICA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA1NCwgCisgICAgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCAKKyAgICA1MSwgNDgsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAorICAgIDQ1LCA1MCwgNTcsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgCisgICAgNzksIDc2LCA0NSwgNTAsIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDg5LCAKKyAgICA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUxLCAxMjgsIAorICAgIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCAKKyAgICA0OSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAorICAgIDQ1LCA1MCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgCisgICAgNzYsIDQ1LCA0OSwgNTYsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgODksIDc3LCAKKyAgICA2NiwgNzksIDc2LCA0NSwgNDksIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIAorICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDUxLCAKKyAgICAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIAorICAgIDQ5LCA0OSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgCisgICAgNzYsIDQ1LCA0OSwgMTI4LCA4MywgODksIDc2LCA3OSwgODQsIDIwMSwgODMsIDg5LCAxMjgsIDgzLCA4NywgOTAsIDEyOCwgCisgICAgODMsIDg3LCA4NSwgNzgsIDE5OSwgODMsIDg3LCA3OSwgODIsIDY4LCA4MywgMTI4LCA4MywgODcsIDc5LCA4MiwgNjgsIAorICAgIDEyOCwgODMsIDg3LCA3OSwgNzksIDEyOCwgODMsIDg3LCA3OSwgMTI4LCA4MywgODcsIDczLCA4MiwgMjA0LCA4MywgODcsIAorICAgIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg3LCA3MywgNzcsIDc3LCA2OSwgODIsIDEyOCwgODMsIDg3LCA3MywgCisgICAgNzMsIDEyOCwgODMsIDg3LCA3MywgMTI4LCA4MywgODcsIDcxLCAxMjgsIDgzLCA4NywgNjksIDY5LCA4NCwgMTI4LCA4MywgCisgICAgODcsIDY5LCA2OSwgMjEyLCA4MywgODcsIDY5LCA2NSwgODQsIDEyOCwgODMsIDg3LCA2OSwgNjUsIDIxMiwgODMsIDg3LCAKKyAgICA2NSwgODMsIDIwMCwgODMsIDg3LCA2NSwgODAsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NywgNjUsIDY1LCAxMjgsIAorICAgIDgzLCA4NywgMTI4LCA4MywgODYsIDY1LCA4MywgODQsIDIwMSwgODMsIDg2LCA2NSwgODIsIDczLCA4NCwgNjUsIDEyOCwgCisgICAgODMsIDg2LCA2NSwgODIsIDczLCA4NCwgMTkzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4NSwgODUsIDEyOCwgODMsIDg1LCAKKyAgICA4NCwgODIsIDE5MywgODMsIDg1LCA4NCwgMTI4LCA4MywgODUsIDgzLCA4MCwgNjksIDc4LCA4MywgNzMsIDc5LCAyMDYsIAorICAgIDgzLCA4NSwgODMsIDcyLCA3MywgMTI4LCA4MywgODUsIDgyLCA4OSwgNjUsIDEyOCwgODMsIDg1LCA4MiwgODgsIDEyOCwgCisgICAgODMsIDg1LCA4MiwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgzLCA4NSwgODIsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDgzLCAKKyAgICA4NSwgODIsIDcwLCA2OSwgODIsIDEyOCwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgMTk3LCA4MywgODUsIDgyLCA2OSwgCisgICAgMTI4LCA4MywgODUsIDgyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA4NSwgODIsIDU3LCAxMjgsIDgzLCA4NSwgODIsIDEyOCwgCisgICAgODMsIDg1LCAyMTAsIDgzLCA4NSwgODAsIDgyLCA2NSwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgzLCA4NSwgODAsIDY5LCAKKyAgICA4MiwgODYsIDczLCA4MywgNjksIDEyOCwgODMsIDg1LCA4MCwgNjksIDgyLCA4MywgNjksIDg0LCAxMjgsIDgzLCA4NSwgODAsIAorICAgIDY5LCA4MiwgODMsIDY5LCAyMTIsIDgzLCA4NSwgODAsIDY5LCA4MiwgODMsIDY3LCA4MiwgNzMsIDgwLCAyMTIsIDgzLCA4NSwgCisgICAgODAsIDY5LCA4MiwgNzMsIDc3LCA4MCwgNzksIDgzLCA2OSwgMTk2LCA4MywgODUsIDgwLCA2OSwgODIsIDcwLCA3MywgODgsIAorICAgIDY5LCAxOTYsIDgzLCA4NSwgODAsIDY5LCAyMTAsIDgzLCA4NSwgODAsIDEyOCwgODMsIDg1LCA3OSwgODgsIDEyOCwgODMsIAorICAgIDg1LCA3OSwgODAsIDEyOCwgODMsIDg1LCA3OSwgMTI4LCA4MywgODUsIDc4LCA4MywgNjksIDIxMiwgODMsIDg1LCA3OCwgCisgICAgODIsIDczLCA4MywgNjksIDEyOCwgODMsIDg1LCA3OCwgODIsIDczLCA4MywgMTk3LCA4MywgODUsIDc4LCA3MSwgNzYsIDY1LCAKKyAgICA4MywgODMsIDY5LCA4MywgMTI4LCA4MywgODUsIDc4LCA3MSwgMTI4LCA4MywgODUsIDc4LCA3MCwgNzYsIDc5LCA4NywgNjksIAorICAgIDgyLCAxMjgsIDgzLCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA4MywgODUsIDc4LCAxMjgsIDgzLCA4NSwgCisgICAgMjA2LCA4MywgODUsIDc3LCA3NywgNjksIDgyLCAxMjgsIDgzLCA4NSwgNzcsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgODMsIDg1LCA3NywgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA4NSwgNzcsIDY1LCA4MywgNzIsIDEyOCwgCisgICAgODMsIDg1LCA3NywgMTI4LCA4MywgODUsIDc2LCA3MCwgODUsIDgyLCAxMjgsIDgzLCA4NSwgNzUsIDg1LCA3OCwgMTI4LCAKKyAgICA4MywgODUsIDc1LCA4NSwgMjA2LCA4MywgODUsIDc1LCA4NSwgMTI4LCA4MywgODUsIDc1LCAyMTMsIDgzLCA4NSwgNzMsIAorICAgIDg0LCA2NSwgNjYsIDc2LCA2OSwgMTI4LCA4MywgODUsIDczLCA4NCwgMTI4LCA4MywgODUsIDczLCAyMTIsIDgzLCA4NSwgCisgICAgNzIsIDg1LCA4MiwgMTI4LCA4MywgODUsIDY5LCAxMjgsIDgzLCA4NSwgNjgsIDUwLCAxMjgsIDgzLCA4NSwgNjgsIDEyOCwgCisgICAgODMsIDg1LCA2NywgNzUsIDczLCA3OCwgMTk5LCA4MywgODUsIDY3LCA3NSwgNjksIDY4LCAxMjgsIDgzLCA4NSwgNjcsIAorICAgIDIwMywgODMsIDg1LCA2NywgNjcsIDY5LCA2OSwgNjgsIDgzLCAxMjgsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDY4LCAKKyAgICAyMTEsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDY4LCAxMjgsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDE5NiwgODMsIAorICAgIDg1LCA2NiwgODUsIDc4LCA3MywgODQsIDEyOCwgODMsIDg1LCA2NiwgODMsIDg0LCA3MywgODQsIDg1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgzLCA4NSwgNjYsIDgzLCA4NCwgNzMsIDg0LCA4NSwgODQsIDY5LCAxMjgsIDgzLCA4NSwgNjYsIDgzLCA4NCwgNzMsIAorICAgIDg0LCA4NSwgODQsIDE5NywgODMsIDg1LCA2NiwgODMsIDY5LCA4NCwgMTI4LCA4MywgODUsIDY2LCA4MywgNjksIDIxMiwgCisgICAgODMsIDg1LCA2NiwgODMsIDY3LCA4MiwgNzMsIDgwLCAyMTIsIDgzLCA4NSwgNjYsIDgwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIAorICAgIDgzLCAxMjgsIDgzLCA4NSwgNjYsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MywgODUsIDY2LCA3NiwgNzMsIDc3LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg1LCA2NiwgNzYsIDczLCA3NywgNjUsIDg0LCA2OSwgNDUsIDUxLCAxMjgsIDgzLCAKKyAgICA4NSwgNjYsIDc2LCA3MywgNzcsIDY1LCA4NCwgNjksIDQ1LCA1MCwgMTI4LCA4MywgODUsIDY2LCA3NiwgNzMsIDc3LCA2NSwgCisgICAgODQsIDY5LCAxMjgsIDgzLCA4NSwgNjYsIDc2LCA3MywgNzcsIDY1LCA4NCwgMTk3LCA4MywgODUsIDY2LCA3NCwgNzksIDczLCAKKyAgICA3OCwgNjksIDE5NiwgODMsIDg1LCA2NiwgNzQsIDY5LCA2NywgODQsIDEyOCwgODMsIDg1LCA2NiwgNzMsIDg0LCA3OSwgCisgICAgMTI4LCA4MywgODUsIDY2LCA3MSwgODIsIDc5LCA4NSwgODAsIDEyOCwgODMsIDg1LCA2NiwgNzEsIDgyLCA3OSwgODUsIAorICAgIDIwOCwgODMsIDg1LCA2NiwgMTI4LCA4MywgODUsIDY1LCA3NywgMTI4LCA4MywgODUsIDY1LCA2OSwgODQsIDEyOCwgODMsIAorICAgIDg1LCA2NSwgNjksIDc4LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDgzLCA4NSwgNjUsIDY2LCAxMjgsIDgzLCA4NSwgCisgICAgNjUsIDEyOCwgODMsIDIxMywgODMsIDg0LCA4OCwgMTI4LCA4MywgODQsIDg3LCA2NSwgMTI4LCA4MywgODQsIDg1LCA2OCwgCisgICAgODksIDEyOCwgODMsIDg0LCA4NSwgNjgsIDczLCAyMDcsIDgzLCA4NCwgODUsIDY3LCA3NSwgNDUsIDc5LCA4NSwgMjEyLCAKKyAgICA4MywgODQsIDgzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA4MywgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAyMTEsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NywgMTI4LCAKKyAgICA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTYsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU1LCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTMsIDEyOCwgCisgICAgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUyLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MSwgMTI4LCAKKyAgICA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OSwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCAKKyAgICA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDE5NywgODMsIDg0LCA4MiwgNzMsIDgwLCA2OSwgMTI4LCA4MywgODQsIAorICAgIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA4MywgODQsIDgyLCA3MywgNzUsIDY5LCA4NCwgCisgICAgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA4MywgODQsIDgyLCA3MywgNzUsIDE5NywgODMsIDg0LCA4MiwgNzMsIDY4LCAKKyAgICA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA3NiwgMjE3LCA4MywgODQsIDgyLCA2OSwgODQsIDY3LCA3MiwgNjksIAorICAgIDE5NiwgODMsIDg0LCA4MiwgNjksIDg0LCA2NywgNzIsIDEyOCwgODMsIDg0LCA4MiwgNjksIDgzLCAyMTEsIDgzLCA4NCwgCisgICAgODIsIDY5LCA3OCwgNzEsIDg0LCA3MiwgMTI4LCA4MywgODQsIDgyLCA2OSwgNjUsIDc3LCA2OSwgODIsIDEyOCwgODMsIDg0LCAKKyAgICA4MiwgNjUsIDg3LCA2NiwgNjksIDgyLCA4MiwgODksIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgNzcsIDQ1LCA1MCwgCisgICAgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCA3NywgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCAyMDUsIDgzLCAKKyAgICA4NCwgODIsIDY1LCA4NCwgNzMsIDY1LCAyMDYsIDgzLCA4NCwgODIsIDY1LCA3MywgNzgsIDY5LCA4MiwgMTI4LCA4MywgODQsIAorICAgIDgyLCA2NSwgNzMsIDcxLCA3MiwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAKKyAgICA4NCwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgNzMsIDcwLCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDY1LCA3MSwgNzEsIDczLCA4MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCA3OSwgODYsIDY5LCAKKyAgICAxMjgsIDgzLCA4NCwgNzksIDgyLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODcsIDY1LCA4NCwgNjcsIDcyLCAxMjgsIAorICAgIDgzLCA4NCwgNzksIDgwLCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgNjksIDEyOCwgCisgICAgODMsIDg0LCA3OSwgODAsIDEyOCwgODMsIDg0LCA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgODMsIDg0LCAKKyAgICA3OSwgNjcsIDc1LCAxMjgsIDgzLCA4NCwgNzksIDY3LCAyMDMsIDgzLCA4NCwgNzMsIDgyLCA4MiwgODUsIDIwOCwgODMsIAorICAgIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA4MywgODQsIDczLCA3NiwgMjA0LCA4MywgODQsIDczLCA3NiwgMTk3LCA4MywgCisgICAgODQsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA4NCwgNzMsIDY3LCA3NSwgNzMsIDc4LCAxOTksIDgzLCA4NCwgNzMsIDY3LCAKKyAgICAyMDMsIDgzLCA4NCwgNjksIDgyLCA2OSwgNzksIDEyOCwgODMsIDg0LCA2OSwgODAsIDEyOCwgODMsIDg0LCA2OSwgNzgsIAorICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDgzLCA4NCwgNjksIDc3LCAxMjgsIDgzLCA4NCwgNjksIDY1LCA3NywgCisgICAgNzMsIDc4LCAxOTksIDgzLCA4NCwgNjksIDY1LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgMjA1LCA4MywgODQsIDY1LCAKKyAgICA4NiwgODIsIDc5LCA4NSwgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIAorICAgIDc5LCAyMTEsIDgzLCA4NCwgNjUsIDg1LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA4NSwgMTk3LCA4MywgCisgICAgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MywgODQsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgODMsIDg0LCA2NSwgODIsIDIxMiwgODMsIDg0LCA2NSwgODIsIDgzLCAxMjgsIDgzLCA4NCwgNjUsIAorICAgIDgyLCA4MiwgNjksIDE5NiwgODMsIDg0LCA2NSwgODIsIDc1LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAxMjgsIDgzLCA4NCwgCisgICAgNjUsIDIxMCwgODMsIDg0LCA2NSwgNzgsIDY4LCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgODMsIDg0LCA2NSwgNzgsIDY4LCAKKyAgICA2NSwgODIsIDE5NiwgODMsIDg0LCA2NSwgNzgsIDY4LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCAxMjgsIDgzLCA4NCwgNjUsIAorICAgIDc3LCA4MCwgNjksIDE5NiwgODMsIDg0LCA2NSwgNzYsIDc2LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NCwgNjUsIDcwLCA3MCwgCisgICAgMTI4LCA4MywgODQsIDY1LCA3MCwgMTk4LCA4MywgODQsIDY1LCA2OCwgNzMsIDg1LCA3NywgMTI4LCA4MywgODQsIDY1LCAKKyAgICA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDczLCA4MywgODMsIDczLCA3NywgCisgICAgNzksIDEyOCwgODMsIDg0LCA1MCwgMTI4LCA4MywgODMsIDg5LCA4OCwgMTI4LCA4MywgODMsIDg5LCA4NCwgMTI4LCA4MywgCisgICAgODMsIDg5LCA4MiwgODgsIDEyOCwgODMsIDgzLCA4OSwgODIsIDEyOCwgODMsIDgzLCA4OSwgODAsIDEyOCwgODMsIDgzLCAKKyAgICA4OSwgMTI4LCA4MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODMsIDg1LCA4NSwgMTI4LCA4MywgODMsIDg1LCA4NCwgMTI4LCAKKyAgICA4MywgODMsIDg1LCA4MCwgMTI4LCA4MywgODMsIDc5LCA4OCwgMTI4LCA4MywgODMsIDc5LCA4NCwgMTI4LCA4MywgODMsIAorICAgIDc5LCA4MCwgMTI4LCA4MywgODMsIDc5LCA3OSwgMTI4LCA4MywgODMsIDc5LCAxMjgsIDgzLCA4MywgNzMsIDg4LCAxMjgsIAorICAgIDgzLCA4MywgNzMsIDg0LCAxMjgsIDgzLCA4MywgNzMsIDgwLCAxMjgsIDgzLCA4MywgNzMsIDczLCAxMjgsIDgzLCA4MywgCisgICAgNzMsIDY5LCA4OCwgMTI4LCA4MywgODMsIDczLCA2OSwgODAsIDEyOCwgODMsIDgzLCA3MywgNjksIDEyOCwgODMsIDgzLCAKKyAgICA3MywgMTI4LCA4MywgODMsIDcyLCA3MywgNzgsIDEyOCwgODMsIDgzLCA3MiwgNjksIDEyOCwgODMsIDgzLCA2OSwgODgsIAorICAgIDEyOCwgODMsIDgzLCA2OSwgODAsIDEyOCwgODMsIDgzLCA2OSwgNjksIDEyOCwgODMsIDgzLCA2NSwgODgsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgODUsIDEyOCwgODMsIDgzLCA2NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgCisgICAgNzgsIDcxLCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIAorICAgIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCAKKyAgICA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MiwgNzMsIDY5LCA4NSwgCisgICAgODQsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIAorICAgIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCisgICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCAKKyAgICA3NiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgCisgICAgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCAKKyAgICA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIAorICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDczLCAKKyAgICA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIAorICAgIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY1LCA4MiwgNjUsIDY5LCA2NSwgCisgICAgMTI4LCA4MywgODMsIDY1LCA3MywgMTI4LCA4MywgODMsIDY1LCA2NSwgMTI4LCA4MywgODMsIDUxLCAxMjgsIDgzLCA4MywgCisgICAgNTAsIDEyOCwgODMsIDgyLCAxMjgsIDgzLCA4MSwgODUsIDczLCA4MywgMjAwLCA4MywgODEsIDg1LCA3MywgODIsIDgyLCAKKyAgICA2OSwgMjA0LCA4MywgODEsIDg1LCA3MywgNzEsIDcxLCA3NiwgMTk3LCA4MywgODEsIDg1LCA2OSwgNjksIDkwLCA2OSwgNjgsIAorICAgIDEyOCwgODMsIDgxLCA4NSwgNjksIDY5LCA5MCwgMTk3LCA4MywgODEsIDg1LCA2NSwgMjEyLCA4MywgODEsIDg1LCA2NSwgCisgICAgODIsIDY5LCA4MywgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCA2OCwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAKKyAgICAxMjgsIDgzLCA4MCwgODksIDEyOCwgODMsIDgwLCA4NywgNjUsIDEyOCwgODMsIDgwLCA4NSwgNzgsIDcxLCAyMTEsIDgzLCAKKyAgICA4MCwgODIsIDc5LCA4NSwgODQsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODMsIDgwLCA4MiwgNzMsIAorICAgIDc4LCA3MSwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjcsIDcyLCA3MSwgNjksIDgzLCA2NSwgNzgsIDE5OSwgODMsIDgwLCA4MiwgCisgICAgNjksIDY1LCA2OCwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjUsIDE5NiwgODMsIDgwLCA3OSwgODUsIDg0LCA3MywgNzgsIAorICAgIDE5OSwgODMsIDgwLCA3OSwgODQsIDEyOCwgODMsIDgwLCA3OSwgODIsIDg0LCAyMTEsIDgzLCA4MCwgNzksIDc5LCA3OCwgCisgICAgMTI4LCA4MywgODAsIDc2LCA3MywgODQsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3NiwgNzMsIDg0LCAxMjgsIDgzLCAKKyAgICA4MCwgNzYsIDczLCAyMTIsIDgzLCA4MCwgNzYsIDY1LCA4OSwgNjksIDY4LCAxMjgsIDgzLCA4MCwgNzYsIDY1LCA4MywgNzIsIAorICAgIDczLCA3OCwgMTk5LCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCAKKyAgICAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MywgODAsIAorICAgIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCA3OCwgNjksIDEyOCwgCisgICAgODMsIDgwLCA3MywgNjgsIDY5LCA4MiwgMjE3LCA4MywgODAsIDczLCA2OCwgNjksIDgyLCAxMjgsIDgzLCA4MCwgNzMsIDY4LCAKKyAgICA2OSwgMjEwLCA4MywgODAsIDczLCA2NywgNjksIDEyOCwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCAyMDQsIAogICAgIDgzLCA4MCwgNjksIDgzLCA3NywgNzMsIDc2LCAyMDcsIDgzLCA4MCwgNjksIDY5LCA2OCwgNjYsIDc5LCA2NSwgODQsIDEyOCwgCiAgICAgODMsIDgwLCA2OSwgNjksIDY3LCA3MiwgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDIwMCwgODMsIDgwLCA2OSwgNjcsIDczLCAKLSAgICA2NSwgNzYsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIAotICAgIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDIxMCwgODMsIDgwLCA2OSwgNjUsIDc1LCA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCAKLSAgICA3MywgMjA0LCA4MywgODAsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDczLCA3OCwgCi0gICAgMTk5LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDgyLCAKLSAgICAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCAxMjgsIDgzLCA4MCwgNjUsIDcxLCA3MiwgNjksIDg0LCA4NCwgNzMsIAotICAgIDEyOCwgODMsIDgwLCA2NSwgNjgsIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA2OCwgMTk3LCA4MywgODAsIDY1LCA2NywgCi0gICAgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDgzLCA4MCwgNjUsIDEyOCwgODMsIDc5LCA4OSwgMTI4LCA4MywgCi0gICAgNzksIDg3LCA3MywgNzYsIDIwNywgODMsIDc5LCA4NywgMTI4LCA4MywgNzksIDg1LCA4NCwgNzIsIDY5LCA4MiwgMjA2LCAKLSAgICA4MywgNzksIDg1LCA4NCwgNzIsIDQ1LCA4MywgNzYsIDY1LCA4NiwgNjksIDIxNywgODMsIDc5LCA4NSwgODQsIDIwMCwgODMsIAotICAgIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MywgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDc5LCA4NSwgNzgsIDE5NiwgCi0gICAgODMsIDc5LCA4NSwgNzgsIDY1LCA4MCwgMTI4LCA4MywgNzksIDg1LCAxMjgsIDgzLCA3OSwgODMsIDEyOCwgODMsIDc5LCAKLSAgICA4MiwgMTkzLCA4MywgNzksIDgxLCAxMjgsIDgzLCA3OSwgNzksIDIwNiwgODMsIDc5LCA3OCwgNzQsIDY1LCA3NywgMTI4LCAKLSAgICA4MywgNzksIDc4LCA3MSwgMTI4LCA4MywgNzksIDc4LCAxMjgsIDgzLCA3OSwgNzcsIDgwLCA2OSwgNzgsIDE5OSwgODMsIAotICAgIDc5LCA3NywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCA4MywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCAKLSAgICAyMTEsIDgzLCA3OSwgNzIsIDEyOCwgODMsIDc5LCA3MSwgNjgsIDczLCA2NSwgMjA2LCA4MywgNzksIDcwLCA4NCwgODcsIAotICAgIDY1LCA4MiwgNjksIDQ1LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgMjA2LCA4MywgNzksIDcwLCA4NCwgNzgsIDY5LCAKLSAgICA4MywgODMsIDEyOCwgODMsIDc5LCA3MCwgMjEyLCA4MywgNzksIDE5OCwgODMsIDc5LCA2NywgNzMsIDY5LCA4NCwgODksIAotICAgIDEyOCwgODMsIDc5LCA2NywgNjcsIDY5LCAyMTAsIDgzLCA3OSwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgNjUsIDEyOCwgODMsIAotICAgIDIwNywgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgNzgsIDEyOCwgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgMjA2LCA4MywgCi0gICAgNzgsIDc5LCA4NywgNzAsIDc2LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNzksIDg3LCA2NiwgNzksIDY1LCA4MiwgNjgsIAotICAgIDY5LCA4MiwgMTI4LCA4MywgNzgsIDc5LCA4NywgMTI4LCA4MywgNzgsIDc5LCA4NSwgODQsIDEyOCwgODMsIDc4LCA3OSwgCi0gICAgODUsIDIxMiwgODMsIDc4LCA2NSwgMjA4LCA4MywgNzgsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA2NSwgNzUsIDE5NywgCi0gICAgODMsIDc4LCA2NSwgNzMsIDc2LCAxMjgsIDgzLCA3OCwgMTkzLCA4MywgNzcsIDc5LCA3NSwgNzMsIDc4LCAxOTksIDgzLCAKLSAgICA3NywgNzMsIDgyLCA3NSwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDc2LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIAotICAgIDY5LCAxMjgsIDgzLCA3NywgNjksIDY1LCA4MiwgMTI4LCA4MywgNzcsIDY1LCA4MywgMjAwLCA4MywgNzcsIDY1LCA3NiwgCi0gICAgNzYsIDY5LCAyMTAsIDgzLCA3NywgNjUsIDc2LCA3NiwgMTI4LCA4MywgNzYsIDg1LCA4MiwgMTI4LCA4MywgNzYsIDc5LCAKLSAgICA4NywgNzYsIDg5LCAxMjgsIDgzLCA3NiwgNzksIDIxNSwgODMsIDc2LCA3OSwgODYsIDc5LCAxMjgsIDgzLCA3NiwgNzksIAotICAgIDIxMiwgODMsIDc2LCA3OSwgODAsIDczLCA3OCwgMTk5LCA4MywgNzYsIDc5LCA4MCwgNjksIDEyOCwgODMsIDc2LCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY3LCA2OSwgMTI4LCAKLSAgICA4MywgNzYsIDczLCA2NywgMTk3LCA4MywgNzYsIDY5LCA2OSwgODAsIDIxNywgODMsIDc2LCA2OSwgNjksIDgwLCA3MywgNzgsIAorICAgIDY1LCA3NiwgMTI4LCA4MywgODAsIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA3MywgNzgsIDE5OSwgCisgICAgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgMjEwLCA4MywgODAsIDY5LCAKKyAgICA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgODMsIAorICAgIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MywgMTI4LCA4MywgCisgICAgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDEyOCwgODMsIDgwLCAKKyAgICA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIAorICAgIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgODMsIDgwLCA2NSwgCisgICAgMTI4LCA4MywgNzksIDg5LCAxMjgsIDgzLCA3OSwgODcsIDczLCA3NiwgMjA3LCA4MywgNzksIDg3LCAxMjgsIDgzLCA3OSwgCisgICAgODUsIDg0LCA3MiwgNjksIDgyLCAyMDYsIDgzLCA3OSwgODUsIDg0LCA3MiwgNDUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMjE3LCAKKyAgICA4MywgNzksIDg1LCA4NCwgMjAwLCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgzLCA3OSwgODUsIDc4LCA2OCwgCisgICAgMTI4LCA4MywgNzksIDg1LCA3OCwgMTk2LCA4MywgNzksIDg1LCA3OCwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgODUsIDEyOCwgCisgICAgODMsIDc5LCA4MywgMTI4LCA4MywgNzksIDgyLCAxOTMsIDgzLCA3OSwgODEsIDEyOCwgODMsIDc5LCA3OSwgMjA2LCA4MywgCisgICAgNzksIDc4LCA3NCwgNjUsIDc3LCAxMjgsIDgzLCA3OSwgNzgsIDcxLCAxMjgsIDgzLCA3OSwgNzgsIDEyOCwgODMsIDc5LCAKKyAgICA3NywgODAsIDY5LCA3OCwgMTk5LCA4MywgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDgzLCAxMjgsIAorICAgIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDIxMSwgODMsIDc5LCA3NiwgNzMsIDE5NiwgODMsIDc5LCA3MiwgMTI4LCA4MywgCisgICAgNzksIDcxLCA2OCwgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIAorICAgIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzksIDcwLCAKKyAgICAyMTIsIDgzLCA3OSwgMTk4LCA4MywgNzksIDY3LCA3MywgNjksIDg0LCA4OSwgMTI4LCA4MywgNzksIDY3LCA2NywgNjksIAorICAgIDIxMCwgODMsIDc5LCA2NSwgODAsIDEyOCwgODMsIDc5LCA2NSwgMTI4LCA4MywgMjA3LCA4MywgNzgsIDc5LCA4NywgNzcsIAorICAgIDY1LCA3OCwgMTI4LCA4MywgNzgsIDc5LCA4NywgNzcsIDY1LCAyMDYsIDgzLCA3OCwgNzksIDg3LCA3MCwgNzYsIDY1LCA3NSwgCisgICAgNjksIDEyOCwgODMsIDc4LCA3OSwgODcsIDY2LCA3OSwgNjUsIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgzLCA3OCwgNzksIDg3LCAKKyAgICAxMjgsIDgzLCA3OCwgNzksIDIxNSwgODMsIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgzLCA3OCwgNzksIDg1LCAyMTIsIDgzLCAKKyAgICA3OCwgNjUsIDIwOCwgODMsIDc4LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNjUsIDc1LCAxOTcsIDgzLCA3OCwgNjUsIAorICAgIDczLCA3NiwgMTI4LCA4MywgNzgsIDE5MywgODMsIDc3LCA3OSwgNzUsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA4MiwgCisgICAgNzUsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDc2LCA2OSwgMTI4LCAKKyAgICA4MywgNzcsIDczLCA3NiwgMTk3LCA4MywgNzcsIDY5LCA2NSwgODIsIDEyOCwgODMsIDc3LCA2NSwgODMsIDIwMCwgODMsIAorICAgIDc3LCA2NSwgNzYsIDc2LCA2OSwgMjEwLCA4MywgNzcsIDY1LCA3NiwgNzYsIDEyOCwgODMsIDc2LCA4NSwgODIsIDEyOCwgCisgICAgODMsIDc2LCA3OSwgODcsIDc2LCA4OSwgMTI4LCA4MywgNzYsIDc5LCA4NywgMTI4LCA4MywgNzYsIDc5LCAyMTUsIDgzLCAKKyAgICA3NiwgNzksIDg2LCA3OSwgMTI4LCA4MywgNzYsIDc5LCAyMTIsIDgzLCA3NiwgNzksIDgwLCA3MywgNzgsIDE5OSwgODMsIAorICAgIDc2LCA3OSwgODAsIDY5LCAxMjgsIDgzLCA3NiwgNzksIDY1LCAyMDYsIDgzLCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgCisgICAgNzYsIDczLCA3MSwgNzIsIDg0LCA3NiwgMjE3LCA4MywgNzYsIDczLCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCAKKyAgICA2OCwgNjksIDgyLCAxMjgsIDgzLCA3NiwgNzMsIDY3LCA2OSwgMTI4LCA4MywgNzYsIDczLCA2NywgMTk3LCA4MywgNzYsIAorICAgIDY5LCA4NSwgODQsIDIwMCwgODMsIDc2LCA2OSwgNjksIDgwLCAyMTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgNzMsIDc4LCAKICAgICAxOTksIDgzLCA3NiwgNjUsIDg2LCA3OSwgNzgsIDczLCAxOTUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMTI4LCA4MywgNzYsIAogICAgIDY1LCA4MywgNzIsIDEyOCwgODMsIDc2LCA2NSwgODMsIDIwMCwgODMsIDc2LCA2NSwgNzgsIDg0LCA2OSwgMTk2LCA4MywgCiAgICAgNzUsIDg3LCA2NSwgMTI4LCA4MywgNzUsIDg3LCAxMjgsIDgzLCA3NSwgODUsIDc2LCA3NiwgMTI4LCA4MywgNzUsIDg1LCAKICAgICA3NiwgMjA0LCA4MywgNzUsIDc2LCA3MywgODIsIDc5LCAyMDYsIDgzLCA3NSwgNzMsIDc4LCAxMjgsIDgzLCA3NSwgNzMsIAogICAgIDY5LCA4MiwgMTI4LCA4MywgNzUsIDIwMSwgODMsIDc1LCA2OSwgODcsIDY5LCAxOTYsIDgzLCA3NSwgNjUsIDg0LCA2OSwgCi0gICAgMTI4LCA4MywgNzUsIDEyOCwgODMsIDc0LCA2OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCAKLSAgICA4MiwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDg5LCAxMjgsIDgzLCA3MywgODgsIDg0LCAyMTcsIDgzLCA3MywgODgsIAotICAgIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDcyLCAyMTEsIDgzLCA3MywgODgsIDg0LCA3MiwgMTI4LCA4MywgCi0gICAgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIAotICAgIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA3MywgODgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAKLSAgICAxMjgsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgODMsIDczLCA4OCwgNDUsIDgwLCA2OSwgODIsIAotICAgIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIDIxNiwgODMsIDczLCA4NCwgCi0gICAgNjksIDEyOCwgODMsIDczLCA4MywgNjUsIDEyOCwgODMsIDczLCA4MiwgNzMsIDc4LCA3MSwgODUsIDEyOCwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgzLCA4MywgCi0gICAgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKLSAgICAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIAotICAgIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc4LCA3MywgNjksIDg1LCAKLSAgICA3OCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIAotICAgIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCAKLSAgICA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MywgNjksIDg1LCA3OCwgCi0gICAgNzEsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCAKLSAgICA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgCi0gICAgMTI4LCA4MywgNzMsIDc5LCAyMTEsIDgzLCA3MywgNzgsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzgsIDcxLCAKLSAgICA3NiwgNjksIDQ1LCA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgCi0gICAgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTAsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIAotICAgIDE5NywgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDE5NywgODMsIDczLCA3OCwgCi0gICAgNzEsIDY1LCA2NSwgODQsIDEyOCwgODMsIDczLCA3OCwgMTk3LCA4MywgNzMsIDc4LCA2OCwgNzIsIDIwMSwgODMsIDczLCAKLSAgICAyMDYsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgODIsIAotICAgIDEyOCwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgMjEwLCA4MywgNzMsIDc3LCA2NSwgNzgsIDgzLCA3MywgMjExLCA4MywgCi0gICAgNzMsIDc3LCA2NSwgNzYsIDg1LCA3OCwgNzEsIDg1LCAyMDYsIDgzLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzYsIDg2LCAKLSAgICA2OSwgODIsIDEyOCwgODMsIDczLCA3NiwgNzUsIDEyOCwgODMsIDczLCA3NiwgNzMsIDgxLCA4NSwgMTkzLCA4MywgNzMsIAotICAgIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MywgNzMsIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCAKLSAgICAxOTcsIDgzLCA3MywgNzYsIDY1LCA1MSwgMTI4LCA4MywgNzMsIDc1LCA3MywgMTI4LCA4MywgNzMsIDc1LCA1MCwgMTI4LCAKLSAgICA4MywgNzMsIDc1LCAxNzgsIDgzLCA3MywgNzEsIDc4LCA4MywgMTI4LCA4MywgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIAotICAgIDczLCA3MSwgNzcsIDE5MywgODMsIDczLCA3MSwgNjksIDIwNCwgODMsIDczLCA3MSwgNTIsIDEyOCwgODMsIDczLCA3MSwgCi0gICAgMTgwLCA4MywgNzMsIDcxLCAxMjgsIDgzLCA3MywgNjksIDY5LCAxMjgsIDgzLCA3MywgNjgsIDY5LCA4NywgNjUsIDg5LCAKLSAgICAyMTEsIDgzLCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzMsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIAotICAgIDgzLCA3MywgNjYsIDE5NywgODMsIDIwMSwgODMsIDcyLCA4OSwgODgsIDEyOCwgODMsIDcyLCA4OSwgODQsIDEyOCwgODMsIAotICAgIDcyLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAxMjgsIDgzLCA3MiwgODksIDgwLCAxMjgsIDgzLCA3MiwgCi0gICAgODksIDY5LCAxMjgsIDgzLCA3MiwgODksIDY1LCAxMjgsIDgzLCA3MiwgODksIDEyOCwgODMsIDcyLCA4NywgNzksIDg5LCAKLSAgICAxMjgsIDgzLCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3MywgNzMsIAotICAgIDEyOCwgODMsIDcyLCA4NywgNzMsIDEyOCwgODMsIDcyLCA4NywgNjksIDEyOCwgODMsIDcyLCA4NywgNjUsIDY1LCAxMjgsIAotICAgIDgzLCA3MiwgODcsIDY1LCAxMjgsIDgzLCA3MiwgODUsIDg4LCAxMjgsIDgzLCA3MiwgODUsIDg1LCAxMjgsIDgzLCA3MiwgCi0gICAgODUsIDg0LCAxMjgsIDgzLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCAKLSAgICA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODgsIDEyOCwgODMsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDgzLCA3MiwgODUsIAotICAgIDc5LCAxMjgsIDgzLCA3MiwgODUsIDc3LCAxMjgsIDgzLCA3MiwgODUsIDcwLCA3MCwgNzYsIDE5NywgODMsIDcyLCA4NSwgCisgICAgMTI4LCA4MywgNzUsIDEyOCwgODMsIDc0LCA2OSwgMTI4LCA4MywgNzMsIDkwLCAxOTcsIDgzLCA3MywgODgsIDg0LCA4OSwgCisgICAgNDUsIDcwLCA3OSwgODUsIDgyLCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgODksIDEyOCwgODMsIDczLCA4OCwgODQsIAorICAgIDIxNywgODMsIDczLCA4OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNzIsIDIxMSwgODMsIDczLCA4OCwgCisgICAgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCAKKyAgICA2OSwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAyMDAsIDgzLCA3MywgODgsIAorICAgIDg0LCA2OSwgNjksIDc4LCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDczLCA4OCwgNDUsIDg0LCA3MiwgCisgICAgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDczLCA4OCwgNDUsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA4MywgNzMsIDg4LCAKKyAgICA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDgzLCA3MywgODgsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgCisgICAgMjE2LCA4MywgNzMsIDg0LCA2OSwgMTI4LCA4MywgNzMsIDgzLCA2NSwgMTI4LCA4MywgNzMsIDgyLCA3MywgNzgsIDcxLCAKKyAgICA4NSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA3MywgNzksIAorICAgIDgzLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCA3MywgCisgICAgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCAKKyAgICA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgCisgICAgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCAKKyAgICA3MywgNzksIDgzLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgCisgICAgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIAorICAgIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgCisgICAgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgzLCA3MywgNzksIDIxMSwgODMsIDczLCA3OCwgODUsIDgzLCA3OSwgNzMsIDE5NiwgCisgICAgODMsIDczLCA3OCwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgODMsIDczLCA3OCwgNzUsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUxLCAxMjgsIDgzLCA3MywgCisgICAgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MCwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIAorICAgIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgCisgICAgMTk3LCA4MywgNzMsIDc4LCA3MSwgNjUsIDY1LCA4NCwgMTI4LCA4MywgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDY4LCAKKyAgICA3MiwgMjAxLCA4MywgNzMsIDIwNiwgODMsIDczLCA3NywgODUsIDc2LCA4NCwgNjUsIDc4LCA2OSwgNzksIDg1LCA4MywgCisgICAgMTI4LCA4MywgNzMsIDc3LCA4NSwgNzYsIDg0LCA2NSwgNzgsIDY5LCA3OSwgODUsIDIxMSwgODMsIDczLCA3NywgODAsIDc2LCAKKyAgICA3MywgNzAsIDczLCA2OSwgMTk2LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCA4MiwgMTI4LCA4MywgNzMsIDc3LCA3MywgNzYsIAorICAgIDY1LCAyMTAsIDgzLCA3MywgNzcsIDY1LCA3OCwgODMsIDczLCAyMTEsIDgzLCA3MywgNzcsIDY1LCA3NiwgODUsIDc4LCA3MSwgCisgICAgODUsIDIwNiwgODMsIDczLCA3NywgNjUsIDEyOCwgODMsIDczLCA3NiwgODYsIDY5LCA4MiwgMTI4LCA4MywgNzMsIDc2LCAKKyAgICA3NSwgMTI4LCA4MywgNzMsIDc2LCA3MywgODEsIDg1LCAxOTMsIDgzLCA3MywgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIAorICAgIDY5LCAxMjgsIDgzLCA3MywgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIDE5NywgODMsIDczLCA3NiwgNjUsIDUxLCAKKyAgICAxMjgsIDgzLCA3MywgNzUsIDczLCAxMjgsIDgzLCA3MywgNzUsIDUwLCAxMjgsIDgzLCA3MywgNzUsIDE3OCwgODMsIDczLCAKKyAgICA3MSwgNzgsIDgzLCAxMjgsIDgzLCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDcxLCA3NywgMTkzLCA4MywgNzMsIAorICAgIDcxLCA2OSwgMjA0LCA4MywgNzMsIDcxLCA1MiwgMTI4LCA4MywgNzMsIDcxLCAxODAsIDgzLCA3MywgNzEsIDEyOCwgODMsIAorICAgIDczLCA2OSwgNjksIDEyOCwgODMsIDczLCA2OCwgNjksIDg3LCA2NSwgODksIDIxMSwgODMsIDczLCA2OCwgNjksIDEyOCwgCisgICAgODMsIDczLCA2OCwgMTk3LCA4MywgNzMsIDY4LCA2OCwgNzIsIDY1LCA3NywgMTI4LCA4MywgNzMsIDY3LCA3NSwgNzgsIDY5LCAKKyAgICA4MywgODMsIDEyOCwgODMsIDczLCA2NywgNzUsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDY2LCAxOTcsIDgzLCA3MywgNjUsIAorICAgIDEyOCwgODMsIDIwMSwgODMsIDcyLCA4OSwgODgsIDEyOCwgODMsIDcyLCA4OSwgODQsIDEyOCwgODMsIDcyLCA4OSwgODIsIAorICAgIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAxMjgsIDgzLCA3MiwgODksIDgwLCAxMjgsIDgzLCA3MiwgODksIDY5LCAxMjgsIAorICAgIDgzLCA3MiwgODksIDY1LCAxMjgsIDgzLCA3MiwgODksIDEyOCwgODMsIDcyLCA4NywgNzksIDg5LCAxMjgsIDgzLCA3MiwgCisgICAgODcsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3MywgNzMsIDEyOCwgODMsIDcyLCAKKyAgICA4NywgNzMsIDEyOCwgODMsIDcyLCA4NywgNjksIDEyOCwgODMsIDcyLCA4NywgMTk3LCA4MywgNzIsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgODMsIDcyLCA4NywgNjUsIDEyOCwgODMsIDcyLCA4NSwgODgsIDEyOCwgODMsIDcyLCA4NSwgODUsIDEyOCwgODMsIAorICAgIDcyLCA4NSwgODQsIDg0LCA3NiwgNjksIDY3LCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgODUsIDg0LCAxMjgsIDgzLCA3MiwgCisgICAgODUsIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA4MCwgMTI4LCA4MywgNzIsIDg1LCAKKyAgICA3OSwgODgsIDEyOCwgODMsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDgzLCA3MiwgODUsIDc5LCAxMjgsIDgzLCA3MiwgODUsIAorICAgIDc3LCAxMjgsIDgzLCA3MiwgODUsIDc2LCAxMjgsIDgzLCA3MiwgODUsIDcwLCA3MCwgNzYsIDE5NywgODMsIDcyLCA4NSwgCiAgICAgNjksIDgxLCAxMjgsIDgzLCA3MiwgODUsIDY5LCA3OCwgODMsIDcyLCA4NSwgNjksIDg0LCAxMjgsIDgzLCA3MiwgODUsIDY2LCAKICAgICA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgNTAsIDEyOCwgODMsIDcyLCA4NSwgMTc4LCA4MywgNzIsIDg1LCAxMjgsIDgzLCAKICAgICA3MiwgMjEzLCA4MywgNzIsIDg0LCA2NSwgODAsIDczLCA2NywgMTI4LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MywgNzIsIAogICAgIDgyLCA3MywgNzgsIDY5LCAxMjgsIDgzLCA3MiwgODIsIDczLCA3NywgODAsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDczLCAKLSAgICAxMjgsIDgzLCA3MiwgNzksIDg5LCAxMjgsIDgzLCA3MiwgNzksIDg4LCAxMjgsIDgzLCA3MiwgNzksIDg3LCA2OSwgODIsIAotICAgIDEyOCwgODMsIDcyLCA3OSwgODUsIDc2LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MywgNzIsIDc5LCA4NCwgMTI4LCA4MywgCi0gICAgNzIsIDc5LCA4MiwgODQsIDgzLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgMjExLCA4MywgNzIsIDc5LCA4MiwgODQsIDY5LCAKLSAgICA3OCwgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjcsIDY1LCA3NSwgNjksIDEyOCwgODMsIDcyLCA3OSwgODIsIAotICAgIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCAKLSAgICA3MywgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4MywgCi0gICAgNzksIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OSwgODMsIDIxMSwgODMsIDcyLCAKLSAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OCwgNjUsIDg1LCAxOTYsIDgzLCA3MiwgNzksIDgyLCA4NCwgCi0gICAgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIAotICAgIDczLCA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCAKLSAgICA3MSwgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCi0gICAgNzEsIDQ1LCA2NSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDIxMiwgODMsIDcyLCAKLSAgICA3OSwgODEsIDEyOCwgODMsIDcyLCA3OSwgMjA5LCA4MywgNzIsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgODQsIAotICAgIDczLCA3OCwgMTk5LCA4MywgNzIsIDc5LCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgNzksIDEyOCwgODMsIDcyLCA3OSwgCi0gICAgNzEsIDIwMSwgODMsIDcyLCA3OSwgMTk5LCA4MywgNzIsIDc5LCA2OSwgMTI4LCA4MywgNzIsIDc5LCAxOTcsIDgzLCA3MiwgCi0gICAgNzksIDY1LCAxMjgsIDgzLCA3MiwgNzksIDEyOCwgODMsIDcyLCA3MywgODksIDg5LCA2NSwgNjUsIDc2LCA2NSwgNjUsIAorICAgIDEyOCwgODMsIDcyLCA4MiwgNzMsIDEyOCwgODMsIDcyLCA3OSwgODksIDEyOCwgODMsIDcyLCA3OSwgODgsIDEyOCwgODMsIAorICAgIDcyLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4NSwgNzYsIDY4LCA2OSwgODIsIDY5LCAxOTYsIDgzLCA3MiwgCisgICAgNzksIDg1LCA3NiwgNjgsIDY5LCAyMTAsIDgzLCA3MiwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgODMsIAorICAgIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNzIsIDY1LCA3OCwgMTk2LCA4MywgCisgICAgNzIsIDc5LCA4MiwgODQsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjcsIDY1LCA3NSwgNjksIAorICAgIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgCisgICAgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIAorICAgIDg3LCA3MywgNzEsIDQ1LCA4MywgNzksIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCAKKyAgICA3OSwgODMsIDIxMSwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OCwgNjUsIDg1LCAxOTYsIAorICAgIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIDc5LCAKKyAgICA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzIsIDc5LCA4MiwgCisgICAgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDcyLCA3OSwgODIsIAorICAgIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCA3OSwgCisgICAgODIsIDIxMiwgODMsIDcyLCA3OSwgODEsIDEyOCwgODMsIDcyLCA3OSwgMjA5LCA4MywgNzIsIDc5LCA4MCwgODAsIDczLCAKKyAgICA3OCwgMTk5LCA4MywgNzIsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgODQsIDczLCA3OCwgMTk5LCA4MywgNzIsIAorICAgIDc5LCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgNzksIDczLCAxMjgsIDgzLCA3MiwgNzksIDc5LCAxMjgsIDgzLCA3MiwgCisgICAgNzksIDcxLCAyMDEsIDgzLCA3MiwgNzksIDE5OSwgODMsIDcyLCA3OSwgNjksIDEyOCwgODMsIDcyLCA3OSwgMTk3LCA4MywgCisgICAgNzIsIDc5LCA2NSwgMTI4LCA4MywgNzIsIDc5LCAxMjgsIDgzLCA3MiwgNzMsIDg5LCA4OSwgNjUsIDY1LCA3NiwgNjUsIDY1LCAKICAgICAxMjgsIDgzLCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgMTkzLCA4MywgNzIsIDczLCA4MiwgMjEyLCAKICAgICA4MywgNzIsIDczLCA4MiwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNzMsIDgyLCAxMjgsIDgzLCA3MiwgNzMsIDIxMCwgODMsIAotICAgIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgODAsIDEyOCwgODMsIDcyLCA3MywgNzgsIDg0LCAyMDcsIDgzLCA3MiwgCi0gICAgNzMsIDc4LCA3MywgNzEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgNzMsIDc4LCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDc3LCAxOTMsIDgzLCA3MiwgNzMsIAotICAgIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDczLCAxMjgsIAotICAgIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgODMsIDcyLCA3MywgNjgsIDEyOCwgCi0gICAgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDcyLCAxOTMsIDgzLCA3MiwgNjksIDg4LCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODUsIAotICAgIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgCi0gICAgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDcyLCA2OSwgODQsIDEyOCwgODMsIDcyLCAKLSAgICA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgNzEsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgzLCA3MiwgCi0gICAgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIDEyOCwgODMsIDcyLCAKLSAgICA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIDgzLCA3MiwgNjksIAotICAgIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgODMsIDcyLCA2OSwgCi0gICAgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAxMjgsIDgzLCAKLSAgICA3MiwgNjksIDY5LCAyMDYsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIDY1LCA4NCwgCi0gICAgMTI4LCA4MywgNzIsIDE5NywgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAxMjgsIDgzLCA3MiwgCi0gICAgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCAKLSAgICA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgODMsIDcyLCA2NSwgODQsIAotICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCA3MiwgNjUsIDgyLCA4MCwgCi0gICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDUwLCAKLSAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIDcyLCA2NSwgNzcsIDgyLCAKLSAgICA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgCi0gICAgODMsIDcyLCA2NSwgNjgsIDY5LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCAKLSAgICAxOTMsIDgzLCA3MiwgNjUsIDY4LCAxMjgsIDgzLCA3MiwgNjUsIDE5NiwgODMsIDcyLCA2NSwgNjYsIDU0LCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDU0LCAxMjgsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDE3OSwgODMsIDcxLCA4MiwgMTkzLCA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCA2NSwgMjE1LCAKLSAgICA4MywgNzEsIDY1LCAxOTQsIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCA2OSwgODgsIAorICAgIDcyLCA3MywgODEsIDEyOCwgODMsIDcyLCA3MywgNzgsIDg0LCAyMDcsIDgzLCA3MiwgNzMsIDc4LCA3MywgNzEsIDEyOCwgCisgICAgODMsIDcyLCA3MywgNzgsIDY4LCAxOTMsIDgzLCA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAxMjgsIDgzLCAKKyAgICA3MiwgNzMsIDc3LCAxOTMsIDgzLCA3MiwgNzMsIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCA3MywgNzMsIAorICAgIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIDY5LCA3NiwgCisgICAgNjgsIDEyOCwgODMsIDcyLCA3MywgNjgsIDEyOCwgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDcyLCA2NSwgMTI4LCA4MywgCisgICAgNzIsIDcyLCAxOTMsIDgzLCA3MiwgNjksIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgNzIsIDY5LCAKKyAgICA4NSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODUsIDc5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgODQsIAorICAgIDg1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgCisgICAgODMsIDcyLCA2OSwgODQsIDEyOCwgODMsIDcyLCA2OSwgMjEyLCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgNzEsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgCisgICAgNzIsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MywgMjAwLCAKKyAgICA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIDEyOCwgODMsIDcyLCA2OSwgNzgsIDEyOCwgODMsIAorICAgIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIDgzLCA3MiwgNjksIDc2LCA3MCwgMTI4LCA4MywgCisgICAgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgODMsIDcyLCA2OSwgNjksIDgwLCAxMjgsIDgzLCAKKyAgICA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAxMjgsIDgzLCA3MiwgNjksIDY5LCAyMDYsIAorICAgIDgzLCA3MiwgNjksIDY5LCAxMjgsIDgzLCA3MiwgNjksIDQ1LCA3MSwgNzksIDY1LCA4NCwgMTI4LCA4MywgNzIsIDE5NywgCisgICAgODMsIDcyLCA2NywgNzIsIDc5LCA3OSwgNzMsIDEyOCwgODMsIDcyLCA2NywgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDg5LCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDg4LCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODMsIAorICAgIDcyLCA2NSwgODYsIDczLCA2NSwgMjA2LCA4MywgNzIsIDY1LCA4NiwgNjksIDE5NiwgODMsIDcyLCA2NSwgODUsIDEyOCwgCisgICAgODMsIDcyLCA2NSwgODQsIDEyOCwgODMsIDcyLCA2NSwgODIsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMTMsIDgzLCAKKyAgICA3MiwgNjUsIDgyLCA4MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjA4LCA4MywgNzIsIDY1LCA4MiwgNjUsIDEyOCwgODMsIAorICAgIDcyLCA2NSwgODIsIDUwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAxNzgsIDgzLCA3MiwgNjUsIDgwLCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgwLCA2OSwgODMsIDEyOCwgODMsIDcyLCA2NSwgODAsIDE5NywgODMsIDcyLCA2NSwgODAsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDgzLCA3MiwgNjUsIDIwNiwgODMsIAorICAgIDcyLCA2NSwgNzcsIDgyLCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA3MiwgNjUsIDc2LCA4MywgNzIsIDY5LCA3NiwgNjksIDg0LCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDc1LCA4NCwgNzMsIDEyOCwgODMsIDcyLCA2NSwgNzUsIDczLCA3OCwgNzEsIDEyOCwgODMsIAorICAgIDcyLCA2NSwgNzUsIDczLCA3OCwgMTk5LCA4MywgNzIsIDY1LCA3NSwgMTI4LCA4MywgNzIsIDY1LCA3MywgMTI4LCA4MywgCisgICAgNzIsIDY1LCA3MCwgODQsIDEyOCwgODMsIDcyLCA2NSwgNzAsIDIxMiwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIAorICAgIDE5NiwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgCisgICAgNjgsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgMTkzLCA4MywgNzIsIDY1LCA2OCwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICAxOTYsIDgzLCA3MiwgNjUsIDY2LCA1NCwgMTI4LCA4MywgNzIsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA1NCwgMTI4LCAKKyAgICA4MywgNzIsIDY1LCAxODIsIDgzLCA3MiwgNjUsIDUxLCAxMjgsIDgzLCA3MiwgNjUsIDE3OSwgODMsIDcxLCA4MiwgMTkzLCAKKyAgICA4MywgNzEsIDc5LCAyMTAsIDgzLCA3MSwgNjcsIDEyOCwgODMsIDcxLCA2NSwgMjE1LCA4MywgNzEsIDY1LCAxOTQsIDgzLCAKKyAgICA3MSwgMTI4LCA4MywgNjksIDg5LCA3NSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCA2OSwgODgsIAogICAgIDg0LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIDgyLCA2NSwgCiAgICAgNzgsIDY3LCA2OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCAKICAgICAyMTcsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgNzgsIApAQCAtMTAwNywxMTk5ICsxMTAwLDEzNjQgQEAKICAgICA3OCwgMTI4LCA4MywgNjksIDgzLCA4NCwgNjksIDgyLCA4NCwgNzMsIDg1LCAyMTEsIDgzLCA2OSwgODMsIDgxLCA4NSwgNzMsIAogICAgIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNjksIDgzLCA2NSwgNzcsIDE5NywgODMsIDY5LCA4MiwgCiAgICAgODYsIDczLCA2NywgMTk3LCA4MywgNjksIDgyLCA3MywgNzAsIDgzLCAxMjgsIDgzLCA2OSwgODIsIDczLCA3MCwgMjExLCAKLSAgICA4MywgNjksIDgxLCA4NSwgNjksIDc4LCA2NywgMTk3LCA4MywgNjksIDgwLCA4NCwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIAotICAgIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCAKLSAgICAyMTAsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MywgNjksIDc4LCA4NCwgNzMsIDEyOCwgODMsIDY5LCA3NywgODUsIAotICAgIDc4LCA2NywgNzMsIDE5MywgODMsIDY5LCA3NywgNzUsIDY1LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA3NywgNzUsIDEyOCwgCi0gICAgODMsIDY5LCA3NywgNzMsIDg2LCA3OSwgODcsIDY5LCAyMDQsIDgzLCA2OSwgNzcsIDczLCA4MywgNzksIDcwLCAyMTIsIDgzLCAKLSAgICA2OSwgNzcsIDczLCA4MywgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDc3LCA3MywgNzcsIDczLCA3OCwgCi0gICAgNzMsIDc3LCAxOTMsIDgzLCA2OSwgNzcsIDczLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDIxMiwgODMsIDY5LCA3NywgNzMsIDY3LCAKLSAgICA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4MywgNjksIDc3LCA3MywgNjcsIDc5LCA3NiwgNzksIDIwNiwgODMsIDY5LCA3NywgNzMsIAotICAgIDY3LCA3MywgODIsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgCi0gICAgODMsIDY5LCA3NywgNzMsIDY2LCA4MiwgNjksIDg2LCA3MywgMjExLCA4MywgNjksIDc3LCA3MywgNDUsIDg2LCA3OSwgNzMsIAotICAgIDY3LCA2OSwgMTk2LCA4MywgNjksIDc2LCA3MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCi0gICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCi0gICAgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCi0gICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCi0gICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU1LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUyLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ5LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTcsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTQsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTEsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDgsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKLSAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKLSAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU3LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU0LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTEsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgCi0gICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIAotICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDgsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAKLSAgICA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNDgsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NiwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ5LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ5LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTcsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MywgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCAKLSAgICA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU1LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDgsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUyLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNDgsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUyLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIAotICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAKLSAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ5LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgCi0gICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTcsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTQsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTQsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgCi0gICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTEsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU1LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDgsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDY5LCAxOTYsIDgzLCA2OSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODMsIDY5LCA3MywgODMsIDc3LCAxOTMsIAotICAgIDgzLCA2OSwgNzIsIDEyOCwgODMsIDY5LCA3MSwgNzksIDc2LCAxMjgsIDgzLCA2OSwgNzEsIDc4LCA3OSwgMTI4LCA4MywgCi0gICAgNjksIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA4MywgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDY5LCA2OSwgNzgsIAotICAgIDEyOCwgODMsIDY5LCA2OSwgMjA2LCA4MywgNjksIDY5LCA2OCwgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDY5LCA2OSwgCi0gICAgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgNzMsIDIwNCwgODMsIDY5LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDY3LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA2OSwgNjcsIDgyLCA2OSwgODQsIAotICAgIDEyOCwgODMsIDY5LCA2NywgNzksIDc4LCA2OCwgMTI4LCA4MywgNjksIDY2LCA2NSwgODQsIDY2LCA2OSwgNzMsIDIxMiwgCi0gICAgODMsIDY5LCA2NSwgODQsIDEyOCwgODMsIDY5LCA2NSwgNzYsIDEyOCwgODMsIDY5LCA2NSwgNzEsIDg1LCA3NiwgMjA0LCAKLSAgICA4MywgNjgsIDc5LCA3OCwgMTk5LCA4MywgNjgsIDEyOCwgODMsIDY3LCA4NywgNjUsIDEyOCwgODMsIDY3LCA4MiwgODUsIAotICAgIDgwLCA3NiwgNjksIDEyOCwgODMsIDY3LCA4MiwgNzksIDc2LCA3NiwgMTI4LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCAKLSAgICAxMjgsIDgzLCA2NywgODIsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDY3LCA4MiwgNjksIDY5LCAyMDYsIDgzLCA2NywgODIsIAotICAgIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgNjcsIDc5LCA4MiwgODAsIDczLCA4NSwgODMsIDEyOCwgODMsIDY3LCA3OSwgCi0gICAgODIsIDY5LCAxMjgsIDgzLCA2NywgNzMsIDgzLCA4MywgNzksIDgyLCA4MywgMTI4LCA4MywgNjcsIDczLCAxMjgsIDgzLCAKLSAgICA2NywgNzIsIDg3LCA2NSwgMTI4LCA4MywgNjcsIDcyLCA4NywgMTkzLCA4MywgNjcsIDcyLCA4MiwgNzksIDY5LCA2OCwgNjksIAotICAgIDgyLCAxMjgsIDgzLCA2NywgNzIsIDc5LCA3OSwgNzYsIDEyOCwgODMsIDY3LCA3MiwgNzksIDc5LCAyMDQsIDgzLCA2NywgCi0gICAgNzIsIDc5LCA3NiwgNjUsIDgyLCAxMjgsIDgzLCA2NywgNzIsIDY5LCA3NywgMTkzLCA4MywgNjcsIDY5LCA4MCwgODQsIDY5LCAKLSAgICAyMTAsIDgzLCA2NywgNjUsIDc4LCA2OCwgNzMsIDY3LCA4NSwgODMsIDEyOCwgODMsIDY3LCA2NSwgNzgsIDY4LCA3MywgNjcsIAotICAgIDg1LCAyMTEsIDgzLCA2NywgNjUsIDIwNiwgODMsIDY3LCA2NSwgNzYsIDY5LCA4MywgMTI4LCA4MywgNjYsIDg1LCAxOTQsIAotICAgIDgzLCA2NiwgODIsIDg1LCAyMDQsIDgzLCA2NSwgODksIDczLCA4MywgMjAxLCA4MywgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA4MywgNjUsIDg5LCAxMjgsIDgzLCA2NSwgODgsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgODMsIDY1LCAKLSAgICA4OCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgzLCA2NSwgODcsIDY1LCA3OCwgMTI4LCA4MywgNjUsIDg3LCAxMjgsIAotICAgIDgzLCA2NSwgODYsIDc5LCA4NSwgODIsIDczLCA3OCwgMTk5LCA4MywgNjUsIDg1LCA3MywgNzYsIDEyOCwgODMsIDY1LCA4NCwgCi0gICAgODUsIDgyLCA3OCwgMTI4LCA4MywgNjUsIDg0LCA3NSwgNjUsIDY1LCA3OCwgNzUsIDg1LCA4NSwgMTI4LCA4MywgNjUsIDg0LCAKLSAgICA3NSwgNjUsIDY1LCA3OCwgMTI4LCA4MywgNjUsIDg0LCA2OSwgNzYsIDc2LCA3MywgODQsIDE5NywgODMsIDY1LCA4NCwgNjcsIAotICAgIDcyLCA2OSwgNzYsIDEyOCwgODMsIDY1LCA4NCwgNjUsIDc4LCA3MSwgNjUsIDEyOCwgODMsIDY1LCA4MywgNzIsIDEyOCwgCi0gICAgODMsIDY1LCA4MywgNjUsIDc1LCAxMjgsIDgzLCA2NSwgODIsIDczLCAxMjgsIDgzLCA2NSwgODIsIDE5MywgODMsIDY1LCAKLSAgICA4MiwgMTI4LCA4MywgNjUsIDgxLCAxMjgsIDgzLCA2NSwgODAsIDY1LCAxMjgsIDgzLCA2NSwgNzgsIDg5LCA3OSwgNzksIAotICAgIDcxLCAxOTMsIDgzLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDE5MywgODMsIDY1LCA3OCwgODQsIDczLCA3MywgNzcsIDg1LCAKLSAgICAxMjgsIDgzLCA2NSwgNzgsIDc4LCA4OSwgNjUsIDEyOCwgODMsIDY1LCA3OCwgNzEsIDY1LCA1MCwgMTI4LCA4MywgNjUsIAotICAgIDc4LCA2OCwgNjUsIDc2LCAxMjgsIDgzLCA2NSwgNzgsIDY1LCA3MiwgMTI4LCA4MywgNjUsIDc4LCAxMjgsIDgzLCA2NSwgCi0gICAgNzcsIDg5LCA3OSwgMjAzLCA4MywgNjUsIDc3LCA4NiwgNjUsIDg0LCAxMjgsIDgzLCA2NSwgNzcsIDgwLCA3MywgMTI4LCAKLSAgICA4MywgNjUsIDc3LCA4MCwgNzIsIDY1LCA3OSwgMTI4LCA4MywgNjUsIDc3LCA3NSwgNjUsIDEyOCwgODMsIDY1LCA3NywgNjksIAotICAgIDc1LCA3MiwgMTI4LCA4MywgNjUsIDc3LCA2OSwgNzUsIDIwMCwgODMsIDY1LCA3NywgNjYsIDY1LCAxMjgsIDgzLCA2NSwgCi0gICAgNzcsIDY1LCA4MiwgNzMsIDg0LCA2NSwgMjA2LCA4MywgNjUsIDc3LCAxMjgsIDgzLCA2NSwgNzYsIDg0LCA3MywgODIsIDY5LCAKLSAgICAxMjgsIDgzLCA2NSwgNzYsIDg0LCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4MywgNjUsIDc2LCA4NCwgNDUsIDUwLCAxMjgsIAotICAgIDgzLCA2NSwgNzYsIDg0LCAxMjgsIDgzLCA2NSwgNzYsIDIxMiwgODMsIDY1LCA3NiwgNzYsIDY1LCA3NiwgNzYsIDY1LCA3MiwgCi0gICAgNzksIDIxMywgODMsIDY1LCA3NiwgNzYsIDE5MywgODMsIDY1LCA3NiwgNjUsIDIwNSwgODMsIDY1LCA3NiwgNjUsIDEyOCwgCi0gICAgODMsIDY1LCA3NiwgNDUsIDY1LCA3NywgNzcsIDc5LCA3OCwgNzMsIDY1LCA2NywgMTI4LCA4MywgNjUsIDc2LCAxMjgsIDgzLCAKLSAgICA2NSwgNzUsIDc5LCA4NCwgMTI4LCA4MywgNjUsIDc1LCA2OSwgODUsIDY1LCA2OSwgMTI4LCA4MywgNjUsIDc1LCAxOTcsIAotICAgIDgzLCA2NSwgNzQsIDY4LCA2NSwgNzIsIDEyOCwgODMsIDY1LCA3MywgNzYsIDY2LCA3OSwgNjUsIDg0LCAxMjgsIDgzLCA2NSwgCi0gICAgNzMsIDc2LCAxMjgsIDgzLCA2NSwgNzMsIDc1LCA4NSwgODIsIDg1LCAxMjgsIDgzLCA2NSwgNzIsIDEyOCwgODMsIDY1LCAKLSAgICA3MSwgNzMsIDg0LCA4NCwgNjUsIDgyLCA3MywgODUsIDgzLCAxMjgsIDgzLCA2NSwgNzEsIDY1LCAxMjgsIDgzLCA2NSwgNzEsIAotICAgIDEyOCwgODMsIDY1LCAxOTksIDgzLCA2NSwgNzAsIDcyLCA2NSwgMTI4LCA4MywgNjUsIDY4LCA3MiwgNjksIDEyOCwgODMsIAotICAgIDY1LCA2OCwgNjksIDEyOCwgODMsIDY1LCA2OCwgMTI4LCA4MywgNjUsIDE5NiwgODMsIDY1LCA2NywgODIsIDczLCA3MCwgCi0gICAgNzMsIDY3LCA3MywgNjUsIDIwNCwgODMsIDY1LCA2NSwgNzMsIDEyOCwgODMsIDY1LCA2NSwgNjgsIDcyLCA4NSwgMTI4LCAKLSAgICA4MywgNjUsIDQ1LCA3MywgMTI4LCA4MywgNjUsIDQ1LCA1MCwgMTI4LCA4MywgNDgsIDUyLCA1NCwgMTI4LCA4MywgNDgsIAotICAgIDUyLCA1MywgMTI4LCA4MywgNDgsIDUyLCA1MiwgMTI4LCA4MywgNDgsIDUyLCA1MSwgMTI4LCA4MywgNDgsIDUyLCA1MCwgCi0gICAgMTI4LCA4MywgNDgsIDUyLCA0OSwgMTI4LCA4MywgNDgsIDUyLCA0OCwgMTI4LCA4MywgNDgsIDUxLCA1NywgMTI4LCA4MywgCi0gICAgNDgsIDUxLCA1NiwgMTI4LCA4MywgNDgsIDUxLCA1NSwgMTI4LCA4MywgNDgsIDUxLCA1NCwgMTI4LCA4MywgNDgsIDUxLCAKLSAgICA1MywgNjUsIDEyOCwgODMsIDQ4LCA1MSwgNTMsIDEyOCwgODMsIDQ4LCA1MSwgNTIsIDEyOCwgODMsIDQ4LCA1MSwgNTEsIAotICAgIDEyOCwgODMsIDQ4LCA1MSwgNTAsIDEyOCwgODMsIDQ4LCA1MSwgNDksIDEyOCwgODMsIDQ4LCA1MSwgNDgsIDEyOCwgODMsIAotICAgIDQ4LCA1MCwgNTcsIDEyOCwgODMsIDQ4LCA1MCwgNTYsIDEyOCwgODMsIDQ4LCA1MCwgNTUsIDEyOCwgODMsIDQ4LCA1MCwgCi0gICAgNTQsIDY2LCAxMjgsIDgzLCA0OCwgNTAsIDU0LCA2NSwgMTI4LCA4MywgNDgsIDUwLCA1NCwgMTI4LCA4MywgNDgsIDUwLCAKLSAgICA1MywgMTI4LCA4MywgNDgsIDUwLCA1MiwgMTI4LCA4MywgNDgsIDUwLCA1MSwgMTI4LCA4MywgNDgsIDUwLCA1MCwgMTI4LCAKLSAgICA4MywgNDgsIDUwLCA0OSwgMTI4LCA4MywgNDgsIDUwLCA0OCwgMTI4LCA4MywgNDgsIDQ5LCA1NywgMTI4LCA4MywgNDgsIAotICAgIDQ5LCA1NiwgMTI4LCA4MywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgODMsIDQ4LCA0OSwgNTUsIDEyOCwgODMsIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgODMsIDQ4LCA0OSwgNTMsIDEyOCwgODMsIDQ4LCA0OSwgNTIsIDY2LCAxMjgsIDgzLCA0OCwgNDksIDUyLCAKLSAgICA2NSwgMTI4LCA4MywgNDgsIDQ5LCA1MiwgMTI4LCA4MywgNDgsIDQ5LCA1MSwgMTI4LCA4MywgNDgsIDQ5LCA1MCwgMTI4LCAKLSAgICA4MywgNDgsIDQ5LCA0OSwgMTI4LCA4MywgNDgsIDQ5LCA0OCwgMTI4LCA4MywgNDgsIDQ4LCA1NywgMTI4LCA4MywgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA4MywgNDgsIDQ4LCA1NSwgMTI4LCA4MywgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgODMsIDQ4LCA0OCwgCi0gICAgNTQsIDEyOCwgODMsIDQ4LCA0OCwgNTMsIDEyOCwgODMsIDQ4LCA0OCwgNTIsIDEyOCwgODMsIDQ4LCA0OCwgNTEsIDEyOCwgCi0gICAgODMsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDgzLCA0OCwgNDgsIDUwLCAxMjgsIDgzLCA0OCwgNDgsIDQ5LCAxMjgsIDgzLCAKLSAgICA0NSwgODcsIDEyOCwgODMsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgODIsIDg5LCA4OSwgMTI4LCA4MiwgODksIAotICAgIDg4LCAxMjgsIDgyLCA4OSwgODQsIDEyOCwgODIsIDg5LCA4MiwgODgsIDEyOCwgODIsIDg5LCA4MiwgMTI4LCA4MiwgODksIAotICAgIDgwLCAxMjgsIDgyLCA4NywgNzksIDc5LCAxMjgsIDgyLCA4NywgNzksIDEyOCwgODIsIDg3LCA3MywgNzMsIDEyOCwgODIsIAotICAgIDg3LCA3MywgMTI4LCA4MiwgODcsIDY5LCA2OSwgMTI4LCA4MiwgODcsIDY5LCAxMjgsIDgyLCA4NywgNjUsIDcyLCA2NSwgCi0gICAgMTI4LCA4MiwgODcsIDY1LCA2NSwgMTI4LCA4MiwgODcsIDY1LCAxMjgsIDgyLCA4NSwgODgsIDEyOCwgODIsIDg1LCA4NSwgCi0gICAgNjYsIDg1LCA4MiwgODUsIDEyOCwgODIsIDg1LCA4NSwgMTI4LCA4MiwgODUsIDg0LCAxMjgsIDgyLCA4NSwgODMsIDczLCAKLSAgICAxMjgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDgyLCA4NSwgODIsIDEyOCwgODIsIDg1LCA4MCwgNzMsIDczLCAxMjgsIDgyLCAKLSAgICA4NSwgODAsIDY5LCAxOTcsIDgyLCA4NSwgODAsIDEyOCwgODIsIDg1LCA3OSwgODgsIDEyOCwgODIsIDg1LCA3OSwgODAsIAotICAgIDEyOCwgODIsIDg1LCA3OSwgMTI4LCA4MiwgODUsIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgyLCA4NSwgNzgsIDc4LCA3MywgCi0gICAgNzgsIDE5OSwgODIsIDg1LCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA4MiwgODUsIDc4LCAxMjgsIDgyLCA4NSwgNzcsIDIwMSwgCi0gICAgODIsIDg1LCA3NywgNjUsIDIwMSwgODIsIDg1LCA3NywgMTI4LCA4MiwgODUsIDIwNSwgODIsIDg1LCA3NiwgNjksIDgyLCAKLSAgICAxMjgsIDgyLCA4NSwgNzYsIDY5LCA0NSwgNjgsIDY5LCA3NiwgNjUsIDg5LCA2OSwgNjgsIDEyOCwgODIsIDg1LCA3NiwgNjksIAotICAgIDEyOCwgODIsIDg1LCA3NSwgNzUsIDY1LCA3NSwgNzIsIDY1LCAxMjgsIDgyLCA4NSwgNzMsIDgzLCAxMjgsIDgyLCA4NSwgCi0gICAgNzEsIDY2LCAyMTcsIDgyLCA4NSwgMTk0LCA4MiwgODUsIDY1LCAxMjgsIDgyLCA4NCwgNzIsIDY1LCA3OCwgMTk5LCA4MiwgCi0gICAgODQsIDY1LCA3MSwgODMsIDEyOCwgODIsIDg0LCA2NSwgNzEsIDIxMSwgODIsIDgyLCA4OSwgODgsIDEyOCwgODIsIDgyLCAKLSAgICA4OSwgODQsIDEyOCwgODIsIDgyLCA4OSwgODIsIDg4LCAxMjgsIDgyLCA4MiwgODksIDgyLCAxMjgsIDgyLCA4MiwgODksIAotICAgIDgwLCAxMjgsIDgyLCA4MiwgODUsIDg4LCAxMjgsIDgyLCA4MiwgODUsIDg1LCAxMjgsIDgyLCA4MiwgODUsIDg0LCAxMjgsIAotICAgIDgyLCA4MiwgODUsIDgyLCA4OCwgMTI4LCA4MiwgODIsIDg1LCA4MiwgMTI4LCA4MiwgODIsIDg1LCA4MCwgMTI4LCA4MiwgCi0gICAgODIsIDg1LCA3OSwgODgsIDEyOCwgODIsIDgyLCA4NSwgNzksIDEyOCwgODIsIDgyLCA4NSwgMTI4LCA4MiwgODIsIDc5LCAKLSAgICA4OCwgMTI4LCA4MiwgODIsIDc5LCA4NCwgMTI4LCA4MiwgODIsIDc5LCA4MCwgMTI4LCA4MiwgODIsIDc5LCA3OSwgMTI4LCAKLSAgICA4MiwgODIsIDc5LCAxMjgsIDgyLCA4MiwgNzMsIDczLCAxMjgsIDgyLCA4MiwgNzMsIDEyOCwgODIsIDgyLCA2OSwgODgsIAotICAgIDEyOCwgODIsIDgyLCA2OSwgODQsIDEyOCwgODIsIDgyLCA2OSwgODAsIDEyOCwgODIsIDgyLCA2OSwgNzIsIDEyOCwgODIsIAotICAgIDgyLCA2OSwgMjAwLCA4MiwgODIsIDY5LCA2OSwgMTI4LCA4MiwgODIsIDY5LCAxMjgsIDgyLCA4MiwgNjUsIDg4LCAxMjgsIAotICAgIDgyLCA4MiwgNjUsIDg1LCAxMjgsIDgyLCA4MiwgNjUsIDczLCAxMjgsIDgyLCA4MiwgNjUsIDY1LCAxMjgsIDgyLCA4MiwgCi0gICAgNjUsIDEyOCwgODIsIDc5LCA4NywgNjYsIDc5LCA2NSwgODQsIDEyOCwgODIsIDc5LCA4NSwgNzgsIDY4LCA2OSwgMTk2LCAKLSAgICA4MiwgNzksIDg1LCA3OCwgNjgsIDQ1LCA4NCwgNzMsIDgwLCA4MCwgNjksIDE5NiwgODIsIDc5LCA4NCwgODUsIDc4LCA2OCwgCi0gICAgNjUsIDEyOCwgODIsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA4MiwgNzksIDgzLCA3MiwgMTI4LCA4MiwgNzksIDgzLCAKLSAgICA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MiwgNzksIDgzLCA2OSwgMTI4LCA4MiwgNzksIDc5LCA4NCwgMTI4LCA4MiwgNzksIAotICAgIDc5LCA4MywgODQsIDY5LCA4MiwgMTI4LCA4MiwgNzksIDc5LCA3NSwgMTI4LCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MiwgCi0gICAgNzksIDc3LCA2NSwgMjA2LCA4MiwgNzksIDc3LCAxMjgsIDgyLCA3OSwgNzYsIDc2LCA2OSwgMjEwLCA4MiwgNzksIDcyLCAKLSAgICA3MywgNzgsIDcxLCA4OSwgMTkzLCA4MiwgNzksIDE5NiwgODIsIDc5LCA2NywgNzUsIDY5LCA4NCwgMTI4LCA4MiwgNzksIAotICAgIDY3LCAyMDMsIDgyLCA3OSwgNjcsIDEyOCwgODIsIDc5LCA2NiwgNjUsIDg0LCAxMjgsIDgyLCA3OSwgNjUsIDgzLCA4NCwgCi0gICAgNjksIDE5NiwgODIsIDc5LCA2NSwgODIsIDEyOCwgODIsIDc5LCA2NSwgMTI4LCA4MiwgNzgsIDg5LCA3MywgNzgsIDE5OSwgCi0gICAgODIsIDc4LCA3OSwgNzksIDc4LCAxMjgsIDgyLCA3OCwgNzksIDc5LCAyMDYsIDgyLCA3OCwgNjUsIDIwNSwgODIsIDc3LCAKLSAgICA4NCwgMTI4LCA4MiwgNzYsIDc5LCAxMjgsIDgyLCA3NiwgNzcsIDEyOCwgODIsIDc2LCA3MywgMTI4LCA4MiwgNzYsIDY5LCAKLSAgICAxMjgsIDgyLCA3NCwgNjksIDIxMSwgODIsIDc0LCA2OSwgMTI4LCA4MiwgNzQsIDE5NywgODIsIDczLCA4NiwgNjksIDgyLCAKLSAgICAxMjgsIDgyLCA3MywgODQsIDg1LCA2NSwgNzYsIDEyOCwgODIsIDczLCA4NCwgODQsIDc5LCA4MiwgODUsIDEyOCwgODIsIAotICAgIDczLCA4NCwgODMsIDczLCAxMjgsIDgyLCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA4MiwgCi0gICAgNzMsIDgyLCA2NSwgMTI4LCA4MiwgNzMsIDgwLCAxMjgsIDgyLCA3MywgNzgsIDcxLCAyMTEsIDgyLCA3MywgNzgsIDcwLCAKLSAgICA3OSwgODIsIDkwLCA2NSwgNzgsIDY4LCA3OSwgMTI4LCA4MiwgNzMsIDIwNiwgODIsIDczLCA3NywgNzEsIDY2LCA2NSwgCi0gICAgMTI4LCA4MiwgNzMsIDc1LCA4MiwgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzEsIDg2LCA2OSwgNjgsIDczLCAxOTUsIDgyLCAKLSAgICA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzIsIDY1LCA3OCwgCi0gICAgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzksIDQ1LCA3NiwgNjksIDcwLCAyMTIsIDgyLCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgCi0gICAgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgCi0gICAgNzgsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKLSAgICA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIAotICAgIDc2LCA0NSwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCAKLSAgICA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCi0gICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAotICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCi0gICAgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIAotICAgIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgCi0gICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIAotICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDY1LCA3OCwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgCi0gICAgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIAotICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgCi0gICAgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIAotICAgIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgCi0gICAgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDcyLCA3MywgNjksIAotICAgIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODIsIDczLCA2OSwgCi0gICAgODUsIDIwNCwgODIsIDczLCA2OSwgNzYsIDEyOCwgODIsIDczLCA2OSwgNjksIDEyOCwgODIsIDczLCA2NywgNjksIDc3LCAKLSAgICAxMjgsIDgyLCA3MywgNjcsIDY5LCAxMjgsIDgyLCA3MywgNjcsIDE5NywgODIsIDczLCA2NiwgNjYsIDc5LCA3OCwgMTI4LCAKLSAgICA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIDc5LCAxMjgsIDgyLCA3MiwgMjA3LCAKLSAgICA4MiwgNzIsIDY1LCAxMjgsIDgyLCA3MSwgODksIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgyLCA3MSwgODksIDY1LCA3OCwgCi0gICAgMTI4LCA4MiwgNzEsIDg5LCAxOTMsIDgyLCA2OSwgODYsIDc5LCA3NiwgODYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDg2LCAKLSAgICA3OSwgNzYsIDg1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDg2LCA3NywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNzMsIAotICAgIDY1LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgCi0gICAgMTk2LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCAxOTcsIDgyLCA2OSwgODUsIDg4LCAxMjgsIDgyLCA2OSwgODUsIDEyOCwgCi0gICAgODIsIDY5LCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NCwgODIsIDc5LCAKLSAgICA3MCwgNzYsIDY5LCAyMTYsIDgyLCA2OSwgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODQsIDc5LCA4MiwgODQsIAotICAgIDEyOCwgODIsIDY5LCA4MywgODUsIDgwLCA3MywgNzgsIDg1LCA4MywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDc5LCA3OSwgCi0gICAgNzcsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgzLCA4NCwgMTI4LCAKLSAgICA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCA4MywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIAotICAgIDgyLCA2OSwgODMsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODMsIDczLCA4MywgODQsIDY1LCAKLSAgICA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDczLCA2OCwgNjksIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgCi0gICAgMjAwLCA4MiwgNjksIDgyLCA2OSwgNzgsIDcxLCA3MSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODIsIDY5LCA3NSwgNjUsIDc4LCAKLSAgICAxMjgsIDgyLCA2OSwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDEyOCwgODIsIDY5LCA4MCwgNzYsIDY1LCA2NywgNjksIAotICAgIDc3LCA2OSwgNzgsIDIxMiwgODIsIDY5LCA4MCwgNzIsIDEyOCwgODIsIDY5LCA4MCwgNjksIDg0LCA3MywgODQsIDczLCA3OSwgCi0gICAgMjA2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCAKLSAgICA2OSwgODAsIDY5LCA2NSwgMjEyLCA4MiwgNjksIDgwLCA2NSwgODksIDY1LCAxMjgsIDgyLCA2OSwgODAsIDY1LCAxMjgsIAotICAgIDgyLCA2OSwgODAsIDE5MywgODIsIDY5LCA3OCwgODQsIDc5LCA3MSwgNjksIDc4LCAxMjgsIDgyLCA2OSwgNzgsIDEyOCwgCi0gICAgODIsIDY5LCAyMDYsIDgyLCA2OSwgNzcsIDg1LCAxMjgsIDgyLCA2OSwgNzcsIDY5LCA2OCwgODksIDEyOCwgODIsIDY5LCAKLSAgICA3NiwgNzMsIDcxLCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNzYsIDczLCA2OSwgODYsIDY5LCAxOTYsIDgyLCA2OSwgNzYsIAotICAgIDY5LCA2NSwgODMsIDY5LCAxMjgsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3NiwgCi0gICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNzYsIDY1LCA2NSwgMTI4LCA4MiwgNjksIDc0LCA2NSwgNzgsIAotICAgIDE5OSwgODIsIDY5LCA3MywgMTk2LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUyLCAxMjgsIDgyLCA2OSwgCi0gICAgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTEsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MCwgMTI4LCAKLSAgICA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCAyMTEsIDgyLCA2OSwgNzEsIAotICAgIDczLCA4MywgODQsIDY5LCA4MiwgNjksIDE5NiwgODIsIDY5LCA3MSwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3MSwgCi0gICAgNzMsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgNzMsIDY1LCAxMjgsIDgyLCA2OSwgNzAsIDc5LCA4MiwgNzcsIDY5LCAKLSAgICAxOTYsIDgyLCA2OSwgNzAsIDY5LCA4MiwgNjksIDc4LCA2NywgMTk3LCA4MiwgNjksIDY4LCA4NSwgODAsIDc2LCA3MywgNjcsIAotICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgCi0gICAgODksIDY3LCA3NiwgNjksIDE5NiwgODIsIDY5LCA2NywgODQsIDczLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODIsIDY5LCAKLSAgICA2NywgODQsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCA2OSwgCi0gICAgMTI4LCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDE5NywgODIsIDY5LCA2NywgODIsIDY5LCA2NSwgODQsIDczLCAKLSAgICA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNjcsIDc5LCA4MiwgNjgsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA3OSwgODIsIAotICAgIDY4LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NywgNzksIDgyLCAxOTYsIDgyLCA2OSwgNjcsIDY5LCA4MCwgODQsIDczLCA4NiwgCi0gICAgMTk3LCA4MiwgNjksIDY3LCA2OSwgNzMsIDg2LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgODIsIDQ1LCAKLSAgICA1MCwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgMTI4LCA4MiwgNjksIDY1LCA3MiwgNzcsIDg1LCA3NSwgCi0gICAgMTI4LCA4MiwgNjksIDY1LCA2NywgNzIsIDEyOCwgODIsIDY4LCAyMDcsIDgyLCA2OCwgNjksIDIwNCwgODIsIDY2LCA2NSwgCi0gICAgODMsIDE5MywgODIsIDY1LCA4OSwgODMsIDEyOCwgODIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODIsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgODQsIDcyLCA2NSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgMTkzLCA4MiwgNjUsIAotICAgIDg0LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgODMsIDg3LCA2NSwgNjgsIDczLCAxMjgsIDgyLCA2NSwgCi0gICAgODMsIDc5LCA4NSwgMjA0LCA4MiwgNjUsIDgzLCA3MiwgNjUsIDEyOCwgODIsIDY1LCA4MSwgMTI4LCA4MiwgNjUsIDgwLCAKLSAgICA3MywgODMsIDc3LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIAotICAgIDc4LCAxMjgsIDgyLCA2NSwgNzcsIDIxMSwgODIsIDY1LCA3NywgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDc1LCA3MiwgCi0gICAgNjUsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDc1LCA2NSwgNjUsIDgyLCA2NSwgNjUsIDc4LCA4MywgNjUsIDg5LCA2NSwgMTI4LCAKLSAgICA4MiwgNjUsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA2NSwgNzMsIDgzLCA2OSwgMTk2LCA4MiwgNjUsIDczLCA3OCwgNjYsIAotICAgIDc5LCA4NywgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCA4OSwgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCAKLSAgICAyMTcsIDgyLCA2NSwgNzMsIDc2LCAxMjgsIDgyLCA2NSwgNzMsIDY4LCAyMDcsIDgyLCA2NSwgNzMsIDY4LCA2NSwgMTI4LCAKLSAgICA4MiwgNjUsIDcyLCA3NywgNjUsIDg0LCA4NSwgNzYsIDc2LCA2NSwgMjAwLCA4MiwgNjUsIDcyLCAxMjgsIDgyLCA2NSwgNzAsIAotICAgIDY5LCAxMjgsIDgyLCA2NSwgNjksIDc3LCAxMjgsIDgyLCA2NSwgNjgsIDczLCA3OSwgNjUsIDY3LCA4NCwgNzMsIDg2LCAKLSAgICAxOTcsIDgyLCA2NSwgNjgsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDY4LCA3MywgMjA3LCA4MiwgNjUsIDY4LCAyMDEsIDgyLCAKLSAgICA2NSwgNjgsIDEyOCwgODIsIDY1LCAxOTYsIDgyLCA2NSwgNjcsIDgxLCA4NSwgNjksIDIxMiwgODIsIDY1LCA2NywgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDY2LCA2NiwgNzMsIDg0LCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgMjEyLCA4MiwgCi0gICAgNjUsIDY2LCAxMjgsIDgyLCA2NSwgNjUsIDczLCAxMjgsIDgyLCA2NSwgNTEsIDEyOCwgODIsIDY1LCA1MCwgMTI4LCA4MiwgCi0gICAgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA1NywgMTI4LCA4MiwgNDgsIDUwLCA1NiwgMTI4LCA4MiwgNDgsIDUwLCAKLSAgICA1NSwgMTI4LCA4MiwgNDgsIDUwLCA1NCwgMTI4LCA4MiwgNDgsIDUwLCA1MywgMTI4LCA4MiwgNDgsIDUwLCA1MiwgMTI4LCAKLSAgICA4MiwgNDgsIDUwLCA1MSwgMTI4LCA4MiwgNDgsIDUwLCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA0OSwgMTI4LCA4MiwgNDgsIAotICAgIDUwLCA0OCwgMTI4LCA4MiwgNDgsIDQ5LCA1NywgMTI4LCA4MiwgNDgsIDQ5LCA1NiwgMTI4LCA4MiwgNDgsIDQ5LCA1NSwgCi0gICAgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDEyOCwgODIsIDQ4LCA0OSwgNTMsIDEyOCwgCi0gICAgODIsIDQ4LCA0OSwgNTIsIDEyOCwgODIsIDQ4LCA0OSwgNTEsIDEyOCwgODIsIDQ4LCA0OSwgNTAsIDEyOCwgODIsIDQ4LCAKLSAgICA0OSwgNDksIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCAxMjgsIDgyLCA0OCwgNDgsIAotICAgIDU3LCAxMjgsIDgyLCA0OCwgNDgsIDU2LCAxMjgsIDgyLCA0OCwgNDgsIDU1LCAxMjgsIDgyLCA0OCwgNDgsIDU0LCAxMjgsIAotICAgIDgyLCA0OCwgNDgsIDUzLCAxMjgsIDgyLCA0OCwgNDgsIDUyLCAxMjgsIDgyLCA0OCwgNDgsIDUxLCA2NiwgMTI4LCA4MiwgCi0gICAgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDEyOCwgODIsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDgyLCAKLSAgICA0OCwgNDgsIDUwLCAxMjgsIDgyLCA0OCwgNDgsIDQ5LCAxMjgsIDgyLCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4MSwgODksIAotICAgIDg4LCAxMjgsIDgxLCA4OSwgODUsIDEyOCwgODEsIDg5LCA4NCwgMTI4LCA4MSwgODksIDgyLCA4OCwgMTI4LCA4MSwgODksIAotICAgIDgyLCAxMjgsIDgxLCA4OSwgODAsIDEyOCwgODEsIDg5LCA3OSwgMTI4LCA4MSwgODksIDczLCAxMjgsIDgxLCA4OSwgNjksIAotICAgIDY5LCAxMjgsIDgxLCA4OSwgNjksIDEyOCwgODEsIDg5LCA2NSwgNjUsIDEyOCwgODEsIDg5LCA2NSwgMTI4LCA4MSwgODksIAotICAgIDEyOCwgODEsIDg3LCA3MywgMTI4LCA4MSwgODcsIDY5LCA2OSwgMTI4LCA4MSwgODcsIDY5LCAxMjgsIDgxLCA4NywgNjUsIAotICAgIDY1LCAxMjgsIDgxLCA4NywgNjUsIDEyOCwgODEsIDg1LCA4OCwgMTI4LCA4MSwgODUsIDg2LCAxMjgsIDgxLCA4NSwgODUsIAotICAgIDg2LCAxMjgsIDgxLCA4NSwgODUsIDEyOCwgODEsIDg1LCA4NCwgMTI4LCA4MSwgODUsIDgzLCA3MiwgODMsIDcyLCA2NSwgCi0gICAgODksIDY1LCAxMjgsIDgxLCA4NSwgODIsIDg4LCAxMjgsIDgxLCA4NSwgODIsIDEyOCwgODEsIDg1LCA4MCwgMTI4LCA4MSwgCi0gICAgODUsIDc5LCA4OCwgMTI4LCA4MSwgODUsIDc5LCA4NCwgMTk3LCA4MSwgODUsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIAotICAgIDIwNiwgODEsIDg1LCA3OSwgODQsIDEyOCwgODEsIDg1LCA3OSwgODAsIDEyOCwgODEsIDg1LCA3OSwgMTI4LCA4MSwgODUsIAotICAgIDc1LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA4NCwgNjksIDgzLCA4MywgNjksIDc4LCA2NywgNjksIDEyOCwgODEsIDg1LCA3MywgCi0gICAgNzgsIDY4LCA3MywgNjcsIDY5LCA4MywgNzMsIDc3LCAxOTMsIDgxLCA4NSwgNzMsIDc4LCA2NywgODUsIDc4LCA4OCwgMTI4LCAKLSAgICA4MSwgODUsIDczLCA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgODEsIDg1LCA3MywgNzYsIDc2LCAxMjgsIDgxLCA4NSwgNzMsIAotICAgIDY3LCAyMDMsIDgxLCA4NSwgNzMsIDEyOCwgODEsIDg1LCA3MCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgCi0gICAgNzgsIDY5LCAxOTYsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCAKLSAgICA3OSwgMjA2LCA4MSwgODUsIDY5LCA2OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgNjksIDIwNiwgODEsIDg1LCA2OSwgMTI4LCAKLSAgICA4MSwgODUsIDY2LCA4NSwgODQsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDg0LCA2OSwgODIsIDc4LCA3MywgNzksIDIwNiwgODEsIAotICAgIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAyMTEsIDgxLCA4NSwgCi0gICAgNjUsIDgyLCA4NCwgNjksIDgyLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDIxMCwgODEsIDg1LCA2NSwgNzgsIDg0LCAKLSAgICA3MywgODQsIDIxNywgODEsIDg1LCA2NSwgNjgsIDgyLCA4NSwgODAsIDc2LCAxOTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIAotICAgIDc4LCA4NCwgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgMjEyLCA4MSwgODUsIDY1LCA2OCwgMTI4LCA4MSwgCi0gICAgODUsIDY1LCAxOTYsIDgxLCA4NSwgNjUsIDEyOCwgODEsIDg1LCAxMjgsIDgxLCAyMDgsIDgxLCA3OSwgODgsIDEyOCwgODEsIAotICAgIDc5LCA4NCwgMTI4LCA4MSwgNzksIDgwLCA3MiwgMTI4LCA4MSwgNzksIDgwLCA2NSwgMTI4LCA4MSwgNzksIDgwLCAxMjgsIAotICAgIDgxLCA3OSwgNzksIDEyOCwgODEsIDc5LCAyMDcsIDgxLCA3OSwgNzAsIDEyOCwgODEsIDc5LCAxOTgsIDgxLCA3OSwgNjUsIAotICAgIDEyOCwgODEsIDc5LCAxMjgsIDgxLCA3OCwgMTI4LCA4MSwgNzMsIDg4LCAxMjgsIDgxLCA3MywgODQsIDgzLCA2NSwgMTI4LCAKLSAgICA4MSwgNzMsIDg0LCAxMjgsIDgxLCA3MywgODAsIDEyOCwgODEsIDczLCA3MywgMTI4LCA4MSwgNzMsIDY5LCA4OCwgMTI4LCAKLSAgICA4MSwgNzMsIDY5LCA4NCwgMTI4LCA4MSwgNzMsIDY5LCA4MCwgMTI4LCA4MSwgNzMsIDY5LCAxMjgsIDgxLCA3MywgMTI4LCAKLSAgICA4MSwgNzIsIDg3LCA3MywgMTI4LCA4MSwgNzIsIDg3LCA2OSwgNjksIDEyOCwgODEsIDcyLCA4NywgNjksIDEyOCwgODEsIAotICAgIDcyLCA4NywgNjUsIDY1LCAxMjgsIDgxLCA3MiwgODcsIDY1LCAxMjgsIDgxLCA3MiwgODUsIDEyOCwgODEsIDcyLCA3OSwgCi0gICAgMTI4LCA4MSwgNzIsIDczLCAxMjgsIDgxLCA3MiwgNjksIDY5LCAxMjgsIDgxLCA3MiwgNjksIDEyOCwgODEsIDcyLCA2NSwgCi0gICAgNjUsIDEyOCwgODEsIDcyLCA2NSwgMTI4LCA4MSwgNzEsIDY1LCAxMjgsIDgxLCA2OSwgODQsIDY1LCA3OCwgNjUsIDEyOCwgCi0gICAgODEsIDY5LCA2OSwgMTI4LCA4MSwgNjksIDEyOCwgODEsIDY1LCA4NSwgMTI4LCA4MSwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgCi0gICAgODEsIDY1LCA4MiwgNzgsIDY5LCAyMTcsIDgxLCA2NSwgODIsIDEyOCwgODEsIDY1LCA4MSwgMTI4LCA4MSwgNjUsIDgwLCAKLSAgICA3MiwgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDgzLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgMjExLCA4MSwgNjUsIAotICAgIDc2LCAxOTMsIDgxLCA2NSwgNzMsIDgyLCA4NCwgNzIsIDgyLCA2NSwgMTI4LCA4MSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgCi0gICAgNzAsIDEyOCwgODEsIDY1LCAxOTgsIDgxLCA2NSwgNjgsIDc3LCA2NSwgMTI4LCA4MSwgNjUsIDY1LCA3MywgMTI4LCA4MSwgCi0gICAgNjUsIDY1LCA3MCwgODUsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDEyOCwgODEsIDQ4LCA0OCwgNTUsIDEyOCwgODEsIDQ4LCAKLSAgICA0OCwgNTQsIDEyOCwgODEsIDQ4LCA0OCwgNTMsIDEyOCwgODEsIDQ4LCA0OCwgNTIsIDEyOCwgODEsIDQ4LCA0OCwgNTEsIAotICAgIDEyOCwgODEsIDQ4LCA0OCwgNTAsIDEyOCwgODEsIDQ4LCA0OCwgNDksIDEyOCwgODAsIDkwLCAxMjgsIDgwLCA4OSwgODgsIAotICAgIDEyOCwgODAsIDg5LCA4NCwgMTI4LCA4MCwgODksIDgyLCA4OCwgMTI4LCA4MCwgODksIDgyLCAxMjgsIDgwLCA4OSwgODAsIAotICAgIDEyOCwgODAsIDg5LCAxMjgsIDgwLCA4NywgNzksIDg5LCAxMjgsIDgwLCA4NywgNzksIDc5LCAxMjgsIDgwLCA4NywgNzksIAotICAgIDEyOCwgODAsIDg3LCAyMDcsIDgwLCA4NywgNzMsIDczLCAxMjgsIDgwLCA4NywgNzMsIDEyOCwgODAsIDg3LCA2OSwgNjksIAotICAgIDEyOCwgODAsIDg3LCA2OSwgMTI4LCA4MCwgODcsIDY1LCA2NSwgMTI4LCA4MCwgODcsIDEyOCwgODAsIDg2LCAxMjgsIDgwLCAKLSAgICA4NSwgODgsIDEyOCwgODAsIDg1LCA4NSwgODQsIDEyOCwgODAsIDg1LCA4NSwgMTI4LCA4MCwgODUsIDg0LCA4MiwgNjksIAotICAgIDcwLCA2NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgODQsIDEyOCwgODAsIDg1LCAyMTIsIDgwLCA4NSwgCi0gICAgODMsIDcyLCA4MCwgNzMsIDc4LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA4MCwgNzMsIDc1LCA2NSwgMTI4LCA4MCwgODUsIDgzLCAKLSAgICA3MiwgNzMsIDc4LCAxOTksIDgwLCA4NSwgODIsIDg4LCAxMjgsIDgwLCA4NSwgODIsIDgzLCA2OSwgMTI4LCA4MCwgODUsIAotICAgIDgyLCA4MCwgNzYsIDE5NywgODAsIDg1LCA4MiwgNzgsIDY1LCA3NywgNjUsIDEyOCwgODAsIDg1LCA4MiwgNzMsIDg0LCA4OSwgCi0gICAgMTI4LCA4MCwgODUsIDgyLCA3MywgNzAsIDg5LCAxMjgsIDgwLCA4NSwgODIsIDEyOCwgODAsIDg1LCA4MSwgMTI4LCA4MCwgCi0gICAgODUsIDgwLCAxMjgsIDgwLCA4NSwgNzksIDg4LCAxMjgsIDgwLCA4NSwgNzksIDgwLCAxMjgsIDgwLCA4NSwgNzksIDEyOCwgCi0gICAgODAsIDg1LCA3OCwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCAKLSAgICA4NSwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIAotICAgIDgwLCA4NSwgNzcsIDgwLCAxMjgsIDgwLCA4NSwgNzcsIDEyOCwgODAsIDg1LCA2OSwgMTI4LCA4MCwgODUsIDY2LCA3NiwgCi0gICAgNzMsIDE5NSwgODAsIDg1LCA2NSwgODEsIDEyOCwgODAsIDg1LCA2NSwgNjksIDEyOCwgODAsIDg1LCA1MCwgMTI4LCA4MCwgCi0gICAgODUsIDQ5LCAxMjgsIDgwLCA4NSwgMTI4LCA4MCwgODQsIDcyLCA2NSwgNzIsIDE5MywgODAsIDg0LCA2OSwgMTI4LCA4MCwgCi0gICAgODMsIDczLCA3NiwgMjAxLCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIAotICAgIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCAKLSAgICA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgMjA2LCA4MCwgODMsIDczLCA3MCwgNzMsIAotICAgIDgzLCA4NCwgNzksIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDEyOCwgODAsIDgzLCAKKyAgICA4MywgNjksIDgyLCA3MywgNzAsIDEyOCwgODMsIDY5LCA4MSwgODUsIDY5LCA3OCwgODQsIDczLCA2NSwgNzYsIDEyOCwgODMsIAorICAgIDY5LCA4MSwgODUsIDY5LCA3OCwgNjcsIDE5NywgODMsIDY5LCA4MCwgODQsIDg1LCA4MCwgNzYsIDE5NywgODMsIDY5LCA4MCwgCisgICAgODQsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDgzLCAKKyAgICA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODMsIDY5LCA3OCwgODQsIAorICAgIDczLCAxMjgsIDgzLCA2OSwgNzcsIDg1LCA3OCwgNjcsIDczLCAxOTMsIDgzLCA2OSwgNzcsIDc1LCA2NSwgODQsIDcyLCAKKyAgICAxMjgsIDgzLCA2OSwgNzcsIDc1LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA4NiwgNzksIDg3LCA2OSwgMjA0LCA4MywgNjksIAorICAgIDc3LCA3MywgODMsIDc5LCA3MCwgMjEyLCA4MywgNjksIDc3LCA3MywgODMsIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIDEyOCwgCisgICAgODMsIDY5LCA3NywgNzMsIDc3LCA3MywgNzgsIDczLCA3NywgMTkzLCA4MywgNjksIDc3LCA3MywgNjgsIDczLCA4MiwgNjksIAorICAgIDY3LCAyMTIsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODMsIDY5LCA3NywgNzMsIDY3LCA3OSwgCisgICAgNzYsIDc5LCAyMDYsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MywgNjksIDc3LCAKKyAgICA3MywgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDgzLCA2OSwgNzcsIDczLCA2NiwgODIsIDY5LCA4NiwgNzMsIDIxMSwgODMsIAorICAgIDY5LCA3NywgNzMsIDQ1LCA4NiwgNzksIDczLCA2NywgNjksIDE5NiwgODMsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTUsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTEsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MCwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU1LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUyLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDQ5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTcsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTQsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTEsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDgsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTMsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTAsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU0LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTAsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIAorICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAKKyAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUxLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUxLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ4LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ4LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU3LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIAorICAgIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTAsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU0LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTAsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDU1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUxLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUxLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIAorICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ4LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgCisgICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTMsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA0OSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU3LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTMsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgCisgICAgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU3LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDQ4LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIAorICAgIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTAsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNjksIDE5NiwgODMsIDY5LCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MywgNjksIDczLCA4MywgNzcsIDE5MywgODMsIDY5LCAKKyAgICA3MiwgMTI4LCA4MywgNjksIDcxLCA3OSwgNzYsIDEyOCwgODMsIDY5LCA3MSwgNzgsIDc5LCAxMjgsIDgzLCA2OSwgNzEsIAorICAgIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDgzLCA2OSwgNjksIDg2LCAxMjgsIDgzLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgCisgICAgNjksIDY5LCA3OCwgMTI4LCA4MywgNjksIDY5LCAyMDYsIDgzLCA2OSwgNjksIDY4LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCAKKyAgICA4MywgNjksIDY5LCA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgMjA0LCA4MywgNjksIDY3LCA4NCwgNzksIDgyLCAxMjgsIAorICAgIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDY5LCA2NywgCisgICAgODIsIDY5LCA4NCwgMTI4LCA4MywgNjksIDY3LCA3OSwgNzgsIDY4LCAxMjgsIDgzLCA2OSwgNjcsIDY1LCA3OCwgODQsIAorICAgIDEyOCwgODMsIDY5LCA2NiwgNjUsIDg0LCA2NiwgNjksIDczLCAyMTIsIDgzLCA2OSwgNjUsIDg0LCAxMjgsIDgzLCA2OSwgCisgICAgNjUsIDc2LCAxMjgsIDgzLCA2OSwgNjUsIDcxLCA4NSwgNzYsIDIwNCwgODMsIDY4LCA3OSwgNzgsIDE5OSwgODMsIDY4LCAKKyAgICAxMjgsIDgzLCA2NywgODcsIDY1LCAxMjgsIDgzLCA2NywgODIsIDg1LCA4MCwgNzYsIDY5LCAxMjgsIDgzLCA2NywgODIsIAorICAgIDc5LCA3NiwgNzYsIDEyOCwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgMTI4LCA4MywgNjcsIDgyLCA2OSwgNjksIDc4LCAKKyAgICAxMjgsIDgzLCA2NywgODIsIDY5LCA2OSwgMjA2LCA4MywgNjcsIDgyLCA2OSwgNjUsIDc3LCA3MywgNzgsIDE5OSwgODMsIAorICAgIDY3LCA3OSwgODIsIDgwLCA3MywgODUsIDgzLCAxMjgsIDgzLCA2NywgNzksIDgyLCA4MCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgCisgICAgNjcsIDc5LCA4MiwgNjksIDEyOCwgODMsIDY3LCA3MywgODMsIDgzLCA3OSwgODIsIDgzLCAxMjgsIDgzLCA2NywgNzMsIAorICAgIDEyOCwgODMsIDY3LCA3MiwgODcsIDY1LCAxMjgsIDgzLCA2NywgNzIsIDg3LCAxOTMsIDgzLCA2NywgNzIsIDgyLCA3OSwgCisgICAgNjksIDY4LCA2OSwgODIsIDEyOCwgODMsIDY3LCA3MiwgNzksIDc5LCA3NiwgMTI4LCA4MywgNjcsIDcyLCA3OSwgNzksIAorICAgIDIwNCwgODMsIDY3LCA3MiwgNzksIDc2LCA2NSwgODIsIDEyOCwgODMsIDY3LCA3MiwgNjksIDc3LCAxOTMsIDgzLCA2NywgCisgICAgNjksIDgwLCA4NCwgNjksIDIxMCwgODMsIDY3LCA2NSwgNzgsIDY4LCA3MywgNjcsIDg1LCA4MywgMTI4LCA4MywgNjcsIDY1LCAKKyAgICA3OCwgNjgsIDczLCA2NywgODUsIDIxMSwgODMsIDY3LCA2NSwgMjA2LCA4MywgNjcsIDY1LCA3NiwgNjksIDgzLCAxMjgsIAorICAgIDgzLCA2NiwgODUsIDE5NCwgODMsIDY2LCA4MiwgODUsIDIwNCwgODMsIDY1LCA4OSwgNzMsIDgzLCAyMDEsIDgzLCA2NSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgzLCA2NSwgODksIDEyOCwgODMsIDY1LCA4OCwgNzksIDgwLCA3MiwgNzksIDc4LCAKKyAgICA2OSwgMTI4LCA4MywgNjUsIDg4LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODMsIDY1LCA4NywgNjUsIDc4LCAxMjgsIAorICAgIDgzLCA2NSwgODcsIDEyOCwgODMsIDY1LCA4NiwgNzksIDg1LCA4MiwgNzMsIDc4LCAxOTksIDgzLCA2NSwgODUsIDgyLCA2NSwgCisgICAgODMsIDcyLCA4NCwgODIsIDE5MywgODMsIDY1LCA4NSwgNzMsIDc2LCAxMjgsIDgzLCA2NSwgODQsIDg1LCA4MiwgNzgsIAorICAgIDEyOCwgODMsIDY1LCA4NCwgNzUsIDY1LCA2NSwgNzgsIDc1LCA4NSwgODUsIDEyOCwgODMsIDY1LCA4NCwgNzUsIDY1LCA2NSwgCisgICAgNzgsIDEyOCwgODMsIDY1LCA4NCwgNjksIDc2LCA3NiwgNzMsIDg0LCA2OSwgMTI4LCA4MywgNjUsIDg0LCA2OSwgNzYsIDc2LCAKKyAgICA3MywgODQsIDE5NywgODMsIDY1LCA4NCwgNjcsIDcyLCA2OSwgNzYsIDEyOCwgODMsIDY1LCA4NCwgNjUsIDc4LCA3MSwgNjUsIAorICAgIDEyOCwgODMsIDY1LCA4MywgNzIsIDEyOCwgODMsIDY1LCA4MywgNjUsIDc1LCAxMjgsIDgzLCA2NSwgODIsIDczLCAxMjgsIAorICAgIDgzLCA2NSwgODIsIDE5MywgODMsIDY1LCA4MiwgMTI4LCA4MywgNjUsIDgxLCAxMjgsIDgzLCA2NSwgODAsIDY1LCAxMjgsIAorICAgIDgzLCA2NSwgNzgsIDg5LCA3OSwgNzksIDcxLCAxOTMsIDgzLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDE5MywgODMsIDY1LCA3OCwgCisgICAgODQsIDczLCA3MywgNzcsIDg1LCAxMjgsIDgzLCA2NSwgNzgsIDc4LCA4OSwgNjUsIDEyOCwgODMsIDY1LCA3OCwgNzEsIDY1LCAKKyAgICA1MCwgMTI4LCA4MywgNjUsIDc4LCA2OCwgNzIsIDIwMSwgODMsIDY1LCA3OCwgNjgsIDY1LCA3NiwgMTI4LCA4MywgNjUsIAorICAgIDc4LCA2NSwgNzIsIDEyOCwgODMsIDY1LCA3OCwgMTI4LCA4MywgNjUsIDc3LCA4OSwgNzksIDIwMywgODMsIDY1LCA3NywgCisgICAgODYsIDY1LCA4NCwgMTI4LCA4MywgNjUsIDc3LCA4MCwgNzMsIDEyOCwgODMsIDY1LCA3NywgODAsIDcyLCA2NSwgNzksIAorICAgIDEyOCwgODMsIDY1LCA3NywgNzUsIDY1LCAxMjgsIDgzLCA2NSwgNzcsIDY5LCA3NSwgNzIsIDEyOCwgODMsIDY1LCA3NywgCisgICAgNjksIDc1LCAyMDAsIDgzLCA2NSwgNzcsIDY2LCA2NSwgMTI4LCA4MywgNjUsIDc3LCA2NSwgODIsIDczLCA4NCwgNjUsIAorICAgIDIwNiwgODMsIDY1LCA3NywgMTI4LCA4MywgNjUsIDc2LCA4NCwgNzMsIDgyLCA2OSwgMTI4LCA4MywgNjUsIDc2LCA4NCwgCisgICAgNzMsIDc2LCA3NiwgNzksIDEyOCwgODMsIDY1LCA3NiwgODQsIDQ1LCA1MCwgMTI4LCA4MywgNjUsIDc2LCA4NCwgMTI4LCAKKyAgICA4MywgNjUsIDc2LCAyMTIsIDgzLCA2NSwgNzYsIDc2LCA2NSwgNzYsIDc2LCA2NSwgNzIsIDc5LCAyMTMsIDgzLCA2NSwgNzYsIAorICAgIDc2LCAxOTMsIDgzLCA2NSwgNzYsIDY1LCAyMDUsIDgzLCA2NSwgNzYsIDY1LCAxMjgsIDgzLCA2NSwgNzYsIDQ1LCA2NSwgCisgICAgNzcsIDc3LCA3OSwgNzgsIDczLCA2NSwgNjcsIDEyOCwgODMsIDY1LCA3NiwgMTI4LCA4MywgNjUsIDc1LCA3OSwgODQsIAorICAgIDEyOCwgODMsIDY1LCA3NSwgNzIsIDE5MywgODMsIDY1LCA3NSwgNjksIDg1LCA2NSwgNjksIDEyOCwgODMsIDY1LCA3NSwgCisgICAgMTk3LCA4MywgNjUsIDc0LCA2OCwgNjUsIDcyLCAxMjgsIDgzLCA2NSwgNzMsIDc2LCA2NiwgNzksIDY1LCA4NCwgMTI4LCAKKyAgICA4MywgNjUsIDczLCA3NiwgMTI4LCA4MywgNjUsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MywgNjUsIDcyLCAxMjgsIAorICAgIDgzLCA2NSwgNzEsIDczLCA4NCwgODQsIDY1LCA4MiwgNzMsIDg1LCA4MywgMTI4LCA4MywgNjUsIDcxLCA2NSwgMTI4LCA4MywgCisgICAgNjUsIDcxLCAxMjgsIDgzLCA2NSwgMTk5LCA4MywgNjUsIDcwLCA3MiwgNjUsIDEyOCwgODMsIDY1LCA3MCwgNjksIDg0LCAKKyAgICAyMTcsIDgzLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA4MywgNjUsIDY4LCA2OSwgMTI4LCA4MywgNjUsIDY4LCAxMjgsIDgzLCAKKyAgICA2NSwgMTk2LCA4MywgNjUsIDY3LCA4MiwgNzMsIDcwLCA3MywgNjcsIDczLCA2NSwgMjA0LCA4MywgNjUsIDY1LCA3MywgCisgICAgMTI4LCA4MywgNjUsIDY1LCA2OCwgNzIsIDg1LCAxMjgsIDgzLCA2NSwgNDUsIDczLCAxMjgsIDgzLCA2NSwgNDUsIDUwLCAKKyAgICAxMjgsIDgzLCA0OCwgNTIsIDU0LCAxMjgsIDgzLCA0OCwgNTIsIDUzLCAxMjgsIDgzLCA0OCwgNTIsIDUyLCAxMjgsIDgzLCAKKyAgICA0OCwgNTIsIDUxLCAxMjgsIDgzLCA0OCwgNTIsIDUwLCAxMjgsIDgzLCA0OCwgNTIsIDQ5LCAxMjgsIDgzLCA0OCwgNTIsIAorICAgIDQ4LCAxMjgsIDgzLCA0OCwgNTEsIDU3LCAxMjgsIDgzLCA0OCwgNTEsIDU2LCAxMjgsIDgzLCA0OCwgNTEsIDU1LCAxMjgsIAorICAgIDgzLCA0OCwgNTEsIDU0LCAxMjgsIDgzLCA0OCwgNTEsIDUzLCA2NSwgMTI4LCA4MywgNDgsIDUxLCA1MywgMTI4LCA4MywgCisgICAgNDgsIDUxLCA1MiwgMTI4LCA4MywgNDgsIDUxLCA1MSwgMTI4LCA4MywgNDgsIDUxLCA1MCwgMTI4LCA4MywgNDgsIDUxLCAKKyAgICA0OSwgMTI4LCA4MywgNDgsIDUxLCA0OCwgMTI4LCA4MywgNDgsIDUwLCA1NywgMTI4LCA4MywgNDgsIDUwLCA1NiwgMTI4LCAKKyAgICA4MywgNDgsIDUwLCA1NSwgMTI4LCA4MywgNDgsIDUwLCA1NCwgNjYsIDEyOCwgODMsIDQ4LCA1MCwgNTQsIDY1LCAxMjgsIAorICAgIDgzLCA0OCwgNTAsIDU0LCAxMjgsIDgzLCA0OCwgNTAsIDUzLCAxMjgsIDgzLCA0OCwgNTAsIDUyLCAxMjgsIDgzLCA0OCwgCisgICAgNTAsIDUxLCAxMjgsIDgzLCA0OCwgNTAsIDUwLCAxMjgsIDgzLCA0OCwgNTAsIDQ5LCAxMjgsIDgzLCA0OCwgNTAsIDQ4LCAKKyAgICAxMjgsIDgzLCA0OCwgNDksIDU3LCAxMjgsIDgzLCA0OCwgNDksIDU2LCAxMjgsIDgzLCA0OCwgNDksIDU1LCA2NSwgMTI4LCAKKyAgICA4MywgNDgsIDQ5LCA1NSwgMTI4LCA4MywgNDgsIDQ5LCA1NCwgMTI4LCA4MywgNDgsIDQ5LCA1MywgMTI4LCA4MywgNDgsIAorICAgIDQ5LCA1MiwgNjYsIDEyOCwgODMsIDQ4LCA0OSwgNTIsIDY1LCAxMjgsIDgzLCA0OCwgNDksIDUyLCAxMjgsIDgzLCA0OCwgCisgICAgNDksIDUxLCAxMjgsIDgzLCA0OCwgNDksIDUwLCAxMjgsIDgzLCA0OCwgNDksIDQ5LCAxMjgsIDgzLCA0OCwgNDksIDQ4LCAKKyAgICAxMjgsIDgzLCA0OCwgNDgsIDU3LCAxMjgsIDgzLCA0OCwgNDgsIDU2LCAxMjgsIDgzLCA0OCwgNDgsIDU1LCAxMjgsIDgzLCAKKyAgICA0OCwgNDgsIDU0LCA2NSwgMTI4LCA4MywgNDgsIDQ4LCA1NCwgMTI4LCA4MywgNDgsIDQ4LCA1MywgMTI4LCA4MywgNDgsIAorICAgIDQ4LCA1MiwgMTI4LCA4MywgNDgsIDQ4LCA1MSwgMTI4LCA4MywgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODMsIDQ4LCA0OCwgCisgICAgNTAsIDEyOCwgODMsIDQ4LCA0OCwgNDksIDEyOCwgODMsIDQ1LCA4NywgMTI4LCA4MywgNDUsIDgzLCA3MiwgNjUsIDgwLCAKKyAgICA2OSwgMTk2LCA4MiwgODksIDg5LCAxMjgsIDgyLCA4OSwgODgsIDEyOCwgODIsIDg5LCA4NCwgMTI4LCA4MiwgODksIDgyLCAKKyAgICA4OCwgMTI4LCA4MiwgODksIDgyLCAxMjgsIDgyLCA4OSwgODAsIDEyOCwgODIsIDg3LCA3OSwgNzksIDEyOCwgODIsIDg3LCAKKyAgICA3OSwgMTI4LCA4MiwgODcsIDczLCA3MywgMTI4LCA4MiwgODcsIDczLCAxMjgsIDgyLCA4NywgNjksIDY5LCAxMjgsIDgyLCAKKyAgICA4NywgNjksIDEyOCwgODIsIDg3LCA2NSwgNzIsIDY1LCAxMjgsIDgyLCA4NywgNjUsIDY1LCAxMjgsIDgyLCA4NywgNjUsIAorICAgIDEyOCwgODIsIDg1LCA4OCwgMTI4LCA4MiwgODUsIDg1LCA2NiwgODUsIDgyLCA4NSwgMTI4LCA4MiwgODUsIDg1LCAxMjgsIAorICAgIDgyLCA4NSwgODQsIDEyOCwgODIsIDg1LCA4MywgNzMsIDEyOCwgODIsIDg1LCA4MiwgODgsIDEyOCwgODIsIDg1LCA4MiwgCisgICAgMTI4LCA4MiwgODUsIDgwLCA3MywgNzMsIDEyOCwgODIsIDg1LCA4MCwgNjksIDE5NywgODIsIDg1LCA4MCwgMTI4LCA4MiwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA4MiwgODUsIDc5LCA4MCwgMTI4LCA4MiwgODUsIDc5LCAxMjgsIDgyLCA4NSwgNzgsIDc5LCAKKyAgICA4NSwgODQsIDEyOCwgODIsIDg1LCA3OCwgNzgsIDczLCA3OCwgMTk5LCA4MiwgODUsIDc4LCA3OCwgNjksIDgyLCAxMjgsIAorICAgIDgyLCA4NSwgNzgsIDEyOCwgODIsIDg1LCA3NywgMjAxLCA4MiwgODUsIDc3LCA2NSwgMjAxLCA4MiwgODUsIDc3LCAxMjgsIAorICAgIDgyLCA4NSwgMjA1LCA4MiwgODUsIDc2LCA2OSwgODIsIDEyOCwgODIsIDg1LCA3NiwgNjksIDQ1LCA2OCwgNjksIDc2LCA2NSwgCisgICAgODksIDY5LCA2OCwgMTI4LCA4MiwgODUsIDc2LCA2OSwgMTI4LCA4MiwgODUsIDc2LCA2NSwgNzMsIDEyOCwgODIsIDg1LCAKKyAgICA3NSwgNzUsIDY1LCA3NSwgNzIsIDY1LCAxMjgsIDgyLCA4NSwgNzMsIDgzLCAxMjgsIDgyLCA4NSwgNzEsIDY2LCAyMTcsIAorICAgIDgyLCA4NSwgNjgsIDczLCA3NywgNjksIDc4LCA4NCwgMTkzLCA4MiwgODUsIDY2LCA3NiwgMTk3LCA4MiwgODUsIDE5NCwgCisgICAgODIsIDg1LCA2NSwgMTI4LCA4MiwgODQsIDcyLCA2NSwgNzgsIDE5OSwgODIsIDg0LCA2NSwgNzEsIDgzLCAxMjgsIDgyLCAKKyAgICA4NCwgNjUsIDcxLCAyMTEsIDgyLCA4MiwgODksIDg4LCAxMjgsIDgyLCA4MiwgODksIDg0LCAxMjgsIDgyLCA4MiwgODksIAorICAgIDgyLCA4OCwgMTI4LCA4MiwgODIsIDg5LCA4MiwgMTI4LCA4MiwgODIsIDg5LCA4MCwgMTI4LCA4MiwgODIsIDg1LCA4OCwgCisgICAgMTI4LCA4MiwgODIsIDg1LCA4NSwgMTI4LCA4MiwgODIsIDg1LCA4NCwgMTI4LCA4MiwgODIsIDg1LCA4MiwgODgsIDEyOCwgCisgICAgODIsIDgyLCA4NSwgODIsIDEyOCwgODIsIDgyLCA4NSwgODAsIDEyOCwgODIsIDgyLCA4NSwgNzksIDg4LCAxMjgsIDgyLCAKKyAgICA4MiwgODUsIDc5LCAxMjgsIDgyLCA4MiwgODUsIDEyOCwgODIsIDgyLCA4MiwgNjUsIDEyOCwgODIsIDgyLCA3OSwgODgsIAorICAgIDEyOCwgODIsIDgyLCA3OSwgODQsIDEyOCwgODIsIDgyLCA3OSwgODAsIDEyOCwgODIsIDgyLCA3OSwgNzksIDEyOCwgODIsIAorICAgIDgyLCA3OSwgMTI4LCA4MiwgODIsIDczLCA3MywgMTI4LCA4MiwgODIsIDczLCAxMjgsIDgyLCA4MiwgNjksIDg4LCAxMjgsIAorICAgIDgyLCA4MiwgNjksIDg0LCAxMjgsIDgyLCA4MiwgNjksIDgwLCAxMjgsIDgyLCA4MiwgNjksIDcyLCAxMjgsIDgyLCA4MiwgCisgICAgNjksIDIwMCwgODIsIDgyLCA2OSwgNjksIDEyOCwgODIsIDgyLCA2OSwgMTI4LCA4MiwgODIsIDY1LCA4OCwgMTI4LCA4MiwgCisgICAgODIsIDY1LCA4NSwgMTI4LCA4MiwgODIsIDY1LCA3MywgMTI4LCA4MiwgODIsIDY1LCA2NSwgMTI4LCA4MiwgNzksIDg3LCAKKyAgICA2NiwgNzksIDY1LCA4NCwgMTI4LCA4MiwgNzksIDg1LCA3OCwgNjgsIDY5LCAxOTYsIDgyLCA3OSwgODUsIDc4LCA2OCwgNDUsIAorICAgIDg0LCA3MywgODAsIDgwLCA2OSwgMTk2LCA4MiwgNzksIDg0LCA4NSwgNzgsIDY4LCA2NSwgMTI4LCA4MiwgNzksIDg0LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDgzLCAxMjgsIDgyLCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDg3LCA2NSwgNzYsIAorICAgIDc2LCA4MCwgNzYsIDY1LCA3OCwgMTk3LCA4MiwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA3MCwgNzYsIDc5LCAKKyAgICA3OSwgODIsIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDgyLCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNzksIAorICAgIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MiwgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDgyLCA3OSwgODMsIDcyLCAKKyAgICAxMjgsIDgyLCA3OSwgODMsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDgyLCA3OSwgODMsIDY5LCAxMjgsIDgyLCA3OSwgNzksIAorICAgIDg0LCAxMjgsIDgyLCA3OSwgNzksIDgzLCA4NCwgNjksIDgyLCAxMjgsIDgyLCA3OSwgNzksIDc1LCAxMjgsIDgyLCA3OSwgCisgICAgNzksIDcwLCAxMjgsIDgyLCA3OSwgNzcsIDY1LCA3OCwgNzMsIDY1LCAyMDYsIDgyLCA3OSwgNzcsIDY1LCAyMDYsIDgyLCAKKyAgICA3OSwgNzcsIDEyOCwgODIsIDc5LCA3NiwgNzYsIDczLCA3OCwgMTk5LCA4MiwgNzksIDc2LCA3NiwgNjksIDIxMCwgODIsIAorICAgIDc5LCA3NiwgNzYsIDY5LCA2OCwgNDUsIDg1LCAyMDgsIDgyLCA3OSwgNzIsIDczLCA3OCwgNzEsIDg5LCAxOTMsIDgyLCA3OSwgCisgICAgNzEsIDEyOCwgODIsIDc5LCAxOTYsIDgyLCA3OSwgNjcsIDc1LCA2OSwgODQsIDEyOCwgODIsIDc5LCA2NywgMjAzLCA4MiwgCisgICAgNzksIDY3LCAxMjgsIDgyLCA3OSwgNjYsIDc5LCAyMTIsIDgyLCA3OSwgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNzksIDY1LCAKKyAgICA4MywgODQsIDY5LCAxOTYsIDgyLCA3OSwgNjUsIDgyLCAxMjgsIDgyLCA3OSwgNjUsIDEyOCwgODIsIDc4LCA4OSwgNzMsIAorICAgIDc4LCAxOTksIDgyLCA3OCwgNzksIDc5LCA3OCwgMTI4LCA4MiwgNzgsIDc5LCA3OSwgMjA2LCA4MiwgNzgsIDY1LCAyMDUsIAorICAgIDgyLCA3NywgODQsIDEyOCwgODIsIDc2LCA3OSwgMTI4LCA4MiwgNzYsIDc3LCAxMjgsIDgyLCA3NiwgNzMsIDEyOCwgODIsIAorICAgIDc2LCA2OSwgMTI4LCA4MiwgNzQsIDY5LCAyMTEsIDgyLCA3NCwgNjksIDEyOCwgODIsIDc0LCAxOTcsIDgyLCA3MywgODYsIAorICAgIDY5LCA4MiwgMTI4LCA4MiwgNzMsIDg0LCA4NSwgNjUsIDc2LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAKKyAgICAxMjgsIDgyLCA3MywgODQsIDgzLCA3MywgMTI4LCA4MiwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDczLCA4MywgNzIsIAorICAgIDEyOCwgODIsIDczLCA4MiwgNjUsIDEyOCwgODIsIDczLCA4MCwgODAsIDc2LCAxOTcsIDgyLCA3MywgODAsIDEyOCwgODIsIAorICAgIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3OCwgNzEsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDc4LCA3MCwgNzksIDgyLCA5MCwgCisgICAgNjUsIDc4LCA2OCwgNzksIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3MywgNzcsIDcxLCA2NiwgNjUsIDEyOCwgODIsIDczLCAKKyAgICA3NywgMTI4LCA4MiwgNzMsIDc1LCA4MiwgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzEsIDg2LCA2OSwgNjgsIDczLCAxOTUsIAorICAgIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzIsIDY1LCAKKyAgICA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzksIDQ1LCA3NiwgNjksIDcwLCAyMTIsIDgyLCA3MywgNzEsIAorICAgIDcyLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCAKKyAgICA4NywgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIAorICAgIDcyLCA4NCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDc2LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIAorICAgIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzAsIDY1LCAKKyAgICA2NywgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIAorICAgIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA3OSwgODIsIDczLCAKKyAgICA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCAKKyAgICA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDcyLCA3MywgCisgICAgNjksIDg1LCA4NCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIAorICAgIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCAKKyAgICA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgCisgICAgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIAorICAgIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIAorICAgIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgCisgICAgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIAorICAgIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCAKKyAgICA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgCisgICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCisgICAgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIAorICAgIDc1LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCAKKyAgICA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgCisgICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgMjA0LCA4MiwgNzMsIAorICAgIDY5LCA3NiwgMTI4LCA4MiwgNzMsIDY5LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCA2OSwgNzcsIDEyOCwgODIsIDczLCA2NywgCisgICAgNjksIDEyOCwgODIsIDczLCA2NywgMTk3LCA4MiwgNzMsIDY2LCA2NiwgNzksIDc4LCAxMjgsIDgyLCA3MywgNjYsIDY2LCAKKyAgICA3OSwgMjA2LCA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIDc5LCAxMjgsIDgyLCAKKyAgICA3MiwgMjA3LCA4MiwgNzIsIDY1LCAxMjgsIDgyLCA3MiwgMTI4LCA4MiwgNzEsIDg5LCA3MywgNzgsIDcxLCA4MywgMTI4LCAKKyAgICA4MiwgNzEsIDg5LCA2NSwgNzgsIDEyOCwgODIsIDcxLCA4OSwgMTkzLCA4MiwgNjksIDg2LCA3OSwgNzYsIDg2LCA3MywgNzgsIAorICAgIDE5OSwgODIsIDY5LCA4NiwgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4NiwgNzcsIDY1LCAKKyAgICAxMjgsIDgyLCA2OSwgODYsIDczLCA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDQ1LCA4MywgNjcsIAorICAgIDcyLCA4NywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgCisgICAgODMsIDY5LCAxOTYsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIDEyOCwgODIsIDY5LCAKKyAgICA4NSwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDc4LCAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIAorICAgIDg0LCA4MiwgNzksIDcwLCA3NiwgNjksIDIxNiwgODIsIDY5LCA4NCwgODIsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4NCwgCisgICAgNzksIDgyLCA4NCwgMTI4LCA4MiwgNjksIDgzLCA4NSwgODAsIDczLCA3OCwgODUsIDgzLCAxMjgsIDgyLCA2OSwgODMsIDg0LCAKKyAgICA4MiwgNzksIDc5LCA3NywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDY5LCAxOTYsIDgyLCA2OSwgODMsIAorICAgIDg0LCAxMjgsIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCA2NywgCisgICAgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MywgNzMsIDgzLCAKKyAgICA4NCwgNjUsIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIAorICAgIDgzLCAyMDAsIDgyLCA2OSwgODIsIDY5LCA3OCwgNzEsIDcxLCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MiwgNjksIDc1LCA2NSwgCisgICAgNzgsIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIDY3LCAKKyAgICA2OSwgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCA3MiwgMTI4LCA4MiwgNjksIDgwLCA2OSwgODQsIDczLCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDY5LCAxOTYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDEyOCwgCisgICAgODIsIDY5LCA4MCwgNjksIDY1LCAyMTIsIDgyLCA2OSwgODAsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY5LCA4MCwgNjUsIAorICAgIDEyOCwgODIsIDY5LCA4MCwgMTkzLCA4MiwgNjksIDc4LCA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgCisgICAgMTI4LCA4MiwgNjksIDIwNiwgODIsIDY5LCA3NywgODUsIDEyOCwgODIsIDY5LCA3NywgNzMsIDc4LCA2OCwgNjksIDIxMCwgCisgICAgODIsIDY5LCA3NywgNjksIDY4LCA4OSwgMTI4LCA4MiwgNjksIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCAKKyAgICA3NiwgNzMsIDY5LCA4NiwgNjksIDE5NiwgODIsIDY5LCA3NiwgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCA3NiwgNjUsIAorICAgIDg4LCA2OSwgNjgsIDEyOCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgMTk5LCAKKyAgICA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgNzMsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MiwgCisgICAgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUxLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCAKKyAgICA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgCisgICAgMjExLCA4MiwgNjksIDcxLCA3MywgODMsIDg0LCA2OSwgODIsIDY5LCAxOTYsIDgyLCA2OSwgNzEsIDczLCA3OSwgNzgsIDY1LCAKKyAgICAyMDQsIDgyLCA2OSwgNzEsIDczLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIDczLCA2NSwgMTI4LCA4MiwgNjksIAorICAgIDcwLCA3OSwgODIsIDc3LCA2OSwgMTk2LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgODIsIDY5LCA2OCwgCisgICAgODUsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgNzMsIAorICAgIDc4LCAxOTksIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzYsIDczLCA3OCwgCisgICAgNjksIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCAKKyAgICA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDgyLCA2OSwgNjcsIAorICAgIDgyLCA2OSwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA3MywgNzgsIDE5OSwgCisgICAgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjcsIDc5LCA4MiwgNjgsIDEyOCwgODIsIDY5LCAKKyAgICA2NywgNzksIDgyLCAxOTYsIDgyLCA2OSwgNjcsIDczLCA4NCwgNjUsIDg0LCA3MywgODYsIDE5NywgODIsIDY5LCA2NywgNjksIAorICAgIDgwLCA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2OSwgNjcsIDY5LCA3MywgODYsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY3LCA2OSwgCisgICAgNzMsIDg2LCA2OSwgMjEwLCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCAKKyAgICA3MSwgNjUsIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDcyLCA3NywgODUsIDc1LCAxMjgsIDgyLCA2OSwgNjUsIDY3LCA3MiwgCisgICAgMTI4LCA4MiwgNjgsIDIwNywgODIsIDY4LCA2OSwgMjA0LCA4MiwgNjYsIDY1LCA4MywgMTkzLCA4MiwgNjUsIDg5LCA4MywgCisgICAgMTI4LCA4MiwgNjUsIDg5LCAyMTEsIDgyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDczLCAKKyAgICA3OSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgODIsIDY1LCA4NCwgNzIsIDE5MywgODIsIDY1LCA4NCwgNjUsIAorICAgIDEyOCwgODIsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDgzLCA4NywgNjUsIDY4LCA3MywgMTI4LCA4MiwgNjUsIDgzLCA3OSwgCisgICAgODUsIDIwNCwgODIsIDY1LCA4MywgNzIsIDY1LCAxMjgsIDgyLCA2NSwgODEsIDEyOCwgODIsIDY1LCA4MCwgNzMsIDgzLCAKKyAgICA3NywgNjUsIDEyOCwgODIsIDY1LCA3OCwgNzEsIDE5NywgODIsIDY1LCA3OCwgNjUsIDEyOCwgODIsIDY1LCA3OCwgMTI4LCAKKyAgICA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2NSwgNzcsIDY2LCA2NSwgODQsIDEyOCwgODIsIDY1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIAorICAgIDEyOCwgODIsIDY1LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY1LCA3OCwgODMsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY1LCA3MywgCisgICAgODMsIDczLCA3OCwgMTk5LCA4MiwgNjUsIDczLCA4MywgNjksIDE5NiwgODIsIDY1LCA3MywgNzgsIDY2LCA3OSwgODcsIAorICAgIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgODksIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgMjE3LCA4MiwgCisgICAgNjUsIDczLCA3NiwgMTI4LCA4MiwgNjUsIDczLCA2OCwgMjA3LCA4MiwgNjUsIDczLCA2OCwgNjUsIDEyOCwgODIsIDY1LCAKKyAgICA3MiwgNzcsIDY1LCA4NCwgODUsIDc2LCA3NiwgNjUsIDIwMCwgODIsIDY1LCA3MiwgMTI4LCA4MiwgNjUsIDcwLCA2OSwgCisgICAgMTI4LCA4MiwgNjUsIDY5LCA3NywgMTI4LCA4MiwgNjUsIDY4LCA3MywgNzksIDY1LCA2NywgODQsIDczLCA4NiwgMTk3LCAKKyAgICA4MiwgNjUsIDY4LCA3MywgNzksIDEyOCwgODIsIDY1LCA2OCwgNzMsIDIwNywgODIsIDY1LCA2OCwgMjAxLCA4MiwgNjUsIAorICAgIDY4LCAxMjgsIDgyLCA2NSwgMTk2LCA4MiwgNjUsIDY3LCA4MSwgODUsIDY5LCAyMTIsIDgyLCA2NSwgNjcsIDczLCA3OCwgCisgICAgNzEsIDEyOCwgODIsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgyLCA2NSwgNjYsIDY2LCA3MywgODQsIDEyOCwgODIsIDY1LCAKKyAgICA2NiwgNjYsIDczLCAyMTIsIDgyLCA2NSwgNjYsIDEyOCwgODIsIDY1LCA2NSwgNzMsIDEyOCwgODIsIDY1LCA1MSwgMTI4LCAKKyAgICA4MiwgNjUsIDUwLCAxMjgsIDgyLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAxMjgsIDgyLCA0OCwgNTAsIAorICAgIDU2LCAxMjgsIDgyLCA0OCwgNTAsIDU1LCAxMjgsIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCA0OCwgNTAsIDUzLCAxMjgsIAorICAgIDgyLCA0OCwgNTAsIDUyLCAxMjgsIDgyLCA0OCwgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIDUwLCAxMjgsIDgyLCA0OCwgCisgICAgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgNTAsIDQ4LCAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIDgyLCA0OCwgNDksIDU2LCAKKyAgICAxMjgsIDgyLCA0OCwgNDksIDU1LCAxMjgsIDgyLCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA4MiwgNDgsIDQ5LCA1MywgMTI4LCA4MiwgNDgsIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCA1MSwgMTI4LCA4MiwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIDQ5LCA0OSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgCisgICAgNDgsIDEyOCwgODIsIDQ4LCA0OCwgNTcsIDEyOCwgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIDQ4LCA0OCwgNTUsIDEyOCwgCisgICAgODIsIDQ4LCA0OCwgNTQsIDEyOCwgODIsIDQ4LCA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgNTIsIDEyOCwgODIsIDQ4LCAKKyAgICA0OCwgNTEsIDY2LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgMTI4LCA4MiwgNDgsIAorICAgIDQ4LCA1MCwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIDEyOCwgODIsIDQ1LCA2NywgCisgICAgODIsIDY5LCAxOTcsIDgxLCA4OSwgODgsIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg0LCAxMjgsIDgxLCA4OSwgCisgICAgODIsIDg4LCAxMjgsIDgxLCA4OSwgODIsIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDc5LCAxMjgsIDgxLCA4OSwgCisgICAgNzMsIDEyOCwgODEsIDg5LCA2OSwgNjksIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgMTI4LCA4MSwgCisgICAgODksIDY1LCAxMjgsIDgxLCA4OSwgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIDgxLCA4NywgCisgICAgNjksIDEyOCwgODEsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIDgxLCA4NSwgCisgICAgODYsIDEyOCwgODEsIDg1LCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIDg0LCAxMjgsIDgxLCA4NSwgCisgICAgODMsIDcyLCA4MywgNzIsIDY1LCA4OSwgNjUsIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgODEsIDg1LCA4MiwgMTI4LCAKKyAgICA4MSwgODUsIDgwLCAxMjgsIDgxLCA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgxLCA4NSwgNzksIAorICAgIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MSwgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCA4MSwgCisgICAgODUsIDc5LCAxMjgsIDgxLCA4NSwgNzUsIDEyOCwgODEsIDg1LCA3MywgNzgsIDg0LCA2OSwgODMsIDgzLCA2OSwgNzgsIDY3LCAKKyAgICA2OSwgMTI4LCA4MSwgODUsIDczLCA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODEsIDg1LCA3MywgNzgsIAorICAgIDY3LCA4NSwgNzgsIDg4LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCA3NiwgCisgICAgMjEyLCA4MSwgODUsIDczLCA3NiwgNzYsIDEyOCwgODEsIDg1LCA3MywgNjcsIDIwMywgODEsIDg1LCA3MywgMTI4LCA4MSwgCisgICAgODUsIDcwLCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgNjksIDE5NiwgODEsIDg1LCA2OSwgODMsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjksIDY5LCA3OCwgCisgICAgMTI4LCA4MSwgODUsIDY5LCA2OSwgMjA2LCA4MSwgODUsIDY5LCAxMjgsIDgxLCA4NSwgNjYsIDg1LCA4NCwgODMsIDEyOCwgCisgICAgODEsIDg1LCA2NSwgODQsIDY5LCA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgODMsIAorICAgIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDIxMSwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDEyOCwgCisgICAgODEsIDg1LCA2NSwgNzgsIDg0LCA3MywgODQsIDIxNywgODEsIDg1LCA2NSwgNjgsIDgyLCA4NSwgODAsIDc2LCAxOTcsIDgxLCAKKyAgICA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgMjEyLCA4MSwgODUsIAorICAgIDY1LCA2OCwgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgxLCA4NSwgNjUsIDE5NiwgCisgICAgODEsIDg1LCA2NSwgMTI4LCA4MSwgODUsIDEyOCwgODEsIDIwOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgNzksIDg0LCAxMjgsIAorICAgIDgxLCA3OSwgODAsIDcyLCAxMjgsIDgxLCA3OSwgODAsIDY1LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgODEsIDc5LCA3OSwgCisgICAgMTI4LCA4MSwgNzksIDIwNywgODEsIDc5LCA3MCwgMTI4LCA4MSwgNzksIDE5OCwgODEsIDc5LCA2NSwgMTI4LCA4MSwgNzksIAorICAgIDEyOCwgODEsIDc4LCAxMjgsIDgxLCA3MywgODgsIDEyOCwgODEsIDczLCA4NCwgODMsIDY1LCAxMjgsIDgxLCA3MywgODQsIAorICAgIDEyOCwgODEsIDczLCA4MCwgMTI4LCA4MSwgNzMsIDczLCAxMjgsIDgxLCA3MywgNjksIDg4LCAxMjgsIDgxLCA3MywgNjksIAorICAgIDg0LCAxMjgsIDgxLCA3MywgNjksIDgwLCAxMjgsIDgxLCA3MywgNjksIDEyOCwgODEsIDczLCAxMjgsIDgxLCA3MiwgODcsIAorICAgIDczLCAxMjgsIDgxLCA3MiwgODcsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgCisgICAgNjUsIDEyOCwgODEsIDcyLCA4NywgNjUsIDEyOCwgODEsIDcyLCA4NSwgMTI4LCA4MSwgNzIsIDc5LCA4MCwgNzIsIDEyOCwgCisgICAgODEsIDcyLCA3OSwgMTI4LCA4MSwgNzIsIDczLCAxMjgsIDgxLCA3MiwgNjksIDY5LCAxMjgsIDgxLCA3MiwgNjksIDEyOCwgCisgICAgODEsIDcyLCA2NSwgODUsIDEyOCwgODEsIDcyLCA2NSwgNjUsIDEyOCwgODEsIDcyLCA2NSwgMTI4LCA4MSwgNzEsIDY1LCAKKyAgICAxMjgsIDgxLCA2OSwgODQsIDY1LCA3OCwgNjUsIDEyOCwgODEsIDY5LCA2OSwgMTI4LCA4MSwgNjksIDEyOCwgODEsIDY1LCAKKyAgICA4OSwgMTI4LCA4MSwgNjUsIDg1LCAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA4MSwgNjUsIDgyLCA3OCwgNjksIAorICAgIDIxNywgODEsIDY1LCA4MiwgMTI4LCA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIDcyLCAxMjgsIDgxLCA2NSwgNzcsIAorICAgIDY1LCA4NCwgODMsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgNzYsIDE5MywgODEsIDY1LCA3MywgCisgICAgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCA3MCwgMTI4LCA4MSwgNjUsIDE5OCwgCisgICAgODEsIDY1LCA2OCwgNzcsIDY1LCAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCAKKyAgICA4MSwgNjUsIDY1LCA3MCwgMTI4LCA4MSwgNDgsIDQ4LCA1NSwgMTI4LCA4MSwgNDgsIDQ4LCA1NCwgMTI4LCA4MSwgNDgsIAorICAgIDQ4LCA1MywgMTI4LCA4MSwgNDgsIDQ4LCA1MiwgMTI4LCA4MSwgNDgsIDQ4LCA1MSwgMTI4LCA4MSwgNDgsIDQ4LCA1MCwgCisgICAgMTI4LCA4MSwgNDgsIDQ4LCA0OSwgMTI4LCA4MCwgOTAsIDEyOCwgODAsIDg5LCA4OCwgMTI4LCA4MCwgODksIDg0LCAxMjgsIAorICAgIDgwLCA4OSwgODIsIDg4LCAxMjgsIDgwLCA4OSwgODIsIDEyOCwgODAsIDg5LCA4MCwgMTI4LCA4MCwgODcsIDc5LCA4OSwgCisgICAgMTI4LCA4MCwgODcsIDc5LCA3OSwgMTI4LCA4MCwgODcsIDc5LCAxMjgsIDgwLCA4NywgMjA3LCA4MCwgODcsIDczLCA3MywgCisgICAgMTI4LCA4MCwgODcsIDczLCAxMjgsIDgwLCA4NywgNjksIDY5LCAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIDg3LCA2NSwgCisgICAgNjUsIDEyOCwgODAsIDg3LCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgODUsIDg4LCAxMjgsIDgwLCA4NSwgODUsIDg0LCAxMjgsIAorICAgIDgwLCA4NSwgODUsIDEyOCwgODAsIDg1LCA4NCwgODIsIDY5LCA3MCwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgCisgICAgODUsIDg0LCAxMjgsIDgwLCA4NSwgMjEyLCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3OCwgMTI4LCA4MCwgODUsIDgzLCAKKyAgICA3MiwgODAsIDczLCA3NSwgNjUsIDEyOCwgODAsIDg1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIDgyLCA4OCwgCisgICAgMTI4LCA4MCwgODUsIDgyLCA4MywgNjksIDEyOCwgODAsIDg1LCA4MiwgODAsIDc2LCAxOTcsIDgwLCA4NSwgODIsIDc4LCAKKyAgICA2NSwgNzcsIDY1LCAxMjgsIDgwLCA4NSwgODIsIDczLCA4NCwgODksIDEyOCwgODAsIDg1LCA4MiwgNzMsIDcwLCA4OSwgCisgICAgMTI4LCA4MCwgODUsIDgyLCAxMjgsIDgwLCA4NSwgODEsIDEyOCwgODAsIDg1LCA4MCwgMTI4LCA4MCwgODUsIDc5LCA4OCwgCisgICAgMTI4LCA4MCwgODUsIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIDgwLCA4NSwgNzgsIDcxLCA2NSwgNjUsIDc3LCAKKyAgICAxMjgsIDgwLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODUsIDc3LCA4MCwgMTI4LCAKKyAgICA4MCwgODUsIDc3LCAxMjgsIDgwLCA4NSwgNzAsIDcwLCA2OSwgNjgsIDEyOCwgODAsIDg1LCA2OSwgMTI4LCA4MCwgODUsIAorICAgIDY3LCA3NSwgMTI4LCA4MCwgODUsIDY2LCA3NiwgNzMsIDE5NSwgODAsIDg1LCAxOTQsIDgwLCA4NSwgNjUsIDgxLCAxMjgsIAorICAgIDgwLCA4NSwgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIDg1LCA0OSwgMTI4LCA4MCwgODUsIDEyOCwgODAsIAorICAgIDg0LCA3MiwgNjUsIDcyLCAxOTMsIDgwLCA4NCwgNjksIDEyOCwgODAsIDgzLCA3MywgNzYsIDIwMSwgODAsIDgzLCA3MywgCisgICAgNzAsIDczLCA4MywgODQsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIAorICAgIDgzLCA4NCwgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCAKKyAgICA3MCwgNzMsIDgzLCA4NCwgNzksIDIwNiwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3NiwgODksIDcxLCA3MywgCisgICAgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCAxMjgsIDgwLCA4MywgNjUsIDc2LCA4NCwgNjksIDIxMCwgODAsIDgzLCAKICAgICAxMjgsIDgwLCA4MiwgNzksIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA4NCwgNzksIDg2LCA2NSwgODIsIDg5LCAyMTEsIAogICAgIDgwLCA4MiwgNzksIDg0LCA3OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgNjksIDY3LCA4NCwgNjksIDE5NiwgODAsIDgyLCA3OSwgCiAgICAgODMsIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA2OSwgNzgsIDczLCAxMjgsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIAogICAgIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgCiAgICAgODIsIDc5LCA4MCwgNjksIDgyLCA4NCwgMjE3LCA4MCwgODIsIDc5LCA4MCwgNjksIDc2LCA3NiwgNjksIDIxMCwgODAsIDgyLCAKICAgICA3OSwgNzksIDcwLCAxMjgsIDgwLCA4MiwgNzksIDc2LCA3OSwgNzgsIDcxLCA2OSwgMTk2LCA4MCwgODIsIDc5LCA3NiwgNjUsIAotICAgIDg0LCA3MywgNzksIDc4LCAxOTcsIDgwLCA4MiwgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA4MiwgCi0gICAgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4MiwgNzksIDcxLCA4MiwgNjksIDgzLCA4MywgMTI4LCAKLSAgICA4MCwgODIsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDgwLCA4MiwgNzksIDcwLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MCwgODIsIAotICAgIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA4MCwgODIsIDc5LCA2OCwgODUsIDY3LCAyMTIsIDgwLCA4MiwgNzMsIDg2LCA2NSwgCi0gICAgODQsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDg2LCA2NSwgODQsIDE5NywgODAsIDgyLCA3MywgODYsIDY1LCA2NywgMjE3LCAKLSAgICA4MCwgODIsIDczLCA4MywgNzIsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODQsIDgyLCAxOTMsIDgwLCA4MiwgNzMsIDc4LCA4NCwgCi0gICAgODMsIDEyOCwgODAsIDgyLCA3MywgNzgsIDg0LCAxMjgsIDgwLCA4MiwgNzMsIDc4LCAyMTIsIDgwLCA4MiwgNzMsIDc4LCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzksIDgyLCAxMjgsIDgwLCA4MiwgNzksIAorICAgIDc0LCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgwLCA4MiwgNzksIDcyLCA3MywgNjYsIDczLCA4NCwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzEsIDgyLCA2OSwgODMsIAorICAgIDgzLCAxMjgsIDgwLCA4MiwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAKKyAgICAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDIxMiwgODAsIAorICAgIDgyLCA3MywgODYsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgMTk3LCA4MCwgODIsIDczLCA4NiwgCisgICAgNjUsIDY3LCAyMTcsIDgwLCA4MiwgNzMsIDgzLCA3MiwgODQsIDcyLCA2NSwgNzcsIDY1LCA4NCwgODIsIDE5MywgODAsIDgyLCAKKyAgICA3MywgNzgsIDg0LCA4MywgMTI4LCA4MCwgODIsIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgODIsIDczLCA3OCwgODQsIAorICAgIDY5LCAyMTAsIDgwLCA4MiwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgODIsIDczLCA3OCwgMjEyLCA4MCwgODIsIDczLCA3OCwgCiAgICAgNjcsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCAKLSAgICA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIDgzLCA2OSwgODQsIDEyOCwgODAsIDgyLCA2OSwgODMsIAotICAgIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MCwgNzksIDc4LCA2OCwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MCwgODIsIAotICAgIDY5LCA3OCwgNzUsIDcyLCA2NSwgMTI4LCA4MCwgODIsIDY5LCA3MCwgNjUsIDY3LCAxOTcsIDgwLCA4MiwgNjksIDY3LCA3MywgCi0gICAgODAsIDczLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA3MywgNzgsIDE5OSwgODAsIDgyLCAKLSAgICA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAyMTEsIDgwLCA4MiwgNjksIAotICAgIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgCi0gICAgNjgsIDE5NywgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAKLSAgICAyMDEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIAotICAgIDc5LCAyMTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgCi0gICAgODUsIDc5LCAyMDYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCAKLSAgICA2OSwgMjAxLCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIDY1LCAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAKLSAgICAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDgwLCA2NSwgMTI4LCA4MCwgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgCi0gICAgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAKLSAgICA2OSwgMTk2LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODUsIDc4LCAxOTYsIDgwLCA3OSwgODUsIAotICAgIDc2LCA4NCwgODIsIDIxNywgODAsIDc5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3OSwgODQsIDY1LCA4NCwgNzksIDEyOCwgCi0gICAgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA4MCwgNzksIDIxMiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDgwLCA3OSwgODMsIDg0LCA2NiwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgCi0gICAgMjA0LCA4MCwgNzksIDgzLCA4NCwgMTI4LCA4MCwgNzksIDgzLCAyMTIsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA4MiwgODIsIAotICAgIDY5LCA2NywgODQsIDg1LCAyMTEsIDgwLCA3OSwgODAsIDgwLCA2OSwgODIsIDEyOCwgODAsIDc5LCA4MCwgMTI4LCA4MCwgCi0gICAgNzksIDIwOCwgODAsIDc5LCA3OSwgNjgsIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc5LCAxMjgsIDgwLCA3OSwgNzgsIDY4LCAKLSAgICA3OSwgMTI4LCA4MCwgNzksIDIwNiwgODAsIDc5LCA3NywgNzcsIDY5LCA2OSwgMTI4LCA4MCwgNzksIDc3LCA3NywgNjksIAotICAgIDE5NywgODAsIDc5LCA3NiwgNzMsIDgzLCA3MiwgMTI4LCA4MCwgNzksIDc2LCA3MywgNjcsIDE5NywgODAsIDc5LCA3NiwgCi0gICAgMjAxLCA4MCwgNzksIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc2LCAxOTcsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIDczLCAKLSAgICA2OSwgMTI4LCA4MCwgNzksIDc1LCA3OSwgNzQsIDczLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMjExLCA4MCwgNzksIAotICAgIDczLCA3OCwgODQsIDc5LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDE5NiwgODAsIDc5LCA3MywgNzgsIDg0LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCAyMTIsIDgwLCA3OSwgNjksIDg0LCAKLSAgICA4MiwgMjE3LCA4MCwgNzksIDY5LCA4NCwgNzMsIDE5NSwgODAsIDc5LCA2OCwgNjUsIDg0LCA4NSwgODMsIDEyOCwgODAsIAotICAgIDc5LCA2NSwgMTI4LCA4MCwgNzksIDEyOCwgODAsIDIwNywgODAsIDc4LCA2OSwgODUsIDc3LCA2NSwgODQsIDY1LCAxMjgsIAotICAgIDgwLCA3NiwgODUsIDg0LCA3OSwgMTI4LCA4MCwgNzYsIDg1LCA4MywgNDUsIDc3LCA3MywgNzgsIDg1LCAyMTEsIDgwLCA3NiwgCi0gICAgODUsIDgzLCAxMjgsIDgwLCA3NiwgODUsIDgyLCA2NSwgNzYsIDEyOCwgODAsIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCAKLSAgICA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIDgwLCA3NiwgODUsIDcxLCAxMjgsIDgwLCA3NiwgODUsIAotICAgIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgODAsIDcyLCA4NSwgMTI4LCA4MCwgNzYsIDY5LCA4NCwgCi0gICAgNzIsIDgyLCA3OSwgNzgsIDEyOCwgODAsIDc2LCA2OCwgMTI4LCA4MCwgNzYsIDY1LCA4OSwgNzMsIDc4LCAxOTksIDgwLCAKKyAgICA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIDgzLCA4MywgNjksIDE5NiwgODAsIDgyLCA2OSwgODMsIAorICAgIDY5LCA4NCwgMTI4LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgCisgICAgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgwLCA3OSwgNzgsIDY4LCA2OSwgODIsIAorICAgIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDc4LCA3NSwgNzIsIDY1LCAxMjgsIDgwLCA4MiwgNjksIDcwLCA2NSwgCisgICAgNjcsIDE5NywgODAsIDgyLCA2OSwgNjcsIDczLCA4MCwgNzMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCAKKyAgICA2OSwgNjgsIDczLCA3OCwgMTk5LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgODMsIDEyOCwgODAsIDgyLCA2OSwgNjcsIAorICAgIDY5LCA2OCwgNjksIDIxMSwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDE5NiwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgCisgICAgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgMTk3LCA4MCwgODIsIDY1LCA4OSwgNjksIDIxMCwgODAsIDgyLCAKKyAgICA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAyMDEsIDgwLCA4MiwgNjUsIAorICAgIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCAyMTcsIDgwLCA4MiwgCisgICAgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCAyMDYsIDgwLCAKKyAgICA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgMjAxLCA4MCwgODIsIAorICAgIDY1LCA3NywgMTI4LCA4MCwgODIsIDY1LCAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAxMjgsIDgwLCA4MCwgNzcsIAorICAgIDEyOCwgODAsIDgwLCA2NSwgMTI4LCA4MCwgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgODAsIDc5LCA4NywgNjksIAorICAgIDgyLCAyMTEsIDgwLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MCwgCisgICAgNzksIDg3LCA2OCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODUsIDc4LCAxOTYsIDgwLCA3OSwgODUsIDc2LCA4NCwgODIsIAorICAgIDIxNywgODAsIDc5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3OSwgODQsIDY1LCA4NCwgNzksIDEyOCwgODAsIDc5LCA4NCwgCisgICAgNjUsIDY2LCA3NiwgMTk3LCA4MCwgNzksIDIxMiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgwLCA3OSwgODMsIDg0LCA2NiwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNzksIAorICAgIDgzLCA4NCwgMTI4LCA4MCwgNzksIDgzLCAyMTIsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgODMsIDEyOCwgODAsIDc5LCA4MiwgODQsIDY1LCA2NiwgNzYsIAorICAgIDE5NywgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDg1LCA4MywgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgCisgICAgODUsIDIxMSwgODAsIDc5LCA4MCwgODAsIDczLCA3OCwgMTk5LCA4MCwgNzksIDgwLCA4MCwgNjksIDgyLCAxMjgsIDgwLCAKKyAgICA3OSwgODAsIDY3LCA3OSwgODIsIDc4LCAxMjgsIDgwLCA3OSwgODAsIDEyOCwgODAsIDc5LCAyMDgsIDgwLCA3OSwgNzksIAorICAgIDY4LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3OSwgMTI4LCA4MCwgNzksIDc4LCA2OCwgNzksIDEyOCwgODAsIDc5LCAyMDYsIAorICAgIDgwLCA3OSwgNzcsIDc3LCA2OSwgNjksIDEyOCwgODAsIDc5LCA3NywgNzcsIDY5LCAxOTcsIDgwLCA3OSwgNzYsIDczLCA4MywgCisgICAgNzIsIDEyOCwgODAsIDc5LCA3NiwgNzMsIDY3LCAxOTcsIDgwLCA3OSwgNzYsIDIwMSwgODAsIDc5LCA3NiwgNjksIDEyOCwgCisgICAgODAsIDc5LCA3NiwgMTk3LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgNjksIDEyOCwgODAsIDc5LCA3NSwgNzksIDc0LCAKKyAgICA3MywgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDIxMSwgODAsIDc5LCA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNzksIAorICAgIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCisgICAgMTI4LCA4MCwgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgODIsIDIxNywgODAsIDc5LCA2OSwgODQsIDczLCAKKyAgICAxOTUsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgNjcsIDc1LCA2OSwgMjEyLCA4MCwgNzksIAorICAgIDY1LCAxMjgsIDgwLCA3OSwgMTI4LCA4MCwgMjA3LCA4MCwgNzgsIDY5LCA4NSwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODAsIAorICAgIDc2LCA4NSwgODQsIDc5LCAxMjgsIDgwLCA3NiwgODUsIDg0LCA2NSwgMTI4LCA4MCwgNzYsIDg1LCA4MywgNDUsIDc3LCA3MywgCisgICAgNzgsIDg1LCAyMTEsIDgwLCA3NiwgODUsIDgzLCAxMjgsIDgwLCA3NiwgODUsIDgyLCA2NSwgNzYsIDEyOCwgODAsIDc2LCAKKyAgICA4NSwgNzcsIDY5LCAxOTYsIDgwLCA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIDgwLCA3NiwgODUsIAorICAgIDcxLCAxMjgsIDgwLCA3NiwgODUsIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgODAsIDcyLCA4NSwgCisgICAgMTI4LCA4MCwgNzYsIDcyLCA2NSwgODUsIDEyOCwgODAsIDc2LCA2OSwgODQsIDcyLCA4MiwgNzksIDc4LCAxMjgsIDgwLCAKKyAgICA3NiwgNjgsIDEyOCwgODAsIDc2LCA2NSwgODksIDczLCA3OCwgMTk5LCA4MCwgNzYsIDY1LCA4NCwgNjksIDEyOCwgODAsIAogICAgIDc2LCA2NSwgODMsIDg0LCA3MywgNjcsIDgzLCAxMjgsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA4MCwgNzYsIDY1LCA3OCwgCi0gICAgMTk3LCA4MCwgNzYsIDY1LCA3OCwgNjcsIDIwMywgODAsIDc2LCA2NSwgNzUsIDEyOCwgODAsIDc2LCA2NSwgNzEsIDczLCAKLSAgICA3OSwgMjExLCA4MCwgNzYsIDY1LCA2NywgNjksIDcyLCA3OSwgNzYsIDY4LCA2OSwgMjEwLCA4MCwgNzYsIDY1LCA2NywgCi0gICAgMTk3LCA4MCwgNzYsIDY1LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA3MywgNjcsIDY1LCA4NCwgNzksIDEyOCwgODAsIDczLCAKLSAgICA5MCwgOTAsIDY1LCAxMjgsIDgwLCA3MywgODgsIDEyOCwgODAsIDczLCA4NywgODIsIDEyOCwgODAsIDczLCA4NCwgNjcsIAotICAgIDcyLCA3MCwgNzksIDgyLCA3NSwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDIwMywgODAsIDczLCA4NCwgCi0gICAgMTI4LCA4MCwgNzMsIDgzLCA4NCwgNzksIDc2LCAxMjgsIDgwLCA3MywgODMsIDY5LCA3NiwgNjksIDcyLCAxMjgsIDgwLCAKLSAgICA3MywgODMsIDY3LCA2OSwgODMsIDEyOCwgODAsIDczLCA4MiwgNzMsIDcxLCAxMjgsIDgwLCA3MywgODIsIDczLCAxOTksIAotICAgIDgwLCA3MywgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDgwLCA3MywgODAsIDczLCA3OCwgNzEsIDEyOCwgODAsIDczLCA4MCwgCi0gICAgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDgwLCA3MywgODAsIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCAKLSAgICA4MCwgNzMsIDgwLCAxMjgsIDgwLCA3MywgNzgsIDg3LCA3MiwgNjksIDY5LCAyMDQsIDgwLCA3MywgNzgsIDY5LCA2NSwgODAsIAotICAgIDgwLCA3NiwgNjksIDEyOCwgODAsIDczLCA3OCwgMTk3LCA4MCwgNzMsIDc4LCA2NSwgODIsIDY2LCA3OSwgODIsIDY1LCA4MywgCi0gICAgMTI4LCA4MCwgNzMsIDc2LCA3NiwgMTI4LCA4MCwgNzMsIDc2LCAxOTcsIDgwLCA3MywgNzYsIDY3LCA4MiwgNzksIDIxNSwgCi0gICAgODAsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDc1LCA3OSwgMTI4LCA4MCwgNzMsIDcxLCAxMjgsIDgwLCAKLSAgICA3MywgMTk5LCA4MCwgNzMsIDY5LCA4OCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIAotICAgIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAKLSAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgCi0gICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIAotICAgIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAKLSAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCi0gICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKLSAgICA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDczLCA2OSwgODUsIAotICAgIDgwLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc3LCA3MywgNjksIDg1LCAKLSAgICA3NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MCwgNzMsIAotICAgIDY5LCA4NSwgODAsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDcyLCAKLSAgICA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDIwOCwgODAsIDczLCA2OSwgODQsIDEyOCwgODAsIAotICAgIDczLCA2OSwgODAsIDEyOCwgODAsIDczLCA2OSwgNjksIDg0LCAxMjgsIDgwLCA3MywgNjksIDY5LCA4MSwgMTI4LCA4MCwgCi0gICAgNzMsIDY5LCA2NywgNjksIDEyOCwgODAsIDczLCA2OSwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDgwLCAKLSAgICA3MywgNjcsIDc1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA4NSwgODQsIDc5LCA4MiwgODUsIDEyOCwgODAsIDczLCA2NSwgODMsIAotICAgIDc3LCAxOTMsIDgwLCA3MywgNjUsIDc4LCA3OSwgMTI4LCA4MCwgMjAxLCA4MCwgNzIsIDg3LCA2NSwgMTI4LCA4MCwgNzIsIAotICAgIDg1LCA4NCwgNzIsIDY1LCA3OSwgMTI4LCA4MCwgNzIsIDg1LCAyMTAsIDgwLCA3MiwgODUsIDc4LCA3MSwgMTI4LCA4MCwgCi0gICAgNzIsIDgyLCA2NSwgODMsIDY5LCAxMjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgODMsIDEyOCwgODAsIDcyLCA3OSwgNjksIDc4LCAKLSAgICA3MywgNjcsIDczLCA2NSwgMjA2LCA4MCwgNzIsIDc5LCA2NSwgMTI4LCA4MCwgNzIsIDc5LCAxMjgsIDgwLCA3MiwgMjA3LCAKLSAgICA4MCwgNzIsIDc4LCA2NSwgNjksIDIwMywgODAsIDcyLCA3MywgNzgsIDg0LCA3MiwgODUsIDEyOCwgODAsIDcyLCA3MywgNzYsIAotICAgIDc5LCA4MywgNzksIDgwLCA3MiwgNjksIDgyLCAyMTEsIDgwLCA3MiwgNzMsIDc2LCA3MywgODAsIDgwLCA3MywgNzgsIDE5NywgCi0gICAgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzIsIAotICAgIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKLSAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgNzIsIDczLCA2OSwgCi0gICAgODUsIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDIwMCwgODAsIDcyLCA3MywgMTI4LCA4MCwgNzIsIDIwMSwgCi0gICAgODAsIDcyLCA2OSwgNjksIDEyOCwgODAsIDcyLCA2OSwgMTI4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTgsIDgwLCAKLSAgICA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NCwgODAsIDcyLCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA4MCwgNzIsIAotICAgIDY1LCA4MiwgMTI4LCA4MCwgNzIsIDY1LCA3OCwgMTI4LCA4MCwgNzIsIDY1LCA3NywgMTI4LCA4MCwgNzIsIDY1LCA3MywgCi0gICAgODMsIDg0LCA3OSwgMjExLCA4MCwgNzIsIDY1LCA3MSwgODMsIDQ1LCA4MCwgMTkzLCA4MCwgNzIsIDY1LCA2NSwgODIsIDc1LCAKLSAgICA2NSwgNjUsIDEyOCwgODAsIDcyLCA2NSwgNjUsIDEyOCwgODAsIDcyLCA2NSwgMTI4LCA4MCwgNzEsIDEyOCwgODAsIDcwLCAKLSAgICAxMjgsIDgwLCA2OSwgODUsIDg4LCAxMjgsIDgwLCA2OSwgODUsIDg0LCA2NSwgNjksIDEyOCwgODAsIDY5LCA4NSwgODQsIAotICAgIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgCi0gICAgNjksIDg0LCA2NSwgODMsIDg0LCA3MywgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCAKLSAgICA2NSwgNzYsIDc2LCA2OSwgMTk2LCA4MCwgNjksIDgzLCA3OSwgMTI4LCA4MCwgNjksIDgzLCAyMDcsIDgwLCA2OSwgODMsIAotICAgIDcyLCA1MCwgMTI4LCA4MCwgNjksIDgzLCA2OSwgODQsIDE5MywgODAsIDY5LCAyMTEsIDgwLCA2OSwgODIsIDg0LCA3MiwgCi0gICAgMjA3LCA4MCwgNjksIDgyLCA4MywgODAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAKLSAgICA3OCwgNjUsIDIwNCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIDIwNiwgODAsIAotICAgIDY5LCA4MiwgODMsIDczLCA2NSwgMjA2LCA4MCwgNjksIDgyLCA4MywgNjksIDg2LCA2OSwgODIsIDczLCA3OCwgMTk5LCA4MCwgCi0gICAgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCA4MiwgMTI4LCA4MCwgNjksIDgyLCA4MCwgNjksIAotICAgIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgwLCA2OSwgODIsIDc3LCA3MywgODQsIDg0LCA2OSwgMTk2LCA4MCwgCi0gICAgNjksIDgyLCA3NywgNjUsIDc4LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIAotICAgIDczLCAxMjgsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCAyMDEsIDgwLCA2OSwgODIsIDcwLCA3OSwgCi0gICAgODIsIDc3LCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDgwLCA2OSwgODIsIDcwLCAKLSAgICA2OSwgNjcsIDg0LCA2NSwgMTI4LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA4MCwgNjksIDgyLCA2NywgODUsIAotICAgIDgzLCA4MywgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA2NywgNjksIDc4LCAyMTIsIDgwLCA2OSwgODAsIDY5LCA4NCwgCi0gICAgMTI4LCA4MCwgNjksIDgwLCA2OSwgMjEyLCA4MCwgNjksIDc5LCA4MiwgODQsIDIwMCwgODAsIDY5LCA3OSwgODAsIDc2LCAKLSAgICA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIAotICAgIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDgzLCA4NSwgCi0gICAgMTI4LCA4MCwgNjksIDc4LCA4MywgNzMsIDg2LCAxOTcsIDgwLCA2OSwgNzgsIDc4LCAyMTcsIDgwLCA2OSwgNzgsIDczLCAKLSAgICA3MiwgNzMsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDg1LCA3MywgNzgsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDc1LCA2NSwgNzYsIAotICAgIDEyOCwgODAsIDY5LCA3OCwgNjksIDg0LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgCi0gICAgNzYsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAKLSAgICAyMDYsIDgwLCA2OSwgNzMsIDg0LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIAotICAgIDIwMCwgODAsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDIwMCwgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNjksIAotICAgIDgzLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODAsIDEyOCwgODAsIDY5LCA2OSwgNzcsIDEyOCwgODAsIDY5LCA2OSwgCi0gICAgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgODMsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCAKLSAgICA4NCwgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNjgsIAotICAgIDY5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA2OSwgNjgsIDY1LCAyMDQsIDgwLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MCwgCi0gICAgNjksIDY1LCA2NywgNjksIDEyOCwgODAsIDY5LCA2NSwgNjcsIDE5NywgODAsIDY4LCA3MywgMTI4LCA4MCwgNjgsIDcwLCAKLSAgICAxMjgsIDgwLCA2OCwgMTI4LCA4MCwgNjcsIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAxMjgsIDgwLCA2NSwgODksIDY5LCAKLSAgICA4MiwgNzksIDc1LCAxMjgsIDgwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgwLCA2NSwgODksIDEyOCwgODAsIAotICAgIDY1LCA4OCwgMTI4LCA4MCwgNjUsIDg3LCA3OCwgMTI4LCA4MCwgNjUsIDIxNSwgODAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgCi0gICAgNzgsIDczLCAxMjgsIDgwLCA2NSwgODUsIDEyOCwgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgODAsIDY1LCAKLSAgICA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4NCwgMjAwLCA4MCwgNjUsIDg0LCA2NSwgNzUsIAotICAgIDEyOCwgODAsIDY1LCA4NCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4MywgODUsIDgxLCAxMjgsIAotICAgIDgwLCA2NSwgODMsIDgzLCA4MCwgNzksIDgyLCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIDY5LCA0NSwgODAsIDg1LCAKLSAgICA3NiwgNzYsIDQ1LCA4NSwgODAsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgCi0gICAgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDY4LCA3OSwgODcsIDc4LCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIAotICAgIDgwLCA2NSwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODAsIDY1LCA4MywgNzIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDgzLCA2OSwgCi0gICAgODEsIDEyOCwgODAsIDY1LCA4MywgNjUsIDc4LCA3MSwgNjUsIDIwNiwgODAsIDY1LCA4MiwgODUsIDc3LCAxMjgsIDgwLCAKLSAgICA2NSwgODIsIDg0LCAyMTcsIDgwLCA2NSwgODIsIDg0LCA3OCwgNjksIDgyLCA4MywgNzIsIDczLCAyMDgsIDgwLCA2NSwgODIsIAotICAgIDg0LCA3MywgNjUsIDc2LCA3NiwgODksIDQ1LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MCwgNjUsIDgyLCAKLSAgICA4NCwgNzMsIDY1LCAyMDQsIDgwLCA2NSwgODIsIDg0LCA3MiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgODIsIDIxMiwgODAsIAotICAgIDY1LCA4MiwgNzMsIDY3LCA3MiwgNzksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA4MywgODQsIDczLCA3MSwgNzcsIDY5LCAKLSAgICA3OCwgNzksIDIwNiwgODAsIDY1LCA4MiwgNjksIDgyLCA2OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIAotICAgIDY5LCA4MywgNzMsIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCAyMTEsIDgwLCA2NSwgCi0gICAgODIsIDY1LCA4MCwgNzIsIDgyLCA2NSwgODMsIDE5NywgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCA3OSwgNzEsIAotICAgIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgCi0gICAgNzYsIDY5LCAyMDQsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCA3MywgMTI4LCA4MCwgNjUsIDgyLCAKLSAgICA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgMjAxLCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgCi0gICAgMTkzLCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3OSwgODMsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgODAsIDY1LCA4MiwgNjUsIAotICAgIDEyOCwgODAsIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDgwLCA4OSwgODIsIDg1LCA4MywgMTI4LCA4MCwgNjUsIDgwLCA2OSwgCi0gICAgODIsIDY3LCA3NiwgNzMsIDgwLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAyMTAsIDgwLCA2NSwgODAsIDEyOCwgODAsIDY1LCAKLSAgICAyMDgsIDgwLCA2NSwgMjA3LCA4MCwgNjUsIDc4LCA4OSwgODUsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNzMsIAotICAgIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjksIDY3LCA2OSwgNzUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3OCwgCi0gICAgNzEsIDcxLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc1LCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODQsIDczLCAKLSAgICAxMjgsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA2NSwgNzgsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIAotICAgIDEyOCwgODAsIDY1LCA3OCwgNzksIDc4LCA3MSwgNzksIDc4LCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzksIDc2LCA3OSwgCi0gICAgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4NywgNzMsIDgzLCA2NSwgNjgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDgyLCAKLSAgICA2NSwgNzgsIDcxLCA3NSwgNjksIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3OSwgNzYsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIAotICAgIDc4LCA3MSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCA2NSwgODksIDY1LCA4MiwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA3MSwgNzUsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDc4LCAKLSAgICA3MSwgNzIsIDg1LCA3NiwgODUsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjksIDg1LCA3NiwgNjksIAotICAgIDg1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjgsIDE5MywgODAsIDY1LCA3OCwgNjUsIDY5LCA3NiwgNjUsIDY5LCA3OCwgCi0gICAgNzEsIDEyOCwgODAsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNzgsIDcxLCA3NSwgNjUsIDcyLCAxMjgsIDgwLCAKLSAgICA2NSwgNzcsIDg1LCA2OCwgODAsIDc5LCA2OCwgMTI4LCA4MCwgNjUsIDc3LCA4MywgNzIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIAotICAgIDc3LCA4MCwgNzIsIDg5LCA3NiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgNzcsIDczLCA3OCwgNzEsIDc1LCA2NSwgNzYsIDEyOCwgCi0gICAgODAsIDY1LCA3NywgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY1LCA3NywgNjksIDc4LCA2OSwgNzgsIDcxLCAxMjgsIDgwLCAKLSAgICA2NSwgNzcsIDY1LCA2OCwgNjUsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY1LCA2OSwgNzIsIDEyOCwgODAsIDY1LCA3NiwgODUsIAotICAgIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3OSwgNjcsIDcyLCA3NSwgNjUsIDEyOCwgODAsIDY1LCA3NiwgMjA1LCA4MCwgCi0gICAgNjUsIDc2LCA3NiwgNjUsIDg3LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDgzLCAxMjgsIDgwLCA2NSwgNzYsIDY5LCAKLSAgICA4NCwgODQsIDY5LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NSwgNzgsIDE5OSwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIAotICAgIDczLCA5MCwgNjksIDE5NiwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDIwNCwgODAsIDY1LCA3NSwgODAsIDY1LCAyMDMsIDgwLCA2NSwgNzMsIAotICAgIDg5LCA2NSwgNzgsIDc4LCA3OSwgNzMsIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgwLCA2NSwgCi0gICAgNzMsIDgyLCA2OSwgMTk2LCA4MCwgNjUsIDczLCAxMjgsIDgwLCA2NSwgNzIsIDc2LCA2NSwgODYsIDIwMSwgODAsIDY1LCAKLSAgICA3MiwgMTI4LCA4MCwgNjUsIDcxLCA2OSwgODIsIDEyOCwgODAsIDY1LCA3MSwgMTk3LCA4MCwgNjUsIDY4LCA3NywgMTkzLCAKLSAgICA4MCwgNjUsIDY4LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA2NSwgNjgsIDE5MywgODAsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIAotICAgIDY3LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNjUsIDcxLCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA4NCwgCi0gICAgODUsIDEyOCwgODAsIDY1LCA2NSwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgwLCA2NSwgNjUsIDgyLCA2NSwgNjksIAotICAgIDEyOCwgODAsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDY1LCA2NSwgNzMsIDEyOCwgODAsIDY1LCA2NSwgNDUsIDgwLCA3MywgCi0gICAgNzYsIDc2LCA2NSwgMTI4LCA4MCwgNjUsIDY1LCAxMjgsIDgwLCA1MCwgMTI4LCA4MCwgNDgsIDQ5LCA0OSwgMTI4LCA4MCwgCi0gICAgNDgsIDQ5LCA0OCwgMTI4LCA4MCwgNDgsIDQ4LCA1NywgMTI4LCA4MCwgNDgsIDQ4LCA1NiwgMTI4LCA4MCwgNDgsIDQ4LCAKLSAgICA1NSwgMTI4LCA4MCwgNDgsIDQ4LCA1NCwgMTI4LCA4MCwgNDgsIDQ4LCA1MywgMTI4LCA4MCwgNDgsIDQ4LCA1MiwgMTI4LCAKLSAgICA4MCwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDEyOCwgODAsIDQ4LCA0OCwgNTAsIDEyOCwgODAsIAotICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA4OSwgODIsIDY1LCA3OCwgNzMsIDgzLCA3NywgCi0gICAgMTkzLCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDE5MywgCi0gICAgNzksIDg4LCA2OSwgNzMsIDY1LCAyMDEsIDc5LCA4OCwgNjksIDczLCAxOTMsIDc5LCA4NiwgNjksIDgyLCA4MiwgNzMsIDY4LCAKLSAgICA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDc5LCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIAotICAgIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODAsIDgwLCA3MywgCi0gICAgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgNzMsIDY4LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA2NiwgNjUsIDgyLCAKLSAgICAxMjgsIDc5LCA4NiwgNjUsIDIwNCwgNzksIDg2LCAxMjgsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxOTYsIDc5LCAKLSAgICA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NSwgODQsIDY5LCAyMTAsIDc5LCA4NSwgODQsIDY2LCA3OSwgCi0gICAgMjE2LCA3OSwgODUsIDc4LCA3NSwgNzMsIDE5MywgNzksIDg1LCA3OCwgNjcsIDY5LCAxMjgsIDc5LCA4NSwgNzgsIDY3LCAKLSAgICAxOTcsIDc5LCA4NCwgODUsIDEyOCwgNzksIDg0LCA4NCwgNjUsIDg2LCAxOTMsIDc5LCA4NCwgODQsIDEyOCwgNzksIDg0LCAKLSAgICA3MiwgNjUsIDc2LCA2NSwgMjA2LCA3OSwgODQsIDcyLCA2NSwgNzYsIDEyOCwgNzksIDgzLCA3NywgNjUsIDc4LCA4OSwgCi0gICAgMTkzLCA3OSwgODMsIDY3LCAxMjgsIDc5LCA4MiwgODQsIDcyLCA3OSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNzksIDgyLCAKLSAgICA4NCwgNzIsIDc5LCA2OCwgNzksIDIxNiwgNzksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIAotICAgIDc4LCA4NCwgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgMjEyLCA3OSwgODIsIDc1LCA3MiwgNzksIDIwNiwgCi0gICAgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgMTI4LCA3OSwgODIsIDY5LCAKLSAgICA0NSwgNTAsIDEyOCwgNzksIDgyLCA2OCwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDY4LCA2OSwgMjEwLCA3OSwgODIsIAotICAgIDY3LCA3MiwgNzMsIDY4LCAxMjgsIDc5LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA3OSwgODAsIDg0LCA3MywgNzksIDIwNiwgCi0gICAgNzksIDgwLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3OSwgODAsIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA3OCwgCi0gICAgMTk5LCA3OSwgODAsIDgwLCA3OSwgODMsIDY5LCAxMjgsIDc5LCA4MCwgNzIsIDczLCA4NSwgNjcsIDcyLCA4NSwgODMsIAorICAgIDY3LCAyMDMsIDgwLCA3NiwgNjUsIDc1LCAxMjgsIDgwLCA3NiwgNjUsIDcxLCA3MywgNzksIDIxMSwgODAsIDc2LCA2NSwgCisgICAgNjcsIDY5LCA3MiwgNzksIDc2LCA2OCwgNjksIDIxMCwgODAsIDc2LCA2NSwgNjcsIDE5NywgODAsIDc2LCA2NSwgMTI4LCAKKyAgICA4MCwgNzMsIDkwLCA5MCwgNzMsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA2NSwgMTI4LCA4MCwgNzMsIAorICAgIDg4LCAxMjgsIDgwLCA3MywgODcsIDgyLCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgCisgICAgODAsIDczLCA4NCwgNjcsIDcyLCA3MCwgNzksIDgyLCAyMDMsIDgwLCA3MywgODQsIDEyOCwgODAsIDczLCA4MywgODQsIDc5LCAKKyAgICA3NiwgMTI4LCA4MCwgNzMsIDgzLCA2OSwgNzYsIDY5LCA3MiwgMTI4LCA4MCwgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIAorICAgIDgwLCA3MywgODIsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDgyLCA3MywgMTk5LCA4MCwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgCisgICAgMTI4LCA4MCwgNzMsIDgyLCA2NSwgNjcsIDg5LCAxMjgsIDgwLCA3MywgODIsIDUwLCAxMjgsIDgwLCA3MywgODAsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgODAsIDczLCA4MCwgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDgwLCA3MywgODAsIAorICAgIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCA4MCwgNzMsIDgwLCAxMjgsIDgwLCA3MywgNzgsIDg3LCA3MiwgNjksIDY5LCAKKyAgICAyMDQsIDgwLCA3MywgNzgsIDY5LCA2NSwgODAsIDgwLCA3NiwgNjksIDEyOCwgODAsIDczLCA3OCwgMTk3LCA4MCwgNzMsIAorICAgIDc4LCA2NSwgODIsIDY2LCA3OSwgODIsIDY1LCA4MywgMTI4LCA4MCwgNzMsIDc2LCA3NiwgMTI4LCA4MCwgNzMsIDc2LCAKKyAgICAxOTcsIDgwLCA3MywgNzYsIDY3LCA4MiwgNzksIDIxNSwgODAsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MCwgNzMsIAorICAgIDc1LCA3OSwgMTI4LCA4MCwgNzMsIDcxLCAxMjgsIDgwLCA3MywgMTk5LCA4MCwgNzMsIDY5LCA4OCwgMTI4LCA4MCwgNzMsIAorICAgIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKKyAgICA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAorICAgIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCAKKyAgICA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCisgICAgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAorICAgIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCAKKyAgICA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgCisgICAgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODAsIDczLCA2OSwgCisgICAgODUsIDIwOCwgODAsIDczLCA2OSwgODQsIDEyOCwgODAsIDczLCA2OSwgODAsIDEyOCwgODAsIDczLCA2OSwgNjksIDg0LCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDY5LCA4MSwgMTI4LCA4MCwgNzMsIDY5LCA2NywgNjksIDEyOCwgODAsIDczLCA2OSwgMTI4LCAKKyAgICA4MCwgNzMsIDY3LCA4NCwgODUsIDgyLCA2OSwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDgwLCA3MywgNjcsIAorICAgIDc1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA4NSwgODQsIDc5LCA4MiwgODUsIDEyOCwgODAsIDczLCA2NSwgODMsIDc3LCAKKyAgICAxOTMsIDgwLCA3MywgNjUsIDc4LCA3OSwgMTI4LCA4MCwgMjAxLCA4MCwgNzIsIDg3LCA2NSwgMTI4LCA4MCwgNzIsIDg1LCAKKyAgICA4NCwgNzIsIDY1LCA3OSwgMTI4LCA4MCwgNzIsIDg1LCAyMTAsIDgwLCA3MiwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNzIsIAorICAgIDgyLCA2NSwgODMsIDY5LCAxMjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgODMsIDEyOCwgODAsIDcyLCA3OSwgNjksIDc4LCA3MywgCisgICAgNjcsIDczLCA2NSwgMjA2LCA4MCwgNzIsIDc5LCA2NSwgMTI4LCA4MCwgNzIsIDc5LCAxMjgsIDgwLCA3MiwgMjA3LCA4MCwgCisgICAgNzIsIDc4LCA2NSwgNjksIDIwMywgODAsIDcyLCA3MywgNzgsIDg0LCA3MiwgODUsIDEyOCwgODAsIDcyLCA3MywgNzYsIDc5LCAKKyAgICA4MywgNzksIDgwLCA3MiwgNjksIDgyLCAyMTEsIDgwLCA3MiwgNzMsIDc2LCA3MywgODAsIDgwLCA3MywgNzgsIDE5NywgODAsIAorICAgIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzIsIDczLCAKKyAgICA2OSwgODUsIDgwLCA3MiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgCisgICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIAorICAgIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDIwMCwgODAsIDcyLCA3MywgMTI4LCA4MCwgNzIsIDIwMSwgODAsIAorICAgIDcyLCA2OSwgNjksIDEyOCwgODAsIDcyLCA2OSwgMTI4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTgsIDgwLCA3MiwgCisgICAgNjUsIDgzLCA2OSwgNDUsIDE5NCwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTkzLCA4MCwgNzIsIDY1LCA4MiwgODksIDc4LCAKKyAgICA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCA3MiwgNjUsIAorICAgIDc3LCAxMjgsIDgwLCA3MiwgNjUsIDczLCA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIDgwLCAKKyAgICAxOTMsIDgwLCA3MiwgNjUsIDY2LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIAorICAgIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIDEyOCwgODAsIDY5LCA4NSwgODgsIAorICAgIDEyOCwgODAsIDY5LCA4NSwgODQsIDY1LCA2OSwgMTI4LCA4MCwgNjksIDg1LCA4NCwgMTI4LCA4MCwgNjksIDg0LCA2NSwgCisgICAgODMsIDg0LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIAorICAgIDczLCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA3NiwgNzYsIDY5LCAKKyAgICAxOTYsIDgwLCA2OSwgODMsIDc5LCAxMjgsIDgwLCA2OSwgODMsIDIwNywgODAsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgwLCAKKyAgICA2OSwgODMsIDcyLCAxNzgsIDgwLCA2OSwgODMsIDY5LCA4NCwgMTkzLCA4MCwgNjksIDIxMSwgODAsIDY5LCA4MiwgODQsIAorICAgIDcyLCAyMDcsIDgwLCA2OSwgODIsIDgzLCA4MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA4MywgCisgICAgNzksIDc4LCA2NSwgMjA0LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgMjA2LCAKKyAgICA4MCwgNjksIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA2OSwgODYsIDY5LCA4MiwgNzMsIDc4LCAxOTksIAorICAgIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDgyLCAxMjgsIDgwLCA2OSwgODIsIDgwLCAKKyAgICA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODAsIDY5LCA4MiwgNzgsIDczLCAyMDYsIDgwLCA2OSwgODIsIAorICAgIDc3LCA3MywgODQsIDg0LCA2OSwgMTk2LCA4MCwgNjksIDgyLCA3NywgNzMsIDE5NSwgODAsIDY5LCA4MiwgNzcsIDY1LCA3OCwgCisgICAgNjksIDc4LCAyMTIsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgNjksIDgyLCAKKyAgICA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIDgyLCA3MCwgNzksIDgyLCA3NywgNzMsIDc4LCAxOTksIAorICAgIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA4NSwgMjA1LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIDEyOCwgCisgICAgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgODAsIDY5LCA4MiwgNjcsIDg1LCA4MywgODMsIDczLCA4NiwgNjksIAorICAgIDEyOCwgODAsIDY5LCA4MiwgNjcsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgwLCA4MCwgNjksIDgyLCAxMjgsIDgwLCA2OSwgCisgICAgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjksIDgwLCA2OSwgMjEyLCA4MCwgNjksIDc5LCA4MiwgODQsIDIwMCwgODAsIDY5LCAKKyAgICA3OSwgODAsIDc2LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIAorICAgIDg0LCA2NSwgNzEsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDgwLCA2OSwgCisgICAgNzgsIDgzLCA4NSwgMTI4LCA4MCwgNjksIDc4LCA4MywgNzMsIDg2LCAxOTcsIDgwLCA2OSwgNzgsIDc4LCAyMTcsIDgwLCAKKyAgICA2OSwgNzgsIDc4LCA2NSwgNzgsIDg0LCAxMjgsIDgwLCA2OSwgNzgsIDczLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA3OCwgNzEsIAorICAgIDg1LCA3MywgNzgsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDc1LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA3OCwgNjksIDg0LCA4MiwgCisgICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgNzYsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCAKKyAgICA4NCwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAyMDYsIDgwLCA2OSwgNzMsIDg0LCA3MiwgCisgICAgMTI4LCA4MCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIDIwMCwgODAsIDY5LCA3MiwgMTI4LCA4MCwgCisgICAgNjksIDIwMCwgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgzLCA3MiwgNzMsIDEyOCwgODAsIDY5LCAKKyAgICA2OSwgODAsIDEyOCwgODAsIDY5LCA2OSwgNzcsIDEyOCwgODAsIDY5LCA2OSwgNzMsIDEyOCwgODAsIDY5LCA2OSwgMTI4LCAKKyAgICA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgODMsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgCisgICAgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCAKKyAgICA4MywgODQsIDY1LCAyMDQsIDgwLCA2OSwgNjgsIDY1LCAyMDQsIDgwLCA2OSwgNjUsIDc1LCAyMTEsIDgwLCA2OSwgNjUsIAorICAgIDY3LCA3MiwgMTI4LCA4MCwgNjksIDY1LCA2NywgNjksIDEyOCwgODAsIDY5LCA2NSwgNjcsIDE5NywgODAsIDY4LCA3MywgCisgICAgMTI4LCA4MCwgNjgsIDcwLCAxMjgsIDgwLCA2OCwgMTI4LCA4MCwgNjcsIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAxMjgsIAorICAgIDgwLCA2NSwgODksIDY5LCA4MiwgNzksIDc1LCAxMjgsIDgwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgwLCA2NSwgCisgICAgODksIDEyOCwgODAsIDY1LCA4OCwgMTI4LCA4MCwgNjUsIDg3LCA3OCwgMTI4LCA4MCwgNjUsIDIxNSwgODAsIDY1LCA4NiwgCisgICAgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgwLCA2NSwgODUsIDEyOCwgODAsIDY1LCAyMTMsIDgwLCA2NSwgODQsIDg0LCAKKyAgICA2OSwgODIsIDc4LCAxMjgsIDgwLCA2NSwgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDgwLCA2NSwgODQsIAorICAgIDIwMCwgODAsIDY1LCA4NCwgNjUsIDc1LCAxMjgsIDgwLCA2NSwgODQsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDg0LCAxMjgsIAorICAgIDgwLCA2NSwgODMsIDg1LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA4MywgODAsIDc5LCA4MiwgMjEyLCA4MCwgNjUsIDgzLCA4MywgCisgICAgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgODUsIDgwLCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIAorICAgIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIDY5LCA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA2OCwgNzksIDg3LCA3OCwgNDUsIAorICAgIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNjksIDc4LCA3MSwgNjksIDIxMCwgODAsIDY1LCA4MywgCisgICAgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgODMsIDY5LCA4MSwgMTI4LCAKKyAgICA4MCwgNjUsIDgzLCA2NSwgNzgsIDcxLCA2NSwgMjA2LCA4MCwgNjUsIDgyLCA4NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgODQsIAorICAgIDIxNywgODAsIDY1LCA4MiwgODQsIDc4LCA2OSwgODIsIDgzLCA3MiwgNzMsIDIwOCwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgCisgICAgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIAorICAgIDIwNCwgODAsIDY1LCA4MiwgODQsIDcyLCA3MywgNjUsIDIwNiwgODAsIDY1LCA4MiwgMjEyLCA4MCwgNjUsIDgyLCA3NSwgCisgICAgMTI4LCA4MCwgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCA4NCwgNzMsIDcxLCAKKyAgICA3NywgNjksIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIAorICAgIDg0LCA3MiwgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDIxMSwgCisgICAgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNjksIDIxMSwgODAsIDY1LCA4MiwgNjUsIDgwLCA3MiwgODIsIAorICAgIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDc5LCA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgCisgICAgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDIwNCwgODAsIDY1LCAKKyAgICA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDczLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgCisgICAgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCAxOTMsIDgwLCA2NSwgODIsIDY1LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIAorICAgIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4MCwgNjUsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDgyLCAKKyAgICAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAxMjgsIDgwLCA2NSwgODAsIDY5LCA4MiwgNjcsIDc2LCA3MywgODAsIAorICAgIDgzLCAxMjgsIDgwLCA2NSwgODAsIDY5LCA4MiwgNjcsIDc2LCA3MywgODAsIDEyOCwgODAsIDY1LCA4MCwgNjksIDIxMCwgCisgICAgODAsIDY1LCA4MCwgMTI4LCA4MCwgNjUsIDIwOCwgODAsIDY1LCAyMDcsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAKKyAgICAxMjgsIDgwLCA2NSwgNzgsIDg5LCA3MywgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc4LCA3MSwgNzEsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDgyLCAKKyAgICA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4NCwgNzMsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIAorICAgIDY5LCA4NSwgODAsIDEyOCwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCAKKyAgICA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzgsIDcxLCA3OSwgNzgsIDY1LCA3OCwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDg3LCA3MywgODMsIDY1LCAKKyAgICA2OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODIsIDY1LCA3OCwgNzEsIDc1LCA2OSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzEsIAorICAgIDc5LCA3NiwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgCisgICAgNzYsIDY1LCA4OSwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCAKKyAgICA3NSwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCAKKyAgICA4MCwgNjUsIDc4LCA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIAorICAgIDg1LCA3OCwgNzEsIDc1LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgCisgICAgNzcsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCAKKyAgICA3NywgNzMsIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIAorICAgIDc3LCA2OSwgNzgsIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgCisgICAgNjUsIDY5LCA3MiwgMTI4LCA4MCwgNjUsIDc2LCA4NSwgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCAKKyAgICA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3NywgODksIDgyLCA2OSwgNzgsIDE5NywgODAsIDY1LCA3NiwgMjA1LCA4MCwgNjUsIAorICAgIDc2LCA3NiwgNjUsIDg3LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDgzLCAxMjgsIDgwLCA2NSwgNzYsIDY5LCA4NCwgCisgICAgODQsIDY5LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NSwgNzgsIDE5OSwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCAKKyAgICA5MCwgNjksIDE5NiwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDIwNCwgODAsIDY1LCA3NSwgODAsIDY1LCAyMDMsIDgwLCA2NSwgNzMsIDg5LCA2NSwgCisgICAgNzgsIDc4LCA3OSwgNzMsIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgwLCA2NSwgNzMsIDgyLCAKKyAgICA2OSwgMTk2LCA4MCwgNjUsIDczLCA3OCwgODQsIDY2LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA4MCwgNjUsIDczLCAxMjgsIAorICAgIDgwLCA2NSwgNzIsIDc2LCA2NSwgODYsIDIwMSwgODAsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDcxLCA2OSwgODMsIDEyOCwgCisgICAgODAsIDY1LCA3MSwgNjksIDgyLCAxMjgsIDgwLCA2NSwgNzEsIDE5NywgODAsIDY1LCA2OCwgNzcsIDE5MywgODAsIDY1LCAKKyAgICA2OCwgNjgsIDc2LCAxOTcsIDgwLCA2NSwgNjgsIDY4LCA3MywgNzgsIDE5OSwgODAsIDY1LCA2OCwgMTkzLCA4MCwgNjUsIAorICAgIDY4LCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA2NSwgNzEsIDY5LCAKKyAgICAxMjgsIDgwLCA2NSwgNjUsIDg0LCA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODAsIAorICAgIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDY1LCA3MywgMTI4LCA4MCwgCisgICAgNjUsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgODAsIDUwLCAxMjgsIDgwLCAKKyAgICA0OCwgNDksIDQ5LCAxMjgsIDgwLCA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAxMjgsIDgwLCA0OCwgNDgsIAorICAgIDU2LCAxMjgsIDgwLCA0OCwgNDgsIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCA0OCwgNDgsIDUzLCAxMjgsIAorICAgIDgwLCA0OCwgNDgsIDUyLCAxMjgsIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgMTI4LCA4MCwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDEyOCwgNzksIDg5LCAKKyAgICA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzksIDg4LCA3MywgNjUsIAorICAgIDEyOCwgNzksIDg4LCA3MywgMTkzLCA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIDg4LCA2OSwgNzMsIDE5MywgNzksIAorICAgIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNzksIDc4LCAxOTksIDc5LCA4NiwgCisgICAgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4OSwgMTI4LCA3OSwgODYsIDY5LCAKKyAgICA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4MCwgMTI4LCA3OSwgODYsIAorICAgIDY5LCA4MiwgNzYsIDY1LCA3MywgNjgsIDEyOCwgNzksIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIDEyOCwgNzksIDg2LCA2NSwgCisgICAgNzYsIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTk2LCA3OSwgODUsIDg0LCAKKyAgICA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODUsIDg0LCA2OSwgMjEwLCA3OSwgODUsIDg0LCA2NiwgNzksIDIxNiwgNzksIAorICAgIDg1LCA3OCwgNzUsIDczLCAxOTMsIDc5LCA4NSwgNzgsIDY3LCA2OSwgMTI4LCA3OSwgODUsIDc4LCA2NywgMTk3LCA3OSwgCisgICAgODQsIDg1LCAxMjgsIDc5LCA4NCwgODQsIDY1LCA4NiwgMTkzLCA3OSwgODQsIDg0LCAxMjgsIDc5LCA4NCwgNzIsIDY5LCAKKyAgICA4MiwgMjExLCA3OSwgODQsIDcyLCA2OSwgMjEwLCA3OSwgODQsIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCA4NCwgNzIsIAorICAgIDY1LCA3NiwgMTI4LCA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAxOTMsIDc5LCA4MywgNjcsIDEyOCwgNzksIDgyLCA4NCwgCisgICAgNzIsIDc5LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA3OSwgODIsIDg0LCA3MiwgNzksIDY4LCA3OSwgMjE2LCA3OSwgODIsIDc4LCAKKyAgICA2NSwgODQsIDE5NywgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDg0LCA4MywgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIAorICAgIDY5LCA3OCwgODQsIDEyOCwgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDIxMiwgNzksIDgyLCA3NSwgNzIsIDc5LCAKKyAgICAyMDYsIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDEyOCwgNzksIAorICAgIDgyLCA2OSwgNDUsIDUwLCAxMjgsIDc5LCA4MiwgNjgsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA2OCwgNjksIDIxMCwgCisgICAgNzksIDgyLCA2NywgNzIsIDczLCA2OCwgMTI4LCA3OSwgODIsIDY1LCA3OCwgNzEsIDE5NywgNzksIDgwLCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDc5LCA4MCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzksIDgwLCA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIAorICAgIDEyOCwgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgCisgICAgNzgsIDE5OSwgNzksIDgwLCA4MCwgNzksIDgzLCA2OSwgMTI4LCA3OSwgODAsIDcyLCA3MywgODUsIDY3LCA3MiwgODUsIDgzLCAKICAgICAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgCiAgICAgMjEwLCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDczLCA3OCwgMTk5LCAKICAgICA3OSwgODAsIDY5LCA3OCwgNDUsIDgwLCAxMjgsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgCi0gICAgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCAKLSAgICA2NywgNzMsIDgyLCA2NywgODUsIDczLCA4NCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA3OSwgNzksIDkwLCA2OSwgCi0gICAgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCA3OSwgNzcsIDg1LCAKLSAgICAxMjgsIDc5LCA3OSwgNjksIDEyOCwgNzksIDc5LCA2NiwgNzksIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgNzgsIAotICAgIDg1LCAxMjgsIDc5LCA3OCwgODMsIDg1LCAxMjgsIDc5LCA3OCwgNzgsIDEyOCwgNzksIDc4LCA3NSwgNjUsIDgyLCAxMjgsIAotICAgIDc5LCA3OCwgNjksIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA4NywgNjUsIDIxNywgNzksIDc4LCA2OSwgCi0gICAgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzksIDc4LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzksIDc4LCAKLSAgICA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzksIDc4LCA2NSwgODAsIDEyOCwgNzksIDc3LCA3MywgODMsIDgzLCA3MywgNzksIAotICAgIDIwNiwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgMjA2LCA3OSwgCi0gICAgNzcsIDY5LCA3MSwgNjUsIDEyOCwgNzksIDc3LCA2OSwgNzEsIDE5MywgNzksIDc3LCA2NSwgNzYsIDc5LCA3OCwgMTI4LCAKLSAgICA3OSwgNzYsIDczLCA4NiwgNjksIDEyOCwgNzksIDc2LCA3MywgNzEsIDc5LCAyMDYsIDc5LCA3NiwgNjgsIDEyOCwgNzksIAotICAgIDc1LCA4NCwgMjA3LCA3OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzksIDc1LCA2NSwgODIsIDE5MywgNzksIDc0LCA3MywgCi0gICAgNjYsIDg3LCA2NSwgMjE3LCA3OSwgNzQsIDY5LCA3OSwgNzgsIDEyOCwgNzksIDczLCA3NiwgMTI4LCA3OSwgNzIsIDc3LCAKLSAgICAxMjgsIDc5LCA3MiwgMjA1LCA3OSwgNzEsIDgyLCA2OSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIDc1LCAxMjgsIDc5LCAKLSAgICA3MSwgNzksIDc4LCA2OSwgMjAzLCA3OSwgNzEsIDcyLCA2NSwgMjA1LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCA4MiwgCi0gICAgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgMTk3LCA3OSwgNzAsIDcwLCAKLSAgICAxMjgsIDc5LCA2OSwgODksIDEyOCwgNzksIDY5LCA3NSwgMTI4LCA3OSwgNjgsIDY5LCA3OCwgMTI4LCA3OSwgNjgsIDE5NiwgCi0gICAgNzksIDY3LCA4NCwgNzksIDgwLCA4NSwgODMsIDEyOCwgNzksIDY3LCA4NCwgNzksIDY2LCA2OSwgODIsIDEyOCwgNzksIDY3LCAKLSAgICA4NCwgNjksIDIxMiwgNzksIDY3LCAyMTAsIDc5LCA2NywgNzYsIDc5LCA2NywgNzUsIDEyOCwgNzksIDY3LCA2NywgNzYsIAotICAgIDg1LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDgzLCA4NCwgODIsIDg1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgNzksIDY2LCA3OSwgNzYsIDIxMSwgNzksIDY2LCA3OSwgMjA0LCA3OSwgNjYsIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA3OSwgNjYsIDc2LCA3MywgODEsIDg1LCAxOTcsIDc5LCA2NiwgNzQsIDY5LCA2NywgMjEyLCA3OSwgNjYsIDY5LCA3NiwgODUsIAotICAgIDgzLCAxMjgsIDc5LCA2NiwgNjksIDc2LCA3OSwgODMsIDEyOCwgNzksIDY2LCAxMjgsIDc5LCA2NSwgODksIDEyOCwgNzksIAotICAgIDY1LCA3NSwgMTI4LCA3OSwgNjUsIDY2LCA3OSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCAxOTMsIDc5LCA0OCwgCi0gICAgNTMsIDQ5LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCAKLSAgICA1MywgNDgsIDEyOCwgNzksIDQ4LCA1MiwgNTcsIDEyOCwgNzksIDQ4LCA1MiwgNTYsIDEyOCwgNzksIDQ4LCA1MiwgNTUsIAotICAgIDEyOCwgNzksIDQ4LCA1MiwgNTQsIDEyOCwgNzksIDQ4LCA1MiwgNTMsIDEyOCwgNzksIDQ4LCA1MiwgNTIsIDEyOCwgNzksIAotICAgIDQ4LCA1MiwgNTEsIDEyOCwgNzksIDQ4LCA1MiwgNTAsIDEyOCwgNzksIDQ4LCA1MiwgNDksIDEyOCwgNzksIDQ4LCA1MiwgCi0gICAgNDgsIDEyOCwgNzksIDQ4LCA1MSwgNTcsIDEyOCwgNzksIDQ4LCA1MSwgNTYsIDEyOCwgNzksIDQ4LCA1MSwgNTUsIDEyOCwgCi0gICAgNzksIDQ4LCA1MSwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NywgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjYsIAotICAgIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCAxMjgsIDc5LCA0OCwgNTEsIDUzLCAxMjgsIAotICAgIDc5LCA0OCwgNTEsIDUyLCAxMjgsIDc5LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1MCwgMTI4LCA3OSwgNDgsIDUxLCA0OSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCAKLSAgICA1MSwgNDgsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCAxMjgsIDc5LCA0OCwgNTAsIAotICAgIDU2LCAxMjgsIDc5LCA0OCwgNTAsIDU1LCAxMjgsIDc5LCA0OCwgNTAsIDU0LCAxMjgsIDc5LCA0OCwgNTAsIDUzLCA2NSwgCi0gICAgMTI4LCA3OSwgNDgsIDUwLCA1MywgMTI4LCA3OSwgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDEyOCwgCi0gICAgNzksIDQ4LCA1MCwgNTEsIDEyOCwgNzksIDQ4LCA1MCwgNTAsIDEyOCwgNzksIDQ4LCA1MCwgNDksIDEyOCwgNzksIDQ4LCAKLSAgICA1MCwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCAxMjgsIDc5LCA0OCwgNDksIDU3LCA2NSwgMTI4LCA3OSwgNDgsIAotICAgIDQ5LCA1NywgMTI4LCA3OSwgNDgsIDQ5LCA1NiwgMTI4LCA3OSwgNDgsIDQ5LCA1NSwgMTI4LCA3OSwgNDgsIDQ5LCA1NCwgCi0gICAgMTI4LCA3OSwgNDgsIDQ5LCA1MywgMTI4LCA3OSwgNDgsIDQ5LCA1MiwgMTI4LCA3OSwgNDgsIDQ5LCA1MSwgMTI4LCA3OSwgCi0gICAgNDgsIDQ5LCA1MCwgMTI4LCA3OSwgNDgsIDQ5LCA0OSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjcsIDEyOCwgNzksIDQ4LCAKLSAgICA0OSwgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgMTI4LCA3OSwgNDgsIAotICAgIDQ4LCA1NywgMTI4LCA3OSwgNDgsIDQ4LCA1NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgCi0gICAgNzAsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY5LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDQ4LCAKLSAgICA1NCwgNjcsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIAotICAgIDQ4LCA1NCwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDEyOCwgNzksIDQ4LCA0OCwgCi0gICAgNTIsIDEyOCwgNzksIDQ4LCA0OCwgNTEsIDEyOCwgNzksIDQ4LCA0OCwgNTAsIDEyOCwgNzksIDQ4LCA0OCwgNDksIDY1LCAKLSAgICAxMjgsIDc5LCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA0NSwgODksIDY5LCAxMjgsIDc5LCA0NSwgNzksIDQ1LCA3MywgMTI4LCAKLSAgICA3OSwgNDUsIDY5LCAxMjgsIDc4LCA5MCwgODksIDg4LCAxMjgsIDc4LCA5MCwgODksIDg0LCAxMjgsIDc4LCA5MCwgODksIAotICAgIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4MiwgMTI4LCA3OCwgOTAsIDg5LCA4MCwgMTI4LCA3OCwgOTAsIDg5LCAxMjgsIAotICAgIDc4LCA5MCwgODUsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgMTI4LCA3OCwgCi0gICAgOTAsIDg1LCA4MSwgMTI4LCA3OCwgOTAsIDg1LCA4MCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDkwLCAKLSAgICA4NSwgNzksIDEyOCwgNzgsIDkwLCA4NSwgMjA2LCA3OCwgOTAsIDg1LCAxMjgsIDc4LCA5MCwgNzksIDg4LCAxMjgsIDc4LCAKLSAgICA5MCwgNzksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDg0LCAxMjgsIDc4LCA5MCwgNzMsIAotICAgIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODAsIDEyOCwgNzgsIDkwLCA3MywgCi0gICAgNjksIDEyOCwgNzgsIDkwLCA3MywgMTI4LCA3OCwgOTAsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgCi0gICAgNzgsIDkwLCA2OSwgMTI4LCA3OCwgOTAsIDY1LCA4OCwgMTI4LCA3OCwgOTAsIDY1LCA4NCwgMTI4LCA3OCwgOTAsIDY1LCAKLSAgICA4MSwgMTI4LCA3OCwgOTAsIDY1LCA4MCwgMTI4LCA3OCwgOTAsIDY1LCAxMjgsIDc4LCA5MCwgMTkzLCA3OCwgODksIDg3LCAKLSAgICA2NSwgMTI4LCA3OCwgODksIDg1LCA4OCwgMTI4LCA3OCwgODksIDg1LCA4NSwgMTI4LCA3OCwgODksIDg1LCA4NCwgMTI4LCAKLSAgICA3OCwgODksIDg1LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDgwLCAxMjgsIAotICAgIDc4LCA4OSwgODUsIDc5LCAxMjgsIDc4LCA4OSwgODUsIDY5LCAxMjgsIDc4LCA4OSwgODUsIDEyOCwgNzgsIDg5LCA3OSwgCi0gICAgODgsIDEyOCwgNzgsIDg5LCA3OSwgODQsIDEyOCwgNzgsIDg5LCA3OSwgODAsIDEyOCwgNzgsIDg5LCA3OSwgNzksIDEyOCwgCisgICAgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3OSwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIDIwNywgNzksIDgwLCAKKyAgICA2OSwgNzgsIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA2NywgNzMsIDgyLCA2NywgCisgICAgODUsIDczLCA4NCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA3OSwgODAsIDY5LCA3OCwgMTI4LCA3OSwgNzksIDkwLCAKKyAgICA2OSwgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCA3OSwgNzcsIAorICAgIDg1LCAxMjgsIDc5LCA3OSwgNzIsIDEyOCwgNzksIDc5LCA2OSwgMTI4LCA3OSwgNzksIDY2LCA3OSwgNzksIDcwLCA3MywgCisgICAgNzYsIDczLCAxMjgsIDc5LCA3OCwgODUsIDEyOCwgNzksIDc4LCA4MywgODUsIDEyOCwgNzksIDc4LCA3OCwgMTI4LCA3OSwgCisgICAgNzgsIDc1LCA2NSwgODIsIDEyOCwgNzksIDc4LCA2OSwgODMsIDY5LCA3NiwgNzAsIDEyOCwgNzksIDc4LCA2OSwgNDUsIDg3LCAKKyAgICA2NSwgMjE3LCA3OSwgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgNzYsIAorICAgIDczLCA3OCwgMTk3LCA3OSwgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3OSwgNzgsIDY1LCA4MCwgMTI4LCA3OSwgCisgICAgNzcsIDczLCA4MywgODMsIDczLCA3OSwgMjA2LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCA3OCwgMTI4LCA3OSwgNzcsIDczLCAKKyAgICA2NywgODIsIDc5LCAyMDYsIDc5LCA3NywgNjksIDcxLCA2NSwgMTI4LCA3OSwgNzcsIDY5LCA3MSwgMTkzLCA3OSwgNzcsIAorICAgIDY1LCA3NiwgNzksIDc4LCAxMjgsIDc5LCA3NiwgNzMsIDg2LCA2OSwgMTI4LCA3OSwgNzYsIDczLCA3MSwgNzksIDIwNiwgCisgICAgNzksIDc2LCA2OCwgMTI4LCA3OSwgNzUsIDg0LCAyMDcsIDc5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3OSwgNzUsIDY1LCAKKyAgICA4MiwgMTkzLCA3OSwgNzQsIDczLCA2NiwgODcsIDY1LCAyMTcsIDc5LCA3NCwgNjksIDc5LCA3OCwgMTI4LCA3OSwgNzMsIAorICAgIDc2LCAxMjgsIDc5LCA3MywgMjA0LCA3OSwgNzIsIDc3LCAxMjgsIDc5LCA3MiwgMjA1LCA3OSwgNzEsIDgyLCA2OSwgMTI4LCAKKyAgICA3OSwgNzEsIDc5LCA3OCwgNjksIDc1LCAxMjgsIDc5LCA3MSwgNzksIDc4LCA2OSwgMjAzLCA3OSwgNzEsIDcyLCA2NSwgCisgICAgMjA1LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCA4MiwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCAxMjgsIDc5LCAKKyAgICA3MCwgNzAsIDczLCA2NywgMTk3LCA3OSwgNzAsIDcwLCAxMjgsIDc5LCA2OSwgODksIDEyOCwgNzksIDY5LCA3NSwgMTI4LCAKKyAgICA3OSwgNjksIDY5LCAxMjgsIDc5LCA2OCwgNjksIDc4LCAxMjgsIDc5LCA2OCwgNjgsIDEyOCwgNzksIDY4LCAxOTYsIDc5LCAKKyAgICA2NywgODQsIDc5LCA4MCwgODUsIDgzLCAxMjgsIDc5LCA2NywgODQsIDc5LCA2NiwgNjksIDgyLCAxMjgsIDc5LCA2NywgODQsIAorICAgIDY5LCAyMTIsIDc5LCA2NywgODQsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDc5LCA2NywgMjEwLCA3OSwgNjcsIDc2LCA3OSwgCisgICAgNjcsIDc1LCAxMjgsIDc5LCA2NywgNjcsIDc2LCA4NSwgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDY2LCA4MywgODQsIDgyLCAKKyAgICA4NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIAorICAgIDY2LCA3OSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgCisgICAgNjcsIDIxMiwgNzksIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCAKKyAgICA2NiwgMTI4LCA3OSwgNjUsIDg5LCAxMjgsIDc5LCA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIAorICAgIDc2LCA3MywgMTI4LCA3OSwgMTkzLCA3OSwgNDgsIDUzLCA0OSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNzksIAorICAgIDQ4LCA1MywgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCAxMjgsIDc5LCA0OCwgNTIsIDU3LCAxMjgsIDc5LCA0OCwgCisgICAgNTIsIDU2LCAxMjgsIDc5LCA0OCwgNTIsIDU1LCAxMjgsIDc5LCA0OCwgNTIsIDU0LCAxMjgsIDc5LCA0OCwgNTIsIDUzLCAKKyAgICAxMjgsIDc5LCA0OCwgNTIsIDUyLCAxMjgsIDc5LCA0OCwgNTIsIDUxLCAxMjgsIDc5LCA0OCwgNTIsIDUwLCAxMjgsIDc5LCAKKyAgICA0OCwgNTIsIDQ5LCAxMjgsIDc5LCA0OCwgNTIsIDQ4LCAxMjgsIDc5LCA0OCwgNTEsIDU3LCAxMjgsIDc5LCA0OCwgNTEsIAorICAgIDU2LCAxMjgsIDc5LCA0OCwgNTEsIDU1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgCisgICAgNjcsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCAKKyAgICA1NCwgMTI4LCA3OSwgNDgsIDUxLCA1MywgMTI4LCA3OSwgNDgsIDUxLCA1MiwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDEyOCwgNzksIDQ4LCA1MSwgNTAsIDEyOCwgNzksIDQ4LCA1MSwgNDksIDEyOCwgNzksIAorICAgIDQ4LCA1MSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCA2NSwgMTI4LCA3OSwgCisgICAgNDgsIDUwLCA1NywgMTI4LCA3OSwgNDgsIDUwLCA1NiwgMTI4LCA3OSwgNDgsIDUwLCA1NSwgMTI4LCA3OSwgNDgsIDUwLCAKKyAgICA1NCwgMTI4LCA3OSwgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIAorICAgIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDUyLCAxMjgsIDc5LCA0OCwgNTAsIDUxLCAxMjgsIDc5LCA0OCwgNTAsIDUwLCAxMjgsIAorICAgIDc5LCA0OCwgNTAsIDQ5LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgMTI4LCA3OSwgCisgICAgNDgsIDQ5LCA1NywgNjUsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDEyOCwgNzksIDQ4LCA0OSwgNTYsIDEyOCwgNzksIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNzksIDQ4LCA0OSwgNTQsIDEyOCwgNzksIDQ4LCA0OSwgNTMsIDEyOCwgNzksIDQ4LCA0OSwgNTIsIAorICAgIDEyOCwgNzksIDQ4LCA0OSwgNTEsIDEyOCwgNzksIDQ4LCA0OSwgNTAsIDEyOCwgNzksIDQ4LCA0OSwgNDksIDEyOCwgNzksIAorICAgIDQ4LCA0OSwgNDgsIDY3LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgCisgICAgNzksIDQ4LCA0OSwgNDgsIDEyOCwgNzksIDQ4LCA0OCwgNTcsIDEyOCwgNzksIDQ4LCA0OCwgNTYsIDEyOCwgNzksIDQ4LCAKKyAgICA0OCwgNTUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDcwLCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OSwgMTI4LCA3OSwgNDgsIAorICAgIDQ4LCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA3OSwgCisgICAgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc5LCAKKyAgICA0OCwgNDgsIDUzLCAxMjgsIDc5LCA0OCwgNDgsIDUyLCAxMjgsIDc5LCA0OCwgNDgsIDUxLCAxMjgsIDc5LCA0OCwgNDgsIAorICAgIDUwLCAxMjgsIDc5LCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgNDUsIDg5LCA2OSwgCisgICAgMTI4LCA3OSwgNDUsIDc5LCA0NSwgNzMsIDEyOCwgNzksIDQ1LCA2OSwgMTI4LCA3OCwgOTAsIDg5LCA4OCwgMTI4LCA3OCwgCisgICAgOTAsIDg5LCA4NCwgMTI4LCA3OCwgOTAsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDEyOCwgNzgsIDkwLCAKKyAgICA4OSwgODAsIDEyOCwgNzgsIDkwLCA4OSwgMTI4LCA3OCwgOTAsIDg1LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgNzgsIDkwLCA4NSwgODIsIDEyOCwgNzgsIDkwLCA4NSwgODEsIDEyOCwgNzgsIDkwLCA4NSwgODAsIDEyOCwgNzgsIAorICAgIDkwLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA5MCwgODUsIDc5LCAxMjgsIDc4LCA5MCwgODUsIDIwNiwgNzgsIDkwLCA4NSwgCisgICAgMTI4LCA3OCwgOTAsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgCisgICAgOTAsIDczLCA4NCwgMTI4LCA3OCwgOTAsIDczLCA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCAKKyAgICA3MywgNjksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIAorICAgIDEyOCwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIDc4LCA5MCwgNjksIDEyOCwgNzgsIDkwLCA2NSwgODgsIDEyOCwgNzgsIAorICAgIDkwLCA2NSwgODQsIDEyOCwgNzgsIDkwLCA2NSwgODEsIDEyOCwgNzgsIDkwLCA2NSwgODAsIDEyOCwgNzgsIDkwLCA2NSwgCisgICAgMTI4LCA3OCwgOTAsIDE5MywgNzgsIDg5LCA4NywgNjUsIDEyOCwgNzgsIDg5LCA4NSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgCisgICAgODUsIDEyOCwgNzgsIDg5LCA4NSwgODQsIDEyOCwgNzgsIDg5LCA4NSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDg4LCAKKyAgICAxMjgsIDc4LCA4OSwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgMTI4LCA3OCwgODksIDg1LCA3OCwgMTI4LCAKKyAgICA3OCwgODksIDg1LCA2OSwgMTI4LCA3OCwgODksIDg1LCAxMjgsIDc4LCA4OSwgNzksIDg4LCAxMjgsIDc4LCA4OSwgNzksIAorICAgIDg0LCAxMjgsIDc4LCA4OSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgNzksIDc5LCAxMjgsIDc4LCA4OSwgNzksIDc4LCAxMjgsIAogICAgIDc4LCA4OSwgNzksIDY1LCAxMjgsIDc4LCA4OSwgNzksIDEyOCwgNzgsIDg5LCA3NCwgNjUsIDEyOCwgNzgsIDg5LCA3MywgCiAgICAgODgsIDEyOCwgNzgsIDg5LCA3MywgODQsIDEyOCwgNzgsIDg5LCA3MywgMjEyLCA3OCwgODksIDczLCAyMTEsIDc4LCA4OSwgCiAgICAgNzMsIDIxMCwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCA2OCwgNzksIDEyOCwgNzgsIDg5LCAKLSAgICA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgODksIAotICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCA3OCwgODksIDIwMSwgNzgsIAotICAgIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgMjEyLCA3OCwgODksIDY5LCA3MiwgCi0gICAgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIDEyOCwgNzgsIDg5LCAxOTYsIAotICAgIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIDczLCAxMjgsIDc4LCA4OSwgCi0gICAgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgNjUsIDY1LCAxMjgsIDc4LCAKLSAgICA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgNzgsIDg3LCA3MywgMTI4LCAKLSAgICA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgNzgsIDg3LCAxMjgsIDc4LCAKLSAgICA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDg1LCAKLSAgICA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgNzgsIDg1LCA4MiwgODgsIAotICAgIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4NSwgNzksIAotICAgIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCA4NSwgNzgsIDg1LCAyMTgsIAotICAgIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIDg1LCA3OCwgNjUsIDg2LCA3MywgCi0gICAgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgODIsIDIwNywgNzgsIDg1LCA3NywgCi0gICAgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCAKLSAgICA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIAotICAgIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NiwgMTI4LCA3OCwgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIAotICAgIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgCi0gICAgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDksIDE3NywgNzgsIDg1LCA0OCwgNTAsIDUwLCAKLSAgICA2NSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDUwLCA0OCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgCi0gICAgODUsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NCwgMTI4LCAKLSAgICA3OCwgODUsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MSwgCi0gICAgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIAotICAgIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTUsIDEyOCwgCi0gICAgNzgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTIsIAotICAgIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgCi0gICAgNDksIDEyOCwgNzgsIDg0LCA4NSwgODUsIDEyOCwgNzgsIDg0LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCAyMTMsIDc4LCA4NCwgCi0gICAgNzksIDgxLCA4MCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNzMsIDY5LCAxOTcsIDc4LCA4NCwgNjksIDg1LCA3OCwgNzEsIDY2LCAKLSAgICA2NSwgMTI4LCA3OCwgODQsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA2OSwgNjksIAotICAgIDEyOCwgNzgsIDg0LCA2NSwgODAsIDEyOCwgNzgsIDg0LCA2NSwgMjA4LCA3OCwgODQsIDY1LCA2NSwgMTI4LCA3OCwgODMsIAotICAgIDg1LCA3OSwgMjEyLCA3OCwgODMsIDg1LCA3OCwgMTI4LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3OCwgODMsIDc5LCA3NywgCi0gICAgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODAsIDEyOCwgNzgsIDgzLCAKLSAgICA3MywgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgMjEyLCA3OCwgODMsIAotICAgIDcyLCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4MywgNzIsIDg1LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA3MywgNjksIDY5LCAKLSAgICAxMjgsIDc4LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgODEsIDEyOCwgNzgsIDgzLCA3MiwgNjUsIAotICAgIDEyOCwgNzgsIDgzLCA2OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2NSwgCi0gICAgMTI4LCA3OCwgODIsIDg5LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIDEyOCwgCi0gICAgNzgsIDgyLCA4OSwgODIsIDEyOCwgNzgsIDgyLCA4OSwgODAsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODIsIDg1LCAKLSAgICA4OCwgMTI4LCA3OCwgODIsIDg1LCA4NCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODIsIAotICAgIDEyOCwgNzgsIDgyLCA4NSwgODAsIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDc5LCA4OCwgMTI4LCA3OCwgODIsIAotICAgIDc5LCA4MCwgMTI4LCA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNjksIDg0LCAxMjgsIAotICAgIDc4LCA4MiwgNjksIDgwLCAxMjgsIDc4LCA4MiwgNjksIDEyOCwgNzgsIDgyLCA2NSwgODgsIDEyOCwgNzgsIDgyLCA2NSwgCi0gICAgODQsIDEyOCwgNzgsIDgyLCA2NSwgODAsIDEyOCwgNzgsIDgyLCA2NSwgMTI4LCA3OCwgNzksIDg5LCAxMjgsIDc4LCA3OSwgCi0gICAgODgsIDEyOCwgNzgsIDc5LCA4NiwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA3OSwgODQsIDg0LCA3OSwgMTI4LCAKLSAgICA3OCwgNzksIDg0LCA2OSwgODMsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDc4LCA3OSwgODQsIAotICAgIDY5LCA3MiwgNjksIDY1LCAxOTYsIDc4LCA3OSwgODQsIDY5LCA2NiwgNzksIDc5LCA3NSwgMTI4LCA3OCwgNzksIDg0LCA2OSwgCi0gICAgNjYsIDc5LCA3OSwgMjAzLCA3OCwgNzksIDg0LCA2OSwgMTI4LCA3OCwgNzksIDg0LCAxOTcsIDc4LCA3OSwgODQsIDY3LCAKLSAgICA3MiwgNjksIDE5NiwgNzgsIDc5LCA4NCwgNjcsIDcyLCAxMjgsIDc4LCA3OSwgODQsIDEyOCwgNzgsIDc5LCAyMTIsIDc4LCAKLSAgICA3OSwgODMsIDY5LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIDgyLCA4NCwgNzIsIAotICAgIDY5LCA4MiwgMjA2LCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgNzksIDgyLCA3NywgNjUsIDIwNCwgNzgsIDc5LCAyMTAsIAotICAgIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAxMjgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIDc5LCA3OCwgCi0gICAgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIAotICAgIDE5NywgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDY2LCA4MiwgCi0gICAgNjksIDY1LCA3NSwgNzMsIDc4LCAxOTksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCA3NSwgNzIsIDg1LCAKLSAgICA3NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIDY2LCA4MiwgNjksIAotICAgIDY1LCAyMDMsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIAotICAgIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDczLCA3MywgMTI4LCA3OCwgNzgsIDc4LCAKLSAgICA3MywgMTI4LCA3OCwgNzgsIDc4LCA2OSwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjUsIAotICAgIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3OCwgCi0gICAgNjUsIDEyOCwgNzgsIDc4LCA3OCwgMTI4LCA3OCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgNzksIDEyOCwgCi0gICAgNzgsIDc4LCA3MSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzEsIDczLCAxMjgsIDc4LCAKLSAgICA3OCwgNzEsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAxMjgsIDc4LCA3OCwgNjYsIAotICAgIDgzLCA4MCwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIDc2LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NywgCi0gICAgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCAKLSAgICA0OSwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgCi0gICAgNzYsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NywgMTI4LCAKLSAgICA3OCwgNzYsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NCwgCi0gICAgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNzYsIDQ4LCAKLSAgICA0OCwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgNzYsIAotICAgIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDc2LCAxMjgsIDc4LCA3NSwgNzksIDc3LCAxMjgsIDc4LCA3NSwgMjA3LCA3OCwgNzUsIAotICAgIDczLCA3OCwgNjgsIDczLCAxMjgsIDc4LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODksIDg4LCAKLSAgICAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgMTI4LCAKLSAgICA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIDc4LCA3NCwgODUsIAotICAgIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MSwgNjUsIDEyOCwgNzgsIDc0LCA4NSwgCi0gICAgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCA3NCwgODUsIDY5LCAKLSAgICA4MSwgMTI4LCA3OCwgNzQsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4NSwgMTI4LCA3OCwgNzQsIDc5LCA4OCwgMTI4LCAKLSAgICA3OCwgNzQsIDc5LCA4NCwgMTI4LCA3OCwgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgMTI4LCA3OCwgNzQsIAotICAgIDc5LCAxMjgsIDc4LCA3NCwgNzMsIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDgwLCAxMjgsIAotICAgIDc4LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDc4LCA3NCwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIDczLCAxMjgsIDc4LCAKLSAgICA3NCwgMjAxLCA3OCwgNzQsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3NCwgNjksIAotICAgIDg1LCA2NSwgNjksIDc4LCA2NSwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY5LCA2OSwgCi0gICAgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDE5NywgNzgsIDc0LCA2OSwgMTI4LCA3OCwgCi0gICAgNzQsIDY1LCA4MSwgMTI4LCA3OCwgNzQsIDY1LCA4MCwgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDc2LCA3MywgMTI4LCAKLSAgICA3OCwgNzQsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2NSwgNjUsIDEyOCwgNzgsIDczLCA4OCwgMTI4LCA3OCwgNzMsIAotICAgIDg0LCA4MiwgNjksIDEyOCwgNzgsIDczLCA4MywgNjUsIDcxLCAxMjgsIDc4LCA3MywgODIsIDg1LCA3MSwgODUsIDEyOCwgCi0gICAgNzgsIDczLCA4MCwgMTI4LCA3OCwgNzMsIDc4LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA4OSwgMTI4LCAKLSAgICA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDc4LCAxMjgsIDc4LCA3MywgNzgsIAotICAgIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA3MywgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OCwgCi0gICAgNzMsIDc4LCAxOTcsIDc4LCA3MywgNzgsIDY4LCA2NSwgNTAsIDEyOCwgNzgsIDczLCA3OCwgNjgsIDY1LCAxNzgsIDc4LCAKLSAgICA3MywgNzcsIDEyOCwgNzgsIDczLCAyMDUsIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIAotICAgIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgMTI4LCA3OCwgNzMsIDcyLCA4MywgNzIsIDg2LCA2NSwgCi0gICAgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCAKLSAgICA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzgsIAotICAgIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MiwgNzMsIAotICAgIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNzMsIAotICAgIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAotICAgIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKLSAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc4LCA3MywgNjksIAotICAgIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIDczLCA2NiwgMTI4LCA3OCwgNzMsIAotICAgIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDcyLCA3NCwgNjUsIDEyOCwgNzgsIAotICAgIDcyLCAxMjgsIDc4LCA3MSwgODksIDY5LCAxMjgsIDc4LCA3MSwgODYsIDY5LCAxMjgsIDc4LCA3MSwgODUsIDg1LCAxMjgsIAotICAgIDc4LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDEyOCwgCi0gICAgNzgsIDcxLCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3OSwgODgsIAotICAgIDEyOCwgNzgsIDcxLCA3OSwgODUsIDEyOCwgNzgsIDcxLCA3OSwgMjEzLCA3OCwgNzEsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIAotICAgIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDc5LCA3NywgCi0gICAgMTI4LCA3OCwgNzEsIDc5LCA2OSwgNzIsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDIwMCwgNzgsIDcxLCAyMDcsIDc4LCA3MSwgCi0gICAgNzUsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDgwLCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAotICAgIDY5LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDE5NywgNzgsIDcxLCA3NSwgNzMsIDc4LCA2OCwgCi0gICAgMjAxLCA3OCwgNzEsIDc1LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCAKLSAgICA3NSwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc4LCA3MSwgNzUsIAotICAgIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgwLCAKLSAgICAxMjgsIDc4LCA3MSwgNzUsIDY1LCA2NSwgNzcsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzMsIAotICAgIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA3MywgNjksIDEyOCwgNzgsIDcxLCA3MiwgCi0gICAgNjUsIDEyOCwgNzgsIDcxLCA3MSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgyLCA2NSwgNjksIAotICAgIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3MSwgCi0gICAgODUsIDc5LCAyMDksIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA3NywgMTI4LCAKLSAgICA3OCwgNzEsIDcxLCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgODUsIAotICAgIDY1LCA2OSwgODMsIDcyLCA2NSwgMTk3LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCAyMDYsIDc4LCA3MSwgNzEsIDg1LCAKKyAgICA3MywgNzgsIDEyOCwgNzgsIDg5LCA3MywgNzMsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIAorICAgIDY5LCA4NCwgMTI4LCA3OCwgODksIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgCisgICAgMTI4LCA3OCwgODksIDIwMSwgNzgsIDg5LCA3MiwgNjUsIDEyOCwgNzgsIDg5LCA2OSwgODQsIDEyOCwgNzgsIDg5LCA2OSwgCisgICAgMjEyLCA3OCwgODksIDY5LCA3OCwgMTI4LCA3OCwgODksIDY5LCA3MiwgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA4OSwgNjksIDEyOCwgNzgsIDg5LCAxOTYsIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgCisgICAgNjUsIDg1LCAxMjgsIDc4LCA4OSwgNjUsIDczLCAxMjgsIDc4LCA4OSwgNjUsIDcyLCAxMjgsIDc4LCA4OSwgNjUsIDY5LCAKKyAgICA3NywgNjUsIDY5LCAxMjgsIDc4LCA4OSwgNjUsIDY1LCAxMjgsIDc4LCA4NywgNzksIDc5LCAxMjgsIDc4LCA4NywgNzksIAorICAgIDEyOCwgNzgsIDg3LCA3MywgNzMsIDEyOCwgNzgsIDg3LCA3MywgMTI4LCA3OCwgODcsIDY5LCAxMjgsIDc4LCA4NywgNjUsIAorICAgIDY1LCAxMjgsIDc4LCA4NywgNjUsIDEyOCwgNzgsIDg3LCAxMjgsIDc4LCA4NiwgMTI4LCA3OCwgODUsIDg4LCAxMjgsIDc4LCAKKyAgICA4NSwgODUsIDc4LCAxMjgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDg1LCA4NCwgNzMsIDc2LCA3NiwgODUsIDEyOCwgNzgsIAorICAgIDg1LCA4NCwgMTI4LCA3OCwgODUsIDIxMiwgNzgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDg1LCA4MiwgMTI4LCA3OCwgODUsIAorICAgIDgwLCAxMjgsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4NSwgNzksIDEyOCwgNzgsIAorICAgIDg1LCA3OCwgODUsIDkwLCAxMjgsIDc4LCA4NSwgNzgsIDg1LCAyMTgsIDc4LCA4NSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgCisgICAgNzgsIDY1LCA4NiwgODUsIDIxMiwgNzgsIDg1LCA3OCwgNjUsIDg2LCA3MywgMjAzLCA3OCwgODUsIDc4LCAxMjgsIDc4LCAKKyAgICA4NSwgMjA2LCA3OCwgODUsIDc3LCA2OSwgODIsIDIwNywgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIAorICAgIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDIwNCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgODMsIDEyOCwgNzgsIDg1LCA3NywgCisgICAgNjYsIDY5LCA4MiwgMTI4LCA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgCisgICAgNzgsIDg1LCA3NiwgMTI4LCA3OCwgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCAKKyAgICA4NSwgNjksIDEyOCwgNzgsIDg1LCA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIAorICAgIDQ5LCAxMjgsIDc4LCA4NSwgNDksIDE3NywgNzgsIDg1LCA0OCwgNTAsIDUwLCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgCisgICAgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA0OSwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTMsIDEyOCwgCisgICAgNzgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTAsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgCisgICAgNDksIDQ4LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCAKKyAgICA4NSwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIAorICAgIDc4LCA4NSwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUxLCAKKyAgICAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDg0LCA4OCwgNzMsIAorICAgIDg2LCAxMjgsIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgODUsIDc3LCAxMjgsIDc4LCA4NCwgODUsIDc0LCAxMjgsIAorICAgIDc4LCA4NCwgMjEzLCA3OCwgODQsIDgzLCA2NSwgODUsIDEyOCwgNzgsIDg0LCA3OSwgODEsIDgwLCA2OSwgNzgsIDEyOCwgCisgICAgNzgsIDg0LCA3OSwgNzEsIDEyOCwgNzgsIDg0LCA3OSwgMTk5LCA3OCwgODQsIDczLCA2OSwgMTk3LCA3OCwgODQsIDcyLCAKKyAgICA2NSwgODUsIDEyOCwgNzgsIDg0LCA2OSwgODUsIDc4LCA3MSwgNjYsIDY1LCAxMjgsIDc4LCA4NCwgNjksIDg1LCA3NywgCisgICAgMTI4LCA3OCwgODQsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDY5LCA2OSwgMTI4LCA3OCwgODQsIDY1LCA4MCwgMTI4LCA3OCwgCisgICAgODQsIDY1LCAyMDgsIDc4LCA4NCwgNjUsIDY1LCAxMjgsIDc4LCA4MywgODUsIDc5LCAyMTIsIDc4LCA4MywgODUsIDc4LCAKKyAgICAxMjgsIDc4LCA4MywgODUsIDc3LCAxMjgsIDc4LCA4MywgNzksIDc3LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODQsIAorICAgIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4MCwgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgCisgICAgODUsIDg0LCAxMjgsIDc4LCA4MywgNzIsIDg1LCAyMTIsIDc4LCA4MywgNzIsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDgzLCAKKyAgICA3MiwgODUsIDY5LCAxMjgsIDc4LCA4MywgNzIsIDczLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjksIDY5LCAxMjgsIAorICAgIDc4LCA4MywgNzIsIDY1LCA4MSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgMTI4LCA3OCwgODMsIDY5LCA4NSwgNjUsIDY5LCA3OCwgCisgICAgMTI4LCA3OCwgODMsIDY5LCA3OCwgMTI4LCA3OCwgODMsIDY1LCAxMjgsIDc4LCA4MiwgODksIDg4LCAxMjgsIDc4LCA4MiwgCisgICAgODksIDg0LCAxMjgsIDc4LCA4MiwgODksIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgMTI4LCA3OCwgODIsIDg5LCAKKyAgICA4MCwgMTI4LCA3OCwgODIsIDg5LCAxMjgsIDc4LCA4MiwgODUsIDg4LCAxMjgsIDc4LCA4MiwgODUsIDg0LCAxMjgsIDc4LCAKKyAgICA4MiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgMTI4LCA3OCwgODIsIDg1LCA4MCwgMTI4LCA3OCwgODIsIAorICAgIDg1LCA2NSwgMTI4LCA3OCwgODIsIDg1LCAxMjgsIDc4LCA4MiwgNzksIDg4LCAxMjgsIDc4LCA4MiwgNzksIDgwLCAxMjgsIAorICAgIDc4LCA4MiwgNzksIDEyOCwgNzgsIDgyLCA2OSwgODgsIDEyOCwgNzgsIDgyLCA2OSwgODQsIDEyOCwgNzgsIDgyLCA2OSwgCisgICAgMjExLCA3OCwgODIsIDY5LCA4MCwgMTI4LCA3OCwgODIsIDY5LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgCisgICAgNjUsIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDgxLCA3MywgNzEsIDEyOCwgCisgICAgNzgsIDc5LCA4OSwgMTI4LCA3OCwgNzksIDg4LCAxMjgsIDc4LCA3OSwgODcsIDY3LCAxMjgsIDc4LCA3OSwgODYsIDY5LCAKKyAgICA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIDEyOCwgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIAorICAgIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA3OCwgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3OCwgCisgICAgNzksIDg0LCA2OSwgNjYsIDc5LCA3OSwgNzUsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDY2LCA3OSwgNzksIDIwMywgNzgsIDc5LCAKKyAgICA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIDg0LCA2NywgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIAorICAgIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgCisgICAgMjEyLCA3OCwgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIDgzLCAxOTcsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCAKKyAgICA4MywgMjEyLCA3OCwgNzksIDgyLCA4NCwgNzIsIDY5LCA4MiwgMjA2LCA3OCwgNzksIDgyLCA4NCwgNzIsIDY5LCA2NSwgODMsIAorICAgIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIDc4LCA3OSwgCisgICAgODIsIDY4LCA3MywgMTk1LCA3OCwgNzksIDIxMCwgNzgsIDc5LCA4MCwgMTI4LCA3OCwgNzksIDc5LCA3OCwgODUsIDEyOCwgCisgICAgNzgsIDc5LCA3OSwgMTI4LCA3OCwgNzksIDc4LCA3MCwgNzksIDgyLCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA3OCwgNzksIDc4LCAKKyAgICA0NSwgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA3OCwgNzksIDc4LCA0NSwgNzQsIDc5LCA3MywgNzgsIDY5LCA4MiwgCisgICAgMTI4LCA3OCwgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgNjUsIDc1LCA3MywgNzgsIDE5OSwgNzgsIDc5LCA3OCwgMTI4LCAKKyAgICA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgNzUsIDcyLCA4NSwgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIAorICAgIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCA2NiwgODIsIDY5LCA2NSwgMjAzLCA3OCwgNzgsIDg1LCA4NSwgCisgICAgMTI4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgODUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjksIAorICAgIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgCisgICAgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDY1LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA3OCwgNzgsIDEyOCwgCisgICAgNzgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCAKKyAgICA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCA3MywgMTI4LCA3OCwgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIAorICAgIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCA3OCwgNzgsIDY2LCA4MywgODAsIDEyOCwgNzgsIDc3LCAxMjgsIAorICAgIDc4LCA3NiwgNjUsIDg1LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTcsIDEyOCwgCisgICAgNzgsIDc2LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCAKKyAgICAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDc2LCA0OCwgNDksIAorICAgIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDc2LCA0OCwgCisgICAgNDksIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDc2LCAKKyAgICA0OCwgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIAorICAgIDc2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUyLCAKKyAgICAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIAorICAgIDQ5LCAxMjgsIDc4LCA3NiwgMTI4LCA3OCwgNzUsIDc5LCA3NywgMTI4LCA3OCwgNzUsIDIwNywgNzgsIDc1LCA3MywgNzgsIAorICAgIDY4LCA3MywgMTI4LCA3OCwgNzUsIDY1LCA4NSwgMTI4LCA3OCwgNzUsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgCisgICAgNzQsIDg5LCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDc0LCAKKyAgICA4OSwgODIsIDEyOCwgNzgsIDc0LCA4OSwgODAsIDEyOCwgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCAKKyAgICA3OCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4NSwgODIsIDEyOCwgNzgsIDc0LCA4NSwgODEsIDY1LCAxMjgsIAorICAgIDc4LCA3NCwgODUsIDgwLCAxMjgsIDc4LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgCisgICAgNzQsIDg1LCA2OSwgODEsIDEyOCwgNzgsIDc0LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODUsIDEyOCwgNzgsIDc0LCAKKyAgICA3OSwgODgsIDEyOCwgNzgsIDc0LCA3OSwgODQsIDEyOCwgNzgsIDc0LCA3OSwgODAsIDEyOCwgNzgsIDc0LCA3OSwgNzksIAorICAgIDEyOCwgNzgsIDc0LCA3OSwgMTI4LCA3OCwgNzQsIDczLCA4OCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIAorICAgIDczLCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgNjksIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCAKKyAgICA3MywgMTI4LCA3OCwgNzQsIDIwMSwgNzgsIDc0LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA4NCwgMTI4LCAKKyAgICA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3OCwgNjUsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIAorICAgIDc0LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCAxOTcsIDc4LCA3NCwgCisgICAgNjksIDEyOCwgNzgsIDc0LCA2NSwgODEsIDEyOCwgNzgsIDc0LCA2NSwgODAsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAKKyAgICA3NiwgNzMsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjUsIDY1LCAxMjgsIDc4LCA3MywgODgsIAorICAgIDEyOCwgNzgsIDczLCA4NCwgODIsIDY5LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIDgyLCA4NSwgCisgICAgNzEsIDg1LCAxMjgsIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgNzgsIDY5LCAKKyAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgCisgICAgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgNzMsIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCAKKyAgICA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgMTk3LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIAorICAgIDY4LCA2NSwgMTc4LCA3OCwgNzMsIDc4LCA1NywgMTI4LCA3OCwgNzMsIDc4LCAxMjgsIDc4LCA3MywgNzcsIDEyOCwgNzgsIAorICAgIDczLCAyMDUsIDc4LCA3MywgNzUsIDc5LCA3NiwgODMsIDY2LCA4NSwgODIsIDE5OSwgNzgsIDczLCA3NSwgNzIsIDY1LCA3MiwgCisgICAgNzMsIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCAxMjgsIDc4LCAKKyAgICA3MywgNzIsIDgzLCA3MiwgODYsIDY1LCA4MywgNjUsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNzcsIDczLCA3OCwgCisgICAgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA2OSwgODMsIDcyLCAxMjgsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCAKKyAgICA3OCwgNzMsIDcxLCA3MiwgMjEyLCA3OCwgNzMsIDcxLCA3MSwgNjUsIDcyLCA3MywgODQsIDY1LCAxMjgsIDc4LCA3MywgNjksIAorICAgIDg4LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDczLCA2OSwgCisgICAgODUsIDc4LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc4LCA3MywgCisgICAgNjksIDg1LCA3OCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNjUsIAorICAgIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCAKKyAgICA2NywgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDIwNiwgNzgsIDczLCA2OSwgODAsIDEyOCwgNzgsIDczLCA2OSwgMTI4LCAKKyAgICA3OCwgNzMsIDY2LCAxMjgsIDc4LCA3MywgNjUsIDEyOCwgNzgsIDczLCA1MCwgMTI4LCA3OCwgNzIsIDg1LCA2OSwgMTI4LCAKKyAgICA3OCwgNzIsIDc0LCA2NSwgMTI4LCA3OCwgNzIsIDEyOCwgNzgsIDcxLCA4OSwgNjksIDEyOCwgNzgsIDcxLCA4NiwgNjksIAorICAgIDEyOCwgNzgsIDcxLCA4NSwgODUsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4NCwgCisgICAgMTI4LCA3OCwgNzEsIDg1LCA3OSwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNzgsIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCAKKyAgICA4NCwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3OSwgODgsIDEyOCwgNzgsIDcxLCA3OSwgODUsIAorICAgIDEyOCwgNzgsIDcxLCA3OSwgMjEzLCA3OCwgNzEsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIDc5LCA4MSwgMTI4LCA3OCwgNzEsIAorICAgIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDc5LCA3NywgMTI4LCA3OCwgNzEsIDc5LCA2OSwgCisgICAgNzIsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDIwMCwgNzgsIDcxLCAyMDcsIDc4LCA3MSwgNzUsIDg5LCA2OSwgNjksIDEyOCwgCisgICAgNzgsIDcxLCA3NSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKKyAgICA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDY5LCA3OCwgOTAsIDY5LCA4NSwgNzcsIAorICAgIDEyOCwgNzgsIDcxLCA3NSwgODUsIDE5NywgNzgsIDcxLCA3NSwgNzMsIDc4LCA2OCwgMjAxLCA3OCwgNzEsIDc1LCA3MywgCisgICAgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA4MiwgNzMsIAorICAgIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCA3NywgCisgICAgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCAKKyAgICA2NSwgNzcsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIAorICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA3MywgNjksIDEyOCwgNzgsIDcxLCA3MiwgNjUsIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgyLCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgwLCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgODEsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCAyMDksIDc4LCA3MSwgNzEsIAorICAgIDg1LCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA3NywgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzcsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgODUsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgODMsIDcyLCA2NSwgMTk3LCAKKyAgICA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCAyMDYsIDc4LCA3MSwgNzEsIDg1LCA2NSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgCiAgICAgMTI4LCA3OCwgNzEsIDcxLCA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzMsIDEyOCwgCiAgICAgNzgsIDcxLCA3MSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCAKICAgICA3MSwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDIxMywgNzgsIDcxLCA3MSwgNjksIDc4LCAxMjgsIAogICAgIDc4LCA3MSwgNzEsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgCiAgICAgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCAKLSAgICA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgMTI4LCA3OCwgNzEsIDcxLCAxMjgsIAotICAgIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgNjksIDg1LCA4MiwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzEsIDY5LCA4MCwgCi0gICAgMTI4LCA3OCwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDY5LCA2NSwgNjgsIDY1LCAKLSAgICA3NiwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCAKLSAgICA3OCwgNzEsIDY1LCAyMTEsIDc4LCA3MSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIAotICAgIDc4LCA3MSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDEyOCwgNzgsIDcxLCA2NSwgNzMsIDEyOCwgNzgsIDcxLCA2NSwgCi0gICAgNzIsIDEyOCwgNzgsIDcxLCA2NSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgMTkzLCA3OCwgNzAsIDEyOCwgNzgsIDY5LCA4OCwgCi0gICAgMjEyLCA3OCwgNjksIDg4LCAxMjgsIDc4LCA2OSwgODcsIDgzLCA4MCwgNjUsIDgwLCA2OSwgODIsIDEyOCwgNzgsIDY5LCAKLSAgICA4NywgNzYsIDczLCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4NywgMTI4LCA3OCwgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIAotICAgIDc4LCA2OSwgODUsIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgCi0gICAgODQsIDY5LCAxOTYsIDc4LCA2OSwgODEsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAKLSAgICAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCAKLSAgICA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzYsIDEyOCwgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCAKLSAgICA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIDcxLCA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgNjcsIAotICAgIDc1LCA4NCwgNzMsIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgCi0gICAgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCAKLSAgICA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIDY4LCA4NSwgNzgsIDEyOCwgNzgsIDY4LCAyMTMsIDc4LCAKLSAgICA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgNzksIDg0LCAxMjgsIDc4LCA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIAotICAgIDc5LCAxMjgsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc4LCA2OCwgNzksIDc3LCA2NiwgODUsIDEyOCwgNzgsIDY4LCA3OSwgCi0gICAgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgODQsIDEyOCwgNzgsIDY4LCA3MywgODEsIDEyOCwgCi0gICAgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCAKLSAgICA2OCwgNzMsIDY4LCA2NSwgMTI4LCA3OCwgNjgsIDczLCA2NSwgODEsIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIAotICAgIDY4LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgNjUsIDY5LCA4MiwgCi0gICAgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDgwLCAxMjgsIDc4LCA2OCwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDEyOCwgCi0gICAgNzgsIDY4LCA2NSwgODgsIDEyOCwgNzgsIDY4LCA2NSwgODQsIDEyOCwgNzgsIDY4LCA2NSwgODAsIDEyOCwgNzgsIDY4LCAKLSAgICA2NSwgNzcsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNjgsIAotICAgIDY1LCA2NSwgMTI4LCA3OCwgNjgsIDY1LCAxOTMsIDc4LCA2NiwgODksIDg4LCAxMjgsIDc4LCA2NiwgODksIDg0LCAxMjgsIAotICAgIDc4LCA2NiwgODksIDgyLCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4MiwgMTI4LCA3OCwgNjYsIDg5LCA4MCwgMTI4LCA3OCwgCi0gICAgNjYsIDg5LCAxMjgsIDc4LCA2NiwgODUsIDg4LCAxMjgsIDc4LCA2NiwgODUsIDg0LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAKLSAgICA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgMTI4LCA3OCwgNjYsIDg1LCA4MCwgMTI4LCA3OCwgNjYsIDg1LCAxMjgsIDc4LCAKLSAgICA2NiwgNzksIDg4LCAxMjgsIDc4LCA2NiwgNzksIDg0LCAxMjgsIDc4LCA2NiwgNzksIDgwLCAxMjgsIDc4LCA2NiwgNzksIAotICAgIDEyOCwgNzgsIDY2LCA3MywgODgsIDEyOCwgNzgsIDY2LCA3MywgODQsIDEyOCwgNzgsIDY2LCA3MywgODAsIDEyOCwgNzgsIAotICAgIDY2LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgMTI4LCA3OCwgCi0gICAgNjYsIDczLCAxMjgsIDc4LCA2NiwgNzIsIDEyOCwgNzgsIDY2LCA2NSwgODgsIDEyOCwgNzgsIDY2LCA2NSwgODQsIDEyOCwgCi0gICAgNzgsIDY2LCA2NSwgODAsIDEyOCwgNzgsIDY2LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKLSAgICA3OCwgNjUsIDg5LCAxMjgsIDc4LCA2NSwgODgsIDczLCA2NSwgMjA2LCA3OCwgNjUsIDg4LCAxMjgsIDc4LCA2NSwgODUsIAotICAgIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY1LCA4NSwgNjgsIDczLCAyMTgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgCi0gICAgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzgsIDY1LCA4MywgNzUsIDY1LCA4MCwgMjAxLCA3OCwgNjUsIDgzLCAKLSAgICA3MiwgNzMsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OCwgNjUsIAotICAgIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgCi0gICAgODIsIDEyOCwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgNjUsIDc5LCAyMTEsIDc4LCA2NSwgNzgsIDgzLCA2NSwgNzgsIDY1LCAKLSAgICA4MSwgMTI4LCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgCi0gICAgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgCi0gICAgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIDY1LCA3NSwgMTI4LCA3OCwgNjUsIDczLCA4MiwgMTkzLCA3OCwgCi0gICAgNjUsIDczLCAyMDQsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDcxLCAKLSAgICA2NSwgMTI4LCA3OCwgNjUsIDcxLCAxOTMsIDc4LCA2NSwgNzEsIDEyOCwgNzgsIDY1LCAxOTksIDc4LCA2NSwgNjksIDEyOCwgCi0gICAgNzgsIDY1LCA2NiwgNzYsIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCAKLSAgICA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIAotICAgIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNjUsIDQ1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIAotICAgIDUyLCA0OSwgMTI4LCA3OCwgNDgsIDUyLCA0OCwgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgCi0gICAgMTI4LCA3OCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MSwgNTMsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCAKLSAgICA3OCwgNDgsIDUxLCA1MiwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIAotICAgIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIDQ4LCA1MSwgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgCi0gICAgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgNTYsIDEyOCwgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgCi0gICAgNzgsIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc4LCA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCAKLSAgICA0OCwgNTAsIDUxLCAxMjgsIDc4LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIAotICAgIDQ4LCAxMjgsIDc4LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgCi0gICAgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgCi0gICAgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCAKLSAgICA0OSwgNTAsIDEyOCwgNzgsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIAotICAgIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIAotICAgIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgCi0gICAgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAKLSAgICAyMTcsIDc3LCA4OSwgODgsIDEyOCwgNzcsIDg5LCA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCAKLSAgICA3NywgODksIDgwLCAxMjgsIDc3LCA4OSwgNjUsIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgMjE3LCA3NywgCi0gICAgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgCi0gICAgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAKLSAgICAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgODYsIDgzLCAxMjgsIDc3LCA4NiwgNzksIDgwLCAxMjgsIDc3LCA4NiwgCi0gICAgNzMsIDEyOCwgNzcsIDg2LCA2OSwgODUsIDY1LCA2OSwgNzgsIDcxLCA2NSwgNzcsIDEyOCwgNzcsIDg2LCAxMjgsIDc3LCAKLSAgICAyMTQsIDc3LCA4NSwgODgsIDEyOCwgNzcsIDg1LCA4NSwgODMsIDczLCA3NSwgNjUsIDg0LCA3OSwgNjUsIDc4LCAxMjgsIAotICAgIDc3LCA4NSwgODUsIDgyLCA2OCwgNzIsIDY1LCA3NCwgMTkzLCA3NywgODUsIDg1LCAxMjgsIDc3LCA4NSwgODQsIDEyOCwgCi0gICAgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgODMsIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA4MiwgNzksIDc5LCAKLSAgICA3NywgMTI4LCA3NywgODUsIDgzLCA3MiwgNTEsIDEyOCwgNzcsIDg1LCA4MywgNzIsIDE3OSwgNzcsIDg1LCA4MywgNzIsIAotICAgIDEyOCwgNzcsIDg1LCA4MywgMjAwLCA3NywgODUsIDgyLCA4OCwgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIAotICAgIDc3LCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgODIsIDY4LCA2NSwgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgCi0gICAgODUsIDgyLCAxMjgsIDc3LCA4NSwgODEsIDY4LCA2NSwgNzcsIDEyOCwgNzcsIDg1LCA4MCwgMTI4LCA3NywgODUsIDc5LCAKLSAgICA4OCwgMTI4LCA3NywgODUsIDc5LCA4NCwgMTI4LCA3NywgODUsIDc5LCA4MCwgMTI4LCA3NywgODUsIDc5LCA3NywgNjUsIAotICAgIDY5LCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIDg1LCA3OCwgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCA2NSwgCi0gICAgNzIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIDg0LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCAKLSAgICAyMTIsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NywgODUsIAotICAgIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCAKLSAgICA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgODUsIDc2LCA4NCwgNzMsIAotICAgIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDIwMSwgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgCi0gICAgMTI4LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgODUsIDcxLCA4MywgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NSwgCi0gICAgMTk5LCA3NywgODUsIDY5LCAxMjgsIDc3LCA4NSwgNjcsIDcyLCAxMjgsIDc3LCA4NSwgNjcsIDIwMCwgNzcsIDg1LCA2NywgCi0gICAgNjUsIDY1LCA2OCwgMTI4LCA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgODUsIDY1LCA2OSwgMTI4LCA3NywgODUsIDQ1LCAKLSAgICA3MSwgNjUsIDY1LCA3MiwgNzYsIDY1LCAxOTMsIDc3LCAyMTMsIDc3LCA4MywgMTI4LCA3NywgODAsIDY1LCAxMjgsIDc3LCAKLSAgICA3OSwgODksIDY1LCA3MywgMTI4LCA3NywgNzksIDg4LCAxMjgsIDc3LCA3OSwgODYsIDczLCAxOTcsIDc3LCA3OSwgODYsIAotICAgIDY5LCAxOTYsIDc3LCA3OSwgODUsIDg0LCA3MiwgMTI4LCA3NywgNzksIDg1LCA4NCwgMjAwLCA3NywgNzksIDg1LCA4MywgCi0gICAgNjksIDEyOCwgNzcsIDc5LCA4NSwgODMsIDE5NywgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA4MywgMTI4LCAKLSAgICA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNzcsIAotICAgIDc5LCA4NSwgNzgsIDIxMiwgNzcsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCAxOTYsIDc3LCA3OSwgCi0gICAgODQsIDcyLCA2OSwgODIsIDEyOCwgNzcsIDc5LCA4NCwgMTI4LCA3NywgNzksIDgyLCA4NCwgODUsIDg1LCA3NywgMTI4LCAKLSAgICA3NywgNzksIDgyLCA4NCwgNjUsIDgyLCAxMjgsIDc3LCA3OSwgODIsIDgwLCA3MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgCi0gICAgNjUsIDIwNCwgNzcsIDc5LCA4MiwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDc5LCA4MCwgMTI4LCA3NywgNzksIDc5LCAKLSAgICA4MywgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc3LCA3OSwgNzksIDc4LCAxMjgsIDc3LCA3OSwgNzksIDIwNiwgNzcsIAotICAgIDc5LCA3OSwgNzcsIDgwLCA4NSwgODEsIDEyOCwgNzcsIDc5LCA3OSwgNzcsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDc5LCA3OSwgCi0gICAgMTI4LCA3NywgNzksIDc4LCA4NCwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCAKLSAgICA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgNzgsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIAotICAgIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MiwgCi0gICAgNjUsIDczLCA3NiwgMTI4LCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzcsIDc5LCA3OCwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzcsIDc5LCA3OCwgNzksIAotICAgIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA3OSwgCi0gICAgNzgsIDc1LCA2OSwgODksIDEyOCwgNzcsIDc5LCA3OCwgNzUsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDczLCAxMjgsIDc3LCAKLSAgICA3OSwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc3LCA3OSwgNzgsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIAotICAgIDEyOCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIAotICAgIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgCi0gICAgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCAxMjgsIDc3LCA3OSwgNjYsIDczLCAKLSAgICA3NiwgMTk3LCA3NywgNzksIDY1LCAxMjgsIDc3LCAyMDcsIDc3LCA3OCwgODksIDY1LCAyMDUsIDc3LCA3OCwgNjUsIDgzLCAKLSAgICAxMjgsIDc3LCA3NywgODMsIDgwLCAxMjgsIDc3LCA3NywgMTI4LCA3NywgMjA1LCA3NywgNzYsIDY1LCAxMjgsIDc3LCA3NiwgCi0gICAgMTI4LCA3NywgNzUsIDgwLCA2NSwgODIsIDY1LCAyMDksIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgCi0gICAgNzMsIDgzLCA4MiwgNjUsIDEyOCwgNzcsIDczLCA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCAKLSAgICA3MywgMTI4LCA3NywgNzMsIDgyLCA2OSwgNjgsIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCAKLSAgICA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgCi0gICAgMTI4LCA3NywgNzMsIDc4LCA3MywgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCAKLSAgICA3NywgNzMsIDc4LCA3MywgNjgsIDczLCA4MywgNjcsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY2LCA4NSwgODMsIDEyOCwgNzcsIAotICAgIDczLCA3NywgNjksIDEyOCwgNzcsIDczLCA3NywgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgCi0gICAgNzMsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDc3LCA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCAKLSAgICA3NiwgNzUsIDIxNywgNzcsIDczLCA3NiwgMTI4LCA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzMsIAotICAgIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCA3NSwgODIsIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgCi0gICAgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDg0LCAKLSAgICA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgCi0gICAgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIAotICAgIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgCi0gICAgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIAotICAgIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCAKLSAgICA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCAKLSAgICA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIDczLCA2OSwgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzcsIAotICAgIDczLCA2OSwgNjksIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgNzMsIDY4LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA3MywgCi0gICAgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCA3NywgNzMsIDY4LCA2OCwgNzYsIDE5NywgNzcsIDczLCAKLSAgICAxOTYsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDY3LCA3OSwgODAsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODAsIAotICAgIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCAyMDcsIDc3LCA3MywgNjcsIDIxMCwgNzcsIDcyLCA5MCwgCi0gICAgMTI4LCA3NywgNzIsIDY1LCAxMjgsIDc3LCA3MiwgMTI4LCA3NywgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4NCwgCi0gICAgMTI4LCA3NywgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODIsIDEyOCwgNzcsIDcxLCA4NSwgODAsIDEyOCwgCi0gICAgNzcsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCAKLSAgICA3NywgNzEsIDg1LCAxMjgsIDc3LCA3MSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgNzksIDg0LCAxMjgsIDc3LCA3MSwgNzksIAotICAgIDgwLCAxMjgsIDc3LCA3MSwgNzksIDEyOCwgNzcsIDcxLCAyMDcsIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIAotICAgIDczLCA2OSwgMTI4LCA3NywgNzEsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIDY5LCAxMjgsIAotICAgIDc3LCA3MSwgNjYsIDg1LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzAsIDg1LCA3NywgCi0gICAgMTI4LCA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA3MywgMTI4LCA3NywgNzEsIDY2LCA2OSwgODUsIDc4LCAKLSAgICAxMjgsIDc3LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3NywgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjksIAotICAgIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgODEsIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgMTI4LCA3NywgCi0gICAgNzEsIDY1LCA4OCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCAKLSAgICAxMjgsIDc3LCA3MSwgMTI4LCA3NywgNzAsIDc5LCA3OCwgMTI4LCA3NywgNzAsIDc5LCAyMDYsIDc3LCA3MCwgNzksIDEyOCwgCi0gICAgNzcsIDcwLCA3MywgODksIDY1LCA4MSwgMTI4LCA3NywgNzAsIDczLCA2OSwgNjksIDEyOCwgNzcsIDcwLCA2OSwgODUsIDg0LCAKLSAgICAxMjgsIDc3LCA3MCwgNjksIDg1LCA4MSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA3MCwgNjUsIAotICAgIDY1LCAxMjgsIDc3LCA2OSwgOTAsIDkwLCA3OSwgMTI4LCA3NywgNjksIDg4LCAxMjgsIDc3LCA2OSwgODUsIDIxMiwgNzcsIAotICAgIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgNzgsIDc0LCA3OSwgNzcsIDc4LCA2OCwgNjksIDg1LCA4MSwgMTI4LCA3NywgCi0gICAgNjksIDg1LCA3OCwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzksIDEyOCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIAotICAgIDIwNCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgCi0gICAgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3NSwgMTI4LCA3NywgNjksIDg0LCAKLSAgICA2OSwgNzEsIDEyOCwgNzcsIDY5LCA4NCwgNjUsIDc2LCAxMjgsIDc3LCA2OSwgODQsIDE5MywgNzcsIDY5LCA4MywgODMsIAotICAgIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc3LCA2OSwgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODMsIDgzLCA2NSwgCi0gICAgNzEsIDE5NywgNzcsIDY5LCA4MywgNzksIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgCi0gICAgNzcsIDY5LCA4MiwgNzksIDczLCA4NCwgNzMsIDE5NSwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCAKLSAgICA3NSwgNzIsIDE5MywgNzcsIDY5LCA4MiwgNzMsIDY4LCA3MywgNjUsIDc4LCA4MywgMTI4LCA3NywgNjksIDgyLCA3MywgCi0gICAgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCAKLSAgICA4MiwgNjcsIDg1LCA4MiwgMjE3LCA3NywgNjksIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIAotICAgIDY5LCA3NywgNzksIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgCi0gICAgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDIxMCwgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAKLSAgICAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCAyMDUsIDc3LCA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCAKLSAgICA3NiwgNzMsIDc1LCAxMjgsIDc3LCA2OSwgNzMsIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgCisgICAgNjUsIDY1LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgODUsIDgyLCA2OSwgODUsIAorICAgIDg0LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAxMjgsIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNjksIDY5LCAxMjgsIAorICAgIDc4LCA3MSwgNjksIDY1LCA2OCwgNjUsIDc2LCAxMjgsIDc4LCA3MSwgNjUsIDg4LCAxMjgsIDc4LCA3MSwgNjUsIDg1LCAKKyAgICAxMjgsIDc4LCA3MSwgNjUsIDg0LCAxMjgsIDc4LCA3MSwgNjUsIDIxMSwgNzgsIDcxLCA2NSwgODEsIDEyOCwgNzgsIDcxLCAKKyAgICA2NSwgODAsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgMTI4LCA3OCwgNzEsIAorICAgIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCA3MiwgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCAxOTMsIAorICAgIDc4LCA3MCwgMTI4LCA3OCwgNjksIDg4LCAyMTIsIDc4LCA2OSwgODgsIDEyOCwgNzgsIDY5LCA4NywgODMsIDgwLCA2NSwgCisgICAgODAsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg3LCA3NiwgNzMsIDc4LCAKKyAgICAxOTcsIDc4LCA2OSwgODcsIDEyOCwgNzgsIDY5LCAyMTUsIDc4LCA2OSwgODUsIDg0LCA4MiwgNjUsIDc2LCAxMjgsIDc4LCAKKyAgICA2OSwgODUsIDg0LCA4MiwgNjUsIDIwNCwgNzgsIDY5LCA4NSwgODQsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg0LCA4NywgNzksIAorICAgIDgyLCA3NSwgNjksIDE5NiwgNzgsIDY5LCA4NCwgMTI4LCA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgODQsIDY5LCAxOTYsIAorICAgIDc4LCA2OSwgODIsIDE5NiwgNzgsIDY5LCA4MSwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzgsIDY5LCA4MCwgODQsIDg1LCA3OCwgCisgICAgNjksIDEyOCwgNzgsIDY5LCA4MCwgMTI4LCA3OCwgNjksIDc5LCAxMjgsIDc4LCA2OSwgMjA3LCA3OCwgNjksIDc4LCA3OSwgCisgICAgNjksIDEyOCwgNzgsIDY5LCA3OCwgNjUsIDc4LCA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzYsIDEyOCwgCisgICAgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIDcxLCAKKyAgICA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgNjcsIDc1LCA4NCwgNzMsIDY5LCAxMjgsIDc4LCA2OSwgNjcsIDc1LCAxMjgsIAorICAgIDc4LCA2OSwgNjYsIDY5LCA3OCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgNjgsIDg1LCA4OCwgMTI4LCA3OCwgCisgICAgNjgsIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDEyOCwgNzgsIDY4LCAKKyAgICA4NSwgODAsIDEyOCwgNzgsIDY4LCA4NSwgNzgsIDEyOCwgNzgsIDY4LCAyMTMsIDc4LCA2OCwgNzksIDg4LCAxMjgsIDc4LCAKKyAgICA2OCwgNzksIDg0LCAxMjgsIDc4LCA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIDc5LCAxMjgsIDc4LCA2OCwgNzksIAorICAgIDc4LCAxMjgsIDc4LCA2OCwgNzksIDc3LCA2NiwgODUsIDEyOCwgNzgsIDY4LCA3OSwgNzYsIDE5NywgNzgsIDY4LCA3MywgCisgICAgODgsIDEyOCwgNzgsIDY4LCA3MywgODQsIDEyOCwgNzgsIDY4LCA3MywgODEsIDEyOCwgNzgsIDY4LCA3MywgODAsIDEyOCwgCisgICAgNzgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCA2OCwgNzMsIDY4LCA2NSwgMTI4LCAKKyAgICA3OCwgNjgsIDczLCA2NSwgODEsIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg4LCAxMjgsIAorICAgIDc4LCA2OCwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjksIDY5LCAxMjgsIDc4LCA2OCwgCisgICAgNjksIDgwLCAxMjgsIDc4LCA2OCwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDEyOCwgNzgsIDY4LCA2NSwgODgsIDEyOCwgCisgICAgNzgsIDY4LCA2NSwgODQsIDEyOCwgNzgsIDY4LCA2NSwgODAsIDEyOCwgNzgsIDY4LCA2NSwgNzcsIDEyOCwgNzgsIDY4LCAKKyAgICA2NSwgNjUsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjgsIAorICAgIDY1LCAxOTMsIDc4LCA2NywgNzIsIDY1LCA4NSwgMTI4LCA3OCwgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgCisgICAgMTI4LCA3OCwgNjYsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODIsIDEyOCwgNzgsIDY2LCA4OSwgODAsIDEyOCwgCisgICAgNzgsIDY2LCA4OSwgMTI4LCA3OCwgNjYsIDg1LCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODIsIDEyOCwgNzgsIDY2LCA4NSwgODAsIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCAKKyAgICA3OCwgNjYsIDc5LCA4OCwgMTI4LCA3OCwgNjYsIDc5LCA4NCwgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIAorICAgIDc5LCAxMjgsIDc4LCA2NiwgNzMsIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIAorICAgIDc4LCA2NiwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDEyOCwgCisgICAgNzgsIDY2LCA3MywgMTI4LCA3OCwgNjYsIDcyLCAxMjgsIDc4LCA2NiwgNjUsIDg4LCAxMjgsIDc4LCA2NiwgNjUsIDg0LCAKKyAgICAxMjgsIDc4LCA2NiwgNjUsIDgwLCAxMjgsIDc4LCA2NiwgNjUsIDEyOCwgNzgsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNzgsIDY1LCA4OSwgMTI4LCA3OCwgNjUsIDg4LCA3MywgNjUsIDIwNiwgNzgsIDY1LCA4OCwgMTI4LCA3OCwgNjUsIAorICAgIDg1LCA4NCwgNzIsIDgzLCAxMjgsIDc4LCA2NSwgODUsIDY4LCA3MywgMjE4LCA3OCwgNjUsIDg0LCA4NSwgODIsIDY1LCAKKyAgICAyMDQsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDc4LCA2NSwgODMsIDc1LCA2NSwgODAsIDIwMSwgNzgsIAorICAgIDY1LCA4MywgNzIsIDczLCAxMjgsIDc4LCA2NSwgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzgsIDY1LCA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2NSwgODMsIDY1LCAyMDQsIDc4LCAKKyAgICA2NSwgODIsIDgyLCA3OSwgMjE1LCA3OCwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgODEsIDEyOCwgNzgsIDY1LCA3OSwgMjExLCAKKyAgICA3OCwgNjUsIDc4LCA4MywgNjUsIDc4LCA2NSwgODEsIDEyOCwgNzgsIDY1LCA3OCwgNzEsIDc3LCA3OSwgNzgsIDg0LCA3MiwgCisgICAgNzksIDEyOCwgNzgsIDY1LCA3OCwgNjgsIDEyOCwgNzgsIDY1LCA3OCwgNjUsIDEyOCwgNzgsIDY1LCA3NywgNjksIDEyOCwgCisgICAgNzgsIDY1LCA3NywgMTk3LCA3OCwgNjUsIDc3LCA1MCwgMTI4LCA3OCwgNjUsIDc3LCAxMjgsIDc4LCA2NSwgNzUsIDEyOCwgCisgICAgNzgsIDY1LCA3MywgODIsIDE5MywgNzgsIDY1LCA3MywgMjA0LCA3OCwgNjUsIDcxLCA4MiwgMjAxLCA3OCwgNjUsIDcxLCAKKyAgICA2NSwgODIsIDEyOCwgNzgsIDY1LCA3MSwgNjUsIDEyOCwgNzgsIDY1LCA3MSwgMTkzLCA3OCwgNjUsIDcxLCAxMjgsIDc4LCAKKyAgICA2NSwgMTk5LCA3OCwgNjUsIDY5LCAxMjgsIDc4LCA2NSwgNjYsIDc2LCA2NSwgMTI4LCA3OCwgNjUsIDY2LCA2NSwgODQsIAorICAgIDY1LCA2OSwgNjUsIDIwNiwgNzgsIDY1LCA2NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgCisgICAgNzUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDczLCAxMjgsIDc4LCA2NSwgMTkzLCAKKyAgICA3OCwgNjUsIDUyLCAxMjgsIDc4LCA2NSwgNTAsIDEyOCwgNzgsIDY1LCA0NSwgNTAsIDEyOCwgNzgsIDQ4LCA1MiwgNTAsIAorICAgIDEyOCwgNzgsIDQ4LCA1MiwgNDksIDEyOCwgNzgsIDQ4LCA1MiwgNDgsIDEyOCwgNzgsIDQ4LCA1MSwgNTcsIDEyOCwgNzgsIAorICAgIDQ4LCA1MSwgNTYsIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDU1LCAxMjgsIDc4LCA0OCwgCisgICAgNTEsIDU0LCAxMjgsIDc4LCA0OCwgNTEsIDUzLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MywgMTI4LCA3OCwgNDgsIDUxLCAKKyAgICA1MiwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIAorICAgIDUxLCAxMjgsIDc4LCA0OCwgNTEsIDUwLCAxMjgsIDc4LCA0OCwgNTEsIDQ5LCAxMjgsIDc4LCA0OCwgNTEsIDQ4LCAxMjgsIAorICAgIDc4LCA0OCwgNTAsIDU3LCAxMjgsIDc4LCA0OCwgNTAsIDU2LCAxMjgsIDc4LCA0OCwgNTAsIDU1LCAxMjgsIDc4LCA0OCwgCisgICAgNTAsIDU0LCAxMjgsIDc4LCA0OCwgNTAsIDUzLCA2NSwgMTI4LCA3OCwgNDgsIDUwLCA1MywgMTI4LCA3OCwgNDgsIDUwLCAKKyAgICA1MiwgMTI4LCA3OCwgNDgsIDUwLCA1MSwgMTI4LCA3OCwgNDgsIDUwLCA1MCwgMTI4LCA3OCwgNDgsIDUwLCA0OSwgMTI4LCAKKyAgICA3OCwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjYsIDEyOCwgNzgsIAorICAgIDQ4LCA0OSwgNTYsIDY1LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA0OCwgCisgICAgNDksIDU0LCAxMjgsIDc4LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA0OCwgNDksIDUxLCAKKyAgICAxMjgsIDc4LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCAKKyAgICA0OCwgNDgsIDU3LCAxMjgsIDc4LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA0OCwgNDgsIAorICAgIDU0LCAxMjgsIDc4LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCA0OCwgNDgsIDUxLCAxMjgsIAorICAgIDc4LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3OCwgCisgICAgNDUsIDY1LCA4MiwgMjE3LCA3NywgODksIDg4LCAxMjgsIDc3LCA4OSwgODQsIDEyOCwgNzcsIDg5LCA4MywgNzYsIDczLCAKKyAgICA4NCwgNjksIDEyOCwgNzcsIDg5LCA4MCwgMTI4LCA3NywgODksIDY1LCAxMjgsIDc3LCA4OSwgMTkzLCA3NywgODksIDEyOCwgCisgICAgNzcsIDIxNywgNzcsIDg3LCA3OSwgNzksIDEyOCwgNzcsIDg3LCA3OSwgMTI4LCA3NywgODcsIDczLCA3MywgMTI4LCA3NywgCisgICAgODcsIDczLCAxMjgsIDc3LCA4NywgNjksIDY5LCAxMjgsIDc3LCA4NywgNjksIDEyOCwgNzcsIDg3LCA2NSwgNjUsIDEyOCwgCisgICAgNzcsIDg3LCA2NSwgMTI4LCA3NywgODcsIDEyOCwgNzcsIDIxNSwgNzcsIDg2LCA4MywgMTI4LCA3NywgODYsIDc5LCA4MCwgCisgICAgMTI4LCA3NywgODYsIDczLCAxMjgsIDc3LCA4NiwgNjksIDg1LCA2NSwgNjksIDc4LCA3MSwgNjUsIDc3LCAxMjgsIDc3LCAKKyAgICA4NiwgMTI4LCA3NywgMjE0LCA3NywgODUsIDg4LCAxMjgsIDc3LCA4NSwgODUsIDgzLCA3MywgNzUsIDY1LCA4NCwgNzksIAorICAgIDY1LCA3OCwgMTI4LCA3NywgODUsIDg1LCA4MiwgNjgsIDcyLCA2NSwgNzQsIDE5MywgNzcsIDg1LCA4NSwgMTI4LCA3NywgCisgICAgODUsIDg0LCAxMjgsIDc3LCA4NSwgODMsIDczLCA2NywgMTI4LCA3NywgODUsIDgzLCA3MywgMTk1LCA3NywgODUsIDgzLCAKKyAgICA3MiwgODIsIDc5LCA3OSwgNzcsIDEyOCwgNzcsIDg1LCA4MywgNzIsIDUxLCAxMjgsIDc3LCA4NSwgODMsIDcyLCAxNzksIAorICAgIDc3LCA4NSwgODMsIDcyLCAxMjgsIDc3LCA4NSwgODMsIDIwMCwgNzcsIDg1LCA4MywgMTI4LCA3NywgODUsIDgyLCA4OCwgCisgICAgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIDc3LCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgODIsIDY4LCAKKyAgICA2NSwgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgODUsIDgyLCAxMjgsIDc3LCA4NSwgODEsIDY4LCA2NSwgNzcsIAorICAgIDEyOCwgNzcsIDg1LCA4MCwgMTI4LCA3NywgODUsIDc5LCA4OCwgMTI4LCA3NywgODUsIDc5LCA4NCwgMTI4LCA3NywgODUsIAorICAgIDc5LCA4MCwgMTI4LCA3NywgODUsIDc5LCA3NywgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIDg1LCA3OCwgCisgICAgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCA2NSwgNzIsIDEyOCwgNzcsIDg1LCA3OCwgMTI4LCA3NywgODUsIDc2LCAKKyAgICA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIDIxMiwgNzcsIDg1LCA3NiwgODQsIAorICAgIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCAKKyAgICA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA2OSwgMTI4LCA3NywgODUsIAorICAgIDc2LCA4NCwgNzMsIDgwLCA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgCisgICAgODUsIDc2LCA4NCwgNzMsIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDIwMSwgNzcsIDg1LCA3NiwgODQsIDY1LCAKKyAgICA3OCwgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIAorICAgIDc3LCA4NSwgNzEsIDgzLCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAxOTksIDc3LCA4NSwgNjksIDc4LCAxMjgsIAorICAgIDc3LCA4NSwgNjksIDEyOCwgNzcsIDg1LCA2NywgNzIsIDEyOCwgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCA2NSwgCisgICAgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIDgzLCAxMjgsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgNjUsIDY5LCAKKyAgICAxMjgsIDc3LCA4NSwgNDUsIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCAKKyAgICA4MiwgMjA3LCA3NywgODAsIDY1LCAxMjgsIDc3LCA3OSwgODksIDY1LCA3MywgMTI4LCA3NywgNzksIDg4LCAxMjgsIDc3LCAKKyAgICA3OSwgODYsIDczLCAxOTcsIDc3LCA3OSwgODYsIDY5LCAyMTEsIDc3LCA3OSwgODYsIDY5LCA3NywgNjksIDc4LCA4NCwgNDUsIAorICAgIDg3LCA2NSwgNzYsIDc2LCA4MCwgNzYsIDY1LCA3OCwgMTk3LCA3NywgNzksIDg2LCA2OSwgNzcsIDY5LCA3OCwgODQsIDQ1LCAKKyAgICA3MiwgNzMsIDc4LCA3MSwgMTk3LCA3NywgNzksIDg2LCA2OSwgNzcsIDY5LCA3OCwgODQsIDQ1LCA3MCwgNzYsIDc5LCA3OSwgCisgICAgODIsIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDc3LCA3OSwgODYsIDY5LCA3NywgNjksIDc4LCA4NCwgNDUsIDY4LCA3MywgNjUsIAorICAgIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDc3LCA3OSwgODYsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3NywgNzksIDg2LCA2OSwgCisgICAgNzcsIDY5LCA3OCwgMjEyLCA3NywgNzksIDg2LCA2OSwgMTk2LCA3NywgNzksIDg2LCA2OSwgMTI4LCA3NywgNzksIDg1LCAKKyAgICA4NCwgNzIsIDEyOCwgNzcsIDc5LCA4NSwgODMsIDY5LCAxMjgsIDc3LCA3OSwgODUsIDgzLCAxOTcsIDc3LCA3OSwgODUsIAorICAgIDc4LCA4NCwgNjUsIDczLCA3OCwgODMsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDc3LCA3OSwgCisgICAgODUsIDc4LCA4NCwgNjUsIDczLCAyMDYsIDc3LCA3OSwgODUsIDc4LCAyMTIsIDc3LCA3OSwgODUsIDc4LCA2OCwgMTI4LCAKKyAgICA3NywgNzksIDg1LCA3OCwgMTk2LCA3NywgNzksIDg0LCA3OSwgODIsIDg3LCA2NSwgODksIDEyOCwgNzcsIDc5LCA4NCwgNzksIAorICAgIDgyLCA2NywgODksIDY3LCA3NiwgNjksIDEyOCwgNzcsIDc5LCA4NCwgNzksIDIxMCwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4MiwgCisgICAgMTI4LCA3NywgNzksIDg0LCAxMjgsIDc3LCA3OSwgODMsIDgxLCA4NSwgNjksIDEyOCwgNzcsIDc5LCA4MiwgODQsIDg1LCAKKyAgICA4NSwgNzcsIDEyOCwgNzcsIDc5LCA4MiwgODQsIDY1LCA4MiwgMTI4LCA3NywgNzksIDgyLCA4MCwgNzIsIDc5LCA3NiwgNzksIAorICAgIDcxLCA3MywgNjcsIDY1LCAyMDQsIDc3LCA3OSwgODIsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc3LCA3OSwgODAsIDEyOCwgCisgICAgNzcsIDc5LCA3OSwgODMsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3NywgNzksIDc5LCA3OCwgMTI4LCA3NywgNzksIDc5LCAKKyAgICAyMDYsIDc3LCA3OSwgNzksIDc3LCA4MCwgODUsIDgxLCAxMjgsIDc3LCA3OSwgNzksIDc3LCA2OSwgODUsIDg0LCAxMjgsIAorICAgIDc3LCA3OSwgNzksIDY4LCAxMjgsIDc3LCA3OSwgNzksIDE5NiwgNzcsIDc5LCA3OSwgMTI4LCA3NywgNzksIDc4LCA4NCwgCisgICAgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCA3OSwgNzgsIDg0LCAyMDAsIDc3LCAKKyAgICA3OSwgNzgsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIDY1LCA2NiwgNzYsIDE5NywgNzcsIAorICAgIDc5LCA3OCwgNzksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA3NywgCisgICAgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIAorICAgIDIxMSwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzcsIDc5LCA3OCwgNzksIDcwLCA3OSwgNzgsIDczLCA2NSwgCisgICAgODMsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA3OSwgNzgsIDc1LCA2OSwgODksIAorICAgIDEyOCwgNzcsIDc5LCA3OCwgNzUsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDczLCAxMjgsIDc3LCA3OSwgNzgsIDcxLCA3NSwgCisgICAgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc3LCA3OSwgNzgsIDY5LCA4OSwgNDUsIDc3LCA3OSwgODUsIDg0LCAyMDAsIDc3LCAKKyAgICA3OSwgNzgsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIDEyOCwgNzcsIDc5LCAKKyAgICA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIAorICAgIDY5LCA4MiwgNDUsIDU3LCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgNDUsIDU2LCAxMjgsIDc3LCA3OSwgCisgICAgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgNDUsIDU1LCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgNDUsIAorICAgIDU0LCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgNDUsIDUzLCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgCisgICAgNzMsIDY5LCA4MiwgNDUsIDUyLCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgNDUsIDUxLCAxMjgsIDc3LCAKKyAgICA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgNDUsIDUwLCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgCisgICAgNDUsIDQ5LCA1NCwgMTI4LCA3NywgNzksIDY4LCA3MywgNzAsIDczLCA2OSwgODIsIDQ1LCA0OSwgNTMsIDEyOCwgNzcsIDc5LCAKKyAgICA2OCwgNzMsIDcwLCA3MywgNjksIDgyLCA0NSwgNDksIDUyLCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgCisgICAgNDUsIDQ5LCA1MSwgMTI4LCA3NywgNzksIDY4LCA3MywgNzAsIDczLCA2OSwgODIsIDQ1LCA0OSwgNTAsIDEyOCwgNzcsIDc5LCAKKyAgICA2OCwgNzMsIDcwLCA3MywgNjksIDgyLCA0NSwgNDksIDQ5LCAxMjgsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCA4MiwgCisgICAgNDUsIDQ5LCA0OCwgMTI4LCA3NywgNzksIDY4LCAyMDEsIDc3LCA3OSwgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCAKKyAgICA3OSwgNjgsIDY5LCA3NywgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIDgzLCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgCisgICAgMTI4LCA3NywgNzksIDY4LCA2OSwgMTI4LCA3NywgNzksIDY2LCA3MywgNzYsIDE5NywgNzcsIDc5LCA2NSwgMTI4LCA3NywgCisgICAgMjA3LCA3NywgNzgsIDg5LCA2NSwgMjA1LCA3NywgNzgsIDY1LCA4MywgMTI4LCA3NywgNzcsIDgzLCA4MCwgMTI4LCA3NywgCisgICAgNzcsIDEyOCwgNzcsIDIwNSwgNzcsIDc2LCA2NSwgMTI4LCA3NywgNzYsIDEyOCwgNzcsIDc1LCA4MCwgNjUsIDgyLCA2NSwgCisgICAgMjA5LCA3NywgNzMsIDg4LCAxMjgsIDc3LCA3MywgODQsIDEyOCwgNzcsIDczLCA4MywgODIsIDY1LCAxMjgsIDc3LCA3MywgCisgICAgODIsIDczLCA2NiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzcsIDczLCA4MiwgNzMsIDEyOCwgNzcsIDczLCA4MiwgNjksIDY4LCAKKyAgICAxMjgsIDc3LCA3MywgODAsIDEyOCwgNzcsIDczLCA3OCwgODksIDEyOCwgNzcsIDczLCA3OCwgODUsIDgzLCA0NSwgNzksIAorICAgIDgyLCA0NSwgODAsIDc2LCA4NSwgMjExLCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDgzLCA4NCwgCisgICAgNjksIDgyLCAxMjgsIDc3LCA3MywgNzgsIDczLCA3NywgNzMsIDkwLCA2OSwgMTI4LCA3NywgNzMsIDc4LCA3MywgNzcsIDY1LCAKKyAgICAxMjgsIDc3LCA3MywgNzgsIDczLCA2OCwgNzMsIDgzLCA2NywgMTI4LCA3NywgNzMsIDc4LCA3MywgNjYsIDg1LCA4MywgCisgICAgMTI4LCA3NywgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAKKyAgICA4MywgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgNzMsIDc2LCA3NiwgNjksIDg0LCAxMjgsIAorICAgIDc3LCA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCA3NiwgNzUsIDIxNywgNzcsIDczLCA3NiwgCisgICAgNzMsIDg0LCA2NSwgODIsIDIxNywgNzcsIDczLCA3NiwgMTI4LCA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCAKKyAgICA3NywgNzMsIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCA3NSwgODIsIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIAorICAgIDc3LCA3MywgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgCisgICAgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIAorICAgIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCAKKyAgICA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIAorICAgIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCAKKyAgICA2OSwgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgCisgICAgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCAKKyAgICA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgCisgICAgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIDczLCA2OSwgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIAorICAgIDEyOCwgNzcsIDczLCA2OSwgNjksIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgNzMsIDY4LCA3NiwgNzMsIDc4LCAxOTcsIAorICAgIDc3LCA3MywgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCA3NywgNzMsIDY4LCA2OCwgNzYsIDY5LCAKKyAgICAxMjgsIDc3LCA3MywgNjgsIDQ1LCA3NiwgNjksIDg2LCA2OSwgMjA0LCA3NywgNzMsIDE5NiwgNzcsIDczLCA2NywgODIsIAorICAgIDc5LCA4MywgNjcsIDc5LCA4MCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgCisgICAgNzcsIDczLCA2NywgODIsIDIwNywgNzcsIDczLCA2NywgMjEwLCA3NywgNzIsIDkwLCAxMjgsIDc3LCA3MiwgNjUsIDEyOCwgCisgICAgNzcsIDcyLCAxMjgsIDc3LCA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAxMjgsIDc3LCA3MSwgODUsIDgyLCAKKyAgICA4OCwgMTI4LCA3NywgNzEsIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgODgsIAorICAgIDEyOCwgNzcsIDcxLCA4NSwgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIDc3LCA3MSwgODUsIDEyOCwgNzcsIAorICAgIDcxLCA3OSwgODgsIDEyOCwgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgODAsIDEyOCwgNzcsIDcxLCA3OSwgCisgICAgMTI4LCA3NywgNzEsIDIwNywgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgNzMsIDY5LCAxMjgsIDc3LCA3MSwgCisgICAgNjksIDg4LCAxMjgsIDc3LCA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgODUsIDEyOCwgCisgICAgNzcsIDcxLCA2NiwgNzksIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3MCwgODUsIDc3LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDczLCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDcxLCA2NiwgNjksIAorICAgIDc4LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgCisgICAgODMsIDY1LCA4MSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCAxMjgsIDc3LCA3MSwgNjUsIDg4LCAxMjgsIDc3LCAKKyAgICA3MSwgNjUsIDg0LCAxMjgsIDc3LCA3MSwgNjUsIDgwLCAxMjgsIDc3LCA3MSwgNjUsIDEyOCwgNzcsIDcxLCAxMjgsIDc3LCAKKyAgICA3MCwgNzksIDc4LCAxMjgsIDc3LCA3MCwgNzksIDIwNiwgNzcsIDcwLCA3OSwgMTI4LCA3NywgNzAsIDczLCA4OSwgNjUsIAorICAgIDgxLCAxMjgsIDc3LCA3MCwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDcwLCA2OSwgCisgICAgODUsIDgxLCAxMjgsIDc3LCA3MCwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzcsIDcwLCA2NSwgNjUsIDEyOCwgNzcsIDY5LCAKKyAgICA5MCwgOTAsIDc5LCAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NSwgMjEyLCA3NywgNjksIDg1LCA4MSwgMTI4LCAKKyAgICA3NywgNjksIDg1LCA3OCwgNzQsIDc5LCA3NywgNzgsIDY4LCA2OSwgODUsIDgxLCAxMjgsIDc3LCA2OSwgODUsIDc4LCAxMjgsIAorICAgIDc3LCA2OSwgODQsIDgyLCA3OSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNjksIDg0LCA4MiwgCisgICAgNzMsIDY1LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCAKKyAgICA4NSwgODMsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDc1LCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3MSwgMTI4LCA3NywgNjksIAorICAgIDg0LCA2NSwgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgNjksIDc4LCA3MywgNjUsIDIwNiwgCisgICAgNzcsIDY5LCA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MywgODMsIDY1LCA3MSwgMTk3LCA3NywgNjksIDgzLCAKKyAgICA3OSwgMTI4LCA3NywgNjksIDgzLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIAorICAgIDY1LCAxMjgsIDc3LCA2OSwgODIsIDc1LCA3MiwgMTkzLCA3NywgNjksIDgyLCA3MywgNjgsIDczLCA2NSwgNzgsIDgzLCAKKyAgICAxMjgsIDc3LCA2OSwgODIsIDczLCAxMjgsIDc3LCA2OSwgODIsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIAorICAgIDgyLCA4OSwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCAyMTcsIDc3LCA2OSwgNzgsIDc5LCA4MiwgNjUsIDIwMCwgCisgICAgNzcsIDY5LCA3OCwgNzksIDY5LCAxMjgsIDc3LCA2OSwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCAKKyAgICA3NywgNjksIDc3LCA3OSwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NywgNjksIAorICAgIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgMjEwLCA3NywgNjksIDc3LCA0NSwgODEsIDc5LCA4MCwgCisgICAgNzIsIDEyOCwgNzcsIDY5LCA3NywgMTI4LCA3NywgNjksIDIwNSwgNzcsIDY5LCA3NiwgNzksIDY4LCA3MywgMTk1LCA3NywgCisgICAgNjksIDc2LCA3MywgNzUsIDEyOCwgNzcsIDY5LCA3MywgOTAsIDczLCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4NCwgNzksIDc4LCAKICAgICAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgCi0gICAgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDY5LCAKLSAgICA3NywgODUsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIAotICAgIDczLCA4NSwgNzcsIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgCi0gICAgMTI4LCA3NywgNjksIDY4LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA2OSwgNjUsIDg0LCAxMjgsIDc3LCA2OSwgNjUsIDIxMiwgCi0gICAgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDE5NiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDY5LCAKLSAgICA2NSwgODMsIDg1LCA4MiwgMTk3LCA3NywgNjgsIDg1LCAyMDYsIDc3LCAxOTYsIDc3LCA2NywgNzIsIDIxMywgNzcsIDY3LCAKLSAgICA3MiwgNjUsIDIwNiwgNzcsIDE5NSwgNzcsIDY2LCA4NSwgNzksIDgxLCAxMjgsIDc3LCA2NiwgODUsIDc5LCAxMjgsIDc3LCAKLSAgICA2NiwgODUsIDY5LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCAxMjgsIAotICAgIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgODQsIDEyOCwgNzcsIDY2LCA3MywgCi0gICAgMjEyLCA3NywgNjYsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA3MywgMTI4LCA3NywgNjYsIDY5LCAKLSAgICA4NSwgODgsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgNzcsIDEyOCwgNzcsIAotICAgIDY2LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY5LCA3OCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgNzUsIDY5LCA2OSwgCi0gICAgODQsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDY2LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA4MSwgMTI4LCA3NywgCi0gICAgNjYsIDY1LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NiwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAKLSAgICA3NSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCAxMjgsIDc3LCA2NiwgNjUsIDE5MywgNzcsIDY2LCAxOTMsIDc3LCAKLSAgICA2NiwgNTIsIDEyOCwgNzcsIDY2LCA1MSwgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgMTI4LCA3NywgMTk0LCA3NywgCi0gICAgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDg5LCAxMjgsIDc3LCA2NSwgODgsIDczLCA3NywgNjUsIAotICAgIDEyOCwgNzcsIDY1LCA4OCwgMTI4LCA3NywgNjUsIDg1LCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIAotICAgIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgCi0gICAgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDY1LCAKLSAgICA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCA2NSwgODMsIDc1LCAxMjgsIAotICAgIDc3LCA2NSwgODMsIDcyLCA3MCwgNjUsIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNTAsIDEyOCwgNzcsIDY1LCA4MywgCi0gICAgNjcsIDg1LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA2NSwgODIsIDg5LCAxMjgsIDc3LCA2NSwgODIsIDg1LCA3NSwgODUsIAotICAgIDEyOCwgNzcsIDY1LCA4MiwgODQsIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIDg5LCA3MywgNzgsIDE5OSwgCi0gICAgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCAKLSAgICA3NSwgNDUsIDUyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTEsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MCwgCi0gICAgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDQ5LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCAKLSAgICA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgCi0gICAgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDgzLCA3MywgODQsIDY5LCAKLSAgICAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDY1LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIAotICAgIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCA2NSwgNzAsIDEyOCwgNzcsIDY1LCA4MSwgMTI4LCA3NywgNjUsIDgwLCA3NiwgCi0gICAgMTk3LCA3NywgNjUsIDgwLCA3MywgODEsIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCA2NSwgNzksIDEyOCwgNzcsIDY1LCA3OCwgCi0gICAgODMsIDg5LCA3OSwgNzgsIDEyOCwgNzcsIDY1LCA3OCwgODMsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDc4LCA3MSwgNjUsIDc2LCA2NSwgNzcsIDEyOCwgNzcsIAotICAgIDY1LCA3OCwgNjgsIDY1LCA3MywgNzYsIDczLCA3OCwgMTk5LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCAxOTUsIDc3LCA2NSwgCi0gICAgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3NiwgODQsIDY5LCAKLSAgICA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgNjksIDgyLCA3MywgMTI4LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgNjUsIAotICAgIDc2LCAxOTcsIDc3LCA2NSwgNzYsIDY1LCA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgCi0gICAgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgMTkzLCA3NywgNjUsIDczLCA5MCwgNjksIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCAKLSAgICA3NywgNzksIDc1LCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIAotICAgIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgCisgICAgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NywgNjksIDY5LCA4NCwgNjksIDIwMSwgNzcsIDY5LCAKKyAgICA2OSwgODQsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDc3LCAxMjgsIDc3LCA2OSwgNjksIAorICAgIDIwMiwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgNzcsIDEyOCwgNzcsIDY5LCA2OCwgCisgICAgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjksIDY4LCA3MywgNjcsIDY1LCAKKyAgICAyMDQsIDc3LCA2OSwgNjgsIDY1LCA3NiwgMTI4LCA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCAyMTIsIDc3LCAKKyAgICA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA2OSwgNjUsIAorICAgIDgzLCA4NSwgODIsIDE5NywgNzcsIDY4LCA4NSwgMjA2LCA3NywgMTk2LCA3NywgNjcsIDcyLCAyMTMsIDc3LCA2NywgNzIsIAorICAgIDY1LCAyMDYsIDc3LCAxOTUsIDc3LCA2NiwgODUsIDg1LCAxMjgsIDc3LCA2NiwgODUsIDc5LCA4MSwgMTI4LCA3NywgNjYsIAorICAgIDg1LCA3OSwgMTI4LCA3NywgNjYsIDg1LCA2OSwgMTI4LCA3NywgNjYsIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NiwgCisgICAgODUsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA3NywgNjYsIDc5LCAxMjgsIDc3LCA2NiwgNzMsIDg0LCAKKyAgICAxMjgsIDc3LCA2NiwgNzMsIDIxMiwgNzcsIDY2LCA3MywgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNzMsIAorICAgIDEyOCwgNzcsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NiwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgCisgICAgODUsIDc3LCAxMjgsIDc3LCA2NiwgNjksIDgyLCA2NSwgNjksIDEyOCwgNzcsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCAKKyAgICA2OSwgNjksIDc1LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgNjksIDY5LCAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIAorICAgIDY2LCA2NSwgODEsIDEyOCwgNzcsIDY2LCA2NSwgNzgsIDg5LCA3MywgMTI4LCA3NywgNjYsIDY1LCA2NSwgODIsIDY1LCA2OSwgCisgICAgMTI4LCA3NywgNjYsIDY1LCA2NSwgNzUsIDY5LCA4NCwgMTI4LCA3NywgNjYsIDY1LCA2NSwgMTI4LCA3NywgNjYsIDY1LCAKKyAgICAxOTMsIDc3LCA2NiwgMTkzLCA3NywgNjYsIDUyLCAxMjgsIDc3LCA2NiwgNTEsIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgCisgICAgNjUsIDg5LCA2OSwgMjAzLCA3NywgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDg5LCAxMjgsIDc3LCAKKyAgICA2NSwgODgsIDczLCA3NywgNzMsIDkwLCA2OSwgMTI4LCA3NywgNjUsIDg4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODgsIAorICAgIDEyOCwgNzcsIDY1LCA4NSwgMTI4LCA3NywgNjUsIDg0LCA4NCwgNzksIDY3LCA3NSwgMTI4LCA3NywgNjUsIDg0LCA4MiwgCisgICAgNzMsIDg4LCAxMjgsIDc3LCA2NSwgODQsIDY5LCA4MiwgNzMsIDY1LCA3NiwgODMsIDEyOCwgNzcsIDY1LCA4NCwgMTI4LCAKKyAgICA3NywgNjUsIDgzLCAyMTMsIDc3LCA2NSwgODMsIDgzLCA3MywgNzgsIDcxLCAxMjgsIDc3LCA2NSwgODMsIDgzLCA2NSwgNzEsIAorICAgIDY5LCAxMjgsIDc3LCA2NSwgODMsIDc5LCA4MiwgMTkzLCA3NywgNjUsIDgzLCA3NSwgMTI4LCA3NywgNjUsIDgzLCA3MiwgCisgICAgNzAsIDY1LCA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDUwLCAxMjgsIDc3LCA2NSwgODMsIDY3LCA4NSwgNzYsIDczLCAKKyAgICA3OCwgMTk3LCA3NywgNjUsIDgyLCA4OSwgMTI4LCA3NywgNjUsIDgyLCA4NywgNjUsIDgyLCAyMDEsIDc3LCA2NSwgODIsIAorICAgIDg1LCA3NSwgODUsIDEyOCwgNzcsIDY1LCA4MiwgODQsIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIDg5LCA3MywgCisgICAgNzgsIDE5OSwgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDIxMSwgNzcsIDY1LCAKKyAgICA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTEsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MCwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDQ5LCAxMjgsIDc3LCA2NSwgCisgICAgODIsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgNDUsIDgzLCAKKyAgICA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIAorICAgIDgyLCA2NywgNjUsIDgzLCA3MywgODQsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDY1LCAxMjgsIDc3LCA2NSwgCisgICAgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCA2NSwgNzAsIDEyOCwgNzcsIDY1LCAKKyAgICA4MSwgMTI4LCA3NywgNjUsIDgwLCA3NiwgMTk3LCA3NywgNjUsIDgwLCA3MywgODEsIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCAKKyAgICA2NSwgNzksIDEyOCwgNzcsIDY1LCA3OCwgODQsIDY5LCA3NiwgODAsIDczLCA2OSwgNjcsIDE5NywgNzcsIDY1LCA3OCwgODMsIAorICAgIDg5LCA3OSwgNzgsIDEyOCwgNzcsIDY1LCA3OCwgODMsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NywgNjUsIDc4LCA3MywgNjcsIDcyLCA2NSwgNjksIDY1LCAyMDYsIAorICAgIDc3LCA2NSwgNzgsIDcxLCA2NSwgNzYsIDY1LCA3NywgMTI4LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCA3NiwgNzMsIDc4LCAKKyAgICAxOTksIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDE5NSwgNzcsIDY1LCA3OCwgNjcsIDcyLCAyMTMsIDc3LCA2NSwgNzgsIAorICAgIDY1LCAyMTIsIDc3LCA2NSwgNzgsIDY1LCA2NywgNzYsIDY5LCA4MywgMTI4LCA3NywgNjUsIDc2LCA4NCwgNjksIDgzLCAKKyAgICAxOTcsIDc3LCA2NSwgNzYsIDY5LCA2OSwgODIsIDczLCAxMjgsIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDc3LCA2NSwgNzYsIAorICAgIDE5NywgNzcsIDY1LCA3NiwgNjUsIDc1LCA3OSwgMjA2LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCA2NSwgMTI4LCA3NywgCisgICAgNjUsIDc1LCA4MywgODUsIDgyLCAxOTMsIDc3LCA2NSwgNzMsIDkwLCA2OSwgMTI4LCA3NywgNjUsIDczLCA4OSwgNjUsIDc3LCAKKyAgICA3OSwgNzUsIDEyOCwgNzcsIDY1LCA3MywgODQsIDY1LCA3MywgNzUsIDcyLCA4NSwgMTI4LCA3NywgNjUsIDczLCA4MiwgODUsIAorICAgIDEyOCwgNzcsIDY1LCA3MywgNzcsIDg1LCA2NSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDY1LCA3NiwgNjUsIDczLCAKICAgICAxMjgsIDc3LCA2NSwgNzMsIDc2LCA2NiwgNzksIDIxNiwgNzcsIDY1LCA3MywgNzUsIDg1LCA4MiwgNzksIDEyOCwgNzcsIAogICAgIDY1LCA3MywgNjgsIDY5LCA3OCwgMTI4LCA3NywgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzIsIDc0LCA3OSwgNzgsIDE5OSwgCiAgICAgNzcsIDY1LCA3MiwgNzIsIDY1LCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCAKLSAgICA3MiwgNjUsIDgwLCA2NSwgNzUsIDcyLCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIAotICAgIDc3LCA2NSwgNzIsIDEyOCwgNzcsIDY1LCA3MSwgNzgsIDczLCA3MCwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDY5LCA4MywgCi0gICAgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDg5LCA3MywgMTI4LCA3NywgNjUsIDY5LCA3OCwgNzQsIDY5LCA4NCwgMTI4LCAKLSAgICA3NywgNjUsIDY5LCA3NywgODYsIDY5LCA4NSwgODgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDc1LCA4MCwgNjksIDc4LCAxMjgsIAotICAgIDc3LCA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDY2LCA3MSwgNjYsIDczLCAKLSAgICA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCA3NywgNjUsIDY5LCA3NywgMTI4LCA3NywgNjUsIAotICAgIDY5LCA3NiwgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc1LCA2OSwgODUsIDgwLCAxMjgsIDc3LCA2NSwgNjgsIDg5LCA2NSwgCi0gICAgMTI4LCA3NywgNjUsIDY4LCA4NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgNjUsIDIwMCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAKLSAgICAxMjgsIDc3LCA2NSwgNjgsIDY4LCAxOTMsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIAotICAgIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDY2LCA4MiwgNjksIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCi0gICAgNzksIDc4LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDY1LCAKLSAgICA2NywgODIsIDc5LCAyMDYsIDc3LCA2NSwgNjcsIDcyLCA3MywgNzgsIDY5LCAxMjgsIDc3LCA2NSwgNjUsIDg5LCA4OSwgNjUsIAotICAgIDY1LCAxMjgsIDc3LCA2NSwgNjUsIDczLCAxMjgsIDc3LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCA1MCwgMTI4LCA3NywgNDgsIAotICAgIDUyLCA1MiwgMTI4LCA3NywgNDgsIDUyLCA1MSwgMTI4LCA3NywgNDgsIDUyLCA1MCwgMTI4LCA3NywgNDgsIDUyLCA0OSwgCi0gICAgMTI4LCA3NywgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDEyOCwgNzcsIDQ4LCA1MSwgNTcsIDEyOCwgCi0gICAgNzcsIDQ4LCA1MSwgNTYsIDEyOCwgNzcsIDQ4LCA1MSwgNTUsIDEyOCwgNzcsIDQ4LCA1MSwgNTQsIDEyOCwgNzcsIDQ4LCAKLSAgICA1MSwgNTMsIDEyOCwgNzcsIDQ4LCA1MSwgNTIsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY2LCAxMjgsIDc3LCA0OCwgNTEsIAotICAgIDUxLCA2NSwgMTI4LCA3NywgNDgsIDUxLCA1MSwgMTI4LCA3NywgNDgsIDUxLCA1MCwgMTI4LCA3NywgNDgsIDUxLCA0OSwgCi0gICAgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIDEyOCwgNzcsIDQ4LCA1MSwgNDgsIDEyOCwgNzcsIDQ4LCA1MCwgNTcsIDEyOCwgCi0gICAgNzcsIDQ4LCA1MCwgNTYsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCAxMjgsIDc3LCA0OCwgNTAsIDU1LCAxMjgsIDc3LCAKLSAgICA0OCwgNTAsIDU0LCAxMjgsIDc3LCA0OCwgNTAsIDUzLCAxMjgsIDc3LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3NywgNDgsIAotICAgIDUwLCA1MiwgMTI4LCA3NywgNDgsIDUwLCA1MSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgCi0gICAgNTAsIDEyOCwgNzcsIDQ4LCA1MCwgNDksIDEyOCwgNzcsIDQ4LCA1MCwgNDgsIDEyOCwgNzcsIDQ4LCA0OSwgNTcsIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNTYsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU1LCAxMjgsIDc3LCAKLSAgICA0OCwgNDksIDU0LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NCwgMTI4LCA3NywgNDgsIDQ5LCA1MywgNjUsIDEyOCwgNzcsIAotICAgIDQ4LCA0OSwgNTMsIDEyOCwgNzcsIDQ4LCA0OSwgNTIsIDEyOCwgNzcsIDQ4LCA0OSwgNTEsIDEyOCwgNzcsIDQ4LCA0OSwgCisgICAgNzIsIDY1LCA4MCwgNjUsIDc1LCA3MiwgMTI4LCA3NywgNjUsIDcyLCA2NSwgNzQsIDY1LCA3OCwgMjAxLCA3NywgNjUsIDcyLCAKKyAgICA2NSwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCA3NywgNjUsIDcyLCAxMjgsIDc3LCA2NSwgNzEsIDc4LCA3MywgNzAsIAorICAgIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA2OSwgODMsIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA4OSwgNzMsIDEyOCwgCisgICAgNzcsIDY1LCA2OSwgNzgsIDc0LCA2OSwgODQsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDg2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCAKKyAgICA2NSwgNjksIDc3LCA3NSwgODAsIDY5LCA3OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIAorICAgIDc3LCA2NSwgNjksIDc3LCA2NiwgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgCisgICAgNzcsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY1LCA2OSwgNzYsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NSwgNjksIDg1LCAKKyAgICA4MCwgMTI4LCA3NywgNjUsIDY4LCA4OSwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgODUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIAorICAgIDY1LCAyMDAsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgMTkzLCA3NywgNjUsIDY3LCA4MiwgCisgICAgNzksIDc4LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NiwgODIsIAorICAgIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3NywgCisgICAgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgMjA2LCA3NywgNjUsIDY3LCA3MiwgNzMsIDc4LCAKKyAgICA2OSwgMTI4LCA3NywgNjUsIDY1LCA4OSwgODksIDY1LCA2NSwgMTI4LCA3NywgNjUsIDY1LCA3MywgMTI4LCA3NywgNjUsIAorICAgIDY1LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDQ5LCA1NywgMTgzLCA3NywgNDksIDU3LCAxODIsIDc3LCA0OSwgNTcsIAorICAgIDE4MSwgNzcsIDQ5LCA1NywgMTgwLCA3NywgNDksIDU3LCAxNzksIDc3LCA0OSwgNTcsIDE3OCwgNzcsIDQ5LCA1NywgMTc3LCAKKyAgICA3NywgNDksIDU3LCAxNzYsIDc3LCA0OSwgNTYsIDE4NSwgNzcsIDQ5LCA1NiwgMTg0LCA3NywgNDksIDU2LCAxODMsIDc3LCAKKyAgICA0OSwgNTYsIDE4MiwgNzcsIDQ5LCA1NiwgMTgxLCA3NywgNDksIDU2LCAxODAsIDc3LCA0OSwgNTYsIDE3OSwgNzcsIDQ5LCAKKyAgICA1NiwgMTc4LCA3NywgNDksIDU2LCAxNzcsIDc3LCA0OSwgNTYsIDE3NiwgNzcsIDQ5LCA1NSwgMTg1LCA3NywgNDksIDU1LCAKKyAgICAxODQsIDc3LCA0OSwgNTUsIDE4MywgNzcsIDQ5LCA1NSwgMTgyLCA3NywgNDksIDU1LCAxODEsIDc3LCA0OSwgNTUsIDE4MCwgCisgICAgNzcsIDQ5LCA1NSwgMTc5LCA3NywgNDksIDU1LCAxNzgsIDc3LCA0OSwgNTUsIDE3NywgNzcsIDQ5LCA1NSwgMTc2LCA3NywgCisgICAgNDksIDU0LCAxODUsIDc3LCA0OSwgNTQsIDE4NCwgNzcsIDQ5LCA1NCwgMTgzLCA3NywgNDksIDU0LCAxODIsIDc3LCA0OSwgCisgICAgNTQsIDE4MSwgNzcsIDQ5LCA1NCwgMTgwLCA3NywgNDksIDU0LCAxNzksIDc3LCA0OSwgNTQsIDE3OCwgNzcsIDQ5LCA1NCwgCisgICAgMTc3LCA3NywgNDksIDU0LCAxNzYsIDc3LCA0OSwgNTMsIDE4NSwgNzcsIDQ5LCA1MywgMTg0LCA3NywgNDksIDUzLCAxODMsIAorICAgIDc3LCA0OSwgNTMsIDE4MiwgNzcsIDQ5LCA1MywgMTgxLCA3NywgNDksIDUzLCAxODAsIDc3LCA0OSwgNTMsIDE3OSwgNzcsIAorICAgIDQ5LCA1MywgMTc4LCA3NywgNDksIDUzLCAxNzcsIDc3LCA0OSwgNTMsIDE3NiwgNzcsIDQ5LCA1MiwgMTg1LCA3NywgNDksIAorICAgIDUyLCAxODQsIDc3LCA0OSwgNTIsIDE4MywgNzcsIDQ5LCA1MiwgMTgyLCA3NywgNDksIDUyLCAxODEsIDc3LCA0OSwgNTIsIAorICAgIDE4MCwgNzcsIDQ5LCA1MiwgMTc5LCA3NywgNDksIDUyLCAxNzgsIDc3LCA0OSwgNTIsIDE3NywgNzcsIDQ5LCA1MiwgMTc2LCAKKyAgICA3NywgNDksIDUxLCAxODUsIDc3LCA0OSwgNTEsIDE4NCwgNzcsIDQ5LCA1MSwgMTgzLCA3NywgNDksIDUxLCAxODIsIDc3LCAKKyAgICA0OSwgNTEsIDE4MSwgNzcsIDQ5LCA1MSwgMTgwLCA3NywgNDksIDUxLCAxNzksIDc3LCA0OSwgNTEsIDE3OCwgNzcsIDQ5LCAKKyAgICA1MSwgMTc3LCA3NywgNDksIDUxLCAxNzYsIDc3LCA0OSwgNTAsIDE4NSwgNzcsIDQ5LCA1MCwgMTg0LCA3NywgNDksIDUwLCAKKyAgICAxODMsIDc3LCA0OSwgNTAsIDE4MiwgNzcsIDQ5LCA1MCwgMTgxLCA3NywgNDksIDUwLCAxODAsIDc3LCA0OSwgNTAsIDE3OSwgCisgICAgNzcsIDQ5LCA1MCwgMTc4LCA3NywgNDksIDUwLCAxNzcsIDc3LCA0OSwgNTAsIDE3NiwgNzcsIDQ5LCA0OSwgMTg1LCA3NywgCisgICAgNDksIDQ5LCAxODQsIDc3LCA0OSwgNDksIDE4MywgNzcsIDQ5LCA0OSwgMTgyLCA3NywgNDksIDQ5LCAxODEsIDc3LCA0OSwgCisgICAgNDksIDE4MCwgNzcsIDQ5LCA0OSwgMTc5LCA3NywgNDksIDQ5LCAxNzgsIDc3LCA0OSwgNDksIDE3NywgNzcsIDQ5LCA0OSwgCisgICAgMTc2LCA3NywgNDksIDQ4LCAxODUsIDc3LCA0OSwgNDgsIDE4NCwgNzcsIDQ5LCA0OCwgMTgzLCA3NywgNDksIDQ4LCAxODIsIAorICAgIDc3LCA0OSwgNDgsIDE4MSwgNzcsIDQ5LCA0OCwgMTgwLCA3NywgNDksIDQ4LCAxNzksIDc3LCA0OSwgNDgsIDE3OCwgNzcsIAorICAgIDQ5LCA0OCwgMTc3LCA3NywgNDksIDQ4LCAxNzYsIDc3LCA0OCwgNTcsIDE4NSwgNzcsIDQ4LCA1NywgMTg0LCA3NywgNDgsIAorICAgIDU3LCAxODMsIDc3LCA0OCwgNTcsIDE4MiwgNzcsIDQ4LCA1NywgMTgxLCA3NywgNDgsIDU3LCAxODAsIDc3LCA0OCwgNTcsIAorICAgIDE3OSwgNzcsIDQ4LCA1NywgMTc4LCA3NywgNDgsIDU3LCAxNzcsIDc3LCA0OCwgNTcsIDE3NiwgNzcsIDQ4LCA1NiwgMTg1LCAKKyAgICA3NywgNDgsIDU2LCAxODQsIDc3LCA0OCwgNTYsIDE4MywgNzcsIDQ4LCA1NiwgMTgyLCA3NywgNDgsIDU2LCAxODEsIDc3LCAKKyAgICA0OCwgNTYsIDE4MCwgNzcsIDQ4LCA1NiwgMTc5LCA3NywgNDgsIDU2LCAxNzgsIDc3LCA0OCwgNTYsIDE3NywgNzcsIDQ4LCAKKyAgICA1NiwgMTc2LCA3NywgNDgsIDU1LCAxODUsIDc3LCA0OCwgNTUsIDE4NCwgNzcsIDQ4LCA1NSwgMTgzLCA3NywgNDgsIDU1LCAKKyAgICAxODIsIDc3LCA0OCwgNTUsIDE4MSwgNzcsIDQ4LCA1NSwgMTgwLCA3NywgNDgsIDU1LCAxNzksIDc3LCA0OCwgNTUsIDE3OCwgCisgICAgNzcsIDQ4LCA1NSwgMTc3LCA3NywgNDgsIDU1LCAxNzYsIDc3LCA0OCwgNTQsIDE4NSwgNzcsIDQ4LCA1NCwgMTg0LCA3NywgCisgICAgNDgsIDU0LCAxODMsIDc3LCA0OCwgNTQsIDE4MiwgNzcsIDQ4LCA1NCwgMTgxLCA3NywgNDgsIDU0LCAxODAsIDc3LCA0OCwgCisgICAgNTQsIDE3OSwgNzcsIDQ4LCA1NCwgMTc4LCA3NywgNDgsIDU0LCAxNzcsIDc3LCA0OCwgNTQsIDE3NiwgNzcsIDQ4LCA1MywgCisgICAgMTg1LCA3NywgNDgsIDUzLCAxODQsIDc3LCA0OCwgNTMsIDE4MywgNzcsIDQ4LCA1MywgMTgyLCA3NywgNDgsIDUzLCAxODEsIAorICAgIDc3LCA0OCwgNTMsIDE4MCwgNzcsIDQ4LCA1MywgMTc5LCA3NywgNDgsIDUzLCAxNzgsIDc3LCA0OCwgNTMsIDE3NywgNzcsIAorICAgIDQ4LCA1MywgMTc2LCA3NywgNDgsIDUyLCAxODUsIDc3LCA0OCwgNTIsIDE4NCwgNzcsIDQ4LCA1MiwgMTgzLCA3NywgNDgsIAorICAgIDUyLCAxODIsIDc3LCA0OCwgNTIsIDE4MSwgNzcsIDQ4LCA1MiwgNTIsIDEyOCwgNzcsIDQ4LCA1MiwgMTgwLCA3NywgNDgsIAorICAgIDUyLCA1MSwgMTI4LCA3NywgNDgsIDUyLCAxNzksIDc3LCA0OCwgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDE3OCwgNzcsIAorICAgIDQ4LCA1MiwgNDksIDEyOCwgNzcsIDQ4LCA1MiwgMTc3LCA3NywgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA1MiwgCisgICAgNDgsIDEyOCwgNzcsIDQ4LCA1MiwgMTc2LCA3NywgNDgsIDUxLCA1NywgMTI4LCA3NywgNDgsIDUxLCAxODUsIDc3LCA0OCwgCisgICAgNTEsIDU2LCAxMjgsIDc3LCA0OCwgNTEsIDE4NCwgNzcsIDQ4LCA1MSwgNTUsIDEyOCwgNzcsIDQ4LCA1MSwgMTgzLCA3NywgCisgICAgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIDUxLCAxODIsIDc3LCA0OCwgNTEsIDUzLCAxMjgsIDc3LCA0OCwgNTEsIDE4MSwgCisgICAgNzcsIDQ4LCA1MSwgNTIsIDEyOCwgNzcsIDQ4LCA1MSwgMTgwLCA3NywgNDgsIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MSwgNTEsIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgNTEsIDE3OSwgNzcsIDQ4LCA1MSwgNTAsIAorICAgIDEyOCwgNzcsIDQ4LCA1MSwgMTc4LCA3NywgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIDEyOCwgNzcsIAorICAgIDQ4LCA1MSwgMTc3LCA3NywgNDgsIDUxLCA0OCwgMTI4LCA3NywgNDgsIDUxLCAxNzYsIDc3LCA0OCwgNTAsIDU3LCAxMjgsIAorICAgIDc3LCA0OCwgNTAsIDE4NSwgNzcsIDQ4LCA1MCwgNTYsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCAxMjgsIDc3LCA0OCwgCisgICAgNTAsIDE4NCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIDQ4LCA1MCwgMTgzLCA3NywgNDgsIDUwLCA1NCwgMTI4LCA3NywgCisgICAgNDgsIDUwLCAxODIsIDc3LCA0OCwgNTAsIDUzLCAxMjgsIDc3LCA0OCwgNTAsIDE4MSwgNzcsIDQ4LCA1MCwgNTIsIDY1LCAKKyAgICAxMjgsIDc3LCA0OCwgNTAsIDUyLCAxMjgsIDc3LCA0OCwgNTAsIDE4MCwgNzcsIDQ4LCA1MCwgNTEsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MCwgMTc5LCA3NywgNDgsIDUwLCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDEyOCwgNzcsIDQ4LCA1MCwgMTc4LCAKKyAgICA3NywgNDgsIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCAxNzcsIDc3LCA0OCwgNTAsIDQ4LCAxMjgsIDc3LCA0OCwgNTAsIAorICAgIDE3NiwgNzcsIDQ4LCA0OSwgNTcsIDEyOCwgNzcsIDQ4LCA0OSwgMTg1LCA3NywgNDgsIDQ5LCA1NiwgMTI4LCA3NywgNDgsIAorICAgIDQ5LCAxODQsIDc3LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgMTI4LCA3NywgNDgsIDQ5LCAxODMsIAorICAgIDc3LCA0OCwgNDksIDU0LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NCwgMTI4LCA3NywgNDgsIDQ5LCAxODIsIDc3LCA0OCwgCisgICAgNDksIDUzLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MywgMTI4LCA3NywgNDgsIDQ5LCAxODEsIDc3LCA0OCwgNDksIDUyLCAKKyAgICAxMjgsIDc3LCA0OCwgNDksIDE4MCwgNzcsIDQ4LCA0OSwgNTEsIDEyOCwgNzcsIDQ4LCA0OSwgMTc5LCA3NywgNDgsIDQ5LCAKICAgICA1MCwgNzIsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIAogICAgIDQ5LCA1MCwgNjksIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgCiAgICAgNDgsIDQ5LCA1MCwgNjYsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCAKLSAgICA0OCwgNDksIDQ5LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIAotICAgIDQ4LCA1NywgMTI4LCA3NywgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgCi0gICAgMTI4LCA3NywgNDgsIDQ4LCA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgCi0gICAgNzcsIDQ4LCA0OCwgNTEsIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCAKLSAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCAKLSAgICA4OSwgODgsIDEyOCwgNzYsIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCAKLSAgICA4OSwgODAsIDEyOCwgNzYsIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIAotICAgIDEyOCwgNzYsIDg3LCA3OSwgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIAotICAgIDczLCAxMjgsIDc2LCA4NywgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIAotICAgIDg4LCAxMjgsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3NiwgODUsIAotICAgIDgwLCAxMjgsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzksIDgwLCAxMjgsIAotICAgIDc2LCA4NSwgNzksIDEyOCwgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgCi0gICAgNzYsIDg1LCAyMDUsIDc2LCA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCA3MiwgODUsIDgyLCAKLSAgICAxMjgsIDc2LCA4NSwgNzIsIDEyOCwgNzYsIDg1LCA3MSwgNzEsIDY1LCA3MSwgNjksIDEyOCwgNzYsIDg1LCA3MSwgNjUsIAotICAgIDc2LCAxMjgsIDc2LCA4NSwgNzEsIDY1LCAyMDQsIDc2LCA4NSwgNjksIDEyOCwgNzYsIDg1LCA2NSwgNjksIDgwLCAxMjgsIAotICAgIDc2LCA4NSwgNTEsIDEyOCwgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDE3OCwgNzYsIDgyLCA3OSwgMTI4LCA3NiwgODIsIAotICAgIDc3LCAxMjgsIDc2LCA4MiwgNzMsIDEyOCwgNzYsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCA2OSwgCi0gICAgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCAxOTcsIDc2LCA3OSwgODgsIDEyOCwgNzYsIDc5LCA4NywgNjksIDgyLCAKLSAgICA2OSwgMTk2LCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3NiwgNzksIDg3LCA0NSwgMTg1LCA3NiwgNzksIDg2LCAxOTcsIDc2LCAKLSAgICA3OSwgODUsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDg1LCA2OCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgNzYsIAotICAgIDc5LCA4NSwgNjgsIDc2LCAyMTcsIDc2LCA3OSwgODQsIDg1LCA4MywgMTI4LCA3NiwgNzksIDg0LCAxMjgsIDc2LCA3OSwgCi0gICAgODIsIDgyLCA4OSwgMTI4LCA3NiwgNzksIDgyLCA4MiwgNjUsIDczLCA3OCwgNjksIDEyOCwgNzYsIDc5LCA4MSwgMTI4LCAKLSAgICA3NiwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDg0LCAxMjgsIDc2LCA3OSwgNzksIDgwLCA2OSwgMTk2LCA3NiwgNzksIAotICAgIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCAyMDgsIDc2LCA3OSwgNzksIDc4LCAxMjgsIDc2LCA3OSwgNzksIDIwMywgNzYsIAotICAgIDc5LCA3OSwgMTI4LCA3NiwgNzksIDc4LCA4MywgODUsIDc3LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgCi0gICAgNzksIDc4LCA3MSwgMTkzLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4OSwgODIsIAotICAgIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODMsIDc5LCAyMDQsIDc2LCA3OSwgCi0gICAgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc5LCA4MywgMjExLCA3NiwgNzksIDc4LCA3MSwgNDUsIAotICAgIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKLSAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgCi0gICAgNjUsIDc4LCA2NywgNzIsIDQ1LCA2NSwgMjEwLCA3NiwgNzksIDc3LCA3NywgNjUsIDY5LCAxMjgsIDc2LCA3OSwgNzcsIAotICAgIDEyOCwgNzYsIDc5LCAyMDUsIDc2LCA3OSwgNzYsIDc2LCA3MywgODAsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc2LCA3NiwgCi0gICAgMTI4LCA3NiwgNzksIDcxLCAyMTAsIDc2LCA3OSwgNzEsIDc5LCA4NCwgODksIDgwLCAxOTcsIDc2LCA3OSwgNzEsIDc5LCAKLSAgICA3MSwgODIsIDY1LCAyMDUsIDc2LCA3OSwgNzEsIDEyOCwgNzYsIDc5LCA2OCwgNjksIDgzLCA4NCwgNzksIDc4LCA2OSwgCi0gICAgMTI4LCA3NiwgNzksIDY3LCA3OSwgNzcsIDc5LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA3NSwgNzMsIDc4LCAKLSAgICA3MSwgNDUsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDc2LCA3OSwgNjcsIDIwMywgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgODYsIAotICAgIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc2LCA3OSwgNjUsIDEyOCwgNzYsIDc4LCAxMjgsIAotICAgIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA3NiwgNzksIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgCi0gICAgNzYsIDc2LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc2LCA3NiwgNzksIDEyOCwgNzYsIDc2LCAKLSAgICA3NiwgNzMsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDY5LCA2OSwgMTI4LCA3NiwgNzYsIAotICAgIDc2LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDczLCAxMjgsIDc2LCA3NiwgCi0gICAgNzYsIDY1LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCAxMjgsIDc2LCA3NCwgODUsIDY4LCAKLSAgICA3MywgNzQsIDY5LCAxMjgsIDc2LCA3NCwgNjksIDEyOCwgNzYsIDc0LCAxMjgsIDc2LCA3MywgODgsIDEyOCwgNzYsIDczLCAKLSAgICA4NywgNzgsIDEyOCwgNzYsIDczLCA4NiwgODIsIDE5NywgNzYsIDczLCA4NCwgODQsIDc2LCAxOTcsIDc2LCA3MywgODQsIAotICAgIDg0LCA2OSwgMjEwLCA3NiwgNzMsIDg0LCA4MiwgMTkzLCA3NiwgNzMsIDg0LCAxMjgsIDc2LCA3MywgODMsIDIxMywgNzYsIAotICAgIDczLCA4MiwgMTkzLCA3NiwgNzMsIDgxLCA4NSwgNzMsIDE5NiwgNzYsIDczLCA4MSwgMTI4LCA3NiwgNzMsIDgwLCA4MywgCi0gICAgODQsIDczLCA2NywgNzUsIDEyOCwgNzYsIDczLCA3OCwgNzUsIDczLCA3OCwgMTk5LCA3NiwgNzMsIDc4LCAyMDMsIDc2LCAKLSAgICA3MywgNzgsIDcxLCA4MywgNjUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDgzLCAxMjgsIDc2LCA3MywgNzgsIDY5LCAyMTEsIAotICAgIDc2LCA3MywgNzgsIDY5LCA0NSwgNTcsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgCi0gICAgNDUsIDUxLCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNDksIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCAKLSAgICA3NiwgNzMsIDc3LCA3NywgODUsIDUwLCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgCi0gICAgMjEzLCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAxOTYsIDc2LCA3MywgNzcsIDczLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDc2LCA3MywgNzcsIDczLCA4NCwgMTI4LCA3NiwgNzMsIDc3LCA2OSwgMTI4LCA3NiwgNzMsIDc3LCA2NiwgMjEzLCAKLSAgICA3NiwgNzMsIDc2LCA4OSwgMTI4LCA3NiwgNzMsIDc2LCA3MywgODQsIDcyLCAxMjgsIDc2LCA3MywgNzYsIDEyOCwgNzYsIAotICAgIDczLCA3MSwgNzIsIDg0LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDcyLCA3OSwgODUsIDgzLCAKLSAgICA2OSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIDczLCA3MCwgNjksIDEyOCwgNzYsIDczLCA2OSwgODgsIAotICAgIDEyOCwgNzYsIDczLCA2OSwgODQsIDEyOCwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzYsIDczLCA2OSwgNjksIDEyOCwgNzYsIAotICAgIDczLCA2OSwgMTI4LCA3NiwgNzMsIDY4LCAxMjgsIDc2LCA3MywgNjYsIDgyLCA2NSwgMTI4LCA3NiwgNzMsIDY2LCA2OSwgCi0gICAgODIsIDg0LCA4OSwgMTI4LCA3NiwgNzMsIDY1LCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzYsIDcyLCA3MywgNzMsIAotICAgIDEyOCwgNzYsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NiwgNzIsIDY1LCAxOTksIDc2LCA3MiwgCi0gICAgNjUsIDY1LCAxMjgsIDc2LCA3MiwgMTI4LCA3NiwgNjksIDkwLCA3MiwgMTI4LCA3NiwgNjksIDg4LCAxMjgsIDc2LCA2OSwgCi0gICAgODYsIDY5LCAyMDQsIDc2LCA2OSwgODUsIDc3LCAxMjgsIDc2LCA2OSwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzYsIDY5LCAKLSAgICA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NiwgNjksIDg1LCAxMjgsIDc2LCA2OSwgMjEzLCA3NiwgNjksIDg0LCA4NCwgNjksIAotICAgIDgyLCA4MywgMTI4LCA3NiwgNjksIDg0LCA4NCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgMjEyLCA3NiwgNjksIDgzLCA4MywgCi0gICAgNjksIDIxMCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCAKLSAgICA3MiwgNjUsIDIwNiwgNzYsIDY5LCA4MCwgMTI4LCA3NiwgNjksIDc5LCA4MCwgNjUsIDgyLCA2OCwgMTI4LCA3NiwgNjksIAotICAgIDc5LCAxMjgsIDc2LCA2OSwgNzgsIDg0LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzYsIDY5LCA3OCwgNzMsIDgzLCAKLSAgICAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgCi0gICAgMjAwLCA3NiwgNjksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDE5MywgNzYsIDY5LCA3NywgNzksIDc4LCAKLSAgICAxMjgsIDc2LCA2OSwgNzcsIDc5LCA3MywgMTI4LCA3NiwgNjksIDc2LCA2OSwgODQsIDEyOCwgNzYsIDY5LCA3NiwgNjksIAotICAgIDIxMiwgNzYsIDY5LCAyMDMsIDc2LCA2OSwgNzMsIDc3LCA3NywgNjUsIDEyOCwgNzYsIDY5LCA3MywgNzcsIDc3LCAxOTMsIAotICAgIDc2LCA2OSwgNzEsIDgzLCAxMjgsIDc2LCA2OSwgNzEsIDczLCA3OSwgNzgsIDEyOCwgNzYsIDY5LCA3MSwgNjksIDg0LCA3OSwgCi0gICAgMjExLCA3NiwgNjksIDcxLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgNzYsIDY5LCAKLSAgICA3MCwgODQsIDQ1LCA4NCwgNzksIDQ1LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA4NCwgCi0gICAgNjksIDIwNSwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDcyLCAKLSAgICA2NSwgNjgsIDY5LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNzYsIAotICAgIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCAKLSAgICAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCAxMjgsIAotICAgIDc2LCA2OSwgNjksIDgyLCA2NSwgNjksIDg3LCA2NSwgMTI4LCA3NiwgNjksIDY5LCA3NSwgMTI4LCA3NiwgNjksIDY5LCA2OSwgCi0gICAgNjksIDEyOCwgNzYsIDY5LCA2OCwgNzEsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCAKLSAgICA3NiwgNjksIDY1LCA3MCwgMTI4LCA3NiwgNjksIDY1LCAxOTgsIDc2LCA2OSwgNjUsIDY4LCA3MywgNzgsIDE5OSwgNzYsIAotICAgIDY5LCA2NSwgNjgsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCAxOTYsIDc2LCA2OCwgNjUsIDc4LCAxMjgsIDc2LCA2OCwgCi0gICAgNTAsIDEyOCwgNzYsIDY3LCAyMDEsIDc2LCA2NywgMTk3LCA3NiwgNjUsIDkwLCAyMTcsIDc2LCA2NSwgODksIDY1LCA3OCwgCi0gICAgNzgsIDY1LCAxMjgsIDc2LCA2NSwgODgsIDEyOCwgNzYsIDY1LCA4NywgMTI4LCA3NiwgNjUsIDIxNSwgNzYsIDY1LCA4NSwgCi0gICAgNzYsIDY1LCAxMjgsIDc2LCA2NSwgODUsIDc1LCA2NSwgMjE4LCA3NiwgNjUsIDg0LCA3MywgNzgsIDY1LCA4NCwgMTk3LCAKKyAgICA0OCwgNDksIDE3OCwgNzcsIDQ4LCA0OSwgNDksIDEyOCwgNzcsIDQ4LCA0OSwgMTc3LCA3NywgNDgsIDQ5LCA0OCwgNjUsIAorICAgIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDEyOCwgNzcsIDQ4LCA0OSwgMTc2LCA3NywgNDgsIDQ4LCA1NywgMTI4LCA3NywgNDgsIAorICAgIDQ4LCAxODUsIDc3LCA0OCwgNDgsIDU2LCAxMjgsIDc3LCA0OCwgNDgsIDE4NCwgNzcsIDQ4LCA0OCwgNTUsIDEyOCwgNzcsIAorICAgIDQ4LCA0OCwgMTgzLCA3NywgNDgsIDQ4LCA1NCwgMTI4LCA3NywgNDgsIDQ4LCAxODIsIDc3LCA0OCwgNDgsIDUzLCAxMjgsIAorICAgIDc3LCA0OCwgNDgsIDE4MSwgNzcsIDQ4LCA0OCwgNTIsIDEyOCwgNzcsIDQ4LCA0OCwgMTgwLCA3NywgNDgsIDQ4LCA1MSwgCisgICAgNjUsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIDEyOCwgNzcsIDQ4LCA0OCwgMTc5LCA3NywgNDgsIDQ4LCA1MCwgMTI4LCA3NywgCisgICAgNDgsIDQ4LCAxNzgsIDc3LCA0OCwgNDgsIDQ5LCA2NiwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzcsIDQ4LCAKKyAgICA0OCwgNDksIDEyOCwgNzcsIDQ4LCA0OCwgMTc3LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCA4OSwgODgsIDEyOCwgCisgICAgNzYsIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCA4OSwgODAsIDEyOCwgCisgICAgNzYsIDg5LCA3MywgODQsIDEyOCwgNzYsIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCAKKyAgICA3NiwgODgsIDEyOCwgNzYsIDg3LCA3OSwgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCAKKyAgICA3NiwgODcsIDczLCAxMjgsIDc2LCA4NywgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCAKKyAgICA3NiwgODUsIDg4LCAxMjgsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgMTI4LCAKKyAgICA3NiwgODUsIDgwLCAxMjgsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzksIAorICAgIDgwLCAxMjgsIDc2LCA4NSwgNzksIDEyOCwgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCA2NSwgCisgICAgODQsIDE5NywgNzYsIDg1LCAyMDUsIDc2LCA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCA3MiwgCisgICAgODUsIDgyLCAxMjgsIDc2LCA4NSwgNzIsIDEyOCwgNzYsIDg1LCAyMDAsIDc2LCA4NSwgNzEsIDcxLCA2NSwgNzEsIDY5LCAKKyAgICAxMjgsIDc2LCA4NSwgNzEsIDY1LCA3NiwgMTI4LCA3NiwgODUsIDcxLCA2NSwgMjA0LCA3NiwgODUsIDY5LCAxMjgsIDc2LCAKKyAgICA4NSwgMTk3LCA3NiwgODUsIDY2LCAxMjgsIDc2LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgODUsIDUxLCAxMjgsIDc2LCAKKyAgICA4NSwgNTAsIDEyOCwgNzYsIDg1LCAxNzgsIDc2LCA4MiwgNzksIDEyOCwgNzYsIDgyLCA3NywgMTI4LCA3NiwgODIsIDczLCAKKyAgICAxMjgsIDc2LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIAorICAgIDc4LCA3MSwgMTk3LCA3NiwgNzksIDg4LCAxMjgsIDc2LCA3OSwgODcsIDY5LCA4MiwgNjksIDE5NiwgNzYsIDc5LCA4NywgCisgICAgNjksIDIxMCwgNzYsIDc5LCA4NywgNDUsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgNDUsIDE4NSwgNzYsIDc5LCAKKyAgICA4NywgNDUsIDc3LCA3MywgMTk2LCA3NiwgNzksIDg3LCA0NSwgNzAsIDY1LCA3NiwgNzYsIDczLCA3OCwgMTk5LCA3NiwgNzksIAorICAgIDg3LCA0NSwgMTg1LCA3NiwgNzksIDg2LCAxOTcsIDc2LCA3OSwgODUsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDg1LCA2OCwgCisgICAgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgNzYsIDc5LCA4NSwgNjgsIDc2LCAyMTcsIDc2LCA3OSwgODQsIDg1LCAKKyAgICA4MywgMTI4LCA3NiwgNzksIDg0LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA4OSwgMTI4LCA3NiwgNzksIDgyLCA4MiwgNjUsIAorICAgIDczLCA3OCwgNjksIDEyOCwgNzYsIDc5LCA4MSwgMTI4LCA3NiwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDg0LCAxMjgsIAorICAgIDc2LCA3OSwgNzksIDgwLCA2OSwgMTk2LCA3NiwgNzksIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCAyMDgsIDc2LCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDc2LCA3OSwgNzksIDIwMywgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzksIDc4LCA4MywgODUsIDc3LCAKKyAgICAxMjgsIDc2LCA3OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNzksIDc4LCA3MSwgMTkzLCA3NiwgNzksIDc4LCA3MSwgNDUsIAorICAgIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4OSwgODIsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCAKKyAgICA3OCwgNjcsIDcyLCA0NSwgODMsIDc5LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgCisgICAgNDUsIDc5LCA4MywgMjExLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3NywgNjUsIAorICAgIDY4LCAyMTAsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDcyLCA2NSwgNzEsIDY1LCAKKyAgICA3NiwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA2NSwgMjEwLCA3NiwgNzksIAorICAgIDc3LCA3NywgNjUsIDY5LCAxMjgsIDc2LCA3OSwgNzcsIDEyOCwgNzYsIDc5LCAyMDUsIDc2LCA3OSwgNzYsIDc2LCA3MywgCisgICAgODAsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc2LCA3NiwgMTI4LCA3NiwgNzksIDcxLCAyMTAsIDc2LCA3OSwgNzEsIDc5LCAKKyAgICA4NCwgODksIDgwLCAxOTcsIDc2LCA3OSwgNzEsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDc2LCA3OSwgNzEsIDEyOCwgNzYsIAorICAgIDc5LCA2OCwgNjksIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA3OSwgNzcsIDc5LCA4NCwgNzMsIDg2LCAKKyAgICA2OSwgMTI4LCA3NiwgNzksIDY3LCA3NSwgNzMsIDc4LCA3MSwgNDUsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDc2LCA3OSwgNjcsIAorICAgIDIwMywgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgNDUsIDg3LCA2NSwgNzYsIDc2LCA4MCwgNzYsIDY1LCA3OCwgMTk3LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIAorICAgIDQ1LCA3MCwgNzYsIDc5LCA3OSwgODIsIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDc2LCA3OSwgNjUsIDEyOCwgNzYsIDc4LCAxMjgsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA3NiwgNzksIDc5LCAKKyAgICAxMjgsIDc2LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgNzksIAorICAgIDEyOCwgNzYsIDc2LCA3NiwgNzksIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDczLCAxMjgsIAorICAgIDc2LCA3NiwgNzYsIDY5LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgODUsIDEyOCwgCisgICAgNzYsIDc2LCA3NiwgNjUsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgMTI4LCAKKyAgICA3NiwgNzYsIDc2LCAxMjgsIDc2LCA3NCwgODUsIDY4LCA3MywgNzQsIDY5LCAxMjgsIDc2LCA3NCwgNjksIDEyOCwgNzYsIAorICAgIDc0LCAxMjgsIDc2LCA3MywgODgsIDEyOCwgNzYsIDczLCA4NywgNzgsIDEyOCwgNzYsIDczLCA4NiwgODIsIDE5NywgNzYsIAorICAgIDczLCA4NCwgODQsIDc2LCA2OSwgMTI4LCA3NiwgNzMsIDg0LCA4NCwgNzYsIDE5NywgNzYsIDczLCA4NCwgODQsIDY5LCAKKyAgICAyMTAsIDc2LCA3MywgODQsIDgyLCAxOTMsIDc2LCA3MywgODQsIDIwMCwgNzYsIDczLCA4MywgMjEzLCA3NiwgNzMsIDgzLCAKKyAgICAxMjgsIDc2LCA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIDc2LCA3MywgODEsIDEyOCwgNzYsIDczLCAKKyAgICA4MCwgODMsIDg0LCA3MywgNjcsIDc1LCAxMjgsIDc2LCA3MywgODAsIDIxMSwgNzYsIDczLCAyMDgsIDc2LCA3MywgNzgsIAorICAgIDc1LCA3MywgNzgsIDE5OSwgNzYsIDczLCA3OCwgNzUsIDY5LCAxOTYsIDc2LCA3MywgNzgsIDIwMywgNzYsIDczLCA3OCwgCisgICAgNzEsIDgzLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDczLCA3OCwgNjksIDIxMSwgNzYsIDczLCAKKyAgICA3OCwgNjksIDQ1LCA1NywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTEsIAorICAgIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDc2LCA3MywgCisgICAgNzcsIDc3LCA4NSwgNTAsIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDc2LCA3MywgNzcsIDc3LCAyMTMsIDc2LCAKKyAgICA3MywgNzcsIDczLCA4NCwgNjksIDE5NiwgNzYsIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzYsIAorICAgIDczLCA3NywgNzMsIDg0LCAxMjgsIDc2LCA3MywgNzcsIDY5LCAxMjgsIDc2LCA3MywgNzcsIDY2LCAyMTMsIDc2LCA3MywgCisgICAgNzcsIDY2LCAyMTEsIDc2LCA3MywgNzcsIDE5NCwgNzYsIDczLCA3NiwgODksIDEyOCwgNzYsIDczLCA3NiwgNzMsIDg0LCAKKyAgICA3MiwgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzYsIAorICAgIDczLCA3MSwgNzIsIDg0LCA3OCwgNzMsIDc4LCAxOTksIDc2LCA3MywgNzEsIDcyLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY5LCAKKyAgICAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgNzMsIDcxLCA2NSwgODQsIDczLCA3OCwgMTk5LCA3NiwgNzMsIAorICAgIDcwLCA4NCwgNjksIDgyLCAxMjgsIDc2LCA3MywgNzAsIDY5LCAxMjgsIDc2LCA3MywgNjksIDg4LCAxMjgsIDc2LCA3MywgCisgICAgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIDgwLCAxMjgsIDc2LCA3MywgNjksIDY5LCAxMjgsIDc2LCA3MywgNjksIDEyOCwgCisgICAgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIDY3LCA3NSwgNzMsIDc4LCAxOTksIDc2LCA3MywgNjYsIDgyLCA2NSwgMTI4LCAKKyAgICA3NiwgNzMsIDY2LCA2OSwgODIsIDg0LCA4OSwgMTI4LCA3NiwgNzMsIDY1LCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzYsIAorICAgIDcyLCA3MywgNzMsIDEyOCwgNzYsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NiwgNzIsIDY1LCAKKyAgICAxOTksIDc2LCA3MiwgNjUsIDY1LCAxMjgsIDc2LCA3MiwgMTI4LCA3NiwgNjksIDkwLCA3MiwgMTI4LCA3NiwgNjksIDg4LCAKKyAgICAxMjgsIDc2LCA2OSwgODYsIDczLCA4NCwgNjUsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDc2LCA2OSwgODUsIDc3LCAxMjgsIAorICAgIDc2LCA2OSwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NiwgNjksIDg1LCAKKyAgICAxMjgsIDc2LCA2OSwgMjEzLCA3NiwgNjksIDg0LCA4NCwgNjksIDgyLCA4MywgMTI4LCA3NiwgNjksIDg0LCA4NCwgNjksIAorICAgIDgyLCAxMjgsIDc2LCA2OSwgMjEyLCA3NiwgNjksIDgzLCA4MywgNjksIDIxMCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgCisgICAgNzIsIDY1LCA3OCwgMTI4LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDIwNiwgNzYsIDY5LCA4MCwgNjcsIDcyLCAKKyAgICAxOTMsIDc2LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA3OSwgODAsIDY1LCA4MiwgNjgsIDEyOCwgNzYsIDY5LCA3OSwgMTI4LCAKKyAgICA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc2LCA2OSwgNzgsIDczLCA4MywgMTI4LCA3NiwgNjksIAorICAgIDc4LCA3MywgMjExLCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA2OSwgNzgsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDc4LCA3MSwgCisgICAgODQsIDcyLCA0NSwgNTUsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNDUsIDU0LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAKKyAgICA4NCwgNzIsIDQ1LCA1MywgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA0NSwgNTIsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIAorICAgIDg0LCA3MiwgNDUsIDUxLCAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDQ1LCA1MCwgMTI4LCA3NiwgNjksIDc4LCA3MSwgCisgICAgODQsIDcyLCA0NSwgNDksIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAyMDAsIDc2LCA2OSwgNzgsIDcxLCA2NSwgMTI4LCAKKyAgICA3NiwgNjksIDc4LCA3MSwgMTkzLCA3NiwgNjksIDc3LCA3OSwgNzgsIDEyOCwgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIAorICAgIDc2LCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA3NiwgNjksIDc2LCA2OSwgMjEyLCA3NiwgNjksIDIwMywgNzYsIDY5LCA3MywgCisgICAgNzcsIDc3LCA2NSwgMTI4LCA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgNzYsIDY5LCA3MywgMTI4LCA3NiwgNjksIDcxLCAKKyAgICA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIDIxMSwgNzYsIAorICAgIDY5LCA3MSwgMTI4LCA3NiwgNjksIDE5OSwgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA3NiwgCisgICAgNjksIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgNzEsIDcyLCAyMTIsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIAorICAgIDg0LCA2OSwgMjA1LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgCisgICAgNzIsIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCAKKyAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MiwgCisgICAgNjUsIDc4LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCAKKyAgICA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCAxMjgsIDc2LCA2OSwgNjksIDgyLCA2NSwgNjksIAorICAgIDg3LCA2NSwgMTI4LCA3NiwgNjksIDY5LCA3NSwgMTI4LCA3NiwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzYsIDY5LCA2OCwgCisgICAgNzEsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCA3MCwgMTI4LCAKKyAgICA3NiwgNjksIDY1LCAxOTgsIDc2LCA2OSwgNjUsIDY4LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA2NSwgNjgsIDY5LCA4MiwgCisgICAgMTI4LCA3NiwgNjksIDY1LCAxOTYsIDc2LCA2OCwgNjUsIDc4LCAxMjgsIDc2LCA2OCwgNTAsIDEyOCwgNzYsIDY3LCAyMDEsIAorICAgIDc2LCA2NywgMTk3LCA3NiwgNjUsIDkwLCAyMTcsIDc2LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc2LCA2NSwgCisgICAgODgsIDEyOCwgNzYsIDY1LCA4NywgMTI4LCA3NiwgNjUsIDIxNSwgNzYsIDY1LCA4NSwgNzYsIDY1LCAxMjgsIDc2LCA2NSwgCisgICAgODUsIDc1LCA2NSwgMjE4LCA3NiwgNjUsIDg1LCA3NCwgMTI4LCA3NiwgNjUsIDg0LCA3MywgNzgsIDY1LCA4NCwgMTk3LCAKICAgICA3NiwgNjUsIDg0LCA3MywgNzUsIDEyOCwgNzYsIDY1LCA4NCwgNjksIDgyLCA2NSwgMjA0LCA3NiwgNjUsIDg0LCAxOTcsIAotICAgIDc2LCA2NSwgODMsIDIxMiwgNzYsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDc2LCA2NSwgODIsIDcxLCA2OSwgCi0gICAgMjEwLCA3NiwgNjUsIDgyLCA3MSwgNjksIDEyOCwgNzYsIDY1LCA4MiwgNzEsIDE5NywgNzYsIDY1LCA4MSwgMTI4LCA3NiwgCi0gICAgNjUsIDgwLCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgMTI4LCA3NiwgNjUsIDc4LCA4NCwgNjksIDgyLCA3OCwgMTI4LCAKLSAgICA3NiwgNjUsIDc4LCA3MSwgODUsIDY1LCA3MSwgMTk3LCA3NiwgNjUsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDY1LCA3NywgNjksIAotICAgIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgNjgsIDEyOCwgNzYsIDY1LCA3NywgNjksIDE5NiwgNzYsIDY1LCA3NywgCi0gICAgNjksIDEyOCwgNzYsIDY1LCA3NywgMTk3LCA3NiwgNjUsIDc3LCA2OCwgNjUsIDEyOCwgNzYsIDY1LCA3NywgNjgsIDEyOCwgCi0gICAgNzYsIDY1LCA3NywgNjYsIDY4LCAxOTMsIDc2LCA2NSwgNzcsIDY1LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NiwgMTI4LCAKLSAgICA3NiwgNjUsIDIwNCwgNzYsIDY1LCA3NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCA4OSwgNjUsIDc5LCAxMjgsIDc2LCA2NSwgNzQsIAotICAgIDY1LCA3OCwgODksIDY1LCA3NiwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgMjAxLCA3NiwgNjUsIDcyLCA4MywgNzIsIDg1LCAKLSAgICAxMjgsIDc2LCA2NSwgNzIsIDEyOCwgNzYsIDY1LCA3MSwgODUsIDgzLCAxMjgsIDc2LCA2NSwgNzEsIDIxMywgNzYsIDY1LCAKLSAgICA3MSwgNjUsIDgyLCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAyMTAsIDc2LCA2NSwgNzEsIDY1LCA2NiwgMTI4LCA3NiwgNjUsIAotICAgIDcxLCA2NSwgMTk0LCA3NiwgNjUsIDY5LCA4NiwgMTI4LCA3NiwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjgsIDIxNywgNzYsIAotICAgIDY1LCA2NywgNzUsIDEyOCwgNzYsIDY1LCA2NywgNjUsIDEyOCwgNzYsIDY1LCA2NiwgNzksIDg1LCA4MiwgNzMsIDc4LCA3MSwgCi0gICAgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODIsIDEyOCwgNzYsIDY1LCA2NiwgNzMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA3NiwgNjUsIDY2LCA3MywgNjUsIDIwNCwgNzYsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc2LCA2NSwgNjUsIAotICAgIDc4LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCA2NSwgNzcsIDg1LCAxMjgsIDc2LCA2NSwgCi0gICAgNjUsIDc3LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIDc2LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3NiwgNDgsIDQ4LCAKKyAgICA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA3NiwgNjUsIDgyLCAyMDEsIAorICAgIDc2LCA2NSwgODIsIDcxLCA2OSwgODMsIDg0LCAxMjgsIDc2LCA2NSwgODIsIDcxLCA2OSwgMjEwLCA3NiwgNjUsIDgyLCA3MSwgCisgICAgNjksIDEyOCwgNzYsIDY1LCA4MiwgNzEsIDE5NywgNzYsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCA2NSwgODEsIDEyOCwgCisgICAgNzYsIDY1LCAyMDcsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAKKyAgICAxOTcsIDc2LCA2NSwgNzgsIDY5LCA4MywgMTI4LCA3NiwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgNzcsIDgwLCAxMjgsIDc2LCAKKyAgICA2NSwgNzcsIDY5LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY5LCAxOTYsIAorICAgIDc2LCA2NSwgNzcsIDY5LCAxMjgsIDc2LCA2NSwgNzcsIDE5NywgNzYsIDY1LCA3NywgNjgsIDY1LCAxMjgsIDc2LCA2NSwgCisgICAgNzcsIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDc3LCA2NSwgNjgsIDcyLCAxMjgsIDc2LCAKKyAgICA2NSwgNzYsIDEyOCwgNzYsIDY1LCAyMDQsIDc2LCA2NSwgNzUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgODksIDY1LCA3OSwgCisgICAgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTUsIDUyLCA1NywgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTUsIDUwLCA1MiwgMTI4LCAKKyAgICA3NiwgNjUsIDc1LCA0NSwgNTQsIDU0LCA1NiwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTQsIDUyLCA1NiwgMTI4LCA3NiwgNjUsIAorICAgIDc1LCA0NSwgNTQsIDUyLCAxODQsIDc2LCA2NSwgNzUsIDQ1LCA1NCwgNTEsIDU0LCAxMjgsIDc2LCA2NSwgNzUsIDQ1LCA1NCwgCisgICAgNDksIDU1LCAxMjgsIDc2LCA2NSwgNzUsIDQ1LCA1NCwgNDksIDE4MywgNzYsIDY1LCA3NSwgNDUsIDU0LCA0OCwgNTYsIAorICAgIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDUzLCA1MywgNDgsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDUyLCA1NywgNTMsIDEyOCwgCisgICAgNzYsIDY1LCA3NSwgNDUsIDUyLCA1NywgNTEsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDUyLCA1NywgNTAsIDEyOCwgNzYsIDY1LCAKKyAgICA3NSwgNDUsIDUyLCA1NywgNDgsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDUyLCA1NiwgNTEsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIAorICAgIDUyLCA1NSwgNDgsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDUyLCA1MywgNTUsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDUyLCA1MywgCisgICAgNDgsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDUyLCA1MiwgNTcsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDUyLCA1MiwgMTg1LCAKKyAgICA3NiwgNjUsIDc1LCA0NSwgNTIsIDUyLCA0OSwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTEsIDU3LCA0OCwgMTI4LCA3NiwgNjUsIAorICAgIDc1LCA0NSwgNTEsIDU2LCA1MiwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTEsIDU2LCA1MSwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgCisgICAgNTEsIDUyLCA1NiwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTEsIDUyLCA1NSwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTEsIDUyLCAKKyAgICA1MSwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTAsIDU0LCA1NCwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTAsIDU0LCA1MywgCisgICAgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTAsIDUxLCA1NiwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTAsIDUwLCA1NiwgMTI4LCAKKyAgICA3NiwgNjUsIDc1LCA0NSwgNTAsIDUwLCA1MywgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTAsIDUwLCA0OCwgMTI4LCA3NiwgNjUsIAorICAgIDc1LCA0NSwgNTAsIDQ5LCA1NywgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNTAsIDQ5LCA0OCwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgCisgICAgNDksIDUyLCA1MCwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNDksIDUxLCA0OCwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNDgsIDU3LCAKKyAgICA1MCwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNDgsIDU2LCA0OSwgMTI4LCA3NiwgNjUsIDc1LCA0NSwgNDgsIDU2LCAxNzcsIAorICAgIDc2LCA2NSwgNzUsIDQ1LCA0OCwgNTYsIDQ4LCAxMjgsIDc2LCA2NSwgNzUsIDQ1LCA0OCwgNTUsIDE4NSwgNzYsIDY1LCA3NSwgCisgICAgNDUsIDQ4LCA1NCwgNTAsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDQ4LCA1MywgNDksIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDQ4LCAKKyAgICA1MywgNDgsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDQ4LCA1MSwgNDgsIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDQ4LCA1MCwgNTMsIAorICAgIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDQ4LCA1MCwgNDksIDEyOCwgNzYsIDY1LCA3NSwgNDUsIDQ4LCA1MCwgNDgsIDEyOCwgCisgICAgNzYsIDY1LCA3NSwgNDUsIDQ4LCA0OCwgNTEsIDEyOCwgNzYsIDY1LCA3NCwgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgNzgsIAorICAgIDEyOCwgNzYsIDY1LCA3MywgNzgsIDE5OSwgNzYsIDY1LCAyMDEsIDc2LCA2NSwgNzIsIDgzLCA3MiwgODUsIDEyOCwgNzYsIAorICAgIDY1LCA3MiwgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIDEyOCwgNzYsIDY1LCA3MSwgMjEzLCA3NiwgNjUsIDcxLCA2NSwgCisgICAgODIsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDIxMCwgNzYsIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAKKyAgICAxOTQsIDc2LCA2NSwgNjksIDg2LCAxMjgsIDc2LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2OCwgMjE3LCA3NiwgNjUsIDY3LCAKKyAgICA3NSwgMTI4LCA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIDcxLCAxMjgsIAorICAgIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDY2LCA3MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA3NiwgNjUsIDY2LCA2OSwgNzYsIDEyOCwgNzYsIDY1LCA2NiwgNjUsIAorICAgIDg0LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCA2NSwgCisgICAgNzcsIDg1LCAxMjgsIDc2LCA2NSwgNjUsIDc3LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIDc2LCA1NCwgMTI4LCA3NiwgCisgICAgNTIsIDEyOCwgNzYsIDUxLCAxMjgsIDc2LCA1MCwgMTI4LCA3NiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzYsIDQ4LCA0OCwgCiAgICAgNTAsIDY1LCAxMjgsIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCAKICAgICA3NSwgODksIDg1LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA4OSwgODUsIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIAogICAgIDc2LCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODksIDczLCAxMjgsIDc1LCA4OSwgNjksIDEyOCwgNzUsIDg5LCA2NSwgCkBAIC0yMjA3LDcyICsyNDY1LDgyIEBACiAgICAgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA4NywgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIDY1LCAKICAgICAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDczLCAKICAgICAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCAKLSAgICA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgNzksIAotICAgIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIDg3LCA3MywgMTI4LCA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODcsIAotICAgIDY5LCAxMjgsIDc1LCA4NywgNjUsIDg5LCAxMjgsIDc1LCA4NywgNjUsIDY5LCA4NCwgMTI4LCA3NSwgODcsIDY1LCA2NSwgCi0gICAgMTI4LCA3NSwgODYsIDY1LCAxMjgsIDc1LCA4NiwgMTI4LCA3NSwgODUsIDg4LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAxMjgsIAotICAgIDc1LCA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIDEyOCwgCi0gICAgNzUsIDg1LCA4MiwgODgsIDEyOCwgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgODUsIDgyLCAKLSAgICA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCA3NSwgODUsIDgyLCAxMjgsIDc1LCA4NSwgMjEwLCAKLSAgICA3NSwgODUsIDgxLCAxMjgsIDc1LCA4NSwgNzksIDg4LCAxMjgsIDc1LCA4NSwgNzksIDgwLCAxMjgsIDc1LCA4NSwgNzksIAotICAgIDIwOCwgNzUsIDg1LCA3OSwgNzcsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIAotICAgIDc4LCA2OCwgNjgsIDY1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgCi0gICAgODUsIDY5LCA4NCwgMTI4LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgNTIsIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgCi0gICAgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgMTI4LCA3NSwgODMsIDgzLCA4NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgCi0gICAgODUsIDEyOCwgNzUsIDgzLCA4MywgNzksIDc5LCAxMjgsIDc1LCA4MywgODMsIDc5LCAxMjgsIDc1LCA4MywgODMsIDczLCAKLSAgICA3MywgMTI4LCA3NSwgODMsIDgzLCA3MywgMTI4LCA3NSwgODMsIDgzLCA2OSwgNjksIDEyOCwgNzUsIDgzLCA4MywgNjksIAotICAgIDEyOCwgNzUsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDY1LCA3MywgMTI4LCA3NSwgODMsIDgzLCA2NSwgCi0gICAgNjUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDEyOCwgNzUsIDgzLCA4MywgMTI4LCA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgCi0gICAgNjksIDc3LCA2NSwgODMsIDg0LCA3MywgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIAotICAgIDgyLCA3OSwgNzksIDc4LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCAKLSAgICA3NywgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIAotICAgIDc3LCAxOTMsIDc1LCA4MCwgODUsIDEyOCwgNzUsIDgwLCA3OSwgODEsIDEyOCwgNzUsIDgwLCA3OSwgNzksIDEyOCwgNzUsIAotICAgIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA3NSwgODAsIDY5LCA2OSwgCi0gICAgMTI4LCA3NSwgODAsIDY5LCAxMjgsIDc1LCA4MCwgNjUsIDgyLCA2NSwgODEsIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgCi0gICAgNzUsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODYsIDg1LCA4NSwgMTI4LCA3NSwgNzksIDg0LCAKLSAgICA3OSwgMTI4LCA3NSwgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIAotICAgIDc1LCA3OSwgODIsIDY5LCA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAxOTUsIDc1LCA3OSwgODEsIDc4LCA2OCwgCi0gICAgNzksIDc4LCAxMjgsIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDgwLCAxMjgsIDc1LCA3OSwgNzksIDgwLCAKLSAgICA3OSwgMTI4LCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgMTI4LCA3NSwgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIAotICAgIDg0LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgMTkzLCA3NSwgNzksIDc3LCAKLSAgICAyMDEsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDE5MywgNzUsIAotICAgIDc5LCA3NywgNjYsIDIxMywgNzUsIDc5LCA3NSwgNzksIDEyOCwgNzUsIDc5LCA3NSwgMTI4LCA3NSwgNzksIDIwMywgNzUsIAotICAgIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgMTI4LCA3NSwgNzksIDcxLCA3MiwgNzksIDc3LCAxMjgsIAotICAgIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjUsIDc2LCA2NSwgMTI4LCA3NSwgNzksIDY1LCAxMjgsIDc1LCA3OCwgCi0gICAgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc1LCA3OCwgNzMsIDcwLCA2OSwgMTI4LCAKLSAgICA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgNzcsIDEyOCwgNzUsIDIwNSwgNzUsIDc2LCA3MywgODQsIDc5LCA3OCwgMTI4LCAKLSAgICA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgMTkzLCA3NSwgNzYsIDY1LCAxMjgsIAotICAgIDc1LCA3NiwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NSwgNzksIDEyOCwgNzUsIDc1LCA3MywgMTI4LCA3NSwgNzUsIAotICAgIDY5LCA2OSwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIDc1LCAxMjgsIDc1LCA3NCwgNjksIAotICAgIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzUsIDczLCA4OSwgCi0gICAgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3NSwgNzMsIAotICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgCi0gICAgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzUsIDczLCAKLSAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgCi0gICAgMjAzLCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDczLCA4MywgODMsIDczLCA3OCwgMTk5LCA3NSwgCi0gICAgNzMsIDgzLCA4MywgMTI4LCA3NSwgNzMsIDgzLCAyMTEsIDc1LCA3MywgODMsIDczLCA3NywgNTMsIDEyOCwgNzUsIDczLCAKLSAgICA4MywgNzMsIDc3LCAxODEsIDc1LCA3MywgODMsIDcyLCAxMjgsIDc1LCA3MywgODMsIDY1LCA3NiwgMTI4LCA3NSwgNzMsIAotICAgIDgyLCA3OSwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCAKLSAgICA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgCi0gICAgMTI4LCA3NSwgNzMsIDgyLCA3MSwgNzIsIDczLCAyMTgsIDc1LCA3MywgODEsIDEyOCwgNzUsIDczLCA4MCwgMTI4LCA3NSwgCi0gICAgNzMsIDIwOCwgNzUsIDczLCA3OCwgODMsIDcyLCA3MywgODAsIDEyOCwgNzUsIDczLCA3OCwgNjgsIDY5LCA4MiwgNzEsIDY1LCAKLSAgICA4MiwgODQsIDY5LCA3OCwgMTI4LCA3NSwgNzMsIDc3LCA3OSwgNzgsIDc5LCAxMjgsIDc1LCA3MywgNzMsIDEyOCwgNzUsIAotICAgIDczLCA3MiwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCA3NSwgNzMsIDY5LCA2OSwgCi0gICAgNzcsIDEyOCwgNzUsIDczLCA2OSwgMTI4LCA3NSwgNzMsIDY4LCAxMjgsIDc1LCA3MywgMTk2LCA3NSwgNzMsIDY3LCA3NSwgCi0gICAgMTI4LCA3NSwgNzIsIDkwLCAxMjgsIDc1LCA3MiwgODcsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDg1LCA2OSwgNzgsIDQ1LCAKLSAgICA3NiwgODUsIDE5NywgNzUsIDcyLCA4NSwgNjksIDIwNiwgNzUsIDcyLCA4NSwgNjgsIDY1LCA3NywgMTI4LCA3NSwgNzIsIAotICAgIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgODUsIDEyOCwgNzUsIDcyLCA3OSwgMjEyLCA3NSwgNzIsIDc5LCA3OCwgCi0gICAgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDEyOCwgNzUsIDcyLCAyMDcsIDc1LCA3MiwgCi0gICAgNzcsIDIxMywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCA3MywgNzgsIDg5LCA2NSwgMTI4LCA3NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIDcyLCA3MiwgNzksIDEyOCwgNzUsIDcyLCA3MiwgNjUsIAotICAgIDEyOCwgNzUsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDc1LCA3MiwgNjksIDczLCAxMjgsIDc1LCA3MiwgNjksIDY5LCAxMjgsIAotICAgIDc1LCA3MiwgNjksIDEyOCwgNzUsIDcyLCA2NSwgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCA3NSwgNzIsIDY1LCA4MiwgCisgICAgNjUsIDEyOCwgNzUsIDg3LCA4NiwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCA4NywgNzksIDc5LCAKKyAgICAxMjgsIDc1LCA4NywgNzksIDEyOCwgNzUsIDg3LCA3NywgMTI4LCA3NSwgODcsIDczLCA3MywgMTI4LCA3NSwgODcsIDczLCAKKyAgICAxMjgsIDc1LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4NywgNjksIDEyOCwgNzUsIDg3LCA2NiwgMTI4LCA3NSwgODcsIDY1LCAKKyAgICA4OSwgMTI4LCA3NSwgODcsIDY1LCA2OSwgODQsIDEyOCwgNzUsIDg3LCA2NSwgNjUsIDEyOCwgNzUsIDg2LCA2NSwgMTI4LCAKKyAgICA3NSwgODYsIDEyOCwgNzUsIDg1LCA4OCwgMTI4LCA3NSwgODUsIDg2LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAxMjgsIDc1LCAKKyAgICA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIDEyOCwgNzUsIAorICAgIDg1LCA4MywgNzIsIDg1LCAxNzgsIDc1LCA4NSwgODIsIDg4LCAxMjgsIDc1LCA4NSwgODIsIDg1LCA5MCwgNjksIDczLCA4MiwgCisgICAgNzksIDEyOCwgNzUsIDg1LCA4MiwgODQsIDEyOCwgNzUsIDg1LCA4MiwgNzksIDc5LCA3OCwgNjksIDEyOCwgNzUsIDg1LCAKKyAgICA4MiwgMTI4LCA3NSwgODUsIDIxMCwgNzUsIDg1LCA4MSwgMTI4LCA3NSwgODUsIDc5LCA4OCwgMTI4LCA3NSwgODUsIDc5LCAKKyAgICA4MCwgMTI4LCA3NSwgODUsIDc5LCAyMDgsIDc1LCA4NSwgNzksIDc3LCAxMjgsIDc1LCA4NSwgNzksIDEyOCwgNzUsIDg1LCAKKyAgICA3OCwgNzEsIDEyOCwgNzUsIDg1LCA3OCwgNjgsIDY4LCA2NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgNzUsIDg1LCA3NiwgCisgICAgMTI4LCA3NSwgODUsIDIwNCwgNzUsIDg1LCA3MSwgMTI4LCA3NSwgODUsIDY5LCA4NCwgMTI4LCA3NSwgODUsIDY2LCAxMjgsIAorICAgIDc1LCA4NSwgNjUsIDg2LCAxMjgsIDc1LCA4NSwgNjUsIDY2LCAxMjgsIDc1LCA4NSwgNjUsIDEyOCwgNzUsIDg1LCA1NSwgCisgICAgMTI4LCA3NSwgODUsIDUyLCAxMjgsIDc1LCA4NSwgMTgwLCA3NSwgODUsIDUxLCAxMjgsIDc1LCA4NSwgMTc5LCA3NSwgODQsIAorICAgIDEyOCwgNzUsIDgzLCA4MywgODUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDg1LCAxMjgsIDc1LCA4MywgODMsIDc5LCA3OSwgCisgICAgMTI4LCA3NSwgODMsIDgzLCA3OSwgMTI4LCA3NSwgODMsIDgzLCA3MywgNzMsIDEyOCwgNzUsIDgzLCA4MywgNzMsIDEyOCwgCisgICAgNzUsIDgzLCA4MywgNjksIDY5LCAxMjgsIDc1LCA4MywgODMsIDY5LCAxMjgsIDc1LCA4MywgODMsIDY1LCA4NSwgMTI4LCAKKyAgICA3NSwgODMsIDgzLCA2NSwgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDY1LCAxMjgsIDc1LCA4MywgODMsIDY1LCAxMjgsIAorICAgIDc1LCA4MywgODMsIDEyOCwgNzUsIDgzLCA3MywgMTI4LCA3NSwgODIsIDY5LCA3NywgNjUsIDgzLCA4NCwgNzMsIDEyOCwgCisgICAgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDg5LCA4MCwgNzksIDgyLCA4MiwgNzksIDc5LCA3OCwgMTI4LCA3NSwgODIsIAorICAgIDY1LCA4NCwgNzMsIDc3LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCAKKyAgICA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgMTkzLCA3NSwgODAsIDg1LCAxMjgsIAorICAgIDc1LCA4MCwgNzksIDgxLCAxMjgsIDc1LCA4MCwgNzksIDc5LCAxMjgsIDc1LCA4MCwgNzksIDEyOCwgNzUsIDgwLCA3MywgCisgICAgMTI4LCA3NSwgODAsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDgwLCA2OSwgNjksIDEyOCwgNzUsIDgwLCA2OSwgMTI4LCA3NSwgCisgICAgODAsIDY1LCA4MiwgNjUsIDgxLCAxMjgsIDc1LCA4MCwgNjUsIDc4LCAxMjgsIDc1LCA4MCwgNjUsIDcyLCAxMjgsIDc1LCAKKyAgICA4MCwgNjUsIDEyOCwgNzUsIDc5LCA4OCwgMTI4LCA3NSwgNzksIDg2LCA4NSwgODUsIDEyOCwgNzUsIDc5LCA4NiwgMTI4LCAKKyAgICA3NSwgNzksIDg0LCA3OSwgMTI4LCA3NSwgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgODIsIDc5LCA3OCwgNzMsIAorICAgIDgzLCAxMjgsIDc1LCA3OSwgODIsIDY5LCA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAxOTUsIDc1LCA3OSwgCisgICAgODEsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDgwLCAxMjgsIDc1LCAKKyAgICA3OSwgNzksIDg2LCAxMjgsIDc1LCA3OSwgNzksIDgwLCA3OSwgMTI4LCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgCisgICAgMTI4LCA3NSwgNzksIDc5LCA2NiwgMTI4LCA3NSwgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCAKKyAgICA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgMTkzLCA3NSwgNzksIDc3LCAyMDEsIDc1LCA3OSwgNzcsIAorICAgIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDE5MywgNzUsIDc5LCA3NywgNjYsIDIxMywgCisgICAgNzUsIDc5LCA3NSwgNzksIDEyOCwgNzUsIDc5LCA3NSwgNjksIDEyOCwgNzUsIDc5LCA3NSwgMTI4LCA3NSwgNzksIDIwMywgCisgICAgNzUsIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgMTI4LCA3NSwgNzksIDcxLCA3MiwgNzksIDc3LCAKKyAgICAxMjgsIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjYsIDEyOCwgNzUsIDc5LCA2NSwgNzYsIDY1LCAxMjgsIDc1LCAKKyAgICA3OSwgNjUsIDEyOCwgNzUsIDc4LCA4NSwgNjcsIDc1LCA3NiwgNjksIDgzLCAxMjgsIDc1LCA3OCwgODUsIDY3LCA3NSwgNzYsIAorICAgIDY5LCAxMjgsIDc1LCA3OCwgNzksIDY2LCA4MywgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc1LCA3OCwgCisgICAgNzMsIDcxLCA3MiwgMjEyLCA3NSwgNzgsIDczLCA3MCwgNjksIDEyOCwgNzUsIDc4LCA3MywgNzAsIDE5NywgNzUsIDc3LCAKKyAgICAxMjgsIDc1LCAyMDUsIDc1LCA3NiwgNzMsIDg0LCA3OSwgNzgsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCAKKyAgICA3NSwgNzYsIDY1LCA4MywgNzcsIDE5MywgNzUsIDc2LCA2NSwgMTI4LCA3NSwgNzYsIDEyOCwgNzUsIDc1LCA4NSwgMTI4LCAKKyAgICA3NSwgNzUsIDc5LCAxMjgsIDc1LCA3NSwgNzMsIDEyOCwgNzUsIDc1LCA2OSwgNjksIDEyOCwgNzUsIDc1LCA2OSwgMTI4LCAKKyAgICA3NSwgNzUsIDY1LCAxMjgsIDc1LCA3NSwgMTI4LCA3NSwgNzQsIDY5LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCAKKyAgICA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgyLCA3MywgCisgICAgNjksIDg1LCA3NiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA2NywgNzIsIAorICAgIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDIwMywgNzUsIDczLCA4OCwgMTI4LCA3NSwgCisgICAgNzMsIDg3LCAxMjgsIDc1LCA3MywgODYsIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCA4MywgNzMsIDc4LCAKKyAgICAxOTksIDc1LCA3MywgODMsIDgzLCAxMjgsIDc1LCA3MywgODMsIDIxMSwgNzUsIDczLCA4MywgNzMsIDc3LCA1MywgMTI4LCAKKyAgICA3NSwgNzMsIDgzLCA3MywgNzcsIDE4MSwgNzUsIDczLCA4MywgNzIsIDEyOCwgNzUsIDczLCA4MywgNjUsIDc2LCAxMjgsIAorICAgIDc1LCA3MywgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzksIDc3LCA2OSwgNjksIDg0LCAKKyAgICA3OSwgODIsIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIDc1LCA3MywgODIsIAorICAgIDc5LCAxMjgsIDc1LCA3MywgODIsIDcxLCA3MiwgNzMsIDIxOCwgNzUsIDczLCA4MSwgMTI4LCA3NSwgNzMsIDgwLCAxMjgsIAorICAgIDc1LCA3MywgMjA4LCA3NSwgNzMsIDc4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NSwgNzMsIDc4LCA2OCwgNjksIDgyLCA3MSwgCisgICAgNjUsIDgyLCA4NCwgNjksIDc4LCAxMjgsIDc1LCA3MywgNzcsIDc5LCA3OCwgNzksIDEyOCwgNzUsIDczLCA3NiwgNzYsIDY5LCAKKyAgICA4MiwgMTI4LCA3NSwgNzMsIDczLCAxMjgsIDc1LCA3MywgNzIsIDEyOCwgNzUsIDczLCA2OSwgODgsIDEyOCwgNzUsIDczLCAKKyAgICA2OSwgODYsIDY1LCAyMDYsIDc1LCA3MywgNjksIDgwLCAxMjgsIDc1LCA3MywgNjksIDY5LCA3NywgMTI4LCA3NSwgNzMsIAorICAgIDY5LCAxMjgsIDc1LCA3MywgNjgsIDEyOCwgNzUsIDczLCAxOTYsIDc1LCA3MywgNjcsIDc1LCAxMjgsIDc1LCA3MywgNjYsIAorICAgIDEyOCwgNzUsIDczLCA2NSwgODYsIDEyOCwgNzUsIDczLCA2NSwgNjYsIDEyOCwgNzUsIDcyLCA5MCwgMTI4LCA3NSwgNzIsIAorICAgIDg3LCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA4NSwgNjksIDc4LCA0NSwgNzYsIDg1LCAxOTcsIDc1LCA3MiwgODUsIDY5LCAKKyAgICAyMDYsIDc1LCA3MiwgODUsIDY4LCA2NSwgODcsIDY1LCA2OCwgMjAxLCA3NSwgNzIsIDg1LCA2OCwgNjUsIDc3LCAxMjgsIAorICAgIDc1LCA3MiwgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIDc5LCAyMTIsIDc1LCA3MiwgCisgICAgNzksIDc4LCAxMjgsIDc1LCA3MiwgNzksIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgNzQsIDc1LCAyMDEsIDc1LCAKKyAgICA3MiwgNzksIDEyOCwgNzUsIDcyLCAyMDcsIDc1LCA3MiwgNzcsIDIxMywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCAKKyAgICA3MywgNzgsIDg5LCA2NSwgMTI4LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIAorICAgIDcyLCAyMDEsIDc1LCA3MiwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgNzIsIDY1LCAxMjgsIDc1LCA3MiwgNjksIDg0LCA3MiwgCisgICAgMTI4LCA3NSwgNzIsIDY5LCA3MywgMTI4LCA3NSwgNzIsIDY5LCA2OSwgMTI4LCA3NSwgNzIsIDY5LCAxMjgsIDc1LCA3MiwgCisgICAgNjUsIDg2LCAxMjgsIDc1LCA3MiwgNjUsIDgyLCA3OSwgODMsIDcyLCA4NCwgNzIsIDIwMSwgNzUsIDcyLCA2NSwgODIsIAogICAgIDEyOCwgNzUsIDcyLCA2NSwgODAsIDcyLCAxMjgsIDc1LCA3MiwgNjUsIDc4LCAxOTksIDc1LCA3MiwgNjUsIDc4LCA2OCwgCiAgICAgMTkzLCA3NSwgNzIsIDY1LCA3OCwgMTI4LCA3NSwgNzIsIDY1LCA3NywgODQsIDIwMSwgNzUsIDcyLCA2NSwgNzUsIDY1LCAKICAgICA4MywgODMsIDczLCA2NSwgMjA2LCA3NSwgNzIsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDY1LCA3MiwgMTI4LCA3NSwgNzIsIAotICAgIDY1LCAyMDAsIDc1LCA3MiwgNjUsIDY1LCAxMjgsIDc1LCA3MSwgMTI4LCA3NSwgNjksIDg5LCA2NywgNjUsIDgwLCAxMjgsIAotICAgIDc1LCA2OSwgODksIDY3LCA2NSwgMjA4LCA3NSwgNjksIDg5LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzUsIDY5LCA4OCwgCisgICAgNjUsIDIwMCwgNzUsIDcyLCA2NSwgNjYsIDEyOCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgCisgICAgODksIDY3LCA2NSwgODAsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIDY1LCAyMDgsIDc1LCA2OSwgODksIDY2LCA3OSwgNjUsIDgyLCAKKyAgICA2OCwgMTI4LCA3NSwgNjksIDg5LCA2NiwgNzksIDY1LCA4MiwgMTk2LCA3NSwgNjksIDg4LCAxMjgsIDc1LCA2OSwgODYsIAogICAgIDEyOCwgNzUsIDY5LCA4NSwgODksIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgCiAgICAgODAsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODAsIDg1LCA4MSwgMTI4LCAKICAgICA3NSwgNjksIDg1LCA3OSwgMjEyLCA3NSwgNjksIDg1LCA3NywgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjksIDg1LCA4NCwgNzgsIApAQCAtMjI4NSwxNTYwICsyNTUzLDE2MjYgQEAKICAgICA2OSwgNzcsIDgwLCA3NiwgNzMsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCAyMDEsIDc1LCA2OSwgNzcsIDgwLCA3MiwgODIsIAogICAgIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NywgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NiwgODYsIDczLCAKICAgICAyMDYsIDc1LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA3NSwgNjksIDcyLCAxMjgsIDc1LCAKLSAgICA2OSwgNzAsIDg1LCA3NiwgNjUsIDEyOCwgNzUsIDY5LCA2OSwgODMsIDg1LCAxMjgsIDc1LCA2OSwgNjksIDgwLCA3MywgNzgsIAotICAgIDE5OSwgNzUsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2NywgNjUsIDc2LCAxMjgsIDc1LCA2NiwgMTI4LCA3NSwgNjUsIAotICAgIDkwLCA2NSwgNzUsIDIwMCwgNzUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4OSwgNjUsIDIwMCwgCi0gICAgNzUsIDY1LCA4OCwgMTI4LCA3NSwgNjUsIDg3LCA3MywgMTI4LCA3NSwgNjUsIDg2LCA4OSwgNzUsIDY1LCAxMjgsIDc1LCAKLSAgICA2NSwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgODUsIDEyOCwgNzUsIDY1LCA4NCwgNzksIAotICAgIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCA4MywgODQsIDczLCAxMjgsIDc1LCA2NSwgODQsIDcyLCA2NSwgNzUsIDE5MywgCi0gICAgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCA2NSwgODYsIDE5MywgNzUsIDY1LCAKLSAgICA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgNzgsIDE5MywgNzUsIDY1LCA4MywgCi0gICAgODIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAyMDYsIDc1LCA2NSwgODMsIDgyLCAKLSAgICA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgMTkzLCA3NSwgNjUsIDgzLCA3NSwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODMsIAotICAgIDc1LCA2NSwgMjA0LCA3NSwgNjUsIDgzLCA3MiwgNzcsIDczLCA4MiwgMjAxLCA3NSwgNjUsIDgyLCA4MywgNzIsIDY1LCA3OCwgCi0gICAgNjUsIDEyOCwgNzUsIDY1LCA4MiwgNzksIDgyLCA3MywgNzMsIDEyOCwgNzUsIDY1LCA4MiwgMjA3LCA3NSwgNjUsIDgyLCAKLSAgICA2OSwgMjA2LCA3NSwgNjUsIDgyLCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDgyLCA2NSwgNzgsIDEyOCwgNzUsIAotICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKLSAgICA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgCi0gICAgNjksIDc5LCA4NSwgNzgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIAotICAgIDg1LCA3OCwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2NSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDgwLCA4MCwgCi0gICAgMTkzLCA3NSwgNjUsIDgwLCA3OSwgMTI4LCA3NSwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgNzYsIDEyOCwgCi0gICAgNzUsIDY1LCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA3NSwgNjUsIDc4LCA3MSwgMTI4LCAKLSAgICA3NSwgNjUsIDc4LCAxOTksIDc1LCA2NSwgNzgsIDY1LCA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NywgNTIsIDEyOCwgNzUsIAotICAgIDY1LCA3NywgNTAsIDEyOCwgNzUsIDY1LCA3NywgMTI4LCA3NSwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc1LCA2NSwgCi0gICAgNjYsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDc1LCAxMjgsIDc1LCA2NSwgMjAzLCA3NSwgNjUsIDczLCA4NCwgNzIsIDIwMSwgCi0gICAgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAyMDEsIDc1LCA2NSwgNzAsIDY1LCAKLSAgICAxMjgsIDc1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCAxOTgsIDc1LCA2NSwgNjgsIDUzLCAxMjgsIDc1LCA2NSwgNjgsIDE4MSwgCi0gICAgNzUsIDY1LCA2OCwgNTIsIDEyOCwgNzUsIDY1LCA2OCwgNTEsIDEyOCwgNzUsIDY1LCA2OCwgMTc5LCA3NSwgNjUsIDY4LCAKLSAgICA1MCwgMTI4LCA3NSwgNjUsIDY4LCAxMjgsIDc1LCA2NSwgNjYsIDE5MywgNzUsIDY1LCA2NiwgMTI4LCA3NSwgNjUsIDY1LCAKLSAgICA3MywgMTI4LCA3NSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCA1MCwgMTI4LCAKLSAgICA3NSwgNjUsIDE3OCwgNzUsIDQ4LCA0OCwgNTYsIDEyOCwgNzUsIDQ4LCA0OCwgNTUsIDEyOCwgNzUsIDQ4LCA0OCwgNTQsIAotICAgIDEyOCwgNzUsIDQ4LCA0OCwgNTMsIDEyOCwgNzUsIDQ4LCA0OCwgNTIsIDEyOCwgNzUsIDQ4LCA0OCwgNTEsIDEyOCwgNzUsIAotICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzUsIDQ4LCA0OCwgNDksIDEyOCwgNzQsIDg3LCA2NSwgMTI4LCA3NCwgODUsIDg1LCAxMjgsIAotICAgIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MywgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgNzQsIDg1LCA3OSwgODQsIDEyOCwgNzQsIDg1LCA3OSwgODAsIAotICAgIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCA3OCwgNjksIDEyOCwgNzQsIDg1LCA3NiwgODksIDEyOCwgNzQsIAotICAgIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIDg1LCA3NiwgMTI4LCA3NCwgODUsIDY4LCA3MSwgNjksIDEyOCwgCi0gICAgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCA3NCwgNzksIDg5LCA3OSwgODUsIAotICAgIDIxMSwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgNzksIDg2LCA2OSwgMTI4LCA3NCwgNzksIDIxMiwgNzQsIDc5LCA3OCwgNzEsIAotICAgIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NCwgNzksIDc1LCA2OSwgODIsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDY5LCA2OCwgCi0gICAgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgODksIDg4LCAxMjgsIDc0LCA3NCwgCi0gICAgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgNzQsIDc0LCA4NSwgODgsIDEyOCwgCi0gICAgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDgyLCAxMjgsIDc0LCAKLSAgICA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgNzQsIAotICAgIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDc5LCA4NCwgCi0gICAgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgNzMsIDg4LCAxMjgsIDc0LCA3NCwgCi0gICAgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3NCwgNzQsIDczLCAKLSAgICA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAxMjgsIDc0LCA3NCwgNzMsIAotICAgIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIDY1LCAxMjgsIDc0LCA3MywgNzYsIAotICAgIDEyOCwgNzQsIDczLCA3MywgMTI4LCA3NCwgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgCi0gICAgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MiwgNjksIDcyLCAxMjgsIDc0LCA3MiwgNjUsIDc4LCAKLSAgICAxMjgsIDc0LCA3MiwgNjUsIDc3LCAxMjgsIDc0LCA3MiwgNjUsIDY1LCAxMjgsIDc0LCA3MiwgNjUsIDEyOCwgNzQsIDY5LCAKLSAgICA4NSwgMTI4LCA3NCwgNjksIDgyLCA4NSwgODMsIDY1LCA3NiwgNjksIDc3LCAxMjgsIDc0LCA2OSwgODIsIDY1LCAyMDYsIAotICAgIDc0LCA2OSwgODIsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDEyOCwgNzQsIDY5LCA3MiwgMTI4LCA3NCwgNjksIDIwMCwgNzQsIAotICAgIDY5LCA3MSwgNzksIDcxLCA2NSwgNzgsIDEyOCwgNzQsIDY5LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA2NSwgNzgsIDgzLCAKLSAgICAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCi0gICAgMTI4LCA3NCwgNjUsIDg1LCAxMjgsIDc0LCA2NSwgODIsIDEyOCwgNzQsIDY1LCA4MCwgNjUsIDc4LCA2OSwgODMsIDE5NywgCi0gICAgNzQsIDY1LCA4MCwgNjUsIDc4LCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDc0LCA2NSwgNzYsIDc2LCAKLSAgICA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIDY1LCA3MywgMTI4LCA3NCwgNjUsIAotICAgIDcyLCAxMjgsIDc0LCA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2NSwgNjcsIDc1LCA0NSwgNzksIDQ1LCA3NiwgNjUsIDc4LCA4NCwgCi0gICAgNjksIDgyLCA3OCwgMTI4LCA3NCwgNjUsIDY3LCAyMDMsIDc0LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCAKLSAgICA2OSwgMTk2LCAyMDIsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIAotICAgIDE5MywgNzMsIDkwLCA3MiwgNjksIDEyOCwgNzMsIDkwLCA2NSwgNzUsIDY1LCA4OSwgMTkzLCA3MywgODksIDY5LCA3NSwgCi0gICAgMTI4LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIDczLCA4NSwgMTI4LCA3MywgCi0gICAgODQsIDIxMSwgNzMsIDg0LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA4NCwgNjksIDc3LCAxMjgsIDczLCAKLSAgICA4MywgODMsIDcyLCA2NSwgODIsIDEyOCwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIDgzLCA3OSwgMjA2LCA3MywgODMsIAotICAgIDc5LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgODMsIDY5LCA3OCwgNDUsIDczLCA4MywgNjksIDc4LCAxMjgsIDczLCA4MywgCi0gICAgNjUsIDc1LCA3MywgMTkzLCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA3OSwgNzgsIAotICAgIDQ1LCA2NywgNzksIDgwLCA4MCwgNjksIDIxMCwgNzMsIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc5LCA4NCwgNzMsIDcwLCA3MywgCi0gICAgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA3MywgNzksIDg0LCAKLSAgICAxOTMsIDczLCA3OSwgODIsIDEyOCwgNzMsIDc5LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNzMsIDc4LCA4NiwgNzMsIAotICAgIDgzLCA3MywgNjYsIDc2LCAxOTcsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgNzgsIDg2LCA2OSwgCi0gICAgODIsIDg0LCA2OSwgMTk2LCA3MywgNzgsIDg2LCA2OSwgODIsIDgzLCAxOTcsIDczLCA3OCwgODQsIDgyLCA3OSwgNjgsIDg1LCAKLSAgICA2NywgNjksIDgyLCAxMjgsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIAotICAgIDY1LCA2NiwgNzMsIDE5NSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgCi0gICAgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIAotICAgIDY3LCA4NCwgNzMsIDc4LCAxOTksIDczLCA3OCwgODQsIDY5LCA4MiwgODIsIDc5LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3MywgCi0gICAgNzgsIDg0LCA2OSwgODIsIDgwLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIAotICAgIDc5LCA2NywgNzUsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDczLCA3OCwgCi0gICAgODQsIDY5LCA4MiwgNzYsIDY1LCA2NywgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3MywgNzksIDIxMCwgNzMsIDc4LCAKLSAgICA4NCwgNjksIDgyLCA2OSwgODMsIDIxMiwgNzMsIDc4LCA4NCwgNjksIDgyLCA2NywgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIAotICAgIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCAKLSAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgNzYsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAotICAgIDcxLCA4MiwgNjUsIDIwNCwgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCA3MywgNzgsIDgzLCA4NCwgODIsIDg1LCA3NywgCi0gICAgNjksIDc4LCA4NCwgNjUsIDIwNCwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgMTI4LCA3MywgNzgsIDgzLCA2OSwgODIsIDg0LCAKLSAgICA3MywgNzksIDIwNiwgNzMsIDc4LCA4MywgNjksIDY3LCA4NCwgMTI4LCA3MywgNzgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIAotICAgIDczLCA3OSwgNzgsIDY1LCAyMDQsIDczLCA3OCwgODAsIDg1LCAyMTIsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDc4LCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDgyLCAxMjgsIDczLCA3OCwgNzgsIDY5LCAKLSAgICAyMTAsIDczLCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIDczLCAxMjgsIDczLCAKLSAgICA3OCwgNzIsIDczLCA2NiwgNzMsIDIxMiwgNzMsIDc4LCA3MiwgNjksIDgyLCA2OSwgNzgsIDIxMiwgNzMsIDc4LCA3MSwgODcsIAotICAgIDY1LCA5MCwgMTI4LCA3MywgNzgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDcwLCA3NiwgCi0gICAgODUsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA3MywgNzgsIDcwLCAKLSAgICA3MywgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDY4LCA4NSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3OCwgNjgsIAotICAgIDczLCA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzMsIDc4LCA2OCwgCi0gICAgNzMsIDY3LCA2NSwgODQsIDc5LCAyMTAsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDczLCA2NSwgMjA2LCAKLSAgICA3MywgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIAotICAgIDc4LCA2NywgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgCi0gICAgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIAotICAgIDE5NywgNzMsIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAKLSAgICAxOTksIDczLCA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNjYsIDc5LCAyMTYsIDczLCA3OCwgNjUsIDgwLCAxMjgsIDczLCAKLSAgICA3OCwgNDUsIDY1LCA3NiwgNjUsIDcwLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3NywgODAsIAotICAgIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAKLSAgICAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3OCwgMTI4LCA3MywgNzcsIAotICAgIDczLCA4MywgNjksIDc5LCAyMTEsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCA3MywgNzcsIDczLCA3OCwgMTI4LCA3MywgCi0gICAgNzcsIDczLCAyMDYsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCAKLSAgICA4NCwgNzIsIDc5LCA4MiwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIAotICAgIDY4LCA3MywgNjUsIDgyLCA3MSwgNzksIDc4LCAxMjgsIDczLCA3NywgNjUsIDcxLCAxOTcsIDczLCA3NiwgODUsIDg5LCA2NSwgCi0gICAgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzYsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDczLCA3NiwgODUsIDg0LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDczLCA3NiwgNzMsIAotICAgIDc3LCA3NywgODUsIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAKLSAgICAyMTMsIDczLCA3NiwgNTAsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCAKLSAgICA3NCwgMTI4LCA3MywgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzEsIDczLCAxMjgsIDczLCA3MSwgMjAxLCAKLSAgICA3MywgNzEsIDcxLCA4NywgODMsIDEyOCwgNzMsIDcwLCA3MywgNzgsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIAotICAgIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKLSAgICA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgCi0gICAgNzUsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDczLCA2OSwgODUsIDc4LCAKLSAgICA3MSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgCi0gICAgODUsIDgwLCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgCi0gICAgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIAotICAgIDY3LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgMTk5LCA3MywgNjgsIDc2LCA2OSwgMTI4LCA3MywgNjgsIDczLCA3NywgCi0gICAgMTI4LCA3MywgNjgsIDczLCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTcsIDQ4LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU2LCA2OCwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjcsIDY1LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2OCwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTUsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU1LCA1NCwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDUxLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA0OSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDgsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTQsIDcwLCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA2OSwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDUwLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTQsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTQsIDUzLCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA1MywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDUzLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA1MywgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTQsIDUwLCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA1MCwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNzAsIDU2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY4LCA2OSwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUzLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTYsIDcwLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUzLCA2NiwgNTQsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDUxLCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUzLCA1MSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDY4LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1NSwgNTAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDQ5LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUyLCA2OSwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDU2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1MCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCi0gICAgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTcsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCi0gICAgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgCi0gICAgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTUsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjksIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTMsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjcsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTEsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjUsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDksIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTYsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNzAsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTQsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTIsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjYsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTAsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTcsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTUsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjksIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTMsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjcsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTEsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjUsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDksIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTYsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNzAsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTQsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTIsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjYsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgCi0gICAgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTAsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTcsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTUsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjksIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTMsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjcsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTEsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjUsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDksIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTYsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNzAsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTQsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTIsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjYsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTAsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTcsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDgsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTUsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjksIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTMsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjcsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTEsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjUsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDksIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTYsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNzAsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCAKLSAgICA3MCwgNTYsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgCi0gICAgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTQsIAotICAgIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCAKLSAgICA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjcsIDcyLCA3OSwgODUsIAotICAgIDEyOCwgNzMsIDY3LCA3MiwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCA3OSwgODMsIDEyOCwgCi0gICAgNzMsIDY3LCA3MiwgNjUsIDY4LCA3MywgNzgsIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIDczLCA2NywgNDUsIAotICAgIDg5LCA4MiwgMTI4LCA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgCi0gICAgNzMsIDQ4LCA0OSwgNTMsIDEyOCwgNzMsIDQ4LCA0OSwgNTIsIDEyOCwgNzMsIDQ4LCA0OSwgNTEsIDEyOCwgNzMsIDQ4LCAKLSAgICA0OSwgNTAsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ5LCAxMjgsIDczLCA0OCwgNDksIAotICAgIDQ4LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgMTI4LCA3MywgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgCi0gICAgNTcsIDEyOCwgNzMsIDQ4LCA0OCwgNTYsIDEyOCwgNzMsIDQ4LCA0OCwgNTUsIDEyOCwgNzMsIDQ4LCA0OCwgNTQsIDEyOCwgCi0gICAgNzMsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAxMjgsIDczLCA0OCwgNDgsIDUyLCAxMjgsIDczLCAKLSAgICA0OCwgNDgsIDUxLCAxMjgsIDczLCA0OCwgNDgsIDUwLCAxMjgsIDczLCA0OCwgNDgsIDQ5LCAxMjgsIDczLCA0NSwgODksIAotICAgIDg1LCAxMjgsIDczLCA0NSwgODksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgCi0gICAgMTI4LCA3MywgNDUsIDg5LCA2NSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDg5LCAKLSAgICA2NSwgMTI4LCA3MywgNDUsIDc5LCA0NSwgNzMsIDEyOCwgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDY5LCA4NSwgMTI4LCAKLSAgICA3MywgNDUsIDY2LCA2OSwgNjUsIDc3LCAxMjgsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDczLCA0NSwgNjUsIAotICAgIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgOTAsIDgwLCAxMjgsIAotICAgIDcyLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA4NywgNzEsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgOTAsIDg0LCAxMjgsIAotICAgIDcyLCA5MCwgNzEsIDEyOCwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgNjksIDgzLCA3MywgMjExLCA3MiwgODksIDgwLCA3OSwgCi0gICAgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzIsIDg5LCA4MCwgCi0gICAgNzIsIDY5LCA3OCwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDIwNiwgNzIsIDg4LCA4NywgNzEsIDEyOCwgNzIsIDg4LCAKLSAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODAsIDEyOCwgNzIsIAotICAgIDg4LCA4NSwgNzksIDEyOCwgNzIsIDg4LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA3OSwgCi0gICAgODAsIDEyOCwgNzIsIDg4LCA3OSwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIDczLCA4NCwgMTI4LCA3MiwgCi0gICAgODgsIDczLCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg0LCAxMjgsIDcyLCAKLSAgICA4OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCA3MiwgODgsIDczLCAxMjgsIDcyLCA4OCwgNjksIAotICAgIDg4LCAxMjgsIDcyLCA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCA2NSwgODgsIDEyOCwgNzIsIAotICAgIDg4LCA2NSwgODQsIDEyOCwgNzIsIDg4LCA2NSwgODAsIDEyOCwgNzIsIDg4LCA2NSwgMTI4LCA3MiwgODcsIDg1LCAxMjgsIAotICAgIDcyLCA4NywgNjUsIDczLCA4MiwgMTI4LCA3MiwgODYsIDEyOCwgNzIsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcyLCA4NSwgCi0gICAgODIsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCAKLSAgICA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCAxOTYsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIAotICAgIDcyLCA4NSwgNzcsIDY1LCAyMDYsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCA4NSwgNzMsIDczLCA4NCwgNzksIDEyOCwgCi0gICAgNzIsIDg1LCA2NiwgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCA4NSwgNjUsIDgyLCAKLSAgICA2NSwgNjgsIDY4LCA3OSwgMTI4LCA3MiwgODQsIDgzLCAxMjgsIDcyLCA4NCwgNzQsIDEyOCwgNzIsIDgyLCA4OSwgODYsIAotICAgIDc4LCA3MywgMTkzLCA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODAsIDY1LCAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIAotICAgIDg1LCA4MywgMTk3LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgCi0gICAgNzYsIDY1LCA4MywgMjExLCA3MiwgNzksIDg1LCA4MiwgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCAKLSAgICA3NiwgMTI4LCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgzLCA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgODMsIDY5LCAxMjgsIDcyLCA3OSwgODIsIDgzLCAxOTcsIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgCi0gICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAotICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAotICAgIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNTQsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTQsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAotICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCAKLSAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgCi0gICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAotICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAotICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAotICAgIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNTEsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIAotICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKLSAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCi0gICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAotICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAotICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAotICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNDksIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNDksIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIAotICAgIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCAKLSAgICA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgCi0gICAgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgMTkzLCA3MiwgNzksIDc5LCA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgODAsIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgCisgICAgNjksIDcwLCA4NSwgNzYsIDY1LCAxMjgsIDc1LCA2OSwgNjksIDg2LCAxMjgsIDc1LCA2OSwgNjksIDgzLCA4NSwgMTI4LCAKKyAgICA3NSwgNjksIDY5LCA4MCwgNzMsIDc4LCAxOTksIDc1LCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDY5LCA2NiwgCisgICAgMTI4LCA3NSwgNjksIDY2LCAxMjgsIDc1LCA2OSwgNjUsIDY1LCA2OSwgMTI4LCA3NSwgNjcsIDY1LCA3NiwgMTI4LCA3NSwgCisgICAgNjYsIDEyOCwgNzUsIDY1LCA5MCwgNjUsIDc1LCAyMDAsIDc1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc1LCAKKyAgICA2NSwgODksIDY1LCAyMDAsIDc1LCA2NSwgODgsIDEyOCwgNzUsIDY1LCA4NywgODYsIDEyOCwgNzUsIDY1LCA4NywgNzMsIAorICAgIDEyOCwgNzUsIDY1LCA4NywgNjYsIDEyOCwgNzUsIDY1LCA4NiwgODksIDc1LCA2NSwgMTI4LCA3NSwgNjUsIDg2LCAxMjgsIAorICAgIDc1LCA2NSwgODUsIDg2LCAxMjgsIDc1LCA2NSwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgCisgICAgODUsIDY2LCAxMjgsIDc1LCA2NSwgODQsIDc5LCAxMjgsIDc1LCA2NSwgODQsIDcyLCA3MywgODMsIDg0LCA3MywgMTI4LCAKKyAgICA3NSwgNjUsIDg0LCA3MiwgNjUsIDc1LCAxOTMsIDc1LCA2NSwgODQsIDY1LCA4NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIAorICAgIDY1LCA4NCwgNjUsIDg2LCAxOTMsIDc1LCA2NSwgODQsIDY1LCA3NSwgNjUsIDc4LCA2NSwgNDUsIDcyLCA3MywgODIsIDY1LCAKKyAgICA3MSwgNjUsIDc4LCAxOTMsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgNjUsIAorICAgIDg0LCA2NSwgMjA2LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDEyOCwgNzUsIDY1LCA4MywgODIsIDE5MywgNzUsIDY1LCA4MywgCisgICAgNzUsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgzLCA3NSwgNjUsIDIwNCwgNzUsIDY1LCA4MywgNzIsIDc3LCA3MywgODIsIAorICAgIDIwMSwgNzUsIDY1LCA4MiwgODMsIDcyLCA2NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODIsIDc5LCA4MiwgNzMsIDczLCAKKyAgICAxMjgsIDc1LCA2NSwgODIsIDIwNywgNzUsIDY1LCA4MiwgNjksIDIwNiwgNzUsIDY1LCA4MiwgNjUsIDg0LCA4NCwgNzksIAorICAgIDEyOCwgNzUsIDY1LCA4MiwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODMsIDgzLCA2NSwgCisgICAgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MiwgNzMsIAorICAgIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKKyAgICA3MiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3NSwgNjUsIAorICAgIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDE5MywgNzUsIDY1LCA4MCwgNzksIDEyOCwgNzUsIDY1LCA4MCwgCisgICAgNzIsIDEyOCwgNzUsIDY1LCA4MCwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODAsIDY1LCAxMjgsIDc1LCA2NSwgMjA4LCA3NSwgCisgICAgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIDc1LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2NSwgNzgsIDE5OSwgNzUsIDY1LCAKKyAgICA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc3LCA1MiwgMTI4LCA3NSwgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIAorICAgIDc3LCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgCisgICAgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCA2NSwgNzMsIDg2LCAxMjgsIDc1LCA2NSwgNzMsIDg0LCA3MiwgMjAxLCA3NSwgCisgICAgNjUsIDczLCA4MiwgNzMsIDEyOCwgNzUsIDY1LCA3MywgNjYsIDEyOCwgNzUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIDIwMSwgCisgICAgNzUsIDY1LCA3MCwgNjUsIDEyOCwgNzUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDE5OCwgNzUsIDY1LCA2OCwgNTMsIDEyOCwgCisgICAgNzUsIDY1LCA2OCwgMTgxLCA3NSwgNjUsIDY4LCA1MiwgMTI4LCA3NSwgNjUsIDY4LCA1MSwgMTI4LCA3NSwgNjUsIDY4LCAKKyAgICAxNzksIDc1LCA2NSwgNjgsIDUwLCAxMjgsIDc1LCA2NSwgNjgsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIDY2LCAKKyAgICAxMjgsIDc1LCA2NSwgNjUsIDg2LCAxMjgsIDc1LCA2NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCAKKyAgICA3NSwgNjUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDY1LCA2NiwgNjUsIDEyOCwgNzUsIDY1LCA2NSwgNjYsIDEyOCwgNzUsIAorICAgIDY1LCA1MCwgMTI4LCA3NSwgNjUsIDE3OCwgNzUsIDQ4LCA0OCwgNTYsIDEyOCwgNzUsIDQ4LCA0OCwgNTUsIDEyOCwgNzUsIAorICAgIDQ4LCA0OCwgNTQsIDEyOCwgNzUsIDQ4LCA0OCwgNTMsIDEyOCwgNzUsIDQ4LCA0OCwgNTIsIDEyOCwgNzUsIDQ4LCA0OCwgCisgICAgNTEsIDEyOCwgNzUsIDQ4LCA0OCwgNTAsIDEyOCwgNzUsIDQ4LCA0OCwgNDksIDEyOCwgNzQsIDg3LCA2NSwgMTI4LCA3NCwgCisgICAgODUsIDg1LCAxMjgsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MywgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgNzQsIDg1LCA3OSwgODQsIDEyOCwgNzQsIAorICAgIDg1LCA3OSwgODAsIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCA3OCwgNjksIDEyOCwgNzQsIDg1LCA3NiwgCisgICAgODksIDEyOCwgNzQsIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIDg1LCA3NiwgMTI4LCA3NCwgODUsIDY4LCAKKyAgICA3MSwgNjksIDEyOCwgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCA3NCwgNzksIAorICAgIDg5LCA4MywgODQsIDczLCA2NywgNzUsIDEyOCwgNzQsIDc5LCA4OSwgNzksIDg1LCAyMTEsIDc0LCA3OSwgODksIDEyOCwgCisgICAgNzQsIDc5LCA4NiwgNjksIDEyOCwgNzQsIDc5LCAyMTIsIDc0LCA3OSwgNzgsIDcxLCAxMjgsIDc0LCA3OSwgNzgsIDE5MywgCisgICAgNzQsIDc5LCA3NSwgNjksIDgyLCAxMjgsIDc0LCA3OSwgNzMsIDc4LCA4NCwgODMsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDY5LCAKKyAgICA2OCwgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgODksIDg4LCAxMjgsIDc0LCAKKyAgICA3NCwgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgNzQsIDc0LCA4NSwgODgsIAorICAgIDEyOCwgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDgyLCAxMjgsIAorICAgIDc0LCA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgCisgICAgNzQsIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIDc5LCAKKyAgICA4NCwgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgNzMsIDg4LCAxMjgsIDc0LCAKKyAgICA3NCwgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3NCwgNzQsIAorICAgIDczLCA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAxMjgsIDc0LCA3NCwgCisgICAgNzMsIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIDY1LCAxMjgsIDc0LCA3MywgCisgICAgNzYsIDEyOCwgNzQsIDczLCA3MywgMTI4LCA3NCwgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgNzYsIDczLCA4OSwgNjUsIAorICAgIDEyOCwgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCA4OCwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MiwgNjksIAorICAgIDcyLCAxMjgsIDc0LCA3MiwgNjUsIDg5LCA3MywgNzgsIDEyOCwgNzQsIDcyLCA2NSwgNzgsIDEyOCwgNzQsIDcyLCA2NSwgCisgICAgNzcsIDEyOCwgNzQsIDcyLCA2NSwgNjUsIDEyOCwgNzQsIDcyLCA2NSwgMTI4LCA3NCwgNjksIDg1LCAxMjgsIDc0LCA2OSwgCisgICAgODIsIDg1LCA4MywgNjUsIDc2LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA4MiwgNjUsIDIwNiwgNzQsIDY5LCA4MiwgNjUsIAorICAgIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCA3NCwgNjksIDcyLCAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgNjksIDcxLCA3OSwgNzEsIAorICAgIDY1LCA3OCwgMTI4LCA3NCwgNjksIDY5LCA3NywgMTI4LCA3NCwgNjksIDY1LCA3OCwgODMsIDEyOCwgNzQsIDY1LCA4OSwgCisgICAgNzgsIDEyOCwgNzQsIDY1LCA4OSwgNzMsIDc4LCAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCAKKyAgICA2NSwgODcsIDEyOCwgNzQsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc0LCA2NSwgODUsIDEyOCwgNzQsIAorICAgIDY1LCA4MiwgMTI4LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDY5LCA4MywgMTk3LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDEyOCwgCisgICAgNzQsIDY1LCA3OCwgODUsIDY1LCA4MiwgODksIDEyOCwgNzQsIDY1LCA3NiwgNzYsIDY1LCA3NCwgNjUsIDc2LCA2NSwgNzYsIAorICAgIDc5LCA4NSwgNzIsIDc5LCA4NSwgMTI4LCA3NCwgNjUsIDczLCAyMDYsIDc0LCA2NSwgNzMsIDEyOCwgNzQsIDY1LCA3MiwgCisgICAgMTI4LCA3NCwgNjUsIDY4LCA2OSwgMTI4LCA3NCwgNjUsIDY3LCA3NSwgODMsIDEyOCwgNzQsIDY1LCA2NywgNzUsIDQ1LCAKKyAgICA3OSwgNDUsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc0LCA2NSwgNjcsIDIwMywgNzQsIDQ1LCA4MywgNzMsIAorICAgIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIDczLCA5MCwgCisgICAgNzIsIDczLCA4NCwgODMsIDE5MywgNzMsIDkwLCA3MiwgNjksIDEyOCwgNzMsIDkwLCA2NSwgNzUsIDY1LCA4OSwgMTkzLCAKKyAgICA3MywgODksIDY5LCA3NSwgMTI4LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIAorICAgIDczLCA4NCwgMjExLCA3MywgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDg0LCA2OSwgNzcsIDEyOCwgCisgICAgNzMsIDgzLCA4MywgNzIsIDY1LCA4MiwgMTI4LCA3MywgODMsIDc5LCA4MywgNjcsIDY5LCA3NiwgNjksIDIxMSwgNzMsIDgzLCAKKyAgICA3OSwgNzgsIDEyOCwgNzMsIDgzLCA3OSwgMjA2LCA3MywgODMsIDc5LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgODMsIAorICAgIDc2LCA2NSwgNzgsIDY4LCAxMjgsIDczLCA4MywgNjksIDc4LCA0NSwgNzMsIDgzLCA2OSwgNzgsIDEyOCwgNzMsIDgzLCA2NSwgCisgICAgNzUsIDczLCAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIDc4LCAKKyAgICA3OCwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDc5LCA3OCwgNDUsIAorICAgIDY3LCA3OSwgODAsIDgwLCA2OSwgMjEwLCA3MywgODIsIDc5LCA3OCwgMTI4LCA3MywgODIsIDY2LCAxMjgsIDczLCA3OSwgCisgICAgODQsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIAorICAgIDEyOCwgNzMsIDc5LCA4NCwgMTkzLCA3MywgNzksIDgyLCAxMjgsIDczLCA3OSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIAorICAgIDczLCA3OCwgODYsIDczLCA4MywgNzMsIDY2LCA3NiwgMTk3LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgNjgsIDEyOCwgCisgICAgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIDE5NiwgNzMsIDc4LCA4NiwgNjksIDgyLCA4MywgMTk3LCA3MywgNzgsIDg0LCAKKyAgICA4MiwgNzksIDY4LCA4NSwgNjcsIDY5LCA4MiwgMTI4LCA3MywgNzgsIDg0LCA3MywgMTI4LCA3MywgNzgsIDg0LCA2OSwgODIsIAorICAgIDgzLCA4OSwgNzYsIDc2LCA2NSwgNjYsIDczLCAxOTUsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIAorICAgIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OCwgMTk5LCA3MywgNzgsIDg0LCA2OSwgODIsIDgyLCA3OSwgNjYsIDY1LCAKKyAgICA3OCwgNzEsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIAorICAgIDgyLCA4MCwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3OSwgNjcsIDc1LCAKKyAgICA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIAorICAgIDc2LCA2NSwgNjcsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzMsIDc5LCAyMTAsIDczLCA3OCwgODQsIDY5LCA4MiwgCisgICAgNjksIDgzLCAyMTIsIDczLCA3OCwgODQsIDY5LCA4MiwgNjcsIDY1LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgNzgsIDg0LCAKKyAgICA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgCisgICAgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDc2LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCAKKyAgICAyMDQsIDczLCA3OCwgODMsIDg1LCA3NiwgNjUsIDIxMCwgNzMsIDc4LCA4MywgODQsIDgyLCA4NSwgNzcsIDY5LCA3OCwgODQsIAorICAgIDY1LCAyMDQsIDczLCA3OCwgODMsIDczLCA2OCwgNjksIDEyOCwgNzMsIDc4LCA4MywgNzMsIDY4LCAxOTcsIDczLCA3OCwgCisgICAgODMsIDY5LCA4MiwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgODMsIDY3LCAKKyAgICA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzMsIDc4LCA4MCwgODUsIDIxMiwgNzMsIDc4LCA3OCwgNzksIAorICAgIDY3LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgCisgICAgNzMsIDc4LCA3OCwgNjksIDIxMCwgNzMsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCAKKyAgICA3OCwgNzMsIDEyOCwgNzMsIDc4LCA3MiwgNzMsIDY2LCA3MywgMjEyLCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgCisgICAgMjEyLCA3MywgNzgsIDcyLCA2NSwgNzYsIDY5LCAxMjgsIDczLCA3OCwgNzEsIDg3LCA2NSwgOTAsIDEyOCwgNzMsIDc4LCAKKyAgICA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA3MCwgNzYsIDg1LCA2OSwgNzgsIDY3LCA2OSwgCisgICAgMTI4LCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCA4NCwgODksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIAorICAgIDIxNywgNzMsIDc4LCA2OCwgODUsIDgzLCA4NCwgODIsIDczLCA2NSwgMjA0LCA3MywgNzgsIDY4LCA3MywgODIsIDY5LCA2NywgCisgICAgMjEyLCA3MywgNzgsIDY4LCA3MywgNjcsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCAKKyAgICA3OSwgMjEwLCA3MywgNzgsIDY4LCA3MywgMTk1LCA3MywgNzgsIDY4LCA3MywgNjUsIDIwNiwgNzMsIDc4LCA2OCwgNjksIAorICAgIDg4LCAxMjgsIDczLCA3OCwgNjgsIDY5LCA4MCwgNjksIDc4LCA2OCwgNjksIDc4LCAyMTIsIDczLCA3OCwgNjcsIDgyLCA2OSwgCisgICAgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAyMTEsIDczLCA3OCwgNjcsIDgyLCAKKyAgICA2OSwgNjUsIDgzLCA2OSwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgMTk3LCA3MywgNzgsIDY3LCA3OSwgNzcsIAorICAgIDgwLCA3NiwgNjksIDg0LCAxOTcsIDczLCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDczLCA3OCwgNjcsIDc2LCA4NSwgCisgICAgNjgsIDczLCA3OCwgMTk5LCA3MywgNzgsIDY3LCA3MiwgMTI4LCA3MywgNzgsIDY2LCA3OSwgMjE2LCA3MywgNzgsIDY1LCAKKyAgICA4MCwgMTI4LCA3MywgNzgsIDQ1LCA2NSwgNzYsIDY1LCA3MCwgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDczLCA2NSwgCisgICAgMjA0LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA4NSwgMjA1LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCAKKyAgICA2OSwgNjcsIDg0LCA2NSwgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDczLCA3NywgNzgsIAorICAgIDEyOCwgNzMsIDc3LCA3MywgODMsIDY5LCA3OSwgMjExLCA3MywgNzcsIDczLCA3OCwgNTEsIDEyOCwgNzMsIDc3LCA3MywgCisgICAgNzgsIDEyOCwgNzMsIDc3LCA3MywgMjA2LCA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgODIsIDc5LCA3OCwgMTI4LCAKKyAgICA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgODIsIDY1LCAxMjgsIDczLCA3NywgNzMsIDcwLCA3OSwgNzgsIDc5LCA3OCwgCisgICAgMTI4LCA3MywgNzcsIDczLCA2OCwgNzMsIDY1LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDY1LCA3MSwgMTk3LCAKKyAgICA3MywgNzYsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDc2LCA4NSwgODksIDEyOCwgNzMsIDc2LCA4NSwgODUsIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4NCwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgCisgICAgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDczLCAKKyAgICA3NiwgNzMsIDc3LCA3NywgMjEzLCA3MywgNzYsIDUwLCAxMjgsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3MywgNzUsIAorICAgIDY1LCA4MiwgMTkzLCA3MywgNzQsIDEyOCwgNzMsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDcxLCA3MywgCisgICAgMTI4LCA3MywgNzEsIDIwMSwgNzMsIDcxLCA3MSwgODcsIDgzLCAxMjgsIDczLCA3MCwgNzMsIDc4LCAxMjgsIDczLCA2OSwgCisgICAgODUsIDc4LCA3MSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIAorICAgIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCAKKyAgICA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCAKKyAgICA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDczLCA4OSwgCisgICAgNjksIDc5LCA3NSwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCAKKyAgICA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgCisgICAgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDE5OSwgNzMsIDY4LCA3NiwgNjksIAorICAgIDEyOCwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzMsIDY4LCA3MywgMjA1LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU3LCA0OCwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjgsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTYsIDY3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU2LCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjgsIDUyLCAKKyAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY1LCA1NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1NywgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTQsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTUsIDUzLCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU1LCA1MywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDksIDUwLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ4LCA2NiwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA3MCwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNjksIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDU1LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCAKKyAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU0LCA1MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTQsIDUzLCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDU0LCA1MSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDQ4LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUwLCA1NywgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDcwLCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA2OCwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDU2LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1MywgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDU2LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1MywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDUxLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA0OCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MSwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTEsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTMsIDUwLCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUzLCA1MCwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDUyLCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA0OSwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA0OSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCisgICAgODAsIDcyLCA0NSwgNTIsIDY5LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAorICAgIDUyLCA2OSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgCisgICAgNzMsIDcwLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA2NywgNjUsIAorICAgIDIwNCwgNzMsIDY3LCA3OSwgNzgsIDEyOCwgNzMsIDY3LCA3MiwgNzksIDg1LCAxMjgsIDczLCA2NywgNzIsIDc5LCA4MywgCisgICAgMTI4LCA3MywgNjcsIDcyLCA3MywgNzcsIDY1LCA4NCwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDY1LCA2OCwgNzMsIDc4LCAKKyAgICAxMjgsIDczLCA2NywgNjksIDc2LCA2NSwgNzgsIDY4LCA3MywgNjcsIDQ1LCA4OSwgODIsIDEyOCwgNzMsIDY2LCA3MywgNzAsIAorICAgIDczLCA3NiwgNzMsIDEyOCwgNzMsIDY1LCA4NSwgNjgsIDY1LCAxMjgsIDczLCA0OCwgNDksIDUzLCAxMjgsIDczLCA0OCwgCisgICAgNDksIDUyLCAxMjgsIDczLCA0OCwgNDksIDUxLCAxMjgsIDczLCA0OCwgNDksIDUwLCAxMjgsIDczLCA0OCwgNDksIDQ5LCAKKyAgICA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDgsIAorICAgIDEyOCwgNzMsIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDU3LCAxMjgsIDczLCA0OCwgNDgsIDU2LCAxMjgsIAorICAgIDczLCA0OCwgNDgsIDU1LCAxMjgsIDczLCA0OCwgNDgsIDU0LCAxMjgsIDczLCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3MywgCisgICAgNDgsIDQ4LCA1MywgMTI4LCA3MywgNDgsIDQ4LCA1MiwgMTI4LCA3MywgNDgsIDQ4LCA1MSwgMTI4LCA3MywgNDgsIDQ4LCAKKyAgICA1MCwgMTI4LCA3MywgNDgsIDQ4LCA0OSwgMTI4LCA3MywgNDUsIDg5LCA4NSwgMTI4LCA3MywgNDUsIDg5LCA3OSwgMTI4LCAKKyAgICA3MywgNDUsIDg5LCA2OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDY5LCAxMjgsIAorICAgIDczLCA0NSwgODksIDY1LCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDEyOCwgNzMsIDQ1LCA3OSwgNDUsIDczLCAKKyAgICAxMjgsIDczLCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA2OSwgODUsIDEyOCwgNzMsIDQ1LCA2NiwgNjksIDY1LCA3NywgMTI4LCAKKyAgICA3MywgNDUsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA3MywgNDUsIDY1LCAxMjgsIDcyLCA5MCwgOTAsIDkwLCA3MSwgCisgICAgMTI4LCA3MiwgOTAsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDkwLCA4MCwgMTI4LCA3MiwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgCisgICAgODcsIDcxLCAxMjgsIDcyLCA5MCwgODcsIDEyOCwgNzIsIDkwLCA4NCwgMTI4LCA3MiwgOTAsIDcxLCAxMjgsIDcyLCA4OSwgCisgICAgODMsIDg0LCA2OSwgODIsIDY5LCA4MywgNzMsIDIxMSwgNzIsIDg5LCA4MCwgNzksIDY4LCA3MywgNjUsIDgzLCA4NCwgNzksIAorICAgIDc2LCA2OSwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MiwgODksIDgwLCA3MiwgCisgICAgNjksIDc4LCA0NSwgNzcsIDczLCA3OCwgODUsIDgzLCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDEyOCwgNzIsIDg5LCAKKyAgICA4MCwgNzIsIDY5LCAyMDYsIDcyLCA4OSwgNzEsIDczLCA2OSwgNzMsIDY1LCAxMjgsIDcyLCA4OCwgODcsIDcxLCAxMjgsIAorICAgIDcyLCA4OCwgODUsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDgwLCAKKyAgICAxMjgsIDcyLCA4OCwgODUsIDc5LCAxMjgsIDcyLCA4OCwgNzksIDg4LCAxMjgsIDcyLCA4OCwgNzksIDg0LCAxMjgsIDcyLCAKKyAgICA4OCwgNzksIDgwLCAxMjgsIDcyLCA4OCwgNzksIDEyOCwgNzIsIDg4LCA3MywgODgsIDEyOCwgNzIsIDg4LCA3MywgODQsIAorICAgIDEyOCwgNzIsIDg4LCA3MywgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4NCwgCisgICAgMTI4LCA3MiwgODgsIDczLCA2OSwgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDEyOCwgNzIsIDg4LCA3MywgMTI4LCA3MiwgCisgICAgODgsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDY5LCAxMjgsIDcyLCA4OCwgNjUsIDg4LCAKKyAgICAxMjgsIDcyLCA4OCwgNjUsIDg0LCAxMjgsIDcyLCA4OCwgNjUsIDgwLCAxMjgsIDcyLCA4OCwgNjUsIDEyOCwgNzIsIDg3LCAKKyAgICA4NSwgMTI4LCA3MiwgODcsIDY1LCA3MywgODIsIDEyOCwgNzIsIDg3LCA2NSwgNzIsIDEyOCwgNzIsIDg2LCAxMjgsIDcyLCAKKyAgICA4NSwgODYsIDY1LCAxMjgsIDcyLCA4NSwgODMsIDcyLCA2OSwgMTk2LCA3MiwgODUsIDgzLCA3MiwgMTI4LCA3MiwgODUsIAorICAgIDgyLCA2NSwgNzgsIDEyOCwgNzIsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgNjgsIDgzLCAKKyAgICAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDE5NiwgNzIsIAorICAgIDg1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCAyMDgsIDcyLCA4NSwgNzcsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCA2NSwgCisgICAgMjA2LCA3MiwgODUsIDc2LCA1MCwgMTI4LCA3MiwgODUsIDczLCA3MywgODQsIDc5LCAxMjgsIDcyLCA4NSwgNzEsIDcxLCAKKyAgICA3MywgNzgsIDE5OSwgNzIsIDg1LCA2NiwgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCAKKyAgICA4NSwgNjUsIDgyLCA2NSwgNjgsIDY4LCA3OSwgMTI4LCA3MiwgODUsIDY1LCA3OCwgMTI4LCA3MiwgODQsIDgzLCAxMjgsIAorICAgIDcyLCA4NCwgNzQsIDEyOCwgNzIsIDgyLCA4OSwgODYsIDc4LCA3MywgMTkzLCA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgCisgICAgODAsIDY1LCAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIDg1LCA4MywgMTk3LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCAKKyAgICA2NSwgODMsIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgMjExLCA3MiwgNzksIDg1LCA4MiwgCisgICAgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCA3NiwgMTI4LCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgCisgICAgNzksIDgzLCA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgODMsIDY5LCAxMjgsIDcyLCA3OSwgODIsIDgzLCAKKyAgICAxOTcsIDcyLCA3OSwgODIsIDgyLCAxMjgsIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAorICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAorICAgIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCAKKyAgICA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgCisgICAgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDksIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDgsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIAorICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKKyAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCisgICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTIsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTEsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIAorICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCAKKyAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgCisgICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDgsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTQsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgMjA0LCA3MiwgNzksIDgyLCAKKyAgICA3MywgMTI4LCA3MiwgNzksIDgyLCAxOTMsIDcyLCA3OSwgNzksIDg1LCAxMjgsIDcyLCA3OSwgNzksIDgyLCA4NSwgMTI4LCAKKyAgICA3MiwgNzksIDc5LCA4MCwgMTI4LCA3MiwgNzksIDc5LCA3OCwgMTI4LCA3MiwgNzksIDc5LCA3NSwgNjksIDY4LCAxMjgsIAogICAgIDcyLCA3OSwgNzksIDc1LCA2OSwgMTk2LCA3MiwgNzksIDc4LCA2OSwgODksIDY2LCA2OSwgNjksIDEyOCwgNzIsIDc5LCA3OCwgCiAgICAgNjksIDIxNywgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgNjcsIDEyOCwgNzIsIDc5LCA3NywgNzksIDg0LCAKLSAgICA3MiwgNjksIDg0LCA3MywgMTk1LCA3MiwgNzksIDc2LCA2OSwgMTI4LCA3MiwgNzksIDc2LCA2OCwgNzMsIDc4LCAxOTksIAotICAgIDcyLCA3OSwgNzYsIDY1LCA3NywgMTI4LCA3MiwgNzksIDc2LCA2NSwgMjA1LCA3MiwgNzksIDc1LCA2NSwgMTI4LCA3MiwgCi0gICAgNzksIDczLCAxMjgsIDcyLCA3OSwgNjcsIDcyLCA3OSwgMTI4LCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA3MiwgNzgsIDg1LCAKLSAgICA3OSwgODgsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDEyOCwgNzIsIDc4LCA3OSwgODgsIDEyOCwgNzIsIDc4LCA3OSwgODQsIAotICAgIDEyOCwgNzIsIDc4LCA3OSwgODAsIDEyOCwgNzIsIDc4LCA3MywgODgsIDEyOCwgNzIsIDc4LCA3MywgODQsIDEyOCwgNzIsIAotICAgIDc4LCA3MywgODAsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgCi0gICAgNzgsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc4LCA3MywgNjksIDEyOCwgNzIsIDc4LCA3MywgMTI4LCA3MiwgNzgsIDY5LCAKLSAgICA4OCwgMTI4LCA3MiwgNzgsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDY5LCAxMjgsIDcyLCA3OCwgNjUsIDg4LCAxMjgsIDcyLCAKLSAgICA3OCwgNjUsIDg0LCAxMjgsIDcyLCA3OCwgNjUsIDgwLCAxMjgsIDcyLCA3OCwgNjUsIDEyOCwgNzIsIDc3LCA4OSwgODgsIAotICAgIDEyOCwgNzIsIDc3LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NywgODksIDgyLCAxMjgsIDcyLCA3NywgODksIDgwLCAxMjgsIAotICAgIDcyLCA3NywgODksIDEyOCwgNzIsIDc3LCA4NSwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODQsIDEyOCwgNzIsIDc3LCA4NSwgCi0gICAgODIsIDg4LCAxMjgsIDcyLCA3NywgODUsIDgyLCAxMjgsIDcyLCA3NywgODUsIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAKLSAgICA4OCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDEyOCwgNzIsIDc3LCA4NSwgMTI4LCAKLSAgICA3MiwgNzcsIDc5LCA4OCwgMTI4LCA3MiwgNzcsIDc5LCA4NCwgMTI4LCA3MiwgNzcsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIAotICAgIDc5LCAxMjgsIDcyLCA3NywgNzMsIDg4LCAxMjgsIDcyLCA3NywgNzMsIDg0LCAxMjgsIDcyLCA3NywgNzMsIDgwLCAxMjgsIAotICAgIDcyLCA3NywgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc3LCA3MywgNjksIDEyOCwgCi0gICAgNzIsIDc3LCA3MywgMTI4LCA3MiwgNzcsIDY5LCAxMjgsIDcyLCA3NywgNjUsIDg4LCAxMjgsIDcyLCA3NywgNjUsIDg0LCAKLSAgICAxMjgsIDcyLCA3NywgNjUsIDgwLCAxMjgsIDcyLCA3NywgNjUsIDEyOCwgNzIsIDc2LCA4OSwgODgsIDEyOCwgNzIsIDc2LCAKLSAgICA4OSwgODQsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NiwgODksIDgyLCAxMjgsIDcyLCA3NiwgODksIAotICAgIDgwLCAxMjgsIDcyLCA3NiwgODksIDEyOCwgNzIsIDc2LCA4NSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODQsIDEyOCwgNzIsIAotICAgIDc2LCA4NSwgODIsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAxMjgsIDcyLCA3NiwgODUsIDgwLCAxMjgsIDcyLCA3NiwgCi0gICAgODUsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDEyOCwgNzIsIDc2LCAKLSAgICA4NSwgMTI4LCA3MiwgNzYsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDc5LCAxMjgsIDcyLCAKLSAgICA3NiwgNzMsIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDg0LCAxMjgsIDcyLCA3NiwgNzMsIDgwLCAxMjgsIDcyLCA3NiwgNzMsIAotICAgIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDEyOCwgNzIsIDc2LCA3MywgCi0gICAgMTI4LCA3MiwgNzYsIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDY5LCAxMjgsIDcyLCA3NiwgCi0gICAgNjUsIDg4LCAxMjgsIDcyLCA3NiwgNjUsIDg0LCAxMjgsIDcyLCA3NiwgNjUsIDgwLCAxMjgsIDcyLCA3NiwgNjUsIDEyOCwgCi0gICAgNzIsIDc1LCAxMjgsIDcyLCA3MywgOTAsIDY2LCAxMjgsIDcyLCA3MywgODMsIDg0LCA3OSwgODIsIDczLCAxOTUsIDcyLCAKLSAgICA3MywgODIsIDczLCA4MSwgMTI4LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgzLCA4MCwgNjksIDY5LCAxOTYsIDcyLCA3MywgNzEsIAotICAgIDcyLCA0NSwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCA0NSwgMTg1LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDcyLCAKLSAgICA2OSwgNjksIDc2LCA2OSwgMTk2LCA3MiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIDczLCA2OSwgCi0gICAgODUsIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCA3MywgNjksIAotICAgIDg1LCA3OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIDczLCA2OSwgCi0gICAgODUsIDIwMCwgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgNzIsIDczLCAxOTUsIDcyLCA3MywgNjksIAorICAgIDcyLCA2OSwgODQsIDczLCAxOTUsIDcyLCA3OSwgNzYsIDc5LCAxMjgsIDcyLCA3OSwgNzYsIDc2LCA3OSwgMjE1LCA3MiwgCisgICAgNzksIDc2LCA2OSwgMTI4LCA3MiwgNzksIDc2LCA2OCwgNzMsIDc4LCAxOTksIDcyLCA3OSwgNzYsIDY1LCA3NywgMTI4LCAKKyAgICA3MiwgNzksIDc2LCA2NSwgMjA1LCA3MiwgNzksIDc1LCA2NSwgMTI4LCA3MiwgNzksIDY3LCA3NSwgNjksIDIxNywgNzIsIAorICAgIDc5LCA2NywgNzIsIDc5LCAxMjgsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDcyLCA3OCwgODUsIDc5LCA4OCwgMTI4LCA3MiwgCisgICAgNzgsIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDg1LCA2NiwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDc5LCAKKyAgICA4NCwgMTI4LCA3MiwgNzgsIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCA3MiwgNzgsIDczLCA4NCwgMTI4LCAKKyAgICA3MiwgNzgsIDczLCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg0LCAxMjgsIAorICAgIDcyLCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgMTI4LCA3MiwgNzgsIDczLCAxMjgsIDcyLCA3OCwgCisgICAgNjksIDg4LCAxMjgsIDcyLCA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIDc4LCA2NSwgODgsIDEyOCwgCisgICAgNzIsIDc4LCA2NSwgODUsIDEyOCwgNzIsIDc4LCA2NSwgODQsIDEyOCwgNzIsIDc4LCA2NSwgODAsIDEyOCwgNzIsIDc4LCAKKyAgICA2NSwgMTI4LCA3MiwgNzcsIDg5LCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4OSwgODIsIAorICAgIDEyOCwgNzIsIDc3LCA4OSwgODAsIDEyOCwgNzIsIDc3LCA4OSwgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIAorICAgIDg1LCA4NCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODIsIDEyOCwgNzIsIDc3LCA4NSwgCisgICAgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NywgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCAKKyAgICA3OSwgMTI4LCA3MiwgNzcsIDg1LCAxMjgsIDcyLCA3NywgNzksIDg4LCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCAKKyAgICA3NywgNzksIDgwLCAxMjgsIDcyLCA3NywgNzksIDEyOCwgNzIsIDc3LCA3MywgODgsIDEyOCwgNzIsIDc3LCA3MywgODQsIAorICAgIDEyOCwgNzIsIDc3LCA3MywgODAsIDEyOCwgNzIsIDc3LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgCisgICAgMTI4LCA3MiwgNzcsIDczLCA2OSwgMTI4LCA3MiwgNzcsIDczLCAxMjgsIDcyLCA3NywgNjksIDEyOCwgNzIsIDc3LCA2NSwgCisgICAgODgsIDEyOCwgNzIsIDc3LCA2NSwgODQsIDEyOCwgNzIsIDc3LCA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgCisgICAgNzYsIDg5LCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4NCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCAKKyAgICA4OSwgODIsIDEyOCwgNzIsIDc2LCA4OSwgODAsIDEyOCwgNzIsIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCAKKyAgICA3MiwgNzYsIDg1LCA4NCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIAorICAgIDc2LCA4NSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgCisgICAgNzYsIDg1LCA3OSwgMTI4LCA3MiwgNzYsIDg1LCAxMjgsIDcyLCA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAKKyAgICAxMjgsIDcyLCA3NiwgNzksIDEyOCwgNzIsIDc2LCA3MywgODgsIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCAKKyAgICA3MywgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIAorICAgIDczLCA2OSwgMTI4LCA3MiwgNzYsIDczLCAxMjgsIDcyLCA3NiwgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIAorICAgIDcyLCA3NiwgNjksIDEyOCwgNzIsIDc2LCA2NSwgODgsIDEyOCwgNzIsIDc2LCA2NSwgODUsIDEyOCwgNzIsIDc2LCA2NSwgCisgICAgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIDEyOCwgNzIsIDc2LCA2NSwgMTI4LCA3MiwgNzYsIDEyOCwgNzIsIDc1LCAxMjgsIAorICAgIDcyLCA3MywgOTAsIDY2LCAxMjgsIDcyLCA3MywgODksIDc5LCAxMjgsIDcyLCA3MywgODQsIDg0LCA3MywgNzgsIDE5OSwgCisgICAgNzIsIDczLCA4MywgODQsIDc5LCA4MiwgNzMsIDE5NSwgNzIsIDczLCA4MiwgNzMsIDgxLCAxMjgsIDcyLCA3MywgNzgsIDcxLCAKKyAgICA2OSwgNjgsIDEyOCwgNzIsIDczLCA3OCwgNzEsIDY5LCAxOTYsIDcyLCA3MywgNzgsIDcxLCA2OSwgMTI4LCA3MiwgNzMsIAorICAgIDcxLCA3MiwgNDUsIDgzLCA4MCwgNjksIDY5LCAxOTYsIDcyLCA3MywgNzEsIDcyLCA0NSwgODIsIDY5LCA4NiwgNjksIDgyLCAKKyAgICA4MywgNjksIDY4LCA0NSwgMTg1LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDc2LCA3OSwgMjE1LCA3MiwgNzMsIDcxLCA3MiwgNDUsIAorICAgIDcyLCA2OSwgNjksIDc2LCA2OSwgMTk2LCA3MiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MywgCisgICAgNzMsIDc5LCA4MywgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIDczLCAKKyAgICA2OSwgODUsIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCA3MywgCisgICAgNjksIDg1LCA3OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIDczLCAKKyAgICA2OSwgODUsIDIwMCwgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgNzIsIDczLCAxOTUsIDcyLCA3MywgNjksIAogICAgIDEyOCwgNzIsIDczLCA2OCwgNzMsIDc4LCAxOTksIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA3MiwgNzMsIDY4LCA2OSwgCiAgICAgMTI4LCA3MiwgNzMsIDY2LCA3MywgODMsIDY3LCA4NSwgODMsIDEyOCwgNzIsIDcyLCA4NywgNjUsIDEyOCwgNzIsIDcyLCAKICAgICA4NSwgMTI4LCA3MiwgNzIsIDczLCAxMjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDcyLCA3MiwgNjksIDEyOCwgNzIsIDcyLCAKLSAgICA2NSwgNjUsIDEyOCwgNzIsIDcxLCAxMjgsIDcyLCA2OSwgODgsIDczLCA3MCwgNzksIDgyLCAyMDUsIDcyLCA2OSwgODgsIAotICAgIDY1LCA3MSwgODIsIDY1LCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgCi0gICAgODUsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA4MiwgNzcsIDczLCA4NCwgNzMsIDY1LCAyMDYsIDcyLCAKLSAgICA2OSwgODIsIDc3LCA3MywgNzksIDc4LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgNzcsIDY5LCA4MywgMTI4LCA3MiwgNjksIAotICAgIDgyLCA2OSwgMTI4LCA3MiwgNjksIDgyLCA2NiwgMTI4LCA3MiwgNjksIDgyLCA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgCi0gICAgNzgsIDcxLCAxMjgsIDcyLCA2OSwgNzgsIDE5OSwgNzIsIDY5LCA3NywgODAsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCAKLSAgICA4NCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIDIxMiwgNzIsIDY5LCA3NiwgMjA1LCA3MiwgNjksIDc2LCA3MywgNjcsIAotICAgIDc5LCA4MCwgODQsIDY5LCA4MiwgMTI4LCA3MiwgNjksIDc1LCA4NSwgODQsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgCi0gICAgNzMsIDgzLCA2OSwgNzMsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDg5LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDc2LCAKLSAgICAyMTcsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCAyMDYsIDcyLCA2OSwgNjUsIAotICAgIDgyLCA4NCwgODMsIDEyOCwgNzIsIDY5LCA2NSwgODIsIDg0LCA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDcyLCA2OSwgCi0gICAgNjUsIDgyLCA4NCwgMTI4LCA3MiwgNjksIDY1LCA4MiwgMjEyLCA3MiwgNjksIDY1LCA4MiwgNDUsIDc4LCA3OSwgNDUsIDY5LCAKLSAgICA4NiwgNzMsIDIwNCwgNzIsIDY5LCA2NSwgNjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDEyOCwgNzIsIDY5LCA2NSwgNjgsIAotICAgIDgzLCA4NCwgNzksIDc4LCAxOTcsIDcyLCA2OSwgNjUsIDY4LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzIsIDY5LCA2NSwgCi0gICAgNjgsIDczLCA3OCwgNzEsIDEyOCwgNzIsIDY2LCA2NSwgODMsIDY1LCA0NSwgNjksIDgzLCA2NSwgODMsIDE5MywgNzIsIDY2LCAKLSAgICA2NSwgODMsIDE5MywgNzIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzIsIDY1LCA4NiwgNjksIDEyOCwgNzIsIAotICAgIDY1LCA4NSwgODAsIDg0LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDcyLCA3MywgMTI4LCA3MiwgCi0gICAgNjUsIDg0LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA2NywgNzIsIDczLCA3OCwgMTk5LCA3MiwgNjUsIDg0LCA2NSwgMTk4LCAKLSAgICA3MiwgNjUsIDgzLCA2OSwgMjEwLCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIAotICAgIDc5LCA3OCwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCAyMDYsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgCi0gICAgMTI4LCA3MiwgNjUsIDgyLCA3NSwgNzYsIDY5LCA2NSwgMjA2LCA3MiwgNjUsIDgyLCA2OCwgNzgsIDY5LCA4MywgODMsIAotICAgIDEyOCwgNzIsIDY1LCA4MiwgMTk2LCA3MiwgNjUsIDgwLCA4MCwgMjE3LCA3MiwgNjUsIDc4LCA4NSwgNzgsIDc5LCAyMDcsIAotICAgIDcyLCA2NSwgNzgsIDcxLCA5MCwgNzIsIDc5LCAyMTMsIDcyLCA2NSwgNzgsIDY4LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgCi0gICAgMjExLCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCAxMjgsIDcyLCAKLSAgICA2NSwgNzgsIDY4LCA2NiwgNjUsIDcxLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAxMjgsIDcyLCA2NSwgNzgsIDQ1LCA2NSwgNzUsIAotICAgIDY1LCA4NCwgMTI4LCA3MiwgNjUsIDc3LCA5MCwgNjUsIDEyOCwgNzIsIDY1LCA3NywgODMsIDg0LCA2OSwgMjEwLCA3MiwgCi0gICAgNjUsIDc3LCA3NywgNjksIDgyLCAxMjgsIDcyLCA2NSwgNzcsIDc3LCA2OSwgMjEwLCA3MiwgNjUsIDc3LCA2NiwgODUsIDgyLCAKLSAgICA3MSwgNjksIDgyLCAxMjgsIDcyLCA2NSwgNzYsIDgxLCA2NSwgMTI4LCA3MiwgNjUsIDc2LCA3OSwgMTI4LCA3MiwgNjUsIAotICAgIDc2LCA3MCwgNDUsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCA3MiwgNjUsIDc2LCA3MCwgMTI4LCA3MiwgNjUsIDc2LCA2NiwgCi0gICAgNjksIDgyLCA2OCwgMTI4LCA3MiwgNjUsIDc2LCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDczLCA4NCwgODUsIAotICAgIDEyOCwgNzIsIDY1LCA3MywgODIsIDY3LCA4NSwgODQsIDEyOCwgNzIsIDY1LCA3MywgODIsIDEyOCwgNzIsIDY1LCA3MSwgCi0gICAgNzYsIDY1LCAyMTgsIDcyLCA2NSwgNzEsIDc2LCAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDcyLCAKLSAgICA2NSwgNzAsIDg1LCA3NSwgNzIsIDEyOCwgNzIsIDY1LCA2OSwgNzEsIDIwNCwgNzIsIDY1LCA2NSwgODIsIDg1LCAxMjgsIAotICAgIDcyLCA2NSwgNjUsIDc3LCAxMjgsIDcyLCA2NSwgMTkzLCA3MiwgNjUsIDQ1LCA3MiwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgCi0gICAgNTYsIDEyOCwgNzIsIDQ4LCA0OCwgNTUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCAKLSAgICAxMjgsIDcyLCA0OCwgNDgsIDUzLCAxMjgsIDcyLCA0OCwgNDgsIDUyLCAxMjgsIDcyLCA0OCwgNDgsIDUxLCAxMjgsIDcyLCAKLSAgICA0OCwgNDgsIDUwLCAxMjgsIDcyLCA0OCwgNDgsIDQ5LCAxMjgsIDcyLCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3MSwgODksIAotICAgIDg1LCAxMjgsIDcxLCA4OSwgNzksIDc4LCAxMjgsIDcxLCA4OSwgNzksIDEyOCwgNzEsIDg5LCA3MywgMTI4LCA3MSwgODksIAotICAgIDcwLCAyMTMsIDcxLCA4OSwgNjksIDY5LCAxMjgsIDcxLCA4OSwgNjUsIDgzLCAxMjgsIDcxLCA4OSwgNjUsIDY1LCAxMjgsIAotICAgIDcxLCA4OSwgNjUsIDEyOCwgNzEsIDg5LCAxMjgsIDcxLCA4NywgODUsIDEyOCwgNzEsIDg3LCA3MywgMTI4LCA3MSwgODcsIAotICAgIDY5LCA2OSwgMTI4LCA3MSwgODcsIDY5LCAxMjgsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA4NywgNjUsIDEyOCwgNzEsIAotICAgIDg2LCAxMjgsIDcxLCA4NSwgODIsIDg1LCA4MywgNzIsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDc4LCAxMjgsIDcxLCA4NSwgCi0gICAgODIsIDY1LCA3NywgODUsIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNTUsIDEyOCwgNzEsIDg1LCA3OCwgODUsIAotICAgIDEyOCwgNzEsIDg1LCA3OCwgMjEzLCA3MSwgODUsIDIwNSwgNzEsIDg1LCA3NiwgMTI4LCA3MSwgODUsIDczLCA4NCwgNjUsIAotICAgIDgyLCAxMjgsIDcxLCA4NSwgMTk5LCA3MSwgODUsIDY5LCA3MiwgMTI4LCA3MSwgODUsIDY5LCAyMDAsIDcxLCA4NSwgNjgsIAotICAgIDEyOCwgNzEsIDg1LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgODMsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDg1LCA2NSwgCi0gICAgODIsIDY4LCA2OSwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDE5NiwgNzEsIDg1LCAKLSAgICA2NSwgODIsIDY4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2NSwgNzgsIDIwMSwgNzEsIDg1LCAxOTMsIDcxLCA4NSwgMTc4LCAKLSAgICA3MSwgODQsIDY5LCAyMTAsIDcxLCA4MywgODUsIDc3LCAxMjgsIDcxLCA4MywgODUsIDIwNSwgNzEsIDgyLCAyMTMsIDcxLCAKLSAgICA4MiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA3MSwgODIsIDc5LCA3OCwgODQsIAotICAgIDcyLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcxLCA4MiwgNzMsIDc4LCA3OCwgNzMsIDc4LCAxOTksIDcxLCA4MiwgCi0gICAgNzMsIDc3LCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDY5LCA3MSwgNzksIDgyLCA3MywgNjUsIDIwNiwgNzEsIDgyLCAKLSAgICA2OSwgNjksIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIAotICAgIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCA0NSwgODQsIDcyLCAKLSAgICA2NSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCAyMTAsIDcxLCA4MiwgNjksIDY1LCAyMTIsIDcxLCA4MiwgNjUsIAotICAgIDg2LCA2OSwgODksIDY1LCA4MiwgMTk2LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAKLSAgICAxMjgsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgCi0gICAgMTI4LCA3MSwgODIsIDY1LCA4NiwgMTk3LCA3MSwgODIsIDY1LCA4NCwgNjksIDgyLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAKLSAgICA4MywgMTI4LCA3MSwgODIsIDY1LCA4MywgMjExLCA3MSwgODIsIDY1LCA4MCwgNzIsIDY5LCA3NywgMTk3LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNjksIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA3MSwgODIsIDY1LCA3MywgNzgsIDEyOCwgCi0gICAgNzEsIDgyLCA2NSwgNjgsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgODIsIDY1LCA2NywgNjksIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgNjcsIDE5NywgNzEsIDgwLCA2NSwgMTI4LCA3MSwgNzksIDgyLCA4NCwgNzIsIDc3LCA3MywgNzUsIDc5LCAyMDYsIAotICAgIDcxLCA3OSwgODIsIDg0LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgCi0gICAgNzEsIDc5LCA4MywgODksIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCAKLSAgICA3MSwgNzksIDgyLCA3MSwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNjUsIDEyOCwgNzEsIDc5LCA3OSwgMTk2LCA3MSwgNzksIAotICAgIDc4LCA3MSwgMTI4LCA3MSwgNzksIDc2LCA2OCwgMTI4LCA3MSwgNzksIDc1LCAxMjgsIDcxLCA3OSwgNzMsIDc4LCAxOTksIAotICAgIDcxLCA3OSwgNjYsIDc2LCA3MywgNzgsIDEyOCwgNzEsIDc5LCA2NSwgNzYsIDEyOCwgNzEsIDc5LCA2NSwgMjA0LCA3MSwgCi0gICAgNzksIDY1LCAxMjgsIDcxLCA3OCwgODksIDczLCA4MywgMTI4LCA3MSwgNzgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAKLSAgICAxMjgsIDcxLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzEsIDc2LCA3OSwgODQsIDg0LCA2NSwgMjA0LCA3MSwgNzYsIAotICAgIDc5LCA2NiwgMTk3LCA3MSwgNzYsIDczLCA4MywgODMsIDY1LCA3OCwgNjgsIDIwNywgNzEsIDc2LCA2OSwgNzMsIDY3LCAKLSAgICAyMDAsIDcxLCA3NiwgNjUsIDcxLCA3OSwgNzYsIDczLCAxMjgsIDcxLCA3NiwgNjUsIDEyOCwgNzEsIDc0LCA2OSwgMTI4LCAKLSAgICA3MSwgNzMsIDg4LCAxMjgsIDcxLCA3MywgODQsIDEyOCwgNzEsIDczLCA4MywgNzIsIDEyOCwgNzEsIDczLCA4MywgMjAwLCAKLSAgICA3MSwgNzMsIDgzLCA2NSwgNzYsIDEyOCwgNzEsIDczLCA4MiwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzEsIDczLCA4MiwgNzYsIAotICAgIDEyOCwgNzEsIDczLCA4MiwgNTEsIDEyOCwgNzEsIDczLCA4MiwgMTc5LCA3MSwgNzMsIDgyLCA1MCwgMTI4LCA3MSwgNzMsIAotICAgIDgyLCAxNzgsIDcxLCA3MywgODAsIDEyOCwgNzEsIDczLCA3OCwgNzMsIDczLCAxMjgsIDcxLCA3MywgNzcsIDY5LCA3NiwgCi0gICAgMTI4LCA3MSwgNzMsIDc3LCA2OSwgMjA0LCA3MSwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNzEsIDY1LCAxMjgsIDcxLCA3MywgCi0gICAgNjksIDg0LCAxMjgsIDcxLCA3MywgNjgsIDczLCA3NywgMTI4LCA3MSwgNzMsIDY2LCA2NiwgNzksIDg1LCAyMTEsIDcxLCAKLSAgICA3MywgNjYsIDY1LCAxMjgsIDcxLCA3MywgNTIsIDEyOCwgNzEsIDczLCAxODAsIDcxLCA3MiwgOTAsIDEyOCwgNzEsIDcyLCAKLSAgICA4NywgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDE5MywgNzEsIAotICAgIDcyLCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4MywgODQsIDEyOCwgNzEsIDcyLCA3OSwgCi0gICAgMTI4LCA3MSwgNzIsIDczLCAxMjgsIDcxLCA3MiwgNzIsIDY1LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA4OCwgMTI4LCA3MSwgCi0gICAgNzIsIDY5LCA4NSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDcxLCAKLSAgICA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIAotICAgIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgODQsIDEyOCwgCi0gICAgNzEsIDcyLCA2OSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgMTI4LCA3MSwgNzIsIDE5NywgNzEsIDcyLCA2NSwgODksIDc4LCAKLSAgICAxMjgsIDcxLCA3MiwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2NSwgODAsIDEyOCwgNzEsIDcyLCA2NSwgNzgsIAotICAgIDEyOCwgNzEsIDcyLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDg1LCAxMjgsIDcxLCA3MiwgCi0gICAgNjUsIDczLCA3OCwgMTI4LCA3MSwgNzIsIDY1LCA3MywgMjA2LCA3MSwgNzIsIDY1LCA2OCwgMTI4LCA3MSwgNzIsIDY1LCAKLSAgICA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCA3MSwgNzEsIAotICAgIDg3LCA2OSwgNjksIDEyOCwgNzEsIDcxLCA4NywgNjksIDEyOCwgNzEsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA3MSwgCi0gICAgODcsIDY1LCAxMjgsIDcxLCA3MSwgODUsIDg4LCAxMjgsIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgODUsIDgyLCAKLSAgICA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgNzksIAotICAgIDg0LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzEsIDc5LCA4OCwgCi0gICAgMTI4LCA3MSwgNzEsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgMTI4LCA3MSwgCi0gICAgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA3MywgNjksIDgwLCAxMjgsIDcxLCAKLSAgICA3MSwgNzMsIDY5LCAxMjgsIDcxLCA3MSwgNjksIDg4LCAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCA3MSwgNjksIAotICAgIDgwLCAxMjgsIDcxLCA3MSwgNjUsIDg4LCAxMjgsIDcxLCA3MSwgNjUsIDg0LCAxMjgsIDcxLCA3MSwgNjUsIDY1LCAxMjgsIAotICAgIDcxLCA2OSwgODQsIDE5MywgNzEsIDY5LCA4MywgODQsIDg1LCA4MiwgNjksIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg1LCAKLSAgICAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDc4LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDIwNiwgNzEsIAotICAgIDY5LCA4MywgNzIsIDUwLCAxMjgsIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCA3MywgNzcsIDEyOCwgNzEsIDY5LCA4MiwgCi0gICAgNzcsIDY1LCAyMDYsIDcxLCA2OSwgODIsIDY5LCA4MywgNzIsIDEyOCwgNzEsIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCAKLSAgICA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgCi0gICAgODIsIDczLCAxOTUsIDcxLCA2OSwgNzgsIDg0LCA3NiwgMTk3LCA3MSwgNjksIDc4LCA3MywgODQsIDczLCA4NiwgNjksIAotICAgIDEyOCwgNzEsIDY5LCA3OCwgNzMsIDc1LCAyMDEsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3NywgCi0gICAgNzMsIDc4LCA3MywgMTI4LCA3MSwgNjksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA2OSwgMjA1LCAKKyAgICA2NSwgNjUsIDEyOCwgNzIsIDcxLCAxMjgsIDcyLCA2OSwgODksIDg0LCAxMjgsIDcyLCA2OSwgODgsIDczLCA3MCwgNzksIAorICAgIDgyLCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgODIsIDY1LCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAKKyAgICAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgODUsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA4MiwgNzcsIAorICAgIDczLCA4NCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA3MywgNzksIDc4LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgCisgICAgNzcsIDY5LCA4MywgMTI4LCA3MiwgNjksIDgyLCA2OSwgMTI4LCA3MiwgNjksIDgyLCA2NiwgMTI4LCA3MiwgNjksIDgyLCAKKyAgICA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgNzgsIDcxLCAxMjgsIDcyLCA2OSwgNzgsIDE5OSwgNzIsIDY5LCA3NywgODAsIAorICAgIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCA4NCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIDIxMiwgNzIsIDY5LCA3NiwgCisgICAgMjA1LCA3MiwgNjksIDc2LCA3MywgNjcsIDc5LCA4MCwgODQsIDY5LCA4MiwgMTI4LCA3MiwgNjksIDc1LCA4NSwgODQsIDY1LCAKKyAgICA2NSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgNzMsIDgzLCA2OSwgNzMsIDEyOCwgNzIsIDY5LCA3MywgNzEsIDcyLCA4NCwgCisgICAgMTI4LCA3MiwgNjksIDY5LCA3MywgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCAKKyAgICA3OCwgNzYsIDIxNywgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIAorICAgIDY5LCA2NSwgODIsIDg0LCA4MywgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgCisgICAgNzIsIDY5LCA2NSwgODIsIDg0LCAxMjgsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDgyLCA0NSwgNzgsIDc5LCAKKyAgICA0NSwgNjksIDg2LCA3MywgMjA0LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIAorICAgIDY1LCA2OCwgODMsIDg0LCA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgNjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3MiwgCisgICAgNjksIDY1LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgNDUsIDY2LCA2NSwgNzgsIDY4LCA2NSwgNzEsIAorICAgIDY5LCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgNjUsIDgzLCAKKyAgICAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODcsIDc0LCAxMjgsIDcyLCA2NSwgODYsIAorICAgIDY5LCAxMjgsIDcyLCA2NSwgODUsIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNjUsIDIxMywgCisgICAgNzIsIDY1LCA4NCwgODIsIDY1LCAyMDYsIDcyLCA2NSwgODQsIDcyLCA3MywgMTI4LCA3MiwgNjUsIDg0LCA2OSwgMTI4LCAKKyAgICA3MiwgNjUsIDg0LCA2NywgNzIsIDczLCA3OCwgMTk5LCA3MiwgNjUsIDg0LCA2NSwgMTk4LCA3MiwgNjUsIDgzLCA2OSwgCisgICAgMjEwLCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCA3OCwgMTI4LCAKKyAgICA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCAyMDYsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgMTI4LCA3MiwgNjUsIAorICAgIDgyLCA3NSwgNzYsIDY5LCA2NSwgMjA2LCA3MiwgNjUsIDgyLCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzIsIDY1LCA4MiwgCisgICAgMTk2LCA3MiwgNjUsIDgwLCA4MCwgMjE3LCA3MiwgNjUsIDc4LCA4NSwgNzgsIDc5LCAyMDcsIDcyLCA2NSwgNzgsIDcxLCAKKyAgICA5MCwgNzIsIDc5LCAyMTMsIDcyLCA2NSwgNzgsIDY4LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMjExLCA3MiwgNjUsIAorICAgIDc4LCA2OCwgNzYsIDY5LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA2NiwgCisgICAgNjUsIDcxLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA0NSwgNzksIDg2LCA2NSwgNzYsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDQ1LCAKKyAgICA3OSwgODYsIDY1LCAyMDQsIDcyLCA2NSwgNzgsIDY4LCA0NSwgNzIsIDc5LCA3OSwgNzUsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIAorICAgIDQ1LCA3MiwgNzksIDc5LCAyMDMsIDcyLCA2NSwgNzgsIDY4LCA0NSwgNzIsIDczLCA3OCwgNzEsIDY5LCAxMjgsIDcyLCA2NSwgCisgICAgNzgsIDY4LCA0NSwgNzIsIDczLCA3OCwgNzEsIDE5NywgNzIsIDY1LCA3OCwgNjgsIDQ1LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCAKKyAgICA3MiwgNjUsIDc4LCA2OCwgNDUsIDcwLCA3NiwgNjUsIDIxMiwgNzIsIDY1LCA3OCwgNjgsIDQ1LCA3MCwgNzMsIDgzLCA4NCwgCisgICAgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNDUsIDY3LCA4NSwgODIsIDc2LCA3MywgNjcsIDg1LCA2OSwgMTI4LCA3MiwgNjUsIDc4LCAKKyAgICA2OCwgNDUsIDY3LCA4NSwgODIsIDc2LCA3MywgNjcsIDg1LCAxOTcsIDcyLCA2NSwgNzgsIDY4LCA0NSwgNjcsIDg1LCA4MCwgCisgICAgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNDUsIDY3LCA4NSwgMjA4LCA3MiwgNjUsIDc4LCA2OCwgNDUsIDY3LCA3NiwgNjUsIDg3LCAKKyAgICAxMjgsIDcyLCA2NSwgNzgsIDY4LCA0NSwgNjcsIDc2LCA2NSwgMjE1LCA3MiwgNjUsIDc4LCA2OCwgNDUsIDY3LCA3MywgODIsIAorICAgIDY3LCA3NiwgNjksIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDQ1LCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgNzIsIDY1LCA3OCwgCisgICAgNjgsIDQ1LCA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDQ1LCA2NSwgNzgsIDcxLCA3NiwgMTk3LCAKKyAgICA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MiwgNjUsIDc4LCA0NSwgNjUsIDc1LCA2NSwgODQsIDEyOCwgNzIsIDY1LCA3NywgOTAsIAorICAgIDY1LCAxMjgsIDcyLCA2NSwgNzcsIDkwLCAxOTMsIDcyLCA2NSwgNzcsIDgzLCA4NCwgNjksIDIxMCwgNzIsIDY1LCA3NywgCisgICAgNzcsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIDIxMCwgNzIsIDY1LCA3NywgNjYsIDg1LCA4MiwgNzEsIDY5LCAKKyAgICA4MiwgMTI4LCA3MiwgNjUsIDc2LCA4MSwgNjUsIDEyOCwgNzIsIDY1LCA3NiwgNzksIDEyOCwgNzIsIDY1LCA3NiwgNzAsIAorICAgIDQ1LCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIDY5LCA4MiwgCisgICAgNjgsIDEyOCwgNzIsIDY1LCA3NiwgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAxMjgsIDcyLCAKKyAgICA2NSwgNzMsIDIxMSwgNzIsIDY1LCA3MywgODIsIDY3LCA4NSwgODQsIDEyOCwgNzIsIDY1LCA3MywgODIsIDEyOCwgNzIsIAorICAgIDY1LCA3MSwgNzYsIDY1LCAyMTgsIDcyLCA2NSwgNzEsIDc2LCAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDY1LCAKKyAgICAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDEyOCwgNzIsIDY1LCA2OSwgNzEsIDIwNCwgNzIsIDY1LCA2NSwgODIsIAorICAgIDg1LCAxMjgsIDcyLCA2NSwgNjUsIDc3LCAxMjgsIDcyLCA2NSwgMTkzLCA3MiwgNjUsIDQ1LCA3MiwgNjUsIDEyOCwgNzIsIAorICAgIDQ4LCA0OCwgNTYsIDEyOCwgNzIsIDQ4LCA0OCwgNTUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcyLCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDcyLCA0OCwgNDgsIDUzLCAxMjgsIDcyLCA0OCwgNDgsIDUyLCAxMjgsIDcyLCA0OCwgNDgsIDUxLCAKKyAgICAxMjgsIDcyLCA0OCwgNDgsIDUwLCAxMjgsIDcyLCA0OCwgNDgsIDQ5LCAxMjgsIDcyLCA0NSwgODQsIDg5LCA4MCwgMTk3LCAKKyAgICA3MSwgODksIDg1LCAxMjgsIDcxLCA4OSwgNzksIDc4LCAxMjgsIDcxLCA4OSwgNzksIDEyOCwgNzEsIDg5LCA3MywgMTI4LCAKKyAgICA3MSwgODksIDcwLCAyMTMsIDcxLCA4OSwgNjksIDY5LCAxMjgsIDcxLCA4OSwgNjUsIDgzLCAxMjgsIDcxLCA4OSwgNjUsIAorICAgIDY1LCAxMjgsIDcxLCA4OSwgNjUsIDEyOCwgNzEsIDg5LCAxMjgsIDcxLCA4NywgODUsIDEyOCwgNzEsIDg3LCA3MywgMTI4LCAKKyAgICA3MSwgODcsIDY5LCA2OSwgMTI4LCA3MSwgODcsIDY5LCAxMjgsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA4NywgNjUsIAorICAgIDEyOCwgNzEsIDg2LCA2NSwgNzgsIDcxLCAxMjgsIDcxLCA4NiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgODMsIDcyLCAxMjgsIAorICAgIDcxLCA4NSwgODIsIDg1LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA3NywgODUsIDc1LCA3MiwgMjAxLCA3MSwgODUsIDgyLCA2NSwgCisgICAgNzcsIDg1LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA4NSwgODIsIDU1LCAxMjgsIDcxLCA4NSwgNzgsIDg1LCAxMjgsIDcxLCAKKyAgICA4NSwgNzgsIDIxMywgNzEsIDg1LCAyMDUsIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCA3NCwgNjUsIDgyLCA2NSwgODQsIAorICAgIDIwMSwgNzEsIDg1LCA3MywgODQsIDY1LCA4MiwgMTI4LCA3MSwgODUsIDE5OSwgNzEsIDg1LCA2OSwgNzMsIDEyOCwgNzEsIAorICAgIDg1LCA2OSwgNzIsIDEyOCwgNzEsIDg1LCA2OSwgMjAwLCA3MSwgODUsIDY4LCAxMjgsIDcxLCA4NSwgMTk2LCA3MSwgODUsIAorICAgIDY1LCA4MiwgNjgsIDgzLCA3NywgNjUsIDc4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDY4LCA3OCwgNjksIDgzLCAKKyAgICA4MywgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgMTI4LCA3MSwgODUsIAorICAgIDY1LCA4MiwgNjUsIDc4LCAyMDEsIDcxLCA4NSwgMTkzLCA3MSwgODUsIDE3OCwgNzEsIDg0LCA2OSwgMjEwLCA3MSwgODMsIAorICAgIDg1LCA3NywgMTI4LCA3MSwgODMsIDg1LCAyMDUsIDcxLCA4MiwgMjEzLCA3MSwgODIsIDc5LCA4NywgNzMsIDc4LCAxOTksIAorICAgIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzEsIDgyLCA3OSwgNzgsIDg0LCA3MiwgNzMsIDgzLCA3NywgNjUsIDg0LCAKKyAgICA2NSwgMTI4LCA3MSwgODIsIDczLCA3OCwgNzgsIDczLCA3OCwgMTk5LCA3MSwgODIsIDczLCA3NywgNjUsIDY3LCA3MywgNzgsIAorICAgIDE5OSwgNzEsIDgyLCA2OSwgNzEsIDc5LCA4MiwgNzMsIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY5LCAyMDYsIDcxLCA4MiwgCisgICAgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIAorICAgIDY1LCA3OCwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDIwNiwgNzEsIDgyLCA2OSwgCisgICAgNjUsIDg0LCA2OSwgMjEwLCA3MSwgODIsIDY5LCA2NSwgMjEyLCA3MSwgODIsIDY1LCA4NiwgNjksIDg5LCA2NSwgODIsIAorICAgIDE5NiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3MSwgODIsIDY1LCA4NiwgCisgICAgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDEyOCwgNzEsIDgyLCA2NSwgODYsIAorICAgIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDY1LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2NSwgCisgICAgODMsIDIxMSwgNzEsIDgyLCA2NSwgODMsIDIwOCwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIDE5NywgNzEsIDgyLCAKKyAgICA2NSwgODAsIDY5LCA4MywgMTI4LCA3MSwgODIsIDY1LCA3OCwgODQsIDcyLCAxOTMsIDcxLCA4MiwgNjUsIDc3LCA3NywgCisgICAgMTkzLCA3MSwgODIsIDY1LCA3MywgNzgsIDEyOCwgNzEsIDgyLCA2NSwgNjgsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA3MSwgODIsIDY1LCA2OCwgODUsIDY1LCA3NiwgMTI4LCA3MSwgODIsIDY1LCA2NywgNjksIDEyOCwgNzEsIDgyLCA2NSwgNjcsIAorICAgIDE5NywgNzEsIDgwLCA2NSwgMTI4LCA3MSwgNzksIDgyLCA4NCwgNzIsIDc3LCA3MywgNzUsIDc5LCAyMDYsIDcxLCA3OSwgCisgICAgODIsIDg0LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCAKKyAgICA4MywgODksIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA3MSwgNzksIAorICAgIDgyLCA3MSwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNjUsIDEyOCwgNzEsIDc5LCA3OSwgMTk2LCA3MSwgNzksIDc4LCA3MSwgCisgICAgMTI4LCA3MSwgNzksIDc2LCA3MCwgNjksIDgyLCAxMjgsIDcxLCA3OSwgNzYsIDY4LCAxMjgsIDcxLCA3OSwgNzUsIDEyOCwgCisgICAgNzEsIDc5LCA3MywgNzgsIDE5OSwgNzEsIDc5LCA2NiwgNzYsIDczLCA3OCwgMTI4LCA3MSwgNzksIDY1LCA3NiwgMTI4LCAKKyAgICA3MSwgNzksIDY1LCAyMDQsIDcxLCA3OSwgNjUsIDEyOCwgNzEsIDc4LCA4OSwgNzMsIDgzLCAxMjgsIDcxLCA3OCwgNjUsIAorICAgIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNzEsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA3MSwgNzYsIDc5LCA4NCwgCisgICAgODQsIDY1LCAyMDQsIDcxLCA3NiwgNzksIDY2LCAxOTcsIDcxLCA3NiwgNzMsIDgzLCA4MywgNjUsIDc4LCA2OCwgMjA3LCAKKyAgICA3MSwgNzYsIDY5LCA3MywgNjcsIDIwMCwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDEyOCwgNzEsIDc2LCA2NSwgCisgICAgMTI4LCA3MSwgNzQsIDY5LCAxMjgsIDcxLCA3MywgODgsIDEyOCwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgCisgICAgMTI4LCA3MSwgNzMsIDgzLCAyMDAsIDcxLCA3MywgODMsIDY1LCA3NiwgMTI4LCA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCAKKyAgICA2NSwgMTI4LCA3MSwgNzMsIDgyLCA3NiwgMjExLCA3MSwgNzMsIDgyLCA3NiwgMTI4LCA3MSwgNzMsIDgyLCA1MSwgMTI4LCAKKyAgICA3MSwgNzMsIDgyLCAxNzksIDcxLCA3MywgODIsIDUwLCAxMjgsIDcxLCA3MywgODIsIDE3OCwgNzEsIDczLCA4MCwgMTI4LCAKKyAgICA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA3NywgNjksIDc2LCAxMjgsIDcxLCA3MywgNzcsIDY5LCAyMDQsIAorICAgIDcxLCA3MywgNzcsIDEyOCwgNzEsIDczLCA3MSwgNjUsIDEyOCwgNzEsIDczLCA3MSwgMTI4LCA3MSwgNzMsIDY5LCA4NCwgCisgICAgMTI4LCA3MSwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjYsIDc5LCA4NSwgMjExLCA3MSwgNzMsIDY2LCAKKyAgICA2NSwgMTI4LCA3MSwgNzMsIDUyLCAxMjgsIDcxLCA3MywgMTgwLCA3MSwgNzIsIDkwLCAxMjgsIDcxLCA3MiwgODcsIDY1LCAKKyAgICAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCAxOTMsIDcxLCA3MiwgODUsIAorICAgIDEyOCwgNzEsIDcyLCA3OSwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODMsIDg0LCAxMjgsIDcxLCA3MiwgNzksIDEyOCwgNzEsIAorICAgIDcyLCA3MywgNzcsIDY5LCA3NiwgMTI4LCA3MSwgNzIsIDczLCAxMjgsIDcxLCA3MiwgNzIsIDY1LCAxMjgsIDcxLCA3MiwgCisgICAgNjksIDg5LCA4MywgMTI4LCA3MSwgNzIsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDc4LCAxMjgsIDcxLCAKKyAgICA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgCisgICAgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAKKyAgICA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg0LCAxMjgsIDcxLCA3MiwgNjksIDY5LCAxMjgsIAorICAgIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIDcxLCA3MiwgNjUsIDg5LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCA4MiwgCisgICAgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDgwLCAxMjgsIDcxLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIDc3LCAKKyAgICA3NywgNjUsIDEyOCwgNzEsIDcyLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDg1LCAxMjgsIAorICAgIDcxLCA3MiwgNjUsIDczLCA3OCwgMTI4LCA3MSwgNzIsIDY1LCA3MywgMjA2LCA3MSwgNzIsIDY1LCA2OCwgMTI4LCA3MSwgCisgICAgNzIsIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCAKKyAgICA3MSwgNzEsIDg3LCA2OSwgNjksIDEyOCwgNzEsIDcxLCA4NywgNjksIDEyOCwgNzEsIDcxLCA4NywgNjUsIDY1LCAxMjgsIAorICAgIDcxLCA3MSwgODcsIDY1LCAxMjgsIDcxLCA3MSwgODUsIDg4LCAxMjgsIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgCisgICAgODUsIDgyLCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCAKKyAgICA4NSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzEsIAorICAgIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgCisgICAgMTI4LCA3MSwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA3MywgNjksIDgwLCAKKyAgICAxMjgsIDcxLCA3MSwgNzMsIDY5LCAxMjgsIDcxLCA3MSwgNjksIDg4LCAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCAKKyAgICA3MSwgNjksIDgwLCAxMjgsIDcxLCA3MSwgNjUsIDg4LCAxMjgsIDcxLCA3MSwgNjUsIDg0LCAxMjgsIDcxLCA2OSwgODQsIAorICAgIDE5MywgNzEsIDY5LCA4MywgODQsIDg1LCA4MiwgNjksIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg1LCAxMjgsIDcxLCA2OSwgCisgICAgODMsIDcyLCA4NCwgNzMsIDc4LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDIwNiwgNzEsIDY5LCA4MywgNzIsIDUwLCAKKyAgICAxMjgsIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCA3MywgNzcsIDEyOCwgNzEsIDY5LCA4MiwgNzcsIDY1LCAyMDYsIAorICAgIDcxLCA2OSwgODIsIDY5LCA4MywgNzIsIDEyOCwgNzEsIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCA2OSwgNzksIDc3LCA2OSwgCisgICAgODQsIDgyLCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCAxOTUsIDcxLCAKKyAgICA2OSwgNzgsIDg0LCA3NiwgMTk3LCA3MSwgNjksIDc4LCA3MywgODQsIDczLCA4NiwgNjksIDEyOCwgNzEsIDY5LCA3OCwgNzMsIAorICAgIDc1LCAyMDEsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3NywgNzMsIDc4LCA3MywgMTI4LCA3MSwgCisgICAgNjksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA2OSwgMjA1LCA3MSwgNjksIDY5LCA3NywgMTI4LCAKICAgICA3MSwgNjksIDY4LCA3OSwgNzYsIDY1LCAxMjgsIDcxLCA2OSwgNjgsIDY5LCAxMjgsIDcxLCA2OSwgNjYsIDIwNywgNzEsIAotICAgIDY5LCA2NiwgMTkzLCA3MSwgNjksIDY1LCA4MiwgMTI4LCA3MSwgNjksIDY1LCAyMTAsIDcxLCA2OCwgNjUsIDc4LCAxMjgsIAotICAgIDcxLCA2NywgNzMsIDcxLCAxMjgsIDcxLCA2NywgNjUsIDIwNiwgNzEsIDY2LCA3OSwgNzgsIDEyOCwgNzEsIDY2LCA3MywgCi0gICAgNjksIDE5NywgNzEsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDcxLCA2NiwgNjksIDg0LCAxMjgsIDcxLCA2NiwgNjUsIDg5LCAKLSAgICA3MywgMTI4LCA3MSwgNjYsIDY1LCA3NSwgODUsIDgyLCA4NSwgNzgsIDY5LCA3OCwgMTI4LCA3MSwgNjYsIDEyOCwgNzEsIAotICAgIDY1LCA4OSwgNjUsIDc4LCA4NSwgNzUsIDczLCA4NCwgODQsIDY1LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDcxLCA2NSwgODksIDEyOCwgNzEsIDY1LCA4NSwgNzgsIDg0LCA3NiwgNjksIDg0LCAxMjgsIDcxLCA2NSwgODQsIAotICAgIDcyLCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcxLCA2NSwgCi0gICAgODQsIDY5LCAxMjgsIDcxLCA2NSwgODMsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgODMsIDcyLCA4NSwgNzgsIDczLCAKLSAgICAxMjgsIDcxLCA2NSwgODIsIDc5LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MSwgNjUsIAotICAgIDgyLCA2OCwgNjksIDc4LCAxMjgsIDcxLCA2NSwgODIsIDUxLCAxMjgsIDcxLCA2NSwgODAsIDgwLCA2OSwgMTk2LCA3MSwgCi0gICAgNjUsIDIwOCwgNzEsIDY1LCA3OCwgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDcxLCA3MywgNjUsIDEyOCwgNzEsIDY1LCAKLSAgICA3OCwgNjgsIDE5MywgNzEsIDY1LCA3OCwgNTAsIDEyOCwgNzEsIDY1LCA3OCwgMTc4LCA3MSwgNjUsIDc3LCA3NywgNjUsIAotICAgIDEyOCwgNzEsIDY1LCA3NywgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY5LCAxMjgsIAotICAgIDcxLCA2NSwgNzcsIDE5NywgNzEsIDY1LCA3NywgNjUsIDc4LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgCi0gICAgNjUsIDc3LCA2NSwgMjA0LCA3MSwgNjUsIDcxLCAxMjgsIDcxLCA2NSwgNzAsIDEyOCwgNzEsIDY1LCAxOTgsIDcxLCA2NSwgCi0gICAgNjksIDg0LCA4NCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA2OCwgNzksIDc2LCAxMjgsIDcxLCAKLSAgICA2NSwgNjgsIDEyOCwgNzEsIDY1LCAxOTYsIDcxLCA2NSwgNjYsIDY1LCAxMjgsIDcxLCA2NSwgNjYsIDE5MywgNzEsIDY1LCAKLSAgICA2NSwgNzAsIDg1LCAxMjgsIDcxLCA2NSwgMTc4LCA3MSwgNDgsIDUzLCA1MiwgMTI4LCA3MSwgNDgsIDUzLCA1MSwgMTI4LCAKLSAgICA3MSwgNDgsIDUzLCA1MCwgMTI4LCA3MSwgNDgsIDUzLCA0OSwgMTI4LCA3MSwgNDgsIDUzLCA0OCwgMTI4LCA3MSwgNDgsIAotICAgIDUyLCA1NywgMTI4LCA3MSwgNDgsIDUyLCA1NiwgMTI4LCA3MSwgNDgsIDUyLCA1NSwgMTI4LCA3MSwgNDgsIDUyLCA1NCwgCi0gICAgMTI4LCA3MSwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIDEyOCwgNzEsIDQ4LCA1MiwgNTIsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MiwgNTEsIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUxLCAxMjgsIDcxLCA0OCwgNTIsIDUwLCAxMjgsIDcxLCAKLSAgICA0OCwgNTIsIDQ5LCAxMjgsIDcxLCA0OCwgNTIsIDQ4LCAxMjgsIDcxLCA0OCwgNTEsIDU3LCAxMjgsIDcxLCA0OCwgNTEsIAotICAgIDU2LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDEyOCwgNzEsIDQ4LCA1MSwgNTMsIDEyOCwgNzEsIDQ4LCA1MSwgNTIsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MSwgNTEsIDEyOCwgNzEsIDQ4LCA1MSwgNTAsIDEyOCwgNzEsIDQ4LCA1MSwgNDksIDEyOCwgNzEsIDQ4LCAKLSAgICA1MSwgNDgsIDEyOCwgNzEsIDQ4LCA1MCwgNTcsIDEyOCwgNzEsIDQ4LCA1MCwgNTYsIDEyOCwgNzEsIDQ4LCA1MCwgNTUsIAotICAgIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAxMjgsIDcxLCA0OCwgNTAsIDUzLCAxMjgsIAotICAgIDcxLCA0OCwgNTAsIDUyLCAxMjgsIDcxLCA0OCwgNTAsIDUxLCAxMjgsIDcxLCA0OCwgNTAsIDUwLCAxMjgsIDcxLCA0OCwgCi0gICAgNTAsIDQ5LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA3MSwgNDgsIDUwLCA0OCwgMTI4LCA3MSwgNDgsIDQ5LCAKLSAgICA1NywgMTI4LCA3MSwgNDgsIDQ5LCA1NiwgMTI4LCA3MSwgNDgsIDQ5LCA1NSwgMTI4LCA3MSwgNDgsIDQ5LCA1NCwgMTI4LCAKLSAgICA3MSwgNDgsIDQ5LCA1MywgMTI4LCA3MSwgNDgsIDQ5LCA1MiwgMTI4LCA3MSwgNDgsIDQ5LCA1MSwgMTI4LCA3MSwgNDgsIAotICAgIDQ5LCA1MCwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDEyOCwgNzEsIDQ4LCA0OSwgCi0gICAgNDgsIDEyOCwgNzEsIDQ4LCA0OCwgNTcsIDEyOCwgNzEsIDQ4LCA0OCwgNTYsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY2LCAKLSAgICAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgNjUsIAotICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDEyOCwgNzEsIDQ4LCA0OCwgNTMsIDEyOCwgNzEsIDQ4LCA0OCwgNTIsIDEyOCwgNzEsIAotICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzEsIDQ4LCA0OCwgNTAsIDEyOCwgNzEsIDQ4LCA0OCwgNDksIDEyOCwgNzAsIDg5LCA4OCwgCi0gICAgMTI4LCA3MCwgODksIDg0LCAxMjgsIDcwLCA4OSwgODAsIDEyOCwgNzAsIDg5LCA2NSwgMTI4LCA3MCwgODcsIDczLCAxMjgsIAotICAgIDcwLCA4NywgNjksIDY5LCAxMjgsIDcwLCA4NywgNjksIDEyOCwgNzAsIDg3LCA2NSwgNjUsIDEyOCwgNzAsIDg3LCA2NSwgCi0gICAgMTI4LCA3MCwgODYsIDgzLCA1MSwgMTI4LCA3MCwgODYsIDgzLCA1MCwgMTI4LCA3MCwgODYsIDgzLCA0OSwgMTI4LCA3MCwgCi0gICAgODUsIDg4LCAxMjgsIDcwLCA4NSwgODQsIDEyOCwgNzAsIDg1LCA4MywgNjksIDEyOCwgNzAsIDg1LCA4MywgMTkzLCA3MCwgCi0gICAgODUsIDgyLCA4OCwgMTI4LCA3MCwgODUsIDgwLCAxMjgsIDcwLCA4NSwgNzgsIDY5LCA4MiwgNjUsIDIwNCwgNzAsIDg1LCAKLSAgICA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzAsIAotICAgIDg1LCA3NiwgNzYsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcwLCA4NSwgNzYsIDIwNCwgNzAsIDg1LCA3NCwgNzMsIDEyOCwgCi0gICAgNzAsIDg1LCA2OSwgODQsIDEyOCwgNzAsIDg1LCA2OSwgMjA0LCA3MCwgODUsIDY5LCAxMjgsIDcwLCA4NCwgNzIsIDc5LCAKLSAgICA4MiwgMTkzLCA3MCwgODMsIDczLCAxMjgsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgODIsIAotICAgIDc5LCA4NywgNzgsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCA4NywgNzgsIDEyOCwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgCi0gICAgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCAKLSAgICA3MCwgODIsIDc5LCAyMDUsIDcwLCA4MiwgNzksIDcxLCAxMjgsIDcwLCA4MiwgNzksIDE5OSwgNzAsIDgyLCA3MywgODQsIAotICAgIDg1LCAxMjgsIDcwLCA4MiwgNzMsIDY5LCA4MywgMTI4LCA3MCwgODIsIDczLCA2OSwgMTk2LCA3MCwgODIsIDczLCA2NywgCi0gICAgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcwLCA4MiwgNjksIDg0LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDgyLCAKLSAgICA2OSwgNzgsIDY3LCAyMDAsIDcwLCA4MiwgNjksIDY5LCAxMjgsIDcwLCA4MiwgNjksIDE5NywgNzAsIDgyLCA2NSwgNzgsIAotICAgIDE5NSwgNzAsIDgyLCA2NSwgNzcsIDY5LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA3MCwgCi0gICAgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzAsIDgyLCA2NSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzAsIDc5LCAKLSAgICA4OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIAotICAgIDIwNiwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA0NSwgCi0gICAgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3OSwgODUsIDgyLCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDcwLCAKLSAgICA3OSwgODUsIDgyLCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzksIDg1LCAyMTAsIDcwLCA3OSwgODUsIDc4LCA4NCwgNjUsIAotICAgIDczLCA3OCwgMTI4LCA3MCwgNzksIDgzLCA4NCwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDg3LCA2NSwgCi0gICAgODIsIDY4LCAxMjgsIDcwLCA3OSwgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzksIDgyLCA4NCwgMjE3LCA3MCwgNzksIDgyLCAKLSAgICA4NCwgNjksIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDIxMSwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgODQsIDczLCA3OCwgNzEsIAotICAgIDEyOCwgNzAsIDc5LCA4MiwgNzUsIDY5LCAxOTYsIDcwLCA3OSwgODIsIDY3LCA2OSwgODMsIDEyOCwgNzAsIDc5LCA4MiwgCi0gICAgNjcsIDY5LCAxMjgsIDcwLCA3OSwgODAsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDgzLCA4NCwgNzksIDc5LCA3NiwgMTI4LCAKLSAgICA3MCwgNzksIDc5LCA4NCwgODAsIDgyLCA3MywgNzgsIDg0LCA4MywgMTI4LCA3MCwgNzksIDc5LCA4NCwgNzgsIDc5LCA4NCwgCi0gICAgMTk3LCA3MCwgNzksIDc5LCA4NCwgNjYsIDY1LCA3NiwgNzYsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDEyOCwgNzAsIDc5LCAKLSAgICA3OSwgNjgsIDEyOCwgNzAsIDc5LCA3OSwgMTI4LCA3MCwgNzksIDc4LCA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIAotICAgIDc3LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgNzksIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAKLSAgICAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgODIsIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCAxOTYsIDcwLCA3OSwgNzEsIAotICAgIDcxLCA4OSwgMTI4LCA3MCwgMjA3LCA3MCwgNzcsIDEyOCwgNzAsIDc2LCA4OSwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgODQsIAotICAgIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3NiwgODUsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDg1LCA4MywgNzIsIDY5LCAKLSAgICAxOTYsIDcwLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzAsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDcwLCA3NiwgNzksIAotICAgIDg1LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjksIDg0LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA3OSwgCi0gICAgODIsIDY1LCAyMDQsIDcwLCA3NiwgNzksIDgwLCA4MCwgMjE3LCA3MCwgNzYsIDc5LCA3OSwgODIsIDEyOCwgNzAsIDc2LCAKLSAgICA3MywgODAsIDEyOCwgNzAsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzYsIDY5LCA4OCwgODUsIDgzLCAxMjgsIAotICAgIDcwLCA3NiwgNjksIDg4LCA2OSwgMTk2LCA3MCwgNzYsIDY5LCA4NSwgODIsIDQ1LCA2OCwgNjksIDQ1LCA3NiwgNzMsIDgzLCAKLSAgICAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIDc4LCA2OSwgMTk2LCA3MCwgNzYsIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIAotICAgIDEyOCwgNzAsIDc2LCA2NSwgODQsIDEyOCwgNzAsIDc2LCA2NSwgMjEyLCA3MCwgNzYsIDY1LCA3MSwgODMsIDEyOCwgNzAsIAotICAgIDc2LCA2NSwgNzEsIDQ1LCA1MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUyLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgCi0gICAgNTEsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MCwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDQ5LCAxMjgsIDcwLCAKLSAgICA3NiwgNjUsIDcxLCAxMjgsIDcwLCA3NiwgNjUsIDE5OSwgNzAsIDc2LCA2NSwgMTI4LCA3MCwgNzYsIDEyOCwgNzAsIDczLCAKLSAgICA4OCwgNjksIDY4LCA0NSwgNzAsIDc5LCA4MiwgMjA1LCA3MCwgNzMsIDg4LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgODQsIAotICAgIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDczLCA4NiwgCi0gICAgMTk3LCA3MCwgNzMsIDg0LCA2NSwgMTI4LCA3MCwgNzMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDg0LCA2OSwgMTk2LCA3MCwgCi0gICAgNzMsIDgzLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAKLSAgICA3NSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgMjAzLCA3MCwgNzMsIDgzLCA3MiwgNjksIDg5LCA2OSwgCi0gICAgMTI4LCA3MCwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzMsIDgzLCAyMDAsIDcwLCA3MywgODIsIDgzLCAyMTIsIDcwLCA3MywgCi0gICAgODIsIDczLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgNzksIDgyLCA3NSwgODMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCAKLSAgICA3OSwgODIsIDIwMywgNzAsIDczLCA4MiwgNjksIDEyOCwgNzAsIDczLCA4MiwgMTk3LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCAKLSAgICA3MywgNzgsIDczLCA4NCwgMTk3LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIAotICAgIDczLCA3OCwgNzEsIDY5LCA4MiwgNjksIDE5NiwgNzAsIDczLCA3OCwgNjUsIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgCi0gICAgNzMsIDc2LCA3NiwgNjksIDgyLCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgMTk2LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCAKLSAgICA3MCwgNzMsIDc2LCAyMDQsIDcwLCA3MywgNzYsIDE5NywgNzAsIDczLCA3MywgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAotICAgIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCi0gICAgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDE5NywgNzAsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCAKLSAgICA3MywgNzAsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgMjE3LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIAotICAgIDcwLCA3MywgNzAsIDg0LCA3MiwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgCi0gICAgNjksIDY5LCAyMDYsIDcwLCA3MywgNjksIDc2LCA2OCwgMTI4LCA3MCwgNzIsIDg0LCA3OSwgODIsIDE5MywgNzAsIDcwLCAKLSAgICA3NiwgMTI4LCA3MCwgNzAsIDczLCAxMjgsIDcwLCA2OSwgODUsIDg4LCAxMjgsIDcwLCA2OSwgODUsIDcwLCA2OSwgODUsIAotICAgIDY1LCA2OSwgODQsIDEyOCwgNzAsIDY5LCA4MywgODQsIDczLCA4NiwgNjUsIDc2LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA4OSwgCi0gICAgMTI4LCA3MCwgNjksIDgyLCA4MiwgNzMsIDIxMSwgNzAsIDY5LCA4MiwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzAsIDY5LCAKLSAgICA4MiwgNzcsIDY1LCA4NCwgMTkzLCA3MCwgNjksIDc5LCAyMDAsIDcwLCA2OSwgNzgsIDE5OSwgNzAsIDY5LCA3OCwgNjcsIAotICAgIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDczLCA3OCwgNzMsIDc4LCAxOTcsIDcwLCA2OSwgNzcsIDY1LCA3NiwgNjksIDEyOCwgCi0gICAgNzAsIDY5LCA3NywgNjUsIDc2LCAxOTcsIDcwLCA2OSwgNzYsIDc2LCA3OSwgODcsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDcwLCAKLSAgICA2OSwgNzMsIDEyOCwgNzAsIDY5LCA3MiwgMjEzLCA3MCwgNjksIDcyLCAxMjgsIDcwLCA2OSwgMjAwLCA3MCwgNjksIDY5LCAKLSAgICA3OCwgNzEsIDEyOCwgNzAsIDY5LCA2OSwgNjgsIDEyOCwgNzAsIDY5LCA2OSwgMTk2LCA3MCwgNjksIDY5LCAxMjgsIDcwLCAKLSAgICA2OSwgNjYsIDgyLCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjksIAotICAgIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2OSwgNjUsIDgyLCA3OCwgMTI4LCA3MCwgNjksIDY1LCA4MiwgNzAsIDg1LCAKLSAgICAyMDQsIDcwLCA2OSwgNjUsIDgyLCAxMjgsIDcwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcwLCA2NSwgODksIAotICAgIDEyOCwgNzAsIDY1LCA4OCwgMTI4LCA3MCwgNjUsIDIxNiwgNzAsIDY1LCA4NCwgNzMsIDcxLCA4NSwgNjksIDEyOCwgNzAsIAotICAgIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgCi0gICAgNjUsIDc4LCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIDY1LCAyMDYsIDcwLCA2NSwgODQsIDcyLCA2NSwgMTI4LCAKLSAgICA3MCwgNjUsIDg0LCA3MiwgMTkzLCA3MCwgNjUsIDg0LCAxMjgsIDcwLCA2NSwgODIsIDgzLCAyMDEsIDcwLCA2NSwgODEsIAotICAgIDEyOCwgNzAsIDY1LCA4MCwgMTI4LCA3MCwgNjUsIDc4LCA3MSwgMTI4LCA3MCwgNjUsIDc4LCA2OSwgODIsIDc5LCA4MywgCi0gICAgNzMsIDIxMSwgNzAsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDc3LCA3MywgNzYsIDg5LCAxMjgsIDcwLCA2NSwgNzYsIDc2LCAKLSAgICA3MywgNzgsIDE5OSwgNzAsIDY1LCA3NiwgNzYsIDY5LCAyMDYsIDcwLCA2NSwgNzMsIDc2LCA4NSwgODIsIDY5LCAxMjgsIAotICAgIDcwLCA2NSwgNzMsIDcyLCA4NSwgMTI4LCA3MCwgNjUsIDcyLCA4MiwgNjksIDc4LCA3MiwgNjksIDczLCA4NCwgMTI4LCA3MCwgCi0gICAgNjUsIDY3LCA4NCwgNzksIDgyLCA4OSwgMTI4LCA3MCwgNjUsIDY3LCA4NCwgNzksIDIxMCwgNzAsIDY1LCA2NywgODMsIDczLCAKLSAgICA3NywgNzMsIDc2LCAxOTcsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTQsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MywgCi0gICAgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUyLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDY1LCAKLSAgICA2NywgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA2NSwgNjUsIDc3LCA2NSwgNjksIAotICAgIDEyOCwgNzAsIDY1LCA2NSwgNzMsIDEyOCwgNzAsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcwLCA0OCwgNTMsIDUxLCAxMjgsIAotICAgIDcwLCA0OCwgNTMsIDUwLCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NywgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjYsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MywgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCAxMjgsIDcwLCA0OCwgNTMsIDQ4LCAxMjgsIDcwLCAKLSAgICA0OCwgNTIsIDU3LCAxMjgsIDcwLCA0OCwgNTIsIDU2LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIAotICAgIDUyLCA1NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDEyOCwgNzAsIDQ4LCA1MiwgCi0gICAgNTMsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDUzLCAxMjgsIDcwLCA0OCwgNTIsIDUyLCAxMjgsIDcwLCA0OCwgNTIsIDUxLCAKLSAgICAxMjgsIDcwLCA0OCwgNTIsIDUwLCAxMjgsIDcwLCA0OCwgNTIsIDQ5LCAxMjgsIDcwLCA0OCwgNTIsIDQ4LCAxMjgsIDcwLCAKLSAgICA0OCwgNTEsIDU3LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NiwgMTI4LCA3MCwgNDgsIAotICAgIDUxLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNTUsIDEyOCwgNzAsIDQ4LCA1MSwgNTQsIDEyOCwgNzAsIDQ4LCA1MSwgCi0gICAgNTMsIDEyOCwgNzAsIDQ4LCA1MSwgNTIsIDEyOCwgNzAsIDQ4LCA1MSwgNTEsIDEyOCwgNzAsIDQ4LCA1MSwgNTAsIDEyOCwgCi0gICAgNzAsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDQ5LCAxMjgsIDcwLCA0OCwgNTEsIDQ4LCAxMjgsIDcwLCAKLSAgICA0OCwgNTAsIDU3LCAxMjgsIDcwLCA0OCwgNTAsIDU2LCAxMjgsIDcwLCA0OCwgNTAsIDU1LCAxMjgsIDcwLCA0OCwgNTAsIAotICAgIDU0LCAxMjgsIDcwLCA0OCwgNTAsIDUzLCAxMjgsIDcwLCA0OCwgNTAsIDUyLCAxMjgsIDcwLCA0OCwgNTAsIDUxLCAxMjgsIAotICAgIDcwLCA0OCwgNTAsIDUwLCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgMTI4LCA3MCwgCi0gICAgNDgsIDUwLCA0OCwgMTI4LCA3MCwgNDgsIDQ5LCA1NywgMTI4LCA3MCwgNDgsIDQ5LCA1NiwgMTI4LCA3MCwgNDgsIDQ5LCAKLSAgICA1NSwgMTI4LCA3MCwgNDgsIDQ5LCA1NCwgMTI4LCA3MCwgNDgsIDQ5LCA1MywgMTI4LCA3MCwgNDgsIDQ5LCA1MiwgMTI4LCAKLSAgICA3MCwgNDgsIDQ5LCA1MSwgNjUsIDEyOCwgNzAsIDQ4LCA0OSwgNTEsIDEyOCwgNzAsIDQ4LCA0OSwgNTAsIDEyOCwgNzAsIAotICAgIDQ4LCA0OSwgNDksIDEyOCwgNzAsIDQ4LCA0OSwgNDgsIDEyOCwgNzAsIDQ4LCA0OCwgNTcsIDEyOCwgNzAsIDQ4LCA0OCwgCi0gICAgNTYsIDEyOCwgNzAsIDQ4LCA0OCwgNTUsIDEyOCwgNzAsIDQ4LCA0OCwgNTQsIDEyOCwgNzAsIDQ4LCA0OCwgNTMsIDEyOCwgCi0gICAgNzAsIDQ4LCA0OCwgNTIsIDEyOCwgNzAsIDQ4LCA0OCwgNTEsIDEyOCwgNzAsIDQ4LCA0OCwgNTAsIDEyOCwgNzAsIDQ4LCAKLSAgICA0OCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA5MCwgMjAwLCA2OSwgOTAsIDY5LCA3OCwgMTI4LCAKLSAgICA2OSwgOTAsIDY5LCAyMDYsIDY5LCA5MCwgMTI4LCA2OSwgODksIDY5LCA4MywgMTI4LCA2OSwgODksIDY5LCA3MSwgNzYsIAotICAgIDY1LCA4MywgODMsIDY5LCA4MywgMTI4LCA2OSwgODksIDY2LCA2OSwgODksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA4OSwgCi0gICAgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIDg4LCA4NCwgODIsIDY1LCA4NCwgNjksIDgyLCA4MiwgNjksIDgzLCA4NCwgODIsIAotICAgIDczLCA2NSwgMjA0LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3NiwgNzksIDIxNSwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgCi0gICAgNzIsIDczLCA3MSwgMjAwLCA2OSwgODgsIDg0LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgODQsIDY5LCAKLSAgICA3OCwgNjgsIDY5LCAxOTYsIDY5LCA4OCwgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCA3NiwgNjksIDgzLCAyMTEsIAotICAgIDY5LCA4OCwgODAsIDc5LCA3OCwgNjksIDc4LCAyMTIsIDY5LCA4OCwgNzksIDEyOCwgNjksIDg4LCAyMDcsIDY5LCA4OCwgCi0gICAgNzMsIDgzLCA4NCwgODMsIDEyOCwgNjksIDg4LCA3MywgODMsIDg0LCAxMjgsIDY5LCA4OCwgNzIsIDY1LCA4NSwgODMsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIAotICAgIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgODgsIDY3LCA3MiwgNjUsIDc4LCA3MSwgNjksIDEyOCwgCi0gICAgNjksIDg4LCA2NywgNjksIDgzLCA4MywgMTI4LCA2OSwgODgsIDY3LCA2OSwgNzYsIDc2LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCAKLSAgICA4NywgNjksIDEyOCwgNjksIDg2LCA2OSwgODIsIDcxLCA4MiwgNjksIDY5LCAyMDYsIDY5LCA4NiwgNjksIDc4LCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDY5LCA4NSwgODIsIDc5LCA4MCwgNjksIDY1LCAyMDYsIDY5LCA4NSwgODIsIDc5LCA4MCwgNjksIDQ1LCA2NSwgCi0gICAgNzAsIDgyLCA3MywgNjcsIDY1LCAxMjgsIDY5LCA4NSwgODIsIDc5LCA0NSwgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgNjcsIAotICAgIDIxNywgNjksIDg1LCA4MiwgMjA3LCA2OSwgODUsIDc2LCA2OSwgMjEwLCA2OSwgODUsIDQ1LCA4NSwgMTI4LCA2OSwgODUsIAotICAgIDQ1LCA3OSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNjksIDc5LCAxMjgsIDY5LCA4NSwgCi0gICAgNDUsIDY5LCAxMjgsIDY5LCA4NSwgNDUsIDY1LCAxMjgsIDY5LCA4NCwgODgsIDEyOCwgNjksIDg0LCA3OCwgNjUsIDcyLCAKLSAgICA4NCwgNjUsIDEyOCwgNjksIDg0LCA3MiwgNjksIDIwNCwgNjksIDg0LCA2OSwgODIsIDc5LCAyMDYsIDY5LCA4NCwgNjksIAotICAgIDgyLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA2OSwgODQsIDY2LCAxMjgsIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgCi0gICAgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDgzLCAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCAKLSAgICA2OSwgMTk2LCA2OSwgODMsIDcyLCA2OSwgNTEsIDEyOCwgNjksIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIDY5LCA4MywgNzIsIAotICAgIDE3OCwgNjksIDgzLCA3MiwgNDksIDU0LCAxMjgsIDY5LCA4MywgNjcsIDY1LCA4MCwgNjksIDEyOCwgNjksIDgzLCA2NywgCi0gICAgMTI4LCA2OSwgODMsIDY1LCAxMjgsIDY5LCA4MywgNDUsIDg0LCA2OSwgMTI4LCA2OSwgODIsIDgyLCA3OSwgODIsIDQ1LCAKLSAgICA2NiwgNjUsIDgyLCA4MiwgNjksIDE5NiwgNjksIDgyLCA4MiwgMTI4LCA2OSwgODIsIDczLCA3OCwgNTAsIDEyOCwgNjksIAotICAgIDgyLCA3MSwgMTI4LCA2OSwgODIsIDY1LCA4MywgMTk3LCA2OSwgODEsIDg1LCA3MywgODYsIDY1LCA3NiwgNjksIDc4LCAKLSAgICAyMTIsIDY5LCA4MSwgODUsIDczLCA2OCwgMTI4LCA2OSwgODEsIDg1LCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgCisgICAgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIDgyLCAxMjgsIDcxLCA2OSwgNjUsIDIxMCwgNzEsIDY5LCA1MCwgNTAsIDEyOCwgCisgICAgNzEsIDY4LCA2NSwgNzgsIDEyOCwgNzEsIDY3LCA3MywgNzEsIDEyOCwgNzEsIDY3LCA2NSwgMjA2LCA3MSwgNjYsIDc5LCAKKyAgICA3OCwgMTI4LCA3MSwgNjYsIDczLCA2OSwgMTk3LCA3MSwgNjYsIDY5LCA4NSwgODgsIDEyOCwgNzEsIDY2LCA2OSwgODQsIAorICAgIDEyOCwgNzEsIDY2LCA2NSwgODksIDczLCAxMjgsIDcxLCA2NiwgNjUsIDc1LCA4NSwgODIsIDg1LCA3OCwgNjksIDc4LCAKKyAgICAxMjgsIDcxLCA2NiwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDg1LCA3NSwgNzMsIDg0LCA4NCwgNjUsIDEyOCwgNzEsIAorICAgIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgMTI4LCA3MSwgNjUsIDg1LCA3OCwgODQsIDc2LCA2OSwgCisgICAgODQsIDEyOCwgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCAKKyAgICA3MywgNzgsIDE5OSwgNzEsIDY1LCA4NCwgNjksIDEyOCwgNzEsIDY1LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIAorICAgIDgyLCA4MywgNzIsIDg1LCA3OCwgNzMsIDEyOCwgNzEsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA2NSwgODIsIDc3LCA2OSwgCisgICAgNzgsIDg0LCAxMjgsIDcxLCA2NSwgODIsIDY4LCA2OSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgNTEsIDEyOCwgNzEsIDY1LCAKKyAgICA4MCwgODAsIDY5LCAxOTYsIDcxLCA2NSwgMjA4LCA3MSwgNjUsIDc4LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIAorICAgIDczLCA2NSwgMTI4LCA3MSwgNjUsIDc4LCA2OCwgMTkzLCA3MSwgNjUsIDc4LCA1MCwgMTI4LCA3MSwgNjUsIDc4LCAxNzgsIAorICAgIDcxLCA2NSwgNzcsIDc3LCA2NSwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA3NywgNzYsIDEyOCwgCisgICAgNzEsIDY1LCA3NywgNjksIDEyOCwgNzEsIDY1LCA3NywgMTk3LCA3MSwgNjUsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDY1LCAKKyAgICA3NywgNjUsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCAyMDQsIDcxLCA2NSwgNzEsIDEyOCwgNzEsIDY1LCA3MCwgMTI4LCAKKyAgICA3MSwgNjUsIDE5OCwgNzEsIDY1LCA2OSwgODQsIDg0LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIAorICAgIDY4LCA3OSwgNzYsIDEyOCwgNzEsIDY1LCA2OCwgMTI4LCA3MSwgNjUsIDE5NiwgNzEsIDY1LCA2NiwgNjUsIDEyOCwgNzEsIAorICAgIDY1LCA2NiwgMTkzLCA3MSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzEsIDY1LCAxNzgsIDcxLCA0OCwgNTMsIDUyLCAxMjgsIAorICAgIDcxLCA0OCwgNTMsIDUxLCAxMjgsIDcxLCA0OCwgNTMsIDUwLCAxMjgsIDcxLCA0OCwgNTMsIDQ5LCAxMjgsIDcxLCA0OCwgCisgICAgNTMsIDQ4LCAxMjgsIDcxLCA0OCwgNTIsIDU3LCAxMjgsIDcxLCA0OCwgNTIsIDU2LCAxMjgsIDcxLCA0OCwgNTIsIDU1LCAKKyAgICAxMjgsIDcxLCA0OCwgNTIsIDU0LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MywgMTI4LCAKKyAgICA3MSwgNDgsIDUyLCA1MiwgMTI4LCA3MSwgNDgsIDUyLCA1MSwgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDEyOCwgNzEsIAorICAgIDQ4LCA1MiwgNTAsIDEyOCwgNzEsIDQ4LCA1MiwgNDksIDEyOCwgNzEsIDQ4LCA1MiwgNDgsIDEyOCwgNzEsIDQ4LCA1MSwgCisgICAgNTcsIDEyOCwgNzEsIDQ4LCA1MSwgNTYsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCAKKyAgICAxMjgsIDcxLCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgMTI4LCA3MSwgNDgsIDUxLCA1MywgMTI4LCAKKyAgICA3MSwgNDgsIDUxLCA1MiwgMTI4LCA3MSwgNDgsIDUxLCA1MSwgMTI4LCA3MSwgNDgsIDUxLCA1MCwgMTI4LCA3MSwgNDgsIAorICAgIDUxLCA0OSwgMTI4LCA3MSwgNDgsIDUxLCA0OCwgMTI4LCA3MSwgNDgsIDUwLCA1NywgMTI4LCA3MSwgNDgsIDUwLCA1NiwgCisgICAgMTI4LCA3MSwgNDgsIDUwLCA1NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDEyOCwgCisgICAgNzEsIDQ4LCA1MCwgNTMsIDEyOCwgNzEsIDQ4LCA1MCwgNTIsIDEyOCwgNzEsIDQ4LCA1MCwgNTEsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MCwgNTAsIDEyOCwgNzEsIDQ4LCA1MCwgNDksIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIAorICAgIDQ4LCAxMjgsIDcxLCA0OCwgNDksIDU3LCAxMjgsIDcxLCA0OCwgNDksIDU2LCAxMjgsIDcxLCA0OCwgNDksIDU1LCAxMjgsIAorICAgIDcxLCA0OCwgNDksIDU0LCAxMjgsIDcxLCA0OCwgNDksIDUzLCAxMjgsIDcxLCA0OCwgNDksIDUyLCAxMjgsIDcxLCA0OCwgCisgICAgNDksIDUxLCAxMjgsIDcxLCA0OCwgNDksIDUwLCAxMjgsIDcxLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MSwgNDgsIDQ5LCAKKyAgICA0OSwgMTI4LCA3MSwgNDgsIDQ5LCA0OCwgMTI4LCA3MSwgNDgsIDQ4LCA1NywgMTI4LCA3MSwgNDgsIDQ4LCA1NiwgMTI4LCAKKyAgICA3MSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAxMjgsIAorICAgIDcxLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgMTI4LCA3MSwgNDgsIDQ4LCA1MywgMTI4LCA3MSwgCisgICAgNDgsIDQ4LCA1MiwgMTI4LCA3MSwgNDgsIDQ4LCA1MSwgMTI4LCA3MSwgNDgsIDQ4LCA1MCwgMTI4LCA3MSwgNDgsIDQ4LCAKKyAgICA0OSwgMTI4LCA3MCwgODksIDg4LCAxMjgsIDcwLCA4OSwgODQsIDEyOCwgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAKKyAgICAxMjgsIDcwLCA4NywgNzMsIDEyOCwgNzAsIDg3LCA2OSwgNjksIDEyOCwgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDY1LCAKKyAgICA2NSwgMTI4LCA3MCwgODcsIDY1LCAxMjgsIDcwLCA4NiwgODMsIDUxLCAxMjgsIDcwLCA4NiwgODMsIDUwLCAxMjgsIDcwLCAKKyAgICA4NiwgODMsIDQ5LCAxMjgsIDcwLCA4NSwgODgsIDEyOCwgNzAsIDg1LCA4NCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCAKKyAgICA3MCwgODUsIDgzLCAxOTMsIDcwLCA4NSwgODIsIDg4LCAxMjgsIDcwLCA4NSwgODAsIDEyOCwgNzAsIDg1LCA3OCwgNjksIAorICAgIDgyLCA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA3MCwgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCAKKyAgICA3MCwgODUsIDc0LCA3MywgMTI4LCA3MCwgODUsIDY5LCA4NCwgMTI4LCA3MCwgODUsIDY5LCAyMDQsIDcwLCA4NSwgNjksIAorICAgIDEyOCwgNzAsIDg1LCA2NSwgMTI4LCA3MCwgODQsIDcyLCA3OSwgODIsIDE5MywgNzAsIDgzLCA3MywgMTI4LCA3MCwgODIsIAorICAgIDc5LCA4NywgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDgyLCA3OSwgODcsIDc4LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgCisgICAgODcsIDc4LCAxMjgsIDcwLCA4MiwgNzksIDg3LCAyMDYsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIDg0LCA3MywgNzYsIDg0LCAKKyAgICA2OSwgMTk2LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgNzgsIAorICAgIDIxMiwgNzAsIDgyLCA3OSwgMjA1LCA3MCwgODIsIDc5LCA3MSwgMTI4LCA3MCwgODIsIDc5LCAxOTksIDcwLCA4MiwgNzMsIAorICAgIDg0LCA4NSwgMTI4LCA3MCwgODIsIDczLCA2OSwgODMsIDEyOCwgNzAsIDgyLCA3MywgNjksIDE5NiwgNzAsIDgyLCA3MywgCisgICAgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3MCwgODIsIDY5LCA4NCwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDcwLCAKKyAgICA4MiwgNjksIDc4LCA2NywgMjAwLCA3MCwgODIsIDY5LCA2OSwgMTI4LCA3MCwgODIsIDY5LCAxOTcsIDcwLCA4MiwgNjUsIAorICAgIDc4LCA3NSwgMjExLCA3MCwgODIsIDY1LCA3OCwgMTk1LCA3MCwgODIsIDY1LCA3NywgNjksIDgzLCAxMjgsIDcwLCA4MiwgCisgICAgNjUsIDc3LCA2OSwgMTI4LCA3MCwgODIsIDY1LCA3NywgMTk3LCA3MCwgODIsIDY1LCA3MSwgODIsIDY1LCA3OCwgODQsIAorICAgIDEyOCwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDcwLCA3OSwgODgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3OSwgODUsIAorICAgIDgyLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3OSwgODUsIDgyLCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgCisgICAgNzksIDg1LCA4MiwgNDUsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzksIDg1LCA4MiwgNDUsIDgwLCA2OSwgODIsIAorICAgIDQ1LCA2OSwgMjA1LCA3MCwgNzksIDg1LCA4MiwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDc5LCA4NSwgMjEwLCA3MCwgCisgICAgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDEyOCwgNzAsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNzAsIDc5LCAKKyAgICA4MywgODQsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA4NywgNjUsIDgyLCA2OCwgMTI4LCA3MCwgNzksIAorICAgIDgyLCA4NywgNjUsIDgyLCAxOTYsIDcwLCA3OSwgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzksIDgyLCA4NCwgMjE3LCA3MCwgCisgICAgNzksIDgyLCA4NCwgNjksIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDIxMSwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgODQsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDY1LCAyMTIsIDcwLCA3OSwgODIsIDc1LCA2OSwgMTk2LCA3MCwgNzksIAorICAgIDgyLCA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3MCwgNzksIDgyLCA2NywgNjksIDgzLCAxMjgsIDcwLCA3OSwgODIsIDY3LCA2OSwgCisgICAgMTI4LCA3MCwgNzksIDgwLCAxMjgsIDcwLCA3OSwgNzksIDg0LCA4MywgODQsIDc5LCA3OSwgNzYsIDEyOCwgNzAsIDc5LCAKKyAgICA3OSwgODQsIDgwLCA4MiwgNzMsIDc4LCA4NCwgODMsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDc4LCA3OSwgODQsIDE5NywgNzAsIAorICAgIDc5LCA3OSwgODQsIDY2LCA2NSwgNzYsIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCAxMjgsIDcwLCA3OSwgNzksIDc2LCAKKyAgICAxMjgsIDcwLCA3OSwgNzksIDY4LCAxMjgsIDcwLCA3OSwgNzksIDEyOCwgNzAsIDc5LCA3OCwgMjEyLCA3MCwgNzksIDc4LCAKKyAgICA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIDc3LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgNzksIAorICAgIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgODIsIDEyOCwgNzAsIDc5LCA3NiwgCisgICAgNjgsIDY5LCAxOTYsIDcwLCA3OSwgNzEsIDcxLCA4OSwgMTI4LCA3MCwgNzksIDcxLCAxMjgsIDcwLCAyMDcsIDcwLCA3NywgCisgICAgMTI4LCA3MCwgNzYsIDg5LCA3MywgNzgsIDE5OSwgNzAsIDc2LCA4OSwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgODQsIDY5LCAKKyAgICA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3NiwgODUsIAorICAgIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcwLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgCisgICAgNzAsIDc2LCA3OSwgODcsIDY5LCA4MiwgODMsIDEyOCwgNzAsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDcwLCA3NiwgNzksIDg1LCAKKyAgICA4MiwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjksIDg0LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA3OSwgODIsIAorICAgIDY1LCAyMDQsIDcwLCA3NiwgNzksIDgwLCA4MCwgMjE3LCA3MCwgNzYsIDc5LCA3OSwgODIsIDEyOCwgNzAsIDc2LCA3OSwgCisgICAgNzksIDIxMCwgNzAsIDc2LCA3MywgODAsIDEyOCwgNzAsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzYsIDczLCAKKyAgICA2NywgMjAzLCA3MCwgNzYsIDY5LCA4OCwgODUsIDgzLCAxMjgsIDcwLCA3NiwgNjksIDg4LCA2OSwgMTk2LCA3MCwgNzYsIAorICAgIDY5LCA4OCwgMTI4LCA3MCwgNzYsIDY5LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3MCwgNzYsIDY5LCA4NSwgODIsIDQ1LCA2OCwgCisgICAgNjksIDQ1LCA3NiwgNzMsIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIDc4LCA2OSwgMTk2LCA3MCwgNzYsIDY1LCAKKyAgICA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODMsIDcyLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA4MywgCisgICAgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTIsIDEyOCwgNzAsIDc2LCAKKyAgICA2NSwgNzEsIDQ1LCA1MSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUwLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNDksIAorICAgIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDEyOCwgNzAsIDc2LCA2NSwgMTk5LCA3MCwgNzYsIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCAKKyAgICA3MCwgNzMsIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAyMDUsIDcwLCA3MywgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIAorICAgIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgCisgICAgNzMsIDg2LCAxOTcsIDcwLCA3MywgODQsIDkwLCA4MCwgNjUsIDg0LCA4MiwgNzMsIDY3LCAyMDMsIDcwLCA3MywgODQsIDY1LCAKKyAgICAxMjgsIDcwLCA3MywgODQsIDEyOCwgNzAsIDczLCA4MywgODQsIDY5LCAxOTYsIDcwLCA3MywgODMsIDcyLCA3MywgNzgsIAorICAgIDE5OSwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDc1LCAxMjgsIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAKKyAgICAyMDMsIDcwLCA3MywgODMsIDcyLCA2OSwgODksIDY5LCAxMjgsIDcwLCA3MywgODMsIDcyLCAxMjgsIDcwLCA3MywgODMsIAorICAgIDIwMCwgNzAsIDczLCA4MiwgODMsIDIxMiwgNzAsIDczLCA4MiwgNzMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgCisgICAgODIsIDc1LCA4MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCA4MiwgMjAzLCA3MCwgNzMsIDgyLCA2OSwgMTI4LCAKKyAgICA3MCwgNzMsIDgyLCAxOTcsIDcwLCA3MywgODAsIDEyOCwgNzAsIDczLCA3OCwgNzMsIDg0LCAxOTcsIDcwLCA3MywgNzgsIAorICAgIDcxLCA2OSwgODIsIDgzLCAxMjgsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDIxMSwgNzAsIDczLCA3OCwgNzEsIDY5LCA4MiwgCisgICAgNzgsIDY1LCA3MywgNzYsIDgzLCAxMjgsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDY5LCAxOTYsIDcwLCA3MywgNzgsIDcxLCAKKyAgICA2OSwgODIsIDQ1LCA4MCwgNzksIDgzLCAyMTIsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDEyOCwgNzAsIDczLCA3OCwgNzEsIAorICAgIDY5LCAyMTAsIDcwLCA3MywgNzgsIDY1LCA3OCwgNjcsIDczLCA2NSwgNzYsIDEyOCwgNzAsIDczLCA3OCwgNjUsIDc2LCAKKyAgICAxMjgsIDcwLCA3MywgNzYsIDIwNSwgNzAsIDczLCA3NiwgNzYsIDY5LCA4MiwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIAorICAgIDE5NiwgNzAsIDczLCA3NiwgNzYsIDEyOCwgNzAsIDczLCA3NiwgMjA0LCA3MCwgNzMsIDc2LCAxOTcsIDcwLCA3MywgNzMsIAorICAgIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA1MCwgCisgICAgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAxOTcsIDcwLCAKKyAgICA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgODksIDEyOCwgNzAsIDczLCA3MCwgODQsIDIxNywgNzAsIAorICAgIDczLCA3MCwgODQsIDcyLCA4MywgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDEyOCwgNzAsIDczLCA3MCwgODQsIDY5LCA2OSwgCisgICAgNzgsIDEyOCwgNzAsIDczLCA3MCwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgNzAsIDczLCAKKyAgICA2OSwgNzYsIDE5NiwgNzAsIDcyLCA4NCwgNzksIDgyLCAxOTMsIDcwLCA3MCwgNzYsIDEyOCwgNzAsIDcwLCA3MywgMTI4LCAKKyAgICA3MCwgNjksIDg1LCA4OCwgMTI4LCA3MCwgNjksIDg1LCA3MCwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDcwLCA2OSwgODMsIAorICAgIDg0LCA3MywgODYsIDY1LCA3NiwgMTI4LCA3MCwgNjksIDgyLCA4MiwgODksIDEyOCwgNzAsIDY5LCA4MiwgODIsIDczLCAKKyAgICAyMTEsIDcwLCA2OSwgODIsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcwLCA2OSwgODIsIDc3LCA2NSwgODQsIDE5MywgNzAsIAorICAgIDY5LCA3OSwgMjAwLCA3MCwgNjksIDc4LCAxOTksIDcwLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MCwgNjksIDc3LCA3MywgCisgICAgNzgsIDczLCA3OCwgMTk3LCA3MCwgNjksIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDY1LCA3NiwgMTk3LCAKKyAgICA3MCwgNjksIDc2LCA3NiwgNzksIDg3LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3MCwgNjksIDczLCAxMjgsIDcwLCA2OSwgNzIsIAorICAgIDIxMywgNzAsIDY5LCA3MiwgMTI4LCA3MCwgNjksIDIwMCwgNzAsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDcwLCA2OSwgNjksIAorICAgIDc3LCAxMjgsIDcwLCA2OSwgNjksIDY4LCAxMjgsIDcwLCA2OSwgNjksIDE5NiwgNzAsIDY5LCA2OSwgMTI4LCA3MCwgNjksIAorICAgIDY2LCA4MiwgODUsIDY1LCA4MiwgODksIDEyOCwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY5LCA2NSwgCisgICAgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjksIDY1LCA4MiwgNzgsIDEyOCwgNzAsIDY5LCA2NSwgODIsIDcwLCA4NSwgMjA0LCAKKyAgICA3MCwgNjksIDY1LCA4MiwgMTI4LCA3MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MCwgNjUsIDg5LCAxMjgsIAorICAgIDcwLCA2NSwgODgsIDEyOCwgNzAsIDY1LCAyMTYsIDcwLCA2NSwgODQsIDczLCA3MSwgODUsIDY5LCAxMjgsIDcwLCA2NSwgCisgICAgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIDY1LCAKKyAgICA3OCwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgMjA2LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgNzAsIAorICAgIDY1LCA4NCwgNzIsIDE5MywgNzAsIDY1LCA4NCwgMTI4LCA3MCwgNjUsIDgzLCA4NCwgMTI4LCA3MCwgNjUsIDgyLCA4MywgCisgICAgMjAxLCA3MCwgNjUsIDgyLCAxMjgsIDcwLCA2NSwgODEsIDEyOCwgNzAsIDY1LCA4MCwgMTI4LCA3MCwgNjUsIDc4LCA3MSwgCisgICAgMTI4LCA3MCwgNjUsIDc4LCA2OSwgODIsIDc5LCA4MywgNzMsIDIxMSwgNzAsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDc3LCAKKyAgICA3MywgNzYsIDg5LCAxMjgsIDcwLCA2NSwgNzcsIDEyOCwgNzAsIDY1LCA3NiwgNzYsIDY5LCAyMDYsIDcwLCA2NSwgNzQsIAorICAgIDEyOCwgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCA2NSwgCisgICAgNzMsIDY2LCAxMjgsIDcwLCA2NSwgNzIsIDgyLCA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDg5LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIDc3LCA3MywgNzYsIAorICAgIDE5NywgNzAsIDY1LCA2NywgNzMsIDc4LCA3MSwgODMsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1NCwgMTI4LCA3MCwgCisgICAgNjUsIDY3LCA2OSwgNDUsIDUzLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCAKKyAgICA1MSwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIAorICAgIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MCwgNjUsIDY1LCA3MywgMTI4LCA3MCwgNjUsIDY1LCA3MCwgODUsIDEyOCwgCisgICAgNzAsIDQ4LCA1MywgNTEsIDEyOCwgNzAsIDQ4LCA1MywgNTAsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY3LCAxMjgsIDcwLCAKKyAgICA0OCwgNTMsIDQ5LCA2NiwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDEyOCwgNzAsIAorICAgIDQ4LCA1MywgNDgsIDEyOCwgNzAsIDQ4LCA1MiwgNTcsIDEyOCwgNzAsIDQ4LCA1MiwgNTYsIDEyOCwgNzAsIDQ4LCA1MiwgCisgICAgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCAKKyAgICA1NCwgMTI4LCA3MCwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTMsIDEyOCwgNzAsIDQ4LCA1MiwgNTIsIAorICAgIDEyOCwgNzAsIDQ4LCA1MiwgNTEsIDEyOCwgNzAsIDQ4LCA1MiwgNTAsIDEyOCwgNzAsIDQ4LCA1MiwgNDksIDEyOCwgNzAsIAorICAgIDQ4LCA1MiwgNDgsIDEyOCwgNzAsIDQ4LCA1MSwgNTcsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDY1LCAxMjgsIDcwLCA0OCwgCisgICAgNTEsIDU2LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NSwgMTI4LCA3MCwgNDgsIDUxLCAKKyAgICA1NCwgMTI4LCA3MCwgNDgsIDUxLCA1MywgMTI4LCA3MCwgNDgsIDUxLCA1MiwgMTI4LCA3MCwgNDgsIDUxLCA1MSwgMTI4LCAKKyAgICA3MCwgNDgsIDUxLCA1MCwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNDksIDEyOCwgNzAsIAorICAgIDQ4LCA1MSwgNDgsIDEyOCwgNzAsIDQ4LCA1MCwgNTcsIDEyOCwgNzAsIDQ4LCA1MCwgNTYsIDEyOCwgNzAsIDQ4LCA1MCwgCisgICAgNTUsIDEyOCwgNzAsIDQ4LCA1MCwgNTQsIDEyOCwgNzAsIDQ4LCA1MCwgNTMsIDEyOCwgNzAsIDQ4LCA1MCwgNTIsIDEyOCwgCisgICAgNzAsIDQ4LCA1MCwgNTEsIDEyOCwgNzAsIDQ4LCA1MCwgNTAsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDY1LCAxMjgsIDcwLCAKKyAgICA0OCwgNTAsIDQ5LCAxMjgsIDcwLCA0OCwgNTAsIDQ4LCAxMjgsIDcwLCA0OCwgNDksIDU3LCAxMjgsIDcwLCA0OCwgNDksIAorICAgIDU2LCAxMjgsIDcwLCA0OCwgNDksIDU1LCAxMjgsIDcwLCA0OCwgNDksIDU0LCAxMjgsIDcwLCA0OCwgNDksIDUzLCAxMjgsIAorICAgIDcwLCA0OCwgNDksIDUyLCAxMjgsIDcwLCA0OCwgNDksIDUxLCA2NSwgMTI4LCA3MCwgNDgsIDQ5LCA1MSwgMTI4LCA3MCwgCisgICAgNDgsIDQ5LCA1MCwgMTI4LCA3MCwgNDgsIDQ5LCA0OSwgMTI4LCA3MCwgNDgsIDQ5LCA0OCwgMTI4LCA3MCwgNDgsIDQ4LCAKKyAgICA1NywgMTI4LCA3MCwgNDgsIDQ4LCA1NiwgMTI4LCA3MCwgNDgsIDQ4LCA1NSwgMTI4LCA3MCwgNDgsIDQ4LCA1NCwgMTI4LCAKKyAgICA3MCwgNDgsIDQ4LCA1MywgMTI4LCA3MCwgNDgsIDQ4LCA1MiwgMTI4LCA3MCwgNDgsIDQ4LCA1MSwgMTI4LCA3MCwgNDgsIAorICAgIDQ4LCA1MCwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA0OCwgNDksIDEyOCwgNjksIDkwLCA4MywgCisgICAgMTI4LCA2OSwgOTAsIDIwMCwgNjksIDkwLCA2OSwgNzgsIDEyOCwgNjksIDkwLCA2OSwgMjA2LCA2OSwgOTAsIDEyOCwgNjksIAorICAgIDg5LCA4OSwgODksIDEyOCwgNjksIDg5LCA2OSwgODMsIDEyOCwgNjksIDg5LCA2OSwgMjExLCA2OSwgODksIDY5LCA3NiwgCisgICAgNjUsIDgzLCA3MiwgNjksIDIxMSwgNjksIDg5LCA2OSwgNzEsIDc2LCA2NSwgODMsIDgzLCA2OSwgODMsIDEyOCwgNjksIDg5LCAKKyAgICA2OSwgNzEsIDY1LCA5MCwgNjksIDQ1LCA4NywgNjUsIDc2LCA3NiwgODAsIDc2LCA2NSwgNzgsIDE5NywgNjksIDg5LCA2OSwgCisgICAgNzEsIDY1LCA5MCwgNjksIDQ1LCA3MCwgNzYsIDc5LCA3OSwgODIsIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDY5LCA4OSwgNjksIAorICAgIDY2LCA4MiwgNzksIDg3LCAyMTEsIDY5LCA4OSwgMTk3LCA2OSwgODksIDY2LCA2OSwgODksIDcwLCA3MywgNzYsIDczLCAKKyAgICAxMjgsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIDg4LCA4NCwgODIsIDY5LCA3NywgNjksIDc2LCAyMTcsIAorICAgIDY5LCA4OCwgODQsIDgyLCA2NSwgODQsIDY5LCA4MiwgODIsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNjksIDg4LCAKKyAgICA4NCwgODIsIDY1LCA0NSwgNzYsIDc5LCAyMTUsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDcyLCA3MywgNzEsIDIwMCwgNjksIAorICAgIDg4LCA4NCwgODIsIDE5MywgNjksIDg4LCA4NCwgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDg0LCA2OSwgCisgICAgNzgsIDY4LCA2OSwgNjgsIDEyOCwgNjksIDg4LCA4NCwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjksIDg4LCA4MCwgODIsIDY5LCAKKyAgICA4MywgODMsIDczLCA3OSwgNzgsIDc2LCA2OSwgODMsIDIxMSwgNjksIDg4LCA4MCwgNzksIDc4LCA2OSwgNzgsIDIxMiwgNjksIAorICAgIDg4LCA3OSwgMTI4LCA2OSwgODgsIDIwNywgNjksIDg4LCA3MywgODMsIDg0LCA4MywgMTI4LCA2OSwgODgsIDczLCA4MywgCisgICAgODQsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDg1LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA3MiwgNjUsIDc2LCAKKyAgICA2OSwgMTI4LCA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIAorICAgIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDg4LCA2NywgNzMsIDg0LCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgCisgICAgNjksIDg4LCA2NywgNzIsIDY1LCA3OCwgNzEsIDY5LCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgNjksIDg4LCAKKyAgICA2NywgNjksIDc2LCA3NiwgNjksIDc4LCA4NCwgMTI4LCA2OSwgODcsIDY5LCAxMjgsIDY5LCA4NiwgNjksIDgyLCAyMTcsIAorICAgIDY5LCA4NiwgNjksIDgyLCA3MSwgODIsIDY5LCA2OSwgMjA2LCA2OSwgODYsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2OSwgCisgICAgODUsIDgyLCA3OSwgODAsIDY5LCA2NSwgMjA2LCA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA0NSwgNjUsIDcwLCA4MiwgNzMsIAorICAgIDY3LCA2NSwgMTI4LCA2OSwgODUsIDgyLCA3OSwgNDUsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDY3LCAyMTcsIDY5LCA4NSwgCisgICAgODIsIDIwNywgNjksIDg1LCA3NiwgNjksIDIxMCwgNjksIDg1LCA0NSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNzksIDEyOCwgCisgICAgNjksIDg1LCA0NSwgNjksIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgMTI4LCAKKyAgICA2OSwgODUsIDQ1LCA2NSwgMTI4LCA2OSwgODQsIDg4LCAxMjgsIDY5LCA4NCwgNzgsIDY1LCA3MiwgODQsIDY1LCAxMjgsIAorICAgIDY5LCA4NCwgNzIsIDY5LCAyMDQsIDY5LCA4NCwgNjksIDgyLCA3OSwgMjA2LCA2OSwgODQsIDY5LCA4MiwgNzgsIDczLCA4NCwgCisgICAgODksIDEyOCwgNjksIDg0LCA2OSwgODIsIDc4LCA3MywgODQsIDIxNywgNjksIDg0LCA2NiwgMTI4LCA2OSwgODMsIDkwLCAKKyAgICAxMjgsIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIAorICAgIDgzLCAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgMTk2LCA2OSwgODMsIDcyLCA2OSwgNTEsIDEyOCwgCisgICAgNjksIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIDY5LCA4MywgNzIsIDQ5LCA1NCwgMTI4LCA2OSwgODMsIDY3LCA2NSwgODAsIDY5LCAKKyAgICAxMjgsIDY5LCA4MywgNjcsIDEyOCwgNjksIDgzLCA2NSwgMTI4LCA2OSwgODMsIDQ1LCA4NCwgNjksIDEyOCwgNjksIDgzLCAKKyAgICA0NSwgNTEsIDEyOCwgNjksIDgzLCA0NSwgNTAsIDEyOCwgNjksIDgzLCA0NSwgNDksIDEyOCwgNjksIDgyLCA4MiwgNzksIAorICAgIDgyLCA0NSwgNjYsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDY5LCA4MiwgODIsIDEyOCwgNjksIDgyLCA3MywgNzgsIDUwLCAKKyAgICAxMjgsIDY5LCA4MiwgNzMsIDc4LCAxNzgsIDY5LCA4MiwgNzEsIDEyOCwgNjksIDgyLCA2NSwgODMsIDE5NywgNjksIDgxLCAKKyAgICA4NSwgNzMsIDg2LCA2NSwgNzYsIDY5LCA3OCwgMjEyLCA2OSwgODEsIDg1LCA3MywgNzYsIDY1LCA4NCwgNjksIDgyLCA2NSwgCisgICAgMjA0LCA2OSwgODEsIDg1LCA3MywgNjgsIDEyOCwgNjksIDgxLCA4NSwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIAogICAgIDIxMCwgNjksIDgxLCA4NSwgNjUsIDc2LCA4MywgMTI4LCA2OSwgODEsIDg1LCA2NSwgNzYsIDIxMSwgNjksIDgxLCA4NSwgCiAgICAgNjUsIDc2LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDc4LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIAogICAgIDIwNiwgNjksIDgwLCA3OSwgNjcsIDcyLCAxMjgsIDY5LCA4MCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgCiAgICAgNjksIDgwLCA3MywgNjgsIDY1LCA4NSwgODIsIDY5LCA2NSwgMjA2LCA2OSwgODAsIDY5LCA3OCwgODQsIDcyLCA2OSwgODQsIAotICAgIDczLCAxOTUsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIDc3LCA2NSwgMTI4LCA2OSwgNzksIDg0LCAxMjgsIDY5LCA3OSwgCi0gICAgNzcsIDEyOCwgNjksIDc5LCA3NiwgNzIsIDg4LCAxMjgsIDY5LCA3OSwgNzYsIDEyOCwgNjksIDc5LCA3MiwgMTI4LCA2OSwgCi0gICAgNzgsIDg5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgNzksIDgwLCA2OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCAKLSAgICA4MCwgMTk3LCA2OSwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgNzgsIDg0LCA4MiwgODksIAotICAgIDQ1LCA1MCwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDQ1LCA0OSwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDEyOCwgCi0gICAgNjksIDc4LCA4NCwgODIsIDIxNywgNjksIDc4LCA4NCwgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIDc4LCAKLSAgICA4NCwgNjksIDgyLCA4MCwgODIsIDczLCA4MywgNjksIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNjksIAotICAgIDc4LCA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OCwgODQsIDY5LCAyMTAsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAKLSAgICAxMjgsIDY5LCA3OCwgODEsIDEyOCwgNjksIDc4LCA3OSwgMjExLCA2OSwgNzgsIDc4LCAxMjgsIDY5LCA3OCwgNzYsIDY1LCAKLSAgICA4MiwgNzEsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OSwgNzgsIDcxLCA3MywgNzgsIDY5LCAxMjgsIDY5LCA3OCwgNjgsIAotICAgIDc5LCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY5LCA3OCwgNjgsIDY5LCA4MCwgCi0gICAgMTI4LCA2OSwgNzgsIDY4LCA2OSwgNjUsIDg2LCA3OSwgODUsIDgyLCAxMjgsIDY5LCA3OCwgNjcsIDc5LCA4NSwgNzgsIDg0LCAKLSAgICA2OSwgODIsIDgzLCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNjksIDc4LCA2NywgNzYsIAotICAgIDc5LCA4MywgNzMsIDc4LCAxOTksIDY5LCA3OCwgNjcsIDEyOCwgNjksIDc4LCA2NSwgODIsIDg4LCA3MywgMjExLCA2OSwgCi0gICAgNzgsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDc5LCAyMTEsIDY5LCA3NywgODAsIDg0LCAyMTcsIDY5LCA3NywgODAsIDcyLCAKLSAgICA2NSwgODQsIDczLCAxOTUsIDY5LCA3NywgODAsIDcyLCA2NSwgODMsIDczLCAyMTEsIDY5LCA3NywgNjYsIDgyLCA3OSwgNzMsIAotICAgIDY4LCA2OSwgODIsIDg5LCAxMjgsIDY5LCA3NywgNjYsIDc2LCA2OSwgNzcsIDEyOCwgNjksIDc3LCA2NiwgNjksIDc2LCA3NiwgCi0gICAgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc3LCA2NiwgNjksIDY4LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCAKLSAgICA2OSwgNzYsIDg0LCAxMjgsIDY5LCA3NiwgNzYsIDczLCA4MCwgODQsIDczLCAxOTUsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIAotICAgIDczLCA4MywgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA2OSwgMTI4LCA2OSwgNzYsIDczLCA3MCwgNzMsIDEyOCwgCi0gICAgNjksIDc2LCA2OSwgODYsIDY5LCA3OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNjksIDc2LCA2OSwgODYsIAotICAgIDY5LCA3OCwgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIDIwNiwgNjksIDc2LCA2OSwgODAsIDcyLCA2NSwgNzgsIDg0LCAKLSAgICAxMjgsIDY5LCA3NiwgNjksIDc3LCA2OSwgNzgsIDIxMiwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDY3LCA2NSwgCi0gICAgMjA0LCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCA3MywgMTk1LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCAKLSAgICA2OSwgNzUsIDgzLCA4NCwgODIsIDY5LCA4MCwgODQsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3NSwgNzAsIAotICAgIDc5LCA3OCwgNzMsIDg0LCA3MywgNzUsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc0LCA2OSwgCi0gICAgNjcsIDIxMiwgNjksIDczLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNzEsIDcyLCAKLSAgICA4NCwgMjE3LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAyMTEsIAotICAgIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDY5LCA3MywgCi0gICAgNzEsIDcyLCA4NCwgNjksIDY5LCAyMDYsIDY5LCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIAotICAgIDEyOCwgNjksIDczLCA2OSwgMTI4LCA2OSwgNzIsIDg3LCA2NSwgMjE4LCA2OSwgNzEsIDg5LCA4MCwgODQsIDc5LCA3NiwgCi0gICAgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3MSwgNzMsIDgyLCAxMjgsIDY5LCA3MSwgNzEsIDEyOCwgNjksIDY5LCAKKyAgICA3MywgMTk1LCA2OSwgODAsIDY5LCA3MSwgNjksIDgyLCA3NywgNjUsIDEyOCwgNjksIDgwLCA2NSwgNjcsIDIxMiwgNjksIAorICAgIDc5LCA4NCwgMTI4LCA2OSwgNzksIDc3LCAxMjgsIDY5LCA3OSwgNzYsIDcyLCA4OCwgMTI4LCA2OSwgNzksIDc2LCAxMjgsIAorICAgIDY5LCA3OSwgNzIsIDEyOCwgNjksIDc4LCA4OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgNjksIDEyOCwgCisgICAgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgODAsIDE5NywgNjksIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNTAsIDEyOCwgNjksIDc4LCA4NCwgODIsIDg5LCA0NSwgNDksIDEyOCwgCisgICAgNjksIDc4LCA4NCwgODIsIDg5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY5LCA3OCwgODQsIDcyLCA4NSwgODMsIDczLCAKKyAgICA2NSwgODMsIDc3LCAxMjgsIDY5LCA3OCwgODQsIDY5LCA4MiwgODAsIDgyLCA3MywgODMsIDY5LCAxMjgsIDY5LCA3OCwgODQsIAorICAgIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY5LCA3OCwgODQsIDY5LCA4MiwgMTI4LCA2OSwgNzgsIDg0LCA2OSwgMjEwLCA2OSwgCisgICAgNzgsIDg0LCA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAxMjgsIDY5LCAKKyAgICA3OCwgODEsIDEyOCwgNjksIDc4LCA3OSwgMjExLCA2OSwgNzgsIDc4LCA3MywgMTI4LCA2OSwgNzgsIDc4LCAxMjgsIDY5LCAKKyAgICA3OCwgNzYsIDY1LCA4MiwgNzEsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OSwgNzgsIDcxLCA3MywgNzgsIDY5LCAxMjgsIAorICAgIDY5LCA3OCwgNjgsIDc5LCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY5LCA3OCwgCisgICAgNjgsIDY5LCA4MCwgMTI4LCA2OSwgNzgsIDY4LCA2OSwgNjUsIDg2LCA3OSwgODUsIDgyLCAxMjgsIDY5LCA3OCwgNjcsIDc5LCAKKyAgICA4NSwgNzgsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDgzLCAxMjgsIAorICAgIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNjksIDc4LCA2NywgNzYsIDc5LCA4MywgNzMsIDc4LCAKKyAgICAxOTksIDY5LCA3OCwgNjcsIDEyOCwgNjksIDc4LCA2NSwgODIsIDg4LCA3MywgMjExLCA2OSwgNzgsIDY1LCA4MiwgNzcsIAorICAgIDc5LCA3OCwgNzMsIDc5LCAyMTEsIDY5LCA3NywgODAsIDg0LCAyMTcsIDY5LCA3NywgODAsIDcyLCA2NSwgODQsIDczLCAKKyAgICAxOTUsIDY5LCA3NywgODAsIDcyLCA2NSwgODMsIDczLCAyMTEsIDY5LCA3NywgNzksIDc0LCAyMDEsIDY5LCA3NywgNjYsIAorICAgIDgyLCA3OSwgNzMsIDY4LCA2OSwgODIsIDg5LCAxMjgsIDY5LCA3NywgNjYsIDc2LCA2OSwgNzcsIDEyOCwgNjksIDc3LCA2NiwgCisgICAgNjksIDc2LCA3NiwgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc3LCA2NiwgNjksIDY4LCA2OCwgNzMsIAorICAgIDc4LCA3MSwgMTI4LCA2OSwgNzYsIDg5LCAxMjgsIDY5LCA3NiwgODQsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4NCwgCisgICAgNzMsIDE5NSwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNzMsIDgzLCAxMjgsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIDY5LCAKKyAgICAxMjgsIDY5LCA3NiwgNzMsIDcwLCA3MywgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIDc4LCA0NSwgODQsIDcyLCA3MywgODIsIAorICAgIDg0LCA4OSwgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIDc4LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgMjA2LCA2OSwgCisgICAgNzYsIDY5LCA4MCwgNzIsIDY1LCA3OCwgODQsIDEyOCwgNjksIDc2LCA2OSwgNzcsIDY5LCA3OCwgMjEyLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDgyLCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCAxOTUsIDY5LCA3NiwgNjYsIAorICAgIDY1LCA4MywgNjUsIDIwNiwgNjksIDc2LCA2NSwgNzcsIDczLCA4NCwgNjksIDEyOCwgNjksIDc2LCA2NSwgNzcsIDczLCA4NCwgCisgICAgMTk3LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCA4NCwgODIsIDY5LCA4MCwgODQsIDc5LCAKKyAgICA3OCwgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3NSwgNzAsIDc5LCA3OCwgNzMsIDg0LCA3MywgNzUsIDc5LCA3OCwgCisgICAgMTI4LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc1LCA2NSwgNzcsIDEyOCwgNjksIDc0LCA2OSwgNjcsIDIxMiwgCisgICAgNjksIDczLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMjE3LCAKKyAgICA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAyMTEsIDY5LCA3MywgNzEsIAorICAgIDcyLCA4NCwgNzIsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgCisgICAgNjksIDY5LCAyMDYsIDY5LCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNjksIDczLCAKKyAgICA2OSwgMTI4LCA2OSwgNzIsIDg3LCA2NSwgMjE4LCA2OSwgNzEsIDg5LCA4MCwgODQsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIAorICAgIDY1LCAyMDQsIDY5LCA3MSwgODksIDEyOCwgNjksIDcxLCA3MywgODIsIDEyOCwgNjksIDcxLCA3MSwgMTI4LCA2OSwgNjksIAogICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgNjksIDc1LCA2NSwgNjUsIDEyOCwgNjksIDY5LCA3MiwgMTI4LCA2OSwgCiAgICAgNjksIDY2LCA2OSwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA2OCwgNzMsIDg0LCA3OSwgODIsIDczLCA2NSwgMjA0LCAKLSAgICA2OSwgNjgsIDczLCA3OCwgMTI4LCA2OSwgNjgsIDY4LCAxMjgsIDY5LCA2NiwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDY5LCA2NSwgODMsIDg0LCA2OSwgODIsIDIwNiwgNjksIDY1LCA4MywgMjEyLCA2OSwgNjUsIDgyLCA4NCwgNzIsIDc2LCAKLSAgICAyMTcsIDY5LCA2NSwgODIsIDg0LCA3MiwgMTI4LCA2OSwgNjUsIDgyLCA4NCwgMjAwLCA2OSwgNjUsIDgyLCA4MywgMTI4LCAKLSAgICA2OSwgNjUsIDgyLCA3NiwgMjE3LCA2OSwgNjUsIDc3LCA3MiwgNjUsIDc4LCA2NywgNzIsIDc5LCA3NiwgNzYsIDEyOCwgNjksIAotICAgIDY1LCA3MSwgNzYsIDY5LCAxMjgsIDY5LCA2NSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCA2NSwgNjYsIDcyLCA2NSwgCi0gICAgNjgsIDcyLCAxMjgsIDY5LCAxNzgsIDY5LCA0OCwgNTEsIDU2LCAxMjgsIDY5LCA0OCwgNTEsIDU1LCAxMjgsIDY5LCA0OCwgCi0gICAgNTEsIDU0LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgMTI4LCA2OSwgNDgsIDUxLCAKLSAgICA1MSwgMTI4LCA2OSwgNDgsIDUxLCA1MCwgMTI4LCA2OSwgNDgsIDUxLCA0OSwgMTI4LCA2OSwgNDgsIDUxLCA0OCwgMTI4LCAKLSAgICA2OSwgNDgsIDUwLCA1NywgMTI4LCA2OSwgNDgsIDUwLCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNTYsIDEyOCwgNjksIAotICAgIDQ4LCA1MCwgNTUsIDEyOCwgNjksIDQ4LCA1MCwgNTQsIDEyOCwgNjksIDQ4LCA1MCwgNTMsIDEyOCwgNjksIDQ4LCA1MCwgCi0gICAgNTIsIDEyOCwgNjksIDQ4LCA1MCwgNTEsIDEyOCwgNjksIDQ4LCA1MCwgNTAsIDEyOCwgNjksIDQ4LCA1MCwgNDksIDEyOCwgCi0gICAgNjksIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDY5LCA0OCwgNTAsIDQ4LCAxMjgsIDY5LCA0OCwgNDksIDU3LCAxMjgsIDY5LCAKLSAgICA0OCwgNDksIDU2LCAxMjgsIDY5LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgMTI4LCA2OSwgNDgsIAotICAgIDQ5LCA1NCwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgNTQsIDEyOCwgNjksIDQ4LCA0OSwgNTMsIDEyOCwgNjksIDQ4LCA0OSwgCi0gICAgNTIsIDEyOCwgNjksIDQ4LCA0OSwgNTEsIDEyOCwgNjksIDQ4LCA0OSwgNTAsIDEyOCwgNjksIDQ4LCA0OSwgNDksIDEyOCwgCi0gICAgNjksIDQ4LCA0OSwgNDgsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU3LCAxMjgsIDY5LCAKLSAgICA0OCwgNDgsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NiwgMTI4LCA2OSwgNDgsIDQ4LCA1NSwgMTI4LCA2OSwgNDgsIAotICAgIDQ4LCA1NCwgMTI4LCA2OSwgNDgsIDQ4LCA1MywgMTI4LCA2OSwgNDgsIDQ4LCA1MiwgMTI4LCA2OSwgNDgsIDQ4LCA1MSwgCi0gICAgMTI4LCA2OSwgNDgsIDQ4LCA1MCwgMTI4LCA2OSwgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgNDUsIDc3LCA2NSwgNzMsIDIwNCwgCi0gICAgNjgsIDkwLCA5MCwgNjksIDEyOCwgNjgsIDkwLCA5MCwgNjUsIDEyOCwgNjgsIDkwLCA4NywgNjksIDEyOCwgNjgsIDkwLCAKLSAgICA4NSwgMTI4LCA2OCwgOTAsIDc5LCAxMjgsIDY4LCA5MCwgNzQsIDY5LCAxMjgsIDY4LCA5MCwgNzMsIDEyOCwgNjgsIDkwLCAKKyAgICA2OSwgNjgsIDczLCA3OCwgMTI4LCA2OSwgNjgsIDY4LCAxMjgsIDY5LCA2NywgODMsIDEyOCwgNjksIDY2LCA2OSwgNzAsIAorICAgIDczLCA3NiwgNzMsIDEyOCwgNjksIDY1LCA4MywgODQsIDY5LCA4MiwgMjA2LCA2OSwgNjUsIDgzLCA4NCwgMTI4LCA2OSwgCisgICAgNjUsIDgzLCAyMTIsIDY5LCA2NSwgODIsIDg0LCA3MiwgNzYsIDIxNywgNjksIDY1LCA4MiwgODQsIDcyLCAxMjgsIDY5LCAKKyAgICA2NSwgODIsIDg0LCAyMDAsIDY5LCA2NSwgODIsIDgzLCAxMjgsIDY5LCA2NSwgODIsIDc2LCAyMTcsIDY5LCA2NSwgNzcsIAorICAgIDcyLCA2NSwgNzgsIDY3LCA3MiwgNzksIDc2LCA3NiwgMTI4LCA2OSwgNjUsIDcxLCA3NiwgNjksIDEyOCwgNjksIDY1LCA2OCwgCisgICAgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDY1LCA2NiwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNjksIDE3OCwgNjksIDQ4LCAKKyAgICA1MSwgNTYsIDEyOCwgNjksIDQ4LCA1MSwgNTUsIDEyOCwgNjksIDQ4LCA1MSwgNTQsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIAorICAgIDY1LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAxMjgsIDY5LCA0OCwgNTEsIDUxLCAxMjgsIDY5LCA0OCwgNTEsIDUwLCAxMjgsIAorICAgIDY5LCA0OCwgNTEsIDQ5LCAxMjgsIDY5LCA0OCwgNTEsIDQ4LCAxMjgsIDY5LCA0OCwgNTAsIDU3LCAxMjgsIDY5LCA0OCwgCisgICAgNTAsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA1NiwgMTI4LCA2OSwgNDgsIDUwLCA1NSwgMTI4LCA2OSwgNDgsIDUwLCAKKyAgICA1NCwgMTI4LCA2OSwgNDgsIDUwLCA1MywgMTI4LCA2OSwgNDgsIDUwLCA1MiwgMTI4LCA2OSwgNDgsIDUwLCA1MSwgMTI4LCAKKyAgICA2OSwgNDgsIDUwLCA1MCwgMTI4LCA2OSwgNDgsIDUwLCA0OSwgMTI4LCA2OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNjksIAorICAgIDQ4LCA1MCwgNDgsIDEyOCwgNjksIDQ4LCA0OSwgNTcsIDEyOCwgNjksIDQ4LCA0OSwgNTYsIDEyOCwgNjksIDQ4LCA0OSwgCisgICAgNTUsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCAKKyAgICA1NCwgMTI4LCA2OSwgNDgsIDQ5LCA1MywgMTI4LCA2OSwgNDgsIDQ5LCA1MiwgMTI4LCA2OSwgNDgsIDQ5LCA1MSwgMTI4LCAKKyAgICA2OSwgNDgsIDQ5LCA1MCwgMTI4LCA2OSwgNDgsIDQ5LCA0OSwgMTI4LCA2OSwgNDgsIDQ5LCA0OCwgMTI4LCA2OSwgNDgsIAorICAgIDQ4LCA1NywgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDEyOCwgNjksIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgCisgICAgNDgsIDU2LCAxMjgsIDY5LCA0OCwgNDgsIDU1LCAxMjgsIDY5LCA0OCwgNDgsIDU0LCAxMjgsIDY5LCA0OCwgNDgsIDUzLCAKKyAgICAxMjgsIDY5LCA0OCwgNDgsIDUyLCAxMjgsIDY5LCA0OCwgNDgsIDUxLCAxMjgsIDY5LCA0OCwgNDgsIDUwLCAxMjgsIDY5LCAKKyAgICA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA0NSwgNzcsIDY1LCA3MywgMjA0LCA2OCwgOTAsIDkwLCA3MiwgNjksIDEyOCwgNjgsIAorICAgIDkwLCA5MCwgNjksIDEyOCwgNjgsIDkwLCA5MCwgNjUsIDEyOCwgNjgsIDkwLCA4OSwgNjUsIDg5LCAxMjgsIDY4LCA5MCwgCisgICAgODcsIDY5LCAxMjgsIDY4LCA5MCwgODUsIDEyOCwgNjgsIDkwLCA3OSwgMTI4LCA2OCwgOTAsIDc0LCA2OSwgMTI4LCA2OCwgCisgICAgOTAsIDczLCA4NCwgNjUsIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIDcyLCA3OSwgNzMsIDEyOCwgNjgsIDkwLCAKICAgICA3MiwgNjksIDEyOCwgNjgsIDkwLCA3MiwgNjUsIDEyOCwgNjgsIDkwLCA2OSwgNzYsIDc5LCAxMjgsIDY4LCA5MCwgNjksIAotICAgIDY5LCAxMjgsIDY4LCA5MCwgNjksIDEyOCwgNjgsIDkwLCA2NSwgNjUsIDEyOCwgNjgsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIAotICAgIDEyOCwgNjgsIDIxOCwgNjgsIDg5LCA3OSwgMTI4LCA2OCwgODksIDIwNywgNjgsIDg5LCA2OSwgNzIsIDEyOCwgNjgsIDg5LCAKLSAgICA2OSwgMjAwLCA2OCwgODcsIDc5LCAxMjgsIDY4LCA4NywgNjksIDEyOCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgODYsIDczLCAKKyAgICA2OSwgMTI4LCA2OCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgNjUsIDg5LCAxMjgsIDY4LCA5MCwgNjUsIDY1LCAxMjgsIDY4LCAKKyAgICA5MCwgNjUsIDEyOCwgNjgsIDkwLCAxMjgsIDY4LCAyMTgsIDY4LCA4OSwgNzksIDEyOCwgNjgsIDg5LCAyMDcsIDY4LCA4OSwgCisgICAgNzgsIDY1LCA3NywgNzMsIDE5NSwgNjgsIDg5LCA2OSwgNzIsIDEyOCwgNjgsIDg5LCA2OSwgMjAwLCA2OCwgODksIDY1LCAKKyAgICA3OCwgMTI4LCA2OCwgODcsIDc5LCAxMjgsIDY4LCA4NywgNjksIDEyOCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgODYsIDczLCAKICAgICA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjgsIDg2LCA2OCwgMTI4LCA2OCwgODYsIDEyOCwgNjgsIDg1LCA4NCwgNzMsIAogICAgIDY5LCA4MywgMTI4LCA2OCwgODUsIDgzLCA3NSwgMTI4LCA2OCwgODUsIDgzLCA3MiwgNjksIDc4LCA3OCwgNjUsIDEyOCwgCiAgICAgNjgsIDg1LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA4NSwgODIsIDUwLCAxMjgsIDY4LCA4NSwgODAsIDc5LCAKICAgICA3OCwgNjgsIDczLCA4NSwgMjExLCA2OCwgODUsIDc5LCA4OCwgMTI4LCA2OCwgODUsIDc5LCAxMjgsIDY4LCA4NSwgNzgsIAogICAgIDUyLCAxMjgsIDY4LCA4NSwgNzgsIDUxLCAxMjgsIDY4LCA4NSwgNzgsIDE3OSwgNjgsIDg1LCA3NywgMTI4LCA2OCwgODUsIAotICAgIDIwNCwgNjgsIDg1LCA3MiwgMTI4LCA2OCwgODUsIDcxLCA4NSwgNjgsIDEyOCwgNjgsIDg1LCA2NiwgNTAsIDEyOCwgNjgsIAotICAgIDg1LCA2NiwgMTI4LCA2OCwgODUsIDE5NCwgNjgsIDgyLCA4OSwgMTI4LCA2OCwgODIsIDIxNywgNjgsIDgyLCA4NSwgNzcsIAotICAgIDEyOCwgNjgsIDgyLCA4NSwgMjA1LCA2OCwgODIsIDc5LCA4MCwgODMsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDc2LCA2OSwgCi0gICAgODQsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA2OCwgODIsIDc5LCAKLSAgICA3NywgNjksIDY4LCA2NSwgODIsIDIxNywgNjgsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgNzMsIDg2LCAxOTcsIAotICAgIDY4LCA4MiwgNzMsIDc4LCA3NSwgMTI4LCA2OCwgODIsIDczLCAyMDQsIDY4LCA4MiwgNjksIDgzLCA4MywgMTI4LCA2OCwgCi0gICAgODIsIDY1LCA4NSwgNzEsIDcyLCA4NCwgMjExLCA2OCwgODIsIDY1LCA3NywgMTI4LCA2OCwgODIsIDY1LCAyMDUsIDY4LCAKLSAgICA4MiwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDgyLCA2NSwgNzEsIDc5LCAyMDYsIDY4LCA4MiwgNjUsIDcwLCA4NCwgNzMsIAotICAgIDc4LCAxOTksIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCA4MywgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgCi0gICAgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAxOTMsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCA2OCwgODMsIAotICAgIDEyOCwgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCAyMTEsIDY4LCA3OSwgODcsIDc4LCA0NSwgODAsIDc5LCA3MywgCisgICAgMjA0LCA2OCwgODUsIDcyLCAxMjgsIDY4LCA4NSwgNzEsIDg1LCA2OCwgMTI4LCA2OCwgODUsIDE5OSwgNjgsIDg1LCA2NiwgCisgICAgNTAsIDEyOCwgNjgsIDg1LCA2NiwgMTI4LCA2OCwgODUsIDE5NCwgNjgsIDgyLCA4OSwgMTI4LCA2OCwgODIsIDIxNywgNjgsIAorICAgIDgyLCA4NSwgNzcsIDEyOCwgNjgsIDgyLCA4NSwgMjA1LCA2OCwgODIsIDc5LCA4MCwgODMsIDEyOCwgNjgsIDgyLCA3OSwgCisgICAgODAsIDc2LCA2OSwgODQsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCAKKyAgICA2OCwgODIsIDc5LCA3NywgNjksIDY4LCA2NSwgODIsIDIxNywgNjgsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgNzMsIAorICAgIDg2LCAxOTcsIDY4LCA4MiwgNzMsIDc4LCA3NSwgMTI4LCA2OCwgODIsIDczLCAyMDQsIDY4LCA4MiwgNjksIDgzLCA4MywgCisgICAgMTI4LCA2OCwgODIsIDY5LCA2NSwgNzcsIDIxNywgNjgsIDgyLCA2NSwgODUsIDcxLCA3MiwgODQsIDIxMSwgNjgsIDgyLCAKKyAgICA2NSwgNzcsIDEyOCwgNjgsIDgyLCA2NSwgMjA1LCA2OCwgODIsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDY4LCA4MiwgNjUsIAorICAgIDcxLCA3OSwgMjA2LCA2OCwgODIsIDY1LCA3MCwgODQsIDczLCA3OCwgMTk5LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgCisgICAgODMsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgMTkzLCAKKyAgICA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDY4LCA3OSwgODcsIDc4LCA0NSwgODAsIDc5LCA3MywgCiAgICAgNzgsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDc5LCA4NywgNzgsIDEyOCwgNjgsIDc5LCA4NiwgNjksIDEyOCwgNjgsIDc5LCAKLSAgICA4NSwgNzEsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIAotICAgIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDY4LCA3OSwgODUsIDY2LCA3NiwgCi0gICAgNjksIDQ1LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAxMjgsIDY4LCA3OSwgODQsIDg0LCAKLSAgICA2OSwgNjgsIDQ1LCA4MCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIAotICAgIDY5LCA2OCwgNDUsIDc2LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCAKLSAgICAxOTYsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAotICAgIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTYsIAorICAgIDg2LCAxOTcsIDY4LCA3OSwgODUsIDcxLCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgODQsIDEyOCwgCisgICAgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCAKKyAgICA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgODAsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDc4LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA3NiwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDg0LCA2OSwgMTk2LCA2OCwgNzksIDg0LCA4MywgNDUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKKyAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCisgICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCisgICAgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU2LCAKICAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIAogICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NiwgCiAgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAKQEAgLTM5NTIsMzkyICs0Mjg2LDQzNiBAQAogICAgIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgCiAgICAgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCAKICAgICA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgMTI4LCA2OCwgNzksIDczLCA4NCwgCi0gICAgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIDY4LCA3OSwgNjgsIDY5LCA3NSwgCi0gICAgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCAKLSAgICA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCAxOTcsIDY4LCA3OSwgNjUsIAotICAgIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCA3NiwgODUsIDEyOCwgNjgsIDc2LCAKLSAgICA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCA2OCwgNzYsIDcyLCA2NSwgMTI4LCAKLSAgICA2OCwgNzYsIDY5LCA2OSwgMTI4LCA2OCwgNzYsIDY1LCAxMjgsIDY4LCA3NiwgMTI4LCA2OCwgNzUsIDY1LCA4MiwgMTI4LCAKLSAgICA2OCwgNzUsIDY1LCAyMTAsIDY4LCA3NCwgNjksIDgyLCA4NiwgNzMsIDEyOCwgNjgsIDc0LCA2OSwgODIsIDg2LCAxMjgsIAotICAgIDY4LCA3NCwgNjksIDEyOCwgNjgsIDc0LCA2NSwgMTI4LCA2OCwgNzMsIDkwLCA5MCwgMjE3LCA2OCwgNzMsIDg2LCA3OSwgCi0gICAgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCAKLSAgICA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIAotICAgIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAKLSAgICAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCAxOTcsIDY4LCA3MywgODYsIAotICAgIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgODQsIDg0LCAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgCi0gICAgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzgsIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCAKLSAgICA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgCi0gICAgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgNjgsIDczLCA4MywgODAsIDY5LCA4MiwgODMsIDczLCAKLSAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgNjgsIAotICAgIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgODUsIDc5LCA4NSwgMjExLCA2OCwgCi0gICAgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA2OCwgNzMsIDgzLCAKLSAgICA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3NiwgCi0gICAgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDgwLCA4NCwgNjksIAotICAgIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2OCwgCi0gICAgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIDY2LCA2NSwgMjEyLCAKLSAgICA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIAotICAgIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUwLCAKLSAgICAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgNjgsIDczLCA3NywgNzMsIAotICAgIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIDczLCAxOTMsIDY4LCA3MywgCi0gICAgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCAKLSAgICA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIAotICAgIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDY4LCA3MywgCi0gICAgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCAKLSAgICA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgNjgsIDczLCA3MSwgNjUsIDc3LCA3NywgNjUsIAotICAgIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MCwgCi0gICAgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDIxNywgNjgsIDczLCAKLSAgICA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgCi0gICAgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCAKLSAgICA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCAyMTEsIAotICAgIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIDY2LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgCi0gICAgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgMjAxLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCAKLSAgICA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIAotICAgIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgNzMsIDY1LCA3NywgNjksIDg0LCA2OSwgMjEwLCA2OCwgCi0gICAgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgMTkzLCAKLSAgICA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDc2LCAxMjgsIAotICAgIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKLSAgICAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIAotICAgIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzksIDEyOCwgNjgsIAotICAgIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3MiwgCi0gICAgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY5LCAKLSAgICAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDgyLCA3NywgNjUsIAotICAgIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgCi0gICAgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAKLSAgICAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCA2OCwgNjksIDg5LCAKLSAgICA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIDg4LCA3MywgNjUsIAotICAgIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgNjksIDc4LCA4NCwgCi0gICAgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCA3MywgNzEsIDc4LCAKLSAgICAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIAotICAgIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDY5LCAKLSAgICA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MiwgNjksIAotICAgIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgCi0gICAgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgODQsIDczLCAKLSAgICA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIAotICAgIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIDY5LCA3OCwgCi0gICAgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgNzgsIDY1LCAKLSAgICA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCA2OCwgNjksIAotICAgIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCAKLSAgICAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIAotICAgIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCA3MywgCi0gICAgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAotICAgIDE5NywgNjgsIDY5LCA3NSwgNjUsIDEyOCwgNjgsIDY5LCA3NSwgMTI4LCA2OCwgNjksIDczLCAxMjgsIDY4LCA2OSwgNzIsIAotICAgIDczLCAxMjgsIDY4LCA2OSwgNzEsIDgyLCA2OSwgMTk3LCA2OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2OCwgNjksIDcwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCA3OCwgNjksIDgzLCAyMTEsIDY4LCA2OSwgNjksIDgyLCAKLSAgICAxMjgsIDY4LCA2OSwgNjksIDgwLCA3NiwgODksIDEyOCwgNjgsIDY5LCA2OSwgNzYsIDEyOCwgNjgsIDY5LCA2NywgODIsIAotICAgIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDc5LCAxMjgsIDY4LCA2OSwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA2OCwgCi0gICAgNjksIDY3LCA3OSwgODIsIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDY4LCA2OSwgNjcsIDc5LCA4MiwgNjUsIDg0LCA3MywgNzksIAotICAgIDc4LCAxMjgsIDY4LCA2OSwgNjcsIDczLCA4MywgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgODMsIDEyOCwgNjgsIDY5LCA2NywgCi0gICAgNzMsIDc3LCA2NSwgMjA0LCA2OCwgNjksIDY3LCA3MywgNjgsIDg1LCA3OSwgODUsIDIxMSwgNjgsIDY5LCA2NywgNjksIDc3LCAKLSAgICA2NiwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNjcsIDY1LCA4OSwgNjksIDY4LCAxMjgsIDY4LCA2OSwgNjYsIDczLCAyMTIsIAotICAgIDY4LCA2OSwgNjUsIDg0LCA3MiwgMTI4LCA2OCwgNjksIDY1LCA2OCwgMTI4LCA2OCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgCi0gICAgNjgsIDg1LCA4OCwgMTI4LCA2OCwgNjgsIDg1LCA4NCwgMTI4LCA2OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNjgsIDY4LCAKLSAgICA4NSwgODIsIDEyOCwgNjgsIDY4LCA4NSwgODAsIDEyOCwgNjgsIDY4LCA4NSwgNzksIDg4LCAxMjgsIDY4LCA2OCwgODUsIAotICAgIDc5LCA4MCwgMTI4LCA2OCwgNjgsIDg1LCA3OSwgMTI4LCA2OCwgNjgsIDg1LCAxMjgsIDY4LCA2OCwgNzksIDg4LCAxMjgsIAotICAgIDY4LCA2OCwgNzksIDg0LCAxMjgsIDY4LCA2OCwgNzksIDgwLCAxMjgsIDY4LCA2OCwgNzksIDY1LCAxMjgsIDY4LCA2OCwgCi0gICAgNzMsIDg4LCAxMjgsIDY4LCA2OCwgNzMsIDg0LCAxMjgsIDY4LCA2OCwgNzMsIDgwLCAxMjgsIDY4LCA2OCwgNzMsIDY5LCAKLSAgICA4OCwgMTI4LCA2OCwgNjgsIDczLCA2OSwgODAsIDEyOCwgNjgsIDY4LCA3MywgNjksIDEyOCwgNjgsIDY4LCA3MywgMTI4LCAKLSAgICA2OCwgNjgsIDcyLCA4NSwgMTI4LCA2OCwgNjgsIDcyLCA3OSwgMTI4LCA2OCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNjgsIAotICAgIDcyLCA2OSwgNjksIDEyOCwgNjgsIDY4LCA3MiwgNjksIDEyOCwgNjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA2OCwgCi0gICAgNzIsIDY1LCAxMjgsIDY4LCA2OCwgNjksIDg4LCAxMjgsIDY4LCA2OCwgNjksIDgwLCAxMjgsIDY4LCA2OCwgNjksIDY5LCAKLSAgICAxMjgsIDY4LCA2OCwgNjksIDEyOCwgNjgsIDY4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OCwgNjgsIDY1LCAxMjgsIDY4LCAKLSAgICA2OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OCwgNjgsIDY1LCA4OCwgMTI4LCA2OCwgNjgsIDY1LCA4NCwgCi0gICAgMTI4LCA2OCwgNjgsIDY1LCA4MCwgMTI4LCA2OCwgNjgsIDY1LCA3NiwgMTI4LCA2OCwgNjgsIDY1LCAyMDQsIDY4LCA2OCwgCi0gICAgNjUsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDY4LCA2NSwgNzIsIDY1LCAyMDQsIDY4LCA2OCwgNjUsIDY1LCAxMjgsIDY4LCAKLSAgICA2NywgODMsIDEyOCwgNjgsIDY3LCA1MiwgMTI4LCA2OCwgNjcsIDUxLCAxMjgsIDY4LCA2NywgNTAsIDEyOCwgNjgsIDY3LCAKLSAgICA0OSwgMTI4LCA2OCwgMTk0LCA2OCwgNjUsIDg5LCA0NSwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDY4LCA2NSwgMjE3LCAKLSAgICA2OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNjgsIDY1LCA4NiwgNzMsIDY4LCAxMjgsIDY4LCA2NSwgODQsIAotICAgIDE5NywgNjgsIDY1LCA4MywgNzMsIDY1LCAxMjgsIDY4LCA2NSwgODMsIDczLCAxOTMsIDY4LCA2NSwgODMsIDcyLCA2OSwgCi0gICAgMTk2LCA2OCwgNjUsIDgzLCA3MiwgMTI4LCA2OCwgNjUsIDgzLCAyMDAsIDY4LCA2NSwgODMsIDY5LCA3MywgNjUsIDEyOCwgCi0gICAgNjgsIDY1LCA4MiwgODQsIDEyOCwgNjgsIDY1LCA4MiwgNzUsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIDgyLCAKLSAgICA3NSwgNjksIDc4LCA3MywgNzgsIDE5OSwgNjgsIDY1LCA4MiwgMjAzLCA2OCwgNjUsIDgyLCA3MSwgNjUsIDEyOCwgNjgsIAotICAgIDY1LCA4MiwgNjUsIDUyLCAxMjgsIDY4LCA2NSwgODIsIDY1LCA1MSwgMTI4LCA2OCwgNjUsIDgyLCAxMjgsIDY4LCA2NSwgCi0gICAgODAsIDQ1LCA4MCwgODIsIDY1LCAyMDUsIDY4LCA2NSwgODAsIDQ1LCA4MCwgNzMsIDIwMSwgNjgsIDY1LCA4MCwgNDUsIDc3LCAKLSAgICA4NSwgNzksIDIxNywgNjgsIDY1LCA4MCwgNDUsIDY2LCA4NSwgNzksIDIwNiwgNjgsIDY1LCA4MCwgNDUsIDY2LCA2OSwgCi0gICAgMjAxLCA2OCwgNjUsIDIwOCwgNjgsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA2OCwgNjUsIDc4LCA3MSwgNzksIDEyOCwgCi0gICAgNjgsIDY1LCA3OCwgNzEsIDEyOCwgNjgsIDY1LCA3OCwgMTk5LCA2OCwgNjUsIDc4LCA2OCwgNjUsIDEyOCwgNjgsIDY1LCAKLSAgICA3OCwgNjcsIDY5LCA4MiwgMTI4LCA2OCwgNjUsIDc3LCA4MCwgMTI4LCA2OCwgNjUsIDc3LCAyMDgsIDY4LCA2NSwgNzcsIAotICAgIDc3LCA2NSwgODQsIDY1LCA3OCwgMTI4LCA2OCwgNjUsIDc3LCA3NywgNjUsIDg0LCA2NSwgMjA2LCA2OCwgNjUsIDc3LCA3NywgCi0gICAgNjUsIDEyOCwgNjgsIDY1LCA3NywgNzcsIDE5MywgNjgsIDY1LCA3NywgNjUsIDgyLCA4NSwgMTI4LCA2OCwgNjUsIDc2LCAKLSAgICA2OSwgODQsIDcyLCAxMjgsIDY4LCA2NSwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgNjUsIDc2LCA2OSwgMjEyLCA2OCwgNjUsIAotICAgIDc2LCA2OCwgNjUsIDEyOCwgNjgsIDY1LCA3NiwgNjUsIDg0LCA3MiwgMTI4LCA2OCwgNjUsIDc2LCA2NSwgODQsIDIwMCwgCi0gICAgNjgsIDY1LCA3NiwgNjUsIDg0LCAxMjgsIDY4LCA2NSwgNzMsIDgyLCAxMjgsIDY4LCA2NSwgNzMsIDc4LCA3MSwgMTI4LCAKLSAgICA2OCwgNjUsIDcyLCA4OSwgNjUsIDY1LCA4NSwgODMsIDcyLCA0NSwgNTAsIDEyOCwgNjgsIDY1LCA3MiwgODksIDY1LCA2NSwgCi0gICAgODUsIDgzLCA3MiwgMTI4LCA2OCwgNjUsIDcxLCA4MywgMTI4LCA2OCwgNjUsIDcxLCA3MSwgNjksIDgyLCAxMjgsIDY4LCAKLSAgICA2NSwgNzEsIDcxLCA2OSwgMjEwLCA2OCwgNjUsIDcxLCA2OSwgODMsIDcyLCAxMjgsIDY4LCA2NSwgNzEsIDY5LCA4MywgCi0gICAgMjAwLCA2OCwgNjUsIDcxLCA2NiwgNjUsIDgzLCA3MywgNzgsIDc4LCA2NSwgMTI4LCA2OCwgNjUsIDcxLCA2NSwgMjE4LCAKLSAgICA2OCwgNjUsIDcxLCA2NSwgNzYsIDcxLCA2NSwgMTI4LCA2OCwgNjUsIDE5OSwgNjgsIDY1LCA2OSwgNzgsIDcxLCAxMjgsIAotICAgIDY4LCA2NSwgNjksIDE5OSwgNjgsIDY1LCA2OCwgMTI4LCA2OCwgNjUsIDE5NiwgNjgsIDY1LCA2NSwgODMsIDg1LCAxMjgsIAotICAgIDY4LCA2NSwgNjUsIDY4LCA3MiwgODUsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDcyLCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA3MSwgCi0gICAgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNzAsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDY5LCAxMjgsIDY4LCA0OCwgNTQsIDU1LCAKLSAgICA2OCwgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNjcsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDY2LCAxMjgsIDY4LCA0OCwgNTQsIAotICAgIDU1LCA2NSwgMTI4LCA2OCwgNDgsIDU0LCA1NSwgMTI4LCA2OCwgNDgsIDU0LCA1NCwgMTI4LCA2OCwgNDgsIDU0LCA1MywgCi0gICAgMTI4LCA2OCwgNDgsIDU0LCA1MiwgMTI4LCA2OCwgNDgsIDU0LCA1MSwgMTI4LCA2OCwgNDgsIDU0LCA1MCwgMTI4LCA2OCwgCi0gICAgNDgsIDU0LCA0OSwgMTI4LCA2OCwgNDgsIDU0LCA0OCwgMTI4LCA2OCwgNDgsIDUzLCA1NywgMTI4LCA2OCwgNDgsIDUzLCAKLSAgICA1NiwgMTI4LCA2OCwgNDgsIDUzLCA1NSwgMTI4LCA2OCwgNDgsIDUzLCA1NCwgMTI4LCA2OCwgNDgsIDUzLCA1MywgMTI4LCAKLSAgICA2OCwgNDgsIDUzLCA1MiwgNjUsIDEyOCwgNjgsIDQ4LCA1MywgNTIsIDEyOCwgNjgsIDQ4LCA1MywgNTEsIDEyOCwgNjgsIAotICAgIDQ4LCA1MywgNTAsIDY1LCAxMjgsIDY4LCA0OCwgNTMsIDUwLCAxMjgsIDY4LCA0OCwgNTMsIDQ5LCAxMjgsIDY4LCA0OCwgCi0gICAgNTMsIDQ4LCA3MywgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNzIsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDcxLCAxMjgsIDY4LCAKLSAgICA0OCwgNTMsIDQ4LCA3MCwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNjksIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDY4LCAxMjgsIAotICAgIDY4LCA0OCwgNTMsIDQ4LCA2NywgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNjYsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDY1LCAKLSAgICAxMjgsIDY4LCA0OCwgNTMsIDQ4LCAxMjgsIDY4LCA0OCwgNTIsIDU3LCAxMjgsIDY4LCA0OCwgNTIsIDU2LCA2NSwgMTI4LCAKLSAgICA2OCwgNDgsIDUyLCA1NiwgMTI4LCA2OCwgNDgsIDUyLCA1NSwgMTI4LCA2OCwgNDgsIDUyLCA1NCwgNjUsIDEyOCwgNjgsIAotICAgIDQ4LCA1MiwgNTQsIDEyOCwgNjgsIDQ4LCA1MiwgNTMsIDEyOCwgNjgsIDQ4LCA1MiwgNTIsIDEyOCwgNjgsIDQ4LCA1MiwgCi0gICAgNTEsIDEyOCwgNjgsIDQ4LCA1MiwgNTAsIDEyOCwgNjgsIDQ4LCA1MiwgNDksIDEyOCwgNjgsIDQ4LCA1MiwgNDgsIDEyOCwgCi0gICAgNjgsIDQ4LCA1MSwgNTcsIDEyOCwgNjgsIDQ4LCA1MSwgNTYsIDEyOCwgNjgsIDQ4LCA1MSwgNTUsIDEyOCwgNjgsIDQ4LCAKLSAgICA1MSwgNTQsIDEyOCwgNjgsIDQ4LCA1MSwgNTMsIDEyOCwgNjgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDY4LCA0OCwgNTEsIAotICAgIDUyLCAxMjgsIDY4LCA0OCwgNTEsIDUxLCAxMjgsIDY4LCA0OCwgNTEsIDUwLCAxMjgsIDY4LCA0OCwgNTEsIDQ5LCA2NSwgCi0gICAgMTI4LCA2OCwgNDgsIDUxLCA0OSwgMTI4LCA2OCwgNDgsIDUxLCA0OCwgMTI4LCA2OCwgNDgsIDUwLCA1NywgMTI4LCA2OCwgCi0gICAgNDgsIDUwLCA1NiwgMTI4LCA2OCwgNDgsIDUwLCA1NSwgNjUsIDEyOCwgNjgsIDQ4LCA1MCwgNTUsIDEyOCwgNjgsIDQ4LCAKLSAgICA1MCwgNTQsIDEyOCwgNjgsIDQ4LCA1MCwgNTMsIDEyOCwgNjgsIDQ4LCA1MCwgNTIsIDEyOCwgNjgsIDQ4LCA1MCwgNTEsIAotICAgIDEyOCwgNjgsIDQ4LCA1MCwgNTAsIDEyOCwgNjgsIDQ4LCA1MCwgNDksIDEyOCwgNjgsIDQ4LCA1MCwgNDgsIDEyOCwgNjgsIAotICAgIDQ4LCA0OSwgNTcsIDEyOCwgNjgsIDQ4LCA0OSwgNTYsIDEyOCwgNjgsIDQ4LCA0OSwgNTUsIDEyOCwgNjgsIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgNjgsIDQ4LCA0OSwgNTMsIDEyOCwgNjgsIDQ4LCA0OSwgNTIsIDEyOCwgNjgsIDQ4LCA0OSwgNTEsIDEyOCwgCi0gICAgNjgsIDQ4LCA0OSwgNTAsIDEyOCwgNjgsIDQ4LCA0OSwgNDksIDEyOCwgNjgsIDQ4LCA0OSwgNDgsIDEyOCwgNjgsIDQ4LCAKLSAgICA0OCwgNTcsIDEyOCwgNjgsIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDY4LCA0OCwgNDgsIDU2LCAxMjgsIDY4LCA0OCwgNDgsIAotICAgIDU1LCAxMjgsIDY4LCA0OCwgNDgsIDU0LCAxMjgsIDY4LCA0OCwgNDgsIDUzLCAxMjgsIDY4LCA0OCwgNDgsIDUyLCAxMjgsIAotICAgIDY4LCA0OCwgNDgsIDUxLCAxMjgsIDY4LCA0OCwgNDgsIDUwLCAxMjgsIDY4LCA0OCwgNDgsIDQ5LCAxMjgsIDY3LCA4OSwgCi0gICAgODgsIDEyOCwgNjcsIDg5LCA4NCwgMTI4LCA2NywgODksIDgyLCA4OCwgMTI4LCA2NywgODksIDgyLCA2OSwgNzgsIDY1LCAKLSAgICA3MywgMTk1LCA2NywgODksIDgyLCAxMjgsIDY3LCA4OSwgODAsIDgyLCA3MywgNzksIDIxMiwgNjcsIDg5LCA4MCwgNjksIAotICAgIDgyLCA4NSwgODMsIDEyOCwgNjcsIDg5LCA4MCwgMTI4LCA2NywgODksIDc2LCA3MywgNzgsIDY4LCA4MiwgNzMsIDY3LCA3MywgCi0gICAgODQsIDg5LCAxMjgsIDY3LCA4OSwgNjcsIDc2LCA3OSwgNzgsIDY5LCAxMjgsIDY3LCA4OSwgNjUsIDEyOCwgNjcsIDg5LCAKLSAgICAxMjgsIDY3LCA4NywgNzksIDc5LCAxMjgsIDY3LCA4NywgNzksIDEyOCwgNjcsIDg3LCA3MywgNzMsIDEyOCwgNjcsIDg3LCAKLSAgICA3MywgMTI4LCA2NywgODcsIDY5LCA3OSwgODIsIDg0LCA3MiwgMTI4LCA2NywgODcsIDY5LCAxMjgsIDY3LCA4NywgNjUsIAotICAgIDY1LCAxMjgsIDY3LCA4NSwgODgsIDEyOCwgNjcsIDg1LCA4NSwgMTI4LCA2NywgODUsIDIxMiwgNjcsIDg1LCA4MywgODQsIAotICAgIDc5LCA3NywgODMsIDEyOCwgNjcsIDg1LCA4MywgODQsIDc5LCA3NywgNjksIDIxMCwgNjcsIDg1LCA4MywgODQsIDY1LCA4MiwgCi0gICAgNjgsIDEyOCwgNjcsIDg1LCA4MiwgODgsIDEyOCwgNjcsIDg1LCA4MiwgODYsIDczLCA3OCwgMTk5LCA2NywgODUsIDgyLCAKLSAgICA4NiwgNjksIDE5NiwgNjcsIDg1LCA4MiwgODYsIDY5LCAxMjgsIDY3LCA4NSwgODIsIDg2LCAxOTcsIDY3LCA4NSwgODIsIAotICAgIDgzLCA3MywgODYsIDE5NywgNjcsIDg1LCA4MiwgODIsIDIxNywgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgODQsIDEyOCwgCi0gICAgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgMjEyLCA2NywgODUsIDgyLCA3NiwgMjE3LCA2NywgODUsIDgyLCA3NiwgMTI4LCAKLSAgICA2NywgODUsIDgyLCAxMjgsIDY3LCA4NSwgODAsIDEyOCwgNjcsIDg1LCA3OSwgODgsIDEyOCwgNjcsIDg1LCA3OSwgODAsIAotICAgIDEyOCwgNjcsIDg1LCA3OSwgMTI4LCA2NywgODUsIDIwNSwgNjcsIDg1LCA2NiwgNjksIDY4LCAxMjgsIDY3LCA4NSwgNjYsIAotICAgIDE5NywgNjcsIDg1LCA2NSwgODQsIDgyLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA2NywgODUsIDY1LCA4NCwgODIsIDczLCA3NiwgCi0gICAgNzYsIDIwNywgNjcsIDg1LCAxMjgsIDY3LCA4MywgNzMsIDEyOCwgNjcsIDgyLCA4OSwgODMsIDg0LCA2NSwgMjA0LCA2NywgCi0gICAgODIsIDg5LCA4MCwgODQsIDc5LCA3MSwgODIsIDY1LCA3NywgNzcsIDczLCAxOTUsIDY3LCA4MiwgODksIDczLCA3OCwgMTk5LCAKLSAgICA2NywgODIsIDg1LCA5MCwgNjksIDczLCA4MiwgMjA3LCA2NywgODIsIDg1LCA2NywgNzMsIDY2LCA3NiwgNjksIDQ1LCA1MywgCi0gICAgMTI4LCA2NywgODIsIDg1LCA2NywgNzMsIDY2LCA3NiwgNjksIDQ1LCA1MiwgMTI4LCA2NywgODIsIDg1LCA2NywgNzMsIDY2LCAKLSAgICA3NiwgNjksIDQ1LCA1MSwgMTI4LCA2NywgODIsIDg1LCA2NywgNzMsIDY2LCA3NiwgNjksIDQ1LCA1MCwgMTI4LCA2NywgODIsIAotICAgIDg1LCA2NywgNzMsIDY2LCA3NiwgNjksIDEyOCwgNjcsIDgyLCA3OSwgODcsIDc4LCAxMjgsIDY3LCA4MiwgNzksIDgzLCA4MywgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA2NywgODIsIDc5LCA4MywgODMsIDczLCA3OCwgMTk5LCA2NywgODIsIDc5LCA4MywgODMsIDcyLCAKLSAgICA2NSwgODQsIDY3LCAyMDAsIDY3LCA4MiwgNzksIDgzLCA4MywgNjksIDY4LCA0NSwgODQsIDY1LCA3MywgNzYsIDEyOCwgNjcsIAotICAgIDgyLCA3OSwgODMsIDgzLCA2OSwgMTk2LCA2NywgODIsIDc5LCA4MywgODMsIDY2LCA3OSwgNzgsIDY5LCA4MywgMTI4LCA2NywgCi0gICAgODIsIDc5LCA4MywgODMsIDEyOCwgNjcsIDgyLCA3OSwgODMsIDIxMSwgNjcsIDgyLCA3OSwgODAsIDEyOCwgNjcsIDgyLCAKLSAgICA3OSwgNzMsIDg4LCAxMjgsIDY3LCA4MiwgNzksIDY3LCA4NSwgMjExLCA2NywgODIsIDc5LCA2NywgNzksIDY4LCA3MywgNzYsIAotICAgIDY5LCAxMjgsIDY3LCA4MiwgNjksIDgzLCA2NywgNjksIDc4LCA4NCwgMTI4LCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCA3OCwgCi0gICAgMjEyLCA2NywgODIsIDY5LCA2OCwgNzMsIDIxMiwgNjcsIDgyLCA2OSwgNjUsIDg0LCA3MywgODYsIDE5NywgNjcsIDgyLCAKLSAgICA2OSwgNjUsIDc3LCAxMjgsIDY3LCA4MiwgNjUsIDY3LCA3NSwgNjksIDgyLCAxMjgsIDY3LCA4MiwgMTI4LCA2NywgNzksIAotICAgIDg4LCAxMjgsIDY3LCA3OSwgODcsIDEyOCwgNjcsIDc5LCAyMTUsIDY3LCA3OSwgODYsIDY5LCA4MiwgMTI4LCA2NywgNzksIAotICAgIDg1LCA4MCwgNzYsIDE5NywgNjcsIDc5LCA4NSwgNzgsIDg0LCA3MywgNzgsIDE5OSwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgCi0gICAgODIsIDgzLCA3MywgNzgsIDc1LCAxMjgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA2NiwgNzksIDgyLCA2OSwgMTI4LCAKLSAgICA2NywgNzksIDg1LCA3OCwgNjcsIDczLCAyMDQsIDY3LCA3OSwgODQsIDEyOCwgNjcsIDc5LCA4MiwgODIsIDY5LCA4MywgODAsIAotICAgIDc5LCA3OCwgNjgsIDIxMSwgNjcsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDEyOCwgNjcsIDc5LCA4MiwgODAsIDgzLCA2OSwgCi0gICAgMTI4LCA2NywgNzksIDgyLCA4MCwgNzksIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA4MiwgNzksIDc4LCAKLSAgICA3MywgODMsIDEyOCwgNjcsIDc5LCA4MiwgNzgsIDY5LCA4MiwgODMsIDEyOCwgNjcsIDc5LCA4MiwgNzgsIDY5LCA4MiwgCi0gICAgMTI4LCA2NywgNzksIDgyLCA3OCwgNjksIDIxMCwgNjcsIDc5LCA4MCwgODksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCAKLSAgICA2NywgNzksIDgwLCA4OSwgODIsIDczLCA3MSwgNzIsIDIxMiwgNjcsIDc5LCA4MCwgODksIDEyOCwgNjcsIDc5LCA4MCwgODIsIAotICAgIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA2NywgNzksIDgwLCA4MCwgNjksIDgyLCA0NSwgNTAsIDEyOCwgNjcsIDc5LCA4MCwgCi0gICAgODAsIDY5LCA4MiwgMTI4LCA2NywgNzksIDgwLCAxMjgsIDY3LCA3OSwgNzksIDc2LCAxMjgsIDY3LCA3OSwgNzksIDc1LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDY3LCA3OSwgNzksIDc1LCA3MywgNjksIDEyOCwgNjcsIDc5LCA3OSwgNzUsIDY5LCAxOTYsIAotICAgIDY3LCA3OSwgNzksIDEyOCwgNjcsIDc5LCA3OCwgODYsIDY5LCA4MiwgNzEsIDczLCA3OCwgMTk5LCA2NywgNzksIDc4LCA4NiwgCi0gICAgNjksIDc4LCA3MywgNjksIDc4LCA2NywgMTk3LCA2NywgNzksIDc4LCA4NCwgODIsIDc5LCA3NiwgMTI4LCA2NywgNzksIDc4LCAKLSAgICA4NCwgODIsIDc5LCAyMDQsIDY3LCA3OSwgNzgsIDg0LCA4MiwgNjUsIDgyLCA3MywgNjksIDg0LCA4OSwgMTI4LCA2NywgNzksIAotICAgIDc4LCA4NCwgODIsIDY1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3OCwgODQsIDc5LCA4NSwgODIsIDY5LCAKLSAgICAxOTYsIDY3LCA3OSwgNzgsIDg0LCA3OSwgODUsIDIxMCwgNjcsIDc5LCA3OCwgODQsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjcsIDc5LCA3OCwgODQsIDY5LCA3NywgODAsIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3MywgNzgsIDIxMSwgNjcsIDc5LCA3OCwgODQsIDY1LCA3MywgNzgsIDczLCA3OCwgMTk5LCA2NywgNzksIDc4LCAKLSAgICA4NCwgNjUsIDczLCAyMDYsIDY3LCA3OSwgNzgsIDg0LCA2NSwgNjcsIDg0LCAxMjgsIDY3LCA3OSwgNzgsIDgzLCA4NCwgODIsIAotICAgIDg1LCA2NywgODQsIDczLCA3OSwgMjA2LCA2NywgNzksIDc4LCA4MywgODQsIDY1LCA3OCwgODQsIDEyOCwgNjcsIDc5LCA3OCwgCi0gICAgODMsIDg0LCA2NSwgNzgsIDIxMiwgNjcsIDc5LCA3OCwgODMsIDg0LCA2NSwgNzgsIDY3LCA4OSwgMTI4LCA2NywgNzksIDc4LCAKLSAgICA4MywgNjksIDY3LCA4NSwgODQsIDczLCA4NiwgMTk3LCA2NywgNzksIDc4LCA3NCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgCi0gICAgNzgsIDEyOCwgNjcsIDc5LCA3OCwgNzQsIDg1LCA3MSwgNjUsIDg0LCAxOTcsIDY3LCA3OSwgNzgsIDc0LCA3OSwgNzMsIDc4LCAKLSAgICA3MywgNzgsIDE5OSwgNjcsIDc5LCA3OCwgNzMsIDY3LCA2NSwgMjA0LCA2NywgNzksIDc4LCA3MSwgODIsIDg1LCA2OSwgNzgsIAorICAgIDEyOCwgNjgsIDc5LCA3MywgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIDY4LCAKKyAgICA3OSwgNjgsIDY5LCA3NSwgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY3LCA4NSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjgsIAorICAgIDc5LCA2NywgODUsIDc3LCA2OSwgNzgsIDIxMiwgNjgsIDc5LCA2NiwgODIsIDc5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgCisgICAgNjUsIDgzLCA3MiwgNzcsIDY5LCA2OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIDc3LCA2OSwgMTk3LCAKKyAgICA2OCwgNzksIDY1LCAxMjgsIDY4LCA3OSwgNDUsIDc5LCAxMjgsIDY4LCA3NywgMTI4LCA2OCwgMjA1LCA2OCwgNzYsIDg1LCAKKyAgICAxMjgsIDY4LCA3NiwgNzksIDEyOCwgNjgsIDc2LCA3MywgMTI4LCA2OCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgNjgsIDc2LCAKKyAgICA3MiwgNjUsIDEyOCwgNjgsIDc2LCA2OSwgNjksIDEyOCwgNjgsIDc2LCA2NSwgMTI4LCA2OCwgNzYsIDEyOCwgNjgsIDc1LCAKKyAgICA2NSwgODIsIDEyOCwgNjgsIDc1LCA2NSwgMjEwLCA2OCwgNzQsIDY5LCA4MiwgODYsIDczLCAxMjgsIDY4LCA3NCwgNjksIAorICAgIDgyLCA4NiwgMTI4LCA2OCwgNzQsIDY5LCAxMjgsIDY4LCA3NCwgNjUsIDEyOCwgNjgsIDczLCA5MCwgOTAsIDIxNywgNjgsIAorICAgIDczLCA4NiwgNzksIDgyLCA2NywgMTk3LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4NiwgCisgICAgNzMsIDgzLCA3MywgNzksIDIwNiwgNjgsIDczLCA4NiwgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCAKKyAgICA4NiwgNzMsIDY4LCA2OSwgODMsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgODIsIDgzLCAxMjgsIDY4LCA3MywgODYsIAorICAgIDczLCA2OCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDE5NiwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgCisgICAgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDE5NywgNjgsIDczLCA4NiwgNjksIDgyLCA3MSwgNjksIDc4LCA2NywgNjksIAorICAgIDEyOCwgNjgsIDczLCA4NCwgODQsIDIwNywgNjgsIDczLCA4MywgODQsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNjgsIDczLCA4MywgODQsIDczLCA3OCwgNzEsIDg1LCA3MywgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzYsIAorICAgIDc2LCAxMjgsIDY4LCA3MywgODMsIDgzLCA3OSwgNzYsIDg2LCA2OSwgNDUsIDUwLCAxMjgsIDY4LCA3MywgODMsIDgzLCA3OSwgCisgICAgNzYsIDg2LCA2OSwgMTI4LCA2OCwgNzMsIDgzLCA4MCwgNjksIDgyLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCAKKyAgICA3NSwgMTI4LCA2OCwgNzMsIDgzLCA3MywgNzcsIDc5LCA4NSwgMTI4LCA2OCwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIAorICAgIDgzLCA2NywgNzksIDc4LCA4NCwgNzMsIDc4LCA4NSwgNzksIDg1LCAyMTEsIDY4LCA3MywgODMsIDE5NSwgNjgsIDczLCA4MywgCisgICAgNjUsIDgwLCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDY4LCA3MywgODMsIDY1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCAKKyAgICA3MywgODIsIDcxLCAxOTMsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDc2LCAyMTcsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIAorICAgIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDgwLCA4NCwgCisgICAgNjksIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCAKKyAgICA2OCwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIDczLCA3OCwgNzEsIDY2LCA2NSwgCisgICAgMjEyLCA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCAKKyAgICA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgNDUsIDUwLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNDksIDEyOCwgNjgsIDczLCAKKyAgICA3NywgNzMsIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNjgsIDczLCAxOTMsIAorICAgIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCAKKyAgICA3OSwgMjA2LCA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc3LCAxNzgsIDY4LCA3MywgNzYsIDEyOCwgNjgsIDczLCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDEyOCwgNjgsIDczLCA3MSwgODIsIDY1LCA4MCwgMjAwLCA2OCwgNzMsIDcxLCA4MiwgNjUsIAorICAgIDc3LCA3NywgNzksIDIxMSwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNjgsIDczLCA3MSwgODIsIDY1LCAKKyAgICAyMDUsIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgCisgICAgMjA2LCA2OCwgNzMsIDcxLCA3MywgODQsIDgzLCAxMjgsIDY4LCA3MywgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDY4LCAKKyAgICA3MywgNzEsIDE5MywgNjgsIDczLCA3MCwgODQsIDc5LCA3MSwgNzEsIDc5LCAyMTEsIDY4LCA3MywgNzAsIDc5LCA3OCwgNzMsIAorICAgIDY1LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIDg0LCAyMTcsIDY4LCA3MywgNzAsIDcwLCA3MywgCisgICAgNjcsIDg1LCA3NiwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIDc4LCA4NCwgNzMsIAorICAgIDY1LCA3NiwgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDY4LCA3MywgNzAsIDY1LCA4NCwgCisgICAgMTI4LCA2OCwgNzMsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgMjExLCA2OCwgNzMsIDY5LCAKKyAgICA4MywgNjksIDIwNCwgNjgsIDczLCA2OSwgODAsIDEyOCwgNjgsIDczLCAxOTcsIDY4LCA3MywgNjYsIDEyOCwgNjgsIDczLCAKKyAgICA2NSwgODQsIDc5LCA3OCwgNzksIDIwNiwgNjgsIDczLCA2NSwgODQsIDc5LCA3OCwgNzMsIDc1LCAyMDEsIDY4LCA3MywgNjUsIAorICAgIDgzLCA4NCwgNzksIDc2LCAyMDEsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDY4LCA4MywgMTI4LCA2OCwgNzMsIDY1LCA3NywgCisgICAgNzksIDc4LCA2OCwgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCAxOTYsIDY4LCA3MywgNjUsIDc3LCA2OSwgODQsIDY5LCAKKyAgICAyMTAsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgNjUsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIAorICAgIDc1LCAxOTMsIDY4LCA3MywgNjUsIDc2LCA2OSwgNjcsIDg0LCA0NSwgMjA4LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgCisgICAgNzYsIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA5MCwgNjksIDE5NiwgNjgsIDczLCA2NSwgNjksIDgyLCAKKyAgICA2OSwgODMsIDczLCA4MywgNDUsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgCisgICAgODMsIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCAKKyAgICA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MywgNzMsIDEyOCwgNjgsIDcyLCA3MywgMTI4LCAKKyAgICA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzksIDEyOCwgNjgsIAorICAgIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgCisgICAgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDgyLCA3NywgNjUsIDEyOCwgNjgsIDcyLCAKKyAgICA2NSwgNzcsIDY5LCA2OCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIAorICAgIDY1LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA2OCwgCisgICAgNzIsIDY1LCA2NSwgNzYsIDg1LCAxMjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCAKKyAgICA5MCwgMjAwLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgCisgICAgMjExLCA2OCwgNjksIDg4LCA3MywgNjUsIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCAKKyAgICA3NiwgNzksIDgwLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgNzUsIAorICAgIDg0LCA3OSwgMjA4LCA2OCwgNjksIDgzLCAyMDMsIDY4LCA2OSwgODMsIDczLCA3MSwgNzgsIDEyOCwgNjgsIDY5LCA4MywgCisgICAgNzMsIDEyOCwgNjgsIDY5LCA4MywgNjksIDgyLCA4NCwgMTI4LCA2OCwgNjksIDgzLCA2OSwgODIsIDIxMiwgNjgsIDY5LCAKKyAgICA4MywgNjksIDgyLCA2OSwgMjEyLCA2OCwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgMjA2LCA2OCwgNjksIAorICAgIDgzLCA2NywgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA2OSwgODIsIDEyOCwgCisgICAgNjgsIDY5LCA4MiwgNjksIDg0LCA0NSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODIsIDY5LCA4NCwgMTI4LCAKKyAgICA2OCwgNjksIDgyLCA2OSwgNzYsIDczLCA2NywgMjEyLCA2OCwgNjksIDgwLCA4NCwgNzIsIDEyOCwgNjgsIDY5LCA4MCwgNjUsIAorICAgIDgyLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3NywgNjksIDc4LCAyMTIsIDY4LCA2OSwgCisgICAgODAsIDY1LCA4MiwgODQsIDczLCA3OCwgMTk5LCA2OCwgNjksIDc4LCA4NCwgNzMsIDgzLCA4NCwgODIsIDIxNywgNjgsIDY5LCAKKyAgICA3OCwgODQsIDY1LCAyMDQsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA2OCwgNjksIAorICAgIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgMjEwLCA2OCwgNjksIDc4LCA3OCwgNjksIDc4LCAxMjgsIDY4LCA2OSwgCisgICAgNzgsIDcxLCAxMjgsIDY4LCA2OSwgNzgsIDE5NywgNjgsIDY5LCA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgNjgsIDY5LCAKKyAgICA3NiwgODQsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxOTMsIDY4LCA2OSwgNzYsIDg0LCAxMjgsIDY4LCA2OSwgNzYsIAorICAgIDgwLCA3MiwgNzMsIDE5NSwgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIDIxNywgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgCisgICAgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgODIsIDEyOCwgNjgsIDY5LCAKKyAgICA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAyMTAsIDY4LCA2OSwgNzYsIDczLCA2NywgNzMsIDc5LCA4NSwgMjExLCA2OCwgNjksIAorICAgIDc2LCA2OSwgODQsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDY5LCA4NCwgMTk3LCA2OCwgNjksIDc1LCA2NSwgMTI4LCA2OCwgCisgICAgNjksIDc1LCAxMjgsIDY4LCA2OSwgNzMsIDEyOCwgNjgsIDY5LCA3MiwgNzMsIDEyOCwgNjgsIDY5LCA3MSwgODIsIDY5LCAKKyAgICA2OSwgODMsIDEyOCwgNjgsIDY5LCA3MSwgODIsIDY5LCAxOTcsIDY4LCA2OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzksIAorICAgIDc4LCAxMjgsIDY4LCA2OSwgNzAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDc4LCA2OSwgODMsIDIxMSwgNjgsIDY5LCA2OSwgCisgICAgODIsIDEyOCwgNjgsIDY5LCA2OSwgODAsIDc2LCA4OSwgMTI4LCA2OCwgNjksIDY5LCA3NiwgMTI4LCA2OCwgNjksIDY3LCAKKyAgICA4MiwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzksIDEyOCwgNjgsIDY5LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIAorICAgIDY4LCA2OSwgNjcsIDgyLCA2OSwgNjUsIDgzLCAxOTcsIDY4LCA2OSwgNjcsIDc5LCA4MiwgNjUsIDg0LCA3MywgODYsIDE5NywgCisgICAgNjgsIDY5LCA2NywgNzksIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDY5LCA2NywgNzMsIDgzLCA3MywgODYsIAorICAgIDY5LCA3OCwgNjksIDgzLCA4MywgMTI4LCA2OCwgNjksIDY3LCA3MywgNzcsIDY1LCAyMDQsIDY4LCA2OSwgNjcsIDczLCA2OCwgCisgICAgODUsIDc5LCA4NSwgMjExLCA2OCwgNjksIDY3LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA2NywgNjUsIDg5LCAKKyAgICA2OSwgNjgsIDEyOCwgNjgsIDY5LCA2NiwgNzMsIDIxMiwgNjgsIDY5LCA2NSwgODQsIDcyLCAxMjgsIDY4LCA2OSwgNjUsIAorICAgIDY4LCAxMjgsIDY4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA2OCwgODUsIDg4LCAxMjgsIDY4LCA2OCwgODUsIDg0LCAxMjgsIAorICAgIDY4LCA2OCwgODUsIDgyLCA4OCwgMTI4LCA2OCwgNjgsIDg1LCA4MiwgMTI4LCA2OCwgNjgsIDg1LCA4MCwgMTI4LCA2OCwgCisgICAgNjgsIDg1LCA3OSwgODgsIDEyOCwgNjgsIDY4LCA4NSwgNzksIDgwLCAxMjgsIDY4LCA2OCwgODUsIDc5LCAxMjgsIDY4LCAKKyAgICA2OCwgODUsIDEyOCwgNjgsIDY4LCA3OSwgODgsIDEyOCwgNjgsIDY4LCA3OSwgODQsIDEyOCwgNjgsIDY4LCA3OSwgODAsIAorICAgIDEyOCwgNjgsIDY4LCA3OSwgNjUsIDEyOCwgNjgsIDY4LCA3MywgODgsIDEyOCwgNjgsIDY4LCA3MywgODQsIDEyOCwgNjgsIAorICAgIDY4LCA3MywgODAsIDEyOCwgNjgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDY4LCA2OCwgNzMsIDY5LCA4MCwgMTI4LCA2OCwgCisgICAgNjgsIDczLCA2OSwgMTI4LCA2OCwgNjgsIDczLCAxMjgsIDY4LCA2OCwgNzIsIDg1LCAxMjgsIDY4LCA2OCwgNzIsIDc5LCAKKyAgICAxMjgsIDY4LCA2OCwgNzIsIDczLCAxMjgsIDY4LCA2OCwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNjgsIDcyLCA2OSwgMTI4LCAKKyAgICA2OCwgNjgsIDcyLCA2NSwgNjUsIDEyOCwgNjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY4LCA2OSwgODgsIDEyOCwgNjgsIAorICAgIDY4LCA2OSwgODAsIDEyOCwgNjgsIDY4LCA2OSwgNjksIDEyOCwgNjgsIDY4LCA2OSwgMTI4LCA2OCwgNjgsIDY4LCA3MiwgCisgICAgNjUsIDEyOCwgNjgsIDY4LCA2OCwgNjUsIDEyOCwgNjgsIDY4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY4LCAKKyAgICA2OCwgNjUsIDg4LCAxMjgsIDY4LCA2OCwgNjUsIDg0LCAxMjgsIDY4LCA2OCwgNjUsIDgwLCAxMjgsIDY4LCA2OCwgNjUsIAorICAgIDc2LCAxMjgsIDY4LCA2OCwgNjUsIDIwNCwgNjgsIDY4LCA2NSwgNzIsIDY1LCA3NiwgMTI4LCA2OCwgNjgsIDY1LCA3MiwgCisgICAgNjUsIDIwNCwgNjgsIDY4LCA2NSwgNjUsIDEyOCwgNjgsIDY3LCA4MywgMTI4LCA2OCwgNjcsIDcyLCA2OSwgMTI4LCA2OCwgCisgICAgNjcsIDUyLCAxMjgsIDY4LCA2NywgNTEsIDEyOCwgNjgsIDY3LCA1MCwgMTI4LCA2OCwgNjcsIDQ5LCAxMjgsIDY4LCAxOTQsIAorICAgIDY4LCA2NSwgODksIDQ1LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNjgsIDY1LCAyMTcsIDY4LCA2NSwgODcsIDY2LCAKKyAgICAxMjgsIDY4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA2OCwgNjUsIDg2LCA3MywgNjgsIDEyOCwgNjgsIAorICAgIDY1LCA4NCwgMTk3LCA2OCwgNjUsIDgzLCA3MywgNjUsIDEyOCwgNjgsIDY1LCA4MywgNzMsIDE5MywgNjgsIDY1LCA4MywgCisgICAgNzIsIDY5LCAxOTYsIDY4LCA2NSwgODMsIDcyLCAxMjgsIDY4LCA2NSwgODMsIDIwMCwgNjgsIDY1LCA4MywgNjksIDczLCAKKyAgICA2NSwgMTI4LCA2OCwgNjUsIDgyLCA4NCwgMTI4LCA2OCwgNjUsIDgyLCA3NSwgNjksIDc4LCA3MywgNzgsIDcxLCAxMjgsIAorICAgIDY4LCA2NSwgODIsIDc1LCA2OSwgNzgsIDczLCA3OCwgMTk5LCA2OCwgNjUsIDgyLCAyMDMsIDY4LCA2NSwgODIsIDcxLCA2NSwgCisgICAgMTI4LCA2OCwgNjUsIDgyLCA2NSwgNTIsIDEyOCwgNjgsIDY1LCA4MiwgNjUsIDUxLCAxMjgsIDY4LCA2NSwgODIsIDEyOCwgCisgICAgNjgsIDY1LCA4MCwgNDUsIDgwLCA4MiwgNjUsIDIwNSwgNjgsIDY1LCA4MCwgNDUsIDgwLCA3MywgMjAxLCA2OCwgNjUsIDgwLCAKKyAgICA0NSwgNzcsIDg1LCA3OSwgMjE3LCA2OCwgNjUsIDgwLCA0NSwgNjYsIDg1LCA3OSwgMjA2LCA2OCwgNjUsIDgwLCA0NSwgNjYsIAorICAgIDY5LCAyMDEsIDY4LCA2NSwgMjA4LCA2OCwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIDY4LCA2NSwgNzgsIDcxLCA3OSwgCisgICAgMTI4LCA2OCwgNjUsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIDc4LCAxOTksIDY4LCA2NSwgNzgsIDY4LCA2NSwgMTI4LCA2OCwgCisgICAgNjUsIDc4LCA2NywgNjksIDgyLCAxMjgsIDY4LCA2NSwgNzcsIDgwLCAxMjgsIDY4LCA2NSwgNzcsIDIwOCwgNjgsIDY1LCAKKyAgICA3NywgNzcsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDY4LCA2NSwgNzcsIDc3LCA2NSwgODQsIDY1LCAyMDYsIDY4LCA2NSwgNzcsIAorICAgIDc3LCA2NSwgMTI4LCA2OCwgNjUsIDc3LCA3NywgMTkzLCA2OCwgNjUsIDc3LCA2NSwgODIsIDg1LCAxMjgsIDY4LCA2NSwgCisgICAgNzYsIDY5LCA4NCwgNzIsIDQ1LCA4MiwgNjksIDgzLCA3MiwgMTI4LCA2OCwgNjUsIDc2LCA2OSwgODQsIDcyLCAxMjgsIDY4LCAKKyAgICA2NSwgNzYsIDY5LCA4NCwgMTI4LCA2OCwgNjUsIDc2LCA2OSwgMjEyLCA2OCwgNjUsIDc2LCA2OCwgNjUsIDEyOCwgNjgsIAorICAgIDY1LCA3NiwgNjUsIDg0LCA3MiwgMTI4LCA2OCwgNjUsIDc2LCA2NSwgODQsIDIwMCwgNjgsIDY1LCA3NiwgNjUsIDg0LCAKKyAgICAxMjgsIDY4LCA2NSwgNzMsIDgyLCAxMjgsIDY4LCA2NSwgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIDczLCAxMjgsIDY4LCAKKyAgICA2NSwgNzIsIDg5LCA2NSwgNjUsIDg1LCA4MywgNzIsIDQ1LCA1MCwgMTI4LCA2OCwgNjUsIDcyLCA4OSwgNjUsIDY1LCA4NSwgCisgICAgODMsIDcyLCAxMjgsIDY4LCA2NSwgNzEsIDgzLCAxMjgsIDY4LCA2NSwgNzEsIDcxLCA2OSwgODIsIDEyOCwgNjgsIDY1LCAKKyAgICA3MSwgNzEsIDY5LCAyMTAsIDY4LCA2NSwgNzEsIDY5LCA4MywgNzIsIDEyOCwgNjgsIDY1LCA3MSwgNjksIDgzLCAyMDAsIAorICAgIDY4LCA2NSwgNzEsIDY2LCA2NSwgODMsIDczLCA3OCwgNzgsIDY1LCAxMjgsIDY4LCA2NSwgNzEsIDY1LCAyMTgsIDY4LCA2NSwgCisgICAgNzEsIDY1LCA3NiwgNzEsIDY1LCAxMjgsIDY4LCA2NSwgNzEsIDUxLCAxMjgsIDY4LCA2NSwgMTk5LCA2OCwgNjUsIDY5LCAKKyAgICA3OCwgNzEsIDEyOCwgNjgsIDY1LCA2OSwgMTk5LCA2OCwgNjUsIDY4LCAxMjgsIDY4LCA2NSwgMTk2LCA2OCwgNjUsIDY1LCAKKyAgICA4MywgODUsIDEyOCwgNjgsIDY1LCA2NSwgNjgsIDcyLCA4NSwgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNzIsIDEyOCwgNjgsIAorICAgIDQ4LCA1NCwgNTUsIDcxLCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA3MCwgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNjksIDEyOCwgCisgICAgNjgsIDQ4LCA1NCwgNTUsIDY4LCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA2NywgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNjYsIAorICAgIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDY1LCAxMjgsIDY4LCA0OCwgNTQsIDU1LCAxMjgsIDY4LCA0OCwgNTQsIDU0LCAxMjgsIAorICAgIDY4LCA0OCwgNTQsIDUzLCAxMjgsIDY4LCA0OCwgNTQsIDUyLCAxMjgsIDY4LCA0OCwgNTQsIDUxLCAxMjgsIDY4LCA0OCwgCisgICAgNTQsIDUwLCAxMjgsIDY4LCA0OCwgNTQsIDQ5LCAxMjgsIDY4LCA0OCwgNTQsIDQ4LCAxMjgsIDY4LCA0OCwgNTMsIDU3LCAKKyAgICAxMjgsIDY4LCA0OCwgNTMsIDU2LCAxMjgsIDY4LCA0OCwgNTMsIDU1LCAxMjgsIDY4LCA0OCwgNTMsIDU0LCAxMjgsIDY4LCAKKyAgICA0OCwgNTMsIDUzLCAxMjgsIDY4LCA0OCwgNTMsIDUyLCA2NSwgMTI4LCA2OCwgNDgsIDUzLCA1MiwgMTI4LCA2OCwgNDgsIAorICAgIDUzLCA1MSwgMTI4LCA2OCwgNDgsIDUzLCA1MCwgNjUsIDEyOCwgNjgsIDQ4LCA1MywgNTAsIDEyOCwgNjgsIDQ4LCA1MywgCisgICAgNDksIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDczLCAxMjgsIDY4LCA0OCwgNTMsIDQ4LCA3MiwgMTI4LCA2OCwgNDgsIDUzLCAKKyAgICA0OCwgNzEsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDcwLCAxMjgsIDY4LCA0OCwgNTMsIDQ4LCA2OSwgMTI4LCA2OCwgNDgsIAorICAgIDUzLCA0OCwgNjgsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDY3LCAxMjgsIDY4LCA0OCwgNTMsIDQ4LCA2NiwgMTI4LCA2OCwgCisgICAgNDgsIDUzLCA0OCwgNjUsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDEyOCwgNjgsIDQ4LCA1MiwgNTcsIDEyOCwgNjgsIDQ4LCAKKyAgICA1MiwgNTYsIDY1LCAxMjgsIDY4LCA0OCwgNTIsIDU2LCAxMjgsIDY4LCA0OCwgNTIsIDU1LCAxMjgsIDY4LCA0OCwgNTIsIAorICAgIDU0LCA2NSwgMTI4LCA2OCwgNDgsIDUyLCA1NCwgMTI4LCA2OCwgNDgsIDUyLCA1MywgMTI4LCA2OCwgNDgsIDUyLCA1MiwgCisgICAgMTI4LCA2OCwgNDgsIDUyLCA1MSwgMTI4LCA2OCwgNDgsIDUyLCA1MCwgMTI4LCA2OCwgNDgsIDUyLCA0OSwgMTI4LCA2OCwgCisgICAgNDgsIDUyLCA0OCwgMTI4LCA2OCwgNDgsIDUxLCA1NywgMTI4LCA2OCwgNDgsIDUxLCA1NiwgMTI4LCA2OCwgNDgsIDUxLCAKKyAgICA1NSwgMTI4LCA2OCwgNDgsIDUxLCA1NCwgMTI4LCA2OCwgNDgsIDUxLCA1MywgMTI4LCA2OCwgNDgsIDUxLCA1MiwgNjUsIAorICAgIDEyOCwgNjgsIDQ4LCA1MSwgNTIsIDEyOCwgNjgsIDQ4LCA1MSwgNTEsIDEyOCwgNjgsIDQ4LCA1MSwgNTAsIDEyOCwgNjgsIAorICAgIDQ4LCA1MSwgNDksIDY1LCAxMjgsIDY4LCA0OCwgNTEsIDQ5LCAxMjgsIDY4LCA0OCwgNTEsIDQ4LCAxMjgsIDY4LCA0OCwgCisgICAgNTAsIDU3LCAxMjgsIDY4LCA0OCwgNTAsIDU2LCAxMjgsIDY4LCA0OCwgNTAsIDU1LCA2NSwgMTI4LCA2OCwgNDgsIDUwLCAKKyAgICA1NSwgMTI4LCA2OCwgNDgsIDUwLCA1NCwgMTI4LCA2OCwgNDgsIDUwLCA1MywgMTI4LCA2OCwgNDgsIDUwLCA1MiwgMTI4LCAKKyAgICA2OCwgNDgsIDUwLCA1MSwgMTI4LCA2OCwgNDgsIDUwLCA1MCwgMTI4LCA2OCwgNDgsIDUwLCA0OSwgMTI4LCA2OCwgNDgsIAorICAgIDUwLCA0OCwgMTI4LCA2OCwgNDgsIDQ5LCA1NywgMTI4LCA2OCwgNDgsIDQ5LCA1NiwgMTI4LCA2OCwgNDgsIDQ5LCA1NSwgCisgICAgMTI4LCA2OCwgNDgsIDQ5LCA1NCwgMTI4LCA2OCwgNDgsIDQ5LCA1MywgMTI4LCA2OCwgNDgsIDQ5LCA1MiwgMTI4LCA2OCwgCisgICAgNDgsIDQ5LCA1MSwgMTI4LCA2OCwgNDgsIDQ5LCA1MCwgMTI4LCA2OCwgNDgsIDQ5LCA0OSwgMTI4LCA2OCwgNDgsIDQ5LCAKKyAgICA0OCwgMTI4LCA2OCwgNDgsIDQ4LCA1NywgMTI4LCA2OCwgNDgsIDQ4LCA1NiwgNjUsIDEyOCwgNjgsIDQ4LCA0OCwgNTYsIAorICAgIDEyOCwgNjgsIDQ4LCA0OCwgNTUsIDEyOCwgNjgsIDQ4LCA0OCwgNTQsIDEyOCwgNjgsIDQ4LCA0OCwgNTMsIDEyOCwgNjgsIAorICAgIDQ4LCA0OCwgNTIsIDEyOCwgNjgsIDQ4LCA0OCwgNTEsIDEyOCwgNjgsIDQ4LCA0OCwgNTAsIDEyOCwgNjgsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNjcsIDg5LCA4OCwgMTI4LCA2NywgODksIDg0LCAxMjgsIDY3LCA4OSwgODIsIDg4LCAxMjgsIDY3LCA4OSwgCisgICAgODIsIDY5LCA3OCwgNjUsIDczLCAxOTUsIDY3LCA4OSwgODIsIDEyOCwgNjcsIDg5LCA4MCwgODIsIDczLCA3OSwgMjEyLCAKKyAgICA2NywgODksIDgwLCA2OSwgODIsIDg1LCA4MywgMTI4LCA2NywgODksIDgwLCAxMjgsIDY3LCA4OSwgNzYsIDczLCA3OCwgNjgsIAorICAgIDgyLCA3MywgNjcsIDczLCA4NCwgODksIDEyOCwgNjcsIDg5LCA2NywgNzYsIDc5LCA3OCwgNjksIDEyOCwgNjcsIDg5LCA2NSwgCisgICAgODksIDEyOCwgNjcsIDg5LCA2NSwgODcsIDEyOCwgNjcsIDg5LCA2NSwgMTI4LCA2NywgODcsIDc5LCA3OSwgMTI4LCA2NywgCisgICAgODcsIDc5LCAxMjgsIDY3LCA4NywgNzMsIDczLCAxMjgsIDY3LCA4NywgNzMsIDEyOCwgNjcsIDg3LCA2OSwgNzksIDgyLCAKKyAgICA4NCwgNzIsIDEyOCwgNjcsIDg3LCA2OSwgMTI4LCA2NywgODcsIDY1LCA2NSwgMTI4LCA2NywgODUsIDg4LCAxMjgsIDY3LCAKKyAgICA4NSwgODUsIDEyOCwgNjcsIDg1LCAyMTIsIDY3LCA4NSwgODMsIDg0LCA3OSwgNzcsIDgzLCAxMjgsIDY3LCA4NSwgODMsIAorICAgIDg0LCA3OSwgNzcsIDY5LCAyMTAsIDY3LCA4NSwgODMsIDg0LCA2NSwgODIsIDY4LCAxMjgsIDY3LCA4NSwgODMsIDgwLCAKKyAgICAxMjgsIDY3LCA4NSwgODIsIDg4LCAxMjgsIDY3LCA4NSwgODIsIDg2LCA3MywgNzgsIDE5OSwgNjcsIDg1LCA4MiwgODYsIAorICAgIDY5LCA2OCwgMTI4LCA2NywgODUsIDgyLCA4NiwgNjksIDE5NiwgNjcsIDg1LCA4MiwgODYsIDY5LCAxMjgsIDY3LCA4NSwgCisgICAgODIsIDg2LCAxOTcsIDY3LCA4NSwgODIsIDgyLCAyMTcsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDg0LCAxMjgsIDY3LCAKKyAgICA4NSwgODIsIDgyLCA2OSwgNzgsIDIxMiwgNjcsIDg1LCA4MiwgNzYsIDIxNywgNjcsIDg1LCA4MiwgNzYsIDEyOCwgNjcsIAorICAgIDg1LCA4MiwgMTI4LCA2NywgODUsIDgwLCA4MCwgNjksIDY4LCAxMjgsIDY3LCA4NSwgODAsIDgwLCA2OSwgMTk2LCA2NywgCisgICAgODUsIDc5LCA4OCwgMTI4LCA2NywgODUsIDc5LCA4MCwgMTI4LCA2NywgODUsIDc5LCAxMjgsIDY3LCA4NSwgMjA1LCA2NywgCisgICAgODUsIDY2LCA2OSwgNjgsIDEyOCwgNjcsIDg1LCA2NiwgMTk3LCA2NywgODUsIDY1LCA4NCwgODIsIDczLCA3NiwgNzYsIDc5LCAKKyAgICAxMjgsIDY3LCA4NSwgNjUsIDg0LCA4MiwgNzMsIDc2LCA3NiwgMjA3LCA2NywgODUsIDY1LCAyMDUsIDY3LCA4NSwgMTI4LCAKKyAgICA2NywgODMsIDczLCAxMjgsIDY3LCA4MiwgODksIDgzLCA4NCwgNjUsIDIwNCwgNjcsIDgyLCA4OSwgODAsIDg0LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDc3LCA3MywgMTk1LCA2NywgODIsIDg5LCA3MywgNzgsIDE5OSwgNjcsIDgyLCA4NSwgOTAsIDY5LCA3MywgCisgICAgODIsIDIwNywgNjcsIDgyLCA4NSwgNjcsIDczLCA3MCwgNzksIDgyLCAyMDUsIDY3LCA4MiwgODUsIDY3LCA3MywgNjYsIDc2LCAKKyAgICA2OSwgNDUsIDUzLCAxMjgsIDY3LCA4MiwgODUsIDY3LCA3MywgNjYsIDc2LCA2OSwgNDUsIDUyLCAxMjgsIDY3LCA4MiwgODUsIAorICAgIDY3LCA3MywgNjYsIDc2LCA2OSwgNDUsIDUxLCAxMjgsIDY3LCA4MiwgODUsIDY3LCA3MywgNjYsIDc2LCA2OSwgNDUsIDUwLCAKKyAgICAxMjgsIDY3LCA4MiwgODUsIDY3LCA3MywgNjYsIDc2LCA2OSwgMTI4LCA2NywgODIsIDc5LCA4NywgNzgsIDEyOCwgNjcsIAorICAgIDgyLCA3OSwgODMsIDgzLCA3MywgNzgsIDcxLCAxMjgsIDY3LCA4MiwgNzksIDgzLCA4MywgNzMsIDc4LCAxOTksIDY3LCA4MiwgCisgICAgNzksIDgzLCA4MywgNzIsIDY1LCA4NCwgNjcsIDIwMCwgNjcsIDgyLCA3OSwgODMsIDgzLCA2OSwgNjgsIDQ1LCA4NCwgNjUsIAorICAgIDczLCA3NiwgMTI4LCA2NywgODIsIDc5LCA4MywgODMsIDY5LCA2OCwgMTI4LCA2NywgODIsIDc5LCA4MywgODMsIDY5LCAKKyAgICAxOTYsIDY3LCA4MiwgNzksIDgzLCA4MywgNjYsIDc5LCA3OCwgNjksIDgzLCAxMjgsIDY3LCA4MiwgNzksIDgzLCA4MywgCisgICAgMTI4LCA2NywgODIsIDc5LCA4MywgMjExLCA2NywgODIsIDc5LCA4MCwgMTI4LCA2NywgODIsIDc5LCA3MywgODgsIDEyOCwgCisgICAgNjcsIDgyLCA3OSwgNjcsIDg1LCAyMTEsIDY3LCA4MiwgNzksIDY3LCA3OSwgNjgsIDczLCA3NiwgNjksIDEyOCwgNjcsIDgyLCAKKyAgICA3MywgNjcsIDc1LCA2OSwgMjEyLCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCA3OCwgODQsIDgzLCAxMjgsIDY3LCA4MiwgNjksIAorICAgIDgzLCA2NywgNjksIDc4LCA4NCwgMTI4LCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCA3OCwgMjEyLCA2NywgODIsIDY5LCA2OCwgCisgICAgNzMsIDIxMiwgNjcsIDgyLCA2OSwgNjUsIDg0LCA3MywgODYsIDE5NywgNjcsIDgyLCA2OSwgNjUsIDc3LCAxMjgsIDY3LCAKKyAgICA4MiwgNjUsIDg5LCA3OSwgNzgsIDEyOCwgNjcsIDgyLCA2NSwgNjcsIDc1LCA2OSwgODIsIDEyOCwgNjcsIDgyLCA2NSwgNjYsIAorICAgIDEyOCwgNjcsIDgyLCAxMjgsIDY3LCA3OSwgODgsIDEyOCwgNjcsIDc5LCA4NywgMTI4LCA2NywgNzksIDIxNSwgNjcsIDc5LCAKKyAgICA4NiwgNjksIDgyLCAxMjgsIDY3LCA3OSwgODUsIDgwLCA3NiwgMTk3LCA2NywgNzksIDg1LCA3OCwgODQsIDczLCA3OCwgCisgICAgMTk5LCA2NywgNzksIDg1LCA3OCwgODQsIDY5LCA4MiwgODMsIDczLCA3OCwgNzUsIDEyOCwgNjcsIDc5LCA4NSwgNzgsIDg0LCAKKyAgICA2OSwgODIsIDY2LCA3OSwgODIsIDY5LCAxMjgsIDY3LCA3OSwgODUsIDc4LCA2NywgNzMsIDIwNCwgNjcsIDc5LCA4NSwgNjcsIAorICAgIDIwMCwgNjcsIDc5LCA4NCwgMTI4LCA2NywgNzksIDgyLCA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCA2OCwgMjExLCA2NywgCisgICAgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgMTI4LCA2NywgNzksIDgyLCA4MCwgODMsIDY5LCAxMjgsIDY3LCA3OSwgODIsIDgwLCAKKyAgICA3OSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCA2NywgNzksIAorICAgIDgyLCA3OCwgNjksIDgyLCA4MywgMTI4LCA2NywgNzksIDgyLCA3OCwgNjksIDgyLCAxMjgsIDY3LCA3OSwgODIsIDc4LCA2OSwgCisgICAgMjEwLCA2NywgNzksIDgyLCA3NSwgMTI4LCA2NywgNzksIDgwLCA4OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDY3LCAKKyAgICA3OSwgODAsIDg5LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA2NywgNzksIDgwLCA4OSwgMTI4LCA2NywgNzksIDgwLCA4MiwgNzksIAorICAgIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDY3LCA3OSwgODAsIDgwLCA2OSwgODIsIDQ1LCA1MCwgMTI4LCA2NywgNzksIDgwLCA4MCwgCisgICAgNjksIDgyLCAxMjgsIDY3LCA3OSwgODAsIDEyOCwgNjcsIDc5LCA3OSwgNzYsIDEyOCwgNjcsIDc5LCA3OSwgNzUsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgNjcsIDc5LCA3OSwgNzUsIDczLCA2OSwgMTI4LCA2NywgNzksIDc5LCA3NSwgNjksIDE5NiwgNjcsIAorICAgIDc5LCA3OSwgMTI4LCA2NywgNzksIDc4LCA4NiwgNjksIDgyLCA3MSwgNzMsIDc4LCAxOTksIDY3LCA3OSwgNzgsIDg2LCA2OSwgCisgICAgNzgsIDczLCA2OSwgNzgsIDY3LCAxOTcsIDY3LCA3OSwgNzgsIDg0LCA4MiwgNzksIDc2LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCAKKyAgICA4MiwgNzksIDIwNCwgNjcsIDc5LCA3OCwgODQsIDgyLCA2NSwgODIsIDczLCA2OSwgODQsIDg5LCAxMjgsIDY3LCA3OSwgNzgsIAorICAgIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA4NCwgNzksIDg1LCA4MiwgNjksIDE5NiwgCisgICAgNjcsIDc5LCA3OCwgODQsIDc5LCA4NSwgMjEwLCA2NywgNzksIDc4LCA4NCwgNzMsIDc4LCA4NSwgNzMsIDc4LCAxOTksIDY3LCAKKyAgICA3OSwgNzgsIDg0LCA3MywgNzgsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNzksIDc4LCA4NCwgNjksIDc4LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA4NCwgNjksIDc3LCA4MCwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA2NywgNzksIDc4LCA4NCwgNjUsIDczLCA3OCwgMjExLCA2NywgNzksIDc4LCA4NCwgNjUsIDczLCA3OCwgNzMsIDc4LCAxOTksIAorICAgIDY3LCA3OSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNjcsIDc5LCA3OCwgODQsIDY1LCA2NywgODQsIDEyOCwgNjcsIDc5LCA3OCwgCisgICAgODMsIDg0LCA4MiwgODUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA4MywgODQsIDgyLCA4NSwgNjcsIAorICAgIDg0LCA3MywgNzksIDIwNiwgNjcsIDc5LCA3OCwgODMsIDg0LCA2NSwgNzgsIDg0LCAxMjgsIDY3LCA3OSwgNzgsIDgzLCA4NCwgCisgICAgNjUsIDc4LCAyMTIsIDY3LCA3OSwgNzgsIDgzLCA4NCwgNjUsIDc4LCA2NywgODksIDEyOCwgNjcsIDc5LCA3OCwgODMsIDY5LCAKKyAgICA2NywgODUsIDg0LCA3MywgODYsIDE5NywgNjcsIDc5LCA3OCwgNzQsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDY3LCA3OSwgNzgsIDc0LCA4NSwgNzEsIDY1LCA4NCwgMTk3LCA2NywgNzksIDc4LCA3NCwgNzksIDczLCA3OCwgNzMsIDc4LCAKKyAgICAxOTksIDY3LCA3OSwgNzgsIDc0LCA3OSwgNzMsIDc4LCA2OSwgNjgsIDEyOCwgNjcsIDc5LCA3OCwgNzQsIDc5LCA3MywgNzgsIAorICAgIDY5LCAxOTYsIDY3LCA3OSwgNzgsIDczLCA2NywgNjUsIDIwNCwgNjcsIDc5LCA3OCwgNzEsIDgyLCA4NSwgNjksIDc4LCAKICAgICAyMTIsIDY3LCA3OSwgNzgsIDcxLCA4MiwgNjUsIDg0LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIAogICAgIDc4LCA3MCwgODUsIDgzLCA2OSwgMTk2LCA2NywgNzksIDc4LCA3MCwgNzksIDg1LCA3OCwgNjgsIDY5LCAxOTYsIDY3LCA3OSwgCiAgICAgNzgsIDcwLCA3NiwgNzMsIDY3LCA4NCwgMTI4LCA2NywgNzksIDc4LCA3MCwgNjksIDg0LCA4NCwgMjAxLCA2NywgNzksIDc4LCAKICAgICA2NywgNjUsIDg2LCA2OSwgNDUsIDgzLCA3MywgNjgsIDY5LCAxOTYsIDY3LCA3OSwgNzgsIDY3LCA2NSwgODYsIDY5LCA0NSwgCi0gICAgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA2NywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA4NSwgODQsIDY5LCAKLSAgICA4MiwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3NywgODAsIAotICAgIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgNjcsIDc5LCA3NywgODAsIDc2LCA3MywgNjUsIDc4LCA2NywgNjksIDEyOCwgCi0gICAgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIAotICAgIDY5LCA2OCwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA2NywgNzksIDc3LCA4MCwgCi0gICAgNjUsIDgyLCA2OSwgMTI4LCA2NywgNzksIDc3LCA3NywgNzksIDIwNiwgNjcsIDc5LCA3NywgNzcsIDY5LCA4MiwgNjcsIDczLCAKLSAgICA2NSwgMjA0LCA2NywgNzksIDc3LCA3NywgNjUsIDc4LCA2OCwgMTI4LCA2NywgNzksIDc3LCA3NywgNjUsIDEyOCwgNjcsIAotICAgIDc5LCA3NywgNzcsIDE5MywgNjcsIDc5LCA3NywgNjksIDg0LCAxMjgsIDY3LCA3OSwgNzcsIDY2LCAxMjgsIDY3LCA3OSwgCi0gICAgNzYsIDg1LCA3NywgNzgsIDEyOCwgNjcsIDc5LCA3NiwgNzksIDgyLCAxMjgsIDY3LCA3OSwgNzYsIDc2LCA3MywgODMsIDczLCAKLSAgICA3OSwgMjA2LCA2NywgNzksIDc2LCA3NiwgMTI4LCA2NywgNzksIDc2LCAxOTYsIDY3LCA3OSwgNzAsIDcwLCA3MywgNzgsIAotICAgIDEyOCwgNjcsIDc5LCA2OSwgNzgsIDcxLCAxMjgsIDY3LCA3OSwgNjksIDc4LCAxOTksIDY3LCA3OSwgNjgsIDY1LCAxMjgsIAotICAgIDY3LCA3OSwgNjcsIDc1LCA4NCwgNjUsIDczLCAyMDQsIDY3LCA3OSwgNjUsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDY3LCA3OSwgCi0gICAgNjUsIDEyOCwgNjcsIDc5LCAxMjgsIDY3LCA3NywgMTI4LCA2NywgMjA1LCA2NywgNzYsIDg1LCA4MywgODQsIDY5LCAyMTAsIAotICAgIDY3LCA3NiwgODUsIDY2LCA4MywgMTI4LCA2NywgNzYsIDg1LCA2NiwgNDUsIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCA2NywgCi0gICAgNzYsIDg1LCA2NiwgMTI4LCA2NywgNzYsIDg1LCAxOTQsIDY3LCA3NiwgNzksIDg2LCA2OSwgODIsIDEyOCwgNjcsIDc2LCAKLSAgICA3OSwgODUsIDY4LCAxMjgsIDY3LCA3NiwgNzksIDg1LCAxOTYsIDY3LCA3NiwgNzksIDg0LCA3MiwgNjksIDgzLCAxMjgsIAotICAgIDY3LCA3NiwgNzksIDg0LCA3MiwgMTI4LCA2NywgNzYsIDc5LCA4MywgNjksIDg0LCAxMjgsIDY3LCA3NiwgNzksIDgzLCA2OSwgCi0gICAgNzgsIDY5LCA4MywgODMsIDEyOCwgNjcsIDc2LCA3OSwgODMsIDY5LCA2OCwgMTI4LCA2NywgNzYsIDc5LCA4MywgMTk3LCAKLSAgICA2NywgNzYsIDc5LCA2NywgNzUsIDg3LCA3MywgODMsIDE5NywgNjcsIDc2LCA3OSwgNjcsIDIwMywgNjcsIDc2LCA3MywgODYsIAotICAgIDczLCA4MywgMTI4LCA2NywgNzYsIDczLCA4MCwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDY3LCA3NiwgNzMsIDc4LCA3NSwgCi0gICAgNzMsIDc4LCAxOTksIDY3LCA3NiwgNzMsIDc4LCA3MSwgNzMsIDc4LCAxOTksIDY3LCA3NiwgNzMsIDc3LCA2NSwgNjcsIDg1LCAKLSAgICA4MywgMTI4LCA2NywgNzYsIDczLCA3MCwgNzAsIDEyOCwgNjcsIDc2LCA3MywgNjcsIDc1LCAxMjgsIDY3LCA3NiwgNjksIAotICAgIDcwLCA0NSwgNTAsIDEyOCwgNjcsIDc2LCA2OSwgNzAsIDQ1LCA0OSwgMTI4LCA2NywgNzYsIDY5LCA3MCwgMTI4LCA2NywgCi0gICAgNzYsIDY5LCAxOTgsIDY3LCA3NiwgNjksIDY1LCA4NiwgNjksIDgyLCAxMjgsIDY3LCA3NiwgNjksIDY1LCAyMTAsIDY3LCAKLSAgICA3NiwgNjUsIDg3LCAxMjgsIDY3LCA3NiwgNjUsIDgwLCA4MCwgNzMsIDc4LCAxOTksIDY3LCA3NiwgNjUsIDgwLCA4MCwgNjksIAotICAgIDIxMCwgNjcsIDc2LCA2NSwgNzgsIDEyOCwgNjcsIDc2LCA2NSwgNzMsIDc3LCAxMjgsIDY3LCA3NiwgMTI4LCA2NywgNzMsIAotICAgIDg4LCAxMjgsIDY3LCA3MywgODYsIDczLCA3NiwgNzMsIDY1LCA3OCwgMTI4LCA2NywgNzMsIDg0LCA4OSwgODMsIDY3LCA2NSwgCi0gICAgODAsIDE5NywgNjcsIDczLCA4NCwgMTI4LCA2NywgNzMsIDgyLCA2NywgODUsIDIxMSwgNjcsIDczLCA4MiwgNjcsIDg1LCAKLSAgICA3NywgNzAsIDc2LCA2OSwgODgsIDEyOCwgNjcsIDczLCA4MiwgNjcsIDg1LCA3NywgNzAsIDc2LCA2OSwgMjE2LCA2NywgNzMsIAotICAgIDgyLCA2NywgODUsIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNzMsIDgyLCA2NywgNzYsIDY5LCA4MywgMTI4LCA2NywgCi0gICAgNzMsIDgyLCA2NywgNzYsIDY5LCAxMjgsIDY3LCA3MywgODAsIDEyOCwgNjcsIDczLCA3OCwgNzgsIDY1LCA2NiwgNjUsIDgyLCAKLSAgICAxMjgsIDY3LCA3MywgNzgsIDY5LCA3NywgNjUsIDEyOCwgNjcsIDczLCA3MywgMTI4LCA2NywgNzMsIDY5LCA4OCwgMTI4LCAKLSAgICA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA2NywgCi0gICAgNzMsIDY5LCA4NSwgNjcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNjcsIDczLCA2OSwgODUsIDY3LCA0NSwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDY3LCA3MywgNjksIDg1LCAxOTUsIDY3LCA3MywgNjksIDg0LCAxMjgsIDY3LCA3MywgCi0gICAgNjksIDgwLCAxMjgsIDY3LCA3MywgNjksIDEyOCwgNjcsIDcyLCA4OSwgODgsIDEyOCwgNjcsIDcyLCA4OSwgODQsIDEyOCwgCi0gICAgNjcsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDY3LCA3MiwgODksIDgyLCAxMjgsIDY3LCA3MiwgODksIDgwLCAxMjgsIDY3LCAKLSAgICA3MiwgODUsIDg4LCAxMjgsIDY3LCA3MiwgODUsIDgyLCA4OCwgMTI4LCA2NywgNzIsIDg1LCA4MiwgNjcsIDcyLCAxMjgsIAotICAgIDY3LCA3MiwgODUsIDgyLCAxMjgsIDY3LCA3MiwgODUsIDgwLCAxMjgsIDY3LCA3MiwgODUsIDc5LCA4OCwgMTI4LCA2NywgCi0gICAgNzIsIDg1LCA3OSwgODQsIDEyOCwgNjcsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDY3LCA3MiwgODUsIDc5LCAxMjgsIDY3LCAKLSAgICA3MiwgODUsIDc2LCA2NSwgMTI4LCA2NywgNzIsIDg1LCAxMjgsIDY3LCA3MiwgODIsIDg5LCA4MywgNjUsIDc4LCA4NCwgNzIsIAotICAgIDY5LCA3NywgODUsIDc3LCAxMjgsIDY3LCA3MiwgODIsIDc5LCA3OCwgNzksIDg1LCAxMjgsIDY3LCA3MiwgODIsIDc5LCA3OCwgCi0gICAgNzksIDc4LCAxMjgsIDY3LCA3MiwgODIsIDc5LCA3NywgMTkzLCA2NywgNzIsIDgyLCA3OSwgMTkzLCA2NywgNzIsIDgyLCAKLSAgICA3MywgODYsIDczLCAxMjgsIDY3LCA3MiwgODIsIDczLCA4MywgODQsIDc3LCA2NSwgODMsIDEyOCwgNjcsIDcyLCA4MiwgNzMsIAotICAgIDgzLCA4NCwgNzcsIDY1LCAyMTEsIDY3LCA3MiwgNzksIDg4LCAxMjgsIDY3LCA3MiwgNzksIDg0LCAxMjgsIDY3LCA3MiwgCi0gICAgNzksIDgyLCA2OSwgODYsIDc3LCAxOTMsIDY3LCA3MiwgNzksIDgwLCAxMjgsIDY3LCA3MiwgNzksIDc1LCA2OSwgMTI4LCAKLSAgICA2NywgNzIsIDc5LCA2OSwgMTI4LCA2NywgNzIsIDc5LCA2NywgNzksIDc2LCA2NSwgODQsIDE5NywgNjcsIDcyLCA3OSwgNjUsIAotICAgIDEyOCwgNjcsIDcyLCAyMDcsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCA3NywgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgCi0gICAgNzMsIDc5LCA4MywgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIAotICAgIDczLCA2OSwgODUsIDY3LCAxMjgsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCA3NywgODMsIDczLCA3OSwgODMsIDEyOCwgCi0gICAgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIDc3LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNjcsIDcyLCA3MywgODQsIAotICAgIDg1LCA2OSwgODUsIDc3LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA2NywgNzIsIDczLCA4MiwgNzksIDc4LCAKLSAgICAxMjgsIDY3LCA3MiwgNzMsIDgyLCA2OSwgODQsIDEyOCwgNjcsIDcyLCA3MywgNzgsIDcxLCAxMjgsIDY3LCA3MiwgNzMsIAotICAgIDc4LCA2OSwgODMsIDE5NywgNjcsIDcyLCA3MywgNzgsIDEyOCwgNjcsIDcyLCA3MywgNzcsIDY5LCAxMjgsIDY3LCA3MiwgCi0gICAgNzMsIDc2LCA3NiwgMjEzLCA2NywgNzIsIDczLCA3NiwgNjgsIDgyLCA2OSwgMjA2LCA2NywgNzIsIDczLCA3NiwgNjgsIAotICAgIDEyOCwgNjcsIDcyLCA3MywgNzYsIDEyOCwgNjcsIDcyLCA3MywgNzUsIDIwMSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgCi0gICAgNzIsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgNDUsIAotICAgIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCAyMDAsIDY3LCA3MiwgNzMsIDY3LCA3NSwgCi0gICAgNjksIDc4LCAxMjgsIDY3LCA3MiwgNzMsIDY3LCA3NSwgMTI4LCA2NywgNzIsIDczLCAxMjgsIDY3LCA3MiwgMjAxLCA2NywgCi0gICAgNzIsIDcyLCA2NSwgMTI4LCA2NywgNzIsIDY5LCA4OCwgMTI4LCA2NywgNzIsIDY5LCA4NiwgODIsIDc5LCAyMDYsIDY3LCAKLSAgICA3MiwgNjksIDg0LCAxMjgsIDY3LCA3MiwgNjksIDgzLCA4NCwgNzgsIDg1LCA4NCwgMTI4LCA2NywgNzIsIDY5LCA4MywgCi0gICAgMjExLCA2NywgNzIsIDY5LCA4MiwgODIsIDIxNywgNjcsIDcyLCA2OSwgODIsIDgyLCA3MywgNjksIDgzLCAxMjgsIDY3LCAKKyAgICA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDY3LCA3OSwgNzcsIDgwLCA4NSwgODQsIDY5LCA4MiwgODMsIDEyOCwgNjcsIAorICAgIDc5LCA3NywgODAsIDg1LCA4NCwgNjksIDgyLCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIDc5LCAKKyAgICA3OCwgMTI4LCA2NywgNzksIDc3LCA4MCwgODIsIDY5LCA4MywgODMsIDY5LCAxOTYsIDY3LCA3OSwgNzcsIDgwLCA3OSwgODMsIAorICAgIDczLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA2NywgCisgICAgNzksIDc3LCA4MCwgNzYsIDczLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgNzMsIAorICAgIDc5LCA3OCwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgNjksIDY4LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgCisgICAgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA2NSwgODIsIDY5LCAxMjgsIDY3LCA3OSwgNzcsIDc3LCAKKyAgICA3OSwgMjA2LCA2NywgNzksIDc3LCA3NywgNjksIDgyLCA2NywgNzMsIDY1LCAyMDQsIDY3LCA3OSwgNzcsIDc3LCA2NSwgNzgsIAorICAgIDY4LCAxMjgsIDY3LCA3OSwgNzcsIDc3LCA2NSwgMTI4LCA2NywgNzksIDc3LCA3NywgMTkzLCA2NywgNzksIDc3LCA2OSwgCisgICAgODQsIDEyOCwgNjcsIDc5LCA3NywgNjYsIDczLCA3OCwgNjksIDY4LCAxMjgsIDY3LCA3OSwgNzcsIDY2LCA3MywgNzgsIDY1LCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc3LCA2NiwgMTI4LCA2NywgNzksIDc2LCA4NSwgNzcsIDc4LCAxMjgsIAorICAgIDY3LCA3OSwgNzYsIDc5LCA4MiwgMTI4LCA2NywgNzksIDc2LCA3NiwgNzMsIDgzLCA3MywgNzksIDIwNiwgNjcsIDc5LCA3NiwgCisgICAgNzYsIDEyOCwgNjcsIDc5LCA3NiwgMTk2LCA2NywgNzksIDcwLCA3MCwgNzMsIDc4LCAxMjgsIDY3LCA3OSwgNjksIDc4LCAKKyAgICA3MSwgMTI4LCA2NywgNzksIDY5LCA3OCwgMTk5LCA2NywgNzksIDY4LCA2NSwgMTI4LCA2NywgNzksIDY3LCA3NSwgODQsIAorICAgIDY1LCA3MywgMjA0LCA2NywgNzksIDY1LCA4MywgODQsIDY5LCA4MiwgMTI4LCA2NywgNzksIDY1LCAxMjgsIDY3LCA3NywgCisgICAgMTI4LCA2NywgMjA1LCA2NywgNzYsIDg1LCA4MywgODQsIDY5LCAyMTAsIDY3LCA3NiwgODUsIDY2LCA4MywgMTI4LCA2NywgCisgICAgNzYsIDg1LCA2NiwgNDUsIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCA2NywgNzYsIDg1LCA2NiwgMTI4LCA2NywgNzYsIDg1LCAKKyAgICAxOTQsIDY3LCA3NiwgNzksIDg2LCA2OSwgODIsIDEyOCwgNjcsIDc2LCA3OSwgODUsIDY4LCAxMjgsIDY3LCA3NiwgNzksIAorICAgIDg1LCAxOTYsIDY3LCA3NiwgNzksIDg0LCA3MiwgNjksIDgzLCAxMjgsIDY3LCA3NiwgNzksIDg0LCA3MiwgMTI4LCA2NywgCisgICAgNzYsIDc5LCA4MywgNjksIDg0LCAxMjgsIDY3LCA3NiwgNzksIDgzLCA2OSwgNzgsIDY5LCA4MywgODMsIDEyOCwgNjcsIDc2LCAKKyAgICA3OSwgODMsIDY5LCA2OCwgMTI4LCA2NywgNzYsIDc5LCA4MywgMTk3LCA2NywgNzYsIDc5LCA2NywgNzUsIDg3LCA3MywgODMsIAorICAgIDE5NywgNjcsIDc2LCA3OSwgNjcsIDIwMywgNjcsIDc2LCA3MywgODYsIDczLCA4MywgMTI4LCA2NywgNzYsIDczLCA4MCwgCisgICAgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDY3LCA3NiwgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDY3LCA3NiwgNzMsIDc4LCAKKyAgICA3MSwgNzMsIDc4LCAxOTksIDY3LCA3NiwgNzMsIDc3LCA2NSwgNjcsIDg1LCA4MywgMTI4LCA2NywgNzYsIDczLCA3MCwgNzAsIAorICAgIDEyOCwgNjcsIDc2LCA3MywgNjcsIDc1LCAxMjgsIDY3LCA3NiwgNjksIDcwLCA0NSwgNTAsIDEyOCwgNjcsIDc2LCA2OSwgCisgICAgNzAsIDQ1LCA0OSwgMTI4LCA2NywgNzYsIDY5LCA3MCwgMTI4LCA2NywgNzYsIDY5LCAxOTgsIDY3LCA3NiwgNjksIDY1LCAKKyAgICA4NiwgNjksIDgyLCAxMjgsIDY3LCA3NiwgNjksIDY1LCAyMTAsIDY3LCA3NiwgNjUsIDgzLCA4MywgNzMsIDY3LCA2NSwgCisgICAgMjA0LCA2NywgNzYsIDY1LCA4MCwgODAsIDczLCA3OCwgMTk5LCA2NywgNzYsIDY1LCA4MCwgODAsIDY5LCAyMTAsIDY3LCAKKyAgICA3NiwgNjUsIDc4LCAxMjgsIDY3LCA3NiwgNjUsIDIwNiwgNjcsIDc2LCA2NSwgNzcsIDgzLCA3MiwgNjksIDc2LCAyMDQsIAorICAgIDY3LCA3NiwgNjUsIDczLCA3NywgMTI4LCA2NywgNzYsIDEyOCwgNjcsIDczLCA4OCwgMTI4LCA2NywgNzMsIDg2LCA3MywgCisgICAgNzYsIDczLCA2NSwgNzgsIDEyOCwgNjcsIDczLCA4NCwgODksIDgzLCA2NywgNjUsIDgwLCA2OSwgMTI4LCA2NywgNzMsIDg0LCAKKyAgICA4OSwgODMsIDY3LCA2NSwgODAsIDE5NywgNjcsIDczLCA4NCwgMjAxLCA2NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgCisgICAgMjA2LCA2NywgNzMsIDg0LCAxMjgsIDY3LCA3MywgODIsIDY3LCA4NSwgMjExLCA2NywgNzMsIDgyLCA2NywgODUsIDc3LCAKKyAgICA3MCwgNzYsIDY5LCA4OCwgMTI4LCA2NywgNzMsIDgyLCA2NywgODUsIDc3LCA3MCwgNzYsIDY5LCAyMTYsIDY3LCA3MywgODIsIAorICAgIDY3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA3MywgODIsIDY3LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA2NywgCisgICAgNzMsIDgyLCA2NywgNzYsIDczLCA3OCwgMTk5LCA2NywgNzMsIDgyLCA2NywgNzYsIDY5LCA4MywgMTI4LCA2NywgNzMsIDgyLCAKKyAgICA2NywgNzYsIDY5LCAyMTEsIDY3LCA3MywgODIsIDY3LCA3NiwgNjksIDY4LCAxMjgsIDY3LCA3MywgODAsIDEyOCwgNjcsIAorICAgIDczLCA3OCwgNzgsIDY1LCA2NiwgNjUsIDgyLCAxMjgsIDY3LCA3MywgNzgsIDY5LCA3NywgNjUsIDEyOCwgNjcsIDczLCAKKyAgICAyMDYsIDY3LCA3MywgMjA1LCA2NywgNzMsIDczLCAxMjgsIDY3LCA3MywgNjksIDg4LCAxMjgsIDY3LCA3MywgNjksIDg1LCAKKyAgICA2NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDY3LCA3MywgNjksIDg1LCA2NywgCisgICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA2NywgNzMsIDY5LCA4NSwgNjcsIDQ1LCA3MywgNjksIDg1LCA3OCwgNzEsIAorICAgIDEyOCwgNjcsIDczLCA2OSwgODUsIDE5NSwgNjcsIDczLCA2OSwgODQsIDEyOCwgNjcsIDczLCA2OSwgODAsIDEyOCwgNjcsIAorICAgIDczLCA2OSwgMTI4LCA2NywgNzIsIDg5LCA4OCwgMTI4LCA2NywgNzIsIDg5LCA4NCwgMTI4LCA2NywgNzIsIDg5LCA4MiwgCisgICAgODgsIDEyOCwgNjcsIDcyLCA4OSwgODIsIDEyOCwgNjcsIDcyLCA4OSwgODAsIDEyOCwgNjcsIDcyLCA4NywgODYsIDEyOCwgCisgICAgNjcsIDcyLCA4NSwgODgsIDEyOCwgNjcsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDY3LCA3MiwgODUsIDgyLCA2NywgNzIsIAorICAgIDEyOCwgNjcsIDcyLCA4NSwgODIsIDEyOCwgNjcsIDcyLCA4NSwgODAsIDEyOCwgNjcsIDcyLCA4NSwgNzksIDg4LCAxMjgsIAorICAgIDY3LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA2NywgNzIsIDg1LCA3OSwgODAsIDEyOCwgNjcsIDcyLCA4NSwgNzksIDEyOCwgCisgICAgNjcsIDcyLCA4NSwgNzYsIDY1LCAxMjgsIDY3LCA3MiwgODUsIDEyOCwgNjcsIDcyLCA4MiwgODksIDgzLCA2NSwgNzgsIDg0LCAKKyAgICA3MiwgNjksIDc3LCA4NSwgNzcsIDEyOCwgNjcsIDcyLCA4MiwgNzksIDc4LCA3OSwgODUsIDEyOCwgNjcsIDcyLCA4MiwgNzksIAorICAgIDc4LCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA4MiwgNzksIDc3LCAxOTMsIDY3LCA3MiwgODIsIDc5LCAxOTMsIDY3LCA3MiwgCisgICAgODIsIDczLCA4NiwgNzMsIDEyOCwgNjcsIDcyLCA4MiwgNzMsIDgzLCA4NCwgNzcsIDY1LCA4MywgMTI4LCA2NywgNzIsIDgyLCAKKyAgICA3MywgODMsIDg0LCA3NywgNjUsIDIxMSwgNjcsIDcyLCA3OSwgODksIDEyOCwgNjcsIDcyLCA3OSwgODgsIDEyOCwgNjcsIAorICAgIDcyLCA3OSwgODQsIDEyOCwgNjcsIDcyLCA3OSwgODIsIDY5LCA4NiwgNzcsIDE5MywgNjcsIDcyLCA3OSwgODAsIDEyOCwgCisgICAgNjcsIDcyLCA3OSwgNzUsIDY5LCAxMjgsIDY3LCA3MiwgNzksIDY5LCAxMjgsIDY3LCA3MiwgNzksIDY3LCA3OSwgNzYsIDY1LCAKKyAgICA4NCwgMTk3LCA2NywgNzIsIDc5LCA2NSwgMTI4LCA2NywgNzIsIDIwNywgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIAorICAgIDc3LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCAKKyAgICA3NywgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgCisgICAgODUsIDc3LCA4MywgNzMsIDc5LCA4MywgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDY3LCA3MywgNjksIAorICAgIDg1LCA2NywgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAKKyAgICAxMjgsIDY3LCA3MiwgNzMsIDgyLCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA3MywgODIsIDY5LCA4NCwgMTI4LCA2NywgNzIsIAorICAgIDczLCA4MCwgNzcsIDg1LCA3OCwgNzUsIDEyOCwgNjcsIDcyLCA3MywgNzgsIDc5LCA3OSwgMjAzLCA2NywgNzIsIDczLCA3OCwgCisgICAgNzEsIDEyOCwgNjcsIDcyLCA3MywgNzgsIDY5LCA4MywgMTk3LCA2NywgNzIsIDczLCA3OCwgMTI4LCA2NywgNzIsIDczLCAKKyAgICA3NywgNjksIDEyOCwgNjcsIDcyLCA3MywgNzYsIDc2LCAyMTMsIDY3LCA3MiwgNzMsIDc2LCA2OCwgODIsIDY5LCAyMDYsIAorICAgIDY3LCA3MiwgNzMsIDc2LCA2OCwgMTI4LCA2NywgNzIsIDczLCA3NiwgMTI4LCA2NywgNzIsIDczLCA3NSwgMjAxLCA2NywgCisgICAgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDY3LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgNjcsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDIwMCwgCisgICAgNjcsIDcyLCA3MywgNjcsIDc1LCA2OSwgNzgsIDEyOCwgNjcsIDcyLCA3MywgNjcsIDc1LCAxMjgsIDY3LCA3MiwgNzMsIAorICAgIDEyOCwgNjcsIDcyLCAyMDEsIDY3LCA3MiwgNzIsIDY1LCAxMjgsIDY3LCA3MiwgNjksIDg4LCAxMjgsIDY3LCA3MiwgNjksIAorICAgIDg2LCA4MiwgNzksIDIwNiwgNjcsIDcyLCA2OSwgODQsIDEyOCwgNjcsIDcyLCA2OSwgODMsIDg0LCA3OCwgODUsIDg0LCAKKyAgICAxMjgsIDY3LCA3MiwgNjksIDgzLCA4NCwgMTI4LCA2NywgNzIsIDY5LCA4MywgMjExLCA2NywgNzIsIDY5LCA4MiwgODksIAorICAgIDEyOCwgNjcsIDcyLCA2OSwgODIsIDgyLCAyMTcsIDY3LCA3MiwgNjksIDgyLCA4MiwgNzMsIDY5LCA4MywgMTI4LCA2NywgCiAgICAgNzIsIDY5LCA4MSwgODUsIDY5LCA4MiwgNjksIDE5NiwgNjcsIDcyLCA2OSwgODAsIDEyOCwgNjcsIDcyLCA2OSwgMjA2LCAKICAgICA2NywgNzIsIDY5LCA3MywgNzgsIDY1LCA4MCwgMTI4LCA2NywgNzIsIDY5LCA3MywgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNjcsIAotICAgIDcyLCA2OSwgNzMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDY3LCA3MiwgNjksIDY5LCA4MiwgNzMsIDc4LCAxOTksIDY3LCA3MiwgCi0gICAgNjksIDY5LCAxMjgsIDY3LCA3MiwgNjksIDY3LCA3NSwgMTI4LCA2NywgNzIsIDY5LCA2NywgMjAzLCA2NywgNzIsIDE5NywgCi0gICAgNjcsIDcyLCA2NSwgODgsIDEyOCwgNjcsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA2NywgNzIsIDY1LCAKLSAgICA4NCwgODQsIDY1LCA4NywgNjUsIDEyOCwgNjcsIDcyLCA2NSwgODQsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDg0LCAxMjgsIAotICAgIDY3LCA3MiwgNjUsIDgyLCAyMTIsIDY3LCA3MiwgNjUsIDgyLCA3MywgNzksIDg0LCAxMjgsIDY3LCA3MiwgNjUsIDgyLCA3MywgCi0gICAgNzksIDIxMiwgNjcsIDcyLCA2NSwgODIsIDY1LCA2NywgODQsIDY5LCA4MiwgODMsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDY1LCAKLSAgICA2NywgODQsIDY5LCA4MiwgMTI4LCA2NywgNzIsIDY1LCA4MiwgMTI4LCA2NywgNzIsIDY1LCA4MCwgMTI4LCA2NywgNzIsIAotICAgIDY1LCA3OCwgNzEsIDEyOCwgNjcsIDcyLCA2NSwgNzgsIDEyOCwgNjcsIDcyLCA2NSwgNzcsIDc1LCA3OSwgMTI4LCA2NywgCi0gICAgNzIsIDY1LCA3NywgNzMsIDc2LCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA2NSwgNzcsIDczLCA3NiwgNzMsIDEyOCwgNjcsIDcyLCAKLSAgICA2NSwgNzUsIDc3LCAxOTMsIDY3LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA2NywgNzIsIDY1LCA3MywgNzgsIDgzLCAxMjgsIAotICAgIDY3LCA3MiwgNjUsIDY4LCA2NSwgMTI4LCA2NywgNzIsIDY1LCAxOTYsIDY3LCA3MiwgNjUsIDY1LCAxMjgsIDY3LCA3MSwgCi0gICAgNzQsIDEyOCwgNjcsIDY5LCA4OCwgMTI4LCA2NywgNjksIDgyLCA2OSwgODMsIDEyOCwgNjcsIDY5LCA4MiwgNjksIDc3LCAKLSAgICA3OSwgNzgsIDg5LCAxMjgsIDY3LCA2OSwgODIsIDY5LCA3NSwgMTI4LCA2NywgNjksIDgyLCA0NSwgODcsIDY1LCAxMjgsIAotICAgIDY3LCA2OSwgODAsIDEyOCwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIDczLCA2OSwgODUsIDc3LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgCi0gICAgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIAotICAgIDczLCA2OSwgODUsIDc3LCA4MywgNzMsIDc5LCA4MywgMTI4LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCAKLSAgICA4NSwgNzcsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgNzcsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDY3LCA2OSwgNzgsIDg0LCA4NSwgODIsIDczLCA2NSwgMjA0LCAKLSAgICA2NywgNjksIDc4LCA4NCwgODIsIDY5LCA3NiwgNzMsIDc4LCAxOTcsIDY3LCA2OSwgNzgsIDg0LCA4MiwgNjksIDE5NiwgNjcsIAotICAgIDY5LCA3OCwgODQsIDgyLCA2OSwgMTI4LCA2NywgNjksIDc4LCA4NCwgODIsIDE5NywgNjcsIDY5LCA3OCwgMTI4LCA2NywgCi0gICAgNjksIDc2LCA4MywgNzMsIDg1LCA4MywgMTI4LCA2NywgNjksIDc2LCA2OSwgNjYsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjcsIDY5LCA3MywgODIsIDg0LCAxMjgsIDY3LCA2OSwgNzMsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDY3LCA2OSwgCi0gICAgNjksIDEyOCwgNjcsIDY5LCA2OCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjcsIDY5LCA2OCwgNzMsIDc2LCA3NiwgMTkzLCAKLSAgICA2NywgNjksIDY4LCAyMDEsIDY3LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA2NywgNjksIDY3LCA2NSwgNzUsIDEyOCwgNjcsIAotICAgIDY5LCA2NywgNjUsIDIwMywgNjcsIDY5LCA2NSwgNzYsIDY3LCAxMjgsIDY3LCA2NywgODUsIDEyOCwgNjcsIDY3LCA3OSwgCi0gICAgMTI4LCA2NywgNjcsIDczLCAxMjgsIDY3LCA2NywgNzIsIDg1LCAxMjgsIDY3LCA2NywgNzIsIDc5LCAxMjgsIDY3LCA2NywgCi0gICAgNzIsIDczLCAxMjgsIDY3LCA2NywgNzIsIDcyLCA4NSwgMTI4LCA2NywgNjcsIDcyLCA3MiwgNzksIDEyOCwgNjcsIDY3LCAKLSAgICA3MiwgNzIsIDczLCAxMjgsIDY3LCA2NywgNzIsIDcyLCA2OSwgNjksIDEyOCwgNjcsIDY3LCA3MiwgNzIsIDY5LCAxMjgsIAotICAgIDY3LCA2NywgNzIsIDcyLCA2NSwgNjUsIDEyOCwgNjcsIDY3LCA3MiwgNzIsIDY1LCAxMjgsIDY3LCA2NywgNzIsIDY5LCA2OSwgCi0gICAgMTI4LCA2NywgNjcsIDcyLCA2OSwgMTI4LCA2NywgNjcsIDcyLCA2NSwgNjUsIDEyOCwgNjcsIDY3LCA3MiwgNjUsIDEyOCwgCi0gICAgNjcsIDY3LCA3MiwgMTI4LCA2NywgNjcsIDY5LCA2OSwgMTI4LCA2NywgNjcsIDY5LCAxMjgsIDY3LCA2NywgNjUsIDY1LCAKLSAgICAxMjgsIDY3LCA2NywgNjUsIDEyOCwgNjcsIDY1LCA4OSwgNzgsIDEyOCwgNjcsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNjcsIDY1LCA4OCwgMTI4LCA2NywgNjUsIDg2LCA2OSwgMTI4LCA2NywgNjUsIDg1LCA4NCwgNzMsIDc5LCAyMDYsIAotICAgIDY3LCA2NSwgODUsIDc2LCA2OCwgODIsIDc5LCA3OCwgMTI4LCA2NywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgNjcsIDY1LCA4NSwgCi0gICAgMTI4LCA2NywgNjUsIDg0LCA2NSwgODcsIDY1LCAxMjgsIDY3LCA2NSwgODQsIDEyOCwgNjcsIDY1LCAyMTIsIDY3LCA2NSwgCi0gICAgODMsIDg0LCA3NiwgNjksIDEyOCwgNjcsIDY1LCA4MiwgODksIDgzLCA4NCwgNzMsIDY1LCAyMDYsIDY3LCA2NSwgODIsIDg0LCAKLSAgICAxMjgsIDY3LCA2NSwgODIsIDIxMSwgNjcsIDY1LCA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNjcsIDY1LCA4MiwgODAsIAotICAgIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY3LCA2NSwgODIsIDIwOCwgNjcsIDY1LCA4MiwgNzksIDg1LCA4MywgNjksIDIwNCwgCi0gICAgNjcsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDY3LCA2NSwgODIsIDc5LCAyMDYsIDY3LCA2NSwgODIsIDczLCAyMDMsIDY3LCAKLSAgICA2NSwgODIsIDczLCA2NSwgMjA2LCA2NywgNjUsIDgyLCA2OSwgODQsIDEyOCwgNjcsIDY1LCA4MiwgNjksIDIxMiwgNjcsIAotICAgIDY1LCA4MiwgMTk3LCA2NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgNjcsIDY1LCA4MiwgNjgsIDEyOCwgNjcsIDY1LCA4MiwgCi0gICAgMTk2LCA2NywgNjUsIDgyLCAxMjgsIDY3LCA2NSwgMjEwLCA2NywgNjUsIDgwLCA4NSwgMjEyLCA2NywgNjUsIDgwLCA4NCwgCi0gICAgNzMsIDg2LCA2OSwgMTI4LCA2NywgNjUsIDgwLCA4MiwgNzMsIDY3LCA3OSwgODIsIDc4LCAxMjgsIDY3LCA2NSwgODAsIDc5LCAKLSAgICAxMjgsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDc2LCAxMjgsIDY3LCA2NSwgNzgsIDg0LCA3MywgNzYsIDc2LCA2NSwgODQsIAotICAgIDczLCA3OSwgMjA2LCA2NywgNjUsIDc4LCAxOTksIDY3LCA2NSwgNzgsIDY4LCA4OSwgMTI4LCA2NywgNjUsIDc4LCA2OCwgCi0gICAgODIsIDY1LCA2NiwgNzMsIDc4LCA2OCwgODUsIDEyOCwgNjcsIDY1LCA3OCwgNjgsIDgyLCA2NSwgNjYsIDczLCA3OCwgNjgsIAotICAgIDIxMywgNjcsIDY1LCA3OCwgNjgsIDgyLCA2NSwgMTI4LCA2NywgNjUsIDc4LCA2OCwgODIsIDE5MywgNjcsIDY1LCA3OCwgCi0gICAgNjcsIDY5LCA4MiwgMTI4LCA2NywgNjUsIDc4LCA2NywgNjksIDc2LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDY1LCAKLSAgICA3OCwgNjcsIDY5LCA3NiwgMTI4LCA2NywgNjUsIDc4LCA2NywgNjksIDIwNCwgNjcsIDY1LCA3OCwgMTI4LCA2NywgNjUsIAotICAgIDc3LCA3OCwgODUsIDE5NSwgNjcsIDY1LCA3NywgNjksIDgyLCA2NSwgMTI4LCA2NywgNjUsIDc3LCA2OSwgNzYsIDEyOCwgCi0gICAgNjcsIDY1LCA3NiwgODksIDY1LCAxMjgsIDY3LCA2NSwgNzYsIDg5LCAxOTMsIDY3LCA2NSwgNzYsIDg4LCAxMjgsIDY3LCAKLSAgICA2NSwgNzYsIDc2LCAxMjgsIDY3LCA2NSwgNzYsIDY5LCA3OCwgNjgsIDY1LCA4MiwgMTI4LCA2NywgNjUsIDc2LCA2NywgCi0gICAgMTI4LCA2NywgNjUsIDc1LCA4MiwgNjUsIDEyOCwgNjcsIDY1LCA3NSwgMTk3LCA2NywgNjUsIDczLCAxMjgsIDY3LCA2NSwgCi0gICAgNzIsIDEyOCwgNjcsIDY1LCA2OSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgNjcsIDY1LCA2OCwgODUsIDY3LCA2OSwgODUsIDgzLCAKLSAgICAxMjgsIDY3LCA2NSwgNjgsIDE5MywgNjcsIDY1LCA2NywgODQsIDg1LCA4MywgMTI4LCA2NywgNjUsIDY2LCA3NiwgNjksIAotICAgIDg3LCA2NSwgODksIDEyOCwgNjcsIDY1LCA2NiwgNjYsIDY1LCA3MSwgNjksIDQ1LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA2NywgCi0gICAgNjUsIDY1LCA3OCwgNzEsIDEyOCwgNjcsIDY1LCA2NSwgNzMsIDEyOCwgNjcsIDE5MywgNjcsIDQ4LCA1MCwgNTIsIDEyOCwgCi0gICAgNjcsIDQ4LCA1MCwgNTEsIDEyOCwgNjcsIDQ4LCA1MCwgNTAsIDEyOCwgNjcsIDQ4LCA1MCwgNDksIDEyOCwgNjcsIDQ4LCAKLSAgICA1MCwgNDgsIDEyOCwgNjcsIDQ4LCA0OSwgNTcsIDEyOCwgNjcsIDQ4LCA0OSwgNTYsIDEyOCwgNjcsIDQ4LCA0OSwgNTUsIAotICAgIDEyOCwgNjcsIDQ4LCA0OSwgNTQsIDEyOCwgNjcsIDQ4LCA0OSwgNTMsIDEyOCwgNjcsIDQ4LCA0OSwgNTIsIDEyOCwgNjcsIAotICAgIDQ4LCA0OSwgNTEsIDEyOCwgNjcsIDQ4LCA0OSwgNTAsIDEyOCwgNjcsIDQ4LCA0OSwgNDksIDEyOCwgNjcsIDQ4LCA0OSwgCi0gICAgNDgsIDY1LCAxMjgsIDY3LCA0OCwgNDksIDQ4LCAxMjgsIDY3LCA0OCwgNDgsIDU3LCAxMjgsIDY3LCA0OCwgNDgsIDU2LCAKLSAgICAxMjgsIDY3LCA0OCwgNDgsIDU1LCAxMjgsIDY3LCA0OCwgNDgsIDU0LCAxMjgsIDY3LCA0OCwgNDgsIDUzLCAxMjgsIDY3LCAKLSAgICA0OCwgNDgsIDUyLCAxMjgsIDY3LCA0OCwgNDgsIDUxLCAxMjgsIDY3LCA0OCwgNDgsIDUwLCA2NywgMTI4LCA2NywgNDgsIAotICAgIDQ4LCA1MCwgNjYsIDEyOCwgNjcsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDY3LCA0OCwgNDgsIDUwLCAxMjgsIDY3LCA0OCwgCi0gICAgNDgsIDQ5LCAxMjgsIDY3LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCA2NywgNDUsIDUxLCAKLSAgICA1NywgMTI4LCA2NywgNDUsIDQ5LCA1NiwgMTI4LCA2NiwgOTAsIDg1LCA3OCwgMTk5LCA2NiwgOTAsIDcyLCAyMDEsIDY2LCAKLSAgICA4OSwgODQsIDE5NywgNjYsIDg5LCA2OSwgNzYsIDc5LCA4MiwgODUsIDgzLCA4MywgNzMsIDY1LCA3OCwgNDUsIDg1LCA3NSwgCi0gICAgODIsIDY1LCA3MywgNzgsIDczLCA2NSwgMjA2LCA2NiwgODgsIDcxLCAxMjgsIDY2LCA4NywgNzMsIDEyOCwgNjYsIDg3LCAKLSAgICA2OSwgNjksIDEyOCwgNjYsIDg3LCA2OSwgMTI4LCA2NiwgODcsIDY1LCAxMjgsIDY2LCA4NSwgODUsIDc3LCA3MywgODMsIAotICAgIDcyLCAxMjgsIDY2LCA4NSwgODQsIDg0LCA3OSwgNzgsIDEyOCwgNjYsIDg1LCAyMTIsIDY2LCA4NSwgODMsIDg0LCAyMTEsIAotICAgIDY2LCA4NSwgODMsIDIxMiwgNjYsIDg1LCA4MywgODMsIDg5LCA2OSwgODIsIDg1LCAxMjgsIDY2LCA4NSwgMjExLCA2NiwgCi0gICAgODUsIDgyLCAyMTMsIDY2LCA4NSwgODIsIDUwLCAxMjgsIDY2LCA4NSwgMjEwLCA2NiwgODUsIDc5LCA4OCwgMTI4LCA2NiwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA2NiwgODUsIDc4LCA3OCwgMjE3LCA2NiwgODUsIDc4LCA3MSwgMTI4LCA2NiwgODUsIDc3LCAKLSAgICA4MCwgMjE3LCA2NiwgODUsIDc2LCA4NSwgNzEsIDEyOCwgNjYsIDg1LCA3NiwgODUsIDE5OSwgNjYsIDg1LCA3NiwgNzYsIAotICAgIDgzLCA2OSwgODksIDY5LCAxMjgsIDY2LCA4NSwgNzYsIDc2LCAyMTEsIDY2LCA4NSwgNzYsIDc2LCA2OSwgODQsIDEyOCwgCi0gICAgNjYsIDg1LCA3NiwgNzYsIDY5LCAyMTIsIDY2LCA4NSwgNzYsIDc2LCAxMjgsIDY2LCA4NSwgNzYsIDY2LCAxMjgsIDY2LCAKLSAgICA4NSwgNzUsIDg5LCAxMjgsIDY2LCA4NSwgNzMsIDc2LCA2OCwgNzMsIDc4LCA3MSwgODMsIDEyOCwgNjYsIDg1LCA3MywgNzYsIAotICAgIDY4LCA3MywgNzgsIDcxLCAxMjgsIDY2LCA4NSwgNzIsIDczLCAxOTYsIDY2LCA4NSwgNzEsIDczLCA3OCwgNjksIDgzLCAKLSAgICAxOTcsIDY2LCA4NSwgNzEsIDEyOCwgNjYsIDg1LCA3MCwgNzAsIDY1LCA3NiwgNzksIDEyOCwgNjYsIDg1LCA2NywgNzUsIAotICAgIDc2LCA2OSwgMTI4LCA2NiwgODMsIDg0LCA2NSwgODIsIDEyOCwgNjYsIDgzLCA3NSwgODUsIDIxMCwgNjYsIDgzLCA3NSwgCi0gICAgNjUsIDE3MywgNjYsIDgzLCA2OCwgODUsIDIxMSwgNjYsIDgyLCA4NSwgODMsIDcyLCAxMjgsIDY2LCA4MiwgODUsIDgzLCAKLSAgICAyMDAsIDY2LCA4MiwgNzksIDc4LCA5MCwgNjksIDEyOCwgNjYsIDgyLCA3OSwgNzUsIDY5LCAyMDYsIDY2LCA4MiwgNzksIAotICAgIDY1LCAxOTYsIDY2LCA4MiwgNzMsIDgzLCA4NCwgNzYsIDY5LCAxMjgsIDY2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDc4LCA2OSwgCi0gICAgODMsIDIxMSwgNjYsIDgyLCA3MywgNjksIDcwLCA2NywgNjUsIDgzLCA2OSwgMTI4LCA2NiwgODIsIDczLCA2OCwgNzEsIAotICAgIDE5NywgNjYsIDgyLCA3MywgNjgsIDE5NywgNjYsIDgyLCA3MywgNjcsIDc1LCAxMjgsIDY2LCA4MiwgNjksIDg2LCA3MywgCi0gICAgODMsIDEyOCwgNjYsIDgyLCA2OSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NiwgODIsIDY5LCAKLSAgICA4NiwgMTk3LCA2NiwgODIsIDY5LCA2NSwgODQsIDIwMCwgNjYsIDgyLCA2OSwgNjUsIDc1LCA4NCwgNzIsIDgyLCA3OSwgODUsIAotICAgIDcxLCA3MiwgMTI4LCA2NiwgODIsIDY5LCA2NSwgNjgsIDEyOCwgNjYsIDgyLCA2OCwgMTkzLCA2NiwgODIsIDY1LCA3OCwgCi0gICAgNjcsIDcyLCA3MywgNzgsIDE5OSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgMTI4LCA2NiwgODIsIDY1LCA3OCwgNjcsIAotICAgIDIwMCwgNjYsIDgyLCA2NSwgNzUsIDY3LCA2OSwgODQsIDEyOCwgNjYsIDgyLCA2NSwgNjcsIDc1LCA2OSwgODQsIDY5LCAKLSAgICAxOTYsIDY2LCA4MiwgNjUsIDY3LCA3NSwgNjksIDIxMiwgNjYsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDY2LCA4MSwgMTI4LCAKLSAgICA2NiwgODAsIDcyLCAxMjgsIDY2LCA3OSwgODksIDEyOCwgNjYsIDc5LCA4NywgODQsIDczLCA2OSwgMTI4LCA2NiwgNzksIAotICAgIDg3LCA4NCwgNzMsIDE5NywgNjYsIDc5LCA4NywgNzYsIDczLCA3OCwgNzEsIDEyOCwgNjYsIDc5LCA4NywgNzYsIDEyOCwgCi0gICAgNjYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDY2LCA3OSwgMjE1LCA2NiwgNzksIDg1LCA4MSwgODUsIDY5LCA4NCwgMTI4LCAKLSAgICA2NiwgNzksIDg1LCA3OCwgNjgsIDY1LCA4MiwgMjE3LCA2NiwgNzksIDg0LCA4NCwgNzksIDc3LCA0NSwgNzYsIDczLCA3MSwgCi0gICAgNzIsIDg0LCA2OSwgMTk2LCA2NiwgNzksIDg0LCA4NCwgNzksIDc3LCAxMjgsIDY2LCA3OSwgODQsIDg0LCA3OSwgMjA1LCAKLSAgICA2NiwgNzksIDg0LCA4NCwgNzYsIDY5LCAxMjgsIDY2LCA3OSwgODQsIDg0LCA3NiwgMTk3LCA2NiwgNzksIDg0LCAyMDAsIAotICAgIDY2LCA3OSwgODIsIDg1LCA4NCwgNzksIDEyOCwgNjYsIDc5LCA4MiwgNjUsIDg4LCA0NSwgNTEsIDEyOCwgNjYsIDc5LCA4MiwgCi0gICAgNjUsIDg4LCA0NSwgNTAsIDEyOCwgNjYsIDc5LCA4MiwgNjUsIDg4LCAxMjgsIDY2LCA3OSwgODAsIDc5LCA3NywgNzksIDcwLCAKLSAgICAyMDcsIDY2LCA3OSwgNzksIDg0LCA4MywgMTI4LCA2NiwgNzksIDc5LCA4NCwgMTI4LCA2NiwgNzksIDc5LCA3NywgNjksIAotICAgIDgyLCA2NSwgNzgsIDcxLCAxMjgsIDY2LCA3OSwgNzksIDc1LCA4MywgMTI4LCA2NiwgNzksIDc5LCA3NSwgNzcsIDY1LCA4MiwgCi0gICAgNzUsIDEyOCwgNjYsIDc5LCA3OSwgNzUsIDc3LCA2NSwgODIsIDIwMywgNjYsIDc5LCA3OCwgNjksIDEyOCwgNjYsIDc5LCAKLSAgICA3NywgNjYsIDEyOCwgNjYsIDc5LCA3NywgMTI4LCA2NiwgNzksIDc2LCA4NCwgMTI4LCA2NiwgNzksIDc2LCAyMTIsIDY2LCAKLSAgICA3OSwgNzIsIDY1LCA3MywgODIsIDczLCAxOTUsIDY2LCA3OSwgNjgsIDg5LCAxMjgsIDY2LCA3OSwgNjUsIDgyLCAxMjgsIAotICAgIDY2LCA3OSwgNjUsIDEyOCwgNjYsIDc2LCA4NSwgNjksIDEyOCwgNjYsIDc2LCA4NSwgMTk3LCA2NiwgNzYsIDc5LCA4NywgCi0gICAgNzAsIDczLCA4MywgNzIsIDEyOCwgNjYsIDc2LCA3OSwgODMsIDgzLCA3OSwgNzcsIDEyOCwgNjYsIDc2LCA3OSwgNzksIDY4LCAKLSAgICAxMjgsIDY2LCA3NiwgNzksIDc4LCAxOTYsIDY2LCA3NiwgNzksIDY3LCA3NSwgMTI4LCA2NiwgNzYsIDY5LCA3OCwgNjgsIAotICAgIDY5LCAxOTYsIDY2LCA3NiwgNjUsIDc4LCA3NSwgMTI4LCA2NiwgNzYsIDY1LCA3OCwgMjAzLCA2NiwgNzYsIDY1LCA2OCwgCi0gICAgMTk3LCA2NiwgNzYsIDY1LCA2NywgNzUsIDcwLCA3OSwgNzksIDIxMiwgNjYsIDc2LCA2NSwgNjcsIDc1LCA0NSwgNzYsIDY5LCAKLSAgICA4NCwgODQsIDY5LCAyMTAsIDY2LCA3NiwgNjUsIDY3LCA3NSwgNDUsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCA2OSwgCi0gICAgMTk2LCA2NiwgNzYsIDY1LCA2NywgNzUsIDEyOCwgNjYsIDc1LCA2NSwgMTczLCA2NiwgNzMsIDg0LCA4NCwgNjksIDgyLCAKLSAgICAxMjgsIDY2LCA3MywgODQsIDczLCA3OCwgMTk5LCA2NiwgNzMsIDgzLCA3NywgODUsIDg0LCAyMDAsIDY2LCA3MywgODMsIAotICAgIDc3LCA3MywgNzYsIDc2LCA2NSwgMjAwLCA2NiwgNzMsIDgzLCA3MiwgNzksIDgwLCAxMjgsIDY2LCA3MywgODMsIDY5LCA2NywgCi0gICAgODQsIDczLCA3OCwgMTk5LCA2NiwgNzMsIDgzLCA2NSwgNzIsIDEyOCwgNjYsIDczLCA4MiwgODUsIDEyOCwgNjYsIDczLCAKLSAgICA4MiwgODQsIDcyLCA2OCwgNjUsIDIxNywgNjYsIDczLCA4MiwgNzEsIDY1LCAxMjgsIDY2LCA3MywgODIsIDY4LCAxMjgsIAotICAgIDY2LCA3MywgNzksIDcyLCA2NSwgOTAsIDY1LCA4MiwgMTk2LCA2NiwgNzMsIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgCi0gICAgNjYsIDczLCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2NiwgNzMsIDc4LCA2OCwgNzMsIDEyOCwgNjYsIDczLCA3OCwgNjUsIDgyLCAKLSAgICAyMTcsIDY2LCA3MywgNzYsIDc2LCA3MywgNjUsIDgyLCA2OCwgODMsIDEyOCwgNjYsIDczLCA3NiwgNjUsIDY2LCA3MywgNjUsIAorICAgIDcyLCA2OSwgNzMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDY3LCA3MiwgNjksIDY5LCA4MywgMTk3LCA2NywgNzIsIDY5LCA2OSwgCisgICAgODIsIDczLCA3OCwgMTk5LCA2NywgNzIsIDY5LCA2OSwgNzcsIDEyOCwgNjcsIDcyLCA2OSwgNjksIDc1LCAyMTEsIDY3LCAKKyAgICA3MiwgNjksIDY5LCA3NSwgMTI4LCA2NywgNzIsIDY5LCA2OSwgMTI4LCA2NywgNzIsIDY5LCA2NywgNzUsIDY5LCAyMTAsIAorICAgIDY3LCA3MiwgNjksIDY3LCA3NSwgMTI4LCA2NywgNzIsIDY5LCA2NywgMjAzLCA2NywgNzIsIDE5NywgNjcsIDcyLCA2NSwgCisgICAgODgsIDEyOCwgNjcsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA2NywgNzIsIDY1LCA4NCwgODQsIDY1LCAKKyAgICA4NywgNjUsIDEyOCwgNjcsIDcyLCA2NSwgODQsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDg0LCAxMjgsIDY3LCA3MiwgNjUsIAorICAgIDgyLCAyMTIsIDY3LCA3MiwgNjUsIDgyLCA3MywgNzksIDg0LCAxMjgsIDY3LCA3MiwgNjUsIDgyLCA3MywgNzksIDIxMiwgCisgICAgNjcsIDcyLCA2NSwgODIsIDY1LCA2NywgODQsIDY5LCA4MiwgODMsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDY1LCA2NywgODQsIAorICAgIDY5LCA4MiwgMTI4LCA2NywgNzIsIDY1LCA4MiwgMTI4LCA2NywgNzIsIDY1LCA4MCwgODQsIDY5LCA4MiwgMTI4LCA2NywgCisgICAgNzIsIDY1LCA4MCwgMTI4LCA2NywgNzIsIDY1LCA3OCwgNzEsIDEyOCwgNjcsIDcyLCA2NSwgNzgsIDEyOCwgNjcsIDcyLCAKKyAgICA2NSwgNzcsIDc1LCA3OSwgMTI4LCA2NywgNzIsIDY1LCA3NywgNzMsIDc2LCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA2NSwgNzcsIAorICAgIDczLCA3NiwgNzMsIDEyOCwgNjcsIDcyLCA2NSwgMjA1LCA2NywgNzIsIDY1LCA3NSwgNzcsIDE5MywgNjcsIDcyLCA2NSwgCisgICAgNzMsIDgyLCAxMjgsIDY3LCA3MiwgNjUsIDczLCA3OCwgODMsIDEyOCwgNjcsIDcyLCA2NSwgNjgsIDY1LCAxMjgsIDY3LCAKKyAgICA3MiwgNjUsIDE5NiwgNjcsIDcyLCA2NSwgNjUsIDEyOCwgNjcsIDcxLCA3NCwgMTI4LCA2NywgNjksIDg4LCAxMjgsIDY3LCAKKyAgICA2OSwgODIsIDY5LCA4MywgMTI4LCA2NywgNjksIDgyLCA2OSwgNzcsIDc5LCA3OCwgODksIDEyOCwgNjcsIDY5LCA4MiwgNjksIAorICAgIDc1LCAxMjgsIDY3LCA2OSwgODIsIDQ1LCA4NywgNjUsIDEyOCwgNjcsIDY5LCA4MCwgMTI4LCA2NywgNjksIDc5LCA3OCwgCisgICAgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgNjcsIAorICAgIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIDczLCA2OSwgODUsIDc3LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIAorICAgIDg1LCA2NywgMTI4LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIDgzLCA3MywgNzksIDgzLCAKKyAgICAxMjgsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIAorICAgIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIAorICAgIDEyOCwgNjcsIDY5LCA3OCwgODQsIDg1LCA4MiwgNzMsIDY1LCAyMDQsIDY3LCA2OSwgNzgsIDg0LCA4MiwgNjksIDc2LCA3MywgCisgICAgNzgsIDE5NywgNjcsIDY5LCA3OCwgODQsIDgyLCA2OSwgNjgsIDEyOCwgNjcsIDY5LCA3OCwgODQsIDgyLCA2OSwgMTk2LCAKKyAgICA2NywgNjksIDc4LCA4NCwgODIsIDY5LCAxMjgsIDY3LCA2OSwgNzgsIDg0LCA4MiwgMTk3LCA2NywgNjksIDc4LCA4NCwgODIsIAorICAgIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNjksIDc4LCAxMjgsIDY3LCA2OSwgNzYsIDg0LCA3MywgCisgICAgMTk1LCA2NywgNjksIDc2LCA4MywgNzMsIDg1LCA4MywgMTI4LCA2NywgNjksIDc2LCA2OSwgNjYsIDgyLCA2NSwgODQsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNjcsIDY5LCA3MywgODIsIDg0LCAxMjgsIDY3LCA2OSwgNzMsIDc2LCA3MywgNzgsIDcxLCAxMjgsIAorICAgIDY3LCA2OSwgNzMsIDc2LCA3MywgNzgsIDE5OSwgNjcsIDY5LCA2OSwgODYsIDEyOCwgNjcsIDY5LCA2OSwgNjYsIDEyOCwgCisgICAgNjcsIDY5LCA2OSwgMTI4LCA2NywgNjksIDY4LCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NywgNjksIDY4LCA3MywgNzYsIDc2LCAKKyAgICAxOTMsIDY3LCA2OSwgNjgsIDIwMSwgNjcsIDY5LCA2NywgNjksIDc1LCAxMjgsIDY3LCA2OSwgNjcsIDY1LCA3NSwgMTI4LCAKKyAgICA2NywgNjksIDY3LCA2NSwgMjAzLCA2NywgNjksIDY1LCA3NiwgNjcsIDEyOCwgNjcsIDY3LCA4NSwgMTI4LCA2NywgNjcsIAorICAgIDc5LCAxMjgsIDY3LCA2NywgNzMsIDEyOCwgNjcsIDY3LCA3MiwgODUsIDEyOCwgNjcsIDY3LCA3MiwgNzksIDEyOCwgNjcsIAorICAgIDY3LCA3MiwgNzMsIDEyOCwgNjcsIDY3LCA3MiwgNzIsIDg1LCAxMjgsIDY3LCA2NywgNzIsIDcyLCA3OSwgMTI4LCA2NywgCisgICAgNjcsIDcyLCA3MiwgNzMsIDEyOCwgNjcsIDY3LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA2NywgNjcsIDcyLCA3MiwgNjksIAorICAgIDEyOCwgNjcsIDY3LCA3MiwgNzIsIDY1LCA2NSwgMTI4LCA2NywgNjcsIDcyLCA3MiwgNjUsIDEyOCwgNjcsIDY3LCA3MiwgCisgICAgNjksIDY5LCAxMjgsIDY3LCA2NywgNzIsIDY5LCAxMjgsIDY3LCA2NywgNzIsIDY1LCA2NSwgMTI4LCA2NywgNjcsIDcyLCAKKyAgICA2NSwgMTI4LCA2NywgNjcsIDcyLCAxMjgsIDY3LCA2NywgNjksIDY5LCAxMjgsIDY3LCA2NywgNjksIDEyOCwgNjcsIDY3LCAKKyAgICA2NSwgNjUsIDEyOCwgNjcsIDY3LCA2NSwgMTI4LCA2NywgNjUsIDg5LCA3OCwgMTI4LCA2NywgNjUsIDg5LCA2NSwgNzgsIAorICAgIDc4LCA2NSwgMTI4LCA2NywgNjUsIDg4LCAxMjgsIDY3LCA2NSwgODYsIDY5LCAxMjgsIDY3LCA2NSwgODUsIDg0LCA3MywgCisgICAgNzksIDIwNiwgNjcsIDY1LCA4NSwgNzYsIDY4LCA4MiwgNzksIDc4LCAxMjgsIDY3LCA2NSwgODUsIDY4LCA2NSwgMTI4LCAKKyAgICA2NywgNjUsIDg1LCA2NywgNjUsIDgzLCA3MywgNjUsIDIwNiwgNjcsIDY1LCA4NSwgMTI4LCA2NywgNjUsIDg0LCA2NSwgODcsIAorICAgIDY1LCAxMjgsIDY3LCA2NSwgODQsIDEyOCwgNjcsIDY1LCAyMTIsIDY3LCA2NSwgODMsIDg0LCA3NiwgNjksIDEyOCwgNjcsIAorICAgIDY1LCA4MywgNzUsIDY5LCAyMTIsIDY3LCA2NSwgODIsIDg5LCA4MywgODQsIDczLCA2NSwgMjA2LCA2NywgNjUsIDgyLCA4NCwgCisgICAgODIsIDczLCA2OCwgNzEsIDY5LCAxMjgsIDY3LCA2NSwgODIsIDg0LCAxMjgsIDY3LCA2NSwgODIsIDIxMSwgNjcsIDY1LCAKKyAgICA4MiwgODIsIDczLCA2NSwgNzEsIDE5NywgNjcsIDY1LCA4MiwgODAsIDY5LCA3OCwgODQsIDgyLCAyMTcsIDY3LCA2NSwgODIsIAorICAgIDIwOCwgNjcsIDY1LCA4MiwgNzksIDg1LCA4MywgNjksIDIwNCwgNjcsIDY1LCA4MiwgNzksIDc4LCAxMjgsIDY3LCA2NSwgCisgICAgODIsIDc5LCAyMDYsIDY3LCA2NSwgODIsIDczLCAyMDMsIDY3LCA2NSwgODIsIDczLCA2NSwgMjA2LCA2NywgNjUsIDgyLCAKKyAgICA2OSwgODQsIDEyOCwgNjcsIDY1LCA4MiwgNjksIDIxMiwgNjcsIDY1LCA4MiwgMTk3LCA2NywgNjUsIDgyLCA2OCwgODMsIAorICAgIDEyOCwgNjcsIDY1LCA4MiwgNjgsIDEyOCwgNjcsIDY1LCA4MiwgMTk2LCA2NywgNjUsIDgyLCAxMjgsIDY3LCA2NSwgMjEwLCAKKyAgICA2NywgNjUsIDgwLCA4NSwgMjEyLCA2NywgNjUsIDgwLCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA2NywgNjUsIDgwLCA4MiwgNzMsIAorICAgIDY3LCA3OSwgODIsIDc4LCAxMjgsIDY3LCA2NSwgODAsIDgwLCA2OSwgMTk2LCA2NywgNjUsIDgwLCA3OSwgMTI4LCA2NywgCisgICAgNjUsIDgwLCA3MywgODQsIDg1LCA3NiwgODUsIDc3LCAxMjgsIDY3LCA2NSwgODAsIDczLCA4NCwgNjUsIDc2LCAxMjgsIDY3LCAKKyAgICA2NSwgNzgsIDg0LCA3MywgNzYsIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNjUsIDc4LCAxOTksIDY3LCA2NSwgNzgsIAorICAgIDY4LCA4OSwgMTI4LCA2NywgNjUsIDc4LCA2OCwgODIsIDY1LCA2NiwgNzMsIDc4LCA2OCwgODUsIDEyOCwgNjcsIDY1LCA3OCwgCisgICAgNjgsIDgyLCA2NSwgNjYsIDczLCA3OCwgNjgsIDIxMywgNjcsIDY1LCA3OCwgNjgsIDgyLCA2NSwgMTI4LCA2NywgNjUsIDc4LCAKKyAgICA2OCwgODIsIDE5MywgNjcsIDY1LCA3OCwgNjgsIDc2LCA2OSwgMTI4LCA2NywgNjUsIDc4LCA2NywgNjksIDgyLCAxMjgsIAorICAgIDY3LCA2NSwgNzgsIDY3LCA2OSwgNzYsIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNjUsIDc4LCA2NywgNjksIDc2LCAKKyAgICAxMjgsIDY3LCA2NSwgNzgsIDY3LCA2OSwgMjA0LCA2NywgNjUsIDc4LCAxMjgsIDY3LCA2NSwgNzcsIDgwLCA3MywgNzgsIAorICAgIDcxLCAxMjgsIDY3LCA2NSwgNzcsIDc4LCA4NSwgMTk1LCA2NywgNjUsIDc3LCA2OSwgODIsIDY1LCAxMjgsIDY3LCA2NSwgCisgICAgNzcsIDY5LCA4MiwgMTkzLCA2NywgNjUsIDc3LCA2OSwgNzYsIDEyOCwgNjcsIDY1LCA3NiwgODksIDY1LCAxMjgsIDY3LCAKKyAgICA2NSwgNzYsIDg5LCAxOTMsIDY3LCA2NSwgNzYsIDg4LCAxMjgsIDY3LCA2NSwgNzYsIDc2LCAxMjgsIDY3LCA2NSwgNzYsIAorICAgIDY5LCA3OCwgNjgsIDY1LCA4MiwgMTI4LCA2NywgNjUsIDc2LCA2OSwgNzgsIDY4LCA2NSwgMjEwLCA2NywgNjUsIDc2LCA2NywgCisgICAgODUsIDc2LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA2NywgNjUsIDc2LCA2NywgMTI4LCA2NywgNjUsIDc1LCA4MiwgNjUsIAorICAgIDEyOCwgNjcsIDY1LCA3NSwgMTk3LCA2NywgNjUsIDczLCAxMjgsIDY3LCA2NSwgNzIsIDEyOCwgNjcsIDY1LCA2OSwgODMsIAorICAgIDg1LCA4MiwgNjUsIDEyOCwgNjcsIDY1LCA2OCwgODUsIDY3LCA2OSwgODUsIDgzLCAxMjgsIDY3LCA2NSwgNjgsIDE5MywgCisgICAgNjcsIDY1LCA2NywgODQsIDg1LCA4MywgMTI4LCA2NywgNjUsIDY2LCA3NiwgNjksIDg3LCA2NSwgODksIDEyOCwgNjcsIDY1LCAKKyAgICA2NiwgNzMsIDc4LCA2OSwgODQsIDEyOCwgNjcsIDY1LCA2NiwgNjYsIDY1LCA3MSwgNjksIDQ1LCA4NCwgODIsIDY5LCA2OSwgCisgICAgMTI4LCA2NywgNjUsIDY1LCA3OCwgNzEsIDEyOCwgNjcsIDY1LCA2NSwgNzMsIDEyOCwgNjcsIDE5MywgNjcsIDQ4LCA1MCwgCisgICAgNTIsIDEyOCwgNjcsIDQ4LCA1MCwgNTEsIDEyOCwgNjcsIDQ4LCA1MCwgNTAsIDEyOCwgNjcsIDQ4LCA1MCwgNDksIDEyOCwgCisgICAgNjcsIDQ4LCA1MCwgNDgsIDEyOCwgNjcsIDQ4LCA0OSwgNTcsIDEyOCwgNjcsIDQ4LCA0OSwgNTYsIDEyOCwgNjcsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNjcsIDQ4LCA0OSwgNTQsIDEyOCwgNjcsIDQ4LCA0OSwgNTMsIDEyOCwgNjcsIDQ4LCA0OSwgNTIsIAorICAgIDEyOCwgNjcsIDQ4LCA0OSwgNTEsIDEyOCwgNjcsIDQ4LCA0OSwgNTAsIDEyOCwgNjcsIDQ4LCA0OSwgNDksIDEyOCwgNjcsIAorICAgIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDY3LCA0OCwgNDksIDQ4LCAxMjgsIDY3LCA0OCwgNDgsIDU3LCAxMjgsIDY3LCA0OCwgCisgICAgNDgsIDU2LCAxMjgsIDY3LCA0OCwgNDgsIDU1LCAxMjgsIDY3LCA0OCwgNDgsIDU0LCAxMjgsIDY3LCA0OCwgNDgsIDUzLCAKKyAgICAxMjgsIDY3LCA0OCwgNDgsIDUyLCAxMjgsIDY3LCA0OCwgNDgsIDUxLCAxMjgsIDY3LCA0OCwgNDgsIDUwLCA2NywgMTI4LCAKKyAgICA2NywgNDgsIDQ4LCA1MCwgNjYsIDEyOCwgNjcsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDY3LCA0OCwgNDgsIDUwLCAxMjgsIAorICAgIDY3LCA0OCwgNDgsIDQ5LCAxMjgsIDY3LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCA2NywgCisgICAgNDUsIDUxLCA1NywgMTI4LCA2NywgNDUsIDQ5LCA1NiwgMTI4LCA2NiwgOTAsIDg1LCA3OCwgMTk5LCA2NiwgOTAsIDcyLCAKKyAgICAyMDEsIDY2LCA4OSwgODQsIDE5NywgNjYsIDg5LCA2OSwgNzYsIDc5LCA4MiwgODUsIDgzLCA4MywgNzMsIDY1LCA3OCwgNDUsIAorICAgIDg1LCA3NSwgODIsIDY1LCA3MywgNzgsIDczLCA2NSwgMjA2LCA2NiwgODgsIDcxLCAxMjgsIDY2LCA4NywgNzMsIDEyOCwgCisgICAgNjYsIDg3LCA2OSwgNjksIDEyOCwgNjYsIDg3LCA2OSwgMTI4LCA2NiwgODcsIDY1LCAxMjgsIDY2LCA4NSwgODUsIDc3LCAKKyAgICA3MywgODMsIDcyLCAxMjgsIDY2LCA4NSwgODQsIDg0LCA3OSwgNzgsIDEyOCwgNjYsIDg1LCA4NCwgODQsIDc5LCAyMDYsIAorICAgIDY2LCA4NSwgMjEyLCA2NiwgODUsIDgzLCA4NCwgMjExLCA2NiwgODUsIDgzLCAyMTIsIDY2LCA4NSwgODMsIDgzLCA4OSwgCisgICAgNjksIDgyLCA4NSwgMTI4LCA2NiwgODUsIDgzLCA3MywgNzgsIDY5LCA4MywgMjExLCA2NiwgODUsIDIxMSwgNjYsIDg1LCAKKyAgICA4MiwgMjEzLCA2NiwgODUsIDgyLCA4MiwgNzMsIDg0LCA3OSwgMTI4LCA2NiwgODUsIDgyLCA1MCwgMTI4LCA2NiwgODUsIAorICAgIDIxMCwgNjYsIDg1LCA3OSwgODgsIDEyOCwgNjYsIDg1LCA3OSwgODAsIDEyOCwgNjYsIDg1LCA3OCwgNzgsIDIxNywgNjYsIAorICAgIDg1LCA3OCwgNzEsIDEyOCwgNjYsIDg1LCA3NywgODAsIDIxNywgNjYsIDg1LCA3NiwgODUsIDcxLCAxMjgsIDY2LCA4NSwgCisgICAgNzYsIDg1LCAxOTksIDY2LCA4NSwgNzYsIDc2LCA4MywgNjksIDg5LCA2OSwgMTI4LCA2NiwgODUsIDc2LCA3NiwgMjExLCAKKyAgICA2NiwgODUsIDc2LCA3NiwgNzIsIDc5LCA4MiwgNzgsIDEyOCwgNjYsIDg1LCA3NiwgNzYsIDcyLCA3OSwgODIsIDIwNiwgNjYsIAorICAgIDg1LCA3NiwgNzYsIDY5LCA4NCwgMTI4LCA2NiwgODUsIDc2LCA3NiwgNjksIDIxMiwgNjYsIDg1LCA3NiwgNzYsIDEyOCwgCisgICAgNjYsIDg1LCA3NiwgNjYsIDEyOCwgNjYsIDg1LCA3NSwgODksIDEyOCwgNjYsIDg1LCA3MywgNzYsIDY4LCA3MywgNzgsIDcxLCAKKyAgICA4MywgMTI4LCA2NiwgODUsIDczLCA3NiwgNjgsIDczLCA3OCwgNzEsIDEyOCwgNjYsIDg1LCA3MywgNzYsIDY4LCA3MywgNzgsIAorICAgIDE5OSwgNjYsIDg1LCA3MiwgNzMsIDE5NiwgNjYsIDg1LCA3MSwgNzMsIDc4LCA2OSwgODMsIDE5NywgNjYsIDg1LCA3MSwgCisgICAgMTI4LCA2NiwgODUsIDcwLCA3MCwgNjUsIDc2LCA3OSwgMTI4LCA2NiwgODUsIDY4LCAxMjgsIDY2LCA4NSwgNjcsIDc1LCAKKyAgICA3NiwgNjksIDEyOCwgNjYsIDg1LCA2NiwgNjYsIDc2LCA2OSwgODMsIDEyOCwgNjYsIDg1LCA2NiwgNjYsIDc2LCA2OSwgCisgICAgMTI4LCA2NiwgODMsIDg0LCA2NSwgODIsIDEyOCwgNjYsIDgzLCA3NSwgODUsIDIxMCwgNjYsIDgzLCA3NSwgNjUsIDE3MywgCisgICAgNjYsIDgzLCA2OCwgODUsIDIxMSwgNjYsIDgyLCA4NSwgODMsIDIwMCwgNjYsIDgyLCA3OSwgNzgsIDkwLCA2OSwgMTI4LCAKKyAgICA2NiwgODIsIDc5LCA3NSwgNjksIDIwNiwgNjYsIDgyLCA3OSwgNjUsIDE5NiwgNjYsIDgyLCA3MywgODMsIDg0LCA3NiwgNjksIAorICAgIDEyOCwgNjYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzgsIDY5LCA4MywgMjExLCA2NiwgODIsIDczLCA2OSwgNzAsIDY3LCA2NSwgCisgICAgODMsIDY5LCAxMjgsIDY2LCA4MiwgNzMsIDY4LCA3MSwgMTk3LCA2NiwgODIsIDczLCA2OCwgMTk3LCA2NiwgODIsIDczLCAKKyAgICA2NywgNzUsIDEyOCwgNjYsIDgyLCA2OSwgODYsIDczLCA4MywgMTI4LCA2NiwgODIsIDY5LCA4NiwgNjksIDQ1LCA3NywgNjUsIAorICAgIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY2LCA4MiwgNjksIDg2LCAxOTcsIDY2LCA4MiwgNjksIDY1LCA4NCwgMjAwLCA2NiwgCisgICAgODIsIDY5LCA2NSwgNzUsIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDY2LCA4MiwgNjksIDY1LCA2OCwgMTI4LCAKKyAgICA2NiwgODIsIDY4LCAxOTMsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDczLCA3OCwgMTk5LCA2NiwgODIsIDY1LCA3OCwgNjcsIAorICAgIDcyLCA2OSwgODMsIDEyOCwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgMTI4LCA2NiwgODIsIDY1LCA3OCwgNjcsIDIwMCwgCisgICAgNjYsIDgyLCA2NSwgNzUsIDY3LCA2OSwgODQsIDEyOCwgNjYsIDgyLCA2NSwgNjcsIDc1LCA2OSwgODQsIDY5LCAxOTYsIDY2LCAKKyAgICA4MiwgNjUsIDY3LCA3NSwgNjksIDIxMiwgNjYsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDY2LCA4MSwgMTI4LCA2NiwgODAsIAorICAgIDcyLCAxMjgsIDY2LCA3OSwgODksIDIxMSwgNjYsIDc5LCA4OSwgMTI4LCA2NiwgNzksIDg3LCA4NCwgNzMsIDY5LCAxMjgsIAorICAgIDY2LCA3OSwgODcsIDg0LCA3MywgMTk3LCA2NiwgNzksIDg3LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA2NiwgNzksIDg3LCA3NiwgCisgICAgMTI4LCA2NiwgNzksIDg3LCAyMDQsIDY2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA2NiwgNzksIDIxNSwgNjYsIDc5LCA4NSwgCisgICAgODEsIDg1LCA2OSwgODQsIDEyOCwgNjYsIDc5LCA4NSwgODEsIDg1LCA2OSwgMjEyLCA2NiwgNzksIDg1LCA3OCwgNjgsIDY1LCAKKyAgICA4MiwgMjE3LCA2NiwgNzksIDg0LCA4NCwgNzksIDc3LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDY2LCA3OSwgODQsIAorICAgIDg0LCA3OSwgNzcsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDY5LCAxOTYsIDY2LCA3OSwgODQsIDg0LCA3OSwgNzcsIDEyOCwgCisgICAgNjYsIDc5LCA4NCwgODQsIDc5LCAyMDUsIDY2LCA3OSwgODQsIDg0LCA3NiwgNjksIDEyOCwgNjYsIDc5LCA4NCwgODQsIDc2LCAKKyAgICAxOTcsIDY2LCA3OSwgODQsIDIwMCwgNjYsIDc5LCA4MiwgODUsIDg0LCA3OSwgMTI4LCA2NiwgNzksIDgyLCA2NSwgODgsIAorICAgIDQ1LCA1MSwgMTI4LCA2NiwgNzksIDgyLCA2NSwgODgsIDQ1LCA1MCwgMTI4LCA2NiwgNzksIDgyLCA2NSwgODgsIDEyOCwgCisgICAgNjYsIDc5LCA4MCwgNzksIDc3LCA3OSwgNzAsIDIwNywgNjYsIDc5LCA3OSwgODQsIDgzLCAxMjgsIDY2LCA3OSwgNzksIDg0LCAKKyAgICAxMjgsIDY2LCA3OSwgNzksIDc3LCA2OSwgODIsIDY1LCA3OCwgNzEsIDEyOCwgNjYsIDc5LCA3OSwgNzUsIDgzLCAxMjgsIAorICAgIDY2LCA3OSwgNzksIDc1LCA3NywgNjUsIDgyLCA3NSwgMTI4LCA2NiwgNzksIDc5LCA3NSwgNzcsIDY1LCA4MiwgMjAzLCA2NiwgCisgICAgNzksIDc4LCA2OSwgMTI4LCA2NiwgNzksIDc3LCA2NiwgMTI4LCA2NiwgNzksIDc3LCAxMjgsIDY2LCA3OSwgNzYsIDg0LCAKKyAgICAxMjgsIDY2LCA3OSwgNzYsIDIxMiwgNjYsIDc5LCA3MiwgNjUsIDczLCA4MiwgNzMsIDE5NSwgNjYsIDc5LCA2OCwgODksIAorICAgIDEyOCwgNjYsIDc5LCA2OCwgMjE3LCA2NiwgNzksIDY1LCA4MiwgMTI4LCA2NiwgNzksIDY1LCAxMjgsIDY2LCA3NiwgODUsIAorICAgIDY5LCAxMjgsIDY2LCA3NiwgODUsIDE5NywgNjYsIDc2LCA3OSwgODcsIDczLCA3OCwgMTk5LCA2NiwgNzYsIDc5LCA4NywgCisgICAgNzAsIDczLCA4MywgNzIsIDEyOCwgNjYsIDc2LCA3OSwgMjE1LCA2NiwgNzYsIDc5LCA4MywgODMsIDc5LCA3NywgMTI4LCAKKyAgICA2NiwgNzYsIDc5LCA3OSwgNjgsIDEyOCwgNjYsIDc2LCA3OSwgNzgsIDE5NiwgNjYsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIAorICAgIDY2LCA3NiwgNzMsIDc4LCAyMDMsIDY2LCA3NiwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjYsIDc2LCA2NSwgNzgsIDc1LCAKKyAgICAxMjgsIDY2LCA3NiwgNjUsIDc4LCAyMDMsIDY2LCA3NiwgNjUsIDY4LCAxOTcsIDY2LCA3NiwgNjUsIDY3LCA3NSwgNzYsIAorICAgIDY5LCA4NCwgODQsIDY5LCAyMTAsIDY2LCA3NiwgNjUsIDY3LCA3NSwgNzAsIDc5LCA3OSwgMjEyLCA2NiwgNzYsIDY1LCA2NywgCisgICAgNzUsIDQ1LCA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgNjYsIDc2LCA2NSwgNjcsIDc1LCA0NSwgNzAsIDY5LCA2NSwgODQsIAorICAgIDcyLCA2OSwgODIsIDY5LCAxOTYsIDY2LCA3NiwgNjUsIDY3LCA3NSwgMTI4LCA2NiwgNzUsIDY1LCAxNzMsIDY2LCA3MywgCisgICAgODQsIDg0LCA2OSwgODIsIDEyOCwgNjYsIDczLCA4NCwgNzMsIDc4LCAxOTksIDY2LCA3MywgODQsIDE5NywgNjYsIDczLCAKKyAgICA4MywgNzcsIDg1LCA4NCwgMjAwLCA2NiwgNzMsIDgzLCA3NywgNzMsIDc2LCA3NiwgNjUsIDIwMCwgNjYsIDczLCA4MywgNzIsIAorICAgIDc5LCA4MCwgMTI4LCA2NiwgNzMsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzgsIDE5OSwgNjYsIDczLCA4MywgNjUsIDcyLCAKKyAgICAxMjgsIDY2LCA3MywgODIsIDg1LCAxMjgsIDY2LCA3MywgODIsIDg0LCA3MiwgNjgsIDY1LCAyMTcsIDY2LCA3MywgODIsIAorICAgIDcxLCA2NSwgMTI4LCA2NiwgNzMsIDgyLCA2OCwgMTI4LCA2NiwgNzMsIDc5LCA3MiwgNjUsIDkwLCA2NSwgODIsIDE5NiwgCisgICAgNjYsIDczLCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDY2LCA3MywgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjYsIDczLCAKKyAgICA3OCwgNjgsIDczLCAxMjgsIDY2LCA3MywgNzgsIDY1LCA4MiwgMjE3LCA2NiwgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgODMsIAorICAgIDEyOCwgNjYsIDczLCA3NiwgNzYsIDczLCA2NSwgODIsIDY4LCA4MywgMTI4LCA2NiwgNzMsIDc2LCA2NSwgNjYsIDczLCA2NSwgCiAgICAgMjA0LCA2NiwgNzMsIDc1LCA3MywgNzgsIDczLCAxMjgsIDY2LCA3MywgNzEsIDEyOCwgNjYsIDczLCAxOTksIDY2LCA3MywgCiAgICAgNjksIDg0LCAxMjgsIDY2LCA3MywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY2LCA3MywgNjgsIDY1LCA3NSwgODUsIDc5LCAKICAgICAyMDYsIDY2LCA3MywgNjcsIDg5LCA2NywgNzYsIDczLCA4MywgODQsIDEyOCwgNjYsIDczLCA2NywgODksIDY3LCA3NiwgNjksIApAQCAtNDM1MSwxNzggKzQ3MjksMTg2IEBACiAgICAgODQsIDg3LCA2OSwgNjksIDIwNiwgNjYsIDY5LCA4NCwgNzIsIDEyOCwgNjYsIDY5LCA4NCwgNjUsIDEyOCwgNjYsIDY5LCAKICAgICA4NCwgMTkzLCA2NiwgNjksIDIxMiwgNjYsIDY5LCA4MywgNzMsIDY4LCAxOTcsIDY2LCA2OSwgODIsIDc1LCA2NSwgNzgsIAogICAgIDY1LCAyMDYsIDY2LCA2OSwgODIsIDY2LCA2OSwgMjEwLCA2NiwgNjksIDgwLCAxMjgsIDY2LCA2OSwgNzksIDgyLCAxOTUsIAotICAgIDY2LCA2OSwgNzgsIDkwLCA2OSwgNzgsIDE5NywgNjYsIDY5LCA3OCwgODQsIDIwNywgNjYsIDY5LCA3OCwgNjgsIDY5LCAKLSAgICAxMjgsIDY2LCA2OSwgNzgsIDY4LCAxMjgsIDY2LCA2OSwgMjA2LCA2NiwgNjksIDc2LCA4NCwgMTI4LCA2NiwgNjksIDc2LCAKLSAgICAyMTIsIDY2LCA2OSwgNzYsIDc5LCAyMTUsIDY2LCA2OSwgNzYsIDc2LCAxMjgsIDY2LCA2OSwgNzYsIDIwNCwgNjYsIDY5LCAKLSAgICA3NiwgNzEsIDg0LCA3MiwgNzksIDIxMCwgNjYsIDY5LCA3NiwgMTI4LCA2NiwgNjksIDczLCA4NCwgNzIsIDEyOCwgNjYsIAotICAgIDY5LCA3MiwgNzMsIDc4LCAxOTYsIDY2LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA2NiwgNjksIDcyLCA2OSwgMjAwLCA2NiwgCi0gICAgNjksIDcyLCAxMjgsIDY2LCA2OSwgMjAwLCA2NiwgNjksIDcxLCA3MywgNzgsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDY2LCAKLSAgICA2OSwgNzEsIDczLCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA2NiwgNjksIDcxLCA3MywgMjA2LCA2NiwgNjksIDcwLCA3OSwgODIsIAorICAgIDY2LCA2OSwgNzgsIDkwLCA2OSwgNzgsIDE5NywgNjYsIDY5LCA3OCwgODQsIDIwNywgNjYsIDY5LCA3OCwgODQsIDEyOCwgCisgICAgNjYsIDY5LCA3OCwgMjEyLCA2NiwgNjksIDc4LCA2OCwgNjksIDEyOCwgNjYsIDY5LCA3OCwgNjgsIDEyOCwgNjYsIDY5LCAKKyAgICA3OCwgMTk2LCA2NiwgNjksIDIwNiwgNjYsIDY5LCA3NiwgODQsIDEyOCwgNjYsIDY5LCA3NiwgMjEyLCA2NiwgNjksIDc2LCAKKyAgICA3OSwgMjE1LCA2NiwgNjksIDc2LCA3NiwgNzIsIDc5LCAyMDgsIDY2LCA2OSwgNzYsIDc2LCAxMjgsIDY2LCA2OSwgNzYsIAorICAgIDIwNCwgNjYsIDY5LCA3NiwgNzEsIDg0LCA3MiwgNzksIDIxMCwgNjYsIDY5LCA3MywgODQsIDcyLCAxMjgsIDY2LCA2OSwgCisgICAgNzIsIDczLCA3OCwgMTk2LCA2NiwgNjksIDcyLCA2OSwgNzIsIDEyOCwgNjYsIDY5LCA3MiwgNjksIDIwMCwgNjYsIDY5LCAKKyAgICA3MiwgMTI4LCA2NiwgNjksIDIwMCwgNjYsIDY5LCA3MSwgNzMsIDc4LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2NiwgNjksIAorICAgIDcxLCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNjYsIDY5LCA3MSwgNzMsIDIwNiwgNjYsIDY5LCA3MCwgNzksIDgyLCAKICAgICAxOTcsIDY2LCA2OSwgNjksIDg0LCA3NiwgNjksIDEyOCwgNjYsIDY5LCA2OSwgODQsIDY1LCAxMjgsIDY2LCA2OSwgNjksIAogICAgIDIxMCwgNjYsIDY5LCA2OSwgNzIsIDczLCA4NiwgNjksIDEyOCwgNjYsIDY5LCA2OSwgNzIsIDEyOCwgNjYsIDY5LCA2OSwgCiAgICAgMjAwLCA2NiwgNjksIDY3LCA2NSwgODUsIDgzLCA2OSwgMTI4LCA2NiwgNjksIDY1LCA4NiwgNjksIDIxMCwgNjYsIDY5LCAKICAgICA2NSwgODQsIDczLCA3OCwgMTk5LCA2NiwgNjksIDY1LCA4NCwgMTI4LCA2NiwgNjksIDY1LCAyMTAsIDY2LCA2OSwgNjUsIAotICAgIDc4LCAxMjgsIDY2LCA2OSwgNjUsIDc3LCA2OSwgMTk2LCA2NiwgNjcsIDY1LCA2OCwgMTI4LCA2NiwgNjcsIDY1LCAxOTYsIAotICAgIDY2LCA2NiwgODksIDg4LCAxMjgsIDY2LCA2NiwgODksIDg0LCAxMjgsIDY2LCA2NiwgODksIDgwLCAxMjgsIDY2LCA2NiwgCi0gICAgODksIDEyOCwgNjYsIDY2LCA4NSwgODgsIDEyOCwgNjYsIDY2LCA4NSwgODQsIDEyOCwgNjYsIDY2LCA4NSwgODIsIDg4LCAKLSAgICAxMjgsIDY2LCA2NiwgODUsIDgyLCAxMjgsIDY2LCA2NiwgODUsIDgwLCAxMjgsIDY2LCA2NiwgODUsIDc5LCA4OCwgMTI4LCAKLSAgICA2NiwgNjYsIDg1LCA3OSwgODAsIDEyOCwgNjYsIDY2LCA4NSwgNzksIDEyOCwgNjYsIDY2LCA4NSwgMTI4LCA2NiwgNjYsIAotICAgIDc5LCA4OCwgMTI4LCA2NiwgNjYsIDc5LCA4NCwgMTI4LCA2NiwgNjYsIDc5LCA4MCwgMTI4LCA2NiwgNjYsIDc5LCAxMjgsIAotICAgIDY2LCA2NiwgNzMsIDg4LCAxMjgsIDY2LCA2NiwgNzMsIDgwLCAxMjgsIDY2LCA2NiwgNzMsIDY5LCA4OCwgMTI4LCA2NiwgCi0gICAgNjYsIDczLCA2OSwgODQsIDEyOCwgNjYsIDY2LCA3MywgNjksIDgwLCAxMjgsIDY2LCA2NiwgNzMsIDY5LCAxMjgsIDY2LCAKLSAgICA2NiwgNzMsIDEyOCwgNjYsIDY2LCA2OSwgODgsIDEyOCwgNjYsIDY2LCA2OSwgODAsIDEyOCwgNjYsIDY2LCA2OSwgNjksIAotICAgIDEyOCwgNjYsIDY2LCA2OSwgMTI4LCA2NiwgNjYsIDY1LCA4OCwgMTI4LCA2NiwgNjYsIDY1LCA4NCwgMTI4LCA2NiwgNjYsIAotICAgIDY1LCA4MCwgMTI4LCA2NiwgNjYsIDY1LCA2NSwgMTI4LCA2NiwgNjYsIDY1LCAxMjgsIDY2LCA2NSwgODksIDY1LCA3OCwgCi0gICAgNzgsIDY1LCAxMjgsIDY2LCA2NSwgODUsIDEyOCwgNjYsIDY1LCA4NCwgODQsIDY5LCA4MiwgODksIDEyOCwgNjYsIDY1LCAKLSAgICA4NCwgNzIsIDg0LCA4NSwgNjYsIDEyOCwgNjYsIDY1LCA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgNjYsIAotICAgIDY1LCA4NCwgNzIsIDEyOCwgNjYsIDY1LCA4NCwgMjAwLCA2NiwgNjUsIDg0LCA2NSwgMjAzLCA2NiwgNjUsIDgzLCA4MywgCi0gICAgNjUsIDEyOCwgNjYsIDY1LCA4MywgNzUsIDY5LCA4NCwgNjYsIDY1LCA3NiwgMjA0LCA2NiwgNjUsIDgzLCA3MiwgNzUsIDczLCAKLSAgICAyMTAsIDY2LCA2NSwgODMsIDcyLCAxMjgsIDY2LCA2NSwgODMsIDY5LCA2NiwgNjUsIDc2LCA3NiwgMTI4LCA2NiwgNjUsIAotICAgIDgzLCA2OSwgMTI4LCA2NiwgNjUsIDgzLCAxOTcsIDY2LCA2NSwgODIsIDgzLCAxMjgsIDY2LCA2NSwgODIsIDgyLCA3MywgCi0gICAgNjksIDgyLCAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgNzUsIDcyLCAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgNjksIAotICAgIDEyOCwgNjYsIDY1LCA4MiwgODIsIDY5LCAxOTcsIDY2LCA2NSwgODIsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDY2LCA2NSwgCi0gICAgODIsIDc2LCA2OSwgODksIDEyOCwgNjYsIDY1LCA4MiwgNzMsIDg5LCA3OSwgNzksIDgzLCA2NSwgNzgsIDEyOCwgNjYsIDY1LCAKLSAgICA4MiwgNjYsIDY5LCAyMTAsIDY2LCA2NSwgODIsIDE5NCwgNjYsIDY1LCA4MiwgNjUsIDUwLCAxMjgsIDY2LCA2NSwgMjEwLCAKLSAgICA2NiwgNjUsIDc4LCA4NCwgNzksIDY3LCAxMjgsIDY2LCA2NSwgNzgsIDc1LCA3OCwgNzksIDg0LCAxOTcsIDY2LCA2NSwgNzgsIAotICAgIDc1LCAxMjgsIDY2LCA2NSwgNzgsIDIwMywgNjYsIDY1LCA3OCwgNjgsIDEyOCwgNjYsIDY1LCA3OCwgNjUsIDc4LCA2NSwgCi0gICAgMTI4LCA2NiwgNjUsIDc4LCA1MCwgMTI4LCA2NiwgNjUsIDc4LCAxNzgsIDY2LCA2NSwgNzcsIDY2LCA3OSwgNzksIDgzLCAKLSAgICAxMjgsIDY2LCA2NSwgNzcsIDY2LCA3OSwgNzksIDEyOCwgNjYsIDY1LCA3NiwgODUsIDY4LCA2NSwgMTI4LCA2NiwgNjUsIAotICAgIDc2LCA3NiwgNzksIDIxMiwgNjYsIDY1LCA3NiwgNzYsIDc5LCA3OSwgNzgsIDQ1LCA4MywgODAsIDc5LCA3NSwgNjksIDE5NiwgCi0gICAgNjYsIDY1LCA3NiwgNzYsIDc5LCA3OSwgNzgsIDEyOCwgNjYsIDY1LCA3NiwgNjUsIDcxLCAxMjgsIDY2LCA2NSwgNzYsIAotICAgIDEyOCwgNjYsIDY1LCAyMDQsIDY2LCA2NSwgNzMsIDgyLCA3NSwgNjUsIDc4LCAxMjgsIDY2LCA2NSwgNzMsIDc3LCA2NSwgCi0gICAgNzMsIDEyOCwgNjYsIDY1LCA3MiwgODQsIDEyOCwgNjYsIDY1LCA3MiwgNzMsIDgyLCA3MSwgNzksIDc3LCA4NSwgNzUsIDcyLCAKLSAgICA2NSwgMTI4LCA2NiwgNjUsIDcyLCA2NSwgODIsIDUwLCAxMjgsIDY2LCA2NSwgNzIsIDEyOCwgNjYsIDY1LCA3MSwgNzEsIAotICAgIDY1LCA3MSwgMTk3LCA2NiwgNjUsIDcxLCA2NSwgMTI4LCA2NiwgNjUsIDcxLCA1MSwgMTI4LCA2NiwgNjUsIDE5OSwgNjYsIAotICAgIDY1LCA2OCwgNzEsIDY5LCA4MiwgMTI4LCA2NiwgNjUsIDY4LCA3MSwgNjksIDEyOCwgNjYsIDY1LCA2OCwgMTI4LCA2NiwgCi0gICAgNjUsIDY3LCA4NCwgODIsIDczLCA2NSwgMjA2LCA2NiwgNjUsIDY3LCA3NSwgODcsIDY1LCA4MiwgNjgsIDEyOCwgNjYsIDY1LCAKLSAgICA2NywgNzUsIDgzLCA4MCwgNjUsIDY3LCA2OSwgMTI4LCA2NiwgNjUsIDY3LCA3NSwgODMsIDc2LCA2NSwgODMsIDcyLCAxMjgsIAotICAgIDY2LCA2NSwgNjcsIDc1LCA4MywgNzYsIDY1LCA4MywgMjAwLCA2NiwgNjUsIDY3LCA3NSwgNzIsIDY1LCA3OCwgMTk2LCA2NiwgCi0gICAgNjUsIDY3LCA3NSwgNDUsIDg0LCA3MywgNzYsIDg0LCA2OSwgMTk2LCA2NiwgNjUsIDY3LCA3NSwgMTI4LCA2NiwgNjUsIDY3LCAKLSAgICAyMDMsIDY2LCA2NSwgNjYsIDg5LCAxMjgsIDY2LCA2NSwgNjYsIDIxNywgNjYsIDY1LCA2NSwgODIsIDY5LCA4MiwgODUsIAotICAgIDEyOCwgNjYsIDY1LCA0NSwgNTAsIDEyOCwgNjYsIDUxLCA0OCwgNTMsIDEyOCwgNjYsIDUwLCA1MywgNTcsIDEyOCwgNjYsIAotICAgIDUwLCA1MywgNTYsIDEyOCwgNjYsIDUwLCA1MywgNTUsIDEyOCwgNjYsIDUwLCA1MywgNTQsIDEyOCwgNjYsIDUwLCA1MywgCi0gICAgNTMsIDEyOCwgNjYsIDUwLCA1MywgMTgwLCA2NiwgNTAsIDUzLCA1MSwgMTI4LCA2NiwgNTAsIDUzLCA1MCwgMTI4LCA2NiwgCi0gICAgNTAsIDUzLCA0OSwgMTI4LCA2NiwgNTAsIDUzLCA0OCwgMTI4LCA2NiwgNTAsIDUyLCA1NywgMTI4LCA2NiwgNTAsIDUyLCAKLSAgICA1NiwgMTI4LCA2NiwgNTAsIDUyLCAxODMsIDY2LCA1MCwgNTIsIDU0LCAxMjgsIDY2LCA1MCwgNTIsIDUzLCAxMjgsIDY2LCAKLSAgICA1MCwgNTIsIDE3OSwgNjYsIDUwLCA1MiwgMTc4LCA2NiwgNTAsIDUyLCAxNzcsIDY2LCA1MCwgNTIsIDE3NiwgNjYsIDUwLCAKLSAgICA1MSwgNTQsIDEyOCwgNjYsIDUwLCA1MSwgNTIsIDEyOCwgNjYsIDUwLCA1MSwgMTc5LCA2NiwgNTAsIDUxLCA1MCwgMTI4LCAKLSAgICA2NiwgNTAsIDUxLCAxNzcsIDY2LCA1MCwgNTEsIDE3NiwgNjYsIDUwLCA1MCwgNTcsIDEyOCwgNjYsIDUwLCA1MCwgNTYsIAotICAgIDEyOCwgNjYsIDUwLCA1MCwgNTUsIDEyOCwgNjYsIDUwLCA1MCwgNTQsIDEyOCwgNjYsIDUwLCA1MCwgMTgxLCA2NiwgNTAsIAotICAgIDUwLCA1MCwgMTI4LCA2NiwgNTAsIDUwLCA0OSwgMTI4LCA2NiwgNTAsIDUwLCAxNzYsIDY2LCA1MCwgNDksIDU3LCAxMjgsIAotICAgIDY2LCA1MCwgNDksIDU2LCAxMjgsIDY2LCA1MCwgNDksIDU1LCAxMjgsIDY2LCA1MCwgNDksIDU0LCAxMjgsIDY2LCA1MCwgCi0gICAgNDksIDUzLCAxMjgsIDY2LCA1MCwgNDksIDUyLCAxMjgsIDY2LCA1MCwgNDksIDUxLCAxMjgsIDY2LCA1MCwgNDksIDUwLCAKLSAgICAxMjgsIDY2LCA1MCwgNDksIDQ5LCAxMjgsIDY2LCA1MCwgNDksIDQ4LCAxMjgsIDY2LCA1MCwgNDgsIDU3LCAxMjgsIDY2LCAKLSAgICA1MCwgNDgsIDU2LCAxMjgsIDY2LCA1MCwgNDgsIDU1LCAxMjgsIDY2LCA1MCwgNDgsIDU0LCAxMjgsIDY2LCA1MCwgNDgsIAotICAgIDUzLCAxMjgsIDY2LCA1MCwgNDgsIDUyLCAxMjgsIDY2LCA1MCwgNDgsIDUxLCAxMjgsIDY2LCA1MCwgNDgsIDUwLCAxMjgsIAotICAgIDY2LCA1MCwgNDgsIDQ5LCAxMjgsIDY2LCA1MCwgNDgsIDQ4LCAxMjgsIDY2LCA0OSwgNTcsIDE3NywgNjYsIDQ5LCA1NywgCi0gICAgNDgsIDEyOCwgNjYsIDQ5LCA1NiwgNTcsIDEyOCwgNjYsIDQ5LCA1NiwgNTMsIDEyOCwgNjYsIDQ5LCA1NiwgNTIsIDEyOCwgCi0gICAgNjYsIDQ5LCA1NiwgNTEsIDEyOCwgNjYsIDQ5LCA1NiwgNTAsIDEyOCwgNjYsIDQ5LCA1NiwgNDksIDEyOCwgNjYsIDQ5LCAKLSAgICA1NiwgNDgsIDEyOCwgNjYsIDQ5LCA1NSwgNTcsIDEyOCwgNjYsIDQ5LCA1NSwgNTYsIDEyOCwgNjYsIDQ5LCA1NSwgNTUsIAotICAgIDEyOCwgNjYsIDQ5LCA1NSwgMTgyLCA2NiwgNDksIDU1LCA1MiwgMTI4LCA2NiwgNDksIDU1LCAxNzksIDY2LCA0OSwgNTUsIAotICAgIDUwLCAxMjgsIDY2LCA0OSwgNTUsIDQ5LCAxMjgsIDY2LCA0OSwgNTUsIDQ4LCAxMjgsIDY2LCA0OSwgNTQsIDU3LCAxMjgsIAotICAgIDY2LCA0OSwgNTQsIDU2LCAxMjgsIDY2LCA0OSwgNTQsIDU1LCAxMjgsIDY2LCA0OSwgNTQsIDU0LCAxMjgsIDY2LCA0OSwgCi0gICAgNTQsIDUzLCAxMjgsIDY2LCA0OSwgNTQsIDUyLCAxMjgsIDY2LCA0OSwgNTQsIDE3OSwgNjYsIDQ5LCA1NCwgMTc4LCA2NiwgCi0gICAgNDksIDU0LCA0OSwgMTI4LCA2NiwgNDksIDU0LCA0OCwgMTI4LCA2NiwgNDksIDUzLCAxODUsIDY2LCA0OSwgNTMsIDU2LCAKLSAgICAxMjgsIDY2LCA0OSwgNTMsIDU1LCAxMjgsIDY2LCA0OSwgNTMsIDE4MiwgNjYsIDQ5LCA1MywgNTMsIDEyOCwgNjYsIDQ5LCAKLSAgICA1MywgNTIsIDEyOCwgNjYsIDQ5LCA1MywgNTEsIDEyOCwgNjYsIDQ5LCA1MywgNTAsIDEyOCwgNjYsIDQ5LCA1MywgMTc3LCAKLSAgICA2NiwgNDksIDUzLCA0OCwgMTI4LCA2NiwgNDksIDUyLCA1NCwgMTI4LCA2NiwgNDksIDUyLCAxODEsIDY2LCA0OSwgNTIsIAotICAgIDUwLCAxMjgsIDY2LCA0OSwgNTIsIDE3NywgNjYsIDQ5LCA1MiwgMTc2LCA2NiwgNDksIDUxLCAxODEsIDY2LCA0OSwgNTEsIAotICAgIDE3OSwgNjYsIDQ5LCA1MSwgNTAsIDEyOCwgNjYsIDQ5LCA1MSwgMTc3LCA2NiwgNDksIDUxLCAxNzYsIDY2LCA0OSwgNTAsIAotICAgIDE4NCwgNjYsIDQ5LCA1MCwgMTgzLCA2NiwgNDksIDUwLCAxODEsIDY2LCA0OSwgNTAsIDE3OSwgNjYsIDQ5LCA1MCwgMTc4LCAKLSAgICA2NiwgNDksIDUwLCAxNzcsIDY2LCA0OSwgNTAsIDE3NiwgNjYsIDQ5LCA0OCwgNTcsIDIwNSwgNjYsIDQ5LCA0OCwgNTcsIAotICAgIDE5OCwgNjYsIDQ5LCA0OCwgNTYsIDIwNSwgNjYsIDQ5LCA0OCwgNTYsIDE5OCwgNjYsIDQ5LCA0OCwgNTUsIDIwNSwgNjYsIAotICAgIDQ5LCA0OCwgNTUsIDE5OCwgNjYsIDQ5LCA0OCwgNTQsIDIwNSwgNjYsIDQ5LCA0OCwgNTQsIDE5OCwgNjYsIDQ5LCA0OCwgCi0gICAgNTMsIDIwNSwgNjYsIDQ5LCA0OCwgNTMsIDE5OCwgNjYsIDQ5LCA0OCwgMTgxLCA2NiwgNDksIDQ4LCAxODAsIDY2LCA0OSwgCi0gICAgNDgsIDE3OCwgNjYsIDQ5LCA0OCwgMTc2LCA2NiwgNDgsIDU3LCAxNzcsIDY2LCA0OCwgNTcsIDE3NiwgNjYsIDQ4LCA1NiwgCi0gICAgNTcsIDEyOCwgNjYsIDQ4LCA1NiwgMTgzLCA2NiwgNDgsIDU2LCA1NCwgMTI4LCA2NiwgNDgsIDU2LCAxODEsIDY2LCA0OCwgCi0gICAgNTYsIDUxLCAxMjgsIDY2LCA0OCwgNTYsIDUwLCAxMjgsIDY2LCA0OCwgNTYsIDE3NywgNjYsIDQ4LCA1NiwgMTc2LCA2NiwgCi0gICAgNDgsIDU1LCA1NywgMTI4LCA2NiwgNDgsIDU1LCAxODQsIDY2LCA0OCwgNTUsIDE4MywgNjYsIDQ4LCA1NSwgMTgyLCA2NiwgCi0gICAgNDgsIDU1LCAxODEsIDY2LCA0OCwgNTUsIDE4MCwgNjYsIDQ4LCA1NSwgMTc5LCA2NiwgNDgsIDU1LCAxNzgsIDY2LCA0OCwgCi0gICAgNTUsIDE3NywgNjYsIDQ4LCA1NSwgMTc2LCA2NiwgNDgsIDU0LCAxODUsIDY2LCA0OCwgNTQsIDE4NCwgNjYsIDQ4LCA1NCwgCi0gICAgMTgzLCA2NiwgNDgsIDU0LCAxODIsIDY2LCA0OCwgNTQsIDE4MSwgNjYsIDQ4LCA1NCwgNTIsIDEyOCwgNjYsIDQ4LCA1NCwgCi0gICAgNTEsIDEyOCwgNjYsIDQ4LCA1NCwgMTc4LCA2NiwgNDgsIDU0LCAxNzcsIDY2LCA0OCwgNTQsIDE3NiwgNjYsIDQ4LCA1MywgCi0gICAgMTg1LCA2NiwgNDgsIDUzLCAxODQsIDY2LCA0OCwgNTMsIDE4MywgNjYsIDQ4LCA1MywgNTQsIDEyOCwgNjYsIDQ4LCA1MywgCi0gICAgMTgxLCA2NiwgNDgsIDUzLCAxODAsIDY2LCA0OCwgNTMsIDE3OSwgNjYsIDQ4LCA1MywgMTc4LCA2NiwgNDgsIDUzLCAxNzcsIAotICAgIDY2LCA0OCwgNTMsIDE3NiwgNjYsIDQ4LCA1MiwgNTcsIDEyOCwgNjYsIDQ4LCA1MiwgMTg0LCA2NiwgNDgsIDUyLCA1NSwgCi0gICAgMTI4LCA2NiwgNDgsIDUyLCAxODIsIDY2LCA0OCwgNTIsIDE4MSwgNjYsIDQ4LCA1MiwgMTgwLCA2NiwgNDgsIDUyLCAxNzksIAotICAgIDY2LCA0OCwgNTIsIDE3OCwgNjYsIDQ4LCA1MiwgMTc3LCA2NiwgNDgsIDUyLCAxNzYsIDY2LCA0OCwgNTEsIDE4NSwgNjYsIAotICAgIDQ4LCA1MSwgMTg0LCA2NiwgNDgsIDUxLCAxODMsIDY2LCA0OCwgNTEsIDE4MiwgNjYsIDQ4LCA1MSwgNTIsIDEyOCwgNjYsIAotICAgIDQ4LCA1MSwgMTc5LCA2NiwgNDgsIDUxLCAxNzgsIDY2LCA0OCwgNTEsIDE3NywgNjYsIDQ4LCA1MSwgMTc2LCA2NiwgNDgsIAotICAgIDUwLCAxODUsIDY2LCA0OCwgNTAsIDE4NCwgNjYsIDQ4LCA1MCwgMTgzLCA2NiwgNDgsIDUwLCAxODIsIDY2LCA0OCwgNTAsIAotICAgIDE4MSwgNjYsIDQ4LCA1MCwgMTgwLCA2NiwgNDgsIDUwLCAxNzksIDY2LCA0OCwgNTAsIDUwLCAxMjgsIDY2LCA0OCwgNTAsIAotICAgIDE3NywgNjYsIDQ4LCA1MCwgMTc2LCA2NiwgNDgsIDQ5LCA1NywgMTI4LCA2NiwgNDgsIDQ5LCA1NiwgMTI4LCA2NiwgNDgsIAotICAgIDQ5LCAxODMsIDY2LCA0OCwgNDksIDE4MiwgNjYsIDQ4LCA0OSwgMTgxLCA2NiwgNDgsIDQ5LCAxODAsIDY2LCA0OCwgNDksIAotICAgIDE3OSwgNjYsIDQ4LCA0OSwgMTc4LCA2NiwgNDgsIDQ5LCAxNzcsIDY2LCA0OCwgNDksIDE3NiwgNjYsIDQ4LCA0OCwgNTcsIAotICAgIDEyOCwgNjYsIDQ4LCA0OCwgMTg1LCA2NiwgNDgsIDQ4LCA1NiwgMTI4LCA2NiwgNDgsIDQ4LCAxODQsIDY2LCA0OCwgNDgsIAotICAgIDU1LCAxMjgsIDY2LCA0OCwgNDgsIDE4MywgNjYsIDQ4LCA0OCwgNTQsIDEyOCwgNjYsIDQ4LCA0OCwgMTgyLCA2NiwgNDgsIAotICAgIDQ4LCA1MywgNjUsIDEyOCwgNjYsIDQ4LCA0OCwgNTMsIDEyOCwgNjYsIDQ4LCA0OCwgMTgxLCA2NiwgNDgsIDQ4LCA1MiwgCi0gICAgMTI4LCA2NiwgNDgsIDQ4LCAxODAsIDY2LCA0OCwgNDgsIDUxLCAxMjgsIDY2LCA0OCwgNDgsIDE3OSwgNjYsIDQ4LCA0OCwgCi0gICAgNTAsIDEyOCwgNjYsIDQ4LCA0OCwgMTc4LCA2NiwgNDgsIDQ4LCA0OSwgMTI4LCA2NiwgNDgsIDQ4LCAxNzcsIDY1LCA5MCwgCi0gICAgODUsIDEyOCwgNjUsIDg5LCA2OSwgMjEwLCA2NSwgODksIDY2LCAxMjgsIDY1LCA4OSwgNjUsIDcyLCAxMjgsIDY1LCA4OCwgCi0gICAgNjksIDEyOCwgNjUsIDg3LCA2OSwgMTI4LCA2NSwgODYsIDY5LCA4MywgODQsIDY1LCAyMDYsIDY1LCA4NiwgNjksIDgyLCAKLSAgICA2NSwgNzEsIDE5NywgNjUsIDg2LCA2NSwgNzUsIDgyLCA2NSwgNzIsIDY1LCA4MywgNjUsIDc4LCA4OSwgNjUsIDEyOCwgNjUsIAotICAgIDg2LCA2NSwgNzEsIDgyLCA2NSwgNzIsIDY1LCAxMjgsIDY1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA4NSwgCi0gICAgODQsIDg1LCA3NywgNzgsIDEyOCwgNjUsIDg1LCA4NCwgNzksIDc3LCA3OSwgNjYsIDczLCA3NiwgNjksIDEyOCwgNjUsIDg1LCAKLSAgICA4NCwgNzksIDc3LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA4NSwgODMsIDg0LCA4MiwgNjUsIDIwNCwgNjUsIDg1LCA4MiwgNzMsIAotICAgIDgwLCA3MywgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY1LCA4NSwgODIsIDY1LCA3NywgNjUsIDkwLCA2OCwgNjUsIDY1LCAKLSAgICA3MiwgNjUsIDEyOCwgNjUsIDg1LCA4MiwgNjUsIDc3LCA2NSwgOTAsIDY4LCA2NSwgNjUsIDQ1LCA1MCwgMTI4LCA2NSwgODUsIAotICAgIDgyLCA2NSwgNzcsIDY1LCA5MCwgNjgsIDY1LCA2NSwgMTI4LCA2NSwgODUsIDc4LCA3OCwgMTI4LCA2NSwgODUsIDcxLCA4NSwgCi0gICAgODMsIDg0LCAxMjgsIDY1LCA4NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgODUsIDY5LCAKLSAgICAxMjgsIDY1LCA4NSwgNjYsIDY5LCA4MiwgNzEsIDczLCA3OCwgNjksIDEyOCwgNjUsIDg0LCA4NCwgNzMsIDE5NSwgNjUsIAotICAgIDg0LCA4NCwgNzIsIDY1LCA2NywgNjUsIDc4LCAxMjgsIDY1LCA4NCwgODQsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgNjUsIDg0LCA4NCwgNjUsIDIwMywgNjUsIDg0LCA3OSwgMjA1LCA2NSwgODQsIDc4LCA2NSwgMjAwLCA2NSwgODQsIDc3LCAKLSAgICA2NSwgNjUsIDg1LCAxMjgsIDY1LCA4NCwgNzMsIDg5LCA2NSwgMTI4LCA2NSwgODQsIDcyLCA3NiwgNjksIDg0LCA3MywgCi0gICAgMTk1LCA2NSwgODQsIDcyLCA2NSwgODIsIDg2LCA2NSwgODYsIDY5LCA2OCwgNzMsIDE5NSwgNjUsIDg0LCA3MiwgNjUsIDgwLCAKLSAgICA2NSwgODMsIDY3LCA2NSwgMjA2LCA2NSwgODMsIDkwLCAxMjgsIDY1LCA4MywgODksIDg1LCA4MiwgMTkzLCA2NSwgODMsIAotICAgIDg5LCA3NywgODAsIDg0LCA3OSwgODQsIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA2NSwgODMsIDg0LCA4MiwgNzksIDc4LCAKLSAgICA3OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNjUsIDgzLCA4NCwgODIsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIAotICAgIDY1LCA4MywgODQsIDc5LCA3OCwgNzMsIDgzLCA3MiwgNjksIDE5NiwgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDc3LCAKLSAgICAxMjgsIDY1LCA4MywgODQsIDY5LCA4MiwgNzMsIDgzLCA3NSwgMjExLCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgNzUsIAotICAgIDEyOCwgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDIwMywgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDY3LCA4NSwgCi0gICAgODMsIDEyOCwgNjUsIDgzLCA4MywgODksIDgyLCA3MywgNjUsIDIwNiwgNjUsIDgzLCA4MywgNjksIDgyLCA4NCwgNzMsIDc5LCAKLSAgICA3OCwgMTI4LCA2NSwgODMsIDgwLCA3MywgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODMsIDgwLCA3MywgODIsIAotICAgIDY1LCA4NCwgNjksIDE5NiwgNjUsIDgzLCA4MCwgNjksIDgyLCAxMjgsIDY1LCA4MywgNzMsIDY1LCA0NSwgNjUsIDg1LCA4MywgCi0gICAgODQsIDgyLCA2NSwgNzYsIDczLCA2NSwgMTI4LCA2NSwgODMsIDcyLCA3MSwgNjUsIDY2LCAxMjgsIDY1LCA4MywgNzIsIDY5LCAKLSAgICA4MywgMTI4LCA2NSwgODMsIDcyLCA1NywgMTI4LCA2NSwgODMsIDcyLCAxNzgsIDY1LCA4MywgNjcsIDY5LCA3OCwgODQsIAorICAgIDc4LCAxMjgsIDY2LCA2OSwgNjUsIDc3LCA2OSwgMTk2LCA2NiwgNjksIDY1LCA2OCwgODMsIDEyOCwgNjYsIDY5LCA2NSwgCisgICAgNjcsIDIwMCwgNjYsIDY3LCA2NSwgNjgsIDEyOCwgNjYsIDY3LCA2NSwgMTk2LCA2NiwgNjYsIDg5LCA4OCwgMTI4LCA2NiwgCisgICAgNjYsIDg5LCA4NCwgMTI4LCA2NiwgNjYsIDg5LCA4MCwgMTI4LCA2NiwgNjYsIDg5LCAxMjgsIDY2LCA2NiwgODUsIDg4LCAKKyAgICAxMjgsIDY2LCA2NiwgODUsIDg0LCAxMjgsIDY2LCA2NiwgODUsIDgyLCA4OCwgMTI4LCA2NiwgNjYsIDg1LCA4MiwgMTI4LCAKKyAgICA2NiwgNjYsIDg1LCA4MCwgMTI4LCA2NiwgNjYsIDg1LCA3OSwgODgsIDEyOCwgNjYsIDY2LCA4NSwgNzksIDgwLCAxMjgsIAorICAgIDY2LCA2NiwgODUsIDc5LCAxMjgsIDY2LCA2NiwgODUsIDEyOCwgNjYsIDY2LCA3OSwgODgsIDEyOCwgNjYsIDY2LCA3OSwgCisgICAgODQsIDEyOCwgNjYsIDY2LCA3OSwgODAsIDEyOCwgNjYsIDY2LCA3OSwgMTI4LCA2NiwgNjYsIDczLCA4OCwgMTI4LCA2NiwgCisgICAgNjYsIDczLCA4MCwgMTI4LCA2NiwgNjYsIDczLCA2OSwgODgsIDEyOCwgNjYsIDY2LCA3MywgNjksIDg0LCAxMjgsIDY2LCAKKyAgICA2NiwgNzMsIDY5LCA4MCwgMTI4LCA2NiwgNjYsIDczLCA2OSwgMTI4LCA2NiwgNjYsIDczLCAxMjgsIDY2LCA2NiwgNjksIAorICAgIDg4LCAxMjgsIDY2LCA2NiwgNjksIDgwLCAxMjgsIDY2LCA2NiwgNjksIDY5LCAxMjgsIDY2LCA2NiwgNjksIDEyOCwgNjYsIAorICAgIDY2LCA2NSwgODgsIDEyOCwgNjYsIDY2LCA2NSwgODQsIDEyOCwgNjYsIDY2LCA2NSwgODAsIDEyOCwgNjYsIDY2LCA2NSwgCisgICAgNjUsIDEyOCwgNjYsIDY2LCA2NSwgMTI4LCA2NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NiwgNjUsIDg1LCAKKyAgICAxMjgsIDY2LCA2NSwgODQsIDg0LCA2OSwgODIsIDg5LCAxMjgsIDY2LCA2NSwgODQsIDcyLCA4NCwgODUsIDY2LCAxMjgsIAorICAgIDY2LCA2NSwgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDY2LCA2NSwgODQsIDcyLCAxMjgsIDY2LCA2NSwgCisgICAgODQsIDIwMCwgNjYsIDY1LCA4NCwgNjUsIDIwMywgNjYsIDY1LCA4MywgODMsIDY1LCAxMjgsIDY2LCA2NSwgODMsIDgzLCAKKyAgICAxOTMsIDY2LCA2NSwgODMsIDc1LCA2OSwgODQsIDY2LCA2NSwgNzYsIDIwNCwgNjYsIDY1LCA4MywgNzIsIDc1LCA3MywgCisgICAgMjEwLCA2NiwgNjUsIDgzLCA3MiwgMTI4LCA2NiwgNjUsIDgzLCA2OSwgNzYsIDczLCA3OCwgMTk3LCA2NiwgNjUsIDgzLCAKKyAgICA2OSwgNjYsIDY1LCA3NiwgNzYsIDEyOCwgNjYsIDY1LCA4MywgNjksIDEyOCwgNjYsIDY1LCA4MywgMTk3LCA2NiwgNjUsIAorICAgIDgyLCA4MywgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNzMsIDY5LCA4MiwgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDc1LCA3MiwgCisgICAgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDY5LCAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgMTk3LCA2NiwgNjUsIDgyLCAKKyAgICA3NiwgNzMsIDc4LCA2OSwgMTI4LCA2NiwgNjUsIDgyLCA3NiwgNjksIDg5LCAxMjgsIDY2LCA2NSwgODIsIDczLCA4OSwgNzksIAorICAgIDc5LCA4MywgNjUsIDc4LCAxMjgsIDY2LCA2NSwgODIsIDY2LCA2OSwgMjEwLCA2NiwgNjUsIDgyLCA2NSwgNTAsIDEyOCwgCisgICAgNjYsIDY1LCAyMTAsIDY2LCA2NSwgNzgsIDg0LCA3OSwgNjcsIDEyOCwgNjYsIDY1LCA3OCwgNzUsIDc4LCA3OSwgODQsIAorICAgIDE5NywgNjYsIDY1LCA3OCwgNzUsIDEyOCwgNjYsIDY1LCA3OCwgMjAzLCA2NiwgNjUsIDc4LCA2OCwgMTI4LCA2NiwgNjUsIAorICAgIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDY2LCA2NSwgNzgsIDUwLCAxMjgsIDY2LCA2NSwgNzgsIDE3OCwgNjYsIDY1LCA3NywgCisgICAgNjYsIDc5LCA3OSwgODMsIDEyOCwgNjYsIDY1LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA2NiwgNjUsIDc2LCA4NSwgNjgsIDY1LCAKKyAgICAxMjgsIDY2LCA2NSwgNzYsIDc2LCA4MCwgNzksIDczLCA3OCwgMjEyLCA2NiwgNjUsIDc2LCA3NiwgNzksIDg0LCAxMjgsIAorICAgIDY2LCA2NSwgNzYsIDc2LCA3OSwgMjEyLCA2NiwgNjUsIDc2LCA3NiwgNzksIDc5LCA3OCwgNDUsIDgzLCA4MCwgNzksIDc1LCAKKyAgICA2OSwgMTk2LCA2NiwgNjUsIDc2LCA3NiwgNzksIDc5LCA3OCwgMTI4LCA2NiwgNjUsIDc2LCA2NSwgNzEsIDEyOCwgNjYsIAorICAgIDY1LCA3NiwgMTI4LCA2NiwgNjUsIDIwNCwgNjYsIDY1LCA3MywgODIsIDc1LCA2NSwgNzgsIDEyOCwgNjYsIDY1LCA3MywgCisgICAgNzcsIDY1LCA3MywgMTI4LCA2NiwgNjUsIDcyLCA4NCwgMTI4LCA2NiwgNjUsIDcyLCA3MywgODIsIDcxLCA3OSwgNzcsIDg1LCAKKyAgICA3NSwgNzIsIDY1LCAxMjgsIDY2LCA2NSwgNzIsIDY1LCA4MiwgNTAsIDEyOCwgNjYsIDY1LCA3MiwgNjUsIDgyLCAxNzgsIAorICAgIDY2LCA2NSwgNzIsIDEyOCwgNjYsIDY1LCA3MSwgODMsIDEyOCwgNjYsIDY1LCA3MSwgNzEsIDY1LCA3MSwgMTk3LCA2NiwgCisgICAgNjUsIDcxLCA2NSwgMTI4LCA2NiwgNjUsIDcxLCA1MSwgMTI4LCA2NiwgNjUsIDE5OSwgNjYsIDY1LCA2OCwgNzcsIDczLCAKKyAgICA3OCwgODQsIDc5LCAyMDYsIDY2LCA2NSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNjYsIDY1LCA2OCwgNzEsIDY5LCAxMjgsIAorICAgIDY2LCA2NSwgNjgsIDEyOCwgNjYsIDY1LCAxOTYsIDY2LCA2NSwgNjcsIDg0LCA4MiwgNzMsIDY1LCAyMDYsIDY2LCA2NSwgCisgICAgNjcsIDc1LCA4NywgNjUsIDgyLCA2OCwgMTI4LCA2NiwgNjUsIDY3LCA3NSwgODMsIDgwLCA2NSwgNjcsIDY5LCAxMjgsIDY2LCAKKyAgICA2NSwgNjcsIDc1LCA4MywgNzYsIDY1LCA4MywgNzIsIDEyOCwgNjYsIDY1LCA2NywgNzUsIDgzLCA3NiwgNjUsIDgzLCAyMDAsIAorICAgIDY2LCA2NSwgNjcsIDc1LCA4MywgNzYsIDY1LCA3OCwgODQsIDY5LCAxOTYsIDY2LCA2NSwgNjcsIDc1LCA3MiwgNjUsIDc4LCAKKyAgICAxOTYsIDY2LCA2NSwgNjcsIDc1LCA0NSwgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDY2LCA2NSwgNjcsIDc1LCAxMjgsIAorICAgIDY2LCA2NSwgNjcsIDIwMywgNjYsIDY1LCA2NiwgODksIDEyOCwgNjYsIDY1LCA2NiwgMjE3LCA2NiwgNjUsIDY1LCA4MiwgCisgICAgNjksIDgyLCA4NSwgMTI4LCA2NiwgNjUsIDQ1LCA1MCwgMTI4LCA2NiwgNTEsIDQ4LCA1MywgMTI4LCA2NiwgNTAsIDUzLCAKKyAgICA1NywgMTI4LCA2NiwgNTAsIDUzLCA1NiwgMTI4LCA2NiwgNTAsIDUzLCA1NSwgMTI4LCA2NiwgNTAsIDUzLCA1NCwgMTI4LCAKKyAgICA2NiwgNTAsIDUzLCA1MywgMTI4LCA2NiwgNTAsIDUzLCAxODAsIDY2LCA1MCwgNTMsIDUxLCAxMjgsIDY2LCA1MCwgNTMsIAorICAgIDUwLCAxMjgsIDY2LCA1MCwgNTMsIDQ5LCAxMjgsIDY2LCA1MCwgNTMsIDQ4LCAxMjgsIDY2LCA1MCwgNTIsIDU3LCAxMjgsIAorICAgIDY2LCA1MCwgNTIsIDU2LCAxMjgsIDY2LCA1MCwgNTIsIDE4MywgNjYsIDUwLCA1MiwgNTQsIDEyOCwgNjYsIDUwLCA1MiwgCisgICAgNTMsIDEyOCwgNjYsIDUwLCA1MiwgMTc5LCA2NiwgNTAsIDUyLCAxNzgsIDY2LCA1MCwgNTIsIDE3NywgNjYsIDUwLCA1MiwgCisgICAgMTc2LCA2NiwgNTAsIDUxLCA1NCwgMTI4LCA2NiwgNTAsIDUxLCA1MiwgMTI4LCA2NiwgNTAsIDUxLCAxNzksIDY2LCA1MCwgCisgICAgNTEsIDUwLCAxMjgsIDY2LCA1MCwgNTEsIDE3NywgNjYsIDUwLCA1MSwgMTc2LCA2NiwgNTAsIDUwLCA1NywgMTI4LCA2NiwgCisgICAgNTAsIDUwLCA1NiwgMTI4LCA2NiwgNTAsIDUwLCA1NSwgMTI4LCA2NiwgNTAsIDUwLCA1NCwgMTI4LCA2NiwgNTAsIDUwLCAKKyAgICAxODEsIDY2LCA1MCwgNTAsIDUwLCAxMjgsIDY2LCA1MCwgNTAsIDQ5LCAxMjgsIDY2LCA1MCwgNTAsIDE3NiwgNjYsIDUwLCAKKyAgICA0OSwgNTcsIDEyOCwgNjYsIDUwLCA0OSwgNTYsIDEyOCwgNjYsIDUwLCA0OSwgNTUsIDEyOCwgNjYsIDUwLCA0OSwgNTQsIAorICAgIDEyOCwgNjYsIDUwLCA0OSwgNTMsIDEyOCwgNjYsIDUwLCA0OSwgNTIsIDEyOCwgNjYsIDUwLCA0OSwgNTEsIDEyOCwgNjYsIAorICAgIDUwLCA0OSwgNTAsIDEyOCwgNjYsIDUwLCA0OSwgNDksIDEyOCwgNjYsIDUwLCA0OSwgNDgsIDEyOCwgNjYsIDUwLCA0OCwgCisgICAgNTcsIDEyOCwgNjYsIDUwLCA0OCwgNTYsIDEyOCwgNjYsIDUwLCA0OCwgNTUsIDEyOCwgNjYsIDUwLCA0OCwgNTQsIDEyOCwgCisgICAgNjYsIDUwLCA0OCwgNTMsIDEyOCwgNjYsIDUwLCA0OCwgNTIsIDEyOCwgNjYsIDUwLCA0OCwgNTEsIDEyOCwgNjYsIDUwLCAKKyAgICA0OCwgNTAsIDEyOCwgNjYsIDUwLCA0OCwgNDksIDEyOCwgNjYsIDUwLCA0OCwgNDgsIDEyOCwgNjYsIDQ5LCA1NywgMTc3LCAKKyAgICA2NiwgNDksIDU3LCA0OCwgMTI4LCA2NiwgNDksIDU2LCA1NywgMTI4LCA2NiwgNDksIDU2LCA1MywgMTI4LCA2NiwgNDksIAorICAgIDU2LCA1MiwgMTI4LCA2NiwgNDksIDU2LCA1MSwgMTI4LCA2NiwgNDksIDU2LCA1MCwgMTI4LCA2NiwgNDksIDU2LCA0OSwgCisgICAgMTI4LCA2NiwgNDksIDU2LCA0OCwgMTI4LCA2NiwgNDksIDU1LCA1NywgMTI4LCA2NiwgNDksIDU1LCA1NiwgMTI4LCA2NiwgCisgICAgNDksIDU1LCA1NSwgMTI4LCA2NiwgNDksIDU1LCAxODIsIDY2LCA0OSwgNTUsIDUyLCAxMjgsIDY2LCA0OSwgNTUsIDE3OSwgCisgICAgNjYsIDQ5LCA1NSwgNTAsIDEyOCwgNjYsIDQ5LCA1NSwgNDksIDEyOCwgNjYsIDQ5LCA1NSwgNDgsIDEyOCwgNjYsIDQ5LCAKKyAgICA1NCwgNTcsIDEyOCwgNjYsIDQ5LCA1NCwgNTYsIDEyOCwgNjYsIDQ5LCA1NCwgNTUsIDEyOCwgNjYsIDQ5LCA1NCwgNTQsIAorICAgIDEyOCwgNjYsIDQ5LCA1NCwgNTMsIDEyOCwgNjYsIDQ5LCA1NCwgNTIsIDEyOCwgNjYsIDQ5LCA1NCwgMTc5LCA2NiwgNDksIAorICAgIDU0LCAxNzgsIDY2LCA0OSwgNTQsIDQ5LCAxMjgsIDY2LCA0OSwgNTQsIDQ4LCAxMjgsIDY2LCA0OSwgNTMsIDE4NSwgNjYsIAorICAgIDQ5LCA1MywgNTYsIDEyOCwgNjYsIDQ5LCA1MywgNTUsIDEyOCwgNjYsIDQ5LCA1MywgMTgyLCA2NiwgNDksIDUzLCA1MywgCisgICAgMTI4LCA2NiwgNDksIDUzLCA1MiwgMTI4LCA2NiwgNDksIDUzLCA1MSwgMTI4LCA2NiwgNDksIDUzLCA1MCwgMTI4LCA2NiwgCisgICAgNDksIDUzLCAxNzcsIDY2LCA0OSwgNTMsIDQ4LCAxMjgsIDY2LCA0OSwgNTIsIDU0LCAxMjgsIDY2LCA0OSwgNTIsIDE4MSwgCisgICAgNjYsIDQ5LCA1MiwgNTAsIDEyOCwgNjYsIDQ5LCA1MiwgMTc3LCA2NiwgNDksIDUyLCAxNzYsIDY2LCA0OSwgNTEsIDE4MSwgCisgICAgNjYsIDQ5LCA1MSwgMTc5LCA2NiwgNDksIDUxLCA1MCwgMTI4LCA2NiwgNDksIDUxLCAxNzcsIDY2LCA0OSwgNTEsIDE3NiwgCisgICAgNjYsIDQ5LCA1MCwgMTg0LCA2NiwgNDksIDUwLCAxODMsIDY2LCA0OSwgNTAsIDE4MSwgNjYsIDQ5LCA1MCwgMTc5LCA2NiwgCisgICAgNDksIDUwLCAxNzgsIDY2LCA0OSwgNTAsIDE3NywgNjYsIDQ5LCA1MCwgMTc2LCA2NiwgNDksIDQ4LCA1NywgMjA1LCA2NiwgCisgICAgNDksIDQ4LCA1NywgMTk4LCA2NiwgNDksIDQ4LCA1NiwgMjA1LCA2NiwgNDksIDQ4LCA1NiwgMTk4LCA2NiwgNDksIDQ4LCAKKyAgICA1NSwgMjA1LCA2NiwgNDksIDQ4LCA1NSwgMTk4LCA2NiwgNDksIDQ4LCA1NCwgMjA1LCA2NiwgNDksIDQ4LCA1NCwgMTk4LCAKKyAgICA2NiwgNDksIDQ4LCA1MywgMjA1LCA2NiwgNDksIDQ4LCA1MywgMTk4LCA2NiwgNDksIDQ4LCAxODEsIDY2LCA0OSwgNDgsIAorICAgIDE4MCwgNjYsIDQ5LCA0OCwgMTc4LCA2NiwgNDksIDQ4LCAxNzYsIDY2LCA0OCwgNTcsIDE3NywgNjYsIDQ4LCA1NywgMTc2LCAKKyAgICA2NiwgNDgsIDU2LCA1NywgMTI4LCA2NiwgNDgsIDU2LCAxODMsIDY2LCA0OCwgNTYsIDU0LCAxMjgsIDY2LCA0OCwgNTYsIAorICAgIDE4MSwgNjYsIDQ4LCA1NiwgNTEsIDEyOCwgNjYsIDQ4LCA1NiwgNTAsIDEyOCwgNjYsIDQ4LCA1NiwgMTc3LCA2NiwgNDgsIAorICAgIDU2LCAxNzYsIDY2LCA0OCwgNTUsIDU3LCAxMjgsIDY2LCA0OCwgNTUsIDE4NCwgNjYsIDQ4LCA1NSwgMTgzLCA2NiwgNDgsIAorICAgIDU1LCAxODIsIDY2LCA0OCwgNTUsIDE4MSwgNjYsIDQ4LCA1NSwgMTgwLCA2NiwgNDgsIDU1LCAxNzksIDY2LCA0OCwgNTUsIAorICAgIDE3OCwgNjYsIDQ4LCA1NSwgMTc3LCA2NiwgNDgsIDU1LCAxNzYsIDY2LCA0OCwgNTQsIDE4NSwgNjYsIDQ4LCA1NCwgMTg0LCAKKyAgICA2NiwgNDgsIDU0LCAxODMsIDY2LCA0OCwgNTQsIDE4MiwgNjYsIDQ4LCA1NCwgMTgxLCA2NiwgNDgsIDU0LCA1MiwgMTI4LCAKKyAgICA2NiwgNDgsIDU0LCA1MSwgMTI4LCA2NiwgNDgsIDU0LCAxNzgsIDY2LCA0OCwgNTQsIDE3NywgNjYsIDQ4LCA1NCwgMTc2LCAKKyAgICA2NiwgNDgsIDUzLCAxODUsIDY2LCA0OCwgNTMsIDE4NCwgNjYsIDQ4LCA1MywgMTgzLCA2NiwgNDgsIDUzLCA1NCwgMTI4LCAKKyAgICA2NiwgNDgsIDUzLCAxODEsIDY2LCA0OCwgNTMsIDE4MCwgNjYsIDQ4LCA1MywgMTc5LCA2NiwgNDgsIDUzLCAxNzgsIDY2LCAKKyAgICA0OCwgNTMsIDE3NywgNjYsIDQ4LCA1MywgMTc2LCA2NiwgNDgsIDUyLCA1NywgMTI4LCA2NiwgNDgsIDUyLCAxODQsIDY2LCAKKyAgICA0OCwgNTIsIDU1LCAxMjgsIDY2LCA0OCwgNTIsIDE4MiwgNjYsIDQ4LCA1MiwgMTgxLCA2NiwgNDgsIDUyLCAxODAsIDY2LCAKKyAgICA0OCwgNTIsIDE3OSwgNjYsIDQ4LCA1MiwgMTc4LCA2NiwgNDgsIDUyLCAxNzcsIDY2LCA0OCwgNTIsIDE3NiwgNjYsIDQ4LCAKKyAgICA1MSwgMTg1LCA2NiwgNDgsIDUxLCAxODQsIDY2LCA0OCwgNTEsIDE4MywgNjYsIDQ4LCA1MSwgMTgyLCA2NiwgNDgsIDUxLCAKKyAgICA1MiwgMTI4LCA2NiwgNDgsIDUxLCAxNzksIDY2LCA0OCwgNTEsIDE3OCwgNjYsIDQ4LCA1MSwgMTc3LCA2NiwgNDgsIDUxLCAKKyAgICAxNzYsIDY2LCA0OCwgNTAsIDE4NSwgNjYsIDQ4LCA1MCwgMTg0LCA2NiwgNDgsIDUwLCAxODMsIDY2LCA0OCwgNTAsIDE4MiwgCisgICAgNjYsIDQ4LCA1MCwgMTgxLCA2NiwgNDgsIDUwLCAxODAsIDY2LCA0OCwgNTAsIDE3OSwgNjYsIDQ4LCA1MCwgNTAsIDEyOCwgCisgICAgNjYsIDQ4LCA1MCwgMTc3LCA2NiwgNDgsIDUwLCAxNzYsIDY2LCA0OCwgNDksIDU3LCAxMjgsIDY2LCA0OCwgNDksIDU2LCAKKyAgICAxMjgsIDY2LCA0OCwgNDksIDE4MywgNjYsIDQ4LCA0OSwgMTgyLCA2NiwgNDgsIDQ5LCAxODEsIDY2LCA0OCwgNDksIDE4MCwgCisgICAgNjYsIDQ4LCA0OSwgMTc5LCA2NiwgNDgsIDQ5LCAxNzgsIDY2LCA0OCwgNDksIDE3NywgNjYsIDQ4LCA0OSwgMTc2LCA2NiwgCisgICAgNDgsIDQ4LCA1NywgMTI4LCA2NiwgNDgsIDQ4LCAxODUsIDY2LCA0OCwgNDgsIDU2LCAxMjgsIDY2LCA0OCwgNDgsIDE4NCwgCisgICAgNjYsIDQ4LCA0OCwgNTUsIDEyOCwgNjYsIDQ4LCA0OCwgMTgzLCA2NiwgNDgsIDQ4LCA1NCwgMTI4LCA2NiwgNDgsIDQ4LCAKKyAgICAxODIsIDY2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA2NiwgNDgsIDQ4LCA1MywgMTI4LCA2NiwgNDgsIDQ4LCAxODEsIDY2LCAKKyAgICA0OCwgNDgsIDUyLCAxMjgsIDY2LCA0OCwgNDgsIDE4MCwgNjYsIDQ4LCA0OCwgNTEsIDEyOCwgNjYsIDQ4LCA0OCwgMTc5LCAKKyAgICA2NiwgNDgsIDQ4LCA1MCwgMTI4LCA2NiwgNDgsIDQ4LCAxNzgsIDY2LCA0OCwgNDgsIDQ5LCAxMjgsIDY2LCA0OCwgNDgsIAorICAgIDE3NywgNjUsIDkwLCA4NSwgMTI4LCA2NSwgODksIDY2LCAxMjgsIDY1LCA4OSwgNjUsIDcyLCAxMjgsIDY1LCA4OCwgNjksIAorICAgIDEyOCwgNjUsIDg3LCA2OSwgMTI4LCA2NSwgODcsIDY1LCAyMTcsIDY1LCA4NiwgNjksIDgzLCA4NCwgNjUsIDIwNiwgNjUsIAorICAgIDg2LCA2OSwgODIsIDY1LCA3MSwgMTk3LCA2NSwgODYsIDY1LCA3NSwgODIsIDY1LCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg5LCAKKyAgICA2NSwgMTI4LCA2NSwgODYsIDY1LCA3MSwgODIsIDY1LCA3MiwgNjUsIDEyOCwgNjUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNjUsIDg1LCA4NCwgODUsIDc3LCA3OCwgMTI4LCA2NSwgODUsIDg0LCA3OSwgNzcsIDc5LCA2NiwgNzMsIDc2LCA2OSwgCisgICAgMTI4LCA2NSwgODUsIDg0LCA3OSwgNzcsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDg1LCA4MywgODQsIDgyLCA2NSwgMjA0LCAKKyAgICA2NSwgODUsIDgyLCA3MywgODAsIDczLCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjUsIDg1LCA4MiwgNjUsIDc3LCA2NSwgCisgICAgOTAsIDY4LCA2NSwgNjUsIDcyLCA2NSwgMTI4LCA2NSwgODUsIDgyLCA2NSwgNzcsIDY1LCA5MCwgNjgsIDY1LCA2NSwgNDUsIAorICAgIDUwLCAxMjgsIDY1LCA4NSwgODIsIDY1LCA3NywgNjUsIDkwLCA2OCwgNjUsIDY1LCAxMjgsIDY1LCA4NSwgNzgsIDc4LCAKKyAgICAxMjgsIDY1LCA4NSwgNzEsIDg1LCA4MywgODQsIDEyOCwgNjUsIDg1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDY1LCA4NSwgNjksIDEyOCwgNjUsIDg1LCA2NiwgNjksIDgyLCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2NSwgCisgICAgODQsIDg0LCA3MywgMTk1LCA2NSwgODQsIDg0LCA3MiwgNjUsIDY3LCA2NSwgNzgsIDEyOCwgNjUsIDg0LCA4NCwgNjksIDc4LCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODQsIDg0LCA2NSwgMjAzLCA2NSwgODQsIDg0LCA2NSwgNjcsIDcyLCA2OSwgCisgICAgMTk2LCA2NSwgODQsIDc5LCAyMDUsIDY1LCA4NCwgNzgsIDY1LCAyMDAsIDY1LCA4NCwgNzcsIDY1LCA2NSwgODUsIDEyOCwgCisgICAgNjUsIDg0LCA3MywgODksIDY1LCAxMjgsIDY1LCA4NCwgNzIsIDc2LCA2OSwgODQsIDczLCAxOTUsIDY1LCA4NCwgNzIsIDY1LCAKKyAgICA4MiwgODYsIDY1LCA4NiwgNjksIDY4LCA3MywgMTk1LCA2NSwgODQsIDcyLCA2NSwgODAsIDY1LCA4MywgNjcsIDY1LCAyMDYsIAorICAgIDY1LCA4MywgOTAsIDEyOCwgNjUsIDgzLCA4OSwgODUsIDgyLCAxOTMsIDY1LCA4MywgODksIDc3LCA4MCwgODQsIDc5LCA4NCwgCisgICAgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDY1LCA4MywgODQsIDgyLCA3OSwgNzgsIDc5LCA3NywgNzMsIDY3LCA2NSwgMjA0LCAKKyAgICA2NSwgODMsIDg0LCA4MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNjUsIDgzLCA4NCwgNzksIDc4LCA3MywgCisgICAgODMsIDcyLCA2OSwgMTk2LCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgNzcsIDEyOCwgNjUsIDgzLCA4NCwgNjksIDgyLCAKKyAgICA3MywgODMsIDc1LCAyMTEsIDY1LCA4MywgODQsIDY5LCA4MiwgNzMsIDgzLCA3NSwgMTI4LCA2NSwgODMsIDg0LCA2OSwgODIsIAorICAgIDczLCA4MywgMjAzLCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA2NSwgODMsIDgzLCA4OSwgCisgICAgODIsIDczLCA2NSwgMjA2LCA2NSwgODMsIDgzLCA2OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4MywgODAsIDczLCAKKyAgICA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4MywgODAsIDczLCA4MiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgODMsIAorICAgIDgwLCA2OSwgODIsIDEyOCwgNjUsIDgzLCA3MywgNjUsIDQ1LCA2NSwgODUsIDgzLCA4NCwgODIsIDY1LCA3NiwgNzMsIDY1LCAKKyAgICAxMjgsIDY1LCA4MywgNzIsIDcxLCA2NSwgNjYsIDEyOCwgNjUsIDgzLCA3MiwgNjksIDgzLCAxMjgsIDY1LCA4MywgNzIsIAorICAgIDU3LCAxMjgsIDY1LCA4MywgNzIsIDUxLCAxMjgsIDY1LCA4MywgNzIsIDE3OCwgNjUsIDgzLCA2NywgNjksIDc4LCA4NCwgCiAgICAgMTI4LCA2NSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjUsIDgzLCA2NSwgNzYsIDUwLCAxMjgsIDY1LCAKICAgICA4MiwgODUsIDcyLCA4NSwgNjUsIDEyOCwgNjUsIDgyLCA4NCwgNzMsIDgzLCAyMTIsIDY1LCA4MiwgODQsIDczLCA2NywgODUsIAogICAgIDc2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA4MiwgODQsIDY1LCA2NiwgMTk3LCA2NSwgODIsIDgzLCA2OSwgNzksIDgzLCAKICAgICAxMjgsIDY1LCA4MiwgODMsIDY5LCA3OSwgMjExLCA2NSwgODIsIDgzLCA2OSwgNzgsIDczLCA2NywgMTI4LCA2NSwgODIsIAogICAgIDgyLCA3OSwgODcsIDgzLCAxMjgsIDY1LCA4MiwgODIsIDc5LCA4NywgMjExLCA2NSwgODIsIDgyLCA3OSwgODcsIDcyLCA2OSwgCi0gICAgNjUsIDY4LCAxMjgsIDY1LCA4MiwgODIsIDc5LCA4NywgNzIsIDY5LCA2NSwgMTk2LCA2NSwgODIsIDgyLCA3OSwgODcsIDQ1LCAKLSAgICA4NCwgNjUsIDczLCA3NiwgMTI4LCA2NSwgODIsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY1LCA4MiwgODIsIDY1LCA4OSwgCi0gICAgMTI4LCA2NSwgODIsIDgwLCA2OSwgNzEsIDcxLCA3MywgNjUsIDg0LCAyMDcsIDY1LCA4MiwgNzksIDg1LCA4MywgNzMsIDc4LCAKLSAgICAxOTksIDY1LCA4MiwgNzksIDg1LCA4MiwgMTkzLCA2NSwgODIsIDc5LCA4NSwgNzgsIDY4LCA0NSwgODAsIDgyLCA3OSwgNzAsIAotICAgIDczLCA3NiwgNjksIDEyOCwgNjUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIDY1LCA4MiwgNzcsIDg5LCAxMjgsIDY1LCA4MiwgCi0gICAgNzcsIDc5LCA4NSwgODIsIDEyOCwgNjUsIDgyLCAyMDUsIDY1LCA4MiwgNzYsIDY1LCA4NSwgMTk5LCA2NSwgODIsIDc1LCAKLSAgICA4NCwgNzMsIDc1LCAyMDcsIDY1LCA4MiwgNzUsIDY1LCA2NiwgMTI4LCA2NSwgODIsIDc1LCA2NSwgNjUsIDc4LCA4NSwgCisgICAgNjUsIDY4LCA4MywgMTI4LCA2NSwgODIsIDgyLCA3OSwgODcsIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDY1LCA4MiwgODIsIDc5LCAKKyAgICA4NywgNzIsIDY5LCA2NSwgMTk2LCA2NSwgODIsIDgyLCA3OSwgODcsIDQ1LCA4NCwgNjUsIDczLCA3NiwgMTI4LCA2NSwgODIsIAorICAgIDgyLCA3MywgODYsIDczLCA3OCwgNzEsIDEyOCwgNjUsIDgyLCA4MiwgNzMsIDg2LCA2OSwgMTI4LCA2NSwgODIsIDgyLCA2NSwgCisgICAgODksIDEyOCwgNjUsIDgyLCA4MCwgNjksIDcxLCA3MSwgNzMsIDY1LCA4NCwgMjA3LCA2NSwgODIsIDc5LCA4NSwgODMsIDczLCAKKyAgICA3OCwgMTk5LCA2NSwgODIsIDc5LCA4NSwgODIsIDE5MywgNjUsIDgyLCA3OSwgODUsIDc4LCA2OCwgNDUsIDgwLCA4MiwgNzksIAorICAgIDcwLCA3MywgNzYsIDY5LCAxMjgsIDY1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCA2NSwgODIsIDc3LCA4OSwgMTI4LCA2NSwgCisgICAgODIsIDc3LCA3OSwgODUsIDgyLCAxMjgsIDY1LCA4MiwgMjA1LCA2NSwgODIsIDc2LCA2NSwgODUsIDE5OSwgNjUsIDgyLCAKKyAgICA3NSwgODQsIDczLCA3NSwgMjA3LCA2NSwgODIsIDc1LCA2NSwgNjYsIDEyOCwgNjUsIDgyLCA3NSwgNjUsIDY1LCA3OCwgODUsIAogICAgIDEyOCwgNjUsIDgyLCA3MywgODMsIDg0LCA2OSwgODIsIDY1LCAxMjgsIDY1LCA4MiwgNzMsIDgzLCA4NCwgNjksIDgyLCAKICAgICAxOTMsIDY1LCA4MiwgNzMsIDY5LCA4MywgMTI4LCA2NSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNjUsIAogICAgIDgyLCA3MSwgNzksIDgzLCA4OSwgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNjUsIDgyLCA3MSwgNzMsIDEyOCwgCiAgICAgNjUsIDgyLCA2OSwgODAsIDY1LCAxMjgsIDY1LCA4MiwgNjksIDY1LCAxMjgsIDY1LCA4MiwgNjgsIDcyLCA2NSwgODYsIDczLCAKLSAgICA4MywgNjUsIDgyLCA3MSwgNjUsIDEyOCwgNjUsIDgyLCA2NywgNzIsIDY1LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4MiwgNjcsIAotICAgIDcyLCA2NSwgNzMsIDc5LCAyMDYsIDY1LCA4MiwgNjcsIDcyLCA2NSwgNzMsIDE5NSwgNjUsIDgyLCA2NywgMjAwLCA2NSwgCi0gICAgODIsIDY3LCAxMjgsIDY1LCA4MiwgMTk1LCA2NSwgODIsIDY1LCA3NywgNjUsIDczLCAxOTUsIDY1LCA4MiwgNjUsIDY5LCAKLSAgICA2NSwgNjksIDEyOCwgNjUsIDgyLCA2NSwgNjksIDY1LCA0NSwgODUsIDEyOCwgNjUsIDgyLCA2NSwgNjksIDY1LCA0NSwgNzMsIAotICAgIDEyOCwgNjUsIDgyLCA2NSwgNjksIDY1LCA0NSwgNjksIDc5LCAxMjgsIDY1LCA4MiwgNjUsIDY5LCA2NSwgNDUsIDY5LCAKLSAgICAxMjgsIDY1LCA4MiwgNjUsIDY5LCA2NSwgNDUsIDY1LCAxMjgsIDY1LCA4MiwgNjUsIDY4LCAxMjgsIDY1LCA4MiwgNjUsIAotICAgIDE5NiwgNjUsIDgyLCA2NSwgNjYsIDczLCA2NywgNDUsIDczLCA3OCwgNjgsIDczLCAxOTUsIDY1LCA4MiwgNjUsIDY2LCA3MywgCi0gICAgNjUsIDIwNiwgNjUsIDgyLCA0NSwgODIsIDY1LCA3MiwgNzcsIDY1LCAyMDYsIDY1LCA4MiwgNDUsIDgyLCA2NSwgNzIsIDY5LCAKLSAgICA2OSwgNzcsIDEyOCwgNjUsIDgxLCA4NSwgNjUsIDgyLCA3MywgODUsIDgzLCAxMjgsIDY1LCA4MSwgODUsIDY1LCA3MCwgNzksIAotICAgIDgyLCA4NCwgNzMsIDgzLCAxMjgsIDY1LCA4MSwgODUsIDE5MywgNjUsIDgwLCA4NSwgMjA2LCA2NSwgODAsIDgyLCA3MywgCi0gICAgNzYsIDEyOCwgNjUsIDgwLCA4MCwgODIsIDc5LCA4OCwgNzMsIDc3LCA2NSwgODQsIDY5LCA3NiwgMjE3LCA2NSwgODAsIDgwLCAKLSAgICA4MiwgNzksIDg4LCA3MywgNzcsIDY1LCA4NCwgNjksIDEyOCwgNjUsIDgwLCA4MCwgODIsIDc5LCA2NSwgNjcsIDcyLCA2OSwgCi0gICAgMjExLCA2NSwgODAsIDgwLCA4MiwgNzksIDY1LCA2NywgNzIsIDEyOCwgNjUsIDgwLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDY1LCA4MCwgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA4MCwgNzksIAotICAgIDg0LCA3MiwgNjksIDgzLCAxMjgsIDY1LCA4MCwgNzksIDg0LCA3MiwgNjksIDc3LCA2NSwgMTI4LCA2NSwgODAsIDc5LCA4MywgCi0gICAgODQsIDgyLCA3OSwgODAsIDcyLCA2OSwgMTI4LCA2NSwgODAsIDc5LCA4MywgODQsIDgyLCA3OSwgNzAsIDc5LCA4MywgMTI4LCAKLSAgICA2NSwgODAsIDc5LCA4MywgODQsIDgyLCA3OSwgNzAsIDc5LCAyMTEsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA3MCwgCi0gICAgNzksIDIwMSwgNjUsIDgwLCA3OSwgNjgsIDY5LCA4OCwgNzMsIDY1LCAxMjgsIDY1LCA4MCwgNzksIDY4LCA2OSwgODIsIDc3LCAKLSAgICAxOTMsIDY1LCA4MCwgNzYsIDc5LCA4NSwgNzgsIDEyOCwgNjUsIDgwLCA3NiwgMjAxLCA2NSwgODAsIDIwNCwgNjUsIDgwLCAKLSAgICA3MywgNzgsIDEyOCwgNjUsIDgwLCA2OSwgODMsIDIwNywgNjUsIDgwLCA2NywgMTI4LCA2NSwgODAsIDY1LCA4MiwgODQsIAotICAgIDEyOCwgNjUsIDgwLCA2NSwgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgNjUsIDg5LCA2NSwgCi0gICAgMTI4LCA2NSwgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc4LCA4NSwgODMsIDg2LCA2NSwgODIsIAotICAgIDE5MywgNjUsIDc4LCA4NSwgNjgsIDY1LCA4NCwgODQsIDY1LCAxMjgsIDY1LCA3OCwgODUsIDY4LCA2NSwgODQsIDg0LCAKKyAgICA4MywgNjUsIDgyLCA3MSwgNjUsIDEyOCwgNjUsIDgyLCA2OCwgNzIsIDY1LCA2NywgNjUsIDc4LCA2OCwgODIsIDY1LCAxMjgsIAorICAgIDY1LCA4MiwgNjcsIDcyLCA2NSwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODIsIDY3LCA3MiwgNjUsIDczLCA3OSwgMjA2LCA2NSwgCisgICAgODIsIDY3LCA3MiwgNjUsIDczLCAxOTUsIDY1LCA4MiwgNjcsIDIwMCwgNjUsIDgyLCA2NywgMTI4LCA2NSwgODIsIDE5NSwgCisgICAgNjUsIDgyLCA2NSwgNzcsIDY1LCA3MywgMTk1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDY5LCAxMjgsIDY1LCA4MiwgNjUsIDY5LCAKKyAgICA2NSwgNDUsIDg1LCAxMjgsIDY1LCA4MiwgNjUsIDY5LCA2NSwgNDUsIDczLCAxMjgsIDY1LCA4MiwgNjUsIDY5LCA2NSwgNDUsIAorICAgIDY5LCA3OSwgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA2OSwgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA2NSwgCisgICAgMTI4LCA2NSwgODIsIDY1LCA2OCwgMTI4LCA2NSwgODIsIDY1LCAxOTYsIDY1LCA4MiwgNjUsIDY2LCA3MywgNjcsIDQ1LCAKKyAgICA3MywgNzgsIDY4LCA3MywgMTk1LCA2NSwgODIsIDY1LCA2NiwgNzMsIDY1LCAyMDYsIDY1LCA4MiwgNDUsIDgyLCA2NSwgNzIsIAorICAgIDc3LCA2NSwgMjA2LCA2NSwgODIsIDQ1LCA4MiwgNjUsIDcyLCA2OSwgNjksIDc3LCAxMjgsIDY1LCA4MSwgODUsIDY1LCA4MiwgCisgICAgNzMsIDg1LCA4MywgMTI4LCA2NSwgODEsIDg1LCA2NSwgNzAsIDc5LCA4MiwgODQsIDczLCA4MywgMTI4LCA2NSwgODEsIDg1LCAKKyAgICAxOTMsIDY1LCA4MCwgODUsIDIwNiwgNjUsIDgwLCA4MiwgNzMsIDc2LCAxMjgsIDY1LCA4MCwgODAsIDgyLCA3OSwgODgsIAorICAgIDczLCA3NywgNjUsIDg0LCA2OSwgNzYsIDIxNywgNjUsIDgwLCA4MCwgODIsIDc5LCA4OCwgNzMsIDc3LCA2NSwgODQsIDY5LCAKKyAgICAxMjgsIDY1LCA4MCwgODAsIDgyLCA3OSwgNjUsIDY3LCA3MiwgNjksIDIxMSwgNjUsIDgwLCA4MCwgODIsIDc5LCA2NSwgNjcsIAorICAgIDcyLCAxMjgsIDY1LCA4MCwgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODAsIDgwLCA3NiwgCisgICAgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgODAsIDc5LCA4NCwgNzIsIDY5LCA4MywgMTI4LCA2NSwgODAsIDc5LCAKKyAgICA4NCwgNzIsIDY5LCA3NywgNjUsIDEyOCwgNjUsIDgwLCA3OSwgODMsIDg0LCA4MiwgNzksIDgwLCA3MiwgNjksIDEyOCwgNjUsIAorICAgIDgwLCA3OSwgODMsIDg0LCA4MiwgNzksIDcwLCA3OSwgODMsIDEyOCwgNjUsIDgwLCA3OSwgODMsIDg0LCA4MiwgNzksIDcwLCAKKyAgICA3OSwgMjExLCA2NSwgODAsIDc5LCA4MywgODQsIDgyLCA3OSwgNzAsIDc5LCAyMDEsIDY1LCA4MCwgNzksIDY4LCA2OSwgODgsIAorICAgIDczLCA2NSwgMTI4LCA2NSwgODAsIDc5LCA2OCwgNjksIDgyLCA3NywgMTkzLCA2NSwgODAsIDc2LCA3OSwgODUsIDc4LCAKKyAgICAxMjgsIDY1LCA4MCwgNzYsIDIwMSwgNjUsIDgwLCAyMDQsIDY1LCA4MCwgNzMsIDc4LCAxMjgsIDY1LCA4MCwgNjksIDgzLCAKKyAgICAyMDcsIDY1LCA4MCwgNjcsIDEyOCwgNjUsIDgwLCA2NSwgODIsIDg0LCAxMjgsIDY1LCA4MCwgNjUsIDY1LCA4NCwgNzksIAorICAgIDEyOCwgNjUsIDc5LCA4NSwgMTI4LCA2NSwgNzksIDgyLCAxMjgsIDY1LCA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCA2NSwgCisgICAgODksIDY1LCAxMjgsIDY1LCA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzgsIDg1LCA4MywgODYsIDY1LCAKKyAgICA4MiwgMTkzLCA2NSwgNzgsIDg1LCA2OCwgNjUsIDg0LCA4NCwgNjUsIDEyOCwgNjUsIDc4LCA4NSwgNjgsIDY1LCA4NCwgODQsIAogICAgIDE5MywgNjUsIDc4LCA4NCwgNzMsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgCiAgICAgNzgsIDg0LCA3MywgNzcsIDc5LCA3OCwgODksIDQ1LCA1MCwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNzcsIDc5LCA3OCwgODksIAogICAgIDEyOCwgNjUsIDc4LCA4NCwgNzMsIDc3LCA3OSwgNzgsIDIxNywgNjUsIDc4LCA4NCwgNzMsIDc3LCA3OSwgNzgsIDczLCA2NSwgCkBAIC00NTMwLDE1MzA4ICs0OTE2LDE4MzQ4IEBACiAgICAgNzUsIDY5LCA3OCwgNzksIDc1LCA4OSwgNzYsIDczLCA4MywgNzcsIDY1LCAxMjgsIDY1LCA3OCwgODQsIDczLCA3MCwgNzksIAogICAgIDc4LCA3MywgNjUsIDEyOCwgNjUsIDc4LCA4NCwgNzMsIDY3LCA3NiwgNzksIDY3LCA3NSwgODcsIDczLCA4MywgNjksIDQ1LCAKICAgICA4MiwgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3OCwgODQsIDczLCA2NywgNzYsIDc5LCA2NywgNzUsIDg3LCA3MywgCi0gICAgODMsIDE5NywgNjUsIDc4LCA4NCwgNjksIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDc4LCA4NCwgNjksIDc4LCA3OCwgMTkzLCAKLSAgICA2NSwgNzgsIDg0LCA2NSwgODIsIDcxLCA3OSwgNzcsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDY1LCA3OCwgODMsIDg1LCAyMTgsIAotICAgIDY1LCA3OCwgODMsIDcyLCA2OSwgMTI4LCA2NSwgNzgsIDgwLCA2OSwgNjUsIDEyOCwgNjUsIDc4LCAyMDcsIDY1LCA3OCwgCi0gICAgNzgsIDg1LCA3MywgODQsIDIxNywgNjUsIDc4LCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNzgsIDc4LCAKLSAgICA2NSwgNjUsIDg1LCAxMjgsIDY1LCA3OCwgNzUsIDcyLCAxMjgsIDY1LCA3OCwgNzQsIDczLCAxMjgsIDY1LCA3OCwgNzIsIAotICAgIDg1LCAxMjgsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDgyLCAxMjgsIDY1LCA3OCwgNzEsIDg1LCA3MywgODMsIDcyLCA2OSwgCi0gICAgMTk2LCA2NSwgNzgsIDcxLCA4MywgODQsIDgyLCA3OSwgMjA1LCA2NSwgNzgsIDcxLCA4MiwgMjE3LCA2NSwgNzgsIDcxLCAKLSAgICA3NSwgNzIsIDY1LCA3OCwgNzUsIDcyLCA4NSwgMTI4LCA2NSwgNzgsIDcxLCA2OSwgMjEwLCA2NSwgNzgsIDcxLCA2OSwgNzYsIAotICAgIDEyOCwgNjUsIDc4LCA3MSwgNjksIDY4LCAxMjgsIDY1LCA3OCwgNjgsIDY1LCA4MCwgMTI4LCA2NSwgNzgsIDY3LCA3OSwgCi0gICAgODIsIDY1LCAxMjgsIDY1LCA3OCwgNjcsIDcyLCA3OSwgODIsIDEyOCwgNjUsIDc4LCA2NSwgODQsIDgyLCA3MywgNjcsIDcyLCAKLSAgICA3MywgODMsIDc3LCA2NSwgMTI4LCA2NSwgNzgsIDY1LCA4MCwgMTI4LCA2NSwgNzcsIDgwLCA4MywgMTI4LCA2NSwgNzcsIAotICAgIDgwLCA2OSwgODIsIDgzLCA2NSwgNzgsIDY4LCAxMjgsIDY1LCA3NywgNzksIDg1LCA3OCwgMjEyLCA2NSwgNzcsIDY5LCA4MiwgCi0gICAgNzMsIDY3LCA2NSwgODMsIDEyOCwgNjUsIDc3LCA2OSwgODIsIDczLCA2NywgNjUsIDIwNiwgNjUsIDc3LCA2NiwgODUsIDc2LCAKLSAgICA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzcsIDY2LCAxOTMsIDY1LCA3NywgNjUsIDgyLCAxMjgsIDY1LCA3NywgNjUsIAotICAgIDIxMCwgNjUsIDc3LCA2NSwgNzYsIDcxLCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA3NywgNjUsIDc2LCA3MSwgCi0gICAgNjUsIDc3LCAxMjgsIDY1LCA3NiwgODYsIDY5LCA3OSwgNzYsIDY1LCAyMTAsIDY1LCA3NiwgODUsIDc3LCAxMjgsIDY1LCAKLSAgICA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDY1LCA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCA4NCwgCi0gICAgNzMsIDc5LCAyMDYsIDY1LCA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCA2NSwgNzYsIDg0LCA2NSwgMTI4LCAKLSAgICA2NSwgNzYsIDgwLCA3MiwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNzIsIDE5MywgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgNjUsIAotICAgIDc4LCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDY1LCA3NiwgODAsIDY1LCAKLSAgICAxMjgsIDY1LCA3NiwgNzcsIDc5LCA4MywgMjEyLCA2NSwgNzYsIDc3LCAxMjgsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCAKLSAgICA3NiwgNzYsIDczLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIAotICAgIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDQ1LCA1MCwgMTI4LCA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCAxMjgsIDY1LCA3NiwgCi0gICAgNzMsIDcxLCA3OCwgNjksIDE5NiwgNjUsIDc2LCA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCA3OCwgMTI4LCAKLSAgICA2NSwgNzYsIDczLCA2OSwgMjA2LCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIDcwLCA2NSwgMTI4LCA2NSwgNzYsIAotICAgIDY5LCA4NSwgMjEyLCA2NSwgNzYsIDY5LCA4MiwgODQsIDEyOCwgNjUsIDc2LCA2OSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgCi0gICAgNjksIDc3LCA2NiwgNzMsIDY3LCAxMjgsIDY1LCA3NiwgNjksIDcwLCAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgNjksIAotICAgIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCAxOTcsIDY1LCA3NiwgNjUsIDgyLCAyMDUsIDY1LCA3NiwgNjUsIDgwLCA3MiwgCi0gICAgMTI4LCA2NSwgNzYsIDQ1LCA3NiwgNjUsIDc1LCA4NSwgNzgsIDY1LCAxMjgsIDY1LCA3NSwgODQsIDczLCA2OSwgODMsIDY5LCAKLSAgICA3NiwgODMsIDc1LCA2NSwgNjYsIDEyOCwgNjUsIDc1LCA4MywgNjUsIDEyOCwgNjUsIDc1LCA3MiwgNzcsIDczLCA3NywgNzMsIAotICAgIDE5NSwgNjUsIDc1LCA2NiwgNjUsIDIxMCwgNjUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3NSwgNjUsIDgyLCAxOTMsIAotICAgIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgODYsIDczLCA3NiwgNzMsIDIwMywgNjUsIDczLCA4NCwgCi0gICAgNzksIDIwNiwgNjUsIDczLCA4MiwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDY1LCA3MywgNzgsIDIxMywgNjUsIDczLCAKLSAgICA3OCwgNzgsIDEyOCwgNjUsIDczLCA3NiwgNzcsIDEyOCwgNjUsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIAotICAgIDcyLCA4NiwgODUsIDgzLCAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgCi0gICAgNzIsIDY1LCA3OCwgMTk5LCA2NSwgNzIsIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCAKLSAgICA3MSwgODUsIDc4LCA3MSwgMTI4LCA2NSwgNzEsIDc5LCA3MSwgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIAotICAgIDczLCA3OSwgNzgsIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgCi0gICAgNzgsIDEyOCwgNjUsIDcwLCA4NCwgNjksIDIxMCwgNjUsIDcwLCA4MywgNjUsIDY1LCA4MSwgMTI4LCA2NSwgNzAsIDgyLCAKLSAgICA3MywgNjcsIDY1LCAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDY5LCA2OCwgCi0gICAgMTI4LCA2NSwgNzAsIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCA3MCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDY1LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODksIDEyOCwgNjUsIDY5LCA4MywgNjcsIAotICAgIDg1LCA3NiwgNjUsIDgwLCA3MywgODUsIDgzLCAxMjgsIDY1LCA2OSwgODMsIDY3LCAxMjgsIDY1LCA2OSwgODMsIDEyOCwgCi0gICAgNjUsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDY1LCA2OSwgODIsIDEyOCwgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCAKLSAgICA3NiwgNjUsIDEyOCwgNjUsIDY5LCA3NiwgMTI4LCA2NSwgNjksIDc1LCAxMjgsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCAKLSAgICA2NSwgNjksIDcxLCAxMjgsIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDY5LCAxMjgsIAotICAgIDY1LCA2OSwgNjgsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNjgsIDEyOCwgNjUsIDY5LCA2NiwgCi0gICAgMTI4LCA2NSwgNjgsIDg2LCA2NSwgNzgsIDg0LCA2NSwgNzEsIDY5LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgNjcsIDY5LCAKLSAgICAxMjgsIDY1LCA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OCwgNjksIDE5OSwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgODMsIAotICAgIDY5LCAxOTYsIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDIxMSwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgCi0gICAgNjUsIDIwMywgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCAKLSAgICA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgCi0gICAgODQsIDE5NywgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIAotICAgIDE5NywgNjUsIDY3LCA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgCi0gICAgNjksIDY4LCA3MSwgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA2NSwgNjcsIDY3LCA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA4MCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIAotICAgIDc4LCA4NCwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAKLSAgICAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgMjEyLCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIAotICAgIDgzLCA3NywgNjUsIDIwNCwgNjUsIDY2LCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgCi0gICAgNjUsIDgzLCA3MywgNjUsIDIwNiwgNjUsIDY2LCA2NiwgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCAKLSAgICA2NiwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCA2NiwgMTc4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA2NSwgNjUsIDg5LCAxMjgsIDY1LCA2NSwgODcsIDEyOCwgNjUsIDY1LCA3OSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIAotICAgIDY1LCA2NSwgNjYsIDY1LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDUwLCAxMjgsIDY1LCA2NSwgCi0gICAgNDgsIDUxLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCAKLSAgICA2NSwgNDgsIDUwLCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU0LCAxMjgsIAotICAgIDY1LCA2NSwgNDgsIDUwLCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUxLCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTAsIAotICAgIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgCi0gICAgNDksIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTMsIDEyOCwgNjUsIDY1LCAKLSAgICA0OCwgNDksIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTAsIDEyOCwgNjUsIAotICAgIDY1LCA0OCwgNDksIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTcsIDEyOCwgCi0gICAgNjUsIDY1LCA0OCwgNDgsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCAKLSAgICA2NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIAotICAgIDQ4LCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NSwgCi0gICAgNDgsIDQ4LCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNDksIDEyOCwgNjUsIDQ4LCA1NSwgNDgsIDEyOCwgNjUsIDQ4LCAKLSAgICA1NCwgNTcsIDEyOCwgNjUsIDQ4LCA1NCwgNTYsIDEyOCwgNjUsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIAotICAgIDEyOCwgNjUsIDQ4LCA1NCwgNTMsIDEyOCwgNjUsIDQ4LCA1NCwgNTIsIDEyOCwgNjUsIDQ4LCA1NCwgNTEsIDEyOCwgNjUsIAotICAgIDQ4LCA1NCwgNTAsIDEyOCwgNjUsIDQ4LCA1NCwgNDksIDEyOCwgNjUsIDQ4LCA1NCwgNDgsIDEyOCwgNjUsIDQ4LCA1MywgCi0gICAgNTcsIDEyOCwgNjUsIDQ4LCA1MywgNTYsIDEyOCwgNjUsIDQ4LCA1MywgNTUsIDEyOCwgNjUsIDQ4LCA1MywgNTQsIDEyOCwgCi0gICAgNjUsIDQ4LCA1MywgNTMsIDEyOCwgNjUsIDQ4LCA1MywgNTIsIDEyOCwgNjUsIDQ4LCA1MywgNTEsIDEyOCwgNjUsIDQ4LCAKLSAgICA1MywgNTAsIDEyOCwgNjUsIDQ4LCA1MywgNDksIDEyOCwgNjUsIDQ4LCA1MywgNDgsIDEyOCwgNjUsIDQ4LCA1MiwgNTcsIAotICAgIDEyOCwgNjUsIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIDQ4LCA1MiwgNTUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIAotICAgIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgCi0gICAgNTIsIDUxLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCAKLSAgICA1MiwgNTAsIDEyOCwgNjUsIDQ4LCA1MiwgNDksIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIAotICAgIDQ4LCAxMjgsIDY1LCA0OCwgNTEsIDU3LCAxMjgsIDY1LCA0OCwgNTEsIDU2LCAxMjgsIDY1LCA0OCwgNTEsIDU1LCAxMjgsIAotICAgIDY1LCA0OCwgNTEsIDU0LCAxMjgsIDY1LCA0OCwgNTEsIDUzLCAxMjgsIDY1LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA0OCwgCi0gICAgNTEsIDUxLCAxMjgsIDY1LCA0OCwgNTEsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjUsIDQ4LCAKLSAgICA0OSwgNTIsIDY1LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNjUsIAotICAgIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDY1LCA0NSwgNjksIDg1LCAxMjgsIDQ1LCA4NSwgMjA1LCA0NSwgODAsIDcyLCA4MiwgCi0gICAgODUsIDEyOCwgNDUsIDc1LCA3MiwgODksIDg1LCAxOTYsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNDUsIDY4LCAKLSAgICA5MCwgODUsIDE5NiwgNDUsIDY3LCA3MiwgNjUsIDIxMCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIAorICAgIDgzLCA2OSwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNjcsIDc2LCA3OSwgNjcsIDc1LCA4NywgNzMsIDgzLCAxOTcsIDY1LCA3OCwgCisgICAgODQsIDY5LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3OCwgODQsIDY5LCA3OCwgNzgsIDE5MywgNjUsIDc4LCA4NCwgNjUsIDgyLCAKKyAgICA3MSwgNzksIDc3LCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA2NSwgNzgsIDgzLCA4NSwgMjE4LCA2NSwgNzgsIDgzLCA3MiwgNjksIAorICAgIDEyOCwgNjUsIDc4LCA4MCwgNjksIDY1LCAxMjgsIDY1LCA3OCwgMjA3LCA2NSwgNzgsIDc4LCA4NSwgNzMsIDg0LCAyMTcsIAorICAgIDY1LCA3OCwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDc4LCA3OCwgNjUsIDY1LCA4NSwgMTI4LCA2NSwgCisgICAgNzgsIDc1LCA3MiwgMTI4LCA2NSwgNzgsIDc0LCA3MywgMTI4LCA2NSwgNzgsIDcyLCA4NSwgMTI4LCA2NSwgNzgsIDcxLCAKKyAgICA4NSwgNzYsIDY1LCA4MiwgMTI4LCA2NSwgNzgsIDcxLCA4NSwgNzMsIDgzLCA3MiwgNjksIDE5NiwgNjUsIDc4LCA3MSwgODMsIAorICAgIDg0LCA4MiwgNzksIDIwNSwgNjUsIDc4LCA3MSwgODIsIDIxNywgNjUsIDc4LCA3MSwgNzYsIDY5LCA2OCwgMTI4LCA2NSwgCisgICAgNzgsIDcxLCA3NiwgNjksIDE5NiwgNjUsIDc4LCA3MSwgNzUsIDcyLCA2NSwgNzgsIDc1LCA3MiwgODUsIDEyOCwgNjUsIDc4LCAKKyAgICA3MSwgNjksIDIxMCwgNjUsIDc4LCA3MSwgNjksIDc2LCAxMjgsIDY1LCA3OCwgNzEsIDY5LCA2OCwgMTI4LCA2NSwgNzgsIAorICAgIDY4LCA2NSwgODAsIDEyOCwgNjUsIDc4LCA2NywgNzksIDgyLCA2NSwgMTI4LCA2NSwgNzgsIDY3LCA3MiwgNzksIDgyLCAKKyAgICAxMjgsIDY1LCA3OCwgNjUsIDg0LCA4MiwgNzMsIDY3LCA3MiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNjUsIDc4LCA2NSwgODAsIAorICAgIDEyOCwgNjUsIDc3LCA4MCwgODMsIDEyOCwgNjUsIDc3LCA4MCwgNzIsIDc5LCA4MiwgNjUsIDEyOCwgNjUsIDc3LCA4MCwgCisgICAgNjksIDgyLCA4MywgNjUsIDc4LCA2OCwgMTI4LCA2NSwgNzcsIDgwLCA2OSwgODIsIDgzLCA2NSwgNzgsIDE5NiwgNjUsIDc3LCAKKyAgICA3OSwgODUsIDc4LCAyMTIsIDY1LCA3NywgNjksIDgyLCA3MywgNjcsIDY1LCA4MywgMTI4LCA2NSwgNzcsIDY5LCA4MiwgNzMsIAorICAgIDY3LCA2NSwgMjA2LCA2NSwgNzcsIDY2LCA4NSwgNzYsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NywgNjYsIDE5MywgCisgICAgNjUsIDc3LCA2NiwgMTI4LCA2NSwgNzcsIDY1LCA4MiwgMTI4LCA2NSwgNzcsIDY1LCAyMTAsIDY1LCA3NywgNjUsIDc2LCAKKyAgICA3MSwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNzcsIDY1LCA3NiwgNzEsIDY1LCA3NywgMTI4LCA2NSwgNzYsIAorICAgIDg2LCA2OSwgNzksIDc2LCA2NSwgMjEwLCA2NSwgNzYsIDg1LCA3NywgMTI4LCA2NSwgNzYsIDg0LCA2OSwgODIsIDc4LCA2NSwgCisgICAgODQsIDczLCA4NiwgMTk3LCA2NSwgNzYsIDg0LCA2OSwgODIsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNzYsIDg0LCAKKyAgICA2OSwgODIsIDc4LCA2NSwgODQsIDczLCA3OCwgNzEsIDEyOCwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCA3MywgCisgICAgNzgsIDE5OSwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCA2OSwgMTI4LCA2NSwgNzYsIDg0LCA2OSwgODIsIDc4LCAKKyAgICA2NSwgODQsIDE5NywgNjUsIDc2LCA4NCwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMjgsIDY1LCA3NiwgODAsIAorICAgIDcyLCAxOTMsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgCisgICAgNjUsIDY1LCA3OCwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgMTI4LCA2NSwgNzYsIDc3LCA3OSwgODMsIDIxMiwgNjUsIDc2LCAKKyAgICA3NywgMTI4LCA2NSwgNzYsIDc2LCA3OSwgMTI4LCA2NSwgNzYsIDc2LCA3MywgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIAorICAgIDc2LCA3NiwgMjAxLCA2NSwgNzYsIDc2LCA2NSwgMjAwLCA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCA0NSwgNTAsIDEyOCwgCisgICAgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgMTI4LCA2NSwgNzYsIDczLCA3MSwgNzgsIDY5LCAxOTYsIDY1LCA3NiwgNzMsIDcwLCAKKyAgICA4NSwgMTI4LCA2NSwgNzYsIDczLCA2OSwgNzgsIDEyOCwgNjUsIDc2LCA3MywgNjksIDIwNiwgNjUsIDc2LCA3MSwgNzMsIAorICAgIDIxOCwgNjUsIDc2LCA3MCwgNjUsIDEyOCwgNjUsIDc2LCA2OSwgODUsIDIxMiwgNjUsIDc2LCA2OSwgODIsIDg0LCAxMjgsIAorICAgIDY1LCA3NiwgNjksIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDY5LCA3NywgNjYsIDczLCA2NywgMTI4LCA2NSwgNzYsIDY5LCA3MCwgCisgICAgMTI4LCA2NSwgNzYsIDY2LCA2NSwgNzgsIDczLCA2NSwgMjA2LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDY5LCAxMjgsIDY1LCAKKyAgICA3NiwgNjUsIDg5LCA3MiwgMTk3LCA2NSwgNzYsIDY1LCA4MiwgMjA1LCA2NSwgNzYsIDY1LCA4MCwgNzIsIDEyOCwgNjUsIAorICAgIDc2LCA0NSwgNzYsIDY1LCA3NSwgODUsIDc4LCA2NSwgMTI4LCA2NSwgNzUsIDg0LCA3MywgNjksIDgzLCA2OSwgNzYsIDgzLCAKKyAgICA3NSwgNjUsIDY2LCAxMjgsIDY1LCA3NSwgODMsIDY1LCAxMjgsIDY1LCA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAxOTUsIAorICAgIDY1LCA3NSwgNjYsIDY1LCAyMTAsIDY1LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzUsIDY1LCA4MiwgMTkzLCA2NSwgCisgICAgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDg2LCA3MywgNzYsIDczLCAyMDMsIDY1LCA3MywgODQsIDc5LCAKKyAgICAyMDYsIDY1LCA3MywgODIsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA2NSwgNzMsIDgyLCA4MCwgNzYsIDY1LCA3OCwgCisgICAgMTk3LCA2NSwgNzMsIDc4LCAyMTMsIDY1LCA3MywgNzgsIDc4LCAxMjgsIDY1LCA3MywgNzYsIDc3LCAxMjgsIDY1LCA3MywgCisgICAgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDczLCA3MiwgODYsIDg1LCA4MywgMTI4LCA2NSwgNzIsIDgzLCA2OCwgNjUsIAorICAgIDEyOCwgNjUsIDcyLCA4MywgNjUsIDEyOCwgNjUsIDcyLCA3OSwgMjA1LCA2NSwgNzIsIDY1LCA3OCwgMTk5LCA2NSwgNzIsIAorICAgIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCA3MSwgODUsIDc4LCA3MSwgMTI4LCA2NSwgCisgICAgNzEsIDc5LCA3MSwgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDcxLCAKKyAgICA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgNzgsIDgzLCAyMTIsIDY1LCA3MSwgNjUsIAorICAgIDczLCA3OCwgMTI4LCA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzAsIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgCisgICAgODIsIDczLCA2NywgNjUsIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIAorICAgIDY4LCAxMjgsIDY1LCA3MCwgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgCisgICAgNzksIDIwNiwgNjUsIDcwLCA3MCwgNzMsIDIxNiwgNjUsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCAKKyAgICA4OSwgMTI4LCA2NSwgNjksIDgzLCA2NywgODUsIDc2LCA2NSwgODAsIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgNjcsIAorICAgIDEyOCwgNjUsIDY5LCA4MywgMTI4LCA2NSwgNjksIDgyLCA3MywgNjUsIDIwNCwgNjUsIDY5LCA4MiwgMTI4LCA2NSwgNjksIAorICAgIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NSwgNjksIDc2LCAxMjgsIDY1LCA2OSwgNzUsIDEyOCwgCisgICAgNjUsIDY5LCA3MSwgNjksIDY1LCAyMDYsIDY1LCA2OSwgNzEsIDEyOCwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDY1LCA2OSwgNjksIDEyOCwgNjUsIDY5LCA2OCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIAorICAgIDY5LCA2OCwgMTI4LCA2NSwgNjksIDY2LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgODQsIDY1LCA3MSwgNjksIDEyOCwgCisgICAgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY4LCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCAyMDYsIDY1LCAKKyAgICA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OCwgNjksIDE5OSwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgODMsIDY5LCAxOTYsIAorICAgIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDIxMSwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgNjUsIDIwMywgCisgICAgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgNjksIAorICAgIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgODQsIDE5NywgCisgICAgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIDE5NywgNjUsIDY3LCAKKyAgICA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgNjksIDY4LCA3MSwgCisgICAgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDY3LCAKKyAgICA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDc5LCA3NywgNzcsIDc5LCA2OCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDY1LCA2NywgNjcsIDY5LCA4MCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgNDUsIDgzLCA4NCwgNjUsIDY3LCAKKyAgICA2NywgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgCisgICAgMjEyLCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIDgzLCA3NywgNjUsIDIwNCwgNjUsIDY2LCAKKyAgICA4NSwgNzgsIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgNjUsIDgzLCA3MywgNjUsIDIwNiwgNjUsIAorICAgIDY2LCA2NiwgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA2NiwgNjUsIDcwLCA3MywgNzYsIDczLCAKKyAgICAxMjgsIDY1LCA2NiwgMTc4LCA2NSwgNjYsIDQ5LCA1NywgNDksIDEyOCwgNjUsIDY2LCA0OSwgNTYsIDU2LCAxMjgsIDY1LCAKKyAgICA2NiwgNDksIDU2LCA0OCwgMTI4LCA2NSwgNjYsIDQ5LCA1NSwgNDksIDEyOCwgNjUsIDY2LCA0OSwgNTQsIDUyLCAxMjgsIAorICAgIDY1LCA2NiwgNDksIDUxLCA0OSwgNjYsIDEyOCwgNjUsIDY2LCA0OSwgNTEsIDQ5LCA2NSwgMTI4LCA2NSwgNjYsIDQ5LCA1MCwgCisgICAgNTEsIDEyOCwgNjUsIDY2LCA0OSwgNTAsIDUwLCAxMjgsIDY1LCA2NiwgNDksIDUwLCA0OCwgMTI4LCA2NSwgNjYsIDQ5LCAKKyAgICA0OSwgNTYsIDEyOCwgNjUsIDY2LCA0OCwgNTYsIDU1LCAxMjgsIDY1LCA2NiwgNDgsIDU2LCA1NCwgMTI4LCA2NSwgNjYsIAorICAgIDQ4LCA1NiwgNTMsIDEyOCwgNjUsIDY2LCA0OCwgNTYsIDUwLCAxMjgsIDY1LCA2NiwgNDgsIDU2LCA0OSwgMTI4LCA2NSwgCisgICAgNjYsIDQ4LCA1NiwgNDgsIDEyOCwgNjUsIDY2LCA0OCwgNTUsIDU3LCAxMjgsIDY1LCA2NiwgNDgsIDU1LCA1NiwgMTI4LCAKKyAgICA2NSwgNjYsIDQ4LCA1NSwgNTUsIDEyOCwgNjUsIDY2LCA0OCwgNTUsIDU0LCAxMjgsIDY1LCA2NiwgNDgsIDU1LCA1MiwgCisgICAgMTI4LCA2NSwgNjYsIDQ4LCA1NSwgNTEsIDEyOCwgNjUsIDY2LCA0OCwgNTUsIDQ4LCAxMjgsIDY1LCA2NiwgNDgsIDU0LCAKKyAgICA1NywgMTI4LCA2NSwgNjYsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDY2LCA0OCwgNTQsIDU0LCAxMjgsIDY1LCA2NiwgNDgsIAorICAgIDU0LCA1MywgMTI4LCA2NSwgNjYsIDQ4LCA1NCwgNDksIDEyOCwgNjUsIDY2LCA0OCwgNTQsIDQ4LCAxMjgsIDY1LCA2NiwgCisgICAgNDgsIDUzLCA1NywgMTI4LCA2NSwgNjYsIDQ4LCA1MywgNTYsIDEyOCwgNjUsIDY2LCA0OCwgNTMsIDU1LCAxMjgsIDY1LCAKKyAgICA2NiwgNDgsIDUzLCA1NCwgMTI4LCA2NSwgNjYsIDQ4LCA1MywgNTMsIDEyOCwgNjUsIDY2LCA0OCwgNTMsIDUyLCAxMjgsIAorICAgIDY1LCA2NiwgNDgsIDUzLCA1MSwgMTI4LCA2NSwgNjYsIDQ4LCA1MywgNDksIDEyOCwgNjUsIDY2LCA0OCwgNTMsIDQ4LCAKKyAgICAxMjgsIDY1LCA2NiwgNDgsIDUyLCA1NywgMTI4LCA2NSwgNjYsIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIDY2LCA0OCwgNTIsIAorICAgIDU1LCAxMjgsIDY1LCA2NiwgNDgsIDUyLCA1NCwgMTI4LCA2NSwgNjYsIDQ4LCA1MiwgNTMsIDEyOCwgNjUsIDY2LCA0OCwgCisgICAgNTIsIDUyLCAxMjgsIDY1LCA2NiwgNDgsIDUyLCA0OSwgMTI4LCA2NSwgNjYsIDQ4LCA1MiwgNDgsIDEyOCwgNjUsIDY2LCAKKyAgICA0OCwgNTEsIDU3LCAxMjgsIDY1LCA2NiwgNDgsIDUxLCA1NiwgMTI4LCA2NSwgNjYsIDQ4LCA1MSwgNTUsIDEyOCwgNjUsIAorICAgIDY2LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA2NiwgNDgsIDUxLCA0OSwgMTI4LCA2NSwgNjYsIDQ4LCA1MSwgNDgsIDEyOCwgCisgICAgNjUsIDY2LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCA2NiwgNDgsIDUwLCA1NiwgMTI4LCA2NSwgNjYsIDQ4LCA1MCwgNTUsIAorICAgIDEyOCwgNjUsIDY2LCA0OCwgNTAsIDU0LCAxMjgsIDY1LCA2NiwgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjYsIDQ4LCA1MCwgCisgICAgNTEsIDc3LCAxMjgsIDY1LCA2NiwgNDgsIDUwLCA1MSwgMTI4LCA2NSwgNjYsIDQ4LCA1MCwgNTAsIDc3LCAxMjgsIDY1LCAKKyAgICA2NiwgNDgsIDUwLCA1MCwgNzAsIDEyOCwgNjUsIDY2LCA0OCwgNTAsIDUwLCAxMjgsIDY1LCA2NiwgNDgsIDUwLCA0OSwgNzcsIAorICAgIDEyOCwgNjUsIDY2LCA0OCwgNTAsIDQ5LCA3MCwgMTI4LCA2NSwgNjYsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY2LCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDY1LCA2NiwgNDgsIDQ5LCA1NSwgMTI4LCA2NSwgNjYsIDQ4LCA0OSwgNTQsIDEyOCwgNjUsIDY2LCAKKyAgICA0OCwgNDksIDUxLCAxMjgsIDY1LCA2NiwgNDgsIDQ5LCA0OSwgMTI4LCA2NSwgNjYsIDQ4LCA0OSwgNDgsIDEyOCwgNjUsIAorICAgIDY2LCA0OCwgNDgsIDU3LCAxMjgsIDY1LCA2NiwgNDgsIDQ4LCA1NiwgMTI4LCA2NSwgNjYsIDQ4LCA0OCwgNTUsIDEyOCwgCisgICAgNjUsIDY2LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NiwgNDgsIDQ4LCA1MywgMTI4LCA2NSwgNjYsIDQ4LCA0OCwgNTIsIAorICAgIDEyOCwgNjUsIDY2LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NiwgNDgsIDQ4LCA1MCwgMTI4LCA2NSwgNjYsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNjUsIDY1LCA4OSwgNzMsIDc4LCAxMjgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCAKKyAgICA2NSwgODksIDEyOCwgNjUsIDY1LCA4NywgMTI4LCA2NSwgNjUsIDc5LCAxMjgsIDY1LCA2NSwgNzQsIDEyOCwgNjUsIDY1LCAKKyAgICA2NiwgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIAorICAgIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNTAsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTQsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNTAsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTEsIDEyOCwgNjUsIAorICAgIDY1LCA0OCwgNTAsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDgsIDEyOCwgCisgICAgNjUsIDY1LCA0OCwgNDksIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTUsIAorICAgIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgCisgICAgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNDksIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NywgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA0OCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDY1LCAKKyAgICAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIAorICAgIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDgsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA0OSwgMTI4LCA2NSwgNTYsIDQ4LCA1NSwgMTI4LCA2NSwgNTYsIDQ4LCAKKyAgICA1NCwgMTI4LCA2NSwgNTYsIDQ4LCA1MywgMTI4LCA2NSwgNTYsIDQ4LCA1MiwgMTI4LCA2NSwgNTYsIDQ4LCA1MSwgMTI4LCAKKyAgICA2NSwgNTYsIDQ4LCA1MCwgMTI4LCA2NSwgNTYsIDQ4LCA0OSwgMTI4LCA2NSwgNTYsIDQ4LCA0OCwgMTI4LCA2NSwgNTUsIAorICAgIDUxLCAxNzgsIDY1LCA1NSwgNTAsIDE4MiwgNjUsIDU1LCA0OSwgMTgzLCA2NSwgNTUsIDQ5LCAxODEsIDY1LCA1NSwgNDksIAorICAgIDE4MCwgNjUsIDU1LCA0OSwgMTc5LCA2NSwgNTUsIDQ5LCAxNzgsIDY1LCA1NSwgNDksIDE3NywgNjUsIDU1LCA0OSwgMTc2LCAKKyAgICA2NSwgNTUsIDQ4LCA1NywgNDUsIDE4MiwgNjUsIDU1LCA0OCwgNTcsIDQ1LCAxODAsIDY1LCA1NSwgNDgsIDU3LCA0NSwgCisgICAgMTc5LCA2NSwgNTUsIDQ4LCA1NywgNDUsIDE3OCwgNjUsIDU1LCA0OCwgMTg1LCA2NSwgNTUsIDQ4LCAxODQsIDY1LCA1NSwgCisgICAgNDgsIDE4MywgNjUsIDU1LCA0OCwgMTgyLCA2NSwgNTUsIDQ4LCAxODEsIDY1LCA1NSwgNDgsIDE4MCwgNjUsIDU1LCA0OCwgCisgICAgMTc5LCA2NSwgNTUsIDQ4LCAxNzgsIDY1LCA1NSwgNDgsIDE3NywgNjUsIDU0LCA1NCwgNTIsIDEyOCwgNjUsIDU0LCA1NCwgCisgICAgNTEsIDEyOCwgNjUsIDU0LCA1NCwgNTAsIDEyOCwgNjUsIDU0LCA1NCwgNDksIDEyOCwgNjUsIDU0LCA1NCwgNDgsIDEyOCwgCisgICAgNjUsIDU0LCA1MywgNTcsIDEyOCwgNjUsIDU0LCA1MywgNTYsIDEyOCwgNjUsIDU0LCA1MywgNTUsIDEyOCwgNjUsIDU0LCAKKyAgICA1MywgNTQsIDEyOCwgNjUsIDU0LCA1MywgNTMsIDEyOCwgNjUsIDU0LCA1MywgNTIsIDEyOCwgNjUsIDU0LCA1MywgNTEsIAorICAgIDEyOCwgNjUsIDU0LCA1MywgNTAsIDEyOCwgNjUsIDU0LCA1MywgNDksIDEyOCwgNjUsIDU0LCA1MiwgNTcsIDEyOCwgNjUsIAorICAgIDU0LCA1MiwgNTYsIDEyOCwgNjUsIDU0LCA1MiwgNTQsIDEyOCwgNjUsIDU0LCA1MiwgNTMsIDEyOCwgNjUsIDU0LCA1MiwgCisgICAgNTIsIDEyOCwgNjUsIDU0LCA1MiwgNTEsIDEyOCwgNjUsIDU0LCA1MiwgNTAsIDEyOCwgNjUsIDU0LCA1MiwgNDgsIDEyOCwgCisgICAgNjUsIDU0LCA1MSwgNTYsIDEyOCwgNjUsIDU0LCA1MSwgNTUsIDEyOCwgNjUsIDU0LCA1MSwgNTIsIDEyOCwgNjUsIDU0LCAKKyAgICA1MCwgNTcsIDEyOCwgNjUsIDU0LCA1MCwgNTYsIDEyOCwgNjUsIDU0LCA1MCwgNTUsIDEyOCwgNjUsIDU0LCA1MCwgNTQsIAorICAgIDEyOCwgNjUsIDU0LCA1MCwgNTIsIDEyOCwgNjUsIDU0LCA1MCwgNTEsIDEyOCwgNjUsIDU0LCA1MCwgNTAsIDEyOCwgNjUsIAorICAgIDU0LCA1MCwgNDksIDEyOCwgNjUsIDU0LCA1MCwgNDgsIDEyOCwgNjUsIDU0LCA0OSwgNTcsIDEyOCwgNjUsIDU0LCA0OSwgCisgICAgNTYsIDEyOCwgNjUsIDU0LCA0OSwgNTUsIDEyOCwgNjUsIDU0LCA0OSwgNTQsIDEyOCwgNjUsIDU0LCA0OSwgNTMsIDEyOCwgCisgICAgNjUsIDU0LCA0OSwgNTIsIDEyOCwgNjUsIDU0LCA0OSwgNTEsIDEyOCwgNjUsIDU0LCA0OSwgNTAsIDEyOCwgNjUsIDU0LCAKKyAgICA0OSwgNDksIDEyOCwgNjUsIDU0LCA0OSwgNDgsIDEyOCwgNjUsIDU0LCA0OCwgNTcsIDEyOCwgNjUsIDU0LCA0OCwgNTYsIAorICAgIDEyOCwgNjUsIDU0LCA0OCwgNTQsIDEyOCwgNjUsIDU0LCA0OCwgNTIsIDEyOCwgNjUsIDU0LCA0OCwgNTEsIDEyOCwgNjUsIAorICAgIDU0LCA0OCwgNTAsIDEyOCwgNjUsIDU0LCA0OCwgNDksIDEyOCwgNjUsIDU0LCA0OCwgNDgsIDEyOCwgNjUsIDUzLCA1NywgCisgICAgNTYsIDEyOCwgNjUsIDUzLCA1NywgNTQsIDEyOCwgNjUsIDUzLCA1NywgNTMsIDEyOCwgNjUsIDUzLCA1NywgNTIsIDEyOCwgCisgICAgNjUsIDUzLCA1NywgNTAsIDEyOCwgNjUsIDUzLCA1NywgNDksIDEyOCwgNjUsIDUzLCA1NiwgNTcsIDEyOCwgNjUsIDUzLCAKKyAgICA1NiwgNTYsIDEyOCwgNjUsIDUzLCA1NiwgNTUsIDEyOCwgNjUsIDUzLCA1NiwgNTQsIDEyOCwgNjUsIDUzLCA1NiwgNTMsIAorICAgIDEyOCwgNjUsIDUzLCA1NiwgNTIsIDEyOCwgNjUsIDUzLCA1NiwgNTEsIDEyOCwgNjUsIDUzLCA1NiwgNTAsIDEyOCwgNjUsIAorICAgIDUzLCA1NiwgNDksIDEyOCwgNjUsIDUzLCA1NiwgNDgsIDEyOCwgNjUsIDUzLCA1NSwgNTcsIDEyOCwgNjUsIDUzLCA1NSwgCisgICAgNTYsIDEyOCwgNjUsIDUzLCA1NSwgNTUsIDEyOCwgNjUsIDUzLCA1NSwgNTQsIDEyOCwgNjUsIDUzLCA1NSwgNTMsIDEyOCwgCisgICAgNjUsIDUzLCA1NSwgNTIsIDEyOCwgNjUsIDUzLCA1NSwgNTEsIDEyOCwgNjUsIDUzLCA1NSwgNTAsIDEyOCwgNjUsIDUzLCAKKyAgICA1NSwgNDksIDEyOCwgNjUsIDUzLCA1NSwgNDgsIDEyOCwgNjUsIDUzLCA1NCwgNTcsIDEyOCwgNjUsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjUsIDUzLCA1NCwgNTQsIDEyOCwgNjUsIDUzLCA1NCwgNTMsIDEyOCwgNjUsIDUzLCA1NCwgNTIsIDEyOCwgNjUsIAorICAgIDUzLCA1NCwgNTEsIDEyOCwgNjUsIDUzLCA1MywgNTcsIDEyOCwgNjUsIDUzLCA1MywgNTUsIDEyOCwgNjUsIDUzLCA1MywgCisgICAgNTQsIDEyOCwgNjUsIDUzLCA1MywgNTMsIDEyOCwgNjUsIDUzLCA1MywgNTIsIDEyOCwgNjUsIDUzLCA1MywgNTEsIDEyOCwgCisgICAgNjUsIDUzLCA1MywgNTAsIDEyOCwgNjUsIDUzLCA1MywgNDksIDEyOCwgNjUsIDUzLCA1MywgNDgsIDEyOCwgNjUsIDUzLCAKKyAgICA1MiwgNTcsIDEyOCwgNjUsIDUzLCA1MiwgNTYsIDEyOCwgNjUsIDUzLCA1MiwgNTUsIDEyOCwgNjUsIDUzLCA1MiwgNTMsIAorICAgIDEyOCwgNjUsIDUzLCA1MiwgNTAsIDEyOCwgNjUsIDUzLCA1MiwgNDksIDEyOCwgNjUsIDUzLCA1MiwgNDgsIDEyOCwgNjUsIAorICAgIDUzLCA1MSwgNTcsIDEyOCwgNjUsIDUzLCA1MSwgNTYsIDEyOCwgNjUsIDUzLCA1MSwgNTUsIDEyOCwgNjUsIDUzLCA1MSwgCisgICAgNTQsIDEyOCwgNjUsIDUzLCA1MSwgNTMsIDEyOCwgNjUsIDUzLCA1MSwgNTIsIDEyOCwgNjUsIDUzLCA1MSwgNTAsIDEyOCwgCisgICAgNjUsIDUzLCA1MSwgNDksIDEyOCwgNjUsIDUzLCA1MSwgNDgsIDEyOCwgNjUsIDUzLCA1MCwgNTcsIDEyOCwgNjUsIDUzLCAKKyAgICA1MCwgNTYsIDEyOCwgNjUsIDUzLCA1MCwgNTUsIDEyOCwgNjUsIDUzLCA1MCwgNTQsIDEyOCwgNjUsIDUzLCA1MCwgNTMsIAorICAgIDEyOCwgNjUsIDUzLCA1MCwgNTIsIDEyOCwgNjUsIDUzLCA1MCwgNTEsIDEyOCwgNjUsIDUzLCA1MCwgNTAsIDEyOCwgNjUsIAorICAgIDUzLCA1MCwgNDksIDEyOCwgNjUsIDUzLCA1MCwgNDgsIDEyOCwgNjUsIDUzLCA0OSwgNTcsIDEyOCwgNjUsIDUzLCA0OSwgCisgICAgNTYsIDEyOCwgNjUsIDUzLCA0OSwgNTUsIDEyOCwgNjUsIDUzLCA0OSwgNTQsIDEyOCwgNjUsIDUzLCA0OSwgNTMsIDEyOCwgCisgICAgNjUsIDUzLCA0OSwgNTIsIDEyOCwgNjUsIDUzLCA0OSwgNTEsIDEyOCwgNjUsIDUzLCA0OSwgNTAsIDEyOCwgNjUsIDUzLCAKKyAgICA0OSwgNDksIDEyOCwgNjUsIDUzLCA0OSwgNDgsIDEyOCwgNjUsIDUzLCA0OCwgNTcsIDEyOCwgNjUsIDUzLCA0OCwgNTYsIAorICAgIDEyOCwgNjUsIDUzLCA0OCwgNTUsIDEyOCwgNjUsIDUzLCA0OCwgNTQsIDEyOCwgNjUsIDUzLCA0OCwgNTMsIDEyOCwgNjUsIAorICAgIDUzLCA0OCwgNTIsIDEyOCwgNjUsIDUzLCA0OCwgNTEsIDEyOCwgNjUsIDUzLCA0OCwgNTAsIDEyOCwgNjUsIDUzLCA0OCwgCisgICAgNDksIDEyOCwgNjUsIDUyLCA1NywgNTUsIDEyOCwgNjUsIDUyLCA1NywgNTQsIDEyOCwgNjUsIDUyLCA1NywgNTMsIDEyOCwgCisgICAgNjUsIDUyLCA1NywgNTIsIDEyOCwgNjUsIDUyLCA1NywgNTEsIDEyOCwgNjUsIDUyLCA1NywgNTAsIDEyOCwgNjUsIDUyLCAKKyAgICA1NywgNDksIDEyOCwgNjUsIDUyLCA1NywgNDgsIDEyOCwgNjUsIDUyLCA1NiwgNTcsIDEyOCwgNjUsIDUyLCA1NiwgNTYsIAorICAgIDEyOCwgNjUsIDUyLCA1NiwgNTUsIDEyOCwgNjUsIDUyLCA1NiwgNTQsIDEyOCwgNjUsIDUyLCA1NiwgNTMsIDEyOCwgNjUsIAorICAgIDUyLCA1NiwgNTIsIDEyOCwgNjUsIDUyLCA1NiwgNTEsIDEyOCwgNjUsIDUyLCA1NiwgNTAsIDEyOCwgNjUsIDUyLCA1NiwgCisgICAgNDksIDEyOCwgNjUsIDUyLCA1NiwgNDgsIDEyOCwgNjUsIDUyLCA1NSwgNTcsIDEyOCwgNjUsIDUyLCA1NSwgNTYsIDEyOCwgCisgICAgNjUsIDUyLCA1NSwgNTUsIDEyOCwgNjUsIDUyLCA1NSwgNTQsIDEyOCwgNjUsIDUyLCA1NSwgNTMsIDEyOCwgNjUsIDUyLCAKKyAgICA1NSwgNTIsIDEyOCwgNjUsIDUyLCA1NSwgNTEsIDEyOCwgNjUsIDUyLCA1NSwgNTAsIDEyOCwgNjUsIDUyLCA1NSwgNDksIAorICAgIDEyOCwgNjUsIDUyLCA1NSwgNDgsIDEyOCwgNjUsIDUyLCA1NCwgNTcsIDEyOCwgNjUsIDUyLCA1NCwgNTYsIDEyOCwgNjUsIAorICAgIDUyLCA1NCwgNTUsIDEyOCwgNjUsIDUyLCA1NCwgNTQsIDEyOCwgNjUsIDUyLCA1NCwgNTMsIDEyOCwgNjUsIDUyLCA1NCwgCisgICAgNTIsIDEyOCwgNjUsIDUyLCA1NCwgNTEsIDEyOCwgNjUsIDUyLCA1NCwgNTAsIDEyOCwgNjUsIDUyLCA1NCwgNDksIDEyOCwgCisgICAgNjUsIDUyLCA1NCwgNDgsIDEyOCwgNjUsIDUyLCA1MywgNTcsIDEyOCwgNjUsIDUyLCA1MywgNTYsIDEyOCwgNjUsIDUyLCAKKyAgICA1MywgNTUsIDY1LCAxMjgsIDY1LCA1MiwgNTMsIDU1LCAxMjgsIDY1LCA1MiwgNTMsIDU0LCAxMjgsIDY1LCA1MiwgNTMsIAorICAgIDUzLCAxMjgsIDY1LCA1MiwgNTMsIDUyLCAxMjgsIDY1LCA1MiwgNTMsIDUxLCAxMjgsIDY1LCA1MiwgNTMsIDUwLCAxMjgsIAorICAgIDY1LCA1MiwgNTMsIDQ5LCAxMjgsIDY1LCA1MiwgNTMsIDQ4LCA2NSwgMTI4LCA2NSwgNTIsIDUzLCA0OCwgMTI4LCA2NSwgCisgICAgNTIsIDUyLCA1NywgMTI4LCA2NSwgNTIsIDUyLCA1NiwgMTI4LCA2NSwgNTIsIDUyLCA1NSwgMTI4LCA2NSwgNTIsIDUyLCAKKyAgICA1NCwgMTI4LCA2NSwgNTIsIDUyLCA1MywgMTI4LCA2NSwgNTIsIDUyLCA1MiwgMTI4LCA2NSwgNTIsIDUyLCA1MSwgMTI4LCAKKyAgICA2NSwgNTIsIDUyLCA1MCwgMTI4LCA2NSwgNTIsIDUyLCA0OSwgMTI4LCA2NSwgNTIsIDUyLCA0OCwgMTI4LCA2NSwgNTIsIAorICAgIDUxLCA1NywgMTI4LCA2NSwgNTIsIDUxLCA1NiwgMTI4LCA2NSwgNTIsIDUxLCA1NSwgMTI4LCA2NSwgNTIsIDUxLCA1NCwgCisgICAgMTI4LCA2NSwgNTIsIDUxLCA1MywgMTI4LCA2NSwgNTIsIDUxLCA1MiwgMTI4LCA2NSwgNTIsIDUxLCA1MSwgMTI4LCA2NSwgCisgICAgNTIsIDUxLCA1MCwgMTI4LCA2NSwgNTIsIDUxLCA0OSwgMTI4LCA2NSwgNTIsIDUxLCA0OCwgMTI4LCA2NSwgNTIsIDUwLCAKKyAgICA1NywgMTI4LCA2NSwgNTIsIDUwLCA1NiwgMTI4LCA2NSwgNTIsIDUwLCA1NSwgMTI4LCA2NSwgNTIsIDUwLCA1NCwgMTI4LCAKKyAgICA2NSwgNTIsIDUwLCA1MywgMTI4LCA2NSwgNTIsIDUwLCA1MiwgMTI4LCA2NSwgNTIsIDUwLCA1MSwgMTI4LCA2NSwgNTIsIAorICAgIDUwLCA1MCwgMTI4LCA2NSwgNTIsIDUwLCA0OSwgMTI4LCA2NSwgNTIsIDUwLCA0OCwgMTI4LCA2NSwgNTIsIDQ5LCA1NywgCisgICAgMTI4LCA2NSwgNTIsIDQ5LCA1NiwgNDUsIDg2LCA2NSwgODMsIDEyOCwgNjUsIDUyLCA0OSwgNTYsIDEyOCwgNjUsIDUyLCAKKyAgICA0OSwgNTUsIDQ1LCA4NiwgNjUsIDgzLCAxMjgsIDY1LCA1MiwgNDksIDU1LCAxMjgsIDY1LCA1MiwgNDksIDU0LCA0NSwgODYsIAorICAgIDY1LCA4MywgMTI4LCA2NSwgNTIsIDQ5LCA1NCwgMTI4LCA2NSwgNTIsIDQ5LCA1MywgNDUsIDg2LCA2NSwgODMsIDEyOCwgCisgICAgNjUsIDUyLCA0OSwgNTMsIDEyOCwgNjUsIDUyLCA0OSwgNTIsIDQ1LCA4NiwgNjUsIDgzLCAxMjgsIDY1LCA1MiwgNDksIDUyLCAKKyAgICAxMjgsIDY1LCA1MiwgNDksIDUxLCA0NSwgODYsIDY1LCA4MywgMTI4LCA2NSwgNTIsIDQ5LCA1MSwgMTI4LCA2NSwgNTIsIAorICAgIDQ5LCA1MCwgNDUsIDg2LCA2NSwgODMsIDEyOCwgNjUsIDUyLCA0OSwgNTAsIDEyOCwgNjUsIDUyLCA0OSwgNDksIDQ1LCA4NiwgCisgICAgNjUsIDgzLCAxMjgsIDY1LCA1MiwgNDksIDQ5LCAxMjgsIDY1LCA1MiwgNDksIDQ4LCAxOTMsIDY1LCA1MiwgNDksIDQ4LCAKKyAgICA0NSwgODYsIDY1LCA4MywgMTI4LCA2NSwgNTIsIDQ5LCAxNzYsIDY1LCA1MiwgNDgsIDU3LCA0NSwgODYsIDY1LCA4MywgCisgICAgMTI4LCA2NSwgNTIsIDQ4LCA1NywgMTI4LCA2NSwgNTIsIDQ4LCA1NiwgNDUsIDg2LCA2NSwgODMsIDEyOCwgNjUsIDUyLCAKKyAgICA0OCwgNTYsIDEyOCwgNjUsIDUyLCA0OCwgNTUsIDQ1LCA4NiwgNjUsIDgzLCAxMjgsIDY1LCA1MiwgNDgsIDU1LCAxMjgsIAorICAgIDY1LCA1MiwgNDgsIDU0LCA0NSwgODYsIDY1LCA4MywgMTI4LCA2NSwgNTIsIDQ4LCA1NCwgMTI4LCA2NSwgNTIsIDQ4LCA1MywgCisgICAgNDUsIDg2LCA2NSwgODMsIDEyOCwgNjUsIDUyLCA0OCwgNTMsIDEyOCwgNjUsIDUyLCA0OCwgNTIsIDQ1LCA4NiwgNjUsIDgzLCAKKyAgICAxMjgsIDY1LCA1MiwgNDgsIDUyLCAxMjgsIDY1LCA1MiwgNDgsIDUxLCA0NSwgODYsIDY1LCA4MywgMTI4LCA2NSwgNTIsIAorICAgIDQ4LCA1MSwgMTI4LCA2NSwgNTIsIDQ4LCA1MCwgNDUsIDg2LCA2NSwgODMsIDEyOCwgNjUsIDUyLCA0OCwgNTAsIDEyOCwgCisgICAgNjUsIDUyLCA0OCwgNDksIDQ1LCA4NiwgNjUsIDgzLCAxMjgsIDY1LCA1MiwgNDgsIDQ5LCAxMjgsIDY1LCA1MiwgNDgsIDQ4LCAKKyAgICA0NSwgODYsIDY1LCA4MywgMTI4LCA2NSwgNTIsIDQ4LCA0OCwgMTI4LCA2NSwgNTEsIDU3LCA1NywgMTI4LCA2NSwgNTEsIAorICAgIDU3LCA1NiwgMTI4LCA2NSwgNTEsIDU3LCA1NSwgMTI4LCA2NSwgNTEsIDU3LCA1NCwgMTI4LCA2NSwgNTEsIDU3LCA1MywgCisgICAgMTI4LCA2NSwgNTEsIDU3LCA1MiwgMTI4LCA2NSwgNTEsIDU3LCAxNzksIDY1LCA1MSwgNTcsIDUwLCAxMjgsIDY1LCA1MSwgCisgICAgNTcsIDQ5LCAxMjgsIDY1LCA1MSwgNTcsIDQ4LCAxMjgsIDY1LCA1MSwgNTYsIDU3LCAxMjgsIDY1LCA1MSwgNTYsIDU2LCAKKyAgICAxMjgsIDY1LCA1MSwgNTYsIDU1LCAxMjgsIDY1LCA1MSwgNTYsIDU0LCA2NSwgMTI4LCA2NSwgNTEsIDU2LCA1NCwgMTI4LCAKKyAgICA2NSwgNTEsIDU2LCA1MywgMTI4LCA2NSwgNTEsIDU2LCA1MiwgMTI4LCA2NSwgNTEsIDU2LCA1MSwgNjUsIDEyOCwgNjUsIAorICAgIDUxLCA1NiwgMTc5LCA2NSwgNTEsIDU2LCA1MCwgMTI4LCA2NSwgNTEsIDU2LCA0OSwgNjUsIDEyOCwgNjUsIDUxLCA1NiwgCisgICAgNDksIDEyOCwgNjUsIDUxLCA1NiwgNDgsIDEyOCwgNjUsIDUxLCA1NSwgNTcsIDEyOCwgNjUsIDUxLCA1NSwgNTYsIDEyOCwgCisgICAgNjUsIDUxLCA1NSwgNTUsIDEyOCwgNjUsIDUxLCA1NSwgNTQsIDEyOCwgNjUsIDUxLCA1NSwgNTMsIDEyOCwgNjUsIDUxLCAKKyAgICA1NSwgNTIsIDEyOCwgNjUsIDUxLCA1NSwgNTEsIDEyOCwgNjUsIDUxLCA1NSwgNTAsIDEyOCwgNjUsIDUxLCA1NSwgNDksIAorICAgIDY1LCAxMjgsIDY1LCA1MSwgNTUsIDQ5LCAxMjgsIDY1LCA1MSwgNTUsIDQ4LCAxMjgsIDY1LCA1MSwgNTQsIDU3LCAxMjgsIAorICAgIDY1LCA1MSwgNTQsIDU2LCA2NSwgMTI4LCA2NSwgNTEsIDU0LCA1NiwgMTI4LCA2NSwgNTEsIDU0LCA1NSwgMTI4LCA2NSwgCisgICAgNTEsIDU0LCA1NCwgMTI4LCA2NSwgNTEsIDU0LCA1MywgMTI4LCA2NSwgNTEsIDU0LCA1MiwgNjUsIDEyOCwgNjUsIDUxLCAKKyAgICA1NCwgNTIsIDEyOCwgNjUsIDUxLCA1NCwgNTEsIDEyOCwgNjUsIDUxLCA1NCwgNTAsIDEyOCwgNjUsIDUxLCA1NCwgNDksIAorICAgIDEyOCwgNjUsIDUxLCA1NCwgNDgsIDEyOCwgNjUsIDUxLCA1MywgNTcsIDY1LCAxMjgsIDY1LCA1MSwgNTMsIDU3LCAxMjgsIAorICAgIDY1LCA1MSwgNTMsIDU2LCAxMjgsIDY1LCA1MSwgNTMsIDU1LCAxMjgsIDY1LCA1MSwgNTMsIDU0LCAxMjgsIDY1LCA1MSwgCisgICAgNTMsIDUzLCAxMjgsIDY1LCA1MSwgNTMsIDUyLCAxMjgsIDY1LCA1MSwgNTMsIDUxLCAxMjgsIDY1LCA1MSwgNTMsIDUwLCAKKyAgICAxMjgsIDY1LCA1MSwgNTMsIDQ5LCAxMjgsIDY1LCA1MSwgNTMsIDQ4LCAxMjgsIDY1LCA1MSwgNTIsIDU3LCAxMjgsIDY1LCAKKyAgICA1MSwgNTIsIDU2LCAxMjgsIDY1LCA1MSwgNTIsIDU1LCAxMjgsIDY1LCA1MSwgNTIsIDU0LCAxMjgsIDY1LCA1MSwgNTIsIAorICAgIDUzLCAxMjgsIDY1LCA1MSwgNTIsIDUyLCAxMjgsIDY1LCA1MSwgNTIsIDUxLCAxMjgsIDY1LCA1MSwgNTIsIDUwLCAxMjgsIAorICAgIDY1LCA1MSwgNTIsIDQ5LCAxMjgsIDY1LCA1MSwgNTIsIDQ4LCAxMjgsIDY1LCA1MSwgNTEsIDU3LCAxMjgsIDY1LCA1MSwgCisgICAgNTEsIDU2LCAxMjgsIDY1LCA1MSwgNTEsIDU1LCAxMjgsIDY1LCA1MSwgNTEsIDU0LCA2NywgMTI4LCA2NSwgNTEsIDUxLCAKKyAgICA1NCwgNjYsIDEyOCwgNjUsIDUxLCA1MSwgNTQsIDY1LCAxMjgsIDY1LCA1MSwgNTEsIDU0LCAxMjgsIDY1LCA1MSwgNTEsIAorICAgIDUzLCAxMjgsIDY1LCA1MSwgNTEsIDUyLCAxMjgsIDY1LCA1MSwgNTEsIDUxLCAxMjgsIDY1LCA1MSwgNTEsIDUwLCA2NywgCisgICAgMTI4LCA2NSwgNTEsIDUxLCA1MCwgNjYsIDEyOCwgNjUsIDUxLCA1MSwgNTAsIDY1LCAxMjgsIDY1LCA1MSwgNTEsIDUwLCAKKyAgICAxMjgsIDY1LCA1MSwgNTEsIDQ5LCAxMjgsIDY1LCA1MSwgNTEsIDQ4LCAxMjgsIDY1LCA1MSwgNTAsIDU3LCA2NSwgMTI4LCAKKyAgICA2NSwgNTEsIDUwLCA1NywgMTI4LCA2NSwgNTEsIDUwLCA1NiwgMTI4LCA2NSwgNTEsIDUwLCA1NSwgMTI4LCA2NSwgNTEsIAorICAgIDUwLCA1NCwgMTI4LCA2NSwgNTEsIDUwLCA1MywgMTI4LCA2NSwgNTEsIDUwLCA1MiwgMTI4LCA2NSwgNTEsIDUwLCA1MSwgCisgICAgMTI4LCA2NSwgNTEsIDUwLCA1MCwgMTI4LCA2NSwgNTEsIDUwLCA0OSwgMTI4LCA2NSwgNTEsIDUwLCA0OCwgMTI4LCA2NSwgCisgICAgNTEsIDQ5LCA1NywgMTI4LCA2NSwgNTEsIDQ5LCA1NiwgMTI4LCA2NSwgNTEsIDQ5LCA1NSwgMTI4LCA2NSwgNTEsIDQ5LCAKKyAgICA1NCwgMTI4LCA2NSwgNTEsIDQ5LCA1MywgMTI4LCA2NSwgNTEsIDQ5LCA1MiwgMTI4LCA2NSwgNTEsIDQ5LCA1MSwgNjcsIAorICAgIDEyOCwgNjUsIDUxLCA0OSwgNTEsIDY2LCAxMjgsIDY1LCA1MSwgNDksIDUxLCA2NSwgMTI4LCA2NSwgNTEsIDQ5LCA1MSwgCisgICAgMTI4LCA2NSwgNTEsIDQ5LCA1MCwgMTI4LCA2NSwgNTEsIDQ5LCA0OSwgMTI4LCA2NSwgNTEsIDQ5LCA0OCwgMTI4LCA2NSwgCisgICAgNTEsIDQ4LCA1NywgNjcsIDEyOCwgNjUsIDUxLCA0OCwgNTcsIDY2LCAxMjgsIDY1LCA1MSwgNDgsIDU3LCA2NSwgMTI4LCAKKyAgICA2NSwgNTEsIDQ4LCA1NywgMTI4LCA2NSwgNTEsIDQ4LCA1NiwgMTI4LCA2NSwgNTEsIDQ4LCA1NSwgMTI4LCA2NSwgNTEsIAorICAgIDQ4LCA1NCwgMTI4LCA2NSwgNTEsIDQ4LCA1MywgMTI4LCA2NSwgNTEsIDQ4LCA1MiwgMTI4LCA2NSwgNTEsIDQ4LCA1MSwgCisgICAgMTI4LCA2NSwgNTEsIDQ4LCA1MCwgMTI4LCA2NSwgNTEsIDQ4LCA0OSwgMTI4LCA2NSwgNTEsIDQ4LCA0OCwgMTI4LCA2NSwgCisgICAgNTAsIDU3LCA1NywgNjUsIDEyOCwgNjUsIDUwLCA1NywgNTcsIDEyOCwgNjUsIDUwLCA1NywgNTYsIDEyOCwgNjUsIDUwLCAKKyAgICA1NywgNTUsIDEyOCwgNjUsIDUwLCA1NywgNTQsIDEyOCwgNjUsIDUwLCA1NywgNTMsIDEyOCwgNjUsIDUwLCA1NywgNTIsIAorICAgIDY1LCAxMjgsIDY1LCA1MCwgNTcsIDUyLCAxMjgsIDY1LCA1MCwgNTcsIDUxLCAxMjgsIDY1LCA1MCwgNTcsIDUwLCAxMjgsIAorICAgIDY1LCA1MCwgNTcsIDQ5LCAxMjgsIDY1LCA1MCwgNTcsIDQ4LCAxMjgsIDY1LCA1MCwgNTYsIDU3LCA2NSwgMTI4LCA2NSwgCisgICAgNTAsIDU2LCA1NywgMTI4LCA2NSwgNTAsIDU2LCA1NiwgMTI4LCA2NSwgNTAsIDU2LCA1NSwgMTI4LCA2NSwgNTAsIDU2LCAKKyAgICA1NCwgMTI4LCA2NSwgNTAsIDU2LCA1MywgMTI4LCA2NSwgNTAsIDU2LCA1MiwgMTI4LCA2NSwgNTAsIDU2LCA1MSwgMTI4LCAKKyAgICA2NSwgNTAsIDU2LCA1MCwgMTI4LCA2NSwgNTAsIDU2LCA0OSwgMTI4LCA2NSwgNTAsIDU2LCA0OCwgMTI4LCA2NSwgNTAsIAorICAgIDU1LCA1NywgMTI4LCA2NSwgNTAsIDU1LCA1NiwgMTI4LCA2NSwgNTAsIDU1LCA1NSwgMTI4LCA2NSwgNTAsIDU1LCA1NCwgCisgICAgMTI4LCA2NSwgNTAsIDU1LCA1MywgMTI4LCA2NSwgNTAsIDU1LCA1MiwgMTI4LCA2NSwgNTAsIDU1LCA1MSwgMTI4LCA2NSwgCisgICAgNTAsIDU1LCA1MCwgMTI4LCA2NSwgNTAsIDU1LCA0OSwgMTI4LCA2NSwgNTAsIDU1LCA0OCwgMTI4LCA2NSwgNTAsIDU0LCAKKyAgICA1NywgMTI4LCA2NSwgNTAsIDU0LCA1NiwgMTI4LCA2NSwgNTAsIDU0LCA1NSwgNjUsIDEyOCwgNjUsIDUwLCA1NCwgNTUsIAorICAgIDEyOCwgNjUsIDUwLCA1NCwgNTQsIDEyOCwgNjUsIDUwLCA1NCwgNTMsIDEyOCwgNjUsIDUwLCA1NCwgNTIsIDEyOCwgNjUsIAorICAgIDUwLCA1NCwgNTEsIDEyOCwgNjUsIDUwLCA1NCwgNTAsIDEyOCwgNjUsIDUwLCA1NCwgNDksIDEyOCwgNjUsIDUwLCA1NCwgCisgICAgNDgsIDEyOCwgNjUsIDUwLCA1MywgNTcsIDEyOCwgNjUsIDUwLCA1MywgNTYsIDEyOCwgNjUsIDUwLCA1MywgNTUsIDEyOCwgCisgICAgNjUsIDUwLCA1MywgNTQsIDEyOCwgNjUsIDUwLCA1MywgNTMsIDEyOCwgNjUsIDUwLCA1MywgNTIsIDEyOCwgNjUsIDUwLCAKKyAgICA1MywgNTEsIDEyOCwgNjUsIDUwLCA1MywgNTAsIDEyOCwgNjUsIDUwLCA1MywgNDksIDEyOCwgNjUsIDUwLCA1MywgNDgsIAorICAgIDEyOCwgNjUsIDUwLCA1MiwgNTcsIDEyOCwgNjUsIDUwLCA1MiwgNTYsIDEyOCwgNjUsIDUwLCA1MiwgNTUsIDEyOCwgNjUsIAorICAgIDUwLCA1MiwgNTQsIDEyOCwgNjUsIDUwLCA1MiwgNTMsIDEyOCwgNjUsIDUwLCA1MiwgNTIsIDEyOCwgNjUsIDUwLCA1MiwgCisgICAgNTEsIDEyOCwgNjUsIDUwLCA1MiwgNTAsIDEyOCwgNjUsIDUwLCA1MiwgNDksIDEyOCwgNjUsIDUwLCA1MiwgNDgsIDEyOCwgCisgICAgNjUsIDUwLCA1MSwgNTcsIDEyOCwgNjUsIDUwLCA1MSwgNTYsIDEyOCwgNjUsIDUwLCA1MSwgNTUsIDEyOCwgNjUsIDUwLCAKKyAgICA1MSwgNTQsIDEyOCwgNjUsIDUwLCA1MSwgNTMsIDEyOCwgNjUsIDUwLCA1MSwgNTIsIDEyOCwgNjUsIDUwLCA1MSwgNTEsIAorICAgIDEyOCwgNjUsIDUwLCA1MSwgNTAsIDEyOCwgNjUsIDUwLCA1MSwgNDksIDEyOCwgNjUsIDUwLCA1MSwgNDgsIDEyOCwgNjUsIAorICAgIDUwLCA1MCwgNTcsIDEyOCwgNjUsIDUwLCA1MCwgNTYsIDEyOCwgNjUsIDUwLCA1MCwgNTUsIDY1LCAxMjgsIDY1LCA1MCwgCisgICAgNTAsIDU1LCAxMjgsIDY1LCA1MCwgNTAsIDU0LCAxMjgsIDY1LCA1MCwgNTAsIDUzLCAxMjgsIDY1LCA1MCwgNTAsIDUyLCAKKyAgICAxMjgsIDY1LCA1MCwgNTAsIDUxLCAxMjgsIDY1LCA1MCwgNTAsIDUwLCAxMjgsIDY1LCA1MCwgNTAsIDQ5LCAxMjgsIDY1LCAKKyAgICA1MCwgNTAsIDQ4LCAxMjgsIDY1LCA1MCwgNDksIDU3LCAxMjgsIDY1LCA1MCwgNDksIDU2LCAxMjgsIDY1LCA1MCwgNDksIAorICAgIDU1LCAxMjgsIDY1LCA1MCwgNDksIDU0LCA2NSwgMTI4LCA2NSwgNTAsIDQ5LCA1NCwgMTI4LCA2NSwgNTAsIDQ5LCA1MywgCisgICAgNjUsIDEyOCwgNjUsIDUwLCA0OSwgNTMsIDEyOCwgNjUsIDUwLCA0OSwgNTIsIDEyOCwgNjUsIDUwLCA0OSwgNTEsIDEyOCwgCisgICAgNjUsIDUwLCA0OSwgNTAsIDEyOCwgNjUsIDUwLCA0OSwgNDksIDEyOCwgNjUsIDUwLCA0OSwgNDgsIDEyOCwgNjUsIDUwLCAKKyAgICA0OCwgNTcsIDY1LCAxMjgsIDY1LCA1MCwgNDgsIDU3LCAxMjgsIDY1LCA1MCwgNDgsIDU2LCAxMjgsIDY1LCA1MCwgNDgsIAorICAgIDU1LCA2NSwgMTI4LCA2NSwgNTAsIDQ4LCA1NSwgMTI4LCA2NSwgNTAsIDQ4LCA1NCwgMTI4LCA2NSwgNTAsIDQ4LCA1MywgCisgICAgMTI4LCA2NSwgNTAsIDQ4LCA1MiwgMTI4LCA2NSwgNTAsIDQ4LCA1MSwgMTI4LCA2NSwgNTAsIDQ4LCA1MCwgNjYsIDEyOCwgCisgICAgNjUsIDUwLCA0OCwgNTAsIDY1LCAxMjgsIDY1LCA1MCwgNDgsIDUwLCAxMjgsIDY1LCA1MCwgNDgsIDQ5LCAxMjgsIDY1LCAKKyAgICA1MCwgNDgsIDQ4LCAxMjgsIDY1LCA0OSwgNTcsIDU3LCAxMjgsIDY1LCA0OSwgNTcsIDU2LCAxMjgsIDY1LCA0OSwgNTcsIAorICAgIDU1LCAxMjgsIDY1LCA0OSwgNTcsIDU0LCAxMjgsIDY1LCA0OSwgNTcsIDUzLCAxMjgsIDY1LCA0OSwgNTcsIDUyLCAxMjgsIAorICAgIDY1LCA0OSwgNTcsIDUxLCAxMjgsIDY1LCA0OSwgNTcsIDUwLCAxMjgsIDY1LCA0OSwgNTcsIDQ5LCAxMjgsIDY1LCA0OSwgCisgICAgNTcsIDQ4LCAxMjgsIDY1LCA0OSwgNTYsIDU3LCAxMjgsIDY1LCA0OSwgNTYsIDU2LCAxMjgsIDY1LCA0OSwgNTYsIDU1LCAKKyAgICAxMjgsIDY1LCA0OSwgNTYsIDU0LCAxMjgsIDY1LCA0OSwgNTYsIDUzLCAxMjgsIDY1LCA0OSwgNTYsIDUyLCAxMjgsIDY1LCAKKyAgICA0OSwgNTYsIDUxLCAxMjgsIDY1LCA0OSwgNTYsIDUwLCAxMjgsIDY1LCA0OSwgNTYsIDQ5LCAxMjgsIDY1LCA0OSwgNTYsIAorICAgIDQ4LCAxMjgsIDY1LCA0OSwgNTUsIDU3LCAxMjgsIDY1LCA0OSwgNTUsIDU2LCAxMjgsIDY1LCA0OSwgNTUsIDU1LCAxMjgsIAorICAgIDY1LCA0OSwgNTUsIDU0LCAxMjgsIDY1LCA0OSwgNTUsIDUzLCAxMjgsIDY1LCA0OSwgNTUsIDUyLCAxMjgsIDY1LCA0OSwgCisgICAgNTUsIDUxLCAxMjgsIDY1LCA0OSwgNTUsIDUwLCAxMjgsIDY1LCA0OSwgNTUsIDQ5LCAxMjgsIDY1LCA0OSwgNTUsIDQ4LCAKKyAgICAxMjgsIDY1LCA0OSwgNTQsIDU3LCAxMjgsIDY1LCA0OSwgNTQsIDU2LCAxMjgsIDY1LCA0OSwgNTQsIDU1LCAxMjgsIDY1LCAKKyAgICA0OSwgNTQsIDU0LCAxMjgsIDY1LCA0OSwgNTQsIDUzLCAxMjgsIDY1LCA0OSwgNTQsIDUyLCAxMjgsIDY1LCA0OSwgNTQsIAorICAgIDUxLCAxMjgsIDY1LCA0OSwgNTQsIDUwLCAxMjgsIDY1LCA0OSwgNTQsIDQ5LCAxMjgsIDY1LCA0OSwgNTQsIDQ4LCAxMjgsIAorICAgIDY1LCA0OSwgNTMsIDU3LCAxMjgsIDY1LCA0OSwgNTMsIDU2LCAxMjgsIDY1LCA0OSwgNTMsIDU1LCAxMjgsIDY1LCA0OSwgCisgICAgNTMsIDU0LCAxMjgsIDY1LCA0OSwgNTMsIDUzLCAxMjgsIDY1LCA0OSwgNTMsIDUyLCAxMjgsIDY1LCA0OSwgNTMsIDUxLCAKKyAgICAxMjgsIDY1LCA0OSwgNTMsIDUwLCAxMjgsIDY1LCA0OSwgNTMsIDQ5LCAxMjgsIDY1LCA0OSwgNTMsIDQ4LCAxMjgsIDY1LCAKKyAgICA0OSwgNTIsIDU3LCAxMjgsIDY1LCA0OSwgNTIsIDU2LCAxMjgsIDY1LCA0OSwgNTIsIDU1LCAxMjgsIDY1LCA0OSwgNTIsIAorICAgIDU0LCAxMjgsIDY1LCA0OSwgNTIsIDUzLCAxMjgsIDY1LCA0OSwgNTIsIDUyLCAxMjgsIDY1LCA0OSwgNTIsIDUxLCAxMjgsIAorICAgIDY1LCA0OSwgNTIsIDUwLCAxMjgsIDY1LCA0OSwgNTIsIDQ5LCAxMjgsIDY1LCA0OSwgNTIsIDQ4LCAxMjgsIDY1LCA0OSwgCisgICAgNTEsIDU3LCAxMjgsIDY1LCA0OSwgNTEsIDU2LCAxMjgsIDY1LCA0OSwgNTEsIDU1LCAxMjgsIDY1LCA0OSwgNTEsIDU0LCAKKyAgICAxMjgsIDY1LCA0OSwgNTEsIDUzLCA2NSwgMTI4LCA2NSwgNDksIDUxLCA1MywgMTI4LCA2NSwgNDksIDUxLCA1MiwgMTI4LCAKKyAgICA2NSwgNDksIDUxLCA1MSwgMTI4LCA2NSwgNDksIDUxLCA1MCwgMTI4LCA2NSwgNDksIDUxLCA0OSwgNjcsIDEyOCwgNjUsIAorICAgIDQ5LCA1MSwgNDksIDEyOCwgNjUsIDQ5LCA1MSwgNDgsIDEyOCwgNjUsIDQ5LCA1MCwgNTcsIDEyOCwgNjUsIDQ5LCA1MCwgCisgICAgNTYsIDEyOCwgNjUsIDQ5LCA1MCwgNTUsIDEyOCwgNjUsIDQ5LCA1MCwgNTQsIDEyOCwgNjUsIDQ5LCA1MCwgNTMsIDY1LCAKKyAgICAxMjgsIDY1LCA0OSwgNTAsIDUzLCAxMjgsIDY1LCA0OSwgNTAsIDUyLCAxMjgsIDY1LCA0OSwgNTAsIDUxLCAxMjgsIDY1LCAKKyAgICA0OSwgNTAsIDUwLCAxMjgsIDY1LCA0OSwgNTAsIDQ5LCAxMjgsIDY1LCA0OSwgNTAsIDQ4LCA2NiwgMTI4LCA2NSwgNDksIAorICAgIDUwLCA0OCwgMTI4LCA2NSwgNDksIDQ5LCA1NywgMTI4LCA2NSwgNDksIDQ5LCA1NiwgMTI4LCA2NSwgNDksIDQ5LCA1NSwgCisgICAgMTI4LCA2NSwgNDksIDQ5LCA1NCwgMTI4LCA2NSwgNDksIDQ5LCA1MywgNjUsIDEyOCwgNjUsIDQ5LCA0OSwgNTMsIDEyOCwgCisgICAgNjUsIDQ5LCA0OSwgNTIsIDEyOCwgNjUsIDQ5LCA0OSwgNTEsIDEyOCwgNjUsIDQ5LCA0OSwgNTAsIDEyOCwgNjUsIDQ5LCAKKyAgICA0OSwgNDksIDEyOCwgNjUsIDQ5LCA0OSwgNDgsIDY2LCAxMjgsIDY1LCA0OSwgNDksIDQ4LCA2NSwgMTI4LCA2NSwgNDksIAorICAgIDQ5LCA0OCwgMTI4LCA2NSwgNDksIDQ4LCA1NywgMTI4LCA2NSwgNDksIDQ4LCA1NiwgMTI4LCA2NSwgNDksIDQ4LCA1NSwgCisgICAgNjcsIDEyOCwgNjUsIDQ5LCA0OCwgNTUsIDY2LCAxMjgsIDY1LCA0OSwgNDgsIDU1LCA2NSwgMTI4LCA2NSwgNDksIDQ4LCAKKyAgICA1NSwgMTI4LCA2NSwgNDksIDQ4LCA1NCwgMTI4LCA2NSwgNDksIDQ4LCA1MywgNjYsIDEyOCwgNjUsIDQ5LCA0OCwgNTMsIAorICAgIDY1LCAxMjgsIDY1LCA0OSwgNDgsIDUzLCAxMjgsIDY1LCA0OSwgNDgsIDUyLCA2NywgMTI4LCA2NSwgNDksIDQ4LCA1MiwgCisgICAgNjYsIDEyOCwgNjUsIDQ5LCA0OCwgNTIsIDY1LCAxMjgsIDY1LCA0OSwgNDgsIDUyLCAxMjgsIDY1LCA0OSwgNDgsIDUxLCAKKyAgICAxMjgsIDY1LCA0OSwgNDgsIDUwLCA2NSwgMTI4LCA2NSwgNDksIDQ4LCA1MCwgMTI4LCA2NSwgNDksIDQ4LCA0OSwgNjUsIAorICAgIDEyOCwgNjUsIDQ5LCA0OCwgNDksIDEyOCwgNjUsIDQ5LCA0OCwgNDgsIDY1LCAxMjgsIDY1LCA0OSwgNDgsIDQ4LCA0NSwgCisgICAgNDksIDQ4LCA1MCwgMTI4LCA2NSwgNDksIDQ4LCA0OCwgMTI4LCA2NSwgNDgsIDU3LCA1NywgMTI4LCA2NSwgNDgsIDU3LCAKKyAgICA1NiwgNjUsIDEyOCwgNjUsIDQ4LCA1NywgNTYsIDEyOCwgNjUsIDQ4LCA1NywgNTUsIDY1LCAxMjgsIDY1LCA0OCwgNTcsIAorICAgIDU1LCAxMjgsIDY1LCA0OCwgNTcsIDU0LCAxMjgsIDY1LCA0OCwgNTcsIDUzLCAxMjgsIDY1LCA0OCwgNTcsIDUyLCAxMjgsIAorICAgIDY1LCA0OCwgNTcsIDUxLCAxMjgsIDY1LCA0OCwgNTcsIDUwLCAxMjgsIDY1LCA0OCwgNTcsIDQ5LCAxMjgsIDY1LCA0OCwgCisgICAgNTcsIDQ4LCAxMjgsIDY1LCA0OCwgNTYsIDU3LCAxMjgsIDY1LCA0OCwgNTYsIDU2LCAxMjgsIDY1LCA0OCwgNTYsIDU1LCAKKyAgICAxMjgsIDY1LCA0OCwgNTYsIDU0LCAxMjgsIDY1LCA0OCwgNTYsIDUzLCAxMjgsIDY1LCA0OCwgNTYsIDUyLCAxMjgsIDY1LCAKKyAgICA0OCwgNTYsIDUxLCAxMjgsIDY1LCA0OCwgNTYsIDUwLCAxMjgsIDY1LCA0OCwgNTYsIDQ5LCAxMjgsIDY1LCA0OCwgNTYsIAorICAgIDQ4LCAxMjgsIDY1LCA0OCwgNTUsIDU3LCAxMjgsIDY1LCA0OCwgNTUsIDU2LCAxMjgsIDY1LCA0OCwgNTUsIDU1LCAxMjgsIAorICAgIDY1LCA0OCwgNTUsIDU0LCAxMjgsIDY1LCA0OCwgNTUsIDUzLCAxMjgsIDY1LCA0OCwgNTUsIDUyLCAxMjgsIDY1LCA0OCwgCisgICAgNTUsIDUxLCAxMjgsIDY1LCA0OCwgNTUsIDUwLCAxMjgsIDY1LCA0OCwgNTUsIDQ5LCAxMjgsIDY1LCA0OCwgNTUsIDQ4LCAKKyAgICAxMjgsIDY1LCA0OCwgNTQsIDU3LCAxMjgsIDY1LCA0OCwgNTQsIDU2LCAxMjgsIDY1LCA0OCwgNTQsIDU1LCAxMjgsIDY1LCAKKyAgICA0OCwgNTQsIDU0LCA2NywgMTI4LCA2NSwgNDgsIDU0LCA1NCwgNjYsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIDY1LCAxMjgsIAorICAgIDY1LCA0OCwgNTQsIDU0LCAxMjgsIDY1LCA0OCwgNTQsIDUzLCAxMjgsIDY1LCA0OCwgNTQsIDUyLCAxMjgsIDY1LCA0OCwgCisgICAgNTQsIDUxLCAxMjgsIDY1LCA0OCwgNTQsIDUwLCAxMjgsIDY1LCA0OCwgNTQsIDQ5LCAxMjgsIDY1LCA0OCwgNTQsIDQ4LCAKKyAgICAxMjgsIDY1LCA0OCwgNTMsIDU3LCAxMjgsIDY1LCA0OCwgNTMsIDU2LCAxMjgsIDY1LCA0OCwgNTMsIDU1LCAxMjgsIDY1LCAKKyAgICA0OCwgNTMsIDU0LCAxMjgsIDY1LCA0OCwgNTMsIDUzLCAxMjgsIDY1LCA0OCwgNTMsIDUyLCAxMjgsIDY1LCA0OCwgNTMsIAorICAgIDUxLCAxMjgsIDY1LCA0OCwgNTMsIDUwLCAxMjgsIDY1LCA0OCwgNTMsIDQ5LCAxMjgsIDY1LCA0OCwgNTMsIDQ4LCAxMjgsIAorICAgIDY1LCA0OCwgNTIsIDU3LCAxMjgsIDY1LCA0OCwgNTIsIDU2LCAxMjgsIDY1LCA0OCwgNTIsIDU1LCAxMjgsIDY1LCA0OCwgCisgICAgNTIsIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDUyLCA1NCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MiwgNTMsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgNTIsIAorICAgIDUxLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgCisgICAgNTAsIDEyOCwgNjUsIDQ4LCA1MiwgNDksIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDQ5LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCAKKyAgICA2NSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgMTI4LCA2NSwgNDgsIDUxLCA1NywgNjUsIDEyOCwgNjUsIDQ4LCA1MSwgNTcsIAorICAgIDEyOCwgNjUsIDQ4LCA1MSwgNTYsIDEyOCwgNjUsIDQ4LCA1MSwgNTUsIDEyOCwgNjUsIDQ4LCA1MSwgNTQsIDEyOCwgNjUsIAorICAgIDQ4LCA1MSwgNTMsIDEyOCwgNjUsIDQ4LCA1MSwgNTIsIDEyOCwgNjUsIDQ4LCA1MSwgNTEsIDEyOCwgNjUsIDQ4LCA1MSwgCisgICAgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNTAsIDU2LCA2NiwgMTI4LCA2NSwgNDgsIDUwLCA1NCwgNjUsIDEyOCwgNjUsIDQ4LCAKKyAgICA0OSwgNTUsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDUyLCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNjUsIAorICAgIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA2NSwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgCisgICAgNjUsIDQ1LCA2OSwgODUsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCA4NSwgMTI4LCA0NSwgNzUsIDcyLCAKKyAgICA4OSwgODUsIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIDkwLCA4NSwgMTk2LCA0NSwgNjcsIAorICAgIDcyLCA2NSwgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGxleGljb25fb2Zmc2V0W10gPSB7Ci0gICAgMCwgMCwgNiwgMTAsIDE4LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ3LCA1MCwgNjIsIDcwLCA4MCwgOTMsIDEwMiwgMTA4LCAKLSAgICAxMTMsIDEyMSwgMTMwLCAxMzUsIDE0MCwgMTQzLCAxNDcsIDE1MywgMTU4LCAxNjMsIDE3MSwgMTc4LCAxODYsIDE5MSwgCi0gICAgMTk0LCAyMDAsIDIwOCwgMjE1LCAyMjUsIDIzMCwgMjM3LCAyNDYsIDI0OSwgMjU0LCAyNTcsIDI2MywgMjY3LCAyNzIsIAotICAgIDI4MSwgMjg4LCAyOTUsIDMwMSwgMzEwLCAzMTUsIDMyMSwgMzI3LCAzMzUsIDE0NCwgMzQxLCAzNDksIDM1MCwgMzU4LCAKLSAgICAzNjEsIDM2NywgMzY5LCAzNzUsIDM4MiwgMzg0LCAzOTEsIDM5NSwgNDAzLCA0MTAsIDQxMiwgNDE3LCA0MjIsIDQyNywgCi0gICAgNDM0LCA0MzYsIDI5OSwgNDQyLCA0NDUsIDQ0NywgNDUyLCA0NTcsIDQ2MywgNDcwLCA0NzksIDQ4OSwgNDk0LCA0OTgsIAotICAgIDUwNSwgNTE4LCA1MjIsIDUzMSwgNTM4LCA1NDUsIDU0OCwgNTU0LCA1NTgsIDU2MiwgNTcyLCA1ODAsIDU4OCwgNTk2LCAKLSAgICA2MDUsIDYxMywgNjE4LCA2MTksIDYyMywgNjMxLCA2MzgsIDY0OCwgNjUyLCA2NjMsIDY2NywgNjcwLCA2NzMsIDY3OCwgCi0gICAgMzQ4LCA2ODIsIDY5MSwgNjk3LCA3MDMsIDcwNSwgNzA4LCA3MTEsIDcxNCwgNzE4LCA3MjIsIDczMSwgNzM5LCA3NDQsIAotICAgIDc0NywgNzUxLCA3NTcsIDc2NCwgNzcxLCA3NzYsIDc4NSwgNzk0LCA4MDEsIDgwNSwgODE4LCA4MjcsIDgzNSwgODQxLCAKLSAgICA1NTcsIDg1MCwgODYwLCA4NjcsIDg3MywgODc5LCA4ODYsIDg5NCwgODk4LCA3NDksIDkwNiwgOTE1LCA1MDMsIDkyMywgCi0gICAgOTI4LCA5MzQsIDE3LCA5NDMsIDk0OCwgOTUxLCA5NTUsIDk1OSwgOTY2LCA5NjksIDk3NiwgOTgwLCA5ODgsIDk5MiwgCi0gICAgMTAwMCwgMTAwNCwgMTAwNywgMTAxNCwgMTAyMSwgMTkyLCAxMDI0LCAxMDI5LCAxMDM5LCAxMDQ4LCAxMDU1LCAxMDYwLCAKLSAgICAxMDY2LCAxMDcyLCAxMDgwLCAxMDgzLCAxMDg4LCAxMDk0LCAxMTAyLCAxMTA3LCAxMTEwLCAxMTEzLCAxMTEsIDExMTgsIAotICAgIDExMjIsIDExMjgsIDExMzQsIDExMzcsIDExNDMsIDExNDcsIDExNTIsIDExNTgsIDExNjgsIDExNzIsIDExNzUsIDExNzgsIAotICAgIDExODcsIDExOTEsIDExOTQsIDExOTksIDEyMDQsIDEyMTAsIDEyMTUsIDEyMjAsIDEyMjUsIDEyMjksIDEyMzQsIDEyNDAsIAotICAgIDEyNDUsIDEyNTAsIDEyNTQsIDEyNjAsIDEyNjUsIDEyNzAsIDEyNzUsIDEyNzksIDEyODQsIDEyODksIDEyOTQsIDEzMDAsIAotICAgIDEzMDYsIDEzMTIsIDEzMTcsIDEzMjEsIDEzMjYsIDEzMzEsIDEzMzYsIDEzNDAsIDEzNDUsIDEzNTAsIDEzNTUsIDEzNjAsIAotICAgIDExOTUsIDEyMDAsIDEyMDUsIDEyMTEsIDEyMTYsIDEzNjQsIDEyMjYsIDEzNzAsIDEzNzUsIDEzODAsIDEzODcsIDEzOTEsIAotICAgIDE0MDAsIDEyMzAsIDE0MDQsIDEyMzUsIDEyNDEsIDEyNDYsIDE0MDgsIDE0MTMsIDE0MTgsIDE0MjIsIDE0MjYsIDE0MzIsIAotICAgIDE0MzYsIDEyNTEsIDE0MzksIDEyNjEsIDE0NDQsIDE0NDgsIDEyNjYsIDE0NTQsIDEyNzEsIDE0NTgsIDE0NjIsIDEyNzYsIAotICAgIDE0NjYsIDE0NzEsIDE0NzUsIDE0NzgsIDE0ODIsIDEyODAsIDEyODUsIDE0ODcsIDEyOTAsIDE0OTMsIDE0OTksIDE1MDUsIAotICAgIDE1MTEsIDEyOTUsIDEzMDcsIDEzMTMsIDE1MTUsIDE1MTksIDE1MjMsIDE1MjYsIDEzMTgsIDE1MzAsIDE1MzIsIDE1MzcsIAotICAgIDE1NDIsIDE1NDgsIDE1NTMsIDE1NTgsIDE1NjIsIDE1NjcsIDE1NzIsIDE1NzcsIDE1ODIsIDE1ODgsIDE1OTMsIDE1OTgsIAotICAgIDE2MDQsIDE2MTAsIDE2MTUsIDE2MTksIDE2MjQsIDE2MjksIDE2MzQsIDE2MzksIDE2NDMsIDE2NTEsIDE2NTUsIDE2NjAsIAotICAgIDE2NjUsIDE2NzAsIDE2NzUsIDE2NzksIDE2ODIsIDE2ODcsIDE2OTIsIDE2OTcsIDE3MDIsIDE3MDgsIDE3MTMsIDE3MTcsIAotICAgIDEzMjIsIDE3MjAsIDE3MjUsIDE3MzAsIDEzMjcsIDE3MzQsIDE3MzgsIDE3NDUsIDEzMzIsIDE3NTIsIDEzMzcsIDE3NTYsIAotICAgIDE3NTgsIDE3NjMsIDE3NjksIDEzNDEsIDE3NzQsIDE3ODMsIDEzNDYsIDE3ODgsIDE3OTQsIDEzNTEsIDE3OTksIDE4MDQsIAotICAgIDE4MDcsIDE4MTIsIDE4MTYsIDE4MjAsIDE4MjQsIDE4MjcsIDE4MzEsIDEzNTYsIDEzNjEsIDEwNTgsIDE4MzYsIDE4NDIsIAotICAgIDE4NDgsIDE4NTQsIDE4NjAsIDE4NjYsIDE4NzIsIDE4NzgsIDE4ODQsIDE4ODksIDE4OTUsIDE5MDEsIDE5MDcsIDE5MTMsIAotICAgIDE5MTksIDE5MjUsIDE5MzEsIDE5MzcsIDE5NDMsIDE5NDgsIDE5NTMsIDE5NTgsIDE5NjMsIDE5NjgsIDE5NzMsIDE5NzgsIAotICAgIDE5ODMsIDE5ODgsIDE5OTMsIDE5OTksIDIwMDQsIDIwMTAsIDIwMTUsIDIwMjEsIDIwMjcsIDIwMzIsIDIwMzgsIDIwNDQsIAotICAgIDIwNTAsIDIwNTYsIDIwNjEsIDIwNjYsIDIwNjgsIDIwNjksIDIwNzMsIDIwNzcsIDIwODIsIDIwODYsIDIwOTAsIDIwOTQsIAotICAgIDIwOTksIDIxMDMsIDIxMDYsIDIxMTEsIDIxMTUsIDIxMjAsIDIxMjQsIDIxMjgsIDIxMzMsIDIxMzcsIDIxNDAsIDIxNDQsIAotICAgIDIxNTAsIDIxNjQsIDIxNjgsIDIxNzIsIDIxNzYsIDIxNzksIDIxODQsIDIxODgsIDIxOTIsIDIxOTUsIDIxOTksIDIyMDQsIAotICAgIDIyMDksIDIyMTQsIDIyMTksIDIyMjMsIDIyMjcsIDIyMzEsIDIyMzYsIDIyNDAsIDIyNDUsIDIyNDksIDIyNTQsIDIyNjAsIAotICAgIDIyNjcsIDIyNzMsIDIyNzgsIDIyODMsIDIyODgsIDIyOTQsIDIyOTksIDIzMDUsIDIzMTAsIDIzMTMsIDEyMTIsIDIzMTUsIAotICAgIDIzMjIsIDIzMzAsIDIzNDAsIDIzNDksIDIzNjMsIDIzNjcsIDIzNzEsIDIzODQsIDIzOTIsIDIzOTYsIDI0MDEsIDI0MDUsIAotICAgIDI0MDgsIDI0MTIsIDI0MTYsIDI0MjEsIDI0MjYsIDI0MzEsIDI0MzUsIDI0MzgsIDI0NDIsIDI0NDksIDI0NTYsIDI0NjIsIAotICAgIDI0NjcsIDI0NzIsIDI0NzgsIDI0ODQsIDI0ODksIDI0OTIsIDE3NjAsIDI0OTQsIDI1MDAsIDI1MDQsIDI1MDksIDI1MTMsIAotICAgIDI1MTcsIDE3NjUsIDE3NzEsIDI1MjIsIDI1MjYsIDI1MjksIDI1MzQsIDI1MzksIDI1NDQsIDI1NDksIDI1NTMsIDI1NjAsIAotICAgIDI1NjUsIDI1NjgsIDI1NzUsIDI1ODEsIDI1ODUsIDI1ODksIDI1OTMsIDI1OTgsIDI2MDUsIDI2MTAsIDI2MTUsIDI2MjIsIAotICAgIDI2MjgsIDI2MzQsIDI2NDAsIDI2NTQsIDI2NzEsIDI2ODYsIDI3MDEsIDI3MTAsIDI3MTUsIDI3MTksIDI3MjQsIDI3MjksIAotICAgIDI3MzMsIDI3NDUsIDI3NTIsIDI3NTgsIDIyNjMsIDI3NjQsIDI3NzEsIDI3NzcsIDI3ODEsIDI3ODQsIDI3OTEsIDI3OTcsIAotICAgIDI4MDEsIDI4MDUsIDI4MDksIDIwOTEsIDI4MTMsIDI4MTgsIDI4MjMsIDI4MjcsIDI4MzUsIDI4MzksIDI4NDMsIDI4NDcsIAotICAgIDI4NTEsIDI4NTYsIDI4NjEsIDI4NjYsIDI4NzAsIDI4NzUsIDI4ODAsIDI4ODQsIDI4ODksIDI4OTMsIDI4OTYsIDI5MDAsIAotICAgIDI5MDQsIDI5MTIsIDI5MTcsIDI5MjEsIDI5MjUsIDI5MzEsIDI5NDAsIDI5NDQsIDI5NDgsIDI5NTQsIDI5NTksIDI5NjYsIAotICAgIDI5NzAsIDI5ODAsIDI5ODQsIDI5ODgsIDI5OTMsIDI5OTcsIDMwMDIsIDMwMDgsIDMwMTMsIDMwMTcsIDMwMjEsIDMwMjUsIAotICAgIDI0NTIsIDMwMzMsIDMwMzgsIDMwNDQsIDMwNDksIDMwNTMsIDMwNTgsIDMwNjMsIDMwNjcsIDMwNzMsIDMwNzgsIDIwOTUsIAotICAgIDMwODQsIDMwOTAsIDMwOTUsIDMxMDAsIDMxMDUsIDMxMTAsIDMxMTUsIDMxMjAsIDMxMjUsIDMxMzAsIDMxMzUsIDMxNDEsIAotICAgIDMxNDYsIDEyMjcsIDkyLCAzMTUyLCAzMTU2LCAzMTYwLCAzMTY0LCAzMTY5LCAzMTczLCAzMTc3LCAzMTgxLCAzMTg1LCAKLSAgICAzMTkwLCAzMTk0LCAzMTk5LCAzMjAzLCAzMjA2LCAzMjEwLCAzMjE1LCAzMjE5LCAzMjI0LCAzMjI4LCAzMjMyLCAzMjM2LCAKLSAgICAzMjQxLCAzMjQ1LCAzMjQ4LCAzMjYxLCAzMjY1LCAzMjY5LCAzMjczLCAzMjc3LCAzMjgxLCAzMjg0LCAzMjg4LCAzMjkyLCAKLSAgICAzMjk3LCAzMzAxLCAzMzA2LCAzMzExLCAzMzE2LCAzMzIwLCAzMzIzLCAzMzI2LCAzMzMyLCAzMzM2LCAzMzQwLCAzMzQzLCAKLSAgICAzMzQ3LCAzMzUxLCAzMzU0LCAzMzYwLCAzMzY1LCAzMzcwLCAzMzc2LCAzMzgxLCAzMzg2LCAzMzkyLCAzMzk4LCAzNDAzLCAKLSAgICAzNDA4LCAzNDEzLCAxMTIwLCA1NDcsIDM0MTgsIDM0MjEsIDM0MjYsIDM0MzAsIDM0MzMsIDM0MzcsIDM0NDIsIDM0NDcsIAotICAgIDM0NTEsIDM0NTYsIDM0NjAsIDM0NjUsIDM0NjksIDM0NzMsIDM0NzksIDM0ODUsIDM0ODgsIDM0OTEsIDM0OTcsIDM1MDQsIAotICAgIDM1MTEsIDM1MTcsIDM1MjQsIDM1MjksIDM1MzMsIDM1NDAsIDM1NDcsIDM1NTIsIDM1NTYsIDM1NjYsIDM1NzAsIDM1NzQsIAotICAgIDM1NzksIDM1ODQsIDM1OTQsIDIxMDcsIDM1OTksIDM2MDMsIDM2MDYsIDM2MTIsIDM2MTcsIDM2MjMsIDM2MjksIDM2MzQsIAotICAgIDM2NDEsIDM2NDUsIDM2NDksIDYyMCwgNjcxLCAxMzg4LCAzNjUzLCAzNjYwLCAzNjY3LCAzNjc0LCAzNjgxLCAzNjg3LCAKLSAgICAzNjkzLCAzNjk4LCAzNzAyLCAzNzA4LCAzNzEzLCAzNzE3LCAyMTE2LCAzNzIxLCAzNzI5LCA2MDAsIDM3MzUsIDM3NDYsIAotICAgIDM3NTAsIDM3NjAsIDIxMjEsIDM3NjYsIDM3NzEsIDM3ODYsIDM3OTIsIDM3OTksIDM4MDksIDM4MTUsIDM4MjAsIDM4MjYsIAotICAgIDM4MzIsIDM4MzUsIDM4MzksIDM4NDQsIDM4NTEsIDM4NTYsIDM4NjAsIDM4NjQsIDM4NjgsIDM4NzIsIDM4NzcsIDM4ODMsIAotICAgIDM4OTQsIDMyMTEsIDM4OTksIDM5MTEsIDM5MTksIDM5MjQsIDE1NjQsIDM5MzEsIDM5MzQsIDM5MzcsIDM5NDEsIDM5NDQsIAotICAgIDM5NTAsIDM5NTQsIDM5NjgsIDM5NzIsIDM5NzUsIDM5NzksIDM5ODUsIDM5OTEsIDM5OTYsIDQwMDAsIDQwMDQsIDQwMTAsIAotICAgIDQwMjEsIDQwMjcsIDQwMzIsIDQwMzgsIDQwNDIsIDQwNTAsIDQwNjAsIDQwNjYsIDQwNzEsIDQwODAsIDQwODgsIDQwOTUsIAotICAgIDQwOTksIDQxMDUsIDQxMTQsIDQxMjMsIDQxMjcsIDQxMzIsIDQxMzcsIDQxNDEsIDQxNDksIDQxNTMsIDQxNTgsIDQxNjIsIAotICAgIDIxMjksIDE0MDEsIDQxNjgsIDQxNzMsIDQxNzksIDQxODQsIDQxODksIDQxOTQsIDQxOTksIDQyMDQsIDQyMDksIDQyMTUsIAotICAgIDQyMjAsIDQyMjYsIDQyMzEsIDQyMzYsIDQyNDEsIDQyNDcsIDQyNTIsIDQyNTcsIDQyNjIsIDQyNjcsIDQyNzMsIDQyNzgsIAotICAgIDQyODQsIDQyODksIDQyOTQsIDQyOTksIDQzMDQsIDQzMDksIDQzMTQsIDQzMjAsIDQzMjUsIDQzMzAsIDMxOSwgNDU2LCAKLSAgICA0MzM1LCA0MzQxLCA0MzQ1LCA0MzQ5LCA0MzU0LCA0MzU4LCA0MzYyLCA0MzY1LCA0MzY5LCA0MzczLCA0Mzc3LCA0MzgxLCAKLSAgICA0Mzg2LCA0MzkwLCA0Mzk0LCA0NDAwLCA0MTY1LCA0NDA1LCA0NDA5LCA0NDEyLCA0NDE3LCA0NDIyLCA0NDI3LCA0NDMyLCAKLSAgICA0NDM3LCA0NDQyLCA0NDQ3LCA0NDUyLCA0NDU3LCA0NDYyLCA0NDY2LCA0NDcxLCA0NDc2LCA0NDgxLCA0NDg2LCA0NDkxLCAKLSAgICA0NDk2LCA0NTAxLCA0NTA2LCA0NTExLCA0NTE2LCA0NTIwLCA0NTI1LCA0NTMwLCA0NTM1LCA0NTQwLCA0NTQ1LCA0NTUwLCAKLSAgICA0NTU1LCA0NTYwLCA0NTY1LCA0NTcwLCA0NTc0LCA0NTc5LCA0NTg0LCA0NTg5LCA0NTk0LCA0NTk5LCA0NjA0LCA0NjA5LCAKLSAgICA0NjE0LCA0NjE5LCA0NjI0LCA0NjI4LCA0NjMzLCA0NjM4LCA0NjQzLCA0NjQ4LCA0NjUzLCA0NjU4LCA0NjYzLCA0NjY4LCAKLSAgICA0NjczLCA0Njc4LCA0NjgyLCA0Njg3LCA0NjkyLCA0Njk3LCA0NzAyLCA0NzA3LCA0NzEyLCA0NzE3LCA0NzIyLCA0NzI3LCAKLSAgICA0NzMyLCA0NzM2LCA0NzQxLCA0NzQ2LCA0NzUxLCA0NzU2LCA0NzYxLCA0NzY2LCA0NzcxLCA0Nzc2LCA0NzgxLCA0Nzg2LCAKLSAgICA0NzkwLCA0Nzk1LCA0ODAwLCA0ODA1LCA0ODEwLCA0ODE2LCA0ODIyLCA0ODI4LCA0ODM0LCA0ODQwLCA0ODQ2LCA0ODUyLCAKLSAgICA0ODU3LCA0ODYzLCA0ODY5LCA0ODc1LCA0ODgxLCA0ODg3LCA0ODkzLCA0ODk5LCA0OTA1LCA0OTExLCA0OTE3LCA0OTIyLCAKLSAgICA0OTI4LCA0OTM0LCA0OTQwLCA0OTQ2LCA0OTUyLCA0OTU4LCA0OTY0LCA0OTcwLCA0OTc2LCA0OTgyLCA0OTg3LCA0OTkzLCAKLSAgICA0OTk5LCA1MDA1LCA1MDExLCA1MDE3LCA1MDIzLCA1MDI5LCA1MDM1LCA1MDQxLCA1MDQ3LCA1MDUyLCA1MDU4LCA1MDY0LCAKLSAgICA1MDcwLCA1MDc2LCA1MDgyLCA1MDg4LCA1MDk0LCA1MTAwLCA1MTA2LCA1MTEyLCA1MTE3LCA1MTIzLCA1MTI5LCA1MTM1LCAKLSAgICA1MTQxLCA1MTQ3LCA1MTUzLCA1MTU5LCA1MTY1LCA1MTcxLCA1MTc3LCA1MTgyLCA1MTg2LCA1MTkyLCA1MTk4LCA1MjA0LCAKLSAgICA1MjEwLCA1MjE2LCA1MjIyLCA1MjI4LCA1MjM0LCA1MjQwLCA1MjQ2LCA1MjUxLCA1MjU3LCA1MjYzLCA1MjY5LCA1Mjc1LCAKLSAgICA1MjgxLCA1Mjg3LCA1MjkzLCA1Mjk5LCA1MzA1LCA1MzExLCA1MzE2LCA1MzIyLCA1MzI4LCA1MzM0LCA1MzQwLCA1MzQ2LCAKLSAgICA1MzUyLCA1MzU4LCA1MzY0LCA1MzcwLCA1Mzc2LCA1MzgxLCA1Mzg3LCA1MzkzLCA1Mzk5LCA1NDA1LCA1NDExLCA1NDE3LCAKLSAgICA1NDIzLCA1NDI5LCA1NDM1LCA1NDQxLCA1NDQ2LCA1NDUyLCA1NDU4LCA1NDY0LCA1NDcwLCA1NDc2LCA1NDgyLCA1NDg4LCAKLSAgICA1NDk0LCA1NTAwLCA1NTA2LCA1NTExLCA1NTE3LCA1NTIzLCA1NTI5LCA1NTM1LCA1NTQxLCA1NTQ3LCA1NTUzLCA1NTU5LCAKLSAgICA1NTY1LCA1NTcxLCA1NTc2LCA1NTgyLCA1NTg4LCA1NTk0LCA1NjAwLCA1NjA2LCA1NjEyLCA1NjE4LCA1NjI0LCA1NjMwLCAKLSAgICA1NjM2LCA1NjQxLCA1NjQ3LCA1NjUzLCA1NjU5LCA1NjY1LCA1NjcxLCA1Njc3LCA1NjgzLCA1Njg5LCA1Njk1LCA1NzAxLCAKLSAgICA1NzA2LCA1NzEyLCA1NzE4LCA1NzI0LCA1NzMwLCA1NzM2LCA1NzQyLCA1NzQ4LCA1NzU0LCA1NzYwLCA1NzY2LCA1NzcxLCAKLSAgICA1Nzc3LCA1NzgzLCA1Nzg5LCA1Nzk1LCA1ODAxLCA1ODA3LCA1ODEzLCA1ODE5LCA1ODI1LCA1ODMxLCA1ODM2LCA1ODQwLCAKLSAgICA1ODQzLCA1ODUwLCA1ODU0LCA1ODY3LCA1ODcxLCA1ODc1LCA1ODc5LCA1ODgzLCA1ODg3LCA1ODkxLCA1ODk3LCA1OTA0LCAKLSAgICA1OTEyLCA1OTE2LCA1OTI0LCA1OTMzLCA1OTM5LCA1OTUxLCA1OTU2LCA1OTU5LCA1OTYzLCA1OTczLCA1OTgxLCA1OTg5LCAKLSAgICA1OTk1LCA1OTk5LCA2MDA5LCA2MDE5LCA2MDI3LCA2MDM0LCA2MDQxLCA2MDQ3LCA2MDUzLCA2MDYwLCA2MDY0LCA2MDcxLCAKLSAgICA2MDgxLCA2MDkxLCA2MDk5LCA2MTA2LCA2MTExLCA2MTE1LCA2MTIzLCA2MTI3LCA2MTMyLCA2MTM5LCA2MTQ3LCA2MTUyLCAKLSAgICA2MTU3LCA2MTYxLCA2MTY4LCA2MTczLCA2MTg3LCA2MTkyLCA2MTk3LCA2MjA0LCA2MjEzLCA2MjE2LCA2MjIwLCA2MjI0LCAKLSAgICA2MjI4LCA2MjMxLCA2MjM2LCA2MjQxLCA2MjUwLCA2MjU2LCA2MjYyLCA2MjY4LCA2MjcyLCA2MjgzLCA2MjkzLCA2MzA4LCAKLSAgICA2MzIzLCA2MzM4LCA2MzUzLCA2MzY4LCA2MzgzLCA2Mzk4LCA2NDEzLCA2NDI4LCA2NDQzLCA2NDU4LCA2NDczLCA2NDg4LCAKLSAgICA2NTAzLCA2NTE4LCA2NTMzLCA2NTQ4LCA2NTYzLCA2NTc4LCA2NTkzLCA2NjA4LCA2NjIzLCA2NjM4LCA2NjUzLCA2NjY4LCAKLSAgICA2NjgzLCA2Njk4LCA2NzEzLCA2NzI4LCA2NzQzLCA2NzU4LCA2NzczLCA2Nzg4LCA2ODAzLCA2ODE4LCA2ODMzLCA2ODQ4LCAKLSAgICA2ODYzLCA2ODc4LCA2ODkzLCA2OTA4LCA2OTIzLCA2OTM4LCA2OTUzLCA2OTY4LCA2OTgzLCA2OTk4LCA3MDEzLCA3MDI4LCAKLSAgICA3MDM3LCA3MDQ2LCA3MDUxLCA3MDU3LCA3MDY3LCA3MDcxLCA3MDc2LCA3MDgxLCA3MDg5LCA3MDkzLCA3MDk2LCA3MTAwLCAKLSAgICAyOTc1LCA3MTAzLCA3MTA4LCAyOTgsIDQyNSwgNzExNCwgNzEyMiwgNzEyNiwgNzEzMCwgNzEzMywgNzEzNywgNzE0MywgCi0gICAgNzE0NywgNzE1NSwgNzE2MSwgNzE2NiwgNzE3MywgNzE4MCwgNzE4NiwgNzE5MSwgNzE5OCwgNzIwNCwgNzIxMiwgNzIxNiwgCi0gICAgNzIyMSwgNzIzMywgNzI0NCwgNzI1MSwgNzI1NSwgNzI1OSwgNzI2NSwgMzIzMywgNzI2OSwgNzI3NSwgNzI4MCwgNzI4NSwgCi0gICAgNzI5MCwgNzI5NiwgNzMwMSwgNzMwNiwgNzMxMSwgNzMxNiwgNzMyMiwgNzMyNywgNzMzMiwgNzMzOCwgNzM0MywgNzM0OSwgCi0gICAgNzM1NCwgNzM2MCwgNzM2NSwgNzM3MSwgNzM3NiwgNzM4MSwgNzM4NiwgNzM5MSwgNzM5NiwgNzQwMiwgNzQwNywgNzQxMiwgCi0gICAgNzQxNywgNzQyMywgNzQyOSwgNzQzNSwgNzQ0MSwgNzQ0NywgNzQ1MywgNzQ1OSwgNzQ2NSwgNzQ3MSwgNzQ3NywgNzQ4MywgCi0gICAgNzQ4OSwgNzQ5NCwgNzQ5OSwgNzUwNCwgNzUwOSwgNzUxNCwgNzUxOSwgNzUyNCwgNzUyOSwgNzUzNSwgNzU0MSwgNzU0NiwgCi0gICAgNzU1MiwgNzU1OCwgNzU2NCwgNzU2OSwgNzU3NCwgNzU3OSwgNzU4NCwgNzU5MCwgNzU5NiwgNzYwMSwgNzYwNiwgNzYxMSwgCi0gICAgNzYxNiwgNzYyMSwgNzYyNywgNzYzMiwgNzYzOCwgNzY0NCwgNzY1MCwgNzY1NiwgNzY2MiwgNzY2OCwgNzY3NCwgNzY4MCwgCi0gICAgNzY4NiwgMjEzOCwgNzEzMiwgNzY5MSwgNzY5NSwgNzY5OSwgNzcwMiwgNzcwOSwgNzcxMiwgNzcyMCwgNzcyNSwgNzczMCwgCi0gICAgNzcyMSwgNzczNSwgMjE2NSwgNzczOSwgNzc0NSwgNzc1MSwgNzc1NiwgNzc2MSwgNzc2OCwgNzc3NiwgNzc4MSwgNzc4NSwgCi0gICAgNzc4OCwgNzc5MiwgNzc5OCwgNzgwNCwgNzgwOCwgMjE3MywgNTYwLCA3ODExLCA3ODE1LCA3ODIwLCA3ODI2LCA3ODMxLCAKLSAgICA3ODM1LCA3ODM4LCA3ODQyLCA3ODQ4LCA3ODUzLCA3ODU3LCA3ODY0LCA3ODY4LCA3ODcyLCA3ODc2LCA5NDUsIDc2OSwgCi0gICAgNzg3OSwgNzg4NywgNzg5NCwgNzkwMSwgNzkwNywgNzkxNCwgNzkyMiwgNzkyOSwgNzkzNiwgNzk0MSwgNzk1MywgMTI0NywgCi0gICAgMTQwOSwgMTQxNCwgNzk2NCwgMTQxOSwgNzk2OCwgNzk3MiwgNzk4MSwgNzk4OSwgNzk5OCwgODAwNCwgODAwOSwgODAxMywgCi0gICAgODAxOSwgODAyNCwgMjcwNiwgODAzMSwgODAzNSwgODA0NCwgODA1MywgODA2MiwgODA3MSwgODA3NiwgODA4MSwgODA5MywgCi0gICAgODA5OCwgODEwNiwgMjIyNCwgODExMCwgODExMiwgODExNywgODEyMSwgODEzMCwgODEzOCwgMTQyMywgMTMzLCAzNDYxLCAKLSAgICAzNDY2LCA4MTQ0LCA4MTQ4LCA4MTU3LCA4MTYzLCA4MTY4LCA4MTcxLCA4MTgwLCAyNjk4LCA4MTg2LCA4MTk0LCA4MTk4LCAKLSAgICA4MjAyLCA4MjA2LCAyMjM3LCA4MjEwLCA4MjE1LCA4MjIyLCA4MjI4LCA4MjM0LCA4MjM3LCA4MjM5LCA4MjQyLCA4MjUwLCAKLSAgICA4MjU4LCA4MjY2LCA4MjY5LCA4Mjc0LCAyMjUwLCA4Mjc5LCA3NzMyLCA4MjgyLCA4Mjg0LCA4Mjg5LCA4Mjk0LCA4Mjk5LCAKLSAgICA4MzA0LCA4MzA5LCA4MzE0LCA4MzE5LCA4MzI0LCA4MzI5LCA4MzM0LCA4MzQwLCA4MzQ1LCA4MzUwLCA4MzU1LCA4MzYxLCAKLSAgICA4MzY2LCA4MzcxLCA4Mzc2LCA4MzgxLCA4Mzg2LCA4MzkxLCA4Mzk3LCA4NDAyLCA4NDA3LCA4NDEyLCA4NDE3LCA4NDIyLCAKLSAgICA4NDI3LCA4NDMyLCA4NDM3LCA4NDQyLCA4NDQ3LCA4NDUyLCA4NDU3LCA4NDYyLCA4NDY3LCA4NDcyLCA4NDc3LCA4NDgyLCAKLSAgICA4NDg4LCA4NDk0LCA4NDk5LCA4NTA0LCA4NTA5LCA4NTE0LCA4NTE5LCAyMjYxLCAyMjY4LCAyMjc0LCA4NTI0LCA4NTMwLCAKLSAgICA4NTM4LCAyMzAwLCAyMzA2LCA4NTQ2LCA4NTUwLCA4NTU1LCA4NTU5LCA4NTYzLCA4NTY3LCA4NTcyLCA4NTc2LCA4NTgxLCAKLSAgICA4NTg1LCA4NTg4LCA4NTkxLCA4NTk3LCA4NjAzLCA4NjA5LCA4NjE1LCA4NjIxLCA4NjI3LCA4NjMzLCA4NjM3LCA4NjQxLCAKLSAgICA4NjQ1LCA4NjQ5LCA4NjUzLCA4NjU4LCA4NjY1LCA4Njc2LCA4Njg0LCA4Njk0LCA4NzAwLCA4NzA3LCA4NzEyLCA4NzE2LCAKLSAgICA4NzI3LCA4NzQwLCA4NzUxLCA4NzY0LCA4Nzc1LCA4Nzg3LCA4Nzk5LCA4ODExLCA4ODI0LCA4ODM3LCA4ODQ0LCA4ODUwLCAKLSAgICA4ODY0LCA4ODcxLCA4ODc3LCA4ODgxLCA4ODg2LCA4ODkwLCA4ODk3LCA4OTA1LCA4OTA5LCA4OTE1LCA4OTE5LCA4OTI1LCAKLSAgICA4OTM1LCA4OTM5LCA4OTQ0LCA4OTQ5LCA4OTU2LCA4OTYyLCA4OTcyLCA3OTA5LCA4OTc4LCA4OTgyLCA4OTg5LCA4OTk2LCAKLSAgICA3NjgsIDkwMDAsIDkwMDQsIDkwMDksIDkwMTQsIDkwMTksIDkwMjMsIDkwMjksIDkwMzcsIDkwNDMsIDkwNDcsIDkwNTMsIAotICAgIDkwNjMsIDkwNjcsIDkwNzMsIDkwNzgsIDkwODIsIDkwODgsIDkwOTQsIDIxNjEsIDkwOTksIDkxMDEsIDkxMDYsIDkxMTQsIAotICAgIDkxMjMsIDkxMjcsIDkxMzMsIDkxMzgsIDkxNDMsIDkxNDgsIDkxNTMsIDkxNTksIDkxNjQsIDkxNjksIDQwMDYsIDkxNzQsIAotICAgIDkxNzksIDkxODMsIDkxODksIDkxOTQsIDkyMDAsIDkyMDUsIDkyMTAsIDkyMTYsIDkyMjEsIDkxMjgsIDkyMjcsIDkyMzEsIAotICAgIDkyMzgsIDkyNDQsIDkyNDksIDkyNTMsIDYxODMsIDkyNTgsIDkyNjcsIDkyNzIsIDkyNzcsIDgyMTgsIDgyMjUsIDkyODIsIAotICAgIDI4NTMsIDkyODYsIDkyOTEsIDkyOTYsIDkxMzksIDkzMDAsIDkzMDUsIDkxNDQsIDkxNDksIDkzMTAsIDkzMTcsIDkzMjQsIAotICAgIDkzMzAsIDkzMzYsIDkzNDIsIDkzNDcsIDkzNTIsIDkzNTcsIDkxNTQsIDkxNjAsIDkzNjMsIDkzNjksIDkzNzQsIDkzODIsIAotICAgIDkxNjUsIDkzODcsIDk5MCwgOTM5MCwgOTM5OCwgOTQwNCwgOTQxMCwgOTQxOSwgOTQyNywgOTQzMiwgOTQzOCwgOTQ0NiwgCi0gICAgOTQ1MywgOTQ2OCwgOTQ4NSwgOTUwNCwgOTUxMywgOTUyMSwgOTUzNiwgOTU0NywgOTU1NywgOTU2NywgOTU3NSwgOTU4MSwgCi0gICAgOTU5MywgOTYwMiwgOTYxMCwgOTYxNywgOTYyNCwgOTYzMCwgOTYzNSwgOTY0MywgOTY1MywgOTY2MCwgOTY3MCwgOTY4MCwgCi0gICAgOTY5MCwgOTY5OCwgOTcwNSwgOTcxNCwgOTcyNCwgOTczOCwgOTc1MywgOTc2MiwgOTc3MCwgOTc3NSwgOTc3OSwgOTc4OCwgCi0gICAgOTc5NCwgOTc5OSwgOTgwOSwgOTgxOSwgOTgyOSwgOTgzNCwgOTgzOCwgOTg0NywgOTg1MiwgOTg2MiwgOTg3MywgOTg4NiwgCi0gICAgOTg5NCwgOTkwNywgOTkxOSwgOTkyNywgOTkzMiwgOTkzNiwgOTk0MiwgOTk0NywgOTk1NSwgOTk2MywgOTk3MCwgOTk3NSwgCi0gICAgOTk4MywgOTk4OSwgOTk5MiwgOTk5NiwgMTAwMDIsIDEwMDEwLCAxMDAxNSwgMTAwMTksIDEwMDI3LCAxMDAzNiwgMTAwNDQsIAotICAgIDEwMDUwLCAxMDA1NCwgMTAwNjEsIDEwMDcyLCAxMDA3NiwgMTAwNzksIDEwMDg1LCA5MTcwLCAxMDA5MCwgMTAwOTYsIAotICAgIDEwMTAzLCAxMDEwOSwgMTAxMTQsIDEwMTIxLCAxMDEyOCwgMTAxMzUsIDEwMTQyLCAxMDE0OSwgMTAxNTYsIDEwMTYzLCAKLSAgICAxMDE3MCwgMTAxNzUsIDk0ODEsIDEwMTgwLCAxMDE4NiwgMTAxOTMsIDEwMjAwLCAxMDIwNSwgMTAyMTIsIDEwMjIxLCAKLSAgICAxMDIyNSwgMTAyMzcsIDgyNTYsIDEwMjQxLCAxMDI0NCwgMTAyNDgsIDEwMjUyLCAxMDI1NiwgMTAyNjAsIDEwMjY2LCAKLSAgICAxMDI3MiwgMTAyNzcsIDEwMjgzLCAxMDI4OCwgMTAyOTMsIDEwMjk5LCAxMDMwNCwgMTAzMDksIDg5NTIsIDEwMzE0LCAKLSAgICAxMDMxOCwgMTAzMjIsIDEwMzI2LCAxMDMzMSwgMTAzMzYsIDEwMzQ0LCAxMDM1MCwgMTAzNTQsIDEwMzU4LCAxMDM2NSwgCi0gICAgMTAzNzAsIDEwMzc4LCAxMDM4MywgMTAzODcsIDEwMzkwLCAxMDM5NiwgMTA0MDMsIDEwNDA3LCAxMDQxMCwgMTA0MTUsIAotICAgIDEwNDE5LCA0MDQ1LCAxMDQyNSwgMTA0MzQsIDM2LCAxMDQ0MiwgMTA0NDgsIDEwNDUzLCA4OTY3LCAxMDQ1OCwgMTA0NjMsIAotICAgIDEwNDY3LCAxMDQ3MCwgMTA0ODUsIDEwNTA0LCAxMDUxNiwgMTA1MjksIDEwNTQyLCAxMDU1NSwgMTA1NjksIDEwNTgyLCAKLSAgICAxMDU5NywgMTA2MDQsIDkxNzUsIDEwNjEwLCAxMDYyNCwgMTA2MjksIDEwNjM1LCAxMDY0MCwgMTA2NDgsIDEwNjUzLCAKLSAgICA4MDQwLCAxMDY1OCwgMTA2NjEsIDEwNjY4LCAxMDY3MywgMTA2NzcsIDI4NTgsIDk5OCwgMTA2ODMsIDEwNjg3LCAxMDY5MywgCi0gICAgMTA2OTksIDEwNzA0LCAxMDcxMCwgMTA3MTUsIDkxODQsIDEwNzIxLCAxMDcyNywgMTA3MzIsIDEwNzM3LCAxMDc0NSwgCi0gICAgMTA3NTEsIDEwNzY0LCAxMDc3MiwgMTA3NzksIDkxOTAsIDEwNzg1LCAxMDc5MywgMTA4MDEsIDEwODA4LCAxMDgyMSwgCi0gICAgMTA4MzMsIDEwODQzLCAxMDg1MSwgMTA4NTgsIDEwODY1LCAxMDg3NCwgMTA4ODMsIDEwODkxLCAxMDg5OCwgMTA5MDMsIAotICAgIDEwOTA5LCA5MTk1LCAxMDkxNCwgMTA5MjAsIDkyMDEsIDEwOTI1LCAxMDkyOCwgMTA5MzUsIDEwOTQxLCAxMDk1NCwgODY2OSwgCi0gICAgMTA5NjUsIDEwOTcxLCAxMDk4MCwgMTA5ODgsIDEwOTk1LCAxMTAwMSwgMTEwMDcsIDExMDEyLCAxMTAxNiwgMTEwMjEsIAotICAgIDEwNDc3LCAxMTAyNywgOTIwNiwgMTEwMzQsIDExMDM5LCAxMTA0NiwgMTEwNTIsIDExMDU4LCAxMTA2MywgMTEwNzEsIAotICAgIDExMDc5LCAxMTA4NiwgMTEwOTAsIDExMTA0LCAxMTExNCwgMTExMTksIDExMTIzLCAxMTEzNCwgMTExNDAsIDExMTQ1LCAKLSAgICAxMTE1MCwgOTIxMSwgOTIxNywgMTExNTQsIDExMTU3LCAxMTE2MiwgMTExNzQsIDExMTgxLCAxMTE4NiwgMTExOTAsIAotICAgIDExMTk1LCAxMTE5OSwgMTEyMDYsIDExMjEyLCA5MjIyLCA5MTI5LCAxMTIxOSwgMjg2MywgOCwgMTEyMjYsIDExMjMxLCAKLSAgICAxMTIzNSwgMTEyNDEsIDExMjQ5LCAxMTI1OSwgMTEyNjQsIDExMjY5LCAxMTI3NiwgMTEyODMsIDExMjg3LCAxMTI5OCwgCi0gICAgMTEzMDgsIDExMzE3LCAxMTMyOSwgMTEzMzQsIDExMzM4LCAxMTM0NiwgMTEzNjAsIDExMzY0LCAxMTM2NywgMTEzNzUsIAotICAgIDExMzgyLCAxMTM5MCwgMTEzOTQsIDExNDA1LCAxMTQwOSwgMTE0MTYsIDExNDIxLCAxMTQyNSwgMTE0MzEsIDExNDM2LCAKLSAgICAxMTQ0MCwgMTE0NDYsIDExNDUxLCAxMTQ2MiwgMTE0NjYsIDExNDY5LCAxMTQ3NSwgMTE0ODAsIDExNDg2LCAxMTQ5MiwgCi0gICAgMTE0OTksIDExNTEwLCAxMTUyMCwgMTE1MzAsIDExNTM5LCAxMTU0NiwgMTE1NTUsIDkyMzIsIDkyMzksIDkyNDUsIDkyNTAsIAotICAgIDExNTYxLCAxMTU2NywgOTI1NCwgMTE1NzMsIDExNTc2LCAxMTU4MywgMTE1ODgsIDExNjAzLCAxMTYxOSwgMTE2MzQsIAotICAgIDExNjQyLCAxMTY0OCwgMTE2NTMsIDgzOCwgNDIwLCAxMTY1OCwgMTE2NjYsIDExNjczLCAxMTY3OSwgMTE2ODQsIDExNjg5LCAKLSAgICA5MjU5LCAxMTY5MSwgMTE2OTUsIDExNzAwLCAxMTcwNCwgMTE3MTQsIDExNzE5LCAxMTcyMywgMTE3MzIsIDExNzM2LCAKLSAgICAxMTczOSwgOTI2OCwgMTE3NDYsIDExNzQ5LCAxMTc1NywgMTE3NjQsIDExNzcyLCAxMTc3NiwgMTE3ODMsIDExNzkyLCAKLSAgICAxMTc5NSwgMTE3OTksIDExODAzLCAxMTgwOSwgMTE4MTMsIDExODE3LCAxMTgyMSwgMTE4MjcsIDExODM3LCAxMTg0MSwgCi0gICAgMTE4NDksIDExODUzLCAxMTg2MCwgMTE4NjQsIDExODY5LCAxMTg3MywgMTE4ODAsIDExODg2LCAxMTg5NCwgMTE5MDAsIAotICAgIDExOTA1LCAxMTkxNSwgMTE5MjAsIDExOTI1LCAxMTkyOSwgMTE5MzcsIDM5MDUsIDExOTQ1LCAxMTk1MCwgOTI3MywgCi0gICAgMTE5NTQsIDExOTU4LCAxMTk2MSwgMTE5NjksIDExOTc2LCAxMTk4MCwgNTk5MSwgMTE5ODQsIDExOTg5LCAxMTk5MywgCi0gICAgMTIwMDQsIDEyMDE0LCAxMjAxOSwgMTIwMjUsIDEyMDI5LCAxMjAzMiwgMTIwNDAsIDEyMDQ1LCAxMjA1MCwgMTIwNTcsIAotICAgIDEyMDYyLCA5Mjc4LCAxMjA2NywgMTIwNzEsIDEyMDc4LCAxNzIyLCA2MTQ1LCAxMjA4MywgMTIwODgsIDEyMDkzLCAxMjA5OCwgCi0gICAgMTIxMDQsIDEyMTA5LCAxMjExNSwgMTIxMjAsIDEyMTI1LCAxMjEzMCwgMTIxMzUsIDEyMTQwLCAxMjE0NSwgMTIxNTAsIAotICAgIDEyMTU1LCAxMjE2MCwgMTIxNjUsIDEyMTcwLCAxMjE3NSwgMTIxODAsIDEyMTg1LCAxMjE5MCwgMTIxOTUsIDEyMjAxLCAKLSAgICAxMjIwNiwgMTIyMTEsIDEyMjE2LCAxMjIyMSwgMTIyMjYsIDEyMjMyLCAxMjIzNywgMTIyNDIsIDEyMjQ4LCAxMjI1MywgCi0gICAgMTIyNTksIDEyMjY0LCAxMjI3MCwgMTIyNzUsIDEyMjgwLCAxMjI4NSwgMTIyOTAsIDEyMjk2LCAxMjMwMSwgMTIzMDYsIAotICAgIDEyMzExLCA3MzcsIDEzOSwgMTIzMTksIDEyMzIzLCAxMjMyOCwgMTIzMzMsIDEyMzM3LCAxMjM0MSwgMTIzNDUsIDEyMzUwLCAKLSAgICAxMjM1NCwgMTIzNTksIDEyMzYzLCAxMjM2NiwgMTIzNzAsIDEyMzc0LCAxMjM4MCwgMTIzODUsIDEyMzk1LCAxMjQwMSwgCi0gICAgMTI0MDksIDEyNDEzLCAxMjQxNywgMTI0MjQsIDEyNDMyLCAxMjQ0MSwgMTI0NTIsIDEyNDU5LCAxMjQ2NiwgMTI0NzAsIAotICAgIDEyNDc5LCAxMjQ4OCwgMTI0OTYsIDEyNTA1LCAxMjUxNCwgMTI1MjMsIDEyNTMyLCAxMjU0MiwgMTI1NTIsIDEyNTYyLCAKLSAgICAxMjU3MiwgMTI1ODIsIDEyNTkxLCAxMjYwMSwgMTI2MTEsIDEyNjIxLCAxMjYzMSwgMTI2NDEsIDEyNjUxLCAxMjY2MSwgCi0gICAgMTI2NzAsIDEyNjgwLCAxMjY5MCwgMTI3MDAsIDEyNzEwLCAxMjcyMCwgMTI3MzAsIDEyNzM5LCAxMjc0OSwgMTI3NTksIAotICAgIDEyNzY5LCAxMjc3OSwgMTI3ODksIDEyNzk5LCAxMjgwOSwgMTI4MTksIDEyODI5LCAxMjgzOCwgMTI4NDgsIDEyODU4LCAKLSAgICAxMjg2OCwgMTI4NzgsIDEyODg4LCAxMjg5OCwgMTI5MDgsIDEyOTE4LCAxMjkyOCwgMTI5MzgsIDEyOTQ3LCAxMjU2LCAKLSAgICAxMjk1MywgMTI5NTYsIDEyOTYwLCAxMjk2NSwgMTI5NzIsIDEyOTc4LCAxMjk4MywgMTI5ODcsIDEyOTkyLCAxMzAwMSwgCi0gICAgMTMwMDksIDEzMDE0LCAxMzAxOCwgMTMwMjIsIDEzMDI4LCAxMzAzMywgMTMwMzksIDkyODcsIDEzMDQ0LCAxMzA0OSwgCi0gICAgMTMwNTgsIDkyOTIsIDEzMDYzLCAxMzA2NiwgMTMwNzIsIDEzMDgwLCA5Mjk3LCAxMzA4NywgMTMwOTEsIDEzMDk1LCAKLSAgICAxMzA5OSwgMTMxMDksIDEzMTE1LCAxMzEyMSwgMTMxMjYsIDEzMTM1LCAxMzE0MywgMTMxNTAsIDEzMTU3LCAxMzE2MiwgCi0gICAgMTMxNjksIDEzMTc0LCAxMzE3OCwgMTMxODEsIDEzMTkyLCAxMzIwMiwgMTMyMTEsIDEzMjE5LCAxMzIzMCwgMTMyNDIsIAotICAgIDEzMjUyLCAxMzI1NywgMTMyNjEsIDEzMjY2LCAxMzI3MSwgMTMyNzUsIDEzMjgxLCAxMzI4OSwgMTMyOTYsIDEzMzA3LCAKLSAgICAxMzMxMiwgMTMzMjIsIDEzMzI2LCAxMzMyOSwgMTMzMzYsIDEzMzQ2LCAxMzM1NSwgMTMzNjIsIDEzMzY2LCAxMzM3MywgCi0gICAgMTMzNzksIDEzMzg0LCAxMzM4OSwgMTMzOTMsIDEzNDAyLCAxMzQwNywgMTM0MTMsIDEzNDE3LCAxMzQyMiwgMTM0MjYsIAotICAgIDEzNDM1LCAxMzQ0MywgMTM0NTEsIDEzNDU4LCAxMzQ2NiwgMTM0NzgsIDEzNDg5LCAxMzQ5OSwgMTM1MDYsIDEzNTEyLCAKLSAgICAxMzUyMSwgMTM1MzIsIDEzNTQxLCAxMzU1MywgMTM1NjUsIDEzNTc3LCAxMzU4NywgMTM1OTYsIDEzNjA1LCAxMzYxMywgCi0gICAgMTM2MjAsIDEzNjI5LCAxMzYzNywgMTM2NDEsIDEzNjQ3LCAxMzY1MywgMTM2NTgsIDc3NTMsIDEzNjYyLCAxMzY2NCwgCi0gICAgMTM2NjgsIDEzNjczLCAxMzY3OSwgMTM2ODgsIDEzNjkyLCAxMzY5OCwgMTM3MDYsIDEzNzEzLCAxMzcyMiwgMTM3MzEsIAotICAgIDEzNzQwLCAxMzc0OSwgMTM3NTgsIDEzNzY3LCAxMzc3NiwgMTM3ODUsIDEzNzk1LCAxMzgwNSwgMTM4MTQsIDEzODIwLCAKLSAgICAxMzgyNywgMTM4MzQsIDEzODQwLCAxMzg1NCwgMTM4NjEsIDEzODY5LCAxMzg3OCwgMTM4ODQsIDEzODkzLCAxMzkwMiwgCi0gICAgMTM5MTMsIDEzOTIzLCAxMzkzMSwgMTM5MzgsIDEzOTQ2LCAxMzk1NSwgMTM5NjgsIDEzOTc2LCAxMzk4MywgMTM5OTYsIAotICAgIDE0MDAyLCAxNDAwOCwgMTQwMTgsIDE0MDI3LCAxNDAzNiwgMTQwNDEsIDE0MDQ1LCAxNDA1MSwgMTQwNTcsIDE0MDY0LCAKLSAgICA4OTY2LCAxNDA2OSwgMTQwNzQsIDE0MDgxLCAxNDA4NiwgMTIzNzYsIDE0MDkxLCAxNDA5OSwgMTQxMDUsIDE0MTEwLCAKLSAgICAxNDExOCwgMTQxMjYsIDE0MTMzLCAxNDE0MSwgMTQxNDcsIDE0MTU1LCAxNDE2MywgMTQxNjksIDE0MTc0LCAxNDE4MCwgCi0gICAgMTQxODcsIDE0MTkzLCAxNDE5OCwgMTQyMDIsIDE0MjEzLCAxNDIyMSwgMTQyMjcsIDE0MjMyLCAxNDI0MSwgMTQyNDcsIAotICAgIDE0MjUyLCAxNDI2MSwgMTQyNzUsIDM4NTMsIDE0Mjc5LCAxNDI4NCwgMTQyODksIDE0Mjk1LCAxNDMwMCwgMTQzMDUsIAotICAgIDE0MzA5LCAxNDMxNCwgMTQzMTksIDE0MzI0LCA3NzUyLCAxNDMyOSwgMTQzMzQsIDE0MzM5LCAxNDM0NCwgMTQzNDksIAotICAgIDE0MzUzLCAxNDM1OCwgMTQzNjMsIDE0MzY4LCAxNDM3MywgMTQzNzksIDE0Mzg1LCAxNDM5MCwgMTQzOTQsIDE0Mzk5LCAKLSAgICAxNDQwNCwgMTQ0MDksIDkzMDEsIDE0NDE0LCAxNDQxOSwgMTQ0MjQsIDE0NDI5LCAxNDQzNCwgMTQ0NTEsIDE0NDY5LCAKLSAgICAxNDQ4MSwgMTQ0OTQsIDE0NTExLCAxNDUyNywgMTQ1NDQsIDE0NTU0LCAxNDU3MywgMTQ1ODQsIDE0NTk1LCAxNDYwNiwgCi0gICAgMTQ2MTcsIDE0NjI5LCAxNDY0MCwgMTQ2NTEsIDE0NjY4LCAxNDY3OSwgMTQ2OTAsIDE0Njk1LCA5MzA2LCAxNDcwMCwgCi0gICAgMTQ3MDQsIDIzODEsIDE0NzA4LCAxNDcxMSwgMTQ3MTcsIDE0NzI1LCAxNDczMywgMTQ3MzgsIDE0NzQ2LCAxNDc1NCwgCi0gICAgMTQ3NjEsIDE0NzY2LCAxNDc3MiwgMTQ3NzksIDE0Nzg3LCAxNDc5NCwgMTQ4MDYsIDE0ODE0LCAxNDgxOSwgMTE1OTcsIAotICAgIDE0ODI1LCAxNDgzNCwgMTQ4NDMsIDE0ODUxLCAxNDg1OCwgMTQ4NjQsIDE0ODcyLCAxNDg3OSwgMTQ4ODUsIDE0ODkyLCAKLSAgICAxNDg5OCwgMTQ5MDcsIDE0OTE1LCAxNDkyNSwgMTQ5MzIsIDE0OTM4LCAxNDk0NiwgMTQ5NTIsIDE0OTYwLCAxNDk2NywgCi0gICAgMTQ5ODAsIDE0OTg3LCAxNDk5NiwgMTUwMDUsIDE1MDE0LCAxNTAyMiwgMTUwMzIsIDE1MDM5LCAxNTA0NCwgMzU2MCwgCi0gICAgMTUwNTEsIDE1MDU2LCAxMzcyLCAxNTA2MCwgMTQzMzAsIDE1MDY0LCAxNTA3MCwgMTUwNzQsIDE1MDgyLCAxNTA5NCwgCi0gICAgMTUwOTksIDE1MTA2LCAxNTExMiwgMTUxMTcsIDE1MTI0LCAxNDMzNSwgMTUxMjgsIDE1MTMyLCAxNTEzNiwgMTQzNDAsIAotICAgIDE1MTQwLCAxNDM0NSwgMTUxNDQsIDE1MTUxLCAxNTE1NiwgMTUxNjAsIDE1MTY3LCAxNTE3MSwgMTUxNzksIDE1MTg2LCAKLSAgICAxNTE5MCwgMTUxOTcsIDE1MjE0LCAxNTIyMywgMTUyMjcsIDE1MjMwLCAxNTIzOCwgMTUyNDQsIDE1MjQ5LCAzNjM4LCAKLSAgICAxNTI1MywgMTUyNTUsIDE1MjYzLCAxNTI3MCwgMTUyODAsIDE1MjkyLCAxNTI5NywgMTUzMDMsIDE1MzA4LCAxNTMxMiwgCi0gICAgMTUzMTgsIDE1MzIzLCAxNTMyOSwgMTUzMzIsIDE1MzM5LCAxNTM0NywgMTUzNTQsIDE1MzYwLCAxNTM2NiwgMTUzNzEsIAotICAgIDE1Mzc4LCAxNTM4NCwgMTUzODksIDE1Mzk2LCAxNTQwMCwgMTU0MDYsIDE1NDEwLCAxNTQxNywgMTU0MjMsIDE1NDI5LCAKLSAgICAxNTQzNywgMTU0NDMsIDE1NDQ4LCAxNTQ1NCwgMTU0NjIsIDE1NDcwLCAxNTQ3NiwgMTU0ODIsIDE1NDg3LCAxNTQ5NCwgCi0gICAgMTU0OTksIDE1NTAzLCAxNTUwOSwgMTU1MTQsIDE1NTIxLCAxNTUyNiwgMTU1MzIsIDE1NTM1LCAxNTU0MSwgMTU1NDcsIAotICAgIDE1NTUwLCAxNTU1NCwgMTU1NjYsIDE1NTcyLCAxNTU3NywgMTU1ODQsIDE1NTkwLCAxNTU5NiwgMTU2MDcsIDE1NjE3LCAKLSAgICAxNTYyNiwgMTU2MzQsIDE1NjQxLCAxNTY1MiwgMTU2NjIsIDE1NjcyLCAxNTY4MCwgMTU2ODMsIDE0MzU5LCAxNTY4OCwgCi0gICAgMTU2OTMsIDE0MzY0LCAxNDQ5OSwgMTU3MDEsIDE1NzE0LCAxNTcyOSwgMTU3NDAsIDE0NTE2LCAxNTc1OCwgMTU3NzEsIAotICAgIDE1Nzg0LCAxNTc5NSwgMTA0OTIsIDE1ODA2LCAxNTgxOSwgMTU4MzgsIDE1ODQ5LCAxNTg2MCwgMTU4NzEsIDI2NDksIAotICAgIDE1ODg0LCAxNTg4OCwgMTU4OTYsIDE1OTExLCAxNTkyNiwgMTU5MzcsIDE1OTQ0LCAxNTk1MCwgMTU5NTgsIDE1OTYyLCAKLSAgICAxNTk2OCwgMTU5NzEsIDE1OTgxLCAxNTk4OSwgMTU5OTYsIDE2MDA0LCAxNjAxNCwgMTYwMTksIDE2MDI2LCAxNjAzMSwgCi0gICAgMTYwMzgsIDE2MDQ5LCAxNjA1OSwgMTYwNjUsIDE2MDcwLCAxNjA3NSwgMTQzNjksIDE2MDc5LCAxNjA4NSwgMTYwOTEsIAotICAgIDE2MDk2LCAxNjEwMSwgMTYxMDYsIDE2MTEwLCAxNDM3NCwgMTQzODAsIDE2MTE0LCAxNDM4NiwgMTYxMTksIDE2MTI3LCAKLSAgICAxNjEzNiwgMTYxNDMsIDkxNTAsIDE2MTQ3LCAxNjE0OSwgMTYxNTQsIDE2MTU5LCAxNjE2NSwgMTYxNzAsIDE2MTc1LCAKLSAgICAxNjE4MCwgMTYxODUsIDE2MTg5LCAxNjE5NSwgMTYyMDEsIDE2MjA2LCAxNjIxMiwgMTYyMTcsIDE2MjIyLCAxNjIyOCwgCi0gICAgMTYyMzMsIDE2MjM4LCAxNjI0MywgMTYyNDgsIDE2MjU0LCAxNjI1OSwgMTYyNjQsIDE2MjcwLCAxNjI3NiwgMTYyODEsIAotICAgIDE2Mjg2LCAxNjI5MywgMTYyOTksIDE2MzEwLCAxNjMxNywgMTYzMjIsIDE2MzI2LCAxNjMzMCwgMTYzMzMsIDE2MzQxLCAKLSAgICAxNjM0NiwgMTYzNTMsIDE2MzYwLCAxNjM2NiwgMTYzNzEsIDE2Mzc2LCAxNjM4MywgMTYzOTMsIDE2Mzk4LCAxNjQwNSwgCi0gICAgMTY0MTEsIDE2NDIxLCAxNjQzMSwgMTY0NDUsIDE2NDU5LCAxNjQ3MywgMTY0ODcsIDE2NTAyLCAxNjUxNywgMTY1MzQsIAotICAgIDE2NTUyLCAxNjU2NSwgMTY1NzEsIDE2NTc2LCAxNjU4MSwgMTY1ODUsIDE2NTkwLCAxNjU5OCwgMTY2MDQsIDE2NjA5LCAKLSAgICAxNjYxNCwgMTY2MTgsIDE2NjIzLCAxNjYyNywgMTY2MzIsIDE2NjM2LCAxNjY0NywgMTY2NTMsIDE2NjU4LCAxNjY2MywgCi0gICAgMTY2NzAsIDE2Njc1LCAxNjY3OSwgMTY2ODQsIDE2Njg5LCAxNjY5NSwgMTY3MDIsIDE2NzA4LCAxNjcxMywgMTY3MTcsIAotICAgIDE2NzIzLCAxNjcyOCwgMTY3MzMsIDE2NzM3LCAxNjc0MywgMTY3NDgsIDE2NzUzLCAxNjc2MCwgMTY3NjUsIDEzMTExLCAKLSAgICAxNjc2OSwgMTY3NzQsIDE2Nzc4LCAxNjc4MywgMTY3ODksIDE2Nzk1LCAxNjgwMiwgMTY4MTIsIDE2ODIwLCAxNjgyNywgCi0gICAgMTY4MzIsIDE2ODM2LCAxNjg0NSwgMTY4NTMsIDE2ODYwLCAxNjg2NywgMTY4NzMsIDE2ODc5LCAxNjg4NCwgMTY4ODksIAotICAgIDE2ODk1LCAxNjkwMCwgMTY5MDYsIDE2OTExLCAxNjkxNywgMTY5MjMsIDE2OTMwLCAxNjkzNiwgMTY5NDEsIDE2OTQ2LCAKLSAgICA5MzQ4LCAxNjk1NSwgMTY5NTgsIDE2OTY0LCAxNjk2OSwgMTY5NzQsIDE2OTg0LCAxNjk5MSwgMTY5OTcsIDE3MDAyLCAKLSAgICAxNzAwNywgMTcwMTMsIDE3MDE4LCAxNzAyNCwgMTcwMjksIDE3MDM1LCAxNzA0MSwgMTcwNDYsIDE3MDU0LCAxNzA2MSwgCi0gICAgMTcwNjYsIDE3MDcxLCAxNzA3NywgMTcwODIsIDE3MDg2LCAxNzA5NSwgMTcxMDYsIDE3MTEzLCAxNzExOCwgMTcxMjYsIAotICAgIDE3MTMyLCAxNzEzOSwgMTcxNDUsIDE3MTUwLCAxNzE1NCwgMTcxNjAsIDE3MTY1LCAxNzE3MCwgMTcxNzUsIDE0NDAsIAotICAgIDc3NzcsIDI4NzcsIDE3MTc5LCAxNzE4MywgMTcxODcsIDE3MTkxLCAxNzE5NSwgMTcxOTksIDE3MjAyLCAxNzIwOSwgCi0gICAgMTcyMTcsIDE0NDAwLCAxNzIyNCwgMTcyMzQsIDE3MjQyLCAxNzI0OSwgMTcyNTcsIDE3MjY3LCAxNzI3NiwgMTcyODksIAotICAgIDE3Mjk0LCAxNzI5OSwgMTczMDcsIDE3MzE0LCAxMzIwNywgMTMyMTYsIDE3MzIxLCAxNzMzMSwgMTczNDYsIDE3MzUyLCAKLSAgICAxNzM1OSwgMTczNjYsIDE3MzcyLCAxNzM4MCwgMTczOTAsIDE3NDAwLCAxNDQwNSwgMTc0MDksIDE3NDE1LCAxNzQyMSwgCi0gICAgMTc0MjksIDE3NDM3LCAxNzQ0MiwgMTc0NTEsIDE3NDU5LCAxNzQ3MSwgMTc0ODEsIDE3NDkxLCAxNzUwMSwgMTc1MTAsIAotICAgIDE3NTIyLCAxNzUzMiwgMTc1NDIsIDE3NTUzLCAxNzU1OCwgMTc1NzAsIDE3NTgyLCAxNzU5NCwgMTc2MDYsIDE3NjE4LCAKLSAgICAxNzYzMCwgMTc2NDIsIDE3NjU0LCAxNzY2NiwgMTc2NzgsIDE3Njg5LCAxNzcwMSwgMTc3MTMsIDE3NzI1LCAxNzczNywgCi0gICAgMTc3NDksIDE3NzYxLCAxNzc3MywgMTc3ODUsIDE3Nzk3LCAxNzgwOSwgMTc4MjAsIDE3ODMyLCAxNzg0NCwgMTc4NTYsIAotICAgIDE3ODY4LCAxNzg4MCwgMTc4OTIsIDE3OTA0LCAxNzkxNiwgMTc5MjgsIDE3OTQwLCAxNzk1MSwgMTc5NjMsIDE3OTc1LCAKLSAgICAxNzk4NywgMTc5OTksIDE4MDExLCAxODAyMywgMTgwMzUsIDE4MDQ3LCAxODA1OSwgMTgwNzEsIDE4MDgyLCAxODA5NCwgCi0gICAgMTgxMDYsIDE4MTE4LCAxODEzMCwgMTgxNDIsIDE4MTU0LCAxODE2NiwgMTgxNzgsIDE4MTkwLCAxODIwMiwgMTgyMTMsIAotICAgIDE4MjI1LCAxODIzNywgMTgyNDksIDE4MjYxLCAxODI3MywgMTgyODUsIDE4Mjk3LCAxODMwOSwgMTgzMjEsIDE4MzMzLCAKLSAgICAxODM0NCwgMTgzNTYsIDE4MzY4LCAxODM4MCwgMTgzOTIsIDE4NDA0LCAxODQxNiwgMTg0MjgsIDE4NDQwLCAxODQ1MiwgCi0gICAgMTg0NjQsIDE4NDc1LCAxODQ4NywgMTg0OTksIDE4NTExLCAxODUyMywgMTg1MzYsIDE4NTQ5LCAxODU2MiwgMTg1NzUsIAotICAgIDE4NTg4LCAxODYwMSwgMTg2MTQsIDE4NjI2LCAxODYzOSwgMTg2NTIsIDE4NjY1LCAxODY3OCwgMTg2OTEsIDE4NzA0LCAKLSAgICAxODcxNywgMTg3MzAsIDE4NzQzLCAxODc1NiwgMTg3NjgsIDE4NzgxLCAxODc5NCwgMTg4MDcsIDE4ODIwLCAxODgzMywgCi0gICAgMTg4NDYsIDE4ODU5LCAxODg3MiwgMTg4ODUsIDE4ODk4LCAxODkxMCwgMTg5MjMsIDE4OTM2LCAxODk0OSwgMTg5NjIsIAotICAgIDE4OTc1LCAxODk4OCwgMTkwMDEsIDE5MDE0LCAxOTAyNywgMTkwNDAsIDE5MDUyLCAxOTA2NSwgMTkwNzgsIDE5MDkxLCAKLSAgICAxOTEwNCwgMTkxMTcsIDE5MTMwLCAxOTE0MywgMTkxNTYsIDE5MTY5LCAxOTE4MiwgMTkxOTQsIDE5MjA3LCAxOTIyMCwgCi0gICAgMTkyMzMsIDE5MjQ2LCAxOTI1OSwgMTkyNzIsIDE5Mjg1LCAxOTI5OCwgMTkzMTEsIDE5MzI0LCAxOTMzNiwgMTkzNDcsIAotICAgIDE5MzYwLCAxOTM3MywgMTkzODYsIDE5Mzk5LCAxOTQxMiwgMTk0MjUsIDE5NDM4LCAxOTQ1MSwgMTk0NjQsIDE5NDc3LCAKLSAgICAxOTQ4OSwgMTk1MDIsIDE5NTE1LCAxOTUyOCwgMTk1NDEsIDE5NTU0LCAxOTU2NywgMTk1ODAsIDE5NTkzLCAxOTYwNiwgCi0gICAgMTk2MTksIDE5NjMxLCAxOTY0NCwgMTk2NTcsIDE5NjcwLCAxOTY4MywgMTk2OTYsIDE5NzA5LCAxOTcyMiwgMTk3MzUsIAotICAgIDE5NzQ4LCAxOTc2MSwgMTk3NzMsIDE5Nzg2LCAxOTc5OSwgMTk4MTIsIDE5ODI1LCAxOTgzOCwgMTk4NTEsIDE5ODY0LCAKLSAgICAxOTg3NywgMTk4OTAsIDE5OTAzLCAxOTkxNSwgMTk5MjgsIDE5OTQxLCAxOTk1NCwgMTk5NjcsIDE5OTgwLCAxOTk5MywgCi0gICAgMjAwMDYsIDIwMDE5LCAyMDAzMiwgMjAwNDUsIDIwMDU3LCAyMDA3MCwgMjAwODMsIDIwMDk2LCAyMDEwOSwgMjAxMjIsIAotICAgIDIwMTM1LCAyMDE0OCwgMjAxNjEsIDIwMTc0LCAyMDE4NywgMjAxOTksIDIwMjEyLCAyMDIyNSwgMjAyMzgsIDIwMjUxLCAKLSAgICAyMDI2NCwgMjAyNzcsIDIwMjkwLCAyMDMwMywgMjAzMTYsIDIwMzI5LCAyMDM0MSwgMjAzNTQsIDIwMzY3LCAyMDM4MCwgCi0gICAgMjAzOTMsIDIwNDA2LCAyMDQxOSwgMjA0MzIsIDIwNDQ1LCAyMDQ1OCwgMjA0NzEsIDIwNDgzLCAyMDQ5NiwgMjA1MDksIAotICAgIDIwNTIyLCAyMDUzNSwgMjA1NDgsIDIwNTYxLCAyMDU3NCwgMjA1ODcsIDIwNjAwLCAyMDYxMywgMjA2MjUsIDIwNjM4LCAKLSAgICAyMDY1MSwgMjA2NjQsIDIwNjc3LCAyMDY5MCwgMjA3MDMsIDIwNzE2LCAyMDcyOSwgMjA3NDIsIDIwNzU1LCAyMDc2NywgCi0gICAgMjA3NzgsIDIwNzg2LCAyMDc5NCwgMjA4MDEsIDIwODA3LCAyMDgxMSwgMjA4MTcsIDIwODIzLCAyMDgzMSwgMjA4MzcsIAotICAgIDIwODQyLCAyMDg0NiwgMjA4NTUsIDkxNTUsIDIwODY2LCAyMDg3MywgMjA4ODEsIDIwODg4LCAyMDg5NSwgMTA5NDgsIAotICAgIDIwOTAyLCAyMDkxMSwgMjA5MTYsIDIwOTIxLCA3ODA1LCAyMDkyOCwgMjA5MzMsIDIwOTM2LCAyMDk0MSwgMjA5NDksIAotICAgIDIwOTU2LCAyMDk2MywgMjA5NzAsIDIwOTc2LCAyMDk4NSwgMjA5OTQsIDIxMDAwLCAyMTAwOSwgMjEwMTMsIDIxMDE5LCAKLSAgICAyMTAyNCwgMjEwMzQsIDIxMDQxLCAyMTA0NywgMjEwNTUsIDIxMDYxLCAyMTA2OCwgMjEwNzgsIDIxMDg3LCAyMTA5MSwgCi0gICAgMjEwOTgsIDIxMTAyLCAyMTEwNywgMjExMTMsIDIxMTIxLCAyMTEyNSwgMjExMzUsIDE0NDE1LCAyMTE0NCwgMjExNTAsIAotICAgIDIxMTU0LCAyMTE2MywgMTQ0MjAsIDIxMTY5LCAyMTE3NiwgMjExODcsIDIxMTk1LCAyMTIwNCwgMjEyMTIsIDg5MzEsIAotICAgIDIxMjIwLCAyMTIyNSwgMjEyMzEsIDIxMjM2LCAyMTI0MCwgMjEyNDQsIDIxMjQ4LCA5NjM5LCAyMTI1MywgMjEyNjEsIAotICAgIDIxMjY4LCAyMTI3NywgMjEyODQsIDIxMjkxLCAxMDg3OCwgMjEyOTgsIDIxMzA0LCAyMTMwOCwgMjEzMTQsIDIxMzIxLCAKLSAgICAyMTMyNywgMjEzMzUsIDIxMzQxLCAyMTM0OCwgMjEzNTQsIDIxMzYwLCAyMTM2OSwgMjEzNzMsIDIxMzgxLCAyMTM5MCwgCi0gICAgMjEzOTcsIDIxNDAyLCAyMTQwNiwgMjE0MTcsIDIxNDIyLCAyMTQyNywgMjE0MzIsIDIxNDQ1LCA3OTk1LCAyMTQ0OSwgCi0gICAgMjE0NTUsIDIxNDYzLCAyMTQ2NywgMjE0NzQsIDIxNDgzLCAyMTQ4OCwgMTQ2OTEsIDIxNDk2LCAyMTUwMCwgMjE1MTIsIAotICAgIDIxNTE3LCAyMTUyMSwgMjE1MjQsIDIxNTMwLCAyMTUzNiwgMjE1NDEsIDIxNTQ1LCAyMTU0OCwgMjE1NTksIDIxNTY0LCAKLSAgICA5MzgzLCAyMTU3MSwgMjE1NzYsIDkzODgsIDIxNTgxLCAyMTU4NiwgMjE1OTEsIDIxNTk2LCAyMTYwMSwgMjE2MDYsIAotICAgIDIxNjExLCAyMTYxNiwgMjE2MjEsIDIxNjI2LCAyMTYzMSwgMjE2MzYsIDIxNjQyLCAyMTY0NywgMjE2NTIsIDIxNjU3LCAKLSAgICAyMTY2MiwgMjE2NjcsIDIxNjcyLCAyMTY3NywgMjE2ODIsIDIxNjg3LCAyMTY5MywgMjE2OTksIDIxNzA0LCAyMTcwOSwgCi0gICAgMjE3MTQsIDIxNzE5LCAyMTcyNCwgMjE3MjksIDIxNzM0LCAyMTczOSwgMjE3NDQsIDIxNzUwLCAyMTc1NSwgMjE3NjAsIAotICAgIDIxNzY1LCAyMTc3MSwgMjE3NzcsIDIxNzgyLCAyMTc4NywgMjE3OTIsIDIxNzk3LCAyMTgwMiwgMjE4MDcsIDIxODEyLCAKLSAgICAyMTgxNywgMjE4MjMsIDIxODI4LCAyMTgzMywgMjE4MzgsIDIxODQzLCAyMTg0OSwgMjE4NTQsIDIxODU5LCAyMTg2MywgCi0gICAgMTM2OCwgMTI5LCAyMTg3MSwgMjE4NzUsIDIxODc5LCAyMTg4MywgMjE4ODgsIDIxODkyLCAxMzExNywgMTI0NzYsIDIxODk2LCAKLSAgICAyMTkwMSwgMjE5MDUsIDIxOTEwLCAyMTkxNCwgMjE5MTksIDIxOTIzLCAyMTkyOSwgMjE5MzQsIDIxOTM4LCAyMTk0MiwgCi0gICAgMjE5NTAsIDIxOTU0LCAyMTk1OCwgMjE5NjMsIDIxOTY4LCAyMTk3MiwgMjE5NzgsIDIxOTgzLCAyMTk4NywgMjE5OTIsIAotICAgIDIxOTk3LCAyMjAwMSwgMjIwMDgsIDIyMDE1LCAyMjAyMiwgMjIwMjYsIDIyMDMwLCAyMjAzNSwgMjIwMzksIDIyMDQyLCAKLSAgICAyMjA0OCwgMjIwNjEsIDIyMDY2LCAyMjA3NSwgMjIwODAsIDk0MjgsIDIyMDg1LCAyMjA4OCwgMjcxMiwgMjcxNywgMjIwOTIsIAotICAgIDIyMDk4LCAyMjEwNCwgNzIwOSwgMjIxMDksIDIyMTE0LCAyMjExOSwgMjIxMjUsIDIyMTMwLCAxMzkwOSwgMjIxMzUsIAotICAgIDIyMTQwLCAyMjE0NSwgMjIxNTAsIDIyMTU2LCAyMjE2MSwgMjIxNjYsIDIyMTcyLCAyMjE3NywgMjIxODEsIDIyMTg2LCAKLSAgICAyMjE5MSwgMjIxOTYsIDIyMjAxLCAyMjIwNSwgMjIyMTAsIDIyMjE0LCAyMjIxOSwgMjIyMjQsIDIyMjI5LCAyMjIzNCwgCi0gICAgMjIyMzgsIDIyMjQzLCAyMjI0NywgMjIyNTIsIDIyMjU3LCAyMjI2MiwgMjIyNjcsIDI4ODYsIDIyMTgyLCAyMjI3MSwgCi0gICAgMjIyNzksIDIyMjg2LCA5NzMzLCAyMjI5OCwgMjIzMDYsIDIyMTg3LCAyMjMxMywgMjIzMTgsIDIyMzI2LCAyMjE5MiwgCi0gICAgMjIzMzEsIDIyMzM2LCAyMjM0NCwgMjIzNDksIDIyMTk3LCAyMjM1NCwgMjIzNTksIDIyMzYzLCAyMjM2OSwgMjIzNzcsIAotICAgIDIyMzgwLCAyMjM4NywgMjIzOTEsIDIyMzk1LCAyMjQwMSwgMjI0MDgsIDIyNDEzLCA4OTU4LCAxNzI3LCAxNzMyLCAyMjQxNywgCi0gICAgMjI0MjMsIDIyNDI5LCAyMjQzNCwgMjI0MzgsIDIyNDQyLCAyMjQ0NiwgMjI0NTAsIDIyNDU0LCAyMjQ1OCwgMjI0NjIsIAotICAgIDIyNDY2LCAyMjQ2OSwgMjI0NzUsIDIyNDgyLCAyMjQ5MCwgMjI0OTYsIDIyNTAyLCAyMjUwNywgMjI1MTIsIDIyNTE2LCAKLSAgICAxMzgyOSwgMTM4MzYsIDIyNTIxLCAyMjUzMywgMjI1MzYsIDIyNTQzLCAxNjM2MiwgMjI1NTAsIDIyNTU4LCAyMjU2OSwgCi0gICAgMjI1NzgsIDIyNTkxLCAyMjYwMSwgMjI2MTUsIDIyNjI3LCAyMjY0MSwgMjI2NTMsIDIyNjYzLCAyMjY3NSwgMjI2ODEsIAotICAgIDIyNjk2LCAyMjcyMCwgMjI3MzgsIDIyNzU3LCAyMjc3MCwgMjI3ODQsIDIyODAyLCAyMjgxOCwgMjI4MzUsIDIyODUzLCAKLSAgICAyMjg2NCwgMjI4ODMsIDIyOTAwLCAyMjkyMCwgMjI5MzgsIDIyOTUwLCAyMjk2NCwgMjI5NzgsIDIyOTkwLCAyMzAwNywgCi0gICAgMjMwMjYsIDIzMDQ0LCAyMzA1NiwgMjMwNzQsIDIzMDkzLCAxNDU1OSwgMjMxMDYsIDIzMTI2LCAyMzEzOCwgMTA1MjMsIAotICAgIDIzMTUwLCAyMzE1NSwgMjMxNjAsIDIzMTY1LCAyMzE3MSwgMjMxNzYsIDIzMTgwLCAyMzE4NywgMjM5OCwgMjMxOTEsIAotICAgIDIzMTk3LCAyMzIwMSwgMjMyMDQsIDIzMjA4LCAyMzIxNiwgMjMyMjIsIDIyMjE1LCAyMzIyNiwgMjMyMzUsIDIzMjQ2LCAKLSAgICAyMzI1MiwgMjMyNTgsIDIzMjY3LCAyMzI3NSwgMjMyODIsIDIzMjg3LCAyMzI5MSwgMjMyOTgsIDIzMzA0LCAyMzMxMywgCi0gICAgMjMzMjEsIDIzMzI4LCAyMzMzOCwgMjMzNDcsIDIzMzU3LCAyMzM2MiwgMjMzNzEsIDIzMzgwLCAyMzM5MSwgMjM0MDIsIAotICAgIDM5NjMsIDIzNDEyLCAyMzQxNiwgMjM0MjYsIDIzNDM0LCAyMzQ0NCwgMjM0NTUsIDIzNDYwLCAyMzQ3MCwgMjM0NzgsIAotICAgIDIzNDg1LCAyMzQ5MSwgMjM0OTgsIDIzNTAzLCAyMjIyNSwgMjM1MDcsIDIzNTE2LCAyMzUyMCwgMjM1MjMsIDIzNTI4LCAKLSAgICAyMzUzNSwgMjM1NDQsIDIzNTUyLCAyMzU2MCwgMjM1NzAsIDIzNTc5LCAyMzU4NSwgMjM1OTEsIDIyMjMwLCAyMjIzNSwgCi0gICAgMjM1OTUsIDIzNjA1LCAyMzYxNSwgMjM2MjUsIDIzNjMzLCAyMzY0MCwgMjM2NTAsIDIzNjU4LCAyMzY2NiwgMjM2NzIsIAotICAgIDIzNjgwLCA5MzAsIDIzNjg5LCAxNDc1MCwgNTQyLCAyMzcwMywgMjM3MTIsIDIzNzIwLCAyMzczMSwgMjM3NDIsIDIzNzUyLCAKLSAgICAyMzc2MSwgMjM3NzMsIDIzNzgyLCAyMzc5MSwgMjM3OTcsIDIzODA2LCAyMzgxNSwgMjM4MjUsIDIzODMzLCAyMzg0MSwgCi0gICAgOTM2MCwgMjM4NDcsIDIzODUwLCAyMzg1NCwgMjM4NTksIDIzODY0LCA5ODQ4LCAyMjI0OCwgMjIyNTMsIDIzODcyLCAKLSAgICAyMzg3OCwgMjM4ODQsIDIzODg5LCAyMzg5NCwgMjM4OTgsIDIzOTA2LCAyMzkxMiwgMjM5MTgsIDIzOTIyLCAzNTI1LCAKLSAgICAyMzkzMCwgMjM5MzUsIDIzOTQwLCAyMzk0NCwgMjM5NDgsIDk5MjgsIDIzOTU1LCAyMzk2MywgMjM5NzcsIDIzOTg0LCAKLSAgICAyMzk5MCwgOTkzNywgOTk0MywgMjM5OTgsIDI0MDA2LCAyNDAxMywgMjQwMTgsIDI0MDIzLCAyMjI1OCwgMjQwMjksIAotICAgIDI0MDQwLCAyNDA0NCwgMjQwNDksIDI2MDEsIDI0MDU0LCAyNDA2NSwgMjQwNzEsIDI0MDc2LCAyNDA4MCwgMjQwODQsIAotICAgIDI0MDg3LCAyNDA5NCwgMjQxMDEsIDI0MTA4LCAyNDExNCwgMjQxMTgsIDIyMjYzLCAyNDEyMywgMjQxMjcsIDI0MTMxLCAKLSAgICAxMDM3LCAyNDEzNiwgMjQxNDEsIDI0MTQ2LCAyNDE1MSwgMjQxNTYsIDI0MTYxLCAyNDE2NiwgMjQxNzEsIDI0MTc2LCAKLSAgICAyNDE4MSwgMjQxODYsIDI0MTkxLCAyNDE5NiwgMjQyMDEsIDI0MjA3LCAyNDIxMiwgMjQyMTcsIDI0MjIyLCAyNDIyNywgCi0gICAgMjQyMzIsIDI0MjM3LCAyNDI0MywgMjQyNDgsIDI0MjUzLCAyNDI1OCwgMjQyNjMsIDI0MjY4LCAyNDI3MywgMjQyNzgsIAotICAgIDI0Mjg0LCAyNDI5MCwgMjQyOTUsIDI0MzAxLCAyNDMwNiwgMjQzMTEsIDUsIDI0MzE3LCAyNDMyMSwgMjQzMjUsIDI0MzI5LCAKLSAgICAyNDMzNCwgMjQzMzgsIDI0MzQyLCAyNDM0NiwgMjQzNTAsIDI0MzU1LCAyNDM1OSwgMjQzNjQsIDI0MzY4LCAyNDM3MSwgCi0gICAgMjQzNzUsIDI0MzgwLCAyNDM4NCwgMjQzODksIDI0MzkzLCAyNDM5NywgMjQ0MDEsIDI0NDA2LCAyNDQxMCwgMjQ0MTQsIAotICAgIDI0NDI0LCAyNDQyOSwgMjQ0MzMsIDI0NDM3LCAyNDQ0MiwgMjQ0NDcsIDI0NDU2LCAyNDQ2MSwgMjQ0NjYsIDI0NDcwLCAKLSAgICAyNDQ3NCwgMjQ0ODcsIDI0NDk5LCAyNDUwOCwgMjQ1MTcsIDI0NTIzLCAyNDUyOCwgMjQ1MzIsIDI0NTM2LCAyNDU0NiwgCi0gICAgMjQ1NTUsIDI0NTYzLCAyNDU2OSwgMjQ1NzQsIDI0NTc4LCAyNDU4NSwgMjQ1OTUsIDI0NjA0LCAyNDYxMiwgMjQ2MjAsIAotICAgIDI0NjI3LCAyNDYzNSwgMjQ2NDQsIDI0NjUzLCAyNDY2MSwgMjQ2NjYsIDI0NjcwLCAyNDY3NCwgMjQ2NzcsIDI0Njc5LCAKLSAgICAyNDY4MywgMjQ2ODcsIDI0NjkyLCAyNDY5NywgMjQ3MDEsIDI0NzA1LCAyNDcwOCwgMjQ3MTIsIDI0NzE1LCAyNDcxOSwgCi0gICAgMjQ3MjIsIDI0NzI1LCAyNDcyOSwgMjQ3MzUsIDI0NzM5LCAyNDc0MywgMjQ3NDcsIDI0NzUyLCAyNDc1NywgMjQ3NjIsIAotICAgIDI0NzY2LCAyNDc2OSwgMjQ3NzQsIDI0NzgwLCAyNDc4NSwgMjQ3OTEsIDI0Nzk2LCAyNDgwMCwgMjQ4MDQsIDI0ODA4LCAKLSAgICAyNDgxMywgMjQ4MTcsIDI0ODIyLCAyNDgyNiwgMjQ4MzAsIDI0ODM3LCAyNDg0MSwgMjQ4NDQsIDI0ODQ4LCAyNDg1NCwgCi0gICAgMjQ4NjAsIDI0ODY0LCAyNDg2OCwgMjQ4NzMsIDI0ODgwLCAyNDg4NiwgMjQ4OTAsIDI0ODk5LCAyNDkwMywgMjQ5MDcsIAotICAgIDI0OTEwLCAyNDkxNiwgMjQ5MjEsIDI0OTI3LCAxNDg5LCAxNzkxLCAyNDkzMiwgMjQ5MzcsIDI0OTQyLCAyNDk0NywgCi0gICAgMjQ5NTIsIDI0OTU3LCAyNDk2MiwgMjE0OCwgMjE5NCwgMjQ5NjcsIDI0OTcwLCAyNDk3NCwgMjQ5NzgsIDI0OTgzLCAKLSAgICAyNDk4NywgMjQ5OTEsIDI0OTk0LCAyNDk5OSwgMjUwMDQsIDI1MDA4LCAyNTAxMSwgMjUwMTYsIDI1MDIwLCAyNTAyNSwgCi0gICAgMjUwMjksIDE0NzYyLCAyNTAzNCwgMjUwMzcsIDI1MDQwLCAyNTA0NCwgMjUwNDksIDI1MDUzLCAyNTA2NiwgMjUwNzAsIAotICAgIDI1MDczLCAyNTA4MSwgMjUwOTAsIDI1MDk3LCAyNTEwMiwgMjUxMDgsIDI1MTE0LCAyNTEyMiwgMjUxMjksIDI1MTM2LCAKLSAgICAyNTE0MCwgMjUxNDQsIDI1MTQ4LCAyNTE1MywgMjUxNTgsIDI1MTYyLCAyNTE3MCwgMjUxNzUsIDI1MTg3LCAyNTE5OCwgCi0gICAgMjUyMDMsIDI1MjA3LCAyNTIxMSwgMjUyMTcsIDI1MjIyLCAyNTIyNywgMjUyMzEsIDI1MjM1LCAyNTIzOCwgMjUyNDQsIAotICAgIDc5MTUsIDIzMTYsIDI1MjQ4LCAyNTI1MywgMjUyNjksIDk0NzUsIDI1Mjg5LCAyNTI5OCwgMjUzMTQsIDI1MzE4LCAyNTMyMSwgCi0gICAgMjUzMjcsIDI1MzM3LCAyNTM0MywgMjUzNTIsIDI1MzY3LCAyNTM3OSwgMjUzOTAsIDI1Mzk4LCAyNTQwNywgMjU0MTMsIAotICAgIDI1NDIyLCAyNTQzMiwgMjU0NDMsIDI1NDU0LCAyNTQ2MywgMjU0NzAsIDI1NDc5LCAyNTQ4NywgMjU0OTQsIDI1NTAyLCAKLSAgICAyNTUwOSwgMjU1MTYsIDI1NTI5LCAyNTUzNiwgMjU1NDIsIDI1NTQ3LCAyNTU1NiwgMjU1NjIsIDI1NTY3LCAyNTU3NSwgCi0gICAgMjU1ODIsIDIzNDM2LCAyNTU5NCwgMjU2MDYsIDI1NjIwLCAyNTYyOCwgMjU2MzUsIDI1NjQ3LCAyNTY1NiwgMjU2NjUsIAotICAgIDI1NjczLCAyNTY4MSwgMjU2ODksIDI1Njk2LCAyNTcwNSwgMjU3MTMsIDI1NzIzLCAyNTczMiwgMjU3NDIsIDI1NzUxLCAKLSAgICAyNTc2MCwgMjU3NjgsIDI1NzczLCAyNTc3NywgMjU3ODAsIDI1Nzg0LCAyNTc4OCwgMjU3OTIsIDI1Nzk2LCAyNTgwMCwgCi0gICAgMjU4MDYsIDI1ODEyLCAyNTgyMCwgMTQ4MDcsIDI1ODI3LCAyNTgzMiwgMjU4MzksIDI1ODQ1LCAyNTg1MiwgMTQ4MTUsIAotICAgIDI1ODU5LCAyNTg2MiwgMjU4NzQsIDI1ODgyLCAyNTg4OCwgMjU4OTMsIDI1ODk3LCA5ODc4LCAyNTkwOCwgMjU5MTgsIAotICAgIDI1OTI3LCAyNTkzNCwgMjU5MzgsIDE0ODIwLCAyNTk0MSwgMjU5NDgsIDI1OTUyLCAyNTk1OCwgMjU5NjEsIDI1OTY4LCAKLSAgICAyNTk3NCwgMjU5ODEsIDI1OTg3LCAyNTk5MSwgMjU5OTYsIDI2MDAwLCAyNjAwOSwgMjYwMTYsIDI2MDIyLCA3OTU2LCAKLSAgICAyNjAyOSwgMjYwMzcsIDI2MDQ0LCAyNjA1MCwgMjYwNTUsIDI2MDYxLCAyNjA2NywgMjYwNzUsIDI2MDc5LCAyNjA4MiwgCi0gICAgMjYwODQsIDI1Nzg1LCAyNjA5MywgMjYwOTksIDI2MTA5LCAyNjExNCwgMjYxMjEsIDI2MTI3LCAyNjEzMiwgMjYxMzcsIAotICAgIDI2MTQyLCAyNjE0NiwgMjYxNTEsIDI2MTU4LCAyNjE2NywgMjYxNzEsIDI2MTc4LCAyNjE4NywgMjYxOTMsIDI2MTk4LCAKLSAgICAyNjIwNCwgMjYyMDksIDI2MjE2LCAyNjIyNywgMjYyMzIsIDI2MjM2LCAyNjI0NiwgMjYyNTIsIDI2MjU2LCAyNjI2MSwgCi0gICAgMjYyNzEsIDI2MjgwLCAyNjI4NCwgMjYyOTEsIDI2Mjk5LCAyNjMwNiwgMjYzMTIsIDI2MzE3LCAyNjMyNSwgMjYzMzIsIAotICAgIDI2MzQ0LCAyNjM1MywgMjYzNTcsIDEzMDUzLCAyNjM2NSwgMjYzNzUsIDI2Mzc5LCAyNTA3NywgMjYzOTAsIDI2Mzk1LCAKLSAgICAyNjM5OSwgMjY0MDYsIDI2NDEzLCAyMTk3NCwgMjU3MTAsIDI2NDE4LCAyNjQyMiwgMjY0MjUsIDIyODcwLCAyNjQzMCwgCi0gICAgMjY0NDQsIDI2NDYwLCAyNjQ3OCwgMjY0OTcsIDI2NTE0LCAyNjUzMiwgMjI4ODksIDI2NTQ5LCAyNjU2OSwgMjI5MDYsIAotICAgIDI2NTgxLCAyNjU5MywgMTU3NDUsIDI2NjA1LCAyMjkyNiwgMjY2MTksIDI2NjMxLCAxMDUzNiwgMjY2NDUsIDI2NjUwLCAKLSAgICAyNjY1NSwgMjY2NjAsIDI2NjY2LCAyNjY3MiwgMjY2NzgsIDI2NjgyLCAyNjY4OSwgMjY2OTQsIDI2NzA0LCAyNjcxMCwgCi0gICAgMTAxODMsIDI2NzE2LCAyNjcxOCwgMjY3MjMsIDI2NzMxLCAyNjczNSwgMjYxNTQsIDI2NzQxLCAyNjc0OCwgMTE1MjQsIAotICAgIDExNTM0LCAyNjc1NSwgMjY3NjUsIDI2NzcwLCAyNjc3NCwgMjY3NzcsIDI2NzgzLCAyNjc5MSwgMjY4MDMsIDI2ODEzLCAKLSAgICAyNjgyOSwgMjY4NDIsIDI2ODU2LCAxNTc2MywgMjY4NzAsIDI2ODc3LCAyNjg4MSwgMjY4ODQsIDI2ODg5LCAyNjg5MywgCi0gICAgMjY5MDAsIDI2OTA3LCAyNjkxNywgMjY5MjIsIDI2OTI3LCAyNjkzMiwgMjY5NDAsIDI2OTQ4LCAyNjk1NywgMjY5NjIsIAotICAgIDk1NzIsIDI2OTY2LCAyNjk2OSwgMjY5NzIsIDI2OTc3LCAyNjk4NCwgMjY5ODksIDI3MDA1LCAyNzAxMywgMjcwMjEsIAotICAgIDk0MjMsIDI3MDI5LCAyNzAzNCwgMjcwMzgsIDI3MDQ0LCAyNzA1MCwgMjcwNTMsIDI3MDU5LCAyNzA3MSwgMjcwNzksIAotICAgIDI3MDg2LCAyNzA5MiwgMjcwOTksIDI3MTEwLCAyNzEyNCwgMjcxMzcsIDI3MTQ2LCAyNzE1NSwgMjcxNjcsIDI3MTc4LCAKLSAgICAyNzE4OCwgMjcxOTcsIDI3MjA2LCAyNzIxNCwgMjcyMjUsIDc5MzgsIDI3MjMyLCAyNzIzOCwgMjcyNDMsIDI3MjQ5LCAKLSAgICAyNzI1NiwgMjcyNjYsIDI3Mjc2LCAyNzI4NSwgMjcyOTEsIDI3Mjk4LCAyNzMwMywgMjczMTAsIDI3MzE4LCAyNzMyNiwgCi0gICAgMjczMzgsIDYyNDYsIDI3MzQ1LCAyNzM1NCwgMjczNjIsIDI3MzY4LCAyNzM3NCwgMjczNzksIDI3MzgzLCAyNzM4NiwgCi0gICAgMjczOTIsIDI3Mzk5LCAyNzQwNCwgMjc0MDksIDI3NDEzLCAyNzQyNSwgMjc0MzYsIDI3NDQ1LCAyNzQ1MywgMTQ5NDcsIAotICAgIDI3NDU4LCAyNzQ2NCwgMjc0NzAsIDExNTE3LCA4NjM1LCAyNzQ3NSwgMjc0NzksIDI3NDgzLCAyNzQ4NiwgMjc0ODksIAotICAgIDI3NDk1LCAyNzUwMywgMjc1MTEsIDI3NTE1LCAyNzUxOSwgMjc1MjQsIDI3NTI3LCAyNzUzNiwgMjc1NDAsIDI3NTQ4LCAKLSAgICAyNzU1OSwgMjc1NjMsIDI3NTY5LCAyNzU3NSwgMjc1NzksIDI3NTg1LCAyNzU5MywgMjc2MTUsIDI3NjM5LCAyNzY0NiwgCi0gICAgMjc2NTMsIDI3NjU5LCAyNzY2NywgMjc2NzMsIDI3Njc4LCAyNzY4OSwgMjc3MDcsIDI3NzE0LCAyNzcyMiwgMjc3MjYsIAotICAgIDI3NzM1LCAyNzc0OCwgMjc3NTYsIDI3NzY4LCAyNzc3OSwgMjc3ODksIDI3ODAzLCAyNzgxMiwgMjc4MjAsIDI3ODMyLCAKLSAgICA5NDkyLCAyNzg0MywgMjc4NTQsIDI3ODY2LCAyNzg3NiwgMjc4ODUsIDI3ODkwLCAyNzg5NCwgMjc5MDIsIDI3OTEyLCAKLSAgICAyNzkxNywgMjc5MjEsIDI3OTI0LCAyNzkyNywgMjc5MzUsIDI3OTQzLCAyNzk1MiwgMjc5NjIsIDI3OTcxLCAyNzk3NywgCi0gICAgMjc5OTEsIDI2NjMsIDI4MDEzLCAyODAyNCwgMjgwMzMsIDI4MDQzLCAyODA1NSwgMjgwNjQsIDI4MDczLCAyODA4MywgCi0gICAgMjgwOTEsIDI4MDk5LCAyODEwOCwgMjgxMTMsIDI4MTI0LCAyODEyOSwgMjgxNDAsIDI4MTQ0LCAyODE1NCwgMjgxNjMsIAotICAgIDI4MTcxLCAyODE4MSwgMjgxOTEsIDI4MTk5LCAyODIwOCwgMjgyMTUsIDI4MjIzLCAyODIzMCwgMjgyMzksIDI4MjQzLCAKLSAgICAyODI1MSwgMjgyNTgsIDI4MjY2LCAyODI3MywgMjgyODQsIDI4Mjk5LCAyODMwNiwgMjgzMTIsIDI4MzIyLCAyODMzMSwgCi0gICAgMjgzMzcsIDI4MzQxLCAyODM0OCwgMjgzNTIsIDE0MDMxLCAyODM1OCwgMjgzNjIsIDI4MzY3LCAyODM3NCwgMjgzNzgsIAotICAgIDI4MzgyLCAyODM5MCwgMjgzOTgsIDI4NDA0LCAyODQxMywgMjg0MjAsIDI4NDI1LCAyODQzMCwgMjg0NDAsIDIzNTA1LCAKLSAgICAyODQ0NCwgMjg0NDcsIDI4NDUyLCAyODQ1NywgMjg0NjIsIDI4NDY3LCAyODQ3MiwgMjg0NzcsIDI4NDgyLCAyODQ4NywgCi0gICAgMjg0OTMsIDI4NDk4LCAyODUwMywgMjg1MDksIDEyMTgsIDcwNCwgMjg1MTQsIDI4NTIzLCAyMzY0LCAyODUzMCwgMjg1MzUsIAotICAgIDI4NTM5LCAyODU0NSwgMTI2NywgNTQ2LCAzMTgsIDI4NTUwLCAyODU1OSwgMjg1NjcsIDI4NTc2LCAyODU4NCwgMjg1OTUsIAotICAgIDI4NjA0LCAyODYxMiwgMjg2MTYsIDI4NjE5LCAyODYyNywgMjg2MzUsIDI4NjQwLCAxNDc3NSwgMjg2NDYsIDI4NjUyLCAKLSAgICAyODY1OCwgNTg3MiwgMjg2NjMsIDI4NjY3LCAyODY3MywgMjg2NzcsIDI4Njg0LCAxNDU1LCAyODY5MCwgMjg2OTcsIDk1NzksIAotICAgIDI4NzAxLCAyODcxMSwgMjg3MTksIDI4NzI1LCAyODczNCwgMjg3NDIsIDI4NzQ4LCAyODc1NiwgMjg3NjMsIDExMTEwLCAKLSAgICAyODc2OSwgMjg3NzYsIDI4NzgxLCAyODc4OCwgMTQ5NiwgMjE0NywgMjg3OTQsIDI4ODAwLCAyODgwNywgMjg4MTgsIAotICAgIDI4ODI5LCAyODgzNywgMjg4NDQsIDI4ODU0LCAyODg2MywgMjg4NzEsIDI4ODgwLCAyODg4NywgMjg4OTQsIDI4OTA3LCAKLSAgICAyODkxOCwgMTI3MiwgMjg5MzcsIDI4OTQyLCAyODk1MCwgMzU3NSwgMjg5NTQsIDI4OTU5LCAyODk2MywgMTQ1OSwgMjQ3MDYsIAotICAgIDI4OTczLCAyODk3NywgMjg5ODIsIDI4OTg2LCAzNDkzLCAyODk5MiwgMjkwMDAsIDI5MDA3LCAyOTAxOCwgMjkwMjYsIAotICAgIDI5MDM0LCAzNTc2LCAyNzksIDI5MDM5LCAyOTA0NywgMjkwNTUsIDI5MDYyLCAyOTA2OCwgMjkwNzMsIDIyMTYsIDI5MDgwLCAKLSAgICAyOTA4NiwgMjU5OTIsIDI2MjIyLCAyOTA5MiwgMTA2LCAyOTA5NiwgMjkxMDAsIDI5MTA2LCA2MTUsIDkzMjgsIDI5MTExLCAKLSAgICAyOTExOCwgMjkxMjQsIDIzMjcsIDI5MTI4LCAyOTEzMiwgMTUxODcsIDI5MTM1LCAyOTE0MCwgMjkxNDcsIDI5MTUzLCAKLSAgICAyOTE1OCwgMjkxNjYsIDI5MTczLCAyOTE3OSwgMjIzNTEsIDI5MTgzLCAyOTE4NywgMzY0NiwgMTY2MjUsIDI5MTkxLCAKLSAgICAyOTE5NiwgMjkxOTksIDI5MjA3LCAyOTIxNSwgMjkyMjAsIDI5MjIzLCAyOTIzMCwgMjkyNDAsIDI5MjUyLCAyOTI1NywgCi0gICAgMjkyNjEsIDI5MjY5LCAyOTI3NiwgMjkyODIsIDI5Mjg5LCAyOTI5NiwgMjkyOTksIDI5MzAzLCAyOTMwNywgMTQ2MywgCi0gICAgMjkzMTcsIDI5MzE5LCAyOTMyNCwgMjkzMzAsIDI5MzM2LCAyOTM0MSwgMjkzNDYsIDI5MzUxLCAyOTM1NiwgMjkzNjEsIAotICAgIDI5MzY2LCAyOTM3MSwgMjkzNzYsIDI5MzgxLCAyOTM4NiwgMjkzOTEsIDI5Mzk2LCAyOTQwMSwgMjk0MDYsIDI5NDEyLCAKLSAgICAyOTQxOCwgMjk0MjQsIDI5NDMwLCAyOTQzNSwgMjk0NDAsIDI5NDQ1LCAyOTQ1MSwgMjk0NTYsIDI5NDYxLCAyOTQ2NiwgCi0gICAgMjk0NzIsIDI5NDc3LCAyOTQ4MywgMjk0ODgsIDI5NDkzLCAyOTQ5OCwgMjk1MDMsIDI5NTA5LCAyOTUxNCwgMjk1MjAsIAotICAgIDI5NTI1LCAyOTUzMCwgMjk1MzUsIDI5NTQwLCAyOTU0NiwgMjk1NTEsIDI5NTU3LCAyOTU2MiwgMjk1NjcsIDI5NTcyLCAKLSAgICAyOTU3NywgMjk1ODIsIDI5NTg3LCAyOTU5MiwgMjk1OTcsIDI5NjAyLCAyOTYwOCwgMjk2MTQsIDI5NjIwLCAyOTYyNSwgCi0gICAgMjk2MzAsIDI5NjM1LCAyOTY0MCwgMjk2NDYsIDI5NjUyLCAyOTY1OCwgMjk2NjQsIDI5NjcwLCAyOTY3NiwgMjk2ODEsIAotICAgIDI5Njg3LCAyOTY5MiwgMjk2OTcsIDI5NzAyLCAyOTcwNywgMjk3MTMsIDI0NDMsIDI5NzE4LCAyNDUwLCAyNDU3LCAyNzU0LCAKLSAgICAyOTcyMywgMjQ2MywgMjQ3MywgMjk3MjksIDI5NzMzLCAyOTczOCwgMjk3NDMsIDI5NzQ5LCAyOTc1NCwgMjk3NTksIAotICAgIDI5NzYzLCAyOTc2OCwgMjk3NzQsIDI5Nzc5LCAyOTc4NCwgMjk3ODksIDI5Nzk1LCAyOTgwMCwgMjk4MDQsIDI5ODA4LCAKLSAgICAyOTgxMywgMjk4MTgsIDI5ODIzLCAyOTgyOCwgMjk4MzMsIDI5ODM5LCAyOTg0NSwgMjk4NTAsIDI5ODU0LCAyOTg1OSwgCi0gICAgMjk4NjUsIDI5ODY5LCAyOTg3NCwgMjk4NzksIDI5ODg0LCAyOTg4OSwgMjk4OTMsIDI5ODk2LCAyOTkwMSwgMjk5MDYsIAotICAgIDI5OTExLCAyOTkxNiwgMjk5MjEsIDI5OTI3LCAyOTkzMywgMjk5MzgsIDI5OTQzLCAyOTk0NywgMjk5NTIsIDI5OTU3LCAKLSAgICAyOTk2MiwgMjk5NjcsIDI5OTcyLCAyOTk3NiwgMjk5ODEsIDI5OTg2LCAyOTk5MSwgMjk5OTUsIDI5OTk5LCAzMDAwMywgCi0gICAgMzAwMDgsIDMwMDE2LCAzMDAyMSwgMzAwMjcsIDMwMDMzLCAzMDAzOSwgMzAwNDQsIDMwMDQ4LCAzMDA1MSwgMzAwNTYsIAotICAgIDMwMDYxLCAzMDA2NSwgMzAwNzAsIDMwMDc0LCAzMDA3OSwgMzAwODMsIDMwMDg2LCAzMDA5MSwgMTczMDIsIDMwMDk2LCAKLSAgICAzMDEwMSwgMzAxMDYsIDMwMTE0LCAyMTI4MCwgMjg2OTQsIDkwMjYsIDMwMTE5LCAzMDEyNCwgMzAxMjgsIDMwMTMzLCAKLSAgICAzMDEzNywgMzAxNDEsIDMwMTQ2LCAzMDE1MCwgMzAxNTMsIDMwMTU2LCAzMDE2MCwgMzAxNjUsIDMwMTY5LCAzMDE3NywgCi0gICAgMzAxODEsIDMwMTg0LCAzMDE4OSwgMzAxOTMsIDMwMTk3LCAzMDIwMiwgMzAyMDcsIDMwMjExLCAzMDIxNywgMzAyMjIsIAotICAgIDMwMjI3LCAzMDIzNCwgMzAyNDEsIDMwMjQ1LCAzMDI0OCwgMzAyNTQsIDMwMjYzLCAzMDI3MCwgMzAyNzgsIDMwMjg1LCAKLSAgICAzMDI4OSwgMzAyOTQsIDMwMjk4LCAzMDMwMiwgMzAzMDgsIDMwMzE0LCAzMDMxOCwgMzAzMjQsIDMwMzI5LCAzMDMzNCwgCi0gICAgMzAzMzgsIDMwMzQ1LCAzMDM1MSwgMzAzNTcsIDMwMzYzLCAzMDM2OSwgMzAzNzYsIDMwMzgyLCAzMDM4OCwgMzAzOTQsIAotICAgIDMwNDAwLCAzMDQwNiwgMzA0MTIsIDMwNDE4LCAzMDQyNSwgMzA0MzEsIDMwNDM4LCAzMDQ0NCwgMzA0NTAsIDMwNDU2LCAKLSAgICAzMDQ2MiwgMzA0NjgsIDMwNDc0LCAzMDQ4MCwgMzA0ODYsIDMwNDkyLCAxMTQxOCwgMzA0OTgsIDMwNTAzLCAzMDUwOCwgCi0gICAgMzA1MTEsIDMwNTE5LCAzMDUyNCwgMzA1MzMsIDMwNTM5LCAzMDU0NCwgMzA1NDksIDMwNTU0LCAzMDU1OCwgMzA1NjMsIAotICAgIDMwNTY4LCAzMDU3MywgMzA1NzgsIDMwNTgzLCAzMDU5MCwgMzA1OTcsIDMwNjAzLCAzMDYwOSwgMzA2MTQsIDE2MzAzLCAKLSAgICAzMDYyMSwgMzA2MjcsIDMwNjM0LCAzMDY0MCwgMzA2NDYsIDMwNjUxLCAzMDY1OSwgMzA2NjQsIDE2MDgyLCAzMDY2OCwgCi0gICAgMzA2NzMsIDMwNjc4LCAzMDY4NCwgMzA2ODksIDMwNjk0LCAzMDY5OCwgMzA3MDMsIDMwNzA4LCAzMDcxNCwgMzA3MTksIAotICAgIDMwNzI0LCAzMDcyOCwgMzA3MzMsIDMwNzM4LCAzMDc0MiwgMzA3NDcsIDMwNzUyLCAzMDc1NywgMzA3NjEsIDMwNzY2LCAKLSAgICAzMDc3MSwgMzA3NzYsIDMwNzgwLCAzMDc4NCwgMTUyOTMsIDMwNzg4LCAzMDc5NywgMzA4MDMsIDMwODA5LCAzMDgxOCwgCi0gICAgMzA4MjYsIDMwODM1LCAzMDg0MywgMzA4NDgsIDMwODUyLCAzMDg1OSwgMzA4NjUsIDMwODY5LCAzMDg3MiwgMzA4NzcsIAotICAgIDMwODg2LCAzMDg5NCwgMzA4OTksIDE0OTUsIDMwOTA1LCAzMDkwOCwgMzA5MTIsIDIyNDI0LCAyMjQzMCwgMzA5MTgsIAotICAgIDMwOTIyLCAzMDkzMywgMzA5NDQsIDMwOTU1LCAzMDk2NywgMzA5NzQsIDMwOTgxLCAzMDk4NiwgMzA5OTAsIDU5MDksIDc1NSwgCi0gICAgMjEyNzksIDMwOTk4LCAzMTAwMywgMzEwMDcsIDMxMDEyLCAzMTAxNiwgMzEwMjIsIDMxMDI3LCAzMTAzMywgMzEwMzgsIAotICAgIDMxMDQ0LCAzMTA0OSwgMzEwNTUsIDMxMDYwLCAzMTA2NiwgMzEwNzIsIDMxMDc4LCAzMTA4MywgMzEwMzksIDMxMDQ1LCAKLSAgICAzMTA4NywgMzEwOTIsIDMxMDk4LCAzMTEwMywgMzExMDksIDMxMTE0LCAzMTEyMCwgMzExMjUsIDMxMDUwLCAxMDQyMSwgCi0gICAgMzExMjksIDMxMDYxLCAzMTA2NywgMzEwNzMsIDI4MzEsIDM0MjMsIDMxMTM1LCAzMTEzOCwgMzExNDQsIDMxMTUwLCAKLSAgICAzMTE1NiwgMzExNjMsIDMxMTY5LCAzMTE3NSwgMzExODEsIDMxMTg3LCAzMTE5MywgMzExOTksIDMxMjA1LCAzMTIxMSwgCi0gICAgMzEyMTcsIDMxMjIzLCAzMTIyOSwgMzEyMzUsIDMxMjQyLCAzMTI0OCwgMzEyNTQsIDMxMjYwLCAzMTI2NiwgMzEyNzIsIAotICAgIDMxMjc1LCAzMTI4MCwgMzEyODMsIDMxMjkwLCAzMTI5OCwgMzEzMDMsIDMxMzA4LCAzMTMxNCwgMzEzMTksIDMxMzI0LCAKLSAgICAzMTMyOCwgMzEzMzMsIDMxMzM5LCAzMTM0NCwgMzEzNTAsIDMxMzU1LCAzMTM2MSwgMzEzNjYsIDMxMzcyLCAzMTM3OCwgCi0gICAgMzEzODIsIDMxMzg3LCAzMTM5MiwgMzEzOTcsIDMxNDAyLCAzMTQwNiwgMzE0MTEsIDMxNDE2LCAzMTQyMSwgMzE0MjcsIAotICAgIDMxNDMzLCAzMTQzOSwgMzE0NDUsIDMxNDUwLCAzMTQ1NCwgMzE0NTcsIDMxNDYzLCAzMTQ2OSwgMzE0NzgsIDMxNDg2LCAKLSAgICAzMTQ5MywgMzE0OTgsIDMxNTAyLCAzMTUwNiwgMzE1MTEsIDE1MTQ2LCAzMTUxNiwgMzE1MjQsIDMxNTMwLCAzNjgzLCAKLSAgICAxMzc3LCAzMTUzNSwgMzE1MzksIDgwMDUsIDMxNTQ1LCAzMTU1MSwgMzE1NTgsIDgwMTQsIDMxNTYyLCAzMTU2OCwgMzE1NzUsIAotICAgIDMxNTgxLCAzMTU5MCwgMzE1OTgsIDMxNjEwLCAzMTYxNCwgMzE2MjEsIDMxNjI3LCAzMTYzMSwgMzE2MzQsIDMxNjQzLCAKLSAgICAzMTY1MSwgMzEwNDAsIDMxNjU2LCAzMTY2NiwgMzE2NzYsIDMxNjg2LCAzMTY5MiwgMzE2OTcsIDMxNzA3LCAzMTcxMiwgCi0gICAgMzE3MjUsIDMxNzM5LCAzMTc1MCwgMzE3NjIsIDMxNzc0LCAzMTc4OCwgMzE4MDEsIDMxODEzLCAzMTgyNSwgMTQ2MDAsIAotICAgIDMxODM5LCAzMTg0NCwgMzE4NDksIDMxODUzLCAzMTg1NywgMzE4NjEsIDE3ODAsIDI3MTc2LCAzMTg2NSwgMzE4NzAsIAotICAgIDMxMDg4LCAzMTg3NSwgMzE4NzgsIDMxODgzLCAzMTg4OCwgMzE4OTMsIDMxODk5LCAzMTkwNSwgMTAwOTgsIDMxOTEwLCAKLSAgICAzMTkxNywgMTU2OTcsIDMxOTIzLCAzMTkyOCwgMzE5MzMsIDMxOTM3LCAzMTk0MiwgMzE5NDcsIDMxMDkzLCAzMTk1MiwgCi0gICAgMzE5NTcsIDMxOTYyLCAzMTk2OCwgMzEwOTksIDMxOTczLCAzMTk3NiwgMzE5ODMsIDMxOTkxLCAzMTk5NywgMzIwMDMsIAotICAgIDMyMDA5LCAzMjAyMCwgMzIwMjUsIDMyMDMyLCAzMjAzOSwgMzIwNDYsIDMyMDU0LCAzMjA2MywgMzIwNzIsIDMyMDc4LCAKLSAgICAzMjA4NCwgMzIwOTIsIDMxMTA0LCAzMjA5NywgMzIxMDMsIDMyMTA5LCAzMTExMCwgMzIxMTQsIDMyMTE5LCAzMjEyNywgCi0gICAgMzIxMzUsIDMyMTQxLCAzMjE0OCwgMzIxNTQsIDMyMTYxLCAzMjE2OCwgMzIxNzQsIDMyMTgyLCAzMjE5MiwgMzIxOTksIAotICAgIDMyMjA0LCAzMjIxMCwgMzIyMTUsIDMyMjIwLCAzMjIyNywgMzIyMzYsIDMyMjQ0LCAzMjI0OSwgMzIyNTUsIDMyMjYyLCAKLSAgICAzMjI3MCwgMzIyNzYsIDMyMjgxLCAzMjI4NywgMzIyOTYsIDI3OTU3LCAzMjMwMywgMzIzMDcsIDMyMzEyLCAzMjMyMSwgCi0gICAgMzIzMjYsIDMyMzMxLCAzMjMzNiwgMTI0MDUsIDMyMzQ0LCAzMjM0OSwgMzIzNTQsIDMyMzU5LCAzMjM2MywgMzIzNjgsIAotICAgIDMyMzczLCAzMjM4MCwgMzIzODUsIDMyMzkwLCAzMjM5NSwgMzExMTUsIDIxMjE2LCAzMjQwMSwgMjUxOSwgMjQ0LCAzMjQwNCwgCi0gICAgMzI0MDcsIDMyNDExLCAzMjQxNSwgMzI0MjUsIDMyNDMzLCAzMjQzNywgMzI0NDQsIDMyNDUxLCAzMjQ1NSwgMzI0NTgsIAotICAgIDMyNDY0LCAzMjQ3MiwgMzI0ODAsIDMyNDg0LCAzMjQ4OCwgMzI0OTEsIDMyNDk4LCAzMjUwMiwgMzI1MDYsIDMyNTEzLCAKLSAgICAzMjUyMSwgMzEwNTEsIDMyNTI4LCAzMjUzNiwgMTAxNTgsIDY2NCwgMzA4LCAzMjU0OCwgMzI1NTMsIDMyNTU4LCAzMjU2NCwgCi0gICAgMzI1NjksIDMyNTc0LCAzNzA0LCAzMjU3OSwgMzI1ODIsIDMyNTg3LCAzMjU5MiwgMzI1OTcsIDMyNjAyLCAzMjYwNywgCi0gICAgMzI2MTQsIDIyNTI5LCAzMjYxOSwgMzI2MjQsIDMyNjI5LCAzMjYzNCwgMzI2MzksIDMyNjQ1LCAzMjY1MCwgMzI2NTYsIAotICAgIDMxMjg2LCAzMjY2MiwgMzI2NjcsIDMyNjczLCAzMjY3OSwgMzI2ODksIDMyNjk0LCAzMjY5OSwgMzI3MDMsIDMyNzA4LCAKLSAgICAzMjcxMywgMzI3MTgsIDMyNzIzLCAzMjczNiwgMzI3NDEsIDIyMzAyLCAxNjcwNSwgMzcxMCwgMzI3NDUsIDMyNzUwLCAKLSAgICAzMjc1NSwgMzI3NjEsIDMyNzY2LCAzMjc3MSwgMzI3NzUsIDMyNzgwLCAzMjc4NSwgMzI3OTEsIDMyNzk2LCAzMjgwMSwgCi0gICAgMTM4MiwgMzI4MDUsIDMyODEwLCAzMjgxNSwgMzI4MjAsIDMyODI0LCAzMjgyOSwgMzI4MzQsIDMyODM5LCAzMjg0NSwgCi0gICAgMzI4NTEsIDMyODU2LCAzMjg2MCwgMzI4NjQsIDMyODY5LCAzMjg3NCwgMzI4NzksIDMyODgzLCAzMjg5MSwgMzI4OTUsIAotICAgIDMyOTAxLCAzMjkwNSwgMzI5MTIsIDE2NDk4LCAzMTA2MiwgMzI5MTgsIDMyOTI1LCAzMjkzMywgMzI5NDAsIDMyOTQ2LCAKLSAgICAzMjk1OSwgMzI5NzEsIDMyOTc3LCAzMjk4MSwgMjc3MywgMzI5ODUsIDMyOTg5LCAzMjQ5MywgMzI5OTgsIDMzMDA5LCAKLSAgICAzMzAxNCwgMzMwMTksIDMzMDI0LCAzMzAyOCwgMzMwMzMsIDIyNDM1LCAzMzAzNywgMzMwNDEsIDMzMDQ2LCAzMTA2OCwgCi0gICAgMjEzMDAsIDMzMDUwLCAzMzA1NSwgMzMwNjEsIDMzMDY2LCAzMzA3MCwgMzMwNzQsIDMzMDc3LCAzMzA4MSwgMzMwODcsIAotICAgIDMzMDk4LCAzMzExMCwgMzEwNzQsIDMzMTE1LCAzMzExOCwgMzMxMjIsIDM0NywgMzMxMjcsIDMzMTMyLCAzMzEzNywgCi0gICAgMzMxNDIsIDMzMTQ3LCAzMzE1MiwgMzMxNTgsIDMzMTYzLCAzMzE2OCwgMzMxNzQsIDMzMTc5LCAzMzE4NSwgMzMxOTAsIAotICAgIDMzMTk2LCAzMzIwMSwgMzMyMDYsIDMzMjExLCAzMzIxNiwgMzMyMjEsIDMzMjI2LCAzMzIzMSwgMzMyMzYsIDMzMjQyLCAKLSAgICAzMzI0NywgMzMyNTIsIDMzMjU3LCAzMzI2MiwgMzMyNjcsIDMzMjcyLCAzMzI3NywgMzMyODMsIDMzMjg5LCAzMzI5NCwgCi0gICAgMzMyOTksIDMzMzA0LCAzMzMwOSwgMzMzMTQsIDMzMzE5LCAzMzMyNCwgMzMzMjksIDMzMzM0LCAzMzMzOSwgMzMzNDQsIAotICAgIDMzMzQ5LCAzMzM1NCwgMzMzNTksIDMzMzY0LCAzMzM2OSwgMzMzNzQsIDMzMzc5LCAzMzM4NSwgMzEzLCAyNiwgMzMzOTAsIAotICAgIDMzMzk0LCAzMzM5OCwgMzM0MDYsIDMzNDEwLCAzMzQxNCwgMzM0MTcsIDMzNDIwLCAzMzQyMiwgMzM0MjcsIDMzNDMxLCAKLSAgICAzMzQzNiwgMzM0NDAsIDMzNDQ1LCAzMzQ0OSwgMzM0NTQsIDMzNDU4LCAzMzQ2MSwgMzM0NjMsIDMzNDY3LCAzMzQ3MiwgCi0gICAgMzM0NzYsIDMzNDg3LCAzMzQ5MCwgMzM0OTIsIDMzNDk2LCAzMzUwOCwgMzM1MTcsIDMzNTIxLCAzMzUyNSwgMzM1MzEsIAotICAgIDMzNTM2LCAzMzU0NSwgMzM1NTEsIDMzNTU2LCAzMzU2MSwgMzM1NjUsIDMzNTcwLCAzMzU3NywgMzM1ODIsIDMzNTg4LCAKLSAgICAzMzU5MywgMzM1OTcsIDMzNjA0LCAyNTcxOCwgMjU3MjgsIDMzNjA4LCAzMzYxMywgMzM2MTgsIDMzNjIzLCAzMzYzMCwgCi0gICAgMzM2MzQsIDMzNjQxLCA4MTEzLCAzMzY0NywgMzM2NTYsIDMzNjY0LCAzMzY3OSwgMzM2OTMsIDMzNzAxLCAzMzcxMiwgCi0gICAgMzM3MjEsIDMzNzI2LCA3MjI3LCAzMzczNiwgMzM3NDEsIDMzNzQ2LCAzMzc1MCwgMzM3NTMsIDMzNzU3LCAzMzc2MiwgCi0gICAgMzM3NjYsIDMzNzczLCAzMzc3OCwgMzM3ODMsIDg5MTIsIDMzNzkzLCAzMzc5NSwgMzM3OTgsIDMzODAyLCAzMzgwOCwgCi0gICAgMzM4MTIsIDMzODE3LCAzMzgyMiwgMzM4MjgsIDMzODMzLCAzMzgzOSwgMzM4NDQsIDMzODU0LCAzMzg2MywgMzM4NzEsIAotICAgIDMzODc2LCAzMzg4MiwgMzM4ODcsIDMzODk0LCAzMzg5OCwgMzM5MDYsIDMzOTEzLCAzMzkyNiwgMzM5MzQsIDMzOTM4LCAKLSAgICAzMzk0OCwgMzM5NTMsIDMzOTU3LCAzMzk2NSwgMzM5NzMsIDMzOTc3LCAzMzk4NiwgMzM5OTIsIDMzOTk3LCAzNDAwNSwgCi0gICAgMzQwMTUsIDM0MDI0LCAzNDAzMywgMzQwNDIsIDM0MDUzLCAzNDA2MSwgMzQwNzIsIDM0MDgxLCAzNDA4OCwgMzQwOTQsIAotICAgIDM0MDk5LCAzNDExMCwgMzQxMTUsIDM0MTE5LCAzNDEyMiwgMzQxMjYsIDM0MTM0LCAzNDE0MCwgMzQxNDgsIDM0MTU1LCAKLSAgICAzNDE2MSwgMzQxNjYsIDM0MTcyLCAyNDE4LCAzNDE3NiwgMzQxNzgsIDM0MTgzLCAzNDE4OCwgMzQxOTMsIDM0MTk2LCAKLSAgICAzNDE5OCwgMzQyMDIsIDM0MjA1LCAzNDIxMiwgMzQyMTYsIDk4OTEsIDM0MjIwLCAzNDIyNiwgMzQyMzYsIDM0MjQxLCAKLSAgICAzNDI0NywgMzQyNTEsIDM0MjU2LCAzNDI2OSwgMjYxMDQsIDM0Mjc1LCAzNDI4NCwgMTc0NzUsIDM0MjkxLCAzNDMwMCwgCi0gICAgMzE2NzIsIDM0MzA4LCAzNDMxMywgMzQzMTcsIDM0MzI1LCAzNDMzMiwgMzQzMzcsIDM0MzQxLCAzNDM0NiwgMzQzNTAsIAotICAgIDM0MzU4LCAzNDM2NCwgMzQzNzAsIDM0Mzc1LCAzNDM3OSwgMzQzODIsIDM0Mzg3LCAzNDQwMCwgMzQ0MTYsIDIyOTk2LCAKLSAgICAzNDQzMywgMzQ0NDUsIDM0NDYyLCAzNDQ3NCwgMzQ0ODgsIDIzMDEzLCAyMzAzMiwgMzQ1MDAsIDM0NTEyLCAyNjgwLCAKLSAgICAzNDUyNiwgMzQ1MzEsIDM0NTM2LCAzNDU0MSwgMzQ1NDUsIDM0NTUyLCAzNDU2NCwgMzQ1NzAsIDM0NTczLCAzNDU4NCwgCi0gICAgMzQ1OTUsIDM0NjAwLCAzMjA4OSwgNjk1LCAzNDYwNCwgMzQ2MDgsIDM0NjEyLCAzNDYxNSwgMzQ2MjAsIDM0NjI1LCAKLSAgICAzNDYzMSwgMzQ2MzYsIDM0NjQxLCAzNDY0NywgMzQ2NTMsIDM0NjU4LCAzNDY2MiwgMzQ2NjcsIDM0NjcyLCAzNDY3NywgCi0gICAgMzQ2ODEsIDM0Njg0LCAzNDY5MCwgMzQ2OTUsIDM0NzAwLCAzNDcwNSwgMzQ3MDksIDM0NzE0LCAzNDcyMCwgMzQ3MjgsIAotICAgIDI2MzM3LCAzNDczMywgMzQ3MzgsIDM0NzQ1LCAzNDc1MSwgMzQ3NTcsIDM0NzYyLCAzNDc3MCwgMjI1MzgsIDM0Nzc3LCAKLSAgICAzNDc4MiwgMzQ3ODcsIDM0NzkyLCAzNDc5NiwgMzQ3OTksIDM0ODA0LCAzNDgwOCwgMzQ4MTIsIDM0ODE5LCAzNDgyNSwgCi0gICAgMzQ4MzEsIDM0ODM3LCAzNDg0NCwgMzQ4NDksIDM0ODU1LCAzMzk2OCwgMzQ4NTksIDM0ODYzLCAzNDg2OCwgMzQ4ODEsIAotICAgIDM0ODg2LCAzNDg5MiwgMzQ5MDAsIDM0OTA3LCAzNDkxNSwgMzQ5MjUsIDM0OTMxLCAzNDkzNywgMzQ5NDMsIDM0OTQ3LCAKLSAgICAzNDk1NiwgMzQ5NjQsIDM0OTcxLCAzNDk3NiwgMzQ5ODEsIDEwNDQ0LCAzNDk4NiwgMzQ5OTQsIDM1MDAxLCAzNTAwNywgCi0gICAgMzUwMTcsIDM1MDIyLCAzNTAyOCwgMzUwMzYsIDM2MDgsIDM1MDQzLCAzNTA1MCwgMzYxNCwgMzUwNTQsIDM1MDU5LCAKLSAgICAzNTA3MCwgMzUwNzcsIDM1MDgzLCAzNTA5MiwgMzUwOTYsIDQwMTUsIDM1MDk5LCAzNTEwNiwgMzUxMTIsIDM1MTE4LCAKLSAgICAzNTEyNiwgMzUxMzYsIDI5MDYzLCAzNTE0MywgMzUxNTEsIDM1MTU2LCAzNTE2MiwgMzUxNjcsIDI1OTY0LCAzNTE3MywgCi0gICAgMzUxODAsIDM1MTg2LCAzNTE5NSwgMjM2NzcsIDM1MjAyLCAzNTIwNywgMzUyMTEsIDM1MjE5LCAzNTIyNywgOTYwNywgCi0gICAgNTg5NSwgMzUyMzQsIDM1MjM4LCAzNTI0MCwgMzUyNDQsIDM1MjQ5LCAzNTI1MSwgMzUyNTcsIDM1MjYyLCAzNTI2NywgCi0gICAgMzUyNzQsIDMyNjEwLCAzNTI4MCwgMzUyODUsIDM1Mjg5LCAzNTI5NCwgMzUyOTgsIDM1MzA3LCAzNTMxMSwgMzUzMTcsIAotICAgIDM1MzI0LCAzNTMzMCwgMzUzMzcsIDM1MzQyLCAzNTM1MSwgMzUzNTYsIDM1MzYwLCAzNTM2NSwgMzUzNzIsIDM1MzgwLCAKLSAgICAzNTM4OCwgMzUzOTMsIDIxMzU2LCAzNTM5NywgMzU0MDAsIDM1NDA0LCAzNTQwOCwgMzU0MTIsIDM1NDE1LCAzNTQxNywgCi0gICAgMzU0MjUsIDM1NDI5LCAzNTQzNiwgMzU0NDAsIDM1NDQ0LCAzNTQ1MiwgMzU0NTksIDM1NDY5LCAzNTQ3MywgMzU0NzcsIAotICAgIDM1NDg1LCAzNTQ5MywgMzU0OTksIDM1NTA0LCAzNTUxMywgMTMzNTcsIDM1NTE5LCAzNTUyOCwgMzU1MzMsIDM1NTQwLCAKLSAgICAzNTU0OCwgMzU1NTYsIDM1NTY0LCAzNTU3MSwgMzU1NzgsIDM1NTg1LCAzNTU5MiwgMzU1OTksIDM1NjA0LCAzNTYxMCwgCi0gICAgMzU2MjcsIDM1NjM1LCAzNTY0NSwgMzU2NTMsIDM1NjYwLCA0MDcsIDM1NjY0LCAzNTY3MCwgMzU2NzQsIDM1Njc5LCAKLSAgICAzMzcxNywgMzU2ODUsIDM1Njg4LCAzNTY5MiwgMzU3MDAsIDM2MTksIDM1NzA4LCAzNTcxNCwgMzU3MjAsIDM1NzI5LCAKLSAgICAzNTczOSwgMzU3NDYsIDM1NzUyLCAzNjI1LCAzNjMxLCAzNTc2MSwgMzU3NjgsIDM1Nzc2LCAzNTc4MSwgMzU3ODUsIAotICAgIDM1NzkyLCAzNTgwMCwgMzU4MDcsIDM1ODEzLCAzNTgyMiwgMzU4MzIsIDM1ODM4LCAzNTg0NiwgMzU4NTUsIDM1ODYyLCAKLSAgICAzNTg3MCwgMzU4NzcsIDIyMDMyLCAzNTg4MSwgMzU4ODgsIDM1ODk0LCAzNTkwNCwgMzU5MTMsIDM1OTI0LCAzNTkyOCwgCi0gICAgMzU5MzgsIDM1OTQ0LCAzNTk1MSwgMzU5NTksIDM1OTY4LCAzNTk3NywgMzU5ODcsIDM1OTk4LCAzNjAwNSwgMzYwMTAsIAotICAgIDM2MDE3LCAzMDI5LCAzNjAyNSwgMzYwMzEsIDM2MDM2LCAzNjA0MiwgMzYwNDgsIDM2MDUzLCAzNjA2NiwgMzYwNzksIAotICAgIDM2MDkyLCAzNjA5OSwgMzYxMDUsIDM2MTEzLCAzNjEyMSwgMzYxMjYsIDM2MTMwLCAxNDY5LCAzNjEzNCwgMzYxMzksIAotICAgIDM2MTQ0LCAzNjE0OSwgMzYxNTQsIDM2MTYwLCAzNjE2NSwgMzYxNzAsIDM2MTc1LCAzNjE4MCwgMzYxODUsIDM2MTkwLCAKLSAgICAzNjE5NSwgMzYyMDEsIDM2MjA3LCAzNjIxMiwgMzYyMTcsIDM2MjIzLCAzNjIyOCwgMzYyMzMsIDM2MjM4LCAzNjI0NCwgCi0gICAgMzYyNDksIDM2MjU0LCAzNjI1OSwgMzYyNjQsIDM2MjcwLCAzNjI3NSwgMzYyODAsIDM2Mjg2LCAzNjI5MSwgMzYyOTYsIAotICAgIDM2MzAxLCAzNjMwNiwgMzYzMTEsIDM2MzE3LCAzNjMyMiwgMzYzMjgsIDM2MzMzLCAzNjMzOSwgMzYzNDQsIDM2MzQ5LCAKLSAgICAzNjM1NCwgMzYzNjAsIDM2MzY2LCAzNjM3MiwgMzYzNzgsIDM2Mzg0LCAzNjM5MCwgMzYzOTYsIDM2NDAyLCAzNjQwNywgCi0gICAgMzY0MTIsIDM2NDE4LCAzNjQyMywgMzY0MjgsIDM2NDMzLCAzNjQzOCwgMzY0NDMsIDM2NDQ4LCAzNjQ1MywgMzY0NTksIAotICAgIDM2NDY0LCAzNjQ2OSwgMzY0NzUsIDM2NDgxLCAxMDEsIDM2NDg2LCAzNjQ4OCwgMzY0OTIsIDM2NDk2LCAzNjUwMCwgCi0gICAgMzY1MDUsIDM2NTA5LCA5NTI4LCAzNjUxMywgMzY1MTksIDE3NDEsIDYyODAsIDM2NTI1LCAzNjUyOCwgMzY1MzMsIDM2NTM3LCAKLSAgICAzNjU0MiwgMzY1NDYsIDM2NTUwLCAzNjU1NSwgMTAyNDUsIDM2NTU5LCAzNjU2MywgMzY1NjcsIDM2NTcxLCAxNTM4NSwgCi0gICAgMzY1NzYsIDM2NTgwLCAzNjU4NSwgMzY1OTAsIDM2NTk1LCAzNjU5OSwgMzY2MDYsIDI2MTI4LCAzNjYxMiwgMzY2MTUsIAotICAgIDM2NjE5LCAzNjYyNCwgMzY2MzAsIDM2NjM0LCAzNjY0MiwgMzY2NDgsIDM2NjUzLCAzNjY1NywgMzY2NjMsIDM2NjY3LCAKLSAgICAzNjY3MSwgMzQ2MiwgMzQ2NywgMjkyNTUsIDM2Njc0LCAzNjY3OCwgMzY2ODIsIDM2Njg2LCAzNjY5MCwgMzY2OTgsIAotICAgIDM2NzA1LCAzNjcwOSwgMzY3MTYsIDM2NzIxLCAzMTcsIDM2NzI2LCAzNjczMCwgMzY3MzYsIDM2NzQ4LCAzNjc1NCwgCi0gICAgMzY3NjAsIDM2NzY0LCAzNjc3MCwgMzY3NzksIDM2NzgzLCAzNjc4NywgMzY3OTIsIDM2Nzk4LCAzNjgwMywgMzY4MDcsIAotICAgIDM2ODEyLCAzNjgxNiwgMzY4MjAsIDM2ODI3LCAzNjgzMywgMzY4MzgsIDM2ODUzLCAzNjg2OCwgMzY4ODMsIDM2ODk5LCAKLSAgICAzNjkxNywgMTAxOTUsIDM2OTMxLCAzNjkzOCwgMzY5NDIsIDM2OTQ1LCAzNjk1NCwgMzY5NTksIDM2OTYzLCAzNjk3MSwgCi0gICAgMzM5MTksIDM2OTc5LCAzNjk4MywgMzY5OTMsIDM3MDA0LCAyOTIyNSwgMzcwMTcsIDM3MDIxLCAzNzAzMCwgMzcwMzgsIAotICAgIDk3ODUsIDE0OTEzLCAzNzA0MiwgMjI0NDcsIDM3MDQ1LCAzMDE3MywgMzcwNTAsIDk3ODQsIDM3MDU1LCAzNzA2MSwgCi0gICAgMzcwNjYsIDM3MDcyLCAzNzA3NywgMzcwODMsIDM3MDg4LCAzNzA5NCwgMzcwOTksIDM3MTA1LCAzNzExMSwgMzcxMTcsIAotICAgIDM3MTIyLCAzNzA3OCwgMzcwODQsIDM3MDg5LCAzNzA5NSwgMzcxMDAsIDM3MTA2LCAzNzExMiwgODEyNiwgMzg3NCwgCi0gICAgMzcxMjYsIDM3MTM0LCAzNzEzOCwgMzcxNDEsIDM3MTQ1LCAzNzE1MCwgMzcxNTUsIDM3MTYxLCAzNzE2NywgMzcxNzIsIAotICAgIDM3MTc2LCAyNTk3NiwgMzcxODAsIDM3MTg0LCAzNzE5MCwgMzcxOTQsIDkwNDksIDM3MjAzLCAzNzIxMCwgMzcyMTQsIAotICAgIDExODc1LCAzNzIyMSwgMzcyMjcsIDM3MjMyLCAzNzIzOSwgMzcyNDYsIDM3MjUzLCAyODU3MSwgODA0OSwgMzcyNjAsIAotICAgIDM3MjY3LCAzNzI3NCwgMzcyODAsIDM3Mjg1LCAzNzI5MiwgMzczMDMsIDM3MzA5LCAzNzMxNCwgMzczMTksIDM3MzI0LCAKLSAgICAzNzMzMSwgMzcwNzksIDM3MzM1LCAzNzM0NSwgMzczNTYsIDM3MzYyLCAzNzM2NywgMzczNzIsIDM3Mzc3LCAzNzM4MiwgCi0gICAgMzczODcsIDM3MzkxLCAzNzM5NSwgMzc0MDEsIDM3NDA5LCAyMzE5LCA4NjUsIDEwMjYxLCAxMDI3MywgMTAyNzgsIDEwMjg0LCAKLSAgICAzNzQxOCwgMTAyODksIDEwMjk0LCAxMDMwMCwgMzc0MjMsIDM3NDMzLCAzNzQzNywgMTAzMDUsIDM3NDQyLCAxNjkwMywgCi0gICAgMzc0NDUsIDM3NDUwLCAzNzQ1NCwgMzc0NTksIDM3NDY0LCAzNzQ3MSwgMzc0NzgsIDM3NDgyLCAzNzQ4NSwgMzc0OTMsIAotICAgIDEwMjA4LCAzNzUwMCwgMzc1MDMsIDM3NTA5LCAzNzUxOSwgNTkyOSwgMzc1MjgsIDM3NTMyLCAzNzU0MCwgMzc1NDQsIAotICAgIDM3NTU0LCAzNzU2MCwgMzc1NzEsIDM3NTc3LCAzNzU4MywgMzc1ODgsIDM3NTk0LCAzNzYwMCwgMzc2MDYsIDM3NjExLCAKLSAgICAzNzYxNCwgMzc2MjEsIDM3NjI3LCAzNzYzMiwgMzc2MzksIDM3NjQ2LCAzNzY1MCwgMzc2NjAsIDM3NjczLCAzNzY4MiwgCi0gICAgMzc2OTEsIDM3NzAyLCAzNzcxNSwgMzc3MjYsIDM3NzM1LCAzNzc0NiwgMzc3NTEsIDM3NzYwLCAzNzc2NSwgMTAzMTAsIAotICAgIDM3NzcxLCAzNzc3OCwgMzc3ODYsIDM3NzkxLCAzNzc5NSwgMzc4MDIsIDM3ODA5LCAzODI5LCAxNiwgMzc4MTMsIDM3ODE4LCAKLSAgICAxNjc1NywgMzc4MjIsIDM3ODI1LCAzNzgyOCwgMjgwNzcsIDM3ODMyLCAyODU4MCwgMzc4NDAsIDM3ODQ0LCAzNzg0OCwgCi0gICAgMzc4NTEsIDM3ODU3LCAzNzEwMSwgMzc4NjMsIDM3ODcxLCAzNzg3NywgMzc4ODQsIDI4MDYwLCAzNzg4OCwgMjgyNTQsIAotICAgIDM3ODkyLCAzNzkwMSwgMzc5MDcsIDM3OTEzLCAzNzkxOCwgMzc5MjIsIDM3OTI4LCAzNzkzMiwgMzc5NDAsIDM3OTQ4LCAKLSAgICAyNjE5NCwgMzc5NTQsIDM3OTYxLCAzNzk2NywgMzc5NzIsIDM3OTc3LCAzNzk4MSwgMzc5ODcsIDM3OTkyLCAzNzk5OCwgCi0gICAgNDA1NiwgNzkxLCAzODAwNSwgMzgwMDksIDM4MDEyLCAxNTI3NSwgMzgwMjQsIDM1ODUxLCAzODAzNSwgMzgwMzgsIDM4MDQ1LCAKLSAgICAzODA0OSwgMzgwNTUsIDM4MDU5LCAzODA2NSwgMzgwNzAsIDM4MDc2LCAzODA4MSwgMzgwODYsIDM4MDkwLCAzODA5NCwgCi0gICAgMzgwOTksIDM4MTA0LCAzODExNCwgMzgxMjAsIDM4MTMzLCAzODEzOSwgMzgxNDUsIDM4MTUyLCAzODE1NywgMzgxNjMsIAotICAgIDM4MTY4LCAxNjY0MywgMTQ3MiwgMTAxOSwgMzEyMTgsIDMxMjI0LCAzODE3MywgMzEyMzAsIDMxMjQzLCAzMTI0OSwgCi0gICAgMzEyNTUsIDM4MTc5LCAzMTI2MSwgMzEyNjcsIDM4MTg1LCAzODE5MSwgMjIsIDM4MTk5LCAzODIwNiwgMzgyMTAsIDM4MjE0LCAKLSAgICAzODIyMiwgMzE5NzgsIDM4MjI2LCAzODIzMCwgMzgyMzcsIDM4MjQyLCAzODI0NiwgMzgyNTEsIDM4MjU3LCAzODI2MiwgCi0gICAgMzgyNjgsIDM4MjczLCAzODI3NywgMzgyODEsIDM4Mjg1LCAzODI5MCwgMzgyOTQsIDM4Mjk5LCAzODMwMywgMzgzMTAsIAotICAgIDM4MzE1LCAzODMxOSwgMzgzMjQsIDM4MzI4LCAzODMzMywgMzgzMzcsIDM4MzQyLCAzODM0OCwgMTU0OTUsIDE1NTAwLCAKLSAgICAzODM1MywgMzgzNTcsIDM4MzYwLCAzODM2NCwgMjExODMsIDM4MzY5LCAzODM3MywgMzgzNzksIDM4Mzg2LCAzODM5MSwgCi0gICAgMzg0MDEsIDM4NDA2LCAzODQxNCwgMzg0MTgsIDM4NDIxLCAzMTk5MywgMzg0MjUsIDQxMDksIDM4NDMwLCAzODQzNSwgCi0gICAgMzg0MzksIDM4NDQ0LCAzODQ0OCwgMzg0NTMsIDEzMzc1LCAzODQ2NCwgMzg0NjgsIDM4NDcxLCAzODQ3NiwgMzg0ODAsIAotICAgIDM4NDg0LCAzODQ4NywgMzg0OTEsIDgxNDUsIDEzMzkxLCAzODQ5NCwgMzg0OTcsIDM4NTAzLCAzODUwOCwgMzg1MTQsIAotICAgIDM4NTE5LCAzODUyNSwgMzg1MzAsIDM4NTM2LCAzODU0MSwgMzg1NDcsIDM4NTUzLCAzODU1OSwgMzg1NjQsIDM4NTY4LCAKLSAgICAzODU3MiwgMzg1ODEsIDM4NTk3LCAzODYxMywgMzg2MjMsIDI3OTY3LCAzODYzMCwgMzg2MzQsIDM4NjM5LCAzODY0NCwgCi0gICAgMzg2NDgsIDM4NjUyLCAzNTk3MiwgMzg2NTgsIDM4NjYzLCAzODY2NywgMzg2NzQsIDM4Njc5LCAzODY4MywgMzg2ODcsIAotICAgIDI2OTk2LCAzODY5MywgMjE0NTEsIDM4Njk4LCAzODcwNSwgMzg3MTMsIDM4NzE5LCAzODcyNiwgMzg3MzQsIDM4NzQwLCAKLSAgICAzODc0NCwgMzg3NTAsIDM4NzU4LCAzODc2MiwgMzg3NzEsIDk1MDksIDM4Nzc5LCAzODc4MywgMzg3OTEsIDM4Nzk4LCAKLSAgICAzODgwMywgMzg4MDgsIDM4ODEyLCAzODgxNSwgMzg4MTksIDM4ODIyLCAzODgyNiwgMzg4MzMsIDM4ODM4LCAzODg0NCwgCi0gICAgMjY0MTUsIDMxMjgxLCAzODg0OCwgMzg4NTUsIDM4ODYxLCAzODg2NywgMzg4NzIsIDM4ODc1LCAzODg3NywgMzg4ODQsIAotICAgIDM4ODkxLCAzODg5NywgMzg5MDEsIDM4OTA0LCAzODkwOCwgMzg5MTIsIDM4OTE2LCAzODkyMSwgMzg5MjUsIDM4OTI5LCAKLSAgICAzODkzMiwgMzg5MzYsIDM4OTUwLCAyMzA2MiwgMzg5NjksIDM4OTgyLCAzODk5NSwgMzkwMDgsIDIzMDgwLCAzOTAyMywgCi0gICAgMTA0OTcsIDM5MDM4LCAzOTA0NCwgMzkwNDgsIDM5MDUyLCAzOTA1OSwgMzkwNjQsIDM5MDY4LCAzOTA3NSwgMzkwODEsIAotICAgIDM5MDg2LCAzOTA5MiwgMzkxMDIsIDM5MTE0LCAzOTEyNSwgMzkxMzAsIDM5MTM3LCAzOTE0MSwgMzkxNDUsIDM5MTQ4LCAKLSAgICAxNTg5MSwgMzY3NywgMzkxNTYsIDE1NTIyLCAzOTE2OSwgMzkxNzYsIDM5MTgwLCAzOTE4NCwgMzkxODksIDM5MTk0LCAKLSAgICAzOTIwMCwgMzkyMDQsIDM5MjA4LCAzOTIxMSwgNzc0MiwgMTU1MzMsIDM5MjE2LCAzOTIyMCwgMzkyMjYsIDM5MjM1LCAKLSAgICAzOTI0MCwgMzkyNDcsIDM1ODI4LCAzOTI1MywgMzkyNTgsIDM5MjYyLCAzOTI2NywgMzkyNzQsIDM5Mjc4LCAzOTI4MSwgCi0gICAgMzkyODUsIDM5MjkwLCAxNDU2NSwgMzkyOTcsIDM5MzA0LCAxMDc3LCAzOTMwOCwgMzkzMTMsIDM5MzE4LCAzOTMyNCwgCi0gICAgMzkzMjksIDM5MzM0LCAzOTMzOCwgMzkzNDgsIDM5MzUzLCAzOTM1OSwgMzkzNjQsIDM5MzcwLCAzOTM3NSwgMzkzODEsIAotICAgIDM5MzkxLCAzOTM5NiwgMzk0MDEsIDM5NDA1LCA3MjI5LCA3MjQxLCAzOTQxMCwgMzk0MTMsIDM5NDIwLCAzOTQyNiwgCi0gICAgMzQwODQsIDM0MDkxLCAzOTQzNSwgMzk0MzksIDMyMDQxLCAzOTQ0NywgMzk0NTgsIDM5NDY2LCAzNjAyMCwgMzk0NzMsIAotICAgIDM5NDc4LCAzOTQ4MywgMzk0OTQsIDM5NTAxLCAzOTUxMiwgMzIwNjUsIDIxNDU3LCAzOTUyMCwgNzM1LCAzOTUyNSwgCi0gICAgMzk1MzEsIDI4MDUxLCAzOTUzNywgMzk1NDIsIDM5NTUyLCAzOTU2MSwgMzk1NjgsIDM5NTc0LCAzOTU3OCwgMzk1ODEsIAotICAgIDM5NTg4LCAzOTU5NCwgMzk2MDEsIDM5NjA3LCAzOTYxNywgMzk2MjUsIDM5NjMxLCAzOTYzNywgMzk2NDIsIDM5NjQ2LCAKLSAgICAzOTY1MywgMzk2NTksIDM5NjY2LCAzODkxNywgNTM1LCAxMzgxOCwgMzk2NzIsIDM5Njc3LCAzOTY4MCwgMzk2ODYsIAotICAgIDM5Njk0LCAxMzk2LCAzOTY5OSwgMzk3MDMsIDM5NzA4LCAzOTcxNSwgMzk3MjEsIDM5NzI1LCAzOTcyOSwgMzk3MzQsIAotICAgIDM5NzQzLCAzOTc1MCwgMzk3NjAsIDM5NzY2LCAyODA5NSwgMzk3ODMsIDM5NzkyLCAzOTgwMCwgMzk4MDYsIDM5ODExLCAKLSAgICAzOTgxOCwgMzk4MjQsIDM5ODMyLCAzOTg0MSwgMzk4NDksIDM5ODUzLCAzOTg1OCwgMzk4NjYsIDMyMDc0LCAzOTg3MiwgCi0gICAgMzk4OTEsIDE1ODI0LCAzOTkwNSwgMzk5MjEsIDM5OTM1LCAzOTk0MSwgMzk5NDYsIDM5OTUxLCAzOTk1NiwgMzk5NjIsIAotICAgIDMyMDgwLCAzOTk2NywgMzk5NzQsIDM5OTc5LCAzOTk4MywgMzQ1LCAyOTM2LCAzOTk5MCwgMzk5OTUsIDQwMDAwLCAyNzMyMiwgCi0gICAgMzk4MjEsIDQwMDA0LCA0MDAwOSwgNDAwMTcsIDQwMDIxLCA0MDAyNCwgNDAwMzAsIDQwMDM2LCA0MDA0MCwgMjgxNTAsIAotICAgIDQwMDQzLCA0MDA0OCwgNDAwNTIsIDQwMDU1LCA0MDA2MCwgNDAwNjQsIDQwMDY5LCA0MDA3NCwgNDAwNzgsIDQwMDgzLCAKLSAgICA0MDA4NywgNDAwOTEsIDIxMTc5LCAyMTE5MCwgNDAwOTUsIDQwMTAwLCA0MDEwNiwgMjY5NTMsIDQwMTExLCA0MDExNSwgCi0gICAgMjEyNjYsIDE2MDcyLCA0MDExOCwgNDAxMjMsIDQwMTI4LCA0MDEzMywgNDAxMzgsIDQwMTQzLCA0MDE0OCwgNDAxNTMsIAotICAgIDQ1MCwgNDksIDMxMjk5LCAzMTMwNCwgMzEzMDksIDMxMzE1LCAzMTMyMCwgMzEzMjUsIDQwMTU4LCAzMTMyOSwgNDAxNjIsIAotICAgIDQwMTY2LCA0MDE3MCwgMzEzMzQsIDMxMzQwLCA0MDE4NCwgMzEzNTEsIDMxMzU2LCA0MDE5MiwgNDAxOTcsIDMxMzYyLCAKLSAgICA0MDIwMiwgNDAyMDcsIDQwMjEyLCA0MDIxNywgNDAyMjMsIDQwMjI5LCA0MDIzNSwgMzEzNzksIDQwMjQ4LCA0MDI1NCwgCi0gICAgMzEzODMsIDQwMjU4LCAzMTM4OCwgNDAyNjMsIDMxMzkzLCAzMTM5OCwgNDAyNjYsIDQwMjcxLCA0MDI3NSwgMzA5NDgsIAotICAgIDQwMjgxLCAxMzU5OSwgNDAyODgsIDQwMjkzLCAzMTQwMywgNDAyOTcsIDQwMzAyLCA0MDMwNywgNDAzMTIsIDQwMzE2LCAKLSAgICA0MDMyMSwgNDAzMjYsIDQwMzMyLCA0MDMzNywgNDAzNDIsIDQwMzQ4LCA0MDM1NCwgNDAzNTksIDQwMzYzLCA0MDM2OCwgCi0gICAgNDAzNzMsIDQwMzc4LCA0MDM4MiwgNDAzODcsIDQwMzkyLCA0MDM5NywgNDA0MDMsIDQwNDA5LCA0MDQxNSwgNDA0MjAsIAotICAgIDQwNDI0LCA0MDQyOSwgNDA0MzMsIDMxNDA3LCAzMTQxMiwgMzE0MTcsIDQwNDM3LCA0MDQ0MSwgNDA0NDUsIDMxNDIyLCAKLSAgICAzMTQyOCwgMzE0MzQsIDMxNDQ2LCA0MDQ1NywgMjYwMTMsIDQwNDYxLCA0MDQ2NSwgNDA0NzAsIDQwNDc1LCA0MDQ4MCwgCi0gICAgNDA0ODUsIDQwNDg5LCA0MDQ5MywgNDA1MDMsIDQwNTA4LCA0MDUxMywgNDA1MTcsIDQwNTIxLCA0MDUyNCwgNDA1MzIsIAotICAgIDMxNDk0LCA0MDUzNywgMTQ3OSwgNDA1NDMsIDQwNTUxLCA0MDU2MCwgNDA1NjQsIDQwNTY4LCA0MDU3NiwgNDA1ODIsIAotICAgIDQwNTkwLCA0MDYwNiwgNDA2MTAsIDQwNjE0LCA0MDYxOSwgNDA2MzQsIDMxNTMxLCAxNzQ5LCAxMjA1NSwgNDA2MzgsIAotICAgIDEzNzgsIDQwNjUwLCA0MDY1MSwgNDA2NTksIDQwNjY2LCA0MDY3MSwgNDA2NzgsIDQwNjgzLCA5Mzc5LCAxMTE5LCAxMDMzMiwgCi0gICAgNDA2OTAsIDQwNjk1LCA0MDY5OCwgNDA3MDEsIDQwNzEwLCAxMjg2LCA0MDcxNSwgMzkwNjUsIDQwNzIyLCA0MDcyNywgCi0gICAgNDA3MzEsIDIyNTAzLCAyNTU3LCA0MDczOSwgMTA3NDEsIDQwNzQ5LCA0MDc1NSwgMjMzNywgMjM0NywgNDA3NjQsIDQwNzczLCAKLSAgICA0MDc4MywgNDA3OTQsIDMyOTMsIDM0MjM3LCAxMDM4NCwgMzgwNywgMTY2ODEsIDEyOTEsIDQwNzk5LCA0MDgwNywgNDA4MTQsIAotICAgIDQwODE5LCA0MDgyMywgNDA4MjcsIDIzODc1LCAxMDQxMSwgNDA4MzUsIDQwODQ0LCA0MDg1MywgNDA4NjEsIDQwODY4LCAKLSAgICA0MDg3OSwgNDA4ODQsIDQwODk3LCA0MDkxMCwgNDA5MjIsIDQwOTM0LCA0MDk0NiwgNDA5NTksIDQwOTcwLCA0MDk4MSwgCi0gICAgNDA5OTEsIDQwOTk5LCA0MTAwNywgNDEwMTksIDQxMDMxLCA0MTA0MiwgNDEwNTEsIDQxMDU5LCA0MTA2NiwgNDEwNzgsIAotICAgIDQxMDg1LCA0MTA5NCwgNDExMDEsIDQxMTE0LCA0MTExOSwgNDExMjksIDQxMTM0LCA0MTE0MCwgNDExNDUsIDM3MjExLCAKLSAgICA0MTE0OSwgNDExNTYsIDQxMTYwLCA0MTE2NywgNDExNzUsIDI1MTgsIDQxMTgyLCA0MTE5MywgNDEyMDMsIDQxMjEyLCAKLSAgICA0MTIyMCwgNDEyMzAsIDQxMjM4LCA0MTI0OCwgNDEyNTcsIDQxMjYyLCA0MTI2OCwgNDEyNzQsIDM3MDksIDQxMjg1LCAKLSAgICA0MTI5NSwgNDEzMDQsIDQxMzEzLCA0MTMyMywgNDEzMzEsIDQxMzQwLCA0MTM0NSwgNDEzNTAsIDQxMzU1LCAxNzA1LCAzNywgCi0gICAgNDEzNjMsIDQxMzcxLCA0MTM4MiwgNDEzOTMsIDE2MzU2LCA0MTQwMywgNDE0MDcsIDQxNDE0LCA0MTQyMCwgNDE0MjUsIAotICAgIDQxNDI5LCA0MTQ0MCwgNDE0NTAsIDQxNDU5LCA0MTQ3MCwgMTY3MzAsIDE2NzM1LCA0MTQ3NSwgNDE0ODQsIDQxNDg5LCAKLSAgICA0MTQ5OSwgNDE1MDQsIDQxNTEyLCA0MTUyMCwgNDE1MjcsIDQxNTMzLCA3MDc4LCAyMjgsIDQxNTM3LCA0MTU0MywgNDE1NDgsIAotICAgIDQxNTUxLCAyMTE3LCAzOTE4MSwgNDE1NTksIDQxNTYzLCA0MTU2NiwgMTUxMiwgNDE1NzIsIDEzOTgwLCAxMjk2LCA0MTU3NywgCi0gICAgNDE1OTAsIDQxNjA0LCAyNjQzLCA0MTYyMiwgNDE2MzQsIDQxNjQ2LCAyNjU3LCAyNjc0LCA0MTY2MCwgNDE2NzMsIDI2ODksIAotICAgIDQxNjg3LCA0MTY5OSwgMjcwNCwgNDE3MTMsIDEzMDIsIDEzMDgsIDEzMTQsIDEwNjU5LCA0MTcxOCwgNDE3MjMsIDQxNzI4LCAKLSAgICA0MTczMiwgNDE3NDcsIDQxNzYyLCA0MTc3NywgNDE3OTIsIDQxODA3LCA0MTgyMiwgNDE4MzcsIDQxODUyLCA0MTg2NywgCi0gICAgNDE4ODIsIDQxODk3LCA0MTkxMiwgNDE5MjcsIDQxOTQyLCA0MTk1NywgNDE5NzIsIDQxOTg3LCA0MjAwMiwgNDIwMTcsIAotICAgIDQyMDMyLCA0MjA0NywgNDIwNjIsIDQyMDc3LCA0MjA5MiwgNDIxMDcsIDQyMTIyLCA0MjEzNywgNDIxNTIsIDQyMTY3LCAKLSAgICA0MjE4MiwgNDIxOTcsIDQyMjEyLCA0MjIyNywgNDIyNDIsIDQyMjU3LCA0MjI3MiwgNDIyODcsIDQyMzAyLCA0MjMxNywgCi0gICAgNDIzMzIsIDQyMzQ3LCA0MjM2MiwgNDIzNzcsIDQyMzkyLCA0MjQwNywgNDI0MjIsIDQyNDM3LCA0MjQ1MiwgNDI0NjcsIAotICAgIDQyNDgyLCA0MjQ5NywgNDI1MTIsIDQyNTI3LCA0MjU0MiwgNDI1NTcsIDQyNTcyLCA0MjU4NywgNDI2MDIsIDQyNjE3LCAKLSAgICA0MjYzMiwgNDI2NDcsIDQyNjYyLCA0MjY3NywgNDI2OTIsIDQyNzA3LCA0MjcyMiwgNDI3MzcsIDQyNzUyLCA0Mjc2NywgCi0gICAgNDI3ODIsIDQyNzk3LCA0MjgxMiwgNDI4MjcsIDQyODQyLCA0Mjg1NywgNDI4NzIsIDQyODg3LCA0MjkwMiwgNDI5MTcsIAotICAgIDQyOTMyLCA0Mjk0NywgNDI5NjIsIDQyOTc3LCA0Mjk5MiwgNDMwMDcsIDQzMDIyLCA0MzAzNywgNDMwNTIsIDQzMDY3LCAKLSAgICA0MzA4MiwgNDMwOTcsIDQzMTEyLCA0MzEyNywgNDMxNDIsIDQzMTU3LCA0MzE3MiwgNDMxODcsIDQzMjAyLCA0MzIxNywgCi0gICAgNDMyMzIsIDQzMjQ3LCA0MzI2MiwgNDMyNzcsIDQzMjkyLCA0MzMwNywgNDMzMjIsIDQzMzM3LCA0MzM1MiwgNDMzNjcsIAotICAgIDQzMzgyLCA0MzM5NywgNDM0MTIsIDQzNDI3LCA0MzQ0MiwgNDM0NTcsIDQzNDcyLCA0MzQ4NywgNDM1MDIsIDQzNTE3LCAKLSAgICA0MzUzMiwgNDM1NDcsIDQzNTYyLCA0MzU3NywgNDM1OTIsIDQzNjA3LCA0MzYyMiwgNDM2MzcsIDQzNjUyLCA0MzY2NywgCi0gICAgNDM2ODIsIDQzNjk3LCA0MzcxMiwgNDM3MjcsIDQzNzQyLCA0Mzc1NywgNDM3NzIsIDQzNzg3LCA0MzgwMiwgNDM4MTcsIAotICAgIDQzODMyLCA0Mzg0NywgNDM4NjIsIDQzODc3LCA0Mzg5MiwgNDM5MDcsIDQzOTIyLCA0MzkzNywgNDM5NTIsIDQzOTY3LCAKLSAgICA0Mzk4MiwgNDM5OTcsIDQ0MDEyLCA0NDAyNywgNDQwNDIsIDQ0MDU3LCA0NDA3MiwgNDQwODcsIDQ0MTAyLCA0NDExNywgCi0gICAgNDQxMzIsIDQ0MTQ3LCA0NDE2MiwgNDQxNzcsIDQ0MTkyLCA0NDIwNywgNDQyMjIsIDQ0MjM3LCA0NDI1MiwgNDQyNjcsIAotICAgIDQ0MjgyLCA0NDI5NywgNDQzMTIsIDQ0MzI3LCA0NDM0MiwgNDQzNTcsIDQ0MzcyLCA0NDM4NywgNDQ0MDIsIDQ0NDE3LCAKLSAgICA0NDQzMiwgNDQ0NDcsIDQ0NDYyLCA0NDQ3NywgNDQ0OTIsIDQ0NTA3LCA0NDUyMiwgNDQ1MzcsIDQ0NTUyLCA0NDU2NywgCi0gICAgNDQ1ODIsIDQ0NTk3LCA0NDYxMiwgNDQ2MjcsIDQ0NjQyLCA0NDY1NywgNDQ2NzIsIDQ0Njg3LCA0NDcwMiwgNDQ3MTcsIAotICAgIDQ0NzMyLCA0NDc0NywgNDQ3NjIsIDQ0Nzc3LCA0NDc5MiwgNDQ4MDcsIDQ0ODIyLCA0NDgzNywgNDQ4NTIsIDQ0ODY3LCAKLSAgICA0NDg4MiwgNDQ4OTcsIDQ0OTEyLCA0NDkyNywgNDQ5NDIsIDQ0OTU3LCA0NDk3MiwgNDQ5ODcsIDQ1MDAyLCA0NTAxNywgCi0gICAgNDUwMzIsIDQ1MDQ3LCA0NTA2MiwgNDUwNzcsIDQ1MDkyLCA0NTEwNywgNDUxMjIsIDQ1MTM3LCA0NTE1MiwgNDUxNjcsIAotICAgIDQ1MTgyLCA0NTE5NywgNDUyMTIsIDQ1MjI3LCA0NTI0MiwgNDUyNTcsIDQ1MjcyLCA0NTI4NywgNDUzMDIsIDQ1MzE3LCAKLSAgICA0NTMzMiwgNDUzNDcsIDQ1MzYyLCA0NTM3NywgNDUzOTIsIDQ1NDA3LCA0NTQyMiwgNDU0MzcsIDQ1NDUyLCA0NTQ2NywgCi0gICAgNDU0ODIsIDQ1NDk3LCA0NTUxMiwgNDU1MjcsIDQ1NTQyLCA0NTU1NywgNDU1NzIsIDQ1NTg3LCA0NTYwMiwgNDU2MTcsIAotICAgIDQ1NjMyLCA0NTY0NywgNDU2NjIsIDQ1Njc3LCA0NTY5MiwgNDU3MDcsIDQ1NzIyLCA0NTczNywgNDU3NTIsIDQ1NzY3LCAKLSAgICA0NTc4MiwgNDU3OTcsIDQ1ODEyLCA0NTgyNywgNDU4NDIsIDQ1ODU3LCA0NTg3MiwgNDU4ODcsIDQ1OTAyLCA0NTkxNywgCi0gICAgNDU5MzIsIDQ1OTQ3LCA0NTk2MiwgNDU5NzcsIDQ1OTkyLCA0NjAwNywgNDYwMjIsIDQ2MDM3LCA0NjA1MiwgNDYwNjcsIAotICAgIDQ2MDgyLCA0NjA5NywgNDYxMTIsIDQ2MTI3LCA0NjE0MiwgNDYxNTcsIDQ2MTcyLCA0NjE4NywgNDYyMDIsIDQ2MjE3LCAKLSAgICA0NjIzMiwgNDYyNDcsIDQ2MjYyLCA0NjI3NywgNDYyOTIsIDQ2MzA3LCA0NjMyMiwgNDYzMzcsIDQ2MzUyLCA0NjM2NywgCi0gICAgNDYzODIsIDQ2Mzk3LCA0NjQxMiwgNDY0MjcsIDQ2NDQyLCA0NjQ1NywgNDY0NzIsIDQ2NDg3LCA0NjUwMiwgNDY1MTcsIAotICAgIDQ2NTMyLCA0NjU0NywgNDY1NjIsIDQ2NTc3LCA0NjU5MiwgNDY2MDcsIDQ2NjIyLCA0NjYzNywgNDY2NTIsIDQ2NjY3LCAKLSAgICA0NjY4MiwgNDY2OTcsIDQ2NzEyLCA0NjcyNywgNDY3NDIsIDQ2NzU3LCA0Njc3MiwgNDY3ODcsIDQ2ODAyLCA0NjgxNywgCi0gICAgNDY4MzIsIDQ2ODQ3LCA0Njg2MiwgNDY4NzcsIDQ2ODkyLCA0NjkwNywgNDY5MjIsIDQ2OTM3LCA0Njk1MiwgNDY5NjcsIAotICAgIDQ2OTgyLCA0Njk5NywgNDcwMTIsIDQ3MDI3LCA0NzA0MiwgNDcwNTcsIDQ3MDcyLCA0NzA4NywgNDcxMDIsIDQ3MTE3LCAKLSAgICA0NzEzMiwgNDcxNDcsIDQ3MTYyLCA0NzE3NywgNDcxOTIsIDQ3MjA3LCA0NzIyMiwgNDcyMzcsIDQ3MjUyLCA0NzI2NywgCi0gICAgNDcyODIsIDQ3Mjk3LCA0NzMxMiwgNDczMjcsIDQ3MzQyLCA0NzM1NywgNDczNzIsIDQ3Mzg3LCA0NzQwMiwgNDc0MTcsIAotICAgIDQ3NDMyLCA0NzQ0NywgNDc0NjIsIDQ3NDc3LCA0NzQ5MiwgNDc1MDcsIDQ3NTIyLCA0NzUzNywgNDc1NTIsIDQ3NTY3LCAKLSAgICA0NzU4MiwgNDc1OTcsIDQ3NjEyLCA0NzYyNywgNDc2NDIsIDQ3NjU3LCA0NzY3MiwgNDc2ODcsIDQ3NzAyLCA0NzcxNywgCi0gICAgNDc3MzIsIDQ3NzQ3LCA0Nzc2MiwgNDc3NzcsIDQ3NzkyLCA0NzgwNywgNDc4MjIsIDQ3ODM3LCA0Nzg1MiwgNDc4NjcsIAotICAgIDQ3ODgyLCA0Nzg5NywgNDc5MTIsIDQ3OTI3LCA0Nzk0MiwgNDc5NTcsIDQ3OTcyLCA0Nzk4NywgNDgwMDIsIDQ4MDE3LCAKLSAgICA0ODAzMiwgNDgwNDcsIDQ4MDYyLCA0ODA3NywgNDgwOTIsIDQ4MTA3LCA0ODEyMiwgNDgxMzcsIDQ4MTUyLCA0ODE2NywgCi0gICAgNDgxODIsIDQ4MTk3LCA0ODIxMiwgNDgyMjcsIDQ4MjQyLCA0ODI1NywgNDgyNzIsIDQ4Mjg3LCA0ODMwMiwgNDgzMTcsIAotICAgIDQ4MzMyLCA0ODM0NywgNDgzNjIsIDQ4Mzc3LCA0ODM5MiwgNDg0MDcsIDQ4NDIyLCA0ODQzNywgNDg0NTIsIDQ4NDY3LCAKLSAgICA0ODQ4MiwgNDg0OTcsIDQ4NTEyLCA0ODUyNywgNDg1NDIsIDQ4NTU3LCA0ODU3MiwgNDg1ODcsIDQ4NjAyLCA0ODYxNywgCi0gICAgNDg2MzIsIDQ4NjQ3LCA0ODY2MiwgNDg2NzcsIDQ4NjkyLCA0ODcwNywgNDg3MjIsIDQ4NzM3LCA0ODc1MiwgNDg3NjcsIAotICAgIDQ4NzgyLCA0ODc5NywgNDg4MTIsIDQ4ODI3LCA0ODg0MiwgNDg4NTcsIDQ4ODcyLCA0ODg4NywgNDg5MDIsIDQ4OTE3LCAKLSAgICA0ODkzMiwgNDg5NDcsIDQ4OTYyLCA0ODk3NywgNDg5OTIsIDQ5MDA3LCA0OTAyMiwgNDkwMzcsIDQ5MDUyLCA0OTA2NywgCi0gICAgNDkwODIsIDQ5MDk3LCA0OTExMiwgNDkxMjcsIDQ5MTQyLCA0OTE1NywgNDkxNzIsIDQ5MTg3LCA0OTIwMiwgNDkyMTcsIAotICAgIDQ5MjMyLCA0OTI0NywgNDkyNjIsIDQ5Mjc3LCA0OTI5MiwgNDkzMDcsIDQ5MzIyLCA0OTMzNywgNDkzNTIsIDQ5MzY3LCAKLSAgICA0OTM4MiwgNDkzOTcsIDQ5NDEyLCA0OTQyNywgNDk0NDIsIDQ5NDU3LCA0OTQ3MiwgNDk0ODcsIDQ5NTAyLCA0OTUxNywgCi0gICAgNDk1MzIsIDQ5NTQ4LCA0OTU2NCwgNDk1ODAsIDQ5NTk2LCA0OTYxMiwgNDk2MjgsIDQ5NjQ0LCA0OTY2MCwgNDk2NzYsIAotICAgIDQ5NjkyLCA0OTcwOCwgNDk3MjQsIDQ5NzQwLCA0OTc1NiwgNDk3NzIsIDQ5Nzg4LCA0OTgwNCwgNDk4MjAsIDQ5ODM2LCAKLSAgICA0OTg1MiwgNDk4NjgsIDQ5ODg0LCA0OTkwMCwgNDk5MTYsIDQ5OTMyLCA0OTk0OCwgNDk5NjQsIDQ5OTgwLCA0OTk5NiwgCi0gICAgNTAwMTIsIDUwMDI4LCA1MDA0NCwgNTAwNjAsIDUwMDc2LCA1MDA5MiwgNTAxMDgsIDUwMTI0LCA1MDE0MCwgNTAxNTYsIAotICAgIDUwMTcyLCA1MDE4OCwgNTAyMDQsIDUwMjIwLCA1MDIzNiwgNTAyNTIsIDUwMjY4LCA1MDI4NCwgNTAzMDAsIDUwMzE2LCAKLSAgICA1MDMzMiwgNTAzNDgsIDUwMzY0LCA1MDM4MCwgNTAzOTYsIDUwNDEyLCA1MDQyOCwgNTA0NDQsIDUwNDYwLCA1MDQ3NiwgCi0gICAgNTA0OTIsIDUwNTA4LCA1MDUyNCwgNTA1NDAsIDUwNTU2LCA1MDU3MiwgNTA1ODgsIDUwNjA0LCA1MDYyMCwgNTA2MzYsIAotICAgIDUwNjUyLCA1MDY2OCwgNTA2ODQsIDUwNzAwLCA1MDcxNiwgNTA3MzIsIDUwNzQ4LCA1MDc2NCwgNTA3ODAsIDUwNzk2LCAKLSAgICA1MDgxMiwgNTA4MjgsIDUwODQ0LCA1MDg2MCwgNTA4NzYsIDUwODkyLCA1MDkwOCwgNTA5MjQsIDUwOTQwLCA1MDk1NiwgCi0gICAgNTA5NzIsIDUwOTg4LCA1MTAwNCwgNTEwMjAsIDUxMDM2LCA1MTA1MiwgNTEwNjgsIDUxMDg0LCA1MTEwMCwgNTExMTYsIAotICAgIDUxMTMyLCA1MTE0OCwgNTExNjQsIDUxMTgwLCA1MTE5NiwgNTEyMTIsIDUxMjI4LCA1MTI0NCwgNTEyNjAsIDUxMjc2LCAKLSAgICA1MTI5MiwgNTEzMDgsIDUxMzI0LCA1MTM0MCwgNTEzNTYsIDUxMzcyLCA1MTM4OCwgNTE0MDQsIDUxNDIwLCA1MTQzNiwgCi0gICAgNTE0NTIsIDUxNDY4LCA1MTQ4NCwgNTE1MDAsIDUxNTE2LCA1MTUzMiwgNTE1NDgsIDUxNTY0LCA1MTU4MCwgNTE1OTYsIAotICAgIDUxNjEyLCA1MTYyOCwgNTE2NDQsIDUxNjYwLCA1MTY3NiwgNTE2OTIsIDUxNzA4LCA1MTcyNCwgNTE3NDAsIDUxNzU2LCAKLSAgICA1MTc3MiwgNTE3ODgsIDUxODA0LCA1MTgyMCwgNTE4MzYsIDUxODUyLCA1MTg2OCwgNTE4ODQsIDUxOTAwLCA1MTkxNiwgCi0gICAgNTE5MzIsIDUxOTQ4LCA1MTk2NCwgNTE5ODAsIDUxOTk2LCA1MjAxMiwgNTIwMjgsIDUyMDQ0LCA1MjA2MCwgNTIwNzYsIAotICAgIDUyMDkyLCA1MjEwOCwgNTIxMjQsIDUyMTQwLCA1MjE1NiwgNTIxNzIsIDUyMTg4LCA1MjIwNCwgNTIyMjAsIDUyMjM2LCAKLSAgICA1MjI1MiwgNTIyNjgsIDUyMjg0LCA1MjMwMCwgNTIzMTYsIDUyMzMyLCA1MjM0OCwgNTIzNjQsIDUyMzgwLCA1MjM5NiwgCi0gICAgNTI0MTIsIDUyNDI4LCA1MjQ0NCwgNTI0NjAsIDUyNDc2LCA1MjQ5MiwgNTI1MDgsIDUyNTI0LCA1MjU0MCwgNTI1NTYsIAotICAgIDUyNTcyLCA1MjU4OCwgNTI2MDQsIDUyNjIwLCA1MjYzNiwgNTI2NTIsIDUyNjY4LCA1MjY4NCwgNTI3MDAsIDUyNzE2LCAKLSAgICA1MjczMiwgNTI3NDgsIDUyNzY0LCA1Mjc4MCwgNTI3OTYsIDUyODEyLCA1MjgyOCwgNTI4NDQsIDUyODYwLCA1Mjg3NiwgCi0gICAgNTI4OTIsIDUyOTA4LCA1MjkyNCwgNTI5NDAsIDUyOTU2LCA1Mjk3MiwgNTI5ODgsIDUzMDA0LCA1MzAyMCwgNTMwMzYsIAotICAgIDUzMDUyLCA1MzA2OCwgNTMwODQsIDUzMTAwLCA1MzExNiwgNTMxMzIsIDUzMTQ4LCA1MzE2NCwgNTMxODAsIDUzMTk2LCAKLSAgICA1MzIxMiwgNTMyMjgsIDUzMjQ0LCA1MzI2MCwgNTMyNzYsIDUzMjkyLCA1MzMwOCwgNTMzMjQsIDUzMzQwLCA1MzM1NiwgCi0gICAgNTMzNzIsIDUzMzg4LCA1MzQwNCwgNTM0MjAsIDUzNDM2LCA1MzQ1MiwgNTM0NjgsIDUzNDg0LCA1MzUwMCwgNTM1MTYsIAotICAgIDUzNTMyLCA1MzU0OCwgNTM1NjQsIDUzNTgwLCA1MzU5NiwgNTM2MTIsIDUzNjI4LCA1MzY0NCwgNTM2NjAsIDUzNjc2LCAKLSAgICA1MzY5MiwgNTM3MDgsIDUzNzI0LCA1Mzc0MCwgNTM3NTYsIDUzNzcyLCA1Mzc4OCwgNTM4MDQsIDUzODIwLCA1MzgzNiwgCi0gICAgNTM4NTIsIDUzODY4LCA1Mzg4NCwgNTM5MDAsIDUzOTE2LCA1MzkzMiwgNTM5NDgsIDUzOTY0LCA1Mzk4MCwgNTM5OTYsIAotICAgIDU0MDEyLCA1NDAyOCwgNTQwNDQsIDU0MDYwLCA1NDA3NiwgNTQwOTIsIDU0MTA4LCA1NDEyNCwgNTQxNDAsIDU0MTU2LCAKLSAgICA1NDE3MiwgNTQxODgsIDU0MjA0LCA1NDIyMCwgNTQyMzYsIDU0MjUyLCA1NDI2OCwgNTQyODQsIDU0MzAwLCA1NDMxNiwgCi0gICAgNTQzMzIsIDU0MzQ4LCA1NDM2NCwgNTQzODAsIDU0Mzk2LCA1NDQxMiwgNTQ0MjgsIDU0NDQ0LCA1NDQ2MCwgNTQ0NzYsIAotICAgIDU0NDkyLCA1NDUwOCwgNTQ1MjQsIDU0NTQwLCA1NDU1NiwgNTQ1NzIsIDU0NTg4LCA1NDYwNCwgNTQ2MjAsIDU0NjM2LCAKLSAgICA1NDY1MiwgNTQ2NjgsIDU0Njg0LCA1NDcwMCwgNTQ3MTYsIDU0NzMyLCA1NDc0OCwgNTQ3NjQsIDU0NzgwLCA1NDc5NiwgCi0gICAgNTQ4MTIsIDU0ODI4LCA1NDg0NCwgNTQ4NjAsIDU0ODc2LCA1NDg5MiwgNTQ5MDgsIDU0OTI0LCA1NDk0MCwgNTQ5NTYsIAotICAgIDU0OTcyLCA1NDk4OCwgNTUwMDQsIDU1MDIwLCA1NTAzNiwgNTUwNTIsIDU1MDY4LCA1NTA4NCwgNTUxMDAsIDU1MTE2LCAKLSAgICA1NTEzMiwgNTUxNDgsIDU1MTY0LCA1NTE4MCwgNTUxOTYsIDU1MjEyLCA1NTIyOCwgNTUyNDQsIDU1MjYwLCA1NTI3NiwgCi0gICAgNTUyOTIsIDU1MzA4LCA1NTMyNCwgNTUzNDAsIDU1MzU2LCA1NTM3MiwgNTUzODgsIDU1NDA0LCA1NTQyMCwgNTU0MzYsIAotICAgIDU1NDUyLCA1NTQ2OCwgNTU0ODQsIDU1NTAwLCA1NTUxNiwgNTU1MzIsIDU1NTQ4LCA1NTU2NCwgNTU1ODAsIDU1NTk2LCAKLSAgICA1NTYxMiwgNTU2MjgsIDU1NjQ0LCA1NTY2MCwgNTU2NzYsIDU1NjkyLCA1NTcwOCwgNTU3MjQsIDU1NzQwLCA1NTc1NiwgCi0gICAgNTU3NzIsIDU1Nzg4LCA1NTgwNCwgNTU4MjAsIDU1ODM2LCA1NTg1MiwgNTU4NjgsIDU1ODg0LCA1NTkwMCwgNTU5MTYsIAotICAgIDU1OTMyLCA1NTk0OCwgNTU5NjQsIDU1OTgwLCA1NTk5NiwgNTYwMTIsIDU2MDI4LCA1NjA0NCwgNTYwNjAsIDU2MDc2LCAKLSAgICA1NjA5MiwgNTYxMDgsIDU2MTI0LCA1NjE0MCwgNTYxNTYsIDU2MTcyLCA1NjE4OCwgNTYyMDQsIDU2MjIwLCA1NjIzNiwgCi0gICAgNTYyNTIsIDU2MjY4LCA1NjI4NCwgNTYzMDAsIDU2MzE2LCA1NjMzMiwgNTYzNDgsIDU2MzY0LCA1NjM4MCwgNTYzOTYsIAotICAgIDU2NDEyLCA1NjQyOCwgNTY0NDQsIDU2NDYwLCA1NjQ3NiwgNTY0OTIsIDU2NTA4LCA1NjUyNCwgNTY1NDAsIDU2NTU2LCAKLSAgICA1NjU3MiwgNTY1ODgsIDU2NjA0LCA1NjYyMCwgNTY2MzYsIDU2NjUyLCA1NjY2OCwgNTY2ODQsIDU2NzAwLCA1NjcxNiwgCi0gICAgNTY3MzIsIDU2NzQ4LCA1Njc2NCwgNTY3ODAsIDU2Nzk2LCA1NjgxMiwgNTY4MjgsIDU2ODQ0LCA1Njg2MCwgNTY4NzYsIAotICAgIDU2ODkyLCA1NjkwOCwgNTY5MjQsIDU2OTQwLCA1Njk1NiwgNTY5NzIsIDU2OTg4LCA1NzAwNCwgNTcwMjAsIDU3MDM2LCAKLSAgICA1NzA1MiwgNTcwNjgsIDU3MDg0LCA1NzEwMCwgNTcxMTYsIDU3MTMyLCA1NzE0OCwgNTcxNjQsIDU3MTgwLCA1NzE5NiwgCi0gICAgNTcyMTIsIDU3MjI4LCA1NzI0NCwgNTcyNjAsIDU3Mjc2LCA1NzI5MiwgNTczMDgsIDU3MzI0LCA1NzM0MCwgNTczNTYsIAotICAgIDU3MzcyLCA1NzM4OCwgNTc0MDQsIDU3NDIwLCA1NzQzNiwgNTc0NTIsIDU3NDY4LCA1NzQ4NCwgNTc1MDAsIDU3NTE2LCAKLSAgICA1NzUzMiwgNTc1NDgsIDU3NTY0LCA1NzU4MCwgNTc1OTYsIDU3NjEyLCA1NzYyOCwgNTc2NDQsIDU3NjYwLCA1NzY3NiwgCi0gICAgNTc2OTIsIDU3NzA4LCA1NzcyNCwgNTc3NDAsIDU3NzU2LCA1Nzc3MiwgNTc3ODgsIDU3ODA0LCA1NzgyMCwgNTc4MzYsIAotICAgIDU3ODUyLCA1Nzg2OCwgNTc4ODQsIDU3OTAwLCA1NzkxNiwgNTc5MzIsIDU3OTQ4LCA1Nzk2NCwgNTc5ODAsIDU3OTk2LCAKLSAgICA1ODAxMiwgNTgwMjgsIDU4MDQ0LCA1ODA2MCwgNTgwNzYsIDU4MDkyLCA1ODEwOCwgNTgxMjQsIDU4MTQwLCA1ODE1NiwgCi0gICAgNTgxNzIsIDU4MTg4LCA1ODIwNCwgNTgyMTksIDE2NzYyLCA1ODIyOCwgNTgyMzQsIDU4MjQwLCA1ODI1MCwgNTgyNTgsIAotICAgIDE0ODk0LCAxNTQ0NSwgOTk2MCwgNTgyNzEsIDE1MjAsIDU4Mjc5LCAzNzYxLCAyNzQzMiwgNzE4MywgNTgyODUsIDU4MjkwLCAKLSAgICA1ODI5NSwgNTgzMDAsIDU4MzA1LCA1ODMxMSwgNTgzMTYsIDU4MzIyLCA1ODMyNywgNTgzMzMsIDU4MzM4LCA1ODM0MywgCi0gICAgNTgzNDgsIDU4MzUzLCA1ODM1OSwgNTgzNjQsIDU4MzY5LCA1ODM3NCwgNTgzNzksIDU4Mzg0LCA1ODM4OSwgNTgzOTQsIAotICAgIDU4NDAwLCA1ODQwNSwgNTg0MTEsIDU4NDE4LCAyNTYxLCA1ODQyMywgNTg0MjksIDg1MjYsIDU4NDMzLCA1ODQzOCwgCi0gICAgNTg0NDUsIDU4NDUzLCA0MCwgNTg0NTcsIDU4NDYzLCA1ODQ2OCwgNTg0NzMsIDU4NDc3LCA1ODQ4MiwgNTg0ODYsIDU4NDkwLCAKLSAgICAxMDY4NCwgNTg0OTQsIDU4NTA0LCA1ODUxNywgNTg1MjgsIDU4NTQxLCA1ODU0OCwgNTg1NTQsIDU4NTU5LCA1ODU2NSwgCi0gICAgNTg1NzEsIDU4NTc3LCA1ODU4MiwgNTg1ODcsIDU4NTkyLCA1ODU5NywgNTg2MDEsIDU4NjA2LCA1ODYxMSwgNTg2MTYsIAotICAgIDU4NjIyLCA1ODYyOCwgNTg2MzQsIDU4NjM5LCA1ODY0MywgNTg2NDgsIDU4NjUzLCA1ODY1NywgNTg2NjIsIDU4NjY3LCAKLSAgICA1ODY3MiwgNTg2NzYsIDEwNzAwLCAxMDcxMSwgMTA3MTYsIDE1NjMsIDU4NjgwLCAxNTY4LCA1ODY4NiwgMTYyMzksIAotICAgIDU4Njg5LCA1ODY5NSwgMTU5OSwgNTg3MDEsIDE2MDUsIDE2MTEsIDEwNzQ2LCA1ODcwNiwgNTg3MTQsIDU4NzIxLCA1ODcyNSwgCi0gICAgNTg3MzEsIDU4NzM2LCAzMDk3NywgNTg3NDEsIDU4NzQ4LCA1ODc1MywgNTg3NTcsIDU4NzYxLCAxNjE2LCAxNjMzMSwgCi0gICAgNTg3NzAsIDU4Nzc0LCAxNjM0MiwgMTEyNSwgNTg3NzgsIDU4Nzg1LCA1ODc5MCwgNTg3OTQsIDE2MzY3LCAxNjIwLCAKLSAgICAzNzM1MCwgNTg3OTcsIDU4ODAyLCA1ODgxMiwgNTg4MjEsIDU4ODI2LCA1ODgzMCwgNTg4MzYsIDE2MjUsIDM5MjU5LCAKLSAgICA1ODg0MSwgNTg4NTAsIDU4ODU2LCA1ODg2MSwgMTA5MDQsIDEwOTEwLCA1ODg2NywgNTg4NzksIDU4ODk2LCA1ODkxMywgCi0gICAgNTg5MzAsIDU4OTQ3LCA1ODk2NCwgNTg5ODEsIDU4OTk4LCA1OTAxNSwgNTkwMzIsIDU5MDQ5LCA1OTA2NiwgNTkwODMsIAotICAgIDU5MTAwLCA1OTExNywgNTkxMzQsIDU5MTUxLCA1OTE2OCwgNTkxODUsIDU5MjAyLCA1OTIxOSwgNTkyMzYsIDU5MjUzLCAKLSAgICA1OTI3MCwgNTkyODcsIDU5MzA0LCA1OTMyMSwgNTkzMzgsIDU5MzU1LCA1OTM3MiwgNTkzODksIDU5NDA2LCA1OTQyMywgCi0gICAgNTk0NDAsIDU5NDU3LCA1OTQ3NCwgNTk0OTEsIDU5NTA4LCA1OTUyNSwgNTk1NDIsIDU5NTU5LCA1OTU3NiwgNTk1OTMsIAotICAgIDU5NjEwLCA1OTYyNywgNTk2NDQsIDU5NjYxLCA1OTY3OCwgNTk2OTUsIDU5NzEyLCA1OTcyMywgNTk3MjgsIDE2MzAsIAotICAgIDU5NzMyLCA1OTczOCwgNTk3NDMsIDU5NzQ4LCA5MzI2LCAxNjM1LCA1OTc1NCwgNTk3NjMsIDI3NzMxLCA1OTc2OCwgCi0gICAgNTk3NzksIDU5Nzg5LCA1OTc5NCwgNTk4MDEsIDU5ODA3LCA1OTgxMiwgNTk4MTcsIDE2NjE5LCA1OTgyMSwgMTA5MjEsIAotICAgIDE2NDAsIDEwOTI2LCA1OTgyNywgNTk4MzIsIDU5ODM4LCA1OTg0MywgNTk4NDgsIDU5ODUzLCA1OTg1OCwgNTk4NjMsIAotICAgIDU5ODY4LCA1OTg3MywgNTk4NzksIDU5ODg1LCA1OTg5MSwgNTk4OTYsIDU5OTAwLCA1OTkwNSwgNTk5MTAsIDU5OTE0LCAKLSAgICA1OTkxOSwgNTk5MjQsIDU5OTI5LCA1OTkzMywgNTk5MzgsIDU5OTQ0LCA1OTk0OSwgNTk5NTQsIDU5OTU4LCA1OTk2MywgCi0gICAgNTk5NjgsIDU5OTc0LCA1OTk3OSwgNTk5ODQsIDU5OTkwLCA1OTk5NiwgNjAwMDEsIDYwMDA1LCA2MDAxMCwgNjAwMTUsIAotICAgIDYwMDIwLCA2MDAyNCwgNjAwMjksIDYwMDM0LCA2MDAzOSwgNjAwNDUsIDYwMDUxLCA2MDA1NiwgNjAwNjAsIDYwMDY0LCAKLSAgICA2MDA2OSwgNjAwNzQsIDYwMDc5LCAyOTEyOSwgNjAwODMsIDYwMDg4LCA2MDA5MywgNjAwOTksIDYwMTA0LCA2MDEwOSwgCi0gICAgNjAxMTMsIDYwMTE4LCA2MDEyMywgNjAxMjksIDYwMTM0LCA2MDEzOSwgNjAxNDUsIDYwMTUxLCA2MDE1NiwgNjAxNjAsIAotICAgIDYwMTY1LCA2MDE3MCwgNjAxNzQsIDYwMTc5LCA2MDE4NCwgNjAxODksIDYwMTk1LCA2MDIwMSwgNjAyMDYsIDYwMjEwLCAKLSAgICA2MDIxNSwgNjAyMjAsIDYwMjI0LCA2MDIyOSwgNjAyMzQsIDYwMjM5LCA2MDI0MywgNjAyNDYsIDMxNjM5LCA2MDI1MSwgCi0gICAgNjAyNTksIDE2Njg1LCAzNjYzLCAxMTAxNywgNjAyNjUsIDYwMjc1LCA2MDI5MCwgMTEwMjIsIDYwMzAxLCA2MDMwNiwgCi0gICAgNjAzMTcsIDYwMzI5LCA2MDM0MSwgNjAzNTMsIDI2OTUsIDYwMzY1LCA2MDM3MCwgNjAzODIsIDYwMzg2LCA2MDM5MiwgCi0gICAgNjAzOTgsIDYwNDAzLCAxNjUyLCAxMDc4LCA2MDQxMiwgNjA0MTcsIDM5MzA5LCA2MDQyMSwgNjA0MjUsIDYwNDMwLCAKLSAgICA2MDQzNCwgMTY3NzAsIDYwNDM5LCA2MDQ0MiwgNjA0NTAsIDYwNDU4LCAxNjU2LCAxMTA0NywgMTEwNTMsIDE2NjEsIAotICAgIDYwNDY2LCA2MDQ3MywgNjA0NzgsIDYwNDg3LCA2MDQ5NywgNjA1MDQsIDYwNTA5LCA2MDUxNCwgMTY2NiwgNjA1MjEsIAotICAgIDYwNTI2LCAxNjg4NSwgNjA1MzAsIDYwNTM1LCA2MDU0MiwgNjA1NDgsIDYwNTUyLCA2MDU2MywgNjA1NzMsIDE2OTA3LCAKLSAgICA5MjM0LCA5MjQxLCAxNjcxLCA2MDU4MCwgNjA1ODYsIDYwNTk0LCA2MDYwMSwgNjA2MDcsIDYwNjE0LCA2MDYyNiwgNjA2MzIsIAotICAgIDYwNjM3LCA2MDY0OSwgNjA2NjAsIDYwNjY5LCA2MDY3OSwgMzc0MCwgMzA4MTMsIDMwODIyLCAxNjk0NywgMTY3NiwgMTY4MCwgCi0gICAgNjA2ODcsIDYwNjk4LCA2MDcwMywgMTY4MywgNjA3MTEsIDYwNzE2LCAxNjk5OCwgNjA3MjgsIDYwNzM0LCA2MDczOSwgCi0gICAgNjA3NDcsIDE2ODgsIDYwNzUyLCA2MDc1NywgNjA3NjUsIDYwNzczLCA2MDc4MCwgNjA3ODksIDYwNzk3LCA2MDgwNiwgCi0gICAgMTY5MywgNjA4MTAsIDE2OTgsIDYwODE1LCA2MDgyMiwgMTcwNzIsIDYwODMwLCA2MDgzNiwgNjA4NDEsIDYwODQ5LCAKLSAgICA2MDg1NiwgNjA4NjQsIDIyNTc0LCA2MDg2OSwgMTExODIsIDYwODc4LCA2MDg4NCwgNjA4OTEsIDYwODk4LCA2MDkwNCwgCi0gICAgNjA5MTQsIDYwOTIwLCA2MDkyNSwgNjA5MzYsIDYwOTQxLCA2MDk0OSwgMTExOTEsIDExMTk2LCA2MDk1NywgNjA5NjMsIAotICAgIDYwOTcxLCAzODA1LCAxNzExNCwgMzkzOTcsIDYwOTc2LCA2MDk4MiwgNjA5ODcsIDYwOTk1LCA2MTAwMiwgMTIwMzYsIAotICAgIDYxMDA3LCA2MTAxMywgMTcwOSwgNjEwMTgsIDYxMDIxLCAxMTMyLCA2MTAyNywgNjEwMzIsIDYxMDM3LCA2MTA0MywgCi0gICAgNjEwNDgsIDYxMDUzLCA2MTA1OCwgNjEwNjMsIDYxMDY4LCA2MTA3MywgMTcxOCwgOSwgNjEwNzksIDYxMDgzLCA2MTA4OCwgCi0gICAgNjEwOTIsIDYxMDk2LCA2MTEwMCwgMzE4NzksIDYxMTA1LCA2MTExMCwgNjExMTUsIDYxMTE5LCA2MTEyMiwgNjExMjYsIAotICAgIDYxMTMwLCA2MTEzNSwgNjExMzksIDYxMTQ0LCA2MTE0OCwgMzQ2MTYsIDM0NjIxLCAzNDYyNiwgNjExNTEsIDYxMTU4LCAKLSAgICA2MTE2NCwgMzkxMTgsIDYxMTc0LCAzNDYzMiwgMzIxMzcsIDMxODk0LCAzMTkwMCwgMzQ2NDgsIDMxOTA2LCA2MTE3OSwgCi0gICAgNjExODQsIDMyMTcwLCA2MTE4OCwgNjExOTEsIDYxMTk1LCA2MTIwMiwgNjEyMDUsIDYxMjEwLCA2MTIxNCwgNjEyMTgsIAotICAgIDYxMjIxLCA2MTIzMSwgNjEyNDMsIDYxMjUwLCA2MTI1NiwgNjEyNjMsIDMzNTczLCA2MTI2NiwgODU0MywgODc3LCA2MTI2OSwgCi0gICAgNjEyNzMsIDYxMjc4LCAzNjkwLCA2MTI4MiwgNjEyODUsIDEzNjMyLCA2MTI5MiwgNjEyOTksIDYxMzEyLCA2MTMyMCwgCi0gICAgNjEzMjksIDYxMzM4LCA2MTM0MywgNjEzNTMsIDYxMzY2LCA2MTM3OCwgNjEzODUsIDYxMzkwLCA2MTM5OSwgNjE0MTIsIAotICAgIDM2MDYwLCA2MTQzMCwgNjE0MzUsIDYxNDQyLCA2MTQ0OCwgNjU2LCA2MTQ1MywgNjE0NjEsIDYxNDY4LCAyNzI3MSwgNjI3LCAKLSAgICA2MTQ3NCwgNjE0ODAsIDYxNDkwLCA2MTQ5NiwgNjE1MDEsIDMxOTI0LCA2MDAzLCAzMTkzOCwgNjE1MDUsIDYxNTE1LCAKLSAgICA2MTUyMCwgNjE1MzAsIDYxNTQ1LCA2MTU1MSwgNjE1NTcsIDMxOTQ4LCA2MTU2MiwgMzEwOTQsIDYxNTY2LCA2MTU3MSwgCi0gICAgNjE1NzYsIDYxNTgwLCA2MTU4NSwgMTY5NTAsIDYxNTkyLCA2MTU5NywgNjE2MDEsIDYwNDQsIDMxOTc0LCA2MTYwNSwgCi0gICAgNjE2MTEsIDMxMiwgNjE2MjEsIDYxNjI4LCA2MTYzNSwgNjE2NDAsIDYxNjQ5LCA1ODgwNiwgNjE2NTUsIDYxNjYzLCAKLSAgICA2MTY2NywgNjE2NzEsIDYxNjc1LCA2MTY3OSwgNjE2ODQsIDYxNjg4LCA2MTY5NCwgNjE3MDIsIDYxNzA3LCA2MTcxMiwgCi0gICAgNjE3MTYsIDYxNzIxLCA2MTcyNSwgNjE3MjksIDYxNzM1LCA2MTc0MSwgNjE3NDYsIDYxNzUwLCAzMjA5OCwgNjE3NTUsIAotICAgIDMyMTA0LCAzMjExMCwgNjE3NjAsIDYxNzY2LCA2MTc3MywgNjE3NzgsIDYxNzgyLCAzMTExMSwgMTY2MTIsIDYxNzg1LCAKLSAgICA2MTc4OSwgNjE3OTQsIDYxODAxLCA2MTgwNywgNjE4MTEsIDYxODE2LCAzODgyOCwgNjE4MjIsIDYxODI2LCA2MTgzMCwgCi0gICAgNjE4MzUsIDYxODQxLCA2MTg0NywgNjE4NTksIDYxODY4LCA2MTg3OCwgNjE4ODQsIDYxODkxLCA2MTg5NiwgNjE5MDEsIAotICAgIDYxOTA1LCA2MTkwOCwgNjE5MTQsIDYxOTIxLCA2MTkyNiwgNjE5MzEsIDYxOTM4LCA2MTk0NSwgNjE5NTEsIDYxOTU2LCAKLSAgICA2MTk2MSwgNjE5NjksIDMyMTE1LCAyNDIzLCA2MTk3NCwgNjE5NzksIDYxOTg1LCA2MTk5MCwgNjE5OTYsIDYyMDAxLCAKLSAgICA2MjAwNiwgNjIwMTEsIDYyMDE3LCAzMjEzNiwgNjIwMjIsIDYyMDI4LCA2MjAzNCwgNjIwNDAsIDMyMjAwLCA2MjA0NSwgCi0gICAgNjIwNTAsIDYyMDU1LCAzMjIxMSwgNjIwNjAsIDYyMDY1LCA2MjA3MCwgNjIwNzYsIDYyMDgyLCAzMjIxNiwgNjIwODcsIAotICAgIDYyMDkyLCA2MjA5NywgMzIyNzEsIDMyMjc3LCA2MjEwMiwgNjIxMDcsIDMyMjgyLCA2MjExMiwgMjc5NTgsIDMyMzA0LCAKLSAgICAzMjMwOCwgNjIxMTcsIDYyMDkzLCA2MjEyMSwgNjIxMjksIDYyMTM1LCA2MjE0MywgNjIxNTAsIDYyMTU2LCA2MjE2NiwgCi0gICAgNjIxNzIsIDYyMTc5LCAxMDYzMSwgMzIzMjIsIDYyMTg1LCA2MjE5OCwgNjIyMDcsIDYyMjEzLCA2MjIyMiwgNjIyMjgsIAotICAgIDIzNTEyLCA2MjIzNSwgNjIyNDIsIDYyMjUyLCAzMjI3MiwgNjIyNTUsIDYyMjYyLCA2MjI2NywgNjIyNzEsIDYyMjc1LCAKLSAgICA2MjI4MCwgNjEyMCwgNjIyODQsIDYyMjg5LCA2MjI5NCwgMzQ3MTAsIDM0NzE1LCA2MjI5OCwgMzQ3MjksIDYyMzAzLCAKLSAgICAzNDczNCwgNjIzMDgsIDYyMzE0LCAzNDc0NiwgMzQ3NTIsIDM0NzU4LCA2MjMxOSwgNjIzMjUsIDIyNTM5LCA2MjMzNiwgCi0gICAgNjIzMzksIDYyMzUxLCA2MjM1OSwgMzIzNDUsIDYyMzYzLCA2MjM3MiwgNjIzODIsIDYyMzkxLCAzMjM1NSwgNjIzOTYsIAotICAgIDYyNDAzLCA2MjQxMiwgNjI0MTgsIDYyNDI2LCA2MjQzMywgNjA5NSwgNDM5NywgNjI0MzgsIDMyMjgzLCA2MjQ0NCwgCi0gICAgNjI0NDcsIDYyNDUzLCA2MjQ2MCwgNjI0NjUsIDYyNDcwLCAyMzQyMiwgNjI0NzQsIDYyNDgwLCA2MjQ4NiwgNjI0OTEsIAotICAgIDYyNDk2LCA2MjUwMCwgNjI1MDYsIDYyNTEyLCAzMzQ4MywgODYzLCAzNTcyMywgMzY2NDQsIDM2NjUwLCAzMjM5MSwgCi0gICAgNjI1MTcsIDYyNTIxLCA2MjUyNSwgNjI1MjgsIDYyNTQxLCA2MjU0NywgNjI1NTEsIDYyNTU0LCA2MjU1OSwgMzM3ODYsIAotICAgIDYyNTYzLCAzMTExNiwgMjEyODcsIDYyNTY5LCA2MDI0LCA2MDMyLCA5MDc1LCA2MjU3MiwgNjI1NzcsIDYyNTgyLCA2MjU4NywgCi0gICAgNjI1OTIsIDYyNTk3LCA2MjYwMiwgNjI2MDcsIDYyNjEyLCA2MjYxNywgNjI2MjMsIDYyNjI4LCA2MjYzMywgNjI2MzksIAotICAgIDYyNjQ0LCA2MjY0OSwgNjI2NTQsIDYyNjU5LCA2MjY2NCwgNjI2NjksIDYyNjc1LCA2MjY4MCwgNjI2ODYsIDYyNjkxLCAKLSAgICA2MjY5NiwgNjI3MDEsIDYyNzA2LCA2MjcxMSwgNjI3MTYsIDYyNzIxLCA2MjcyNiwgNjI3MzEsIDYyNzM2LCA2Mjc0MiwgCi0gICAgNjI3NDcsIDYyNzUyLCA2Mjc1NywgNjI3NjIsIDYyNzY3LCA2Mjc3MiwgNjI3NzgsIDYyNzgzLCA2Mjc4OCwgNjI3OTMsIAotICAgIDYyNzk4LCA2MjgwMywgNjI4MDgsIDYyODEzLCA2MjgxOCwgNjI4MjMsIDYyODI5LCA2MjgzNCwgNjI4MzksIDYyODQ0LCAKLSAgICA2Mjg0OSwgNjI4NTUsIDYyODYxLCA2Mjg2NiwgNjI4NzIsIDYyODc3LCA2Mjg4MiwgNjI4ODcsIDYyODkyLCA2Mjg5NywgCi0gICAgMTUxMywgMjQ1LCA2MjkwMiwgNjI5MDYsIDYyOTEwLCA2MjkxNCwgMjUxMzMsIDYyOTE4LCA2MjkyMiwgNjI5MjcsIDYyOTMxLCAKLSAgICA2MjkzNiwgNjI5NDAsIDYyOTQ1LCA2Mjk1MCwgNjI5NTUsIDYyOTU5LCA2Mjk2MywgNjI5NjgsIDYyOTcyLCAxMzM2OSwgCi0gICAgNjI5NzcsIDYyOTgxLCA2Mjk4OCwgNjI5OTgsIDE1MjA2LCA2MzAwNywgNjMwMTYsIDYzMDIwLCA2MzAyNSwgNjMwMzAsIAotICAgIDYzMDM0LCAyNDkyNCwgMzAxOSwgNjMwMzgsIDYzMDQ0LCAxNzM2MywgNjMwNDgsIDYzMDU3LCA2MzA2NSwgNjMwNzEsIAotICAgIDYzMDgzLCA2MzA5NSwgNjMwOTksIDYzMTA0LCA2MzEwOCwgNjMxMTQsIDYzMTIwLCA2MzEyNSwgNjMxMzUsIDYzMTQ1LCAKLSAgICA2MzE1MSwgNjMxNTYsIDYzMTYwLCA2MzE2NSwgNjMxNzEsIDYzMTgwLCA2MzE4OSwgNjMxOTcsIDE1NTYwLCA2MzIwMSwgCi0gICAgNjMyMTAsIDYzMjE4LCA2MzIzMCwgNjMyNDEsIDYzMjUyLCA2MzI2MSwgNjMyNjUsIDYzMjc0LCA2MzI4NCwgNjMyOTIsIAotICAgIDYzMjk4LCA2MzMwMywgNjMzMDksIDYzMzE0LCA5OCwgMzA5MjUsIDYzMzI1LCAyNjI2NiwgMjYyNzYsIDYzMzMxLCA2MzMzOCwgCi0gICAgNjMzNDQsIDYzMzQ4LCA2MzM1OCwgNjMzNjksIDYzMzc3LCA2MzM4NiwgNjMzOTEsIDYzMzk2LCA2MzQwMCwgMTczMTcsIAotICAgIDYzNDA4LCA2MzQxMiwgNjM0MTgsIDYzNDI4LCA2MzQzNSwgNjM0NDEsIDM0ODA5LCA2MzQ0NywgNjM0NDksIDYzNDUyLCAKLSAgICA2MzQ1NiwgNjM0NjYsIDYzNDcyLCA2MzQ3OSwgMTMzMTUsIDYzNDg2LCA2MzQ5MiwgNjM1MDEsIDYzNTEwLCA2MzUxNiwgCi0gICAgNjM1MjIsIDYzNTI4LCA2MzUzMywgNjM1NDAsIDYzNTQ3LCA2MzU1MywgNjM1NjYsIDYzNTc1LCA2MzU4NCwgNjM1ODksIAotICAgIDYzNTkzLCA2MzU5OSwgNjM2MDYsIDYzNjEzLCA2MzYyMCwgNjM2MjcsIDYzNjM0LCA2MzYzOSwgNjM2NDMsIDYzNjQ3LCAKLSAgICA2MzY1MCwgNjM2NjAsIDYzNjY0LCA2MzY3NiwgNjM2ODUsIDYzNjg5LCA2MzY5NCwgNjM2OTgsIDYzNzA0LCA2MzcwOSwgCi0gICAgNjM3MTYsIDYzNzI1LCA2MzczMywgNjM3NDEsIDYzNzQ2LCA2Mzc1MCwgNjM3NTUsIDYzNzYwLCA2Mzc3MCwgNjM3NzgsIAotICAgIDYzNzgzLCA2Mzc4NywgNjM3OTEsIDYzNzk3LCA2MzgwOSwgNjM4MTcsIDYzODI3LCA2MzgzNCwgNjM4NDAsIDYzODQ1LCAKLSAgICA2Mzg0OSwgNjM4NTMsIDYzODU3LCA2Mzg2NiwgNjM4NzUsIDYzODg0LCA2Mzg5MCwgNjM4OTYsIDYzOTAyLCA2MzkwNywgCi0gICAgNjM5MTQsIDYzOTIwLCA2MzkyOCwgNjM5MzUsIDEyNDYzLCA2Mzk0MSwgNjM5NDcsIDYzOTUxLCAxNDI0NCwgNjM5NTUsIAotICAgIDYzOTYwLCA2Mzk3MCwgNjM5NzksIDYzOTg1LCA2Mzk5MSwgNjM5OTksIDY0MDA2LCA2NDAxMCwgNjQwMTQsIDY0MDIwLCAKLSAgICA2NDAyOCwgNjQwMzUsIDY0MDQxLCA2NDA1MiwgNjQwNTYsIDY0MDYwLCA2NDA2NCwgNjQwNjcsIDY0MDczLCA2NDA3OCwgCi0gICAgNjQwODIsIDY0MDg2LCA2NDA5NSwgNjQxMDMsIDY0MTEwLCA2NDExNiwgNjQxMjMsIDI0MDQ2LCAzODg3MCwgNjQxMjgsIAotICAgIDY0MTM2LCA2NDE0MCwgNjQxNDQsIDY0MTQ3LCA2NDE1NSwgNjQxNjIsIDY0MTY4LCA2NDE3NywgNjQxODUsIDY0MTkxLCAKLSAgICA2NDE5NiwgNjQyMDAsIDY0MjA1LCA2NDIwOSwgNjQyMTMsIDY0MjE4LCA2NDIyNywgNjQyMzEsIDY0MjM4LCA2NDI0NSwgCi0gICAgNjQyNTEsIDY0MjU5LCA2NDI2NSwgNjQyNzYsIDY0Mjg0LCA2NDI5MCwgMjI2NjksIDY0Mjk5LCA2NDMwNiwgNjQzMTMsIAotICAgIDY0MzIwLCA2NDMyNywgNjQzMzQsIDQxOTA3LCAxMzE1MywgNjQzNDEsIDY0MzQ4LCA2NDM1MywgMzQ4NDUsIDYyMTcsIAotICAgIDY0MzU5LCA2NDM2NCwgNjQzNjksIDY0Mzc1LCA2NDM4MSwgNjQzODcsIDY0MzkyLCA2NDM5NywgNjQ0MDIsIDY0NDA3LCAKLSAgICA2NDQxMywgNjQ0MTgsIDY0NDI0LCA2NDQyOSwgNjQ0MzUsIDY0NDQwLCA2NDQ0NSwgNjQ0NTAsIDY0NDU1LCA2NDQ2MCwgCi0gICAgNjQ0NjUsIDY0NDcwLCA2NDQ3NiwgNjQ0ODEsIDY0NDg3LCA2NDQ5MiwgNjQ0OTcsIDY0NTAyLCA2NDUwNywgNjQ1MTIsIAotICAgIDY0NTE3LCA2NDUyMywgNjQ1MjgsIDY0NTMzLCA2NDUzOCwgNjQ1NDMsIDY0NTQ4LCA2NDU1MywgNjQ1NTgsIDY0NTYzLCAKLSAgICA2NDU2OCwgNjQ1NzMsIDY0NTc5LCA2NDU4NCwgNjQ1ODksIDY0NTk0LCA2NDU5OSwgNjQ2MDQsIDY0NjA5LCA2NDYxNCwgCi0gICAgNjQ2MTksIDY0NjI1LCA2NDYzMCwgNjQ2MzUsIDY0NjQwLCA2NDY0NSwgNjQ2NTAsIDY0NjU1LCA2NDY2MCwgNjQ2NjUsIAotICAgIDY0NjcwLCA2NDY3NSwgNjQ2ODAsIDY0Njg1LCA2NDY5MSwgMTgzNCwgMjI0LCAzNzQ0NiwgNjQ2OTYsIDY0Njk5LCA2NDcwNCwgCi0gICAgNjQ3MDgsIDY0NzExLCA2NDcxNiwgNjM3MzcsIDY0NzI3LCA2NDczNywgNjQ3NDQsIDY0NzYwLCA2NDc2OSwgNjQ3NzksIAotICAgIDY0Nzg5LCA2NDc5NywgNjQ4MTEsIDY0ODE5LCA2NDgyMywgNjQ4MjYsIDY0ODMzLCA2NDgzOSwgNjQ4NTAsIDY0ODYyLCAKLSAgICA2NDg3MywgNjQ4ODIsIDY0ODg5LCAxMjk3LCAyMzMxMSwgNjQ4OTksIDI1OTAsIDY0OTAzLCA2NDkxMiwgMTEzOCwgMTcyOTAsIAotICAgIDM4MDgzLCA2NDkyMCwgNjQ5MjgsIDY0OTQyLCA2NDk1NSwgNjQ5NTksIDY0OTY0LCA2NDk2OSwgNjQ5NzQsIDY0OTgwLCAKLSAgICA2NDk4NiwgNjQ5OTEsIDg1MzUsIDY0OTk2LCA2NTAwMCwgNjUwMDgsIDExMDQ4LCA2NTAxMywgNjUwMTksIDY1MDI4LCAKLSAgICAxNzIxLCAxMTA2MCwgNzM2LCA2NTAzMiwgNjUwNDEsIDY1MDUxLCAyNzAzMCwgNjUwNjAsIDY1MDY2LCAxNjg2MiwgNjUwNzIsIAotICAgIDY1MDc2LCAzOTY0LCAxMTM5MSwgNjUwODIsIDY1MDg5LCA2MDY5MywgNjUwOTMsIDY1MDk3LCAzOTg4LCAxODksIDE0MTU5LCAKLSAgICA2NTEwMywgNjUxMTUsIDY1MTE5LCA2NTEyNSwgMjc3NTEsIDY1MTI5LCAxMTM3OSwgMjczMCwgNCwgNjUxMzQsIDY1MTQ0LCAKLSAgICA2NTE1MCwgNjUxNjEsIDY1MTY4LCA2NTE3NCwgNjUxODAsIDY1MTg4LCA2NTE5NSwgNjUyMDEsIDY1MjExLCA2NTIyMSwgCi0gICAgNjUyMzEsIDIzNDk5LCAxMzA5LCA2NTI0MCwgNjUyNDQsIDY1MjQ4LCA2NTI1NCwgNjUyNTgsIDI3NTMsIDI3NTksIDg1MzIsIAotICAgIDIyNjQsIDY1MjYyLCA2NTI2NiwgNjUyNzUsIDY1MjgzLCA2NTI5NCwgNjUzMDIsIDY1MzEwLCA2NTMxNiwgNjUzMjEsIAotICAgIDY1MzMyLCA2NTM0MywgNjUzNTEsIDY1MzU3LCA5Njk0LCA2NTM2MiwgNjUzNzAsIDY1Mzc0LCA2NTM3OCwgNjUzODIsIAotICAgIDY1Mzk0LCAyODEzNiwgNjU0MDEsIDY1NDExLCA2NTQxNywgNjU0MjMsIDk3OTYsIDY1NDMzLCA2NTQ0NCwgNjU0NTQsIAotICAgIDY1NDYzLCA2NTQ2NywgNjU0NzQsIDExNDAsIDExNzAsIDY1NDg0LCA2NTQ4OSwgNjU0OTcsIDY1NTA1LCA2NTUxNiwgCi0gICAgNjU1MjMsIDY1NTM3LCAxNDA4OCwgMzkzLCA2NTU0NywgNjU1NTEsIDY1NTU5LCA2NTU2OCwgNjU1NzYsIDY1NTgyLCAKLSAgICA2NTU5NiwgNjU2MDMsIDY1NjA5LCA2NTYxOCwgNjU2MjUsIDY1NjM1LCA2NTY0MywgMzgxMiwgMTU2LCA2NTY1MSwgNjU2NjIsIAotICAgIDY1NjY2LCA2NTY3OCwgMjc5NDksIDE2MSwgNjU2ODQsIDY1Njg5LCA2NTY5MywgNjU3MDAsIDY1NzA2LCA2NTcxNCwgCi0gICAgNjU3MjEsIDg4MTgsIDY1NzI4LCA2NTczNywgNjU3NDUsIDM4NzgsIDY1NzU4LCA4MTk5LCA2NTc2MiwgMjc5OCwgNDQzLCAKLSAgICA2NTc2NywgNjU3ODAsIDY1Nzg1LCAxODMzLCA2NTAsIDY1Nzg5LCAzODk1LCA2NTc5NywgNjU4MDMsIDY1ODA3LCA5MzEsIAotICAgIDY1ODE3LCA2NTgyNiwgNjU4MzEsIDE0OTI4LCAxNDkzNSwgNDUyNjksIDY1ODM1LCAzODIyLCAxMzA0MSwgNjU4NDMsIAotICAgIDY1ODUwLCAyMzU1NSwgNjU4NTQsIDY1ODYxLCA2NTg2NywgNjU4NzIsIDY1ODc3LCAxNDk0OCwgMzcyLCA2NTg4MiwgCi0gICAgNjU4OTQsIDY1OTAwLCA2NTkwOCwgMjgxMCwgMTc1MywgNjU5MTYsIDY1OTE4LCA2NTkyMywgNjU5MjgsIDY1OTMzLCAKLSAgICA2NTkzOSwgNjU5NDQsIDY1OTQ5LCA2NTk1NCwgNjU5NTksIDY1OTY0LCA2NTk2OSwgNjU5NzUsIDY1OTgwLCA2NTk4NSwgCi0gICAgNjU5OTAsIDY1OTk1LCA2NjAwMCwgNjYwMDUsIDY2MDEwLCA2NjAxNSwgNjYwMjEsIDY2MDI2LCA2NjAzMSwgNjYwMzYsIAotICAgIDY2MDQyLCA2NjA0NywgNjYwNTMsIDY2MDU4LCA2NjA2MywgNjYwNjgsIDY2MDczLCA2NjA3OCwgNjYwODMsIDY2MDg4LCAKLSAgICA2NjA5NCwgNjYwOTksIDY2MTA1LCA2NjExMCwgNjYxMTUsIDY2MTIwLCA2NjEyNSwgNjYxMzAsIDY2MTM1LCA2NjE0MCwgCi0gICAgNjYxNDUsIDY2MTUxLCA2NjE1NiwgNjYxNjEsIDY2MTY2LCA2NjE3MCwgNjYxNzQsIDY2MTc5LCA2NjE4MywgNjYxODgsIAotICAgIDY2MTkzLCA2NjE5OSwgNjYyMDQsIDY2MjA4LCA2NjIxMywgNjYyMTcsIDY2MjIwLCA2NjIyMiwgNjYyMjYsIDY2MjI5LCAKLSAgICA2NjIzNCwgNjYyMzgsIDY2MjQyLCA2NjI0NiwgNjYyNTAsIDY2MjU5LCA2NjI2MywgMzI1NDksIDY2MjY2LCAzMjU1NCwgCi0gICAgNjYyNzMsIDY2Mjc4LCAzMjU1OSwgNjYyODcsIDY2Mjk2LCAzMjU2NSwgNjYzMDEsIDMyNTcwLCA2NjMxMCwgNjYzMTUsIAotICAgIDExNTc4LCA2NjMxOSwgNjYzMjQsIDY2MzI5LCAzMjU3NSwgNjYzMzMsIDQwMjI1LCA2NjMzNywgNjYzNDAsIDY2MzQ0LCAKLSAgICA4MjExLCA2NjM1MCwgNjYzNTUsIDY2MzU5LCAzNzA1LCAzMjU4MCwgNjYzNjIsIDY2MzY2LCA2NjM2OSwgNjYzNzQsIAotICAgIDY2Mzc4LCA2NjM4NCwgNjYzOTIsIDY2NDA1LCA2NjQxNCwgNjY0MjAsIDY2NDI1LCA2NjQzMSwgNjY0MzUsIDY2NDQxLCAKLSAgICA2NjQ0OSwgNjY0NTQsIDY2NDU4LCA2NjQ2NSwgNjY0NzEsIDY2NDc5LCA2NjQ4OCwgNjY0OTYsIDMyNTgzLCA2NjUwMywgCi0gICAgNjY1MTMsIDY2NTIyLCA2NjUzNSwgNjY1NDAsIDY2NTQ1LCA2NjU1NCwgNjY1NjAsIDY2NTY3LCA2NjU3OCwgNjY1OTAsIAotICAgIDY2NTk3LCA2NjYwNiwgNjY2MTUsIDY2NjI0LCA2NjYzMSwgNjY2MzcsIDY2NjQ0LCA2NjY1MiwgNjY2NTksIDY2NjY3LCAKLSAgICA2NjY3NiwgNjY2ODQsIDY2NjkxLCA2NjY5OSwgNjY3MDgsIDY2NzE2LCA2NjcyNSwgNjY3MzUsIDY2NzQ0LCA2Njc1MiwgCi0gICAgNjY3NTksIDY2NzY3LCA2Njc3NiwgNjY3ODQsIDY2NzkzLCA2NjgwMywgNjY4MTIsIDY2ODIwLCA2NjgyOSwgNjY4MzksIAotICAgIDY2ODQ4LCA2Njg1OCwgNjY4NjksIDY2ODc5LCA2Njg4OCwgNjY4OTYsIDY2OTAzLCA2NjkxMSwgNjY5MjAsIDY2OTI4LCAKLSAgICA2NjkzNywgNjY5NDcsIDY2OTU2LCA2Njk2NCwgNjY5NzMsIDY2OTgzLCA2Njk5MiwgNjcwMDIsIDY3MDEzLCA2NzAyMywgCi0gICAgNjcwMzIsIDY3MDQwLCA2NzA0OSwgNjcwNTksIDY3MDY4LCA2NzA3OCwgNjcwODksIDY3MDk5LCA2NzEwOCwgNjcxMTgsIAotICAgIDY3MTI5LCA2NzEzOSwgNjcxNTAsIDY3MTYyLCA2NzE3MywgNjcxODMsIDY3MTkyLCA2NzIwMCwgNjcyMDcsIDY3MjE1LCAKLSAgICA2NzIyNCwgNjcyMzIsIDY3MjQxLCA2NzI1MSwgNjcyNjAsIDY3MjY4LCA2NzI3NywgNjcyODcsIDY3Mjk2LCA2NzMwNiwgCi0gICAgNjczMTcsIDY3MzI3LCA2NzMzNiwgNjczNDQsIDY3MzUzLCA2NzM2MywgNjczNzIsIDY3MzgyLCA2NzM5MywgNjc0MDMsIAotICAgIDY3NDEyLCA2NzQyMiwgNjc0MzMsIDY3NDQzLCA2NzQ1NCwgNjc0NjYsIDY3NDc3LCA2NzQ4NywgNjc0OTYsIDY3NTA0LCAKLSAgICA2NzUxMywgNjc1MjMsIDY3NTMyLCA2NzU0MiwgNjc1NTMsIDY3NTYzLCA2NzU3MiwgNjc1ODIsIDY3NTkzLCA2NzYwMywgCi0gICAgNjc2MTQsIDY3NjI2LCA2NzYzNywgNjc2NDcsIDY3NjU2LCA2NzY2NiwgNjc2NzcsIDY3Njg3LCA2NzY5OCwgNjc3MTAsIAotICAgIDY3NzIxLCA2NzczMSwgNjc3NDIsIDY3NzU0LCA2Nzc2NSwgNjc3NzcsIDY3NzkwLCA2NzgwMiwgNjc4MTMsIDY3ODIzLCAKLSAgICA2NzgzMiwgNjc4NDAsIDY3ODQ3LCA2Nzg1NSwgNjc4NjQsIDY3ODcyLCA2Nzg4MSwgNjc4OTEsIDY3OTAwLCA2NzkwOCwgCi0gICAgNjc5MTcsIDY3OTI3LCA2NzkzNiwgNjc5NDYsIDY3OTU3LCA2Nzk2NywgNjc5NzYsIDY3OTg0LCA2Nzk5MywgNjgwMDMsIAotICAgIDY4MDEyLCA2ODAyMiwgNjgwMzMsIDY4MDQzLCA2ODA1MiwgNjgwNjIsIDY4MDczLCA2ODA4MywgNjgwOTQsIDY4MTA2LCAKLSAgICA2ODExNywgNjgxMjcsIDY4MTM2LCA2ODE0NCwgNjgxNTMsIDY4MTYzLCA2ODE3MiwgNjgxODIsIDY4MTkzLCA2ODIwMywgCi0gICAgNjgyMTIsIDY4MjIyLCA2ODIzMywgNjgyNDMsIDY4MjU0LCA2ODI2NiwgNjgyNzcsIDY4Mjg3LCA2ODI5NiwgNjgzMDYsIAotICAgIDY4MzE3LCA2ODMyNywgNjgzMzgsIDY4MzUwLCA2ODM2MSwgNjgzNzEsIDY4MzgyLCA2ODM5NCwgNjg0MDUsIDY4NDE3LCAKLSAgICA2ODQzMCwgNjg0NDIsIDY4NDUzLCA2ODQ2MywgNjg0NzIsIDY4NDgwLCA2ODQ4OSwgNjg0OTksIDY4NTA4LCA2ODUxOCwgCi0gICAgNjg1MjksIDY4NTM5LCA2ODU0OCwgNjg1NTgsIDY4NTY5LCA2ODU3OSwgNjg1OTAsIDY4NjAyLCA2ODYxMywgNjg2MjMsIAotICAgIDY4NjMyLCA2ODY0MiwgNjg2NTMsIDY4NjYzLCA2ODY3NCwgNjg2ODYsIDY4Njk3LCA2ODcwNywgNjg3MTgsIDY4NzMwLCAKLSAgICA2ODc0MSwgNjg3NTMsIDY4NzY2LCA2ODc3OCwgNjg3ODksIDY4Nzk5LCA2ODgwOCwgNjg4MTgsIDY4ODI5LCA2ODgzOSwgCi0gICAgNjg4NTAsIDY4ODYyLCA2ODg3MywgNjg4ODMsIDY4ODk0LCA2ODkwNiwgNjg5MTcsIDY4OTI5LCA2ODk0MiwgNjg5NTQsIAotICAgIDY4OTY1LCA2ODk3NSwgNjg5ODYsIDY4OTk4LCA2OTAwOSwgNjkwMjEsIDY5MDM0LCA2OTA0NiwgNjkwNTcsIDY5MDY5LCAKLSAgICA2OTA4MiwgNjkwOTQsIDY5MTA3LCA2OTEyMSwgNjkxMzQsIDY5MTQ2LCA2OTE1NywgNjkxNjcsIDY5MTc2LCA2OTE4NCwgCi0gICAgNjkxOTEsIDY5MTk2LCA4MDU4LCA2OTIwMywgMzI1OTMsIDY5MjA4LCA2OTIxMywgMzI1OTgsIDY5MjE5LCAyMDkyOSwgCi0gICAgMzI2MDMsIDY5MjI0LCA2OTIzMCwgNjkyMzgsIDY5MjQ0LCA2OTI1MCwgNjkyNTcsIDY5MjY0LCA2OTI2OSwgNjkyNzMsIAotICAgIDY5Mjc2LCA2OTI4MCwgNjkyODksIDY5Mjk1LCA2OTMwNywgNjkzMTgsIDY5MzIyLCAzMDgxLCA4MDMzLCA2OTMyNywgCi0gICAgNjkzMzAsIDY5MzMyLCA2OTMzNiwgNjkzNDAsIDY5MzQ0LCA2OTM1MCwgNjkzNTUsIDI1OTQ0LCA2OTM2MCwgNjkzNjQsIAotICAgIDY5MzY3LCA2OTM3MiwgNjkzNzYsIDY5MzgzLCA2OTM4OSwgNjkzOTMsIDYxNzAsIDY5Mzk3LCAzMjYyMCwgNjk0MDIsIAotICAgIDY5NDA5LCA2OTQxOCwgNjk0MjYsIDY5NDM3LCA2OTQ0NSwgNjk0NTMsIDY5NDYwLCA2OTQ2NywgNjk0NzMsIDY5NDg0LCAKLSAgICAzMjYyNSwgNjk0ODksIDY5NTAwLCA2OTUxMiwgNjk1MjAsIDY5NTMxLCA2OTU0MCwgNjk1NTEsIDY5NTU2LCA2OTU2NCwgCi0gICAgMjU1NiwgNjk1NjksIDM0Mjk1LCA2OTU4MiwgNjk1ODYsIDY5NTk4LCA2OTYwNiwgNjk2MTEsIDY5NjE5LCAxNzQ4NSwgCi0gICAgNjk2MzAsIDY5NjM2LCA2OTY0MywgNjk2NTEsIDY5NjU3LCAzMjYzNSwgNjk2NjIsIDM5MTQsIDU4MjU0LCA2OTY2OSwgCi0gICAgNjk2NzIsIDY5NjgwLCA2OTY5MywgNjk3MDYsIDY5NzE5LCA2OTczMiwgNjk3MzksIDY5NzUwLCA2OTc1OSwgNDE3MjQsIAotICAgIDQxNzI5LCA2OTc2NCwgNjk3NjgsIDY5Nzc2LCA2OTc4MywgNjk3OTIsIDY5ODAwLCA2OTgwNiwgNjk4MTUsIDY5ODIzLCAKLSAgICA2OTgzMSwgNjk4MzUsIDY5ODQ0LCA2OTg1MywgNjk4NjMsIDY5ODc2LCA2OTg4OSwgNjk4OTksIDMyNjQwLCA2OTkwNSwgCi0gICAgNjk5MTIsIDY5OTE4LCAzMjY0NiwgNjk5MjMsIDY5OTI2LCA2OTkzMCwgNjk5MzgsIDY5OTQ3LCA0MTQ2MiwgNjk5NTUsIAotICAgIDY5OTY0LCA2OTk3MiwgNjk5NzksIDY5OTg3LCA2OTk5NywgNzAwMDYsIDcwMDE1LCA3MDAyNCwgNzAwMzIsIDcwMDQzLCAKLSAgICA3MDA1MywgOTM2NiwgMjE1NjcsIDcwMDYyLCA3MDA2NywgNzAwNzIsIDcwMDc2LCA3MDA4MCwgNzAwODUsIDcwMDkxLCAKLSAgICA3MDA5NiwgNzAxMDEsIDcwMTA3LCA3MDExMiwgNzAxMTcsIDIxNTMyLCA3MDEyMiwgNzAxMjksIDcwMTM3LCA3MDE0NSwgCi0gICAgNzAxNTAsIDcwMTU3LCA3MDE2NCwgNzAxNjksIDcwMTczLCA3MDE3NywgNzAxODUsIDcwMTkzLCAzMjY2MywgNzAxOTksIAotICAgIDcwMjA1LCA3MDIxNywgNzAyMjMsIDcwMjI3LCA3MDIzNCwgNzAyMzksIDcwMjUwLCA3MDI2MCwgNzAyNzAsIDcwMjgyLCAKLSAgICA3MDI4OCwgNzAyOTgsIDcwMzA4LCAzMjY5MCwgNzAzMTcsIDcwMzI2LCA3MDMzMiwgNzAzNDQsIDcwMzU1LCA3MDM2MiwgCi0gICAgNzAzNjcsIDcwMzcxLCA3MDM3OSwgNzAzODUsIDcwMzkwLCA3MDM5NSwgNzA0MDIsIDcwNDEwLCA3MDQyMiwgNzA0MzIsIAotICAgIDcwNDQxLCA3MDQ1MCwgNzA0NTcsIDM0MTU3LCAyMzg1MSwgNzA0NjMsIDcwNDY4LCA3MDQ3MiwgNzA0NzYsIDcwNDgxLCAKLSAgICA3MDQ4NywgNzA0OTgsIDcwNTExLCA3MDUxNiwgNzA1MjMsIDMyNjk1LCA3MDUyOCwgNzA1NDAsIDcwNTQ5LCA3MDU1OSwgCi0gICAgNzA1NzAsIDcwNTgzLCA3MDU5MCwgNzA1OTksIDcwNjA4LCA3MDYxNiwgNzA2MjEsIDcwNjI3LCAxMDY5LCA3MDYzMiwgCi0gICAgNzA2MzcsIDcwNjQyLCA3MDY0NywgNzA2NTMsIDcwNjU4LCA3MDY2MywgNzA2NjksIDcwNjc1LCA3MDY4MCwgNzA2ODQsIAotICAgIDcwNjg5LCA3MDY5NCwgNzA2OTksIDU4NzY2LCA3MDcwNCwgNzA3MDksIDcwNzE0LCA3MDcxOSwgNzA3MjUsIDcwNzMxLCAKLSAgICA3MDczNiwgNzA3NDAsIDcwNzQ1LCA3MDc1MCwgNzA3NTUsIDcwNzYxLCA3MDc2NiwgNzA3NzIsIDcwNzc3LCA3MDc4MiwgCi0gICAgNzA3ODcsIDcwNzkyLCA3MDc5NiwgNzA4MDIsIDcwODA3LCA3MDgxNiwgNzA4MjEsIDcwODI2LCA3MDgzMSwgNzA4MzYsIAotICAgIDcwODQwLCA3MDg0NywgNzA4NTMsIDE3MTM1LCAxNzE0MiwgNzA4NTgsIDcwODYyLCA3MDg2NiwgNzA4NzAsIDcwODc0LCAKLSAgICA0NTUyNCwgNzA4NzgsIDcwODA4LCA3MDg4MCwgNzA4OTAsIDMyNzA0LCA3MDg5MywgNzA5MDIsIDcwOTA4LCA2MTQzLCAKLSAgICAzMjcwOSwgNzA5MTIsIDcwOTE4LCA3MDkyMywgNzA5MjksIDcwOTM0LCA3MDkzOCwgNzA5NDUsIDcwOTUwLCA3MDk2MCwgCi0gICAgNzA5NjksIDcwOTczLCA3MDk3OSwgNzA5ODUsIDcwOTkxLCA3MDk5NSwgNzEwMDMsIDcxMDEwLCA3MTAxOCwgNzEwMjYsIAotICAgIDMyNzE0LCA3MTAzMywgNzEwMzYsIDcxMDQzLCA3MTA0OSwgNzEwNTQsIDcxMDU4LCA3MTA2NCwgNzEwNzEsIDcxMDc2LCAKLSAgICA3MTA4MCwgNzEwODksIDcxMDk3LCA3MTEwMywgNzExMDgsIDMyNzE5LCA3MTExNSwgNzExMjIsIDcxMTI4LCA3MTEzMywgCi0gICAgNzExMzksIDcxMTQ2LCA3MTE1MiwgMjEyOTQsIDI3NDU1LCA3MTE1OCwgNzExNjMsIDcxMTY5LCA3MTE4MSwgNzA4NDEsIAotICAgIDcwODQ4LCAyMTQ3MCwgNzExOTEsIDcxMTk2LCA3MTIwMywgNzEyMDksIDcxMjE2LCA3MTIyMiwgNzEyMzMsIDcxMjM4LCAKLSAgICA5MTEwLCA3MTI0NiwgNzEyNDksIDcxMjU1LCA3MTI1OSwgNzEyNjMsIDcxMjY2LCA3MTI3MiwgMzI0NjgsIDYxOTQsIDk2NCwgCi0gICAgMTM0MTksIDcxMjc5LCA3MTI4NSwgNzEyOTEsIDcxMjk3LCA3MTMwMywgNzEzMDksIDcxMzE1LCA3MTMyMSwgNzEzMjcsIAotICAgIDcxMzMyLCA3MTMzNywgNzEzNDIsIDcxMzQ3LCA3MTM1MiwgNzEzNTcsIDcxMzYyLCA3MTM2NywgNzEzNzIsIDcxMzc3LCAKLSAgICA3MTM4MiwgNzEzODcsIDcxMzkyLCA3MTM5OCwgNzE0MDMsIDcxNDA4LCA3MTQxNCwgNzE0MTksIDcxNDI0LCA3MTQzMCwgCi0gICAgNzE0MzYsIDcxNDQyLCA3MTQ0OCwgNzE0NTQsIDcxNDYwLCA3MTQ2NiwgNzE0NzIsIDcxNDc4LCA3MTQ4MywgNzE0ODgsIAotICAgIDcxNDk0LCA3MTQ5OSwgNzE1MDQsIDcxNTEwLCA3MTUxNSwgNzE1MjAsIDcxNTI1LCA3MTUzMCwgNzE1MzUsIDcxNTQwLCAKLSAgICA3MTU0NSwgNzE1NTAsIDcxNTU1LCA3MTU2MCwgNzE1NjUsIDcxNTcwLCA3MTU3NiwgNzE1ODEsIDcxNTg2LCA3MTU5MSwgCi0gICAgNzE1OTcsIDcxNjAyLCA3MTYwNywgNzE2MTIsIDcxNjE3LCA3MTYyMywgNzE2MjgsIDcxNjMzLCA3MTYzOCwgNzE2NDMsIAotICAgIDcxNjQ4LCA3MTY1MywgNzE2NTgsIDcxNjYzLCA3MTY2OCwgNzE2NzMsIDcxNjc4LCA3MTY4MywgNzE2ODgsIDcxNjkzLCAKLSAgICA3MTY5OCwgNzE3MDMsIDcxNzA4LCA3MTcxMywgNzE3MTgsIDcxNzI0LCA3MTcyOSwgNzE3MzQsIDcxNzM5LCA3MTc0NCwgCi0gICAgNzE3NDksIDcxNzU0LCA3MTc1OSwgMTg2NCwgMTQyLCA3MTc2NCwgNzE3NjgsIDcxNzcyLCA3MTc3NywgNzE3ODUsIDcxNzg5LCAKLSAgICA3MTc5NiwgNzE4MDQsIDcxODA4LCA3MTgyMSwgNzE4MjksIDcxODMzLCA3MTgzNiwgNzE4NDEsIDcxODQ1LCA3MTg1MCwgCi0gICAgNzE4NTQsIDcxODYyLCA3MTg2NiwgMjA5MzcsIDcxODcxLCA3MTg3NSwgNjA5NjcsIDcxODc5LCA3MTg4MiwgNzE4OTAsIAotICAgIDcxODk4LCA3MTkwNiwgNzE5MTEsIDcxOTE4LCA3MTkyNCwgNzE5MzAsIDcxOTM1LCA3MTk0MiwgNzE5NDcsIDcxOTU1LCAKLSAgICA2NDk0NywgNzE5NjIsIDcxOTY3LCA3MTk3MiwgNzE5NzYsIDExNjQ1LCA3MTk4MCwgNzE5ODUsIDcxOTkwLCA3MTk5NCwgCi0gICAgNzE5OTcsIDcyMDAzLCA3MjAwNywgNzIwMTcsIDcyMDI2LCA3MjAyOSwgNzIwMzMsIDcyMDQwLCA3MjA1MywgNzIwNTksIAotICAgIDcyMDY3LCA3MjA3OCwgNzIwODksIDcyMTAwLCA3MjExMSwgNzIxMjAsIDcyMTI2LCA3MjEzNSwgNzIxNDMsIDcyMTUzLCAKLSAgICA3MjE2NiwgNzIxNzMsIDcyMTg0LCA3MjE5MCwgNzIxOTUsIDcyMjAwLCA3MjIwNiwgNzIyMTIsIDcyMjIyLCA3MjIzMSwgCi0gICAgNzA1MzAsIDcyMjM5LCA3MjI0NSwgNzIyNTMsIDcyMjU5LCA3MjI2NywgNzIyNzAsIDcyMjc0LCA3MjI3OCwgNzIyODEsIAotICAgIDcyMjg3LCA3MjI5MywgNzIzMDEsIDcyMzEzLCA3MjMyNSwgNzIzMzIsIDcyMzM2LCA3MjM0NywgNzIzNTUsIDcyMzYyLCAKLSAgICA3MjM3NCwgNzIzODIsIDcyMzkwLCA3MjM5NywgNzI0MDMsIDcyNDEzLCA3MjQyMiwgNzI0MjcsIDcyNDM3LCA3MjQ0NiwgCi0gICAgNDA3ODgsIDcyNDUzLCA3MjQ1NywgNzI0NjIsIDcyNDcwLCA3MjQ3NywgNzI0ODMsIDcyNDg3LCA3MjQ5NywgNzI1MDgsIAotICAgIDcyNTE2LCA3MjUyMywgNzI1MzUsIDcyNTQ3LCA3MjU1NiwgNjk1NzIsIDcyNTYzLCA3MjU3NCwgNzI1ODgsIDcyNTk2LCAKLSAgICA3MjYwNiwgNzI2MTMsIDcyNjIxLCA3MjYzMywgNzI2NDIsIDcyNjUwLCA3MjY2MCwgNzI2NzEsIDcyNjgzLCA3MjY5MiwgCi0gICAgNzI3MDIsIDcyNzA5LCA3MjcxOCwgNzI3MzMsIDcyNzQxLCA3Mjc1MSwgNzI3NjAsIDcyNzY4LCA3Mjc4MSwgNzI3OTYsIAotICAgIDcyODAwLCA3MjgwOSwgNzI4MjEsIDcyODMyLCA3Mjg0MywgNzI4NTQsIDcyODY0LCA3Mjg3NSwgNzI4ODMsIDcyODg5LCAKLSAgICA3Mjg5OSwgNzI5MDcsIDcyOTEzLCAyOTAyOCwgNzI5MTgsIDcyOTI0LCA3MjkyOSwgNzI5MzYsIDk3MDgsIDE3NTA1LCAKLSAgICA3Mjk0MiwgNzI5NTEsIDcyOTU2LCA3Mjk2MCwgNzI5NjcsIDcyOTczLCA3Mjk3OCwgNzI5ODMsIDcyOTkxLCA3Mjk5OSwgCi0gICAgNzMwMDMsIDczMDA2LCA3MzAwOSwgNzMwMTEsIDczMDE4LCA3MzAyNCwgNzMwMzUsIDczMDQwLCA3MzA0NCwgNzMwNTEsIAotICAgIDczMDU3LCA3MzA2MiwgNzMwNzAsIDY1NDQ2LCA2NTQ1NiwgNzMwNzYsIDczMDgzLCA3MzA5MywgMTA2MTgsIDczMTAwLCAKLSAgICA3MzEwNSwgMjkyMjQsIDczMTE0LCA3MzExOSwgNzMxMjYsIDczMTM2LCA3MzE0NCwgNzMxNTIsIDczMTYxLCA3MzE2NywgCi0gICAgNzMxNzMsIDczMTgwLCA3MzE4NywgNzMxOTIsIDczMTk2LCA3MzIwNCwgNzMyMDksIDczMjE0LCA3MzIyMiwgNzMyMjksIAotICAgIDczMjM0LCA3MzI0MCwgNzMyNDMsIDczMjQ3LCA3MzI1NiwgNzE4MTYsIDczMjY1LCA3MzI2OSwgNzMyNzUsIDczMjg2LCAKLSAgICA3MzI5NiwgMTc1MTQsIDczMzA3LCA3MzMxNSwgMTc1MjYsIDczMzIyLCA3MzMyNiwgNzMzMzUsIDI3MzQxLCA3MzM0MiwgCi0gICAgNzMzNDYsIDczMzUxLCA3MzM2OCwgNzMzODAsIDEwNTc2LCA3MzM5MiwgNzMzOTcsIDczNDAyLCA3MzQwNywgMjEwMTAsIAotICAgIDczNDExLCA3MzQxNiwgNzM0MjEsIDczNDI3LCA3MzQzMiwgNTg0NiwgMjEwMTQsIDczNDM3LCA3MzQ0MiwgNzM0NDgsIAotICAgIDczNDU1LCA3MzQ2MCwgNzM0NjUsIDczNDcxLCA3MzQ3NywgNzM0ODMsIDczNDg4LCA3MzQ5NCwgNzM0OTgsIDczNTEyLCAKLSAgICA3MzUyMCwgNzM1MjgsIDczNTM0LCA3MzUzOSwgNzM1NDYsIDczNTU2LCA3MzU2NSwgNzM1NzAsIDczNTc1LCA3MzU4MywgCi0gICAgNzM1ODgsIDczNTk0LCA3MzU5OSwgNzM2MDgsIDU5ODIzLCA3MzYxMywgNzM2MTYsIDczNjM0LCA3MzY1MywgNzM2NjYsIAotICAgIDczNjgwLCA3MzY5NiwgNzM3MDMsIDczNzEwLCA3MzcxNiwgNzM3MjMsIDczNzI4LCA3MzczNCwgNzM3NDAsIDczNzQ4LCAKLSAgICA3Mzc1NCwgNzM3NTksIDczNzY0LCA3Mzc4MCwgMTA1ODksIDczNzk0LCA3MzgwMSwgNzM4MDksIDczODE1LCA3MzgxOSwgCi0gICAgNzM4MjIsIDczODI3LCA3MzgzMiwgNzM4MzksIDczODQ0LCA3Mzg1MywgNzM4NTgsIDczODY0LCA3Mzg3MywgNzM4ODIsIAotICAgIDczODg3LCA3Mzg5MSwgNzM4OTksIDczOTA4LCAxMTY3NCwgNzM5MTcsIDczOTI1LCA3MzkzMCwgNzM5MzYsIDExNjg1LCAKLSAgICA3Mzk0MSwgNzM5NDQsIDczOTQ5LCA3Mzk1OSwgNzM5NjgsIDczOTczLCA3Mzk3OSwgNzM5ODQsIDczOTkyLCA3Mzk5OSwgCi0gICAgNzQwMTAsIDc0MDIwLCA3NDAyNSwgNjQ4NzUsIDc0MDMwLCA3NDAzNiwgNzQwNDEsIDc0MDQ4LCA3NDA1NywgNzQwNjUsIAotICAgIDc0MDcxLCA3NDA3NywgNzQwODQsIDc0MDkwLCA3NDA5NCwgMTY5NjAsIDMwNTUsIDc0MDk5LCA3NDEwMywgNzQxMDcsIAotICAgIDc0MTEzLCA3NDEyMiwgNzQxMjgsIDc0MTM1LCA3NDEzOSwgNzQxNjAsIDc0MTgyLCA3NDE5OCwgNzQyMTUsIDc0MjM0LCAKLSAgICA3NDI0MywgNzQyNTMsIDc0MjYwLCA3NDI2NywgMjcyMjgsIDc0MjczLCA3NDI3NywgNzQyODUsIDc0Mjk3LCA3NDMwMywgCi0gICAgNzQzMTEsIDc0MzE1LCA3NDMyMywgNzQzMzAsIDc0MzM0LCA3NDM0MCwgNzQzNDYsIDc0MzUxLCAzNTYzLCA0MTkyNCwgCi0gICAgNzQzNTcsIDc0MzYxLCA3NDM2NSwgNzQzNjksIDc0Mzc0LCA3NDM3OSwgNzQzODQsIDc0MzkwLCA3NDM5NiwgNzQ0MDIsIAotICAgIDc0NDA5LCA3NDQxNSwgNzQ0MjIsIDc0NDI4LCA3NDQzNCwgNzQ0MzksIDc0NDQ1LCA3NDQ1MCwgNzQ0NTQsIDc0NDU5LCAKLSAgICA3NDQ2MywgNzQ0NjgsIDQxOTM5LCA3NDQ3MiwgNzQ0NzcsIDc0NDg1LCA3NDQ4OSwgNzQ0OTQsIDc0NTAxLCA3NDUxMCwgCi0gICAgNzQ1MTYsIDc0NTIwLCA3NDUyNywgNzQ1MzEsIDc0NTM0LCA3NDU0MSwgNzQ1NTAsIDc0NTU1LCA3NDU1OSwgNzQ1NjcsIAotICAgIDc0NTc2LCA3NDU4MCwgNzQ1ODgsIDc0NTk0LCA3NDU5OSwgNzQ2MDQsIDc0NjEwLCA3NDYxNiwgNzQ2MjEsIDc0NjI1LCAKLSAgICA3NDYzMSwgNzQ2MzYsIDc0NjQwLCA3NDY0NCwgNzQ2NDcsIDc0NjUyLCA3NDY2MCwgNzQ2NzAsIDc0Njc1LCAzOTQxNiwgCi0gICAgNzQ2ODMsIDc0Njk1LCA3NDY5OSwgNzQ3MDUsIDc0NzE3LCA3NDcyOCwgNzQ3MzUsIDc0NzQxLCA3NDc0OCwgNzQ3NjAsIAotICAgIDc0NzY3LCA3NDc3MywgMjEwODgsIDc0Nzc3LCA3NDc4MywgNzQ3OTAsIDc0Nzk2LCA3NDgwMiwgNzQ4MDcsIDc0ODEyLCAKLSAgICA3NDgxNywgNzQ4MjYsIDcwMzMsIDc0ODMxLCAxNjQyNiwgNzQ4MzcsIDc0ODQxLCA3NDg0NSwgNzQ4NDksIDc0ODU3LCAKLSAgICA3NDg2NiwgNzQ4NzAsIDc0ODc3LCA3NDg4NiwgNzQ4OTksIDc0OTA1LCA3NDQ2NCwgMzAwODgsIDc0OTEwLCA3NDkxMiwgCi0gICAgNzQ5MTcsIDc0OTIyLCA3NDkyNywgNzQ5MzIsIDc0OTM3LCA3NDk0MiwgNzQ5NDcsIDc0OTUyLCA3NDk1NywgNzQ5NjIsIAotICAgIDc0OTY3LCA3NDk3MiwgNzQ5NzcsIDc0OTgyLCA3NDk4OCwgNzQ5OTMsIDc0OTk4LCA3NTAwMywgNzUwMDgsIDc1MDEzLCAKLSAgICA3NTAxOCwgNzUwMjMsIDc1MDI4LCA3NTAzNCwgNzUwNDAsIDc1MDQ2LCA3NTA1MSwgNzUwNTYsIDc1MDY4LCA3NTA3MywgCi0gICAgMTg3MCwgNDYsIDc1MDc4LCA3NTA4MywgMzI3NDYsIDc1MDg3LCAzMjc1MSwgMzI3NTYsIDMyNzYyLCAzMjc2NywgNzUwOTEsIAotICAgIDMyNzcyLCAyMjA4MywgNzUxMTMsIDc1MTE3LCA3NTEyMSwgNzUxMjYsIDc1MTMwLCAzMjc3NiwgNzUxMzQsIDc1MTQyLCAKLSAgICAzMjc4MSwgNzUxNDksIDc1MTUyLCA3NTE1NywgNzUxNjEsIDk1NDMsIDc1MTcwLCAzMjc4NiwgMjE5NDUsIDc1MTczLCAKLSAgICA3NTE3NywgMTQyOCwgNzUxODIsIDMyNzk3LCA3NTE4NSwgNzUxOTAsIDI1NzM3LCAyNTc0NywgMzUyNTgsIDc1MTk1LCAKLSAgICA3NTIwMCwgNzUyMDUsIDc1MjEwLCA3NTIxNiwgNzUyMjEsIDc1MjMwLCA3NTIzNSwgNzUyNDIsIDc1MjQ4LCA3NTI1MywgCi0gICAgNzUyNTgsIDc1MjYzLCA3NTI3MywgNzUyODIsIDc1Mjg3LCA3NTI5NSwgNzUyOTksIDc1MzA3LCAzMjYxMSwgMzczMTcsIAotICAgIDc1MzE0LCA3NTMyMCwgNzUzMjUsIDc1MzMwLCAxMjAxNiwgNzUzMzUsIDc1MzQxLCA3NTM0NiwgNzUzNTMsIDc1MzU5LCAKLSAgICA3NTM2NCwgNzUzNzIsIDc1MzgyLCA3NTM5MiwgNzUzOTgsIDc1NDAzLCA3NTQwOSwgMTc1MzYsIDc1NDE2LCAzNjA3MywgCi0gICAgNzU0MjksIDc1NDM0LCA3NTQ0MCwgMzA5OTMsIDc1NDUzLCA3NTQ1OSwgNzU0NjMsIDc1NDcyLCA3NTQ3OSwgNzU0ODUsIAotICAgIDc1NDkzLCA3NTUwMiwgNzU1MDksIDc1NTE1LCA3NTUxOCwgNzU1MjIsIDI1ODc4LCA3NTUyNiwgNzU1MzMsIDc1NTM5LCAKLSAgICA3NTU0NywgNzU1NTIsIDIzOTk0LCA3NTU1OCwgNzU1NjEsIDc1NTY5LCA3NTU3NywgNzU1OTEsIDc1NTk4LCA3NTYwNCwgCi0gICAgNzU2MTEsIDc1NjE3LCAzMjgxMSwgNzU2MjEsIDc1NjI4LCA3NTYzNiwgNzU2NDQsIDc1NjUwLCAzMjgxNiwgNzU2NTgsIAotICAgIDc1NjY0LCA3NTY2OSwgNzU2NzksIDc1Njg1LCA3NTY5NCwgMzA4MzAsIDM0NzE2LCA3NTcwMiwgNzU3MDcsIDc1NzEyLCAKLSAgICA3NTcxNiwgNzU3MjEsIDc1NzI1LCA3NTczMywgMTQ5MjAsIDM5NDI5LCA3NTczOCwgNzU3NDMsIDMyODIxLCA2MjI2OSwgCi0gICAgNzU3NDcsIDc1NzUyLCA3NTc1NiwgNzU3NjUsIDc1NzczLCA3NTc3OSwgNzU3ODQsIDc1NzkwLCA3NTc5NywgNzU4MDMsIAotICAgIDc1ODA4LCA3NTgxMywgNzU4MjIsIDc1ODM0LCA3NTg0OSwgMzMwODMsIDc1ODU1LCAxNjU0NSwgMzI4MjUsIDc1ODU5LCAKLSAgICA3NTg2NiwgMjQxMDQsIDc1ODcyLCA3NTg3OSwgNzU4ODgsIDc1ODk1LCA3NTkwNCwgNzU5MTAsIDc1OTE1LCA3NTkyMywgCi0gICAgNzU5MjksIDMyODM1LCA3NTkzNCwgNzU5NDMsIDc0NzIzLCA3NTk1MiwgNzU5NTksIDc1OTY1LCA3NTk3MSwgNzU5ODEsIAotICAgIDc1OTg5LCA3NTk5NiwgNzYwMDAsIDMyODQwLCA3NjAwMywgMzI4NDYsIDMyODUyLCA3NjAwOCwgNzYwMTYsIDc2MDI0LCAKLSAgICA3NjAzNCwgNzYwNDMsIDc2MDUxLCA3NjA1OCwgNzYwNjgsIDMyODU3LCA3NjA3MiwgNzYwNzQsIDc2MDc4LCA3NjA4MywgCi0gICAgNzYwODcsIDc2MDkxLCA3NjA5NywgNzYxMDIsIDc2MTA2LCA3NjExNywgNzYxMjIsIDc2MTI3LCAzMDYwLCA3NjEzMSwgCi0gICAgNzYxMzgsIDc2MTQyLCA3NjE1MSwgNzYxNTksIDc2MTY2LCA3NjE3MSwgNzYxNzYsIDYyMzE1LCA3NjE4MCwgNzYxODMsIAotICAgIDc2MTg5LCA3NjE5NywgNzYyMDMsIDc2MjA3LCA3NjIxMiwgNzYyMTksIDc2MjI0LCA3NjIzMCwgMzQ3NDcsIDc2MjM1LCAKLSAgICA3NjIzOCwgNzYyNDMsIDc2MjQ3LCA3NjI1MiwgNzYyNTcsIDc2MjYxLCA3NjI2OSwgNzYyNzMsIDI1NzU2LCAyNTc2NSwgCi0gICAgNzYyNzksIDc2Mjg1LCA3NjI5MSwgNzYyOTYsIDc2MzAwLCA3NjMwMywgNzYzMTMsIDc2MzIyLCA3NjMyNywgNzYzMzMsIAotICAgIDc2MzQwLCA3NjM0NiwgNzYzNTAsIDc2MzU4LCA3NjM2MywgMzQ3NTMsIDc2MzY3LCA3NjM3NSwgNzYzODEsIDc2Mzg4LCAKLSAgICA3NjM5MywgNzYzOTcsIDc2NDAyLCA1ODQ0MCwgMzQ3NTksIDc2NDA4LCA3NjQxMywgNzY0MTcsIDc2NDIyLCA3NjQyNywgCi0gICAgNzY0MzIsIDc2NDM2LCA3NjQ0MSwgNzY0NDYsIDc2NDUyLCA3NjQ1NywgNzY0NjIsIDc2NDY4LCA3NjQ3NCwgNzY0NzksIAotICAgIDc2NDgzLCA3NjQ4OCwgNzY0OTMsIDc2NDk4LCA3NjUwMiwgMjQxMDMsIDc2NTA3LCA3NjUxMiwgNzY1MTgsIDc2NTI0LCAKLSAgICA3NjUzMCwgNzY1MzUsIDc2NTM5LCA3NjU0NCwgNzY1NDksIDc2NTU0LCA3NjU1OCwgNzY1NjMsIDc2NTY4LCA3NjU3MywgCi0gICAgNzY1NzgsIDc2NTgyLCAzMjg2NSwgNzY1OTAsIDc2NTk0LCA3NjYwMiwgNzY2MTAsIDc2NjIxLCA3NjYyNiwgNzY2MzAsIAotICAgIDIyMzk3LCA3NjYzNSwgNzY2NDEsIDc2NjUxLCA3NjY1OCwgNzY2NjMsIDc2NjcyLCA3NjY3NywgNzY2ODEsIDc2Njg2LCAKLSAgICA3NjY5NCwgNzY3MDIsIDc2NzA5LCA2NTEwOSwgNzY3MTUsIDc2NzIzLCA3NjczMCwgNzY3NDEsIDc2NzQ3LCA3Njc1MSwgCi0gICAgNzY3NTcsIDMyODc1LCA3Njc2MCwgNzY3NjcsIDc2Nzc1LCA3Njc4MCwgMzk2MjAsIDc2Nzg0LCA3Njc4OSwgNzY3OTYsIAotICAgIDc2ODAxLCA4OTkyLCA3NjgwNSwgNzY4MTMsIDc2ODIwLCA3NjgyNywgNzY4MzMsIDc2ODQ3LCA2MzM4MSwgNzY4NTUsIAotICAgIDc2ODYxLCA3Njg2NSwgNzY4NjgsIDc2ODc2LCA3Njg4MywgNzY4ODgsIDc2OTAxLCA3NjkwOCwgNzY5MTIsIDc2OTE5LCAKLSAgICA3NjkyNCwgNjA4NjAsIDc2OTI5LCA3NjkzMiwgNzY5MzksIDc2OTQ1LCA3Njk0OSwgNzY5NTcsIDc2OTY2LCA3Njk3NiwgCi0gICAgNzY5ODYsIDc2OTk1LCA3NzAwMywgNzcwMTQsIDc3MDE5LCA3NzAyMywgNzcwMjgsIDc3MDMyLCAzNTM4OSwgNzcwNDAsIAotICAgIDIxMzU3LCAzNTM5OCwgNzcwNDUsIDc3MDUwLCA3NzA1NSwgNzcwNjAsIDc3MDY1LCA3NzA3MCwgNzcwNzUsIDc3MDc5LCAKLSAgICA3NzA4NCwgNzcwODksIDc3MDk0LCA3NzA5OSwgNzcxMDQsIDc3MTA5LCA3NzExMywgNzcxMTgsIDc3MTIzLCA3NzEyNywgCi0gICAgNzcxMzEsIDc3MTM1LCA3NzEzOSwgNzcxNDQsIDc3MTQ5LCA3NzE1MywgNzcxNTgsIDc3MTYyLCA3NzE2NiwgNzcxNzEsIAotICAgIDc3MTc2LCA3NzE4MSwgNzcxODYsIDc3MTkwLCA3NzE5NSwgNzcyMDAsIDc3MjA0LCA3NzIwOSwgNzcyMTQsIDc3MjE5LCAKLSAgICA3NzIyNCwgNzcyMjksIDc3MjM0LCA3NzIzOSwgNzcyNDQsIDc3MjQ5LCA3NzI1NCwgNzcyNTksIDc3MjY0LCA3NzI2OSwgCi0gICAgNzcyNzQsIDc3Mjc5LCA3NzI4NCwgNzcyODksIDc3Mjk0LCA3NzI5OSwgNzczMDQsIDc3MzA4LCA3NzMxMywgNzczMTgsIAotICAgIDc3MzIzLCA3NzMyOCwgNzczMzMsIDc3MzM4LCA3NzM0MywgNzczNDgsIDc3MzUzLCA3NzM1OCwgNzczNjMsIDc3MzY3LCAKLSAgICA3NzM3MiwgNzczNzYsIDc3MzgxLCA3NzM4NiwgNzczOTEsIDc3Mzk2LCA3NzQwMSwgNzc0MDYsIDc3NDExLCA3NzQxNiwgCi0gICAgNzc0MjEsIDc3NDI1LCA3NzQyOSwgNzc0MzQsIDc3NDM5LCA3NzQ0MywgNzc0NDgsIDc3NDUzLCA3NzQ1NywgNzc0NjIsIAotICAgIDc3NDY3LCA3NzQ3MiwgNzc0NzcsIDc3NDgxLCA3NzQ4NiwgNzc0OTEsIDc3NDk1LCA3NzUwMCwgNzc1MDQsIDc3NTA4LCAKLSAgICA3NzUxMiwgNzc1MTYsIDc3NTIxLCA3NzUyNSwgNzc1MjksIDc3NTMzLCA3NzUzNywgNzc1NDEsIDc3NTQ1LCA3NzU0OSwgCi0gICAgNzc1NTMsIDc3NTU3LCA3NzU2MiwgNzc1NjcsIDc3NTcyLCA3NzU3NywgNzc1ODIsIDc3NTg3LCA3NzU5MiwgNzc1OTcsIAotICAgIDc3NjAyLCA3NzYwNywgNzc2MTEsIDc3NjE1LCA3NzYxOSwgNzc2MjMsIDc3NjI3LCA3NzYzMSwgNzc2MzYsIDc3NjQwLCAKLSAgICA3NzY0NSwgNzc2NDksIDc3NjU0LCA3NzY1OSwgNzc2NjMsIDc3NjY3LCA3NzY3MiwgNzc2NzYsIDc3NjgwLCA3NzY4NCwgCi0gICAgNzc2ODgsIDc3NjkyLCA3NzY5NiwgNzc3MDAsIDc3NzA0LCA3NzcwOCwgNzc3MTIsIDc3NzE2LCA3NzcyMCwgNzc3MjQsIAotICAgIDc3NzI4LCA3NzczMywgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU0LCA3Nzc1OCwgNzc3NjIsIDc3NzY3LCAKLSAgICA3Nzc3MSwgNzc3NzUsIDc3Nzc5LCA3Nzc4MywgNzc3ODcsIDc3NzkxLCA3Nzc5NiwgNzc4MDAsIDc3ODA1LCA3NzgwOSwgCi0gICAgNzc4MTMsIDc3ODE3LCA3NzgyMSwgNzc4MjUsIDc3ODI5LCA3NzgzMywgNzc4MzcsIDc3ODQxLCA3Nzg0NSwgNzc4NDksIAotICAgIDc3ODU0LCA3Nzg1OCwgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzQsIDc3ODc4LCA3Nzg4MiwgNzc4ODYsIDc3ODkwLCAKLSAgICA3Nzg5NCwgNzc4OTgsIDc3OTAzLCA3NzkwNywgNzc5MTEsIDc3OTE2LCA3NzkyMSwgNzc5MjUsIDc3OTI5LCA3NzkzMywgCi0gICAgNzc5MzcsIDc3OTQxLCA3Nzk0NSwgNzc5NDksIDc3OTUzLCA3Nzk1OCwgNzc5NjIsIDc3OTY3LCA3Nzk3MSwgNzc5NzYsIAotICAgIDc3OTgwLCA3Nzk4NSwgNzc5ODksIDc3OTk1LCA3ODAwMCwgNzgwMDQsIDc4MDA5LCA3ODAxMywgNzgwMTgsIDc4MDIyLCAKLSAgICA3ODAyNywgNzgwMzEsIDc4MDM2LCAxNTIxLCA3ODA0MCwgMjgyNCwgMTc1OSwgMTc2NCwgNzgwNDQsIDc4MDQ4LCAyODI4LCAKLSAgICA3ODA1MiwgMTM5NywgNzgwNTcsIDEzNDIsIDc4MDYxLCAyODQwLCA3ODA2NSwgNzgwNzIsIDc4MDc5LCA3ODA5MywgMjg0NCwgCi0gICAgNzEzMSwgNzgxMDIsIDc4MTEwLCA3ODExNywgNzgxMjgsIDc4MTM3LCA3ODE0NCwgNzgxNTYsIDc4MTY5LCA3ODE4MiwgCi0gICAgNzgxOTMsIDc4MTk4LCA3ODIwNSwgNzgyMTcsIDc4MjIxLCAyODQ4LCAxMTc0NywgNzgyMzEsIDc4MjM2LCA3ODI0NSwgCi0gICAgNzgyNTUsIDI4NTIsIDc4MjYwLCA3ODI2NCwgNzgyNjksIDc4Mjc2LCA3ODI4MiwgNzgyOTAsIDc4MzAyLCAxMzQ3LCAKLSAgICAxMzA0MiwgNzgzMTIsIDc4MzE2LCA3ODMyMiwgNzgzMzYsIDc4MzQ4LCA3ODM2MCwgNzgzNzAsIDc4Mzc5LCA3ODM4OCwgCi0gICAgNzgzOTcsIDc4NDA1LCA3ODQxNiwgNzg0MjQsIDQwNTEsIDc4NDM0LCA3ODQ0NSwgNzg0NTQsIDc4NDYwLCA3ODQ3NSwgCi0gICAgNzg0ODIsIDc4NDg4LCAzNTUxNCwgNzg0OTMsIDI4NzYsIDEzMDQ2LCA3ODQ5NywgNzg1MDQsIDg5MzAsIDc4NTEzLCAyODgxLCAKLSAgICAzMjM2MSwgNzg1MTksIDYwNjA5LCA3ODUyNiwgNzg1MzIsIDc4NTQzLCA3ODU0OSwgNzg1NTYsIDc4NTYyLCA3ODU3MCwgCi0gICAgNzg1NzcsIDc4NTgzLCA3ODU5MywgNzg2MDIsIDc4NjEzLCA3ODYyMCwgNzg2MjYsIDc4NjM2LCA3ODY0NCwgNzg2NTAsIAotICAgIDc4NjY1LCA3ODY3MSwgNzg2NzYsIDc4NjgzLCA3ODY4NiwgNzg2OTIsIDc4Njk5LCA3ODcwNSwgNzg3MTMsIDc4NzIyLCAKLSAgICA3ODczMCwgNzg3MzYsIDc4NzQ1LCA0MTQ2NCwgNzg3NTksIDc4NzY0LCA3ODc3MCwgMTQ3NTcsIDc4Nzc1LCA3ODc4OCwgCi0gICAgNzg3OTcsIDc4ODA1LCA3ODgxMiwgNzg4MTYsIDc4ODIwLCA3ODgyMywgNzg4MzAsIDc4ODM3LCA3ODg0NSwgNzg4NTMsIAotICAgIDc4ODYyLCA3ODg3MCwgMTQ2ODQsIDc4ODc4LCA3ODg4MywgNzg4ODcsIDc4ODk5LCA3ODkwNiwgNzg5MTUsIDc0OCwgCi0gICAgNzg5MjUsIDc4OTM0LCA3ODk0NSwgMjg5NywgNzg5NDksIDc4OTUzLCA3ODk1OSwgNzg5NzIsIDc4OTg0LCA3ODk5NCwgCi0gICAgNzkwMDMsIDc5MDE1LCAyNjM2OSwgNzkwMjYsIDc5MDM0LCA3OTA0MywgNzkwNTQsIDc5MDY1LCA3OTA3NSwgNzkwODUsIAotICAgIDc5MDk0LCA3OTEwMiwgMTEzMTIsIDc5MTA5LCA3OTExMywgNzkxMTYsIDc5MTIxLCA3OTEyNiwgNzkxMzAsIDc5MTM2LCAKLSAgICAxMzUyLCAxMTgxOCwgNzkxNDMsIDc5MTU0LCA3OTE2MywgNzkxNzEsIDc5MTgwLCA3OTE4OCwgNzkyMDQsIDc5MjE1LCAKLSAgICA3OTIyNCwgNzkyMzIsIDc5MjQ0LCA3OTI1NSwgNzkyNzEsIDc5MjgxLCA3OTMwMiwgNzkzMTUsIDc5MzIzLCA3OTMzMCwgCi0gICAgMTQ4NjgsIDc5MzQzLCA3OTM0OCwgNzkzNTQsIDU5MDgsIDc5MzYwLCA3OTM2MywgNzkzNzAsIDc5MzgwLCA4MTc2LCAKLSAgICA3OTM4NywgNzkzOTIsIDc5Mzk3LCA3OTQwMiwgNzk0MTAsIDc5NDE5LCA3OTQyNywgOTc1NiwgOTc2NSwgNzk0MzIsIAotICAgIDc5NDQzLCA3OTQ0OCwgNzk0NTQsIDI5MTMsIDI5MTgsIDc5NDYwLCAxMDg3OSwgNzk0NjYsIDc5NDczLCA3OTQ4MCwgCi0gICAgNzk0OTMsIDIyNTEsIDY4LCA3OTQ5OCwgNzk1MDMsIDc5NTEzLCA3OTUxOSwgNzk1MjgsIDc5NTM2LCA3OTU0NiwgNzk1NTAsIAotICAgIDc5NTU1LCA3OTU1OSwgNzk1NzEsIDI5NDEsIDc5NTc5LCA3OTU4NywgNzk1OTIsIDc5NjAzLCA3OTYxNCwgNzk2MjMsIAotICAgIDc5NjI4LCA3OTYzNCwgNzk2MzksIDc5NjQ5LCA3OTY1OSwgNzk2NjQsIDc5NjcwLCA3OTY3NCwgNzk2NzksIDc5Njg4LCAKLSAgICAyMTQxMCwgNzk2OTIsIDQxMjgsIDIwLCA3OTY5NywgNzk3MDYsIDc5NzEzLCA3OTcyMCwgNzk3MjYsIDc5NzMyLCA4NjQsIAotICAgIDc5NzM3LCA3OTc0MiwgNjA5MzcsIDc5NzQ3LCA3OTc1MiwgNzk3NTgsIDc5NzY0LCA3OTc3MiwgNzk3NzcsIDc5Nzg0LCAKLSAgICA3OTc5MCwgNzk3OTUsIDM4MDMwLCA0MTM1OCwgNzk4MDEsIDI5NDUsIDMyLCA3OTgxMSwgNzk4MjQsIDc5ODI5LCA3OTgzNywgCi0gICAgNzk4NDIsIDc5ODQ4LCAyOTY3LCAyODMxMCwgNzk4NTMsIDc5ODYxLCA3OTg2OCwgNzk4NzMsIDU4NjgyLCA2MTk0MCwgCi0gICAgNzk4ODIsIDc5ODg2LCAxNzA0LCAxODEzLCA3OTg5MSwgNzk4OTYsIDc5OTAzLCAxODE3LCAyNDcsIDc5OTEwLCA3OTkxNiwgCi0gICAgMjk4OSwgNzk5MjEsIDc5OTI2LCA3OTkzMywgMTgyMSwgNzk5MzgsIDc5OTQ0LCA3OTk0OSwgNzk5NjEsIDYxMTksIDc5OTcxLCAKLSAgICAxODI4LCA3OTk3NywgNzk5ODIsIDc5OTg5LCA3OTk5NiwgODAwMTEsIDgwMDE4LCA4MDAyOSwgODAwMzcsIDI2MTgsIAotICAgIDgwMDQxLCA4MDA1MywgODAwNTgsIDgwMDYyLCA4MDA2OCwgMjgxMzUsIDIyNTYsIDgwMDcyLCA4MDA4MywgODAwODcsIAotICAgIDgwMDkxLCA4MDA5NywgODAxMDEsIDgwMTEwLCA4MDExNCwgODAxMjUsIDgwMTI5LCAyMzAyLCAzMjE5MCwgODAxMzMsIAotICAgIDgwMTQzLCAzMDgwLCA5MzcxLCA4MDE1MSwgODAxNTYsIDgwMTYwLCA4MDE2OSwgODAxNzYsIDgwMTgyLCAzMDUwLCAxNzE1MiwgCi0gICAgODAxODYsIDgwMTk5LCA4MDIxNywgODAyMjIsIDgwMjMwLCA4MDIzOCwgODAyNDgsIDk5ODUsIDEzMTU0LCA4MDI2MCwgCi0gICAgODAyNzMsIDgwMjgwLCA4MDI4NywgODAzMDMsIDgwMzEwLCA4MDMxNiwgMTA2NCwgODAzMjMsIDgwMzMwLCA4MDM0MCwgCi0gICAgODAzNDksIDgwMzYxLCA0MjMyOCwgODAzNjksIDMwNjQsIDEyMDMwLCA4MDM3MiwgODAzODAsIDgwMzg0LCA3ODI3MiwgCi0gICAgMzA2OCwgODAzODgsIDIxMTkxLCAxMjA0NiwgMzc1NiwgODAzOTIsIDMwNzQsIDgwMzk2LCA4MDQwNiwgODA0MTIsIDgwNDE4LCAKLSAgICA4MDQyNCwgODA0MzAsIDgwNDM2LCA4MDQ0MiwgODA0NDgsIDgwNDU0LCA4MDQ2MCwgODA0NjYsIDgwNDcyLCA4MDQ3OCwgCi0gICAgODA0ODQsIDgwNDkwLCA4MDQ5NiwgODA1MDIsIDgwNTA4LCA4MDUxNCwgODA1MjAsIDgwNTI2LCA4MDUzMiwgODA1MzgsIAotICAgIDgwNTQ0LCA4MDU1MCwgODA1NTYsIDgwNTYzLCA4MDU3MCwgODA1NzYsIDgwNTgyLCA4MDU4OCwgODA1OTQsIDgwNjAwLCAKLSAgICA4MDYwNiwgMTM1NywgMTYwNjIsIDEyMDY4LCA4MDYxMiwgODA2MTcsIDgwNjIyLCA4MDYyNywgODA2MzIsIDgwNjM3LCAKLSAgICA4MDY0MiwgODA2NDcsIDgwNjUyLCA4MDY1NywgODA2NjIsIDgwNjY3LCA4MDY3MiwgODA2NzcsIDgwNjgyLCA4MDY4NywgCi0gICAgODA2OTIsIDgwNjk3LCA4MDcwMiwgODA3MDcsIDgwNzEyLCA4MDcxNywgODA3MjIsIDgwNzI3LCA4MDczMiwgODA3MzcsIAotICAgIDgwNzQzLCA4MDc0OCwgODA3NTMsIDgwNzU5LCA4MDc2NCwgODA3NzAsIDgwNzc1LCA4MDc4MCwgODA3ODYsIDgwNzkxLCAKLSAgICA4MDc5NiwgODA4MDEsIDgwODA2LCA4MDgxMSwgODA4MTYsIDgwODIxLCA4MDgyNiwgODA0MDcsIDgwNDEzLCA4MDQxOSwgCi0gICAgODA0MjUsIDgwNDMxLCA4MDQzNywgODA0NDMsIDgwNDQ5LCA4MDQ1NSwgODA0NjEsIDgwNDY3LCA4MDQ3MywgODA0NzksIAotICAgIDgwNDg1LCA4MDQ5MSwgODA4MzIsIDgwNDk3LCA4MDUwMywgODA1MDksIDgwODM4LCA4MDUxNSwgODA1MjEsIDgwNTI3LCAKLSAgICA4MDUzMywgODA1MzksIDgwNTQ1LCA4MDU1MSwgODA1NzEsIDgwODQ0LCA4MDg1MCwgODA1NzcsIDgwODU2LCA4MDU4MywgCi0gICAgODA1ODksIDgwNTk1LCA4MDYwMSwgODA2MDcsIDMwOTEsIDMwOTYsIDgwODYyLCA4MDg2NywgODA4NzAsIDgwODc2LCAKLSAgICA4MDg4MiwgODA4ODksIDgwODk0LCA4MDg5OSwgMjMwNywgCisgICAgMCwgMCwgNiwgMTAsIDE0LCAyMiwgMjcsIDM0LCA0NCwgNDksIDU4LCA2NCwgNjYsIDY5LCA4MSwgODksIDEwMiwgMTA4LCAKKyAgICAxMTMsIDExOCwgMTI2LCAxMzUsIDE0NiwgMTUxLCAxNTYsIDE2MSwgMTY0LCAxNjgsIDE3NywgMTgzLCAxODksIDE5NCwgCisgICAgMjAxLCAyMDksIDIxNywgMjE4LCAyMjEsIDIyOSwgMTY1LCAyMzUsIDI0NCwgMjUxLCAyNjEsIDI2NywgMjc0LCAyNzksIAorICAgIDI4MiwgMjg3LCAyOTMsIDI5NiwgMzAwLCAzMDUsIDMxMSwgMzE3LCAzMjIsIDMyNywgMzMzLCAzMzksIDM0OCwgMzU1LCAKKyAgICAzNjIsIDM3MSwgMzc2LCAzODEsIDM4MywgMzkxLCAzOTksIDQwMCwgNDA4LCA0MTAsIDQxNywgNDIwLCA0MjYsIDQzMywgCisgICAgMzMxLCA0MzgsIDQ0MCwgNDQyLCA0NDksIDQ1MSwgNDU2LCA0NjQsIDQ3MSwgNDc2LCA0ODAsIDQ4NiwgNDkxLCA1MDEsIAorICAgIDUwNiwgNTEzLCA1MTYsIDUyNCwgNTI4LCA1MzgsIDU0NSwgNTU0LCA1NjEsIDU3MCwgNTc3LCA1ODAsIDU4NCwgNTkyLCAKKyAgICA1OTgsIDYxMSwgNjE4LCA2MjIsIDYyNiwgNjI3LCA2MzYsIDY0MCwgNjQ5LCA2NTUsIDY1OSwgNjYxLCA2NjYsIDY3NCwgCisgICAgNjc4LCA2ODYsIDY5MSwgNjk0LCA3MDAsIDcwMywgNzA3LCA3MTIsIDcyMCwgNzIzLCA3MzAsIDczNSwgNzQ0LCA3NTMsIAorICAgIDc2MSwgNzY5LCA3NzMsIDc3OSwgNzg3LCA3OTQsIDc5NywgODA3LCA4MTEsIDgxNSwgODI2LCA4MzMsIDg0MCwgODQ0LCAKKyAgICA4NDgsIDg1NCwgODQyLCA4NjMsIDg2OSwgODc0LCA4NzksIDg4MywgODg2LCA4ODksIDg5NCwgOTAzLCA5MTEsIDkxNiwgCisgICAgNjU4LCA1NzUsIDkyMSwgOTI0LCA5MzAsIDkzNCwgOTM4LCA5NDcsIDk1MywgOTYwLCA5NjksIDk3NiwgOTg5LCA5OTQsIAorICAgIDk5OCwgMTAwNiwgMTAwOSwgMTAxNSwgMTAyMSwgMTAzMCwgMTAzNywgMTA0NSwgMTA1MiwgMTA2MiwgMTA2OSwgMTA3NywgCisgICAgMTA4NiwgMTA5MCwgMTA5MywgMTEwMCwgMjEsIDExMDQsIDExMTMsIDExMjEsIDExMjgsIDExMzEsIDExMzYsIDExMzgsIAorICAgIDExNDIsIDExNTEsIDExNTYsIDExNTksIDExNjUsIDExNzIsIDExNzUsIDExODAsIDExODUsIDExOTEsIDExOTYsIDEyMDEsIAorICAgIDEyMDYsIDEyMTAsIDEyMTUsIDEyMjEsIDEyMjYsIDEyMzEsIDEyMzUsIDEyNDEsIDEyNDYsIDEyNTEsIDEyNTYsIDEyNjAsIAorICAgIDEyNjUsIDEyNzAsIDEyNzUsIDEyODEsIDEyODcsIDEyOTMsIDEyOTgsIDEzMDIsIDEzMDcsIDEzMTIsIDEzMTcsIDEzMjEsIAorICAgIDEzMjYsIDEzMzEsIDEzMzYsIDEzNDEsIDExNzYsIDExODEsIDExODYsIDExOTIsIDExOTcsIDEzNDUsIDEyMDcsIDEzNTEsIAorICAgIDEzNTYsIDEzNjEsIDEzNjgsIDEzNzIsIDEzNzUsIDEzODQsIDEyMTEsIDEzODgsIDEyMTYsIDEyMjIsIDEyMjcsIDEzOTIsIAorICAgIDEzOTcsIDE0MDIsIDE0MDYsIDE0MTAsIDE0MTYsIDE0MjAsIDEyMzIsIDE0MjMsIDE0MjUsIDEyNDIsIDE0MzAsIDE0MzQsIAorICAgIDEyNDcsIDE0NDAsIDEyNTIsIDE0NDQsIDE0NDgsIDEyNTcsIDE0NTIsIDE0NTcsIDE0NjEsIDE0NjQsIDE0NjgsIDEyNjEsIAorICAgIDEyNjYsIDE0NzMsIDE0NzksIDEyNzEsIDE0OTEsIDE0OTcsIDE1MDMsIDE1MDksIDEyNzYsIDEyODgsIDEyOTQsIDE1MTMsIAorICAgIDE1MTcsIDE1MjEsIDE1MjQsIDEyOTksIDE1MjgsIDE1MzAsIDE1MzUsIDE1NDAsIDE1NDYsIDE1NTEsIDE1NTYsIDE1NjAsIAorICAgIDE1NjUsIDE1NzAsIDE1NzUsIDE1ODAsIDE1ODYsIDE1OTEsIDE1OTYsIDE2MDIsIDE2MDgsIDE2MTMsIDE2MTcsIDE2MjIsIAorICAgIDE2MjcsIDE2MzIsIDE2MzcsIDE2NDIsIDE2NDYsIDE2NTQsIDE2NTksIDE2NjMsIDE2NjgsIDE2NzMsIDE2NzgsIDE2ODMsIAorICAgIDE2ODcsIDE2OTAsIDE2OTcsIDE3MDIsIDE3MDcsIDE3MTIsIDE3MTcsIDE3MjMsIDE3MjgsIDE3MzIsIDEzMDMsIDE3MzUsIAorICAgIDE3NDAsIDE3NDUsIDEzMDgsIDE3NDksIDE3NTMsIDE3NjAsIDEzMTMsIDE3NjcsIDEzMTgsIDE3NzEsIDE3NzMsIDE3NzgsIAorICAgIDE3ODQsIDEzMjIsIDE3ODksIDE3OTgsIDEzMjcsIDE4MDMsIDE4MDksIDE4MTQsIDEzMzIsIDE4MTksIDE4MjQsIDE4MjcsIAorICAgIDE4MzIsIDE4MzYsIDE4NDAsIDE4NDQsIDE4NDcsIDE4NTEsIDEzMzcsIDE4NTYsIDEzNDIsIDE4NjAsIDE4NjIsIDE4NjgsIAorICAgIDE4NzQsIDE4ODAsIDE4ODYsIDE4OTIsIDE4OTgsIDE5MDQsIDE5MTAsIDE5MTUsIDE5MjEsIDE5MjcsIDE5MzMsIDE5MzksIAorICAgIDE5NDUsIDE5NTEsIDE5NTcsIDE5NjMsIDE5NjksIDE5NzQsIDE5NzksIDE5ODQsIDE5ODksIDE5OTQsIDE5OTksIDIwMDQsIAorICAgIDIwMDksIDIwMTQsIDIwMTksIDIwMjUsIDIwMzAsIDIwMzYsIDIwNDEsIDIwNDcsIDIwNTMsIDIwNTgsIDIwNjQsIDIwNzAsIAorICAgIDIwNzYsIDIwODIsIDIwODcsIDIwOTIsIDIwOTQsIDIwOTUsIDIwOTksIDIxMDMsIDIxMDgsIDIxMTIsIDIxMTYsIDIxMjAsIAorICAgIDIxMjUsIDIxMjksIDIxMzIsIDIxMzcsIDIxNDEsIDIxNDYsIDIxNTAsIDIxNTQsIDIxNTksIDIxNjMsIDIxNjYsIDIxNzAsIAorICAgIDIxNzYsIDIxOTAsIDIxOTQsIDIxOTgsIDIyMDIsIDIyMDUsIDIyMTAsIDIyMTQsIDIyMTgsIDIyMjEsIDIyMjUsIDIyMzAsIAorICAgIDIyMzUsIDIyNDAsIDIyNDUsIDIyNDksIDIyNTMsIDIyNTcsIDIyNjEsIDIyNjYsIDIyNzAsIDIyNzUsIDIyNzksIDIyODQsIAorICAgIDIyOTAsIDIyOTcsIDIzMDMsIDIzMDgsIDIzMTMsIDIzMTgsIDIzMjQsIDIzMjksIDIzMzUsIDIzNDAsIDIzNDMsIDIzNDUsIAorICAgIDExOTMsIDIzNDksIDIzNTYsIDIzNjQsIDIzNzQsIDIzODMsIDIzOTcsIDI0MDEsIDI0MDUsIDI0MTAsIDI0MjMsIDI0MzEsIAorICAgIDI0MzUsIDI0NDAsIDI0NDQsIDI0NDcsIDI0NTEsIDI0NTUsIDI0NjAsIDI0NjUsIDI0NzAsIDI0NzQsIDI0NzcsIDI0ODEsIAorICAgIDI0ODgsIDI0OTUsIDI1MDEsIDI1MDYsIDI1MTEsIDI1MTcsIDI1MjMsIDI1MjgsIDI1MzEsIDE3NzUsIDI1MzMsIDI1MzksIAorICAgIDI1NDMsIDI1NDgsIDI1NTIsIDI1NTYsIDE2OTMsIDE3ODYsIDI1NjEsIDI1NjUsIDI1NjgsIDI1NzMsIDI1NzgsIDI1ODMsIAorICAgIDI1ODgsIDI1OTIsIDI1OTksIDI2MDQsIDI2MDcsIDI2MTQsIDI2MjAsIDI2MjQsIDI2MjgsIDI2MzIsIDI2MzcsIDI2NDQsIAorICAgIDI2NDksIDI2NTQsIDI2NjEsIDI2NjcsIDI2NzMsIDI2NzksIDI2OTMsIDI3MTAsIDI3MjUsIDI3NDAsIDI3NDksIDI3NTQsIAorICAgIDI3NTgsIDI3NjMsIDI3NjgsIDI3NzIsIDI3ODQsIDI3OTEsIDI3OTcsIDIyOTMsIDI4MDMsIDI4MTAsIDI4MTYsIDI4MjAsIAorICAgIDI4MjMsIDI4MzAsIDI4MzYsIDI4NDEsIDI4NDUsIDI4NTAsIDI4NTQsIDI4NTgsIDIxMTcsIDI4NjIsIDI4NjcsIDI4NzIsIAorICAgIDI4NzYsIDI4ODEsIDI4ODksIDI4OTMsIDI4OTgsIDI5MDIsIDI5MDYsIDI5MTAsIDI5MTUsIDI5MjAsIDI5MjUsIDI5MjksIAorICAgIDI5MzQsIDI5MzksIDI5NDMsIDI5NDgsIDI5NTIsIDI5NTUsIDI5NTksIDI5NjMsIDI5NzEsIDI5NzYsIDI5ODAsIDI5ODQsIAorICAgIDI5OTAsIDI5OTksIDMwMDMsIDMwMDcsIDMwMTMsIDMwMTgsIDMwMjUsIDMwMjksIDMwMzksIDMwNDMsIDMwNDcsIDMwNTIsIAorICAgIDMwNTYsIDMwNjEsIDMwNjcsIDMwNzIsIDMwNzYsIDMwODAsIDMwODQsIDI0OTEsIDMwOTIsIDMwOTcsIDMxMDMsIDMxMDgsIAorICAgIDMxMTIsIDMxMTcsIDMxMjIsIDMxMjYsIDMxMzIsIDMxMzcsIDIxMjEsIDMxNDMsIDMxNDksIDMxNTQsIDMxNTksIDMxNjQsIAorICAgIDMxNjksIDMxNzQsIDMxNzksIDMxODQsIDMxODksIDMxOTQsIDMyMDAsIDMyMDUsIDEyMDgsIDEwMSwgMzIxMSwgMzIxNSwgCisgICAgMzIxOSwgMzIyMywgMzIyOCwgMzIzMiwgMzIzNiwgMzI0MiwgMzI0NywgMzI1MSwgMzI1NSwgMzI2MCwgMzI2NSwgMzI2OSwgCisgICAgMzI3NCwgMzI3OCwgMzI4MSwgMzI4NSwgMzI5MCwgMzI5NCwgMzI5OSwgMzMwMywgMzMwNiwgMzMxMCwgMzMxNCwgMzMxOSwgCisgICAgMzMyMywgMzMyNiwgMzMzOSwgMzM0MywgMzM0NywgMzM1MSwgMzM1NiwgMzM2MCwgMzM2NCwgMzM2NywgMzM3MSwgMzM3NSwgCisgICAgMzM4MCwgMzM4NCwgMzM4OSwgMzM5NCwgMzM5OSwgMzQwMywgMzQwOCwgMzQxMSwgMzQxNCwgMzQxOSwgMzQyNSwgMzQyOSwgCisgICAgMzQzMywgMzQzNiwgMzQ0MSwgMzQ0NSwgMzQ1MCwgMzQ1NCwgMzQ1OCwgMzQ2MSwgMzQ2NywgMzQ3MiwgMzQ3NywgMzQ4MywgCisgICAgMzQ4OCwgMzQ5MywgMzQ5OSwgMzUwNSwgMzUxMCwgMzUxNSwgMzUyMCwgMzUyNSwgMTE0MCwgNTc5LCAzNTI4LCAzNTMxLCAKKyAgICAzNTM2LCAzNTQwLCAzNTQ0LCAzNTQ4LCAzNTUyLCAzNTU1LCAzNTU5LCAzNTY0LCAzNTY5LCAzNTczLCAzNTc4LCAzNTgyLCAKKyAgICAzNTg3LCAzNTkxLCAzNTk1LCAzNTk5LCAzNjA1LCAzNjExLCAzNjE0LCAzNjE3LCAxMzksIDM2MjMsIDM2MjgsIDM2MzcsIAorICAgIDM2NDUsIDM2NTQsIDM2NjEsIDM2NjcsIDM2NzQsIDM2NzksIDM2ODMsIDM2ODcsIDM2OTUsIDM3MDIsIDM3MDcsIDM3MTQsIAorICAgIDM3MTksIDM3MjMsIDM3MzMsIDM3MzcsIDM3NDEsIDM3NDYsIDM3NTEsIDM3NjEsIDIxMzMsIDM3NjYsIDM3NzAsIDM3NzMsIAorICAgIDM3NzksIDM3ODQsIDM3OTAsIDM3OTYsIDM4MDEsIDM4MDgsIDM4MTIsIDM4MTYsIDYzNywgNzAxLCAxMzY5LCAzODIwLCAKKyAgICAzODI3LCAzODM0LCAzODQwLCAzODQ1LCAzODUyLCAzODU5LCAzODY0LCAzODcwLCAzODc2LCAzODgxLCAzODg1LCAzODkxLCAKKyAgICAzODk4LCAzOTAzLCAzOTA3LCAyMTQyLCAzOTExLCAzOTE5LCAzOTI1LCAzOTMzLCA3MzksIDM5MzksIDM5NDcsIDM5NTgsIAorICAgIDM5NjIsIDM5NzIsIDIxNDcsIDM5NzgsIDM5ODMsIDM5OTgsIDQwMDQsIDQwMTEsIDQwMjEsIDQwMjcsIDQwMzIsIDQwMzgsIAorICAgIDQwNDQsIDQwNDcsIDQwNTAsIDQwNTQsIDQwNTksIDQwNjYsIDQwNzEsIDQwNzUsIDQwNzksIDQwODMsIDQwODcsIDQwOTIsIAorICAgIDQwOTgsIDQxMDksIDQxMTMsIDMyODYsIDQxMTgsIDQxMzAsIDQxMzYsIDQxNDQsIDQxNDgsIDQxNTMsIDE1NjIsIDQxNjAsIAorICAgIDQxNjMsIDQxNjYsIDQxNzAsIDQxNzMsIDQxNzksIDQxODMsIDQxOTcsIDQyMDEsIDQyMDQsIDQyMDgsIDQyMTQsIDQyMjAsIAorICAgIDQyMjUsIDQyMjksIDQyMzMsIDQyMzksIDQyNTAsIDQyNTYsIDQyNjEsIDQyNjcsIDQyNzEsIDQyNzksIDQyOTEsIDQzMDEsIAorICAgIDQzMDcsIDQzMTIsIDQzMjEsIDQzMjksIDQzMzYsIDQzNDIsIDQzNDYsIDQzNTIsIDQzNjEsIDQzNzAsIDQzNzQsIDQzODMsIAorICAgIDQzODgsIDQzOTIsIDQzOTcsIDQ0MDEsIDQ0MDksIDQ0MTUsIDQ0MTksIDQ0MjQsIDQ0MjgsIDQ0MzQsIDIxNTUsIDEzODUsIAorICAgIDQ0NDAsIDQ0NDUsIDQ0NTEsIDQ0NTYsIDQ0NjEsIDQ0NjYsIDQ0NzEsIDQ0NzYsIDQ0ODEsIDQ0ODcsIDQ0OTIsIDQ0OTgsIAorICAgIDQ1MDMsIDQ1MDgsIDQ1MTMsIDQ1MTksIDQ1MjQsIDQ1MjksIDQ1MzQsIDQ1MzksIDQ1NDUsIDQ1NTAsIDQ1NTYsIDQ1NjEsIAorICAgIDQ1NjYsIDQ1NzEsIDQ1NzYsIDQ1ODEsIDQ1ODYsIDQ1OTIsIDQ1OTcsIDQ2MDIsIDI5MSwgMzIxLCA0NjA3LCA0NjEzLCAKKyAgICA0NjE3LCA0NjIxLCA0NjI2LCA0NjMwLCA0NjM0LCA0NjM3LCA0NjQxLCA0NjQ1LCA0NjQ5LCA0NjUzLCA0NjU3LCA0NjYyLCAKKyAgICA0NjY2LCA0NjcwLCA0Njc2LCA0NDM3LCA0NjgxLCA0Njg1LCA0Njg4LCA0NjkzLCA0Njk4LCA0NzAzLCA0NzA4LCA0NzEzLCAKKyAgICA0NzE4LCA0NzIzLCA0NzI4LCA0NzMzLCA0NzM4LCA0NzQyLCA0NzQ3LCA0NzUyLCA0NzU3LCA0NzYyLCA0NzY3LCA0NzcyLCAKKyAgICA0Nzc3LCA0NzgyLCA0Nzg3LCA0NzkyLCA0Nzk2LCA0ODAxLCA0ODA2LCA0ODExLCA0ODE2LCA0ODIxLCA0ODI2LCA0ODMxLCAKKyAgICA0ODM2LCA0ODQxLCA0ODQ2LCA0ODUwLCA0ODU1LCA0ODYwLCA0ODY1LCA0ODcwLCA0ODc1LCA0ODgwLCA0ODg1LCA0ODkwLCAKKyAgICA0ODk1LCA0OTAwLCA0OTA0LCA0OTA5LCA0OTE0LCA0OTE5LCA0OTI0LCA0OTI5LCA0OTM0LCA0OTM5LCA0OTQ0LCA0OTQ5LCAKKyAgICA0OTU0LCA0OTU4LCA0OTYzLCA0OTY4LCA0OTczLCA0OTc4LCA0OTgzLCA0OTg4LCA0OTkzLCA0OTk4LCA1MDAzLCA1MDA4LCAKKyAgICA1MDEyLCA1MDE3LCA1MDIyLCA1MDI3LCA1MDMyLCA1MDM3LCA1MDQyLCA1MDQ3LCA1MDUyLCA1MDU3LCA1MDYyLCA1MDY2LCAKKyAgICA1MDcxLCA1MDc2LCA1MDgxLCA1MDg2LCA1MDkyLCA1MDk4LCA1MTA0LCA1MTEwLCA1MTE2LCA1MTIyLCA1MTI4LCA1MTMzLCAKKyAgICA1MTM5LCA1MTQ1LCA1MTUxLCA1MTU3LCA1MTYzLCA1MTY5LCA1MTc1LCA1MTgxLCA1MTg3LCA1MTkzLCA1MTk4LCA1MjA0LCAKKyAgICA1MjEwLCA1MjE2LCA1MjIyLCA1MjI4LCA1MjM0LCA1MjQwLCA1MjQ2LCA1MjUyLCA1MjU4LCA1MjYzLCA1MjY5LCA1Mjc1LCAKKyAgICA1MjgxLCA1Mjg3LCA1MjkzLCA1Mjk5LCA1MzA1LCA1MzExLCA1MzE3LCA1MzIzLCA1MzI4LCA1MzM0LCA1MzQwLCA1MzQ2LCAKKyAgICA1MzUyLCA1MzU4LCA1MzY0LCA1MzcwLCA1Mzc2LCA1MzgyLCA1Mzg4LCA1MzkzLCA1Mzk5LCA1NDA1LCA1NDExLCA1NDE3LCAKKyAgICA1NDIzLCA1NDI5LCA1NDM1LCA1NDQxLCA1NDQ3LCA1NDUzLCA1NDU4LCA1NDYyLCA1NDY4LCA1NDc0LCA1NDgwLCA1NDg2LCAKKyAgICA1NDkyLCA1NDk4LCA1NTA0LCA1NTEwLCA1NTE2LCA1NTIyLCA1NTI3LCA1NTMzLCA1NTM5LCA1NTQ1LCA1NTUxLCA1NTU3LCAKKyAgICA1NTYzLCA1NTY5LCA1NTc1LCA1NTgxLCA1NTg3LCA1NTkyLCA1NTk4LCA1NjA0LCA1NjEwLCA1NjE2LCA1NjIyLCA1NjI4LCAKKyAgICA1NjM0LCA1NjQwLCA1NjQ2LCA1NjUyLCA1NjU3LCA1NjYzLCA1NjY5LCA1Njc1LCA1NjgxLCA1Njg3LCA1NjkzLCA1Njk5LCAKKyAgICA1NzA1LCA1NzExLCA1NzE3LCA1NzIyLCA1NzI4LCA1NzM0LCA1NzQwLCA1NzQ2LCA1NzUyLCA1NzU4LCA1NzY0LCA1NzcwLCAKKyAgICA1Nzc2LCA1NzgyLCA1Nzg3LCA1NzkzLCA1Nzk5LCA1ODA1LCA1ODExLCA1ODE3LCA1ODIzLCA1ODI5LCA1ODM1LCA1ODQxLCAKKyAgICA1ODQ3LCA1ODUyLCA1ODU4LCA1ODY0LCA1ODcwLCA1ODc2LCA1ODgyLCA1ODg4LCA1ODk0LCA1OTAwLCA1OTA2LCA1OTEyLCAKKyAgICA1OTE3LCA1OTIzLCA1OTI5LCA1OTM1LCA1OTQxLCA1OTQ3LCA1OTUzLCA1OTU5LCA1OTY1LCA1OTcxLCA1OTc3LCA1OTgyLCAKKyAgICA1OTg4LCA1OTk0LCA2MDAwLCA2MDA2LCA2MDEyLCA2MDE4LCA2MDI0LCA2MDMwLCA2MDM2LCA2MDQyLCA2MDQ3LCA2MDUzLCAKKyAgICA2MDU5LCA2MDY1LCA2MDcxLCA2MDc3LCA2MDgzLCA2MDg5LCA2MDk1LCA2MTAxLCA2MTA3LCA2MTEyLCA2MTE2LCA2MTE5LCAKKyAgICA2MTI2LCA2MTMwLCA2MTQzLCA2MTQ3LCA2MTUxLCA2MTU1LCA2MTU4LCA2MTYyLCA2MTY3LCA2MTcxLCA2MTc1LCA2MTgxLCAKKyAgICA2MTg4LCA2MTk5LCA2MjA3LCA2MjE0LCA2MjE4LCA2MjI2LCA2MjM1LCA2MjQxLCA2MjUzLCA2MjU4LCA2MjYxLCA2MjY2LCAKKyAgICA2MjcwLCA2MjgwLCA2Mjg4LCA2Mjk2LCA2MzAyLCA2MzA2LCA2MzE2LCA2MzI2LCA2MzM0LCA2MzQxLCA2MzQ4LCA2MzU0LCAKKyAgICA2MzYwLCA2MzY3LCA2MzcxLCA2Mzc4LCA2Mzg4LCA2Mzk4LCA2NDA2LCA2NDEzLCA2NDE4LCA2NDIyLCA2NDI2LCA2NDM0LCAKKyAgICA2NDM4LCA2NDQzLCA2NDUwLCA2NDU4LCA2NDYzLCA2NDY3LCA2NDcyLCA2NDc2LCA2NDgzLCA2NDg4LCA2NTAyLCA2NTA3LCAKKyAgICA2NTEyLCA2NTE5LCAzNTQxLCA2NTI4LCA2NTMyLCA2NTM3LCA2NTQxLCA2NTQ1LCA2NTQ4LCA2NTUzLCA2NTU4LCA2NTY3LCAKKyAgICA2NTczLCA2NTc5LCA2NTg1LCA2NTg5LCA2NjAwLCA2NjEwLCA2NjI1LCA2NjQwLCA2NjU1LCA2NjcwLCA2Njg1LCA2NzAwLCAKKyAgICA2NzE1LCA2NzMwLCA2NzQ1LCA2NzYwLCA2Nzc1LCA2NzkwLCA2ODA1LCA2ODIwLCA2ODM1LCA2ODUwLCA2ODY1LCA2ODgwLCAKKyAgICA2ODk1LCA2OTEwLCA2OTI1LCA2OTQwLCA2OTU1LCA2OTcwLCA2OTg1LCA3MDAwLCA3MDE1LCA3MDMwLCA3MDQ1LCA3MDYwLCAKKyAgICA3MDc1LCA3MDkwLCA3MTA1LCA3MTIwLCA3MTM1LCA3MTUwLCA3MTY1LCA3MTgwLCA3MTk1LCA3MjEwLCA3MjI1LCA3MjQwLCAKKyAgICA3MjU1LCA3MjcwLCA3Mjg1LCA3MzAwLCA3MzE1LCA3MzMwLCA3MzQ1LCA3MzU0LCA3MzYzLCA3MzY4LCA3Mzc0LCA3Mzg0LCAKKyAgICA3Mzg4LCA3MzkyLCA3Mzk3LCA3NDAyLCA3NDEwLCA3NDE0LCA3NDE3LCA3NDIxLCAzMDM0LCA3NDI0LCA3NDI5LCAzMzAsIAorICAgIDUwNCwgNzQzNSwgNzQ0MywgNzQ0NywgNzQ1MSwgNzQ1NCwgNzQ1OCwgNzQ2NCwgNzQ2OCwgNzQ3NiwgNzQ4MiwgNzQ4NywgCisgICAgNzQ5NCwgNzUwMiwgNzUwOSwgNzUxNSwgNzUyMCwgNzUyNywgNzUzMywgNzU0MSwgNzU0NSwgNzU1MCwgNzU2MiwgNzU3MywgCisgICAgNzU4MCwgNzU4NCwgNzU4OCwgNzU5MiwgNzU5NSwgNzYwMSwgMzMxMSwgNzYwNSwgNzYxMSwgNzYxNiwgNzYyMSwgNzYyNiwgCisgICAgNzYzMiwgNzYzNywgNzY0MiwgNzY0NywgNzY1MiwgNzY1OCwgNzY2MywgNzY2OCwgNzY3NCwgNzY3OSwgNzY4NSwgNzY5MCwgCisgICAgNzY5NiwgNzcwMSwgNzcwNywgNzcxMiwgNzcxNywgNzcyMiwgNzcyNywgNzczMiwgNzczOCwgNzc0MywgNzc0OCwgNzc1MywgCisgICAgNzc1OSwgNzc2NSwgNzc3MSwgNzc3NywgNzc4MywgNzc4OSwgNzc5NSwgNzgwMSwgNzgwNywgNzgxMywgNzgxOSwgNzgyNSwgCisgICAgNzgzMCwgNzgzNSwgNzg0MCwgNzg0NSwgNzg1MCwgNzg1NSwgNzg2MCwgNzg2NSwgNzg3MSwgNzg3NywgNzg4MiwgNzg4OCwgCisgICAgNzg5NCwgNzkwMCwgNzkwNSwgNzkxMCwgNzkxNSwgNzkyMCwgNzkyNiwgNzkzMiwgNzkzNywgNzk0MiwgNzk0NywgNzk1MiwgCisgICAgNzk1NywgNzk2MywgNzk2OCwgNzk3NCwgNzk4MCwgNzk4NiwgNzk5MiwgNzk5OCwgODAwNCwgODAxMCwgODAxNiwgODAyMiwgCisgICAgMjE2NCwgNzQ1MywgODAyNywgODAzMSwgODAzNSwgODAzOCwgODA0NSwgODA0OCwgODA1MiwgODA2MCwgODA2NSwgODA3MCwgCisgICAgODA2MSwgODA3NSwgMjE5MSwgODA3OSwgODA4NSwgODA5MSwgODA5NiwgODEwMSwgODEwOCwgODExNiwgODEyMSwgODEyNSwgCisgICAgODEyOCwgODEzMiwgODEzOCwgODE0NCwgODE0OCwgMjE5OSwgNTI2LCA4MTUxLCA4MTU1LCA4MTYwLCA4MTY2LCA4MTcxLCAKKyAgICA4MTc1LCA4MTc4LCA4MTgyLCA4MTg4LCA4MTkzLCA4MTk3LCA4MjA0LCA4MjA4LCA4MjEyLCA4MjE2LCA4NzYsIDk1OCwgCisgICAgODIxOSwgODIyNywgODIzNCwgODI0MCwgODI0NywgODI1NSwgODI2MiwgODI3MywgODI4MCwgODI4NiwgODI5MSwgODMwMywgCisgICAgMTIyOCwgMTM5MywgMTM5OCwgODMxNCwgMTQwMywgODMxOCwgODMyMiwgODMzMSwgODMzOSwgODM0MywgODM1MiwgODM1OCwgCisgICAgODM2MywgODM2NywgODM3MywgODM3OCwgODM4NSwgMjc0NSwgODM5MiwgODM5NiwgODQwNSwgODQxNCwgODQyMywgODQzMiwgCisgICAgODQzOCwgODQ0MywgODQ0OCwgODQ1OSwgODQ3MSwgODQ3NiwgODQ4NCwgMjI1MCwgODQ4OCwgODQ5MCwgODQ5NSwgODQ5OSwgCisgICAgODUwOCwgODUxNiwgMTQwNywgMTU5LCAzNTgzLCAzNTg4LCA4NTIyLCA4NTI2LCA4NTM1LCA4NTQxLCA4NTQ2LCA4NTQ5LCAKKyAgICA4NTU4LCAzNTkyLCAyNzM3LCA4NTY0LCA4NTcyLCA4NTc2LCA4NTgwLCA4NTg0LCAyMjY3LCA4NTg4LCA4NTkzLCA4NjAwLCAKKyAgICA4NjA2LCA4NjEyLCA4NjE1LCA4NjE3LCA4NjIwLCA4NjI4LCA4NjM2LCA4NjQ0LCA4NjQ3LCA4NjUyLCAyMjgwLCA4NjU3LCAKKyAgICA4MDcyLCA4NjYwLCA4NjYyLCA4NjY3LCA4NjcyLCA4Njc3LCA4NjgyLCA4Njg3LCA4NjkyLCA4Njk3LCA4NzAyLCA4NzA3LCAKKyAgICA4NzEyLCA4NzE4LCA4NzIzLCA4NzI4LCA4NzMzLCA4NzM5LCA4NzQ0LCA4NzQ5LCA4NzU0LCA4NzU5LCA4NzY0LCA4NzY5LCAKKyAgICA4Nzc1LCA4NzgwLCA4Nzg1LCA4NzkwLCA4Nzk1LCA4ODAwLCA4ODA1LCA4ODEwLCA4ODE1LCA4ODIwLCA4ODI1LCA4ODMwLCAKKyAgICA4ODM1LCA4ODQwLCA4ODQ1LCA4ODUwLCA4ODU1LCA4ODYwLCA4ODY2LCA4ODcyLCA4ODc3LCA4ODgyLCA4ODg3LCA4ODkyLCAKKyAgICA4ODk3LCAyMjkxLCAyMjk4LCAyMzA0LCA4OTAyLCA4OTEwLCA4OTE2LCA4OTI0LCAyMzMwLCAyMzM2LCA4OTMyLCA4OTM2LCAKKyAgICA4OTQxLCA4OTQ1LCA4OTQ5LCA4OTUzLCA4OTU4LCA4OTYyLCA4OTY3LCA4OTcxLCA4OTc0LCA4OTc3LCA4OTgzLCA4OTkwLCAKKyAgICA4OTk2LCA5MDAzLCA5MDA5LCA5MDE2LCA5MDIyLCA5MDI5LCA5MDM1LCA5MDQxLCA5MDUwLCA5MDU2LCA5MDYwLCA5MDY0LCAKKyAgICA5MDY4LCA5MDcyLCA5MDc3LCA5MDgxLCA5MDg2LCA5MDkwLCA5MDk2LCA5MTAxLCA5MTA4LCA5MTE5LCA5MTI3LCA5MTM3LCAKKyAgICA5MTQzLCA5MTUzLCA5MTYyLCA5MTY5LCA5MTc0LCA5MTc4LCA5MTg5LCA5MjAyLCA5MjEzLCA5MjI2LCA5MjM3LCA5MjQ5LCAKKyAgICA5MjYxLCA5MjczLCA5Mjg2LCA5Mjk5LCA5MzA2LCA5MzEyLCA5MzI2LCA5MzMzLCA5MzM5LCA5MzQ4LCA5MzU2LCA5MzYwLCAKKyAgICA5MzY1LCA5MzY5LCA5Mzc2LCA5Mzg0LCA5Mzg4LCA5Mzk0LCA5Mzk4LCA5NDA0LCA5NDE0LCA5NDE4LCA5NDIzLCA5NDI4LCAKKyAgICA5NDM1LCA5NDQxLCA5NDUxLCA4MjQyLCA5NDU3LCA5NDYxLCA5NDY4LCA5NDc0LCA5NDgxLCA5NDg4LCA5NTcsIDk0OTIsIAorICAgIDk0OTYsIDk1MDEsIDk1MDYsIDk1MTEsIDk1MTUsIDk1MjEsIDk1MjksIDk1MzUsIDk1MzksIDk1NDIsIDk1NDgsIDk1NTgsIAorICAgIDk1NjIsIDk1NjgsIDk1NzMsIDk1NzcsIDk1ODEsIDk1ODcsIDk1OTMsIDIxODcsIDk1OTgsIDk2MDAsIDk2MDUsIDk2MTMsIAorICAgIDk2MjIsIDk2MjYsIDk2MzIsIDk2MzcsIDk2NDIsIDk2NDcsIDk2NTIsIDk2NTgsIDk2NjMsIDk2NjgsIDQyMzUsIDk2NzMsIAorICAgIDk2NzgsIDk2ODIsIDk2ODgsIDk2OTMsIDk2OTksIDk3MDQsIDk3MDksIDk3MTUsIDk3MjAsIDk2MjcsIDk3MjYsIDk3MzAsIAorICAgIDk3MzcsIDk3NDMsIDk3NDgsIDk3NTIsIDY0OTgsIDk3NTcsIDk3NjYsIDk3NzEsIDk3NzYsIDg1OTYsIDg2MDMsIDk3ODEsIAorICAgIDI5MTIsIDk3ODUsIDk3OTAsIDk3OTUsIDk4MDAsIDk2MzgsIDk4MDQsIDk4MDksIDk4MTQsIDk2NDMsIDk4MTgsIDk2NDgsIAorICAgIDk4MjMsIDk4MzAsIDk4MzcsIDk4NDMsIDk4NTAsIDk4NTYsIDk4NjIsIDk4NjcsIDk4NzQsIDk4NzksIDk4ODQsIDk4ODksIAorICAgIDk4OTUsIDk2NTMsIDk2NTksIDk5MDEsIDk5MDcsIDk5MTIsIDk5MTcsIDk5MjUsIDk2NjQsIDk5MzAsIDExMDIsIDk5MzMsIAorICAgIDk5NDEsIDk5NDcsIDk5NTMsIDk5NjIsIDk5NzAsIDk5NzgsIDk5ODYsIDk5OTQsIDEwMDAyLCAxMDAxMCwgMTAwMTgsIAorICAgIDEwMDI2LCAxMDAzNSwgMTAwNDQsIDEwMDUyLCAxMDA2MSwgMTAwNzAsIDEwMDc5LCAxMDA4OCwgMTAwOTcsIDEwMTA2LCAKKyAgICAxMDExNSwgMTAxMjQsIDEwMTMzLCAxMDE0MiwgMTAxNTAsIDEwMTU1LCAxMDE2MSwgMTAxNjksIDEwMTc2LCAxMDE5MSwgCisgICAgMTAyMDgsIDEwMjI3LCAxMDIzNiwgMTAyNDQsIDEwMjU5LCAxMDI3MCwgMTAyODAsIDEwMjkwLCAxMDI5OCwgMTAzMDQsIAorICAgIDEwMzE2LCAxMDMyNSwgMTAzMzMsIDEwMzQwLCAxMDM0NywgMTAzNTQsIDEwMzYwLCAxMDM2NSwgMTAzNzUsIDEwMzgzLCAKKyAgICAxMDM5MywgMTA0MDAsIDEwNDEwLCAxMDQyMCwgMTA0MzAsIDEwNDM4LCAxMDQ0NSwgMTA0NTQsIDEwNDY0LCAxMDQ3OCwgCisgICAgMTA0OTMsIDEwNTAyLCAxMDUxMCwgMTA1MTUsIDEwNTE5LCAxMDUyOCwgMTA1MzQsIDEwNTM5LCAxMDU0OSwgMTA1NTksIAorICAgIDEwNTY5LCAxMDU3NCwgMTA1NzgsIDEwNTg3LCAxMDU5MiwgMTA2MDgsIDEwNjI1LCAxMDYzNSwgMTA2NDYsIDEwNjU5LCAKKyAgICAxMDY2NywgMTA2ODAsIDEwNjkyLCAxMDcwMCwgMTA3MDUsIDEwNzA5LCAxMDcxNSwgMTA3MjAsIDEwNzI4LCAxMDczNiwgCisgICAgMTA3NDMsIDEwNzQ4LCAxMDc1NiwgMTA3NjYsIDEwNzcyLCAxMDc3NiwgMTA3NzksIDEwNzgzLCAxMDc4OSwgMTA3OTYsIAorICAgIDEwODAwLCAxMDgwOCwgMTA4MTcsIDEwODI1LCAxMDgzMiwgMTA4MzcsIDEwODQyLCAxMDg0NiwgMTA4NTAsIDEwODU4LCAKKyAgICAxMDg3MywgMTA4ODksIDEwODk1LCAxMDkwMywgMTA5MTIsIDEwOTIwLCAxMDkyNiwgMTA5MzAsIDEwOTM3LCAxMDk0OCwgCisgICAgMTA5NTIsIDEwOTU1LCAxMDk2MSwgOTY2OSwgMTA5NjYsIDEwOTcyLCAxMDk3OSwgMTA5ODUsIDEwOTkwLCAxMDk5NywgCisgICAgMTEwMDQsIDExMDExLCAxMTAxOCwgMTEwMjUsIDExMDMyLCAxMTAzOSwgMTEwNDYsIDExMDUxLCAxMDIwNCwgMTEwNTYsIAorICAgIDExMDYyLCAxMTA2OSwgMTEwNzYsIDExMDgxLCAxMTA4OCwgMTEwOTcsIDExMTAxLCAxMTExMywgODYzNCwgMTExMTcsIAorICAgIDExMTIwLCAxMTEyNCwgMTExMjgsIDExMTMyLCAxMTEzNiwgMTExNDIsIDExMTQ4LCAxMTE1MywgMTExNTksIDExMTY0LCAKKyAgICAxMTE2OSwgMTExNzUsIDExMTgwLCAxMTE4NSwgOTQzMSwgMTExOTAsIDExMTk0LCAxMTE5OCwgMTEyMDIsIDExMjA3LCAKKyAgICAxMTIxMiwgMTEyMTcsIDExMjI1LCAxMTIzMSwgMTEyMzYsIDExMjQwLCAxMTI0NCwgMTEyNTEsIDExMjU2LCAxMTI2NCwgCisgICAgMTEyNzEsIDExMjc2LCAxMTI4MCwgMTEyODMsIDExMjg5LCAxMTI5NiwgMTEzMDAsIDExMzAzLCAxMTMwOCwgMTEzMTIsIAorICAgIDQyNzQsIDExMzE4LCAxMTMyNywgNDYsIDExMzM1LCAxMTM0MSwgMTEzNDYsIDExMzUxLCAxMTM1OSwgMTEzNjYsIDExMzcxLCAKKyAgICA5NDQ2LCAxMTM3NywgMTEzODMsIDExMzg4LCAxMTM5MiwgMTEzOTUsIDExNDEwLCAxMTQyOSwgMTE0NDEsIDExNDU0LCAKKyAgICAxMTQ2NywgMTE0ODAsIDExNDk0LCAxMTUwNywgMTE1MjIsIDExNTI5LCA5Njc0LCAxMTUzNSwgMTE1NDksIDExNTU0LCAKKyAgICAxMTU2MCwgMTE1NjUsIDExNTczLCAxMTU3OCwgODQwMSwgMTE1ODMsIDExNTg2LCAxMTU5NCwgMTE2MDEsIDExNjA2LCAKKyAgICAxMTYxMCwgMTE2MTYsIDI5MTcsIDEwMjc4LCAxMTYyMCwgMTE2MjQsIDExNjMwLCAxMTYzNiwgMTE2NDEsIDExNjQ3LCAKKyAgICAxMTY1MiwgOTY4MywgMTE2NTgsIDExNjY0LCAxMTY2OSwgMTE2NzQsIDExNjgyLCAxMTY4OCwgMTE3MDEsIDExNzA5LCAKKyAgICAxMTcxNiwgMTE3MjIsIDk2ODksIDExNzI4LCAxMTczNiwgMTE3NDQsIDExNzUxLCAxMTc2NCwgMTE3NzcsIDExNzg5LCAKKyAgICAxMTc5OSwgMTE4MDcsIDExODE0LCAxMTgyNiwgMTE4MzMsIDExODQzLCAxMTg1MiwgMTE4NjEsIDExODY5LCAxMTg3NiwgCisgICAgMTE4ODEsIDExODg3LCA5Njk0LCAxMTg5MiwgMTE4OTgsIDExOTAzLCAxMTkwOCwgOTcwMCwgMTE5MTMsIDExOTE2LCAKKyAgICAxMTkyMywgMTE5MjksIDExOTQyLCA5MTEyLCAxMTk1MywgMTE5NTksIDExOTY4LCAxMTk3NiwgMTE5ODMsIDExOTg5LCAKKyAgICAxMjAwMCwgMTIwMDYsIDEyMDExLCAzODM2LCAxMjAxOSwgMTIwMjQsIDExNDAyLCAxMjAzMCwgMTIwMzcsIDEyMDQyLCAKKyAgICA5NzA1LCAxMjA0OCwgMTIwNTMsIDEyMDYwLCAxMjA2NiwgMTIwNzIsIDEyMDc3LCAxMjA4NSwgMTIwOTMsIDEyMTAwLCAKKyAgICAxMjEwNCwgMTIxMTYsIDEyMTMwLCAxMjE0MCwgMTIxNDUsIDEyMTQ5LCAxMjE2MCwgMTIxNjYsIDEyMTcxLCAxMjE3NiwgCisgICAgOTcxMCwgMTIxODAsIDk3MTYsIDEyMTg1LCAxMjE4OCwgMTIxOTMsIDEyMjA1LCAxMjIxMiwgMTIyMTcsIDEyMjIxLCAKKyAgICAxMjIyOSwgMTIyMzQsIDEyMjM4LCAxMjI0MywgMTIyNDcsIDEyMjU0LCAxMjI2MCwgOTcyMSwgOTYyOCwgMTIyNjcsIDI5MjIsIAorICAgIDEyLCAxMjI3NCwgMTIyNzksIDEyMjgzLCAxMjI4NywgMTIyOTMsIDEyMzAxLCAxMjMxMSwgMTIzMTYsIDEyMzIxLCAxMjMyOCwgCisgICAgMTIzMzUsIDEyMzM5LCAxMjM1MCwgMTIzNjAsIDEyMzY5LCAxMjM3OCwgMTIzOTAsIDEyMzk1LCAxMjM5OSwgMTI0MDcsIAorICAgIDEyNDIxLCAxMjQyNSwgMTI0MjgsIDEyNDM2LCAxMjQ0MywgMTI0NTEsIDEyNDU1LCAxMjQ2NiwgMTI0NzAsIDEyNDc3LCAKKyAgICAxMjQ4MiwgMTI0ODYsIDEyNDkyLCAxMjQ5NywgMTI1MDMsIDEyNTA4LCAxMjUxMywgMTI1MTcsIDEyNTIzLCAxMjUyOCwgCisgICAgMTI1MzksIDEyNTQzLCAxMjU0NiwgMTI1NTIsIDEyNTU3LCAxMjU2MywgMTI1NjksIDEyNTc2LCAxMjU4NywgMTI1OTcsIAorICAgIDEyNjA3LCAxMjYxNiwgMTI2MjMsIDEyNjMyLCAxMjYzNiwgOTczMSwgOTczOCwgOTc0NCwgOTc0OSwgMTI2NDIsIDEyNjQ4LCAKKyAgICAxMjY1NCwgMTI2NTksIDEyNjY1LCA5NzUzLCAxMjY3MSwgMTI2NzQsIDEyNjgxLCAxMjY4NiwgMTI3MDEsIDEyNzE3LCAKKyAgICAxMjczMiwgMTI3NDAsIDEyNzQ2LCAxMjc1MSwgOTUwLCAzNzQsIDEyNzU2LCAxMjc2NCwgMTI3NzEsIDEyNzc3LCAxMjc4MiwgCisgICAgMTI3ODcsIDk3NTgsIDEyNzg5LCAxMjc5MywgMTI3OTgsIDEyODAyLCAxMjgxMiwgMTI4MTcsIDEyODIxLCAxMjgzMCwgCisgICAgMTI4MzQsIDEyODM3LCAxMjg0NCwgOTc2NywgMTI4NDksIDEyODUyLCAxMjg2MCwgMTI4NjcsIDEyODc1LCAxMjg3OSwgCisgICAgMTI4ODMsIDEyODkwLCAxMjg5OSwgMTI5MDYsIDEyOTAyLCAxMjkxMywgMTI5MTcsIDEyOTIzLCAxMjkyNywgMTI5MzEsIAorICAgIDEyOTM1LCAxMjk0MSwgMTI5NTEsIDEyOTU5LCAxMjk2NiwgMTI5NzAsIDEyOTc4LCAxMjk4MiwgMTI5ODksIDEyOTkzLCAKKyAgICAxMjk5OCwgMTMwMDIsIDEzMDA5LCAxMzAxNSwgMTMwMjMsIDEzMDI5LCAxMzAzNCwgMTMwNDQsIDEzMDQ5LCAxMzA1NCwgCisgICAgMTMwNTgsIDEzMDYyLCAxMzA3MCwgNDEyNCwgMTMwNzgsIDEzMDgzLCA5NzcyLCAxMzA4NywgMTMwOTEsIDEzMDk0LCAKKyAgICAxMzEwMiwgMTMxMDksIDEzMTEzLCA2Mjk4LCAxMzExNywgMTMxMjIsIDEzMTI3LCAxMzEzMSwgMTMxNDIsIDEzMTUyLCAKKyAgICAxMzE1NywgMTMxNjMsIDEzMTY4LCAxMzE3MiwgMTMxNzUsIDEzMTgzLCAxMzE4OCwgMTMxOTMsIDEzMjAwLCAxMzIwNSwgCisgICAgOTc3NywgMTMyMTAsIDEzMjE0LCAxMzIyMSwgMTczNywgNjQ1NiwgMTMyMjYsIDEzMjMxLCAxMzIzNiwgMTMyNDEsIDEzMjQ3LCAKKyAgICAxMzI1MiwgMTMyNTgsIDEzMjYzLCAxMzI2OCwgMTMyNzMsIDEzMjc4LCAxMzI4MywgMTMyODgsIDEzMjkzLCAxMzI5OCwgCisgICAgMTMzMDMsIDEzMzA4LCAxMzMxMywgMTMzMTgsIDEzMzIzLCAxMzMyOCwgMTMzMzMsIDEzMzM4LCAxMzM0NCwgMTMzNDksIAorICAgIDEzMzU0LCAxMzM1OSwgMTMzNjQsIDEzMzY5LCAxMzM3NSwgMTMzODAsIDEzMzg1LCAxMzM5MSwgMTMzOTYsIDEzNDAyLCAKKyAgICAxMzQwNywgMTM0MTMsIDEzNDE4LCAxMzQyMywgMTM0MjgsIDEzNDMzLCAxMzQzOSwgMTM0NDQsIDEzNDQ5LCAxMzQ1NCwgCisgICAgOTA5LCAxMTIsIDEzNDYyLCAxMzQ2NiwgMTM0NzEsIDEzNDc2LCAxMzQ4MCwgMTM0ODQsIDEzNDg4LCAxMzQ5MywgMTM0OTcsIAorICAgIDEzNTAyLCAxMzUwNiwgMTM1MDksIDEzNTEzLCAxMzUxNywgMTM1MjMsIDEzNTI4LCAxMzUzOCwgMTM1NDQsIDEzNTUyLCAKKyAgICAxMzU1OCwgMTM1NjIsIDEzNTY2LCAxMzU3MywgMTM1ODEsIDEzNTkwLCAxMzYwMSwgMTM2MTEsIDEzNjE4LCAxMzYyNSwgCisgICAgMTM2MjksIDEzNjM4LCAxMzY0NywgMTM2NTUsIDEzNjY0LCAxMzY3MywgMTM2ODIsIDEzNjkxLCAxMzcwMSwgMTM3MTEsIAorICAgIDEzNzIxLCAxMzczMSwgMTM3NDEsIDEzNzUwLCAxMzc2MCwgMTM3NzAsIDEzNzgwLCAxMzc5MCwgMTM4MDAsIDEzODEwLCAKKyAgICAxMzgyMCwgMTM4MjksIDEzODM5LCAxMzg0OSwgMTM4NTksIDEzODY5LCAxMzg3OSwgMTM4ODksIDEzODk4LCAxMzkwOCwgCisgICAgMTM5MTgsIDEzOTI4LCAxMzkzOCwgMTM5NDgsIDEzOTU4LCAxMzk2OCwgMTM5NzgsIDEzOTg4LCAxMzk5NywgMTQwMDcsIAorICAgIDE0MDE3LCAxNDAyNywgMTQwMzcsIDE0MDQ3LCAxNDA1NywgMTQwNjcsIDE0MDc3LCAxNDA4NywgMTQwOTcsIDE0MTA2LCAKKyAgICAxMjM3LCAxNDExMiwgMTQxMTUsIDE0MTE5LCAxNDEyNCwgMTQxMzEsIDE0MTM3LCAxNDE0MiwgMTQxNDYsIDE0MTUxLCAKKyAgICAxNDE2MCwgMTQxNjgsIDE0MTczLCAxNDE3NywgMTQxODEsIDE0MTg3LCAxNDE5MiwgMTQxOTgsIDk3ODYsIDE0MjAzLCAKKyAgICAxNDIwOCwgMTQyMTcsIDk3OTYsIDE0MjIyLCAxNDIyNSwgMTQyMzEsIDE0MjM5LCA5ODAxLCAxNDI0NiwgMTQyNTAsIAorICAgIDE0MjU0LCAxNDI1OSwgMTQyNjMsIDE0MjczLCAxNDI3OSwgMTQyODUsIDE0MjkwLCAxNDI5OSwgMTQzMDcsIDE0MzE0LCAKKyAgICAxNDMyMSwgMTQzMjYsIDE0MzMzLCAxNDMzOCwgMTQzNDIsIDE0MzQ1LCAxNDM1NiwgMTQzNjYsIDE0Mzc1LCAxNDM4MywgCisgICAgMTQzOTQsIDE0NDA2LCAxNDQxNiwgMTQ0MjEsIDE0NDI1LCAxNDQzMCwgMTQ0MzUsIDE0NDM5LCAxNDQ0NSwgMTQ0NTMsIAorICAgIDE0NDYwLCAxNDQ3MSwgMTQ0NzYsIDE0NDg2LCAxNDQ5NSwgMTQ0OTksIDE0NTAyLCAxNDUwOSwgMTQ1MTksIDE0NTI4LCAKKyAgICAxNDUzNSwgMTQ1MzksIDE0NTQ2LCAxNDU1MiwgMTQ1NTcsIDE0NTYyLCAxNDU2NiwgMTQ1NzUsIDE0NTgwLCAxNDU4NCwgCisgICAgMTQ1OTAsIDE0NTk0LCAxNDU5OSwgMTQ2MDMsIDE0NjEwLCAxNDYxNywgMTQ2MjEsIDE0NjMwLCAxNDYzOCwgMTQ2NDYsIAorICAgIDE0NjUzLCAxNDY2MSwgMTQ2NzMsIDE0Njg0LCAxNDY5NCwgMTQ3MDEsIDE0NzA3LCAxNDcxNiwgMTQ3MjcsIDE0NzM2LCAKKyAgICAxNDc0OCwgMTQ3NjAsIDE0NzcyLCAxNDc4MiwgMTQ3OTEsIDE0ODAwLCAxNDgwOCwgMTQ4MTUsIDE0ODI0LCAxNDgzMiwgCisgICAgMTQ4MzYsIDE0ODQxLCAxNDg0NywgMTQ4NTMsIDE0ODU4LCAxNDg2MywgODA5MywgMTQ4NjcsIDE0ODY5LCAxNDg3MywgCisgICAgMTQ4NzgsIDE0ODg0LCAxNDg5MCwgMTQ4OTksIDE0OTAzLCAxNDkwOSwgMTQ5MTcsIDE0OTI0LCAxNDkzMywgMTQ5NDIsIAorICAgIDE0OTUxLCAxNDk2MCwgMTQ5NjksIDE0OTc4LCAxNDk4NywgMTQ5OTYsIDE1MDA2LCAxNTAxNiwgMTUwMjUsIDE1MDMxLCAKKyAgICAxNTAzOCwgMTUwNDUsIDE1MDUxLCAxNTA2NSwgMTUwNzEsIDE1MDc4LCAxNTA4NiwgMTUwOTUsIDE1MTAzLCAxNTEwOSwgCisgICAgMTUxMTgsIDE1MTI3LCAxNTEzOCwgMTUxNDgsIDE1MTU2LCAxNTE2MywgMTUxNzEsIDE1MTgwLCAxNTE5MywgMTUyMDIsIAorICAgIDE1MjEwLCAxNTIxNywgMTUyMzAsIDE1MjM2LCAxNTI0MiwgMTUyNTIsIDE1MjYxLCAxNTI3MCwgMTUyNzUsIDE1Mjc5LCAKKyAgICAxNTI4NSwgMTUyOTEsIDE1Mjk2LCAxNTMwMywgMTUzMTAsIDk0NDUsIDE1MzE1LCAxNTMyMCwgMTUzMjcsIDE1MzM1LCAKKyAgICAxNTM0MCwgMTUzNDcsIDE1MzUyLCAxNTM2NCwgMTM1MTksIDE1MzY5LCAxNTM3NywgMTUzODMsIDE1Mzg4LCAxNTM5NiwgCisgICAgMTU0MDQsIDE1NDExLCAxNTQxOSwgMTU0MjUsIDE1NDMzLCAxNTQ0MSwgMTU0NDcsIDE1NDUyLCAxNTQ1OCwgMTU0NjUsIAorICAgIDE1NDcxLCAxNTQ3NiwgMTU0ODAsIDE1NDkxLCAxNTQ5OSwgMTU1MDUsIDE1NTEwLCAxNTUxNywgMTU1MjYsIDE1NTMyLCAKKyAgICAxNTUzNywgMTU1NDUsIDE1NTU0LCAxNTU2OCwgNDA2OCwgMTU1NzIsIDE1NTc3LCAxNTU4MiwgMTU1ODgsIDE1NTkzLCAKKyAgICAxNTU5OCwgMTU2MDIsIDE1NjA3LCAxNTYxMiwgMTU2MTcsIDgwOTIsIDE1NjIyLCAxNTYyNywgMTU2MzIsIDE1NjM3LCAKKyAgICAxNTY0MiwgMTU2NDYsIDE1NjUxLCAxNTY1NiwgMTU2NjEsIDE1NjY2LCAxNTY3MiwgMTU2NzgsIDE1NjgzLCAxNTY4NywgCisgICAgMTU2OTMsIDE1Njk4LCAxNTcwMywgMTU3MDgsIDk4MDUsIDE1NzEzLCAxNTcxOCwgMTU3MjMsIDE1NzI4LCAxNTczMywgCisgICAgMTU3NTAsIDE1NzY4LCAxNTc4MCwgMTU3OTMsIDE1ODEwLCAxNTgyNiwgMTU4NDMsIDE1ODUzLCAxNTg3MiwgMTU4ODMsIAorICAgIDE1ODk0LCAxNTkwNSwgMTU5MTYsIDE1OTI4LCAxNTkzOSwgMTU5NTAsIDE1OTY3LCAxNTk3OCwgMTU5ODksIDE1OTk0LCAKKyAgICA5ODEwLCAxNTk5OSwgMTYwMDMsIDI0MjAsIDE2MDA3LCAxNjAxMCwgMTYwMTYsIDE2MDI0LCAxNjAzMiwgMTYwNDEsIAorICAgIDE2MDQ4LCAxNjA1MywgMTYwNjEsIDE2MDY5LCAxNjA3NiwgMTYwODAsIDE2MDg1LCAxNjA5MSwgMTYwOTgsIDE2MTA2LCAKKyAgICAxNjExMywgMTYxMjUsIDE2MTMyLCAxNjEzOCwgMTYxNDYsIDE2MTUxLCAxNjE1NywgMTI2OTUsIDE2MTYzLCAxNjE3MiwgCisgICAgMTYxNzgsIDE2MTgzLCAxNjE5MSwgMTYyMDAsIDE2MjA4LCAxNjIxNSwgMTYyMjEsIDE2MjI5LCAxNjIzNiwgMTYyNDIsIAorICAgIDE2MjQ4LCAxNjI1NSwgMTYyNjIsIDE2MjY4LCAxNjI3NCwgMTYyODMsIDE2MjkxLCAxNjMwMSwgMTYzMDgsIDE2MzE0LCAKKyAgICAxNjMyMiwgMTYzMjgsIDE2MzM2LCAxNjM0NCwgMTYzNTEsIDE2MzY0LCAxNjM3MSwgMTYzODAsIDE2Mzg5LCAxNjM5OCwgCisgICAgMTY0MDYsIDE2NDE2LCAxNjQyMywgMTY0MjgsIDM3MjcsIDE2NDM1LCAxNjQ0MCwgMTM1MywgMTY0NDQsIDE1NjIzLCAKKyAgICAxNjQ0OCwgMTY0NTQsIDE2NDU4LCAxNjQ2NiwgMTY0NzgsIDE2NDgzLCAxNjQ5MCwgMTY0OTYsIDE2NTAxLCAxNjUwOCwgCisgICAgMTU2MjgsIDE2NTEyLCAxNjUxNiwgMTY1MjAsIDE1NjMzLCAxNjUyNCwgMTU2MzgsIDE2NTI4LCAxNjUzNSwgMTY1NDAsIAorICAgIDE2NTQ0LCAxNjU1MSwgMTY1NTUsIDE2NTYzLCAxNjU3MCwgMTY1NzUsIDE2NTc5LCAxNjU4NiwgMTY2MDMsIDE2NjEyLCAKKyAgICAxNjYxNiwgMTY2MTksIDE2NjI3LCAxNjYzMywgMTY2MzgsIDM4MDUsIDE2NjQyLCAxNjY0NCwgMTY2NTIsIDE2NjU5LCAKKyAgICAxNjY2OSwgMTY2ODEsIDE2Njg2LCAxNjY5MCwgMTY2OTYsIDE2NzAxLCAxNjcwNSwgMTY3MTEsIDE2NzE2LCAxNjcyMiwgCisgICAgMTY3MjUsIDE2NzMyLCAxNjc0MCwgMTY3NDcsIDE2NzUzLCAxNjc1OCwgMTY3NjQsIDE2NzY5LCAxNjc3NiwgMTY3ODIsIAorICAgIDE2Nzg3LCAxNjc5NCwgMTY3OTksIDE2ODAzLCAxNjgwOSwgMTY4MTMsIDE2ODIwLCAxNjgyNiwgMTY4MzEsIDE2ODM3LCAKKyAgICAxNjg0NSwgMTY4NTMsIDE2ODYwLCAxNjg2NiwgMTY4NzEsIDE2ODc3LCAxNjg4MywgMTY4OTEsIDE2ODk5LCAxNjkwNSwgCisgICAgMTY5MTEsIDE2OTE2LCAxNjkyMywgMTY5MjgsIDE2OTMyLCAxNjkzOCwgMTY5NDMsIDE2OTUwLCAxNjk1NSwgMTY5NjEsIAorICAgIDE2OTY0LCAxNjk3MCwgMTY5NzYsIDE2OTc5LCAxNjk4MywgMTY5ODcsIDE2OTk5LCAxNzAwNSwgMTcwMTAsIDE3MDE3LCAKKyAgICAxNzAyMywgMTcwMjksIDE3MDQwLCAxNzA1MCwgMTcwNTksIDE3MDY3LCAxNzA3NCwgMTcwODUsIDE3MDk1LCAxNzEwNSwgCisgICAgMTcxMTMsIDE3MTE2LCAxNTY1MiwgMTcxMjEsIDE3MTI2LCAxNTY1NywgMTU3OTgsIDE3MTM0LCAxNzE0NywgMTcxNjIsIAorICAgIDE3MTczLCAxNTgxNSwgMTcxOTEsIDE3MjA0LCAxNzIxNywgMTcyMjgsIDExNDE3LCAxNzIzOSwgMTcyNTIsIDE3MjcxLCAKKyAgICAxNzI4MiwgMTcyOTMsIDE3MzA0LCAyNjg4LCAxNzMxNywgMTczMjEsIDE3MzI5LCAxNzM0MCwgMTczNDgsIDE3MzYzLCAKKyAgICAxNzM3OCwgMTczODksIDE3Mzk2LCAxNzQwMiwgMTc0MTAsIDE3NDE0LCAxNzQyMCwgMTc0MjMsIDE3NDM2LCAxNzQ0OCwgCisgICAgMTc0NTgsIDE3NDY2LCAxNzQ3MywgMTc0ODEsIDE3NDkxLCAxNzQ5NiwgMTc1MDMsIDE3NTA4LCAxNzUxNSwgMTc1MjYsIAorICAgIDE3NTM2LCAxNzU0MiwgMTc1NDcsIDE3NTUyLCAxNTY2MiwgMTc1NTYsIDE3NTYyLCAxNzU2OCwgMTc1NzMsIDE3NTc4LCAKKyAgICAxNzU4MywgMTc1ODcsIDE1NjY3LCAxNTY3MywgMTc1OTEsIDE1Njc5LCAxNzU5NiwgMTc2MDQsIDE3NjA5LCAxNzYxMywgCisgICAgMTc2MjEsIDE3NjMwLCAxNzYzNywgMTc2NDEsIDk2NDksIDE3NjQ1LCAxNzY0NywgMTc2NTIsIDE3NjU3LCAxNzY2MywgCisgICAgMTc2NjgsIDE3NjczLCAxNzY3OCwgMTc2ODMsIDE3Njg3LCAxNzY5MywgMTc2OTksIDE3NzA0LCAxNzcxMCwgMTc3MTUsIAorICAgIDE3NzIwLCAxNzcyNCwgMTc3MzAsIDE3NzM1LCAxNzc0MCwgMTc3NDUsIDE3NzU3LCAxNzc2MiwgMTc3NjgsIDE3NzczLCAKKyAgICAxNzc3OCwgMTc3ODQsIDE3NzkwLCAxNzc5NSwgMTc4MDAsIDE3ODA1LCAxNzgxMiwgMTc4MTgsIDE3ODI5LCAxNzgzNiwgCisgICAgMTc4NDEsIDE3ODQ1LCAxNzg0OSwgMTc4NTIsIDE3ODYwLCAxNzg2NSwgMTc4NzIsIDE3ODc5LCAxNzg4NSwgMTc4OTAsIAorICAgIDE3ODk1LCAxNzkwMCwgMTc5MDcsIDE3OTE3LCAxNzkyNSwgMTc5MzAsIDE3OTM3LCAxNzk0MywgMTc5NTIsIDE3OTYyLCAKKyAgICAxNzk3MiwgMTc5ODYsIDE4MDAwLCAxODAxNCwgMTgwMjgsIDE4MDQzLCAxODA1OCwgMTgwNzUsIDE4MDkzLCAxODEwNiwgCisgICAgMTgxMTIsIDE4MTE3LCAxODEyMiwgMTgxMjYsIDE4MTM0LCAxODEzOSwgMTgxNDcsIDE4MTUzLCAxODE1OSwgMTgxNjQsIAorICAgIDE4MTY5LCAxODE3MywgMTgxNzgsIDE4MTgyLCAxODE4NywgMTgxOTEsIDE4MjAyLCAxODIwOCwgMTgyMTMsIDE4MjE4LCAKKyAgICAxODIyNSwgMTgyMzAsIDE4MjM0LCAzNjkwLCAxODIzOSwgMTgyNDUsIDE4MjUyLCAxNTY4OCwgMTgyNTgsIDE4MjYyLCAKKyAgICAxODI2OCwgMTgyNzMsIDE4Mjc4LCAxODI4MiwgMTgyODgsIDE4MjkzLCAxODI5OCwgMTgzMDUsIDE4MzEwLCAxNDI3NSwgCisgICAgMTgzMTQsIDE4MzE5LCAxODMyMywgMTgzMjgsIDE4MzM0LCAxODM0MCwgMTgzNDcsIDE4MzU3LCAxODM2NSwgMTgzNzIsIAorICAgIDE4Mzc3LCAxODM4MSwgMTgzOTAsIDE4Mzk4LCAxODQwNSwgMTg0MTIsIDE4NDE4LCAxODQyMywgMTg0MjksIDE4NDM0LCAKKyAgICAxODQzOSwgMTg0NDUsIDE4NDUwLCAxODQ1NiwgMTg0NjEsIDE4NDY3LCAxODQ3MywgMTg0ODAsIDE4NDg2LCAxODQ5MSwgCisgICAgMTg0OTYsIDk4NzUsIDE4NTA1LCAxODUwOCwgMTg1MTYsIDE4NTIyLCAxODUyNywgMTg1MzIsIDE4NTQyLCAxODU0OSwgCisgICAgMTg1NTUsIDE4NTYwLCAxODU2NSwgMTg1NzEsIDE4NTc2LCAxODU4MiwgMTg1ODcsIDE4NTkzLCAxODU5OSwgMTg2MDQsIAorICAgIDE4NjEyLCAxODYxOSwgMTg2MjQsIDE4NjI5LCAxODYzNSwgMTg2NDAsIDE4NjQ0LCAxODY1MywgMTg2NjQsIDE4NjcxLCAKKyAgICAxODY3OSwgMTg2ODYsIDE4NjkxLCAxODY5NiwgMTg3MDIsIDE4NzA3LCAxODcxNSwgMTg3MjEsIDE4NzI3LCAxODczNCwgCisgICAgMTg3NDAsIDE4NzQ1LCAxODc0OSwgMTg3NTUsIDE4NzYwLCAxODc2NSwgMTg3NjksIDE4Nzc0LCAxNDI2LCA4MTE3LCAyOTM2LCAKKyAgICAxODc3OCwgMTg3ODIsIDE4Nzg2LCAxODc5MCwgMTg3OTQsIDE4Nzk4LCAxODgwMSwgMTg4MDYsIDE4ODEzLCAxODgyMSwgCisgICAgMTU2OTksIDE4ODI4LCAxODgzOCwgMTg4NDYsIDE4ODUzLCAxODg2MSwgMTg4NzEsIDE4ODgwLCA5MjIwLCAxODg5MywgCisgICAgMTg4OTgsIDE4OTAzLCAxODkxMSwgMTg5MTgsIDE0MzcxLCAxNDM4MCwgMTg5MjUsIDE4OTM1LCAxODk1MCwgMTg5NTYsIAorICAgIDE4OTYzLCAxODk3MCwgMTg5NzYsIDE4OTgyLCAxODk5MywgMTkwMDEsIDE5MDA5LCAxOTAxOSwgMTkwMjksIDE1NzA0LCAKKyAgICAxOTAzOCwgMTkwNDQsIDE5MDUwLCAxOTA1OCwgMTkwNjYsIDE5MDcxLCAxOTA4MCwgMTkwODgsIDE5MTAwLCAxOTExMCwgCisgICAgMTkxMjAsIDE5MTMwLCAxOTEzOSwgMTkxNTEsIDE5MTYxLCAxOTE3MSwgMTkxODIsIDE5MTg3LCAxOTE5OSwgMTkyMTEsIAorICAgIDE5MjIzLCAxOTIzNSwgMTkyNDcsIDE5MjU5LCAxOTI3MSwgMTkyODMsIDE5Mjk1LCAxOTMwNywgMTkzMTgsIDE5MzMwLCAKKyAgICAxOTM0MiwgMTkzNTQsIDE5MzY2LCAxOTM3OCwgMTkzOTAsIDE5NDAyLCAxOTQxNCwgMTk0MjYsIDE5NDM4LCAxOTQ0OSwgCisgICAgMTk0NjEsIDE5NDczLCAxOTQ4NSwgMTk0OTcsIDE5NTA5LCAxOTUyMSwgMTk1MzMsIDE5NTQ1LCAxOTU1NywgMTk1NjksIAorICAgIDE5NTgwLCAxOTU5MiwgMTk2MDQsIDE5NjE2LCAxOTYyOCwgMTk2NDAsIDE5NjUyLCAxOTY2NCwgMTk2NzYsIDE5Njg4LCAKKyAgICAxOTcwMCwgMTk3MTEsIDE5NzIzLCAxOTczNSwgMTk3NDcsIDE5NzU5LCAxOTc3MSwgMTk3ODMsIDE5Nzk1LCAxOTgwNywgCisgICAgMTk4MTksIDE5ODMxLCAxOTg0MiwgMTk4NTQsIDE5ODY2LCAxOTg3OCwgMTk4OTAsIDE5OTAyLCAxOTkxNCwgMTk5MjYsIAorICAgIDE5OTM4LCAxOTk1MCwgMTk5NjIsIDE5OTczLCAxOTk4NSwgMTk5OTcsIDIwMDA5LCAyMDAyMSwgMjAwMzMsIDIwMDQ1LCAKKyAgICAyMDA1NywgMjAwNjksIDIwMDgxLCAyMDA5MywgMjAxMDQsIDIwMTE2LCAyMDEyOCwgMjAxNDAsIDIwMTUyLCAyMDE2NSwgCisgICAgMjAxNzgsIDIwMTkxLCAyMDIwNCwgMjAyMTcsIDIwMjMwLCAyMDI0MywgMjAyNTUsIDIwMjY4LCAyMDI4MSwgMjAyOTQsIAorICAgIDIwMzA3LCAyMDMyMCwgMjAzMzMsIDIwMzQ2LCAyMDM1OSwgMjAzNzIsIDIwMzg1LCAyMDM5NywgMjA0MTAsIDIwNDIzLCAKKyAgICAyMDQzNiwgMjA0NDksIDIwNDYyLCAyMDQ3NSwgMjA0ODgsIDIwNTAxLCAyMDUxNCwgMjA1MjcsIDIwNTM5LCAyMDU1MiwgCisgICAgMjA1NjUsIDIwNTc4LCAyMDU5MSwgMjA2MDQsIDIwNjE3LCAyMDYzMCwgMjA2NDMsIDIwNjU2LCAyMDY2OSwgMjA2ODEsIAorICAgIDIwNjk0LCAyMDcwNywgMjA3MjAsIDIwNzMzLCAyMDc0NiwgMjA3NTksIDIwNzcyLCAyMDc4NSwgMjA3OTgsIDIwODExLCAKKyAgICAyMDgyMywgMjA4MzYsIDIwODQ5LCAyMDg2MiwgMjA4NzUsIDIwODg4LCAyMDkwMSwgMjA5MTQsIDIwOTI3LCAyMDk0MCwgCisgICAgMjA5NTMsIDIwOTY1LCAyMDk3NiwgMjA5ODksIDIxMDAyLCAyMTAxNSwgMjEwMjgsIDIxMDQxLCAyMTA1NCwgMjEwNjcsIAorICAgIDIxMDgwLCAyMTA5MywgMjExMDYsIDIxMTE4LCAyMTEzMSwgMjExNDQsIDIxMTU3LCAyMTE3MCwgMjExODMsIDIxMTk2LCAKKyAgICAyMTIwOSwgMjEyMjIsIDIxMjM1LCAyMTI0OCwgMjEyNjAsIDIxMjczLCAyMTI4NiwgMjEyOTksIDIxMzEyLCAyMTMyNSwgCisgICAgMjEzMzgsIDIxMzUxLCAyMTM2NCwgMjEzNzcsIDIxMzkwLCAyMTQwMiwgMjE0MTUsIDIxNDI4LCAyMTQ0MSwgMjE0NTQsIAorICAgIDIxNDY3LCAyMTQ4MCwgMjE0OTMsIDIxNTA2LCAyMTUxOSwgMjE1MzIsIDIxNTQ0LCAyMTU1NywgMjE1NzAsIDIxNTgzLCAKKyAgICAyMTU5NiwgMjE2MDksIDIxNjIyLCAyMTYzNSwgMjE2NDgsIDIxNjYxLCAyMTY3NCwgMjE2ODYsIDIxNjk5LCAyMTcxMiwgCisgICAgMjE3MjUsIDIxNzM4LCAyMTc1MSwgMjE3NjQsIDIxNzc3LCAyMTc5MCwgMjE4MDMsIDIxODE2LCAyMTgyOCwgMjE4NDEsIAorICAgIDIxODU0LCAyMTg2NywgMjE4ODAsIDIxODkzLCAyMTkwNiwgMjE5MTksIDIxOTMyLCAyMTk0NSwgMjE5NTgsIDIxOTcwLCAKKyAgICAyMTk4MywgMjE5OTYsIDIyMDA5LCAyMjAyMiwgMjIwMzUsIDIyMDQ4LCAyMjA2MSwgMjIwNzQsIDIyMDg3LCAyMjEwMCwgCisgICAgMjIxMTIsIDIyMTI1LCAyMjEzOCwgMjIxNTEsIDIyMTY0LCAyMjE3NywgMjIxOTAsIDIyMjAzLCAyMjIxNiwgMjIyMjksIAorICAgIDIyMjQyLCAyMjI1NCwgMjIyNjcsIDIyMjgwLCAyMjI5MywgMjIzMDYsIDIyMzE5LCAyMjMzMiwgMjIzNDUsIDIyMzU4LCAKKyAgICAyMjM3MSwgMjIzODQsIDIyMzk2LCAyMjQwNywgMjI0MTYsIDIyNDI0LCAyMjQzMiwgMjI0MzksIDIyNDQ1LCAyMjQ0OSwgCisgICAgMjI0NTUsIDIyNDYxLCAyMjQ2OSwgMjI0NzQsIDIyNDgwLCAyMjQ4NSwgMjI0ODksIDIyNDk4LCA5NjU0LCAyMjUwOSwgCisgICAgMjI1MTYsIDIyNTI0LCAyMjUzMSwgMjI1MzgsIDExOTM2LCAyMjU0NSwgMjI1NTIsIDIyNTYxLCAyMjU2NiwgMjI1NzEsIAorICAgIDgxNDUsIDIyNTc4LCAyMjU4MywgMjI1ODYsIDIyNTkxLCAyMjU5OSwgMjI2MDYsIDIyNjEzLCAyMjYyMCwgMjI2MjYsIAorICAgIDIyNjM1LCAyMjY0NCwgMjI2NTMsIDIyNjU5LCAyMjY2OCwgMjI2NzIsIDIyNjc4LCAyMjY4MywgMjI2OTMsIDIyNzAwLCAKKyAgICAyMjcwNiwgMjI3MTQsIDIyNzIwLCAyMjcyNywgMjI3MzcsIDIyNzQ2LCAyMjc1MCwgMjI3NTcsIDIyNzYxLCAyMjc2NiwgCisgICAgMjI3NzIsIDIyNzgwLCAyMjc4NCwgMjI3OTQsIDE1NzE0LCAyMjgwMywgMjI4MDksIDIyODEzLCAyMjgyMiwgMjI4MzIsIAorICAgIDE1NzE5LCAyMjgzOCwgMjI4NDUsIDIyODU2LCAyMjg2NCwgMjI4NzQsIDIyODgzLCAyMjg5MSwgOTQxMCwgMjI4OTksIAorICAgIDIyOTA0LCAyMjkxMCwgMjI5MTUsIDIyOTE5LCAyMjkyMywgMjI5MjcsIDEwMzc5LCAyMjkzMiwgMjI5NDAsIDIyOTQ3LCAKKyAgICAyMjk1NiwgMjI5NjMsIDIyOTcwLCAyMjk3NiwgMTE4NTYsIDIyOTgzLCAyMjk4OSwgMjI5OTMsIDIyOTk5LCAyMzAwNiwgCisgICAgMjMwMTIsIDIzMDIwLCAyMzAyNiwgMjMwMzMsIDIzMDM5LCAyMzA0NSwgMjMwNTQsIDIzMDU4LCAyMzA2NiwgMjMwNzUsIAorICAgIDIzMDgyLCAyMzA4NywgMjMwOTEsIDIzMTAyLCAyMzEwNywgMjMxMTIsIDIzMTE3LCAyMzEzMCwgODM0OSwgMjMxMzQsIAorICAgIDIzMTQwLCAyMzE0NSwgMjMxNTMsIDIzMTU3LCAyMzE2NCwgMjMxNzMsIDIzMTc4LCAxNTk5MCwgMjMxODYsIDIzMTkwLCAKKyAgICAyMzIwMiwgMjMyMDcsIDIzMjExLCAyMzIxNCwgMjMyMjAsIDIzMjI2LCAyMzIzMiwgMjMyMzcsIDIzMjQxLCAyMzI0NCwgCisgICAgMjMyNTUsIDIzMjYwLCA5OTI2LCAyMzI2NywgMjMyNzIsIDEyNDMsIDk5MzEsIDIzMjc3LCAyMzI4MiwgMjMyODcsIDIzMjkyLCAKKyAgICAyMzI5NywgMjMzMDIsIDIzMzA3LCAyMzMxMiwgMjMzMTcsIDIzMzIyLCAyMzMyNywgMjMzMzIsIDIzMzM4LCAyMzM0MywgCisgICAgMjMzNDgsIDIzMzUzLCAyMzM1OCwgMjMzNjMsIDIzMzY4LCAyMzM3MywgMjMzNzgsIDIzMzgzLCAyMzM4OSwgMjMzOTUsIAorICAgIDIzNDAwLCAyMzQwNSwgMjM0MTAsIDIzNDE1LCAyMzQyMCwgMjM0MjUsIDIzNDMwLCAyMzQzNSwgMjM0NDAsIDIzNDQ2LCAKKyAgICAyMzQ1MSwgMjM0NTYsIDIzNDYxLCAyMzQ2NywgMjM0NzMsIDIzNDc4LCAyMzQ4MywgMjM0ODgsIDIzNDkzLCAyMzQ5OCwgCisgICAgMjM1MDMsIDIzNTA4LCAyMzUxMywgMjM1MTksIDIzNTI0LCAyMzUyOSwgMjM1MzQsIDIzNTM5LCAyMzU0NSwgMjM1NTAsIAorICAgIDIzNTU1LCAyMzU1OSwgMTM0LCAyMzU2NywgMjM1NzEsIDIzNTc1LCAyMzU3OSwgMjM1ODQsIDIzNTg4LCAxNDI4MSwgMjM0NiwgCisgICAgMjM1OTIsIDIzNTk3LCAyMzYwMSwgMjM2MDYsIDIzNjEwLCAyMzYxNSwgMjM2MTksIDIzNjI1LCAyMzYzMCwgMjM2MzQsIAorICAgIDIzNjM4LCAyMzY0NiwgMjM2NTAsIDIzNjU0LCAyMzY1OSwgMjM2NjQsIDIzNjY4LCAyMzY3NCwgMjM2NzksIDIzNjgzLCAKKyAgICAyMzY4OCwgMjM2OTMsIDIzNjk3LCAyMzcwNCwgMjM3MTEsIDIzNzE4LCAyMzcyMiwgMjM3MjYsIDIzNzMxLCAyMzczNSwgCisgICAgMjM3MzgsIDIzNzQ0LCAyMzc1NywgMjM3NjIsIDIzNzY4LCAyMzc3NywgMjM3ODIsIDEwMTUxLCAyMzc4NywgMjM3OTYsIAorICAgIDIzODAxLCAyMzgwNCwgMjc1MSwgMjc1NiwgMjM4MDgsIDIzODE0LCAyMzgyMCwgNzUzOCwgMjM4MjUsIDIzODMwLCAyMzgzNSwgCisgICAgMjM4NDEsIDIzODQ2LCAxNTEzNCwgMjM4NTEsIDIzODU2LCAyMzg2MSwgMjM4NjYsIDIzODcyLCAyMzg3NywgMjM4ODIsIAorICAgIDIzODg4LCAyMzg5MywgMjM4OTcsIDIzOTAyLCAyMzkwNywgMjM5MTIsIDIzOTE3LCAyMzkyMiwgMjM5MjYsIDIzOTMxLCAKKyAgICAyMzkzNSwgMjM5NDAsIDIzOTQ1LCAyMzk1MCwgMjM5NTUsIDIzOTU5LCAyMzk2NCwgMjM5NjgsIDIzOTczLCAyMzk3OCwgCisgICAgMjM5ODMsIDIzODk4LCAyOTQ1LCAyMzkwMywgMjM5ODgsIDIzOTk2LCAyNDAwMywgMTA0NzMsIDI0MDE1LCAyNDAyMywgCisgICAgMjQwMzMsIDI0MDUxLCAyNDA3MCwgMjQwNzksIDI0MDg3LCAyMzkwOCwgMjQwOTQsIDI0MDk5LCAyNDEwNywgMjM5MTMsIAorICAgIDI0MTEyLCAyNDExNywgMjQxMjUsIDI0MTMwLCAyMzkxOCwgMjQxMzUsIDI0MTQzLCAyNDE0OCwgMjQxNTIsIDI0MTU5LCAKKyAgICAyNDE2NSwgMjQxNzQsIDI0MTgyLCAyNDE4NiwgMjQxODksIDI0MTk2LCAyNDIwMCwgMjQyMDQsIDI0MjA5LCAyNDIxNSwgCisgICAgMjQyMjIsIDI0MjI3LCA5NDM3LCAxNzQyLCAxNzQ3LCAyNDIzMSwgMjQyMzcsIDI0MjQzLCAyNDI0OCwgMjQyNTIsIDI0MjU2LCAKKyAgICAyNDI2MCwgMjQyNjQsIDI0MjY4LCAyNDI3MiwgMjQyNzYsIDI0MjgwLCAyNDI4MywgMjQyODksIDI0Mjk2LCAyNDMwNCwgCisgICAgMjQzMTAsIDI0MzE2LCAyNDMyMSwgMjQzMjYsIDI0MzMyLCAyNDMzNiwgMjQzNDEsIDE1MDQwLCAxNTA0NywgMjQzNDgsIAorICAgIDI0MzYwLCAyNDM2MywgMjQzNzAsIDI0Mzc0LCAxNzg4MSwgMjQzODEsIDI0Mzg5LCAyNDQwMCwgMjQ0MDksIDI0NDIyLCAKKyAgICAyNDQzMiwgMjQ0NDYsIDI0NDU4LCAyNDQ3MiwgMjQ0ODUsIDI0NDk3LCAyNDUwNywgMjQ1MTksIDI0NTI1LCAyNDU0MCwgCisgICAgMjQ1NjQsIDI0NTgyLCAyNDYwMSwgMjQ2MTQsIDI0NjI4LCAyNDY0NiwgMjQ2NjIsIDI0Njc5LCAyNDY5NywgMjQ3MDgsIAorICAgIDI0NzI3LCAyNDc0NCwgMjQ3NjQsIDI0NzgyLCAyNDc5NCwgMjQ4MDgsIDI0ODIyLCAyNDgzNCwgMjQ4NTEsIDI0ODcwLCAKKyAgICAyNDg4OCwgMjQ5MDAsIDI0OTE4LCAyNDkzNywgMTU4NTgsIDI0OTUwLCAyNDk3MCwgMjQ5ODIsIDExNDQ4LCAyNDk5NCwgCisgICAgMjQ5OTksIDI1MDA0LCAyNTAwOSwgMjUwMTUsIDI1MDIwLCAyNTAyNCwgMjUwMzEsIDI1MDM3LCAyNDM3LCAyNTA0MSwgCisgICAgMjUwNDcsIDI1MDUxLCAyNTA1NCwgMjUwNTgsIDI1MDYxLCAyNTA2OSwgMjUwNzUsIDIzOTM2LCAyNTA3OSwgMjUwODgsIAorICAgIDI1MDk5LCAyNTEwNSwgMjUxMTEsIDI1MTI2LCAyNTEzNSwgMjUxNDMsIDI1MTUwLCAyNTE1NSwgMjUxNTksIDI1MTY2LCAKKyAgICAyNTE3MiwgMjUxODEsIDI1MTg5LCAyNTE5NiwgMjUyMDYsIDI1MjE1LCAyNTIyNSwgMjUyMzAsIDI1MjM5LCAyNTI0OCwgCisgICAgMjUyNTksIDI1MjcwLCA0MTkyLCAyNTI4MCwgMjUyODQsIDI1Mjk0LCAyNTMwMiwgMjUzMTIsIDI1MzIzLCAyNTMyOCwgCisgICAgMjUzMzgsIDI1MzQ2LCAyNTM1MywgMjUzNTksIDI1MzY2LCAyNTM3MSwgMjM5NDYsIDI1Mzc1LCAyNTM4NCwgMjUzODgsIAorICAgIDI1MzkxLCAyNTM5NiwgMjU0MDQsIDI1NDExLCAyNTQyMCwgMjU0MjgsIDI1NDM2LCAyNTQ0NCwgMjU0NTQsIDI1NDYzLCAKKyAgICAyNTQ2OSwgMjU0NzUsIDI1NDc5LCAyMzk1MSwgMjM5NTYsIDI1NDgzLCAyNTQ5MywgMjU1MDMsIDI1NTEzLCAyNTUyMSwgCisgICAgMjU1MjgsIDI1NTM4LCAyNTU0NiwgMjU1NTQsIDI1NTYwLCAyNTU2OCwgODY1LCAyNTU3NywgMTYwNjUsIDYxNSwgMjU1OTEsIAorICAgIDI1NjAwLCAyNTYwOCwgMjU2MTksIDI1NjMwLCAyNTY0MCwgMjU2NDksIDI1NjYxLCAyNTY3MCwgMjU2NzksIDI1Njg2LCAKKyAgICAyNTY5MiwgMjU3MDIsIDI1NzExLCAyNTcyMCwgMjU3MjgsIDI1NzM4LCAyNTc0NiwgMjU3NTQsIDk4OTIsIDI1NzYwLCAKKyAgICAyNTc2MywgMjU3NjcsIDI1NzcyLCAyNTc3NywgMjU3ODEsIDEwNTg4LCAyMzk2OSwgMjM5NzQsIDI1Nzg5LCAyNTc5NSwgCisgICAgMjU4MDEsIDI1ODA2LCAyNTgxMSwgMjU4MTUsIDI1ODIzLCAyNTgyOSwgMjU4MzUsIDI1ODM5LCAzNjc1LCAyNTg0NywgCisgICAgMjU4NTIsIDI1ODU3LCAyNTg2MSwgMjU4NjUsIDEwNzAxLCAyNTg3MiwgMjU4ODAsIDI1ODk0LCAyNTkwMSwgMjU5MDcsIAorICAgIDEwNzEwLCAxMDcxNiwgMjU5MTUsIDI1OTIzLCAyNTkzMCwgMjU5MzUsIDI1OTQwLCAyMzk3OSwgMjU5NDYsIDI1OTU3LCAKKyAgICAyNTk2MSwgMjU5NjYsIDI2NDAsIDI1OTcxLCAyNTk4MiwgMjU5ODgsIDI1OTkzLCAyNTk5NywgMjYwMDEsIDI2MDA0LCAKKyAgICAyNjAxMSwgMjYwMTgsIDI2MDI0LCAyNjAzMSwgMjYwMzcsIDI2MDQxLCAyMzk4NCwgMjYwNDYsIDI2MDUwLCAyNjA1NCwgCisgICAgMTQzMSwgODU0NCwgMjYwNTksIDI2MDY0LCAyNjA2OSwgMjYwNzQsIDI2MDc5LCAyNjA4NCwgMjYwODksIDI2MDk0LCAKKyAgICAyNjA5OSwgMjYxMDQsIDI2MTA5LCAyNjExNCwgMjYxMTksIDI2MTI0LCAyNjEzMCwgMjYxMzUsIDI2MTQwLCAyNjE0NSwgCisgICAgMjYxNTAsIDI2MTU1LCAyNjE2MCwgMjYxNjYsIDI2MTcxLCAyNjE3NiwgMjYxODEsIDI2MTg2LCAyNjE5MSwgMjYxOTYsIAorICAgIDI2MjAxLCAyNjIwNywgMjYyMTMsIDI2MjE4LCAyNjIyNCwgMjYyMjksIDI2MjM0LCA1LCAyNjI0MCwgMjYyNDQsIDI2MjQ4LCAKKyAgICAyNjI1MiwgMjYyNTcsIDI2MjYxLCAyNjI2NSwgMjYyNjksIDI2MjczLCAyNjI3OCwgMjYyODIsIDI2Mjg3LCAyNjI5MSwgCisgICAgMjYyOTQsIDI2Mjk4LCAyNjMwMywgMjYzMDcsIDI2MzEyLCAyNjMxNiwgMjYzMjAsIDI2MzI0LCAyNjMyOSwgMjYzMzMsIAorICAgIDI2MzM3LCAyNjM0NywgMjYzNTIsIDI2MzU2LCAyNjM2MCwgMjYzNjUsIDI2MzcwLCAyNjM3OSwgMjYzODQsIDI2Mzg5LCAKKyAgICAyNjM5MywgMjYzOTcsIDI2NDEwLCAyNjQyMiwgMjY0MzEsIDI2NDQwLCAyNjQ0NSwgMjY0NTEsIDI2NDU2LCAyNjQ2MCwgCisgICAgMjY0NjQsIDI2NDc0LCAyNjQ4MywgMjY0OTEsIDI2NDk3LCAyNjUwMiwgMjY1MDYsIDI2NTEzLCAyNjUyMywgMjY1MzIsIAorICAgIDI2NTQwLCAxMTc3MCwgMjY1NDgsIDI2NTU2LCAyNjU2NSwgMjY1NzQsIDI2NTgyLCAyNjU5MiwgMjY1OTcsIDI2NjAxLCAKKyAgICAyNjYwNSwgMjY2MDgsIDI2NjEwLCAyNjYxNCwgMjY2MTgsIDI2NjIzLCAyNjYyOCwgMjY2MzIsIDI2NjM2LCAyNjYzOSwgCisgICAgMjY2NDMsIDI2NjQ2LCAyNjY1MCwgMjY2NTMsIDI2NjU2LCAyNjY2MCwgMjY2NjYsIDI2NjcwLCAyNjY3NCwgMjY2NzgsIAorICAgIDI2NjgzLCAyNjY4OCwgMjY2OTMsIDI2Njk3LCAyNjcwMCwgMjY3MDUsIDI2NzExLCAyNjcxNiwgMjY3MjIsIDI2NzI3LCAKKyAgICAyNjczMSwgMjY3MzcsIDI2NzQxLCAyNjc0NSwgMjY3NTAsIDI2NzU0LCAyNjc1OSwgMjY3NjQsIDI2NzY4LCAyNjc3MiwgCisgICAgMjY3NzksIDI2NzgzLCAyNjc4NiwgMjY3OTAsIDI2Nzk0LCAyNjgwMCwgMjY4MDYsIDI2ODEwLCAyNjgxNCwgMjY4MTksIAorICAgIDI2ODI2LCAyNjgzMiwgMjY4MzYsIDI2ODQ1LCAyNjg0OSwgMjY4NTMsIDI2ODU2LCAyNjg2MiwgMjY4NjcsIDI2ODczLCAKKyAgICAxNDc1LCAxODA2LCAyNjg3OCwgMjY4ODMsIDI2ODg4LCAyNjg5MywgMjY4OTgsIDI2OTAzLCAyNjkwOCwgMjE3NCwgMjIyMCwgCisgICAgMjY5MTMsIDI2OTE2LCAyNjkyMCwgMjY5MjQsIDI2OTI5LCAyNjkzMywgMTYwNzcsIDI2OTM3LCAyNjk0MiwgMjY5NDcsIAorICAgIDI2OTUxLCAyNjk1NCwgMjY5NTksIDI2OTYzLCAyNjk2OCwgMjY5NzIsIDE2MDgxLCAyNjk3NywgMjY5ODAsIDI2OTgzLCAKKyAgICAyNjk4NywgMjY5OTIsIDI2OTk2LCAyNzAwOSwgMjcwMTMsIDI3MDE2LCAyNzAyNCwgMjcwMzMsIDI3MDQwLCAyNzA0NSwgCisgICAgMjcwNTEsIDI3MDU3LCAyNzA2NSwgMjcwNzIsIDI3MDc5LCAyNzA4MywgMjcwODcsIDI3MDkxLCAyNzA5NiwgMjcxMDEsIAorICAgIDI3MTA1LCAyNzExMywgMjcxMTgsIDI3MTMwLCAyNzE0MSwgMjcxNDYsIDI3MTUwLCAyNzE1NywgMjcxNjEsIDI3MTY2LCAKKyAgICAyNzE3MiwgMjcxNzUsIDI3MTgwLCAyNzE4NSwgMjcxODksIDI3MTkzLCAyNzE5NiwgMjcyMDIsIDgyNDgsIDIzNTAsIAorICAgIDI3MjA2LCAyNzIxMSwgMjcyMjcsIDEwMTk4LCAyNzI0NywgMjcyNTYsIDI3MjcyLCAyNzI3NiwgMjcyODMsIDI3Mjg2LCAKKyAgICAyNzI5MiwgMjczMDIsIDI3MzA4LCAyNzMxNywgMjczMzIsIDI3MzQ0LCAyNzM1NSwgMjczNjMsIDI3MzcyLCAyNzM3OCwgCisgICAgMjczODcsIDI3Mzk3LCAyNzQwNywgMjc0MTgsIDI3NDI5LCAyNzQzOSwgMjc0NDgsIDI3NDU1LCAyNzQ2NCwgMjc0NzIsIAorICAgIDI3NDc5LCAyNzQ4NywgMjc0OTQsIDI3NTAxLCAyNzUxNCwgMjc1MjEsIDI3NTI5LCAyNzUzNiwgMjc1NDIsIDI3NTQ3LCAKKyAgICAyNzU1NiwgMjc1NjIsIDI3NTY3LCAyNzU3NSwgMjc1ODIsIDI3NTg5LCAyNTMwNCwgMjc2MDEsIDI3NjEzLCAyNzYyNywgCisgICAgMjc2MzUsIDI3NjQyLCAyNzY1NCwgMjc2NjMsIDI3NjcyLCAyNzY4MCwgMjc2ODgsIDI3Njk2LCAyNzcwMywgMjc3MDksIAorICAgIDI3NzE4LCAyNzcyNiwgMjc3MzYsIDI3NzQ1LCAyNzc1NSwgMjc3NjQsIDI3NzczLCAyNzc4MSwgMjc3ODYsIDI3NzkwLCAKKyAgICAyNzc5MywgMjc3OTcsIDI3ODAxLCAyNzgwNSwgMjc4MDksIDI3ODEzLCAyNzgxOSwgMjc4MjUsIDI3ODMzLCAxNjEzOSwgCisgICAgMjc4NDAsIDI3ODQ1LCAyNzg1MiwgMjc4NTgsIDI3ODY1LCAxNjE0NywgMjc4NzIsIDI3ODc1LCAyNzg4NywgMjc4OTUsIAorICAgIDI3OTAxLCAyNzkwNiwgMjc5MTAsIDI3OTIxLCAxMDY1MSwgMjc5MzEsIDI3OTM5LCAyNzk0OSwgMjc5NTgsIDI3OTY1LCAKKyAgICAyNzk3MiwgMjc5ODAsIDI3OTg0LCAxNjE1OCwgMjc5ODcsIDI3OTk0LCAyNzk5OCwgMjgwMDQsIDI4MDA3LCAyODAxNCwgCisgICAgMjgwMjAsIDI4MDI3LCAyODAzMywgMjgwMzcsIDI4MDQyLCAyODA0NiwgMjgwNTUsIDI4MDYyLCAyODA2OCwgODMwNiwgCisgICAgMjgwNzUsIDI4MDgzLCAyODA5MCwgMjgwOTYsIDI4MTAxLCAyODEwNywgMjgxMTMsIDI4MTIxLCAyODEyNywgMjgxMzEsIAorICAgIDI4MTM0LCAyODEzNiwgMjc3OTgsIDI4MTQ1LCAyODE1MSwgMjgxNTcsIDI4MTY3LCAyODE3MiwgMjgxNzksIDI4MTg1LCAKKyAgICAyODE5MCwgMjgxOTUsIDI4MjAwLCAyODIwNCwgMjgyMDksIDI4MjE2LCAyODIyMiwgMjgyMzEsIDI4MjM1LCAyODI0MiwgCisgICAgMjgyNDgsIDI4MjU3LCA0Mzc4LCAyODI2MywgMjgyNjksIDI4Mjc0LCAyODI4MSwgMjgyOTIsIDI4Mjk3LCAyODMwMSwgCisgICAgMjgzMTEsIDI4MzE3LCAyODMyMSwgMjgzMjYsIDI4MzM2LCAyODM0NSwgMjgzNDksIDI4MzU2LCAyODM2NCwgMjgzNzEsIAorICAgIDI4Mzc3LCAyODM4MiwgMjgzOTAsIDI4Mzk3LCAyODQwMiwgMjg0MDksIDI4NDIxLCAyODQzMCwgMjg0MzQsIDE0MjEyLCAKKyAgICAyODQ0MiwgMjg0NTIsIDI4NDU2LCAyNzAyMCwgMjg0NjcsIDI4NDcyLCAyODQ3NiwgMjg0ODMsIDI4NDkwLCAyMzY3MCwgCisgICAgMjc3MjMsIDI4NDk1LCAyODQ5OSwgMjg1MDIsIDI0NzE0LCAyODUwNywgMjg1MjEsIDI4NTM3LCAyODU1NSwgMjg1NzQsIAorICAgIDI4NTkxLCAyODYwOSwgMjQ3MzMsIDI4NjI2LCAyODY0NiwgMjQ3NTAsIDI4NjU4LCAyODY3MCwgMTcxNzgsIDI4NjgyLCAKKyAgICAyNDc3MCwgMjg2OTYsIDI4NzA4LCAxMTQ2MSwgMjg3MjIsIDI4NzI3LCAyODczMiwgMjg3MzcsIDI4NzQzLCAyODc0OSwgCisgICAgMjg3NTUsIDI4NzU5LCAyODc2NywgMjg3NzQsIDI4Nzc5LCAyODc4OSwgMjg3OTUsIDExMDU5LCAyODgwMSwgMjg4MDMsIAorICAgIDI4ODA4LCAyODgxNiwgMjg4MjAsIDI4MjEyLCAyODgyNiwgMjg4MzMsIDEyNjAxLCAxMjYxMSwgMjg4NDAsIDI4ODUwLCAKKyAgICAyODg1NSwgMjg4NTksIDI4ODYyLCAyODg2OCwgMjg4NzYsIDI4ODg4LCAyODg5OCwgMjg5MTQsIDI4OTI3LCAyODk0MSwgCisgICAgMTcxOTYsIDI4OTU1LCAyODk2MiwgMjg5NjYsIDI4OTY5LCAyODk3NCwgMjg5NzgsIDI4OTg1LCAyODk5MiwgMjg5OTksIAorICAgIDI5MDA5LCAyOTAxNCwgMjkwMTksIDI5MDI0LCAyOTAzMiwgMjkwNDAsIDI5MDQ1LCAyOTA1NCwgMjkwNTksIDMzNTMsIAorICAgIDI5MDYzLCAyOTA2NiwgMjkwNjksIDI5MDc0LCAyOTA4MSwgMjkwODYsIDI5MTAyLCAyOTExMCwgMjkxMTgsIDk5NjYsIAorICAgIDI5MTI2LCAyOTEzMSwgMjkxMzUsIDI5MTQxLCAyOTE0NiwgMjkxNTIsIDI5MTU1LCAyOTE2MSwgMjkxNzMsIDI5MTgxLCAKKyAgICAyOTE4OCwgMjkxOTQsIDI5MjAxLCAyOTIxMiwgMjkyMjYsIDI5MjM5LCAyOTI0NSwgMjkyNTQsIDI5MjYwLCAyOTI2OSwgCisgICAgMjkyODEsIDI5MjkyLCAyOTMwMiwgMjkzMTEsIDI5MzIwLCAyOTMyOCwgMjkzMzksIDgyODgsIDI5MzQ2LCAyOTM1MywgCisgICAgMjkzNTksIDI5MzY0LCAyOTM3MCwgMjkzNzcsIDI5Mzg3LCAyOTM5NywgMjk0MDYsIDI5NDEyLCAyOTQxOSwgMjk0MjQsIAorICAgIDI5NDMyLCAyOTQzOSwgMjk0NDcsIDI5NDU1LCAyOTQ2NywgNjU2MywgOTk1LCAyOTQ3NCwgMjk0ODMsIDI5NDkxLCAyOTQ5NywgCisgICAgMjk1MDMsIDI5NTA4LCAyOTUxMiwgMjk1MTUsIDI5NTIxLCAyOTUyOCwgMjk1MzMsIDI5NTM4LCAyOTU0MywgMjk1NDcsIAorICAgIDI5NTU5LCAyOTU3MCwgMjk1NzksIDI5NTg3LCAxNjMyMywgMjk1OTIsIDI5NTk3LCAyOTYwMywgMjk2MDksIDEyNTk0LCAKKyAgICA5MDU4LCAyOTYxNCwgMjk2MTgsIDI5NjIyLCAyOTYyNSwgMjk2MjgsIDI5NjM0LCAyOTY0MiwgMjk2NTAsIDI5NjU0LCAKKyAgICAyOTY1OCwgMjk2NjMsIDI5NjY2LCAyOTY3NSwgMjk2NzksIDI5NjgyLCAyOTY5MCwgMjk3MDEsIDI5NzA1LCAyOTcxMSwgCisgICAgMjk3MTcsIDI5NzIxLCAyOTcyNywgMjk3MzUsIDI5NzU3LCAyOTc4MSwgMjk3OTAsIDI5Nzk3LCAyOTgwNCwgMjk4MTAsIAorICAgIDI5ODE4LCAyOTgyNCwgMjk4MjksIDI5ODQwLCAyOTg1OCwgMjk4NjUsIDI5ODczLCAyOTg3NywgMjk4ODIsIDI5ODkxLCAKKyAgICAyOTkwNCwgMjk5MTIsIDI5OTI0LCAyOTkzNSwgMjk5NDYsIDI5OTU2LCAyOTk3MCwgMjk5NzksIDI5OTg3LCAyOTk5OSwgCisgICAgMTAyMTUsIDMwMDEwLCAzMDAyMSwgMzAwMzMsIDMwMDQzLCAzMDA1MiwgMzAwNTcsIDMwMDYxLCAzMDA2OSwgMzAwODAsIAorICAgIDMwMDkwLCAzMDA5NSwgMzAwOTksIDMwMTAyLCAzMDEwNSwgMzAxMTMsIDMwMTIxLCAzMDEzMCwgMzAxNDAsIDMwMTQ5LCAKKyAgICAzMDE1NSwgMzAxNjksIDI3MDIsIDMwMTkxLCAzMDIwMiwgMzAyMTEsIDMwMjIxLCAzMDIzMywgMzAyNDIsIDMwMjUxLCAKKyAgICAzMDI2MSwgMzAyNjksIDMwMjc3LCAzMDI4NiwgMzAyOTEsIDMwMzAyLCAzMDMwNywgMzAzMTgsIDMwMzIyLCAzMDMzMiwgCisgICAgMzAzNDEsIDMwMzQ5LCAzMDM1OSwgMzAzNjksIDMwMzc3LCAzMDM4NiwgMzAzOTMsIDMwNDAxLCAzMDQwOCwgMzA0MTcsIAorICAgIDMwNDI2LCAzMDQzMCwgMzA0MzgsIDMwNDQ1LCAzMDQ1MywgMzA0NjAsIDMwNDcxLCAzMDQ4NiwgMzA0OTMsIDMwNDk5LCAKKyAgICAzMDUwOSwgMzA1MTgsIDMwNTI0LCAzMDUzNSwgMzA1MzksIDMwNTQ2LCAzMDU1MCwgMzA1NTYsIDE1MjY1LCAzMDU2MiwgCisgICAgMzA1NjYsIDMwNTcxLCAzMDU3NywgMzA1ODQsIDMwNTg4LCAzMDU5MiwgMzA2MDAsIDMwNjA4LCAzMDYxNCwgMzA2MjMsIAorICAgIDMwNjMwLCAzMDYzNSwgMzA2NDAsIDMwNjUwLCAyNTM3MywgMzA2NTQsIDMwNjU3LCAzMDY2MiwgMzA2NjcsIDMwNjcyLCAKKyAgICAzMDY3NywgMzA2ODIsIDMwNjg3LCAzMDY5MiwgMzA2OTcsIDMwNzAzLCAzMDcwOCwgMzA3MTMsIDMwNzE5LCAxMTk5LCA2NjAsIAorICAgIDMwNzI0LCAzMDczMywgMjM5OCwgMzA3NDAsIDMwNzQ1LCAzMDc0OSwgMzA3NTUsIDEyNDgsIDU3OCwgMjkwLCAzMDc2MCwgCisgICAgMzA3NjksIDMwNzc3LCAzMDc4NiwgMzA3OTQsIDMwODA1LCAzMDgxMywgMzA4MjIsIDMwODMwLCAzMDgzNSwgMTA3OTcsIAorICAgIDMwODM5LCAzMDg0NywgMzA4NTUsIDMwODYwLCAxNjA5NCwgMzgyNCwgMzA4NjYsIDMwODcyLCAzMDg3OCwgNjE0OCwgCisgICAgMzA4ODMsIDMwODg3LCAzMDg5MywgMzA4OTcsIDMwOTAzLCAzMDkwOCwgMzA5MTUsIDE0NDEsIDMwOTIxLCAzMDkyOCwgCisgICAgMTM0OCwgNjE1NiwgMzA5MzIsIDMwOTQyLCAzMDk1MCwgMzA5NTYsIDMwOTY2LCAzMDk3NSwgMzA5ODMsIDMwOTg5LCAKKyAgICAzMDk5NywgMzEwMDQsIDEyMTM2LCAzMTAxMCwgMzEwMTcsIDMxMDIyLCAzMTAyOSwgMTQ5NCwgMjE5LCAyMTczLCAzMTAzNSwgCisgICAgMzEwNDEsIDMxMDQ4LCAzMTA1OSwgMzEwNzAsIDMxMDc4LCAzMTA4NSwgMzEwOTUsIDMxMTA0LCAzMTExMiwgMzExMjEsIAorICAgIDMxMTI4LCAzMTEzNSwgMzExNDgsIDMxMTU1LCAzMTE2MSwgMzExNzIsIDMxMTkxLCAxMjUzLCAzMTE5NiwgMzEyMDEsIAorICAgIDMxMjA5LCAzNzQyLCAzMTIxMywgMzEyMTgsIDMxMjIyLCAzMTIyNiwgMTQ0NSwgMjY2MzcsIDMxMjM2LCAzMTI0MCwgCisgICAgMzEyNDUsIDMxMjQ5LCAzNjE5LCAzMTI1NSwgMzEyNjMsIDMxMjcwLCAzMTI4MSwgMzEyODksIDMxMjk3LCAzNzQzLCAzNDYsIAorICAgIDMxMzAyLCAzMTMxMCwgMzEzMTgsIDMxMzI1LCAzMTMzMSwgMzEzMzYsIDIyNDIsIDExNjI4LCAzMTM0MywgMzEzNDksIAorICAgIDI4MDM4LCAyODI4NywgMzEzNTUsIDU3NCwgMTA2LCAzMTM1OSwgMzEzNjMsIDMxMzY5LCA2NjMsIDk4NDEsIDMxMzc0LCAKKyAgICAzMTM4MSwgMzEzODcsIDMxMzkxLCAxNjM5LCAzMTM5NCwgMzEzOTgsIDE2NTc2LCAzMTQwMSwgMzE0MDYsIDMxNDEzLCAKKyAgICAzMTQxOSwgMzE0MjQsIDMxNDMyLCAzMTQzOSwgMzE0NDUsIDI0MTMyLCAzMTQ0OSwgMzE0NTMsIDMxNDU3LCAzODEzLCAKKyAgICAxODE4MCwgMzE0NjEsIDMxNDY2LCAzMTQ3MCwgMzE0NzMsIDMxNDgxLCAzMTQ4OSwgMzE0OTQsIDMxNTAyLCAzMTUwNSwgCisgICAgMzE1MTIsIDMxNTIyLCAzMTUzNCwgMzE1MzksIDMxNTQzLCAzMTU1MSwgMzE1NTgsIDMxNTY0LCAzMTU3MSwgMzE1NzgsIAorICAgIDMxNTgxLCAzMTU4NSwgMzE1ODksIDE0NDksIDMxNTk5LCAzMTYwMSwgMzE2MDYsIDMxNjEyLCAzMTYxOCwgMzE2MjMsIAorICAgIDMxNjI4LCAzMTYzMywgMzE2MzgsIDMxNjQzLCAzMTY0OCwgMzE2NTMsIDMxNjU4LCAzMTY2MywgMzE2NjgsIDMxNjczLCAKKyAgICAzMTY3OCwgMzE2ODMsIDMxNjg4LCAzMTY5NCwgMzE3MDAsIDMxNzA2LCAzMTcxMiwgMzE3MTcsIDMxNzIyLCAzMTcyNywgCisgICAgMzE3MzMsIDMxNzM4LCAzMTc0MywgMzE3NDgsIDMxNzU0LCAzMTc1OSwgMzE3NjUsIDMxNzcwLCAzMTc3NSwgMzE3ODAsIAorICAgIDMxNzg1LCAzMTc5MSwgMzE3OTYsIDMxODAyLCAzMTgwNywgMzE4MTIsIDMxODE3LCAzMTgyMiwgMzE4MjgsIDMxODMzLCAKKyAgICAzMTgzOSwgMzE4NDQsIDMxODQ5LCAzMTg1NCwgMzE4NTksIDMxODY0LCAzMTg2OSwgMzE4NzQsIDMxODc5LCAzMTg4NCwgCisgICAgMzE4OTAsIDMxODk2LCAzMTkwMiwgMzE5MDcsIDMxOTEyLCAzMTkxNywgMzE5MjIsIDMxOTI4LCAzMTkzNCwgMzE5NDAsIAorICAgIDMxOTQ2LCAzMTk1MiwgMzE5NTgsIDMxOTYzLCAzMTk2OSwgMzE5NzQsIDMxOTc5LCAzMTk4NCwgMzE5ODksIDMxOTk1LCAKKyAgICAyNDgyLCAzMjAwMCwgMjQ4OSwgMjQ5NiwgMjc5MywgMzIwMDUsIDI1MDIsIDI1MTIsIDMyMDExLCAzMjAxNSwgMzIwMjAsIAorICAgIDMyMDI1LCAzMjAzMSwgMzIwMzYsIDMyMDQxLCAzMjA0NSwgMzIwNTAsIDMyMDU2LCAzMjA2MSwgMzIwNjYsIDMyMDcxLCAKKyAgICAzMjA3NywgMzIwODIsIDMyMDg2LCAzMjA5MCwgMzIwOTUsIDMyMTAwLCAzMjEwNSwgMzIxMTAsIDMyMTE1LCAzMjEyMSwgCisgICAgMzIxMjcsIDMyMTMyLCAzMjEzNiwgMzIxNDEsIDMyMTQ3LCAzMjE1MSwgMzIxNTYsIDMyMTYxLCAzMjE2NiwgMzIxNzEsIAorICAgIDMyMTc1LCAzMjE3OCwgMzIxODMsIDMyMTg4LCAzMjE5MywgMzIxOTgsIDMyMjAzLCAzMjIwOSwgMzIyMTUsIDMyMjIwLCAKKyAgICAzMjIyNSwgMzIyMzAsIDMyMjM0LCAzMjIzOSwgMzIyNDQsIDMyMjQ5LCAzMjI1NCwgMzIyNTksIDMyMjY0LCAzMjI2OCwgCisgICAgMzIyNzMsIDMyMjc4LCAzMjI4MywgMzIyODcsIDMyMjkxLCAzMjI5NSwgMzIzMDAsIDMyMzA4LCAzMjMxMywgMzIzMTgsIAorICAgIDMyMzI0LCAzMjMzMCwgMzIzMzYsIDMyMzQxLCAzMjM0NSwgMzIzNDgsIDMyMzUzLCAzMjM1OCwgMzIzNjIsIDMyMzY3LCAKKyAgICAzMjM3MiwgMzIzNzYsIDMyMzgxLCAzMjM4NSwgMzIzODgsIDMyMzkzLCAzOTE0LCAxODkwNiwgMzIzOTgsIDMyNDAzLCAKKyAgICAzMjQwOCwgMzI0MTYsIDIyOTU5LCAzMDkyNSwgOTUxOCwgMzI0MjEsIDMyNDI2LCAzMjQzMCwgMzI0MzUsIDMyNDM5LCAKKyAgICAzMjQ0MywgMzI0NDgsIDMyNDUyLCAzMjQ1NSwgMzI0NTgsIDMyNDYyLCAzMjQ2NywgMzI0NzEsIDMyNDc5LCAzMjQ4MywgCisgICAgMzI0ODYsIDMyNDkxLCAzMjQ5NSwgMzI0OTksIDMyNTA0LCAzMjUwOSwgMzI1MTMsIDMyNTE5LCAzMjUyNCwgMzI1MjksIAorICAgIDMyNTM2LCAzMjU0MywgMzI1NDcsIDMyNTUwLCAzMjU1NiwgMzI1NjUsIDMyNTcyLCAzMjU4MCwgMzI1ODcsIDMyNTkxLCAKKyAgICAzMjU5NiwgMzI2MDAsIDMyNjA0LCAzMjYxMCwgMzI2MTYsIDMyNjIwLCAzMjYyNiwgMzI2MzEsIDMyNjM2LCAzMjY0MCwgCisgICAgMzI2NDcsIDMyNjUzLCAzMjY1OSwgMzI2NjUsIDMyNjcxLCAzMjY3OCwgMzI2ODQsIDMyNjkwLCAzMjY5NiwgMzI3MDIsIAorICAgIDMyNzA4LCAzMjcxNCwgMzI3MjAsIDMyNzI3LCAzMjczMywgMzI3NDAsIDMyNzQ2LCAzMjc1MiwgMzI3NTgsIDMyNzY0LCAKKyAgICAzMjc3MCwgMzI3NzYsIDMyNzgyLCAzMjc4OCwgMzI3OTQsIDEyNDc5LCAzMjgwMCwgMzI4MDYsIDMyODExLCAzMjgxNiwgCisgICAgMzI4MjEsIDMyODI0LCAzMjgzMCwgMzI4MzgsIDMyODQzLCAzMjg0NywgMzI4NTIsIDMyODU4LCAzMjg2NywgMzI4NzMsIAorICAgIDMyODc4LCAzMjg4MywgMzI4ODgsIDMyODkyLCAzMjg5NywgMzI5MDIsIDMyOTA3LCAzMjkxMiwgMzI5MTcsIDMyOTI0LCAKKyAgICAzMjkzMSwgMzI5MzcsIDMyOTQzLCAzMjk0OCwgMTc4MjIsIDMyOTU1LCAzMjk2MSwgMzI5NjgsIDMyOTc0LCAzMjk4MCwgCisgICAgMzI5ODUsIDMyOTkzLCAzMjk5OCwgMTAzNzIsIDMzMDAyLCAzMzAwNywgMzMwMTIsIDMzMDE4LCAzMzAyMywgMzMwMjgsIAorICAgIDMzMDMyLCAzMzAzNywgMzMwNDIsIDMzMDQ4LCAzMzA1MywgMzMwNTgsIDMzMDYzLCAzMzA2NywgMzMwNzIsIDMzMDc3LCAKKyAgICAzMzA4MSwgMzMwODYsIDMzMDkxLCAzMzA5NSwgMzMxMDAsIDMzMTA0LCAzMzEwOSwgMzMxMTQsIDMzMTE5LCAzMzEyMywgCisgICAgMzMxMjgsIDMzMTMyLCAzMzEzNiwgMTY2ODIsIDMzMTQxLCAzMzE1MCwgMzMxNTYsIDMzMTYyLCAzMzE3MSwgMzMxNzksIAorICAgIDMzMTg4LCAzMzE5NiwgMzMyMDEsIDMzMjA1LCAzMzIxMiwgMzMyMTgsIDMzMjI2LCAzMzIzMCwgMzMyMzMsIDMzMjM4LCAKKyAgICAzMzI0MiwgMzMyNTEsIDMzMjU5LCAzMzI3NywgMzMyODMsIDE0OTMsIDMzMjg5LCAzMzI5MiwgMzMyOTYsIDI0MjM4LCAKKyAgICAyNDI0NCwgMzMzMDIsIDMzMzA2LCAzMzMxNywgMzMzMjgsIDMzMzM5LCAzMzM1MSwgMzMzNTUsIDMzMzYyLCAzMzM2OSwgCisgICAgMzMzNzQsIDMzMzc4LCA2MjA0LCA5MjgsIDIyOTU4LCAzMzM4NiwgMzMzOTEsIDMzMzk1LCAzMzQwMCwgMzM0MDQsIDMzNDEwLCAKKyAgICAzMzQxNSwgMzM0MjEsIDMzNDI2LCAzMzQzMiwgMzM0MzcsIDMzNDQzLCAzMzQ0OCwgMzM0NTQsIDMzNDYwLCAzMzQ2NiwgCisgICAgMzM0NzEsIDMzNDI3LCAzMzQzMywgMzM0NzUsIDMzNDgwLCAzMzQ4NiwgMzM0OTEsIDMzNDk3LCAzMzUwMiwgMzM1MDgsIAorICAgIDMzNTEzLCAzMzQzOCwgMTEzMTQsIDMzNTE3LCAzMzQ0OSwgMzM0NTUsIDMzNDYxLCAyODg1LCAzNTMzLCAzMzUyMywgCisgICAgMzM1MjYsIDMzNTMxLCAzMzUzNywgMzM1NDMsIDMzNTQ5LCAzMzU1NiwgMzM1NjIsIDMzNTY4LCAzMzU3NCwgMzM1ODAsIAorICAgIDMzNTg2LCAzMzU5MiwgMzM1OTgsIDMzNjA0LCAzMzYxMCwgMzM2MTYsIDMzNjIyLCAzMzYyOCwgMzM2MzUsIDMzNjQxLCAKKyAgICAzMzY0NywgMzM2NTMsIDMzNjU5LCAzMzY2NSwgMzM2NjgsIDMzNjczLCAzMzY3NiwgMzM2ODMsIDMzNjg4LCAzMzY5NiwgCisgICAgMzM3MDEsIDMzNzA2LCAzMzcxMiwgMzM3MTcsIDMzNzIyLCAzMzcyNiwgMzM3MzEsIDMzNzM3LCAzMzc0MiwgMzM3NDgsIAorICAgIDMzNzUzLCAzMzc1OSwgMzM3NjQsIDMzNzcwLCAzMzc3NiwgMzM3ODAsIDMzNzg1LCAzMzc5MCwgMzM3OTUsIDMzODAwLCAKKyAgICAzMzgwNCwgMzM4MDksIDMzODE0LCAzMzgxOSwgMzM4MjUsIDMzODMxLCAzMzgzNywgMzM4NDMsIDMzODQ4LCAzMzg1MiwgCisgICAgMzM4NTUsIDMzODYxLCAzMzg2NywgMzM4NzYsIDMzODg0LCAzMzg5MSwgMzM4OTYsIDMzOTAwLCAzMzkwNCwgMzM5MDksIAorICAgIDE2NTMwLCAzMzkxNCwgMzM5MjIsIDMzOTI4LCAzODY2LCAxMzU4LCAzMzkzMywgMzM5MzcsIDgzNTksIDMzOTQzLCAzMzk0OSwgCisgICAgMzM5NTYsIDgzNjgsIDMzOTYwLCAzMzk2NiwgMzM5NzMsIDMzOTc5LCAzMzk4OCwgMzM5OTYsIDkyNDQsIDM0MDA4LCAKKyAgICAzNDAxMiwgMzQwMTksIDM0MDI1LCAzNDAzMCwgMzQwMzQsIDM0MDM4LCAzNDA0MSwgMzQwNTEsIDM0MDYwLCAzNDA2OCwgCisgICAgMzM0MjgsIDM0MDczLCAzNDA4MywgMzQwOTMsIDM0MTAzLCAzNDEwOSwgMzQxMTQsIDM0MTI0LCAzNDEyOSwgMzQxNDIsIAorICAgIDM0MTU2LCAzNDE2NywgMzQxNzksIDM0MTkxLCAzNDIwNSwgMzQyMTgsIDM0MjMwLCAzNDI0MiwgMTU4OTksIDM0MjU2LCAKKyAgICAzNDI2MSwgMzQyNjYsIDM0MjcwLCAzNDI3NCwgMzQyNzgsIDE3OTUsIDI5MjkwLCAzNDI4MiwgMzQyODcsIDMzNDc2LCAKKyAgICAzNDI5MiwgMzQyOTUsIDM0MzAwLCAzNDMwNSwgMzQzMTAsIDM0MzE2LCAzNDMyMiwgMTA5NzQsIDM0MzI3LCAzNDMzMywgCisgICAgMzQzNDAsIDE3MTMwLCAzNDM0NiwgMzQzNTEsIDM0MzU2LCAzNDM2MCwgMzQzNjUsIDM0MzcwLCAzMzQ4MSwgMzQzNzUsIAorICAgIDM0MzgwLCAzNDM4NSwgMzQzOTEsIDMzNDg3LCAzNDM5NiwgMzQzOTksIDM0NDA2LCAzNDQxNCwgMzQ0MjAsIDM0NDI2LCAKKyAgICAzNDQzMiwgMzQ0NDMsIDM0NDQ4LCAzNDQ1NSwgMzQ0NjIsIDM0NDY5LCAzNDQ3NywgMzQ0ODYsIDM0NDk1LCAzNDUwMSwgCisgICAgMzQ1MDcsIDM0NTE1LCAzMzQ5MiwgMzQ1MjAsIDM0NTI2LCAzNDUzMiwgMzM0OTgsIDM0NTM3LCAzNDU0MiwgMzQ1NTAsIAorICAgIDM0NTU4LCAzNDU2NCwgMzQ1NzEsIDM0NTc3LCAzNDU4NCwgMzQ1OTEsIDM0NTk3LCAzNDYwNSwgMzQ2MTUsIDM0NjIyLCAKKyAgICAzNDYyOCwgMzQ2MzMsIDM0NjM5LCAzNDY0NCwgMzQ2NDksIDM0NjU2LCAzNDY2NSwgMzQ2NzMsIDM0Njc4LCAzNDY4NCwgCisgICAgMzQ2OTEsIDM0Njk5LCAzNDcwNSwgMzQ3MTAsIDM0NzE2LCAzNDcyNSwgMzQ3MzIsIDMwMTM1LCAzNDczOCwgMzQ3NDIsIAorICAgIDM0NzQ3LCAzNDc1NiwgMzQ3NjEsIDM0NzY2LCAzNDc3MSwgMTM1NDgsIDM0Nzc5LCAzNDc4NCwgMzQ3ODksIDM0Nzk0LCAKKyAgICAzNDc5OCwgMzQ4MDMsIDM0ODA4LCAzNDgxNSwgMzQ4MjAsIDM0ODI1LCAzNDgzMCwgMzM1MDMsIDIyODk1LCAzNDgzNiwgCisgICAgMjU1OCwgMTQ0LCAzNDgzOSwgMzQ4NDIsIDM0ODQ2LCAzNDg1MCwgMzQ4NjAsIDM0ODY4LCAzNDg3NSwgMzQ4NzksIDM0ODgyLCAKKyAgICAzNDg5MCwgMzQ4OTcsIDM0OTA0LCAzNDkxMywgMzQ5MTcsIDM0OTIwLCAzNDkyNiwgMzQ5MzAsIDM0OTM4LCAzNDk0NiwgCisgICAgMzQ5NTAsIDM0OTU0LCAzNDk1NywgMzQ5NjMsIDM0OTcwLCAzNDk3NCwgMzQ5NzgsIDM0OTg1LCAzNDk5MywgMzM0MzksIAorICAgIDM1MDAwLCAzNTAwOCwgMzUwMTMsIDExMDM0LCA2MjMsIDM2OSwgMzUwMjUsIDM1MDMwLCAzNTAzNSwgMzUwNDEsIDM1MDQ2LCAKKyAgICAzNTA1MSwgMzg4NywgMzUwNTYsIDM1MDU5LCAzNTA2NCwgMzUwNjksIDM1MDc0LCAzNTA3OSwgMzUwODQsIDM1MDkxLCAKKyAgICAyNDM1NiwgMzUwOTYsIDM1MTAxLCAzNTEwNiwgMzUxMTEsIDM1MTE2LCAzNTEyMiwgMzUxMjcsIDM1MTMzLCAzMzY3OSwgCisgICAgMzUxMzksIDM1MTQ0LCAzNTE1MCwgMzUxNTYsIDM1MTY2LCAzNTE3MSwgMzUxNzYsIDM1MTgwLCAzNTE4NSwgMzUxOTAsIAorICAgIDM1MTk1LCAzNTIwMCwgMzUyMTMsIDM1MjE4LCAyNDAxOSwgMTgyNTUsIDM5MDAsIDM1MjIyLCAzNTIyOCwgMzUyMzMsIAorICAgIDM1MjM4LCAzNTI0NCwgMzUyNDksIDM1MjU0LCAzNTI1OCwgMzUyNjMsIDM1MjY4LCAzNTI3NCwgMzUyNzksIDM1Mjg0LCAKKyAgICAxMzYzLCAzNTI4OCwgMzUyOTMsIDM1Mjk4LCAzNTMwMywgMzUzMDcsIDM1MzEyLCAzNTMxNywgMzUzMjIsIDM1MzI4LCAKKyAgICAzNTMzNCwgMzUzMzksIDM1MzQzLCAzNTM0NywgMzUzNTIsIDM1MzU3LCAzNTM2MiwgMzUzNjYsIDM1Mzc0LCAzNTM3OCwgCisgICAgMzUzODQsIDM1Mzg4LCAzNTM5NSwgMTgwMzksIDMzNDUwLCAzNTQwMSwgMzU0MDgsIDM1NDE2LCAzNTQyMywgMzU0MjksIAorICAgIDM1NDQyLCAzNTQ1NCwgMzU0NTksIDM1NDY1LCAzNTQ2OSwgMjgxMiwgMzU0NzMsIDM1NDc3LCAzNDk2NSwgMzU0ODYsIAorICAgIDM1NDk3LCAzNTUwMiwgMzAxOTgsIDM1NTA3LCAzNTUxMiwgMzU1MTYsIDM1NTIxLCAyNDI0OSwgMzU1MjUsIDM1NTI5LCAKKyAgICAzNTUzNCwgMzM0NTYsIDIyOTg1LCAzNTUzOCwgMzU1NDMsIDM1NTQ5LCAzNTU1NCwgMzU1NTgsIDM1NTYyLCAzNTU2NSwgCisgICAgMzU1NjksIDM1NTc1LCAzNTU4NCwgMzU1OTUsIDM1NjA3LCAzMzQ2MiwgMzU2MTIsIDM1NjE1LCAzNTYxOSwgMzU2MjMsIAorICAgIDQwNiwgMzU2MjgsIDM1NjMzLCAzNTYzOCwgMzU2NDMsIDM1NjQ4LCAzNTY1MywgMzU2NTksIDM1NjY0LCAzNTY2OSwgCisgICAgMzU2NzUsIDM1NjgwLCAzNTY4NiwgMzU2OTEsIDM1Njk3LCAzNTcwMiwgMzU3MDcsIDM1NzEyLCAzNTcxNywgMzU3MjIsIAorICAgIDM1NzI3LCAzNTczMiwgMzU3MzcsIDM1NzQzLCAzNTc0OCwgMzU3NTMsIDM1NzU4LCAzNTc2MywgMzU3NjgsIDM1NzczLCAKKyAgICAzNTc3OCwgMzU3ODQsIDM1NzkwLCAzNTc5NSwgMzU4MDAsIDM1ODA1LCAzNTgxMCwgMzU4MTUsIDM1ODIwLCAzNTgyNSwgCisgICAgMzU4MzAsIDM1ODM1LCAzNTg0MCwgMzU4NDUsIDM1ODUwLCAzNTg1NSwgMzU4NjAsIDM1ODY1LCAzNTg3MCwgMzU4NzUsIAorICAgIDM1ODgwLCAzNTg4NiwgMzI1LCA5LCAzNTg5MSwgMzU4OTUsIDM1ODk5LCAzNTkwNywgMzU5MTEsIDM1OTE1LCAzNTkxOCwgCisgICAgMzU5MjEsIDM1OTIzLCAzNTkyOCwgMzU5MzIsIDM1OTM3LCAzNTk0MSwgMzU5NDYsIDM1OTUwLCAzNTk1NSwgMzU5NTksIAorICAgIDM1OTYyLCAzNTk2NCwgMzU5NjgsIDM1OTczLCAzNTk3NywgMzU5ODgsIDM1OTkxLCAzNTk5MywgMzU5OTcsIDM2MDA5LCAKKyAgICAzNjAxOCwgMzYwMjIsIDM2MDI2LCAzNjAzMiwgMzYwMzcsIDM2MDQ2LCAzNjA1MiwgMzYwNTcsIDM2MDYyLCAzNjA2NiwgCisgICAgMzYwNzAsIDM2MDc1LCAzNjA4MiwgMzYwODcsIDM2MDkzLCAzNjA5OCwgMzYxMDIsIDM2MTA5LCAyNzczMSwgMjc3NDEsIAorICAgIDM2MTEzLCAzNjExOCwgMzYxMjMsIDM2MTI4LCAzNjEzNSwgMzYxMzksIDM2MTQ2LCAzNjE1MiwgODQ5MSwgMzYxNTYsIAorICAgIDM2MTY1LCAzNjE3MywgMzYxODgsIDM2MjAyLCAzNjIxMSwgMzYyMTksIDM2MjMwLCAzNjIzOSwgMzYyNDQsIDM2MjUxLCAKKyAgICA3NTU2LCAzNjI2MSwgMzYyNjYsIDM2MjcxLCAzNjI3NSwgMzYyNzgsIDM2MjgzLCAzNjI4NywgMzYyOTIsIDM2Mjk2LCAKKyAgICAzNjMwMywgMzYzMDgsIDM2MzEzLCAzNjMxOCwgOTM5MSwgMzYzMjgsIDM2MzMwLCAzNjMzMywgMzYzMzYsIDM2MzQwLCAKKyAgICAzNjM0NiwgMzYzNTAsIDM2MzU1LCAzNjM2MCwgMzYzNzgsIDM2MzkyLCAzNjQxMSwgMzY0MjgsIDM2NDM3LCAzNjQ0NSwgCisgICAgMzY0NTAsIDM2NDU1LCAxNDg2LCAzNjQ2MSwgMzY0NjcsIDM2NDcyLCAzNjQ4MiwgMzY0OTEsIDM2NDk5LCAzNjUwNCwgCisgICAgMzY1MTAsIDM2NTE1LCAzNjUyNCwgMzY1MzUsIDM2NTQwLCAzNjU0NywgMzY1NTEsIDM2NTU4LCAzNjU2NiwgMzY1NzMsIAorICAgIDM2NTg2LCAzNjU5NCwgMzY1OTgsIDM2NjA4LCAzNjYxMywgMzY2MTcsIDM2NjI1LCAzNjYzMywgMzY2MzgsIDM2NjQyLCAKKyAgICAzNjY0NiwgMzY2NTUsIDM2NjYxLCAzNjY2NiwgMzY2NzQsIDM2Njg0LCAzNjY5MywgMzY3MDIsIDM2NzExLCAzNjcyMiwgCisgICAgMzY3MzAsIDM2NzQxLCAzNjc1MCwgMzY3NTcsIDM2NzYzLCAzNjc2OCwgMzY3NzksIDM2NzkwLCAzNjc5NSwgMzY3OTksIAorICAgIDM2ODAyLCAzNjgwNiwgMzY4MTQsIDM2ODIwLCAzNjgzMSwgMzY4NDIsIDM2ODUzLCAzNjg2NCwgMzY4NzUsIDM2ODg2LCAKKyAgICAzNjg5NywgMzY5MDgsIDM2OTIwLCAzNjkzMiwgMzY5NDQsIDM2OTU2LCAzNjk2OCwgMzY5ODAsIDM2OTkyLCAzNjk5NiwgCisgICAgMzcwMDQsIDM3MDEwLCAzNzAxNywgMzcwMjMsIDM3MDI4LCAzNzAzNCwgMjQ1NywgMzcwMzgsIDM3MDQwLCAzNzA0NSwgCisgICAgMzcwNTAsIDM3MDU1LCAzNzA1OCwgMzcwNjAsIDM3MDY0LCAzNzA2NywgMzcwNzQsIDM3MDc4LCAxMDY2NCwgMzcwODIsIAorICAgIDM3MDg4LCAzNzA5OCwgMzcxMDMsIDM3MTA5LCAzNzExMywgMzcxMTgsIDM3MTMxLCAyODE2MiwgMzcxMzcsIDM3MTQ2LCAKKyAgICAzNzE1NSwgMTkxMDQsIDM3MTYyLCAzNzE3MSwgMzQwODksIDM3MTc5LCAzNzE4NCwgMzcxODgsIDM3MTk3LCAzNzIwNSwgCisgICAgMzcyMTIsIDM3MjE3LCAzNzIyMSwgMzcyMjYsIDM3MjM0LCAzNzIzOCwgMzcyNDYsIDM3MjUyLCAzNzI1OCwgMzcyNjMsIAorICAgIDM3MjY3LCAzNzI3MCwgMzcyNzUsIDM3Mjg4LCAzNzMwNCwgMjQ4NDAsIDM3MzIxLCAzNzMzMywgMzczNTAsIDM3MzYyLCAKKyAgICAzNzM3NiwgMjQ4NTcsIDI0ODc2LCAzNzM4OCwgMzc0MDAsIDI3MTksIDM3NDE0LCAzNzQxOSwgMzc0MjQsIDM3NDI5LCAKKyAgICAzNzQzMywgMzc0NDAsIDM3NDUyLCAzNzQ1OSwgMzc0NjgsIDM3NDcxLCAzNzQ4MiwgMzc0OTMsIDM3NDk4LCAzNDUxMiwgCisgICAgODUyLCAzNzUwMiwgMzc1MDYsIDM3NTEwLCAzNzUxMywgMzc1MTgsIDM3NTIzLCAzNzUyOSwgMzc1MzQsIDM3NTM5LCAKKyAgICAzNzU0NSwgMzc1NTEsIDM3NTU2LCAzNzU2MCwgMzc1NjUsIDM3NTcwLCAzNzU3NSwgMzc1NzksIDM3NTgyLCAzNzU4OCwgCisgICAgMzc1OTMsIDM3NTk4LCAzNzYwMywgMzc2MDcsIDM3NjEyLCAzNzYxOCwgMzc2MjYsIDI4NDE0LCAzNzYzMSwgMzc2MzYsIAorICAgIDM3NjQzLCAzNzY0OSwgMzc2NTUsIDM3NjYwLCAzNzY2OCwgMjQzNjUsIDM3Njc1LCAzNzY4MCwgMzc2ODUsIDM3NjkwLCAKKyAgICAzNzY5NCwgMzc2OTcsIDM3NzAyLCAzNzcwNiwgMzc3MTAsIDM3NzE3LCAzNzcyMywgMzc3MjksIDM3NzM1LCAzNzc0MiwgCisgICAgMzc3NDcsIDM3NzUzLCAzNjYyOCwgMzc3NTcsIDM3NzYxLCAzNzc2NiwgMzc3NzksIDM3Nzg0LCAzNzc5MCwgMzc3OTgsIAorICAgIDM3ODA1LCAzNzgxMywgMzc4MjMsIDM3ODI5LCAzNzgzNSwgMzc4NDEsIDM3ODQ1LCAzNzg1NCwgMzc4NjIsIDM3ODY5LCAKKyAgICAzNzg3NCwgMzc4NzksIDExMzM3LCAzNzg4NCwgMzc4OTEsIDM3ODk3LCAzNzkwNywgMzc5MTIsIDM3OTE4LCAzNzkyNiwgCisgICAgMzc3NSwgMzc5MzMsIDM3OTQwLCAzNzk0NiwgMzc5NTMsIDM3ODEsIDM3OTU3LCAzNzk2MiwgMzc5NzMsIDM3OTgwLCAKKyAgICAzNzk4NiwgMzc5OTUsIDM3OTk5LCA0MjQ0LCAzODAwMiwgMzgwMDksIDM4MDE1LCAzODAyMSwgMzgwMjksIDM4MDM5LCAKKyAgICAzMTMyNiwgMzgwNDYsIDM4MDU0LCAzODA2MCwgMzgwNjUsIDM4MDcxLCAzODA3NiwgMzgwODAsIDI4MDEwLCAzODA4NiwgCisgICAgMzgwOTMsIDM4MDk5LCAzODEwOCwgMzgxMTUsIDI1NTY1LCAzODEyMSwgMzgxMjYsIDM4MTMwLCAzODEzOCwgMzgxNDYsIAorICAgIDEwMzMwLCA2MTc5LCAzODE1MywgMzgxNTcsIDM4MTU5LCAzODE2MywgMzgxNjgsIDM4MTcwLCAzODE3NSwgMzgxODEsIAorICAgIDM4MTg2LCAzODE5MSwgMzgxOTgsIDM1MDg3LCAzODIwNCwgMzgyMDksIDM4MjEzLCAzODIxOCwgMzgyMjIsIDM4MjMxLCAKKyAgICAzODIzNSwgMzgyNDEsIDM4MjQ4LCAzODI1NCwgMzgyNjEsIDM4MjY2LCAzODI3NSwgMzgyODAsIDM4Mjg0LCAzODI4OSwgCisgICAgMzgyOTYsIDM4MzA0LCAzODMxMiwgMzgzMTcsIDIzMDQxLCAzODMyMSwgMzgzMjQsIDM4MzI4LCAzODMzMiwgMTE3MjUsIAorICAgIDg3MiwgMzgzMzYsIDM4MzQxLCAzODM0OSwgMzgzNTMsIDM4MzYyLCAzODM2OSwgMzgzNzMsIDM4Mzc3LCAzODM4NSwgCisgICAgMzgzOTIsIDM4NDAyLCAzODQwNiwgMzg0MTAsIDM4NDE4LCAzODQyNiwgMzg0MzIsIDM4NDM3LCAzODQ0NiwgMTQ1MzAsIAorICAgIDM4NDUyLCAzODQ2MSwgMzg0NjYsIDM4NDczLCAzODQ4MCwgMzg0ODgsIDM4NDk2LCAzODUwNCwgMzg1MDksIDM4NTE2LCAKKyAgICAzODUyMywgMzg1MzAsIDM4NTM3LCAzODU0NCwgMzg1NDksIDM4NTU1LCAzODU3MiwgMzg1ODAsIDM4NTkwLCAzODU5OCwgCisgICAgMzg2MDUsIDQxNCwgMzg2MDksIDM4NjE1LCAzODYxOSwgMzg2MjQsIDM2MjM1LCAzODYzMCwgMzg2MzMsIDM4NjM3LCAKKyAgICAzODY0OCwgMzg2NTYsIDM3ODYsIDM4NjY0LCAzODY3MCwgMzg2NzYsIDM4Njg2LCAzODY5NSwgMzg3MDUsIDM4NzEyLCAKKyAgICAzODcxOCwgMzg3MjMsIDM3OTIsIDM3OTgsIDM4NzMyLCAzODczOSwgMzg3NDcsIDM4NzUyLCAzODc1NiwgMzg3NjMsIAorICAgIDM4NzcxLCAzODc3OCwgMzg3ODQsIDM4NzkzLCAzODgwMywgMzg4MDksIDM4ODE3LCAzODgyNiwgMzg4MzMsIDM4ODQxLCAKKyAgICAzODg0OCwgMjM3MjgsIDM4ODUyLCAzODg1OSwgMzg4NjUsIDM4ODc1LCAzODg4NCwgMzg4OTIsIDM4OTAzLCAzODkwNywgCisgICAgMzg5MTcsIDM4OTIzLCAzODkzMCwgMzg5MzgsIDM4OTQ3LCAzODk1NiwgMzg5NjYsIDM4OTc3LCAzODk4NCwgMzg5ODksIAorICAgIDM4OTk2LCAzMDg4LCAzOTAwNCwgMzkwMTAsIDM5MDE1LCAzOTAyMSwgMzkwMjcsIDM5MDMyLCAzOTA0NSwgMzkwNTgsIAorICAgIDM5MDcxLCAzOTA3OCwgMzkwODQsIDM5MDkyLCAzOTEwMCwgMzkxMDUsIDM5MTA5LCAxNDU1LCAzOTExMywgMzkxMTcsIAorICAgIDM5MTIxLCAzOTEyNSwgMzkxMjksIDM5MTMzLCAzOTEzNywgMzkxNDEsIDM5MTQ1LCAzOTE0OSwgMzkxNTMsIDM5MTU3LCAKKyAgICAzOTE2MSwgMzkxNjUsIDM5MTY5LCAzOTE3MywgMzkxNzcsIDM5MTgxLCAzOTE4NSwgMzkxODksIDM5MTkzLCAzOTE5NywgCisgICAgMzkyMDEsIDM5MjA1LCAzOTIwOSwgMzkyMTMsIDM5MjE3LCAzOTIyMSwgMzkyMjUsIDM5MjI5LCAzOTIzMywgMzkyMzcsIAorICAgIDM5MjQxLCAzOTI0NSwgMzkyNDksIDM5MjUzLCAzOTI1NywgMzkyNjEsIDM5MjY1LCAzOTI2OSwgMzkyNzMsIDM5Mjc3LCAKKyAgICAzOTI4MSwgMzkyODUsIDM5Mjg5LCAzOTI5MywgMzkyOTcsIDM5MzAxLCAzOTMwNSwgMzkzMDksIDM5MzEzLCAzOTMxNywgCisgICAgMzkzMjEsIDM5MzI1LCAzOTMyOSwgMzkzMzMsIDM5MzM3LCAzOTM0MSwgMzkzNDUsIDM5MzQ5LCAzOTM1MywgMzkzNTcsIAorICAgIDM5MzYxLCAzOTM2NSwgMzkzNjksIDM5MzczLCAzOTM3NywgMzkzODEsIDM5Mzg1LCAzOTM4OSwgMzkzOTMsIDM5Mzk3LCAKKyAgICAzOTQwMSwgMzk0MDUsIDM5NDA5LCAzOTQxMywgMzk0MTcsIDM5NDIxLCAzOTQyNSwgMzk0MjksIDM5NDMzLCAzOTQzNywgCisgICAgMzk0NDEsIDM5NDQ1LCAzOTQ0OSwgMzk0NTMsIDM5NDU3LCAzOTQ2MSwgMzk0NjUsIDM5NDY5LCAzOTQ3MywgMzk0NzcsIAorICAgIDM5NDgxLCAzOTQ4NSwgMzk0ODksIDM5NDkzLCAzOTQ5NywgMzk1MDEsIDM5NTA1LCAzOTUwOSwgMzk1MTMsIDM5NTE3LCAKKyAgICAzOTUyMSwgMzk1MjUsIDM5NTI5LCAzOTUzMywgMzk1MzcsIDM5NTQxLCAzOTU0NSwgMzk1NDksIDM5NTUzLCAzOTU1NywgCisgICAgMzk1NjEsIDM5NTY1LCAzOTU2OSwgMzk1NzMsIDM5NTc3LCAzOTU4MSwgMzk1ODUsIDM5NTg5LCAzOTU5MywgMzk1OTcsIAorICAgIDM5NjAxLCAzOTYwNSwgMzk2MDksIDM5NjEzLCAzOTYxNywgMzk2MjEsIDM5NjI1LCAzOTYyOSwgMzk2MzMsIDM5NjM3LCAKKyAgICAzOTY0MSwgMzk2NDUsIDM5NjQ5LCAzOTY1MywgMzk2NTcsIDM5NjYxLCAzOTY2NSwgMzk2NjksIDM5NjczLCAzOTY3NywgCisgICAgMzk2ODEsIDM5Njg1LCAzOTY4OSwgMzk2OTMsIDM5Njk3LCAzOTcwMSwgMzk3MDUsIDM5NzA5LCAzOTcxMywgMzk3MTcsIAorICAgIDM5NzIxLCAzOTcyNSwgMzk3MzAsIDM5NzM0LCAzOTczOSwgMzk3NDMsIDM5NzQ4LCAzOTc1MiwgMzk3NTcsIDM5NzYxLCAKKyAgICAzOTc2NywgMzk3NzIsIDM5Nzc2LCAzOTc4MSwgMzk3ODUsIDM5NzkwLCAzOTc5NCwgMzk3OTksIDM5ODAzLCAzOTgwOCwgCisgICAgMzk4MTIsIDM5ODE3LCAzOTgyMSwgMzk4MjYsIDM5ODMwLCAzOTgzNiwgMzk4NDIsIDM5ODQ3LCAzOTg1MSwgMzk4NTYsIAorICAgIDM5ODYwLCAzOTg2NiwgMzk4NzEsIDM5ODc1LCAzOTg4MCwgMzk4ODQsIDM5ODg5LCAzOTg5MywgMzk4OTksIDM5OTA0LCAKKyAgICAzOTkwOCwgMzk5MTMsIDM5OTE3LCAzOTkyMiwgMzk5MjYsIDM5OTMxLCAzOTkzNSwgMzk5NDEsIDM5OTQ2LCAzOTk1MCwgCisgICAgMzk5NTUsIDM5OTU5LCAzOTk2NSwgMzk5NzAsIDM5OTc0LCAzOTk3OSwgMzk5ODMsIDM5OTg4LCAzOTk5MiwgMzk5OTcsIAorICAgIDQwMDAxLCA0MDAwNiwgNDAwMTAsIDQwMDE2LCA0MDAyMSwgNDAwMjUsIDQwMDMxLCA0MDAzNiwgNDAwNDAsIDQwMDQ2LCAKKyAgICA0MDA1MSwgNDAwNTUsIDQwMDYwLCA0MDA2NCwgNDAwNjksIDQwMDczLCA0MDA3OSwgNDAwODUsIDQwMDkxLCA0MDA5NywgCisgICAgNDAxMDMsIDQwMTA5LCA0MDExNSwgNDAxMjEsIDQwMTI2LCA0MDEzMCwgNDAxMzUsIDQwMTM5LCA0MDE0NSwgNDAxNTAsIAorICAgIDQwMTU0LCA0MDE1OSwgNDAxNjMsIDQwMTY4LCA0MDE3MiwgNDAxNzcsIDQwMTgxLCA0MDE4NiwgNDAxOTAsIDQwMTk1LCAKKyAgICA0MDE5OSwgNDAyMDQsIDQwMjA4LCA0MDIxNCwgNDAyMTksIDQwMjIzLCA0MDIyOCwgNDAyMzIsIDQwMjM4LCA0MDI0NCwgCisgICAgNDAyNDksIDExNiwgNTcsIDQwMjUzLCA0MDI1NSwgNDAyNTksIDQwMjYzLCA0MDI2NywgNDAyNzIsIDQwMjc2LCA0MDI4MCwgCisgICAgMTAyNTEsIDQwMjg1LCA0MDI5MSwgMTc1NiwgNjU5NywgNDAyOTcsIDQwMzAwLCA0MDMwNSwgNDAzMDksIDQwMzE0LCAKKyAgICA0MDMxOCwgNDAzMjIsIDQwMzI3LCAxMTEyMSwgNDAzMzEsIDQwMzM1LCA0MDMzOSwgNTI1LCA0MDM0MywgMTY3ODMsIAorICAgIDQwMzQ4LCA0MDM1MiwgNDAzNTcsIDQwMzYyLCA0MDM2NywgNDAzNzEsIDQwMzc4LCAyODE4NiwgNDAzODQsIDQwMzg3LCAKKyAgICA0MDM5MSwgNDAzOTYsIDQwNDAyLCA0MDQwNiwgNDA0MDksIDQwNDE3LCA0MDQyMywgNDA0MjgsIDQwNDMyLCA0MDQzNSwgCisgICAgNDA0MzksIDQwNDQ1LCA0MDQ0OSwgNDA0NTMsIDM1ODQsIDM1ODksIDMxNTM3LCA0MDQ1NiwgNDA0NjAsIDQwNDY0LCAKKyAgICA0MDQ2OCwgNDA0NzIsIDQwNDgwLCA0MDQ4NywgNDA0OTEsIDE0NDgwLCA0MDQ5OCwgNDA1MDMsIDQwNTE3LCA0MDUyNCwgCisgICAgNDA1MzUsIDMzNSwgNDA1NDAsIDQwNTQ0LCA0MDU1MCwgNDA1NjIsIDQwNTY4LCA0MDU3NCwgMzE1NzQsIDQwNTc4LCAKKyAgICA0MDU4NCwgNDA1OTMsIDQwNTk3LCA0MDYwMSwgNDA2MDYsIDQwNjEyLCA0MDYxNywgNDA2MjEsIDQwNjI2LCA0MDYzMCwgCisgICAgNDA2MzQsIDQwNjQxLCA0MDY0NywgNDA2NTIsIDQwNjY3LCA0MDY4MiwgNDA2OTcsIDQwNzEzLCA0MDczMSwgMTEwNzEsIAorICAgIDQwNzQ1LCA0MDc1MiwgNDA3NTYsIDQwNzU5LCA0MDc2OCwgNDA3NzMsIDQwNzc3LCA0MDc4NSwgMTczMzMsIDQwNzkzLCAKKyAgICA0MDc5NywgNDA4MDcsIDQwODE4LCAzMTUwNywgNDA4MzEsIDQwODM1LCA0MDg0NCwgNDA4NjIsIDQwODgxLCA0MDg4OSwgCisgICAgMTA1MjUsIDExMjM0LCA0MDg5MywgMjQyNjEsIDQwODk2LCAzMjQ3NSwgNDA5MDEsIDEwNTI0LCA0MDkwNiwgNDA5MTIsIAorICAgIDQwOTE3LCA0MDkyMywgNDA5MjgsIDQwOTM0LCA0MDkzOSwgNDA5NDUsIDQwOTUwLCA0MDk1NiwgNDA5NjIsIDQwOTY4LCAKKyAgICA0MDk3MywgNDA5MjksIDQwOTM1LCA0MDk0MCwgNDA5NDYsIDQwOTUxLCA0MDk1NywgNDA5NjMsIDg1MDQsIDQwODksIAorICAgIDQwOTc3LCA0MDk4NSwgNDA5ODksIDQwOTkyLCA0MDk5NiwgNDEwMDEsIDQxMDA2LCA0MTAxMywgNDEwMTksIDQxMDI1LCAKKyAgICA0MTAzMCwgMTYxNzQsIDQxMDM0LCAyODAyMiwgNDEwMzgsIDQxMDQyLCA0MTA0NiwgNDEwNTIsIDQxMDU2LCAzMDA3NSwgCisgICAgNDEwNjUsIDk1NDQsIDQxMDY5LCA5OTM3LCA0MTA3MiwgNDEwNzksIDQxMDg1LCA0MTA4OSwgMTMwMDQsIDQxMDk2LCAKKyAgICA0MTEwMiwgNDExMDcsIDQxMTE0LCA0MTEyMSwgNDExMjgsIDMwNzgxLCA4NDEwLCA0MTEzNSwgNDExNDIsIDQxMTQ5LCAKKyAgICA0MTE1NSwgNDExNjAsIDQxMTY3LCA0MTE3OCwgNDExODQsIDQxMTg5LCA0MTE5NCwgNDExOTksIDQxMjAzLCA0MTIwOCwgCisgICAgNDEyMTUsIDQwOTMwLCA0MTIxOSwgNDEyMjksIDQxMjM4LCA0MTI0OSwgNDEyNTUsIDQxMjYzLCA0MTI3MCwgNDEyNzUsIAorICAgIDQxMjgwLCA0MTI4NSwgNDEyOTAsIDQxMjk1LCA0MTI5OSwgNDEzMDMsIDQxMzEwLCA0MTMxNiwgNDEzMjQsIDIzNTMsIAorICAgIDEwNTAsIDExMTM3LCAxMTE0OSwgMTExNTQsIDExMTYwLCA0MTMzMywgMTExNjUsIDExMTcwLCAxMTE3NiwgNDEzMzgsIAorICAgIDQxMzQ4LCA0MTM1MiwgMTExODEsIDQxMzU3LCAxODQ1MywgNDEzNjAsIDQxMzY1LCA0MTM2OSwgMzc0NjMsIDQxMzgwLCAKKyAgICA0MTM4NSwgNDEzOTIsIDQxMzk5LCA0MTQwMywgNDE0MDYsIDQxNDE0LCAxMTA4NCwgNDE0MjEsIDQxNDI0LCA0MTQzMCwgCisgICAgNDE0NDAsIDYyMzEsIDQxNDQ5LCA0MTQ1NSwgNDE0NTksIDQxNDY3LCA0MTQ3MSwgNDE0ODEsIDQxNDg3LCA0MTQ5MiwgCisgICAgNDE1MDMsIDQxNTEyLCA0MTUyMSwgNDE1MzAsIDQxNTM5LCA0MTU0OCwgNDE1NTcsIDQxNTY2LCA0MTU3MiwgNDE1NzgsIAorICAgIDQxNTgzLCA0MTU4OSwgNDE1OTUsIDQxNjAxLCA0MTYwNiwgNDE2MDksIDQxNjE2LCA0MTYyMiwgNDE2MjYsIDQxNjMxLCAKKyAgICA0MTYzOCwgNDE2NDUsIDQxNjQ5LCA0MTY1MiwgNDE2NjIsIDQxNjc1LCA0MTY4NCwgNDE2OTMsIDQxNzA0LCA0MTcxNywgCisgICAgNDE3MjksIDQxNzQwLCA0MTc0OSwgNDE3NjAsIDQxNzY1LCA0MTc3NCwgNDE3NzksIDExMTg2LCA0MTc4NSwgNDE3OTIsIAorICAgIDQxODAwLCA0MTgwNSwgNDE4MDksIDQxODE2LCA0MTgyMywgNDA0MSwgMjAsIDQxODI3LCA0MTgzMiwgMTgzMDIsIDQxODM2LCAKKyAgICA0MTgzOSwgNDE4NDIsIDMwMjU1LCA0MTg0NiwgMzA3OTAsIDQxODU0LCA0MTg1OCwgNDE4NjIsIDQxODY1LCA0MTg3MSwgCisgICAgNDE4NzcsIDMzNTI3LCA0MTg4MiwgNDE4OTAsIDQxODk2LCA0MTkwMywgMzAyMzgsIDQxOTA3LCAzMDQ0MSwgNDE5MTEsIAorICAgIDQxOTIwLCA0MTkyNCwgNDE5MzIsIDQxOTM4LCA0MTk0NCwgNDE5NDksIDQxOTUzLCAzMDgwOSwgNDE5NTksIDQxOTYyLCAKKyAgICA0MTk3MCwgNDE5NzgsIDQzNzksIDQxOTg0LCA0MTk4OCwgNDE5OTMsIDQyMDAwLCA0MjAwNiwgNDIwMTEsIDQyMDE2LCAKKyAgICA0MjAyMCwgNDIwMjYsIDQyMDMxLCA0MjAzNywgNDI5NywgOTQ0LCA0MjA0NCwgNDIwNDgsIDQyMDUxLCAxNjY2NCwgNDIwNjMsIAorICAgIDQyMDcxLCA0MjA3OSwgNDIwODcsIDQyMDk1LCA0MjEwMiwgNDIxMTAsIDQyMTE4LCA0MjEyNSwgNDIxMzMsIDQyMTQxLCAKKyAgICA0MjE0OSwgNDIxNTcsIDQyMTY1LCA0MjE3MywgNDIxODEsIDQyMTg5LCA0MjE5NywgNDIyMDUsIDQyMjEzLCA0MjIyMCwgCisgICAgNDIyMjgsIDQyMjM2LCA0MjI0NCwgNDIyNTIsIDQyMjYwLCA0MjI2OCwgNDIyNzYsIDQyMjg0LCA0MjI5MiwgNDIzMDAsIAorICAgIDQyMzA4LCA0MjMxNiwgNDIzMjQsIDQyMzMyLCA0MjM0MCwgNDIzNDgsIDQyMzU2LCA0MjM2NCwgNDIzNzIsIDQyMzc5LCAKKyAgICA0MjM4NywgNDIzOTQsIDQyNDAyLCA0MjQxMCwgNDI0MTgsIDQyNDI2LCA0MjQzNCwgNDI0NDIsIDQyNDUwLCA0MjQ1OCwgCisgICAgNDI0NjksIDIzNzY0LCA0MjQ3NCwgNDI0NzcsIDQyNDg0LCA0MjQ4OCwgNDI0OTQsIDQyNDk4LCA0MjUwNCwgNDI1MDksIAorICAgIDQyNTE1LCA0MjUyMCwgNDI1MjUsIDQyNTI5LCA0MjUzMywgNDI1MzgsIDQyNTQzLCA0MjU1MywgNDI1NTksIDQyNTcyLCAKKyAgICA0MjU3OCwgNDI1ODQsIDQyNTkwLCA0MjU5NywgNDI2MDIsIDQyNjA4LCA0MjYxMywgMTgxOTgsIDE0NTgsIDgzMSwgNDI2MTgsIAorICAgIDQyNjIxLCA0MjYyNCwgNDI2MjcsIDMzNjExLCAzMzYxNywgNDI2MzAsIDMzNjIzLCAzMzYzNiwgMzM2NDIsIDMzNjQ4LCAKKyAgICA0MjYzNiwgMzM2NTQsIDMzNjYwLCA0MjY0MiwgNDI2NDgsIDI2LCA0MjY1NiwgNDI2NjMsIDQyNjY3LCA0MjY3MSwgNDI2NzksIAorICAgIDM0NDAxLCA0MjY4MywgNDI2ODcsIDQyNjk0LCA0MjY5OSwgNDI3MDMsIDQyNzA4LCA0MjcxNCwgNDI3MTksIDQyNzI1LCAKKyAgICA0MjczMCwgNDI3MzQsIDQyNzM4LCA0Mjc0MiwgNDI3NDcsIDQyNzUxLCA0Mjc1NiwgNDI3NjAsIDQyNzY0LCA0Mjc3MSwgCisgICAgNDI3NzYsIDQyNzgwLCA0Mjc4NCwgNDI3ODksIDQyNzkzLCA0Mjc5OCwgNDI4MDIsIDQyODA2LCA0MjgxMSwgNDI4MTcsIAorICAgIDE2OTI0LCAxNjkyOSwgNDI4MjIsIDQyODI2LCA0MjgyOSwgNDI4MzMsIDQyODM3LCAyMjg1MiwgNDI4NDIsIDQyODQ2LCAKKyAgICA0Mjg1MiwgNDI4NTksIDQyODY1LCA0Mjg3MCwgNDI4ODAsIDQyODg1LCA0Mjg5MywgNDI4OTcsIDQyOTAwLCAzNDQxNiwgCisgICAgNDI5MDQsIDQzNTYsIDQyOTA5LCA0MjkxNCwgNDI5MTgsIDQyOTIzLCA0MjkyNywgNDI5MzIsIDE0NTQ4LCA0Mjk0MywgCisgICAgNDI5NDcsIDQyOTUwLCA0Mjk1NCwgNDI5NTksIDQyOTYzLCA0Mjk2OCwgNDI5NzMsIDQyOTc3LCA0Mjk4MSwgNDI5ODUsIAorICAgIDQyOTg4LCA0Mjk5MiwgODUyMywgMTQ1NjQsIDQyOTk1LCA0Mjk5OCwgNDMwMDQsIDQzMDA5LCA0MzAxNSwgNDMwMjAsIAorICAgIDQzMDI2LCA0MzAzMSwgNDMwMzcsIDQzMDQyLCA0MzA0OCwgNDMwNTQsIDQzMDYwLCA0MzA2NSwgNDMwNjksIDQzMDczLCAKKyAgICA0MzA4MiwgNDMwOTgsIDQzMTE0LCA0MzEyNCwgMzAxNDUsIDQzMTMxLCA0MzEzNSwgNDMxNDAsIDQzMTQ1LCA0MzE0OSwgCisgICAgNDMxNTMsIDM4OTUxLCA0MzE1OSwgNDMxNjQsIDQzMTY4LCA0MzE3NSwgNDMxODAsIDQzMTg1LCA0MzE4OSwgNDMxOTMsIAorICAgIDQzMTk5LCAyOTA5MywgNDMyMDMsIDIzMTM2LCA0MzIwOCwgNDMyMTUsIDQzMjIzLCA0MzIyOSwgNDMyMzYsIDQzMjQ0LCAKKyAgICA0MzI1MCwgNDMyNTQsIDQzMjU5LCA0MzI2NSwgNDMyNzMsIDQzMjc4LCA0MzI4MiwgNDMyOTEsIDEwMjMyLCA0MzI5OSwgCisgICAgNDMzMDMsIDQzMzExLCA0MzMxOCwgNDMzMjMsIDQzMzI4LCA0MzMzMywgNDMzMzcsIDQzMzQwLCA0MzM0NCwgNDMzNDcsIAorICAgIDQzMzUxLCA0MzM1OCwgNDMzNjMsIDQzMzY3LCA0MzM3MywgMjg0OTIsIDMzNjc0LCA0MzM3NywgNDMzODYsIDQzMzk0LCAKKyAgICA0MzQwMCwgNDM0MDcsIDQzNDEzLCA0MzQxOSwgNDM0MjQsIDQzNDI3LCA0MzQyOSwgNDM0MzYsIDQzNDQzLCA0MzQ0OSwgCisgICAgNDM0NTMsIDQzNDU2LCA0MzQ2MCwgNDM0NjQsIDQzNDY4LCA0MzQ3MywgNDM0NzcsIDQzNDgxLCA0MzQ4NCwgNDM0ODgsIAorICAgIDQzNTAyLCAyNDkwNiwgNDM1MjEsIDQzNTM0LCA0MzU0NywgNDM1NjAsIDI0OTI0LCA0MzU3NSwgMTE0MjIsIDQzNTkwLCAKKyAgICA0MzU5NiwgNDM2MDAsIDQzNjA0LCA0MzYwOCwgNDM2MTIsIDQzNjE5LCA0MzYyNCwgNDM2MjgsIDQzNjM1LCA0MzY0MSwgCisgICAgNDM2NDYsIDQzNjUyLCA0MzY2MiwgNDM2NzQsIDQzNjg1LCA0MzY5MCwgNDM2OTcsIDQzNzAxLCA0MzcwNSwgNDM3MDgsIAorICAgIDE3MzQzLCAzODU1LCA0MzcxNiwgMTY5NTEsIDQzNzI5LCA0MzczNiwgNDM3NDMsIDQzNzQ3LCA0Mzc1MSwgNDM3NTYsIAorICAgIDQzNzYyLCA0Mzc2NywgNDM3NzMsIDQzNzc3LCA0Mzc4MSwgNDM3ODQsIDQzNzg5LCA0Mzc5MywgNDM3OTgsIDgwODIsIAorICAgIDE2OTYyLCA0MzgwMywgNDM4MDcsIDQzODEzLCA0MzgyMiwgNDM4MjcsIDQzODM2LCA0Mzg0MywgMzg3OTksIDQzODQ5LCAKKyAgICA0Mzg1NCwgNDM4NTgsIDQzODYzLCA0Mzg3MCwgNDM4NzYsIDQzODgwLCA0Mzg4MywgNDM4ODcsIDQzODkyLCAxNTg2NCwgCisgICAgNDM4OTksIDQzOTA2LCA0MzkxMCwgNDM5MTMsIDQzOTE4LCA0MzkyMywgNDM5MjksIDQzOTM0LCA0MzkzOSwgNDM5NDMsIAorICAgIDQzOTQ4LCA0Mzk1OCwgNDM5NjMsIDQzOTY5LCA0Mzk3NCwgNDM5ODAsIDQzOTg1LCA0Mzk5MSwgNDQwMDEsIDQ0MDA2LCAKKyAgICA0NDAxMSwgNDQwMTUsIDQ0MDIwLCA3NTU4LCA3NTcwLCA0NDAyNSwgNDQwMjgsIDQ0MDM1LCA0NDA0MSwgNDQwNTAsIDk0NzcsIAorICAgIDM2NzYwLCA0NDA1OCwgNDQwNjIsIDQ0MDY2LCAzNDQ2NCwgNDQwNzQsIDQ0MDg1LCA0NDA5MywgMzg5OTksIDQ0MTAwLCAKKyAgICA0NDEwNSwgNDQxMTAsIDQ0MTIxLCA0NDEyOCwgNDQxMzksIDM0NDg4LCAyMzE0NywgNDQxNDcsIDkwNywgNDQxNTIsIAorICAgIDE0OTEzLCA0NDE1OCwgMzAyMjksIDQ0MTY0LCA0NDE2OSwgNDQxNzksIDQ0MTg4LCA0NDE5NSwgNDQyMDEsIDQ0MjA1LCAKKyAgICA0NDIwOCwgNDQyMTUsIDQ0MjIxLCA0NDIyOCwgNDQyMzQsIDQ0MjQ0LCA0NDI1MiwgNDQyNTgsIDQ0MjY0LCA0NDI2OSwgCisgICAgNDQyNzMsIDQ0MjgwLCA0NDI4NSwgNDQyOTEsIDQ0Mjk4LCA0NDMwNCwgNDM0NjksIDQ0MzA5LCA0NDMxMywgNTU4LCAKKyAgICAxNTAyOSwgNDQzMTksIDQ0MzI0LCA0NDMyNywgNDQzMzMsIDQ0MzQxLCAxMzgwLCA0NDM0NiwgNDQzNTAsIDQ0MzU1LCAKKyAgICA0NDM2MCwgNDQzNjUsIDQ0MzcyLCA0NDM3NiwgNDQzODEsIDQ0Mzg3LCA0NDM5MSwgMzM2ODQsIDQ0Mzk2LCA0NDQwMSwgCisgICAgNDQ0MTAsIDQ0NDE3LCA0NDQyNywgNDQ0MzMsIDMwMjczLCA0NDQ1MCwgNDQ0NTksIDQ0NDY3LCA0NDQ3MywgNDQ0NzgsIAorICAgIDQ0NDg1LCA0NDQ5MSwgNDQ0OTksIDQ0NTA4LCA0NDUxNiwgNDQ1MjAsIDQ0NTI1LCA0NDUzMywgMzEyNTEsIDM0NDk3LCAKKyAgICA0NDUzOSwgNDQ1NTgsIDE3MjU3LCA0NDU3MiwgNDQ1ODgsIDQ0NjAyLCA0NDYwOCwgNDQ2MTMsIDQ0NjE4LCA0NDYyMywgCisgICAgNDQ2MjksIDM0NTAzLCA0NDYzNCwgNDQ2MzcsIDQ0NjQ0LCA0NDY0OSwgNDQ2NTMsIDQwNCwgMjk5NSwgNDQ2NjAsIDQ0NjY1LCAKKyAgICA0NDY3MCwgMjk0NTEsIDQ0NDg4LCA0NDY3NCwgNDQ2NzksIDQ0Njg3LCA0NDY5MSwgNDQ2OTQsIDQ0Njk5LCA0NDcwNSwgCisgICAgNDQ3MTEsIDQ0NzE2LCA0NDcyMCwgMzAzMjgsIDQ0NzIzLCA0NDcyOCwgNDQ3MzIsIDQ0NzM1LCA0NDc0MCwgNDQ3NDQsIAorICAgIDQ0NzQ5LCA0NDc1NCwgNDQ3NTgsIDQ0NzYzLCA0NDc2NywgNDQ3NzEsIDQ0Nzc1LCAyMjg0OCwgMjI4NTksIDQ0NzgwLCAKKyAgICA0NDc4NSwgNDQ3OTEsIDQ0Nzk2LCA0NDgwMiwgMjkwNTAsIDQ0ODA3LCA0NDgxMSwgMjI5NDUsIDE3NTQ5LCA0NDgxNCwgCisgICAgNDQ4MTksIDQ0ODI0LCA0NDgyOSwgNDQ4MzQsIDQ0ODM5LCA0NDg0NCwgNDQ4NDksIDQ3NCwgNjgsIDMzNjk3LCAzMzcwMiwgCisgICAgMzM3MDcsIDMzNzEzLCAzMzcxOCwgMzM3MjMsIDQ0ODU0LCAzMzcyNywgNDQ4NTgsIDQ0ODYyLCA0NDg2NiwgMzM3MzIsIAorICAgIDMzNzM4LCA0NDg4MCwgMzM3NDksIDMzNzU0LCA0NDg4OCwgNDQ4OTMsIDMzNzYwLCA0NDg5OCwgNDQ5MDMsIDQ0OTA4LCAKKyAgICA0NDkxMywgNDQ5MTksIDQ0OTI1LCA0NDkzMSwgMzM3NzcsIDQ0OTQ0LCA0NDk1MywgNDQ5NTksIDMzNzgxLCA0NDk2MywgCisgICAgMzM3ODYsIDQ0OTY4LCAzMzc5MSwgMzM3OTYsIDQ0OTcxLCA0NDk3NiwgNDQ5ODAsIDQ0OTg2LCAzMzMzMiwgNDQ5OTMsIAorICAgIDE0Nzk0LCA0NTAwMCwgNDUwMDUsIDMzODAxLCA0NTAwOSwgNDUwMTQsIDQ1MDE5LCA0NTAyNCwgNDUwMjgsIDQ1MDMzLCAKKyAgICA0NTAzOCwgNDUwNDQsIDQ1MDQ5LCA0NTA1NCwgNDUwNjAsIDQ1MDY2LCA0NTA3MSwgNDUwNzUsIDQ1MDgwLCA0NTA4NSwgCisgICAgNDUwOTAsIDQ1MDk0LCA0NTA5OSwgNDUxMDQsIDQ1MTA5LCA0NTExNSwgNDUxMjEsIDQ1MTI3LCA0NTEzMiwgNDUxMzYsIAorICAgIDQ1MTQxLCA0NTE0NSwgMzM4MDUsIDMzODEwLCAzMzgxNSwgNDUxNDksIDQ1MTUzLCA0NTE1NywgMzM4MjAsIDMzODI2LCAKKyAgICAzMzgzMiwgMzM4NDQsIDQ1MTY5LCAyODA1OSwgNDUxNzMsIDQ1MTc4LCA0NTE4MiwgNDUxODcsIDQ1MTk0LCA0NTE5OSwgCisgICAgNDUyMDQsIDQ1MjA5LCA0NTIxMywgNDUyMTcsIDQ1MjI3LCA0NTIzMiwgNDUyMzcsIDQ1MjQxLCA0NTI0NSwgNDUyNDgsIAorICAgIDQ1MjU2LCAzMzg5MiwgNDUyNjEsIDE0NjUsIDQ1MjY3LCA0NTI3MiwgNDUyNzgsIDQ1Mjg2LCA0NTI5MCwgNDUyOTksIAorICAgIDQ1MzAzLCA0NTMwNywgNDUzMTUsIDQ1MzIxLCA0NTMyOSwgNDUzNDUsIDQ1MzQ5LCA0NTM1MywgNDUzNTcsIDQ1MzYyLCAKKyAgICA0NTM2OCwgNDUzODMsIDMzOTI5LCAxNzY0LCAxMzE5OCwgNDUzODcsIDEzNTksIDEzNzQsIDQ1Mzk5LCA0NTQwNywgNDU0MTQsIAorICAgIDQ1NDE5LCA0NTQyNiwgNDU0MzEsIDk5MjIsIDExMzksIDI1NDQsIDExMjEzLCA0NTQzOCwgOTgyMCwgNDU0NDMsIDQ1NDQ2LCAKKyAgICA0NTQ1NSwgMTI2NywgNDU0NjAsIDQzNjI1LCA0NTQ2NywgNDU0NzYsIDQ1NDgxLCA0NTQ4NSwgNDU0OTMsIDI0MzE3LCAKKyAgICAyNTk2LCA0NTUwMCwgMTE2NzgsIDQ1NTEwLCA0NTUxNiwgMjM3MSwgMjM4MSwgNDU1MjUsIDQ1NTM0LCA0NTU0NCwgNDU1NTUsIAorICAgIDMzNzYsIDM3MDk5LCA0NTU2MCwgMTEyNzcsIDQwMTksIDE4MjM2LCAxMjcyLCA0NTU2NCwgNDU1NzIsIDQ1NTc5LCA0NTU4NCwgCisgICAgNDU1ODgsIDQ1NTkyLCAyNTc5MiwgNDM4OTQsIDExMzA0LCA0NTYwMCwgNDU2MDksIDQ1NjE4LCA0NTYyNiwgNDU2MzMsIAorICAgIDQ1NjQ0LCA0NTY0OSwgNDU2NjIsIDQ1Njc1LCA0NTY4NywgNDU2OTksIDQ1NzExLCA0NTcyMiwgNDU3MzUsIDQ1NzQ2LCAKKyAgICA0NTc1NywgNDU3NjcsIDQ1Nzc1LCA0NTc4MywgNDU3OTUsIDQ1ODA3LCA0NTgxOCwgNDU4MjcsIDQ1ODM1LCA0NTg0MiwgCisgICAgNDU4NTQsIDQ1ODYxLCA0NTg2NywgNDU4NzYsIDQ1ODgzLCA0NTg5NiwgNDU5MDEsIDQ1OTExLCA0NTkxNiwgNDU5MjIsIAorICAgIDQ1OTI3LCA0MTA4NiwgNDU5MzEsIDQ1OTM4LCA0NTk0MiwgNDU5NDksIDQ1OTU3LCA0NTk2NCwgMjU1NywgNDU5NzEsIAorICAgIDQ1OTgyLCA0NTk5MiwgNDYwMDEsIDQ2MDA5LCA0NjAxOSwgNDYwMjcsIDQ2MDM3LCA0NjA0NiwgNDYwNTEsIDQ2MDU3LCAKKyAgICA0NjA2MywgMzg5OSwgNDYwNzQsIDQ2MDg0LCA0NjA5MywgNDYxMDIsIDQ2MTEwLCA0NjEyMCwgNDYxMjgsIDQ2MTM3LCAKKyAgICA0NjE0MiwgNDYxNDcsIDQ2MTUyLCAxNjk0LCA0NywgNDYxNjAsIDQ2MTY4LCA0NjE3OSwgNDYxOTAsIDE3ODc1LCA0NjIwMCwgCisgICAgNDYyMDQsIDQ2MjExLCA0NjIxNywgNDYyMjIsIDQ2MjI2LCA0NjIzNywgNDYyNDcsIDQ2MjU2LCA0NjI2NywgMTgyNzUsIAorICAgIDE4MjgwLCA0NjI3MiwgNDYyODEsIDQ2Mjg2LCA0NjI5NiwgNDYzMDEsIDQ2MzA5LCA0NjMxNywgNDYzMjQsIDQ2MzMwLCAKKyAgICAxNjU2LCAyNzcsIDQ2MzM0LCA0NjM0MCwgNDYzNDUsIDQ2MzQ4LCAyMTQzLCA0Mzc0OCwgNDYzNTYsIDQ2MzYwLCA0NjM2MywgCisgICAgMTUxMCwgNDYzNjksIDE1MjE0LCAxMjc3LCA0NjM3NCwgNDYzODcsIDQ2NDAxLCAyNjgyLCA0NjQxOSwgNDY0MzEsIDQ2NDQzLCAKKyAgICAyNjk2LCAyNzEzLCA0NjQ1NywgNDY0NzAsIDI3MjgsIDQ2NDg0LCA0NjQ5NiwgMjc0MywgNDY1MTAsIDEyODMsIDEyODksIAorICAgIDEyOTUsIDExNTg0LCA0NjUxNSwgNDY1MjAsIDQ2NTI1LCA0NjUyOSwgNDY1NDQsIDQ2NTU5LCA0NjU3NCwgNDY1ODksIAorICAgIDQ2NjA0LCA0NjYxOSwgNDY2MzQsIDQ2NjQ5LCA0NjY2NCwgNDY2NzksIDQ2Njk0LCA0NjcwOSwgNDY3MjQsIDQ2NzM5LCAKKyAgICA0Njc1NCwgNDY3NjksIDQ2Nzg0LCA0Njc5OSwgNDY4MTQsIDQ2ODI5LCA0Njg0NCwgNDY4NTksIDQ2ODc0LCA0Njg4OSwgCisgICAgNDY5MDQsIDQ2OTE5LCA0NjkzNCwgNDY5NDksIDQ2OTY0LCA0Njk3OSwgNDY5OTQsIDQ3MDA5LCA0NzAyNCwgNDcwMzksIAorICAgIDQ3MDU0LCA0NzA2OSwgNDcwODQsIDQ3MDk5LCA0NzExNCwgNDcxMjksIDQ3MTQ0LCA0NzE1OSwgNDcxNzQsIDQ3MTg5LCAKKyAgICA0NzIwNCwgNDcyMTksIDQ3MjM0LCA0NzI0OSwgNDcyNjQsIDQ3Mjc5LCA0NzI5NCwgNDczMDksIDQ3MzI0LCA0NzMzOSwgCisgICAgNDczNTQsIDQ3MzY5LCA0NzM4NCwgNDczOTksIDQ3NDE0LCA0NzQyOSwgNDc0NDQsIDQ3NDU5LCA0NzQ3NCwgNDc0ODksIAorICAgIDQ3NTA0LCA0NzUxOSwgNDc1MzQsIDQ3NTQ5LCA0NzU2NCwgNDc1NzksIDQ3NTk0LCA0NzYwOSwgNDc2MjQsIDQ3NjM5LCAKKyAgICA0NzY1NCwgNDc2NjksIDQ3Njg0LCA0NzY5OSwgNDc3MTQsIDQ3NzI5LCA0Nzc0NCwgNDc3NTksIDQ3Nzc0LCA0Nzc4OSwgCisgICAgNDc4MDQsIDQ3ODE5LCA0NzgzNCwgNDc4NDksIDQ3ODY0LCA0Nzg3OSwgNDc4OTQsIDQ3OTA5LCA0NzkyNCwgNDc5MzksIAorICAgIDQ3OTU0LCA0Nzk2OSwgNDc5ODQsIDQ3OTk5LCA0ODAxNCwgNDgwMjksIDQ4MDQ0LCA0ODA1OSwgNDgwNzQsIDQ4MDg5LCAKKyAgICA0ODEwNCwgNDgxMTksIDQ4MTM0LCA0ODE0OSwgNDgxNjQsIDQ4MTc5LCA0ODE5NCwgNDgyMDksIDQ4MjI0LCA0ODIzOSwgCisgICAgNDgyNTQsIDQ4MjY5LCA0ODI4NCwgNDgyOTksIDQ4MzE0LCA0ODMyOSwgNDgzNDQsIDQ4MzU5LCA0ODM3NCwgNDgzODksIAorICAgIDQ4NDA0LCA0ODQxOSwgNDg0MzQsIDQ4NDQ5LCA0ODQ2NCwgNDg0NzksIDQ4NDk0LCA0ODUwOSwgNDg1MjQsIDQ4NTM5LCAKKyAgICA0ODU1NCwgNDg1NjksIDQ4NTg0LCA0ODU5OSwgNDg2MTQsIDQ4NjI5LCA0ODY0NCwgNDg2NTksIDQ4Njc0LCA0ODY4OSwgCisgICAgNDg3MDQsIDQ4NzE5LCA0ODczNCwgNDg3NDksIDQ4NzY0LCA0ODc3OSwgNDg3OTQsIDQ4ODA5LCA0ODgyNCwgNDg4MzksIAorICAgIDQ4ODU0LCA0ODg2OSwgNDg4ODQsIDQ4ODk5LCA0ODkxNCwgNDg5MjksIDQ4OTQ0LCA0ODk1OSwgNDg5NzQsIDQ4OTg5LCAKKyAgICA0OTAwNCwgNDkwMTksIDQ5MDM0LCA0OTA0OSwgNDkwNjQsIDQ5MDc5LCA0OTA5NCwgNDkxMDksIDQ5MTI0LCA0OTEzOSwgCisgICAgNDkxNTQsIDQ5MTY5LCA0OTE4NCwgNDkxOTksIDQ5MjE0LCA0OTIyOSwgNDkyNDQsIDQ5MjU5LCA0OTI3NCwgNDkyODksIAorICAgIDQ5MzA0LCA0OTMxOSwgNDkzMzQsIDQ5MzQ5LCA0OTM2NCwgNDkzNzksIDQ5Mzk0LCA0OTQwOSwgNDk0MjQsIDQ5NDM5LCAKKyAgICA0OTQ1NCwgNDk0NjksIDQ5NDg0LCA0OTQ5OSwgNDk1MTQsIDQ5NTI5LCA0OTU0NCwgNDk1NTksIDQ5NTc0LCA0OTU4OSwgCisgICAgNDk2MDQsIDQ5NjE5LCA0OTYzNCwgNDk2NDksIDQ5NjY0LCA0OTY3OSwgNDk2OTQsIDQ5NzA5LCA0OTcyNCwgNDk3MzksIAorICAgIDQ5NzU0LCA0OTc2OSwgNDk3ODQsIDQ5Nzk5LCA0OTgxNCwgNDk4MjksIDQ5ODQ0LCA0OTg1OSwgNDk4NzQsIDQ5ODg5LCAKKyAgICA0OTkwNCwgNDk5MTksIDQ5OTM0LCA0OTk0OSwgNDk5NjQsIDQ5OTc5LCA0OTk5NCwgNTAwMDksIDUwMDI0LCA1MDAzOSwgCisgICAgNTAwNTQsIDUwMDY5LCA1MDA4NCwgNTAwOTksIDUwMTE0LCA1MDEyOSwgNTAxNDQsIDUwMTU5LCA1MDE3NCwgNTAxODksIAorICAgIDUwMjA0LCA1MDIxOSwgNTAyMzQsIDUwMjQ5LCA1MDI2NCwgNTAyNzksIDUwMjk0LCA1MDMwOSwgNTAzMjQsIDUwMzM5LCAKKyAgICA1MDM1NCwgNTAzNjksIDUwMzg0LCA1MDM5OSwgNTA0MTQsIDUwNDI5LCA1MDQ0NCwgNTA0NTksIDUwNDc0LCA1MDQ4OSwgCisgICAgNTA1MDQsIDUwNTE5LCA1MDUzNCwgNTA1NDksIDUwNTY0LCA1MDU3OSwgNTA1OTQsIDUwNjA5LCA1MDYyNCwgNTA2MzksIAorICAgIDUwNjU0LCA1MDY2OSwgNTA2ODQsIDUwNjk5LCA1MDcxNCwgNTA3MjksIDUwNzQ0LCA1MDc1OSwgNTA3NzQsIDUwNzg5LCAKKyAgICA1MDgwNCwgNTA4MTksIDUwODM0LCA1MDg0OSwgNTA4NjQsIDUwODc5LCA1MDg5NCwgNTA5MDksIDUwOTI0LCA1MDkzOSwgCisgICAgNTA5NTQsIDUwOTY5LCA1MDk4NCwgNTA5OTksIDUxMDE0LCA1MTAyOSwgNTEwNDQsIDUxMDU5LCA1MTA3NCwgNTEwODksIAorICAgIDUxMTA0LCA1MTExOSwgNTExMzQsIDUxMTQ5LCA1MTE2NCwgNTExNzksIDUxMTk0LCA1MTIwOSwgNTEyMjQsIDUxMjM5LCAKKyAgICA1MTI1NCwgNTEyNjksIDUxMjg0LCA1MTI5OSwgNTEzMTQsIDUxMzI5LCA1MTM0NCwgNTEzNTksIDUxMzc0LCA1MTM4OSwgCisgICAgNTE0MDQsIDUxNDE5LCA1MTQzNCwgNTE0NDksIDUxNDY0LCA1MTQ3OSwgNTE0OTQsIDUxNTA5LCA1MTUyNCwgNTE1MzksIAorICAgIDUxNTU0LCA1MTU2OSwgNTE1ODQsIDUxNTk5LCA1MTYxNCwgNTE2MjksIDUxNjQ0LCA1MTY1OSwgNTE2NzQsIDUxNjg5LCAKKyAgICA1MTcwNCwgNTE3MTksIDUxNzM0LCA1MTc0OSwgNTE3NjQsIDUxNzc5LCA1MTc5NCwgNTE4MDksIDUxODI0LCA1MTgzOSwgCisgICAgNTE4NTQsIDUxODY5LCA1MTg4NCwgNTE4OTksIDUxOTE0LCA1MTkyOSwgNTE5NDQsIDUxOTU5LCA1MTk3NCwgNTE5ODksIAorICAgIDUyMDA0LCA1MjAxOSwgNTIwMzQsIDUyMDQ5LCA1MjA2NCwgNTIwNzksIDUyMDk0LCA1MjEwOSwgNTIxMjQsIDUyMTM5LCAKKyAgICA1MjE1NCwgNTIxNjksIDUyMTg0LCA1MjE5OSwgNTIyMTQsIDUyMjI5LCA1MjI0NCwgNTIyNTksIDUyMjc0LCA1MjI4OSwgCisgICAgNTIzMDQsIDUyMzE5LCA1MjMzNCwgNTIzNDksIDUyMzY0LCA1MjM3OSwgNTIzOTQsIDUyNDA5LCA1MjQyNCwgNTI0MzksIAorICAgIDUyNDU0LCA1MjQ2OSwgNTI0ODQsIDUyNDk5LCA1MjUxNCwgNTI1MjksIDUyNTQ0LCA1MjU1OSwgNTI1NzQsIDUyNTg5LCAKKyAgICA1MjYwNCwgNTI2MTksIDUyNjM0LCA1MjY0OSwgNTI2NjQsIDUyNjc5LCA1MjY5NCwgNTI3MDksIDUyNzI0LCA1MjczOSwgCisgICAgNTI3NTQsIDUyNzY5LCA1Mjc4NCwgNTI3OTksIDUyODE0LCA1MjgyOSwgNTI4NDQsIDUyODU5LCA1Mjg3NCwgNTI4ODksIAorICAgIDUyOTA0LCA1MjkxOSwgNTI5MzQsIDUyOTQ5LCA1Mjk2NCwgNTI5NzksIDUyOTk0LCA1MzAwOSwgNTMwMjQsIDUzMDM5LCAKKyAgICA1MzA1NCwgNTMwNjksIDUzMDg0LCA1MzA5OSwgNTMxMTQsIDUzMTI5LCA1MzE0NCwgNTMxNTksIDUzMTc0LCA1MzE4OSwgCisgICAgNTMyMDQsIDUzMjE5LCA1MzIzNCwgNTMyNDksIDUzMjY0LCA1MzI3OSwgNTMyOTQsIDUzMzA5LCA1MzMyNCwgNTMzMzksIAorICAgIDUzMzU0LCA1MzM2OSwgNTMzODQsIDUzMzk5LCA1MzQxNCwgNTM0MjksIDUzNDQ0LCA1MzQ1OSwgNTM0NzQsIDUzNDg5LCAKKyAgICA1MzUwNCwgNTM1MTksIDUzNTM0LCA1MzU0OSwgNTM1NjQsIDUzNTc5LCA1MzU5NCwgNTM2MDksIDUzNjI0LCA1MzYzOSwgCisgICAgNTM2NTQsIDUzNjY5LCA1MzY4NCwgNTM2OTksIDUzNzE0LCA1MzcyOSwgNTM3NDQsIDUzNzU5LCA1Mzc3NCwgNTM3ODksIAorICAgIDUzODA0LCA1MzgxOSwgNTM4MzQsIDUzODQ5LCA1Mzg2NCwgNTM4NzksIDUzODk0LCA1MzkwOSwgNTM5MjQsIDUzOTM5LCAKKyAgICA1Mzk1NCwgNTM5NjksIDUzOTg0LCA1Mzk5OSwgNTQwMTQsIDU0MDI5LCA1NDA0NCwgNTQwNTksIDU0MDc0LCA1NDA4OSwgCisgICAgNTQxMDQsIDU0MTE5LCA1NDEzNCwgNTQxNDksIDU0MTY0LCA1NDE3OSwgNTQxOTQsIDU0MjA5LCA1NDIyNCwgNTQyMzksIAorICAgIDU0MjU0LCA1NDI2OSwgNTQyODQsIDU0Mjk5LCA1NDMxNCwgNTQzMjksIDU0MzQ1LCA1NDM2MSwgNTQzNzcsIDU0MzkzLCAKKyAgICA1NDQwOSwgNTQ0MjUsIDU0NDQxLCA1NDQ1NywgNTQ0NzMsIDU0NDg5LCA1NDUwNSwgNTQ1MjEsIDU0NTM3LCA1NDU1MywgCisgICAgNTQ1NjksIDU0NTg1LCA1NDYwMSwgNTQ2MTcsIDU0NjMzLCA1NDY0OSwgNTQ2NjUsIDU0NjgxLCA1NDY5NywgNTQ3MTMsIAorICAgIDU0NzI5LCA1NDc0NSwgNTQ3NjEsIDU0Nzc3LCA1NDc5MywgNTQ4MDksIDU0ODI1LCA1NDg0MSwgNTQ4NTcsIDU0ODczLCAKKyAgICA1NDg4OSwgNTQ5MDUsIDU0OTIxLCA1NDkzNywgNTQ5NTMsIDU0OTY5LCA1NDk4NSwgNTUwMDEsIDU1MDE3LCA1NTAzMywgCisgICAgNTUwNDksIDU1MDY1LCA1NTA4MSwgNTUwOTcsIDU1MTEzLCA1NTEyOSwgNTUxNDUsIDU1MTYxLCA1NTE3NywgNTUxOTMsIAorICAgIDU1MjA5LCA1NTIyNSwgNTUyNDEsIDU1MjU3LCA1NTI3MywgNTUyODksIDU1MzA1LCA1NTMyMSwgNTUzMzcsIDU1MzUzLCAKKyAgICA1NTM2OSwgNTUzODUsIDU1NDAxLCA1NTQxNywgNTU0MzMsIDU1NDQ5LCA1NTQ2NSwgNTU0ODEsIDU1NDk3LCA1NTUxMywgCisgICAgNTU1MjksIDU1NTQ1LCA1NTU2MSwgNTU1NzcsIDU1NTkzLCA1NTYwOSwgNTU2MjUsIDU1NjQxLCA1NTY1NywgNTU2NzMsIAorICAgIDU1Njg5LCA1NTcwNSwgNTU3MjEsIDU1NzM3LCA1NTc1MywgNTU3NjksIDU1Nzg1LCA1NTgwMSwgNTU4MTcsIDU1ODMzLCAKKyAgICA1NTg0OSwgNTU4NjUsIDU1ODgxLCA1NTg5NywgNTU5MTMsIDU1OTI5LCA1NTk0NSwgNTU5NjEsIDU1OTc3LCA1NTk5MywgCisgICAgNTYwMDksIDU2MDI1LCA1NjA0MSwgNTYwNTcsIDU2MDczLCA1NjA4OSwgNTYxMDUsIDU2MTIxLCA1NjEzNywgNTYxNTMsIAorICAgIDU2MTY5LCA1NjE4NSwgNTYyMDEsIDU2MjE3LCA1NjIzMywgNTYyNDksIDU2MjY1LCA1NjI4MSwgNTYyOTcsIDU2MzEzLCAKKyAgICA1NjMyOSwgNTYzNDUsIDU2MzYxLCA1NjM3NywgNTYzOTMsIDU2NDA5LCA1NjQyNSwgNTY0NDEsIDU2NDU3LCA1NjQ3MywgCisgICAgNTY0ODksIDU2NTA1LCA1NjUyMSwgNTY1MzcsIDU2NTUzLCA1NjU2OSwgNTY1ODUsIDU2NjAxLCA1NjYxNywgNTY2MzMsIAorICAgIDU2NjQ5LCA1NjY2NSwgNTY2ODEsIDU2Njk3LCA1NjcxMywgNTY3MjksIDU2NzQ1LCA1Njc2MSwgNTY3NzcsIDU2NzkzLCAKKyAgICA1NjgwOSwgNTY4MjUsIDU2ODQxLCA1Njg1NywgNTY4NzMsIDU2ODg5LCA1NjkwNSwgNTY5MjEsIDU2OTM3LCA1Njk1MywgCisgICAgNTY5NjksIDU2OTg1LCA1NzAwMSwgNTcwMTcsIDU3MDMzLCA1NzA0OSwgNTcwNjUsIDU3MDgxLCA1NzA5NywgNTcxMTMsIAorICAgIDU3MTI5LCA1NzE0NSwgNTcxNjEsIDU3MTc3LCA1NzE5MywgNTcyMDksIDU3MjI1LCA1NzI0MSwgNTcyNTcsIDU3MjczLCAKKyAgICA1NzI4OSwgNTczMDUsIDU3MzIxLCA1NzMzNywgNTczNTMsIDU3MzY5LCA1NzM4NSwgNTc0MDEsIDU3NDE3LCA1NzQzMywgCisgICAgNTc0NDksIDU3NDY1LCA1NzQ4MSwgNTc0OTcsIDU3NTEzLCA1NzUyOSwgNTc1NDUsIDU3NTYxLCA1NzU3NywgNTc1OTMsIAorICAgIDU3NjA5LCA1NzYyNSwgNTc2NDEsIDU3NjU3LCA1NzY3MywgNTc2ODksIDU3NzA1LCA1NzcyMSwgNTc3MzcsIDU3NzUzLCAKKyAgICA1Nzc2OSwgNTc3ODUsIDU3ODAxLCA1NzgxNywgNTc4MzMsIDU3ODQ5LCA1Nzg2NSwgNTc4ODEsIDU3ODk3LCA1NzkxMywgCisgICAgNTc5MjksIDU3OTQ1LCA1Nzk2MSwgNTc5NzcsIDU3OTkzLCA1ODAwOSwgNTgwMjUsIDU4MDQxLCA1ODA1NywgNTgwNzMsIAorICAgIDU4MDg5LCA1ODEwNSwgNTgxMjEsIDU4MTM3LCA1ODE1MywgNTgxNjksIDU4MTg1LCA1ODIwMSwgNTgyMTcsIDU4MjMzLCAKKyAgICA1ODI0OSwgNTgyNjUsIDU4MjgxLCA1ODI5NywgNTgzMTMsIDU4MzI5LCA1ODM0NSwgNTgzNjEsIDU4Mzc3LCA1ODM5MywgCisgICAgNTg0MDksIDU4NDI1LCA1ODQ0MSwgNTg0NTcsIDU4NDczLCA1ODQ4OSwgNTg1MDUsIDU4NTIxLCA1ODUzNywgNTg1NTMsIAorICAgIDU4NTY5LCA1ODU4NSwgNTg2MDEsIDU4NjE3LCA1ODYzMywgNTg2NDksIDU4NjY1LCA1ODY4MSwgNTg2OTcsIDU4NzEzLCAKKyAgICA1ODcyOSwgNTg3NDUsIDU4NzYxLCA1ODc3NywgNTg3OTMsIDU4ODA5LCA1ODgyNSwgNTg4NDEsIDU4ODU3LCA1ODg3MywgCisgICAgNTg4ODksIDU4OTA1LCA1ODkyMSwgNTg5MzcsIDU4OTUzLCA1ODk2OSwgNTg5ODUsIDU5MDAxLCA1OTAxNywgNTkwMzMsIAorICAgIDU5MDQ5LCA1OTA2NSwgNTkwODEsIDU5MDk3LCA1OTExMywgNTkxMjksIDU5MTQ1LCA1OTE2MSwgNTkxNzcsIDU5MTkzLCAKKyAgICA1OTIwOSwgNTkyMjUsIDU5MjQxLCA1OTI1NywgNTkyNzMsIDU5Mjg5LCA1OTMwNSwgNTkzMjEsIDU5MzM3LCA1OTM1MywgCisgICAgNTkzNjksIDU5Mzg1LCA1OTQwMSwgNTk0MTcsIDU5NDMzLCA1OTQ0OSwgNTk0NjUsIDU5NDgxLCA1OTQ5NywgNTk1MTMsIAorICAgIDU5NTI5LCA1OTU0NSwgNTk1NjEsIDU5NTc3LCA1OTU5MywgNTk2MDksIDU5NjI1LCA1OTY0MSwgNTk2NTcsIDU5NjczLCAKKyAgICA1OTY4OSwgNTk3MDUsIDU5NzIxLCA1OTczNywgNTk3NTMsIDU5NzY5LCA1OTc4NSwgNTk4MDEsIDU5ODE3LCA1OTgzMywgCisgICAgNTk4NDksIDU5ODY1LCA1OTg4MSwgNTk4OTcsIDU5OTEzLCA1OTkyOSwgNTk5NDUsIDU5OTYxLCA1OTk3NywgNTk5OTMsIAorICAgIDYwMDA5LCA2MDAyNSwgNjAwNDEsIDYwMDU3LCA2MDA3MywgNjAwODksIDYwMTA1LCA2MDEyMSwgNjAxMzcsIDYwMTUzLCAKKyAgICA2MDE2OSwgNjAxODUsIDYwMjAxLCA2MDIxNywgNjAyMzMsIDYwMjQ5LCA2MDI2NSwgNjAyODEsIDYwMjk3LCA2MDMxMywgCisgICAgNjAzMjksIDYwMzQ1LCA2MDM2MSwgNjAzNzcsIDYwMzkzLCA2MDQwOSwgNjA0MjUsIDYwNDQxLCA2MDQ1NywgNjA0NzMsIAorICAgIDYwNDg5LCA2MDUwNSwgNjA1MjEsIDYwNTM3LCA2MDU1MywgNjA1NjksIDYwNTg1LCA2MDYwMSwgNjA2MTcsIDYwNjMzLCAKKyAgICA2MDY0OSwgNjA2NjUsIDYwNjgxLCA2MDY5NywgNjA3MTMsIDYwNzI5LCA2MDc0NSwgNjA3NjEsIDYwNzc3LCA2MDc5MywgCisgICAgNjA4MDksIDYwODI1LCA2MDg0MSwgNjA4NTcsIDYwODczLCA2MDg4OSwgNjA5MDUsIDYwOTIxLCA2MDkzNywgNjA5NTMsIAorICAgIDYwOTY5LCA2MDk4NSwgNjEwMDEsIDYxMDE3LCA2MTAzMywgNjEwNDksIDYxMDY1LCA2MTA4MSwgNjEwOTcsIDYxMTEzLCAKKyAgICA2MTEyOSwgNjExNDUsIDYxMTYxLCA2MTE3NywgNjExOTMsIDYxMjA5LCA2MTIyNSwgNjEyNDEsIDYxMjU3LCA2MTI3MywgCisgICAgNjEyODksIDYxMzA1LCA2MTMyMSwgNjEzMzcsIDYxMzUzLCA2MTM2OSwgNjEzODUsIDYxNDAxLCA2MTQxNywgNjE0MzMsIAorICAgIDYxNDQ5LCA2MTQ2NSwgNjE0ODEsIDYxNDk3LCA2MTUxMywgNjE1MjksIDYxNTQ1LCA2MTU2MSwgNjE1NzcsIDYxNTkzLCAKKyAgICA2MTYwOSwgNjE2MjUsIDYxNjQxLCA2MTY1NywgNjE2NzMsIDYxNjg5LCA2MTcwNSwgNjE3MjEsIDYxNzM3LCA2MTc1MywgCisgICAgNjE3NjksIDYxNzg1LCA2MTgwMSwgNjE4MTcsIDYxODMzLCA2MTg0OSwgNjE4NjUsIDYxODgxLCA2MTg5NywgNjE5MTMsIAorICAgIDYxOTI5LCA2MTk0NSwgNjE5NjEsIDYxOTc3LCA2MTk5MywgNjIwMDksIDYyMDI1LCA2MjA0MSwgNjIwNTcsIDYyMDczLCAKKyAgICA2MjA4OSwgNjIxMDUsIDYyMTIxLCA2MjEzNywgNjIxNTMsIDYyMTY5LCA2MjE4NSwgNjIyMDEsIDYyMjE3LCA2MjIzMywgCisgICAgNjIyNDksIDYyMjY1LCA2MjI4MSwgNjIyOTcsIDYyMzEzLCA2MjMyOSwgNjIzNDUsIDYyMzYxLCA2MjM3NywgNjIzOTMsIAorICAgIDYyNDA5LCA2MjQyNSwgNjI0NDEsIDYyNDU3LCA2MjQ3MywgNjI0ODksIDYyNTA1LCA2MjUyMSwgNjI1MzcsIDYyNTUzLCAKKyAgICA2MjU2OSwgNjI1ODUsIDYyNjAxLCA2MjYxNywgNjI2MzMsIDYyNjQ5LCA2MjY2NSwgNjI2ODEsIDYyNjk3LCA2MjcxMywgCisgICAgNjI3MjksIDYyNzQ1LCA2Mjc2MSwgNjI3NzcsIDYyNzkzLCA2MjgwOSwgNjI4MjUsIDYyODQxLCA2Mjg1NywgNjI4NzMsIAorICAgIDYyODg5LCA2MjkwNSwgNjI5MjEsIDYyOTM3LCA2Mjk1MywgNjI5NjksIDYyOTg1LCA2MzAwMSwgNjMwMTYsIDE4MzA3LCAKKyAgICA2MzAyNSwgNjMwMzAsIDYzMDM2LCA2MzA0MiwgNjMwNTIsIDYzMDYwLCAxNjI3MCwgMTY4NjgsIDEwNzMzLCA2MzA3MywgCisgICAgMTUxOCwgMTUyMiwgNjMwODEsIDM5NzMsIDI5NTY2LCA3NTEyLCA2MzA4NywgNjMwOTIsIDYzMDk3LCA2MzEwMiwgNjMxMDcsIAorICAgIDYzMTEzLCA2MzExOCwgNjMxMjQsIDYzMTI5LCA2MzEzNSwgNjMxNDAsIDYzMTQ1LCA2MzE1MCwgNjMxNTUsIDYzMTYxLCAKKyAgICA2MzE2NiwgNjMxNzEsIDYzMTc2LCA2MzE4MSwgNjMxODYsIDYzMTkxLCA2MzE5NiwgNjMyMDIsIDYzMjA3LCA2MzIxMywgCisgICAgNjMyMjAsIDI2MDAsIDYzMjI1LCA2MzIzMSwgODkxMiwgNjMyMzUsIDYzMjQwLCA2MzI0NywgNjMyNTUsIDY1LCA2MzI1OSwgCisgICAgNjMyNjUsIDYzMjcwLCA2MzI3NSwgNjMyNzksIDYzMjg0LCA2MzI4OCwgNjMyOTIsIDExNjIxLCA2MzI5NiwgNjMzMDYsIAorICAgIDYzMzE5LCA2MzMzMCwgNjMzNDMsIDYzMzUwLCA2MzM1NiwgNjMzNjQsIDYzMzY5LCA2MzM3NSwgNjMzODEsIDYzMzg3LCAKKyAgICA2MzM5MiwgNjMzOTcsIDYzNDAyLCA2MzQwNywgNjM0MTEsIDYzNDE2LCA2MzQyMSwgNjM0MjYsIDYzNDMyLCA2MzQzOCwgCisgICAgNjM0NDQsIDYzNDQ5LCA2MzQ1MywgNjM0NTgsIDYzNDYzLCA2MzQ2NywgNjM0NzIsIDYzNDc3LCA2MzQ4MiwgNjM0ODYsIAorICAgIDExNjM3LCAxMTY0OCwgMTE2NTMsIDE1NjEsIDYzNDkwLCA2MzQ5NiwgMTU2NiwgNjM1MDEsIDYzNTA0LCAxNzc0MSwgCisgICAgNjM1MDksIDYzNTE1LCA2MzUyMCwgMTU5NywgNjM1MjYsIDE2MDMsIDE2MDksIDExNjgzLCA2MzUzMSwgNjM1NDAsIDYzNTQ4LCAKKyAgICA2MzU1NSwgNjM1NTksIDYzNTYzLCA2MzU2OSwgNjM1NzQsIDMzMzY1LCA2MzU3OSwgNjM1ODYsIDYzNTkzLCA2MzU5OCwgCisgICAgNjM2MDIsIDYzNjA2LCA2MzYxNSwgMTYxNCwgMTc4NTAsIDYzNjIwLCA2MzYyNCwgMTc4NjEsIDExNjIsIDYzNjI4LCAKKyAgICA2MzYzNSwgNjM2NDAsIDYzNjQ0LCAxNzg5MSwgMTYxOCwgNDEyNDMsIDYzNjQ3LCA2MzY1MiwgNjM2NjIsIDYzNjcxLCAKKyAgICA2MzY3NiwgNjM2ODAsIDYzNjg2LCAxNjIzLCA0Mzg1NSwgNjM2OTEsIDYzNzAwLCA2MzcwNiwgNjM3MTEsIDYzNzE2LCAKKyAgICAxMTg4MiwgMTE4ODgsIDYzNzIyLCA2MzczNCwgNjM3NTEsIDYzNzY4LCA2Mzc4NSwgNjM4MDIsIDYzODE5LCA2MzgzNiwgCisgICAgNjM4NTMsIDYzODcwLCA2Mzg4NywgNjM5MDQsIDYzOTIxLCA2MzkzOCwgNjM5NTUsIDYzOTcyLCA2Mzk4OSwgNjQwMDYsIAorICAgIDY0MDIzLCA2NDA0MCwgNjQwNTcsIDY0MDc0LCA2NDA5MSwgNjQxMDgsIDY0MTI1LCA2NDE0MiwgNjQxNTksIDY0MTc2LCAKKyAgICA2NDE5MywgNjQyMTAsIDY0MjI3LCA2NDI0NCwgNjQyNjEsIDY0Mjc4LCA2NDI5NSwgNjQzMTIsIDY0MzI5LCA2NDM0NiwgCisgICAgNjQzNjMsIDY0MzgwLCA2NDM5NywgNjQ0MTQsIDY0NDMxLCA2NDQ0OCwgNjQ0NjUsIDY0NDgyLCA2NDQ5OSwgNjQ1MTYsIAorICAgIDY0NTMzLCA2NDU1MCwgNjQ1NjcsIDY0NTc4LCA2NDU4OCwgNjQ1OTMsIDE2MjgsIDY0NTk3LCA2NDYwMiwgNjQ2MDgsIAorICAgIDY0NjEzLCA2NDYxOCwgNjQ2MjUsIDk4MzksIDE2MzMsIDY0NjMxLCA2NDY0MCwgMjk4ODcsIDY0NjQ1LCA2NDY1NiwgCisgICAgMTE4OTksIDY0NjY2LCA2NDY3MSwgNjQ2NzcsIDY0NjgyLCA2NDY4OSwgNjQ2OTUsIDY0NzAwLCAxNjM4LCAxODE3NCwgCisgICAgNjQ3MDUsIDY0NzExLCAxMTkwOSwgMTY0MywgMTE5MTQsIDY0NzE3LCA2NDcyMiwgNjQ3MjgsIDY0NzMzLCA2NDczOCwgCisgICAgNjQ3NDMsIDY0NzQ4LCA2NDc1MywgNjQ3NTgsIDY0NzYzLCA2NDc2OCwgNjQ3NzQsIDY0NzgwLCA2NDc4NiwgNjQ3OTEsIAorICAgIDY0Nzk1LCA2NDgwMCwgNjQ4MDUsIDY0ODA5LCA2NDgxNCwgNjQ4MTksIDY0ODI0LCA2NDgyOSwgNjQ4MzMsIDY0ODM4LCAKKyAgICA2NDg0NCwgNjQ4NDksIDY0ODU0LCA2NDg1OCwgNjQ4NjMsIDY0ODY4LCA2NDg3NCwgNjQ4NzksIDY0ODg0LCA2NDg5MCwgCisgICAgNjQ4OTYsIDY0OTAxLCA2NDkwNSwgNjQ5MTAsIDY0OTE1LCA2NDkyMCwgNjQ5MjQsIDY0OTI5LCA2NDkzNCwgNjQ5MzksIAorICAgIDY0OTQ1LCA2NDk1MSwgNjQ5NTYsIDY0OTYwLCA2NDk2NCwgNjQ5NjksIDY0OTc0LCA2NDk3OSwgMzEzOTUsIDY0OTgzLCAKKyAgICA2NDk4OCwgNjQ5OTMsIDY0OTk5LCA2NTAwNCwgNjUwMDksIDY1MDEzLCA2NTAxOCwgNjUwMjMsIDY1MDI5LCA2NTAzNCwgCisgICAgNjUwMzksIDY1MDQ1LCA2NTA1MSwgNjUwNTYsIDY1MDYwLCA2NTA2NSwgNjUwNzAsIDY1MDc0LCA2NTA3OSwgNjUwODQsIAorICAgIDY1MDg5LCA2NTA5NSwgNjUxMDEsIDY1MTA2LCA2NTExMCwgNjUxMTUsIDY1MTIwLCA2NTEyNCwgNjUxMjksIDY1MTM0LCAKKyAgICA2NTEzOSwgNjUxNDQsIDY1MTQ4LCA2NTE1MSwgNjUxNTQsIDY1MTU5LCA2NTE2NCwgMzQwNTYsIDY1MTcxLCA2NTE3OSwgCisgICAgMzY5MSwgMjk4MzcsIDY1MTg1LCA2NTE5MiwgNjUxOTgsIDM4MzAsIDEyMDIwLCA2NTIwNCwgNjUyMTQsIDY1MjI5LCAKKyAgICA2NTIzNywgMTIwMjUsIDY1MjQ4LCA2NTI1MywgNjUyNjQsIDY1Mjc2LCA2NTI4OCwgNjUzMDAsIDI3MzQsIDY1MzEyLCAKKyAgICA2NTMxNywgNjUzMjksIDY1MzMzLCA2NTMzOSwgNjUzNDUsIDY1MzUwLCAxNjYwLCAxNzQxOCwgNjUzNTksIDY1MzY0LCAKKyAgICA0MzkxNCwgNjUzNjgsIDY1MzcyLCA2NTM3NywgNjUzODEsIDE4MzE1LCA2NTM4NiwgNjUzODksIDY1Mzk0LCA2NTQwMiwgCisgICAgNjU0MTAsIDE2NjQsIDEyMDYxLCAxMjA2NywgMTY2OSwgNjU0MTgsIDY1NDI1LCA2NTQzMCwgNjU0MzksIDY1NDQ5LCAKKyAgICA2NTQ1NiwgNjU0NjEsIDY1NDY2LCAxNjc0LCA2NTQ3MywgNjU0NzgsIDE4NDM1LCA2NTQ4MiwgNjU0ODcsIDY1NDk0LCAKKyAgICA2NTUwMCwgNjU1MDQsIDY1NTE1LCA2NTUyNSwgNjU1MzIsIDE4NDU3LCA5NzMzLCA5NzQwLCA0MDIyLCA0MDI4LCA2NTUzOSwgCisgICAgMTY3OSwgNjU1NDQsIDY1NTUwLCA2NTU1OCwgNjU1NjUsIDY1NTcxLCA2NTU3OCwgNjU1OTAsIDY1NTk2LCA2NTYwMSwgCisgICAgNjU2MTMsIDY1NjI0LCA2NTYzMywgNjU2NDMsIDM5NTIsIDY1NjUxLCAzMzE2NiwgMzMxNzUsIDE4NDk3LCAxNjg0LCAxNjg4LCAKKyAgICA2NTY2NCwgNjU2NzUsIDY1NjgwLCAxNjk4LCA2NTY4OCwgNjU2OTMsIDY1Njk4LCAxODU1NiwgNjU3MTAsIDY1NzEzLCAKKyAgICA2NTcxOSwgNjU3MjUsIDY1NzMwLCA2NTczOCwgMTcwMywgNjU3NDMsIDY1NzQ4LCA2NTc1NiwgNjU3NjQsIDY1NzcxLCAKKyAgICA2NTc4MCwgNjU3ODgsIDY1Nzk3LCAxNzA4LCA2NTgwMSwgMTcxMywgMjMwMTYsIDY1ODA2LCA2NTgxMywgMTg2MzAsIAorICAgIDY1ODIxLCA2NTgyNywgNjU4MzIsIDY1ODQwLCA2NTg0NywgNjU4NTUsIDY1ODY1LCA2NTg3NCwgNjU4ODQsIDY1ODkzLCAKKyAgICA2NTkwNCwgNjU5MTQsIDY1OTI0LCA2NTkzMywgNjU5NDMsIDY1OTU3LCA2NTk3MCwgNjU5NzksIDY1OTg3LCA2NTk5NywgCisgICAgNjYwMDYsIDY2MDE4LCA2NjAyOSwgNjYwNDAsIDY2MDUwLCAxNzk0OCwgNjYwNTUsIDEyMjEzLCA2NjA2NCwgNjYwNzAsIAorICAgIDY2MDc1LCA2NjA4MiwgNjYwODksIDY2MDk1LCAxNzYxNywgNjYxMDUsIDY2MTExLCA2NjExNiwgNjYxMjcsIDY2MTMyLCAKKyAgICA2NjE0MCwgMTIyMzAsIDEyMjM1LCA2NjE0OCwgNjYxNTQsIDY2MTU4LCA2NjE2NiwgNDAxNywgMTg2OTIsIDQ0MDA3LCAKKyAgICA2NjE3MSwgNjYxNzcsIDY2MTgyLCA2NjE5MCwgNjYxOTcsIDEzMTc5LCA2NjIwMiwgNjYyMDgsIDE3MjQsIDY2MjEzLCAKKyAgICA2NjIxNiwgMTQzOCwgNjYyMjIsIDY2MjI3LCA2NjIzMiwgNjYyMzgsIDY2MjQzLCA2NjI0OCwgNjYyNTMsIDY2MjU4LCAKKyAgICA2NjI2MywgNjYyNjgsIDE3MzMsIDEzLCA2NjI3NCwgNjYyNzgsIDY2MjgzLCA2NjI4NywgNjYyOTEsIDY2Mjk1LCAzNDI5NiwgCisgICAgNjYzMDAsIDI1MDcwLCA2NjMwNSwgNjYzMTAsIDY2MzE0LCA2NjMxNywgNjYzMjEsIDY2MzI1LCA2NjMzMCwgNjYzMzQsIAorICAgIDY2MzM5LCA2NjM0MywgNjYzNDksIDM3NTE0LCAzNzUxOSwgMzc1MjQsIDY2MzUyLCA2NjM1OSwgNjYzNjUsIDY2MzczLCAKKyAgICA0MzY3OCwgNjYzODMsIDM3NTMwLCAzNDU2MCwgMzQzMTEsIDM0MzE3LCAzNzU0NiwgMzQzMjMsIDY2Mzg4LCA2NjM5MywgCisgICAgMzQ1OTMsIDY2Mzk3LCA2NjQwMCwgNjY0MDQsIDY2NDEyLCA2NjQxOSwgNjY0MjIsIDY2NDI3LCA2NjQzMiwgNjY0MzYsIAorICAgIDY2NDQwLCA2NjQ0MywgNjY0NTMsIDY2NDY1LCA2NjQ3MiwgNjY0NzgsIDM0MzI4LCA2NjQ4NSwgMzYwNzgsIDY2NDg4LCAKKyAgICA4OTI5LCAxMDE5LCA2NjQ5MSwgNjY0OTUsIDY2NTAwLCAzODczLCA2NjUwNCwgNjY1MDcsIDE0ODI3LCA2NjUxNCwgNjY1MjEsIAorICAgIDY2NTM0LCA2NjU0MiwgNjY1NTEsIDY2NTYwLCA2NjU2NSwgNjY1NzUsIDY2NTg4LCA2NjYwMCwgNjY2MDcsIDY2NjEyLCAKKyAgICA2NjYyMSwgNjY2MzQsIDM5MDM5LCA2NjY1MiwgNjY2NTcsIDY2NjY0LCA2NjY3MCwgNjY2NzUsIDgxOSwgNjY2ODAsIAorICAgIDY2Njg4LCA2NjY5NSwgNjY3MDIsIDI5MzkyLCA3ODMsIDY2NzA4LCA2NjcxNCwgNjY3MjQsIDY2NzMyLCA2NjczOCwgCisgICAgNjY3NDMsIDM0MzQ3LCA2MzEwLCAzNDM2MSwgNjY3NDcsIDY2NzU3LCA2Njc2MiwgNjY3NzIsIDY2Nzg3LCA2Njc5MywgCisgICAgNjY3OTksIDM0MzcxLCA2NjgwNCwgMzM0ODIsIDY2ODA4LCA2NjgxMywgNjY4MjAsIDY2ODI1LCA2NjgyOSwgNjY4MzQsIAorICAgIDE4NTAwLCA2Njg0MSwgNjY4NDYsIDY2ODUwLCA2MzUxLCAzNDM5NywgNjY4NTQsIDY2ODYwLCAzMjQsIDY2ODcwLCA2Njg3NywgCisgICAgNjY4ODQsIDY2ODg5LCA2Njg5OCwgNjM2NTYsIDY2OTA0LCA2NjkxMiwgNjY5MTYsIDY2OTIwLCA2NjkyNCwgNjY5MjgsIAorICAgIDY2OTMzLCA2NjkzNywgNjY5NDMsIDY2OTUxLCA2Njk1NiwgNjY5NjEsIDY2OTY2LCA2Njk3MCwgNjY5NzUsIDY2OTc5LCAKKyAgICA2Njk4MywgNjY5ODksIDY2OTk1LCA2NzAwMCwgNjcwMDQsIDY3MDA5LCAzNDUyMSwgNjcwMTMsIDM0NTI3LCAzNDUzMywgCisgICAgNjcwMTgsIDY3MDI0LCA2NzAzMSwgNjcwMzYsIDY3MDQwLCAzMzQ5OSwgMTgxNjcsIDY3MDQzLCA2NzA0NywgNjcwNTIsIAorICAgIDY3MDU5LCA2NzA2NSwgNjcwNjksIDY3MDc0LCA0MzM1MywgNjcwODAsIDY3MDg0LCA2NzA5MSwgNjcwOTUsIDY3MTAwLCAKKyAgICA2NzEwNiwgNjcxMTIsIDY3MTE4LCA2NzEzMCwgNjcxMzksIDY3MTQ5LCA2NzE1NSwgNjcxNjIsIDY3MTY3LCA2NzE3MiwgCisgICAgNjcxNzYsIDY3MTc5LCA2NzE4NSwgNjcxOTIsIDY3MTk3LCA2NzIwMiwgNjcyMDksIDY3MjE2LCA2NzIyMywgNjcyMjksIAorICAgIDY3MjM0LCA2NzIzOSwgNjcyNDcsIDM0NTM4LCAyNDYyLCA2NzI1MiwgNjcyNTcsIDY3MjYzLCA2NzI2OCwgNjcyNzQsIAorICAgIDY3Mjc5LCA2NzI4NCwgNjcyODksIDY3Mjk1LCAzNDU1OSwgNjczMDAsIDY3MzA2LCA2NzMxMiwgNjczMTgsIDM0NjI5LCAKKyAgICA2NzMyMywgNjczMjgsIDY3MzMzLCAzNDY0MCwgNjczMzgsIDY3MzQzLCA2NzM0OCwgNjczNTQsIDY3MzYwLCAzNDY0NSwgCisgICAgNjczNjUsIDY3MzcwLCA2NzM3NSwgMzQ3MDAsIDM0NzA2LCA2NzM4MCwgNjczODUsIDM0NzExLCAzNDczMywgMzAxMzYsIAorICAgIDM0NzM5LCAzNDc0MywgNjczOTAsIDEyOTA5LCA2NzM5NCwgNjc0MDIsIDY3NDA4LCA2NzQxNiwgNjc0MjMsIDY3NDI5LCAKKyAgICA2NzQzOSwgNjc0NDUsIDY3NDUyLCAxMTU1NiwgMzQ3NTcsIDY3NDU4LCA2NzQ3MSwgNjc0ODAsIDY3NDg2LCA2NzQ5NSwgCisgICAgNjc1MDEsIDI1MzgwLCA2NzUwOCwgNjc1MTUsIDY3NTI1LCA2NzUyOCwgMzQ3MDEsIDY3NTMzLCA2NzU0MCwgNjc1NDUsIAorICAgIDY3NTQ5LCA2NzU1MywgNjc1NTgsIDY3NTYyLCA0MTMzLCA2NzU2NywgNjc1NzIsIDY3NTc3LCAzNzYwOCwgMzc2MTMsIAorICAgIDY3NTgxLCAzNzYyNywgNjc1ODYsIDM3NjMyLCA2NzU5MSwgNjc1OTcsIDM3NjQ0LCAzNzY1MCwgMzc2NTYsIDY3NjAyLCAKKyAgICA2NzYwOCwgMjQzNjYsIDY3NjE5LCA2NzYyMiwgNjc2MzQsIDY3NjQyLCAzNDc4MCwgNjc2NDYsIDY3NjU1LCA2NzY2NSwgCisgICAgNjc2NzQsIDM0NzkwLCA2NzY3OSwgNjc2ODYsIDY3Njk1LCA2NzcwMSwgNjc3MDksIDY3NzE2LCA2NDAyLCA0NjczLCAKKyAgICA2NzcyMSwgMzQ3MTIsIDY3NzI3LCA2NzczMCwgNjc3MzYsIDY3NzQzLCA2Nzc0OCwgNjc3NTMsIDI1MjkwLCA2Nzc1NywgCisgICAgNjc3NjMsIDY3NzY5LCA2Nzc3NCwgNjc3NzksIDY3NzgzLCA2Nzc4OSwgNjc3OTUsIDM1OTg0LCAxMDQ4LCAzODY4OSwgCisgICAgNDA0MTksIDQwNDI1LCAzNDgyMSwgMzQ4MjYsIDY3ODAwLCA2NzgwNCwgNjc4MDgsIDY3ODExLCA2NzgyNCwgNjc4MzAsIAorICAgIDY3ODM0LCA2NzgzNywgNjc4NDIsIDM2MzIxLCA2Nzg0NiwgMzM1MDQsIDIyOTY2LCA2Nzg1MiwgNjMzMSwgNjMzOSwgOTU3MCwgCisgICAgNjc4NTUsIDY3ODYwLCA2Nzg2NSwgNjc4NzAsIDY3ODc1LCA2Nzg4MCwgNjc4ODUsIDY3ODkwLCA2Nzg5NSwgNjc5MDAsIAorICAgIDY3OTA2LCA2NzkxMSwgNjc5MTYsIDY3OTIyLCA2NzkyNywgNjc5MzIsIDY3OTM3LCA2Nzk0MiwgNjc5NDcsIDY3OTUyLCAKKyAgICA2Nzk1OCwgNjc5NjMsIDY3OTY5LCA2Nzk3NCwgNjc5NzksIDY3OTg0LCA2Nzk4OSwgNjc5OTQsIDY3OTk5LCA2ODAwNCwgCisgICAgNjgwMDksIDY4MDE0LCA2ODAxOSwgNjgwMjUsIDY4MDMwLCA2ODAzNSwgNjgwNDAsIDY4MDQ1LCA2ODA1MCwgNjgwNTUsIAorICAgIDY4MDYxLCA2ODA2NiwgNjgwNzEsIDY4MDc2LCA2ODA4MSwgNjgwODYsIDY4MDkxLCA2ODA5NiwgNjgxMDEsIDY4MTA2LCAKKyAgICA2ODExMiwgNjgxMTcsIDY4MTIyLCA2ODEyNywgNjgxMzIsIDY4MTM4LCA2ODE0NCwgNjgxNDksIDY4MTU1LCA2ODE2MCwgCisgICAgNjgxNjUsIDY4MTcwLCA2ODE3NSwgNjgxODAsIDE1MTEsIDE0NSwgNjgxODUsIDY4MTg5LCA2ODE5MywgNjgxOTcsIDI3MDc2LCAKKyAgICA2ODIwMSwgNjgyMDUsIDY4MjEwLCA2ODIxNCwgNjgyMTksIDY4MjIzLCA2ODIyOCwgNjgyMzMsIDY4MjM4LCA2ODI0MiwgCisgICAgNjgyNDYsIDY4MjUxLCA2ODI1NSwgMTQ1NDIsIDY4MjYwLCA2ODI2NCwgNjgyNzEsIDY4MjgxLCAxNjU5NSwgNjgyOTAsIAorICAgIDY4Mjk5LCA2ODMwMywgNjgzMDgsIDY4MzEzLCA2ODMxNywgNjgzMjEsIDI2ODcwLCAzMDc4LCA2ODMyNSwgNjgzMzEsIAorICAgIDE4OTY3LCA2ODMzNSwgNjgzNDQsIDY4MzUyLCA2ODM1OCwgNjgzNjMsIDY4Mzc1LCA2ODM4NywgNjgzOTIsIDY4Mzk2LCAKKyAgICA2ODQwMSwgNjg0MDUsIDY4NDExLCA2ODQxNywgNjg0MjIsIDY4NDMyLCA2ODQ0MiwgNjg0NDgsIDY4NDUzLCA2ODQ1NywgCisgICAgNjg0NjMsIDY4NDY4LCA2ODQ3NSwgNjg0ODEsIDY4NDg2LCA2ODQ5NSwgNjg1MDQsIDY4NTEyLCAxNjk5MywgNjg1MTYsIAorICAgIDY4NTI1LCA2ODUzMywgNjg1NDUsIDY4NTU2LCA2ODU2NywgNjg1NzYsIDY4NTgwLCA2ODU4OSwgNjg1OTcsIDY4NjA3LCAKKyAgICA2ODYxNSwgNjg2MjIsIDY4NjI4LCA2ODYzMywgNjg2MzksIDY4NjQ0LCA2ODY1NSwgNTQsIDMzMzA5LCA2ODY2MSwgMjgzMzEsIAorICAgIDI4MzQxLCA2ODY2NywgNjg2NzUsIDY4NjgyLCA2ODY4OCwgNjg2OTIsIDY4NzAyLCA2ODcxMywgNjg3MjEsIDY4NzMwLCAKKyAgICA2ODczNSwgNjg3NDAsIDY4NzQ1LCA2ODc0OSwgNjg3NTMsIDE4OTIxLCA2ODc2MSwgNjg3NjUsIDY4NzcxLCA2ODc4MSwgCisgICAgNjg3ODgsIDY4Nzk0LCA2ODgwMCwgMzc3MDcsIDY4ODA0LCA2ODgwNiwgNjg4MDksIDY4ODE1LCA2ODgxOSwgNjg4MzAsIAorICAgIDY4ODQwLCA2ODg0NiwgNjg4NTMsIDY4ODYwLCAxNDQ3OSwgNjg4NjgsIDY4ODc0LCA2ODg4MywgNjg4OTIsIDY4ODk4LCAKKyAgICAxMDYxNSwgNjg5MDQsIDY4OTEwLCA2ODkxNSwgNjg5MjAsIDY4OTI3LCA2ODkzMiwgNjg5MzksIDY4OTQ1LCA2ODk1MCwgCisgICAgNjg5NTgsIDY4OTcxLCA2ODk4MCwgNjU5MTksIDY1OTI5LCA2ODk4OSwgNjg5OTUsIDY5MDAxLCA2OTAwOCwgNjkwMTUsIAorICAgIDY5MDIyLCA2OTAyOSwgNjkwMzYsIDY5MDQxLCA2OTA0NSwgNjkwNDksIDY5MDUyLCA2OTA2MiwgNjkwNjYsIDY5MDc4LCAKKyAgICA2OTA4NywgNjkwOTEsIDY5MTAyLCA2OTEwNywgNjkxMTEsIDY1OTM4LCA2OTExNywgNjkxMjQsIDY5MTMzLCA2OTE0MSwgCisgICAgNjkxNDksIDY5MTU0LCA2OTE1OCwgNjkxNjMsIDY5MTY4LCA2OTE3OCwgNjkxODYsIDY5MTkxLCA2OTE5NSwgNjkxOTksIAorICAgIDY5MjA1LCA2OTIxMywgNjkyMjAsIDY5MjMyLCA2OTI0MCwgNjkyNTEsIDY5MjU4LCA2OTI2NCwgNjkyNzQsIDY5MjgwLCAKKyAgICA2OTI4NCwgNjkyOTEsIDY5Mjk3LCA2OTMwMiwgNjkzMDYsIDY5MzEwLCA2OTMxNCwgNjkzMjMsIDY5MzMyLCA2OTM0MSwgCisgICAgNjkzNDcsIDY5MzUzLCA2OTM1OSwgNjkzNjQsIDY5MzcxLCA2OTM3NywgNjkzODUsIDY5MzkyLCA2OTM5OCwgMTM2MjIsIAorICAgIDY5NDAzLCA2OTQwOSwgNjk0MTMsIDE1NTI5LCA2OTQxNywgNjk0MjIsIDY5NDMyLCA2OTQ0MSwgNjk0NDcsIDY5NDUzLCAKKyAgICA2OTQ2MSwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgNjk0ODIsIDY5NDkwLCA2OTQ5NywgNjk1MDMsIDY5NTE0LCA2OTUxOCwgCisgICAgNjk1MjIsIDY5NTI2LCA2OTUyOSwgNjk1MzUsIDY5NTQwLCA2OTU0NSwgNjk1NDksIDY5NTUzLCA2OTU2MiwgNjk1NzAsIAorICAgIDY5NTc3LCA2OTU4MywgNjk1OTAsIDI1OTYzLCA0MzQyMiwgNjk1OTUsIDY5NjAzLCA2OTYwNywgNjk2MTEsIDY5NjE0LCAKKyAgICA2OTYyMiwgNjk2MjksIDY5NjM1LCA2OTY0NCwgNjk2NTIsIDY5NjU4LCA2OTY2MywgNjk2NjcsIDY5NjcyLCA2OTY3NywgCisgICAgNjk2ODEsIDY5Njg1LCA2OTY4OSwgNjk2OTQsIDY5NzAzLCA2OTcwNywgNjk3MTQsIDQwNTI4LCA2OTcxOCwgNjk3MjQsIAorICAgIDY5NzI4LCA2OTczNiwgNjk3NDIsIDY5NzQ3LCA2OTc1OCwgNjk3NjYsIDY5NzcyLCA2OTc4MSwgMjQ1MTMsIDY5Nzg5LCAKKyAgICA2OTc5NiwgNjk4MDMsIDY5ODEwLCA2OTgxNywgNjk4MjQsIDQ2NzA0LCAxNDMxNywgNjk4MzEsIDY5ODM4LCA2OTg0MywgCisgICAgMzc3NDMsIDY1MjksIDY5ODQ5LCA2OTg1NCwgNjk4NTksIDY5ODY1LCA2OTg3MSwgNjk4NzcsIDY5ODgyLCA2OTg4NywgCisgICAgNjk4OTIsIDY5ODk3LCA2OTkwMywgNjk5MDgsIDY5OTE0LCA2OTkxOSwgNjk5MjUsIDY5OTMwLCA2OTkzNSwgNjk5NDAsIAorICAgIDY5OTQ1LCA2OTk1MCwgNjk5NTUsIDY5OTYwLCA2OTk2NiwgNjk5NzEsIDY5OTc3LCA2OTk4MiwgNjk5ODcsIDY5OTkyLCAKKyAgICA2OTk5NywgNzAwMDIsIDcwMDA3LCA3MDAxMywgNzAwMTgsIDcwMDIzLCA3MDAyOCwgNzAwMzMsIDcwMDM4LCA3MDA0MywgCisgICAgNzAwNDgsIDcwMDUzLCA3MDA1OCwgNzAwNjMsIDcwMDY5LCA3MDA3NCwgNzAwNzksIDcwMDg0LCA3MDA4OSwgNzAwOTQsIAorICAgIDcwMDk5LCA3MDEwNCwgNzAxMDksIDcwMTE1LCA3MDEyMCwgNzAxMjUsIDcwMTMwLCA3MDEzNSwgNzAxNDAsIDcwMTQ1LCAKKyAgICA3MDE1MCwgNzAxNTUsIDcwMTYwLCA3MDE2NSwgNzAxNzAsIDcwMTc1LCA3MDE4MSwgMTg1NCwgMjYwLCA3MDE4NiwgNDEzNjEsIAorICAgIDcwMTkwLCA3MDE5MywgNzAxOTgsIDcwMjAyLCA3MDIwNSwgMzQxNSwgNzAyMTAsIDcwMjE1LCA3MDIxOSwgNzAyMjgsIAorICAgIDcwMjM5LCA3MDI1NiwgNzAyNzQsIDY5MTQ1LCA3MDI4MiwgNzAyODUsIDcwMjk1LCA3MDMwMiwgNzAzMTEsIDcwMzI3LCAKKyAgICA3MDMzNiwgNzAzNDYsIDcwMzUxLCA3MDM2MSwgNzAzNzAsIDcwMzc4LCA3MDM5MiwgNzA0MDAsIDcwNDA0LCA3MDQwNywgCisgICAgNzA0MTQsIDcwNDIwLCA3MDQzMSwgNzA0MzgsIDcwNDUwLCA3MDQ2MSwgNzA0NzIsIDcwNDgxLCA3MDQ4OCwgMTI3OCwgNzEwLCAKKyAgICA3MDQ5OCwgMjYyOSwgNzA1MDIsIDcwNTA3LCA3MDUxNiwgOTIyMSwgMTg4OTQsIDIyNDcxLCA3MDUyNCwgNzA1MzIsIAorICAgIDcwNTQ2LCA3MDU1OSwgNzA1NjMsIDcwNTY4LCA3MDU3MywgNzA1NzgsIDcwNTg0LCA3MDU5MCwgNzA1OTUsIDg5MjEsIAorICAgIDE2NjIzLCA3MDYwMCwgNzA2MDQsIDcwNjEyLCAxMjA2MiwgNzA2MTcsIDcwNjIzLCA3MDYzMiwgNzA2NDAsIDE3MzYsIAorICAgIDEyMDc0LCA5MDgsIDY0NjUsIDcwNjQ0LCA3MDY0OCwgNzA2NTcsIDcwNjY3LCAyNDE5LCAyOTEyNywgNzA2NzYsIDcwNjgyLCAKKyAgICAxODQwNywgMjkxNDIsIDcwNjg4LCA0MTkzLCAxMjQ1MiwgNzA2OTQsIDcwNzAxLCA2NTY3MCwgNzA3MDUsIDcwNzA5LCAKKyAgICA3MDcxNSwgNzA3MjAsIDcwNzI1LCAzNjM0LCAxNTQsIDE1NDM3LCA3MDczMCwgNzA3NDIsIDcwNzQ2LCA3MDc1MiwgNzA3NTcsIAorICAgIDI5OTA3LCA3MDc2MSwgMTI0NDAsIDI3NjksIDQsIDcwNzY2LCA3MDc3NiwgNzA3ODcsIDcwNzkzLCA3MDgwNCwgNzA4MTEsIAorICAgIDcwODE3LCA3MDgyMywgNzA4MzEsIDcwODM4LCA3MDg0NCwgNzA4NTQsIDcwODY0LCA3MDg3NCwgNzA4ODMsIDI1MzY3LCAKKyAgICAxMjkwLCA3MDg4OCwgNzA4OTIsIDcwODk2LCA3MDkwMiwgNzA5MDYsIDI3OTIsIDI3OTgsIDg5MTgsIDIyOTQsIDcwOTEwLCAKKyAgICA3MDkxNCwgNzA5MjMsIDcwOTMxLCA3MDk0MiwgNzA5NTAsIDcwOTU4LCA3MDk2NCwgNzA5NjksIDcwOTgwLCA3MDk5MSwgCisgICAgNzA5OTksIDcxMDA1LCA3MTAxMCwgMTA0MzQsIDcxMDIwLCA3MTAyOCwgNzEwMzIsIDcxMDM2LCA3MTA0MSwgNzEwNDUsIAorICAgIDcxMDU3LCAzMDMxNCwgMTY1NDgsIDcxMDY0LCA3MTA3NCwgNzEwODAsIDcxMDg2LCAxMDUzNiwgNzEwOTYsIDcxMTA3LCAKKyAgICA3MTExOCwgNzExMjgsIDcxMTM3LCA3MTE0MSwgNzExNDgsIDE3NTAsIDk5NiwgNzExNTgsIDcxMTYzLCA3MTE3MSwgNjU0ODMsIAorICAgIDcxMTc5LCA3MTE4NCwgNzExOTUsIDcxMjAyLCA3MTIxNiwgMTUzNjYsIDQ3OCwgNzEyMjYsIDcxMjMwLCA3MTIzNCwgCisgICAgNzEyNDIsIDcxMjUxLCA3MTI1OSwgNzEyNjUsIDcxMjc5LCA3MTI4NiwgNzEyOTIsIDcxMzAxLCA3MTMwOCwgNzEzMTgsIAorICAgIDcxMzI2LCA3MTMzMywgNzEzNDEsIDcxMzQ4LCA0MDI0LCAxNDksIDcxMzU2LCA3MTM2NywgNzEzNzEsIDcxMzgzLCA3MTM4OSwgCisgICAgMTI2MzMsIDE5MiwgNzEzOTQsIDk4NzEsIDcxMzk5LCA3MTQwMywgNzE0MTAsIDcxNDE2LCA3MTQyNCwgNzE0MzEsIDkyODAsIAorICAgIDcxNDM4LCA3MTQ0NywgNzE0NTUsIDQwOTMsIDcxNDY4LCA0MTEwLCA3MTQ3MiwgMjg0MiwgNTE0LCA3MTQ3NywgNzE0OTAsIAorICAgIDcxNDk0LCA3MTQ5OSwgMjg0NywgMTg1MywgODA5LCA3MTUwMywgNDExNCwgNzE1MTEsIDcxNTE3LCA3MTUyMSwgODY2LCAKKyAgICA3MTUzMSwgNzE1NDAsIDcxNTQ1LCAzNjUxLCA3MTU0OSwgMTYzMDQsIDE2MzExLCA1MDA2NiwgNzE1NTMsIDQxNDUsIDQwMzQsIAorICAgIDE0MjAwLCA3MTU2MSwgNzE1NjgsIDcxNTczLCAyNTQzMSwgNzE1NzcsIDcxNTg0LCA3MTU5MCwgNzE1OTUsIDcxNjAwLCAKKyAgICAxNjMyNCwgMTg2LCA3MTYwNSwgNzE2MTcsIDcxNjIzLCA3MTYzMSwgMjg1OSwgMTc2OCwgNzE2MzksIDcxNjQxLCA3MTY0NiwgCisgICAgNzE2NTEsIDcxNjU2LCA3MTY2MiwgNzE2NjcsIDcxNjcyLCA3MTY3NywgNzE2ODIsIDcxNjg3LCA3MTY5MiwgNzE2OTgsIAorICAgIDcxNzAzLCA3MTcwOCwgNzE3MTMsIDcxNzE4LCA3MTcyMywgNzE3MjgsIDcxNzMzLCA3MTczOCwgNzE3NDQsIDcxNzQ5LCAKKyAgICA3MTc1NCwgNzE3NTksIDcxNzY1LCA3MTc3MCwgNzE3NzYsIDcxNzgxLCA3MTc4NiwgNzE3OTEsIDcxNzk2LCA3MTgwMSwgCisgICAgNzE4MDYsIDcxODExLCA3MTgxNywgNzE4MjIsIDcxODI4LCA3MTgzMywgNzE4MzgsIDcxODQzLCA3MTg0OCwgNzE4NTMsIAorICAgIDcxODU4LCA3MTg2MywgNzE4NjgsIDcxODc0LCA3MTg4MCwgNzE4ODUsIDcxODkwLCA3MTg5NiwgNzE5MDEsIDcxOTA1LCAKKyAgICA3MTkwOSwgNzE5MTQsIDcxOTIwLCA3MTkyNCwgNzE5MzAsIDcxOTM1LCA3MTk0MCwgNzE5NDYsIDcxOTUxLCA3MTk1NSwgCisgICAgNzE5NjAsIDcxOTY1LCA3MTk2OSwgNzE5NzIsIDcxOTc0LCA3MTk3OCwgNzE5ODEsIDcxOTg4LCA3MTk5MywgNzE5OTcsIAorICAgIDcyMDAyLCA3MjAwNiwgNzIwMTAsIDcyMDE0LCA3MjAyMywgNzIwMjcsIDM1MDI2LCA3MjAzMCwgMzUwMzEsIDcyMDM3LCAKKyAgICA3MjA0MiwgMzUwMzYsIDcyMDUxLCA3MjA2MCwgMzUwNDIsIDcyMDY1LCAzNTA0NywgNzIwNzQsIDcyMDc5LCAxMjY3NiwgCisgICAgNzIwODMsIDcyMDg4LCA3MjA5MywgMzUwNTIsIDcyMDk3LCA0NDkyMSwgNzIxMDEsIDcyMTA0LCA3MjEwOCwgODU4OSwgCisgICAgNzIxMTQsIDcyMTE3LCA3MjEyMiwgNzIxMjYsIDM4ODgsIDM1MDU3LCA3MjEyOSwgNzIxMzMsIDcyMTM2LCA3MjE0MSwgCisgICAgNzIxNDUsIDcyMTUxLCA3MjE1OSwgNzIxNzIsIDcyMTgxLCA3MjE4NywgNzIxOTIsIDcyMTk4LCA3MjIwMiwgNzIyMDgsIAorICAgIDcyMjE0LCA3MjIyMiwgNzIyMjcsIDcyMjMxLCA3MjIzOCwgNzIyNDQsIDcyMjUyLCA3MjI2MSwgNzIyNjksIDM1MDYwLCAKKyAgICA3MjI3NiwgNzIyODYsIDcyMjk5LCA3MjMwNCwgNzIzMDksIDcyMzEzLCA3MjMyMiwgNzIzMjgsIDcyMzM1LCA3MjM0NiwgCisgICAgNzIzNTgsIDcyMzY1LCA3MjM3NCwgNzIzODMsIDcyMzkyLCA3MjM5OSwgNzI0MDUsIDcyNDEyLCA3MjQyMCwgNzI0MjcsIAorICAgIDcyNDM1LCA3MjQ0NCwgNzI0NTIsIDcyNDU5LCA3MjQ2NywgNzI0NzYsIDcyNDg0LCA3MjQ5MywgNzI1MDMsIDcyNTEyLCAKKyAgICA3MjUyMCwgNzI1MjcsIDcyNTM1LCA3MjU0NCwgNzI1NTIsIDcyNTYxLCA3MjU3MSwgNzI1ODAsIDcyNTg4LCA3MjU5NywgCisgICAgNzI2MDcsIDcyNjE2LCA3MjYyNiwgNzI2MzcsIDcyNjQ3LCA3MjY1NiwgNzI2NjQsIDcyNjcxLCA3MjY3OSwgNzI2ODgsIAorICAgIDcyNjk2LCA3MjcwNSwgNzI3MTUsIDcyNzI0LCA3MjczMiwgNzI3NDEsIDcyNzUxLCA3Mjc2MCwgNzI3NzAsIDcyNzgxLCAKKyAgICA3Mjc5MSwgNzI4MDAsIDcyODA4LCA3MjgxNywgNzI4MjcsIDcyODM2LCA3Mjg0NiwgNzI4NTcsIDcyODY3LCA3Mjg3NiwgCisgICAgNzI4ODYsIDcyODk3LCA3MjkwNywgNzI5MTgsIDcyOTMwLCA3Mjk0MSwgNzI5NTEsIDcyOTYwLCA3Mjk2OCwgNzI5NzUsIAorICAgIDcyOTgzLCA3Mjk5MiwgNzMwMDAsIDczMDA5LCA3MzAxOSwgNzMwMjgsIDczMDM2LCA3MzA0NSwgNzMwNTUsIDczMDY0LCAKKyAgICA3MzA3NCwgNzMwODUsIDczMDk1LCA3MzEwNCwgNzMxMTIsIDczMTIxLCA3MzEzMSwgNzMxNDAsIDczMTUwLCA3MzE2MSwgCisgICAgNzMxNzEsIDczMTgwLCA3MzE5MCwgNzMyMDEsIDczMjExLCA3MzIyMiwgNzMyMzQsIDczMjQ1LCA3MzI1NSwgNzMyNjQsIAorICAgIDczMjcyLCA3MzI4MSwgNzMyOTEsIDczMzAwLCA3MzMxMCwgNzMzMjEsIDczMzMxLCA3MzM0MCwgNzMzNTAsIDczMzYxLCAKKyAgICA3MzM3MSwgNzMzODIsIDczMzk0LCA3MzQwNSwgNzM0MTUsIDczNDI0LCA3MzQzNCwgNzM0NDUsIDczNDU1LCA3MzQ2NiwgCisgICAgNzM0NzgsIDczNDg5LCA3MzQ5OSwgNzM1MTAsIDczNTIyLCA3MzUzMywgNzM1NDUsIDczNTU4LCA3MzU3MCwgNzM1ODEsIAorICAgIDczNTkxLCA3MzYwMCwgNzM2MDgsIDczNjE1LCA3MzYyMywgNzM2MzIsIDczNjQwLCA3MzY0OSwgNzM2NTksIDczNjY4LCAKKyAgICA3MzY3NiwgNzM2ODUsIDczNjk1LCA3MzcwNCwgNzM3MTQsIDczNzI1LCA3MzczNSwgNzM3NDQsIDczNzUyLCA3Mzc2MSwgCisgICAgNzM3NzEsIDczNzgwLCA3Mzc5MCwgNzM4MDEsIDczODExLCA3MzgyMCwgNzM4MzAsIDczODQxLCA3Mzg1MSwgNzM4NjIsIAorICAgIDczODc0LCA3Mzg4NSwgNzM4OTUsIDczOTA0LCA3MzkxMiwgNzM5MjEsIDczOTMxLCA3Mzk0MCwgNzM5NTAsIDczOTYxLCAKKyAgICA3Mzk3MSwgNzM5ODAsIDczOTkwLCA3NDAwMSwgNzQwMTEsIDc0MDIyLCA3NDAzNCwgNzQwNDUsIDc0MDU1LCA3NDA2NCwgCisgICAgNzQwNzQsIDc0MDg1LCA3NDA5NSwgNzQxMDYsIDc0MTE4LCA3NDEyOSwgNzQxMzksIDc0MTUwLCA3NDE2MiwgNzQxNzMsIAorICAgIDc0MTg1LCA3NDE5OCwgNzQyMTAsIDc0MjIxLCA3NDIzMSwgNzQyNDAsIDc0MjQ4LCA3NDI1NywgNzQyNjcsIDc0Mjc2LCAKKyAgICA3NDI4NiwgNzQyOTcsIDc0MzA3LCA3NDMxNiwgNzQzMjYsIDc0MzM3LCA3NDM0NywgNzQzNTgsIDc0MzcwLCA3NDM4MSwgCisgICAgNzQzOTEsIDc0NDAwLCA3NDQxMCwgNzQ0MjEsIDc0NDMxLCA3NDQ0MiwgNzQ0NTQsIDc0NDY1LCA3NDQ3NSwgNzQ0ODYsIAorICAgIDc0NDk4LCA3NDUwOSwgNzQ1MjEsIDc0NTM0LCA3NDU0NiwgNzQ1NTcsIDc0NTY3LCA3NDU3NiwgNzQ1ODYsIDc0NTk3LCAKKyAgICA3NDYwNywgNzQ2MTgsIDc0NjMwLCA3NDY0MSwgNzQ2NTEsIDc0NjYyLCA3NDY3NCwgNzQ2ODUsIDc0Njk3LCA3NDcxMCwgCisgICAgNzQ3MjIsIDc0NzMzLCA3NDc0MywgNzQ3NTQsIDc0NzY2LCA3NDc3NywgNzQ3ODksIDc0ODAyLCA3NDgxNCwgNzQ4MjUsIAorICAgIDc0ODM3LCA3NDg1MCwgNzQ4NjIsIDc0ODc1LCA3NDg4OSwgNzQ5MDIsIDc0OTE0LCA3NDkyNSwgNzQ5MzUsIDc0OTQ0LCAKKyAgICA3NDk1MiwgNzQ5NTksIDc0OTY0LCA4NDE5LCA3NDk3MSwgMzUwNzAsIDc0OTc2LCA3NDk4MSwgMzUwNzUsIDc0OTg3LCAKKyAgICAyMjU3OSwgMzUwODAsIDc0OTkyLCA3NDk5OCwgNzUwMDYsIDc1MDEyLCA3NTAxOCwgNzUwMjUsIDc1MDMyLCA3NTAzNywgCisgICAgNzUwNDEsIDc1MDQ1LCA3NTA0OCwgNzUwNTIsIDc1MDYxLCA3NTA3MCwgNzUwNzgsIDc1MDg0LCA3NTA5NiwgNzUxMDcsIAorICAgIDc1MTExLCAzMTQwLCA4Mzk0LCA3NTExNiwgNzUxMTksIDc1MTIxLCA3NTEyNSwgNzUxMjksIDc1MTMzLCA3NTEzOSwgCisgICAgNzUxNDQsIDI3OTkwLCA3NTE0OSwgNzUxNTMsIDc1MTU2LCA3NTE2MSwgNzUxNjUsIDc1MTcyLCA3NTE3OCwgNzUxODIsIAorICAgIDY0ODUsIDc1MTg2LCAzNTA5NywgNzUxOTEsIDc1MTk4LCA3NTIwNywgNzUyMTUsIDc1MjI2LCA3NTIzNCwgNzUyNDMsIAorICAgIDc1MjUxLCA3NTI1OCwgNzUyNjUsIDc1MjcxLCA3NTI4MiwgMzUxMDIsIDc1Mjg3LCA3NTI5OCwgNzUzMTAsIDc1MzE4LCAKKyAgICA3NTMyOSwgNzUzMzgsIDc1MzQ5LCA3NTM1NCwgNzUzNjIsIDI1OTUsIDc1MzY3LCAzNzE2NiwgNzUzODAsIDc1Mzg0LCAKKyAgICA3NTM5NiwgNzU0MDQsIDc1NDA5LCA3NTQxNywgNzU0MjgsIDE5MTE0LCA3NTQzNywgNzU0NDMsIDc1NDUwLCA3NTQ1OCwgCisgICAgNzU0NjQsIDM1MTEyLCA3NTQ2OSwgNDEzOSwgNjMwNTYsIDc1NDc2LCA3NTQ3OSwgNzU0ODcsIDc1NTAwLCA3NTUxMywgCisgICAgNzU1MjYsIDc1NTM5LCA3NTU0NiwgNzU1NTcsIDc1NTY2LCA3NTU3MSwgNDY1MjEsIDQ2NTI2LCA3NTU3NSwgNzU1NzksIAorICAgIDc1NTg3LCA3NTU5NCwgNzU2MDMsIDc1NjExLCA3NTYxNywgNzU2MjYsIDc1NjM0LCA3NTY0MSwgNzU2NDksIDc1NjUzLCAKKyAgICA3NTY2MiwgNzU2NzEsIDc1NjgxLCA3NTY5NCwgNzU3MDcsIDc1NzE3LCAzNTExNywgNzU3MjMsIDc1NzMwLCA3NTczNiwgCisgICAgNzU3NDIsIDM1MTIzLCA3NTc0NywgNzU3NTAsIDc1NzU0LCA3NTc2MiwgNzU3NzEsIDQ2MjU5LCA3NTc3OSwgNzU3ODgsIAorICAgIDc1Nzk2LCA3NTgwMywgNzU4MTEsIDc1ODIxLCA3NTgzMCwgNzU4MzksIDM2NDIwLCA3NTg0OCwgNzU4NTksIDc1ODc0LCAKKyAgICA3NTg4NCwgOTkwNCwgMjMyNjMsIDc1ODkzLCA3NTg5OCwgNzU5MDMsIDc1OTA3LCA3NTkxMiwgNzU5MTYsIDc1OTIxLCAKKyAgICA3NTkyNywgNzU5MzIsIDc1OTM3LCA3NTk0MywgNzU5NDgsIDc1OTUzLCAyMzIyOCwgNzU5NTgsIDc1OTY1LCA3NTk3MywgCisgICAgNzU5ODEsIDc1OTg5LCA3NTk5NCwgNzYwMDEsIDc2MDA4LCA3NjAxMywgMjI3MiwgNzYwMTcsIDc2MDIxLCA3NjAyOSwgCisgICAgNzYwMzcsIDM1MTQwLCA3NjA0MywgNzYwNDksIDc2MDYxLCA3NjA2NywgNzYwNzQsIDc2MDc4LCA3NjA4NSwgNzYwOTAsIAorICAgIDc2MDk3LCA3NjEwMywgNzYxMTAsIDc2MTIxLCA3NjEzMSwgNzYxNDEsIDc2MTUzLCA3NjE1OSwgNzYxNjcsIDc2MTczLCAKKyAgICA3NjE4MywgNzYxOTMsIDM1MTY3LCA3NjIwMiwgNzYyMTEsIDc2MjE3LCA3NjIyOSwgNzYyNDAsIDc2MjQ3LCA3NjI1MiwgCisgICAgNzYyNTYsIDc2MjY0LCA3NjI3MCwgNzYyNzUsIDc2MjgwLCA3NjI4NywgNzYyOTUsIDc2MzA3LCA3NjMxNywgNzYzMjYsIAorICAgIDc2MzM1LCA3NjM0MiwgMzcwMTksIDI1NzY0LCA3NjM0OCwgNzYzNTMsIDc2MzU3LCA3NjM2MSwgNzYzNjYsIDc2Mzc0LCAKKyAgICA3NjM4MCwgNzYzOTEsIDc2NDA0LCA3NjQwOSwgNzY0MTYsIDM1MTcyLCA3NjQyMSwgNzY0MzMsIDc2NDQyLCA3NjQ1MCwgCisgICAgNzY0NjAsIDc2NDcxLCA3NjQ4NCwgNzY0OTEsIDc2NTAwLCA3NjUwOSwgNzY1MTcsIDc2NTIyLCA3NjUyOCwgMTUwMCwgCisgICAgNzY1MzMsIDc2NTM4LCA3NjU0MywgNzY1NDgsIDc2NTU0LCA3NjU1OSwgNzY1NjQsIDc2NTcwLCA3NjU3NiwgNzY1ODEsIAorICAgIDc2NTg1LCA3NjU5MCwgNzY1OTUsIDc2NjAwLCA2MzYxMSwgNzY2MDUsIDc2NjEwLCA3NjYxNSwgNzY2MjAsIDc2NjI2LCAKKyAgICA3NjYzMiwgNzY2MzcsIDc2NjQxLCA3NjY0NiwgNzY2NTEsIDc2NjU2LCA3NjY2MiwgNzY2NjcsIDc2NjczLCA3NjY3OCwgCisgICAgNzY2ODMsIDc2Njg4LCA3NjY5MywgNzY2OTcsIDc2NzAzLCA3NjcwOCwgNzY3MTcsIDc2NzIyLCA3NjcyNywgNzY3MzIsIAorICAgIDc2NzM3LCA3Njc0MSwgNzY3NDgsIDc2NzU0LCA0NDMwLCAxODczNywgMzEwNSwgNzY3NTksIDc2NzYzLCA3Njc2OCwgCisgICAgNzY3NzIsIDc2Nzc2LCA3Njc4MCwgNTAzMjEsIDc2Nzg0LCA3NjcwOSwgNzY3ODYsIDc2Nzk2LCAzNTE4MSwgNzY3OTksIAorICAgIDc2ODA0LCA3NjgxMywgNzY4MTksIDY0NTQsIDM1MTg2LCA3NjgyMywgNzY4MjksIDc2ODM0LCA3Njg0MCwgNzY4NDUsIAorICAgIDc2ODQ5LCA3Njg1NiwgNzY4NjEsIDc2ODcxLCA3Njg4MCwgNzY4ODQsIDc2ODkwLCA3Njg5NiwgNzY5MDIsIDc2OTA2LCAKKyAgICA3NjkxNCwgNzY5MjEsIDc2OTI5LCA3NjkzNywgMzUxOTEsIDc2OTQ0LCA3Njk0NywgNzY5NTQsIDc2OTYwLCA3Njk2NSwgCisgICAgNzY5NjksIDc2OTc1LCA3Njk4MiwgNzY5ODcsIDc2OTkxLCA3NzAwMCwgNzcwMDgsIDc3MDE0LCA3NzAxOSwgMzUxOTYsIAorICAgIDc3MDI2LCA3NzAzOCwgNzcwNDUsIDc3MDUxLCA3NzA1NiwgNzcwNjIsIDc3MDY5LCA3NzA3NSwgMjI5NzksIDI5NTg5LCAKKyAgICA3NzA4MSwgNzcwODYsIDc3MDkyLCA3NzA5NiwgNzcxMDgsIDc2NzQyLCA3Njc0OSwgMjMxNjAsIDc3MTE4LCA3NzEyMywgCisgICAgNzcxMzAsIDc3MTM2LCA3NzE0MywgNzcxNDksIDc3MTYwLCA3NzE2NSwgNzcxNzMsIDk2MDksIDc3MTc4LCA3NzE4MSwgCisgICAgNzcxODcsIDc3MTkxLCA3NzE5NSwgNzcxOTgsIDc3MjA0LCAzNDkzNCwgNDQzMSwgMTA2NywgMTQ1OTYsIDc3MjExLCAKKyAgICA3NzIxNywgNzcyMjMsIDc3MjI5LCA3NzIzNSwgNzcyNDEsIDc3MjQ3LCA3NzI1MywgNzcyNTksIDc3MjY0LCA3NzI2OSwgCisgICAgNzcyNzQsIDc3Mjc5LCA3NzI4NCwgNzcyODksIDc3Mjk0LCA3NzI5OSwgNzczMDQsIDc3MzA5LCA3NzMxNCwgNzczMTksIAorICAgIDc3MzI0LCA3NzMzMCwgNzczMzUsIDc3MzQwLCA3NzM0NiwgNzczNTEsIDc3MzU2LCA3NzM2MiwgNzczNjgsIDc3Mzc0LCAKKyAgICA3NzM4MCwgNzczODYsIDc3MzkyLCA3NzM5OCwgNzc0MDQsIDc3NDEwLCA3NzQxNSwgNzc0MjAsIDc3NDI2LCA3NzQzMSwgCisgICAgNzc0MzYsIDc3NDQyLCA3NzQ0NywgNzc0NTIsIDc3NDU3LCA3NzQ2MiwgNzc0NjcsIDc3NDcyLCA3NzQ3NywgNzc0ODIsIAorICAgIDc3NDg3LCA3NzQ5MiwgNzc0OTcsIDc3NTAyLCA3NzUwOCwgNzc1MTMsIDc3NTE4LCA3NzUyMywgNzc1MjksIDc3NTM0LCAKKyAgICA3NzUzOSwgNzc1NDQsIDc3NTQ5LCA3NzU1NSwgNzc1NjAsIDc3NTY1LCA3NzU3MCwgNzc1NzUsIDc3NTgwLCA3NzU4NSwgCisgICAgNzc1OTAsIDc3NTk1LCA3NzYwMCwgNzc2MDUsIDc3NjEwLCA3NzYxNSwgNzc2MjAsIDc3NjI1LCA3NzYzMCwgNzc2MzUsIAorICAgIDc3NjQwLCA3NzY0NSwgNzc2NTAsIDc3NjU2LCA3NzY2MSwgNzc2NjYsIDc3NjcxLCA3NzY3NiwgNzc2ODEsIDc3Njg2LCAKKyAgICA3NzY5MSwgMTg5MCwgMTYzLCA3NzY5NiwgNzc3MDAsIDc3NzA0LCA3NzcwOSwgNzc3MTcsIDc3NzIxLCA3NzcyOCwgNzc3MzYsIAorICAgIDc3NzQwLCA3Nzc1MywgNzc3NjEsIDc3NzY2LCA3Nzc3MSwgMjgzOTQsIDc3Nzc1LCA3Nzc4MCwgNzc3ODQsIDc3Nzg5LCAKKyAgICA3Nzc5MywgNzc4MDEsIDc3ODA1LCAyMjU4NywgNzc4MTAsIDc3ODE0LCA2NjE2MiwgNzc4MTgsIDc3ODIxLCA3NzgyOSwgCisgICAgNzc4MzcsIDc3ODQ1LCA3Nzg1MCwgNzc4NTUsIDc3ODYyLCA3Nzg2OSwgNzc4NzUsIDc3ODgxLCA3Nzg4NiwgNzc4OTEsIAorICAgIDc3ODk5LCA3MDU1MSwgNzc5MDYsIDY1OTQ4LCA3NzkxMSwgNzc5MTYsIDc3OTIwLCA3NzkyNywgNjU5NzUsIDEyNzQzLCAKKyAgICA3NzkzMywgNzc5MzgsIDc3OTQzLCA3Nzk0NywgNzc5NTAsIDc3OTU2LCA3Nzk2MCwgNzc5NzAsIDc3OTc5LCA3Nzk4MywgCisgICAgNzc5ODYsIDc3OTkwLCA3Nzk5NywgNzgwMTAsIDc4MDE2LCA3ODAyNCwgNzgwMzMsIDc4MDQ0LCA3ODA1NSwgNzgwNjYsIAorICAgIDc4MDc3LCA3ODA4NiwgNzgwOTIsIDc4MTAxLCA3ODEwOSwgNzgxMTksIDc4MTMyLCA3ODE0MCwgNzgxNDcsIDc4MTU4LCAKKyAgICA3ODE2NCwgNzgxNjksIDc4MTc0LCA3ODE4MCwgNzgxODYsIDc4MTk2LCA3ODIwMywgNzgyMTMsIDc4MjIyLCA3NjQyMywgCisgICAgNzgyMzAsIDc4MjM2LCA3ODI0NCwgNzgyNTAsIDc4MjU3LCA3ODI2NSwgNzgyNzAsIDc4MjczLCA3ODI3NywgNzgyODEsIAorICAgIDc4Mjg0LCA3ODI5MCwgNzgyOTYsIDc4MzA0LCA3ODMxNiwgNzgzMjgsIDc4MzM1LCA3ODM0MCwgNzgzNDQsIDc4MzU1LCAKKyAgICA3ODM2MywgNzgzNzAsIDc4MzgyLCA3ODM5MCwgNzgzOTgsIDc4NDA1LCA3ODQxMSwgNzg0MTYsIDc4NDI2LCA3ODQzNSwgCisgICAgNzg0NDAsIDc4NDUwLCA3ODQ1OSwgNDU1NDksIDc4NDY2LCA3ODQ3MCwgNzg0NzUsIDc4NDgzLCA3ODQ5MCwgNzg0OTYsIAorICAgIDc4NTAwLCA3ODUxMCwgNzg1MjEsIDc4NTI5LCA3ODUzNiwgNzg1NDgsIDc4NTYwLCA3ODU2OSwgNzUzNzAsIDc4NTc2LCAKKyAgICA3ODU4NiwgNzg1OTgsIDc4NjA5LCA3ODYyMywgNzg2MzEsIDc4NjQxLCA3ODY0OCwgNzg2NTYsIDc4NjY5LCA3ODY4MSwgCisgICAgNzg2OTAsIDc4Njk4LCA3ODcwOCwgNzg3MTksIDc4NzMxLCA3ODc0MCwgNzg3NTAsIDc4NzYwLCA3ODc2OSwgNzg3NzYsIAorICAgIDc4Nzg1LCA3ODgwMCwgNzg4MDgsIDc4ODE4LCA3ODgyNywgNzg4MzUsIDc4ODQ4LCA2MzAyNiwgNzg4NjMsIDc4ODczLCAKKyAgICA3ODg4MiwgNzg4OTQsIDc4OTA0LCA3ODkxNiwgNzg5MjcsIDc4OTM4LCA3ODk0OSwgNzg5NTksIDc4OTcwLCA3ODk3OCwgCisgICAgNzg5ODQsIDc4OTk0LCA3OTAwMiwgNzkwMDgsIDMxMjkxLCA3OTAxMywgNzkwMTksIDc5MDI4LCA3OTA0MCwgNzkwNDUsIAorICAgIDc5MDUyLCAxMDQ0OCwgMTkxMzQsIDc5MDU4LCA3OTA2NywgNzkwNzIsIDc5MDc2LCA3OTA4MywgNzkwODksIDc5MDk0LCAKKyAgICA3OTA5OSwgNzkxMDcsIDc5MTE1LCAxMzExOSwgNzkxMTksIDc5MTIyLCA3OTEyNCwgNzkxMzEsIDc5MTM3LCA3OTE0OCwgCisgICAgNzkxNTMsIDc5MTU3LCA3OTE2NCwgNzkxNzAsIDc5MTc1LCA3OTE4MywgNzExMjAsIDcxMTMwLCA3OTE4OSwgNzkxOTYsIAorICAgIDc5MjA2LCAxMTU0MywgNzkyMTMsIDc5MjE4LCAzMTUwNiwgNzkyMjcsIDc5MjMyLCA3OTIzOSwgNzkyNDksIDc5MjU3LCAKKyAgICA3OTI2NSwgNzkyNzQsIDc5MjgwLCA3OTI4NiwgNzkyOTMsIDc5MzAwLCA3OTMwNSwgNzkzMDksIDc5MzE3LCA2NTk5MiwgCisgICAgNzkzMjIsIDc5MzMxLCA3OTMzOSwgNzkzNDYsIDc5MzUxLCA3OTM1NSwgNzkzNjQsIDc5MzcwLCA3OTM3MywgNzkzNzcsIAorICAgIDc5Mzg2LCA3OTM5NiwgNzc3NDgsIDc5NDA1LCA3OTQwOSwgNzk0MTcsIDc5NDIxLCA3OTQyNywgNzk0MzgsIDc5NDQ4LCAKKyAgICAxOTE0MywgNzk0NTksIDc5NDY4LCA3OTQ3NiwgNzk0ODQsIDc5NDkxLCA2NjAxMSwgOTE0NywgNzk0OTksIDc5NTAzLCAKKyAgICA3OTUxMiwgNzk1MTksIDc5NTIyLCAyOTQ3MCwgNzk1MjUsIDc5NTI5LCA3OTUzNCwgNzk1NTEsIDc5NTYzLCAxMTUwMSwgCisgICAgNzk1NzUsIDc5NTgwLCA3OTU4NSwgNzk1OTAsIDIyNjY5LCA3OTU5NCwgNzk1OTksIDc5NjA0LCA3OTYxMCwgNzk2MTUsIAorICAgIDYxMjIsIDc5NjIwLCAyMjY3MywgNzk2MjUsIDc5NjMwLCA3OTYzNiwgNzk2NDMsIDc5NjQ4LCA3OTY1MywgNzk2NTksIAorICAgIDc5NjY1LCA3OTY3MSwgNzk2NzYsIDc5NjgyLCA3OTY4NiwgNzk3MDAsIDc5NzA4LCA3OTcxNiwgNzk3MjIsIDc5NzI3LCAKKyAgICA3OTczNCwgNzk3NDQsIDc5NzUzLCA3OTc1OCwgNzk3NjMsIDc5NzY4LCA3OTc3NiwgNzk3ODEsIDc5Nzg3LCA3OTc5MiwgCisgICAgNzk4MDEsIDY0NzEzLCA3OTgwNiwgNzk4MDksIDc5ODI3LCA3OTg0NiwgNzk4NTksIDc5ODczLCA3OTg4OSwgNzk4OTYsIAorICAgIDc5OTAzLCA3OTkxMiwgNzk5MTksIDc5OTI1LCA3OTkzMiwgNzk5MzcsIDc5OTQzLCA3OTk0OSwgNzk5NTcsIDc5OTYzLCAKKyAgICA3OTk2OCwgNzk5NzMsIDc5OTg5LCAxMTUxNCwgODAwMDMsIDgwMDEwLCA4MDAxOCwgODAwMjQsIDgwMDI4LCA4MDAzMSwgCisgICAgODAwMzYsIDgwMDQxLCA4MDA0OCwgODAwNTMsIDgwMDYyLCA4MDA2OCwgODAwNzMsIDgwMDc5LCA4MDA4NSwgODAwOTQsIAorICAgIDgwMTAzLCA4MDEwOCwgODAxMTIsIDgwMTIwLCA4MDEyOSwgMTI3NzIsIDgwMTM4LCA4MDE0NCwgODAxNTIsIDgwMTU4LCAKKyAgICA4MDE2NCwgODAxNzAsIDgwMTc1LCA4MDE4MiwgODAxODgsIDEyNzgzLCA4MDE5MywgODAxOTYsIDgwMjAxLCAzNTIyMywgCisgICAgODAyMTEsIDgwMjIwLCA4MDIyNSwgODAyMzEsIDgwMjM2LCA4MDI0NCwgODAyNTEsIDgwMjYyLCA4MDI3MiwgODAyNzcsIAorICAgIDgwMjg1LCA3MDQ3NCwgODAyOTAsIDgwMjk2LCA4MDMwMSwgODAzMDgsIDgwMzE3LCA4MDMyNSwgODAzMjksIDgwMzM1LCAKKyAgICA4MDM0MSwgODAzNDgsIDgwMzU0LCA4MDM1OCwgMTg1MTgsIDMxMTQsIDgwMzYzLCA4MDM2NywgODAzNzEsIDgwMzc3LCAKKyAgICA4MDM4NiwgODAzOTIsIDgwMzk5LCA4MDQwMywgODA0MjQsIDgwNDQ2LCA4MDQ2MiwgODA0NzksIDgwNDk4LCA4MDUwNywgCisgICAgODA1MTcsIDgwNTI1LCA4MDUzMiwgODA1MzksIDgwNTQ1LCAyOTM0MiwgODA1NTksIDgwNTYzLCA4MDU2OSwgODA1NzcsIAorICAgIDgwNTg5LCA4MDU5NSwgODA2MDMsIDgwNjEwLCA4MDYxNSwgODA2MjAsIDgwNjI0LCA4MDYzMiwgODA2MzksIDgwNjQzLCAKKyAgICA4MDY0OSwgODA2NTUsIDgwNjYwLCAzNzMwLCA0NjcyMSwgODA2NjYsIDgwNjcwLCA4MDY3NCwgODA2NzgsIDgwNjgzLCAKKyAgICA4MDY4OCwgODA2OTMsIDgwNjk5LCA4MDcwNSwgODA3MTEsIDgwNzE4LCA4MDcyNCwgODA3MzEsIDgwNzM3LCA4MDc0MywgCisgICAgODA3NDgsIDgwNzU0LCA4MDc1OSwgODA3NjMsIDgwNzY4LCA4MDc3MiwgODA3NzcsIDQ2NzM2LCA4MDc4MSwgODA3ODYsIAorICAgIDgwNzk0LCA4MDc5OCwgODA4MDMsIDgwODEwLCA4MDgxOSwgODA4MjUsIDgwODM0LCA4MDgzOCwgODA4NDUsIDgwODQ5LCAKKyAgICA4MDg1MiwgODA4NTksIDgwODY1LCA4MDg3NCwgODA4ODQsIDgwODg5LCA4MDg5MywgODA5MDEsIDgwOTEwLCA4MDkxNCwgCisgICAgODA5MjIsIDgwOTI4LCA4MDkzMywgODA5MzgsIDgwOTQ0LCA4MDk1MCwgODA5NTUsIDgwOTU5LCA4MDk2NSwgODA5NzAsIAorICAgIDgwOTc0LCA4MDk3OCwgODA5ODEsIDgwOTg2LCA4MDk5NCwgODEwMDQsIDgxMDEwLCA4MTAxNSwgODEwMjUsIDQ0MDMxLCAKKyAgICA4MTAzMywgODEwNDUsIDgxMDQ5LCA4MTA1NSwgODEwNjcsIDgxMDc4LCA4MTA4NSwgODEwOTEsIDgxMDk4LCA4MTEwNSwgCisgICAgODExMTcsIDgxMTI0LCA4MTEzMCwgMjI3NDcsIDgxMTM0LCA4MTE0MiwgODExNDgsIDgxMTU1LCA4MTE2MSwgODExNjcsIAorICAgIDgxMTczLCA4MTE3OCwgODExODMsIDgxMTg4LCA4MTE5NywgODEyMDUsIDgxMjE2LCA3MzUwLCA4MTIyMSwgMTc5NjcsIAorICAgIDgxMjI3LCA4MTIzMSwgODEyMzUsIDgxMjM5LCA4MTI0NywgODEyNTYsIDgxMjYwLCA4MTI2NywgODEyNzYsIDgxMjg0LCAKKyAgICA4MTI5NywgODEzMDMsIDgwNzczLCAzMjM5MCwgODEzMDgsIDgxMzEwLCA4MTMxNSwgODEzMjAsIDgxMzI1LCA4MTMzMCwgCisgICAgODEzMzUsIDgxMzQwLCA4MTM0NSwgODEzNTAsIDgxMzU1LCA4MTM2MCwgODEzNjUsIDgxMzcwLCA4MTM3NSwgODEzODAsIAorICAgIDgxMzg2LCA4MTM5MSwgODEzOTYsIDgxNDAxLCA4MTQwNiwgODE0MTEsIDgxNDE2LCA4MTQyMSwgODE0MjYsIDgxNDMyLCAKKyAgICA4MTQzOCwgODE0NDQsIDgxNDQ5LCA4MTQ1NCwgODE0NjYsIDgxNDcxLCAxODk2LCA2MywgODE0NzYsIDgxNDgxLCAzNTIyOSwgCisgICAgODE0ODUsIDM1MjM0LCAzNTIzOSwgMzUyNDUsIDM1MjUwLCA4MTQ4OSwgMzUyNTUsIDIzNzg1LCA4MTUxMSwgODE1MTUsIAorICAgIDgxNTE5LCA4MTUyNCwgODE1MjgsIDM1MjU5LCA4MTUzMiwgODE1NDAsIDgxNTQ3LCAzNTI2NCwgODE1NTMsIDgxNTU2LCAKKyAgICA4MTU2MSwgODE1NjUsIDgxNTc0LCAxMDI2NiwgODE1ODIsIDM1MjY5LCAyMzY0MSwgODE1ODUsIDgxNTg5LCA4MTU5NywgCisgICAgMTQxMiwgODE2MDIsIDM1MjgwLCA4MTYwNSwgODE2MTAsIDI3NzUwLCAyNzc2MCwgMzgxODIsIDgxNjE1LCA4MTYyMCwgCisgICAgODE2MjUsIDgxNjMwLCA4MTYzNiwgODE2NDEsIDgxNjUwLCA4MTY1NSwgODE2NjQsIDgxNjcyLCA4MTY3OSwgODE2ODUsIAorICAgIDgxNjkwLCA4MTY5NSwgODE3MDAsIDgxNzEwLCA4MTcxOSwgODE3MjcsIDgxNzMyLCA4MTc0MCwgODE3NDQsIDgxNzUyLCAKKyAgICA4MTc1NiwgODE3NjMsIDgxNzcxLCAzNTA4OCwgNDExOTIsIDgxNzc4LCA4MTc4NCwgODE3ODksIDgxNzk0LCAxMzE1NCwgCisgICAgMzA1MjksIDgxNzk5LCA4MTgwNCwgODE4MTEsIDgxODE3LCA4MTgyMiwgODE4MzAsIDgxODQwLCA4MTg1MCwgODE4NTYsIAorICAgIDgxODYxLCA4MTg2NywgMTkxNjUsIDgxODc0LCAzOTA1MiwgODE4ODcsIDgxODkyLCA4MTg5OCwgMzMzODEsIDgxOTExLCAKKyAgICA4MTkxNywgODE5MjEsIDgxOTMwLCA4MTkzOSwgODE5NDYsIDgxOTUyLCA4MTk2MCwgODE5NjksIDgxOTc2LCA4MTk4MiwgCisgICAgODE5ODUsIDgxOTg5LCA4MTk5MywgMjc4OTEsIDgxOTk3LCA4MjAwNCwgODIwMTAsIDgyMDE4LCA4MjAyMywgODIwMjcsIAorICAgIDI1OTExLCA4MjAzMywgODIwMzYsIDgyMDQ0LCA4MjA1MSwgODIwNTksIDgyMDcyLCA4MjA4NiwgODIwOTMsIDgyMDk5LCAKKyAgICA4MjEwNiwgODIxMTIsIDM1Mjk0LCA4MjExNiwgODIxMjMsIDgyMTMxLCA4MjEzOSwgODIxNDUsIDM1Mjk5LCA4MjE1MywgCisgICAgODIxNTksIDgyMTY0LCA4MjE3NCwgODIxODAsIDgyMTg5LCAzMzE4MywgMzc2MTQsIDgyMTk3LCA4MjIwMiwgODIyMDcsIAorICAgIDgyMjExLCA4MjIxNiwgODIyMjAsIDgyMjI4LCA4MjIzMywgMTYyOTYsIDQ0MDQ0LCA4MjIzNywgODIyNDIsIDM1MzA0LCAKKyAgICA2NzU0NywgODIyNDYsIDgyMjUxLCA4MjI1NSwgODIyNjIsIDgyMjcxLCA4MjI3NSwgODIyODMsIDgyMjg5LCA4MjI5NCwgCisgICAgODIzMDAsIDgyMzA1LCA4MjMxMiwgODIzMTgsIDgyMzIzLCA4MjMyOCwgODIzMzksIDgyMzQ4LCA4MjM2MCwgODIzNzUsIAorICAgIDM1NTcxLCA4MjM4MSwgMTgwODYsIDM1MzA4LCA4MjM4NSwgODIzOTIsIDgyMzk4LCAyNjAyNywgODI0MDIsIDgyNDA5LCAKKyAgICA4MjQxOCwgODI0MjUsIDgyNDM0LCA4MjQ0MCwgODI0NDUsIDgyNDUzLCA4MjQ1OSwgMzUzMTgsIDgyNDY0LCA4MjQ3MywgCisgICAgODEwNzMsIDgyNDgyLCA4MjQ4OSwgODI0OTUsIDgyNTAxLCA4MjUxMCwgODI1MjAsIDgyNTI4LCA4MjUzNSwgODI1MzksIAorICAgIDM1MzIzLCA4MjU0MiwgMzUzMjksIDM1MzM1LCA4MjU0NywgODI1NTUsIDgyNTYzLCA4MjU3MywgODI1ODIsIDgyNTkwLCAKKyAgICA4MjU5NywgODI2MDcsIDM1MzQwLCA4MjYxMSwgODI2MTMsIDgyNjE3LCA4MjYyMiwgODI2MjYsIDgyNjMwLCA4MjYzNiwgCisgICAgODI2NDEsIDgyNjQ1LCA4MjY1NiwgODI2NjEsIDgyNjY2LCAzMTE5LCA4MjY3MCwgODI2NzcsIDgyNjgxLCA4MjY5MCwgCisgICAgODI2OTgsIDgyNzA1LCA4MjcxMCwgODI3MTUsIDY3NTk4LCA4MjcxOSwgODI3MjIsIDgyNzI4LCA4MjczNiwgODI3NDIsIAorICAgIDgyNzQ2LCA4Mjc1MSwgODI3NTgsIDgyNzYzLCA4Mjc2OCwgODI3NzIsIDgyNzc4LCA4Mjc4MywgMzc2NDUsIDgyNzg3LCAKKyAgICA4Mjc5MCwgODI3OTUsIDgyNzk5LCA4MjgwNCwgODI4MTEsIDgyODE2LCA4MjgyMCwgNDI1ODAsIDgyODI4LCAyNzc2OSwgCisgICAgMjc3NzgsIDgyODM0LCA4Mjg0MCwgODI4NDYsIDgyODUxLCA4Mjg1NSwgODI4NTgsIDgyODY4LCA4Mjg3NywgODI4ODIsIAorICAgIDgyODg4LCA4Mjg5NSwgODI5MDEsIDgyOTA1LCA4MjkxMywgODI5MTgsIDM3NjUxLCA3Nzk1MiwgODI5MjIsIDgyOTMwLCAKKyAgICA4MjkzNiwgODI5NDMsIDgyOTQ4LCA4Mjk1MiwgODI5NTcsIDYzMjQyLCA4Mjk2MywgODI5NjksIDM3NjU3LCA4Mjk3NCwgCisgICAgODI5NzksIDgyOTgzLCA4Mjk4OCwgODI5OTMsIDgyOTk4LCA4MzAwMiwgODMwMDcsIDgzMDEyLCA4MzAxOCwgODMwMjMsIAorICAgIDgzMDI4LCA4MzAzNCwgODMwNDAsIDgzMDQ1LCA4MzA0OSwgODMwNTQsIDgzMDU5LCA4MzA2NCwgODMwNjgsIDI2MDI2LCAKKyAgICA4MzA3MywgODMwNzgsIDgzMDg0LCA4MzA5MCwgODMwOTYsIDgzMTAxLCA4MzEwNSwgODMxMTAsIDgzMTE1LCA4MzEyMCwgCisgICAgODMxMjQsIDgzMTI5LCA4MzEzNCwgODMxMzksIDgzMTQ0LCA0Njk5MSwgODMxNDgsIDM1MzQ4LCA4MzE1NiwgODMxNjAsIAorICAgIDgzMTY4LCA4MzE3NiwgODMxODcsIDgzMTkyLCA4MzE5NiwgMjQyMTEsIDc1NDczLCA4MzIwMSwgODMyMDcsIDgzMjEyLCAKKyAgICA4MzIyMiwgODMyMjksIDgzMjM0LCA4MzI0MiwgODMyNTEsIDgzMjU2LCA4MzI2MCwgODMyNjUsIDgzMjczLCA4MzI4MSwgCisgICAgODMyODgsIDcwNzM2LCA4MzI5NCwgODMzMDIsIDgzMzA5LCA4MzMyMCwgODMzMjYsIDgzMzMyLCAzNTM1OCwgODMzMzUsIAorICAgIDgzMzQyLCA4MzM1MCwgODMzNTUsIDQ0MjQ3LCA4MzM1OSwgODMzNjQsIDgzMzcxLCA4MzM3NiwgOTQ4NCwgODMzODAsIAorICAgIDgzMzg4LCA4MzM5NSwgODM0MDIsIDgzNDExLCA4MzQxOCwgODM0MjQsIDgzNDM4LCA2MTk0LCA4MzQ0NiwgODM0NTIsIAorICAgIDgzNDU2LCA4MzQ1OSwgODM0NjcsIDgzNDc0LCA4MzQ3OSwgODM0OTIsIDgzNDk5LCA4MzUwNSwgODM1MDksIDgzNTE0LCAKKyAgICA4MzUyMSwgODM1MjYsIDY1ODUxLCA4MzUzMSwgODM1MzQsIDgzNTQzLCA4MzU1MCwgODM1NTYsIDgzNTYwLCA4MzU2MywgCisgICAgODM1NzEsIDgzNTgwLCA4MzU5MCwgODM2MDAsIDgzNjA5LCA4MzYyMCwgODM2MjgsIDgzNjM5LCA4MzY0NCwgODM2NDgsIAorICAgIDgzNjUzLCA4MzY1NywgMzgzMTMsIDgzNjY1LCAyMzA0MiwgMzgzMjIsIDgzNjcwLCA4MzY3NSwgODM2ODAsIDgzNjg1LCAKKyAgICA4MzY5MCwgODM2OTUsIDgzNzAwLCA4MzcwNCwgODM3MDksIDgzNzE0LCA4MzcxOSwgODM3MjQsIDgzNzI5LCA4MzczNCwgCisgICAgODM3MzgsIDgzNzQzLCA4Mzc0OCwgODM3NTIsIDgzNzU2LCA4Mzc2MCwgODM3NjQsIDgzNzY5LCA4Mzc3NCwgODM3NzgsIAorICAgIDgzNzgzLCA4Mzc4NywgODM3OTEsIDgzNzk2LCA4MzgwMSwgODM4MDYsIDgzODExLCA4MzgxNSwgODM4MjAsIDgzODI1LCAKKyAgICA4MzgyOSwgODM4MzQsIDgzODM5LCA4Mzg0NCwgODM4NDksIDgzODU0LCA4Mzg1OSwgODM4NjQsIDgzODY5LCA4Mzg3NCwgCisgICAgODM4NzksIDgzODg0LCA4Mzg4OSwgODM4OTQsIDgzODk5LCA4MzkwNCwgODM5MDksIDgzOTE0LCA4MzkxOSwgODM5MjQsIAorICAgIDgzOTI5LCA4MzkzMywgODM5MzgsIDgzOTQzLCA4Mzk0OCwgODM5NTMsIDgzOTU4LCA4Mzk2MywgODM5NjgsIDgzOTczLCAKKyAgICA4Mzk3OCwgODM5ODMsIDgzOTg4LCA4Mzk5MiwgODM5OTcsIDg0MDAxLCA4NDAwNiwgODQwMTEsIDg0MDE2LCA4NDAyMSwgCisgICAgODQwMjYsIDg0MDMxLCA4NDAzNiwgODQwNDEsIDg0MDQ2LCA4NDA1MCwgODQwNTQsIDg0MDU5LCA4NDA2NCwgODQwNjgsIAorICAgIDg0MDczLCA4NDA3OCwgODQwODIsIDg0MDg3LCA4NDA5MiwgODQwOTcsIDg0MTAyLCA4NDEwNiwgODQxMTEsIDg0MTE2LCAKKyAgICA4NDEyMCwgODQxMjUsIDg0MTI5LCA4NDEzMywgODQxMzcsIDg0MTQxLCA4NDE0NiwgODQxNTAsIDg0MTU0LCA4NDE1OCwgCisgICAgODQxNjIsIDg0MTY2LCA4NDE3MCwgODQxNzQsIDg0MTc4LCA4NDE4MiwgODQxODcsIDg0MTkyLCA4NDE5NywgODQyMDIsIAorICAgIDg0MjA3LCA4NDIxMiwgODQyMTcsIDg0MjIyLCA4NDIyNywgODQyMzIsIDg0MjM2LCA4NDI0MCwgODQyNDQsIDg0MjQ4LCAKKyAgICA4NDI1MiwgODQyNTYsIDg0MjYxLCA4NDI2NSwgODQyNzAsIDg0Mjc0LCA4NDI3OSwgODQyODQsIDg0Mjg4LCA4NDI5MiwgCisgICAgODQyOTcsIDg0MzAxLCA4NDMwNSwgODQzMDksIDg0MzEzLCA4NDMxNywgODQzMjEsIDg0MzI1LCA4NDMyOSwgODQzMzMsIAorICAgIDg0MzM3LCA4NDM0MSwgODQzNDUsIDg0MzQ5LCA4NDM1MywgODQzNTgsIDg0MzYzLCA4NDM2NywgODQzNzEsIDg0Mzc1LCAKKyAgICA4NDM3OSwgODQzODMsIDg0Mzg3LCA4NDM5MiwgODQzOTYsIDg0NDAwLCA4NDQwNCwgODQ0MDgsIDg0NDEyLCA4NDQxNiwgCisgICAgODQ0MjEsIDg0NDI1LCA4NDQzMCwgODQ0MzQsIDg0NDM4LCA4NDQ0MiwgODQ0NDYsIDg0NDUwLCA4NDQ1NCwgODQ0NTgsIAorICAgIDg0NDYyLCA4NDQ2NiwgODQ0NzAsIDg0NDc0LCA4NDQ3OSwgODQ0ODMsIDg0NDg3LCA4NDQ5MSwgODQ0OTUsIDg0NDk5LCAKKyAgICA4NDUwMywgODQ1MDcsIDg0NTExLCA4NDUxNSwgODQ1MTksIDg0NTIzLCA4NDUyOCwgODQ1MzIsIDg0NTM2LCA4NDU0MSwgCisgICAgODQ1NDYsIDg0NTUwLCA4NDU1NCwgODQ1NTgsIDg0NTYyLCA4NDU2NiwgODQ1NzAsIDg0NTc0LCA4NDU3OCwgODQ1ODMsIAorICAgIDg0NTg3LCA4NDU5MiwgODQ1OTYsIDg0NjAxLCA4NDYwNSwgODQ2MTAsIDg0NjE0LCA4NDYyMCwgODQ2MjUsIDg0NjI5LCAKKyAgICA4NDYzNCwgODQ2MzgsIDg0NjQzLCA4NDY0NywgODQ2NTIsIDg0NjU2LCA4NDY2MSwgMTUxOSwgODQ2NjUsIDI4NzMsIDE3NzQsIAorICAgIDE2OTIsIDI3NzA1LCA4NDY2OSwgMjg4MiwgODQ2NzMsIDEzODEsIDg0Njc4LCAxMzIzLCA4NDY4MiwgODQ2ODYsIDI4OTksIAorICAgIDg0NjkwLCA4NDY5NywgODQ3MDQsIDg0NzE4LCAyOTAzLCA3NDUyLCA4NDcyNywgODQ3MzUsIDg0NzQyLCA4NDc1MywgCisgICAgODQ3NjIsIDg0NzY5LCA4NDc4MSwgODQ3OTQsIDg0ODA3LCA4NDgxOCwgODQ4MjMsIDg0ODMwLCA4NDg0MiwgODQ4NDYsIAorICAgIDI5MDcsIDEyODUwLCA4NDg1NiwgODQ4NjEsIDg0ODcwLCA4NDg4MCwgODQ4ODUsIDI5MTEsIDg0ODkzLCA4NDg5NywgCisgICAgODQ5MDIsIDg0OTA5LCA4NDkxNSwgODQ5MjMsIDg0OTM1LCAxMzI4LCAxNDIwMSwgODQ5NDUsIDg0OTQ5LCA4NDk1NSwgCisgICAgODQ5NjksIDg0OTgxLCA4NDk5MywgODUwMDMsIDg1MDEyLCA4NTAyMSwgODUwMzAsIDg1MDM4LCA4NTA0OSwgODUwNTcsIAorICAgIDQyOTIsIDg1MDY3LCA4NTA3OCwgODUwODcsIDg1MDkzLCA4NTEwOCwgODUxMTUsIDg1MTIxLCA4NTEyNiwgMzg0NDcsIAorICAgIDg1MTMxLCAyOTM1LCAxNDIwNSwgODUxMzUsIDg1MTQyLCA5NDA5LCA4NTE1MSwgMjk0MCwgMzQ3OTYsIDg1MTU3LCA2NTU3MywgCisgICAgODUxNjQsIDg1MTcwLCA4NTE4MSwgODUxODcsIDg1MTk0LCA4NTIwMCwgODUyMDgsIDg1MjE1LCA4NTIyMSwgODUyMzIsIAorICAgIDg1MjQyLCA4NTI1MSwgODUyNjIsIDg1MjcxLCA4NTI3OCwgODUyODQsIDg1Mjk0LCA4NTMwMiwgODUzMDgsIDg1MzIzLCAKKyAgICA4NTMyOSwgODUzMzQsIDg1MzQxLCA4NTM0NCwgODUzNTAsIDg1MzU3LCA4NTM2MywgODUzNzEsIDg1MzgwLCA4NTM4OCwgCisgICAgODUzOTQsIDg1NDAzLCA0NjI2MSwgODU0MTcsIDg1NDIyLCA4NTQyOCwgMTYwNzIsIDg1NDMzLCA4NTQ0NiwgODU0NTgsIAorICAgIDg1NDY3LCA4NTQ3NSwgODU0ODIsIDg1NDg2LCA4NTQ5MCwgODU0OTMsIDg1NTAwLCA4NTUwNywgODU1MTUsIDg1NTIzLCAKKyAgICA4NTUzMiwgODU1NDAsIDE1OTgzLCA4NTU0OCwgODU1NTMsIDg1NTU3LCA4NTU2OSwgODU1NzYsIDg1NTg1LCA4NDEsIAorICAgIDg1NTk1LCA4NTYwNCwgODU2MTUsIDI5NTYsIDg1NjE5LCA4NTYyMywgODU2MjksIDg1NjQyLCA4NTY1NCwgODU2NjQsIAorICAgIDg1NjczLCA4NTY4NSwgMjg0NDYsIDg1Njk2LCA4NTcwNCwgODU3MTMsIDg1NzI0LCA4NTczNSwgODU3NDUsIDg1NzU1LCAKKyAgICA4NTc2NCwgODU3NzIsIDEyMzY0LCA4NTc3OSwgODU3ODMsIDg1Nzg2LCA4NTc5MSwgODU3OTYsIDg1ODAwLCA4NTgwNiwgCisgICAgMTMzMywgODU4MTMsIDg1ODE3LCAxMjkzMiwgODU4MjEsIDg1ODMyLCA4NTg0MSwgODU4NDksIDg1ODU4LCA4NTg2NiwgCisgICAgODU4ODIsIDg1ODkzLCA4NTkwMiwgODU5MTAsIDg1OTIyLCA4NTkzMywgODU5NDksIDg1OTU5LCA4NTk4MCwgODU5OTQsIAorICAgIDg2MDA3LCA4NjAxNSwgODYwMjIsIDc0OTgsIDg2MDM1LCA4NjA0MCwgODYwNDYsIDYyMDMsIDg2MDUyLCA4NjA1NSwgCisgICAgODYwNjIsIDg2MDcyLCA4NTU0LCA4NjA3OSwgODYwODQsIDg2MDg5LCA4NjA5NCwgODYxMDIsIDg2MTExLCA4NjExOSwgCisgICAgODYxMjQsIDg2MTMxLCAxMDQ5NiwgMTA1MDUsIDg2MTM3LCA4NjE0OCwgODYxNTMsIDg2MTU5LCAyOTcyLCAyOTc3LCAKKyAgICA4NjE2NSwgMTE4NTcsIDg2MTcxLCA4NjE3OCwgODYxODUsIDg2MTk4LCAyMjgxLCA4NywgODYyMDMsIDg2MjA4LCA4NjIxNiwgCisgICAgODYyMjYsIDg2MjM1LCA4NjI0MSwgODYyNTAsIDg2MjU4LCA4NjI2OCwgODYyNzIsIDg2Mjc2LCA4NjI4MSwgODYyODUsIAorICAgIDg2Mjk3LCAzMDAwLCA4NjMwNSwgODYzMTMsIDg2MzE4LCA4NjMyOSwgODYzNDAsIDg2MzUyLCA4NjM2MywgODYzNzMsIAorICAgIDg2MzgyLCAyMzA4MywgODYzODcsIDg2MzkzLCA4NjM5OCwgODY0MDgsIDg2NDE4LCA4NjQyMywgODY0MjksIDg2NDMzLCAKKyAgICA4NjQzOCwgODY0NDcsIDIzMDk1LCA4NjQ1MSwgNDM4NCwgMjQsIDg2NDU2LCA4NjQ2NSwgODY0NzIsIDg2NDc5LCA4NjQ4NSwgCisgICAgODY0OTEsIDEwNDksIDg2NDk2LCA4NjUwMSwgNjYxMjgsIDg2NTA2LCA4NjUxMSwgODY1MTcsIDg2NTIzLCA4NjUzMSwgCisgICAgODY1MzYsIDg2NTQ0LCA4NjU1MSwgODY1NTcsIDg2NTYyLCA0MjQ2NCwgNDYxNTUsIDg2NTY4LCAzMDA0LCAzMiwgODY1NzgsIAorICAgIDg2NTkxLCA4NjU5NiwgODY2MDQsIDg2NjA5LCA4NjYxNSwgMzAyNiwgMzA0OTcsIDg2NjIwLCA4NjYyOCwgODY2MzUsIAorICAgIDg2NjQwLCA4NjY0OSwgNjM0OTIsIDQwMTgsIDY3MjE4LCA4NjY1NywgODY2NjEsIDE3MTksIDE4MzMsIDg2NjY2LCA4NjY3MSwgCisgICAgODY2NzgsIDE4MzcsIDI4MCwgODY2ODUsIDg2NjkxLCA4NjY5NiwgMzA0OCwgODY3MDAsIDg2NzA1LCA4NjcxMiwgMTg0MSwgCisgICAgODY3MTcsIDg2NzIzLCA4NjcyOCwgODY3NDAsIDY0MzAsIDg2NzUwLCA4Njc1NywgMTg0OCwgODY3NjMsIDg2NzY4LCAKKyAgICA4Njc3NSwgODY3ODIsIDg2Nzk3LCA4NjgwNCwgODY4MTUsIDg2ODIwLCA4NjgyOCwgMjY1NywgODY4MzIsIDg2ODQ0LCAKKyAgICA4Njg0OSwgODY4NTMsIDg2ODU5LCAzMDMxMywgMjI4NiwgODY4NjMsIDg2ODc0LCA4Njg3OCwgODY4ODIsIDg2ODg4LCAKKyAgICA4Njg5MiwgODY5MDEsIDg2OTA1LCA4NjkxNiwgODY5MjAsIDIzMzIsIDM0NjEzLCA4NjkyNCwgODY5MzQsIDMxMzksIAorICAgIDg2OTQyLCA5OTA5LCA4Njk1MSwgODY5NTYsIDg2OTYwLCA4Njk2OSwgODY5NzYsIDg2OTgyLCAzMTA5LCAxNjEzNiwgCisgICAgODY5ODYsIDg2OTk5LCA4NzAxNywgODcwMjIsIDg3MDMwLCA4NzAzOCwgODcwNDgsIDEwNzY4LCAxNDMxOCwgODcwNjAsIAorICAgIDg3MDczLCA4NzA4MCwgODcwOTQsIDg3MTAxLCA4NzExNywgODcxMjQsIDg3MTMwLCAyMzEyNywgMTM1NTYsIDg3MTM3LCAKKyAgICA4NzE0NCwgODcxNTQsIDg3MTYzLCA0Njk5MCwgODcxNzUsIDQ3MTI1LCA4NzE4MywgODcxODYsIDg3MTkyLCA4NzE5OCwgCisgICAgODcyMDQsIDg3MjEwLCA4NzIxNiwgODcyMjMsIDg3MjMwLCA4NzIzNiwgODcyNDIsIDg3MjQ4LCA4NzI1NCwgODcyNjAsIAorICAgIDg3MjY2LCA4NzI3MiwgODcyNzgsIDg3Mjg0LCA4NzI5MCwgODcyOTYsIDg3MzAyLCA4NzMwOCwgODczMTQsIDg3MzIwLCAKKyAgICA4NzMyNiwgODczMzIsIDg3MzM4LCA4NzM0NCwgODczNTAsIDg3MzU2LCA4NzM2MiwgODczNjgsIDg3Mzc0LCA4NzM4MCwgCisgICAgODczODYsIDg3MzkyLCA4NzM5OCwgODc0MDQsIDg3NDEwLCA4NzQxNiwgODc0MjIsIDg3NDI4LCA4NzQzNCwgODc0NDAsIAorICAgIDg3NDQ2LCA4NzQ1MiwgODc0NTgsIDg3NDY0LCA4NzQ3MCwgODc0NzYsIDg3NDgyLCA4NzQ4OCwgODc0OTQsIDg3NTAwLCAKKyAgICA4NzUwNiwgODc1MTIsIDg3NTE4LCA4NzUyNCwgODc1MzAsIDg3NTM2LCA4NzU0MywgODc1NDksIDg3NTU2LCA4NzU2MywgCisgICAgODc1NjksIDg3NTc2LCA4NzU4MywgODc1ODksIDg3NTk1LCA4NzYwMSwgODc2MDcsIDg3NjEzLCA4NzYxOSwgODc2MjUsIAorICAgIDg3NjMxLCA4NzYzNywgODc2NDMsIDg3NjQ5LCA4NzY1NSwgODc2NjEsIDg3NjY3LCA4NzY3MywgMzEyMywgOTg4MiwgCisgICAgODc2NzksIDg3Njg1LCA4NzY5MywgODc2OTcsIDg0OTA1LCAzMTI3LCA4NzcwMSwgMjI4NjAsIDEzMTg5LCAzOTY4LCAKKyAgICA4NzcwNSwgMzEzMywgODc3MDksIDg3NzE5LCA4NzcyNSwgODc3MzEsIDg3NzM3LCA4Nzc0MywgODc3NDksIDg3NzU1LCAKKyAgICA4Nzc2MSwgODc3NjcsIDg3NzczLCA4Nzc3OSwgODc3ODUsIDg3NzkxLCA4Nzc5NywgODc4MDMsIDg3ODA5LCA4NzgxNSwgCisgICAgODc4MjEsIDg3ODI3LCA4NzgzMywgODc4MzksIDg3ODQ1LCA4Nzg1MSwgODc4NTcsIDg3ODYzLCA4Nzg2OSwgODc4NzYsIAorICAgIDg3ODgzLCA4Nzg4OSwgODc4OTUsIDg3OTAxLCA4NzkwNywgODc5MTMsIDg3OTE5LCAxMzM4LCA4NzkyNSwgODc5MzAsIAorICAgIDg3OTM1LCA4Nzk0MCwgODc5NDUsIDg3OTUwLCA4Nzk1NSwgODc5NjAsIDg3OTY1LCA4Nzk2OSwgODc5NzMsIDg3OTc3LCAKKyAgICA4Nzk4MSwgODc5ODUsIDg3OTg5LCA4Nzk5MywgODc5OTcsIDg4MDAxLCA4ODAwNywgODgwMTMsIDg4MDE5LCA4ODAyNSwgCisgICAgODgwMjksIDg4MDMzLCA4ODAzNywgODgwNDEsIDg4MDQ1LCA4ODA0OSwgODgwNTMsIDg4MDU3LCA4ODA2MSwgODgwNjYsIAorICAgIDg4MDcxLCA4ODA3NiwgODgwODEsIDg4MDg2LCA4ODA5MSwgODgwOTYsIDg4MTAxLCA4ODEwNiwgODgxMTEsIDg4MTE2LCAKKyAgICA4ODEyMSwgODgxMjYsIDg4MTMxLCA4ODEzNiwgODgxNDEsIDg4MTQ2LCA4ODE1MSwgODgxNTYsIDg4MTYxLCA4ODE2NiwgCisgICAgODgxNzEsIDg4MTc2LCA4ODE4MSwgODgxODYsIDg4MTkxLCA4ODE5NiwgODgyMDEsIDg4MjA2LCA4ODIxMSwgODgyMTYsIAorICAgIDg4MjIxLCA4ODIyNiwgODgyMzEsIDg4MjM2LCA4ODI0MSwgODgyNDYsIDg4MjUxLCA4ODI1NiwgODgyNjEsIDg4MjY2LCAKKyAgICA4ODI3MSwgODgyNzYsIDg4MjgxLCA4ODI4NiwgODgyOTEsIDg4Mjk2LCA4ODMwMSwgODgzMDYsIDg4MzExLCA4ODMxNiwgCisgICAgODgzMjEsIDg4MzI2LCA4ODMzMSwgODgzMzYsIDg4MzQxLCA4ODM0NiwgODgzNTEsIDg4MzU2LCA4ODM2MSwgODgzNjYsIAorICAgIDg4MzcxLCA4ODM3NiwgODgzODEsIDg4Mzg2LCA4ODM5MSwgODgzOTYsIDg4NDAxLCA4ODQwNiwgODg0MTEsIDg4NDE2LCAKKyAgICA4ODQyMSwgODg0MjYsIDg4NDMxLCA4ODQzNiwgODg0NDEsIDg4NDQ2LCA4ODQ1MSwgODg0NTYsIDg4NDYxLCA4ODQ2NiwgCisgICAgODg0NzEsIDg4NDc2LCA4ODQ4MSwgODg0ODYsIDg4NDkxLCA4ODQ5NiwgODg1MDEsIDg4NTA2LCA4ODUxMSwgODg1MTYsIAorICAgIDg4NTIxLCA4ODUyNiwgODg1MzEsIDg4NTM2LCA4ODU0MSwgODg1NDYsIDg4NTUxLCA4ODU1NiwgODg1NjEsIDg4NTY2LCAKKyAgICA4ODU3MSwgODg1NzYsIDg4NTgxLCA4ODU4NiwgODg1OTEsIDg4NTk2LCA4ODYwMSwgODg2MDYsIDg4NjExLCA4ODYxNiwgCisgICAgODg2MjEsIDg4NjI2LCA4ODYzMSwgODg2MzYsIDg4NjQxLCA4ODY0NiwgODg2NTEsIDg4NjU2LCA4ODY2MSwgODg2NjYsIAorICAgIDg4NjcxLCA4ODY3NiwgODg2ODEsIDg4Njg2LCA4ODY5MSwgODg2OTYsIDg4NzAxLCA4ODcwNiwgODg3MTEsIDg4NzE2LCAKKyAgICA4ODcyMSwgODg3MjYsIDg4NzMxLCA4ODczNiwgODg3NDEsIDg4NzQ2LCA4ODc1MSwgODg3NTYsIDg4NzYxLCA4ODc2NiwgCisgICAgODg3NzEsIDg4Nzc2LCA4ODc4MSwgODg3ODYsIDg4NzkxLCA4ODc5NiwgODg4MDEsIDg4ODA2LCA4ODgxMSwgODg4MTYsIAorICAgIDg4ODIxLCA4ODgyNiwgODg4MzEsIDg4ODM2LCA4ODg0MSwgODg4NDYsIDg4ODUxLCA4ODg1NiwgODg4NjEsIDg4ODY2LCAKKyAgICA4ODg3MSwgODg4NzYsIDg4ODgxLCA4ODg4NiwgODg4OTEsIDg4ODk2LCA4ODkwMSwgODg5MDYsIDg4OTExLCA4ODkxNiwgCisgICAgODg5MjEsIDg4OTI2LCA4ODkzMSwgODg5MzYsIDg4OTQxLCA4ODk0NiwgODg5NTEsIDg4OTU3LCA4ODk2MiwgODg5NjcsIAorICAgIDg4OTcyLCA4ODk3NywgODg5ODIsIDg4OTg3LCA4ODk5MiwgODg5OTgsIDg5MDAzLCA4OTAwOCwgODkwMTMsIDg5MDE4LCAKKyAgICA4OTAyMywgODkwMjgsIDg5MDMzLCA4OTAzOCwgODkwNDMsIDg5MDQ4LCA4OTA1MywgODkwNTgsIDg5MDYzLCA4OTA2OCwgCisgICAgODkwNzMsIDg5MDc4LCA4OTA4MywgODkwODgsIDg5MDkzLCA4OTA5OCwgODkxMDMsIDg5MTA4LCA4OTExMywgODkxMTgsIAorICAgIDg5MTIzLCA4OTEyOCwgODkxMzMsIDg5MTM4LCA4OTE0MywgODkxNDgsIDg5MTUzLCA4OTE1OCwgODkxNjcsIDg5MTcyLCAKKyAgICA4OTE4MSwgODkxODYsIDg5MTk1LCA4OTIwMCwgODkyMDksIDg5MjE0LCA4OTIyMywgODkyMjgsIDg5MjM3LCA4OTI0MiwgCisgICAgODkyNTEsIDg5MjU2LCA4OTI2NSwgODkyNzAsIDg5Mjc1LCA4OTI4NCwgODkyODgsIDg5Mjk3LCA4OTMwMiwgODkzMTEsIAorICAgIDg5MzE2LCA4OTMyNSwgODkzMzAsIDg5MzM5LCA4OTM0NCwgODkzNTMsIDg5MzU4LCA4OTM2NywgODkzNzIsIDg5MzgxLCAKKyAgICA4OTM4NiwgODkzOTUsIDg5NDAwLCA4OTQwOSwgODk0MTQsIDg5NDIzLCA4OTQyOCwgODk0MzMsIDg5NDM4LCA4OTQ0MywgCisgICAgODk0NDgsIDg5NDUzLCA4OTQ1OCwgODk0NjIsIDg5NDY3LCA4OTQ3MiwgODk0NzcsIDg5NDgyLCA4OTQ4NywgODk0OTIsIAorICAgIDg5NDk4LCA4OTUwMywgODk1MDgsIDg5NTEzLCA4OTUxOSwgODk1MjMsIDg5NTI4LCA4OTUzNCwgODk1MzksIDg5NTQ0LCAKKyAgICA4OTU0OSwgODk1NTQsIDg5NTU5LCA4OTU2NCwgODk1NjksIDg5NTc0LCA4OTU3OSwgODk1ODQsIDg5NTkwLCA4OTU5NSwgCisgICAgODk2MDAsIDg5NjA1LCA4OTYxMSwgODk2MTYsIDg5NjIxLCA4OTYyNiwgODk2MzEsIDg5NjM3LCA4OTY0MiwgODk2NDcsIAorICAgIDg5NjUyLCA4OTY1NywgODk2NjIsIDg5NjY4LCA4OTY3MywgODk2NzgsIDg5NjgzLCA4OTY4OCwgODk2OTMsIDg5Njk4LCAKKyAgICA4OTcwMywgODk3MDgsIDg5NzEzLCA4OTcxOCwgODk3MjMsIDg5NzI4LCA4OTczMywgODk3MzgsIDg5NzQzLCA4OTc0OCwgCisgICAgODk3NTMsIDg5NzU4LCA4OTc2MywgODk3NjgsIDg5NzczLCA4OTc3OCwgODk3ODMsIDg5Nzg5LCA4OTc5NSwgODk4MDEsIAorICAgIDg5ODA2LCA4OTgxMSwgODk4MTYsIDg5ODIxLCA4OTgyNywgODk4MzMsIDg5ODM5LCA4OTg0NCwgODk4NDksIDg5ODU0LCAKKyAgICA4OTg2MCwgODk4NjUsIDg5ODcwLCA4OTg3NSwgODk4ODAsIDg5ODg1LCA4OTg5MCwgODk4OTUsIDg5OTAwLCA4OTkwNSwgCisgICAgODk5MTAsIDg5OTE1LCA4OTkyMCwgODk5MjUsIDg5OTMwLCA4OTkzNSwgODk5NDAsIDg5OTQ2LCA4OTk1MiwgODk5NTgsIAorICAgIDg5OTYzLCA4OTk2OCwgODk5NzMsIDg5OTc4LCA4OTk4NCwgODk5OTAsIDg5OTk2LCA5MDAwMSwgOTAwMDYsIDkwMDExLCAKKyAgICA5MDAxNiwgOTAwMjEsIDkwMDI2LCA5MDAzMSwgOTAwMzYsIDkwMDQxLCAxNzUzOSwgOTAwNDYsIDkwMDUyLCA5MDA1NywgCisgICAgOTAwNjIsIDkwMDY3LCA5MDA3MiwgOTAwNzcsIDkwMDgzLCA5MDA4OCwgOTAwOTMsIDkwMDk4LCA5MDEwMywgOTAxMDgsIAorICAgIDkwMTE0LCA5MDExOSwgOTAxMjQsIDkwMTI5LCA5MDEzNCwgOTAxMzksIDkwMTQ0LCA5MDE0OSwgOTAxNTQsIDkwMTU5LCAKKyAgICA5MDE2NCwgOTAxNjksIDkwMTc0LCA5MDE3OSwgOTAxODQsIDkwMTg5LCA5MDE5NCwgOTAxOTksIDkwMjA0LCA5MDIwOSwgCisgICAgOTAyMTQsIDkwMjE5LCA5MDIyNCwgOTAyMzAsIDkwMjM1LCA5MDI0MCwgOTAyNDUsIDkwMjUwLCA5MDI1NSwgOTAyNjAsIAorICAgIDkwMjY1LCA5MDI3MCwgOTAyNzUsIDkwMjgwLCA5MDI4NSwgOTAyOTAsIDkwMjk1LCA5MDMwMCwgOTAzMDUsIDkwMzEwLCAKKyAgICA5MDMxNSwgOTAzMjAsIDkwMzI1LCA5MDMzMCwgOTAzMzUsIDkwMzQwLCA5MDM0NSwgOTAzNTAsIDkwMzU1LCA5MDM2MCwgCisgICAgOTAzNjUsIDkwMzcwLCA5MDM3NSwgOTAzODAsIDkwMzg1LCA5MDM5MCwgOTAzOTUsIDkwNDAwLCA5MDQwNSwgOTA0MTAsIAorICAgIDkwNDE1LCA5MDQyMCwgOTA0MjUsIDkwNDMwLCA5MDQzNiwgOTA0NDEsIDkwNDQ2LCA5MDQ1MSwgOTA0NTYsIDkwNDYxLCAKKyAgICA5MDQ2NiwgOTA0NzEsIDkwNDc2LCA5MDQ4MSwgOTA0ODYsIDkwNDkxLCA5MDQ5NywgOTA1MDIsIDkwNTA4LCA5MDUxMywgCisgICAgOTA1MTgsIDkwNTIzLCA5MDUyOCwgOTA1MzMsIDkwNTM4LCA5MDU0NCwgOTA1NDksIDkwNTU0LCA5MDU2MCwgOTA1NjUsIAorICAgIDkwNTcwLCA5MDU3NSwgOTA1ODAsIDkwNTg1LCA5MDU5MSwgOTA1OTcsIDkwNjAyLCA5MDYwNywgMTMyMTEsIDkwNjEyLCAKKyAgICA5MDYxNywgOTA2MjIsIDkwNjI3LCA5MDYzMiwgOTA2MzcsIDkwNjQyLCA5MDY0NywgOTA2NTIsIDkwNjU3LCA5MDY2MiwgCisgICAgOTA2NjcsIDkwNjcyLCA5MDY3NywgOTA2ODIsIDkwNjg3LCA5MDY5MiwgOTA2OTcsIDkwNzAyLCA5MDcwNywgOTA3MTIsIAorICAgIDkwNzE3LCA5MDcyMiwgOTA3MjcsIDkwNzMyLCA5MDczNywgOTA3NDIsIDkwNzQ3LCA5MDc1MiwgOTA3NTcsIDkwNzYyLCAKKyAgICA5MDc2NywgOTA3NzIsIDkwNzc3LCA5MDc4MiwgOTA3ODcsIDkwNzkyLCA5MDc5NywgOTA4MDIsIDkwODA3LCA5MDgxMiwgCisgICAgOTA4MTcsIDkwODIyLCA5MDgyNywgOTA4MzIsIDkwODM3LCA5MDg0MiwgOTA4NDcsIDkwODUyLCA5MDg1NywgOTA4NjIsIAorICAgIDkwODY3LCA5MDg3MiwgOTA4NzcsIDkwODgyLCA5MDg4NywgOTA4OTIsIDkwODk3LCA5MDkwMiwgOTA5MDcsIDkwOTEyLCAKKyAgICA5MDkxNywgOTA5MjIsIDkwOTI3LCA5MDkzMiwgOTA5MzgsIDkwOTQzLCA5MDk0OCwgOTA5NTMsIDkwOTU4LCA5MDk2NCwgCisgICAgOTA5NjksIDkwOTc0LCA5MDk3OSwgOTA5ODQsIDkwOTg5LCA5MDk5NCwgOTEwMDAsIDkxMDA1LCA5MTAxMCwgOTEwMTUsIAorICAgIDkxMDIwLCA5MTAyNSwgOTEwMzEsIDkxMDM2LCA5MTA0MSwgOTEwNDYsIDkxMDUxLCA5MTA1NiwgOTEwNjIsIDkxMDY3LCAKKyAgICA5MTA3MiwgOTEwNzcsIDkxMDgyLCA5MTA4NywgOTEwOTMsIDkxMDk5LCA5MTEwNCwgOTExMDksIDkxMTE0LCA5MTEyMCwgCisgICAgOTExMjYsIDkxMTMyLCA5MTEzNywgOTExNDIsIDkxMTQ4LCA5MTE1NCwgOTExNTksIDkxMTY1LCA5MTE3MSwgOTExNzcsIAorICAgIDkxMTgyLCA5MTE4NywgOTExOTMsIDkxMTk4LCA5MTIwNCwgOTEyMDksIDkxMjE1LCA5MTIyNCwgOTEyMjksIDkxMjM0LCAKKyAgICA5MTI0MCwgOTEyNDUsIDkxMjUxLCA5MTI1NiwgOTEyNjEsIDkxMjY2LCA5MTI3MSwgOTEyNzYsIDkxMjgxLCA5MTI4NiwgCisgICAgOTEyOTEsIDkxMjk2LCA5MTMwMSwgOTEzMDYsIDkxMzExLCA5MTMxNiwgOTEzMjEsIDkxMzI2LCA5MTMzMSwgOTEzMzYsIAorICAgIDkxMzQxLCA5MTM0NiwgOTEzNTEsIDkxMzU2LCA5MTM2MSwgOTEzNjYsIDkxMzcxLCA5MTM3NiwgOTEzODEsIDkxMzg2LCAKKyAgICA5MTM5MSwgOTEzOTYsIDkxNDAxLCA5MTQwNiwgOTE0MTIsIDkxNDE4LCA5MTQyNCwgOTE0MjksIDkxNDM0LCA5MTQzOSwgCisgICAgOTE0NDQsIDkxNDQ5LCA5MTQ1NCwgOTE0NTksIDkxNDY0LCA5MTQ2OSwgOTE0NzQsIDkxNDc5LCA5MTQ4NCwgOTE0ODksIAorICAgIDkxNDk0LCA5MTQ5OSwgOTE1MDQsIDkxNTA5LCA5MTUxNCwgOTE1MTksIDkxNTI0LCA5MTUzMCwgOTE1MzYsIDkxNTQxLCAKKyAgICA5MTU0NywgOTE1NTIsIDkxNTU3LCA5MTU2MywgOTE1NjgsIDkxNTc0LCA5MTU3OSwgOTE1ODUsIDkxNTkwLCA5MTU5NiwgCisgICAgOTE2MDEsIDkxNjA3LCA5MTYxMiwgOTE2MTcsIDkxNjIyLCA5MTYyNywgOTE2MzIsIDkxNjM3LCA5MTY0MiwgODc3MjAsIAorICAgIDg3NzI2LCA4NzczMiwgODc3MzgsIDkxNjQ4LCA4Nzc0NCwgODc3NTAsIDkxNjU0LCA4Nzc1NiwgODc3NjIsIDg3NzY4LCAKKyAgICA4Nzc3NCwgODc3ODAsIDg3Nzg2LCA4Nzc5MiwgODc3OTgsIDg3ODA0LCA5MTY2MCwgODc4MTAsIDg3ODE2LCA4NzgyMiwgCisgICAgOTE2NjYsIDg3ODI4LCA4NzgzNCwgODc4NDAsIDg3ODQ2LCA5MTY3MiwgODc4NTIsIDg3ODU4LCA4Nzg2NCwgODc4ODQsIAorICAgIDkxNjc4LCA5MTY4NCwgODc4OTAsIDkxNjkwLCA4Nzg5NiwgODc5MDIsIDg3OTA4LCA4NzkxNCwgODc5MjAsIDMxNTAsIAorICAgIDMxNTUsIDkxNjk2LCA5MTcwMSwgOTE3MDQsIDkxNzEwLCA5MTcxNiwgOTE3MjMsIDkxNzI4LCA5MTczMywgMjMzNywgCiB9OwogCiAvKiBjb2RlLT5uYW1lIHBocmFzZWJvb2sgKi8KLSNkZWZpbmUgcGhyYXNlYm9va19zaGlmdCA3Ci0jZGVmaW5lIHBocmFzZWJvb2tfc2hvcnQgMjA5CisjZGVmaW5lIHBocmFzZWJvb2tfc2hpZnQgOAorI2RlZmluZSBwaHJhc2Vib29rX3Nob3J0IDIwMQogc3RhdGljIHVuc2lnbmVkIGNoYXIgcGhyYXNlYm9va1tdID0gewotICAgIDAsIDIxOSwgMjAsIDI0NSwgMzksIDc5LCAyMjQsIDEsIDc5LCA1NCwgNTAsIDI0NywgMTQwLCA1MCwgMjI1LCAxODUsIDUwLCAKLSAgICAyNTQsIDEzNCwgMjU0LCA2NSwgNDMsIDIyNiwgNywgNDQsIDIyNiwgNywgMjUzLCAyMjQsIDk2LCA1MCwgMjQ5LCAyMjcsIAotICAgIDI0MCwgMTc0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxOSwgNDgsIDIxLCAyMTAsIDg2LCAyMSwgMTExLCAyMSwgMTA1LCAyMSwgCi0gICAgMTU4LCAyMSwgMTYxLCAyMSwgMTkwLCAyMSwgMTk1LCAyMSwgMTk5LCAyMSwgMTk2LCAyMSwgMjAxLCAyNDksIDIzNCwgMjIwLCAKLSAgICAxNTIsIDIzMywgMjEsIDUwLCAyNDUsIDEwNiwgNTAsIDI0MiwgMTM3LCA1MCwgMjI0LCAxNiwgNzksIDI0OSwgMjI1LCAyNTMsIAotICAgIDIxNCwgNywgNiwgMSwgNjEsIDcsIDYsIDEsIDI1MywgMTY2LCA3LCA2LCAxLCAyNTEsIDc0LCA3LCA2LCAxLCAyNDksIDY4LCAKLSAgICA3LCA2LCAxLCA3NiwgNywgNiwgMSwgMjQ1LCAxNCwgNywgNiwgMSwgMjQzLCAyMDksIDcsIDYsIDEsIDI0MiwgNjcsIDcsIDYsIAotICAgIDEsIDc0LCA3LCA2LCAxLCAyMzUsIDE1MCwgNywgNiwgMSwgMjM1LCAyOSwgNywgNiwgMSwgMTU2LCA3LCA2LCAxLCAxOTQsIAotICAgIDcsIDYsIDEsIDIzMCwgMzAsIDcsIDYsIDEsIDc4LCA3LCA2LCAxLCAyMjYsIDEwOSwgNywgNiwgMSwgMjI0LCA5OSwgNywgNiwgCi0gICAgMSwgMTUzLCA3LCA2LCAxLCAyMjIsIDkzLCA3LCA2LCAxLCAyMTcsIDE1MywgNywgNiwgMSwgNjksIDcsIDYsIDEsIDIxNCwgCi0gICAgMTA1LCA3LCA2LCAxLCAyMTIsIDk4LCA3LCA2LCAxLCAyMTEsIDE3OCwgNywgNiwgMSwgMjExLCAxMTcsIDcsIDYsIDEsIAotICAgIDIxMCwgMTU5LCA0MywgNDIsIDEyNywgMjIzLCA1MywgMjE5LCA0OCwgNDQsIDQyLCAxMjcsIDI1MCwgMzksIDI1NSwgMjMsIAotICAgIDEyMSwgMjMyLCAyMTksIDI0MiwgMTQ0LCAyNTUsIDIzLCA3LCA0LCAxLCA2MSwgNywgNCwgMSwgMjUzLCAxNjYsIDcsIDQsIAotICAgIDEsIDI1MSwgNzQsIDcsIDQsIDEsIDI0OSwgNjgsIDcsIDQsIDEsIDc2LCA3LCA0LCAxLCAyNDUsIDE0LCA3LCA0LCAxLCAKLSAgICAyNDMsIDIwOSwgNywgNCwgMSwgMjQyLCA2NywgNywgNCwgMSwgNzQsIDcsIDQsIDEsIDIzNSwgMTUwLCA3LCA0LCAxLCAyMzUsIAotICAgIDI5LCA3LCA0LCAxLCAxNTYsIDcsIDQsIDEsIDE5NCwgNywgNCwgMSwgMjMwLCAzMCwgNywgNCwgMSwgNzgsIDcsIDQsIDEsIAotICAgIDIyNiwgMTA5LCA3LCA0LCAxLCAyMjQsIDk5LCA3LCA0LCAxLCAxNTMsIDcsIDQsIDEsIDIyMiwgOTMsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUzLCA3LCA0LCAxLCA2OSwgNywgNCwgMSwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxMiwgOTgsIDcsIDQsIDEsIDIxMSwgMTc4LCAKLSAgICA3LCA0LCAxLCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNTksIDQzLCAyNDksIDEwNywgMTI3LCA2NywgMjMyLCAyMTksIAotICAgIDQ0LCAyNDksIDEwNywgMTI3LCAxODQsIDIyOCwgNzgsIDIxOSwgMjAsIDIzNSwgMjAwLCAyNDUsIDM5LCA3OSwgMjUwLCAKLSAgICAxODQsIDUwLCAyMjQsIDIzMSwgNTAsIDI0OSwgMTA2LCA1MCwgMjExLCA0MCwgNTAsIDI1MSwgMTQzLCAxMzAsIDIyMSwgCi0gICAgMTc1LCA1MCwgMjQ4LCA5LCAyNDksIDE3MSwgNTAsIDI0NCwgMTQ0LCAyMjYsIDE1OCwgMjM1LCAyNDUsIDIzMywgNDgsIDUyLCAKLSAgICAyNTQsIDExOCwgMjI0LCAxLCA3OSwgMjI4LCA1NywgNTAsIDIxOSwgNTQsIDI0MCwgMTc1LCAyMjMsIDEwNSwgNTAsIDIzMSwgCi0gICAgMjM3LCAyNDgsIDc5LCA1MCwgMjI1LCAyNCwgNTAsIDIxOCwgMjQsIDEwNSwgMjE4LCAyNCwgMTU4LCAyNTUsIDEyLCAyNTUsIAotICAgIDIzLCAyMzAsIDIzMywgNTAsIDIyNSwgNzEsIDUwLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDI1MCwgMTkxLCAyMTgsIDI0LCAKLSAgICAxMTEsIDIzMSwgMTUzLCAyMjYsIDE1OCwgMjM1LCAyNDUsIDIyMiwgMjUwLCA1MiwgMjU0LCAxMTgsIDIyNCwgMSwgNzksIAotICAgIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDIxMiwgCi0gICAgMTE0LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDIzNSwgMjAwLCAyMjQsIDE2LCA3OSwgNywgNiwgMSwgMTE2LCAyLCAyNDIsIAotICAgIDE0MywgNywgNiwgMSwgMTE2LCAyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTE2LCAyLCAKLSAgICAxODQsIDcsIDYsIDEsIDExNiwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA0OCwgNywgNiwgMSwgCi0gICAgMjU0LCAyNTIsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAxNjAsIDIsIDI0MiwgMTQzLCA3LCA2LCAKLSAgICAxLCAxNjAsIDIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxNjAsIDIsIDI0OCwgOSwgNywgNiwgCi0gICAgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgCi0gICAgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjQ1LCA2NywgNywgNiwgMSwgMjMwLCAKLSAgICAzMSwgMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDE0MiwgNywgNiwgMSwgCi0gICAgMTQ0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxNDQsIDIsIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDgsIDksIDIzMCwgODksIAotICAgIDUwLCA3LCA2LCAxLCAxNDQsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMDQsIDIsIDE0MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIAotICAgIDE0MiwgNywgNiwgMSwgMjE2LCAxNTIsIDcsIDQsIDEsIDIyMCwgNzgsIDIyMiwgOTMsIDcsIDQsIDEsIDExNiwgMiwgMjQyLCAKLSAgICAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDExNiwgMiwgCi0gICAgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI0OCwgOSwgNywgNCwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIAotICAgIDI1NCwgMjUyLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMTYwLCAyLCAyNDIsIDE0MywgNywgNCwgCi0gICAgMSwgMTYwLCAyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTYwLCAyLCAyNDgsIDksIDcsIDQsIAotICAgIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNjEsIAotICAgIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDksIDcsIDQsIDEsIDI0NSwgNjcsIDcsIDQsIDEsIDIzMCwgCi0gICAgMzEsIDIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIAotICAgIDE0NCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTQ0LCAyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCA5LCAyNDcsIDE3NywgCi0gICAgNTAsIDcsIDQsIDEsIDE0NCwgMiwgOTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMTQyLCAKLSAgICA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAyMTYsIDE1MiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMTE2LCAyLCAKLSAgICAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgCi0gICAgMTE2LCAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMTE2LCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOCwgCi0gICAgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAxNDIsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIAotICAgIDI1MCwgMzgsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDU5LCA0OCwgNywgNCwgCi0gICAgMSwgMjUxLCA3NSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjUxLCA3NSwgCi0gICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyNTAsIAotICAgIDI0MiwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgOTEsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDkxLCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDIzMSwgMjM3LCA3LCA0LCAxLCAxNjAsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNjAsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDYsIAotICAgIDEsIDE2MCwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAKLSAgICAyNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAKLSAgICAyNDMsIDIxMCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAyNDMsIDIxMCwgCi0gICAgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCA1OSwgNDgsIAotICAgIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAKLSAgICAyNDIsIDY4LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAKLSAgICA5MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgOTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAxODQsIDcsIDQsIDEsIDI0MCwgCi0gICAgMTYxLCAyLCAxODQsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgCi0gICAgMjM3LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNTEsIDE1NCwgNywgCi0gICAgNiwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIAotICAgIDI0MCwgMTYxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0NywgMTI3LCA3NCwgNywgNiwgMjcsIDIzNiwgMzgsIDcsIDQsIDI3LCAKLSAgICAyMzYsIDM4LCA3LCA2LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI1MCwgMzgsIDcsIAotICAgIDYsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMzLCAKLSAgICAyNDUsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAxNDIsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAxNDIsIDcsIDYsIDEsIDIzMywgCi0gICAgMTU1LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCi0gICAgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAKLSAgICAyNDcsIDEyOCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAotICAgIDkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgOTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDE0MiwgNywgNCwgMSwgMjMwLCAzMSwgCi0gICAgMiwgMTQyLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjUwLCAxOTEsIDcsIAotICAgIDYsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjMwLCAKLSAgICAzMSwgMjI0LCAyMDcsIDI1MSwgODYsIDI1NCwgNjUsIDcsIDYsIDEsIDI0NSwgMTQ2LCA3LCA0LCAxLCAyNDUsIDE0NiwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCAyNTEsIAotICAgIDE1NCwgNywgNCwgMSwgMTQ0LCAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMTQ0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxNDQsIAotICAgIDIsIDUyLCAxNDIsIDcsIDYsIDI3LCAyMjYsIDIzOCwgNywgNCwgMjcsIDIyNiwgMjM4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMTQyLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIAotICAgIDIyMywgMjI3LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMjMsIDIyNywgCi0gICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDE0MiwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMTQyLCA3LCA2LCAxLCAKLSAgICAyMjIsIDk0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAKLSAgICAyNTAsIDE5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQyLCAKLSAgICA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAKLSAgICAyMTcsIDE1NCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjE3LCAxNTQsIAotICAgIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCA5MSwgNywgNiwgMSwgCi0gICAgMTA0LCAyLCAxODQsIDcsIDQsIDEsIDEwNCwgMiwgMTg0LCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKLSAgICAxMDQsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMDQsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAxMDQsIDIsIDI1MSwgMTU0LCAKLSAgICA3LCA2LCAxLCAxMDQsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyMjIsIDIzNywgNDgsIDcsIDYsIDEsIAotICAgIDEwNCwgMiwgNTIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCA1MiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI4LCA3LCAKLSAgICA0LCAxLCAxMDQsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTIsIDk5LCAKLSAgICAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzgsIAotICAgIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAxNDIsIDcsIDQsIDEsIDIxMCwgCi0gICAgMTYwLCAyLCAxNDIsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIAotICAgIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAKLSAgICAyMDAsIDIyMiwgOTMsIDcsIDQsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgNTcsIDIsIDEwMywgNywgNiwgMSwgNTcsIDIsIAotICAgIDIxNiwgMTIsIDcsIDQsIDEsIDU3LCAyLCAyMTYsIDEyLCA3LCA2LCAxLCAxMzgsIDE5NSwgNywgNCwgMSwgMTM4LCAxOTUsIAotICAgIDcsIDYsIDEsIDIwNCwgNzgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDEwMywgNywgNCwgMSwgMjUxLCA3NSwgMiwgMTAzLCA3LCAKLSAgICA2LCAxLCAyNTQsIDIyOCwgMjQ5LCA2OCwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMTAzLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAKLSAgICAyMTYsIDEyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMTYsIDEyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNDgsIDYyLCA3LCA2LCAKLSAgICAxLCAyMjMsIDUyLCA3NiwgNywgNiwgMSwgMjIxLCAxOTcsIDcsIDYsIDEsIDIwNCwgNzYsIDcsIDYsIDEsIDI0NSwgMTUsIDIsIAotICAgIDEwMywgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIAotICAgIDExNCwgNywgNCwgMSwgMjQwLCAyMDgsIDcsIDYsIDEsIDIzNSwgMTkyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgOTEsIDcsIAotICAgIDYsIDEsIDIzNSwgMzAsIDIsIDEwMywgNywgNCwgMSwgMjM1LCAzMCwgMiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgCi0gICAgMTMwLCA3LCA0LCAxLCAyMzMsIDEwNiwgMiwgOTEsIDcsIDYsIDEsIDIxNSwgOTQsIDE5NCwgNywgNiwgMSwgMjMwLCAzMSwgCi0gICAgMiwgNDMsIDEwMywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjAwLCA0NCwgMjMzLCA0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMzAsIAotICAgIDIyOSwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjU1LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjU1LCA3LCA2LCAxLCAKLSAgICAyMjYsIDIyMywgNywgNCwgMSwgMjI2LCAyMjMsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAxMDMsIDcsIDQsIDEsIDIyNiwgCi0gICAgMTEwLCAyLCAxMDMsIDcsIDEsIDIxMCwgMjE0LCA3LCA2LCAxLCAxMzgsIDEwNSwgNywgNCwgMSwgMTM4LCAxMDUsIDcsIDYsIAotICAgIDEsIDI0NSwgODMsIDcsIDEsIDIyMywgNTIsIDI0NSwgODQsIDIzMiwgMTI5LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjI2LCAKLSAgICA3MCwgMTAzLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMTAzLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMTAzLCA3LCA2LCAxLCAKLSAgICAyMTcsIDE1NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjU1LCA3LCA0LCAxLCAxMDQsIDIsIAotICAgIDI0MCwgMjU1LCA3LCA2LCAxLCAyMTQsIDE1NywgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNiwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDEwMywgNywgNCwgMSwgMjExLCAxMTgsIDIsIDEwMywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA0LCAKLSAgICAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDYsIDEsIDI0NSwgMTYsIDcsIDYsIDEsIDI0NSwgMTcsIDIyMywgNTEsIDcsIDQsIDEsIAotICAgIDI0NSwgMTcsIDIyMywgNTEsIDcsIDQsIDEsIDI0NSwgMTcsIDIsIDIxNywgNzgsIDcsIDEsIDExMywgMiwgOTEsIDcsIDYsIAotICAgIDEsIDEzOCwgMTkwLCA3LCA0LCAxLCAxMzgsIDE5MCwgNywgMSwgMjM1LCAyMDAsIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgCi0gICAgOTEsIDcsIDEsIDIxMSwgMTgxLCA3LCAxLCAyNDgsIDU1LCAyNTAsIDE5LCA3LCAxLCAyMzMsIDgzLCAyNTAsIDE5LCA3LCAxLCAKLSAgICAyNTQsIDE0NSwgMjUwLCAxOSwgNywgMSwgMjIzLCA1OCwgMjUwLCAxOSwgNywgNiwgMSwgMjQ2LCA0OCwgMiwgMjUwLCAyNDIsIAotICAgIDcsIDYsIDEsIDI0OSwgNjksIDIsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQ2LCA0OCwgMiwgCi0gICAgMjUwLCAyNDIsIDcsIDYsIDEsIDIzMiwgMTk0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgNCwgMSwgMjM1LCAxNTAsIDcsIDQsIAotICAgIDEsIDIzMiwgMTk0LCA3LCA2LCAxLCAyMjgsIDE5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgNCwgMSwgMjM1LCAxNTAsIDcsIAotICAgIDQsIDEsIDIyOCwgMTkxLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMjQyLCA3LCAKLSAgICA2LCAxLCAyNDAsIDE2MSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgCi0gICAgMTQ0LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTA0LCAyLCAyNTAsIDI0MiwgCi0gICAgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDQsIAotICAgIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAxNDIsIDcsIAotICAgIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjUwLCAyNDIsIAotICAgIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAKLSAgICAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDc2LCAKLSAgICA3LCA2LCAxLCAxMTYsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCAyNDgsIDEwLCAyMiwgCi0gICAgMjMxLCAyMzcsIDcsIDYsIDEsIDExNiwgMiwgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDExNiwgMiwgNTksIDcyLCAKLSAgICAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDI1NCwgMjUzLCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDIzMSwgCi0gICAgMjM3LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgOTEsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCA5MSwgNywgNiwgMSwgMjQzLCAKLSAgICAyMTAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIAotICAgIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMjYsIDIyOCwgNywgNCwgCi0gICAgMSwgMTQ0LCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMTQ0LCAyLCAyMjYsIDIyOSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKLSAgICAxNDQsIDIsIDIyNiwgMjI5LCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDI0NSwgMTcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAKLSAgICAyNDUsIDE3LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDYsIDQ3LCAKLSAgICA3LCA2LCAxLCAyNDksIDY5LCAyLCA0LCAxLCAyMTAsIDE1OSwgNywgNCwgMSwgMjQ2LCA0NywgNywgNiwgMSwgMjQzLCAyMTAsIAotICAgIDIsIDE0MiwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDE0MiwgNywgNiwgMSwgMjQwLCAyMDYsIDcsIDYsIDEsIDIxMSwgMTgxLCAKLSAgICA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIAotICAgIDExNiwgMiwgMjIyLCAyMzcsIDcyLCAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA3MiwgMjIsIDE0MiwgNywgCi0gICAgNiwgMSwgMjU0LCAyNTMsIDIsIDE0MiwgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTgsIAotICAgIDEwNSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTgsIDEwNSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCA1MiwgCi0gICAgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDIzNSwgMjAwLCAyNTEsIAotICAgIDE1NCwgNywgNCwgMSwgMTE2LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTQzLCAKLSAgICA3LCA0LCAxLCAxNjAsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAotICAgIDEsIDE2MCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgNTIsIDI0MiwgMTQzLCA3LCA0LCAKLSAgICAxLCAyNDAsIDE2MSwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAKLSAgICA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDE0MywgCi0gICAgNywgNCwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKLSAgICAxLCAxNDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDUyLCAyNDIsIDE0MywgNywgNCwgCi0gICAgMSwgMjIzLCAyMjcsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgCi0gICAgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxNDMsIAotICAgIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCi0gICAgMSwgMTA0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNCwgCi0gICAgMSwgMjIyLCA5NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA0LCAxLCAKLSAgICAyMTcsIDE1NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA2LCAxLCAyMTAsIDIzMSwgNywgNCwgMSwgMjEwLCAyMzEsIDcsIDYsIDEsIAotICAgIDI0MiwgNjgsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjMwLCAzMSwgMiwgCi0gICAgMjAwLCA0NCwgMjMzLCA0MiwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjQ5LCAxMDgsIDcsIDYsIDEsIDIyNiwgMTM4LCA3LCA0LCAKLSAgICAxLCAyMjYsIDEzOCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDEwMywgNywgNiwgCi0gICAgMSwgMTE2LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDExNiwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTkxLCA3LCAKLSAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgCi0gICAgMTQ0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDIzMSwgMjM3LCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIAotICAgIDE0NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA3MiwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNDQsIDIsIAotICAgIDU5LCA3MiwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIxMSwgMTE4LCAKLSAgICAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDksIAotICAgIDEwOCwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTAsIDcsIDQsIAotICAgIDEsIDI0OCwgMTUxLCAyNDcsIDIyOCwgNywgNCwgMSwgMjI0LCAzNCwgMjQ3LCAyMjgsIDcsIDYsIDEsIDExNiwgMiwgOTEsIAotICAgIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDkxLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCA5MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAotICAgIDEzMCwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDIxNywgMjUxLCAKLSAgICAyMTcsIDc4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDcsIDYsIDEsIDI0MiwgMTg3LCAyMTgsIAotICAgIDEzMSwgNywgNCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCA2LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMTMwLCAKLSAgICA3LCA2LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgNywgNiwgMSwgMTYwLCAyLCA5MSwgNywgNCwgMSwgMTYwLCAyLCA5MSwgNywgCi0gICAgNiwgMSwgMjM1LCAxNTEsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgOTEsIDcsIDYsIDEsIDQsIDIyNCwgMTAwLCAyLCAKLSAgICAyNDEsIDU5LCAyMTcsIDc4LCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMjQxLCA1OSwgMjE3LCA3OCwgNywgNiwgMSwgMjIzLCAKLSAgICAyMjcsIDIsIDkxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgOTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCA2MSwgNywgNCwgMSwgMjU0LCAxNTEsIDcsIDQsIDEsIDIxNSwgCi0gICAgOTQsIDI1NCwgMTUxLCA3LCA0LCAxLCA1NywgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc4LCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAKLSAgICAyNDksIDEwOCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjE3LCA3OCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMTAzLCA3LCA0LCAKLSAgICAxLCAyMjMsIDUyLCA3NiwgNywgNCwgMSwgMjIxLCAxOTcsIDcsIDQsIDEsIDIyMSwgMTk4LCAyLCAxMDMsIDcsIDQsIDEsIAotICAgIDIwNCwgNzYsIDcsIDQsIDEsIDIyMywgNTIsIDIwNCwgNzYsIDcsIDQsIDEsIDIyMywgNTIsIDIwNCwgMTYwLCAyLCAxMDMsIAotICAgIDcsIDQsIDEsIDI1MCwgOCwgMjIzLCA1MiwgMjA0LCA3NiwgNywgNCwgMSwgMjQ3LCAxMjcsIDIzNSwgMTUxLCAyLCA5MSwgNywgCi0gICAgNCwgMSwgMjQzLCAyMTAsIDIsIDEwMywgNywgNCwgMSwgMTE5LCAyNDMsIDIwOSwgNywgMSwgNCwgNiwgMjQzLCAyMDksIDcsIAotICAgIDQsIDEsIDI0MywgMTE0LCA3LCA0LCAxLCAyMjMsIDE1NCwgMjQwLCAyNTUsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjcsIAotICAgIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDEwMywgNywgNCwgMSwgMjQxLCAyMTUsIDIsIDEwMywgNywgNCwgMSwgMjQwLCAxNjEsIAotICAgIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE5MiwgNywgMSwgNCwgNiwgNzQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgCi0gICAgMTg0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUyLCA0OSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIyMywgNTgsIDEwMywgCi0gICAgNywgNCwgMSwgMjMzLCA3LCA3LCA0LCAxLCAyMTUsIDk0LCAxOTQsIDcsIDQsIDEsIDIxNSwgOTQsIDIzMiwgNTUsIDIsIAotICAgIDIwMCwgMjMzLCA0MiwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMTAzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA0MywgMTAzLCA3LCAKLSAgICA0LCAxLCAyMzAsIDMxLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDEsIDQsIDYsIDIzMCwgMzAsIDcsIDQsIDEsIDI1MiwgMTQyLCAKLSAgICA3OCwgNywgMSwgNCwgNiwgMjI2LCAyMzgsIDcsIDQsIDEsIDI1MCwgOCwgMjI2LCAyMDUsIDcsIDQsIDEsIDIyNSwgMTM2LCAKLSAgICA3LCA0LCAxLCAyMTUsIDk0LCAxNTMsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAyMDAsIDIzMywgNDIsIDcsIDQsIAotICAgIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAxMDMsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyMDAsIDIzMywgNDIsIDcsIDQsIAotICAgIDEsIDIyMywgMjI3LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjQ0LCA5NSwgNywgNCwgMSwgMjIzLCA1MiwgCi0gICAgMjIzLCAyMjcsIDIsIDI0NCwgOTUsIDcsIDEsIDQsIDYsIDE1MywgNywgMSwgNCwgNiwgMjM1LCAyMDAsIDE1MywgNywgNCwgCi0gICAgMSwgMjIyLCA5NCwgMiwgMTAzLCA3LCA0LCAxLCAyNDUsIDgzLCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTEsIDIsIAotICAgIDIxOCwgMTA1LCAyMiwgMTAzLCA3LCA0LCAxLCAyMTgsIDIzMywgMjIzLCA1MiwgMjQ1LCA4MywgNywgNCwgMSwgMjQ1LCA4NCwgCi0gICAgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNywgMTUzLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjIzLCA1OCwgCi0gICAgMTAzLCA3LCA0LCAxLCAxMDQsIDEzMCwgNywgNCwgMSwgMjE0LCAxNTcsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIAotICAgIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTIsIDk4LCA3LCA0LCAxLCAyMTUsIDk0LCAKLSAgICAyMTEsIDExNywgNywgMSwgNCwgNiwgMjExLCAxMTcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIAotICAgIDEsIDIxMCwgMTYwLCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjQ1LCAxNiwgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjQ5LCAKLSAgICAxMDgsIDcsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgMSwgMjI1LCAxNDIsIDIxMywgMTM1LCAyNDQsIDEsIDcsIDEsIAotICAgIDIzNSwgMjAwLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDEsIDIxOCwgMTEyLCAyNTEsIDc0LCA3LCAxLCAyNTEsIDI1NCwgCi0gICAgMjUwLCAxOSwgNywgMSwgNCwgNiwgMjUzLCAxNjYsIDcsIDQsIDEsIDI1MCwgOCwgMjA0LCA3NiwgNywgMSwgNCwgNiwgMjQzLCAKLSAgICAyMTAsIDIsIDEwMywgNywgMSwgNCwgNiwgMjQyLCA2NywgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI0OSwgMTM1LCA3LCA0LCAKLSAgICAxLCAyMTUsIDk0LCAyMzUsIDI5LCA3LCAxLCA0LCA2LCAxNTYsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAxMDMsIDcsIDEsIAotICAgIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgOTEsIDcsIDEsIDIyMywgNTIsIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgOTEsIDcsIAotICAgIDQsIDEsIDI0NiwgNDgsIDI0NywgMjI4LCA3LCA0LCAxLCAyNDgsIDM0LCAyNDcsIDIyOCwgNywgNCwgMSwgMjQ2LCA0OCwgCi0gICAgMjQ3LCAyMjksIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyMTUsIDE4NiwgMjQ3LCAyMjgsIDcsIDQsIDEsIDIxNiwgMjM2LCAKLSAgICAyNDcsIDIyOCwgNywgNCwgMSwgMjE3LCAzMCwgMjQ3LCAyMjksIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDQsIDE0MiwgCi0gICAgMjQ3LCAyMjgsIDcsIDQsIDEsIDIzMiwgMTA1LCAyNDcsIDIyOCwgNywgNCwgMSwgMjMyLCA1NiwgMjQ3LCAyMjgsIDcsIDEsIAotICAgIDI1MSwgMjU0LCAyMjUsIDE4NCwgNywgMSwgMjUyLCA2LCAyMjUsIDE4NCwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2OCwgMiwgCi0gICAgMjQ0LCA5NSwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2OCwgMiwgMjQ0LCA5NiwgMjIsIDIxNywgNzgsIDU4LCAxLCA0LCAKLSAgICAyNDIsIDY3LCA1OCwgMSwgNCwgMjQyLCA2OCwgMiwgMTAzLCA1OCwgMSwgNCwgMjM1LCAxNTAsIDU4LCAxLCA0LCAxNTMsIAotICAgIDU4LCAxLCA0LCAyMTUsIDk0LCAxNTMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMTAzLCA1OCwgMSwgNCwgNiwgCi0gICAgMjM1LCAyMDAsIDE1MywgNTgsIDEsIDQsIDIxMiwgOTgsIDU4LCAxLCA0LCAyMTEsIDExNywgNTgsIDEsIDIyNCwgMTkzLCAKLSAgICA1OCwgMSwgNTIsIDIyNCwgMTkzLCA1OCwgMSwgMjE1LCA5NCwgMjQ5LCAyMjcsIDU4LCAxLCAyNTQsIDY1LCA1OCwgMSwgCi0gICAgMjIzLCA1MiwgMjQ5LCAyMjcsIDU4LCAxLCA0NCwgMTYzLCAyMjIsIDIzNiwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjM2LCAKLSAgICA1OCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA1OCwgMSwgMjIzLCA1MiwgMjQyLCAxODcsIDIxOCwgMTMxLCA1OCwgMSwgNDMsIAotICAgIDI1NCwgMSwgNTgsIDEsIDQ0LCAyNTQsIDEsIDU4LCAxLCAxMjAsIDI1NCwgMSwgNTgsIDEsIDEyNCwgMjU0LCAxLCA1OCwgMSwgCi0gICAgMjUwLCAzOSwgMjU1LCAyMywgMjUwLCAyNDIsIDU4LCAxLCA2NywgMjMyLCAyMTksIDU4LCAxLCAyMzEsIDIzNywgNTgsIDEsIAotICAgIDI1NSwgMTIsIDI1NSwgMjMsIDU4LCAxLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDEyMSwgNjcsIDIzMiwgMjE5LCA1OCwgCi0gICAgMSwgMTIxLCAyMzEsIDIzNywgNTgsIDEsIDEyMSwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAxMjEsIDI1NSwgMTIsIAotICAgIDI1NSwgMjMsIDU4LCAxLCAyMTUsIDIyMywgMjQ5LCAyMzQsIDU4LCAxLCAxNjMsIDIxNSwgMjIzLCAyNDksIDIzNCwgNTgsIAotICAgIDEsIDI1MCwgMTgxLCA0NCwgMTYzLCAyMjIsIDIzNiwgNTgsIDEsIDI1MCwgMTgxLCA0MywgMTYzLCAyMjIsIDIzNiwgNTgsIAotICAgIDEsIDEyMCwgMjE3LCA4OCwgNTgsIDEsIDEyNCwgMjE3LCA4OCwgNTgsIDEsIDk2LCA1MCwgNTgsIDEsIDIzMCwgMTg3LCA1MCwgCi0gICAgMjUxLCAxNTQsIDU5LCA0OCwgMjIyLCAyMzcsIDQ4LCAyMjYsIDIyOCwgNCwgMTg0LCA1MiwgMjU1LCAxMiwgMjU1LCAyMywgCi0gICAgNTgsIDEsIDIyMywgMzksIDEwMywgNTgsIDEsIDI0OSwgMTM5LCAyNTUsIDIzLCA1OCwgMSwgNCwgMjQzLCAxMTQsIDU4LCAxLCAKLSAgICA0LCAxNTYsIDU4LCAxLCA0LCAyMjIsIDkzLCA1OCwgMSwgNCwgMjExLCAxNzgsIDU4LCAxLCA0LCAyMjMsIDUyLCAyNDIsIAotICAgIDE4NywgMjE4LCAxMzEsIDU4LCAxLCAyNDUsIDI4LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMTM4LCAxMzAsIDU4LCAxLCAKLSAgICAyMzAsIDIzMCwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyNywgMTM4LCAxMzAsIDU4LCAKLSAgICAxLCAyMTAsIDI1NCwgMjQ4LCA1MiwgMTM4LCA3OSwgNTgsIDEsIDIxMSwgNzAsIDI0OCwgNTIsIDEzOCwgNzksIDU4LCAxLCAKLSAgICAyMTMsIDEzMywgNTgsIDEsIDIxNCwgMTg2LCA1OCwgMSwgNTIsIDI1NCwgNjUsIDU4LCAxLCAxMjEsIDEyNCwgMjU0LCAxLCAKLSAgICA1OCwgMSwgMTIxLCAxMjAsIDI1NCwgMSwgNTgsIDEsIDEyMSwgNDMsIDI1NCwgMSwgNTgsIDEsIDEyMSwgNDQsIDI1NCwgMSwgCi0gICAgNTgsIDEsIDEyMSwgMjIyLCAyMzYsIDU4LCAxLCAyMzAsIDIyOSwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAyMzAsIAotICAgIDIyOSwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMjMwLCAyMjksIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCA1OCwgMSwgCi0gICAgMTIxLCAxODQsIDU4LCAxLCAyMjMsIDE2MCwgMjQ5LCAyMzQsIDU4LCAxLCAyNTIsIDY2LCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAKLSAgICAyNDUsIDE1MSwgMTI1LCAyMTYsIDMxLCA1OCwgMSwgMjUyLCA2NiwgMTIxLCAyMTYsIDMxLCA1OCwgMSwgMjQ1LCAxNTEsIAotICAgIDEyMSwgMjE2LCAzMSwgNTgsIDEsIDIyMCwgNTYsIDU4LCAxLCAyMDQsIDIyMCwgNTYsIDU4LCAxLCAxMjEsIDQzLCA3NSwgCi0gICAgMzgsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzOCwgMjU1LCAxMiwgMjU1LCAyMywgMzgsIDI1MCwgMzksIDI1NSwgMjMsIDM4LCAKLSAgICAxODQsIDM4LCAyMzEsIDIzNywgMzgsIDIyNiwgMTIzLCAzOCwgMjUxLCAxNTQsIDM4LCA1OSwgNDgsIDM4LCAyNDgsIDksIAotICAgIDM4LCAyNDEsIDU5LCA0OCwgMzgsIDIyMiwgMjM3LCA0OCwgMzgsIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjUwLCAKLSAgICAyNDIsIDM4LCA2NywgMjMyLCAyMjAsIDQ4LCAzOCwgNTIsIDY3LCAyMzIsIDIyMCwgNDgsIDM4LCA1MiwgMjQyLCAxNDQsIAotICAgIDI1NSwgMjMsIDM4LCAyNTEsIDcsIDM4LCAyMzUsIDIwMCwgMjUxLCAxNTQsIDM4LCAyMTUsIDk0LCAyNDksIDIyOCwgNDgsIAotICAgIDM4LCAyNDksIDIyOCwgNDgsIDM4LCAyMjMsIDUyLCAyNDksIDIyOCwgNDgsIDM4LCAyNDksIDIyOCwgNzIsIDIyMiwgMjU0LCAKLSAgICAzOCwgMjQyLCAxNDQsIDI1NSwgMjQsIDUxLCAzOCwgMjU1LCAxMiwgMjU1LCAyNCwgNTEsIDM4LCA0MywgMjE3LCA4OSwgNTEsIAotICAgIDM4LCA0NCwgMjE3LCA4OSwgNTEsIDM4LCA0MywgMjU0LCAxMTgsIDQ4LCAzOCwgMjQwLCAyNTUsIDM4LCA0MywgMTYzLCAKLSAgICAyMjIsIDIzNywgNTEsIDM4LCAxMjAsIDIxNywgODksIDUxLCAzOCwgMTI0LCAyMTcsIDg5LCA1MSwgMzgsIDk2LCA1LCA1MSwgCi0gICAgMzgsIDIzMCwgMTg3LCA1LCA1MSwgMzgsIDIyNiwgNjgsIDI0MSwgNTksIDUxLCAzOCwgMjIzLCA1OCwgMjQxLCA1OSwgNTEsIAotICAgIDM4LCA1OSwgNTEsIDM4LCAyNDgsIDEwLCA1MSwgMzgsIDIyMiwgMjM3LCA1MSwgMzgsIDI0OSwgMjI4LCA1MSwgMzgsIDI1MCwgCi0gICAgMTkxLCAzOCwgMjI2LCAyMjgsIDM4LCA2NywgMjMyLCAyMjAsIDUxLCAzOCwgMjUxLCAxNDgsIDUxLCAzOCwgMjM1LCAyMDAsIAotICAgIDUyLCAyNTQsIDMyLCA1MSwgMzgsIDI1MCwgMjQzLCA1MSwgMzgsIDI1MCwgMzksIDI1NSwgMjQsIDUxLCAzOCwgMjUxLCAKLSAgICAxNTUsIDUxLCAzOCwgMjM1LCAyMDAsIDI1MSwgMTU1LCA1MSwgMzgsIDIxNiwgOTAsIDUxLCAzOCwgMjMxLCAyMzgsIDUxLCAKLSAgICAzOCwgMTIxLCAyMzIsIDIxOSwgMzgsIDUyLCAxMjEsIDIzMiwgMjE5LCAzOCwgMjE2LCA5MCwgMjI2LCAxMjQsIDM4LCAyMTksIAotICAgIDI1MywgMjE4LCAxMDUsIDIyNiwgMTI0LCAzOCwgMjAwLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDM4LCAyMTksIDI1MywgMjE5LCAKLSAgICA0OSwgMjI2LCAxMjQsIDM4LCAyMDAsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgNDQsIDE2MywgMjIyLCAyMzcsIDUxLCAzOCwgCi0gICAgMjM1LCAyMDAsIDI1MSwgMTQ4LCA1MSwgMzgsIDQyLCA1MSwgMzgsIDIyMSwgMTgyLCA1MSwgMzgsIDIxMSwgMTc5LCA0OCwgCi0gICAgMzgsIDY3LCAxODQsIDM4LCA1MiwgMjI2LCAxMjMsIDM4LCAyNDIsIDE0NCwgMTM4LCA3OSwgMzgsIDI1NSwgMTIsIDEzOCwgCi0gICAgNzksIDM4LCAyNiwgMjI1LCAxNzgsIDM4LCAyNiwgMjM0LCA4LCAzOCwgMjYsIDI0OCwgNCwgMjE2LCAxOSwgMzgsIDI2LCAKLSAgICAyMTAsIDIxOSwgMzgsIDI1MSwgMTQ4LCA0OCwgMzgsIDI0NSwgMTA2LCA1LCA1MSwgMzgsIDUyLCA2NywgMjMyLCAyMjAsIAotICAgIDUxLCAzOCwgNDMsIDI1NCwgMTE4LCA1MSwgMzgsIDIyOCwgNTcsIDIxNiwgOTAsIDQ4LCAzOCwgMjQxLCA2NSwgNDgsIDM4LCAKLSAgICAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCA0OCwgMzgsIDQzLCA0NCwgODAsIDUxLCAzOCwgMjE0LCAxNTMsIDgwLCA1MSwgMzgsIAotICAgIDI0MiwgMTQ5LCAyMzUsIDY5LCAzOCwgNDQsIDI1NCwgMiwgNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNywgNDgsIDM4LCAKLSAgICAyNDQsIDEzOSwgMzgsIDIxMSwgMTc5LCA1MSwgMzgsIDQzLCAyNTQsIDIsIDUxLCAzOCwgNDQsIDI1NCwgMiwgNTEsIDM4LCAKLSAgICA0NCwgMjU0LCAyLCAyMiwgMTIwLCAyNTQsIDIsIDUxLCAzOCwgNDQsIDE2MywgMjIyLCAyMzcsIDQ4LCAzOCwgNTksIDcyLCAKLSAgICAyMjIsIDI1NCwgMzgsIDI1MywgMjI1LCA1MSwgMzgsIDUyLCAyMjIsIDIzNywgNTEsIDM4LCAyMTAsIDM1LCA0OCwgMzgsIAotICAgIDUyLCAyNTEsIDE1NSwgNTEsIDM4LCA1MiwgMjUxLCAxNTQsIDM4LCA1MiwgMjMxLCAyMzcsIDM4LCA1MiwgMjMxLCAyMzgsIAotICAgIDUxLCAzOCwgNTIsIDE4NCwgMzgsIDUyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDM4LCA1MiwgOTcsIDgwLCA1MSwgMzgsIDcsIAotICAgIDQsIDEsIDYxLCAzOCwgNywgNCwgMSwgNzYsIDM4LCA3LCA0LCAxLCA3NCwgMzgsIDcsIDQsIDEsIDc4LCAzOCwgNywgNCwgMSwgCi0gICAgNjksIDM4LCA3LCA0LCAxLCAyNTEsIDc0LCAzOCwgNywgNCwgMSwgMjQ5LCA2OCwgMzgsIDcsIDQsIDEsIDI0MiwgNjcsIDM4LCAKLSAgICA3LCA0LCAxLCAxOTQsIDM4LCA3LCA0LCAxLCAxNTMsIDM4LCA3LCA0LCAxLCAyMTcsIDE1MywgMzgsIDcsIDQsIDEsIDIxNCwgCi0gICAgMTA1LCAzOCwgNywgNCwgMSwgMjExLCAxNzgsIDI2LCA2LCAxLCAyNDEsIDIwMywgMjYsIDQsIDEsIDI0MSwgMjAzLCAyNiwgCi0gICAgNiwgMSwgMjU0LCAzMSwgMjIxLCAyNDgsIDI2LCA0LCAxLCAyNTQsIDMxLCAyMjEsIDI0OCwgMjYsIDIyNywgMjAyLCA1MCwgCi0gICAgMjYsIDIzMiwgMTE0LCAyMjcsIDIwMiwgNTAsIDI2LCA2LCAxLCAyMjYsIDU1LCAyNDcsIDIzNSwgMjYsIDQsIDEsIDIyNiwgCi0gICAgNTUsIDI0NywgMjM1LCAyNiwgMjEwLCAyMTksIDI2LCA0LCAyMjMsIDUyLCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA0LCAKLSAgICAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNCwgMjIzLCA1MiwgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgCi0gICAgMTgwLCA4NywgMjYsIDIyNCwgMTYsIDc5LCAyNiwgMjE2LCAxOSwgMjYsIDI0OCwgNCwgMjE2LCAxOSwgMjYsIDYsIDEsIAotICAgIDI1NCwgMTUyLCAyLCAyMTYsIDE5LCAyNiwgMjU0LCAxMDUsIDIxNywgMywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMTYsIAotICAgIDE5LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTYsIDE5LCAyNiwgNiwgCi0gICAgMSwgMjI2LCAyMDQsIDIsIDIxNiwgMTksIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjA2LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIxNiwgMTksIDI2LCA2LCAxLCAKLSAgICAyNTQsIDE1MSwgMjYsIDYsIDEsIDI1MiwgMzQsIDI2LCA2LCAxLCAyNDMsIDExNCwgMjYsIDYsIDEsIDI0OCwgNjIsIDI2LCAKLSAgICA2LCAxLCAyNDUsIDEwOCwgMjYsIDYsIDEsIDIxMCwgODUsIDI2LCA2LCAxLCAyNDUsIDcxLCAyNiwgNiwgMSwgMjE2LCAxODAsIAotICAgIDI2LCA2LCAxLCAyMzUsIDE5MiwgMjYsIDYsIDEsIDIzNCwgMjI4LCAyNiwgNiwgMSwgMjMzLCAxMDQsIDI2LCA2LCAxLCAKLSAgICAyMzAsIDEwNywgMjYsIDYsIDEsIDIyNywgMjQyLCAyNiwgNiwgMSwgMjExLCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwMywgMjYsIAotICAgIDYsIDEsIDIyNSwgMTExLCAyNiwgNiwgMSwgMjIzLCA0MCwgMjYsIDYsIDEsIDIxOSwgMTc5LCAyNiwgNiwgMSwgMjE3LCA0MiwgCi0gICAgMjYsIDYsIDEsIDIxNCwgMTU3LCAyNiwgNiwgMSwgMjI1LCAxMzYsIDI2LCA2LCAxLCAyNTAsIDExOCwgMjYsIDYsIDEsIAotICAgIDIyNCwgMTY0LCAyNiwgNiwgMSwgMjI2LCAyMDUsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAzLCAyNiwgNiwgMSwgCi0gICAgMjE0LCAxNTgsIDIsIDI0OCwgMywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjQ1LCAxMDksIAotICAgIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIxNiwgCi0gICAgMTksIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI1NCwgMTUxLCAyNiwgCi0gICAgNCwgMSwgMjUyLCAzNCwgMjYsIDQsIDEsIDI0MywgMTE0LCAyNiwgNCwgMSwgMjQ4LCA2MiwgMjYsIDQsIDEsIDI0NSwgMTA4LCAKLSAgICAyNiwgNCwgMSwgMjEwLCA4NSwgMjYsIDQsIDEsIDI0NSwgNzEsIDI2LCA0LCAxLCAyMTYsIDE4MCwgMjYsIDQsIDEsIDIzNSwgCi0gICAgMTkyLCAyNiwgNCwgMSwgMjM0LCAyMjgsIDI2LCA0LCAxLCAyMzMsIDEwNCwgMjYsIDQsIDEsIDIzMCwgMTA3LCAyNiwgNCwgCi0gICAgMSwgMjI3LCAyNDIsIDI2LCA0LCAxLCAyMTEsIDE1NywgMjYsIDQsIDEsIDIyNiwgMjAzLCAyNiwgNCwgMSwgMjI1LCAxMTEsIAotICAgIDI2LCA0LCAxLCAyMjMsIDQwLCAyNiwgNCwgMSwgNDAsIDIxOSwgMTc5LCAyNiwgNCwgMSwgMjE5LCAxNzksIDI2LCA0LCAxLCAKLSAgICAyMTcsIDQyLCAyNiwgNCwgMSwgMjE0LCAxNTcsIDI2LCA0LCAxLCAyMjUsIDEzNiwgMjYsIDQsIDEsIDI1MCwgMTE4LCAyNiwgCi0gICAgNCwgMSwgMjI0LCAxNjQsIDI2LCA0LCAxLCAyMjYsIDIwNSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDMsIDI2LCA0LCAKLSAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAzLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1OCwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDE5LCAyNiwgNiwgMjM0LCAyNTMsIDg3LCAyNiwgCi0gICAgMjUyLCAzNSwgODcsIDI2LCAyMTYsIDE4MSwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQxLCA1OSwgODcsIDI2LCAyMTQsIAotICAgIDE1OCwgMiwgMjU1LCAxMiwgMjIsIDI0MSwgNTksIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0OCwgMTAsIDIyLCAyNDEsIDU5LCAKLSAgICA4NywgMjYsIDIyNSwgMTM3LCA4NywgMjYsIDIyNSwgMTEyLCA4NywgMjYsIDIzNCwgMjUzLCA4NywgMjYsIDEsIDI1NCwgMzEsIAotICAgIDIzNCwgMTIsIDI2LCA0LCAxLCAyNTQsIDMxLCAyMzQsIDEyLCAyNiwgMSwgMjE4LCAxMzksIDI2LCA0LCAxLCAyMTgsIDEzOSwgCi0gICAgMjYsIDEsIDI0NywgMjM1LCAyNiwgNCwgMSwgMjQ3LCAyMzUsIDI2LCAxLCAyMzQsIDEyLCAyNiwgNCwgMSwgMjM0LCAxMiwgCi0gICAgMjYsIDEsIDIyMSwgMjQ4LCAyNiwgNCwgMSwgMjIxLCAyNDgsIDgxLCA2LCAxLCAyMjAsIDU3LCA4MSwgNCwgMSwgMjIwLCAKLSAgICA1NywgODEsIDYsIDEsIDI0NCwgMTQ4LCA4MSwgNCwgMSwgMjQ0LCAxNDgsIDgxLCA2LCAxLCAyMzQsIDEyMywgODEsIDQsIDEsIAotICAgIDIzNCwgMTIzLCA4MSwgNiwgMSwgMjQxLCA1MiwgODEsIDQsIDEsIDI0MSwgNTIsIDgxLCA2LCAxLCAyNDMsIDEwOSwgODEsIAotICAgIDQsIDEsIDI0MywgMTA5LCA4MSwgNiwgMSwgMjIwLCAyNCwgODEsIDQsIDEsIDIyMCwgMjQsIDgxLCA2LCAxLCAyNDgsIDc3LCAKLSAgICA4MSwgNCwgMSwgMjQ4LCA3NywgMjYsIDIzNCwgMjI5LCA4NywgMjYsIDIyMywgNDEsIDg3LCAyNiwgMjMyLCA4OCwgMjE5LCAKLSAgICAxODAsIDg3LCAyNiwgMSwgMjEwLCAyMjQsIDI2LCA2LCAyMTYsIDE4MSwgODcsIDI2LCAyMzIsIDg4LCAyNDUsIDEwOSwgODcsIAotICAgIDI2LCAyMjMsIDUyLCAyMzIsIDg4LCAyNDUsIDEwOSwgODcsIDI2LCA2LCAxLCAyMjAsIDksIDI2LCA0LCAxLCAyMjAsIDksIAotICAgIDI2LCA2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAxLCAyMjEsIDI0NSwgMjYsIDQsIDEsIDIyMSwgMjQ1LCAyNiwgCi0gICAgMjIzLCA0MSwgMiwgMjE4LCAxMDUsIDg3LCAyNiwgNiwgMjIzLCA1MiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgCi0gICAgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIDIyMywgNTIsIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIAotICAgIDE4MCwgODcsIDMzLCA2LCAxLCAyMzYsIDY4LCAyLCAyNDIsIDE0MywgMzMsIDYsIDEsIDIzNSwgMTk2LCAzMywgNiwgMSwgCi0gICAgMjQ3LCAxNzAsIDMzLCA2LCAxLCAyNDIsIDE5NCwgMzMsIDYsIDEsIDIxNCwgMjAyLCAyMzYsIDY3LCAzMywgNiwgMSwgMjQ2LCAKLSAgICA0NCwgMzMsIDYsIDEsIDI1MSwgODQsIDc0LCAzMywgNiwgMSwgMjExLCA4LCAzMywgNiwgMSwgMjM1LCAxMzIsIDMzLCA2LCAKLSAgICAxLCAyMzIsIDE5MywgMzMsIDYsIDEsIDIyOCwgMTgzLCAzMywgNiwgMSwgMjE1LCAxNzUsIDMzLCA2LCAxLCAyMzQsIDU0LCAKLSAgICAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCAzMywgNiwgMSwgMjE5LCAyNTMsIDY5LCAzMywgNiwgMSwgMjQ2LCAKLSAgICA0MCwgMzMsIDYsIDEsIDYxLCAzMywgNiwgMSwgMjUyLCA4MywgMzMsIDYsIDEsIDIxMywgMjU1LCAzMywgNiwgMSwgMjQyLCAKLSAgICAyNDMsIDMzLCA2LCAxLCAyNDgsIDk4LCAzMywgNiwgMSwgMjM2LCA2NywgMzMsIDYsIDEsIDIxMCwgNzQsIDMzLCA2LCAxLCAKLSAgICAyMTAsIDk0LCAzMywgNiwgMSwgNzQsIDMzLCA2LCAxLCAyMTksIDI1MywgNzQsIDMzLCA2LCAxLCAxNzYsIDMzLCA2LCAxLCAKLSAgICAyNDUsIDE4MiwgMzMsIDYsIDEsIDI0NSwgMTY3LCAzMywgNiwgMSwgMjQ1LCAxNTgsIDMzLCA2LCAxLCA3OCwgMzMsIDYsIDEsIAotICAgIDIyNSwgMjI0LCAzMywgNiwgMSwgMjQ1LCAxMDAsIDMzLCA2LCAxLCAyNDUsIDkwLCAzMywgNiwgMSwgMjE3LCAyMywgMzMsIAotICAgIDYsIDEsIDY5LCAzMywgNiwgMSwgMjQ1LCAyMTAsIDMzLCA2LCAxLCAxNjIsIDMzLCA2LCAxLCAyMTUsIDE3OSwgMzMsIDYsIAotICAgIDEsIDI1MCwgMTM5LCAzMywgNiwgMSwgMjIwLCAxMDQsIDMzLCA2LCAxLCAyMjAsIDY3LCAzMywgNiwgMSwgMjQyLCAxMCwgCi0gICAgNTAsIDMzLCA2LCAxLCAyMTEsIDI3LCAzMywgNiwgMSwgMjE5LCA1NCwgNTAsIDMzLCA2LCAxLCA3NiwgMzMsIDYsIDEsIAotICAgIDIxMCwgMjEyLCAzMywgNiwgMSwgMTkyLCAzMywgNCwgMSwgNjEsIDMzLCA0LCAxLCAyNTIsIDgzLCAzMywgNCwgMSwgMjEzLCAKLSAgICAyNTUsIDMzLCA0LCAxLCAyNDIsIDI0MywgMzMsIDQsIDEsIDI0OCwgOTgsIDMzLCA0LCAxLCAyMzYsIDY3LCAzMywgNCwgMSwgCi0gICAgMjEwLCA3NCwgMzMsIDQsIDEsIDIxMCwgOTQsIDMzLCA0LCAxLCA3NCwgMzMsIDQsIDEsIDIxOSwgMjUzLCA3NCwgMzMsIDQsIAotICAgIDEsIDE3NiwgMzMsIDQsIDEsIDI0NSwgMTgyLCAzMywgNCwgMSwgMjQ1LCAxNjcsIDMzLCA0LCAxLCAyNDUsIDE1OCwgMzMsIAotICAgIDQsIDEsIDc4LCAzMywgNCwgMSwgMjI1LCAyMjQsIDMzLCA0LCAxLCAyNDUsIDEwMCwgMzMsIDQsIDEsIDI0NSwgOTAsIDMzLCAKLSAgICA0LCAxLCAyMTcsIDIzLCAzMywgNCwgMSwgNjksIDMzLCA0LCAxLCAyNDUsIDIxMCwgMzMsIDQsIDEsIDE2MiwgMzMsIDQsIDEsIAotICAgIDIxNSwgMTc5LCAzMywgNCwgMSwgMjUwLCAxMzksIDMzLCA0LCAxLCAyMjAsIDEwNCwgMzMsIDQsIDEsIDIyMCwgNjcsIDMzLCAKLSAgICA0LCAxLCAyNDIsIDEwLCA1MCwgMzMsIDQsIDEsIDIxMSwgMjcsIDMzLCA0LCAxLCAyMTksIDU0LCA1MCwgMzMsIDQsIDEsIAotICAgIDc2LCAzMywgNCwgMSwgMjEwLCAyMTIsIDMzLCA0LCAxLCAxOTIsIDMzLCA0LCAxLCAyMzYsIDY4LCAyLCAyNDIsIDE0MywgCi0gICAgMzMsIDQsIDEsIDIzNSwgMTk2LCAzMywgNCwgMSwgMjQ3LCAxNzAsIDMzLCA0LCAxLCAyNDIsIDE5NCwgMzMsIDQsIDEsIAotICAgIDIxNCwgMjAyLCAyMzYsIDY3LCAzMywgNCwgMSwgMjQ2LCA0NCwgMzMsIDQsIDEsIDI1MSwgODQsIDc0LCAzMywgNCwgMSwgCi0gICAgMjExLCA4LCAzMywgNCwgMSwgMjM1LCAxMzIsIDMzLCA0LCAxLCAyMzIsIDE5MywgMzMsIDQsIDEsIDIyOCwgMTgzLCAzMywgCi0gICAgNCwgMSwgMjE1LCAxNzUsIDMzLCA0LCAxLCAyMzQsIDU0LCAzMywgNCwgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCAzMywgCi0gICAgNCwgMSwgMjE5LCAyNTMsIDY5LCAzMywgNCwgMSwgMjQ2LCA0MCwgMzMsIDYsIDEsIDIyNiwgMjA1LCAzMywgNCwgMSwgMjI2LCAKLSAgICAyMDUsIDMzLCA2LCAxLCAyMTEsIDU5LCAzMywgNCwgMSwgMjExLCA1OSwgMzMsIDYsIDEsIDIzNSwgMTkwLCA3NiwgMzMsIDQsIAotICAgIDEsIDIzNSwgMTkwLCA3NiwgMzMsIDYsIDEsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzMiwgMTk4LCAyMTAsIAotICAgIDE4MywgMzMsIDYsIDEsIDIzNSwgMTkwLCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgMjMyLCAKLSAgICAxOTgsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjUyLCAxLCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MiwgMSwgMjEwLCAxODMsIAotICAgIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjUyLCAxLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgCi0gICAgMTgzLCAzMywgNiwgMSwgMjMzLCAyMzksIDMzLCA0LCAxLCAyMzMsIDIzOSwgMzMsIDYsIDEsIDIyNCwgMTY0LCAzMywgNCwgCi0gICAgMSwgMjI0LCAxNjQsIDMzLCA2LCAxLCAyNDQsIDkwLCAzMywgNCwgMSwgMjQ0LCA5MCwgMzMsIDYsIDEsIDIzNSwgMTUyLCAKLSAgICAzMywgNCwgMSwgMjM1LCAxNTIsIDMzLCA2LCAxLCAyMzUsIDE1MywgMiwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzMywgNCwgCi0gICAgMSwgMjM1LCAxNTMsIDIsIDUyLCAyNDIsIDE0NCwgMjU1LCAyMywgMzMsIDYsIDEsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjE0LCAKLSAgICAyMDUsIDMzLCA2LCAxLCAyMjIsIDE4NywgMjI2LCAyMDUsIDMzLCA0LCAxLCAyMjIsIDE4NywgMjI2LCAyMDUsIDMzLCA2LCAKLSAgICAxLCAyMjYsIDIwNiwgMiwgMjE2LCA2NiwgMzMsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDY2LCAzMywgNiwgMSwgMjI2LCAKLSAgICAxNDQsIDMzLCA0LCAxLCAyMjYsIDE0NCwgMzMsIDYsIDEsIDIzNCwgMTIsIDMzLCA0LCAxLCAyMzQsIDEyLCAzMywgMjE2LCAKLSAgICAxNDcsIDUwLCAzOCwgMzMsIDIxNiwgNjYsIDM4LCAzMywgMjI2LCA2OSwgMzgsIDMzLCAyNDgsIDE2MiwgMjI1LCAyMSwgMzgsIAotICAgIDMzLCAyMjQsIDE1OCwgMjI1LCAyMSwgMzgsIDMzLCAyMjUsIDYsIDM4LCAzMywgMjQwLCAyMTgsIDIxNiwgMTQ3LCA1MCwgCi0gICAgMzgsIDMzLCAyMzAsIDE5NiwgNTAsIDMzLCA2LCAxLCAyMTksIDI1MywgMjQwLCAxNjEsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAKLSAgICAyMTksIDI1MywgMjQwLCAxNjEsIDIsIDIxNywgNzgsIDMzLCA2LCAxLCAyMjAsIDE0OCwgNTAsIDMzLCA0LCAxLCAyMjAsIAotICAgIDE0OCwgNTAsIDMzLCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxMTUsIDMzLCA0LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAKLSAgICAxMTUsIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgMjE0LCAxNTYsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgMjE0LCAxNTYsIAotICAgIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgOTEsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDI0NCwgCi0gICAgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjEwLCAKLSAgICA3NSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTAsIDk1LCAyLCAyNDgsIAotICAgIDQ3LCAzMywgNCwgMSwgMjEwLCA5NSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDI0OCwgNDcsIDMzLCA0LCAKLSAgICAxLCAyMzUsIDE5LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjM1LCAxOSwgCi0gICAgMiwgNjcsIDkxLCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgOTEsIDMzLCA0LCAxLCAyMzUsIDE5LCAyLCA5MSwgMzMsIDYsIDEsIAotICAgIDI1MiwgMTMyLCAxNzYsIDMzLCA0LCAxLCAyNTIsIDEzMiwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNTksIDIsIDI0OCwgNDcsIAotICAgIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMjQ4LCA0NywgMzMsIDYsIDI3LCAyNDUsIDE1OSwgMjQyLCAyNDMsIDMzLCA0LCAyNywgCi0gICAgMjQ1LCAxNTksIDI0MiwgMjQzLCAzMywgNiwgMSwgMjI1LCAyMjUsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyMjUsIAotICAgIDIyNSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDI1NSwgMjksIDE2MiwgMzMsIDQsIDEsIDI1NSwgMjksIDE2MiwgCi0gICAgMzMsIDYsIDEsIDI0NSwgOTEsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDUsIDkxLCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgCi0gICAgMjE3LCAyNCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIxNywgMjQsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTgsIDEyMywgCi0gICAgNjksIDMzLCA0LCAxLCAyMTgsIDEyMywgNjksIDMzLCA2LCAxLCAyMTgsIDEyMywgMTA0LCAyLCA5MSwgMzMsIDQsIDEsIAotICAgIDIxOCwgMTIzLCAxMDQsIDIsIDkxLCAzMywgNiwgMSwgMjQyLCA1NiwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0MiwgNTYsIAotICAgIDIsIDI0OCwgNDcsIDMzLCA2LCAyNywgMjE3LCAyNCwgMjE1LCAxNzksIDMzLCA0LCAyNywgMjE3LCAyNCwgMjE1LCAxNzksIAotICAgIDMzLCA2LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgCi0gICAgMjUwLCAxNDAsIDIsIDY3LCA5MSwgMzMsIDQsIDEsIDI1MCwgMTQwLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMjAsIDM1LCAKLSAgICAzMywgNCwgMSwgMjIwLCAzNSwgMzMsIDYsIDEsIDI1NSwgMjksIDI1MCwgMTM5LCAzMywgNCwgMSwgMjU1LCAyOSwgMjUwLCAKLSAgICAxMzksIDMzLCA2LCAxLCAyNTUsIDI5LCAyNTAsIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI1NSwgMjksIDI1MCwgCi0gICAgMTQwLCAyLCAyNDgsIDQ3LCAzMywgMSwgMjI2LCA2MiwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTU0LCAzMywgNCwgCi0gICAgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNTQsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCAxMDMsIDMzLCA0LCAxLCAyMzUsIDE5LCAyLCAKLSAgICAxMDMsIDMzLCA2LCAxLCAyNDUsIDE4MywgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDI0NSwgMTgzLCAyLCAyMTcsIDc4LCAzMywgCi0gICAgNiwgMSwgMjQ1LCAxNTksIDIsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAxMDMsIDMzLCA2LCAxLCAyNDUsIDE1OSwgCi0gICAgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyMTcsIDc4LCAzMywgNiwgMSwgMjM0LCAxMzMsIDI1MCwgMTM5LCAKLSAgICAzMywgNCwgMSwgMjM0LCAxMzMsIDI1MCwgMTM5LCAzMywgNiwgMSwgMjQ1LCAxNjgsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAKLSAgICAyNDUsIDE2OCwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDIyNiwgNjIsIDMzLCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCAzMywgCi0gICAgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDExNiwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMTE2LCAyLCAyNDgsIAotICAgIDksIDMzLCA2LCAyNywgMTE2LCAyMzYsIDY3LCAzMywgNCwgMjcsIDExNiwgMjM2LCA2NywgMzMsIDYsIDEsIDIzNiwgNjgsIAotICAgIDIsIDI1MSwgMTU0LCAzMywgNCwgMSwgMjM2LCA2OCwgMiwgMjUxLCAxNTQsIDMzLCA2LCAxLCAyMjEsIDE5NywgMzMsIDQsIAotICAgIDEsIDIyMSwgMTk3LCAzMywgNiwgMSwgMjIxLCAxOTgsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIyMSwgMTk4LCAyLCAyNDgsIAotICAgIDksIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAKLSAgICAyMTAsIDk1LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAyNTUsIDI5LCAyNDYsIAotICAgIDQ0LCAzMywgNCwgMSwgMjU1LCAyOSwgMjQ2LCA0NCwgMzMsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgMzMsIDQsIAotICAgIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgMzMsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyNDAsIAotICAgIDE2MSwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTQ0LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxNDQsIDIsIDI0OCwgOSwgMzMsIAotICAgIDYsIDEsIDI1MiwgMTQyLCA3OCwgMzMsIDQsIDEsIDI1MiwgMTQyLCA3OCwgMzMsIDYsIDEsIDI1MiwgMTQyLCAxNDQsIDIsIAotICAgIDI0OCwgOSwgMzMsIDQsIDEsIDI1MiwgMTQyLCAxNDQsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDE2MCwgMiwgMjQ4LCA5LCAzMywgCi0gICAgNCwgMSwgMTYwLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM3LCAzMywgNCwgMSwgMTA0LCAyLCAyMzEsIAotICAgIDIzNywgMzMsIDYsIDEsIDEwNCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMTA0LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxMDQsIAotICAgIDIsIDUyLCAxNDIsIDMzLCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDMzLCA2LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA5LCAzMywgCi0gICAgNCwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQyLCAKLSAgICAyNDQsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTEsIDI4LCAyLCAyNDgsIAotICAgIDksIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgMjE4LCAxMDUsIDIyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgMjE4LCAKLSAgICAxMDUsIDIyLCAxMDMsIDMzLCA2LCAxLCAyNDIsIDU2LCAyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDU2LCAyLCAxMDMsIDMzLCAKLSAgICA2LCAxLCAyNDIsIDU2LCAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgNTYsIDIsIDkxLCAzMywgNiwgMSwgMjM0LCAyMCwgMjQ4LCAKLSAgICA5OCwgMzMsIDQsIDEsIDIzNCwgMjAsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDcsIDE3MCwgMzMsIDQsIDEsIAotICAgIDIzNCwgMjAsIDI0NywgMTcwLCAzMywgNiwgMSwgMjM0LCAyMCwgMjEwLCAyNywgMzMsIDQsIDEsIDIzNCwgMjAsIDIxMCwgCi0gICAgMjcsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDYsIDM4LCAzMywgNCwgMSwgMjM0LCAyMCwgMjQ2LCAzOCwgMzMsIDYsIDEsIAotICAgIDIzNCwgMjAsIDIzMiwgMTkzLCAzMywgNCwgMSwgMjM0LCAyMCwgMjMyLCAxOTMsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMjgsIAotICAgIDE4MywgMzMsIDQsIDEsIDIzNCwgMjAsIDIyOCwgMTgzLCAzMywgNiwgMSwgMjM0LCAyMCwgMjE5LCAxMTEsIDMzLCA0LCAxLCAKLSAgICAyMzQsIDIwLCAyMTksIDExMSwgMzMsIDYsIDEsIDIzNCwgMjAsIDIxNiwgNjEsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMTYsIAotICAgIDYxLCAzMywgNiwgMSwgMjIzLCA1MiwgMjEwLCA5NCwgMzMsIDQsIDEsIDIyMywgNTIsIDIxMCwgOTQsIDMzLCA2LCAxLCAKLSAgICAyNDUsIDE4MywgMiwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDEwMywgMzMsIDYsIDEsIDIzMywgNCwgMzMsIDQsIDEsIAotICAgIDIzMywgNCwgMzMsIDYsIDEsIDIyMywgNDIsIDMzLCA0LCAxLCAyMjMsIDQyLCAzMywgNiwgMSwgMjExLCA5MiwgMzMsIDQsIAotICAgIDEsIDIxMSwgOTIsIDMzLCA2LCAxLCAyMjQsIDkxLCAzMywgNCwgMSwgMjI0LCA5MSwgMzMsIDYsIDEsIDIxMiwgMjIsIDMzLCAKLSAgICA0LCAxLCAyMTIsIDIyLCAzMywgNiwgMSwgMjU0LCAxNzUsIDE3NiwgMzMsIDQsIDEsIDI1NCwgMTc1LCAxNzYsIDMzLCA2LCAKLSAgICAxLCAyNDUsIDE4MywgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0NSwgMTgzLCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgCi0gICAgNiwgMSwgMjQ1LCAxNTksIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMjMwLCAyMjksIDEwMywgCi0gICAgMzMsIDYsIDEsIDIyNSwgMjI1LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjI1LCAyMjUsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKLSAgICAyMjAsIDM2LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjIwLCAzNiwgMiwgMjQ4LCA0NywgMTUwLCA2LCAxLCAyNTMsIDE3MiwgCi0gICAgMTUwLCA2LCAxLCAyNTIsIDQ3LCAxNTAsIDYsIDEsIDI0MiwgMjEwLCAxNTAsIDYsIDEsIDI0OCwgMjI5LCAxNTAsIDYsIDEsIAotICAgIDI0NSwgMjIxLCAxNTAsIDYsIDEsIDIxMCwgMTE2LCAxNTAsIDYsIDEsIDI0NSwgMjA1LCAxNTAsIDYsIDEsIDI0NSwgNzMsIAotICAgIDE1MCwgNiwgMSwgMTEyLCAxNTAsIDYsIDEsIDIxMCwgNzQsIDE1MCwgNiwgMSwgMjM1LCAyMzQsIDE1MCwgNiwgMSwgMjMyLCAKLSAgICAxOTYsIDE1MCwgNiwgMSwgMjExLCAxNjAsIDE1MCwgNiwgMSwgMjUxLCA0MSwgMTUwLCA2LCAxLCAyMzQsIDE3MSwgMTUwLCAKLSAgICA2LCAxLCAyNDEsIDc1LCAxNTAsIDYsIDEsIDIzNSwgMTQ3LCAxNTAsIDYsIDEsIDI0MiwgMjUzLCAxNTAsIDYsIDEsIDI1MCwgCi0gICAgMTM0LCAxNTAsIDYsIDEsIDIzMSwgNjMsIDE1MCwgNiwgMSwgMjExLCA4LCAxNTAsIDYsIDEsIDIyOCwgNDQsIDE1MCwgNiwgCi0gICAgMSwgMjIwLCAxMDQsIDE1MCwgNiwgMSwgMjEzLCAxMzgsIDE1MCwgNiwgMSwgMjUwLCAxNjUsIDE1MCwgNiwgMSwgMjI1LCAKLSAgICAyMDgsIDE1MCwgNiwgMSwgMjM1LCAxMTYsIDE1MCwgNiwgMSwgMjA1LCAxNTAsIDYsIDEsIDIyMSwgMTYzLCAxNTAsIDYsIDEsIAotICAgIDIxMywgMTc5LCAxNTAsIDYsIDEsIDIxNiwgNjMsIDE1MCwgNiwgMSwgMjIzLCA5OCwgMTUwLCA2LCAxLCAyNDksIDI0NiwgCi0gICAgMTUwLCA2LCAxLCAyMTAsIDI0OSwgMTUwLCA2LCAxLCAyMjUsIDQ5LCAxNTAsIDYsIDEsIDIzNCwgMTgyLCAxNTAsIDYsIDEsIAotICAgIDIyNiwgMjI2LCAxNTAsIDYsIDEsIDI0NCwgMTUwLCAxNTAsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzNiwgMTUwLCAyNTQsIAotICAgIDY1LCAxNTAsIDI0NSwgMTYyLCA3OSwgMTUwLCAyNDUsIDM5LCA3OSwgMTUwLCAyNDksIDIyNywgMTUwLCAyMjQsIDE2LCA3OSwgCi0gICAgMTUwLCAyNTUsIDMwLCA3OSwgMTUwLCA0LCAxLCAyNTMsIDE3MiwgMTUwLCA0LCAxLCAyNTIsIDQ3LCAxNTAsIDQsIDEsIAotICAgIDI0MiwgMjEwLCAxNTAsIDQsIDEsIDI0OCwgMjI5LCAxNTAsIDQsIDEsIDI0NSwgMjIxLCAxNTAsIDQsIDEsIDIxMCwgMTE2LCAKLSAgICAxNTAsIDQsIDEsIDI0NSwgMjA1LCAxNTAsIDQsIDEsIDI0NSwgNzMsIDE1MCwgNCwgMSwgMTEyLCAxNTAsIDQsIDEsIDIxMCwgCi0gICAgNzQsIDE1MCwgNCwgMSwgMjM1LCAyMzQsIDE1MCwgNCwgMSwgMjMyLCAxOTYsIDE1MCwgNCwgMSwgMjExLCAxNjAsIDE1MCwgCi0gICAgNCwgMSwgMjUxLCA0MSwgMTUwLCA0LCAxLCAyMzQsIDE3MSwgMTUwLCA0LCAxLCAyNDEsIDc1LCAxNTAsIDQsIDEsIDIzNSwgCi0gICAgMTQ3LCAxNTAsIDQsIDEsIDI0MiwgMjUzLCAxNTAsIDQsIDEsIDI1MCwgMTM0LCAxNTAsIDQsIDEsIDIzMSwgNjMsIDE1MCwgCi0gICAgNCwgMSwgMjExLCA4LCAxNTAsIDQsIDEsIDIyOCwgNDQsIDE1MCwgNCwgMSwgMjIwLCAxMDQsIDE1MCwgNCwgMSwgMjEzLCAKLSAgICAxMzgsIDE1MCwgNCwgMSwgMjUwLCAxNjUsIDE1MCwgNCwgMSwgMjI1LCAyMDgsIDE1MCwgNCwgMSwgMjM1LCAxMTYsIDE1MCwgCi0gICAgNCwgMSwgMjA1LCAxNTAsIDQsIDEsIDIyMSwgMTYzLCAxNTAsIDQsIDEsIDIxMywgMTc5LCAxNTAsIDQsIDEsIDIxNiwgNjMsIAotICAgIDE1MCwgNCwgMSwgMjIzLCA5OCwgMTUwLCA0LCAxLCAyNDksIDI0NiwgMTUwLCA0LCAxLCAyMTAsIDI0OSwgMTUwLCA0LCAxLCAKLSAgICAyMjUsIDQ5LCAxNTAsIDQsIDEsIDIzNCwgMTgyLCAxNTAsIDQsIDEsIDIyNiwgMjI2LCAxNTAsIDQsIDEsIDI0NCwgMTUwLCAKLSAgICAxNTAsIDQsIDI3LCAyNDUsIDIyMiwgMjEwLCAyNDksIDE1MCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxNTAsIDI0MCwgMTc1LCAKLSAgICAxNTAsIDI0NiwgMTAzLCA1MCwgOTQsIDI1NSwgMjQsIDI0NSwgNjUsIDk0LCAyNTUsIDI0LCAyMjEsIDE2NCwgOTQsIDI1NSwgCi0gICAgMjQsIDIyMCwgOTAsIDk0LCAyNTUsIDI0LCAyMTAsIDEwNCwgMjI0LCA3NCwgOTQsIDI1NSwgMjQsIDIxMCwgMTA0LCAyNDMsIAotICAgIDEzMiwgOTQsIDI1NSwgMjQsIDIxNiwgNzYsIDk0LCAyNTUsIDI0LCAyMjMsIDUwLCA5NCwgMjU1LCAyNCwgMjEwLCAxMDMsIAotICAgIDk0LCAyNTUsIDI0LCAyMjUsIDI0OSwgOTQsIDI1NSwgMjQsIDIxMSwgMjAsIDk0LCAyNTUsIDI0LCAyMTYsIDIxNSwgOTQsIAotICAgIDI1NSwgMjQsIDI0MywgNDgsIDk0LCAyNTUsIDI0LCAyNDMsIDQ5LCAyMzAsIDc0LCA5NCwgMjU1LCAyNCwgMjQzLCA0NiwgCi0gICAgOTQsIDI1NSwgMjQsIDIyNCwgNzUsIDIyNiwgMjAsIDk0LCAyNTUsIDI0LCAyMTYsIDI1NCwgMjQzLCA2MywgOTQsIDI1NSwgCi0gICAgMjQsIDIyNSwgMjMwLCA5NCwgMjU1LCAyNCwgMjUzLCAyMDgsIDI0MiwgNDgsIDk0LCAyNTUsIDI0LCAyMzAsIDg0LCA5NCwgCi0gICAgMjU1LCAyNCwgMjMxLCAyMTMsIDk0LCAyNTUsIDI0LCAyMzEsIDU0LCA5NCwgMjU1LCAyNCwgMjMxLCA1NSwgMjM0LCAxODMsIAotICAgIDk0LCAyNTUsIDI0LCAyNDgsIDE3MSwgOTQsIDI1NSwgMjQsIDIyNCwgODYsIDk0LCAyNTUsIDI0LCAyMTYsIDI1NCwgMjI0LCAKLSAgICA3MCwgOTQsIDI1NSwgMjQsIDIxMSwgMzAsIDI1MiwgNDgsIDIxMCwgMjMwLCA5NCwgMjU1LCAyNCwgMjI2LCAyMTEsIDk0LCAKLSAgICAyNTUsIDI0LCAyMzYsIDI2LCA5NCwgMjU1LCAyNCwgMjQ4LCA3OCwgOTQsIDI1NSwgMjQsIDIxMCwgMzMsIDk0LCAxNjQsIAotICAgIDIzMSwgMTQ4LCAyNTAsIDQzLCA5NCwgMjI1LCAxNCwgMjIwLCAzOCwgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjIxLCAxNjQsIAotICAgIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyNSwgMjQzLCA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjQsIDc5LCA5NCwgMjI1LCAxNCwgCi0gICAgMjQxLCAxNjUsIDk0LCAyMjUsIDE0LCAyMTUsIDE3NywgOTQsIDIyNSwgMTQsIDIyMSwgMTY0LCA5NCwgMjI1LCAxNCwgMjI1LCAKLSAgICAyNDMsIDk0LCAyMjUsIDE0LCAyMjQsIDc5LCA5NCwgMjI1LCAxNCwgMjQxLCA2OCwgOTQsIDIyNSwgMTQsIDI0MSwgNjksIAotICAgIDI0MiwgMywgMzEsIDIxNCwgMywgOTQsIDIyNSwgMTQsIDIyNCwgMjAsIDk0LCAyMjUsIDE0LCAyNDgsIDIxNiwgMTc3LCAKLSAgICAyMzEsIDE3NiwgOTQsIDIyNSwgMTQsIDIzMSwgNDMsIDk0LCAyMjQsIDE0NCwgMjMxLCAxNzMsIDk0LCAyMjUsIDE0LCAyMjMsIAotICAgIDE3MiwgOTQsIDIyNCwgMTQ0LCAyMjUsIDI1MSwgOTQsIDIyNSwgMTQsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMjI1LCAxNCwgCi0gICAgMjE5LCAxNjEsIDI0NywgMTI4LCA5NCwgMjI0LCAxNDQsIDIxOSwgNTUsIDIyNSwgMjQ1LCA5NCwgMTY0LCAyMTQsIDE2MCwgCi0gICAgMjQ3LCAxMjgsIDk0LCAxNjQsIDIzMiwgMTE0LCAyNDcsIDEyOCwgOTQsIDIyNCwgMTQ0LCAyMjcsIDE5OSwgMjQyLCA0NywgCi0gICAgOTQsIDIyNSwgMTQsIDIyNCwgODAsIDIyNCwgNzQsIDk0LCAxLCAyNTQsIDE3OSwgOTQsIDEsIDI1MiwgMzYsIDk0LCAxLCAKLSAgICAyNDIsIDIwOCwgOTQsIDEsIDI0OCwgMTk3LCA5NCwgMSwgMjQxLCAyNDUsIDk0LCAxLCAyMTQsIDMsIDk0LCAxLCAyMTAsIAotICAgIDk3LCA5NCwgMSwgMjQxLCAyMDQsIDk0LCAxLCAyMTYsIDIzMSwgOTQsIDEsIDIxMCwgMjMzLCA5NCwgMSwgNDAsIDIzNSwgMCwgCi0gICAgOTQsIDEsIDIzNSwgMCwgOTQsIDEsIDIzMywgMTAwLCA5NCwgMSwgNDAsIDIzMSwgNzAsIDk0LCAxLCAyMzEsIDcwLCA5NCwgCi0gICAgMSwgNDAsIDIyNywgMTk4LCA5NCwgMSwgMjI3LCAxOTgsIDk0LCAxLCAyMjEsIDI1MSwgOTQsIDEsIDI1MywgMTcwLCA5NCwgCi0gICAgMSwgNDAsIDIyNSwgMjI0LCA5NCwgMSwgMjI1LCAyMjQsIDk0LCAxLCA0MCwgMjE1LCAxODAsIDk0LCAxLCAyMTUsIDE4MCwgCi0gICAgOTQsIDEsIDIyNCwgNDIsIDk0LCAxLCAyMjMsIDcwLCA5NCwgMSwgMjIwLCAyMiwgOTQsIDEsIDIxNywgMzksIDk0LCAyNywgCi0gICAgMjExLCA2LCA1MiwgMjE0LCAzLCA5NCwgMjcsIDIxMSwgNiwgMjE0LCA0LCAyMTAsIDIzMywgOTQsIDI3LCAyMTEsIDYsIDUyLCAKLSAgICAyMTAsIDIzMywgOTQsIDIyNCwgMTQ0LCAyNDMsIDQ4LCA5NCwgMjI0LCAxNDQsIDI0MywgNDYsIDksIDU0LCA1MCwgOSwgNSwgCi0gICAgMjIxLCAyNDQsIDksIDI0NCwgMzgsIDIzMSwgMTU5LCA5LCA1LCAyMjIsIDI1LCA5LCA1LCAyMjEsIDI0NywgMjU0LCA0NSwgCi0gICAgMjQ5LCAxMTcsIDIyMiwgMTk1LCAyNTQsIDQ1LCAyNDQsIDEyLCAyMjIsIDE5NSwgOSwgMjIzLCAxMzcsIDI1NCwgNDUsIAotICAgIDIyNSwgMTg2LCAyMzAsIDE5OCwgNTAsIDI1NCwgNDUsIDIyNSwgMTg2LCAyMTYsIDI0OSwgMjE2LCAxNDksIDUwLCAyNTQsIAotICAgIDIzMCwgNTAsIDksIDI0OSwgMjI3LCA5LCAyNDgsIDE1OCwgMjIwLCAxMzksIDksIDIyNSwgMTYsIDIxMywgMjQxLCA1MCwgOSwgCi0gICAgNSwgMjMwLCAxNzksIDksIDUsIDIyMiwgNSwgMjU0LCAxODEsIDIxMiwgNDUsIDksIDUsIDI1NCwgMTgxLCAyNTMsIDIyOSwgCi0gICAgOSwgNSwgMjIzLCAxNzAsIDI1NCwgMTgwLCA5LCA1LCAyMjMsIDE3OCwgMjU0LCAxNjEsIDI1NCwgMTEyLCA5LCA1LCAyMTcsIAotICAgIDcxLCA5LCA0LCAxMjUsIDIxNywgODEsIDksIDQsIDEyNSwgMjcsIDEwOSwgMiwgMjMzLCAxMDksIDIsIDIxMSwgNDMsIDksIAotICAgIDQsIDEyNSwgMjEwLCAxMDgsIDksIDQsIDI0NCwgMTczLCA5LCA0LCAyNDgsIDE5MiwgOSwgNCwgMjM0LCAyMTEsIDksIDIyMCwgCi0gICAgMTUyLCA5LCAxLCA3OSwgOSwgMjE1LCAyMTIsIDU5LCAyMjQsIDE0NCwgNzksIDksIDIyNCwgMTYsIDc5LCA5LCAxLCAyMzQsIAotICAgIDIxNSwgMjExLCA0MywgOSwgMSwgMjQyLCAyNiwgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNDgsIDksIDEsIDEwOSwgMiwgCi0gICAgMTgyLCA0OCwgOSwgMSwgMjEyLCAzMSwgMiwgMTgyLCA0OCwgOSwgMSwgMTA5LCAyLCAxODIsIDUxLCA5LCAxLCA3NywgMiwgCi0gICAgMTgyLCA0OCwgOSwgMSwgMjU0LCAxNzksIDksIDEsIDI1MiwgNjIsIDksIDEsIDIxNywgOSwgMjMxLCAxNjksIDksIDEsIAotICAgIDIxNywgOCwgOSwgMSwgMjE2LCAxOTMsIDksIDEsIDIzNSwgMTI5LCA5LCAxLCAyNDIsIDQ0LCA5LCAxLCAyMzQsIDEzNSwgOSwgCi0gICAgMSwgMjQ4LCAyMDMsIDksIDEsIDIxNiwgMjAzLCA5LCAxLCAyMjMsIDk4LCA5LCAxLCAyMTAsIDEwOCwgOSwgMSwgMjIxLCAKLSAgICAxNjgsIDksIDEsIDIyMCwgNjEsIDksIDEsIDIyMiwgMjgsIDksIDEsIDI0OCwgMjI0LCA5LCAxLCAyMTcsIDgxLCA5LCAxLCAKLSAgICAyMTAsIDExMSwgOSwgMSwgMjU0LCAyMDUsIDksIDEsIDI0MiwgMjUxLCA5LCAxLCAyMzQsIDE4MSwgMiwgMTEzLCAxNzAsIAotICAgIDQ4LCA5LCAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDIzNSwgMjAwLCAKLSAgICAyMTQsIDEwNSwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgCi0gICAgMTM0LCAxNzAsIDQ4LCA5LCAyMTcsIDQ0LCA5LCAxLCAyNDQsIDE1MCwgOSwgMSwgMjI0LCA4NCwgOSwgMSwgMjM1LCAwLCA5LCAKLSAgICAxLCAyMzMsIDEwOCwgOSwgMSwgMjMxLCA4MywgOSwgMSwgMjI4LCA2NywgOSwgMSwgMjQxLCAyMjUsIDksIDEsIDIxMiwgMzAsIAotICAgIDksIDEsIDEwOSwgMjMxLCAxOTcsIDksIDEsIDIxMSwgNDMsIDksIDI0NCwgMTcxLCA5LCAyNDgsIDE5MCwgOSwgMjM0LCAKLSAgICAyMDksIDksIDI0NCwgMTczLCA5LCAyNDgsIDE5MiwgOSwgMjM0LCAyMTEsIDksIDIyMCwgOTUsIDksIDIxOCwgNDYsIDksIAotICAgIDIzMSwgMjMxLCA0OCwgOSwgMTgyLCA0OCwgOSwgMTgyLCA1MSwgOSwgMjE4LCA2NiwgMjU0LCAxNzksIDksIDIzNSwgMjAwLCAKLSAgICAyNDgsIDE5MiwgOSwgMTY0LCAyMjgsIDY4LCAyNDIsIDIyNSwgOSwgMjA5LCAyNTUsIDksIDI1LCA1LCA0LCAyMTQsIDEwNiwgCi0gICAgNDgsIDksIDI1LCA1LCAyMzUsIDIwMCwgNCwgMjE0LCAxMDYsIDQ4LCA5LCAyNSwgNSwgNTksIDUxLCA5LCAyMjMsIDUyLCAKLSAgICAyNDgsIDE5MiwgOSwgMjQ0LCAxNzQsIDIsIDExMywgMjQ3LCAxMjYsIDksIDIxMiwgMzIsIDE4MiwgNTEsIDI1NCwgNDUsIAotICAgIDIxLCAyMTAsIDg2LCAyNTQsIDQ1LCAyMSwgMTExLCAyNTQsIDQ1LCAyMSwgMTA1LCAyNTQsIDQ1LCAyMSwgMTU4LCAyNTQsIAotICAgIDQ1LCAyMSwgMTYxLCAyNTQsIDQ1LCAyMSwgMTkwLCAyNTQsIDQ1LCAyMSwgMTk1LCAyNTQsIDQ1LCAyMSwgMTk5LCAyNTQsIAotICAgIDQ1LCAyMSwgMTk2LCAyNTQsIDQ1LCAyMSwgMjAxLCA5LCAyMjUsIDE4NSwgNTAsIDksIDI0OCwgOTEsIDIyMCwgMTM5LCA5LCAKLSAgICAyMTYsIDE0NywgMjIwLCAxMzksIDksIDI0NCwgODksIDIyNSwgMTIsIDIxOCwgMTU4LCA5LCAxLCAyNDcsIDEyNywgMjUyLCAKLSAgICA2MiwgOSwgMSwgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDEsIDIxOCwgMjQsIDI1NCwgMTc5LCA5LCAxLCAxMDksIDIxMiwgNDYsIAotICAgIDksIDEsIDEwOSwgMiwgMjEyLCAzMiwgMTgyLCA0OCwgOSwgMSwgMTA5LCAyLCAyMTIsIDMyLCAxODIsIDUxLCA5LCAxLCAKLSAgICAxMjUsIDI0MiwgMjYsIDksIDEsIDEyNSwgMTgyLCAyNTQsIDE3OSwgOSwgMSwgMTI1LCAxODIsIDIxMiwgMzAsIDksIDEsIAotICAgIDEwNCwgMiwgMTgyLCA0OCwgOSwgMSwgMTI1LCAxODIsIDIxMSwgNDMsIDksIDEsIDIxNSwgMTQ5LCA5LCAxLCAyMTUsIDE0NywgCi0gICAgOSwgMSwgMjUyLCA3MiwgOSwgMSwgMjE3LCA5LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjE3LCA5LCAyLCAxMzQsIDE3MCwgNzIsIAotICAgIDI0NiwgMTExLCA5LCAxLCAyMjUsIDIwOCwgOSwgMSwgMjE3LCA2LCA5LCAxLCAyNTIsIDYwLCA5LCAxLCAxMjIsIDIsIDE4MiwgCi0gICAgNDgsIDksIDEsIDEyMiwgMiwgMTEzLCAxNzAsIDY3LCA0OCwgOSwgMSwgMjI3LCAxNTcsIDksIDEsIDI0NiwgNTEsIDksIDEsIAotICAgIDEyMiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMTcsIDI3LCA5LCAxLCAyMTcsIDI1LCA5LCAxLCAyNDgsIDEzOCwgOSwgMSwgCi0gICAgMjQ4LCAyMDQsIDIsIDIyMiwgMjM2LCA5LCAxLCAyNDgsIDIwNCwgMiwgNTksIDUxLCA5LCAxLCAyNDgsIDIwNCwgMiwgNTksIAotICAgIDI1MiwgNTEsIDIyLCA0LCAyMTcsIDgxLCA5LCAxLCAyNDgsIDIwOSwgOSwgMSwgMjQ4LCAxNDAsIDksIDEsIDI0NiwgNzgsIAotICAgIDksIDEsIDI0OCwgMjA0LCAyLCAxMzQsIDE3MCwgNzIsIDI0NiwgMTExLCA5LCAxLCAyNDgsIDIwNCwgMiwgMjQ0LCAxOSwgCi0gICAgMTcwLCA0OCwgOSwgMSwgMjIyLCAxNzMsIDksIDEsIDIyMywgOTksIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMjMsIDk5LCAyLCAKLSAgICAyMjIsIDIzNiwgOSwgMSwgMjIzLCA5OSwgMiwgNTksIDUxLCA5LCAxLCAyMjMsIDk5LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDksIAotICAgIDEsIDIyMywgOTksIDIsIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAxMTMsIDE3MCwgNDgsIAotICAgIDksIDEsIDIzNSwgMTI2LCA5LCAxLCAyMjMsIDk5LCAyLCAyNDQsIDE5LCAxNzAsIDQ4LCA5LCAxLCAyMjEsIDE2OSwgMiwgCi0gICAgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDIyMSwgMTY5LCAKLSAgICAyLCAxMzQsIDE3MCwgMjUyLCA1MSwgMjIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjIyLCAyOSwgMiwgMTEzLCAxNzAsIDUxLCAKLSAgICA5LCAxLCAyMjIsIDI5LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIxNywgODIsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgCi0gICAgMjU0LCAyMDYsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxLCAyNDQsIDE1MSwgMiwgCi0gICAgNTksIDIzMCwgMTE0LCA1MSwgOSwgMSwgMjQ0LCAxNTEsIDIsIDU5LCA1MSwgOSwgMSwgMjEzLCAyNDgsIDksIDEsIDI0NCwgCi0gICAgMTUxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDIyNSwgMjA2LCA5LCAxLCAyMjQsIDg1LCAyLCA1OSwgNDgsIDksIDEsIAotICAgIDIyNCwgODUsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjM0LCAxODAsIDksIDEsIDIxNywgMjUxLCAyMzUsIDAsIDksIDEsIAotICAgIDIzNSwgMSwgMiwgMjIyLCAyMzYsIDksIDEsIDIzNSwgMSwgMiwgNTksIDQ4LCA5LCAxLCAyMjksIDg0LCA5LCAxLCAyMzUsIAotICAgIDEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjQzLCAxMjksIDksIDEsIDI0MywgMTMwLCAyLCAyMjIsIDIzNiwgOSwgMSwgCi0gICAgMjI5LCA3LCA5LCAxLCAyNDMsIDEzMCwgMiwgMTEzLCAxNzAsIDUxLCA5LCAxLCAyNDIsIDEwOCwgOSwgMSwgMjQzLCAxMzAsIAotICAgIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjMzLCAxMDksIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMzMsIDEwOSwgMiwgNTksIAotICAgIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAKLSAgICAxLCAyMjgsIDY4LCAyLCA1OSwgNTEsIDksIDEsIDIyOCwgNjgsIDI0MiwgMjI1LCA5LCAxLCAyMjIsIDIxNiwgOSwgMSwgCi0gICAgMjI4LCA2OCwgMiwgMjIyLCAyMzYsIDksIDEsIDIyOCwgNjgsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjQxLCAyMjYsIAotICAgIDI0NywgMTQ5LCA5LCAxLCAyMTcsIDI4LCAyLCA1OSwgNDgsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgNDgsIDksIDEsIDI0MSwgCi0gICAgMjI2LCAyNDIsIDE3OCwgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAyLCAxODIsIDQ4LCA5LCAxLCAyMTcsIDksIDIzMSwgCi0gICAgMTcwLCAyNDIsIDE3OCwgOSwgMSwgMjEyLCAzMSwgMiwgMjIyLCAyMzYsIDksIDEsIDIzNCwgNzksIDIyNiwgMjM4LCA5LCAxLCAKLSAgICAyMjYsIDIzOCwgOSwgMSwgNjksIDksIDEsIDIxMCwgMjEyLCA5LCAxLCAyMzQsIDc5LCAyMTAsIDIxMiwgOSwgMSwgMjEyLCAKLSAgICAzMSwgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyMTMsIDI1NSwgOSwgMSwgMjQ0LCAxNzYsIDIxMSwgNDMsIDksIDEsIDc3LCAKLSAgICAyLCAyMTcsIDc4LCA5LCAxLCA3NywgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIxMiwgMzEsIDIsIDU5LCA0OCwgOSwgMSwgNzYsIAotICAgIDksIDEsIDc3LCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDc3LCAyNTIsIDE0MCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAKLSAgICAxODIsIDQ4LCA5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDksIDEsIDI1NCwgMjUyLCA5LCA0LCAxMjUsIDI3LCAyMjIsIDI5LCAKLSAgICAyLCAyMzMsIDEwOSwgMiwgMTA5LCAyMzEsIDE5NywgOSwgNCwgMTI1LCAyNywgMjI0LCA4NSwgMiwgMjMzLCAxMDksIDIsIAotICAgIDEwOSwgMjMxLCAxOTcsIDksIDQsIDEyNSwgNjYsIDY1LCAxNywgOSwgNCwgMTI1LCAyMzMsIDEwOSwgMjU0LCAxNzksIDksIAotICAgIDQsIDEyNSwgMjM1LCAxMjksIDksIDQsIDEyNSwgMTM0LCAyNDcsIDEyNiwgOSwgNCwgMTI1LCAyMjEsIDE2OCwgOSwgMjQ1LCAKLSAgICAxNTEsIDY0LCAyNTMsIDE3NCwgOSwgMjE4LCAxNTQsIDY0LCAyMjIsIDE0MCwgMjQ1LCAxODMsIDI0MSwgMTYyLCA5LCA0LCAKLSAgICAxMjUsIDIyMiwgMTg1LCAyMTAsIDg2LCA5LCA0LCAxMjUsIDIxNCwgMTU5LCAyMjMsIDExOCwgMjEwLCA4NiwgOSwgNCwgCi0gICAgMTI1LCAyNDcsIDEyNywgMjQxLCAyNDMsIDY0LCAyMzQsIDEzNSwgOSwgNCwgMTI1LCA2NiwgNTMsIDE3LCA5LCA0LCAxMjEsIAotICAgIDIyMSwgMTY4LCA5LCA0LCAxMjUsIDIzMSwgMjMyLCA5LCA0LCAyMTIsIDMwLCA5LCA0LCAyMTEsIDQzLCA5LCA0LCAxMjUsIAotICAgIDIxMSwgNDMsIDksIDQsIDEyNSwgMjI4LCA2NywgOSwgMjI1LCA0NCwgNjQsIDIyMiwgMTUsIDksIDI0NSwgMTYwLCAyNTAsIAotICAgIDE4MywgMTIxLCAyMTgsIDEzMSwgOSwgMjQ1LCAxNjAsIDI1MCwgMTgzLCAxMjUsIDIxOCwgMTMxLCA5LCAyMjIsIDE4NSwgCi0gICAgMTI1LCAyMTgsIDEzMiwgMiwgMjQ0LCAxMTIsIDI1MCwgMTgyLCA5LCA0LCAxMjEsIDIzMSwgODMsIDksIDEsIDI0OCwgMjA0LCAKLSAgICAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIDksIDEsIDIyMywgOTksIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgMjQ1LCAzMCwgCi0gICAgMjU0LCA0NSwgMjEsIDIxMCwgODYsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTEsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAKLSAgICAxMDUsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxNTgsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxNjEsIDI0NSwgMzAsIDI1NCwgCi0gICAgNDUsIDIxLCAxOTAsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxOTUsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxOTksIDI0NSwgCi0gICAgMzAsIDI1NCwgNDUsIDIxLCAxOTYsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAyMDEsIDksIDEsIDIyMCwgNjIsIDIsIDU5LCAKLSAgICA1MSwgOSwgMSwgMjQ4LCAyMjUsIDIsIDU5LCA1MSwgOSwgMSwgMjQyLCAyNTIsIDIsIDU5LCA1MSwgOSwgNSwgMjE5LCAxNjAsIAotICAgIDI1NCwgMTM0LCA5LCA1LCAyMTksIDE2MCwgMjI0LCAyMzgsIDIzMSwgNjMsIDksIDEsIDI0MSwgMjI2LCAyLCAyMzUsIDIwMCwgCi0gICAgMjE0LCAxMDUsIDE4MywgMjQ1LCAxNTEsIDY0LCAyMjYsIDE4LCAxODMsIDIxOCwgMjAsIDI0MywgMjM2LCAyMTgsIDEzMSwgCi0gICAgMTgzLCAyMTgsIDY4LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE4MywgMjE4LCAyMCwgMjQ5LCAyMzQsIDE4MywgMjE4LCA2OCwgCi0gICAgMjQ5LCAyMzQsIDE4MywgMjAzLCAyNDksIDIzNCwgMTgzLCAyNDksIDIzNSwgMjE5LCAxMDgsIDIzMywgNTIsIDE4MywgMjQ5LCAKLSAgICAyMzUsIDIxOSwgMTA4LCAyMjIsIDI1NCwgMTgzLCAyMTgsIDIwLCAyNDksIDIzNSwgMjE5LCAxMDgsIDIzMywgNTIsIDE4MywgCi0gICAgMjE4LCA2OCwgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMjIsIDI1NCwgMTgzLCAyNDksIDE4OCwgMTgzLCAyNDIsIDgsIDIyNiwgCi0gICAgMjU0LCAxODMsIDI0MiwgOCwgMjMxLCA0MSwgMTgzLCAyNDIsIDgsIDI1MywgMjI2LCAxODMsIDI1NSwgMzAsIDc5LCAxODMsIAotICAgIDEsIDI1NCwgMTgzLCAxODMsIDEsIDIxOCwgMjQsIDI1NCwgMTgzLCAxODMsIDEsIDI1MiwgMzMsIDE4MywgMSwgMjQzLCAKLSAgICAxMjAsIDE4MywgMSwgMjQzLCAxMjEsIDI0MywgOTgsIDE4MywgMSwgMjQ4LCAyMDAsIDE4MywgMSwgMjQ3LCAxMjcsIDI0OCwgCi0gICAgMjAxLCAyMjIsIDIzMiwgMTgzLCAxLCAyNDEsIDI0NSwgMTgzLCAxLCAyMTIsIDMwLCAxODMsIDEsIDIxMCwgMTA4LCAxODMsIAotICAgIDEsIDI0MSwgMjAyLCAxODMsIDEsIDIxNiwgMjI3LCAxODMsIDEsIDIxNiwgMjI4LCAyNDMsIDk4LCAxODMsIDEsIDIxMCwgCi0gICAgMTk5LCAxODMsIDEsIDIxMCwgMjAwLCAyNDEsIDI0NSwgMTgzLCAxLCAyMzQsIDIzMSwgMTgzLCAxLCAyMzMsIDEwNywgMTgzLCAKLSAgICAxLCAyMzAsIDE5NSwgMTgzLCAxLCAyMjcsIDE5OCwgMTgzLCAxLCAyMjAsIDE0NSwgMTgzLCAxLCA0MCwgMjIwLCAxNDUsIAotICAgIDE4MywgMSwgNzYsIDE4MywgMSwgMjI1LCAyMjQsIDE4MywgMSwgMjIzLCA1MiwgMjI1LCAyMjQsIDE4MywgMSwgMjIyLCAyNiwgCi0gICAgMTgzLCAxLCAyMjQsIDc4LCAxODMsIDEsIDIyMiwgMjMyLCAxODMsIDEsIDIyMCwgMjIsIDE4MywgMSwgMjE3LCAzNywgMTgzLCAKLSAgICAxLCAyMjUsIDE3MiwgMjUyLCAyMCwgMTgzLCAxLCAyMjUsIDE3MiwgMjQyLCAyNDksIDE4MywgMSwgMjI1LCAxNzIsIDI0OCwgCi0gICAgMjgsIDE4MywgMjI0LCAxNTQsIDQ4LCAxODMsIDIyNCwgMTU0LCA1MSwgMTgzLCAyMjQsIDE1NCwgMjQ2LCAxMjUsIDE4MywgCi0gICAgMjEwLCAxNywgNDgsIDE4MywgMjEwLCAxNywgNTEsIDE4MywgMjEwLCAxNywgMjQ2LCAxMjUsIDE4MywgMjIzLCAxMzQsIDQ4LCAKLSAgICAxODMsIDIyMywgMTM0LCA1MSwgMTgzLCAyNDYsIDEyNiwgMjEwLCAyNCwgMjQxLCA1MSwgMTgzLCAyNDYsIDEyNiwgMjEwLCAKLSAgICAyNCwgMjU0LCAxMTMsIDE4MywgMjQxLCAyNDgsIDQ4LCAxODMsIDI0MSwgMjQ4LCA1MSwgMTgzLCAyNDEsIDI0NywgMjQ2LCAKLSAgICAxMjUsIDE4MywgMjQ1LCA4NywgNDgsIDE4MywgMjQ1LCA4NywgNTEsIDE4MywgMjIyLCAxMDksIDE4MywgMjQ0LCAxNDQsIAotICAgIDI0NywgMTI4LCAxODMsIDIyMywgMjUxLCAxODMsIDIyMiwgMTM2LCAxODMsIDExMywgNjcsIDE3MCwgNDgsIDE4MywgMTEzLCAKLSAgICA2NywgMTcwLCA1MSwgMTgzLCAxMzQsIDE3MCwgNDgsIDE4MywgMTM0LCAxNzAsIDUxLCAxODMsIDIyNiwgMjUyLCAyMzIsIAotICAgIDIyMCwgNDgsIDE4MywgMjI2LCAyNTIsIDIzMiwgMjIwLCA1MSwgMTgzLCAyMzAsIDYxLCAxODMsIDI1MiwgMTM5LCAxODMsIAotICAgIDEsIDIxOSwgNTEsIDIxMCwgODAsIDE4MywgMSwgMjE5LCA1MSwgMjM0LCAxMjgsIDE4MywgMSwgMjE5LCA1MSwgMjQ0LCAKLSAgICAxNjIsIDksIDEsIDI1MiwgNjMsIDIsIDEzNCwgMTcwLCAyNDEsIDEsIDUxLCA5LCAxLCAyNTIsIDYzLCAyLCA1OSwgMjUyLCAKLSAgICA1MSwgMjIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgCi0gICAgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCAyNTIsIDUxLCAyMiwgMTEzLCAxNzAsIDQ4LCAKLSAgICA5LCAxLCAyNTIsIDYzLCAyLCAxMTMsIDE3MCwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjUyLCA2MywgMiwgMjM1LCAKLSAgICAyMDAsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMjUyLCA2MywgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDEyMiwgMiwgMTEzLCAKLSAgICAxNzAsIDQ4LCA5LCAxLCAxMjIsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgNTEsIDksIDEsIDI0OCwgMjA0LCAKLSAgICAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDI1MiwgNTEsIDIyLCA0LCAyMTcsIDgxLCA5LCAxLCAyNDgsIDIwNCwgMiwgMjM1LCAKLSAgICAyMDAsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMjIzLCA5OSwgMiwgOTEsIDksIDEsIDIyMSwgMTY5LCAyLCAyNDQsIDE5LCAKLSAgICAxNzAsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTM0LCAxNzAsIAotICAgIDIyNSwgMTAsIDI0NiwgMTEyLCA0OCwgOSwgMSwgMjU0LCAyMDYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDksIDEsIAotICAgIDI0NCwgMTUxLCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDI0NCwgMTUxLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAKLSAgICAxNTMsIDUxLCA5LCAxLCAyMzQsIDE4MSwgMiwgNTksIDQ4LCA5LCAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAKLSAgICAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgOSwgMSwgNjYsIDIsIDU5LCA0OCwgOSwgCi0gICAgMSwgNjYsIDIsIDU5LCA1MSwgOSwgMSwgMjI4LCA2OCwgMiwgMTEzLCAxNzAsIDUxLCA5LCAxLCAyMjgsIDY4LCAyLCA0LCAKLSAgICAyMTcsIDgxLCA5LCAxLCAyMjgsIDY4LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjMzLCAxMDksIDIsIDEzMCwgOSwgMSwgCi0gICAgMjIzLCA5OSwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgMjIzLCA5OSwgMiwgMTgyLCA0OCwgOSwgMSwgMjIxLCAKLSAgICAxNjksIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDksIDEsIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgNTEsIDksIDEsIAotICAgIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgMjIsIDExMywgMjQ3LCAxMjYsIDksIDEsIDIyMSwgMTY5LCAyLCA0LCA5LCAxLCAKLSAgICAyMTcsIDgyLCAyMiwgMTEzLCAyNDcsIDEyNiwgOSwgMSwgMjIzLCA5OSwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgMjIsIDExMywgCi0gICAgMjQ3LCAxMjYsIDksIDEsIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgNDgsIDksIDEsIDEwOSwgMiwgMjQ1LCAzMCwgMjU0LCAKLSAgICA0NSwgMjEsIDExMywgNDgsIDksIDEsIDEwOSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDI0NCwgCi0gICAgMTc2LCA3NywgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMywgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjQ1LCAKLSAgICAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIAotICAgIDI0NCwgMTksIDUxLCA5LCAxLCAyMTIsIDMxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMjEyLCAKLSAgICAzMSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMjQ1LCAzMCwgCi0gICAgMjU0LCA0NSwgMjEsIDExMywgNDgsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgCi0gICAgNDgsIDksIDEsIDEyMiwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDI0NCwgMTksIDUxLCA5LCAxLCAyMjEsIDE2OSwgMiwgCi0gICAgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDI0NCwgMTksIDQ4LCA5LCAxLCAyMjEsIDE2OSwgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCAKLSAgICA5LCAxLCAyMzUsIDEsIDIsIDExMywgMTcwLCA0OCwgMjE2LCAyMDYsIDEsIDI0MiwgNTMsIDIxNiwgMjA2LCAxLCAyMjAsIAotICAgIDcwLCAyMTYsIDIwNiwgMSwgMjI4LCA2NiwgMjE2LCAyMDYsIDEsIDIyMywgMTg3LCAyMTYsIDIwNiwgMSwgMjUyLCAxOTcsIAotICAgIDIxNiwgMjA2LCAxLCAyMzMsIDEsIDIxNiwgMjA2LCAxLCAyMzUsIDE0LCAyMTYsIDIwNiwgMSwgMjU0LCAxNjgsIDIxNiwgCi0gICAgMjA2LCAxLCAyMTQsIDI1LCAyMTYsIDIwNiwgMSwgMjMxLCA4MiwgMjE2LCAyMDYsIDEsIDI0NCwgMjAyLCAyMTYsIDIwNiwgCi0gICAgMSwgMjQ4LCAzMSwgMjE2LCAyMDYsIDEsIDIxNiwgMjA4LCAyMTYsIDIwNiwgMSwgMjMzLCAxMzcsIDIxNiwgMjA2LCAxLCAKLSAgICAyNDMsIDEzOCwgMjE2LCAyMDYsIDEsIDI0MiwgMTg0LCAyMTYsIDIwNiwgMSwgMjIxLCAxNjcsIDIxNiwgMjA2LCAxLCAyNDgsIAotICAgIDE1NiwgMjE2LCAyMDYsIDEsIDIxMCwgMTAwLCAyMTYsIDIwNiwgMSwgMjE3LCAzOCwgMjE2LCAyMDYsIDEsIDIxMSwgMTAzLCAKLSAgICAyMTYsIDIwNiwgMSwgMjI1LCAyMzcsIDIxNiwgMjA2LCAxLCAyMzUsIDEzNCwgMjE2LCAyMDYsIDEsIDI1MCwgMTQyLCAyMTYsIAotICAgIDIwNiwgMSwgMjE1LCAxNTYsIDIxNiwgMjA2LCAxLCAyNDEsIDE5NSwgMjE2LCAyMDYsIDEsIDIzNCwgMTM3LCAyMTYsIDIwNiwgCi0gICAgMSwgMjE2LCAyMDcsIDIxNiwgMjA2LCAxLCAyMTAsIDExNSwgMjE2LCAyMDYsIDEsIDIyMCwgNjAsIDIxNiwgMjA2LCAxLCAKLSAgICAyMjIsIDMyLCAyMTYsIDIwNiwgMSwgMjQ4LCAyMjcsIDIxNiwgMjA2LCAxLCAxMTIsIDIxNiwgMjA2LCAxLCAyMTAsIDIzLCAKLSAgICAyMTYsIDIwNiwgMSwgMjU0LCAyMDIsIDIxNiwgMjA2LCAxLCAyNDIsIDI1MCwgMjE2LCAyMDYsIDEsIDIyNCwgODgsIDIxNiwgCi0gICAgMjA2LCAxLCAyMTIsIDYzLCAyMTYsIDIwNiwgMjU1LCAzMSwgMjE2LCAyMDYsIDI1NSwgNDcsIDIxNiwgMjA2LCAyNDAsIAotICAgIDEyMSwgMjE2LCAyMDYsIDI0NSwgMjE2LCAyMTYsIDIwNiwgMjE0LCAyMjIsIDIxNiwgMjA2LCAyMjYsIDE4NiwgMjE2LCAKLSAgICAyMDYsIDI0NSwgMjI0LCAyMTYsIDIwNiwgMjQ1LCAyNCwgMjE2LCAyMDYsIDIyNiwgMjUxLCAyMTYsIDIwNiwgMjI3LCAzLCAKLSAgICAyMTYsIDIwNiwgMjE4LCA0NiwgMjE2LCAyMDYsIDEsIDIyOSwgMjMwLCAyMjgsIDE0MiwgMjEsIDIxMCwgODYsIDIyOCwgCi0gICAgMTQyLCAyMSwgMTExLCAyMjgsIDE0MiwgMjEsIDEwNSwgMjI4LCAxNDIsIDIxLCAxNTgsIDIyOCwgMTQyLCAyMSwgMTYxLCAKLSAgICAyMjgsIDE0MiwgMjEsIDE5MCwgMjI4LCAxNDIsIDIxLCAxOTUsIDIyOCwgMTQyLCAyMSwgMTk5LCAyMjgsIDE0MiwgMjEsIAotICAgIDE5NiwgMjI4LCAxNDIsIDIxLCAyMDEsIDIyOCwgMTQyLCAxLCA2MSwgMjI4LCAxNDIsIDEsIDI0NSwgMjE3LCAyMjgsIDE0MiwgCi0gICAgMSwgNzQsIDIyOCwgMTQyLCAxLCA3NiwgMjI4LCAxNDIsIDEsIDY5LCAyMjgsIDE0MiwgMSwgMjI2LCAxODcsIDIyOCwgMTQyLCAKLSAgICAxLCA3OCwgMjI4LCAxNDIsIDEsIDI0OCwgMjE3LCAyMjgsIDE0MiwgMSwgMjMwLCAzMCwgMjI4LCAxNDIsIDEsIDI1MiwgCi0gICAgMTk5LCAyMjgsIDE0MiwgMSwgMTkxLCAyMjgsIDE0MiwgMSwgMjE3LCAxMDYsIDIyOCwgMTQyLCAxLCAyMzUsIDE0NywgMjI4LCAKLSAgICAxNDIsIDEsIDI1MCwgMTY1LCAyMjgsIDE0MiwgMSwgMjQ4LCAyMjksIDIyOCwgMTQyLCAxLCAyMDUsIDIyOCwgMTQyLCAxLCAKLSAgICAyMjIsIDE4MSwgMjI4LCAxNDIsIDEsIDIwNiwgMjI4LCAxNDIsIDEsIDI0MywgODYsIDIyOCwgMTQyLCAxLCAyNDQsIDIwNCwgCi0gICAgMjI4LCAxNDIsIDEsIDE3NiwgMjI4LCAxNDIsIDEsIDIzMywgMTQxLCAyMjgsIDE0MiwgMSwgMjI5LCAyMzQsIDIxMSwgMjIzLCAKLSAgICAyMjgsIDE0MiwgMSwgMTg2LCAyMjgsIDE0MiwgMSwgMjI3LCAxNjksIDIyOCwgMTQyLCAxLCAxOTgsIDIyOCwgMTQyLCAxLCAKLSAgICAxNjIsIDIyOCwgMTQyLCAxLCAyMTIsIDY1LCAyMjgsIDE0MiwgMSwgMTkyLCAyMjgsIDE0MiwgMSwgMjI3LCAxNzAsIDIxMSwgCi0gICAgMjIzLCAyMjgsIDE0MiwgMSwgMjM1LCA2NywgMjM1LCAxNDcsIDIyOCwgMTQyLCAxLCAyMzUsIDY3LCAyNTAsIDE2NSwgMjI4LCAKLSAgICAxNDIsIDEsIDIzNSwgNjcsIDIwNSwgMjI4LCAxNDIsIDM4LCAyMTksIDI1MywgMTI1LCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIAotICAgIDIxOSwgMjUzLCAxMjEsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgMjE5LCAyNTMsIDIyMiwgMjMxLCAyMTYsIDMxLCAyMjgsIAotICAgIDE0MiwgMzgsIDIwMCwgMjQ4LCA0NiwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMDAsIDEyNSwgMjE2LCAzMSwgMjI4LCAKLSAgICAxNDIsIDM4LCAyMDAsIDEyMSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMDAsIDIyMiwgMjMxLCAyMTYsIDMxLCAyMjgsIAotICAgIDE0MiwgMzgsIDIyOSwgMTk4LCA3OSwgMjI4LCAxNDIsIDM4LCA1MiwgNTksIDQ4LCAyMjgsIDE0MiwgMTI1LCAxMzgsIDI1NCwgCi0gICAgNjUsIDIyOCwgMTQyLCAxMjEsIDEzOCwgMjU0LCA2NSwgMjI4LCAxNDIsIDE2LCAyMjYsIDE4OCwgMjQ4LCA1OCwgMjI4LCAKLSAgICAxNDIsIDE2LCAyNDMsIDg1LCAyMjgsIDE0MiwgMjQ5LCAyMjcsIDIyOCwgMTQyLCAyNDUsIDM5LCA3OSwgMjI4LCAxNDIsIAotICAgIDIzMywgMTE0LCAyMjEsIDI1NCwgMSwgMjU0LCAxODUsIDIyMSwgMjU0LCAxLCAyNTEsIDIzNiwgMjIxLCAyNTQsIDEsIDI0MywgCi0gICAgMTE5LCAyMjEsIDI1NCwgMSwgMjQ4LCAyMDIsIDIyMSwgMjU0LCAxLCAyMzUsIDE1OCwgMjIxLCAyNTQsIDEsIDI1MiwgMTk3LCAKLSAgICAyMjEsIDI1NCwgMSwgMjEwLCA4OSwgMjIxLCAyNTQsIDEsIDIzNSwgMTY2LCAyMjEsIDI1NCwgMSwgMjE2LCA2OCwgMjIxLCAKLSAgICAyNTQsIDEsIDIxMCwgMTgyLCAyMjEsIDI1NCwgMSwgMjM1LCAxNSwgMjIxLCAyNTQsIDEsIDIzMywgMTM0LCAyMjEsIDI1NCwgCi0gICAgMSwgMjMwLCAxOTUsIDIyMSwgMjU0LCAxLCAyMjcsIDE5OCwgMjIxLCAyNTQsIDEsIDIxOSwgMTU4LCAyMjEsIDI1NCwgMSwgCi0gICAgMjM2LCA2LCAyMjEsIDI1NCwgMSwgMjQ0LCAxMjksIDIyMSwgMjU0LCAxLCAyMTUsIDE4MiwgMjIxLCAyNTQsIDEsIDIyNCwgCi0gICAgMTMsIDIyMSwgMjU0LCAxLCAyMjIsIDIzMiwgMjIxLCAyNTQsIDEsIDIyMCwgODcsIDIyMSwgMjU0LCAxLCAyMTcsIDEwMSwgCi0gICAgMjIxLCAyNTQsIDE2NCwgMjM2LCA2LCAyMjEsIDI1NCwgMTY0LCAyMzYsIDUsIDIyMSwgMjU0LCAxNjQsIDIyNiwgMjQ3LCAKLSAgICAyMjEsIDI1NCwgMTY0LCAyNDgsIDIxNSwgMjIxLCAyNTQsIDU4LCAxLCAyNDUsIDExMywgMjEwLCAxODIsIDIyMSwgMjU0LCAKLSAgICAxNjQsIDI0NSwgMTEzLCAyMTAsIDE4MiwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDc2LCAyMjEsIDI1NCwgMjUsIDUsIDc2LCAKLSAgICAyMjEsIDI1NCwgMjUsIDUsIDIyNiwgMTIyLCAyNTUsIDgyLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgMjU1LCA4MiwgMjIxLCAKLSAgICAyNTQsIDI1LCA1LCAyNTUsIDgyLCAyMjEsIDI1NCwgMjUsIDUsIDIyNiwgMTIyLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIAotICAgIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDYxLCAyMjEsIDI1NCwgNTgsIDEsIDIxOSwgMjUzLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAKLSAgICAyMTksIDI1MywgNjEsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCA2OSwgMjIxLCAyNTQsIDI1LCA1LCA2OSwgMjIxLCAyNTQsIAotICAgIDU4LCAxLCA3NCwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDc0LCAyMjEsIDI1NCwgMjUsIDUsIDc0LCAyMjEsIDI1NCwgMjUsIAotICAgIDUsIDc4LCAyMjEsIDI1NCwgMjUsIDUsIDIxOCwgNDYsIDIyMSwgMjU0LCAxNjQsIDIyOSwgOTcsIDIyMSwgMjU0LCAyMjQsIAotICAgIDE0NCwgMjI5LCA5NywgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTQsIDIyNywgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTQsIDEyMiwgCi0gICAgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTIsIDEyMiwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTMsIDIwOSwgMjIxLCAyNTQsIAotICAgIDIyNCwgMTQ0LCAyMjAsIDEwLCAyMjEsIDI1NCwgMjU1LCAzMCwgNzksIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjMxLCA3MywgCi0gICAgMjI0LCA0OCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTAsIDMxLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIyNCwgNDgsIDIyMSwgCi0gICAgMjU0LCAyMjQsIDE0NCwgMjEwLCAxMTQsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjE1LCA5MCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAKLSAgICAyNTQsIDE3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxOSwgNTUsIDIzMSwgMTUwLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgCi0gICAgMTA4LCAyMzEsIDE4NywgMSwgMjQyLCAzMSwgMjMxLCAxODcsIDEsIDI1NSwgMzQsIDIzMSwgMTg3LCAxLCAyNTQsIDIyNSwgCi0gICAgMjMxLCAxODcsIDEsIDI1NSwgOCwgMjMxLCAxODcsIDEsIDI1NCwgMjE4LCAyMzEsIDE4NywgMSwgMjE0LCAxMjQsIDIzMSwgCi0gICAgMTg3LCAxLCAyNTMsIDE2OCwgMjMxLCAxODcsIDEsIDIzNSwgMTY2LCAyMzEsIDE4NywgMSwgMjUzLCAyMDYsIDIzMSwgMTg3LCAKLSAgICAxLCAyNTQsIDE5MCwgMjMxLCAxODcsIDEsIDI1NCwgMTk1LCAyMzEsIDE4NywgMSwgMjU0LCAxODcsIDIzMSwgMTg3LCAxLCAKLSAgICAyNTQsIDE0NCwgMjMxLCAxODcsIDEsIDI1NCwgMTMxLCAyMzEsIDE4NywgMSwgMjUzLCAyNDUsIDIzMSwgMTg3LCAxLCAyMzYsIAotICAgIDYsIDIzMSwgMTg3LCAxLCAyNTQsIDgwLCAyMzEsIDE4NywgMSwgMjUzLCAyMTYsIDIzMSwgMTg3LCAxLCAyNTQsIDUzLCAKLSAgICAyMzEsIDE4NywgMSwgMjU0LCA0OSwgMjMxLCAxODcsIDEsIDI1MywgMjM5LCAyMzEsIDE4NywgMSwgMjUzLCAyMTQsIDIzMSwgCi0gICAgMTg3LCAxLCAyNDYsIDYzLCAyMzEsIDE4NywgMSwgMjM1LCA4LCAyMzEsIDE4NywgMSwgMjU0LCAyMDUsIDIzMSwgMTg3LCAKLSAgICAyNTQsIDIzMSwgNzksIDIzMSwgMTg3LCAyMTMsIDEzNiwgNzksIDIzMSwgMTg3LCAyNDMsIDYwLCA3OSwgMjMxLCAxODcsIAotICAgIDIyNCwgMTQzLCA5LCAxLCAyNTIsIDYzLCAyLCA0LCAyMTQsIDEwNiwgNTEsIDksIDEsIDE1MSwgMiwgMTEzLCAxNzAsIDQ4LCAKLSAgICA5LCAxLCAyMTcsIDgyLCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI0NCwgMTUxLCAyLCA1OSwgMjUyLCA1MSwgMjIsIDEzNCwgCi0gICAgMTcwLCA0OCwgOSwgMSwgMjI0LCA4NSwgMiwgNTksIDUxLCA5LCAxLCAyMzMsIDEwOSwgMiwgNTIsIDEzMCwgOSwgMSwgNjYsIAotICAgIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgNzcsIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgMTgyLCA0OCwgOSwgMSwgNzcsIAotICAgIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAyMzIsIDEyOSwgOSwgMSwgMjEyLCAKLSAgICAzMSwgMiwgNTksIDIxMSwgMjMxLCA5LCAxLCAyMjIsIDIwMywgMjExLCA0MywgOSwgMjQ5LCAxMDcsIDI0NCwgMTczLCA5LCAKLSAgICAyNDksIDEwNywgMjQ4LCAxOTIsIDksIDI0OSwgMTA3LCAyMzQsIDIxMSwgOSwgMjQ5LCAxMDcsIDI0NCwgMTcxLCA5LCAyNDksIAotICAgIDEwNywgMjQ4LCAxOTAsIDksIDI0OSwgMTA3LCAyMzQsIDIwOSwgOSwgMTM4LCAxMjMsIDU5LCA0OCwgOSwgMTM4LCAxMTMsIAotICAgIDE3MCwgNDgsIDksIDEzOCwgMjMyLCAxMzAsIDQ4LCA5LCAxMzgsIDEyMywgNTksIDUxLCA5LCAxMzgsIDExMywgMTcwLCA1MSwgCi0gICAgOSwgMTM4LCAyMzIsIDEzMCwgNTEsIDksIDIwNCwgMjQ0LCAxNzEsIDksIDIwNCwgMjQ4LCAxOTAsIDksIDIwNCwgMjM0LCAKLSAgICAyMDksIDksIDQsIDEyNSwgMjEyLCAzMCwgOSwgMjQ0LCAxNzQsIDIsIDIyMiwgMjM2LCA5LCAyNDQsIDE3NCwgMiwgNTksIAotICAgIDQ4LCA5LCAyMzQsIDIxMiwgMiwgNTksIDUxLCA5LCA0MywgMjU0LCAyLCA0OCwgOSwgNDQsIDI1NCwgMiwgNDgsIDksIDQzLCAKLSAgICAyNTQsIDIsIDUxLCA5LCA0NCwgMjU0LCAyLCA1MSwgOSwgNTIsIDQ0LCAyNTQsIDIsIDQ4LCA5LCA1MiwgNDQsIDI1NCwgMiwgCi0gICAgNzIsIDIsIDI0NywgMTI4LCA5LCA0NCwgMjU0LCAyLCA3MiwgMiwgMjQ3LCAxMjgsIDksIDI0OCwgMTkzLCAyLCAyNDcsIAotICAgIDEyOCwgODQsIDUsIDIzNSwgMjAwLCAyNTEsIDcsIDg0LCA1LCAyNTEsIDcsIDg0LCA1LCAyNTQsIDgzLCA4NCwgNSwgMjEzLCAKLSAgICAxNDcsIDg0LCAxLCAyMTksIDI1MywgNjEsIDg0LCAxLCA2MSwgODQsIDEsIDI1NSwgODIsIDg0LCAxLCA3NCwgODQsIDEsIAotICAgIDIzNiwgNDAsIDg0LCAxLCA2OSwgODQsIDEsIDIxNCwgMTE4LCA4NCwgMSwgMTQ5LCAxNTMsIDg0LCAxLCAxNDksIDE1NiwgCi0gICAgODQsIDEsIDI1MSwgMTAsIDc2LCA4NCwgMSwgMjE5LCAyNTMsIDc2LCA4NCwgMSwgNzYsIDg0LCAxLCAyNTQsIDIxMCwgODQsIAotICAgIDEsIDI1MSwgMTAsIDc4LCA4NCwgMSwgMjE5LCAyNTMsIDc4LCA4NCwgMSwgNzgsIDg0LCAxLCAyNTMsIDIwMCwgODQsIDEsIAotICAgIDE3NiwgODQsIDEsIDIzNCwgMTM4LCA4NCwgMSwgMjQzLCAxNDIsIDg0LCAxLCAyNDMsIDAsIDg0LCAxLCAyMjksIDgyLCA4NCwgCi0gICAgMSwgMjUxLCA0MSwgODQsIDEsIDI1MCwgMTY1LCA4NCwgMSwgMjM1LCAxNDcsIDg0LCAxLCAyMzUsIDEyMCwgODQsIDEsIAotICAgIDIyNywgMTY5LCA4NCwgMSwgMjE1LCAxNTcsIDg0LCAxLCAyMTUsIDE0NSwgODQsIDEsIDI0OCwgMTQzLCA4NCwgMSwgMjQ4LCAKLSAgICAxMjcsIDg0LCAxLCAyMjgsIDExNSwgODQsIDEsIDIxNywgMTA2LCA4NCwgMSwgMjE2LCAyMDksIDg0LCAxLCAyNDgsIDIyOSwgCi0gICAgODQsIDEsIDI0OCwgMzMsIDg0LCAxLCAxOTgsIDg0LCAxLCAyMjgsIDk3LCA4NCwgMSwgMTkxLCA4NCwgMSwgMjI1LCAxNTAsIAotICAgIDg0LCAxLCAyNTIsIDE5OSwgODQsIDEsIDI1MiwgMjYsIDg0LCAxLCAxODYsIDg0LCAxLCAxOTIsIDg0LCAxLCAyMDUsIDg0LCAKLSAgICAxLCAyMjIsIDE4MSwgODQsIDEsIDIzMywgMTQxLCA4NCwgMSwgMjMyLCAxOTAsIDg0LCAxLCAyMzIsIDE4MSwgODQsIDEsIAotICAgIDIxNCwgMjcsIDg0LCAxLCAyMjAsIDEwNCwgODQsIDEsIDIxOCwgMjI1LCA4NCwgMSwgMjA2LCA4NCwgMSwgMTYyLCA4NCwgCi0gICAgMjUsIDUsIDIyNiwgMjM4LCA4NCwgMjUsIDUsIDIyNiwgMTg1LCA4NCwgNSwgMjI3LCAyMDksIDg0LCA1LCAyNTMsIDE4MywgCi0gICAgODQsIDI1LCA1LCAyNTUsIDgyLCA4NCwgMjUsIDUsIDc0LCA4NCwgMjUsIDUsIDIzNiwgNDAsIDg0LCAyNSwgNSwgNjksIDg0LCAKLSAgICAyNSwgNSwgMjE0LCAxMTgsIDg0LCAyNSwgNSwgMTQ5LCAxNTMsIDg0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgODQsIDI1LCAKLSAgICA1LCAyNTEsIDEwLCA3NiwgODQsIDI1LCA1LCAyMTksIDI1MywgNzYsIDg0LCAyNSwgNSwgNzYsIDg0LCAyNSwgNSwgMjU0LCAKLSAgICAyMTAsIDg0LCAyNSwgNSwgMjUxLCAxMCwgNzgsIDg0LCAyNSwgNSwgMjE5LCAyNTMsIDc4LCA4NCwgMjUsIDUsIDc4LCA4NCwgCi0gICAgMjUsIDUsIDI1MywgMjAwLCA4NCwgNSwgMjEzLCAxNTIsIDg0LCAyNSwgNSwgMjI0LCAxODgsIDc2LCA4NCwgMjUsIDUsIAotICAgIDI1MywgMTc5LCA4NCwgMjI2LCAyMDgsIDg0LCAyMTgsIDExMywgNSwgMjE0LCAyMTYsIDg0LCAyMTgsIDExMywgNSwgMjU0LCAKLSAgICA4NSwgODQsIDI0MiwgMTQ0LCAyNTUsIDIzLCA4NCwgMjU1LCAxMiwgMjU1LCAyMywgODQsIDI1LCA1LCAyNTEsIDEwLCAyMDAsIAotICAgIDc2LCA4NCwgMjUsIDUsIDIxNCwgMjE0LCA4NCwgMjUsIDUsIDIxNCwgMTE3LCA4NCwgMSwgMjI0LCA5MSwgODQsIDEsIDIzNCwgCi0gICAgMTIxLCA4NCwgMSwgMjQyLCAyMzMsIDg0LCAxLCAyMTAsIDExNiwgODQsIDEsIDI0OCwgMTMyLCA4NCwgMSwgMjIzLCA0MiwgCi0gICAgODQsIDEsIDI0NCwgMjA0LCA4NCwgMSwgMjEwLCAxNjgsIDg0LCAxLCAxNDksIDIyMiwgMTgyLCA4NCwgMSwgMTQ5LCAyMzIsIAotICAgIDE5MSwgODQsIDI1LCA1LCAxNDksIDE1NiwgODQsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA4NCwgMjQ4LCAxODYsIDg0LCA1MiwgCi0gICAgMjQ4LCAxODYsIDg0LCAyMSwgMjEwLCA4NiwgODQsIDIxLCAxMTEsIDg0LCAyMSwgMTA1LCA4NCwgMjEsIDE1OCwgODQsIDIxLCAKLSAgICAxNjEsIDg0LCAyMSwgMTkwLCA4NCwgMjEsIDE5NSwgODQsIDIxLCAxOTksIDg0LCAyMSwgMTk2LCA4NCwgMjEsIDIwMSwgODQsIAotICAgIDI1NSwgMzAsIDUwLCA4NCwgNSwgMTI1LCAyMTksIDE5LCAyNDcsIDEyOCwgODQsIDEsIDI1MSwgMTAsIDYxLCA4NCwgMSwgCi0gICAgMjI2LCAyMzgsIDg0LCAxLCAyMjYsIDE4NSwgODQsIDEsIDI1MywgMTc5LCA4NCwgMSwgMjE0LCAyMTQsIDg0LCAxLCAyMTQsIAotICAgIDExNywgODQsIDEsIDIxMCwgODIsIDg0LCAxLCAxMTQsIDE5MiwgODQsIDEsIDI0MywgMzYsIDg0LCAxLCAyMzUsIDEwMiwgCi0gICAgODQsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgODQsIDEsIDI0OCwgMTMzLCA4NCwgMSwgMjUyLCAxMTksIDE0NiwgNSwgMjUxLCAKLSAgICA3LCAxNDYsIDUsIDI1NCwgODMsIDE0NiwgNSwgMjEzLCAxNDcsIDE0NiwgMSwgNjEsIDE0NiwgMSwgMjU1LCA4MiwgMTQ2LCAKLSAgICAxLCA3NCwgMTQ2LCAxLCAyMzYsIDQwLCAxNDYsIDEsIDY5LCAxNDYsIDEsIDIxNCwgMTE4LCAxNDYsIDEsIDE0OSwgMTUzLCAKLSAgICAxNDYsIDEsIDE0OSwgMTU2LCAxNDYsIDEsIDc2LCAxNDYsIDEsIDI1NCwgMjEwLCAxNDYsIDEsIDc4LCAxNDYsIDEsIDI1MywgCi0gICAgMjAwLCAxNDYsIDEsIDE3NiwgMTQ2LCAxLCAyMzQsIDEzOCwgMTQ2LCAxLCAyNDMsIDE0MiwgMTQ2LCAxLCAyNDMsIDAsIAotICAgIDE0NiwgMSwgMjI5LCA4MiwgMTQ2LCAxLCAyNTEsIDQxLCAxNDYsIDEsIDI1MCwgMTY1LCAxNDYsIDEsIDIzNSwgMTQ3LCAKLSAgICAxNDYsIDEsIDIzNSwgMTIwLCAxNDYsIDEsIDIyNywgMTY5LCAxNDYsIDEsIDIxNSwgMTU3LCAxNDYsIDEsIDIxNSwgMTQ1LCAKLSAgICAxNDYsIDEsIDI0OCwgMTQzLCAxNDYsIDEsIDI0OCwgMTI3LCAxNDYsIDEsIDIyOCwgMTE1LCAxNDYsIDEsIDIxNywgMTA2LCAKLSAgICAxNDYsIDEsIDIxNiwgMjA5LCAxNDYsIDEsIDI0OCwgMjI5LCAxNDYsIDEsIDI0OCwgMzMsIDE0NiwgMSwgMTk4LCAxNDYsIDEsIAotICAgIDE5MSwgMTQ2LCAxLCAyMjUsIDE1MCwgMTQ2LCAxLCAyNTIsIDE5OSwgMTQ2LCAxLCAyNTIsIDI2LCAxNDYsIDEsIDE4NiwgCi0gICAgMTQ2LCAxLCAxOTIsIDE0NiwgMSwgMjA1LCAxNDYsIDEsIDIzMywgMTQxLCAxNDYsIDEsIDIyMCwgMTA0LCAxNDYsIDEsIAotICAgIDIxOCwgMjI1LCAxNDYsIDEsIDIwNiwgMTQ2LCAxLCAxNjIsIDE0NiwgNSwgMjI3LCAyMDksIDE0NiwgNSwgMjUzLCAxODMsIAotICAgIDE0NiwgMjUsIDUsIDI1NSwgODIsIDE0NiwgMjUsIDUsIDc0LCAxNDYsIDI1LCA1LCAyMzYsIDQwLCAxNDYsIDI1LCA1LCA2OSwgCi0gICAgMTQ2LCAyNSwgNSwgMjE0LCAxMTgsIDE0NiwgMjUsIDUsIDE0OSwgMTUzLCAxNDYsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKLSAgICAxNDYsIDI1LCA1LCA3NiwgMTQ2LCAyNSwgNSwgMjU0LCAyMTAsIDE0NiwgMjUsIDUsIDc4LCAxNDYsIDI1LCA1LCAyNTMsIAotICAgIDIwMCwgMTQ2LCA1LCAyMTMsIDE1MiwgMTQ2LCAxLCAyMzQsIDEzMCwgMjE3LCAxMDYsIDE0NiwgMjUzLCAyMDEsIDIzMywgCi0gICAgMjksIDc5LCAxNDYsIDEsIDIyMiwgMTgxLCAxNDYsIDEsIDIyMywgNDIsIDE0NiwgMSwgMjEwLCAxNjgsIDE0NiwgMSwgMTQ5LCAKLSAgICAyMjIsIDE4MiwgMTQ2LCAxLCAxNDksIDIzMiwgMTkxLCAxNDYsIDI1LCA1LCAxNDksIDE1NiwgMTQ2LCAyNSwgNSwgMTQ5LCAKLSAgICAyMzIsIDE5MSwgMTQ2LCAyMSwgMjEwLCA4NiwgMTQ2LCAyMSwgMTExLCAxNDYsIDIxLCAxMDUsIDE0NiwgMjEsIDE1OCwgCi0gICAgMTQ2LCAyMSwgMTYxLCAxNDYsIDIxLCAxOTAsIDE0NiwgMjEsIDE5NSwgMTQ2LCAyMSwgMTk5LCAxNDYsIDIxLCAxOTYsIAotICAgIDE0NiwgMjEsIDIwMSwgMTQ2LCAxLCAyMjMsIDE5MSwgMiwgMjMwLCAyMjksIDI0OCwgNiwgMTQ2LCAxLCAyMjMsIDE5MSwgMiwgCi0gICAgMjMyLCAxMTQsIDI0OCwgNiwgMTQ2LCAyMjIsIDEyMCwgNzksIDE0NiwgMjIyLCAxMjAsIDUwLCAxNDYsIDI0OSwgMTA2LCAKLSAgICAyMjcsIDIwMSwgMTExLCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTA1LCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgCi0gICAgMTU4LCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTYxLCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTIzLCAyMzMsIDIyLCAKLSAgICAyMTYsIDIwMiwgMjE2LCAxOTcsIDI0OCwgNTYsIDE0NiwgMjQ5LCAxMDYsIDI0OCwgNTcsIDIxOSwgMTIxLCAxNDYsIDIzNSwgCi0gICAgMTY3LCAxNDYsIDI0MywgMTEwLCA3OSwgMTg1LCA1LCAyNTUsIDcsIDI1MSwgMjUxLCAxODUsIDUsIDI1MSwgMjUxLCAxODUsIAotICAgIDUsIDIxMywgMTQ3LCAxODUsIDEsIDYxLCAxODUsIDEsIDI1NSwgODIsIDE4NSwgMSwgNzQsIDE4NSwgMSwgMjM2LCA0MCwgCi0gICAgMTg1LCAxLCA2OSwgMTg1LCAxLCAyMTQsIDExOCwgMTg1LCAxLCAyNDUsIDIxNywgMTg1LCAxLCAyNTQsIDIxMCwgMTg1LCAxLCAKLSAgICAyMjYsIDE4NywgMTg1LCAxLCAyNTMsIDIwMCwgMTg1LCAxLCAxNzYsIDE4NSwgMSwgMjM0LCAxMzgsIDE4NSwgMSwgMjQzLCAKLSAgICAxNDIsIDE4NSwgMSwgMjQzLCAwLCAxODUsIDEsIDIyOSwgODIsIDE4NSwgMSwgMjUxLCA0MSwgMTg1LCAxLCAyNTAsIDE2NSwgCi0gICAgMTg1LCAxLCAyMzUsIDE0NywgMTg1LCAxLCAyMzUsIDEyMCwgMTg1LCAxLCAyMjcsIDE2OSwgMTg1LCAxLCAyMTUsIDE1NywgCi0gICAgMTg1LCAxLCAyMTUsIDE0NSwgMTg1LCAxLCAyNDgsIDE0MywgMTg1LCAxLCAyNDgsIDEyNywgMTg1LCAxLCAyMjgsIDExNSwgCi0gICAgMTg1LCAxLCAyMTcsIDEwNiwgMTg1LCAxLCAyMTYsIDIwOSwgMTg1LCAxLCAyNDgsIDIyOSwgMTg1LCAxLCAyNDgsIDMzLCAKLSAgICAxODUsIDEsIDE5OCwgMTg1LCAxLCAxOTEsIDE4NSwgMSwgMjI1LCAxNTAsIDE4NSwgMSwgMjUyLCAxOTksIDE4NSwgMSwgCi0gICAgMjUyLCAyNiwgMTg1LCAxLCAxODYsIDE4NSwgMSwgMTkyLCAxODUsIDEsIDIwNSwgMTg1LCAxLCAyMzMsIDE0MSwgMTg1LCAxLCAKLSAgICAyMzIsIDE5MCwgMTg1LCAxLCAyMTQsIDI3LCAxODUsIDEsIDIyMCwgMTA0LCAxODUsIDEsIDIwNiwgMTg1LCAxLCAxNjIsIAotICAgIDE4NSwgNSwgMjI3LCAyMDksIDE4NSwgMjUsIDUsIDI1NSwgODIsIDE4NSwgMjUsIDUsIDc0LCAxODUsIDI1LCA1LCAyMzYsIAotICAgIDQwLCAxODUsIDI1LCA1LCA2OSwgMTg1LCAyNSwgNSwgMjE0LCAxMTgsIDE4NSwgMjUsIDUsIDI0NSwgMjE3LCAxODUsIDI1LCAKLSAgICA1LCAyNTQsIDIxMCwgMTg1LCAyNSwgNSwgMjI2LCAxODcsIDE4NSwgMjUsIDUsIDI1MywgMjAwLCAxODUsIDUsIDIxMywgCi0gICAgMTUyLCAxODUsIDUsIDIxNCwgMjE4LCAxODUsIDEsIDIzNCwgMTIxLCAxODUsIDEsIDI0MiwgMjMzLCAxODUsIDEsIDIxMCwgCi0gICAgMTE2LCAxODUsIDEsIDIyMiwgMTgxLCAxODUsIDEsIDI0NCwgMjA0LCAxODUsIDIxLCAyMTAsIDg2LCAxODUsIDIxLCAxMTEsIAotICAgIDE4NSwgMjEsIDEwNSwgMTg1LCAyMSwgMTU4LCAxODUsIDIxLCAxNjEsIDE4NSwgMjEsIDE5MCwgMTg1LCAyMSwgMTk1LCAKLSAgICAxODUsIDIxLCAxOTksIDE4NSwgMjEsIDE5NiwgMTg1LCAyMSwgMjAxLCAxODUsIDIxNiwgNzUsIDE4NSwgMjU1LCA2LCAxODUsIAotICAgIDIzNSwgMTg1LCAxODUsIDIxNCwgMTQ2LCAxODUsIDI0NSwgMTg5LCAyMjYsIDE5MiwgMTg1LCA1LCAyMTEsIDc4LCAxNzEsIAotICAgIDUsIDI1MSwgNywgMTcxLCA1LCAyNTQsIDgzLCAxNzEsIDUsIDIxMywgMTQ3LCAxNzEsIDEsIDYxLCAxNzEsIDEsIDI1NSwgCi0gICAgODIsIDE3MSwgMSwgNzQsIDE3MSwgMSwgMjM2LCA0MCwgMTcxLCAxLCA2OSwgMTcxLCAxLCAyMTQsIDExOCwgMTcxLCAxLCAKLSAgICAxNDksIDE1MywgMTcxLCAxLCAxNDksIDE1NiwgMTcxLCAyNSwgMjUxLCAxMCwgNzYsIDE3MSwgMSwgNzYsIDE3MSwgMSwgCi0gICAgMjU0LCAyMTAsIDE3MSwgMjUsIDI1MSwgMTAsIDc4LCAxNzEsIDEsIDc4LCAxNzEsIDEsIDI1MywgMjAwLCAxNzEsIDEsIAotICAgIDE3NiwgMTcxLCAxLCAyMzQsIDEzOCwgMTcxLCAxLCAyNDMsIDE0MiwgMTcxLCAxLCAyNDMsIDAsIDE3MSwgMSwgMjI5LCA4MiwgCi0gICAgMTcxLCAxLCAyNTEsIDQxLCAxNzEsIDEsIDI1MCwgMTY1LCAxNzEsIDEsIDIzNSwgMTQ3LCAxNzEsIDEsIDIzNSwgMTIwLCAKLSAgICAxNzEsIDEsIDIyNywgMTY5LCAxNzEsIDEsIDIxNSwgMTU3LCAxNzEsIDEsIDIxNSwgMTQ1LCAxNzEsIDEsIDI0OCwgMTQzLCAKLSAgICAxNzEsIDEsIDI0OCwgMTI3LCAxNzEsIDEsIDIyOCwgMTE1LCAxNzEsIDEsIDIxNywgMTA2LCAxNzEsIDEsIDIxNiwgMjA5LCAKLSAgICAxNzEsIDEsIDI0OCwgMjI5LCAxNzEsIDEsIDI0OCwgMzMsIDE3MSwgMSwgMTk4LCAxNzEsIDEsIDE5MSwgMTcxLCAxLCAyMjUsIAotICAgIDE1MCwgMTcxLCAxLCAyNTIsIDE5OSwgMTcxLCAxLCAyNTIsIDI2LCAxNzEsIDEsIDE4NiwgMTcxLCAxLCAxOTIsIDE3MSwgMSwgCi0gICAgMjA1LCAxNzEsIDEsIDIzMywgMTQxLCAxNzEsIDEsIDIzMiwgMTkwLCAxNzEsIDEsIDIxNCwgMjcsIDE3MSwgMSwgMjIwLCAKLSAgICAxMDQsIDE3MSwgMSwgMjE4LCAyMjUsIDE3MSwgMSwgMjA2LCAxNzEsIDEsIDE2MiwgMTcxLCA1LCAyMjcsIDIwOSwgMTcxLCAKLSAgICA1LCAyNTMsIDE4MywgMTcxLCAyNSwgNSwgMjU1LCA4MiwgMTcxLCAyNSwgNSwgNzQsIDE3MSwgMjUsIDUsIDIzNiwgNDAsIAotICAgIDE3MSwgMjUsIDUsIDY5LCAxNzEsIDI1LCA1LCAyMTQsIDExOCwgMTcxLCAyNSwgNSwgMTQ5LCAxNTMsIDE3MSwgMjUsIDUsIAotICAgIDE0OSwgMjIyLCAxODIsIDE3MSwgMjUsIDUsIDI1MSwgMTAsIDc2LCAxNzEsIDI1LCA1LCA3NiwgMTcxLCAyNSwgNSwgMjU0LCAKLSAgICAyMTAsIDE3MSwgMjUsIDUsIDI1MSwgMTAsIDc4LCAxNzEsIDI1LCA1LCA3OCwgMTcxLCAyNSwgNSwgMjUzLCAyMDAsIDE3MSwgCi0gICAgNSwgMjEzLCAxNTIsIDE3MSwgMjI2LCAyMDgsIDE3MSwgMSwgMTQ5LCAyMjIsIDE4MiwgMTcxLCAxLCAxNDksIDIzMiwgMTkxLCAKLSAgICAxNzEsIDI1LCA1LCAxNDksIDE1NiwgMTcxLCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTcxLCAyMSwgMjEwLCA4NiwgMTcxLCAKLSAgICAyMSwgMTExLCAxNzEsIDIxLCAxMDUsIDE3MSwgMjEsIDE1OCwgMTcxLCAyMSwgMTYxLCAxNzEsIDIxLCAxOTAsIDE3MSwgMjEsIAotICAgIDE5NSwgMTcxLCAyMSwgMTk5LCAxNzEsIDIxLCAxOTYsIDE3MSwgMjEsIDIwMSwgMTcxLCAyNTUsIDMwLCA1MCwgMTcxLCAKLSAgICAyMjIsIDEyMCwgNTAsIDE1NywgNSwgMjUxLCA3LCAxNTcsIDUsIDI1NCwgODMsIDE1NywgNSwgMjEzLCAxNDcsIDE1NywgMSwgCi0gICAgNjEsIDE1NywgMSwgMjU1LCA4MiwgMTU3LCAxLCA3NCwgMTU3LCAxLCAyMzYsIDQwLCAxNTcsIDEsIDY5LCAxNTcsIDEsIAotICAgIDIxNCwgMTE4LCAxNTcsIDEsIDE0OSwgMTUzLCAxNTcsIDEsIDE0OSwgMTU2LCAxNTcsIDEsIDc2LCAxNTcsIDEsIDI1NCwgCi0gICAgMjEwLCAxNTcsIDEsIDc4LCAxNTcsIDEsIDI1MywgMjAwLCAxNTcsIDEsIDE3NiwgMTU3LCAxLCAyMzQsIDEzOCwgMTU3LCAxLCAKLSAgICAyNDMsIDE0MiwgMTU3LCAxLCAyNDMsIDAsIDE1NywgMSwgMjI5LCA4MiwgMTU3LCAxLCAyNTEsIDQxLCAxNTcsIDEsIDI1MCwgCi0gICAgMTY1LCAxNTcsIDEsIDIzNSwgMTQ3LCAxNTcsIDEsIDIzNSwgMTIwLCAxNTcsIDEsIDIyNywgMTY5LCAxNTcsIDEsIDIxNSwgCi0gICAgMTU3LCAxNTcsIDEsIDIxNSwgMTQ1LCAxNTcsIDEsIDI0OCwgMTQzLCAxNTcsIDEsIDI0OCwgMTI3LCAxNTcsIDEsIDIyOCwgCi0gICAgMTE1LCAxNTcsIDEsIDIxNywgMTA2LCAxNTcsIDEsIDIxNiwgMjA5LCAxNTcsIDEsIDI0OCwgMjI5LCAxNTcsIDEsIDI0OCwgCi0gICAgMzMsIDE1NywgMSwgMTk4LCAxNTcsIDEsIDE5MSwgMTU3LCAxLCAyMjUsIDE1MCwgMTU3LCAxLCAyNTIsIDE5OSwgMTU3LCAxLCAKLSAgICAyNTIsIDI2LCAxNTcsIDEsIDE4NiwgMTU3LCAxLCAxOTIsIDE1NywgMSwgMjA1LCAxNTcsIDEsIDIzMywgMTQxLCAxNTcsIDEsIAotICAgIDIzMiwgMTkwLCAxNTcsIDEsIDIxNCwgMjcsIDE1NywgMSwgMjIwLCAxMDQsIDE1NywgMSwgMjE4LCAyMjUsIDE1NywgMSwgCi0gICAgMjA2LCAxNTcsIDEsIDE2MiwgMTU3LCA1LCAyMjcsIDIwOSwgMTU3LCA1LCAyNTMsIDE4MywgMTU3LCAyNSwgNSwgMjU1LCAKLSAgICA4MiwgMTU3LCAyNSwgNSwgNzQsIDE1NywgMjUsIDUsIDIzNiwgNDAsIDE1NywgMjUsIDUsIDY5LCAxNTcsIDI1LCA1LCAyMTQsIAotICAgIDExOCwgMTU3LCAyNSwgNSwgMTQ5LCAxNTMsIDE1NywgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDE1NywgMjUsIDUsIDc2LCAKLSAgICAxNTcsIDI1LCA1LCAyNTQsIDIxMCwgMTU3LCAyNSwgNSwgNzgsIDE1NywgMjUsIDUsIDI1MywgMjAwLCAxNTcsIDUsIDIxMywgCi0gICAgMTUyLCAxNTcsIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTU3LCAyNTMsIDIwMSwgMjMzLCAyOSwgNzksIDE1NywgMSwgMjIyLCAKLSAgICAxODEsIDE1NywgMSwgMjIzLCA0MiwgMTU3LCAxLCAyMTAsIDE2OCwgMTU3LCAxLCAxNDksIDIyMiwgMTgyLCAxNTcsIDEsIAotICAgIDE0OSwgMjMyLCAxOTEsIDE1NywgMjUsIDUsIDE0OSwgMTU2LCAxNTcsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNTcsIDIxLCAKLSAgICAyMTAsIDg2LCAxNTcsIDIxLCAxMTEsIDE1NywgMjEsIDEwNSwgMTU3LCAyMSwgMTU4LCAxNTcsIDIxLCAxNjEsIDE1NywgMjEsIAotICAgIDE5MCwgMTU3LCAyMSwgMTk1LCAxNTcsIDIxLCAxOTksIDE1NywgMjEsIDE5NiwgMTU3LCAyMSwgMjAxLCAxNTcsIDIzNSwgCi0gICAgMTY3LCAxNTcsIDEsIDIxMiwgNjUsIDE1NywgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAxNTcsIDI0NCwgMTAsIDEyMywgMjQyLCAKLSAgICAzNCwgMTU3LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDE1NywgMjQ0LCAxMCwgMTIzLCAyMTksIDExOSwgMTU3LCAyNDQsIAotICAgIDEwLCAxMjMsIDI0NSwgMTk2LCAxNTcsIDI0NCwgMTAsIDEzNCwgMjE5LCAxMTgsIDM2LCA1LCAyNTQsIDgzLCAzNiwgNSwgCi0gICAgMjEzLCAxNDcsIDM2LCAxLCA2MSwgMzYsIDEsIDI1NSwgODIsIDM2LCAxLCA3NCwgMzYsIDEsIDIzNiwgNDAsIDM2LCAxLCAKLSAgICA2OSwgMzYsIDEsIDIxNCwgMTE4LCAzNiwgMSwgNzYsIDM2LCAxLCAyNDUsIDIxNywgMzYsIDEsIDI1NCwgMjEwLCAzNiwgMSwgCi0gICAgNzgsIDM2LCAxLCAyMjYsIDE4NywgMzYsIDEsIDI1MywgMjAwLCAzNiwgMSwgMTc2LCAzNiwgMSwgMjI5LCA4MiwgMzYsIDEsIAotICAgIDI1MSwgNDEsIDM2LCAxLCAyMzUsIDE0NywgMzYsIDEsIDIyNywgMTY5LCAzNiwgMSwgMjE1LCAxNTcsIDM2LCAxLCAyMjgsIAotICAgIDExNSwgMzYsIDEsIDIxNywgMTA2LCAzNiwgMSwgMTk4LCAzNiwgMSwgMjI4LCA5NywgMzYsIDEsIDE5MSwgMzYsIDEsIDE4NiwgCi0gICAgMzYsIDEsIDE5MiwgMzYsIDEsIDIwNSwgMzYsIDEsIDIyMiwgMTgxLCAzNiwgMSwgMjMzLCAxNDEsIDM2LCAxLCAyMzIsIAotICAgIDE5MCwgMzYsIDEsIDIzMiwgMTgxLCAzNiwgMSwgMjE0LCAyNywgMzYsIDEsIDIyMCwgMTA0LCAzNiwgMSwgMjE4LCAyMjUsIAotICAgIDM2LCAxLCAyMDYsIDM2LCAxLCAxNjIsIDM2LCAyNSwgNSwgMjU1LCA4MiwgMzYsIDI1LCA1LCA3NCwgMzYsIDI1LCA1LCAKLSAgICAyMzYsIDQwLCAzNiwgMjUsIDUsIDY5LCAzNiwgMjUsIDUsIDIxNCwgMTE4LCAzNiwgMjUsIDUsIDc2LCAzNiwgMjUsIDUsIAotICAgIDI0NSwgMjE3LCAzNiwgMjUsIDUsIDI1NCwgMjEwLCAzNiwgMjUsIDUsIDc4LCAzNiwgMjUsIDUsIDIyNiwgMTg3LCAzNiwgCi0gICAgMjUsIDUsIDI1MywgMjAwLCAzNiwgNSwgMjEzLCAxNTIsIDM2LCAyMjYsIDIwOCwgMzYsIDI1MywgMjAxLCAyMzMsIDI5LCAKLSAgICA3OSwgMzYsIDIxLCAyMTAsIDg2LCAzNiwgMjEsIDExMSwgMzYsIDIxLCAxMDUsIDM2LCAyMSwgMTU4LCAzNiwgMjEsIDE2MSwgCi0gICAgMzYsIDIxLCAxOTAsIDM2LCAyMSwgMTk1LCAzNiwgMjEsIDE5OSwgMzYsIDIxLCAxOTYsIDM2LCAyMSwgMjAxLCAzNiwgNTQsIAotICAgIDIxNiwgMjQ4LCAzNiwgNTQsIDEyMywgMjQwLCAyMTcsIDM2LCA1NCwgMTIzLCAyMTYsIDE0OCwgMzYsIDI0OCwgMTU0LCA1MCwgCi0gICAgMzYsIDIzMCwgMTQwLCA1MCwgMzYsIDIxMSwgNDUsIDUwLCAzNiwgMjQ4LCA5NSwgNTAsIDM2LCAyNDksIDE0NywgNTAsIDM2LCAKLSAgICAyNTMsIDI0NiwgNzIsIDUwLCAzNiwgMjIyLCAxMjAsIDUwLCAzNiwgNTQsIDUwLCAxNDgsIDUsIDI1MSwgNywgMTQ4LCA1LCAKLSAgICAyNTQsIDgzLCAxNDgsIDUsIDIxMywgMTQ3LCAxNDgsIDEsIDYxLCAxNDgsIDEsIDI1NSwgODIsIDE0OCwgMSwgNzQsIDE0OCwgCi0gICAgMSwgMjM2LCA0MCwgMTQ4LCAxLCA2OSwgMTQ4LCAxLCAyMTQsIDExOCwgMTQ4LCAxLCAxNDksIDE1MywgMTQ4LCAxLCAxNDksIAotICAgIDE1NiwgMTQ4LCAxLCA3NiwgMTQ4LCAxLCAyNDUsIDIxNywgMTQ4LCAxLCAyNTQsIDIxMCwgMTQ4LCAxLCA3OCwgMTQ4LCAxLCAKLSAgICAyMjYsIDE4NywgMTQ4LCAxLCAyNTMsIDIwMCwgMTQ4LCAxLCAxNzYsIDE0OCwgMSwgMjM0LCAxMzgsIDE0OCwgMSwgMjQzLCAKLSAgICAxNDIsIDE0OCwgMSwgMjQzLCAwLCAxNDgsIDEsIDIyOSwgODIsIDE0OCwgMSwgMjUxLCA0MSwgMTQ4LCAxLCAyNTAsIDE2NSwgCi0gICAgMTQ4LCAxLCAyMzUsIDE0NywgMTQ4LCAxLCAyMzUsIDEyMCwgMTQ4LCAxLCAyMjcsIDE2OSwgMTQ4LCAxLCAyMTUsIDE1NywgCi0gICAgMTQ4LCAxLCAyMTUsIDE0NSwgMTQ4LCAxLCAyNDgsIDE0MywgMTQ4LCAxLCAyNDgsIDEyNywgMTQ4LCAxLCAyMjgsIDExNSwgCi0gICAgMTQ4LCAxLCAyMTcsIDEwNiwgMTQ4LCAxLCAyMTYsIDIwOSwgMTQ4LCAxLCAyNDgsIDIyOSwgMTQ4LCAxLCAyNDgsIDMzLCAKLSAgICAxNDgsIDEsIDE5OCwgMTQ4LCAxLCAxOTEsIDE0OCwgMSwgMjI1LCAxNTAsIDE0OCwgMSwgMjUyLCAxOTksIDE0OCwgMSwgCi0gICAgMjUyLCAyNiwgMTQ4LCAxLCAxODYsIDE0OCwgMSwgMTkyLCAxNDgsIDEsIDIwNSwgMTQ4LCAxLCAyMjIsIDE4MSwgMTQ4LCAxLCAKLSAgICAyMzMsIDE0MSwgMTQ4LCAxLCAyMzIsIDE5MCwgMTQ4LCAxLCAyMTQsIDI3LCAxNDgsIDEsIDIyMCwgMTA0LCAxNDgsIDEsIAotICAgIDIxOCwgMjI1LCAxNDgsIDEsIDIwNiwgMTQ4LCAxLCAxNjIsIDE0OCwgNSwgMjUzLCAxODMsIDE0OCwgMjUsIDUsIDI1NSwgCi0gICAgODIsIDE0OCwgMjUsIDUsIDc0LCAxNDgsIDI1LCA1LCAyMzYsIDQwLCAxNDgsIDI1LCA1LCA2OSwgMTQ4LCAyNSwgNSwgMjE0LCAKLSAgICAxMTgsIDE0OCwgMjUsIDUsIDE0OSwgMTUzLCAxNDgsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxNDgsIDI1LCA1LCA3NiwgCi0gICAgMTQ4LCAyNSwgNSwgMjQ1LCAyMTcsIDE0OCwgMjUsIDUsIDI1NCwgMjEwLCAxNDgsIDI1LCA1LCA3OCwgMTQ4LCAyNSwgNSwgCi0gICAgMjI2LCAxODcsIDE0OCwgMjUsIDUsIDI1MywgMjAwLCAxNDgsIDUsIDIxMywgMTUyLCAxNDgsIDIzMywgMjksIDc5LCAxNDgsIAotICAgIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTQ4LCAxLCAyMTUsIDE4NCwgMTQ4LCAxLCAyNDYsIDQ2LCAxNDgsIDEsIDE0OSwgCi0gICAgMjIyLCAxODIsIDE0OCwgMSwgMTQ5LCAyMzIsIDE5MSwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTYsIDE0OCwgMjUsIDUsIDE0OSwgCi0gICAgMjMyLCAxOTEsIDE0OCwgMjEsIDIxMCwgODYsIDE0OCwgMjEsIDExMSwgMTQ4LCAyMSwgMTA1LCAxNDgsIDIxLCAxNTgsIAotICAgIDE0OCwgMjEsIDE2MSwgMTQ4LCAyMSwgMTkwLCAxNDgsIDIxLCAxOTUsIDE0OCwgMjEsIDE5OSwgMTQ4LCAyMSwgMTk2LCAKLSAgICAxNDgsIDIxLCAyMDEsIDE0OCwgMjQ0LCAxMCwgMjEsIDIxMCwgODcsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIAotICAgIDE0OCwgMjQ0LCAxMCwgMjEsIDEyMywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgCi0gICAgMTEzLCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAxMzQsIDMxLCAyMjYsIAotICAgIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDEyMywgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgCi0gICAgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAxMTMsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAKLSAgICAyMSwgMTM0LCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgNSwgMjE1LCA4NCwgMTY1LCA1LCAyNTQsIAotICAgIDgzLCAxNjUsIDUsIDIxMywgMTQ3LCAxNjUsIDEsIDYxLCAxNjUsIDEsIDI1NSwgODIsIDE2NSwgMSwgNzQsIDE2NSwgMSwgCi0gICAgMjM2LCA0MCwgMTY1LCAxLCA2OSwgMTY1LCAxLCAyMTQsIDExOCwgMTY1LCAxLCAxNDksIDE1MywgMTY1LCAxLCAxNDksIAotICAgIDE1NiwgMTY1LCAxLCA3NiwgMTY1LCAxLCAyNDUsIDIxNywgMTY1LCAxLCAyNTQsIDIxMCwgMTY1LCAxLCA3OCwgMTY1LCAxLCAKLSAgICAyMjYsIDE4NywgMTY1LCAxLCAyNTMsIDIwMCwgMTY1LCAxLCAxNzYsIDE2NSwgMSwgMjM0LCAxMzgsIDE2NSwgMSwgMjQzLCAKLSAgICAxNDIsIDE2NSwgMSwgMjQzLCAwLCAxNjUsIDEsIDIyOSwgODIsIDE2NSwgMSwgMjUxLCA0MSwgMTY1LCAxLCAyNTAsIDE2NSwgCi0gICAgMTY1LCAxLCAyMzUsIDE0NywgMTY1LCAxLCAyMzUsIDEyMCwgMTY1LCAxLCAyMjcsIDE2OSwgMTY1LCAxLCAyMTUsIDE1NywgCi0gICAgMTY1LCAxLCAyMTUsIDE0NSwgMTY1LCAxLCAyNDgsIDE0MywgMTY1LCAxLCAyNDgsIDEyNywgMTY1LCAxLCAyMjgsIDExNSwgCi0gICAgMTY1LCAxLCAyMTcsIDEwNiwgMTY1LCAxLCAyMTYsIDIwOSwgMTY1LCAxLCAyNDgsIDIyOSwgMTY1LCAxLCAyNDgsIDMzLCAKLSAgICAxNjUsIDEsIDE5OCwgMTY1LCAxLCAxOTEsIDE2NSwgMSwgMjI1LCAxNTAsIDE2NSwgMSwgMjUyLCAxOTksIDE2NSwgMSwgCi0gICAgMjUyLCAyNiwgMTY1LCAxLCAxODYsIDE2NSwgMSwgMTkyLCAxNjUsIDEsIDIwNSwgMTY1LCAxLCAyMjIsIDE4MSwgMTY1LCAxLCAKLSAgICAyMzMsIDE0MSwgMTY1LCAxLCAyMzIsIDE5MCwgMTY1LCAxLCAyMTQsIDI3LCAxNjUsIDEsIDIyMCwgMTA0LCAxNjUsIDEsIAotICAgIDIxOCwgMjI1LCAxNjUsIDEsIDIwNiwgMTY1LCAxLCAxNjIsIDE2NSwgNSwgMjI3LCAyMDksIDE2NSwgNSwgMjUzLCAxODMsIAotICAgIDE2NSwgMjUsIDUsIDI1NSwgODIsIDE2NSwgMjUsIDUsIDc0LCAxNjUsIDI1LCA1LCAyMzYsIDQwLCAxNjUsIDI1LCA1LCA2OSwgCi0gICAgMTY1LCAyNSwgNSwgMjE0LCAxMTgsIDE2NSwgMjUsIDUsIDE0OSwgMTUzLCAxNjUsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKLSAgICAxNjUsIDI1LCA1LCA3NiwgMTY1LCAyNSwgNSwgMjQ1LCAyMTcsIDE2NSwgMjUsIDUsIDI1NCwgMjEwLCAxNjUsIDI1LCA1LCAKLSAgICA3OCwgMTY1LCAyNSwgNSwgMjI2LCAxODcsIDE2NSwgMjUsIDUsIDI1MywgMjAwLCAxNjUsIDUsIDIxMywgMTUyLCAxNjUsIAotICAgIDIzMywgMjksIDc5LCAxNjUsIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTY1LCAxLCAyNDQsIDIwNCwgMTY1LCAxLCAxNDksIAotICAgIDIyMiwgMTgyLCAxNjUsIDEsIDE0OSwgMjMyLCAxOTEsIDE2NSwgMjUsIDUsIDE0OSwgMTU2LCAxNjUsIDI1LCA1LCAxNDksIAotICAgIDIzMiwgMTkxLCAxNjUsIDIxLCAyMTAsIDg2LCAxNjUsIDIxLCAxMTEsIDE2NSwgMjEsIDEwNSwgMTY1LCAyMSwgMTU4LCAKLSAgICAxNjUsIDIxLCAxNjEsIDE2NSwgMjEsIDE5MCwgMTY1LCAyMSwgMTk1LCAxNjUsIDIxLCAxOTksIDE2NSwgMjEsIDE5NiwgCi0gICAgMTY1LCAyMSwgMjAxLCAxNjUsIDUsIDIzNSwgMTA4LCAxNjUsIDUsIDIxNCwgMTYxLCAxMzYsIDUsIDI1NCwgODMsIDEzNiwgCi0gICAgNSwgMjEzLCAxNDcsIDEzNiwgMSwgNjEsIDEzNiwgMSwgMjU1LCA4MiwgMTM2LCAxLCA3NCwgMTM2LCAxLCAyMzYsIDQwLCAKLSAgICAxMzYsIDEsIDY5LCAxMzYsIDEsIDIxNCwgMTE4LCAxMzYsIDEsIDE0OSwgMTUzLCAxMzYsIDEsIDE0OSwgMTU2LCAxMzYsIDEsIAotICAgIDc2LCAxMzYsIDEsIDI0NSwgMjE3LCAxMzYsIDEsIDI1NCwgMjEwLCAxMzYsIDEsIDc4LCAxMzYsIDEsIDIyNiwgMTg3LCAKLSAgICAxMzYsIDEsIDI1MywgMjAwLCAxMzYsIDEsIDE3NiwgMTM2LCAxLCAyMzQsIDEzOCwgMTM2LCAxLCAyNDMsIDE0MiwgMTM2LCAKLSAgICAxLCAyNDMsIDAsIDEzNiwgMSwgMjI5LCA4MiwgMTM2LCAxLCAyNTEsIDQxLCAxMzYsIDEsIDI1MCwgMTY1LCAxMzYsIDEsIAotICAgIDIzNSwgMTQ3LCAxMzYsIDEsIDIzNSwgMTIwLCAxMzYsIDEsIDIyNywgMTY5LCAxMzYsIDEsIDIxNSwgMTU3LCAxMzYsIDEsIAotICAgIDIxNSwgMTQ1LCAxMzYsIDEsIDI0OCwgMTQzLCAxMzYsIDEsIDI0OCwgMTI3LCAxMzYsIDEsIDIyOCwgMTE1LCAxMzYsIDEsIAotICAgIDIxNywgMTA2LCAxMzYsIDEsIDIxNiwgMjA5LCAxMzYsIDEsIDI0OCwgMjI5LCAxMzYsIDEsIDI0OCwgMzMsIDEzNiwgMSwgCi0gICAgMTk4LCAxMzYsIDEsIDIyOCwgOTcsIDEzNiwgMSwgMTkxLCAxMzYsIDEsIDIyNSwgMTUwLCAxMzYsIDEsIDI1MiwgMTk5LCAKLSAgICAxMzYsIDEsIDI1MiwgMjYsIDEzNiwgMSwgMTg2LCAxMzYsIDEsIDE5MiwgMTM2LCAxLCAyMDUsIDEzNiwgMSwgMjIyLCAxODEsIAotICAgIDEzNiwgMSwgMjMzLCAxNDEsIDEzNiwgMSwgMjMyLCAxOTAsIDEzNiwgMSwgMjMyLCAxODEsIDEzNiwgMSwgMjE0LCAyNywgCi0gICAgMTM2LCAxLCAyMjAsIDEwNCwgMTM2LCAxLCAyMTgsIDIyNSwgMTM2LCAxLCAyMDYsIDEzNiwgMSwgMTYyLCAxMzYsIDEsIAotICAgIDIxNSwgMTI2LCAxMzYsIDUsIDI1MywgMTgzLCAxMzYsIDI1LCA1LCAyNTUsIDgyLCAxMzYsIDI1LCA1LCA3NCwgMTM2LCAyNSwgCi0gICAgNSwgMjM2LCA0MCwgMTM2LCAyNSwgNSwgNjksIDEzNiwgMjUsIDUsIDIxNCwgMTE4LCAxMzYsIDI1LCA1LCAxNDksIDE1MywgCi0gICAgMTM2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTM2LCAyNSwgNSwgNzYsIDEzNiwgMjUsIDUsIDI0NSwgMjE3LCAxMzYsIDI1LCAKLSAgICA1LCAyNTQsIDIxMCwgMTM2LCAyNSwgNSwgNzgsIDEzNiwgMjUsIDUsIDIyNiwgMTg3LCAxMzYsIDI1LCA1LCAyNTMsIDIwMCwgCi0gICAgMTM2LCA1LCAyMTMsIDE1MiwgMTM2LCAxLCA1OSwgMjIzLCA3NiwgMTM2LCAyNTMsIDIwMSwgMjMzLCAyOSwgNzksIDEzNiwgCi0gICAgMSwgMTQ5LCAyMjIsIDE4MiwgMTM2LCAxLCAxNDksIDIzMiwgMTkxLCAxMzYsIDI1LCA1LCAxNDksIDE1NiwgMTM2LCAyNSwgCi0gICAgNSwgMTQ5LCAyMzIsIDE5MSwgMTM2LCAyMSwgMjEwLCA4NiwgMTM2LCAyMSwgMTExLCAxMzYsIDIxLCAxMDUsIDEzNiwgMjEsIAotICAgIDE1OCwgMTM2LCAyMSwgMTYxLCAxMzYsIDIxLCAxOTAsIDEzNiwgMjEsIDE5NSwgMTM2LCAyMSwgMTk5LCAxMzYsIDIxLCAKLSAgICAxOTYsIDEzNiwgMjEsIDIwMSwgMTM2LCA1NCwgMjE2LCAyNDgsIDEzNiwgNTQsIDEyMywgMjQwLCAyMTcsIDEzNiwgNTQsIAotICAgIDEyMywgMjE2LCAxNDgsIDEzNiwgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAxMzYsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgCi0gICAgMTM2LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDEzNiwgMjQ4LCAxNTgsIDc5LCAxMzYsIDEsIDI1MCwgMTA3LCAyMjgsIAotICAgIDExNiwgMTM2LCAxLCAyNTAsIDEwNywgMjMwLCAzMCwgMTM2LCAxLCAyNTAsIDEwNywgMjIyLCAxODIsIDEzNiwgMSwgMjUwLCAKLSAgICAxMDcsIDE1NiwgMTM2LCAxLCAyNTAsIDEwNywgMjMyLCAxOTEsIDEzNiwgMSwgMjUwLCAxMDcsIDIzNSwgMjksIDE3NSwgNSwgCi0gICAgMjU0LCA4MiwgMTc1LCA1LCAyMTMsIDE0NiwgMTc1LCAxLCAyNTMsIDE3MywgMTc1LCAxLCAyNTUsIDM2LCAxNzUsIDEsIAotICAgIDI1NCwgMjMyLCAxNzUsIDEsIDI1NCwgMjQ3LCAxNzUsIDEsIDIzNSwgMTU3LCAxNzUsIDEsIDIzNiwgMzksIDE3NSwgMSwgCi0gICAgMjE0LCAxMTAsIDE3NSwgMSwgMjE0LCAxMTIsIDE3NSwgMSwgMjM1LCAxODAsIDE3NSwgMSwgMjM1LCAxODEsIDE3NSwgMSwgCi0gICAgMjM2LCAyNSwgMTc1LCAxLCAyMzYsIDI3LCAxNzUsIDEsIDI0NSwgMjUsIDE3NSwgMSwgMjQ1LCAyMTIsIDE3NSwgMSwgMjU0LCAKLSAgICAxOTcsIDE3NSwgMSwgMjI2LCAxMTIsIDE3NSwgMSwgMjI2LCAxODEsIDE3NSwgMSwgMjUzLCAxODYsIDE3NSwgMSwgMjU0LCAKLSAgICAxNTQsIDIzNCwgMTkzLCAxNzUsIDEsIDIzMSwgMjE0LCAyMzQsIDE5MywgMTc1LCAxLCAyNTQsIDE1NCwgMjQzLCA4OSwgCi0gICAgMTc1LCAxLCAyMzEsIDIxNCwgMjQzLCA4OSwgMTc1LCAxLCAyMzQsIDIzNSwgMjI5LCAyMjcsIDE3NSwgMSwgMjIxLCAyMzgsIAotICAgIDI0MywgODksIDE3NSwgMSwgMjU0LCAxNTQsIDI1MCwgMjI0LCAxNzUsIDEsIDIzMSwgMjE0LCAyNTAsIDIyNCwgMTc1LCAxLCAKLSAgICAyNTQsIDE1NCwgMjM1LCAxMzMsIDE3NSwgMSwgMjMxLCAyMTQsIDIzNSwgMTMzLCAxNzUsIDEsIDIxNywgOTksIDIyOSwgCi0gICAgMjI3LCAxNzUsIDEsIDIxNywgOTksIDIyMSwgMjM3LCAyMjksIDIyOCwgMTc1LCAxLCAyMjEsIDIzOCwgMjM1LCAxMzMsIAotICAgIDE3NSwgMSwgMjU0LCAxNTQsIDIxNSwgMTUzLCAxNzUsIDEsIDIzMSwgMjE0LCAyMTUsIDE1MywgMTc1LCAxLCAyNTQsIDE1NCwgCi0gICAgMjQ4LCAxMzQsIDE3NSwgMSwgMjMxLCAyMTQsIDI0OCwgMTM0LCAxNzUsIDEsIDIzMCwgNTgsIDIyOSwgMTg1LCAxNzUsIDEsIAotICAgIDIyMSwgMjM4LCAyNDgsIDEzNCwgMTc1LCAxLCAyNTQsIDE1NCwgMjE3LCAzMSwgMTc1LCAxLCAyMzEsIDIxNCwgMjE3LCAzMSwgCi0gICAgMTc1LCAxLCAyNTQsIDE1NCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjMxLCAyMTQsIDI0OCwgMTUyLCAxNzUsIDEsIDI0OCwgMTgyLCAKLSAgICAyMjksIDE4NSwgMTc1LCAxLCAyMjEsIDIzOCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjU0LCAxNTQsIDIyNSwgMjMyLCAxNzUsIDEsIAotICAgIDIzMSwgMjE0LCAyMjUsIDIzMiwgMTc1LCAxLCAyNTQsIDE1NCwgMjUyLCAxMjAsIDE3NSwgMSwgMjMxLCAyMTQsIDI1MiwgCi0gICAgMTIwLCAxNzUsIDEsIDIzMSwgMTM2LCAxNzUsIDEsIDI1NCwgMTM5LCAyNTIsIDEyMCwgMTc1LCAxLCAyMTEsIDUxLCAxNzUsIAotICAgIDEsIDIyMywgMTM2LCAxNzUsIDEsIDI0OCwgMTgyLCAyMzMsIDczLCAxNzUsIDEsIDIxNCwgMSwgMTc1LCAxLCAyMTcsIDk5LCAKLSAgICAyMjEsIDIxMiwgMTc1LCAxLCAyMzAsIDU4LCAyMjEsIDIxMiwgMTc1LCAxLCAyNDgsIDE4MiwgMjIxLCAyMTIsIDE3NSwgMSwgCi0gICAgMjQxLCAyNDksIDE3NSwgMSwgMjMwLCA1OCwgMjMzLCA3MywgMTc1LCAxLCAyNDQsIDE2NCwgMTc1LCA1LCAyNTQsIDE4NiwgCi0gICAgMTc1LCAyNSwgNSwgMjU0LCAyNDIsIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyNTQsIDI0OSwgMTc1LCAyNSwgNSwgMjQ3LCAKLSAgICAyMzYsIDI1NCwgMjQ5LCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjM1LCAxNzcsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyMzUsIAotICAgIDE3NywgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDIyNiwgOTIsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyMjYsIDkyLCAxNzUsIAotICAgIDI1LCA1LCAyNDMsIDEzMSwgMTc1LCAyNSwgNSwgMjM0LCAyMSwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIzNCwgMjEsIDE3NSwgCi0gICAgMjUsIDUsIDIzNCwgMjMsIDI0OCwgNzUsIDE3NSwgMjUsIDUsIDIzNCwgMjIsIDI0MiwgNTQsIDI1NCwgMjQyLCAxNzUsIDI1LCAKLSAgICA1LCAyMzQsIDIyLCAyNDIsIDU0LCAyNDcsIDIzNiwgMjU0LCAyNDIsIDE3NSwgMjUsIDUsIDIzNCwgMjIsIDI0MiwgNTQsIAotICAgIDI0MywgODgsIDE3NSwgMjUsIDUsIDI0MywgODgsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyNDMsIDEzMSwgMTc1LCAyNSwgNSwgCi0gICAgMjQ3LCAyMzYsIDI0MywgODgsIDE3NSwgMjI0LCAxNDQsIDIzMywgMjEzLCAxNjgsIDEzNSwgMjM0LCAzNSwgMjM0LCAyNTIsIAotICAgIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMzQsIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMDUsIDE2OCwgMTM1LCAKLSAgICAyMzQsIDExMiwgMjM0LCAxMDEsIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMDksIDE2OCwgMTM1LCAyMzQsIDExMiwgCi0gICAgMjIzLCAxNTcsIDE2OCwgMTM1LCAyMjksIDEwLCAyMjgsIDI1MywgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgMTU1LCAxNjgsIAotICAgIDEzNSwgMjUwLCA5NSwgMjUwLCAxMDMsIDE2OCwgMTM1LCAyNTAsIDk1LCAyNTAsIDE1NCwgMTY4LCAxMzUsIDIxOSwgNjEsIAotICAgIDIxOSwgNjAsIDE2OCwgMTM1LCAyNTAsIDk1LCAyNTAsIDkxLCAxNjgsIDEzNSwgMjEwLCAyNDUsIDIxMCwgMjUyLCAxNjgsIAotICAgIDEzNSwgMjQ3LCAxNTQsIDI1MCwgMTYyLCAxNjgsIDEzNSwgMjE2LCA0MywgMjI1LCAyNDIsIDE2OCwgMTM1LCAyMTYsIDE1OCwgCi0gICAgMjE2LCAyMDEsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjI5LCAyMDYsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjI1LCAxMTQsIAotICAgIDE2OCwgMTM1LCAyMjgsIDgwLCAyMjksIDEwMywgMTY4LCAxMzUsIDI0NywgMTU0LCAyNDgsIDc2LCAxNjgsIDEzNSwgMjE2LCAKLSAgICA0MywgMjE3LCA1NiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDEzMiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDIwNSwgCi0gICAgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDE1NSwgMTY4LCAxMzUsIDIyOCwgODAsIDIyNywgMjQyLCAxNjgsIDEzNSwgMjUxLCAKLSAgICAyMTQsIDI1MiwgMTcyLCAxNjgsIDEzNSwgMjI1LCAyMCwgMjI1LCA0NSwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjUsIDExNiwgCi0gICAgMTY4LCAxMzUsIDI0NCwgNTIsIDI0NCwgMjA0LCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyNSwgMTQ0LCAxNjgsIDEzNSwgMjQ0LCAKLSAgICA1MiwgMjQ0LCAxODEsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjIxLCAyNDksIDE2OCwgMTM1LCAyMzAsIDE2NywgMTg2LCAxNjgsIAotICAgIDEzNSwgMjEwLCAyNDUsIDIxMSwgNzksIDE2OCwgMTM1LCAyMjIsIDIxNCwgMjIyLCAxNDEsIDE2OCwgMTM1LCAyMjIsIDE0MiwgCi0gICAgMTY4LCAxMzUsIDIzMiwgMTYzLCAyMzIsIDIxMiwgMTY4LCAxMzUsIDIzMiwgMTAzLCAxNjgsIDEzNSwgMjExLCAyMjgsIAotICAgIDIxMiwgNjEsIDE2OCwgMTM1LCAyMTksIDYxLCAyMjIsIDgsIDE2OCwgMTM1LCAyMTksIDYxLCAyMjIsIDExNiwgMTY4LCAKLSAgICAxMzUsIDIxOSwgNjEsIDIxOCwgODMsIDE2OCwgMTM1LCAyNDEsIDc2LCAyNDEsIDE2NiwgMTY4LCAxMzUsIDIzMiwgMTYzLCAKLSAgICAyNTAsIDc2LCAxNjgsIDEzNSwgMTQ0LCAyNTQsIDEyMywgMTY4LCAxMzUsIDI0MSwgNzYsIDIyOCwgNzUsIDE2OCwgMTM1LCAKLSAgICAyMjYsIDcyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDYxLCAxNjgsIDEzNSwgMjMxLCAyMDksIDI0MiwgMjQsIDE2OCwgMTM1LCAKLSAgICAyMjEsIDIzMiwgMjU1LCA4MiwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIDE0NCwgMTY4LCAxMzUsIDIyMSwgMjMyLCA3NCwgCi0gICAgMTY4LCAxMzUsIDIyMSwgMjMyLCAyMzYsIDQwLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDIxNCwgMjE0LCAxNjgsIDEzNSwgMjIxLCAKLSAgICAyMzIsIDIxNCwgMjEyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDY5LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDIxNCwgMTE4LCAxNjgsIAotICAgIDEzNSwgMjI1LCAxMjcsIDE2OCwgMjQ5LCAxMDYsIDE2LCAyNTIsIDE3MywgMTY4LCAxMzUsIDIyMSwgMjMyLCA3NiwgMTY4LCAKLSAgICAxMzUsIDIyMSwgMjMyLCAyNTQsIDI1MiwgMTY4LCAxMzUsIDIyMSwgMjMyLCA3OCwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIAotICAgIDIxMSwgMjMxLCAyMDMsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjU0LCAyMTEsIDIzMSwgMjA0LCAxNjgsIDEzNSwgMjMzLCAKLSAgICAxMTIsIDE2OCwgMTM1LCAyMzEsIDIwMCwgMTY4LCAxMzUsIDIzMSwgMjAxLCAxNjgsIDEzNSwgMjMxLCAyMDksIDI0NSwgCi0gICAgMTg4LCAxNjgsIDEzNSwgMjMxLCAyMDksIDIxNiwgMTU3LCAxNjgsIDEzNSwgMjMxLCAyMDksIDIxNSwgMjI5LCAxNjgsIAotICAgIDEzNSwgMjMxLCAyMDksIDI1MCwgMTQzLCAxNjgsIDEzNSwgMjE2LCAxOTksIDE2OCwgMTM1LCAyMjgsIDIxMCwgMTY4LCAKLSAgICAxMzUsIDIxMSwgNzMsIDE2OCwgMTM1LCAyNDQsIDQzLCAxNjgsIDIxLCAyMTAsIDg2LCAxNjgsIDIxLCAxMTEsIDE2OCwgMjEsIAotICAgIDEwNSwgMTY4LCAyMSwgMTU4LCAxNjgsIDIxLCAxNjEsIDE2OCwgMjEsIDE5MCwgMTY4LCAyMSwgMTk1LCAxNjgsIDIxLCAKLSAgICAxOTksIDE2OCwgMjEsIDE5NiwgMTY4LCAyMSwgMjAxLCAxNjgsIDEzNSwgMjU0LCAxMTksIDE2OCwgMTM1LCAyMzQsIDExMCwgCi0gICAgMjA5LCAyMDksIDEsIDIzNCwgMzQsIDIwOSwgMjA5LCAxLCAyMzQsIDExMiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDIzNCwgCi0gICAgMTEyLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgMjI5LCA5LCAyMDksIDIwOSwgMSwgMjQ5LCAyNDYsIDIwOSwgMjA5LCAxLCAKLSAgICAyMTksIDYxLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgMjI3LCAxMzgsIDIwOSwgMjA5LCAxLCAyNDcsIDE1MywgMjA5LCAyMDksIAotICAgIDEsIDExMiwgMjA5LCAyMDksIDEsIDIxNiwgMTU4LCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjE2LCAxNTgsIDIxNywgNjMsIAotICAgIDIwOSwgMjA5LCAxLCAyMjgsIDc5LCAyMDksIDIwOSwgMSwgMjUxLCAyMTMsIDIwOSwgMjA5LCAxLCAyMjUsIDE5LCAyMDksIAotICAgIDIwOSwgMSwgMjI1LCAxMjUsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgCi0gICAgMjI1LCAxMjUsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjMwLCAxNjYsIAotICAgIDIwOSwgMjA5LCAxLCAyMTAsIDI0NCwgMjA5LCAyMDksIDEsIDIzMiwgMTYzLCAyMzIsIDIxMiwgMjA5LCAyMDksIDEsIDIzMiwgCi0gICAgMTYzLCAyMzIsIDEyNywgMjA5LCAyMDksIDEsIDIxMSwgMjI3LCAyMDksIDIwOSwgMSwgMjE5LCA2MSwgMjE4LCAzNiwgMjA5LCAKLSAgICAyMDksIDEsIDI0MSwgNzYsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCA3OCwgMjA5LCAyMDksIDEsIDI0MSwgNzYsIDIxNywgNjMsIAotICAgIDIwOSwgMjA5LCAyNDUsIDE3MSwgMjA5LCAyMDksIDI1LCA1LCA2MSwgMjA5LCAyMDksIDI1LCA1LCAyMzEsIDIwOSwgMjM0LCAKLSAgICAyNDAsIDIwOSwgMjA5LCAyNSwgNSwgMjU1LCA4MiwgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDE0NCwgMjA5LCAyMDksIDI1LCAKLSAgICA1LCA3NCwgMjA5LCAyMDksIDI1LCA1LCAyMzYsIDQwLCAyMDksIDIwOSwgMjUsIDUsIDIxMSwgMTE3LCAyMDksIDIwOSwgMjUsIAotICAgIDUsIDIxMCwgMTY5LCAyMDksIDIwOSwgMjUsIDUsIDY5LCAyMDksIDIwOSwgMjUsIDUsIDIxNCwgMTE4LCAyMDksIDIwOSwgCi0gICAgMjUsIDUsIDIzMSwgMjA5LCAyMzQsIDE5LCAyMDksIDIwOSwgMjIwLCAxNDcsIDUsIDIzMiwgMTYyLCAyMDksIDIwOSwgMjIwLCAKLSAgICAxNDcsIDUsIDIyNywgMTM4LCAyMDksIDIwOSwgMjUsIDUsIDc2LCAyMDksIDIwOSwgMjUsIDUsIDI0NSwgMjAzLCAyMDksIAotICAgIDIwOSwgMjUsIDUsIDc4LCAyMDksIDIwOSwgMjUsIDUsIDI1MywgMTc1LCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMjEwLCAKLSAgICAyMDksIDIwOSwgMjM0LCAzNSwgMjMzLCAxNDEsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA5LCAyNDUsIDE4OCwgMjA5LCAyMDksIAotICAgIDEzOCwgMjMxLCAyMDksIDIxNiwgMTU3LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwOSwgMjE2LCAxMTgsIDIwOSwgMjA5LCAKLSAgICAxMzgsIDIzMSwgMjA5LCAyNTAsIDIzMSwgMjA5LCAyMDksIDI1MSwgMTIsIDc5LCAyMDksIDIwOSwgMjI4LCAyMTksIDIwOSwgCi0gICAgMjA5LCAyMSwgMjEwLCA4NiwgMjA5LCAyMDksIDIxLCAxMTEsIDIwOSwgMjA5LCAyMSwgMTA1LCAyMDksIDIwOSwgMjEsIAotICAgIDE1OCwgMjA5LCAyMDksIDIxLCAxNjEsIDIwOSwgMjA5LCAyMSwgMTkwLCAyMDksIDIwOSwgMjEsIDE5NSwgMjA5LCAyMDksIAotICAgIDIxLCAxOTksIDIwOSwgMjA5LCAyMSwgMTk2LCAyMDksIDIwOSwgMjEsIDIwMSwgMjA5LCAyMDksIDI0MSwgNzYsIDIyOCwgCi0gICAgNzksIDIwOSwgMjA5LCAyNDEsIDc2LCAyMzAsIDE2NiwgMjA5LCAyMDksIDEsIDIzNCwgMTEzLCAyNDIsIDE4MSwgMjA5LCAKLSAgICAyMDksIDEsIDIzNCwgMTEzLCAyMjcsIDEzOCwgNjMsIDMsIDIyNiwgMjA4LCA2MywgMTY0LCAyNDIsIDEyMiwgMjExLCAwLCAKLSAgICAyMzAsIDI1MywgMjE1LCAxOTAsIDYxLCA2MywgMTY0LCAyNDIsIDEyMiwgMjExLCAwLCAyMzAsIDI1MywgMjU1LCAxNjgsIAotICAgIDIyMiwgMjE4LCAyNTIsIDg1LCAxODYsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIDIzMCwgMjUzLCAyNTUsIDE2OCwgCi0gICAgMjQyLCAxMjIsIDIxNSwgMTc0LCAxODYsIDYzLCAxNjQsIDY1LCAyMTEsIDAsIDIzMCwgMjUzLCAyMzEsIDk4LCAxODYsIDYzLCAKLSAgICAxNjQsIDI1MCwgNCwgMjExLCAwLCAyMzAsIDI1MywgMjIwLCAxMTEsIDE4NiwgNjMsIDE2NCwgMjUwLCAyNDcsIDIxMSwgMCwgCi0gICAgMjMwLCAyNTMsIDIyNSwgMTE1LCAyMjAsIDk4LCAxODYsIDYzLCAxNjQsIDIxMSwgMCwgMjMwLCAyNTMsIDIxNSwgMTc0LCAKLSAgICAyMjAsIDk4LCAxODYsIDYzLCAxNjQsIDIyMSwgMjEwLCAyMjAsIDk3LCA2MywgMTY0LCAyNTEsIDEzNiwgMjExLCAwLCAyMzAsIAotICAgIDI1MiwgNjMsIDE2NCwgMjUxLCAyMzEsIDIyMCwgNSwgMjExLCAwLCAyMzAsIDI1MiwgNjMsIDE2NCwgMjM1LCAyMDQsIDIxNSwgCi0gICAgMTczLCA2MywgMTY0LCAyNDgsIDY5LCAyMTUsIDE3NCwgMjUxLCAxMzUsIDYzLCAxNjQsIDIyMCwgOTcsIDYzLCAxNjQsIAotICAgIDIyNywgMTQzLCAyMjAsIDk3LCA2MywgMTY0LCAyMTUsIDE3NCwgMjIwLCA5NywgNjMsIDE2NCwgMjI3LCAxNDMsIDIxNSwgCi0gICAgMTc0LCAyMjAsIDk3LCA2MywgMTY0LCAyMjIsIDIzOSwgMjUwLCAxMzAsIDIxOCwgMjM4LCAyMjAsIDk3LCA2MywgMTY0LCAKLSAgICAyMjMsIDQ1LCAyNDIsIDE1MywgMjIwLCA5NywgNjMsIDE2NCwgMjUwLCAyNDcsIDI1NSwgMTcyLCAyMjIsIDE0NiwgMjMxLCAKLSAgICA5NywgMjAwLCAyNTEsIDE1LCA2MywgMTY0LCAyNDIsIDEyMiwgMjE1LCAxNzMsIDYzLCAyMzIsIDE1MCwgNSwgMjUwLCAxNjMsIAotICAgIDIyMiwgMTQ1LCA2MywgMjMyLCAxNTAsIDUsIDIzMywgMiwgMjIyLCAxNDUsIDYzLCAyNTMsIDIyMCwgNSwgMjIwLCAxMDcsIAotICAgIDI0MywgNzIsIDI1NSwgMTczLCAyMjIsIDE0NSwgNjMsIDI1MywgMjIwLCA1LCAyNTUsIDE3MCwgMTkxLCA2MywgMjUzLCAKLSAgICAyMjAsIDUsIDIyMSwgMTg0LCAyMTUsIDE2OSwgNjMsIDUsIDIyMywgMTMzLCAyNDcsIDE2NywgMjQzLCA3MSwgNjMsIDUsIAotICAgIDIyMywgMTMzLCAyNDcsIDE2NywgMjQyLCAxODMsIDYzLCA1LCAyMjMsIDEzMywgMjQ3LCAxNjcsIDI0MiwgMTIzLCA2MywgNSwgCi0gICAgMjIzLCAxMzMsIDIyOSwgMjI0LCAyNDMsIDcxLCA2MywgNSwgMjIzLCAxMzMsIDIyOSwgMjI0LCAyNDIsIDE4MywgNjMsIDUsIAotICAgIDIyMywgMTMzLCAyNDcsIDE2NywgMjIzLCAxMzMsIDIyOSwgMjIzLCA2MywgMjEsIDIxMCwgODYsIDYzLCAyMSwgMTExLCA2MywgCi0gICAgMjEsIDEwNSwgNjMsIDIxLCAxNTgsIDYzLCAyMSwgMTYxLCA2MywgMjEsIDE5MCwgNjMsIDIxLCAxOTUsIDYzLCAyMSwgMTk5LCAKLSAgICA2MywgMjEsIDE5NiwgNjMsIDIxLCAyMDEsIDYzLCAyMSwgMTYzLCAxMTEsIDYzLCAyMSwgMTYzLCAxMDUsIDYzLCAyMSwgCi0gICAgMTYzLCAxNTgsIDYzLCAyMSwgMTYzLCAxNjEsIDYzLCAyMSwgMTYzLCAxOTAsIDYzLCAyMSwgMTYzLCAxOTUsIDYzLCAyMSwgCi0gICAgMTYzLCAxOTksIDYzLCAyMSwgMTYzLCAxOTYsIDYzLCAyMSwgMTYzLCAyMDEsIDYzLCAyMSwgMTYzLCAyMTAsIDg2LCA2MywgCi0gICAgMTY0LCAyNTEsIDEzOCwgMjIyLCAxNDUsIDYzLCAxNjQsIDIyOSwgNzMsIDI1MSwgNzYsIDIyNywgMTUzLCAyMTAsIDI1LCAKLSAgICA2MywgMTY0LCAyNTAsIDI0NywgMjU1LCAxNzIsIDIyMiwgMTQ2LCAyNTEsIDc3LCAyMzAsIDIwNywgMjUxLCAxNSwgNjMsIAotICAgIDE2NCwgMjI5LCA3MywgMjUxLCA3NiwgMjIwLCAxMDgsIDIyMiwgMTQ1LCA2MywgMTY0LCAyNTAsIDE0MCwgMjMwLCAyNTIsIAotICAgIDYzLCAxNjQsIDIxNSwgMTg1LCAyNTUsIDE2OSwgNjMsIDE2NCwgMjQyLCAxMDcsIDIyMiwgMTQ2LCAyNDIsIDcwLCA2MywgCi0gICAgMTY0LCAyNDIsIDEwNywgMjIyLCAxNDYsIDI0MiwgNzYsIDYzLCAxNjQsIDI1NCwgMTI0LCAyMzQsIDEyOSwgMjQyLCA3MCwgCi0gICAgNjMsIDE2NCwgMjU0LCAxMjQsIDIzNCwgMTI5LCAyNDIsIDc2LCA2MywgNSwgMjExLCA2NSwgMjE1LCAxNzIsIDYzLCA1LCAKLSAgICAyMzEsIDE3MiwgMjE1LCAxNzIsIDYzLCAxLCAxNzYsIDYzLCAxLCAyMzQsIDEzOCwgNjMsIDEsIDI0MywgMTQyLCA2MywgMSwgCi0gICAgMjQzLCAwLCA2MywgMSwgMjI5LCA4MiwgNjMsIDEsIDI1MSwgNDEsIDYzLCAxLCAyNTAsIDE2NSwgNjMsIDEsIDIzNSwgMTQ3LCAKLSAgICA2MywgMSwgMjI3LCAxNjksIDYzLCAxLCAyMTUsIDE1NywgNjMsIDEsIDIxNSwgMTQ1LCA2MywgMSwgMjQ4LCAxNDMsIDYzLCAKLSAgICAxLCAyNDgsIDEyNywgNjMsIDEsIDIyOCwgMTE1LCA2MywgMSwgMjE3LCAxMDYsIDYzLCAxLCAyMTYsIDIwOSwgNjMsIDEsIAotICAgIDI0OCwgMjI5LCA2MywgMSwgMjQ4LCAzMywgNjMsIDEsIDE5OCwgNjMsIDEsIDE5MSwgNjMsIDEsIDIyNSwgMTUwLCA2MywgMSwgCi0gICAgMjUyLCAxOTksIDYzLCAxLCAyNTIsIDI2LCA2MywgMSwgMTg2LCA2MywgMSwgMjE1LCAxODQsIDYzLCAxLCAyMTUsIDE3NiwgCi0gICAgNjMsIDEsIDI0NiwgNDYsIDYzLCAxLCAyNDYsIDQxLCA2MywgMSwgMjEyLCA2NSwgNjMsIDEsIDIxMCwgODIsIDYzLCAxLCAKLSAgICAyMTAsIDExNiwgNjMsIDEsIDI1NSwgMTc1LCA2MywgMSwgMTkyLCA2MywgMSwgMjA1LCA2MywgMSwgMjMzLCAxNDEsIDYzLCAKLSAgICAxLCAyMjAsIDEwNCwgNjMsIDEsIDIxOCwgMjI1LCA2MywgMSwgMjA2LCA2MywgMSwgMTYyLCA2MywgMSwgNjEsIDYzLCAxLCAKLSAgICAyMzMsIDIzNywgNjMsIDEsIDI0NCwgODUsIDIwNSwgNjMsIDEsIDIzNCwgNTIsIDYzLCAxLCAyMjIsIDE4MSwgNjMsIDI1LCAKLSAgICA1LCAyNTUsIDgyLCA2MywgMjUsIDUsIDc0LCA2MywgMjUsIDUsIDIzNiwgNDAsIDYzLCAyNSwgNSwgNjksIDYzLCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDYzLCAyNSwgNSwgMTQ5LCAxNTMsIDYzLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgNjMsIDI1LCA1LCAxNDksIAotICAgIDE1NiwgNjMsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA2MywgMjUsIDUsIDc2LCA2MywgMjUsIDUsIDI0NSwgMjE3LCA2MywgCi0gICAgMjUsIDUsIDc4LCA2MywgMjUsIDUsIDIyNiwgMTg3LCA2MywgNSwgMjIyLCAyMjQsIDIxOCwgODUsIDIyOSwgODMsIDIyMiwgCi0gICAgMjEzLCA2MywgNSwgMjIyLCAyMTgsIDI1MiwgODQsIDYzLCAyNSwgNSwgMjIzLCA1MiwgNzQsIDYzLCAyNSwgNSwgMjIzLCAKLSAgICA1MiwgMjM2LCA0MCwgNjMsIDUsIDIyNywgMTUzLCAyMTAsIDI2LCAyMjksIDIzMSwgMjQ4LCAyMjksIDYzLCA1LCAyMTksIAotICAgIDczLCAyMzMsIDY2LCA2MywgMTY0LCAyNDIsIDM2LCA2MywgMTY0LCAyMjYsIDYxLCA2MywgNSwgMjMzLCA2OSwgMjIyLCAKLSAgICAxNDUsIDYzLCA1LCAyMTEsIDcwLCAyMjIsIDE0NSwgNjMsIDUsIDIzMywgNzAsIDIxNSwgMTg1LCAyNTEsIDE1LCA2MywgNSwgCi0gICAgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCA1LCAyNDIsIDEyNiwgMjUxLCAxNiwgMjIzLCA0MywgNjMsIDUsIDI0MiwgMTI2LCAKLSAgICAyMzEsIDkwLCAyMjMsIDQzLCA2MywgNSwgMjM1LCAyMDAsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgNSwgCi0gICAgMjMzLCA3MCwgMjE1LCAxODUsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCA1LCAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDIxOCwgCi0gICAgNzQsIDUsIDIzNSwgMjAwLCAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDEsIDE3NiwgNjMsIDIxOCwgNzQsIDEsIAotICAgIDIzNCwgMTM4LCA2MywgMjE4LCA3NCwgMSwgMjQzLCAxNDIsIDYzLCAyMTgsIDc0LCAxLCAyNDMsIDAsIDYzLCAyMTgsIDc0LCAKLSAgICAxLCAyMjksIDgyLCA2MywgMjE4LCA3NCwgMSwgMjUxLCA0MSwgNjMsIDIxOCwgNzQsIDEsIDI1MCwgMTY1LCA2MywgMjE4LCAKLSAgICA3NCwgMSwgMjM1LCAxNDcsIDYzLCAyMTgsIDc0LCAxLCAyMjcsIDE2OSwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgMTU3LCA2MywgCi0gICAgMjE4LCA3NCwgMSwgMjE1LCAxNDUsIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDE0MywgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMTI3LCAKLSAgICA2MywgMjE4LCA3NCwgMSwgMjI4LCAxMTUsIDYzLCAyMTgsIDc0LCAxLCAyMTcsIDEwNiwgNjMsIDIxOCwgNzQsIDEsIDIxNiwgCi0gICAgMjA5LCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAyMjksIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDMzLCA2MywgMjE4LCA3NCwgMSwgCi0gICAgMTk4LCA2MywgMjE4LCA3NCwgMSwgMTkxLCA2MywgMjE4LCA3NCwgMSwgMjI1LCAxNTAsIDYzLCAyMTgsIDc0LCAxLCAyNTIsIAotICAgIDE5OSwgNjMsIDIxOCwgNzQsIDEsIDI1MiwgMjYsIDYzLCAyMTgsIDc0LCAxLCAxODYsIDYzLCAyMTgsIDc0LCAxLCAyMTUsIAotICAgIDE4NCwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgMTc2LCA2MywgMjE4LCA3NCwgMSwgMjQ2LCA0NiwgNjMsIDIxOCwgNzQsIDEsIAotICAgIDI0NiwgNDEsIDYzLCAyMTgsIDc0LCAxLCAyMTIsIDY1LCA2MywgMjE4LCA3NCwgMSwgMjEwLCA4MiwgNjMsIDIxOCwgNzQsIAotICAgIDEsIDIxMCwgMTE2LCA2MywgMjE4LCA3NCwgMSwgMjU1LCAxNzUsIDYzLCAyMTgsIDc0LCAxLCAxOTIsIDYzLCAyMTgsIDc0LCAKLSAgICAxLCAyMDUsIDYzLCAyMTgsIDc0LCAxLCAyMzMsIDE0MSwgNjMsIDIxOCwgNzQsIDEsIDIyMCwgMTA0LCA2MywgMjE4LCA3NCwgCi0gICAgMSwgMjE4LCAyMjUsIDYzLCAyMTgsIDc0LCAxLCAyMDYsIDYzLCAyMTgsIDc0LCAxLCAxNjIsIDYzLCAyMTgsIDc0LCAxLCAKLSAgICA2MSwgNjMsIDIxOCwgNzQsIDEsIDIzMywgMjM3LCA2MywgMjE4LCA3NCwgMSwgMjQ0LCA4NSwgMjEyLCA2NSwgNjMsIDIxOCwgCi0gICAgNzQsIDEsIDI0NCwgODUsIDE5MiwgNjMsIDIxOCwgNzQsIDEsIDI0NCwgODUsIDIwNSwgNjMsIDIzMywgMjI0LCAyMjIsIAotICAgIDE0MywgMjM0LCAxMzgsIDYzLCAyMzMsIDIyNCwgMjIyLCAxNDMsIDIzNCwgMTM5LCAyNTEsIDc3LCAyMzAsIDIwNywgMjUxLCAKLSAgICAxNSwgNjMsIDI1MSwgNCwgNSwgMTE0LCAyNTIsIDc4LCA2MywgMjUxLCA0LCA1LCAxOTMsIDI1MiwgNzgsIDYzLCAyNTEsIDQsIAotICAgIDUsIDI1MSwgNSwgMjE3LCAyMSwgNjMsIDI1MSwgNCwgNSwgMjIxLCAyMDksIDI1NSwgMTc0LCA2MywgMTYsIDI0NiwgOTksIAotICAgIDI1MSwgMTMzLCA2MywgMTYsIDIyMywgMTMyLCAyMjIsIDIyNSwgNjMsIDE2LCAyMjYsIDgxLCAyNDMsIDcwLCA2MywgMTYsIAotICAgIDIyMywgMTMyLCAyMjIsIDIyNiwgMjIzLCA0NSwgMjQyLCAxNTIsIDYzLCAxNiwgMjI1LCAxMTUsIDE5MSwgNjMsIDE2LCAKLSAgICAyMjgsIDY0LCAyNTEsIDEzMywgNjMsIDE2LCAyMjgsIDY0LCAyNTEsIDEzNCwgMjI3LCAxNDMsIDI1NSwgMTcxLCA2MywgMTYsIAotICAgIDIyOCwgNjQsIDI1MSwgMTM0LCAyNDIsIDEyNCwgMjU1LCAxNzEsIDYzLCAxNiwgMjI4LCA2NCwgMjUxLCAxMzQsIDI1MSwgCi0gICAgNzcsIDI1NSwgMTcxLCA2MywgNSwgMjIzLCAxMzMsIDIyOSwgMjI0LCAyMjMsIDEzMywgMjQ3LCAxNjYsIDYzLCA1LCAyMjMsIAotICAgIDEzMywgMjI5LCAyMjQsIDI0MiwgMTIzLCA2MywgMTY0LCAyNTEsIDEzNywgMjIwLCA1LCAyNDIsIDIyMiwgMjMwLCAyNTMsIAotICAgIDIyMywgNDQsIDYzLCAxNjQsIDIzMCwgMTY4LCAyMTEsIDAsIDI0MiwgMjIyLCAyMzAsIDI1MywgMjIzLCA0NCwgNjMsIDE2NCwgCi0gICAgMjI3LCAxNDMsIDIxNSwgMTczLCA2MywgMTY0LCA2NSwgMjUxLCAxNjAsIDIyMiwgMjE1LCAyMTEsIDAsIDIzMCwgMjUzLCAKLSAgICAyMzEsIDk4LCAxODYsIDYzLCAxNjQsIDI1MCwgNCwgMjUxLCAxNjAsIDIyMiwgMjE1LCAyMTEsIDAsIDIzMCwgMjUzLCAyMjAsIAotICAgIDExMSwgMTg2LCAyMjIsIDI1MywgMjE4LCAwLCA1MCwgMjMzLCA1MSwgMjE4LCAwLCA1MCwgMjIyLCAyNTMsIDIxOCwgMCwgNSwgCi0gICAgMiwgMjQ3LCAxMjYsIDIzMywgNTEsIDIxOCwgMCwgNSwgMiwgMjQ3LCAxMjYsIDYzLCAxNjQsIDIzMywgNjEsIDIzMSwgMTAxLCAKLSAgICAyMjIsIDE0NSwgNjMsIDE2NCwgMjE1LCAyNTEsIDIzMSwgMTAxLCAyMjIsIDE0NSwgNjgsIDEsIDE3NiwgNjgsIDEsIDIzNCwgCi0gICAgMTM4LCA2OCwgMSwgMjQzLCAxNDIsIDY4LCAxLCAyNDMsIDAsIDY4LCAxLCAyMjksIDgyLCA2OCwgMSwgMjUxLCA0MSwgNjgsIAotICAgIDEsIDI1MCwgMTY1LCA2OCwgMSwgMjM1LCAxNDcsIDY4LCAxLCAyMzUsIDEyMCwgNjgsIDEsIDIyNywgMTY5LCA2OCwgMSwgCi0gICAgMjI4LCA4MSwgNjgsIDEsIDIxNSwgMTU3LCA2OCwgMSwgMjE1LCAxNDUsIDY4LCAxLCAyNDgsIDE0MywgNjgsIDEsIDI0OCwgCi0gICAgMTI3LCA2OCwgMSwgMjI4LCAxMTUsIDY4LCAxLCAyMTcsIDEwNiwgNjgsIDEsIDIxNiwgMjA5LCA2OCwgMSwgMjQ4LCAyMjksIAotICAgIDY4LCAxLCAyNDgsIDMzLCA2OCwgMSwgMTk4LCA2OCwgMSwgMTkxLCA2OCwgMSwgMjI1LCAxNTAsIDY4LCAxLCAyNTIsIDE5OSwgCi0gICAgNjgsIDEsIDI1MiwgMjYsIDY4LCAxLCAxODYsIDY4LCAxLCAxOTIsIDY4LCAxLCAyMDUsIDY4LCAxLCAyMzMsIDE0MSwgNjgsIAotICAgIDEsIDIxMiwgNjUsIDY4LCAxLCAyMDYsIDY4LCAxLCAxNjIsIDY4LCAxLCAyMzIsIDE5MCwgNjgsIDEsIDYxLCA2OCwgMSwgCi0gICAgMjIwLCA4OCwgNjEsIDY4LCAxLCA3NCwgNjgsIDEsIDIzNiwgNDAsIDY4LCAxLCA2OSwgNjgsIDEsIDIxNCwgMTE4LCA2OCwgCi0gICAgMSwgNzYsIDY4LCAxLCAyMzAsIDE1NiwgNzYsIDY4LCAxLCA3OCwgNjgsIDEsIDI1MywgMjAwLCA2OCwgMjUsIDUsIDIxNywgCi0gICAgNjUsIDI1NSwgODIsIDY4LCAyNSwgNSwgMjU1LCA4MiwgNjgsIDI1LCA1LCA3NCwgNjgsIDI1LCA1LCAyMzYsIDQwLCA2OCwgCi0gICAgMjUsIDUsIDY5LCA2OCwgMjUsIDUsIDIxNCwgMTE4LCA2OCwgMjUsIDUsIDc2LCA2OCwgMjUsIDUsIDI1NCwgMjEwLCA2OCwgCi0gICAgMjUsIDUsIDIzMCwgMTU2LCAyMzYsIDQwLCA2OCwgMjUsIDUsIDIzMCwgMTU2LCA3OCwgNjgsIDI1LCA1LCAxNjAsIDQ4LCAKLSAgICA2OCwgNSwgMjU0LCA4MywgNjgsIDUsIDU5LCA1MSwgNjgsIDUsIDIxMywgMTQ3LCA2OCwgNSwgMjEzLCAxNTIsIDY4LCA1LCAKLSAgICAyNTMsIDI0MywgNjgsIDExNywgNSwgMTQ3LCAxOTIsIDY4LCAxMTcsIDUsIDE0NywgMjA1LCA2OCwgMTE3LCA1LCAxNDcsIAotICAgIDIxMiwgNjUsIDY4LCAxMTcsIDUsIDE0NywgMTYyLCA2OCwgMSwgMjQyLCAxMzksIDIwNiwgNjgsIDIxLCAyMTAsIDg2LCA2OCwgCi0gICAgMjEsIDExMSwgNjgsIDIxLCAxMDUsIDY4LCAyMSwgMTU4LCA2OCwgMjEsIDE2MSwgNjgsIDIxLCAxOTAsIDY4LCAyMSwgMTk1LCAKLSAgICA2OCwgMjEsIDE5OSwgNjgsIDIxLCAxOTYsIDY4LCAyMSwgMjAxLCA2OCwgNSwgMjMyLCAxOTgsIDIyMSwgMTc0LCA2OCwgNSwgCi0gICAgMjIxLCAxNzQsIDY4LCAxNiwgMjMyLCAxNTksIDY4LCAxNiwgMjQ5LCAyMjEsIDY4LCAxNiwgMjU0LCAyMjksIDY4LCAxNiwgCi0gICAgMjQzLCA1NSwgNjgsIDEsIDIyMCwgMTA0LCA2OCwgMSwgMjE4LCAyMjUsIDY4LCAxLCAxNDksIDE1MywgNjgsIDEsIDE0OSwgCi0gICAgMjIyLCAxODIsIDY4LCAxLCAxNDksIDE1NiwgNjgsIDEsIDE0OSwgMjMyLCAxOTEsIDY4LCAyNSwgNSwgMTQ5LCAxNTMsIDY4LCAKLSAgICAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgNjgsIDI1LCA1LCAxNDksIDE1NiwgNjgsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA2OCwgCi0gICAgMSwgMjMwLCAxNTYsIDIyOSwgODIsIDY4LCAxLCAyMzAsIDE1NiwgMjM1LCAxMjAsIDY4LCAxLCAyMzAsIDE1NiwgMjUyLCAKLSAgICAxMTksIDY4LCAxLCAyMzAsIDE1NiwgMjUyLCAxMTQsIDY4LCAxMTcsIDUsIDIzMCwgMTU2LCAxNDcsIDE5OCwgNjgsIDExNywgCi0gICAgNSwgMjMwLCAxNTYsIDE0NywgMTg2LCA2OCwgMTE3LCA1LCAyMzAsIDE1NiwgMTQ3LCAyMzMsIDE0MSwgNjgsIDEsIDIyMCwgCi0gICAgMTEwLCAyMzQsIDIxOSwgMjIwLCAxMDQsIDY4LCAyNSwgNSwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyNDUsIDYzLCA2OCwgMTM4LCAKLSAgICAxNjQsIDIyMCwgMTEwLCAyMzQsIDIxOSwgMjQxLCAyNTQsIDY4LCAxMzgsIDE2NCwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyMzQsIAotICAgIDE4OSwgMjI1LCAxMjQsIDY4LCAxLCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyMDksIDY4LCAxLCAyMTIsIAotICAgIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjI0LCAxMTcsIDY4LCAyNSwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIAotICAgIDI0NSwgNjMsIDY4LCAyNSwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNCwgMjE0LCA2OCwgNSwgMjEyLCA3LCAKLSAgICAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMzAsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyOSwgCi0gICAgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI4LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAKLSAgICAyMTksIDIxNiwgMjcsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyNiwgNjgsIDEsIDI0NSwgCi0gICAgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIyOCwgMTE1LCA2OCwgMSwgMjQ1LCAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgCi0gICAgMjEwLCAxNzYsIDY4LCAxLCAyNDUsIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyNDIsIDIyNCwgNjgsIDI1LCA1LCAyNDMsIAotICAgIDY2LCAyMzQsIDIxOSwgNzQsIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDIyNiwgMjM4LCA2OCwgMjUsIDUsIDIzNCwgMTk0LCA2OSwgCi0gICAgNjgsIDI1LCA1LCAyMzQsIDE5NCwgMjQ1LCAyMTcsIDY4LCAxLCAyMjAsIDg4LCAxNzYsIDY4LCAxLCAyMjAsIDg4LCAyMzQsIAotICAgIDEzOCwgNjgsIDEsIDIyMCwgODgsIDI0MywgMTQyLCA2OCwgMSwgMjIwLCA4OCwgMjUxLCA0MSwgNjgsIDEsIDIyMCwgODgsIAotICAgIDIxMCwgMTE2LCA2OCwgMSwgMjIwLCA4OCwgMjI3LCAxNjksIDY4LCAxLCAyMjAsIDg4LCAyNDgsIDIyOSwgNjgsIDEsIDIyMCwgCi0gICAgODgsIDE5OCwgNjgsIDEsIDIyMCwgODgsIDIyNSwgMTUwLCA2OCwgMSwgMjIwLCA4OCwgMjQ0LCAyMDQsIDY4LCAxLCAyMjAsIAotICAgIDg4LCAyNTIsIDE5OSwgNjgsIDEsIDIyMCwgODgsIDIxNiwgMjA5LCA2OCwgMSwgMjIwLCA4OCwgMTYyLCA2OCwgMTE3LCA1LCAKLSAgICAyMjAsIDg4LCAxNDcsIDIxMiwgNjUsIDY4LCAyNSwgNSwgMjIwLCA4OCwgMjU1LCA4MiwgNjgsIDI1LCA1LCAyMjAsIDg4LCAKLSAgICA3NiwgNjgsIDI1LCA1LCAyMjAsIDg4LCAxNjAsIDQ4LCA2OCwgMjUsIDUsIDIyMCwgODgsIDQwLCAyMTEsIDExNywgNjgsIDUsIAotICAgIDIyMCwgODgsIDIxNiwgMjksIDY4LCA1LCAyMjAsIDg4LCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4OCwgMjE2LCAyNiwgNjgsIAotICAgIDUsIDIyMCwgODgsIDIxNiwgMjUsIDY4LCA1LCAyMjAsIDg4LCAyNDksIDE2MCwgMjE2LCAyOSwgNjgsIDUsIDIyMCwgODgsIAotICAgIDI0OSwgMTYwLCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4OCwgMjQ5LCAxNjAsIDI0NSwgMTYxLCAyMTYsIDMxLCA2OCwgMSwgCi0gICAgMjIyLCAxMzAsIDIyNiwgNjcsIDI0NCwgMjA0LCA2OCwgNSwgMjIyLCAxMzAsIDIyNiwgNjcsIDIxNiwgMjYsIDY4LCAyMjAsIAotICAgIDg4LCAyMSwgMjEwLCA4NiwgNjgsIDIyMCwgODgsIDIxLCAxMTEsIDY4LCAyMjAsIDg4LCAyMSwgMTA1LCA2OCwgMjIwLCA4OCwgCi0gICAgMjEsIDE1OCwgNjgsIDIyMCwgODgsIDIxLCAxNjEsIDY4LCAyMjAsIDg4LCAyMSwgMTkwLCA2OCwgMjIwLCA4OCwgMjEsIAotICAgIDE5NSwgNjgsIDIyMCwgODgsIDIxLCAxOTksIDY4LCAyMjAsIDg4LCAyMSwgMTk2LCA2OCwgMjIwLCA4OCwgMjEsIDIwMSwgCi0gICAgNjgsIDUsIDIzNCwgMTMyLCAyMTYsIDMwLCA2OCwgNSwgMjM0LCAxMzIsIDIxNiwgMjgsIDY4LCAyNSwgNSwgMjU0LCAxOTksIAotICAgIDYxLCA2OCwgMjUsIDUsIDI1NCwgMTk5LCAyNTQsIDIxMCwgNjgsIDE2LCAyMjAsIDg4LCAxMTEsIDY4LCAxNiwgMjIwLCA4OCwgCi0gICAgMjQ1LCAzOCwgOTgsIDYsIDEsIDI1NCwgMTMxLCA5OCwgNiwgMSwgMjUyLCAxNjAsIDk4LCA2LCAxLCAyNDMsIDExMywgOTgsIAotICAgIDYsIDEsIDI0NywgMTM2LCA5OCwgNiwgMSwgMjQ1LCAxNTgsIDk4LCA2LCAxLCAyMTMsIDE2MCwgOTgsIDYsIDEsIDIxMCwgCi0gICAgODksIDk4LCA2LCAxLCAyMTcsIDYxLCA5OCwgNiwgMSwgMjM2LCA2LCA5OCwgNiwgMSwgMjM0LCAyNDAsIDk4LCA2LCAxLCAKLSAgICAyMzMsIDg3LCA5OCwgNiwgMSwgMjMxLCAxOTAsIDk4LCA2LCAxLCAyMjksIDIwMCwgOTgsIDYsIDEsIDIyNiwgMjAwLCA5OCwgCi0gICAgNiwgMSwgMjI2LCAyMSwgOTgsIDYsIDEsIDIxMCwgNzgsIDk4LCA2LCAxLCAyMjMsIDE3NCwgOTgsIDYsIDEsIDIyMSwgMjQ1LCAKLSAgICA5OCwgNiwgMSwgMjE3LCA1MSwgOTgsIDYsIDEsIDIxNCwgMTkwLCA5OCwgNiwgMSwgMjI1LCAxNDMsIDk4LCA2LCAxLCAyMzQsIAotICAgIDEyNywgOTgsIDYsIDEsIDI0MiwgMjQ4LCA5OCwgNiwgMSwgMjI0LCA3NiwgOTgsIDYsIDEsIDIyMCwgMjIsIDk4LCA2LCAxLCAKLSAgICAyNTAsIDEwNSwgOTgsIDYsIDEsIDI1MSwgMTUsIDk4LCA2LCAxLCAyMzUsIDEwNiwgOTgsIDYsIDEsIDI1MCwgNDgsIDk4LCAKLSAgICA2LCAxLCAyNTAsIDE1MSwgOTgsIDYsIDEsIDIxMSwgMTYzLCA5OCwgNiwgMSwgMjM1LCAxMTcsIDk4LCA2LCAxLCAyNDIsIAotICAgIDUwLCA5OCwgNiwgMSwgMjQxLCAyNDUsIDk4LCA2LCAxLCAyNDEsIDE4MiwgOTgsIDYsIDEsIDIxMiwgMjIsIDk4LCA2LCAxLCAKLSAgICAyNDIsIDExLCA5OCwgNiwgMSwgMjQxLCA3MiwgOTgsIDYsIDEsIDIxMCwgMjQ2LCA5OCwgNiwgMSwgMjU0LCAyNDEsIDk4LCAKLSAgICAxLCAyNTQsIDEzMSwgOTgsIDEsIDI1MiwgMTYwLCA5OCwgMSwgMjQzLCAxMTMsIDk4LCAxLCAyNDcsIDEzNiwgOTgsIDEsIAotICAgIDI0NSwgMTU4LCA5OCwgMSwgMjEzLCAxNjAsIDk4LCAxLCAyMTAsIDg5LCA5OCwgMSwgMjE3LCA2MSwgOTgsIDEsIDIzNiwgNiwgCi0gICAgOTgsIDEsIDIzNCwgMjQwLCA5OCwgMSwgMjMzLCA4NywgOTgsIDEsIDIzMSwgMTkwLCA5OCwgMSwgMjI5LCAyMDAsIDk4LCAxLCAKLSAgICAyMjYsIDIwMCwgOTgsIDEsIDIyNiwgMjEsIDk4LCAxLCAyMTAsIDc4LCA5OCwgMSwgMjIzLCAxNzQsIDk4LCAxLCAyMjEsIAotICAgIDI0NSwgOTgsIDEsIDIxNywgNTEsIDk4LCAxLCAyMTQsIDE5MCwgOTgsIDEsIDIyNSwgMTQzLCA5OCwgMSwgMjM0LCAxMjcsIAotICAgIDk4LCAxLCAyNDIsIDI0OCwgOTgsIDEsIDIyNCwgNzYsIDk4LCAxLCAyMjAsIDIyLCA5OCwgMSwgMjUwLCAxMDUsIDk4LCAxLCAKLSAgICAyNTEsIDE1LCA5OCwgMSwgMjM1LCAxMDYsIDk4LCAxLCAyNTAsIDQ4LCA5OCwgMSwgMjUwLCAxNTEsIDk4LCAxLCAyMTEsIAotICAgIDE2MywgOTgsIDEsIDIzNSwgMTE3LCA5OCwgMSwgMjQyLCA1MCwgOTgsIDEsIDI0MSwgMjQ1LCA5OCwgMSwgMjQxLCAxODIsIAotICAgIDk4LCAxLCAyMTIsIDIyLCA5OCwgMSwgMjQyLCAxMSwgOTgsIDEsIDI0MSwgNzIsIDk4LCAxLCAyNDQsIDEyOSwgOTgsIDEsIAotICAgIDIxMCwgMjQ2LCA5OCwgMSwgMjQ1LCAxNzMsIDk4LCAxLCAyMTUsIDk0LCAyNDMsIDExMywgOTgsIDEsIDI1NCwgMjA1LCA5OCwgCi0gICAgMjI2LCAxOSwgMjIwLCAxMzksIDU4LCAxLCA5OCwgMjI5LCAyMDAsIDk4LCAxLCAyNTQsIDI0MSwgOTgsIDEsIDI0MiwgMTAsIAotICAgIDUwLCA5OCwgMSwgMjMzLCAxMzMsIDUwLCAyNCwgMTAwLCAyMzQsIDY0LCAyNCwgMTAwLCAyMTgsIDIxNywgMjQsIDEwMCwgCi0gICAgMjI4LCAyMzEsIDI0LCAxMDAsIDIxNiwgMTAyLCAyNCwgMTAwLCAyMTgsIDIwNiwgMjQsIDEwMCwgMjIzLCAyOSwgMjQsIAotICAgIDEwMCwgMjMwLCAyMjIsIDI0LCAxMDAsIDIyNSwgOTgsIDI0LCAxMDAsIDIxOCwgMjE0LCAyNCwgMTAwLCAyMTksIDE1MCwgCi0gICAgMjQsIDEwMCwgMjE4LCAyMTEsIDI0LCAxMDAsIDIzNiwgNjMsIDI0LCAxMDAsIDI1MCwgNTQsIDI0LCAxMDAsIDIxOCwgMjIxLCAKLSAgICAyNCwgMTAwLCAyNTAsIDExNCwgMjQsIDEwMCwgMjM0LCAxMTYsIDI0LCAxMDAsIDIxNiwgMTc0LCAyNCwgMTAwLCAyMjUsIAotICAgIDEzNCwgMjQsIDEwMCwgMjQxLCAxNzksIDI0LCAxMDAsIDIyOCwgMjI3LCAyNCwgMTAwLCAyMTgsIDIxNSwgMjQsIDEwMCwgCi0gICAgMjI4LCAyMjEsIDI0LCAxMDAsIDIyOCwgMjI1LCAyNCwgMTAwLCAyMTYsIDk5LCAyNCwgMTAwLCAyMjMsIDE3LCAyNCwgMTAwLCAKLSAgICAyMTgsIDIxMywgMjQsIDEwMCwgMjIzLCAyNywgMjQsIDEwMCwgMjM0LCAyMjQsIDI0LCAxMDAsIDIzMCwgMjE1LCAyNCwgCi0gICAgMTAwLCAyMzQsIDIyNywgMjQsIDEwMCwgMjI1LCA5MywgMjQsIDEwMCwgMjI1LCA5MSwgMjQsIDEwMCwgMjI1LCA3OSwgMjQsIAotICAgIDEwMCwgMjI1LCA4NywgMjQsIDEwMCwgMjI1LCA4NSwgMjQsIDEwMCwgMjI1LCA4MiwgMjQsIDEwMCwgMjI1LCA4NCwgMjQsIAotICAgIDEwMCwgMjI1LCA4MSwgMjQsIDEwMCwgMjI1LCA4NiwgMjQsIDEwMCwgMjI1LCA5NiwgMjQsIDEwMCwgMjI1LCA5NywgMjQsIAotICAgIDEwMCwgMjI1LCA4MCwgMjQsIDEwMCwgMjI1LCA5MCwgMjQsIDEwMCwgMjM0LCAyMjUsIDI0LCAxMDAsIDIzNCwgMjIzLCAyNCwgCi0gICAgMTAwLCAyMTksIDE0MywgMjQsIDEwMCwgMjE5LCAxNDEsIDI0LCAxMDAsIDIxOSwgMTMzLCAyNCwgMTAwLCAyMTksIDEzNiwgCi0gICAgMjQsIDEwMCwgMjE5LCAxNDIsIDI0LCAxMDAsIDIxOSwgMTM4LCAyNCwgMTAwLCAyMTksIDEzNywgMjQsIDEwMCwgMjE5LCAKLSAgICAxMzUsIDI0LCAxMDAsIDIxOSwgMTQ2LCAyNCwgMTAwLCAyMTksIDE0OCwgMjQsIDEwMCwgMjE5LCAxNDksIDI0LCAxMDAsIAotICAgIDIxOSwgMTQ0LCAyNCwgMTAwLCAyMTksIDEzNCwgMjQsIDEwMCwgMjE5LCAxMzksIDI0LCAxMDAsIDIxOSwgMTQ3LCAyNCwgCi0gICAgMTAwLCAyNTAsIDk4LCAyNCwgMTAwLCAyNTAsIDk2LCAyNCwgMTAwLCAyNTAsIDE3NiwgMjQsIDEwMCwgMjUwLCAxNzQsIDI0LCAKLSAgICAxMDAsIDIyNiwgMzYsIDI0LCAxMDAsIDIzNiwgNTgsIDI0LCAxMDAsIDIzNiwgNDksIDI0LCAxMDAsIDIzNiwgNTcsIDI0LCAKLSAgICAxMDAsIDIzNiwgNTQsIDI0LCAxMDAsIDIzNiwgNTIsIDI0LCAxMDAsIDIzNiwgNTYsIDI0LCAxMDAsIDIxOCwgMjE4LCAyNCwgCi0gICAgMTAwLCAyMzYsIDYxLCAyNCwgMTAwLCAyMzYsIDYyLCAyNCwgMTAwLCAyMzYsIDUwLCAyNCwgMTAwLCAyMzYsIDU1LCAyNCwgCi0gICAgMTAwLCAyMTEsIDI2LCAyNCwgMTAwLCAyNTAsIDUzLCAyNCwgMTAwLCAyNTAsIDk5LCAyNCwgMTAwLCAyNTAsIDk3LCAyNCwgCi0gICAgMTAwLCAyNTAsIDE3NywgMjQsIDEwMCwgMjUwLCAxNzUsIDI0LCAxMDAsIDI1MCwgMTEyLCAyNCwgMTAwLCAyNTAsIDExMywgCi0gICAgMjQsIDEwMCwgMjUwLCAxMDAsIDI0LCAxMDAsIDI1MCwgMTc4LCAyNCwgMTAwLCAyMjUsIDEzMiwgMjQsIDEwMCwgMjM0LCAKLSAgICAyMjYsIDI0LCAxMDAsIDIxOCwgMjE5LCAyNCwgMTAwLCAyMTEsIDMyLCAyNCwgMTAwLCAyMzQsIDU1LCAyNCwgMTAwLCAyMjgsIAotICAgIDIyMywgMjQsIDEwMCwgMjI4LCAyMjksIDI0LCAxMDAsIDIyOCwgMjI4LCAyNCwgMTAwLCAyMTYsIDk2LCAyNCwgMTAwLCAKLSAgICAyNDQsIDExMSwgMjQsIDE0MywgMjQ0LCAxMTEsIDI0LCAxNDMsIDYxLCAyNCwgMTQzLCAyNTQsIDI1MiwgMjQsIDE0MywgCi0gICAgMTkyLCAyNCwgMTQzLCAyMTEsIDkyLCAyNCwgMTQzLCAyNDUsIDEyNSwgMjQsIDE0MywgNzYsIDI0LCAxNDMsIDIxMSwgMzYsIAotICAgIDI0LCAxNDMsIDIxMSwgNDcsIDI0LCAxNDMsIDc4LCAyNCwgMTQzLCAyMTIsIDY1LCAyNCwgMTQzLCAyMTIsIDYyLCAyNCwgCi0gICAgMTQzLCAyMjYsIDIzOCwgMjQsIDE0MywgMjEwLCAyNDQsIDI0LCAxNDMsIDY5LCAyNCwgMTQzLCAyMTIsIDExLCAyNCwgMTQzLCAKLSAgICAyMTIsIDIyLCAyNCwgMTQzLCAyMTEsIDI1MCwgMjQsIDE0MywgMjEwLCAyMTIsIDI0LCAxNDMsIDI0NSwgNjMsIDI0LCAxNDMsIAotICAgIDIxMSwgOCwgMjQsIDE0MywgNzQsIDI0LCAxNDMsIDI1NSwgMTY2LCAyNCwgMTQzLCAyNTUsIDE2NSwgMjQsIDE0MywgMjExLCAKLSAgICAxMDYsIDI0LCAxNDMsIDIxMSwgMTA0LCAyNCwgMTQzLCAyNDUsIDEyMywgMjQsIDE0MywgMjQ1LCAxMjIsIDI0LCAxNDMsIAotICAgIDI0NSwgMTI0LCAyNCwgMTQzLCAyMTEsIDM1LCAyNCwgMTQzLCAyMTEsIDM0LCAyNCwgMTQzLCAyMjcsIDg4LCAyNCwgMTQzLCAKLSAgICAyMjcsIDg5LCAyNCwgMTQzLCAyMjcsIDgyLCAyNCwgMTQzLCAyMjcsIDg3LCAyNCwgMTQzLCAyMjcsIDg1LCAyNCwgMTQzLCAKLSAgICAyMTAsIDIzOCwgMjQsIDE0MywgMjEwLCAyMzcsIDI0LCAxNDMsIDIxMCwgMjM2LCAyNCwgMTQzLCAyMTAsIDIzOSwgMjQsIAotICAgIDE0MywgMjEwLCAyNDAsIDI0LCAxNDMsIDIxNSwgMzAsIDI0LCAxNDMsIDIxNSwgMjksIDI0LCAxNDMsIDIxNSwgMjcsIDI0LCAKLSAgICAxNDMsIDIxNSwgMjQsIDI0LCAxNDMsIDIxNSwgMjUsIDI0LCAxNDMsIDIxMCwgMjExLCAyNCwgMTQzLCAyMTAsIDIwOCwgMjQsIAotICAgIDE0MywgMjEwLCAyMDksIDI0LCAxNDMsIDIxMCwgMjAzLCAyNCwgMTQzLCAyMTAsIDIwNCwgMjQsIDE0MywgMjEwLCAyMDUsIAotICAgIDI0LCAxNDMsIDIxMCwgMjA3LCAyNCwgMTQzLCAyNDUsIDU3LCAyNCwgMTQzLCAyNDUsIDU5LCAyNCwgMTQzLCAyMTEsIDcsIAotICAgIDI0LCAxNDMsIDI0MCwgMTYwLCAyNCwgMTQzLCAyNDAsIDE1MiwgMjQsIDE0MywgMjQwLCAxNTUsIDI0LCAxNDMsIDI0MCwgCi0gICAgMTUzLCAyNCwgMTQzLCAyNDAsIDE1NywgMjQsIDE0MywgMjQwLCAxNTksIDI0LCAxNDMsIDI1NCwgNDIsIDI0LCAxNDMsIAotICAgIDI1NCwgMzksIDI0LCAxNDMsIDI1NCwgMzcsIDI0LCAxNDMsIDI1NCwgMzgsIDI0LCAxNDMsIDIxOCwgMjIyLCAyNCwgMTQzLCAKLSAgICAyNTUsIDE2NywgMjQsIDE0MywgMjExLCAxMDUsIDI0LCAxNDMsIDIxMSwgMzMsIDI0LCAxNDMsIDIyNywgODQsIDI0LCAxNDMsIAotICAgIDIyNywgODMsIDI0LCA5MCwgMjM0LCA2NCwgMjQsIDkwLCAyMTgsIDIxNywgMjQsIDkwLCAyMzQsIDU3LCAyNCwgOTAsIDIyOCwgCi0gICAgMjMxLCAyNCwgOTAsIDIyOCwgMjI5LCAyNCwgOTAsIDIyOCwgMjI4LCAyNCwgOTAsIDIxNiwgMTAyLCAyNCwgOTAsIDIyMywgCi0gICAgMjksIDI0LCA5MCwgMjIzLCAyNCwgMjQsIDkwLCAyMjMsIDIxLCAyNCwgOTAsIDIyMywgMTQsIDI0LCA5MCwgMjIzLCA5LCAKLSAgICAyNCwgOTAsIDIyMywgNCwgMjQsIDkwLCAyMjMsIDE1LCAyNCwgOTAsIDIyMywgMjcsIDI0LCA5MCwgMjMwLCAyMjIsIDI0LCAKLSAgICA5MCwgMjI1LCA5OCwgMjQsIDkwLCAyMjUsIDg3LCAyNCwgOTAsIDIxOSwgMTUwLCAyNCwgOTAsIDIxOCwgMjExLCAyNCwgOTAsIAotICAgIDIzNiwgNjMsIDI0LCA5MCwgMjUwLCA1NCwgMjQsIDkwLCAyNTAsIDExNCwgMjQsIDkwLCAyMzQsIDExNiwgMjQsIDkwLCAKLSAgICAyMTYsIDE3NCwgMjQsIDkwLCAyMjUsIDEzNCwgMjQsIDkwLCAyNDEsIDE3OSwgMjQsIDkwLCAyMzQsIDU4LCAyNCwgOTAsIAotICAgIDIzNCwgNTYsIDI0LCA5MCwgMjI4LCAyMjcsIDI0LCA5MCwgMjI4LCAyMjEsIDI0LCA5MCwgMjI4LCAyMjMsIDI0LCA5MCwgCi0gICAgMjI4LCAyMjYsIDI0LCA5MCwgMjI4LCAyMjIsIDI0LCA5MCwgMjE2LCA5OSwgMjQsIDkwLCAyMTYsIDk2LCAyNCwgOTAsIAotICAgIDIyMywgMjIsIDI0LCA5MCwgMjIzLCAxNywgMjQsIDkwLCAyMjMsIDMsIDI0LCA5MCwgMjIzLCAyLCAyNCwgOTAsIDIxOCwgCi0gICAgMjEzLCAyNCwgOTAsIDIyMywgMTksIDI0LCA5MCwgMjIzLCAxOCwgMjQsIDkwLCAyMjMsIDExLCAyNCwgOTAsIDIyMywgMTMsIAotICAgIDI0LCA5MCwgMjIzLCAyNiwgMjQsIDkwLCAyMjMsIDYsIDI0LCA5MCwgMjIzLCAxNiwgMjQsIDkwLCAyMjMsIDI1LCAyNCwgCi0gICAgOTAsIDIyMywgMSwgMjQsIDkwLCAyMzAsIDIxOCwgMjQsIDkwLCAyMzAsIDIxMywgMjQsIDkwLCAyMzAsIDIxNSwgMjQsIDkwLCAKLSAgICAyMzAsIDIxMiwgMjQsIDkwLCAyMzAsIDIxMCwgMjQsIDkwLCAyMzAsIDIxNiwgMjQsIDkwLCAyMzAsIDIyMSwgMjQsIDkwLCAKLSAgICAyMzAsIDIxOSwgMjQsIDkwLCAyMzQsIDIyNywgMjQsIDkwLCAyMjUsIDg5LCAyNCwgOTAsIDIyNSwgOTAsIDI0LCA5MCwgCi0gICAgMjI1LCA5NSwgMjQsIDkwLCAyMzQsIDIyNSwgMjQsIDkwLCAyMTksIDE0MywgMjQsIDkwLCAyMTksIDEzMywgMjQsIDkwLCAKLSAgICAyMTksIDEzNiwgMjQsIDkwLCAyMTksIDEzOCwgMjQsIDkwLCAyMjYsIDM2LCAyNCwgOTAsIDIzNiwgNTgsIDI0LCA5MCwgCi0gICAgMjM2LCA1MSwgMjQsIDkwLCAyMTgsIDIxOCwgMjQsIDkwLCAyMzYsIDU5LCAyNCwgOTAsIDIxMSwgMjYsIDI0LCA5MCwgMjExLCAKLSAgICAyMiwgMjQsIDkwLCAyMTEsIDIzLCAyNCwgOTAsIDIyNSwgMTMyLCAyNCwgOTAsIDIzNCwgMjI2LCAyNCwgOTAsIDI0MSwgCi0gICAgMTc3LCAyNCwgOTAsIDI0MSwgMTc1LCAyNCwgOTAsIDI0MSwgMTc4LCAyNCwgOTAsIDI0MSwgMTc2LCAyNCwgOTAsIDIxMSwgCi0gICAgMzIsIDI0LCA5MCwgMjM0LCA2MCwgMjQsIDkwLCAyMzQsIDU5LCAyNCwgOTAsIDIzNCwgNjMsIDI0LCA5MCwgMjM0LCA2MSwgCi0gICAgMjQsIDkwLCAyMzQsIDYyLCAyNCwgOTAsIDIxOCwgMjE1LCAyOSwgMywgMTYyLCAyOSwgMywgMjQwLCAyMjksIDI5LCAzLCAKLSAgICAyNDEsIDE4NywgMjksIDMsIDI0MiwgNTMsIDI5LCAzLCAyNDEsIDIyNywgMjksIDMsIDI0MSwgMjQ1LCAyOSwgMywgMjQxLCAKLSAgICA3NSwgMjksIDMsIDI0MSwgNzQsIDI5LCAzLCAyMzMsIDE0MSwgMjksIDMsIDIzMiwgMTAzLCAyOSwgMywgMjMyLCAyNDcsIAotICAgIDI5LCAzLCAyMzMsIDE0MCwgMjksIDMsIDIzMywgNTYsIDI5LCAzLCAyMzMsIDY0LCAyOSwgMywgMjMyLCAxNjIsIDI5LCAzLCAKLSAgICAyMzIsIDc1LCAyOSwgMywgMjQxLCAxOTYsIDI5LCAzLCAyNDEsIDE5MCwgMjksIDMsIDI0MSwgMTkyLCAyOSwgMywgMjQxLCAKLSAgICAxOTUsIDI5LCAzLCAyNDEsIDE5MywgMjksIDMsIDI0MSwgMTk0LCAyOSwgMywgMjQxLCAxOTEsIDI5LCAzLCAyNDEsIDE4OSwgCi0gICAgMjksIDMsIDE4NiwgMjksIDMsIDIzMCwgMTA3LCAyOSwgMywgMjMwLCAyMzUsIDI5LCAzLCAyMzEsIDI0MiwgMjksIDMsIAotICAgIDIzMSwgODUsIDI5LCAzLCAyMzEsIDk2LCAyOSwgMywgMjMwLCAxNjYsIDI5LCAzLCAyMzAsIDQ3LCAyOSwgMywgMjE3LCAKLSAgICAxNjQsIDI5LCAzLCAyMTcsIDE1OCwgMjksIDMsIDIxNywgMTYwLCAyOSwgMywgMjE3LCAxNjMsIDI5LCAzLCAyMTcsIDE2MSwgCi0gICAgMjksIDMsIDIxNywgMTYyLCAyOSwgMywgMjE3LCAxNTksIDI5LCAzLCAyMTcsIDE1NywgMjksIDMsIDIwNSwgMjksIDMsIAotICAgIDIyMiwgMTQyLCAyOSwgMywgMjIzLCAzOCwgMjksIDMsIDIyMywgMTg3LCAyOSwgMywgMjIzLCAxMTEsIDI5LCAzLCAyMjMsIAotICAgIDEzMSwgMjksIDMsIDIyMiwgMjEzLCAyOSwgMywgMjIyLCAxMTEsIDI5LCAzLCAyMDYsIDI5LCAzLCAyMTgsIDg0LCAyOSwgMywgCi0gICAgMjE5LCAxOTMsIDI5LCAzLCAyMjIsIDMzLCAyOSwgMywgMjIxLCAxNzIsIDI5LCAzLCAyMjEsIDE4MywgMjksIDMsIDIxOSwgCi0gICAgNjAsIDI5LCAzLCAyMTcsIDI1NCwgMjksIDMsIDIyMCwgMTA0LCAyOSwgMywgMjE5LCAyMjcsIDI5LCAzLCAyMjAsIDM0LCAKLSAgICAyOSwgMywgMjIwLCAxMDAsIDI5LCAzLCAyMjAsIDYzLCAyOSwgMywgMjIwLCA2NSwgMjksIDMsIDIyMCwgOSwgMjksIDMsIAotICAgIDIxOSwgMjEwLCAyOSwgMywgMjI0LCA5MSwgMjksIDMsIDIyNCwgMzMsIDI5LCAzLCAyMjQsIDU2LCAyOSwgMywgMjI0LCA5MCwgCi0gICAgMjksIDMsIDIyNCwgNzEsIDI5LCAzLCAyMjQsIDcyLCAyOSwgMywgMjI0LCA0NSwgMjksIDMsIDIyNCwgNDQsIDI5LCAzLCAKLSAgICAyMjMsIDI0NSwgMjksIDMsIDIyMywgMjQxLCAyOSwgMywgMjIzLCAyNDQsIDI5LCAzLCAyMjMsIDI0MiwgMjksIDMsIDIyMywgCi0gICAgMjQzLCAyOSwgMywgMjI0LCA2OCwgMjksIDMsIDIyNCwgNjIsIDI5LCAzLCAyMjQsIDY0LCAyOSwgMywgMjI0LCA2NywgMjksIAotICAgIDMsIDIyNCwgNjUsIDI5LCAzLCAyMjQsIDY2LCAyOSwgMywgMjI0LCA2MywgMjksIDMsIDIyNCwgNjEsIDI5LCAzLCAyMjQsIAotICAgIDU3LCAyOSwgMywgMjI0LCA2MCwgMjksIDMsIDIyNCwgNTgsIDI5LCAzLCAyMjQsIDU5LCAyOSwgMywgMjUyLCAxOTksIDI5LCAKLSAgICAzLCAyNTEsIDEzMywgMjksIDMsIDI1MiwgMTQsIDI5LCAzLCAyNTIsIDE5NywgMjksIDMsIDI1MiwgNzQsIDI5LCAzLCAyNTIsIAotICAgIDgzLCAyOSwgMywgMjUxLCAyMTMsIDI5LCAzLCAyNTEsIDkxLCAyOSwgMywgMjE0LCAyNywgMjksIDMsIDIxMiwgMTE2LCAyOSwgCi0gICAgMywgMjEzLCAxNzYsIDI5LCAzLCAyMTQsIDI2LCAyOSwgMywgMjEzLCAyNTAsIDI5LCAzLCAyMTMsIDI1NSwgMjksIDMsIAotICAgIDIxMywgMTM4LCAyOSwgMywgMjEyLCAxMDcsIDI5LCAzLCAyMTcsIDEwNiwgMjksIDMsIDIxNSwgMTE5LCAyOSwgMywgMjE2LCAKLSAgICAxMTgsIDI5LCAzLCAyMTcsIDEwMiwgMjksIDMsIDIxNywgMTIsIDI5LCAzLCAyMTcsIDIzLCAyOSwgMywgMTEyLCAyOSwgMywgCi0gICAgMjE1LCA4MCwgMjksIDMsIDI1MSwgNDEsIDI5LCAzLCAyNDksIDEyMCwgMjksIDMsIDI1MCwgNTksIDI5LCAzLCAyNTEsIDQwLCAKLSAgICAyOSwgMywgMjUwLCAxOTAsIDI5LCAzLCAyNTAsIDE5OCwgMjksIDMsIDI0OSwgMjQ2LCAyOSwgMywgMjQ5LCA4OSwgMjksIDMsIAotICAgIDIxMSwgMTY1LCAyOSwgMywgMjExLCAxNDEsIDI5LCAzLCAyMTEsIDE1NywgMjksIDMsIDIxMSwgMTY0LCAyOSwgMywgMjExLCAKLSAgICAxNjEsIDI5LCAzLCAyMTEsIDE2MiwgMjksIDMsIDIxMSwgMTQ4LCAyOSwgMywgMjExLCAxNDcsIDI5LCAzLCAyMTEsIDEzNiwgCi0gICAgMjksIDMsIDIxMSwgMTMyLCAyOSwgMywgMjExLCAxMzUsIDI5LCAzLCAyMTEsIDEzMywgMjksIDMsIDIxMSwgMTM0LCAyOSwgCi0gICAgMywgMTk4LCAyOSwgMywgMjI3LCAyNDIsIDI5LCAzLCAyMjgsIDIzOCwgMjksIDMsIDIyOSwgMjMwLCAyOSwgMywgMjI5LCAKLSAgICAxMDgsIDI5LCAzLCAyMjksIDExMiwgMjksIDMsIDIyOCwgNzksIDI5LCAzLCAyMjcsIDE3OCwgMjksIDMsIDIyNywgMTY5LCAKLSAgICAyOSwgMywgMjI3LCAxMzIsIDI5LCAzLCAyMjcsIDE1MiwgMjksIDMsIDIyNywgMTY4LCAyOSwgMywgMjI3LCAxNTksIDI5LCAKLSAgICAzLCAyMjcsIDE2MCwgMjksIDMsIDIyNywgMTM4LCAyOSwgMywgMjI3LCAxMjMsIDI5LCAzLCAyNDIsIDE4NywgNjEsIDI5LCAKLSAgICAzLCAyNDIsIDE4NywgNjksIDI5LCAzLCAyNDIsIDE4NywgNzQsIDI5LCAzLCAyNDIsIDE4NywgMjU1LCA4MiwgMjksIDMsIAotICAgIDI0MiwgMTg3LCAyNDUsIDIxNywgMjksIDMsIDI0MiwgMTg3LCA3NiwgMjksIDMsIDI0MiwgMTg3LCA3OCwgMjksIDMsIDI0MiwgCi0gICAgMTg3LCAyMTIsIDY1LCAyOSwgMywgMTc2LCAyOSwgMywgMjMzLCAyMjMsIDI5LCAzLCAyMzQsIDk4LCAyOSwgMywgMjM1LCAKLSAgICAxNiwgMjksIDMsIDIzNCwgMTg3LCAyOSwgMywgMjM0LCAxODgsIDI5LCAzLCAyMzQsIDM0LCAyOSwgMywgMjM0LCAzMywgMjksIAotICAgIDMsIDIzMywgMTg4LCAyOSwgMywgMjMzLCAxODIsIDI5LCAzLCAyMzMsIDE4NywgMjksIDMsIDIzMywgMTgzLCAyOSwgMywgCi0gICAgMjMzLCAxODQsIDI5LCAzLCAyMzMsIDE3NywgMjksIDMsIDIzMywgMTcxLCAyOSwgMywgMjMzLCAxNzMsIDI5LCAzLCAyMzMsIAotICAgIDE3NiwgMjksIDMsIDIzMywgMTc0LCAyOSwgMywgMjMzLCAxNzUsIDI5LCAzLCAyMzMsIDE3MiwgMjksIDMsIDIzMywgMTcwLCAKLSAgICAyOSwgMywgMjMzLCAxNjYsIDI5LCAzLCAyMzMsIDE2OSwgMjksIDMsIDIzMywgMTY3LCAyOSwgMywgMjMzLCAxNjgsIDI5LCAKLSAgICAzLCAyMTIsIDY1LCAyOSwgMywgMjExLCAxOTUsIDI5LCAzLCAyMTEsIDI1MCwgMjksIDMsIDIxMiwgNjQsIDI5LCAzLCAyMTIsIAotICAgIDE3LCAyOSwgMywgMjEyLCAyMiwgMjksIDMsIDIxMSwgMjI3LCAyOSwgMywgMjExLCAyMjYsIDI5LCAzLCAyMjUsIDE0MiwgCi0gICAgNjEsIDI5LCAzLCAyMjUsIDE0MiwgNjksIDI5LCAzLCAyMjUsIDE0MiwgNzQsIDI5LCAzLCAyMjUsIDE0MiwgMjU1LCA4MiwgCi0gICAgMjksIDMsIDIyNSwgMTQyLCAyNDUsIDIxNywgMjksIDMsIDIyNSwgMTQyLCA3NiwgMjksIDMsIDIyNSwgMTQyLCA3OCwgMjksIAotICAgIDMsIDIxMCwgMTE2LCAyOSwgMywgMjEwLCAxMywgMjksIDMsIDIxMCwgNDQsIDI5LCAzLCAyMTAsIDExNSwgMjksIDMsIDIxMCwgCi0gICAgOTIsIDI5LCAzLCAyMTAsIDk0LCAyOSwgMywgMjEwLCAyMywgMjksIDMsIDIxMCwgMCwgMjksIDMsIDIxMCwgODIsIDI5LCAzLCAKLSAgICAyMTAsIDYyLCAyOSwgMywgMjEwLCA2OSwgMjksIDMsIDIxMCwgODEsIDI5LCAzLCAyMTAsIDczLCAyOSwgMywgMjEwLCA3NCwgCi0gICAgMjksIDMsIDIxMCwgNjcsIDI5LCAzLCAyMTAsIDUzLCAyOSwgMywgMTkyLCAyOSwgMywgMjEwLCAyMTIsIDI5LCAzLCAyMTEsIAotICAgIDgsIDI5LCAzLCAyMTEsIDEwMywgMjksIDMsIDIxMSwgNDQsIDI5LCAzLCAyMTEsIDQ3LCAyOSwgMywgMjEwLCAyNDQsIDI5LCAKLSAgICAzLCAyMTAsIDIzNSwgMjksIDMsIDI0OCwgMjI5LCAyOSwgMywgMjQ2LCA4NiwgMjksIDMsIDI0OCwgMTEsIDI5LCAzLCAyNDgsIAotICAgIDIyOCwgMjksIDMsIDI0OCwgODUsIDI5LCAzLCAyNDgsIDk4LCAyOSwgMywgMjQ3LCAxNTMsIDI5LCAzLCAyNDYsIDU1LCAyOSwgCi0gICAgMywgMjQ4LCAxNDMsIDI5LCAzLCAyNDgsIDEwOCwgMjksIDMsIDI0OCwgMTIwLCAyOSwgMywgMjQ4LCAxNDIsIDI5LCAzLCAKLSAgICAyNDgsIDEzMCwgMjksIDMsIDI0OCwgMTMxLCAyOSwgMywgMjQ4LCAxMTMsIDI5LCAzLCAyNDgsIDk5LCAyOSwgMywgMjM1LCAKLSAgICAxNDcsIDI5LCAzLCAyMzUsIDU3LCAyOSwgMywgMjM1LCAxMTQsIDI5LCAzLCAyMzUsIDE0NiwgMjksIDMsIDIzNSwgMTMwLCAKLSAgICAyOSwgMywgMjM1LCAxMzIsIDI5LCAzLCAyMzUsIDc0LCAyOSwgMywgMjM1LCAzNywgMjksIDMsIDI0MywgMTQyLCAyOSwgMywgCi0gICAgMjQyLCAxMjAsIDI5LCAzLCAyNDIsIDIyMSwgMjksIDMsIDI0MywgMTM5LCAyOSwgMywgMjQzLCA2MiwgMjksIDMsIDI0MywgCi0gICAgNjksIDI5LCAzLCAyNDIsIDE4MSwgMjksIDMsIDI0MiwgMTgwLCAyOSwgMywgMjQyLCA4NSwgMjksIDMsIDI0MiwgODEsIDI5LCAKLSAgICAzLCAyNDIsIDg0LCAyOSwgMywgMjQyLCA4MiwgMjksIDMsIDI0MiwgODMsIDI5LCAzLCAyNDMsIDM2LCAyOSwgMywgMjQzLCAKLSAgICAxNiwgMjksIDMsIDI0MywgMjYsIDI5LCAzLCAyNDMsIDM1LCAyOSwgMywgMjQzLCAzMCwgMjksIDMsIDI0MywgMzEsIDI5LCAKLSAgICAzLCAyNDMsIDIwLCAyOSwgMywgMjQzLCA1LCAyOSwgMywgMjE2LCAyMDksIDI5LCAzLCAyMTYsIDEzNywgMjksIDMsIDIxNiwgCi0gICAgMTc2LCAyOSwgMywgMjE2LCAyMDgsIDI5LCAzLCAyMTYsIDE5NSwgMjksIDMsIDIxNiwgMTk2LCAyOSwgMywgMjE2LCAxNTcsIAotICAgIDI5LCAzLCAyMTYsIDEyOSwgMjksIDMsIDI1MCwgMTY1LCAyOSwgMywgMjUwLCA3NywgMjksIDMsIDI1MCwgMTE4LCAyOSwgMywgCi0gICAgMjUwLCAxNjQsIDI5LCAzLCAyNTAsIDEzNiwgMjksIDMsIDI1MCwgMTM5LCAyOSwgMywgMjUwLCA5NCwgMjksIDMsIDI1MCwgCi0gICAgNjYsIDI5LCAzLCAyMjUsIDE1MCwgMjksIDMsIDIyNSwgMTE3LCAyOSwgMywgMjI1LCAxMzYsIDI5LCAzLCAyMjUsIDE0OSwgCi0gICAgMjksIDMsIDIyNSwgMTM4LCAyOSwgMywgMjI1LCAxMzksIDI5LCAzLCAyMjUsIDEyNCwgMjksIDMsIDIyNSwgMTEzLCAyOSwgCi0gICAgMywgMjE1LCAxODQsIDI5LCAzLCAyMTUsIDE2NCwgMjksIDMsIDIxNSwgMTY4LCAyOSwgMywgMjE1LCAxODMsIDI5LCAzLCAKLSAgICAyMTUsIDE3OCwgMjksIDMsIDIxNSwgMTc5LCAyOSwgMywgMjE1LCAxNjcsIDI5LCAzLCAyMTUsIDE2MiwgMjksIDMsIDIxNSwgCi0gICAgMzksIDI5LCAzLCAyMTUsIDMxLCAyOSwgMywgMjE1LCAzNSwgMjksIDMsIDIxNSwgMzgsIDI5LCAzLCAyMTUsIDM2LCAyOSwgCi0gICAgMywgMjE1LCAzNywgMjksIDMsIDIxNSwgMzMsIDI5LCAzLCAyMTUsIDMyLCAyOSwgMywgMjQ0LCAyMDQsIDI5LCAzLCAyNDMsIAotICAgIDI0MSwgMjksIDMsIDI0NCwgMTI5LCAyOSwgMywgMjQ0LCAyMDMsIDI5LCAzLCAyNDQsIDE1NSwgMjksIDMsIDI0NCwgMTYyLCAKLSAgICAyOSwgMywgMjQ0LCA1MSwgMjksIDMsIDI0MywgMjIwLCAyOSwgMywgMTkxLCAyOSwgMywgMjI0LCAxNTMsIDI5LCAzLCAyMjUsIAotICAgIDExMSwgMjksIDMsIDIyNiwgOTMsIDI5LCAzLCAyMjUsIDIxNCwgMjksIDMsIDIyNSwgMjI0LCAyOSwgMywgMjI1LCAxOSwgCi0gICAgMjksIDMsIDIyNCwgMTE3LCAyOSwgMywgMjIyLCAxMDEsIDI5LCAzLCAyMzAsIDM2LCAyOSwgMywgMjQzLCAyMTQsIDI5LCAKLSAgICAzOCwgMjQzLCA2MCwgMjIsIDI1LCAyMzMsIDI5LCA3OSwgMjksIDM4LCAyNSwgMjMzLCAyOSwgNzksIDI5LCAzOCwgMjQzLCAKLSAgICA2MCwgNzksIDI5LCAyMjEsIDE3NSwgNzksIDI5LCAyMTEsIDIwOCwgMjksIDI0MywgMjM2LCAyMTgsIDEzMSwgMjksIDI0OSwgCi0gICAgMjI3LCAyOSwgMjIwLCAxNTIsIDI5LCAyNDksIDIzNCwgMjksIDIyNCwgMjAyLCAyNDksIDIzNCwgMjksIDIyNCwgMTYsIDc5LCAKLSAgICAyOSwgMjI2LCAxOSwgMjIwLCAxMzksIDI5LCAyMSwgMTExLCAyOSwgMjEsIDEwNSwgMjksIDIxLCAxNTgsIDI5LCAyMSwgCi0gICAgMTYxLCAyOSwgMjEsIDE5MCwgMjksIDIxLCAxOTUsIDI5LCAyMSwgMTk5LCAyOSwgMjEsIDE5NiwgMjksIDIxLCAyMDEsIDI5LCAKLSAgICA1NCwgMjE2LCAyNDgsIDI5LCA1NCwgMjE1LCA3MywgMjksIDU0LCAyMTYsIDE2MywgMjksIDU0LCAyNDQsIDIzLCAyOSwgNTQsIAotICAgIDI0NCwgMTIyLCAyOSwgNTQsIDIxOSwgMTEzLCAyOSwgNTQsIDIyMCwgMTE4LCAyOSwgNTQsIDI0NSwgMTkyLCAyOSwgNTQsIAotICAgIDIyOCwgMjAwLCAyOSwgNTQsIDI0MCwgMjE3LCAyOSwgNTQsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjksIDMsIDIyMSwgMTc5LCAKLSAgICAyMzAsIDQ3LCAyOSwgMywgMjMwLCA0MywgMjksIDMsIDIzMCwgNDQsIDI5LCAzLCAyMzAsIDQ1LCAyOSwgMywgMjIxLCAxNzksIAotICAgIDI1MSwgOTEsIDI5LCAzLCAyNTEsIDg4LCAyOSwgMywgMjUxLCA4OSwgMjksIDMsIDI1MSwgOTAsIDI5LCAzLCAyMjEsIDE3OSwgCi0gICAgMjQzLCAyMjAsIDI5LCAzLCAyNDMsIDIxNiwgMjksIDMsIDI0MywgMjE3LCAyOSwgMywgMjQzLCAyMTgsIDI5LCAzLCAyMjEsIAotICAgIDE3OSwgMjI0LCAxMTcsIDI5LCAzLCAyMjQsIDExMywgMjksIDMsIDIyNCwgMTE0LCAyOSwgMywgMjI0LCAxMTUsIDI5LCAKLSAgICAyMTYsIDMyLCAxNjQsIDIxMCwgMjQ3LCAyOSwgMjE2LCAzMiwgMTY0LCAyNDgsIDQ5LCAyOSwgMjE2LCAzMiwgMTY0LCAyMjIsIAotICAgIDI0MSwgMjksIDIxNiwgMzIsIDE2NCwgMjE5LCAyNTMsIDIyMiwgMjQxLCAyOSwgMjE2LCAzMiwgMTY0LCAyNDcsIDI0MywgCi0gICAgMjksIDIxNiwgMzIsIDE2NCwgMjM0LCAxNzAsIDI5LCAyMTYsIDMyLCAxNjQsIDI1MCwgMTAyLCAyOSwgMjE2LCAzMiwgMTY0LCAKLSAgICAyNDEsIDE4NCwgMjksIDIxNiwgMzIsIDE2NCwgMjQ4LCA0OCwgMjksIDIxNiwgMzIsIDE2NCwgMjMzLCAyMDAsIDE2OSwgMSwgCi0gICAgNjEsIDE2OSwgMSwgNzYsIDE2OSwgMSwgNzQsIDE2OSwgMSwgNzgsIDE2OSwgMSwgNjksIDE2OSwgMSwgMjE0LCAxMDUsIAotICAgIDE2OSwgMSwgMjQzLCAxNDIsIDE2OSwgMSwgMTc2LCAxNjksIDEsIDI0MywgNjksIDE2OSwgMSwgMjQyLCAyMjEsIDE2OSwgMSwgCi0gICAgMjQyLCAxODEsIDE2OSwgMSwgMjQyLCAxMjAsIDE2OSwgMSwgMjQyLCA4NiwgMTY5LCAxLCAxNjIsIDE2OSwgMSwgMjQxLCAKLSAgICAyNDUsIDE2OSwgMSwgMjQxLCAxODcsIDE2OSwgMSwgMjQxLCA3NSwgMTY5LCAxLCAyNDAsIDIyOSwgMTY5LCAxLCAyNDAsIAotICAgIDIwOCwgMTY5LCAxLCAyMzMsIDE0MSwgMTY5LCAxLCAyMzMsIDY0LCAxNjksIDEsIDIzMiwgMjQ3LCAxNjksIDEsIDIzMiwgCi0gICAgMTYyLCAxNjksIDEsIDIzMiwgMTAzLCAxNjksIDEsIDIzMiwgNzYsIDE2OSwgMSwgMTg2LCAxNjksIDEsIDIzMSwgOTYsIAotICAgIDE2OSwgMSwgMjMwLCAyMzUsIDE2OSwgMSwgMjMwLCAxNjYsIDE2OSwgMSwgMjMwLCAxMDcsIDE2OSwgMSwgMTk4LCAxNjksIAotICAgIDEsIDI0MSwgOTcsIDE2OSwgMSwgMjI5LCAyMTgsIDE2OSwgMSwgMjI5LCAxMTIsIDE2OSwgMSwgMjI4LCAyMzgsIDE2OSwgMSwgCi0gICAgMjI4LCA3OSwgMTY5LCAxLCAyMjcsIDI0MiwgMTY5LCAxLCAyMjcsIDE4MCwgMTY5LCAxLCAyMjQsIDMyLCAxNjksIDEsIAotICAgIDIyNCwgMTksIDE2OSwgMSwgMjI0LCAxMiwgMTY5LCAxLCAyMjQsIDQsIDE2OSwgMSwgMjIzLCAyNDksIDE2OSwgMSwgMjIzLCAKLSAgICAyNDcsIDE2OSwgMSwgMjA2LCAxNjksIDEsIDIyMiwgOTMsIDE2OSwgMSwgMjIxLCAxODMsIDE2OSwgMSwgMjE5LCAxOTMsIAotICAgIDE2OSwgMSwgMjE5LCA2MCwgMTY5LCAxLCAyMTgsIDg0LCAxNjksIDEsIDIxOCwgMywgMTY5LCAxLCAyNDgsIDIyOSwgMTY5LCAKLSAgICAxLCAyMTcsIDEwNiwgMTY5LCAxLCAyNDgsIDk4LCAxNjksIDEsIDIxNywgMjMsIDE2OSwgMSwgMjQ4LCAxMSwgMTY5LCAxLCAKLSAgICAyMTYsIDExOCwgMTY5LCAxLCAyNDcsIDE1MywgMTY5LCAxLCAyNDYsIDg2LCAxNjksIDEsIDI0NiwgNTgsIDE2OSwgMSwgCi0gICAgMjQ3LCAxNjQsIDE2OSwgMSwgMjE2LCA2MCwgMTY5LCAxLCAyMTYsIDU5LCAxNjksIDEsIDIxNiwgNDgsIDE2OSwgMSwgMjE2LCAKLSAgICA0NywgMTY5LCAxLCAyMTYsIDQ2LCAxNjksIDEsIDIxNiwgNDUsIDE2OSwgMSwgMjE1LCAxODQsIDE2OSwgMSwgMjE1LCAxNzksIAotICAgIDE2OSwgMSwgMjE1LCAxNjgsIDE2OSwgMSwgMjE1LCAxNjcsIDE2OSwgMSwgMjE1LCAxNjQsIDE2OSwgMSwgMjE1LCAxNjMsIAotICAgIDE2OSwgMSwgMjEyLCA2NSwgMTY5LCAxLCAyMTIsIDIyLCAxNjksIDEsIDIxMSwgMjUwLCAxNjksIDEsIDIxMSwgMjI3LCAKLSAgICAxNjksIDEsIDIxMSwgMTk1LCAxNjksIDEsIDIxMSwgMTgzLCAxNjksIDEsIDE5MiwgMTY5LCAxLCAyMTEsIDQ3LCAxNjksIDEsIAotICAgIDIxMSwgOCwgMTY5LCAxLCAyMTAsIDI0NCwgMTY5LCAxLCAyMTAsIDIxMiwgMTY5LCAxLCAyMTAsIDE3NywgMTgsIDE5LCAKLSAgICAyNDAsIDE3NSwgMTgsIDE5LCA3NiwgMTgsIDE5LCAyNTUsIDQ2LCAxOCwgMTksIDc0LCAxOCwgMTksIDIzNiwgNDAsIDE4LCAKLSAgICAxOSwgNzgsIDE4LCAxOSwgMjI2LCAxODcsIDE4LCAxOSwgMjExLCAxMTYsIDIyNiwgMTg3LCAxOCwgMTksIDczLCAyNDUsIAotICAgIDIxNywgMTgsIDE5LCA3MywgNzQsIDE4LCAxOSwgNjEsIDE4LCAxOSwgMjU1LCA4MiwgMTgsIDE5LCAyMTIsIDIyLCAxOCwgCi0gICAgMTksIDE1OSwgMjEyLCAyMiwgMTgsIDE5LCAyMTEsIDI1MCwgMTgsIDE5LCAxNTksIDIxMSwgMjUwLCAxOCwgMTksIDIxMSwgCi0gICAgMjQyLCAxOCwgMTksIDE1OSwgMjExLCAyNDIsIDE4LCAxOSwgMjExLCAyMjcsIDE4LCAxOSwgMTU5LCAyMTEsIDIyNywgMTgsIAotICAgIDE5LCAyMTEsIDIxNSwgMTgsIDE5LCAxNTksIDIxMSwgMjE1LCAxOCwgMTksIDIyOSwgMTk1LCAyMTEsIDIxNSwgMTgsIDE5LCAKLSAgICAyMTIsIDY1LCAxOCwgMTksIDE1OSwgMjEyLCA2NSwgMTgsIDE5LCAyMTIsIDY0LCAxOCwgMTksIDE1OSwgMjEyLCA2NCwgMTgsIAotICAgIDE5LCAyMjksIDE5NSwgMjEyLCA2NCwgMTgsIDE5LCAyNTQsIDIxMCwgMTgsIDE5LCAyMTEsIDExNiwgMjEyLCA5OCwgMTgsIAotICAgIDE5LCAyNDIsIDE4NywgMjE4LCAxMzEsIDE4LCAxOSwgNDAsIDE0MiwgMTgsIDE5LCA0MCwgMjQyLCAxNDMsIDE4LCAxOSwgCi0gICAgNDAsIDI1MSwgMTgzLCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCAyMTYsIDE1LCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIAotICAgIDQwLCA0NCwgMTYzLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDUyLCAxNDIsIDE4LCAxOSwgCi0gICAgNDAsIDUyLCAyMTksIDI1MywgNjcsIDIxOCwgOTIsIDE4LCAxOSwgNDAsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMTgsIDE5LCAKLSAgICA0MCwgMjE5LCAyNTMsIDIwMywgOTEsIDE4LCAxOSwgNDAsIDIyNSwgMjUsIDE4LCAxOSwgNDAsIDEyNCwgMjE3LCA4OCwgMTgsIAotICAgIDE5LCAyNDUsIDE1OCwgMTgsIDE5LCAyMzYsIDYsIDE4LCAxOSwgMjI2LCAyMDAsIDE4LCAxOSwgMjU0LCAxMzEsIDE4LCAxOSwgCi0gICAgMjI1LCAyMjQsIDE4LCAxOSwgMjI2LCA5MSwgMTgsIDE5LCAyMjUsIDExMSwgMTgsIDE5LCAyMjUsIDc0LCAxOCwgMTksIAotICAgIDIyNSwgMTksIDE4LCAxOSwgMjI0LCAyNTIsIDE4LCAxOSwgMjExLCAxMTYsIDIyNCwgMjUyLCAxOCwgMTksIDczLCAyNDEsIAotICAgIDIyNywgMTgsIDE5LCA3MywgMjQxLCAxODcsIDE4LCAxOSwgMTkxLCAxOCwgMTksIDIyNiwgOTMsIDE4LCAxOSwgMjI0LCAKLSAgICAxMTUsIDE4LCAxOSwgMTU5LCAyMjQsIDExNSwgMTgsIDE5LCAyMjQsIDExMywgMTgsIDE5LCAxNTksIDIyNCwgMTEzLCAxOCwgCi0gICAgMTksIDIyNCwgMTEyLCAxOCwgMTksIDE1OSwgMjI0LCAxMTIsIDE4LCAxOSwgMjI0LCAxMTAsIDE4LCAxOSwgMTU5LCAyMjQsIAotICAgIDExMCwgMTgsIDE5LCAyMjQsIDEwOSwgMTgsIDE5LCAxNTksIDIyNCwgMTA5LCAxOCwgMTksIDIyNCwgMTE3LCAxOCwgMTksIAotICAgIDE1OSwgMjI0LCAxMTcsIDE4LCAxOSwgMjI0LCAxMTYsIDE4LCAxOSwgMTU5LCAyMjQsIDExNiwgMTgsIDE5LCAyMTEsIDExNiwgCi0gICAgMjI0LCAxMTYsIDE4LCAxOSwgMjI2LCAxMDksIDE4LCAxOSwgMTU5LCAyMjYsIDEwOSwgMTgsIDE5LCA3MywgMjQyLCA2NywgCi0gICAgMTgsIDE5LCAyMTcsIDIzLCAxOCwgMTksIDIxNywgMTAwLCAxOCwgMTksIDIxNiwgMTE4LCAxOCwgMTksIDIxNiwgMTA0LCAKLSAgICAxOCwgMTksIDExMiwgMTgsIDE5LCAyMTYsIDE4LCAxOCwgMTksIDIxMSwgMTE2LCAyMTYsIDE4LCAxOCwgMTksIDczLCAyNDgsIAotICAgIDg1LCAxOCwgMTksIDczLCAyNDgsIDExLCAxOCwgMTksIDIxNywgMTA2LCAxOCwgMTksIDIxNywgMTAyLCAxOCwgMTksIDIxNSwgCi0gICAgNzgsIDE4LCAxOSwgMTU5LCAyMTUsIDc4LCAxOCwgMTksIDIxNSwgNjIsIDE4LCAxOSwgMTU5LCAyMTUsIDYyLCAxOCwgMTksIAotICAgIDIxNSwgNjEsIDE4LCAxOSwgMTU5LCAyMTUsIDYxLCAxOCwgMTksIDEwNSwgMTgsIDE5LCAxNTksIDEwNSwgMTgsIDE5LCAKLSAgICAyMTUsIDU0LCAxOCwgMTksIDE1OSwgMjE1LCA1NCwgMTgsIDE5LCAyMTUsIDgwLCAxOCwgMTksIDE1OSwgMjE1LCA4MCwgMTgsIAotICAgIDE5LCAyMTUsIDc5LCAxOCwgMTksIDE1OSwgMjE1LCA3OSwgMTgsIDE5LCAyMjksIDE5NSwgMjE1LCA3OSwgMTgsIDE5LCAKLSAgICAyMTcsIDE1MywgMTgsIDE5LCAyMTUsIDE1MiwgMTgsIDE5LCAyMTUsIDEzNiwgMTgsIDE5LCAyMTUsIDEzNCwgMTgsIDE5LCAKLSAgICAyMTUsIDE1NywgMTgsIDE5LCAyMzQsIDE4OCwgMTgsIDE5LCAyMzUsIDEzLCAxOCwgMTksIDIzNCwgOTgsIDE4LCAxOSwgCi0gICAgMjM0LCA4OSwgMTgsIDE5LCAyMzQsIDM0LCAxOCwgMTksIDIzNCwgMTYsIDE4LCAxOSwgMjExLCAxMTYsIDIzNCwgMTYsIDE4LCAKLSAgICAxOSwgMTc2LCAxOCwgMTksIDIzNSwgMTYsIDE4LCAxOSwgMjMzLCAxODQsIDE4LCAxOSwgMTU5LCAyMzMsIDE4NCwgMTgsIAotICAgIDE5LCAyMzMsIDE4MiwgMTgsIDE5LCAxNTksIDIzMywgMTgyLCAxOCwgMTksIDIzMywgMTgxLCAxOCwgMTksIDE1OSwgMjMzLCAKLSAgICAxODEsIDE4LCAxOSwgMjMzLCAxODAsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MCwgMTgsIDE5LCAyMzMsIDE3OSwgMTgsIDE5LCAKLSAgICAxNTksIDIzMywgMTc5LCAxOCwgMTksIDIzMywgMTg4LCAxOCwgMTksIDE1OSwgMjMzLCAxODgsIDE4LCAxOSwgMjMzLCAxODcsIAotICAgIDE4LCAxOSwgMTU5LCAyMzMsIDE4NywgMTgsIDE5LCAyMjksIDE5NSwgMjMzLCAxODcsIDE4LCAxOSwgMjM1LCAyOSwgMTgsIAotICAgIDE5LCAyMzMsIDE4OSwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDE4MiwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDkwLCAxOCwgCi0gICAgMTksIDIxOSwgMjksIDIzNCwgMjksIDE4LCAxOSwgMjE5LCAyOSwgMjM0LCAyNTQsIDE4LCAxOSwgMjUwLCAxOTgsIDE4LCAKLSAgICAxOSwgMjUxLCAzOSwgMTgsIDE5LCAyNTAsIDU5LCAxOCwgMTksIDI1MCwgNDksIDE4LCAxOSwgMjQ5LCAyNDYsIDE4LCAxOSwgCi0gICAgMjQ5LCAxODIsIDE4LCAxOSwgMjExLCAxMTYsIDI0OSwgMTgyLCAxOCwgMTksIDI1MSwgNDEsIDE4LCAxOSwgMjUxLCA0MCwgCi0gICAgMTgsIDE5LCAyNDksIDg3LCAxOCwgMTksIDE1OSwgMjQ5LCA4NywgMTgsIDE5LCAyNDksIDg1LCAxOCwgMTksIDE1OSwgMjQ5LCAKLSAgICA4NSwgMTgsIDE5LCAyNDksIDg0LCAxOCwgMTksIDE1OSwgMjQ5LCA4NCwgMTgsIDE5LCAyNDksIDgzLCAxOCwgMTksIDE1OSwgCi0gICAgMjQ5LCA4MywgMTgsIDE5LCAyNDksIDgyLCAxOCwgMTksIDE1OSwgMjQ5LCA4MiwgMTgsIDE5LCAyNDksIDg5LCAxOCwgMTksIAotICAgIDE1OSwgMjQ5LCA4OSwgMTgsIDE5LCAyNDksIDg4LCAxOCwgMTksIDE1OSwgMjQ5LCA4OCwgMTgsIDE5LCAyMjksIDE5NSwgCi0gICAgMjQ5LCA4OCwgMTgsIDE5LCAyNTEsIDc0LCAxOCwgMTksIDIyMSwgMjExLCAyMTYsIDIxMSwgMTgsIDE5LCAyMzEsIDk2LCAKLSAgICAxOCwgMTksIDIzMSwgMjQxLCAxOCwgMTksIDIzMCwgMjM1LCAxOCwgMTksIDIzMCwgMjA2LCAxOCwgMTksIDIzMCwgMTY2LCAKLSAgICAxOCwgMTksIDIzMCwgMTM3LCAxOCwgMTksIDIxMSwgMTE2LCAyMzAsIDEzNywgMTgsIDE5LCAxODYsIDE4LCAxOSwgMjMxLCAKLSAgICAyNDIsIDE4LCAxOSwgMjMwLCA0NSwgMTgsIDE5LCAxNTksIDIzMCwgNDUsIDE4LCAxOSwgMjMwLCA0MywgMTgsIDE5LCAxNTksIAotICAgIDIzMCwgNDMsIDE4LCAxOSwgMjMwLCA0MiwgMTgsIDE5LCAxNTksIDIzMCwgNDIsIDE4LCAxOSwgMjMwLCA0MSwgMTgsIDE5LCAKLSAgICAxNTksIDIzMCwgNDEsIDE4LCAxOSwgMjMwLCA0MCwgMTgsIDE5LCAxNTksIDIzMCwgNDAsIDE4LCAxOSwgMjMwLCA0NywgMTgsIAotICAgIDE5LCAxNTksIDIzMCwgNDcsIDE4LCAxOSwgMjMwLCA0NiwgMTgsIDE5LCAxNTksIDIzMCwgNDYsIDE4LCAxOSwgMjI5LCAKLSAgICAxOTUsIDIzMCwgNDYsIDE4LCAxOSwgMTk0LCAxOCwgMTksIDE1OSwgMTk0LCAxOCwgMTksIDIzMCwgMjM5LCAxOCwgMTksIAotICAgIDI1MywgMjEzLCAxOTQsIDE4LCAxOSwgMjIxLCAyMTEsIDE5NCwgMTgsIDE5LCAyMjksIDExMiwgMTgsIDE5LCAyMjksIDIyOSwgCi0gICAgMTgsIDE5LCAyMjgsIDIzOCwgMTgsIDE5LCAyMjgsIDIxMywgMTgsIDE5LCAyMjgsIDc5LCAxOCwgMTksIDIyOCwgNjksIDE4LCAKLSAgICAxOSwgMjExLCAxMTYsIDIyOCwgNjksIDE4LCAxOSwgMTk4LCAxOCwgMTksIDIyOSwgMjMwLCAxOCwgMTksIDIyNywgMTc2LCAKLSAgICAxOCwgMTksIDE1OSwgMjI3LCAxNzYsIDE4LCAxOSwgMjI3LCAxNzgsIDE4LCAxOSwgMTU5LCAyMjcsIDE3OCwgMTgsIDE5LCAKLSAgICAyMjcsIDE3NywgMTgsIDE5LCAxNTksIDIyNywgMTc3LCAxOCwgMTksIDIyOSwgMTk1LCAyMjcsIDE3NywgMTgsIDE5LCAyMzAsIAotICAgIDMwLCAxOCwgMTksIDczLCAyMjksIDg0LCAxOCwgMTksIDIyOCwgMjQzLCAxOCwgMTksIDIzMywgNjQsIDE4LCAxOSwgMjMzLCAKLSAgICAxMzksIDE4LCAxOSwgMjMyLCAyNDcsIDE4LCAxOSwgMjMyLCAyMzMsIDE4LCAxOSwgMjMyLCAxNjIsIDE4LCAxOSwgMjMyLCAKLSAgICAxMzMsIDE4LCAxOSwgMjExLCAxMTYsIDIzMiwgMTMzLCAxOCwgMTksIDIzMywgMTQxLCAxOCwgMTksIDIzMywgMTQwLCAxOCwgCi0gICAgMTksIDIzMiwgNzMsIDE4LCAxOSwgMTU5LCAyMzIsIDczLCAxOCwgMTksIDIzMiwgNzIsIDE4LCAxOSwgMTU5LCAyMzIsIDcyLCAKLSAgICAxOCwgMTksIDIzMiwgNzEsIDE4LCAxOSwgMTU5LCAyMzIsIDcxLCAxOCwgMTksIDIzMiwgNzAsIDE4LCAxOSwgMTU5LCAyMzIsIAotICAgIDcwLCAxOCwgMTksIDIzMiwgNjksIDE4LCAxOSwgMTU5LCAyMzIsIDY5LCAxOCwgMTksIDIzMiwgNzUsIDE4LCAxOSwgMTU5LCAKLSAgICAyMzIsIDc1LCAxOCwgMTksIDIzMiwgNzQsIDE4LCAxOSwgMTU5LCAyMzIsIDc0LCAxOCwgMTksIDE1NiwgMTgsIDE5LCAxNTksIAotICAgIDE1NiwgMTgsIDE5LCAxNDcsIDE1NiwgMTgsIDE5LCAyMjEsIDE4MywgMTgsIDE5LCAyMjIsIDMxLCAxOCwgMTksIDIxOSwgCi0gICAgMTkzLCAxOCwgMTksIDIxOSwgMTc3LCAxOCwgMTksIDIxOSwgNjAsIDE4LCAxOSwgMjE5LCA0MiwgMTgsIDE5LCAyMTEsIAotICAgIDExNiwgMjE5LCA0MiwgMTgsIDE5LCAyMDYsIDE4LCAxOSwgMjIyLCAzMywgMTgsIDE5LCAyMTcsIDI1MCwgMTgsIDE5LCAKLSAgICAxNTksIDIxNywgMjUwLCAxOCwgMTksIDIxNywgMjQ0LCAxOCwgMTksIDE1OSwgMjE3LCAyNDQsIDE4LCAxOSwgMjE3LCAyNDMsIAotICAgIDE4LCAxOSwgMTU5LCAyMTcsIDI0MywgMTgsIDE5LCAyMTcsIDIzOSwgMTgsIDE5LCAxNTksIDIxNywgMjM5LCAxOCwgMTksIAotICAgIDIxNywgMjM4LCAxOCwgMTksIDE1OSwgMjE3LCAyMzgsIDE4LCAxOSwgMjE3LCAyNTQsIDE4LCAxOSwgMTU5LCAyMTcsIDI1NCwgCi0gICAgMTgsIDE5LCAyMTcsIDI1MywgMTgsIDE5LCAxNTksIDIxNywgMjUzLCAxOCwgMTksIDIyOSwgMTk1LCAyMTcsIDI1MywgMTgsIAotICAgIDE5LCAyMjIsIDkzLCAxOCwgMTksIDI1MywgMjEzLCAyMjIsIDkzLCAxOCwgMTksIDIxNywgMjU1LCAxOCwgMTksIDI1MSwgCi0gICAgMjI2LCAyMjIsIDkzLCAxOCwgMTksIDIzMCwgMTMyLCAyMTksIDExMCwgMTgsIDE5LCAyMjksIDE5NSwgMjE5LCAxMDEsIDE4LCAKLSAgICAxOSwgMjI5LCAxOTUsIDIyMiwgOTEsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOCwgMjM3LCAxOCwgMTksIDIyOSwgMTk1LCAyMTgsIAotICAgIDg3LCAxOCwgMTksIDIyOSwgMTk1LCAyMTksIDEwMCwgMTgsIDE5LCAyMjksIDE5NSwgMjIxLCAxODYsIDE4LCAxOSwgMjIwLCAKLSAgICA2NSwgMTgsIDE5LCAyMjAsIDM0LCAxOCwgMTksIDIyMCwgMjksIDE4LCAxOSwgMjIwLCA5LCAxOCwgMTksIDIyMCwgMywgMTgsIAotICAgIDE5LCAyMjAsIDEwNCwgMTgsIDE5LCAyMjAsIDEwMCwgMTgsIDE5LCAyMTksIDIwOCwgMTgsIDE5LCAxNTksIDIxOSwgMjA4LCAKLSAgICAxOCwgMTksIDIxOSwgMjA3LCAxOCwgMTksIDE1OSwgMjE5LCAyMDcsIDE4LCAxOSwgMjE5LCAyMDYsIDE4LCAxOSwgMTU5LCAKLSAgICAyMTksIDIwNiwgMTgsIDE5LCAyMTksIDIwNSwgMTgsIDE5LCAxNTksIDIxOSwgMjA1LCAxOCwgMTksIDIxOSwgMjA0LCAxOCwgCi0gICAgMTksIDE1OSwgMjE5LCAyMDQsIDE4LCAxOSwgMjE5LCAyMTAsIDE4LCAxOSwgMTU5LCAyMTksIDIxMCwgMTgsIDE5LCAyMTksIAotICAgIDIwOSwgMTgsIDE5LCAxNTksIDIxOSwgMjA5LCAxOCwgMTksIDIyMCwgMTA2LCAxOCwgMTksIDIxMSwgNDcsIDE4LCAxOSwgCi0gICAgMjExLCAxMDEsIDE4LCAxOSwgMjExLCA4LCAxOCwgMTksIDIxMCwgMjU1LCAxOCwgMTksIDIxMCwgMjQ0LCAxOCwgMTksIAotICAgIDIxMCwgMjI5LCAxOCwgMTksIDIxMSwgMTE2LCAyMTAsIDIyOSwgMTgsIDE5LCAxOTIsIDE4LCAxOSwgMjExLCAxMDMsIDE4LCAKLSAgICAxOSwgMjEwLCAxNzQsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NCwgMTgsIDE5LCAyMTAsIDE3MywgMTgsIDE5LCAxNTksIDIxMCwgCi0gICAgMTczLCAxOCwgMTksIDIxMCwgMTcyLCAxOCwgMTksIDE1OSwgMjEwLCAxNzIsIDE4LCAxOSwgMjEwLCAxNzEsIDE4LCAxOSwgCi0gICAgMTU5LCAyMTAsIDE3MSwgMTgsIDE5LCAyMTAsIDE3MCwgMTgsIDE5LCAxNTksIDIxMCwgMTcwLCAxOCwgMTksIDIxMCwgMTc2LCAKLSAgICAxOCwgMTksIDE1OSwgMjEwLCAxNzYsIDE4LCAxOSwgMjEwLCAxNzUsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NSwgMTgsIDE5LCAKLSAgICAyMjksIDE5NSwgMjEwLCAxNzUsIDE4LCAxOSwgMjExLCAxMTcsIDE4LCAxOSwgMjUyLCAxMiwgMjExLCAxMTcsIDE4LCAxOSwgCi0gICAgMTU5LCAyMTEsIDExNywgMTgsIDE5LCAyMjEsIDIxMSwgMjExLCA4LCAxOCwgMTksIDIyMywgMTMxLCAxOCwgMTksIDIyMywgCi0gICAgMjI2LCAyMjMsIDEzMSwgMTgsIDE5LCAxNTksIDIzMywgNjQsIDE4LCAxOSwgMjIzLCAxODYsIDE4LCAxOSwgMjIzLCAzOCwgCi0gICAgMTgsIDE5LCAyMjIsIDI0MiwgMTgsIDE5LCAyMjIsIDIxMywgMTgsIDE5LCAyMjIsIDE5OSwgMTgsIDE5LCAxNTksIDIzMiwgCi0gICAgMTYyLCAxOCwgMTksIDIwNSwgMTgsIDE5LCAyMjMsIDE4NywgMTgsIDE5LCAxNTksIDIzMywgMTQxLCAxOCwgMTksIDIyMiwgCi0gICAgMTEwLCAxOCwgMTksIDE1OSwgMjIyLCAxMTAsIDE4LCAxOSwgMTUzLCAxOCwgMTksIDE1OSwgMTUzLCAxOCwgMTksIDE0NywgCi0gICAgMTUzLCAxOCwgMTksIDI0NCwgMTYyLCAxOCwgMTksIDI0NCwgMjAxLCAxOCwgMTksIDI0NCwgMTI5LCAxOCwgMTksIDI0NCwgCi0gICAgMTE2LCAxOCwgMTksIDI0NCwgNTEsIDE4LCAxOSwgMjQ0LCA0MiwgMTgsIDE5LCAyNDQsIDIwNCwgMTgsIDE5LCAyNDQsIAotICAgIDIwMywgMTgsIDE5LCAyNDMsIDIxOSwgMTgsIDE5LCAxNTksIDI0MywgMjE5LCAxOCwgMTksIDI0NSwgMTQsIDE4LCAxOSwgCi0gICAgMjE2LCAxOTYsIDE4LCAxOSwgMjMwLCAyOCwgMjE2LCAxOTYsIDE4LCAxOSwgMjE2LCAxNzYsIDE4LCAxOSwgMjMwLCAyOCwgCi0gICAgMjE2LCAxNzYsIDE4LCAxOSwgMjE2LCAxNzIsIDE4LCAxOSwgMjMwLCAyOCwgMjE2LCAxNzIsIDE4LCAxOSwgMjE2LCAxNTcsIAotICAgIDE4LCAxOSwgMjE2LCAxNTQsIDE4LCAxOSwgMjE2LCAyMDksIDE4LCAxOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAxMjgsIAotICAgIDE4LCAxOSwgMTU5LCAyMTYsIDEyOCwgMTgsIDE5LCAyMTYsIDIxMSwgMTgsIDE5LCAyMTUsIDE0MywgMTgsIDE5LCAyMTUsIAotICAgIDE0MSwgMTgsIDE5LCAyMTUsIDE0MCwgMTgsIDE5LCAyMTUsIDE0NSwgMTgsIDE5LCAyMTUsIDE0NiwgMTgsIDE5LCAyMTUsIAotICAgIDUyLCAxOCwgMTksIDIxNSwgNTEsIDE4LCAxOSwgMjE1LCA1MCwgMTgsIDE5LCAyMTUsIDUzLCAxOCwgMTksIDIyNywgMTk3LCAKLSAgICAyNDEsIDI0NSwgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCAxODcsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgMTY4LCAxOCwgMTksIAotICAgIDIyNywgMTk3LCAyNDEsIDc1LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDYwLCAxOCwgMTksIDIyNywgMTk3LCAxNjIsIDE4LCAKLSAgICAxOSwgMjI3LCAxOTcsIDI0MiwgNTMsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MiwgNjcsIDE4LCAxOSwgMjI3LCAxOTYsIDI0MiwgCi0gICAgNjcsIDE4LCAxOSwgMjQxLCAxNjEsIDE4LCAxOSwgMjI0LCA4NywgMTgsIDE5LCAyMjQsIDU2LCAxOCwgMTksIDIyNCwgNTEsIAotICAgIDE4LCAxOSwgMjI0LCA0NSwgMTgsIDE5LCAyMjQsIDQwLCAxOCwgMTksIDIyNCwgOTEsIDE4LCAxOSwgMjI0LCA5MCwgMTgsIAotICAgIDE5LCAyMjQsIDk5LCAxOCwgMTksIDIxNiwgNTYsIDE4LCAxOSwgMjE2LCA1NCwgMTgsIDE5LCAyMTYsIDUzLCAxOCwgMTksIAotICAgIDIxNiwgNTcsIDE4LCAxOSwgMTU5LCAyMjMsIDEzMSwgMTgsIDE5LCAxNTksIDIyMywgMzgsIDE4LCAxOSwgMTU5LCAyMjIsIAotICAgIDIxMywgMTgsIDE5LCAxNTksIDIwNSwgMTgsIDE5LCAyMjksIDgwLCAxOCwgMTksIDIyOSwgMzIsIDE4LCAxOSwgMjI5LCAyOCwgCi0gICAgMTgsIDE5LCAyMjksIDksIDE4LCAxOSwgMjI5LCA0LCAxOCwgMTksIDIyOSwgODIsIDE4LCAxOSwgMjI5LCA4MSwgMTgsIDE5LCAKLSAgICAyMjksIDg0LCAxOCwgMTksIDIyOCwgMTA4LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDY1LCAxOCwgMTksIDIyMSwgMjExLCAKLSAgICAyMjAsIDM0LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDksIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgMTA0LCAxOCwgMTksIAotICAgIDIxMSwgMjEzLCAyMTYsIDE5NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxNzYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgCi0gICAgMTU3LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIwOSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAyMTEsIDE4LCAxOSwgMjMyLCAKLSAgICAyNTQsIDE4LCAxOSwgMjMyLCAyNTMsIDE4LCAxOSwgMjMyLCAyNTIsIDE4LCAxOSwgMjMyLCAyNTEsIDE4LCAxOSwgMjMzLCAKLSAgICA0LCAxOCwgMTksIDIzMywgMywgMTgsIDE5LCAyMzMsIDUsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTk2LCAxOCwgMTksIAotICAgIDIxNiwgMjEwLCAyMTYsIDE3NiwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxNzIsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgCi0gICAgMTU3LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE1NCwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAyMDksIDE4LCAxOSwgMjE2LCAKLSAgICAyMTAsIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDIxMSwgMTgsIDE5LCAyNTQsIDE5OCwgMjUzLCAxNjYsIAotICAgIDE4LCAxOSwgMjUxLCAyMjYsIDc2LCAxOCwgMTksIDI1MSwgMjI2LCA3NCwgMTgsIDE5LCAyNTEsIDIyNiwgNzgsIDE4LCAxOSwgCi0gICAgMjUxLCAyMjYsIDYxLCAxOCwgMTksIDI1MSwgMjI2LCAyMTIsIDIyLCAxOCwgMTksIDI1MSwgMjI2LCAyMTEsIDI1MCwgMTgsIAotICAgIDE5LCAyNTEsIDIyNiwgMjExLCAyMjcsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgNjUsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOSwgCi0gICAgMTEyLCAxOCwgMTksIDI1MSwgMjI2LCAyMjgsIDIzOCwgMTgsIDE5LCAyNTEsIDIyNiwgMjI4LCA3OSwgMTgsIDE5LCAyNTEsIAotICAgIDIyNiwgMTk4LCAxOCwgMTksIDI1MSwgMjI2LCAyMzQsIDE4OCwgMTgsIDE5LCAyNTEsIDIyNiwgMjM0LCA5OCwgMTgsIDE5LCAKLSAgICAyNTEsIDIyNiwgMjM0LCAzNCwgMTgsIDE5LCAyNTEsIDIyNiwgMTc2LCAxOCwgMTksIDIyMSwgMjExLCAyNDEsIDI0NSwgMTgsIAotICAgIDE5LCAyMjEsIDIxMSwgMjQxLCAxODcsIDE4LCAxOSwgMjIxLCAyMTEsIDI0MSwgNzUsIDE4LCAxOSwgMjIxLCAyMTEsIDE2MiwgCi0gICAgMTgsIDE5LCA3MywgMjQyLCAyMjcsIDE4LCAxOSwgNzMsIDI0MiwgMjMxLCAxOCwgMTksIDczLCAyNDIsIDI0MywgMTgsIDE5LCAKLSAgICA3MywgMjQyLCAyNDIsIDE4LCAxOSwgNzMsIDI0MiwgMjMyLCAxOCwgMTksIDczLCAyNDMsIDAsIDE4LCAxOSwgNzMsIDIyMiwgCi0gICAgMTQyLCAxOCwgMTksIDczLCAyMjIsIDIxMywgMTgsIDE5LCA3MywgMjIzLCAxMzEsIDE4LCAxOSwgNzMsIDIyMywgMTExLCAKLSAgICAxOCwgMTksIDczLCAyMjMsIDM4LCAxOCwgMTksIDczLCAyMDUsIDE4LCAxOSwgNzMsIDIxMSwgMTk1LCAxOCwgMTksIDczLCAKLSAgICAyMTEsIDIyNywgMTgsIDE5LCA3MywgMjEyLCAyMiwgMTgsIDE5LCA3MywgMjEyLCAxNywgMTgsIDE5LCA3MywgMjExLCAyNTAsIAotICAgIDE4LCAxOSwgNzMsIDIxMiwgNjUsIDE4LCAxOSwgNzMsIDI0MCwgMjAxLCAxOCwgMTksIDczLCAyNDAsIDIwMiwgMTgsIDE5LCAKLSAgICA3MywgMjQwLCAyMDUsIDE4LCAxOSwgNzMsIDI0MCwgMjA0LCAxOCwgMTksIDczLCAyNDAsIDIwMywgMTgsIDE5LCA3MywgCi0gICAgMjQwLCAyMDcsIDE4LCAxOSwgNzMsIDIxNiwgMTM3LCAxOCwgMTksIDczLCAyMTYsIDE1NywgMTgsIDE5LCA3MywgMjE2LCAKLSAgICAxOTYsIDE4LCAxOSwgNzMsIDIxNiwgMTk1LCAxOCwgMTksIDczLCAyMTYsIDE3NiwgMTgsIDE5LCA3MywgMjE2LCAyMDksIAotICAgIDE4LCAxOSwgNzMsIDIxNSwgMTI0LCAxOCwgMTksIDczLCAyMTUsIDEzNCwgMTgsIDE5LCA3MywgMjE1LCAxNTIsIDE4LCAxOSwgCi0gICAgNzMsIDIxNSwgMTUxLCAxOCwgMTksIDczLCAyMTUsIDEzNiwgMTgsIDE5LCA3MywgMjE1LCAxNTcsIDE4LCAxOSwgNzMsIAotICAgIDIyNCwgMTUzLCAxOCwgMTksIDczLCAyMjUsIDE5LCAxOCwgMTksIDczLCAyMjUsIDIyNCwgMTgsIDE5LCA3MywgMjI1LCAKLSAgICAyMTQsIDE4LCAxOSwgNzMsIDIyNSwgMTExLCAxOCwgMTksIDczLCAxOTEsIDE4LCAxOSwgNzMsIDIyNiwgMTA5LCAxOCwgMTksIAotICAgIDczLCAyNDIsIDEyMCwgMTgsIDE5LCA3MywgMjQyLCAxODEsIDE4LCAxOSwgNzMsIDI0MywgNjksIDE4LCAxOSwgNzMsIDI0MywgCi0gICAgNjIsIDE4LCAxOSwgNzMsIDI0MiwgMjIxLCAxOCwgMTksIDczLCAyNDMsIDE0MiwgMTgsIDE5LCA3MywgMjM0LCAxMDYsIDE4LCAKLSAgICAxOSwgNzMsIDIzNCwgMTExLCAxOCwgMTksIDczLCAyMzQsIDEyNSwgMTgsIDE5LCA3MywgMjM0LCAxMjQsIDE4LCAxOSwgNzMsIAotICAgIDIzNCwgMTE4LCAxOCwgMTksIDczLCAyMzQsIDEzOCwgMTgsIDE5LCA3MywgMjM0LCA0NywgMTgsIDE5LCA3MywgMjM0LCA0OCwgCi0gICAgMTgsIDE5LCA3MywgMjM0LCA1MSwgMTgsIDE5LCA3MywgMjM0LCA1MCwgMTgsIDE5LCA3MywgMjM0LCA0OSwgMTgsIDE5LCAKLSAgICA3MywgMjM0LCA1MiwgMTgsIDE5LCA3MywgMjM0LCA1MywgMTgsIDE5LCA3MywgMjI3LCAyNDIsIDE4LCAxOSwgNzMsIDIyOCwgCi0gICAgNzksIDE4LCAxOSwgNzMsIDIyOSwgMTEyLCAxOCwgMTksIDczLCAyMjksIDEwOCwgMTgsIDE5LCA3MywgMjI4LCAyMzgsIDE4LCAKLSAgICAxOSwgNzMsIDE5OCwgMTgsIDE5LCA3MywgMjMwLCAxMDcsIDE4LCAxOSwgNzMsIDIzMCwgMTY2LCAxOCwgMTksIDczLCAyMzEsIAotICAgIDk2LCAxOCwgMTksIDczLCAyMzEsIDg1LCAxOCwgMTksIDczLCAyMzAsIDIzNSwgMTgsIDE5LCA3MywgMTg2LCAxOCwgMTksIAotICAgIDczLCAyMTAsIDIxMiwgMTgsIDE5LCA3MywgMjEwLCAyNDQsIDE4LCAxOSwgNzMsIDIxMSwgNDcsIDE4LCAxOSwgNzMsIDIxMSwgCi0gICAgNDQsIDE4LCAxOSwgNzMsIDIxMSwgOCwgMTgsIDE5LCA3MywgMTkyLCAxOCwgMTksIDczLCAyMzUsIDU3LCAxOCwgMTksIAotICAgIDIyMSwgMjExLCAyMzUsIDU3LCAxOCwgMTksIDczLCAyMzUsIDc0LCAxOCwgMTksIDczLCAyMzUsIDEzMiwgMTgsIDE5LCA3MywgCi0gICAgMjM1LCAxMzAsIDE4LCAxOSwgNzMsIDIzNSwgMTE0LCAxOCwgMTksIDIyMSwgMjExLCAyMzUsIDExNCwgMTgsIDE5LCA3MywgCi0gICAgMjM1LCAxNDcsIDE4LCAxOSwgNzMsIDIzNSwgODcsIDE4LCAxOSwgNzMsIDIzNSwgOTEsIDE4LCAxOSwgNzMsIDIzNSwgMTAxLCAKLSAgICAxOCwgMTksIDczLCAyMzUsIDEwMCwgMTgsIDE5LCA3MywgMjM1LCA5OSwgMTgsIDE5LCA3MywgMjM1LCAxMDIsIDE4LCAxOSwgCi0gICAgNzMsIDIzMiwgMTAzLCAxOCwgMTksIDczLCAyMzIsIDE2MiwgMTgsIDE5LCA3MywgMjMzLCA2NCwgMTgsIDE5LCA3MywgMjMzLCAKLSAgICA1NiwgMTgsIDE5LCA3MywgMjMyLCAyNDcsIDE4LCAxOSwgNzMsIDIzMywgMTQxLCAxOCwgMTksIDczLCAyNDcsIDE1NywgMTgsIAotICAgIDE5LCA3MywgMjQ3LCAxNTgsIDE4LCAxOSwgNzMsIDI0NywgMTYzLCAxOCwgMTksIDczLCAyNDcsIDE2MiwgMTgsIDE5LCA3MywgCi0gICAgMjQ3LCAxNTksIDE4LCAxOSwgNzMsIDI0NywgMTY0LCAxOCwgMTksIDczLCAyMzIsIDI1MCwgMTgsIDE5LCA3MywgMjMyLCAKLSAgICAyNTIsIDE4LCAxOSwgNzMsIDIzMywgMCwgMTgsIDE5LCA3MywgMjMyLCAyNTUsIDE4LCAxOSwgNzMsIDIzMiwgMjU0LCAxOCwgCi0gICAgMTksIDczLCAyMzMsIDQsIDE4LCAxOSwgNzMsIDIxNiwgNTEsIDE4LCAxOSwgNzMsIDIxNiwgNTMsIDE4LCAxOSwgNzMsIAotICAgIDIxNiwgNTYsIDE4LCAxOSwgNzMsIDIxNiwgNTUsIDE4LCAxOSwgNzMsIDIxNiwgNTQsIDE4LCAxOSwgNzMsIDIxNiwgNTcsIAotICAgIDE4LCAxOSwgNzMsIDIxNiwgNDYsIDE4LCAxOSwgNzMsIDIxNiwgNDcsIDE4LCAxOSwgNzMsIDIxNiwgNTksIDE4LCAxOSwgCi0gICAgNzMsIDIxNiwgNTgsIDE4LCAxOSwgNzMsIDIxNiwgNDgsIDE4LCAxOSwgNzMsIDIxNiwgNjAsIDE4LCAxOSwgNzMsIDIxMCwgCi0gICAgMTMsIDE4LCAxOSwgNzMsIDIxMCwgMjMsIDE4LCAxOSwgNzMsIDIxMCwgOTQsIDE4LCAxOSwgNzMsIDIxMCwgOTIsIDE4LCAKLSAgICAxOSwgNzMsIDIxMCwgNDQsIDE4LCAxOSwgNzMsIDIxMCwgMTE2LCAxOCwgMTksIDczLCAyMTAsIDE1OSwgMTgsIDE5LCA3MywgCi0gICAgNjUsIDIxMCwgMTU5LCAxOCwgMTksIDczLCAyNDYsIDM2LCAxOCwgMTksIDczLCAyNDYsIDM3LCAxOCwgMTksIDczLCAyNDYsIAotICAgIDQ0LCAxOCwgMTksIDczLCAyNDYsIDQzLCAxOCwgMTksIDczLCAyNDYsIDM5LCAxOCwgMTksIDczLCAyNDYsIDQ2LCAxOCwgCi0gICAgMTksIDczLCAyMTgsIDg0LCAxOCwgMTksIDczLCAyMTksIDYwLCAxOCwgMTksIDczLCAyMjEsIDE4MywgMTgsIDE5LCA3MywgCi0gICAgMjIxLCAxNzIsIDE4LCAxOSwgNzMsIDIxOSwgMTkzLCAxOCwgMTksIDczLCAyMDYsIDE4LCAxOSwgNzMsIDIxOSwgMjI3LCAKLSAgICAxOCwgMTksIDczLCAyMjAsIDksIDE4LCAxOSwgNzMsIDIyMCwgNjUsIDE4LCAxOSwgNzMsIDIyMCwgNjMsIDE4LCAxOSwgNzMsIAotICAgIDIyMCwgMzQsIDE4LCAxOSwgNzMsIDIyMCwgMTA0LCAxOCwgMTksIDczLCAyMjAsIDEwNiwgMTgsIDE5LCA3MywgMjE1LCAKLSAgICAxNjQsIDE4LCAxOSwgNzMsIDIxNSwgMTY3LCAxOCwgMTksIDczLCAyMTUsIDE3OSwgMTgsIDE5LCA3MywgMjE1LCAxNzgsIAotICAgIDE4LCAxOSwgNzMsIDIxNSwgMTY4LCAxOCwgMTksIDczLCAyMTUsIDE4NCwgMTgsIDE5LCA3MywgMjUwLCA3NywgMTgsIDE5LCAKLSAgICA3MywgMjUwLCA5NCwgMTgsIDE5LCA3MywgMjUwLCAxMzksIDE4LCAxOSwgNzMsIDI1MCwgMTM2LCAxOCwgMTksIDczLCAyNTAsIAotICAgIDExOCwgMTgsIDE5LCA3MywgMjUwLCAxNjUsIDE4LCAxOSwgNzMsIDIxNSwgMTI3LCAxOCwgMTksIDczLCAyMTUsIDEyOCwgCi0gICAgMTgsIDE5LCA3MywgMjE1LCAxMzEsIDE4LCAxOSwgNzMsIDIxNSwgMTMwLCAxOCwgMTksIDczLCAyMTUsIDEyOSwgMTgsIDE5LCAKLSAgICA3MywgMjE1LCAxMzIsIDE4LCAxOSwgMjUwLCAxMTksIDUwLCAxOCwgMTksIDI0MywgMjM2LCAyMTgsIDEzMSwgMTgsIDE5LCAKLSAgICAyMjQsIDgzLCAxOCwgMTksIDIyOSwgNzgsIDE4LCAxOSwgMjI4LCAxMDUsIDE4LCAxOSwgMjI4LCAxMDQsIDE4LCAxOSwgCi0gICAgMjI4LCAxMDMsIDE4LCAxOSwgMjI4LCAxMDIsIDE4LCAxOSwgMjI4LCAxMDcsIDE4LCAxOSwgMjI4LCAxMDYsIDE4LCAxOSwgCi0gICAgMjExLCAyMTMsIDIxNiwgMTI2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyNSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKLSAgICAxMjQsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIzLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMiwgMTgsIDE5LCAyMTEsIAotICAgIDIxMywgMjE2LCAxMjksIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI4LCAxOCwgMTksIDIxMSwgMjEzLCA0MCwgMjE2LCAKLSAgICAyMTEsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgOTgsIDIyNiwgMjMwLCAyMTksIDIxLCA3OSwgMjI2LCAyMzAsIDEsIDI1MiwgCi0gICAgNTYsIDIyNiwgMjMwLCAxLCAyMzIsIDkyLCAyMjYsIDIzMCwgMSwgMjQ0LCAxNTksIDIyNiwgMjMwLCAxLCAyMjIsIDE3LCAKLSAgICAyMjYsIDIzMCwgMSwgMjI4LCAxOTgsIDIyNiwgMjMwLCAxLCAyMTQsIDIyNiwgMjI2LCAyMzAsIDEsIDI0OCwgMjA1LCAyMjYsIAotICAgIDIzMCwgMSwgMjE2LCA4MSwgMjI2LCAyMzAsIDEsIDI0OSwgMjM3LCAyMjYsIDIzMCwgMSwgMjUwLCAxODgsIDIyNiwgMjMwLCAKLSAgICAxLCAyMzAsIDk2LCAyMjYsIDIzMCwgMSwgMjQyLCAxNjMsIDIyNiwgMjMwLCAxLCAyMjksIDY4LCAyMjYsIDIzMCwgMSwgCi0gICAgMjE4LCAxMjQsIDIyNiwgMjMwLCAxLCAyMjIsIDEzNywgMjI2LCAyMzAsIDEsIDI1NCwgMjA3LCAyMjYsIDIzMCwgMSwgMjI2LCAKLSAgICAxOTEsIDIyNiwgMjMwLCAxLCAyMTQsIDE1MCwgMjI2LCAyMzAsIDEsIDI0NSwgMjM5LCAyMjYsIDIzMCwgMSwgMjM1LCAxOTUsIAotICAgIDIyNiwgMjMwLCAxLCAyNDUsIDI0MCwgMjI2LCAyMzAsIDEsIDIyNiwgMTYyLCAyMjYsIDIzMCwgMSwgMjE0LCAyMDYsIDIyNiwgCi0gICAgMjMwLCAxLCAyMzYsIDQ2LCAyMjYsIDIzMCwgMSwgMjQ1LCAyMzcsIDIyNiwgMjMwLCAxLCAyMjUsIDIwNSwgMjI2LCAyMzAsIAotICAgIDI0NCwgMTU4LCA3OSwgMjI2LCAyMzAsIDIyMywgNTIsIDI0NCwgMTU4LCA3OSwgMTc4LCAxLCAyNDQsIDE0OSwgMjQ0LCAKLSAgICAxNDEsIDI0NCwgMTYzLCAyNDUsIDE0LCAxNzgsIDEsIDIxNCwgMTA1LCAxNzgsIDEsIDIxNCwgMTM1LCAyMTQsIDE1MSwgNjksIAotICAgIDE3OCwgMSwgMjEwLCAyMTQsIDE3OCwgMSwgMjExLCAxMTcsIDE3OCwgMSwgMjEyLCA5OCwgMTc4LCAxLCAyMTYsIDEzMSwgCi0gICAgMjE2LCAxMzAsIDIxNiwgMTUyLCAxNzgsIDEsIDI0NSwgNjcsIDE3OCwgMSwgMjU0LCAxMDEsIDYxLCAxNzgsIDEsIDIyNiwgCi0gICAgMTQ3LCA3OCwgMTc4LCAxLCAyNTUsIDI2LCA2MSwgMTc4LCAxLCAyNTQsIDIzNiwgMTc4LCAxLCAyMzIsIDEzOSwgNzgsIAotICAgIDE3OCwgMSwgMjE5LCAyNDYsIDc4LCAxNzgsIDEsIDc4LCAxNzgsIDEsIDIyNiwgMjM4LCAxNzgsIDEsIDIyNiwgMjAwLCAKLSAgICAxNzgsIDEsIDIyMywgMTY3LCAyMjMsIDE4MCwgMjIzLCA5NywgMTUzLCAxNzgsIDEsIDIzNCwgMTk5LCAxNzgsIDEsIDI1MCwgCi0gICAgMTg1LCAxNzgsIDEsIDIzNCwgMjAwLCAyMzUsIDI5LCAxNzgsIDEsIDI0MywgMjA5LCAxNzgsIDEsIDI0NSwgMTQ2LCAxNzgsIAotICAgIDEsIDI0MywgNjUsIDI0MiwgNzMsIDI0MywgMjA5LCAxNzgsIDEsIDI0MywgMTAzLCAxNzgsIDEsIDIxMSwgMTg4LCAyMTEsIAotICAgIDE4MiwgMjEyLCA5OCwgMTc4LCAxLCAyNDIsIDQ1LCAyNDIsIDY3LCAxNzgsIDEsIDI0MiwgNDksIDI0MiwgNjcsIDE3OCwgMSwgCi0gICAgMjMyLCAxNDEsIDI0MiwgNjcsIDE3OCwgMSwgMjE5LCAyNDksIDI0MiwgNjcsIDE3OCwgMSwgMjI5LCAxOTAsIDIyNywgMTYxLCAKLSAgICAyMjksIDE5MSwgMjMwLCAzMCwgMTc4LCAxLCAyMTksIDI0NywgMjMwLCAzMCwgMTc4LCAxLCAyNDYsIDEyMywgMTc4LCAxLCAKLSAgICAyMzUsIDE3NSwgMjM1LCAxNzksIDIzNSwgMTY4LCA3NCwgMTc4LCAxLCA3NiwgMTc4LCAxLCAyMzUsIDEyMywgMjM1LCAxNTAsIAotICAgIDE3OCwgMSwgMjQzLCA1MCwgMTc4LCAxLCAyMzIsIDE0MiwgMjU0LCAyNTIsIDE3OCwgMSwgMjE5LCAyNTEsIDYxLCAxNzgsIAotICAgIDEsIDIzNSwgMTYwLCAyNDUsIDEyMSwgMTc4LCAxLCAyMjUsIDE2NywgMjI1LCAxODksIDIyNiwgMTA5LCAxNzgsIDEsIDI1NCwgCi0gICAgMTcyLCAyNDUsIDExOSwgMTc4LCAxLCAyMTksIDI2LCAyMjIsIDkzLCAxNzgsIDEsIDIxOSwgMTgxLCAyMzIsIDEzOCwgMjIyLCAKLSAgICA5MywgMTc4LCAxLCAyMTksIDI0NSwgMjIyLCA5MywgMTc4LCAxLCAyNTEsIDc0LCAxNzgsIDEsIDIxMCwgMTU5LCAxNzgsIDEsIAotICAgIDIxNiwgNjQsIDIxNiwgNzQsIDIxNSwgNDEsIDIxNywgMTUzLCAxNzgsIDEsIDIxOSwgMjQ0LCAyMTcsIDE1MywgMTc4LCAxLCAKLSAgICAyNDksIDY4LCAxNzgsIDEsIDI1MiwgMzksIDI1MiwgNDIsIDI1MSwgMjMyLCAyNTMsIDE2NiwgMTc4LCAxLCAyMTksIDI1MCwgCi0gICAgMjUzLCAxNjYsIDE3OCwgMSwgMjQ2LCAxMjIsIDE3OCwgMSwgMjI2LCAxNzUsIDE3OCwgMSwgMjQ1LCAyMDQsIDI0NSwgMjA2LCAKLSAgICA3NiwgMTc4LCAxLCAyMzEsIDE4MywgMjMxLCAxOTEsIDE5NCwgMTc4LCAxLCAyMzIsIDE0MCwgMTk0LCAxNzgsIDEsIDIxOSwgCi0gICAgMjQ4LCAxOTQsIDE3OCwgMSwgMjMzLCA3OSwgMjMzLCAxMjAsIDIzMiwgMTQ5LCAxNTYsIDE3OCwgMSwgMjQ2LCAxMjQsIAotICAgIDE3OCwgMSwgMjM1LCAyMzcsIDE3OCwgMSwgMjM1LCAyMzgsIDE3OCwgMSwgMjQ4LCAyMTgsIDI0OCwgMjIzLCAyNDksIDY4LCAKLSAgICAxNzgsIDEsIDIyNiwgMTQyLCAyNDUsIDY2LCA3OCwgMTc4LCAxLCAyNDUsIDIzNSwgMTc4LCAxLCAyMzUsIDE5NCwgMTc4LCAKLSAgICAxLCAyNDksIDg2LCAxNzgsIDEsIDI1MSwgMjUsIDE3OCwgMSwgMjUwLCAxOTcsIDE3OCwgMSwgMjE4LCAxNjMsIDE3OCwgMSwgCi0gICAgMjMyLCAxMzcsIDE3OCwgMSwgMjE5LCAyNDMsIDE3OCwgMSwgMjQwLCAxMTcsIDE3OCwgMSwgMjI0LCA5OSwgMTc4LCAxLCAKLSAgICAyMTEsIDE3OCwgMTc4LCAyMTksIDE1NywgMjI0LCAxNDMsIDE3OCwgMjMwLCA5MCwgMjI0LCAxNDMsIDE3OCwgMjQ5LCAxMzksIAotICAgIDIyNCwgMTQzLCAxNzgsIDI1NCwgMTQsIDg3LCAxNzgsIDIxNSwgODIsIDg3LCAxNzgsIDI1MiwgNTQsIDg3LCAyMTcsIDg0LCAKLSAgICAxLCA2MSwgMjE3LCA4NCwgMSwgNzQsIDIxNywgODQsIDEsIDY5LCAyMTcsIDg0LCAxLCAxNzYsIDIxNywgODQsIDEsIDI0MywgCi0gICAgMTQyLCAyMTcsIDg0LCAxLCAyMjksIDgyLCAyMTcsIDg0LCAxLCAyMTcsIDEwNiwgMjE3LCA4NCwgMSwgMjQ4LCAyMjksIAotICAgIDIxNywgODQsIDEsIDE5OCwgMjE3LCA4NCwgMSwgMTkxLCAyMTcsIDg0LCAxLCAyNTIsIDE5OSwgMjE3LCA4NCwgMSwgMTg2LCAKLSAgICAyMTcsIDg0LCAxLCAxOTIsIDIxNywgODQsIDEsIDIzMywgMTQxLCAyMTcsIDg0LCAxLCAyMTIsIDY1LCAyMTcsIDg0LCAxLCAKLSAgICAyMDYsIDIxNywgODQsIDEsIDE2MiwgMjE3LCA4NCwgMjUsIDUsIDc0LCAyMTcsIDg0LCAyNSwgNSwgNjksIDIxNywgODQsIDUsIAotICAgIDIxMywgMTUyLCAyNDIsIDE0LCAxLCA2MSwgMjQyLCAxNCwgMSwgNzQsIDI0MiwgMTQsIDEsIDY5LCAyNDIsIDE0LCAxLCAKLSAgICAxNzYsIDI0MiwgMTQsIDEsIDI0MywgMTQyLCAyNDIsIDE0LCAxLCAyMjksIDgyLCAyNDIsIDE0LCAxLCAyMTcsIDEwNiwgCi0gICAgMjQyLCAxNCwgMSwgMjQ4LCAyMjksIDI0MiwgMTQsIDEsIDE5OCwgMjQyLCAxNCwgMSwgMTkxLCAyNDIsIDE0LCAxLCAyNTIsIAotICAgIDE5OSwgMjQyLCAxNCwgMSwgMTg2LCAyNDIsIDE0LCAxLCAxOTIsIDI0MiwgMTQsIDEsIDIwNSwgMjQyLCAxNCwgMSwgMjMzLCAKLSAgICAxNDEsIDI0MiwgMTQsIDEsIDIxMiwgNjUsIDI0MiwgMTQsIDEsIDIwNiwgMjQyLCAxNCwgMSwgMTYyLCAyNDIsIDE0LCAyNSwgCi0gICAgNSwgNzQsIDI0MiwgMTQsIDI1LCA1LCA2OSwgMjQyLCAxNCwgNSwgMjI2LCA1MywgMjI1LCAxMjksIDIxOSwgMTU3LCAyMjQsIAotICAgIDE0MywgMjI1LCAxMjksIDUyLCAyMjQsIDE0MywgMjUxLCAxMjgsIDEsIDYxLCAyNTEsIDEyOCwgMSwgNzQsIDI1MSwgMTI4LCAKLSAgICAxLCA2OSwgMjUxLCAxMjgsIDEsIDE3NiwgMjUxLCAxMjgsIDEsIDI0MywgMTQyLCAyNTEsIDEyOCwgMSwgMjI5LCA4MiwgCi0gICAgMjUxLCAxMjgsIDEsIDIxNywgMTA2LCAyNTEsIDEyOCwgMSwgMjQ4LCAyMjksIDI1MSwgMTI4LCAxLCAxOTgsIDI1MSwgMTI4LCAKLSAgICAxLCAxOTEsIDI1MSwgMTI4LCAxLCAyNTIsIDE5OSwgMjUxLCAxMjgsIDEsIDE4NiwgMjUxLCAxMjgsIDEsIDE5MiwgMjUxLCAKLSAgICAxMjgsIDEsIDIwNSwgMjUxLCAxMjgsIDEsIDIzMywgMTQxLCAyNTEsIDEyOCwgMSwgMjEyLCA2NSwgMjUxLCAxMjgsIDEsIAotICAgIDIwNiwgMjUxLCAxMjgsIDEsIDE2MiwgMjUxLCAxMjgsIDI1LCA1LCA3NCwgMjUxLCAxMjgsIDI1LCA1LCA2OSwgMjE3LCA4MywgCi0gICAgMSwgNjEsIDIxNywgODMsIDEsIDc0LCAyMTcsIDgzLCAxLCA2OSwgMjE3LCA4MywgMSwgMTc2LCAyMTcsIDgzLCAxLCAyNDMsIAotICAgIDE0MiwgMjE3LCA4MywgMSwgMjI5LCA4MiwgMjE3LCA4MywgMSwgMjE3LCAxMDYsIDIxNywgODMsIDEsIDI0OCwgMjI5LCAKLSAgICAyMTcsIDgzLCAxLCAxOTgsIDIxNywgODMsIDEsIDE5MSwgMjE3LCA4MywgMSwgMjUyLCAxOTksIDIxNywgODMsIDEsIDE4NiwgCi0gICAgMjE3LCA4MywgMSwgMTkyLCAyMTcsIDgzLCAxLCAyMzMsIDE0MSwgMjE3LCA4MywgMSwgMjEyLCA2NSwgMjE3LCA4MywgMSwgCi0gICAgMjA2LCAyMTcsIDgzLCAyNSwgNSwgNzQsIDIxNywgODMsIDI1LCA1LCA2OSwgNzAsIDEsIDE3NiwgNzAsIDEsIDIzNCwgMTM4LCAKLSAgICA3MCwgMSwgMjM0LCAzNCwgNzAsIDEsIDIzNCwgMTExLCA3MCwgMSwgMjI5LCA5LCA3MCwgMSwgMjUxLCA0MSwgNzAsIDEsIAotICAgIDI1MCwgMTY1LCA3MCwgMSwgMjQ5LCAyNDYsIDcwLCAxLCAyNTAsIDk0LCA3MCwgMSwgMjI3LCAxMzgsIDcwLCAxLCAyNDgsIAotICAgIDIyOSwgNzAsIDEsIDIxNSwgMTQ1LCA3MCwgMSwgMjQ3LCAxNTMsIDcwLCAxLCAyMTUsIDE0MCwgNzAsIDEsIDIyOCwgODUsIAotICAgIDcwLCAxLCAyMTcsIDEwNiwgNzAsIDEsIDIxNiwgMjA5LCA3MCwgMSwgMTEyLCA3MCwgMSwgMjE2LCAxNTcsIDcwLCAxLCAKLSAgICAyMjgsIDc5LCA3MCwgMSwgMjUyLCAxOTksIDcwLCAxLCAyMjUsIDE1MCwgNzAsIDEsIDIyNSwgMTksIDcwLCAxLCAyMjUsIAotICAgIDEyNCwgNzAsIDEsIDIzMCwgMTY2LCA3MCwgMSwgMjEwLCAyNDQsIDcwLCAxLCAyMjIsIDIxMywgNzAsIDEsIDIzMiwgMTYyLCAKLSAgICA3MCwgMSwgMjEzLCAxMzgsIDcwLCAxLCAyMjAsIDEwNCwgNzAsIDEsIDIxOCwgMTg2LCA3MCwgMSwgMjA2LCA3MCwgMSwgCi0gICAgMTYyLCA3MCwgMSwgMjMzLCAxNDEsIDcwLCAxLCAyMjQsIDkxLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDc3LCA3MCwgMjM1LCAKLSAgICAyNTAsIDI1LCAyMjQsIDkwLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDU2LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDUxLCAKLSAgICA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDMzLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDUsIDcwLCAyMzUsIDI1MCwgMjUsIAotICAgIDIyMywgMjQ5LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjMsIDI0OCwgNzAsIDIzNSwgMjUwLCAyNSwgMjIyLCAxMDIsIDcwLCAKLSAgICAyMzUsIDI1MCwgMjUsIDIyMiwgOTUsIDcwLCAyMzUsIDI1MCwgMjUsIDIzMiwgNjcsIDcwLCAyMzUsIDI1MCwgMjUsIDIzMiwgCi0gICAgNTcsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNzIsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgODMsIDcwLCAyMzUsIDI1MCwgCi0gICAgMjUsIDIyNCwgNDEsIDIxNSwgNDksIDExMSwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA0MSwgMjE1LCA0OSwgMTA1LCA3MCwgCi0gICAgMjM1LCAyNTAsIDI1LCAyMjQsIDczLCA3MCwgMjUsIDIzNSwgMjM2LCAyNTQsIDUzLCA3MCwgMjUsIDIzNSwgMjM2LCAyNTUsIAotICAgIDgyLCA3MCwgMjUsIDUsIDI1NSwgODIsIDcwLCAyNSwgNSwgNzQsIDcwLCAyNSwgNSwgMjM2LCA0MCwgNzAsIDI1LCA1LCAKLSAgICAyMTEsIDExNywgNzAsIDI1LCA1LCAyMTAsIDE2OSwgNzAsIDI1LCA1LCA2OSwgNzAsIDI1LCA1LCAyMTQsIDExOCwgNzAsIAotICAgIDI1LCA1LCAyMTQsIDIyOSwgNzAsIDI1LCA1LCAyMjYsIDIzOCwgNzAsIDI1LCA1LCAxOTIsIDcwLCAyNSwgNSwgMjM2LCA2NywgCi0gICAgNzAsIDI1LCA1LCA3NiwgNzAsIDI1LCA1LCAyNTQsIDI1MiwgNzAsIDI1LCA1LCAyNTQsIDIxMCwgNzAsIDI1LCA1LCAyMjYsIAotICAgIDE4NywgNzAsIDI1LCA1LCAyNTMsIDIwMCwgNzAsIDUsIDIyOCwgMjExLCA3MCwgNSwgMjIzLCAxMjksIDcwLCA1LCAyMTAsIAotICAgIDE4MCwgNzAsIDUsIDIzMCwgNTcsIDcwLCA1LCAyMTUsIDIxNCwgNzAsIDUsIDI1MiwgMTUxLCA3MCwgNSwgMjIyLCAyMDgsIAotICAgIDcwLCA1LCAyMTYsIDQxLCA3MCwgNSwgMjM0LCAyNDcsIDcwLCA1LCAyNTQsIDIxMiwgNzAsIDUsIDIyMSwgMjQ2LCAyMjEsIAotICAgIDI0MCwgNzAsIDUsIDIxMywgMTQ5LCA3MCwgNSwgMjQ5LCAyNDAsIDcwLCA1LCAyNTIsIDEyNSwgNzAsIDUsIDIzNCwgMTMxLCAKLSAgICA3MCwgNSwgMjUyLCAxNDUsIDcwLCA1LCAyNTEsIDE3LCAyMjUsIDc1LCAyMzMsIDE5MywgNzAsIDUsIDIzMywgMzYsIDIxNiwgCi0gICAgMTgsIDcwLCA1LCAyNTIsIDI4LCA3MCwgNSwgMjI1LCAxMjYsIDIzMCwgMTA0LCA3MCwgNSwgMjM0LCAxNSwgNzAsIDI0OSwgCi0gICAgMTA2LCAxNiwgMjIzLCAzMSwgNzAsIDUsIDI1MywgMTgyLCA3MCwgNSwgMjUzLCAyMDMsIDcwLCAyMSwgMjEwLCA4NiwgNzAsIAotICAgIDIxLCAxMTEsIDcwLCAyMSwgMTA1LCA3MCwgMjEsIDE1OCwgNzAsIDIxLCAxNjEsIDcwLCAyMSwgMTkwLCA3MCwgMjEsIDE5NSwgCi0gICAgNzAsIDIxLCAxOTksIDcwLCAyMSwgMTk2LCA3MCwgMjEsIDIwMSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjE5LCAKLSAgICA0NSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjMwLCA3NiwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI1LCAKLSAgICA3NCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjUyLCA1NywgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjUxLCAKLSAgICAxMTEsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjE4LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIAotICAgIDIxMiwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTAsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgCi0gICAgMjE2LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxNCwgODMsIDI1MSwgMjQ0LCA4MywgMjQ1LCAxNzEsIDgzLCAKLSAgICAyNDksIDIyNywgODMsIDI0MywgMjM2LCAyMTgsIDEzMSwgODMsIDI0OSwgMjM0LCA4MywgMjQ0LCAxOSwgMjQ3LCAxMjYsIAotICAgIDgzLCAyMTYsIDQwLCAyMTksIDU0LCAyNDAsIDE3NSwgODMsIDIxOSwgMTkyLCAzLCAyNTEsIDE4MCwgMjMxLCAxNTksIDgzLCAKLSAgICAyMzEsIDE4OCwgMjQ5LCAyMjcsIDgzLCAyMzEsIDE4OCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MywgMjI4LCAxOTYsIDgzLCAKLSAgICAyNDQsIDUsIDQ1LCAyMjEsIDE1OSwgMTExLCA4MywgMjQ0LCA1LCA0NSwgMjIxLCAxNTksIDEwNSwgODMsIDI0NCwgNSwgNDUsIAotICAgIDIyMSwgMTU5LCAxNTgsIDgzLCAyNSwgMjIwLCAxMzksIDgzLCAyMSwgMjEwLCA4NiwgODMsIDIxLCAxMTEsIDgzLCAyMSwgCi0gICAgMTA1LCA4MywgMjEsIDE1OCwgODMsIDIxLCAxNjEsIDgzLCAyMSwgMTkwLCA4MywgMjEsIDE5NSwgODMsIDIxLCAxOTksIDgzLCAKLSAgICAyMSwgMTk2LCA4MywgMjEsIDIwMSwgODMsIDEsIDYxLCA4MywgMSwgNzYsIDgzLCAxLCA3NCwgODMsIDEsIDc4LCA4MywgMSwgCi0gICAgNjksIDgzLCAxLCAyMjYsIDIzOCwgODMsIDEsIDIxNCwgMjE0LCA4MywgMSwgMjQ1LCAyMTcsIDgzLCAxLCAxOTgsIDgzLCAxLCAKLSAgICAyNTQsIDEyMywgODMsIDEsIDI1MiwgMTk5LCA4MywgMSwgMTkxLCA4MywgMSwgMjI0LCA5MSwgODMsIDEsIDI0MywgMTQyLCAKLSAgICA4MywgMSwgMTg2LCA4MywgMSwgMjMzLCAxNDEsIDgzLCAxLCAyMDYsIDgzLCAxLCAyMjAsIDEwNCwgODMsIDEsIDIxNywgCi0gICAgMTA2LCA4MywgMSwgMjQ4LCAyMjksIDgzLCAxLCAyNTAsIDE2NSwgODMsIDEsIDIzNSwgMTQ3LCA4MywgMSwgMTkyLCA4MywgCi0gICAgMSwgMjA1LCA4MywgMSwgMjEyLCA2NSwgODMsIDEsIDI0NCwgMjA0LCA4MywgMSwgMTc2LCA4MywgMSwgMjM0LCAxMzgsIDgzLCAKLSAgICAxLCAyMTUsIDE4NCwgODMsIDEsIDIxMCwgMTE2LCA4MywgMSwgMjQyLCA1MywgODMsIDEsIDIxMCwgMTYsIDgzLCAxLCAyMzMsIAotICAgIDQsIDgzLCAxLCAyMTAsIDY5LCA4MywgMSwgMjUwLCAxMTgsIDgzLCAxLCAyMTYsIDQwLCAyMDAsIDI1LCA1MCwgODMsIDEsIAotICAgIDIxNiwgNDAsIDc2LCA4MywgMSwgMjE2LCA0MCwgNzQsIDgzLCAxLCAyMTYsIDQwLCA3OCwgODMsIDEsIDIxNiwgNDAsIDY5LCAKLSAgICA4MywgMSwgMjE2LCA0MCwgMjI2LCAyMzgsIDgzLCAxLCAyMTYsIDQwLCAyMTQsIDIxNCwgODMsIDEsIDIxNiwgNDAsIDI1NCwgCi0gICAgMTIzLCA4MywgMSwgMjE2LCA0MCwgMjUyLCAxOTksIDgzLCAxLCAyMTYsIDQwLCAxOTEsIDgzLCAxLCAyMTYsIDQwLCAyMjQsIAotICAgIDkxLCA4MywgMSwgMjE2LCA0MCwgMjQzLCAxNDIsIDgzLCAxLCAyMTYsIDQwLCAxODYsIDgzLCAxLCAyMTYsIDQwLCAyMTcsIAotICAgIDEwNiwgODMsIDEsIDIxNiwgNDAsIDI0OCwgMjI5LCA4MywgMSwgMjE2LCA0MCwgMjUwLCAxNjUsIDgzLCAxLCAyMTYsIDQwLCAKLSAgICAyMzUsIDE0NywgODMsIDEsIDIxNiwgNDAsIDIxNSwgMTg0LCA4MywgMSwgMjE2LCA0MCwgMTkyLCA4MywgMSwgMjE2LCA0MCwgCi0gICAgMjEyLCA2NSwgODMsIDEsIDIxNiwgNDAsIDE3NiwgODMsIDEsIDIxNiwgNDAsIDI0MywgMTM5LCA4MywgMSwgMjE2LCA0MCwgCi0gICAgMjQyLCA1MywgODMsIDEsIDIxNiwgNDAsIDIzNSwgMTEzLCA4MywgMSwgMjE2LCA0MCwgMjI4LCAyMzYsIDgzLCAxLCAyMTYsIAotICAgIDQwLCAyNDYsIDQ2LCA4MywgMSwgMjE5LCAxOTIsIDc2LCA4MywgMSwgMjE5LCAxOTIsIDc0LCA4MywgMSwgMjE5LCAxOTIsIAotICAgIDIzNSwgMTU4LCA4MywgMSwgMjE5LCAxOTIsIDIxNCwgMjE0LCA4MywgMSwgMjE5LCAxOTIsIDY5LCA4MywgMSwgMjE5LCAKLSAgICAxOTIsIDI1NCwgMTIzLCA4MywgMSwgMjE5LCAxOTIsIDE3NiwgODMsIDEsIDIxOSwgMTkyLCAyNDMsIDE0MiwgODMsIDEsIAotICAgIDIxOSwgMTkyLCAxNjIsIDgzLCAxLCAyMTksIDE5MiwgMTkxLCA4MywgMSwgMjE5LCAxOTIsIDIyMCwgMTA0LCA4MywgMSwgCi0gICAgMjE5LCAxOTIsIDIxNywgMTA2LCA4MywgMSwgMjE5LCAxOTIsIDI0OCwgMjI5LCA4MywgMSwgMjE5LCAxOTIsIDIzNSwgMTQ3LCAKLSAgICA4MywgMSwgMjE5LCAxOTIsIDI0NCwgMjA0LCA4MywgMSwgMjE5LCAxOTIsIDI0MywgMTM5LCA4MywgMSwgMjE5LCAxOTIsIAotICAgIDI0MiwgNTMsIDgzLCAxLCAyMTksIDE5MiwgMjE1LCAxODQsIDgzLCAxLCAyMTksIDE5MiwgMjEwLCAxMTYsIDgzLCAxLCAKLSAgICAyMTksIDE5MiwgMjIzLCAxODcsIDgzLCAxLCAyMTksIDE5MiwgMjUwLCAxNjUsIDgzLCAxLCAyMTksIDE5MiwgMjEwLCA4MiwgCi0gICAgODMsIDEsIDIzMSwgMTg4LCA3NCwgODMsIDEsIDIzMSwgMTg4LCAxNzYsIDgzLCAxLCAyMzEsIDE4OCwgMjA1LCA4MywgMSwgCi0gICAgMjMxLCAxODgsIDI0NCwgMjA0LCA4MywgMSwgMjMxLCAxODgsIDIxMCwgODIsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIAotICAgIDI1NCwgODQsIDExMSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEzLCAxNDgsIDExMSwgODMsIDEsIDI1NCwgMTcxLCAKLSAgICAyNDMsIDEyMywgMjQ4LCAxOTQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNzEsIAotICAgIDI0MywgMTIzLCAyMzUsIDIwMCwgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1MiwgMTYzLCA4MywgMSwgCi0gICAgMjU0LCAxNzEsIDI0MywgMTIzLCAxMzQsIDI1MiwgMTYzLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCA2MSwgODMsIDEsIAotICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgNzQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDE3NiwgODMsIDEsIDI1NCwgMTcxLCAKLSAgICAyNDMsIDEyMywgMjI5LCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUxLCA0MSwgODMsIDEsIDI1NCwgMTcxLCAKLSAgICAyNDMsIDEyMywgMjE1LCAxNTcsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNSwgMTQ1LCA4MywgMSwgMjU0LCAxNzEsIAotICAgIDI0MywgMTIzLCAyNDgsIDE0MywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjI4LCAxMTUsIDgzLCAxLCAyNTQsIDE3MSwgCi0gICAgMjQzLCAxMjMsIDIxNywgMTA2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDIyOSwgODMsIDEsIDI1NCwgMTcxLCAKLSAgICAyNDMsIDEyMywgMTkxLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMjUsIDE1MCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIAotICAgIDEyMywgMjE4LCAyMjUsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAKLSAgICAxMjMsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTQsIDIxOCwgODMsIDEsIDIxNiwgNDAsIDI1NCwgCi0gICAgMTcxLCAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyMTYsIDQwLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAKLSAgICAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDMsIDAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgCi0gICAgMTIzLCAyMjksIDgyLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUxLCA0MSwgODMsIDEsIDIzMSwgCi0gICAgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIzNSwgMTIwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgCi0gICAgMjE1LCAxNTcsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDEyNywgODMsIDEsIDIzMSwgMTg4LCAKLSAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNywgMTA2LCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAKLSAgICAzMywgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxOCwgMjI1LCA4MywgMSwgMjMxLCAxODgsIDI1NCwgCi0gICAgMTcxLCAyNDMsIDEyMywgMjQ5LCA4MCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAKLSAgICAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDExNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgCi0gICAgMTYzLCA2OSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMTYzLCAxOTIsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIAotICAgIDI0MywgMTIzLCAyNTIsIDI2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDIxOSwgODMsIDEsIDIzMSwgMTg4LCAKLSAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDIzMywgNCwgMTgsIDE5LCAyMjYsIDExMywgMTgsIDE5LCAyNTMsIDE3NSwgMTgsIDE5LCAKLSAgICAyNTUsIDM3LCAxOCwgMTksIDIxMiwgMjUsIDE4LCAxOSwgMjI0LCAyMjQsIDE4LCAxOSwgMjI1LCAyMzMsIDE4LCAxOSwgCi0gICAgMjI0LCAxMDgsIDE4LCAxOSwgMjE3LCAzMiwgMTgsIDE5LCAyMzQsIDE5NSwgMTgsIDE5LCAyMzMsIDE4NSwgMTgsIDE5LCAKLSAgICAyMzEsIDEzNywgMTgsIDE5LCAyMjgsIDQyLCAxOCwgMTksIDIyOSwgMTg2LCAxOCwgMTksIDIzMywgNzQsIDE4LCAxOSwgCi0gICAgMjE5LCAyNCwgMTgsIDE5LCAyMjEsIDIxMywgMTgsIDE5LCAyMTksIDIzNCwgMTgsIDE5LCAyMjAsIDY4LCAxOCwgMTksIAotICAgIDIxOSwgMjAzLCAxOCwgMTksIDIxMCwgMjIwLCAxOCwgMTksIDIxMSwgNTIsIDE4LCAxOSwgMjIzLCAxMzcsIDE4LCAxOSwgCi0gICAgMjI3LCAxNzUsIDE4LCAxOSwgMjI2LCAyMjAsIDIyNywgMTc1LCAxOCwgMTksIDIyNywgMTc0LCAxOCwgMTksIDIyNiwgMjIwLCAKLSAgICAyMjcsIDE3NCwgMTgsIDE5LCAyMjcsIDE3MywgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzMsIDE4LCAxOSwgMjI3LCAxNzIsIAotICAgIDE4LCAxOSwgMjI2LCAyMjAsIDIyNywgMTcyLCAxOCwgMTksIDIyMiwgMTA3LCAxOCwgMTksIDIyMiwgMTA2LCAxOCwgMTksIAotICAgIDIyMiwgMTA1LCAxOCwgMTksIDIyMiwgMTA0LCAxOCwgMTksIDIyMiwgMTAzLCAxOCwgMTksIDIyMiwgMTExLCAxOCwgMTksIAotICAgIDIyNiwgMjIwLCAyMjYsIDEwOSwgMTgsIDE5LCAyMjYsIDIyMCwgMjE3LCAxNTMsIDE4LCAxOSwgMjI2LCAyMjAsIDIzNSwgCi0gICAgMjksIDE4LCAxOSwgMjI2LCAyMjAsIDI1MSwgNzQsIDE4LCAxOSwgMjI2LCAyMjAsIDE5NCwgMTgsIDE5LCAyMjYsIDIyMCwgCi0gICAgMjMwLCAzMCwgMTgsIDE5LCAyMjYsIDIyMCwgMjIyLCA5MywgMTgsIDE5LCAyMjYsIDIyMCwgMjIwLCAxMDYsIDE4LCAxOSwgCi0gICAgMjQ1LCAyMjcsIDIxMiwgOTgsIDE4LCAxOSwgMjEyLCA3LCAyMTIsIDk4LCAxOCwgMTksIDQwLCA0LCAyMjIsIDIzNiwgMTgsIAotICAgIDE5LCA0MCwgMjIzLCAxNjAsIDI0NywgMTI4LCAxOCwgMTksIDIyMywgMjI2LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTksIDIzMiwgCi0gICAgMTMzLCAxOCwgMTksIDE1OSwgMjMzLCAxNDAsIDE4LCAxOSwgMjE2LCAxMjcsIDE4LCAxOSwgMjE2LCAxMjksIDE4LCAxOSwgCi0gICAgMjE1LCAxMzcsIDE4LCAxOSwgMjE1LCAxMzksIDE4LCAxOSwgMjE1LCAxNDQsIDE4LCAxOSwgMjE2LCA1MCwgMTgsIDE5LCAKLSAgICAyMTYsIDUyLCAxOCwgMTksIDIyMSwgMjExLCAyMTksIDIwOCwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCAzLCAxOCwgMTksIAotICAgIDIyMSwgMjExLCAyNDEsIDYwLCAxOCwgMTksIDczLCAyNDIsIDgwLCAxOCwgMTksIDczLCAyNDgsIDYwLCAyNDMsIDYyLCAxOCwgCi0gICAgMTksIDczLCAyNDMsIDEzOSwgMTgsIDE5LCA3MywgMjQyLCA4NSwgMTgsIDE5LCAyMjEsIDIxMSwgMjM1LCAzOSwgMTgsIDE5LCAKLSAgICA3MywgMjM1LCAzNywgMTgsIDE5LCAyNTIsIDc2LCAyNDgsIDYwLCAxNTYsIDE4LCAxOSwgMjUyLCA3NiwgMjQ4LCA2MCwgCi0gICAgMTUzLCAxOCwgMTksIDczLCAyNDgsIDU1LCAyMjIsIDkzLCAyMzIsIDIyOSwgMjEzLCAxMjIsIDIzMywgMTYsIDIzMiwgMjI5LCAKLSAgICAxLCAxNzYsIDIzMiwgMjI5LCAxLCAyMzQsIDEzOCwgMjMyLCAyMjksIDEsIDI0MywgMTQyLCAyMzIsIDIyOSwgMSwgMjQzLCAKLSAgICAwLCAyMzIsIDIyOSwgMSwgMjI5LCA4MiwgMjMyLCAyMjksIDEsIDI1MSwgNDEsIDIzMiwgMjI5LCAxLCAyNTAsIDE2NSwgCi0gICAgMjMyLCAyMjksIDEsIDIzNSwgMTQ3LCAyMzIsIDIyOSwgMSwgMjM1LCAxMjAsIDIzMiwgMjI5LCAxLCAyMTEsIDcxLCAyMzIsIAotICAgIDIyOSwgMSwgMjE3LCAxMDYsIDIzMiwgMjI5LCAxLCAyMTYsIDIwOSwgMjMyLCAyMjksIDEsIDI0OCwgMjI5LCAyMzIsIDIyOSwgCi0gICAgMSwgMjQ4LCAzMywgMjMyLCAyMjksIDEsIDE5OCwgMjMyLCAyMjksIDEsIDE5MSwgMjMyLCAyMjksIDEsIDIyNSwgMTUwLCAKLSAgICAyMzIsIDIyOSwgMSwgMjUyLCAxOTksIDIzMiwgMjI5LCAxLCAyNTIsIDI2LCAyMzIsIDIyOSwgMSwgMTg2LCAyMzIsIDIyOSwgCi0gICAgMSwgMTkyLCAyMzIsIDIyOSwgMSwgMjA1LCAyMzIsIDIyOSwgMSwgMjMzLCAxNDEsIDIzMiwgMjI5LCAxLCAyMTIsIDY1LCAKLSAgICAyMzIsIDIyOSwgMSwgMjIwLCAxMDQsIDIzMiwgMjI5LCAxLCAyMTgsIDIyNSwgMjMyLCAyMjksIDEsIDIwNiwgMjMyLCAyMjksIAotICAgIDEsIDE2MiwgMjMyLCAyMjksIDI1LCA1LCA2MSwgMjMyLCAyMjksIDI1LCA1LCA3NCwgMjMyLCAyMjksIDI1LCA1LCA2OSwgCi0gICAgMjMyLCAyMjksIDI1LCA1LCAyNDUsIDIxNywgMjMyLCAyMjksIDI1LCA1LCAyNTQsIDIxMCwgMjMyLCAyMjksIDI1LCA1LCAKLSAgICAyMjYsIDE4NywgMjMyLCAyMjksIDI1LCA1LCAyNTMsIDIwMCwgMjMyLCAyMjksIDI1LCA1LCA3NiwgMjMyLCAyMjksIDI1LCAKLSAgICA1LCA3OCwgMjMyLCAyMjksIDIxOCwgNzQsIDEsIDE5MiwgMjMyLCAyMjksIDIxOCwgNzQsIDEsIDIwNSwgMjMyLCAyMjksIAotICAgIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDIzMiwgMjI5LCA0LCAxLCAxNzYsIDIzMiwgMjI5LCA0LCAxLCAyMjksIDgyLCAyMzIsIAotICAgIDIyOSwgNCwgMSwgMjU0LCA4MywgMjMyLCAyMjksIDQsIDEsIDIxNywgMTA2LCAyMzIsIDIyOSwgNCwgMSwgMTk4LCAyMzIsIAotICAgIDIyOSwgNCwgMSwgMTkxLCAyMzIsIDIyOSwgNCwgMSwgMTg2LCAyMzIsIDIyOSwgNCwgMSwgMjA1LCAyMzIsIDIyOSwgNCwgMSwgCi0gICAgMjMzLCAxNDEsIDIzMiwgMjI5LCA1LCAyMzAsIDk0LCAyMzIsIDIyOSwgNSwgMjM0LCAxNzcsIDIzMiwgMjI5LCA1LCAyMjIsIAotICAgIDM0LCAyMzIsIDIyOSwgNSwgMjMyLCAxMzMsIDIzMiwgMjI5LCAyNDUsIDM5LCA3OSwgMjMyLCAyMjksIDIyNCwgMTYsIDc5LCAKLSAgICAyMzIsIDIyOSwgMjEsIDIxMCwgODYsIDIzMiwgMjI5LCAyMSwgMTExLCAyMzIsIDIyOSwgMjEsIDEwNSwgMjMyLCAyMjksIAotICAgIDIxLCAxNTgsIDIzMiwgMjI5LCAyMSwgMTYxLCAyMzIsIDIyOSwgMjEsIDE5MCwgMjMyLCAyMjksIDIxLCAxOTUsIDIzMiwgCi0gICAgMjI5LCAyMSwgMTk5LCAyMzIsIDIyOSwgMjEsIDE5NiwgMjMyLCAyMjksIDIxLCAyMDEsIDM5LCAyMzMsIDY1LCAxLCAxNzYsIAotICAgIDM5LCAyMzMsIDY1LCAxLCAyMTEsIDE2NSwgMzksIDIzMywgNjUsIDEsIDIyOSwgODIsIDM5LCAyMzMsIDY1LCAxLCAyMTUsIAotICAgIDE4NCwgMzksIDIzMywgNjUsIDEsIDIwNiwgMzksIDIzMywgNjUsIDEsIDE5MiwgMzksIDIzMywgNjUsIDEsIDIxNywgMTA2LCAKLSAgICAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyMDksIDM5LCAyMzMsIDY1LCAxLCAyMzMsIDE0MSwgMzksIDIzMywgNjUsIDEsIDE5MSwgCi0gICAgMzksIDIzMywgNjUsIDEsIDIyNSwgMTUwLCAzOSwgMjMzLCA2NSwgMSwgMTg2LCAzOSwgMjMzLCA2NSwgMSwgMjQ0LCAyMDQsIAotICAgIDM5LCAyMzMsIDY1LCAxLCAyMTQsIDI3LCAzOSwgMjMzLCA2NSwgMSwgMTYyLCAzOSwgMjMzLCA2NSwgMSwgMjI0LCA5MSwgCi0gICAgMzksIDIzMywgNjUsIDEsIDIzNCwgMTM4LCAzOSwgMjMzLCA2NSwgMSwgMjE1LCAxNzYsIDM5LCAyMzMsIDY1LCAxLCAxOTgsIAotICAgIDM5LCAyMzMsIDY1LCAxLCA2MSwgMzksIDIzMywgNjUsIDEsIDc0LCAzOSwgMjMzLCA2NSwgMSwgMjQ1LCAyMTcsIDM5LCAKLSAgICAyMzMsIDY1LCAxLCAyNDUsIDIwNSwgMzksIDIzMywgNjUsIDEsIDY5LCAzOSwgMjMzLCA2NSwgMSwgMjI2LCAxODcsIDM5LCAKLSAgICAyMzMsIDY1LCAxLCA3OCwgMzksIDIzMywgNjUsIDEsIDIxNCwgMjE0LCAzOSwgMjMzLCA2NSwgMSwgNzYsIDM5LCAyMzMsIAotICAgIDY1LCAxLCAyNTMsIDE5OCwgMzksIDIzMywgNjUsIDEsIDI1NCwgMjEwLCAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyOSwgMzksIAotICAgIDIzMywgNjUsIDEsIDIxNiwgMjgsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI3LCAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNiwgCi0gICAgMzksIDIzMywgNjUsIDEsIDIxNiwgMjUsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjQsIDkxLCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDEyMSwgMjI0LCA5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE3NiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTY1LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI5LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE3NiwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjEsIDIxMSwgMTY1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI5LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIAotICAgIDIxNSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkyLCAxNjYsIDM5LCAKLSAgICAxNzMsIDEsIDEyMSwgMjE1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAxOTIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTcsIDEwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNiwgMjA5LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMTk4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE3LCAxMDYsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTIxLCAyMTYsIDIwOSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5OCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5MSwgMTY2LCAKLSAgICAzOSwgMTczLCAxLCAxMjUsIDIyNSwgMTUwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTg2LCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDEyMSwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI1LCAxNTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxODYsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAyNDQsIDIwNCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAyMzMsIDE0MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI0NCwgMjA0LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTQxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTYyLCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMjQ4LCAyMjksIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNTIsIDE5OSwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjEsIDE2MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI0OCwgMjI5LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjUyLCAKLSAgICAxOTksIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMzMsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTM4LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTEsIDEzOCwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDIxOCwgODMsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTgsIDgzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNSwgCi0gICAgMjE5LCAyNDEsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgODIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIzNiwgNDAsIAotICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDY5LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDExOCwgMTY2LCAzOSwgMTczLCAyNSwgCi0gICAgNSwgNzYsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NCwgMjUyLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3OCwgMTY2LCAzOSwgCi0gICAgMTczLCAyNSwgNSwgMjI3LCA0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDIxNCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgCi0gICAgMjUzLCAxNzUsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgMzcsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTExLCAKLSAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjYsIDExMywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI3LCAxLCAxNjYsIDM5LCAxNzMsIAotICAgIDI1LCA1LCAyMTQsIDIxMCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM1LCAxNTgsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIxNCwgCi0gICAgMTA1LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMjksIDg0LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMzAsIDMwLCAxNjYsIDM5LCAKLSAgICAxNzMsIDEsIDQwLCAxOTQsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzNSwgMjksIDE2NiwgMzksIDE3MywgMSwgNDAsIDI0OSwgCi0gICAgNjgsIDE2NiwgMzksIDE3MywgMSwgNDAsIDI1MywgMTY2LCAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNjMsIDE2NiwgMzksIAotICAgIDE3MywgMTM4LCAyMzEsIDE2MiwgMTY2LCAzOSwgMTczLCAyMSwgMjEwLCA4NiwgMTY2LCAzOSwgMTczLCAyMSwgMTExLCAKLSAgICAxNjYsIDM5LCAxNzMsIDIxLCAxMDUsIDE2NiwgMzksIDE3MywgMjEsIDE1OCwgMTY2LCAzOSwgMTczLCAyMSwgMTYxLCAxNjYsIAotICAgIDM5LCAxNzMsIDIxLCAxOTAsIDE2NiwgMzksIDE3MywgMjEsIDE5NSwgMTY2LCAzOSwgMTczLCAyMSwgMTk5LCAxNjYsIDM5LCAKLSAgICAxNzMsIDIxLCAxOTYsIDE2NiwgMzksIDE3MywgMjEsIDIwMSwgMTY2LCAzOSwgMTczLCA4OSwgMjEsIDExMSwgMTY2LCAzOSwgCi0gICAgMTczLCA1LCAyMzMsIDEyNiwgMTY2LCAzOSwgMTczLCA1LCAyMzMsIDEyNSwgNzAsIDE2LCAyMjUsIDI0MCwgNzAsIDE2LCAKLSAgICAyMzAsIDc3LCAyMzQsIDMxLCA3MCwgMTYsIDIyNSwgNzUsIDIzNCwgMzEsIDcwLCAxNiwgMjUyLCA1OCwgMjM0LCAzMSwgNzAsIAotICAgIDE2LCAyNTEsIDExMiwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxOSwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxMywgMjM0LCAKLSAgICAzMSwgNzAsIDE2LCAyMjQsIDIxMSwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxNywgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIAotICAgIDIxNSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE4MSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3NywgMjM0LCAzMSwgNzAsIAotICAgIDE2LCAyNDgsIDE3NiwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3OSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3OCwgMjM0LCAKLSAgICAzMSwgNzAsIDE2LCAyNDgsIDE3NSwgMjM0LCAzMSwgNzAsIDE2LCAyMTUsIDg3LCA3MCwgMTYsIDIzMCwgNzcsIDIyMiwgCi0gICAgMjA3LCA3MCwgMTYsIDIyNSwgNzUsIDIyMiwgMjA3LCA3MCwgMTYsIDI1MiwgNTgsIDIyMiwgMjA3LCA3MCwgMTYsIDI1MSwgCi0gICAgMTEyLCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxOSwgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTMsIDIyMiwgMjA3LCAKLSAgICA3MCwgMTYsIDIyNCwgMjExLCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxNywgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTUsIAotICAgIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTgxLCAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE3NywgMjIyLCAyMDcsIDcwLCAxNiwgCi0gICAgMjQ4LCAxNzYsIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc5LCAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE3OCwgMjIyLCAKLSAgICAyMDcsIDcwLCAxNiwgMjQ4LCAxNzUsIDIyMiwgMjA3LCAyNTEsIDEyOSwgMSwgMTc2LCAyNTEsIDEyOSwgMSwgMjQzLCAxNDIsIAotICAgIDI1MSwgMTI5LCAxLCAyMjksIDgyLCAyNTEsIDEyOSwgMSwgMjI5LCAyNywgMjUxLCAxMjksIDEsIDE5MSwgMjUxLCAxMjksIAotICAgIDEsIDI1MiwgMTk5LCAyNTEsIDEyOSwgMSwgMTg2LCAyNTEsIDEyOSwgMSwgMjMwLCAxMTAsIDI1MSwgMTI5LCAxLCAyMTcsIAotICAgIDEwNiwgMjUxLCAxMjksIDEsIDI0OCwgMjI5LCAyNTEsIDEyOSwgMSwgMTk4LCAyNTEsIDEyOSwgMSwgMjI4LCA0MSwgMjUxLCAKLSAgICAxMjksIDEsIDI1MSwgNDEsIDI1MSwgMTI5LCAxLCAyMzUsIDE0NywgMjUxLCAxMjksIDEsIDIyNywgMTY5LCAyNTEsIDEyOSwgCi0gICAgMSwgMjI3LCAxNjIsIDI1MSwgMTI5LCAxLCAxOTIsIDI1MSwgMTI5LCAxLCAyMDUsIDI1MSwgMTI5LCAxLCAyMzMsIDE0MSwgCi0gICAgMjUxLCAxMjksIDEsIDIxNCwgMjcsIDI1MSwgMTI5LCAxLCAyMDYsIDI1MSwgMTI5LCAxLCA2MSwgMjUxLCAxMjksIDEsIAotICAgIDE2MiwgMjUxLCAxMjksIDI1LCA1LCA3NCwgMjUxLCAxMjksIDI1LCA1LCA2OSwgMjUxLCAxMjksIDI1LCA1LCA3NiwgMjUxLCAKLSAgICAxMjksIDI1LCA1LCA3OCwgMjUxLCAxMjksIDI1LCA1LCAyNTQsIDI1MiwgMjUxLCAxMjksIDIyNiwgNjQsIDI1MSwgMTI5LCAKLSAgICAyNDUsIDE1MSwgNjQsIDIyMSwgMTc0LCAzOSwgODksIDEsIDEyNSwgMTc2LCAzOSwgODksIDEsIDEyNSwgMjM0LCAxMzgsIAotICAgIDM5LCA4OSwgMSwgMTI1LCAyMzMsIDE3NywgMzksIDg5LCAxLCAxMjEsIDE3NiwgMzksIDg5LCAxLCAxMjEsIDIzMywgMTc3LCAKLSAgICAzOSwgODksIDEsIDEyMSwgMjM0LCAxMzgsIDM5LCA4OSwgMSwgMjI5LCA4MiwgMzksIDg5LCAxLCAxMjUsIDI1MSwgNDEsIAotICAgIDM5LCA4OSwgMSwgMTI1LCAyNTAsIDE2NSwgMzksIDg5LCAxLCAxMjEsIDI1MSwgNDEsIDM5LCA4OSwgMSwgMTIxLCAyMDYsIAotICAgIDM5LCA4OSwgMSwgMTIxLCAyNTAsIDE2NSwgMzksIDg5LCAxLCAyMjcsIDE2OSwgMzksIDg5LCAxLCAyMjMsIDE0MywgMzksIAotICAgIDg5LCAxLCAxMjUsIDIyMywgMTQxLCAzOSwgODksIDEsIDI0OCwgMjI5LCAzOSwgODksIDEsIDEyMSwgMjIzLCAxNDEsIDM5LCAKLSAgICA4OSwgMSwgMjIzLCAxNTIsIDM5LCA4OSwgMSwgMTI1LCAyMTcsIDEwNiwgMzksIDg5LCAxLCAxMjUsIDIxNiwgMjA5LCAzOSwgCi0gICAgODksIDEsIDEyMSwgMjE3LCAxMDYsIDM5LCA4OSwgMSwgMTIxLCAyMTYsIDIwOSwgMzksIDg5LCAxLCAxOTgsIDM5LCA4OSwgCi0gICAgMSwgMjUyLCAxOTksIDM5LCA4OSwgMSwgMTI1LCAxOTEsIDM5LCA4OSwgMSwgMTI1LCAyMjUsIDE1MCwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDI0NCwgMjA0LCAzOSwgODksIDEsIDEyMSwgMTkxLCAzOSwgODksIDEsIDEyMSwgMjQ0LCAyMDQsIDM5LCA4OSwgMSwgCi0gICAgMTIxLCAyMjUsIDE1MCwgMzksIDg5LCAxLCAxODYsIDM5LCA4OSwgMSwgMTIxLCAxOTIsIDM5LCA4OSwgMSwgMTI1LCAxOTIsIAotICAgIDM5LCA4OSwgMSwgMjA1LCAzOSwgODksIDEsIDIyMiwgMTM5LCAzOSwgODksIDEsIDIzMywgMTQxLCAzOSwgODksIDEsIDIzMiwgCi0gICAgOTgsIDM5LCA4OSwgMSwgMjEyLCA2NSwgMzksIDg5LCAxLCAxMjUsIDIyMCwgMTA0LCAzOSwgODksIDEsIDEyNSwgMjE4LCAKLSAgICAyMjUsIDM5LCA4OSwgMSwgMTI1LCAyMDYsIDM5LCA4OSwgMSwgMTI1LCAxNjIsIDM5LCA4OSwgMSwgMjMyLCAxOTAsIDM5LCAKLSAgICA4OSwgMSwgNjEsIDM5LCA4OSwgMSwgMTIxLCAxNjIsIDM5LCA4OSwgMSwgNzQsIDM5LCA4OSwgMSwgMjM2LCA0MCwgMzksIAotICAgIDg5LCAxLCA2OSwgMzksIDg5LCAxLCAyMTQsIDExOCwgMzksIDg5LCAxLCAyNDUsIDIxNywgMzksIDg5LCAxLCAyMjYsIDE4NywgCi0gICAgMzksIDg5LCAxLCAyMzMsIDEyNiwgMzksIDg5LCAxLCAyNDIsIDEzOSwgMjA2LCAzOSwgODksIDExNywgNSwgMTQ3LCAyMDUsIAotICAgIDM5LCA4OSwgMTE3LCA1LCAxNDcsIDIzMywgMTQxLCAzOSwgODksIDExNywgNSwgMjMzLCAxNDIsIDIxNywgNTksIDIzMywgCi0gICAgMTE1LCAzOSwgODksIDUsIDIzMSwgMjA5LCAyMzQsIDIzNywgMjMzLCAxMTUsIDM5LCA4OSwgMTE3LCA1LCA0MCwgMjI5LCAKLSAgICA4MiwgMzksIDg5LCAxMTcsIDUsIDEyMSwgMTkxLCAzOSwgODksIDExNywgNSwgMTI1LCAyMjMsIDE0MiwgMTc3LCAxMjEsIAotICAgIDE5MSwgMzksIDg5LCAxMTcsIDUsIDE4NiwgMzksIDg5LCAxMTcsIDUsIDI1MiwgMTk5LCAzOSwgODksIDExNywgNSwgMjA2LCAKLSAgICAzOSwgODksIDUsIDIyMiwgMTIsIDM5LCA4OSwgMjUsIDUsIDYxLCAzOSwgODksIDI1LCA1LCAyMzEsIDIwOSwgMjIxLCAyMjgsIAotICAgIDM5LCA4OSwgMjUsIDUsIDI1NSwgODIsIDM5LCA4OSwgMjUsIDUsIDIxNywgNjUsIDI1NSwgODIsIDM5LCA4OSwgMjUsIDUsIAotICAgIDc0LCAzOSwgODksIDI1LCA1LCAyMzYsIDQwLCAzOSwgODksIDI1LCA1LCAyMTQsIDIxNCwgMzksIDg5LCAyNSwgNSwgMjE0LCAKLSAgICAxMTcsIDM5LCA4OSwgMjUsIDUsIDY5LCAzOSwgODksIDI1LCA1LCAyMTQsIDExOCwgMzksIDg5LCAyNSwgNSwgNzgsIDM5LCAKLSAgICA4OSwgMjUsIDUsIDIyNywgNSwgNTEsIDM5LCA4OSwgMjUsIDUsIDIyNiwgMTEzLCAzOSwgODksIDI1LCA1LCA3NiwgMzksIAotICAgIDg5LCAyNSwgNSwgMjU0LCAyNTIsIDM5LCA4OSwgMjUsIDUsIDIyNiwgMTg3LCAzOSwgODksIDI1LCA1LCAyNTQsIDIxMCwgCi0gICAgMzksIDg5LCAyNSwgNSwgODksIDI1NCwgMjEwLCAzOSwgODksIDI1LCA1LCAyMjcsIDUsIDQ4LCAzOSwgODksIDUsIDIzMSwgCi0gICAgMjA5LCAyMzQsIDIzNiwgMzksIDg5LCA1LCAyMTYsIDMwLCAzOSwgODksIDUsIDIxNiwgMjksIDM5LCA4OSwgNSwgMjM0LCAKLSAgICAxMDMsIDIxNiwgMjgsIDM5LCA4OSwgNSwgMjM0LCAxMDMsIDIxNiwgMjcsIDM5LCA4OSwgNSwgMjM0LCAxMDMsIDIxNiwgMjYsIAotICAgIDM5LCA4OSwgNSwgMjIzLCAxOTEsIDI0MiwgNTIsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIyMSwgMjU1LCAzOSwgODksIDUsIAotICAgIDIzNCwgMTAyLCAyMzQsIDIyMSwgMzksIDg5LCAzOCwgMjQ5LCAxMjMsIDI0NywgMTI4LCAzOSwgODksIDI0MSwgNTMsIDIxLCAKLSAgICAyMTAsIDg2LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxMTEsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDEwNSwgMzksIDg5LCAyNDEsIAotICAgIDUzLCAyMSwgMTU4LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxNjEsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5MCwgMzksIDg5LCAKLSAgICAyNDEsIDUzLCAyMSwgMTk1LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxOTksIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5NiwgMzksIAotICAgIDg5LCAyNDEsIDUzLCAyMSwgMjAxLCAzOSwgODksIDg5LCAyMSwgMjEwLCA4NiwgMzksIDg5LCA4OSwgMjEsIDExMSwgMzksIAotICAgIDg5LCA4OSwgMjEsIDEwNSwgMzksIDg5LCA4OSwgMjEsIDE1OCwgMzksIDg5LCA4OSwgMjEsIDE2MSwgMzksIDg5LCA4OSwgCi0gICAgMjEsIDE5MCwgMzksIDg5LCA4OSwgMjEsIDE5NSwgMzksIDg5LCA4OSwgMjEsIDE5OSwgMzksIDg5LCA4OSwgMjEsIDE5NiwgCi0gICAgMzksIDg5LCA4OSwgMjEsIDIwMSwgMzksIDg5LCA1LCAyMTEsIDI0OSwgMzksIDg5LCA1LCAyMTEsIDI0OCwgMzksIDg5LCA1LCAKLSAgICAyMjEsIDIxNywgMzksIDg5LCA1LCAyMzQsIDE2NiwgMzksIDg5LCA1LCAyNDAsIDIzOSwgMzksIDg5LCA1LCAyNDcsIDE0MiwgCi0gICAgMzksIDg5LCA1LCAyMjMsIDUyLCAyMjIsIDE4OSwgMjIzLCAxNTIsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIxMSwgNzIsIDM5LCAKLSAgICA4OSwgNSwgMjM1LCAxMiwgMzksIDg5LCA1LCAyMzUsIDExLCAzOSwgODksIDUsIDIyMSwgMjI0LCAzOSwgODksIDUsIDIyMSwgCi0gICAgMjIzLCAzOSwgODksIDUsIDI0MiwgMTYsIDM5LCA4OSwgNSwgMjUxLCAzOCwgMTAyLCA1LCAyMTQsIDIwMCwgMjIzLCAzMywgCi0gICAgMTAyLCA1LCAyMTQsIDIwMCwgMjUxLCA5LCAxMDIsIDUsIDI1MCwgMTk0LCAxMDIsIDUsIDIxOCwgMTYsIDEwMiwgNSwgMjUxLCAKLSAgICAyNDEsIDEwMiwgMSwgMjU0LCAxOTMsIDEwMiwgMSwgMjU0LCAxOTQsIDIxNywgMTQsIDEwMiwgMSwgMjM2LCAzNiwgMTAyLCAKLSAgICAxLCAyMzYsIDM3LCAyMTcsIDE0LCAxMDIsIDEsIDIxNCwgMjAzLCAxMDIsIDEsIDIxNCwgMjA0LCAyMTcsIDE0LCAxMDIsIDEsIAotICAgIDIyMywgMTkxLCAyMjMsIDgyLCAxMDIsIDEsIDIyMywgMTkxLCAyMjMsIDgzLCAyMTcsIDE0LCAxMDIsIDEsIDIzMywgMTQyLCAKLSAgICAyMzMsIDMwLCAxMDIsIDEsIDIzMywgMTQyLCAyMzMsIDMxLCAyMTcsIDE0LCAxMDIsIDEsIDI0NSwgMTg3LCAxMDIsIDEsIAotICAgIDI1NCwgMjA4LCAxMDIsIDEsIDIyNiwgMjE2LCAxMDIsIDEsIDIyNiwgMjE3LCAyMTcsIDE0LCAxMDIsIDEsIDE3NiwgMTAyLCAKLSAgICAxLCAyMzUsIDE5LCAyMzEsIDIxMiwgMTAyLCAxLCAyNDMsIDE0MiwgMTAyLCAxLCAyNDMsIDE0MywgMjQyLCAxNjgsIDEwMiwgCi0gICAgMSwgMjI5LCA4MiwgMTAyLCAxLCAyNTEsIDQxLCAxMDIsIDEsIDI1MSwgNDIsIDIzMywgMTI5LCAxMDIsIDEsIDIzNSwgMTQ3LCAKLSAgICAxMDIsIDEsIDIzNSwgMTQ4LCAyMzUsIDEyNCwgMTAyLCAxLCAyMjcsIDE2OSwgMTAyLCAxLCAyMTcsIDEwNywgMjMzLCA4MiwgCi0gICAgMTAyLCAxLCAyMTcsIDEwNywgMjMwLCA3MiwgMjMxLCAyMTIsIDEwMiwgMSwgMjQ4LCAyMzAsIDIzMCwgNzIsIDI1NCwgMTUzLCAKLSAgICAxMDIsIDEsIDI0OCwgMjMwLCAyMzAsIDcyLCAyMzEsIDIxMiwgMTAyLCAxLCAyMjksIDIzNCwgMjIzLCAxNTUsIDEwMiwgMSwgCi0gICAgMjE3LCAxMDYsIDEwMiwgMSwgMjE3LCAxMDcsIDIxNywgMzYsIDEwMiwgMSwgMjQ4LCAyMjksIDEwMiwgMSwgMjQ4LCAyMzAsIAotICAgIDIzMSwgMjMwLCAxMDIsIDEsIDE5OCwgMTAyLCAxLCAxOTEsIDEwMiwgMSwgMjI2LCA5NCwgMjM0LCAyMzIsIDEwMiwgMSwgCi0gICAgMjUyLCAxOTksIDEwMiwgMSwgMjUyLCAyMDAsIDIzNCwgMTc4LCAxMDIsIDEsIDE4NiwgMTAyLCAxLCAxOTIsIDEwMiwgMSwgCi0gICAgMjA1LCAxMDIsIDEsIDIzMywgMTQxLCAxMDIsIDEsIDIxMiwgNjUsIDEwMiwgMSwgMjIyLCAzNiwgMjIyLCAyMiwgMTAyLCAxLCAKLSAgICAyMjIsIDM2LCAyMjEsIDIzNSwgMTAyLCAxLCAyMDYsIDEwMiwgMSwgMTYyLCAxMDIsIDUsIDIyMywgNzMsIDEwMiwgMjUsIDUsIAotICAgIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNCwgMTk5LCAxMDIsIDI1LCA1LCAyMTQsIDIwMCwgMjIxLCAyMzEsIDEwMiwgMjUsIAotICAgIDUsIDIxOCwgNDgsIDEwMiwgMjUsIDUsIDIxOCwgNDksIDIzNiwgMjgsIDEwMiwgMjUsIDUsIDIyMywgMTkxLCAyMjMsIDgyLCAKLSAgICAxMDIsIDI1LCA1LCAyMjMsIDE5MSwgMjIzLCA4MywgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjMzLCAxNDIsIDIzMywgMzAsIAotICAgIDEwMiwgMjUsIDUsIDIzMywgMTQyLCAyMzMsIDMxLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAxMDIsIDI1LCA1LCAKLSAgICAyMTcsIDY3LCAyMjMsIDgyLCAxMDIsIDI1LCA1LCAyMTcsIDY3LCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMTcsIDY3LCAyMjMsIAotICAgIDgzLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMjUsIDE4NywgMTAyLCAyNSwgNSwgMjI1LCAxODgsIDIxNywgMTQsIDEwMiwgCi0gICAgMjU1LCAzLCAyNTUsIDIsIDEwMiwgMSwgMjM1LCAxLCAyMjEsIDIzMCwgMTAyLCAxLCAyMzQsIDEwOCwgMjIxLCAyMzAsIAotICAgIDEwMiwgMSwgMjE1LCAzNCwgMjIxLCAyMzAsIDEwMiwgMSwgMjQ1LCAyMTEsIDIyMSwgMjMwLCAxMDIsIDEsIDIxNCwgMCwgCi0gICAgMjIxLCAyMzAsIDEwMiwgMSwgMjEwLCAxMDcsIDIyMSwgMjMwLCAxMDIsIDEsIDI1MywgMjE3LCAyMjEsIDIzMCwgMTAyLCAKLSAgICAyMSwgMjEwLCA4NiwgMTAyLCAyMSwgMTExLCAxMDIsIDIxLCAxMDUsIDEwMiwgMjEsIDE1OCwgMTAyLCAyMSwgMTYxLCAxMDIsIAotICAgIDIxLCAxOTAsIDEwMiwgMjEsIDE5NSwgMTAyLCAyMSwgMTk5LCAxMDIsIDIxLCAxOTYsIDEwMiwgMjEsIDIwMSwgMTAyLCAKLSAgICAyMjYsIDMzLCAxMDIsIDIyNiwgNTksIDEwMiwgMjExLCAyMzgsIDEwMiwgMjUwLCAyNDQsIDIyNiwgNTIsIDEwMiwgMjUwLCAKLSAgICAyNDQsIDIxOSwgMTc0LCAxMDIsIDI1MCwgMjQ0LCAyMjYsIDYsIDEwMiwgMjI2LCA1OCwgMTAyLCAyOCwgMTYsIDI0NywgCi0gICAgMTM0LCAxMDIsIDI4LCAxNiwgMjQ4LCA1OSwgMTAyLCAyOCwgMTYsIDI0NiwgNzIsIDEwMiwgMjgsIDE2LCAyNDgsIDE4NCwgCi0gICAgMTAyLCAyOCwgMTYsIDI0OCwgMTg1LCAyMTgsIDE2LCAxMDIsIDI4LCAxNiwgMjQ3LCAyMTMsIDEwMiwgMjgsIDE2LCAyNDgsIAotICAgIDIyMiwgMTAyLCAyOCwgMTYsIDI0OCwgNDEsIDEwMiwgMjgsIDE2LCAyNDgsIDIwNiwgMTAyLCAyOCwgMTYsIDI0OCwgMTg1LCAKLSAgICAyNDMsIDY0LCAxMDIsIDI4LCAxNiwgMzgsIDIxNywgMTAsIDEwMiwgMjgsIDE2LCAzOCwgMjQ1LCAxNDksIDEwMiwgMjgsIAotICAgIDE2LCAzOCwgMjM0LCAxNzMsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzUsIDEwMiwgMjgsIDE2LCAzOCwgMjM1LCAxMjgsIAotICAgIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzQsIDIsIDIzNSwgMTI4LCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTc2LCAyLCAKLSAgICAyMzUsIDEyOCwgMTAyLCAyOCwgMTYsIDM4LCAyNTIsIDQ1LCAxMDIsIDI4LCAxNiwgMzgsIDI0MiwgMTcyLCAxMDIsIDI4LCAKLSAgICAxNiwgMjIyLCAyNTIsIDIwNCwgMjQ2LCA4MiwgMTAyLCAyOCwgMTYsIDIyMiwgMjUyLCAyMDQsIDI0OCwgMjIwLCAxMDIsIAotICAgIDI4LCAxNiwgMjIyLCAyNTIsIDI1MCwgOCwgMjE1LCAxMTIsIDEwMiwgMjgsIDE2LCAyMjIsIDI1MiwgMjUwLCA4LCAyMTcsIAotICAgIDc0LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjYsIDQ3LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjQsIAotICAgIDE0MiwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDI1MCwgOCwgMjI1LCA0MSwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDI1MCwgOCwgCi0gICAgMjI1LCAyOSwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDIwNCwgMjI1LCA2NCwgMjA3LCA1LCAyMjYsIDMwLCAyMDcsIDUsIAotICAgIDIyNiwgNDMsIDIwNywgNSwgMjI2LCAzOSwgMjA3LCAxLCA2MSwgMjA3LCAxLCA3NCwgMjA3LCAxLCA2OSwgMjA3LCAxLCAKLSAgICAyNTQsIDI1MiwgMjA3LCAxLCA3OCwgMjA3LCAxLCA3NiwgMjA3LCAxLCAyNDUsIDYzLCAyMDcsIDEsIDE3NiwgMjA3LCAxLCAKLSAgICAyMjQsIDkxLCAyMDcsIDEsIDI0MywgMTQyLCAyMDcsIDEsIDIyOSwgODIsIDIwNywgMSwgMjUxLCA0MSwgMjA3LCAxLCAyMzUsIAotICAgIDE0NywgMjA3LCAxLCAyMTAsIDExNiwgMjA3LCAxLCAyMjcsIDE2OSwgMjA3LCAxLCAyMTcsIDEwNiwgMjA3LCAxLCAyNDgsIAotICAgIDIyOSwgMjA3LCAxLCAxOTgsIDIwNywgMSwgMTkxLCAyMDcsIDEsIDI0NCwgMjA0LCAyMDcsIDEsIDIxNCwgMjcsIDIwNywgMSwgCi0gICAgMjUyLCAxOTksIDIwNywgMSwgMTg2LCAyMDcsIDEsIDE5MiwgMjA3LCAxLCAyMDUsIDIwNywgMSwgMjMzLCAxNDEsIDIwNywgCi0gICAgMSwgMjEyLCA2NSwgMjA3LCAxLCAyMDYsIDIwNywgMSwgMjExLCAxNjUsIDIwNywgMSwgMTYyLCAyMDcsIDExNywgNSwgMjI2LCAKLSAgICA1NiwgMjA3LCAxMTcsIDUsIDIyNiwgMzIsIDIwNywgMTE3LCA1LCAyMjYsIDI5LCAyMDcsIDI1LCA1LCAyMjYsIDQ2LCAyMDcsIAotICAgIDI1LCA1LCAyMjYsIDI4LCAyMDcsIDI1LCA1LCAyMjYsIDUwLCAyMDcsIDI1LCA1LCAyMjYsIDM4LCAyMDcsIDI1LCA1LCAKLSAgICAyMjYsIDU3LCAyMDcsIDI1LCA1LCAyMjYsIDQ4LCAyMDcsIDUsIDIyNiwgNjAsIDIwNywgNSwgMjEzLCAxNTIsIDIwNywgCi0gICAgMTE3LCA1LCAyMjUsIDI1MiwgMTg2LCAyMDcsIDExNywgNSwgMjI1LCAyNTIsIDIxMiwgNjUsIDIwNywgMSwgMjM0LCAxMzgsIAotICAgIDIwNywgMSwgMjE3LCAyMzIsIDIwNywgMjEsIDIxMCwgODYsIDIwNywgMjEsIDExMSwgMjA3LCAyMSwgMTA1LCAyMDcsIDIxLCAKLSAgICAxNTgsIDIwNywgMjEsIDE2MSwgMjA3LCAyMSwgMTkwLCAyMDcsIDIxLCAxOTUsIDIwNywgMjEsIDE5OSwgMjA3LCAyMSwgCi0gICAgMTk2LCAyMDcsIDIxLCAyMDEsIDIwNywgMjUzLCAxODMsIDIwNywgMSwgMjIzLCA1NSwgMjA3LCAxLCAyMzMsIDEzLCAyMDcsIAotICAgIDEsIDI1MiwgMjYsIDIwNywgMSwgNDAsIDIzNSwgMjksIDIwNywgMSwgNDAsIDE5NCwgMjUyLCAxMjgsIDEsIDYxLCAyNTIsIAotICAgIDEyOCwgMSwgMjE5LCAxNjYsIDYxLCAyNTIsIDEyOCwgMSwgMTYyLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE2MiwgMjUyLCAKLSAgICAxMjgsIDEsIDIzMSwgMTg2LCAxNjIsIDI1MiwgMTI4LCAxLCAyNTIsIDE5OSwgMjUyLCAxMjgsIDEsIDIzNCwgMjE4LCAyNTIsIAotICAgIDE5OSwgMjUyLCAxMjgsIDEsIDE5MSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAxOTEsIDI1MiwgMTI4LCAxLCAxOTgsIDI1MiwgCi0gICAgMTI4LCAxLCAyMzEsIDE4NiwgMTk4LCAyNTIsIDEyOCwgMSwgMjEyLCA2NSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMTIsIAotICAgIDY1LCAyNTIsIDEyOCwgMSwgMjI2LCA3MSwgMjEyLCA2NSwgMjUyLCAxMjgsIDEsIDI0MywgMTQyLCAyNTIsIDEyOCwgMSwgCi0gICAgMjE5LCAxNjYsIDI0MywgMTQyLCAyNTIsIDEyOCwgMSwgMjM1LCAxNDcsIDI1MiwgMTI4LCAxLCAyNDgsIDIyOSwgMjUyLCAKLSAgICAxMjgsIDEsIDIwNSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMDUsIDI1MiwgMTI4LCAxLCAxODYsIDI1MiwgMTI4LCAxLCAKLSAgICAyMTksIDE2NiwgMTg2LCAyNTIsIDEyOCwgMSwgMjE5LCAyOCwgMjE3LCAxMDYsIDI1MiwgMTI4LCAxLCAyMjgsIDYwLCAyMTcsIAotICAgIDEwNiwgMjUyLCAxMjgsIDEsIDIwNiwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMDYsIDI1MiwgMTI4LCAxLCAyMzEsIDE4NiwgCi0gICAgMjA2LCAyNTIsIDEyOCwgMSwgMTkyLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE5MiwgMjUyLCAxMjgsIDEsIDIyOSwgODIsIAotICAgIDI1MiwgMTI4LCAxLCAyMzMsIDE0MSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMzMsIDE0MSwgMjUyLCAxMjgsIDEsIDIyNywgCi0gICAgMTY5LCAyNTIsIDEyOCwgMSwgMjUxLCA0MSwgMjUyLCAxMjgsIDEsIDIyOSwgMTUzLCAyNTIsIDEyOCwgMSwgMjMxLCAxMjksIAotICAgIDI1MiwgMTI4LCAxLCA3NCwgMjUyLCAxMjgsIDEsIDY5LCAyNTIsIDEyOCwgNSwgMjE2LCAzNCwgMjUyLCAxMjgsIDI1LCA1LCAKLSAgICA3NiwgMjUyLCAxMjgsIDI1LCA1LCAyMjYsIDcxLCA3NiwgMjUyLCAxMjgsIDI1LCA1LCAyNDUsIDIxNywgMjUyLCAxMjgsIAotICAgIDI1LCA1LCA3NCwgMjUyLCAxMjgsIDI1LCA1LCAyMzQsIDIxOCwgNzQsIDI1MiwgMTI4LCAyNSwgNSwgNzgsIDI1MiwgMTI4LCAKLSAgICAyNSwgNSwgMjM0LCAyMTgsIDc4LCAyNTIsIDEyOCwgMjUsIDUsIDY5LCAyNTIsIDEyOCwgMjUsIDUsIDEwNCwgMzEsIDIxOSwgCi0gICAgMTY2LCAyMDYsIDI1MiwgMTI4LCAxMTcsIDUsIDIyOSwgODQsIDI1MiwgMTI4LCAxMTcsIDUsIDI0MiwgNjcsIDI1MiwgMTI4LCAKLSAgICAyMjYsIDQxLCAyNTIsIDEyOCwgMjI2LCAzNywgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjI5LCAyMzQsIDIzMSwgNDIsIAotICAgIDI1MiwgMTI4LCAxNiwgMjUxLCAyNDksIDIyNSwgNjcsIDI1MiwgMTI4LCAxNiwgMjUxLCAyNDksIDIzNSwgNTQsIDI1MiwgCi0gICAgMTI4LCAxNiwgMjUxLCAyNDksIDIyNiwgNDEsIDE5NywgMSwgMTc2LCAxOTcsIDEsIDIzNCwgNDUsIDE5NywgMSwgMjM0LCAKLSAgICAxMzgsIDE5NywgMSwgMjQzLCAxNDIsIDE5NywgMSwgMjQyLCAxOTMsIDE5NywgMSwgMjI5LCA4MiwgMTk3LCAxLCAyNTEsIAotICAgIDQxLCAxOTcsIDEsIDI1MCwgMTY1LCAxOTcsIDEsIDIzNSwgMTQ3LCAxOTcsIDEsIDIyNywgMTY5LCAxOTcsIDEsIDIxNywgCi0gICAgMTA2LCAxOTcsIDEsIDIxNiwgMjA5LCAxOTcsIDEsIDI0OCwgMjI5LCAxOTcsIDEsIDE5OCwgMTk3LCAxLCAxOTEsIDE5NywgCi0gICAgMSwgMjI1LCA0NSwgMTk3LCAxLCAyMjUsIDE1MCwgMTk3LCAxLCAyNDQsIDIwNCwgMTk3LCAxLCAyNDQsIDgzLCAxOTcsIDEsIAotICAgIDI1MiwgMTk5LCAxOTcsIDEsIDI1MSwgMjMwLCAxOTcsIDEsIDE4NiwgMTk3LCAxLCAyMzAsIDE3MywgMTk3LCAxLCAyMTUsIAotICAgIDE4NCwgMTk3LCAxLCAyMTUsIDE3NiwgMTk3LCAxLCAyNDYsIDQ2LCAxOTcsIDEsIDE5MiwgMTk3LCAxLCAyMDUsIDE5NywgMSwgCi0gICAgMjMzLCAxNDEsIDE5NywgMSwgMTYyLCAxOTcsIDEsIDI0MSwgMTYwLCAxOTcsIDEsIDIxNCwgMjcsIDE5NywgMSwgMjA2LCAKLSAgICAxOTcsIDEsIDIyMCwgMTA0LCAxOTcsIDEsIDIxMiwgNjUsIDE5NywgMSwgNjEsIDE5NywgMjE4LCA3NCwgMSwgMTkyLCAxOTcsIAotICAgIDIxOCwgNzQsIDEsIDIwNSwgMTk3LCAyNSwgNSwgMjU1LCA4MiwgMTk3LCAyNSwgNSwgNzQsIDE5NywgMjUsIDUsIDc4LCAKLSAgICAxOTcsIDI1LCA1LCAyMjYsIDE4NywgMTk3LCAyNSwgNSwgNjksIDE5NywgMjUsIDUsIDIxNCwgMTE4LCAxOTcsIDI1LCA1LCAKLSAgICA3NiwgMTk3LCAxMTcsIDUsIDIzNSwgMjksIDE5NywgMTE3LCA1LCAxOTQsIDE5NywgMTE3LCA1LCAxNTYsIDE5NywgMTE3LCAKLSAgICA1LCAyMzAsIDMwLCAxOTcsIDExNywgNSwgMjI2LCAxMDksIDE5NywgMTE3LCA1LCAxNTMsIDE5NywgMTE3LCA1LCAyMTcsIAotICAgIDE1MywgMTk3LCAxMTcsIDUsIDIyNywgMTQ2LCAxOTcsIDExNywgNSwgMjM0LCAyMzYsIDE5NywgNSwgMjIzLCAxNTMsIDE5NywgCi0gICAgNSwgMjI3LCAyMDksIDE5NywgMjI0LCAxNDQsIDIxNywgMTA0LCAxOTcsIDIyNCwgMTQ0LCAyMjcsIDE1NiwgMjE2LCAxMjEsIAotICAgIDIxNywgMTA0LCAxOTcsIDIyNCwgMTQ0LCAyNTAsIDE3MiwgMTk3LCAyMjQsIDE0NCwgMjE1LCAxNzEsIDI1MCwgMTcyLCAKLSAgICAxOTcsIDIyNCwgMTQ0LCAyMTUsIDE3MCwgMTk3LCAyMSwgMjEwLCA4NiwgMTk3LCAyMSwgMTExLCAxOTcsIDIxLCAxMDUsIAotICAgIDE5NywgMjEsIDE1OCwgMTk3LCAyMSwgMTYxLCAxOTcsIDIxLCAxOTAsIDE5NywgMjEsIDE5NSwgMTk3LCAyMSwgMTk5LCAKLSAgICAxOTcsIDIxLCAxOTYsIDE5NywgMjEsIDIwMSwgMTk3LCAxLCAyMTUsIDE1NywgMTk3LCAxLCAyMTUsIDE0NSwgMTk3LCAxLCAKLSAgICAyNDgsIDE0MywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMjEwLCA4NiwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTExLCAKLSAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxMDUsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE1OCwgMjI2LCAyMTQsIDI1MCwgCi0gICAgMTExLCAyMSwgMTYxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTAsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5NSwgCi0gICAgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTYsIDIyNiwgMjE0LCAyNTAsIAotICAgIDExMSwgMjEsIDIwMSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDE0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAKLSAgICAyNTMsIDIxNCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIDIyNSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIAotICAgIDEyMywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIDE4NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDE0MCwgCi0gICAgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTUsIDQ0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgNDUsIDIyNiwgMjE0LCAKLSAgICAyNTAsIDExMSwgMSwgMjU1LCA0MywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTUsIDM4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIAotICAgIDEsIDIzMiwgMjQ3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNSwgMTc4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNiwgCi0gICAgNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxOTcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxODYsIAotICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMyLCAxMDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAyMjEsIDIyNiwgCi0gICAgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAyMTksIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAxNjgsIDIyNiwgMjE0LCAKLSAgICAyNTAsIDExMSwgMSwgMjE0LCAxMTEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMzLCA2NCwgMjI2LCAyMTQsIDI1MCwgCi0gICAgMTExLCAxLCAyNDUsIDExNiwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNDUsIDIyMCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAKLSAgICAyNDUsIDE1OCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNDUsIDk0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMiwgCi0gICAgMTYyLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMTQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNywgMCwgMjI2LCAKLSAgICAyMTQsIDI1MCwgMTExLCAxLCAyMjYsIDEyOSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMjYsIDIyNiwgMjI2LCAyMTQsIAotICAgIDI1MCwgMTExLCAyMzAsIDEwOCwgMjE1LCAxMjIsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjQzLCAxMzcsIDIxNSwgMTIzLCAKLSAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIzMCwgMTA2LCAyMTUsIDEyMywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMjMsIDk1LCAyMjYsIAotICAgIDIxNCwgMjUwLCAxMTEsIDIyNSwgMTQ4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDI1NCwgMjE3LCAyMjYsIDIxNCwgMjUwLCAKLSAgICAxMTEsIDIyNCwgMTQ0LCAyMzAsIDEwMywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMjQsIDE0NCwgNTIsIDIzMCwgMTAzLCAyMDcsIAotICAgIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjE4LCA5LCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjI2LCA0MiwgMjA3LCAyMjQsIAotICAgIDE0NCwgMjUxLCAyNDksIDIyNCwgMTMyLCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjUxLCAyNywgMjA3LCAyMjQsIDE0NCwgCi0gICAgMjUxLCAyNDksIDIzMywgMTQsIDIyMSwgMjI3LCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjM1LCAxOSwgMjIxLCAyMjcsIAotICAgIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyNDgsIDIzMCwgMjIxLCAyMjcsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAKLSAgICAyNTIsIDIwMCwgMjIxLCAyMjcsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjE2LCAyMTMsIDI1MiwgMTM4LCAyMjAsIDc5LCAyMTMsIAotICAgIDI1MiwgMTM4LCAyMjQsIDIwMSwgMjEzLCAyNTIsIDUsIDIyOCwgMjE0LCAyMTMsIDI1MiwgNSwgMjExLCA4MCwgMjMwLCAKLSAgICAyMjcsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjU0LCAyMjIsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgCi0gICAgMjUyLCAxMzgsIDIxMSwgODAsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDIzNCwgMjA0LCAKLSAgICAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyNTEsIDEwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgCi0gICAgMjM0LCAyMDQsIDIzNSwgMjUwLCAyMTgsIDIsIDIyMSwgMTk5LCAyMTMsIDI1MiwgMTM4LCA1MiwgMjE4LCAxLCAyMTMsIAotICAgIDI1MiwgMTM4LCAyMTUsIDIxMiwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMzQsIDIwNCwgMjU0LCA4NSwgMjEzLCAyNTIsIAotICAgIDEzOCwgNTksIDUxLCAyMTMsIDI1MiwgMTM4LCAxMTMsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIDEzNCwgMTcwLCA1MSwgCi0gICAgMjEzLCAyNTIsIDEzOCwgMjIyLCAyNDMsIDIzNCwgMjE1LCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyNTMsIAotICAgIDIxMiwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTgsIDEsIDIxMywgMjUyLCA1LCAyMTMsIAotICAgIDE0OCwgMjE0LCAyMTYsIDIxMywgMjUyLCA1LCAyMjMsIDUyLCAyMTMsIDE0OCwgMjE0LCAyMTYsIDIxMywgMjUyLCA1LCAKLSAgICAyMTMsIDE0OCwgMjU0LCA4NSwgMjEzLCAyNTIsIDUsIDIyMywgNTIsIDIxMywgMTQ4LCAyNTQsIDg1LCAyMTMsIDI1MiwgNSwgCi0gICAgMjEzLCAxNDgsIDIxNCwgMjE3LCAyLCAyMTcsIDc4LCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgODYsIDIsIDIxNywgCi0gICAgNzgsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyNTQsIDk5LCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjUyLCAxNzQsIDIxMywgCi0gICAgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIDIwLCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAyMSwgMiwgMjE3LCA3OCwgMjEzLCAKLSAgICAyNTIsIDUsIDIxNiwgNjksIDIxMywgMjUyLCA1LCAyNDEsIDE5OCwgMjAwLCAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjAwLCAKLSAgICAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjIyLCAxNDQsIDIwMCwgMjU0LCA4MywgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDIxNCwgCi0gICAgMjIzLCAyMzAsIDk1LCAyMTMsIDI1MiwgNSwgMjU0LCAyOCwgMjEzLCAyNTIsIDUsIDIyMiwgMTg5LCAyNTQsIDI4LCAyMTMsIAotICAgIDI1MiwgMTM4LCAyNTEsIDEwLCA0OCwgMjEzLCAyNTIsIDUsIDIzNSwgMTA4LCAyMTMsIDI1MiwgNSwgMjE0LCAxNjEsIDcsIAotICAgIDEsIDQsIDYsIDYxLCA3LCAxLCA0LCA2LCAyNTQsIDI1MiwgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAyNTIsIDcsIDEsIDQsIAotICAgIDYsIDI1MiwgMTQyLCAyNTMsIDE2NiwgNywgMSwgNCwgNiwgMjUxLCA3NCwgNywgMSwgNCwgNiwgMjQ5LCA2OCwgNywgMSwgNCwgCi0gICAgNiwgMjQ1LCA2NywgNywgMSwgNCwgNiwgNzYsIDcsIDQsIDEsIDIxNSwgOTQsIDIwNCwgNzYsIDcsIDQsIDEsIDIxNSwgOTQsIAotICAgIDc0LCA3LCAxLCA0LCA2LCAyMzUsIDE1MCwgNywgMSwgNCwgNiwgMjM1LCAyOSwgNywgMSwgNCwgNiwgMjMzLCAxNTUsIDIsIAotICAgIDkxLCA3LCAxLCA0LCA2LCAxOTQsIDcsIDEsIDQsIDYsIDIyMywgNTIsIDIzMCwgMzAsIDcsIDEsIDQsIDYsIDc4LCA3LCAxLCAKLSAgICA0LCA2LCAyMDQsIDc4LCA3LCA0LCAxLCAyMTksIDE4OSwgNzgsIDcsIDQsIDEsIDIxOSwgMTg5LCAyMDQsIDc4LCA3LCA0LCAKLSAgICAxLCAyMTksIDE4OSwgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgMjI2LCAyMzgsIDcsIDEsIDQsIDYsIDIyNiwgCi0gICAgMTM4LCA3LCA0LCAxLCAyMTYsIDE1LCAxNjMsIDc4LCA3LCA0LCAxLCAyNTEsIDE4MywgMTYzLCA3OCwgNywgMSwgNCwgNiwgCi0gICAgMjI2LCAxMDksIDcsIDEsIDQsIDYsIDIyMywgNTIsIDE1MywgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTUzLCA3LCAxLCA0LCA2LCAKLSAgICAyMTcsIDE1MywgNywgMSwgNCwgNiwgNjksIDcsIDQsIDEsIDIxOSwgMTg5LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDI0OCwgCi0gICAgOCwgNjksIDcsIDQsIDEsIDIxOSwgMTg5LCAyMTUsIDk0LCAxOTQsIDcsIDEsIDQsIDYsIDIxNCwgMTA1LCA3LCAxLCA0LCA2LCAKLSAgICAyMTIsIDk4LCA3LCAxLCA0LCA2LCAyMTAsIDE1OSwgNywgMSwgNCwgNiwgMjQ1LCAxNiwgNywgMSwgMjEzLCAxMzUsIDIzMywgCi0gICAgODgsIDIxOCwgMjUyLCA3LCAxLCAyNTQsIDIwNSwgMjYsIDEsIDQsIDYsIDI0MywgMTE0LCAyNiwgMSwgNCwgNiwgMjMzLCAKLSAgICAxMDQsIDI2LCAxLCA0LCA2LCAyMjUsIDExMSwgMjYsIDEsIDQsIDYsIDIyMywgNDAsIDI2LCAxLCA0LCA2LCAyMjQsIDE2NCwgCi0gICAgMzMsIDEsIDQsIDYsIDI0NSwgMTgyLCA1OCwgMSwgNiwgNjEsIDU4LCAxLCA2LCAyNTQsIDI1MiwgNTgsIDEsIDYsIDI1MywgCi0gICAgMTY2LCA1OCwgMSwgNiwgMjUyLCAxNDIsIDI1MywgMTY2LCA1OCwgMSwgNiwgMjQ5LCA2OCwgNTgsIDEsIDYsIDc2LCA1OCwgCi0gICAgMSwgNiwgMjIzLCA1MiwgNzYsIDU4LCAxLCA2LCAyNDMsIDIwOSwgNTgsIDEsIDYsIDI0MiwgNjcsIDU4LCAxLCA2LCA3NCwgCi0gICAgNTgsIDEsIDYsIDIzNSwgMTUwLCA1OCwgMSwgNiwgMjM1LCAyOSwgNTgsIDEsIDYsIDE1NiwgNTgsIDEsIDYsIDE5NCwgNTgsIAotICAgIDEsIDYsIDIzMCwgMzAsIDU4LCAxLCA2LCAyMjMsIDUyLCAyMzAsIDMwLCA1OCwgMSwgNiwgNzgsIDU4LCAxLCA2LCAyMjYsIAotICAgIDEzOCwgNTgsIDEsIDYsIDIyNiwgMTA5LCA1OCwgMSwgNiwgMTUzLCA1OCwgMSwgNiwgMjE3LCAxNTMsIDU4LCAxLCA2LCA2OSwgCi0gICAgNTgsIDEsIDYsIDIxMiwgOTgsIDU4LCAxLCA0LCA2MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDYxLCA1OCwgMSwgNCwgMjU0LCAKLSAgICAxNTEsIDU4LCAxLCA0LCAyMTUsIDk0LCAyNTQsIDI1MiwgNTgsIDEsIDQsIDI1MywgMTY2LCA1OCwgMSwgNCwgMjQ5LCA2OCwgCi0gICAgNTgsIDEsIDQsIDc2LCA1OCwgMSwgNCwgMjIxLCAxOTcsIDU4LCAxLCA0LCAyMDQsIDc2LCA1OCwgMSwgNCwgMjE1LCA5NCwgCi0gICAgMjA0LCA3NiwgNTgsIDEsIDQsIDI0MywgMjA5LCA1OCwgMSwgNCwgMjE1LCA5NCwgNzQsIDU4LCAxLCA0LCAyMzUsIDI5LCAKLSAgICA1OCwgMSwgNCwgMTk0LCA1OCwgMSwgNCwgMjQ1LCAxNDYsIDU4LCAxLCA0LCA3OCwgNTgsIDEsIDQsIDIwNCwgNzgsIDU4LCAKLSAgICAxLCA0LCAyMTYsIDE1LCAxNjMsIDc4LCA1OCwgMSwgNCwgMjUxLCAxODMsIDE2MywgNzgsIDU4LCAxLCA0LCAyMjYsIDEwOSwgCi0gICAgNTgsIDEsIDQsIDIxNywgMTUzLCA1OCwgMSwgNCwgNjksIDU4LCAxLCA0LCAyMTksIDE4OSwgNjksIDU4LCAxLCA0LCAyMTUsIAotICAgIDk0LCAxOTQsIDU4LCAxLCA0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDI1NCwgMjA1LCA1OCwgMSwgNCwgMjUyLCAzNCwgNTgsIAotICAgIDEsIDQsIDI2LCAyNDMsIDExNCwgNTgsIDEsIDQsIDI0OCwgNjIsIDU4LCAxLCA0LCAyNiwgMjI1LCAxMzYsIDU4LCAxLCA0LCAKLSAgICAyNTAsIDExOCwgNywgMjE4LCA2NiwgNCwgMSwgNzQsIDcsIDIxOCwgNjYsIDQsIDEsIDE1MywgNywgMjE4LCA2NiwgNCwgMSwgCi0gICAgNjksIDcsIDIxOCwgNjYsIDQsIDEsIDIxNCwgMTA1LCAyNiwgMjE4LCA2NiwgNCwgMSwgMjUyLCAzNCwgMjYsIDIxOCwgNjYsIAotICAgIDQsIDEsIDI0MywgMTE0LCAyNiwgMjE4LCA2NiwgNCwgMSwgMjIzLCA0MCwgMjYsIDIxOCwgNjYsIDQsIDEsIDIyNSwgMTM2LCAKLSAgICAyNiwgMjE4LCA2NiwgNCwgMSwgMjUwLCAxMTgsIDcsIDQsIDEsIDIxNCwgMjE0LCA3LCA0LCAxLCA1NywgMiwgMjMwLCAyMjksIAotICAgIDE4NCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMjMwLCAyMjksIAotICAgIDE4NCwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjMwLCAyMjksIAotICAgIDE4NCwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyMzAsIDIyOSwgCi0gICAgMTg0LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjQ0LCA5NiwgMjIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIyMiwgOTQsIAotICAgIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTAsIDE2MCwgCi0gICAgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjE1LCA5NCwgMjQzLCAyMDksIDU4LCAxLCAzMywgMjQ1LCAxNTgsIDcsIDQsIAotICAgIDEsIDIzNSwgMjIwLCAyNDMsIDIwOSwgNywgNCwgMSwgMjE2LCAyMTIsIDIsIDIxOCwgMTA5LCA3LCA0LCA2LCAxLCAyNDAsIAotICAgIDE2MSwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTkzLCAyLCA5MSwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDkxLCA3LCA0LCA2LCAKLSAgICAxLCAxMDQsIDIsIDkxLCA3LCA0LCAxLCAyMTQsIDE1OCwgMiwgOTEsIDcsIDQsIDEsIDU3LCAyLCAyMjYsIDcwLCAxMDMsIDcsIAotICAgIDQsIDEsIDI0OSwgNjksIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAKLSAgICAxLCAyNDMsIDIxMCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAotICAgIDIzMywgMTU1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCi0gICAgMjMwLCAzMSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKLSAgICAyMjMsIDIyNywgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAotICAgIDI0NSwgODQsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCi0gICAgMjExLCAxNzksIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCi0gICAgMTE2LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0OSwgCi0gICAgNjksIDIsIDI0MSwgNTksIDIyLCAyMTcsIDc4LCA3LCA0LCAxLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjA0LCAKLSAgICAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCi0gICAgMSwgMjIxLCAxOTgsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCi0gICAgMSwgMjA0LCAxNDQsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ1LCA4NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAKLSAgICAxMDQsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjE1LCAKLSAgICA5NCwgMjU0LCAxNTEsIDU4LCAxLCA0LCAyNTEsIDc0LCA1OCwgMSwgNCwgMjUxLCA3NSwgMiwgMjQ5LCAxMDgsIDU4LCAxLCAKLSAgICA0LCAyNDUsIDY3LCA1OCwgMSwgNCwgMjIzLCA1MiwgMjA0LCA3NiwgNTgsIDEsIDQsIDI0NSwgMTQsIDU4LCAxLCA0LCAyNDcsIAotICAgIDEyNywgMjM1LCAxNTEsIDIsIDkxLCA1OCwgMSwgNCwgMTE5LCAyNDMsIDIwOSwgNTgsIDEsIDQsIDIxNSwgOTQsIDI0MiwgCi0gICAgNjcsIDU4LCAxLCA0LCAyNDAsIDE2MSwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE5MiwgNTgsIDEsIDQsIDYsIDc0LCA1OCwgCi0gICAgMSwgNCwgNiwgMjQwLCAxNjEsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxNTEsIDIsIDI0OSwgMTM1LCA1OCwgMSwgNCwgMjMzLCAKLSAgICAxNTUsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIzMywgMTU1LCAyLCAyMjYsIDcwLCAxMDMsIDU4LCAxLCA0LCA2LCAKLSAgICAxNTYsIDU4LCAxLCA0LCAyMzIsIDU1LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMzIsIDU1LCAyLCAyMDAsIDIzMywgCi0gICAgNDIsIDU4LCAxLCA0LCAyMzAsIDMxLCAyLCA0MywgMTAzLCA1OCwgMSwgNCwgMjMwLCAzMSwgMiwgMjIzLCA1OCwgMTAzLCAKLSAgICA1OCwgMSwgNCwgNiwgMjMwLCAzMCwgNTgsIDEsIDQsIDI1MiwgMTQyLCA3OCwgNTgsIDEsIDQsIDIyNSwgMTM2LCA1OCwgMSwgCi0gICAgNCwgMjIyLCA5NCwgMiwgMTAzLCA1OCwgMSwgNCwgMjQ1LCA4MywgNTgsIDEsIDQsIDIxNywgMTU0LCAyLCAyMjYsIDcwLCAKLSAgICAxMDMsIDU4LCAxLCA0LCAxMDQsIDEzMCwgNTgsIDEsIDQsIDIxNCwgMTU3LCA1OCwgMSwgNCwgNiwgNjksIDU4LCAxLCA0LCAKLSAgICAyMTQsIDEwNiwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyMTAsIDE1OSwgNTgsIDEsIAotICAgIDQsIDIxMCwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMTAsIDE2MCwgMiwgMjQ5LCAxMDgsIDU4LCAxLCA0LCAKLSAgICAyNDUsIDE2LCA1OCwgMSwgNCwgMjE2LCAxODAsIDM4LCAyNDYsIDEyNiwgMjQyLCAxNDQsIDI1NSwgMjMsIDM4LCAyNDYsIAotICAgIDEyNiwgMjU1LCAxMiwgMjU1LCAyMywgMzgsIDIxOSwgNzEsIDUxLCAzOCwgMjE4LCA3LCA3OSwgMzgsIDIzMSwgMjM2LCAzOCwgCi0gICAgMjQyLCAxNDEsIDM4LCAyMzEsIDIzNCwgMzgsIDI1NSwgMTAsIDM4LCAyNDIsIDE0MiwgMzgsIDI1NSwgMTEsIDM4LCA3LCA0LCAKLSAgICAxLCAyMjMsIDIyNywgNTEsIDM4LCAyNTEsIDE1MywgMzgsIDIzMSwgMjM1LCAzOCwgNTIsIDI1MCwgMzksIDQ4LCAzOCwgCi0gICAgMjI2LCAyMjksIDQ4LCAzOCwgMjEwLCAzNSwgNTEsIDM4LCAyMzUsIDE3OSwgNTEsIDM4LCAyMTQsIDE1MSwgNDgsIDM4LCAKLSAgICAyMTQsIDEzNCwgNDgsIDM4LCA3LCA0LCAxLCAyNDQsIDcxLCAyMDQsIDExNiwgNDgsIDM4LCA3LCA0LCAxLCAyNTQsIDI1MiwgCi0gICAgMzgsIDcsIDQsIDEsIDI1NCwgODEsIDM4LCA3LCA0LCAxLCAyNTMsIDE4NCwgMzgsIDcsIDQsIDEsIDI1MSwgNzUsIDI1MCwgCi0gICAgMTkxLCAzOCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDM4LCA3LCA0LCAxLCAyNDUsIDY3LCAzOCwgNywgNCwgMSwgCi0gICAgMjQzLCAyMDksIDM4LCA3LCAxLCA0LCA2LCAyNDMsIDIwOSwgMzgsIDcsIDQsIDEsIDIzNSwgMjksIDM4LCA3LCA0LCAxLCAKLSAgICAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxOTQsIDM4LCA3LCA0LCAxLCAyMzAsIDMwLCAzOCwgCi0gICAgNywgMSwgNCwgNiwgMjMwLCAzMCwgMzgsIDcsIDEsIDQsIDYsIDE1MywgMzgsIDcsIDQsIDEsIDIyMywgMjI3LCAyMjIsIAotICAgIDE4OCwgMzgsIDcsIDQsIDEsIDIyMiwgOTMsIDM4LCA3LCA0LCAxLCAyMDAsIDIyMiwgOTMsIDM4LCA3LCA0LCAxLCAyMTAsIAotICAgIDE1OSwgMzgsIDUyLCAyMzUsIDIwMCwgMjUxLCAxNTUsIDUxLCAzOCwgMjU0LCAxNTYsIDEyOCwgMjE2LCA0MywgNTEsIDM4LCAKLSAgICA0MywgMjU0LCAyLCA0OCwgMzgsIDQ0LCAyNTQsIDIsIDIyLCAxMjQsIDI1NCwgMiwgNTEsIDcsIDYsIDEsIDExNiwgMiwgCi0gICAgMjIyLCAyMzcsIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA1MSwgNywgNiwgMSwgNTcsIDIsIDU5LCA0OCwgNywgCi0gICAgNCwgMSwgNTcsIDIsIDU5LCA0OCwgNywgNiwgMSwgNTcsIDIsIDU5LCA1MSwgNywgNCwgMSwgNTcsIDIsIDU5LCA1MSwgNywgCi0gICAgNiwgMSwgNTcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgNTcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjUxLCAKLSAgICA3NSwgMiwgMjUwLCAxOTIsIDIyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkyLCAyMiwgMTQyLCA3LCA2LCAKLSAgICAxLCAyNDksIDY5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgCi0gICAgNTksIDUxLCA3LCA0LCAxLCAyNDksIDY5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDIzMiwgMjIwLCA1MSwgCi0gICAgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyNTAsIDE5MSwgNywgNCwgCi0gICAgMSwgMjQ5LCA2OSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyNDksIAotICAgIDY5LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDQsIAotICAgIDEsIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDE2MCwgCi0gICAgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjE2LCA5MCwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgMjE2LCA5MCwgCi0gICAgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxOTIsIDIyLCAyNTEsIDE1NCwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDE5MiwgCi0gICAgMjIsIDI1MSwgMTU0LCA3LCA2LCAxLCAyNDUsIDE1LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDU5LCA0OCwgCi0gICAgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIAotICAgIDI0MiwgNjgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQyLCA2OCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDIsIDY4LCAyLCA1OSwgCi0gICAgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAKLSAgICAyNDIsIDY4LCAyLCAyNDgsIDksIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAKLSAgICAyNTAsIDE5MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjUxLCAxNTUsIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTEsIAotICAgIDE1NSwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIxNiwgCi0gICAgOTAsIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIAotICAgIDI0OCwgMTAsIDIyLCAxNDIsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDE0MiwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMTQyLCA3LCAKLSAgICA2LCAxLCAyMzUsIDMwLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjM1LCAzMCwgCi0gICAgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKLSAgICA1OSwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA1OSwgMjUyLCA1MSwgCi0gICAgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgCi0gICAgMjMzLCAxNTUsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgCi0gICAgMjMzLCAxNTUsIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIAotICAgIDIzMiwgNTUsIDIsIDE0MiwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMTQyLCA3LCA2LCAxLCAyMzIsIDU1LCAyLCA1OSwgNDgsIAotICAgIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjMyLCA1NSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzIsIAotICAgIDU1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjMwLCAzMSwgMiwgNTksIDQ4LCAKLSAgICA3LCA2LCAxLCAyMzAsIDMxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAKLSAgICAzMSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIzMCwgMzEsIAotICAgIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIAotICAgIDkwLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjE2LCA5MCwgCi0gICAgMjIsIDI0OCwgOSwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjQ4LCA5LCA3LCA2LCAxLCAxNDQsIDIsIDIzMSwgCi0gICAgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMjI2LCAKLSAgICAxMTAsIDIsIDE0MiwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDE0MiwgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDU5LCA0OCwgNywgCi0gICAgNCwgMSwgMjI2LCAxMTAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjcsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDU5LCAKLSAgICA1MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIyMywgMjI3LCAKLSAgICAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAKLSAgICAxLCAyMjMsIDIyNywgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgCi0gICAgOTQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCA1OSwgNTEsIAotICAgIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1NSwgMTIsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1NSwgMTIsIAotICAgIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQzLCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDk0LCAKLSAgICAyLCAyNTAsIDI0MywgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDcsIAotICAgIDQsIDEsIDIyMiwgOTQsIDIsIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgNTksIDQ4LCAKLSAgICA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTcsIAotICAgIDE1NCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgCi0gICAgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAKLSAgICAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCA1MSwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDkwLCA1MSwgNywgNiwgMSwgMTA0LCAKLSAgICAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDkwLCAKLSAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIAotICAgIDIyLCAyNDgsIDksIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAyNDgsIDksIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAKLSAgICAxODQsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxODQsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAotICAgIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAKLSAgICAyNDIsIDE0MywgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDYsIDEsIAotICAgIDIxMiwgOTksIDIsIDI0OCwgOSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgCi0gICAgNDgsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAKLSAgICAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDksIDcsIDYsIAotICAgIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgMTYwLCAKLSAgICAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgCi0gICAgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgCi0gICAgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAKLSAgICAyMTcsIDE1NCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIDExNiwgMiwgNDQsIDE2MywgMjIyLCAyMzYsIDcsIDQsIDEsIDIwMCwgCi0gICAgMjIyLCA5NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMDAsIDIyMiwgOTQsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIwMCwgCi0gICAgMjIyLCA5NCwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMjIwLCA3OCwgMjIyLCA5MywgNywgNCwgMSwgMjQ4LCA2MiwgNywgNiwgCi0gICAgMSwgMTE2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMTYsIDIsIDI0MSwgNTksIDQ4LCAKLSAgICA3LCA0LCAxLCAxMTYsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIAotICAgIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIAotICAgIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCAKLSAgICA0OCwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgCi0gICAgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAKLSAgICA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgCi0gICAgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgCi0gICAgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgCi0gICAgMjUxLCAxNTUsIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDI0MSwgNTksIDQ4LCA3LCAKLSAgICA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTg0LCA3LCAKLSAgICA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgNTksIAotICAgIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgCi0gICAgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMTg0LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIAotICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCi0gICAgMzksIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIAotICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDEsIDU5LCA0OCwgNywgCi0gICAgNCwgMSwgMjQwLCAxNjEsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgNTksIDUxLCA3LCA0LCAxLCAKLSAgICAyNDAsIDE2MSwgMiwgNTksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIAotICAgIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCAKLSAgICA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAxODQsIAotICAgIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgNTksIAotICAgIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIAotICAgIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAKLSAgICAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAKLSAgICAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgCi0gICAgMCwgMjIsIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAKLSAgICAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIAotICAgIDEwNCwgMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCAKLSAgICAwLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDEsIDAsIAotICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNDEsIDAsIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgCi0gICAgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxODQsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA2LCAxLCAKLSAgICAxMDQsIDIsIDI0MSwgMCwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE4LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyMTEsIDExOCwgCi0gICAgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1OSwgCi0gICAgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE4NCwgNywgNCwgCi0gICAgMSwgMjExLCAxMTgsIDIsIDE4NCwgNywgNiwgMSwgMjMwLCAyMjgsIDIzMiwgMTkxLCA3LCA0LCAxLCAyMzAsIDIyOCwgMjMyLCAKLSAgICAxOTEsIDcsIDYsIDEsIDIzMCwgMjI4LCAyMTQsIDEwNSwgNywgNCwgMSwgMjMwLCAyMjgsIDIxNCwgMTA1LCA3LCA2LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgMjMyLCAxMjksIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyOSwgMjYsIDQsIDEsIDI1NCwgCi0gICAgMTUyLCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAKLSAgICAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgCi0gICAgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAKLSAgICAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgCi0gICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTcsIAotICAgIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAKLSAgICAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgCi0gICAgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAKLSAgICAxMTQsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAKLSAgICAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgCi0gICAgMjQ1LCAxMDksIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIAotICAgIDQsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAKLSAgICAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCi0gICAgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjQ1LCAKLSAgICAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgCi0gICAgMTMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAKLSAgICAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyNDUsIAotICAgIDcyLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAotICAgIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgCi0gICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCAKLSAgICA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAKLSAgICAxNzgsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYxLCAyNiwgCi0gICAgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIAotICAgIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgCi0gICAgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgCi0gICAgMTc4LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAKLSAgICAyMjQsIDE1NywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIAotICAgIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCi0gICAgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAKLSAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjM1LCAKLSAgICAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTcsIDI2LCA2LCAKLSAgICAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAKLSAgICAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIAotICAgIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAKLSAgICAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgCi0gICAgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIAotICAgIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgCi0gICAgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIAotICAgIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjI2LCAyMDQsIAotICAgIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgCi0gICAgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKLSAgICAyMjYsIDIwNCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIAotICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgCi0gICAgMTYxLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAKLSAgICAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIAotICAgIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgCi0gICAgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIAotICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIAotICAgIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAKLSAgICAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDYsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAotICAgIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAKLSAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAKLSAgICAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIAotICAgIDE3OCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MSwgCi0gICAgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAKLSAgICAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAKLSAgICAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgCi0gICAgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDE1MiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgCi0gICAgMTA5LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgCi0gICAgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIxNCwgMTMsIAotICAgIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjE0LCAxMywgMjYsIDQsIAotICAgIDEsIDIyNiwgMjA0LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAKLSAgICAxNTgsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgCi0gICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgCi0gICAgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgCi0gICAgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAKLSAgICAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNCwgCi0gICAgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgCi0gICAgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIAotICAgIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgCi0gICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIAotICAgIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAKLSAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNCwgMSwgMjQ1LCA3MiwgCi0gICAgMiwgMjI0LCAxNTgsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIAotICAgIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgCi0gICAgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAKLSAgICAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIAotICAgIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgCi0gICAgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAKLSAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgCi0gICAgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCAKLSAgICA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAKLSAgICAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIAotICAgIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgCi0gICAgMTcwLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgCi0gICAgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIAotICAgIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgCi0gICAgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKLSAgICAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIAotICAgIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgCi0gICAgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIAotICAgIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIAotICAgIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAKLSAgICAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIAotICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAKLSAgICAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgCi0gICAgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAKLSAgICAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMzEsIDIzNywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMTQsIAotICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgCi0gICAgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI1NCwgCi0gICAgMTUyLCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIxMywgMTIwLCAyNiwgNiwgCi0gICAgMSwgMjU0LCAxNTIsIDIsIDIzMSwgMjM3LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAotICAgIDE1MiwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNzAsIDI2LCAyMzQsIDgsIDI2LCAyMjQsIAotICAgIDE3MCwgMjYsIDIyNCwgMTU3LCAyNiwgMjI1LCAxNzgsIDI2LCAyNDgsIDQsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgCi0gICAgNzIsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCi0gICAgMjQ1LCA3MiwgMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNSwgMTc4LCAyNiwgCi0gICAgNCwgMSwgMjQ1LCA3MiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMTQsIDEzLCAKLSAgICAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIAotICAgIDI0NSwgNzIsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNzAsIDI2LCAyMjQsIDE1OCwgMjIsIAotICAgIDIxNCwgMTMsIDI2LCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIAotICAgIDEsIDIzNSwgMTkzLCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMzEsIDIzNywgMjYsIDQsIDEsIDIzNSwgCi0gICAgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIyNiwgMTE0LCAKLSAgICAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIyNSwgCi0gICAgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIzMSwgMjM3LCAKLSAgICAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI2LCAxMTQsIDI2LCAyNDgsIAotICAgIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgCi0gICAgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMzEsIDIzNywgMjYsIDQsIAotICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIAotICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjIzLCA0MSwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMjMsIDQxLCAyLCAyNDgsIDE2MSwgCi0gICAgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMjUsIAotICAgIDE3OCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMzEsIDIzNywgCi0gICAgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgMTE0LCAyNiwgNiwgCi0gICAgMSwgMjIzLCA0MSwgMiwgMjQ4LCAxNjEsIDI2LCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCA0LCAyMiwgMjI2LCAKLSAgICAxMTQsIDI2LCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAotICAgIDIyNiwgMjA2LCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgCi0gICAgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMjYsIDExNCwgMjYsIAotICAgIDYsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgCi0gICAgMjI2LCAyMDYsIDIsIDIyNCwgMTcwLCAyNiwgMjI2LCAxMTQsIDI2LCAyNDgsIDE2MSwgMjQ1LCAxNTksIDIyNCwgMzAsIAotICAgIDI0NSwgMTY4LCAyMjQsIDMwLCAyNDUsIDE1OSwgMjE5LCAyMCwgMjQ1LCAxNjgsIDIxOSwgMjAsIDIxNiwgMTQyLCAyMTksIAotICAgIDIwLCAyNDQsIDE3LCAyMTksIDIwLCAyMTksIDEyNSwgMjE5LCAyMCwgMjQ0LCAxMjAsIDIxOSwgMjAsIDIyNCwgMTQ0LCAKLSAgICAyMTksIDIwLCAyMTYsIDE3MSwgMjE5LCAyMCwgMjQyLCA0MiwgMjE5LCAyMCwgMjEwLCA4NywgMjExLCAyNDUsIDIxOSwgMjAsIAotICAgIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDcyLCAyMTAsIDg3LCAyMTEsIDI0NSwgMjM1LCA2OSwgMjMzLCA0NCwgNzksIDIyMiwgCi0gICAgMjQ2LCA3OSwgMjQwLCAxNzUsIDIyOCwgNzMsIDI0MCwgMTc1LCAyNDQsIDEyMCwgMjQ4LCAxNjQsIDI0NSwgMTU5LCAyNDgsIAotICAgIDE2NCwgMjQ1LCAxNjgsIDI0OCwgMTY0LCAyMDMsIDEzMCwgNTIsIDY3LCAyMzIsIDIxOSwgNTIsIDEyMSwgMjMyLCAyMTksIAotICAgIDQzLCAyMTksIDE1NywgMjI0LCAxLCA3OSwgNDQsIDIxOSwgMTU3LCAyMjQsIDEsIDc5LCAyMTksIDE1NywgMjMyLCAxMTUsIAotICAgIDIyNCwgMSwgNzksIDIxOSwgMTU3LCAyNDEsIDE3MCwgMjI0LCAxLCA3OSwgNDMsIDUyLCAyMjQsIDEsIDc5LCA0NCwgNTIsIAotICAgIDIyNCwgMSwgNzksIDUyLCAyMzIsIDExNSwgMjI0LCAxLCA3OSwgNTIsIDI0MSwgMTcwLCAyMjQsIDEsIDc5LCAyNDgsIDIxMywgCi0gICAgNTIsIDI0OCwgMjEzLCAyNTEsIDEyMSwgMjE1LCAyMjMsIDI1MSwgMTIxLCAxMjMsIDU5LCAyMzMsIDYyLCAxMTMsIDU5LCAKLSAgICAyMzMsIDYyLCAyMDMsIDI0NSwgMTcxLCAyNDAsIDE3MywgMjI1LCAxMywgMjMyLCAyMjAsIDIyMCwgMTM5LCAyMjYsIDE5LCAKLSAgICAyMjAsIDEzOSwgMjMzLCA0NCwgMjQ1LCAxNjYsIDIyMiwgMjQ2LCAyNDUsIDE2NiwgMjI0LCAyNDksIDI0NywgMjA0LCAyNDQsIAotICAgIDI3LCAyMzMsIDQ0LCAyMjYsIDEyMSwgMjIyLCAyNDYsIDIyNiwgMTIxLCAyMjksIDE5OSwgMjI4LCA3OCwgMjE5LCAyMCwgCi0gICAgMjI1LCAxODYsIDIzMCwgMTk4LCA1MCwgMjI1LCAxODYsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgNTAsIDIyNCwgMTkzLCA1MiwgCi0gICAgMjI0LCAxOTMsIDIxNSwgMjEyLCAyMjQsIDE5MywgMjIzLCA1MiwgMjI0LCAxOTMsIDIyMywgNTIsIDUyLCAyMjQsIDE5MywgCi0gICAgMjIzLCA1MiwgMjE1LCAyMTIsIDIyNCwgMTkzLCAyNTAsIDI0NiwgMjE5LCAxNTcsIDIzMywgNDgsIDI1NCwgMTE4LCAyMjQsIAotICAgIDEsIDc5LCAyMTksIDE1NywgMjIyLCAyNTAsIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAyMjMsIDExMCwgNzksIDUyLCAyNDUsIAotICAgIDM5LCA3OSwgMjM1LCAyMDgsIDIyNiwgMTIzLCAyMTQsIDE4MCwgMTM1LCAyMTYsIDExMiwgMjUwLCAyNDcsIDIzNSwgMjIzLCAKLSAgICAyMjUsIDEzLCAyNTMsIDIyMiwgMjQwLCAxNzYsIDI1MSwgMTIxLCAyNDQsIDEwLCAyMTksIDk3LCA0MywgNDIsIDI1MSwgCi0gICAgMTY2LCAyLCAyMjQsIDEwLCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMjQsIDEwLCA1MiwgMjI0LCAxNiwgNzksIDIyNCwgMTYsIAotICAgIDI0NSwgMzksIDc5LCAyNDUsIDM5LCAyMjQsIDE2LCA3OSwgMjE2LCA3MSwgNSwgMjQ1LCA3MywgMjIzLCA1MiwgMjI1LCA3MSwgCi0gICAgNTAsIDg1LCAxNDAsIDI1MSwgMTIxLCA4NSwgOTcsIDI1MSwgMTIxLCAxMjEsIDI1MywgMjI0LCAyMjMsIDUyLCAyMjAsIAotICAgIDE1MiwgMjUwLCA5LCAyMTQsIDE2MywgMTEzLCAyNTMsIDIyMywgMjU0LCAxNjcsIDIxMywgMTg4LCAyNDksIDIyNSwgMjMwLCAKLSAgICAxODcsIDUwLCAyMTcsIDIzNSwgMjQ4LCAxNjQsIDIzNSwgMjAwLCAyMTQsIDE4MCwgMjQ0LCA2MCwgMjI0LCAxNDQsIDc5LCAKLSAgICAxMzQsIDU5LCAyMjQsIDE0MywgMjI0LCAyNywgMjI0LCAxOTMsIDI0NCwgMTksIDU5LCAyMjQsIDE0MywgMjQ0LCA4OSwgNTksIAotICAgIDIyNCwgMTQzLCAxMTMsIDU5LCAyMjQsIDE0MywgMjQ0LCAxOSwgNTksIDc5LCAyNDYsIDEyNiwgMjQ5LCAxMzgsIDIxNSwgCi0gICAgMjIyLCA2NywgMjQ0LCAxOSwgMjQ3LCAxMjYsIDIzMSwgODcsIDExLCAyMTksIDIwLCAyMTEsIDIwOSwgMjM1LCA2OSwgMjQzLCAKLSAgICAyMzQsIDI1NCwgNjAsIDIzNSwgMTk4LCAyMTYsIDg2LCAyMzUsIDE5OCwgMjIwLCAxMzksIDIzNSwgMTk4LCAyMjUsIDI1LCAKLSAgICAyMzMsIDQ0LCAyMzUsIDE3MSwgMjIyLCAyNDYsIDIzNSwgMTcxLCAyNDQsIDEwMCwgMjE4LCA5MSwgMjM1LCAxNzEsIDIyNCwgCi0gICAgMjQ5LCAyNDcsIDIwNCwgMjM1LCAxNzEsIDIzNSwgMjM1LCAyMTcsIDE4MywgMjE3LCAyNTIsIDI1NSwgMTQsIDIxNywgMTgzLCAKLSAgICAyMTcsIDI1MiwgMjM1LCAyMzUsIDksIDI0NCwgMjgsIDIyMCwgODIsIDI1NSwgMTQsIDksIDI0NCwgMjgsIDIyMCwgODIsIAotICAgIDIyOSwgMTk0LCAyMSwgMjIwLCA4MywgMjI4LCA3NCwgMjEsIDIyMCwgODMsIDIxOCwgMjQsIDIxMCwgODYsIDIxOCwgMjQsIAotICAgIDcsIDQsIDEsIDc0LCAyMTgsIDI0LCAxNjEsIDIxOCwgMjQsIDE5MCwgMjE4LCAyNCwgMTk1LCAyMTgsIDI0LCAxOTksIDIxOCwgCi0gICAgMjQsIDE5NiwgMjE4LCAyNCwgMjAxLCAyMTgsIDI0LCA5NiwgNTAsIDIxOCwgMjQsIDIzMCwgMTg2LCAyMTgsIDI0LCAyNDUsIAotICAgIDEwNiwgNTAsIDIxOCwgMjQsIDQzLCAyMjYsIDcsIDIxOCwgMjQsIDQ0LCAyMjYsIDcsIDIxOCwgMjQsIDcsIDQsIDEsIDIzMCwgCi0gICAgMzAsIDIxOCwgNjYsIDIxMCwgODYsIDIxOCwgNjYsIDExMSwgMjE4LCA2NiwgMTA1LCAyMTgsIDY2LCAxNTgsIDIxOCwgNjYsIAotICAgIDE2MSwgMjE4LCA2NiwgMTkwLCAyMTgsIDY2LCAxOTUsIDIxOCwgNjYsIDE5OSwgMjE4LCA2NiwgMTk2LCAyMTgsIDY2LCAKLSAgICAyMDEsIDIxOCwgNjYsIDk2LCA1MCwgMjE4LCA2NiwgMjMwLCAxODYsIDIxOCwgNjYsIDI0NSwgMTA2LCA1MCwgMjE4LCA2NiwgCi0gICAgNDMsIDIyNiwgNywgMjE4LCA2NiwgNDQsIDIyNiwgNywgNywgMjE4LCA2NiwgNCwgMSwgNjEsIDcsIDIxOCwgNjYsIDQsIDEsIAotICAgIDc2LCA3LCAyMTgsIDY2LCA0LCAxLCA3OCwgNywgMjE4LCA2NiwgNCwgMSwgMjExLCAxNzgsIDcsIDIxOCwgNjYsIDQsIDEsIAotICAgIDIyMSwgMTk3LCA3LCAyMTgsIDY2LCA0LCAxLCAyNDIsIDY3LCA3LCAyMTgsIDY2LCA0LCAxLCAyMzUsIDI5LCA3LCAyMTgsIAotICAgIDY2LCA0LCAxLCAxNTYsIDcsIDIxOCwgNjYsIDQsIDEsIDE5NCwgNywgMjE4LCA2NiwgNCwgMSwgMjMwLCAzMCwgNywgMjE4LCAKLSAgICA2NiwgNCwgMSwgMjI2LCAxMDksIDcsIDIxOCwgNjYsIDQsIDEsIDIyMiwgOTMsIDcsIDIxOCwgNjYsIDQsIDEsIDIxNywgCi0gICAgMTUzLCAyNDUsIDU0LCA1MCwgMjQ5LCAyMzUsIDUwLCAyNDksIDEyNSwgNTAsIDI0NCwgMywgMjQ0LCA2LCA1MCwgMjMyLCAKLSAgICAyMDQsIDUwLCAyMzAsIDE5OSwgNTAsIDIyOSwgMjE1LCA1MCwgMjI1LCAxNjUsIDUwLCAyMjIsIDEyMCwgNTAsIDIxMSwgCi0gICAgMjE3LCA1MCwgMTY2LCAyMjAsIDUxLCA1MCwgMjQ3LCAxMzUsIDUwLCAyNDUsIDU1LCA1MCwgMjM0LCA4MiwgNTAsIDIxNSwgCi0gICAgMTEzLCA1MCwgMjQ2LCAxMDksIDUwLCAyNDMsIDQ3LCAyMjUsIDE5NiwgNTAsIDIyNSwgMTYzLCA1MCwgMjQyLCAxMTYsIDUwLCAKLSAgICAyNTMsIDE5MCwgNTAsIDI0MCwgMjM1LCA1MCwgMjUwLCAxOTMsIDUwLCAyMzIsIDE5NywgMjE2LCA0LCA1MCwgMjE5LCAyLCAKLSAgICA1MCwgMjE2LCAyNDYsIDUwLCAyMzUsIDI0OCwgMjIyLCAxMjAsIDUwLCAyMTUsIDk3LCAyMzIsIDIwNCwgNTAsIDM4LCA0MywgCi0gICAgMjQyLCA2LCA0OCwgMzgsIDQ0LCAyNDIsIDYsIDQ4LCAzOCwgMjAwLCA2NywgMjMyLCAyMjAsIDIyNiwgMTI0LCAzOCwgMjE5LCAKLSAgICAyNTMsIDY3LCAyMzIsIDIyMCwgMjI2LCAxMjQsIDM4LCAyNTQsIDk2LCA4MCwgNDgsIDM4LCAyNTAsIDEwLCA4MCwgNDgsIAotICAgIDM4LCA0MywgODAsIDQ4LCAzOCwgNDQsIDgwLCA0OCwgMzgsIDIyMiwgMjM3LCAyMjYsIDEyNCwgMzgsIDI1MCwgMTAsIDIyMiwgCi0gICAgMjM3LCAyMjYsIDEyNCwgMzgsIDI1NCwgOTYsIDIyMiwgMjM3LCAyMjYsIDEyNCwgMzgsIDEzNCwgMTcwLCA0OCwgMzgsIAotICAgIDI0NCwgMTksIDE3MCwgNDgsIDM4LCAyNDUsIDE1NCwgMjUwLCA0MywgMzgsIDI0NSwgMTU0LCAyMTgsIDIzNiwgMzgsIDI0NSwgCi0gICAgMTU0LCAyNDgsIDAsIDM4LCAyNDUsIDE1NCwgMjUwLCA0NCwgMjUyLCAxODgsIDM4LCA0MywgNDQsIDgwLCA0OCwgMzgsIAotICAgIDI0NSwgMTU0LCAyMjEsIDE5MCwgMzgsIDI0NSwgMTU0LCAyMzQsIDE0MSwgMzgsIDI0NSwgMTU0LCAyMTQsIDE1NSwgMjI1LCAKLSAgICAxMCwgMjE1LCAyMjYsIDM4LCAyMjMsIDUzLCAyMTksIDQ5LCAyMjYsIDEyNCwgMzgsIDUyLCA2NywgMjE4LCAxMDUsIDIyNiwgCi0gICAgMTI0LCAzOCwgMjU0LCAxMDYsIDg3LCAzOCwgMjE1LCAyMTIsIDIxNCwgMTgyLCAzOCwgMjExLCAyNDcsIDI1MSwgMTQ4LCAKLSAgICA0OCwgMzgsIDE0MCwgODAsIDIyNiwgMTI0LCAzOCwgMjAwLCA1MiwgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA5NywgMjQyLCAKLSAgICA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDM4LCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAzOCwgNDMsIAotICAgIDgwLCA1MSwgMzgsIDQ0LCA4MCwgNTEsIDM4LCAyNTMsIDIyNSwgNDgsIDI1NSwgMjAsIDIyNiwgMjM1LCAyNTUsIDQsIDIxNiwgCi0gICAgNDMsIDIxNiwgMTk3LCAyMTgsIDc1LCAxMzksIDYsIDI1MSwgNzQsIDI0OCwgNzksIDI1MCwgMTg2LCAyNTAsIDE4MywgMjMyLCAKLSAgICAyMjAsIDg3LCAyNTAsIDI0OCwgMjI2LCAyMzUsIDI1MSwgMzQsIDIxNCwgMTg5LCAyNDUsIDU2LCAyNDksIDE5OSwgMjIxLCAKLSAgICAxODcsIDI0OCwgNzksIDI0NCwgMTg3LCAxMTksIDQsIDI0MywgMjA5LCAxMTksIDYsIDI0MiwgNjcsIDI1MSwgMjI3LCA2LCAKLSAgICAyNDIsIDY3LCAxMzksIDYsIDI0MiwgNjcsIDIyNSwgNDAsIDI0OSwgMTk5LCAyMjUsIDQwLCAyNDksIDIwMCwgMTE1LCAxMTMsIAotICAgIDIyNSwgMTExLCAxMTksIDYsIDc0LCAyNTEsIDIyNywgNiwgNzQsIDExOSwgNiwgMTU2LCAxMTksIDQsIDE1NiwgMjMzLCAKLSAgICAxNTUsIDU3LCAyNTIsIDE0OSwgODcsIDEzOSwgNiwgMjMwLCAzMCwgMjI3LCAyMDAsIDUwLCAyMTksIDMzLCAyMjMsIDEyMiwgCi0gICAgMjQ5LCAxNzAsIDExOSwgNiwgMjI2LCAxMDksIDEzOSwgNiwgMjI2LCAxMDksIDEzOSwgNiwgMjI0LCA5OSwgMTE5LCA2LCAKLSAgICAxNTMsIDI1MSwgMjI3LCA2LCAxNTMsIDEzOSwgNiwgMTUzLCAyMjQsIDE5OSwgMjE3LCA3MiwgMjIzLCA2NSwgMjIwLCAxMzQsIAotICAgIDc5LCAyMTcsIDIsIDUwLCAyMTUsIDI1NCwgMTY0LCA1MCwgMjEzLCAyNDAsIDEzOSwgNiwgMjEwLCAxNTksIDIyNiwgMTM3LCAKLSAgICA1MCwgMjI2LCAyMjUsIDUwLCAyMzUsIDIwMCwgMjI2LCAyMjUsIDUwLCAyNTEsIDIyNywgNiwgMjEwLCAxNTksIDIxNSwgOTQsIAotICAgIDI2LCA0LCAxLCAyMzUsIDE5MiwgMjM0LCAxNzksIDUwLCAyNTQsIDExNSwgNTAsIDExOSwgNiwgMjUzLCAxNjYsIDI1MSwgCi0gICAgMjI3LCA2LCAyNTEsIDc0LCAyNDUsIDc2LCA4NywgMTE5LCA0LCA3NiwgMTE5LCA2LCA3NiwgMTE5LCA2LCAyNDUsIDE0LCAKLSAgICAyMTUsIDk0LCA2LCAyNDUsIDE0LCAxMTksIDYsIDE5NCwgMTE5LCA0LCA3OCwgMTA5LCA4NywgMjUyLCAzNywgODcsIDI0MiwgCi0gICAgMjA5LCA4NywgMjQ4LCAxOTgsIDg3LCAyMzUsIDIzOSwgMjE5LCAzMSwgMjIyLCAxODksIDYsIDIyNCwgOTksIDI0NCwgMTkwLCAKLSAgICA1MCwgMTM5LCA0LCAyMjUsIDExMSwgMTM5LCA0LCAyNDMsIDExNCwgMTM5LCA2LCAyNDMsIDExNCwgMTM5LCA2LCAyMjUsIAotICAgIDExMSwgMTM5LCAyMzAsIDI5LCAyMTgsIDQxLCAyMTUsIDk0LCAzNSwgNiwgMjQzLCAyMDksIDIxNSwgOTQsIDM1LCA2LCAKLSAgICAxNTYsIDIyMywgNTIsIDM1LCA2LCAxNTYsIDIxNSwgOTQsIDM1LCA2LCAyMTEsIDExNywgMTM5LCAzMiwgNiwgMjQ5LCA2OCwgCi0gICAgMTM5LCAzMiwgNCwgMjQ5LCA2OCwgMTM5LCAzMiwgNCwgNzYsIDEzOSwgMzIsIDQsIDc0LCAxMzksIDMyLCA0LCAyMzUsIAotICAgIDE1MCwgMjI0LCAxNzMsIDIzMiwgMjE5LCAyMTUsIDk0LCAyNTQsIDEzNCwgMjI1LCAxODYsIDUwLCAyNTQsIDE4OSwgMjE1LCAKLSAgICA5NCwgNCwgMjQ1LCAxNCwgMTYsIDMxLCAyMjEsIDI1NCwgMjE5LCAzMSwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjIwLCAKLSAgICAxMjAsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyOCwgMTk5LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMTYsIDI0MiwgCi0gICAgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjE2LCAxNjksIDIxMiwgMTE0LCAyNDQsIDEwLCAxMTMsIDIxNiwgMTY3LCAyMTIsIAotICAgIDExNCwgMjQ0LCAxMCwgMTIzLCAyNDQsIDEyNSwgMjEyLCAxMTQsIDI0NCwgMTAsIDExMywgMjQ0LCAxMjQsIDIxMiwgMTE0LCAKLSAgICAyNDQsIDEwLCAxMzQsIDI0NCwgMTI0LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjQ0LCAxOSwgMjQ0LCAxMjQsIDIxMiwgMTE0LCAKLSAgICAyNDQsIDEwLCAxMjMsIDIxOSwgMTE3LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjQ0LCA4OSwgMjE5LCAxMTUsIDIxMiwgMTE0LCAKLSAgICAyNDQsIDEwLCAxMjMsIDI0NSwgMTk2LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTM0LCAyNDUsIDE5NCwgMjEyLCAxMTQsIDI0NCwgCi0gICAgMTAsIDI0NCwgODksIDI0NSwgMTk0LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjIwLCAxMjQsIDI0NSwgMTk0LCAyNDQsIDEwLCAKLSAgICAyMjcsIDIwMSwgMTExLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDExMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMDUsIDIyMiwgCi0gICAgMjAwLCAyMjcsIDIwMiwgMTU4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE2MSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTAsIAotICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk1LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5OSwgMjIyLCAyMDAsIDIyNywgMjAyLCAKLSAgICAxOTYsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjAxLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNiwgMjQ4LCAyMjIsIDIwMCwgCi0gICAgMjI3LCAyMDIsIDI0NSwgMTc1LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNSwgNzYsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAKLSAgICAxMjIsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyNDAsIDIxNywgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDg5LCAyNDAsIAotICAgIDIxNywgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ4LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDExMSwgNCwgCi0gICAgMjIyLCAyMDAsIDIyNywgMjAyLCAxMDUsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTU4LCA0LCAyMjIsIDIwMCwgMjI3LCAKLSAgICAyMDIsIDE2MSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTAsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk1LCA0LCAyMjIsIAotICAgIDIwMCwgMjI3LCAyMDIsIDE5OSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTYsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgCi0gICAgMjAxLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNiwgMjQ4LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NSwgMTc1LCA0LCAKLSAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNSwgNzYsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAxMjIsIDQsIDIyMiwgCi0gICAgMjAwLCAyMjcsIDIwMiwgMTIzLCAyNDAsIDIxNywgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxNywgCi0gICAgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjE2LCAxNDksIAotICAgIDI1MSwgNzUsIDI0OSwgNjgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDgsIDIyMiwgMjAwLCAyMjcsIAotICAgIDIwMiwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIyMywgNTIsIDEyMywgMjQwLCAyMTcsIDcsIAotICAgIDQsIDEsIDIyMywgNTIsIDI1MSwgNzQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE5LCAxMjcsIDIzMywgODQsIDE3LCAyMjIsIAotICAgIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIzLCAyNDUsIDIzNCwgMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAxMjMsIDIxNiwgCi0gICAgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTgsIDIxNiwgMTQ4LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjEwLCAKLSAgICA4NywgMjE2LCAxNjcsIDE0MCwgNzUsIDIxNCwgMTUzLCA3NSwgOTcsIDc1LCAyNDYsIDExMiwgNzUsIDQzLCA0NCwgNzUsIAotICAgIDEyMCwgMTI0LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMTksIDMwLCAyNDUsIAotICAgIDIyOCwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgNzUsIDE0MCwgODAsIDIsIDkxLCA5NywgODAsIDIsIDkxLCAxNDAsIDIxMiwgCi0gICAgMzYsIDc1LCA5NywgMjEyLCAzNiwgNzUsIDE0MCwgMTEzLCAyNDEsIDI0MSwgNzUsIDIxNCwgMTUzLCAxMTMsIDI0MSwgMjQxLCAKLSAgICA3NSwgOTcsIDExMywgMjQxLCAyNDEsIDc1LCAyNDYsIDExMiwgMTEzLCAyNDEsIDI0MSwgNzUsIDE0MCwgODAsIDIsIDIxNywgCi0gICAgNzgsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMTQwLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDgwLCAyNDMsIDI1MSwgCi0gICAgMTMwLCA5NywgODAsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCA4MCwgMjQzLCAyNTEsIDEzMCwgMTIwLCAxMjQsIDgwLCAyLCAKLSAgICAyNTIsIDEzNSwgMTQwLCA4MCwgMiwgMTAzLCA5NywgODAsIDIsIDEwMywgMTQwLCA4MCwgMiwgMjMyLCAxMjksIDk3LCA4MCwgCi0gICAgMiwgMjMyLCAxMjksIDQzLCA0NCwgMjEyLCAzNiwgNzUsIDQzLCA0NCwgODAsIDIsIDkxLCAyNDYsIDExMiwgMjEwLCAzNSwgCi0gICAgNzUsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3OCwgMjMzLCA0MywgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc4LCAyMjIsIAotICAgIDI0NCwgMjQ2LCAxMTIsIDgwLCAyLCAyMTYsIDc4LCAyMzMsIDQzLCAyNDYsIDExMiwgODAsIDIsIDIxNiwgNzgsIDIyMiwgCi0gICAgMjQ0LCA5NywgODAsIDIsIDI0OSwgMTY5LCAyNDYsIDExMSwgMjQ2LCAxMTIsIDgwLCAyLCAyNDksIDE2OSwgMjMzLCA0MywgCi0gICAgMjU0LCA5NiwgMjE2LCAxNSwgMjIwLCAxNTUsIDc1LCAyNTAsIDEwLCAyMTYsIDE1LCAyMjAsIDE1NSwgNzUsIDIyOCwgNjEsIAotICAgIDIxMiwgOSwgODAsIDIxNiwgNDMsIDIwMCwgMTMwLCAxNDAsIDgwLCAyMTYsIDQzLCAyNTIsIDE0OSwgMTE1LCA5NywgODAsIAotICAgIDIxNiwgNDMsIDEzMCwgMjU0LCA5NiwgMjA0LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjA0LCAyNTAsIDQ0LCA3NSwgMTQwLCAKLSAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE1MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMjE0LCAKLSAgICAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjQ0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjMzLCAKLSAgICA0MywgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTUyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIAotICAgIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI0NCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAotICAgIDIzMywgNDMsIDk3LCA4MCwgMTE1LCAxNDAsIDc1LCAyMTQsIDE1MywgODAsIDE0MCwgNjQsIDI0NiwgMTEyLCA3NSwgMTQwLCAKLSAgICA4MCwgMTE1LCA5NywgNzUsIDE0MCwgMjI2LCA3NCwgMjUzLCAyNTUsIDIxNCwgMTUzLCAyMjYsIDc0LCAyNTMsIDI1NSwgOTcsIAotICAgIDIyNiwgNzQsIDI1MywgMjU1LCAyNDYsIDExMiwgMjI2LCA3NCwgMjUzLCAyNTUsIDE0MCwgMjQyLCA2LCAxMTUsIDk3LCAKLSAgICAyNDIsIDUsIDk3LCAyNDIsIDYsIDExNSwgMTQwLCAyNDIsIDUsIDE0MCwgNTIsIDgwLCAyLCA5MSwgNDMsIDQ0LCA1MiwgODAsIAotICAgIDIsIDkxLCA5NywgNTIsIDgwLCAyLCA5MSwgMTQwLCA1MiwgNzUsIDIxNCwgMTUzLCA1MiwgNzUsIDk3LCA1MiwgNzUsIDI0NiwgCi0gICAgMTEyLCA1MiwgNzUsIDQzLCA0NCwgNTIsIDc1LCAxMjAsIDEyNCwgNTIsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDUyLCA3NSwgCi0gICAgMjI4LCA2MSwgMjQ1LCAyMjgsIDUyLCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDUyLCA3NSwgMjE5LCAzMCwgMjEyLCA5LCAKLSAgICA1MiwgNzUsIDE0MCwgMjE1LCAyMTIsIDc1LCA5NywgMjE1LCAyMTIsIDc1LCAxNDAsIDIxOCwgMjMyLCA3NSwgOTcsIDIxOCwgCi0gICAgMjMyLCA3NSwgMjE0LCAxNTMsIDgwLCAyLCA1MiwgOTEsIDI0NiwgMTEyLCA4MCwgMiwgNTIsIDkxLCAxNDAsIDI0OCwgMTYzLCAKLSAgICA3NSwgMjE0LCAxNTMsIDI0OCwgMTYzLCA3NSwgOTcsIDI0OCwgMTYzLCA3NSwgMjQ2LCAxMTIsIDI0OCwgMTYzLCA3NSwgCi0gICAgMTQwLCA4MCwgMjE2LCA0MywgMTMwLCA5NywgODAsIDIxNiwgNDMsIDEzMCwgMTQwLCA3MSwgNzUsIDIxNCwgMTUzLCA3MSwgCi0gICAgNzUsIDk3LCA3MSwgNzUsIDI0NiwgMTEyLCA3MSwgNzUsIDIxNCwgMTUzLCA3MSwgODAsIDI0MywgMjUxLCAxMzAsIDIxNCwgCi0gICAgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxNywgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE4LCAyLCAKLSAgICAyMDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE4LCAyLCA2NywgMTMwLCAyMTQsIDE1MywgNzEsIAotICAgIDUyLCA3NSwgMjE0LCAxNTMsIDcxLCA1MiwgODAsIDIyNiwgMjAxLCAyMjUsIDIxNywgOTcsIDcxLCA4MCwgMjQzLCAyNTEsIAotICAgIDIxMiwgNTYsIDIyOCwgNjEsIDIxMiwgOSwgODAsIDIxNiwgNDMsIDI0OSwgMTY4LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIAotICAgIDIxNiwgNDMsIDI0OSwgMTY4LCAxMjAsIDEyNCwgNzEsIDc1LCA0NCwgODAsIDIsIDQsIDI1MCwgNDMsIDI0NiwgMTEyLCA4MCwgCi0gICAgMTQwLCA2NCwgMjE0LCAxNTMsIDc1LCAxMzQsIDk3LCAyNTMsIDI1NSwgMTQwLCA4MCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIAotICAgIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNjcsIDkxLCAxNDAsIDgwLCAyLCA1MiwgNjcsIDkxLCA5NywgODAsIDIsIDUyLCA2NywgCi0gICAgOTEsIDQzLCA0NCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjI2LCAxNzcsIDc1LCA5NywgMjI2LCAxNzcsIDc1LCA0MywgCi0gICAgNDQsIDIyNiwgMTc3LCA3NSwgMzEsIDI1NCwgMTYzLCAyNDksIDIyMiwgMjI2LCAxLCAyNDcsIDI0MSwgMjE2LCAxODgsIAotICAgIDI0NSwgMzUsIDIxNiwgMTg4LCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ1LCAzNiwgMjQ1LCAxNjAsIDIyMCwgMTI5LCAyMzUsIAotICAgIDI1MiwgMjI5LCAyMjYsIDI0NSwgMTc4LCAyMjYsIDIzNSwgMjI4LCA1NywgMjU0LCAxMzIsIDI0NSwgMTc4LCAyMjYsIDIzNSwgCi0gICAgNCwgMjQ1LCAxNzgsIDIyNiwgMjM1LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIzMSwgNjcsIDI0NywgMTQ2LCAyMjgsIDU3LCAKLSAgICAyNDksIDE5NiwgMjUzLCAyNDYsIDIzMSwgNjcsIDQsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjMxLCA2NywgMjQ1LCAxNTEsIAotICAgIDY0LCAyMjQsIDE3NSwgMjMwLCAyOSwgMjI0LCAxODMsIDIzMCwgMjksIDI0OSwgMTczLCAyMzAsIDI5LCAyMTgsIDQxLCAKLSAgICAyMzAsIDE4NywgNTAsIDIzMCwgMTg1LCA1MCwgNTksIDIyNSwgMjUsIDI0NywgMTc3LCAyMTksIDk3LCAyMjAsIDEzMCwgCi0gICAgMjMwLCAxODYsIDI1MywgMjI1LCAyMjYsIDE3MSwgMjIyLCAyMzcsIDIyNiwgMTcxLCAyNTEsIDEyMiwgMjI2LCAxNzEsIDQyLCAKLSAgICAyMjIsIDE5NSwgMjQ5LCAxMTcsIDIyMiwgMTk1LCAyNDQsIDEyLCAyMjIsIDE5NSwgMjI0LCAxNzEsIDExMiwgMjM1LCAyNDEsIAotICAgIDQ0LCAyNTQsIDExNywgMjU0LCAxMTcsIDIzMSwgOTMsIDI1NCwgMTE3LCAyMTksIDEsIDI1NCwgMTE3LCAyNDcsIDE3OSwgCi0gICAgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NywgMTgyLCAyMjYsIDEyLCAxMTIsIDIyOCwgNTcsIDIyNiwgMTIsIDExMiwgMjMyLCAKLSAgICAxNTIsIDI1NCwgMTI2LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIzNSwgMjA1LCAyMTQsIDE3NSwgMjM1LCAyMTgsIDUyLCAyMzUsIAotICAgIDIxOCwgMjE1LCAyMTIsIDIzNSwgMjE4LCAyNDksIDE5MCwgMjM1LCAyMTgsIDIxOCwgMTQsIDIzNSwgMjE4LCAyMTMsIDEyOSwgCi0gICAgMjM1LCAyMTgsIDI1MCwgMTAsIDIzNSwgMjE4LCAyNTAsIDEwLCAyNDksIDE5MCwgMjM1LCAyMTgsIDI1NCwgOTYsIDI0OSwgCi0gICAgMTkwLCAyMzUsIDIxOCwgMjE2LCAxODcsIDI1MiwgNzUsIDIyMywgMTQwLCAyMjQsIDE3MiwgNTksIDIzMCwgMTg2LCAyNDUsIAotICAgIDQxLCAyNDMsIDUzLCAyMjQsIDE3MiwgMjQxLCA2NCwgMjE2LCA5MCwgMjI2LCAxNzEsIDIyMywgNTIsIDE4NCwgMjM1LCAKLSAgICAyMDAsIDIzMywgNzEsIDIyMiwgOTMsIDIxOSwgMTU5LCAyMTIsIDM1LCAyMTEsIDIwMCwgMjI0LCAxODMsIDIyOCwgNTcsIAotICAgIDE4NCwgMjMwLCAxODcsIDE4NCwgMjUzLCAyMTgsIDEyOCwgMTEyLCAyMjgsIDU3LCAyNTMsIDIxOCwgMTI4LCAxMTIsIDI1NCwgCi0gICAgNTYsIDEyOCwgMTEyLCAyNTQsIDU2LCAyNTEsIDk2LCAyMjgsIDU3LCAyNTUsIDEzLCAxMjgsIDExMiwgMjI5LCAxMDUsIAotICAgIDI1NCwgNTYsIDIyOCwgNjQsIDI1NSwgMTMsIDEyOCwgMTEyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIyOCwgNTcsIDI1NCwgCi0gICAgMTU2LCAxMjgsIDExMiwgMjU0LCAxNTYsIDEyOCwgMTc3LCAxMjgsIDExMiwgMjE1LCAyMTIsIDE4NCwgMjU0LCAxNjQsIAotICAgIDEyOCwgMTEyLCAyNDUsIDEwMiwgMTEyLCAyNDMsIDUyLCAyNDUsIDEwMiwgMTEyLCAyNDcsIDI0MiwgMjUyLCAzMSwgMjU0LCAKLSAgICA1OCwgMjE2LCAxOTcsIDIzMiwgMjI3LCAyNDMsIDUyLCAxMjgsIDExMiwgMjU0LCA1NiwgMTI4LCAyMTYsIDQzLCAxNzcsIAotICAgIDIxNiwgMTk3LCAyMzYsIDIyLCAyMjYsIDIzNSwgMjM2LCAyMiwgNjQsIDE3NywgMjU0LCA1NiwgMTI4LCAxMTIsIDI0OSwgCi0gICAgMjM1LCAyNDUsIDEwNSwgMjQ1LCAxMDYsIDI0OSwgMjM0LCAyMjIsIDIzNywgMjM2LCA3LCAxMjgsIDExMiwgMjIyLCAyMzcsIAotICAgIDEyOCwgMTEyLCAyNDksIDE2MiwgMTEyLCAyNDUsIDc1LCAyNDUsIDEwNCwgMTEyLCAyMTgsIDE1OSwgMjQ1LCAxMDUsIDI0OCwgCi0gICAgNjMsIDEyOCwgMTEyLCAxMjgsIDIxNiwgNDMsIDI1MSwgODYsIDI0OCwgODAsIDIzMSwgOTMsIDI1MSwgODUsIDIyNCwgMTQsIAotICAgIDEyOCwgMTEyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjQwLCAxMTEsIDExMiwgMjI4LCA1NywgMjQwLCAxMTEsIDExMiwgMjE4LCAKLSAgICAxMTEsIDI0NSwgMTAyLCAxMTIsIDIzMywgMjEsIDE3NywgMTI4LCAxMTIsIDI0MiwgMTM3LCAxNzcsIDEyOCwgMTEyLCAyMzMsIAotICAgIDIxLCAxMTUsIDEyOCwgMTEyLCAyNDIsIDEzNywgMTE1LCAxMjgsIDExMiwgMjMzLCAyMSwgMjUxLCA5NiwgMjI4LCA1NywgCi0gICAgMTI4LCAxMTIsIDI0MiwgMTM3LCAyNTEsIDk2LCAyMjgsIDU3LCAxMjgsIDExMiwgMjMwLCAxMDIsIDIzMywgMjAsIDIzMCwgCi0gICAgMTAyLCAyNDIsIDEzNiwgMjUyLCAzMSwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjI4LCA1NywgMjMzLCAyMCwgMjI4LCAKLSAgICA1NywgMjQyLCAxMzYsIDIyOSwgMTA1LCAyMzMsIDIxLCAyMjgsIDY0LCAxMjgsIDExMiwgMjI5LCAxMDUsIDI0MiwgMTM3LCAKLSAgICAyMjgsIDY0LCAxMjgsIDExMiwgMjMzLCAyMSwgMTc3LCAyNDUsIDEwMiwgMTEyLCAyNDIsIDEzNywgMTc3LCAyNDUsIDEwMiwgCi0gICAgMTEyLCAyMjksIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMjQ1LCAxMDIsIDExMiwgMjI5LCAxMDUsIDI0MiwgMTM3LCAyMjgsIAotICAgIDY0LCAyNDUsIDEwMiwgMTEyLCAyMzMsIDIxLCAxNzcsIDI0MiwgMTM2LCAyNDIsIDEzNywgMTc3LCAyMzMsIDIwLCAyMjksIAotICAgIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMjQyLCAxMzYsIDIyOSwgMTA1LCAyNDIsIDEzNywgMjI4LCA2NCwgMjMzLCAyMCwgCi0gICAgMjI0LCAyMDUsIDIxOCwgNTYsIDIyNCwgMjA2LCAxNzcsIDEyOCwgMTEyLCAyMTgsIDU3LCAxNzcsIDEyOCwgMTEyLCAyMjQsIAotICAgIDIwNiwgMTc3LCAyNDUsIDEwMiwgMTEyLCAyMTgsIDU3LCAxNzcsIDI0NSwgMTAyLCAxMTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAKLSAgICAyMjQsIDIwOCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDIxOCwgNTgsIDIxOCwgNjUsIDIyNiwgMjM1LCAyMTgsIDIzLCAyMjYsIAotICAgIDIzNSwgMjI4LCA1NywgMTE2LCAyMTgsIDY1LCAyMjYsIDIzNSwgMjI4LCA1NywgMTE2LCAyMTgsIDIzLCAyMjYsIDIzNSwgCi0gICAgMjE4LCA2NSwgNjQsIDE3NywgMTI4LCAxMTIsIDIxOCwgMjMsIDY0LCAxNzcsIDEyOCwgMTEyLCAyMjksIDEwNSwgMTE2LCAKLSAgICAyMTgsIDY1LCA2NCwgMjI4LCA2NCwgMTI4LCAxMTIsIDIyOSwgMTA1LCAxMTYsIDIxOCwgMjMsIDY0LCAyMjgsIDY0LCAxMjgsIAotICAgIDExMiwgMjE4LCA2NSwgNjQsIDIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDIzLCA2NCwgMiwgMjI4LCA1NywgMTI4LCAKLSAgICAxMTIsIDIzMCwgODYsIDIzMCwgODcsIDIzMCwgODgsIDIzMCwgODcsIDIxNCwgMTc1LCA0MiwgMjM2LCAyMiwgMjI2LCAyMzUsIAotICAgIDQyLCAyMjYsIDE1NCwgMjI2LCAyMzUsIDQyLCAyMzYsIDIyLCA2NCwgMTc3LCAxMjgsIDExMiwgNDIsIDIyNiwgMTU0LCA2NCwgCi0gICAgMTc3LCAxMjgsIDExMiwgNDIsIDI1MSwgMywgNDIsIDI0OSwgMTEwLCAzNywgMjI1LCAyNSwgMzcsIDIzMCwgMTg2LCAzNywgCi0gICAgMjE2LCA4NiwgMzcsIDI0NywgMTc3LCAyMTksIDk3LCAzNywgNTksIDIyNiwgMTcxLCAzNywgMjIyLCAyMzcsIDIyNiwgMTcxLCAKLSAgICAzNywgMjUzLCAyMjUsIDIyNiwgMTcxLCAzNywgMjQ1LCAxMDUsIDM3LCAyNDgsIDE2NCwgOTIsIDIyNSwgMjUsIDkyLCAyMzAsIAotICAgIDE4NiwgOTIsIDIxNiwgODYsIDkyLCA1OSwgMjI2LCAxNzEsIDQ0LCAyMTcsIDg4LCA0MywgMjE3LCA4OCwgMTI0LCAyMTcsIAotICAgIDg4LCAxMjAsIDIxNywgODgsIDI1MywgMjI4LCAyMzAsIDE2MSwgMjE1LCAxOTIsIDI0NCwgMzMsIDIxNSwgMjEyLCA2NywgCi0gICAgMjUyLCAxNDksIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQ5LCA1MiwgNDQsIDIxNSwgOTMsIDI0NywgMTQ2LCAyMjgsIAotICAgIDU3LCAyMjQsIDE2NiwgMjI4LCA1NywgMjE1LCAxOTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDQsIDM0LCAyMjksIDEwNywgCi0gICAgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQ0LCAyMTUsIDkzLCAyMjQsIDIwNiwgMjE0LCAxODQsIDIyMywgOTQsIDIxOCwgNTcsIAotICAgIDIxNCwgMTg0LCAyMjMsIDk0LCAyMjgsIDYyLCAyMTgsIDc4LCAyMjYsIDIzNSwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMjgsIAotICAgIDYyLCAyMTgsIDc3LCAyMjgsIDYyLCAyMTgsIDc4LCA2NCwgMTc3LCAxMjgsIDExMiwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAKLSAgICAyMjgsIDYyLCAyMTgsIDc4LCAxNzcsIDEyOCwgMTEyLCAyMjYsIDE1NCwgMjI2LCAyMzUsIDIzNiwgMjIsIDIyNiwgMjM1LCAKLSAgICAyMzAsIDkyLCAyNDEsIDIwNywgMjQ5LCAyMDQsIDIzMSwgMTQyLCAyMzUsIDIxNSwgMjExLCAxNDUsIDIyOSwgMjA3LCAyMjgsIAotICAgIDYzLCA0NCwgMjU0LCAxMTgsIDIsIDI1NCwgMzMsIDQ0LCAyMTUsIDIyNiwgMjMwLCAyOSwgMjMyLCAxNTIsIDI1NCwgMTI2LCAKLSAgICAyMzAsIDI5LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIzMCwgMjksIDIzNSwgMjA1LCAyMzAsIDI5LCAyMTQsIDE3NSwgMjQ4LCAKLSAgICAxLCAyMjYsIDE3MSwgNTksIDIyNiwgMTcxLCAyMTgsIDE1OSwgMjI2LCAxNzEsIDI0NywgMTc3LCAyMTYsIDg2LCAyNTEsIAotICAgIDE3MiwgNDMsIDIyOCwgNjIsIDI0NCwgMTg5LCAyMjAsIDE1MSwgMjI0LCAxODMsIDQ0LCAyMjgsIDYyLCAyNDQsIDE4OSwgCi0gICAgMjIwLCAxNTEsIDIyNCwgMTgzLCA0MywgMjIwLCAxNTEsIDIyNCwgMTgzLCA0NCwgMjIwLCAxNTEsIDIyNCwgMTgzLCAyMjMsIAotICAgIDUyLCAyMTYsIDkwLCAyNDUsIDEwNSwgMjQ5LCAxMDcsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjQ5LCAxMDcsIDIzMiwgMTUyLCAKLSAgICAyNTQsIDEyNiwgNTIsIDIxOCwgNjQsIDUyLCAyMTgsIDIyLCA1MiwgMjM1LCAyMDUsIDUyLCAyMTQsIDE3NSwgMjI1LCA1MCwgCi0gICAgMTI4LCAyMiwgMjI2LCAxMiwgMTEyLCAyMzMsIDIxLCAyLCAyNDcsIDEyOCwgMjQyLCAxMzcsIDIsIDI0NywgMTI4LCAyMTMsIAotICAgIDE4NywgMjMwLCAxMDIsIDIzMywgMjAsIDIxMywgMTg3LCAyMzAsIDEwMiwgMjQyLCAxMzYsIDIzMywgMjEsIDEyOCwgMjE2LCAKLSAgICA0MywgMTc3LCAyNDIsIDEzNiwgMjQyLCAxMzcsIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAxMjgsIDIxNiwgNDMsIAotICAgIDE3NywgMjMzLCAyMCwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAxMjgsIDIxNiwgNDMsIDE3NywgMjI0LCAyMDUsIAotICAgIDEyOCwgMjE2LCA0MywgMTc3LCAyMTgsIDU2LCAyNDcsIDE0NiwgMjI4LCA1NywgMjI0LCAyMDksIDE3NywgMjQ1LCAxMDcsIAotICAgIDI0NywgMTQ2LCAyMjgsIDU3LCAyMTgsIDU5LCAxNzcsIDI0NSwgMTA3LCAyMjgsIDU3LCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgCi0gICAgMTI4LCAxMTIsIDIyOCwgNTcsIDQyLCAyMjYsIDE1NCwgNjQsIDE3NywgMTI4LCAxMTIsIDQyLCAyMzYsIDIyLCA2NCwgMTc3LCAKLSAgICAyMjgsIDU3LCAxMjgsIDExMiwgNDIsIDIyNiwgMTU0LCA2NCwgMTc3LCAyMjgsIDU3LCAxMjgsIDExMiwgMjMzLCAyMSwgCi0gICAgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjQyLCAxMzcsIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAKLSAgICAxMTIsIDIyNCwgMjA2LCAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgMTEyLCAyMTgsIDU3LCAyNTEsIDk2LCAyMjgsIAotICAgIDU3LCAyNDUsIDEwMiwgMTEyLCAyMjgsIDU3LCAyMjgsIDYyLCAyMTgsIDc4LCAyMjYsIDIzNSwgMjQ3LCAxNDYsIDIyOCwgCi0gICAgNTcsIDI0OSwgMTk2LCAyNTMsIDI0NiwgMjI4LCA2MiwgMjE4LCA3NywgMjI4LCA1NywgMjI4LCA2MiwgMjE4LCA3OCwgNjQsIAotICAgIDE3NywgMTI4LCAxMTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDksIDE5NiwgMjUzLCAyNDYsIDIyOCwgNjIsIDIxOCwgNzgsIAotICAgIDE3NywgMjQ1LCAxMDcsIDY3LCAyNDUsIDE3MSwgMjMwLCAyMjcsIDIwMywgMjQ1LCAxNzEsIDEyMCwgNDQsIDI0OCwgNywgCi0gICAgMjQ1LCAxNzEsIDEyNCwgNDQsIDI0OCwgNywgMjQ1LCAxNzEsIDI0NSwgMTc4LCA2NCwgMiwgMjAwLCAyMDMsIDkxLCAyNDUsIAotICAgIDE3OCwgNjQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgNCwgMjQ1LCAxNzgsIAotICAgIDY0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDI0NSwgMTc4LCA2NCwgMiwgCi0gICAgNTksIDQ4LCAyNDUsIDE3OCwgNjQsIDIsIDIyNiwgMTI3LCA0LCAyNDUsIDE3OCwgNjQsIDIsIDIyNiwgMTI3LCAyNDUsIAotICAgIDE3OCwgNjQsIDIsIDIxNCwgMTgzLCAyNDUsIDE3OCwgNjQsIDIsIDExMywgMjAzLCAyMTgsIDkyLCAyNDksIDE5NCwgMiwgCi0gICAgMjAwLCAyMDMsIDkxLCAyNDksIDE5NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAKLSAgICA0LCAyNDksIDE5NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAyNDksIDE5NCwgCi0gICAgMiwgMjI2LCAxMjcsIDQsIDI0OSwgMTk0LCAyLCAyMjYsIDEyNywgMjEwLCAxNjAsIDE4OSwgMjUyLCAxODEsIDIzMSwgNjYsIAotICAgIDI0OCwgMiwgNTAsIDI0NSwgMTgwLCA3NSwgMjQwLCAyNDEsIDEyMCwgMjU0LCAxLCAxMjQsIDI1NCwgMSwgMjI0LCAxNzgsIAotICAgIDIyNSwgMTY4LCAyMTIsIDMyLCAyMzIsIDIxOSwgNDMsIDI1MCwgMTg5LCA0NCwgMjUwLCAxODksIDQzLCAyNDQsIDY1LCA0NCwgCi0gICAgMjQ0LCA2NSwgMjUxLCAxODMsIDQ0LCAyNDksIDE0MCwgMjUxLCAxODMsIDQzLCAyNDksIDE0MCwgMjE2LCAxNSwgNDQsIAotICAgIDI0OSwgMTQwLCAyMTYsIDE1LCA0MywgMjQ5LCAxNDAsIDIyMywgNTIsIDIyOCwgNTcsIDUwLCA0MiwgMjMyLCAxMTAsIDI1NCwgCi0gICAgMzMsIDIyMSwgMTY2LCAyMjEsIDE3MywgMjE3LCAyLCAyMjMsIDEyMywgMjI0LCAyNDQsIDIzNSwgMjQ1LCAyMTMsIDE2NSwgCi0gICAgMjE4LCAyMzYsIDIyNSwgNDQsIDY0LCAyMzUsIDIxNCwgNTAsIDIxNSwgOTQsIDIyOCwgNTcsIDUwLCAyMTIsIDQyLCAyNDAsIAotICAgIDI0MywgMjE2LCAxNSwgNDMsIDI0OSwgMTY4LCAyMTYsIDE1LCA0NCwgMjQ5LCAxNjgsIDI1MSwgMTgzLCA0MywgMjQ5LCAKLSAgICAxNjgsIDI1MSwgMTgzLCA0NCwgMjQ5LCAxNjgsIDIxNiwgMTUsIDE2MywgMjM1LCAyMTgsIDI1MSwgMTgzLCAxNjMsIDIzNSwgCi0gICAgMjE4LCAyNDMsIDI0OCwgMjE5LCA3NywgMTIwLCAyNTQsIDIsIDI1MiwgMzIsIDExMywgMjAzLCAyNTIsIDEzNywgMjI2LCAKLSAgICAxNjQsIDIzNCwgMTQ0LCAyNDUsIDk4LCAyMTYsIDQzLCAyMTYsIDE5NywgMjIyLCAyNTQsIDIxMSwgMTc5LCAyMzYsIDcsIAotICAgIDExNiwgMjIzLCAxMjAsIDI1MSwgMTcxLCAyMzQsIDE0MywgMjMzLCA0OCwgMjU0LCAxMTgsIDEyNywgMjIyLCAyNTAsIDI1NCwgCi0gICAgMTE4LCAxMjcsIDI0NSwgOTgsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMzMsIDUyLCAyNTIsIDQzLCAyMjIsIDIzNiwgMjQ5LCAKLSAgICA3OCwgMjU0LCAxNjQsIDI1NCwgOSwgMjE3LCAxODIsIDIxNiwgNSwgMjIyLCAxMjUsIDI0NywgMjIzLCAyMjYsIDE1NSwgCi0gICAgMjQ5LCAyMDYsIDIxNywgNTMsIDIxOSwgODgsIDI0OSwgMTU5LCAyNDksIDE1OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKLSAgICAyNDAsIDE1OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDIzMCwgMjI0LCAzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIAotICAgIDE2LCAyMjQsIDMxLCAyNDUsIDEwNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDcsIDE4MiwgMjU0LCA3NCwgCi0gICAgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDgsIDAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjM1LCA2MiwgCi0gICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNTAsIDQzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIAotICAgIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDIzNSwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCi0gICAgMjE5LCA5OCwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MiwgMTg5LCAxMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAKLSAgICAxNiwgMjI0LCAzMSwgMjE5LCA5NywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNTIsIDE4OCwgMjU0LCA3NCwgCi0gICAgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMzMsIDIwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI0MiwgMTM2LCAKLSAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDE0MCwgMjE0LCAxOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCA5NywgMjE0LCAxOSwgCi0gICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxNDAsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAotICAgIDk3LCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyNTIsIDE4OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKLSAgICAxMjQsIDIxNywgODksIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNjMsIDIxOCwgMTM3LCAyNTQsIAotICAgIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDEyNCwgMjUwLCAyNDYsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCi0gICAgMjQ4LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDIxNywgODksIDIzNSwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAKLSAgICAxNiwgMjE0LCAxNTMsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjE0LCAxNTMsIDc1LCAyNTQsIAotICAgIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjE3LCA4OSwgMjI2LCAxMjcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgCi0gICAgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTIwLCAyNTAsIDI0NiwgMjU0LCA3NCwgMjQzLCAKLSAgICAyMzIsIDE2LCAyMjQsIDMxLCAyNDgsIDczLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjE3LCA4OSwgMjM1LCA2MiwgCi0gICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDYsIDExMiwgMjE0LCAxOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKLSAgICAyNDYsIDExMiwgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAwLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIAotICAgIDE2LCAyNDgsIDYzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDEsIDIxNCwgMTgzLCAyNTQsIDc0LCAKLSAgICAyNDMsIDIzMiwgMTYsIDIzNSwgNjMsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDIxNCwgCi0gICAgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjIwLCA3LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAotICAgIDIyNCwgMCwgMjI0LCAzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMTgsIDE1OCwgMjU0LCA3NCwgMjQzLCAKLSAgICAyMzIsIDE2LCAyMjQsIDMxLCAyNDksIDIzNCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDI0OCwgOSwgCi0gICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAxNTksIAotICAgIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMzUsIDYzLCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCi0gICAgMjUwLCA0NCwgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjIwLCA3LCAyMTgsIDEzNywgMjU0LCA3NCwgCi0gICAgMjQzLCAyMzIsIDE2LCA0MywgMjIwLCA3LCAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTYsIDkwLCAyNDgsIAotICAgIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQyLCAxMzcsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDksIAotICAgIDIyOCwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKLSAgICAyMTAsIDM0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMTM4LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCi0gICAgMjIwLCAxNTMsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIyOCwgNTcsIDI0NSwgMTA3LCAKLSAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIyNCwgMTUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyNTAsIAotICAgIDI0NywgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjUwLCAyNDcsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIAotICAgIDE2LCAyMzUsIDE5MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjMsIDQwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNiwgCi0gICAgMjA1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1NCwgMTUyLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKLSAgICAyNDUsIDEwOSwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjM1LCAxOTMsIDIxNCwgMTgzLCAyNTQsIDc0LCAKLSAgICAyNDMsIDIzMiwgMTYsIDIyNiwgMjA2LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTQsIDE1MSwgMjI4LCAKLSAgICA1NywgMjUwLCAxMzgsIDc5LCA0NCwgMjU0LCAxMTgsIDIsIDI0NiwgMTEyLCAyMTAsIDM1LCA3NSwgMjE5LCAyMzcsIDIwNCwgCi0gICAgMjUxLCAxNzEsIDI1MiwgNTMsIDg3LCA2NywgMjMyLCAyMjAsIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjM1LCAyMjMsIDg3LCAKLSAgICAyNDksIDE5MSwgMjE0LCAxODEsIDg3LCAyNDcsIDE5NywgMjE0LCAxODEsIDg3LCAyNDUsIDE2MiwgODcsIDI0OSwgMjE4LCAKLSAgICA4NywgNzEsIDQyLCAyLCAyNTAsIDE4MywgNjcsIDIzMiwgMjE5LCAyNDUsIDEzOCwgODcsIDI1NCwgMTQ3LCAyMzQsIDE0NSwgCi0gICAgODcsIDI0MSwgMjIwLCA4NywgMzcsIDIwMywgMjUyLCAxNDksIDIsIDIyOCwgNTUsIDM3LCAyMTUsIDIyNywgMjQ2LCAxMTQsIAotICAgIDI1MSwgMTQzLCAyNTAsIDQ0LCAyLCAyMjgsIDU5LCA3NSwgMjE0LCAxNzksIDg3LCAyMzAsIDE0MiwgODcsIDI0MCwgMTcxLCAKLSAgICA4NywgMjI2LCAxNzgsIDI0MiwgNjYsIDg3LCAyMjYsIDE3OCwgMjMzLCAxNTMsIDg3LCAyMjUsIDI0OCwgODcsIDIyNSwgCi0gICAgMjQ3LCA4NywgMjQ3LCAyMDUsIDI0OSwgMTA1LCAxNiwgMjQ0LCAyOCwgMTA1LCAyMTksIDUyLCA4NywgMjU0LCA3NCwgMjQzLCAKLSAgICAyMzIsIDE2LCAyMjQsIDMwLCAyNDgsIDkxLCAyMjAsIDE0MCwgMjM0LCAxNDUsIDg3LCAyMjQsIDE5NSwgMjI2LCA3OSwgCi0gICAgMjI5LCA4NywgMjI2LCA3OSwgMjI0LCAxOTEsIDIyMSwgMTkxLCA4NywgMjUwLCAyNSwgMjIxLCAxOTEsIDg3LCA0MywgMjI2LCAKLSAgICA4LCAyMTQsIDE2MCwgMTAzLCA0MywgMjI2LCA4LCAyNDUsIDI5LCA0MywgMjI2LCA4LCAyMzIsIDExNCwgMTAzLCA0NCwgCi0gICAgMjI2LCA4LCAyMTQsIDE2MCwgMTAzLCA0NCwgMjI2LCA4LCAyNDUsIDI5LCA0NCwgMjI2LCA4LCAyMzIsIDExNCwgMTAzLCAKLSAgICA0MywgNDIsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMjQ5LCAxNjgsIDQzLCA0MiwgMjUxLCAxNjYsIDI0NSwgMjksIDQzLCA0MiwgCi0gICAgMjUxLCAxNjYsIDIzMiwgMTE0LCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMjE0LCAxNjAsIDI0OSwgMTY4LCA0NCwgCi0gICAgNDIsIDI1MSwgMTY2LCAyNDUsIDI5LCA0NCwgNDIsIDI1MSwgMTY2LCAyMzIsIDExNCwgMjQ5LCAxNjgsIDQzLCAyNDksIAotICAgIDEwNywgMjUxLCAxNjYsIDIxNCwgMTYwLCAxMDMsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMCwgMjI5LCAyMjUsIDEwNCwgCi0gICAgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMyLCAxMTQsIDEwMywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyNDUsIDI5LCA0NCwgCi0gICAgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMTAzLCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzAsIDIyOSwgMjI1LCAKLSAgICAxMDQsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMiwgMTE0LCAxMDMsIDIzNSwgMjE5LCAyNDUsIDI5LCAyMDMsIDIzMiwgCi0gICAgMjIwLCAyNDUsIDI5LCAyMTQsIDE2MCwgNDMsIDE3NywgMjMyLCAxMTQsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIyMSwgCi0gICAgMTc0LCAyMTQsIDE2MCwgNDQsIDE3NywgMjMyLCAxMTQsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIyMSwgMTc0LCAyMTgsIAotICAgIDQyLCAyMTYsIDE0LCAyMTgsIDQyLCAyNTEsIDE4MiwgMjE2LCAxNSwgNDIsIDEyNywgMjUxLCAxODMsIDQyLCAxMjcsIDI1MSwgCi0gICAgMTgzLCA0MiwgMjUxLCAxNjYsIDExNSwgMjE2LCAxNSwgNDIsIDEyNywgMzQsIDE2LCAyNTEsIDE4MiwgNDMsIDY3LCA5MywgCi0gICAgMjMyLCAyMTksIDQ0LCA2NywgOTMsIDIzMiwgMjE5LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxOCwgMjAzLCAyMjEsIDIwNywgCi0gICAgMjMyLCAyMTcsIDIwMywgMjIxLCAyMDcsIDIzMiwgMjE2LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxNSwgMjQ4LCA1NCwgMTYsIAotICAgIDE5MywgNjcsIDIyLCAyMTYsIDE1LCAyMjIsIDI1NCwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyNTEsIDE4MywgMjIyLCAKLSAgICAyNTQsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyLCAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIAotICAgIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIDEyMCwgMjIsIDIwMywgMiwgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgCi0gICAgNjcsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAKLSAgICAxNiwgMTkzLCAxMjAsIDIyLCAyMDMsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMjIsIDIxMiwgMzUsIAotICAgIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA1NCwgMTYsIDE5MywgMTIwLCAyMiwgCi0gICAgMjAzLCAyLCAyMTIsIDM1LCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyNDEsIDUxLCAyNDgsIDU0LCAxNiwgMTkzLCAKLSAgICAxMjAsIDIyLCAyNDEsIDUxLCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMjIsIDIxNiwgMTUsIDIzMywgNTIsIDI0OCwgNTQsIAotICAgIDE2LCAxOTMsIDY3LCAyMiwgMjUxLCAxODMsIDIzMywgNTIsIDQyLCAyNDQsIDQwLCAyMjMsIDU3LCA4NywgMjQ1LCAxOTAsIAotICAgIDg3LCA2NywgMjMyLCAyMjAsIDI0NSwgMjksIDIzMSwgMzgsIDI1MSwgMTU0LCAyMzEsIDM4LCAyMDAsIDExNSwgMjE5LCAKLSAgICAyNTIsIDIzMSwgMzgsIDIxOSwgMjUzLCAxMTUsIDIzMiwgMTQzLCAyMzEsIDM4LCAyMDAsIDExNSwgMTEzLCAyMTksIDIzOSwgCi0gICAgMjMxLCAzOCwgMTEzLCAyMTksIDI0MCwgMTE1LCAyMzIsIDE0MywgMjMxLCAzOCwgMTEzLCAyMTksIDI0MCwgMjM1LCA3MCwgCi0gICAgMjMxLCAzOCwgMjE1LCAyMDksIDIzMSwgMzgsIDIxNiwgMjI0LCAyMzEsIDM4LCAyMjUsIDE5MSwgMjQ1LCAyMzIsIDI0MiwgCi0gICAgMTI5LCAyNDMsIDIyNiwgMjE2LCAxNSwgMjI2LCA3LCAyNTEsIDE4MywgMjI2LCA3LCAyMTYsIDE1LCAyNDksIDEwNywgMTI3LCAKLSAgICAyNTEsIDE4MywgMjQ5LCAxMDcsIDEyNywgMjE2LCAxNSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDI1MSwgMTgzLCAyMTYsIDcsIAotICAgIDIyMCwgNTUsIDEyNywgNzEsIDIxNSwgMjQwLCAyNTIsIDQzLCAyMjIsIDIzNywgMiwgMjUwLCA0MywgMjE4LCAxMjIsIDI0NCwgCi0gICAgNzIsIDI1NSwgMjYsIDI0OSwgMTA0LCAyNDUsIDE3OSwgMjM1LCAyMDUsIDI0OCwgOTEsIDI0NSwgMzIsIDg3LCA4NSwgMjIyLCAKLSAgICAyNTAsIDUyLCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDUyLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYyLCA1MiwgMjE1LCAyMjYsIAotICAgIDg1LCAyNDYsIDExMywgNTIsIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDUyLCAyMTUsIDIyNywgMiwgNjcsIDEzMCwgODUsIAotICAgIDIzMywgNDgsIDUyLCAyMTUsIDIyNywgMiwgNjcsIDEzMCwgODUsIDIyMiwgMjUwLCAyMTUsIDIyNywgMiwgNTIsIDY3LCAKLSAgICAxMzAsIDI1NCwgMTgyLCAyNTAsIDExLCAyMTgsIDEyOCwgMjE2LCA4NywgMjUwLCAxMSwgMjQwLCAyNDQsIDIsIDI0NCwgNTgsIAotICAgIDIyMSwgMjQzLCAxNiwgMzEsIDIyNywgMjA2LCAxNiwgMzEsIDIxOCwgMTU0LCA2NCwgMjQxLCAyNDAsIDE2LCAzMSwgMjE4LCAKLSAgICAxNTQsIDY0LCAyMTYsIDIxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIxNiwgMjEzLCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgCi0gICAgMjE1LCAyNDQsIDE2LCAzMSwgMjQ1LCAxNDAsIDE2LCAzMSwgMjU1LCAxNiwgMTYsIDMxLCAyNTIsIDUyLCAxNiwgMzEsIAotICAgIDI1MiwgMTg3LCAxNiwgMzEsIDIwMywgMjE3LCA5MCwgMTYsIDMxLCAyMzIsIDIyMCwgMjQ0LCAxNTMsIDE2LCAzMSwgNjcsIAotICAgIDIxNywgOTAsIDE2LCAzMSwgMjQ0LCAyOCwgMjQ0LCAxNTMsIDE2LCAzMSwgMjUwLCAyMzgsIDIyMywgNTYsIDE2LCAzMSwgCi0gICAgMjIwLCAzMCwgMjI2LCAxMzQsIDE2LCAzMSwgMjIwLCAzMCwgMjM2LCA2LCAxNiwgMzEsIDI0OCwgMTU5LCAyMzIsIDIxMCwgCi0gICAgMjQ1LCA4NSwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTExLCAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxMDUsIAotICAgIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE1OCwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTYxLCAxNiwgMzEsIAotICAgIDE1MiwgMjU1LCAxNiwgMTYsIDMxLCAyMTcsIDE3OCwgMjM2LCA2OSwgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIxNSwgMjQ1LCAKLSAgICAyNTEsIDIyMSwgMTYsIDMxLCAyNTEsIDEzLCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgMjMxLCA4NiwgMTYsIDMxLCAyMTgsIAotICAgIDYyLCAxNiwgMzEsIDI0NSwgODUsIDE2LCAzMSwgMjQ0LCAxMTUsIDIyMCwgMTM5LCAxNiwgMzEsIDI0MiwgMTI4LCAyMjAsIAotICAgIDEzOSwgMTYsIDMxLCAyMjMsIDEyNCwgMjIwLCAxMzksIDE2LCAzMSwgMjE0LCAxNzQsIDIyMCwgMTM5LCAxNiwgMzEsIDIxOSwgCi0gICAgMjAsIDE2LCAzMSwgMjQ4LCA3MSwgMjUxLCAyMjQsIDg3LCAyMDQsIDI1MSwgMTcxLCAxNiwgMzEsIDIyOSwgOTAsIDE2LCAKLSAgICAzMSwgMjQ4LCA3MiwgMjQ0LCAyOCwgMTA1LCAxNiwgMzEsIDIxOCwgNjMsIDI0NCwgMjgsIDEwNSwgMjI2LCAyNDUsIDEwMywgCi0gICAgMjI2LCAyNDUsIDI1MCwgMTYwLCAyMjYsIDI0NSwgMjQ0LCAzMSwgMjI2LCAyNDUsIDIzNSwgMjAwLCAyNDQsIDMxLCAyMjYsIAotICAgIDI0NSwgMjUyLCA1MCwgMjUxLCAxMzIsIDIyNiwgMjQ1LCAyNTEsIDE3OCwgMjE2LCAxMTIsIDIyNiwgMjQ1LCAyNTEsIDE2MywgCi0gICAgMjUyLCAxNTQsIDI0MCwgMTEwLCAyMjYsIDI0NSwgMjU0LCAxMzUsIDY0LCAyNTAsIDEzNywgMjI2LCAyNDUsIDI0OCwgMTY0LCAKLSAgICAyMjYsIDI0NSwgMjQ5LCA5NSwgMjU1LCAyMCwgMjI3LCAyMDQsIDIyNiwgMjQ1LCA1MiwgMjUyLCAxODgsIDM3LCAyMSwgCi0gICAgMTExLCAzNywgMjEsIDEwNSwgMzcsIDIxLCAxNTgsIDM3LCAyMSwgMTYxLCAzNywgMjEsIDE5MCwgMzcsIDIxLCAxOTUsIDM3LCAKLSAgICAyMSwgMTk5LCAzNywgMjEsIDE5NiwgMzcsIDIxLCAyMDEsIDM3LCA1NCwgMjE2LCAyNDgsIDM3LCA1NCwgMjQ1LCAxNzUsIAotICAgIDM3LCA1NCwgMjE1LCA3NiwgMzcsIDU0LCAyMTYsIDE2NSwgMzcsIDU0LCAyNDQsIDEzLCAzNywgNTQsIDI0NCwgMTI2LCAzNywgCi0gICAgNTQsIDIxOSwgMTIxLCAzNywgNTQsIDIyMCwgMTIxLCAzNywgNTQsIDI0NSwgMTk4LCAzNywgNTQsIDIyOCwgMjAyLCAzNywgCi0gICAgNTQsIDIxNSwgNzMsIDg4LCAyMSwgMTExLCA4OCwgMjEsIDEwNSwgODgsIDIxLCAxNTgsIDg4LCAyMSwgMTYxLCA4OCwgMjEsIAotICAgIDE5MCwgODgsIDIxLCAxOTUsIDg4LCAyMSwgMTk5LCA4OCwgMjEsIDE5NiwgODgsIDIxLCAyMDEsIDg4LCA1NCwgMjE2LCAKLSAgICAyNDgsIDg4LCA1NCwgMjQ1LCAxNzUsIDg4LCA1NCwgMjE1LCA3NiwgODgsIDU0LCAyMTYsIDE2NSwgODgsIDU0LCAyNDQsIAotICAgIDEzLCA4OCwgNTQsIDI0NCwgMTI2LCA4OCwgNTQsIDIxOSwgMTIxLCA4OCwgNTQsIDIyMCwgMTIxLCA4OCwgNTQsIDI0NSwgCi0gICAgMTk4LCA4OCwgNTQsIDIyOCwgMjAyLCA4OCwgNTQsIDIxNSwgNzMsIDIxLCAxMjMsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIAotICAgIDExMywgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMTM0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDQsIDE5LCAyNDMsIAotICAgIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDQsIDg5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyMTksIDEyNywgMjQzLCAyMzYsIAotICAgIDIxOCwgMTMxLCAyMSwgMjIwLCAxMjQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDI0NSwgMjAxLCAyNDMsIDIzNiwgMjE4LCAKLSAgICAxMzEsIDIxLCAyMjgsIDIwNSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE2LCAyNDksIDI0MywgMjM2LCAyMTgsIDEzMSwgCi0gICAgNTQsIDI0NSwgMTc2LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTUsIDc3LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAKLSAgICAyMTYsIDE2NiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ0LCAxNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ0LCAKLSAgICAxMjcsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxOSwgMTIyLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMjAsIDEyMiwgCi0gICAgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ1LCAxOTksIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIyOCwgMjAzLCAyNDMsIAotICAgIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTUsIDc0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDg4LCA3LCA0LCAxLCA2MSwgODgsIDcsIAotICAgIDQsIDEsIDI1MywgMTY2LCA4OCwgNywgNCwgMSwgMjUxLCA3NCwgODgsIDcsIDQsIDEsIDI0OSwgNjgsIDg4LCA3LCA0LCAxLCAKLSAgICA3NiwgODgsIDcsIDQsIDEsIDI0NSwgMTQsIDg4LCA3LCA0LCAxLCAyNDMsIDIwOSwgODgsIDcsIDQsIDEsIDI0MiwgNjcsIAotICAgIDg4LCA3LCA0LCAxLCA3NCwgODgsIDcsIDQsIDEsIDIzNSwgMTUwLCA4OCwgNywgNCwgMSwgMjM1LCAyOSwgODgsIDcsIDQsIAotICAgIDEsIDE1NiwgODgsIDcsIDQsIDEsIDE5NCwgODgsIDcsIDQsIDEsIDIzMCwgMzAsIDg4LCA3LCA0LCAxLCA3OCwgODgsIDcsIAotICAgIDQsIDEsIDIyNiwgMTA5LCA4OCwgNywgNCwgMSwgMjI0LCA5OSwgODgsIDcsIDQsIDEsIDE1MywgODgsIDcsIDQsIDEsIDIyMiwgCi0gICAgOTMsIDg4LCA3LCA0LCAxLCAyMTcsIDE1MywgODgsIDcsIDQsIDEsIDY5LCA4OCwgNywgNCwgMSwgMjE0LCAxMDUsIDg4LCA3LCAKLSAgICA0LCAxLCAyMTIsIDk4LCA4OCwgNywgNCwgMSwgMjExLCAxNzgsIDg4LCA3LCA0LCAxLCAyMTEsIDExNywgODgsIDcsIDQsIDEsIAotICAgIDIxMCwgMTU5LCAzNywgNywgNiwgMSwgNjEsIDM3LCA3LCA2LCAxLCAyNTMsIDE2NiwgMzcsIDcsIDYsIDEsIDI1MSwgNzQsIAotICAgIDM3LCA3LCA2LCAxLCAyNDksIDY4LCAzNywgNywgNiwgMSwgNzYsIDM3LCA3LCA2LCAxLCAyNDUsIDE0LCAzNywgNywgNiwgMSwgCi0gICAgMjQzLCAyMDksIDM3LCA3LCA2LCAxLCAyNDIsIDY3LCAzNywgNywgNiwgMSwgNzQsIDM3LCA3LCA2LCAxLCAyMzUsIDE1MCwgCi0gICAgMzcsIDcsIDYsIDEsIDIzNSwgMjksIDM3LCA3LCA2LCAxLCAxNTYsIDM3LCA3LCA2LCAxLCAxOTQsIDM3LCA3LCA2LCAxLCAKLSAgICAyMzAsIDMwLCAzNywgNywgNiwgMSwgNzgsIDM3LCA3LCA2LCAxLCAyMjYsIDEwOSwgMzcsIDcsIDYsIDEsIDIyNCwgOTksIAotICAgIDM3LCA3LCA2LCAxLCAxNTMsIDM3LCA3LCA2LCAxLCAyMjIsIDkzLCAzNywgNywgNiwgMSwgMjE3LCAxNTMsIDM3LCA3LCA2LCAKLSAgICAxLCA2OSwgMzcsIDcsIDYsIDEsIDIxNCwgMTA1LCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMzcsIDcsIDYsIDEsIDIxMSwgCi0gICAgMTc4LCAzNywgNywgNiwgMSwgMjExLCAxMTcsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMzcsIDcsIDQsIDEsIDYxLCAzNywgCi0gICAgNywgNCwgMSwgMjUzLCAxNjYsIDM3LCA3LCA0LCAxLCAyNTEsIDc0LCAzNywgNywgNCwgMSwgMjQ5LCA2OCwgMzcsIDcsIDQsIAotICAgIDEsIDc2LCAzNywgNywgNCwgMSwgMjQ1LCAxNCwgMzcsIDcsIDQsIDEsIDI0MywgMjA5LCAzNywgNywgNCwgMSwgMjQyLCA2NywgCi0gICAgMzcsIDcsIDQsIDEsIDc0LCAzNywgNywgNCwgMSwgMjM1LCAxNTAsIDM3LCA3LCA0LCAxLCAyMzUsIDI5LCAzNywgNywgNCwgCi0gICAgMSwgMTU2LCAzNywgNywgNCwgMSwgMTk0LCAzNywgNywgNCwgMSwgMjMwLCAzMCwgMzcsIDcsIDQsIDEsIDc4LCAzNywgNywgCi0gICAgNCwgMSwgMjI2LCAxMDksIDM3LCA3LCA0LCAxLCAyMjQsIDk5LCAzNywgNywgNCwgMSwgMTUzLCAzNywgNywgNCwgMSwgMjIyLCAKLSAgICA5MywgMzcsIDcsIDQsIDEsIDIxNywgMTUzLCAzNywgNywgNCwgMSwgNjksIDM3LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzcsIDcsIAotICAgIDQsIDEsIDIxMiwgOTgsIDM3LCA3LCA0LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTE3LCAzNywgNywgNCwgMSwgCi0gICAgMjEwLCAxNTksIDM3LCAyMSwgMjEwLCA4NiwgMTUyLCAzNywgNTQsIDI0NSwgMTc1LCAxNTIsIDM3LCA1NCwgMjE1LCA3NiwgCi0gICAgMTUyLCAzNywgNTQsIDIxNiwgMTY1LCAxNTIsIDM3LCA1NCwgMjQ0LCAxMywgMTUyLCAzNywgNTQsIDI0NCwgMTI2LCAxNTIsIAotICAgIDM3LCA1NCwgMjE5LCAxMjEsIDE1MiwgMzcsIDU0LCAyMjAsIDEyMSwgMTUyLCAzNywgNTQsIDI0NSwgMTk4LCAxNTIsIDM3LCAKLSAgICA1NCwgMjI4LCAyMDIsIDE1MiwgMzcsIDU0LCAyMTUsIDczLCA1MiwgMzcsIDIxLCAxMTEsIDUyLCAzNywgMjEsIDEwNSwgNTIsIAotICAgIDM3LCAyMSwgMTU4LCA1MiwgMzcsIDIxLCAxNjEsIDUyLCAzNywgMjEsIDE5MCwgNTIsIDM3LCAyMSwgMTk1LCA1MiwgMzcsIAotICAgIDIxLCAxOTksIDUyLCAzNywgMjEsIDE5NiwgNTIsIDM3LCAyMSwgMjAxLCA1MiwgMzcsIDU0LCAyMTYsIDI0OCwgMTUyLCAzNywgCi0gICAgMjEsIDIxMCwgODYsIDkzLCA5OSwgMTkzLCAyNDEsIDUxLCA5MywgOTksIDExNCwgMjQxLCA1MSwgOTMsIDk5LCAxOTMsIAotICAgIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDI0MSwgCi0gICAgNTEsIDkzLCA5OSwgMTE0LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAyMTUsIDIxMiwgMjQ4LCAKLSAgICAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjE1LCAyMTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTMsIAotICAgIDIyNCwgMjcsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDExNCwgMjI0LCAyNywgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCAKLSAgICA5OSwgMTkzLCAyMjQsIDI3LCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMjQsIDI3LCAyNDgsIDE2NSwgCi0gICAgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAxMjQsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQ0LCAyNDEsIAotICAgIDIyOCwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDQ0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIyMiwgMjU0LCAKLSAgICA5MywgOTksIDE5MywgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIAotICAgIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgCi0gICAgMTkzLCAxMjAsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDQ0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIAotICAgIDExNCwgMjIsIDQ0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMTIwLCAKLSAgICAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIAotICAgIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCA2NywgMjIsIDIyMiwgCi0gICAgMjU0LCA5MywgOTksIDY3LCAxOTMsIDIyLCA0NCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAKLSAgICAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIDIyLCAKLSAgICA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0NCwgMTIwLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDE5MywgCi0gICAgMjIsIDQ0LCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDY3LCAKLSAgICAyMiwgMjMzLCA1MiwgOTMsIDk5LCA2NywgMTkzLCAyMiwgNDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIAotICAgIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAKLSAgICAyMiwgNDMsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKLSAgICAxOTMsIDIyLCA0MywgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIAotICAgIDEyNCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAKLSAgICAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgCi0gICAgMTI0LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgMTI0LCAyNDEsIDIyOCwgOTMsIAotICAgIDk5LCA0MywgMTkzLCAyMiwgNDQsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyNDEsIDUxLCA5MywgCi0gICAgOTksIDE5MywgMTIwLCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzYsIDkzLCAKLSAgICA5OSwgNDQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDEyMCwgMTkzLCAyMiwgMjAzLCAyNDEsIDIyOCwgCi0gICAgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDE5MywgMjIsIDQzLCAxMjAsIDI0MSwgCi0gICAgMjI4LCA5MywgOTksIDQzLCAxOTMsIDIyLCA0NCwgMTIwLCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDI0MSwgCi0gICAgNTEsIDkzLCA5OSwgMTkzLCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCA2NywgMjMyLCAyMzYsIAotICAgIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCA2NywgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDIwMywgMjQxLCAKLSAgICAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAxMjQsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAxMjAsIAotICAgIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNDMsIDEyMCwgMTE0LCAKLSAgICAyMiwgNDQsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDEyMCwgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzYsIDkzLCAKLSAgICA5OSwgNDMsIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDEyNCwgMTE0LCAyMiwgNDMsIAotICAgIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCAxMjAsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKLSAgICAxOTMsIDIyLCAxMjQsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgNDQsIDE5MywgMjIsIDQzLCA2NywgMjQxLCAyMjgsIDkzLCAKLSAgICA5OSwgNDMsIDE5MywgMjIsIDQ0LCA2NywgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgCi0gICAgMTkzLCA1MiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgCi0gICAgMTkzLCA1MiwgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAKLSAgICA1MiwgMjQxLCA1MSwgOTMsIDk5LCA1MiwgMjEzLCAyMzksIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAotICAgIDEyMSwgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDQsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMjIsIDI1NCwgCi0gICAgOTMsIDk5LCAxMjQsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDEyNCwgNTIsIDIyLCA0MywgMjE5LCAKLSAgICAxNTYsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTIwLCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAotICAgIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDQsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMjIsIDI1NCwgCi0gICAgOTMsIDk5LCAxMjAsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCA0MywgMjE5LCAKLSAgICAxNTYsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgNDQsIDI0NiwgCi0gICAgMTIxLCA5MywgOTksIDY3LCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyMjIsIDI1NCwgOTMsIAotICAgIDk5LCA2NywgMjE5LCAxNTcsIDIyLCA0MywgMjQ2LCAxMjEsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDMsIDIxOSwgMTU2LCA5MywgCi0gICAgOTksIDUyLCA2NywgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCAKLSAgICA5OSwgMTI0LCA1MiwgMjIsIDIwMywgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgCi0gICAgMTIwLCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDIwMywgMjE5LCAxNTYsIDkzLCAKLSAgICA5OSwgNTIsIDEyMCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgMjAzLCAyNDYsIDEyMSwgOTMsIAotICAgIDk5LCA2NywgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgOTksIDUyLCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAKLSAgICAyNTQsIDM0LCAxMjQsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDI1NCwgMzQsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCAKLSAgICA5OSwgMTkzLCAyNTQsIDM0LCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgMjU0LCAzNCwgMTIwLCAyMiwgMjIyLCAKLSAgICAyNTQsIDkzLCA5OSwgMTkzLCAyNDgsIDcsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MywgMjMyLCAxMTQsIDIzMywgNTIsIDkzLCAKLSAgICA5OSwgMTkzLCAyNDgsIDcsIDIxNCwgMTYwLCA0MywgMjE2LCA0MywgMjMyLCAxMTQsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgCi0gICAgMjQ4LCA3LCAyNDksIDEzOCwgOTMsIDk5LCAxOTMsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAyMTQsIDE2MywgOTMsIDk5LCAKLSAgICAxOTMsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMjQ2LCAxMTQsIDkzLCA5OSwgMTE0LCAyMzMsIDUyLCA5MywgOTksIDExNCwgCi0gICAgMjE0LCAxNjMsIDkzLCA5OSwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxMTQsIDI0NiwgMTE0LCA5MywgOTksIDE5MywgNDMsIAotICAgIDIyLCAxMTQsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMTIwLCAyMiwgMTE0LCAyNDYsIDExNCwgOTMsIDk5LCAxMTQsIDQzLCAKLSAgICAyMiwgMTkzLCAyMjIsIDI1NCwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDE5MywgMjQ2LCAxMTQsIDIxNCwgMTYwLCAxNjMsIAotICAgIDI1MSwgMjIxLCAyMzIsIDExNCwgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIDIzMiwgMTE0LCAxMjMsIDIyNCwgMjUsIDI1MSwgCi0gICAgMjIxLCAyMzIsIDExNCwgMTM0LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDIzMiwgMTE0LCAxNjMsIDI1MSwgMjIxLCAyMzIsIAotICAgIDExNCwgMjQ0LCA4OSwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTM0LCAyMjQsIDIzLCAyNTEsIDIyMSwgMjMyLCAKLSAgICAxMTQsIDIyMCwgMTI0LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDI0MywgMjM2LCAyNTEsIDIyMSwgNDMsIDIyMCwgMTI0LCAyNDUsIAotICAgIDE5NSwgMjUxLCAyMjEsIDQzLCAxMzQsIDIyNCwgMjMsIDI1MSwgMjIxLCA0MywgMjQ0LCA4OSwgMjQ1LCAxOTUsIDI1MSwgCi0gICAgMjIxLCA0MywgMTYzLCAyNTEsIDIyMSwgNDMsIDEzNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCA0MywgMTIzLCAyMjQsIDI1LCAKLSAgICAyNTEsIDIyMSwgNDMsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCA0NCwgMTYzLCAyNTEsIDIyMSwgMTkzLCAyMjAsIDk0LCAKLSAgICAyMzEsIDg3LCAyMjAsIDk0LCAyNDgsIDE3MCwgMjIwLCA5NCwgMjE0LCAxNjAsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAKLSAgICA0NCwgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIDIyNCwgMjksIDIzMiwgMTE0LCAyMzMsIDUyLCAyMjQsIDI5LCAyMzIsIAotICAgIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCAyMzMsIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAKLSAgICAyMzIsIDExNCwgNDMsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgCi0gICAgMTE0LCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIAotICAgIDIzMywgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgCi0gICAgMjI0LCAyOSwgMjE0LCAxNjAsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgMjMzLCAKLSAgICA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDQzLCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCA4NSwgCi0gICAgMjE4LCAyMzYsIDcxLCAyMTgsIDIzNiwgNzEsIDQyLCAyLCAyMjIsIDE4NSwgMjQ5LCAxNjcsIDcxLCA0MiwgMjQ5LCAxOTUsIAotICAgIDg1LCA0LCAyMTgsIDIzNiwgNDIsIDIsIDIwMywgMjQ0LCAxMTMsIDQyLCAyLCA2NywgMjQ0LCAxMTMsIDQyLCAyLCAyMjYsIAotICAgIDE0OCwgMjQ5LCAxMzQsIDI0NCwgMTEzLCA0MiwgMiwgMjE0LCAxNjAsIDQzLCAyMTYsIDQzLCAyMzIsIDExNCwgNDQsIDI0NCwgCi0gICAgMTEzLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAyMTYsIDQzLCAyMzIsIDExNCwgNDMsIDI0NCwgMTEzLCA0MiwgMiwgMjQ4LCA3LCAKLSAgICAyNDksIDEzNCwgMjQ0LCAxMTMsIDg1LCA0LCAyMTgsIDIzNiwgNzEsIDQsIDIxOCwgMjM2LCA4NSwgMjIzLCAxMTksIDcxLCAKLSAgICAyMjMsIDExOSwgODUsIDY3LCAyMjMsIDExOSwgNzEsIDY3LCAyMjMsIDExOSwgODUsIDIyNiwgMTAsIDcxLCAyMjYsIDEwLCAKLSAgICA4NSwgMjE0LCAxNjIsIDIxNSwgMjI2LCA3MSwgMjE0LCAxNjIsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjIsIDQsIDIxNSwgCi0gICAgMjI2LCA3MSwgMjE0LCAxNjIsIDQsIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDIxNSwgMjI2LCA3MSwgMjIyLCAyNTAsIAotICAgIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDQsIDIxNSwgMjI2LCA3MSwgMjIyLCAyNTAsIDQsIDIxNSwgMjI2LCA4NSwgMjIyLCAKLSAgICAyNTAsIDIyNSwgMTEsIDcxLCAyMjIsIDI1MCwgMjI1LCAxMSwgODUsIDI0NiwgMTEzLCAyMTUsIDIyNiwgNzEsIDI0NiwgCi0gICAgMTEzLCAyMTUsIDIyNiwgODUsIDI0NiwgMTEzLCA0LCAyMTUsIDIyNiwgNzEsIDI0NiwgMTEzLCA0LCAyMTUsIDIyNiwgODUsIAotICAgIDIzMywgNDgsIDIxNSwgMjI2LCA3MSwgMjMzLCA0OCwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCA0LCAyMTUsIDIyNiwgNzEsIAotICAgIDIzMywgNDgsIDQsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgMjI1LCAxMSwgNzEsIDIzMywgNDgsIDIyNSwgMTEsIDg1LCAKLSAgICAyNDgsIDAsIDcxLCAyNDgsIDAsIDcxLCAyNDgsIDEsIDI0OSwgMTk1LCA4NSwgNCwgMjQ4LCAwLCAyNDQsIDk3LCAyMzIsIAotICAgIDExMCwgNzEsIDI1MCwgNDMsIDI0NiwgMTI2LCAyNTAsIDQzLCAyNTAsIDQ0LCAyLCA2NywgMjQ0LCAxMTMsIDI1MSwgMTE5LCAKLSAgICA4NSwgMjUwLCA0MywgMjUwLCA0NCwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDQ0LCAxNjMsIDI1MSwgCi0gICAgMjI5LCAyNTAsIDQ0LCAyLCAyMzIsIDExNCwgMTYzLCAyNTEsIDIyOSwgMjUwLCA0NCwgMiwgMjE0LCAxNjAsIDE2MywgMjUxLCAKLSAgICAyMjksIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOSwgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDI1NCwgMTY0LCAKLSAgICAyNTEsIDk2LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjksIDI1MSwgMjI5LCA0MywgMTYzLCA4NSwgMjUwLCA0MywgNDQsIDE2MywgCi0gICAgODUsIDI1MCwgNDMsIDIzNSwgMjAxLCAyNTEsIDEyMSwgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMTQsIDE2MCwgMTYzLCAKLSAgICAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIzMiwgMTE0LCAxNjMsIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjE0LCAxNjAsIAotICAgIDQzLCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIAotICAgIDIzMiwgMTE0LCA0NCwgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgMjMyLCAxMTQsIDQzLCAyMjQsIDI5LCAyNTAsIDQxLCAKLSAgICAyNTQsIDMzLCAyMTQsIDE2MCwgMTYzLCAyNTAsIDQzLCAyMzIsIDExNCwgMTYzLCAyNTAsIDQzLCA4NSwgMjMyLCAxMTQsIAotICAgIDQ0LCAyMTUsIDIyNiwgODUsIDIzMiwgMTE0LCA0MywgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI2LCA4NSwgCi0gICAgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNiwgNzEsIDI1MSwgMTIxLCA0MiwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAKLSAgICA0NCwgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgCi0gICAgMjMyLCAxMTQsIDQ0LCAyNDgsIDcsIDE2MywgMjUxLCAyMjksIDcxLCA0MiwgMiwgNjcsIDI1MSwgMjQwLCAyMzIsIDIxOSwgCi0gICAgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgMjQ3LCAxMjgsIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgNDMsIDE2MywgMjUxLCAKLSAgICAyMjksIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDIzMywgOTEsIDI1MCwgNDMsIDcxLCA0MiwgCi0gICAgMiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI4LCA3MSwgNDIsIDIsIDIzMiwgMTE0LCA0MywgMjI0LCAyOCwgNzEsIDQyLCAyLCAKLSAgICAyMzIsIDExNCwgNDQsIDIyNCwgMjgsIDcxLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgCi0gICAgMjE0LCAxNjAsIDQzLCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgMjMyLCAxMTQsIDQzLCAyMjQsIDI4LCA3MSwgMjUwLCAKLSAgICA0NCwgMiwgMjMyLCAxMTQsIDQ0LCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI4LCAyMTQsIAotICAgIDE2MCwgNDMsIDIxNSwgMjI2LCAyMTQsIDE2MCwgNDQsIDIxNSwgMjI2LCAyMzIsIDExNCwgNDMsIDIxNSwgMjI2LCA3MSwgCi0gICAgMjMxLCA4NywgMjE4LCAyMzYsIDg1LCAyMzEsIDg3LCAyMTgsIDIzNiwgNzEsIDIzMSwgODcsIDQsIDIxOCwgMjM2LCA4NSwgCi0gICAgMjMxLCA4NywgNCwgMjE4LCAyMzYsIDIzMiwgMTE0LCA0NCwgMjE1LCAyMjYsIDg1LCAyMTgsIDM5LCAyLCAyMjMsIDEzNSwgCi0gICAgMjQ5LCAyNTUsIDIxNCwgMTk0LCAyMTksIDYyLCAyNDksIDIzMCwgODUsIDIxOCwgMTU4LCA3MSwgMjE4LCAxNTgsIDIzMiwgCi0gICAgMjM0LCAyMTYsIDEzMywgMjE4LCAzOCwgMjUzLCAyNDIsIDIyOCwgNzYsIDI0OCwgNDYsIDIyOCwgNzYsIDI0OSwgMjAzLCAKLSAgICAyMjYsIDE2NywgODUsIDIxNywgMSwgNzEsIDIxNywgMSwgMjUyLCAxNjQsIDI1MSwgMTcxLCAyNTIsIDE2NCwgOTMsIDIsIAotICAgIDI1MCwgMTM3LCAyNTIsIDE2NCwgOTMsIDIsIDIxMSwgMTc4LCAyMjIsIDAsIDIxNCwgMTk1LCAyLCAyMjMsIDE2MywgMjQ2LCAKLSAgICA5MiwgMjQwLCAyNTAsIDI1MiwgMzAsIDcxLCAyMjAsIDQsIDIyNSwgMTA0LCA4NSwgMjIwLCA0LCAyMjUsIDEwNCwgMjIwLCAKLSAgICA4OSwgMjIzLCA1MiwgMjIyLCAxODksIDI0NCwgNjMsIDI0MSwgMjM1LCAyNTEsIDEyMSwgODUsIDQzLCAyMjUsIDEwLCAyMzUsIAotICAgIDI0OSwgODUsIDQ0LCAyMjUsIDEwLCAyMzUsIDI0OSwgNzEsIDQzLCAyMjUsIDEwLCAyMzUsIDI0OSwgNzEsIDEyMCwgMjI1LCAKLSAgICAxMCwgMjM1LCAyNDksIDcxLCA0NCwgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCAxMjQsIDIyNSwgMTAsIDIzNSwgMjQ5LCAyMTksIAotICAgIDEwMywgMjIsIDI0OSwgMTM3LCAyNTAsIDIyNywgNTAsIDIyMywgMTc1LCA1MCwgMjUxLCAyNDcsIDUwLCAyNTEsIDMzLCAKLSAgICAyNTQsIDExMCwgMjI2LCAxNDksIDI0OSwgMTM4LCAyNTAsIDExOSwgMjIzLCA0MCwgMjQ5LCAxMzksIDY0LCAyMzIsIDEyNCwgCi0gICAgMjQ5LCAxMzksIDY0LCAyMzUsIDEyMiwgMjE4LCAxNTksIDIyLCAyNDksIDE0NCwgMjQ0LCAxNzYsIDg3LCAyNTUsIDEsIAotICAgIDIyMCwgOTEsIDI0MiwgMjksIDIyLCAyMTksIDE5MSwgMjI1LCAyMjMsIDg3LCAyMTAsIDI1NCwgMjExLCA2OSwgMjE1LCAKLSAgICAyMTYsIDMxLCAyNDEsIDIzMCwgMjE1LCAyMTYsIDMxLCAyMzMsIDExMywgMjE1LCAyMTYsIDMxLCAyNDQsIDEwNCwgMjE1LCAKLSAgICAyMTYsIDMxLCAyMTYsIDEzNCwgMjE1LCAyMTYsIDMxLCAyMTEsIDIzOSwgMjE1LCAyMTYsIDMxLCAyMTIsIDQwLCAyMTUsIAotICAgIDIxNiwgMzEsIDIzMCwgMTIwLCAyMTUsIDIxNiwgMzEsIDI0NSwgMjMxLCAyMTIsIDEsIDY0LCAyNDgsIDI2LCA3MSwgMjQzLCAKLSAgICAyNDcsIDI0NCwgMTk4LCA3MSwgMjE5LCA3NiwgMjQ0LCAxOTgsIDg1LCAyMTksIDc2LCAyNDQsIDE5OCwgNzEsIDIxOCwgMzksIAotICAgIDIsIDIyMywgMTM1LCAyNDQsIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzMsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTMzLCAKLSAgICAyMzEsIDU5LCAyNDQsIDE0NiwgNTAsIDI0NSwgMjMxLCAyMzEsIDE5NSwgNTAsIDIzNSwgNDQsIDIyMSwgMjIyLCAyMTQsIAotICAgIDE0NSwgMjI5LCA5OCwgMjI1LCAyMywgMjU0LCAyMCwgMjE3LCA0MSwgMjQzLCA1OSwgMjUxLCAxMSwgMjMzLCAyNSwgMjEzLCAKLSAgICAxNTAsIDIzMiwgMjQ0LCAyMjEsIDE5MywgMjIyLCAyMSwgMjUxLCAwLCAyNTQsIDUwLCAyMjUsIDU1LCA3MSwgMjUwLCAxMjUsIAotICAgIDIzNCwgODQsIDcxLCAyNTAsIDEyNSwgMjI0LCAxNywgNzEsIDI1MCwgMTI1LCAyMjIsIDE5NywgNzEsIDI1MCwgMTI1LCAKLSAgICAyNTEsIDIzOSwgNzEsIDI1MCwgMTI1LCAyMzQsIDM2LCA3MSwgMjUwLCAxMjUsIDIyNSwgMjM1LCA4NSwgMjUwLCAxMjUsIAotICAgIDIzNCwgODQsIDg1LCAyNTAsIDEyNSwgMjI0LCAxNywgODUsIDI1MCwgMTI1LCAyMjIsIDE5NywgODUsIDI1MCwgMTI1LCAKLSAgICAyNTEsIDIzOSwgODUsIDI1MCwgMTI1LCAyMzQsIDM2LCA4NSwgMjUwLCAxMjUsIDIyNSwgMjM1LCA4NSwgMjE5LCAxOCwgCi0gICAgMjE4LCA1MSwgNzEsIDI0MSwgMjM1LCAyMTgsIDUxLCA3MSwgMjQ4LCAxLCAyMTgsIDUxLCA4NSwgMjQ5LCAyNTMsIDIxOCwgCi0gICAgNTEsIDcxLCAyMTksIDE4LCAyMTgsIDUxLCA4NSwgMjQxLCAyMzUsIDIxOCwgNTEsIDg1LCAyNDgsIDEsIDIxOCwgNTEsIDcxLCAKLSAgICAyNDksIDI1MywgMjE4LCA1MSwgMjQwLCAyNTAsIDIxOCwgMjQwLCAyMjQsIDI1LCAyMjgsIDUyLCAyNDUsIDE5NywgMjI4LCAKLSAgICA1MiwgMjUyLCA4MSwgMjQ1LCAxOTcsIDIyOCwgNDcsIDI1MiwgODEsIDIxOSwgMTIwLCAyMjgsIDQ3LCAyMzAsIDYyLCAyNDQsIAotICAgIDc0LCA1MCwgMjMwLCA2MiwgMjI5LCAxOTMsIDUwLCAyMzAsIDYyLCAyMjAsIDc4LCA1MCwgMjEyLCA5LCAxODMsIDI0OSwgCi0gICAgMTM4LCAyNDUsIDIyOCwgMTgzLCAyNDksIDEzOCwgMjE0LCAxNzEsIDIyMywgMTE1LCA4NywgMjIzLCAxMTUsIDE2LCAzMSwgCi0gICAgMjE1LCA0OCwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0NywgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCi0gICAgMjE1LCA0NiwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0NSwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCi0gICAgMjE1LCA0NCwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0MywgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCi0gICAgMjE1LCA0MiwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjQzLCA1NywgMjMxLCAxNDMsIDg1LCAyMTQsIDE3MSwgMjIzLCAKLSAgICAxMTUsIDg3LCAyMjMsIDExNiwgMjI2LCAyNCwgODcsIDIyNiwgMCwgMjI2LCAyNCwgODcsIDIyNSwgMTc3LCAyMjYsIDI0LCAKLSAgICA1MCwgMjExLCAyNTUsIDg3LCAyNDcsIDI0OSwgMjQ0LCAxOTcsIDI0NywgMjQ5LCAyNDQsIDE5NiwgMjQ3LCAyNDksIDI0NCwgCi0gICAgMTk1LCAyNDcsIDI0OSwgMjQ0LCAxOTQsIDI0NywgMjQ5LCAyNDQsIDE5MywgMjQ3LCAyNDksIDI0NCwgMTkyLCA3MSwgMjUwLCAKLSAgICA0NCwgMiwgNTksIDIyMiwgMjU0LCA3MSwgMjUwLCA0NCwgMiwgMTEzLCAyNDcsIDEyNiwgODUsIDI1MCwgNDQsIDIsIDcxLCAKLSAgICA1OSwgMjIyLCAyNTQsIDg1LCAyNTAsIDQ0LCAyLCAxMTMsIDcxLCAyNDcsIDEyNiwgMjMwLCAxNDcsIDMxLCAyMTEsIDY5LCAKLSAgICAyMzAsIDE0NywgMzEsIDIxMCwgMjUzLCAyNDcsIDIzMiwgMzEsIDI0MiwgMTM4LCAyMTEsIDY5LCAyNDcsIDIzMiwgMzEsIAotICAgIDIzMywgMTksIDIxMCwgMjUzLCAyNDcsIDIzMiwgMzEsIDIzMywgMTksIDIxMSwgNjksIDI0NywgMjMyLCAzMSwgMjQyLCAKLSAgICAxMzgsIDIxMCwgMjUzLCA3MSwgMjQ0LCA4MSwgODUsIDI0NCwgODEsIDI0MiwgMjksIDIyLCAyMjUsIDEwNywgMjU0LCAxMjgsIAotICAgIDI0OSwgMTM2LCAyMTcsIDIzNiwgMjE4LCAxNjYsIDY0LCAyNTQsIDIzNSwgMjIxLCAyMDgsIDI1NCwgMTc4LCAyNDQsIDU5LCAKLSAgICAyNDMsIDY3LCAyMTgsIDE2NiwgNjQsIDI0MSwgMjA5LCAyNTMsIDIwNywgODcsIDI0NCwgNzAsIDIyNiwgMTMwLCA3MSwgCi0gICAgMjE4LCAxNTgsIDEzNCwgMjMyLCAyMTQsIDI0OSwgMTgzLCAyMjIsIDI1NCwgMTM0LCAyMzIsIDIxNCwgMjQ5LCAxODMsIAotICAgIDIzMywgNTIsIDIxMiwgNTAsIDUwLCAxMjUsIDIxMywgMTMwLCA1MCwgMjQ2LCAxMTgsIDI0NCwgMTQ2LCA1MCwgMjQ2LCAKLSAgICAxMTgsIDIzMSwgMTk1LCA1MCwgMjM1LCAyMTAsIDI0NCwgMTQ2LCAyMiwgMjMxLCAxOTUsIDUwLCAyMzEsIDE5NSwgMjIsIAotICAgIDI0NCwgMTQ2LCA1MCwgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCA1MCwgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCAyMiwgMjMxLCAKLSAgICAxOTUsIDIyLCAyNDQsIDE0NiwgNTAsIDY3LCAyMzEsIDE5NSwgMiwgMjE4LCAxMDUsIDUwLCAyMDMsIDIzMSwgMTk1LCAyLCAKLSAgICAyMTgsIDEwNSwgNTAsIDIzMSwgODcsIDcxLCAyNTAsIDQzLCAyMzEsIDg3LCA4NSwgMjUwLCA0MywgMjMxLCA4NywgNCwgNzEsIAotICAgIDI1MCwgNDMsIDIzMSwgMTU4LCA4NywgMjQ3LCAxNzUsIDg3LCAyMTQsIDE2OSwgMjI1LCAyNTUsIDg3LCAyNDksIDIzOSwgCi0gICAgMjQzLCAyMzEsIDIxNCwgMTQxLCAyMjksIDkzLCAyNTAsIDE2OSwgMjI2LCA2NSwgMjM1LCA1MCwgMjEzLCAxODUsIDI1MCwgCi0gICAgMTAxLCA4NSwgMjMwLCAxMzQsIDIzMiwgMjMxLCAyMjAsIDExNCwgMjIwLCAxNDksIDIyNCwgOCwgMjIwLCAxMzIsIDIxOSwgCi0gICAgNTcsIDI1MiwgMTY3LCAyNTIsIDEzNCwgOTIsIDIzNCwgMTQ0LCA3MSwgMjQ2LCAxMDEsIDIzMSwgMTkwLCA3MSwgMjQ2LCAKLSAgICAxMDEsIDIzNCwgODQsIDg1LCAyNDYsIDEwMSwgMjMxLCAxOTAsIDg1LCAyNDYsIDEwMSwgMjM0LCA4NCwgMjE5LCA2MywgCi0gICAgMjExLCAyMzAsIDIxOSwgNjYsIDIxOCwgMzksIDI1MiwgNTksIDI0OSwgMjU1LCAyMjMsIDE2MiwgODUsIDIxOSwgNjIsIAotICAgIDIxNiwgMTM1LCAyNTAsIDAsIDIyLCAyMjMsIDE2MiwgMjE1LCA5NCwgNzEsIDIyMCwgNCwgMjI1LCAxMDQsIDIxNSwgOTQsIAotICAgIDg1LCAyMjAsIDQsIDIyNSwgMTA0LCA3MSwgMjQ4LCAxLCAyMzYsIDcsIDIxOCwgMjM2LCAyNDksIDEzMywgMjMzLCA5NywgCi0gICAgMjQ3LCAyMDEsIDI1MCwgMjUyLCAyMjYsIDE3MCwgMjI1LCAxMDcsIDI1MCwgMjUzLCAyMTksIDkwLCAyNDEsIDIxOSwgMiwgCi0gICAgNzEsIDI0OSwgMTM4LCAzNywgMjQ5LCAxMzMsIDIzMywgOTcsIDI1MCwgMTYxLCAyMjgsIDgwLCAyNDUsIDEzMiwgMjU0LCAKLSAgICAxNDksIDIyNiwgMTk1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIDg1LCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIAotICAgIDcxLCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIDg1LCA0MywgMjMzLCA5OCwgMjMxLCA1OCwgNzEsIDQzLCAKLSAgICAyMzMsIDk4LCAyMzEsIDU4LCAyNDYsIDk3LCAyMTksIDg0LCA1MCwgMTE0LCA3MSwgMjQ2LCAxMTMsIDIxNSwgMjI2LCA0MywgCi0gICAgMjUwLCA4LCAyNDUsIDEzMiwgOTIsIDIyMiwgMCwgMjQ0LCAxODMsIDI0OCwgNywgMjM2LCA3LCA3MSwgMjUwLCA0NCwgMjM2LCAKLSAgICA3LCA4NSwgMjE4LCAyMzYsIDg1LCAyMTUsIDE5MywgMjIzLCA2MywgNDMsIDI0NSwgMTMxLCAyMjMsIDYzLCA0MywgMjQ1LCAKLSAgICAxMzAsIDI1MywgMjE5LCAxNiwgMzEsIDIxNCwgMTQ1LCAxMTQsIDI1MCwgNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTEzLCAxNzAsIAotICAgIDQ4LCAyMjUsIDE5MiwgMjIyLCAyNTEsIDIzNSwgMjEyLCAyMjUsIDE5MiwgMjMzLCA0OSwgMjM1LCAyMTIsIDIyNSwgMTkyLCAKLSAgICAyMzUsIDIwMCwgMjI1LCAxOTIsIDg1LCAyNDksIDEzOSwgMjI2LCAyMDEsIDIyMCwgMzEsIDIyMCwgMTksIDIxOSwgMjMxLCAKLSAgICAyNTAsIDY5LCAyNTAsIDIzNCwgMjQxLCAxNjQsIDIxOSwgMTI4LCAyNDMsIDY4LCAyMTEsIDIzMCwgMjQwLCAyMjcsIDI0MywgCi0gICAgNjgsIDIsIDI0MiwgMTksIDIzMSwgMTc4LCAxNiwgMzEsIDIzMiwgMjM1LCAyMzAsIDEyMCwgMjE0LCAxOTUsIDIyNiwgMjAxLCAKLSAgICAyNDIsIDEyOSwgMjQ0LCAyMCwgMjQ0LCA4MiwgMjM2LCA3LCAyNDEsIDY2LCAyNDQsIDEzNywgMjIyLCAxNiwgNDIsIDI0NCwgCi0gICAgMTksIDI0OSwgMTY3LCAyMTksIDEwNiwgMjQwLCAxMTksIDIxOSwgMTA5LCAyMjUsIDE3MSwgMiwgMjUyLCAxNjcsIDIxNiwgCi0gICAgMjQzLCAyMzUsIDEzNywgMjUyLCAxNTQsIDg3LCAyNDEsIDIzOCwgMjQyLCAxNDAsIDg3LCAyNDMsIDIzOSwgMjI0LCAxNDUsIAotICAgIDI0OSwgMTExLCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCA3MSwgMjQ0LCA4MiwgMiwgMjAzLCAyMzAsIDIyOSwgODUsIDIxOCwgCi0gICAgMTA2LCAyMTQsIDE2MCwgMjUxLCAyMjUsIDIyMSwgMTk1LCA4NSwgMjIxLCAxOTUsIDIzMiwgMTE0LCAyNTEsIDIyNSwgMjIxLCAKLSAgICAxOTUsIDcxLCAyMjEsIDE5NSwgNzEsIDExNCwgMjUwLCAxMzgsIDc5LCAyMTcsIDIsIDIzMiwgMTYwLCA1MCwgMjE3LCA1NCwgCi0gICAgMjQ2LCA5NiwgMjU0LCAyMDAsIDI0NSwgMTI3LCAyMjMsIDE2MCwgMjQ0LCA5MywgMjIzLCAxNjAsIDI0MiwgMjIsIDIxMywgCi0gICAgMTc0LCAyNDIsIDIyLCAyMTEsIDE5OCwgMjQyLCAyMiwgMjMyLCAxMTQsIDQ0LCAyMjUsIDIwMSwgMjI1LCAyMDEsIDIxNCwgCi0gICAgMTYwLCA0NCwgMjI1LCAyMDEsIDcxLCAyMjgsIDIzNSwgODUsIDIyOCwgMjM1LCAyNTAsIDEzOCwgNzksIDExNCwgMjUwLCAKLSAgICAxMzgsIDc5LCAyMzAsIDg5LCAyMTEsIDE3OCwgMTE0LCAyMzAsIDg5LCAyMTEsIDE3OCwgMjUyLCAxNjQsIDIxMSwgMTc4LCAKLSAgICAxMTQsIDI1MiwgMTY0LCAyMTEsIDE3OCwgMjI2LCAxMzAsIDI2LCAyNDksIDEzOCwgMTE0LCAyNiwgMjQ5LCAxMzgsIDIwNCwgCi0gICAgMjUwLCAxODMsIDI0OSwgMTM4LCAxMTQsIDIwNCwgMjUwLCAxODMsIDI0OSwgMTM4LCA3LCAyNDksIDEzOCwgMjIwLCA5MywgCi0gICAgNzEsIDcsIDI0OSwgMTM4LCAyMjYsIDEzMCwgNywgMjQ5LCAxMzgsIDIzMSwgMTkyLCAyNDksIDEzOCwgMjE4LCAxNTksIDY0LCAKLSAgICAyNDgsIDE1NywgMjQ0LCAxOSwgMjE3LCAxNiwgMjUzLCAyMjQsIDI0NCwgMTksIDI1MiwgMTY1LCAyNTMsIDIyNCwgMTE0LCAKLSAgICAyNDQsIDE5LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDI0NCwgMTksIDI0OSwgMjUxLCAyNTMsIDIyNCwgODUsIDI0NCwgMTksIAotICAgIDIyNSwgMTIsIDIxOCwgMTU4LCA3MSwgMjQ0LCAxOSwgMjI1LCAxMiwgMjE4LCAxNTgsIDIxOSwgMTMsIDIxOCwgMTEzLCAKLSAgICAyMjYsIDEzMCwgNzEsIDIxOCwgMTU4LCAzNywgNzEsIDIxOCwgMTU4LCAyMDQsIDI1MCwgMTgzLCA4NSwgMjE4LCAxNTgsIAotICAgIDg1LCAyNTAsIDE4MywgNzEsIDIxOCwgMTU4LCAyMjYsIDEzMCwgODUsIDIxOCwgMTU4LCAxMTQsIDIyNiwgMTMwLCA4NSwgCi0gICAgMjE4LCAxNTgsIDIyNSwgNjMsIDIxOCwgMTU4LCAyMjAsIDkzLCA3MSwgMjE4LCAxNTgsIDExNCwgMjUzLCAyMjQsIDIwNCwgCi0gICAgMjUwLCAxODMsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjE4LCAyNDYsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjI1LCAxMiwgODUsIAotICAgIDIxOCwgMTU4LCAyNDUsIDIwMSwgMjI1LCAxMiwgMjI1LCA2MywgMjE4LCAxNTgsIDIxOSwgMTI3LCAyMjUsIDEyLCA4NSwgCi0gICAgMjE4LCAxNTgsIDI0NSwgMjAxLCAyMjUsIDEyLCAyMjMsIDExNywgODUsIDIxOCwgMTU4LCAxMTQsIDI0NSwgMjAxLCAyMjUsIAotICAgIDEyLCAyMjMsIDExNywgODUsIDIxOCwgMTU4LCAyMTUsIDc3LCAyMjUsIDEyLCA4NSwgMjE4LCAxNTgsIDIxOSwgMTIyLCAKLSAgICAyMjUsIDEyLCAyNTMsIDIyNCwgMjE3LCAxNiwgMjUzLCAyMjQsIDIwNCwgMjUwLCAxODMsIDIxNywgMTYsIDI1MywgMjI0LCAKLSAgICAxMTQsIDIxNywgMTYsIDI1MywgMjI0LCAyMTksIDEyNywgMjI1LCAxNjAsIDg1LCAyMiwgNzEsIDI0NCwgNjIsIDg1LCAyNDQsIAotICAgIDYyLCA3MSwgMjQ0LCA2MiwgMjQ1LCAyMDEsIDIyNSwgMTYwLCAyMjYsIDEzMCwgODUsIDI0NCwgNjIsIDM3LCAyMDQsIDI1MCwgCi0gICAgMTgzLCAyNDUsIDIwMSwgMjI1LCAxMiwgMjE4LCAxNTgsIDExNCwgMjE3LCAxNiwgMjI1LCA2MywgMjUzLCAyMjQsIDIxOSwgCi0gICAgNjQsIDIxNiwgMTA2LCAyMTUsIDIxOSwgMjE5LCA2NCwgMTE0LCAyNTAsIDEyMiwgMjE5LCA2NCwgMjE5LCAxNSwgMTE0LCAKLSAgICAyMTksIDE1LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDI0NSwgMjAxLCAyMTcsIDE2LCAyMjQsIDE3NCwgMjUzLCAyMjQsIDExNCwgCi0gICAgMjQ1LCAyMDEsIDIxNywgMTYsIDIyNCwgMTc0LCAyNTMsIDIyNCwgMjQ5LCAxMzksIDc5LCAyMjAsIDkzLCA3MSwgMjUwLCAKLSAgICA0MywgMTUyLCA5MiwgMjQ5LCAxMzksIDc5LCAyMzIsIDExNCwgNDQsIDI0NiwgOTQsIDcxLCAyMTgsIDIzNiwgMjE0LCAxNjAsIAotICAgIDQ0LCAyNDYsIDk0LCA3MSwgMjE4LCAyMzYsIDIzMiwgMTE0LCA0NCwgMjIwLCA5MywgNzEsIDIxOCwgMjM2LCAyMTQsIDE2MCwgCi0gICAgNDQsIDIyMCwgOTMsIDcxLCAyMTgsIDIzNiwgODUsIDIyNCwgMTYsIDE2NCwgMjI2LCAxNTEsIDcxLCAyMjQsIDE2LCAxNjQsIAotICAgIDIyNiwgMTUxLCA3MSwgMjQ1LCAzOSwgMTY0LCAyMjYsIDE1MSwgODUsIDI0OCwgMSwgMjMwLCAxODcsIDcxLCAyMTEsIDE3OCwgCi0gICAgMTE0LCAyNDUsIDM5LCAxNjQsIDg3LCAxOTMsIDY3LCAxMzAsIDIzMSwgODcsIDY3LCAxMzAsIDExNCwgNjcsIDEzMCwgMTE0LCAKLSAgICAyMTksIDE1NywgMjE1LCA5NCwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMTksIDE1NywgMjQ5LCAKLSAgICAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCA1MiwgMjE1LCA5NCwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIAotICAgIDE1MSwgMTE0LCA1MiwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAxMjEsIDIxOSwgMTU3LCAyNDksIAotICAgIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDEyMSwgNTIsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAKLSAgICAxNTEsIDI0OSwgOTksIDIxOCwgMTQyLCAyMjYsIDE5LCA1LCAyMjYsIDE1MSwgMTE0LCAyNDUsIDM5LCAxNjQsIDIyNiwgCi0gICAgMTUxLCAxMTQsIDI0MSwgMjM1LCAyNDUsIDM5LCAxNjQsIDIyNiwgMTUxLCAxMTQsIDg1LCAyNDEsIDIzNCwgMjIyLCAxODksIAotICAgIDExNCwgODUsIDI0MSwgMjM1LCAyNTEsIDEyMSwgMjQ0LCA2MywgMjQxLCAyMzQsIDIyMiwgMTg5LCAyNDQsIDYzLCAyNDEsIAotICAgIDIzNSwgMjUxLCAxMjEsIDIzMSwgODcsIDQzLCAyMjYsIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCA0NCwgMjI2LCA4LCAyMjYsIAotICAgIDE1MSwgMjMxLCA4NywgMjQ0LCA3MSwgNDMsIDIyNiwgOCwgMjI2LCAxNTEsIDIzMSwgODcsIDI0NCwgNzEsIDQ0LCAyMjYsIAotICAgIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIDg3LCAKLSAgICAyMjIsIDI1MCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTE0LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjI0LCAxLCAKLSAgICAxNjQsIDIyNiwgMTUxLCAxMTQsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDIzMywgCi0gICAgNDgsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDExNCwgMjIyLCAyNTAsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAKLSAgICAxNTEsIDE5MywgNDMsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxOTMsIDQ0LCAyMTYsIDcsIDIyMCwgCi0gICAgNTUsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCA4NywgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgCi0gICAgODcsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIyNiwgMTUxLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDExMSwgMjQ3LCAKLSAgICAyMTIsIDE1MiwgMzcsIDIxLCAxMDUsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTU4LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIAotICAgIDE2MSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxOTAsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTk1LCAyNDcsIDIxMiwgCi0gICAgMTUyLCAzNywgMjEsIDE5OSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxOTYsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMjAxLCAKLSAgICAyNDcsIDIxMiwgMTUyLCAzNywgNTQsIDIxNiwgMjQ4LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTExLCAyNDcsIDIxMiwgMzcsIAotICAgIDM1LCAyMSwgMTA1LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTU4LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTYxLCAyNDcsIAotICAgIDIxMiwgMzcsIDM1LCAyMSwgMTkwLCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgCi0gICAgMTk5LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTk2LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMjAxLCAyNDcsIDIxMiwgMzcsIAotICAgIDM1LCA1NCwgMjE2LCAyNDgsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDExMSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAKLSAgICAyMSwgMTA1LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxNTgsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE2MSwgCi0gICAgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTkwLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxOTUsIDI0NywgMjEyLCAKLSAgICAxNTIsIDM3LCAzNSwgMjEsIDE5OSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTk2LCAyNDcsIDIxMiwgMTUyLCAzNywgCi0gICAgMzUsIDIxLCAyMDEsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgNTQsIDIxNiwgMjQ4LCAxMTQsIDIxMSwgMjQ2LCA5NywgNzUsIAotICAgIDExNCwgOTYsIDUwLCAxMTQsIDIzMCwgMTg3LCA1MCwgMTE0LCAyNDcsIDE3NywgNTAsIDExNCwgMjE5LCAzMCwgMjQ1LCAKLSAgICAyMjgsIDc1LCAxMTQsIDk3LCA3NSwgMTE0LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDI0NiwgMTA2LCAyMjUsIDE0LCA5NywgCi0gICAgNzUsIDExNCwgMjIyLCAxODYsIDk3LCA3NSwgMjE1LCAyMjUsIDk3LCA3NSwgMTE0LCAyMTUsIDIyNSwgOTcsIDc1LCAyNDgsIAotICAgIDE2MywgMjE1LCAyMjUsIDk3LCA3NSwgMTE0LCAyNDgsIDE2MywgMjE1LCAyMjUsIDk3LCA3NSwgODUsIDk3LCA3NSwgMjE2LCAKLSAgICAxNDUsIDIxNiwgMTMsIDk3LCAyNTQsIDEsIDIxNiwgMTQ1LCAyNTEsIDE4MSwgOTcsIDI1NCwgMSwgODUsIDk3LCAyNTQsIDEsIAotICAgIDExNCwgODUsIDI0OSwgOTksIDI0NiwgMTEyLCAyMiwgOTcsIDc1LCAxMTQsIDg1LCAyNDksIDk5LCAyMTQsIDE1MywgMjIsIAotICAgIDk3LCA3NSwgMjE4LCAyMzMsIDg1LCA5NywgNzUsIDExNCwgMjQ5LCAyMTQsIDg1LCA5NywgNzUsIDIyMiwgMjQ5LCA3MSwgCi0gICAgOTcsIDc1LCAyMzMsIDQ3LCA3MSwgOTcsIDc1LCAyNTIsIDE5MSwgMjIwLCA5MywgNzEsIDk3LCA3NSwgMjQzLCAyNDksIAotICAgIDIyMCwgOTMsIDcxLCA5NywgNzUsIDExNCwgMjMyLCAxMTQsIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAxMTQsIDIxNCwgMTYwLCAKLSAgICAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMjI4LCA1NCwgMjMyLCAxMTQsIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAyNDksIDEwNywgCi0gICAgMjMyLCAxMjksIDIyOCwgNTQsIDIxNCwgMTYwLCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMzcsIDExNCwgNzEsIDk3LCA3NSwgCi0gICAgMjExLCAyNTIsIDk3LCA3NSwgMjUxLCAyMjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjUxLCAyMjgsIDk3LCA3NSwgMjUxLCAKLSAgICAyMjgsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMTE0LCAyNTEsIDIyOCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAxMTQsIAotICAgIDI1MSwgMjI4LCA5NywgNzUsIDExNCwgMjUxLCAyMjgsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjE3LCAxOCwgOTcsIDc1LCAKLSAgICAxMTQsIDIxNywgMTcsIDk3LCA3NSwgMjEyLCAxOCwgOTcsIDc1LCAxMTQsIDIxMiwgMTgsIDk3LCA3NSwgMjI2LCAxNzYsIAotICAgIDk3LCA3NSwgNTIsIDI0OSwgMTA3LCAyMzIsIDEyOSwgMTM0LCAyNDcsIDIyMiwgMjU0LCAxMTcsIDcxLCAyMTUsIDIyNywgCi0gICAgMjQ5LCAxOTUsIDQsIDcxLCAyMTUsIDIyNiwgMjI1LCAxNzQsIDIwNCwgMjE4LCA2NCwgMjA0LCAyMTgsIDIyLCA0MywgMjIyLCAKLSAgICA5MiwgMjUyLCAxODEsIDI0OCwgNjgsIDQ0LCAyMjIsIDkyLCAyNTIsIDE4MSwgMjQ4LCA2OCwgMTc3LCAyLCA1OSwgMjM1LCAKLSAgICAyMjIsIDIyMywgNTMsIDIxOSwgNDksIDIyNCwgMjA0LCAyMTgsIDY0LCAyMTgsIDIzLCAyMjQsIDIwNCwgMjE5LCA0OCwgNjcsIAotICAgIDI1MiwgMTQ5LCAyLCAyMDMsIDkxLCAxMSwgMjIyLCAyMzEsIDI0OCwgNiwgMjAwLCAyNDcsIDE3NiwgMTEsIDI0NCwgMTgzLCAKLSAgICAyNDgsIDYsIDkyLCAyMzIsIDE1MiwgMjU0LCAxMjYsIDkyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDcxLCAyNDgsIDEsIDIsIAotICAgIDI1MCwgMTgxLCAyNDcsIDEyOCwgMjIsIDIsIDI0NywgMTI4LCAyNDUsIDE3OCwgNjQsIDIyNiwgMTc0LCAyMTQsIDE1MiwgCi0gICAgMjMyLCAxMTQsIDQ0LCAyNDksIDE2OSwgMiwgMjQ3LCAxMjgsIDIxNCwgMTYwLCA0MywgMjQ5LCAxNjksIDIsIDI0NywgMTI4LCAKLSAgICA0MywgMjI2LCAxMzIsIDIzNSwgNzIsIDQ0LCAyMjYsIDEzMiwgMjM1LCA3MiwgMjQzLCAyMzYsIDIyNiwgMTMyLCAyMzUsIAotICAgIDcyLCAyMzMsIDkxLCAxMjAsIDIxNywgODgsIDIzMywgOTEsIDEyNCwgMjE3LCA4OCwgNDMsIDIyLCA0NCwgNTIsIDIxNSwgCi0gICAgOTMsIDQzLCAyMiwgNDQsIDIxNywgODgsIDQzLCAyMzAsIDkyLCAyMDAsIDQ0LCAyMTcsIDg4LCAyMDAsIDQzLCAyMTcsIDg4LCAKLSAgICAxMjAsIDIxNywgODksIDIsIDI1MCwgNDQsIDQ4LCAyMzIsIDExMSwgMjQ3LCAxODEsIDI1MSwgODYsIDIwMywgMjIyLCAxMzUsIAotICAgIDcxLCAyNDksIDIxMywgMjQ4LCAwLCA3MSwgMjQ5LCAyMTMsIDI0OCwgMSwgMiwgMTQwLCAyMTYsIDExNSwgNzEsIDI0OSwgCi0gICAgMjEzLCAyNDgsIDEsIDIsIDk3LCAyMTYsIDExNSwgNzEsIDQyLCAyLCAxNDAsIDIxNiwgMTE1LCA3MSwgNDIsIDIsIDk3LCAKLSAgICAyMTYsIDExNSwgMTEsIDQzLCA3MSwgNDIsIDEyNywgMTEsIDQ0LCA3MSwgNDIsIDEyNywgMTEsIDQzLCAyNTQsIDExOCwgCi0gICAgMTI3LCAxMSwgNDQsIDI1NCwgMTE4LCAxMjcsIDExLCA0MywgNTIsIDI1NCwgMTE4LCAxMjcsIDExLCA0NCwgNTIsIDI1NCwgCi0gICAgMTE4LCAxMjcsIDExLCA0MywgNzEsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAxMSwgNDQsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIAotICAgIDEyNywgMTEsIDQzLCAyNDQsIDcxLCAyMjYsIDcsIDExLCA0NCwgMjQ0LCA3MSwgMjI2LCA3LCAyMTQsIDE1MywgMjI0LCAyNywgCi0gICAgNzUsIDI0NiwgMTEyLCAyMjQsIDI3LCA3NSwgMjU0LCA5NiwgMjQzLCAxMDUsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyNDMsIAotICAgIDEwNSwgMjUwLCA0NCwgNzUsIDQ0LCA4MCwgMiwgMzcsIDIyNSwgMjUsIDIwMCwgMTQwLCA3NSwgMjAwLCA5NywgNzUsIDIwMCwgCi0gICAgNDMsIDQ0LCA3NSwgMjAwLCAxNDAsIDUyLCA3NSwgMjAwLCA5NywgNTIsIDc1LCAyMDAsIDQzLCA0NCwgNTIsIDc1LCAyMDAsIAotICAgIDE0MCwgODAsIDI0MywgMjUxLCAxMzAsIDIwMCwgOTcsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDE0MCwgNTIsIDgwLCAKLSAgICAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCA1MiwgODAsIDI0MywgMjUxLCAxMzAsIDIwMCwgOTcsIDIxOCwgMjMyLCA3NSwgNDYsIAotICAgIDQ3LCAyNTEsIDIyMywgNDYsIDQ3LCAyNDcsIDEyNSwgNDYsIDQ3LCAyNDYsIDI1MywgNDYsIDQ3LCAyNDcsIDEyNCwgNDYsIAotICAgIDQ3LCAyNDYsIDE4OSwgNDYsIDQ3LCAyNDcsIDYwLCA0NiwgNDcsIDI0NiwgMjUyLCA0NiwgNDcsIDI0NywgMTIzLCA0NiwgCi0gICAgNDcsIDI0NiwgMTU3LCA0NiwgNDcsIDI0NywgMjgsIDQ2LCA0NywgMjQ2LCAyMjAsIDQ2LCA0NywgMjQ3LCA5MSwgNDYsIDQ3LCAKLSAgICAyNDYsIDE4OCwgNDYsIDQ3LCAyNDcsIDU5LCA0NiwgNDcsIDI0NiwgMjUxLCA0NiwgNDcsIDI0NywgMTIyLCA0NiwgNDcsIAotICAgIDI0NiwgMTQxLCA0NiwgNDcsIDI0NywgMTIsIDQ2LCA0NywgMjQ2LCAyMDQsIDQ2LCA0NywgMjQ3LCA3NSwgNDYsIDQ3LCAKLSAgICAyNDYsIDE3MiwgNDYsIDQ3LCAyNDcsIDQzLCA0NiwgNDcsIDI0NiwgMjM1LCA0NiwgNDcsIDI0NywgMTA2LCA0NiwgNDcsIAotICAgIDI0NiwgMTU2LCA0NiwgNDcsIDI0NywgMjcsIDQ2LCA0NywgMjQ2LCAyMTksIDQ2LCA0NywgMjQ3LCA5MCwgNDYsIDQ3LCAKLSAgICAyNDYsIDE4NywgNDYsIDQ3LCAyNDcsIDU4LCA0NiwgNDcsIDI0NiwgMjUwLCA0NiwgNDcsIDI0NywgMTIxLCA0NiwgNDcsIAotICAgIDI0NiwgMTMzLCA0NiwgNDcsIDI0NywgNCwgNDYsIDQ3LCAyNDYsIDE5NiwgNDYsIDQ3LCAyNDcsIDY3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTY0LCA0NiwgNDcsIDI0NywgMzUsIDQ2LCA0NywgMjQ2LCAyMjcsIDQ2LCA0NywgMjQ3LCA5OCwgNDYsIDQ3LCAyNDYsIAotICAgIDE0OCwgNDYsIDQ3LCAyNDcsIDE5LCA0NiwgNDcsIDI0NiwgMjExLCA0NiwgNDcsIDI0NywgODIsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNzksIDQ2LCA0NywgMjQ3LCA1MCwgNDYsIDQ3LCAyNDYsIDI0MiwgNDYsIDQ3LCAyNDcsIDExMywgNDYsIDQ3LCAyNDYsIAotICAgIDE0MCwgNDYsIDQ3LCAyNDcsIDExLCA0NiwgNDcsIDI0NiwgMjAzLCA0NiwgNDcsIDI0NywgNzQsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNzEsIDQ2LCA0NywgMjQ3LCA0MiwgNDYsIDQ3LCAyNDYsIDIzNCwgNDYsIDQ3LCAyNDcsIDEwNSwgNDYsIDQ3LCAyNDYsIAotICAgIDE1NSwgNDYsIDQ3LCAyNDcsIDI2LCA0NiwgNDcsIDI0NiwgMjE4LCA0NiwgNDcsIDI0NywgODksIDQ2LCA0NywgMjQ2LCAKLSAgICAxODYsIDQ2LCA0NywgMjQ3LCA1NywgNDYsIDQ3LCAyNDYsIDI0OSwgNDYsIDQ3LCAyNDcsIDEyMCwgNDYsIDQ3LCAyNDYsIAotICAgIDEyOSwgNDYsIDQ3LCAyNDcsIDAsIDQ2LCA0NywgMjQ2LCAxOTIsIDQ2LCA0NywgMjQ3LCA2MywgNDYsIDQ3LCAyNDYsIDE2MCwgCi0gICAgNDYsIDQ3LCAyNDcsIDMxLCA0NiwgNDcsIDI0NiwgMjIzLCA0NiwgNDcsIDI0NywgOTQsIDQ2LCA0NywgMjQ2LCAxNDQsIDQ2LCAKLSAgICA0NywgMjQ3LCAxNSwgNDYsIDQ3LCAyNDYsIDIwNywgNDYsIDQ3LCAyNDcsIDc4LCA0NiwgNDcsIDI0NiwgMTc1LCA0NiwgNDcsIAotICAgIDI0NywgNDYsIDQ2LCA0NywgMjQ2LCAyMzgsIDQ2LCA0NywgMjQ3LCAxMDksIDQ2LCA0NywgMjQ2LCAxMzYsIDQ2LCA0NywgCi0gICAgMjQ3LCA3LCA0NiwgNDcsIDI0NiwgMTk5LCA0NiwgNDcsIDI0NywgNzAsIDQ2LCA0NywgMjQ2LCAxNjcsIDQ2LCA0NywgMjQ3LCAKLSAgICAzOCwgNDYsIDQ3LCAyNDYsIDIzMCwgNDYsIDQ3LCAyNDcsIDEwMSwgNDYsIDQ3LCAyNDYsIDE1MSwgNDYsIDQ3LCAyNDcsIAotICAgIDIyLCA0NiwgNDcsIDI0NiwgMjE0LCA0NiwgNDcsIDI0NywgODUsIDQ2LCA0NywgMjQ2LCAxODIsIDQ2LCA0NywgMjQ3LCA1MywgCi0gICAgNDYsIDQ3LCAyNDYsIDI0NSwgNDYsIDQ3LCAyNDcsIDExNiwgNDYsIDQ3LCAyNDYsIDEzMiwgNDYsIDQ3LCAyNDcsIDMsIDQ2LCAKLSAgICA0NywgMjQ2LCAxOTUsIDQ2LCA0NywgMjQ3LCA2NiwgNDYsIDQ3LCAyNDYsIDE2MywgNDYsIDQ3LCAyNDcsIDM0LCA0NiwgNDcsIAotICAgIDI0NiwgMjI2LCA0NiwgNDcsIDI0NywgOTcsIDQ2LCA0NywgMjQ2LCAxNDcsIDQ2LCA0NywgMjQ3LCAxOCwgNDYsIDQ3LCAKLSAgICAyNDYsIDIxMCwgNDYsIDQ3LCAyNDcsIDgxLCA0NiwgNDcsIDI0NiwgMTc4LCA0NiwgNDcsIDI0NywgNDksIDQ2LCA0NywgCi0gICAgMjQ2LCAyNDEsIDQ2LCA0NywgMjQ3LCAxMTIsIDQ2LCA0NywgMjQ2LCAxMzksIDQ2LCA0NywgMjQ3LCAxMCwgNDYsIDQ3LCAKLSAgICAyNDYsIDIwMiwgNDYsIDQ3LCAyNDcsIDczLCA0NiwgNDcsIDI0NiwgMTcwLCA0NiwgNDcsIDI0NywgNDEsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMzMsIDQ2LCA0NywgMjQ3LCAxMDQsIDQ2LCA0NywgMjQ2LCAxNTQsIDQ2LCA0NywgMjQ3LCAyNSwgNDYsIDQ3LCAKLSAgICAyNDYsIDIxNywgNDYsIDQ3LCAyNDcsIDg4LCA0NiwgNDcsIDI0NiwgMTg1LCA0NiwgNDcsIDI0NywgNTYsIDQ2LCA0NywgCi0gICAgMjQ2LCAyNDgsIDQ2LCA0NywgMjQ3LCAxMTksIDQ2LCA0NywgMjQ2LCAxMjcsIDQ2LCA0NywgMjQ2LCAyNTQsIDQ2LCA0NywgCi0gICAgMjQ2LCAxOTAsIDQ2LCA0NywgMjQ3LCA2MSwgNDYsIDQ3LCAyNDYsIDE1OCwgNDYsIDQ3LCAyNDcsIDI5LCA0NiwgNDcsIAotICAgIDI0NiwgMjIxLCA0NiwgNDcsIDI0NywgOTIsIDQ2LCA0NywgMjQ2LCAxNDIsIDQ2LCA0NywgMjQ3LCAxMywgNDYsIDQ3LCAKLSAgICAyNDYsIDIwNSwgNDYsIDQ3LCAyNDcsIDc2LCA0NiwgNDcsIDI0NiwgMTczLCA0NiwgNDcsIDI0NywgNDQsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMzYsIDQ2LCA0NywgMjQ3LCAxMDcsIDQ2LCA0NywgMjQ2LCAxMzQsIDQ2LCA0NywgMjQ3LCA1LCA0NiwgNDcsIAotICAgIDI0NiwgMTk3LCA0NiwgNDcsIDI0NywgNjgsIDQ2LCA0NywgMjQ2LCAxNjUsIDQ2LCA0NywgMjQ3LCAzNiwgNDYsIDQ3LCAKLSAgICAyNDYsIDIyOCwgNDYsIDQ3LCAyNDcsIDk5LCA0NiwgNDcsIDI0NiwgMTQ5LCA0NiwgNDcsIDI0NywgMjAsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMTIsIDQ2LCA0NywgMjQ3LCA4MywgNDYsIDQ3LCAyNDYsIDE4MCwgNDYsIDQ3LCAyNDcsIDUxLCA0NiwgNDcsIAotICAgIDI0NiwgMjQzLCA0NiwgNDcsIDI0NywgMTE0LCA0NiwgNDcsIDI0NiwgMTMwLCA0NiwgNDcsIDI0NywgMSwgNDYsIDQ3LCAKLSAgICAyNDYsIDE5MywgNDYsIDQ3LCAyNDcsIDY0LCA0NiwgNDcsIDI0NiwgMTYxLCA0NiwgNDcsIDI0NywgMzIsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMjQsIDQ2LCA0NywgMjQ3LCA5NSwgNDYsIDQ3LCAyNDYsIDE0NSwgNDYsIDQ3LCAyNDcsIDE2LCA0NiwgNDcsIAotICAgIDI0NiwgMjA4LCA0NiwgNDcsIDI0NywgNzksIDQ2LCA0NywgMjQ2LCAxNzYsIDQ2LCA0NywgMjQ3LCA0NywgNDYsIDQ3LCAKLSAgICAyNDYsIDIzOSwgNDYsIDQ3LCAyNDcsIDExMCwgNDYsIDQ3LCAyNDYsIDEzNywgNDYsIDQ3LCAyNDcsIDgsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMDAsIDQ2LCA0NywgMjQ3LCA3MSwgNDYsIDQ3LCAyNDYsIDE2OCwgNDYsIDQ3LCAyNDcsIDM5LCA0NiwgNDcsIAotICAgIDI0NiwgMjMxLCA0NiwgNDcsIDI0NywgMTAyLCA0NiwgNDcsIDI0NiwgMTUyLCA0NiwgNDcsIDI0NywgMjMsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMTUsIDQ2LCA0NywgMjQ3LCA4NiwgNDYsIDQ3LCAyNDYsIDE4MywgNDYsIDQ3LCAyNDcsIDU0LCA0NiwgNDcsIAotICAgIDI0NiwgMjQ2LCA0NiwgNDcsIDI0NywgMTE3LCA0NiwgNDcsIDI0NiwgMTI4LCA0NiwgNDcsIDI0NiwgMjU1LCA0NiwgNDcsIAotICAgIDI0NiwgMTkxLCA0NiwgNDcsIDI0NywgNjIsIDQ2LCA0NywgMjQ2LCAxNTksIDQ2LCA0NywgMjQ3LCAzMCwgNDYsIDQ3LCAKLSAgICAyNDYsIDIyMiwgNDYsIDQ3LCAyNDcsIDkzLCA0NiwgNDcsIDI0NiwgMTQzLCA0NiwgNDcsIDI0NywgMTQsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMDYsIDQ2LCA0NywgMjQ3LCA3NywgNDYsIDQ3LCAyNDYsIDE3NCwgNDYsIDQ3LCAyNDcsIDQ1LCA0NiwgNDcsIAotICAgIDI0NiwgMjM3LCA0NiwgNDcsIDI0NywgMTA4LCA0NiwgNDcsIDI0NiwgMTM1LCA0NiwgNDcsIDI0NywgNiwgNDYsIDQ3LCAKLSAgICAyNDYsIDE5OCwgNDYsIDQ3LCAyNDcsIDY5LCA0NiwgNDcsIDI0NiwgMTY2LCA0NiwgNDcsIDI0NywgMzcsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMjksIDQ2LCA0NywgMjQ3LCAxMDAsIDQ2LCA0NywgMjQ2LCAxNTAsIDQ2LCA0NywgMjQ3LCAyMSwgNDYsIDQ3LCAKLSAgICAyNDYsIDIxMywgNDYsIDQ3LCAyNDcsIDg0LCA0NiwgNDcsIDI0NiwgMTgxLCA0NiwgNDcsIDI0NywgNTIsIDQ2LCA0NywgCi0gICAgMjQ2LCAyNDQsIDQ2LCA0NywgMjQ3LCAxMTUsIDQ2LCA0NywgMjQ2LCAxMzEsIDQ2LCA0NywgMjQ3LCAyLCA0NiwgNDcsIAotICAgIDI0NiwgMTk0LCA0NiwgNDcsIDI0NywgNjUsIDQ2LCA0NywgMjQ2LCAxNjIsIDQ2LCA0NywgMjQ3LCAzMywgNDYsIDQ3LCAKLSAgICAyNDYsIDIyNSwgNDYsIDQ3LCAyNDcsIDk2LCA0NiwgNDcsIDI0NiwgMTQ2LCA0NiwgNDcsIDI0NywgMTcsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMDksIDQ2LCA0NywgMjQ3LCA4MCwgNDYsIDQ3LCAyNDYsIDE3NywgNDYsIDQ3LCAyNDcsIDQ4LCA0NiwgNDcsIAotICAgIDI0NiwgMjQwLCA0NiwgNDcsIDI0NywgMTExLCA0NiwgNDcsIDI0NiwgMTM4LCA0NiwgNDcsIDI0NywgOSwgNDYsIDQ3LCAKLSAgICAyNDYsIDIwMSwgNDYsIDQ3LCAyNDcsIDcyLCA0NiwgNDcsIDI0NiwgMTY5LCA0NiwgNDcsIDI0NywgNDAsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMzIsIDQ2LCA0NywgMjQ3LCAxMDMsIDQ2LCA0NywgMjQ2LCAxNTMsIDQ2LCA0NywgMjQ3LCAyNCwgNDYsIDQ3LCAKLSAgICAyNDYsIDIxNiwgNDYsIDQ3LCAyNDcsIDg3LCA0NiwgNDcsIDI0NiwgMTg0LCA0NiwgNDcsIDI0NywgNTUsIDQ2LCA0NywgCi0gICAgMjQ2LCAyNDcsIDQ2LCA0NywgMjQ3LCAxMTgsIDk3LCAyMTUsIDU4LCA4MCwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIAotICAgIDIsIDUyLCA2NywgOTEsIDE0MCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCA1MiwgODAsIDIsIDY3LCA5MSwgNDMsIDQ0LCA1MiwgCi0gICAgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgMTMwLCAxNDAsIDUyLCA4MCwgMjQzLCAyNTEsIAotICAgIDEzMCwgOTcsIDUyLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjQ2LCAxMTIsIDgwLCAyLCAyMDMsIDkxLCAyMTQsIDE1MywgODAsIAotICAgIDIsIDIwMywgOTEsIDIxNCwgMTUzLCAyMTUsIDIxMiwgNzUsIDI0NiwgMTEyLCAyMTUsIDIxMiwgNzUsIDE0MCwgNTIsIDI0OCwgCi0gICAgMTY1LCA3NSwgOTcsIDUyLCAyNDgsIDE2NSwgNzUsIDE0MCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgOTcsIDIxNSwgMjEyLCAKLSAgICAyNDgsIDE2NSwgNzUsIDk3LCAyMTUsIDU4LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCA5NywgODAsIDIsIDI0NiwgMTI2LCAKLSAgICAyMTgsIDE0MSwgMjE0LCAxNTMsIDgwLCAyMTYsIDQzLCAxMzAsIDI0NiwgMTEyLCA4MCwgMjE2LCA0MywgMTMwLCA5NywgODAsIAotICAgIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgCi0gICAgODAsIDIsIDIxNywgNzgsIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIAotICAgIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDE0MCwgMjU0LCAzLCA5NywgMjU0LCAzLCAxNDAsIDUyLCAyNTQsIDMsIDk3LCAKLSAgICA1MiwgMjU0LCAzLCAxNDAsIDgwLCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCA5NywgODAsIDIxNiwgNDMsIDg1LCAyNDgsIDAsIAotICAgIDE0MCwgODAsIDI0MywgMjUxLCAyNTIsIDE0OSwgMjE2LCA0MywgODUsIDI0OCwgMCwgOTcsIDgwLCAyNDMsIDI1MSwgMjUyLCAKLSAgICAxNDksIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDIyOCwgNjEsIDIxMiwgOSwgMjIsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgCi0gICAgMjI4LCA2MSwgMjQ1LCAyMjgsIDIyLCAyMTksIDMwLCAyMTIsIDksIDc1LCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyLCAxMDMsIAotICAgIDIyOCwgNjEsIDI0NSwgMjI4LCA4MCwgMiwgMTAzLCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDIsIDEwMywgMjE5LCAzMCwgCi0gICAgMjEyLCA5LCA4MCwgMiwgMTAzLCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyMiwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMjgsIAotICAgIDYxLCAyNDUsIDIyOCwgODAsIDIyLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgMjIsIAotICAgIDIxOSwgMzAsIDIxMiwgOSwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgODAsIDIyLCAyMjgsIDYxLCAyMTIsIDksIDc1LCAyMjIsIAotICAgIDIzMSwgMjQ4LCA3LCAyNDksIDEzMywgMjQ0LCAxODMsIDI0OCwgNiwgMjQ0LCAxODMsIDI0OCwgNywgMjQ5LCAxMzMsIDIyMiwgCi0gICAgMjMxLCAyNDgsIDYsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjI4LCAKLSAgICA2MSwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyNDQsIDE4MywgMjQ4LCA3LCAyNDksIAotICAgIDEzMywgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMjIsIDIzMSwgMjQ4LCA3LCAyNDksIDEzMywgMjE5LCAzMCwgMjQ1LCAKLSAgICAyMjgsIDc1LCAyMjgsIDYxLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyMTIsIDksIDc1LCAyMjgsIDYxLCAKLSAgICAyMTIsIDksIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMTIsIDM2LCA4MCwgMjI1LCAxMCwgMjQ3LCAKLSAgICAyMDMsIDIyMiwgMjU0LCA4MCwgMjI1LCAxMCwgOTcsIDIxNiwgMTg5LCAyNDksIDk4LCAyMTQsIDE1MiwgODAsIDIyNSwgMTAsIAotICAgIDk3LCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjQ2LCAxMTEsIDgwLCAyMjUsIDEwLCAyNDYsIDExMiwgMjE2LCAxODksIDI0OSwgCi0gICAgOTgsIDIzMywgNDMsIDgwLCAyMjUsIDEwLCAyNDYsIDExMiwgMjE2LCAxODksIDI0OSwgOTgsIDIyMiwgMjQ0LCAyMjIsIAotICAgIDI0NywgMjU0LCAzNCwgMjUwLCAxMCwgNzUsIDIzMywgNDYsIDI1NCwgMzQsIDI1NCwgOTYsIDc1LCAyMTYsIDE1LCAyNTQsIAotICAgIDM0LCAyNTQsIDk2LCA3NSwgMjUxLCAxODMsIDI1NCwgMzQsIDI1NCwgOTYsIDc1LCAyMTYsIDE1LCAyNTQsIDM0LCAyNTAsIAotICAgIDEwLCA4MCwgMiwgMjMwLCAxODYsIDIxNiwgMTUsIDI1NCwgMzQsIDI1NCwgOTYsIDgwLCAyLCAyMjUsIDI1LCAyMzIsIDExNCwgCi0gICAgNDQsIDIyMCwgMTU0LCAyNTAsIDEwLCA3NSwgMjMyLCAxMTQsIDQzLCAyMjAsIDE1NCwgMjU0LCA5NiwgNzUsIDI1NCwgOTYsIAotICAgIDI1MCwgOCwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDI1MCwgOCwgMjUwLCA0NCwgNzUsIDk3LCA4MCwgNzIsIDIxOSwgMjUzLCAKLSAgICAxNDAsIDc1LCAxNDAsIDgwLCA3MiwgMjE5LCAyNTMsIDk3LCA3NSwgMjE5LCAyNTMsIDk3LCA4MCwgNzIsIDE0MCwgNzUsIAotICAgIDk3LCA4MCwgMiwgOTYsIDUxLCAxNDAsIDgwLCAyLCA5NiwgNTEsIDk3LCA4MCwgMjE2LCAxNDAsIDIxMSwgMTc4LCA0MywgCi0gICAgNDQsIDgwLCAyMTYsIDE0MCwgNCwgMjUwLCA0MywgMjE0LCAxNTMsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgNCwgMjUwLCAKLSAgICA0MywgNDMsIDI1MiwgMTQ3LCAxMjAsIDQ0LCAyNTIsIDE0NywgMTI0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgMTI0LCA0NCwgCi0gICAgMjUyLCAxNDcsIDEyMCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0NCwgMTI0LCAyNTIsIDE0NywgNDMsIDI0MiwgNSwgMTIwLCAKLSAgICAyNTIsIDE0NywgNDMsIDEyNCwgMjUyLCAxNDcsIDQ0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgMTIwLCA0NCwgMjUyLCAxNDcsIAotICAgIDEyMCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0NCwgMTI0LCAyNTIsIDE0NywgNDQsIDI0MiwgNSwgNDMsIDI1MiwgMTQ3LCAKLSAgICAxMjQsIDQ0LCAyNTIsIDE0NywgMTI0LCAyNDIsIDUsIDEyMCwgMjUyLCAxNDcsIDQzLCAxMjQsIDI1MiwgMTQ3LCA0MywgCi0gICAgMjQyLCA1LCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjE2LCA0MywgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIAotICAgIDE0NywgMTIwLCAyMTYsIDQzLCAxMzAsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0NCwgMjE2LCA0MywgMTMwLCAKLSAgICAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDIxNiwgNDMsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgCi0gICAgMTQ3LCAxMjQsIDIxNiwgNDMsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjE2LCA0MywgMTMwLCAyMTQsIAotICAgIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDIxNiwgNDMsIDEzMCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAKLSAgICAxNDcsIDQzLCAyMTYsIDQzLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCAyNDMsIDI1MSwgMTMwLCA5NywgCi0gICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgCi0gICAgNDQsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0NCwgMjQzLCAyNTEsIDEzMCwgMTQwLCAKLSAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDI0MywgMjUxLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIAotICAgIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjQzLCAyNTEsIDEzMCwgMjQ2LCAKLSAgICAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyNDMsIDI1MSwgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAotICAgIDEyMCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgCi0gICAgMTQ3LCA0MywgMjUyLCAzOCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCA5NywgMjQyLCA2LCAyLCAKLSAgICAyNTIsIDE0NywgMTIwLCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAyNDYsIDExMiwgMjQyLCA2LCAKLSAgICAyLCAyNTIsIDE0NywgNDMsIDI1MiwgMzgsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgMTQwLCAKLSAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDcyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNjMsIDE0MCwgCi0gICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCA5NywgMjQyLCAKLSAgICA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE2MywgOTcsIDI0MiwgNiwgCi0gICAgMiwgMjUyLCAxNDcsIDEyNCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDE0MCwgMjQyLCA2LCAyLCAKLSAgICAyNTIsIDE0NywgMTIwLCA3MiwgMjAwLCAyNDgsIDE2NCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDI1MiwgNTEsIAotICAgIDIwMCwgMjQ4LCAxNjQsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDcyLCAyMDAsIDI0OCwgMTY0LCA5NywgMjQyLCAKLSAgICA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNTIsIDUxLCAyMDAsIDI0OCwgMTY0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIAotICAgIDE0NywgNDMsIDI1MiwgMzgsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgMjQ2LCAxMTIsIDI0MiwgCi0gICAgNiwgMiwgMjUyLCAxNDcsIDQzLCAyNTIsIDM4LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDQ0LCAKLSAgICA1MiwgODAsIDIsIDIyMiwgMTg1LCAyNDEsIDI0MiwgMjQ1LCAxMDYsIDUsIDcyLCA5NywgNzUsIDIxNiwgOTAsIDIyNiwgCi0gICAgMTcyLCA3MiwgOTcsIDc1LCAxNDAsIDgwLCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDk3LCA4MCwgNzIsIDIxNiwgOTAsIAotICAgIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIzMywgMjEsIDcyLCAxNDAsIDc1LCAxNDAsIDgwLCAKLSAgICAyMTYsIDE0MCwgMjMzLCAyMCwgMjQyLCAxMzcsIDcyLCA5NywgNzUsIDIxOCwgNjUsIDcyLCA5NywgNzUsIDE0MCwgODAsIAotICAgIDIxNiwgMTQwLCAyMTgsIDY0LCAyMTgsIDIzLCA3MiwgMTQwLCA3NSwgNDMsIDI0NCwgOTksIDIxNywgNzgsIDQ0LCAyNDQsIAotICAgIDk5LCAyMTcsIDc4LCAxMjAsIDI0NCwgOTksIDIxNywgNzgsIDEyNCwgMjQ0LCA5OSwgMjE3LCA3OCwgMjE1LCAyMTIsIDY3LCAKLSAgICAyNTIsIDE0OSwgMjQ4LCA2OCwgMjEwLCAxNjAsIDE4OSwgMjE4LCAyNDQsIDIxMCwgMTYwLCAxODksIDIxNSwgNDksIDI0OSwgCi0gICAgMjM0LCA0MywgNzEsIDI0OSwgMTA3LCAxMjcsIDQ0LCA3MSwgMjQ5LCAxMDcsIDEyNywgNDMsIDcxLCAyMjYsIDcsIDQ0LCAKLSAgICA3MSwgMjI2LCA3LCAyMTAsIDE2MCwgMTg5LCA0MywgMjM2LCAyMiwgMTI3LCAyMTAsIDE2MCwgMTg5LCA0NCwgMjM2LCAyMiwgCi0gICAgMTI3LCAyMTAsIDE2MCwgMTg5LCA0MywgMjUxLCAyNTAsIDEyNywgMjEwLCAxNjAsIDE4OSwgNDQsIDI1MSwgMjUwLCAxMjcsIAotICAgIDQzLCA0MiwgMjUxLCAxNjYsIDIsIDIxNCwgMTgzLCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMTQsIDE4MywgNDMsIDQyLCAKLSAgICAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgNywgMjE2LCAxNSwgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIAotICAgIDIxNiwgMTE2LCAyMzYsIDcsIDI1MSwgMTgzLCAyNDksIDE2OCwgNDMsIDQyLCAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgCi0gICAgNywgMjUxLCAxODMsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMTYsIDExNiwgMjM2LCA3LCAyMTYsIDE1LCAKLSAgICAyNDksIDE2OCwgNDMsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMiwgMjQ3LCAxMjgsIDQ0LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIsIAotICAgIDI0NywgMTI4LCA0MywgMjU0LCAzNCwgMjMzLCAyMSwgMTI3LCA0NCwgMjU0LCAzNCwgMjQyLCAxMzcsIDEyNywgNTIsIDQzLCAKLSAgICAyNTQsIDM0LCAyNDIsIDEzNywgMTI3LCA1MiwgNDQsIDI1NCwgMzQsIDIzMywgMjEsIDEyNywgNDMsIDg1LCAyMTYsIDcsIAotICAgIDIyMCwgNTUsIDEyNywgNDQsIDg1LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjQ2LCAxMjYsIDI0NCwgMTQzLCA2NywgMjEwLCAKLSAgICAzNSwgMjMyLCAyMTksIDIzMSwgOTMsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjMzLCA1MiwgNDQsIDI1NCwgMTE4LCAyMTQsIAotICAgIDEyLCAyLCAyMTgsIDIzNiwgMjMxLCA5MywgNDQsIDI1NCwgMTE4LCAyLCAyNDcsIDEyOCwgMjU0LCAxMTgsIDIsIDIyMiwgCi0gICAgOTQsIDIzNSwgMjIyLCAyNTUsIDEyLCAyNTQsIDExNywgMjE5LCAxLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIzMywgNTIsIAotICAgIDIxOSwgMSwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMTQsIDE2MywgMjE1LCA5NCwgMjU0LCAxMTcsIDIyMywgNTIsIDI1NCwgCi0gICAgMTE3LCAyNTQsIDExOCwgMiwgMjE0LCAxODMsIDIyMywgNTIsIDI1NCwgMTE4LCAyLCAyMTQsIDE4MywgMjI2LCAyNTIsIAotICAgIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjE0LCAxNjMsIDIyNiwgMjUyLCAyNTQsIDExOCwgMjI2LCAxNzQsIDI0NiwgMTE0LCAKLSAgICAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTIwLCAKLSAgICAyMiwgMjIyLCAyNTQsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAKLSAgICAyMjUsIDEwLCAxMjAsIDIyLCAyMzMsIDUyLCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgCi0gICAgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTI0LCAyMiwgMjIyLCAyNTQsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgCi0gICAgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCAxMjQsIDIyLCAyMzMsIDUyLCAyMzEsIDkzLCAyNTQsIDExOCwgCi0gICAgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgNDQsIDIyLCAyMTQsIDE2MywgMjMxLCAKLSAgICA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDQzLCAyMiwgCi0gICAgMjE0LCAxNjMsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIAotICAgIDEwLCA0NCwgMjIsIDI0NiwgMTE0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCAKLSAgICA3LCA4MCwgMjI1LCAxMCwgNDMsIDIyLCAyNDYsIDExNCwgMjIzLCA1MiwgMjQ1LCAxNjAsIDIyMCwgMTI5LCAyNDUsIDE2MCwgCi0gICAgMjIwLCAxMzAsIDIsIDIyNiwgMTI3LCAyNDUsIDE2MCwgMjIwLCAxMzAsIDIsIDQsIDI1MCwgNDQsIDQ4LCAyNDUsIDE2MCwgCi0gICAgMjIwLCAxMzAsIDIsIDQ0LCA4MCwgNDgsIDI0NSwgMTYwLCAyMjAsIDEzMCwgMiwgNDMsIDgwLCA0OCwgMjUwLCA0NCwgMiwgCi0gICAgMjAzLCAxMzAsIDM3LCA2NywgMTMwLCAzNywgMjI2LCAxMSwgMzcsIDIyMywgNTMsIDIxOSwgNDgsIDM3LCAyMjUsIDE3NCwgCi0gICAgMjUwLCA0NCwgMjQ3LCAxODEsIDI1MSwgODYsIDIwMywgMjUyLCAxNDksIDIyLCAyMTYsIDE1LCAxNjMsIDI0NywgMTgxLCAKLSAgICAyNTEsIDg2LCA2NywgMTMwLCAyNTAsIDQ0LCAyLCAyMTgsIDI1LCAyMTEsIDE3OCwgMzcsIDI1NCwgOTUsIDI0NywgMTc3LCAKLSAgICA1MCwgMTIwLCA4MCwgMjE2LCAxNDAsIDI1MCwgNDMsIDM3LCA3MSwgMjUxLCAxMjEsIDM3LCAyNTEsIDEyMSwgMzcsIDIzMywgCi0gICAgMjAsIDM3LCAyNDIsIDEzNiwgMjUwLCA0NCwgMiwgNCwgMjUwLCA0NCwgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCAKLSAgICAyNTAsIDQ0LCAyLCAxMTMsIDIwMywgMjE4LCA5MywgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCA5MiwgMjIyLCAyMzEsIAotICAgIDI0OCwgNywgMjE5LCA5NywgOTIsIDI0NCwgMTgzLCAyNDgsIDcsIDIxOSwgOTcsIDkyLCAyNTMsIDIyNCwgOTIsIDQsIDI1MCwgCi0gICAgNDMsIDkyLCAyMTgsIDIzNiwgMTEzLCAyMzUsIDcxLCAyMTgsIDIzNCwgMjE1LCAyMjcsIDIsIDU5LCA0OCwgMjE1LCAyMjcsIAotICAgIDIsIDIxNCwgMTgzLCAyMjIsIDk0LCAyMzYsIDcsIDIxNSwgMjI2LCAyMTUsIDIyNywgMiwgMjIwLCAxMzYsIDI1MywgMjE1LCAKLSAgICAyNTEsIDE4MiwgNDQsIDIxNSwgMjI3LCA3MiwgNDMsIDIxNSwgMjI2LCA0MywgMjE1LCAyMjcsIDI1MiwgMzgsIDY3LCAxMzAsIAotICAgIDY3LCAyNTIsIDE0OSwgMjUyLCAzOCwgNDQsIDIxNSwgMjI2LCAyNTEsIDE3MywgMiwgNDMsIDE2MywgMjUxLCAyMjksIDI1MSwgCi0gICAgMTczLCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgODUsIDI1MSwgMTcyLCAzMCwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDMwLCAyLCAKLSAgICA0NCwgMTYzLCAyNTEsIDIyOSwgNzEsIDI0MCwgMjQzLCA4NSwgMjQwLCAyNDMsIDQzLCAyMTEsIDI0NCwgMjQ0LCAxNDMsIAotICAgIDQ0LCAyMTEsIDI0NCwgMjQ0LCAxNDMsIDQzLCA1MiwgMjExLCAyNDQsIDI0NCwgMTQzLCA0NCwgNTIsIDIxMSwgMjQ0LCAKLSAgICAyNDQsIDE0MywgMjM1LCAyNTUsIDIzNSwgMjQxLCAyMTYsIDExMywgMTE1LCAyMzUsIDI0MSwgMjM1LCAyNDIsIDIyOSwgCi0gICAgMTA3LCAyLCA2NywgMTMwLCAyNDYsIDEyMCwgMjMwLCA5MiwgNDIsIDIsIDI0OSwgMTg5LCAyMjYsIDEzMSwgMjM1LCAyNTMsIAotICAgIDI1MywgMjQ1LCAyMTksIDIyMSwgMjI0LCAxODMsIDI0NSwgMTA2LCA1LCAyMiwgMjE5LCA5OSwgMjI2LCAxMSwgMjQ1LCAKLSAgICAxMDYsIDUsIDIyLCAyMTksIDk5LCAyMjYsIDEyLCAyLCAyMTYsIDkwLCA0OCwgMjQwLCAxMTEsIDIxNiwgNDMsIDIyLCAyMTksIAotICAgIDk5LCAyMjYsIDExLCAyNDIsIDE5MCwgMjE4LCAxNTcsIDIxNiwgMTg2LCAyNDYsIDExMywgMjE1LCAyMjcsIDIsIDQzLCAKLSAgICAxNjMsIDI1MSwgMjI5LCAyNDYsIDExMywgMjE1LCAyMjcsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCA4NSwgMjQ4LCAxLCAyLCAKLSAgICAxMjQsIDc1LCA4NSwgMjMyLCAxMTAsIDcxLCAyNTAsIDQ0LCAyLCAxMjQsIDc1LCA4NSwgMjUwLCA0NCwgMiwgMTI0LCA3NSwgCi0gICAgMjQ1LCA5MywgNzEsIDIxOCwgMjM2LCAyNDUsIDkzLCA4NSwgMjE4LCAyMzYsIDI0NSwgOTMsIDcxLCAyNDgsIDAsIDI0NSwgCi0gICAgOTMsIDg1LCAyNDgsIDAsIDI0NSwgOTMsIDcxLCAyNTAsIDQzLCAyNDUsIDkzLCA4NSwgMjUwLCA0MywgMjIyLCAxMzQsIAotICAgIDIyMywgNTMsIDIxOSwgNDksIDIyNiwgMTcxLCAyMTksIDQ5LCAyLCAyMjYsIDEyNywgMjIzLCA1MywgMjE5LCA0OSwgMiwgCi0gICAgMjAzLCA5MSwgMjUyLCAxLCAyMTksIDQ4LCAyNTIsIDEsIDIyMywgNTMsIDIxOSwgNDgsIDUyLCAyMjUsIDI1LCAyMTUsIAotICAgIDIxMiwgMjI1LCAyNSwgMjMzLCA0OCwgMjQ5LCA5OSwgMjU0LCAxMTgsIDEyNywgMjIyLCAyNTAsIDI0OSwgOTksIDI1NCwgCi0gICAgMTE4LCAxMjcsIDIxNiwgNzksIDIzMCwgMTg0LCAyMzAsIDI5LCAzNywgNTksIDIyNiwgMTcxLCAyMzAsIDI5LCAzNywgOTYsIAotICAgIDIyNiwgMTcxLCAyMzAsIDI5LCAzNywgMzAsIDIyNiwgMTcxLCAyMzAsIDI5LCAyMTQsIDE3NiwgMjI2LCAxNzIsIDIsIDI0NywgCi0gICAgMTI4LCAyMzAsIDI5LCAyMTQsIDE3NiwgMjI2LCAxNzIsIDIsIDIyNSwgMjUsIDIzMCwgMjksIDQyLCAyMzUsIDIwNiwgMjI2LCAKLSAgICAxNzEsIDIzMCwgMjksIDQyLCAyMTQsIDE3NiwgMjI2LCAxNzEsIDExMywgMjMyLCAxNTIsIDIyLCAyMjYsIDE3MSwgMTEzLCAKLSAgICAyMzIsIDE1MiwgMTc3LCAyMjYsIDE3MSwgMjMwLCAyOSwgMzAsIDIyNiwgMTcxLCAyMzAsIDE1OSwgMTEzLCAyMTgsIDQ0LCAKLSAgICAyMTgsIDQyLCAyLCAyMzUsIDIxOCwgMjI0LCAyNywgMjM1LCAyMTksIDIyNiwgMTcxLCAyNDQsIDEwNywgMjI2LCAzLCAyMzUsIAotICAgIDIxOCwgMjM1LCAyMTksIDIsIDUyLCA5MSwgMjM1LCAyMTksIDI1MywgMTgxLCAyLCAyMTksIDk3LCAyNTAsIDQwLCAyNDMsIAotICAgIDIzMywgMjU0LCA5NiwgMjM1LCAyMTYsIDIzMiwgMjIwLCAyMzUsIDIxNywgMiwgMjIzLCAxMTgsIDIyNSwgMjQxLCAyNTQsIAotICAgIDEwLCAyMjUsIDQsIDIzMiwgMjIwLCAyMzUsIDIxNywgMiwgMjIwLCAxNTQsIDIyNSwgMjQxLCAyNTQsIDEwLCAyMjUsIDQsIAotICAgIDIzMiwgMjIwLCAyMzUsIDIxNywgMjI4LCA1NywgMjM2LCAxLCAyMTYsIDE5NywgMjI1LCA0LCAyMzUsIDIxOSwgMjU0LCAxMCwgCi0gICAgMTE2LCAyMjUsIDE0LCAyMjYsIDE3MSwgMjI0LCAyMSwgMjM1LCAyMTksIDIyNiwgMTcxLCAyMzUsIDIxOSwgMiwgMTQwLCAKLSAgICA4MCwgMiwgMTAzLCAyMzUsIDIxOSwgMiwgMzAsIDUwLCAyMzUsIDIxOSwgMiwgMjM1LCAyMDUsIDIzNSwgMjE5LCAyLCAyMTQsIAotICAgIDE3NSwgMjM1LCAyMTksIDIsIDIyNiwgMTI3LCAyMzUsIDIxOSwgMiwgMjE0LCAxODMsIDIzNSwgNzIsIDIzMywgOTEsIDQzLCAKLSAgICAyMTUsIDIyNywgMjI2LCAxNzEsIDIxMCwgMTYwLCAxODksIDIyMSwgMjAzLCAyNDksIDIxNywgMjEwLCAxNjAsIDE4OSwgCi0gICAgMjIxLCAyMDMsIDIyNSwgNTksIDIxMCwgMTYwLCAxODksIDIyMSwgMjAzLCAyMjQsIDE3OSwgOTYsIDUsIDIsIDQsIDI1MCwgCi0gICAgNDQsIDQ4LCA5NiwgNSwgMiwgMjUwLCAzOSwgMjU1LCAyNCwgNDgsIDk2LCA1LCAyLCAyMTYsIDkwLCA0OCwgOTYsIDUsIDIsIAotICAgIDU5LCA1MSwgOTYsIDUsIDIsIDIxNiwgOTAsIDUxLCA5NiwgNSwgMiwgMjE4LCA2NiwgMTA1LCA5NiwgNSwgMiwgODUsIDIxNSwgCi0gICAgMjI2LCAyMzAsIDE4NywgNSwgMiwgMjQ5LCAyMjgsIDQ4LCAyMzAsIDE4NywgNSwgMiwgNTksIDUxLCAyMzAsIDE4NywgNSwgCi0gICAgMiwgMjQ0LCAxODMsIDI0NywgMTI2LCAyMzAsIDE4NywgNSwgMiwgMjIyLCAyMzEsIDI0NywgMTI2LCA5NiwgNSwgMjM2LCA3LCAKLSAgICA0MywgMTYzLCAyNTAsIDQzLCA5NiwgNSwgMjM2LCA3LCA0NCwgMTYzLCAyNTAsIDQzLCAyMTMsIDI1NCwgMTc3LCAyNDksIAotICAgIDEzOSwgMjI0LCAxODMsIDIzMCwgODksIDUsIDIsIDU5LCA0OCwgMjMwLCA4OSwgNSwgMiwgMjE0LCAxODMsIDIyMCwgMTUxLCAKLSAgICAyMjQsIDE4NCwgMiwgMjUxLCAxODMsIDI1MCwgNywgMjE5LCA3OSwgMjI0LCAxODMsIDIzMCwgODksIDUsIDIzNiwgNywgNDMsIAotICAgIDE2MywgMjUwLCA0MywgMjMwLCA4OSwgNSwgMjM2LCA3LCA0NCwgMTYzLCAyNTAsIDQzLCAzNywgMjMwLCA4OSwgNSwgMiwgCi0gICAgMjUwLCAzOSwgMjU1LCAyMywgMjMwLCA4OSwgNSwgMjM2LCA3LCA1MiwgMjUwLCA0MywgMzcsIDI0NywgMTc3LCA1MCwgOTYsIAotICAgIDUsIDIzNiwgNywgMjE1LCAyMjYsIDIzMCwgMTg3LCA1LCAyMzYsIDcsIDIxNSwgMjI2LCAyMzAsIDg5LCA1LCAyMzYsIDcsIAotICAgIDIxNSwgMjI2LCAyMzUsIDIxMywgMjI0LCAxODMsIDIyMiwgMjQ1LCAyMzUsIDIxMywgMjI0LCAxODMsIDIxMCwgMTYwLCAKLSAgICAxODksIDIyMywgOTMsIDI0OSwgMjE3LCAyNTQsIDE0MiwgMTc3LCAyNDksIDE3MywgMjM1LCAyMDYsIDIsIDI0NywgMTI4LCAKLSAgICAyMTQsIDE3NiwgMiwgMjMwLCAxODcsIDUwLCAyMTQsIDE3NiwgMiwgMjI2LCAxMjcsIDIzNSwgMjA2LCAyLCAyMjYsIDEyNywgCi0gICAgMjM1LCAyMDYsIDIsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMjE0LCAxNzYsIDIsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjE0LCAKLSAgICAxNzYsIDcyLCAyMzUsIDIwNSwgMjM1LCAyMDYsIDcyLCAyMTQsIDE3NSwgMjE0LCAxNzYsIDcyLCAyNTIsIDE0OSwgNzIsIAotICAgIDIzNSwgMjA1LCAyMzUsIDIwNiwgNzIsIDI1MiwgMTQ5LCA3MiwgMjE0LCAxNzUsIDIxNCwgMTc2LCAyNTIsIDM4LCAyMiwgCi0gICAgMjM1LCA3MSwgMiwgMjE0LCAxNzUsIDIzNSwgMjA2LCAyNTIsIDM4LCAyMiwgMjM1LCA3MSwgMiwgMjM1LCAyMDUsIDI1MCwgCi0gICAgOCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM1LCAyNTAsIDgsIDIzNSwgMjA2LCAyLCAyMjAsIDEzNSwgNTIsIDQyLCAyMzUsIAotICAgIDIwNSwgNTIsIDQyLCAyMTQsIDE3NSwgMjUwLCA4LCAyMTQsIDE3NiwgMiwgMjIwLCAxMzYsIDIyLCAyMTksIDc5LCAyMjQsIAotICAgIDE4MywgMjMyLCAxNTIsIDIyLCAyLCA1OSwgNDgsIDIzMiwgMTUyLCAxNzcsIDIsIDU5LCA0OCwgNTIsIDIzMiwgMTUyLCAKLSAgICAyNTQsIDEyNiwgNTIsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMTEzLCAyMzUsIDIwNywgMjMyLCAxNTIsIDI1NCwgMTI2LCAxMTMsIAotICAgIDIzNSwgMjA3LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIxOSwgODcsIDIzMywgOTEsIDIyNiwgMTYyLCAyMTksIDg3LCAyMzMsIAotICAgIDkxLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDE3NywgMjI2LCAxMjUsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDIyLCAKLSAgICAyLCAyMzAsIDIyOSwgMjE4LCAxNDEsIDIzMiwgMTUyLCAxNzcsIDIsIDIzMCwgMjI5LCAyMTgsIDE0MSwgMjMyLCAxNTIsIAotICAgIDIyLCAyLCAyMDMsIDI0OCwgMTY0LCAyMzIsIDE1MiwgMTc3LCAyLCAyMDMsIDI0OCwgMTY0LCAyMzIsIDE1MiwgMjIsIDIsIAotICAgIDUyLCAyMjYsIDEyNywgMjMyLCAxNTIsIDIyLCAyLCAyMTQsIDE4MywgMjMyLCAxNTIsIDIyLCAyLCA1MiwgMjE0LCAxODMsIAotICAgIDQsIDIxMywgMjUxLCAyLCAyMTQsIDE4MywgMjMyLCAxNTIsIDE3NywgMiwgNTIsIDIyNiwgMTI3LCAyMzIsIDE1MiwgMTc3LCAKLSAgICAyLCA1MiwgMjE0LCAxODMsIDIxMCwgMTYwLCAxODksIDI0NywgMTM3LCAyNTQsIDg3LCAyMTAsIDE2MCwgMTg5LCAyMjMsIAotICAgIDE1MSwgMjU0LCA4NywgMjQ1LCAxMDYsIDUsIDIsIDU5LCA1MSwgMjQwLCAxMTEsIDIsIDU5LCA0OCwgMjE1LCAyMTIsIDIwMywgCi0gICAgMjUyLCAxNDksIDIsIDUyLCA2NywgOTEsIDIxNSwgMjEyLCAyMDMsIDI1MiwgMTQ5LCAyLCAyMTUsIDIxMiwgNjcsIDkxLCAKLSAgICAyMTYsIDkwLCAyMjYsIDE3MiwgMiwgNTksIDQ4LCAyMTYsIDkwLCAyMjYsIDE3MiwgMiwgMjIyLCAyMzEsIDI0NywgMTI2LCAKLSAgICAyMTksIDE2NCwgMjMwLCAxODcsIDIxOSwgMTYzLCAyNDksIDIwNywgMiwgNTksIDQ4LCAyNDUsIDEwNiwgMiwgMjUzLCAyMjQsIAotICAgIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDIsIDI1MCwgMzksIDI1NSwgMjMsIDI1NCwgNTYsIDEyOCwgMTc3LCAxMjgsIDExMiwgCi0gICAgMjQ1LCAxMDYsIDUsIDcyLCA5NiwgNTAsIDk2LCA1LCA3MiwgMjQ1LCAxMDYsIDUwLCAyNDUsIDEwNiwgNSwgNzIsIDIxNiwgCi0gICAgOTAsIDIyNiwgMTcxLCA1MiwgMjQ5LCAyMzUsIDI0NSwgMTA3LCAxMTMsIDI0OSwgMjAyLCAyNDUsIDEwNiwgMjE5LCAxNzgsIAotICAgIDEzNCwgMjQ5LCAyMDIsIDI0NSwgMTA2LCAyMTksIDE3OCwgMjQ1LCAxMDYsIDUsIDIsIDExMywgMTcwLCA3MiwgMjIsIDExMywgCi0gICAgMTcwLCA1MSwgMjQ1LCAxMDIsIDIsIDI0NCwgMTksIDE3MCwgNDgsIDIzMywgMjEsIDIsIDI1MCwgNDQsIDIzNSwgMjIyLCAKLSAgICAyNDIsIDEzNywgMiwgMjUwLCA0NCwgMjM1LCAyMjIsIDIzMywgMjEsIDIsIDIyNCwgMTYsIDE2NCwgNDgsIDI0MiwgMTM3LCAKLSAgICAyLCAyMjQsIDE2LCAxNjQsIDQ4LCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIDEyOCwgMTEyLCAyNDIsIDEzNywgMTc3LCAyMTksIAotICAgIDk5LCAxMjgsIDExMiwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCAyMzUsIDIyMiwgMjQyLCAKLSAgICAxMzcsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgMjM1LCAyMjIsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgCi0gICAgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIDI0MiwgMTM3LCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAKLSAgICAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDcyLCAyMjIsIDI1NCwgMjQyLCAxMzcsIDE3NywgCi0gICAgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNzIsIDIzMywgNTIsIDIzMywgMjEsIDE3NywgMjU0LCA1NywgMjQyLCAKLSAgICAxMzcsIDE3NywgMjU0LCA1NywgMjMzLCAyMSwgMjIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjQyLCAxMzcsIAotICAgIDIyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDIzMywgMjEsIDIyLCAyMjgsIDU3LCAyNTQsIDU3LCAyNDIsIDEzNywgCi0gICAgMjIsIDIyOCwgNTcsIDI1NCwgNTcsIDIzMywgMjEsIDcyLCAyNDYsIDExOSwgMTI4LCA3MiwgMjQyLCAxMzYsIDI0MiwgMTM3LCAKLSAgICA3MiwgMjQ2LCAxMTksIDEyOCwgNzIsIDIzMywgMjAsIDIzMywgMjEsIDcyLCAyMTksIDE2NCwgMTc3LCAyNDUsIDEwNywgCi0gICAgMjQyLCAxMzcsIDcyLCAyMTksIDE2NCwgMTc3LCAyNDUsIDEwNywgMjMzLCAyMSwgNzIsIDIxOSwgMTY0LCA3MiwgMjQyLCAKLSAgICAxMzYsIDI0MiwgMTM3LCA3MiwgMjE5LCAxNjQsIDcyLCAyMzMsIDIwLCAyMzMsIDIxLCA3MiwgMjQyLCAxMzcsIDcyLCAyNDYsIAotICAgIDExOSwgMjQ1LCAxMDcsIDI0MiwgMTM3LCA3MiwgMjMzLCAyMSwgNzIsIDI0NiwgMTE5LCAyNDUsIDEwNywgMjMzLCAyMSwgCi0gICAgNzIsIDIxOSwgOTksIDEyOCwgNzIsIDI0MiwgMTM3LCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIDI0MiwgMTM3LCA3MiwgMjE5LCAKLSAgICA5OSwgMTI4LCA3MiwgMjMzLCAyMSwgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgCi0gICAgMjMzLCAyMCwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIAotICAgIDE3NywgMjMzLCAyMSwgMiwgNTksIDIzNSwgMjIyLCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzcsIDIsIAotICAgIDU5LCAyMzUsIDIyMiwgMjQ2LCAxMTksIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAyNDYsIDExOSwgMTI4LCAyMTYsIAotICAgIDQzLCAxNzcsIDI0MiwgMTM2LCAyNDYsIDExOSwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDIzMywgMjAsIDI0NiwgCi0gICAgMTE5LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzYsIDIxOSwgMTY0LCAxNzcsIDIzMywgMjAsIDIxOSwgCi0gICAgMTY0LCAxNzcsIDI0MiwgMTM2LCAyMTksIDE2NCwgNzIsIDIzMywgMjEsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOSwgMTY0LCAKLSAgICA3MiwgMjQyLCAxMzcsIDcyLCAyNDUsIDEwNiwgNTAsIDUyLCAyMjksIDk2LCAyMzMsIDIwLCA1MiwgMjI5LCA5NiwgMjQyLCAKLSAgICAxMzYsIDUyLCAyMjksIDk2LCAyMzMsIDIxLCAyLCAyMTQsIDE4MywgMjQyLCAxMzcsIDIyNiwgMTI1LCAyMzMsIDIwLCAyNDIsIAotICAgIDEzNywgMjUyLCAzOCwgMjMzLCAyMCwgMjMzLCAyMSwgMjUwLCA4LCAyNTEsIDg2LCAyNDksIDEwMCwgMjQyLCAxMzcsIDI1MCwgCi0gICAgOCwgMjUxLCA4NiwgMjQ5LCAxMDAsIDIzMywgMjEsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDEsIDcyLCAyMTksIDk5LCAKLSAgICAyNDUsIDEwNywgMjQyLCAxMzcsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDEsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgCi0gICAgMjE5LCA4MCwgMjE2LCAyMDEsIDIzMywgODksIDIxNiwgMjAxLCAyMTksIDgwLCAyMTYsIDIwMiwgMTc3LCAxMjgsIDExMiwgCi0gICAgMjMzLCA4OSwgMjE2LCAyMDIsIDE3NywgMTI4LCAxMTIsIDI0NSwgMTA2LCA1LCAyLCAyNTEsIDExNiwgNDgsIDIyNCwgMjA2LCAKLSAgICA3MiwgMjE5LCAxNTUsIDI0NSwgMTA2LCA1MCwgMjE4LCA1NywgNzIsIDIxOSwgMTU1LCAyNDUsIDEwNiwgNTAsIDIyNCwgCi0gICAgMjA2LCA3MiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjE5LCAxNTUsIDIyOCwgNTcsIAotICAgIDEyOCwgMTEyLCAyMjQsIDIwNiwgNzIsIDI0NSwgMTA2LCA1MCwgMjE4LCA1NywgNzIsIDI0NSwgMTA2LCA1MCwgMjI0LCAKLSAgICAyMDYsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMjQsIDIwNiwgNzIsIAotICAgIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAyMjgsIAotICAgIDU3LCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMjgsIDU3LCAyNTQsIDE1NiwgMTI4LCAxMTIsIDUyLCAKLSAgICAyMjQsIDIwNSwgNTIsIDIxOCwgNTYsIDIxOCwgNjUsIDIsIDI0NywgMTI4LCAyMTgsIDIzLCAyLCAyNDcsIDEyOCwgMjE4LCAKLSAgICA2NSwgMiwgOTYsIDUsIDUxLCAyMTgsIDIzLCAyLCA5NiwgNSwgNTEsIDIxOCwgNjUsIDIsIDIzMCwgODksIDUsIDUxLCAyMTgsIAotICAgIDIzLCAyLCAyMzAsIDg5LCA1LCA1MSwgMjE4LCA2NSwgNjQsIDE3NywgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIDIxOCwgCi0gICAgMjMsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyMTgsIDY1LCA2NCwgNzIsIDI0NSwgMTA2LCA1MCwgMjE4LCAKLSAgICAyMywgNjQsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgNjUsIDY0LCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDIxOCwgMjMsIAotICAgIDY0LCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDIxOCwgNjUsIDY0LCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDIzLCAKLSAgICA2NCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCA2NSwgNjQsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCAyMywgCi0gICAgNjQsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgNDIsIDQzLCAyMDQsIDkzLCAyMjYsIDE3MSwgNDIsIDQ0LCAyMDQsIDkzLCAKLSAgICAyMjYsIDE3MSwgMjUwLCA4LCAyMTgsIDY0LCAyNTAsIDgsIDIxOCwgMjIsIDI1MCwgOCwgMjE4LCA2NSwgMTc3LCAxMjgsIAotICAgIDExMiwgMjUwLCA4LCAyMTgsIDIzLCAxNzcsIDEyOCwgMTEyLCAyMTgsIDY1LCA3MiwgMjE4LCAyMiwgMjE4LCAyMywgNzIsIAotICAgIDIxOCwgNjQsIDIxOCwgNjUsIDcyLCAyMTgsIDY0LCAyMTgsIDIzLCA3MiwgMjE4LCAyMiwgMjE4LCAyMywgMjUyLCAzOCwgCi0gICAgMjE4LCA2NCwgMjE4LCAyMywgMjUyLCAzOCwgMjIsIDIzNSwgNzEsIDI1MSwgODYsIDI0OCwgMTY1LCAyLCAyMTgsIDY0LCAKLSAgICAyNDUsIDE3OCwgNjQsIDIyNiwgMTc0LCAyNDYsIDExMSwgMjI1LCA1MSwgMiwgMjE3LCAxMywgMjE2LCAxNCwgMjE1LCAyNDEsIAotICAgIDIzNSwgMjA1LCAyNDQsIDI5LCAyMjgsIDcwLCAyMTksIDI1MywgNDMsIDIxNywgODgsIDIxOSwgMjUzLCAxMjQsIDIxNywgCi0gICAgODgsIDIxOSwgMjUzLCAxMjAsIDIxNywgODgsIDIyNSwgMTc1LCAyLCAyMjIsIDkzLCA2NywgMjUyLCAxNDksIDIxNSwgMjEyLCAKLSAgICA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNDMsIDIxNSwgOTMsIDY3LCAyNTIsIDE0OSwgNTIsIDQzLCAyMTUsIAotICAgIDkzLCA1MiwgNjcsIDI1MiwgMTQ5LCA1MiwgNDMsIDIxNSwgOTMsIDIwMCwgMjQ4LCAxNjUsIDI0MywgMjUxLCA0MywgMjMxLCAKLSAgICA2OCwgNjQsIDUyLCAyMTMsIDIzOSwgMjE5LCAyNTMsIDEyNCwgMjE3LCA4OSwgMiwgMjI2LCAxMjcsIDIxOSwgMjUzLCAxMjAsIAotICAgIDIxNywgODksIDIsIDIxNCwgMTgzLCAyMTksIDI1MywgMTIwLCAyMTcsIDg5LCA3MiwgMjE5LCAyNTMsIDEyNCwgMjE3LCA4OCwgCi0gICAgNTIsIDEyNCwgMjE3LCA4OCwgNTIsIDEyMCwgMjE3LCA4OCwgNTIsIDIxOCwgMTA1LCAyMjgsIDU3LCA1MCwgMjIzLCA1MiwgCi0gICAgNTIsIDIxOCwgMTA1LCAyMjgsIDU3LCA1MCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NywgMTgzLCAyLCAyMjMsIDUyLCAyMjksIAotICAgIDEwNiwgMjE5LCA5NywgNjcsIDIzMiwgMjIwLCAyLCAyNTAsIDQ0LCA0OCwgNjcsIDIzMiwgMjIwLCAyLCAyNTAsIDQ0LCA1MSwgCi0gICAgMTI0LCAyMTcsIDg5LCAyLCAyNTAsIDQ0LCA1MSwgMjI2LCAxMiwgMiwgMjAzLCA5MSwgMjI2LCAxMiwgMiwgMjE2LCA5MCwgCi0gICAgMjI2LCAxNzEsIDIxNSwgMjEyLCA2NywgMjUyLCAxNDksIDI1MSwgMjUyLCAyMjMsIDk0LCAyMTUsIDIxMiwgNjcsIDI1MiwgCi0gICAgMTQ5LCAyLCAyMDMsIDkxLCAyMTUsIDIxMiwgMjQ5LCAyMzUsIDIyNiwgMTcxLCAyMTUsIDIxMiwgMjI5LCA5NiwgMjMzLCAKLSAgICAyMCwgMjE1LCAyMTIsIDIyOSwgOTYsIDI0MiwgMTM2LCAyNDYsIDExOSwgMjE5LCA5OSwgMjMzLCAyMSwgMTc3LCAxMjgsIAotICAgIDExMiwgMjQ2LCAxMTksIDIxOSwgOTksIDI0MiwgMTM3LCAxNzcsIDEyOCwgMTEyLCAyMTUsIDIxMiwgMjE5LCA0OSwgMjUxLCAKLSAgICAyNTIsIDIyMywgOTQsIDIzMywgOTEsIDIxNSwgMjEyLCA2NywgMjUyLCAxNDksIDIyNiwgMTcxLCA1MiwgMjE5LCA0OSwgCi0gICAgMjI2LCAxNzEsIDcxLCA2NywgMTMwLCAyMzAsIDI5LCA3MSwgNjcsIDEzMCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDcxLCA3NSwgCi0gICAgMjI4LCA2MSwgMjEyLCA5LCA3MSwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA3MSwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgNzEsIAotICAgIDc1LCA0MywgNDQsIDcxLCA3NSwgMTQwLCA4NSwgNzUsIDIxNCwgMTUzLCA4NSwgNzUsIDI0NiwgMTEyLCA4NSwgNzUsIDIyOCwgCi0gICAgNjEsIDI0NSwgMjI4LCA4NSwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgODUsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgODUsIDc1LCAKLSAgICAyMTksIDMwLCAyMTIsIDksIDg1LCA3NSwgNDMsIDQ0LCA4NSwgNzUsIDEyMCwgMTI0LCA4NSwgNzUsIDk3LCA4MCwgMiwgCi0gICAgMjE2LCA3OCwgMjQ2LCAxMTEsIDk3LCA4MCwgMiwgMjE2LCA3OCwgMjE0LCAxNTIsIDE0MCwgODAsIDIsIDIxNiwgNzgsIAotICAgIDI0NiwgMTExLCAxNDAsIDgwLCAyLCAyMTYsIDc4LCAyMTQsIDE1MiwgNDIsIDIsIDIxNiwgMTUsIDE2MywgMjUxLCAyMjksIAotICAgIDQyLCAyLCAyNTEsIDE4MywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjQ4LCA3LCAxNjMsIDI1MSwgCi0gICAgMjI5LCA0MiwgMiwgMjMyLCAxMTQsIDQzLCAyNDgsIDcsIDE2MywgMjUxLCAyMjksIDI0OCwgMSwgMiwgNDMsIDE2MywgMjUxLCAKLSAgICAyMjksIDI0OCwgMSwgMiwgNDQsIDE2MywgMjUxLCAyMjksIDI0OCwgMSwgMiwgMjE2LCAxNSwgMTYzLCAyNTEsIDIyOSwgCi0gICAgMjQ4LCAxLCAyLCAyNTEsIDE4MywgMTYzLCAyNTEsIDIyOSwgMjQ2LCAxMjYsIDIxOCwgMjM2LCA4NSwgMjMzLCA5MSwgMjE4LCAKLSAgICAyMzYsIDcxLCAyMzMsIDkxLCAyMTgsIDIzNiwgODUsIDIxMywgMTg3LCA0LCAyMTgsIDIzNiwgNzEsIDIxMywgMTg3LCA0LCAKLSAgICAyMTgsIDIzNiwgODUsIDIyNSwgMTkzLCA3MSwgMjI1LCAxOTMsIDcxLCAyNDEsIDIwMCwgODUsIDI0MSwgMjAwLCAyMDMsIAotICAgIDg1LCAyNDEsIDIwMCwgODUsIDIzMywgOTEsIDI1MCwgNDMsIDg1LCAyMzEsIDg3LCAyNDgsIDAsIDcxLCAyMzEsIDg3LCAKLSAgICAyNDgsIDAsIDg1LCAyMzEsIDg3LCAyMzIsIDExMCwgNzEsIDIzMSwgODcsIDIzMiwgMTEwLCA4NSwgNCwgMjQ4LCAwLCA4NSwgCi0gICAgNCwgMjMyLCAxMTAsIDcxLCA0LCAyMzIsIDExMCwgODUsIDIwMywgMjQ1LCAxNzIsIDcxLCAyMDMsIDI0NSwgMTcyLCA4NSwgCi0gICAgNjcsIDI0NSwgMTcyLCA3MSwgNjcsIDI0NSwgMTcyLCA0MywgODAsIDIsIDQsIDI1MCwgNDMsIDEzNCwgMTQwLCAyNTMsIAotICAgIDI1NSwgNDMsIDgwLCAyLCAzNywgMjI1LCAyNSwgMjAwLCAxNDAsIDIxOCwgMjMyLCA3NSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgCi0gICAgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgMTMwLCAKLSAgICAxNDAsIDIxNSwgNTgsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDE0MCwgODAsIDIsIDI0NiwgMTI2LCAyMTgsIDE0MSwgCi0gICAgMTQwLCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCAxNDAsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIAotICAgIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDE0MCwgCi0gICAgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDE0MCwgODAsIDIxNiwgMTQwLCAyMTEsIDE3OCwgMjEyLCAKLSAgICAzNiwgODAsIDIyNSwgMTAsIDI0NywgMjAzLCAyMzMsIDUyLCAyNDUsIDEwNiwgNSwgNzIsIDE0MCwgNzUsIDIyMywgNTMsIAotICAgIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDIyMywgNTMsIDI1NCwgMTU2LCAxMjgsIDExMiwgCi0gICAgOTcsIDgwLCAyMTYsIDE0MCwgMjQyLCAxMzYsIDk3LCA4MCwgMjE2LCAxNDAsIDIxOCwgMjIsIDE0MCwgMjI0LCAyNywgNzUsIAotICAgIDk3LCAyMjQsIDI3LCA3NSwgMjIzLCA1MywgMjE2LCA5MCwgMjI2LCAxNzIsIDcyLCA5NywgNzUsIDk3LCA4MCwgNzIsIDIyMywgCi0gICAgNTMsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE2LCA5MCwgMjI2LCAxNzIsIDcyLCAxNDAsIDc1LCAxNDAsIDgwLCA3MiwgMjU0LCAKLSAgICAxNTYsIDEyOCwgMTEyLCAxNDAsIDgwLCA3MiwgMjIzLCA1MywgMjE2LCA5MCwgMjI2LCAxNzEsIDk3LCA4MCwgNzIsIDIyMywgCi0gICAgNTMsIDIxNiwgOTAsIDIyNiwgMTcxLCA3MSwgMjMxLCA4NywgMjE4LCAxNTgsIDg1LCA0LCAyMTgsIDE1OCwgNzEsIDQsIAotICAgIDIxOCwgMTU4LCA4NSwgMjIyLCAyNTAsIDIyNSwgMTkzLCA3MSwgMjIyLCAyNTAsIDIyNSwgMTkzLCAxMTQsIDIzMywgOTEsIAotICAgIDI1MCwgNDMsIDExNCwgMjI2LCAxMjgsIDIsIDIyNiwgMTI4LCAyMzUsIDIyMiwgMTE0LCAyNTAsIDQ0LCAyLCAyNTAsIDQ0LCAKLSAgICAyMzUsIDIyMiwgMTE0LCAyNTAsIDQzLCAxMTQsIDM3LCAyMjIsIDAsIDE0NSwgNiwgMSwgMjUzLCAxNjcsIDE0NSwgNiwgMSwgCi0gICAgMjUxLCAxMjUsIDE0NSwgNiwgMSwgMjEzLCAyNTMsIDE0NSwgNiwgMSwgMjQyLCAxOTIsIDE0NSwgNiwgMSwgMjQ3LCAxNDgsIAotICAgIDE0NSwgNiwgMSwgMjExLCAyMSwgMTQ1LCA2LCAxLCAyMTAsIDY4LCAxNDUsIDYsIDEsIDI0NiwgNDIsIDE0NSwgNiwgMSwgCi0gICAgMjEwLCA5MSwgMTQ1LCA2LCAxLCAyMzUsIDE1NCwgMTQ1LCA2LCAxLCA2NSwgMjM1LCAxNTQsIDE0NSwgNiwgMSwgNzQsIAotICAgIDE0NSwgNiwgMSwgMjQ3LCAxNjgsIDE0NSwgNiwgMSwgMjM0LCAyNDYsIDE0NSwgNiwgMSwgMjMyLCAxOTIsIDE0NSwgNiwgMSwgCi0gICAgMjMwLCAzNCwgMTQ1LCA2LCAxLCAyMjksIDE5NiwgMTQ1LCA2LCAxLCAyMjYsIDE4OSwgMTQ1LCA2LCAxLCAyMjUsIDcsIAotICAgIDE0NSwgNiwgMSwgMjIyLCAyMzAsIDE0NSwgNiwgMSwgMjE5LCA4NSwgMTQ1LCA2LCAxLCAyMTUsIDgxLCAxNDUsIDYsIDEsIAotICAgIDIxNCwgMjAxLCAxNDUsIDYsIDEsIDI0MywgMjU0LCAxNDUsIDYsIDEsIDI0MSwgMjA2LCAxNDUsIDYsIDEsIDIyNiwgMTM5LCAKLSAgICAxNDUsIDYsIDEsIDIyNSwgMjI0LCAxNDUsIDYsIDEsIDIxOSwgMjMwLCAxNDUsIDYsIDEsIDIxNSwgMTY4LCAxNDUsIDYsIDEsIAotICAgIDI1MCwgODMsIDE0NSwgNiwgMSwgMjIwLCAxMDQsIDE0NSwgNiwgMSwgMjExLCAyNywgMTQ1LCA2LCAxLCAyMTEsIDI5LCAKLSAgICAxNDUsIDYsIDEsIDIxMSwgNTcsIDE0NSwgNiwgMSwgMjE4LCAyNTUsIDE2MiwgMTQ1LCA2LCAxLCAyMTAsIDIxMiwgMTQ1LCAKLSAgICA2LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCA0LCAyMTAsIDE4NCwgMiwgMjE3LCA3OCwgMTQ1LCA2LCAxLCAyMTAsIAotICAgIDI0NCwgMTQ1LCA2LCAxLCAyMzUsIDE5MSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjUyLCAxLCAyMTAsIDE4MywgMTQ1LCAKLSAgICA2LCAxLCAyMzUsIDE5MSwgMjUyLCAxLCAyMTAsIDE4MywgMTQ1LCA2LCAxLCAyNDQsIDkwLCAxNDUsIDYsIDEsIDIzNSwgCi0gICAgMTUyLCAxNDUsIDYsIDEsIDIxOSwgMjI5LCAxNDUsIDYsIDEsIDIxNSwgMjAzLCA2MSwgMTQ1LCA2LCAxLCAyMzMsIDgxLCAKLSAgICAyMzAsIDM0LCAxNDUsIDQsIDEsIDI1MywgMTY3LCAxNDUsIDQsIDEsIDI1MSwgMTI1LCAxNDUsIDQsIDEsIDIxMywgMjUzLCAKLSAgICAxNDUsIDQsIDEsIDI0MiwgMTkyLCAxNDUsIDQsIDEsIDI0NywgMTQ4LCAxNDUsIDQsIDEsIDIxMSwgMjEsIDE0NSwgNCwgMSwgCi0gICAgMjEwLCA2OCwgMTQ1LCA0LCAxLCAyNDYsIDQyLCAxNDUsIDQsIDEsIDIxMCwgOTEsIDE0NSwgNCwgMSwgMjM1LCAxNTQsIAotICAgIDE0NSwgNCwgMSwgNjUsIDIzNSwgMTU0LCAxNDUsIDQsIDEsIDc0LCAxNDUsIDQsIDEsIDI0NywgMTY4LCAxNDUsIDQsIDEsIAotICAgIDIzNCwgMjQ2LCAxNDUsIDQsIDEsIDIzMiwgMTkyLCAxNDUsIDQsIDEsIDIzMCwgMzQsIDE0NSwgNCwgMSwgMjI5LCAxOTYsIAotICAgIDE0NSwgNCwgMSwgMjI2LCAxODksIDE0NSwgNCwgMSwgMjI1LCA3LCAxNDUsIDQsIDEsIDIyMiwgMjMwLCAxNDUsIDQsIDEsIAotICAgIDIxOSwgODUsIDE0NSwgNCwgMSwgMjE1LCA4MSwgMTQ1LCA0LCAxLCAyMTQsIDIwMSwgMTQ1LCA0LCAxLCAyNDMsIDI1NCwgCi0gICAgMTQ1LCA0LCAxLCAyNDEsIDIwNiwgMTQ1LCA0LCAxLCAyMjYsIDEzOSwgMTQ1LCA0LCAxLCAyMjUsIDIyNCwgMTQ1LCA0LCAxLCAKLSAgICAyMTksIDIzMCwgMTQ1LCA0LCAxLCAyMTUsIDE2OCwgMTQ1LCA0LCAxLCAyNTAsIDgzLCAxNDUsIDQsIDEsIDIyMCwgMTA0LCAKLSAgICAxNDUsIDQsIDEsIDIxMSwgMjcsIDE0NSwgNCwgMSwgMjExLCAyOSwgMTQ1LCA0LCAxLCAyMTEsIDU3LCAxNDUsIDQsIDEsIAotICAgIDIxOCwgMjU1LCAxNjIsIDE0NSwgNCwgMSwgMjEwLCAyMTIsIDE0NSwgNCwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgNCwgCi0gICAgMjEwLCAxODQsIDIsIDIxNywgNzgsIDE0NSwgNCwgMSwgMjEwLCAyNDQsIDE0NSwgNCwgMSwgMjM1LCAxOTEsIDQsIDIxMCwgCi0gICAgMTgzLCAxNDUsIDQsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgNCwgMSwgMjM1LCAxOTEsIDI1MiwgMSwgMjEwLCAxODMsIAotICAgIDE0NSwgNCwgMSwgMjQ0LCA5MCwgMTQ1LCA0LCAxLCAyMzUsIDE1MiwgMTQ1LCA0LCAxLCAyMTksIDIyOSwgMTQ1LCA0LCAxLCAKLSAgICAyMTUsIDIwMywgNjEsIDE0NSwgNCwgMSwgMjMzLCA4MSwgMjMwLCAzNCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDUyLCAxMzAsIAotICAgIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1MiwgMTMwLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNiwgCi0gICAgMSwgMjI2LCAxMTAsIDIsIDkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMTE2LCAyLCA5MSwgCi0gICAgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI0OCwgNDcsIDcsIDQsIDEsIAotICAgIDI0MiwgNjgsIDIsIDI0OCwgNDcsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDI0OCwgNDcsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIAotICAgIDI0OCwgNDcsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCA0NywgNywgCi0gICAgNiwgMSwgMjU0LCAxNTEsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDEwMywgNywgNiwgMSwgMjE1LCA5NCwgNjEsIDcsIDYsIDEsIAotICAgIDIxNSwgOTQsIDI1NCwgMTUxLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgNDQsIDEwMywgNywgNiwgMSwgMjEyLCA5OSwgMiwgCi0gICAgMTAzLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDksIDEwOCwgNywgNiwgMSwgCi0gICAgMTYzLCAyNDIsIDY3LCA3LCA0LCAxLCAxNjMsIDI0MiwgNjcsIDcsIDQsIDEsIDIxNywgNzYsIDIyNSwgMTM2LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDIyOCwgNTUsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAxNDQsIDIsIAotICAgIDEyMSwgMjIyLCAyMzcsIDIzNSwgMjIyLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCA3NiwgNywgMjE4LCA2NiwgNCwgMSwgMjM1LCAKLSAgICAxNTAsIDU4LCAxLCA2LCAyMTQsIDEwNSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDcsIDYsIDEsIAotICAgIDIxMCwgMTYwLCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgODEsIDYsIDEsIDI1NCwgMTczLCA4MSwgNCwgMSwgMjU0LCAxNzMsIAotICAgIDgxLCA2LCAxLCAyMTMsIDE3MywgODEsIDQsIDEsIDIxMywgMTczLCA4MSwgNiwgMSwgMjQzLCAxMTQsIDgxLCA0LCAxLCAKLSAgICAyNDMsIDExNCwgODEsIDYsIDEsIDI0OCwgMTk5LCA4MSwgNCwgMSwgMjQ4LCAxOTksIDgxLCA2LCAxLCAyNDUsIDIwMiwgODEsIAotICAgIDQsIDEsIDI0NSwgMjAyLCA4MSwgNiwgMSwgMjE5LCAzNSwgODEsIDQsIDEsIDIxOSwgMzUsIDgxLCA2LCAxLCAyMTAsIDEwMSwgCi0gICAgODEsIDQsIDEsIDIxMCwgMTAxLCA4MSwgNiwgMSwgMjQxLCAyNTUsIDgxLCA0LCAxLCAyNDEsIDI1NSwgODEsIDYsIDEsIAotICAgIDIxNiwgMTc4LCA4MSwgNCwgMSwgMjE2LCAxNzgsIDgxLCA2LCAxLCAyNDAsIDEyMywgODEsIDQsIDEsIDI0MCwgMTIzLCA4MSwgCi0gICAgNiwgMSwgMjM0LCAyMzMsIDgxLCA0LCAxLCAyMzQsIDIzMywgODEsIDYsIDEsIDIzMywgNzgsIDgxLCA0LCAxLCAyMzMsIDc4LCAKLSAgICA4MSwgNiwgMSwgMjMwLCAyMzUsIDgxLCA0LCAxLCAyMzAsIDIzNSwgODEsIDYsIDEsIDIyOCwgMjM4LCA4MSwgNCwgMSwgCi0gICAgMjI4LCAyMzgsIDgxLCA2LCAxLCAyMzMsIDIzOSwgODEsIDQsIDEsIDIzMywgMjM5LCA4MSwgNiwgMSwgNzgsIDgxLCA0LCAxLCAKLSAgICA3OCwgODEsIDYsIDEsIDIyNSwgMTExLCA4MSwgNCwgMSwgMjI1LCAxMTEsIDgxLCA2LCAxLCAyMjIsIDIxMywgODEsIDQsIDEsIAotICAgIDIyMiwgMjEzLCA4MSwgNiwgMSwgMjE5LCAxNjcsIDgxLCA0LCAxLCAyMTksIDE2NywgODEsIDYsIDEsIDIxNywgNDIsIDgxLCAKLSAgICA0LCAxLCAyMTcsIDQyLCA4MSwgNiwgMSwgMjE0LCAyMjksIDgxLCA0LCAxLCAyMTQsIDIyOSwgODEsIDYsIDEsIDI0NCwgCi0gICAgMTI5LCA4MSwgNCwgMSwgMjQ0LCAxMjksIDgxLCA2LCAxLCAyMzQsIDExOCwgODEsIDQsIDEsIDIzNCwgMTE4LCA4MSwgNiwgCi0gICAgMSwgMjI0LCAxNjQsIDgxLCA0LCAxLCAyMjQsIDE2NCwgODEsIDYsIDEsIDIyNiwgMTgyLCA4MSwgNCwgMSwgMjI2LCAxODIsIAotICAgIDgxLCA2LCAxLCAyNDgsIDUsIDI1NCwgMTc5LCA4MSwgNCwgMSwgMjQ4LCA1LCAyNTQsIDE3OSwgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMjU0LCAyMDUsIDgxLCA0LCAxLCA1NSwgODEsIDI1NCwgMjA1LCA4MSwgNiwgMSwgMjQ5LCAxMjMsIDI0NSwgMjAyLCA4MSwgCi0gICAgNCwgMSwgMjQ5LCAxMjMsIDI0NSwgMjAyLCA4MSwgNiwgMSwgMjQ4LCA1LCAyMzQsIDIzMywgODEsIDQsIDEsIDI0OCwgNSwgCi0gICAgMjM0LCAyMzMsIDgxLCA2LCAxLCAyNDgsIDUsIDIyOCwgMjM4LCA4MSwgNCwgMSwgMjQ4LCA1LCAyMjgsIDIzOCwgODEsIDYsIAotICAgIDEsIDI0OSwgMTIzLCAyMjgsIDIzOCwgODEsIDQsIDEsIDI0OSwgMTIzLCAyMjgsIDIzOCwgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMjI2LCAxODIsIDgxLCA0LCAxLCA1NSwgODEsIDIyNiwgMTgyLCA4MSwgNiwgMSwgMjIxLCAyNDgsIDgxLCA0LCAxLCAyMjEsIAotICAgIDI0OCwgODEsIDYsIDEsIDI0OSwgMTM2LCAyMjAsIDU3LCA4MSwgNCwgMSwgMjQ5LCAxMzYsIDIyMCwgNTcsIDgxLCA2LCAxLCAKLSAgICA1NSwgODEsIDIyMCwgNTcsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgNTcsIDgxLCA2LCAxLCA1NSwgODEsIDI0NSwgODMsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0NSwgODMsIDgxLCA2LCAxLCAyNTQsIDE5MSwgMjM0LCAxMjMsIDgxLCA0LCAxLCAyNTQsIAotICAgIDE5MSwgMjM0LCAxMjMsIDgxLCA2LCAxLCAyNDgsIDUsIDI0MSwgNTIsIDgxLCA0LCAxLCAyNDgsIDUsIDI0MSwgNTIsIDgxLCAKLSAgICA2LCAxLCA1NSwgODEsIDI0MSwgNTIsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgNTIsIDgxLCA2LCAxLCA1NSwgODEsIDE2MiwgCi0gICAgODEsIDQsIDEsIDU1LCA4MSwgMTYyLCA4MSwgNiwgMSwgMjMzLCAxNTQsIDE2MiwgODEsIDQsIDEsIDIzMywgMTU0LCAxNjIsIAotICAgIDgxLCA2LCAxLCA1NSwgODEsIDI0MSwgMjI0LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDIyNCwgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMjQyLCAyLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDIsIDIsIDgxLCA2LCAxLCA1NSwgODEsIDI0MywgMTA5LCA4MSwgNCwgMSwgCi0gICAgNTUsIDgxLCAyNDMsIDEwOSwgODEsIDYsIDEsIDU1LCA4MSwgMjQ3LCAxNzEsIDgxLCA0LCAxLCA1NSwgODEsIDI0NywgMTcxLCAKLSAgICA4MSwgNiwgMSwgNTUsIDgxLCAyMjAsIDI0LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDI0LCA4MSwgNiwgMSwgNTUsIDIyNywgCi0gICAgMjEyLCAyMjAsIDI0LCA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMjAsIDI0LCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAKLSAgICAyMjksIDMyLCA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMjksIDMyLCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAyMjcsIAotICAgIDE1MiwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjI3LCAxNTIsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMTIsIDIxMiwgMzcsIAotICAgIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIxMiwgMzcsIDgxLCAxNiwgMjM0LCAyNTIsIDgxLCAxNiwgMjMwLCAyMzYsIDIyMiwgCi0gICAgMjEzLCA4MSwgMTYsIDIyNSwgMTEyLCAyMjIsIDIxMywgODEsIDE2LCAyMTgsIDE0OSwgODEsIDE2LCAyMTcsIDQzLCAyMjIsIAotICAgIDIxMywgODEsIDE2LCAyMzQsIDExOSwgMjIyLCAyMTMsIDgxLCAxNiwgMjIwLCAyNSwgMjE5LCAxNjcsIDgxLCA2LCAxLCAKLSAgICAyNDksIDEyMywgMjIwLCA1NywgODEsIDQsIDEsIDI0OSwgMTIzLCAyMjAsIDU3LCA4MSwgNiwgMSwgMjQ5LCAxMjMsIDI0MywgCi0gICAgMTA5LCA4MSwgNCwgMSwgMjQ5LCAxMjMsIDI0MywgMTA5LCA4MSwgMzgsIDIyOCwgMjM5LCA0OCwgODEsIDM4LCAyMTgsIAotICAgIDI0OSwgMjUzLCAyMzIsIDgxLCAzOCwgMjE4LCAyNDksIDIzMywgMjcsIDgxLCA2LCAxLCAyNTEsIDIwNywgMjM0LCAxMjMsIAotICAgIDgxLCA0LCAxLCAyNTEsIDIwNywgMjM0LCAxMjMsIDgxLCA1NSwgMjI3LCAyMTIsIDI0MywgMjM2LCAyMTgsIDEzMSwgODEsIAotICAgIDU1LCAyMjcsIDIxMiwgMjQ3LCAyMDUsIDIyNCwgMTYsIDc5LCA4MSwgNTUsIDIyNywgMjEyLCAyMzUsIDI0NCwgMjI0LCAxNiwgCi0gICAgNzksIDgxLCA1NSwgMjI3LCAyMTIsIDIxMywgMjQxLCAyNDcsIDE4MCwgODEsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgODEsIAotICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgODEsIDIzMCwgMTI5LCAyNDcsIDE4MCwgOTgsIDQsIDEsIDI1NCwgMTMxLCA5OCwgNCwgMSwgCi0gICAgMjUyLCAxNjAsIDk4LCA0LCAxLCAyNDMsIDExMywgOTgsIDQsIDEsIDI0NywgMTM2LCA5OCwgNCwgMSwgMjQ1LCAxNTgsIDk4LCAKLSAgICA0LCAxLCAyMTMsIDE2MCwgOTgsIDQsIDEsIDIxMCwgODksIDk4LCA0LCAxLCAyMTcsIDYxLCA5OCwgNCwgMSwgMjM2LCA2LCAKLSAgICA5OCwgNCwgMSwgMjM0LCAyNDAsIDk4LCA0LCAxLCAyMzMsIDg3LCA5OCwgNCwgMSwgMjMxLCAxOTAsIDk4LCA0LCAxLCAyMjksIAotICAgIDIwMCwgOTgsIDQsIDEsIDIyNiwgMjAwLCA5OCwgNCwgMSwgMjI2LCAyMSwgOTgsIDQsIDEsIDIxMCwgNzgsIDk4LCA0LCAxLCAKLSAgICAyMjMsIDE3NCwgOTgsIDQsIDEsIDIyMSwgMjQ1LCA5OCwgNCwgMSwgMjE3LCA1MSwgOTgsIDQsIDEsIDIxNCwgMTkwLCA5OCwgCi0gICAgNCwgMSwgMjI1LCAxNDMsIDk4LCA0LCAxLCAyMzQsIDEyNywgOTgsIDQsIDEsIDI0MiwgMjQ4LCA5OCwgNCwgMSwgMjI0LCAKLSAgICA3NiwgOTgsIDQsIDEsIDIyMCwgMjIsIDk4LCA0LCAxLCAyNTAsIDEwNSwgOTgsIDQsIDEsIDI1MSwgMTUsIDk4LCA0LCAxLCAKLSAgICAyMzUsIDEwNiwgOTgsIDQsIDEsIDI1MCwgNDgsIDk4LCA0LCAxLCAyNTAsIDE1MSwgOTgsIDQsIDEsIDIxMSwgMTYzLCA5OCwgCi0gICAgNCwgMSwgMjM1LCAxMTcsIDk4LCA0LCAxLCAyNDIsIDUwLCA5OCwgNCwgMSwgMjQxLCAyNDUsIDk4LCA0LCAxLCAyNDEsIAotICAgIDE4MiwgOTgsIDQsIDEsIDIxMiwgMjIsIDk4LCA0LCAxLCAyNDIsIDExLCA5OCwgNCwgMSwgMjQxLCA3MiwgOTgsIDQsIDEsIAotICAgIDIxMCwgMjQ2LCA5OCwgNCwgMSwgMjU0LCAyNDEsIDIxNiwgMTA5LCAxLCAxOTIsIDIxNiwgMTA5LCAxLCAyMTEsIDk5LCAKLSAgICAyMTYsIDEwOSwgMSwgMjExLCA5OCwgMjE2LCAxMDksIDEsIDIxMSwgODgsIDIxNiwgMTA5LCAxLCAyMTEsIDg2LCAyMTYsIAotICAgIDEwOSwgMSwgMjUyLCA0MCwgMjU1LCAyNSwgMjExLCA4MSwgMjE2LCAxMDksIDEsIDIxMSwgODEsIDIxNiwgMTA5LCAxLCAKLSAgICAyMTEsIDk2LCAyMTYsIDEwOSwgMSwgMjExLCA5MywgMjE2LCAxMDksIDEsIDIxMSwgOTUsIDIxNiwgMTA5LCAxLCAyMTEsIAotICAgIDk0LCAyMTYsIDEwOSwgMSwgMjExLCAxMiwgMjE2LCAxMDksIDEsIDIxMSwgOTAsIDIxNiwgMTA5LCAxLCAyMTEsIDc5LCAKLSAgICAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNzksIDIxNiwgMTA5LCAxLCAyMTEsIDc2LCAyMTYsIDEwOSwgMSwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDksIDEsIDI1MiwgNDAsIDI1NSwgMjUsIDIxMSwgODQsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCAKLSAgICA4NCwgMjE2LCAxMDksIDEsIDIxMSwgODMsIDIxNiwgMTA5LCAxLCAyMTEsIDEwMywgMjE2LCAxMDksIDEsIDIxMSwgNzcsIAotICAgIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA3NywgMjE2LCAxMDksIDEsIDIxMSwgNjYsIDIxNiwgMTA5LCAxLCAyMTUsIAotICAgIDExNiwgMjExLCA2NiwgMjE2LCAxMDksIDEsIDIxMSwgOCwgMjE2LCAxMDksIDEsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAKLSAgICAyNTQsIDIxNiwgMjExLCA0OSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgMjExLCA3NSwgCi0gICAgMjE2LCAxMDksIDEsIDIxMSwgNzQsIDIxNiwgMTA5LCAxLCAyMTEsIDcxLCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgCi0gICAgODUsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA2OSwgMjE2LCAxMDksIDEsIDIxMSwgNjcsIDIxNiwgMTA5LCAxLCAKLSAgICAyMTAsIDIxMiwgMjE2LCAxMDksIDEsIDIxMSwgNjQsIDIxNiwgMTA5LCAxLCAyMTEsIDYzLCAyMTYsIDEwOSwgMSwgMjExLCAKLSAgICA4NywgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDg3LCAyMTYsIDEwOSwgMSwgMjUzLCAxNzEsIDIxMSwgODcsIDIxNiwgCi0gICAgMTA5LCAxLCAyMTEsIDYyLCAyMTYsIDEwOSwgMSwgMjExLCA2MCwgMjE2LCAxMDksIDEsIDIxMSwgNjEsIDIxNiwgMTA5LCAxLCAKLSAgICAyMTEsIDU5LCAyMTYsIDEwOSwgMSwgMjExLCA1OCwgMjE2LCAxMDksIDEsIDIxMSwgOTcsIDIxNiwgMTA5LCAxLCAyMTEsIAotICAgIDU2LCAyMTYsIDEwOSwgMSwgMjExLCA1NCwgMjE2LCAxMDksIDEsIDIxMSwgNTMsIDIxNiwgMTA5LCAxLCAyMTEsIDUyLCAKLSAgICAyMTYsIDEwOSwgMSwgMjExLCA1MCwgMjE2LCAxMDksIDEsIDIxNywgMzUsIDIxMSwgNTAsIDIxNiwgMTA5LCAxLCAyMTEsIAotICAgIDQ4LCAyMTYsIDEwOSwgMSwgMjExLCA0NywgMjE2LCAxMDksIDEsIDIxMCwgMjQ0LCAyMTYsIDEwOSwgNTgsIDEsIDIzMywgCi0gICAgMTMyLCA3OSwgMjE2LCAxMDksIDIyMCwgMTQwLCA3OSwgMjE2LCAxMDksIDExNywgMjM1LCA2OSwgMjksIDMsIDIzMiwgMTYxLCAKLSAgICAyOSwgMywgMjMwLCAxNjUsIDI5LCAzLCAyMjIsIDIxMSwgMjksIDMsIDIxOSwgNTksIDI5LCAzLCAyMjAsIDgsIDI5LCAzLCAKLSAgICAyNTEsIDIxMiwgMjksIDMsIDIxNiwgNDIsIDI5LCAzLCAyNDksIDI0NSwgMjksIDMsIDIyOCwgNzcsIDI5LCAzLCAyMjcsIAotICAgIDEzNywgMjksIDMsIDI0MiwgMTg3LCAyMjcsIDQsIDI5LCAzLCAyMTAsIDIyLCAyOSwgMywgMjQ3LCAxNTEsIDI5LCAzLCAKLSAgICAyNDgsIDExMiwgMjksIDMsIDIzNSwgNzMsIDI5LCAzLCAyMTYsIDE1NiwgMjksIDMsIDI1MCwgOTMsIDI5LCAzLCAyMjUsIAotICAgIDEyMywgMjksIDMsIDIyNSwgMTgsIDI5LCAzLCAyNDMsIDYsIDI5LCAzLCAyNDMsIDIsIDI5LCAzLCAyNDMsIDMsIDI5LCAzLCAKLSAgICAyNDMsIDQsIDI5LCAzLCAyMTgsIDIyNSwgMjksIDMsIDIxOCwgMTgxLCAyOSwgMywgMjE4LCAxOTQsIDI5LCAzLCAyMTgsIAotICAgIDIyNCwgMjksIDMsIDIxOCwgMTk4LCAyOSwgMywgMjE4LCAxOTksIDI5LCAzLCAyMTgsIDE4NiwgMjksIDMsIDI1MCwgMjIxLCAKLSAgICAyOSwgMywgMjUwLCAyMDAsIDI5LCAzLCAyNTAsIDIwMiwgMjksIDMsIDI1MCwgMjIwLCAyOSwgMywgMjUwLCAyMTgsIDI5LCAKLSAgICAzLCAyNTAsIDIxOSwgMjksIDMsIDI1MCwgMjAxLCAyOSwgMywgMjA5LCAyNDMsIDI5LCAzLCAyMDksIDIyMSwgMjksIDMsIAotICAgIDIwOSwgMjM0LCAyOSwgMywgMjA5LCAyNDIsIDI5LCAzLCAyMDksIDIzNywgMjksIDMsIDIwOSwgMjM4LCAyOSwgMywgMjA5LCAKLSAgICAyMjYsIDI5LCAzLCAyNTAsIDIxNiwgMjksIDMsIDI1MCwgMjAzLCAyOSwgMywgMjUwLCAyMDUsIDI5LCAzLCAyNTAsIDIxNSwgCi0gICAgMjksIDMsIDI1MCwgMjEzLCAyOSwgMywgMjUwLCAyMTQsIDI5LCAzLCAyNTAsIDIwNCwgMjksIDMsIDIyMywgMjM5LCAyOSwgCi0gICAgMywgMjIzLCAyMjksIDI5LCAzLCAyMjMsIDIzNSwgMjksIDMsIDIyMywgMjM4LCAyOSwgMywgMjIzLCAyMzYsIDI5LCAzLCAKLSAgICAyMjMsIDIzNywgMjksIDMsIDIyMywgMjM0LCAyOSwgMywgMjMzLCAxNjUsIDI5LCAzLCAyMzMsIDE1NywgMjksIDMsIDIzMywgCi0gICAgMTYwLCAyOSwgMywgMjMzLCAxNjQsIDI5LCAzLCAyMzMsIDE2MSwgMjksIDMsIDIzMywgMTYyLCAyOSwgMywgMjMzLCAxNTgsIAotICAgIDI5LCAzLCAyMTEsIDEzMCwgMjksIDMsIDIxMSwgMTIwLCAyOSwgMywgMjExLCAxMjYsIDI5LCAzLCAyMTEsIDEyOSwgMjksIAotICAgIDMsIDIxMSwgMTI3LCAyOSwgMywgMjExLCAxMjgsIDI5LCAzLCAyMTEsIDEyNSwgMjksIDMsIDI0MiwgNzgsIDI5LCAzLCAKLSAgICAyNDIsIDY5LCAyOSwgMywgMjQyLCA3MiwgMjksIDMsIDI0MiwgNzcsIDI5LCAzLCAyNDIsIDc0LCAyOSwgMywgMjQyLCA3NSwgCi0gICAgMjksIDMsIDI0MiwgNzEsIDM4LCAzMywgMSwgMjUyLCA4MywgMzgsIDMzLCAxLCAyMTMsIDI1NSwgMzgsIDMzLCAxLCAyNDIsIAotICAgIDI0MywgMzgsIDMzLCAxLCAyNDgsIDk4LCAzOCwgMzMsIDEsIDIxMCwgNzQsIDM4LCAzMywgMSwgMjEwLCA5NCwgMzgsIDMzLCAKLSAgICAxLCAxNzYsIDM4LCAzMywgMSwgMjQ1LCAxODIsIDM4LCAzMywgMSwgMjQ1LCAxNjcsIDM4LCAzMywgMSwgMjQ1LCAxNTgsIAotICAgIDM4LCAzMywgMSwgNzgsIDM4LCAzMywgMSwgMjI1LCAyMjQsIDM4LCAzMywgMSwgMjQ1LCAxMDAsIDM4LCAzMywgMSwgMjQ1LCAKLSAgICA5MCwgMzgsIDMzLCAxLCAyMTcsIDIzLCAzOCwgMzMsIDEsIDE2MiwgMzgsIDMzLCAxLCAyMTUsIDE3OSwgMzgsIDMzLCAxLCAKLSAgICAyNTAsIDEzOSwgMzgsIDMzLCAxLCAyMjAsIDEwNCwgMzgsIDMzLCAxLCAyMjAsIDY3LCAzOCwgMzMsIDEsIDI0NCwgOTAsIAotICAgIDM4LCAzMywgMSwgMjQ1LCA4OSwgMzgsIDMzLCAxLCA2MSwgMzgsIDMzLCAxLCAyMzYsIDY3LCAzOCwgMzMsIDEsIDI0NywgCi0gICAgMTY5LCAzOCwgMzMsIDEsIDIzMCwgMTQ1LCAyMTQsIDIwNSwgMzgsIDMzLCAxLCAyMTEsIDU5LCAzOCwgMzMsIDEsIDIxMCwgCi0gICAgMjEyLCAzOCwgMzMsIDEsIDIzNSwgMTkwLCA2MSwgMzgsIDMzLCAxLCAyMzIsIDE5OCwgMjEwLCAxODMsIDM4LCAzMywgMSwgCi0gICAgMjUyLCAxLCAyMTAsIDE4MywgMzgsIDMzLCAxLCAyMzUsIDE5MCwgMjUyLCAxLCAyMTAsIDE4MywgNDQsIDI1NCwgMTE4LCAKLSAgICAyMTgsIDYxLCAyMzEsIDE1OSwgNDQsIDI1NCwgMTE4LCAyNDYsIDEyNiwgMjE4LCA2MSwgMjMxLCAxNTksIDQzLCAyMTgsIAotICAgIDYxLCAxMjcsIDQ0LCAyMTgsIDYxLCAxMjcsIDQzLCAyNDYsIDEyNiwgMjE4LCA2MSwgMTI3LCA0NCwgMjQ2LCAxMjYsIDIxOCwgCi0gICAgNjEsIDEyNywgMjIzLCAxNjAsIDIzNSwgMjA5LCAyMzEsIDE1OSwgMjIzLCAxNjAsIDI0NiwgMTI2LCAyMzUsIDIwOSwgMjMxLCAKLSAgICAxNTksIDI0NiwgMTI2LCAyMTUsIDI0MiwgMjMxLCAxNTksIDQzLCAyMTUsIDI0MiwgMTI3LCA0NCwgMjE1LCAyNDIsIDEyNywgCi0gICAgMjIzLCAxNjAsIDIxOCwgMjM2LCA0MywgMjIzLCAxNjAsIDIyNiwgMjAyLCAxMjcsIDQ0LCAyMjMsIDE2MCwgMjI2LCAyMDIsIAotICAgIDEyNywgMjQ1LCAyMTgsIDI0OSwgMTY2LCAyMjYsIDE3LCAyNDQsIDMwLCAyMjYsIDE3LCAyMjMsIDUyLCAyNDQsIDMwLCAKLSAgICAyMjYsIDE3LCAyNDAsIDE3MiwgMjQ2LCAxMjYsIDIyNiwgMjU1LCAyNDYsIDExMiwgMjU0LCAxMjcsIDIxNCwgMTUzLCAyNTQsIAotICAgIDEyNywgMjQ2LCAxMjYsIDIyMiwgMjUwLCAyNTQsIDExNywgNTIsIDIyNiwgMjUyLCAyNDAsIDE3NSwgMjM1LCAyMDAsIDIzNSwgCi0gICAgMjA4LCAyMjYsIDYzLCAyNTEsIDE2MiwgMjQwLCAxNzYsIDIsIDI0OCwgOSwgMjE2LCA5MCwgMiwgMjIyLCAyMzcsIDQ4LCAKLSAgICA0MywgMTIxLCAyMjYsIDksIDEyNywgNDQsIDEyMSwgMjI2LCA5LCAxMjcsIDIxNiwgOTAsIDIsIDU5LCA0OCwgMjE2LCA5MCwgCi0gICAgMiwgNTksIDUxLCA0MywgNjcsIDI1MiwgMTQ5LCAyLCAyMjQsIDEwLCA0NCwgNjcsIDI1MiwgMTQ5LCAyLCAyMjQsIDEwLCAKLSAgICAyMTYsIDE1LCA0MywgMTYzLCAxMjcsIDIxNiwgMTUsIDQ0LCAxNjMsIDEyNywgMjUxLCAxODMsIDQzLCAxNjMsIDEyNywgCi0gICAgMjUxLCAxODMsIDQ0LCAxNjMsIDEyNywgNDMsIDIxOSwgMTg5LCAxMDQsIDEyNywgNDQsIDIxOSwgMTg5LCAxMDQsIDEyNywgCi0gICAgNDMsIDUyLCAyMjYsIDcsIDQ0LCA1MiwgMjI2LCA3LCAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMTIzLCAKLSAgICA1OSwgMTE1LCAxMTMsIDE3MCwgMjI0LCAxNDMsIDkyLCAyNDQsIDE5LCA1OSwgMjI0LCAxNDMsIDI0NCwgODksIDU5LCA3OSwgCi0gICAgMjIzLCA1MiwgMjI0LCAxNiwgNzksIDY3LCAxODQsIDIyMiwgMjM3LCAyMjUsIDEzLCAyMTEsIDIwOSwgMjIwLCAxNDAsIAotICAgIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjE1LCA5NCwgMjQ5LCAyMjcsIDIyMywgMTYwLCAyNDcsIDEyOCwgMjIzLCAxNjAsIDI0OSwgCi0gICAgMjI3LCAyMTUsIDk0LCAyMjAsIDE1MiwgMjQ4LCAyMTQsIDIsIDQzLCAyNDIsIDExNSwgMjQ4LCAyMTQsIDIsIDQ0LCAyNDIsIAotICAgIDExNSwgMjE1LCA5NCwgMjQ4LCAyMTMsIDIxNiwgMTUsIDE2MywgMjIxLCAxNzUsIDUwLCAyMTUsIDU5LCAyNDgsIDE2NCwgCi0gICAgMjE2LCAxNDQsIDI0OCwgMTY0LCAxMCwgMzQsIDIyMywgNzksIDEwLCAzNCwgMjUwLCAxOCwgMTAsIDM0LCAyMjEsIDE3OCwgCi0gICAgMTExLCAxMCwgMzQsIDIyMSwgMTc4LCAxMDUsIDEwLCAzNCwgMjIxLCAxNzgsIDE1OCwgMTAsIDM0LCAyMjUsIDE3MCwgMTAsIAotICAgIDM0LCAyNTEsIDE3MSwgMTAsIDM0LCAyMTcsIDkzLCAxMCwgMzQsIDIzNCwgMzksIDExMSwgMTAsIDM0LCAyMzQsIDM5LCAKLSAgICAxMDUsIDEwLCAzNCwgMjQ3LCAxNzgsIDEwLCAzNCwgMjIxLCAxODEsIDEwLCAzNCwgNCwgMTExLCAxMCwgMzQsIDQsIDEwNSwgCi0gICAgMTAsIDM0LCAyMzMsIDEwMywgMTExLCAxMCwgMzQsIDIzMywgMTAzLCAxMDUsIDEwLCAzNCwgMjMzLCAxMDMsIDE1OCwgMTAsIAotICAgIDM0LCAyMzMsIDEwMywgMTYxLCAxMCwgMzQsIDIxOSwgNzAsIDEwLCAzNCwgMjE2LCAxNDYsIDEwLCAzNCwgMjE5LCA2OCwgCi0gICAgMTExLCAxMCwgMzQsIDIxOSwgNjgsIDEwNSwgMTAsIDM0LCAyNDEsIDIzNSwgMTExLCAxMCwgMzQsIDI0MSwgMjM1LCAxMDUsIAotICAgIDEwLCAzNCwgMjQyLCAyMiwgMTAsIDM0LCAyMjMsIDE1MCwgMTAsIDM0LCAyNTAsIDkwLCAxMCwgMzQsIDIxOCwgMzgsIDEwLCAKLSAgICAzNCwgMjMwLCAxMzMsIDEwLCAzNCwgMjQ4LCA5NiwgMTAsIDM0LCAyMzAsIDEyNSwgMTAsIDM0LCAyNTAsIDMzLCAxMCwgMzQsIAotICAgIDIxMiwgNDEsIDExMSwgMTAsIDM0LCAyMTIsIDQxLCAxMDUsIDEwLCAzNCwgMjQ0LCAxMDQsIDEwLCAzNCwgMjI1LCAyMzYsIAotICAgIDExMSwgMTAsIDM0LCAyMjUsIDIzNiwgMTA1LCAxMCwgMzQsIDIxOSwgMTYyLCAxNjMsIDIxNSwgMjM3LCAyMTUsIDE4OSwgCi0gICAgMTAsIDM0LCAyNDksIDE1MywgMTAsIDM0LCAyNDcsIDE0NCwgMTAsIDM0LCAyMzUsIDE0MywgMTAsIDM0LCAyNTEsIDIwNiwgCi0gICAgNjQsIDI1MCwgMiwgMTAsIDM0LCAyNDUsIDIzLCAxMCwgMzQsIDIxOCwgMjUxLCAxMTEsIDEwLCAzNCwgMjE4LCAyNTEsIAotICAgIDEwNSwgMTAsIDM0LCAyNTIsIDE2MiwgMTAsIDM0LCAyMTksIDE2OSwgMTAsIDM0LCAyNTEsIDcxLCAyMTksIDE2OSwgMTAsIAotICAgIDM0LCAyMjksIDk1LCAxMTEsIDEwLCAzNCwgMjI5LCA5NSwgMTA1LCAxMCwgMzQsIDIyOSwgOTUsIDE1OCwgMTAsIDM0LCAKLSAgICAyMjksIDk1LCAxNjEsIDEwLCAzNCwgMjMxLCA1MSwgMTAsIDM0LCAyMjAsIDU5LCAxMCwgMzQsIDIyMywgMTU2LCAxMCwgMzQsIAotICAgIDI0NSwgNDUsIDEwLCAzNCwgMjI2LCAyMTMsIDEwLCAzNCwgMjUxLCAxNDEsIDExMSwgMTAsIDM0LCAyNTEsIDE0MSwgMTA1LCAKLSAgICAxMCwgMzQsIDIzMSwgOTEsIDEwLCAzNCwgMjMwLCAxMjgsIDEwLCAzNCwgMjQyLCAxNDcsIDExMSwgMTAsIDM0LCAyNDIsIAotICAgIDE0NywgMTA1LCAxMCwgMzQsIDI0MiwgMTQ3LCAxNTgsIDEwLCAzNCwgMjE2LCAxMDcsIDEwLCAzNCwgMjUwLCAxLCAxMCwgCi0gICAgMzQsIDIxMiwgOSwgMTExLCAxMCwgMzQsIDIxMiwgOSwgMTA1LCAxMCwgMzQsIDI1MSwgNzEsIDIyMSwgMTcyLCAxMCwgMzQsIAotICAgIDIxOSwgMTYyLCAyNDAsIDI1NSwgMTAsIDM0LCAyNDAsIDI1NSwgMTAsIDM0LCAyNTEsIDcxLCAyMTksIDQsIDEwLCAzNCwgCi0gICAgMjUxLCA3MSwgMjIwLCA1NCwgMTAsIDM0LCAyNDQsIDQwLCAxMCwgMzQsIDI1MSwgNzEsIDI1MCwgMjM2LCAxMCwgMzQsIAotICAgIDIxOSwgMTYyLCAyMTIsIDU3LCAxMCwgMzQsIDIxMiwgNTgsIDExMSwgMTAsIDM0LCAyMTIsIDU4LCAxMDUsIDEwLCAzNCwgCi0gICAgMjUwLCAzNSwgMTAsIDM0LCAyNTEsIDcxLCAyNDIsIDE3MywgMTAsIDM0LCAyMDAsIDExMSwgMTAsIDM0LCAyMDAsIDEwNSwgCi0gICAgMTAsIDM0LCAyNTEsIDcxLCAyMzIsIDE0MywgMTAsIDM0LCAyNTEsIDcxLCAyNDMsIDk1LCAxMCwgMzQsIDIzMCwgMTI0LCAKLSAgICAxMTEsIDEwLCAzNCwgMjMwLCAxMjQsIDEwNSwgMTAsIDM0LCAyMjMsIDE2MiwgMTAsIDM0LCAyNTEsIDIxNSwgMTAsIDM0LCAKLSAgICAyNTEsIDcxLCAyMTcsIDU3LCAyMzMsIDU4LCAxMCwgMzQsIDI1MSwgNzEsIDIzMywgNTksIDEwLCAzNCwgMjUxLCA3MSwgCi0gICAgMjExLCAyMzksIDEwLCAzNCwgMjUxLCA3MSwgMjQ0LCA1NCwgMTAsIDM0LCAyNDUsIDIyNiwgMTExLCAxMCwgMzQsIDI0NSwgCi0gICAgMjI2LCAxMDUsIDEwLCAzNCwgMjQ1LCAyMjYsIDE1OCwgMTAsIDM0LCAyNTEsIDcxLCAyNDUsIDIyNSwgMTAsIDM0LCAyNDEsIAotICAgIDI0MiwgMTAsIDM0LCAyNTEsIDcxLCAyNDAsIDI1MiwgMTAsIDM0LCAyNTEsIDIwMiwgMTAsIDM0LCAyNDIsIDIyOSwgMTAsIAotICAgIDM0LCAyNTEsIDcxLCAyNDQsIDk4LCAxMCwgMzQsIDI1MSwgNzEsIDI1MSwgMjQ1LCAxMCwgMzQsIDI1MSwgNzEsIDIyMiwgMywgCi0gICAgMTAsIDM0LCAyMTksIDE2MiwgMjEyLCAyLCAxMCwgMzQsIDIxOSwgMTYyLCAyMTEsIDQxLCAxMCwgMzQsIDI1MSwgNzEsIAotICAgIDI0MywgMjUyLCAxMCwgMzQsIDIzNSwgMTQ5LCAyNDUsIDQ5LCAxMCwgMzQsIDI1MSwgNzEsIDI0NSwgNDksIDEwLCAzNCwgCi0gICAgMjM1LCAxNDksIDIxNiwgMTYsIDEwLCAzNCwgMjUxLCA3MSwgMjE2LCAxNiwgMTAsIDM0LCAyMzUsIDE0OSwgMjQ2LCAxMDQsIAotICAgIDEwLCAzNCwgMjUxLCA3MSwgMjQ2LCAxMDQsIDEwLCAzNCwgMjE1LCA5MSwgMTAsIDM0LCAyMzUsIDE0OSwgMjE1LCA5MSwgCi0gICAgMTAsIDM0LCAyNTEsIDcxLCAyMTUsIDkxLCA2MCwgMzQsIDExMSwgNjAsIDM0LCAyMzIsIDIxOSwgNjAsIDM0LCAyNDcsIAotICAgIDEyOCwgNjAsIDM0LCAyMTksIDk3LCA2MCwgMzQsIDIyMSwgMTc3LCA2MCwgMzQsIDEwMywgNjAsIDM0LCAxMDUsIDYwLCAzNCwgCi0gICAgMjMyLCAyNDMsIDYwLCAzNCwgMjMxLCAxOTAsIDYwLCAzNCwgMjMzLCAzOSwgNjAsIDM0LCAyNDUsIDEzNywgNjAsIDM0LCAKLSAgICAxOTYsIDYwLCAzNCwgMTI0LCAyNTEsIDE3MSwgNjAsIDM0LCAyNDksIDE1NSwgNjAsIDM0LCAyNDAsIDExOCwgNjAsIDM0LCAKLSAgICAyMTcsIDkzLCA2MCwgMzQsIDIwNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjM0LCAzOCwgNjAsIDM0LCAyMjQsIDIyNywgNjAsIAotICAgIDM0LCAyMTEsIDIwMiwgNjAsIDM0LCAyMTgsIDI0NSwgNjAsIDM0LCA0NCwgMjA0LCAyNTEsIDE3MSwgNjAsIDM0LCAyNDEsIAotICAgIDE4MywgMjQ1LCAxNTMsIDYwLCAzNCwgMjE2LCAyNDgsIDYwLCAzNCwgMjQ3LCAxNzgsIDYwLCAzNCwgMjIxLCAxODEsIDYwLCAKLSAgICAzNCwgMjUwLCAxOCwgNjAsIDM0LCAyMjQsIDE4NSwgNjAsIDM0LCAyNTQsIDIyNCwgNjAsIDM0LCAyMzAsIDExNSwgNjAsIAotICAgIDM0LCAyNDUsIDE1MywgNjAsIDM0LCAyNDUsIDIzMSwgNjAsIDM0LCAyMjEsIDIwMiwgNjAsIDM0LCAyNDIsIDE4MSwgNjAsIAotICAgIDM0LCAyNDIsIDE4MiwgMjE5LCA4MywgNjAsIDM0LCAyNDUsIDQ4LCA2MCwgMzQsIDI1MiwgMCwgNjAsIDM0LCAyMTEsIDIyMSwgCi0gICAgNjAsIDM0LCAyNTAsIDEwOSwgNjAsIDM0LCAyMjIsIDE5OCwgNjAsIDM0LCAyMzYsIDIsIDYwLCAzNCwgMjE5LCA4MSwgNjAsIAotICAgIDM0LCAyMzMsIDEwMiwgNjAsIDM0LCAyNDksIDE2NCwgNjAsIDM0LCAyMTgsIDIzOSwgNjAsIDM0LCAyMzAsIDEyMCwgNjAsIAotICAgIDM0LCAyMjIsIDIyNywgNjAsIDM0LCAyMTEsIDIwNiwgNjAsIDM0LCAyMjYsIDE5NCwgNjAsIDM0LCAyMTUsIDk4LCA2MCwgCi0gICAgMzQsIDI0NiwgODgsIDYwLCAzNCwgMjE5LCAyNTMsIDIxNiwgMTQ2LCA2MCwgMzQsIDI0NiwgMTI2LCAyNTAsIDE4LCA2MCwgCi0gICAgMzQsIDIwMCwgMjE4LCAxMTAsIDYwLCAzNCwgMTEzLCAyNDIsIDE3LCA2MCwgMzQsIDIyMCwgMiwgNjAsIDM0LCAyNTEsIAotICAgIDE3NywgNjAsIDM0LCAyMTksIDY3LCA2MCwgMzQsIDI1MSwgMTQ1LCA2MCwgMzQsIDIxOCwgMTQwLCA2MCwgMzQsIDI0MSwgCi0gICAgMjM0LCA2MCwgMzQsIDI0MiwgMzUsIDYwLCAzNCwgMjQ3LCAxMzEsIDYwLCAzNCwgMjQyLCAyMiwgNjAsIDM0LCAyNTEsIAotICAgIDE2MiwgNjAsIDM0LCAyMjMsIDE1MCwgNjAsIDM0LCAyMjEsIDE4OSwgNjAsIDM0LCAyNDcsIDIwNywgNjAsIDM0LCAyNTMsIAotICAgIDE3NiwgNjAsIDM0LCAyMTgsIDIzNiwgNjAsIDM0LCAyMjgsIDU2LCA2MCwgMzQsIDIxOCwgMzgsIDYwLCAzNCwgMjIxLCAKLSAgICAyMTMsIDYwLCAzNCwgMjMwLCAxMzMsIDYwLCAzNCwgMjE1LCAyMzYsIDYwLCAzNCwgMjMzLCAxMjgsIDYwLCAzNCwgMjE4LCAKLSAgICAxMzEsIDYwLCAzNCwgMjQ4LCA5NiwgNjAsIDM0LCAyMTIsIDIxLCA2MCwgMzQsIDI0NywgMTU0LCAyMjgsIDU2LCA2MCwgMzQsIAotICAgIDI0OSwgMjIzLCA2MCwgMzQsIDI0MywgMjI5LCA2MCwgMzQsIDI1MCwgMjksIDYwLCAzNCwgMjE4LCAxNDQsIDYwLCAzNCwgCi0gICAgMjEyLCA0MCwgNjAsIDM0LCAyNDQsIDEwNCwgNjAsIDM0LCAyNTAsIDI2LCA2MCwgMzQsIDI0NCwgMTY5LCA2MCwgMzQsIDUyLCAKLSAgICAyMTEsIDE3OCwgNjAsIDM0LCAxNjMsIDIxNSwgMjM3LCAyMTUsIDE4OSwgNjAsIDM0LCAyMTksIDkxLCA2MCwgMzQsIDI0NCwgCi0gICAgMTc5LCA2MCwgMzQsIDI0OSwgMTUzLCA2MCwgMzQsIDI0NywgMTQ0LCA2MCwgMzQsIDIyNCwgMTgyLCA2MCwgMzQsIDIzNSwgCi0gICAgMTQzLCA2MCwgMzQsIDIzMSwgNzIsIDYwLCAzNCwgMjE2LCA4OSwgNjAsIDM0LCAyMTcsIDI0NiwgNjAsIDM0LCAyMzIsIAotICAgIDIzNywgNjAsIDM0LCAyMTQsIDEzMSwgNjAsIDM0LCAyNDQsIDEyOCwgNjAsIDM0LCAyNTEsIDIwNiwgNjQsIDI1MCwgMiwgCi0gICAgNjAsIDM0LCAyMTksIDE5MCwgNjAsIDM0LCAyNDYsIDEyNiwgMjE2LCAyNDMsIDYwLCAzNCwgMjExLCAyNTMsIDYwLCAzNCwgCi0gICAgMjE5LCAxMDUsIDYwLCAzNCwgMjQ3LCAxOTUsIDYwLCAzNCwgMjQ1LCAyMywgNjAsIDM0LCAyMTksIDcsIDYwLCAzNCwgNzUsIAotICAgIDYwLCAzNCwgMjE4LCAxMzMsIDYwLCAzNCwgMjE4LCAyNTAsIDYwLCAzNCwgMjE2LCAwLCA2MCwgMzQsIDI0MiwgMTU0LCA2MCwgCi0gICAgMzQsIDI1MCwgMjI2LCA2MCwgMzQsIDIxOCwgMTYyLCA2MCwgMzQsIDI1MiwgMTYyLCA2MCwgMzQsIDIyMywgMzQsIDYwLCAKLSAgICAzNCwgMjE5LCAxNjksIDYwLCAzNCwgMjM1LCAxMzYsIDYwLCAzNCwgMjI5LCA5NCwgNjAsIDM0LCAyMjAsIDU5LCA2MCwgMzQsIAotICAgIDI0NCwgMTU3LCA2MCwgMzQsIDIyNiwgMjEzLCA2MCwgMzQsIDI1NCwgMTI2LCA2MCwgMzQsIDIyNSwgMzIsIDYwLCAzNCwgCi0gICAgMjQ1LCAyMzUsIDYwLCAzNCwgMjUxLCAxNDAsIDYwLCAzNCwgMjMxLCA5MSwgNjAsIDM0LCAyMzAsIDE4OCwgNjAsIDM0LCAKLSAgICAyMjAsIDE1OCwgNjAsIDM0LCAyNTQsIDQsIDYwLCAzNCwgMjMwLCAxMjgsIDYwLCAzNCwgMjE2LCAyMCwgNjAsIDM0LCAyMjYsIAotICAgIDE2OSwgNjAsIDM0LCAyNTEsIDIwOSwgNjAsIDM0LCAyMTgsIDEyOSwgNjAsIDM0LCAyNDksIDIzMywgNjAsIDM0LCAyNDIsIAotICAgIDE0NiwgNjAsIDM0LCAyMTYsIDEwNywgNjAsIDM0LCAyMzUsIDIyNCwgNjAsIDM0LCAyNTEsIDIxOSwgNjAsIDM0LCAyMTIsIAotICAgIDU4LCAyNDUsIDE1MywgNjAsIDM0LCAyNTAsIDEsIDYwLCAzNCwgMjEyLCA4LCA2MCwgMzQsIDIyMSwgMTcyLCA2MCwgMzQsIAotICAgIDI0MCwgMjU1LCA2MCwgMzQsIDIxOSwgNCwgNjAsIDM0LCAyMTQsIDIyLCA2MCwgMzQsIDI1MiwgODAsIDYwLCAzNCwgMjI1LCAKLSAgICA3NiwgNjAsIDM0LCAyNTIsIDE4MiwgNjAsIDM0LCAyMjAsIDU0LCA2MCwgMzQsIDIyMywgMTEzLCA2MCwgMzQsIDIyMiwgCi0gICAgMTI4LCA2MCwgMzQsIDI0NCwgNDAsIDYwLCAzNCwgMjUxLCAyMDgsIDYwLCAzNCwgMjUwLCAyMzYsIDYwLCAzNCwgMjUxLCAKLSAgICAyMzQsIDYwLCAzNCwgMjMwLCAxMzAsIDYwLCAzNCwgMjEyLCA1NywgNjAsIDM0LCAyNTAsIDM1LCA2MCwgMzQsIDIxMSwgCi0gICAgMjM2LCA2MCwgMzQsIDI0NywgMTg4LCA2MCwgMzQsIDIxMywgMTYxLCA2MCwgMzQsIDI0MiwgMTczLCA2MCwgMzQsIDIzMiwgCi0gICAgMTQzLCA2MCwgMzQsIDI0MywgOTUsIDYwLCAzNCwgMjMwLCAxMjMsIDYwLCAzNCwgMjE5LCA5NiwgNjAsIDM0LCAyMTksIAotICAgIDI1MywgMjE3LCA3NywgMjUxLCAyNDUsIDYwLCAzNCwgMjIzLCAxNjIsIDYwLCAzNCwgMjUxLCAyMTUsIDYwLCAzNCwgMjExLCAKLSAgICAxOTcsIDYwLCAzNCwgMjQ0LCAxOTgsIDYwLCAzNCwgMjMzLCA1OCwgNjAsIDM0LCAyMTcsIDU3LCAyMzMsIDU4LCA2MCwgMzQsIAotICAgIDIzMywgNTQsIDYwLCAzNCwgMjE5LCAzMiwgNjAsIDM0LCAyMzMsIDU5LCA2MCwgMzQsIDIxMSwgMjM5LCA2MCwgMzQsIDI0NCwgCi0gICAgNTQsIDYwLCAzNCwgMjQ1LCAyMjUsIDYwLCAzNCwgMjQxLCAyNDIsIDYwLCAzNCwgMjQ0LCA4LCA2MCwgMzQsIDI0MCwgMjUyLCAKLSAgICA2MCwgMzQsIDI1MSwgMjAyLCA2MCwgMzQsIDIxNywgNjQsIDYwLCAzNCwgMjQyLCA0MSwgNjAsIDM0LCAyNDQsIDEyMSwgNjAsIAotICAgIDM0LCAyMjIsIDMwLCAyMTEsIDIzNiwgNjAsIDM0LCAyNTAsIDIyOCwgNjAsIDM0LCAyNDIsIDIyOSwgNjAsIDM0LCAyNDQsIAotICAgIDk4LCA2MCwgMzQsIDI1MSwgMjQ1LCA2MCwgMzQsIDIyMiwgMywgNjAsIDM0LCAyNDgsIDgyLCA2MCwgMzQsIDIxMiwgMiwgCi0gICAgNjAsIDM0LCAyNDEsIDIxNywgNjAsIDM0LCAyMTEsIDQxLCA2MCwgMzQsIDIzMCwgMTk3LCA2MCwgMzQsIDI1MSwgMjI5LCAKLSAgICA2MCwgMzQsIDI0NSwgMTYzLCA2MCwgMzQsIDI0MywgMjUyLCA2MCwgMzQsIDIxNSwgMjEwLCA2MCwgMzQsIDI0NiwgOTAsIAotICAgIDYwLCAzNCwgMjIzLCAxNDQsIDYwLCAzNCwgMjI4LCA1OCwgNjAsIDM0LCAyNDUsIDQ5LCA2MCwgMzQsIDIxNiwgMTYsIDYwLCAKLSAgICAzNCwgMjQ2LCAxMDQsIDYwLCAzNCwgMjE1LCA5MSwgNjAsIDM0LCAyNDQsIDU2LCAxMTAsIDI0OCwgNDUsIDEzNSwgNDMsIAotICAgIDIxNiwgNDMsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgNzIsIDIxNiwgNDMsIDUxLCAxMTAsIDI0OCwgNDUsIDEzNSwgCi0gICAgNDMsIDIxNiwgNDMsIDIzMCwgMjI5LCAyMiwgMjIyLCAyNTQsIDExMCwgMjQ4LCA0NSwgMTM1LCA3MiwgMjE2LCA0MywgMjMwLCAKLSAgICAyMjksIDIyLCA1MSwgMTEwLCAyNDgsIDQ1LCAxMzUsIDI0MywgMjM2LCAyMTgsIDExLCAxMTAsIDI0OCwgNDUsIDEzNSwgCi0gICAgMjE4LCAxMiwgMjQzLCAyNTEsIDQ4LCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDUxLCAxMTAsIAotICAgIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIzMywgNTIsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAKLSAgICAyNDMsIDI1MSwgMjE0LCAxNjAsIDIzMywgNTIsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgMjE0LCAKLSAgICAxNjAsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIzMiwgMTE0LCAyMzMsIDUyLCAKLSAgICAxMTAsIDI0OCwgNDUsIDEzNSwgMjI2LCAxMjYsIDExMCwgMjE5LCAyMCwgMTEwLCAyNDksIDIyNywgMTEwLCAyNDMsIDIzNiwgCi0gICAgMjE4LCAxMzEsIDI0NywgMTg1LCA3OSwgMjM1LCAxMzcsIDIzNSwgMjQzLCAyMTgsIDE2MSwgODcsIDExMCwgMjM1LCAxNjQsIAotICAgIDc5LCAxMTAsIDI1MCwgNCwgNzksIDExMCwgNTQsIDIxMCwgODYsIDQzLCAyNTQsIDExOCwgMTI3LCA0NCwgMjU0LCAxMTgsIAotICAgIDEyNywgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCA0NCwgNTIsIDI1NCwgMTE4LCAxMjcsIDQzLCAyNDksIDE2OSwgMTI3LCA0NCwgCi0gICAgMjQ5LCAxNjksIDEyNywgNDMsIDcxLCAyNDksIDE2OSwgMTI3LCA0NCwgNzEsIDI0OSwgMTY5LCAxMjcsIDQzLCA4NSwgMjMzLCAKLSAgICAyNiwgMTI3LCA0NCwgODUsIDIzMywgMjYsIDEyNywgMjI0LCAyNDAsIDc5LCAyNDMsIDM5LCA3OSwgNDMsIDIxNiwgNywgCi0gICAgMjIwLCA1NSwgMTI3LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQzLCA3MSwgMjMzLCAyNiwgMTI3LCA0NCwgNzEsIAotICAgIDIzMywgMjYsIDEyNywgNDMsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgNDQsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgCi0gICAgNDMsIDcxLCA0MiwgMTI3LCA0NCwgNzEsIDQyLCAxMjcsIDIxMiwgMzYsIDI0OCwgMTY0LCAyMjMsIDUyLCA1MiwgMjI0LCAKLSAgICAxOTQsIDIyNCwgMSwgNzksIDUyLCAyMjQsIDE5NCwgMjI0LCAxLCA3OSwgMTIxLCA1MiwgMjI0LCAxOTQsIDIyNCwgMSwgNzksIAotICAgIDIyNCwgMjQwLCAxNjQsIDI0NCwgMTk4LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTExLCAyNDIsIDE1LCAyMjcsIDIwMiwgMTA1LCAKLSAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMTU4LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTYxLCAyNDIsIDE1LCAyMjcsIDIwMiwgMTkwLCAKLSAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMTk1LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTk5LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTk2LCAKLSAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMjAxLCAxMTAsIDIzMywgOSwgMTM4LCA3OSwgMTEwLCAyMjIsIDIzMSwgMTM4LCA3OSwgCi0gICAgMTEwLCAyNDgsIDUyLCAxMzgsIDc5LCAxMTAsIDI0NSwgMTM2LCAxMzgsIDc5LCAyNCwgMjE5LCAxNTcsIDU5LCAxMzgsIDc5LCAKLSAgICAyNCwgNTIsIDU5LCAxMzgsIDc5LCAyMTIsIDMyLCAyNDgsIDE2NCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCA3OSwgNjcsIAotICAgIDIzNCwgMjM5LCAyMjMsIDgwLCAyLCAyMTMsIDEzNSwgMjE5LCAzMywgNzksIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMTY0LCAKLSAgICAyMTQsIDE2MCwgMjQyLCAzNCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCAyLCAyMTMsIDEzNSwgMjE5LCAzMywgMTY0LCAyMTQsIAotICAgIDE2MCwgMjQyLCAzNCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCAxNjQsIDIzMiwgMTE0LCAyNDIsIDM0LCAzNywgMjI0LCAKLSAgICAyNDAsIDc5LCAxMTAsIDIxNywgNCwgMjMyLCAyMjAsIDI0NCwgMTU0LCAyMjAsIDE0MCwgODcsIDI0MiwgMTUsIDIyNywgCi0gICAgMjAyLCAyMTYsIDI0OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDIxNSwgNzMsIDI0MiwgMTUsIDIyNywgMjAyLCAyMTYsIDE2MywgCi0gICAgNjcsIDExMCwgMjM1LCAxNjQsIDc5LCAyMzEsIDE0NSwgNzksIDIyNiwgMywgMjU0LCAxNDgsIDc5LCAxMTAsIDQ1LCAyMzUsIAotICAgIDI0NSwgMTEwLCAxNjMsIDI0NCwgMTE0LCAyMTksIDIwLCAxNDEsIDEsIDQsIDYxLCAxNDEsIDEsIDYxLCAxNDEsIDEsIDQsIAotICAgIDc0LCAxNDEsIDEsIDc0LCAxNDEsIDEsIDQsIDY5LCAxNDEsIDEsIDY5LCAxNDEsIDEsIDQsIDc2LCAxNDEsIDEsIDc2LCAKLSAgICAxNDEsIDEsIDQsIDc4LCAxNDEsIDEsIDc4LCAxNDEsIDEsIDE3NiwgMTQxLCAxLCAyNDMsIDE0MiwgMTQxLCAxLCAyMzQsIAotICAgIDk4LCAxNDEsIDEsIDI0MiwgMjIxLCAxNDEsIDEsIDIzMywgMjIzLCAxNDEsIDEsIDI0MiwgMTIwLCAxNDEsIDEsIDIzNCwgCi0gICAgMTg4LCAxNDEsIDEsIDI0MywgNjksIDE0MSwgMSwgMjM0LCAzNCwgMTQxLCAxLCAyNDIsIDE4MSwgMTQxLCAxLCAyMDYsIAotICAgIDE0MSwgMSwgMjEwLCAxMTYsIDE0MSwgMSwgMjE5LCAxOTMsIDE0MSwgMSwgMjEwLCA0NCwgMTQxLCAxLCAyMTgsIDg0LCAKLSAgICAxNDEsIDEsIDIxMCwgMTMsIDE0MSwgMSwgMjIxLCAxODMsIDE0MSwgMSwgMjEwLCA5NCwgMTQxLCAxLCAyMTksIDYwLCAxNDEsIAotICAgIDEsIDIxMCwgMjMsIDE0MSwgMSwgMjE3LCAxMDYsIDE0MSwgMSwgMjQ4LCAyMjksIDE0MSwgMSwgMjE2LCAxMTgsIDE0MSwgMSwgCi0gICAgMjQ4LCAxMSwgMTQxLCAxLCA0LCAyMTUsIDExOSwgMTQxLCAxLCAyMTUsIDExOSwgMTQxLCAxLCAyNDYsIDg2LCAxNDEsIDEsIAotICAgIDIxNywgMjMsIDE0MSwgMSwgMjQ4LCA5OCwgMTQxLCAxLCAxMTIsIDE0MSwgMSwgMjQ3LCAxNTMsIDE0MSwgMSwgMTk4LCAKLSAgICAxNDEsIDEsIDIyOCwgMjM4LCAxNDEsIDEsIDIyNywgMjQyLCAxNDEsIDEsIDIyOSwgMTEyLCAxNDEsIDEsIDIyOCwgNzksIAotICAgIDE0MSwgMSwgMTYyLCAxNDEsIDEsIDI1MiwgMTk5LCAxNDEsIDEsIDE5MSwgMTQxLCAxLCAyNDEsIDE4NywgMTQxLCAxLCAKLSAgICAyNTIsIDE0LCAxNDEsIDEsIDIyNSwgMTExLCAxNDEsIDEsIDI0MCwgMjI5LCAxNDEsIDEsIDI1MSwgMTMzLCAxNDEsIDEsIAotICAgIDIyNCwgMTUzLCAxNDEsIDEsIDI0MSwgMjQ1LCAxNDEsIDEsIDI1MiwgODMsIDE0MSwgMSwgMjI1LCAyMjQsIDE0MSwgMSwgCi0gICAgMjQxLCA3NSwgMTQxLCAxLCAyNTEsIDIxMywgMTQxLCAxLCAyMjUsIDE5LCAxNDEsIDEsIDE4NiwgMTQxLCAxLCAyMzAsIAotICAgIDIzNSwgMTQxLCAxLCAyMzAsIDEwNywgMTQxLCAxLCAyMzEsIDk2LCAxNDEsIDEsIDIzMCwgMTY2LCAxNDEsIDEsIDQsIDE5MiwgCi0gICAgMTQxLCAxLCAxOTIsIDE0MSwgMSwgNCwgMjEwLCAyMTIsIDE0MSwgMSwgMjEwLCAyMTIsIDE0MSwgMSwgNCwgMjEwLCAyNDQsIAotICAgIDE0MSwgMSwgMjEwLCAyNDQsIDE0MSwgMSwgMjA1LCAxNDEsIDEsIDIyMywgMzgsIDE0MSwgMSwgMjIyLCAxNDIsIDE0MSwgMSwgCi0gICAgMjIzLCAxMzEsIDE0MSwgMSwgMjIyLCAyMTMsIDE0MSwgMSwgNCwgMjEyLCA2NSwgMTQxLCAxLCAyMTIsIDY1LCAxNDEsIDEsIAotICAgIDIxMSwgMjUwLCAxNDEsIDEsIDIxMiwgMjIsIDE0MSwgMSwgMjExLCAyMjcsIDE0MSwgMSwgMjMwLCAzMCwgMTQxLCAxLCAKLSAgICAyMTIsIDExNiwgMTQxLCAxLCA0LCAxNzYsIDE0MSwgMSwgNCwgMjM0LCAxODgsIDM4LCAyMzQsIDIwNywgMjEzLCAxMzUsIAotICAgIDIxOSwgMzMsIDc5LCAzOCwgMjM0LCAyMDcsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMjM0LCAyMDcsIDIxMywgMTM1LCAKLSAgICAyMTksIDMzLCA3OSwgMjM0LCAyMDcsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMTQxLCAyMzUsIDE2NCwgNzksIDE0MSwgCi0gICAgMjEzLCAxMzUsIDIzNSwgMTY0LCA3OSwgMTQxLCAyNDcsIDIyOSwgMjEwLCAyMjUsIDIzNCwgMjA3LCA1MiwgMjQwLCAxNzUsIAotICAgIDU2LCAxLCA0LCA2MSwgNTYsIDEsIDYxLCA1NiwgMSwgNCwgNzQsIDU2LCAxLCA3NCwgNTYsIDEsIDQsIDY5LCA1NiwgMSwgCi0gICAgNjksIDU2LCAxLCA0LCA3NiwgNTYsIDEsIDc2LCA1NiwgMSwgNCwgNzgsIDU2LCAxLCA3OCwgNTYsIDEsIDE3NiwgNTYsIDEsIAotICAgIDI0MywgMTQyLCA1NiwgMSwgMjM0LCA5OCwgNTYsIDEsIDI0MiwgMjIxLCA1NiwgMSwgMjMzLCAyMjMsIDU2LCAxLCAyNDIsIAotICAgIDEyMCwgNTYsIDEsIDIzNCwgMTg4LCA1NiwgMSwgMjQzLCA2OSwgNTYsIDEsIDIzNCwgMzQsIDU2LCAxLCAyNDIsIDE4MSwgCi0gICAgNTYsIDEsIDIwNiwgNTYsIDEsIDIxMCwgMTE2LCA1NiwgMSwgMjE5LCAxOTMsIDU2LCAxLCAyMTAsIDQ0LCA1NiwgMSwgMjE4LCAKLSAgICA4NCwgNTYsIDEsIDIxMCwgMTMsIDU2LCAxLCAyMjEsIDE4MywgNTYsIDEsIDIxMCwgOTQsIDU2LCAxLCAyMTksIDYwLCA1NiwgCi0gICAgMSwgMjEwLCAyMywgNTYsIDEsIDIxNywgMTA2LCA1NiwgMSwgMjQ4LCAyMjksIDU2LCAxLCAyMTYsIDExOCwgNTYsIDEsIAotICAgIDI0OCwgMTEsIDU2LCAxLCA0LCAyMTUsIDExOSwgNTYsIDEsIDIxNSwgMTE5LCA1NiwgMSwgMjQ2LCA4NiwgNTYsIDEsIDIxNywgCi0gICAgMjMsIDU2LCAxLCAyNDgsIDk4LCA1NiwgMSwgMTEyLCA1NiwgMSwgMjQ3LCAxNTMsIDU2LCAxLCAxOTgsIDU2LCAxLCAyMjgsIAotICAgIDIzOCwgNTYsIDEsIDIyNywgMjQyLCA1NiwgMSwgMjI5LCAxMTIsIDU2LCAxLCAyMjgsIDc5LCA1NiwgMSwgMTYyLCA1NiwgMSwgCi0gICAgMjUyLCAxOTksIDU2LCAxLCAxOTEsIDU2LCAxLCAyNDEsIDE4NywgNTYsIDEsIDI1MiwgMTQsIDU2LCAxLCAyMjUsIDExMSwgCi0gICAgNTYsIDEsIDI0MCwgMjI5LCA1NiwgMSwgMjUxLCAxMzMsIDU2LCAxLCAyMjQsIDE1MywgNTYsIDEsIDI0MSwgMjQ1LCA1NiwgCi0gICAgMSwgMjUyLCA4MywgNTYsIDEsIDIyNSwgMjI0LCA1NiwgMSwgMjQxLCA3NSwgNTYsIDEsIDI1MSwgMjEzLCA1NiwgMSwgMjI1LCAKLSAgICAxOSwgNTYsIDEsIDE4NiwgNTYsIDEsIDIzMCwgMjM1LCA1NiwgMSwgMjMwLCAxMDcsIDU2LCAxLCAyMzEsIDk2LCA1NiwgMSwgCi0gICAgMjMwLCAxNjYsIDU2LCAxLCA0LCAxOTIsIDU2LCAxLCAxOTIsIDU2LCAxLCA0LCAyMTAsIDIxMiwgNTYsIDEsIDIxMCwgMjEyLCAKLSAgICA1NiwgMSwgNCwgMjEwLCAyNDQsIDU2LCAxLCAyMTAsIDI0NCwgNTYsIDEsIDIwNSwgNTYsIDEsIDIyMywgMzgsIDU2LCAxLCAKLSAgICAyMjIsIDE0MiwgNTYsIDEsIDIyMywgMTMxLCA1NiwgMSwgMjIyLCAyMTMsIDU2LCAxLCA0LCAyMTIsIDY1LCA1NiwgMSwgCi0gICAgMjEyLCA2NSwgNTYsIDEsIDIxMSwgMjUwLCA1NiwgMSwgMjEyLCAyMiwgNTYsIDEsIDIxMSwgMjI3LCA1NiwgMSwgMjMwLCAKLSAgICAzMCwgNTYsIDEsIDIxMiwgMTE2LCA1NiwgMSwgNCwgMTc2LCA1NiwgMSwgNCwgMjM0LCAxODgsIDU2LCAxLCAyMTQsIDI3LCAKLSAgICA1NiwgMSwgMjEzLCAxNzYsIDU2LCAxLCAyMTMsIDI1NSwgNTYsIDEsIDIxMywgMTM4LCA1NiwgMjMwLCAyMjksIDI0NywgCi0gICAgMTI4LCAyMzQsIDIwNywgMjI0LCAxNzYsIDIxOSwgMzMsIDc5LCA1NiwgMjM1LCAxNjQsIDc5LCA1NiwgMjEzLCAxMzUsIAotICAgIDIzNSwgMTY0LCA3OSwgNTYsIDI0NywgMjI5LCAyMzQsIDUsIDI1MSwgMTkyLCAxLCAyNTMsIDE2NiwgMjUxLCAxOTIsIDEsIAotICAgIDIyNiwgMTA5LCAyNTEsIDE5MiwgMSwgMTk0LCAyNTEsIDE5MiwgMSwgMjQ1LCAxNCwgMjUxLCAxOTIsIDEsIDI0OSwgNjgsIAotICAgIDI1MSwgMTkyLCAxLCAyMTcsIDE1MywgMjUxLCAxOTIsIDEsIDIzMCwgMzAsIDI1MSwgMTkyLCAxLCAxNTYsIDI1MSwgMTkyLCAKLSAgICAxLCAyNDMsIDIwOSwgMjUxLCAxOTIsIDEsIDIzNSwgMjksIDI1MSwgMTkyLCAxLCAyNDIsIDY3LCAyNTEsIDE5MiwgMSwgCi0gICAgMjM1LCAxNTAsIDI1MSwgMTkyLCAxLCAyMjQsIDk5LCAyNTEsIDE5MiwgMSwgMjExLCAxNzgsIDI1MSwgMTkyLCAxLCAyMTAsIAotICAgIDgzLCAyNTEsIDE5MiwgMSwgMjUwLCAxNjYsIDI1MSwgMTkyLCAxLCAyMjAsIDEwNiwgMjUxLCAxOTIsIDEsIDE1MywgMjUxLCAKLSAgICAxOTIsIDEsIDIxMCwgMTU5LCAyNTEsIDE5MiwgMSwgMjUxLCA3NCwgMjUxLCAxOTIsIDEsIDIyMiwgOTMsIDI1MSwgMTkyLCAKLSAgICAxLCA2MSwgMjUxLCAxOTIsIDEsIDc4LCAyNTEsIDE5MiwgMSwgNzYsIDI1MSwgMTkyLCAxLCAyNDUsIDIwNSwgMjUxLCAxOTIsIAotICAgIDEsIDI1NCwgMjEwLCAyNTEsIDE5MiwgMSwgMjQ1LCAyMDMsIDI1MSwgMTkyLCAxLCAyNTMsIDIwMCwgMjUxLCAxOTIsIDEsIAotICAgIDIyNiwgMTM4LCAyNTEsIDE5MiwgMSwgMjU0LCAxMzEsIDI1MSwgMTkyLCAxLCAyNDUsIDE1OCwgMjUxLCAxOTIsIDEsIDI1NCwgCi0gICAgMTIzLCAyNTEsIDE5MiwgMSwgMjQ1LCAxNDYsIDI1MSwgMTkyLCAxLCAyNDUsIDEwMCwgMjUxLCAxOTIsIDEsIDc0LCAyNTEsIAotICAgIDE5MiwgMSwgNjksIDI1MSwgMTkyLCAxLCAyMzUsIDE2MiwgMjUxLCAxOTIsIDEsIDIxNCwgMTA1LCAyNTEsIDE5MiwgMSwgCi0gICAgMjI5LCA4NCwgMjUxLCAxOTIsIDEsIDI0MiwgMTg1LCAyNTEsIDE5MiwgMSwgMjM2LCA0MSwgMjQsIDEsIDIzNCwgNjQsIDI0LCAKLSAgICAxLCAyMTgsIDIxNywgMjQsIDEsIDIzNCwgNTcsIDI0LCAxLCAyMjgsIDIzMSwgMjQsIDEsIDIyOCwgMjI5LCAyNCwgMSwgCi0gICAgMjI4LCAyMjgsIDI0LCAxLCAyMTYsIDEwMiwgMjQsIDEsIDIxOCwgMjA2LCAyNCwgMSwgMjIzLCAyOSwgMjQsIDEsIDIyMywgCi0gICAgMjQsIDI0LCAxLCAyMjMsIDIxLCAyNCwgMSwgMjIzLCAxNCwgMjQsIDEsIDIyMywgOSwgMjQsIDEsIDIyMywgNCwgMjQsIDEsIAotICAgIDIyMywgMTUsIDI0LCAxLCAyMjMsIDI3LCAyNCwgMSwgMjMwLCAyMjIsIDI0LCAxLCAyMjUsIDk4LCAyNCwgMSwgMjE4LCAKLSAgICAyMTQsIDI0LCAxLCAyMjUsIDg3LCAyNCwgMSwgMjE5LCAxNTAsIDI0LCAxLCAyMTgsIDIxMSwgMjQsIDEsIDIzNiwgNjMsIAotICAgIDI0LCAxLCAyNTAsIDU0LCAyNCwgMSwgMjE4LCAyMjEsIDI0LCAxLCAyNTAsIDExNCwgMjQsIDEsIDIzNCwgMTE2LCAyNCwgMSwgCi0gICAgMjE2LCAxNzQsIDI0LCAxLCAyMjUsIDEzNCwgMjQsIDEsIDI0MSwgMTc5LCAyNCwgMSwgNjEsIDI0LCAxLCAyNTQsIDI1MiwgCi0gICAgMjQsIDEsIDE5MiwgMjQsIDEsIDIxMSwgOTIsIDI0LCAxLCAyNDUsIDEyNSwgMjQsIDEsIDc2LCAyNCwgMSwgMjExLCAzNiwgCi0gICAgMjQsIDEsIDIxMSwgNDcsIDI0LCAxLCA3OCwgMjQsIDEsIDIxMiwgNjUsIDI0LCAxLCAyMTIsIDYyLCAyNCwgMSwgMjI2LCAKLSAgICAyMzgsIDI0LCAxLCAyMTAsIDI0NCwgMjQsIDEsIDY5LCAyNCwgMSwgMjEyLCAxMSwgMjQsIDEsIDIxMiwgMjIsIDI0LCAxLCAKLSAgICAyMTEsIDI1MCwgMjQsIDEsIDIxMCwgMjEyLCAyNCwgMSwgMjQ1LCA2MywgMjQsIDEsIDIxMSwgOCwgMjQsIDEsIDc0LCAyNCwgCi0gICAgMjQ0LCAxMTEsIDI0LCAxLCAyMTgsIDIxNSwgMjQsIDEsIDIyOCwgMjIxLCAyNCwgMSwgMjI4LCAyMjMsIDI0LCAxLCAyMjgsIAotICAgIDIyNiwgMjQsIDEsIDIyMywgMjIsIDI0LCAxLCAyMjMsIDMsIDI0LCAxLCAyMjMsIDExLCAyNCwgMSwgMjIzLCAxNiwgMjQsIAotICAgIDEsIDIyMywgMSwgMjQsIDEsIDIzMCwgMjE1LCAyNCwgMSwgMjMwLCAyMTIsIDI0LCAxLCAyMzAsIDIxNiwgMjQsIDEsIDIzNCwgCi0gICAgMjI3LCAyNCwgMSwgMjI1LCA5MywgMjQsIDEsIDIyNSwgNzksIDI0LCAxLCAyMjUsIDg1LCAyNCwgMSwgMjI1LCA4MiwgMjQsIAotICAgIDEsIDIyNSwgOTYsIDI0LCAxLCAyMjUsIDgwLCAyNCwgMSwgMjM0LCAyMjUsIDI0LCAxLCAyMzQsIDIyMywgMjQsIDEsIDIxOSwgCi0gICAgMTQzLCAyNCwgMSwgMjE5LCAxNDEsIDI0LCAxLCAyMTksIDEzMywgMjQsIDEsIDIxOSwgMTM4LCAyNCwgMSwgMjE5LCAxNDgsIAotICAgIDI0LCAxLCAyMjYsIDM2LCAyNCwgMSwgMjE4LCAyMTgsIDI0LCAxLCAyMTEsIDI2LCAyNCwgMSwgMjExLCAyMiwgMjQsIDEsIAotICAgIDIxMSwgMjMsIDI0LCAxLCAyMzQsIDIyNiwgMjQsIDEsIDIxOCwgMjE5LCAyNCwgMSwgMjExLCAzMiwgMjQsIDEsIDIxMCwgCi0gICAgMjM4LCAyNCwgMSwgMjEwLCAyMzcsIDI0LCAxLCAyMTAsIDI0MCwgMjQsIDEsIDIxMCwgMjAzLCAyNCwgMSwgMjEwLCAyMDQsIAotICAgIDI0LCAxLCAyMTAsIDIwNywgMjQsIDEsIDI1NCwgNDIsIDI0LCAxLCAyNTQsIDM2LCAxMTAsIDI1NCwgMTA3LCAyMzIsIDIwOSwgCi0gICAgNzksIDExMCwgMjU0LCAxMDcsIDIyMywgNTMsIDc5LCAxMTAsIDI1NCwgMTA3LCAxMjMsIDc5LCAxMTAsIDI1NCwgMTA3LCAKLSAgICAxMTMsIDc5LCAxMTAsIDI1NCwgMTA3LCAxMzQsIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDE5LCA3OSwgMTEwLCAyNTQsIAotICAgIDEwNywgMjE2LCAxNSwgNzksIDExMCwgMjU0LCAxMDcsIDIzMCwgMjI5LCA3OSwgMTEwLCAyNTQsIDEwNywgMjUxLCAxODMsIAotICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDEwMCwgNzksIDExMCwgMjU0LCAxMDcsIDIyMSwgMTc4LCA3OSwgMTEwLCAyNTQsIAotICAgIDEwNywgMjE2LCAxNzAsIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDEyLCA3OSwgMTEwLCAyNTQsIDEwNywgMjQxLCAyMzEsIAotICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDUsIDIzMiwgNzksIDExMCwgMjU0LCAxMDcsIDIzMSwgMTkxLCA3OSwgMjUxLCAxOTIsIAotICAgIDEsIDI1MSwgMTMzLCAyNTEsIDE5MiwgMSwgMjEwLCA0NCwgMjUxLCAxOTIsIDEsIDIzNSwgMTE0LCAyNTEsIDE5MiwgMSwgCi0gICAgMjQyLCAxMjAsIDI1MSwgMTkyLCAxLCAyNDUsIDIxNywgMjUxLCAxOTIsIDEsIDI0NSwgMTQzLCAyNTEsIDE5MiwgMSwgMjI2LCAKLSAgICAxODcsIDI1MSwgMTkyLCAxLCAyMjYsIDE5MSwgMjUxLCAxOTIsIDEsIDIzNSwgMTg2LCAyNTEsIDE5MiwgMSwgMjU0LCAxMDksIAotICAgIDI1MSwgMTkyLCAxLCAyMzUsIDIzMSwgMjUxLCAxOTIsIDEsIDIxNCwgMTY4LCAyNTEsIDE5MiwgMSwgMjM2LCAyMywgMjUxLCAKLSAgICAxOTIsIDEsIDIyOSwgNjIsIDI1MSwgMTkyLCAxLCAyNTQsIDIwNCwgMjUxLCAxOTIsIDEsIDI1MywgMTk1LCAyNTEsIDE5MiwgCi0gICAgMSwgMjU0LCAxNDQsIDI1MSwgMTkyLCAxLCAyMjYsIDIwOCwgMjUxLCAxOTIsIDEsIDIyNiwgMTkzLCAyNTEsIDE5MiwgMSwgCi0gICAgMjM1LCAyMjgsIDI1MSwgMTkyLCA0MCwgMSwgMjI2LCAxMDksIDI1MSwgMTkyLCA0MCwgMSwgMjE3LCAxNTMsIDI1MSwgMTkyLCAKLSAgICA0MCwgMSwgMjM1LCAyOSwgMjUxLCAxOTIsIDQwLCAxLCAyNDIsIDY3LCAyNTEsIDE5MiwgMSwgMjQzLCAxLCAyNTEsIDE5MiwgCi0gICAgMSwgMjMzLCA1LCAyNTEsIDE5MiwgMSwgMjA5LCAyNTAsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTMsIDEwLCAyMTgsIDEwNSwgCi0gICAgMjEyLCA0LCAxMCwgMjE4LCAxMDUsIDIxMSwgMTU4LCAxMCwgMjE4LCAxMDUsIDI1MSwgODcsIDEwLCAyMTgsIDEwNSwgMjE3LCAKLSAgICAyNTUsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjUsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjksIDEwLCAyMTgsIDEwNSwgMjQwLCAKLSAgICAyMzgsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjYsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTYsIDEwLCAyMTgsIDEwNSwgMjQwLCAKLSAgICAxNjgsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjQsIDEwLCAyMTgsIDEwNSwgMjQwLCAyMzYsIDEwLCAyMTgsIDEwNSwgMjQwLCAKLSAgICAxNjcsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjMsIDEwLCAyMTgsIDEwNSwgMjMwLCAzMCwgMTAsIDIxOCwgMTA1LCAyNDIsIAotICAgIDY3LCAxMCwgMjE4LCAxMDUsIDIyMiwgOTMsIDEwLCAyMTgsIDEwNSwgMjI2LCAxMDksIDEwLCAyMTgsIDEwNSwgMjE5LCAyMywgCi0gICAgMTAsIDIxOCwgMTA1LCAyNDksIDY4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTcwLCAxMCwgMjE4LCAxMDUsIDI0MSwgMTk3LCAKLSAgICAxMCwgMjE4LCAxMDUsIDIxNywgMTY1LCAxMCwgMjE4LCAxMDUsIDIxNywgMjM0LCAxMCwgMjE4LCAxMDUsIDIxOCwgMTcwLCAKLSAgICAxMCwgMjE4LCAxMDUsIDIyMCwgMTEyLCAxMCwgMjE4LCAxMDUsIDIyNSwgMjI4LCAxMCwgMjE4LCAxMDUsIDIyNCwgMTAxLCAKLSAgICAxMCwgMjE4LCAxMDUsIDIxNiwgNDQsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTUsIDEwLCAyMTgsIDEwNSwgMjE3LCAyNDUsIAotICAgIDEwLCAyMTgsIDEwNSwgMjQwLCAxNzcsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjIsIDEwLCAyMTgsIDEwNSwgMjI1LCAxNTIsIAotICAgIDEwLCAyMTgsIDEwNSwgMjI0LCA5OSwgNTYsIDEsIDQsIDIzMywgMjIzLCA1NiwgMSwgNCwgMjE5LCAxOTMsIDU2LCAxLCA0LCAKLSAgICAyMTgsIDg0LCA1NiwgMSwgNCwgMTEyLCA1NiwgMSwgNCwgMjI3LCAyNDIsIDU2LCAxLCA0LCAxNjIsIDU2LCAxLCA0LCAyNDEsIAotICAgIDE4NywgNTYsIDEsIDQsIDI0MCwgMjI5LCA1NiwgMSwgNCwgMjQxLCAyNDUsIDU2LCAxLCA0LCAyNDEsIDc1LCA1NiwgMSwgNCwgCi0gICAgMjMwLCAxMDcsIDU2LCAxLCA0LCAyMDUsIDU2LCAxLCA0LCAyMjMsIDM4LCA1NiwgMSwgNCwgMjIyLCAxNDIsIDU2LCAxLCA0LCAKLSAgICAyMjMsIDEzMSwgNTYsIDEsIDQsIDIyMiwgMjEzLCA4OCwgMjQsIDIzNCwgNjQsIDg4LCAyNCwgMjI4LCAyMzEsIDg4LCAyNCwgCi0gICAgMjE2LCAxMDIsIDg4LCAyNCwgMjIzLCAyOSwgODgsIDI0LCAyMzAsIDIyMiwgODgsIDI0LCAyMjUsIDk4LCA4OCwgMjQsIAotICAgIDIxOSwgMTUwLCA4OCwgMjQsIDIzNiwgNjMsIDg4LCAyNCwgMjUwLCA1NCwgODgsIDI0LCAyNTAsIDExNCwgODgsIDI0LCAKLSAgICAyMzQsIDExNiwgODgsIDI0LCAyMTYsIDE3NCwgODgsIDI0LCAyMjUsIDEzNCwgODgsIDI0LCAyNDEsIDE3OSwgODgsIDI0LCAKLSAgICAyMzQsIDY1LCA2MSwgODgsIDI0LCAyMjgsIDIzMiwgNjEsIDg4LCAyNCwgMjE2LCAxMDMsIDYxLCA4OCwgMjQsIDIyMywgMzAsIAotICAgIDYxLCA4OCwgMjQsIDIzMCwgMjIzLCA2MSwgODgsIDI0LCAyMjUsIDk5LCA2MSwgODgsIDI0LCAyMTksIDE1MSwgNjEsIDg4LCAKLSAgICAyNCwgMjM2LCA2NCwgNjEsIDg4LCAyNCwgMjUwLCA1NSwgNjEsIDg4LCAyNCwgMjUwLCAxMTUsIDYxLCA4OCwgMjQsIDIzNCwgCi0gICAgMTE3LCA2MSwgODgsIDI0LCAyMTYsIDE3NSwgNjEsIDg4LCAyNCwgMjI1LCAxMzUsIDYxLCA4OCwgMjQsIDI0MSwgMTgwLCAKLSAgICA2MSwgODgsIDI0LCAyNTAsIDU1LCA2OSwgODgsIDIzNCwgOSwgMTM1LCAyMjYsIDIyMSwgODgsIDIzNCwgOSwgMTM1LCAxNDQsIAotICAgIDI0MCwgMjI5LCA4OCwgMTU0LCAxMTEsIDg4LCAxNTQsIDEwNSwgODgsIDE1NCwgMTU4LCA4OCwgMTU0LCAxNjEsIDg4LCAKLSAgICAxNTQsIDE5MCwgODgsIDE1NCwgMTk1LCA4OCwgMTU0LCAxOTksIDg4LCAxNTQsIDE5NiwgODgsIDE1NCwgMjAxLCA4OCwgCi0gICAgMTU0LCAyMTYsIDI0OCwgODgsIDE1NCwgMjMwLCAxMzMsIDg4LCAxNTQsIDI0NCwgMTA0LCA4OCwgMTU0LCAyMTIsIDQwLCAKLSAgICA4OCwgMTU0LCAyMTEsIDIxNCwgODgsIDE1NCwgMjMxLCA0NCwgODgsIDE1NCwgMjQ1LCAyMzEsIDg4LCAxNTQsIDIxOCwgMzgsIAotICAgIDg4LCAxNTQsIDIxOCwgMTM0LCA4OCwgMTU0LCAyNDEsIDI1MSwgODgsIDE1NCwgMjE5LCA1NiwgODgsIDE1NCwgMjI5LCAKLSAgICAyMDksIDg4LCAxNTQsIDIxOSwgNiwgODgsIDE1NCwgMjQ0LCAxMTAsIDg4LCAxNTQsIDI0OSwgMjA4LCA4OCwgMTU0LCAyMzMsIAotICAgIDEzMSwgODgsIDE1NCwgMjIzLCA3NCwgODgsIDE1NCwgMjUxLCAyMywgODgsIDE1NCwgMjE4LCA4OCwgODgsIDE1NCwgMjE4LCAKLSAgICAyMSwgODgsIDE1NCwgMjQ1LCAxMzUsIDg4LCAxNTQsIDIyMywgNjYsIDg4LCAxNTQsIDI1NCwgMTU5LCA4OCwgMTU0LCAyNDQsIAotICAgIDEzNiwgODgsIDE1NCwgMjIzLCA2NCwgODgsIDE1NCwgMjIwLCAxNTgsIDg4LCAxNTQsIDIyMywgMTMwLCAzNywgMTU0LCAKLSAgICAyMjQsIDE1LCAzNywgMTU0LCAyMzQsIDg2LCAzNywgMTU0LCAyMjEsIDIwMCwgMzcsIDE1NCwgMjM0LCA1LCAzNywgNTQsIAotICAgIDIxNiwgMjQ5LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDIxNSwgNzQsIDIyNiwgMjAxLCA4NSwgMjE4LCAKLSAgICAyMzYsIDM3LCA1NCwgMjE2LCAxNjQsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjQ0LCAyNCwgMjI2LCAyMDEsIAotICAgIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyNDQsIDEyMywgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMTksIDExNCwgCi0gICAgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMjAsIDExOSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAKLSAgICAyNDUsIDE5MywgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMjI1LCAyNTUsIDUwLCAzNywgNTQsIDIxNSwgNzQsIDExMSwgMzcsIAotICAgIDU0LCAyMTUsIDc0LCAxMDUsIDM3LCA1NCwgMjE1LCA3NCwgMTU4LCAzNywgNTQsIDIxNSwgNzQsIDE2MSwgMzcsIDU0LCAKLSAgICAyMTUsIDc0LCAxOTAsIDM3LCA1NCwgMjE1LCA3NCwgMTk1LCAzNywgNTQsIDIxNSwgNzQsIDE5OSwgMzcsIDU0LCAyMTUsIAotICAgIDc0LCAxOTYsIDM3LCA1NCwgMjE1LCA3NCwgMjAxLCAzNywgNTQsIDIxNiwgMTYzLCAzNywgNTQsIDIxNiwgMTY0LCAxMTEsIAotICAgIDM3LCA1NCwgMjE2LCAxNjQsIDEwNSwgMzcsIDU0LCAyMTYsIDE2NCwgMTU4LCAzNywgNTQsIDIxNiwgMTY0LCAxNjEsIDM3LCAKLSAgICA1NCwgMjE2LCAxNjQsIDE5MCwgMzcsIDI0LCAyMzQsIDY0LCAzNywgMjQsIDIyOCwgMjMxLCAzNywgMjQsIDIxNiwgMTAyLCAKLSAgICAzNywgMjQsIDIyMywgMjksIDM3LCAyNCwgMjMwLCAyMjIsIDM3LCAyNCwgMjI1LCA5OCwgMzcsIDI0LCAyMTksIDE1MCwgMzcsIAotICAgIDI0LCAyMzYsIDYzLCAzNywgMjQsIDI1MCwgNTQsIDM3LCAyNCwgMjUwLCAxMTQsIDM3LCAyNCwgMjM0LCAxMTYsIDM3LCAyNCwgCi0gICAgMjE2LCAxNzQsIDM3LCAyNCwgMjI1LCAxMzQsIDM3LCAyNCwgMjQxLCAxNzksIDM3LCAyNCwgMjM0LCA2NSwgNjEsIDM3LCAKLSAgICAyNCwgMjI4LCAyMzIsIDYxLCAzNywgMjQsIDIxNiwgMTAzLCA2MSwgMzcsIDI0LCAyMjMsIDMwLCA2MSwgMzcsIDI0LCAyMzAsIAotICAgIDIyMywgNjEsIDM3LCAyNCwgMjI1LCA5OSwgNjEsIDM3LCAyNCwgMjE5LCAxNTEsIDYxLCAzNywgMjQsIDIzNiwgNjQsIDYxLCAKLSAgICAzNywgMjQsIDI1MCwgNTUsIDYxLCAzNywgMjQsIDI1MCwgMTE1LCA2MSwgMzcsIDI0LCAyMzQsIDExNywgNjEsIDM3LCAyNCwgCi0gICAgMjE2LCAxNzUsIDYxLCAzNywgMjQsIDIyNSwgMTM1LCA2MSwgMzcsIDI0LCAyNDEsIDE4MCwgNjEsIDM3LCAyMzQsIDksIAotICAgIDEzNSwgMjUwLCAxNTYsIDM3LCAyMzQsIDksIDEzNSwgMjM1LCA1MywgMzcsIDI0LCAyMzYsIDY0LCA2OSwgMjM0LCA5LCAKLSAgICAyMTgsIDE2MSwgODcsIDM3LCAxNTQsIDExMSwgMzcsIDE1NCwgMTA1LCAzNywgMTU0LCAxNTgsIDM3LCAxNTQsIDE2MSwgMzcsIAotICAgIDE1NCwgMTkwLCAzNywgMTU0LCAxOTUsIDM3LCAxNTQsIDE5OSwgMzcsIDE1NCwgMTk2LCAzNywgMTU0LCAyMDEsIDM3LCAKLSAgICAxNTQsIDIxNiwgMjQ4LCAzNywgMTU0LCAyMzAsIDEzMywgMzcsIDE1NCwgMjQ0LCAxMDQsIDM3LCAxNTQsIDIxMiwgNDAsIAotICAgIDM3LCAxNTQsIDIxMSwgMjE0LCAzNywgMTU0LCAyMzEsIDQ0LCAzNywgMTU0LCAyNDUsIDIzMSwgMzcsIDE1NCwgMjE4LCAzOCwgCi0gICAgMzcsIDE1NCwgMjE4LCAxMzQsIDM3LCAxNTQsIDI0MSwgMjUxLCAzNywgMTU0LCAyMTksIDU2LCAzNywgMTU0LCAyMjksIAotICAgIDIwOSwgMzcsIDE1NCwgMjE5LCA2LCAzNywgMTU0LCAyNDQsIDExMCwgMzcsIDE1NCwgMjQ5LCAyMDgsIDM3LCAxNTQsIDIzMywgCi0gICAgMTMxLCAzNywgMTU0LCAyMjEsIDE3NiwgMzcsIDE1NCwgMjMxLCAxOTQsIDM3LCAxNTQsIDI0NCwgMTQ1LCAzNywgMTU0LCAKLSAgICAyMTgsIDUwLCAzNywgMTU0LCAyNDUsIDQyLCAzNywgMTU0LCAyMjQsIDE5MCwgMzcsIDE1NCwgMjUzLCAyMDQsIDM3LCAxNTQsIAotICAgIDIzNSwgMTY1LCAzNywgMTU0LCAyMjMsIDY0LCAzNywgMTU0LCAyNDksIDE3MiwgMzcsIDE1NCwgMjQ5LCAxNjMsIDM3LCAKLSAgICAxNTQsIDI0MSwgMTcyLCAzNywgMTU0LCAyNTAsIDE4MiwgMzcsIDE1NCwgMjMyLCAxMTYsIDM3LCAxNTQsIDIzMywgNTIsIAotICAgIDM3LCAxNTQsIDIyMiwgMjU0LCAzNywgMTU0LCAyMzEsIDg4LCAzNywgMTU0LCAyMjMsIDkwLCAzNywgMTU0LCAyMTgsIDg4LCAKLSAgICAzNywgMTU0LCAyMTgsIDIxLCAzNywgMTU0LCAyNDUsIDEzNSwgMzcsIDE1NCwgMjIzLCA2NiwgMzcsIDE1NCwgMjU0LCAxNTksIAotICAgIDM3LCAxNTQsIDIyOCwgMjE3LCAzNywgNTQsIDIxNiwgMTY0LCAxOTUsIDM3LCA1NCwgMjE2LCAxNjQsIDE5OSwgMzcsIDU0LCAKLSAgICAyMTYsIDE2NCwgMTk2LCAzNywgNTQsIDIxNiwgMTY0LCAyMDEsIDM3LCA1NCwgMjQ0LCAyMywgMzcsIDU0LCAyNDQsIDI0LCAKLSAgICAxMTEsIDM3LCA1NCwgMjQ0LCAyNCwgMTA1LCAzNywgNTQsIDI0NCwgMjQsIDE1OCwgMzcsIDU0LCAyNDQsIDI0LCAxNjEsIAotICAgIDM3LCA1NCwgMjQ0LCAyNCwgMTkwLCAzNywgNTQsIDI0NCwgMjQsIDE5NSwgMzcsIDU0LCAyNDQsIDI0LCAxOTksIDM3LCA1NCwgCi0gICAgMjQ0LCAyNCwgMTk2LCAzNywgNTQsIDI0NCwgMjQsIDIwMSwgMzcsIDU0LCAyNDQsIDEyMiwgMTEwLCAyMTcsIDQsIDE2LCAKLSAgICAzMSwgMjM1LCAxMzksIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0NCwgMTU2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzEsIAotICAgIDE2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjU0LCA1NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjMxLCAxMzcsIDExMCwgCi0gICAgMjE3LCA0LCAxNiwgMzEsIDIzNSwgNTEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzNSwgNTIsIDExMCwgMjE3LCA0LCAxNiwgCi0gICAgMzEsIDI1MywgMTk2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjAsIDEzOCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjI2LCAKLSAgICAyNDMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyOCwgNDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgOTMsIDQyLCAyNDEsIAotICAgIDE5NywgNDIsIDI0NSwgOTYsIDQyLCAyNDUsIDUxLCAyMzIsIDIyNSwgMjMyLCAyNDYsIDUwLCAzNywgNTYsIDYxLCAzNywgCi0gICAgNTYsIDc0LCAzNywgNTYsIDY5LCAzNywgNTYsIDc2LCAzNywgNTYsIDc4LCAzNywgNTYsIDE3NiwgMzcsIDU2LCAyMzQsIDk4LCAKLSAgICAzNywgNTYsIDIzMywgMjIzLCAzNywgNTYsIDIzNCwgMTg4LCAzNywgNTYsIDIzNCwgMzQsIDM3LCA1NiwgMjA2LCAzNywgNTYsIAotICAgIDIxOSwgMTkzLCAzNywgNTYsIDIxOCwgODQsIDM3LCA1NiwgMjIxLCAxODMsIDM3LCA1NiwgMjE5LCA2MCwgMzcsIDU2LCAKLSAgICAyMTcsIDEwNiwgMzcsIDU2LCAyMTYsIDExOCwgMzcsIDU2LCAyMTUsIDExOSwgMzcsIDU2LCAyMTcsIDIzLCAzNywgNTYsIAotICAgIDExMiwgMzcsIDU2LCAxOTgsIDM3LCA1NiwgMjI4LCAyMzgsIDM3LCA1NiwgMjI3LCAyNDIsIDM3LCA1NiwgMjI5LCAxMTIsIAotICAgIDM3LCA1NiwgMjI4LCA3OSwgMzcsIDU2LCAxNjIsIDM3LCA1NiwgMjQxLCAxODcsIDM3LCA1NiwgMjQwLCAyMjksIDM3LCA1NiwgCi0gICAgMjQxLCAyNDUsIDM3LCA1NiwgMjQxLCA3NSwgMzcsIDU2LCAxODYsIDM3LCA1NiwgMjMwLCAyMzUsIDM3LCA1NiwgMjMwLCAKLSAgICAxMDcsIDM3LCA1NiwgMjMxLCA5NiwgMzcsIDU2LCAyMzAsIDE2NiwgMzcsIDU2LCAxOTIsIDM3LCA1NiwgMjEwLCAyMTIsIAotICAgIDM3LCA1NiwgMjEwLCAyNDQsIDM3LCA1NiwgMjA1LCAzNywgNTYsIDIyMywgMzgsIDM3LCA1NiwgMjIyLCAxNDIsIDM3LCA1NiwgCi0gICAgMjIzLCAxMzEsIDM3LCA1NiwgMjIyLCAyMTMsIDM3LCA1NiwgMjEyLCA2NSwgMzcsIDU2LCAyMTEsIDI1MCwgMzcsIDU2LCAKLSAgICAyMTIsIDIyLCAzNywgNTYsIDIxMSwgMjI3LCA0MiwgMjU0LCA3OSwgNDIsIDI1MywgMjQ3LCA0MiwgMjU0LCAxMDMsIDQyLCAKLSAgICAyNTUsIDQwLCA0MiwgMjM1LCAyMzMsIDQyLCAyMzUsIDIwMywgNDIsIDIxNCwgMTY2LCA0MiwgMjQ1LCA3NCwgNDIsIDI0NSwgCi0gICAgMjE0LCA0MiwgMjI2LCAxOTAsIDQyLCAyMjYsIDE4NCwgNDIsIDIzNCwgMjUxLCA0MiwgMjM0LCAyMjAsIDQyLCAyMzQsIAotICAgIDIxNywgNDIsIDI0MywgOTksIDQyLCAyNDMsIDEwOCwgNDIsIDI0MiwgMjExLCA0MiwgMjQyLCAyMDcsIDQyLCAyMzMsIDE1NiwgCi0gICAgNDIsIDI0MiwgMjAwLCA0MiwgMjM0LCA3OCwgNDIsIDIzNCwgNzcsIDQyLCAyMzQsIDc2LCA0MiwgMjM0LCA3NSwgNDIsIAotICAgIDI0MiwgOTMsIDQyLCAyNDIsIDkyLCA0MiwgMjMzLCAxOTksIDQyLCAyMzMsIDIwMSwgNDIsIDIzNCwgMTg0LCA0MiwgMjM0LCAKLSAgICA3LCA0MiwgMjM0LCAxNCwgNDIsIDIyMiwgMTgsIDQyLCAyMjEsIDIzOSwgNDIsIDIxOSwgMTMxLCA0MiwgMjIwLCAxNDMsIAotICAgIDQyLCAyMjAsIDE0MiwgNDIsIDI0OCwgMjI2LCA0MiwgMjQ4LCA0NCwgNDIsIDI0NywgMTI5LCA0MiwgMjE2LCAzMywgNDIsIAotICAgIDIyOSwgMjA1LCA0MiwgMjI4LCA0NiwgNDIsIDI0MiwgMzksIDQyLCAyMjYsIDg4LCA0MiwgMjI2LCA4NywgNDIsIDI1MiwgCi0gICAgMTk2LCA0MiwgMjI1LCAxMDgsIDQyLCAyMjUsIDcyLCA0MiwgMjI1LCA3MywgNDIsIDI1MSwgMjQyLCA0MiwgMjQwLCAyMjgsIAotICAgIDQyLCAyNDAsIDIyNCwgNDIsIDI1MSwgOTksIDQyLCAyNDAsIDIxMSwgNDIsIDI0MSwgMjIyLCA0MiwgMjI1LCAxNjIsIDQyLCAKLSAgICAyMjUsIDE5NywgNDIsIDI0MSwgMjA1LCA0MiwgMjI1LCAxOTQsIDQyLCAyMjUsIDIxMCwgNDIsIDI1MiwgNjksIDQyLCAyMjUsIAotICAgIDksIDQyLCAyNTEsIDE4OCwgNDIsIDI0MSwgNjMsIDQyLCAyMjQsIDI1MywgNDIsIDI0MSwgNTUsIDQyLCAyNDEsIDU3LCA0MiwgCi0gICAgMjMxLCAyMDYsIDQyLCAyMzEsIDIwMiwgNDIsIDIzMSwgMjExLCA0MiwgMjMxLCAxNTUsIDQyLCAyMzEsIDE4MCwgNDIsIAotICAgIDIzMCwgMjAyLCA0MiwgMjMwLCAxODEsIDQyLCAyMzAsIDE4MCwgNDIsIDIzMSwgNzksIDQyLCAyMzEsIDc2LCA0MiwgMjMxLCAKLSAgICA4MCwgNDIsIDIxMSwgMTAyLCA0MiwgMjExLCAxMDAsIDQyLCAyMTAsIDIwMSwgNDIsIDIyMiwgMjI5LCA0MiwgMjIyLCAyMzMsIAotICAgIDQyLCAyMjIsIDExOSwgNDIsIDIyMiwgMTEzLCA0MiwgMjIzLCA4OCwgNDIsIDIyMywgODUsIDQyLCAyMTIsIDM4LCAxMTAsIAotICAgIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjEwLCA4NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDExMSwgCi0gICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDEwNSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE1OCwgCi0gICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE2MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5MCwgCi0gICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5OSwgCi0gICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIwMSwgCi0gICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNiwgMjQ4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgCi0gICAgMjQ1LCAxNzUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDc2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKLSAgICAyNDAsIDI0NiwgMjE2LCAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyNDQsIDEzLCAxMTAsIDIxNywgNCwgCi0gICAgMTYsIDMxLCAyNDAsIDI0NiwgMjQ0LCAxMjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTksIDEyMSwgMTEwLCAKLSAgICAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIyMCwgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjQ1LCAKLSAgICAxOTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMjgsIDIwMiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAKLSAgICAyNDYsIDIxNSwgNzMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY3LCAxMTAsIDIxNywgNCwgMTYsIAotICAgIDMxLCAyNDAsIDI0NiwgMjE1LCA2MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNjQsIDExMCwgMjE3LCAKLSAgICA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY5LCA0MiwgMjQwLCAyMzcsIDQyLCAyNDgsIDIyOSwgNDIsIDI1MywgMjAwLCAKLSAgICA0MiwgMTMwLCA0MiwgMjI2LCAxMjksIDQyLCAyMjUsIDIyOSwgNDIsIDI0NywgMTU1LCA0MiwgMjQ3LCAxNTYsIDIxOCwgCi0gICAgMjM1LCA0MiwgMjQ3LCAxNTYsIDI0OSwgMTE2LCA0MiwgMjM1LCAxNjIsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjQxLCAKLSAgICAyMjMsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjE3LCAxNzUsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjE3LCA3NSwgNDIsIAotICAgIDI0NSwgOTksIDIyOSwgMjEwLCAyMzEsIDc1LCA0MiwgMjQ5LCAxNjUsIDQyLCAyMjYsIDk0LCAyNTQsIDEzMywgNDIsIDE5OCwgCi0gICAgNDIsIDIzMCwgMTA4LCA2MSwgNDIsIDE4NiwgNDIsIDE3NiwgNDIsIDIzNCwgMTkxLCA0MiwgMjMxLCAxMzQsIDQyLCAyNDMsIAotICAgIDg3LCA0MiwgMjUxLCAyNiwgNDIsIDIzNCwgMTkwLCA0MiwgMjI1LCAxNTMsIDQyLCAyMjksIDg2LCA0MiwgMjMwLCAxMDgsIAotICAgIDI0NSwgMTQsIDQyLCAyMzAsIDEwOCwgMjQzLCAyMDksIDQyLCAyMzEsIDIwLCA0MiwgMjM0LCAxNDAsIDQyLCAyNDAsIDE3MCwgCi0gICAgNDIsIDIzNCwgMTAwLCA0MiwgMjMwLCAyMzcsIDQyLCAyNDIsIDIyMywgNDIsIDIxNiwgMTIwLCA0MiwgMjMwLCAxMDgsIAotICAgIDE1NiwgNDIsIDIzMCwgMTc0LCA0MiwgMjQ3LCAxNjUsIDQyLCAyMzQsIDQ2LCA0MiwgMjQ0LCA1MywgNDIsIDIyOCwgMTE3LCAKLSAgICA0MiwgMjMwLCAxMDgsIDE5NCwgNDIsIDIzMCwgMTcxLCA0MiwgMjQ5LCAyNDcsIDQyLCAyMzQsIDQwLCA0MiwgMjMwLCAxNzIsIAotICAgIDIxOCwgMjM1LCA0MiwgMjQ5LCAyNDgsIDIxOCwgMjM1LCA0MiwgMjMyLCA1NSwgMjE4LCAyMzUsIDQyLCAyMzQsIDQxLCAKLSAgICAyMTgsIDIzNSwgNDIsIDIzMCwgMTcyLCAyNDksIDExNiwgNDIsIDI0OSwgMjQ4LCAyNDksIDExNiwgNDIsIDIzMiwgNTUsIAotICAgIDI0OSwgMTE2LCA0MiwgMjM0LCA0MSwgMjQ5LCAxMTYsIDQyLCAyMzIsIDU1LCAxMTUsIDIyMiwgOTMsIDQyLCAyMzIsIDU1LCAKLSAgICAxMTUsIDIyMiwgOTQsIDIxOCwgMjM1LCA0MiwgMTkxLCA0MiwgMjM0LCAxLCA0MiwgMjMwLCAxMTAsIDQyLCAyNDIsIDE1OCwgCi0gICAgNDIsIDIyMywgMTc5LCA0MiwgMjIzLCAxODAsIDExNSwgMjIyLCA5MywgNDIsIDIyMywgMTgwLCAxMTUsIDIyMiwgOTQsIAotICAgIDIxOCwgMjM1LCA0MiwgMjI0LCAxNjUsIDQyLCAyMjgsIDE4LCA0MiwgMjMwLCAxMDgsIDIyMiwgOTMsIDQyLCAyMzAsIDEwOSwgCi0gICAgNDIsIDIyNCwgMTE5LCA0MiwgMjI3LCAxODAsIDQyLCAyMzAsIDEwOCwgMjE0LCAxMDUsIDQyLCAyMzAsIDU0LCA0MiwgMjMzLCAKLSAgICAxOTEsIDQyLCAyMzAsIDU1LCAyMzEsIDc5LCA0MiwgMjI0LCAxMTgsIDQyLCAyMjcsIDE3OSwgNDIsIDIzMCwgMTA4LCAyMTIsIAotICAgIDk4LCA0MiwgMjMwLCA0OCwgNDIsIDIzMywgMTg5LCA0MiwgMjMwLCA0OSwgMjMxLCA3OSwgNDIsIDIzNSwgMzAsIDIyNiwgCi0gICAgMjI0LCA0MiwgMjMyLCA1NSwgMjI2LCAyMjQsIDQyLCAyNTQsIDE0NCwgNDIsIDI1MSwgMTY4LCA0MiwgMjUwLCAyMjIsIDQyLCAKLSAgICAyNTAsIDE5OSwgNDIsIDI1MSwgNzUsIDExNSwgMjM0LCAxNDAsIDQyLCAyNDksIDI0NiwgNDIsIDI0OCwgMTUwLCA0MiwgCi0gICAgMjQyLCA3OSwgNDIsIDE2MiwgNDIsIDI0MCwgMjM4LCA0MiwgMjM2LCA2LCA0MiwgMjM0LCA1MywgNDIsIDIzNCwgNDEsIAotICAgIDI1MSwgMiwgNDIsIDIzMywgMjI1LCA0MiwgMjMyLCAxNjUsIDQyLCAyMzIsIDE2NCwgNDIsIDIzMiwgMTUzLCA0MiwgMjMyLCAKLSAgICA2OCwgNDIsIDIzMSwgMTM1LCAyMTksIDgxLCA0MiwgMjMwLCAyMDEsIDQyLCAyMzAsIDE1NywgNDIsIDIyNSwgMTUxLCA0MiwgCi0gICAgMjI1LCAyMiwgNDIsIDIyNCwgMjIyLCA0MiwgMjI0LCAyMjAsIDQyLCAyMTgsIDIyOSwgNDIsIDIxOCwgMywgNDIsIDIxMiwgCi0gICAgMjQsIDQyLCAyMTQsIDEwNiwgMTE1LCAxOTQsIDQyLCAxMTYsIDExNSwgMTk0LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAotICAgIDE1NCwgMTExLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTA1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAotICAgIDE1NCwgMTU4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTYxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAotICAgIDE1NCwgMTkwLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTk1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAotICAgIDE1NCwgMTk5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTk2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAotICAgIDE1NCwgMjAxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAyNDgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAotICAgIDI0OCwgMTU0LCAyNDUsIDE3NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNzYsIDExMCwgMjE3LCA0LCAKLSAgICAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDI0NCwgMTMsIDExMCwgCi0gICAgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyNDQsIDEyNiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxOSwgCi0gICAgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjIwLCAxMjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCi0gICAgMTU0LCAyNDUsIDE5OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIyOCwgMjAyLCAxMTAsIDIxNywgNCwgMTYsIAotICAgIDMxLCAyNDgsIDE1NCwgMjE1LCA3MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjcsIDExMCwgMjE3LCAKLSAgICA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDYzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2NCwgCi0gICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjksIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAKLSAgICAyMTUsIDcwLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCi0gICAgMjQ4LCAxNTQsIDIxNSwgNjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDcyLCAxMTAsIDIxNywgNCwgCi0gICAgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTYzLCAxMTAsIAotICAgIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjIsIDQyLCAyNDMsIDEyNSwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgCi0gICAgMjQ5LCAxNDgsIDI0MSwgMjMwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMjMsIDEyNSwgMjQ1LCAyMzEsIDI0MSwgMTk5LCAKLSAgICAzMSwgMjQ3LCAyMzksIDI1MywgMjE1LCAyMTYsIDE5NywgMjUyLCA2NCwgMjQxLCAxOTksIDMxLCAyMTAsIDIyMywgMjQ0LCAKLSAgICA0NiwgMjQxLCAxOTksIDMxLCAyMTIsIDU5LCAyNDEsIDE5OSwgMzEsIDI0OSwgMjExLCAyNDEsIDE5OSwgMzEsIDIxNiwgCi0gICAgMTk3LCAyNTQsIDExLCAyNDEsIDE5OSwgMzEsIDI0MSwgNjcsIDIxNiwgMzksIDI0MSwgMTk5LCAzMSwgNCwgMjE3LCA2MiwgCi0gICAgMjQxLCAxOTksIDMxLCAyMTUsIDIzOCwgMjQxLCAxOTksIDMxLCAyMjUsIDIyMiwgMjQxLCAxOTksIDMxLCAyMTgsIDE2MCwgCi0gICAgMjQxLCAxOTksIDMxLCAyNDQsIDE0NywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjI0LCAyNDMsIDI0MSwgMTk5LCAzMSwgCi0gICAgMjMwLCAxNjAsIDI0MSwgMTk5LCAzMSwgMjQ1LCAxMzQsIDI0MSwgMTk5LCAzMSwgMjQ0LCA0NywgMjQxLCAxOTksIDMxLCAKLSAgICAyMTEsIDIwNywgMjI2LCAyMDEsIDIxNiwgMTk3LCAyNDgsIDk0LCAyNDEsIDE5OSwgMzEsIDI1NCwgNTksIDI0MSwgMTk5LCAKLSAgICAzMSwgMjQ5LCAxOTMsIDI0MSwgMTk5LCAzMSwgMjUxLCAyMzUsIDIxNiwgMTM5LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTU2LCAKLSAgICAyNDEsIDE5OSwgMzEsIDIxOCwgMjQ3LCAyNTQsIDc4LCAyNDEsIDE5OSwgMzEsIDIyMywgNTYsIDI0MSwgMTk5LCAzMSwgCi0gICAgMjM1LCAyMjcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIxNywgNjIsIDI0MSwgMTk5LCAzMSwgMjMwLCAxMTYsIDI0OSwgCi0gICAgMTY3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMjQsIDIwMCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjU1LCAyNywgCi0gICAgMjEyLCA0MCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjUwLCAxNiwgMjQ0LCAxMDQsIDI0MSwgMTk5LCAzMSwgMjM1LCAKLSAgICAyNDAsIDI0MSwgMTk5LCAzMSwgMjQ2LCA2NSwgMjQxLCAxOTksIDMxLCAyMjMsIDU5LCAyNDEsIDE5OSwgMzEsIDI0MiwgCi0gICAgMTM5LCAyMjQsIDIyNywgMjQxLCAxOTksIDMxLCAyMjQsIDE4MCwgMjQxLCAxOTksIDMxLCAyNDgsIDE2OSwgNjQsIDIxNiwgCi0gICAgMTk3LCAyMzIsIDIzNiwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjQ0LCAxODIsIDI0MSwgMTk5LCAzMSwgMjI2LCAxNjcsIAotICAgIDI0MSwgMTk5LCAzMSwgMjI2LCAyNDgsIDI0MSwgMTk5LCAzMSwgMjQ4LCA2NywgMjQxLCAxOTksIDMxLCAyNDgsIDg3LCAKLSAgICAyNDEsIDE5OSwgMzEsIDIzNSwgMjU0LCAyNDEsIDE5OSwgMzEsIDI1MSwgMTU3LCAyNDEsIDE5OSwgMzEsIDI0OSwgMjI5LCAKLSAgICAyMTYsIDQzLCAyMzEsIDgxLCAyNDEsIDE5OSwgMzEsIDI0MywgOTQsIDIxNiwgMzksIDI0MSwgMTk5LCAzMSwgMjI0LCAxMjgsIAotICAgIDIxNCwgMTU0LCAyNDEsIDE5OSwgMzEsIDIyNiwgMTY2LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMTIsIDEzLCAyNDEsIAotICAgIDE5OSwgMzEsIDIyMywgNDgsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1MCwgMjI4LCAyNDEsIDE5OSwgMzEsIDIxNiwgCi0gICAgMTk3LCAyNTQsIDcsIDIxNiwgMTM0LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzQsIDE4NSwgMjE4LCAxMzYsIDIzMCwgCi0gICAgMTIwLCAyNDEsIDE5OSwgMzEsIDI0OCwgNDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzMSwgMTU3LCAyMzEsIDIwNywgCi0gICAgMjQxLCAxOTksIDMxLCAyNTUsIDI4LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMTIsIDU0LCAyNDEsIDE5OSwgMzEsIAotICAgIDIxNiwgMTk3LCAyNDMsIDU0LCAyMTEsIDIzOSwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjM1LCA1OCwgMjMzLCAxMTMsIAotICAgIDI0MSwgMTk5LCAzMSwgMjQ3LCAxOTIsIDI0MSwgMTk5LCAzMSwgMjMyLCAyMjYsIDI0MSwgMTk5LCAzMSwgMjM1LCAyMzAsIAotICAgIDIxNSwgMTg4LCAyNDEsIDE5OSwgMzEsIDQsIDIyNCwgMjAwLCAyNDEsIDE5OSwgMzEsIDI1NCwgMjI2LCAyNDksIDIyMCwgCi0gICAgMjQxLCAxOTksIDMxLCAyNTIsIDY3LCAyNDksIDIyMCwgOCwgMywgMjM1LCAxNjYsIDgsIDMsIDIzNSwgMTU5LCA4LCAzLCAKLSAgICA3NCwgOCwgMywgMjM1LCAxODksIDgsIDMsIDIzNiwgNjUsIDgsIDMsIDIzNiwgNDgsIDgsIDMsIDIzNiwgNjcsIDgsIDMsIAotICAgIDIzNiwgNjYsIDgsIDMsIDI1MywgMjE0LCA4LCAzLCAyNTMsIDE3NywgOCwgMywgNjEsIDgsIDMsIDI1NCwgODAsIDgsIDMsIAotICAgIDIxNCwgMTY0LCA4LCAzLCAyMTQsIDE2NywgOCwgMywgMjE0LCAxNjUsIDgsIDMsIDIyNiwgMTQ0LCA4LCAzLCAyMjYsIDExOCwgCi0gICAgOCwgMywgNzgsIDgsIDMsIDIyNiwgMTc5LCA4LCAzLCAyNDUsIDQzLCA4LCAzLCA3NiwgOCwgMywgMjExLCAxOTUsIDgsIDMsIAotICAgIDI1MSwgMjM2LCA4LCAzLCAyNTEsIDIzMywgOCwgMywgMjUyLCAxNCwgOCwgMywgMjUxLCAyNDYsIDgsIDMsIDI1MiwgMywgOCwgCi0gICAgMywgMjUyLCAyLCA4LCAzLCAyNTIsIDUsIDgsIDMsIDI1MiwgNCwgOCwgMywgMjUyLCAxMjksIDgsIDMsIDI1MiwgMTIxLCA4LCAKLSAgICAzLCAyNTIsIDE5OSwgOCwgMywgMjUyLCAxNTAsIDgsIDMsIDI1MSwgMTA5LCA4LCAzLCAyNTEsIDExMywgOCwgMywgMjUxLCAKLSAgICAxMTAsIDgsIDMsIDI1MSwgMTg3LCA4LCAzLCAyNTEsIDE3MSwgOCwgMywgMjUxLCAyMTMsIDgsIDMsIDI1MSwgMTkzLCA4LCAKLSAgICAzLCAyNTIsIDI5LCA4LCAzLCAyNTIsIDgzLCA4LCAzLCAyNTIsIDQxLCA4LCAzLCAyNTEsIDk1LCA4LCAzLCAyNTEsIDkyLCAKLSAgICA4LCAzLCAyNTEsIDEzMywgOCwgMywgMjUxLCAxMDgsIDgsIDMsIDI1MSwgMTAyLCA4LCAzLCAyNTEsIDEwNiwgOCwgMywgCi0gICAgMjUxLCA4MCwgOCwgMywgMjUxLCA3OCwgOCwgMywgMjUxLCA4NSwgOCwgMywgMjUxLCA4MywgOCwgMywgMjUxLCA4MSwgOCwgCi0gICAgMywgMjUxLCA4MiwgOCwgMywgMjI1LCA1MiwgOCwgMywgMjI1LCA0OCwgOCwgMywgMjI1LCAxMTEsIDgsIDMsIDIyNSwgNjIsIAotICAgIDgsIDMsIDIyNSwgNzgsIDgsIDMsIDIyNSwgMTA1LCA4LCAzLCAyMjUsIDEwMSwgOCwgMywgMjI1LCAyNDQsIDgsIDMsIDIyNSwgCi0gICAgMjM0LCA4LCAzLCAxOTEsIDgsIDMsIDIyNiwgMjUsIDgsIDMsIDIyNCwgMTM4LCA4LCAzLCAyMjQsIDE0MCwgOCwgMywgMjI0LCAKLSAgICAxMzksIDgsIDMsIDIyNCwgMjM2LCA4LCAzLCAyMjQsIDIyNSwgOCwgMywgMjI1LCAxOSwgOCwgMywgMjI0LCAyNDgsIDgsIDMsIAotICAgIDIyNCwgMTI0LCA4LCAzLCAyMjQsIDEyMCwgOCwgMywgMjI0LCAxNTMsIDgsIDMsIDIyNCwgMTM3LCA4LCAzLCAyMjQsIDEyOSwgCi0gICAgOCwgMywgMjI0LCAxMzUsIDgsIDMsIDIyNCwgMTAzLCA4LCAzLCAyMjQsIDEwMiwgOCwgMywgMjI0LCAxMDcsIDgsIDMsIAotICAgIDIyNCwgMTA2LCA4LCAzLCAyMjQsIDEwNCwgOCwgMywgMjI0LCAxMDUsIDgsIDMsIDI1MiwgMTA0LCA4LCAzLCAyNTIsIDEwMywgCi0gICAgOCwgMywgMjUyLCAxMTAsIDgsIDMsIDI1MiwgMTA1LCA4LCAzLCAyNTIsIDEwNywgOCwgMywgMjUyLCAxMDYsIDgsIDMsIAotICAgIDI1MiwgMTA5LCA4LCAzLCAyNTIsIDEwOCwgOCwgMywgMjUyLCAxMTYsIDgsIDMsIDI1MiwgMTE1LCA4LCAzLCAyNTIsIDExOSwgCi0gICAgOCwgMywgMjUyLCAxMTcsIDgsIDMsIDI1MiwgOTUsIDgsIDMsIDI1MiwgOTcsIDgsIDMsIDI1MiwgOTYsIDgsIDMsIDI1MiwgCi0gICAgMTAwLCA4LCAzLCAyNTIsIDk5LCA4LCAzLCAyNTIsIDEwMiwgOCwgMywgMjUyLCAxMDEsIDgsIDMsIDI1MiwgMTExLCA4LCAzLCAKLSAgICAyNTIsIDExNCwgOCwgMywgMjUyLCAxMTIsIDgsIDMsIDI1MiwgOTEsIDgsIDMsIDI1MiwgOTAsIDgsIDMsIDI1MiwgOTgsIDgsIAotICAgIDMsIDI1MiwgOTQsIDgsIDMsIDI1MiwgOTIsIDgsIDMsIDI1MiwgOTMsIDgsIDMsIDI1MiwgODcsIDgsIDMsIDI1MiwgODYsIAotICAgIDgsIDMsIDI1MiwgODksIDgsIDMsIDI1MiwgODgsIDgsIDMsIDIyOSwgMTc0LCA4LCAzLCAyMjksIDE3MywgOCwgMywgMjI5LCAKLSAgICAxNzksIDgsIDMsIDIyOSwgMTc1LCA4LCAzLCAyMjksIDE3NiwgOCwgMywgMjI5LCAxNzgsIDgsIDMsIDIyOSwgMTc3LCA4LCAKLSAgICAzLCAyMjksIDE4MiwgOCwgMywgMjI5LCAxODEsIDgsIDMsIDIyOSwgMTg0LCA4LCAzLCAyMjksIDE4MywgOCwgMywgMjI5LCAKLSAgICAxNzAsIDgsIDMsIDIyOSwgMTY5LCA4LCAzLCAyMjksIDE3MiwgOCwgMywgMjI5LCAxNzEsIDgsIDMsIDIyOSwgMTYzLCA4LCAKLSAgICAzLCAyMjksIDE2MiwgOCwgMywgMjI5LCAxNjcsIDgsIDMsIDIyOSwgMTY2LCA4LCAzLCAyMjksIDE2NCwgOCwgMywgMjI5LCAKLSAgICAxNjUsIDgsIDMsIDIyOSwgMTU3LCA4LCAzLCAyMjksIDE1NiwgOCwgMywgMjI5LCAxNjEsIDgsIDMsIDIyOSwgMTYwLCA4LCAKLSAgICAzLCAyMjksIDE1OCwgOCwgMywgMjI5LCAxNTksIDgsIDMsIDI0MSwgMTE3LCA4LCAzLCAyNDEsIDExNiwgOCwgMywgMjQxLCAKLSAgICAxMjIsIDgsIDMsIDI0MSwgMTE4LCA4LCAzLCAyNDEsIDExOSwgOCwgMywgMjQxLCAxMjEsIDgsIDMsIDI0MSwgMTIwLCA4LCAKLSAgICAzLCAyNDEsIDEyNSwgOCwgMywgMjQxLCAxMjQsIDgsIDMsIDI0MSwgMTI3LCA4LCAzLCAyNDEsIDEyNiwgOCwgMywgMjQxLCAKLSAgICAxMDgsIDgsIDMsIDI0MSwgMTEwLCA4LCAzLCAyNDEsIDEwOSwgOCwgMywgMjQxLCAxMTMsIDgsIDMsIDI0MSwgMTEyLCA4LCAKLSAgICAzLCAyNDEsIDExNSwgOCwgMywgMjQxLCAxMTQsIDgsIDMsIDI0MSwgMTA0LCA4LCAzLCAyNDEsIDEwMywgOCwgMywgMjQxLCAKLSAgICAxMTEsIDgsIDMsIDI0MSwgMTA3LCA4LCAzLCAyNDEsIDEwNSwgOCwgMywgMjQxLCAxMDYsIDgsIDMsIDI0MSwgOTgsIDgsIDMsIAotICAgIDI0MSwgMTAyLCA4LCAzLCAyNDEsIDEwMSwgOCwgMywgMjQxLCA5OSwgOCwgMywgMjQxLCAxMDAsIDgsIDMsIDIzMCwgMTc3LCAKLSAgICA4LCAzLCAyMzAsIDE3NiwgOCwgMywgMjMwLCAyMzUsIDgsIDMsIDIzMCwgMTgzLCA4LCAzLCAyMzAsIDIwOCwgOCwgMywgCi0gICAgMjMwLCAyMjYsIDgsIDMsIDIzMCwgMjI0LCA4LCAzLCAyMzEsIDE0NCwgOCwgMywgMjMxLCAxMzksIDgsIDMsIDE4NiwgOCwgCi0gICAgMywgMjMxLCAxNzcsIDgsIDMsIDIzMCwgNzksIDgsIDMsIDIzMCwgNzgsIDgsIDMsIDIzMCwgODIsIDgsIDMsIDIzMCwgODAsIAotICAgIDgsIDMsIDIzMCwgMTI2LCA4LCAzLCAyMzAsIDExMiwgOCwgMywgMjMwLCAxNjYsIDgsIDMsIDIzMCwgMTMxLCA4LCAzLCAKLSAgICAyMzEsIDMxLCA4LCAzLCAyMzEsIDk2LCA4LCAzLCAyMzAsIDYwLCA4LCAzLCAyMzAsIDU2LCA4LCAzLCAyMzAsIDEwNywgOCwgCi0gICAgMywgMjMwLCA3NSwgOCwgMywgMjMwLCA2OCwgOCwgMywgMjMwLCA3MywgOCwgMywgMjMwLCAzMywgOCwgMywgMjMwLCAzMiwgCi0gICAgOCwgMywgMjMwLCAzOCwgOCwgMywgMjMwLCAzNSwgOCwgMywgMjQ0LCA5MSwgOCwgMywgMjQ0LCA4NiwgOCwgMywgMjQ0LCAKLSAgICAxMjksIDgsIDMsIDI0NCwgMTA2LCA4LCAzLCAyNDQsIDE3NSwgOCwgMywgMjQ0LCAxNjYsIDgsIDMsIDI0NCwgMjA0LCA4LCAKLSAgICAzLCAyNDQsIDE3OCwgOCwgMywgMjQ0LCAxMSwgOCwgMywgMjQ0LCA1MSwgOCwgMywgMjQ0LCAzNSwgOCwgMywgMjQzLCAyMjUsIAotICAgIDgsIDMsIDI0MywgMjI0LCA4LCAzLCAyNDMsIDI0MSwgOCwgMywgMjQzLCAyMzAsIDgsIDMsIDI0MywgMjI4LCA4LCAzLCAKLSAgICAyNDMsIDIyOSwgOCwgMywgMjQzLCAyMTIsIDgsIDMsIDI0MywgMjExLCA4LCAzLCAyNDMsIDIxNSwgOCwgMywgMjQzLCAyMTMsIAotICAgIDgsIDMsIDIxMywgMTQ0LCA4LCAzLCAyMTMsIDEzOSwgOCwgMywgMjEzLCAxNzYsIDgsIDMsIDIxMywgMTUzLCA4LCAzLCAKLSAgICAyMTMsIDE2NiwgOCwgMywgMjEzLCAxNjMsIDgsIDMsIDIxMywgMTY4LCA4LCAzLCAyMTMsIDE2NywgOCwgMywgMjE0LCA3LCAKLSAgICA4LCAzLCAyMTQsIDIsIDgsIDMsIDIxNCwgMjcsIDgsIDMsIDIxNCwgMTgsIDgsIDMsIDIxMywgMTI1LCA4LCAzLCAyMTMsIAotICAgIDEyMSwgOCwgMywgMjEzLCAxMzgsIDgsIDMsIDIxMywgMTI2LCA4LCAzLCAyMTMsIDE3OCwgOCwgMywgMjEzLCAyNDQsIDgsIAotICAgIDMsIDIxMiwgMTEwLCA4LCAzLCAyMTIsIDEwOCwgOCwgMywgMjEyLCAxMTYsIDgsIDMsIDIxMiwgMTEzLCA4LCAzLCAyMTIsIAotICAgIDExMSwgOCwgMywgMjEyLCAxMTIsIDgsIDMsIDIxMiwgMTAyLCA4LCAzLCAyMTIsIDEwMSwgOCwgMywgMjEyLCAxMDYsIDgsIAotICAgIDMsIDIxMiwgMTA1LCA4LCAzLCAyMTIsIDEwMywgOCwgMywgMjEyLCAxMDQsIDgsIDMsIDI0NywgMTg2LCA4LCAzLCAyNDcsIAotICAgIDE3NCwgOCwgMywgMjQ4LCAxMSwgOCwgMywgMjQ3LCAyMTEsIDgsIDMsIDI0NywgMjQ0LCA4LCAzLCAyNDcsIDI0OCwgOCwgMywgCi0gICAgMjQ3LCAyNDcsIDgsIDMsIDI0OCwgMTYwLCA4LCAzLCAyNDgsIDE1NSwgOCwgMywgMjQ4LCAyMjksIDgsIDMsIDI0OCwgMTgwLCAKLSAgICA4LCAzLCAyNDYsIDcwLCA4LCAzLCAyNDYsIDcxLCA4LCAzLCAyNDcsIDEyOCwgOCwgMywgMjQ2LCAxMTAsIDgsIDMsIDI0NywgCi0gICAgMTUzLCA4LCAzLCAyNDcsIDEzMCwgOCwgMywgMjQ4LCAzOCwgOCwgMywgMjQ4LCA5OCwgOCwgMywgMjQ4LCA1MywgOCwgMywgCi0gICAgMjQ2LCA2MSwgOCwgMywgMjQ2LCA1OSwgOCwgMywgMjQ2LCA4NiwgOCwgMywgMjQ2LCA2OSwgOCwgMywgMjQ2LCA2NCwgOCwgCi0gICAgMywgMjQ2LCA2NywgOCwgMywgMjE2LCA2OCwgOCwgMywgMjE2LCA2MiwgOCwgMywgMjE2LCAxMTgsIDgsIDMsIDIxNiwgNzcsIAotICAgIDgsIDMsIDIxNiwgMTEwLCA4LCAzLCAyMTYsIDExMiwgOCwgMywgMjE2LCAxMTEsIDgsIDMsIDIxNywgNDcsIDgsIDMsIDIxNywgCi0gICAgMzQsIDgsIDMsIDIxNywgMTA2LCA4LCAzLCAyMTcsIDU1LCA4LCAzLCAyMTUsIDEwMywgOCwgMywgMjE1LCAxMDIsIDgsIDMsIAotICAgIDIxNSwgMTA1LCA4LCAzLCAyMTUsIDEwNCwgOCwgMywgMjE2LCA2LCA4LCAzLCAyMTYsIDIsIDgsIDMsIDExMiwgOCwgMywgCi0gICAgMjE2LCAxNCwgOCwgMywgMjE2LCAyMTQsIDgsIDMsIDIxNywgMjMsIDgsIDMsIDIxNiwgMjM4LCA4LCAzLCAyMTUsIDg4LCA4LCAKLSAgICAzLCAyMTUsIDgzLCA4LCAzLCAyMTUsIDExOSwgOCwgMywgMjE1LCAxMDEsIDgsIDMsIDIxNSwgODksIDgsIDMsIDIxNSwgOTksIAotICAgIDgsIDMsIDI0OCwgMTE1LCA4LCAzLCAyNDgsIDExNCwgOCwgMywgMjQ4LCAxMjAsIDgsIDMsIDI0OCwgMTE2LCA4LCAzLCAKLSAgICAyNDgsIDExNywgOCwgMywgMjQ4LCAxMTksIDgsIDMsIDI0OCwgMTE4LCA4LCAzLCAyNDgsIDEzNiwgOCwgMywgMjQ4LCAxMzUsIAotICAgIDgsIDMsIDI0OCwgMTQzLCA4LCAzLCAyNDgsIDEzNywgOCwgMywgMjQ4LCAxMDUsIDgsIDMsIDI0OCwgMTA3LCA4LCAzLCAKLSAgICAyNDgsIDEwNiwgOCwgMywgMjQ4LCAxMTAsIDgsIDMsIDI0OCwgMTA5LCA4LCAzLCAyNDgsIDExMywgOCwgMywgMjQ4LCAxMTEsIAotICAgIDgsIDMsIDI0OCwgMTI4LCA4LCAzLCAyNDgsIDEzMSwgOCwgMywgMjQ4LCAxMjksIDgsIDMsIDI0OCwgMTAxLCA4LCAzLCAKLSAgICAyNDgsIDEwMCwgOCwgMywgMjQ4LCAxMDgsIDgsIDMsIDI0OCwgMTA0LCA4LCAzLCAyNDgsIDEwMiwgOCwgMywgMjQ4LCAxMDMsIAotICAgIDgsIDMsIDIyOSwgMTMxLCA4LCAzLCAyMjksIDEzMCwgOCwgMywgMjI5LCAxMzgsIDgsIDMsIDIyOSwgMTMzLCA4LCAzLCAKLSAgICAyMjksIDEzNCwgOCwgMywgMjI5LCAxMzUsIDgsIDMsIDIyOSwgMTQ3LCA4LCAzLCAyMjksIDE0NiwgOCwgMywgMjI5LCAxNTMsIAotICAgIDgsIDMsIDIyOSwgMTQ4LCA4LCAzLCAyMjksIDEyMywgOCwgMywgMjI5LCAxMjIsIDgsIDMsIDIyOSwgMTI5LCA4LCAzLCAKLSAgICAyMjksIDEyNCwgOCwgMywgMjI5LCAxMzksIDgsIDMsIDIyOSwgMTQ1LCA4LCAzLCAyMjksIDE0MywgOCwgMywgMjI5LCAxMTUsIAotICAgIDgsIDMsIDIyOSwgMTE0LCA4LCAzLCAyMjksIDEyMCwgOCwgMywgMjI5LCAxMTgsIDgsIDMsIDIyOSwgMTE2LCA4LCAzLCAKLSAgICAyMjksIDExNywgOCwgMywgMjQxLCA4NCwgOCwgMywgMjQxLCA4MywgOCwgMywgMjQxLCA5MCwgOCwgMywgMjQxLCA4NSwgOCwgCi0gICAgMywgMjQxLCA4NywgOCwgMywgMjQxLCA4NiwgOCwgMywgMjQxLCA4OSwgOCwgMywgMjQxLCA4OCwgOCwgMywgMjQxLCA5NSwgCi0gICAgOCwgMywgMjQxLCA5NCwgOCwgMywgMjQxLCA5NywgOCwgMywgMjQxLCA5NiwgOCwgMywgMjQxLCA3OCwgOCwgMywgMjQxLCAKLSAgICA3OSwgOCwgMywgMjQxLCA4MSwgOCwgMywgMjQxLCA4MCwgOCwgMywgMjQxLCA4MiwgOCwgMywgMjQxLCA5MSwgOCwgMywgCi0gICAgMjQxLCA5MywgOCwgMywgMjQxLCA5MiwgOCwgMywgMjQxLCA3NywgOCwgMywgMjI4LCAxOTQsIDgsIDMsIDIyOCwgMTkyLCA4LCAKLSAgICAzLCAyMjgsIDIzOCwgOCwgMywgMjI4LCAxOTcsIDgsIDMsIDIyOCwgMjIwLCA4LCAzLCAyMjgsIDIzNCwgOCwgMywgMjI4LCAKLSAgICAyMzMsIDgsIDMsIDIyOSwgMTg4LCA4LCAzLCAxOTgsIDgsIDMsIDIyOSwgMjAyLCA4LCAzLCAyMjcsIDE5MCwgOCwgMywgCi0gICAgMjI3LCAxOTIsIDgsIDMsIDIyNywgMTkxLCA4LCAzLCAyMjgsIDU2LCA4LCAzLCAyMjgsIDQzLCA4LCAzLCAyMjgsIDc5LCA4LCAKLSAgICAzLCAyMjgsIDY1LCA4LCAzLCAyMjksIDg4LCA4LCAzLCAyMjksIDExMiwgOCwgMywgMjI5LCA5OSwgOCwgMywgMjI3LCAxODUsIAotICAgIDgsIDMsIDIyNywgMTgxLCA4LCAzLCAyMjcsIDI0MiwgOCwgMywgMjI3LCAxODksIDgsIDMsIDIyNywgMTg3LCA4LCAzLCAKLSAgICAyMjcsIDE4OCwgOCwgMywgMjQxLCAxNDgsIDgsIDMsIDI0MSwgMTQ3LCA4LCAzLCAyNDEsIDE1MywgOCwgMywgMjQxLCAxNDksIAotICAgIDgsIDMsIDI0MSwgMTUwLCA4LCAzLCAyNDEsIDE1MiwgOCwgMywgMjQxLCAxNTEsIDgsIDMsIDI0MSwgMTU4LCA4LCAzLCAKLSAgICAyNDEsIDE1NywgOCwgMywgMjQxLCAxNjAsIDgsIDMsIDI0MSwgMTU5LCA4LCAzLCAyNDEsIDE0MCwgOCwgMywgMjQxLCAxNDIsIAotICAgIDgsIDMsIDI0MSwgMTQxLCA4LCAzLCAyNDEsIDE0NCwgOCwgMywgMjQxLCAxNDYsIDgsIDMsIDI0MSwgMTQ1LCA4LCAzLCAKLSAgICAyNDEsIDE1NCwgOCwgMywgMjQxLCAxNTYsIDgsIDMsIDI0MSwgMTU1LCA4LCAzLCAyNDEsIDEzNiwgOCwgMywgMjQxLCAxMzUsIAotICAgIDgsIDMsIDI0MSwgMTQzLCA4LCAzLCAyNDEsIDEzOSwgOCwgMywgMjQxLCAxMzcsIDgsIDMsIDI0MSwgMTM4LCA4LCAzLCAKLSAgICAyNDEsIDEzMCwgOCwgMywgMjQxLCAxMjksIDgsIDMsIDI0MSwgMTM0LCA4LCAzLCAyNDEsIDEzMywgOCwgMywgMjQxLCAxMzEsIAotICAgIDgsIDMsIDI0MSwgMTMyLCA4LCAzLCAyMzIsIDIwMSwgOCwgMywgMjMyLCAxOTUsIDgsIDMsIDIzMiwgMjQ3LCA4LCAzLCAKLSAgICAyMzIsIDIwOCwgOCwgMywgMjMyLCAyMzksIDgsIDMsIDIzMiwgMjM4LCA4LCAzLCAyMzIsIDI0MiwgOCwgMywgMjMyLCAyNDAsIAotICAgIDgsIDMsIDIzMywgODUsIDgsIDMsIDIzMywgNzUsIDgsIDMsIDIzMywgMTQxLCA4LCAzLCAyMzMsIDk0LCA4LCAzLCAyMzIsIAotICAgIDg0LCA4LCAzLCAyMzIsIDgzLCA4LCAzLCAyMzIsIDg2LCA4LCAzLCAyMzIsIDg1LCA4LCAzLCAyMzIsIDEyMiwgOCwgMywgCi0gICAgMjMyLCAxMTIsIDgsIDMsIDIzMiwgMTYyLCA4LCAzLCAyMzIsIDEyNiwgOCwgMywgMjMzLCA4LCA4LCAzLCAyMzMsIDY0LCA4LCAKLSAgICAzLCAyMzMsIDIzLCA4LCAzLCAyMzIsIDc5LCA4LCAzLCAyMzIsIDc3LCA4LCAzLCAyMzIsIDEwMywgOCwgMywgMjMyLCA4MiwgCi0gICAgOCwgMywgMjMyLCA4MCwgOCwgMywgMjMyLCA4MSwgOCwgMywgMjMyLCA1OSwgOCwgMywgMjMyLCA1OCwgOCwgMywgMjMyLCAKLSAgICA2NywgOCwgMywgMjMyLCA2MiwgOCwgMywgMjMyLCA2MCwgOCwgMywgMjMyLCA2MSwgOCwgMywgMjQyLCAxOTYsIDgsIDMsIAotICAgIDI0MiwgMTk1LCA4LCAzLCAyNDIsIDIyMSwgOCwgMywgMjQyLCAyMDYsIDgsIDMsIDI0MiwgMjEzLCA4LCAzLCAyNDIsIDIxMiwgCi0gICAgOCwgMywgMjQyLCAyMTUsIDgsIDMsIDI0MiwgMjE0LCA4LCAzLCAyNDMsIDk2LCA4LCAzLCAyNDMsIDkxLCA4LCAzLCAyNDMsIAotICAgIDE0MiwgOCwgMywgMjQzLCAxMDYsIDgsIDMsIDI0MiwgOTgsIDgsIDMsIDI0MiwgOTcsIDgsIDMsIDI0MiwgMTAwLCA4LCAzLCAKLSAgICAyNDIsIDk5LCA4LCAzLCAyNDIsIDE2MSwgOCwgMywgMjQyLCAxNTksIDgsIDMsIDI0MiwgMTgxLCA4LCAzLCAyNDIsIDE2OSwgCi0gICAgOCwgMywgMjQzLCA0MCwgOCwgMywgMjQzLCAzOCwgOCwgMywgMjQzLCA2OSwgOCwgMywgMjQzLCA1MSwgOCwgMywgMjQyLCAKLSAgICA4OCwgOCwgMywgMjQyLCA4NywgOCwgMywgMjQyLCAxMjAsIDgsIDMsIDI0MiwgOTYsIDgsIDMsIDI0MiwgODksIDgsIDMsIAotICAgIDI0MiwgOTUsIDgsIDMsIDIzNCwgNjcsIDgsIDMsIDIzNCwgNjYsIDgsIDMsIDIzNCwgOTgsIDgsIDMsIDIzNCwgODEsIDgsIAotICAgIDMsIDIzNCwgOTEsIDgsIDMsIDIzNCwgOTQsIDgsIDMsIDIzNCwgOTIsIDgsIDMsIDIzNCwgMjA4LCA4LCAzLCAyMzQsIDE5NiwgCi0gICAgOCwgMywgMTc2LCA4LCAzLCAyMzQsIDIzNCwgOCwgMywgMjMzLCAyMDYsIDgsIDMsIDIzMywgMjExLCA4LCAzLCAyMzMsIAotICAgIDIwOCwgOCwgMywgMjM0LCA2LCA4LCAzLCAyMzQsIDIsIDgsIDMsIDIzNCwgMzQsIDgsIDMsIDIzNCwgMTMsIDgsIDMsIDIzNCwgCi0gICAgMTYyLCA4LCAzLCAyMzQsIDE0NiwgOCwgMywgMjM0LCAxODgsIDgsIDMsIDIzNCwgMTY1LCA4LCAzLCAyMzMsIDE5NSwgOCwgCi0gICAgMywgMjMzLCAxOTIsIDgsIDMsIDIzMywgMjIzLCA4LCAzLCAyMzMsIDIwNSwgOCwgMywgMjMzLCAxOTgsIDgsIDMsIDIzMywgCi0gICAgMjAyLCA4LCAzLCAyNDMsIDIyLCA4LCAzLCAyNDMsIDIxLCA4LCAzLCAyNDMsIDI2LCA4LCAzLCAyNDMsIDIzLCA4LCAzLCAKLSAgICAyNDMsIDI1LCA4LCAzLCAyNDMsIDI0LCA4LCAzLCAyNDMsIDMzLCA4LCAzLCAyNDMsIDMyLCA4LCAzLCAyNDMsIDM2LCA4LCAKLSAgICAzLCAyNDMsIDM0LCA4LCAzLCAyNDMsIDEzLCA4LCAzLCAyNDMsIDEyLCA4LCAzLCAyNDMsIDE1LCA4LCAzLCAyNDMsIDE0LCAKLSAgICA4LCAzLCAyNDMsIDE4LCA4LCAzLCAyNDMsIDE3LCA4LCAzLCAyNDMsIDIwLCA4LCAzLCAyNDMsIDE5LCA4LCAzLCAyNDMsIAotICAgIDI4LCA4LCAzLCAyNDMsIDI3LCA4LCAzLCAyNDMsIDMxLCA4LCAzLCAyNDMsIDI5LCA4LCAzLCAyNDMsIDgsIDgsIDMsIDI0MywgCi0gICAgNywgOCwgMywgMjQzLCAxNiwgOCwgMywgMjQzLCAxMSwgOCwgMywgMjQzLCA5LCA4LCAzLCAyNDMsIDEwLCA4LCAzLCAyMzAsIAotICAgIDI1NCwgOCwgMywgMjMwLCAyNTUsIDgsIDMsIDIzMSwgMTcsIDgsIDMsIDIzMSwgMTYsIDgsIDMsIDIzMSwgMTksIDgsIDMsIAotICAgIDIzMSwgMTgsIDgsIDMsIDIzMCwgMjQ1LCA4LCAzLCAyMzAsIDI0NywgOCwgMywgMjMwLCAyNDYsIDgsIDMsIDIzMCwgMjUwLCAKLSAgICA4LCAzLCAyMzAsIDI0OSwgOCwgMywgMjMwLCAyNTIsIDgsIDMsIDIzMCwgMjUxLCA4LCAzLCAyMzEsIDAsIDgsIDMsIDIzMSwgCi0gICAgMiwgOCwgMywgMjMxLCAxLCA4LCAzLCAyMzAsIDI0MSwgOCwgMywgMjMwLCAyNDAsIDgsIDMsIDIzMCwgMjQ4LCA4LCAzLCAKLSAgICAyMzAsIDI0NCwgOCwgMywgMjMwLCAyNDIsIDgsIDMsIDIzMCwgMjQzLCA4LCAzLCAyNDAsIDE4NywgOCwgMywgMjQwLCAxODYsIAotICAgIDgsIDMsIDI0MCwgMTkzLCA4LCAzLCAyNDAsIDE4OCwgOCwgMywgMjQwLCAxOTAsIDgsIDMsIDI0MCwgMTg5LCA4LCAzLCAKLSAgICAyNDAsIDE5MiwgOCwgMywgMjQwLCAxOTEsIDgsIDMsIDI0MCwgMTk4LCA4LCAzLCAyNDAsIDE5NywgOCwgMywgMjQwLCAyMDAsIAotICAgIDgsIDMsIDI0MCwgMTk5LCA4LCAzLCAyNDAsIDE3OSwgOCwgMywgMjQwLCAxNzgsIDgsIDMsIDI0MCwgMTgxLCA4LCAzLCAKLSAgICAyNDAsIDE4MCwgOCwgMywgMjQwLCAxODMsIDgsIDMsIDI0MCwgMTgyLCA4LCAzLCAyNDAsIDE4NSwgOCwgMywgMjQwLCAxODQsIAotICAgIDgsIDMsIDI0MCwgMTk0LCA4LCAzLCAyNDAsIDE5NiwgOCwgMywgMjQwLCAxOTUsIDgsIDMsIDIyOSwgMjksIDgsIDMsIDIyOSwgCi0gICAgMzEsIDgsIDMsIDIyOSwgMzAsIDgsIDMsIDIyOSwgNzIsIDgsIDMsIDIyOSwgNzAsIDgsIDMsIDIyOSwgODIsIDgsIDMsIAotICAgIDIyOSwgNzUsIDgsIDMsIDIyOCwgMjQ4LCA4LCAzLCAyMjgsIDI0NywgOCwgMywgMjI4LCAyNDksIDgsIDMsIDIyOSwgMSwgOCwgCi0gICAgMywgMjI4LCAyNTQsIDgsIDMsIDIyOSwgOSwgOCwgMywgMjI5LCAzLCA4LCAzLCAyMjksIDYzLCA4LCAzLCAyMjksIDY5LCA4LCAKLSAgICAzLCAyMjksIDY1LCA4LCAzLCAyNDEsIDE2MywgOCwgMywgMjQxLCAxNzMsIDgsIDMsIDI0MSwgMTgyLCA4LCAzLCAyNDIsIDIsIAotICAgIDgsIDMsIDI0MSwgMjUwLCA4LCAzLCAxNjIsIDgsIDMsIDI0MiwgMTMsIDgsIDMsIDI0MCwgMjEzLCA4LCAzLCAyNDAsIDIxMiwgCi0gICAgOCwgMywgMjQwLCAyMTUsIDgsIDMsIDI0MCwgMjE0LCA4LCAzLCAyNDAsIDI0OSwgOCwgMywgMjQwLCAyNDAsIDgsIDMsIAotICAgIDI0MSwgNzUsIDgsIDMsIDI0MSwgNTQsIDgsIDMsIDI0MSwgMjAxLCA4LCAzLCAyNDEsIDI0NSwgOCwgMywgMjQxLCAyMTMsIAotICAgIDgsIDMsIDIxMiwgNDMsIDgsIDMsIDIxMiwgMjgsIDgsIDMsIDIxMiwgNjUsIDgsIDMsIDIxMiwgNTEsIDgsIDMsIDIxMSwgCi0gICAgMTg1LCA4LCAzLCAyMTEsIDE4NywgOCwgMywgMjExLCAxODYsIDgsIDMsIDIxMSwgMjAzLCA4LCAzLCAyMTEsIDIyNywgOCwgCi0gICAgMywgMjExLCAyMTAsIDgsIDMsIDIxMiwgNSwgOCwgMywgMjEyLCAyMiwgOCwgMywgMjEyLCAxMCwgOCwgMywgMjEwLCAzMCwgCi0gICAgOCwgMywgMjEwLCAyOSwgOCwgMywgMjEwLCA0NCwgOCwgMywgMjEwLCAzMiwgOCwgMywgMjEwLCAzNywgOCwgMywgMjEwLCAKLSAgICAzOSwgOCwgMywgMjEwLCAzOCwgOCwgMywgMjEwLCAxMDIsIDgsIDMsIDIxMCwgOTksIDgsIDMsIDIxMCwgMTE2LCA4LCAzLCAKLSAgICAyMTAsIDEwNSwgOCwgMywgMjEwLCA2LCA4LCAzLCAyMTAsIDgsIDgsIDMsIDIxMCwgNywgOCwgMywgMjEwLCAxOSwgOCwgMywgCi0gICAgMjEwLCAxOCwgOCwgMywgMjEwLCAyMywgOCwgMywgMjEwLCAyMCwgOCwgMywgMjEwLCA4NCwgOCwgMywgMjEwLCA5NCwgOCwgCi0gICAgMywgMjEwLCA4OCwgOCwgMywgMjEwLCAyLCA4LCAzLCAyMTAsIDEsIDgsIDMsIDIxMCwgMTMsIDgsIDMsIDIxMCwgNSwgOCwgCi0gICAgMywgMjEwLCAzLCA4LCAzLCAyMTAsIDQsIDgsIDMsIDIwOSwgMjQ1LCA4LCAzLCAyMDksIDI0NCwgOCwgMywgMjA5LCAyNTAsIAotICAgIDgsIDMsIDIwOSwgMjQ4LCA4LCAzLCAyMDksIDI0NiwgOCwgMywgMjA5LCAyNDcsIDgsIDMsIDI1MCwgMzYsIDgsIDMsIDI1MCwgCi0gICAgMzIsIDgsIDMsIDI1MCwgNTksIDgsIDMsIDI1MCwgNDUsIDgsIDMsIDI1MCwgNTYsIDgsIDMsIDI1MCwgNTAsIDgsIDMsIAotICAgIDI1MCwgNTgsIDgsIDMsIDI1MCwgNTcsIDgsIDMsIDI1MCwgMjMyLCA4LCAzLCAyNTAsIDIyNSwgOCwgMywgMjUxLCA0MSwgOCwgCi0gICAgMywgMjUxLCAzLCA4LCAzLCAyNDksIDExMiwgOCwgMywgMjQ5LCAxMTQsIDgsIDMsIDI0OSwgMTEzLCA4LCAzLCAyNDksIAotICAgIDE2MSwgOCwgMywgMjQ5LCAxNTIsIDgsIDMsIDI0OSwgMjQ2LCA4LCAzLCAyNDksIDE3NywgOCwgMywgMjUwLCAxNjgsIDgsIAotICAgIDMsIDI1MCwgMTk4LCA4LCAzLCAyNTAsIDE3MywgOCwgMywgMjQ5LCA5MiwgOCwgMywgMjQ5LCA5MCwgOCwgMywgMjQ5LCAKLSAgICAxMjAsIDgsIDMsIDI0OSwgMTEwLCA4LCAzLCAyNDksIDk3LCA4LCAzLCAyNDksIDEwOSwgOCwgMywgMjQ5LCA3MSwgOCwgMywgCi0gICAgMjQ5LCA3MCwgOCwgMywgMjQ5LCA4MSwgOCwgMywgMjQ5LCA3NywgOCwgMywgMjQ5LCA3MiwgOCwgMywgMjQ5LCA3NCwgOCwgCi0gICAgMywgMjA5LCAyMjgsIDgsIDMsIDIwOSwgMjI3LCA4LCAzLCAyMDksIDIzNCwgOCwgMywgMjA5LCAyMjksIDgsIDMsIDIwOSwgCi0gICAgMjMxLCA4LCAzLCAyMDksIDIzMCwgOCwgMywgMjA5LCAyMzMsIDgsIDMsIDIwOSwgMjMyLCA4LCAzLCAyMDksIDI0MCwgOCwgCi0gICAgMywgMjA5LCAyMzksIDgsIDMsIDIwOSwgMjQzLCA4LCAzLCAyMDksIDI0MSwgOCwgMywgMjA5LCAyMjQsIDgsIDMsIDIwOSwgCi0gICAgMjI2LCA4LCAzLCAyMDksIDIyNSwgOCwgMywgMjA5LCAyMzUsIDgsIDMsIDIwOSwgMjM4LCA4LCAzLCAyMDksIDIzNiwgOCwgCi0gICAgMywgMjA5LCAyMTcsIDgsIDMsIDIwOSwgMjIxLCA4LCAzLCAyMDksIDIyMCwgOCwgMywgMjA5LCAyMTgsIDgsIDMsIDIwOSwgCi0gICAgMjE5LCA4LCAzLCAyMDksIDIxMSwgOCwgMywgMjA5LCAyMTAsIDgsIDMsIDIwOSwgMjE2LCA4LCAzLCAyMDksIDIxNCwgOCwgCi0gICAgMywgMjA5LCAyMTIsIDgsIDMsIDIwOSwgMjEzLCA4LCAzLCAyMjcsIDEwOCwgOCwgMywgMjI3LCAxMDcsIDgsIDMsIDIyNywgCi0gICAgMTEzLCA4LCAzLCAyMjcsIDEwOSwgOCwgMywgMjI3LCAxMTAsIDgsIDMsIDIyNywgMTEyLCA4LCAzLCAyMjcsIDExMSwgOCwgCi0gICAgMywgMjI3LCAxMTgsIDgsIDMsIDIyNywgMTE3LCA4LCAzLCAyMjcsIDEyMSwgOCwgMywgMjI3LCAxMjAsIDgsIDMsIDIyNywgCi0gICAgMTAxLCA4LCAzLCAyMjcsIDEwMiwgOCwgMywgMjI3LCAxMDUsIDgsIDMsIDIyNywgMTA2LCA4LCAzLCAyMjcsIDExNCwgOCwgCi0gICAgMywgMjI3LCAxMTYsIDgsIDMsIDIyNywgOTYsIDgsIDMsIDIyNywgMTA0LCA4LCAzLCAyMjcsIDEwMCwgOCwgMywgMjI3LCAKLSAgICA5NywgOCwgMywgMjI3LCA5OCwgOCwgMywgMjI3LCA5MSwgOCwgMywgMjI3LCA5MCwgOCwgMywgMjI3LCA5NSwgOCwgMywgCi0gICAgMjI3LCA5NCwgOCwgMywgMjI3LCA5MiwgOCwgMywgMjI3LCA5MywgOCwgMywgMjE5LCAxMjksIDgsIDMsIDE5NSwgOCwgMywgCi0gICAgMjE5LCAxOTMsIDgsIDMsIDIxOSwgMTMyLCA4LCAzLCAyMTksIDE4NSwgOCwgMywgMjE5LCAxODgsIDgsIDMsIDIxOSwgMTg2LCAKLSAgICA4LCAzLCAyMjEsIDIyOCwgOCwgMywgMjIxLCAyMTYsIDgsIDMsIDIwNiwgOCwgMywgMjIxLCAyMzYsIDgsIDMsIDIxOCwgMjksIAotICAgIDgsIDMsIDIxOCwgMzEsIDgsIDMsIDIxOCwgMzAsIDgsIDMsIDIxOSwgMzYsIDgsIDMsIDIxOSwgMjUsIDgsIDMsIDIxOSwgCi0gICAgNjAsIDgsIDMsIDIxOSwgNDAsIDgsIDMsIDIyMCwgMTE2LCA4LCAzLCAyMjEsIDE4MywgOCwgMywgMjIwLCAxNDEsIDgsIDMsIAotICAgIDIxOCwgNiwgOCwgMywgMjE4LCA0LCA4LCAzLCAyMTgsIDg0LCA4LCAzLCAyMTgsIDI4LCA4LCAzLCAyMTgsIDEwLCA4LCAzLCAKLSAgICAyMTgsIDE4LCA4LCAzLCAyMTcsIDE2NywgOCwgMywgMjE3LCAxNjYsIDgsIDMsIDIxNywgMjMzLCA4LCAzLCAyMTcsIDE3NCwgCi0gICAgOCwgMywgMjE3LCAxNjksIDgsIDMsIDIxNywgMTczLCA4LCAzLCAyMTgsIDE4OCwgOCwgMywgMjE4LCAxODcsIDgsIDMsIAotICAgIDIxOCwgMTk0LCA4LCAzLCAyMTgsIDE4OSwgOCwgMywgMjE4LCAxOTEsIDgsIDMsIDIxOCwgMTkzLCA4LCAzLCAyMTgsIDE5MiwgCi0gICAgOCwgMywgMjE4LCAyMDIsIDgsIDMsIDIxOCwgMjAwLCA4LCAzLCAyMTgsIDIyNSwgOCwgMywgMjE4LCAyMDMsIDgsIDMsIAotICAgIDIxOCwgMTgzLCA4LCAzLCAyMTgsIDE4MiwgOCwgMywgMjE4LCAxODYsIDgsIDMsIDIxOCwgMTg0LCA4LCAzLCAyMTgsIDE5NiwgCi0gICAgOCwgMywgMjE4LCAxOTksIDgsIDMsIDIxOCwgMTk3LCA4LCAzLCAyMTgsIDE3OSwgOCwgMywgMjE4LCAxNzcsIDgsIDMsIAotICAgIDIxOCwgMTgxLCA4LCAzLCAyMTgsIDE4MCwgOCwgMywgMjE4LCAxNzIsIDgsIDMsIDIxOCwgMTcxLCA4LCAzLCAyMTgsIDE3NiwgCi0gICAgOCwgMywgMjE4LCAxNzUsIDgsIDMsIDIxOCwgMTczLCA4LCAzLCAyMTgsIDE3NCwgOCwgMywgMjEwLCA3NywgOCwgMywgMjEwLCAKLSAgICA3NiwgOCwgMywgMjEwLCA4MiwgOCwgMywgMjEwLCA3OSwgOCwgMywgMjEwLCA1OSwgOCwgMywgMjEwLCA2MSwgOCwgMywgCi0gICAgMjEwLCA2MCwgOCwgMywgMjEwLCA2NCwgOCwgMywgMjEwLCA2MywgOCwgMywgMjEwLCA2NywgOCwgMywgMjEwLCA2NSwgOCwgCi0gICAgMywgMjEwLCA3MSwgOCwgMywgMjEwLCA3MCwgOCwgMywgMjEwLCA3NCwgOCwgMywgMjEwLCA3MiwgOCwgMywgMjEwLCA1NSwgCi0gICAgOCwgMywgMjEwLCA1NCwgOCwgMywgMjEwLCA2MiwgOCwgMywgMjEwLCA1OCwgOCwgMywgMjEwLCA1NiwgOCwgMywgMjEwLCAKLSAgICA1NywgOCwgMywgMjEwLCA0NywgOCwgMywgMjEwLCA0NiwgOCwgMywgMjEwLCA1MSwgOCwgMywgMjEwLCA1MCwgOCwgMywgCi0gICAgMjEwLCA0OCwgOCwgMywgMjEwLCA0OSwgOCwgMywgMjUwLCAxNDQsIDgsIDMsIDI1MCwgMTQxLCA4LCAzLCAyNTAsIDE2NSwgCi0gICAgOCwgMywgMjUwLCAxNTIsIDgsIDMsIDI1MCwgNzMsIDgsIDMsIDI1MCwgNzIsIDgsIDMsIDI1MCwgNzUsIDgsIDMsIDI1MCwgCi0gICAgNzQsIDgsIDMsIDI1MCwgODcsIDgsIDMsIDI1MCwgODYsIDgsIDMsIDI1MCwgOTQsIDgsIDMsIDI1MCwgODksIDgsIDMsIAotICAgIDI1MCwgMTIzLCA4LCAzLCAyNTAsIDEyMSwgOCwgMywgMjUwLCAxMzksIDgsIDMsIDI1MCwgMTI5LCA4LCAzLCAyNTAsIDY3LCAKLSAgICA4LCAzLCAyNTAsIDc3LCA4LCAzLCAyNTAsIDcxLCA4LCAzLCAyNTAsIDY4LCA4LCAzLCAyNTAsIDcwLCA4LCAzLCAyNTAsIAotICAgIDYxLCA4LCAzLCAyNTAsIDYwLCA4LCAzLCAyNTAsIDY1LCA4LCAzLCAyNTAsIDY0LCA4LCAzLCAyNTAsIDYyLCA4LCAzLCAKLSAgICAyNTAsIDYzLCA4LCAzLCAyMjIsIDE3NywgOCwgMywgMjIyLCAxODEsIDgsIDMsIDIyMiwgMTYwLCA4LCAzLCAyMjIsIDE2MSwgCi0gICAgOCwgMywgMjIyLCAxNjQsIDgsIDMsIDIyMiwgMTYzLCA4LCAzLCAyMjIsIDE2NywgOCwgMywgMjIyLCAxNjUsIDgsIDMsIAotICAgIDIyMiwgMTcxLCA4LCAzLCAyMjIsIDE3MCwgOCwgMywgMjIyLCAxNzYsIDgsIDMsIDIyMiwgMTcyLCA4LCAzLCAyMjIsIDE1NiwgCi0gICAgOCwgMywgMjIyLCAxNTQsIDgsIDMsIDIyMiwgMTYyLCA4LCAzLCAyMjIsIDE1OSwgOCwgMywgMjIyLCAxNTcsIDgsIDMsIAotICAgIDIyMiwgMTU4LCA4LCAzLCAyMjIsIDE0OSwgOCwgMywgMjIyLCAxNDgsIDgsIDMsIDIyMiwgMTUzLCA4LCAzLCAyMjIsIDE1MiwgCi0gICAgOCwgMywgMjIyLCAxNTAsIDgsIDMsIDIyMiwgMTUxLCA4LCAzLCAyMjgsIDM5LCA4LCAzLCAyMjgsIDM4LCA4LCAzLCAyMjgsIAotICAgIDQxLCA4LCAzLCAyMjgsIDQwLCA4LCAzLCAyMjgsIDMxLCA4LCAzLCAyMjgsIDMzLCA4LCAzLCAyMjgsIDMyLCA4LCAzLCAKLSAgICAyMjgsIDM1LCA4LCAzLCAyMjgsIDM0LCA4LCAzLCAyMjgsIDM3LCA4LCAzLCAyMjgsIDM2LCA4LCAzLCAyMjgsIDI2LCA4LCAKLSAgICAzLCAyMjgsIDI1LCA4LCAzLCAyMjgsIDMwLCA4LCAzLCAyMjgsIDI5LCA4LCAzLCAyMjgsIDI3LCA4LCAzLCAyMjgsIDI4LCAKLSAgICA4LCAzLCAyMjgsIDIwLCA4LCAzLCAyMjgsIDE5LCA4LCAzLCAyMjgsIDI0LCA4LCAzLCAyMjgsIDIzLCA4LCAzLCAyMjgsIAotICAgIDIxLCA4LCAzLCAyMjgsIDIyLCA4LCAzLCAyMjAsIDc0LCA4LCAzLCAyMjAsIDY5LCA4LCAzLCAyMjAsIDEwNCwgOCwgMywgCi0gICAgMjIwLCA4NSwgOCwgMywgMjE5LCAyMTcsIDgsIDMsIDIxOSwgMjE5LCA4LCAzLCAyMTksIDIxOCwgOCwgMywgMjE5LCAyMzgsIAotICAgIDgsIDMsIDIxOSwgMjM1LCA4LCAzLCAyMjAsIDksIDgsIDMsIDIyMCwgMCwgOCwgMywgMjIwLCA0NCwgOCwgMywgMjIwLCAzNywgCi0gICAgOCwgMywgMjIwLCA2NSwgOCwgMywgMjIwLCA1MiwgOCwgMywgMjE5LCAyMTMsIDgsIDMsIDIxOSwgMjExLCA4LCAzLCAyMTksIAotICAgIDIyNywgOCwgMywgMjE5LCAyMTYsIDgsIDMsIDIxOSwgMjE0LCA4LCAzLCAyMTksIDIxNSwgOCwgMywgMjE5LCAxOTYsIDgsIAotICAgIDMsIDIxOSwgMTk1LCA4LCAzLCAyMTksIDIwMiwgOCwgMywgMjE5LCAxOTksIDgsIDMsIDIxOSwgMTk3LCA4LCAzLCAyMTksIAotICAgIDE5OCwgOCwgMywgMjIzLCAxNDQsIDgsIDMsIDIyMywgMTM4LCA4LCAzLCAyMDUsIDgsIDMsIDIyMywgMTUwLCA4LCAzLCAKLSAgICAyMjIsIDEyMiwgOCwgMywgMjIyLCAxMjQsIDgsIDMsIDIyMiwgMTIzLCA4LCAzLCAyMjIsIDE5MCwgOCwgMywgMjIyLCAxODMsIAotICAgIDgsIDMsIDIyMiwgMjEzLCA4LCAzLCAyMjIsIDE5NCwgOCwgMywgMjIzLCA0NiwgOCwgMywgMjIzLCAxMzEsIDgsIDMsIDIyMywgCi0gICAgODQsIDgsIDMsIDIyMiwgMTE1LCA4LCAzLCAyMjIsIDExMiwgOCwgMywgMjIyLCAxNDIsIDgsIDMsIDIyMiwgMTIxLCA4LCAzLCAKLSAgICAyMjIsIDExNywgOCwgMywgMjIyLCAxMTgsIDgsIDMsIDIyMiwgOTcsIDgsIDMsIDIyMiwgOTYsIDgsIDMsIDIyMiwgMTAyLCAKLSAgICA4LCAzLCAyMjIsIDEwMCwgOCwgMywgMjIyLCA5OCwgOCwgMywgMjIyLCA5OSwgOCwgMywgMjM1LCAxMDQsIDgsIDMsIDIzNSwgCi0gICAgMTAzLCA4LCAzLCAyMzUsIDExNCwgOCwgMywgMjM1LCAxMDUsIDgsIDMsIDIzNSwgMTEwLCA4LCAzLCAyMzUsIDEwOSwgOCwgCi0gICAgMywgMjM1LCAxMTIsIDgsIDMsIDIzNSwgMTExLCA4LCAzLCAyMzUsIDQ3LCA4LCAzLCAyMzUsIDQ2LCA4LCAzLCAyMzUsIDQ5LCAKLSAgICA4LCAzLCAyMzUsIDQ4LCA4LCAzLCAyMzUsIDYyLCA4LCAzLCAyMzUsIDYwLCA4LCAzLCAyMzUsIDc0LCA4LCAzLCAyMzUsIAotICAgIDY0LCA4LCAzLCAyMzUsIDQwLCA4LCAzLCAyMzUsIDM4LCA4LCAzLCAyMzUsIDU3LCA4LCAzLCAyMzUsIDQ1LCA4LCAzLCAKLSAgICAyMzUsIDQyLCA4LCAzLCAyMzUsIDQzLCA4LCAzLCAyMzUsIDMyLCA4LCAzLCAyMzUsIDMxLCA4LCAzLCAyMzUsIDM2LCA4LCAKLSAgICAzLCAyMzUsIDM1LCA4LCAzLCAyMzUsIDMzLCA4LCAzLCAyMzUsIDM0LCA4LCAzLCAyMjQsIDQ5LCA4LCAzLCAyMjQsIDQ3LCAKLSAgICA4LCAzLCAyMjQsIDU2LCA4LCAzLCAyMjQsIDUwLCA4LCAzLCAyMjQsIDUzLCA4LCAzLCAyMjQsIDUyLCA4LCAzLCAyMjQsIAotICAgIDU1LCA4LCAzLCAyMjQsIDU0LCA4LCAzLCAyMjQsIDIsIDgsIDMsIDIyMywgMjU1LCA4LCAzLCAyMjQsIDQsIDgsIDMsIDIyNCwgCi0gICAgMywgOCwgMywgMjI0LCAzNiwgOCwgMywgMjI0LCAzNSwgOCwgMywgMjI0LCA0NSwgOCwgMywgMjI0LCAzOSwgOCwgMywgMjIzLCAKLSAgICAyNTAsIDgsIDMsIDIyMywgMjQ2LCA4LCAzLCAyMjQsIDMzLCA4LCAzLCAyMjMsIDI1NCwgOCwgMywgMjIzLCAyNTIsIDgsIDMsIAotICAgIDIyMywgMjUzLCA4LCAzLCAyMjMsIDIzMCwgOCwgMywgMjIzLCAyMjgsIDgsIDMsIDIyMywgMjQwLCA4LCAzLCAyMjMsIDIzMywgCi0gICAgOCwgMywgMjIzLCAyMzEsIDgsIDMsIDIyMywgMjMyLCA4LCAzLCAyMzUsIDkzLCA4LCAzLCAyMzUsIDkyLCA4LCAzLCAyMzUsIAotICAgIDk5LCA4LCAzLCAyMzUsIDk0LCA4LCAzLCAyMzUsIDk2LCA4LCAzLCAyMzUsIDk1LCA4LCAzLCAyMzUsIDk4LCA4LCAzLCAKLSAgICAyMzUsIDk3LCA4LCAzLCAyMzUsIDg0LCA4LCAzLCAyMzUsIDg2LCA4LCAzLCAyMzUsIDg1LCA4LCAzLCAyMzUsIDg5LCA4LCAKLSAgICAzLCAyMzUsIDg4LCA4LCAzLCAyMzUsIDkxLCA4LCAzLCAyMzUsIDkwLCA4LCAzLCAyMzUsIDgwLCA4LCAzLCAyMzUsIDc5LCAKLSAgICA4LCAzLCAyMzUsIDg3LCA4LCAzLCAyMzUsIDgzLCA4LCAzLCAyMzUsIDgxLCA4LCAzLCAyMzUsIDgyLCA4LCAzLCAyMzUsIAotICAgIDc2LCA4LCAzLCAyMzUsIDc1LCA4LCAzLCAyMzUsIDc4LCA4LCAzLCAyMzUsIDc3LCA4LCAzLCAyMjgsIDE2NywgOCwgMywgCi0gICAgMjI4LCAxNjYsIDgsIDMsIDIyOCwgMTc0LCA4LCAzLCAyMjgsIDE2OCwgOCwgMywgMjI4LCAxNzAsIDgsIDMsIDIyOCwgMTY5LCAKLSAgICA4LCAzLCAyMjgsIDE3MywgOCwgMywgMjI4LCAxNzEsIDgsIDMsIDIyOCwgMTU2LCA4LCAzLCAyMjgsIDE1NywgOCwgMywgCi0gICAgMjI4LCAxNjIsIDgsIDMsIDIyOCwgMTYxLCA4LCAzLCAyMjgsIDE2NSwgOCwgMywgMjI4LCAxNjMsIDgsIDMsIDIyOCwgMTUxLCAKLSAgICA4LCAzLCAyMjgsIDE2MCwgOCwgMywgMjI4LCAxNTUsIDgsIDMsIDIyOCwgMTUyLCA4LCAzLCAyMjgsIDE1MywgOCwgMywgCi0gICAgMjI4LCAxNDYsIDgsIDMsIDIyOCwgMTQ1LCA4LCAzLCAyMjgsIDE1MCwgOCwgMywgMjI4LCAxNDksIDgsIDMsIDIyOCwgMTQ3LCAKLSAgICA4LCAzLCAyMjgsIDE0OCwgOCwgMywgMjI3LCAxNDEsIDgsIDMsIDIyNywgMTQwLCA4LCAzLCAyMjcsIDE1MiwgOCwgMywgCi0gICAgMjI3LCAxNDUsIDgsIDMsIDIyNywgMTQ5LCA4LCAzLCAyMjcsIDE0OCwgOCwgMywgMjI3LCAxNTEsIDgsIDMsIDIyNywgMTUwLCAKLSAgICA4LCAzLCAyMjcsIDEyOCwgOCwgMywgMjI3LCAxMzAsIDgsIDMsIDIyNywgMTI5LCA4LCAzLCAyMjcsIDEzNCwgOCwgMywgCi0gICAgMjI3LCAxMzMsIDgsIDMsIDIyNywgMTM4LCA4LCAzLCAyMjcsIDEzNSwgOCwgMywgMjI3LCAxMjYsIDgsIDMsIDIyNywgMTI0LCAKLSAgICA4LCAzLCAyMjcsIDEzMiwgOCwgMywgMjI3LCAxMjcsIDgsIDMsIDIxMSwgMTUwLCA4LCAzLCAyMTEsIDE0OSwgOCwgMywgCi0gICAgMjExLCAxNTcsIDgsIDMsIDIxMSwgMTUyLCA4LCAzLCAyMTEsIDE1NCwgOCwgMywgMjExLCAxNTMsIDgsIDMsIDIxMSwgMTU2LCAKLSAgICA4LCAzLCAyMTEsIDE1NSwgOCwgMywgMjExLCAxMzksIDgsIDMsIDIxMSwgMTQwLCA4LCAzLCAyMTEsIDE0NCwgOCwgMywgCi0gICAgMjExLCAxNDMsIDgsIDMsIDIxMSwgMTQ4LCA4LCAzLCAyMTEsIDE0NiwgOCwgMywgMjExLCAxMjEsIDgsIDMsIDIxMSwgMTE5LCAKLSAgICA4LCAzLCAyMTEsIDEzMSwgOCwgMywgMjExLCAxMjQsIDgsIDMsIDIxMSwgMTIyLCA4LCAzLCAyMTEsIDEyMywgOCwgMywgCi0gICAgMjEwLCAyNTAsIDgsIDMsIDIxMCwgMjQ4LCA4LCAzLCAyMTEsIDgsIDgsIDMsIDIxMCwgMjUxLCA4LCAzLCAyMTEsIDIsIDgsIAotICAgIDMsIDIxMSwgMSwgOCwgMywgMjExLCA1LCA4LCAzLCAyMTEsIDMsIDgsIDMsIDIxMCwgMTkxLCA4LCAzLCAyMTAsIDE5MCwgOCwgCi0gICAgMywgMjEwLCAxOTQsIDgsIDMsIDIxMCwgMTkyLCA4LCAzLCAyMTAsIDIyNCwgOCwgMywgMjEwLCAyMjEsIDgsIDMsIDIxMCwgCi0gICAgMjQ0LCA4LCAzLCAyMTAsIDIyOCwgOCwgMywgMjEwLCAxODIsIDgsIDMsIDIxMCwgMTc4LCA4LCAzLCAyMTAsIDIxMiwgOCwgCi0gICAgMywgMjEwLCAxODksIDgsIDMsIDIxMCwgMTg1LCA4LCAzLCAyMTAsIDE4NiwgOCwgMywgMjEwLCAxNjIsIDgsIDMsIDIxMCwgCi0gICAgMTYxLCA4LCAzLCAyMTAsIDE2OSwgOCwgMywgMjEwLCAxNjUsIDgsIDMsIDIxMCwgMTYzLCA4LCAzLCAyMTAsIDE2NCwgOCwgCi0gICAgMzQsIDIyNCwgMzYsIDgsIDM0LCAyMzIsIDI0NywgOCwgMzQsIDIzNCwgNjcsIDgsIDM0LCAyMjcsIDE0NSwgOCwgMzQsIAotICAgIDI0OSwgNzcsIDgsIDM0LCAyMTgsIDE5NCwgOCwgMzQsIDI0MywgMTksIDgsIDM0LCAyNDMsIDUxLCA4LCAzNCwgMjMwLCAKLSAgICAyMzUsIDgsIDM0LCAyNDAsIDE4NywgOCwgMzQsIDIzMiwgNjEsIDgsIDM0LCAyNTIsIDkxLCA4LCAzNCwgMjMwLCAxMzEsIDgsIAotICAgIDM0LCAyMTAsIDI0NCwgOCwgMzQsIDIyNCwgMTI0LCA4LCAzNCwgMjQwLCAxODEsIDgsIDM0LCAyMTcsIDQ3LCA4LCAzNCwgCi0gICAgMjQzLCAxNDIsIDgsIDM0LCAyMTAsIDUsIDgsIDM0LCAyNDksIDcxLCA4LCAzNCwgMjQ4LCAxMDMsIDgsIDM0LCAyNTEsIAotICAgIDEwNiwgOCwgMzQsIDI0MywgMTUsIDgsIDM0LCAyMjcsIDEzNSwgOCwgMzQsIDIxNSwgMTE5LCA4LCAzNCwgMjI2LCAxNzksIAotICAgIDgsIDM0LCAyMzUsIDgwLCA4LCAzNCwgMjEwLCAxOSwgOCwgMzQsIDIyNCwgMTAzLCA4LCAzNCwgMjQxLCAxMTUsIDgsIDM0LCAKLSAgICAyMTAsIDI1MCwgOCwgMzQsIDIxMiwgMTEyLCA4LCAzNCwgMjE5LCAyMDIsIDgsIDM0LCAyMTMsIDI0NCwgOCwgMzQsIDIxMCwgCi0gICAgMTE2LCA4LCAzNCwgMjM1LCA3NCwgOCwgMzQsIDIyNywgMTAwLCA4LCAzNCwgMjM1LCA3OCwgOCwgMzQsIDI0MiwgMTYxLCA4LCAKLSAgICAzNCwgMjM1LCA5OCwgOCwgMzQsIDIxMSwgMjI3LCA4LCAzNCwgMjQ2LCA4NiwgOCwgMzQsIDIxOSwgMjE1LCA4LCAzNCwgCi0gICAgMjMyLCAyNDIsIDgsIDM0LCAyNDksIDgxLCA4LCAzNCwgMjQ5LCAxMTMsIDgsIDM0LCAyNTAsIDQ1LCA4LCAzNCwgMjQwLCAKLSAgICAxODQsIDgsIDM0LCAyMjAsIDc0LCA4LCAzNCwgMjEwLCA0LCA4LCAzNCwgMjIwLCAwLCA4LCAzNCwgMjUwLCAxMzksIDgsIAotICAgIDM0LCAyMDksIDIzMSwgOCwgMzQsIDIyOSwgMTc4LCA4LCAzNCwgMjM0LCAxODgsIDIzMiwgMjAyLCAxLCAyNTIsIDE5OSwgCi0gICAgMjMyLCAyMDIsIDEsIDE5MSwgMjMyLCAyMDIsIDEsIDIyNSwgMTUwLCAyMzIsIDIwMiwgMSwgMjQ4LCAyMjksIDIzMiwgMjAyLCAKLSAgICAxLCAyMTcsIDEwNiwgMjMyLCAyMDIsIDEsIDIxNiwgMjA5LCAyMzIsIDIwMiwgMSwgMjQzLCAxNDIsIDIzMiwgMjAyLCAxLCAKLSAgICAxNzYsIDIzMiwgMjAyLCAxLCAyMzQsIDEzOCwgMjMyLCAyMDIsIDEsIDIzNSwgMTQ3LCAyMzIsIDIwMiwgMSwgMjUxLCA0MSwgCi0gICAgMjMyLCAyMDIsIDEsIDI1MCwgMTY1LCAyMzIsIDIwMiwgMSwgMjQ2LCA0NiwgMjMyLCAyMDIsIDEsIDIxNSwgMTg0LCAyMzIsIAotICAgIDIwMiwgMSwgMjE1LCAxNzYsIDIzMiwgMjAyLCAxLCAxODYsIDIzMiwgMjAyLCAxLCAxOTgsIDIzMiwgMjAyLCAxLCAyMzMsIAotICAgIDE0MSwgMjMyLCAyMDIsIDEsIDIwNiwgMjMyLCAyMDIsIDEsIDIxMCwgODIsIDIzMiwgMjAyLCAxLCAyMTAsIDExNiwgMjMyLCAKLSAgICAyMDIsIDEsIDIyOSwgODIsIDIzMiwgMjAyLCAxLCAxNjIsIDIzMiwgMjAyLCAxLCAyMTEsIDE2NSwgMjMyLCAyMDIsIDEsIAotICAgIDI0MSwgMTk2LCAyMzIsIDIwMiwgMSwgMjQ0LCAyMDQsIDIzMiwgMjAyLCAxLCAyMTIsIDY1LCAyMzIsIDIwMiwgMSwgMjIwLCAKLSAgICAxMDQsIDIzMiwgMjAyLCAxLCAxOTIsIDIzMiwgMjAyLCAxLCAyNDMsIDAsIDIzMiwgMjAyLCAxLCA2MSwgMjMyLCAyMDIsIDEsIAotICAgIDI1NCwgMjUyLCAyMzIsIDIwMiwgMSwgNzYsIDIzMiwgMjAyLCAxLCAyNDUsIDYzLCAyMzIsIDIwMiwgMSwgNzQsIDIzMiwgCi0gICAgMjAyLCAxLCA3OCwgMjMyLCAyMDIsIDEsIDY5LCAyMzIsIDIwMiwgMSwgMjE0LCAyMTQsIDIzMiwgMjAyLCAxLCAyMTQsIAotICAgIDIwOCwgMjMyLCAyMDIsIDEsIDIyNiwgMjM4LCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyMTYsIDExOCwgMjMyLCAKLSAgICAyMDIsIDEsIDEzOCwgMjI5LCAyMzQsIDIyNSwgMTksIDIzMiwgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDI0OSwgODAsIDIzMiwgCi0gICAgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDI1MSwgMjEzLCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAxOTgsIDIzMiwgMjAyLCAKLSAgICAxLCAxMzgsIDIzMCwgMzcsIDIzNSwgMTIxLCAyMzIsIDIwMiwgMjI0LCAxNDQsIDI0OSwgMjI3LCAyMzIsIDIwMiwgMjI0LCAKLSAgICAxNDQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNDEsIDMsIDI0NSwgMjE3LCA0MSwgMywgMjQ1LCAyMTMsIDQxLCAzLCAyNDEsIAotICAgIDIyNywgNDEsIDMsIDIxMiwgMTcsIDQxLCAzLCAyMTIsIDE2LCA0MSwgMywgMjI1LCAyMTQsIDQxLCAzLCAyNTIsIDIxLCA0MSwgCi0gICAgMywgMjUyLCA3NCwgNDEsIDMsIDIzMSwgMTIxLCA0MSwgMywgMjMzLCAyNTMsIDQxLCAzLCAyMzEsIDExLCA0MSwgMywgMjQzLCAKLSAgICA4MiwgNDEsIDMsIDI0NCwgMTU1LCA0MSwgMywgMjEzLCAyNTAsIDQxLCAzLCAyMTcsIDEyLCA0MSwgMywgMjE2LCAxOTUsIAotICAgIDQxLCAzLCAyNDgsIDI0LCA0MSwgMywgMjQ4LCAyMSwgNDEsIDMsIDIzMywgNTYsIDQxLCAzLCAyMjMsIDExMSwgNDEsIDMsIAotICAgIDI0OCwgODUsIDQxLCAzLCAyMjksIDE0NCwgNDEsIDMsIDIyMSwgMTcyLCA0MSwgMywgMjIwLCA2MywgNDEsIDMsIDIxMCwgCi0gICAgOTIsIDQxLCAzLCAyMTAsIDczLCA0MSwgMywgMjUwLCAxOTAsIDQxLCAzLCAyMzUsIDEzMCwgNDEsIDMsIDIyOCwgMTgxLCAKLSAgICA0MSwgMywgMjExLCA0NCwgNDEsIDMsIDIzNCwgMTg3LCA0MSwgMywgMjI5LCA1NiwgNDEsIDMsIDI0MywgNjIsIDQxLCAzLCAKLSAgICAyMzEsIDg1LCA0MSwgMywgMjI5LCAxMDgsIDQxLCAzLCAyMjcsIDE1OSwgNDEsIDMsIDc0LCA0MSwgMywgMjM2LCA2LCA0MSwgCi0gICAgMywgMjQxLCAxODcsIDQxLCAzLCAyNDEsIDE2NywgNDEsIDMsIDIxMSwgMjUwLCA0MSwgMywgMjExLCAyNDEsIDQxLCAzLCAKLSAgICAyMjUsIDExMSwgNDEsIDMsIDI1MiwgMTksIDQxLCAzLCAyNTIsIDE0LCA0MSwgMywgMjMxLCAxMTQsIDQxLCAzLCAyMzMsIAotICAgIDI1MCwgNDEsIDMsIDIzMSwgOCwgNDEsIDMsIDI0MywgNzgsIDQxLCAzLCAyNDQsIDEyOSwgNDEsIDMsIDIxMywgMTc2LCA0MSwgCi0gICAgMywgMjE2LCAxMTgsIDQxLCAzLCAyMTYsIDE3NiwgNDEsIDMsIDI0OCwgMTYsIDQxLCAzLCAyNDgsIDIwLCA0MSwgMywgMjMyLCAKLSAgICAyNDcsIDQxLCAzLCAyMjMsIDM4LCA0MSwgMywgMjQ4LCAxMSwgNDEsIDMsIDIyOSwgMTM4LCA0MSwgMywgMjE5LCAxOTMsIAotICAgIDQxLCAzLCAyMjAsIDM0LCA0MSwgMywgMjEwLCA0NCwgNDEsIDMsIDIxMCwgNjksIDQxLCAzLCAyNTAsIDU5LCA0MSwgMywgCi0gICAgMjM1LCAxMTQsIDQxLCAzLCAyMjgsIDE3NCwgNDEsIDMsIDIxMSwgOCwgNDEsIDMsIDIzNCwgOTgsIDQxLCAzLCAyMjksIDQ4LCAKLSAgICA0MSwgMywgMjQyLCAyMjEsIDQxLCAzLCAyMzAsIDIzNSwgNDEsIDMsIDIyOCwgMjM4LCA0MSwgMywgMjI3LCAxNTIsIDQxLCAKLSAgICAzLCA2MSwgNDEsIDMsIDI1NCwgMTMxLCA0MSwgMywgMjI5LCA3NywgNDEsIDMsIDE2MiwgNDEsIDMsIDI0MiwgMjUsIDQxLCAKLSAgICAzLCAyMTIsIDY1LCA0MSwgMywgMjEyLCA1NSwgNDEsIDMsIDE5MSwgNDEsIDMsIDI1MiwgMjYsIDQxLCAzLCAyNTIsIDE5OSwgCi0gICAgNDEsIDMsIDIzMSwgMTI5LCA0MSwgMywgMjM0LCAxLCA0MSwgMywgMjM0LCAwLCA0MSwgMywgMjMxLCAxNSwgNDEsIDMsIAotICAgIDI0MywgODYsIDQxLCAzLCAyNDQsIDIwNCwgNDEsIDMsIDIxNCwgMjcsIDQxLCAzLCAyMTcsIDEwNiwgNDEsIDMsIDIxNiwgCi0gICAgMjA5LCA0MSwgMywgMjQ4LCAzMywgNDEsIDMsIDI0OCwgMjMsIDQxLCAzLCAyMzMsIDE0MSwgNDEsIDMsIDIwNSwgNDEsIDMsIAotICAgIDI0OCwgMjI5LCA0MSwgMywgMjI5LCAxNTMsIDQxLCAzLCAyMDYsIDQxLCAzLCAyMjAsIDEwNCwgNDEsIDMsIDIxMCwgMTE2LCAKLSAgICA0MSwgMywgMjEwLCA4MiwgNDEsIDMsIDI1MSwgNDEsIDQxLCAzLCAyMzUsIDE0NywgNDEsIDMsIDIyOCwgMTkwLCA0MSwgMywgCi0gICAgMTkyLCA0MSwgMywgMTc2LCA0MSwgMywgMjM0LCAyNDAsIDQxLCAzLCAyMjksIDYxLCA0MSwgMywgMjQzLCAxNDIsIDQxLCAzLCAKLSAgICAxODYsIDQxLCAzLCAxOTgsIDQxLCAzLCAyMjcsIDE2OSwgNDEsIDMsIDIyNiwgMTg3LCA0MSwgMywgMjI2LCAxODMsIDQxLCAKLSAgICAzLCAyNDEsIDYwLCA0MSwgMywgMjExLCAyMTUsIDQxLCAzLCAyMTEsIDIxMSwgNDEsIDMsIDIyNCwgMjUyLCA0MSwgMywgCi0gICAgMjUyLCAxNywgNDEsIDMsIDI1MSwgMjAxLCA0MSwgMywgMjMxLCAxMDksIDQxLCAzLCAyMzMsIDI0OCwgNDEsIDMsIDIzMSwgCi0gICAgNCwgNDEsIDMsIDI0MywgNzQsIDQxLCAzLCAyNDQsIDQyLCA0MSwgMywgMjEzLCAxMjcsIDQxLCAzLCAyMTYsIDE4LCA0MSwgCi0gICAgMywgMjE2LCAxNTQsIDQxLCAzLCAyNDgsIDE0LCA0MSwgMywgMjQ4LCAxOCwgNDEsIDMsIDIzMiwgMTMzLCA0MSwgMywgMjIyLCAKLSAgICAxOTksIDQxLCAzLCAyNDcsIDEzMywgNDEsIDMsIDIyOSwgMTI1LCA0MSwgMywgMjE5LCA0MiwgNDEsIDMsIDIyMCwgMywgNDEsIAotICAgIDMsIDIxMCwgMjEsIDQxLCAzLCAyMTAsIDY2LCA0MSwgMywgMjQ5LCAxODIsIDQxLCAzLCAyMzUsIDY1LCA0MSwgMywgMjI4LCAKLSAgICAxNjQsIDQxLCAzLCAyMTAsIDIyOSwgNDEsIDMsIDIzNCwgMTYsIDQxLCAzLCAyMjksIDQ2LCA0MSwgMywgMjQyLCAxNzEsIAotICAgIDQxLCAzLCAyMzAsIDEzNywgNDEsIDMsIDIyOCwgNjksIDQxLCAzLCAyMjcsIDEzNiwgNDEsIDMsIDY5LCA0MSwgMywgMjE0LCAKLSAgICAxOTAsIDQxLCAzLCAyNDAsIDIyOSwgNDEsIDMsIDI0MCwgMjE5LCA0MSwgMywgMjExLCAxOTUsIDQxLCAzLCAyMTEsIDE4OSwgCi0gICAgNDEsIDMsIDIyNCwgMTUzLCA0MSwgMywgMjUyLCAxNiwgNDEsIDMsIDI1MSwgMTMzLCA0MSwgMywgMjMxLCAxMDgsIDQxLCAzLCAKLSAgICAyMzMsIDI0NiwgNDEsIDMsIDIzMSwgMywgNDEsIDMsIDI0MywgNzMsIDQxLCAzLCAyNDMsIDI0MSwgNDEsIDMsIDIxMiwgCi0gICAgMTE2LCA0MSwgMywgMjE1LCAxMTksIDQxLCAzLCAyMTYsIDEzNywgNDEsIDMsIDI0OCwgMTIsIDQxLCAzLCAyNDgsIDE3LCAKLSAgICA0MSwgMywgMjMyLCAxMDMsIDQxLCAzLCAyMjIsIDE0MiwgNDEsIDMsIDI0NiwgODYsIDQxLCAzLCAyMjksIDEyMCwgNDEsIDMsIAotICAgIDIxOCwgODQsIDQxLCAzLCAyMTksIDIyNywgNDEsIDMsIDIxMCwgMTMsIDQxLCAzLCAyMTAsIDYyLCA0MSwgMywgMjQ5LCAKLSAgICAxMjAsIDQxLCAzLCAyMzUsIDU3LCA0MSwgMywgMjI4LCAxNjAsIDQxLCAzLCAyMTAsIDIxMiwgNDEsIDMsIDIzMywgMjIzLCAKLSAgICA0MSwgMywgMjI5LCA0NSwgNDEsIDMsIDI0MiwgMTIwLCA0MSwgMywgMjMwLCAxMDcsIDQxLCAzLCAyMjcsIDI0MiwgNDEsIDMsIAotICAgIDIyNywgMTMyLCA0MSwgMywgNzgsIDQxLCAzLCAyMjYsIDIwMCwgNDEsIDMsIDIyOSwgNSwgNDEsIDMsIDI0MSwgNzUsIDQxLCAKLSAgICAzLCAyNDEsIDYzLCA0MSwgMywgMjExLCAyMjcsIDQxLCAzLCAyMTEsIDIxNiwgNDEsIDMsIDIyNSwgMTksIDQxLCAzLCAyNTIsIAotICAgIDE4LCA0MSwgMywgMjUxLCAyMTMsIDQxLCAzLCAyMzEsIDExMCwgNDEsIDMsIDIzMywgMjQ5LCA0MSwgMywgMjMxLCA2LCA0MSwgCi0gICAgMywgMjQzLCA3NiwgNDEsIDMsIDI0MywgNzUsIDQxLCAzLCAyNDQsIDUxLCA0MSwgMywgMjEzLCAxMzgsIDQxLCAzLCAxMTIsIAotICAgIDQxLCAzLCAyMTYsIDE1NywgNDEsIDMsIDI0OCwgMTUsIDQxLCAzLCAyNDgsIDE5LCA0MSwgMywgMjMyLCAxNjIsIDQxLCAzLCAKLSAgICAyMjIsIDIxMywgNDEsIDMsIDI0NywgMTUzLCA0MSwgMywgMjI5LCAxMjksIDQxLCAzLCAyMTksIDYwLCA0MSwgMywgMjIwLCAKLSAgICA5LCA0MSwgMywgMjEwLCAyMywgNDEsIDMsIDIxMCwgNjcsIDQxLCAzLCAyNDksIDI0NiwgNDEsIDMsIDIzNSwgNzQsIDQxLCAKLSAgICAzLCAyMjgsIDE2NSwgNDEsIDMsIDIxMCwgMjQ0LCA0MSwgMywgMjM0LCAzNCwgNDEsIDMsIDIyOSwgNDcsIDQxLCAzLCAyNDIsIAotICAgIDE4MSwgNDEsIDMsIDIzMCwgMTY2LCA0MSwgMywgMjI4LCA3OSwgNDEsIDMsIDIyNywgMTM4LCA0MSwgMywgNzYsIDQxLCAzLCAKLSAgICAyNDUsIDE1OCwgNDEsIDMsIDIyOSwgNjYsIDQxLCAzLCAyNDEsIDI0NSwgNDEsIDMsIDI0MSwgMjE2LCA0MSwgMywgMjEyLCAKLSAgICAyMiwgNDEsIDMsIDIxMiwgMTIsIDQxLCAzLCAyMjUsIDIyNCwgNDEsIDMsIDI1MiwgMjIsIDQxLCAzLCAyNTIsIDgzLCA0MSwgCi0gICAgMywgMjMxLCAxMjIsIDQxLCAzLCAyMzMsIDI1NCwgNDEsIDMsIDIzMywgMjUyLCA0MSwgMywgMjMxLCAxMiwgNDEsIDMsIAotICAgIDI0MywgODMsIDQxLCAzLCAyNDMsIDgxLCA0MSwgMywgMjQ0LCAxNjIsIDQxLCAzLCAyMTMsIDI1NSwgNDEsIDMsIDIxNywgCi0gICAgMjMsIDQxLCAzLCAyMTYsIDE5NiwgNDEsIDMsIDI0OCwgMjUsIDQxLCAzLCAyNDgsIDIyLCA0MSwgMywgMjMzLCA2NCwgNDEsIAotICAgIDMsIDIyMywgMTMxLCA0MSwgMywgMjQ4LCA5OCwgNDEsIDMsIDIyOSwgMTQ1LCA0MSwgMywgMjIxLCAxODMsIDQxLCAzLCAKLSAgICAyMjAsIDY1LCA0MSwgMywgMjEwLCA5NCwgNDEsIDMsIDIxMCwgNzQsIDQxLCAzLCAyNTAsIDE5OCwgNDEsIDMsIDIzNSwgCi0gICAgMTMyLCA0MSwgMywgMjI4LCAxODMsIDQxLCAzLCAyMTEsIDQ3LCA0MSwgMywgMjM0LCAxODgsIDQxLCAzLCAyMjksIDU3LCAKLSAgICA0MSwgMywgMjI5LCA1MywgNDEsIDMsIDI0MywgNjksIDQxLCAzLCAyNDMsIDU4LCA0MSwgMywgMjMxLCA5NiwgNDEsIDMsIAotICAgIDIyOSwgMTEyLCA0MSwgMywgMjI3LCAxNjAsIDQxLCAzLCAyMjksIDg0LCA0MSwgMywgMjMzLCAyOCwgNDEsIDI0OSwgMjI3LCAKLSAgICA0MSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA0MSwgMjI0LCAxNiwgNzksIDQxLCAzLCAyMjksIDEyOCwgMjQ0LCAyMDQsIDQxLCAKLSAgICAzLCAyMjksIDEyOCwgMTc2LCA0MSwgMywgMjI5LCAxMjgsIDIxOSwgNDIsIDQxLCAxNiwgMjQ0LCAxNTIsIDQxLCAxNiwgCi0gICAgMjM0LCAxODYsIDQxLCAxNiwgMjE2LCA4MiwgNDEsIDE2LCAyMjgsIDIxMywgNDEsIDE2LCAyNTIsIDE1NSwgNDEsIDE2LCAKLSAgICAyNDQsIDIwMywgNDEsIDE2LCAyMTcsIDEwMiwgNDEsIDE2LCAyNDgsIDE4NCwgNDEsIDE2LCAyNDcsIDEzMiwgNDEsIDE2LCAKLSAgICAyMzMsIDIxMiwgNDEsIDE2LCAyMTYsIDIyLCA0MSwgMTYsIDI0NywgMTUyLCA0MSwgMTYsIDIzNSwgNjYsIDQxLCAyMSwgCi0gICAgMjEwLCA4NiwgNDEsIDIxLCAxMTEsIDQxLCAyMSwgMTA1LCA0MSwgMjEsIDE1OCwgNDEsIDIxLCAxNjEsIDQxLCAyMSwgMTkwLCAKLSAgICA0MSwgMjEsIDE5NSwgNDEsIDIxLCAxOTksIDQxLCAyMSwgMTk2LCA0MSwgMjEsIDIwMSwgNDEsIDMsIDIyOSwgMTI4LCAxODYsIAotICAgIDQxLCAzLCAyMjksIDEyOCwgMjQ3LCAxNTMsIDMzLCA2LCAxLCAyMTAsIDkwLCAzMywgNCwgMSwgMjEwLCA5MCwgMzMsIDYsIAotICAgIDEsIDI0NiwgNDIsIDMzLCA0LCAxLCAyNDYsIDQyLCAzMywgNiwgMSwgMjIzLCA1MiwgMjQ2LCA0NCwgMzMsIDQsIDEsIDIyMywgCi0gICAgNTIsIDI0NiwgNDQsIDMzLCA2LCAxLCAyMzUsIDE5MiwgMzMsIDQsIDEsIDIzNSwgMTkyLCAzMywgNiwgMSwgMjQ3LCAxNjksIAotICAgIDMzLCA0LCAxLCAyNDcsIDE2OSwgMzMsIDYsIDEsIDIzMCwgMTQ1LCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIzMCwgMTQ1LCAKLSAgICAyMTQsIDIwNSwgMzMsIDYsIDEsIDI1MSwgMTQ0LCAyMjYsIDIwNSwgMzMsIDQsIDEsIDI1MSwgMTQ0LCAyMjYsIDIwNSwgMzMsIAotICAgIDYsIDEsIDIyOSwgOTIsIDIxMSwgMzEsIDMzLCA0LCAxLCAyMjksIDkyLCAyMTEsIDMxLCAzMywgNiwgMSwgMjExLCAyOCwgMiwgCi0gICAgMjUyLCAxOTMsIDIxMSwgMzEsIDMzLCA0LCAxLCAyMTEsIDI4LCAyLCAyNTIsIDE5MywgMjExLCAzMSwgMzMsIDYsIDEsIAotICAgIDIzNSwgMTkwLCAyMTEsIDU5LCAzMywgNCwgMSwgMjM1LCAxOTAsIDIxMSwgNTksIDMzLCA2LCAxLCAyMjMsIDUyLCAyMTAsIAotICAgIDIxMiwgMzMsIDQsIDEsIDIyMywgNTIsIDIxMCwgMjEyLCAzMywgNiwgMSwgMjM1LCAxOTAsIDYxLCAzMywgNCwgMSwgMjM1LCAKLSAgICAxOTAsIDYxLCAzMywgNiwgMSwgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTAsIDgsIDIzMiwgCi0gICAgMTk4LCAyMTAsIDE4MywgMzMsIDYsIDEsIDI1MSwgMjIyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjIyLCAyMTAsIAotICAgIDE4MywgMzMsIDYsIDEsIDIzNSwgMTkwLCAyNTAsIDgsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAKLSAgICAyNTAsIDgsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIxMCwgMjQ2LCAzMywgNCwgMSwgMjEwLCAyNDYsIDMzLCAKLSAgICA2LCAxLCAyMjMsIDUyLCAyMTUsIDE3OSwgMzMsIDQsIDEsIDIyMywgNTIsIDIxNSwgMTc5LCAzMywgNiwgMSwgMjE5LCA1NCwgCi0gICAgMjQ4LCA5OCwgMzMsIDQsIDEsIDIxOSwgNTQsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMTksIDU0LCAyNDUsIDE4MiwgMzMsIDQsIAotICAgIDEsIDIxOSwgNTQsIDI0NSwgMTgyLCAzMywgNiwgMSwgMjE5LCA1NCwgMjQ1LCAxNjcsIDMzLCA0LCAxLCAyMTksIDU0LCAKLSAgICAyNDUsIDE2NywgMzMsIDYsIDEsIDIzMCwgMTQ5LCA3OCwgMzMsIDQsIDEsIDIzMCwgMTQ5LCA3OCwgMzMsIDYsIDEsIDI1MSwgCi0gICAgMjQ4LCA3OCwgMzMsIDQsIDEsIDI1MSwgMjQ4LCA3OCwgMzMsIDYsIDEsIDUyLCAyMzAsIDE0OSwgNzgsIDMzLCA0LCAxLCAKLSAgICA1MiwgMjMwLCAxNDksIDc4LCAzMywgMSwgMjMwLCA5MSwgNzgsIDM4LCAzMywgMjEyLCAxMDAsIDM4LCAzMywgMjE2LCAyNDksIAotICAgIDIzMCwgMTk2LCA1MCwgMzgsIDMzLCAyNDAsIDIxOCwgMjMwLCAxOTYsIDUwLCAzOCwgMzMsIDIxNiwgMTQ5LCAyMzAsIDE5NiwgCi0gICAgNTAsIDIxOSwgOTUsIDI1MywgMjI0LCAzOCwgMzMsIDEsIDIxNCwgMjAyLCAyMzYsIDY3LCAzOCwgMzMsIDEsIDc0LCAzOCwgCi0gICAgMzMsIDEsIDIxMSwgOCwgMzgsIDMzLCAxLCA2OSwgMzgsIDMzLCAxLCAyNDIsIDEwLCA1MCwgMzgsIDMzLCAxLCAyMTEsIDI3LCAKLSAgICAzOCwgMzMsIDEsIDIxOSwgNTQsIDUwLCAzOCwgMzMsIDEsIDIyNiwgMjA1LCAzOCwgMzMsIDIzNCwgMTk4LCAzOCwgMzMsIAotICAgIDIyNSwgMjMxLCAzMywgMjM0LCAxOTgsIDMzLCAyMjUsIDIzMSwgMzMsIDYsIDEsIDI0NiwgNTQsIDMzLCA0LCAxLCAyNDYsIAotICAgIDU0LCAzMywgNiwgMSwgMjQ2LCAzNSwgMzMsIDQsIDEsIDI0NiwgMzUsIDMzLCA2LCAxLCAyMTAsIDUyLCAzMywgNCwgMSwgCi0gICAgMjEwLCA1MiwgMzMsIDYsIDEsIDI1MCwgMjE0LCAzMywgNCwgMSwgMjUwLCAyMTQsIDMzLCA2LCAxLCAyNDYsIDMzLCAzMywgCi0gICAgNCwgMSwgMjQ2LCAzMywgMzMsIDYsIDEsIDIxNywgMjQsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyMTcsIDI0LCAyLCAKLSAgICAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjE1LCA3OCwgMzMsIDQsIDEsIDIxNSwgNzgsIDMzLCA2LCAxLCAyMTUsIDE2MSwgCi0gICAgMzMsIDQsIDEsIDIxNSwgMTYxLCAzMywgNiwgMSwgMjE1LCAxNjUsIDMzLCA0LCAxLCAyMTUsIDE2NSwgMzMsIDYsIDEsIAotICAgIDIxNywgMjksIDMzLCA0LCAxLCAyMTcsIDI5LCAzMywgNiwgMSwgMjQwLCAyMDUsIDMzLCA0LCAxLCAyNDAsIDIwNSwgMzMsIAotICAgIDYsIDEsIDIxOSwgMjA4LCAzMywgNCwgMSwgMjE5LCAyMDgsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDc2LCAyMCwgMSwgNjEsIAotICAgIDIwLCAxLCAxNzYsIDIwLCAxLCA2OSwgMjAsIDEsIDIzMywgMjIzLCAyMCwgMSwgMjQ1LCAyMTcsIDIwLCAxLCAyMjMsIDExMSwgCi0gICAgMjAsIDEsIDIxNywgODcsIDIwLCAxLCA3OCwgMjAsIDEsIDIyNywgMTUyLCAyMCwgMSwgNzQsIDIwLCAxLCAyMzMsIDE0MSwgCi0gICAgMjAsIDEsIDE5MSwgMjAsIDEsIDIyMiwgMjQyLCAyMCwgMSwgMjIzLCAzMiwgMjAsIDEsIDIzMywgNTUsIDIwLCAxLCAyMzEsIAotICAgIDg0LCAyMCwgMSwgMjE3LCAxMDIsIDIwLCAxLCAyMjksIDE1MSwgMjAsIDEsIDIyOCwgMTg4LCAyMCwgMSwgMTk0LCAyMCwgMSwgCi0gICAgMjE4LCA1LCAyMCwgMSwgMjMwLCAxMDcsIDIwLCAxLCAyMjAsIDI5LCAyMCwgMSwgMjE5LCAxOTMsIDIwLCAxLCAyMjAsIDM5LCAKLSAgICAyMCwgMSwgMjIwLCAxMjUsIDIwLCAxLCAyMzMsIDE2MSwgMjAsIDEsIDIzNCwgMTYyLCAyMCwgMSwgMjI3LCAyMTMsIDIwLCAKLSAgICAxLCAyMjcsIDI0MiwgMjAsIDEsIDIyOCwgMTU5LCAyMCwgMSwgMjEwLCAyMjYsIDIwLCAxLCAyMTksIDIyNywgMjAsIDEsIAotICAgIDIxMCwgMTg3LCAyMCwgMSwgMTkyLCAyMCwgMSwgMjI4LCAxNCwgMjAsIDEsIDIzNCwgMTQ4LCAyMCwgMSwgMjI1LCAxNTQsIAotICAgIDIwLCAxLCAyMjgsIDE4MSwgMjAsIDEsIDIyNywgMjUxLCAyMCwgMSwgMjI0LCAxNDcsIDIwLCAxLCAyMTEsIDE5MiwgMjAsIAotICAgIDEsIDIyNSwgMjE0LCAyMCwgMSwgMjQ0LCAxNTUsIDIwLCAxLCAyMjIsIDE0MiwgMjAsIDEsIDIzMiwgMTAzLCAyMCwgMSwgCi0gICAgMjMwLCAyMzUsIDIwLCAxLCAyMjgsIDIzOCwgMjAsIDEsIDIyMywgNTQsIDIwLCAxLCAyMjMsIDE3NCwgMjAsIDEsIDIzNCwgCi0gICAgMTcxLCAyMCwgMSwgMjI5LCAxMiwgMjAsIDEsIDIyOSwgNjEsIDIwLCAxLCAyMjksIDgyLCAyMCwgMSwgMjIwLCA5LCAyMCwgCi0gICAgMSwgMjI0LCAxNTAsIDIwLCAxLCAyNDMsIDI0MSwgMjAsIDEsIDI0NCwgNDUsIDIwLCAxLCAyMTIsIDY1LCAyMCwgMSwgMTk4LCAKLSAgICAyMCwgMSwgMjMyLCAyNDcsIDIwLCAxLCAyMjUsIDExMSwgMjAsIDEsIDIzMiwgMTI1LCAyMCwgMSwgMjM0LCAzNCwgMjAsIDEsIAotICAgIDIzMSwgMTE5LCAyMCwgMSwgMjIzLCA4NiwgMjAsIDEsIDIzMSwgNjMsIDIwLCAxLCAxODYsIDIwLCAxLCAyMTYsIDExOCwgCi0gICAgMjAsIDEsIDIzNCwgOTgsIDIwLCAxLCAyMzAsIDE2NiwgMjAsIDEsIDIzMSwgMTI3LCAyMCwgMSwgMjE2LCAyMzEsIDIwLCAxLCAKLSAgICAyMzQsIDEsIDIwLCAxLCAyMTYsIDI0OCwgMjAsIDEsIDIyNywgMjQzLCAyMCwgMSwgMjIxLCAyNTMsIDIwLCAxLCAyNDQsIAotICAgIDIwMCwgMjAsIDEsIDIzNCwgMywgMjAsIDEsIDIzNCwgMzAsIDIwLCAzOCwgMTY0LCAyMzQsIDExLCAyMCwgMzgsIDE2NCwgCi0gICAgMjE1LCAxMTEsIDIwLCAyMjgsIDE4NywgMjAsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjAsIDI0OSwgMjM0LCAyMCwgMjQ5LCAKLSAgICAyMjcsIDIwLCAyMjAsIDE1MiwgMjAsIDIyNCwgMTYsIDc5LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjEwLCAyNTQsIDIyNSwgCi0gICAgNjQsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjUsIDY0LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjEwLCAKLSAgICAyNTQsIDIyMCwgODYsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjAsIDg2LCA1OCwgMSwgMjUwLCAxMDQsIAotICAgIDEzOCwgMjEwLCAyNTQsIDIyNCwgMzMsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjQsIDMzLCA1OCwgMSwgCi0gICAgMjUwLCAxMDQsIDEzOCwgMjEwLCAyNTQsIDIyMiwgMTQyLCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjIyLCAKLSAgICAxNDIsIDU4LCAxLCAyNDUsIDI4LCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTI2LCAxMzgsIDEzMCwgCi0gICAgNTgsIDEsIDIzMCwgMjMwLCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIAotICAgIDEsIDI0NSwgMjcsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjgsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIAotICAgIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMzAsIDI0NiwgMTI2LCAKLSAgICAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAKLSAgICAyNywgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyOCwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAKLSAgICAxLCAxMjUsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMzAsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgCi0gICAgMTIxLCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgNTksIDY3LCAKLSAgICAxMzAsIDU4LCAxLCA1OSwgMjE5LCA5NywgNTgsIDEsIDU5LCAyMDMsIDEzMCwgNTgsIDEsIDIzMiwgMTE0LCA0NCwgMjQ5LCAKLSAgICAxNjksIDI1NCwgMTE3LCA1OCwgMSwgMjIzLCAxNjAsIDEyMCwgNzUsIDU4LCAxLCAyMjMsIDE2MCwgMTI0LCA3NSwgNTgsIDEsIAotICAgIDIyMywgMTYwLCAyNDUsIDM5LCA3OSwgNTgsIDEsIDIyMywgMTYwLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAKLSAgICAxMjEsIDIzNSwgMjAwLCAyNDUsIDM5LCA3OSwgNTgsIDEsIDIxOCwgMTEzLCAyMiwgMTI1LCAyMTYsIDMxLCA1OCwgMSwgCi0gICAgMjE4LCAxMTMsIDIyLCAxMjEsIDIxNiwgMzEsIDcsIDYsIDEsIDI0NSwgMjA3LCAyNTQsIDE3OSwgNywgNCwgMSwgMjQ1LCAKLSAgICAyMDcsIDI1NCwgMTc5LCA3LCA2LCAxLCAyNDUsIDIwNywgMjU0LCAyMDUsIDcsIDQsIDEsIDI0NSwgMjA3LCAyNTQsIDIwNSwgCi0gICAgNywgNiwgMSwgMjQxLCAyMTQsIDcsIDQsIDEsIDI0MSwgMjE0LCA3LCA2LCAxLCAyMTUsIDQwLCA3LCA0LCAxLCAyMTUsIDQwLCAKLSAgICA3LCA2LCAxLCAyMTUsIDIzMCwgNywgNCwgMSwgMjE1LCAyMzAsIDcsIDYsIDEsIDI0OSwgMTE4LCA3LCA0LCAxLCAyNDksIAotICAgIDExOCwgNywgNiwgMSwgMjQ5LCAxMTksIDIsIDI0OSwgMjI3LCA3LCA0LCAxLCAyNDksIDExOSwgMiwgMjQ5LCAyMjcsIDcsIAotICAgIDEsIDQsIDYsIDI0NSwgMTQsIDcsIDEsIDQsIDYsIDIyMiwgOTMsIDcsIDYsIDEsIDI1NSwgODIsIDcsIDQsIDEsIDI1NSwgCi0gICAgODIsIDcsIDYsIDEsIDI1NCwgODEsIDcsIDQsIDEsIDI1NCwgODEsIDcsIDYsIDEsIDI1MywgMjAwLCA3LCA0LCAxLCAyNTMsIAotICAgIDIwMCwgNywgNiwgMSwgMjUzLCAxODQsIDcsIDQsIDEsIDI1MywgMTg0LCA3LCA2LCAxLCAyNTMsIDE4NSwgMiwgMjAzLCAKLSAgICAxMzAsIDcsIDQsIDEsIDI1MywgMTg1LCAyLCAyMDMsIDEzMCwgNywgNiwgMSwgMjUzLCAxNzUsIDcsIDQsIDEsIDI1MywgCi0gICAgMTc1LCA3LCA2LCAxLCAyMjMsIDUyLCAyNTEsIDc1LCAyLCAyNDcsIDEyOCwgNywgNCwgMSwgMjIzLCA1MiwgMjUxLCA3NSwgCi0gICAgMiwgMjQ3LCAxMjgsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCA5MSwgNywgNiwgMSwgCi0gICAgMjM1LCAzMCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjM1LCAKLSAgICAzMCwgMiwgMjE4LCAxMDUsIDIyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMTgsIDEwNSwgMjIsIDI0OCwgCi0gICAgNywgOTEsIDcsIDYsIDEsIDI1MSwgMTQzLCAxNTYsIDcsIDQsIDEsIDI1MSwgMTQzLCAxNTYsIDcsIDYsIDEsIDIzMywgMTU1LCAKLSAgICAyLCAxMjUsIDkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMTQ0LCAyLCAyMDAsIDIxOCwgCi0gICAgMTA1LCAyMjYsIDEyNCwgNywgNCwgMSwgMTQ0LCAyLCAyMDAsIDIxOCwgMTA1LCAyMjYsIDEyNCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyMzIsIDEyOSwgNywgNCwgMSwgMTQ0LCAyLCAyMzIsIDEyOSwgNywgNiwgMSwgMjI2LCAxODcsIDcsIDQsIDEsIDIyNiwgCi0gICAgMTg3LCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMjYsIAotICAgIDExMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjQ0LCA2MSwgNywgNCwgCi0gICAgMSwgMjI2LCAxMTAsIDIsIDI0NCwgNjEsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDIzMSwgMjE3LCA3OCwgNywgNCwgCi0gICAgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMjMxLCAyMTcsIDc4LCA3LCA2LCAxLCAyMjQsIDEwMCwgMiwgMjE4LCAxMDUsIDIxNiwgCi0gICAgMTQwLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA2LCAxLCAKLSAgICAyMjQsIDEwMCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIyMywgCi0gICAgMjI3LCAyMjIsIDE4OCwgNywgNCwgMSwgMjIzLCAyMjcsIDIyMiwgMTg4LCA3LCA2LCAxLCAyMjIsIDEzMiwgMjIyLCAxODgsIAotICAgIDcsIDQsIDEsIDIyMiwgMTMyLCAyMjIsIDE4OCwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIAotICAgIDIxNCwgMTA2LCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMTIsIDEwNiwgNywgNCwgMSwgMjEyLCAxMDYsIDcsIDYsIDEsIAotICAgIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNCwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA2LCAxLCAyMTYsIDE1MywgMiwgCi0gICAgOTEsIDcsIDQsIDEsIDIxNiwgMTUzLCAyLCA5MSwgNywgNiwgMSwgMjE2LCAxNTMsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgCi0gICAgMjQ4LCA0NywgNywgNCwgMSwgMjE2LCAxNTMsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgMjEzLCAKLSAgICAyNDUsIDcsIDQsIDEsIDIxMywgMjQ1LCA3LCA2LCAxLCAyNDUsIDczLCA3LCA0LCAxLCAyNDUsIDczLCA3LCA2LCAxLCAyMzUsIAotICAgIDE3OCwgNywgNCwgMSwgMjM1LCAxNzgsIDcsIDYsIDEsIDI0OSwgMjE1LCA3LCA0LCAxLCAyNDksIDIxNSwgNTgsIDEsIDIxNCwgCi0gICAgMTMzLCA3LCA0LCAxLCAyNDYsIDc3LCA3LCA0LCAxLCAyMzIsIDg5LCA3LCA0LCAxLCAyMzAsIDg1LCA3LCA0LCAxLCAyMjcsIAotICAgIDIwNSwgNywgNCwgMSwgMjIyLCAxMzEsIDcsIDEsIDQsIDYsIDIyMiwgMTMxLCA3LCA0LCAxLCAyMTUsIDEwOSwgNywgNCwgMSwgCi0gICAgMjE0LCAxOTcsIDcsIDYsIDEsIDIzNSwgMjIwLCAyNDksIDY4LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgNywgNiwgCi0gICAgMSwgMjM1LCAyMjAsIDI0NSwgMTQsIDcsIDQsIDEsIDIzNSwgMjIwLCAyNDUsIDE0LCA3LCA2LCAxLCAyMzUsIDIyMCwgMjQzLCAKLSAgICAyMDksIDcsIDYsIDEsIDIxNSwgOTQsIDIzNSwgMjIwLCAyNDMsIDIwOSwgNywgNCwgMSwgMjE1LCA5NCwgMjM1LCAyMjAsIAotICAgIDI0MywgMjA5LCA3LCA2LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDQsIDEsIDIxNSwgOTQsIDE1NiwgNywgNiwgMSwgMjM1LCAKLSAgICAyMjAsIDE1MywgNywgNCwgMSwgMjM1LCAyMjAsIDE1MywgNywgNiwgMSwgMjM1LCAyMjAsIDIyMiwgOTMsIDcsIDQsIDEsIAotICAgIDIzNSwgMjIwLCAyMjIsIDkzLCA3LCA2LCAxLCAyMzUsIDIyMCwgMjE3LCAxNTMsIDcsIDQsIDEsIDIzNSwgMjIwLCAyMTcsIAotICAgIDE1MywgNTgsIDEsIDEyMSwgMjUwLCAzOSwgMjU1LCAyMywgNTgsIDEsIDI0OSwgMjM0LCA1OCwgMSwgMjE5LCAyNTMsIDI0NSwgCi0gICAgMTA2LCA1MCwgNywgNiwgMSwgMjIyLCAxLCA3LCA0LCAxLCAyMjIsIDEsIDcsIDYsIDEsIDIxNSwgOTQsIDI0MiwgNjcsIDcsIAotICAgIDQsIDEsIDIzMywgMTU1LCAyLCAyMjMsIDU4LCAyNDEsIDU5LCAyMiwgMjUyLCA0OSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgCi0gICAgMjQ4LCA0NywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjQ4LCA0NywgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTMwLCA3LCA0LCAxLCAKLSAgICAyNTEsIDc1LCAyLCAxMzAsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDI0MywgMjEwLCAKLSAgICAyLCAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgCi0gICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIAotICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIAotICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAKLSAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDEwMywgNTgsIDEsIDYsIDI0MiwgNjgsIDIsIDkxLCA1OCwgMSwgCi0gICAgNCwgMjcsIDIyNiwgMjM4LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxOTQsIDcsIDI0NSwgMTExLCAxLCAyMjMsIDUyLCAyNDUsIAotICAgIDE0LCA3LCAyNDUsIDExMSwgMSwgMjIzLCA1MiwgMjI2LCAxMDksIDcsIDI0NSwgMTExLCAxLCAyMzUsIDIwMCwgMTk0LCA3LCAKLSAgICAyNDUsIDExMSwgMSwgMjQwLCAxNjEsIDIzMiwgMTM1LCA3LCAyNDUsIDExMSwgMSwgMjU0LCAzMSwgMTk0LCAyMTcsIDIzMSwgCi0gICAgMjI5LCAyMTksIDEsIDYxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI0NiwgCi0gICAgNTYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgNjksIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgNzYsIDIxNywgMjMxLCAyMjksIAotICAgIDIxOSwgMSwgNzgsIDIxNywgMjMxLCAyMjksIDIxOSwgNSwgMjQyLCA0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNCwgCi0gICAgMzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjM0LCAxMTEsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQyLCAxODEsIAotICAgIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQyLCAyMzEsIDIxNywgMjMxLCAyMjksIDIxOSwgNSwgMjU0LCA4MywgMjE3LCAKLSAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDksIDI0NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNTAsIDk0LCAyMTcsIDIzMSwgCi0gICAgMjI5LCAyMTksIDEsIDIzNSwgNzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjM1LCAxMTUsIDIxNywgMjMxLCAyMjksIAotICAgIDIxOSwgMSwgMjE1LCAxMzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjE1LCAxNDAsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgCi0gICAgMjQ4LCAxMTMsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQ4LCAxMjIsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMTEyLCAKLSAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxNiwgMTU3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0NywgMTUzLCAyMTcsIAotICAgIDIzMSwgMjI5LCAyMTksIDEsIDI0OCwgMTUsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjI4LCA3OSwgMjE3LCAyMzEsIDIyOSwgCi0gICAgMjE5LCAxLCAyMjUsIDE5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyNSwgMTI0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIAotICAgIDI1MSwgMjEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI1MiwgMTgsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjMwLCAKLSAgICAxNjYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjIyLCAyMTMsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjMyLCAxNjIsIAotICAgIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjIyLCAxNjcsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjE5LCA2MCwgMjE3LCAKLSAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDEsIDc1LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCA2MSwgMjE3LCAyMzEsIDIyOSwgCi0gICAgMjE5LCAyNSwgNSwgNzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDY5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCAKLSAgICA3NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgMjI2LCAxODcsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgCi0gICAgMjMxLCAxNjMsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgMjMxLCAxNjIsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAKLSAgICAxNSwgMjMxLCAxNjEsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgMjMxLCAxNjAsIDIyOCwgNjEsIDIzNSwgMjQ3LCAKLSAgICAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDIyOCwgNjEsIAotICAgIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMjMsIDIxOSwgCi0gICAgMTE5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyNDUsIDE5NiwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgCi0gICAgMTAsIDEzNCwgMjE5LCAxMTgsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyMjQsIDI1LCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIAotICAgIDIyNSwgNDMsIDc5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjIyLCAxMjAsIDc5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjI0LCAyNiwgCi0gICAgNzksIDIyNSwgMTQ3LCAxLCAxNzYsIDIyNSwgMTQ3LCAxLCAyMzQsIDEzOCwgMjI1LCAxNDcsIDEsIDI0MywgMTQyLCAyMjUsIAotICAgIDE0NywgMSwgMjI5LCA4MiwgMjI1LCAxNDcsIDEsIDI1MSwgNDEsIDIyNSwgMTQ3LCAxLCAyNTAsIDE2NSwgMjI1LCAxNDcsIAotICAgIDEsIDIzNSwgMTQ3LCAyMjUsIDE0NywgMSwgMjI3LCAxNjksIDIyNSwgMTQ3LCAxLCAyMTcsIDEwNiwgMjI1LCAxNDcsIDEsIAotICAgIDIxNiwgMjA5LCAyMjUsIDE0NywgMSwgMjQ4LCAyMjksIDIyNSwgMTQ3LCAxLCAxOTgsIDIyNSwgMTQ3LCAxLCAxOTEsIDIyNSwgCi0gICAgMTQ3LCAxLCAyMjUsIDE1MCwgMjI1LCAxNDcsIDEsIDI1MiwgMTk5LCAyMjUsIDE0NywgMSwgMTg2LCAyMjUsIDE0NywgMSwgCi0gICAgMjE1LCAxODQsIDIyNSwgMTQ3LCAxLCAyMTUsIDE3NiwgMjI1LCAxNDcsIDEsIDI0NiwgNDYsIDIyNSwgMTQ3LCAxLCAyMTIsIAotICAgIDY1LCAyMjUsIDE0NywgMSwgMjEwLCA4MiwgMjI1LCAxNDcsIDEsIDIxMCwgMTE2LCAyMjUsIDE0NywgMSwgNCwgNjEsIDIyNSwgCi0gICAgMTQ3LCAxLCAxOTIsIDIyNSwgMTQ3LCAxLCAyMDUsIDIyNSwgMTQ3LCAxLCAyMzMsIDE0MSwgMjI1LCAxNDcsIDEsIDIyMCwgCi0gICAgMTA0LCAyMjUsIDE0NywgMSwgMjA2LCAyMjUsIDE0NywgMSwgMTYyLCAyMjUsIDE0NywgMSwgNjEsIDIyNSwgMTQ3LCAxLCAKLSAgICA3NCwgMjI1LCAxNDcsIDEsIDY5LCAyMjUsIDE0NywgMSwgNzYsIDIyNSwgMTQ3LCAxLCA3OCwgMjI1LCAxNDcsIDEsIDIyNCwgCi0gICAgOTEsIDIyNSwgMTQ3LCAxLCAyMTEsIDE2NSwgMjI1LCAxNDcsIDEsIDI0NCwgMjA0LCAyMjUsIDE0NywgMSwgMjQzLCAzNiwgCi0gICAgMjI1LCAxNDcsIDEsIDI0NSwgMjE3LCAyMjUsIDE0NywgMjE4LCA3NCwgMSwgMjEyLCA2NSwgMjI1LCAxNDcsIDIxOCwgNzQsIAotICAgIDEsIDE5MiwgMjI1LCAxNDcsIDEsIDIxNSwgMTU3LCAyMjUsIDE0NywgMSwgMjE1LCAxNDUsIDIyNSwgMTQ3LCAxLCAyNDgsIAotICAgIDE0MywgMjI1LCAxNDcsIDEsIDIyOCwgMTE1LCAyMjUsIDE0NywgMSwgMjU0LCAxNDksIDE5MiwgMjI1LCAxNDcsIDEsIDIxMywgCi0gICAgMTM0LCAyMjAsIDEwNCwgMjI1LCAxNDcsIDEsIDIxMywgMTM1LCAxNjIsIDIyNSwgMTQ3LCAxLCAyNTMsIDIzMSwgMjQ0LCAKLSAgICAyMDQsIDIyNSwgMTQ3LCAyMTgsIDc0LCAxLCAyMDUsIDIyNSwgMTQ3LCAyMTgsIDI2LCAxLCAyMDUsIDIyNSwgMTQ3LCAxLCAKLSAgICAyNTEsIDcsIDIyNSwgMTQ3LCAyMTksIDE1NywgMjQxLCAyNDMsIDc5LCAyMjUsIDE0NywgNTIsIDI0MSwgMjQzLCA3OSwgCi0gICAgMjI1LCAxNDcsIDE2NCwgMjIwLCA5NywgMjI1LCAxNDcsIDE2NCwgNTIsIDIyMCwgOTcsIDE3OSwgNSwgMjU0LCA4MywgMTc5LCAKLSAgICA1LCAyMTMsIDE0NywgMTc5LCAxLCA2MSwgMTc5LCAxLCAyNTUsIDgyLCAxNzksIDEsIDc0LCAxNzksIDEsIDIzNiwgNDAsIAotICAgIDE3OSwgMSwgNjksIDE3OSwgMSwgMjE0LCAxMTgsIDE3OSwgMSwgMTQ5LCAxNTMsIDE3OSwgMSwgMTQ5LCAyMjIsIDE4MiwgCi0gICAgMTc5LCAxLCAxNDksIDE1NiwgMTc5LCAxLCAxNDksIDIzMiwgMTkxLCAxNzksIDEsIDc2LCAxNzksIDEsIDI0NSwgMjE3LCAKLSAgICAxNzksIDEsIDI1NCwgMjEwLCAxNzksIDEsIDc4LCAxNzksIDEsIDIyNiwgMTg3LCAxNzksIDEsIDI1MywgMjAwLCAxNzksIDEsIAotICAgIDE3NiwgMTc5LCAxLCAyMzQsIDEzOCwgMTc5LCAxLCAyNDMsIDE0MiwgMTc5LCAxLCAyNDMsIDAsIDE3OSwgMSwgMjI5LCA4MiwgCi0gICAgMTc5LCAxLCAyNTEsIDQxLCAxNzksIDEsIDI1MCwgMTY1LCAxNzksIDEsIDIzNSwgMTQ3LCAxNzksIDEsIDIzNSwgMTIwLCAKLSAgICAxNzksIDEsIDIyNywgMTY5LCAxNzksIDEsIDIxNSwgMTU3LCAxNzksIDEsIDIxNSwgMTQ1LCAxNzksIDEsIDI0OCwgMTQzLCAKLSAgICAxNzksIDEsIDI0OCwgMTI3LCAxNzksIDEsIDIyOCwgMTE1LCAxNzksIDEsIDIxNywgMTA2LCAxNzksIDEsIDIxNiwgMjA5LCAKLSAgICAxNzksIDEsIDI0OCwgMjI5LCAxNzksIDEsIDI0OCwgMzMsIDE3OSwgMSwgMTk4LCAxNzksIDEsIDE5MSwgMTc5LCAxLCAyMjUsIAotICAgIDE1MCwgMTc5LCAxLCAyNTIsIDE5OSwgMTc5LCAxLCAyNTIsIDI2LCAxNzksIDEsIDE4NiwgMTc5LCAxLCAxOTIsIDE3OSwgMSwgCi0gICAgMjA1LCAxNzksIDEsIDIzMywgMTQxLCAxNzksIDEsIDIxNCwgMjcsIDE3OSwgMSwgMjIwLCAxMDQsIDE3OSwgMSwgMjE4LCAKLSAgICAyMjUsIDE3OSwgMSwgMjA2LCAxNzksIDEsIDE2MiwgMTc5LCAxLCAyMzIsIDE5MCwgMTc5LCAxMTcsIDUsIDI0MiwgNTEsIAotICAgIDE3OSwgMjUsIDUsIDI1NSwgODIsIDE3OSwgMjUsIDUsIDc0LCAxNzksIDI1LCA1LCAyMzYsIDQwLCAxNzksIDI1LCA1LCA2OSwgCi0gICAgMTc5LCAyNSwgNSwgMjE0LCAxMTgsIDE3OSwgMjUsIDUsIDE0OSwgMTUzLCAxNzksIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKLSAgICAxNzksIDI1LCA1LCAxNDksIDE1NiwgMTc5LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTc5LCAyNSwgNSwgNzYsIDE3OSwgMjUsIAotICAgIDUsIDI0NSwgMjE3LCAxNzksIDI1LCA1LCAyNTQsIDIxMCwgMTc5LCAyNSwgNSwgNzgsIDE3OSwgMjUsIDUsIDIyNiwgMTg3LCAKLSAgICAxNzksIDI1LCA1LCAyNTMsIDIwMCwgMTc5LCA1LCAyMTMsIDE1MiwgMTc5LCAyNDgsIDE4NiwgMTc5LCA1MiwgMjQ4LCAxODYsIAotICAgIDE3OSwgMjEsIDIxMCwgODYsIDE3OSwgMjEsIDExMSwgMTc5LCAyMSwgMTA1LCAxNzksIDIxLCAxNTgsIDE3OSwgMjEsIDE2MSwgCi0gICAgMTc5LCAyMSwgMTkwLCAxNzksIDIxLCAxOTUsIDE3OSwgMjEsIDE5OSwgMTc5LCAyMSwgMTk2LCAxNzksIDIxLCAyMDEsIDM4LCAKLSAgICA4NCwgMjEsIDIxMCwgODYsIDM4LCA4NCwgMjEsIDExMSwgMzgsIDg0LCAyMSwgMTA1LCAzOCwgODQsIDIxLCAxNTgsIDM4LCAKLSAgICA4NCwgMjEsIDE2MSwgMzgsIDg0LCAyMSwgMTkwLCAzOCwgODQsIDIxLCAxOTUsIDM4LCA4NCwgMjEsIDE5OSwgMzgsIDg0LCAKLSAgICAyMSwgMTk2LCAzOCwgODQsIDIxLCAyMDEsIDM4LCA4NCwgMSwgNjEsIDM4LCA4NCwgMSwgNjksIDM4LCA4NCwgMSwgMTc2LCAKLSAgICAzOCwgODQsIDEsIDE5OCwgMzgsIDg0LCAxLCAxOTEsIDM4LCA4NCwgMSwgMjA1LCAzOCwgODQsIDEsIDIxMywgMTc2LCAzOCwgCi0gICAgODQsIDUsIDI1MywgMTgzLCA4NCwgNSwgMjE5LCAxOSwgMjUxLCA3LCA4NCwgNSwgMjUxLCA4LCAyMTMsIDE1MiwgODQsIDUsIAotICAgIDUyLCAyNTEsIDgsIDIxMywgMTUyLCA4NCwgNSwgMjUxLCA4LCAxMDUsIDg0LCA1LCAyNTEsIDgsIDE1OCwgODQsIDUsIDI1MSwgCi0gICAgOCwgMjUzLCAxODMsIDg0LCA1LCAyMjQsIDEyNywgODQsIDI0MywgMTA3LCAyNDQsIDExMSwgODQsIDI1MCwgMjQ2LCA4NCwgCi0gICAgMjQxLCAyMzcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDIxMCwgODYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDExMSwgCi0gICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTA1LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxNTgsIDIzNCwgMTk0LCAyMzIsIAotICAgIDI0OCwgMjEsIDE2MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTkwLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTUsIAotICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk2LCAyMzQsIDE5NCwgMjMyLCAKLSAgICAyNDgsIDIxLCAyMDEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTc2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIzNCwgCi0gICAgMTM4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0MywgMTQyLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyOSwgODIsIAotICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjA2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyMCwgMTA0LCAyMzQsIDE5NCwgCi0gICAgMjMyLCAyNDgsIDEsIDIxMCwgMTE2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNywgMTY5LCAyMzQsIDE5NCwgMjMyLCAKLSAgICAyNDgsIDEsIDIxNywgMTA2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0MCwgMjMzLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIAotICAgIDE5OCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxOTEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI1LCAxNTAsIDIzNCwgCi0gICAgMTk0LCAyMzIsIDI0OCwgMSwgMTg2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0OCwgMjI5LCAyMzQsIDE5NCwgMjMyLCAKLSAgICAyNDgsIDEsIDI1MiwgMTk5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIwNSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxOTIsIAotICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjMzLCAxNDEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjEyLCA2NSwgMjM0LCAKLSAgICAxOTQsIDIzMiwgMjQ4LCAxLCAyMTYsIDIwOSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxNjIsIDIzNCwgMTk0LCAyMzIsIAotICAgIDI0OCwgMSwgMjE0LCAyNywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNTEsIDQxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIAotICAgIDYxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNiwgMjM4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDc0LCAyMzQsIDE5NCwgCi0gICAgMjMyLCAyNDgsIDEsIDIyNiwgMTg3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCAyMTQsIDIxNCwgMjM0LCAxOTQsIDIzMiwgCi0gICAgMjQ4LCAyNSwgNzYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDY5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCAyNDUsIAotICAgIDIxNywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgNzgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMTM4LCAyMjUsIDMzLCAyMzQsIAotICAgIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjUxLCAyMCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxMzgsIDI1MSwgMjEsIDIyNSwgMzMsIAotICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgNSwgMjQ5LCA4NSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCA1LCAyMTksIDIwMSwgMjIzLCA5NiwgCi0gICAgMSwgMTc2LCAyMjMsIDk2LCAxLCAyNDMsIDE0MiwgMjIzLCA5NiwgMSwgMjI5LCA4MiwgMjIzLCA5NiwgMSwgMjE3LCAxMDYsIAotICAgIDIyMywgOTYsIDEsIDI0OCwgMjI5LCAyMjMsIDk2LCAxLCAxOTgsIDIyMywgOTYsIDEsIDE5MSwgMjIzLCA5NiwgMSwgMjUyLCAKLSAgICAxOTksIDIyMywgOTYsIDEsIDE4NiwgMjIzLCA5NiwgMSwgMjUxLCA0MSwgMjIzLCA5NiwgMSwgMjM1LCAxNDcsIDIyMywgOTYsIAotICAgIDEsIDIyNywgMTY5LCAyMjMsIDk2LCAxLCAyMDYsIDIyMywgOTYsIDEsIDIwNSwgMjIzLCA5NiwgMSwgMjMzLCAxNDEsIDIyMywgCi0gICAgOTYsIDEsIDE5MiwgMjIzLCA5NiwgMSwgMjEyLCA2NSwgMjIzLCA5NiwgMSwgMTYyLCAyMjMsIDk2LCAxLCAyMzEsIDEyOSwgCi0gICAgMjIzLCA5NiwgMSwgMjI5LCA2MSwgMjIzLCA5NiwgMSwgMjI5LCAxNTMsIDIyMywgOTYsIDEsIDIyNywgMTM5LCAyMjMsIDk2LCAKLSAgICAxLCA2MSwgMjIzLCA5NiwgMjUsIDUsIDc0LCAyMjMsIDk2LCAyNSwgNSwgNjksIDIyMywgOTYsIDI1LCA1LCA3NiwgMjIzLCAKLSAgICA5NiwgMjUsIDUsIDI1NCwgMjEwLCAyMjMsIDk2LCAyNSwgNSwgNzgsIDIyMywgOTYsIDI1LCA1LCAyNTMsIDIwMCwgMjIzLCAKLSAgICA5NiwgMjUsIDUsIDI0NSwgNjMsIDIyMywgOTYsIDI1LCA1LCAyNDUsIDI0MSwgMjIzLCA5NiwgMTE3LCA1LCAyMjksIDg0LCAKLSAgICAyMjMsIDk2LCAxMTcsIDUsIDIzMCwgMzAsIDIyMywgOTYsIDExNywgNSwgMTUzLCAyMjMsIDk2LCAxMTcsIDUsIDI0MiwgNjcsIAotICAgIDIyMywgOTYsIDIxMywgMTUyLCAyMjMsIDk2LCAyMjEsIDE3NSwgNzksIDI0LCAxMDAsIDIxNiwgOTgsIDI0LCAxMDAsIDIxNiwgCi0gICAgOTcsIDI0LCAxMDAsIDIxNiwgOTUsIDI0LCAxMDAsIDIxNiwgMTAwLCAyNCwgMTAwLCAyMjMsIDI0LCAyNCwgMTAwLCAyMjMsIAotICAgIDgsIDI0LCAxMDAsIDIyMywgMywgMjQsIDEwMCwgMjIzLCA1LCAyNCwgMTAwLCAyMjMsIDIxLCAyNCwgMTAwLCAyMjMsIDE0LCAKLSAgICAyNCwgMTAwLCAyMjMsIDcsIDI0LCAxMDAsIDIyMywgMjYsIDI0LCAxMDAsIDIyMywgOSwgMjQsIDEwMCwgMjIzLCAyOCwgMjQsIAotICAgIDEwMCwgMjIzLCAyNSwgMjQsIDEwMCwgMjMwLCAyMTgsIDI0LCAxMDAsIDIzMCwgMjA5LCAyNCwgMTAwLCAyMzAsIDIxMiwgCi0gICAgMjQsIDEwMCwgMjI1LCA4MywgMjQsIDEwMCwgMjI1LCA5NCwgMjQsIDEwMCwgMjI1LCA5NSwgMjQsIDEwMCwgMjE4LCAyMDksIAotICAgIDI0LCAxMDAsIDIzNiwgNTMsIDI0LCAxMDAsIDIzNiwgNjAsIDI0LCAxMDAsIDIxOCwgMjIwLCAyNCwgMTAwLCAyMTgsIDIwNywgCi0gICAgMjQsIDEwMCwgMjI1LCAxMzMsIDI0LCAxMDAsIDI0MSwgMTc0LCAyNCwgMTAwLCAyMTgsIDIwNCwgMTU1LCA1LCAyMjYsIDMxLCAKLSAgICAxNTUsIDUsIDI1MCwgMTk1LCAxNTUsIDUsIDIzMywgNzIsIDE1NSwgNSwgMjExLCAyNDMsIDE1NSwgMSwgNjEsIDE1NSwgMSwgCi0gICAgMjQwLCAxNjEsIDIzNCwgMTk3LCAxNTUsIDEsIDc0LCAxNTUsIDEsIDIzNiwgNDAsIDE1NSwgMSwgNjksIDE1NSwgMSwgMjI2LCAKLSAgICA5NCwgMjUwLCAxNzEsIDE1NSwgMSwgMjI5LCA4MywgMjMzLCAzNCwgMTU1LCAxLCAyMjksIDgzLCAyMzMsIDM1LCAyMjMsIAotICAgIDE0NSwgMTU1LCAxLCA3NiwgMTU1LCAxLCAyNTQsIDIxMCwgMTU1LCAxLCA3OCwgMTU1LCAxLCAxNzYsIDE1NSwgMSwgMjM1LCAKLSAgICAxOSwgMjIxLCAyMzAsIDE1NSwgMSwgMjM1LCAxOSwgMjMwLCA3MSwgMTU1LCAxLCAyNDMsIDE0MiwgMTU1LCAxLCAyNDMsIAotICAgIDE0MywgMjMwLCA3MSwgMTU1LCAxLCAyMjksIDgyLCAxNTUsIDEsIDI1MSwgNDEsIDE1NSwgMSwgMjUxLCA0MiwgMjMwLCA3MSwgCi0gICAgMTU1LCAxLCAyMzUsIDE0NywgMTU1LCAxLCAyMjcsIDE3MCwgMjMwLCA3MSwgMTU1LCAxLCAyMzUsIDE0OCwgMjMxLCAyMTIsIAotICAgIDE1NSwgMSwgMjI3LCAxNjksIDE1NSwgMSwgMjE1LCAxNTcsIDE1NSwgMSwgMjE1LCAxNTgsIDIzMSwgMjEyLCAxNTUsIDEsIAotICAgIDI0OCwgMTQzLCAxNTUsIDEsIDI0OCwgMTQ0LCAyMzEsIDIxMiwgMTU1LCAxLCAyMjksIDIzNCwgMjMwLCA3MSwgMTU1LCAxLCAKLSAgICAyMTcsIDEwNiwgMTU1LCAxLCAyMTcsIDEwNywgMjMwLCA3MSwgMTU1LCAxLCAyNDgsIDIyOSwgMTU1LCAxLCAyNDgsIDIzMCwgCi0gICAgMjMxLCAyMTIsIDE1NSwgMSwgMTk4LCAxNTUsIDEsIDE5MSwgMTU1LCAxLCAyMjYsIDk0LCAyMzAsIDcxLCAxNTUsIDEsIAotICAgIDI1MiwgMTk5LCAxNTUsIDEsIDI1MiwgMjAwLCAyMzAsIDcxLCAxNTUsIDEsIDE4NiwgMTU1LCAxLCAxOTIsIDE1NSwgMSwgCi0gICAgMjA1LCAxNTUsIDEsIDIyMywgMTkxLCAyNTQsIDIxOSwgMTU1LCAxLCAyMzMsIDE0MSwgMTU1LCAxLCAyMTIsIDY1LCAxNTUsIAotICAgIDEsIDIyMiwgMzYsIDIzMCwgNzEsIDE1NSwgMSwgMjIyLCAzNiwgMjMxLCAyMTIsIDE1NSwgMSwgMjA2LCAxNTUsIDEsIDE2MiwgCi0gICAgMTU1LCA1LCAyNTAsIDE5NiwgMjE2LCAyNTEsIDE1NSwgMjUsIDUsIDIxNywgNDgsIDE1NSwgMjUsIDUsIDIxNiwgMzYsIAotICAgIDE1NSwgMjUsIDUsIDIxMSwgMTkwLCAxNTUsIDI1LCA1LCAyMTEsIDE5MSwgMjMxLCA3NCwgMTU1LCAyNSwgNSwgMjE4LCA0OCwgCi0gICAgMTU1LCAyNSwgNSwgMjE4LCA0OSwgMjMxLCA2MiwgMTU1LCAyNSwgNSwgMjE3LCA2NiwgMTU1LCAyNSwgNSwgMjQ3LCAyMDIsIAotICAgIDIzMCwgNzAsIDE1NSwgMjUsIDUsIDIyNSwgMTg3LCAxNTUsIDExNywgNSwgMjM0LCAxNjQsIDE1NSwgMTE3LCA1LCAyMjUsIAotICAgIDE5OSwgMTU1LCAxMTcsIDUsIDI1MSwgMjcsIDE1NSwgMjI2LCA0NCwgMTU1LCA0MywgMjIzLCA3MiwgMTU1LCA0NCwgMjIzLCAKLSAgICA3MiwgMTU1LCAyMjYsIDgzLCAyNTQsIDEyNSwgMTU1LCAyMjYsIDgzLCAyMzEsIDIyOSwgMTU1LCAyMjYsIDgzLCAyMzIsIAotICAgIDkzLCAxNTUsIDIyNiwgODMsIDIxMSwgMjM4LCAxNTUsIDIyNiwgODMsIDIyNiwgNDUsIDE1NSwgMjI2LCA4MywgMjMyLCAKLSAgICAyMTEsIDE1NSwgMjI2LCA4MywgMjMyLCA4NywgMTU1LCAyMjYsIDgzLCAyNTUsIDIsIDE1NSwgMjI2LCA4MywgMjU1LCAzLCAKLSAgICAyNTUsIDIsIDE1NSwgMjI2LCA4MywgMjI1LCA1NCwgMTU1LCAyMTUsIDk0LCAyMjYsIDgzLCAyMjUsIDU0LCAxNTUsIDIyNiwgCi0gICAgNDAsIDE1NSwgMjEsIDIxMCwgODYsIDE1NSwgMjEsIDExMSwgMTU1LCAyMSwgMTA1LCAxNTUsIDIxLCAxNTgsIDE1NSwgMjEsIAotICAgIDE2MSwgMTU1LCAyMSwgMTkwLCAxNTUsIDIxLCAxOTUsIDE1NSwgMjEsIDE5OSwgMTU1LCAyMSwgMTk2LCAxNTUsIDIxLCAKLSAgICAyMDEsIDE1NSwgMjI2LCA4MywgMjE2LCA3MCwgMjE1LCAxMDcsIDE1NSwgMjI2LCA4MywgMjM1LCAxNzQsIDE3MiwgMSwgNjEsIAotICAgIDE3MiwgMSwgNzQsIDE3MiwgMSwgNjksIDE3MiwgMSwgNzYsIDE3MiwgMSwgMjU0LCAyMTAsIDE3MiwgMSwgNzgsIDE3MiwgMSwgCi0gICAgMTc2LCAxNzIsIDEsIDIzNCwgMTM4LCAxNzIsIDEsIDI0MywgMTQyLCAxNzIsIDEsIDI0MywgMCwgMTcyLCAxLCAyMjgsIAotICAgIDI1MCwgMTcyLCAxLCAyMjksIDgyLCAxNzIsIDEsIDI1MCwgMTY1LCAxNzIsIDEsIDI1MCwgMTIwLCAxNzIsIDEsIDIzNSwgCi0gICAgMTQ3LCAxNzIsIDEsIDIzNSwgMTIwLCAxNzIsIDEsIDIyOCwgMjQwLCAxNzIsIDEsIDIyOCwgMjQyLCAxNzIsIDEsIDIyOCwgCi0gICAgMjQxLCAxNzIsIDEsIDIxNywgMTA2LCAxNzIsIDEsIDIxNiwgMjA5LCAxNzIsIDEsIDI0OCwgMjI5LCAxNzIsIDEsIDI0OCwgCi0gICAgMzMsIDE3MiwgMSwgMjI3LCAyMTEsIDE3MiwgMSwgMTk4LCAxNzIsIDEsIDI0OCwgMTQzLCAxNzIsIDEsIDE5MSwgMTcyLCAxLCAKLSAgICAyMjQsIDIyMywgMTcyLCAxLCAyMjUsIDE1MCwgMTcyLCAxLCAyNTIsIDE5OSwgMTcyLCAxLCAyNTIsIDI2LCAxNzIsIDEsIAotICAgIDIzMCwgMTAwLCAxNzIsIDEsIDE4NiwgMTcyLCAxLCAyNTIsIDExOSwgMTcyLCAxLCAxOTIsIDE3MiwgMSwgMjA1LCAxNzIsIAotICAgIDEsIDIzMywgMTQxLCAxNzIsIDEsIDIxNCwgMjcsIDE3MiwgMSwgMjE4LCAyMjUsIDE3MiwgMSwgMjA2LCAxNzIsIDEsIDE2MiwgCi0gICAgMTcyLCAyNSwgNSwgMjU1LCA4MiwgMTcyLCAyNSwgNSwgNzQsIDE3MiwgMjUsIDUsIDIzNiwgNDAsIDE3MiwgMjUsIDUsIAotICAgIDI0NSwgMjAzLCAxNzIsIDI1LCA1LCA2OSwgMTcyLCAyNSwgNSwgMjI2LCAyMzgsIDE3MiwgMjUsIDUsIDc4LCAxNzIsIDI1LCAKLSAgICA1LCAyNTQsIDIxMCwgMTcyLCAyNSwgNSwgMjUzLCAyMDAsIDE3MiwgMjUsIDUsIDIxNCwgMjE0LCAxNzIsIDExNywgNSwgCi0gICAgMTkyLCAxNzIsIDExNywgNSwgMjA1LCAxNzIsIDExNywgNSwgMjMzLCAxNDEsIDE3MiwgMTE3LCA1LCAyMTIsIDY1LCAxNzIsIAotICAgIDEsIDQwLCAyMzUsIDI5LCAxNzIsIDEsIDQwLCAyNDMsIDIwOSwgMTcyLCAxLCA0MCwgMjI5LCA4NCwgMTcyLCAxMTcsIDUsIAotICAgIDQwLCAyMjksIDg0LCAxNzIsIDEsIDQwLCAyNTAsIDE2NiwgMTcyLCAxLCA0MCwgMjE3LCAxNTMsIDE3MiwgMSwgNDAsIDIzMCwgCi0gICAgMzAsIDE3MiwgMSwgNDAsIDIyNiwgMTA5LCAxNzIsIDEsIDQwLCAyMTEsIDExNywgMTcyLCAxLCA0MCwgMTUzLCAxNzIsIDEsIAotICAgIDQwLCAxNTYsIDE3MiwgMSwgNDAsIDIxOCwgMjI4LCAxNzIsIDExNywgNSwgNDAsIDE5NCwgMTcyLCAxMTcsIDUsIDQwLCAKLSAgICAyNDIsIDY3LCAxNzIsIDIxLCAyMTAsIDg2LCAxNzIsIDIxLCAxMTEsIDE3MiwgMjEsIDEwNSwgMTcyLCAyMSwgMTU4LCAxNzIsIAotICAgIDIxLCAxNjEsIDE3MiwgMjEsIDE5MCwgMTcyLCAyMSwgMTk1LCAxNzIsIDIxLCAxOTksIDE3MiwgMjEsIDE5NiwgMTcyLCAyMSwgCi0gICAgMjAxLCAxNzIsIDIyNCwgMTQ0LCAyMTgsIDI1MywgMTcyLCAyMjQsIDE0NCwgMjQ4LCAxODYsIDE3MiwgMjI0LCAxNDQsIDUyLCAKLSAgICAyNDgsIDE4NiwgMTcyLCAyMjQsIDE0NCwgMjE1LCAyMTIsIDI0OCwgMTg2LCA2OCwgMSwgMjM0LCAxMzIsIDI0MywgMTQyLCAKLSAgICA2OCwgMSwgMjM0LCAxMzIsIDI1MSwgNDEsIDY4LCAxLCAyMzQsIDEzMiwgMjUwLCAxNjUsIDY4LCAxLCAyMzQsIDEzMiwgCi0gICAgMjM1LCAxNDcsIDY4LCAxLCAyMzQsIDEzMiwgMjM1LCAxMjAsIDY4LCAxLCAyMzQsIDEzMiwgMjI3LCAxNjksIDY4LCAxLCAKLSAgICAyMzQsIDEzMiwgMjE1LCAxNTcsIDY4LCAxLCAyMzQsIDEzMiwgMjE1LCAxNDUsIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAxNDMsIAotICAgIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAxMjcsIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAzMywgNjgsIDEsIDIzNCwgMTMyLCAKLSAgICAxOTgsIDY4LCAxLCAyMzQsIDEzMiwgMjA2LCA2OCwgMSwgMjM0LCAxMzIsIDE2MiwgNjgsIDEsIDIzNCwgMTMyLCAyNDEsIAotICAgIDE5NiwgNjgsIDEsIDIzNCwgMTMyLCAyNDQsIDIwNCwgNjgsIDU4LCAxLCAyMzQsIDEzMiwgMjIzLCAxMTIsIDY4LCAxLCAKLSAgICAyMzQsIDEzMiwgMjExLCAxNjUsIDY4LCAxLCAyMzQsIDEzMiwgMjEwLCAxMTYsIDY4LCAxLCAyMzQsIDEzMiwgMjA1LCA2OCwgCi0gICAgMjMyLCAxNTEsIDIzNCwgMTMyLCAyMjcsIDEsIDY4LCAyMzIsIDE1MSwgMjM0LCAxMzIsIDIyNCwgNDYsIDY4LCAyMzIsIAotICAgIDE1MSwgMjM0LCAxMzIsIDI0MSwgMTI4LCA2OCwgMTYsIDI1NCwgMTk5LCAyNDUsIDM4LCA2OCwgMTYsIDI1NCwgMTk5LCAKLSAgICAxMTEsIDY4LCAxNiwgMjU0LCAxOTksIDEwNSwgNjgsIDEsIDI1NCwgMTk5LCAyMDUsIDY4LCA1LCAyMjYsIDI3LCAyMzQsIAotICAgIDIxOSwgMjE2LCAzMSwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDM0LCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMzQsIDM5LCAKLSAgICAyMDgsIDEsIDEyMSwgMjM0LCAxMTEsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAKLSAgICAxMjAsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMjAsIDM5LCAyMDgsIDEsIDEyMSwgMjQyLCAxODEsIDM5LCAyMDgsIDEsIAotICAgIDEyNSwgMjQyLCAxODEsIDM5LCAyMDgsIDEsIDEyMSwgMjI5LCA5LCAzOSwgMjA4LCAxLCAxMjUsIDIyOSwgOSwgMzksIDIwOCwgCi0gICAgMSwgMTIxLCAyNDksIDI0NiwgMzksIDIwOCwgMSwgMTI1LCAyNDksIDI0NiwgMzksIDIwOCwgMSwgMTIxLCAyNTAsIDk0LCAKLSAgICAzOSwgMjA4LCAxLCAxMjUsIDI1MCwgOTQsIDM5LCAyMDgsIDEsIDEyMSwgMjE5LCA2MCwgMzksIDIwOCwgMSwgMTI1LCAyMTksIAotICAgIDYwLCAzOSwgMjA4LCAxLCAxMjEsIDIyNywgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIyNywgMTM4LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDI0NywgMTUzLCAzOSwgMjA4LCAxLCAxMjUsIDI0NywgMTUzLCAzOSwgMjA4LCAxLCAxMjEsIDExMiwgMzksIDIwOCwgCi0gICAgMSwgMTI1LCAxMTIsIDM5LCAyMDgsIDEsIDEyMSwgMjE2LCAxNTcsIDM5LCAyMDgsIDEsIDEyNSwgMjE2LCAxNTcsIDM5LCAKLSAgICAyMDgsIDEsIDEyMSwgMjI4LCA3OSwgMzksIDIwOCwgMSwgMTI1LCAyMjgsIDc5LCAzOSwgMjA4LCAxLCAxMjEsIDI1MSwgCi0gICAgMjEzLCAzOSwgMjA4LCAxLCAxMjUsIDI1MSwgMjEzLCAzOSwgMjA4LCAxLCAxMjEsIDIyNSwgMTksIDM5LCAyMDgsIDEsIAotICAgIDEyNSwgMjI1LCAxOSwgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDEyNCwgMzksIDIwOCwgMSwgMTI1LCAyMjUsIDEyNCwgMzksIAotICAgIDIwOCwgMSwgMTIxLCAyNDQsIDUxLCAzOSwgMjA4LCAxLCAxMjUsIDI0NCwgNTEsIDM5LCAyMDgsIDEsIDEyMSwgMjMwLCAKLSAgICAxNjYsIDM5LCAyMDgsIDEsIDEyNSwgMjMwLCAxNjYsIDM5LCAyMDgsIDEsIDEyMSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIAotICAgIDEyNSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyMSwgMjIyLCAyMTMsIDM5LCAyMDgsIDEsIDEyNSwgMjIyLCAyMTMsIDM5LCAKLSAgICAyMDgsIDEsIDEyMSwgMjMyLCAxNjIsIDM5LCAyMDgsIDEsIDEyNSwgMjMyLCAxNjIsIDM5LCAyMDgsIDEsIDEyMSwgMjEzLCAKLSAgICAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIDEyMSwgMjQxLCA3NSwgMzksIDIwOCwgMSwgCi0gICAgMTI1LCAyNDEsIDc1LCAzOSwgMjA4LCAxLCAxMjEsIDc4LCAzOSwgMjA4LCAxLCAxMjUsIDc4LCAzOSwgMjA4LCAyMzEsIAotICAgIDIwOSwgMjM0LCAyMzYsIDM5LCAyMDgsIDI1LCAyNTUsIDgyLCAzOSwgMjA4LCAyNSwgNzQsIDM5LCAyMDgsIDI1LCAyMTQsIAotICAgIDIxNCwgMzksIDIwOCwgMjUsIDY5LCAzOSwgMjA4LCAyNSwgNzYsIDM5LCAyMDgsIDI1LCA3OCwgMzksIDIwOCwgMjMxLCAKLSAgICAyMDksIDIzNCwgMTE0LCAzOSwgMjA4LCAyNSwgMjQwLCAxMjYsIDM5LCAyMDgsIDI1LCAyMTQsIDIxMywgMzksIDIwOCwgMjUsIAotICAgIDIxNCwgMjI5LCAzOSwgMjA4LCAyNSwgMjUzLCAxOTgsIDM5LCAyMDgsIDI1LCAyNTMsIDE3NSwgMzksIDIwOCwgMjUsIDI1NCwgCi0gICAgMTMxLCAzOSwgMjA4LCAyNSwgMjU0LCAxNDQsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDksIDI0NSwgMTg4LCAzOSwgMjA4LCAKLSAgICAxMzgsIDIzMSwgMjA5LCAyMjcsIDIxMCwgMzksIDIwOCwgMTM4LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDM5LCAyMDgsIDEzOCwgCi0gICAgMjMxLCAyMDksIDIxOSwgNDQsIDM5LCAyMDgsIDE2LCAyMzQsIDE5LCAzOSwgMjA4LCAxNiwgMjI3LCAyMTAsIDM5LCAyMDgsIAotICAgIDE2LCAyMjEsIDI1NSwgMzksIDIwOCwgMTYsIDI0MSwgNzYsIDI0MSwgNzEsIDM5LCAyMDgsIDE2LCAyMzQsIDI4LCAyMzQsIAotICAgIDI3LCAxODgsIDE4NywgMSwgNzYsIDE4OCwgMTg3LCAxLCA3OCwgMTg4LCAxODcsIDEsIDI1MCwgMTY1LCAxODgsIDE4NywgMSwgCi0gICAgMjI3LCAxNjksIDE4OCwgMTg3LCAxLCAyMTUsIDE1NywgMTg4LCAxODcsIDEsIDIxNSwgMTQ1LCAxODgsIDE4NywgMSwgMjQ4LCAKLSAgICAxNDMsIDE4OCwgMTg3LCAxLCAyNDgsIDEyNywgMTg4LCAxODcsIDEsIDIyOCwgMTE1LCAxODgsIDE4NywgMSwgMjIwLCAxMDQsIAotICAgIDE4OCwgMTg3LCAxLCAyMTgsIDIyNSwgMTg4LCAxODcsIDI1LCA1LCAyMzYsIDQwLCAxODgsIDE4NywgMjUsIDUsIDIxNCwgCi0gICAgMTE4LCAxODgsIDE4NywgMjUsIDUsIDI1NSwgNDYsIDE4OCwgMTg3LCAyNSwgNSwgMjUzLCAyMDAsIDE4OCwgMTg3LCAyNSwgCi0gICAgNSwgMjU1LCAzOSwgMTg4LCAxODcsIDI1MCwgMTMzLCAxODgsIDE4NywgMjU0LCAyMTUsIDIzNCwgMTA0LCAxODgsIDE4NywgCi0gICAgMjU0LCAxMTEsIDE4OCwgMTg3LCAzLCAyMjMsIDc3LCA3OSwgMTg4LCAxODcsIDIxMSwgMjA5LCAyMjMsIDc3LCA3OSwgMTg4LCAKLSAgICAxODcsIDI1LCA1LCAyMTMsIDE0NywgMTg4LCAxODcsIDIxMywgMTUyLCAyOSwgMywgMjE1LCAxMzgsIDI5LCAzLCAyMTUsIAotICAgIDE0MSwgMjksIDMsIDIxNSwgMTQ0LCAyOSwgMywgMjE1LCAxNDIsIDI5LCAzLCAyMTUsIDE0MywgMjksIDMsIDIxNSwgMTQwLCAKLSAgICAyOSwgMywgMjQ4LCAxMjEsIDI5LCAzLCAyNDgsIDEyMywgMjksIDMsIDI0OCwgMTI2LCAyOSwgMywgMjQ4LCAxMjQsIDI5LCAKLSAgICAzLCAyNDgsIDEyNSwgMjksIDMsIDI0OCwgMTIyLCAyOSwgMywgMjQ2LCAzNiwgMjksIDMsIDI0NiwgMzksIDI5LCAzLCAyNDYsIAotICAgIDQ1LCAyOSwgMywgMjQ2LCA0MywgMjksIDMsIDI0NiwgNDQsIDI5LCAzLCAyNDYsIDM3LCAyOSwgMywgMjUwLCAyMTIsIDI5LCAKLSAgICAzLCAyNTAsIDIwNiwgMjksIDMsIDI1MCwgMjA4LCAyOSwgMywgMjUwLCAyMTEsIDI5LCAzLCAyNTAsIDIwOSwgMjksIDMsIAotICAgIDI1MCwgMjEwLCAyOSwgMywgMjUwLCAyMDcsIDI5LCAzLCAyNTIsIDExOSwgMjksIDMsIDI1MiwgOTgsIDI5LCAzLCAyNTIsIAotICAgIDExMCwgMjksIDMsIDI1MiwgMTE4LCAyOSwgMywgMjUyLCAxMTMsIDI5LCAzLCAyNTIsIDExNCwgMjksIDMsIDI1MiwgMTAyLCAKLSAgICAxODgsIDE4NywgMSwgMjM0LCAyNSwgMTg4LCAxODcsIDEsIDIyMSwgMjU1LCAxODgsIDE4NywgMSwgMjMzLCAxMTUsIDE4OCwgCi0gICAgMTg3LCAxLCAyMzAsIDE3NywgMTg4LCAxODcsIDEsIDE5MSwgMTg4LCAxODcsIDEsIDE5OCwgMTg4LCAxODcsIDEsIDI1MCwgCi0gICAgMTEwLCAxODgsIDE4NywgMSwgMjE2LCA5MSwgMTg4LCAxODcsIDEsIDIzNCwgMTA3LCAxODgsIDE4NywgMSwgMjI4LCAyNTUsIAotICAgIDE4OCwgMTg3LCAxLCAyMTYsIDE1MSwgMTg4LCAxODcsIDEsIDIxMiwgNjAsIDE4OCwgMTg3LCAxLCAyMTEsIDY5LCAxODgsIAotICAgIDE4NywgMSwgMjQwLCAyMjMsIDE4OCwgMTg3LCAxLCAyMTQsIDE5MCwgMTg4LCAxODcsIDEsIDc0LCAxODgsIDE4NywgMSwgCi0gICAgMjI1LCAxNDUsIDE4OCwgMTg3LCAxLCAyNTMsIDIxMCwgMTg4LCAxODcsIDEsIDI0MiwgMTc0LCAxODgsIDE4NywgMSwgMjM1LCAKLSAgICAxMTgsIDE4OCwgMTg3LCAxLCAyMjMsIDE2OSwgMTg4LCAxODcsIDEsIDI1MiwgMTk5LCAxODgsIDE4NywgMSwgMjM1LCAxMDYsIAotICAgIDE4OCwgMTg3LCAxLCAyNDcsIDIyNywgMTg4LCAxODcsIDEsIDI0MiwgMjI4LCAxODgsIDE4NywgMSwgMjQ4LCAxMywgMTg4LCAKLSAgICAxODcsIDEsIDI1MiwgMjQsIDE4OCwgMTg3LCAxLCAyMzQsIDI2LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIzMywgMTE2LCAKLSAgICAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIzMCwgMTc4LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIyNiwgOTQsIDIzMiwgCi0gICAgMTM0LCAxODgsIDE4NywgMSwgMjI5LCAyMzQsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjE2LCA5MiwgMjMyLCAxMzQsIAotICAgIDE4OCwgMTg3LCAxLCAyMjksIDAsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjQwLCAxNjEsIDIzMiwgMTM0LCAxODgsIDE4NywgCi0gICAgMjUsIDUsIDIyNiwgMTk5LCAxODgsIDE4NywgMjUsIDUsIDIzNiwgNCwgMTg4LCAxODcsIDI1LCA1LCAyNTQsIDEzMCwgMTg4LCAKLSAgICAxODcsIDI1LCA1LCAyMTEsIDM4LCAxODgsIDE4NywgMjUsIDUsIDIxOSwgMzQsIDE4OCwgMTg3LCAyNSwgNSwgMjE0LCAxODcsIAotICAgIDE4OCwgMTg3LCAyNSwgNSwgMjUwLCAxMzEsIDE4OCwgMTg3LCAyNSwgNSwgMjI3LCAxOTUsIDE4OCwgMTg3LCAyNTAsIDEzMiwgCi0gICAgMTg4LCAxODcsIDIzMiwgOTAsIDIzNSwgMTU2LCAxODgsIDE4NywgMjU0LCA1NCwgMjM1LCAxNTYsIDE4OCwgMTg3LCAyMSwgCi0gICAgMjEwLCA4NiwgMTg4LCAxODcsIDIxLCAxMTEsIDE4OCwgMTg3LCAyMSwgMTA1LCAxODgsIDE4NywgMjEsIDE1OCwgMTg4LCAKLSAgICAxODcsIDIxLCAxNjEsIDE4OCwgMTg3LCAyMSwgMTkwLCAxODgsIDE4NywgMjEsIDE5NSwgMTg4LCAxODcsIDIxLCAxOTksIAotICAgIDE4OCwgMTg3LCAyMSwgMTk2LCAxODgsIDE4NywgMjEsIDIwMSwgMjQsIDE0MywgMjI3LCA4MSwgMjQsIDE0MywgMjI3LCA4NiwgCi0gICAgMjQsIDE0MywgMjEwLCAyNDMsIDI0LCAxNDMsIDIxMCwgMjQyLCAyNCwgMTQzLCAyMTAsIDI0MSwgMjQsIDE0MywgMjE1LCAKLSAgICAyMywgMjQsIDE0MywgMjE1LCAyNiwgMjQsIDE0MywgMjEwLCAyMTAsIDI0LCAxNDMsIDIxMCwgMjA2LCAyNCwgMTQzLCAyNDUsIAotICAgIDYyLCAyNCwgMTQzLCAyNDUsIDYwLCAyNCwgMTQzLCAyNDUsIDYxLCAyNCwgMTQzLCAyNDUsIDU4LCAyNCwgMTQzLCAyNDAsIAotICAgIDE1MSwgMjQsIDE0MywgMjQwLCAxNTAsIDI0LCAxNDMsIDI0MCwgMTQ4LCAyNCwgMTQzLCAyNDAsIDE0OSwgMjQsIDE0MywgCi0gICAgMjQwLCAxNTQsIDI0LCAxNDMsIDI0MCwgMTQ3LCAyNCwgMTQzLCAyNDAsIDE0NiwgMjQsIDE0MywgMjQwLCAxNTYsIDI0LCAKLSAgICAxNDMsIDI1NCwgNDEsIDI0LCAxNDMsIDI1NCwgNDAsIDI0LCA5MCwgMjI4LCAyMjQsIDI0LCA5MCwgMjI4LCAyMzAsIDI0LCAKLSAgICA5MCwgMjE4LCAyMDYsIDI0LCA5MCwgMjE4LCAyMDUsIDI0LCA5MCwgMjE2LCA5NywgMjQsIDkwLCAyMTYsIDk1LCAyNCwgOTAsIAotICAgIDIxNiwgOTQsIDI0LCA5MCwgMjE2LCAxMDAsIDI0LCA5MCwgMjE2LCAxMDEsIDI0LCA5MCwgMjE2LCA5MywgMjQsIDkwLCAKLSAgICAyMjMsIDgsIDI0LCA5MCwgMjIzLCAyMywgMjQsIDkwLCAyMTgsIDIxMiwgMjQsIDkwLCAyMjMsIDIwLCAyNCwgOTAsIDIyMywgCi0gICAgMTAsIDI0LCA5MCwgMjIzLCAxMiwgMjQsIDkwLCAyMjIsIDI1NSwgMjQsIDkwLCAyMjMsIDAsIDI0LCA5MCwgMjM0LCAyMjQsIAotICAgIDI0LCA5MCwgMjMwLCAyMTcsIDI0LCA5MCwgMjMwLCAyMTEsIDI0LCA5MCwgMjE4LCAyMTYsIDI0LCA5MCwgMjMwLCAyMTQsIAotICAgIDI0LCA5MCwgMjMwLCAyMjAsIDI0LCA5MCwgMjI1LCA3OSwgMjQsIDkwLCAyMjUsIDg4LCAyNCwgOTAsIDIyNSwgOTIsIDI0LCAKLSAgICA5MCwgMjE4LCAyMTQsIDI0LCA5MCwgMjI1LCA4MiwgMjQsIDkwLCAyMjUsIDk2LCAyNCwgOTAsIDIyNSwgOTcsIDI0LCA5MCwgCi0gICAgMjE5LCAxNDIsIDI0LCA5MCwgMjE5LCAxNDUsIDI0LCA5MCwgMjE4LCAyMTAsIDI0LCA5MCwgMjE4LCAyMDgsIDI0LCA5MCwgCi0gICAgMjE5LCAxNDAsIDI0LCA5MCwgMjE5LCAxNDgsIDI0LCA5MCwgMjE5LCAxNDksIDI0LCA5MCwgMjE5LCAxMzQsIDI0LCA5MCwgCi0gICAgMjE5LCAxNDcsIDI0LCA5MCwgMjI2LCAzNCwgMjQsIDkwLCAyMjYsIDM1LCAyNCwgOTAsIDIxMSwgMjQsIDI0LCA5MCwgMjExLCAKLSAgICAyNSwgMjQsIDkwLCAyNTAsIDUyLCAyNCwgOTAsIDI1MCwgNTEsIDI0LCA5MCwgMjE4LCAyMjEsIDI0LCA5MCwgMjI1LCAxMzEsIAotICAgIDI0LCA5MCwgMjI1LCAxMzAsIDEwLCAxNCwgMjM4LCAzMSwgMTAsIDE0LCAyMzgsIDMwLCAxMCwgMTQsIDIzOCwgMjksIDEwLCAKLSAgICAxNCwgMjM4LCAyOCwgMTAsIDE0LCAyMzgsIDI3LCAxMCwgMTQsIDIzOCwgMjYsIDEwLCAxNCwgMjM4LCAyNSwgMTAsIDE0LCAKLSAgICAyMzgsIDI0LCAxMCwgMTQsIDIzOCwgMjMsIDEwLCAxNCwgMjM4LCAyMiwgMTAsIDE0LCAyMzgsIDIxLCAxMCwgMTQsIDIzOCwgCi0gICAgMjAsIDEwLCAxNCwgMjM4LCAxOSwgMTAsIDE0LCAyMzgsIDE4LCAxMCwgMTQsIDIzOCwgMTcsIDEwLCAxNCwgMjM4LCAxNiwgCi0gICAgMTAsIDE0LCAyMzgsIDE1LCAxMCwgMTQsIDIzOCwgMTQsIDEwLCAxNCwgMjM4LCAxMywgMTAsIDE0LCAyMzgsIDEyLCAxMCwgCi0gICAgMTQsIDIzOCwgMTEsIDEwLCAxNCwgMjM4LCAxMCwgMTAsIDE0LCAyMzgsIDksIDEwLCAxNCwgMjM4LCA4LCAxMCwgMTQsIAotICAgIDIzOCwgNywgMTAsIDE0LCAyMzgsIDYsIDEwLCAxNCwgMjM4LCA1LCAxMCwgMTQsIDIzOCwgNCwgMTAsIDE0LCAyMzgsIDMsIAotICAgIDEwLCAxNCwgMjM4LCAyLCAxMCwgMTQsIDIzOCwgMSwgMTAsIDE0LCAyMzgsIDAsIDEwLCAxNCwgMjM3LCAyNTUsIDEwLCAxNCwgCi0gICAgMjM3LCAyNTQsIDEwLCAxNCwgMjM3LCAyNTMsIDEwLCAxNCwgMjM3LCAyNTIsIDEwLCAxNCwgMjM3LCAyNTEsIDEwLCAxNCwgCi0gICAgMjM3LCAyNTAsIDEwLCAxNCwgMjM3LCAyNDksIDEwLCAxNCwgMjM3LCAyNDgsIDEwLCAxNCwgMjM3LCAyNDcsIDEwLCAxNCwgCi0gICAgMjM3LCAyNDYsIDEwLCAxNCwgMjM3LCAyNDUsIDEwLCAxNCwgMjM3LCAyNDQsIDEwLCAxNCwgMjM3LCAyNDMsIDEwLCAxNCwgCi0gICAgMjM3LCAyNDIsIDEwLCAxNCwgMjM3LCAyNDEsIDEwLCAxNCwgMjM3LCAyNDAsIDEwLCAxNCwgMjM3LCAyMzksIDEwLCAxNCwgCi0gICAgMjM3LCAyMzgsIDEwLCAxNCwgMjM3LCAyMzcsIDEwLCAxNCwgMjM3LCAyMzYsIDEwLCAxNCwgMjM3LCAyMzUsIDEwLCAxNCwgCi0gICAgMjM3LCAyMzQsIDEwLCAxNCwgMjM3LCAyMzMsIDEwLCAxNCwgMjM3LCAyMzIsIDEwLCAxNCwgMjM3LCAyMzEsIDEwLCAxNCwgCi0gICAgMjM3LCAyMzAsIDEwLCAxNCwgMjM3LCAyMjksIDEwLCAxNCwgMjM3LCAyMjgsIDEwLCAxNCwgMjM3LCAyMjcsIDEwLCAxNCwgCi0gICAgMjM3LCAyMjYsIDEwLCAxNCwgMjM3LCAyMjUsIDEwLCAxNCwgMjM3LCAyMjQsIDEwLCAxNCwgMjM3LCAyMjMsIDEwLCAxNCwgCi0gICAgMjM3LCAyMjIsIDEwLCAxNCwgMjM3LCAyMjEsIDEwLCAxNCwgMjM3LCAyMjAsIDEwLCAxNCwgMjM3LCAyMTksIDEwLCAxNCwgCi0gICAgMjM3LCAyMTgsIDEwLCAxNCwgMjM3LCAyMTcsIDEwLCAxNCwgMjM3LCAyMTYsIDEwLCAxNCwgMjM3LCAyMTUsIDEwLCAxNCwgCi0gICAgMjM3LCAyMTQsIDEwLCAxNCwgMjM3LCAyMTMsIDEwLCAxNCwgMjM3LCAyMTIsIDEwLCAxNCwgMjM3LCAyMTEsIDEwLCAxNCwgCi0gICAgMjM3LCAyMTAsIDEwLCAxNCwgMjM3LCAyMDksIDEwLCAxNCwgMjM3LCAyMDgsIDEwLCAxNCwgMjM3LCAyMDcsIDEwLCAxNCwgCi0gICAgMjM3LCAyMDYsIDEwLCAxNCwgMjM3LCAyMDUsIDEwLCAxNCwgMjM3LCAyMDQsIDEwLCAxNCwgMjM3LCAyMDMsIDEwLCAxNCwgCi0gICAgMjM3LCAyMDIsIDEwLCAxNCwgMjM3LCAyMDEsIDEwLCAxNCwgMjM3LCAyMDAsIDEwLCAxNCwgMjM3LCAxOTksIDEwLCAxNCwgCi0gICAgMjM3LCAxOTgsIDEwLCAxNCwgMjM3LCAxOTcsIDEwLCAxNCwgMjM3LCAxOTYsIDEwLCAxNCwgMjM3LCAxOTUsIDEwLCAxNCwgCi0gICAgMjM3LCAxOTQsIDEwLCAxNCwgMjM3LCAxOTMsIDEwLCAxNCwgMjM3LCAxOTIsIDEwLCAxNCwgMjM3LCAxOTEsIDEwLCAxNCwgCi0gICAgMjM3LCAxOTAsIDEwLCAxNCwgMjM3LCAxODksIDEwLCAxNCwgMjM3LCAxODgsIDEwLCAxNCwgMjM3LCAxODcsIDEwLCAxNCwgCi0gICAgMjM3LCAxODYsIDEwLCAxNCwgMjM3LCAxODUsIDEwLCAxNCwgMjM3LCAxODQsIDEwLCAxNCwgMjM3LCAxODMsIDEwLCAxNCwgCi0gICAgMjM3LCAxODIsIDEwLCAxNCwgMjM3LCAxODEsIDEwLCAxNCwgMjM3LCAxODAsIDEwLCAxNCwgMjM3LCAxNzksIDEwLCAxNCwgCi0gICAgMjM3LCAxNzgsIDEwLCAxNCwgMjM3LCAxNzcsIDEwLCAxNCwgMjM3LCAxNzYsIDEwLCAxNCwgMjM3LCAxNzUsIDEwLCAxNCwgCi0gICAgMjM3LCAxNzQsIDEwLCAxNCwgMjM3LCAxNzMsIDEwLCAxNCwgMjM3LCAxNzIsIDEwLCAxNCwgMjM3LCAxNzEsIDEwLCAxNCwgCi0gICAgMjM3LCAxNzAsIDEwLCAxNCwgMjM3LCAxNjksIDEwLCAxNCwgMjM3LCAxNjgsIDEwLCAxNCwgMjM3LCAxNjcsIDEwLCAxNCwgCi0gICAgMjM3LCAxNjYsIDEwLCAxNCwgMjM3LCAxNjUsIDEwLCAxNCwgMjM3LCAxNjQsIDEwLCAxNCwgMjM3LCAxNjMsIDEwLCAxNCwgCi0gICAgMjM3LCAxNjIsIDEwLCAxNCwgMjM3LCAxNjEsIDEwLCAxNCwgMjM3LCAxNjAsIDEwLCAxNCwgMjM3LCAxNTksIDEwLCAxNCwgCi0gICAgMjM3LCAxNTgsIDEwLCAxNCwgMjM3LCAxNTcsIDEwLCAxNCwgMjM3LCAxNTYsIDEwLCAxNCwgMjM3LCAxNTUsIDEwLCAxNCwgCi0gICAgMjM3LCAxNTQsIDEwLCAxNCwgMjM3LCAxNTMsIDEwLCAxNCwgMjM3LCAxNTIsIDEwLCAxNCwgMjM3LCAxNTEsIDEwLCAxNCwgCi0gICAgMjM3LCAxNTAsIDEwLCAxNCwgMjM3LCAxNDksIDEwLCAxNCwgMjM3LCAxNDgsIDEwLCAxNCwgMjM3LCAxNDcsIDEwLCAxNCwgCi0gICAgMjM3LCAxNDYsIDEwLCAxNCwgMjM3LCAxNDUsIDEwLCAxNCwgMjM3LCAxNDQsIDEwLCAxNCwgMjM3LCAxNDMsIDEwLCAxNCwgCi0gICAgMjM3LCAxNDIsIDEwLCAxNCwgMjM3LCAxNDEsIDEwLCAxNCwgMjM3LCAxNDAsIDEwLCAxNCwgMjM3LCAxMzksIDEwLCAxNCwgCi0gICAgMjM3LCAxMzgsIDEwLCAxNCwgMjM3LCAxMzcsIDEwLCAxNCwgMjM3LCAxMzYsIDEwLCAxNCwgMjM3LCAxMzUsIDEwLCAxNCwgCi0gICAgMjM3LCAxMzQsIDEwLCAxNCwgMjM3LCAxMzMsIDEwLCAxNCwgMjM3LCAxMzIsIDEwLCAxNCwgMjM3LCAxMzEsIDEwLCAxNCwgCi0gICAgMjM3LCAxMzAsIDEwLCAxNCwgMjM3LCAxMjksIDEwLCAxNCwgMjM3LCAxMjgsIDEwLCAxNCwgMjM3LCAxMjcsIDEwLCAxNCwgCi0gICAgMjM3LCAxMjYsIDEwLCAxNCwgMjM3LCAxMjUsIDEwLCAxNCwgMjM3LCAxMjQsIDEwLCAxNCwgMjM3LCAxMjMsIDEwLCAxNCwgCi0gICAgMjM3LCAxMjIsIDEwLCAxNCwgMjM3LCAxMjEsIDEwLCAxNCwgMjM3LCAxMjAsIDEwLCAxNCwgMjM3LCAxMTksIDEwLCAxNCwgCi0gICAgMjM3LCAxMTgsIDEwLCAxNCwgMjM3LCAxMTcsIDEwLCAxNCwgMjM3LCAxMTYsIDEwLCAxNCwgMjM3LCAxMTUsIDEwLCAxNCwgCi0gICAgMjM3LCAxMTQsIDEwLCAxNCwgMjM3LCAxMTMsIDEwLCAxNCwgMjM3LCAxMTIsIDEwLCAxNCwgMjM3LCAxMTEsIDEwLCAxNCwgCi0gICAgMjM3LCAxMTAsIDEwLCAxNCwgMjM3LCAxMDksIDEwLCAxNCwgMjM3LCAxMDgsIDEwLCAxNCwgMjM3LCAxMDcsIDEwLCAxNCwgCi0gICAgMjM3LCAxMDYsIDEwLCAxNCwgMjM3LCAxMDUsIDEwLCAxNCwgMjM3LCAxMDQsIDEwLCAxNCwgMjM3LCAxMDMsIDEwLCAxNCwgCi0gICAgMjM3LCAxMDIsIDEwLCAxNCwgMjM3LCAxMDEsIDEwLCAxNCwgMjM3LCAxMDAsIDEwLCAxNCwgMjM3LCA5OSwgMTAsIDE0LCAKLSAgICAyMzcsIDk4LCAxMCwgMTQsIDIzNywgOTcsIDEwLCAxNCwgMjM3LCA5NiwgMTAsIDE0LCAyMzcsIDk1LCAxMCwgMTQsIDIzNywgCi0gICAgOTQsIDEwLCAxNCwgMjM3LCA5MywgMTAsIDE0LCAyMzcsIDkyLCAxMCwgMTQsIDIzNywgOTEsIDEwLCAxNCwgMjM3LCA5MCwgCi0gICAgMTAsIDE0LCAyMzcsIDg5LCAxMCwgMTQsIDIzNywgODgsIDEwLCAxNCwgMjM3LCA4NywgMTAsIDE0LCAyMzcsIDg2LCAxMCwgCi0gICAgMTQsIDIzNywgODUsIDEwLCAxNCwgMjM3LCA4NCwgMTAsIDE0LCAyMzcsIDgzLCAxMCwgMTQsIDIzNywgODIsIDEwLCAxNCwgCi0gICAgMjM3LCA4MSwgMTAsIDE0LCAyMzcsIDgwLCAxMCwgMTQsIDIzNywgNzksIDEwLCAxNCwgMjM3LCA3OCwgMTAsIDE0LCAyMzcsIAotICAgIDc3LCAxMCwgMTQsIDIzNywgNzYsIDEwLCAxNCwgMjM3LCA3NSwgMTAsIDE0LCAyMzcsIDc0LCAxMCwgMTQsIDIzNywgNzMsIAotICAgIDEwLCAxNCwgMjM3LCA3MiwgMTAsIDE0LCAyMzcsIDcxLCAxMCwgMTQsIDIzNywgNzAsIDEwLCAxNCwgMjM3LCA2OSwgMTAsIAotICAgIDE0LCAyMzcsIDY4LCAxMCwgMTQsIDIzNywgNjcsIDEwLCAxNCwgMjM3LCA2NiwgMTAsIDE0LCAyMzcsIDY1LCAxMCwgMTQsIAotICAgIDIzNywgNjQsIDEwLCAxNCwgMjM3LCA2MywgMTAsIDE0LCAyMzcsIDYyLCAxMCwgMTQsIDIzNywgNjEsIDEwLCAxNCwgMjM3LCAKLSAgICA2MCwgMTAsIDE0LCAyMzcsIDU5LCAxMCwgMTQsIDIzNywgNTgsIDEwLCAxNCwgMjM3LCA1NywgMTAsIDE0LCAyMzcsIDU2LCAKLSAgICAxMCwgMTQsIDIzNywgNTUsIDEwLCAxNCwgMjM3LCA1NCwgMTAsIDE0LCAyMzcsIDUzLCAxMCwgMTQsIDIzNywgNTIsIDEwLCAKLSAgICAxNCwgMjM3LCA1MSwgMTAsIDE0LCAyMzcsIDUwLCAxMCwgMTQsIDIzNywgNDksIDEwLCAxNCwgMjM3LCA0OCwgMTAsIDE0LCAKLSAgICAyMzcsIDQ3LCAxMCwgMTQsIDIzNywgNDYsIDEwLCAxNCwgMjM3LCA0NSwgMTAsIDE0LCAyMzcsIDQ0LCAxMCwgMTQsIDIzNywgCi0gICAgNDMsIDEwLCAxNCwgMjM3LCA0MiwgMTAsIDE0LCAyMzcsIDQxLCAxMCwgMTQsIDIzNywgNDAsIDEwLCAxNCwgMjM3LCAzOSwgCi0gICAgMTAsIDE0LCAyMzcsIDM4LCAxMCwgMTQsIDIzNywgMzcsIDEwLCAxNCwgMjM3LCAzNiwgMTAsIDE0LCAyMzcsIDM1LCAxMCwgCi0gICAgMTQsIDIzNywgMzQsIDEwLCAxNCwgMjM3LCAzMywgMTAsIDE0LCAyMzcsIDMyLCAxMCwgMTQsIDIzNywgMzEsIDEwLCAxNCwgCi0gICAgMjM3LCAzMCwgMTAsIDE0LCAyMzcsIDI5LCAxMCwgMTQsIDIzNywgMjgsIDEwLCAxNCwgMjM3LCAyNywgMTAsIDE0LCAyMzcsIAotICAgIDI2LCAxMCwgMTQsIDIzNywgMjUsIDEwLCAxNCwgMjM3LCAyNCwgMTAsIDE0LCAyMzcsIDIzLCAxMCwgMTQsIDIzNywgMjIsIAotICAgIDEwLCAxNCwgMjM3LCAyMSwgMTAsIDE0LCAyMzcsIDIwLCAxMCwgMTQsIDIzNywgMTksIDEwLCAxNCwgMjM3LCAxOCwgMTAsIAotICAgIDE0LCAyMzcsIDE3LCAxMCwgMTQsIDIzNywgMTYsIDEwLCAxNCwgMjM3LCAxNSwgMTAsIDE0LCAyMzcsIDE0LCAxMCwgMTQsIAotICAgIDIzNywgMTMsIDEwLCAxNCwgMjM3LCAxMiwgMTAsIDE0LCAyMzcsIDExLCAxMCwgMTQsIDIzNywgMTAsIDEwLCAxNCwgMjM3LCAKLSAgICA5LCAxMCwgMTQsIDIzNywgOCwgMTAsIDE0LCAyMzcsIDcsIDEwLCAxNCwgMjM3LCA2LCAxMCwgMTQsIDIzNywgNSwgMTAsIAotICAgIDE0LCAyMzcsIDQsIDEwLCAxNCwgMjM3LCAzLCAxMCwgMTQsIDIzNywgMiwgMTAsIDE0LCAyMzcsIDEsIDEwLCAxNCwgMjM3LCAKLSAgICAwLCAxMCwgMTQsIDIzNiwgMjU1LCAxMCwgMTQsIDIzNiwgMjU0LCAxMCwgMTQsIDIzNiwgMjUzLCAxMCwgMTQsIDIzNiwgCi0gICAgMjUyLCAxMCwgMTQsIDIzNiwgMjUxLCAxMCwgMTQsIDIzNiwgMjUwLCAxMCwgMTQsIDIzNiwgMjQ5LCAxMCwgMTQsIDIzNiwgCi0gICAgMjQ4LCAxMCwgMTQsIDIzNiwgMjQ3LCAxMCwgMTQsIDIzNiwgMjQ2LCAxMCwgMTQsIDIzNiwgMjQ1LCAxMCwgMTQsIDIzNiwgCi0gICAgMjQ0LCAxMCwgMTQsIDIzNiwgMjQzLCAxMCwgMTQsIDIzNiwgMjQyLCAxMCwgMTQsIDIzNiwgMjQxLCAxMCwgMTQsIDIzNiwgCi0gICAgMjQwLCAxMCwgMTQsIDIzNiwgMjM5LCAxMCwgMTQsIDIzNiwgMjM4LCAxMCwgMTQsIDIzNiwgMjM3LCAxMCwgMTQsIDIzNiwgCi0gICAgMjM2LCAxMCwgMTQsIDIzNiwgMjM1LCAxMCwgMTQsIDIzNiwgMjM0LCAxMCwgMTQsIDIzNiwgMjMzLCAxMCwgMTQsIDIzNiwgCi0gICAgMjMyLCAxMCwgMTQsIDIzNiwgMjMxLCAxMCwgMTQsIDIzNiwgMjMwLCAxMCwgMTQsIDIzNiwgMjI5LCAxMCwgMTQsIDIzNiwgCi0gICAgMjI4LCAxMCwgMTQsIDIzNiwgMjI3LCAxMCwgMTQsIDIzNiwgMjI2LCAxMCwgMTQsIDIzNiwgMjI1LCAxMCwgMTQsIDIzNiwgCi0gICAgMjI0LCAxMCwgMTQsIDIzNiwgMjIzLCAxMCwgMTQsIDIzNiwgMjIyLCAxMCwgMTQsIDIzNiwgMjIxLCAxMCwgMTQsIDIzNiwgCi0gICAgMjIwLCAxMCwgMTQsIDIzNiwgMjE5LCAxMCwgMTQsIDIzNiwgMjE4LCAxMCwgMTQsIDIzNiwgMjE3LCAxMCwgMTQsIDIzNiwgCi0gICAgMjE2LCAxMCwgMTQsIDIzNiwgMjE1LCAxMCwgMTQsIDIzNiwgMjE0LCAxMCwgMTQsIDIzNiwgMjEzLCAxMCwgMTQsIDIzNiwgCi0gICAgMjEyLCAxMCwgMTQsIDIzNiwgMjExLCAxMCwgMTQsIDIzNiwgMjEwLCAxMCwgMTQsIDIzNiwgMjA5LCAxMCwgMTQsIDIzNiwgCi0gICAgMjA4LCAxMCwgMTQsIDIzNiwgMjA3LCAxMCwgMTQsIDIzNiwgMjA2LCAxMCwgMTQsIDIzNiwgMjA1LCAxMCwgMTQsIDIzNiwgCi0gICAgMjA0LCAxMCwgMTQsIDIzNiwgMjAzLCAxMCwgMTQsIDIzNiwgMjAyLCAxMCwgMTQsIDIzNiwgMjAxLCAxMCwgMTQsIDIzNiwgCi0gICAgMjAwLCAxMCwgMTQsIDIzNiwgMTk5LCAxMCwgMTQsIDIzNiwgMTk4LCAxMCwgMTQsIDIzNiwgMTk3LCAxMCwgMTQsIDIzNiwgCi0gICAgMTk2LCAxMCwgMTQsIDIzNiwgMTk1LCAxMCwgMTQsIDIzNiwgMTk0LCAxMCwgMTQsIDIzNiwgMTkzLCAxMCwgMTQsIDIzNiwgCi0gICAgMTkyLCAxMCwgMTQsIDIzNiwgMTkxLCAxMCwgMTQsIDIzNiwgMTkwLCAxMCwgMTQsIDIzNiwgMTg5LCAxMCwgMTQsIDIzNiwgCi0gICAgMTg4LCAxMCwgMTQsIDIzNiwgMTg3LCAxMCwgMTQsIDIzNiwgMTg2LCAxMCwgMTQsIDIzNiwgMTg1LCAxMCwgMTQsIDIzNiwgCi0gICAgMTg0LCAxMCwgMTQsIDIzNiwgMTgzLCAxMCwgMTQsIDIzNiwgMTgyLCAxMCwgMTQsIDIzNiwgMTgxLCAxMCwgMTQsIDIzNiwgCi0gICAgMTgwLCAxMCwgMTQsIDIzNiwgMTc5LCAxMCwgMTQsIDIzNiwgMTc4LCAxMCwgMTQsIDIzNiwgMTc3LCAxMCwgMTQsIDIzNiwgCi0gICAgMTc2LCAxMCwgMTQsIDIzNiwgMTc1LCAxMCwgMTQsIDIzNiwgMTc0LCAxMCwgMTQsIDIzNiwgMTczLCAxMCwgMTQsIDIzNiwgCi0gICAgMTcyLCAxMCwgMTQsIDIzNiwgMTcxLCAxMCwgMTQsIDIzNiwgMTcwLCAxMCwgMTQsIDIzNiwgMTY5LCAxMCwgMTQsIDIzNiwgCi0gICAgMTY4LCAxMCwgMTQsIDIzNiwgMTY3LCAxMCwgMTQsIDIzNiwgMTY2LCAxMCwgMTQsIDIzNiwgMTY1LCAxMCwgMTQsIDIzNiwgCi0gICAgMTY0LCAxMCwgMTQsIDIzNiwgMTYzLCAxMCwgMTQsIDIzNiwgMTYyLCAxMCwgMTQsIDIzNiwgMTYxLCAxMCwgMTQsIDIzNiwgCi0gICAgMTYwLCAxMCwgMTQsIDIzNiwgMTU5LCAxMCwgMTQsIDIzNiwgMTU4LCAxMCwgMTQsIDIzNiwgMTU3LCAxMCwgMTQsIDIzNiwgCi0gICAgMTU2LCAxMCwgMTQsIDIzNiwgMTU1LCAxMCwgMTQsIDIzNiwgMTU0LCAxMCwgMTQsIDIzNiwgMTUzLCAxMCwgMTQsIDIzNiwgCi0gICAgMTUyLCAxMCwgMTQsIDIzNiwgMTUxLCAxMCwgMTQsIDIzNiwgMTUwLCAxMCwgMTQsIDIzNiwgMTQ5LCAxMCwgMTQsIDIzNiwgCi0gICAgMTQ4LCAxMCwgMTQsIDIzNiwgMTQ3LCAxMCwgMTQsIDIzNiwgMTQ2LCAxMCwgMTQsIDIzNiwgMTQ1LCAxMCwgMTQsIDIzNiwgCi0gICAgMTQ0LCAxMCwgMTQsIDIzNiwgMTQzLCAxMCwgMTQsIDIzNiwgMTQyLCAxMCwgMTQsIDIzNiwgMTQxLCAxMCwgMTQsIDIzNiwgCi0gICAgMTQwLCAxMCwgMTQsIDIzNiwgMTM5LCAxMCwgMTQsIDIzNiwgMTM4LCAxMCwgMTQsIDIzNiwgMTM3LCAxMCwgMTQsIDIzNiwgCi0gICAgMTM2LCAxMCwgMTQsIDIzNiwgMTM1LCAxMCwgMTQsIDIzNiwgMTM0LCAxMCwgMTQsIDIzNiwgMTMzLCAxMCwgMTQsIDIzNiwgCi0gICAgMTMyLCAxMCwgMTQsIDIzNiwgMTMxLCAxMCwgMTQsIDIzNiwgMTMwLCAxMCwgMTQsIDIzNiwgMTI5LCAxMCwgMTQsIDIzNiwgCi0gICAgMTI4LCAxMCwgMTQsIDIzNiwgMTI3LCAxMCwgMTQsIDIzNiwgMTI2LCAxMCwgMTQsIDIzNiwgMTI1LCAxMCwgMTQsIDIzNiwgCi0gICAgMTI0LCAxMCwgMTQsIDIzNiwgMTIzLCAxMCwgMTQsIDIzNiwgMTIyLCAxMCwgMTQsIDIzNiwgMTIxLCAxMCwgMTQsIDIzNiwgCi0gICAgMTIwLCAxMCwgMTQsIDIzNiwgMTE5LCAxMCwgMTQsIDIzNiwgMTE4LCAxMCwgMTQsIDIzNiwgMTE3LCAxMCwgMTQsIDIzNiwgCi0gICAgMTE2LCAxMCwgMTQsIDIzNiwgMTE1LCAxMCwgMTQsIDIzNiwgMTE0LCAxMCwgMTQsIDIzNiwgMTEzLCAxMCwgMTQsIDIzNiwgCi0gICAgMTEyLCAxMCwgMTQsIDIzNiwgMTExLCAxMCwgMTQsIDIzNiwgMTEwLCAxMCwgMTQsIDIzNiwgMTA5LCAxMCwgMTQsIDIzNiwgCi0gICAgMTA4LCAxMCwgMTQsIDIzNiwgMTA3LCAxMCwgMTQsIDIzNiwgMTA2LCAxMCwgMTQsIDIzNiwgMTA1LCAxMCwgMTQsIDIzNiwgCi0gICAgMTA0LCAxMCwgMTQsIDIzNiwgMTAzLCAxMCwgMTQsIDIzNiwgMTAyLCAxMCwgMTQsIDIzNiwgMTAxLCAxMCwgMTQsIDIzNiwgCi0gICAgMTAwLCAxMCwgMTQsIDIzNiwgOTksIDEwLCAxNCwgMjM2LCA5OCwgMTAsIDE0LCAyMzYsIDk3LCAxMCwgMTQsIDIzNiwgOTYsIAotICAgIDEwLCAxNCwgMjM2LCA5NSwgMTAsIDE0LCAyMzYsIDk0LCAxMCwgMTQsIDIzNiwgOTMsIDEwLCAxNCwgMjM2LCA5MiwgMTAsIAotICAgIDE0LCAyMzYsIDkxLCAxMCwgMTQsIDIzNiwgOTAsIDEwLCAxNCwgMjM2LCA4OSwgMTAsIDE0LCAyMzYsIDg4LCAxMCwgMTQsIAotICAgIDIzNiwgODcsIDEwLCAxNCwgMjM2LCA4NiwgMTAsIDE0LCAyMzYsIDg1LCAxMCwgMTQsIDIzNiwgODQsIDEwLCAxNCwgMjM2LCAKLSAgICA4MywgMTAsIDE0LCAyMzYsIDgyLCAxMCwgMTQsIDIzNiwgODEsIDEwLCAxNCwgMjM2LCA4MCwgMTAsIDE0LCAyMzYsIDc5LCAKLSAgICAxMCwgMTQsIDIzNiwgNzgsIDEwLCAxNCwgMjM2LCA3NywgMTAsIDE0LCAyMzYsIDc2LCAxMCwgMTQsIDIzNiwgNzUsIDEwLCAKLSAgICAxNCwgMjM2LCA3NCwgMTAsIDE0LCAyMzYsIDczLCAxMCwgMTQsIDIzNiwgNzIsIDcsIDQsIDI3LCAyNDQsIDEzMywgNywgNCwgCi0gICAgMjcsIDI0NCwgMTI5LCA3LCA0LCAyNywgMjQ0LCA4NCwgNywgNCwgMjcsIDI0NCwgMTMyLCA3LCA0LCAyNywgMjQ0LCAxMzEsIAotICAgIDcsIDQsIDI3LCAyMDAsIDIyMiwgOTQsIDIxNywgMTUzLCA3LCA0LCAyNywgMjE4LCAxNzAsIDE1MCwgNCwgMjcsIDIzMSwgCi0gICAgNjQsIDIyOCwgNDQsIDE1MCwgNCwgMjcsIDIzMSwgNjQsIDI0NSwgMjIxLCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyMzUsIAotICAgIDIzNCwgMTUwLCA0LCAyNywgMjEzLCAxODAsIDIyOCwgNDQsIDE1MCwgNCwgMjcsIDIzMSwgNjQsIDIxMSwgMTYwLCA5NCwgMSwgCi0gICAgMjEwLCAyMzQsIDIsIDI0MSwgMTY1LCA5NCwgMjI1LCAxNCwgMjM1LCA1NiwgMjE0LCAxMSwgOTQsIDI3LCAyMTEsIDYsIAotICAgIDIxMCwgMjM0LCAyMTAsIDIzNCwgMjI1LCAyNDMsIDk0LCAxLCAyNTQsIDE0NywgMjUzLCAxNzAsIDk0LCAxLCAyMTEsIDI0NywgCi0gICAgMjU0LCAxNzksIDk0LCAxLCAyMTEsIDI0NywgMjQ4LCAxOTcsIDk0LCAxLCAyMTEsIDI0NywgMjQxLCAyNDUsIDk0LCAxLCAKLSAgICAyMTEsIDI0NywgMjM1LCAwLCA5NCwgMSwgMjExLCAyNDcsIDIzMywgMTAwLCA5NCwgMSwgMjExLCAyNDcsIDQwLCAyMzEsIAotICAgIDcwLCA5NCwgMSwgMjExLCAyNDcsIDIyMywgNzAsIDk0LCAxLCAyMTEsIDI0NywgMjE3LCAzOSwgOTQsIDEsIDI1NCwgMTQ3LCAKLSAgICA5NiwgNTAsIDk0LCAxLCAyMjAsIDIzLCAyLCAyMjAsIDIzLCAyNDcsIDEyOCwgOTQsIDEsIDIyMCwgMjMsIDIsIDIxOSwgCi0gICAgMTYxLCAyNDcsIDEyOCwgOTQsIDEsIDIyMCwgMjMsIDIsIDI0OCwgMjE2LCAyMiwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAxLCAKLSAgICAyMjAsIDIzLCAyLCAyNDgsIDIxNiwgMjIsIDIxOSwgMTYxLCAyNDcsIDEyOCwgOTQsIDEsIDEwOSwgMiwgMjI1LCAyNDMsIAotICAgIDk0LCAxLCAxMDksIDIsIDIyNCwgNzksIDk0LCAxLCAxMDksIDIsIDIzMSwgMTc2LCA5NCwgMSwgMjUyLCAzNywgMiwgMjQ4LCAKLSAgICAyMTUsIDk0LCAxLCAyNDIsIDIwOSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyNDgsIDE5OCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAKLSAgICAyNDEsIDI0NiwgMiwgMjMxLCAxNzYsIDk0LCAxLCAyMTQsIDQsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjEwLCA5OCwgMiwgCi0gICAgMjQ4LCAyMTUsIDk0LCAxLCAyMTYsIDIzMiwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQ4LCAyMTUsIDk0LCAKLSAgICAxLCA0MCwgMjM1LCAxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIzNSwgMSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzMsIDEwMSwgCi0gICAgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzEsIDcxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyNywgMTk5LCAyLCAyNDgsIDIxNSwgCi0gICAgOTQsIDEsIDIyMSwgMjUyLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDQwLCAyMjUsIDIyNSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAKLSAgICAyMjUsIDIyNSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTUsIDE4MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjQsIDQzLCAyLCAKLSAgICAyNDgsIDIxNSwgOTQsIDEsIDIyMywgNzEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjIwLCAyMywgMiwgMjQ4LCAyMTUsIDk0LCAKLSAgICAxLCAyMTcsIDQwLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxNCwgNCwgMiwgMjQxLCA2OCwgOTQsIDEsIDI1MiwgMzcsIDIsIAotICAgIDIyMywgMTcyLCA5NCwgMSwgMjM1LCAxLCAyLCAyMjMsIDE3MiwgOTQsIDEsIDIyNSwgMjI1LCAyLCAyMjMsIDE3MiwgOTQsIAotICAgIDI3LCAxMDksIDIzMywgMTAwLCA5LCAxLCAxMDksIDIxMiwgNDcsIDUzLCAxNywgOSwgMSwgMTA5LCAyMTIsIDQ3LCA0MCwgCi0gICAgMTcsIDksIDEsIDI1MiwgNzMsIDUzLCAxNywgOSwgMSwgMjUyLCA3MywgNDAsIDE3LCA5LCAxLCAyNTIsIDczLCA2NSwgMTcsIAotICAgIDksIDEsIDI1MiwgNzMsIDE0NywgMTcsIDksIDEsIDIyNSwgMjA5LCA1MywgMTcsIDksIDEsIDIyNSwgMjA5LCA0MCwgMTcsIAotICAgIDksIDEsIDIyNSwgMjA5LCA2NSwgMTcsIDksIDEsIDIyNSwgMjA5LCAxNDcsIDE3LCA5LCAxLCAyNTIsIDYxLCA1MywgMTcsIAotICAgIDksIDEsIDI1MiwgNjEsIDQwLCAxNywgOSwgMSwgMjUyLCA2MSwgNjUsIDE3LCA5LCAxLCAyNTIsIDYxLCAxNDcsIDE3LCA5LCAKLSAgICAxLCAyMTUsIDE0OCwgNTMsIDE3LCA5LCAxLCAyMTUsIDE0OCwgNDAsIDE3LCA5LCAxLCAyMTUsIDE0OCwgNjUsIDE3LCA5LCAKLSAgICAxLCAyMTUsIDE0OCwgMTQ3LCAxNywgOSwgMSwgMjE3LCA3LCA1MywgMTcsIDksIDEsIDIxNywgNywgNDAsIDE3LCA5LCAxLCAKLSAgICAyMTcsIDcsIDY1LCAxNywgOSwgMSwgMjE3LCA3LCAxNDcsIDE3LCA5LCAxLCAyMTUsIDE1MCwgNTMsIDE3LCA5LCAxLCAyMTUsIAotICAgIDE1MCwgNDAsIDE3LCA5LCAxLCAyMTUsIDE1MCwgNjUsIDE3LCA5LCAxLCAyMTUsIDE1MCwgMTQ3LCAxNywgOSwgMSwgMjEzLCAKLSAgICAyNDksIDUzLCAxNywgOSwgMSwgMjEzLCAyNDksIDQwLCAxNywgOSwgMSwgMjEzLCAyNDksIDY1LCAxNywgOSwgMSwgMjEzLCAKLSAgICAyNDksIDE0NywgMTcsIDksIDEsIDIyNSwgMjA3LCA1MywgMTcsIDksIDEsIDIyNSwgMjA3LCA0MCwgMTcsIDksIDEsIDIyNSwgCi0gICAgMjA3LCA2NSwgMTcsIDksIDEsIDIyNSwgMjA3LCAxNDcsIDE3LCA5LCAxLCAyNDYsIDUyLCA1MywgMTcsIDksIDEsIDI0NiwgCi0gICAgNTIsIDQwLCAxNywgOSwgMSwgMjQ2LCA1MiwgNjUsIDE3LCA5LCAxLCAyNDYsIDUyLCAxNDcsIDE3LCA5LCAxLCAyMjcsIAotICAgIDE1OCwgNTMsIDE3LCA5LCAxLCAyMjcsIDE1OCwgNDAsIDE3LCA5LCAxLCAyMjcsIDE1OCwgNjUsIDE3LCA5LCAxLCAyMjcsIAotICAgIDE1OCwgMTQ3LCAxNywgOSwgMSwgMjE3LCAyOCwgNTMsIDE3LCA5LCAxLCAyMTcsIDI4LCA0MCwgMTcsIDksIDEsIDIxNywgCi0gICAgMjgsIDY1LCAxNywgOSwgMSwgMjE3LCAyOCwgMTQ3LCAxNywgOSwgMSwgMjE3LCAyNiwgNTMsIDE3LCA5LCAxLCAyMTcsIDI2LCAKLSAgICA0MCwgMTcsIDksIDEsIDIxNywgMjYsIDY1LCAxNywgOSwgMSwgMjE3LCAyNiwgMTQ3LCAxNywgOSwgMSwgMjQ4LCAxNDEsIAotICAgIDUzLCAxNywgOSwgMSwgMjQ4LCAxNDEsIDQwLCAxNywgOSwgMSwgMjQ4LCAyMTAsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMTAsIAotICAgIDQwLCAxNywgOSwgMSwgMjQ2LCA3OSwgNTMsIDE3LCA5LCAxLCAyNDYsIDc5LCA0MCwgMTcsIDksIDEsIDI0OCwgMTM5LCA1MywgCi0gICAgMTcsIDksIDEsIDI0OCwgMTM5LCA0MCwgMTcsIDksIDEsIDIzNSwgMTI3LCA1MywgMTcsIDksIDEsIDIzNSwgMTI3LCA0MCwgCi0gICAgMTcsIDksIDEsIDIyMiwgMTc0LCA1MywgMTcsIDksIDEsIDIyMiwgMTc0LCA0MCwgMTcsIDksIDEsIDIzNCwgMTgxLCA1MywgCi0gICAgMTcsIDksIDEsIDIzNCwgMTgxLCA0MCwgMTcsIDksIDEsIDIzNCwgMTgxLCA2NSwgMTcsIDksIDEsIDIzNCwgMTgxLCAxNDcsIAotICAgIDE3LCA5LCAxLCAyNDMsIDEzMCwgNTMsIDE3LCA5LCAxLCAyNDMsIDEzMCwgNDAsIDE3LCA5LCAxLCAyNDMsIDEzMCwgNjUsIAotICAgIDE3LCA5LCAxLCAyNDMsIDEzMCwgMTQ3LCAxNywgOSwgMSwgMjQyLCAxMDksIDUzLCAxNywgOSwgMSwgMjQyLCAxMDksIDQwLCAKLSAgICAxNywgOSwgMSwgMjQyLCAxMDksIDY1LCAxNywgOSwgMSwgMjQyLCAxMDksIDE0NywgMTcsIDksIDEsIDIyOSwgOCwgNTMsIAotICAgIDE3LCA5LCAxLCAyMjksIDgsIDQwLCAxNywgOSwgMSwgMjI5LCA4LCA2NSwgMTcsIDksIDEsIDIyOSwgOCwgMTQ3LCAxNywgOSwgCi0gICAgMSwgMjI4LCA2OCwgMjQyLCAyMjYsIDUzLCAxNywgOSwgMSwgMjI4LCA2OCwgMjQyLCAyMjYsIDQwLCAxNywgOSwgMSwgMjIyLCAKLSAgICAyMTcsIDUzLCAxNywgOSwgMSwgMjIyLCAyMTcsIDQwLCAxNywgOSwgMSwgMjIyLCAyMTcsIDY1LCAxNywgOSwgMSwgMjIyLCAKLSAgICAyMTcsIDE0NywgMTcsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgNzIsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCAKLSAgICA3MiwgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAKLSAgICA0MCwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgNjUsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDE0NywgCi0gICAgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDQwLCAxNywgCi0gICAgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA2NSwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgMTQ3LCAxNywgOSwgCi0gICAgMSwgNzcsIDI1MiwgMTQxLCA1MywgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgNDAsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIAotICAgIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDE2LCA1OSwgCi0gICAgNDgsIDksIDE2LCA1OSwgNTEsIDksIDE2LCAxMTMsIDE3MCwgNDgsIDksIDE2LCAxMTMsIDE3MCwgNTEsIDksIDE2LCAxMzQsIAotICAgIDE3MCwgNDgsIDksIDE2LCAxMzQsIDE3MCwgNTEsIDksIDE2LCAxMzQsIDE3MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDQ4LCA5LCAKLSAgICAxNiwgMTM0LCAxNzAsIDIyNSwgMTAsIDI0NiwgMTEyLCA1MSwgOSwgMTYsIDI0NCwgMTksIDE3MCwgNDgsIDksIDE2LCAyNDQsIAotICAgIDE5LCAxNzAsIDUxLCA5LCAxNiwgNTIsIDY3LCAyNTIsIDE0OSwgNTEsIDksIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAKLSAgICA5LCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA1MSwgOSwgMTYsIDIyMiwgMjM2LCA5LCAxNiwgNCwgMjE3LCA4MiwgNDgsIDksIAotICAgIDE2LCA0LCAyMTcsIDgyLCA1MSwgOSwgMSwgMjI5LCA4NSwgNTMsIDE3LCA5LCAxLCAyMjksIDg1LCA0MCwgMTcsIDksIDEsIAotICAgIDIyOSwgODUsIDY1LCAxNywgOSwgMSwgMjI5LCA4NSwgMTQ3LCAxNywgOSwgMSwgMTA0LCA1MywgMTcsIDksIDEsIDEwNCwgCi0gICAgNDAsIDE3LCA5LCAxLCAyMjYsIDIzOSwgNTMsIDE3LCA5LCAxLCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAxLCAyMTAsIDIxMywgCi0gICAgNTMsIDE3LCA5LCAxLCAyMTAsIDIxMywgNDAsIDE3LCA5LCAxLCAxMDQsIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgMjE0LCAKLSAgICAwLCA1MywgMTcsIDksIDEsIDIxNCwgMCwgNDAsIDE3LCA5LCAxLCAyMzQsIDc5LCAyMjYsIDIzOSwgNTMsIDE3LCA5LCAxLCAKLSAgICAyMzQsIDc5LCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAxLCAyMzQsIDc5LCAyMTAsIDIxMywgNTMsIDE3LCA5LCAxLCAyMzQsIAotICAgIDc5LCAyMTAsIDIxMywgNDAsIDE3LCA5LCAxLCAxNjAsIDUzLCAxNywgOSwgMSwgMTYwLCA0MCwgMTcsIDksIDEsIDE2MCwgCi0gICAgNjUsIDE3LCA5LCAxLCAxNjAsIDE0NywgMTcsIDksIDEsIDIxNCwgMjA3LCAyMzQsIDE5MiwgMjM0LCA3OSwgMTA5LCAyMzEsIAotICAgIDE5OCwgNjUsIDE3LCA5LCAxLCAyMTQsIDIwNywgMjM0LCAxOTIsIDIzNCwgNzksIDEwOSwgMjMxLCAxOTgsIDE0NywgMTcsIAotICAgIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCA0MCwgCi0gICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjU0LCAyNTMsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAKLSAgICAyNTQsIDI1MywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMiwgMzEsIDUzLCAxNywgOSwgMjcsIDc3LCAKLSAgICAyLCAxODIsIDcyLCAyLCAyMTIsIDMxLCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA0LCA1MywgMTcsIDksIAotICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA0LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAyMzksIAotICAgIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgCi0gICAgNzIsIDIsIDIxMCwgMjEzLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEwLCAyMTMsIDQwLCAxNywgOSwgCi0gICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDQwLCAKLSAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDY1LCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgCi0gICAgMiwgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAyLCAKLSAgICAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIDIsIDE4MiwgCi0gICAgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCA1MywgMTcsIDksIDEsIDI0NCwgMTc2LCAKLSAgICA3NywgNDAsIDE3LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCAxNDcsIDE3LCA5LCAKLSAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEyMiwgNTMsIAotICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCAKLSAgICAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAKLSAgICAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjM0LCAKLSAgICAxMzYsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMDksIDIzMSwgCi0gICAgMTk4LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDUzLCAKLSAgICAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIAotICAgIDI3LCAyMTcsIDksIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgCi0gICAgMjcsIDIxNywgOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIxNiwgCi0gICAgMTk0LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAotICAgIDIxNiwgMTk0LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMTUxLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIAotICAgIDUzLCAxNywgOSwgMjcsIDEyMiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKLSAgICAyMzQsIDEzNiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMzQsIAotICAgIDEzNiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAKLSAgICAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIAotICAgIDY2LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDY2LCA1MywgCi0gICAgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTIyLCA1MywgMTcsIDksIAotICAgIDI3LCAyNDgsIDIyNSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCi0gICAgMjE3LCA4MiwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjEwLCAxMTIsIAotICAgIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIAotICAgIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgNTMsIDE3LCAKLSAgICA5LCAyNywgMjQ0LCAxNTEsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgCi0gICAgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAotICAgIDI0NCwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNzcsIDUzLCAxNywgOSwgCi0gICAgMjcsIDIyNCwgODUsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyNCwgCi0gICAgODUsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzUsIAotICAgIDEsIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTIyLCAKLSAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgMTA5LCAKLSAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgMjMxLCAxOTgsIAotICAgIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDUzLCAxNywgOSwgCi0gICAgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAKLSAgICAyNywgMjMzLCAxMDksIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKLSAgICA5LCAyNywgMjMzLCAxMDksIDIsIDc3LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCA2NiwgMiwgCi0gICAgMTIyLCA1MywgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNTMsIDE3LCA5LCAKLSAgICAyNywgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjI4LCAKLSAgICA2OCwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAotICAgIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTA5LCAKLSAgICAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxNTEsIAotICAgIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDEwOSwgMjMxLCAKLSAgICAxOTgsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE1MSwgNTMsIDE3LCAKLSAgICA5LCAyNywgNzcsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgCi0gICAgNjYsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA3NywgMiwgNzcsIDUzLCAKLSAgICAxNywgOSwgMjcsIDIxNiwgMjA0LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIDIyMywgOTksIDIsIDIxOCwgMjQsIAotICAgIDEwOSwgNTMsIDE3LCA5LCAyNywgMTA5LCAyMzEsIDE5OCwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAyMjAsIAotICAgIDk2LCAyLCAyNDgsIDE5MSwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjM0LCAyMTAsIDUzLCAxNywgOSwgMjcsIDIyMCwgCi0gICAgOTYsIDIsIDI0NCwgMTc0LCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyNDgsIDE5MywgNTMsIDE3LCA5LCAyNywgMjIwLCAKLSAgICA5NiwgMiwgMjM0LCAyMTIsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgCi0gICAgNzcsIDIsIDE4MiwgNzIsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTAsIDEwOSwgCi0gICAgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgCi0gICAgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAotICAgIDc3LCAyLCAxODIsIDcyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgCi0gICAgMjUyLCA2MywgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTIsIAotICAgIDYzLCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKLSAgICAyNTIsIDYzLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAotICAgIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIyOCwgCi0gICAgNjgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAKLSAgICA3NywgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMTAsIAotICAgIDEwOSwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjI4LCA2OCwgCi0gICAgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAKLSAgICA3NywgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAKLSAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgCi0gICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTA5LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgMTA5LCAKLSAgICA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgMjMxLCAxOTgsIAotICAgIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgNDAsIDE3LCA5LCAKLSAgICAyNywgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA3NywgNDAsIDE3LCAKLSAgICA5LCAyNywgNjYsIDIsIDEwOSwgNDAsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKLSAgICAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCi0gICAgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEwOSwgCi0gICAgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMDksIDIzMSwgMTk4LCAyLCAKLSAgICAyMTgsIDI0LCAxMDksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjEwLCAKLSAgICAxMDksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIyOCwgNjgsIDQwLCAxNywgOSwgCi0gICAgMjcsIDc3LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAKLSAgICAxODIsIDcyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIAotICAgIDc3LCAyLCAxODIsIDcyLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA2NSwgCi0gICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDE1MSwgCi0gICAgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyMzQsIDEzNiwgNjUsIAotICAgIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIAotICAgIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxNywgCi0gICAgOSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgCi0gICAgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMTUxLCAyLCAxMjIsIDY1LCAKLSAgICAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAxMjIsIDIsIAotICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAKLSAgICAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMjIsIDY1LCAxNywgOSwgCi0gICAgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKLSAgICAyMjIsIDI5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjIsIAotICAgIDI5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIAotICAgIDEyMiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgCi0gICAgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjEwLCAxMTIsIDIsIDY2LCA2NSwgCi0gICAgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIDY1LCAxNywgOSwgCi0gICAgMjcsIDI0MiwgMjUyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAKLSAgICAxNTEsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIAotICAgIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDEyMiwgCi0gICAgNjUsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTUxLCA2NSwgMTcsIDksIAotICAgIDI3LCAyMzUsIDEsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgCi0gICAgMjM1LCAxLCAyLCAyMzMsIDEwOSwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAKLSAgICAxMDksIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAotICAgIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKLSAgICAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIAotICAgIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMzQsIAotICAgIDEzNiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDI0MSwgMjI2LCAKLSAgICA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDY1LCAxNywgCi0gICAgOSwgMjcsIDI0MSwgMjI2LCAyLCAyMTgsIDI0LCAxMDksIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxNTEsIDY1LCAxNywgOSwgCi0gICAgMjcsIDc3LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDksIDI3LCA3NywgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgCi0gICAgMTQ3LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIAotICAgIDY2LCAxNDcsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAKLSAgICAxNDcsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgCi0gICAgMTQ3LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgCi0gICAgMTQ3LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAKLSAgICAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgCi0gICAgMTA5LCAxNDcsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMTQ3LCAKLSAgICAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIAotICAgIDksIDI3LCA3NywgMiwgNjYsIDE0NywgMTcsIDksIDI3LCA3NywgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjAsIAotICAgIDk2LCAyLCAyNDQsIDE3NCwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDI0OCwgMTkzLCAxNDcsIDE3LCA5LCAyNywgCi0gICAgMjIwLCA5NiwgMiwgMjM0LCAyMTIsIDE0NywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAotICAgIDksIDI3LCAyMTcsIDgyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCi0gICAgOSwgMjcsIDI1NCwgMjA2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAKLSAgICAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEwOSwgMjMxLCAxOTgsIAotICAgIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTA5LCAyMzEsIDE5OCwgCi0gICAgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIAotICAgIDE3LCA5LCAyNywgMTIyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIAotICAgIDI3LCAxNTEsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCi0gICAgMjM0LCAxMzYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKLSAgICAyMjIsIDI5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAotICAgIDI0OCwgMjI1LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAKLSAgICAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAKLSAgICA2NiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjIzLCA5OSwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIyMywgCi0gICAgOTksIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIyMywgOTksIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMjMsIAotICAgIDk5LCA1MywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAKLSAgICA3NywgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAKLSAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0MiwgCi0gICAgMjUyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAotICAgIDIyMSwgMTY5LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCi0gICAgMjIwLCA2MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTIyLCAKLSAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDc3LCAKLSAgICA0MCwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIAotICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAKLSAgICA3NywgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAKLSAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIAotICAgIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgNDAsIAotICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIyMywgOTksIDQwLCAKLSAgICAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMjMsIDk5LCA0MCwgCi0gICAgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgNjUsIDE3LCA5LCAKLSAgICAyNywgMjIwLCA2MiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKLSAgICAyMjEsIDE2OSwgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIAotICAgIDI3LCAyMTcsIDgyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgMTQ3LCAxNywgOSwgMjcsIDIyMSwgCi0gICAgMTY5LCAyLCAxMjIsIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDE0NywgMTcsIDksIDI3LCAyMjAsIAotICAgIDYyLCAyLCAxNTEsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAKLSAgICAyMzQsIDEzNiwgMTQ3LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgMjEwLCAxMTIsIDIsIAotICAgIDY2LCAxNDcsIDE3LCA5LCAyNywgMTA5LCAyLCAyNDQsIDE3MiwgNDAsIDE3LCA5LCAyNywgMTA5LCAyLCAyNDQsIDE3MiwgCi0gICAgNTMsIDE3LCAyMjYsIDE1MCwgNDMsIDIyNiwgNywgMjI2LCAxNTAsIDQ0LCAyMjYsIDcsIDksIDI3LCAyMTcsIDksIDIsIAotICAgIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCAyLCAxNTEsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgCi0gICAgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCAKLSAgICA5LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAKLSAgICAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIAotICAgIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgOSwgMjcsIDEyMiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCAKLSAgICA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIAotICAgIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCi0gICAgMjIxLCAxNjksIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCA2NiwgCi0gICAgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCAyLCAKLSAgICAxMjIsIDQwLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAKLSAgICA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIAotICAgIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgCi0gICAgNjIsIDIsIDY2LCAyLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDIzNCwgMTM2LCA2NSwgCi0gICAgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCA2NiwgCi0gICAgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ4LCAKLSAgICAyMjUsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIAotICAgIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDEyMiwgCi0gICAgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgCi0gICAgNzcsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgCi0gICAgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTQsIAotICAgIDIwNiwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgNjYsIDQwLCAKLSAgICAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgCi0gICAgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNDAsIDE3LCA5LCAKLSAgICAyNywgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDEyMiwgCi0gICAgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCAyLCAKLSAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKLSAgICAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDE1MSwgNjUsIDE3LCAKLSAgICA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDIsIAotICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgCi0gICAgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDY2LCAKLSAgICAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAKLSAgICAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIAotICAgIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgCi0gICAgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDI0MSwgCi0gICAgMjI2LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKLSAgICAyMjgsIDY4LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIAotICAgIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgCi0gICAgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjI4LCAKLSAgICA2OCwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIAotICAgIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAKLSAgICAyNywgMjUyLCA2MywgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgMiwgNzcsIAotICAgIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAotICAgIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgCi0gICAgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIAotICAgIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIAotICAgIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIAotICAgIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjIsIAotICAgIDI5LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAKLSAgICAyNDgsIDIyNSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgCi0gICAgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIAotICAgIDksIDI3LCA3NywgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCi0gICAgNjYsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAKLSAgICAyMjgsIDY4LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIAotICAgIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAyLCA3NywgNDAsIAotICAgIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgMTIyLCAKLSAgICA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAKLSAgICAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKLSAgICAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMTUxLCAKLSAgICAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDY2LCAyLCAKLSAgICAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNTIsIAotICAgIDYzLCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCi0gICAgMjU0LCAyMDYsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAKLSAgICAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCA3NywgCi0gICAgNDAsIDE3LCA5LCAyNywgMjIyLCA2LCAyMTQsIDEyOCwgMjUzLCAyNDYsIDIzNCwgMTAsIDIxOCwgMTMyLCA1LCA1MywgMTcsIAotICAgIDksIDI3LCAyMjQsIDgxLCAyMTQsIDEyOCwgMjUzLCAyNDYsIDIzNCwgMTAsIDIxOCwgMTMyLCA1LCA1MywgMTcsIDksIDI3LCAKLSAgICAyNTQsIDE2MiwgNTMsIDE3LCA5LCAyNywgMjU0LCAxOTIsIDUzLCAxNywgOSwgMjcsIDIzMCwgMTU4LCA1MywgMTcsIDksIAotICAgIDI3LCAyMjIsIDcsIDUzLCAxNywgOSwgMjcsIDIyMywgMTQ2LCA1MywgMTcsIDksIDI3LCAyNTQsIDE4MSwgNTMsIDE3LCA5LCAKLSAgICAyNywgMjEyLCA0OSwgNTMsIDE3LCA5LCAyNywgMjIyLCA2LCA1MywgMTcsIDksIDI3LCAyMjIsIDUsIDI1NCwgMTgxLCAyMTIsIAotICAgIDQ4LCA5LCAyNywgMjM1LCAxNDAsIDIyMywgMzcsIDUwLCA5LCAyNywgMjUxLCAyMzgsIDI1NCwgNDcsIDI1NCwgNDgsIDQ1LCAKLSAgICAyMjEsIDE1OCwgNDUsIDIyMSwgNDcsIDQ1LCAyMjAsIDIzNSwgNDUsIDIyMCwgMjI0LCA0NSwgMjIwLCAyMTMsIDQ1LCAyMjAsIAotICAgIDIwMiwgNDUsIDIyMCwgMTkxLCA0NSwgMjIwLCAxODAsIDQ1LCAyMjAsIDE2OSwgNDUsIDIyMSwgMTU3LCA0NSwgMjIxLCAKLSAgICAxNDYsIDQ1LCAyMjEsIDEzNSwgNDUsIDIyMSwgMTI0LCA0NSwgMjIxLCAxMTMsIDQ1LCAyMjEsIDEwMiwgNDUsIDIyMSwgOTEsIAotICAgIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDI0OSwgMjI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTAsIDI0OSwgCi0gICAgMjI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTAsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjI0LCAxOTcsIDI0NCwgCi0gICAgMjgsIDMxLCA2NywgMjQ5LCAyMzQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIyMCwgMTUyLCAyMjQsIDE5NywgMjQ0LCAKLSAgICAyOCwgMzEsIDY3LCAyNDUsIDM5LCA3OSwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjI0LCAxNiwgNzksIDIyNCwgCi0gICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCA3MSwgMjMzLCAyNiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAKLSAgICA0NCwgNzEsIDIzMywgMjYsIDI1MSwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMDMsIDI0NSwgMTcxLCAzOCwgCi0gICAgMjcsIDQzLCAyNDIsIDM0LCAzOCwgMjcsIDQ0LCAyNDIsIDM0LCAzOCwgNTIsIDIxNiwgOTAsIDQzLCAyNDIsIDM0LCAzOCwgCi0gICAgNTIsIDIxNiwgOTAsIDQ0LCAyNDIsIDM0LCAzOCwgMjMxLCAyMzgsIDQzLCAyNDIsIDM0LCAzOCwgMjMxLCAyMzgsIDQ0LCAKLSAgICAyNDIsIDM0LCAzOCwgMjQ5LCAyMDUsIDIzMSwgMjM3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTMsIDU5LCAyMzMsIAotICAgIDYyLCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCi0gICAgNjcsIDI0NSwgMTU5LCAyNDgsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTIxLCAyMzIsIDIxOSwgMjI0LCAKLSAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjEyLCAzMiwgMTIxLCAyMzIsIDIxOSwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgCi0gICAgNDMsIDIyNiwgNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDIyNiwgNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKLSAgICA2NywgNDMsIDI0OSwgMTA3LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyNDksIDEwNywgMTI3LCAyMjQsIAotICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCi0gICAgNjcsIDQ0LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDg1LCAyMzMsIDI2LCAKLSAgICAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA4NSwgMjMzLCAyNiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgCi0gICAgMzEsIDY3LCA0MywgNTIsIDI1NCwgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA1MiwgMjU0LCAKLSAgICAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDI1NCwgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIAotICAgIDI4LCAzMSwgNjcsIDQ0LCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgMjQ5LCAxNjksIAotICAgIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDI0OSwgMTY5LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCi0gICAgNjcsIDQzLCA3MSwgMjQ5LCAxNjksIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDcxLCAyNDksIDE2OSwgCi0gICAgMTI3LCAyMjAsIDEzMywgMjQ3LCAxMjgsIDcxLCAyMjAsIDEzMywgMjQ3LCAxMjgsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCi0gICAgNjcsIDQzLCA0MiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNDIsIDEyNywgMjQ4LCAxNjMsIDIyNiwgCi0gICAgMTIzLCAyNTAsIDE4MCwgMjI2LCAxMjMsIDIxMiwgMzIsIDIyNiwgMTIzLCA1MiwgMjEyLCAzMiwgMjI2LCAxMjMsIDI0OCwgCi0gICAgMTYzLCAxMjEsIDIzMiwgMjE5LCAyNTAsIDE4MCwgMTIxLCAyMzIsIDIxOSwgMjEyLCAzMiwgMTIxLCAyMzIsIDIxOSwgNCwgCi0gICAgMjQ5LCAyMjcsIDQsIDExMCwgMjQ5LCAyMjcsIDQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNCwgMjIwLCAxNTIsIDQsIDI0OSwgCi0gICAgMjM0LCA0LCAyMjQsIDE2LCA3OSwgNCwgMjQ1LCAzOSwgNzksIDQsIDI0NSwgMTY4LCAyNDgsIDE2NCwgNCwgNDMsIDIyNiwgCi0gICAgNywgNCwgNDQsIDIyNiwgNywgNCwgNDMsIDI0OSwgMTA3LCAxMjcsIDQsIDQ0LCAyNDksIDEwNywgMTI3LCA0LCA0MywgMjE2LCAKLSAgICA3LCAyMjAsIDU1LCAxMjcsIDQsIDQ0LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgNCwgNTQsIDUwLCA0LCAyNTQsIDEzNCwgNCwgCi0gICAgMjUzLCAyMjQsIDQsIDk2LCA1MCwgNCwgMjQwLCAxNzQsIDQsIDIzMywgMjEsIDUwLCA0LCAyNDIsIDEzNywgNTAsIDQsIAotICAgIDI0NSwgMTA2LCA1MCwgNCwgMjIzLCA1MywgMjE5LCA0OCwgNCwgMjQ3LCAxNDAsIDUwLCA0LCAyMjUsIDE4NSwgNTAsIDQsIAotICAgIDI0OSwgMjI1LCAyNTMsIDIxNCwgOSwgMjQ0LCAxNzIsIDUzLCAxNywgOSwgMjE3LCA0NSwgMiwgMjQ0LCAxNzIsIDQ4LCA5LCAKLSAgICAyNDgsIDE5MSwgNTMsIDE3LCA5LCAyMTcsIDc5LCAyNDQsIDksIDksIDIzNCwgMjEwLCA1MywgMTcsIDksIDI0NCwgMTc0LCAKLSAgICA1MywgMTcsIDksIDI0NCwgMTc0LCAxNDcsIDE3LCA5LCAyNDgsIDE5MywgNTMsIDE3LCA5LCAyNDgsIDE5MywgMTQ3LCAxNywgCi0gICAgOSwgMjM0LCAyMTIsIDUzLCAxNywgOSwgMjM0LCAyMTIsIDE0NywgMTcsIDksIDIyMCwgOTYsIDUzLCAxNywgOSwgMjIwLCAKLSAgICA5NiwgMTQ3LCAxNywgOSwgMjE4LCA0NywgNTMsIDE3LCA5LCAyMTgsIDQ3LCAxNDcsIDE3LCA5LCAxLCAxODIsIDUzLCAxNywgCi0gICAgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDUzLCAxNywgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDQwLCAxNywgCi0gICAgOSwgMSwgMTA5LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxLCAyMTIsIAotICAgIDMxLCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDIxMiwgMzEsIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgMTA5LCAyLCAKLSAgICAxODIsIDI1MiwgNTEsIDUzLCAxNywgOSwgMSwgMTA5LCAyLCAxODIsIDI1MiwgNTEsIDQwLCAxNywgOSwgMSwgNzcsIDIsIAotICAgIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDY1LCAKLSAgICAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDE0NywgMTcsIDksIDEsIDEwOSwgNTMsIDE3LCA5LCAxLCAxMDksIDQwLCAxNywgCi0gICAgOSwgMSwgMjUyLCA2MywgNTMsIDE3LCA5LCAxLCAyNTIsIDYzLCA0MCwgMTcsIDksIDEsIDI1MiwgNjMsIDY1LCAxNywgOSwgCi0gICAgMSwgMjUyLCA2MywgMTQ3LCAxNywgOSwgMSwgMjE3LCA5LCAyMzEsIDE3MCwgNTMsIDE3LCA5LCAxLCAyMTcsIDksIDIzMSwgCi0gICAgMTcwLCA0MCwgMTcsIDksIDEsIDIxNywgOSwgNTMsIDE3LCA5LCAxLCAyMTcsIDksIDQwLCAxNywgOSwgMSwgMjE3LCA5LCAKLSAgICA2NSwgMTcsIDksIDEsIDIxNywgOSwgMTQ3LCAxNywgOSwgMSwgMjE2LCAxOTQsIDUzLCAxNywgOSwgMSwgMjE2LCAxOTQsIAotICAgIDQwLCAxNywgOSwgMSwgMjE2LCAxOTQsIDY1LCAxNywgOSwgMSwgMjE2LCAxOTQsIDE0NywgMTcsIDksIDEsIDE1MSwgNTMsIAotICAgIDE3LCA5LCAxLCAxNTEsIDQwLCAxNywgOSwgMSwgMTUxLCA2NSwgMTcsIDksIDEsIDE1MSwgMTQ3LCAxNywgOSwgMSwgMTIyLCAKLSAgICA1MywgMTcsIDksIDEsIDEyMiwgNDAsIDE3LCA5LCAxLCAxMjIsIDY1LCAxNywgOSwgMSwgMTIyLCAxNDcsIDE3LCA5LCAxLCAKLSAgICAyMzQsIDEzNiwgNTMsIDE3LCA5LCAxLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAxLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAxLCAKLSAgICAyMzQsIDEzNiwgMTQ3LCAxNywgOSwgMSwgMjQ4LCAyMDQsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMDQsIDQwLCAxNywgOSwgMSwgCi0gICAgMjE2LCAyMDQsIDUzLCAxNywgOSwgMSwgMjE2LCAyMDQsIDQwLCAxNywgOSwgMSwgMjIzLCA5OSwgNTMsIDE3LCA5LCAxLCAKLSAgICAyMjMsIDk5LCA0MCwgMTcsIDksIDEsIDIxMCwgMTA5LCA1MywgMTcsIDksIDEsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDEsIAotICAgIDIyMSwgMTY5LCA1MywgMTcsIDksIDEsIDIyMSwgMTY5LCA0MCwgMTcsIDksIDEsIDIyMSwgMTY5LCA2NSwgMTcsIDksIDEsIAotICAgIDIyMSwgMTY5LCAxNDcsIDE3LCA5LCAxLCAyMjAsIDYyLCA1MywgMTcsIDksIDEsIDIyMCwgNjIsIDQwLCAxNywgOSwgMSwgCi0gICAgMjIwLCA2MiwgNjUsIDE3LCA5LCAxLCAyMjAsIDYyLCAxNDcsIDE3LCA5LCAxLCAyMjIsIDI5LCA1MywgMTcsIDksIDEsIAotICAgIDIyMiwgMjksIDQwLCAxNywgOSwgMSwgMjIyLCAyOSwgNjUsIDE3LCA5LCAxLCAyMjIsIDI5LCAxNDcsIDE3LCA5LCAxLCAKLSAgICAyNDgsIDIyNSwgNTMsIDE3LCA5LCAxLCAyNDgsIDIyNSwgNDAsIDE3LCA5LCAxLCAyNDgsIDIyNSwgNjUsIDE3LCA5LCAxLCAKLSAgICAyNDgsIDIyNSwgMTQ3LCAxNywgOSwgMSwgMjE3LCA4MiwgNTMsIDE3LCA5LCAxLCAyMTcsIDgyLCA0MCwgMTcsIDksIDEsIAotICAgIDIxNywgODIsIDY1LCAxNywgOSwgMSwgMjE3LCA4MiwgMTQ3LCAxNywgOSwgMSwgMjEwLCAxMTIsIDUzLCAxNywgOSwgMSwgCi0gICAgMjEwLCAxMTIsIDQwLCAxNywgOSwgMSwgMjEwLCAxMTIsIDY1LCAxNywgOSwgMSwgMjEwLCAxMTIsIDE0NywgMTcsIDksIDEsIAotICAgIDI1NCwgMjA2LCA1MywgMTcsIDksIDEsIDI1NCwgMjA2LCA0MCwgMTcsIDksIDEsIDI1NCwgMjA2LCA2NSwgMTcsIDksIDEsIAotICAgIDI1NCwgMjA2LCAxNDcsIDE3LCA5LCAxLCAyNDIsIDI1MiwgNTMsIDE3LCA5LCAxLCAyNDIsIDI1MiwgNDAsIDE3LCA5LCAxLCAKLSAgICAyNDIsIDI1MiwgNjUsIDE3LCA5LCAxLCAyNDIsIDI1MiwgMTQ3LCAxNywgOSwgMSwgMjQ0LCAxNTEsIDUzLCAxNywgOSwgMSwgCi0gICAgMjQ0LCAxNTEsIDQwLCAxNywgOSwgMSwgMjQ0LCAxNTEsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNTEsIDE0NywgMTcsIDksIDEsIAotICAgIDIyNCwgODUsIDUzLCAxNywgOSwgMSwgMjI0LCA4NSwgNDAsIDE3LCA5LCAxLCAyMjQsIDg1LCA2NSwgMTcsIDksIDEsIDIyNCwgCi0gICAgODUsIDE0NywgMTcsIDksIDEsIDIzNSwgMSwgNTMsIDE3LCA5LCAxLCAyMzUsIDEsIDQwLCAxNywgOSwgMSwgMjM1LCAxLCAKLSAgICA2NSwgMTcsIDksIDEsIDIzNSwgMSwgMTQ3LCAxNywgOSwgMSwgMjMzLCAxMDksIDUzLCAxNywgOSwgMSwgMjMzLCAxMDksIAotICAgIDQwLCAxNywgOSwgMSwgMjMzLCAxMDksIDY1LCAxNywgOSwgMSwgMjMzLCAxMDksIDE0NywgMTcsIDksIDEsIDY2LCA1MywgCi0gICAgMTcsIDksIDEsIDY2LCA0MCwgMTcsIDksIDEsIDY2LCA2NSwgMTcsIDksIDEsIDY2LCAxNDcsIDE3LCA5LCAxLCAyMjgsIDY4LCAKLSAgICA1MywgMTcsIDksIDEsIDIyOCwgNjgsIDQwLCAxNywgOSwgMSwgMjI4LCA2OCwgNjUsIDE3LCA5LCAxLCAyMjgsIDY4LCAxNDcsIAotICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgNjUsIAotICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMSwgMjEyLCAzMSwgNTMsIDE3LCA5LCAxLCAyMTIsIDMxLCA0MCwgCi0gICAgMTcsIDksIDEsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMSwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAxLCA3NywgCi0gICAgNTMsIDE3LCA5LCAxLCA3NywgNDAsIDE3LCA5LCAxLCA3NywgNjUsIDE3LCA5LCAxLCA3NywgMTQ3LCAxNywgOSwgMjcsIAotICAgIDIzMywgMTA5LCAyLCAxMDksIDIsIDIzMSwgMjMzLCA3MiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgCi0gICAgMjMxLCAyMzMsIDcyLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDI3LCAKLSAgICAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIAotICAgIDI1MiwgNTEsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgMjUyLCA1MSwgNDAsIDE3LCA5LCAyNywgCi0gICAgMjMzLCAxMDksIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgNDAsIDE3LCAyMTAsIDg3LCAyMTEsIAotICAgIDI0NSwgMjI4LCA3OCwgMjE5LCAyMCwgMTI2LCAyNDUsIDM5LCA3OSwgMTI2LCAyMjQsIDEsIDc5LCAxMjYsIDU0LCA1MCwgCi0gICAgMTI2LCAyNDcsIDE0MCwgNTAsIDEyNiwgMjI1LCAxODUsIDUwLCAxMjYsIDI1NCwgMTM0LCAxMjYsIDI1NCwgNjUsIDEyNiwgCi0gICAgNDMsIDIyNiwgNywgMTI2LCA0NCwgMjI2LCA3LCAxMjYsIDI1MywgMjI0LCAxMjYsIDk2LCA1MCwgMTI2LCAyNDksIDIyNywgCi0gICAgMTI2LCAyNDAsIDE3NCwgMTI2LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDEyNiwgMjE5LCA0OCwgMTI2LCAyMSwgMjEwLCA4NiwgCi0gICAgMTI2LCAyMSwgMTExLCAxMjYsIDIxLCAxMDUsIDEyNiwgMjEsIDE1OCwgMTI2LCAyMSwgMTYxLCAxMjYsIDIxLCAxOTAsIAotICAgIDEyNiwgMjEsIDE5NSwgMTI2LCAyMSwgMTk5LCAxMjYsIDIxLCAxOTYsIDEyNiwgMjEsIDIwMSwgMTI2LCAyNDksIDIzNCwgCi0gICAgMTI2LCAyMjAsIDE1MiwgMTI2LCAyMzMsIDIxLCA1MCwgMTI2LCAyNDUsIDEwNiwgNTAsIDEyNiwgMjQyLCAxMzcsIDUwLCAKLSAgICAxMjYsIDIyNCwgMTYsIDc5LCAxMjYsIDI0OSwgMjI1LCAyNTMsIDIxNCwgMTI2LCA3LCA2LCAxLCA2MSwgMTI2LCA3LCA2LCAKLSAgICAxLCAyNTMsIDE2NiwgMTI2LCA3LCA2LCAxLCAyNTEsIDc0LCAxMjYsIDcsIDYsIDEsIDI0OSwgNjgsIDEyNiwgNywgNiwgMSwgCi0gICAgNzYsIDEyNiwgNywgNiwgMSwgMjQ1LCAxNCwgMTI2LCA3LCA2LCAxLCAyNDMsIDIwOSwgMTI2LCA3LCA2LCAxLCAyNDIsIDY3LCAKLSAgICAxMjYsIDcsIDYsIDEsIDc0LCAxMjYsIDcsIDYsIDEsIDIzNSwgMTUwLCAxMjYsIDcsIDYsIDEsIDIzNSwgMjksIDEyNiwgNywgCi0gICAgNiwgMSwgMTU2LCAxMjYsIDcsIDYsIDEsIDE5NCwgMTI2LCA3LCA2LCAxLCAyMzAsIDMwLCAxMjYsIDcsIDYsIDEsIDc4LCAKLSAgICAxMjYsIDcsIDYsIDEsIDIyNiwgMTA5LCAxMjYsIDcsIDYsIDEsIDIyNCwgOTksIDEyNiwgNywgNiwgMSwgMTUzLCAxMjYsIDcsIAotICAgIDYsIDEsIDIyMiwgOTMsIDEyNiwgNywgNiwgMSwgMjE3LCAxNTMsIDEyNiwgNywgNiwgMSwgNjksIDEyNiwgNywgNiwgMSwgCi0gICAgMjE0LCAxMDUsIDEyNiwgNywgNiwgMSwgMjEyLCA5OCwgMTI2LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA2LCAxLCAKLSAgICAyMTEsIDExNywgMTI2LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI2LCA0MywgNDIsIDEyNywgMTI2LCAyMjMsIDUzLCAyMTksIAotICAgIDQ4LCAxMjYsIDQ0LCA0MiwgMTI3LCAxMjYsIDI1MCwgMzksIDI1NSwgMjMsIDEyNiwgMTIxLCAyMzIsIDIxOSwgMTI2LCAKLSAgICAyNDIsIDE0NCwgMjU1LCAyMywgMTI2LCA3LCA0LCAxLCA2MSwgMTI2LCA3LCA0LCAxLCAyNTMsIDE2NiwgMTI2LCA3LCA0LCAKLSAgICAxLCAyNTEsIDc0LCAxMjYsIDcsIDQsIDEsIDI0OSwgNjgsIDEyNiwgNywgNCwgMSwgNzYsIDEyNiwgNywgNCwgMSwgMjQ1LCAKLSAgICAxNCwgMTI2LCA3LCA0LCAxLCAyNDMsIDIwOSwgMTI2LCA3LCA0LCAxLCAyNDIsIDY3LCAxMjYsIDcsIDQsIDEsIDc0LCAxMjYsIAotICAgIDcsIDQsIDEsIDIzNSwgMTUwLCAxMjYsIDcsIDQsIDEsIDIzNSwgMjksIDEyNiwgNywgNCwgMSwgMTU2LCAxMjYsIDcsIDQsIAotICAgIDEsIDE5NCwgMTI2LCA3LCA0LCAxLCAyMzAsIDMwLCAxMjYsIDcsIDQsIDEsIDc4LCAxMjYsIDcsIDQsIDEsIDIyNiwgMTA5LCAKLSAgICAxMjYsIDcsIDQsIDEsIDIyNCwgOTksIDEyNiwgNywgNCwgMSwgMTUzLCAxMjYsIDcsIDQsIDEsIDIyMiwgOTMsIDEyNiwgNywgCi0gICAgNCwgMSwgMjE3LCAxNTMsIDEyNiwgNywgNCwgMSwgNjksIDEyNiwgNywgNCwgMSwgMjE0LCAxMDUsIDEyNiwgNywgNCwgMSwgCi0gICAgMjEyLCA5OCwgMTI2LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA0LCAxLCAyMTEsIDExNywgMTI2LCA3LCA0LCAxLCAKLSAgICAyMTAsIDE1OSwgMTI2LCA0MywgMjQ5LCAxMDcsIDEyNywgMTI2LCA2NywgMjMyLCAyMTksIDEyNiwgNDQsIDI0OSwgMTA3LCAKLSAgICAxMjcsIDEyNiwgMTg0LCAxMjYsIDQzLCA3MSwgMjI2LCA3LCAxMjYsIDQ0LCA3MSwgMjI2LCA3LCAxMDEsIDExMCwgMjQzLCAKLSAgICAyMzYsIDIxOCwgMTMxLCAxMDEsIDQzLCAyNDksIDE2OSwgMTI3LCAxMDEsIDQ0LCAyNDksIDE2OSwgMTI3LCAxMDEsIDExMCwgCi0gICAgMjQ5LCAyMjcsIDEwMSwgNTYsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMTAxLCA1NiwgMSwgMjExLCAyMjcsIDEwMSwgNTYsIDEsIAotICAgIDQsIDYxLCAxMDEsIDU2LCAxLCA0LCA3NCwgMTAxLCA1NiwgMSwgNCwgNjksIDEwMSwgNTYsIDEsIDQsIDc2LCAxMDEsIDU2LCAKLSAgICAxLCA0LCA3OCwgMTAxLCA1NiwgMSwgNCwgMTkyLCAxMDEsIDU2LCAxLCA0LCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgNCwgCi0gICAgMjEwLCAyNDQsIDEwMSwgNTYsIDEsIDQsIDIxNSwgMTE5LCAxMDEsIDIzNCwgMjA3LCAyMjQsIDE3NiwgMjE5LCAzMywgNzksIAotICAgIDEwMSwgNTYsIDEsIDYxLCAxMDEsIDU2LCAxLCA3NCwgMTAxLCA1NiwgMSwgNjksIDEwMSwgNTYsIDEsIDc2LCAxMDEsIDU2LCAKLSAgICAxLCA3OCwgMTAxLCA1NiwgMSwgMTc2LCAxMDEsIDU2LCAxLCAyMzQsIDk4LCAxMDEsIDU2LCAxLCAyMzMsIDIyMywgMTAxLCAKLSAgICA1NiwgMSwgMjM0LCAxODgsIDEwMSwgNTYsIDEsIDIzNCwgMzQsIDEwMSwgNTYsIDEsIDIwNiwgMTAxLCA1NiwgMSwgMjE5LCAKLSAgICAxOTMsIDEwMSwgNTYsIDEsIDIxOCwgODQsIDEwMSwgNTYsIDEsIDIyMSwgMTgzLCAxMDEsIDU2LCAxLCAyMTksIDYwLCAxMDEsIAotICAgIDU2LCAxLCAyMTcsIDEwNiwgMTAxLCA1NiwgMSwgMjE2LCAxMTgsIDEwMSwgNTYsIDEsIDIxNSwgMTE5LCAxMDEsIDU2LCAxLCAKLSAgICAyMTcsIDIzLCAxMDEsIDU2LCAxLCAxMTIsIDEwMSwgNTYsIDEsIDE5OCwgMTAxLCA1NiwgMSwgMjI4LCAyMzgsIDEwMSwgNTYsIAotICAgIDEsIDIyNywgMjQyLCAxMDEsIDU2LCAxLCAyMjksIDExMiwgMTAxLCA1NiwgMSwgMjI4LCA3OSwgMTAxLCA1NiwgMSwgMTYyLCAKLSAgICAxMDEsIDU2LCAxLCAyNDEsIDE4NywgMTAxLCA1NiwgMSwgMjQwLCAyMjksIDEwMSwgNTYsIDEsIDI0MSwgMjQ1LCAxMDEsIAotICAgIDU2LCAxLCAyNDEsIDc1LCAxMDEsIDU2LCAxLCAxODYsIDEwMSwgNTYsIDEsIDIzMCwgMjM1LCAxMDEsIDU2LCAxLCAyMzAsIAotICAgIDEwNywgMTAxLCA1NiwgMSwgMjMxLCA5NiwgMTAxLCA1NiwgMSwgMjMwLCAxNjYsIDEwMSwgNTYsIDEsIDE5MiwgMTAxLCA1NiwgCi0gICAgMSwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCAyMDUsIDEwMSwgNTYsIDEsIDIyMywgMzgsIAotICAgIDEwMSwgNTYsIDEsIDIyMiwgMTQyLCAxMDEsIDU2LCAxLCAyMjMsIDEzMSwgMTAxLCA1NiwgMSwgMjIyLCAyMTMsIDEwMSwgCi0gICAgNTYsIDEsIDIxMiwgNjUsIDEwMSwgNTYsIDEsIDIzMCwgMzAsIDEwMSwgNTYsIDIxMywgMTM1LCAyMTksIDMzLCA3OSwgMTAxLCAKLSAgICA1NiwgMjIwLCAxNTcsIDIxOSwgMzMsIDc5LCAxMDEsIDI0LCAyNDQsIDExMSwgMTAxLCAyNCwgMSwgMjM0LCA2NCwgMTAxLCAKLSAgICAyNCwgMSwgMjE4LCAyMTcsIDEwMSwgMjQsIDEsIDIzNCwgNTcsIDEwMSwgMjQsIDEsIDIyOCwgMjMxLCAxMDEsIDI0LCAxLCAKLSAgICAyMjgsIDIyOSwgMTAxLCAyNCwgMSwgMjI4LCAyMjgsIDEwMSwgMjQsIDEsIDIxNiwgMTAyLCAxMDEsIDI0LCAxLCAyMTgsIAotICAgIDIwNiwgMTAxLCAyNCwgMSwgMjIzLCAyOSwgMTAxLCAyNCwgMSwgMjIzLCAyNCwgMTAxLCAyNCwgMSwgMjIzLCAyMSwgMTAxLCAKLSAgICAyNCwgMSwgMjIzLCAxNCwgMTAxLCAyNCwgMSwgMjIzLCA5LCAxMDEsIDI0LCAxLCAyMjMsIDQsIDEwMSwgMjQsIDEsIDIyMywgCi0gICAgMTUsIDEwMSwgMjQsIDEsIDIyMywgMjcsIDEwMSwgMjQsIDEsIDIzMCwgMjIyLCAxMDEsIDI0LCAxLCAyMjUsIDk4LCAxMDEsIAotICAgIDI0LCAxLCAyMTgsIDIxNCwgMTAxLCAyNCwgMSwgMjI1LCA4NywgMTAxLCAyNCwgMSwgMjE5LCAxNTAsIDEwMSwgMjQsIDEsIAotICAgIDIxOCwgMjExLCAxMDEsIDI0LCAxLCAyMzYsIDYzLCAxMDEsIDI0LCAxLCAyNTAsIDU0LCAxMDEsIDI0LCAxLCAyMTgsIDIyMSwgCi0gICAgMTAxLCAyNCwgMSwgMjUwLCAxMTQsIDEwMSwgMjQsIDEsIDIzNCwgMTE2LCAxMDEsIDI0LCAxLCAyMTYsIDE3NCwgMTAxLCAKLSAgICAyNCwgMSwgMjI1LCAxMzQsIDEwMSwgMjQsIDEsIDI0MSwgMTc5LCAxMDEsIDI0LCAxLCA2MSwgMTAxLCAyNCwgMSwgMjU0LCAKLSAgICAyNTIsIDEwMSwgMjQsIDEsIDE5MiwgMTAxLCAyNCwgMSwgMjExLCA5MiwgMTAxLCAyNCwgMSwgMjQ1LCAxMjUsIDEwMSwgMjQsIAotICAgIDEsIDc2LCAxMDEsIDI0LCAxLCAyMTEsIDM2LCAxMDEsIDI0LCAxLCAyMTEsIDQ3LCAxMDEsIDI0LCAxLCA3OCwgMTAxLCAyNCwgCi0gICAgMSwgMjEyLCA2NSwgMTAxLCAyNCwgMSwgMjEyLCA2MiwgMTAxLCAyNCwgMSwgMjI2LCAyMzgsIDEwMSwgMjQsIDEsIDIxMCwgCi0gICAgMjQ0LCAxMDEsIDI0LCAxLCA2OSwgMTAxLCAyNCwgMSwgMjEyLCAxMSwgMTAxLCAyNCwgMSwgMjEyLCAyMiwgMTAxLCAyNCwgCi0gICAgMSwgMjExLCAyNTAsIDEwMSwgMjQsIDEsIDIxMCwgMjEyLCAxMDEsIDI0LCAxLCAyNDUsIDYzLCAxMDEsIDI0LCAxLCAyMTEsIAotICAgIDgsIDEwMSwgMjQsIDEsIDc0LCAxMjYsIDI1MCwgMTg0LCA1MCwgMTI2LCAyMjQsIDIzMSwgNTAsIDEyNiwgMjI4LCA1NywgCi0gICAgNTAsIDEyNiwgMjMxLCAyMzcsIDEyNiwgMjUxLCAxNDMsIDEzMCwgMTI2LCAyMTEsIDQwLCA1MCwgMTI2LCAyMTEsIDIxNywgCi0gICAgNTAsIDEwMSwgMjQ0LCAyNiwgMTkzLCAyMTMsIDIzOSwgMTAxLCAxNDAsIDc1LCAxMDEsIDIxNCwgMTUzLCA3NSwgMTAxLCAKLSAgICA5NywgNzUsIDEwMSwgMjQ2LCAxMTIsIDc1LCAxMDEsIDg1LCAyMTgsIDIzNiwgMTAxLCA3MSwgMjUwLCA0MywgMjM1LCAyMTEsIAotICAgIDI1NCwgMTA3LCAyNTQsIDEyOCwgMjM1LCAyMTEsIDI1NCwgMTA3LCAyMjAsIDEzOSwgMjM1LCAyMTEsIDI1NCwgMTA3LCAKLSAgICAyMTYsIDIzNywgMjI2LCAyNTMsIDIyMywgNzUsIDI1MCwgMTUwLCAyMjMsIDc1LCAyNTAsIDE1MCwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDE1MCwgNjEsIDYyLCA1NywgMywgMjUzLCAxMTksIDc2LCA2MiwgNTcsIDMsIDI1MywgMTI4LCA3NCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDk2LCA3OCwgNjIsIDU3LCAzLCAyNTMsIDE0NiwgNjksIDYyLCA1NywgMywgMjUzLCAxNjUsIDI0OCwgMjI5LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTEyLCAyNDgsIDk4LCA2MiwgNTcsIDMsIDI1MywgMTUyLCAyNDgsIDExLCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTQyLCAyNDcsIDE1MywgNjIsIDU3LCAzLCAyNTMsIDEwNiwgMjQ2LCA4NiwgNjIsIDU3LCAzLCAyNTMsIDEwMCwgMjM1LCAKLSAgICAxNDcsIDYyLCA1NywgMywgMjUzLCAxMTEsIDIzNSwgMTMyLCA2MiwgNTcsIDMsIDI1MywgMTIxLCAyMzUsIDc0LCA2MiwgNTcsIAotICAgIDMsIDI1MywgOTIsIDIzNSwgNTcsIDYyLCA1NywgMywgMjUzLCA4MCwgMTc2LCA2MiwgNTcsIDMsIDI1MywgMTEzLCAyMzQsIAotICAgIDE4OCwgNjIsIDU3LCAzLCAyNTMsIDkwLCAyMzQsIDk4LCA2MiwgNTcsIDMsIDI1MywgODcsIDIzNCwgMzQsIDYyLCA1NywgMywgCi0gICAgMjUzLCA3NiwgMjMzLCAyMjMsIDYyLCA1NywgMywgMjUzLCA3NywgMTg2LCA2MiwgNTcsIDMsIDI1MywgMTQzLCAyMzEsIDk2LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgODQsIDIzMCwgMjM1LCA2MiwgNTcsIDMsIDI1MywgMTQxLCAyMzAsIDE2NiwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDEzMywgMjMwLCAxMDcsIDYyLCA1NywgMywgMjUzLCAxNTQsIDE5OCwgNjIsIDU3LCAzLCAyNTMsIDEzMiwgMjI5LCAKLSAgICAxMTIsIDYyLCA1NywgMywgMjUzLCAxMjYsIDIyOCwgMjM4LCA2MiwgNTcsIDMsIDI1MywgMTA1LCAyMjgsIDc5LCA2MiwgNTcsIAotICAgIDMsIDI1MywgMTAyLCAyMjcsIDI0MiwgNjIsIDU3LCAzLCAyNTMsIDE2MSwgMTkxLCA2MiwgNTcsIDMsIDI1MywgODUsIDIyNSwgCi0gICAgMjI0LCA2MiwgNTcsIDMsIDI1MywgMTE4LCAyMjUsIDExMSwgNjIsIDU3LCAzLCAyNTMsIDE0NSwgMjI1LCAxOSwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDEwNywgMjI0LCAxNTMsIDYyLCA1NywgMywgMjUzLCAxNDAsIDIyNCwgOTEsIDYyLCA1NywgMywgMjUzLCA3OSwgCi0gICAgMjI0LCA3MiwgNjIsIDU3LCAzLCAyNTMsIDEzNSwgMjI0LCA1NiwgNjIsIDU3LCAzLCAyNTMsIDEyNCwgMjI0LCA0NSwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDk3LCAyMDUsIDYyLCA1NywgMywgMjUzLCAxMjksIDIyMywgMTMxLCA2MiwgNTcsIDMsIDI1MywgMTA0LCAKLSAgICAyMjMsIDM4LCA2MiwgNTcsIDMsIDI1MywgMTYzLCAyMjIsIDIxMywgNjIsIDU3LCAzLCAyNTMsIDEzMCwgMjIyLCAxNDIsIAotICAgIDYyLCA1NywgMywgMjUzLCAxMjUsIDIwNiwgNjIsIDU3LCAzLCAyNTMsIDE0OCwgMjIxLCAxODMsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMTYsIDIxOSwgMTkzLCA2MiwgNTcsIDMsIDI1MywgMTQ0LCAyMTksIDYwLCA2MiwgNTcsIDMsIDI1MywgOTksIDIxOCwgODQsIAotICAgIDYyLCA1NywgMywgMjUzLCA5OCwgMjE3LCAxMDYsIDYyLCA1NywgMywgMjUzLCAxNTksIDIxNywgMjMsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxMjAsIDIxNiwgMTE4LCA2MiwgNTcsIDMsIDI1MywgMTU3LCAxMTIsIDYyLCA1NywgMywgMjUzLCA4OCwgMjE1LCAKLSAgICAxMTksIDYyLCA1NywgMywgMjUzLCAxMDMsIDIxMiwgNjUsIDYyLCA1NywgMywgMjUzLCA4MiwgMjEyLCAyMiwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDExNywgMjExLCAyNTAsIDYyLCA1NywgMywgMjUzLCAxMTUsIDIxMSwgMjI3LCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTM5LCAyMTAsIDExNiwgNjIsIDU3LCAzLCAyNTMsIDgzLCAyMTAsIDk0LCA2MiwgNTcsIDMsIDI1MywgMTM2LCAyMTAsIDIzLCAKLSAgICA2MiwgNTcsIDMsIDI1MywgMTMxLCAyNTUsIDg0LCA2MiwgNTcsIDMsIDI1MywgMTE0LCAyNTUsIDgzLCA2MiwgNTcsIDMsIAotICAgIDI1MywgNzMsIDI1MywgMjAwLCA2MiwgNTcsIDMsIDI1MywgODYsIDI0NiwgNTQsIDYyLCA1NywgMywgMjUzLCA2OSwgMjQ2LCAKLSAgICA1MywgNjIsIDU3LCAzLCAyNTMsIDEwOSwgMjI3LCAxNzgsIDYyLCA1NywgMywgMjUzLCAxMjcsIDIyNCwgMTUxLCA2MiwgNTcsIAotICAgIDMsIDI1MywgOTUsIDIyNCwgMTU1LCA2MiwgNTcsIDMsIDI1MywgODEsIDIyMywgMTg5LCA2MiwgNTcsIDMsIDI1MywgMTIzLCAKLSAgICAyMjMsIDE4OCwgNjIsIDU3LCAzLCAyNTMsIDg5LCAyMjIsIDIxMiwgNjIsIDU3LCAzLCAyNTMsIDkxLCAyMTcsIDEwMywgNjIsIAotICAgIDU3LCAzLCAyNTMsIDcxLCAyMTUsIDc4LCA2MiwgNTcsIDMsIDI1MywgNjgsIDEwNSwgNjIsIDU3LCAxNiwgMjUzLCAxMzgsIAotICAgIDYyLCA1NywgMTYsIDI1MywgMTM3LCA2MiwgNTcsIDE2LCAyNTMsIDEzNCwgNjIsIDU3LCAxNiwgMjUzLCAxMjIsIDYyLCA1NywgCi0gICAgMTYsIDI1MywgMTEwLCA2MiwgNTcsIDE2LCAyNTMsIDEwOCwgNjIsIDU3LCAxNiwgMjUzLCAxMDEsIDYyLCA1NywgMTYsIAotICAgIDI1MywgOTQsIDYyLCA1NywgMTYsIDI1MywgOTMsIDYyLCA1NywgMTYsIDI1MywgNzgsIDYyLCA1NywgMTYsIDI1MywgNzUsIAotICAgIDYyLCA1NywgMTYsIDI1MywgNzQsIDYyLCA1NywgMTYsIDI1MywgNzIsIDYyLCA1NywgMTYsIDI1MywgNzAsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDY3LCAyMzEsIDE5MCwgNjIsIDU3LCAxMDYsIDI1MywgNjYsIDIxMSwgMjIxLCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICA2NSwgMjQ4LCA4MiwgNjIsIDU3LCAxMDYsIDI1MywgNjQsIDI0NSwgMTAzLCA2MiwgNTcsIDEwNiwgMjUzLCA2MywgMjMxLCAKLSAgICAxNjQsIDYyLCA1NywgMTA2LCAyNTMsIDYyLCAyMTgsIDE2NCwgNjIsIDU3LCAxMDYsIDI1MywgNjEsIDI0NSwgNDUsIDYyLCAKLSAgICA1NywgMTA2LCAyNTMsIDYwLCAyMjMsIDE1NiwgNjIsIDU3LCAxMDYsIDI1MywgNTksIDIyMCwgNjQsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDU4LCAyNDEsIDI0NCwgNjIsIDU3LCAxMDYsIDI1MywgNTcsIDIxOSwgMjcsIDYyLCA1NywgMTA2LCAyNTMsIDU2LCAKLSAgICAyNTEsIDIxMSwgNjIsIDU3LCAxMDYsIDI1MywgNTUsIDI0OSwgMTUzLCA2MiwgNTcsIDEwNiwgMjUzLCA1NCwgMjUxLCAxMjMsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDUzLCAyMTIsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDUyLCAyNTIsIDE0NCwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgNTEsIDIyNiwgMjA5LCA2MiwgNTcsIDEwNiwgMjUzLCA1MCwgMjE5LCAwLCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICA0OSwgMjQ5LCA3NiwgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCA0OCwgMjM0LCAyMzAsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgCi0gICAgNDcsIDIzNCwgMjM4LCA2MiwgNTcsIDEwNiwgMjUzLCA0NiwgMjI2LCAyMjIsIDYyLCA1NywgMTA2LCAyNTMsIDQ1LCAyMTEsIAotICAgIDIzNiwgNjIsIDU3LCAxMDYsIDI1MywgNDQsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgNDMsIDI1NCwgMjUsIDYyLCA1NywgCi0gICAgMjMwLCAxNDcsIDI1MywgNDIsIDIzMSwgNTcsIDYyLCA1NywgMTA2LCAyNTMsIDQxLCAyNTEsIDE0MiwgNjIsIDU3LCAxMDYsIAotICAgIDI1MywgNDAsIDI0MiwgMTczLCA2MiwgNTcsIDEwNiwgMjUzLCAzOSwgNjIsIDU3LCAxMDYsIDI1MywgMzgsIDIxMSwgMjEyLCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCAzNywgNjIsIDU3LCAxMDYsIDI1MywgMzYsIDYyLCA1NywgMTA2LCAyNTMsIDM1LCAyNDAsIAotICAgIDI1NSwgNjIsIDU3LCAxMDYsIDI1MywgMzQsIDYyLCA1NywgMTA2LCAyNTMsIDMzLCA2MiwgNTcsIDEwNiwgMjUzLCAzMiwgCi0gICAgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCAzMCwgMjE1LCA5MiwgNjIsIDU3LCAxMDYsIDI1MywgMjksIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDI4LCA2MiwgNTcsIDEwNiwgMjUzLCAyNywgMjUwLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAyNiwgNjIsIDU3LCAxMDYsIAotICAgIDI1MywgMjUsIDYyLCA1NywgMTA2LCAyNTMsIDI0LCAyNDMsIDEwMCwgNjIsIDU3LCAxMDYsIDI1MywgMjMsIDI1NCwgMTIsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDIyLCA2MiwgNTcsIDEwNiwgMjUzLCAyMSwgNjIsIDU3LCAxMDYsIDI1MywgMjAsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDE5LCA2MiwgNTcsIDEwNiwgMjUzLCAxOCwgNjIsIDU3LCAxMDYsIDI1MywgMTcsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDE2LCA2MiwgNTcsIDEwNiwgMjUzLCAxNSwgNjIsIDU3LCAxMDYsIDI1MywgMTQsIDYyLCA1NywgMTA2LCAyNTMsIAotICAgIDEzLCAyMzAsIDEzOSwgNjIsIDU3LCAxMDYsIDI1MywgMTIsIDYyLCA1NywgMTA2LCAyNTMsIDExLCAyMTUsIDIzNiwgNjIsIAotICAgIDU3LCAxMDYsIDI1MywgMTAsIDYyLCA1NywgMTA2LCAyNTMsIDksIDYyLCA1NywgMTA2LCAyNTMsIDgsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDcsIDYyLCA1NywgMTA2LCAyNTMsIDYsIDYyLCA1NywgMTA2LCAyNTMsIDUsIDYyLCA1NywgMTA2LCAyNTMsIDQsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDMsIDYyLCA1NywgMTA2LCAyNTMsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDEsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDAsIDYyLCA1NywgMTA2LCAyNTIsIDI1NSwgMjQxLCAyMTgsIDYyLCA1NywgMTA2LCAyNTIsIDIzNCwgMjQ0LCAKLSAgICAzNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjMxLCAyNTIsIDEyNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjI2LCAyMTksIDcsIDYyLCAKLSAgICA1NywgMTA2LCAyNTIsIDIyNSwgNzUsIDYyLCA1NywgMTA2LCAyNTIsIDIyNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjIzLCAyMTcsIAotICAgIDIzNywgNjIsIDU3LCAxMDYsIDI1MiwgMjIyLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjEsIDYyLCA1NywgMTA2LCAyNTIsIDIyMCwgCi0gICAgMjExLCAyNTQsIDI1MCwgMTQ3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTksIDI1MCwgMTQ3LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMTgsIDI1MCwgMTQ4LCAyNDQsIDcsIDYyLCA1NywgMTA2LCAyNTIsIDIxNywgMjEyLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAyMTYsIDYyLCA1NywgMTA2LCAyNTIsIDIxNSwgNjIsIDU3LCAyMzAsIDE0NywgMjUyLCAyMTQsIDI0NywgMjA2LCA2MiwgNTcsIAotICAgIDEwNiwgMjUyLCAyMTMsIDYyLCA1NywgMTA2LCAyNTIsIDIxMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjEwLCA2MiwgNTcsIDEwNiwgCi0gICAgMjUyLCAyMDksIDYyLCA1NywgMTA2LCAyNTIsIDIwOCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA3LCAyNDgsIDE2NywgNjIsIDU3LCAKLSAgICAxMDYsIDI1MiwgMjA2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDUsIDYyLCA1NywgMTA2LCAyNTIsIDIwNCwgNjIsIDU3LCAxMDYsIAotICAgIDI1MiwgMjAzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMDIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUzLCAzMSwgNjIsIDU3LCAKLSAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDI1NCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI1MywgNjIsIDU3LCAxMDYsIAotICAgIDIxMywgMTg2LCAyNTIsIDI1MiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI1MSwgNjIsIDU3LCAxMDYsIDIxMywgCi0gICAgMTg2LCAyNTIsIDI1MCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0OSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKLSAgICAyNTIsIDI0OCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAotICAgIDI0NiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NCwgCi0gICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MiwgNjIsIDU3LCAKLSAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MCwgNjIsIDU3LCAxMDYsIAotICAgIDIxMywgMTg2LCAyNTIsIDIzOSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzOCwgNjIsIDU3LCAxMDYsIDIxMywgCi0gICAgMTg2LCAyNTIsIDIzNywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKLSAgICAyNTIsIDIzNSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAotICAgIDIzMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyOSwgCi0gICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyOCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNywgNjIsIDU3LCAKLSAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDIxMSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIwMSwgMjU0LCAyNDUsIDIxMSwgCi0gICAgMjA5LCAyMjAsIDE0MCwgMjMyLCAyMTksIDI1NCwgMjQ1LCAyMTEsIDIwOSwgMjIwLCAxNDAsIDI0NywgMTI4LCAyNTQsIAotICAgIDI0NSwgMjUwLCAxMzgsIDc5LCAyNTQsIDI0NSwgNTQsIDExMSwgMjU0LCAyNDUsIDU0LCAxMDUsIDI1NCwgMjQ1LCA1NCwgCi0gICAgMTU4LCAyNTQsIDI0NSwgNTQsIDE2MSwgMjU0LCAyNDUsIDU0LCAxOTAsIDI1NCwgMjQ1LCA1NCwgMTk1LCAyNTQsIDI0NSwgCi0gICAgNTQsIDE5OSwgMjU0LCAyNDUsIDU0LCAxOTYsIDI1NCwgMjQ1LCA1NCwgMjAxLCAyNTQsIDI0NSwgNTQsIDIxNiwgMjQ4LCAKLSAgICAyNTQsIDI0NSwgNTQsIDIxNSwgNzMsIDI1NCwgMjQ1LCA1NCwgMjE2LCAxNjMsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAyMywgCi0gICAgMjU0LCAyNDUsIDU0LCAyNDQsIDEyMiwgMjU0LCAyNDUsIDU0LCAyMTksIDExMywgMjU0LCAyNDUsIDU0LCAyMjAsIDExOCwgCi0gICAgMjU0LCAyNDUsIDU0LCAyNDUsIDE5MiwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwMCwgMjU0LCAyNDUsIDU0LCAxMjMsIDI0MCwgCi0gICAgMjE3LCAyNTQsIDI0NSwgNTQsIDExMywgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMTM0LCAyNDAsIDIxNywgMjU0LCAyNDUsIAotICAgIDU0LCAyNDQsIDE5LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyNDQsIDg5LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAKLSAgICAyMTksIDEyNywgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMjQsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDI0NSwgCi0gICAgMjAxLCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyMjgsIDIwNSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMTIzLCAyMTYsIAotICAgIDE0OCwgMjU0LCAyNDUsIDU0LCAxMTMsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDEzNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCAKLSAgICA1NCwgMjQ0LCAxOSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCA4OSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgCi0gICAgMjE5LCAxMjcsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTI0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDUsIAotICAgIDIwMSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDUsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIxNiwgMjQ5LCAKLSAgICAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTUsIDc0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTYsIDE2NCwgMjE2LCAKLSAgICAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAyNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAxMjMsIDIxNiwgMTQ4LCAKLSAgICAyNTQsIDI0NSwgNTQsIDIxOSwgMTE0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjAsIDExOSwgMjE2LCAxNDgsIDI1NCwgCi0gICAgMjQ1LCA1NCwgMjQ1LCAxOTMsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjAxLCAyMTYsIDE0OCwgMjU0LCAyNDUsIAotICAgIDIxMiwgMTQsIDI1MiwgMTM2LCAyMTQsIDE3MywgMjU0LCAyNDUsIDIxMiwgMTQsIDI0NCwgMTAwLCAyMTgsIDYwLCAyNTQsIAotICAgIDI0NSwgMjEyLCAxNCwgMjIxLCAxNzgsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMTIsIDE0LCAyMTYsIDE3MCwgMjE4LCA2MCwgCi0gICAgMjU0LCAyNDUsIDIxMiwgMTQsIDI0NCwgMTIsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyNDYsIDg5LCAyMzEsIDk1LCAyNDQsIAotICAgIDEwMCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIzMiwgMjA1LCAyMzEsIDk1LCAyNDQsIDEwMCwgMjE4LCA2MCwgMjU0LCAyNDUsIAotICAgIDIzMSwgOTUsIDIyMSwgMTc4LCAyMTgsIDYwLCAyNTQsIDI0NSwgMjMxLCA5NSwgMjE2LCAxNzAsIDIxOCwgNjAsIDI2LCAKLSAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyMjQsIDI0LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjQyLCAzNCwgMjYsIAotICAgIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0NiwgMTA4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDE5MCwgMjYsIDI1NSwgCi0gICAgMTUsIDI1MywgMjAyLCAyNDQsIDEyMiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIAotICAgIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyMTYsIDE0OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgCi0gICAgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAKLSAgICAyMTYsIDI0OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIAotICAgIDI1MywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDI0MCwgCi0gICAgMjE4LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjE2LCAxNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAKLSAgICAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgCi0gICAgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjE2LCAyNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAKLSAgICAyMDIsIDI0NCwgMTIzLCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTgsIDE1MiwgCi0gICAgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxOCwgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIAotICAgIDIwMiwgMTIzLCAyMTYsIDE0OSwgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjE2LCAyNDksIDIxNiwgMTQ5LCAKLSAgICAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgMjE2LCAxNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAKLSAgICAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMzAsIDE2OSwgMjYsIDI1NSwgMTUsIDI0MSwgMjEyLCAxMjMsIDIyNSwgMzQsIAotICAgIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMTExLCAyNiwgMjU1LCAxNSwgMjQxLCAyMDgsIDExMSwgMjYsIDI1NSwgMTUsIDI0NSwgCi0gICAgMTEyLCAxMDUsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMTA1LCAyNiwgMjU1LCAxNSwgMjQ5LCA3MywgMTEzLCAyNDYsIAotICAgIDEwNywgMjYsIDI1NSwgMTUsIDI0NSwgMTEyLCAxMTMsIDI0NiwgMTA3LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDE5MCwgCi0gICAgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyMTYsIDI0OSwgMjU0LCAKLSAgICAxNDksIDE3LCAyNiwgMjU1LCAxNSwgMjQxLCAyMDgsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjMxLCA0NiwgMjE2LCAyNDgsIAotICAgIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjE2LCAxNjMsIDI2LCAKLSAgICAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCAxMjMsIDI1NCwgMTQ5LCAKLSAgICAxNywgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAyNDQsIDEyMiwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyNDQsIDEyMiwgMjYsIAotICAgIDI1NSwgMTUsIDIxNiwgMTgyLCAxMjMsIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDEzNCwgMjQwLCAyMTcsIAotICAgIDI2LCAyNTUsIDE1LCAyNDUsIDExMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCA4OSwgCi0gICAgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyNTAsIAotICAgIDIzNSwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMjksIDE4NywgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAKLSAgICAyNTUsIDE1LCAyMTYsIDE4MiwgMTIzLCAyMTYsIDE0OCwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyNDQsIDg5LCAyMTYsIAotICAgIDE0OCwgMjYsIDI1NSwgMTUsIDI0OCwgNjUsIDI0NCwgODksIDIzMCwgMTY5LCAyNiwgMjU1LCAxNSwgMjE4LCAxMjAsIDI0NCwgCi0gICAgMTIzLCAyMzAsIDE2OSwgMjYsIDEyMywgMTYzLCA1MCwgMjYsIDEyMywgMTYzLCA1LCAyNTQsIDE0OSwgMTcsIDI2LCAxMTMsIAotICAgIDIxNiwgMTY4LCA1MCwgMjYsIDEzNCwgMjI0LCAyMywgNTAsIDI2LCAyMTEsIDQ1LCA1MCwgMjYsIDIxNywgNjksIDUwLCAyNiwgCi0gICAgMjQ2LCAxMDksIDUwLCAyNiwgMjI2LCAyNTAsIDUwLCAyNiwgMTEzLCAyMjYsIDI0OSwgNTAsIDI2LCAxMzQsIDIyNiwgMjQ5LCAKLSAgICA1MCwgMjYsIDI0NCwgMTksIDIyNiwgMjQ5LCA1MCwgMjYsIDI0NCwgODksIDIyNiwgMjQ5LCA1MCwgMjYsIDIzMSwgNDAsIAotICAgIDUwLCAyNiwgMjMzLCAxNjMsIDI1MiwgMTM2LCA1MCwgMjYsIDIzMiwgMjAwLCA1MCwgMjYsIDIyNiwgMTM1LCA1MCwgMjYsIAotICAgIDIxMSwgMTU5LCA1MCwgMjYsIDI1MywgMjUxLCA1MCwgMjYsIDI1NCwgOCwgNTAsIDI2LCAyNDIsIDE1MSwgNTAsIDI2LCAKLSAgICAyMTUsIDE4NywgMjUyLCAxMzYsIDUwLCAyNiwgMjEwLCA4NywgNTAsIDIyMiwgMjAwLCAyMjAsIDExNSwgNTAsIDIyMiwgCi0gICAgMjAwLCAyMTQsIDE4NSwgNTAsIDIyMiwgMjAwLCAyMjAsIDE0NCwgNTAsIDIyMiwgMjAwLCAyMjAsIDExMywgNTAsIDIyMiwgCi0gICAgMjAwLCAyNDcsIDIyMSwgMjIwLCAxMTMsIDUwLCAyMjIsIDIwMCwgMjE5LCAxNzAsIDUwLCAyMjIsIDIwMCwgMjQ4LCA2MSwgCi0gICAgNTAsIDIyMiwgMjAwLCAyMjQsIDksIDUwLCAyMjIsIDIwMCwgMjIwLCAxMzEsIDUwLCAyMjIsIDIwMCwgMjQ2LCA2OCwgNTAsIAotICAgIDIyMiwgMjAwLCAyNTMsIDI0NiwgNTAsIDIyMiwgMjAwLCAyNTAsIDE3OSwgNTAsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCi0gICAgMjI1LCAyMTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjI1LCAyNywgMjQxLCAyNDIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgCi0gICAgNSwgMjE3LCA0NiwgMjQxLCAyNDIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUwLCAyNTUsIDIyNSwgMTQ2LCAyNDcsIAotICAgIDE5OSwgNSwgMjUwLCAxMDksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjExLCAyMjEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCi0gICAgMjQxLCAyMTgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQzLCA5MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTYsIAotICAgIDExNywgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCA3NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTEsIDE3NywgMjI1LCAKLSAgICAxNDYsIDI0NywgMTk5LCA1LCAyMjAsIDMxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjUyLCAyMjUsIDE0NiwgCi0gICAgMjQ3LCAxOTksIDUsIDIzMSwgMTg5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIzMSwgMTQxLCAyMjUsIDE0NiwgMjQ3LCAKLSAgICAxOTksIDUsIDIyMSwgMjE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIzMiwgMjQzLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAotICAgIDI1MSwgMTk2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjM5LCAyMjUsIDM4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIAotICAgIDUsIDI0NywgMTQxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjMxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxOSwgCi0gICAgODksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ5LCAyMzIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUyLCA3MSwgMjI1LCAKLSAgICAxNDYsIDI0NywgMTk5LCA1LCAyMjAsIDE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MCwgMjU1LCAyMjUsIDE0NiwgCi0gICAgMjQ3LCAxOTksIDUsIDI0MSwgMTg1LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MSwgMTIwLCAyMzMsIDQyLCAyMjUsIAotICAgIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjMyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyMywgMTU2LCAyMjUsIDE0NiwgCi0gICAgMjQ3LCAxOTksIDUsIDI0NSwgMjM4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0NiwgMTE1LCAyMjUsIDE0NiwgMjQ3LCAKLSAgICAxOTksIDUsIDIxNSwgMTA2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MiwgNzQsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCi0gICAgMjI1LCAzOSwgMjE1LCAyMzYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjEzLCAxNTksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgCi0gICAgNSwgMjI2LCAyMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjIsIDE5MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzIsIAotICAgIDIzMCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjYsIDExOSwgMjUyLCAxOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCi0gICAgMjQ0LCA1NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDIsIDE0NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTgsIAotICAgIDEyMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCA0LCAyNTMsIDE3NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTIsIDMyLCAKLSAgICAyNTIsIDE1NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAzOCwgMjI2LCAyNTIsIDkxLCAyMzIsIDY1LCAxLCA2MSwgMjMyLCAKLSAgICA2NSwgMSwgNzYsIDIzMiwgNjUsIDEsIDI1MywgMTY2LCAyMzIsIDY1LCAxLCAyNTIsIDI3LCAyMzIsIDY1LCAxLCAyNDMsIAotICAgIDIwOSwgMjMyLCA2NSwgMSwgMjQ5LCA2OCwgMjMyLCA2NSwgMSwgNzQsIDIzMiwgNjUsIDEsIDIxMiwgOTgsIDIzMiwgNjUsIAotICAgIDEsIDIxMCwgMTU5LCAyMzIsIDY1LCAxLCAyMTYsIDIxMSwgMjMyLCA2NSwgMSwgMjM1LCAxNTAsIDIzMiwgNjUsIDEsIDIzNSwgCi0gICAgMjksIDIzMiwgNjUsIDEsIDIyNCwgOTksIDIzMiwgNjUsIDEsIDE1NiwgMjMyLCA2NSwgMSwgMTk0LCAyMzIsIDY1LCAxLCAKLSAgICAyMzAsIDMwLCAyMzIsIDY1LCAxLCAyMzAsIDE3MSwgMjMyLCA2NSwgMSwgMjI4LCAxMTYsIDIzMiwgNjUsIDEsIDY5LCAyMzIsIAotICAgIDY1LCAxLCAyMjYsIDEwOSwgMjMyLCA2NSwgMSwgMjM0LCA1MywgMjMyLCA2NSwgMSwgMTUzLCAyMzIsIDY1LCAxLCAyMjIsIAotICAgIDkzLCAyMzIsIDY1LCAxLCAyMTcsIDE1MywgMjMyLCA2NSwgMSwgMjE1LCAxNjAsIDIzMiwgNjUsIDEsIDI1NCwgMTMxLCAKLSAgICAyMzIsIDY1LCAxLCAyNDUsIDE1OCwgMjMyLCA2NSwgMSwgMjQyLCA2NywgMjMyLCA2NSwgMSwgMjExLCAxNzgsIDI1MCwgCi0gICAgMjQ1LCAxLCA2MSwgMjUwLCAyNDUsIDEsIDIyNiwgOTUsIDI1MCwgMjQ1LCAxLCAyNDksIDY4LCAyNTAsIDI0NSwgMSwgMTU2LCAKLSAgICAyNTAsIDI0NSwgMSwgMjE0LCAxMTYsIDI1MCwgMjQ1LCAxLCAxNTMsIDI1MCwgMjQ1LCAxLCAyMzMsIDY4LCAyNTAsIDI0NSwgCi0gICAgMSwgMjU1LCA4NCwgMjUwLCAyNDUsIDEsIDIyNCwgOTksIDI1MCwgMjQ1LCAxLCAyNTMsIDE2NiwgMjUwLCAyNDUsIDEsIAotICAgIDE5NCwgMjUwLCAyNDUsIDEsIDc4LCAyNTAsIDI0NSwgMSwgMjQ4LCAyMzEsIDI1MCwgMjQ1LCAxLCAyMTcsIDE1MywgMjUwLCAKLSAgICAyNDUsIDEsIDIyMCwgMTA2LCAyNTAsIDI0NSwgMSwgMjIwLCAxMDUsIDI1MCwgMjQ1LCAxLCAyMjIsIDkzLCAyNTAsIDI0NSwgCi0gICAgMSwgMjUxLCA3MywgMjUwLCAyNDUsIDEsIDY5LCAyNTAsIDI0NSwgMSwgMjI4LCAxMTYsIDI1MCwgMjQ1LCAxLCAyMTEsIAotICAgIDE3OCwgMjUwLCAyNDUsIDEsIDIzMCwgMzAsIDI1MCwgMjQ1LCAxLCAyMTUsIDE1OSwgMjUwLCAyNDUsIDEsIDIyNiwgMTA5LCAKLSAgICAyNTAsIDI0NSwgMSwgMjE4LCAyMjgsIDI1MCwgMjQ1LCAxLCA3NCwgMjUwLCAyNDUsIDEsIDc2LCAyNTAsIDI0NSwgMSwgCi0gICAgMjE0LCAxMTMsIDI1MCwgMjQ1LCAxLCAyMzUsIDI5LCAyNTAsIDI0NSwgMSwgMjM1LCAyMCwgMjUwLCAyNDUsIDEsIDIyOSwgCi0gICAgMTU1LCAyNTAsIDI0NSwgMSwgMjE0LCAxMTgsIDI1MCwgMjQ1LCAxLCAyNDMsIDIwOSwgMjUwLCAyNDUsIDEsIDI0MywgMTQ0LCAKLSAgICAyNTAsIDI0NSwgMSwgMjE4LCAxNzAsIDI1MCwgMjQ1LCAxLCAyMTgsIDE2OSwgMjUwLCAyNDUsIDEsIDIyOSwgODQsIDI1MCwgCi0gICAgMjQ1LCAxLCAyMzYsIDQwLCAyNTAsIDI0NSwgMSwgMjUxLCA3MiwgMjUwLCAyNDUsIDEsIDIxNSwgMTYwLCAyNTAsIDI0NSwgCi0gICAgMSwgMjE0LCAxMTUsIDI1MCwgMjQ1LCAxLCAyMjIsIDE4MiwgMjUwLCAyNDUsIDEsIDIzMSwgMTM0LCAyNTAsIDI0NSwgMSwgCi0gICAgMjMxLCAxMzMsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzMiwgMjUwLCAyNDUsIDEsIDIzMSwgMTMxLCAyNTAsIDI0NSwgMSwgMjMzLCAKLSAgICA2NywgMjUwLCAyNDUsIDEsIDI0NSwgMjQyLCAyNTAsIDI0NSwgMSwgMjE0LCAxMTQsIDU1LCAzMiwgMSwgNjEsIDU1LCAzMiwgCi0gICAgMSwgMjUyLCA4MywgNTUsIDMyLCAxLCAyMzQsIDE4OCwgNTUsIDMyLCAxLCAyNDgsIDk4LCA1NSwgMzIsIDEsIDc2LCA1NSwgCi0gICAgMzIsIDEsIDIxMywgMjU1LCA1NSwgMzIsIDEsIDIxMCwgOTQsIDU1LCAzMiwgMSwgMjQxLCAyNDUsIDU1LCAzMiwgMSwgMjE2LCAKLSAgICAxOTYsIDU1LCAzMiwgMSwgNzQsIDU1LCAzMiwgMSwgMTc2LCA1NSwgMzIsIDEsIDI0NSwgMTgyLCA1NSwgMzIsIDEsIDI0NSwgCi0gICAgMTY3LCA1NSwgMzIsIDEsIDI0NSwgMTU4LCA1NSwgMzIsIDEsIDI0NSwgODMsIDU1LCAzMiwgMSwgNzgsIDU1LCAzMiwgMSwgCi0gICAgMjI1LCAyMjQsIDU1LCAzMiwgMSwgMjIwLCA2NSwgNTUsIDMyLCAxLCAyMzMsIDIyMywgNTUsIDMyLCAxLCAyNDUsIDEwMCwgCi0gICAgNTUsIDMyLCAxLCAyNDUsIDkwLCA1NSwgMzIsIDEsIDIxNywgMjMsIDU1LCAzMiwgMSwgNjksIDU1LCAzMiwgMSwgMjQ1LCAKLSAgICAxODUsIDU1LCAzMiwgMSwgMjI1LCAxMzksIDU1LCAzMiwgMSwgMjM0LCAxMjUsIDU1LCAzMiwgMSwgMjQ1LCAyMTAsIDU1LCAKLSAgICAzMiwgMSwgMjQ1LCA5MiwgNTUsIDMyLCAxLCAyNTAsIDEzOSwgNTUsIDMyLCAxLCAyMzYsIDQwLCA1NSwgMzIsIDEsIDIxNCwgCi0gICAgMTE4LCA1NSwgMzIsIDIyNywgMjAyLCAxMTEsIDU1LCAzMiwgMjI3LCAyMDIsIDE5MCwgNTUsIDMyLCAyMjcsIDIwMiwgMjE2LCAKLSAgICAyNDgsIDU1LCAzMiwgMjI3LCAyMDIsIDI0NCwgMTIyLCAyNDIsIDE2MCwgMSwgMjU0LCAyMTMsIDI0MiwgMTYwLCAxLCAyNTIsIAotICAgIDE3MSwgMjQyLCAxNjAsIDEsIDI0MiwgMjE4LCAyNDIsIDE2MCwgMSwgMjQ4LCAyMTIsIDI0MiwgMTYwLCAxLCAyNTQsIDIwOSwgCi0gICAgMjQyLCAxNjAsIDEsIDIyNCwgODIsIDI0MiwgMTYwLCAxLCAyMzUsIDE2MSwgMjQyLCAxNjAsIDEsIDI0MiwgNDYsIDI0MiwgCi0gICAgMTYwLCAxLCAyMTYsIDE1OSwgMjQyLCAxNjAsIDEsIDI0NSwgMTkxLCAyNDIsIDE2MCwgMSwgMjMzLCAxOTYsIDI0MiwgMTYwLCAKLSAgICAxLCAyMzMsIDExOSwgMjQyLCAxNjAsIDEsIDIzMSwgMTg0LCAyNDIsIDE2MCwgMSwgMjI5LCAxODksIDI0MiwgMTYwLCAxLCAKLSAgICAyMzUsIDEyNSwgMjQyLCAxNjAsIDEsIDIxNCwgMTM2LCAyNDIsIDE2MCwgMSwgMjI2LCA3MywgMjQyLCAxNjAsIDEsIDIyOCwgCi0gICAgMjAwLCAyNDIsIDE2MCwgMSwgMjIzLCAxNjgsIDI0MiwgMTYwLCAxLCAyMjEsIDIyMCwgMjQyLCAxNjAsIDEsIDIxNywgNSwgCi0gICAgMjQyLCAxNjAsIDEsIDIxMSwgMjM0LCAyNDIsIDE2MCwgMSwgMjQ0LCAxODYsIDI0MiwgMTYwLCAxLCAyMzYsIDQ0LCAyNDIsIAotICAgIDE2MCwgMSwgMjQwLCAyMDYsIDI0MiwgMTYwLCAxLCAyMjYsIDE0MywgMjQyLCAxNjAsIDEsIDIyOCwgMjA1LCAyNDAsIDIxNywgCi0gICAgMjE0LCAyMDksIDEsIDI1NCwgMTU1LCAyMTQsIDIwOSwgMSwgMjUyLCAzNCwgMjE0LCAyMDksIDEsIDI0MywgMTE1LCAyMTQsIAotICAgIDIwOSwgMSwgMjM0LCAxMzgsIDIxNCwgMjA5LCAxLCAyNDgsIDYyLCAyMTQsIDIwOSwgMSwgMjQxLCA3NSwgMjE0LCAyMDksIAotICAgIDEsIDIxMSwgMjI3LCAyMTQsIDIwOSwgMSwgMjEwLCA4NSwgMjE0LCAyMDksIDEsIDI0MCwgMjQ4LCAyMTQsIDIwOSwgMSwgCi0gICAgMjE2LCAyMzEsIDIxNCwgMjA5LCAxLCAyMTAsIDIzMywgMjE0LCAyMDksIDEsIDIzNSwgMCwgMjE0LCAyMDksIDEsIDIyMCwgCi0gICAgMjIsIDIxNCwgMjA5LCAxLCAyMzMsIDEwNCwgMjE0LCAyMDksIDEsIDIzMSwgNzAsIDIxNCwgMjA5LCAxLCAyNDgsIDI5LCAKLSAgICAyMTQsIDIwOSwgMSwgMjI3LCAxOTgsIDIxNCwgMjA5LCAxLCAyMTAsIDEzLCAyMTQsIDIwOSwgMSwgMjIxLCAyNTAsIDIxNCwgCi0gICAgMjA5LCAxLCAyNTQsIDIwNSwgMjE0LCAyMDksIDEsIDIyNCwgMTUzLCAyMTQsIDIwOSwgMSwgMjIyLCAyNywgMjE0LCAyMDksIAotICAgIDEsIDIyNCwgMzgsIDIxNCwgMjA5LCAxLCAyMjMsIDE0NywgMjE0LCAyMDksIDEsIDIxNiwgMjAwLCAyMTQsIDIwOSwgMSwgCi0gICAgMjQyLCAyNTEsIDIxNCwgMjA5LCAxLCAxMTIsIDIxNCwgMjA5LCAxLCA3NCwgMjE0LCAyMDksIDEsIDY5LCAyMTQsIDIwOSwgCi0gICAgMSwgMjE4LCAxODEsIDIxNCwgMjA5LCAyMTEsIDIwOSwgMjQ3LCAxODAsIDU1LCAyMjUsIDE3MiwgNSwgNjEsIDU1LCAyMjUsIAotICAgIDE3MiwgNSwgNzQsIDU1LCAyMjUsIDE3MiwgNSwgNjksIDU1LCAyMjUsIDE3MiwgNSwgMTc2LCA1NSwgMjI1LCAxNzIsIDUsIAotICAgIDIzMywgMjIzLCA1NSwgMjI1LCAxNzIsIDUsIDI0MywgMTQyLCA1NSwgMjI1LCAxNzIsIDUsIDI0MiwgMTIwLCA1NSwgMjI1LCAKLSAgICAxNzIsIDUsIDIxMSwgMTY1LCA1NSwgMjI1LCAxNzIsIDUsIDI1MSwgNDEsIDU1LCAyMjUsIDE3MiwgNSwgMjM1LCAxNDcsIAotICAgIDU1LCAyMjUsIDE3MiwgNSwgMjM1LCAxMTQsIDU1LCAyMjUsIDE3MiwgNSwgMjE3LCAxMDYsIDU1LCAyMjUsIDE3MiwgNSwgCi0gICAgMjE1LCAxMTksIDU1LCAyMjUsIDE3MiwgNSwgMjQ4LCAyMjksIDU1LCAyMjUsIDE3MiwgNSwgMjQ4LCAxMSwgNTUsIDIyNSwgCi0gICAgMTcyLCA1LCAyNDYsIDg2LCA1NSwgMjI1LCAxNzIsIDUsIDIxNiwgMjA5LCA1NSwgMjI1LCAxNzIsIDUsIDE5MSwgNTUsIAotICAgIDIyNSwgMTcyLCA1LCAyNTIsIDE5OSwgNTUsIDIyNSwgMTcyLCA1LCAyNDQsIDIwNCwgNTUsIDIyNSwgMTcyLCA1LCAxOTgsIAotICAgIDU1LCAyMjUsIDE3MiwgNSwgMjI3LCAyNDIsIDU1LCAyMjUsIDE3MiwgNSwgMTg2LCA1NSwgMjI1LCAxNzIsIDUsIDIzMCwgCi0gICAgMjM1LCA1NSwgMjI1LCAxNzIsIDUsIDIzMCwgMTA3LCA1NSwgMjI1LCAxNzIsIDUsIDE5MiwgNTUsIDIyNSwgMTcyLCA1LCAKLSAgICAyMTQsIDI3LCA1NSwgMjI1LCAxNzIsIDUsIDIxMywgMTc2LCA1NSwgMjI1LCAxNzIsIDUsIDIwNSwgNTUsIDIyNSwgMTcyLCAKLSAgICA1LCAyMjIsIDE0MiwgNTUsIDIyNSwgMTcyLCA1LCAyMzMsIDE0MSwgNTUsIDIyNSwgMTcyLCA1LCAyMDYsIDU1LCAyMjUsIAotICAgIDE3MiwgNSwgMjEwLCAxMTYsIDU1LCAyMjUsIDE3MiwgNSwgMjIwLCAxMDQsIDU1LCAyMjUsIDE3MiwgNSwgMjE4LCAyMjUsIAotICAgIDU1LCAyMjUsIDE3MiwgNSwgMTYyLCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgMTk0LCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgCi0gICAgMTkzLCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgMTkyLCA1NSwgMjI1LCAxNzIsIDUsIDIxMSwgMTQyLCA1NSwgMjI1LCAxNzIsIAotICAgIDUsIDI0OCwgMjA4LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMjA3LCA1NSwgMjI1LCAxNzIsIDUsIDI1MiwgMTc4LCA1NSwgCi0gICAgMjI1LCAxNzIsIDUsIDI1MSwgOTMsIDU1LCAyMjUsIDE3MiwgMjExLCAyMDksIDI0NywgMTgwLCA1NSwgMjI1LCAxNzIsIDU0LCAKLSAgICAxMTEsIDU1LCAyMjUsIDE3MiwgNTQsIDEwNSwgNTUsIDIyNSwgMTcyLCA1NCwgMjE2LCAyNDgsIDU1LCAyMjUsIDE3MiwgNTQsIAotICAgIDIxNSwgNzMsIDU1LCAyMjUsIDE3MiwgNTQsIDI0MCwgMjE3LCAxODEsIDYsIDEsIDIwMCwgNzQsIDE4MSwgNiwgMSwgMjAwLCAKLSAgICA3NiwgMTgxLCA2LCAxLCAyMDAsIDYxLCAxODEsIDYsIDEsIDIwMCwgMjU0LCAyMTgsIDE4MSwgNiwgMSwgMjAwLCA3OCwgCi0gICAgMTgxLCA2LCAxLCAyMDAsIDIyNiwgMTg3LCAxODEsIDYsIDEsIDIxOSwgMjUzLCA3NCwgMTgxLCA2LCAxLCAyMTksIDI1MywgCi0gICAgNzYsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDYxLCAxODEsIDYsIDEsIDIxOSwgMjUzLCAyNTQsIDIxOCwgMTgxLCA2LCAxLCAKLSAgICAyMTksIDI1MywgNzgsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDIyNiwgMTg3LCAxODEsIDYsIDEsIDI1MywgMTc1LCAxODEsIDYsIAotICAgIDEsIDIyNiwgMTIwLCAxODEsIDYsIDEsIDIxMSwgMTk1LCAxODEsIDYsIDEsIDIxMSwgNDQsIDE4MSwgNiwgMSwgMjQyLCA2NywgCi0gICAgMTgxLCA2LCAxLCAyMjUsIDIxNCwgMTgxLCA2LCAxLCAyNTIsIDc0LCAxODEsIDYsIDEsIDIxNywgMTIsIDE4MSwgNiwgMSwgCi0gICAgMjQ4LCA4NSwgMTgxLCA2LCAxLCAyNTAsIDEzNiwgMTgxLCA2LCAxLCAyMzUsIDEzMCwgMTgxLCA2LCAxLCAyMzQsIDE5NSwgCi0gICAgMTgxLCA2LCAxLCAyNDMsIDkwLCAxODEsIDYsIDEsIDI0NSwgMjEwLCAxODEsIDYsIDEsIDIxMywgMjUwLCAxODEsIDYsIDEsIAotICAgIDI0NSwgNjcsIDE4MSwgNiwgMSwgMjE2LCAxOTUsIDE4MSwgNiwgMSwgMjQ1LCA5MCwgMTgxLCA2LCAxLCAyMTAsIDkyLCAKLSAgICAxODEsIDYsIDEsIDI0NSwgODMsIDE4MSwgNiwgMSwgMjEwLCA3MywgMTgxLCA2LCAxLCAyNDUsIDEwMCwgMTgxLCA2LCAxLCAKLSAgICAyNDUsIDE4MiwgMTgxLCA2LCAxLCAyNDUsIDE2NywgMTgxLCA2LCAxLCAyNDUsIDE1OCwgMTgxLCA2LCAxLCAyNDUsIDE0NiwgCi0gICAgMTgxLCA2LCAxLCAyMjYsIDIyMywgMTgxLCA2LCAxLCAyNDUsIDQ2LCAxODEsIDQsIDEsIDIwMCwgNzQsIDE4MSwgNCwgMSwgCi0gICAgMjAwLCA3NiwgMTgxLCA0LCAxLCAyMDAsIDYxLCAxODEsIDQsIDEsIDIwMCwgMjU0LCAyMTgsIDE4MSwgNCwgMSwgMjAwLCAKLSAgICA3OCwgMTgxLCA0LCAxLCAyMDAsIDIyNiwgMTg3LCAxODEsIDQsIDEsIDIxOSwgMjUzLCA3NCwgMTgxLCA0LCAxLCAyMTksIAotICAgIDI1MywgNzYsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDYxLCAxODEsIDQsIDEsIDIxOSwgMjUzLCAyNTQsIDIxOCwgMTgxLCA0LCAKLSAgICAxLCAyMTksIDI1MywgNzgsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDIyNiwgMTg3LCAxODEsIDQsIDEsIDI1MywgMTc1LCAxODEsIAotICAgIDQsIDEsIDIyNiwgMTIwLCAxODEsIDQsIDEsIDIxMSwgMTk1LCAxODEsIDQsIDEsIDIxMSwgNDQsIDE4MSwgNCwgMSwgMjQyLCAKLSAgICA2NywgMTgxLCA0LCAxLCAyMjUsIDIxNCwgMTgxLCA0LCAxLCAyNTIsIDc0LCAxODEsIDQsIDEsIDIxNywgMTIsIDE4MSwgNCwgCi0gICAgMSwgMjQ4LCA4NSwgMTgxLCA0LCAxLCAyNTAsIDEzNiwgMTgxLCA0LCAxLCAyMzUsIDEzMCwgMTgxLCA0LCAxLCAyMzQsIAotICAgIDE5NSwgMTgxLCA0LCAxLCAyNDMsIDkwLCAxODEsIDQsIDEsIDI0NSwgMjEwLCAxODEsIDQsIDEsIDIxMywgMjUwLCAxODEsIAotICAgIDQsIDEsIDI0NSwgNjcsIDE4MSwgNCwgMSwgMjE2LCAxOTUsIDE4MSwgNCwgMSwgMjQ1LCA5MCwgMTgxLCA0LCAxLCAyMTAsIAotICAgIDkyLCAxODEsIDQsIDEsIDI0NSwgODMsIDE4MSwgNCwgMSwgMjEwLCA3MywgMTgxLCA0LCAxLCAyNDUsIDEwMCwgMTgxLCA0LCAKLSAgICAxLCAyNDUsIDE4MiwgMTgxLCA0LCAxLCAyNDUsIDE2NywgMTgxLCA0LCAxLCAyNDUsIDE1OCwgMTgxLCA0LCAxLCAyNDUsIAotICAgIDE0NiwgMTgxLCA0LCAxLCAyMjYsIDIyMywgMTgxLCA0LCAxLCAyNDUsIDQ2LCAyMjAsIDcxLCAxLCAyMjUsIDIxMiwgMjIwLCAKLSAgICA3MSwgMSwgMjE2LCA2LCAyMjAsIDcxLCAxLCAyMzQsIDk3LCAyMjAsIDcxLCAxLCAyNDQsIDE1NSwgMjIwLCA3MSwgMSwgCi0gICAgMjE2LCAxNzMsIDIyMCwgNzEsIDEsIDIxOSwgNjAsIDIyMCwgNzEsIDEsIDIxOCwgMTUsIDIyMCwgNzEsIDEsIDI1MCwgNjksIAotICAgIDIyMCwgNzEsIDEsIDIxMSwgNDYsIDIyMCwgNzEsIDEsIDI0MCwgMjE2LCAyMjAsIDcxLCAxLCAyNTIsIDEzLCAyMjAsIDcxLCAKLSAgICAxLCAyNDgsIDk3LCAyMjAsIDcxLCAxLCAyNDMsIDEyOCwgMjIwLCA3MSwgMSwgMjEzLCAxMjMsIDIyMCwgNzEsIDEsIDIxNiwgCi0gICAgMTc3LCAyMjAsIDcxLCAxLCAyMTAsIDIxLCAyMjAsIDcxLCAxLCAyMzEsIDk0LCAyMjAsIDcxLCAxLCAyMzUsIDU1LCAyMjAsIAotICAgIDcxLCAxLCAyMTEsIDIyNSwgMjIwLCA3MSwgMSwgMjQyLCA1NSwgMjIwLCA3MSwgMSwgMjMyLCAxNDgsIDIyMCwgNzEsIDEsIAotICAgIDIzMCwgMTk0LCAyMjAsIDcxLCAxLCAyMzYsIDQ3LCAyMjAsIDcxLCAxLCAyNDUsIDIwOSwgMjIwLCA3MSwgMSwgMjUzLCAKLSAgICAyMzksIDIyMCwgNzEsIDEsIDI1NSwgMCwgMjIwLCA3MSwgMSwgMjI2LCAyMDAsIDIyMCwgNzEsIDEsIDIxMSwgMjEyLCAyMjAsIAotICAgIDcxLCAxLCAyMjYsIDEzNCwgMjIwLCA3MSwgMSwgMjU0LCAyMTgsIDIyMCwgNzEsIDEsIDIyMiwgMjEwLCAyMjAsIDcxLCAxLCAKLSAgICAyMjcsIDE5OCwgMjIwLCA3MSwgMSwgMjQ1LCAyMjUsIDIyMCwgNzEsIDEsIDI1NCwgMjIzLCAyMjAsIDcxLCAxLCAyNDAsIAotICAgIDExOCwgMjIwLCA3MSwgMSwgMjE0LCAxNjMsIDIyMCwgNzEsIDEsIDIyNywgMiwgMjIwLCA3MSwgMSwgMjI2LCAxODAsIDIyMCwgCi0gICAgNzEsIDEsIDIyNiwgMjIyLCAyMjAsIDcxLCAxLCAyNTMsIDE3OCwgMjIwLCA3MSwgMSwgMjU0LCAyNywgMjIwLCA3MSwgMSwgCi0gICAgMjI2LCAxNjIsIDIyMCwgNzEsIDEsIDI1NCwgMjAxLCAyMjAsIDcxLCAxLCAyNDUsIDk0LCAyMjAsIDcxLCAxLCAyNTQsIDUsIAotICAgIDIyMCwgNzEsIDEsIDI0NSwgMjM1LCAyMjAsIDcxLCAxLCAyNDAsIDEyNSwgMjIwLCA3MSwgMSwgMjExLCAxMywgMjI2LCAKLSAgICAxNDUsIDEsIDI1NCwgMTc5LCAyMjYsIDE0NSwgMSwgMjUyLCAxOTksIDIyNiwgMTQ1LCAxLCAyMTcsIDEwNiwgMjI2LCAxNDUsIAotICAgIDEsIDIzNSwgMTQ3LCAyMjYsIDE0NSwgMSwgMjExLCAxNjUsIDIyNiwgMTQ1LCAxLCAyMzQsIDEzOCwgMjI2LCAxNDUsIDEsIAotICAgIDI0OCwgODQsIDIyNiwgMTQ1LCAxLCAyMDUsIDIyNiwgMTQ1LCAxLCAyMDYsIDIyNiwgMTQ1LCAxLCAyMjAsIDI4LCAyMjYsIAotICAgIDE0NSwgMSwgMjQ4LCAzMywgMjI2LCAxNDUsIDEsIDI1MCwgMjIzLCAyMjYsIDE0NSwgMSwgMjQzLCAxNDIsIDIyNiwgMTQ1LCAKLSAgICAxLCAyNDQsIDIwNCwgMjI2LCAxNDUsIDEsIDIyNCwgODksIDIyNiwgMTQ1LCAxLCAyMzUsIDE1LCAyMjYsIDE0NSwgMSwgCi0gICAgMjMzLCAxMzYsIDIyNiwgMTQ1LCAxLCAyMzAsIDIwNSwgMjI2LCAxNDUsIDEsIDIyNywgMTgyLCAyMjYsIDE0NSwgMSwgMjEyLCAKLSAgICAzMCwgMjI2LCAxNDUsIDEsIDE2MiwgMjI2LCAxNDUsIDEsIDE5MiwgMjI2LCAxNDUsIDEsIDYxLCAyMjYsIDE0NSwgMSwgNzYsIAotICAgIDIyNiwgMTQ1LCAxLCA3NCwgMjI2LCAxNDUsIDEsIDc4LCAyMjYsIDE0NSwgMSwgNjksIDIyNiwgMTQ1LCAxLCAyNTUsIDgyLCAKLSAgICAyMjYsIDE0NSwgMSwgMjQ1LCAyMTcsIDIyNiwgMTQ1LCAxLCAyMjYsIDE4NywgMjI2LCAxNDUsIDIxLCAyMTAsIDg2LCAyMjYsIAotICAgIDE0NSwgMjEsIDExMSwgMjI2LCAxNDUsIDIxLCAxMDUsIDIyNiwgMTQ1LCAyMSwgMTU4LCAyMjYsIDE0NSwgMjEsIDE2MSwgCi0gICAgMjI2LCAxNDUsIDIxLCAxOTAsIDIyNiwgMTQ1LCAyMSwgMTk1LCAyMjYsIDE0NSwgMjEsIDE5OSwgMjI2LCAxNDUsIDIxLCAKLSAgICAxOTYsIDIyNiwgMTQ1LCAyMSwgMjAxLCAyNDksIDc1LCAzLCA2MSwgMjQ5LCA3NSwgMywgNzYsIDI0OSwgNzUsIDMsIDc0LCAKLSAgICAyNDksIDc1LCAzLCA3OCwgMjQ5LCA3NSwgMywgNjksIDI0OSwgNzUsIDMsIDIzNSwgMTQ3LCAyNDksIDc1LCAzLCAyMzUsIAotICAgIDc0LCAyNDksIDc1LCAzLCAxNzYsIDI0OSwgNzUsIDMsIDIzNCwgMTg4LCAyNDksIDc1LCAzLCAyMzQsIDk4LCAyNDksIDc1LCAKLSAgICAzLCAyMzQsIDM0LCAyNDksIDc1LCAzLCAyMzMsIDIyMywgMjQ5LCA3NSwgMywgMjMzLCAxNDEsIDI0OSwgNzUsIDMsIDIzMywgCi0gICAgNjQsIDI0OSwgNzUsIDMsIDIzMiwgMjQ3LCAyNDksIDc1LCAzLCAyMzIsIDE2MiwgMjQ5LCA3NSwgMywgMjMyLCAxMDMsIAotICAgIDI0OSwgNzUsIDMsIDE4NiwgMjQ5LCA3NSwgMywgMjMxLCA5NiwgMjQ5LCA3NSwgMywgMjMwLCAyMzUsIDI0OSwgNzUsIDMsIAotICAgIDIzMCwgMTY2LCAyNDksIDc1LCAzLCAyMzAsIDEwNywgMjQ5LCA3NSwgMywgMTk4LCAyNDksIDc1LCAzLCAyMjksIDExMiwgCi0gICAgMjQ5LCA3NSwgMywgMjI4LCAyMzgsIDI0OSwgNzUsIDMsIDIyOCwgNzksIDI0OSwgNzUsIDMsIDIyNywgMjQyLCAyNDksIDc1LCAKLSAgICAzLCAxOTEsIDI0OSwgNzUsIDMsIDIyNSwgMjI0LCAyNDksIDc1LCAzLCAyMjUsIDExMSwgMjQ5LCA3NSwgMywgMjI1LCAxOSwgCi0gICAgMjQ5LCA3NSwgMywgMjI0LCAxNTMsIDI0OSwgNzUsIDMsIDIwNSwgMjQ5LCA3NSwgMywgMjIzLCAxMzEsIDI0OSwgNzUsIDMsIAotICAgIDIyMywgMzgsIDI0OSwgNzUsIDMsIDIyMiwgMjEzLCAyNDksIDc1LCAzLCAyMjIsIDE0MiwgMjQ5LCA3NSwgMywgMjA2LCAKLSAgICAyNDksIDc1LCAzLCAyMjEsIDE4MywgMjQ5LCA3NSwgMywgMjE5LCAxOTMsIDI0OSwgNzUsIDMsIDIxOSwgNjAsIDI0OSwgNzUsIAotICAgIDMsIDIxOCwgODQsIDI0OSwgNzUsIDMsIDIxNywgMTA2LCAyNDksIDc1LCAzLCAyMTcsIDIzLCAyNDksIDc1LCAzLCAyMTYsIAotICAgIDExOCwgMjQ5LCA3NSwgMywgMTEyLCAyNDksIDc1LCAzLCAyMTUsIDExOSwgMjQ5LCA3NSwgMywgMjEyLCA2NSwgMjQ5LCA3NSwgCi0gICAgMywgMjEyLCAyMiwgMjQ5LCA3NSwgMywgMjExLCAyNTAsIDI0OSwgNzUsIDMsIDIxMSwgMjI3LCAyNDksIDc1LCAzLCAyMTEsIAotICAgIDE2NSwgMjQ5LCA3NSwgMywgMjExLCAxNjIsIDI0OSwgNzUsIDMsIDIxMCwgMTE2LCAyNDksIDc1LCAzLCAyMTAsIDIzLCAKLSAgICAyMzYsIDgsIDI1NCwgMzUsIDEsIDI1NCwgMTc3LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI1MiwgMzMsIDIzNiwgOCwgMjU0LCAKLSAgICAzNSwgMSwgMjQyLCAyMDgsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjQ4LCAxOTYsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjQxLCAKLSAgICAyNDUsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjEyLCAzMCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTAsIDk3LCAyMzYsIDgsIAotICAgIDI1NCwgMzUsIDEsIDI0MSwgMjAyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxNiwgMjI3LCAyMzYsIDgsIDI1NCwgMzUsIDEsIAotICAgIDIxMCwgMjMyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIzNCwgMjMxLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIzMywgOTksIDIzNiwgCi0gICAgOCwgMjU0LCAzNSwgMSwgMjMxLCA3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjcsIDE5OCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAKLSAgICAyMjEsIDI1MSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTMsIDE3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjUsIDIyNCwgCi0gICAgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjIsIDI2LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyNCwgMzcsIDIzNiwgOCwgMjU0LCAKLSAgICAzNSwgMSwgMjIzLCA3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjAsIDIyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxNywgMzcsIAotICAgIDIzNiwgOCwgMjU0LCAzNSwgMjIxLCAxNzUsIDUwLCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAxMTEsIDIzNiwgOCwgMjU0LCAzNSwgCi0gICAgNTQsIDEwNSwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTU4LCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAyMTYsIDI0OCwgMjM2LCA4LCAKLSAgICAyNTQsIDM1LCA1NCwgMjE1LCA3MywgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTIzLCAyNDAsIDIxNywgMjM2LCA4LCAyNTQsIAotICAgIDM1LCA1NCwgMTIzLCAyMTYsIDE0OCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyMjUsIDEyMiwgCi0gICAgMSwgMjU0LCAxNzQsIDIyNSwgMTIyLCAxLCAyNTIsIDM2LCAyMjUsIDEyMiwgMSwgMjQzLCAxMTYsIDIyNSwgMTIyLCAxLCAKLSAgICAyNDgsIDY0LCAyMjUsIDEyMiwgMSwgMjQxLCAyNDUsIDIyNSwgMTIyLCAxLCAyMTIsIDM3LCAyMjUsIDEyMiwgMSwgMjEwLCAKLSAgICAxMTAsIDIyNSwgMTIyLCAxLCAyNDEsIDIwNCwgMjI1LCAxMjIsIDEsIDIxNiwgMjMxLCAyMjUsIDEyMiwgMSwgMjEwLCAyMzMsIAotICAgIDIyNSwgMTIyLCAxLCAyMzUsIDAsIDIyNSwgMTIyLCAxLCAyMzMsIDEwNSwgMjI1LCAxMjIsIDEsIDIzMSwgNzAsIDIyNSwgCi0gICAgMTIyLCAxLCAyMjcsIDE5OCwgMjI1LCAxMjIsIDEsIDIyMCwgMTQ2LCAyMjUsIDEyMiwgMSwgMjU0LCAyMDUsIDIyNSwgMTIyLCAKLSAgICAxLCAyMjUsIDIyNCwgMjI1LCAxMjIsIDEsIDIyMiwgMjcsIDIyNSwgMTIyLCAxLCAyMjQsIDQyLCAyMjUsIDEyMiwgMSwgCi0gICAgMjIyLCAxOTEsIDIyNSwgMTIyLCAxLCAyMjAsIDIyLCAyMjUsIDEyMiwgMSwgMjE3LCA0MiwgMjI1LCAxMjIsIDU0LCAxMTEsIAotICAgIDIyNSwgMTIyLCA1NCwgMjE2LCAyNDgsIDIyNSwgMTIyLCA1NCwgMjE1LCA3MywgMjI1LCAxMjIsIDU0LCAxMjMsIDI0MCwgCi0gICAgMjE3LCAyMjUsIDEyMiwgNTQsIDEwNSwgMjI1LCAxMjIsIDU0LCAxNTgsIDIyNSwgMTIyLCAyMTEsIDIwOSwgMjIwLCAxMzksIAotICAgIDIzMiwgNjQsIDEsIDYxLCAyMzIsIDY0LCAxLCAyNTMsIDE2NiwgMjMyLCA2NCwgMSwgMjQzLCAyMDksIDIzMiwgNjQsIDEsIAotICAgIDI0OSwgNjgsIDIzMiwgNjQsIDEsIDc2LCAyMzIsIDY0LCAxLCAyMTQsIDEwNSwgMjMyLCA2NCwgMSwgNzQsIDIzMiwgNjQsIAotICAgIDEsIDIxMSwgMTE3LCAyMzIsIDY0LCAxLCAyMzUsIDI5LCAyMzIsIDY0LCAxLCAxNTYsIDIzMiwgNjQsIDEsIDE5NCwgMjMyLCAKLSAgICA2NCwgMSwgMjMwLCAzMCwgMjMyLCA2NCwgMSwgNzgsIDIzMiwgNjQsIDEsIDE1MywgMjMyLCA2NCwgMSwgMjE4LCAyMjgsIAotICAgIDIzMiwgNjQsIDEsIDIxNywgMTUzLCAyMzIsIDY0LCAxLCA2OSwgMjMyLCA2NCwgMSwgMjQ1LCAxNCwgMjMyLCA2NCwgMSwgCi0gICAgMjI0LCA5OSwgMjMyLCA2NCwgMSwgMjIyLCA5MywgMjMyLCA2NCwgMSwgMjE1LCAxNjAsIDIzMiwgNjQsIDEsIDI1NCwgMTMxLCAKLSAgICAyMzIsIDY0LCAxLCAyNDUsIDE1OCwgMjMyLCA2NCwgMSwgMjMyLCA2NywgMjMyLCA2NCwgMSwgMjI4LCAxMTYsIDIzMiwgNjQsIAotICAgIDEsIDI1MSwgNzQsIDIzMiwgNjQsIDIxNSwgMjIzLCA3OSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDYxLCAyMzEsIDUzLCAKLSAgICAyNDEsIDE4MSwgMSwgNzYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA3NCwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDc4LCAyMzEsIAotICAgIDUzLCAyNDEsIDE4MSwgMSwgMTkyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjEyLCA2NSwgMjMxLCA1MywgMjQxLCAxODEsIAotICAgIDEsIDI1MiwgMTk5LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjUyLCAxOTgsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxOTEsIAotICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxODYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxOTgsIDIzMSwgNTMsIDI0MSwgMTgxLCAKLSAgICAxLCAyMjksIDIzMywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyOSwgMTEyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjI5LCAKLSAgICAxMTEsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMDUsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjMsIDE5MCwgMjMxLCA1MywgCi0gICAgMjQxLCAxODEsIDEsIDIzMywgMTQxLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjM0LCAxMzgsIDIzMSwgNTMsIDI0MSwgMTgxLCAKLSAgICAxLCAyNDEsIDE5NiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIwNiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyMiwgMzUsIAotICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjEsIDE4MywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE3NiwgMjMxLCA1MywgMjQxLCAKLSAgICAxODEsIDEsIDIyNCwgOTEsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDEwNiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIAotICAgIDIxNywgMTA1LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAyMywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMjIsIAotICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxMTIsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyNDgsIDIyOSwgMjMxLCA1MywgMjQxLCAKLSAgICAxODEsIDE2LCAyMTMsIDE3MCwgMjMxLCA1MywgMjQxLCAxODEsIDE2LCAyMTMsIDE2OSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIAotICAgIDYxLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgNzYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCA3NCwgMjMxLCA1MywgMjQ5LCAKLSAgICAxMDIsIDEsIDc4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTkyLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjEyLCA2NSwgCi0gICAgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI1MiwgMTk5LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTkxLCAyMzEsIDUzLCAyNDksIAotICAgIDEwMiwgMSwgMTg2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTk4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjI5LCAxMTIsIAotICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMDUsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMzMsIDE0MSwgMjMxLCA1MywgMjQ5LCAKLSAgICAxMDIsIDEsIDIzNCwgMTM4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjQxLCAxOTYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKLSAgICAyMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNTQsIDMxLCAyMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjEsIDE4MywgCi0gICAgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE3NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyNCwgOTEsIDIzMSwgNTMsIDI0OSwgCi0gICAgMTAyLCAxLCAyMTcsIDEwNiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIxNywgMjMsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKLSAgICAxMTIsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNDgsIDIyOSwgMjMxLCA1MywgMjQ5LCAxMDIsIDIzMiwgMTUxLCAyMjIsIAotICAgIDIxOSwgMjMxLCA1MywgMjQ5LCAxMDIsIDIzMiwgMTUxLCAyMzYsIDEzLCAyMzQsIDEyNiwgMSwgNjEsIDIzNCwgMTI2LCAyNSwgCi0gICAgNSwgNzQsIDIzNCwgMTI2LCAyNSwgNSwgNjksIDIzNCwgMTI2LCAyNSwgNSwgMTQ5LCAxNTMsIDIzNCwgMTI2LCAyNSwgNSwgCi0gICAgNzYsIDIzNCwgMTI2LCAyNSwgNSwgNzgsIDIzNCwgMTI2LCAyNSwgMjMzLCAyOSwgNzksIDIzNCwgMTI2LCA1LCA1MiwgMjIyLCAKLSAgICAyMzcsIDUxLCAyMzQsIDEyNiwgNSwgMjU0LCA4MywgMjM0LCAxMjYsIDUsIDIxMywgMTQ3LCAyMzQsIDEyNiwgMSwgMTc2LCAKLSAgICAyMzQsIDEyNiwgMSwgMjM0LCAxMzgsIDIzNCwgMTI2LCAxLCAyNDMsIDE0MiwgMjM0LCAxMjYsIDEsIDI0MywgMCwgMjM0LCAKLSAgICAxMjYsIDEsIDI1MSwgNDEsIDIzNCwgMTI2LCAxLCAyNTAsIDE2NSwgMjM0LCAxMjYsIDEsIDIzNSwgMTQ3LCAyMzQsIDEyNiwgCi0gICAgMSwgMjI3LCAxNjksIDIzNCwgMTI2LCAxLCAyMTUsIDE1NywgMjM0LCAxMjYsIDEsIDIxNSwgMTQ1LCAyMzQsIDEyNiwgMSwgCi0gICAgMjQ4LCAxNDMsIDIzNCwgMTI2LCAxLCAyNDgsIDEyNywgMjM0LCAxMjYsIDEsIDIyOCwgMTE1LCAyMzQsIDEyNiwgMSwgMjE3LCAKLSAgICAxMDYsIDIzNCwgMTI2LCAxLCAyMTYsIDIwOSwgMjM0LCAxMjYsIDEsIDI0OCwgMjI5LCAyMzQsIDEyNiwgMSwgMjQ4LCAzMywgCi0gICAgMjM0LCAxMjYsIDEsIDE5OCwgMjM0LCAxMjYsIDEsIDE5MSwgMjM0LCAxMjYsIDEsIDIyNSwgMTUwLCAyMzQsIDEyNiwgMSwgCi0gICAgMjUyLCAxOTksIDIzNCwgMTI2LCAxLCAyNTIsIDI2LCAyMzQsIDEyNiwgMSwgMTg2LCAyMzQsIDEyNiwgMSwgMTkyLCAyMzQsIAotICAgIDEyNiwgMSwgMjA1LCAyMzQsIDEyNiwgMSwgMjMzLCAxNDEsIDIzNCwgMTI2LCAxLCAyMTQsIDI3LCAyMzQsIDEyNiwgMSwgCi0gICAgMjIwLCAxMDQsIDIzNCwgMTI2LCAxLCAyMTgsIDIyNSwgMjM0LCAxMjYsIDEsIDIwNiwgMjM0LCAxMjYsIDEsIDIxMCwgMTE2LCAKLSAgICAyMzQsIDEyNiwgMSwgMTYyLCAyMzQsIDEyNiwgMSwgMjM0LCA1MiwgMjM0LCAxMjYsIDEsIDIxNSwgMTI1LCAyMzQsIDEyNiwgCi0gICAgNSwgMjUyLCAxNDksIDQ4LCAyMzQsIDEyNiwgNSwgMjUwLCAyMjksIDIzNCwgMTI2LCA1LCA1OSwgNTEsIDIzNCwgMTI2LCAKLSAgICAyMTMsIDE1MiwgMjM0LCAxMjYsIDIxLCAxMTEsIDIzNCwgMTI2LCAyMSwgMTA1LCAyMzQsIDEyNiwgMjEsIDE1OCwgMjM0LCAKLSAgICAxMjYsIDIxLCAxNjEsIDIzNCwgMTI2LCA1NCwgMjE2LCAyNDgsIDIzNCwgMTI2LCA1NCwgMjE1LCA3MywgMjM0LCAxMjYsIAotICAgIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzQsIDEyNiwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjQ3LCAKLSAgICAxMjgsIDIzNCwgMTI2LCAyMjQsIDE0NCwgNCwgMjUwLCA0MywgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyNTAsIDQzLCAyMzQsIAotICAgIDEyNiwgMjI0LCAxNDQsIDI0OSwgMTQ1LCAxMzAsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjMxLCAxODUsIDIzNCwgMTI2LCAKLSAgICAyMjQsIDE0NCwgMjMyLCAxMjEsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjQ4LCAxODYsIDIzNCwgMTI2LCAyMjQsIDE0NCwgNTIsIAotICAgIDI0OCwgMTg2LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDIzMiwgMjEzLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQxLCAKLSAgICAyNDUsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMzMsIDk5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQxLCAyMDIsIAotICAgIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMzEsIDcwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjI0LCAzNywgNTUsIAotICAgIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxMiwgMzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjAsIDIyLCA1NSwgMjE5LCAKLSAgICAzMCwgMjU0LCA0NiwgMSwgMjIzLCA3MCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI1MiwgMzMsIDU1LCAyMTksIDMwLCAKLSAgICAyNTQsIDQ2LCAxLCAyMTcsIDM3LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIxLCAyMjgsIDU1LCAyMTksIDMwLCAyNTQsIAotICAgIDQ2LCAxLCAyMzQsIDIzMSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyNywgMTk4LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgCi0gICAgMSwgMjM0LCAxMjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjIsIDI2LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCi0gICAgMjIxLCAyNTEsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDQsIDE2MiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAotICAgIDI1NCwgMTc5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjUzLCAxNjksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKLSAgICAyNDgsIDMwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQyLCAyMDgsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDgsIAotICAgIDE5NiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MiwgMjQ1LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAKLSAgICAyMjcsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTAsIDk2LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ4LCAyNywgCi0gICAgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxMCwgMjMyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAxOTgsIDU1LCAKLSAgICAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTYsIDE3OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDU0LCAxMTEsIDU1LCAyMTksIAotICAgIDMwLCAyNTQsIDQ2LCA1NCwgMjQ0LCAxMjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxMzIsIDIzNSwgMjQ1LCAyNTMsIDE4MCwgCi0gICAgMSwgNjEsIDI1MywgMTgwLCAxLCAyNTUsIDgyLCAyNTMsIDE4MCwgMSwgMjU0LCA4MSwgMjUzLCAxODAsIDEsIDI1NSwgNDEsIAotICAgIDI1MywgMTgwLCAxLCAyNTQsIDEzMSwgMjUzLCAxODAsIDEsIDI1NSwgNDIsIDI1MywgMTgwLCAxLCAyNTQsIDI1MiwgMjUzLCAKLSAgICAxODAsIDEsIDI1NCwgMjQ4LCAyNTMsIDE4MCwgMSwgNzYsIDI1MywgMTgwLCAxLCAyNDUsIDIxNywgMjUzLCAxODAsIDEsIAotICAgIDc4LCAyNTMsIDE4MCwgMSwgMjI2LCAxODcsIDI1MywgMTgwLCAxLCA3NCwgMjUzLCAxODAsIDEsIDIzNiwgNDAsIDI1MywgCi0gICAgMTgwLCAxLCA2OSwgMjUzLCAxODAsIDEsIDIxNCwgMTE4LCAyNTMsIDE4MCwgMSwgMjM0LCAxODgsIDI1MywgMTgwLCAxLCAKLSAgICAyMTEsIDE2MiwgMjUzLCAxODAsIDEsIDIxMSwgMTI4LCAyNTMsIDE4MCwgMSwgMjExLCAxMzcsIDI1MywgMTgwLCAxLCAyNDMsIAotICAgIDY5LCAyNTMsIDE4MCwgMSwgMjQzLCAzMSwgMjUzLCAxODAsIDEsIDI0MiwgMjQzLCAyNTMsIDE4MCwgMSwgMjUwLCAxOTgsIAotICAgIDI1MywgMTgwLCAxLCAyMzUsIDEzMiwgMjUzLCAxODAsIDEsIDIxNywgMjMsIDI1MywgMTgwLCAxLCAyMTYsIDE5NiwgMjUzLCAKLSAgICAxODAsIDEsIDI0OCwgOTgsIDI1MywgMTgwLCAxLCAyNDgsIDI1LCAyNTMsIDE4MCwgMSwgMjE1LCAxNTIsIDI1MywgMTgwLCAKLSAgICAxLCAyMjUsIDIyNCwgMjUzLCAxODAsIDEsIDI0NCwgMTYyLCAyNTMsIDE4MCwgMSwgMjUyLCA4MywgMjUzLCAxODAsIDEsIAotICAgIDI1MiwgMjIsIDI1MywgMTgwLCAxLCAyMjksIDY5LCAyNTMsIDE4MCwgMSwgMjI4LCAyNDQsIDI1MywgMTgwLCAxLCAyMjgsIAotICAgIDI0NSwgMjUzLCAxODAsIDEsIDIyOSwgMTEyLCAyNTMsIDE4MCwgMSwgMjI3LCAxNjAsIDI1MywgMTgwLCAxLCAyMjgsIDExMCwgCi0gICAgMjUzLCAxODAsIDEsIDIzMSwgOTYsIDI1MywgMTgwLCAxLCAyNDEsIDEyMywgMjUzLCAxODAsIDEsIDIxMCwgMTY2LCAyNTMsIAotICAgIDE4MCwgMSwgMjExLCA0NywgMjUzLCAxODAsIDEsIDIxMywgMjU1LCAyNTMsIDE4MCwgMSwgMjIzLCAxMzEsIDI1MywgMTgwLCAKLSAgICAxLCAyMzMsIDY0LCAyNTMsIDE4MCwgMSwgMjIxLCAxODMsIDI1MywgMTgwLCAxLCAyMTAsIDk0LCAyNTMsIDE4MCwgMSwgCi0gICAgMjIwLCA2NSwgMjUzLCAxODAsIDEsIDIxMCwgNzQsIDI1MywgMTgwLCAxLCAyMTksIDIwMCwgMjUzLCAxODAsIDEsIDIxOCwgCi0gICAgMTk1LCAyNTMsIDE4MCwgMSwgMjQxLCAyNDUsIDI1MywgMTgwLCAyNTUsIDMwLCA3OSwgMjE2LCA4MCwgMTEzLCAxNzAsIAotICAgIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDQsIDExMywgMTcwLCAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCAyMzMsIDkxLCAKLSAgICAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMjMzLCA5MSwgMTIzLCA1OSwgMTE1LCAxMTMsIDE3MCwgMjI0LCAKLSAgICAxNDMsIDIzMywgOTEsIDExMywgMjIyLCAyMzUsIDExNSwgMTIzLCAyMjIsIDIzNywgMjI0LCAxNDMsIDIzMywgOTEsIDEyMywgCi0gICAgMjIyLCAyMzcsIDExNSwgMTEzLCAyMjIsIDIzNSwgMjI0LCAxNDMsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI1NCwgMTc3LCAKLSAgICAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTIsIDMzLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDIsIDIwOCwgMjM1LCAyMjUsIAotICAgIDIyNiwgMiwgMSwgMjQ4LCAxOTYsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI0MSwgMjQ1LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKLSAgICAyMTIsIDMwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTAsIDk3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDEsIDIwMiwgCi0gICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjE2LCAyMjcsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxMCwgMjMyLCAyMzUsIDIyNSwgCi0gICAgMjI2LCAyLCAxLCAyMzQsIDIzMSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjMzLCA5OSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCi0gICAgMjMxLCA3MCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjI3LCAxOTgsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyMSwgMjUxLCAKLSAgICAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTMsIDE3MCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjI1LCAyMjQsIDIzNSwgMjI1LCAKLSAgICAyMjYsIDIsIDEsIDIyMiwgMjYsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNCwgMzcsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAotICAgIDIyMywgNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyMCwgMjIsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxNywgMzcsIDIzNSwgCi0gICAgMjI1LCAyMjYsIDIsIDU0LCAxMTEsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxMDUsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAKLSAgICAxNTgsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxNjEsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAyMTYsIDI0OCwgMjM1LCAyMjUsIAotICAgIDIyNiwgMiwgNTQsIDIxNSwgNzMsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzUsIDIyNSwgMjI2LCAKLSAgICAyLCA1NCwgMTIzLCAyMTYsIDE0OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI1NCwgMTc3LCAyMzUsIDIyNSwgMjI2LCA3NiwgCi0gICAgMSwgMjUyLCAzMywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MiwgMjA4LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQ4LCAKLSAgICAxOTYsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDEsIDI0NSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxMiwgMjksIDIzNSwgCi0gICAgMjI1LCAyMjYsIDc2LCAxLCAyMTAsIDk3LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQxLCAyMDIsIDIzNSwgMjI1LCAyMjYsIAotICAgIDc2LCAxLCAyMTYsIDIyNywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxMCwgMjMyLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgCi0gICAgMjM0LCAyMzEsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMzMsIDk5LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjMxLCA2OSwgCi0gICAgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyNywgMTk4LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjIxLCAyNTEsIDIzNSwgMjI1LCAKLSAgICAyMjYsIDc2LCAxLCAyMjUsIDIyNCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyMiwgMjYsIDIzNSwgMjI1LCAyMjYsIDc2LCAKLSAgICAxLCAyMjAsIDIyLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjE3LCAzNywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMTEsIAotICAgIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTA1LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDE1OCwgMjM1LCAyMjUsIDIyNiwgCi0gICAgNzYsIDU0LCAxNjEsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMjE2LCAyNDgsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMjE1LCAKLSAgICA3MywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEyMywgCi0gICAgMjE2LCAxNDgsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA2MSwgNTUsIDIwMiwgMSwgMjExLCAzNywgNjEsIDU1LCAyMDIsIDEsIAotICAgIDIxMSwgMzcsIDI1NCwgMjUyLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNzQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDc0LCA1NSwgCi0gICAgMjAyLCAxLCAyMTEsIDM3LCA3NiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDc4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAKLSAgICAyMzgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIyNiwgMjM4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU1LCAzNCwgNTUsIAotICAgIDIwMiwgMSwgMjExLCAzNywgMjU1LCAzNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjUxLCA1NSwgMjAyLCAxLCAKLSAgICAyMTEsIDM3LCAyNTQsIDI1MSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjI1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDIyNSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQ2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDI0NiwgCi0gICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NSwgOCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU1LCA4LCA1NSwgMjAyLCAxLCAKLSAgICAyMjYsIDE1MywgMjU0LCAyNTAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDIwLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKLSAgICAyNDUsIDIwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAxNzUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMTc1LCAKLSAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjMzLCA1NSwgMjAyLCAKLSAgICAxLCAyMjYsIDE1MywgMjU0LCAyNDQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjQ0LCA1NSwgMjAyLCAxLCAyMjYsIAotICAgIDE1MywgMjI2LCAyMzcsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIyNiwgMjM3LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAKLSAgICAxODcsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMTg3LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDMsIDU1LCAKLSAgICAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE2OSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTY3LCA1NSwgMjAyLCAxLCAKLSAgICAyMjYsIDE1MywgMjU0LCAxMzEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0MSwgNTUsIDIwMiwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAyNDEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDEzOSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxMzksIAotICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE1NSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxNTUsIDU1LCAyMDIsIAotICAgIDEsIDIyNiwgMTUzLCAyNDUsIDEyNiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxMjYsIDU1LCAyMDIsIDEsIDIxMSwgCi0gICAgMzcsIDI1NCwgMTIzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNDYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgCi0gICAgMjQwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxMTYsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE3OSwgNTUsIAotICAgIDIwMiwgMSwgMjI2LCAxNTMsIDI0MCwgMTIwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAyMjMsIDU1LCAyMDIsIDEsIAotICAgIDIxMSwgMzcsIDI0NSwgMjIzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCA1MywgNTUsIDIwMiwgMSwgMjExLCAzNywgCi0gICAgMjU0LCA1MywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIzNSwgMTg4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMzUsIDE4OCwgCi0gICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTYzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDE2MywgNTUsIDIwMiwgCi0gICAgMSwgMjI2LCAxNTMsIDI1NCwgNDksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgNDksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAKLSAgICAyNTQsIDIzOSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMjQ1LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzcsIAotICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDIzOSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjUzLCAyMzksIDU1LCAyMDIsIAotICAgIDEsIDIyNiwgMTUzLCAyNDUsIDgzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDgzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgCi0gICAgMjUzLCAyMTQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMjE0LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzQsIAotICAgIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjM0LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNDQsIDU1LCAyMDIsIAotICAgIDEsIDIyNiwgMTUzLCAyNTIsIDEzMywgMjIyLCAxMjksIDIxLCAxMTEsIDIyMiwgMTI5LCAyMSwgMTA1LCAyMjIsIDEyOSwgCi0gICAgMjEsIDE1OCwgMjIyLCAxMjksIDIxLCAxNjEsIDIyMiwgMTI5LCAyMSwgMTkwLCAyMjIsIDEyOSwgMjEsIDE5NSwgMjIyLCAKLSAgICAxMjksIDIxLCAxOTksIDIyMiwgMTI5LCAyMSwgMTk2LCAyMjIsIDEyOSwgMjEsIDIwMSwgMjIyLCAxMjksIDU0LCAyMTYsIAotICAgIDI0OCwgMjIyLCAxMjksIDU0LCAyMTUsIDczLCAyMjIsIDEyOSwgNTQsIDIxNiwgMTYzLCAyMjIsIDEyOSwgNTQsIDI0NCwgCi0gICAgMjMsIDIyMiwgMTI5LCA1NCwgMjQ0LCAxMjIsIDIyMiwgMTI5LCA1NCwgMjE5LCAxMTMsIDIyMiwgMTI5LCA1NCwgMjIwLCAKLSAgICAxMTgsIDIyMiwgMTI5LCA1NCwgMjQ1LCAxOTIsIDIyMiwgMTI5LCA1NCwgMjI4LCAyMDAsIDIyMiwgMTI5LCA1NCwgMTIzLCAKLSAgICAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAxMTMsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDEzNCwgMjQwLCAyMTcsIDIyMiwgCi0gICAgMTI5LCA1NCwgMjQ0LCAxOSwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMjQ0LCA4OSwgMjQwLCAyMTcsIDIyMiwgMTI5LCAKLSAgICA1NCwgMjE5LCAxMjcsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDIyMCwgMTI0LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAKLSAgICAyNDUsIDIwMSwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMjI4LCAyMDUsIDI0MCwgMjE3LCAyMjIsIDEyOSwgMjQ0LCAxMCwgCi0gICAgMTIzLCAyNDIsIDM0LCAyMjIsIDEyOSwgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMjIsIDEyOSwgMjQ0LCAxMCwgMTIzLCAKLSAgICAyMTYsIDE2OSwgMjIyLCAxMjksIDI0NCwgMTAsIDExMywgMjE2LCAxNjcsIDExOCwgNSwgMjUxLCA3LCAxMTgsIDUsIDI1NCwgCi0gICAgODMsIDExOCwgNSwgMjEzLCAxNDcsIDExOCwgNSwgMjM1LCAxMDgsIDExOCwgNSwgMjE0LCAxNjEsIDExOCwgMSwgNjEsIAotICAgIDExOCwgMSwgMjU1LCA4MiwgMTE4LCAxLCA3NCwgMTE4LCAxLCAyMzYsIDQwLCAxMTgsIDEsIDY5LCAxMTgsIDEsIDIxNCwgCi0gICAgMTE4LCAxMTgsIDEsIDE0OSwgMTUzLCAxMTgsIDEsIDE0OSwgMjIyLCAxODIsIDExOCwgMSwgMTQ5LCAxNTYsIDExOCwgMSwgCi0gICAgMTQ5LCAyMzIsIDE5MSwgMTE4LCAxLCA3NiwgMTE4LCAxLCAyNTQsIDIxMCwgMTE4LCAxLCA3OCwgMTE4LCAxLCAyNTMsIAotICAgIDIwMCwgMTE4LCAxLCAxNzYsIDExOCwgMSwgMjM0LCAxMzgsIDExOCwgMSwgMjQzLCAxNDIsIDExOCwgMSwgMjQzLCAwLCAKLSAgICAxMTgsIDEsIDIyOSwgODIsIDExOCwgMSwgMjUxLCA0MSwgMTE4LCAxLCAyNTAsIDE2NSwgMTE4LCAxLCAyMzUsIDE0NywgCi0gICAgMTE4LCAxLCAyMzUsIDEyMCwgMTE4LCAxLCAyMjcsIDE2OSwgMTE4LCAxLCAyMTUsIDE1NywgMTE4LCAxLCAyMTUsIDE0NSwgCi0gICAgMTE4LCAxLCAyNDgsIDE0MywgMTE4LCAxLCAyNDgsIDEyNywgMTE4LCAxLCAyMjgsIDExNSwgMTE4LCAxLCAyMTcsIDEwNiwgCi0gICAgMTE4LCAxLCAyMTYsIDIwOSwgMTE4LCAxLCAyNDgsIDIyOSwgMTE4LCAxLCAyNDgsIDMzLCAxMTgsIDEsIDE5OCwgMTE4LCAxLCAKLSAgICAxOTEsIDExOCwgMSwgMjI1LCAxNTAsIDExOCwgMSwgMjUyLCAxOTksIDExOCwgMSwgMjUyLCAyNiwgMTE4LCAxLCAxODYsIAotICAgIDExOCwgMSwgMTkyLCAxMTgsIDEsIDIwNSwgMTE4LCAxLCAyMzMsIDE0MSwgMTE4LCAxLCAyMTQsIDI3LCAxMTgsIDEsIDIyMCwgCi0gICAgMTA0LCAxMTgsIDEsIDIxOCwgMjI1LCAxMTgsIDEsIDIwNiwgMTE4LCAxLCAxNjIsIDExOCwgMSwgMjMyLCAxOTAsIDExOCwgCi0gICAgMSwgNTUsIDM2LCAyMzIsIDE4MSwgMTE4LCAxLCA1NSwgMzYsIDIyMiwgMTgxLCAxMTgsIDEsIDU1LCAzNiwgMjI4LCA5NywgCi0gICAgMTE4LCAyNSwgNSwgMjU1LCA4MiwgMTE4LCAyNSwgNSwgMjUyLCAyMywgMjU1LCA4MiwgMTE4LCAyNSwgNSwgNzQsIDExOCwgCi0gICAgMjUsIDUsIDIzNiwgNDAsIDExOCwgMjUsIDUsIDY5LCAxMTgsIDI1LCA1LCAyMTQsIDExOCwgMTE4LCAyNSwgNSwgMTQ5LCAKLSAgICAxNTMsIDExOCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDExOCwgMjUsIDUsIDE0OSwgMTU2LCAxMTgsIDI1LCA1LCAxNDksIAotICAgIDIzMiwgMTkxLCAxMTgsIDI1LCA1LCA3NiwgMTE4LCAyNSwgNSwgMjU0LCAyMTAsIDExOCwgMjUsIDUsIDc4LCAxMTgsIDI1LCAKLSAgICA1LCAyNTMsIDIwMCwgMTE4LCAyMTMsIDE1MiwgMTE4LCAyNDgsIDE4NiwgMTE4LCA1MiwgMjQ4LCAxODYsIDExOCwgMjI0LCAKLSAgICAxNDQsIDI0NywgMTI4LCAxMTgsIDIyNCwgMTQ0LCA1MiwgMjQ3LCAxMjgsIDExOCwgMjI0LCAxNDQsIDIzMiwgMjE5LCAxMTgsIAotICAgIDIyNCwgMTQ0LCAyNDksIDE0NSwgMTMwLCAxMTgsIDIyNCwgMTQ0LCAyMzIsIDEyMSwgMTE4LCA1NCwgMTExLCAxMTgsIDU0LCAKLSAgICAxMDUsIDExOCwgNTQsIDE1OCwgMTE4LCA1NCwgMTYxLCAxMTgsIDU0LCAxOTAsIDExOCwgNTQsIDE5NSwgMTE4LCA1NCwgCi0gICAgMTk5LCAxMTgsIDU0LCAxOTYsIDExOCwgNTQsIDIwMSwgMTE4LCA1NCwgMjE2LCAyNDgsIDExOCwgNTQsIDIxNSwgNzMsIAotICAgIDExOCwgNTQsIDIxNiwgMTYzLCAxMTgsIDU0LCAyNDQsIDIzLCAxMTgsIDU0LCAyNDQsIDEyMiwgMTE4LCA1NCwgMjE5LCAKLSAgICAxMTMsIDExOCwgNTQsIDIyMCwgMTE4LCAxMTgsIDU0LCAyNDUsIDE5MiwgMTE4LCA1NCwgMjI4LCAyMDAsIDExOCwgNTQsIAotICAgIDEyMywgMjQwLCAyMTcsIDExOCwgNTQsIDEyMywgMjE2LCAxNDgsIDExOCwgMjEsIDIxMCwgODYsIDExOCwgMjEsIDExMSwgCi0gICAgMTE4LCAyMSwgMTA1LCAxMTgsIDIxLCAxNTgsIDExOCwgMjEsIDE2MSwgMTE4LCAyMSwgMTkwLCAxMTgsIDIxLCAxOTUsIAotICAgIDExOCwgMjEsIDE5OSwgMTE4LCAyMSwgMTk2LCAxMTgsIDIxLCAyMDEsIDIzNCwgMjUwLCA1LCAyNTEsIDcsIDIzNCwgMjUwLCAKLSAgICA1LCAyNTQsIDgzLCAyMzQsIDI1MCwgNSwgMjEzLCAxNDcsIDIzNCwgMjUwLCAxLCA2MSwgMjM0LCAyNTAsIDEsIDI1NSwgODIsIAotICAgIDIzNCwgMjUwLCAxLCA3NCwgMjM0LCAyNTAsIDEsIDIzNiwgNDAsIDIzNCwgMjUwLCAxLCA2OSwgMjM0LCAyNTAsIDEsIDIxNCwgCi0gICAgMTE4LCAyMzQsIDI1MCwgMSwgNzYsIDIzNCwgMjUwLCAxLCAyNTQsIDIxMCwgMjM0LCAyNTAsIDEsIDc4LCAyMzQsIDI1MCwgCi0gICAgMSwgMjUzLCAyMDAsIDIzNCwgMjUwLCAxLCAxNzYsIDIzNCwgMjUwLCAxLCAyMzQsIDEzOCwgMjM0LCAyNTAsIDEsIDI0MywgCi0gICAgMTQyLCAyMzQsIDI1MCwgMSwgMjQzLCAwLCAyMzQsIDI1MCwgMSwgMjI5LCA4MiwgMjM0LCAyNTAsIDEsIDI1MSwgNDEsIAotICAgIDIzNCwgMjUwLCAxLCAyNTAsIDE2NSwgMjM0LCAyNTAsIDEsIDIzNSwgMTQ3LCAyMzQsIDI1MCwgMSwgMjM1LCAxMjAsIDIzNCwgCi0gICAgMjUwLCAxLCAyMjcsIDE2OSwgMjM0LCAyNTAsIDEsIDIxNSwgMTU3LCAyMzQsIDI1MCwgMSwgMjE1LCAxNDUsIDIzNCwgMjUwLCAKLSAgICAxLCAyNDgsIDE0MywgMjM0LCAyNTAsIDEsIDI0OCwgMTMyLCAyMzQsIDI1MCwgMSwgMjQ4LCAxMjcsIDIzNCwgMjUwLCAxLCAKLSAgICAyMjMsIDQyLCAyMzQsIDI1MCwgMSwgMjI4LCAxMTUsIDIzNCwgMjUwLCAxLCAyMTcsIDEwNiwgMjM0LCAyNTAsIDEsIDIxNiwgCi0gICAgMjA5LCAyMzQsIDI1MCwgMSwgMjQ4LCAyMjksIDIzNCwgMjUwLCAxLCAyNDgsIDMzLCAyMzQsIDI1MCwgMSwgMTk4LCAyMzQsIAotICAgIDI1MCwgMSwgMTkxLCAyMzQsIDI1MCwgMSwgMjI1LCAxNTAsIDIzNCwgMjUwLCAxLCAyNTIsIDE5OSwgMjM0LCAyNTAsIDEsIAotICAgIDI1MiwgMjYsIDIzNCwgMjUwLCAxLCAxODYsIDIzNCwgMjUwLCAxLCAxOTIsIDIzNCwgMjUwLCAxLCAyMDUsIDIzNCwgMjUwLCAKLSAgICAxLCAyMzMsIDE0MSwgMjM0LCAyNTAsIDEsIDIxNCwgMjcsIDIzNCwgMjUwLCAxLCAyMjAsIDEwNCwgMjM0LCAyNTAsIDEsIAotICAgIDIxOCwgMjI1LCAyMzQsIDI1MCwgMSwgMjA2LCAyMzQsIDI1MCwgMSwgMTYyLCAyMzQsIDI1MCwgMjUsIDUsIDI1NSwgODIsIAotICAgIDIzNCwgMjUwLCAyNSwgNSwgNzQsIDIzNCwgMjUwLCAyNSwgNSwgMjM2LCA0MCwgMjM0LCAyNTAsIDI1LCA1LCA2OSwgMjM0LCAKLSAgICAyNTAsIDI1LCA1LCAyMTQsIDExOCwgMjM0LCAyNTAsIDI1LCA1LCA3NiwgMjM0LCAyNTAsIDI1LCA1LCAyNTQsIDIxMCwgCi0gICAgMjM0LCAyNTAsIDI1LCA1LCA3OCwgMjM0LCAyNTAsIDI1LCA1LCAyNTMsIDIwMCwgMjM0LCAyNTAsIDUsIDIxMywgMTUyLCAKLSAgICAyMzQsIDI1MCwgNSwgMjI3LCAyMDksIDIzNCwgMjUwLCAyNTUsIDMwLCA1MCwgMjM0LCAyNTAsIDI0NSwgMTI5LCA1MCwgCi0gICAgMjM0LCAyNTAsIDU0LCA1MCwgMjM0LCAyNTAsIDIyMSwgMTc1LCA3OSwgMjM0LCAyNTAsIDUyLCAyMjEsIDE3NSwgNzksIAotICAgIDIzNCwgMjUwLCAyNDgsIDE4NiwgMjM0LCAyNTAsIDUyLCAyNDgsIDE4NiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjIyLCAyMCwgCi0gICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjE3LCA4MSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjUyLCAxNzYsIDIxOSwgMzgsIAotICAgIDIxOSwgNDYsIDEsIDI1MSwgMzEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI0OCwgMjExLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAKLSAgICAyNDMsIDEyNywgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjMxLCAyMTUsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyOSwgNzksIAotICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzMywgMTE4LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjksIDIxOCwgMjE5LCAzOCwgCi0gICAgMjE5LCA0NiwgMSwgMjE0LCAyNCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI2LCA3NywgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCi0gICAgMjExLCA4NCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjIzLCAxNzEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI0MiwgNDQsIAotICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNCwgMjU0LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzUsIDE0MiwgMjE5LCAzOCwgCi0gICAgMjE5LCA0NiwgMSwgMjI3LCAxNjYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI1NCwgMjE4LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAKLSAgICAyNDUsIDIxNSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM2LCA0MSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjE0LCAyMDgsIAotICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyNiwgMjI2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDUsIDIwNSwgMjE5LCAzOCwgCi0gICAgMjE5LCA0NiwgMSwgMjMxLCAyMjgsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAyMTAsIDg2LCAyMTksIDM4LCAyMTksIDQ2LCAKLSAgICAyMSwgMTExLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTA1LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTU4LCAyMTksIDM4LCAKLSAgICAyMTksIDQ2LCAyMSwgMTYxLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTkwLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk1LCAKLSAgICAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk5LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk2LCAyMTksIDM4LCAyMTksIDQ2LCAKLSAgICAyMSwgMjAxLCAyNTAsIDE1OSwgNSwgMjUxLCA3LCAyNTAsIDE1OSwgNSwgMjU0LCA4MywgMjUwLCAxNTksIDUsIDIxMywgCi0gICAgMTQ3LCAyNTAsIDE1OSwgMSwgMjU1LCA4MiwgMjUwLCAxNTksIDEsIDc0LCAyNTAsIDE1OSwgMSwgNjksIDI1MCwgMTU5LCAxLCAKLSAgICA3NiwgMjUwLCAxNTksIDEsIDIzNSwgMTYsIDI1MCwgMTU5LCAxLCAyMzQsIDEzNywgMjUwLCAxNTksIDEsIDI0MywgMTM5LCAKLSAgICAyNTAsIDE1OSwgMSwgMjQyLCAyNTUsIDI1MCwgMTU5LCAxLCAyMjksIDgxLCAyNTAsIDE1OSwgMSwgMjUxLCA0MCwgMjUwLCAKLSAgICAxNTksIDEsIDI1MCwgMTY0LCAyNTAsIDE1OSwgMSwgMjM1LCAxNDYsIDI1MCwgMTU5LCAxLCAyMzUsIDExOSwgMjUwLCAxNTksIAotICAgIDEsIDIyNywgMTY4LCAyNTAsIDE1OSwgMSwgMjE1LCAxNTYsIDI1MCwgMTU5LCAxLCAyMTUsIDE0NCwgMjUwLCAxNTksIDEsIAotICAgIDI0OCwgMTQyLCAyNTAsIDE1OSwgMSwgMjQ4LCAxMjYsIDI1MCwgMTU5LCAxLCAyMjgsIDExNCwgMjUwLCAxNTksIDEsIDIxNywgCi0gICAgMTAyLCAyNTAsIDE1OSwgMSwgMjE2LCAyMDgsIDI1MCwgMTU5LCAxLCAyNDgsIDIyOCwgMjUwLCAxNTksIDEsIDI0OCwgMzIsIAotICAgIDI1MCwgMTU5LCAxLCAyMjksIDIzMCwgMjUwLCAxNTksIDEsIDIyNiwgOTMsIDI1MCwgMTU5LCAxLCAyMjUsIDE0OSwgMjUwLCAKLSAgICAxNTksIDEsIDI1MiwgMTk3LCAyNTAsIDE1OSwgMSwgMjUyLCAyNSwgMjUwLCAxNTksIDEsIDIzMSwgMjQyLCAyNTAsIDE1OSwgCi0gICAgMSwgMjEwLCAxNjcsIDI1MCwgMTU5LCAxLCAyMTEsIDEwMywgMjUwLCAxNTksIDEsIDIyMywgMTg3LCAyNTAsIDE1OSwgMSwgCi0gICAgMjMzLCAxNDAsIDI1MCwgMTU5LCAxLCAyMTIsIDY0LCAyNTAsIDE1OSwgMSwgMjIyLCAzMywgMjUwLCAxNTksIDEsIDI0MiwgCi0gICAgNTMsIDI1MCwgMTU5LCAyNSwgNSwgNjEsIDI1MCwgMTU5LCAyNSwgNSwgNzQsIDI1MCwgMTU5LCAyNSwgNSwgMjM2LCA0MCwgCi0gICAgMjUwLCAxNTksIDI1LCA1LCA2OSwgMjUwLCAxNTksIDI1LCA1LCAyMTQsIDExOCwgMjUwLCAxNTksIDI1LCA1LCA3NiwgMjUwLCAKLSAgICAxNTksIDI1LCA1LCAyNTQsIDIxMCwgMjUwLCAxNTksIDI1LCA1LCA3OCwgMjUwLCAxNTksIDI1LCA1LCAyNTMsIDIwMCwgCi0gICAgMjUwLCAxNTksIDI1LCA1LCAyMjYsIDIyMywgMjUwLCAxNTksIDE0NCwgNzksIDI1MCwgMTU5LCAyNTMsIDIwMSwgNzksIAotICAgIDI1MCwgMTU5LCAyMTMsIDE1MiwgMjUwLCAxNTksIDIzMSwgMjQwLCAyNTAsIDE1OSwgMjEsIDIxMCwgODYsIDI1MCwgMTU5LCAKLSAgICAyMSwgMTExLCAyNTAsIDE1OSwgMjEsIDEwNSwgMjUwLCAxNTksIDIxLCAxNTgsIDI1MCwgMTU5LCAyMSwgMTYxLCAyNTAsIAotICAgIDE1OSwgMjEsIDE5MCwgMjUwLCAxNTksIDIxLCAxOTUsIDI1MCwgMTU5LCAyMSwgMTk5LCAyNTAsIDE1OSwgMjEsIDE5NiwgCi0gICAgMjUwLCAxNTksIDIxLCAyMDEsIDI1MCwgMTU5LCAyMjEsIDE3NSwgNzksIDI1MCwgMTU5LCAyNDgsIDE4NiwgMjUwLCAxNTksIAotICAgIDUyLCAyNDgsIDE4NiwgMjUwLCAxNTksIDIyNCwgMTYsIDc5LCAxNzQsIDUsIDI1MSwgNywgMTc0LCA1LCAyNTQsIDgzLCAKLSAgICAxNzQsIDUsIDIxMywgMTQ3LCAxNzQsIDEsIDYxLCAxNzQsIDEsIDI1NSwgODIsIDE3NCwgMSwgNzQsIDE3NCwgMSwgMjM2LCAKLSAgICA0MCwgMTc0LCAxLCA2OSwgMTc0LCAxLCAyMTQsIDExOCwgMTc0LCAxLCAxNDksIDE1MywgMTc0LCAxLCAxNDksIDIyMiwgCi0gICAgMTgyLCAxNzQsIDEsIDE0OSwgMTU2LCAxNzQsIDEsIDE0OSwgMjMyLCAxOTEsIDE3NCwgMSwgNzYsIDE3NCwgMSwgMjU0LCAKLSAgICAyMTAsIDE3NCwgMSwgNzgsIDE3NCwgMSwgMjUzLCAyMDAsIDE3NCwgMSwgMTc2LCAxNzQsIDEsIDIzNCwgMTM4LCAxNzQsIDEsIAotICAgIDI0MywgMTQyLCAxNzQsIDEsIDI0MywgMCwgMTc0LCAxLCAyMjksIDgyLCAxNzQsIDEsIDI1MSwgNDEsIDE3NCwgMSwgMjUwLCAKLSAgICAxNjUsIDE3NCwgMSwgMjM1LCAxNDcsIDE3NCwgMSwgMjM1LCAxMjAsIDE3NCwgMSwgMjI3LCAxNjksIDE3NCwgMSwgMjE1LCAKLSAgICAxNTcsIDE3NCwgMSwgMjE1LCAxNDUsIDE3NCwgMSwgMjQ4LCAxNDMsIDE3NCwgMSwgMjQ4LCAxMjcsIDE3NCwgMSwgMjI4LCAKLSAgICAxMTUsIDE3NCwgMSwgMjE3LCAxMDYsIDE3NCwgMSwgMjE2LCAyMDksIDE3NCwgMSwgMjQ4LCAyMjksIDE3NCwgMSwgMjQ4LCAKLSAgICAzMywgMTc0LCAxLCAxOTgsIDE3NCwgMSwgMTkxLCAxNzQsIDEsIDIyNSwgMTUwLCAxNzQsIDEsIDI1MiwgMTk5LCAxNzQsIDEsIAotICAgIDI1MiwgMjYsIDE3NCwgMSwgMTg2LCAxNzQsIDEsIDE5MiwgMTc0LCAxLCAyMDUsIDE3NCwgMSwgMjMzLCAxNDEsIDE3NCwgMSwgCi0gICAgMjMyLCAxOTAsIDE3NCwgMSwgMjE0LCAyNywgMTc0LCAxLCAyMjAsIDEwNCwgMTc0LCAxLCAyMTgsIDIyNSwgMTc0LCAxLCAKLSAgICAyMDYsIDE3NCwgMSwgMTYyLCAxNzQsIDI1LCA1LCAyNTUsIDgyLCAxNzQsIDI1LCA1LCA3NCwgMTc0LCAyNSwgNSwgMjM2LCAKLSAgICA0MCwgMTc0LCAyNSwgNSwgNjksIDE3NCwgMjUsIDUsIDIxNCwgMTE4LCAxNzQsIDI1LCA1LCAxNDksIDE1MywgMTc0LCAyNSwgCi0gICAgNSwgMTQ5LCAyMjIsIDE4MiwgMTc0LCAyNSwgNSwgMTQ5LCAxNTYsIDE3NCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3NCwgCi0gICAgMjUsIDUsIDc2LCAxNzQsIDI1LCA1LCAyNTQsIDIxMCwgMTc0LCAyNSwgNSwgNzgsIDE3NCwgMjUsIDUsIDI1MywgMjAwLCAKLSAgICAxNzQsIDUsIDIxMywgMTUyLCAxNzQsIDUsIDI1MywgMTgzLCAxNzQsIDUsIDIzNSwgMTA4LCAxNzQsIDUsIDIxNCwgMTYxLCAKLSAgICAxNzQsIDIyNiwgMjA4LCAxNzQsIDI0OCwgMTg2LCAxNzQsIDUyLCAyNDgsIDE4NiwgMTc0LCAyNTUsIDMwLCA1MCwgMTc0LCAKLSAgICAyMjAsIDEzOSwgMTc0LCAyMSwgMjEwLCA4NiwgMTc0LCAyMSwgMTExLCAxNzQsIDIxLCAxMDUsIDE3NCwgMjEsIDE1OCwgCi0gICAgMTc0LCAyMSwgMTYxLCAxNzQsIDIxLCAxOTAsIDE3NCwgMjEsIDE5NSwgMTc0LCAyMSwgMTk5LCAxNzQsIDIxLCAxOTYsIAotICAgIDE3NCwgMjEsIDIwMSwgMjE3LCA3MCwgMSwgNjEsIDIxNywgNzAsIDEsIDI1NSwgODIsIDIxNywgNzAsIDEsIDc0LCAyMTcsIAotICAgIDcwLCAxLCAyMzYsIDQwLCAyMTcsIDcwLCAxLCA2OSwgMjE3LCA3MCwgMSwgMjE0LCAxMTgsIDIxNywgNzAsIDEsIDc2LCAKLSAgICAyMTcsIDcwLCAxLCAyNTQsIDIxMCwgMjE3LCA3MCwgMSwgNzgsIDIxNywgNzAsIDEsIDI1MywgMjAwLCAyMTcsIDcwLCAxLCAKLSAgICAxNzYsIDIxNywgNzAsIDEsIDIzNCwgMTM4LCAyMTcsIDcwLCAxLCAyNDMsIDE0MiwgMjE3LCA3MCwgMSwgMjQzLCAwLCAyMTcsIAotICAgIDcwLCAxLCAyMjksIDgyLCAyMTcsIDcwLCAxLCAyNTEsIDQxLCAyMTcsIDcwLCAxLCAyNTAsIDE2NSwgMjE3LCA3MCwgMSwgCi0gICAgMjM1LCAxNDcsIDIxNywgNzAsIDEsIDIzNSwgMTIwLCAyMTcsIDcwLCAxLCAyMjcsIDE2OSwgMjE3LCA3MCwgMSwgMjE1LCAKLSAgICAxNTcsIDIxNywgNzAsIDEsIDIxNSwgMTQ1LCAyMTcsIDcwLCAxLCAyNDgsIDE0MywgMjE3LCA3MCwgMSwgMjQ4LCAxMjcsIAotICAgIDIxNywgNzAsIDEsIDIyOCwgMTE1LCAyMTcsIDcwLCAxLCAyMTcsIDEwNiwgMjE3LCA3MCwgMSwgMjE2LCAyMDksIDIxNywgCi0gICAgNzAsIDEsIDI0OCwgMjI5LCAyMTcsIDcwLCAxLCAyNDgsIDMzLCAyMTcsIDcwLCAxLCAxOTgsIDIxNywgNzAsIDEsIDE5MSwgCi0gICAgMjE3LCA3MCwgMSwgMjI1LCAxNTAsIDIxNywgNzAsIDEsIDI1MiwgMTk5LCAyMTcsIDcwLCAxLCAyNTIsIDI2LCAyMTcsIDcwLCAKLSAgICAxLCAxODYsIDIxNywgNzAsIDEsIDE5MiwgMjE3LCA3MCwgMSwgMjA1LCAyMTcsIDcwLCAxLCAyMzMsIDE0MSwgMjE3LCA3MCwgCi0gICAgMSwgMjE0LCAyNywgMjE3LCA3MCwgMSwgMjIwLCAxMDQsIDIxNywgNzAsIDEsIDIwNiwgMjE3LCA3MCwgMSwgMTYyLCAyMTcsIAotICAgIDcwLCAxLCAyMjIsIDE4MSwgMjE3LCA3MCwgNSwgMjU0LCA4MywgMjE3LCA3MCwgNSwgMjEzLCAxNDcsIDIxNywgNzAsIDI1LCAKLSAgICA1LCAyNTUsIDgyLCAyMTcsIDcwLCAyNSwgNSwgNzQsIDIxNywgNzAsIDI1LCA1LCAyMzYsIDQwLCAyMTcsIDcwLCAyNSwgNSwgCi0gICAgNjksIDIxNywgNzAsIDI1LCA1LCAyMTQsIDExOCwgMjE3LCA3MCwgMjUsIDUsIDc2LCAyMTcsIDcwLCAyNSwgNSwgMjU0LCAKLSAgICAyMTAsIDIxNywgNzAsIDI1LCA1LCA3OCwgMjE3LCA3MCwgMjUsIDUsIDI1MywgMjAwLCAyMTcsIDcwLCA1LCAyMTMsIDE1MiwgCi0gICAgMjE3LCA3MCwgNSwgMjI3LCAyMDksIDIxNywgNzAsIDIxLCAyMTAsIDg2LCAyMTcsIDcwLCAyMSwgMTExLCAyMTcsIDcwLCAKLSAgICAyMSwgMTA1LCAyMTcsIDcwLCAyMSwgMTU4LCAyMTcsIDcwLCAyMSwgMTYxLCAyMTcsIDcwLCAyMSwgMTkwLCAyMTcsIDcwLCAKLSAgICAyMSwgMTk1LCAyMTcsIDcwLCAyMSwgMTk5LCAyMTcsIDcwLCAyMSwgMTk2LCAyMTcsIDcwLCAyMSwgMjAxLCAxNSwgNSwgNjEsIAotICAgIDE1LCA1LCAxMTYsIDMwLCA2MSwgMTUsIDUsIDExNiwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMTE2LCAzMCwgMjQzLCAxMTIsIAotICAgIDIxNiwgMjQwLCAxNSwgNSwgMTE2LCAzMCwgMTYyLCAxNSwgNSwgMTE2LCAzMCwgMjM2LCA0MiwgMTUsIDUsIDExNiwgMzAsIAotICAgIDIzMywgMTIyLCAyNDIsIDEwMSwgMTUsIDUsIDExNiwgMzAsIDIzMCwgNjYsIDE1LCA1LCAxMTYsIDMwLCAyMjIsIDIzLCAxNSwgCi0gICAgNSwgMjU1LCA4NCwgMTUsIDUsIDI1NSwgMzQsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyNTUsIDM1LCAKLSAgICAzMCwgMjQ2LCA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAyNTUsIDM1LCAzMCwgCi0gICAgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDE2MiwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzYsIDQzLCAKLSAgICAyNDIsIDEwMSwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjU1LCAzNSwgMzAsIDIzMywgMTIzLCAxNSwgCi0gICAgNSwgMjU1LCAzNSwgMzAsIDIyMCwgNTAsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNjksIDE1LCA1LCAKLSAgICAyNTUsIDM1LCAyNDIsIDEwMSwgMTUsIDUsIDI1NSwgMzIsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjUyLCAxNjgsIDE1LCA1LCAKLSAgICAyNTUsIDMzLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjU1LCAzMywgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIAotICAgIDE1OCwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMjAsIDEwMiwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMTcsIDczLCAxNSwgNSwgCi0gICAgMjU1LCA4LCAxNSwgNSwgMjU0LCAxOTUsIDE1LCA1LCAyNTQsIDE5NiwgMzAsIDI0NSwgOTUsIDE1LCA1LCAyNTQsIDE5NiwgCi0gICAgMzAsIDIyMCwgMTIsIDk2LCAyNDIsIDE5NywgMTUsIDUsIDI1NCwgMTg3LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNTQsIAotICAgIDE4NywgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjQ3LCAyMjQsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI0MiwgMTk3LCAxNSwgNSwgCi0gICAgMjU0LCAxODgsIDMwLCAxNjIsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIzNSwgNSwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjM0LCAKLSAgICA5OCwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAKLSAgICAyNTQsIDE4NCwgMTUsIDUsIDI1NCwgMTc3LCAxNSwgNSwgMjU0LCAxNDAsIDE1LCA1LCAyNTQsIDE0MSwgMzAsIDIyMCwgNjUsIAotICAgIDE1LCA1LCAyNTQsIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxMTUsIDI1NCwgMTMxLCAxNSwgNSwgMjU0LCAxMzIsIDEzNCwgCi0gICAgMjE2LCA4NiwgMTUsIDUsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjIsIDIyNiwgMTY4LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIxLCAKLSAgICAxNSwgNSwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMiwgMjE4LCAyMzUsIDE1LCA1LCAyNTQsIDEwMiwgMTUsIDUsIDI1NCwgNzUsIAotICAgIDE1LCA1LCAyNTQsIDQzLCAxNSwgNSwgMjU0LCA0NCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjU0LCAxNiwgMTUsIDUsIDI1MywgCi0gICAgMjQ0LCAxNSwgNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDI0MCwgMjEwLCA0MCwgMjE2LCAyNDAsIDE1LCA1LCAyNTMsIAotICAgIDI0MCwgMjM1LCA5LCAyMTYsIDI0MCwgMTUsIDUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAyMTUsIDExNSwgMTE1LCAKLSAgICAyMTUsIDExNSwgMjE1LCAxMTUsIDExNSwgMjE1LCAxMTUsIDIyNiwgMjUsIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIAotICAgIDI0MCwgMTE1LCAyNTMsIDIzOSwgMTUsIDUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAyNDksIAotICAgIDEzMywgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDIzNywgMTUsIDUsIDI1MywgCi0gICAgMjM0LCAxNSwgNSwgMjUyLCAxOTksIDE1LCA1LCAyNTIsIDE4NCwgMTUsIDUsIDI1MiwgMTc5LCAxNSwgNSwgMjUyLCAxNzUsIAotICAgIDE1LCA1LCAyNTIsIDE2OSwgMTUsIDUsIDI1MiwgMTcwLCAxMTUsIDI1MiwgMTY5LCAxNSwgNSwgMjUyLCAxNjgsIDE1LCA1LCAKLSAgICAxMzAsIDE1LCA1LCAyNTIsIDE0OCwgMTUsIDUsIDI1MiwgMTQsIDE1LCA1LCAyNTIsIDE1LCAzMCwgNjEsIDE1LCA1LCAyNTIsIAotICAgIDE1LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNTIsIDE1LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyNTEsIDEzMywgCi0gICAgMTUsIDUsIDI1MSwgMTM0LCAxMTUsIDI1MSwgMTM0LCAyNTUsIDM0LCAxNSwgNSwgMjUxLCAxMzQsIDExNSwgMjUxLCAxMzQsIAotICAgIDIxNCwgMTkwLCAxNSwgNSwgMjUxLCAxMzQsIDI0OSwgMTMzLCAyNTEsIDEzMywgMTUsIDUsIDI1MSwgMTE3LCAxNSwgNSwgCi0gICAgMjUxLCAxMTgsIDExNSwgMjUxLCAxMTcsIDE1LCA1LCAyNTEsIDEwNiwgMTUsIDUsIDI1MSwgMTA1LCAxNSwgNSwgMjQ4LCAKLSAgICAyMjksIDE1LCA1LCAyNDgsIDIyMCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMTE2LCA5NiwgMjMxLCAxNTIsIAotICAgIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI1NCwgMTQwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKLSAgICAyNTIsIDE2OCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjUyLCAxNCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIAotICAgIDcyLCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MywgMTQzLCA5NiwgMjMxLCAxNTIsIAotICAgIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MiwgMjIxLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKLSAgICAyNDIsIDIwNCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjQyLCAxMTAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCAKLSAgICA3MiwgMzAsIDE2MiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjM1LCAxODYsIDE1LCA1LCAyNDgsIDIyMSwgCi0gICAgMjM0LCA3MiwgMzAsIDIzNSwgMTg3LCA5NiwgMjMyLCAxMDMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzNCwgCi0gICAgMjQ4LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzMsIDE0MSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAKLSAgICAzMCwgMjMyLCAxMDMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzMiwgMTA0LCA5NiwgMjMxLCAxNTEsIDE1LCAKLSAgICA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzMiwgODksIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIyOSwgCi0gICAgMTEyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMjYsIDI2LCA5NiwgMjI2LCAyNSwgMTUsIDUsIDI0OCwgMjIxLCAKLSAgICAyMzQsIDcyLCAzMCwgMjE5LCAxOTMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIxNywgNzMsIDE1LCA1LCAyNDgsIAotICAgIDIyMSwgMjM0LCA3MiwgMzAsIDIxNCwgMjMxLCA5NiwgMjQyLCAyMDQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIAotICAgIDIxNCwgMTI2LCAxNSwgNSwgMjQ4LCAxOTUsIDE1LCA1LCAyNDgsIDE3NCwgMTUsIDUsIDI0OCwgMTczLCAxNSwgNSwgMjQ4LCAKLSAgICAxNzIsIDE1LCA1LCAyNDgsIDExLCAxNSwgNSwgMjQ3LCAyNTAsIDE1LCA1LCAyNDcsIDIyNSwgMTUsIDUsIDI0NywgMjI2LCAKLSAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0NywgMjI0LCAxNSwgNSwgMjQ3LCAyMTQsIDE1LCA1LCAyNDcsIDIxNSwgMjM0LCAyMTQsIAotICAgIDEwNCwgMjQyLCAxMDIsIDI0NywgMTk1LCAxNSwgNSwgMjQ3LCAxOTUsIDE1LCA1LCAyNDYsIDg2LCAxNSwgNSwgMjQ2LCA4NywgCi0gICAgMTE1LCAyNDYsIDg2LCAxNSwgNSwgMjQ2LCA4NywgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDg3LCAyMjAsIDQ3LCAxNSwgNSwgCi0gICAgMjQ2LCA4NCwgMTUsIDUsIDI0NiwgODUsIDMwLCAyNDUsIDgwLCAxNSwgNSwgMjQ2LCA4MywgMTUsIDUsIDI0NiwgODIsIDE1LCAKLSAgICA1LCAyNDYsIDgxLCAxNSwgNSwgMjQ2LCA4MCwgMTUsIDUsIDI0NiwgNzYsIDE1LCA1LCAyNDYsIDc0LCAxNSwgNSwgMjQ2LCAKLSAgICA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDc1LCAyNDIsIDEwMiwgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDczLCAxNSwgNSwgCi0gICAgMjQ2LCA2NiwgMTUsIDUsIDc2LCAxNSwgNSwgMTYwLCAzMCwgMjI2LCAyNSwgMTUsIDUsIDE2MCwgMTE1LCAxNjAsIDIyNywgCi0gICAgMTk5LCAxMTUsIDIyNywgMTk4LCAxNSwgNSwgMjQ1LCAyNDIsIDE1LCA1LCAyNDUsIDI0MywgMzAsIDExNiwgOTYsIDI0MiwgCi0gICAgNTYsIDk2LCAyNDgsIDIyOSwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNDUsIDI0MywgMzAsIAotICAgIDIzMCwgMjM1LCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAyMjAsIDY1LCAxNSwgCi0gICAgNSwgMjQ1LCAyNDMsIDMwLCA2OSwgMTUsIDUsIDI0NSwgMjE5LCAxNSwgNSwgMjQ1LCAyMDgsIDE1LCA1LCAyNDUsIDE4MiwgCi0gICAgMTUsIDUsIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDMwLCAyNDMsIDExMSwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjQzLCAKLSAgICAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQ1LCAxNTksIDMwLCAyMzEsIDk2LCAxNSwgNSwgMjQ1LCAxNTksIDI0OSwgMTMzLCAKLSAgICAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAyMjYsIDE2OCwgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMjE4LCAyMzUsIAotICAgIDE1LCA1LCAyNDUsIDk3LCAxNSwgNSwgMjQ1LCA5NSwgMTUsIDUsIDI0NSwgODAsIDE1LCA1LCAyNDUsIDE4LCAxNSwgNSwgCi0gICAgMjQ1LCAxOSwgMzAsIDYxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDExNiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgCi0gICAgMzAsIDExNiwgOTYsIDIzMywgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAKLSAgICAyNDUsIDE5LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjQ2LCA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIAotICAgIDE5LCAzMCwgMjQ2LCA3NSwgMjQyLCAxMDIsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDE2MiwgMTUsIDUsIDI0NSwgCi0gICAgMTksIDMwLCAyNDIsIDU2LCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIAotICAgIDI0NSwgMTksIDMwLCAyMzQsIDIxMywgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzQsIDIxNCwgMjE4LCAyMzUsIDE1LCA1LCAKLSAgICAyNDUsIDE5LCAzMCwgMjMzLCAyMjEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgCi0gICAgMjMzLCAxMTEsIDMwLCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzIsIDI0NywgMTUsIDUsIDI0NSwgMTksIDMwLCAKLSAgICAyMzIsIDEwMywgMTUsIDUsIDI0NSwgMTksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMTQsIDIxOSwgMTUsIAotICAgIDUsIDI0MywgMTQyLCAxNSwgNSwgMjQzLCAxNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQzLCAxNDAsIDE1LCA1LCAyNDMsIDE0MSwgCi0gICAgMzAsIDExNiwgOTYsIDI0OCwgMjMwLCA5NiwgMTYyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAxMTYsIDk2LCAxNjIsIDE1LCA1LCAKLSAgICAyNDMsIDE0MSwgMzAsIDExNiwgOTYsIDIzNiwgNDIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1NSwgMzMsIDIxNiwgMjQxLCAKLSAgICA5NiwgMjE3LCA5NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MywgCi0gICAgMjM5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTMsIDIzOCwgOTYsIDI0MywgMTI1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKLSAgICAyNTIsIDE4NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUyLCAxNDksIDk2LCAyMDUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAotICAgIDI1MSwgMTA2LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTEsIDEwNywgOTYsIDIwNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCi0gICAgMjQ4LCAyMjksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0OCwgMTEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NywgMjI2LCAKLSAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ2LCA4NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxODIsIAotICAgIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTgzLCA5NiwgMjMzLCAxNDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgCi0gICAgMTU4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE1OSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgCi0gICAgMTQxLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDI0MywgCi0gICAgMTQxLCAzMCwgMjQyLCAyMjEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgMjE5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKLSAgICAyNDIsIDIyMCwgOTYsIDYxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDIwNSwgOTYsIDIxOCwgODQsIDE1LCA1LCAyNDMsIAotICAgIDE0MSwgMzAsIDI0MiwgNTYsIDk2LCAyMzIsIDEwNCwgOTYsIDI0NSwgODAsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgCi0gICAgMzcsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgMzgsIDk2LCAyMzMsIDE0MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQxLCAKLSAgICAxODgsIDk2LCAyMzIsIDI0NywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQwLCAyMjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAotICAgIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzUsIDE3MywgOTYsIDI0MCwgMjMwLCA5NiwgMjUzLCAKLSAgICAyMzksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDIxMywgMTUsIDUsIAotICAgIDI0MywgMTQxLCAzMCwgMjM0LCA5NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCA5NiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgCi0gICAgMjQzLCAxNDEsIDMwLCAyMzMsIDIyMiwgOTYsIDI1NCwgMTMxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzMsIDE0MSwgMTUsIAotICAgIDUsIDI0MywgMTQxLCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzAsIDIzNSwgCi0gICAgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyNywgMTk5LCAxMTUsIDIyNywgCi0gICAgMTk4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAxOTEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyNDMsIAotICAgIDE0MSwgMzAsIDIyMSwgMjMzLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKLSAgICAyMjAsIDY2LCA5NiwgMjE1LCA5OSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIwLCAzMiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCi0gICAgMjE4LCA0NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjE3LCA3MywgMTUsIDUsIDI0MywgMTQxLCAzMCwgNjksIDE1LCA1LCAKLSAgICAyNDMsIDE0MSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMTQsIDIyMCwgOTYsIDI0NiwgODYsIDE1LCAKLSAgICA1LCAyNDMsIDE0MSwgMTE1LCAyNDMsIDE0MCwgMTUsIDUsIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzYsIDI0OSwgMTMzLCAKLSAgICAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTMzLCAxNSwgNSwgMjQzLCAxMzQsIDExNSwgMjQzLCAxMzQsIDI0MywgMTA0LCAxMTUsIAotICAgIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAxMjUsIDE1LCA1LCAyNDMsIDEyNiwgMjQzLCAxMzQsIDExNSwgMjQzLCAxMzQsIDI0MywgCi0gICAgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAxMjQsIDE1LCA1LCAyNDMsIDEyMiwgMTUsIDUsIDI0MywgMTEzLCAKLSAgICAxNSwgNSwgMjQzLCAxMTEsIDE1LCA1LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIDExMiwgMTE1LCAyNDMsIAotICAgIDExMSwgMTUsIDUsIDI0MywgMTEyLCAyNDksIDEzMywgMjQzLCAxMTEsIDE1LCA1LCAyNDMsIDEwMywgMTUsIDUsIDI0MywgCi0gICAgMTAyLCAxNSwgNSwgMjQzLCA5NywgMTUsIDUsIDI0MywgNDMsIDE1LCA1LCAyNDMsIDQ0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAKLSAgICAyNDIsIDIyMSwgMTUsIDUsIDI0MiwgMjIyLCAzMCwgNzYsIDE1LCA1LCAyNDIsIDIyMiwgMzAsIDY5LCAxNSwgNSwgMjQyLCAKLSAgICAyMjIsIDI0OSwgMTMzLCAyNDIsIDIyMSwgMTUsIDUsIDI0MiwgMjE5LCAxNSwgNSwgMjQyLCAyMjAsIDExNSwgMjQyLCAyMTksIAotICAgIDE1LCA1LCAyNDIsIDIyMCwgMjQ5LCAxMzMsIDI0MiwgMjE5LCAxNSwgNSwgMjQyLCAyMTYsIDE1LCA1LCAyNDIsIDIwNCwgCi0gICAgMTUsIDUsIDI0MiwgMjA1LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMjAyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAxMTYsIDk2LCAKLSAgICAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDIsIDIwMywgMzAsIAotICAgIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIDIzMiwgMTA0LCA5NiwgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgCi0gICAgMTkxLCAxNSwgNSwgMjQyLCAxOTksIDE1LCA1LCAyNDIsIDE5NywgMTUsIDUsIDI0MiwgMTk4LCAyNDksIDEzMywgMjQyLCAKLSAgICAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjQyLCAxOTgsIDMwLCAyMTcsIDczLCAxNSwgNSwgCi0gICAgMjQyLCAxOTgsIDIxNiwgMjQwLCAxNSwgNSwgMjQyLCAxMjAsIDE1LCA1LCAyNDIsIDEyMSwgMjQ5LCAxMzMsIDI0MiwgMTIwLCAKLSAgICAxNSwgNSwgMjQyLCAxMTgsIDE1LCA1LCAyNDIsIDExOSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMzQsIAotICAgIDI0OSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MiwgCi0gICAgMTE5LCAzMCwgMjIyLCAxMSwgOTYsIDIxNSwgMTE0LCAxNSwgNSwgMjQyLCAxMTksIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAKLSAgICAxMTAsIDE1LCA1LCAyNDIsIDExMSwgMzAsIDExNiwgOTYsIDIzMywgMjAyLCAxNSwgNSwgMjQyLCAxMTEsIDMwLCAyMzMsIAotICAgIDIwMiwgMTUsIDUsIDI0MiwgMTExLCAxMTUsIDI0MiwgMTExLCAyMzIsIDk2LCAxNSwgNSwgMjQyLCAxMDUsIDE1LCA1LCAKLSAgICAyNDIsIDEwMywgMTUsIDUsIDI0MiwgMTA0LCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MiwgOTUsIDE1LCA1LCAyNDIsIDk0LCAKLSAgICAxNSwgNSwgMjQyLCA5MSwgMTUsIDUsIDI0MiwgOTAsIDE1LCA1LCAxNjIsIDE1LCA1LCAyNDIsIDU2LCAyMTYsIDI0MCwgMTUsIAotICAgIDUsIDI0MiwgNTYsIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAzNywgMTUsIDUsIDI0MSwgMTg3LCAxNSwgNSwgMjQxLCAxODgsIAotICAgIDMwLCAyNTMsIDIzOSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI1MiwgCi0gICAgMTg0LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNDcsIDE5NSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjQzLCAxMzMsIDE1LCA1LCAKLSAgICAyNDEsIDE4OCwgMzAsIDIzNCwgODcsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQxLCAxODgsIAotICAgIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQxLCAxODgsIDMwLCA2OSwgMTUsIDUsIDI0MCwgMjI5LCAxNSwgNSwgMjQwLCAyMjUsIAotICAgIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyNDIsIDM3LCAxNSwgNSwgMjQwLCAKLSAgICAyMjYsIDMwLCAyMzQsIDIxMywgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjMyLCAyMDMsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIAotICAgIDIxNCwgMjE5LCAxNSwgNSwgMjQwLCAyMjIsIDE1LCA1LCA3NCwgMTUsIDUsIDI0MCwgMTYxLCA2MSwgMTUsIDUsIDI0MCwgCi0gICAgMTIyLCAxNSwgNSwgMjM2LCA3MCwgMTUsIDUsIDIzNiwgNzEsIDExNSwgMjM2LCA3MSwgMjUxLCAxMDYsIDE1LCA1LCAyMzYsIAotICAgIDcxLCAxMTUsIDIzNiwgNzEsIDIxOCwgMjM1LCAxNSwgNSwgMjM2LCA0NSwgMTUsIDUsIDIzNiwgNDIsIDE1LCA1LCAyMzYsIAotICAgIDQzLCAyNDcsIDI1MCwgMTUsIDUsIDIzNiwgNDMsIDIyMywgMzgsIDE1LCA1LCAyMzYsIDQzLCAxMTUsIDIzNiwgNDMsIDIyMCwgCi0gICAgMTYsIDExNSwgMjIwLCAxNiwgMjE0LCAyMjAsIDExNSwgMjE0LCAyMTksIDE1LCA1LCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIAotICAgIDUsIDIzNiwgMzQsIDE1LCA1LCAyMzYsIDM1LCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjM2LCAzMywgMTUsIAotICAgIDUsIDIzNiwgMjMsIDE1LCA1LCAyMzYsIDI0LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIzNiwgMjQsIDI0OSwgMTMzLCAyMzYsIAotICAgIDIzLCAxNSwgNSwgMjM2LCAyNCwgMjI2LCAxNjgsIDIzNiwgMjMsIDE1LCA1LCAyMzYsIDI0LCAyMTgsIDIzNSwgMTUsIDUsIAotICAgIDIzNiwgMTYsIDE1LCA1LCAyMzYsIDYsIDE1LCA1LCAyMzUsIDE4NiwgMTUsIDUsIDIzNSwgMTcyLCAxNSwgNSwgMTc2LCAxNSwgCi0gICAgNSwgMjM1LCAxOSwgMzAsIDYxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1NSwgOCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTUsIAotICAgIDksIDk2LCAyMzMsIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTIsIAotICAgIDE4NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTIsIDE2OCwgMTUsIDUsIDIzNSwgMTksIDMwLCAxMzAsIDE1LCA1LCAyMzUsIAotICAgIDE5LCAzMCwgMjUyLCAxNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDUsIDk1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0NSwgCi0gICAgODAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAKLSAgICAyMzUsIDE5LCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgCi0gICAgMjM1LCAxOSwgMzAsIDI0MywgMTA0LCA5NiwgMjIwLCAxMDMsIDk2LCA2MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIAotICAgIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDIwNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDE5OCwgOTYsIDIyMSwgCi0gICAgMjMzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgMTk4LCAyNDksIDEzMywgMjQyLCAxOTcsIDE1LCA1LCAyMzUsIDE5LCAKLSAgICAzMCwgMjQyLCAxMjAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCA5NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzYsIDQyLCAKLSAgICAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyMzUsIAotICAgIDE5LCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzQsIDk1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMiwgCi0gICAgMjQ3LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMiwgMTAzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTYsIDE1LCA1LCAKLSAgICAyMzUsIDE5LCAzMCwgMjMxLCA5NywgOTYsIDI0NiwgODYsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMxLCA5NywgOTYsIDI0MiwgCi0gICAgMjIxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyMTcsIDIzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMCwgCi0gICAgMjM1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMCwgMjM2LCA5NiwgMjI3LCAxOTMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI5LCAKLSAgICAxMTIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI1LCAxMTEsIDE1LCA1LCAKLSAgICAyMzUsIDE5LCAzMCwgMjIyLCAxNDIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjA2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMSwgCi0gICAgMjMzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMCwgMTA0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMCwgNjUsIDE1LCA1LCAKLSAgICAyMzUsIDE5LCAzMCwgMjIwLCAzMiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTksIDIyNywgMTUsIDUsIDIzNSwgMTksIDMwLCAKLSAgICAyMTksIDE4NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTgsIDUyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNywgNTEsIDE1LCAKLSAgICA1LCAyMzUsIDE5LCAzMCwgNjksIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgCi0gICAgMjE0LCAyMTksIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAxOTMsIDMwLCAxOTEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAKLSAgICAxMjYsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjEwLCA0NCwgMTUsIDUsIDIzNSwgMTcsIDE1LCA1LCAyMzUsIDE4LCAyNDksIAotICAgIDEzMywgMjM1LCAxNywgMTUsIDUsIDIzNSwgMTAsIDE1LCA1LCAyMzUsIDcsIDE1LCA1LCAyMzUsIDUsIDE1LCA1LCAyMzUsIAotICAgIDQsIDE1LCA1LCAyMzUsIDIsIDE1LCA1LCAyMzUsIDMsIDExNSwgMjM1LCAyLCAxNSwgNSwgMjM0LCAyNDgsIDE1LCA1LCAKLSAgICAyMzQsIDI0OSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjM0LCAyNDQsIDE1LCA1LCAyMzQsIDI0NSwgMzAsIAotICAgIDI1MiwgMTg0LCAxNSwgNSwgMjM0LCAyNDUsIDI0OSwgMTMzLCAyMzQsIDI0NCwgMTUsIDUsIDIzNCwgMjQyLCAxNSwgNSwgCi0gICAgMjM0LCAyNDEsIDE1LCA1LCAyMzQsIDIxMywgMTUsIDUsIDIzNCwgMjE0LCAyMzMsIDEyNCwgMzAsIDEwNCwgMTE1LCAyMzMsIAotICAgIDEyNCwgMzAsIDY5LCAxNSwgNSwgMjM0LCAyMTQsIDExNSwgMjM0LCAyMTQsIDIzMywgMTI0LCAzMCwgMTA0LCAxMTUsIDIzMywgCi0gICAgMTI0LCAzMCwgNjksIDE1LCA1LCAyMzQsIDE2MywgMTUsIDUsIDIzNCwgOTgsIDE1LCA1LCAyMzQsIDk5LCAzMCwgMjUyLCAKLSAgICAxODQsIDE1LCA1LCAyMzQsIDk5LCAzMCwgNjksIDE1LCA1LCAyMzQsIDk5LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzQsIAotICAgIDk1LCAxNSwgNSwgMjM0LCA4NywgMTUsIDUsIDIzNCwgNzQsIDE1LCA1LCAyMzQsIDczLCAxNSwgNSwgMjM0LCA3MSwgMTUsIAotICAgIDUsIDIzNCwgNzIsIDExNSwgMjM0LCA3MSwgMTUsIDUsIDIzMywgMjIzLCAxNSwgNSwgMjMzLCAyMjQsIDExNSwgMjQxLCAKLSAgICAxODgsIDMwLCAyNTMsIDIzOCwgMjMzLCAyMjQsIDExNSwgMjQxLCAxODgsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIzMywgCi0gICAgMjIxLCAxNSwgNSwgMjMzLCAyMTksIDE1LCA1LCAyMzMsIDIyMCwgMjE0LCAxMiwgMTcsIDE1LCA1LCAyMzMsIDIxOCwgMTUsIAotICAgIDUsIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAyMTYsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAyMTQsIDE1LCA1LCAyMzMsIDIwMiwgCi0gICAgMTUsIDUsIDIzMywgMjAzLCAyMjYsIDE2OCwgMjMzLCAyMDIsIDE1LCA1LCAyMzMsIDE5NywgMTUsIDUsIDIzMywgMTc4LCAKLSAgICAxNSwgNSwgMjMzLCAxNDEsIDE1LCA1LCAyMzMsIDEyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgNjEsIDE1LCA1LCAyMzMsIAotICAgIDEyNCwgMzAsIDExNiwgOTYsIDI0OCwgMjMwLCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMTYsIDk2LCAyNDMsIAotICAgIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTE2LCA5NiwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1NCwgCi0gICAgMTg3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUzLCAyNDAsIDIxMCwgCi0gICAgNDAsIDIxNiwgMjQwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUyLCAKLSAgICAxNCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQ4LCAxNzQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0NSwgMTU4LCAxNSwgNSwgCi0gICAgMjMzLCAxMjQsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgCi0gICAgMzAsIDI0MiwgMTEwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDIsIDExMSwgOTYsIDI0MiwgMTEwLCAxNSwgNSwgMjMzLCAKLSAgICAxMjQsIDMwLCAxNjIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MiwgMzcsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MSwgCi0gICAgMTg4LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAKLSAgICAxMjQsIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzYsIDI0LCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIAotICAgIDMwLCAyMzYsIDI0LCA5NiwgMjMyLCAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzMsIDEyNCwgCi0gICAgMzAsIDIzNCwgODcsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgMjIxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIAotICAgIDIxNSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAyMTYsIDk2LCAyNDEsIDE4OCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAKLSAgICAxMjQsIDMwLCAyMzMsIDEyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMyLCAyMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIAotICAgIDIzMiwgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzIsIDkxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzEsIDk2LCAxNSwgCi0gICAgNSwgMjMzLCAxMjQsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMCwgNjYsIDE1LCAKLSAgICA1LCAyMzMsIDEyNCwgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMjAsIDY2LCA5NiwgMjE4LCA0NCwgMTUsIAotICAgIDUsIDIzMywgMTI0LCAzMCwgMjIwLCAxMiwgOTYsIDI0MiwgMTk4LCA5NiwgMjQ1LCA5NSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgCi0gICAgMjIwLCAxMiwgOTYsIDI0MiwgMTk4LCAyMTYsIDI0MCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAKLSAgICAyMzMsIDEyNCwgMzAsIDIxOSwgMjI2LCA5NiwgMjE5LCAyMjUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxOCwgNDQsIDE1LCAKLSAgICA1LCAyMzMsIDEyNCwgMzAsIDIxNywgODUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNywgNzMsIDE1LCA1LCAyMzMsIDEyNCwgCi0gICAgMzAsIDIxNywgMjQsIDk2LCAxMTYsIDk2LCAyMTgsIDg1LCA5NiwgMTk4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCA2OSwgMTUsIAotICAgIDUsIDIzMywgMTI0LCAzMCwgMTA0LCA5NiwgNjEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDY5LCAKLSAgICAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTQsIAotICAgIDIxOSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMzMsIDEyNCwgMjE4LCAyMzUsIDE1LCA1LCAKLSAgICAyMzMsIDEyMSwgMTUsIDUsIDIzMywgMTIyLCAzMCwgMjIwLCA2NSwgMTUsIDUsIDIzMywgMTIyLCAzMCwgMjIwLCA2NiwgOTYsIAotICAgIDIxOCwgNDQsIDE1LCA1LCAyMzMsIDEyMiwgMjQyLCAxMDEsIDE1LCA1LCAyMzMsIDEyMiwgMjQyLCAxMDIsIDExNSwgMjMzLCAKLSAgICAxMjIsIDI0MiwgMTAyLCAyMjAsIDY1LCAxNSwgNSwgMjMzLCAxMTcsIDE1LCA1LCAyMzMsIDExMCwgMTUsIDUsIDIzMywgCi0gICAgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIDEwOCwgMTUsIDUsIDIzMywgMTA5LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAKLSAgICAyMzMsIDEwOSwgMzAsIDIzMywgMjAzLCA5NiwgMjIyLCAxNDIsIDE1LCA1LCAyMzIsIDI0NywgMTUsIDUsIDIzMiwgMjMyLCAKLSAgICAxNSwgNSwgMjMyLCAyMjIsIDE1LCA1LCAyMzIsIDIwMywgMTUsIDUsIDIzMiwgMTAzLCAxNSwgNSwgMjMyLCAxMDQsIDMwLCAKLSAgICAyNTIsIDE4NCwgMTUsIDUsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNTQsIDE4NywgMTUsIDUsIDIzMiwgCi0gICAgMTAyLCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDI0NSwgODAsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAotICAgIDI0NSwgODEsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIAotICAgIDEwMiwgMzAsIDI0MSwgMTg4LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNiwgMjMsIDE1LCA1LCAKLSAgICAyMzIsIDEwMiwgMzAsIDIzNSwgNywgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjM1LCA1LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKLSAgICAyMzUsIDYsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCi0gICAgMjMzLCAxNDIsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjMzLCAxMjMsIDE1LCA1LCAyMzIsIDEwMiwgCi0gICAgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMzIsIAotICAgIDEwMiwgMzAsIDIyNywgMjQyLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMTksIDE5NCwgOTYsIDI1MywgMjM5LCAxNSwgNSwgCi0gICAgMjMyLCAxMDIsIDMwLCAyMTksIDE3NiwgOTYsIDI1MSwgMTMzLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMTUsIDExNCwgMTUsIAotICAgIDUsIDIzMiwgMTAyLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgMTAyLCAyNDksIDEzMywgMjMyLCAxMDEsIDE1LCA1LCAyMzIsIAotICAgIDEwMiwgMjI2LCAxNjgsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAxMDIsIDIxOCwgMjM1LCAxNSwgNSwgMjMyLCAxMDIsIDIyMCwgCi0gICAgNDcsIDE1LCA1LCAyMzIsIDEwMCwgMTUsIDUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAxMTUsIDIzMiwgOTYsIDE1LCA1LCAKLSAgICAyMzIsIDk3LCAyMjYsIDE2OCwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIyMCwgNDcsIDE1LCA1LCAyMzIsIDk0LCAxNSwgCi0gICAgNSwgMjMyLCA5MSwgMTUsIDUsIDIzMiwgODksIDE1LCA1LCAyMzIsIDkwLCAxMTUsIDIzMiwgODksIDE1LCA1LCAyMzIsIDkwLCAKLSAgICAxMTUsIDIzMiwgOTAsIDI0MywgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMTg2LCAxNSwgNSwgMjMxLCAyNDQsIDMwLCAKLSAgICAyMTcsIDczLCAxNSwgNSwgMjMxLCAyNDQsIDI0MiwgMTAxLCAxNSwgNSwgMjMxLCAyNDMsIDE1LCA1LCAyMzEsIDIxNSwgMTUsIAotICAgIDUsIDIzMSwgMTcxLCAxNSwgNSwgMjMxLCAxNTIsIDE1LCA1LCAyMzEsIDE1MSwgMTUsIDUsIDIzMSwgOTYsIDE1LCA1LCAKLSAgICAyMzEsIDUyLCAxNSwgNSwgMjMwLCAyMzUsIDE1LCA1LCAyMzAsIDE5MywgMTUsIDUsIDIzMCwgMTA3LCAxNSwgNSwgMjMwLCAKLSAgICAxMDgsIDExNSwgMjMwLCAxMDcsIDE1LCA1LCAyMzAsIDk4LCAxNSwgNSwgMjMwLCA5OSwgMjQyLCAxMDEsIDE1LCA1LCAyMzAsIAotICAgIDgzLCAxNSwgNSwgMjMwLCA2OSwgMTUsIDUsIDIzMCwgNjYsIDE1LCA1LCAyMzAsIDY3LCAzMCwgNjEsIDE1LCA1LCAyMzAsIAotICAgIDY3LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMzAsIDY3LCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMzAsIDY3LCAxMTUsIDIzMCwgCi0gICAgNjYsIDE1LCA1LCAyMzAsIDY3LCAxMTUsIDIzMCwgNjcsIDMwLCAxMTYsIDk2LCAxOTgsIDE1LCA1LCAyMzAsIDY3LCAyNDksIAotICAgIDEzMywgMjMwLCA2NiwgMTUsIDUsIDIzMCwgNjQsIDE1LCA1LCAyMzAsIDY1LCAzMCwgNjEsIDE1LCA1LCAyMzAsIDY1LCAzMCwgCi0gICAgMTE2LCA5NiwgMjQ4LCAxMSwgMTUsIDUsIDIzMCwgNjUsIDMwLCAyNDgsIDExLCAxNSwgNSwgMjMwLCA2NSwgMjQyLCAxMDEsIAotICAgIDE1LCA1LCAxOTgsIDE1LCA1LCAyMjksIDIzMiwgMTUsIDUsIDIyOSwgMjIxLCAxNSwgNSwgMjI5LCAyMjIsIDIzNSwgMTk5LCAKLSAgICAxNSwgNSwgMjI5LCAyMjIsIDMwLCAyMTksIDIyOCwgMjE2LCAyNDAsIDE1LCA1LCAyMjksIDIyMiwgMjI2LCAxNjgsIDIyOSwgCi0gICAgMjIxLCAxNSwgNSwgMjI5LCAyMjAsIDE1LCA1LCAyMjksIDIxMywgMjI3LCAxODQsIDE1LCA1LCAyMjksIDIxMiwgMTUsIDUsIAotICAgIDIyOSwgMjExLCAxNSwgNSwgMjI5LCAxMTIsIDE1LCA1LCAyMjksIDExMywgMzAsIDYxLCAxNSwgNSwgMjI5LCAxMTMsIDMwLCAKLSAgICAyMTQsIDIxOSwgMTUsIDUsIDIyOSwgMTEzLCAyMjAsIDQ3LCAxNSwgNSwgMjI4LCAyMzgsIDE1LCA1LCAyMjgsIDIzOSwgMzAsIAotICAgIDc2LCAxNSwgNSwgMjI4LCAyMzcsIDE1LCA1LCAyMjgsIDIwOCwgMTUsIDUsIDIyOCwgMjA5LCAzMCwgMjQzLCAxMTIsIDIxNiwgCi0gICAgMjQwLCAxNSwgNSwgMjI4LCAyMDksIDMwLCAyNDMsIDEwNCwgOTYsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIyOCwgCi0gICAgMjA2LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjUzLCAyMzksIDE1LCA1LCAKLSAgICAyMjgsIDIwNywgMzAsIDI1MywgMjQwLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI0MiwgMTEwLCAxNSwgCi0gICAgNSwgMjI4LCAyMDcsIDMwLCAyMzEsIDk3LCA5NiwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAKLSAgICAyMjksIDExMiwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjUsIAotICAgIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjYsIDk2LCAxMTYsIDI1NCwgMTMxLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAKLSAgICAyMjAsIDY2LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjYsIDk2LCAyNTMsIDI0MCwgOTYsIAotICAgIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIAotICAgIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyOCwgMTk1LCAxNSwgNSwgMjI3LCAyNDIsIDE1LCA1LCAyMjcsIDIxNCwgMTUsIDUsIAotICAgIDIyNywgMTk4LCAxNSwgNSwgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAKLSAgICAxMjIsIDMwLCAyMzEsIDE1MiwgMTUsIDUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyMjcsIAotICAgIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDExLCAxMTUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDIyMiwgMTAsIDE1LCA1LCAKLSAgICAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyNywgMTk5LCAyMTYsIDI0MCwgMTUsIDUsIDIyNywgCi0gICAgMTk5LCAxMTUsIDIyNywgMTk4LCAxNSwgNSwgMjI3LCAxOTksIDI0OSwgMTMzLCAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAKLSAgICAyNDksIDEzMywgMjI3LCAxOTksIDIzMywgMTIyLCAxMTUsIDIzMywgMTIxLCAxNSwgNSwgMjI3LCAxOTMsIDE1LCA1LCAyMjcsIAotICAgIDE5NCwgMjU1LCAzMywgMzAsIDI1MywgMjM0LCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNTIsIDE0LCAxNSwgNSwgCi0gICAgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNDYsIDgyLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNDIsIDExMCwgCi0gICAgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAKLSAgICAzMywgMzAsIDIzNSwgNSwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyMjcsIDE5NCwgCi0gICAgMjU1LCAzMywgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMTksIDE3MywgMTUsIDUsIAotICAgIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjcsIDE5NCwgMjM0LCA3MiwgMzAsIDI1MiwgMTQsIAotICAgIDE1LCA1LCAyMjcsIDE5NCwgMjM0LCA3MiwgMzAsIDI1MiwgMTUsIDY5LCAxNSwgNSwgMTkxLCAxNSwgNSwgMjI2LCA4NCwgCi0gICAgMTUsIDUsIDIyNiwgNTEsIDE1LCA1LCAyMjYsIDI1LCAxNSwgNSwgMjI1LCAxNjQsIDE1LCA1LCAyMjUsIDExMSwgMTUsIDUsIAotICAgIDIyNSwgMTEyLCAzMCwgNjEsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1NSwgMzQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1MiwgCi0gICAgMTQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1MSwgMTMzLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCA3NiwgMTUsIDUsIDIyNSwgCi0gICAgMTEyLCAzMCwgNzQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI0MCwgMTIyLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCA2OSwgMTUsIAotICAgIDUsIDIyNSwgMTEyLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjUsIDExMiwgMjQ5LCAxMzMsIDIyNSwgMTExLCAxNSwgNSwgCi0gICAgMjI1LCA1NiwgMTUsIDUsIDIyNSwgNTcsIDMwLCAyMzQsIDI0NCwgMTUsIDUsIDIyNSwgNTcsIDMwLCAyMTQsIDIxOSwgMTUsIAotICAgIDUsIDIyNSwgNTcsIDMwLCAyMTAsIDExNiwgMTUsIDUsIDIyNSwgNTcsIDIyNiwgMTY4LCAyMjUsIDU2LCAxNSwgNSwgMjA1LCAKLSAgICAxNSwgNSwgMjIzLCAxODUsIDE1LCA1LCAyMjMsIDM4LCAxNSwgNSwgMjIyLCAxNDIsIDE1LCA1LCAyMDYsIDE1LCA1LCAyMjIsIAotICAgIDI0LCAyMjcsIDE4NCwgMTUsIDUsIDIyMiwgMjMsIDE1LCA1LCAyMjIsIDI0LCAzMCwgNjEsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCi0gICAgMjQ2LCA4NiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyNDYsIDg0LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDE2MiwgMTUsIDUsIAotICAgIDIyMiwgMjQsIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAKLSAgICAyMzIsIDg5LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIzMCwgMjM1LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIyNywgMTk4LCAxNSwgCi0gICAgNSwgMjIyLCAyNCwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjIwLCAzMiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAKLSAgICAyMTcsIDk0LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMjI1LCAxNSwgCi0gICAgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMTk3LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMTUwLCAxNSwgNSwgMjIyLCAyNCwgCi0gICAgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjIyLCAyNCwgMTE1LCAyMjIsIDIzLCAxNSwgNSwgMjIyLCAyNCwgMjQyLCAxMDEsIDE1LCAKLSAgICA1LCAyMjIsIDEwLCAxNSwgNSwgMjIyLCAxMSwgMjMzLCAxMjQsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIyMSwgMjQxLCAxNSwgCi0gICAgNSwgMjIxLCAyMzMsIDE1LCA1LCAyMjAsIDEwNCwgMTUsIDUsIDIyMCwgMTAyLCAxNSwgNSwgMjIwLCAxMDMsIDMwLCA2MSwgCi0gICAgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjIwLCAKLSAgICAxMDMsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAyMjAsIDEwMywgMzAsIAotICAgIDIxNSwgOTksIDE1LCA1LCAyMjAsIDEwMywgMzAsIDY5LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIAotICAgIDUsIDIyMCwgMTAxLCAxNSwgNSwgMjIwLCA5OSwgMTUsIDUsIDIyMCwgODAsIDE1LCA1LCAyMjAsIDY1LCAxNSwgNSwgMjIwLCAKLSAgICA2NiwgMjQwLCAyMjksIDE1LCA1LCAyMjAsIDY2LCAxMTUsIDIyMCwgNjYsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIAotICAgIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgNjYsIDExNSwgMjIwLCA2NiwgMjE3LCA5NSwgMTE1LCAyMTcsIDk1LCAKLSAgICAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgNTgsIDE1LCA1LCAyMjAsIDUzLCAxNSwgNSwgMjIwLCA1MCwgCi0gICAgMTUsIDUsIDIyMCwgNDksIDE1LCA1LCAyMjAsIDQ2LCAxNSwgNSwgMjIwLCAzMiwgMTUsIDUsIDIyMCwgMzMsIDMwLCA2MSwgCi0gICAgMTUsIDUsIDIyMCwgMzMsIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjIwLCAyNiwgMTUsIDUsIDIyMCwgMjcsIDMwLCA2MSwgMTUsIAotICAgIDUsIDIyMCwgMjcsIDMwLCAyNTIsIDE2OSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyNTEsIDExNywgMTUsIDUsIDIyMCwgMjcsIAotICAgIDMwLCAyNDcsIDIxNCwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzYsIDQyLCAKLSAgICAxNSwgNSwgMjIwLCAyNywgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzMywgMTk3LCAxNSwgCi0gICAgNSwgMjIwLCAyNywgMzAsIDIzMiwgOTEsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjMwLCA5OCwgMTUsIDUsIDIyMCwgMjcsIDMwLCAKLSAgICAyMjIsIDEwLCAxNSwgNSwgMjIwLCAyMCwgMTUsIDUsIDIyMCwgMTUsIDE1LCA1LCAyMjAsIDE2LCAyMTYsIDI0MCwgMTUsIDUsIAotICAgIDIyMCwgMTYsIDExNSwgMjIwLCAxNiwgMjUxLCAxMDcsIDExNSwgMjUxLCAxMDYsIDE1LCA1LCAyMjAsIDExLCAxNSwgNSwgCi0gICAgMjE5LCAyMjcsIDE1LCA1LCAyMTksIDIyOCwgMTE1LCAyMzUsIDIwMCwgMjE5LCAyMjcsIDE1LCA1LCAyMTksIDIyNSwgMTUsIAotICAgIDUsIDIxOSwgMjI0LCAxNSwgNSwgMjE5LCAxOTMsIDE1LCA1LCAyMTksIDE5NCwgMjQyLCAxMDEsIDE1LCA1LCAyMTksIDE4NCwgCi0gICAgMTUsIDUsIDIxOSwgMTgyLCAxNSwgNSwgMjE5LCAxODMsIDExNSwgMjE5LCAxODMsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAKLSAgICAxNzUsIDE1LCA1LCAyMTksIDE3MywgMTUsIDUsIDIxOCwgODQsIDE1LCA1LCAyMTgsIDg1LCAxMTUsIDIxOCwgODQsIDE1LCAKLSAgICA1LCAyMTgsIDU1LCAxNSwgNSwgMjE4LCA1NCwgMTUsIDUsIDIxOCwgNTIsIDE1LCA1LCAyMTgsIDQ0LCAxNSwgNSwgMjE4LCAKLSAgICA0MywgMTUsIDUsIDIxOCwgMTgsIDE1LCA1LCAyMTgsIDE3LCAxNSwgNSwgMjE3LCAxMDYsIDE1LCA1LCAyMTcsIDEwNywgCi0gICAgMjUzLCAyMjQsIDE1LCA1LCAyMTcsIDEwNywgMzAsIDI0MSwgMTg3LCAxNSwgNSwgMjE3LCAxMDcsIDMwLCAyMzAsIDIzNSwgCi0gICAgMTUsIDUsIDIxNywgMTA3LCAyNDIsIDEwMSwgMTUsIDUsIDIxNywgOTQsIDE1LCA1LCAyMTcsIDk1LCAxMTUsIDIxNywgOTUsIAotICAgIDIyOCwgMjM5LCAxMTUsIDIyOCwgMjM5LCAyNDcsIDE5NiwgMTE1LCAyNDcsIDE5NSwgMTUsIDUsIDIxNywgOTUsIDIxOCwgCi0gICAgMjM1LCAxNSwgNSwgMjE3LCA4NSwgMTUsIDUsIDEyOSwgMzAsIDI1MiwgMTQsIDE1LCA1LCAxMjksIDMwLCAyNDIsIDExMCwgCi0gICAgMTUsIDUsIDEyOSwgMzAsIDIyMCwgNjUsIDE1LCA1LCAxMjksIDMwLCAyMTksIDIyNywgMTUsIDUsIDEyOSwgMzAsIDIxNSwgCi0gICAgMTE0LCAxNSwgNSwgMTI5LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMTcsIDczLCAxNSwgNSwgMjE3LCA1MSwgMTUsIDUsIAotICAgIDIxNywgMjMsIDE1LCA1LCAyMTcsIDI0LCAyNDIsIDEwMSwgMTUsIDUsIDIxNiwgMTE4LCAxNSwgNSwgMjE2LCAxMTksIDIxNiwgCi0gICAgMjQwLCAxNSwgNSwgMjE2LCA5MSwgMTUsIDUsIDIxNiwgNzMsIDE1LCA1LCAyMTYsIDc0LCAzMCwgMjE3LCA3MywgMTUsIDUsIAotICAgIDIxNiwgNzQsIDExNSwgMjE2LCA3MywgMTUsIDUsIDIxNiwgNzQsIDExNSwgMjE2LCA3NCwgMjQzLCAxMzQsIDExNSwgMjQzLCAKLSAgICAxMzQsIDI0MywgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjE1LCAxMTksIDE1LCA1LCAyMTUsIDExNCwgMTUsIDUsIAotICAgIDIxNSwgMTEyLCAxNSwgNSwgMjE1LCAxMDksIDE1LCA1LCAyMTUsIDk5LCAxNSwgNSwgMjE1LCAxMDAsIDExNSwgMjE1LCAKLSAgICAxMDAsIDIxMCwgMTE3LCAxMTUsIDIxMCwgMTE2LCAxNSwgNSwgNjksIDE1LCA1LCAxMDQsIDI0MiwgMTEwLCAxNSwgNSwgCi0gICAgMTA0LCAxMDQsIDY5LCAxNSwgNSwgMTA0LCAxMTUsIDEwNCwgMjI2LCA5NCwgMTE1LCAyMjYsIDk0LCAyNDMsIDEwNCwgMTE1LCAKLSAgICAyNDMsIDEwMywgMTUsIDUsIDEwNCwgMTE1LCAxMDQsIDIxOCwgMTksIDExNSwgMjE4LCAxOCwgMTUsIDUsIDEwNCwgMTE1LCAKLSAgICAxMDQsIDEwNCwgMjIzLCA1MiwgMTE1LCAxMDQsIDIyMywgNTEsIDE1LCA1LCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMjI1LCAKLSAgICAxNSwgNSwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIDIyMCwgMjMzLCAxOTcsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDI1MiwgCi0gICAgMTg0LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyMzAsIDIzNSwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCAKLSAgICA5NiwgNjksIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDEwNCwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIAotICAgIDIyMCwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0NywgMTUsIDUsIDIxNCwgMjIwLCAyMjAsIDQ4LCAzMCwgCi0gICAgMjUyLCAxODQsIDE1LCA1LCAyMTQsIDIxNSwgMTUsIDUsIDIxNCwgMTk3LCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAyMzMsIAotICAgIDEyMywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMxLCA5NywgOTYsIDI0OCwgMjI5LCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAKLSAgICAyMjAsIDEwMiwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgNjksIDE1LCA1LCAyMTQsIDE5NiwgMTUsIDUsIDIxNCwgMTkyLCAxNSwgCi0gICAgNSwgMjE0LCAxOTMsIDMwLCAyMzQsIDIxMywgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMTkxLCAxNSwgNSwgMjE0LCAxOTAsIDE1LCAKLSAgICA1LCAyMTQsIDE5MSwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAyNDksIDEzMywgMjE0LCAKLSAgICAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjIwLCA0NywgMTUsIDUsIDIxNCwgMTQ4LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTYsIAotICAgIDk2LCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNiwgOTYsIDE5OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjU0LCAKLSAgICAxODcsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMTQsIAotICAgIDE0OSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgCi0gICAgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MiwgMTQsIDE1LCA1LCAyMTQsIDE0NywgMTUsIDUsIDIxNCwgMTQ0LCAKLSAgICAxNSwgNSwgMjE0LCAxNDMsIDE1LCA1LCAyMTQsIDEzOSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgNjEsIDE1LCA1LCAyMTQsIAotICAgIDE0MCwgMzAsIDI1MywgMjM0LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxMzAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0NiwgCi0gICAgNzYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEyNSwgMTUsIDUsIAotICAgIDIxNCwgMTQwLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEwMywgMTUsIDUsIAotICAgIDIxNCwgMTQwLCAzMCwgMjQyLCAxMjAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjM2LCA0MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM2LCAyMywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM1LCAxNzIsIDE1LCAKLSAgICA1LCAyMTQsIDE0MCwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzMiwgODksIDE1LCA1LCAyMTQsIDE0MCwgCi0gICAgMzAsIDIzMCwgMTkzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxOTEsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIyMCwgNjUsIDE1LCAKLSAgICA1LCAyMTQsIDE0MCwgMzAsIDIxOSwgMTgyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTUsIDExOSwgMTUsIDUsIDIxNCwgCi0gICAgMTQwLCAzMCwgMTA0LCA5NiwgMjQyLCAxMTAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAKLSAgICAxNDAsIDMwLCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzgsIDMwLCA2OSwgMTUsIDUsIDIxNCwgCi0gICAgMTI2LCAxNSwgNSwgMjE0LCAxMjcsIDMwLCA2MSwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjMzLCAyMjMsIDE1LCA1LCAyMTQsIAotICAgIDEyNywgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjE0LCAxMjIsIDE1LCA1LCAKLSAgICAyMTQsIDEyNSwgMTUsIDUsIDIxNCwgMTIzLCAxNSwgNSwgMjE0LCAxMTksIDE1LCA1LCAyMTQsIDEwOCwgMTUsIDUsIDIxNCwgCi0gICAgMTA5LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyMTQsIDEwNywgMTUsIDUsIDIxMCwgMTE2LCAxNSwgNSwgMjEwLCAxMTcsIAotICAgIDIxNiwgMjQwLCAxNSwgNSwgMjEwLCAxMTcsIDkyLCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMTAsIDExMywgMTUsIDUsIDIxMCwgCi0gICAgMTA2LCAxNSwgNSwgMjEwLCA5MywgMTUsIDUsIDIxMCwgNDQsIDE1LCA1LCAyMTAsIDQ1LCAxMTUsIDIxMCwgNDQsIDE1LCA1LCAKLSAgICAyMTAsIDQzLCAxNSwgNSwgMjEwLCA0MSwgMTUsIDUsIDIxMCwgNDIsIDIzNSwgOSwgMjE2LCAyNDAsIDE1LCA1LCAyMTAsIAotICAgIDM2LCAxNSwgNSwgMjEwLCAyOCwgMTUsIDUsIDIxMCwgMTMsIDE1LCA1LCAyMTAsIDExLCAxNSwgNSwgMjEwLCAxMiwgMzAsIAotICAgIDYxLCAxNSwgNSwgMjEwLCAxMCwgMTUsIDUsIDIxMCwgOSwgMTUsIDEzMiwgNSwgMTEzLCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgCi0gICAgMTM0LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MywgCi0gICAgMjM5LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyNTMsIDIzOSwgMTUsIAotICAgIDEzMiwgNSwgMjQ1LCAyMDEsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIAotICAgIDEzNCwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDcsIAotICAgIDE5NSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjQ3LCAxOTUsIDE1LCAKLSAgICAxMzIsIDUsIDI0NSwgMjAxLCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAKLSAgICAyNDQsIDE5LCA2OSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgNjksIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCA2OSwgMTUsIDEzMiwgCi0gICAgNSwgMjIwLCAxMjQsIDY5LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgNjksIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCA2OSwgMTUsIAotICAgIDEzMiwgNSwgMTIzLCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMTMsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDEzNCwgMjQzLCA0NSwgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgCi0gICAgMjE5LCAxMjcsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgCi0gICAgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDEyMywgMjQzLCA0MiwgMTUsIAotICAgIDEzMiwgNSwgMTEzLCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgNDIsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0MywgCi0gICAgNDIsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0MywgNDIsIDE1LCAxMzIsIDUsIDExMywgMjIwLCA4MCwgMTUsIDEzMiwgNSwgCi0gICAgMTM0LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgODEsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAKLSAgICAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyMTksIDEyNywgMjIwLCA4MCwgMTUsIAotICAgIDEzMiwgNSwgMjIwLCAxMjQsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAKLSAgICAyMjgsIDIwNSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMTIzLCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAxMTMsIDIyMCwgNzUsIAotICAgIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc2LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCAxOSwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMjIwLCA4MSwgCi0gICAgMzAsIDI0MywgMTI2LCA5NiwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyMCwgODEsIDMwLCAyNDMsIDEyNiwgOTYsIDIzMCwgCi0gICAgMTkzLCAxNSwgMTMyLCA1LCAxMjMsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMTMsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAKLSAgICAxMzQsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMzQsIDI1MSwgMTA0LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAKLSAgICAxOSwgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIAotICAgIDI0NCwgMjgsIDI0NSwgODIsIDE1LCAxMzIsIDUsIDEzNCwgMjE0LCAxMiwgMjQ0LCAyOCwgMjQ1LCA3OSwgMTUsIDEzMiwgNSwgCi0gICAgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjMsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgCi0gICAgMjgsIDIzMiwgMjIxLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyNCwgNjEsIDE1LCAKLSAgICAxMzIsIDUsIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjI0LCAyNTMsIDE2NiwgMTUsIDEzMiwgNSwgMjE5LCAKLSAgICAxMjcsIDIxNCwgMTIsIDI0NCwgMjgsIDI1MywgMjM2LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjE0LCAxMiwgMjQ0LCAyOCwgCi0gICAgMjM2LCAxNSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMTcsIDYxLCAxNSwgMTMyLCA1LCAKLSAgICAyMjAsIDEyNCwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAxNywgMjUzLCAxNjYsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMTQsIAotICAgIDEyLCAyNDQsIDI4LCAyMTQsIDEyMSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDIxNCwgMTIsIDI0NCwgMjgsIDIxNCwgMTIwLCAKLSAgICAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAzMSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIAotICAgIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzAsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIAotICAgIDI5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAzMiwgNjEsIDE1LCAxMzIsIDUsIDExMywgCi0gICAgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMjQ0LCAKLSAgICAxOSwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIAotICAgIDUsIDIxOSwgMTI3LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDEyMywgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIAotICAgIDExMywgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIDEzNCwgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MiwgMTU4LCAKLSAgICAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTIsIDE1OSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MiwgCi0gICAgMTU4LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTIsIDE1OSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDIyOCwgMjE1LCAKLSAgICAxNSwgMTMyLCA1LCAyMjgsIDIxNiwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDc4LCAxNSwgMTMyLCA1LCAxMTMsIDI0NSwgNzgsIAotICAgIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNzAsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAxMTMsIDIxNiwgMTY4LCAyNDcsIDE5NSwgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjE5LCAxMTYsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTcwLCAyMTQsIAotICAgIDEyLCAyNDQsIDI4LCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2OCwgMjE0LCAxMiwgMjQ0LCAyOCwgNjEsIDE1LCAKLSAgICAxMzIsIDUsIDEyMywgMjQ1LCAxOTcsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAxMjMsIDIyNCwgMjUsIDI1MywgMjM5LCAxNSwgCi0gICAgMTMyLCA1LCA1NSwgMjUzLCAyMjcsIDEyMywgMjE5LCAxMTcsIDE1LCAxMzIsIDUsIDU1LCAyNTMsIDIyNywgMTIzLCAyMjQsIAotICAgIDI0LCAxNSwgMjI0LCAxNDQsIDUsIDU1LCAyNTMsIDIyNywgMjExLCAyMDksIDI0NywgMTgwLCAxNSwgMjI0LCAxNDQsIDUsIAotICAgIDY3LCAyNDksIDIzNCwgMTUsIDIyNCwgMTQ0LCA1LCAyNDgsIDcsIDI0OSwgMjM0LCAxNSwgMjI0LCAxNDQsIDUsIDI0OCwgNywgCi0gICAgMjE1LCAyMjIsIDEyLCAxMywgMjU1LCAxNjQsIDEyLCAxMywgMjU1LCAxNjMsIDEyLCAxMywgMjU1LCAxNjIsIDEyLCAxMywgCi0gICAgMjU1LCAxNjEsIDEyLCAxMywgMjU1LCAxNjAsIDEyLCAxMywgMjU1LCAxNTksIDEyLCAxMywgMjU1LCAxNTgsIDEyLCAxMywgCi0gICAgMjU1LCAxNTcsIDEyLCAxMywgMjU1LCAxNTYsIDEyLCAxMywgMjU1LCAxNTUsIDEyLCAxMywgMjU1LCAxNTQsIDEyLCAxMywgCi0gICAgMjU1LCAxNTMsIDEyLCAxMywgMjU1LCAxNTIsIDEyLCAxMywgMjU1LCAxNTEsIDEyLCAxMywgMjU1LCAxNTAsIDEyLCAxMywgCi0gICAgMjU1LCAxNDksIDEyLCAxMywgMjU1LCAxNDgsIDEyLCAxMywgMjU1LCAxNDcsIDEyLCAxMywgMjU1LCAxNDYsIDEyLCAxMywgCi0gICAgMjU1LCAxNDUsIDEyLCAxMywgMjU1LCAxNDQsIDEyLCAxMywgMjU1LCAxNDMsIDEyLCAxMywgMjU1LCAxNDIsIDEyLCAxMywgCi0gICAgMjU1LCAxNDEsIDEyLCAxMywgMjU1LCAxNDAsIDEyLCAxMywgMjU1LCAxMzksIDEyLCAxMywgMjU1LCAxMzgsIDEyLCAxMywgCi0gICAgMjU1LCAxMzcsIDEyLCAxMywgMjU1LCAxMzYsIDEyLCAxMywgMjU1LCAxMzUsIDEyLCAxMywgMjU1LCAxMzQsIDEyLCAxMywgCi0gICAgMjU1LCAxMzMsIDEyLCAxMywgMjU1LCAxMzIsIDEyLCAxMywgMjU1LCAxMzEsIDEyLCAxMywgMjU1LCAxMzAsIDEyLCAxMywgCi0gICAgMjU1LCAxMjksIDEyLCAxMywgMjU1LCAxMjgsIDEyLCAxMywgMjU1LCAxMjcsIDEyLCAxMywgMjU1LCAxMjYsIDEyLCAxMywgCi0gICAgMjU1LCAxMjUsIDEyLCAxMywgMjU1LCAxMjQsIDEyLCAxMywgMjU1LCAxMjMsIDEyLCAxMywgMjU1LCAxMjIsIDEyLCAxMywgCi0gICAgMjU1LCAxMjEsIDEyLCAxMywgMjU1LCAxMjAsIDEyLCAxMywgMjU1LCAxMTksIDEyLCAxMywgMjU1LCAxMTgsIDEyLCAxMywgCi0gICAgMjU1LCAxMTcsIDEyLCAxMywgMjU1LCAxMTYsIDEyLCAxMywgMjU1LCAxMTUsIDEyLCAxMywgMjU1LCAxMTQsIDEyLCAxMywgCi0gICAgMjU1LCAxMTMsIDEyLCAxMywgMjU1LCAxMTIsIDEyLCAxMywgMjU1LCAxMTEsIDEyLCAxMywgMjU1LCAxMTAsIDEyLCAxMywgCi0gICAgMjU1LCAxMDksIDEyLCAxMywgMjU1LCAxMDgsIDEyLCAxMywgMjU1LCAxMDcsIDEyLCAxMywgMjU1LCAxMDYsIDEyLCAxMywgCi0gICAgMjU1LCAxMDUsIDEyLCAxMywgMjU1LCAxMDQsIDEyLCAxMywgMjU1LCAxMDMsIDEyLCAxMywgMjU1LCAxMDIsIDEyLCAxMywgCi0gICAgMjU1LCAxMDEsIDEyLCAxMywgMjU1LCAxMDAsIDEyLCAxMywgMjU1LCA5OSwgMTIsIDEzLCAyNTUsIDk4LCAxMiwgMTMsIAotICAgIDI1NSwgOTcsIDEyLCAxMywgMjU1LCA5NiwgMTIsIDEzLCAyNTUsIDk1LCAxMiwgMTMsIDI1NSwgOTQsIDEyLCAxMywgMjU1LCAKLSAgICA5MywgMTIsIDEzLCAyNTUsIDkyLCAxMiwgMTMsIDI1NSwgOTEsIDEyLCAxMywgMjU1LCA5MCwgMTIsIDEzLCAyNTUsIDg5LCAKLSAgICAxMiwgMTMsIDI1NSwgODgsIDEyLCAxMywgMjU1LCA4NywgMTIsIDEzLCAyNTUsIDg2LCAxMiwgMTMsIDI1NSwgODUsIDEyLCAKLSAgICAxMywgMjUzLCAxNjQsIDEyLCAxMywgMjUzLCAxNjIsIDEyLCAxMywgMjUzLCAxNjAsIDEyLCAxMywgMjUzLCAxNTgsIDEyLCAKLSAgICAxMywgMjUzLCAxNTYsIDEyLCAxMywgMjUzLCAxNTUsIDEyLCAxMywgMjUzLCAxNTMsIDEyLCAxMywgMjUzLCAxNTEsIDEyLCAKLSAgICAxMywgMjUzLCAxNDksIDEyLCAxMywgMjUzLCAxNDcsIDEyLCAxMywgMjUxLCA3MCwgMTIsIDEzLCAyNTEsIDY5LCAxMiwgMTMsIAotICAgIDI1MSwgNjgsIDEyLCAxMywgMjUxLCA2NywgMTIsIDEzLCAyNTEsIDY2LCAxMiwgMTMsIDI1MSwgNjUsIDEyLCAxMywgMjUxLCAKLSAgICA2NCwgMTIsIDEzLCAyNTEsIDYzLCAxMiwgMTMsIDI1MSwgNjIsIDEyLCAxMywgMjUxLCA2MSwgMTIsIDEzLCAyNTEsIDYwLCAKLSAgICAxMiwgMTMsIDI1MSwgNTksIDEyLCAxMywgMjUxLCA1OCwgMTIsIDEzLCAyNTEsIDU3LCAxMiwgMTMsIDI1MSwgNTYsIDEyLCAKLSAgICAxMywgMjUxLCA1NSwgMTIsIDEzLCAyNTEsIDU0LCAxMiwgMTMsIDI1MSwgNTMsIDEyLCAxMywgMjUxLCA1MiwgMTIsIDEzLCAKLSAgICAyNTEsIDUxLCAxMiwgMTMsIDI1MSwgNTAsIDEyLCAxMywgMjUxLCA0OSwgMTIsIDEzLCAyNTEsIDQ4LCAxMiwgMTMsIDI1MSwgCi0gICAgNDcsIDEyLCAxMywgMjUxLCA0NiwgMTIsIDEzLCAyNTEsIDQ1LCAxMiwgMTMsIDI1MSwgNDQsIDEyLCAxMywgMjUxLCA0MywgCi0gICAgMTIsIDEzLCAyNDksIDY3LCAxMiwgMTMsIDI0OSwgNjYsIDEyLCAxMywgMjQ5LCA2NSwgMTIsIDEzLCAyNDksIDY0LCAxMiwgCi0gICAgMTMsIDI0OSwgNjMsIDEyLCAxMywgMjQ5LCA2MiwgMTIsIDEzLCAyNDksIDYxLCAxMiwgMTMsIDI0OSwgNjAsIDEyLCAxMywgCi0gICAgMjQ5LCA1OSwgMTIsIDEzLCAyNDksIDU4LCAxMiwgMTMsIDI0OSwgNTcsIDEyLCAxMywgMjQ5LCA1NiwgMTIsIDEzLCAyNDksIAotICAgIDU1LCAxMiwgMTMsIDI0OSwgNTQsIDEyLCAxMywgMjQ5LCA1MywgMTIsIDEzLCAyNDksIDUyLCAxMiwgMTMsIDI0OSwgNTEsIAotICAgIDEyLCAxMywgMjQ5LCA1MCwgMTIsIDEzLCAyNDksIDQ5LCAxMiwgMTMsIDI0OSwgNDgsIDEyLCAxMywgMjQ5LCA0NywgMTIsIAotICAgIDEzLCAyNDksIDQ2LCAxMiwgMTMsIDI0OSwgNDUsIDEyLCAxMywgMjQ5LCA0NCwgMTIsIDEzLCAyNDksIDQzLCAxMiwgMTMsIAotICAgIDI0OSwgNDIsIDEyLCAxMywgMjQ5LCA0MSwgMTIsIDEzLCAyNDksIDQwLCAxMiwgMTMsIDI0OSwgMzksIDEyLCAxMywgMjQ5LCAKLSAgICAzOCwgMTIsIDEzLCAyNDksIDM3LCAxMiwgMTMsIDI0OSwgMzYsIDEyLCAxMywgMjQ5LCAzNSwgMTIsIDEzLCAyNDksIDM0LCAKLSAgICAxMiwgMTMsIDI0OSwgMzMsIDEyLCAxMywgMjQ5LCAzMiwgMTIsIDEzLCAyNDksIDMxLCAxMiwgMTMsIDI0OSwgMzAsIDEyLCAKLSAgICAxMywgMjQ5LCAyOSwgMTIsIDEzLCAyNDksIDI4LCAxMiwgMTMsIDI0OSwgMjcsIDEyLCAxMywgMjQ5LCAyNiwgMTIsIDEzLCAKLSAgICAyNDksIDI1LCAxMiwgMTMsIDI0OSwgMjQsIDEyLCAxMywgMjQ5LCAyMywgMTIsIDEzLCAyNDksIDIyLCAxMiwgMTMsIDI0OSwgCi0gICAgMjEsIDEyLCAxMywgMjQ5LCAyMCwgMTIsIDEzLCAyNDksIDE5LCAxMiwgMTMsIDI0OSwgMTgsIDEyLCAxMywgMjQ5LCAxNywgCi0gICAgMTIsIDEzLCAyNDksIDE2LCAxMiwgMTMsIDI0OSwgMTUsIDEyLCAxMywgMjQ5LCAxNCwgMTIsIDEzLCAyNDksIDEzLCAxMiwgCi0gICAgMTMsIDI0OSwgMTIsIDEyLCAxMywgMjQ5LCAxMSwgMTIsIDEzLCAyNDksIDEwLCAxMiwgMTMsIDI0OSwgOSwgMTIsIDEzLCAKLSAgICAyNDksIDgsIDEyLCAxMywgMjQ5LCA3LCAxMiwgMTMsIDI0OSwgNiwgMTIsIDEzLCAyNDksIDUsIDEyLCAxMywgMjQ5LCA0LCAKLSAgICAxMiwgMTMsIDI0OSwgMywgMTIsIDEzLCAyNDksIDIsIDEyLCAxMywgMjQ5LCAxLCAxMiwgMTMsIDI0OSwgMCwgMTIsIDEzLCAKLSAgICAyNDgsIDI1NSwgMTIsIDEzLCAyNDgsIDI1NCwgMTIsIDEzLCAyNDgsIDI1MywgMTIsIDEzLCAyNDgsIDI1MiwgMTIsIDEzLCAKLSAgICAyNDgsIDI1MSwgMTIsIDEzLCAyNDgsIDI1MCwgMTIsIDEzLCAyNDgsIDI0OSwgMTIsIDEzLCAyNDgsIDI0OCwgMTIsIDEzLCAKLSAgICAyNDgsIDI0NywgMTIsIDEzLCAyNDgsIDI0NiwgMTIsIDEzLCAyNDgsIDI0NSwgMTIsIDEzLCAyNDgsIDI0NCwgMTIsIDEzLCAKLSAgICAyNDgsIDI0MywgMTIsIDEzLCAyNDgsIDI0MiwgMTIsIDEzLCAyNDgsIDI0MSwgMTIsIDEzLCAyNDgsIDI0MCwgMTIsIDEzLCAKLSAgICAyNDgsIDIzOSwgMTIsIDEzLCAyNDgsIDIzOCwgMTIsIDEzLCAyNDgsIDIzNywgMTIsIDEzLCAyNDgsIDIzNiwgMTIsIDEzLCAKLSAgICAyNDgsIDIzNSwgMTIsIDEzLCAyNDgsIDIzNCwgMTIsIDEzLCAyNDgsIDIzMywgMTIsIDEzLCAyNDgsIDIzMiwgMTIsIDEzLCAKLSAgICAyNDYsIDMxLCAxMiwgMTMsIDI0NiwgMzAsIDEyLCAxMywgMjQ2LCAyOSwgMTIsIDEzLCAyNDYsIDI4LCAxMiwgMTMsIDI0NiwgCi0gICAgMjcsIDEyLCAxMywgMjQ2LCAyNiwgMTIsIDEzLCAyNDYsIDI1LCAxMiwgMTMsIDI0NiwgMjQsIDEyLCAxMywgMjQ2LCAyMywgCi0gICAgMTIsIDEzLCAyNDYsIDIyLCAxMiwgMTMsIDI0NiwgMjEsIDEyLCAxMywgMjQ2LCAyMCwgMTIsIDEzLCAyNDYsIDE5LCAxMiwgCi0gICAgMTMsIDI0NiwgMTgsIDEyLCAxMywgMjQ2LCAxNywgMTIsIDEzLCAyNDYsIDE2LCAxMiwgMTMsIDI0NiwgMTUsIDEyLCAxMywgCi0gICAgMjQ2LCAxNCwgMTIsIDEzLCAyNDYsIDEzLCAxMiwgMTMsIDI0NiwgMTIsIDEyLCAxMywgMjQ2LCAxMSwgMTIsIDEzLCAyNDYsIAotICAgIDEwLCAxMiwgMTMsIDI0NiwgOSwgMTIsIDEzLCAyNDYsIDgsIDEyLCAxMywgMjQ2LCA3LCAxMiwgMTMsIDI0NiwgNiwgMTIsIAotICAgIDEzLCAyNDYsIDUsIDEyLCAxMywgMjQ2LCA0LCAxMiwgMTMsIDI0NiwgMywgMTIsIDEzLCAyNDYsIDIsIDEyLCAxMywgMjQ2LCAKLSAgICAxLCAxMiwgMTMsIDI0NiwgMCwgMTIsIDEzLCAyNDUsIDI1NSwgMTIsIDEzLCAyNDUsIDI1NCwgMTIsIDEzLCAyNDUsIDI1MywgCi0gICAgMTIsIDEzLCAyNDUsIDI1MiwgMTIsIDEzLCAyNDUsIDI1MSwgMTIsIDEzLCAyNDUsIDI1MCwgMTIsIDEzLCAyNDUsIDI0OSwgCi0gICAgMTIsIDEzLCAyNDUsIDI0OCwgMTIsIDEzLCAyNDUsIDI0NywgMTIsIDEzLCAyNDUsIDI0NiwgMTIsIDEzLCAyNDUsIDI0NSwgCi0gICAgMTIsIDEzLCAyNDUsIDI0NCwgMTIsIDEzLCAyNDUsIDEzLCAxMiwgMTMsIDI0NSwgMTIsIDEyLCAxMywgMjQ1LCAxMSwgMTIsIAotICAgIDEzLCAyNDUsIDEwLCAxMiwgMTMsIDI0NSwgOSwgMTIsIDEzLCAyNDUsIDgsIDEyLCAxMywgMjQ1LCA3LCAxMiwgMTMsIDI0NSwgCi0gICAgNiwgMTIsIDEzLCAyNDUsIDUsIDEyLCAxMywgMjQ1LCA0LCAxMiwgMTMsIDI0NSwgMywgMTIsIDEzLCAyNDUsIDIsIDEyLCAKLSAgICAxMywgMjQ1LCAxLCAxMiwgMTMsIDI0NSwgMCwgMTIsIDEzLCAyNDQsIDI1NSwgMTIsIDEzLCAyNDQsIDI1NCwgMTIsIDEzLCAKLSAgICAyNDQsIDI1MywgMTIsIDEzLCAyNDQsIDI1MiwgMTIsIDEzLCAyNDQsIDI1MSwgMTIsIDEzLCAyNDQsIDI1MCwgMTIsIDEzLCAKLSAgICAyNDQsIDI0OSwgMTIsIDEzLCAyNDQsIDI0OCwgMTIsIDEzLCAyNDQsIDI0NywgMTIsIDEzLCAyNDQsIDI0NiwgMTIsIDEzLCAKLSAgICAyNDQsIDI0NSwgMTIsIDEzLCAyNDQsIDI0NCwgMTIsIDEzLCAyNDQsIDI0MywgMTIsIDEzLCAyNDQsIDI0MiwgMTIsIDEzLCAKLSAgICAyNDQsIDI0MSwgMTIsIDEzLCAyNDQsIDI0MCwgMTIsIDEzLCAyNDQsIDIzOSwgMTIsIDEzLCAyNDQsIDIzOCwgMTIsIDEzLCAKLSAgICAyNDQsIDIzNywgMTIsIDEzLCAyNDQsIDIzNiwgMTIsIDEzLCAyNDQsIDIzNSwgMTIsIDEzLCAyNDQsIDIzNCwgMTIsIDEzLCAKLSAgICAyNDQsIDIzMywgMTIsIDEzLCAyNDQsIDIzMiwgMTIsIDEzLCAyNDQsIDIzMSwgMTIsIDEzLCAyNDQsIDIzMCwgMTIsIDEzLCAKLSAgICAyNDQsIDIyOSwgMTIsIDEzLCAyNDQsIDIyOCwgMTIsIDEzLCAyNDQsIDIyNywgMTIsIDEzLCAyNDQsIDIyNiwgMTIsIDEzLCAKLSAgICAyNDQsIDIyNSwgMTIsIDEzLCAyNDQsIDIyNCwgMTIsIDEzLCAyNDQsIDIyMywgMTIsIDEzLCAyNDQsIDIyMiwgMTIsIDEzLCAKLSAgICAyNDQsIDIyMSwgMTIsIDEzLCAyNDQsIDIyMCwgMTIsIDEzLCAyNDQsIDIxOSwgMTIsIDEzLCAyNDQsIDIxOCwgMTIsIDEzLCAKLSAgICAyNDQsIDIxNywgMTIsIDEzLCAyNDQsIDIxNiwgMTIsIDEzLCAyNDQsIDIxNSwgMTIsIDEzLCAyNDQsIDIxNCwgMTIsIDEzLCAKLSAgICAyNDQsIDIxMywgMTIsIDEzLCAyNDQsIDIxMiwgMTIsIDEzLCAyNDQsIDIxMSwgMTIsIDEzLCAyNDQsIDIxMCwgMTIsIDEzLCAKLSAgICAyNDQsIDIwOSwgMTIsIDEzLCAyNDQsIDIwOCwgMTIsIDEzLCAyNDQsIDIwNywgMTIsIDEzLCAyNDQsIDIwNiwgMTIsIDEzLCAKLSAgICAyNDQsIDIwNSwgMTIsIDEzLCAyNDMsIDIwOCwgMTIsIDEzLCAyNDMsIDIwNywgMTIsIDEzLCAyNDMsIDIwNiwgMTIsIDEzLCAKLSAgICAyNDMsIDIwNSwgMTIsIDEzLCAyNDMsIDIwNCwgMTIsIDEzLCAyNDMsIDIwMywgMTIsIDEzLCAyNDMsIDIwMiwgMTIsIDEzLCAKLSAgICAyNDMsIDIwMSwgMTIsIDEzLCAyNDMsIDIwMCwgMTIsIDEzLCAyNDMsIDE5OSwgMTIsIDEzLCAyNDMsIDE5OCwgMTIsIDEzLCAKLSAgICAyNDMsIDE5NywgMTIsIDEzLCAyNDMsIDE5NiwgMTIsIDEzLCAyNDMsIDE5NSwgMTIsIDEzLCAyNDMsIDE5NCwgMTIsIDEzLCAKLSAgICAyNDMsIDE5MywgMTIsIDEzLCAyNDMsIDE5MiwgMTIsIDEzLCAyNDMsIDE5MSwgMTIsIDEzLCAyNDMsIDE5MCwgMTIsIDEzLCAKLSAgICAyNDMsIDE4OSwgMTIsIDEzLCAyNDMsIDE4OCwgMTIsIDEzLCAyNDMsIDE4NywgMTIsIDEzLCAyNDMsIDE4NiwgMTIsIDEzLCAKLSAgICAyNDMsIDE4NSwgMTIsIDEzLCAyNDMsIDE4NCwgMTIsIDEzLCAyNDMsIDE4MywgMTIsIDEzLCAyNDMsIDE4MiwgMTIsIDEzLCAKLSAgICAyNDMsIDE4MSwgMTIsIDEzLCAyNDMsIDE4MCwgMTIsIDEzLCAyNDMsIDE3OSwgMTIsIDEzLCAyNDMsIDE3OCwgMTIsIDEzLCAKLSAgICAyNDMsIDE3NywgMTIsIDEzLCAyNDMsIDE3NiwgMTIsIDEzLCAyNDMsIDE3NSwgMTIsIDEzLCAyNDMsIDE3NCwgMTIsIDEzLCAKLSAgICAyNDMsIDE3MywgMTIsIDEzLCAyNDMsIDE3MiwgMTIsIDEzLCAyNDMsIDE3MSwgMTIsIDEzLCAyNDMsIDE3MCwgMTIsIDEzLCAKLSAgICAyNDMsIDE2OSwgMTIsIDEzLCAyNDMsIDE2OCwgMTIsIDEzLCAyNDMsIDE2NywgMTIsIDEzLCAyNDMsIDE2NiwgMTIsIDEzLCAKLSAgICAyNDMsIDE2NSwgMTIsIDEzLCAyNDMsIDE2NCwgMTIsIDEzLCAyNDMsIDE2MywgMTIsIDEzLCAyNDMsIDE2MiwgMTIsIDEzLCAKLSAgICAyNDMsIDE2MSwgMTIsIDEzLCAyNDMsIDE2MCwgMTIsIDEzLCAyNDMsIDE1OSwgMTIsIDEzLCAyNDMsIDE1OCwgMTIsIDEzLCAKLSAgICAyNDMsIDE1NywgMTIsIDEzLCAyNDMsIDE1NiwgMTIsIDEzLCAyNDMsIDE1NSwgMTIsIDEzLCAyNDMsIDE1NCwgMTIsIDEzLCAKLSAgICAyNDMsIDE1MywgMTIsIDEzLCAyNDMsIDE1MiwgMTIsIDEzLCAyNDMsIDE1MSwgMTIsIDEzLCAyNDMsIDE1MCwgMTIsIDEzLCAKLSAgICAyNDMsIDE0OSwgMTIsIDEzLCAyNDMsIDE0OCwgMTIsIDEzLCAyNDMsIDE0NywgMTIsIDEzLCAyNDMsIDE0NiwgMTIsIDEzLCAKLSAgICAyNDMsIDE0NSwgMTIsIDEzLCAyNDIsIDY1LCAxMiwgMTMsIDI0MiwgNjQsIDEyLCAxMywgMjQyLCA2MywgMTIsIDEzLCAyNDIsIAotICAgIDYyLCAxMiwgMTMsIDI0MiwgNjEsIDEyLCAxMywgMjQyLCA2MCwgMTIsIDEzLCAyNDIsIDU5LCAxMiwgMTMsIDI0MiwgNTgsIAotICAgIDEyLCAxMywgMjQyLCA1NywgMTIsIDEzLCAyNDAsIDE0NSwgMTIsIDEzLCAyNDAsIDE0NCwgMTIsIDEzLCAyNDAsIDE0MywgCi0gICAgMTIsIDEzLCAyNDAsIDE0MiwgMTIsIDEzLCAyNDAsIDE0MSwgMTIsIDEzLCAyNDAsIDE0MCwgMTIsIDEzLCAyNDAsIDEzOSwgCi0gICAgMTIsIDEzLCAyNDAsIDEzOCwgMTIsIDEzLCAyNDAsIDEzNywgMTIsIDEzLCAyNDAsIDEzNiwgMTIsIDEzLCAyNDAsIDEzNSwgCi0gICAgMTIsIDEzLCAyNDAsIDEzNCwgMTIsIDEzLCAyNDAsIDEzMywgMTIsIDEzLCAyNDAsIDEzMiwgMTIsIDEzLCAyNDAsIDEzMSwgCi0gICAgMTIsIDEzLCAyNDAsIDEzMCwgMTIsIDEzLCAyNDAsIDEyOSwgMTIsIDEzLCAyNDAsIDEyOCwgMTIsIDEzLCAyNDAsIDEyNywgCi0gICAgMTIsIDEzLCAyMzUsIDI4LCAxMiwgMTMsIDIzNSwgMjcsIDEyLCAxMywgMjM1LCAyNiwgMTIsIDEzLCAyMzUsIDI1LCAxMiwgCi0gICAgMTMsIDIzNSwgMjQsIDEyLCAxMywgMjM1LCAyMywgMTIsIDEzLCAyMzUsIDIyLCAxMiwgMTMsIDIzNSwgMjEsIDEyLCAxMywgCi0gICAgMjMzLCAxNTIsIDEyLCAxMywgMjMzLCAxNTEsIDEyLCAxMywgMjMzLCAxNTAsIDEyLCAxMywgMjMzLCAxNDksIDEyLCAxMywgCi0gICAgMjMzLCAxNDgsIDEyLCAxMywgMjMzLCAxNDcsIDEyLCAxMywgMjMzLCAxNDYsIDEyLCAxMywgMjMzLCAxNDUsIDEyLCAxMywgCi0gICAgMjMzLCAxNDQsIDEyLCAxMywgMjMzLCAxNDMsIDEyLCAxMywgMjMyLCA1NCwgMTIsIDEzLCAyMzIsIDUzLCAxMiwgMTMsIAotICAgIDIzMiwgNTIsIDEyLCAxMywgMjMyLCA1MSwgMTIsIDEzLCAyMzIsIDUwLCAxMiwgMTMsIDIzMiwgNDksIDEyLCAxMywgMjMyLCAKLSAgICA0OCwgMTIsIDEzLCAyMzIsIDQ3LCAxMiwgMTMsIDIzMiwgNDYsIDEyLCAxMywgMjMyLCA0NSwgMTIsIDEzLCAyMzIsIDQ0LCAKLSAgICAxMiwgMTMsIDIzMiwgNDMsIDEyLCAxMywgMjMyLCA0MiwgMTIsIDEzLCAyMzIsIDQxLCAxMiwgMTMsIDIzMiwgNDAsIDEyLCAKLSAgICAxMywgMjMyLCAzOSwgMTIsIDEzLCAyMzIsIDM4LCAxMiwgMTMsIDIzMiwgMzcsIDEyLCAxMywgMjMyLCAzNiwgMTIsIDEzLCAKLSAgICAyMzIsIDM1LCAxMiwgMTMsIDIzMiwgMzQsIDEyLCAxMywgMjMyLCAzMywgMTIsIDEzLCAyMzIsIDMyLCAxMiwgMTMsIDIzMiwgCi0gICAgMzEsIDEyLCAxMywgMjMyLCAzMCwgMTIsIDEzLCAyMzIsIDI5LCAxMiwgMTMsIDIzMiwgMjgsIDEyLCAxMywgMjMyLCAyNywgCi0gICAgMTIsIDEzLCAyMzIsIDI2LCAxMiwgMTMsIDIzMiwgMjUsIDEyLCAxMywgMjMyLCAyNCwgMTIsIDEzLCAyMzIsIDIzLCAxMiwgCi0gICAgMTMsIDIzMiwgMjIsIDEyLCAxMywgMjMyLCAyMSwgMTIsIDEzLCAyMzIsIDIwLCAxMiwgMTMsIDIzMiwgMTksIDEyLCAxMywgCi0gICAgMjMyLCAxOCwgMTIsIDEzLCAyMzIsIDE3LCAxMiwgMTMsIDIzMiwgMTYsIDEyLCAxMywgMjMyLCAxNSwgMTIsIDEzLCAyMzIsIAotICAgIDE0LCAxMiwgMTMsIDIzMiwgMTMsIDEyLCAxMywgMjMyLCAxMiwgMTIsIDEzLCAyMzIsIDExLCAxMiwgMTMsIDIzMiwgMTAsIAotICAgIDEyLCAxMywgMjMyLCA5LCAxMiwgMTMsIDIzMiwgOCwgMTIsIDEzLCAyMzIsIDcsIDEyLCAxMywgMjMyLCA2LCAxMiwgMTMsIAotICAgIDIzMiwgNSwgMTIsIDEzLCAyMzIsIDQsIDEyLCAxMywgMjMyLCAzLCAxMiwgMTMsIDIzMiwgMiwgMTIsIDEzLCAyMzIsIDEsIAotICAgIDEyLCAxMywgMjMyLCAwLCAxMiwgMTMsIDIzMSwgMjU1LCAxMiwgMTMsIDIzMSwgMjU0LCAxMiwgMTMsIDIzMSwgMjUzLCAxMiwgCi0gICAgMTMsIDIzMSwgMjUyLCAxMiwgMTMsIDIzMSwgMjUxLCAxMiwgMTMsIDIzMSwgMjUwLCAxMiwgMTMsIDIzMSwgMjQ5LCAxMiwgCi0gICAgMTMsIDIzMSwgMjQ4LCAxMiwgMTMsIDIzMSwgMjQ3LCAxMiwgMTMsIDIzMSwgMjQ2LCAxMiwgMTMsIDIzMSwgMjQ1LCAxMiwgCi0gICAgMTMsIDIzMCwgMjcsIDEyLCAxMywgMjMwLCAyNiwgMTIsIDEzLCAyMzAsIDI1LCAxMiwgMTMsIDIzMCwgMjQsIDEyLCAxMywgCi0gICAgMjMwLCAyMywgMTIsIDEzLCAyMzAsIDIyLCAxMiwgMTMsIDIzMCwgMjEsIDEyLCAxMywgMjMwLCAyMCwgMTIsIDEzLCAyMzAsIAotICAgIDE5LCAxMiwgMTMsIDIzMCwgMTgsIDEyLCAxMywgMjMwLCAxNywgMTIsIDEzLCAyMzAsIDE2LCAxMiwgMTMsIDIzMCwgMTUsIAotICAgIDEyLCAxMywgMjMwLCAxNCwgMTIsIDEzLCAyMzAsIDEzLCAxMiwgMTMsIDIzMCwgMTIsIDEyLCAxMywgMjMwLCAxMSwgMTIsIAotICAgIDEzLCAyMzAsIDEwLCAxMiwgMTMsIDIzMCwgOSwgMTIsIDEzLCAyMzAsIDgsIDEyLCAxMywgMjMwLCA3LCAxMiwgMTMsIDIzMCwgCi0gICAgNiwgMTIsIDEzLCAyMzAsIDUsIDEyLCAxMywgMjMwLCA0LCAxMiwgMTMsIDIzMCwgMywgMTIsIDEzLCAyMzAsIDIsIDEyLCAKLSAgICAxMywgMjMwLCAxLCAxMiwgMTMsIDIzMCwgMCwgMTIsIDEzLCAyMjksIDI1NSwgMTIsIDEzLCAyMjksIDI1NCwgMTIsIDEzLCAKLSAgICAyMjksIDI1MywgMTIsIDEzLCAyMjksIDI1MiwgMTIsIDEzLCAyMjksIDI1MSwgMTIsIDEzLCAyMjksIDI1MCwgMTIsIDEzLCAKLSAgICAyMjksIDI0OSwgMTIsIDEzLCAyMjksIDI0OCwgMTIsIDEzLCAyMjksIDI0NywgMTIsIDEzLCAyMjksIDI0NiwgMTIsIDEzLCAKLSAgICAyMjksIDI0NSwgMTIsIDEzLCAyMjksIDI0NCwgMTIsIDEzLCAyMjksIDI0MywgMTIsIDEzLCAyMjksIDI0MiwgMTIsIDEzLCAKLSAgICAyMjksIDI0MSwgMTIsIDEzLCAyMjksIDI0MCwgMTIsIDEzLCAyMjksIDIzOSwgMTIsIDEzLCAyMjksIDIzOCwgMTIsIDEzLCAKLSAgICAyMjksIDIzNywgMTIsIDEzLCAyMjksIDIzNiwgMTIsIDEzLCAyMjksIDIzNSwgMTIsIDEzLCAyMjgsIDEzOSwgMTIsIDEzLCAKLSAgICAyMjgsIDEzOCwgMTIsIDEzLCAyMjgsIDEzNywgMTIsIDEzLCAyMjgsIDEzNiwgMTIsIDEzLCAyMjgsIDEzNSwgMTIsIDEzLCAKLSAgICAyMjgsIDEzNCwgMTIsIDEzLCAyMjgsIDEzMywgMTIsIDEzLCAyMjgsIDEzMiwgMTIsIDEzLCAyMjgsIDEzMSwgMTIsIDEzLCAKLSAgICAyMjgsIDEzMCwgMTIsIDEzLCAyMjgsIDEyOSwgMTIsIDEzLCAyMjgsIDEyOCwgMTIsIDEzLCAyMjgsIDEyNywgMTIsIDEzLCAKLSAgICAyMjgsIDEyNiwgMTIsIDEzLCAyMjgsIDEyNSwgMTIsIDEzLCAyMjgsIDEyNCwgMTIsIDEzLCAyMjgsIDEyMywgMTIsIDEzLCAKLSAgICAyMjgsIDEyMiwgMTIsIDEzLCAyMjgsIDEyMSwgMTIsIDEzLCAyMjgsIDEyMCwgMTIsIDEzLCAyMjgsIDExOSwgMTIsIDEzLCAKLSAgICAyMjgsIDExOCwgMTIsIDEzLCAyMjcsIDI0MSwgMTIsIDEzLCAyMjcsIDI0MCwgMTIsIDEzLCAyMjcsIDIzOSwgMTIsIDEzLCAKLSAgICAyMjcsIDIzOCwgMTIsIDEzLCAyMjcsIDIzNywgMTIsIDEzLCAyMjcsIDIzNiwgMTIsIDEzLCAyMjcsIDIzNSwgMTIsIDEzLCAKLSAgICAyMjcsIDIzNCwgMTIsIDEzLCAyMjcsIDIzMywgMTIsIDEzLCAyMjcsIDIzMiwgMTIsIDEzLCAyMjcsIDIzMSwgMTIsIDEzLCAKLSAgICAyMjcsIDIzMCwgMTIsIDEzLCAyMjcsIDIyOSwgMTIsIDEzLCAyMjcsIDIyOCwgMTIsIDEzLCAyMjcsIDIyNywgMTIsIDEzLCAKLSAgICAyMjcsIDIyNiwgMTIsIDEzLCAyMjcsIDIyNSwgMTIsIDEzLCAyMjcsIDIyNCwgMTIsIDEzLCAyMjcsIDIyMywgMTIsIDEzLCAKLSAgICAyMjcsIDIyMiwgMTIsIDEzLCAyMjcsIDIyMSwgMTIsIDEzLCAyMjcsIDIyMCwgMTIsIDEzLCAyMjcsIDIxOSwgMTIsIDEzLCAKLSAgICAyMjcsIDIxOCwgMTIsIDEzLCAyMjcsIDIxNywgMTIsIDEzLCAyMjcsIDIxNiwgMTIsIDEzLCAyMjcsIDgwLCAxMiwgMTMsIAotICAgIDIyNywgNzksIDEyLCAxMywgMjI3LCA3OCwgMTIsIDEzLCAyMjcsIDc3LCAxMiwgMTMsIDIyNywgNzYsIDEyLCAxMywgMjI3LCAKLSAgICA3NSwgMTIsIDEzLCAyMjcsIDc0LCAxMiwgMTMsIDIyNywgNzMsIDEyLCAxMywgMjI3LCA3MiwgMTIsIDEzLCAyMjcsIDcxLCAKLSAgICAxMiwgMTMsIDIyNywgNzAsIDEyLCAxMywgMjI3LCA2OSwgMTIsIDEzLCAyMjcsIDY4LCAxMiwgMTMsIDIyNywgNjcsIDEyLCAKLSAgICAxMywgMjI3LCA2NiwgMTIsIDEzLCAyMjcsIDY1LCAxMiwgMTMsIDIyNywgNjQsIDEyLCAxMywgMjI3LCA2MywgMTIsIDEzLCAKLSAgICAyMjcsIDYyLCAxMiwgMTMsIDIyNywgNjEsIDEyLCAxMywgMjI3LCA2MCwgMTIsIDEzLCAyMjcsIDU5LCAxMiwgMTMsIDIyNywgCi0gICAgNTgsIDEyLCAxMywgMjI3LCA1NywgMTIsIDEzLCAyMjcsIDU2LCAxMiwgMTMsIDIyNywgNTUsIDEyLCAxMywgMjI3LCA1NCwgCi0gICAgMTIsIDEzLCAyMjcsIDUzLCAxMiwgMTMsIDIyNywgNTIsIDEyLCAxMywgMjI3LCA1MSwgMTIsIDEzLCAyMjcsIDUwLCAxMiwgCi0gICAgMTMsIDIyNywgNDksIDEyLCAxMywgMjI3LCA0OCwgMTIsIDEzLCAyMjcsIDQ3LCAxMiwgMTMsIDIyNywgNDYsIDEyLCAxMywgCi0gICAgMjI3LCA0NSwgMTIsIDEzLCAyMjcsIDQ0LCAxMiwgMTMsIDIyNywgNDMsIDEyLCAxMywgMjI3LCA0MiwgMTIsIDEzLCAyMjcsIAotICAgIDQxLCAxMiwgMTMsIDIyNywgNDAsIDEyLCAxMywgMjI3LCAzOSwgMTIsIDEzLCAyMjcsIDM4LCAxMiwgMTMsIDIyNywgMzcsIAotICAgIDEyLCAxMywgMjI3LCAzNiwgMTIsIDEzLCAyMjcsIDM1LCAxMiwgMTMsIDIyNywgMzQsIDEyLCAxMywgMjI3LCAzMywgMTIsIAotICAgIDEzLCAyMjcsIDMyLCAxMiwgMTMsIDIyNywgMzEsIDEyLCAxMywgMjI3LCAzMCwgMTIsIDEzLCAyMjcsIDI5LCAxMiwgMTMsIAotICAgIDIyNywgMjgsIDEyLCAxMywgMjI3LCAyNywgMTIsIDEzLCAyMjcsIDI2LCAxMiwgMTMsIDIyNywgMjUsIDEyLCAxMywgMjI3LCAKLSAgICAyNCwgMTIsIDEzLCAyMjcsIDIzLCAxMiwgMTMsIDIyNywgMjIsIDEyLCAxMywgMjI3LCAyMSwgMTIsIDEzLCAyMjcsIDIwLCAKLSAgICAxMiwgMTMsIDIyNywgMTksIDEyLCAxMywgMjI3LCAxOCwgMTIsIDEzLCAyMjcsIDE3LCAxMiwgMTMsIDIyNywgMTYsIDEyLCAKLSAgICAxMywgMjI3LCAxNSwgMTIsIDEzLCAyMjcsIDE0LCAxMiwgMTMsIDIyNywgMTMsIDEyLCAxMywgMjI3LCAxMiwgMTIsIDEzLCAKLSAgICAyMjcsIDExLCAxMiwgMTMsIDIyNywgMTAsIDEyLCAxMywgMjI3LCA5LCAxMiwgMTMsIDIyNywgOCwgMTIsIDEzLCAyMjcsIDcsIAotICAgIDEyLCAxMywgMjI3LCA2LCAxMiwgMTMsIDIyNiwgMTA4LCAxMiwgMTMsIDIyNiwgMTA3LCAxMiwgMTMsIDIyNiwgMTA2LCAxMiwgCi0gICAgMTMsIDIyNiwgMTA1LCAxMiwgMTMsIDIyNiwgMTA0LCAxMiwgMTMsIDIyNiwgMTAzLCAxMiwgMTMsIDIyNiwgMTAyLCAxMiwgCi0gICAgMTMsIDIyNiwgMTAxLCAxMiwgMTMsIDIyNiwgMTAwLCAxMiwgMTMsIDIyNiwgOTksIDEyLCAxMywgMjI2LCA5OCwgMTIsIDEzLCAKLSAgICAyMjYsIDk3LCAxMiwgMTMsIDIyNiwgOTYsIDEyLCAxMywgMjI0LCA5OCwgMTIsIDEzLCAyMjQsIDk3LCAxMiwgMTMsIDIyNCwgCi0gICAgOTYsIDEyLCAxMywgMjI0LCA5NSwgMTIsIDEzLCAyMjQsIDk0LCAxMiwgMTMsIDIyNCwgOTMsIDEyLCAxMywgMjI0LCA5MiwgCi0gICAgMTIsIDEzLCAyMjMsIDIyNSwgMTIsIDEzLCAyMjMsIDIyNCwgMTIsIDEzLCAyMjMsIDIyMywgMTIsIDEzLCAyMjMsIDIyMiwgCi0gICAgMTIsIDEzLCAyMjMsIDIyMSwgMTIsIDEzLCAyMjMsIDIyMCwgMTIsIDEzLCAyMjMsIDIxOSwgMTIsIDEzLCAyMjMsIDIxOCwgCi0gICAgMTIsIDEzLCAyMjMsIDIxNywgMTIsIDEzLCAyMjMsIDIxNiwgMTIsIDEzLCAyMjMsIDIxNSwgMTIsIDEzLCAyMjMsIDIxNCwgCi0gICAgMTIsIDEzLCAyMjMsIDIxMywgMTIsIDEzLCAyMjMsIDIxMiwgMTIsIDEzLCAyMjMsIDIxMSwgMTIsIDEzLCAyMjMsIDIxMCwgCi0gICAgMTIsIDEzLCAyMjMsIDIwOSwgMTIsIDEzLCAyMjMsIDIwOCwgMTIsIDEzLCAyMjMsIDIwNywgMTIsIDEzLCAyMjMsIDIwNiwgCi0gICAgMTIsIDEzLCAyMjMsIDIwNSwgMTIsIDEzLCAyMjMsIDIwNCwgMTIsIDEzLCAyMjMsIDIwMywgMTIsIDEzLCAyMjMsIDIwMiwgCi0gICAgMTIsIDEzLCAyMjMsIDIwMSwgMTIsIDEzLCAyMjMsIDIwMCwgMTIsIDEzLCAyMjMsIDE5OSwgMTIsIDEzLCAyMjMsIDE5OCwgCi0gICAgMTIsIDEzLCAyMjMsIDE5NywgMTIsIDEzLCAyMjMsIDE5NiwgMTIsIDEzLCAyMjMsIDE5NSwgMTIsIDEzLCAyMjMsIDE5NCwgCi0gICAgMTIsIDEzLCAyMjMsIDE5MywgMTIsIDEzLCAyMjMsIDE5MiwgMTIsIDEzLCAyMjIsIDkwLCAxMiwgMTMsIDIyMiwgODksIDEyLCAKLSAgICAxMywgMjIyLCA4OCwgMTIsIDEzLCAyMjIsIDg3LCAxMiwgMTMsIDIyMiwgODYsIDEyLCAxMywgMjIyLCA4NSwgMTIsIDEzLCAKLSAgICAyMjIsIDg0LCAxMiwgMTMsIDIyMiwgODMsIDEyLCAxMywgMjIyLCA4MiwgMTIsIDEzLCAyMjIsIDgxLCAxMiwgMTMsIDIyMiwgCi0gICAgODAsIDEyLCAxMywgMjIyLCA3OSwgMTIsIDEzLCAyMjIsIDc4LCAxMiwgMTMsIDIyMiwgNzcsIDEyLCAxMywgMjIyLCA3NiwgCi0gICAgMTIsIDEzLCAyMjIsIDc1LCAxMiwgMTMsIDIyMiwgNzQsIDEyLCAxMywgMjIyLCA3MywgMTIsIDEzLCAyMjIsIDcyLCAxMiwgCi0gICAgMTMsIDIyMiwgNzEsIDEyLCAxMywgMjIyLCA3MCwgMTIsIDEzLCAyMjIsIDY5LCAxMiwgMTMsIDIyMiwgNjgsIDEyLCAxMywgCi0gICAgMjIyLCA2NywgMTIsIDEzLCAyMjIsIDY2LCAxMiwgMTMsIDIyMiwgNjUsIDEyLCAxMywgMjIyLCA2NCwgMTIsIDEzLCAyMjIsIAotICAgIDYzLCAxMiwgMTMsIDIyMiwgNjIsIDEyLCAxMywgMjIyLCA2MSwgMTIsIDEzLCAyMjIsIDYwLCAxMiwgMTMsIDIyMiwgNTksIAotICAgIDEyLCAxMywgMjIyLCA1OCwgMTIsIDEzLCAyMjIsIDU3LCAxMiwgMTMsIDIyMiwgNTYsIDEyLCAxMywgMjIyLCA1NSwgMTIsIAotICAgIDEzLCAyMjIsIDU0LCAxMiwgMTMsIDIyMiwgNTMsIDEyLCAxMywgMjIyLCA1MiwgMTIsIDEzLCAyMjIsIDUxLCAxMiwgMTMsIAotICAgIDIyMiwgNTAsIDEyLCAxMywgMjIyLCA0OSwgMTIsIDEzLCAyMjIsIDQ4LCAxMiwgMTMsIDIyMiwgNDcsIDEyLCAxMywgMjIyLCAKLSAgICA0NiwgMTIsIDEzLCAyMjIsIDQ1LCAxMiwgMTMsIDIyMiwgNDQsIDEyLCAxMywgMjIyLCA0MywgMTIsIDEzLCAyMjIsIDQyLCAKLSAgICAxMiwgMTMsIDIyMiwgNDEsIDEyLCAxMywgMjIyLCA0MCwgMTIsIDEzLCAyMjIsIDM5LCAxMiwgMTMsIDIyMiwgMzgsIDEyLCAKLSAgICAxMywgMjIyLCAzNywgMTIsIDEzLCAyMTcsIDE1MSwgMTIsIDEzLCAyMTcsIDE1MCwgMTIsIDEzLCAyMTcsIDE0OSwgMTIsIAotICAgIDEzLCAyMTcsIDE0OCwgMTIsIDEzLCAyMTcsIDE0NywgMTIsIDEzLCAyMTcsIDE0NiwgMTIsIDEzLCAyMTcsIDE0NSwgMTIsIAotICAgIDEzLCAyMTcsIDE0NCwgMTIsIDEzLCAyMTcsIDE0MywgMTIsIDEzLCAyMTcsIDE0MiwgMTIsIDEzLCAyMTcsIDE0MSwgMTIsIAotICAgIDEzLCAyMTcsIDE0MCwgMTIsIDEzLCAyMTcsIDEzOSwgMTIsIDEzLCAyMTcsIDEzOCwgMTIsIDEzLCAyMTcsIDEzNywgMTIsIAotICAgIDEzLCAyMTcsIDEzNiwgMTIsIDEzLCAyMTcsIDEzNSwgMTIsIDEzLCAyMTcsIDEzNCwgMTIsIDEzLCAyMTcsIDEzMywgMTIsIAotICAgIDEzLCAyMTcsIDEzMiwgMTIsIDEzLCAyMTcsIDEzMSwgMTIsIDEzLCAyMTcsIDEzMCwgMTIsIDEzLCAyMTcsIDEyOSwgMTIsIAotICAgIDEzLCAyMTcsIDEyOCwgMTIsIDEzLCAyMTcsIDEyNywgMTIsIDEzLCAyMTcsIDEyNiwgMTIsIDEzLCAyMTcsIDEyNSwgMTIsIAotICAgIDEzLCAyMTcsIDEyNCwgMTIsIDEzLCAyMTcsIDEyMywgMTIsIDEzLCAyMTcsIDEyMiwgMTIsIDEzLCAyMTcsIDEyMSwgMTIsIAotICAgIDEzLCAyMTcsIDEyMCwgMTIsIDEzLCAyMTcsIDExOSwgMTIsIDEzLCAyMTcsIDExOCwgMTIsIDEzLCAyMTcsIDExNywgMTIsIAotICAgIDEzLCAyMTcsIDExNiwgMTIsIDEzLCAyMTcsIDExNSwgMTIsIDEzLCAyMTcsIDExNCwgMTIsIDEzLCAyMTcsIDExMywgMTIsIAotICAgIDEzLCAyMTcsIDExMiwgMTIsIDEzLCAyMTcsIDExMSwgMTIsIDEzLCAyMTcsIDExMCwgMTIsIDEzLCAyMTcsIDEwOSwgMTIsIAotICAgIDEzLCAyMTcsIDEwOCwgMTIsIDEzLCAyMTUsIDIyLCAxMiwgMTMsIDIxNSwgMjEsIDEyLCAxMywgMjE1LCAyMCwgMTIsIDEzLCAKLSAgICAyMTUsIDE5LCAxMiwgMTMsIDIxNSwgMTgsIDEyLCAxMywgMjE1LCAxNywgMTIsIDEzLCAyMTUsIDE2LCAxMiwgMTMsIDIxNSwgCi0gICAgMTUsIDEyLCAxMywgMjE1LCAxNCwgMTIsIDEzLCAyMTUsIDEzLCAxMiwgMTMsIDIxNSwgMTIsIDEyLCAxMywgMjE1LCAxMSwgCi0gICAgMTIsIDEzLCAyMTUsIDEwLCAxMiwgMTMsIDIxNSwgOSwgMTIsIDEzLCAyMTUsIDgsIDEyLCAxMywgMjE1LCA3LCAxMiwgMTMsIAotICAgIDIxNSwgNiwgMTIsIDEzLCAyMTUsIDUsIDEyLCAxMywgMjE1LCA0LCAxMiwgMTMsIDIxNSwgMywgMTIsIDEzLCAyMTUsIDIsIAotICAgIDEyLCAxMywgMjE1LCAxLCAxMiwgMTMsIDIxNSwgMCwgMTIsIDEzLCAyMTQsIDI1NSwgMTIsIDEzLCAyMTQsIDI1NCwgMTIsIAotICAgIDEzLCAyMTQsIDI1MywgMTIsIDEzLCAyMTQsIDI1MiwgMTIsIDEzLCAyMTQsIDI1MSwgMTIsIDEzLCAyMTQsIDI1MCwgMTIsIAotICAgIDEzLCAyMTQsIDI0OSwgMTIsIDEzLCAyMTQsIDI0OCwgMTIsIDEzLCAyMTQsIDI0NywgMTIsIDEzLCAyMTQsIDI0NiwgMTIsIAotICAgIDEzLCAyMTQsIDI0NSwgMTIsIDEzLCAyMTQsIDI0NCwgMTIsIDEzLCAyMTQsIDI0MywgMTIsIDEzLCAyMTQsIDI0MiwgMTIsIAotICAgIDEzLCAyMTQsIDI0MSwgMTIsIDEzLCAyMTQsIDI0MCwgMTIsIDEzLCAyMTQsIDIzOSwgMTIsIDEzLCAyMTQsIDIzOCwgMTIsIAotICAgIDEzLCAyMTQsIDIzNywgMTIsIDEzLCAyMTQsIDIzNiwgMTIsIDEzLCAyMTQsIDIzNSwgMTIsIDEzLCAyMTQsIDIzNCwgMTIsIAotICAgIDEzLCAyMTQsIDIzMywgMTIsIDEzLCAyMTQsIDIzMiwgMTIsIDEzLCAyMTQsIDEwNCwgMTIsIDEzLCAyMTQsIDEwMywgMTIsIAotICAgIDEzLCAyMTQsIDEwMiwgMTIsIDEzLCAyMTQsIDEwMSwgMTIsIDEzLCAyMTQsIDEwMCwgMTIsIDEzLCAyMTQsIDk5LCAxMiwgCi0gICAgMTMsIDIxNCwgOTgsIDEyLCAxMywgMjE0LCA5NywgMTIsIDEzLCAyMTQsIDk2LCAxMiwgMTMsIDIxNCwgOTUsIDEyLCAxMywgCi0gICAgMjE0LCA5NCwgMTIsIDEzLCAyMTQsIDkzLCAxMiwgMTMsIDIxNCwgOTIsIDEyLCAxMywgMjE0LCA5MSwgMTIsIDEzLCAyMTQsIAotICAgIDkwLCAxMiwgMTMsIDIxNCwgODksIDEyLCAxMywgMjE0LCA4OCwgMTIsIDEzLCAyMTQsIDg3LCAxMiwgMTMsIDIxNCwgODYsIAotICAgIDEyLCAxMywgMjE0LCA4NSwgMTIsIDEzLCAyMTQsIDg0LCAxMiwgMTMsIDIxNCwgODMsIDEyLCAxMywgMjE0LCA4MiwgMTIsIAotICAgIDEzLCAyMTQsIDgxLCAxMiwgMTMsIDIxNCwgODAsIDEyLCAxMywgMjE0LCA3OSwgMTIsIDEzLCAyMTQsIDc4LCAxMiwgMTMsIAotICAgIDIxNCwgNzcsIDEyLCAxMywgMjE0LCA3NiwgMTIsIDEzLCAyMTQsIDc1LCAxMiwgMTMsIDIxNCwgNzQsIDEyLCAxMywgMjE0LCAKLSAgICA3MywgMTIsIDEzLCAyMTQsIDcyLCAxMiwgMTMsIDIxNCwgNzEsIDEyLCAxMywgMjE0LCA3MCwgMTIsIDEzLCAyMTQsIDY5LCAKLSAgICAxMiwgMTMsIDIxNCwgNjgsIDEyLCAxMywgMjE0LCA2NywgMTIsIDEzLCAyMTQsIDY2LCAxMiwgMTMsIDIxNCwgNjUsIDEyLCAKLSAgICAxMywgMjE0LCA2NCwgMTIsIDEzLCAyMTQsIDYzLCAxMiwgMTMsIDIxNCwgNjIsIDEyLCAxMywgMjE0LCA2MSwgMTIsIDEzLCAKLSAgICAyMTQsIDYwLCAxMiwgMTMsIDIxNCwgNTksIDEyLCAxMywgMjE0LCA1OCwgMTIsIDEzLCAyMTQsIDU3LCAxMiwgMTMsIDIxNCwgCi0gICAgNTYsIDEyLCAxMywgMjE0LCA1NSwgMTIsIDEzLCAyMTQsIDU0LCAxMiwgMTMsIDIxNCwgNTMsIDEyLCAxMywgMjE0LCA1MiwgCi0gICAgMTIsIDEzLCAyMTQsIDUxLCAxMiwgMTMsIDIxNCwgNTAsIDEyLCAxMywgMjE0LCA0OSwgMTIsIDEzLCAyMTQsIDQ4LCAxMiwgCi0gICAgMTMsIDIxNCwgNDcsIDEyLCAxMywgMjE0LCA0NiwgMTIsIDEzLCAyMTQsIDQ1LCAxMiwgMTMsIDIxNCwgNDQsIDEyLCAxMywgCi0gICAgMjE0LCA0MywgMTIsIDEzLCAyMTQsIDQyLCAxMiwgMTMsIDIxNCwgNDEsIDEyLCAxMywgMjE0LCA0MCwgMTIsIDEzLCAyMTQsIAotICAgIDM5LCAxMiwgMTMsIDIxNCwgMzgsIDEyLCAxMywgMjE0LCAzNywgMTIsIDEzLCAyMTQsIDM2LCAxMiwgMTMsIDIxNCwgMzUsIAotICAgIDEyLCAxMywgMjE0LCAzNCwgMTIsIDEzLCAyMTQsIDMzLCAxMiwgMTMsIDIxNCwgMzIsIDEyLCAxMywgMjE0LCAzMSwgMTIsIAotICAgIDEzLCAyMTQsIDMwLCAxMiwgMTMsIDIxNCwgMjksIDEyLCAxMywgMjE0LCAyOCwgMTIsIDEzLCAyMTIsIDk3LCAxMiwgMTMsIAotICAgIDIxMiwgOTYsIDEyLCAxMywgMjEyLCA5NSwgMTIsIDEzLCAyMTIsIDk0LCAxMiwgMTMsIDIxMiwgOTMsIDEyLCAxMywgMjEyLCAKLSAgICA5MiwgMTIsIDEzLCAyMTIsIDkxLCAxMiwgMTMsIDIxMiwgOTAsIDEyLCAxMywgMjEyLCA4OSwgMTIsIDEzLCAyMTIsIDg4LCAKLSAgICAxMiwgMTMsIDIxMiwgODcsIDEyLCAxMywgMjEyLCA4NiwgMTIsIDEzLCAyMTIsIDg1LCAxMiwgMTMsIDIxMiwgODQsIDEyLCAKLSAgICAxMywgMjEyLCA4MywgMTIsIDEzLCAyMTIsIDgyLCAxMiwgMTMsIDIxMiwgODEsIDEyLCAxMywgMjEyLCA4MCwgMTIsIDEzLCAKLSAgICAyMTIsIDc5LCAxMiwgMTMsIDIxMiwgNzgsIDEyLCAxMywgMjEyLCA3NywgMTIsIDEzLCAyMTIsIDc2LCAxMiwgMTMsIDIxMiwgCi0gICAgNzUsIDEyLCAxMywgMjEyLCA3NCwgMTIsIDEzLCAyMTIsIDczLCAxMiwgMTMsIDIxMiwgNzIsIDEyLCAxMywgMjEyLCA3MSwgCi0gICAgMTIsIDEzLCAyMTIsIDcwLCAxMiwgMTMsIDIxMiwgNjksIDEyLCAxMywgMjEyLCA2OCwgMTIsIDEzLCAyMTIsIDY3LCAxMiwgCi0gICAgMTMsIDIxMiwgNjYsIDEyLCAxMywgMjExLCAxNzcsIDEyLCAxMywgMjExLCAxNzYsIDEyLCAxMywgMjExLCAxNzUsIDEyLCAKLSAgICAxMywgMjExLCAxNzQsIDEyLCAxMywgMjExLCAxNzMsIDEyLCAxMywgMjExLCAxNzIsIDEyLCAxMywgMjExLCAxNzEsIDEyLCAKLSAgICAxMywgMjExLCAxNzAsIDEyLCAxMywgMjExLCAxNjksIDEyLCAxMywgMjExLCAxNjgsIDEyLCAxMywgMjExLCAxNjcsIDEyLCAKLSAgICAxMywgMjExLCAxNjYsIDEyLCAxMywgMjExLCAxMTUsIDEyLCAxMywgMjExLCAxMTQsIDEyLCAxMywgMjExLCAxMTMsIDEyLCAKLSAgICAxMywgMjExLCAxMTIsIDEyLCAxMywgMjExLCAxMTEsIDEyLCAxMywgMjExLCAxMTAsIDEyLCAxMywgMjExLCAxMDksIDEyLCAKLSAgICAxMywgMjExLCAxMDgsIDEyLCAxMywgMjExLCAxMDcsIDEyLCAxMywgMjEwLCAxNTgsIDEyLCAxMywgMjEwLCAxNTcsIDEyLCAKLSAgICAxMywgMjEwLCAxNTYsIDEyLCAxMywgMjEwLCAxNTUsIDEyLCAxMywgMjEwLCAxNTQsIDEyLCAxMywgMjEwLCAxNTMsIDEyLCAKLSAgICAxMywgMjEwLCAxNTIsIDEyLCAxMywgMjEwLCAxNTEsIDEyLCAxMywgMjEwLCAxNTAsIDEyLCAxMywgMjEwLCAxNDksIDEyLCAKLSAgICAxMywgMjEwLCAxNDgsIDEyLCAxMywgMjEwLCAxNDcsIDEyLCAxMywgMjEwLCAxNDYsIDEyLCAxMywgMjEwLCAxNDUsIDEyLCAKLSAgICAxMywgMjEwLCAxNDQsIDEyLCAxMywgMjEwLCAxNDMsIDEyLCAxMywgMjEwLCAxNDIsIDEyLCAxMywgMjEwLCAxNDEsIDEyLCAKLSAgICAxMywgMjEwLCAxNDAsIDEyLCAxMywgMjEwLCAxMzksIDEyLCAxMywgMjEwLCAxMzgsIDEyLCAxMywgMjEwLCAxMzcsIDEyLCAKLSAgICAxMywgMjEwLCAxMzYsIDEyLCAxMywgMjEwLCAxMzUsIDEyLCAxMywgMjEwLCAxMzQsIDEyLCAxMywgMjEwLCAxMzMsIDEyLCAKLSAgICAxMywgMjEwLCAxMzIsIDEyLCAxMywgMjEwLCAxMzEsIDEyLCAxMywgMjEwLCAxMzAsIDEyLCAxMywgMjEwLCAxMjksIDEyLCAKLSAgICAxMywgMjEwLCAxMjgsIDEyLCAxMywgMjEwLCAxMjcsIDEyLCAxMywgMjEwLCAxMjYsIDEyLCAxMywgMjEwLCAxMjUsIDEyLCAKLSAgICAxMywgMjEwLCAxMjQsIDEyLCAxMywgMjEwLCAxMjMsIDEyLCAxMywgMjEwLCAxMjIsIDEyLCAxMywgMjEwLCAxMjEsIDEyLCAKLSAgICAxMywgMjEwLCAxMjAsIDEyLCAxMywgMjEwLCAxMTksIDEyLCAxMywgMjEwLCAxMTgsIDEyLCAxMywgMjU1LCA4MSwgMTIsIAotICAgIDEzLCAyNTUsIDgwLCAxMiwgMTMsIDI1NSwgNzksIDEyLCAxMywgMjU1LCA3OCwgMTIsIDEzLCAyNTUsIDc3LCAxMiwgMTMsIAotICAgIDI1NSwgNzYsIDEyLCAxMywgMjU1LCA3NSwgMTIsIDEzLCAyNTUsIDc0LCAxMiwgMTMsIDI1NSwgNzMsIDEyLCAxMywgMjU1LCAKLSAgICA3MiwgMTIsIDEzLCAyNTUsIDcxLCAxMiwgMTMsIDI1NSwgNzAsIDEyLCAxMywgMjU1LCA2OSwgMTIsIDEzLCAyNTUsIDY4LCAKLSAgICAxMiwgMTMsIDI1NSwgNjcsIDEyLCAxMywgMjU1LCA2NiwgMTIsIDEzLCAyNTUsIDY1LCAxMiwgMTMsIDI1NSwgNjQsIDEyLCAKLSAgICAxMywgMjU1LCA2MywgMTIsIDEzLCAyNTUsIDYyLCAxMiwgMTMsIDI1NSwgNjEsIDEyLCAxMywgMjU1LCA2MCwgMTIsIDEzLCAKLSAgICAyNTUsIDU5LCAxMiwgMTMsIDI1NSwgNTgsIDEyLCAxMywgMjU1LCA1NywgMTIsIDEzLCAyNTUsIDU2LCAxMiwgMTMsIDI1NSwgCi0gICAgNTUsIDEyLCAxMywgMjU1LCA1NCwgMTIsIDEzLCAyNTUsIDUzLCAxMiwgMTMsIDI1NSwgNTIsIDEyLCAxMywgMjU1LCA1MSwgCi0gICAgMTIsIDEzLCAyNTUsIDUwLCAxMiwgMTMsIDI1NSwgNDksIDEyLCAxMywgMjU1LCA0OCwgMjAsIDEsIDE2NywgMjI5LCAxNywgCi0gICAgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjQzLCA3NywgMjQ0LCA0NCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIzMSwgMjIsIAotICAgIDIyNSwgNjAsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMzEsIDIyLCAyMjUsIDYxLCAyMCwgMSwgMTY3LCAyMjksIDIzMSwgCi0gICAgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjE5LCAyMjMsIDIwLCAxLCAxNjcsIDIxNiwgNjcsIDIzMSwgMjEsIDIwLCAxLCAxNjcsIAotICAgIDIyNywgMTIyLCAyMzEsIDIxLCAyMCwgMSwgMTY3LCAyMjAsIDIxLCAyMjYsIDk0LCAyMjgsIDE3NCwgMjAsIDEsIDE2NywgCi0gICAgMjI0LCAyNTQsIDIyNiwgOTQsIDIyOCwgMTc1LCAyMjUsIDYwLCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjI2LCA5NCwgMjI4LCAKLSAgICAxNzUsIDIyNSwgNjEsIDIwLCAxLCAxNjcsIDIzMSwgMjIzLCAyMCwgMSwgMTY3LCAyMTUsIDEyMCwgMjMxLCAyMjQsIDIwLCAKLSAgICAxLCAxNjcsIDIyOSwgNzYsIDIwLCAxLCAxNjcsIDIzMSwgMjIwLCAyMCwgMSwgMTY3LCAyMzEsIDE4MSwgMjAsIDEsIDE2NywgCi0gICAgMjMwLCA1MywgMjAsIDEsIDE2NywgMjIwLCAxMjYsIDIwLCAxLCAxNjcsIDIyNywgMjQ2LCAyMCwgMSwgMTY3LCAyMzQsIAotICAgIDE1NSwgMjAsIDEsIDE2NywgMjI4LCAxNDMsIDIwLCAxLCAxNjcsIDIxOCwgNSwgMjAsIDEsIDE2NywgMjI5LCAxNiwgMjAsIAotICAgIDEsIDE2NywgMjMzLCA5MywgMjAsIDEsIDE2NywgMjMzLCAxOCwgMjMzLCAxOTUsIDIwLCAxLCAxNjcsIDIyNywgMjUzLCAKLSAgICAyMzEsIDI5LCAyMCwgMSwgMTY3LCAyMzEsIDIyNywgMjAsIDEsIDE2NywgMjI1LCAyNTAsIDIwLCAxLCAxNjcsIDI0MiwgCi0gICAgMjM4LCAyMCwgMSwgMTY3LCAyMjYsIDU0LCAyMCwgMSwgMTY3LCAyMzAsIDE1NiwgMjI5LCA1MCwgMjAsIDEsIDE2NywgMjI3LCAKLSAgICAxMDMsIDIzMSwgMzIsIDIwLCAxLCAxNjcsIDEwNCwgMjEwLCAxODgsIDIyOSwgMjI1LCAyMCwgMSwgMTY3LCAyNDIsIDIzOSwgCi0gICAgMjAsIDEsIDE2NywgMjI3LCAyNTMsIDIyNywgMjU0LCAyMCwgMSwgMTY3LCAyMTksIDEzMCwgMjAsIDEsIDE2NywgMjMxLCAKLSAgICAxNCwgMjAsIDEsIDE2NywgMjMxLCAzNSwgMjAsIDEsIDE2NywgMjMwLCAxMzUsIDIwLCAxLCAxNjcsIDIzNCwgMjU1LCAyMCwgCi0gICAgMSwgMTY3LCAyMjYsIDk0LCAyMzMsIDUzLCAyMCwgMSwgMTY3LCAyMjksIDE1NCwgMjMzLCA1MywgMjAsIDEsIDE2NywgMjI1LCAKLSAgICAxNjEsIDIwLCAxLCAxNjcsIDIzMSwgMjIxLCAyMCwgMSwgMTY3LCAyMjgsIDIxMiwgMjAsIDEsIDE2NywgMjI0LCAxMzcsIAotICAgIDIwLCAxLCAxNjcsIDIxNSwgMTE3LCAyMCwgMSwgMTY3LCAyMzIsIDk5LCAyMCwgMSwgMTY3LCAyMTksIDQzLCAyMCwgMSwgCi0gICAgMTY3LCAyMTYsIDIxNywgMjAsIDEsIDE2NywgMjMxLCAyMTgsIDIwLCAxLCAxNjcsIDIzNCwgMTYyLCAyMCwgMSwgMTY3LCAKLSAgICAyMjksIDE1MCwgMjAsIDEsIDE2NywgMjMzLCAyMDcsIDIwLCAxLCAxNjcsIDIzMCwgMTM2LCAyMCwgMSwgMTY3LCAyMTksIAotICAgIDIyMCwgMjAsIDEsIDE2NywgMjMyLCAxNDQsIDIwLCAxLCAxNjcsIDI0NCwgMTAxLCAyMCwgMSwgMTY3LCAyMjIsIDIwMSwgCi0gICAgMjAsIDEsIDE2NywgMjMzLCAyNDcsIDIwLCAxLCAxNjcsIDIxOSwgMzksIDIwLCAxLCAxNjcsIDIzMSwgMTc4LCAyMjUsIAotICAgIDEwMiwgMjAsIDEsIDE2NywgMjIwLCAxNCwgMjAsIDEsIDE2NywgMjI3LCAyNTIsIDIwLCAxLCAxNjcsIDIxOSwgMjU1LCAKLSAgICAyMjgsIDcsIDIxMCwgMTk2LCAyMCwgMSwgMTY3LCAyMjcsIDE0MiwgMjMwLCAxNTMsIDIwLCAxLCAxNjcsIDIyNiwgODksIAotICAgIDIwLCAxLCAxNjcsIDIyOCwgMTQ0LCAyMCwgMSwgMTY3LCAyMTQsIDE3MCwgMjAsIDEsIDE2NywgMjI5LCA1MywgMjAsIDEsIAotICAgIDE2NywgMjMxLCAyMTcsIDIwLCAxLCAxNjcsIDIyOCwgMTg2LCAyMCwgMSwgMTY3LCAyMzEsIDEyNCwgMjAsIDEsIDE2NywgCi0gICAgMjI3LCAxNTUsIDIwLCAxLCAxNjcsIDIxNiwgMjIxLCAyMCwgMSwgMTY3LCAyMTksIDM2LCAyMCwgMSwgMTY3LCAyMjYsIDkwLCAKLSAgICAyMCwgMSwgMTY3LCAyMjgsIDExLCAyMCwgMSwgMTY3LCAyMzEsIDIyNSwgMjAsIDEsIDE2NywgMjI3LCAxNTIsIDIwLCAxLCAKLSAgICAxNjcsIDIzNCwgMjIyLCAyMCwgMSwgMTY3LCAyMjgsIDE0LCAyMCwgMSwgMTY3LCAyMTMsIDI1MCwgMjAsIDEsIDE2NywgCi0gICAgMjMyLCAxMDMsIDIwLCAxLCAxNjcsIDIyOSwgMTAzLCAyMCwgMSwgMTY3LCAyMjksIDIwMSwgMjAsIDEsIDE2NywgMjMxLCAKLSAgICAxMjMsIDIwLCAxLCAyMjUsIDE0MSwgMjI4LCA5LCAyMCwgMSwgMjI1LCAxNDEsIDIxNSwgMTIwLCAyMzEsIDIyMiwgMjAsIDEsIAotICAgIDIyNSwgMTQxLCAyMTksIDE4NywgMjAsIDEsIDIyNSwgMTQxLCAyMjAsIDEzMCwgMjE1LCAxMTksIDIwLCAxLCAyMjUsIDE0MSwgCi0gICAgMjMyLCAxNDYsIDIyNywgMjQ5LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTMwLCAyMzEsIDIyNiwgMjAsIDEsIDIyNSwgMTQxLCAKLSAgICAyMzQsIDkzLCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgMTUsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMjUsIDIwLCAxLCAyMjUsIAotICAgIDE0MSwgMjM0LCAyNDMsIDIwLCAxLCAyMjUsIDE0MSwgMjI1LCAyMTEsIDIwLCAxLCAyMjUsIDE0MSwgMjExLCA4OSwgMjMzLCAKLSAgICA1MywgMjAsIDEsIDIyNSwgMTQxLCAyMzMsIDEwOSwgMjI4LCA3LCAyMjcsIDE2NCwgMjAsIDEsIDIyNSwgMTQxLCAyMjcsIAotICAgIDI0NywgMjIwLCA0MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDEyMSwgMjI4LCAxODksIDIwLCAxLCAyMjUsIDE0MSwgMjQyLCAKLSAgICAyMzYsIDIwLCAxLCAyMjUsIDE0MSwgMjI1LCA1MiwgMjAsIDEsIDIyNSwgMTQxLCAyMTUsIDEyMCwgMjI4LCA1LCAyMCwgMSwgCi0gICAgMjI1LCAxNDEsIDIyMCwgNDUsIDIyOCwgMTg0LCAyMCwgMSwgMjI1LCAxNDEsIDIyMCwgNDEsIDIwLCAxLCAyMjUsIDE0MSwgCi0gICAgMjMxLCAyMiwgMjE2LCAyMjAsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMTIsIDIzMSwgMTI2LCAyMCwgMSwgMjI1LCAxNDEsIAotICAgIDIyNywgMTUzLCAyMjcsIDI0OSwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE1MSwgMjAsIDEsIDIyNSwgMTQxLCAyNDIsIDIzNywgCi0gICAgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE0NywgMjAsIDEsIDIyNSwgMTQxLCAyMzMsIDEzNSwgMjAsIDEsIDIyNSwgMTQxLCAKLSAgICAyMjUsIDI1MywgMjAsIDEsIDIyNSwgMTQxLCAyMTMsIDE4MiwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDE4LCAyMzAsIDUxLCAKLSAgICAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNTIsIDIzMSwgMTA4LCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgMTkzLCAyMCwgMSwgCi0gICAgMjI1LCAxNDEsIDIyMiwgMTMsIDIwLCAxLCAyMjUsIDE0MSwgMjE3LCA5OCwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDM0LCAKLSAgICAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMzcsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAzOCwgMjMzLCA5MCwgMjAsIDEsIDIyNSwgCi0gICAgMTQxLCAyMzEsIDI0LCAyMCwgMSwgMjI1LCAxNDEsIDIxOCwgNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMTYsIDIwLCAxLCAKLSAgICAyMjUsIDE0MSwgMjMwLCAxMzgsIDIwLCAxLCAyMjUsIDE0MSwgMjI3LCAxNjcsIDIwLCAxLCAyMjUsIDE0MSwgMjI0LCAxNDEsIAotICAgIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAzMywgMjI5LCA1NCwgMjAsIDEsIDIyNSwgMTQxLCAyNDQsIDEzNCwgMjAsIDEsIDIyNSwgCi0gICAgMTQxLCAyMzEsIDEwMywgMjAsIDEsIDIyNSwgMTQxLCAyNDQsIDE1NSwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE1OSwgMjAsIAotICAgIDEsIDIyNSwgMTQxLCAyMzEsIDI0NCwgMjI4LCAxNzgsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAyNDQsIDIyOCwgMTU0LCAyMCwgCi0gICAgMSwgMjI1LCAxNDEsIDIzMywgMTcsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCA2MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjgsIDE2LCAKLSAgICAyMCwgMSwgMjI1LCAxNDEsIDE4NiwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDgwLCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNiwgCi0gICAgMjAsIDEsIDEzNywgMjI5LCAxNywgMjMxLCAyMjQsIDIwLCAxLCAxMzcsIDIyNywgMTIxLCAyMCwgMSwgMTM3LCAyMTAsIAotICAgIDE5NiwgMjAsIDEsIDEzNywgMjEyLCA1MywgMjAsIDEsIDEzNywgMjI5LCA1MywgMjAsIDEsIDEzNywgMjI5LCAxNDIsIDIwLCAKLSAgICAxLCAxMzcsIDIyOSwgMjQsIDIwLCAxLCAxMzcsIDI0MiwgMjQ2LCAyMCwgMSwgMTM3LCAyMzEsIDEyMCwgMjAsIDEsIDEzNywgCi0gICAgMjQzLCA4NCwgMjAsIDEsIDEzNywgMjI3LCAxNDQsIDIzMCwgMTc1LCAyMzEsIDM2LCAyMCwgMSwgMTM3LCAyMjcsIDI0NSwgCi0gICAgMjMxLCAxMTEsIDIwLCAxLCAxMzcsIDIzMSwgMTE3LCAyMCwgMSwgMTM3LCAyMjUsIDU4LCAyMCwgMSwgMTM3LCAyMjksIAotICAgIDEyNywgMjAsIDEsIDEzNywgMjMxLCAxMjgsIDI1MSwgMzcsIDIwLCAxLCAxMzcsIDIzNCwgMTQ5LCAyMCwgMSwgMTM3LCAKLSAgICAyNDIsIDI0NywgMjAsIDEsIDEzNywgMjM0LCAxNTYsIDIwLCAxLCAxMzcsIDIxMCwgMjEzLCAyMzAsIDgxLCAyMCwgMSwgCi0gICAgMTM3LCAyMjcsIDExNSwgMjAsIDEsIDEzNywgMjMxLCAxMDUsIDIwLCAxLCAxMzcsIDIyOCwgMTUsIDIwLCAxLCAxMzcsIAotICAgIDIzMSwgMTExLCAyMCwgMSwgMTM3LCAyMTEsIDE2LCAyMCwgMSwgMTM3LCAyMzMsIDI1NSwgMjAsIDEsIDEzNywgMjM1LCAxNiwgCi0gICAgMjAsIDEsIDEzNywgMjIwLCAxMjUsIDIwLCAxLCAxMzcsIDIyOSwgMTM2LCAyMCwgMSwgMTM3LCAyMTcsIDk2LCAyMCwgMSwgCi0gICAgMTM3LCAyMjgsIDE1OCwgMjAsIDEsIDEzNywgMjE2LCA2NywgMjEwLCAxOTgsIDIwLCAxLCAxMzcsIDIxOCwgODAsIDIwLCAxLCAKLSAgICAxMzcsIDIyOSwgNDQsIDIyNywgMTY0LCAyMCwgMSwgMTM3LCAyMTMsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAyMDQsIDIwLCAKLSAgICAxLCAxMzcsIDIzMSwgMjQ0LCAyMzQsIDE1OCwgMjAsIDEsIDEzNywgMjI3LCAyNTQsIDIwLCAxLCAxMzcsIDIyOSwgMzksIAotICAgIDIwLCAxLCAxMzcsIDIzMywgOTQsIDIwLCAxLCAxMzcsIDIzMSwgMTEzLCAyMCwgMSwgMTM3LCAyMzEsIDEzLCAyMCwgMSwgCi0gICAgMTM3LCAyMjcsIDI0OCwgMjAsIDEsIDEzNywgMjE2LCAyMTYsIDIwLCAxLCAxMzcsIDIyOSwgNDEsIDIwLCAxLCAxMzcsIAotICAgIDI0MywgMjQwLCAyMCwgMSwgMTM3LCAyMjksIDE0MSwgMjAsIDEsIDEzNywgMjI4LCAxNywgMjAsIDEsIDEzNywgMjI4LCAxMywgCi0gICAgMjAsIDEsIDEzNywgMjUxLCAxMTUsIDIwLCAxLCAxMzcsIDIxMywgMTgzLCAyMCwgMSwgMTM3LCAyMzEsIDExOCwgMjAsIDEsIAotICAgIDEzNywgMjIyLCAxNDIsIDIwLCAxLCAxMzcsIDIyOCwgMTg4LCAyMCwgMSwgMTM3LCAyMzMsIDEwOCwgMjAsIDEsIDEzNywgCi0gICAgMjE2LCA2NSwgMjAsIDEsIDEzNywgMjI3LCAyNTUsIDIyOSwgNiwgMjAsIDEsIDEzNywgMjI4LCAxODAsIDIwLCAxLCAxMzcsIAotICAgIDIzNCwgMTYyLCAyMCwgMSwgMTM3LCAyMjksIDQ1LCAyMCwgMSwgMTM3LCAyMzEsIDIxNywgMjAsIDEsIDEzNywgMjMxLCAKLSAgICAxMDYsIDIwLCAxLCAxMzcsIDIzMiwgMTAzLCAyMCwgMSwgMTM3LCAyMzMsIDE5NSwgMjAsIDEsIDEzNywgMjI4LCAxODYsIAotICAgIDIwLCAxLCAxMzcsIDIyOSwgNiwgMjAsIDEsIDEzNywgMjExLCAxODQsIDIwLCAxLCAxMzcsIDIyOSwgNDIsIDIwLCAxLCAKLSAgICAxMzcsIDIyOCwgMiwgMjAsIDEsIDEzNywgMjI3LCAyNTAsIDIwLCAxLCAxMzcsIDIzMywgMjA5LCAyMjgsIDE0NCwgMjAsIDEsIAotICAgIDEzNywgMjI4LCAwLCAyMCwgMSwgMTM3LCAyMjksIDE0OSwgMjAsIDEsIDEzNywgMjMxLCAyNDQsIDIyOCwgNSwgMjAsIDEsIAotICAgIDEzNywgMjExLCAxMDMsIDIwLCAxLCAxMzcsIDIyOSwgMTQ4LCAyMCwgMSwgMTM3LCAyMTksIDIyMiwgMjAsIDEsIDEzNywgCi0gICAgMjIwLCAxMjgsIDIwLCAxLCAxMzcsIDIzMSwgMTE0LCAyMCwgMSwgMTM3LCAyMzEsIDIyNCwgMjAsIDEsIDEzNywgMjMxLCAKLSAgICAxMjQsIDIwLCAxLCAxMzcsIDIzNCwgMTUwLCAyMCwgMSwgMTM3LCAyMzEsIDExNSwgMjAsIDEsIDEzNywgMjM0LCAxNTQsIAotICAgIDIwLCAxLCAxMzcsIDIzMSwgMTI4LCAyMjUsIDEwNiwgMjAsIDEsIDEzNywgMjEwLCAxNzksIDIwLCAxLCAxMzcsIDIyOCwgCi0gICAgMTc2LCAyMCwgMSwgMTM3LCAyMzAsIDIyNSwgMjAsIDEsIDEzNywgMjMwLCAxMDUsIDIwLCAxLCAxMzcsIDIyMCwgMTcsIDIwLCAKLSAgICAxLCAxMzcsIDIzNCwgMTcyLCAyMzMsIDc2LCAyMCwgMSwgMTM3LCAyMzQsIDE3MiwgMjQ0LCAxNjgsIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgNzQsIDIwLCAxLCAxMzcsIDIyOSwgMjAxLCAyMCwgMSwgMTM3LCAyMzIsIDIwNiwgMjAsIDEsIDEzNywgMjI1LCA2OCwgCi0gICAgMjAsIDEsIDEzNywgMjI1LCAyMDIsIDIwLCAxLCAxMzcsIDIxNiwgMjMxLCAyMCwgMSwgMTA3LCAyMzEsIDEwNCwgMjAsIDEsIAotICAgIDEwNywgMjEyLCA1MSwgMjAsIDEsIDEwNywgMjI4LCAxNzQsIDIwLCAxLCAxMDcsIDIzMSwgMjEsIDIwLCAxLCAxMDcsIDIyOCwgCi0gICAgMTcyLCAyMCwgMSwgMTA3LCAyMzIsIDI0MSwgMjAsIDEsIDEwNywgMjI4LCAxNzcsIDIwLCAxLCAxMDcsIDIyOCwgMTIsIDIwLCAKLSAgICAxLCAxMDcsIDIyOSwgNTksIDIwLCAxLCAxMDcsIDIyNywgMTY0LCAyMCwgMSwgMTA3LCAyMTEsIDE5NCwgMjAsIDEsIDEwNywgCi0gICAgMjI5LCAxNCwgMjAsIDEsIDEwNywgMjIwLCA2MywgMjAsIDEsIDEwNywgMjI5LCAyNSwgMjAsIDEsIDEwNywgMjM0LCAxNTcsIAotICAgIDIwLCAxLCAxMDcsIDIxNiwgMjE4LCAyMCwgMSwgMTA3LCAyMjAsIDQzLCAyMCwgMSwgMTA3LCAyMjgsIDE4NSwgMjAsIDEsIAotICAgIDEwNywgMjE4LCA1MywgMjAsIDEsIDEwNywgMjM0LCAxNjIsIDIwLCAxLCAxMDcsIDIxMSwgOTEsIDIwLCAxLCAxMDcsIDIzMywgCi0gICAgMjEwLCAyMCwgMSwgMTA3LCAyMjEsIDIzNiwgMjAsIDEsIDEwNywgMjMxLCAyNiwgMjAsIDEsIDEwNywgMjI5LCAxNDAsIDIwLCAKLSAgICAxLCAxMDcsIDIzMSwgMTkzLCAyMCwgMSwgMTA3LCAyMzEsIDMyLCAyMCwgMSwgMTA3LCAyMjAsIDEyNywgMjAsIDEsIDEwNywgCi0gICAgMjExLCAzOSwgMjAsIDEsIDEwNywgMjI4LCAxNzksIDIwLCAxLCAxMDcsIDIzNCwgMTUzLCAyMzEsIDEwNywgMjAsIDEsIAotICAgIDEwNywgMjI5LCAyMSwgMjAsIDEsIDEwNywgMjE1LCAxMTksIDIwLCAxLCAxMDcsIDI0MiwgMjU1LCAyMCwgMSwgMTA3LCAKLSAgICAyMjksIDExLCAyMCwgMSwgMTA3LCAyNDQsIDEzNSwgMjAsIDEsIDEwNywgMjI5LCAxNDQsIDIwLCAxLCAxMDcsIDIzMSwgNSwgCi0gICAgMjAsIDEsIDEwNywgMjMzLCAxMSwgMjAsIDEsIDEwNywgMjI5LCAxMjYsIDIwLCAxLCAxMDcsIDIzMCwgMTUyLCAyMCwgMSwgCi0gICAgMTA3LCAyMzEsIDksIDIwLCAxLCAxMDcsIDIyNCwgMTIxLCAyMCwgMSwgMTA3LCAyMzEsIDcsIDIwLCAxLCAxMDcsIDIzMSwgCi0gICAgMjMsIDIwLCAxLCAxMDcsIDIzMiwgODksIDIwLCAxLCAxMDcsIDIyOCwgNCwgMjAsIDEsIDEwNywgMjMxLCAxMjcsIDIwLCAxLCAKLSAgICAxMDcsIDIzMywgMTg2LCAyMCwgMSwgMTA3LCAyMjcsIDE1NSwgMjAsIDEsIDEwNywgMjE2LCAyMjEsIDIwLCAxLCAxMDcsIAotICAgIDIxOSwgMzYsIDIwLCAxLCAxMDcsIDIxMCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE1NCwgMjAsIDEsIDEwNywgMjIzLCAKLSAgICAxNzMsIDIwLCAxLCAxMDcsIDIxNywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgMjIsIDIwLCAxLCAxMDcsIDIzMSwgMjgsIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMywgMjAsIDEsIDEwNywgMjM0LCAxNTIsIDIwLCAxLCAxMDcsIDIyNSwgNjIsIDIwLCAxLCAxMDcsIAotICAgIDIyNSwgMTU1LCAyMCwgMSwgMTA3LCAyMjcsIDEzMSwgMjAsIDEsIDEwNywgMjMzLCAxNywgMjAsIDEsIDEwNywgMjI5LCA2MCwgCi0gICAgMjAsIDEsIDEwNywgMjMxLCAyNSwgMjAsIDEsIDEwNywgMjI5LCAzNCwgMjAsIDEsIDEwNywgMjEwLCAxOTMsIDIwLCAxLCAKLSAgICAxMDcsIDIyNiwgMjUsIDIwLCAxLCAxMDcsIDIxMCwgMTkyLCAyMCwgMSwgMTA3LCAyMjksIDE0OSwgMjAsIDEsIDEwNywgCi0gICAgMjI3LCAyNDksIDIwLCAxLCAxMDcsIDIxOCwgODIsIDIwLCAxLCAxMDcsIDIzMywgMjE0LCAyMCwgMSwgMTA3LCAyMjksIDQ5LCAKLSAgICAyMCwgMSwgMTA3LCAyMjksIDE5LCAyMCwgMSwgMTA3LCAyMTUsIDEwMywgMjAsIDEsIDEwNywgMjMxLCAzNiwgMjAsIDEsIAotICAgIDEwNywgMjMzLCAyMDQsIDIwLCAxLCAxMDcsIDIyOCwgMSwgMjAsIDEsIDEwNywgMjE2LCAyMTksIDIwLCAxLCAxMDcsIDIzMSwgCi0gICAgMjE5LCAyMCwgMSwgMTA3LCAyMjksIDU4LCAyMCwgMSwgMTA3LCAyMzMsIDEwLCAyMCwgMSwgMTA3LCAyMjksIDQwLCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDYsIDIwLCAxLCAxMDcsIDIyOCwgMTU4LCAyMCwgMSwgMTA3LCAyNDIsIDI0MCwgMjAsIDEsIDEwNywgCi0gICAgMjMzLCAyMjMsIDIwLCAxLCAxMDcsIDIyMywgODcsIDIyNiwgMjEzLCAyMCwgMSwgMTA3LCAyMTcsIDg3LCAyMCwgMSwgMTA3LCAKLSAgICAyMTYsIDExLCAyMCwgMSwgMTA3LCAyMjcsIDE1MiwgMjAsIDEsIDEwNywgMjIyLCAyNDIsIDIwLCAxLCAxMDcsIDIzMywgNTUsIAotICAgIDIwLCAxLCAxMDcsIDIzMSwgODQsIDIwLCAxLCAxMDcsIDE5NCwgMjAsIDEsIDEwNywgMjE4LCA1LCAyMCwgMSwgMTA3LCAKLSAgICAyMzAsIDEwNywgMjAsIDEsIDEwNywgMjIwLCAyOSwgMjAsIDEsIDEwNywgMjIwLCAzOSwgMjAsIDEsIDEwNywgMjMzLCAxNjEsIAotICAgIDIwLCAxLCAxMDcsIDIyNywgMjQyLCAyMCwgMSwgMTA3LCAyMTksIDIyNywgMjAsIDEsIDEwNywgMjI3LCAyNTEsIDIwLCAxLCAKLSAgICAxMDcsIDIyNSwgMjE0LCAyMCwgMSwgMTA3LCAyMjgsIDIzOCwgMjAsIDEsIDEwNywgMjE5LCAyNTQsIDIwLCAxLCAxMDcsIAotICAgIDIyNCwgMTM2LCAyMCwgMSwgMTA3LCAyMzAsIDUxLCAyMCwgMSwgMTA3LCAyMzIsIDEyNSwgMjAsIDEsIDEwNywgMjIzLCA4NywgCi0gICAgMjMwLCAxMDEsIDIwLCAxLCAxMDcsIDIxNiwgMTE4LCAyMCwgMSwgMTA3LCAyMjcsIDI0MywgMjAsIDEsIDEwNywgMjMxLCAKLSAgICAxMjgsIDE5OSwgMjAsIDEsIDEwNywgMjIxLCAyMzQsIDIwLCAxLCAxMDcsIDI0NCwgMjAzLCAyMCwgMSwgODIsIDIyOSwgCi0gICAgMTQ4LCAyMCwgMSwgODIsIDIxNiwgMTcsIDIwLCAxLCA4MiwgMjMxLCAxMTcsIDIwLCAxLCA4MiwgMjMzLCA5NCwgMjAsIDEsIAotICAgIDgyLCAyMTMsIDEyOCwgMjAsIDEsIDgyLCAyMzIsIDEzMSwgMjAsIDEsIDgyLCAyMjYsIDkzLCAyMCwgMSwgODIsIDIxOSwgCi0gICAgNDcsIDIwLCAxLCA4MiwgMjIzLCAxNDgsIDIwLCAxLCA4MiwgMjI4LCA4LCAyMCwgMSwgODIsIDIyOSwgMTE5LCAyMCwgMSwgCi0gICAgODIsIDIyNCwgMTUwLCAyMCwgMSwgODIsIDIxNywgNjMsIDIwLCAxLCA4MiwgMjI5LCAyNywgMjAsIDEsIDgyLCAyMzMsIAotICAgIDI1MSwgMjAsIDEsIDgyLCAyMTEsIDE4NywgMjAsIDEsIDgyLCAyMjEsIDE3MiwgMjAsIDEsIDgyLCAyMjksIDUwLCAyMCwgMSwgCi0gICAgODIsIDIyNiwgOTAsIDIwLCAxLCA4MiwgMjE2LCAxOCwgMjAsIDEsIDgyLCAyMzMsIDIwOCwgMjAsIDEsIDgyLCAyMzIsIAotICAgIDE0NSwgMjAsIDEsIDgyLCAyMjgsIDExLCAyMCwgMSwgODIsIDIyOSwgMywgMjAsIDEsIDgyLCAyMzEsIDIyNSwgMjAsIDEsIAotICAgIDgyLCAyMjksIDIwLCAyMCwgMSwgODIsIDIyOSwgMiwgMjAsIDEsIDgyLCAyMjgsIDEwLCAyMCwgMSwgODIsIDIyMiwgMjQwLCAKLSAgICAyMCwgMSwgODIsIDIyOCwgMTc2LCAyMCwgMSwgODIsIDIyNSwgMjEzLCAyMCwgMSwgODIsIDIyMiwgMzMsIDIwLCAxLCA4MiwgCi0gICAgMjI5LCAzNSwgMjAsIDEsIDgyLCAyMzEsIDE1LCAyMCwgMSwgODIsIDI0MiwgMjM0LCAyMCwgMSwgODIsIDIyOSwgMjMsIDIwLCAKLSAgICAxLCA4MiwgMjI4LCAxODcsIDIwLCAxLCA4MiwgMjMxLCAxNzcsIDIwLCAxLCA4MiwgMjMyLCAxMjcsIDIwLCAxLCA4MiwgCi0gICAgMjI5LCA1NSwgMjAsIDEsIDgyLCAyMjksIDEzMiwgMjAsIDEsIDgyLCAyMTcsIDg2LCAyMjcsIDI0OSwgMjAsIDEsIDgyLCAKLSAgICAyMjAsIDEyOSwgMjAsIDEsIDgyLCAyMjQsIDE0NiwgMjAsIDEsIDgyLCAyMjksIDE1MiwgMjE5LCA1MywgMjAsIDEsIDgyLCAKLSAgICAyMjksIDQzLCAyMjcsIDE2NCwgMjAsIDEsIDgyLCAyMTEsIDQsIDIwLCAxLCA4MiwgMjQyLCAyMzUsIDIwLCAxLCA4MiwgCi0gICAgMjE1LCAxMTgsIDIwLCAxLCA4MiwgMjExLCAxOSwgMjAsIDEsIDgyLCAyMjUsIDE5LCAyMCwgMSwgODIsIDIxNSwgMTA4LCAKLSAgICAyMCwgMSwgODIsIDIzNCwgMTYwLCAyMCwgMSwgODIsIDIxOCwgODEsIDIwLCAxLCA4MiwgMjE2LCAyMjAsIDIwLCAxLCA4MiwgCi0gICAgMjEzLCAxODQsIDIwLCAxLCA4MiwgMjEyLCA2LCAyMCwgMSwgODIsIDIzMywgMTM4LCAyMCwgMSwgODIsIDIyNCwgMTUzLCAKLSAgICAyMCwgMSwgODIsIDIxNywgOTcsIDIwLCAxLCA4MiwgMjQyLCAyNTQsIDIwLCAxLCA4MiwgMjI5LCA2NCwgMjAsIDEsIDgyLCAKLSAgICAyMjAsIDQyLCAyMCwgMSwgODIsIDIzMSwgMTAsIDIwLCAxLCA4MiwgMjMxLCAxMjEsIDIwLCAxLCA4MiwgMjI3LCAxMTksIAotICAgIDIwLCAxLCA4MiwgMjI4LCAxNDEsIDIwLCAxLCA4MiwgMjQzLCA4MCwgMjAsIDEsIDgyLCAyMTUsIDEwOSwgMjAsIDEsIDgyLCAKLSAgICAyMzMsIDIxNywgMjAsIDEsIDgyLCAyMTEsIDY3LCAyMCwgMSwgODIsIDIyNywgMTUzLCAyNTAsIDI0LCAyMCwgMSwgODIsIAotICAgIDIxMCwgMjUwLCAyMCwgMSwgODIsIDIzMSwgMjcsIDIwLCAxLCA4MiwgMjI5LCAxMzcsIDIwLCAxLCA4MiwgMjI1LCAxMDMsIAotICAgIDIwLCAxLCA4MiwgMjEwLCAxOTcsIDIwLCAxLCA4MiwgMjMzLCAxMiwgMjAsIDEsIDgyLCAyNDMsIDI0MCwgMjAsIDEsIDgyLCAKLSAgICAyNDMsIDc5LCAyMCwgMSwgODIsIDIyOSwgMTMsIDIwLCAxLCA4MiwgMjM0LCAxNjIsIDIwLCAxLCA4MiwgMjMxLCAyMjgsIAotICAgIDIwLCAxLCA4MiwgMjI5LCAyNiwgMjAsIDEsIDgyLCAyNDIsIDI0MSwgMjAsIDEsIDgyLCAyNDQsIDIwNCwgMjAsIDEsIDgyLCAKLSAgICAyMjcsIDI0NCwgMjAsIDEsIDgyLCAyMjUsIDE1NiwgMjAsIDEsIDgyLCAyMTEsIDE3LCAyMCwgMSwgODIsIDIyOSwgNTEsIAotICAgIDIwLCAxLCA4MiwgMjI3LCAxNTMsIDI1MiwgMzEsIDIwLCAxLCA4MiwgMjI3LCA5OSwgMjAsIDEsIDgyLCAyMjQsIDI1MCwgCi0gICAgMjAsIDEsIDgyLCAyMzAsIDIyNSwgMjAsIDEsIDgyLCAyNDMsIDIzOCwgMjAsIDEsIDgyLCAyMjksIDIyNSwgMjAsIDEsIDgyLCAKLSAgICAyMzAsIDEwNSwgMjAsIDEsIDgyLCAyNDIsIDI0MCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgNzQsIDIwLCAxLCA4MiwgMjMwLCAKLSAgICA1MiwgMjAsIDEsIDgyLCAyMjQsIDE0OSwgMjAsIDEsIDgyLCAyMjksIDE1LCAyMCwgMSwgODIsIDIzMywgMTk1LCAyMCwgMSwgCi0gICAgODIsIDIyNSwgMTAwLCAyMCwgMSwgODIsIDIyNywgMjUyLCAyMCwgMSwgODIsIDIxMSwgMTgsIDIwLCAxLCA4MiwgMjI5LCAKLSAgICAzNiwgMjAsIDEsIDgyLCAyMjYsIDk0LCAyMjUsIDE5MCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgMjUxLCAyMywgMjAsIDEsIAotICAgIDgyLCAyNDQsIDQ1LCAyMCwgMSwgODIsIDIyOCwgMTgxLCAyMCwgMSwgODIsIDYxLCAyMCwgMSwgODIsIDIxNiwgMTEsIDIwLCAKLSAgICAxLCA4MiwgNzgsIDIwLCAxLCA4MiwgNzQsIDIwLCAxLCA4MiwgMjMzLCA5MiwgMjAsIDEsIDgyLCAyMjYsIDk0LCAyMjUsIAotICAgIDI2LCAyMCwgMSwgODIsIDIxNywgMTAyLCAyMCwgMSwgODIsIDIxNywgNTIsIDIwLCAxLCA4MiwgMjI5LCAxNTIsIDIzMCwgCi0gICAgMzksIDI0MCwgMjQxLCAyMCwgMSwgODIsIDIyMCwgMTcsIDIwLCAxLCA4MiwgMjExLCAxNCwgMjAsIDEsIDgyLCAyMjgsIAotICAgIDI1MiwgMjAsIDEsIDgyLCAyMTAsIDIwMiwgMjAsIDEsIDgyLCAyMTAsIDIyNywgMjE3LCAyNDEsIDIwLCAxLCA4MiwgMjEwLCAKLSAgICAyMjcsIDI0OSwgMTU1LCAyMCwgMSwgODIsIDIxMCwgMTg3LCAyMCwgMSwgODIsIDIxMCwgMTk1LCAyMCwgMSwgODIsIDIzNCwgCi0gICAgMTQ4LCAyMCwgMSwgODIsIDIyNSwgMTU0LCAyMCwgMSwgODIsIDIyOCwgMTgyLCAyNDUsIDExMCwgMjAsIDEsIDgyLCAyMjQsIAotICAgIDE0NywgMjAsIDEsIDgyLCAyMTEsIDE5MiwgMjAsIDEsIDgyLCAyNDQsIDE1NSwgMjAsIDEsIDgyLCAyMTMsIDI1MCwgMjAsIAotICAgIDEsIDgyLCAyMzIsIDEwMywgMjAsIDEsIDgyLCAyMzAsIDIzNSwgMjAsIDEsIDgyLCAyMjMsIDU0LCAyMCwgMSwgODIsIDIyMywgCi0gICAgMTc0LCAyMCwgMSwgODIsIDIyOCwgMjUxLCAyMCwgMSwgODIsIDIyOSwgODIsIDIwLCAxLCA4MiwgMjIwLCA5LCAyMCwgMSwgCi0gICAgODIsIDIxOSwgMjU0LCAyMCwgMSwgODIsIDI0MywgMjQyLCAyMjMsIDg5LCAyMCwgMSwgODIsIDE5OCwgMjAsIDEsIDgyLCAKLSAgICAyMjUsIDExMSwgMjAsIDEsIDgyLCAyMzIsIDEyNSwgMjAsIDEsIDgyLCAyMzQsIDM0LCAyMCwgMSwgODIsIDIzMSwgNjMsIAotICAgIDIwLCAxLCA4MiwgMTg2LCAyMCwgMSwgODIsIDIzMSwgMTc0LCAyMCwgMSwgODIsIDIxNiwgMjIyLCAyMCwgMSwgODIsIDIzNCwgCi0gICAgOTgsIDIwLCAxLCA4MiwgMjMwLCAxNTUsIDIwLCAxLCA4MiwgMjE2LCAyNDgsIDIwLCAxLCA4MiwgMjQ0LCAxNzcsIDIwLCAxLCAKLSAgICA4MiwgMjQyLCAyMzAsIDIwLCAxLCAyMjUsIDE0MCwgMTc2LCAyMCwgMSwgMjI1LCAxNDAsIDY5LCAyMCwgMSwgMjI1LCAxNDAsIAotICAgIDIzMywgMjIzLCAyMCwgMSwgMjI1LCAxNDAsIDI0NSwgMjE3LCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgMTExLCAyMCwgMSwgCi0gICAgMjI1LCAxNDAsIDIxNywgODcsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAxNTIsIDIwLCAxLCAyMjUsIDE0MCwgMjMzLCAxNDEsIAotICAgIDIwLCAxLCAyMjUsIDE0MCwgMjIyLCAyNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCAzMiwgMjAsIDEsIDIyNSwgMTQwLCAKLSAgICAyMzEsIDg0LCAyMCwgMSwgMjI1LCAxNDAsIDIxNywgMTAyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgMTUxLCAyMCwgMSwgCi0gICAgMjI1LCAxNDAsIDIyOCwgMTg4LCAyMCwgMSwgMjI1LCAxNDAsIDE5NCwgMjAsIDEsIDIyNSwgMTQwLCAyMTgsIDUsIDIwLCAxLCAKLSAgICAyMjUsIDE0MCwgMjIwLCAyOSwgMjAsIDEsIDIyNSwgMTQwLCAyMTksIDE5MywgMjAsIDEsIDIyNSwgMTQwLCAyMjAsIDEyNSwgCi0gICAgMjAsIDEsIDIyNSwgMTQwLCAyMzMsIDE2MSwgMjAsIDEsIDIyNSwgMTQwLCAyMzQsIDE2MiwgMjAsIDEsIDIyNSwgMTQwLCAKLSAgICAyMjcsIDIxMywgMjAsIDEsIDIyNSwgMTQwLCAyMjcsIDI0MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjgsIDE1OSwgMjAsIDEsIAotICAgIDIyNSwgMTQwLCAyMTAsIDIyNiwgMjAsIDEsIDIyNSwgMTQwLCAyMTksIDIyNywgMjAsIDEsIDIyNSwgMTQwLCAxOTIsIDIwLCAKLSAgICAxLCAyMjUsIDE0MCwgMjI4LCAxNCwgMjAsIDEsIDIyNSwgMTQwLCAyMjUsIDE1NCwgMjAsIDEsIDIyNSwgMTQwLCAyMjcsIAotICAgIDI1MSwgMjAsIDEsIDIyNSwgMTQwLCAyMTEsIDE5MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjUsIDIxNCwgMjAsIDEsIDIyNSwgCi0gICAgMTQwLCAyMjIsIDE0MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjgsIDIzOCwgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDU0LCAyMCwgCi0gICAgMSwgMjI1LCAxNDAsIDIzNCwgMTcxLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgMTIsIDIwLCAxLCAyMjUsIDE0MCwgMjI5LCAKLSAgICA2MSwgMjAsIDEsIDIyNSwgMTQwLCAyMjAsIDksIDIwLCAxLCAyMjUsIDE0MCwgMjI0LCAxNTAsIDIwLCAxLCAyMjUsIDE0MCwgCi0gICAgMjQ0LCA0NSwgMjAsIDEsIDIyNSwgMTQwLCAyMTIsIDY1LCAyMCwgMSwgMjI1LCAxNDAsIDIzMiwgMjQ3LCAyMCwgMSwgMjI1LCAKLSAgICAxNDAsIDIzMiwgMTI1LCAyMCwgMSwgMjI1LCAxNDAsIDIzNCwgMzQsIDIwLCAxLCAyMjUsIDE0MCwgMjMxLCAxMTksIDIwLCAKLSAgICAxLCAyMjUsIDE0MCwgMjIzLCA4NiwgMjAsIDEsIDIyNSwgMTQwLCAxODYsIDIwLCAxLCAyMjUsIDE0MCwgMjMwLCAxNjYsIAotICAgIDIwLCAxLCAyMjUsIDE0MCwgMjMxLCAxMjcsIDIwLCAxLCAyMjUsIDE0MCwgMjE2LCAyMzEsIDIwLCAxLCAyMjUsIDE0MCwgCi0gICAgMjM0LCAxLCAyMCwgMSwgMjI1LCAxNDAsIDIyMSwgMjUzLCAyMCwgMSwgMjI1LCAxNDAsIDIxMiwgMTE1LCA5NSwgMSwgMTkxLCAKLSAgICA5NSwgMSwgMjUyLCAxOTksIDk1LCAxLCA4LCAxOTEsIDk1LCAxLCAyMjUsIDQ1LCA5NSwgMSwgMTg2LCA5NSwgMSwgMjMwLCAKLSAgICAyMzgsIDk1LCAxLCAyNTQsIDMxLCAxODYsIDk1LCAxLCAyNDQsIDIwNCwgOTUsIDEsIDIxNCwgMjcsIDk1LCAxLCAyMTMsIAotICAgIDE3NywgOTUsIDEsIDIxNywgMTA2LCA5NSwgMSwgMjQ4LCAyMjksIDk1LCAxLCA4LCAyMTUsIDE1NywgOTUsIDEsIDgsIDIxNywgCi0gICAgMTA2LCA5NSwgMSwgMjE1LCAxNTcsIDk1LCAxLCAyNDgsIDE0MywgOTUsIDEsIDE5OCwgOTUsIDEsIDIyOCwgMjQyLCA5NSwgCi0gICAgMSwgOCwgMjI4LCAxMTUsIDk1LCAxLCAyNTQsIDMxLCAxOTgsIDk1LCAxLCAyMjgsIDExNSwgOTUsIDEsIDIyOCwgMTAxLCAKLSAgICA5NSwgMSwgMjMzLCAxNDEsIDk1LCAxLCAyMzIsIDY2LCA5NSwgMSwgMjMzLCA0LCA5NSwgMSwgMjMyLCAyNDksIDk1LCAxLCAKLSAgICAyMTYsIDU3LCA5NSwgMSwgMjQ3LCAxNjEsIDk1LCAxLCAyMTYsIDQ5LCA5NSwgMSwgMjQ3LCAxNjAsIDk1LCAxLCAxNzYsIAotICAgIDk1LCAxLCAyNDMsIDE0MiwgOTUsIDEsIDgsIDE3NiwgOTUsIDEsIDIyNCwgOTEsIDk1LCAxLCAyMjQsIDY5LCA5NSwgMSwgCi0gICAgMjI5LCA4MiwgOTUsIDEsIDIyOSwgMzMsIDk1LCAxLCAyNTQsIDMxLCAyMjksIDgyLCA5NSwgMSwgMTYyLCA5NSwgMSwgMjExLCAKLSAgICAxNjUsIDk1LCAxLCAyNDMsIDAsIDk1LCAxLCAyNDIsIDIzMywgOTUsIDEsIDIxNSwgMTY2LCA5NSwgMSwgMjQ2LCAzNCwgOTUsIAotICAgIDEsIDIyNywgMTY5LCA5NSwgMSwgMjI3LCAxNTQsIDk1LCAxLCAyMTUsIDE3NiwgOTUsIDEsIDI0NiwgNDEsIDk1LCAxLCA4LCAKLSAgICAyMTUsIDE3NiwgOTUsIDEsIDgsIDI0NiwgNDEsIDk1LCAxLCAyMjMsIDEwOSwgMjE1LCAxNzYsIDk1LCAxLCAyMjAsIDEwNCwgCi0gICAgOTUsIDEsIDIxOCwgMjI1LCA5NSwgMSwgMjEwLCA4MiwgOTUsIDEsIDIxMCwgMTQsIDk1LCAxLCAyMTUsIDE4NCwgOTUsIDEsIAotICAgIDI0NiwgNDYsIDk1LCAxLCA4LCAyMTUsIDE4NCwgOTUsIDEsIDIwNiwgOTUsIDEsIDIxMCwgMTE2LCA5NSwgMSwgMjEwLCAxNSwgCi0gICAgOTUsIDEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMjMsIDk1LCAxLCAyNTQsIDMxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgCi0gICAgMjE1LCA5NSwgMSwgMjA5LCAyMjIsIDk1LCAxLCAyMTIsIDY1LCA5NSwgMSwgMjU0LCAyMTgsIDk1LCAxLCAyNDEsIDE5NiwgCi0gICAgOTUsIDEsIDIyOSwgMTk3LCA5NSwgNSwgMjUzLCAyMzAsIDk1LCA1LCAyMjMsIDEwOSwgMjEzLCAxMzMsIDk1LCA1LCAyMjMsIAotICAgIDEwOSwgMjUzLCAyMzAsIDk1LCAyNSwgNSwgNjEsIDk1LCAyNSwgNSwgMjU1LCA4MiwgOTUsIDI1LCA1LCAyNTQsIDIxNCwgCi0gICAgOTUsIDI1LCA1LCAyNTQsIDEzMSwgOTUsIDI1LCA1LCAyNTQsIDEyMywgOTUsIDI1LCA1LCA3OCwgOTUsIDI1LCA1LCAyMjYsIAotICAgIDE4NywgOTUsIDI1LCA1LCAyMTEsIDIyNywgOTUsIDI1LCA1LCAyMTIsIDk4LCA5NSwgMjUsIDUsIDc2LCA5NSwgMjUsIDUsIAotICAgIDI0NSwgMTU4LCA5NSwgMjUsIDUsIDI0NSwgMTQ2LCA5NSwgMjUsIDUsIDIyNiwgMjM2LCA5NSwgMjUsIDUsIDc0LCA5NSwgCi0gICAgMjUsIDUsIDI0MCwgMTI2LCA5NSwgMjUsIDUsIDI0MCwgMTI1LCA5NSwgMjUsIDUsIDI0MCwgMTI0LCA5NSwgMjUsIDUsIAotICAgIDIzNSwgMTk2LCA5NSwgMjUsIDUsIDIzNiwgNjcsIDk1LCAyNSwgNSwgMjM2LCA0MCwgOTUsIDI1LCA1LCAyMzUsIDE2MiwgCi0gICAgOTUsIDI1LCA1LCAyMzUsIDIzOCwgOTUsIDI1LCA1LCA2OSwgOTUsIDI1LCA1LCAyMTQsIDIyOSwgOTUsIDI1LCA1LCAyMTQsIAotICAgIDIyOCwgOTUsIDI1LCA1LCAyMTQsIDIyNywgOTUsIDI1LCA1LCAyMTQsIDExOCwgOTUsIDI1LCA1LCAyMTQsIDIxMSwgOTUsIAotICAgIDI1LCA1LCAyMTQsIDE3OCwgOTUsIDI1LCA1LCAyMTEsIDExNywgOTUsIDI1LCA1LCAyMTEsIDgsIDk1LCAyNSwgNSwgMjU0LCAKLSAgICAyNTIsIDk1LCAyNSwgNSwgMjU0LCAyNDgsIDk1LCAyNSwgNSwgMjQ1LCA5NCwgOTUsIDI1LCA1LCAyMjIsIDE4NSwgMjQ1LCAKLSAgICA5NCwgOTUsIDI1LCA1LCAyNDUsIDEwMCwgOTUsIDI1LCA1LCAyMjIsIDE4NSwgMjQ1LCAxMDAsIDk1LCAyNSwgNSwgMjU0LCAKLSAgICAyMTAsIDk1LCAyNSwgNSwgMjQ1LCAyMDMsIDk1LCAyNSwgNSwgMjUzLCAyMDAsIDk1LCAyNSwgNSwgMjI2LCAxMzgsIDk1LCAKLSAgICAyNSwgNSwgMjMwLCAzMCwgOTUsIDI1LCA1LCAyMjksIDg0LCA5NSwgMTM4LCAyMjIsIDI1NCwgOTUsIDEzOCwgMjE2LCAxNSwgCi0gICAgMjIyLCAyNTQsIDk1LCAxMzgsIDQ4LCA5NSwgMTM4LCA1MSwgOTUsIDEsIDIxNiwgMjksIDk1LCAxLCAyMTYsIDI4LCA5NSwgCi0gICAgMSwgMjE2LCAyNywgOTUsIDEsIDIxNiwgMjYsIDk1LCAxLCAyMTYsIDI1LCA5NSwgMSwgMjE2LCAyNCwgOTUsIDEsIDIxNiwgCi0gICAgMjMsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAzMCwgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDI5LCA5NSwgMSwgMjIzLCAxMDksIAotICAgIDIxNiwgMjcsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyNiwgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDI1LCA5NSwgMSwgMjIzLCAKLSAgICAxMDksIDIxNiwgMjMsIDU2LCAxLCAyNTQsIDMxLCA3NiwgMTQxLCAxLCAyNTQsIDMxLCAyMTEsIDQ3LCA0OSwgMjgsIDE2LCAKLSAgICAyMjQsIDE1NywgNDksIDI4LCAxNiwgMjQ4LCAxNjYsIDQ5LCAyOCwgMTYsIDIyNSwgMTc4LCA0OSwgMjgsIDE2LCAyMjYsIAotICAgIDExNywgMjQ1LCAxODYsIDQ5LCAyOCwgMTYsIDIyNiwgMTE3LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjQ1LCAKLSAgICAxODYsIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMzQsIDIwMywgNDksIDI4LCAxNiwgCi0gICAgMjE3LCAxNzAsIDQ5LCAyOCwgMTYsIDIyNiwgMTMsIDQ5LCAyOCwgMTYsIDIxMCwgMjE3LCA0OSwgMjgsIDE2LCAyMTAsIAotICAgIDIxOCwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIzMywgMjQwLCA0OSwgMjgsIDE2LCAyNTQsIDc2LCAyNDUsIDE4NiwgNDksIAotICAgIDI4LCAxNiwgMjQ1LCAzNCwgMjQ1LCAxODYsIDQ5LCAyOCwgMTYsIDIxNywgMywgNDksIDI4LCAxNiwgMjM0LCAxNjcsIDQ5LCAKLSAgICAyOCwgMTYsIDI1NCwgNjYsIDQ5LCAyOCwgMTYsIDI1NCwgNjcsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMTcsIDE3NiwgNDksIAotICAgIDI4LCAxNiwgMjE2LCAxNjAsIDQ5LCAyOCwgMTYsIDIyNiwgMjEwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgCi0gICAgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjI0LCAxNTYsIDQ5LCAyOCwgMTYsIDI1MCwgMTU3LCA0OSwgMjgsIDE2LCAyMTQsIDYsIAotICAgIDQ5LCAyOCwgMTYsIDIzNSwgMTcwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAxNjgsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyMSwgMjE1LCA0OSwgMjgsIDE2LCAyMjYsIDQsIDQ5LCAyOCwgMTYsIAotICAgIDIxOCwgMTQ4LCAyNTQsIDY5LCA0OSwgMjgsIDE2LCAyMjYsIDExNiwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjE0LCAxNSwgCi0gICAgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjU0LCA3MCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjU0LCA2NCwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCA0MywgNDksIDI4LCAxNiwgMjIzLCA0OSwgNDksIDI4LCAxNiwgMjI1LCAxMDksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAotICAgIDIxNiwgODQsIDQ5LCAyOCwgMTYsIDI1NCwgMTI5LCA0OSwgMjgsIDE2LCAyMjEsIDE2MSwgNDksIDI4LCAxNiwgMjE3LCAKLSAgICAxNzksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNywgMTc5LCAyMzEsIDQ1LCAyMTgsIDE0NiwgNDksIDI4LCAxNiwgMjI2LCAKLSAgICAxMTEsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNiwgMTkxLCA0OSwgMjgsIDE2LCAyMzMsIDMzLCA0OSwgMjgsIDE2LCAyNDYsIAotICAgIDQ5LCA0OSwgMjgsIDE2LCAyMTUsIDIyOCwgNDksIDI4LCAxNiwgMjE2LCAyMzMsIDQ5LCAyOCwgMTYsIDIzMywgMjQzLCA0OSwgCi0gICAgMjgsIDE2LCAyNTQsIDc2LCAyNDUsIDM0LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI1NCwgMjksIDQ5LCAKLSAgICAyOCwgMTYsIDIzNiwgMTksIDQ5LCAyOCwgMTYsIDIxNSwgMjAwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzQsIDIwNiwgCi0gICAgMjE1LCAxOTksIDQ5LCAyOCwgMTYsIDIyNSwgMjAzLCA0OSwgMjgsIDE2LCAyMjQsIDE2MSwgNDksIDI4LCAxNiwgMjM0LCAKLSAgICAxNywgNDksIDI4LCAxNiwgMjUwLCA4OCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjIzLCAxNDksIDQ5LCAyOCwgMTYsIDIyNiwgCi0gICAgMTYsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyNiwgMTQsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI0MCwgMTE2LCA0OSwgMjgsIAotICAgIDE2LCAyMjksIDIwOCwgNDksIDI4LCAxNiwgMjI1LCAxNTksIDQ5LCAyOCwgMTYsIDIzNCwgMTgsIDI1NCwgMTU4LCA0OSwgCi0gICAgMjgsIDE2LCAyMTUsIDIwMCwgMjU0LCAxNTgsIDQ5LCAyOCwgMTYsIDIxOCwgMTI1LCA0OSwgMjgsIDE2LCAyNDIsIDEzMCwgCi0gICAgNDksIDI4LCAxNiwgMjM1LCAxNzAsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIDIxMCwgMjI5LCAxMDAsIDQ5LCAyOCwgCi0gICAgMTYsIDIyNiwgMTE3LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI1LCAxNTgsIDQ5LCAyOCwgMTYsIDIzNCwgNCwgNDksIDI4LCAKLSAgICAxNiwgMjI1LCAxNTcsIDQ5LCAyOCwgMTYsIDIzMywgMjQyLCA0OSwgMjgsIDE2LCAyMjUsIDIwNCwgMjI5LCAxMDAsIDQ5LCAKLSAgICAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDIzNCwgMTY5LCAyMjksIDEwMSwgCi0gICAgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDIxMCwgMjE1LCA0OSwgMjgsIDE2LCAyNTQsIDY3LCAyMjksIDEwMCwgNDksIDI4LCAKLSAgICAxNiwgMjU0LCA2OCwgMjE3LCAxNzcsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMTAsIDIxNiwgNDksIDI4LCAxNiwgMjMzLCAKLSAgICAyNDEsIDQ5LCAyOCwgMTYsIDI0NSwgMTgxLCA0OSwgMjgsIDE2LCAyNTAsIDE1OCwgNDksIDI4LCAxNiwgMjMwLCAyMDMsIAotICAgIDIzNSwgMTY5LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI1LCAxMDksIDIyOSwgMTAwLCAKLSAgICA0OSwgMjgsIDE2LCAyMjQsIDE2MiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgMjA3LCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDkyLCA0OSwgMjgsIDE2LCAyMzIsIDYzLCA0OSwgMjgsIDE2LCAyMjYsIDE0LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAKLSAgICAxNiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgNjgsIDIyNiwgMTUsIDQ5LCAyOCwgMTYsIDIzMywgMTU5LCA0OSwgMjgsIAotICAgIDE2LCAyNTQsIDkzLCA0OSwgMjgsIDE2LCAyMTUsIDIwMCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTg0LCA0OSwgCi0gICAgMjgsIDE2LCAyMTcsIDE3OSwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIxNywgMTcxLCA0OSwgMjgsIDE2LCAyNTAsIDg4LCAKLSAgICAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQ1LCAxMTQsIDQ5LCAyOCwgMTYsIDIyMSwgMTYyLCAyMjksIDEwMCwgNDksIDI4LCAKLSAgICAxNiwgMjExLCAxNTEsIDIzNCwgNDMsIDQ5LCAyOCwgMTYsIDIxNSwgMTk3LCA0OSwgMjgsIDE2LCAyMjQsIDE2MywgNDksIAotICAgIDI4LCAxNiwgMjE1LCAyMDEsIDQ5LCAyOCwgMTYsIDIxNSwgMTk4LCA0OSwgMjgsIDE2LCAyMjQsIDE2MCwgNDksIDI4LCAxNiwgCi0gICAgMjE1LCAxOTYsIDQ5LCAyOCwgMTYsIDIyNCwgMTU5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NSwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICAyMiwgNDksIDI4LCAxNiwgMjQ1LCA2OCwgMjU0LCAyMiwgNDksIDI4LCAxNiwgMjI2LCAxMTEsIDIyOSwgMTAwLCA0OSwgMjgsIAotICAgIDE2LCAyMTYsIDE5MCwgMjQ1LCA3NywgNDksIDI4LCAxNiwgMjE2LCAxOTAsIDI0NSwgMzMsIDQ5LCAyOCwgMTYsIDIxNiwgCi0gICAgMTkyLCAyNTQsIDcxLCA0OSwgMjgsIDE2LCAyMTYsIDE4NSwgMjM0LCAyNTMsIDI1NCwgNjMsIDQ5LCAyOCwgMTYsIDIzNCwgCi0gICAgMjA1LCA0OSwgMjgsIDE2LCAyNDUsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAotICAgIDIxMSwgMTEsIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMTgsIDE0NywgNDksIDI4LCAxNiwgMjM0LCA0NCwgMjU0LCAxMDQsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjEwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzMsIDI0NCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgCi0gICAgMjMzLCAyNDQsIDI1NCwgMTU4LCA0OSwgMjgsIDE2LCAyMzMsIDI0NCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI1NCwgNzAsIAotICAgIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNTQsIDcyLCA0OSwgMjgsIDE2LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE1LCAKLSAgICAyMTEsIDQ5LCAyOCwgMTYsIDIxNiwgMjI1LCA0OSwgMjgsIDE2LCAyMzQsIDgsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDI0NSwgCi0gICAgMTQyLCAyNTAsIDc5LCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyNDYsIDUwLCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAKLSAgICAyMTUsIDIxMywgMjUwLCA4MCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjE2LCAyMzUsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIAotICAgIDIzMywgMzgsIDIzNiwgMTQsIDI1MCwgNzksIDQ5LCAyOCwgMTYsIDI0MiwgMTY2LCAyMjksIDEwMSwgMjU0LCAxMDQsIDQ5LCAKLSAgICAyOCwgMTYsIDI0MiwgMTY2LCAyMjYsIDUsIDI1NCwgMTgsIDQ5LCAyOCwgMTYsIDI0MiwgMTY2LCAyMjYsIDUsIDI0OCwgMzcsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjMzLCA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgMjI2LCA1LCAyNTQsIDE5LCAyMzQsIDIwMiwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIDIyNiwgNSwgMjU0LCAxOSwgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAKLSAgICAyMjYsIDUsIDI0OCwgMzcsIDQ5LCAyOCwgMTYsIDIxNSwgMjE3LCA0OSwgMjgsIDE2LCAyNTQsIDIzLCA0OSwgMjgsIDE2LCAKLSAgICAyMzYsIDIxLCA0OSwgMjgsIDE2LCAyNDcsIDI1NCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIyNSwgMywgMjU0LCAyNCwgNDksIAotICAgIDI4LCAxNiwgMjU0LCAyMjAsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyNTQsIDI0LCA0OSwgMjgsIDE2LCAKLSAgICAyNTQsIDIyMCwgMjMxLCAzOSwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIzMSwgNTAsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAKLSAgICAyNDIsIDE2NywgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDI0MiwgMTY0LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjI1LCAzLCAKLSAgICAyNDIsIDE2NywgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIyNCwgMTY4LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAotICAgIDI1NCwgMTYwLCAyMjQsIDE2OCwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyNDgsIDM2LCAyNDAsIDExNCwgCi0gICAgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDI1NCwgMTYwLCAyNDgsIDM2LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAotICAgIDIxNSwgMjA2LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNSwgMjE4LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCi0gICAgMjE2LCAyMjksIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjE2LCAyMjksIDIzMywgNDEsIDI0MCwgMTE0LCAKLSAgICA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjMzLCA0MSwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjUsIDQyLCAKLSAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjM1LCAxNzYsIDIxNiwgMjUyLCAyNDAsIDExNSwgNDksIDI4LCAxNiwgMjU0LCA2OCwgCi0gICAgMjE2LCAyNTIsIDI0MCwgMTE1LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgMjE2LCAyMjYsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAKLSAgICAyMzAsIDE0OCwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIDI0NywgMjM4LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjE0LCAxMCwgCi0gICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjQsIDE2NywgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKLSAgICAyMjUsIDQyLCAyMTYsIDIyOSwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDI0MiwgMTYyLCAyMzAsIDMxLCAyNTQsIDcxLCA0OSwgCi0gICAgMjgsIDE2LCAyNDIsIDE2MiwgMjMwLCAzMSwgMjQ3LCAyMDgsIDQ5LCAyOCwgMTYsIDI0NSwgMTU2LCAyMzQsIDI1MywgMjQzLCAKLSAgICAyNDMsIDIxMywgMTI0LCA0OSwgMjgsIDE2LCAyMzYsIDIwLCA0OSwgMjgsIDE2LCAyMzYsIDE4LCA0OSwgMjgsIDE2LCAyNDMsIAotICAgIDI0MywgMjU0LCAzMCwgMjQ4LCAzNSwgMjQwLCAxMTMsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMTkxLCA0OSwgCi0gICAgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIyOSwgMjA4LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjI5LCAyMDMsIAotICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAKLSAgICAyMTksIDEwNCwgMjQ3LCAyNTEsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjM0LCAxODgsIAotICAgIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjEwLCAyMywgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAKLSAgICAyMjgsIDIzOSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjI4LCAyMzksIDI1NCwgMTA0LCAKLSAgICA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjMxLCAxOTYsIDI1MCwgODEsIDI0NywgMjM4LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgCi0gICAgMjMxLCAxOTYsIDI1MCwgODEsIDIzMCwgMTQ4LCA0OSwgMjgsIDE2LCAyNDQsIDEzMCwgMjE5LCAxMDQsIDI1MCwgODEsIAotICAgIDIxNCwgOSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIxOSwgMTA0LCAyNTAsIDgxLCAyMTcsIDE4MCwgNDksIDI4LCAxNiwgCi0gICAgMjQzLCAyNDMsIDIyOSwgMTAyLCA0OSwgMjgsIDE2LCAyNTAsIDgyLCAyMDksIDI0OSwgNDksIDI4LCAxNiwgMjUwLCA4MiwgCi0gICAgMjM0LCA0MiwgNDksIDI4LCAxNiwgMjUwLCA4MiwgMjE5LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0MCwgMTYxLCAKLSAgICAyMTEsIDEwLCAyMTYsIDIzMCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NSwgMTU3LCAyNTQsIDk0LCA0OSwgMjgsIDE2LCAKLSAgICAyMTEsIDEwLCAyMTUsIDIwNywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDIxNSwgMjA3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgCi0gICAgMjE2LCAyMzAsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyNTQsIDczLCAyNDYsIDUwLCAyNDcsIDE0NywgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyNDYsIDIzMCwgMTQ2LCAyMTYsIDIzNCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyNDcsIDIzMCwgCi0gICAgMjQ1LCA0NCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyMTUsIDIxNSwgMjI2LCAyMTUsIDI0NywgMTQ3LCAKLSAgICA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyNTQsIDczLCAyNDYsIDUwLCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgCi0gICAgMjMwLCAxNDYsIDIxNiwgMjM0LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgMjQ3LCAyMzAsIDI0NSwgNDQsIAotICAgIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyMTUsIDIxNSwgMjI2LCAyMTUsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAKLSAgICAyNDMsIDU2LCAyNDcsIDI0NSwgNDksIDI4LCAxNiwgMjQzLCA1NiwgMjExLCA5LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgCi0gICAgMjU0LCA3MywgMjMwLCAyMDQsIDQ5LCAyOCwgMTYsIDI0NywgMjUzLCAyNTQsIDczLCAyMzEsIDc4LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDI1MywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDI0NywgMjUzLCAyMTYsIDE4MywgNDksIDI4LCAxNiwgMjE5LCAxNjUsIAotICAgIDIxNiwgMTgzLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjE2LCAxODQsIDI0NywgMTk0LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgCi0gICAgMjE2LCAxODQsIDIxNSwgMjA4LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjE2LCAxODQsIDIxNiwgMjIzLCA0OSwgMjgsIDE2LCAKLSAgICAyMTksIDE2NSwgMjUzLCAyNTIsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyNTMsIDI1MywgMjQ3LCAxOTQsIDQ5LCAyOCwgMTYsIAotICAgIDIxOSwgMTY1LCAyNTMsIDI1MywgMjE1LCAyMDgsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyNTMsIDI1MywgMjE2LCAyMjMsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjMxLCAyNDMsIDM3LCA0OSwgMjgsIDE2LCAyNDcsIDIzNywgMjI2LCAxMzgsIDQ5LCAyOCwgCi0gICAgMTYsIDIxOCwgMTM5LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAxOTEsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDIxMywgMTI0LCAKLSAgICA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyNDMsIDE0MiwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjQ4LCAxMSwgNDksIDI4LCAxNiwgCi0gICAgMjU0LCAxNSwgMjM0LCAxODgsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIAotICAgIDIyOCwgMjM4LCA0OSwgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDIzMSwgNDksIDQ5LCAyOCwgMTYsIDIzNCwgMTY5LCAKLSAgICAyMjksIDEwMSwgMjMxLCA0OSwgNDksIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAxNjksIDIyOSwgMTAxLCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgMjM0LCA0NCwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAotICAgIDI0MiwgMTY2LCAyMjksIDEwMSwgMjM0LCAyMDIsIDI4LCAxNiwgMjE5LCAxNTcsIDI1MiwgMTQzLCAyOCwgMTYsIDUyLCAKLSAgICAyNTIsIDE0MywgMjgsIDE2LCA0MCwgMjUyLCAxNDMsIDI4LCAxNiwgMjIzLCA1MywgNDAsIDI1MiwgMTQzLCAyOCwgMTYsIAotICAgIDI0OCwgMTYzLCAyNTIsIDE0MywgMjgsIDE2LCAyMTksIDI1MywgMjUyLCAxNDMsIDI4LCAxNiwgNDMsIDIyMywgODAsIDUwLCAKLSAgICAyOCwgMTYsIDQ0LCAyMjMsIDgwLCA1MCwgMjgsIDE2LCAyMjMsIDgwLCAyNDcsIDEyNiwgMjgsIDE2LCAyNDgsIDIwNCwgCi0gICAgMjIxLCAxNjUsIDI4LCAxNiwgMjQ4LCAyMzAsIDI1MSwgMSwgMjgsIDE2LCAyMjEsIDE2NSwgMjgsIDE2LCAyNDksIDI0MiwgCi0gICAgMjgsIDE2LCAyMjMsIDc4LCAyNDQsIDExOSwgMjgsIDE2LCAyMjMsIDc4LCAyNDQsIDExOCwgMjgsIDE2LCAyMjMsIDc4LCAKLSAgICAyNDQsIDExNywgMjgsIDE2LCAyNDQsIDEzOSwgMjgsIDE2LCAyNDQsIDE0MCwgNTEsIDI4LCAxNiwgMjUxLCAxNTYsIDc5LCAKLSAgICAyOCwgMTYsIDI1MSwgMzIsIDI4LCAxNiwgMjUxLCAxNjcsIDI4LCAxNiwgMTI3LCAyOCwgMTYsIDIyNiwgMTk3LCAyMTgsIAotICAgIDE2NSwgMjgsIDE2LCAyMTUsIDU3LCAyMTgsIDE2NSwgMjgsIDE2LCAyMTYsIDE0MywgMjE4LCAxNjUsIDI4LCAxNiwgMjQ0LCAKLSAgICAxOCwgMjE4LCAxNjUsIDI4LCAxNiwgMjQ0LCA4OCwgMjE4LCAxNjUsIDI4LCAxNiwgMjE5LCAxMjYsIDIxOCwgMTY1LCAyOCwgCi0gICAgMTYsIDIxOSwgMTI0LCAyNDQsIDIsIDI4LCAxNiwgMjQ0LCAxNiwgMjQ0LCAyLCAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIyLCAKLSAgICAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIzLCAyMjYsIDE0MCwgMjU0LCAxNTAsIDI4LCAxNiwgMjQzLCAyMTAsIDI1MCwgMjMsIAotICAgIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyNTEsIDc1LCAyNTAsIDIyLCAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjIsIAotICAgIDI4LCAxNiwgMjQ1LCAxNSwgMjUwLCAyMywgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjMsIAotICAgIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyNDYsIDkxLCAyNTAsIDIxLCAyOCwgMTYsIDI0NiwgOTEsIDI1MCwgMjAsIAotICAgIDI4LCAxNiwgMjMwLCA5MCwgMjMxLCA5NSwgMjIzLCA2NCwgMjgsIDE2LCA1MiwgMjIwLCA3NywgMjgsIDE2LCA1MiwgMjQ0LCAKLSAgICA3MywgMjgsIDE2LCAyNDQsIDc0LCAyMTQsIDE2MywgMjgsIDE2LCAyNDQsIDc0LCAyNDYsIDExNCwgMjgsIDE2LCAyMjksIAotICAgIDE5MywgMjE0LCAxNjMsIDI4LCAxNiwgMjI5LCAxOTMsIDI0NiwgMTE0LCAyOCwgMTYsIDIyMCwgNzgsIDIxNCwgMTYzLCAyOCwgCi0gICAgMTYsIDIyMCwgNzgsIDI0NiwgMTE0LCAyOCwgMTYsIDIyNCwgMjUsIDEzOCwgMjIwLCA3NywgMjgsIDE2LCAyMjQsIDI1LCAKLSAgICAxMzgsIDI0NCwgNzMsIDI4LCAxNiwgMjQ5LCAyMjQsIDIxNiwgODgsIDI4LCAxNiwgMjQ5LCA5MywgMjE2LCA4OCwgMjgsIAotICAgIDE2LCAyMjYsIDE0MCwgMjU0LCAxNTAsIDI4LCAxNiwgMjI2LCAxNDAsIDI1MiwgMTMwLCAyOCwgMTYsIDIyNCwgNywgMjU0LCAKLSAgICAxNTAsIDI4LCAxNiwgMjI0LCA3LCAyNTIsIDEzMCwgMjgsIDE2LCAyMzAsIDkzLCAyMjMsIDY0LCAyOCwgMTYsIDIxMSwgCi0gICAgMjUxLCAyMjMsIDY0LCAyOCwgMTYsIDE2MywgMjIzLCA2NCwgMjgsIDE2LCAyMjQsIDI1LCAyMjMsIDY0LCAyOCwgMTYsIAotICAgIDI0NSwgMTk3LCAyMjMsIDY0LCAyOCwgMTYsIDIxOSwgMTIwLCAyMjMsIDY0LCAyOCwgMTYsIDIxNiwgMTYxLCAyMjMsIDY0LCAKLSAgICAyOCwgMTYsIDIxOSwgMTEyLCAyMjMsIDY0LCAyOCwgMTYsIDEyMywgMjQwLCAyMTgsIDIxNSwgNzEsIDIyMywgNjQsIDI4LCAKLSAgICAxNiwgMjExLCAxNzksIDIyOCwgNDgsIDI4LCAxNiwgOTYsIDIyOCwgNDgsIDI4LCAxNiwgMjUwLCA0NCwgMjExLCAxNzksIAotICAgIDIyOCwgNDgsIDI4LCAxNiwgNDIsIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIDQyLCAyMjgsIDQ5LCAyNTEsIDIyOSwgCi0gICAgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCAKLSAgICAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgNDMsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIAotICAgIDQ5LCA0MywgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIAotICAgIDIyNywgMjI4LCA0OSwgNDQsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjQsIDIxMSwgMjUzLCAyOCwgCi0gICAgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjQsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIDQ0LCAKLSAgICAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCA0NCwgMjUxLCAyMjksIDI4LCAxNiwgMjMwLCAxMzQsIAotICAgIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIDIzMCwgMTM0LCAyMjgsIDQ5LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNCwgCi0gICAgMjI4LCA0OSwgMTI0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNCwgMjI4LCA0OSwgMTI0LCAyNTEsIDIyOSwgMjgsIDE2LCAKLSAgICAyMjYsIDgsIDIyOCwgNDgsIDI4LCAxNiwgMjEzLCAxMzIsIDIyOCwgNDgsIDI4LCAxNiwgMjI4LCA0OSwgMjUxLCAyMjksIAotICAgIDI4LCAxNiwgMjI3LCAyMDcsIDIyOCwgNDgsIDI4LCAxNiwgMjQ5LCAyNDksIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIAotICAgIDI0OSwgMjQ5LCAyMjgsIDQ5LCAyNTEsIDIyOSwgMjgsIDE2LCAyNTEsIDE1NCwgMjgsIDE2LCAyMTEsIDI1MSwgMjI4LCA1MiwgCi0gICAgMjgsIDE2LCAxNjMsIDIyOCwgNTIsIDI4LCAxNiwgMjI0LCAyNSwgMjI4LCA1MiwgMjgsIDE2LCAyNDUsIDE5NywgMjI4LCAKLSAgICA1MiwgMjgsIDE2LCAyMTksIDEyMCwgMjI4LCA1MiwgMjgsIDE2LCAyMTYsIDE2MSwgMjI4LCA1MiwgMjgsIDE2LCAyMTksIAotICAgIDExMiwgMjI4LCA1MiwgMjgsIDE2LCAxMjMsIDI0MCwgMjE4LCAyMTUsIDcxLCAyMjgsIDUyLCAyOCwgMTYsIDM4LCAyMTgsIAotICAgIDE0MSwgMjgsIDE2LCAzOCwgMjE4LCAyNDIsIDIxOCwgMTQxLCAyOCwgMTYsIDM4LCAyMTUsIDIzNSwgMjgsIDE2LCAzOCwgCi0gICAgMjE1LCAyMzQsIDI4LCAxNiwgMzgsIDIxNSwgMjMzLCAyOCwgMTYsIDI0NCwgMTA5LCAyMTUsIDIzNSwgMjgsIDE2LCAyNDQsIAotICAgIDEwOSwgMjE1LCAyMzQsIDI4LCAxNiwgMjQ0LCAxMDksIDIxNSwgMjMzLCAyOCwgMTYsIDM4LCAyNTMsIDE5NywgMjQ3LCAKLSAgICAxMjgsIDI4LCAxNiwgMzgsIDI0NCwgODAsIDI4LCAxNiwgMzgsIDI0NCwgNzksIDI4LCAxNiwgMzgsIDI0NCwgNzgsIDI4LCAKLSAgICAxNiwgMzgsIDI0NCwgNzcsIDI4LCAxNiwgMzgsIDI0NCwgNzYsIDI4LCAxNiwgMjUyLCA2NiwgMjUyLCA4MiwgMjgsIDE2LCAKLSAgICAyNDUsIDE1MSwgMjUyLCA4MiwgMjgsIDE2LCAyNTIsIDY2LCAyMTYsIDExMiwgMjgsIDE2LCAyNDUsIDE1MSwgMjE2LCAxMTIsIAotICAgIDI4LCAxNiwgMjUyLCA2NiwgMjE5LCA4MiwgMjgsIDE2LCAyNDUsIDE1MSwgMjE5LCA4MiwgMjgsIDE2LCAyNTIsIDY2LCAKLSAgICAyMjUsIDExOCwgMjgsIDE2LCAyNDUsIDE1MSwgMjI1LCAxMTgsIDI4LCAxNiwgMzgsIDI1NSwgMjMsIDI4LCAxNiwgMzgsIAotICAgIDIxOCwgMTY3LCAyOCwgMTYsIDM4LCAyMTYsIDIzOSwgMjgsIDE2LCAzOCwgMjE4LCAxNjgsIDI4LCAxNiwgMzgsIDIzMSwgCi0gICAgMTY3LCAyOCwgMTYsIDM4LCAyMzEsIDE2NiwgMjgsIDE2LCAzOCwgMjU1LCAyMiwgMjgsIDE2LCAzOCwgMjMyLCAxMTgsIDI4LCAKLSAgICAxNiwgMjU0LCA2LCAyMTQsIDE2MywgMjgsIDE2LCAyNTQsIDYsIDI0NiwgMTE0LCAyOCwgMTYsIDM4LCAyNDcsIDE0MywgMjgsIAotICAgIDE2LCAzOCwgMjIyLCAyMzQsIDI4LCAxNiwgMzgsIDI0NCwgNjYsIDI4LCAxNiwgMzgsIDIxOSwgNzgsIDI4LCAxNiwgMzgsIAotICAgIDI1MiwgNDYsIDI4LCAxNiwgMzgsIDUyLCAyMTYsIDIwLCAyOCwgMTYsIDM4LCAyMTUsIDIxMiwgMjE2LCAyMCwgMjgsIDE2LCAKLSAgICAyMjIsIDIzOCwgMjgsIDE2LCAyMTgsIDc2LCAyOCwgMTYsIDIxMCwgMTU5LCAyOCwgMTYsIDIyNSwgMTEwLCAyOCwgMTYsIAotICAgIDIzMSwgMzAsIDI4LCAxNiwgMjQ0LCAyNSwgMjgsIDE2LCAyNDksIDE0NiwgMjgsIDE2LCAyNDgsIDg2LCAyOCwgMTYsIDI0MiwgCi0gICAgMTU3LCAyMjgsIDUzLCAyMTksIDk3LCAyOCwgMTYsIDI0MiwgMTU3LCAyMjgsIDUzLCAyMjgsIDgwLCAyMTksIDk3LCAyOCwgCi0gICAgMTYsIDIxNiwgMSwgMjgsIDE2LCAyMTUsIDk1LCAyOCwgMTYsIDIzNSwgMjAwLCAyMTUsIDk1LCAyOCwgMTYsIDIxNSwgOTYsIAotICAgIDIxOSwgOTcsIDI4LCAxNiwgMjE1LCA5NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTA0LCAyOCwgMTYsIAotICAgIDIyNiwgMTUyLCAyMTgsIDEwMSwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDAsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgCi0gICAgOTksIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTgsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTcsIDI4LCAxNiwgMjI2LCAKLSAgICAxNTIsIDIxOCwgOTYsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTUsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTQsIDI4LCAKLSAgICAxNiwgMjI2LCAxNTIsIDIxOCwgMTAzLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMiwgMjgsIDE2LCAyNDEsIDI1MiwgMjgsIAotICAgIDE2LCAyMjksIDExMCwgMjgsIDE2LCAyNDUsIDE1MSwgNjQsIDIxOCwgMTM1LCAyOCwgMTYsIDI0OCwgNzksIDIxOSwgOTcsIAotICAgIDI4LCAxNiwgMzgsIDEyNCwgMjUxLCAxNzcsIDI4LCAxNiwgMzgsIDEyMCwgMjUxLCAxNzcsIDI4LCAxNiwgMzgsIDI0MiwgNywgCi0gICAgMjgsIDE2LCAzOCwgMjE5LCA2OSwgMjI1LCA0NiwgMjgsIDE2LCAyMjUsIDIxOSwgNzksIDI4LCAxNiwgMjI1LCAyMTksIAotICAgIDEyMCwgNzksIDI4LCAxNiwgMTYzLCAyMjUsIDIxOSwgNzksIDI4LCAxNiwgMjQyLCAxODksIDIxNCwgMTYzLCAyOCwgMTYsIAotICAgIDI0MiwgMTg5LCAyNDYsIDExNCwgMjgsIDE2LCAyLCAyNDQsIDEwOCwgMjgsIDE2LCAyNDgsIDE4OCwgMjgsIDE2LCAyNDgsIAotICAgIDE4OSwgMjU0LCAxNjMsIDI4LCAxNiwgMjMxLCAxMzgsIDI4LCAxNiwgMjMyLCAxMzUsIDI4LCAxNiwgMjUxLCAxNTEsIDI4LCAKLSAgICAxNiwgMjIwLCAxNTYsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgMTU2LCAyNTEsIDIyOSwgMjgsIDE2LCAyMzAsIDE4OSwgMjgsIAotICAgIDE2LCAyMzAsIDE5MCwgMjUxLCAyMjksIDI4LCAxNiwgMjIwLCAxNTAsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgMTUwLCAKLSAgICAyNTEsIDIyOSwgMjgsIDE2LCAyNDMsIDIyNywgMjExLCAyNTMsIDI4LCAxNiwgMjQzLCAyMjcsIDI1MSwgMjI5LCAyOCwgMTYsIAotICAgIDIzMiwgMTM2LCAyMjUsIDE4MywgMjIzLCA2NCwgMjgsIDE2LCAyMzIsIDEzNiwgMjM2LCAxMSwgMjIzLCA2NCwgMjgsIDE2LCAKLSAgICAyNTEsIDE1MiwgMjIzLCA2NCwgMjgsIDE2LCAyMjAsIDE1NiwgMjIzLCA2NCwgMjgsIDE2LCAyMzAsIDE5MCwgMjIzLCA2NCwgCi0gICAgMjgsIDE2LCAyMjAsIDE1MCwgMjIzLCA2NCwgMjgsIDE2LCAyMTYsIDI1MCwgMjI1LCAxODEsIDI0OSwgMTE1LCAyMjQsIAotICAgIDE3NywgMjI1LCAxODIsIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAxNzcsIDIzNiwgMTAsIAotICAgIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAxNzcsIDIyNSwgMTgzLCAyNDcsIDIxOSwgMjgsIAotICAgIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIDIyNSwgMTgyLCAyOCwgMTYsIDIxNiwgMjUwLCAKLSAgICAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgMjM2LCAxMCwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgCi0gICAgMjI0LCAxNzcsIDIzNiwgMTEsIDI0NywgMjE5LCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIAotICAgIDE3NywgMjM2LCAxMSwgMjQ3LCAyMTgsIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAKLSAgICAyMzYsIDExLCAyNDcsIDIxNywgMjgsIDE2LCAyNDksIDE0MSwgMjgsIDE2LCAyNDIsIDEzMywgMjUxLCA3NSwgMjUwLCAyMiwgCi0gICAgMjgsIDE2LCAyNDIsIDEzMywgMjQ1LCAxNSwgMjUwLCAyMiwgMjgsIDE2LCA0MiwgMjUzLCAxNjYsIDI4LCAxNiwgMjEzLCAKLSAgICAxNTEsIDI4LCAxNiwgMjI1LCAxNywgMjgsIDE2LCAyNTAsIDEzLCAyOCwgMTYsIDIyMSwgMjA1LCAyOCwgMTYsIDI1MCwgMTcsIAotICAgIDI4LCAxNiwgMjE2LCA4LCAyOCwgMTYsIDIyNCwgMjQ1LCAyOCwgMTYsIDIyNCwgMjQ2LCAyNDQsIDY4LCAyOCwgMTYsIDIyMSwgCi0gICAgMjA2LCAyNDQsIDY4LCAyOCwgMTYsIDIxNiwgOSwgMjIzLCA2MSwgMjgsIDE2LCAyMjUsIDE2NiwgMjE4LCA2NywgMjYsIAotICAgIDIxMywgMTM3LCAxODksIDIxNywgMjMwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTksIDI2LCAyMTMsIDEzNywgMTg5LCAKLSAgICAyMTcsIDIwOSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjAyLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTQsIDI2LCAKLSAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDE4OCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg3LCAyNiwgMjEzLCAxMzcsIDE4OSwgCi0gICAgMjE3LCAxODYsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4NSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI5LCAyNiwgCi0gICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjgsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyNywgMjYsIDIxMywgMTM3LCAxODksIAotICAgIDIxNywgMjI2LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyNCwgMjYsIAotICAgIDIxMywgMTM3LCAxODksIDIxNywgMjIzLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjIsIDI2LCAyMTMsIDEzNywgMTg5LCAKLSAgICAyMTcsIDIyMSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjIwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTgsIDI2LCAKLSAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNywgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE2LCAyNiwgMjEzLCAxMzcsIDE4OSwgCi0gICAgMjE3LCAyMTUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTkzLCAyNiwgCi0gICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTIsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MSwgMjYsIDIxMywgMTM3LCAxODksIAotICAgIDIxNywgMTkwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODksIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIzMCwgMjYsIAotICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjE5LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDIsIDI2LCAyMzUsIDIyMSwgMTg5LCAKLSAgICAyMTcsIDE5NCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTg3LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODYsIDI2LCAKLSAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyOCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjI3LCAyNiwgMjM1LCAyMjEsIDE4OSwgCi0gICAgMjE3LCAyMjYsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyNSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjIyLCAyNiwgCi0gICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjEsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMCwgMjYsIDIzNSwgMjIxLCAxODksIAotICAgIDIxNywgMjE1LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMywgMjYsIAotICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjEyLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTEsIDI2LCAyMzUsIDIyMSwgMTg5LCAKLSAgICAyMTcsIDIxMCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA4LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDcsIDI2LCAKLSAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA1LCAyNiwgMjM1LCAyMjEsIDE4OSwgCi0gICAgMjE3LCAyMDQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAxLCAyNiwgCi0gICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDAsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5OSwgMjYsIDIzNSwgMjIxLCAxODksIAotICAgIDIxNywgMTk4LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTcsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NiwgMjYsIAotICAgIDIzNSwgMjIxLCAxODksIDIxNywgMTk1LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTMsIDI2LCAyMzUsIDIyMSwgMTg5LCAKLSAgICAyMTcsIDE5MiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkxLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTAsIDI2LCAKLSAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4OSwgMzgsIDI2LCAyOCwgMjE1LCAyMDksIDM4LCAyNiwgMjgsIDIxNiwgMjI0LCAzOCwgCi0gICAgMjYsIDI4LCAyMjUsIDE5MSwgMjYsIDI4LCAyMzMsIDM3LCAyMzAsIDE0NywgMzEsIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIAotICAgIDI0MSwgMjI5LCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAyNDAsIDIyMSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgMjQ1LCAKLSAgICAyMzAsIDI0MSwgMjMwLCAyNDcsIDIzMiwgMzEsIDI0NSwgMjMwLCAyNDAsIDIyMCwgMjQ3LCAyMzIsIDMxLCAyNDUsIDIzMSwgCi0gICAgMTgwLCAzMSwgMjUwLCAxODIsIDE4MCwgMzEsIDI0MywgMjM2LCAyNTAsIDQzLCAxODAsIDMxLCAyMzAsIDE4MiwgMTgwLCAKLSAgICAzMSwgMjUyLCAxMzgsIDE4MCwgMzEsIDIzNCwgMTg1LCAyMTksIDgxLCAxODAsIDMxLCAyNDksIDE4NywgMTgwLCAzMSwgCi0gICAgMjUzLCAyNDEsIDE4MCwgMzEsIDIyNiwgMTY3LCAxODAsIDMxLCAyNTEsIDE2MSwgMjI2LCAxMzQsIDE4MCwgMzEsIDI0OCwgCi0gICAgODEsIDE3NywgMjQ3LCAxODcsIDE4MCwgMzEsIDI0NywgMTg0LCAxODAsIDMxLCAyMTAsIDIyMiwgMTgwLCAzMSwgMjM1LCAKLSAgICAyNTQsIDE4MCwgMzEsIDIyNSwgMjAwLCAxODAsIDMxLCAyMjMsIDEzMCwgMTgwLCAzMSwgMjQ5LCAxOTcsIDE4MCwgMzEsIAotICAgIDI0MSwgNjcsIDI1MiwgMTkyLCAxODAsIDMxLCAyMTIsIDU5LCAxODAsIDMxLCAyNDQsIDQ3LCAxODAsIDMxLCAyNTQsIDI1NSwgCi0gICAgMTgwLCAzMSwgMjIzLCA5MiwgMTgwLCAzMSwgMjIzLCA2OCwgMTgwLCAzMSwgMjQ1LCAyMjksIDE4MCwgMzEsIDIzNSwgNTksIAotICAgIDE4MCwgMzEsIDI0OSwgMTkyLCAxODAsIDMxLCAyNDUsIDE1MCwgMTgwLCAzMSwgMjQ2LCA2MCwgMTgwLCAzMSwgMjUwLCAKLSAgICAxNTMsIDE4MCwgMzEsIDI0OCwgOTAsIDE4MCwgMzEsIDIzLCAyMjMsIDY3LCAxODAsIDMxLCAyMjYsIDg1LCAxODAsIDMxLCAKLSAgICAyMzMsIDQwLCAxODAsIDMxLCAyNTAsIDYsIDE4MCwgMzEsIDIzNCwgODMsIDE4MCwgMzEsIDI0MywgOTMsIDE4MCwgMzEsIAotICAgIDIxOCwgMTE0LCAxODAsIDMxLCAyMjQsIDEzMywgMTgwLCAzMSwgMjQzLCAyMzUsIDE4MCwgMzEsIDIyMywgNjksIDE4MCwgCi0gICAgMzEsIDIzMywgNzcsIDE3NywgMjMwLCAxNjIsIDE4MCwgMzEsIDIyMywgNjUsIDE4MCwgMzEsIDI0MiwgMTc1LCAyMTYsIDQzLCAKLSAgICAyMzEsIDgxLCAxODAsIDMxLCAyNDUsIDE1MiwgMTgwLCAzMSwgMjE4LCAxMjYsIDE4MCwgMzEsIDI0MiwgMTM1LCAxODAsIAotICAgIDMxLCAyNDUsIDE0NCwgMTgwLCAzMSwgMjI1LCAyMzksIDE4MCwgMzEsIDIyMiwgMjI4LCAxODAsIDMxLCAyNDQsIDY3LCAKLSAgICAxODAsIDMxLCAyMTQsIDgsIDE3NywgMjEyLCA0NCwgMTgwLCAzMSwgMjQ5LCAyMDEsIDE4MCwgMzEsIDIzMSwgOTQsIDE4MCwgCi0gICAgMzEsIDI0NSwgNjksIDE4MCwgMzEsIDIxNCwgMTcyLCAxODAsIDMxLCAyNDcsIDIyMCwgMTgwLCAzMSwgMjUwLCA4LCAyMzAsIAotICAgIDExNSwgMTgwLCAzMSwgMjQyLCAxMTMsIDE4MCwgMzEsIDI0MywgOTQsIDIzNiwgNiwgMTgwLCAzMSwgMjMxLCAxNDYsIDE4MCwgCi0gICAgMzEsIDI1NSwgMTksIDE4MCwgMzEsIDI0NSwgMTY1LCAxODAsIDMxLCAyNDYsIDExNywgMTgwLCAzMSwgMjEyLCA0MiwgMTgwLCAKLSAgICAzMSwgMjE5LCAxNTIsIDE4MCwgMzEsIDIzNSwgMjI5LCAxODAsIDMxLCAyNDgsIDUwLCAxODAsIDMxLCAyNDgsIDE2OCwgCi0gICAgMTgwLCAzMSwgMjQ3LCAyMTYsIDE4MCwgMzEsIDI0NSwgMzcsIDE4MCwgMzEsIDIyMCwgMTE3LCAxODAsIDMxLCAyMTgsIAotICAgIDEzMCwgMTgwLCAzMSwgMjQyLCA5LCAxODAsIDMxLCAyNDksIDIyMCwgMTgwLCAzMSwgMjUwLCAzLCAxODAsIDMxLCAyNDQsIAotICAgIDE4NSwgMTgwLCAzMSwgMjU0LCAyMjEsIDE4MCwgMzEsIDI0OSwgMjE5LCAxODAsIDMxLCAyMjYsIDIwMSwgMjE2LCAxOTcsIAotICAgIDIxMywgMjQyLCAxODAsIDMxLCAyNDcsIDI0MCwgMTgwLCAzMSwgMjMzLCAxMzAsIDE4MCwgMzEsIDI0NCwgMjEsIDI0OSwgCi0gICAgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxMTEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxMDUsIAotICAgIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxNTgsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAKLSAgICAxNjEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxOTAsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIAotICAgIDIxLCAxOTUsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxOTksIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAKLSAgICAxNzQsIDIxLCAxOTYsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAyMDEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgCi0gICAgMjE2LCAyNDQsIDIxLCAxMTEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxMDUsIDI0OSwgMTU3LCAyMjIsIAotICAgIDIwNCwgMjE2LCAyNDQsIDIxLCAxNTgsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxNjEsIDI0OSwgMTU3LCAKLSAgICAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTAsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTUsIDI0OSwgCi0gICAgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTksIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTYsIAotICAgIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAyMDEsIDExLCAyMywgNiwgNjEsIDExLCAyMywgNiwgMjUzLCAKLSAgICAxNjYsIDExLCAyMywgNiwgMjUxLCA3NCwgMTEsIDIzLCA2LCAyNDksIDY4LCAxMSwgMjMsIDYsIDc2LCAxMSwgMjMsIDYsIAotICAgIDI0NSwgMTQsIDExLCAyMywgNiwgMjQzLCAyMDksIDExLCAyMywgNiwgMjQyLCA2NywgMTEsIDIzLCA2LCA3NCwgMTEsIDIzLCAKLSAgICA2LCAyMzUsIDE1MCwgMTEsIDIzLCA2LCAyMzUsIDI5LCAxMSwgMjMsIDYsIDE1NiwgMTEsIDIzLCA2LCAxOTQsIDExLCAyMywgCi0gICAgNiwgMjMwLCAzMCwgMTEsIDIzLCA2LCA3OCwgMTEsIDIzLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCA2LCAyMjQsIDk5LCAxMSwgCi0gICAgMjMsIDYsIDE1MywgMTEsIDIzLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDYsIDY5LCAxMSwgCi0gICAgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDYsIDIxMiwgOTgsIDExLCAyMywgNiwgMjExLCAxNzgsIDExLCAyMywgNiwgMjExLCAKLSAgICAxMTcsIDExLCAyMywgNiwgMjEwLCAxNTksIDExLCAyMywgNCwgNjEsIDExLCAyMywgNCwgMjUzLCAxNjYsIDExLCAyMywgNCwgCi0gICAgMjUxLCA3NCwgMTEsIDIzLCA0LCAyNDksIDY4LCAxMSwgMjMsIDQsIDc2LCAxMSwgMjMsIDQsIDI0NSwgMTQsIDExLCAyMywgCi0gICAgNCwgMjQzLCAyMDksIDExLCAyMywgNCwgMjQyLCA2NywgMTEsIDIzLCA0LCA3NCwgMTEsIDIzLCA0LCAyMzUsIDE1MCwgMTEsIAotICAgIDIzLCA0LCAyMzUsIDI5LCAxMSwgMjMsIDQsIDE1NiwgMTEsIDIzLCA0LCAxOTQsIDExLCAyMywgNCwgMjMwLCAzMCwgMTEsIAotICAgIDIzLCA0LCA3OCwgMTEsIDIzLCA0LCAyMjYsIDEwOSwgMTEsIDIzLCA0LCAyMjQsIDk5LCAxMSwgMjMsIDQsIDE1MywgMTEsIAotICAgIDIzLCA0LCAyMjIsIDkzLCAxMSwgMjMsIDQsIDIxNywgMTUzLCAxMSwgMjMsIDQsIDY5LCAxMSwgMjMsIDQsIDIxNCwgMTA1LCAKLSAgICAxMSwgMjMsIDQsIDIxMiwgOTgsIDExLCAyMywgNCwgMjExLCAxNzgsIDExLCAyMywgNCwgMjExLCAxMTcsIDExLCAyMywgNCwgCi0gICAgMjEwLCAxNTksIDExLCAzMiwgNiwgNjEsIDExLCAzMiwgNiwgMjUzLCAxNjYsIDExLCAzMiwgNiwgMjUxLCA3NCwgMTEsIDMyLCAKLSAgICA2LCAyNDksIDY4LCAxMSwgMzIsIDYsIDc2LCAxMSwgMzIsIDYsIDI0NSwgMTQsIDExLCAzMiwgNiwgMjQzLCAyMDksIDExLCAKLSAgICAzMiwgNiwgMjQyLCA2NywgMTEsIDMyLCA2LCA3NCwgMTEsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDMyLCA2LCAyMzUsIDI5LCAKLSAgICAxMSwgMzIsIDYsIDE1NiwgMTEsIDMyLCA2LCAxOTQsIDExLCAzMiwgNiwgMjMwLCAzMCwgMTEsIDMyLCA2LCA3OCwgMTEsIAotICAgIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzIsIDYsIDE1MywgMTEsIDMyLCA2LCAyMjIsIDkzLCAKLSAgICAxMSwgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzIsIDYsIDY5LCAxMSwgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzIsIDYsIDIxMiwgCi0gICAgOTgsIDExLCAzMiwgNiwgMjExLCAxNzgsIDExLCAzMiwgNiwgMjExLCAxMTcsIDExLCAzMiwgNiwgMjEwLCAxNTksIDExLCAKLSAgICAzMiwgNCwgNjEsIDExLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDMyLCA0LCAyNDksIDY4LCAKLSAgICAxMSwgMzIsIDQsIDc2LCAxMSwgMzIsIDQsIDI0NSwgMTQsIDExLCAzMiwgNCwgMjQzLCAyMDksIDExLCAzMiwgNCwgNzQsIAotICAgIDExLCAzMiwgNCwgMjM1LCAxNTAsIDExLCAzMiwgNCwgMjM1LCAyOSwgMTEsIDMyLCA0LCAxNTYsIDExLCAzMiwgNCwgMTk0LCAKLSAgICAxMSwgMzIsIDQsIDIzMCwgMzAsIDExLCAzMiwgNCwgNzgsIDExLCAzMiwgNCwgMjI2LCAxMDksIDExLCAzMiwgNCwgMjI0LCAKLSAgICA5OSwgMTEsIDMyLCA0LCAxNTMsIDExLCAzMiwgNCwgMjIyLCA5MywgMTEsIDMyLCA0LCAyMTcsIDE1MywgMTEsIDMyLCA0LCAKLSAgICA2OSwgMTEsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzIsIAotICAgIDQsIDIxMSwgMTE3LCAxMSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA2LCA2MSwgMTEsIDIzLCAzMiwgNiwgMjUzLCAKLSAgICAxNjYsIDExLCAyMywgMzIsIDYsIDI1MSwgNzQsIDExLCAyMywgMzIsIDYsIDI0OSwgNjgsIDExLCAyMywgMzIsIDYsIDc2LCAKLSAgICAxMSwgMjMsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDIzLCAzMiwgNiwgMjQyLCA2NywgCi0gICAgMTEsIDIzLCAzMiwgNiwgNzQsIDExLCAyMywgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDI5LCAxMSwgCi0gICAgMjMsIDMyLCA2LCAxNTYsIDExLCAyMywgMzIsIDYsIDE5NCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAzMCwgMTEsIDIzLCAzMiwgCi0gICAgNiwgNzgsIDExLCAyMywgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMjMsIDMyLCA2LCAKLSAgICAxNTMsIDExLCAyMywgMzIsIDYsIDIyMiwgOTMsIDExLCAyMywgMzIsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDMyLCA2LCA2OSwgCi0gICAgMTEsIDIzLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAyMywgMzIsIDYsIDIxMSwgMTc4LCAKLSAgICAxMSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAyMywgMzIsIDQsIDYxLCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDIzLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDIzLCAzMiwgNCwgMjQ5LCA2OCwgMTEsIAotICAgIDIzLCAzMiwgNCwgNzYsIDExLCAyMywgMzIsIDQsIDI0NSwgMTQsIDExLCAyMywgMzIsIDQsIDI0MywgMjA5LCAxMSwgMjMsIAotICAgIDMyLCA0LCAyNDIsIDY3LCAxMSwgMjMsIDMyLCA0LCA3NCwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxNTAsIDExLCAyMywgMzIsIAotICAgIDQsIDIzNSwgMjksIDExLCAyMywgMzIsIDQsIDE1NiwgMTEsIDIzLCAzMiwgNCwgMTk0LCAxMSwgMjMsIDMyLCA0LCAyMzAsIAotICAgIDMwLCAxMSwgMjMsIDMyLCA0LCA3OCwgMTEsIDIzLCAzMiwgNCwgMjI2LCAxMDksIDExLCAyMywgMzIsIDQsIDIyNCwgOTksIAotICAgIDExLCAyMywgMzIsIDQsIDE1MywgMTEsIDIzLCAzMiwgNCwgMjIyLCA5MywgMTEsIDIzLCAzMiwgNCwgMjE3LCAxNTMsIDExLCAKLSAgICAyMywgMzIsIDQsIDY5LCAxMSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDIzLCAKLSAgICAzMiwgNCwgMjExLCAxNzgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIAotICAgIDExOSwgNiwgNjEsIDExLCAxMTksIDYsIDI1MSwgNzQsIDExLCAxMTksIDYsIDI0OSwgNjgsIDExLCAxMTksIDYsIDI0MywgCi0gICAgMjA5LCAxMSwgMTE5LCA2LCAyMzUsIDE1MCwgMTEsIDExOSwgNiwgMjM1LCAyOSwgMTEsIDExOSwgNiwgMjMwLCAzMCwgMTEsIAotICAgIDExOSwgNiwgNzgsIDExLCAxMTksIDYsIDIyNiwgMTA5LCAxMSwgMTE5LCA2LCAyMjQsIDk5LCAxMSwgMTE5LCA2LCAyMjIsIAotICAgIDkzLCAxMSwgMTE5LCA2LCAyMTcsIDE1MywgMTEsIDExOSwgNiwgNjksIDExLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMTE5LCAKLSAgICA2LCAyMTIsIDk4LCAxMSwgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDExOSwgNiwgMjExLCAxMTcsIDExLCAxMTksIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMTE5LCA0LCA2MSwgMTEsIDExOSwgNCwgMjUzLCAxNjYsIDExLCAxMTksIDQsIDI1MSwgNzQsIDExLCAxMTksIAotICAgIDQsIDI0OSwgNjgsIDExLCAxMTksIDQsIDI0NSwgMTQsIDExLCAxMTksIDQsIDI0MiwgNjcsIDExLCAxMTksIDQsIDc0LCAxMSwgCi0gICAgMTE5LCA0LCAyMzUsIDE1MCwgMTEsIDExOSwgNCwgMjM1LCAyOSwgMTEsIDExOSwgNCwgMTU2LCAxMSwgMTE5LCA0LCAxOTQsIAotICAgIDExLCAxMTksIDQsIDIzMCwgMzAsIDExLCAxMTksIDQsIDIyNiwgMTA5LCAxMSwgMTE5LCA0LCAyMjQsIDk5LCAxMSwgMTE5LCAKLSAgICA0LCAxNTMsIDExLCAxMTksIDQsIDIyMiwgOTMsIDExLCAxMTksIDQsIDIxNywgMTUzLCAxMSwgMTE5LCA0LCA2OSwgMTEsIAotICAgIDExOSwgNCwgMjE0LCAxMDUsIDExLCAxMTksIDQsIDIxMiwgOTgsIDExLCAxMTksIDQsIDIxMSwgMTc4LCAxMSwgMTE5LCA0LCAKLSAgICAyMTEsIDExNywgMTEsIDExOSwgNCwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA2LCA2MSwgMTEsIDIzLCAxMTksIDYsIDI1MywgCi0gICAgMTY2LCAxMSwgMjMsIDExOSwgNiwgMjUxLCA3NCwgMTEsIDIzLCAxMTksIDYsIDI0OSwgNjgsIDExLCAyMywgMTE5LCA2LCAKLSAgICA3NiwgMTEsIDIzLCAxMTksIDYsIDI0NSwgMTQsIDExLCAyMywgMTE5LCA2LCAyNDMsIDIwOSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDI0MiwgNjcsIDExLCAyMywgMTE5LCA2LCA3NCwgMTEsIDIzLCAxMTksIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDExOSwgNiwgCi0gICAgMjM1LCAyOSwgMTEsIDIzLCAxMTksIDYsIDE1NiwgMTEsIDIzLCAxMTksIDYsIDE5NCwgMTEsIDIzLCAxMTksIDYsIDIzMCwgCi0gICAgMzAsIDExLCAyMywgMTE5LCA2LCA3OCwgMTEsIDIzLCAxMTksIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDExOSwgNiwgMjI0LCAKLSAgICA5OSwgMTEsIDIzLCAxMTksIDYsIDE1MywgMTEsIDIzLCAxMTksIDYsIDIyMiwgOTMsIDExLCAyMywgMTE5LCA2LCAyMTcsIAotICAgIDE1MywgMTEsIDIzLCAxMTksIDYsIDY5LCAxMSwgMjMsIDExOSwgNiwgMjE0LCAxMDUsIDExLCAyMywgMTE5LCA2LCAyMTIsIAotICAgIDk4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxNzgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMTksIDYsIAotICAgIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNCwgNjEsIDExLCAyMywgMTE5LCA0LCAyNTMsIDE2NiwgMTEsIDIzLCAxMTksIDQsIAotICAgIDI1MSwgNzQsIDExLCAyMywgMTE5LCA0LCAyNDksIDY4LCAxMSwgMjMsIDExOSwgNCwgNzYsIDExLCAyMywgMTE5LCA0LCAKLSAgICAyNDUsIDE0LCAxMSwgMjMsIDExOSwgNCwgMjQzLCAyMDksIDExLCAyMywgMTE5LCA0LCAyNDIsIDY3LCAxMSwgMjMsIDExOSwgCi0gICAgNCwgNzQsIDExLCAyMywgMTE5LCA0LCAyMzUsIDE1MCwgMTEsIDIzLCAxMTksIDQsIDIzNSwgMjksIDExLCAyMywgMTE5LCA0LCAKLSAgICAxNTYsIDExLCAyMywgMTE5LCA0LCAxOTQsIDExLCAyMywgMTE5LCA0LCAyMzAsIDMwLCAxMSwgMjMsIDExOSwgNCwgNzgsIAotICAgIDExLCAyMywgMTE5LCA0LCAyMjYsIDEwOSwgMTEsIDIzLCAxMTksIDQsIDIyNCwgOTksIDExLCAyMywgMTE5LCA0LCAxNTMsIAotICAgIDExLCAyMywgMTE5LCA0LCAyMjIsIDkzLCAxMSwgMjMsIDExOSwgNCwgMjE3LCAxNTMsIDExLCAyMywgMTE5LCA0LCA2OSwgCi0gICAgMTEsIDIzLCAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNCwgMjEyLCA5OCwgMTEsIDIzLCAxMTksIDQsIDIxMSwgCi0gICAgMTc4LCAxMSwgMjMsIDExOSwgNCwgMjExLCAxMTcsIDExLCAyMywgMTE5LCA0LCAyMTAsIDE1OSwgMTEsIDEzMywgNiwgNjEsIAotICAgIDExLCAxMzMsIDYsIDI1MywgMTY2LCAxMSwgMTMzLCA2LCAyNDksIDY4LCAxMSwgMTMzLCA2LCA3NiwgMTEsIDEzMywgNiwgCi0gICAgMjQ1LCAxNCwgMTEsIDEzMywgNiwgMjQzLCAyMDksIDExLCAxMzMsIDYsIDIzNSwgMTUwLCAxMSwgMTMzLCA2LCAyMzUsIDI5LCAKLSAgICAxMSwgMTMzLCA2LCAxNTYsIDExLCAxMzMsIDYsIDE5NCwgMTEsIDEzMywgNiwgMjMwLCAzMCwgMTEsIDEzMywgNiwgNzgsIAotICAgIDExLCAxMzMsIDYsIDIyNiwgMTA5LCAxMSwgMTMzLCA2LCAyMjQsIDk5LCAxMSwgMTMzLCA2LCAyMjIsIDkzLCAxMSwgMTMzLCAKLSAgICA2LCAyMTcsIDE1MywgMTEsIDEzMywgNiwgNjksIDExLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMTMzLCA2LCAyMTIsIDk4LCAKLSAgICAxMSwgMTMzLCA2LCAyMTEsIDE3OCwgMTEsIDEzMywgNiwgMjExLCAxMTcsIDExLCAxMzMsIDQsIDYxLCAxMSwgMTMzLCA0LCAKLSAgICAyNTMsIDE2NiwgMTEsIDEzMywgNCwgMjUxLCA3NCwgMTEsIDEzMywgNCwgMjQ5LCA2OCwgMTEsIDEzMywgNCwgNzYsIDExLCAKLSAgICAxMzMsIDQsIDI0NSwgMTQsIDExLCAxMzMsIDQsIDI0MywgMjA5LCAxMSwgMTMzLCA0LCAyNDIsIDY3LCAxMSwgMTMzLCA0LCAKLSAgICA3NCwgMTEsIDEzMywgNCwgMjM1LCAxNTAsIDExLCAxMzMsIDQsIDIzNSwgMjksIDExLCAxMzMsIDQsIDE1NiwgMTEsIDEzMywgCi0gICAgNCwgMTk0LCAxMSwgMTMzLCA0LCAyMzAsIDMwLCAxMSwgMTMzLCA0LCA3OCwgMTEsIDEzMywgNCwgMjI2LCAxMDksIDExLCAKLSAgICAxMzMsIDQsIDIyNCwgOTksIDExLCAxMzMsIDQsIDE1MywgMTEsIDEzMywgNCwgMjIyLCA5MywgMTEsIDEzMywgNCwgMjE3LCAKLSAgICAxNTMsIDExLCAxMzMsIDQsIDY5LCAxMSwgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDEzMywgCi0gICAgNCwgMjExLCAxNzgsIDExLCAxMzMsIDQsIDIxMSwgMTE3LCAxMSwgMTMzLCA0LCAyMTAsIDE1OSwgMTEsIDEzOSwgNiwgNjEsIAotICAgIDExLCAxMzksIDYsIDI1MywgMTY2LCAxMSwgMTM5LCA2LCAyNDksIDY4LCAxMSwgMTM5LCA2LCA3NiwgMTEsIDEzOSwgNiwgCi0gICAgMjQ1LCAxNCwgMTEsIDEzOSwgNiwgMjQzLCAyMDksIDExLCAxMzksIDYsIDc0LCAxMSwgMTM5LCA2LCAyMzUsIDE1MCwgMTEsIAotICAgIDEzOSwgNiwgMjM1LCAyOSwgMTEsIDEzOSwgNiwgMTU2LCAxMSwgMTM5LCA2LCAxOTQsIDExLCAxMzksIDYsIDc4LCAxMSwgCi0gICAgMTM5LCA2LCAyMjIsIDkzLCAxMSwgMTM5LCA2LCAyMTcsIDE1MywgMTEsIDEzOSwgNiwgNjksIDExLCAxMzksIDYsIDIxNCwgCi0gICAgMTA1LCAxMSwgMTM5LCA2LCAyMTIsIDk4LCAxMSwgMTM5LCA2LCAyMTEsIDE3OCwgMTEsIDEzOSwgNiwgMjExLCAxMTcsIDExLCAKLSAgICAxMzksIDQsIDYxLCAxMSwgMTM5LCA0LCAyNTMsIDE2NiwgMTEsIDEzOSwgNCwgMjUxLCA3NCwgMTEsIDEzOSwgNCwgMjQ5LCAKLSAgICA2OCwgMTEsIDEzOSwgNCwgNzYsIDExLCAxMzksIDQsIDI0NSwgMTQsIDExLCAxMzksIDQsIDI0MywgMjA5LCAxMSwgMTM5LCAKLSAgICA0LCAyNDIsIDY3LCAxMSwgMTM5LCA0LCA3NCwgMTEsIDEzOSwgNCwgMjM1LCAxNTAsIDExLCAxMzksIDQsIDIzNSwgMjksIAotICAgIDExLCAxMzksIDQsIDE1NiwgMTEsIDEzOSwgNCwgMTk0LCAxMSwgMTM5LCA0LCAyMzAsIDMwLCAxMSwgMTM5LCA0LCA3OCwgCi0gICAgMTEsIDEzOSwgNCwgMjI2LCAxMDksIDExLCAxMzksIDQsIDIyNCwgOTksIDExLCAxMzksIDQsIDE1MywgMTEsIDEzOSwgNCwgCi0gICAgMjIyLCA5MywgMTEsIDEzOSwgNCwgMjE3LCAxNTMsIDExLCAxMzksIDQsIDY5LCAxMSwgMTM5LCA0LCAyMTQsIDEwNSwgMTEsIAotICAgIDEzOSwgNCwgMjEyLCA5OCwgMTEsIDEzOSwgNCwgMjExLCAxNzgsIDExLCAxMzksIDQsIDIxMSwgMTE3LCAxMSwgMTM5LCA0LCAKLSAgICAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDYsIDYxLCAxMSwgMjMsIDEzMywgNiwgMjUzLCAxNjYsIDExLCAyMywgMTMzLCA2LCAKLSAgICAyNTEsIDc0LCAxMSwgMjMsIDEzMywgNiwgMjQ5LCA2OCwgMTEsIDIzLCAxMzMsIDYsIDc2LCAxMSwgMjMsIDEzMywgNiwgCi0gICAgMjQ1LCAxNCwgMTEsIDIzLCAxMzMsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDEzMywgNiwgMjQyLCA2NywgMTEsIDIzLCAxMzMsIAotICAgIDYsIDc0LCAxMSwgMjMsIDEzMywgNiwgMjM1LCAxNTAsIDExLCAyMywgMTMzLCA2LCAyMzUsIDI5LCAxMSwgMjMsIDEzMywgNiwgCi0gICAgMTU2LCAxMSwgMjMsIDEzMywgNiwgMTk0LCAxMSwgMjMsIDEzMywgNiwgMjMwLCAzMCwgMTEsIDIzLCAxMzMsIDYsIDc4LCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMjI2LCAxMDksIDExLCAyMywgMTMzLCA2LCAyMjQsIDk5LCAxMSwgMjMsIDEzMywgNiwgMTUzLCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMjIyLCA5MywgMTEsIDIzLCAxMzMsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDEzMywgNiwgNjksIAotICAgIDExLCAyMywgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA2LCAyMTEsIAotICAgIDE3OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNiwgMjEwLCAxNTksIDExLCAyMywgMTMzLCA0LCAKLSAgICA2MSwgMTEsIDIzLCAxMzMsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDEzMywgNCwgMjUxLCA3NCwgMTEsIDIzLCAxMzMsIDQsIAotICAgIDI0OSwgNjgsIDExLCAyMywgMTMzLCA0LCA3NiwgMTEsIDIzLCAxMzMsIDQsIDI0NSwgMTQsIDExLCAyMywgMTMzLCA0LCAKLSAgICAyNDMsIDIwOSwgMTEsIDIzLCAxMzMsIDQsIDI0MiwgNjcsIDExLCAyMywgMTMzLCA0LCA3NCwgMTEsIDIzLCAxMzMsIDQsIAotICAgIDIzNSwgMTUwLCAxMSwgMjMsIDEzMywgNCwgMjM1LCAyOSwgMTEsIDIzLCAxMzMsIDQsIDE1NiwgMTEsIDIzLCAxMzMsIDQsIAotICAgIDE5NCwgMTEsIDIzLCAxMzMsIDQsIDIzMCwgMzAsIDExLCAyMywgMTMzLCA0LCA3OCwgMTEsIDIzLCAxMzMsIDQsIDIyNiwgCi0gICAgMTA5LCAxMSwgMjMsIDEzMywgNCwgMjI0LCA5OSwgMTEsIDIzLCAxMzMsIDQsIDE1MywgMTEsIDIzLCAxMzMsIDQsIDIyMiwgCi0gICAgOTMsIDExLCAyMywgMTMzLCA0LCAyMTcsIDE1MywgMTEsIDIzLCAxMzMsIDQsIDY5LCAxMSwgMjMsIDEzMywgNCwgMjE0LCAKLSAgICAxMDUsIDExLCAyMywgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNCwgMjExLCAxNzgsIDExLCAyMywgMTMzLCA0LCAKLSAgICAyMTEsIDExNywgMTEsIDIzLCAxMzMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDYsIDYxLCAxMSwgMzUsIDYsIDI1MywgMTY2LCAKLSAgICAxMSwgMzUsIDYsIDI1MSwgNzQsIDExLCAzNSwgNiwgMjQ5LCA2OCwgMTEsIDM1LCA2LCA3NiwgMTEsIDM1LCA2LCAyNDUsIAotICAgIDE0LCAxMSwgMzUsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDYsIDI0MiwgNjcsIDExLCAzNSwgNiwgNzQsIDExLCAzNSwgNiwgCi0gICAgMjM1LCAxNTAsIDExLCAzNSwgNiwgMjM1LCAyOSwgMTEsIDM1LCA2LCAxNTYsIDExLCAzNSwgNiwgMTk0LCAxMSwgMzUsIDYsIAotICAgIDIzMCwgMzAsIDExLCAzNSwgNiwgNzgsIDExLCAzNSwgNiwgMjI2LCAxMDksIDExLCAzNSwgNiwgMjI0LCA5OSwgMTEsIDM1LCAKLSAgICA2LCAxNTMsIDExLCAzNSwgNiwgMjIyLCA5MywgMTEsIDM1LCA2LCAyMTcsIDE1MywgMTEsIDM1LCA2LCA2OSwgMTEsIDM1LCAKLSAgICA2LCAyMTQsIDEwNSwgMTEsIDM1LCA2LCAyMTIsIDk4LCAxMSwgMzUsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDYsIDIxMSwgCi0gICAgMTE3LCAxMSwgMzUsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDQsIDYxLCAxMSwgMzUsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDQsIAotICAgIDI1MSwgNzQsIDExLCAzNSwgNCwgMjQ5LCA2OCwgMTEsIDM1LCA0LCA3NiwgMTEsIDM1LCA0LCAyNDUsIDE0LCAxMSwgMzUsIAotICAgIDQsIDI0MywgMjA5LCAxMSwgMzUsIDQsIDI0MiwgNjcsIDExLCAzNSwgNCwgNzQsIDExLCAzNSwgNCwgMjM1LCAxNTAsIDExLCAKLSAgICAzNSwgNCwgMjM1LCAyOSwgMTEsIDM1LCA0LCAxNTYsIDExLCAzNSwgNCwgMTk0LCAxMSwgMzUsIDQsIDIzMCwgMzAsIDExLCAKLSAgICAzNSwgNCwgNzgsIDExLCAzNSwgNCwgMjI2LCAxMDksIDExLCAzNSwgNCwgMjI0LCA5OSwgMTEsIDM1LCA0LCAxNTMsIDExLCAKLSAgICAzNSwgNCwgMjIyLCA5MywgMTEsIDM1LCA0LCAyMTcsIDE1MywgMTEsIDM1LCA0LCA2OSwgMTEsIDM1LCA0LCAyMTQsIDEwNSwgCi0gICAgMTEsIDM1LCA0LCAyMTIsIDk4LCAxMSwgMzUsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDQsIAotICAgIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA2LCA2MSwgMTEsIDM1LCAyMywgNiwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDYsIDI1MSwgCi0gICAgNzQsIDExLCAzNSwgMjMsIDYsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDYsIDc2LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDE0LCAKLSAgICAxMSwgMzUsIDIzLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgNiwgMjQyLCA2NywgMTEsIDM1LCAyMywgNiwgNzQsIDExLCAKLSAgICAzNSwgMjMsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCA2LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCA2LCAxNTYsIDExLCAzNSwgCi0gICAgMjMsIDYsIDE5NCwgMTEsIDM1LCAyMywgNiwgMjMwLCAzMCwgMTEsIDM1LCAyMywgNiwgNzgsIDExLCAzNSwgMjMsIDYsIAotICAgIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCA2LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCA2LCAxNTMsIDExLCAzNSwgMjMsIDYsIDIyMiwgCi0gICAgOTMsIDExLCAzNSwgMjMsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCA2LCA2OSwgMTEsIDM1LCAyMywgNiwgMjE0LCAxMDUsIAotICAgIDExLCAzNSwgMjMsIDYsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDExNywgCi0gICAgMTEsIDM1LCAyMywgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDQsIDYxLCAxMSwgMzUsIDIzLCA0LCAyNTMsIDE2NiwgMTEsIAotICAgIDM1LCAyMywgNCwgMjUxLCA3NCwgMTEsIDM1LCAyMywgNCwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgNCwgNzYsIDExLCAzNSwgCi0gICAgMjMsIDQsIDI0NSwgMTQsIDExLCAzNSwgMjMsIDQsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCA0LCAyNDIsIDY3LCAxMSwgMzUsIAotICAgIDIzLCA0LCA3NCwgMTEsIDM1LCAyMywgNCwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDQsIDIzNSwgMjksIDExLCAzNSwgMjMsIAotICAgIDQsIDE1NiwgMTEsIDM1LCAyMywgNCwgMTk0LCAxMSwgMzUsIDIzLCA0LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCA0LCA3OCwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjI2LCAxMDksIDExLCAzNSwgMjMsIDQsIDIyNCwgOTksIDExLCAzNSwgMjMsIDQsIDE1MywgMTEsIAotICAgIDM1LCAyMywgNCwgMjIyLCA5MywgMTEsIDM1LCAyMywgNCwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDQsIDY5LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNCwgMjExLCAxNzgsIDExLCAzNSwgCi0gICAgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgNiwgNjEsIDExLCAzNSwgMzIsIAotICAgIDYsIDI1MywgMTY2LCAxMSwgMzUsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMzUsIDMyLCA2LCAyNDksIDY4LCAxMSwgMzUsIDMyLCAKLSAgICA2LCA3NiwgMTEsIDM1LCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDM1LCAzMiwgNiwgMjQzLCAyMDksIDExLCAzNSwgMzIsIDYsIAotICAgIDI0MiwgNjcsIDExLCAzNSwgMzIsIDYsIDc0LCAxMSwgMzUsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAKLSAgICAyOSwgMTEsIDM1LCAzMiwgNiwgMTU2LCAxMSwgMzUsIDMyLCA2LCAxOTQsIDExLCAzNSwgMzIsIDYsIDIzMCwgMzAsIDExLCAKLSAgICAzNSwgMzIsIDYsIDc4LCAxMSwgMzUsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDM1LCAzMiwgNiwgMjI0LCA5OSwgMTEsIDM1LCAKLSAgICAzMiwgNiwgMTUzLCAxMSwgMzUsIDMyLCA2LCAyMjIsIDkzLCAxMSwgMzUsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDM1LCAzMiwgCi0gICAgNiwgNjksIDExLCAzNSwgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA2LCAKLSAgICAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNiwgMjExLCAxMTcsIDExLCAzNSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCAKLSAgICA0LCA2MSwgMTEsIDM1LCAzMiwgNCwgMjUzLCAxNjYsIDExLCAzNSwgMzIsIDQsIDI1MSwgNzQsIDExLCAzNSwgMzIsIDQsIAotICAgIDI0OSwgNjgsIDExLCAzNSwgMzIsIDQsIDc2LCAxMSwgMzUsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMzUsIDMyLCA0LCAyNDMsIAotICAgIDIwOSwgMTEsIDM1LCAzMiwgNCwgMjQyLCA2NywgMTEsIDM1LCAzMiwgNCwgNzQsIDExLCAzNSwgMzIsIDQsIDIzNSwgMTUwLCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyMzUsIDI5LCAxMSwgMzUsIDMyLCA0LCAxNTYsIDExLCAzNSwgMzIsIDQsIDE5NCwgMTEsIDM1LCAKLSAgICAzMiwgNCwgMjMwLCAzMCwgMTEsIDM1LCAzMiwgNCwgNzgsIDExLCAzNSwgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDMyLCAKLSAgICA0LCAyMjQsIDk5LCAxMSwgMzUsIDMyLCA0LCAxNTMsIDExLCAzNSwgMzIsIDQsIDIyMiwgOTMsIDExLCAzNSwgMzIsIDQsIAotICAgIDIxNywgMTUzLCAxMSwgMzUsIDMyLCA0LCA2OSwgMTEsIDM1LCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIxMiwgCi0gICAgOTgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA0LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAzNSwgMjMsIDMyLCA2LCA2MSwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgMjUxLCA3NCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDMyLCA2LCA3NiwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDI0NSwgMTQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MiwgCi0gICAgNjcsIDExLCAzNSwgMjMsIDMyLCA2LCA3NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgMjM1LCAyOSwgMTEsIDM1LCAyMywgMzIsIDYsIDE1NiwgMTEsIDM1LCAyMywgMzIsIDYsIDE5NCwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDYsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDMyLCA2LCA3OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMTA5LCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDM1LCAyMywgMzIsIDYsIDE1MywgMTEsIDM1LCAyMywgMzIsIDYsIDIyMiwgCi0gICAgOTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgMzIsIDYsIDY5LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNiwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxNzgsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIDM1LCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNCwgCi0gICAgNjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MSwgNzQsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyNDksIDY4LCAxMSwgMzUsIDIzLCAzMiwgNCwgNzYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDE0LCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNCwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDMyLCA0LCAyNDIsIDY3LCAxMSwgMzUsIDIzLCAzMiwgNCwgCi0gICAgNzQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMjksIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAxNTYsIDExLCAzNSwgMjMsIDMyLCA0LCAxOTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNCwgNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgOTksIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDIzLCAzMiwgNCwgCi0gICAgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA0LCA2OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxMTcsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzMCwgMTQzLCA2LCA2MSwgMTEsIDIzMCwgMTQzLCA2LCAyNTMsIAotICAgIDE2NiwgMTEsIDIzMCwgMTQzLCA2LCAyNTEsIDc0LCAxMSwgMjMwLCAxNDMsIDYsIDI0OSwgNjgsIDExLCAyMzAsIDE0MywgNiwgCi0gICAgNzYsIDExLCAyMzAsIDE0MywgNiwgMjQ1LCAxNCwgMTEsIDIzMCwgMTQzLCA2LCAyNDMsIDIwOSwgMTEsIDIzMCwgMTQzLCA2LCAKLSAgICAyNDIsIDY3LCAxMSwgMjMwLCAxNDMsIDYsIDc0LCAxMSwgMjMwLCAxNDMsIDYsIDIzNSwgMTUwLCAxMSwgMjMwLCAxNDMsIDYsIAotICAgIDIzNSwgMjksIDExLCAyMzAsIDE0MywgNiwgMTU2LCAxMSwgMjMwLCAxNDMsIDYsIDE5NCwgMTEsIDIzMCwgMTQzLCA2LCAKLSAgICAyMzAsIDMwLCAxMSwgMjMwLCAxNDMsIDYsIDc4LCAxMSwgMjMwLCAxNDMsIDYsIDIyNiwgMTA5LCAxMSwgMjMwLCAxNDMsIDYsIAotICAgIDIyNCwgOTksIDExLCAyMzAsIDE0MywgNiwgMTUzLCAxMSwgMjMwLCAxNDMsIDYsIDIyMiwgOTMsIDExLCAyMzAsIDE0MywgNiwgCi0gICAgMjE3LCAxNTMsIDExLCAyMzAsIDE0MywgNiwgNjksIDExLCAyMzAsIDE0MywgNiwgMjE0LCAxMDUsIDExLCAyMzAsIDE0MywgCi0gICAgNiwgMjEyLCA5OCwgMTEsIDIzMCwgMTQzLCA2LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTQzLCA2LCAyMTEsIDExNywgMTEsIAotICAgIDIzMCwgMTQzLCA2LCAyMTAsIDE1OSwgMTEsIDIzMCwgMTQzLCA0LCA2MSwgMTEsIDIzMCwgMTQzLCA0LCAyNTMsIDE2NiwgCi0gICAgMTEsIDIzMCwgMTQzLCA0LCAyNTEsIDc0LCAxMSwgMjMwLCAxNDMsIDQsIDI0OSwgNjgsIDExLCAyMzAsIDE0MywgNCwgNzYsIAotICAgIDExLCAyMzAsIDE0MywgNCwgMjQ1LCAxNCwgMTEsIDIzMCwgMTQzLCA0LCAyNDMsIDIwOSwgMTEsIDIzMCwgMTQzLCA0LCAKLSAgICAyNDIsIDY3LCAxMSwgMjMwLCAxNDMsIDQsIDc0LCAxMSwgMjMwLCAxNDMsIDQsIDIzNSwgMTUwLCAxMSwgMjMwLCAxNDMsIDQsIAotICAgIDIzNSwgMjksIDExLCAyMzAsIDE0MywgNCwgMTU2LCAxMSwgMjMwLCAxNDMsIDQsIDE5NCwgMTEsIDIzMCwgMTQzLCA0LCAKLSAgICAyMzAsIDMwLCAxMSwgMjMwLCAxNDMsIDQsIDc4LCAxMSwgMjMwLCAxNDMsIDQsIDIyNiwgMTA5LCAxMSwgMjMwLCAxNDMsIDQsIAotICAgIDIyNCwgOTksIDExLCAyMzAsIDE0MywgNCwgMTUzLCAxMSwgMjMwLCAxNDMsIDQsIDIyMiwgOTMsIDExLCAyMzAsIDE0MywgNCwgCi0gICAgMjE3LCAxNTMsIDExLCAyMzAsIDE0MywgNCwgNjksIDExLCAyMzAsIDE0MywgNCwgMjE0LCAxMDUsIDExLCAyMzAsIDE0MywgCi0gICAgNCwgMjEyLCA5OCwgMTEsIDIzMCwgMTQzLCA0LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTQzLCA0LCAyMTEsIDExNywgMTEsIAotICAgIDIzMCwgMTQzLCA0LCAyMTAsIDE1OSwgMTEsIDMyLCA0LCAyNDcsIDEyNywgNzQsIDExLCAzMiwgNCwgMjQ3LCAxMjcsIDIzNSwgCi0gICAgMTUwLCAxMSwgMjMsIDYsIDI1NCwgMTUxLCAxMSwgMjMsIDYsIDI1MiwgMzQsIDExLCAyMywgNiwgMjQzLCAxMTQsIDExLCAKLSAgICAyMywgNiwgMjQ4LCA2MiwgMTEsIDIzLCA2LCAyNDUsIDEwOCwgMTEsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDYsIDI0NSwgCi0gICAgNzEsIDExLCAyMywgNiwgMjE2LCAxODAsIDExLCAyMywgNiwgMjM1LCAxOTIsIDExLCAyMywgNiwgMjM0LCAyMjgsIDExLCAKLSAgICAyMywgNiwgMjMzLCAxMDQsIDExLCAyMywgNiwgMjMwLCAxMDcsIDExLCAyMywgNiwgMjI3LCAyNDIsIDExLCAyMywgNiwgCi0gICAgMjExLCAxNTcsIDExLCAyMywgNiwgMjI2LCAyMDMsIDExLCAyMywgNiwgMjI1LCAxMTEsIDExLCAyMywgNiwgMjIzLCA0MCwgCi0gICAgMTEsIDIzLCA2LCAyMTYsIDE4MSwgODcsIDExLCAyMywgNiwgMjE5LCAxNzksIDExLCAyMywgNiwgMjE3LCA0MiwgMTEsIDIzLCAKLSAgICA2LCAyMTQsIDE1NywgMTEsIDIzLCA2LCAyMjUsIDEzNiwgMTEsIDIzLCA2LCAyNTAsIDExOCwgMTEsIDIzLCA2LCAyMjQsIAotICAgIDE2NCwgMTEsIDIzLCA2LCAyMjYsIDIwNSwgMTEsIDIzLCAyMjksIDIyNiwgMTEsIDIzLCA0LCAyNTQsIDE1MSwgMTEsIDIzLCAKLSAgICA0LCAyNTIsIDM0LCAxMSwgMjMsIDQsIDI0MywgMTE0LCAxMSwgMjMsIDQsIDI0OCwgNjIsIDExLCAyMywgNCwgMjQ1LCAxMDgsIAotICAgIDExLCAyMywgNCwgMjEwLCA4NSwgMTEsIDIzLCA0LCAyNDUsIDcxLCAxMSwgMjMsIDQsIDIxNiwgMTgwLCAxMSwgMjMsIDQsIAotICAgIDIzNSwgMTkyLCAxMSwgMjMsIDQsIDIzNCwgMjI4LCAxMSwgMjMsIDQsIDIzMywgMTA0LCAxMSwgMjMsIDQsIDIzMCwgMTA3LCAKLSAgICAxMSwgMjMsIDQsIDIyNywgMjQyLCAxMSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDQsIDIyNiwgMjAzLCAxMSwgMjMsIDQsIAotICAgIDIyNSwgMTExLCAxMSwgMjMsIDQsIDIyMywgNDAsIDExLCAyMywgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMjMsIDQsIDIxOSwgCi0gICAgMTc5LCAxMSwgMjMsIDQsIDIxNywgNDIsIDExLCAyMywgNCwgMjE0LCAxNTcsIDExLCAyMywgNCwgMjI1LCAxMzYsIDExLCAKLSAgICAyMywgNCwgMjUwLCAxMTgsIDExLCAyMywgNCwgMjI0LCAxNjQsIDExLCAyMywgNCwgMjI2LCAyMDUsIDExLCAyMywgMjI2LCAKLSAgICAxLCAyNDcsIDI0MSwgMTEsIDIzLCAyNDUsIDEwOSwgODcsIDExLCAyMywgMjE2LCAxODEsIDg3LCAxMSwgMjMsIDIzNCwgCi0gICAgMjI5LCA4NywgMTEsIDIzLCAyMjUsIDEzNywgODcsIDExLCAyMywgMjIzLCA0MSwgODcsIDExLCAyMywgMjI1LCAxMTIsIDg3LCAKLSAgICAxMSwgMzIsIDYsIDI1NCwgMTUxLCAxMSwgMzIsIDYsIDI1MiwgMzQsIDExLCAzMiwgNiwgMjQzLCAxMTQsIDExLCAzMiwgNiwgCi0gICAgMjQ4LCA2MiwgMTEsIDMyLCA2LCAyNDUsIDEwOCwgMTEsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMzIsIDYsIDI0NSwgNzEsIDExLCAKLSAgICAzMiwgNiwgMjE2LCAxODAsIDExLCAzMiwgNiwgMjM1LCAxOTIsIDExLCAzMiwgNiwgMjM0LCAyMjgsIDExLCAzMiwgNiwgCi0gICAgMjMzLCAxMDQsIDExLCAzMiwgNiwgMjMwLCAxMDcsIDExLCAzMiwgNiwgMjI3LCAyNDIsIDExLCAzMiwgNiwgMjExLCAxNTcsIAotICAgIDExLCAzMiwgNiwgMjI2LCAyMDMsIDExLCAzMiwgNiwgMjI1LCAxMTEsIDExLCAzMiwgNiwgMjIzLCA0MCwgMTEsIDMyLCA2LCAKLSAgICAyMTYsIDE4MSwgODcsIDExLCAzMiwgNiwgMjE5LCAxNzksIDExLCAzMiwgNiwgMjE3LCA0MiwgMTEsIDMyLCA2LCAyMTQsIAotICAgIDE1NywgMTEsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDMyLCA2LCAyNTAsIDExOCwgMTEsIDMyLCA2LCAyMjQsIDE2NCwgMTEsIAotICAgIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDMyLCAyMjksIDIyNiwgMTEsIDMyLCA0LCAyNTQsIDE1MSwgMTEsIDMyLCA0LCAyNTIsIAotICAgIDM0LCAxMSwgMzIsIDQsIDI0MywgMTE0LCAxMSwgMzIsIDQsIDI0OCwgNjIsIDExLCAzMiwgNCwgMjQ1LCAxMDgsIDExLCAzMiwgCi0gICAgNCwgMjEwLCA4NSwgMTEsIDMyLCA0LCAyNDUsIDcxLCAxMSwgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMzIsIDQsIDIzNSwgMTkyLCAKLSAgICAxMSwgMzIsIDQsIDIzNCwgMjI4LCAxMSwgMzIsIDQsIDIzMywgMTA0LCAxMSwgMzIsIDQsIDIzMCwgMTA3LCAxMSwgMzIsIDQsIAotICAgIDIyNywgMjQyLCAxMSwgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzIsIDQsIDIyNiwgMjAzLCAxMSwgMzIsIDQsIDIyNSwgMTExLCAKLSAgICAxMSwgMzIsIDQsIDIyMywgNDAsIDExLCAzMiwgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzIsIDQsIDIxOSwgMTc5LCAxMSwgMzIsIAotICAgIDQsIDIxNywgNDIsIDExLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzMiwgNCwgMjI1LCAxMzYsIDExLCAzMiwgNCwgMjUwLCAKLSAgICAxMTgsIDExLCAzMiwgNCwgMjI0LCAxNjQsIDExLCAzMiwgNCwgMjI2LCAyMDUsIDExLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgCi0gICAgMTEsIDMyLCAyNDUsIDEwOSwgODcsIDExLCAzMiwgMjE2LCAxODEsIDg3LCAxMSwgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDMyLCAKLSAgICAyMjUsIDEzNywgODcsIDExLCAzMiwgMjIzLCA0MSwgODcsIDExLCAzMiwgMjI1LCAxMTIsIDg3LCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyNTQsIDE1MSwgMTEsIDIzLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDIzLCAzMiwgNiwgMjQzLCAxMTQsIDExLCAyMywgMzIsIDYsIAotICAgIDI0OCwgNjIsIDExLCAyMywgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyNDUsIDcxLCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAxOTIsIDExLCAyMywgMzIsIDYsIAotICAgIDIzNCwgMjI4LCAxMSwgMjMsIDMyLCA2LCAyMzMsIDEwNCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAxMDcsIDExLCAyMywgMzIsIAotICAgIDYsIDIyNywgMjQyLCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNiwgMjI2LCAyMDMsIDExLCAyMywgCi0gICAgMzIsIDYsIDIyNSwgMTExLCAxMSwgMjMsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MSwgODcsIDExLCAKLSAgICAyMywgMzIsIDYsIDIxOSwgMTc5LCAxMSwgMjMsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDE1NywgMTEsIAotICAgIDIzLCAzMiwgNiwgMjI1LCAxMzYsIDExLCAyMywgMzIsIDYsIDI1MCwgMTE4LCAxMSwgMjMsIDMyLCA2LCAyMjQsIDE2NCwgCi0gICAgMTEsIDIzLCAzMiwgNiwgMjI2LCAyMDUsIDExLCAyMywgMzIsIDIyOSwgMjI2LCAxMSwgMjMsIDMyLCA0LCAyNTQsIDE1MSwgCi0gICAgMTEsIDIzLCAzMiwgNCwgMjUyLCAzNCwgMTEsIDIzLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAyMywgMzIsIDQsIDI0OCwgNjIsIAotICAgIDExLCAyMywgMzIsIDQsIDI0NSwgMTA4LCAxMSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDcxLCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMTYsIDE4MCwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxOTIsIDExLCAyMywgMzIsIDQsIDIzNCwgCi0gICAgMjI4LCAxMSwgMjMsIDMyLCA0LCAyMzMsIDEwNCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAyMywgMzIsIDQsIAotICAgIDIyNywgMjQyLCAxMSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNCwgMjI2LCAyMDMsIDExLCAyMywgMzIsIAotICAgIDQsIDIyNSwgMTExLCAxMSwgMjMsIDMyLCA0LCAyMjMsIDQwLCAxMSwgMjMsIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAyMywgCi0gICAgMzIsIDQsIDIxOSwgMTc5LCAxMSwgMjMsIDMyLCA0LCAyMTcsIDQyLCAxMSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDIzLCAKLSAgICAzMiwgNCwgMjI1LCAxMzYsIDExLCAyMywgMzIsIDQsIDI1MCwgMTE4LCAxMSwgMjMsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIAotICAgIDIzLCAzMiwgNCwgMjI2LCAyMDUsIDExLCAyMywgMzIsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAyMywgMzIsIDI0NSwgMTA5LCAKLSAgICA4NywgMTEsIDIzLCAzMiwgMjE2LCAxODEsIDg3LCAxMSwgMjMsIDMyLCAyMzQsIDIyOSwgODcsIDExLCAyMywgMzIsIDIyNSwgCi0gICAgMTM3LCA4NywgMTEsIDIzLCAzMiwgMjIzLCA0MSwgODcsIDExLCAyMywgMzIsIDIyNSwgMTEyLCA4NywgMTEsIDM1LCAyMywgCi0gICAgNiwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDYsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDYsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCA2LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgCi0gICAgNiwgMjQ1LCA3MSwgMTEsIDM1LCAyMywgNiwgMjE2LCAxODAsIDExLCAzNSwgMjMsIDYsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAKLSAgICA2LCAyMzQsIDIyOCwgMTEsIDM1LCAyMywgNiwgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDYsIDIzMCwgMTA3LCAxMSwgMzUsIAotICAgIDIzLCA2LCAyMjcsIDI0MiwgMTEsIDM1LCAyMywgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDYsIDIyNiwgMjAzLCAxMSwgCi0gICAgMzUsIDIzLCA2LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgNiwgMjIzLCA0MCwgMTEsIDM1LCAyMywgNiwgMjE2LCAxODEsIDg3LCAKLSAgICAxMSwgMzUsIDIzLCA2LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgNiwgMjE3LCA0MiwgMTEsIDM1LCAyMywgNiwgMjE0LCAxNTcsIAotICAgIDExLCAzNSwgMjMsIDYsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCA2LCAyNTAsIDExOCwgMTEsIDM1LCAyMywgNiwgMjI0LCAKLSAgICAxNjQsIDExLCAzNSwgMjMsIDYsIDIyNiwgMjA1LCAxMSwgMzUsIDIzLCAyMjksIDIyNiwgMTEsIDM1LCAyMywgNCwgMjU0LCAKLSAgICAxNTEsIDExLCAzNSwgMjMsIDQsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDQsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCA0LCAyNDgsIAotICAgIDYyLCAxMSwgMzUsIDIzLCA0LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCAKLSAgICA3MSwgMTEsIDM1LCAyMywgNCwgMjE2LCAxODAsIDExLCAzNSwgMjMsIDQsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCA0LCAyMzQsIAotICAgIDIyOCwgMTEsIDM1LCAyMywgNCwgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDQsIDIzMCwgMTA3LCAxMSwgMzUsIDIzLCA0LCAKLSAgICAyMjcsIDI0MiwgMTEsIDM1LCAyMywgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDQsIDIyNiwgMjAzLCAxMSwgMzUsIDIzLCAKLSAgICA0LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgNCwgMjIzLCA0MCwgMTEsIDM1LCAyMywgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgNCwgMjE3LCA0MiwgMTEsIDM1LCAyMywgNCwgMjE0LCAxNTcsIDExLCAzNSwgCi0gICAgMjMsIDQsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCA0LCAyNTAsIDExOCwgMTEsIDM1LCAyMywgNCwgMjI0LCAxNjQsIDExLCAKLSAgICAzNSwgMjMsIDQsIDIyNiwgMjA1LCAxMSwgMzUsIDIzLCAyMjYsIDEsIDI0NywgMjQxLCAxMSwgMzUsIDIzLCAyNDUsIDEwOSwgCi0gICAgODcsIDExLCAzNSwgMjMsIDIxNiwgMTgxLCA4NywgMTEsIDM1LCAyMywgMjM0LCAyMjksIDg3LCAxMSwgMzUsIDIzLCAyMjUsIAotICAgIDEzNywgODcsIDExLCAzNSwgMjMsIDIyMywgNDEsIDg3LCAxMSwgMzUsIDIzLCAyMjUsIDExMiwgODcsIDExLCAzNSwgMjMsIAotICAgIDMyLCA2LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDMsIDExNCwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDYsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIAotICAgIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDcxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDExLCAKLSAgICAzNSwgMjMsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNCwgMjI4LCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNywgMjQyLCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDIyNSwgMTExLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIzLCA0MCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgxLCA4NywgCi0gICAgMTEsIDM1LCAyMywgMzIsIDYsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCA0MiwgMTEsIDM1LCAyMywgMzIsIAotICAgIDYsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTAsIDExOCwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDYsIDIyNCwgMTY0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDMyLCAKLSAgICAyMjksIDIyNiwgMTEsIDM1LCAyMywgMzIsIDQsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUyLCAzNCwgMTEsIAotICAgIDM1LCAyMywgMzIsIDQsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgMzIsIDQsIAotICAgIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNzEsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA0LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM0LCAKLSAgICAyMjgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMTA3LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNCwgMjI3LCAyNDIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgCi0gICAgMjAzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTcsIAotICAgIDQyLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCAxNjQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIAotICAgIDIwNSwgMTEsIDM1LCAyMywgMzIsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAzNSwgMjMsIDMyLCAyNDUsIDEwOSwgODcsIDExLCAKLSAgICAzNSwgMjMsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAzNSwgMjMsIDMyLCAyMzQsIDIyOSwgODcsIDExLCAzNSwgMjMsIDMyLCAKLSAgICAyMjUsIDEzNywgODcsIDExLCAzNSwgMjMsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDM1LCAyMywgMzIsIDIyNSwgMTEyLCA4NywgCi0gICAgMTEsIDIzLCA2LCAyNDcsIDIzNSwgMTEsIDIzLCA0LCAyNDcsIDIzNSwgMTEsIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDIzLCAKLSAgICAyMSwgMTExLCAxMSwgMjMsIDIxLCAxMDUsIDExLCAyMywgMjEsIDE1OCwgMTEsIDIzLCAyMSwgMTYxLCAxMSwgMjMsIDIxLCAKLSAgICAxOTAsIDExLCAyMywgMjEsIDE5NSwgMTEsIDIzLCAyMSwgMTk5LCAxMSwgMjMsIDIxLCAxOTYsIDExLCAyMywgMjEsIDIwMSwgCi0gICAgMTEsIDEzOSwgMjEsIDIxMCwgODYsIDExLCAxMzksIDIxLCAxMTEsIDExLCAxMzksIDIxLCAxMDUsIDExLCAxMzksIDIxLCAKLSAgICAxNTgsIDExLCAxMzksIDIxLCAxNjEsIDExLCAxMzksIDIxLCAxOTAsIDExLCAxMzksIDIxLCAxOTUsIDExLCAxMzksIDIxLCAKLSAgICAxOTksIDExLCAxMzksIDIxLCAxOTYsIDExLCAxMzksIDIxLCAyMDEsIDExLCAzNSwgMjEsIDIxMCwgODYsIDExLCAzNSwgMjEsIAotICAgIDExMSwgMTEsIDM1LCAyMSwgMTA1LCAxMSwgMzUsIDIxLCAxNTgsIDExLCAzNSwgMjEsIDE2MSwgMTEsIDM1LCAyMSwgMTkwLCAKLSAgICAxMSwgMzUsIDIxLCAxOTUsIDExLCAzNSwgMjEsIDE5OSwgMTEsIDM1LCAyMSwgMTk2LCAxMSwgMzUsIDIxLCAyMDEsIDExLCAKLSAgICAzNSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIzLCAyMSwgMTExLCAxMSwgMzUsIDIzLCAyMSwgMTA1LCAxMSwgMzUsIAotICAgIDIzLCAyMSwgMTU4LCAxMSwgMzUsIDIzLCAyMSwgMTYxLCAxMSwgMzUsIDIzLCAyMSwgMTkwLCAxMSwgMzUsIDIzLCAyMSwgCi0gICAgMTk1LCAxMSwgMzUsIDIzLCAyMSwgMTk5LCAxMSwgMzUsIDIzLCAyMSwgMTk2LCAxMSwgMzUsIDIzLCAyMSwgMjAxLCAxMSwgCi0gICAgMjMwLCAxNDMsIDIxLCAyMTAsIDg2LCAxMSwgMjMwLCAxNDMsIDIxLCAxMTEsIDExLCAyMzAsIDE0MywgMjEsIDEwNSwgMTEsIAotICAgIDIzMCwgMTQzLCAyMSwgMTU4LCAxMSwgMjMwLCAxNDMsIDIxLCAxNjEsIDExLCAyMzAsIDE0MywgMjEsIDE5MCwgMTEsIDIzMCwgCi0gICAgMTQzLCAyMSwgMTk1LCAxMSwgMjMwLCAxNDMsIDIxLCAxOTksIDExLCAyMzAsIDE0MywgMjEsIDE5NiwgMTEsIDIzMCwgMTQzLCAKLSAgICAyMSwgMjAxLCA5LCAxMSwgMjU0LCAxNzksIDksIDExLCAyNTIsIDYyLCA5LCAxMSwgMjM1LCAxMjksIDksIDExLCAyNDgsIAotICAgIDIwMywgOSwgMTEsIDIxMiwgMzAsIDksIDExLCAyMTAsIDEwOCwgOSwgMTEsIDI0MiwgNDQsIDksIDExLCAyMTcsIDgxLCA5LCAKLSAgICAxMSwgMjExLCA0MywgOSwgMTEsIDIzNSwgMCwgOSwgMTEsIDIzMywgMTA4LCA5LCAxMSwgMjMxLCA4MywgOSwgMTEsIDIyOCwgCi0gICAgNjcsIDksIDExLCAyMjEsIDE2OCwgOSwgMTEsIDI1NCwgMjA1LCA5LCAxMSwgMjQ0LCAxNTAsIDksIDExLCAyMjIsIDI4LCA5LCAKLSAgICAxMSwgMjI0LCA4NCwgOSwgMTEsIDIyMywgOTgsIDksIDExLCAyMjAsIDYxLCA5LCAxMSwgMjE3LCA4LCA5LCAxMSwgMjE2LCAKLSAgICAxOTMsIDksIDExLCAyMzQsIDEzNSwgOSwgMTEsIDIxNiwgMjAzLCA5LCAxMSwgMjQ4LCAyMjQsIDksIDExLCAyMTAsIDExMSwgCi0gICAgOSwgMTEsIDI0MiwgMjUxLCA5LCAxMSwgMjQ3LCAxMjcsIDI1MiwgNjIsIDksIDExLCAyNDcsIDEyNywgMjI4LCA2NywgOSwgCi0gICAgMTEsIDI0NywgMTI3LCAyNDQsIDE1MCwgOSwgMTEsIDI0NywgMTI3LCAyMjQsIDg0LCA5LCAxMSwgNjUsIDI1MiwgNjIsIDksIAotICAgIDExLCA2NSwgMjM1LCAxMjksIDksIDExLCA2NSwgMjQxLCAyMjUsIDksIDExLCA2NSwgMjQyLCA0NCwgOSwgMTEsIDY1LCAKLSAgICAyMTEsIDQzLCA5LCAxMSwgNjUsIDIzNSwgMCwgOSwgMTEsIDY1LCAyMzMsIDEwOCwgOSwgMTEsIDY1LCAyMzEsIDgzLCA5LCAKLSAgICAxMSwgNjUsIDIyOCwgNjcsIDksIDExLCA2NSwgMjIxLCAxNjgsIDksIDExLCA2NSwgMjU0LCAyMDUsIDksIDExLCA2NSwgCi0gICAgMjQ0LCAxNTAsIDksIDExLCA2NSwgMjIyLCAyOCwgOSwgMTEsIDY1LCAyMjQsIDg0LCA5LCAxMSwgNjUsIDIyMCwgNjEsIDksIAotICAgIDExLCA2NSwgMjE3LCA4LCA5LCAxMSwgNjUsIDIxNiwgMTkzLCA5LCAxMSwgNjUsIDIzNCwgMTM1LCA5LCAxMSwgNjUsIDI0OCwgCi0gICAgMjI0LCA5LCAxMSwgNjUsIDI0MiwgMjUxLCA5LCAxMSwgMjE3LCA3NywgMjM1LCAxMjksIDksIDExLCAyMTcsIDc3LCAyNDIsIAotICAgIDQ0LCA5LCAxMSwgMjE3LCA3NywgMjExLCA0MywgOSwgMTEsIDIxNywgNzcsIDIzMywgMTA4LCA5LCAxMSwgMjE3LCA3NywgCi0gICAgMjI4LCA2NywgOSwgMTEsIDIxNywgNzcsIDIyMSwgMTY4LCA5LCAxMSwgMjE3LCA3NywgMjU0LCAyMDUsIDksIDExLCAyMTcsIAotICAgIDc3LCAyMjIsIDI4LCA5LCAxMSwgMjE3LCA3NywgMjI0LCA4NCwgOSwgMTEsIDIxNywgNzcsIDIyMCwgNjEsIDksIDExLCAKLSAgICAyMTcsIDc3LCAyMzQsIDEzNSwgOSwgMTEsIDIxNywgNzcsIDI0OCwgMjI0LCA5LCAxMSwgMjE3LCA3NywgMjQyLCAyNTEsIDksIAotICAgIDExLCAyMTcsIDc3LCAyNDcsIDEyNywgMjI4LCA2NywgOSwgMTEsIDIxNywgNzcsIDI0NywgMTI3LCAyMjQsIDg0LCA5LCAxMSwgCi0gICAgMjE4LCAxMTIsIDI1MiwgNjIsIDksIDExLCAyMTgsIDExMiwgMjM1LCAxMjksIDksIDExLCAyMTgsIDExMiwgMjQxLCAyMjUsIAotICAgIDksIDExLCAyMTgsIDExMiwgMjQyLCA0NCwgOSwgMTEsIDIxOCwgMTEyLCAyMTcsIDgxLCA5LCAxMSwgMjE4LCAxMTIsIDIxMSwgCi0gICAgNDMsIDksIDExLCAyMTgsIDExMiwgMjM1LCAwLCA5LCAxMSwgMjE4LCAxMTIsIDIzMSwgODMsIDksIDExLCAyMTgsIDExMiwgCi0gICAgMjI4LCA2NywgOSwgMTEsIDIxOCwgMTEyLCAyMjEsIDE2OCwgOSwgMTEsIDIxOCwgMTEyLCAyNTQsIDIwNSwgOSwgMTEsIAotICAgIDIxOCwgMTEyLCAyNDQsIDE1MCwgOSwgMTEsIDIxOCwgMTEyLCAyMjIsIDI4LCA5LCAxMSwgMjE4LCAxMTIsIDIyNCwgODQsIAotICAgIDksIDExLCAyMTgsIDExMiwgMjIwLCA2MSwgOSwgMTEsIDIxOCwgMTEyLCAyMTcsIDgsIDksIDExLCAyMTgsIDExMiwgMjE2LCAKLSAgICAxOTMsIDksIDExLCAyMTgsIDExMiwgMjM0LCAxMzUsIDksIDExLCAyMTgsIDExMiwgMjQ4LCAyMjQsIDksIDExLCAyMTgsIAotICAgIDExMiwgMjEwLCAxMTEsIDksIDExLCAyMTgsIDExMiwgMjQyLCAyNTEsIDksIDExLCAyMTgsIDExMiwgMjQ3LCAxMjcsIDI1MiwgCi0gICAgNjIsIDksIDExLCAyMTgsIDExMiwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxMSwgMjMyLCAxMjgsIDI1NCwgMTc5LCA5LCAKLSAgICAxMSwgMjMyLCAxMjgsIDI1MiwgNjIsIDksIDExLCAyMzIsIDEyOCwgMjM1LCAxMjksIDksIDExLCAyMzIsIDEyOCwgMjQ4LCAKLSAgICAyMDMsIDksIDExLCAyMzIsIDEyOCwgMjQxLCAyMjUsIDksIDExLCAyMzIsIDEyOCwgMjEyLCAzMCwgOSwgMTEsIDIzMiwgCi0gICAgMTI4LCAyMTAsIDEwOCwgOSwgMTEsIDIzMiwgMTI4LCAyNDIsIDQ0LCA5LCAxMSwgMjMyLCAxMjgsIDIxNywgODEsIDksIDExLCAKLSAgICAyMzIsIDEyOCwgMjExLCA0MywgOSwgMTEsIDIzMiwgMTI4LCAyMzMsIDEwOCwgOSwgMTEsIDIzMiwgMTI4LCAyMzEsIDgzLCAKLSAgICA5LCAxMSwgMjMyLCAxMjgsIDIyOCwgNjcsIDksIDExLCAyMzIsIDEyOCwgMjIxLCAxNjgsIDksIDExLCAyMzIsIDEyOCwgCi0gICAgMjU0LCAyMDUsIDksIDExLCAyMzIsIDEyOCwgMjQ0LCAxNTAsIDksIDExLCAyMzIsIDEyOCwgMjIyLCAyOCwgOSwgMTEsIAotICAgIDIzMiwgMTI4LCAyMjQsIDg0LCA5LCAxMSwgMjMyLCAxMjgsIDIyMywgOTgsIDksIDExLCAyMzIsIDEyOCwgMjIwLCA2MSwgOSwgCi0gICAgMTEsIDIzMiwgMTI4LCAyMTcsIDgsIDksIDExLCAyMzIsIDEyOCwgMjE2LCAxOTMsIDksIDExLCAyMzIsIDEyOCwgMjM0LCAKLSAgICAxMzUsIDksIDExLCAyMzIsIDEyOCwgMjE2LCAyMDMsIDksIDExLCAyMzIsIDEyOCwgMjQ4LCAyMjQsIDksIDExLCAyMzIsIAotICAgIDEyOCwgMjEwLCAxMTEsIDksIDExLCAyMzIsIDEyOCwgMjQyLCAyNTEsIDksIDExLCAxMzksIDI1MiwgNjIsIDksIDExLCAKLSAgICAxMzksIDIzNSwgMTI5LCA5LCAxMSwgMTM5LCAyNDgsIDIwMywgOSwgMTEsIDEzOSwgMjEyLCAzMCwgOSwgMTEsIDEzOSwgCi0gICAgMjEwLCAxMDgsIDksIDExLCAxMzksIDI0MiwgNDQsIDksIDExLCAxMzksIDIxNywgODEsIDksIDExLCAxMzksIDIxMSwgNDMsIAotICAgIDksIDExLCAxMzksIDIzMywgMTA4LCA5LCAxMSwgMTM5LCAyMzEsIDgzLCA5LCAxMSwgMTM5LCAyMjgsIDY3LCA5LCAxMSwgCi0gICAgMTM5LCAyMjEsIDE2OCwgOSwgMTEsIDEzOSwgMjU0LCAyMDUsIDksIDExLCAxMzksIDI0NCwgMTUwLCA5LCAxMSwgMTM5LCAKLSAgICAyMjIsIDI4LCA5LCAxMSwgMTM5LCAyMjQsIDg0LCA5LCAxMSwgMTM5LCAyMjMsIDk4LCA5LCAxMSwgMTM5LCAyMjAsIDYxLCAKLSAgICA5LCAxMSwgMTM5LCAyMTcsIDgsIDksIDExLCAxMzksIDIxNiwgMTkzLCA5LCAxMSwgMTM5LCAyMzQsIDEzNSwgOSwgMTEsIAotICAgIDEzOSwgMjE2LCAyMDMsIDksIDExLCAxMzksIDI0OCwgMjI0LCA5LCAxMSwgMTM5LCAyMTAsIDExMSwgOSwgMTEsIDEzOSwgCi0gICAgMjQyLCAyNTEsIDksIDExLCAyMjYsIDE3MiwgNjYsIDIsIDEyMiwgMiwgMjE3LCA0NCwgOSwgMTEsIDIyNiwgMTcyLCAxMjIsIAotICAgIDIsIDI0OCwgMjAzLCAyMzEsIDIxMCwgODYsIDI0NSwgMjI4LCAyMTEsIDIzOSwgMjMxLCAyMTAsIDg2LCAyMTksIDMwLCAKLSAgICAyMTEsIDIzOSwgMjMxLCAyMTAsIDg2LCAyMTIsIDksIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIyOCwgNjEsIDIxMSwgCi0gICAgMjM5LCAyMzEsIDIxMCwgODYsIDIyMywgMTE0LCAyNDYsIDEwNCwgMjMxLCAyMTAsIDg2LCAyNDIsIDEzNCwgMjQ2LCAxMDQsIAotICAgIDIzMSwgMjEwLCA4NiwgNzEsIDI0NiwgMTA0LCAyMzEsIDIxMCwgODYsIDEyMywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgCi0gICAgODYsIDExMywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDEzNCwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIAotICAgIDI0NCwgMTksIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyNDQsIDg5LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgCi0gICAgMjE5LCAxMjcsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyMjAsIDEyNCwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgCi0gICAgODYsIDI0NSwgMjAxLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTAsIDE0OSwgMjMxLCAKLSAgICAyMTAsIDg2LCAxMjMsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAxMTMsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIAotICAgIDg2LCAxMzQsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAyNDQsIDE5LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgCi0gICAgMjQ0LCA4OSwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDIxOSwgMTI3LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCAKLSAgICA4NiwgMjIwLCAxMjQsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAyNDUsIDIwMSwgNjQsIDI1MiwgMTYxLCAyMzEsIAotICAgIDIxMCwgODYsIDIyOCwgMjA1LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMTIzLCA2NCwgMjUwLCA0MiwgMjMxLCAKLSAgICAyMTAsIDg2LCAxMTMsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDEzNCwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCi0gICAgMjQ0LCAxOSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjQ0LCA4OSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCi0gICAgMjE5LCAxMjcsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDIyMCwgMTI0LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKLSAgICAyNDUsIDIwMSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAotICAgIDIyNSwgMjgsIDIzMSwgMjEwLCA4NiwgMjI2LCAxNjAsIDIzMSwgMjEwLCA4NiwgMjUyLCAxNjIsIDIzMSwgMjEwLCA4NiwgCi0gICAgMjUwLCA3OCwgMjMxLCAyMTAsIDg2LCAyMTgsIDI0MSwgMjMxLCAyMTAsIDg2LCAyMTgsIDQwLCAyMzEsIDIxMCwgODYsIAotICAgIDI1MywgMTg3LCAyMzEsIDIxMCwgODYsIDIxMSwgMjMyLCAyMzEsIDIxMCwgODYsIDIzNSwgNjgsIDIzMSwgMjEwLCA4NiwgCi0gICAgMjUyLCAxOTIsIDEzMSwgODYsIDIwMywgMjUyLCAxOTIsIDEzMSwgODYsIDI0MSwgNTAsIDEzMSwgODYsIDI0MSwgNDksIAotICAgIDEzMSwgODYsIDI0MSwgNDgsIDEzMSwgODYsIDI0MSwgNDcsIDEzMSwgODYsIDI0MSwgNDYsIDEzMSwgODYsIDI0MSwgNDUsIAotICAgIDEzMSwgODYsIDI0MSwgNDQsIDEzMSwgODYsIDI0MSwgNDMsIDEzMSwgODYsIDI0MSwgNDIsIDEzMSwgODYsIDI0MSwgNDEsIAotICAgIDEzMSwgODYsIDI0MSwgNDAsIDEzMSwgODYsIDI0MSwgMzksIDEzMSwgODYsIDI0MSwgMzgsIDEzMSwgODYsIDI0MSwgMzcsIAotICAgIDEzMSwgODYsIDI0MSwgMzYsIDEzMSwgODYsIDI0MSwgMzUsIDEzMSwgODYsIDI0MSwgMzQsIDEzMSwgODYsIDI0MSwgMzMsIAotICAgIDEzMSwgODYsIDI0MSwgMzIsIDEzMSwgODYsIDI0MSwgMzEsIDEzMSwgODYsIDI0MSwgMzAsIDEzMSwgODYsIDI0MSwgMjksIAotICAgIDEzMSwgODYsIDI0MSwgMjgsIDEzMSwgODYsIDI0MSwgMjcsIDEzMSwgODYsIDI0MSwgMjYsIDEzMSwgODYsIDI0MSwgMjUsIAotICAgIDEzMSwgODYsIDI0MSwgMjQsIDEzMSwgODYsIDI0MSwgMjMsIDEzMSwgODYsIDI0MSwgMjIsIDEzMSwgODYsIDI0MSwgMjEsIAotICAgIDEzMSwgODYsIDI0MSwgMjAsIDEzMSwgODYsIDI0MSwgMTksIDEzMSwgODYsIDI0MSwgMTgsIDEzMSwgODYsIDI0MSwgMTcsIAotICAgIDEzMSwgODYsIDI0MSwgMTYsIDEzMSwgODYsIDI0MSwgMTUsIDEzMSwgODYsIDI0MSwgMTQsIDEzMSwgODYsIDI0MSwgMTMsIAotICAgIDEzMSwgODYsIDI0MSwgMTIsIDEzMSwgODYsIDI0MSwgMTEsIDEzMSwgODYsIDI0MSwgMTAsIDEzMSwgODYsIDI0MSwgOSwgCi0gICAgMTMxLCA4NiwgMjQxLCA4LCAxMzEsIDg2LCAyNDEsIDcsIDEzMSwgODYsIDI0MSwgNiwgMTMxLCA4NiwgMjQxLCA1LCAxMzEsIAotICAgIDg2LCAyNDEsIDQsIDEzMSwgODYsIDI0MSwgMywgMTMxLCA4NiwgMjQxLCAyLCAxMzEsIDg2LCA2NywgMjUyLCAxOTIsIDEzMSwgCi0gICAgODYsIDIxMywgMjM4LCAxMzEsIDg2LCAyMTMsIDIzNywgMTMxLCA4NiwgMjEzLCAyMzYsIDEzMSwgODYsIDIxMywgMjM1LCAKLSAgICAxMzEsIDg2LCAyMTMsIDIzNCwgMTMxLCA4NiwgMjEzLCAyMzMsIDEzMSwgODYsIDIxMywgMjMyLCAxMzEsIDg2LCAyMTMsIAotICAgIDIzMSwgMTMxLCA4NiwgMjEzLCAyMzAsIDEzMSwgODYsIDIxMywgMjI5LCAxMzEsIDg2LCAyMTMsIDIyOCwgMTMxLCA4NiwgCi0gICAgMjEzLCAyMjcsIDEzMSwgODYsIDIxMywgMjI2LCAxMzEsIDg2LCAyMTMsIDIyNSwgMTMxLCA4NiwgMjEzLCAyMjQsIDEzMSwgCi0gICAgODYsIDIxMywgMjIzLCAxMzEsIDg2LCAyMTMsIDIyMiwgMTMxLCA4NiwgMjEzLCAyMjEsIDEzMSwgODYsIDIxMywgMjIwLCAKLSAgICAxMzEsIDg2LCAyMTMsIDIxOSwgMTMxLCA4NiwgMjEzLCAyMTgsIDEzMSwgODYsIDIxMywgMjE3LCAxMzEsIDg2LCAyMTMsIAotICAgIDIxNiwgMTMxLCA4NiwgMjEzLCAyMTUsIDEzMSwgODYsIDIxMywgMjE0LCAxMzEsIDg2LCAyMTMsIDIxMywgMTMxLCA4NiwgCi0gICAgMjEzLCAyMTIsIDEzMSwgODYsIDIxMywgMjExLCAxMzEsIDg2LCAyMTMsIDIxMCwgMTMxLCA4NiwgMjEzLCAyMDksIDEzMSwgCi0gICAgODYsIDIxMywgMjA4LCAxMzEsIDg2LCAyMTMsIDIwNywgMTMxLCA4NiwgMjEzLCAyMDYsIDEzMSwgODYsIDIxMywgMjA1LCAKLSAgICAxMzEsIDg2LCAyMTMsIDIwNCwgMTMxLCA4NiwgMjEzLCAyMDMsIDEzMSwgODYsIDIxMywgMjAyLCAxMzEsIDg2LCAyMTMsIAotICAgIDIwMSwgMTMxLCA4NiwgMjEzLCAyMDAsIDEzMSwgODYsIDIxMywgMTk5LCAxMzEsIDg2LCAyMTMsIDE5OCwgMTMxLCA4NiwgCi0gICAgMjEzLCAxOTcsIDEzMSwgODYsIDIxMywgMTk2LCAxMzEsIDg2LCAyMTMsIDE5NSwgMTMxLCA4NiwgMjEzLCAxOTQsIDEzMSwgCi0gICAgODYsIDIxMywgMTkzLCAxMzEsIDg2LCAyMTMsIDE5MiwgMTMxLCA4NiwgMjEzLCAxOTEsIDEzMSwgODYsIDIxMywgMTkwLCAKLSAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjUyLCAxOTIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjE5LCAxNywgCi0gICAgMjI1LCAzNiwgMjUwLCAyNTEsIDExMywgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyMTksIDE3LCAKLSAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAxOSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgCi0gICAgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIAotICAgIDIyMCwgMTI0LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgCi0gICAgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgMjQ5LCA2NCwgMjE5LCAKLSAgICAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgMzcsIAotICAgIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAKLSAgICAyMzQsIDg1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgCi0gICAgMjUwLCAyNTEsIDExMywgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQxLCAyMzIsIDIyNSwgCi0gICAgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgMjQxLCAKLSAgICAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjIwLCAKLSAgICAxMjQsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIAotICAgIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyNDEsIAotICAgIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIAotICAgIDM3LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgCi0gICAgMjUxLCAyMzQsIDg1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjQ3LCAyNTUsIAotICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAxMTMsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDI0NywgCi0gICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAxOSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAKLSAgICA4OSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgCi0gICAgMjUwLCAyNTEsIDIyMCwgMTI0LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDI0NywgCi0gICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgCi0gICAgMjQ5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAKLSAgICAyNTAsIDI1MSwgMjM0LCAzNywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDI0NywgCi0gICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCA4NSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgODUsIAotICAgIDIzNSwgNjgsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAKLSAgICAxMTMsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAotICAgIDI1MSwgMjQ0LCAxOSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCA4OSwgNjQsIDI0OSwgMjUwLCAKLSAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyMCwgMTI0LCAKLSAgICA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAotICAgIDI1MSwgMjI4LCAyMDUsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgMjQ5LCA2NCwgMjQ5LCAyNTAsIAotICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAzNywgCi0gICAgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAotICAgIDI1MSwgMjM0LCA4NSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgNzEsIDIzNSwgNjgsIDIxLCAyMTAsIDg3LCAKLSAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyMTAsIDg3LCAyNDksIDIyNywgMjEsIDEyMywgMjQ5LCAyMjcsIDIxLCAxMTMsIAotICAgIDI0OSwgMjI3LCAyMSwgMTM0LCAyNDksIDIyNywgMjEsIDI0NCwgMTksIDI0OSwgMjI3LCAyMSwgMjQ0LCA4OSwgMjQ5LCAKLSAgICAyMjcsIDIxLCAyMTksIDEyNywgMjQ5LCAyMjcsIDIxLCAyMjAsIDEyNCwgMjQ5LCAyMjcsIDIxLCAyNDUsIDIwMSwgMjQ5LCAKLSAgICAyMjcsIDIxLCAyMjgsIDIwNSwgMjQ5LCAyMjcsIDg4LCA3LCA2LCAxLCA2MSwgODgsIDcsIDYsIDEsIDI1MywgMTY2LCA4OCwgCi0gICAgNywgNiwgMSwgMjUxLCA3NCwgODgsIDcsIDYsIDEsIDI0OSwgNjgsIDg4LCA3LCA2LCAxLCA3NiwgODgsIDcsIDYsIDEsIAotICAgIDI0NSwgMTQsIDg4LCA3LCA2LCAxLCAyNDMsIDIwOSwgODgsIDcsIDYsIDEsIDI0MiwgNjcsIDg4LCA3LCA2LCAxLCA3NCwgCi0gICAgODgsIDcsIDYsIDEsIDIzNSwgMTUwLCA4OCwgNywgNiwgMSwgMjM1LCAyOSwgODgsIDcsIDYsIDEsIDE1NiwgODgsIDcsIDYsIAotICAgIDEsIDE5NCwgODgsIDcsIDYsIDEsIDIzMCwgMzAsIDg4LCA3LCA2LCAxLCA3OCwgODgsIDcsIDYsIDEsIDIyNiwgMTA5LCA4OCwgCi0gICAgNywgNiwgMSwgMjI0LCA5OSwgODgsIDcsIDYsIDEsIDE1MywgODgsIDcsIDYsIDEsIDIyMiwgOTMsIDg4LCA3LCA2LCAxLCAKLSAgICAyMTcsIDE1MywgODgsIDcsIDYsIDEsIDY5LCA4OCwgNywgNiwgMSwgMjE0LCAxMDUsIDg4LCA3LCA2LCAxLCAyMTIsIDk4LCAKLSAgICA4OCwgNywgNiwgMSwgMjExLCAxNzgsIDg4LCA3LCA2LCAxLCAyMTEsIDExNywgODgsIDcsIDYsIDEsIDIxMCwgMTU5LCAyMTYsIAotICAgIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCA3LCA2LCAxLCAyMjIsIDkzLCAzNywgMzIsIDcsIDYsIDEsIDI1MSwgNzQsIDM3LCAzMiwgCi0gICAgNywgNiwgMSwgMTUzLCAzNywgMjUwLCAxOTksIDM3LCAyMTEsIDE4MCwgOTIsIDcsIDYsIDEsIDYxLCA5MiwgNywgNiwgMSwgCi0gICAgMjUzLCAxNjYsIDkyLCA3LCA2LCAxLCAyNTEsIDc0LCA5MiwgNywgNiwgMSwgMjQ5LCA2OCwgOTIsIDcsIDYsIDEsIDc2LCAKLSAgICA5MiwgNywgNiwgMSwgMjQ1LCAxNCwgOTIsIDcsIDYsIDEsIDI0MywgMjA5LCA5MiwgNywgNiwgMSwgMjQyLCA2NywgOTIsIDcsIAotICAgIDYsIDEsIDc0LCA5MiwgNywgNiwgMSwgMjM1LCAxNTAsIDkyLCA3LCA2LCAxLCAyMzUsIDI5LCA5MiwgNywgNiwgMSwgMTU2LCAKLSAgICA5MiwgNywgNiwgMSwgMTk0LCA5MiwgNywgNiwgMSwgMjMwLCAzMCwgOTIsIDcsIDYsIDEsIDc4LCA5MiwgNywgNiwgMSwgCi0gICAgMjI2LCAxMDksIDkyLCA3LCA2LCAxLCAyMjQsIDk5LCA5MiwgNywgNiwgMSwgMTUzLCA5MiwgNywgNiwgMSwgMjIyLCA5MywgCi0gICAgOTIsIDcsIDYsIDEsIDIxNywgMTUzLCA5MiwgNywgNiwgMSwgNjksIDkyLCA3LCA2LCAxLCAyMTQsIDEwNSwgOTIsIDcsIDYsIAotICAgIDEsIDIxMiwgOTgsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCA5MiwgNywgNiwgMSwgCi0gICAgMjEwLCAxNTksIDkyLCAyNDAsIDIwOCwgOTIsIDIzMCwgNTQsIDkyLCAyMjEsIDE4NSwgOTIsIDIxOCwgMjI4LCA5MiwgMjI0LCAKLSAgICAyMjEsIDkyLCAyMTIsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCA2MSwgMTUyLCAzNywgNywgNiwgMSwgMjUzLCAxNjYsIDE1MiwgCi0gICAgMzcsIDcsIDYsIDEsIDI1MSwgNzQsIDE1MiwgMzcsIDcsIDYsIDEsIDI0OSwgNjgsIDE1MiwgMzcsIDcsIDYsIDEsIDc2LCAKLSAgICAxNTIsIDM3LCA3LCA2LCAxLCAyNDUsIDE0LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDMsIDIwOSwgMTUyLCAzNywgNywgNiwgMSwgCi0gICAgMjQyLCA2NywgMTUyLCAzNywgNywgNiwgMSwgNzQsIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMTUwLCAxNTIsIDM3LCA3LCA2LCAKLSAgICAxLCAyMzUsIDI5LCAxNTIsIDM3LCA3LCA2LCAxLCAxNTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE5NCwgMTUyLCAzNywgNywgNiwgCi0gICAgMSwgMjMwLCAzMCwgMTUyLCAzNywgNywgNiwgMSwgNzgsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIDM3LCA3LCAKLSAgICA2LCAxLCAyMjQsIDk5LCAxNTIsIDM3LCA3LCA2LCAxLCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIDIyMiwgOTMsIDE1MiwgMzcsIAotICAgIDcsIDYsIDEsIDIxNywgMTUzLCAxNTIsIDM3LCA3LCA2LCAxLCA2OSwgMTUyLCAzNywgNywgNiwgMSwgMjE0LCAxMDUsIDE1MiwgCi0gICAgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTEsIAotICAgIDExNywgMTUyLCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDIyMywgMTYwLCAyMzEsIDEwMiwgNTAsIDIyMywgMTYwLCAyMzEsIAotICAgIDk5LCA1MCwgMTUyLCA5MiwgNywgNiwgMSwgNjEsIDE1MiwgOTIsIDcsIDYsIDEsIDI1MywgMTY2LCAxNTIsIDkyLCA3LCA2LCAKLSAgICAxLCAyNTEsIDc0LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDksIDY4LCAxNTIsIDkyLCA3LCA2LCAxLCA3NiwgMTUyLCA5MiwgNywgCi0gICAgNiwgMSwgMjQ1LCAxNCwgMTUyLCA5MiwgNywgNiwgMSwgMjQzLCAyMDksIDE1MiwgOTIsIDcsIDYsIDEsIDI0MiwgNjcsIAotICAgIDE1MiwgOTIsIDcsIDYsIDEsIDc0LCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIDE1MCwgMTUyLCA5MiwgNywgNiwgMSwgMjM1LCAKLSAgICAyOSwgMTUyLCA5MiwgNywgNiwgMSwgMTU2LCAxNTIsIDkyLCA3LCA2LCAxLCAxOTQsIDE1MiwgOTIsIDcsIDYsIDEsIDIzMCwgCi0gICAgMzAsIDE1MiwgOTIsIDcsIDYsIDEsIDc4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCA5MiwgNywgNiwgMSwgCi0gICAgMjI0LCA5OSwgMTUyLCA5MiwgNywgNiwgMSwgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCAyMjIsIDkzLCAxNTIsIDkyLCA3LCA2LCAKLSAgICAxLCAyMTcsIDE1MywgMTUyLCA5MiwgNywgNiwgMSwgNjksIDE1MiwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCAxNTIsIDkyLCAKLSAgICA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIAotICAgIDE1MiwgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCAyNDksIDEzNiwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgCi0gICAgOTIsIDI0MCwgMTIwLCAxNTIsIDkyLCAxOTEsIDE1MiwgOTIsIDIwNiwgMTUyLCA5MiwgMjU1LCAzNCwgMTUyLCA5MiwgMjEyLCAKLSAgICAyMywgNDIsIDI0NywgMTcyLCA5MiwgMjUwLCAzMSwgOTIsIDI0OSwgMTc4LCA5MiwgMjQ0LCA0LCA5MiwgMjQwLCAxMTIsIAotICAgIDkyLCAyMjksIDkxLCA5MiwgMjI5LCA4NCwgOTIsIDIyNiwgMjE4LCA5MiwgMjE5LCAzNywgOTIsIDEyMCwgMiwgMjQ1LCAzOSwgCi0gICAgNzksIDkyLCAyMTMsIDExOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNjEsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIAotICAgIDEsIDI1MywgMTY2LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyNTEsIDc0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAKLSAgICAxLCAyNDksIDY4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA3NiwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgCi0gICAgMjQ1LCAxNCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjQzLCAyMDksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIAotICAgIDI0MiwgNjcsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzUsIAotICAgIDE1MCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjM1LCAyOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMTU2LCAKLSAgICAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxOTQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzMCwgMzAsIDIyMywgCi0gICAgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMjYsIDEwOSwgMjIzLCAxMDYsIAotICAgIDIzNSwgMjQ2LCAxNiwgMSwgMjI0LCA5OSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMTUzLCAyMjMsIDEwNiwgMjM1LCAKLSAgICAyNDYsIDE2LCAxLCAyMjIsIDkzLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTcsIDE1MywgMjIzLCAxMDYsIDIzNSwgCi0gICAgMjQ2LCAxNiwgMSwgNjksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxNCwgMTA1LCAyMjMsIDEwNiwgMjM1LCAyNDYsIAotICAgIDE2LCAxLCAyMTIsIDk4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTEsIDE3OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAKLSAgICAxNiwgMSwgMjExLCAxMTcsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxMCwgMTU5LCA0MiwgMTQxLCAyNDEsIDcwLCAKLSAgICA5MiwgNTYsIDIzNCwgMjQsIDkyLCA1NiwgMjA2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDU3LCA5MiwgMTAsIDIxNCwgCi0gICAgMTc3LCAyMzgsIDYxLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY5LCA5MiwgNTYsIDI0OCwgOTgsIDkyLCAxMCwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNzYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzUsIDkyLCAKLSAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNjIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCi0gICAgNDksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTEsIDkyLCAxMCwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNzIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzQsIDkyLCAKLSAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTAsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCi0gICAgMzYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzQsIDkyLCAxMCwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNjQsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDQsIDkyLCAKLSAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCi0gICAgNzksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzIsIDkyLCAxMCwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNTksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzcsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjgsIDkyLCAKLSAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTQsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCi0gICAgNTYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzcsIDkyLCAxMCwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNjcsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDcsIDkyLCAKLSAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNDgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDAsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCi0gICAgNzEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjUsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgCi0gICAgMjM4LCA0NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDc4LCAyMTYsIDcsIDIyMCwgCi0gICAgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzYsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIAotICAgIDE3NywgMjM4LCA2MCwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDQzLCAyMTYsIDcsIAotICAgIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNTYsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAKLSAgICAyMTQsIDE3NywgMjM4LCAzOSwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDcwLCAyMTYsIAotICAgIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNTIsIDM3LCAxNTQsIDI1NCwgMjU0LCAzNywgMTU0LCAKLSAgICAyNTUsIDIxLCAyNDksIDc5LCAyNDQsIDUwLCAyNTAsIDgsIDIxNCwgMTk0LCAyMjgsIDIxOCwgMiwgMjE4LCAxNTUsIDIxOCwgCi0gICAgMzQsIDExNSwgMjMwLCAxMTksIDIxOCwgMzMsIDI1MCwgMzQsIDI1MywgMjE1LCAyNDYsIDYyLCAyMTgsIDMyLCAxMTUsIAotICAgIDI1MSwgMTI2LCAyMjMsIDE2MSwgMjUxLCAxNDgsIDI1MywgMjE1LCAyMjgsIDIxNywgMjEyLCA0MSwgMjEyLCAzNSwgMjEzLCAKLSAgICAxMzEsIDIzMCwgMjAwLCAyMTIsIDI1LCAyNDUsIDIzMiwgMjQyLCAxODgsIDI0NSwgNTMsIDI0NSwgMjMyLCAyNDIsIDE4OCwgCi0gICAgMjU0LCAxMzYsIDI0NSwgMjMyLCAyNDIsIDE4OCwgMjUzLCAyMzMsIDI0MiwgMTg4LCAyLCAyMzEsIDU2LCAxNjYsIDIzMCwgCi0gICAgMTM0LCA4NywgMjEyLCAyNywgMjQ5LCAxNDUsIDIzMCwgMTM0LCA4NywgMjQ0LCAxMDAsIDIyNCwgMjUsIDIzMCwgMTM0LCAKLSAgICA4NywgMjEyLCAyNywgMjQyLCAyMTcsIDIzMCwgMTM0LCA4NywgMjQzLCAyMzYsIDIzMCwgMTM0LCA4NywgMjEyLCA1MiwgCi0gICAgMjQyLCAyMTcsIDIzMCwgMTM0LCA4NywgMjMzLCA4NiwgMjI0LCAyNSwgMjMwLCAxMzQsIDg3LCAyMTIsIDUyLCAyNDksIAotICAgIDE0NSwgMjMwLCAxMzQsIDg3LCAyNDksIDE0NSwgMjMwLCAxMzMsIDE2NiwgMjMwLCAxMzQsIDIsIDI0NCwgMTk4LCAyNDQsIAotICAgIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzQsIDIsIDI0NCwgMTk4LCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzNCwgMiwgMjQ0LCAKLSAgICAxOTgsIDI0MywgMjM2LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDIxOCwgMzksIDIsIDI0NCwgMTk4LCAyNDIsIDE4NiwgCi0gICAgMjE4LCAxNTgsIDIyMCwgMSwgMjE4LCAxNTgsIDI1MCwgMTI0LCAyMjEsIDE3MCwgMjQ1LCA0NywgMjE1LCAyMzYsIDI0OCwgCi0gICAgOTIsIDIxNSwgMjM2LCAyMjYsIDYzLCAyMTUsIDIzNiwgMjUxLCAzNSwgMjE1LCAxMTAsIDI1MCwgMTI2LCAyNTEsIDIxOCwgCi0gICAgMjIyLCAxOTMsIDI0MSwgMTg2LCAyMTgsIDM3LCAyNTEsIDIxOCwgMjQ1LCAyMzYsIDY0LCAyMzEsIDE5OSwgMjQ1LCAyMzYsIAotICAgIDY0LCAyMjMsIDM0LCAyNDEsIDIxMSwgMjQ0LCAxOSwgMjMzLCA2MCwgMjQ5LCAyNTQsIDIzMSwgMTc1LCAyMzMsIDU5LCAKLSAgICAyNDQsIDE4NCwgMjMzLCA1OSwgMjMzLCA2MCwgMjQ0LCA1NSwgMjM2LCA3LCAyMTEsIDIzOSwgMjMwLCA2MywgMjE2LCAzNSwgCi0gICAgMjUzLCAxOTksIDI0MiwgMTUwLCAyMzEsIDcyLCAyMTIsIDM5LCAyMTcsIDU4LCAyMzMsIDMyLCAyNTIsIDE1NywgMjI1LCAKLSAgICA2NSwgMjIzLCAxMTQsIDI1NCwgNjIsIDI0MiwgMTM0LCAyNTQsIDYyLCAyMjUsIDIyMCwgMjI1LCAyMjEsIDI1MCwgMTI3LCAKLSAgICAyMTgsIDExNiwgMjQyLCAzMCwgMjE5LCA5MiwgNjQsIDIyNSwgNDcsIDIzMSwgOTIsIDIyNiwgMjAxLCAyNTEsIDIwMiwgCi0gICAgMjI0LCAyMzIsIDIzMywgNDIsIDIyMywgMzUsIDI0OSwgMTUwLCAyMjMsIDM1LCAyNTIsIDE2NywgMjQ5LCAxODEsIDIyMywgCi0gICAgMzQsIDI0OSwgMTAzLCAyMiwgMjIzLCAzNCwgMjE4LCAxNDMsIDI1MSwgMTc1LCAyMTksIDE2LCAyNTEsIDE1OSwgMjQ0LCAzLCAKLSAgICAyNDMsIDI1NSwgMjIyLCAyMDksIDIxNywgMjQ3LCAyMjQsIDIzNCwgMjQ4LCAxODMsIDIyNiwgMjQwLCAyMTgsIDgsIDI0NCwgCi0gICAgMCwgMjE5LCAyMzIsIDI0NCwgOTksIDI1MSwgMjksIDIsIDIxNywgMjQwLCAyNDgsIDQzLCAyMTksIDU0LCAyNDAsIDExOSwgCi0gICAgMjQ5LCAxNDksIDIyMCwgNzIsIDI0MCwgMTE4LCAyNDAsIDExOSwgMjQ5LCAxNDksIDI0NiwgMTE2LCAyNDksIDE4MCwgMjUwLCAKLSAgICA5MiwgMTMwLCAyNTEsIDYsIDIzMiwgMTQ3LCAyNDksIDk2LCAyNDEsIDYyLCAyMjQsIDIzNiwgMjE5LCAyNDIsIDI1MiwgNDQsIAotICAgIDI1MSwgMTcxLCAyMjQsIDIzNywgNjQsIDI0NCwgNDEsIDI0OSwgMTc5LCAyNDQsIDMyLCAyMiwgMjM0LCAzOCwgMjE3LCAyMCwgCi0gICAgMjExLCAyMzAsIDI0MiwgMjAsIDIyMiwgMTQsIDI1MSwgMTg1LCAyMiwgMjQ5LCAxMTAsIDIxMSwgMjM3LCAyNDIsIDE5MSwgCi0gICAgMjQ5LCAyNDMsIDI0MiwgMTkxLCAyMTUsIDE5NCwgMjQ2LCA5OCwgMjUyLCA3MCwgMjMwLCA5OCwgMjUwLCAxNSwgMjUyLCAKLSAgICA3MCwgMjMwLCA5NywgMjUyLCAxOTUsIDI1MSwgMTg0LCAyMjMsIDM2LCAyMTEsIDIwMSwgMjI0LCAxOTgsIDI1MSwgMjQzLCAKLSAgICAyNTEsIDI4LCAyMzUsIDE0NCwgMjUwLCA4NSwgMjE1LCAyMzYsIDI0NCwgMTcwLCAyNTAsIDg0LCAyNDQsIDEwMiwgMjQ0LCAKLSAgICAxMDMsIDIxOSwgMTQsIDI1MiwgMTY2LCAyMjUsIDI1NCwgMjI0LCAyNDcsIDI0OSwgMjEyLCAyNTIsIDE2NywgMjE3LCA2MCwgCi0gICAgMjE1LCAyMzYsIDI0OSwgMTM2LCAyNDQsIDc1LCAyMjUsIDY2LCAyNDgsIDg5LCAyMzUsIDEzNywgMjQ3LCAxMzksIDI1MCwgCi0gICAgMjQwLCAyMTgsIDExNSwgMjExLCAyNDAsIDI1MCwgMTA2LCAyMzAsIDEzNCwgMjEzLCAxNjQsIDI1MCwgMTcwLCAyMjEsIAotICAgIDIwMSwgMjIxLCAyMjYsIDI0MiwgMTU1LCAyNTEsIDMsIDI1MCwgMjQxLCAyNDAsIDI1MiwgMjQ0LCAxMzgsIDIxMiwgMCwgCi0gICAgMjIyLCAyMDIsIDI0OSwgMjQ0LCAyNDQsIDk0LCAyMjUsIDUsIDIyLCAyNDQsIDk4LCAyMzAsIDIzMiwgMjMwLCAxMTMsIAotICAgIDI1MSwgMTgsIDI1MCwgNDcsIDI0MSwgMjM5LCAyNTMsIDI0OSwgMjI2LCA2NiwgMjE2LCAxNSwgMjQyLCAyLCAyNTAsIDM3LCAKLSAgICAyMTYsIDI0MywgMjE2LCAxMTQsIDI1MCwgMjgsIDI1MSwgMjEwLCAyMjUsIDE4MCwgMjUzLCAyNDgsIDIxMywgMTcyLCAyNDMsIAotICAgIDExNywgMjQ3LCAyMDUsIDI0MSwgMTYzLCAyMTksIDg2LCAyMzEsIDIzOSwgMjUxLCAyNTMsIDI0MywgMTE4LCAyNDcsIDI0OCwgCi0gICAgMjUxLCAxNzQsIDI0NCwgNjAsIDIyNSwgMzYsIDI1MCwgMjQ5LCAyOCwgMjI4LCA1MiwgMjMwLCA5MCwgMjgsIDIyOCwgNDcsIAotICAgIDIyMSwgMjE0LCAyNDIsIDEwNiwgMjgsIDIzNCwgMTQzLCAyMTUsIDE5MSwgMjEzLCAxNTQsIDI4LCAyMjEsIDE5NCwgMjIyLCAKLSAgICAxMjYsIDIyMCwgMTMsIDIsIDIyMSwgMjI5LCAyMTYsIDI0NSwgMjIzLCAxODEsIDIyLCAyNTIsIDE2NywgMjE5LCAxMDcsIAotICAgIDIyLCAyMTksIDEwNywgMjUxLCAxOTUsIDI1MiwgMTMxLCAyMiwgMjQxLCA1NiwgMjUwLCAxMjgsIDI0NCwgODEsIDIxOSwgCi0gICAgNjUsIDIyMiwgMTI3LCAyMTgsIDEzLCAyMTUsIDE5NSwgMjQwLCAyNTMsIDIyMywgMTgyLCAyNTQsIDEzNywgMjQ0LCAzOSwgCi0gICAgMjIyLCAxMzgsIDI0NCwgMzksIDIxNywgMjQyLCAyNDAsIDI0MiwgMjUxLCAxMjcsIDI0MCwgMjQyLCAyLCAyNDMsIDEwMSwgCi0gICAgMjI2LCAyMzMsIDI1MSwgMTI3LCAyMzUsIDEzNywgMjI0LCAyNDIsIDIyNiwgMjMyLCAyNDUsIDUyLCAyMjQsIDI0MiwgMjI2LCAKLSAgICAyMzIsIDI0MCwgMjUxLCAyNTIsIDE1MywgMjUzLCAxODksIDIxNiwgMjUzLCAyMzEsIDIzOSwgMjQwLCAyNDcsIDIzMiwgCi0gICAgMTE3LCAyNDAsIDI0NywgMjQ5LCAxODQsIDIxOCwgMTI3LCAyMjEsIDIwMCwgMjQ4LCA1MSwgMjE4LCAxMjcsIDI0NCwgMTg4LCAKLSAgICAyMzUsIDE1NSwgMjMzLCA5NSwgMjM1LCAxMzcsIDI1MCwgMjM0LCAyNDUsIDUyLCAyNTAsIDIzNCwgMjIzLCAxNDQsIDIzMCwgCi0gICAgMTE3LCAyMjYsIDExOCwgMjEyLCA0MSwgMjUxLCAxMzEsIDI0OSwgMTUzLCAyMTYsIDEwNywgMjMzLCAyNCwgMjIzLCAxODMsIAotICAgIDI1MCwgMjMyLCAyNDYsIDEwNCwgMjQ5LCAxNDMsIDIxMiwgMywgMjE5LCA3MiwgMjE5LCA3MCwgMjQwLCAyNTIsIDIyMywgCi0gICAgMTU2LCAyNDIsIDE3NywgMjIwLCA1OSwgMjMwLCAxNTAsIDIyMiwgMTk2LCAyNTAsIDExNiwgMjQ3LCAxNDQsIDIyNSwgNzYsIAotICAgIDI1MSwgMjExLCAyNDUsIDE3NywgMjI2LCAyNDIsIDIxOCwgMjU0LCAyMjAsIDU0LCAyNTEsIDEzMCwgMjU0LCAxMDAsIDI0MSwgCi0gICAgNjEsIDIzMywgMTI3LCAyNTIsIDY4LCAyNDQsIDk4LCAyMTUsIDE5NCwgMjQ0LCA5OCwgMjUxLCAyMTcsIDIxNSwgOTEsIAotICAgIDI0MiwgMCwgMjUwLCAxMTcsIDI1MiwgMTk1LCAyNTAsIDExNywgMjQzLCAyNTAsIDI1MiwgMTk1LCAyNTAsIDExNywgMjUxLCAKLSAgICAyNDUsIDIyNSwgMTk4LCAyMzQsIDMyLCAyMjQsIDI1MSwgMjQ2LCA5NSwgMjUxLCAxOSwgMjUyLCAxODUsIDI1MSwgMTksIAotICAgIDI0NywgMTM4LCAyMzAsIDExOCwgMjQ0LCAxOTgsIDI0OSwgMTU0LCAyNDQsIDE5OCwgMjE2LCAxMDgsIDI0NCwgMTk4LCAKLSAgICAyMjMsIDE4NCwgMjQ0LCAxOTgsIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjQ2LCAxMDUsIDI0NCwgMTk4LCAyMTgsIDI0MywgCi0gICAgMjEyLCAzLCAyNDAsIDI1MywgMjQ0LCAxOTgsIDIzMCwgMTUxLCAyNDQsIDE5OCwgMjQ3LCAxNDUsIDI0NCwgMTk4LCAyMjUsIAotICAgIDc3LCAyNDQsIDE5OCwgMjQzLCAyNTMsIDI0NCwgMTk4LCAyNDIsIDI3LCAyNDQsIDE5OCwgMjExLCAyMjQsIDI0NCwgMTk4LCAKLSAgICAyNTIsIDc5LCAyNDQsIDE5OCwgMjI2LCA0OSwgMjQ0LCAxOTgsIDIyNSwgNzcsIDIyOCwgNTgsIDIyNSwgMjM2LCAyMjQsIAotICAgIDE4OSwgMjQ1LCAyMSwgMjQ1LCAyMzUsIDIyOCwgNTgsIDIzMCwgMTE1LCAyMTYsIDIwLCA3MSwgMTIwLCAyMjUsIDEwLCAKLSAgICAyNTIsIDE5MCwgMjM1LCAyNDksIDcxLCAxMjQsIDIyNSwgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDQzLCAyMjUsIAotICAgIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDcxLCA0NCwgMjI1LCAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCAyNDQsIDkyLCAKLSAgICAyNDIsIDIzLCA1MCwgMjEyLCAzMywgMjQyLCAyMywgNTAsIDIyNiwgMjE5LCAyNDIsIDIzLCA1MCwgMjE2LCAxMzYsIDEyMCwgCi0gICAgNTAsIDIxNiwgMTM2LCAxMjQsIDUwLCAyNTAsIDI3LCAyNDIsIDE4LCA1MCwgMjA0LCAyNDIsIDE4LCA1MCwgMjQ5LCAxMzEsIAotICAgIDIxMSwgMjIwLCAyNDIsIDIsIDI0NSwgMjIsIDIyOSwgMTA5LCAyMTcsIDE1MiwgMjM1LCAxMzEsIDI0NiwgMTAwLCAyMzQsIAotICAgIDg4LCAyNTEsIDI1NSwgMjExLCAyMjAsIDI1MCwgMSwgMjI0LCAxMzAsIDI0MiwgMjEsIDIyNCwgMjMzLCAyMzEsIDE4MiwgCi0gICAgMjIwLCA2LCAyNTMsIDIxMSwgMjIwLCA2LCAyNDEsIDE3MSwgMjIwLCA2LCAyMTEsIDIyMCwgMjIxLCAyNDIsIDIxMSwgMjIwLCAKLSAgICAyNTEsIDE5NCwgMjQ0LCAzNywgMjUxLCA5OCwgMjM2LCA3LCAyMTksIDE3MSwgMjUxLCA5NywgMjM2LCA3LCAyMTksIDE3MSwgCi0gICAgMjUxLCAxNzAsIDI0MiwgMjAxLCAyMzEsIDE5MCwgMjExLCAyMjEsIDI0NCwgMTgyLCAyMzEsIDE5MSwgMjIsIDIxMSwgMjIyLCAKLSAgICAyNDEsIDY3LCAyNDIsIDE3LCAxMTMsIDIzMSwgNjQsIDI0MSwgNjcsIDI0MiwgMTcsIDExMywgMjExLCAyMTksIDI0MSwgNjcsIAotICAgIDI0MiwgMTcsIDIyNSwgMiwgMjI2LCAyMzEsIDIxMSwgMjIyLCAyLCAyNTEsIDExNCwgMjQ1LCAyMzMsIDI1MSwgMTQ5LCAyLCAKLSAgICAyMTMsIDI0NiwgMjI1LCAxNzEsIDIsIDI1MSwgMjIwLCAyNDIsIDQxLCAyMzEsIDE5MSwgMiwgMjQyLCAxMTcsIDIyNSwgCi0gICAgMTEyLCAyMzEsIDE3OSwgMjMxLCAxOTEsIDIsIDIxNSwgOTgsIDIyNiwgMjEyLCAyMzEsIDE5MCwgMjI2LCAyMTIsIDIxMSwgCi0gICAgMjIxLCAyNTIsIDE5NCwgMjQ5LCAxOTgsIDIxMSwgMjA1LCAyMjQsIDE5MiwgMjM1LCAxMzcsIDIyNiwgMjI3LCAyMzUsIAotICAgIDEzNywgMjQyLCAxNzYsIDI0MiwgMjI5LCAyNTIsIDE5NSwgMjU0LCAxMjEsIDI0NSwgMjYsIDI1NCwgMTY5LCAyNTQsIDE3MCwgCi0gICAgMjMwLCAxNDEsIDIzNiwgMTIsIDIxOSwgMTAyLCAyMzUsIDIzOSwgMjQ4LCA0MiwgMjI1LCAxNzAsIDI0MiwgMTEyLCAyNDgsIAotICAgIDE4NywgMjMyLCAyMDcsIDIyOSwgMjE2LCAyMjUsIDEsIDI0NCwgMTk5LCAyMzEsIDE0NywgMjQyLCA0MCwgMjUyLCAxNDYsIAotICAgIDIyNSwgNCwgMjE3LCAxNzIsIDIyNSwgNjksIDIzNCwgNzAsIDc5LCAyMzIsIDExNywgMjMzLCAxNiwgMjIyLCAyMzYsIDI0MywgCi0gICAgNjEsIDIxOCwgMTMzLCAyMzQsIDY5LCAyNTEsIDE3OSwgMjQ5LCAxNTYsIDIsIDI0MSwgMjM0LCAyMTIsIDE5LCAyNTIsIDc3LCAKLSAgICAyNDEsIDIzNCwgMjUxLCAxNDMsIDI0MSwgMjM0LCAxMTMsIDI0MSwgMjMyLCAyMTksIDEyLCAyNDEsIDIzNCwgMjQyLCAxMjcsIAotICAgIDI0MSwgMjM0LCAyNDEsIDIzNSwgMiwgNzUsIDI1MSwgMjE2LCAyNDEsIDIzNCwgMjQyLCAxMzQsIDI0MSwgMjM0LCAyMTEsIAotICAgIDQyLCAyNDEsIDIzNCwgMjI0LCAxMzEsIDI0MSwgMjM0LCAyNDEsIDIzNSwgMiwgMjIzLCAzNiwgMjIzLCA0NywgMjQxLCAKLSAgICAyMzIsIDI0MSwgMjM1LCAyNDgsIDg5LCAyNDgsIDEsIDIyMCwgODQsIDIsIDExNiwgNTksIDIzNSwgMjIyLCAyNDUsIDE4MCwgCi0gICAgMTkzLCAyNTEsIDEyNCwgMjU0LCAxMjAsIDg3LCAyNTEsIDIwMywgMjE5LCA5NCwgODcsIDI0OSwgMjM2LCA4NywgMjE4LCAKLSAgICAyNDgsIDIxNywgMjQ5LCA4NywgMjQ2LCA5MywgMjQ4LCAxNjUsIDg3LCAyMjUsIDcwLCA2NCwgMjI0LCAyNTIsIDI0NCwgNjksIAotICAgIDI1MiwgMTEsIDI0NywgMTczLCA4NywgMjE5LCA1LCAyNTIsIDE2NiwgMjE2LCAxNTAsIDI1MiwgMTY2LCA3MSwgMjQ0LCA1OSwgCi0gICAgMjQwLCAyMTgsIDIyNSwgOCwgODcsIDIzMCwgMTU0LCAyNTIsIDE4MCwgMjQ5LCAxMDYsIDI0NSwgNDAsIDExNCwgMjQ3LCAKLSAgICAxNDAsIDUwLCAyNDksIDE0NywgMjUwLCAyNTAsIDI1MiwgMTUyLCAyLCAyMTEsIDQwLCA1MCwgMjUyLCAxNTIsIDIsIDI0NywgCi0gICAgMTQwLCA1MCwgMjUyLCAxNTIsIDIsIDI0NSwgNTUsIDUwLCAyNTIsIDE1MiwgMiwgMjI0LCAyMzEsIDUwLCAyMzAsIDE1NCwgCi0gICAgMiwgMjExLCAyMzUsIDI1MCwgMTQ2LCAyLCAyMTQsIDE1MywgMjE1LCAyMzIsIDIyLCAyMTEsIDQwLCA1MCwgMjIxLCAxODAsIAotICAgIDIyNSwgMTY5LCAyNDksIDIxNiwgMjUxLCAxNDcsIDIzMCwgMTkxLCAyNDQsIDY0LCAyNDcsIDE5MywgMjI2LCAxNjUsIDI0NywgCi0gICAgMTk4LCAyNDYsIDU3LCAyNDQsIDExNSwgMjQ0LCA0OCwgMjA0LCAyNDQsIDExNSwgMjQ0LCA0OCwgMjI2LCA4MCwgMiwgMjQ5LCAKLSAgICAxMDgsIDIyNiwgODAsIDI0NCwgMTkxLCAyMTQsIDE2MywgMjUxLCAyNCwgMjE3LCAxOSwgMjUxLCAyNCwgMjUwLCAyNTEsIAotICAgIDIzNSwgMjQ5LCAyNTAsIDE0NiwgMiwgMjE0LCAxNTMsIDIxNSwgMjMxLCAyNTAsIDE0NiwgMiwgMjQ2LCAxMTIsIDIxNSwgCi0gICAgMjMxLCAyNTIsIDE0OSwgMjUwLCAxNDUsIDI1MCwgMTQsIDIyNCwgMTI2LCAyMjIsIDE4NywgMjI0LCAxMjYsIDIyNiwgMjMsIAotICAgIDIxOCwgMTIzLCAyMjIsIDEzMywgMjE1LCAyMjMsIDIyMiwgMTMzLCAyNTEsIDE5OSwgMjE3LCA5MiwgMjMzLCA1NywgMjI4LCAKLSAgICA1MCwgMjI4LCA1MSwgMiwgMjQ4LCA4OCwgMjQ5LCAxNTUsIDI1MCwgOCwgMjUxLCAyMDAsIDIwNCwgMjUxLCAyMDAsIDI0MiwgCi0gICAgMTM0LCAyNTEsIDIwMCwgMjUxLCAyMTYsIDI1MSwgMjAwLCAyMjYsIDE2MSwgMjUxLCAyMDAsIDI1MSwgMTk3LCAyMjksIAotICAgIDIxMCwgMjUyLCAxODMsIDIyMSwgMTg4LCAyMzEsIDY1LCAyMTcsIDIsIDIyMywgMTI2LCAyMjYsIDc4LCAyNDQsIDE2NywgCi0gICAgMjMxLCAyMzksIDIyMSwgMjI1LCAyNTQsIDk3LCAyMjQsIDE0OCwgMjU1LCA1LCAyMzIsIDExOSwgMjUwLCAxMzUsIDIzMSwgCi0gICAgNzcsIDIyNiwgMTMzLCAyMTUsIDIzOSwgMjM2LCAzLCAyMTUsIDIzOSwgMjI2LCA4NiwgMjQ2LCAzMiwgODcsIDIzNiwgMCwgCi0gICAgMjQ1LCAxMjcsIDI0NSwgMTI4LCAyLCAyNDYsIDExMiwgODAsIDQ4LCAyNTAsIDgsIDIzMSwgMjA1LCAyLCAyMzIsIDExMywgCi0gICAgMjQ0LCA4MSwgMjUwLCA4LCAyMzEsIDIwNSwgMiwgMjIzLCAxNjAsIDI0NCwgODEsIDIwNCwgMjMxLCAyMDUsIDIsIDIyMywgCi0gICAgMTYwLCAyNDQsIDgxLCAyMDQsIDIzMSwgMjA1LCAyLCAyMzIsIDExMywgMjQ0LCA4MSwgMjI0LCAyMzksIDIyNCwgMjQwLCAKLSAgICAyNDAsIDI1NSwgMjI5LCA4OSwgMjMwLCAxNjQsIDIyNSwgMTIwLCAyMzAsIDE2NCwgMjI1LCAxMjEsIDIsIDk3LCA4MCwgCi0gICAgMjUzLCAyMTUsIDIzMywgNTIsIDIxMywgMTc1LCAyMzAsIDE2MywgMjMwLCAxNjQsIDIyNSwgMTIxLCAyMjYsIDIzNCwgMjI4LCAKLSAgICA4MCwgMjMwLCAxNjQsIDIyNSwgMTE5LCAyNTQsIDk4LCAyLCAyNTIsIDEzNywgMjUxLCAxOCwgMjEzLCAxNzIsIDI1MSwgMTgsIAotICAgIDIxNiwgMjU1LCAyMjMsIDE3NiwgMjEzLCAxNzEsIDIxNSwgNjAsIDk3LCAyNTMsIDI1NSwgMjUwLCAxMCwgOTcsIDIyLCAKLSAgICAxNDAsIDIwNCwgMjUwLCA0NCwgMjUzLCAyNTUsIDI1MCwgMTAsIDk3LCAyMiwgMTQwLCAyMDQsIDI1MCwgNDQsIDI1NCwgMCwgCi0gICAgMiwgMzcsIDEyMywgMjI2LCAxMjQsIDI1MCwgMTAsIDI0NiwgMTEyLCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCA0NCwgMjUzLCAKLSAgICAyNTUsIDI1NCwgOTYsIDI0NiwgMTEyLCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCA0NCwgMjUzLCAyNTUsIDEyMSwgMjUxLCAKLSAgICAxNDYsIDg3LCAxMjUsIDI1MSwgMTQ2LCA4NywgMjE5LCA5LCAyLCAyNTEsIDEyLCA5MSwgMjE5LCA4LCAyMTksIDksIDIsIAotICAgIDEyMywgMjE5LCAzMywgMjEyLCAzNSwgMjE5LCA5LCAyLCAxMzQsIDIxOSwgMzMsIDIxMiwgMzQsIDI1MiwgMTIzLCAyNDUsIAotICAgIDE4MCwgMjI1LCAzMCwgMjMzLCA0OCwgMjMxLCAyMTYsIDI0MiwgMTkxLCAyMjIsIDI1MCwgMjMxLCAyMTYsIDI0MiwgMTkxLCAKLSAgICAyMzIsIDE1OCwgMiwgMjM1LCAyMzIsIDIyNSwgMjAyLCAyNTAsIDgsIDIzMiwgMTU4LCAyLCAyMzQsIDE0NCwgMjM0LCAxNDQsIAotICAgIDIzMiwgMTU3LCAyMDQsIDIzMiwgMTU3LCAyNTIsIDUyLCAyNTIsIDUzLCAyLCAyNTEsIDEyLCA5MSwgMjUxLCAxOTgsIDIzMiwgCi0gICAgMjEwLCA4NywgMjIzLCAxNzcsIDI1MSwgOTQsIDI1MiwgMTkzLCAyLCAxNDAsIDgwLCA0OCwgMjQ1LCAxNTEsIDIsIDE0MCwgCi0gICAgODAsIDQ4LCAyMjYsIDIwMSwgMiwgMjQ1LCAzOSwgMTY0LCAyLCA0MywgNDQsIDgwLCA0OCwgMjE5LCA0MSwgMiwgOTcsIDgwLCAKLSAgICA0OCwgMjE2LCAxNSwgMiwgMjE0LCAxNTMsIDgwLCA0OCwgMjI4LCA4MCwgMTIzLCAyMTQsIDE4NCwgMjQ1LCAxOTksIDg3LCAKLSAgICAyMzQsIDE0MiwgMjE2LCAyNDgsIDIzNSwgMjI2LCAxNiwgMzEsIDcsIDYsIDIzMywgMTUsIDIzNSwgMjI2LCAxNiwgMzEsIDcsIAotICAgIDQsIDIzMywgMTUsIDIzNSwgMjI2LCAxNiwgMzEsIDIyNywgMjAzLCAyMzUsIDIyNiwgMTYsIDMxLCAyMTcsIDE4NCwgMjM1LCAKLSAgICAyMjYsIDE2LCAzMSwgNywgMjMzLCAxNSwgMjQ0LCAxMDQsIDI0NSwgMTgwLCAyMTYsIDEwLCAyMTEsIDE5OSwgMjQyLCAyOCwgCi0gICAgMjI3LCAxODYsIDIyLCAyNTEsIDIwNSwgMjQxLCA3MywgMjI1LCA1MywgMjMwLCAyMzEsIDIxNywgMCwgMjQ5LCAxMjIsIAotICAgIDI1MiwgMTY3LCAyMTksIDEyNywgMjI1LCAxMiwgMjE4LCAxNTksIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjM1LCAxMzcsIAotICAgIDE2LCAzMSwgMjUyLCA2NSwgMjE1LCAyMjEsIDI0NSwgMTY0LCA4NSwgNDIsIDI1MSwgOTQsIDcxLCA0MiwgMjUxLCA5NCwgCi0gICAgMjMzLCA5MSwgMjIzLCAxMTQsIDI1MCwgNDMsIDIzMywgOTEsIDI1MSwgMjE2LCAyNTAsIDQzLCAyMzMsIDkxLCAyMjYsIAotICAgIDE2MSwgMjQ4LCAwLCAyMzMsIDkxLCAyNTEsIDIxNiwgMjQ4LCAwLCA0LCAyMjYsIDE2MSwgMjQ4LCAwLCA0LCAyNTEsIDIxNiwgCi0gICAgMjQ4LCAwLCAyMTQsIDE2MiwgMjIzLCAxMTQsIDIxNSwgMjI2LCAyNDYsIDExMywgMjIzLCAxMTQsIDIxNSwgMjI2LCAyMTQsIAotICAgIDE2MiwgNCwgMjIzLCAxMTQsIDIxNSwgMjI2LCAyNDYsIDExMywgNCwgMjIzLCAxMTQsIDIxNSwgMjI2LCAzNywgMjQ5LCAKLSAgICAxMzksIDIyNCwgMjU1LCAyNDksIDEzOSwgMjI1LCAwLCAyLCAyNDIsIDMzLCA1MSwgMjQ5LCAxMzksIDIyNCwgMjU1LCAyMjgsIAotICAgIDU0LCA0MywgMjIwLCAxNTUsIDIsIDEzNCwgMjQ3LCAxMjYsIDI1MCwgMTIsIDI0NCwgMTk5LCAxMjMsIDIyNiwgMjQ2LCAKLSAgICAyNTAsIDEyLCAyNDQsIDE5OSwgMTEzLCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDEzNCwgMjI2LCAyNDYsIDI1MCwgCi0gICAgMTIsIDI0NCwgMTk5LCAyNDQsIDE5LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NCwgODksIDIyNiwgMjQ2LCAKLSAgICAyNTAsIDEyLCAyNDQsIDE5OSwgMjE5LCAxMjcsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjIwLCAxMjQsIDIyNiwgCi0gICAgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAyMDEsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjI4LCAyMDUsIAotICAgIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE2LCAyNDksIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAKLSAgICAxNzYsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA3NywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAKLSAgICAyMjYsIDE5NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNSwgNTYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDE0MSwgMjUwLCAKLSAgICAxMiwgMjQ0LCAxOTksIDI0NCwgMTUsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDQsIDg3LCAyNTAsIDEyLCAyNDQsIDE5OSwgCi0gICAgMjE5LCAxMjMsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjAsIDEyMywgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NSwgMjAwLCAyNTAsIAotICAgIDEyLCAyNDQsIDE5OSwgMjI4LCAyMDQsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDI0NywgMjUwLCAxMiwgMjQ0LCAxOTksIAotICAgIDI0NSwgMTc0LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA3NSwgMjMwLCAxMjIsIDI0MywgMjM3LCAyMTYsIDM3LCAyMTYsIAotICAgIDMsIDIxOCwgMTUwLCA2NCwgMjMyLCAyNDUsIDIxOSwgMTcyLCA2NCwgMjM1LCAxMzgsIDIzMCwgMTExLCAyNDIsIDEzMSwgCi0gICAgMjQ0LCAxOTgsIDI0MiwgMTMxLCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjQ0LCAxOTksIDIsIDIxNywgMTUsIAotICAgIDY0LCAyMzUsIDU5LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIAotICAgIDIwNCwgMjMwLCAxMTYsIDIyLCAyMTksIDc2LCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNiwgCi0gICAgMjIsIDI0OSwgMjM4LCAyMTcsIDI0OCwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTYsIDIyLCAyMTYsIAotICAgIDEwNSwgMjQ1LCAyMSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDI0MiwgMzIsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyNDAsIAotICAgIDI1NCwgMjExLCAyMzMsIDI0NCwgMTk4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjQ0LCAKLSAgICAxOTksIDIyMSwgMjE5LCAyNDgsIDcwLCAyNDQsIDQxLCAyMjMsIDkxLCAyNDQsIDE5OCwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIAotICAgIDI0MSwgMjMzLCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjE4LCAzNSwgMjE5LCA3NSwgMjQ0LCAxOTgsIDIyOSwgCi0gICAgOTIsIDI0NCwgMTk4LCAyNDUsIDMxLCAyNDQsIDE5OCwgMjE0LCAxODgsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjQ5LCAKLSAgICAyMzgsIDIxNywgMjQ4LCAyMjUsIDE5NSwgMjQ0LCAxOTgsIDI0OSwgMjA5LCAyNDQsIDE5OCwgMjQ5LCAyMTAsIDI0NCwgCi0gICAgMTk4LCAyMzQsIDY4LCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIxNiwgMTM4LCAxMTYsIDIzNCwgNjksIDIzNCwgNjgsIDI0NCwgCi0gICAgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyMzQsIDY4LCAyNDQsIDE5OSwgMiwgMjUwLCA4LCAyNDUsIDIxLCAyNDQsIAotICAgIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMCwgMjQ0LCAxOTksIDIsIDIxOCwgODksIDIxNiwgMjEsIDIyLCAyMTEsIDIzMywgCi0gICAgMjQ1LCAyMywgMjQ0LCAxOTksIDIsIDIxOCwgODksIDIxNiwgMjEsIDIyLCAyMTYsIDEwNSwgMjQ1LCAyMSwgMjQ3LCAyMDAsIAotICAgIDI0NCwgMTk4LCAyMTEsIDIwNCwgMjQ0LCAxOTgsIDI1NCwgMTE2LCAyNDQsIDE5OCwgMjI0LCAyMzAsIDI0NCwgMTk4LCAKLSAgICAyNDksIDEyNCwgMjQ0LCAxOTgsIDIyNSwgMTczLCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIDIzMiwgMTMyLCA2NCwgMjE1LCAKLSAgICAyMDUsIDI0NywgMjAwLCAyNTEsIDk2LCAyMjMsIDkxLCAyNDQsIDE5OCwgMjQzLCAyNDcsIDI0NCwgMTk5LCAyLCAyMDQsIAotICAgIDIzMCwgMTE1LCAyNTQsIDExNCwgMjQ0LCAxOTgsIDI0NCwgMTYwLCAyNDQsIDE5OCwgMjEyLCAyMCwgMjQ0LCAxOTgsIDIxOSwgCi0gICAgOTMsIDI0NCwgMTk4LCAyMTYsIDcyLCAyNDQsIDE5OCwgMjQyLCAxMzIsIDI0NCwgMTk4LCAyMzIsIDEyMCwgMjQ5LCAxMjQsIAotICAgIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjQwLCAyMTAsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgCi0gICAgMjA0LCAyMzAsIDExNiwgMjIsIDI0OSwgMjM4LCAyMTcsIDI0OCwgMjQ0LCAxOTksIDIyMSwgMTkyLCAyMzYsIDcsIDI0NCwgCi0gICAgMTYxLCAyNTMsIDIyMSwgMjQ0LCAxOTgsIDI0NCwgNTcsIDI0NCwgMTk4LCAyMTksIDk0LCAyNDQsIDE5OCwgMjQ3LCAxNzMsIAotICAgIDI0NCwgMTk4LCAyNDQsIDE5OSwgMjExLCAyMzAsIDIzMCwgMTE1LCAyNDQsIDE5OSwgMiwgMjMxLCA4OSwgMjMxLCAxNDksIAotICAgIDI0MiwgMTMxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgCi0gICAgMjE3LCAxNSwgNjQsIDIzNSwgNTksIDIxOSwgNzYsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjE5LCAKLSAgICA3NiwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyNDEsIDIzMywgMjQ1LCAyMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMTEsIAotICAgIDE5NiwgMjE5LCA3NywgMjM0LCA2OCwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyNTAsIDgsIDI0NSwgMjEsIDIyNCwgMjMwLCAKLSAgICAyNTAsIDIzMywgMjQ0LCAxOTgsIDI0OSwgMTI0LCAyNTAsIDIzMywgMjQ0LCAxOTgsIDIxMiwgMjAsIDI1MCwgMjMzLCAyNDQsIAotICAgIDE5OCwgMjQ0LCAxOTksIDIsIDIyOCwgODAsIDI0MiwgMTcwLCAyNDMsIDQxLCAyNDQsIDE5OSwgMiwgMjI2LCAyMTksIDI0MywgCi0gICAgNDEsIDIyNSwgMTcxLCAyNTEsIDE3NiwgMjQ4LCA4MywgMjIxLCAxNzEsIDIzMCwgMTUwLCAyNDEsIDIzNiwgMjMwLCAxNTAsIAotICAgIDIxOSwgMTAsIDIzMCwgMTUwLCAyNDIsIDEyLCAyMjUsIDE3MSwgMjIzLCAxNTksIDEyMywgMjQyLCAyMiwgMjI1LCAxNzEsIAotICAgIDIyMywgMTU5LCAyNTEsIDE4NiwgMjQyLCAxOCwgMjM2LCA3LCAyNTAsIDE4NywgMjI1LCAxNzEsIDI0MywgMjQ2LCAyMjUsIAotICAgIDE3MSwgMiwgMjI0LCAyMzAsIDI0NCwgMTk4LCAyMjUsIDE3MSwgMiwgMjQ0LCA0OSwgMjQyLCAxNywgMjIyLCAyMDUsIDI0MSwgCi0gICAgMjIxLCAyMTgsIDE0NSwgMjMyLCAxNTUsIDIyMywgMTY1LCAyNTAsIDI1MiwgMjQxLCAxNjksIDIxNSwgMjQ5LCAyNDEsIAotICAgIDE2OSwgMjE1LCAyNTAsIDIsIDI1MSwgMTIyLCAyMjgsIDU4LCAyMTUsIDI0OSwgMjMxLCAzNywgMTkzLCAyMjMsIDE2NiwgCi0gICAgMjE4LCAxNTEsIDIxNSwgMjQ3LCAyMTUsIDI0OCwgMjUwLCAyNTIsIDI1MSwgMTAwLCAyMjYsIDE5OCwgMjUxLCAxMDAsIAotICAgIDIxNSwgMjAyLCAyNTEsIDEwMSwgMjE4LCAxMzEsIDIzMCwgMTkyLCAyNTQsIDEzOCwgMjQ0LCAxMDUsIDI0NSwgMTQ1LCAKLSAgICAyMjUsIDIsIDI1MCwgMjUyLCAyMjYsIDE5OCwgMjI1LCAyLCAyNTAsIDI1MiwgMjE3LCAzMywgMjI2LCAxOTgsIDIxNywgMzMsIAotICAgIDI1MywgMTg4LCAyMjYsIDE5OCwgMjUzLCAxODgsIDIyMywgMTIxLCAyMTMsIDI0NywgMjQ4LCA2NiwgMjE1LCAxOTMsIDI1MywgCi0gICAgMjUwLCAyMzIsIDEyMywgMjE1LCAyNTUsIDIzMCwgMTQ0LCAyMzAsIDEyMSwgMjIzLCAxNjQsIDIxOCwgNywgMjIzLCAxNjQsIAotICAgIDIzMCwgMTIxLCAyNTEsIDM2LCAyNTQsIDIzOCwgMjE1LCAyNDYsIDIyMCwgMTgsIDIyMiwgMTg0LCAyMTksIDMsIDIwMywgCi0gICAgMjE1LCAyNTMsIDIzMiwgMjM2LCA2NywgMjE1LCAyNTMsIDIzMiwgMjM2LCAyNDksIDE5OCwgNTAsIDIyNSwgMiwgMjUwLCAKLSAgICAyMzcsIDIyMywgNDcsIDIzMiwgMjM2LCAyMTUsIDIyMywgMjQ0LCA4MiwgMjI2LCAyMDEsIDIyNCwgMjQxLCAyNDcsIDEzMSwgCi0gICAgMjI4LCA4MCwgMjQ1LCAxMzMsIDUwLCAyMTksIDc0LCA4NywgMjI4LCA4MCwgMjE5LCA3NCwgODcsIDIyNCwgMTI1LCAyMzIsIAotICAgIDE5OSwgMjM2LCA3LCAyMzUsIDE2MywgMjI1LCA0NCwgODcsIDI0NywgMTU0LCAyMjgsIDU3LCAyMzIsIDE5OSwgODcsIDIyNCwgCi0gICAgMjM1LCAyMTIsIDQxLCA4NywgMjI4LCA3MSwgMjEyLCA0MSwgODcsIDI1MiwgMTAsIDIyOCwgODAsIDI1MiwgOSwgMjUyLCA4LCAKLSAgICAyMzAsIDEyMSwgMjUyLCA4LCAyMjUsIDIxNiwgMjI4LCA4MCwgMjI1LCAyMTUsIDI1MCwgMTA4LCAyNDksIDEzMiwgMjMxLCAKLSAgICA2MSwgODcsIDIxMSwgMjE4LCA4NywgMjIzLCA2MiwgMjUyLCAxOTUsIDg3LCAyMTYsIDM4LCAyMTIsIDQxLCAyNTAsIDUsIAotICAgIDIxOSwgMjM2LCAyNTIsIDEyNiwgMjUyLCAxMjQsIDIyNSwgMjQ2LCAyNDksIDE4NSwgMjQ5LCA5NCwgMjUyLCAxNzcsIDI1MCwgCi0gICAgMzAsIDQzLCAyMzIsIDk1LCAxMDgsIDE2LCAzMSwgMjI0LCA2LCAxMDgsIDE2LCAzMSwgMjU0LCAyMDEsIDEwOCwgMTYsIDMxLCAKLSAgICAyNDQsIDEwNCwgMTA4LCAxNiwgMzEsIDI0NSwgMjMxLCAxMDgsIDE2LCAzMSwgMjEyLCA0MCwgMTA4LCAxNiwgMzEsIDI1NCwgCi0gICAgNTEsIDEwOCwgMTYsIDMxLCAyNTQsIDUyLCAyMjMsIDEwOCwgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIyMywgMTA3LCAxMDgsIAotICAgIDE2LCAzMSwgMjU0LCA1MiwgMjEzLCAxNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDUyLCAyMTMsIDE0MiwgMTA4LCAxNiwgMzEsIAotICAgIDIxMywgMTU3LCAxMDgsIDE2LCAzMSwgMjEzLCAxNTYsIDEwOCwgMTYsIDMxLCAyMTMsIDE1NSwgMTA4LCAxNiwgMzEsIDIxOCwgCi0gICAgNDUsIDEwOCwgMTYsIDMxLCAyMjUsIDEyOCwgMjE4LCA0NSwgMTA4LCAxNiwgMzEsIDg1LCAyMTgsIDQ1LCAxMDgsIDE2LCAKLSAgICAzMSwgMjMxLCA2MCwgMjE4LCA3MiwgMTA4LCAxNiwgMzEsIDIzMSwgNjAsIDIxOCwgNzEsIDEwOCwgMTYsIDMxLCAyMzEsIAotICAgIDYwLCAyMTgsIDcwLCAxMDgsIDE2LCAzMSwgMjUwLCA0NiwgMTA4LCAxNiwgMzEsIDIyMiwgMywgMTA4LCAxNiwgMzEsIDIyOCwgCi0gICAgMTkzLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDEsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MCwgMTA4LCAxNiwgMzEsIDIyMiwgMjA2LCAKLSAgICAyMjIsIDMsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNiwgMjIyLCAyLCAxMDgsIDE2LCAzMSwgMjQyLCAxNzMsIDEwOCwgMTYsIAotICAgIDMxLCAyMTksIDE2OCwgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIzNSwgMTg0LCAKLSAgICAyMjYsIDE1NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjM1LCAxODMsIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIAotICAgIDIzNSwgMTgzLCAxMDgsIDE2LCAzMSwgMjQ5LCAxNzYsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjM1LCAxODIsIDIyNiwgCi0gICAgMTU3LCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyNDksIAotICAgIDE3NSwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjQ5LCAxNzQsIDEwOCwgMTYsIDMxLCAyNDksIDE3NiwgMjU0LCA5MSwgCi0gICAgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI0OSwgMTc2LCAyNTQsIDkxLCAxMDgsIDE2LCAzMSwgMjE4LCA3MywgNjQsIAotICAgIDIyMiwgNCwgNjQsIDI0OSwgMTc1LCAxMDgsIDE2LCAzMSwgMjEzLCAyNDMsIDEwOCwgMTYsIDMxLCAyMTYsIDg1LCAyMjYsIAotICAgIDE1NywgMTA4LCAxNiwgMzEsIDIzMywgNjMsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjU0LCA5MCwgMjI2LCAxNTcsIDEwOCwgCi0gICAgMTYsIDMxLCAyMTgsIDczLCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMiwgNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIAotICAgIDMxLCAyMTgsIDczLCA2NCwgMjIyLCA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIxMywgMTU4LCA2NCwgMjU0LCA4OSwgCi0gICAgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgMjU0LCA4OCwgCi0gICAgMTA4LCAxNiwgMzEsIDIyMywgMTAzLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDIsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgMTA4LCAKLSAgICAxNiwgMzEsIDIyMywgMTAwLCAxMDgsIDE2LCAzMSwgMjU0LCAxNjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE2NSwgMTA4LCAxNiwgCi0gICAgMzEsIDIzMSwgMTY4LCAxMDgsIDE2LCAzMSwgMjIyLCA5LCAxMDgsIDE2LCAzMSwgMjUzLCAyNTQsIDEwOCwgMTYsIDMxLCAKLSAgICAyMjMsIDEyOCwgMTA4LCAxNiwgMzEsIDIyMywgMTI3LCAxMDgsIDE2LCAzMSwgMjUzLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIAotICAgIDIzNywgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMTcsIDUwLCAxMDgsIDE2LCAzMSwgMjE3LCA0OSwgMTA4LCAxNiwgMzEsIAotICAgIDIyNCwgMTEsIDIzMiwgMjI4LCAxMDgsIDE2LCAzMSwgMjUxLCAxOTEsIDEwOCwgMTYsIDMxLCAyNTEsIDE5MCwgMTA4LCAxNiwgCi0gICAgMzEsIDI1MSwgMTg5LCAxMDgsIDE2LCAzMSwgMjU0LCAxNDYsIDEwOCwgMTYsIDMxLCAyMjYsIDIyMiwgMTA4LCAxNiwgMzEsIAotICAgIDIxOCwgMjUwLCAxMDgsIDE2LCAzMSwgMjE2LCA4MywgMTA4LCAxNiwgMzEsIDI0MiwgMTAzLCAxMDgsIDE2LCAzMSwgMjEyLCAKLSAgICAyOCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI5LCAxMDgsIDE2LCAzMSwgMjUxLCAyMiwgMTA4LCAxNiwgMzEsIDIxNSwgODYsIAotICAgIDEwOCwgMTYsIDMxLCAyNTAsIDI1NCwgMjMwLCAxMjcsIDEwOCwgMTYsIDMxLCAyMjEsIDIwNCwgNjQsIDIzNSwgNjEsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTEsIDMzLCAxMDgsIDE2LCAzMSwgMjE1LCAyMjAsIDEwOCwgMTYsIDMxLCAyMTgsIDE1NiwgMjE1LCAyMjAsIAotICAgIDEwOCwgMTYsIDMxLCAyMzIsIDE1NCwgMTA4LCAxNiwgMzEsIDIxOSwgNTgsIDEwOCwgMTYsIDMxLCAyMTQsIDE0MiwgMTA4LCAKLSAgICAxNiwgMzEsIDI0MCwgMjUzLCAyNDYsIDcyLCAxMDgsIDE2LCAzMSwgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyMjQsIDIzNywgCi0gICAgMjUzLCAyMzUsIDEwOCwgMTYsIDMxLCAyNTEsIDE1MCwgMTA4LCAxNiwgMzEsIDIyNCwgMjI4LCAyNTEsIDE1MCwgMTA4LCAKLSAgICAxNiwgMzEsIDI1NCwgMTQzLCAxMDgsIDE2LCAzMSwgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE4LCAxMDgsIDE2LCAzMSwgCi0gICAgMjE4LCAxMTksIDIxOCwgMjcsIDIxOCwgMTE3LCAxMDgsIDE2LCAzMSwgMjE4LCA2OSwgMTA4LCAxNiwgMzEsIDIyNCwgMjAzLCAKLSAgICAxMDgsIDE2LCAzMSwgMjQ3LCAxODksIDEwOCwgMTYsIDMxLCAyNDcsIDE5MSwgMTA4LCAxNiwgMzEsIDI0NywgMTkwLCAxMDgsIAotICAgIDE2LCAzMSwgMjI0LCAxMzQsIDEwOCwgMTYsIDMxLCAyMjQsIDEyMywgMTA4LCAxNiwgMzEsIDI0OSwgMTMwLCAxMDgsIDE2LCAKLSAgICAzMSwgMjQ5LCAxMjksIDEwOCwgMTYsIDMxLCAyNDksIDEyOCwgMTA4LCAxNiwgMzEsIDI0OSwgMTI3LCAxMDgsIDE2LCAzMSwgCi0gICAgMjQ5LCAxMjYsIDEwOCwgMTYsIDMxLCAyNTQsIDE3OCwgMTA4LCAxNiwgMzEsIDI1MiwgMTI3LCA2NCwgMjMxLCAxNTQsIAotICAgIDEwOCwgMTYsIDMxLCAyNTIsIDEyNywgNjQsIDIxNCwgMTcsIDEwOCwgMTYsIDMxLCAyMjMsIDYwLCAxMDgsIDE2LCAzMSwgCi0gICAgMjQwLCAyNDUsIDEwOCwgMTYsIDMxLCAyMjgsIDIxNywgMTA4LCAxNiwgMzEsIDI0OCwgMTUzLCAxMDgsIDE2LCAzMSwgMjMwLCAKLSAgICAxMzksIDEwOCwgMTYsIDMxLCAxNjMsIDI0NiwgMTAyLCAxMDgsIDE2LCAzMSwgMTYzLCAyMjYsIDEzNiwgMTAsIDE0LCAyNDAsIAotICAgIDEwOSwgMTAsIDE0LCAyNDAsIDEwOCwgMTAsIDE0LCAyNDAsIDEwNywgMTAsIDE0LCAyNDAsIDEwNiwgMTAsIDE0LCAyNDAsIAotICAgIDEwNSwgMTAsIDE0LCAyNDAsIDEwNCwgMTAsIDE0LCAyNDAsIDEwMywgMTAsIDE0LCAyNDAsIDEwMiwgMTAsIDE0LCAyNDAsIAotICAgIDEwMSwgMTAsIDE0LCAyNDAsIDEwMCwgMTAsIDE0LCAyNDAsIDk5LCAxMCwgMTQsIDI0MCwgOTgsIDEwLCAxNCwgMjQwLCA5NywgCi0gICAgMTAsIDE0LCAyNDAsIDk2LCAxMCwgMTQsIDI0MCwgOTUsIDEwLCAxNCwgMjQwLCA5NCwgMTAsIDE0LCAyNDAsIDkzLCAxMCwgCi0gICAgMTQsIDI0MCwgOTIsIDEwLCAxNCwgMjQwLCA5MSwgMTAsIDE0LCAyNDAsIDkwLCAxMCwgMTQsIDI0MCwgODksIDEwLCAxNCwgCi0gICAgMjQwLCA4OCwgMTAsIDE0LCAyNDAsIDg3LCAxMCwgMTQsIDI0MCwgODYsIDEwLCAxNCwgMjQwLCA4NSwgMTAsIDE0LCAyNDAsIAotICAgIDg0LCAxMCwgMTQsIDI0MCwgODMsIDEwLCAxNCwgMjQwLCA4MiwgMTAsIDE0LCAyNDAsIDgxLCAxMCwgMTQsIDI0MCwgODAsIAotICAgIDEwLCAxNCwgMjQwLCA3OSwgMTAsIDE0LCAyNDAsIDc4LCAxMCwgMTQsIDI0MCwgNzcsIDEwLCAxNCwgMjQwLCA3NiwgMTAsIAotICAgIDE0LCAyNDAsIDc1LCAxMCwgMTQsIDI0MCwgNzQsIDEwLCAxNCwgMjQwLCA3MywgMTAsIDE0LCAyNDAsIDcyLCAxMCwgMTQsIAotICAgIDI0MCwgNzEsIDEwLCAxNCwgMjQwLCA3MCwgMTAsIDE0LCAyNDAsIDY5LCAxMCwgMTQsIDI0MCwgNjgsIDEwLCAxNCwgMjQwLCAKLSAgICA2NywgMTAsIDE0LCAyNDAsIDY2LCAxMCwgMTQsIDI0MCwgNjUsIDEwLCAxNCwgMjQwLCA2NCwgMTAsIDE0LCAyNDAsIDYzLCAKLSAgICAxMCwgMTQsIDI0MCwgNjIsIDEwLCAxNCwgMjQwLCA2MSwgMTAsIDE0LCAyNDAsIDYwLCAxMCwgMTQsIDI0MCwgNTksIDEwLCAKLSAgICAxNCwgMjQwLCA1OCwgMTAsIDE0LCAyNDAsIDU3LCAxMCwgMTQsIDI0MCwgNTYsIDEwLCAxNCwgMjQwLCA1NSwgMTAsIDE0LCAKLSAgICAyNDAsIDU0LCAxMCwgMTQsIDI0MCwgNTMsIDEwLCAxNCwgMjQwLCA1MiwgMTAsIDE0LCAyNDAsIDUxLCAxMCwgMTQsIDI0MCwgCi0gICAgNTAsIDEwLCAxNCwgMjQwLCA0OSwgMTAsIDE0LCAyNDAsIDQ4LCAxMCwgMTQsIDI0MCwgNDcsIDEwLCAxNCwgMjQwLCA0NiwgCi0gICAgMTAsIDE0LCAyNDAsIDQ1LCAxMCwgMTQsIDI0MCwgNDQsIDEwLCAxNCwgMjQwLCA0MywgMTAsIDE0LCAyNDAsIDQyLCAxMCwgCi0gICAgMTQsIDI0MCwgNDEsIDEwLCAxNCwgMjQwLCA0MCwgMTAsIDE0LCAyNDAsIDM5LCAxMCwgMTQsIDI0MCwgMzgsIDEwLCAxNCwgCi0gICAgMjQwLCAzNywgMTAsIDE0LCAyNDAsIDM2LCAxMCwgMTQsIDI0MCwgMzUsIDEwLCAxNCwgMjQwLCAzNCwgMTAsIDE0LCAyNDAsIAotICAgIDMzLCAxMCwgMTQsIDI0MCwgMzIsIDEwLCAxNCwgMjQwLCAzMSwgMTAsIDE0LCAyNDAsIDMwLCAxMCwgMTQsIDI0MCwgMjksIAotICAgIDEwLCAxNCwgMjQwLCAyOCwgMTAsIDE0LCAyNDAsIDI3LCAxMCwgMTQsIDI0MCwgMjYsIDEwLCAxNCwgMjQwLCAyNSwgMTAsIAotICAgIDE0LCAyNDAsIDI0LCAxMCwgMTQsIDI0MCwgMjMsIDEwLCAxNCwgMjQwLCAyMiwgMTAsIDE0LCAyNDAsIDIxLCAxMCwgMTQsIAotICAgIDI0MCwgMjAsIDEwLCAxNCwgMjQwLCAxOSwgMTAsIDE0LCAyNDAsIDE4LCAxMCwgMTQsIDI0MCwgMTcsIDEwLCAxNCwgMjQwLCAKLSAgICAxNiwgMTAsIDE0LCAyNDAsIDE1LCAxMCwgMTQsIDI0MCwgMTQsIDEwLCAxNCwgMjQwLCAxMywgMTAsIDE0LCAyNDAsIDEyLCAKLSAgICAxMCwgMTQsIDI0MCwgMTEsIDEwLCAxNCwgMjQwLCAxMCwgMTAsIDE0LCAyNDAsIDksIDEwLCAxNCwgMjQwLCA4LCAxMCwgMTQsIAotICAgIDI0MCwgNywgMTAsIDE0LCAyNDAsIDYsIDEwLCAxNCwgMjQwLCA1LCAxMCwgMTQsIDI0MCwgNCwgMTAsIDE0LCAyNDAsIDMsIAotICAgIDEwLCAxNCwgMjQwLCAyLCAxMCwgMTQsIDI0MCwgMSwgMTAsIDE0LCAyNDAsIDAsIDEwLCAxNCwgMjM5LCAyNTUsIDEwLCAxNCwgCi0gICAgMjM5LCAyNTQsIDEwLCAxNCwgMjM5LCAyNTMsIDEwLCAxNCwgMjM5LCAyNTIsIDEwLCAxNCwgMjM5LCAyNTEsIDEwLCAxNCwgCi0gICAgMjM5LCAyNTAsIDEwLCAxNCwgMjM5LCAyNDksIDEwLCAxNCwgMjM5LCAyNDgsIDEwLCAxNCwgMjM5LCAyNDcsIDEwLCAxNCwgCi0gICAgMjM5LCAyNDYsIDEwLCAxNCwgMjM5LCAyNDUsIDEwLCAxNCwgMjM5LCAyNDQsIDEwLCAxNCwgMjM5LCAyNDMsIDEwLCAxNCwgCi0gICAgMjM5LCAyNDIsIDEwLCAxNCwgMjM5LCAyNDEsIDEwLCAxNCwgMjM5LCAyNDAsIDEwLCAxNCwgMjM5LCAyMzksIDEwLCAxNCwgCi0gICAgMjM5LCAyMzgsIDEwLCAxNCwgMjM5LCAyMzcsIDEwLCAxNCwgMjM5LCAyMzYsIDEwLCAxNCwgMjM5LCAyMzUsIDEwLCAxNCwgCi0gICAgMjM5LCAyMzQsIDEwLCAxNCwgMjM5LCAyMzMsIDEwLCAxNCwgMjM5LCAyMzIsIDEwLCAxNCwgMjM5LCAyMzEsIDEwLCAxNCwgCi0gICAgMjM5LCAyMzAsIDEwLCAxNCwgMjM5LCAyMjksIDEwLCAxNCwgMjM5LCAyMjgsIDEwLCAxNCwgMjM5LCAyMjcsIDEwLCAxNCwgCi0gICAgMjM5LCAyMjYsIDEwLCAxNCwgMjM5LCAyMjUsIDEwLCAxNCwgMjM5LCAyMjQsIDEwLCAxNCwgMjM5LCAyMjMsIDEwLCAxNCwgCi0gICAgMjM5LCAyMjIsIDEwLCAxNCwgMjM5LCAyMjEsIDEwLCAxNCwgMjM5LCAyMjAsIDEwLCAxNCwgMjM5LCAyMTksIDEwLCAxNCwgCi0gICAgMjM5LCAyMTgsIDEwLCAxNCwgMjM5LCAyMTcsIDEwLCAxNCwgMjM5LCAyMTYsIDEwLCAxNCwgMjM5LCAyMTUsIDEwLCAxNCwgCi0gICAgMjM5LCAyMTQsIDEwLCAxNCwgMjM5LCAyMTMsIDEwLCAxNCwgMjM5LCAyMTIsIDEwLCAxNCwgMjM5LCAyMTEsIDEwLCAxNCwgCi0gICAgMjM5LCAyMTAsIDEwLCAxNCwgMjM5LCAyMDksIDEwLCAxNCwgMjM5LCAyMDgsIDEwLCAxNCwgMjM5LCAyMDcsIDEwLCAxNCwgCi0gICAgMjM5LCAyMDYsIDEwLCAxNCwgMjM5LCAyMDUsIDEwLCAxNCwgMjM5LCAyMDQsIDEwLCAxNCwgMjM5LCAyMDMsIDEwLCAxNCwgCi0gICAgMjM5LCAyMDIsIDEwLCAxNCwgMjM5LCAyMDEsIDEwLCAxNCwgMjM5LCAyMDAsIDEwLCAxNCwgMjM5LCAxOTksIDEwLCAxNCwgCi0gICAgMjM5LCAxOTgsIDEwLCAxNCwgMjM5LCAxOTcsIDEwLCAxNCwgMjM5LCAxOTYsIDEwLCAxNCwgMjM5LCAxOTUsIDEwLCAxNCwgCi0gICAgMjM5LCAxOTQsIDEwLCAxNCwgMjM5LCAxOTMsIDEwLCAxNCwgMjM5LCAxOTIsIDEwLCAxNCwgMjM5LCAxOTEsIDEwLCAxNCwgCi0gICAgMjM5LCAxOTAsIDEwLCAxNCwgMjM5LCAxODksIDEwLCAxNCwgMjM5LCAxODgsIDEwLCAxNCwgMjM5LCAxODcsIDEwLCAxNCwgCi0gICAgMjM5LCAxODYsIDEwLCAxNCwgMjM5LCAxODUsIDEwLCAxNCwgMjM5LCAxODQsIDEwLCAxNCwgMjM5LCAxODMsIDEwLCAxNCwgCi0gICAgMjM5LCAxODIsIDEwLCAxNCwgMjM5LCAxODEsIDEwLCAxNCwgMjM5LCAxODAsIDEwLCAxNCwgMjM5LCAxNzksIDEwLCAxNCwgCi0gICAgMjM5LCAxNzgsIDEwLCAxNCwgMjM5LCAxNzcsIDEwLCAxNCwgMjM5LCAxNzYsIDEwLCAxNCwgMjM5LCAxNzUsIDEwLCAxNCwgCi0gICAgMjM5LCAxNzQsIDEwLCAxNCwgMjM5LCAxNzMsIDEwLCAxNCwgMjM5LCAxNzIsIDEwLCAxNCwgMjM5LCAxNzEsIDEwLCAxNCwgCi0gICAgMjM5LCAxNzAsIDEwLCAxNCwgMjM5LCAxNjksIDEwLCAxNCwgMjM5LCAxNjgsIDEwLCAxNCwgMjM5LCAxNjcsIDEwLCAxNCwgCi0gICAgMjM5LCAxNjYsIDEwLCAxNCwgMjM5LCAxNjUsIDEwLCAxNCwgMjM5LCAxNjQsIDEwLCAxNCwgMjM5LCAxNjMsIDEwLCAxNCwgCi0gICAgMjM5LCAxNjIsIDEwLCAxNCwgMjM5LCAxNjEsIDEwLCAxNCwgMjM5LCAxNjAsIDEwLCAxNCwgMjM5LCAxNTksIDEwLCAxNCwgCi0gICAgMjM5LCAxNTgsIDEwLCAxNCwgMjM5LCAxNTcsIDEwLCAxNCwgMjM5LCAxNTYsIDEwLCAxNCwgMjM5LCAxNTUsIDEwLCAxNCwgCi0gICAgMjM5LCAxNTQsIDEwLCAxNCwgMjM5LCAxNTMsIDEwLCAxNCwgMjM5LCAxNTIsIDEwLCAxNCwgMjM5LCAxNTEsIDEwLCAxNCwgCi0gICAgMjM5LCAxNTAsIDEwLCAxNCwgMjM5LCAxNDksIDEwLCAxNCwgMjM5LCAxNDgsIDEwLCAxNCwgMjM5LCAxNDcsIDEwLCAxNCwgCi0gICAgMjM5LCAxNDYsIDEwLCAxNCwgMjM5LCAxNDUsIDEwLCAxNCwgMjM5LCAxNDQsIDEwLCAxNCwgMjM5LCAxNDMsIDEwLCAxNCwgCi0gICAgMjM5LCAxNDIsIDEwLCAxNCwgMjM5LCAxNDEsIDEwLCAxNCwgMjM5LCAxNDAsIDEwLCAxNCwgMjM5LCAxMzksIDEwLCAxNCwgCi0gICAgMjM5LCAxMzgsIDEwLCAxNCwgMjM5LCAxMzcsIDEwLCAxNCwgMjM5LCAxMzYsIDEwLCAxNCwgMjM5LCAxMzUsIDEwLCAxNCwgCi0gICAgMjM5LCAxMzQsIDEwLCAxNCwgMjM5LCAxMzMsIDEwLCAxNCwgMjM5LCAxMzIsIDEwLCAxNCwgMjM5LCAxMzEsIDEwLCAxNCwgCi0gICAgMjM5LCAxMzAsIDEwLCAxNCwgMjM5LCAxMjksIDEwLCAxNCwgMjM5LCAxMjgsIDEwLCAxNCwgMjM5LCAxMjcsIDEwLCAxNCwgCi0gICAgMjM5LCAxMjYsIDEwLCAxNCwgMjM5LCAxMjUsIDEwLCAxNCwgMjM5LCAxMjQsIDEwLCAxNCwgMjM5LCAxMjMsIDEwLCAxNCwgCi0gICAgMjM5LCAxMjIsIDEwLCAxNCwgMjM5LCAxMjEsIDEwLCAxNCwgMjM5LCAxMjAsIDEwLCAxNCwgMjM5LCAxMTksIDEwLCAxNCwgCi0gICAgMjM5LCAxMTgsIDEwLCAxNCwgMjM5LCAxMTcsIDEwLCAxNCwgMjM5LCAxMTYsIDEwLCAxNCwgMjM5LCAxMTUsIDEwLCAxNCwgCi0gICAgMjM5LCAxMTQsIDEwLCAxNCwgMjM5LCAxMTMsIDEwLCAxNCwgMjM5LCAxMTIsIDEwLCAxNCwgMjM5LCAxMTEsIDEwLCAxNCwgCi0gICAgMjM5LCAxMTAsIDEwLCAxNCwgMjM5LCAxMDksIDEwLCAxNCwgMjM5LCAxMDgsIDEwLCAxNCwgMjM5LCAxMDcsIDEwLCAxNCwgCi0gICAgMjM5LCAxMDYsIDEwLCAxNCwgMjM5LCAxMDUsIDEwLCAxNCwgMjM5LCAxMDQsIDEwLCAxNCwgMjM5LCAxMDMsIDEwLCAxNCwgCi0gICAgMjM5LCAxMDIsIDEwLCAxNCwgMjM5LCAxMDEsIDEwLCAxNCwgMjM5LCAxMDAsIDEwLCAxNCwgMjM5LCA5OSwgMTAsIDE0LCAKLSAgICAyMzksIDk4LCAxMCwgMTQsIDIzOSwgOTcsIDEwLCAxNCwgMjM5LCA5NiwgMTAsIDE0LCAyMzksIDk1LCAxMCwgMTQsIDIzOSwgCi0gICAgOTQsIDEwLCAxNCwgMjM5LCA5MywgMTAsIDE0LCAyMzksIDkyLCAxMCwgMTQsIDIzOSwgOTEsIDEwLCAxNCwgMjM5LCA5MCwgCi0gICAgMTAsIDE0LCAyMzksIDg5LCAxMCwgMTQsIDIzOSwgODgsIDEwLCAxNCwgMjM5LCA4NywgMTAsIDE0LCAyMzksIDg2LCAxMCwgCi0gICAgMTQsIDIzOSwgODUsIDEwLCAxNCwgMjM5LCA4NCwgMTAsIDE0LCAyMzksIDgzLCAxMCwgMTQsIDIzOSwgODIsIDEwLCAxNCwgCi0gICAgMjM5LCA4MSwgMTAsIDE0LCAyMzksIDgwLCAxMCwgMTQsIDIzOSwgNzksIDEwLCAxNCwgMjM5LCA3OCwgMTAsIDE0LCAyMzksIAotICAgIDc3LCAxMCwgMTQsIDIzOSwgNzYsIDEwLCAxNCwgMjM5LCA3NSwgMTAsIDE0LCAyMzksIDc0LCAxMCwgMTQsIDIzOSwgNzMsIAotICAgIDEwLCAxNCwgMjM5LCA3MiwgMTAsIDE0LCAyMzksIDcxLCAxMCwgMTQsIDIzOSwgNzAsIDEwLCAxNCwgMjM5LCA2OSwgMTAsIAotICAgIDE0LCAyMzksIDY4LCAxMCwgMTQsIDIzOSwgNjcsIDEwLCAxNCwgMjM5LCA2NiwgMTAsIDE0LCAyMzksIDY1LCAxMCwgMTQsIAotICAgIDIzOSwgNjQsIDEwLCAxNCwgMjM5LCA2MywgMTAsIDE0LCAyMzksIDYyLCAxMCwgMTQsIDIzOSwgNjEsIDEwLCAxNCwgMjM5LCAKLSAgICA2MCwgMTAsIDE0LCAyMzksIDU5LCAxMCwgMTQsIDIzOSwgNTgsIDEwLCAxNCwgMjM5LCA1NywgMTAsIDE0LCAyMzksIDU2LCAKLSAgICAxMCwgMTQsIDIzOSwgNTUsIDEwLCAxNCwgMjM5LCA1NCwgMTAsIDE0LCAyMzksIDUzLCAxMCwgMTQsIDIzOSwgNTIsIDEwLCAKLSAgICAxNCwgMjM5LCA1MSwgMTAsIDE0LCAyMzksIDUwLCAxMCwgMTQsIDIzOSwgNDksIDEwLCAxNCwgMjM5LCA0OCwgMTAsIDE0LCAKLSAgICAyMzksIDQ3LCAxMCwgMTQsIDIzOSwgNDYsIDEwLCAxNCwgMjM5LCA0NSwgMTAsIDE0LCAyMzksIDQ0LCAxMCwgMTQsIDIzOSwgCi0gICAgNDMsIDEwLCAxNCwgMjM5LCA0MiwgMTAsIDE0LCAyMzksIDQxLCAxMCwgMTQsIDIzOSwgNDAsIDEwLCAxNCwgMjM5LCAzOSwgCi0gICAgMTAsIDE0LCAyMzksIDM4LCAxMCwgMTQsIDIzOSwgMzcsIDEwLCAxNCwgMjM5LCAzNiwgMTAsIDE0LCAyMzksIDM1LCAxMCwgCi0gICAgMTQsIDIzOSwgMzQsIDEwLCAxNCwgMjM5LCAzMywgMTAsIDE0LCAyMzksIDMyLCAxMCwgMTQsIDIzOSwgMzEsIDEwLCAxNCwgCi0gICAgMjM5LCAzMCwgMTAsIDE0LCAyMzksIDI5LCAxMCwgMTQsIDIzOSwgMjgsIDEwLCAxNCwgMjM5LCAyNywgMTAsIDE0LCAyMzksIAotICAgIDI2LCAxMCwgMTQsIDIzOSwgMjUsIDEwLCAxNCwgMjM5LCAyNCwgMTAsIDE0LCAyMzksIDIzLCAxMCwgMTQsIDIzOSwgMjIsIAotICAgIDEwLCAxNCwgMjM5LCAyMSwgMTAsIDE0LCAyMzksIDIwLCAxMCwgMTQsIDIzOSwgMTksIDEwLCAxNCwgMjM5LCAxOCwgMTAsIAotICAgIDE0LCAyMzksIDE3LCAxMCwgMTQsIDIzOSwgMTYsIDEwLCAxNCwgMjM5LCAxNSwgMTAsIDE0LCAyMzksIDE0LCAxMCwgMTQsIAotICAgIDIzOSwgMTMsIDEwLCAxNCwgMjM5LCAxMiwgMTAsIDE0LCAyMzksIDExLCAxMCwgMTQsIDIzOSwgMTAsIDEwLCAxNCwgMjM5LCAKLSAgICA5LCAxMCwgMTQsIDIzOSwgOCwgMTAsIDE0LCAyMzksIDcsIDEwLCAxNCwgMjM5LCA2LCAxMCwgMTQsIDIzOSwgNSwgMTAsIAotICAgIDE0LCAyMzksIDQsIDEwLCAxNCwgMjM5LCAzLCAxMCwgMTQsIDIzOSwgMiwgMTAsIDE0LCAyMzksIDEsIDEwLCAxNCwgMjM5LCAKLSAgICAwLCAxMCwgMTQsIDIzOCwgMjU1LCAxMCwgMTQsIDIzOCwgMjU0LCAxMCwgMTQsIDIzOCwgMjUzLCAxMCwgMTQsIDIzOCwgCi0gICAgMjUyLCAxMCwgMTQsIDIzOCwgMjUxLCAxMCwgMTQsIDIzOCwgMjUwLCAxMCwgMTQsIDIzOCwgMjQ5LCAxMCwgMTQsIDIzOCwgCi0gICAgMjQ4LCAxMCwgMTQsIDIzOCwgMjQ3LCAxMCwgMTQsIDIzOCwgMjQ2LCAxMCwgMTQsIDIzOCwgMjQ1LCAxMCwgMTQsIDIzOCwgCi0gICAgMjQ0LCAxMCwgMTQsIDIzOCwgMjQzLCAxMCwgMTQsIDIzOCwgMjQyLCAxMCwgMTQsIDIzOCwgMjQxLCAxMCwgMTQsIDIzOCwgCi0gICAgMjQwLCAxMCwgMTQsIDIzOCwgMjM5LCAxMCwgMTQsIDIzOCwgMjM4LCAxMCwgMTQsIDIzOCwgMjM3LCAxMCwgMTQsIDIzOCwgCi0gICAgMjM2LCAxMCwgMTQsIDIzOCwgMjM1LCAxMCwgMTQsIDIzOCwgMjM0LCAxMCwgMTQsIDIzOCwgMjMzLCAxMCwgMTQsIDIzOCwgCi0gICAgMjMyLCAxMCwgMTQsIDIzOCwgMjMxLCAxMCwgMTQsIDIzOCwgMjMwLCAxMCwgMTQsIDIzOCwgMjI5LCAxMCwgMTQsIDIzOCwgCi0gICAgMjI4LCAxMCwgMTQsIDIzOCwgMjI3LCAxMCwgMTQsIDIzOCwgMjI2LCAxMCwgMTQsIDIzOCwgMjI1LCAxMCwgMTQsIDIzOCwgCi0gICAgMjI0LCAxMCwgMTQsIDIzOCwgMjIzLCAxMCwgMTQsIDIzOCwgMjIyLCAxMCwgMTQsIDIzOCwgMjIxLCAxMCwgMTQsIDIzOCwgCi0gICAgMjIwLCAxMCwgMTQsIDIzOCwgMjE5LCAxMCwgMTQsIDIzOCwgMjE4LCAxMCwgMTQsIDIzOCwgMjE3LCAxMCwgMTQsIDIzOCwgCi0gICAgMjE2LCAxMCwgMTQsIDIzOCwgMjE1LCAxMCwgMTQsIDIzOCwgMjE0LCAxMCwgMTQsIDIzOCwgMjEzLCAxMCwgMTQsIDIzOCwgCi0gICAgMjEyLCAxMCwgMTQsIDIzOCwgMjExLCAxMCwgMTQsIDIzOCwgMjEwLCAxMCwgMTQsIDIzOCwgMjA5LCAxMCwgMTQsIDIzOCwgCi0gICAgMjA4LCAxMCwgMTQsIDIzOCwgMjA3LCAxMCwgMTQsIDIzOCwgMjA2LCAxMCwgMTQsIDIzOCwgMjA1LCAxMCwgMTQsIDIzOCwgCi0gICAgMjA0LCAxMCwgMTQsIDIzOCwgMjAzLCAxMCwgMTQsIDIzOCwgMjAyLCAxMCwgMTQsIDIzOCwgMjAxLCAxMCwgMTQsIDIzOCwgCi0gICAgMjAwLCAxMCwgMTQsIDIzOCwgMTk5LCAxMCwgMTQsIDIzOCwgMTk4LCAxMCwgMTQsIDIzOCwgMTk3LCAxMCwgMTQsIDIzOCwgCi0gICAgMTk2LCAxMCwgMTQsIDIzOCwgMTk1LCAxMCwgMTQsIDIzOCwgMTk0LCAxMCwgMTQsIDIzOCwgMTkzLCAxMCwgMTQsIDIzOCwgCi0gICAgMTkyLCAxMCwgMTQsIDIzOCwgMTkxLCAxMCwgMTQsIDIzOCwgMTkwLCAxMCwgMTQsIDIzOCwgMTg5LCAxMCwgMTQsIDIzOCwgCi0gICAgMTg4LCAxMCwgMTQsIDIzOCwgMTg3LCAxMCwgMTQsIDIzOCwgMTg2LCAxMCwgMTQsIDIzOCwgMTg1LCAxMCwgMTQsIDIzOCwgCi0gICAgMTg0LCAxMCwgMTQsIDIzOCwgMTgzLCAxMCwgMTQsIDIzOCwgMTgyLCAxMCwgMTQsIDIzOCwgMTgxLCAxMCwgMTQsIDIzOCwgCi0gICAgMTgwLCAxMCwgMTQsIDIzOCwgMTc5LCAxMCwgMTQsIDIzOCwgMTc4LCAxMCwgMTQsIDIzOCwgMTc3LCAxMCwgMTQsIDIzOCwgCi0gICAgMTc2LCAxMCwgMTQsIDIzOCwgMTc1LCAxMCwgMTQsIDIzOCwgMTc0LCAxMCwgMTQsIDIzOCwgMTczLCAxMCwgMTQsIDIzOCwgCi0gICAgMTcyLCAxMCwgMTQsIDIzOCwgMTcxLCAxMCwgMTQsIDIzOCwgMTcwLCAxMCwgMTQsIDIzOCwgMTY5LCAxMCwgMTQsIDIzOCwgCi0gICAgMTY4LCAxMCwgMTQsIDIzOCwgMTY3LCAxMCwgMTQsIDIzOCwgMTY2LCAxMCwgMTQsIDIzOCwgMTY1LCAxMCwgMTQsIDIzOCwgCi0gICAgMTY0LCAxMCwgMTQsIDIzOCwgMTYzLCAxMCwgMTQsIDIzOCwgMTYyLCAxMCwgMTQsIDIzOCwgMTYxLCAxMCwgMTQsIDIzOCwgCi0gICAgMTYwLCAxMCwgMTQsIDIzOCwgMTU5LCAxMCwgMTQsIDIzOCwgMTU4LCAxMCwgMTQsIDIzOCwgMTU3LCAxMCwgMTQsIDIzOCwgCi0gICAgMTU2LCAxMCwgMTQsIDIzOCwgMTU1LCAxMCwgMTQsIDIzOCwgMTU0LCAxMCwgMTQsIDIzOCwgMTUzLCAxMCwgMTQsIDIzOCwgCi0gICAgMTUyLCAxMCwgMTQsIDIzOCwgMTUxLCAxMCwgMTQsIDIzOCwgMTUwLCAxMCwgMTQsIDIzOCwgMTQ5LCAxMCwgMTQsIDIzOCwgCi0gICAgMTQ4LCAxMCwgMTQsIDIzOCwgMTQ3LCAxMCwgMTQsIDIzOCwgMTQ2LCAxMCwgMTQsIDIzOCwgMTQ1LCAxMCwgMTQsIDIzOCwgCi0gICAgMTQ0LCAxMCwgMTQsIDIzOCwgMTQzLCAxMCwgMTQsIDIzOCwgMTQyLCAxMCwgMTQsIDIzOCwgMTQxLCAxMCwgMTQsIDIzOCwgCi0gICAgMTQwLCAxMCwgMTQsIDIzOCwgMTM5LCAxMCwgMTQsIDIzOCwgMTM4LCAxMCwgMTQsIDIzOCwgMTM3LCAxMCwgMTQsIDIzOCwgCi0gICAgMTM2LCAxMCwgMTQsIDIzOCwgMTM1LCAxMCwgMTQsIDIzOCwgMTM0LCAxMCwgMTQsIDIzOCwgMTMzLCAxMCwgMTQsIDIzOCwgCi0gICAgMTMyLCAxMCwgMTQsIDIzOCwgMTMxLCAxMCwgMTQsIDIzOCwgMTMwLCAxMCwgMTQsIDIzOCwgMTI5LCAxMCwgMTQsIDIzOCwgCi0gICAgMTI4LCAxMCwgMTQsIDIzOCwgMTI3LCAxMCwgMTQsIDIzOCwgMTI2LCAxMCwgMTQsIDIzOCwgMTI1LCAxMCwgMTQsIDIzOCwgCi0gICAgMTI0LCAxMCwgMTQsIDIzOCwgMTIzLCAxMCwgMTQsIDIzOCwgMTIyLCAxMCwgMTQsIDIzOCwgMTIxLCAxMCwgMTQsIDIzOCwgCi0gICAgMTIwLCAxMCwgMTQsIDIzOCwgMTE5LCAxMCwgMTQsIDIzOCwgMTE4LCAxMCwgMTQsIDIzOCwgMTE3LCAxMCwgMTQsIDIzOCwgCi0gICAgMTE2LCAxMCwgMTQsIDIzOCwgMTE1LCAxMCwgMTQsIDIzOCwgMTE0LCAxMCwgMTQsIDIzOCwgMTEzLCAxMCwgMTQsIDIzOCwgCi0gICAgMTEyLCAxMCwgMTQsIDIzOCwgMTExLCAxMCwgMTQsIDIzOCwgMTEwLCAxMCwgMTQsIDIzOCwgMTA5LCAxMCwgMTQsIDIzOCwgCi0gICAgMTA4LCAxMCwgMTQsIDIzOCwgMTA3LCAxMCwgMTQsIDIzOCwgMTA2LCAxMCwgMTQsIDIzOCwgMTA1LCAxMCwgMTQsIDIzOCwgCi0gICAgMTA0LCAxMCwgMTQsIDIzOCwgMTAzLCAxMCwgMTQsIDIzOCwgMTAyLCAxMCwgMTQsIDIzOCwgMTAxLCAxMCwgMTQsIDIzOCwgCi0gICAgMTAwLCAxMCwgMTQsIDIzOCwgOTksIDEwLCAxNCwgMjM4LCA5OCwgMTAsIDE0LCAyMzgsIDk3LCAxMCwgMTQsIDIzOCwgOTYsIAotICAgIDEwLCAxNCwgMjM4LCA5NSwgMTAsIDE0LCAyMzgsIDk0LCAxMCwgMTQsIDIzOCwgOTMsIDEwLCAxNCwgMjM4LCA5MiwgMTAsIAotICAgIDE0LCAyMzgsIDkxLCAxMCwgMTQsIDIzOCwgOTAsIDEwLCAxNCwgMjM4LCA4OSwgMTAsIDE0LCAyMzgsIDg4LCAxMCwgMTQsIAotICAgIDIzOCwgODcsIDEwLCAxNCwgMjM4LCA4NiwgMTAsIDE0LCAyMzgsIDg1LCAxMCwgMTQsIDIzOCwgODQsIDEwLCAxNCwgMjM4LCAKLSAgICA4MywgMTAsIDE0LCAyMzgsIDgyLCAxMCwgMTQsIDIzOCwgODEsIDEwLCAxNCwgMjM4LCA4MCwgMjMzLCA5NiwgMjE3LCA4NSwgCi0gICAgMTI5LCAyMTksIDIwLCAxMjksIDI0NSwgMzksIDc5LCAxMjksIDIyNCwgMSwgNzksIDEyOSwgNTQsIDUwLCAxMjksIDI0NywgCi0gICAgMTQwLCA1MCwgMTI5LCAyMjUsIDE4NSwgNTAsIDEyOSwgMjU0LCAxMzQsIDEyOSwgMjU0LCA2NSwgMTI5LCA0MywgMjI2LCA3LCAKLSAgICAxMjksIDQ0LCAyMjYsIDcsIDEyOSwgMjUzLCAyMjQsIDEyOSwgOTYsIDUwLCAxMjksIDI0OSwgMjI3LCAxMjksIDI0MCwgCi0gICAgMTc0LCAxMjksIDI0MywgMjM2LCAyMTgsIDEzMSwgMTI5LCAyMTksIDQ4LCAxMjksIDIxLCAyMTAsIDg2LCAxMjksIDIxLCAKLSAgICAxMTEsIDEyOSwgMjEsIDEwNSwgMTI5LCAyMSwgMTU4LCAxMjksIDIxLCAxNjEsIDEyOSwgMjEsIDE5MCwgMTI5LCAyMSwgCi0gICAgMTk1LCAxMjksIDIxLCAxOTksIDEyOSwgMjEsIDE5NiwgMTI5LCAyMSwgMjAxLCAxMjksIDI0OSwgMjM0LCAxMjksIDIyMCwgCi0gICAgMTUyLCAxMjksIDIzMywgMjEsIDUwLCAxMjksIDI0NSwgMTA2LCA1MCwgMTI5LCAyNDIsIDEzNywgNTAsIDEyOSwgMjI0LCAKLSAgICAxNiwgNzksIDEyOSwgMjQ5LCAyMjUsIDI1MywgMjE0LCAxMjksIDcsIDYsIDEsIDYxLCAxMjksIDcsIDYsIDEsIDI1MywgCi0gICAgMTY2LCAxMjksIDcsIDYsIDEsIDI1MSwgNzQsIDEyOSwgNywgNiwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA2LCAxLCA3NiwgMTI5LCAKLSAgICA3LCA2LCAxLCAyNDUsIDE0LCAxMjksIDcsIDYsIDEsIDI0MywgMjA5LCAxMjksIDcsIDYsIDEsIDI0MiwgNjcsIDEyOSwgNywgCi0gICAgNiwgMSwgNzQsIDEyOSwgNywgNiwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNiwgMSwgMjM1LCAyOSwgMTI5LCA3LCA2LCAxLCAKLSAgICAxNTYsIDEyOSwgNywgNiwgMSwgMTk0LCAxMjksIDcsIDYsIDEsIDIzMCwgMzAsIDEyOSwgNywgNiwgMSwgNzgsIDEyOSwgNywgCi0gICAgNiwgMSwgMjI2LCAxMDksIDEyOSwgNywgNiwgMSwgMjI0LCA5OSwgMTI5LCA3LCA2LCAxLCAxNTMsIDEyOSwgNywgNiwgMSwgCi0gICAgMjIyLCA5MywgMTI5LCA3LCA2LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA2LCAxLCA2OSwgMTI5LCA3LCA2LCAxLCAyMTQsIAotICAgIDEwNSwgMTI5LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjksIDcsIDYsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDYsIDEsIDIxMSwgCi0gICAgMTE3LCAxMjksIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCA0MiwgMTI3LCAxMjksIDIyMywgNTMsIDIxOSwgNDgsIAotICAgIDEyOSwgNDQsIDQyLCAxMjcsIDEyOSwgMjUwLCAzOSwgMjU1LCAyMywgMTI5LCAxMjEsIDIzMiwgMjE5LCAxMjksIDI0MiwgCi0gICAgMTQ0LCAyNTUsIDIzLCAxMjksIDcsIDQsIDEsIDYxLCAxMjksIDcsIDQsIDEsIDI1MywgMTY2LCAxMjksIDcsIDQsIDEsIAotICAgIDI1MSwgNzQsIDEyOSwgNywgNCwgMSwgMjQ5LCA2OCwgMTI5LCA3LCA0LCAxLCA3NiwgMTI5LCA3LCA0LCAxLCAyNDUsIDE0LCAKLSAgICAxMjksIDcsIDQsIDEsIDI0MywgMjA5LCAxMjksIDcsIDQsIDEsIDI0MiwgNjcsIDEyOSwgNywgNCwgMSwgNzQsIDEyOSwgNywgCi0gICAgNCwgMSwgMjM1LCAxNTAsIDEyOSwgNywgNCwgMSwgMjM1LCAyOSwgMTI5LCA3LCA0LCAxLCAxNTYsIDEyOSwgNywgNCwgMSwgCi0gICAgMTk0LCAxMjksIDcsIDQsIDEsIDIzMCwgMzAsIDEyOSwgNywgNCwgMSwgNzgsIDEyOSwgNywgNCwgMSwgMjI2LCAxMDksIAotICAgIDEyOSwgNywgNCwgMSwgMjI0LCA5OSwgMTI5LCA3LCA0LCAxLCAxNTMsIDEyOSwgNywgNCwgMSwgMjIyLCA5MywgMTI5LCA3LCAKLSAgICA0LCAxLCAyMTcsIDE1MywgMTI5LCA3LCA0LCAxLCA2OSwgMTI5LCA3LCA0LCAxLCAyMTQsIDEwNSwgMTI5LCA3LCA0LCAxLCAKLSAgICAyMTIsIDk4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTE3LCAxMjksIDcsIDQsIDEsIAotICAgIDIxMCwgMTU5LCAxMjksIDQzLCAyNDksIDEwNywgMTI3LCAxMjksIDY3LCAyMzIsIDIxOSwgMTI5LCA0NCwgMjQ5LCAxMDcsIAotICAgIDEyNywgMTI5LCAxODQsIDI1MSwgMTQsIDIxNywgODUsIDQ1LCAyMjEsIDgwLCA0NSwgMjIxLCA2OSwgNDUsIDIyMSwgNTgsIAotICAgIDQ1LCAyMjEsIDQ2LCA0NSwgMjIxLCAzNSwgNDUsIDIyMSwgMjQsIDQ1LCAyMjEsIDEzLCA0NSwgMjIxLCAyLCA0NSwgMjIwLCAKLSAgICAyNDcsIDQ1LCAyMjAsIDIzOSwgNDUsIDIyMCwgMjM4LCA0NSwgMjIwLCAyMzcsIDQ1LCAyMjAsIDIzNiwgNDUsIDIyMCwgCi0gICAgMjM0LCA0NSwgMjIwLCAyMzMsIDQ1LCAyMjAsIDIzMiwgNDUsIDIyMCwgMjMxLCA0NSwgMjIwLCAyMzAsIDQ1LCAyMjAsIAotICAgIDIyOSwgNDUsIDIyMCwgMjI4LCA0NSwgMjIwLCAyMjcsIDQ1LCAyMjAsIDIyNiwgNDUsIDIyMCwgMjI1LCA0NSwgMjIwLCAKLSAgICAyMjMsIDQ1LCAyMjAsIDIyMiwgNDUsIDIyMCwgMjIxLCA0NSwgMjIwLCAyMjAsIDQ1LCAyMjAsIDIxOSwgNDUsIDIyMCwgCi0gICAgMjE4LCA0NSwgMjIwLCAyMTcsIDQ1LCAyMjAsIDIxNiwgNDUsIDIyMCwgMjE1LCA0NSwgMjIwLCAyMTQsIDQ1LCAyMjAsIAotICAgIDIxMiwgNDUsIDIyMCwgMjExLCA0NSwgMjIwLCAyMTAsIDQ1LCAyMjAsIDIwOSwgNDUsIDIyMCwgMjA4LCA0NSwgMjIwLCAKLSAgICAyMDcsIDQ1LCAyMjAsIDIwNiwgNDUsIDIyMCwgMjA1LCA0NSwgMjIwLCAyMDQsIDQ1LCAyMjAsIDIwMywgNDUsIDIyMCwgCi0gICAgMjAxLCA0NSwgMjIwLCAyMDAsIDQ1LCAyMjAsIDE5OSwgNDUsIDIyMCwgMTk4LCA0NSwgMjIwLCAxOTcsIDQ1LCAyMjAsIAotICAgIDE5NiwgNDUsIDIyMCwgMTk1LCA0NSwgMjIwLCAxOTQsIDQ1LCAyMjAsIDE5MywgNDUsIDIyMCwgMTkyLCA0NSwgMjIwLCAKLSAgICAxOTAsIDQ1LCAyMjAsIDE4OSwgNDUsIDIyMCwgMTg4LCA0NSwgMjIwLCAxODcsIDQ1LCAyMjAsIDE4NiwgNDUsIDIyMCwgCi0gICAgMTg1LCA0NSwgMjIwLCAxODQsIDQ1LCAyMjAsIDE4MywgNDUsIDIyMCwgMTgyLCA0NSwgMjIwLCAxODEsIDQ1LCAyMjAsIAotICAgIDE3OSwgNDUsIDIyMCwgMTc4LCA0NSwgMjIwLCAxNzcsIDQ1LCAyMjAsIDE3NiwgNDUsIDIyMCwgMTc1LCA0NSwgMjIwLCAKLSAgICAxNzQsIDQ1LCAyMjAsIDE3MywgNDUsIDIyMCwgMTcyLCA0NSwgMjIwLCAxNzEsIDQ1LCAyMjAsIDE3MCwgNDUsIDIyMCwgCi0gICAgMTY4LCA0NSwgMjIwLCAxNjcsIDQ1LCAyMjAsIDE2NiwgNDUsIDIyMCwgMTY1LCA0NSwgMjIwLCAxNjQsIDQ1LCAyMjAsIAotICAgIDE2MywgNDUsIDIyMCwgMTYyLCA0NSwgMjIwLCAxNjEsIDQ1LCAyMjAsIDE2MCwgNDUsIDIyMCwgMTU5LCA0NSwgMjIxLCAKLSAgICAxNTYsIDQ1LCAyMjEsIDE1NSwgNDUsIDIyMSwgMTU0LCA0NSwgMjIxLCAxNTMsIDQ1LCAyMjEsIDE1MiwgNDUsIDIyMSwgCi0gICAgMTUxLCA0NSwgMjIxLCAxNTAsIDQ1LCAyMjEsIDE0OSwgNDUsIDIyMSwgMTQ4LCA0NSwgMjIxLCAxNDcsIDQ1LCAyMjEsIAotICAgIDE0NSwgNDUsIDIyMSwgMTQ0LCA0NSwgMjIxLCAxNDMsIDQ1LCAyMjEsIDE0MiwgNDUsIDIyMSwgMTQxLCA0NSwgMjIxLCAKLSAgICAxNDAsIDQ1LCAyMjEsIDEzOSwgNDUsIDIyMSwgMTM4LCA0NSwgMjIxLCAxMzcsIDQ1LCAyMjEsIDEzNiwgNDUsIDIyMSwgCi0gICAgMTM0LCA0NSwgMjIxLCAxMzMsIDQ1LCAyMjEsIDEzMiwgNDUsIDIyMSwgMTMxLCA0NSwgMjIxLCAxMzAsIDQ1LCAyMjEsIAotICAgIDEyOSwgNDUsIDIyMSwgMTI4LCA0NSwgMjIxLCAxMjcsIDQ1LCAyMjEsIDEyNiwgNDUsIDIyMSwgMTI1LCA0NSwgMjIxLCAKLSAgICAxMjMsIDQ1LCAyMjEsIDEyMiwgNDUsIDIyMSwgMTIxLCA0NSwgMjIxLCAxMjAsIDQ1LCAyMjEsIDExOSwgNDUsIDIyMSwgCi0gICAgMTE4LCA0NSwgMjIxLCAxMTcsIDQ1LCAyMjEsIDExNiwgNDUsIDIyMSwgMTE1LCA0NSwgMjIxLCAxMTQsIDQ1LCAyMjEsIAotICAgIDExMiwgNDUsIDIyMSwgMTExLCA0NSwgMjIxLCAxMTAsIDQ1LCAyMjEsIDEwOSwgNDUsIDIyMSwgMTA4LCA0NSwgMjIxLCAKLSAgICAxMDcsIDQ1LCAyMjEsIDEwNiwgNDUsIDIyMSwgMTA1LCA0NSwgMjIxLCAxMDQsIDQ1LCAyMjEsIDEwMywgNDUsIDIyMSwgCi0gICAgMTAxLCA0NSwgMjIxLCAxMDAsIDQ1LCAyMjEsIDk5LCA0NSwgMjIxLCA5OCwgNDUsIDIyMSwgOTcsIDQ1LCAyMjEsIDk2LCAKLSAgICA0NSwgMjIxLCA5NSwgNDUsIDIyMSwgOTQsIDQ1LCAyMjEsIDkzLCA0NSwgMjIxLCA5MiwgNDUsIDIyMSwgOTAsIDQ1LCAyMjEsIAotICAgIDg5LCA0NSwgMjIxLCA4OCwgNDUsIDIyMSwgODcsIDQ1LCAyMjEsIDg2LCA0NSwgMjIxLCA4NSwgNDUsIDIyMSwgODQsIDQ1LCAKLSAgICAyMjEsIDgzLCA0NSwgMjIxLCA4MiwgNDUsIDIyMSwgODEsIDQ1LCAyMjEsIDc5LCA0NSwgMjIxLCA3OCwgNDUsIDIyMSwgNzcsIAotICAgIDQ1LCAyMjEsIDc2LCA0NSwgMjIxLCA3NSwgNDUsIDIyMSwgNzQsIDQ1LCAyMjEsIDczLCA0NSwgMjIxLCA3MiwgNDUsIDIyMSwgCi0gICAgNzEsIDQ1LCAyMjEsIDcwLCA0NSwgMjIxLCA2OCwgNDUsIDIyMSwgNjcsIDQ1LCAyMjEsIDY2LCA0NSwgMjIxLCA2NSwgNDUsIAotICAgIDIyMSwgNjQsIDQ1LCAyMjEsIDYzLCA0NSwgMjIxLCA2MiwgNDUsIDIyMSwgNjEsIDQ1LCAyMjEsIDYwLCA0NSwgMjIxLCA1OSwgCi0gICAgNDUsIDIyMSwgNTcsIDQ1LCAyMjEsIDU2LCA0NSwgMjIxLCA1NSwgNDUsIDIyMSwgNTQsIDQ1LCAyMjEsIDUzLCA0NSwgMjIxLCAKLSAgICA1MiwgNDUsIDIyMSwgNTEsIDQ1LCAyMjEsIDUwLCA0NSwgMjIxLCA0OSwgNDUsIDIyMSwgNDgsIDQ1LCAyMjEsIDQ1LCA0NSwgCi0gICAgMjIxLCA0NCwgNDUsIDIyMSwgNDMsIDQ1LCAyMjEsIDQyLCA0NSwgMjIxLCA0MSwgNDUsIDIyMSwgNDAsIDQ1LCAyMjEsIDM5LCAKLSAgICA0NSwgMjIxLCAzOCwgNDUsIDIyMSwgMzcsIDQ1LCAyMjEsIDM2LCA0NSwgMjIxLCAzNCwgNDUsIDIyMSwgMzMsIDQ1LCAyMjEsIAotICAgIDMyLCA0NSwgMjIxLCAzMSwgNDUsIDIyMSwgMzAsIDQ1LCAyMjEsIDI5LCA0NSwgMjIxLCAyOCwgNDUsIDIyMSwgMjcsIDQ1LCAKLSAgICAyMjEsIDI2LCA0NSwgMjIxLCAyNSwgNDUsIDIyMSwgMjMsIDQ1LCAyMjEsIDIyLCA0NSwgMjIxLCAyMSwgNDUsIDIyMSwgMjAsIAotICAgIDQ1LCAyMjEsIDE5LCA0NSwgMjIxLCAxOCwgNDUsIDIyMSwgMTcsIDQ1LCAyMjEsIDE2LCA0NSwgMjIxLCAxNSwgNDUsIDIyMSwgCi0gICAgMTQsIDQ1LCAyMjEsIDEyLCA0NSwgMjIxLCAxMSwgNDUsIDIyMSwgMTAsIDQ1LCAyMjEsIDksIDQ1LCAyMjEsIDgsIDQ1LCAKLSAgICAyMjEsIDcsIDQ1LCAyMjEsIDYsIDQ1LCAyMjEsIDUsIDQ1LCAyMjEsIDQsIDQ1LCAyMjEsIDMsIDQ1LCAyMjEsIDEsIDQ1LCAKLSAgICAyMjEsIDAsIDQ1LCAyMjAsIDI1NSwgNDUsIDIyMCwgMjU0LCA0NSwgMjIwLCAyNTMsIDQ1LCAyMjAsIDI1MiwgNDUsIDIyMCwgCi0gICAgMjUxLCA0NSwgMjIwLCAyNTAsIDQ1LCAyMjAsIDI0OSwgNDUsIDIyMCwgMjQ4LCA0NSwgMjIwLCAyNDYsIDQ1LCAyMjAsIAotICAgIDI0NSwgNDUsIDIyMCwgMjQ0LCA0NSwgMjIwLCAyNDMsIDQ1LCAyMjAsIDI0MiwgNDUsIDIyMCwgMjQxLCA0NSwgMjIwLCAKLSAgICAyNDAsIDIyNywgMjA2LCAyMjcsIDIwOCwgMjE4LCAxNTQsIDY0LCAyNDEsIDI0MCwgMjE5LCA1MCwgMjE4LCAxNTQsIDY0LCAKLSAgICAyMTYsIDIxMywgMjE4LCA4NiwgMjQ1LCAxNTEsIDY0LCAyMTYsIDIxMywgMjQ1LCA2NCwgMjQ1LCAxNTEsIDY0LCAyMTUsIAotICAgIDI0NCwgMjQ1LCAxMTcsIDI0NSwgMTQwLCAyNDUsIDE0MSwgMjU1LCAxNiwgMjU1LCAxNywgMjU0LCAxNzYsIDI1MiwgNTUsIAotICAgIDI1MiwgMTg3LCAyNTEsIDEzOSwgMTM1LCAyMTcsIDkwLCAyMDMsIDIxNywgOTAsIDI0MCwgMjM0LCAyMTcsIDk0LCAyMzIsIAotICAgIDIyMCwgMjQ0LCAxNTMsIDE2NiwgMjMyLCAyMTksIDI0NSwgMTUxLCA2NCwgMjMyLCAyMTksIDIzMywgNiwgMjI4LCAxNDAsIAotICAgIDI0NSwgMTIwLCAyMzIsIDIyMCwgMjE3LCA5MCwgNjcsIDIxNywgOTAsIDIxMiwgMTE4LCAyNDQsIDI4LCAyNDQsIDE1MywgCi0gICAgMjQ0LCAxMzMsIDI1MCwgMjM4LCAyMjMsIDU2LCAyNDksIDE1MSwgMjIwLCAzMCwgMjI2LCAxMzQsIDIzMiwgMTU2LCAxMTEsIAotICAgIDIxOSwgNjAsIDIyMCwgMzAsIDIzNiwgNiwgMjMyLCAxNTYsIDIxMCwgODYsIDIxOSwgMTkzLCAyNDgsIDE1OSwgMjMyLCAKLSAgICAyMTAsIDI0NSwgODUsIDI0NywgMTYzLCAyNDgsIDM5LCAyNDksIDE4NiwgMTExLCAyNDgsIDE0OSwgMjQ4LCAzOSwgMjQ5LCAKLSAgICAxODYsIDEwNSwgMjQ4LCAxNDgsIDI0OCwgMzksIDI0OSwgMTg2LCAxNTgsIDI0OCwgMTQ3LCAyNDgsIDM5LCAyNDksIDE4NiwgCi0gICAgMTYxLCAyNDgsIDE0NiwgMTUyLCAyNTUsIDE2LCAyMjksIDIxNCwgMjE3LCAxNzgsIDIzNiwgNjksIDIxNywgMTgxLCAyNDUsIAotICAgIDE1MSwgNjQsIDIxNSwgMjQ1LCAyNTEsIDIyMSwgMjQ1LCA3MCwgMjUxLCAxMywgMjUxLCAxNSwgMjQ1LCAxNTEsIDY0LCAKLSAgICAyMzEsIDg2LCAyNDUsIDExOCwgMjE4LCA2MiwgMjE4LCA3OSwgMjQ1LCA4NSwgMjQ1LCA4NiwgMjM1LCAyMzksIDIyMCwgCi0gICAgMTQwLCAxNjEsIDI0NCwgMTE1LCAyMjAsIDEzOSwgMjQzLCAyNDUsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTU4LCAyNDIsIAotICAgIDEyOCwgMjIwLCAxMzksIDI0MiwgMTI1LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDEwNSwgMjIzLCAxMjQsIDIyMCwgMTM5LCAKLSAgICAyMjIsIDE0NywgMjM1LCAyMzksIDIyMCwgMTQwLCAxMTEsIDIxNCwgMTc0LCAyMjAsIDEzOSwgMjE0LCAxMzMsIDIxOSwgMjMsIAotICAgIDI0OCwgNzEsIDI0OCwgNzMsIDIyNiwgODIsIDI1MCwgMTUwLCAyMjYsIDg0LCAxMjUsIDIyNiwgMjQ0LCAyMjQsIDE5NiwgCi0gICAgMjQxLCA1NCwgMjUxLCAxNTgsIDIyNSwgMTc2LCAyNDEsIDIxMCwgMjUxLCAxNjksIDIyOCwgODAsIDI1MSwgMTU4LCAyNDEsIAotICAgIDIxMCwgMjI5LCAxODAsIDIzNSwgMjQ5LCAyMzUsIDI1MSwgMjI5LCA4NywgMjMyLCAyMTksIDIyOSwgMTA0LCAyMTgsIDE1NCwgCi0gICAgNjQsIDIyMSwgMTYwLCAyNTQsIDI2LCAyMTgsIDIyNSwgMjQ1LCAxNTEsIDY0LCAyMjEsIDE2MCwgMjU0LCAyNiwgMjQ1LCAKLSAgICA4OCwgMTM1LCAyMTcsIDkxLCAyMjAsIDEyOSwgMjAzLCAyMTcsIDkxLCAyMjAsIDEyOSwgMjQwLCAyMzEsIDEzNSwgMjE3LCAKLSAgICA5MSwgMiwgMjM1LCA0MSwgMjAzLCAyMTcsIDkxLCAyLCAyMzUsIDQxLCAyNDAsIDIzMiwgMjMyLCAyMjAsIDIxNywgOTEsIAotICAgIDIyMCwgMTI5LCA2NywgMjE3LCA5MSwgMjIwLCAxMjksIDIxMiwgMTE3LCAyMjYsIDEsIDIzMiwgMjIwLCAyNDQsIDIyLCAKLSAgICAyMjYsIDEsIDIzMiwgMjIwLCAyNDYsIDExNCwgMjI1LCAzNSwgMjI2LCAxLCAyMzIsIDIyMCwgMjUyLCAxODYsIDIyNiwgMSwgCi0gICAgMjMyLCAyMjAsIDIxNCwgMTYzLCAyMjUsIDMxLCAyMjMsIDUzLCAyMzIsIDIyMCwgMjQ0LCAxNTMsIDIyMywgNTMsIDIzNSwgCi0gICAgMjQ5LCAyMjMsIDM4LCAyMTksIDE1NywgMjIwLCAzMCwgMTA1LCAyMTksIDE1NCwgMjE4LCAyMjcsIDIxOSwgMTU3LCAyMjAsIAotICAgIDMwLCAxNTgsIDIxOSwgMTUzLCAyMTgsIDIyNiwgMjQ4LCAzOSwgMjQ5LCAxODYsIDIxOCwgMTA3LCAyNDgsIDE0NSwgMjI0LCAKLSAgICAxODYsIDIxNCwgMTMyLCAxMTEsIDIyNCwgMTg2LCAyMTQsIDEzMCwgMjI0LCAxNTIsIDIyNCwgMTg2LCAyMTQsIDEzMiwgCi0gICAgMTA1LCAyMjQsIDE4NiwgMjE0LCAxMjksIDIyNCwgMTUxLCAyMjAsIDEzMCwgMjE1LCAyNDMsIDIxOCwgMTUzLCAyMTgsIDkwLCAKLSAgICAyNTEsIDE0LCAyNTAsIDE1MCwgMjUwLCAyMTcsIDIzMSwgNDgsIDIxMiwgNTksIDIzMCwgNDgsIDIxOCwgMTU0LCA2NCwgCi0gICAgMjQyLCAxMTQsIDI1NCwgMjYsIDIxOCwgMTU0LCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDIxOSwgMjIsIDI0NSwgMTUxLCAKLSAgICA2NCwgMjQyLCAxMTQsIDI1NCwgMjYsIDI0NSwgMTUxLCA2NCwgMjI0LCAxNjksIDI1NCwgMjYsIDI0NSwgMTE1LCAyMTgsIAotICAgIDE1NCwgNjQsIDIxOCwgMTA3LCAyMTksIDM3LCAyMTksIDE1NywgMjQyLCAxNDgsIDEzNSwgMjM1LCAyMDIsIDIyMCwgMTA5LCAKLSAgICAyMTksIDE1NywgMTM1LCAyMzUsIDIwMiwgMjIxLCAxOTYsIDI0OSwgMTg2LCAyMjAsIDEzNywgMjM1LCAyMDIsIDI0OSwgCi0gICAgMTIxLCAyMTgsIDEwOCwgMjE2LCAyMzcsIDIxOCwgMTcwLCAyMjYsIDE3MywgMjE3LCAxNjgsIDI0OSwgMjI2LCAyMjYsIAotICAgIDE0NiwgMjI0LCAxODcsIDIzMSwgNDcsIDIyNSwgMjIsIDI1NCwgNjEsIDIyNCwgMTgxLCAyNDksIDIyNiwgMjU0LCA3NywgCi0gICAgMjI5LCAxNjgsIDIxOSwgMjAyLCA3LCA2LCAxLCAyNDMsIDAsIDcsIDQsIDEsIDI0MywgMCwgMjUwLCAxNjcsIDI1NCwgMTU3LCAKLSAgICAxODMsIDIxOCwgNjgsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjMzLCA1MiwgMTY1LCAxLCAyMzIsIDE4MSwgMjA5LCAyMDksIDEsIAotICAgIDI0NCwgNTIsIDI0NCwgNDQsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyNDQsIDE2NSwgMjA5LCAyMDksIDEsIDIyMiwgMjEzLCAKLSAgICAyMDksIDIwOSwgMSwgMjMyLCAxNjIsIDYzLCAxNjQsIDI1MSwgMjMxLCAyMjAsIDUsIDI0MiwgMjIyLCAyMzAsIDI1MywgCi0gICAgMjIzLCA0NCwgMjQzLCAyMjMsIDI0MywgMjIyLCAyNDMsIDIyMSwgMjMwLCA1MCwgMjA5LCAyNTEsIDIwOSwgMjUyLCAyMDksIAotICAgIDI1NCwgMjMyLCAxMDcsIDIyMiwgMjIxLCAyMzIsIDEwOSwgMjIyLCAyMjMsIDIyNSwgMjI3LCAyMzIsIDEwNiwgMjIyLCAKLSAgICAyMjAsIDIyOCwgMTExLCAyMzAsIDE3MCwgMjExLCAyMjksIDIzMiwgMTA4LCAyMjIsIDIyMiwgMjQzLCAyNDQsIDIyNSwgCi0gICAgMjI2LCAyMTIsIDE1LCAyNDUsIDE3MCwgMjQzLCAyMzMsIDIzMCwgMjM0LCAyMjYsIDIwMSwgMjE0LCAxMzQsIDg3LCAyMzAsIAotICAgIDIzNCwgMjQ4LCAxNjUsIDg3LCA4LCAzLCAyMzUsIDE2NCwgNzksIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA3MSwgCi0gICAgMjMzLCAyNiwgMTI3LCAyMTMsIDExOCwgMjEzLCA3LCAyMTIsIDE5NSwgMjEyLCAxODQsIDIxMiwgMTczLCAyMTIsIDE2MiwgCi0gICAgMjEyLCAxNTEsIDIxMiwgMTQwLCAyMTIsIDEyOSwgMjEzLCAxMTcsIDIxMywgMTA2LCAyMTMsIDk1LCAyMTMsIDg0LCAyMTMsIAotICAgIDczLCAyMTMsIDYyLCAyMTMsIDUxLCAyNTEsIDc5LCAyMjYsIDE1OSwgNzksIDI1MSwgMjA0LCAyMDksIDI1MywgMTUsIDUsIAotICAgIDIyNywgMjE1LCAyMTYsIDI0MCwgMTUsIDUsIDIyNywgMjE1LCAxMTUsIDIyNywgMjE1LCAyNTEsIDEwNywgMTE1LCAyNTEsIAotICAgIDEwNiwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIxOSwgMTA0LCAyNTAsIDgxLCAyMTQsIDksIDIxMywgNDAsIDIxMywgMjksIAotICAgIDIxMywgMTgsIDIxMywgNiwgMjEyLCAyNTEsIDIxMiwgMjQwLCAyMTIsIDIyOSwgMjEyLCAyMTgsIDIxMiwgMjA3LCAyMTIsIAotICAgIDE5OSwgMjEyLCAxOTgsIDIxMiwgMTk3LCAyMTIsIDE5NiwgMjEyLCAxOTQsIDIxMiwgMTkzLCAyMTIsIDE5MiwgMjEyLCAKLSAgICAxOTEsIDIxMiwgMTkwLCAyMTIsIDE4OSwgMjEyLCAxODgsIDIxMiwgMTg3LCAyMTIsIDE4NiwgMjEyLCAxODUsIDIxMiwgCi0gICAgMTgzLCAyMTIsIDE4MiwgMjEyLCAxODEsIDIxMiwgMTgwLCAyMTIsIDE3OSwgMjEyLCAxNzgsIDIxMiwgMTc3LCAyMTIsIAotICAgIDE3NiwgMjEyLCAxNzUsIDIxMiwgMTc0LCAyMTIsIDE3MiwgMjEyLCAxNzEsIDIxMiwgMTcwLCAyMTIsIDE2OSwgMjEyLCAKLSAgICAxNjgsIDIxMiwgMTY3LCAyMTIsIDE2NiwgMjEyLCAxNjUsIDIxMiwgMTY0LCAyMTIsIDE2MywgMjEyLCAxNjEsIDIxMiwgCi0gICAgMTYwLCAyMTIsIDE1OSwgMjEyLCAxNTgsIDIxMiwgMTU3LCAyMTIsIDE1NiwgMjEyLCAxNTUsIDIxMiwgMTU0LCAyMTIsIAotICAgIDE1MywgMjEyLCAxNTIsIDIxMiwgMTUwLCAyMTIsIDE0OSwgMjEyLCAxNDgsIDIxMiwgMTQ3LCAyMTIsIDE0NiwgMjEyLCAKLSAgICAxNDUsIDIxMiwgMTQ0LCAyMTIsIDE0MywgMjEyLCAxNDIsIDIxMiwgMTQxLCAyMTIsIDEzOSwgMjEyLCAxMzgsIDIxMiwgCi0gICAgMTM3LCAyMTIsIDEzNiwgMjEyLCAxMzUsIDIxMiwgMTM0LCAyMTIsIDEzMywgMjEyLCAxMzIsIDIxMiwgMTMxLCAyMTIsIAotICAgIDEzMCwgMjEyLCAxMjgsIDIxMiwgMTI3LCAyMTIsIDEyNiwgMjEyLCAxMjUsIDIxMiwgMTI0LCAyMTIsIDEyMywgMjEyLCAKLSAgICAxMjIsIDIxMiwgMTIxLCAyMTIsIDEyMCwgMjEyLCAxMTksIDIxMywgMTE2LCAyMTMsIDExNSwgMjEzLCAxMTQsIDIxMywgCi0gICAgMTEzLCAyMTMsIDExMiwgMjEzLCAxMTEsIDIxMywgMTEwLCAyMTMsIDEwOSwgMjEzLCAxMDgsIDIxMywgMTA3LCAyMTMsIAotICAgIDEwNSwgMjEzLCAxMDQsIDIxMywgMTAzLCAyMTMsIDEwMiwgMjEzLCAxMDEsIDIxMywgMTAwLCAyMTMsIDk5LCAyMTMsIDk4LCAKLSAgICAyMTMsIDk3LCAyMTMsIDk2LCAyMTMsIDk0LCAyMTMsIDkzLCAyMTMsIDkyLCAyMTMsIDkxLCAyMTMsIDkwLCAyMTMsIDg5LCAKLSAgICAyMTMsIDg4LCAyMTMsIDg3LCAyMTMsIDg2LCAyMTMsIDg1LCAyMTMsIDgzLCAyMTMsIDgyLCAyMTMsIDgxLCAyMTMsIDgwLCAKLSAgICAyMTMsIDc5LCAyMTMsIDc4LCAyMTMsIDc3LCAyMTMsIDc2LCAyMTMsIDc1LCAyMTMsIDc0LCAyMTMsIDcyLCAyMTMsIDcxLCAKLSAgICAyMTMsIDcwLCAyMTMsIDY5LCAyMTMsIDY4LCAyMTMsIDY3LCAyMTMsIDY2LCAyMTMsIDY1LCAyMTMsIDY0LCAyMTMsIDYzLCAKLSAgICAyMTMsIDYxLCAyMTMsIDYwLCAyMTMsIDU5LCAyMTMsIDU4LCAyMTMsIDU3LCAyMTMsIDU2LCAyMTMsIDU1LCAyMTMsIDU0LCAKLSAgICAyMTMsIDUzLCAyMTMsIDUyLCAyMTMsIDUwLCAyMTMsIDQ5LCAyMTMsIDQ4LCAyMTMsIDQ3LCAyMTMsIDQ2LCAyMTMsIDQ1LCAKLSAgICAyMTMsIDQ0LCAyMTMsIDQzLCAyMTMsIDQyLCAyMTMsIDQxLCAyMTMsIDM5LCAyMTMsIDM4LCAyMTMsIDM3LCAyMTMsIDM2LCAKLSAgICAyMTMsIDM1LCAyMTMsIDM0LCAyMTMsIDMzLCAyMTMsIDMyLCAyMTMsIDMxLCAyMTMsIDMwLCAyMTMsIDI4LCAyMTMsIDI3LCAKLSAgICAyMTMsIDI2LCAyMTMsIDI1LCAyMTMsIDI0LCAyMTMsIDIzLCAyMTMsIDIyLCAyMTMsIDIxLCAyMTMsIDIwLCAyMTMsIDE5LCAKLSAgICAyMTMsIDE3LCAyMTMsIDE2LCAyMTMsIDE1LCAyMTMsIDE0LCAyMTMsIDEzLCAyMTMsIDEyLCAyMTMsIDExLCAyMTMsIDEwLCAKLSAgICAyMTMsIDksIDIxMywgOCwgMjEzLCA1LCAyMTMsIDQsIDIxMywgMywgMjEzLCAyLCAyMTMsIDEsIDIxMywgMCwgMjEyLCAyNTUsIAotICAgIDIxMiwgMjU0LCAyMTIsIDI1MywgMjEyLCAyNTIsIDIxMiwgMjUwLCAyMTIsIDI0OSwgMjEyLCAyNDgsIDIxMiwgMjQ3LCAKLSAgICAyMTIsIDI0NiwgMjEyLCAyNDUsIDIxMiwgMjQ0LCAyMTIsIDI0MywgMjEyLCAyNDIsIDIxMiwgMjQxLCAyMTIsIDIzOSwgCi0gICAgMjEyLCAyMzgsIDIxMiwgMjM3LCAyMTIsIDIzNiwgMjEyLCAyMzUsIDIxMiwgMjM0LCAyMTIsIDIzMywgMjEyLCAyMzIsIAotICAgIDIxMiwgMjMxLCAyMTIsIDIzMCwgMjEyLCAyMjgsIDIxMiwgMjI3LCAyMTIsIDIyNiwgMjEyLCAyMjUsIDIxMiwgMjI0LCAKLSAgICAyMTIsIDIyMywgMjEyLCAyMjIsIDIxMiwgMjIxLCAyMTIsIDIyMCwgMjEyLCAyMTksIDIxMiwgMjE3LCAyMTIsIDIxNiwgCi0gICAgMjEyLCAyMTUsIDIxMiwgMjE0LCAyMTIsIDIxMywgMjEyLCAyMTIsIDIxMiwgMjExLCAyMTIsIDIxMCwgMjEyLCAyMDksIAotICAgIDIxMiwgMjA4LCAyMTIsIDIwNiwgMjEyLCAyMDUsIDIxMiwgMjA0LCAyMTIsIDIwMywgMjEyLCAyMDIsIDIxMiwgMjAxLCAKLSAgICAyMTIsIDIwMCwgNywgNiwgMSwgMTE2LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDIzMSwgCi0gICAgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMTYwLCAyLCAKLSAgICA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCAKLSAgICA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIAotICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCi0gICAgMzksIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDE2MCwgCi0gICAgMiwgMjUwLCAzOSwgMjIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgCi0gICAgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgCi0gICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDIyOSwgODUsIDIsIDIxNiwgOTAsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIAotICAgIDIyMCwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAKLSAgICAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAKLSAgICAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgCi0gICAgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCAKLSAgICA3LCA0LCAxLCAyMjIsIDk0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgCi0gICAgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAotICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyMjYsIAotICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAotICAgIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIAotICAgIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCA1OSwgCi0gICAgNzIsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDcyLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3MiwgCi0gICAgMjIsIDE4NCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNzIsIAotICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjQwLCAxNjEsIAotICAgIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjksIDIyLCA1OSwgNzIsIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgCi0gICAgMjI5LCAyMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzUsIDE1MSwgMiwgMTg0LCA3LCA0LCAxLCAyMzUsIDE1MSwgCi0gICAgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTg0LCAKLSAgICA3LCA2LCAxLCAyMzIsIDU1LCAyLCAxODQsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDE4NCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIAotICAgIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNCwgCi0gICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNCwgCi0gICAgMSwgMTA0LCAyLCAyMjYsIDIyOSwgMjIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgCi0gICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgCi0gICAgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDE4NCwgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAKLSAgICAyMDQsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgCi0gICAgMTA2LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjIxLCAxOTgsIAotICAgIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMjEsIDE5OCwgMiwgMTQyLCA3LCA0LCAxLCAyNDEsIDU4LCAyMjEsIDE5OCwgMiwgCi0gICAgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MSwgNTgsIDIyMSwgMTk4LCAyLCAxNDIsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCAKLSAgICA3MiwgMiwgMjU0LCAxNzksIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMCwgOSwgMjIwLCAxMzcsIAotICAgIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk3LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgCi0gICAgMjM4LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY5LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIAotICAgIDIxMCwgMjEyLCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDc2LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgCi0gICAgNzIsIDIsIDI1NCwgMjUyLCA5LCAyMjAsIDEzNywgMjI4LCA2OCwgMiwgMjM0LCAxODAsIDE0NiwgMSwgMjM0LCAxMTUsIDM2LCAKLSAgICAxMTcsIDIzNSwgMjksIDM2LCAxMTcsIDIyOSwgODQsIDM2LCAxMTcsIDI1MSwgNzQsIDM2LCAxMTcsIDIyNywgMTcxLCAzNiwgCi0gICAgMTE3LCAyMTUsIDE2MCwgMzYsIDExNywgMjI4LCAxMTYsIDM2LCAxMTcsIDIxNywgMTUzLCAzNiwgMTE3LCAyMzAsIDMwLCAKLSAgICAzNiwgMTE3LCAyMjYsIDEwOSwgMzYsIDExNywgMTk0LCAzNiwgMTE3LCAyMTEsIDExNywgMzYsIDExNywgMTUzLCAzNiwgCi0gICAgMTE3LCAxNTYsIDM2LCAxMTcsIDIxNCwgMTA1LCAzNiwgMTE3LCAyMzIsIDE4MiwgMzYsIDExNywgMjMyLCAxOTEsIDM2LCAKLSAgICAxMTcsIDIyMiwgMTgyLCAzNiwgMTE3LCAyMjgsIDk4LCAzNiwgMTE3LCAyMzUsIDE1MCwgMzYsIDExNywgMjIwLCAxMDYsIAotICAgIDM2LCAxMTcsIDIxOCwgMjI4LCAzNiwgMTE3LCAyMjIsIDkzLCAzNiwgMTE3LCAyNDIsIDY3LCAzNiwgMTE3LCAyMzMsIDIzOCwgCi0gICAgMzYsIDMsIDIzNSwgMTYsIDM2LCAzLCAyMzQsIDk4LCAzNiwgMywgMjM0LCA4OSwgMzYsIDMsIDIzMywgMjIzLCAzNiwgMywgCi0gICAgMjMzLCAxOTQsIDM2LCAzLCAyMzQsIDE4OCwgMzYsIDMsIDIzNCwgMTg3LCAzNiwgMywgMjM0LCAyNTIsIDM2LCAzLCAyMzQsIAotICAgIDM0LCAzNiwgMywgMjM0LCAxNiwgMzYsIDMsIDIzNCwgMjAxLCAzNiwgMywgMjI5LCA4MSwgMzYsIDMsIDIyOSwgMzIsIDM2LCAKLSAgICAzLCAyMjksIDI4LCAzNiwgMywgMjI4LCAyNTMsIDM2LCAzLCAyMjgsIDI0NiwgMzYsIDMsIDIyOSwgNjksIDM2LCAzLCAyMjksIAotICAgIDY3LCAzNiwgMywgMjI5LCA3OCwgMzYsIDMsIDIyOSwgOSwgMzYsIDMsIDIyOSwgNCwgMzYsIDMsIDIyOSwgNzEsIDM2LCAzLCAKLSAgICAyNTEsIDQwLCAzNiwgMywgMjUwLCA1OSwgMzYsIDMsIDI1MCwgNDksIDM2LCAzLCAyNDksIDEyMCwgMzYsIDMsIDI0OSwgOTEsIAotICAgIDM2LCAzLCAyNTAsIDE5OCwgMzYsIDMsIDI1MCwgMTkwLCAzNiwgMywgMjUxLCAzMCwgMzYsIDMsIDI0OSwgMjQ2LCAzNiwgMywgCi0gICAgMjQ5LCAxODIsIDM2LCAzLCAyNTAsIDIzMCwgMzYsIDMsIDIyNywgMTY4LCAzNiwgMywgMjI3LCAxNTIsIDM2LCAzLCAyMjcsIAotICAgIDE0NywgMzYsIDMsIDIyNywgMTMyLCAzNiwgMywgMjI3LCAxMjUsIDM2LCAzLCAyMjcsIDE2MCwgMzYsIDMsIDIyNywgMTU5LCAKLSAgICAzNiwgMywgMjI3LCAxNjUsIDM2LCAzLCAyMjcsIDEzOCwgMzYsIDMsIDIyNywgMTM2LCAzNiwgMywgMjI3LCAxNjMsIDM2LCAKLSAgICAzLCAyMTUsIDE1NiwgMzYsIDMsIDIxNSwgMTM2LCAzNiwgMywgMjE1LCAxMzUsIDM2LCAzLCAyMTUsIDEyNCwgMzYsIDMsIAotICAgIDIxNSwgMTIxLCAzNiwgMywgMjE1LCAxNTIsIDM2LCAzLCAyMTUsIDE1MSwgMzYsIDMsIDIxNSwgMTU1LCAzNiwgMywgMjE1LCAKLSAgICAxMzQsIDM2LCAzLCAyMTUsIDEzMywgMzYsIDMsIDIxNSwgMTU0LCAzNiwgMywgMjI4LCAxMTQsIDM2LCAzLCAyMjgsIDEwMCwgCi0gICAgMzYsIDMsIDIyOCwgOTksIDM2LCAzLCAyMjgsIDgzLCAzNiwgMywgMjI4LCA4MiwgMzYsIDMsIDIyOCwgMTEwLCAzNiwgMywgCi0gICAgMjI4LCAxMDksIDM2LCAzLCAyMjgsIDExMywgMzYsIDMsIDIyOCwgODUsIDM2LCAzLCAyMjgsIDg0LCAzNiwgMywgMjI4LCAKLSAgICAxMTIsIDM2LCAzLCAyMTcsIDEwMiwgMzYsIDMsIDIxNiwgMTE4LCAzNiwgMywgMjE2LCAxMDQsIDM2LCAzLCAyMTUsIDExOSwgCi0gICAgMzYsIDMsIDIxNSwgODUsIDM2LCAzLCAyMTcsIDIzLCAzNiwgMywgMjE3LCAxMiwgMzYsIDMsIDIxNywgODAsIDM2LCAzLCAKLSAgICAxMTIsIDM2LCAzLCAyMTYsIDE4LCAzNiwgMywgMjE3LCA0MiwgMzYsIDMsIDIyOSwgMjMwLCAzNiwgMywgMjI4LCAyMzgsIAotICAgIDM2LCAzLCAyMjgsIDIxMywgMzYsIDMsIDIyNywgMjQyLCAzNiwgMywgMjI3LCAxODMsIDM2LCAzLCAyMjksIDExMiwgMzYsIAotICAgIDMsIDIyOSwgMTA4LCAzNiwgMywgMjI5LCAyMTcsIDM2LCAzLCAyMjgsIDc5LCAzNiwgMywgMjI4LCA2OSwgMzYsIDMsIDIyOSwgCi0gICAgMTkyLCAzNiwgMywgMjI2LCA5MywgMzYsIDMsIDIyNSwgMTExLCAzNiwgMywgMjI1LCA3NCwgMzYsIDMsIDIyNCwgMTUzLCAKLSAgICAzNiwgMywgMjI0LCAxMjIsIDM2LCAzLCAyMjUsIDIyNCwgMzYsIDMsIDIyNSwgMjE0LCAzNiwgMywgMjI2LCA3NSwgMzYsIDMsIAotICAgIDIyNSwgMTksIDM2LCAzLCAyMjQsIDI1MiwgMzYsIDMsIDIyNSwgMjM4LCAzNiwgMywgMjMxLCAyNDIsIDM2LCAzLCAyMzAsIAotICAgIDIzNSwgMzYsIDMsIDIzMCwgMjA2LCAzNiwgMywgMjMwLCAxMDcsIDM2LCAzLCAyMzAsIDU5LCAzNiwgMywgMjMxLCA5NiwgCi0gICAgMzYsIDMsIDIzMSwgODUsIDM2LCAzLCAyMzEsIDIwOCwgMzYsIDMsIDIzMCwgMTY2LCAzNiwgMywgMjMwLCAxMzcsIDM2LCAzLCAKLSAgICAyMzEsIDE0MCwgMzYsIDMsIDIxMSwgMTAzLCAzNiwgMywgMjExLCA4LCAzNiwgMywgMjEwLCAyNTUsIDM2LCAzLCAyMTAsIAotICAgIDIxMiwgMzYsIDMsIDIxMCwgMTgxLCAzNiwgMywgMjExLCA0NywgMzYsIDMsIDIxMSwgNDQsIDM2LCAzLCAyMTEsIDgyLCAzNiwgCi0gICAgMywgMjEwLCAyNDQsIDM2LCAzLCAyMTAsIDIyOSwgMzYsIDMsIDIxMSwgNTUsIDM2LCAzLCAyMjMsIDE4NywgMzYsIDMsIAotICAgIDIyMywgMzgsIDM2LCAzLCAyMjIsIDI0MiwgMzYsIDMsIDIyMiwgMTQyLCAzNiwgMywgMjIyLCAxMTQsIDM2LCAzLCAyMjMsIAotICAgIDEzMSwgMzYsIDMsIDIyMywgMTExLCAzNiwgMywgMjIzLCAxNjksIDM2LCAzLCAyMjIsIDIxMywgMzYsIDMsIDIyMiwgMTk5LCAKLSAgICAzNiwgMywgMjIzLCAxMzksIDM2LCAzLCAyMzMsIDE0MCwgMzYsIDMsIDIzMiwgMjQ3LCAzNiwgMywgMjMyLCAyMzMsIDM2LCAKLSAgICAzLCAyMzIsIDEwMywgMzYsIDMsIDIzMiwgNzgsIDM2LCAzLCAyMzMsIDY0LCAzNiwgMywgMjMzLCA1NiwgMzYsIDMsIDIzMywgCi0gICAgMTE1LCAzNiwgMywgMjMyLCAxNjIsIDM2LCAzLCAyMzIsIDEzMywgMzYsIDMsIDIzMywgODAsIDM2LCAzLCAyMTQsIDI2LCAKLSAgICAzNiwgMywgMjEzLCAxNzYsIDM2LCAzLCAyMTMsIDE2MiwgMzYsIDMsIDIxMiwgMTE2LCAzNiwgMywgMjEyLCAxMDksIDM2LCAKLSAgICAzLCAyMTMsIDI1NSwgMzYsIDMsIDIxMywgMjUwLCAzNiwgMywgMjE0LCAyMywgMzYsIDMsIDIxMywgMTM4LCAzNiwgMywgCi0gICAgMjEzLCAxMjcsIDM2LCAzLCAyMTQsIDUsIDM2LCAzLCAyMzIsIDE4MCwgMzYsIDMsIDIzMiwgMTc1LCAzNiwgMywgMjMyLCAKLSAgICAxNzQsIDM2LCAzLCAyMzIsIDE3MSwgMzYsIDMsIDIzMiwgMTcwLCAzNiwgMywgMjMyLCAxNzcsIDM2LCAzLCAyMzIsIDE3NiwgCi0gICAgMzYsIDMsIDIzMiwgMTc5LCAzNiwgMywgMjMyLCAxNzMsIDM2LCAzLCAyMzIsIDE3MiwgMzYsIDMsIDIzMiwgMTc4LCAzNiwgCi0gICAgMywgMjMyLCAxODksIDM2LCAzLCAyMzIsIDE4NCwgMzYsIDMsIDIzMiwgMTgzLCAzNiwgMywgMjMyLCAxNjcsIDM2LCAzLCAKLSAgICAyMzIsIDE2NiwgMzYsIDMsIDIzMiwgMTg2LCAzNiwgMywgMjMyLCAxODUsIDM2LCAzLCAyMzIsIDE4OCwgMzYsIDMsIDIzMiwgCi0gICAgMTY5LCAzNiwgMywgMjMyLCAxNjgsIDM2LCAzLCAyMzIsIDE4NywgMzYsIDMsIDIyMiwgMTgwLCAzNiwgMywgMjIyLCAxNjksIAotICAgIDM2LCAzLCAyMjIsIDE2OCwgMzYsIDMsIDIyMiwgMTYyLCAzNiwgMywgMjIyLCAxNTUsIDM2LCAzLCAyMjIsIDE3NiwgMzYsIAotICAgIDMsIDIyMiwgMTc1LCAzNiwgMywgMjIyLCAxNzksIDM2LCAzLCAyMjIsIDE2NywgMzYsIDMsIDIyMiwgMTY2LCAzNiwgMywgCi0gICAgMjIyLCAxNzgsIDM2LCAzLCAyMjgsIDk2LCAzNiwgMywgMjI4LCA5MSwgMzYsIDMsIDIyOCwgOTAsIDM2LCAzLCAyMjgsIDg3LCAKLSAgICAzNiwgMywgMjI4LCA4NiwgMzYsIDMsIDIyOCwgOTMsIDM2LCAzLCAyMjgsIDkyLCAzNiwgMywgMjI4LCA5NSwgMzYsIDMsIAotICAgIDIyOCwgODksIDM2LCAzLCAyMjgsIDg4LCAzNiwgMywgMjI4LCA5NCwgMzYsIDMsIDIzNSwgMTQ2LCAzNiwgMywgMjM1LCAKLSAgICAxMTQsIDM2LCAzLCAyMzUsIDEwNywgMzYsIDMsIDIzNSwgNTcsIDM2LCAzLCAyMzUsIDM5LCAzNiwgMywgMjM1LCAxMzIsIAotICAgIDM2LCAzLCAyMzUsIDEzMCwgMzYsIDMsIDIzNSwgMTQxLCAzNiwgMywgMjM1LCA3NCwgMzYsIDMsIDIzNSwgNjUsIDM2LCAzLCAKLSAgICAyMzUsIDEzNSwgMzYsIDMsIDIyMCwgMTAwLCAzNiwgMywgMjIwLCAzNCwgMzYsIDMsIDIyMCwgMjksIDM2LCAzLCAyMTksIAotICAgIDIyNywgMzYsIDMsIDIxOSwgMjEyLCAzNiwgMywgMjIwLCA2NSwgMzYsIDMsIDIyMCwgNjMsIDM2LCAzLCAyMjAsIDkyLCAzNiwgCi0gICAgMywgMjIwLCA5LCAzNiwgMywgMjIwLCAzLCAzNiwgMywgMjIwLCA3MywgMzYsIDMsIDIxOCwgMjI0LCAzNiwgMywgMjE4LCAKLSAgICAxOTQsIDM2LCAzLCAyMTgsIDE5MCwgMzYsIDMsIDIxOCwgMTgxLCAzNiwgMywgMjE4LCAxNzgsIDM2LCAzLCAyMTgsIDE5OSwgCi0gICAgMzYsIDMsIDIxOCwgMTk4LCAzNiwgMywgMjE4LCAyMjMsIDM2LCAzLCAyMTgsIDE4NiwgMzYsIDMsIDIxOCwgMTg1LCAzNiwgCi0gICAgMywgMjE4LCAyMDEsIDM2LCAzLCAyMjIsIDMzLCAzNiwgMywgMjE5LCAxOTMsIDM2LCAzLCAyMTksIDE3NywgMzYsIDMsIAotICAgIDIxOCwgODQsIDM2LCAzLCAyMTgsIDUsIDM2LCAzLCAyMjEsIDE4MywgMzYsIDMsIDIyMSwgMTcyLCAzNiwgMywgMjIyLCAxOSwgCi0gICAgMzYsIDMsIDIxOSwgNjAsIDM2LCAzLCAyMTksIDQyLCAzNiwgMywgMjIxLCAyMjEsIDM2LCAzLCAyNDIsIDUzLCAzNiwgMywgCi0gICAgMjQxLCAxODcsIDM2LCAzLCAyNDEsIDE2OCwgMzYsIDMsIDI0MCwgMjI5LCAzNiwgMywgMjQwLCAyMDksIDM2LCAzLCAyNDEsIAotICAgIDI0NSwgMzYsIDMsIDI0MSwgMjI3LCAzNiwgMywgMjQyLCA0MywgMzYsIDMsIDI0MSwgNzUsIDM2LCAzLCAyNDEsIDYwLCAzNiwgCi0gICAgMywgMjQxLCAyNTMsIDM2LCAzLCAyMzMsIDIzNywgMzYsIDMsIDIzMywgMjM2LCAzNiwgMywgMjMzLCAyMzEsIDM2LCAzLCAKLSAgICAyMzMsIDIzMCwgMzYsIDMsIDIzMywgMjI3LCAzNiwgMywgMjMzLCAyMjYsIDM2LCAzLCAyMzMsIDIzMywgMzYsIDMsIDIzMywgCi0gICAgMjMyLCAzNiwgMywgMjMzLCAyMzUsIDM2LCAzLCAyMzMsIDIyOSwgMzYsIDMsIDIzMywgMjI4LCAzNiwgMywgMjMzLCAyMzQsIAotICAgIDM2LCAzLCAyMTksIDIzMywgMTc1LCAxMTcsIDUsIDIxMSwgNjgsIDE3NSwgMTE3LCA1LCAyMjMsIDE1OCwgMTc1LCAxMTcsIAotICAgIDUsIDIyMywgODEsIDk4LCAxLCAyMTUsIDI4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTc2LCA3MCwgMTE3LCA1LCAyNDksIAotICAgIDI0MSwgMjM0LCAxMzgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzQsIDM0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjM0LCAKLSAgICAxMTEsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjksIDksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNTEsIDQxLCA3MCwgCi0gICAgMTE3LCA1LCAyNDksIDI0MSwgMjUwLCAxNjUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDksIDI0NiwgNzAsIDExNywgNSwgCi0gICAgMjQ5LCAyNDEsIDI1MCwgOTQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjcsIDEzOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAotICAgIDI0OCwgMjI5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE1LCAxNDUsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyNDcsIDE1MywgCi0gICAgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNSwgMTQwLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTk4LCA3MCwgMTE3LCA1LCAKLSAgICAyNDksIDI0MSwgMjE3LCAxMDYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTYsIDIwOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAotICAgIDExMiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNiwgMTU3LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI4LCA3OSwgNzAsIAotICAgIDExNywgNSwgMjQ5LCAyNDEsIDI1MiwgMTk5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxNTAsIDcwLCAxMTcsIDUsIAotICAgIDI0OSwgMjQxLCAyMjUsIDE5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI1LCAxMjQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKLSAgICAyMzAsIDE2NiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMCwgMjQ0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjIyLCAyMTMsIAotICAgIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzIsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxMywgMTM4LCA3MCwgMTE3LCAKLSAgICA1LCAyNDksIDI0MSwgMjIwLCAxMDQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTgsIDIyNSwgNzAsIDExNywgNSwgMjQ5LCAKLSAgICAyNDEsIDIwNiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE2MiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzMywgMTQxLCA3MCwgCi0gICAgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDkxLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjI0LCAzMywgNzAsIAotICAgIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyMiwgMTAyLCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjIyLCAKLSAgICA5NSwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgNzIsIDcwLCAyNSwgNSwgMjI2LCAyMDgsIDcwLCAyNSwgCi0gICAgNSwgMjU1LCA0MywgMTQxLCAxLCAyNTIsIDcsIDIyOSwgODIsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDMyLCAxNDEsIDEsIAotICAgIDI1MiwgNywgMjI4LCAyNTMsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDY5LCAxNDEsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgCi0gICAgMjUyLCA3LCAyMjksIDgyLCA1NiwgMSwgMjUyLCA3LCAyMjksIDMyLCA1NiwgMSwgMjUyLCA3LCAyMjgsIDI1MywgNTYsIDEsIAotICAgIDI1MiwgNywgMjI5LCA2OSwgNTYsIDEsIDI1MiwgNywgMjI5LCA5LCA1NiwgMSwgMjU0LCAyMDMsIDI1MCwgMTk4LCA1NiwgMSwgCi0gICAgMjU0LCAyMDMsIDIxNSwgMTE5LCA1NiwgMSwgMjU0LCAyMDMsIDExMiwgNTYsIDEsIDI1NCwgMjAzLCAyMjYsIDEwOSwgNTgsIAotICAgIDEsIDI0NSwgMjgsIDI0NSwgMjcsIDI0OSwgMTkwLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDI0NSwgMjgsIDI0OSwgCi0gICAgMTkwLCAxMzgsIDEzMCwgCisgICAgMCwgMjExLCAyMjgsIDI0MCwgMjEyLCA4MiwgMjE3LCAzMSwgODIsIDQyLCA1NCwgMjQzLCA5NywgNTQsIDIxOCwgMjQ2LCAKKyAgICA1NCwgMjUwLCAyMzUsIDI1MCwgMTYwLCA0OSwgMjE5LCA3NiwgNTAsIDIxOSwgNzYsIDI1MCwgNTksIDkxLCA1NCwgMjQ1LCAKKyAgICAyMzMsIDIzNSwgMjE5LCAyMzksIDEwMiwgMjExLCA2MSwgMjEyLCAwLCAxNywgMjAyLCA4NCwgMTcsIDEwNSwgMTcsIDEwOCwgCisgICAgMTcsIDE0NywgMTcsIDE0OSwgMTcsIDE3MCwgMTcsIDE5NSwgMTcsIDIxMywgMTExLCAxNywgMTk5LCAxNywgMjIyLCA2MywgCisgICAgMjQ1LCAyNDIsIDIxMywgMTQzLCAyMjcsIDE3OSwgNTQsIDI0MSwgMzUsIDU0LCAyMzcsIDI0NywgNTQsIDIxNywgNDcsIDgyLCAKKyAgICAyNDUsIDIzMSwgMjUwLCA0OSwgOCwgNiwgMSwgNjMsIDgsIDYsIDEsIDI0OSwgMjU1LCA4LCA2LCAxLCAyNDcsIDEyNSwgOCwgCisgICAgNiwgMSwgMjQ1LCA1MSwgOCwgNiwgMSwgNzQsIDgsIDYsIDEsIDI0MCwgMTc0LCA4LCA2LCAxLCAyMzksIDc1LCA4LCA2LCAxLCAKKyAgICAyMzcsIDE3MSwgOCwgNiwgMSwgNzUsIDgsIDYsIDEsIDIzMCwgMTg0LCA4LCA2LCAxLCAyMzAsIDU0LCA4LCA2LCAxLCAxNTksIAorICAgIDgsIDYsIDEsIDIyNiwgMTg1LCA4LCA2LCAxLCAyMjMsIDE2MywgOCwgNiwgMSwgNzgsIDgsIDYsIDEsIDIxOSwgMTg0LCA4LCAKKyAgICA2LCAxLCAyMTcsIDEzNCwgOCwgNiwgMSwgMTQ2LCA4LCA2LCAxLCAxOTQsIDgsIDYsIDEsIDIxMCwgNjksIDgsIDYsIDEsIAorICAgIDY4LCA4LCA2LCAxLCAyMDYsIDE2NCwgOCwgNiwgMSwgMjA0LCAxNDQsIDgsIDYsIDEsIDIwMywgMTk2LCA4LCA2LCAxLCAKKyAgICAyMDMsIDEyNCwgOCwgNiwgMSwgMjAyLCAxNTksIDQ5LCA1MSwgMTU1LCAyMTYsIDc0LCAyMTIsIDAsIDUwLCA1MSwgMTU1LCAKKyAgICAyNDYsIDUzLCAyNTEsIDEzOCwgMTI0LCAyMjcsIDExNCwgMjM3LCAyNTQsIDI1MSwgMTM4LCA4LCA1LCAxLCA2MywgOCwgNSwgCisgICAgMSwgMjQ5LCAyNTUsIDgsIDUsIDEsIDI0NywgMTI1LCA4LCA1LCAxLCAyNDUsIDUxLCA4LCA1LCAxLCA3NCwgOCwgNSwgMSwgCisgICAgMjQwLCAxNzQsIDgsIDUsIDEsIDIzOSwgNzUsIDgsIDUsIDEsIDIzNywgMTcxLCA4LCA1LCAxLCA3NSwgOCwgNSwgMSwgMjMwLCAKKyAgICAxODQsIDgsIDUsIDEsIDIzMCwgNTQsIDgsIDUsIDEsIDE1OSwgOCwgNSwgMSwgMjI2LCAxODUsIDgsIDUsIDEsIDIyMywgCisgICAgMTYzLCA4LCA1LCAxLCA3OCwgOCwgNSwgMSwgMjE5LCAxODQsIDgsIDUsIDEsIDIxNywgMTM0LCA4LCA1LCAxLCAxNDYsIDgsIAorICAgIDUsIDEsIDE5NCwgOCwgNSwgMSwgMjEwLCA2OSwgOCwgNSwgMSwgNjgsIDgsIDUsIDEsIDIwNiwgMTY0LCA4LCA1LCAxLCAKKyAgICAyMDQsIDE0NCwgOCwgNSwgMSwgMjAzLCAxOTYsIDgsIDUsIDEsIDIwMywgMTI0LCA4LCA1LCAxLCAyMDIsIDE1OSwgNDksIAorICAgIDI0NSwgOTMsIDE1NSwgODAsIDIyNywgMTE0LCA1MCwgMjQ1LCA5MywgMTU1LCAyMDgsIDIyNywgMjIxLCAxOTAsIDIxMSwgCisgICAgMjI4LCAyMzAsIDIzOSwgMjQwLCAyMTIsIDgyLCAyNDYsIDIyMCwgNTQsIDIxOCwgMjAsIDU0LCAyNDUsIDkyLCA1NCwgMjAzLCAKKyAgICA0MywgNTQsIDI0NywgMjAzLCAxNDIsIDIxNCwgMTY4LCA1NCwgMjQzLCAyMzEsIDI0NSwgMTY5LCA1NCwgMjQwLCA0MSwgCisgICAgMjE5LCAyNDAsIDIzMSwgMzEsIDIyNywgMjE3LCA1MiwgMjUwLCAyMTgsIDIxNywgMzEsIDgyLCAyMjEsIDE2NiwgNTQsIAorICAgIDIxMiwgNywgMjM1LCAyMjAsIDIxNiwgMTI5LCA1NCwgMjI1LCAxNzAsIDI0NCwgNTUsIDU0LCAyMTgsIDc1LCA1NCwgMjEwLCAKKyAgICAxOTksIDEwOCwgMjEwLCAxOTksIDE0NywgMjUxLCAxMjYsIDI1MSwgMTM4LCAyMjQsIDE1MywgNTQsIDIxOCwgMTI2LCA1NCwgCisgICAgMTAxLCAyNDMsIDg1LCAyNDYsIDIzMSwgMjEwLCAxOTksIDEwNSwgMjI1LCA4MCwgMjE5LCAyNDAsIDIzMSwgMzEsIDIxNiwgCisgICAgMTEsIDUyLCAyNTAsIDIxOCwgMjE3LCAzMSwgODIsIDIwNCwgMTYxLCAyMzksIDEzOCwgMTE4LCAyMTcsIDU1LCAyMDQsIAorICAgIDE2MSwgMjM5LCAxMzgsIDExOCwgMjM3LCAxMzcsIDIwNCwgMTYxLCAyMzksIDEzOCwgMTI2LCAyMTcsIDUzLCAyMzAsIDIzOSwgCisgICAgMjE3LCA0NywgODIsIDgsIDYsIDEsIDM0LCAzLCAyMzcsIDI1MywgOCwgNiwgMSwgMzQsIDMsIDE2NSwgOCwgNiwgMSwgMzQsIAorICAgIDMsIDI0NiwgNTIsIDgsIDYsIDEsIDM0LCAzLCAyMDgsIDIyNywgOCwgNiwgMSwgMzQsIDMsIDI0MywgMjMxLCA4LCA2LCAxLCAKKyAgICAzNCwgMywgMjE1LCAyNTMsIDU1LCA4LCA2LCAxLCAyNTEsIDEwOSwgOCwgNiwgMSwgMjQ3LCAxMjYsIDMsIDI0NiwgMjMxLCAKKyAgICA4LCA2LCAxLCAxODgsIDMsIDIzNywgMjUzLCA4LCA2LCAxLCAxODgsIDMsIDE2NSwgOCwgNiwgMSwgMTg4LCAzLCAyNDYsIAorICAgIDUyLCA4LCA2LCAxLCAxODgsIDMsIDI0MywgMjMxLCA4LCA2LCAxLCAyMzUsIDIwNiwgMywgMjM3LCAyNTMsIDgsIDYsIDEsIAorICAgIDIzNSwgMjA2LCAzLCAxNjUsIDgsIDYsIDEsIDIzNSwgMjA2LCAzLCAyNDYsIDUyLCA4LCA2LCAxLCAyMzUsIDIwNiwgMywgCisgICAgMjQzLCAyMzEsIDgsIDYsIDEsIDI0MCwgMjQzLCA4LCA2LCAxLCAyMjMsIDE2NCwgMywgMjA4LCAyMjcsIDgsIDYsIDEsIAorICAgIDE1OCwgMywgMjM3LCAyNTMsIDgsIDYsIDEsIDE1OCwgMywgMTY1LCA4LCA2LCAxLCAxNTgsIDMsIDI0NiwgNTIsIDgsIDYsIAorICAgIDEsIDE1OCwgMywgMjA4LCAyMjcsIDgsIDYsIDEsIDE1OCwgMywgMjQzLCAyMzEsIDIyMywgMjI0LCA1NCwgOCwgNiwgMSwgCisgICAgMTU4LCAzLCA5NSwgOCwgNiwgMSwgMTA2LCAzLCAyMzcsIDI1MywgOCwgNiwgMSwgMTA2LCAzLCAxNjUsIDgsIDYsIDEsIAorICAgIDEwNiwgMywgMjQ2LCA1MiwgOCwgNiwgMSwgMTA2LCAzLCAyNDMsIDIzMSwgOCwgNiwgMSwgMjAzLCAxMjUsIDMsIDE2NSwgOCwgCisgICAgNiwgMSwgMjA5LCA0MCwgOCwgNSwgMSwgMjEzLCA1NywgMTk0LCA4LCA1LCAxLCAzNCwgMywgMjM3LCAyNTMsIDgsIDUsIDEsIAorICAgIDM0LCAzLCAxNjUsIDgsIDUsIDEsIDM0LCAzLCAyNDYsIDUyLCA4LCA1LCAxLCAzNCwgMywgMjA4LCAyMjcsIDgsIDUsIDEsIAorICAgIDM0LCAzLCAyNDMsIDIzMSwgOCwgNSwgMSwgMzQsIDMsIDIxNSwgMjUzLCA1NSwgOCwgNSwgMSwgMjUxLCAxMDksIDgsIDUsIAorICAgIDEsIDI0NywgMTI2LCAzLCAyNDYsIDIzMSwgOCwgNSwgMSwgMTg4LCAzLCAyMzcsIDI1MywgOCwgNSwgMSwgMTg4LCAzLCAKKyAgICAxNjUsIDgsIDUsIDEsIDE4OCwgMywgMjQ2LCA1MiwgOCwgNSwgMSwgMTg4LCAzLCAyNDMsIDIzMSwgOCwgNSwgMSwgMjM1LCAKKyAgICAyMDYsIDMsIDIzNywgMjUzLCA4LCA1LCAxLCAyMzUsIDIwNiwgMywgMTY1LCA4LCA1LCAxLCAyMzUsIDIwNiwgMywgMjQ2LCAKKyAgICA1MiwgOCwgNSwgMSwgMjM1LCAyMDYsIDMsIDI0MywgMjMxLCA4LCA1LCAxLCAyNDAsIDI0MywgOCwgNSwgMSwgMjIzLCAxNjQsIAorICAgIDMsIDIwOCwgMjI3LCA4LCA1LCAxLCAxNTgsIDMsIDIzNywgMjUzLCA4LCA1LCAxLCAxNTgsIDMsIDE2NSwgOCwgNSwgMSwgCisgICAgMTU4LCAzLCAyNDYsIDUyLCA4LCA1LCAxLCAxNTgsIDMsIDIwOCwgMjI3LCA4LCA1LCAxLCAxNTgsIDMsIDI0MywgMjMxLCAKKyAgICAyNDMsIDEzNywgNTQsIDgsIDUsIDEsIDE1OCwgMywgOTUsIDgsIDUsIDEsIDEwNiwgMywgMjM3LCAyNTMsIDgsIDUsIDEsIAorICAgIDEwNiwgMywgMTY1LCA4LCA1LCAxLCAxMDYsIDMsIDI0NiwgNTIsIDgsIDUsIDEsIDEwNiwgMywgMjQzLCAyMzEsIDgsIDUsIAorICAgIDEsIDIwMywgMTI1LCAzLCAxNjUsIDgsIDUsIDEsIDIwOSwgNDAsIDgsIDUsIDEsIDIwMywgMTI1LCAzLCAyNDMsIDIzMSwgOCwgCisgICAgNiwgMSwgMzQsIDMsIDIyNSwgMTcwLCA4LCA1LCAxLCAzNCwgMywgMjI1LCAxNzAsIDgsIDYsIDEsIDM0LCAzLCAyNDcsIAorICAgIDIxNCwgOCwgNSwgMSwgMzQsIDMsIDI0NywgMjE0LCA4LCA2LCAxLCAzNCwgMywgMjIwLCA2MiwgOCwgNSwgMSwgMzQsIDMsIAorICAgIDIyMCwgNjIsIDgsIDYsIDEsIDI0NywgMTI2LCAzLCAxNjUsIDgsIDUsIDEsIDI0NywgMTI2LCAzLCAxNjUsIDgsIDYsIDEsIAorICAgIDI0NywgMTI2LCAzLCAyNDYsIDUyLCA4LCA1LCAxLCAyNDcsIDEyNiwgMywgMjQ2LCA1MiwgOCwgNiwgMSwgMjQ3LCAxMjYsIAorICAgIDMsIDcwLCA1NSwgOCwgNSwgMSwgMjQ3LCAxMjYsIDMsIDcwLCA1NSwgOCwgNiwgMSwgMjQ3LCAxMjYsIDMsIDI0NywgMjksIAorICAgIDgsIDUsIDEsIDI0NywgMTI2LCAzLCAyNDcsIDI5LCA4LCA2LCAxLCAyNDUsIDUyLCAzLCAyNDcsIDI5LCA4LCA1LCAxLCAKKyAgICAyNDUsIDUyLCAzLCAyNDcsIDI5LCA4LCA2LCAxLCAyNDUsIDUyLCAzLCA5NSwgOCwgNSwgMSwgMjQ1LCA1MiwgMywgOTUsIDgsIAorICAgIDYsIDEsIDE4OCwgMywgMjI1LCAxNzAsIDgsIDUsIDEsIDE4OCwgMywgMjI1LCAxNzAsIDgsIDYsIDEsIDE4OCwgMywgMjQ3LCAKKyAgICAyMTQsIDgsIDUsIDEsIDE4OCwgMywgMjQ3LCAyMTQsIDgsIDYsIDEsIDE4OCwgMywgNzAsIDU1LCA4LCA1LCAxLCAxODgsIDMsIAorICAgIDcwLCA1NSwgOCwgNiwgMSwgMTg4LCAzLCAyMjAsIDYyLCA4LCA1LCAxLCAxODgsIDMsIDIyMCwgNjIsIDgsIDYsIDEsIDE4OCwgCisgICAgMywgMjQ3LCAyOSwgOCwgNSwgMSwgMTg4LCAzLCAyNDcsIDI5LCA4LCA2LCAxLCAyMzksIDc2LCAzLCAyNDYsIDUyLCA4LCA1LCAKKyAgICAxLCAyMzksIDc2LCAzLCAyNDYsIDUyLCA4LCA2LCAxLCAyMzksIDc2LCAzLCAyNDcsIDIxNCwgOCwgNSwgMSwgMjM5LCA3NiwgCisgICAgMywgMjQ3LCAyMTQsIDgsIDYsIDEsIDIzOSwgNzYsIDMsIDcwLCA1NSwgOCwgNSwgMSwgMjM5LCA3NiwgMywgNzAsIDU1LCA4LCAKKyAgICA2LCAxLCAyMzksIDc2LCAzLCAyNDYsIDIzMSwgOCwgNSwgMSwgMjM5LCA3NiwgMywgMjQ2LCAyMzEsIDgsIDYsIDEsIDIzNywgCisgICAgMTcyLCAzLCAyNDYsIDUyLCA4LCA1LCAxLCAyMzcsIDE3MiwgMywgMjQ2LCA1MiwgOCwgNiwgMSwgMjM3LCAxNzIsIDMsIDk1LCAKKyAgICA4LCA1LCAxLCAyMzcsIDE3MiwgMywgOTUsIDgsIDYsIDEsIDIzNSwgMjA2LCAzLCAyMDgsIDIyNywgOCwgNSwgMSwgMjM1LCAKKyAgICAyMDYsIDMsIDIwOCwgMjI3LCA4LCA2LCAxLCAyMzUsIDIwNiwgMywgMjI1LCAxNzAsIDgsIDUsIDEsIDIzNSwgMjA2LCAzLCAKKyAgICAyMjUsIDE3MCwgOCwgNiwgMSwgMjM1LCAyMDYsIDMsIDI0NywgMjE0LCA4LCA1LCAxLCAyMzUsIDIwNiwgMywgMjQ3LCAyMTQsIAorICAgIDgsIDYsIDEsIDIzNSwgMjA2LCAzLCAyMjAsIDYyLCA4LCA1LCAxLCAyMzUsIDIwNiwgMywgMjIwLCA2MiwgOCwgNiwgMSwgCisgICAgMjM1LCAyMDYsIDMsIDcwLCA1NSwgOCwgNSwgMSwgMjQzLCA4NCwgNzUsIDgsIDYsIDMyLCAyMzEsIDgxLCA4LCA1LCAzMiwgCisgICAgMjMxLCA4MSwgOCwgNiwgMSwgMjMwLCAxODUsIDMsIDI0NiwgNTIsIDgsIDUsIDEsIDIzMCwgMTg1LCAzLCAyNDYsIDUyLCA4LCAKKyAgICA2LCAxLCAyMzAsIDU1LCAzLCAyNDYsIDIzMSwgOCwgNSwgMSwgMjMwLCA1NSwgMywgMjQ2LCAyMzEsIDgsIDUsIDEsIDIyOCwgCisgICAgMjMxLCA4LCA2LCAxLCAyMjgsIDEzMSwgMywgMTY1LCA4LCA1LCAxLCAyMjgsIDEzMSwgMywgMTY1LCA4LCA2LCAxLCAyMjgsIAorICAgIDEzMSwgMywgMjQ2LCAyMzEsIDgsIDUsIDEsIDIyOCwgMTMxLCAzLCAyNDYsIDIzMSwgOCwgNiwgMSwgMjI4LCAxMzEsIDMsIAorICAgIDI0NywgMjksIDgsIDUsIDEsIDIyOCwgMTMxLCAzLCAyNDcsIDI5LCA4LCA2LCAxLCAyMjgsIDEzMSwgMywgMTAxLCAyNDMsIAorICAgIDg1LCA4LCA1LCAxLCAyMjgsIDEzMSwgMywgMTAxLCAyNDMsIDg1LCA4LCA2LCAxLCAyMjgsIDEzMSwgMywgOTUsIDgsIDUsIAorICAgIDEsIDIyOCwgMTMxLCAzLCA5NSwgOCwgNiwgMSwgMjIzLCAxNjQsIDMsIDE2NSwgOCwgNSwgMSwgMjIzLCAxNjQsIDMsIDE2NSwgCisgICAgOCwgNiwgMSwgMjIzLCAxNjQsIDMsIDI0NiwgMjMxLCA4LCA1LCAxLCAyMjMsIDE2NCwgMywgMjQ2LCAyMzEsIDgsIDYsIDEsIAorICAgIDIyMywgMTY0LCAzLCAyNDcsIDI5LCA4LCA1LCAxLCAyMjMsIDE2NCwgMywgMjQ3LCAyOSwgOCwgNSwgMSwgMjIzLCAxNjQsIAorICAgIDIxNywgMjUxLCAyNDcsIDEzNywgMjUwLCAxNjAsIDgsIDYsIDEsIDI0MSwgNzgsIDgsIDUsIDEsIDI0MSwgNzgsIDgsIDYsIAorICAgIDEsIDE1OCwgMywgMjI1LCAxNzAsIDgsIDUsIDEsIDE1OCwgMywgMjI1LCAxNzAsIDgsIDYsIDEsIDE1OCwgMywgMjQ3LCAKKyAgICAyMTQsIDgsIDUsIDEsIDE1OCwgMywgMjQ3LCAyMTQsIDgsIDYsIDEsIDE1OCwgMywgNTIsIDE2NSwgOCwgNSwgMSwgMTU4LCAKKyAgICAzLCA1MiwgMTY1LCA4LCA2LCAzMiwgMjIwLCA3MywgOCwgNSwgMzIsIDIyMCwgNzMsIDgsIDYsIDEsIDIxNywgMSwgMywgCisgICAgMTY1LCA4LCA1LCAxLCAyMTcsIDEsIDMsIDE2NSwgOCwgNiwgMSwgMjE3LCAxLCAzLCAyNDYsIDIzMSwgOCwgNSwgMSwgMjE3LCAKKyAgICAxLCAzLCAyNDYsIDIzMSwgOCwgNiwgMSwgMjE3LCAxLCAzLCAyNDcsIDI5LCA4LCA1LCAxLCAyMTcsIDEsIDMsIDI0NywgMjksIAorICAgIDgsIDYsIDEsIDIxNSwgOTQsIDMsIDE2NSwgOCwgNSwgMSwgMjE1LCA5NCwgMywgMTY1LCA4LCA2LCAxLCAyMTUsIDk0LCAzLCAKKyAgICAyNDYsIDUyLCA4LCA1LCAxLCAyMTUsIDk0LCAzLCAyNDYsIDUyLCA4LCA2LCAxLCAyMTUsIDk0LCAzLCAyNDYsIDIzMSwgOCwgCisgICAgNSwgMSwgMjE1LCA5NCwgMywgMjQ2LCAyMzEsIDgsIDYsIDEsIDIxNSwgOTQsIDMsIDI0NywgMjksIDgsIDUsIDEsIDIxNSwgCisgICAgOTQsIDMsIDI0NywgMjksIDgsIDYsIDEsIDIxMCwgNzAsIDMsIDI0NiwgMjMxLCA4LCA1LCAxLCAyMTAsIDcwLCAzLCAyNDYsIAorICAgIDIzMSwgOCwgNiwgMSwgMjEwLCA3MCwgMywgMjQ3LCAyOSwgOCwgNSwgMSwgMjEwLCA3MCwgMywgMjQ3LCAyOSwgOCwgNiwgMSwgCisgICAgMjEwLCA3MCwgMywgOTUsIDgsIDUsIDEsIDIxMCwgNzAsIDMsIDk1LCA4LCA2LCAxLCAxMDYsIDMsIDIwOCwgMjI3LCA4LCA1LCAKKyAgICAxLCAxMDYsIDMsIDIwOCwgMjI3LCA4LCA2LCAxLCAxMDYsIDMsIDIyNSwgMTcwLCA4LCA1LCAxLCAxMDYsIDMsIDIyNSwgCisgICAgMTcwLCA4LCA2LCAxLCAxMDYsIDMsIDI0NywgMjE0LCA4LCA1LCAxLCAxMDYsIDMsIDI0NywgMjE0LCA4LCA2LCAxLCAxMDYsIAorICAgIDMsIDIxNSwgMjUzLCA1NSwgOCwgNSwgMSwgMTA2LCAzLCAyMTUsIDI1MywgNTUsIDgsIDYsIDEsIDEwNiwgMywgNTIsIDE2NSwgCisgICAgOCwgNSwgMSwgMTA2LCAzLCA1MiwgMTY1LCA4LCA2LCAxLCAxMDYsIDMsIDIyMCwgNjIsIDgsIDUsIDEsIDEwNiwgMywgMjIwLCAKKyAgICA2MiwgOCwgNiwgMSwgMjA0LCAxNDUsIDMsIDI0NiwgNTIsIDgsIDUsIDEsIDIwNCwgMTQ1LCAzLCAyNDYsIDUyLCA4LCA2LCAKKyAgICAxLCAyMDMsIDEyNSwgMywgMjQ2LCA1MiwgOCwgNSwgMSwgMjAzLCAxMjUsIDMsIDI0NiwgNTIsIDgsIDYsIDEsIDIwMywgCisgICAgMTI1LCAzLCAyNDMsIDIzMSwgOCwgNiwgMSwgMjAyLCAxNjAsIDMsIDE2NSwgOCwgNSwgMSwgMjAyLCAxNjAsIDMsIDE2NSwgCisgICAgOCwgNiwgMSwgMjAyLCAxNjAsIDMsIDcwLCA1NSwgOCwgNSwgMSwgMjAyLCAxNjAsIDMsIDcwLCA1NSwgOCwgNiwgMSwgMjAyLCAKKyAgICAxNjAsIDMsIDI0NywgMjksIDgsIDUsIDEsIDIwMiwgMTYwLCAzLCAyNDcsIDI5LCA4LCA1LCAxLCAxNjMsIDE5NCwgOCwgNSwgCisgICAgMSwgNjYsIDMsIDk1LCA4LCA2LCAxLCA2NiwgMywgMTEzLCA4LCA2LCAxLCA2NiwgMywgMjA4LCAxNDIsIDgsIDUsIDEsIDY2LCAKKyAgICAzLCAyMDgsIDE0MiwgOCwgNiwgMSwgMTQzLCAxOTUsIDgsIDUsIDEsIDE0MywgMTk1LCA4LCA2LCAxLCAxNzEsIDc4LCA4LCAKKyAgICA2LCAxLCAyNDcsIDEyNiwgMywgMTEzLCA4LCA1LCAxLCAyNDcsIDEyNiwgMywgMTEzLCA4LCA2LCAxLCAyNTEsIDg0LCAyNDUsIAorICAgIDUxLCA4LCA2LCAxLCAyNDUsIDUyLCAzLCAxMTMsIDgsIDYsIDEsIDI0NSwgNTIsIDMsIDIwOCwgMTQyLCA4LCA1LCAxLCAKKyAgICAyNDUsIDUyLCAzLCAyMDgsIDE0MiwgOCwgNSwgMSwgMjA3LCAxNzQsIDI0NCwgMzcsIDgsIDYsIDEsIDIxNiwgNzMsIDc0LCAKKyAgICA4LCA2LCAxLCAyMTQsIDE5MiwgOCwgNiwgMSwgMTcxLCA3NCwgOCwgNiwgMSwgMjQwLCAxNzUsIDMsIDExMywgOCwgNSwgMSwgCisgICAgMjQwLCAxNzUsIDMsIDExMywgOCwgNiwgMSwgMjM5LCA3NiwgMywgMTEzLCA4LCA2LCAxLCAyMzgsIDIzNSwgOCwgNSwgMSwgCisgICAgMjM1LCAyNTUsIDgsIDYsIDEsIDIzMCwgMjMwLCA4LCA2LCAxLCAyMzUsIDIwNiwgMywgOTUsIDgsIDYsIDEsIDIzMCwgNTUsIAorICAgIDMsIDExMywgOCwgNSwgMSwgMjMwLCA1NSwgMywgMTEzLCA4LCA1LCAxLCAyMjgsIDEzMSwgMywgMTQyLCA4LCA1LCAxLCAKKyAgICAyMjgsIDI2LCAzLCA5NSwgOCwgNiwgMSwgMjA3LCAxNzQsIDIyNiwgMTg1LCA4LCA2LCAxLCAyMjMsIDE2NCwgMywgNDksIAorICAgIDExMywgOCwgNSwgMSwgMjIzLCAxNjQsIDMsIDE2MywgNTAsIDIyNywgMjEwLCA4LCA2LCAxLCAxNTgsIDMsIDEwMSwgMjA4LCAKKyAgICAyMjcsIDgsIDYsIDEsIDE1OCwgMywgMjM2LCA1MywgOCwgNSwgMSwgMTU4LCAzLCAyMzYsIDUzLCA4LCA2LCAxLCAyMjAsIAorICAgIDU3LCA4LCA1LCAxLCAyMjAsIDU3LCA4LCA2LCAxLCAyMTksIDE4NSwgMywgMTEzLCA4LCA1LCAxLCAyMTksIDE4NSwgMywgCisgICAgMTEzLCA4LCAxLCAyMDIsIDIxNiwgOCwgNiwgMSwgMTQzLCAxMDgsIDgsIDUsIDEsIDE0MywgMTA4LCA4LCA2LCAxLCAyNDEsIAorICAgIDcsIDgsIDEsIDIxNiwgNzMsIDI0MSwgOCwgMjI3LCAxNCwgOCwgNSwgMSwgMjEwLCA3MCwgMywgMjE5LCAxNDIsIDExMywgOCwgCisgICAgNiwgMSwgMjEwLCA3MCwgMywgMTEzLCA4LCA1LCAxLCAyMTAsIDcwLCAzLCAxMTMsIDgsIDYsIDEsIDIxMCwgNzAsIDMsIAorICAgIDIxNiwgNzksIDExMywgOCwgNiwgMSwgMTA2LCAzLCAyMzYsIDUzLCA4LCA1LCAxLCAxMDYsIDMsIDIzNiwgNTMsIDgsIDYsIAorICAgIDEsIDIwNiwgMjE2LCA4LCA2LCAxLCAyMDYsIDE2NSwgMywgMTEzLCA4LCA2LCAxLCAyMDMsIDEyNSwgMywgMTEzLCA4LCA1LCAKKyAgICAxLCAyMDMsIDEyNSwgMywgMTEzLCA4LCA2LCAxLCAyMDIsIDE2MCwgMywgOTUsIDgsIDUsIDEsIDIwMiwgMTYwLCAzLCA5NSwgCisgICAgOCwgNiwgMSwgMjQwLCAxNzcsIDgsIDYsIDEsIDI0MCwgMTc4LCAyMTYsIDcyLCA4LCA1LCAxLCAyNDAsIDE3OCwgMjE2LCAKKyAgICA3MiwgOCwgNSwgMSwgMjQwLCAxNzgsIDMsIDIwOSwgMjQ4LCA4LCAxLCAxMjAsIDMsIDk1LCA4LCA2LCAxLCAxNDMsIDE3MCwgCisgICAgOCwgNSwgMSwgMTQzLCAxNzAsIDgsIDEsIDIzMCwgMjM5LCAyMzgsIDQ1LCAyMTEsIDYyLCAzLCA5NSwgOCwgMSwgMjAzLCAKKyAgICAxOTksIDgsIDEsIDI0NCwgMzAsIDI0NiwgMjcsIDgsIDEsIDIyNywgMjU0LCAyNDYsIDI3LCA4LCAxLCAyNTAsIDI0OCwgCisgICAgMjQ2LCAyNywgOCwgMSwgMjE2LCA3OSwgMjQ2LCAyNywgOCwgNiwgMSwgMjQyLCAxLCAzLCAyNDcsIDI5LCA4LCA2LCAxLCAKKyAgICAyNDUsIDUyLCAzLCA1LCAxLCAyMDIsIDE2MCwgMywgMjQ3LCAyOSwgOCwgNSwgMSwgMjQyLCAxLCAzLCAyNDcsIDI5LCA4LCAKKyAgICA2LCAxLCAyMjcsIDgxLCA4LCA2LCAxLCAyMjgsIDEzMSwgMywgNSwgMSwgMjMwLCAxODQsIDgsIDUsIDEsIDIyNywgODEsIDgsIAorICAgIDYsIDEsIDIyMiwgNDksIDgsIDYsIDEsIDIyMywgMTY0LCAzLCA1LCAxLCAyMzAsIDE4NCwgOCwgNSwgMSwgMjIyLCA0OSwgOCwgCisgICAgNiwgMSwgMzQsIDMsIDI0NywgMjksIDgsIDUsIDEsIDM0LCAzLCAyNDcsIDI5LCA4LCA2LCAxLCAyMzUsIDIwNiwgMywgMjQ3LCAKKyAgICAyOSwgOCwgNSwgMSwgMjM1LCAyMDYsIDMsIDI0NywgMjksIDgsIDYsIDEsIDE1OCwgMywgMjQ3LCAyOSwgOCwgNSwgMSwgCisgICAgMTU4LCAzLCAyNDcsIDI5LCA4LCA2LCAxLCAxMDYsIDMsIDI0NywgMjksIDgsIDUsIDEsIDEwNiwgMywgMjQ3LCAyOSwgOCwgCisgICAgNiwgMSwgMTA2LCAzLCAyNDMsIDIzMiwgMjUsIDIyNSwgMTcwLCA4LCA1LCAxLCAxMDYsIDMsIDI0MywgMjMyLCAyNSwgMjI1LCAKKyAgICAxNzAsIDgsIDYsIDEsIDEwNiwgMywgMjQzLCAyMzIsIDI1LCAxNjUsIDgsIDUsIDEsIDEwNiwgMywgMjQzLCAyMzIsIDI1LCAKKyAgICAxNjUsIDgsIDYsIDEsIDEwNiwgMywgMjQzLCAyMzIsIDI1LCAyNDcsIDI5LCA4LCA1LCAxLCAxMDYsIDMsIDI0MywgMjMyLCAKKyAgICAyNSwgMjQ3LCAyOSwgOCwgNiwgMSwgMTA2LCAzLCAyNDMsIDIzMiwgMjUsIDIzNywgMjUzLCA4LCA1LCAxLCAxMDYsIDMsIAorICAgIDI0MywgMjMyLCAyNSwgMjM3LCAyNTMsIDgsIDUsIDEsIDIwNywgMTc0LCA3NCwgOCwgNiwgMSwgMzQsIDMsIDI0MywgMjMyLCAKKyAgICAyNSwgMjI1LCAxNzAsIDgsIDUsIDEsIDM0LCAzLCAyNDMsIDIzMiwgMjUsIDIyNSwgMTcwLCA4LCA2LCAxLCAzNCwgMywgNzAsIAorICAgIDg3LCAyNSwgMjI1LCAxNzAsIDgsIDUsIDEsIDM0LCAzLCA3MCwgODcsIDI1LCAyMjUsIDE3MCwgOCwgNiwgMSwgMjUxLCAKKyAgICAxMTAsIDMsIDIyNSwgMTcwLCA4LCA1LCAxLCAyNTEsIDExMCwgMywgMjI1LCAxNzAsIDgsIDYsIDEsIDIzOSwgNzYsIDMsIAorICAgIDk1LCA4LCA1LCAxLCAyMzksIDc2LCAzLCA5NSwgOCwgNiwgMSwgMjM5LCA3NiwgMywgMjQ3LCAyOSwgOCwgNSwgMSwgMjM5LCAKKyAgICA3NiwgMywgMjQ3LCAyOSwgOCwgNiwgMSwgMjMwLCA1NSwgMywgMjQ3LCAyOSwgOCwgNSwgMSwgMjMwLCA1NSwgMywgMjQ3LCAKKyAgICAyOSwgOCwgNiwgMSwgMTU4LCAzLCAyMjAsIDYyLCA4LCA1LCAxLCAxNTgsIDMsIDIyMCwgNjIsIDgsIDYsIDEsIDE1OCwgMywgCisgICAgMjIwLCA2MywgMjUsIDIyNSwgMTcwLCA4LCA1LCAxLCAxNTgsIDMsIDIyMCwgNjMsIDI1LCAyMjUsIDE3MCwgOCwgNiwgMSwgCisgICAgMjQwLCAxNzgsIDMsIDI0NywgMjksIDgsIDUsIDEsIDI0MCwgMTc4LCAzLCAyNDcsIDI5LCA4LCA1LCAxLCAyMzAsIDE4NSwgCisgICAgMywgMjQ3LCAyOSwgOCwgNiwgMSwgMjQyLCAwLCA4LCA2LCAxLCAyNDUsIDUyLCAzLCA1LCAxLCAyMDIsIDE1OSwgOCwgNSwgCisgICAgMSwgMjQyLCAwLCA4LCA2LCAxLCAyMzksIDc2LCAzLCAxNjUsIDgsIDUsIDEsIDIzOSwgNzYsIDMsIDE2NSwgOCwgNiwgMSwgCisgICAgMjM1LCAyNTIsIDgsIDYsIDEsIDIwMywgMTk5LCA4LCA2LCAxLCAyMjMsIDE2NCwgMywgMjM3LCAyNTMsIDgsIDUsIDEsIAorICAgIDIyMywgMTY0LCAzLCAyMzcsIDI1MywgOCwgNiwgMSwgMzQsIDMsIDIxNSwgMjUzLCA4NywgMjUsIDE2NSwgOCwgNSwgMSwgCisgICAgMzQsIDMsIDIxNSwgMjUzLCA4NywgMjUsIDE2NSwgOCwgNiwgMSwgMjUxLCAxMTAsIDMsIDE2NSwgOCwgNSwgMSwgMjUxLCAKKyAgICAxMTAsIDMsIDE2NSwgOCwgNiwgMSwgMTU4LCAzLCAyMTEsIDMyLCAyNSwgMTY1LCA4LCA1LCAxLCAxNTgsIDMsIDIxMSwgMzIsIAorICAgIDI1LCAxNjUsIDgsIDYsIDEsIDM0LCAzLCA1MiwgMjM3LCAyNTMsIDgsIDUsIDEsIDM0LCAzLCA1MiwgMjM3LCAyNTMsIDgsIAorICAgIDYsIDEsIDM0LCAzLCAyMzAsIDIzOSwgMjQ3LCAyMTQsIDgsIDUsIDEsIDM0LCAzLCAyMzAsIDIzOSwgMjQ3LCAyMTQsIDgsIAorICAgIDYsIDEsIDE4OCwgMywgNTIsIDIzNywgMjUzLCA4LCA1LCAxLCAxODgsIDMsIDUyLCAyMzcsIDI1MywgOCwgNiwgMSwgMTg4LCAKKyAgICAzLCAyMzAsIDIzOSwgMjQ3LCAyMTQsIDgsIDUsIDEsIDE4OCwgMywgMjMwLCAyMzksIDI0NywgMjE0LCA4LCA2LCAxLCAyMzUsIAorICAgIDIwNiwgMywgNTIsIDIzNywgMjUzLCA4LCA1LCAxLCAyMzUsIDIwNiwgMywgNTIsIDIzNywgMjUzLCA4LCA2LCAxLCAyMzUsIAorICAgIDIwNiwgMywgMjMwLCAyMzksIDI0NywgMjE0LCA4LCA1LCAxLCAyMzUsIDIwNiwgMywgMjMwLCAyMzksIDI0NywgMjE0LCA4LCAKKyAgICA2LCAxLCAxNTgsIDMsIDUyLCAyMzcsIDI1MywgOCwgNSwgMSwgMTU4LCAzLCA1MiwgMjM3LCAyNTMsIDgsIDYsIDEsIDE1OCwgCisgICAgMywgMjMwLCAyMzksIDI0NywgMjE0LCA4LCA1LCAxLCAxNTgsIDMsIDIzMCwgMjM5LCAyNDcsIDIxNCwgOCwgNiwgMSwgMjE3LCAKKyAgICAxLCAzLCA1MiwgMjM3LCAyNTMsIDgsIDUsIDEsIDIxNywgMSwgMywgNTIsIDIzNywgMjUzLCA4LCA2LCAxLCAyMTcsIDEsIDMsIAorICAgIDIzMCwgMjM5LCAyNDcsIDIxNCwgOCwgNSwgMSwgMjE3LCAxLCAzLCAyMzAsIDIzOSwgMjQ3LCAyMTQsIDgsIDYsIDEsIDEwNiwgCisgICAgMywgNTIsIDIzNywgMjUzLCA4LCA1LCAxLCAxMDYsIDMsIDUyLCAyMzcsIDI1MywgOCwgNiwgMSwgMTA2LCAzLCAyMzAsIAorICAgIDIzOSwgMjQ3LCAyMTQsIDgsIDUsIDEsIDEwNiwgMywgMjMwLCAyMzksIDI0NywgMjE0LCA4LCA2LCAxLCAyMTUsIDk0LCAzLCAKKyAgICAyNDUsIDIzNCwgNTYsIDgsIDUsIDEsIDIxNSwgOTQsIDMsIDI0NSwgMjM0LCA1NiwgOCwgNiwgMSwgMjEwLCA3MCwgMywgCisgICAgMjQ1LCAyMzQsIDU2LCA4LCA1LCAxLCAyMTAsIDcwLCAzLCAyNDUsIDIzNCwgNTYsIDgsIDYsIDEsIDIwMiwgMjM0LCA4LCA1LCAKKyAgICAxLCAyMDIsIDIzNCwgOCwgNiwgMSwgMjM3LCAxNzIsIDMsIDI0NywgMjksIDgsIDUsIDEsIDIzNywgMTcyLCAzLCAyNDcsIAorICAgIDI5LCA4LCA2LCAxLCAyMjMsIDE2NCwgMywgMTYzLCA1MCwgMjI3LCAyMTAsIDgsIDUsIDEsIDI0NSwgNTIsIDMsIDI0NSwgCisgICAgOTUsIDgsIDYsIDEsIDIxOSwgMjE2LCA4LCA1LCAxLCAyMTksIDIxNiwgOCwgNiwgMSwgMjAyLCAxNjAsIDMsIDExMywgOCwgCisgICAgNSwgMSwgMjAyLCAxNjAsIDMsIDExMywgOCwgNiwgMSwgMzQsIDMsIDcwLCA1NSwgOCwgNSwgMSwgMzQsIDMsIDcwLCA1NSwgCisgICAgOCwgNiwgMSwgMTg4LCAzLCAyNDYsIDIzMSwgOCwgNSwgMSwgMTg4LCAzLCAyNDYsIDIzMSwgOCwgNiwgMSwgMTU4LCAzLCAKKyAgICAyNDMsIDIzMiwgMjUsIDIyNSwgMTcwLCA4LCA1LCAxLCAxNTgsIDMsIDI0MywgMjMyLCAyNSwgMjI1LCAxNzAsIDgsIDYsIDEsIAorICAgIDE1OCwgMywgMjA4LCAyMjgsIDI1LCAyMjUsIDE3MCwgOCwgNSwgMSwgMTU4LCAzLCAyMDgsIDIyOCwgMjUsIDIyNSwgMTcwLCAKKyAgICA4LCA2LCAxLCAxNTgsIDMsIDcwLCA1NSwgOCwgNSwgMSwgMTU4LCAzLCA3MCwgNTUsIDgsIDYsIDEsIDE1OCwgMywgNzAsIAorICAgIDg3LCAyNSwgMjI1LCAxNzAsIDgsIDUsIDEsIDE1OCwgMywgNzAsIDg3LCAyNSwgMjI1LCAxNzAsIDgsIDYsIDEsIDIwMywgCisgICAgMTI1LCAzLCAyMjUsIDE3MCwgOCwgNSwgMSwgMjAzLCAxMjUsIDMsIDIyNSwgMTcwLCA4LCA1LCAxLCAyMjgsIDEzMSwgMywgCisgICAgMjQ1LCA5NSwgOCwgNSwgMSwgMjIzLCAxNjQsIDMsIDI0NSwgOTUsIDgsIDUsIDEsIDIxMCwgNzAsIDMsIDI0NSwgOTUsIDgsIAorICAgIDUsIDEsIDI0MywgODQsIDIzMCwgMTg0LCA4LCA1LCAxLCAyNDQsIDEzMCwgMjQzLCAxOTEsIDgsIDUsIDEsIDIxNywgNjYsIAorICAgIDI0MywgMTkxLCA4LCA2LCAxLCAzNCwgMywgOTUsIDgsIDYsIDEsIDI0NywgMTI2LCAzLCA5NSwgOCwgNSwgMSwgMjQ3LCAKKyAgICAxMjYsIDMsIDk1LCA4LCA2LCAxLCAyMjgsIDEzMSwgMywgMTQyLCA4LCA2LCAxLCAyMTAsIDcwLCAzLCAyNDMsIDIyOCwgOTUsIAorICAgIDgsIDUsIDEsIDIxNSwgOTQsIDMsIDIxMCwgMTY5LCAyMDksIDI0OCwgOCwgNSwgMSwgMjAyLCAxNjAsIDMsIDIxMCwgMTY5LCAKKyAgICAyMDksIDI0OCwgOCwgNiwgMSwgMjM4LCA0NSwgMjExLCA2MSwgOCwgNSwgMSwgMjM4LCA0NSwgMjExLCA2MSwgOCwgNiwgMSwgCisgICAgNjYsIDMsIDk1LCA4LCA2LCAxLCAxMDYsIDE0MiwgOCwgNiwgMSwgMjA3LCAxNzQsIDIwNiwgMTY0LCA4LCA2LCAxLCAxODgsIAorICAgIDMsIDk1LCA4LCA1LCAxLCAxODgsIDMsIDk1LCA4LCA2LCAxLCAyMzAsIDE4NSwgMywgOTUsIDgsIDUsIDEsIDIzMCwgMTg1LCAKKyAgICAzLCA5NSwgOCwgNiwgMSwgNSwgMjE3LCAxMzUsIDMsIDIzNiwgMTE2LCAyMDksIDI0OCwgOCwgNSwgMSwgMjE3LCAxMzUsIDMsIAorICAgIDIzNiwgMTE2LCAyMDksIDI0OCwgOCwgNiwgMSwgMjE3LCAxLCAzLCA5NSwgOCwgNSwgMSwgMjE3LCAxLCAzLCA5NSwgOCwgNiwgCisgICAgMSwgMjAzLCAxMjUsIDMsIDk1LCA4LCA1LCAxLCAyMDMsIDEyNSwgMywgOTUsIDgsIDUsIDEsIDIwNywgMTc0LCA2MywgOCwgCisgICAgNSwgMSwgMjUxLCAyLCA4LCA1LCAxLCAyMDcsIDE3NCwgMjUxLCAyLCA4LCA1LCAxLCA2NiwgMywgMTEzLCA4LCA1LCAxLCAKKyAgICAxNzEsIDc4LCA4LCA1LCAxLCAyNDcsIDEyNiwgMywgMjQ1LCA5NSwgOCwgNSwgMSwgMjQ1LCA1MiwgMywgMjA5LCAyNDgsIDgsIAorICAgIDUsIDEsIDI0NSwgNTIsIDMsIDExMywgOCwgNSwgMSwgMjE2LCA3MywgNzQsIDgsIDUsIDEsIDIxNCwgMTkyLCA4LCA1LCAxLCAKKyAgICAyMTQsIDE5MywgMywgMTEzLCA4LCA1LCAxLCAxNzEsIDc0LCA4LCA1LCAxLCAyMTYsIDczLCAxNzEsIDc0LCA4LCA1LCAxLCAKKyAgICAyMTYsIDczLCAxNzEsIDE4OCwgMywgMTEzLCA4LCA1LCAxLCAyNDYsIDE2LCAyMTYsIDczLCAxNzEsIDc0LCA4LCA1LCAxLCAKKyAgICAyNDMsIDg0LCAyMzAsIDE4NSwgMywgOTUsIDgsIDUsIDEsIDIzOSwgNzYsIDMsIDExMywgOCwgNSwgMSwgMTMyLCAyMzksIAorICAgIDc1LCA4LCAxLCA1LCA2LCAyMzksIDc1LCA4LCA1LCAxLCAyMzgsIDIzNSwgOCwgNSwgMSwgMjE2LCAxODIsIDIzNiwgNTMsIAorICAgIDgsIDUsIDEsIDIwNywgMTc0LCAyMzcsIDE3MSwgOCwgNSwgMSwgMjM3LCAxNzIsIDMsIDExMywgOCwgNSwgMSwgMjM3LCAzMiwgCisgICAgMywgMTEzLCA4LCA1LCAxLCAyMzUsIDIwNiwgMywgOTUsIDgsIDUsIDEsIDIzMCwgMjMwLCA4LCAxLCA1LCA2LCA3NSwgOCwgCisgICAgNSwgMSwgMjI4LCAxMzEsIDMsIDEwMSwgMjA4LCAyMjcsIDgsIDUsIDEsIDIyOCwgMTMxLCAzLCAyNDgsIDEyNCwgOCwgNSwgCisgICAgMSwgMjI4LCAxMzEsIDMsIDIxNiwgNzksIDExMywgOCwgNSwgMSwgMjI3LCAxNjQsIDgsIDUsIDEsIDIwNywgMTc0LCAyMjYsIAorICAgIDE4NSwgOCwgNSwgMSwgMjA3LCAxNzQsIDIyNiwgMTg2LCAzLCAxNjMsIDIyNywgMjEwLCA4LCA1LCAxLCAyMjYsIDE4NiwgMywgCisgICAgMTEzLCA4LCA1LCAxLCAyMjMsIDE2NCwgMywgNDksIDExMywgOCwgNSwgMSwgMjIzLCAxNjQsIDMsIDIxNiwgNzksIDExMywgCisgICAgOCwgMSwgNSwgNiwgMjIzLCAxNjMsIDgsIDUsIDEsIDI0OCwgMjI1LCA3OCwgOCwgMSwgNSwgNiwgMjIwLCA3MywgOCwgNSwgCisgICAgMSwgMjQ2LCAxNiwgMjIwLCAzNiwgOCwgNSwgMSwgMjE4LCAxOTIsIDgsIDUsIDEsIDIwNywgMTc0LCAxNDYsIDgsIDUsIDEsIAorICAgIDIwNywgMTc0LCAyMTcsIDEsIDMsIDE2MywgMjI3LCAyMTAsIDgsIDUsIDEsIDIwNywgMTc0LCAyMTcsIDEsIDMsIDExMywgOCwgCisgICAgNSwgMSwgMjE3LCAxLCAzLCAxNjMsIDIyNywgMjEwLCA4LCA1LCAxLCAyMTcsIDEsIDMsIDIwOSwgMjQ4LCA4LCA1LCAxLCAKKyAgICAyMTcsIDEsIDMsIDIzOSwgMjQwLCA4LCA1LCAxLCAyMTYsIDczLCAyMTcsIDEsIDMsIDIzOSwgMjQwLCA4LCAxLCA1LCA2LCAKKyAgICAxNDYsIDgsIDEsIDUsIDYsIDIzMCwgMjM5LCAxNDYsIDgsIDUsIDEsIDIxNSwgOTQsIDMsIDExMywgOCwgNSwgMSwgMjQxLCAKKyAgICA3LCA4LCA1LCAxLCAyNDMsIDg0LCAyMzAsIDE4NSwgMywgMjExLCAzMiwgMjUsIDExMywgOCwgNSwgMSwgMjExLCAxNzQsIAorICAgIDIxNiwgNzMsIDI0MSwgNywgOCwgNSwgMSwgMjQxLCA4LCAzLCAyNDUsIDk1LCA4LCA1LCAxLCAyMDcsIDE3NCwgMjEwLCA2OSwgCisgICAgOCwgNSwgMSwgMjEwLCA3MCwgMywgMjE2LCA3OSwgMTEzLCA4LCA1LCAxLCAxMDYsIDE0MiwgOCwgNSwgMSwgMjA2LCAyMTYsIAorICAgIDgsIDUsIDEsIDIwNiwgMTY1LCAzLCAxMTMsIDgsIDUsIDEsIDIwNywgMTc0LCAyMDYsIDE2NCwgOCwgNSwgMSwgMjA3LCAKKyAgICAxNzQsIDIwNCwgMTQ0LCA4LCA1LCAxLCAyMDcsIDE3NCwgMjAzLCAxMjQsIDgsIDEsIDUsIDYsIDIwMywgMTI0LCA4LCA1LCAKKyAgICAxLCAyMDIsIDE2MCwgMywgMjE2LCA3OSwgMTEzLCA4LCA1LCAxLCAyMDIsIDE2MCwgMywgMjQ1LCA5NSwgOCwgNSwgMSwgCisgICAgMjQwLCAxNzcsIDgsIDUsIDEsIDI0MCwgMTc4LCAzLCAyNDUsIDk1LCA4LCAxLCAyMzgsIDQ1LCAyMTEsIDYxLCA4LCAxLCAKKyAgICAyMTgsIDE5OSwgMjA1LCAxODYsIDIzOSwgMTI2LCA4LCAxLCAyMzAsIDIzOSwgMjM4LCA0NSwgMjExLCA2MSwgOCwgMSwgCisgICAgMjExLCA0MCwgMjQ3LCAxMjUsIDgsIDEsIDI0OCwgNzAsIDI0NiwgMjcsIDgsIDEsIDUsIDYsIDI0OSwgMjU1LCA4LCA1LCAxLCAKKyAgICAyNDYsIDE2LCAxNzEsIDc0LCA4LCAxLCA1LCA2LCAyMzksIDc2LCAzLCAxMTMsIDgsIDEsIDUsIDYsIDIzNywgMTcxLCA4LCAKKyAgICA1LCAxLCAyMzAsIDE4NSwgMywgMjQ1LCAxMjYsIDgsIDUsIDEsIDIwNywgMTc0LCAyMzAsIDU0LCA4LCAxLCA1LCA2LCAxNTksIAorICAgIDgsIDUsIDEsIDIxNywgMTM1LCAzLCAxMTMsIDgsIDEsIDIzOCwgNDUsIDIxMSwgNjIsIDMsIDk1LCA4LCAxLCAyMTYsIDczLCAKKyAgICAyMzgsIDQ1LCAyMTEsIDYyLCAzLCA5NSwgOCwgNSwgMSwgMjQyLCAxLCAyNDMsIDE5MSwgOCwgNSwgMSwgMjQ0LCAzLCAyNDMsIAorICAgIDE5MSwgOCwgNSwgMSwgMjQyLCAxLCAyNDMsIDE5MiwgMywgMjQ1LCA5NSwgOCwgNSwgMSwgMjA4LCAyMiwgMjQzLCAxOTEsIAorICAgIDgsIDUsIDEsIDIwOSwgMTM3LCAyNDMsIDE5MSwgOCwgNSwgMSwgMjA5LCAxOTQsIDI0MywgMTkyLCAzLCAyNDUsIDk1LCA4LCAKKyAgICA1LCAxLCAyNDAsIDM5LCAyNDMsIDE5MSwgOCwgNSwgMSwgMjI2LCAyNDEsIDI0MywgMTkxLCA4LCA1LCAxLCAyMjYsIDE4NywgCisgICAgMjQzLCAxOTEsIDgsIDEsIDI0OCwgNzAsIDIxOCwgMjQ1LCA4LCAxLCAyNDgsIDc4LCAyMTgsIDI0NSwgOCwgNSwgMSwgMjA3LCAKKyAgICAxNzQsIDIzNywgMTcyLCAzLCAyMzksIDI0MCwgOCwgNSwgMSwgMjA3LCAxNzQsIDIzNywgMTcyLCAzLCAyMzksIDI0MSwgMjUsIAorICAgIDIwOSwgMjQ4LCA2NSwgMSwgNSwgMjM3LCAxNzEsIDY1LCAxLCA1LCAyMzcsIDE3MiwgMywgMTEzLCA2NSwgMSwgNSwgMjMwLCAKKyAgICAxODQsIDY1LCAxLCA1LCAxNDYsIDY1LCAxLCA1LCAyMDcsIDE3NCwgMTQ2LCA2NSwgMSwgNSwgMjA3LCAxNzQsIDIxNywgMSwgCisgICAgMywgMTEzLCA2NSwgMSwgNSwgNiwgMjMwLCAyMzksIDE0NiwgNjUsIDEsIDUsIDIwNCwgMTQ0LCA2NSwgMSwgNSwgMjAzLCAKKyAgICAxMjQsIDY1LCAxLCAyMTcsIDIzNiwgNjUsIDEsIDUyLCAyMTcsIDIzNiwgNjUsIDEsIDIwNywgMTc0LCAyNDUsIDIzMywgNjUsIAorICAgIDEsIDI1MCwgMTYwLCA2NSwgMSwgMjE2LCA3MywgMjQ1LCAyMzMsIDY1LCAxLCA1MCwgMTYyLCAyMTUsIDI1MiwgNjUsIDEsIAorICAgIDQ5LCAxNjIsIDIxNSwgMjUyLCA2NSwgMSwgMjM4LCA0NSwgMjExLCA2MSwgNjUsIDEsIDIxNiwgNzMsIDIzOCwgNDUsIDIxMSwgCisgICAgNjEsIDY1LCAxLCA0OSwgMjUwLCA5NCwgNjUsIDEsIDUwLCAyNTAsIDk0LCA2NSwgMSwgMTEyLCAyNTAsIDk0LCA2NSwgMSwgCisgICAgMTIxLCAyNTAsIDk0LCA2NSwgMSwgMjQ2LCA1MywgMjUxLCAxMzgsIDI0NywgMjksIDY1LCAxLCA4MCwgMjI3LCAxMTQsIDY1LCAKKyAgICAxLCAyMjUsIDE3MCwgNjUsIDEsIDI1MSwgMTI2LCAyNTEsIDEzOCwgNjUsIDEsIDIzNywgMjU0LCAyNTEsIDEzOCwgNjUsIDEsIAorICAgIDEyNCwgODAsIDIyNywgMTE0LCA2NSwgMSwgMTI0LCAyMjUsIDE3MCwgNjUsIDEsIDEyNCwgMjM3LCAyNTQsIDI1MSwgMTM4LCAKKyAgICA2NSwgMSwgMTI0LCAyNTEsIDEyNiwgMjUxLCAxMzgsIDY1LCAxLCAyMDgsIDgyLCAyNDUsIDI0MiwgNjUsIDEsIDE2MiwgCisgICAgMjA4LCA4MiwgMjQ1LCAyNDIsIDY1LCAxLCAyNDYsIDIxNiwgNTAsIDE2MiwgMjE1LCAyNTIsIDY1LCAxLCAyNDYsIDIxNiwgCisgICAgNDksIDE2MiwgMjE1LCAyNTIsIDY1LCAxLCAxMTIsIDIxMCwgMywgNjUsIDEsIDEyMSwgMjEwLCAzLCA2NSwgMSwgOTEsIDU0LCAKKyAgICA2NSwgMSwgMjI0LCAxMDMsIDU0LCAyNDcsIDIxNCwgNzAsIDU1LCAyMTUsIDI1MywgNTUsIDIyMCwgNjIsIDUsIDIwOCwgCisgICAgMjI3LCA1MiwgMjUxLCAxMjYsIDI1MSwgMTM4LCA2NSwgMSwgMjE2LCA1OCwgMTEzLCA2NSwgMSwgMjQ1LCAxMzEsIDI1MSwgCisgICAgMTM4LCA2NSwgMSwgNSwgMjM4LCAyMzUsIDY1LCAxLCA1LCAxNTksIDY1LCAxLCA1LCAxOTQsIDY1LCAxLCA1LCAyMDMsIAorICAgIDE5NiwgNjUsIDEsIDUsIDIxNiwgNzMsIDIzOCwgNDUsIDIxMSwgNjEsIDY1LCAxLCAyNDAsIDE5OCwgMTQzLCAxNDIsIDY1LCAKKyAgICAxLCAxMzgsIDE0MywgMTQyLCA2NSwgMSwgMjI0LCAxNTAsIDE0MywgMTQyLCA2NSwgMSwgMTI0LCAxNDMsIDE0MiwgNjUsIDEsIAorICAgIDI0MCwgMTk3LCAxNDMsIDE0MiwgNjUsIDEsIDIwMywgMSwgMjQ0LCAyNywgMTQzLCA4MiwgNjUsIDEsIDIwMywgNzcsIDI0NCwgCisgICAgMjcsIDE0MywgODIsIDY1LCAxLCAyMDUsIDE4NCwgNjUsIDEsIDIwNiwgMjUxLCA2NSwgMSwgNTIsIDI1MCwgMTYwLCA2NSwgCisgICAgMSwgMTI0LCAxMjEsIDI1MCwgOTQsIDY1LCAxLCAxMjQsIDExMiwgMjUwLCA5NCwgNjUsIDEsIDEyNCwgNDksIDI1MCwgOTQsIAorICAgIDY1LCAxLCAxMjQsIDUwLCAyNTAsIDk0LCA2NSwgMSwgMTI0LCAyMTUsIDI1MiwgNjUsIDEsIDEwMSwgMjM3LCAyNTQsIDI1MSwgCisgICAgMTM4LCA2NSwgMSwgMTAxLCA1MiwgMjM3LCAyNTQsIDI1MSwgMTM4LCA2NSwgMSwgMTAxLCA1MiwgMjUxLCAxMjYsIDI1MSwgCisgICAgMTM4LCA2NSwgMSwgMTI0LCAyMDgsIDIyNywgNjUsIDEsIDIxNiwgMTg4LCAyNDUsIDI0MiwgNjUsIDEsIDI0OCwgMTQyLCAKKyAgICAxMzgsIDIwOCwgMTYxLCA2NSwgMSwgMjQxLCA4NCwgMTM4LCAyMDgsIDE2MSwgNjUsIDEsIDI0OCwgMTQyLCAxMjQsIDIwOCwgCisgICAgMTYxLCA2NSwgMSwgMjQxLCA4NCwgMTI0LCAyMDgsIDE2MSwgNjUsIDEsIDIxMywgMzQsIDY1LCAxLCAxNzEsIDIxMywgMzQsIAorICAgIDY1LCAxLCAxMjQsIDQ5LCA0NywgMzksIDIzNywgMjU0LCAyNTEsIDEzOCwgMzksIDI1MSwgMTI2LCAyNTEsIDEzOCwgMzksIAorICAgIDI0NiwgNTMsIDI1MSwgMTM4LCAzOSwgMjA4LCAyMjcsIDM5LCAyMjUsIDE3MCwgMzksIDIxOSwgMTk4LCAzOSwgMjQ3LCAKKyAgICAyMTQsIDM5LCA3MCwgNTUsIDM5LCAyNDMsIDIzMSwgMzksIDIzNiwgMTE2LCA1NSwgMzksIDIxNSwgMjUzLCA1NSwgMzksIAorICAgIDUyLCAyNTEsIDEyNiwgMjUxLCAxMzgsIDM5LCAyNDcsIDI5LCAzOSwgODAsIDIyNywgMTE1LCA1NSwgMzksIDUyLCA4MCwgCisgICAgMjI3LCAxMTUsIDU1LCAzOSwgNTIsIDIzNywgMjU0LCAyNTEsIDEzOCwgMzksIDI0NywgNTIsIDM5LCAyMzAsIDIzOSwgMjQ3LCAKKyAgICAyMTQsIDM5LCAyMDcsIDE3NCwgMjQ1LCAyMzQsIDU1LCAzOSwgMjQ1LCAyMzQsIDU1LCAzOSwgMjE2LCA3MywgMjQ1LCAyMzQsIAorICAgIDU1LCAzOSwgMjQ1LCAyMzQsIDg3LCAyMTYsIDE2LCAzOSwgMjM3LCAyNTQsIDI1MSwgMTM5LCA1NiwgMzksIDI1MSwgMTI2LCAKKyAgICAyNTEsIDEzOSwgNTYsIDM5LCA0OSwgMjEwLCA0LCA1NiwgMzksIDUwLCAyMTAsIDQsIDU2LCAzOSwgNDksIDI1MCwgMjE4LCAKKyAgICA1NSwgMzksIDIzNiwgNTMsIDM5LCA0OSwgMTYyLCAyMTUsIDI1MywgNTYsIDM5LCAxMTIsIDIxMCwgNCwgNTYsIDM5LCAxMjEsIAorICAgIDIxMCwgNCwgNTYsIDM5LCA5MSwgMiwgNTYsIDM5LCAyMjQsIDEwMywgMiwgNTYsIDM5LCAyMTksIDE0MCwgMjM2LCAxMTYsIAorICAgIDU2LCAzOSwgMjE2LCA3OSwgMjM2LCAxMTYsIDU2LCAzOSwgNzAsIDU2LCAzOSwgMjQzLCAyMzIsIDU2LCAzOSwgMjE1LCAKKyAgICAyNTMsIDU2LCAzOSwgMjQ1LCAyMzQsIDU2LCAzOSwgMjQ2LCAyMzEsIDM5LCAyMjAsIDYyLCAzOSwgODAsIDIyNywgMTE1LCAKKyAgICA1NiwgMzksIDI0NywgMjA4LCA1NiwgMzksIDIzMCwgMjM5LCA1MiwgMjUwLCAxMjcsIDU2LCAzOSwgMjQ3LCAzMCwgNTYsIAorICAgIDM5LCAyNDYsIDUzLCAyNTEsIDEzOSwgNTYsIDM5LCAyNDcsIDIxNSwgNTYsIDM5LCAyMzAsIDIzOSwgMjQ3LCAyMTUsIDU2LCAKKyAgICAzOSwgMjA4LCAyMjgsIDU2LCAzOSwgMjI1LCAxNzEsIDU2LCAzOSwgMTI0LCAyMjcsIDExNCwgMzksIDUyLCAxMjQsIDIyNywgCisgICAgMTE0LCAzOSwgMjA4LCAyMjgsIDIxOSwgMTk5LCAzOSwgMjEyLCAyMjgsIDIxMSwgMzIsIDIxOSwgMTk5LCAzOSwgMTYzLCAKKyAgICAyMTEsIDMyLCAyMTksIDE5OSwgMzksIDIxMiwgMjI4LCAyMTIsIDEsIDIxOSwgMTk5LCAzOSwgMTYzLCAyMTIsIDEsIDIxOSwgCisgICAgMTk5LCAzOSwgNTAsIDE2MiwgMjE1LCAyNTMsIDU2LCAzOSwgMjMwLCAyMzksIDI0NywgMjA4LCA1NiwgMzksIDUxLCA1NiwgCisgICAgMzksIDIxNCwgMTc2LCA1NiwgMzksIDIwMywgMTk3LCA1NSwgMzksIDgwLCAyMDgsIDIyNywgMzksIDUyLCAyMTksIDE5OCwgCisgICAgMzksIDIzNywgMjU0LCAxNDMsIDgyLCAzOSwgMjUxLCAxMjYsIDE0MywgODIsIDM5LCAzMCwgMjE4LCAyMzksIDM5LCAzMCwgCisgICAgMjI4LCAyNTIsIDM5LCAzMCwgMjQzLCAyMjUsIDIwOCwgMTQ5LCAzOSwgMzAsIDIwMiwgMjIxLCAzOSwgMjQ3LCAyMDgsIDU1LCAKKyAgICAzOSwgMjQxLCAzNSwgMiwgNTYsIDM5LCA1MiwgODAsIDIyNywgMTE1LCA1NiwgMzksIDQ5LCAyNTAsIDIxOCwgNTYsIDM5LCAKKyAgICAyMjEsIDE2NiwgMjA4LCAyMjgsIDU1LCAzOSwgMjM2LCAxMjIsIDU1LCAzOSwgMjUxLCA3LCAxNTYsIDIwOCwgMTczLCA1NSwgCisgICAgMzksIDQ5LCA1MCwgNTMsIDU2LCAzOSwgMTc3LCA1MywgNTYsIDM5LCAyMzgsIDQsIDIzMCwgOTYsIDM5LCA1MCwgMjUwLCAKKyAgICA5NSwgNTUsIDM5LCA0OSwgMTYyLCAyMTUsIDI1MywgNTUsIDM5LCAyNDAsIDM2LCAzOSwgMjAzLCAxOTcsIDU2LCAzOSwgNDksIAorICAgIDI1MCwgOTUsIDU2LCAzOSwgNTAsIDI1MCwgOTUsIDU2LCAzOSwgNTAsIDI1MCwgOTUsIDI1LCAxMTIsIDI1MCwgOTUsIDU2LCAKKyAgICAzOSwgNTAsIDE2MiwgMjE1LCAyNTMsIDU1LCAzOSwgNzAsIDg3LCAyMTYsIDE2LCAzOSwgMjUwLCA2MCwgNTYsIDM5LCA1MiwgCisgICAgMjE1LCAyNTMsIDU2LCAzOSwgMjAyLCAzMCwgNTUsIDM5LCA1MiwgMjQ3LCAyMTUsIDU2LCAzOSwgNTIsIDI0NywgMjE0LCAKKyAgICAzOSwgNTIsIDIyNSwgMTcwLCAzOSwgNTIsIDIyNSwgMTcxLCA1NiwgMzksIDUyLCAyMDgsIDIyNywgMzksIDUyLCAyMzAsIAorICAgIDIzOSwgMjQ3LCAyMTQsIDM5LCA1MiwgODYsIDUzLCA1NiwgMzksIDgsIDUsIDEsIDYzLCAzOSwgOCwgNSwgMSwgNzQsIDM5LCAKKyAgICA4LCA1LCAxLCA3NSwgMzksIDgsIDUsIDEsIDc4LCAzOSwgOCwgNSwgMSwgNjgsIDM5LCA4LCA1LCAxLCAyNDcsIDEyNSwgMzksIAorICAgIDgsIDUsIDEsIDI0NSwgNTEsIDM5LCA4LCA1LCAxLCAyMzcsIDE3MSwgMzksIDgsIDUsIDEsIDIyNiwgMTg1LCAzOSwgOCwgNSwgCisgICAgMSwgMTQ2LCAzOSwgOCwgNSwgMSwgMjEwLCA2OSwgMzksIDgsIDUsIDEsIDIwNiwgMTY0LCAzOSwgOCwgNSwgMSwgMjAzLCAKKyAgICAxOTYsIDMwLCA2LCAxLCAyMzcsIDIwLCAzMCwgNSwgMSwgMjM3LCAyMCwgMzAsIDYsIDEsIDI1MCwgMTI2LCAyMTQsIDI0NiwgCisgICAgMzAsIDUsIDEsIDI1MCwgMTI2LCAyMTQsIDI0NiwgMzAsIDIyMSwgNDQsIDU0LCAzMCwgMjI2LCAyNTEsIDIyMSwgNDQsIDU0LCAKKyAgICAzMCwgNiwgMSwgMjE5LCAxMjYsIDI0MywgMTk5LCAzMCwgNSwgMSwgMjE5LCAxMjYsIDI0MywgMTk5LCAzMCwgMjAyLCAyMjEsIAorICAgIDMwLCA1LCAyMTYsIDczLCAyMjYsIDIyMSwgMjEyLCAxNDUsIDk3LCAzMCwgNSwgMjQyLCA4MywgMjI2LCAyMjEsIDIxMiwgCisgICAgMTQ1LCA5NywgMzAsIDUsIDIxNiwgNzMsIDI0MiwgODMsIDIyNiwgMjIxLCAyMTIsIDE0NSwgOTcsIDMwLCAyMTcsIDQ3LCAKKyAgICA4MiwgMzAsIDYsIDEsIDIwMiwgMjI3LCAzMCwgMjA4LCAxNDksIDMwLCAyNDMsIDIyNSwgMjA4LCAxNDksIDMwLCA2LCAxLCAKKyAgICAyNTEsIDMsIDMsIDIwOCwgMTQ5LCAzMCwgMjUwLCAyMDMsIDIwOSwgMTYzLCAzMCwgNiwgMSwgMjQxLCAzOCwgMywgMjA4LCAKKyAgICAxNDksIDMwLCA2LCAxLCAyNDAsIDI0OSwgMywgMjA4LCAxNDksIDMwLCA2LCAxLCAyMzAsIDIzMSwgMywgMjA4LCAxNDksIAorICAgIDMwLCA2LCAxLCAyMjAsIDM1LCAzLCAyMDgsIDE0OSwgMzAsIDYsIDEsIDIwNiwgMjE3LCAzLCAyMDgsIDE0OSwgMzAsIDYsIAorICAgIDEsIDIyMCwgMzcsIDMsIDIwOCwgMTQ5LCAzMCwgNSwgMSwgMjMwLCAyMzEsIDMsIDI0MywgMjI1LCAyNSwgMjA4LCAxNDksIAorICAgIDMwLCA2LCAxLCAyNTEsIDIsIDMwLCA2LCAxLCAyNDgsIDEwNiwgMzAsIDYsIDEsIDIzOCwgMjM1LCAzMCwgNiwgMSwgMjQ0LCAKKyAgICAzNywgMzAsIDYsIDEsIDI0MSwgMzcsIDMwLCA2LCAxLCAyMDIsIDgzLCAzMCwgNiwgMSwgMjQwLCAyNDgsIDMwLCA2LCAxLCAKKyAgICAyMDksIDc0LCAzMCwgNiwgMSwgMjMwLCAyMzAsIDMwLCA2LCAxLCAyMjksIDI0NywgMzAsIDYsIDEsIDIyOCwgMjQsIDMwLCAKKyAgICA2LCAxLCAyMjMsIDI0NiwgMzAsIDYsIDEsIDIyMSwgODQsIDMwLCA2LCAxLCAyMDMsIDE3MCwgMzAsIDYsIDEsIDIyMCwgMzQsIAorICAgIDMwLCA2LCAxLCAyMTgsIDE2NywgMzAsIDYsIDEsIDIxNiwgNTksIDMwLCA2LCAxLCAyMTIsIDE0NCwgMzAsIDYsIDEsIDIwOSwgCisgICAgMjA3LCAzMCwgNiwgMSwgMjA2LCAyMTYsIDMwLCA2LCAxLCAyMTgsIDE5MiwgMzAsIDYsIDEsIDI0NiwgMTQyLCAzMCwgNiwgCisgICAgMSwgMjE3LCAyMDIsIDMwLCA2LCAxLCAyMjAsIDM2LCAzMCwgNiwgMSwgMjMwLCAyMzEsIDMsIDI0MywgMjI0LCAzMCwgNiwgCisgICAgMSwgMjA2LCAyMTcsIDMsIDI0MywgMjI0LCAzMCwgNSwgMSwgMjUxLCAzLCAzLCAyMDgsIDE0OSwgMzAsIDUsIDEsIDI0MSwgCisgICAgMzgsIDMsIDIwOCwgMTQ5LCAzMCwgNSwgMSwgMjQwLCAyNDksIDMsIDIwOCwgMTQ5LCAzMCwgNSwgMSwgMjMwLCAyMzEsIDMsIAorICAgIDIwOCwgMTQ5LCAzMCwgNSwgMSwgMjA2LCAyMTcsIDMsIDI0MywgMjI1LCAyNSwgMjA4LCAxNDksIDMwLCA1LCAxLCAyNTEsIAorICAgIDIsIDMwLCA1LCAxLCAyNDgsIDEwNiwgMzAsIDUsIDEsIDIzOCwgMjM1LCAzMCwgNSwgMSwgMjQ0LCAzNywgMzAsIDUsIDEsIAorICAgIDI0MSwgMzcsIDMwLCA1LCAxLCAyMDIsIDgzLCAzMCwgNSwgMSwgMjQwLCAyNDgsIDMwLCA1LCAxLCAyMDksIDc0LCAzMCwgNSwgCisgICAgMSwgMjMwLCAyMzAsIDMwLCA1LCAxLCAyMjksIDI0NywgMzAsIDUsIDEsIDIyOCwgMjQsIDMwLCA1LCAxLCAyMjMsIDI0NiwgCisgICAgMzAsIDUsIDEsIDIyMSwgODQsIDMwLCA1LCAxLCAyMDMsIDE3MCwgMzAsIDUsIDEsIDIyMCwgMzQsIDMwLCA1LCAxLCAyMTgsIAorICAgIDE2NywgMzAsIDUsIDEsIDIxNiwgNTksIDMwLCA1LCAxLCA0NiwgMjEyLCAxNDQsIDMwLCA1LCAxLCAyMTIsIDE0NCwgMzAsIAorICAgIDUsIDEsIDIwOSwgMjA3LCAzMCwgNSwgMSwgMjA2LCAyMTYsIDMwLCA1LCAxLCAyMTgsIDE5MiwgMzAsIDUsIDEsIDI0NiwgCisgICAgMTQyLCAzMCwgNSwgMSwgMjE3LCAyMDIsIDMwLCA1LCAxLCAyMjAsIDM2LCAzMCwgNSwgMSwgMjMwLCAyMzEsIDMsIDI0MywgCisgICAgMjI0LCAzMCwgNSwgMSwgMjA2LCAyMTcsIDMsIDI0MywgMjI0LCAzMCwgNSwgMSwgMjIwLCAzNSwgMywgMjA4LCAxNDksIDMwLCAKKyAgICA1LCAxLCAyMDYsIDIxNywgMywgMjA4LCAxNDksIDMwLCA1LCAxLCAyMjAsIDM3LCAzLCAyMDgsIDE0OSwgMzAsIDYsIDIzMCwgCisgICAgMTksIDk3LCAzMCwgMjQ4LCAxMDcsIDk3LCAzMCwgMjA5LCA3NSwgOTcsIDMwLCAyMDYsIDIxNywgMywgMjM2LCAxMTYsIDk3LCAKKyAgICAzMCwgMjA2LCAyMTcsIDMsIDI1MSwgMTI2LCAyNSwgMjM2LCAxMTYsIDk3LCAzMCwgMjA2LCAyMTcsIDMsIDI0MywgMjMyLCAKKyAgICAyNSwgMjM2LCAxMTYsIDk3LCAzMCwgMjE4LCAxOTMsIDk3LCAzMCwgMjE4LCAxNjgsIDk3LCAzMCwgMjMwLCAxOSwgOTcsIAorICAgIDMwLCAxLCAyNTAsIDEyNiwgMjI5LCAwLCAzMCwgNSwgMSwgMjUwLCAxMjYsIDIyOSwgMCwgMzAsIDEsIDIxMSwgNzEsIDMwLCAKKyAgICA1LCAxLCAyMTEsIDcxLCAzMCwgMSwgMjQzLCAxOTksIDMwLCA1LCAxLCAyNDMsIDE5OSwgMzAsIDEsIDIyOSwgMCwgMzAsIDUsIAorICAgIDEsIDIyOSwgMCwgMzAsIDEsIDIxNCwgMjQ2LCAzMCwgNSwgMSwgMjE0LCAyNDYsIDg0LCA2LCAxLCAyMTMsIDM1LCA4NCwgNSwgCisgICAgMSwgMjEzLCAzNSwgODQsIDYsIDEsIDI0MCwgNDUsIDg0LCA1LCAxLCAyNDAsIDQ1LCA4NCwgNiwgMSwgMjI5LCAxMjcsIDg0LCAKKyAgICA1LCAxLCAyMjksIDEyNywgODQsIDYsIDEsIDIzNiwgMTA3LCA4NCwgNSwgMSwgMjM2LCAxMDcsIDg0LCA2LCAxLCAyMzgsIAorICAgIDIzMCwgODQsIDUsIDEsIDIzOCwgMjMwLCA4NCwgNiwgMSwgMjEzLCAxLCA4NCwgNSwgMSwgMjEzLCAxLCA4NCwgNiwgMSwgCisgICAgMjQ0LCA1MiwgODQsIDUsIDEsIDI0NCwgNTIsIDMwLCAyMjksIDI0OCwgOTcsIDMwLCAyMTYsIDYwLCA5NywgMzAsIDIyNiwgCisgICAgMjIxLCAyMTIsIDE0NSwgOTcsIDMwLCAxLCAyMDIsIDIyNywgMzAsIDYsIDIwOSwgNzUsIDk3LCAzMCwgMjI2LCAyMjEsIAorICAgIDI0MSwgMzgsIDk3LCAzMCwgMjE2LCA3MywgMjI2LCAyMjEsIDI0MSwgMzgsIDk3LCAzMCwgNiwgMSwgMjEyLCAyNDIsIDMwLCAKKyAgICA1LCAxLCAyMTIsIDI0MiwgMzAsIDYsIDIyNiwgMjIxLCAyMTIsIDE0NSwgOTcsIDMwLCA2LCAxLCAyMTQsIDI0MywgMzAsIDUsIAorICAgIDEsIDIxNCwgMjQzLCAzMCwgMjE2LCA2MCwgMywgMjExLCAzMiwgOTcsIDMwLCA2LCAyMTYsIDczLCAyMjYsIDIyMSwgMjEyLCAKKyAgICAxNDUsIDk3LCAzMCwgNiwgMjQyLCA4MywgMjI2LCAyMjEsIDIxMiwgMTQ1LCA5NywgMzAsIDYsIDIxNiwgNzMsIDI0MiwgODMsIAorICAgIDIyNiwgMjIxLCAyMTIsIDE0NSwgOTcsIDM2LCA2LCAxLCAyMzEsIDExMSwgMywgMjM3LCAyNTMsIDM2LCA2LCAxLCAyMzAsIAorICAgIDIzNCwgMzYsIDYsIDEsIDI0MywgMTMwLCAzNiwgNiwgMSwgMjM4LCA1MiwgMzYsIDYsIDEsIDIwNywgMTEsIDIzMSwgMTEwLCAKKyAgICAzNiwgNiwgMSwgMjQxLCAyNTIsIDM2LCA2LCAxLCAyNDcsIDEzNSwgNzUsIDM2LCA2LCAxLCAyMDMsIDExLCAzNiwgNiwgMSwgCisgICAgMjMwLCAxNjEsIDM2LCA2LCAxLCAyMjcsIDgwLCAzNiwgNiwgMSwgMjIyLCA0MSwgMzYsIDYsIDEsIDIwOCwgOCwgMzYsIDYsIAorICAgIDEsIDIyOSwgNDksIDM2LCA2LCAxLCAyMzUsIDIwNiwgMywgMjM3LCAyNTMsIDM2LCA2LCAxLCAyMTIsIDIyOCwgNjgsIDM2LCAKKyAgICA2LCAxLCAyNDEsIDI0OCwgMzYsIDYsIDEsIDYzLCAzNiwgNiwgMSwgMjQ4LCAxNjIsIDM2LCA2LCAxLCAyMDYsIDU1LCAzNiwgCisgICAgNiwgMSwgMjM4LCAxMDUsIDM2LCA2LCAxLCAyNDQsIDc1LCAzNiwgNiwgMSwgMjMxLCAxMTAsIDM2LCA2LCAxLCAyMDIsIDcxLCAKKyAgICAzNiwgNiwgMSwgMjAyLCA5MiwgMzYsIDYsIDEsIDc1LCAzNiwgNiwgMSwgMjEyLCAyMjgsIDc1LCAzNiwgNiwgMSwgMTczLCAKKyAgICAzNiwgNiwgMSwgMjQxLCAxMjIsIDM2LCA2LCAxLCAyNDEsIDEwMywgMzYsIDYsIDEsIDI0MSwgOTIsIDM2LCA2LCAxLCA3OCwgCisgICAgMzYsIDYsIDEsIDIxOSwgMzQsIDM2LCA2LCAxLCAyNDEsIDI4LCAzNiwgNiwgMSwgMjQxLCAxNywgMzYsIDYsIDEsIDIwOSwgCisgICAgMTg3LCAzNiwgNiwgMSwgNjgsIDM2LCA2LCAxLCAyNDEsIDE1NCwgMzYsIDYsIDEsIDE1MiwgMzYsIDYsIDEsIDIwOCwgMTQsIAorICAgIDM2LCA2LCAxLCAyNDYsIDE3MCwgMzYsIDYsIDEsIDIxMywgOTAsIDM2LCA2LCAxLCAyMTMsIDQ2LCAzNiwgNiwgMSwgMjM3LCAKKyAgICA5MSwgNTQsIDM2LCA2LCAxLCAyMDMsIDMwLCAzNiwgNiwgMSwgMjEyLCA3LCA1NCwgMzYsIDYsIDEsIDc0LCAzNiwgNiwgMSwgCisgICAgMjAyLCAyMTMsIDM2LCA2LCAxLCAxOTgsIDM2LCA1LCAxLCA2MywgMzYsIDUsIDEsIDI0OCwgMTYyLCAzNiwgNSwgMSwgMjA2LCAKKyAgICA1NSwgMzYsIDUsIDEsIDIzOCwgMTA1LCAzNiwgNSwgMSwgMjQ0LCA3NSwgMzYsIDUsIDEsIDIzMSwgMTEwLCAzNiwgNSwgMSwgCisgICAgMjAyLCA3MSwgMzYsIDUsIDEsIDIwMiwgOTIsIDM2LCA1LCAxLCA3NSwgMzYsIDUsIDEsIDIxMiwgMjI4LCA3NSwgMzYsIDUsIAorICAgIDEsIDE3MywgMzYsIDUsIDEsIDI0MSwgMTIyLCAzNiwgNSwgMSwgMjQxLCAxMDMsIDM2LCA1LCAxLCAyNDEsIDkyLCAzNiwgNSwgCisgICAgMSwgNzgsIDM2LCA1LCAxLCAyMTksIDM0LCAzNiwgNSwgMSwgMjQxLCAyOCwgMzYsIDUsIDEsIDI0MSwgMTcsIDM2LCA1LCAxLCAKKyAgICAyMDksIDE4NywgMzYsIDUsIDEsIDY4LCAzNiwgNSwgMSwgMjQxLCAxNTQsIDM2LCA1LCAxLCAxNTIsIDM2LCA1LCAxLCAyMDgsIAorICAgIDE0LCAzNiwgNSwgMSwgMjQ2LCAxNzAsIDM2LCA1LCAxLCAyMTMsIDkwLCAzNiwgNSwgMSwgMjEzLCA0NiwgMzYsIDUsIDEsIAorICAgIDIzNywgOTEsIDU0LCAzNiwgNSwgMSwgMjAzLCAzMCwgMzYsIDUsIDEsIDIxMiwgNywgNTQsIDM2LCA1LCAxLCA3NCwgMzYsIAorICAgIDUsIDEsIDIwMiwgMjEzLCAzNiwgNSwgMSwgMTk4LCAzNiwgNSwgMSwgMjMxLCAxMTEsIDMsIDIzNywgMjUzLCAzNiwgNSwgMSwgCisgICAgMjMwLCAyMzQsIDM2LCA1LCAxLCAyNDMsIDEzMCwgMzYsIDUsIDEsIDIzOCwgNTIsIDM2LCA1LCAxLCAyMDcsIDExLCAyMzEsIAorICAgIDExMCwgMzYsIDUsIDEsIDI0MSwgMjUyLCAzNiwgNSwgMSwgMjQ3LCAxMzUsIDc1LCAzNiwgNSwgMSwgMjAzLCAxMSwgMzYsIAorICAgIDUsIDEsIDIzMCwgMTYxLCAzNiwgNSwgMSwgMjI3LCA4MCwgMzYsIDUsIDEsIDIyMiwgNDEsIDM2LCA1LCAxLCAyMDgsIDgsIAorICAgIDM2LCA1LCAxLCAyMjksIDQ5LCAzNiwgNSwgMSwgMjM1LCAyMDYsIDMsIDIzNywgMjUzLCAzNiwgNSwgMSwgMjEyLCAyMjgsIAorICAgIDY4LCAzNiwgNSwgMSwgMjQxLCAyNDgsIDM2LCA2LCAxLCAyMjAsIDM2LCAzNiwgNSwgMSwgMjIwLCAzNiwgMzYsIDYsIDEsIAorICAgIDIwMywgNjYsIDM2LCA1LCAxLCAyMDMsIDY2LCAzNiwgNiwgMSwgMjMwLCAyMjgsIDc0LCAzNiwgNSwgMSwgMjMwLCAyMjgsIAorICAgIDc0LCAzNiwgNiwgMSwgMjI3LCA4NiwgMjAyLCAxODMsIDM2LCA1LCAxLCAyMjcsIDg2LCAyMDIsIDE4MywgMzYsIDYsIDEsIAorICAgIDIzMCwgMjI4LCAyMjcsIDg2LCAyMDIsIDE4MywgMzYsIDUsIDEsIDIzMCwgMjI4LCAyMjcsIDg2LCAyMDIsIDE4MywgMzYsIAorICAgIDYsIDEsIDI0OCwgNzMsIDIwMiwgMTgzLCAzNiwgNSwgMSwgMjQ4LCA3MywgMjAyLCAxODMsIDM2LCA2LCAxLCAyMzAsIDIyOCwgCisgICAgMjQ4LCA3MywgMjAyLCAxODMsIDM2LCA1LCAxLCAyMzAsIDIyOCwgMjQ4LCA3MywgMjAyLCAxODMsIDM2LCA2LCAxLCAyMjgsIAorICAgIDIyNSwgMzYsIDUsIDEsIDIyOCwgMjI1LCAzNiwgNiwgMSwgMjE3LCAyMDIsIDM2LCA1LCAxLCAyMTcsIDIwMiwgMzYsIDYsIAorICAgIDEsIDIzOSwgMjM1LCAzNiwgNSwgMSwgMjM5LCAyMzUsIDM2LCA2LCAxLCAyMzAsIDE4NiwgMzYsIDUsIDEsIDIzMCwgMTg2LCAKKyAgICAzNiwgNiwgMSwgMjMwLCAxODcsIDMsIDUyLCAyMzcsIDI1NCwgMjUxLCAxMzgsIDM2LCA1LCAxLCAyMzAsIDE4NywgMywgNTIsIAorICAgIDIzNywgMjU0LCAyNTEsIDEzOCwgMzYsIDYsIDEsIDIwNywgMTQsIDM2LCA1LCAxLCAyMDcsIDE0LCAzNiwgNiwgMSwgMjE1LCAKKyAgICAxOTEsIDIyMCwgMzYsIDM2LCA1LCAxLCAyMTUsIDE5MSwgMjIwLCAzNiwgMzYsIDYsIDEsIDIyMCwgMzcsIDMsIDIwOCwgCisgICAgMTk3LCAzNiwgNSwgMSwgMjIwLCAzNywgMywgMjA4LCAxOTcsIDM2LCA2LCAxLCAyMTksIDIyNCwgMzYsIDUsIDEsIDIxOSwgCisgICAgMjI0LCAzNiwgNiwgMSwgMjI5LCAwLCAzNiwgNSwgMSwgMjI5LCAwLCAzNiwgMjA5LCAzNSwgNTQsIDM5LCAzNiwgMjA4LCAKKyAgICAxOTcsIDM5LCAzNiwgMjE5LCAxNDEsIDM5LCAzNiwgMjQ0LCAxNDIsIDIxOCwgNzEsIDM5LCAzNiwgMjE3LCAxOTYsIDIxOCwgCisgICAgNzEsIDM5LCAzNiwgMjE4LCA1NSwgMzksIDM2LCAyMzYsIDEyLCAyMDksIDM1LCA1NCwgMzksIDM2LCAyMjQsIDExNCwgNTQsIAorICAgIDM2LCA2LCAxLCAyMTIsIDIyOCwgMjM1LCAyMDYsIDMsIDIwOSwgMjQ4LCAzNiwgNSwgMSwgMjEyLCAyMjgsIDIzNSwgMjA2LCAKKyAgICAzLCAyMDksIDI0OCwgMzYsIDYsIDEsIDIxMywgMTM5LCA1NCwgMzYsIDUsIDEsIDIxMywgMTM5LCA1NCwgMzYsIDYsIDEsIAorICAgIDI0MSwgMjksIDMsIDIwOCwgMjU0LCAzNiwgNSwgMSwgMjQxLCAyOSwgMywgMjA4LCAyNTQsIDM2LCA2LCAxLCAyMzgsIDEwNiwgCisgICAgMywgMjA2LCAyMTUsIDM2LCA1LCAxLCAyMzgsIDEwNiwgMywgMjA2LCAyMTUsIDM2LCA2LCAxLCAyMzgsIDEwNiwgMywgOTUsIAorICAgIDM2LCA1LCAxLCAyMzgsIDEwNiwgMywgOTUsIDM2LCA2LCAxLCAyMzgsIDEwNiwgMywgMTAxLCAxMTMsIDM2LCA1LCAxLCAKKyAgICAyMzgsIDEwNiwgMywgMTAxLCAxMTMsIDM2LCA2LCAxLCAyMDIsIDcyLCAzLCAyNDQsIDIwLCAzNiwgNSwgMSwgMjAyLCA3MiwgCisgICAgMywgMjQ0LCAyMCwgMzYsIDYsIDEsIDIwMiwgOTMsIDMsIDI0NCwgMjAsIDM2LCA1LCAxLCAyMDIsIDkzLCAzLCAyNDQsIDIwLCAKKyAgICAzNiwgNiwgMSwgMjMwLCA0NCwgMywgMjQ0LCAyMCwgMzYsIDUsIDEsIDIzMCwgNDQsIDMsIDI0NCwgMjAsIDM2LCA2LCAxLCAKKyAgICAyMzAsIDQ0LCAzLCA4MCwgOTUsIDM2LCA1LCAxLCAyMzAsIDQ0LCAzLCA4MCwgOTUsIDM2LCA2LCAxLCAyMzAsIDQ0LCAzLCAKKyAgICA5NSwgMzYsIDUsIDEsIDIzMCwgNDQsIDMsIDk1LCAzNiwgNiwgMSwgMjQ4LCAyMTQsIDE3MywgMzYsIDUsIDEsIDI0OCwgCisgICAgMjE0LCAxNzMsIDM2LCA2LCAxLCAyNDEsIDkzLCAzLCAyNDQsIDIwLCAzNiwgNSwgMSwgMjQxLCA5MywgMywgMjQ0LCAyMCwgCisgICAgMzYsIDYsIDMyLCAyNDEsIDkzLCAyMzgsIDEwNSwgMzYsIDUsIDMyLCAyNDEsIDkzLCAyMzgsIDEwNSwgMzYsIDYsIDEsIAorICAgIDIxOSwgMzUsIDMsIDEwMSwgMTEzLCAzNiwgNSwgMSwgMjE5LCAzNSwgMywgMTAxLCAxMTMsIDM2LCA2LCAxLCAyNTEsIDE0NSwgCisgICAgMTUyLCAzNiwgNSwgMSwgMjUxLCAxNDUsIDE1MiwgMzYsIDYsIDEsIDI0MSwgMTgsIDMsIDI0NCwgMjAsIDM2LCA1LCAxLCAKKyAgICAyNDEsIDE4LCAzLCAyNDQsIDIwLCAzNiwgNiwgMSwgMjA5LCAxODgsIDMsIDI0NCwgMjAsIDM2LCA1LCAxLCAyMDksIDE4OCwgCisgICAgMywgMjQ0LCAyMCwgMzYsIDYsIDEsIDIxMSwgNTMsIDY4LCAzNiwgNSwgMSwgMjExLCA1MywgNjgsIDM2LCA2LCAxLCAyMTEsIAorICAgIDUzLCAxMDYsIDMsIDk1LCAzNiwgNSwgMSwgMjExLCA1MywgMTA2LCAzLCA5NSwgMzYsIDYsIDEsIDIzNywgMTYwLCAzLCAKKyAgICAyNDQsIDIwLCAzNiwgNSwgMSwgMjM3LCAxNjAsIDMsIDI0NCwgMjAsIDM2LCA2LCAzMiwgMjA5LCAxODgsIDIwOCwgMTQsIAorICAgIDM2LCA1LCAzMiwgMjA5LCAxODgsIDIwOCwgMTQsIDM2LCA2LCAxLCAyNDYsIDE3MSwgMywgMjQ0LCAyMCwgMzYsIDUsIDEsIAorICAgIDI0NiwgMTcxLCAzLCAyNDQsIDIwLCAzNiwgNiwgMSwgMjQ2LCAxNzEsIDMsIDgwLCA5NSwgMzYsIDUsIDEsIDI0NiwgMTcxLCAKKyAgICAzLCA4MCwgOTUsIDM2LCA2LCAxLCAyMTMsIDEyLCAzNiwgNSwgMSwgMjEzLCAxMiwgMzYsIDYsIDEsIDI1MSwgMTQ1LCAyNDYsIAorICAgIDE3MCwgMzYsIDUsIDEsIDI1MSwgMTQ1LCAyNDYsIDE3MCwgMzYsIDYsIDEsIDI1MSwgMTQ1LCAyNDYsIDE3MSwgMywgMjQ0LCAKKyAgICAyMCwgMzYsIDUsIDEsIDI1MSwgMTQ1LCAyNDYsIDE3MSwgMywgMjQ0LCAyMCwgMzYsIDEsIDIxOSwgMTMzLCAzNiwgNiwgMSwgCisgICAgMjAyLCA3MiwgMywgMjQ3LCAyMTQsIDM2LCA1LCAxLCAyMDIsIDcyLCAzLCAyNDcsIDIxNCwgMzYsIDYsIDEsIDIzMCwgNDQsIAorICAgIDMsIDExMywgMzYsIDUsIDEsIDIzMCwgNDQsIDMsIDExMywgMzYsIDYsIDEsIDI0MSwgMTIzLCAzLCAyMDksIDI0OCwgMzYsIAorICAgIDUsIDEsIDI0MSwgMTIzLCAzLCAyMDksIDI0OCwgMzYsIDYsIDEsIDI0MSwgOTMsIDMsIDExMywgMzYsIDUsIDEsIDI0MSwgCisgICAgOTMsIDMsIDExMywgMzYsIDYsIDEsIDI0MSwgOTMsIDMsIDIwOSwgMjQ4LCAzNiwgNSwgMSwgMjQxLCA5MywgMywgMjA5LCAKKyAgICAyNDgsIDM2LCA2LCAxLCAyMjksIDEzOCwgMjQ2LCAxNzAsIDM2LCA1LCAxLCAyMjksIDEzOCwgMjQ2LCAxNzAsIDM2LCA2LCAKKyAgICAxLCAyNDEsIDEwNCwgMywgMjA5LCAyNDgsIDM2LCA1LCAxLCAyNDEsIDEwNCwgMywgMjA5LCAyNDgsIDM2LCA1LCAxLCAyMTksIAorICAgIDEzMywgMzYsIDYsIDEsIDM0LCAzLCAyNDcsIDIxNCwgMzYsIDUsIDEsIDM0LCAzLCAyNDcsIDIxNCwgMzYsIDYsIDEsIDM0LCAKKyAgICAzLCAyNDMsIDIzMSwgMzYsIDUsIDEsIDM0LCAzLCAyNDMsIDIzMSwgMzYsIDYsIDMyLCAzNCwgMjMxLCAxMTAsIDM2LCA1LCAKKyAgICAzMiwgMzQsIDIzMSwgMTEwLCAzNiwgNiwgMSwgMjMxLCAxMTEsIDMsIDI0NywgMjE0LCAzNiwgNSwgMSwgMjMxLCAxMTEsIDMsIAorICAgIDI0NywgMjE0LCAzNiwgNiwgMSwgMjE0LCAxOTIsIDM2LCA1LCAxLCAyMTQsIDE5MiwgMzYsIDYsIDEsIDIxNCwgMTkzLCAzLCAKKyAgICAyNDMsIDIzMSwgMzYsIDUsIDEsIDIxNCwgMTkzLCAzLCAyNDMsIDIzMSwgMzYsIDYsIDEsIDIwMiwgNzIsIDMsIDI0MywgCisgICAgMjMxLCAzNiwgNSwgMSwgMjAyLCA3MiwgMywgMjQzLCAyMzEsIDM2LCA2LCAxLCAyMDIsIDkzLCAzLCAyNDMsIDIzMSwgMzYsIAorICAgIDUsIDEsIDIwMiwgOTMsIDMsIDI0MywgMjMxLCAzNiwgNiwgMSwgMjUxLCAxNDUsIDI0MSwgMjUyLCAzNiwgNSwgMSwgMjUxLCAKKyAgICAxNDUsIDI0MSwgMjUyLCAzNiwgNiwgMSwgMjM1LCAyMDYsIDMsIDIyNSwgMTcwLCAzNiwgNSwgMSwgMjM1LCAyMDYsIDMsIAorICAgIDIyNSwgMTcwLCAzNiwgNiwgMSwgMjM1LCAyMDYsIDMsIDI0MywgMjMxLCAzNiwgNSwgMSwgMjM1LCAyMDYsIDMsIDI0MywgCisgICAgMjMxLCAzNiwgNiwgMSwgMTU4LCAzLCAyNDMsIDIzMSwgMzYsIDUsIDEsIDE1OCwgMywgMjQzLCAyMzEsIDM2LCA2LCAxLCAKKyAgICAyNDgsIDIyNSwgNzgsIDM2LCA1LCAxLCAyNDgsIDIyNSwgNzgsIDM2LCA2LCAxLCAyNDgsIDIyNSwgMTU4LCAzLCAyNDMsIAorICAgIDIzMSwgMzYsIDUsIDEsIDI0OCwgMjI1LCAxNTgsIDMsIDI0MywgMjMxLCAzNiwgNiwgMSwgMTg4LCAzLCAyNDMsIDIzMSwgCisgICAgMzYsIDUsIDEsIDE4OCwgMywgMjQzLCAyMzEsIDM2LCA2LCAxLCAxMDYsIDMsIDIyNSwgMTcwLCAzNiwgNSwgMSwgMTA2LCAzLCAKKyAgICAyMjUsIDE3MCwgMzYsIDYsIDEsIDEwNiwgMywgMjQzLCAyMzEsIDM2LCA1LCAxLCAxMDYsIDMsIDI0MywgMjMxLCAzNiwgNiwgCisgICAgMSwgMTA2LCAzLCA1MiwgMTY1LCAzNiwgNSwgMSwgMTA2LCAzLCA1MiwgMTY1LCAzNiwgNiwgMSwgMjQ2LCAxNzEsIDMsIAorICAgIDI0MywgMjMxLCAzNiwgNSwgMSwgMjQ2LCAxNzEsIDMsIDI0MywgMjMxLCAzNiwgNiwgMSwgMjM4LCAxMDYsIDMsIDI0NCwgCisgICAgMjAsIDM2LCA1LCAxLCAyMzgsIDEwNiwgMywgMjQ0LCAyMCwgMzYsIDYsIDEsIDIwMywgMzEsIDMsIDI0MywgMjMxLCAzNiwgCisgICAgNSwgMSwgMjAzLCAzMSwgMywgMjQzLCAyMzEsIDM2LCA2LCAxLCAyMzgsIDEwNiwgMywgMjExLCAzMiwgMjUsIDExMywgMzYsIAorICAgIDUsIDEsIDIzOCwgMTA2LCAzLCAyMTEsIDMyLCAyNSwgMTEzLCAzNiwgNiwgMSwgMjM3LCAxNjAsIDMsIDExMywgMzYsIDUsIAorICAgIDEsIDIzNywgMTYwLCAzLCAxMTMsIDM2LCA2LCAxLCAyMzcsIDE2MCwgMywgOTUsIDM2LCA1LCAxLCAyMzcsIDE2MCwgMywgCisgICAgOTUsIDM2LCA2LCAxLCAyMjksIDEwLCAyNDQsIDc1LCAzNiwgNSwgMSwgMjI5LCAxMCwgMjQ0LCA3NSwgMzYsIDYsIDEsIAorICAgIDIyOSwgMTAsIDI0MywgMTMwLCAzNiwgNSwgMSwgMjI5LCAxMCwgMjQzLCAxMzAsIDM2LCA2LCAxLCAyMjksIDEwLCAyMDIsIAorICAgIDIxLCAzNiwgNSwgMSwgMjI5LCAxMCwgMjAyLCAyMSwgMzYsIDYsIDEsIDIyOSwgMTAsIDI0MSwgMjQ0LCAzNiwgNSwgMSwgCisgICAgMjI5LCAxMCwgMjQxLCAyNDQsIDM2LCA2LCAxLCAyMjksIDEwLCAyMjcsIDgwLCAzNiwgNSwgMSwgMjI5LCAxMCwgMjI3LCAKKyAgICA4MCwgMzYsIDYsIDEsIDIyOSwgMTAsIDIyMiwgNDEsIDM2LCA1LCAxLCAyMjksIDEwLCAyMjIsIDQxLCAzNiwgNiwgMSwgCisgICAgMjI5LCAxMCwgMjEyLCA3MSwgMzYsIDUsIDEsIDIyOSwgMTAsIDIxMiwgNzEsIDM2LCA2LCAxLCAyMjksIDEwLCAyMDgsIAorICAgIDE5MSwgMzYsIDUsIDEsIDIyOSwgMTAsIDIwOCwgMTkxLCAzNiwgNiwgMSwgMjE2LCA3MywgMjAyLCA5MiwgMzYsIDUsIDEsIAorICAgIDIxNiwgNzMsIDIwMiwgOTIsIDM2LCA2LCAxLCAyNDEsIDEyMywgMywgMTEzLCAzNiwgNSwgMSwgMjQxLCAxMjMsIDMsIDExMywgCisgICAgMzYsIDYsIDEsIDIyNywgMTYxLCAzNiwgNSwgMSwgMjI3LCAxNjEsIDM2LCA2LCAxLCAyMTYsIDYxLCAzNiwgNSwgMSwgMjE2LCAKKyAgICA2MSwgMzYsIDYsIDEsIDIwMywgOTksIDM2LCA1LCAxLCAyMDMsIDk5LCAzNiwgNiwgMSwgMjE3LCAxMjYsIDM2LCA1LCAxLCAKKyAgICAyMTcsIDEyNiwgMzYsIDYsIDEsIDIwNCwgNjIsIDM2LCA1LCAxLCAyMDQsIDYyLCAzNiwgNiwgMSwgMjUxLCAyNiwgMTczLCAKKyAgICAzNiwgNSwgMSwgMjUxLCAyNiwgMTczLCAzNiwgNiwgMSwgMjQxLCAxMjMsIDMsIDEwMSwgMTEzLCAzNiwgNSwgMSwgMjQxLCAKKyAgICAxMjMsIDMsIDEwMSwgMTEzLCAzNiwgNiwgMSwgMjQxLCA5MywgMywgMTAxLCAxMTMsIDM2LCA1LCAxLCAyNDEsIDkzLCAzLCAKKyAgICAxMDEsIDExMywgMzYsIDYsIDEsIDIxOSwgMzUsIDMsIDI0NCwgMjAsIDM2LCA1LCAxLCAyMTksIDM1LCAzLCAyNDQsIDIwLCAKKyAgICAzNiwgNiwgMSwgMjEzLCAxMywgMywgMjQ0LCAyMCwgMzYsIDUsIDEsIDIxMywgMTMsIDMsIDI0NCwgMjAsIDM2LCA2LCAxLCAKKyAgICAyNDEsIDkzLCAzLCA0OSwgMTEzLCAzNiwgNSwgMSwgMjQxLCA5MywgMywgNDksIDExMywgMzYsIDYsIDEsIDI0MSwgMjM3LCAKKyAgICAzNiwgNSwgMSwgMjQxLCAyMzcsIDM2LCA2LCAxLCAyNDQsIDEyNCwgMzYsIDUsIDEsIDI0NCwgMTI0LCAzNiwgNiwgMSwgCisgICAgMjQxLCAxMjMsIDMsIDI0NCwgMjAsIDM2LCA1LCAxLCAyNDEsIDEyMywgMywgMjQ0LCAyMCwgMTc4LCA2LCAxLCAyNTAsIDUsIAorICAgIDE3OCwgNiwgMSwgMjQ4LCAxMjIsIDE3OCwgNiwgMSwgMjM4LCA2OSwgMTc4LCA2LCAxLCAyNDQsIDIxMiwgMTc4LCA2LCAxLCAKKyAgICAyNDEsIDE2NywgMTc4LCA2LCAxLCAyMDIsIDExNiwgMTc4LCA2LCAxLCAyNDEsIDE0NywgMTc4LCA2LCAxLCAyNDAsIDI1MCwgCisgICAgMTc4LCA2LCAxLCAxMzUsIDE3OCwgNiwgMSwgMjAyLCA3MSwgMTc4LCA2LCAxLCAyMzEsIDE5LCAxNzgsIDYsIDEsIDIyNywgCisgICAgODMsIDE3OCwgNiwgMSwgMjAzLCAxNzQsIDE3OCwgNiwgMSwgMjQ3LCA5MiwgMTc4LCA2LCAxLCAyMjksIDE4MCwgMTc4LCA2LCAKKyAgICAxLCAyMzYsIDEzNiwgMTc4LCA2LCAxLCAyMzAsIDE4MSwgMTc4LCA2LCAxLCAyMzgsIDExNiwgMTc4LCA2LCAxLCAyNDYsIAorICAgIDE2MCwgMTc4LCA2LCAxLCAyMjQsIDI0MCwgMTc4LCA2LCAxLCAyMDMsIDExLCAxNzgsIDYsIDEsIDIyMSwgMTUyLCAxNzgsIAorICAgIDYsIDEsIDIxMywgOTAsIDE3OCwgNiwgMSwgMjA1LCAxODksIDE3OCwgNiwgMSwgMjQ2LCAxOTksIDE3OCwgNiwgMSwgMjE5LCAKKyAgICAxNiwgMTc4LCA2LCAxLCAyMzAsIDE0NCwgMTc4LCA2LCAxLCAyMTYsIDIyMCwgMTc4LCA2LCAxLCAyMTQsIDE1NSwgMTc4LCAKKyAgICA2LCAxLCAyMDUsIDIzNCwgMTc4LCA2LCAxLCAyMDgsIDE5NCwgMTc4LCA2LCAxLCAyMTYsIDEyMiwgMTc4LCA2LCAxLCAyNDUsIAorICAgIDI1NCwgMTc4LCA2LCAxLCAyMDIsIDI1MiwgMTc4LCA2LCAxLCAyMTgsIDEwMiwgMTc4LCA2LCAxLCAyMjksIDE5MSwgMTc4LCAKKyAgICA2LCAxLCAyMjAsIDYwLCAxNzgsIDYsIDEsIDI0MCwgNDcsIDE3OCwgNjUsIDEsIDQ5LCAxNjIsIDIxNSwgMjUyLCAxNzgsIAorICAgIDI1MCwgMTYwLCAxNzgsIDI0MSwgOTYsIDgyLCAxNzgsIDI0MCwgMjEyLCA4MiwgMTc4LCAyNDUsIDIzMywgMTc4LCAyMTcsIAorICAgIDQ3LCA4MiwgMTc4LCAyNTEsIDE0NiwgODIsIDE3OCwgNSwgMSwgMjUwLCA1LCAxNzgsIDUsIDEsIDI0OCwgMTIyLCAxNzgsIAorICAgIDUsIDEsIDIzOCwgNjksIDE3OCwgNSwgMSwgMjQ0LCAyMTIsIDE3OCwgNSwgMSwgMjQxLCAxNjcsIDE3OCwgNSwgMSwgMjAyLCAKKyAgICAxMTYsIDE3OCwgNSwgMSwgMjQxLCAxNDcsIDE3OCwgNSwgMSwgMjQwLCAyNTAsIDE3OCwgNSwgMSwgMTM1LCAxNzgsIDUsIDEsIAorICAgIDIwMiwgNzEsIDE3OCwgNSwgMSwgMjMxLCAxOSwgMTc4LCA1LCAxLCAyMjcsIDgzLCAxNzgsIDUsIDEsIDIwMywgMTc0LCAKKyAgICAxNzgsIDUsIDEsIDI0NywgOTIsIDE3OCwgNSwgMSwgMjI5LCAxODAsIDE3OCwgNSwgMSwgMjM2LCAxMzYsIDE3OCwgNSwgMSwgCisgICAgMjMwLCAxODEsIDE3OCwgNSwgMSwgMjM4LCAxMTYsIDE3OCwgNSwgMSwgMjQ2LCAxNjAsIDE3OCwgNSwgMSwgMjI0LCAyNDAsIAorICAgIDE3OCwgNSwgMSwgMjAzLCAxMSwgMTc4LCA1LCAxLCAyMjEsIDE1MiwgMTc4LCA1LCAxLCAyMTMsIDkwLCAxNzgsIDUsIDEsIAorICAgIDIwNSwgMTg5LCAxNzgsIDUsIDEsIDI0NiwgMTk5LCAxNzgsIDUsIDEsIDIxOSwgMTYsIDE3OCwgNSwgMSwgMjMwLCAxNDQsIAorICAgIDE3OCwgNSwgMSwgMjE2LCAyMjAsIDE3OCwgNSwgMSwgMjE0LCAxNTUsIDE3OCwgNSwgMSwgMjA1LCAyMzQsIDE3OCwgNSwgMSwgCisgICAgMjA4LCAxOTQsIDE3OCwgNSwgMSwgMjE2LCAxMjIsIDE3OCwgNSwgMSwgMjQ1LCAyNTQsIDE3OCwgNSwgMSwgMjAyLCAyNTIsIAorICAgIDE3OCwgNSwgMSwgMjE4LCAxMDIsIDE3OCwgNSwgMSwgMjI5LCAxOTEsIDE3OCwgNSwgMSwgMjIwLCA2MCwgMTc4LCA1LCAxLCAKKyAgICAyNDAsIDQ3LCAxNzgsIDUsIDMyLCAyNDEsIDE2OCwgMjAyLCAyNTIsIDE3OCwgMjM5LCAxMDIsIDIxMSwgNjEsIDE3OCwgCisgICAgMjM1LCAyMjAsIDIxNiwgMTUsIDE3OCwgMjQwLCAyNDYsIDU0LCAyMjcsIDIyMSwgMTc4LCAyNDAsIDI0NiwgNTQsIDE3OCwgCisgICAgMjQyLCA2MCwgNTQsIDExMCwgMjUxLCAxMzksIDI0MCwgMjQxLCAxMTAsIDI1MSwgMTM5LCAyMTQsIDE1NiwgMTEwLCAyNTEsIAorICAgIDEzOSwgMjEzLCA2OSwgMTEwLCAyNTEsIDEzOSwgMjAyLCAxMDMsIDIxNywgMTA5LCAxMTAsIDI1MSwgMTM5LCAyMDIsIDEwMywgCisgICAgMjM4LCAyNTQsIDExMCwgMjUxLCAxMzksIDIwOCwgMjA5LCAxMTAsIDI1MSwgMTM5LCAyMTYsIDcwLCAxMTAsIDI1MSwgMTM5LCAKKyAgICAyMDIsIDEwMSwgMTEwLCAyNTEsIDEzOSwgMjE5LCA2MSwgMTEwLCAyNTEsIDEzOSwgMjAzLCAyMywgMTEwLCAyNTEsIDEzOSwgCisgICAgMjA5LCAxMTUsIDExMCwgMjUxLCAxMzksIDIzOCwgMTY3LCAxMTAsIDI1MSwgMTM5LCAyMzgsIDE2OCwgMjIzLCAyMDgsIAorICAgIDExMCwgMjUxLCAxMzksIDIzOCwgMTY1LCAxMTAsIDI1MSwgMTM5LCAyMTcsIDExMCwgMjE5LCA5MCwgMTEwLCAyNTEsIDEzOSwgCisgICAgMjA5LCAxNTgsIDIzOCwgMTgzLCAxMTAsIDI1MSwgMTM5LCAyMTksIDQwLCAxMTAsIDI1MSwgMTM5LCAyNTAsIDQzLCAyMzcsIAorICAgIDE1MiwgMTEwLCAyNTEsIDEzOSwgMjIzLCAyMTgsIDExMCwgMjUxLCAxMzksIDIyNSwgMTQ1LCAxMTAsIDI1MSwgMTM5LCAKKyAgICAyMjQsIDIyOSwgMTEwLCAyNTEsIDEzOSwgMjI0LCAyMzAsIDIyOSwgMTkyLCAxMTAsIDI1MSwgMTM5LCAyNDQsIDE1MSwgCisgICAgMTEwLCAyNTEsIDEzOSwgMjE3LCAxMjEsIDExMCwgMjUxLCAxMzksIDIwOSwgMTU4LCAyMTcsIDEwNCwgMTEwLCAyNTEsIAorICAgIDEzOSwgMjAzLCAzMywgMjQ4LCAxMjMsIDIwMiwgMjMzLCAxMTAsIDI1MSwgMTM5LCAyMjAsIDQzLCAxMTAsIDI1MSwgMTM5LCAKKyAgICAyMzEsIDY5LCAxMTAsIDI1MSwgMTM5LCAyNDQsIDUzLCAxMTAsIDI1MSwgMTM5LCAyMDIsIDI4LCAxMTAsIDEzMSwgMjI1LCAKKyAgICA3NSwgMjQ2LCA2MSwgMTEwLCAyMTgsIDYzLCAyMTMsIDE1LCAxMTAsIDIxOCwgNjMsIDIzNywgODIsIDIxNCwgMTU2LCAxMTAsIAorICAgIDIxOCwgNjMsIDIzNywgODIsIDIxOSwgNTQsIDExMCwgMjE4LCA2MywgMjM3LCA4MiwgMjE3LCAxMTQsIDExMCwgMjE4LCA2MywgCisgICAgMjM2LCAyMzIsIDExMCwgMjE4LCA2MywgMjA4LCAxMSwgMTEwLCAyMTgsIDYzLCAyMTQsIDE1NiwgMTEwLCAyMTgsIDYzLCAKKyAgICAyMTksIDU0LCAxMTAsIDIxOCwgNjMsIDIxNywgMTE0LCAxMTAsIDIxOCwgNjMsIDIzNiwgMTI4LCAxMTAsIDIxOCwgNjMsIAorICAgIDIzNiwgMTI5LCAyMzcsIDg0LCAzNSwgMjA2LCA1OSwgMTEwLCAyMTgsIDYzLCAyMTcsIDUxLCAxMTAsIDIxOCwgNjMsIDI0NCwgCisgICAgMTk4LCAyMTksIDI0NSwgMjI1LCAxMDUsIDExMCwgMjE4LCA2MywgMjI0LCAyMTksIDExMCwgMjE3LCAxNzksIDIyNSwgMTAyLCAKKyAgICAxMTAsIDIxOCwgNjMsIDIxNiwgMjAwLCAxMTAsIDIxNywgMTc5LCAyMTksIDYzLCAxMTAsIDIxOCwgNjMsIDIxMywgMCwgCisgICAgMjQzLCA4NSwgMTEwLCAyMTgsIDYzLCAyMTIsIDEyNCwgMjQzLCA4NSwgMTEwLCAyMTcsIDE3OSwgMjEyLCA4LCAyMTksIDU2LCAKKyAgICAxMTAsIDEzMSwgMjA2LCAyMjEsIDI0MywgODUsIDExMCwgMTMxLCAyMjYsIDI1MSwgMjQzLCA4NSwgMTEwLCAyMTcsIDE3OSwgCisgICAgMjIxLCA0MSwgMjM3LCAxNTEsIDExMCwgMjE4LCA2MywgMjE3LCAxMTUsIDIxNywgMTA5LCAxMTAsIDEsIDI1MSwgMzAsIAorICAgIDExMCwgMSwgMjQ4LCAxMDgsIDExMCwgMSwgMjM4LCA2NywgMTEwLCAxLCAyNDQsIDE3OCwgMTEwLCAxLCAyMzcsIDY3LCAKKyAgICAxMTAsIDEsIDIwNiwgNTksIDExMCwgMSwgMjAyLCA5NSwgMTEwLCAxLCAyMzcsIDIxLCAxMTAsIDEsIDIwOSwgMTMyLCAxMTAsIAorICAgIDEsIDIwMiwgMjM2LCAxMTAsIDEsIDQ2LCAyMzAsIDIyLCAxMTAsIDEsIDIzMCwgMjIsIDExMCwgMSwgMjI4LCAyMCwgMTEwLCAKKyAgICAxLCA0NiwgMjI0LCAyNDcsIDExMCwgMSwgMjI0LCAyNDcsIDExMCwgMSwgNDYsIDIyMSwgNDAsIDExMCwgMSwgMjIxLCA0MCwgCisgICAgMTEwLCAxLCAyMTQsIDI0OSwgMTEwLCAxLCAyNTAsIDMsIDExMCwgMSwgNDYsIDIxOSwgMzQsIDExMCwgMSwgMjE5LCAzNCwgCisgICAgMTEwLCAxLCA0NiwgMjA4LCAxNSwgMTEwLCAxLCAyMDgsIDE1LCAxMTAsIDEsIDIxNywgNzQsIDExMCwgMSwgMjE2LCA5MSwgCisgICAgMTEwLCAxLCAyMTIsIDI1NSwgMTEwLCAxLCAyMDksIDIwMywgMTEwLCAzMiwgMjAzLCA5LCA1MiwgMjA2LCA1OSwgMTEwLCAKKyAgICAzMiwgMjAzLCA5LCAyMDYsIDYwLCAyMDIsIDIzNiwgMTEwLCAzMiwgMjAzLCA5LCA1MiwgMjAyLCAyMzYsIDExMCwgMjE3LCAKKyAgICAxNzksIDIzOCwgMTY3LCAxMTAsIDIxNywgMTc5LCAyMzgsIDE2NSwgMTAsIDQyLCA1NCwgMTAsIDIsIDIxNCwgMjQyLCAxMCwgCisgICAgMjM5LCAxNzAsIDIyNSwgODgsIDEwLCAyLCAyMTUsIDI0LCAxMCwgMiwgMjE0LCAyNDUsIDEwLCA0MiwgMTMxLCA1NSwgMjUwLCAKKyAgICAxNDAsIDI0NSwgMTA2LCAyMTUsIDIwNCwgMjUwLCAxNDAsIDIzOSwgMTQwLCAyMTUsIDIwNCwgMTAsIDIxNiwgMTY1LCAyNTAsIAorICAgIDE0MCwgMjE4LCAyNDcsIDIyNCwgMTE2LCA1NCwgMjUwLCAxNDAsIDIxOCwgMjQ3LCAyMDksIDE1MywgMjA5LCAzNywgNTQsIAorICAgIDI1MSwgODYsIDU0LCAxMCwgMjQ1LCAyMzMsIDEwLCAyNDQsIDEzOCwgMjEzLCAxMzAsIDEwLCAyMTgsIDY1LCAyMDYsIDQwLCAKKyAgICA1NCwgMTAsIDIsIDIyNCwgOTUsIDEwLCAyLCAyMTUsIDMsIDI1MSwgMzMsIDIwNCwgODYsIDEwLCAyLCAyNTEsIDMzLCAyNTAsIAorICAgIDY0LCAxMCwgMiwgMjE2LCAxOTgsIDI1MSwgMzIsIDEwLCAyLCAyMTYsIDIwNiwgMjUxLCAxMiwgMjUwLCAyMTAsIDEwLCAyLCAKKyAgICAyMDksIDI0MCwgMTAsIDUsIDEzOCwgMjA5LCAyNTEsIDEwLCA1LCAxMzgsIDMyLCAxMzcsIDMsIDIyOCwgMjksIDMsIDIwMywgCisgICAgNDcsIDEwLCA1LCAxMzgsIDIwMiwgMTA3LCAxMCwgNSwgMjQwLCA3MSwgMTAsIDUsIDI0NCwgMTcyLCAxMCwgNSwgMjI5LCAKKyAgICAyMjksIDEwLCAyMTMsIDE0MywgMTAsIDEsIDgyLCAxMCwgMjA4LCA3MCwgNzAsIDIxNywgMTc5LCA4MiwgMTAsIDIxNywgNDcsIAorICAgIDgyLCAxMCwgMSwgMjI5LCAyMzMsIDIwMywgNDcsIDEwLCAxLCAyMzcsIDEyNywgMTAsIDEsIDEzNywgMywgMjI1LCAxNjYsIAorICAgIDU1LCAxMCwgMSwgMTM3LCAzLCAyMzcsIDEyOCwgNTUsIDEwLCAxLCAyMDQsIDcxLCAzLCAyMzcsIDEyOCwgNTUsIDEwLCAxLCAKKyAgICAxMzcsIDMsIDIzNywgMTI4LCA1NiwgMTAsIDEsIDg5LCAzLCAyMzcsIDEyOCwgNTUsIDEwLCAxLCAyNTEsIDMwLCAxMCwgMSwgCisgICAgMjQ4LCAxMzgsIDEwLCAxLCAyMDksIDE3MCwgMjI1LCA5OCwgMTAsIDEsIDIwOSwgMTY5LCAxMCwgMSwgMjA5LCA4OCwgMTAsIAorICAgIDEsIDIzMCwgMTU4LCAxMCwgMSwgMjM3LCAxNDgsIDEwLCAxLCAyMjksIDE0MCwgMTAsIDEsIDI0NCwgMTg0LCAxMCwgMSwgCisgICAgMjA5LCAxMDAsIDEwLCAxLCAyMTYsIDEyMiwgMTAsIDEsIDIwMiwgMTA3LCAxMCwgMSwgMjE0LCAxNjEsIDEwLCAxLCAyMTMsIAorICAgIDM5LCAxMCwgMSwgMjE1LCAyOCwgMTAsIDEsIDI0NCwgMjA3LCAxMCwgMSwgMjA5LCAyNTEsIDEwLCAxLCAyMDIsIDExMCwgCisgICAgMTAsIDEsIDI1MSwgNTksIDEwLCAxLCAyMzgsIDExNCwgMTAsIDEsIDIyOSwgMTkwLCAzLCAxMjAsIDE4NywgNTUsIDEwLCAxLCAKKyAgICAyMjksIDE5MCwgMywgMTI2LCAxODcsIDU2LCAxMCwgMSwgMjQwLCA3NSwgODksIDMsIDIzMCwgMjM5LCAyMDYsIDE2NCwgMTAsIAorICAgIDEsIDI0MCwgNzUsIDg5LCAzLCAxMjAsIDE4NywgNTUsIDEwLCAxLCAyNDAsIDc1LCA4OSwgMywgMTI2LCAxODcsIDU1LCAxMCwgCisgICAgMjA5LCAyMDksIDEwLCAxLCAyNDAsIDQ3LCAxMCwgMSwgMjE3LCAxMTksIDEwLCAxLCAyMzAsIDIyLCAxMCwgMSwgMjI4LCAKKyAgICAyOCwgMTAsIDEsIDIyNSwgNSwgMTAsIDEsIDIyMSwgMTc4LCAxMCwgMSwgMjM3LCA0MywgMTAsIDEsIDIwNCwgNzAsIDEwLCAKKyAgICAxLCAxMzcsIDIyNSwgMTI5LCAxMCwgMSwgMjAzLCA0NywgMTAsIDI0MCwgNjksIDEwLCAyNDQsIDE3MCwgMTAsIDIyOSwgCisgICAgMjI3LCAxMCwgMjQwLCA3MSwgMTAsIDI0NCwgMTcyLCAxMCwgMjI5LCAyMjksIDEwLCAyMTMsIDgwLCAxMCwgMjEwLCAyMjIsIAorICAgIDEwLCAyMjUsIDE2NCwgNTUsIDEwLCAyMzcsIDEyOCwgNTUsIDEwLCAyMzcsIDEyOCwgNTYsIDEwLCAyMTAsIDI0NiwgMjUxLCAKKyAgICAzMCwgMTAsIDIzMCwgMjM5LCAyNDQsIDE3MiwgMTAsIDEzMSwgMjIxLCAxNzksIDIzOCwgODUsIDEwLCAyMDEsIDI0OCwgMTAsIAorICAgIDIyLCAyLCA1LCAyMDYsIDE2NSwgNTUsIDEwLCAyMiwgMiwgMjMwLCAyMzksIDUsIDIwNiwgMTY1LCA1NSwgMTAsIDIyLCAyLCAKKyAgICA3MCwgNTYsIDEwLCAyMTYsIDczLCAyNDQsIDE3MiwgMTAsIDI0MCwgNzIsIDMsIDEyMCwgMjQzLCA4MywgMTAsIDIwNCwgNzIsIAorICAgIDIzNywgMTI4LCA1NiwgMjUwLCAxNDAsIDE3LCAyMDIsIDg0LCAyNTAsIDE0MCwgMTcsIDEwNSwgMjUwLCAxNDAsIDE3LCAKKyAgICAxMDgsIDI1MCwgMTQwLCAxNywgMTQ3LCAyNTAsIDE0MCwgMTcsIDE0OSwgMjUwLCAxNDAsIDE3LCAxNzAsIDI1MCwgMTQwLCAKKyAgICAxNywgMTk1LCAyNTAsIDE0MCwgMTcsIDIxMywgMTExLCAyNTAsIDE0MCwgMTcsIDE5OSwgMjUwLCAxNDAsIDE3LCAyMjIsIAorICAgIDYzLCAxMCwgMjE4LCAyNDYsIDU0LCAxMCwgMjQ0LCA2OCwgMjEzLCAxMzAsIDEwLCAyMDksIDM1LCAyMTMsIDEzMCwgMTAsIAorICAgIDIzOSwgMjMzLCAyMTgsIDYxLCAyMTEsIDk0LCAxMCwgMSwgMjQzLCA4NCwgMjQ4LCAxMzgsIDEwLCAxLCAyNDMsIDg0LCAKKyAgICAyMTcsIDExOSwgMTAsIDEsIDIxMCwgMTk5LCAyNTEsIDMwLCAxMCwgMSwgMTM3LCAyMDQsIDg3LCAxMCwgMSwgMTM3LCAzLCAKKyAgICAyMDQsIDcyLCAyMzcsIDEyOCwgNTUsIDEwLCAxLCAxMzcsIDMsIDIwNCwgNzIsIDIzNywgMTI4LCA1NiwgMTAsIDEsIDEzOCwgCisgICAgMjM3LCAxMjcsIDEwLCAxLCAxMzgsIDIzNywgMTI4LCAyNTEsIDMwLCAxMCwgMSwgMTM4LCAyMzcsIDEyOCwgMjA0LCA3MCwgCisgICAgMTAsIDEsIDEwNiwgMywgMjM3LCAxMjgsIDU1LCAxMCwgMSwgMTM4LCAyMzcsIDEyOCwgMjAzLCA0NywgMTAsIDEsIDIwNywgCisgICAgMjMzLCAxMCwgMSwgMjA3LCAyMzEsIDEwLCAxLCAyNDgsIDE0OCwgMTAsIDEsIDIwOSwgMTcwLCAzLCAyMTUsIDI1MiwgMTAsIAorICAgIDEsIDIwOSwgMTcwLCAzLCAxMjYsIDE4NywgODcsIDI0MiwgNjgsIDEwLCAxLCAyMTksIDE2LCAxMCwgMSwgMjA5LCAxNjcsIAorICAgIDEwLCAxLCAyNDgsIDEzNiwgMTAsIDEsIDE1MSwgMywgMjM3LCAxMjgsIDU1LCAxMCwgMSwgMTUxLCAzLCAxMjAsIDE4NywgCisgICAgODAsIDU1LCAxMCwgMSwgMjIwLCAyNTQsIDEwLCAxLCAyNDIsIDUsIDEwLCAxLCAxNTEsIDMsIDEyNiwgMTg3LCA1NSwgMTAsIAorICAgIDEsIDIwOSwgMTkxLCAxMCwgMSwgMjA5LCAxODksIDEwLCAxLCAyNDQsIDExNSwgMTAsIDEsIDI0NCwgMTg1LCAzLCAyMTUsIAorICAgIDI1MiwgMTAsIDEsIDI0NCwgMTg1LCAzLCA3MCwgNTYsIDEwLCAxLCAyNDQsIDE4NSwgMywgNzAsIDI0OCwgMTI2LCAyNSwgNSwgCisgICAgMjA5LCAyNTEsIDEwLCAxLCAyNDQsIDE5MSwgMTAsIDEsIDI0NCwgMTE3LCAxMCwgMSwgMjQyLCAzMywgMTAsIDEsIDI0NCwgCisgICAgMTg1LCAzLCAxMjYsIDE4NywgODcsIDI0MiwgNjgsIDEwLCAxLCAyNDQsIDE4NSwgMywgMjM5LCAxNDcsIDE4NywgNTUsIDEwLCAKKyAgICAxLCAyMTUsIDE3NywgMTAsIDEsIDIxNiwgMTIzLCAzLCA1LCAyMDYsIDE2NCwgMTAsIDEsIDIxNiwgMTIzLCAzLCAyMTUsIAorICAgIDI1MiwgMTAsIDEsIDIxNiwgMTIzLCAzLCA3MCwgNTYsIDEwLCAxLCAyMTYsIDEyMywgMywgNSwgMjA2LCAxNjUsIDU2LCAxMCwgCisgICAgMSwgMjE2LCAxMjMsIDMsIDcwLCAyNDgsIDEyNiwgMjUsIDcwLCA1NSwgMTAsIDEsIDIxNiwgMTIzLCAzLCAxMjAsIDE4NywgCisgICAgNTUsIDEwLCAxLCAyMzAsIDE1NSwgMTAsIDEsIDIxNiwgMTIzLCAzLCAyMzksIDE0NywgMTg3LCA1NSwgMTAsIDEsIDIxNCwgCisgICAgMTYyLCAzLCA3MCwgMjQ4LCAxMjYsIDI1LCA3MCwgNTUsIDEwLCAxLCAyMTQsIDE2MiwgMywgMTI2LCAxODcsIDU2LCAxMCwgCisgICAgMSwgMjE0LCAxNjIsIDMsIDEyNiwgMTg3LCAyNDgsIDEyNiwgMjUsIDEyNiwgMTg3LCA1NSwgMTAsIDEsIDIxNSwgMjksIDMsIAorICAgIDEyMCwgMTg3LCA1NiwgMTAsIDEsIDIxNSwgMjksIDMsIDEyNiwgMTg3LCA1NSwgMTAsIDEsIDIwOSwgMjUyLCAzLCAxMjYsIAorICAgIDE4NywgNTUsIDEwLCAxLCAyNTEsIDYwLCAzLCAxMjYsIDE4NywgNTUsIDEwLCAxLCAyNDMsIDg0LCAyNDAsIDQ3LCAxMCwgMSwgCisgICAgMjQwLCA0OCwgMywgNzAsIDIyNCwgNSwgNTYsIDEwLCAxLCAyNDAsIDQ4LCAzLCA3MCwgNTYsIDEwLCAxLCAyMDYsIDQ4LCAKKyAgICAxMCwgMSwgMjQwLCA0OCwgMywgMTI2LCAxODcsIDU2LCAxMCwgMSwgMjE5LCAxNCwgMTAsIDEsIDIxNywgMTIwLCAzLCA3MCwgCisgICAgNTUsIDEwLCAxLCAyMTcsIDEyMCwgMywgMTI2LCAxODcsIDU1LCAxMCwgMSwgMjI5LCAxODksIDEwLCAxLCAyMTAsIDE2OSwgCisgICAgMjMwLCAyMiwgMTAsIDEsIDIzMCwgMjMsIDMsIDIxNSwgMjUyLCAxMCwgMSwgMjMwLCAyMywgMywgNzAsIDU1LCAxMCwgMSwgCisgICAgMjIyLCAyMDUsIDEwLCAxLCAyMzAsIDIzLCAzLCAxMjYsIDE4NywgNTYsIDEwLCAxLCAyMzgsIDI1MSwgMTAsIDEsIDIzOCwgCisgICAgMjUyLCAzLCAyMTUsIDI1MiwgMTAsIDEsIDIyMiwgMTI2LCAxMCwgMSwgMjM4LCAyNTIsIDMsIDEyMCwgMTg3LCA1NiwgMTAsIAorICAgIDEsIDIzNywgMjE3LCAxMCwgMSwgMjM4LCAyNTIsIDMsIDEyNiwgMTg3LCA1NSwgMTAsIDEsIDIyOCwgMjksIDMsIDUsIDIwNiwgCisgICAgMTY0LCAxMCwgMSwgMjI4LCAyOSwgMywgNzAsIDU1LCAxMCwgMSwgMjI4LCAyOSwgMywgMTI2LCAxODcsIDU1LCAxMCwgMSwgCisgICAgMjI4LCAyOSwgMywgMTI2LCAxODcsIDU2LCAxMCwgMSwgMjIxLCAxNzksIDMsIDcwLCA1NiwgMTAsIDEsIDIyMSwgMTc5LCAKKyAgICAyMzgsIDg1LCAxMCwgMSwgMjE1LCAyMzAsIDEwLCAxLCAyMjEsIDE3OSwgMywgMjE1LCAyNTIsIDEwLCAxLCAyMjEsIDE3OSwgCisgICAgMywgMTI2LCAxODcsIDU1LCAxMCwgMSwgMjM3LCA0NCwgMjQzLCAxMDksIDEwLCAxLCAyMDksIDE5MiwgMywgNzAsIDU1LCAKKyAgICAxMCwgMSwgMjM3LCA0NCwgMywgODksIDU1LCAxMCwgMSwgMjM3LCA0NCwgMjM4LCAzNiwgMTAsIDEsIDIzNywgNDQsIDIzOCwgCisgICAgMzcsIDMsIDIzNywgMTI4LCA1NSwgMTAsIDEsIDIwOSwgMTcwLCAyMjUsIDk5LCAyMzgsIDM2LCAxMCwgMSwgMjA0LCA3MSwgCisgICAgMywgMjE1LCAyNTIsIDEwLCAxLCAyMjksIDc2LCAyMjAsIDczLCAxMCwgMSwgMjIwLCA3MywgMTAsIDEsIDY4LCAxMCwgMSwgCisgICAgMjAyLCAyMTMsIDEwLCAxLCAyMjksIDc2LCAyMDIsIDIxMywgMTAsIDEsIDIwNCwgNzEsIDMsIDEyMCwgMTg3LCA1NSwgMTAsIAorICAgIDEsIDIwNiwgNTUsIDEwLCAxLCAyNDAsIDc1LCAyMDMsIDQ3LCAxMCwgMSwgODksIDMsIDIwOSwgMjQ4LCAxMCwgMSwgODksIAorICAgIDMsIDUsIDIwNiwgMTY0LCAxMCwgMSwgMjA0LCA3MSwgMywgNzAsIDU1LCAxMCwgMSwgNzQsIDEwLCAxLCA4OSwgMywgMTI2LCAKKyAgICAxODcsIDU2LCAxMCwgMSwgODksIDI0OCwgMjIzLCAxMCwgMSwgODksIDI0OCwgMjI0LCAzLCAyMzcsIDEyOCwgNTUsIDEwLCAKKyAgICAyMzksIDEwMiwgMjExLCA2MSwgMTAsIDEsIDI1MSwgMTA5LCAxMCwgNSwgMTM4LCAzMiwgMjE1LCAyOSwgMywgMjI4LCAyOSwgCisgICAgMywgMTM3LCAyMjUsIDEyOSwgMTAsIDUsIDEzOCwgMzIsIDIxNywgMTIwLCAzLCAyMjgsIDI5LCAzLCAxMzcsIDIyNSwgMTI5LCAKKyAgICAxMCwgNSwgMTM4LCA4MywgODEsIDE4LCAxMCwgNSwgMTM4LCAyMjgsIDI5LCAyNTEsIDMwLCAxMCwgNSwgMTM4LCAyMzAsIAorICAgIDE1OCwgMTAsIDUsIDEzOCwgMTI2LCAyNDMsIDgzLCAxMCwgNSwgMTM4LCAyMTQsIDE2MSwgMTAsIDI0MSwgODQsIDc2LCAKKyAgICAyNTAsIDcsIDEwLCAyMTEsIDkwLCA3NiwgMjE1LCAxNDMsIDI0MSwgMTIzLCAyMzYsIDIyNywgMTAsIDUsIDEzOCwgMjE1LCAKKyAgICAxODksIDIwMiwgODQsIDEwLCA1LCAxMzgsIDIwNiwgMjE5LCAyMTYsIDE0MiwgMjAyLCA4NCwgMTAsIDUsIDEzOCwgMjQzLCAKKyAgICA4NCwgMjM3LCA2NSwgNzYsIDIyOSwgMTQwLCAxMCwgNSwgMTM4LCA4MywgNjQsIDE4LCAxMCwgNSwgMTI0LCAyMTQsIDE2MSwgCisgICAgMTAsIDUsIDEzOCwgMjI1LCAxNjUsIDEwLCA1LCAyMDQsIDcwLCAxMCwgNSwgMjAzLCA0NywgMTAsIDUsIDEzOCwgMjAzLCAKKyAgICA0NywgMTAsIDUsIDEzOCwgMjIxLCAxNzgsIDEwLCAyMTgsIDk3LCA3NiwgMjE1LCAxNCwgMTAsIDI0MSwgOTQsIDI0NiwgCisgICAgMjE4LCAxMjQsIDIxMSwgNjEsIDEwLCAyNDEsIDk0LCAyNDYsIDIxOCwgMTM4LCAyMTEsIDYxLCAxMCwgMjE1LCAxODksIAorICAgIDEzOCwgMjExLCA2MiwgMywgMjQwLCA4LCAyNDYsIDIxNywgMTAsIDUsIDEyNCwgMjI1LCA1LCAxMCwgMSwgMjQ0LCAxODUsIAorICAgIDMsIDIzMCwgMjM5LCAyMDYsIDE2NCwgMTAsIDEsIDIxNiwgMTIzLCAzLCAyMzAsIDIzOSwgMjA2LCAxNjQsIDI0MCwgMjAyLCAKKyAgICAyNTAsIDE0MCwgMTcsIDIwMiwgODQsIDI0MCwgMjAyLCAyNTAsIDE0MCwgMTcsIDEwNSwgMjQwLCAyMDIsIDI1MCwgMTQwLCAKKyAgICAxNywgMTA4LCAyNDAsIDIwMiwgMjUwLCAxNDAsIDE3LCAxNDcsIDI0MCwgMjAyLCAyNTAsIDE0MCwgMTcsIDE0OSwgMjQwLCAKKyAgICAyMDIsIDI1MCwgMTQwLCAxNywgMTcwLCAyNDAsIDIwMiwgMjUwLCAxNDAsIDE3LCAxOTUsIDI0MCwgMjAyLCAyNTAsIDE0MCwgCisgICAgMTcsIDIxMywgMTExLCAyNDAsIDIwMiwgMjUwLCAxNDAsIDE3LCAxOTksIDI0MCwgMjAyLCAyNTAsIDE0MCwgMTcsIDIyMiwgCisgICAgNjMsIDEwLCAxLCAyMTMsIDQwLCAzLCA3MCwgNTYsIDEwLCAxLCAyNDQsIDIwOCwgMywgNzAsIDU2LCAxMCwgMSwgMjM4LCAKKyAgICAxMTUsIDMsIDcwLCA1NiwgMTAsIDIsIDIxMiwgMTIzLCAyNTAsIDIzNSwgMTAsIDIsIDIxMiwgMTIzLCAyMTgsIDI3LCAyMjQsIAorICAgIDI0MCwgMTAsIDEsIDIzNywgNDQsIDMsIDIzMCwgMjM5LCAyMDYsIDE2NCwgMjEwLCA4OSwgMjQxLCA4NCwgNzYsIDIxOSwgCisgICAgODgsIDIxMCwgODksIDIxMCwgMTk1LCAyMzksIDEwMiwgMjExLCA2MSwgMjEwLCA4OSwgMjEwLCAyNDgsIDIzOSwgMTAyLCAKKyAgICAyMTEsIDYxLCAyMTAsIDg5LCAyMTAsIDE5NSwgMjQ1LCAyNDIsIDIxMCwgODksIDIxMCwgMjQ4LCAyNDUsIDI0MiwgMjEwLCAKKyAgICA4OSwgMjM2LCAxMDYsIDI0NSwgMjQyLCAyMTAsIDg5LCAyNDUsIDI0MywgMjEyLCA2OCwgMjI3LCAyMjIsIDIxMCwgODksIAorICAgIDI0NSwgMjQzLCAyMTIsIDY4LCAyMTYsIDE2LCAyMTAsIDg5LCAyMTAsIDE5NSwgMjQ1LCAyNDMsIDIxMiwgNjgsIDIyNywgCisgICAgMjIyLCAyMTAsIDg5LCAyMTAsIDI0OCwgMjQ1LCAyNDMsIDIxMiwgNjgsIDIxNiwgMTYsIDIxMCwgODksIDI0NSwgMTg2LCAKKyAgICAyMTAsIDg5LCAyMzcsIDg5LCAyMjAsIDkxLCAyMTAsIDg5LCAyMzcsIDg5LCAyMjQsIDIxNywgMjEwLCA4OSwgMjM3LCA4OSwgCisgICAgMjUwLCA2MSwgMjEwLCA4OSwgMjUxLCAxNDYsIDgyLCAyMTAsIDg5LCAxLCAyNTEsIDM1LCAyMTAsIDg5LCAxLCAyMTAsIAorICAgIDE5OSwgMjUxLCAzNSwgMjEwLCA4OSwgMSwgMjQ4LCAxMDUsIDIxMCwgODksIDEsIDIzOCwgMjQxLCAyMTAsIDg5LCAxLCAKKyAgICAyMzgsIDI0MiwgMjM4LCAyMTksIDIxMCwgODksIDEsIDI0NCwgMTgxLCAyMTAsIDg5LCAxLCAyNDMsIDg0LCAyNDQsIDE4MiwgCisgICAgMjE1LCAyNDYsIDIxMCwgODksIDEsIDIzNywgNjcsIDIxMCwgODksIDEsIDIwNCwgNzAsIDIxMCwgODksIDEsIDIwMiwgMTA3LCAKKyAgICAyMTAsIDg5LCAxLCAyMzcsIDE5LCAyMTAsIDg5LCAxLCAyMDksIDEyOCwgMjEwLCA4OSwgMSwgMjA5LCAxMjksIDIzOCwgCisgICAgMjE5LCAyMTAsIDg5LCAxLCAyMDIsIDIwMCwgMjEwLCA4OSwgMSwgMjAyLCAyMDEsIDIzNywgNjcsIDIxMCwgODksIDEsIAorICAgIDIyOSwgMjUwLCAyMTAsIDg5LCAxLCAyMjgsIDI3LCAyMTAsIDg5LCAxLCAyMjQsIDExMiwgMjEwLCA4OSwgMSwgMjIxLCA0MCwgCisgICAgMjEwLCA4OSwgMSwgMjEzLCAxMzYsIDIxMCwgODksIDEsIDQ2LCAyMTMsIDEzNiwgMjEwLCA4OSwgMSwgNzQsIDIxMCwgODksIAorICAgIDEsIDIxOSwgMzQsIDIxMCwgODksIDEsIDIxNiwgNzMsIDIxOSwgMzQsIDIxMCwgODksIDEsIDIxNSwgMjYsIDIxMCwgODksIAorICAgIDEsIDIxNywgMTEzLCAyMTAsIDg5LCAxLCAyMTUsIDI0NiwgMjEwLCA4OSwgMSwgMjEyLCAyNTUsIDIxMCwgODksIDEsIDIwOSwgCisgICAgMjAxLCAyMTAsIDg5LCAxLCAyMTgsIDIzMSwgMjQ4LCA5MiwgMjEwLCA4OSwgMSwgMjE4LCAyMzEsIDIzOCwgMTEyLCAyMTAsIAorICAgIDg5LCAxLCAyMTgsIDIzMSwgMjQzLCAyNTIsIDIxMCwgODksIDIxNywgMTkyLCA1NSwgMjEwLCA4OSwgMjE3LCAxOTIsIDU2LCAKKyAgICAyMTAsIDg5LCAyMTcsIDE5MiwgMjQyLCA4MiwgMjEwLCA4OSwgMjAyLCAxMSwgNTUsIDIxMCwgODksIDIwMiwgMTEsIDU2LCAKKyAgICAyMTAsIDg5LCAyMDIsIDExLCAyNDIsIDgyLCAyMTAsIDg5LCAyMTYsIDE2MSwgNTUsIDIxMCwgODksIDIxNiwgMTYxLCA1NiwgCisgICAgMjEwLCA4OSwgMjQyLCA4MywgMjAyLCAxOCwgMjM2LCAxMDUsIDIxMCwgODksIDI0MiwgODMsIDIwMiwgMTgsIDI1MCwgMjExLCAKKyAgICAyMTAsIDg5LCAyMzcsIDcwLCA1NSwgMjEwLCA4OSwgMjM3LCA3MCwgNTYsIDIxMCwgODksIDIzNywgNjksIDI0MiwgODIsIAorICAgIDIxMCwgODksIDI0MSwgMTEsIDU1LCAyMTAsIDg5LCAyNDEsIDExLCA1NiwgMjEwLCA4OSwgMjE1LCAxMDksIDIxMCwgODksIAorICAgIDI0MCwgNDEsIDI0MywgODUsIDIxMCwgODksIDIxNywgMjUsIDIxMCwgODksIDIxNSwgMTM3LCAyMTAsIDg5LCAxMjAsIDgwLCAKKyAgICAxODcsIDU1LCAyMTAsIDg5LCAxMjAsIDgwLCAxODcsIDU2LCAyMTAsIDg5LCAxMjYsIDE4NywgNTUsIDIxMCwgODksIDEyNiwgCisgICAgMTg3LCA1NiwgMjEwLCA4OSwgMjIwLCA4OSwgMjI3LCAxMTUsIDU1LCAyMTAsIDg5LCAyMjAsIDg5LCAyMjcsIDExNSwgNTYsIAorICAgIDIxMCwgODksIDIyMywgMTk0LCAyMTAsIDg5LCAyNDgsIDIyMiwgMjEwLCA4OSwgMSwgMjEyLCA0LCAyMDIsIDc4LCAyMTAsIAorICAgIDg5LCAxLCAyMTIsIDQsIDIyOSwgMTMzLCAyMTAsIDg5LCAxLCAyMTIsIDQsIDI0MCwgNjAsIDEwLCAxLCAyNDgsIDEzOSwgMywgCisgICAgMTI2LCAxODcsIDIzNiwgNTUsIDU2LCAxMCwgMSwgMjQ4LCAxMzksIDMsIDcwLCAyNDgsIDEyNiwgMjUsIDEyNiwgMTg3LCAKKyAgICA1NSwgMTAsIDEsIDI0OCwgMTM5LCAzLCAxMjYsIDE4NywgMjE4LCA1OSwgMTc3LCA1NiwgMTAsIDEsIDI0OCwgMTM5LCAzLCAKKyAgICAxMjYsIDE4NywgMjE4LCA1OSwgMTc3LCAyNDgsIDEyNiwgMjUsIDEyMCwgMTg3LCA1NSwgMTAsIDEsIDI0OCwgMTM5LCAzLCAKKyAgICAxMjAsIDE4NywgMjQ4LCAxMjYsIDI1LCA3MCwgNTUsIDEwLCAxLCAyNDgsIDEzOSwgMywgMjMwLCAyMzksIDUsIDIwNiwgCisgICAgMTY1LCA1NiwgMTAsIDEsIDI0OCwgMTM5LCAzLCA1LCAyMDYsIDE2NCwgMTAsIDEsIDE1MSwgMywgMTIwLCAxODcsIDU1LCAKKyAgICAxMCwgMSwgMTUxLCAzLCAxMjYsIDE4NywgMjE4LCA1OSwgMTc3LCA1NiwgMTAsIDEsIDI0NCwgMTg1LCAzLCAxMjAsIDE4NywgCisgICAgMjA1LCAyNDQsIDI0OCwgMTI2LCAyNSwgNSwgMjA5LCAyNTEsIDEwLCAxLCAyNDQsIDE4NSwgMywgMjMwLCAyMzksIDUsIAorICAgIDIwNiwgMTY1LCA1NiwgMTAsIDEsIDIxNiwgMTIzLCAzLCA5NSwgMTAsIDEsIDIxNCwgMTYyLCAzLCAyMzksIDE0NywgMTg3LCAKKyAgICA1NSwgMTAsIDEsIDI1MSwgNjAsIDMsIDEyMCwgMTg3LCA1NSwgMTAsIDEsIDI1MSwgNjAsIDMsIDEyNiwgMTg3LCAyMTgsIAorICAgIDU5LCAxODMsIDU1LCAxMCwgMSwgMjUxLCA2MCwgMywgMTIwLCAxODcsIDIwNSwgMjQ0LCA1NSwgMTAsIDEsIDI0MCwgNDgsIAorICAgIDMsIDEyMCwgMTg3LCA1NiwgMTAsIDEsIDI0MCwgNDgsIDMsIDEyNiwgMTg3LCAyMTgsIDU5LCAxNzcsIDU2LCAxMCwgMSwgCisgICAgMjI5LCAxOTAsIDMsIDcwLCA1NSwgMTAsIDEsIDIyOSwgMTkwLCAzLCAxMjYsIDE4NywgNTUsIDEwLCAxLCAyMjksIDE5MCwgCisgICAgMywgMTI2LCAxODcsIDIxOCwgNTksIDE3NywgNTYsIDEwLCAxLCA4MywgMywgNzAsIDU1LCAxMCwgMSwgODMsIDMsIDcwLCAKKyAgICA1NiwgMTAsIDEsIDIyMSwgMTc5LCAzLCAxMjAsIDE4NywgNTYsIDEwLCAxLCAyMjEsIDE3OSwgMywgNSwgMjA5LCAyNTEsIAorICAgIDEwLCAxLCAyMjEsIDE3OSwgMywgNSwgMjA2LCAxNjQsIDEwLCAxLCAyMjgsIDI5LCAzLCAxNDIsIDEwLCAxLCAyMTYsIDEyMywgCisgICAgMywgMTIwLCAxODcsIDIwNSwgMjQ0LCA1NSwgMTAsIDEsIDIxNiwgMTIzLCAzLCAyMzcsIDEyOCwgNTUsIDEwLCAxLCAyMTQsIAorICAgIDE2MiwgMywgMTIwLCAxODcsIDIwNSwgMjQ0LCA1NSwgMTAsIDEsIDE1MSwgMywgNSwgMTAsIDEsIDIwOSwgMjUyLCA1NiwgCisgICAgMTAsIDEsIDE1MSwgMywgNSwgMTAsIDEsIDIwOSwgMjUyLCAyNSwgMTIwLCAyNDMsIDgzLCAxMCwgMSwgMjE0LCAxNjIsIDMsIAorICAgIDUsIDEwLCAxLCAyMDksIDI1MiwgMjUsIDEyMCwgMjQzLCA4MywgMTAsIDEsIDIxNiwgMTIzLCAzLCA1LCAxMCwgMSwgMjA5LCAKKyAgICAyNTIsIDI1LCAxMjAsIDI0MywgODMsIDEwLCAxLCAxNTEsIDMsIDUsIDEwLCAxLCAyMDksIDI1MiwgNTUsIDEwLCAxLCAxMzcsIAorICAgIDMsIDI0MCwgMjAyLCAyNTAsIDE0MCwgMTcsIDEyMCwgNTUsIDEwLCAxLCAxMzcsIDMsIDI0MCwgMjAyLCAyNTAsIDE0MCwgCisgICAgMTcsIDEyNiwgNTUsIDEwLCAxLCAyNDAsIDc1LCA4OSwgMywgMjQwLCAyMDIsIDI1MCwgMTQwLCAxNywgMTIwLCA1NSwgMTAsIAorICAgIDEsIDI0MCwgNzUsIDg5LCAzLCAyNDAsIDIwMiwgMjUwLCAxNDAsIDE3LCAxMjYsIDU1LCAxMCwgMSwgMjQwLCA3NSwgODksIAorICAgIDMsIDI0MCwgMjAyLCAyNTAsIDE0MCwgMTcsIDIzOSwgMTQ3LCA1NiwgMTAsIDEsIDIwNCwgNzEsIDMsIDI0MCwgMjAyLCAKKyAgICAyNTAsIDE0MCwgMTcsIDEyMCwgNTUsIDEwLCAxLCAyMDQsIDcxLCAzLCAyNDAsIDIwMiwgMjUwLCAxNDAsIDE3LCAxMjYsIAorICAgIDU1LCAxMCwgMSwgODksIDI0OCwgMjI0LCAzLCAyNDAsIDIwMiwgMjUwLCAxNDAsIDE3LCAxMjAsIDU1LCAxMCwgMSwgODksIAorICAgIDI0OCwgMjI0LCAzLCAyNDAsIDIwMiwgMjUwLCAxNDAsIDE3LCAxMjYsIDU1LCAxMCwgMSwgMTUxLCAzLCAyNDAsIDIwMiwgCisgICAgMjUwLCAxNDAsIDE3LCAyMzksIDE0NywgNTYsIDEwLCAxLCAyMTQsIDE2MiwgMywgMjQwLCAyMDIsIDI1MCwgMTQwLCAxNywgCisgICAgMjM5LCAxNDcsIDU1LCAxMCwgMSwgMjE0LCAxNjIsIDMsIDIzMCwgMjM5LCAyMDYsIDE2NCwgMTAsIDEsIDIzMCwgMjMsIDMsIAorICAgIDEyMCwgMTg3LCA1NSwgMjA5LCAxMDUsIDEsIDIzNywgMTU3LCAyMDksIDEwNSwgMSwgMjEzLCA0OSwgMjA5LCAxMDUsIDEsIAorICAgIDIyMSwgMTc3LCAyMDksIDEwNSwgMSwgMjE2LCAyMTYsIDIwOSwgMTA1LCAxLCAyNDksIDMwLCAyMDksIDEwNSwgMSwgMjI3LCAKKyAgICAxNTgsIDIwOSwgMTA1LCAxLCAyMzAsIDM3LCAyMDksIDEwNSwgMSwgMjUxLCAxOSwgMjA5LCAxMDUsIDEsIDIwNiwgODQsIAorICAgIDIwOSwgMTA1LCAxLCAyMjUsIDQsIDIwOSwgMTA1LCAxLCAyNDAsIDEwNiwgMjA5LCAxMDUsIDEsIDI0MywgMjU1LCAyMDksIAorICAgIDEwNSwgMSwgMjA5LCAxMDcsIDIwOSwgMTA1LCAxLCAyMjgsIDEwOSwgMjA5LCAxMDUsIDEsIDIzOSwgNCwgMjA5LCAxMDUsIAorICAgIDEsIDIzOCwgNDIsIDIwOSwgMTA1LCAxLCAyMTQsIDE2MCwgMjA5LCAxMDUsIDEsIDI0NCwgMTM2LCAyMDksIDEwNSwgMSwgCisgICAgMjAyLCA5OCwgMjA5LCAxMDUsIDEsIDIwOSwgMjAyLCAyMDksIDEwNSwgMSwgMjAzLCAxMTAsIDIwOSwgMTA1LCAxLCAyMTksIAorICAgIDQ3LCAyMDksIDEwNSwgMSwgMjMwLCAxNjYsIDIwOSwgMTA1LCAxLCAyNDYsIDE3MywgMjA5LCAxMDUsIDEsIDIwNywgMjQwLCAKKyAgICAyMDksIDEwNSwgMSwgMjM3LCAxMSwgMjA5LCAxMDUsIDEsIDIyOSwgMTQzLCAyMDksIDEwNSwgMSwgMjA5LCAxMDYsIDIwOSwgCisgICAgMTA1LCAxLCAyMDIsIDExNCwgMjA5LCAxMDUsIDEsIDIxMywgMzgsIDIwOSwgMTA1LCAxLCAyMTUsIDMyLCAyMDksIDEwNSwgCisgICAgMSwgMjQ0LCAyMTAsIDIwOSwgMTA1LCAxLCAxMzUsIDIwOSwgMTA1LCAxLCAyMDIsIDE3LCAyMDksIDEwNSwgMSwgMjUxLCAKKyAgICA1NiwgMjA5LCAxMDUsIDEsIDIzOCwgMTEzLCAyMDksIDEwNSwgMSwgMjE3LCAxMjMsIDIwOSwgMTA1LCAxLCAyMDQsIDEwOSwgCisgICAgMjA5LCAxMDUsIDI1MSwgMTQ4LCAyMDksIDEwNSwgMjUxLCAyNDYsIDIwOSwgMTA1LCAyMzUsIDE2NSwgMjA5LCAxMDUsIAorICAgIDI0MSwgMTYwLCAyMDksIDEwNSwgMjA3LCAzMiwgMjA5LCAxMDUsIDIyMCwgMTcsIDIwOSwgMTA1LCAyNDEsIDE3MCwgMjA5LCAKKyAgICAxMDUsIDI0MCwgMTkzLCAyMDksIDEwNSwgMjIwLCA4OCwgMjA5LCAxMDUsIDIyMCwgOTYsIDIwOSwgMTA1LCAyMTAsIDIyMiwgCisgICAgMjA5LCAxMDUsIDEsIDIyMywgMTA2LCAyMjEsIDI1NSwgMTcsIDIwMiwgODQsIDIyMSwgMjU1LCAxNywgMTA1LCAyMjEsIAorICAgIDI1NSwgMTcsIDEwOCwgMjIxLCAyNTUsIDE3LCAxNDcsIDIyMSwgMjU1LCAxNywgMTQ5LCAyMjEsIDI1NSwgMTcsIDE3MCwgCisgICAgMjIxLCAyNTUsIDE3LCAxOTUsIDIyMSwgMjU1LCAxNywgMjEzLCAxMTEsIDIyMSwgMjU1LCAxNywgMTk5LCAyMjEsIDI1NSwgCisgICAgMTcsIDIyMiwgNjMsIDIyMSwgMjU1LCAxLCA2MywgMjIxLCAyNTUsIDEsIDI0MSwgMTYxLCAyMjEsIDI1NSwgMSwgNzUsIAorICAgIDIyMSwgMjU1LCAxLCA3NCwgMjIxLCAyNTUsIDEsIDY4LCAyMjEsIDI1NSwgMSwgMjIwLCAxOCwgMjIxLCAyNTUsIDEsIDc4LCAKKyAgICAyMjEsIDI1NSwgMSwgMjQ0LCAxOTksIDIyMSwgMjU1LCAxLCAyMjMsIDE2MywgMjIxLCAyNTUsIDEsIDI0OSwgMzIsIDIyMSwgCisgICAgMjU1LCAxLCAxODUsIDIyMSwgMjU1LCAxLCAyMTAsIDIyLCAyMjEsIDI1NSwgMSwgMjMwLCAxODEsIDIyMSwgMjU1LCAxLCAKKyAgICAyNDYsIDE5OSwgMjIxLCAyNTUsIDEsIDI0NCwgMjEyLCAyMjEsIDI1NSwgMSwgMjE2LCAyMjAsIDIyMSwgMjU1LCAxLCAyMTUsIAorICAgIDE4NSwgMjIxLCAyNTUsIDEsIDIxNSwgMzYsIDIyMSwgMjU1LCAxLCAyMzgsIDIwNywgMjIxLCAyNTUsIDEsIDI0MCwgMTA4LCAKKyAgICAyMjEsIDI1NSwgMSwgMTczLCAyMjEsIDI1NSwgMSwgMjI4LCAxMTMsIDIyMSwgMjU1LCAxLCAyMjMsIDExMSwgMjAzLCAyNTIsIAorICAgIDIyMSwgMjU1LCAxLCAxOTIsIDIyMSwgMjU1LCAxLCAyMjEsIDExLCAyMjEsIDI1NSwgMSwgMjAxLCAyMDEsIDIyMSwgMjU1LCAKKyAgICAxLCAxNTIsIDIyMSwgMjU1LCAxLCAyMDQsIDExMSwgMjIxLCAyNTUsIDEsIDE5OCwgMjIxLCAyNTUsIDEsIDIyMSwgMTIsIAorICAgIDIwMywgMjUyLCAyMjEsIDI1NSwgMSwgMjMwLCA5MywgMjMwLCAxODEsIDIyMSwgMjU1LCAxLCAyMzAsIDkzLCAyNDYsIDE5OSwgCisgICAgMjIxLCAyNTUsIDEsIDIzMCwgOTMsIDIxNiwgMjIwLCAyMjEsIDI1NSwgMzksIDIxMiwgMjI4LCAxMzgsIDIwOCwgMTYxLCAKKyAgICAyMjEsIDI1NSwgMzksIDIxMiwgMjI4LCAxMjQsIDIwOCwgMTYxLCAyMjEsIDI1NSwgMzksIDIxMiwgMjI4LCAyMTUsIDI0NSwgCisgICAgMjA4LCAxNjEsIDIyMSwgMjU1LCAzOSwgMTYzLCAyNDQsIDE5LCAyMDgsIDE2MSwgMjIxLCAyNTUsIDM5LCAxNjMsIDEzOCwgCisgICAgMjA4LCAxNjEsIDIyMSwgMjU1LCAzOSwgMTYzLCAxMjQsIDIwOCwgMTYxLCAyMjEsIDI1NSwgMzksIDE2MywgMjE1LCAyNDUsIAorICAgIDIwOCwgMTYxLCAyMjEsIDI1NSwgMzksIDIyMywgNzEsIDgyLCAyMjEsIDI1NSwgMzksIDUyLCA3MCwgNTUsIDIyMSwgMjU1LCAKKyAgICAxMzgsIDE0MywgMjUwLCAxNjAsIDIyMSwgMjU1LCAxMjQsIDE0MywgMjUwLCAxNjAsIDIyMSwgMjU1LCAxNiwgMjIwLCAxOSwgCisgICAgMjQ0LCAzMywgMjIxLCAyNTUsIDE2LCAyMzgsIDIwNiwgMjIxLCAyNTUsIDI0NSwgMjMzLCAyMjEsIDI1NSwgMjQwLCAyMTIsIAorICAgIDgyLCAyMjEsIDI1NSwgMjI4LCA4NCwgMjE0LCAyNTIsIDEsIDI1MSwgMzcsIDIxNCwgMjUyLCAxLCAyNDgsIDUxLCAyMTQsIAorICAgIDI1MiwgMSwgMjM4LCAyNDAsIDIxNCwgMjUyLCAxLCAyNDQsIDE4MywgMjE0LCAyNTIsIDEsIDIzMCwgMTkyLCAyMTQsIDI1MiwgCisgICAgMSwgMjQ5LCAzMCwgMjE0LCAyNTIsIDEsIDIwMiwgODcsIDIxNCwgMjUyLCAxLCAyMzAsIDIwMSwgMjE0LCAyNTIsIDEsIAorICAgIDIwOCwgMjAwLCAyMTQsIDI1MiwgMSwgMjAyLCAxODIsIDIxNCwgMjUyLCAxLCAyMzAsIDM4LCAyMTQsIDI1MiwgMSwgMjI4LCAKKyAgICAxMDYsIDIxNCwgMjUyLCAxLCAyMjQsIDExMiwgMjE0LCAyNTIsIDEsIDIyMSwgNDAsIDIxNCwgMjUyLCAxLCAyMTIsIDEyMSwgCisgICAgMjE0LCAyNTIsIDEsIDIzMSwgNDksIDIxNCwgMjUyLCAxLCAyNDAsIDI2LCAyMTQsIDI1MiwgMSwgMjA4LCAxOCwgMjE0LCAKKyAgICAyNTIsIDEsIDIxNywgNDQsIDIxNCwgMjUyLCAxLCAyMTUsIDI0NiwgMjE0LCAyNTIsIDEsIDIxMywgNjYsIDIxNCwgMjUyLCAKKyAgICAxLCAyMTAsIDE3LCAyMTQsIDI1MiwgMTMxLCAyMzEsIDQ5LCAyMTQsIDI1MiwgMTMxLCAyMzEsIDQ4LCAyMTQsIDI1MiwgCisgICAgMTMxLCAyMjAsIDg0LCAyMTQsIDI1MiwgMTMxLCAyNDQsIDE5NywgMjE0LCAyNTIsIDY1LCAxLCAyNDEsIDQyLCAyMDIsIAorICAgIDE4MiwgMjE0LCAyNTIsIDEzMSwgMjQxLCA0MiwgMjAyLCAxODIsIDIxNCwgMjUyLCAyMiwgMiwgMTYzLCA3NCwgMjE0LCAKKyAgICAyNTIsIDIyLCAyLCA3NCwgMjE0LCAyNTIsIDIyLCAyLCAyMTksIDE5NywgMjUyLCAyNSwgMjE0LCAyNTIsIDIyLCAyLCAxNjMsIAorICAgIDI1MiwgMjUsIDIxNCwgMjUyLCAyMiwgMiwgMjUyLCAyNSwgMjE0LCAyNTIsIDIyLCAyLCAyMTksIDE5NywgNjMsIDIxNCwgCisgICAgMjUyLCAyMiwgMiwgMTYzLCA2MywgMjE0LCAyNTIsIDIyLCAyLCA2MywgMjE0LCAyNTIsIDY1LCAxLCAyMTIsIDIyOCwgNjMsIAorICAgIDIxNCwgMjUyLCAyMiwgMiwgMjEyLCAyMjgsIDYzLCAyMTQsIDI1MiwgMjIsIDIsIDE2MywgNjgsIDIxNCwgMjUyLCAyMiwgMiwgCisgICAgNjgsIDIxNCwgMjUyLCA2NSwgMSwgNzUsIDIxNCwgMjUyLCAyMiwgMiwgMTYzLCA3NSwgMjE0LCAyNTIsIDIyLCAyLCA3NSwgCisgICAgMjE0LCAyNTIsIDIyLCAyLCA3OCwgMjE0LCAyNTIsIDIyLCAyLCAyMTAsIDIyMiwgMjE0LCAyNTIsIDEzMSwgMjIyLCAyMjMsIAorICAgIDIxNCwgMjUyLCAyMTcsIDE3OSwgMjIyLCAyMjMsIDIxNCwgMjUyLCAyMTcsIDE3OSwgMjUxLCA4MywgMjE0LCAyNTIsIDIxNywgCisgICAgMTc5LCAyNTAsIDIyMiwgMjE0LCAyNTIsIDIxNywgMTc5LCAyNDgsIDIwMiwgMjE0LCAyNTIsIDIxNywgMTc5LCAyNTAsIDQ0LCAKKyAgICAyMTQsIDI1MiwgMjE3LCAxNzksIDIxMiwgMjQzLCAyMTQsIDI1MiwgMjUxLCAxNDYsIDgyLCAyMTQsIDI1MiwgMjE3LCAxNzksIAorICAgIDIyNCwgMjUwLCAyMTcsIDgwLCAyMTQsIDI1MiwgMjE3LCAxNzksIDIwMiwgMjUsIDIxNCwgMjUyLCAyMTcsIDE3OSwgMjE3LCAKKyAgICA4MCwgMjE0LCAyNTIsIDIxNywgMTc5LCAyMDIsIDExMywgMjE0LCAyNTIsIDIxNywgMTc5LCAyMDcsIDE3MCwgMjE0LCAyNTIsIAorICAgIDIxNywgMTc5LCAyNTAsIDExMSwgMjE0LCAyNTIsIDIxNywgMTc5LCAyMTIsIDgsIDIyNSwgNzcsIDIxNCwgMjUyLCAyMTcsIAorICAgIDE3OSwgMjUwLCAyMDYsIDIyNSwgMTE4LCAxLCAyMzcsIDEzNCwgMjI1LCAxMTgsIDEsIDI1MSwgMjMyLCAyMjUsIDExOCwgMSwgCisgICAgMjUxLCA4MSwgMjI1LCAxMTgsIDEsIDI1MSwgMTIyLCAyMjUsIDExOCwgMSwgMjUxLCA3MywgMjI1LCAxMTgsIDEsIDIwNiwgCisgICAgMTg0LCAyMjUsIDExOCwgMSwgMjUwLCAxLCAyMjUsIDExOCwgMSwgMjMwLCAyMDEsIDIyNSwgMTE4LCAxLCAyNTAsIDQxLCAKKyAgICAyMjUsIDExOCwgMSwgMjUxLCA0MiwgMjI1LCAxMTgsIDEsIDI1MSwgNDcsIDIyNSwgMTE4LCAxLCAyNTEsIDM5LCAyMjUsIAorICAgIDExOCwgMSwgMjUwLCAyNDcsIDIyNSwgMTE4LCAxLCAyNTAsIDIzMSwgMjI1LCAxMTgsIDEsIDI1MCwgODEsIDIyNSwgMTE4LCAKKyAgICAxLCAyMzEsIDQ5LCAyMjUsIDExOCwgMSwgMjUwLCAxNzUsIDIyNSwgMTE4LCAxLCAyNTAsIDUxLCAyMjUsIDExOCwgMSwgCisgICAgMjUwLCAxNDgsIDIyNSwgMTE4LCAxLCAyNTAsIDE0NCwgMjI1LCAxMTgsIDEsIDI1MCwgNzUsIDIyNSwgMTE4LCAxLCAyNTAsIAorICAgIDQ5LCAyMjUsIDExOCwgMSwgMjQyLCAxOCwgMjI1LCAxMTgsIDEsIDIzMCwgMzAsIDIyNSwgMTE4LCAxLCAyNTEsIDU5LCAKKyAgICAyMjUsIDExOCwgMjUxLCA4NywgODIsIDIyNSwgMTE4LCAyMDUsIDE4NywgODIsIDIyNSwgMTE4LCAyMzgsIDE3OSwgODIsIAorICAgIDIyNSwgMTE4LCAyMTcsIDE3OCwgMTAsIDEsIDI0OCwgMTM5LCAzLCA1LCAyMDYsIDE2NSwgNTYsIDEwLCAxLCAyNDgsIDEzOSwgCisgICAgMywgMjM3LCAxMjgsIDU1LCAxMCwgMSwgMTg0LCAzLCAxMjAsIDE4NywgNTUsIDEwLCAxLCAyMDksIDI1MiwgMywgMTIwLCAKKyAgICAxODcsIDU1LCAxMCwgMSwgMjQwLCA0OCwgMywgNzAsIDI0OCwgMTI2LCAyNSwgMTI2LCAxODcsIDU1LCAxMCwgMSwgMjE3LCAKKyAgICAxMjAsIDMsIDcwLCA1NiwgMTAsIDEsIDIyOCwgMjksIDMsIDUyLCAxNDIsIDEwLCAxLCA4MywgMywgMTI2LCAxODcsIDU1LCAKKyAgICAxMCwgMSwgODksIDMsIDEyMCwgMTg3LCAyNDgsIDEyNiwgMjUsIDIzNywgMTI4LCA1NSwgMTAsIDEsIDg5LCAzLCAxMjAsIAorICAgIDE4NywgMjQ4LCAxMjYsIDI1LCA3MCwgNTUsIDEwLCAxLCAyMTYsIDEyMywgMywgMjI3LCAxNCwgMTAsIDEsIDIwNCwgNzEsIAorICAgIDMsIDcwLCAyMDQsIDQsIDEwLCAxLCAyMTUsIDIxNSwgMjAzLCA0NywgMTAsIDEsIDEyNCwgMjUxLCAzMCwgMTAsIDEsIDI0NCwgCisgICAgMTg1LCAzLCAxMjYsIDE4NywgNTYsIDEwLCAxLCAyMTUsIDI5LCAzLCAxMjYsIDE4NywgNTYsIDEwLCAxLCAyMzgsIDI1MiwgCisgICAgMywgMjMwLCAyMzksIDk1LCAxMCwgMSwgMjExLCA1MywgMjA0LCA3MCwgMTAsIDEsIDIwMiwgMTA4LCAzLCAyMzAsIDIzOSwgCisgICAgMjA2LCAxNjUsIDU1LCAxMCwgMSwgMjUxLCA2MCwgMywgMTI2LCAxODcsIDU2LCAxMCwgMSwgMjMwLCAyMywgMywgNzAsIDU2LCAKKyAgICAxMCwgMjA3LCAxNzQsIDI0NCwgMTczLCA1NiwgMTAsIDI0NSwgOTMsIDI0MCwgNzEsIDEwLCAyNDUsIDkzLCAyNDQsIDE3MiwgCisgICAgMTAsIDI0NSwgOTMsIDIyOSwgMjI5LCAxMCwgMjQ1LCA5MywgMjQwLCA2OSwgMTAsIDI0NSwgOTMsIDI0NCwgMTcwLCAxMCwgCisgICAgMjQ1LCA5MywgMjI5LCAyMjcsIDEwLCAxNDMsIDExOCwgNzAsIDU1LCAxMCwgMTQzLCAxMjAsIDE4NywgNTUsIDEwLCAxNDMsIAorICAgIDIyNywgMTUsIDU1LCAxMCwgMTQzLCAxMTgsIDcwLCA1NiwgMTAsIDE0MywgMTIwLCAxODcsIDU2LCAxMCwgMTQzLCAyMjcsIAorICAgIDE1LCA1NiwgMTAsIDE3MSwgMjQwLCA2OSwgMTAsIDE3MSwgMjQ0LCAxNzAsIDEwLCAxNzEsIDIyOSwgMjI3LCAxMCwgNSwgCisgICAgMTM4LCAyMDQsIDcwLCAxMCwgMjQwLCA3MiwgMywgMjE1LCAyNTIsIDEwLCAyNDAsIDcyLCAzLCA3MCwgNTUsIDEwLCAyMjksIAorICAgIDIzMCwgMywgNzAsIDU2LCAxMCwgNDksIDI1MCwgOTUsIDU1LCAxMCwgNTAsIDI1MCwgOTUsIDU1LCAxMCwgNDksIDI1MCwgCisgICAgOTUsIDU2LCAxMCwgNTAsIDI1MCwgOTUsIDU2LCAxMCwgNTIsIDUwLCAyNTAsIDk1LCA1NSwgMTAsIDUyLCA1MCwgMjUwLCAKKyAgICA5NSwgODcsIDMsIDI0MywgODUsIDEwLCA1MCwgMjUwLCA5NSwgODcsIDMsIDI0MywgODUsIDEwLCAyNDQsIDE3MywgMywgCisgICAgMjQzLCA4NSwgMTAsIDEzMSwgMjEyLCAxNTQsIDIyMSwgMTc5LCAyMzgsIDg1LCA5MiwgMiwgMjMwLCAyMzksIDI0NywgNTIsIAorICAgIDkyLCAyLCAyNDcsIDUyLCA5MiwgMiwgMjUwLCAxODAsIDkyLCAyLCAyMDUsIDE5OSwgOTIsIDEsIDIxMiwgMjI4LCA2MywgCisgICAgOTIsIDEsIDYzLCA5MiwgMSwgMjUyLCAyNSwgOTIsIDEsIDc1LCA5MiwgMSwgMjMxLCA4MywgOTIsIDEsIDY4LCA5MiwgMSwgCisgICAgMjA2LCAxNzgsIDkyLCAxLCAxMjUsIDE0NiwgOTIsIDEsIDEyNSwgMTU5LCA5MiwgMSwgMjQ3LCA1NSwgNzQsIDkyLCAxLCAKKyAgICAyMTIsIDIyOCwgNzQsIDkyLCAxLCA3NCwgOTIsIDEsIDI1MSwgNjQsIDkyLCAxLCAyNDcsIDU1LCA3OCwgOTIsIDEsIDIxMiwgCisgICAgMjI4LCA3OCwgOTIsIDEsIDc4LCA5MiwgMSwgMjUwLCAzNCwgOTIsIDEsIDE3MywgOTIsIDEsIDIyOSwgMTQ0LCA5MiwgMSwgCisgICAgMjM5LCA4LCA5MiwgMSwgMjM4LCAxMTksIDkyLCAxLCAyMjIsIDIwMywgOTIsIDEsIDI0NywgOTIsIDkyLCAxLCAyNDYsIAorICAgIDE5OSwgOTIsIDEsIDIzMCwgMTgxLCA5MiwgMSwgMjMwLCAxNDksIDkyLCAxLCAyMjEsIDExLCA5MiwgMSwgMjA3LCAyNDEsIAorICAgIDkyLCAxLCAyMDcsIDIyOSwgOTIsIDEsIDI0NCwgMTIwLCA5MiwgMSwgMjQ0LCAxMDQsIDkyLCAxLCAyMjEsIDIyNywgOTIsIAorICAgIDEsIDIxMCwgMjIsIDkyLCAxLCAyMDksIDEwOCwgOTIsIDEsIDI0NCwgMjEyLCA5MiwgMSwgMjQ0LCAxLCA5MiwgMSwgMjAxLCAKKyAgICAyMDEsIDkyLCAxLCAyMjEsIDIwOSwgOTIsIDEsIDE4NSwgOTIsIDEsIDIxOCwgMjA4LCA5MiwgMSwgMjQ5LCAzMiwgOTIsIDEsIAorICAgIDI0OCwgOTgsIDkyLCAxLCAxOTIsIDkyLCAxLCAxOTgsIDkyLCAxLCAyMTYsIDIyMCwgOTIsIDEsIDIxNSwgMTg1LCA5MiwgMSwgCisgICAgMjI4LCAxMTMsIDkyLCAxLCAyMjcsIDc3LCA5MiwgMSwgMjI3LCA2OCwgOTIsIDEsIDIwNiwgODYsIDkyLCAxLCAyMTMsIDkwLCAKKyAgICA5MiwgMSwgMjExLCAxNjQsIDkyLCAxLCAyMTUsIDM2LCA5MiwgMSwgMTUyLCA5MiwgMjIsIDIsIDIyMCwgNzMsIDkyLCAyMiwgCisgICAgMiwgMjIwLCAxNiwgOTIsIDIsIDIyMSwgNTEsIDkyLCAyLCAyNTAsIDE3LCA5MiwgMjIsIDIsIDI1MiwgMjUsIDkyLCAyMiwgCisgICAgMiwgNzUsIDkyLCAyMiwgMiwgMjMxLCA4MywgOTIsIDIyLCAyLCA2OCwgOTIsIDIyLCAyLCAyMDYsIDE3OCwgOTIsIDIyLCAyLCAKKyAgICAxMjUsIDE0NiwgOTIsIDIyLCAyLCAxMjUsIDIxNSwgMTg2LCA5MiwgMjIsIDIsIDI0NywgNTUsIDc0LCA5MiwgMjIsIDIsIAorICAgIDIxMiwgMjI4LCA3NCwgOTIsIDIyLCAyLCA3NCwgOTIsIDIyLCAyLCAyNTEsIDY0LCA5MiwgMjIsIDIsIDI0NywgNTUsIDc4LCAKKyAgICA5MiwgMjIsIDIsIDIxMiwgMjI4LCA3OCwgOTIsIDIyLCAyLCA3OCwgOTIsIDIyLCAyLCAyNTAsIDM0LCA5MiwgMiwgMjA1LCAKKyAgICAyMDQsIDkyLCAyMiwgMiwgMjE3LCAyMjksIDc0LCA5MiwgMjIsIDIsIDI1MCwgMTMsIDkyLCAyMjAsIDM5LCA5MiwgMjExLCAKKyAgICA0MiwgMiwgMjA3LCAyNiwgOTIsIDIxMSwgNDIsIDIsIDI1MCwgMTgyLCA5MiwgMjM3LCAyNTQsIDI1MSwgMTM4LCA5MiwgCisgICAgMjUxLCAxMjYsIDI1MSwgMTM4LCA5MiwgMjIsIDIsIDI0NywgNTUsIDE2MywgNzQsIDkyLCAyMiwgMiwgMjA3LCAyNCwgOTIsIAorICAgIDIyLCAyLCAyMDYsIDE3NywgOTIsIDEsIDIxNywgMTI2LCA5MiwgMSwgMjI5LCAxMjUsIDkyLCAxLCAyMzgsIDk0LCA5MiwgMSwgCisgICAgMjAyLCAxMTYsIDkyLCAxLCAyNDQsIDEwOSwgOTIsIDEsIDIxNiwgNjEsIDkyLCAxLCAyNDAsIDEwOCwgOTIsIDEsIDIwMiwgCisgICAgMTY4LCA5MiwgMSwgMTI1LCAyMTUsIDE4NiwgOTIsIDEsIDEyNSwgMjI3LCA3OCwgOTIsIDIyLCAyLCAxMjUsIDE1OSwgOTIsIAorICAgIDIyLCAyLCAxMjUsIDIyNywgNzgsIDkyLCAyNDQsIDE2NiwgOTIsIDUyLCAyNDQsIDE2NiwgOTIsIDE3LCAyMDIsIDg0LCA5MiwgCisgICAgMTcsIDEwNSwgOTIsIDE3LCAxMDgsIDkyLCAxNywgMTQ3LCA5MiwgMTcsIDE0OSwgOTIsIDE3LCAxNzAsIDkyLCAxNywgMTk1LCAKKyAgICA5MiwgMTcsIDIxMywgMTExLCA5MiwgMTcsIDE5OSwgOTIsIDE3LCAyMjIsIDYzLCA5MiwgMjUxLCAxNDYsIDU0LCA5MiwgMiwgCisgICAgMTM4LCAyMTEsIDIyNywgMjQzLCA4NSwgOTIsIDEsIDI0NywgNTUsIDYzLCA5MiwgMSwgMjIwLCA3MywgOTIsIDEsIDIyMCwgCisgICAgMTYsIDkyLCAxLCAyNTAsIDEzLCA5MiwgMSwgMjA3LCAyNCwgOTIsIDEsIDIwNiwgMTc3LCA5MiwgMSwgMjI1LCA4MiwgMjQ0LCAKKyAgICAxMjAsIDkyLCAxLCAyMDIsIDgwLCA5MiwgMSwgNzksIDE5OCwgOTIsIDEsIDIzOCwgMTU1LCA5MiwgMSwgMjMwLCAxMjksIAorICAgIDkyLCAxLCAyMzgsIDQ1LCAyMTEsIDYxLCA5MiwgMSwgMjQ0LCAxMTAsIDkyLCAxLCAyNDgsIDE5OCwgMTc5LCAyNTAsIDIwOSwgCisgICAgMTc5LCAyLCAyNDcsIDUyLCAxNzksIDIsIDI1MCwgMTgwLCAxNzksIDIsIDIwNSwgMTk5LCAxNzksIDEsIDYzLCAxNzksIDEsIAorICAgIDI1MiwgMjUsIDE3OSwgMSwgNzUsIDE3OSwgMSwgMjMxLCA4MywgMTc5LCAxLCA2OCwgMTc5LCAxLCAyMDYsIDE3OCwgMTc5LCAKKyAgICAxLCAxMjUsIDE0NiwgMTc5LCAxLCAxMjUsIDE1OSwgMTc5LCAxLCA3NCwgMTc5LCAxLCAyNTEsIDY0LCAxNzksIDEsIDc4LCAKKyAgICAxNzksIDEsIDI1MCwgMzQsIDE3OSwgMSwgMTczLCAxNzksIDEsIDIyOSwgMTQ0LCAxNzksIDEsIDIzOSwgOCwgMTc5LCAxLCAKKyAgICAyMzgsIDExOSwgMTc5LCAxLCAyMjIsIDIwMywgMTc5LCAxLCAyNDcsIDkyLCAxNzksIDEsIDI0NiwgMTk5LCAxNzksIDEsIAorICAgIDIzMCwgMTgxLCAxNzksIDEsIDIzMCwgMTQ5LCAxNzksIDEsIDIyMSwgMTEsIDE3OSwgMSwgMjA3LCAyNDEsIDE3OSwgMSwgCisgICAgMjA3LCAyMjksIDE3OSwgMSwgMjQ0LCAxMjAsIDE3OSwgMSwgMjQ0LCAxMDQsIDE3OSwgMSwgMjIxLCAyMjcsIDE3OSwgMSwgCisgICAgMjEwLCAyMiwgMTc5LCAxLCAyMDksIDEwOCwgMTc5LCAxLCAyNDQsIDIxMiwgMTc5LCAxLCAyNDQsIDEsIDE3OSwgMSwgMjAxLCAKKyAgICAyMDEsIDE3OSwgMSwgMTg1LCAxNzksIDEsIDIxOCwgMjA4LCAxNzksIDEsIDI0OSwgMzIsIDE3OSwgMSwgMjQ4LCA5OCwgCisgICAgMTc5LCAxLCAxOTIsIDE3OSwgMSwgMTk4LCAxNzksIDEsIDIxNiwgMjIwLCAxNzksIDEsIDIyOCwgMTEzLCAxNzksIDEsIAorICAgIDIxMywgOTAsIDE3OSwgMSwgMjExLCAxNjQsIDE3OSwgMSwgMjE1LCAzNiwgMTc5LCAxLCAxNTIsIDE3OSwgMiwgMjIxLCA1MSwgCisgICAgMTc5LCAyLCAyNTAsIDE3LCAxNzksIDIyLCAyLCAyNTIsIDI1LCAxNzksIDIyLCAyLCA3NSwgMTc5LCAyMiwgMiwgMjMxLCAKKyAgICA4MywgMTc5LCAyMiwgMiwgNjgsIDE3OSwgMjIsIDIsIDIwNiwgMTc4LCAxNzksIDIyLCAyLCAxMjUsIDE0NiwgMTc5LCAyMiwgCisgICAgMiwgMTI1LCAyMTUsIDE4NiwgMTc5LCAyMiwgMiwgNzQsIDE3OSwgMjIsIDIsIDI1MSwgNjQsIDE3OSwgMjIsIDIsIDc4LCAKKyAgICAxNzksIDIyLCAyLCAyNTAsIDM0LCAxNzksIDIsIDIwNSwgMjA0LCAxNzksIDEsIDIyOSwgMTM1LCAyMTAsIDIyLCAxNzksIAorICAgIDI1MCwgMzUsIDIyNywgMTk2LCA4MiwgMTc5LCAxLCAyMTUsIDE4NSwgMTc5LCAxLCAyMTYsIDYxLCAxNzksIDEsIDIwMiwgCisgICAgMTY4LCAxNzksIDEsIDEyNSwgMjE1LCAxODYsIDE3OSwgMSwgMTI1LCAyMjcsIDc4LCAxNzksIDIyLCAyLCAxMjUsIDE1OSwgCisgICAgMTc5LCAyMiwgMiwgMTI1LCAyMjcsIDc4LCAxNzksIDE3LCAyMDIsIDg0LCAxNzksIDE3LCAxMDUsIDE3OSwgMTcsIDEwOCwgCisgICAgMTc5LCAxNywgMTQ3LCAxNzksIDE3LCAxNDksIDE3OSwgMTcsIDE3MCwgMTc5LCAxNywgMTk1LCAxNzksIDE3LCAyMTMsIAorICAgIDExMSwgMTc5LCAxNywgMTk5LCAxNzksIDE3LCAyMjIsIDYzLCAxNzksIDEsIDIxNiwgMjIxLCAzLCAxMDEsIDI0MywgMjI3LCAKKyAgICAxNzksIDEsIDIxNiwgMjIxLCAzLCAyMjYsIDI1MSwgMjQzLCAyMjcsIDE3OSwgMjE1LCAxMjAsIDgyLCAxNzksIDIxNSwgCisgICAgMTIwLCA1NCwgMTc5LCAyNDUsIDkyLCAyMjEsIDQzLCAxMDUsIDE3OSwgMjQ1LCA5MiwgMjIxLCA0MywgMTA4LCAxNzksIAorICAgIDI0NSwgOTIsIDIyMSwgNDMsIDE0NywgMTc5LCAyNDUsIDkyLCAyMjEsIDQzLCAxNDksIDE3OSwgMjQ1LCA5MiwgMjIxLCA0MywgCisgICAgMTE4LCAyMjcsIDE4MCwgMjA5LCA5OCwgMjA5LCA5MywgMjQ0LCAzMSwgMTc5LCAyNDUsIDkyLCAyNDQsIDMyLCAyMTIsIDgyLCAKKyAgICAxNzksIDIzMCwgMjAyLCAxNzksIDIzOCwgMjMxLCA4MiwgMjM3LCAxOTgsIDIsIDI1MSwgMTIxLCAyNDgsIDY2LCAyMzcsIAorICAgIDE5OCwgMiwgMjQ4LCA2NiwgMjM3LCAxOTgsIDIsIDIwNSwgMTk5LCAyMzcsIDE5OCwgMSwgNjMsIDIzNywgMTk4LCAxLCAKKyAgICAyNTIsIDI1LCAyMzcsIDE5OCwgMSwgNzUsIDIzNywgMTk4LCAxLCAyMzEsIDgzLCAyMzcsIDE5OCwgMSwgNjgsIDIzNywgCisgICAgMTk4LCAxLCAyMDYsIDE3OCwgMjM3LCAxOTgsIDEsIDI0MSwgMTYxLCAyMzcsIDE5OCwgMSwgMjUxLCA2NCwgMjM3LCAxOTgsIAorICAgIDEsIDIyMCwgMTgsIDIzNywgMTk4LCAxLCAyNTAsIDM0LCAyMzcsIDE5OCwgMSwgMTczLCAyMzcsIDE5OCwgMSwgMjI5LCAKKyAgICAxNDQsIDIzNywgMTk4LCAxLCAyMzksIDgsIDIzNywgMTk4LCAxLCAyMzgsIDExOSwgMjM3LCAxOTgsIDEsIDIyMiwgMjAzLCAKKyAgICAyMzcsIDE5OCwgMSwgMjQ3LCA5MiwgMjM3LCAxOTgsIDEsIDI0NiwgMTk5LCAyMzcsIDE5OCwgMSwgMjMwLCAxODEsIDIzNywgCisgICAgMTk4LCAxLCAyMzAsIDE0OSwgMjM3LCAxOTgsIDEsIDIyMSwgMTEsIDIzNywgMTk4LCAxLCAyMDcsIDI0MSwgMjM3LCAxOTgsIAorICAgIDEsIDIwNywgMjI5LCAyMzcsIDE5OCwgMSwgMjQ0LCAxMjAsIDIzNywgMTk4LCAxLCAyNDQsIDEwNCwgMjM3LCAxOTgsIDEsIAorICAgIDIyMSwgMjI3LCAyMzcsIDE5OCwgMSwgMjEwLCAyMiwgMjM3LCAxOTgsIDEsIDIwOSwgMTA4LCAyMzcsIDE5OCwgMSwgMjQ0LCAKKyAgICAyMTIsIDIzNywgMTk4LCAxLCAyNDQsIDEsIDIzNywgMTk4LCAxLCAyMDEsIDIwMSwgMjM3LCAxOTgsIDEsIDE4NSwgMjM3LCAKKyAgICAxOTgsIDEsIDIxOCwgMjA4LCAyMzcsIDE5OCwgMSwgMjQ5LCAzMiwgMjM3LCAxOTgsIDEsIDI0OCwgOTgsIDIzNywgMTk4LCAKKyAgICAxLCAxOTIsIDIzNywgMTk4LCAxLCAxOTgsIDIzNywgMTk4LCAxLCAyMTYsIDIyMCwgMjM3LCAxOTgsIDEsIDIyOCwgMTEzLCAKKyAgICAyMzcsIDE5OCwgMSwgMjI3LCA3NywgMjM3LCAxOTgsIDEsIDIwNiwgODYsIDIzNywgMTk4LCAxLCAyMTMsIDkwLCAyMzcsIAorICAgIDE5OCwgMSwgMjE1LCAzNiwgMjM3LCAxOTgsIDEsIDE1MiwgMjM3LCAxOTgsIDIsIDIyMSwgNTEsIDIzNywgMTk4LCAyMiwgMiwgCisgICAgMjUyLCAyNSwgMjM3LCAxOTgsIDIyLCAyLCA3NSwgMjM3LCAxOTgsIDIyLCAyLCAyMzEsIDgzLCAyMzcsIDE5OCwgMjIsIDIsIAorICAgIDY4LCAyMzcsIDE5OCwgMjIsIDIsIDIwNiwgMTc4LCAyMzcsIDE5OCwgMjIsIDIsIDI0MSwgMTYxLCAyMzcsIDE5OCwgMjIsIAorICAgIDIsIDI1MSwgNjQsIDIzNywgMTk4LCAyMiwgMiwgMjIwLCAxOCwgMjM3LCAxOTgsIDIyLCAyLCAyNTAsIDM0LCAyMzcsIDE5OCwgCisgICAgMiwgMjA1LCAyMDQsIDIzNywgMTk4LCAyLCAyMDcsIDI4LCAyMzcsIDE5OCwgMSwgMjI5LCAxMjUsIDIzNywgMTk4LCAxLCAKKyAgICAyMzgsIDk0LCAyMzcsIDE5OCwgMSwgMjAyLCAxMTYsIDIzNywgMTk4LCAxLCAyMTUsIDE4NSwgMjM3LCAxOTgsIDEsIDI0MCwgCisgICAgMTA4LCAyMzcsIDE5OCwgMTcsIDIwMiwgODQsIDIzNywgMTk4LCAxNywgMTA1LCAyMzcsIDE5OCwgMTcsIDEwOCwgMjM3LCAKKyAgICAxOTgsIDE3LCAxNDcsIDIzNywgMTk4LCAxNywgMTQ5LCAyMzcsIDE5OCwgMTcsIDE3MCwgMjM3LCAxOTgsIDE3LCAxOTUsIAorICAgIDIzNywgMTk4LCAxNywgMjEzLCAxMTEsIDIzNywgMTk4LCAxNywgMTk5LCAyMzcsIDE5OCwgMTcsIDIyMiwgNjMsIDIzNywgCisgICAgMTk4LCAyMDgsIDIwOCwgMjM3LCAxOTgsIDI1MSwgMTIwLCAyMzcsIDE5OCwgMjMwLCAyMjIsIDIzNywgMTk4LCAyMDYsIAorICAgIDIwNiwgMjM3LCAxOTgsIDI0MSwgMTMwLCAyMjAsIDIzLCAyMzcsIDE5OCwgMiwgMjAzLCA4NSwgMjM3LCAyMTMsIDIsIDI0NywgCisgICAgNTIsIDIzNywgMjEzLCAyLCAyNTAsIDE4MCwgMjM3LCAyMTMsIDIsIDIwNSwgMTk5LCAyMzcsIDIxMywgMSwgNjMsIDIzNywgCisgICAgMjEzLCAxLCAyNTIsIDI1LCAyMzcsIDIxMywgMSwgNzUsIDIzNywgMjEzLCAxLCAyMzEsIDgzLCAyMzcsIDIxMywgMSwgNjgsIAorICAgIDIzNywgMjEzLCAxLCAyMDYsIDE3OCwgMjM3LCAyMTMsIDEsIDEyNSwgMTQ2LCAyMzcsIDIxMywgMSwgMTI1LCAxNTksIDIzNywgCisgICAgMjEzLCAyMiwgMjQ3LCA1NSwgNzQsIDIzNywgMjEzLCAxLCA3NCwgMjM3LCAyMTMsIDEsIDI1MSwgNjQsIDIzNywgMjEzLCAKKyAgICAyMiwgMjQ3LCA1NSwgNzgsIDIzNywgMjEzLCAxLCA3OCwgMjM3LCAyMTMsIDEsIDI1MCwgMzQsIDIzNywgMjEzLCAxLCAxNzMsIAorICAgIDIzNywgMjEzLCAxLCAyMjksIDE0NCwgMjM3LCAyMTMsIDEsIDIzOSwgOCwgMjM3LCAyMTMsIDEsIDIzOCwgMTE5LCAyMzcsIAorICAgIDIxMywgMSwgMjIyLCAyMDMsIDIzNywgMjEzLCAxLCAyNDcsIDkyLCAyMzcsIDIxMywgMSwgMjQ2LCAxOTksIDIzNywgMjEzLCAKKyAgICAxLCAyMzAsIDE4MSwgMjM3LCAyMTMsIDEsIDIzMCwgMTQ5LCAyMzcsIDIxMywgMSwgMjIxLCAxMSwgMjM3LCAyMTMsIDEsIAorICAgIDIwNywgMjQxLCAyMzcsIDIxMywgMSwgMjA3LCAyMjksIDIzNywgMjEzLCAxLCAyNDQsIDEyMCwgMjM3LCAyMTMsIDEsIDI0NCwgCisgICAgMTA0LCAyMzcsIDIxMywgMSwgMjIxLCAyMjcsIDIzNywgMjEzLCAxLCAyMTAsIDIyLCAyMzcsIDIxMywgMSwgMjA5LCAxMDgsIAorICAgIDIzNywgMjEzLCAxLCAyNDQsIDIxMiwgMjM3LCAyMTMsIDEsIDI0NCwgMSwgMjM3LCAyMTMsIDEsIDIwMSwgMjAxLCAyMzcsIAorICAgIDIxMywgMSwgMTg1LCAyMzcsIDIxMywgMSwgMjE4LCAyMDgsIDIzNywgMjEzLCAxLCAyNDksIDMyLCAyMzcsIDIxMywgMSwgCisgICAgMjQ4LCA5OCwgMjM3LCAyMTMsIDEsIDE5MiwgMjM3LCAyMTMsIDEsIDE5OCwgMjM3LCAyMTMsIDEsIDIxNiwgMjIwLCAyMzcsIAorICAgIDIxMywgMSwgMjI4LCAxMTMsIDIzNywgMjEzLCAxLCAyMjcsIDc3LCAyMzcsIDIxMywgMSwgMjA2LCA4NiwgMjM3LCAyMTMsIAorICAgIDEsIDIxMywgOTAsIDIzNywgMjEzLCAxLCAyMTEsIDE2NCwgMjM3LCAyMTMsIDEsIDIxNSwgMzYsIDIzNywgMjEzLCAxLCAKKyAgICAxNTIsIDIzNywgMjEzLCAyLCAyMjEsIDUxLCAyMzcsIDIxMywgMiwgMjUwLCAxNywgMjM3LCAyMTMsIDIyLCAyLCAyNTIsIAorICAgIDI1LCAyMzcsIDIxMywgMjIsIDIsIDc1LCAyMzcsIDIxMywgMjIsIDIsIDIzMSwgODMsIDIzNywgMjEzLCAyMiwgMiwgNjgsIAorICAgIDIzNywgMjEzLCAyMiwgMiwgMjA2LCAxNzgsIDIzNywgMjEzLCAyMiwgMiwgMTI1LCAxNDYsIDIzNywgMjEzLCAyMiwgMiwgCisgICAgMTI1LCAyMTUsIDE4NiwgMjM3LCAyMTMsIDIyLCAyLCAyNDcsIDU1LCA3NCwgMjM3LCAyMTMsIDIyLCAyLCA3NCwgMjM3LCAKKyAgICAyMTMsIDIyLCAyLCAyNTEsIDY0LCAyMzcsIDIxMywgMjIsIDIsIDI0NywgNTUsIDc4LCAyMzcsIDIxMywgMjIsIDIsIDc4LCAKKyAgICAyMzcsIDIxMywgMjIsIDIsIDI1MCwgMzQsIDIzNywgMjEzLCAyLCAyMDUsIDIwNCwgMjM3LCAyMTMsIDIyMCwgMzksIDIzNywgCisgICAgMjEzLCAxLCAxMjUsIDIxNSwgMTg2LCAyMzcsIDIxMywgMSwgMTI1LCAyMjcsIDc4LCAyMzcsIDIxMywgMjIsIDIsIDEyNSwgCisgICAgMTU5LCAyMzcsIDIxMywgMjIsIDIsIDEyNSwgMjI3LCA3OCwgMjM3LCAyMTMsIDE3LCAyMDIsIDg0LCAyMzcsIDIxMywgMTcsIAorICAgIDEwNSwgMjM3LCAyMTMsIDE3LCAxMDgsIDIzNywgMjEzLCAxNywgMTQ3LCAyMzcsIDIxMywgMTcsIDE0OSwgMjM3LCAyMTMsIAorICAgIDE3LCAxNzAsIDIzNywgMjEzLCAxNywgMTk1LCAyMzcsIDIxMywgMTcsIDIxMywgMTExLCAyMzcsIDIxMywgMTcsIDE5OSwgCisgICAgMjM3LCAyMTMsIDE3LCAyMjIsIDYzLCAyMzcsIDIxMywgMjUxLCAxNDYsIDU0LCAyMzcsIDIxMywgMjE1LCAxMjAsIDU0LCAKKyAgICAyMzcsIDIxMywgMSwgMjAyLCA4MCwgMTkzLCAyLCAyNDcsIDUyLCAxOTMsIDIsIDI1MCwgMTgwLCAxOTMsIDIsIDIwNSwgCisgICAgMTk5LCAxOTMsIDEsIDYzLCAxOTMsIDEsIDI1MiwgMjUsIDE5MywgMSwgNzUsIDE5MywgMSwgMjMxLCA4MywgMTkzLCAxLCAKKyAgICA2OCwgMTkzLCAxLCAyMDYsIDE3OCwgMTkzLCAxLCAxMjUsIDE0NiwgMTkzLCAxLCAxMjUsIDE1OSwgMTkzLCAxLCA3NCwgCisgICAgMTkzLCAxLCAyNTEsIDY0LCAxOTMsIDEsIDc4LCAxOTMsIDEsIDI1MCwgMzQsIDE5MywgMSwgMTczLCAxOTMsIDEsIDIyOSwgCisgICAgMTQ0LCAxOTMsIDEsIDIzOSwgOCwgMTkzLCAxLCAyMzgsIDExOSwgMTkzLCAxLCAyMjIsIDIwMywgMTkzLCAxLCAyNDcsIDkyLCAKKyAgICAxOTMsIDEsIDI0NiwgMTk5LCAxOTMsIDEsIDIzMCwgMTgxLCAxOTMsIDEsIDIzMCwgMTQ5LCAxOTMsIDEsIDIyMSwgMTEsIAorICAgIDE5MywgMSwgMjA3LCAyNDEsIDE5MywgMSwgMjA3LCAyMjksIDE5MywgMSwgMjQ0LCAxMjAsIDE5MywgMSwgMjQ0LCAxMDQsIAorICAgIDE5MywgMSwgMjIxLCAyMjcsIDE5MywgMSwgMjEwLCAyMiwgMTkzLCAxLCAyMDksIDEwOCwgMTkzLCAxLCAyNDQsIDIxMiwgCisgICAgMTkzLCAxLCAyNDQsIDEsIDE5MywgMSwgMjAxLCAyMDEsIDE5MywgMSwgMTg1LCAxOTMsIDEsIDIxOCwgMjA4LCAxOTMsIDEsIAorICAgIDI0OSwgMzIsIDE5MywgMSwgMjQ4LCA5OCwgMTkzLCAxLCAxOTIsIDE5MywgMSwgMTk4LCAxOTMsIDEsIDIxNiwgMjIwLCAKKyAgICAxOTMsIDEsIDIyOCwgMTEzLCAxOTMsIDEsIDIyNywgNzcsIDE5MywgMSwgMjA2LCA4NiwgMTkzLCAxLCAyMTMsIDkwLCAxOTMsIAorICAgIDEsIDIxMSwgMTY0LCAxOTMsIDEsIDIxNSwgMzYsIDE5MywgMSwgMTUyLCAxOTMsIDIsIDIyMSwgNTEsIDE5MywgMiwgMjUwLCAKKyAgICAxNywgMTkzLCAyMiwgMiwgMjUyLCAyNSwgMTkzLCAyMiwgMiwgNzUsIDE5MywgMjIsIDIsIDIzMSwgODMsIDE5MywgMjIsIDIsIAorICAgIDY4LCAxOTMsIDIyLCAyLCAyMDYsIDE3OCwgMTkzLCAyMiwgMiwgMTI1LCAxNDYsIDE5MywgMjIsIDIsIDEyNSwgMjE1LCAKKyAgICAxODYsIDE5MywgMjIsIDIsIDc0LCAxOTMsIDIyLCAyLCAyNTEsIDY0LCAxOTMsIDIyLCAyLCA3OCwgMTkzLCAyMiwgMiwgCisgICAgMjUwLCAzNCwgMTkzLCAyLCAyMDUsIDIwNCwgMTkzLCAyNTEsIDY1LCAyMjcsIDE5NiwgODIsIDE5MywgMjUwLCAzNSwgMjI3LCAKKyAgICAxOTYsIDgyLCAxOTMsIDEsIDIxNSwgMTg1LCAxOTMsIDEsIDIxNiwgNjEsIDE5MywgMSwgMjAyLCAxNjgsIDE5MywgMSwgCisgICAgMTI1LCAyMTUsIDE4NiwgMTkzLCAxLCAxMjUsIDIyNywgNzgsIDE5MywgMjIsIDIsIDEyNSwgMTU5LCAxOTMsIDIyLCAyLCAKKyAgICAxMjUsIDIyNywgNzgsIDE5MywgMTcsIDIwMiwgODQsIDE5MywgMTcsIDEwNSwgMTkzLCAxNywgMTA4LCAxOTMsIDE3LCAxNDcsIAorICAgIDE5MywgMTcsIDE0OSwgMTkzLCAxNywgMTcwLCAxOTMsIDE3LCAxOTUsIDE5MywgMTcsIDIxMywgMTExLCAxOTMsIDE3LCAKKyAgICAxOTksIDE5MywgMTcsIDIyMiwgNjMsIDE5MywgMjMwLCAyMDIsIDE5MywgMSwgMjA0LCAxMTEsIDE5MywgMjM5LCAxMzgsIAorICAgIDExOCwgMjE3LCA1NSwgMTkzLCAyMzksIDEzOCwgMTE4LCAyMzcsIDEzNywgMTkzLCAyMzksIDEzOCwgMTI2LCAyMTcsIDUzLCAKKyAgICAxOTMsIDIzOSwgMTM4LCAxMTgsIDIxMiwgODAsIDE5MywgMjM5LCAxMzgsIDExOCwgMjQxLCAxMzgsIDE5MywgMjM5LCAxMzgsIAorICAgIDEyNiwgMjEyLCA3OSwgNDQsIDIsIDI1MCwgMTgwLCA0NCwgMiwgMjA1LCAxOTksIDQ0LCAxLCA2MywgNDQsIDEsIDI1MiwgCisgICAgMjUsIDQ0LCAxLCA3NSwgNDQsIDEsIDIzMSwgODMsIDQ0LCAxLCA2OCwgNDQsIDEsIDIwNiwgMTc4LCA0NCwgMSwgNzQsIDQ0LCAKKyAgICAxLCAyNDEsIDE2MSwgNDQsIDEsIDI1MSwgNjQsIDQ0LCAxLCA3OCwgNDQsIDEsIDIyMCwgMTgsIDQ0LCAxLCAyNTAsIDM0LCAKKyAgICA0NCwgMSwgMTczLCA0NCwgMSwgMjIyLCAyMDMsIDQ0LCAxLCAyNDcsIDkyLCA0NCwgMSwgMjMwLCAxODEsIDQ0LCAxLCAyMjEsIAorICAgIDExLCA0NCwgMSwgMjA3LCAyNDEsIDQ0LCAxLCAyMjEsIDIyNywgNDQsIDEsIDIxMCwgMjIsIDQ0LCAxLCAyMDEsIDIwMSwgCisgICAgNDQsIDEsIDIyMSwgMjA5LCA0NCwgMSwgMTg1LCA0NCwgMSwgMTkyLCA0NCwgMSwgMTk4LCA0NCwgMSwgMjE2LCAyMjAsIDQ0LCAKKyAgICAxLCAyMTUsIDE4NSwgNDQsIDEsIDIyOCwgMTEzLCA0NCwgMSwgMjI3LCA3NywgNDQsIDEsIDIyNywgNjgsIDQ0LCAxLCAyMDYsIAorICAgIDg2LCA0NCwgMSwgMjEzLCA5MCwgNDQsIDEsIDIxMSwgMTY0LCA0NCwgMSwgMjE1LCAzNiwgNDQsIDEsIDE1MiwgNDQsIDIyLCAKKyAgICAyLCAyNTIsIDI1LCA0NCwgMjIsIDIsIDc1LCA0NCwgMjIsIDIsIDIzMSwgODMsIDQ0LCAyMiwgMiwgNjgsIDQ0LCAyMiwgMiwgCisgICAgMjA2LCAxNzgsIDQ0LCAyMiwgMiwgNzQsIDQ0LCAyMiwgMiwgMjQxLCAxNjEsIDQ0LCAyMiwgMiwgMjUxLCA2NCwgNDQsIDIyLCAKKyAgICAyLCA3OCwgNDQsIDIyLCAyLCAyMjAsIDE4LCA0NCwgMjIsIDIsIDI1MCwgMzQsIDQ0LCAyLCAyMDUsIDIwNCwgNDQsIDIyMCwgCisgICAgMzksIDQ0LCAyNTAsIDM1LCAyMjcsIDE5NiwgODIsIDQ0LCAxNywgMjAyLCA4NCwgNDQsIDE3LCAxMDUsIDQ0LCAxNywgMTA4LCAKKyAgICA0NCwgMTcsIDE0NywgNDQsIDE3LCAxNDksIDQ0LCAxNywgMTcwLCA0NCwgMTcsIDE5NSwgNDQsIDE3LCAyMTMsIDExMSwgNDQsIAorICAgIDE3LCAxOTksIDQ0LCAxNywgMjIyLCA2MywgNDQsIDQyLCAyMDksIDE1MiwgNDQsIDQyLCAxMTgsIDIzNiwgMTEsIDQ0LCA0MiwgCisgICAgMTE4LCAyMDksIDM2LCA0NCwgMjQ0LCAxMzMsIDU0LCA0NCwgMjI0LCAzOCwgNTQsIDQ0LCAyMDMsIDUwLCA1NCwgNDQsIAorICAgIDI0NCwgNzIsIDU0LCA0NCwgMjQ1LCAxNDEsIDU0LCA0NCwgMjUwLCA4MiwgODcsIDU0LCA0NCwgMjE1LCAxMjAsIDU0LCA0NCwgCisgICAgNDIsIDU0LCAxNzUsIDIsIDM5LCAyNDcsIDUzLCA1NSwgMTc1LCAyLCAyNDcsIDUyLCAxNzUsIDIsIDI1MCwgMTgwLCAxNzUsIAorICAgIDIsIDIwNSwgMTk5LCAxNzUsIDEsIDYzLCAxNzUsIDEsIDI1MiwgMjUsIDE3NSwgMSwgNzUsIDE3NSwgMSwgMjMxLCA4MywgCisgICAgMTc1LCAxLCA2OCwgMTc1LCAxLCAyMDYsIDE3OCwgMTc1LCAxLCAxMjUsIDE0NiwgMTc1LCAxLCAxMjUsIDE1OSwgMTc1LCAxLCAKKyAgICA3NCwgMTc1LCAxLCAyNDEsIDE2MSwgMTc1LCAxLCAyNTEsIDY0LCAxNzUsIDEsIDc4LCAxNzUsIDEsIDIyMCwgMTgsIDE3NSwgCisgICAgMSwgMjUwLCAzNCwgMTc1LCAxLCAxNzMsIDE3NSwgMSwgMjI5LCAxNDQsIDE3NSwgMSwgMjM5LCA4LCAxNzUsIDEsIDIzOCwgCisgICAgMTE5LCAxNzUsIDEsIDIyMiwgMjAzLCAxNzUsIDEsIDI0NywgOTIsIDE3NSwgMSwgMjQ2LCAxOTksIDE3NSwgMSwgMjMwLCAKKyAgICAxODEsIDE3NSwgMSwgMjMwLCAxNDksIDE3NSwgMSwgMjIxLCAxMSwgMTc1LCAxLCAyMDcsIDI0MSwgMTc1LCAxLCAyMDcsIAorICAgIDIyOSwgMTc1LCAxLCAyNDQsIDEyMCwgMTc1LCAxLCAyNDQsIDEwNCwgMTc1LCAxLCAyMjEsIDIyNywgMTc1LCAxLCAyMTAsIAorICAgIDIyLCAxNzUsIDEsIDIwOSwgMTA4LCAxNzUsIDEsIDI0NCwgMjEyLCAxNzUsIDEsIDI0NCwgMSwgMTc1LCAxLCAyMDEsIDIwMSwgCisgICAgMTc1LCAxLCAxODUsIDE3NSwgMSwgMjE4LCAyMDgsIDE3NSwgMSwgMjQ5LCAzMiwgMTc1LCAxLCAyNDgsIDk4LCAxNzUsIDEsIAorICAgIDE5MiwgMTc1LCAxLCAxOTgsIDE3NSwgMSwgMjE2LCAyMjAsIDE3NSwgMSwgMjE1LCAxODUsIDE3NSwgMSwgMjI4LCAxMTMsIAorICAgIDE3NSwgMSwgMjI3LCA3NywgMTc1LCAxLCAyMjcsIDY4LCAxNzUsIDEsIDIwNiwgODYsIDE3NSwgMSwgMjEzLCA5MCwgMTc1LCAKKyAgICAxLCAyMTEsIDE2NCwgMTc1LCAxLCAyMTUsIDM2LCAxNzUsIDEsIDE1MiwgMTc1LCAyLCAyNTAsIDE3LCAxNzUsIDIyLCAyLCAKKyAgICAyNTIsIDI1LCAxNzUsIDIyLCAyLCA3NSwgMTc1LCAyMiwgMiwgMjMxLCA4MywgMTc1LCAyMiwgMiwgNjgsIDE3NSwgMjIsIDIsIAorICAgIDIwNiwgMTc4LCAxNzUsIDIyLCAyLCAxMjUsIDE0NiwgMTc1LCAyMiwgMiwgMTI1LCAyMTUsIDE4NiwgMTc1LCAyMiwgMiwgCisgICAgNzQsIDE3NSwgMjIsIDIsIDI0MSwgMTYxLCAxNzUsIDIyLCAyLCAyNTEsIDY0LCAxNzUsIDIyLCAyLCA3OCwgMTc1LCAyMiwgCisgICAgMiwgMjIwLCAxOCwgMTc1LCAyMiwgMiwgMjUwLCAzNCwgMTc1LCAyLCAyMDUsIDIwNCwgMTc1LCAyMjcsIDE5NiwgODIsIAorICAgIDE3NSwgMjUxLCA2NSwgMjI3LCAxOTYsIDgyLCAxNzUsIDEsIDIwOCwgMjAsIDE3NSwgMSwgMjQxLCAyNTUsIDE3NSwgMSwgCisgICAgMjE1LCAxNjYsIDE3NSwgMSwgMTI1LCAyMTUsIDE4NiwgMTc1LCAxLCAxMjUsIDIyNywgNzgsIDE3NSwgMjIsIDIsIDEyNSwgCisgICAgMTU5LCAxNzUsIDIyLCAyLCAxMjUsIDIyNywgNzgsIDE3NSwgMTcsIDIwMiwgODQsIDE3NSwgMTcsIDEwNSwgMTc1LCAxNywgCisgICAgMTA4LCAxNzUsIDE3LCAxNDcsIDE3NSwgMTcsIDE0OSwgMTc1LCAxNywgMTcwLCAxNzUsIDE3LCAxOTUsIDE3NSwgMTcsIAorICAgIDIxMywgMTExLCAxNzUsIDE3LCAxOTksIDE3NSwgMTcsIDIyMiwgNjMsIDE3NSwgMjM5LCAxMzgsIDE3LCAyMDIsIDg1LCAzNSwgCisgICAgMjIwLCA3NywgMjE4LCAxNSwgNzYsIDE0OSwgMTc1LCAyMzksIDEzOCwgMTcsIDExOCwgMzUsIDIyMCwgNzcsIDIxOCwgMTUsIAorICAgIDc2LCAxNDksIDE3NSwgMjM5LCAxMzgsIDE3LCAxMjAsIDM1LCAyMjAsIDc3LCAyMTgsIDE1LCA3NiwgMTQ5LCAxNzUsIDIzOSwgCisgICAgMTM4LCAxNywgMTI2LCAzNSwgMjIwLCA3NywgMjE4LCAxNSwgNzYsIDE0OSwgMTc1LCAyMzksIDEzOCwgMTcsIDExOCwgMzUsIAorICAgIDI0MCwgMjI1LCAyMTgsIDE1LCA3NiwgMTQ5LCAxNzUsIDIzOSwgMTM4LCAxNywgMTIwLCAzNSwgMjQwLCAyMjUsIDIxOCwgCisgICAgMTUsIDc2LCAxNDksIDE3NSwgMjM5LCAxMzgsIDE3LCAxMjYsIDM1LCAyNDAsIDIyNSwgMjE4LCAxNSwgNzYsIDE0OSwgMTc1LCAKKyAgICAyLCAyMDcsIDE2NCwgMjAwLCAyLCAyNDcsIDUyLCAyMDAsIDIsIDI1MCwgMTgwLCAyMDAsIDIsIDIwNSwgMTk5LCAyMDAsIDEsIAorICAgIDYzLCAyMDAsIDEsIDI1MiwgMjUsIDIwMCwgMSwgNzUsIDIwMCwgMSwgMjMxLCA4MywgMjAwLCAxLCA2OCwgMjAwLCAxLCAKKyAgICAyMDYsIDE3OCwgMjAwLCAxLCAxMjUsIDE0NiwgMjAwLCAxLCAxMjUsIDE1OSwgMjAwLCAxLCA3NCwgMjAwLCAxLCAyNDEsIAorICAgIDE2MSwgMjAwLCAxLCAyNTEsIDY0LCAyMDAsIDEsIDc4LCAyMDAsIDEsIDIyMCwgMTgsIDIwMCwgMSwgMjUwLCAzNCwgMjAwLCAKKyAgICAxLCAxNzMsIDIwMCwgMSwgMjI5LCAxNDQsIDIwMCwgMSwgMjM5LCA4LCAyMDAsIDEsIDIzOCwgMTE5LCAyMDAsIDEsIDIyMiwgCisgICAgMjAzLCAyMDAsIDEsIDI0NywgOTIsIDIwMCwgMSwgMjQ2LCAxOTksIDIwMCwgMSwgMjMwLCAxODEsIDIwMCwgMSwgMjMwLCAKKyAgICAxNDksIDIwMCwgMSwgMjIxLCAxMSwgMjAwLCAxLCAyMDcsIDI0MSwgMjAwLCAxLCAyMDcsIDIyOSwgMjAwLCAxLCAyNDQsIAorICAgIDEyMCwgMjAwLCAxLCAyNDQsIDEwNCwgMjAwLCAxLCAyMjEsIDIyNywgMjAwLCAxLCAyMTAsIDIyLCAyMDAsIDEsIDIwOSwgCisgICAgMTA4LCAyMDAsIDEsIDI0NCwgMjEyLCAyMDAsIDEsIDI0NCwgMSwgMjAwLCAxLCAyMDEsIDIwMSwgMjAwLCAxLCAxODUsIAorICAgIDIwMCwgMSwgMjE4LCAyMDgsIDIwMCwgMSwgMjQ5LCAzMiwgMjAwLCAxLCAyNDgsIDk4LCAyMDAsIDEsIDE5MiwgMjAwLCAxLCAKKyAgICAxOTgsIDIwMCwgMSwgMjE2LCAyMjAsIDIwMCwgMSwgMjE1LCAxODUsIDIwMCwgMSwgMjI4LCAxMTMsIDIwMCwgMSwgMjI3LCAKKyAgICA3NywgMjAwLCAxLCAyMDYsIDg2LCAyMDAsIDEsIDIxMywgOTAsIDIwMCwgMSwgMjExLCAxNjQsIDIwMCwgMSwgMjE1LCAzNiwgCisgICAgMjAwLCAxLCAxNTIsIDIwMCwgMiwgMjIxLCA1MSwgMjAwLCAyLCAyNTAsIDE3LCAyMDAsIDIyLCAyLCAyNTIsIDI1LCAyMDAsIAorICAgIDIyLCAyLCA3NSwgMjAwLCAyMiwgMiwgMjMxLCA4MywgMjAwLCAyMiwgMiwgNjgsIDIwMCwgMjIsIDIsIDIwNiwgMTc4LCAKKyAgICAyMDAsIDIyLCAyLCAxMjUsIDE0NiwgMjAwLCAyMiwgMiwgMTI1LCAyMTUsIDE4NiwgMjAwLCAyMiwgMiwgNzQsIDIwMCwgMjIsIAorICAgIDIsIDI0MSwgMTYxLCAyMDAsIDIyLCAyLCAyNTEsIDY0LCAyMDAsIDIyLCAyLCA3OCwgMjAwLCAyMiwgMiwgMjIwLCAxOCwgCisgICAgMjAwLCAyMiwgMiwgMjUwLCAzNCwgMjAwLCAyLCAyMDUsIDIwNCwgMjAwLCAyMjcsIDE5NiwgODIsIDIwMCwgMjUxLCA2NSwgCisgICAgMjI3LCAxOTYsIDgyLCAyMDAsIDEsIDI0MCwgMTA4LCAyMDAsIDEsIDEyNSwgMjE1LCAxODYsIDIwMCwgMSwgMTI1LCAyMjcsIAorICAgIDc4LCAyMDAsIDIyLCAyLCAxMjUsIDE1OSwgMjAwLCAyMiwgMiwgMTI1LCAyMjcsIDc4LCAyMDAsIDE3LCAyMDIsIDg0LCAKKyAgICAyMDAsIDE3LCAxMDUsIDIwMCwgMTcsIDEwOCwgMjAwLCAxNywgMTQ3LCAyMDAsIDE3LCAxNDksIDIwMCwgMTcsIDE3MCwgCisgICAgMjAwLCAxNywgMTk1LCAyMDAsIDE3LCAyMTMsIDExMSwgMjAwLCAxNywgMTk5LCAyMDAsIDE3LCAyMjIsIDYzLCAyMDAsIDIsIAorICAgIDIzMCwgMTM1LCAyMDAsIDIsIDIwNiwgMjIyLCAxNjQsIDIsIDI0NywgNTIsIDE2NCwgMiwgMjUwLCAxODAsIDE2NCwgMiwgCisgICAgMjA1LCAxOTksIDE2NCwgMSwgNjMsIDE2NCwgMSwgMjUyLCAyNSwgMTY0LCAxLCA3NSwgMTY0LCAxLCAyMzEsIDgzLCAxNjQsIAorICAgIDEsIDY4LCAxNjQsIDEsIDIwNiwgMTc4LCAxNjQsIDEsIDEyNSwgMTQ2LCAxNjQsIDEsIDEyNSwgMTU5LCAxNjQsIDEsIDc0LCAKKyAgICAxNjQsIDEsIDI0MSwgMTYxLCAxNjQsIDEsIDI1MSwgNjQsIDE2NCwgMSwgNzgsIDE2NCwgMSwgMjIwLCAxOCwgMTY0LCAxLCAKKyAgICAyNTAsIDM0LCAxNjQsIDEsIDE3MywgMTY0LCAxLCAyMjksIDE0NCwgMTY0LCAxLCAyMzksIDgsIDE2NCwgMSwgMjM4LCAxMTksIAorICAgIDE2NCwgMSwgMjIyLCAyMDMsIDE2NCwgMSwgMjQ3LCA5MiwgMTY0LCAxLCAyNDYsIDE5OSwgMTY0LCAxLCAyMzAsIDE4MSwgCisgICAgMTY0LCAxLCAyMzAsIDE0OSwgMTY0LCAxLCAyMjEsIDExLCAxNjQsIDEsIDIwNywgMjQxLCAxNjQsIDEsIDIwNywgMjI5LCAKKyAgICAxNjQsIDEsIDI0NCwgMTIwLCAxNjQsIDEsIDI0NCwgMTA0LCAxNjQsIDEsIDIyMSwgMjI3LCAxNjQsIDEsIDIxMCwgMjIsIAorICAgIDE2NCwgMSwgMjA5LCAxMDgsIDE2NCwgMSwgMjQ0LCAyMTIsIDE2NCwgMSwgMjQ0LCAxLCAxNjQsIDEsIDIwMSwgMjAxLCAKKyAgICAxNjQsIDEsIDIyMSwgMjA5LCAxNjQsIDEsIDE4NSwgMTY0LCAxLCAyMTgsIDIwOCwgMTY0LCAxLCAyNDksIDMyLCAxNjQsIDEsIAorICAgIDI0OCwgOTgsIDE2NCwgMSwgMTkyLCAxNjQsIDEsIDE5OCwgMTY0LCAxLCAyMTYsIDIyMCwgMTY0LCAxLCAyMTUsIDE4NSwgCisgICAgMTY0LCAxLCAyMjgsIDExMywgMTY0LCAxLCAyMjcsIDc3LCAxNjQsIDEsIDIyNywgNjgsIDE2NCwgMSwgMjA2LCA4NiwgMTY0LCAKKyAgICAxLCAyMTMsIDkwLCAxNjQsIDEsIDIxMSwgMTY0LCAxNjQsIDEsIDIxNSwgMzYsIDE2NCwgMSwgMTUyLCAxNjQsIDEsIDIwNywgCisgICAgMjEwLCAxNjQsIDIsIDI1MCwgMTcsIDE2NCwgMjIsIDIsIDI1MiwgMjUsIDE2NCwgMjIsIDIsIDc1LCAxNjQsIDIyLCAyLCAKKyAgICAyMzEsIDgzLCAxNjQsIDIyLCAyLCA2OCwgMTY0LCAyMiwgMiwgMjA2LCAxNzgsIDE2NCwgMjIsIDIsIDEyNSwgMTQ2LCAxNjQsIAorICAgIDIyLCAyLCAxMjUsIDIxNSwgMTg2LCAxNjQsIDIyLCAyLCA3NCwgMTY0LCAyMiwgMiwgMjQxLCAxNjEsIDE2NCwgMjIsIDIsIAorICAgIDI1MSwgNjQsIDE2NCwgMjIsIDIsIDc4LCAxNjQsIDIyLCAyLCAyMjAsIDE4LCAxNjQsIDIyLCAyLCAyNTAsIDM0LCAxNjQsIAorICAgIDIsIDIwNSwgMjA0LCAxNjQsIDEsIDcwLCAyMTYsIDk3LCAxNjQsIDI1MCwgMzUsIDIyNywgMTk2LCA4MiwgMTY0LCAxLCAKKyAgICAyNTAsIDEyNiwgMjMxLCA4MywgMTY0LCAxLCAxMjUsIDIxNSwgMTg2LCAxNjQsIDEsIDEyNSwgMjI3LCA3OCwgMTY0LCAyMiwgCisgICAgMiwgMTI1LCAxNTksIDE2NCwgMjIsIDIsIDEyNSwgMjI3LCA3OCwgMTY0LCAxNywgMjAyLCA4NCwgMTY0LCAxNywgMTA1LCAKKyAgICAxNjQsIDE3LCAxMDgsIDE2NCwgMTcsIDE0NywgMTY0LCAxNywgMTQ5LCAxNjQsIDE3LCAxNzAsIDE2NCwgMTcsIDE5NSwgCisgICAgMTY0LCAxNywgMjEzLCAxMTEsIDE2NCwgMTcsIDE5OSwgMTY0LCAxNywgMjIyLCA2MywgMTY0LCA0MiwgMjA5LCAxNTIsIAorICAgIDE2NCwgNDIsIDExOCwgMjM2LCAxMSwgMTY0LCA0MiwgMTE4LCAyMDksIDM2LCAxNjQsIDIzOSwgMTM4LCAxMTgsIDIxNywgCisgICAgNTUsIDE2NCwgMjM5LCAxMzgsIDExOCwgMjM3LCAxMzcsIDE2NCwgMjM5LCAxMzgsIDEyNiwgMjE3LCA1MywgMTY0LCAyNDQsIAorICAgIDEzOCwgODIsIDE2NCwgMSwgMjQ2LCAxMzEsIDIyMSwgMjI4LCAxNjQsIDEsIDI0NiwgMTMxLCAyMjMsIDE2MywgMTY0LCAxLCAKKyAgICAyNDYsIDEzMSwgMjE1LCAxODYsIDE2NCwgMSwgMjQ2LCAxMzEsIDE1OSwgMTY0LCAxLCAyNDYsIDEzMSwgMjI3LCA3OCwgCisgICAgMTY0LCAxLCAyNDYsIDEzMSwgMjMwLCA1NCwgMTQwLCAyLCAyNTAsIDE3OSwgMTQwLCAyLCAyMDUsIDE5OCwgMTQwLCAxLCAKKyAgICAyNTAsIDYsIDE0MCwgMSwgMjUxLCAyMzUsIDE0MCwgMSwgMjUxLCA4OSwgMTQwLCAxLCAyNTEsIDEwNCwgMTQwLCAxLCAyMzAsIAorICAgIDE5MSwgMTQwLCAxLCAyMzEsIDgyLCAxNDAsIDEsIDIwNiwgMTY5LCAxNDAsIDEsIDIwNiwgMTcyLCAxNDAsIDEsIDIzMCwgCisgICAgMjE3LCAxNDAsIDEsIDIzMCwgMjE4LCAxNDAsIDEsIDIzMSwgNjgsIDE0MCwgMSwgMjMxLCA3MCwgMTQwLCAxLCAyNDAsIAorICAgIDE5NCwgMTQwLCAxLCAyNDEsIDE1NiwgMTQwLCAxLCAyNTEsIDQ5LCAxNDAsIDEsIDIxOSwgMTg3LCAxNDAsIDEsIDIyMCwgCisgICAgMTEsIDE0MCwgMSwgMjUwLCAyMCwgMTQwLCAxLCAyNTEsIDUsIDIyOSwgMjA2LCAxNDAsIDEsIDIyNSwgMTQ3LCAyMjksIAorICAgIDIwNiwgMTQwLCAxLCAyNTEsIDUsIDIzOCwgMjEwLCAxNDAsIDEsIDIyNSwgMTQ3LCAyMzgsIDIxMCwgMTQwLCAxLCAyMjksIAorICAgIDI1NSwgMjIzLCAxMDMsIDE0MCwgMSwgMjE0LCAyMzUsIDIzOCwgMjEwLCAxNDAsIDEsIDI1MSwgNSwgMjQ3LCA4LCAxNDAsIAorICAgIDEsIDIyNSwgMTQ3LCAyNDcsIDgsIDE0MCwgMSwgMjUxLCA1LCAyMzAsIDE2NCwgMTQwLCAxLCAyMjUsIDE0NywgMjMwLCAKKyAgICAxNjQsIDE0MCwgMSwgMjEwLCAxNSwgMjIzLCAxMDMsIDE0MCwgMSwgMjEwLCAxNSwgMjE0LCAyMzQsIDIyMywgMTA0LCAxNDAsIAorICAgIDEsIDIxNCwgMjM1LCAyMzAsIDE2NCwgMTQwLCAxLCAyNTEsIDUsIDIwNywgMjM3LCAxNDAsIDEsIDIyNSwgMTQ3LCAyMDcsIAorICAgIDIzNywgMTQwLCAxLCAyNTEsIDUsIDI0NCwgMTExLCAxNDAsIDEsIDIyNSwgMTQ3LCAyNDQsIDExMSwgMTQwLCAxLCAyMjMsIAorICAgIDE5MSwgMjIzLCA1OCwgMTQwLCAxLCAyMTQsIDIzNSwgMjQ0LCAxMTEsIDE0MCwgMSwgMjUxLCA1LCAyMDksIDE5NSwgMTQwLCAKKyAgICAxLCAyMjUsIDE0NywgMjA5LCAxOTUsIDE0MCwgMSwgMjUxLCA1LCAyNDQsIDEzMSwgMTQwLCAxLCAyMjUsIDE0NywgMjQ0LCAKKyAgICAxMzEsIDE0MCwgMSwgMjQ0LCAxNjIsIDIyMywgNTgsIDE0MCwgMSwgMjE0LCAyMzUsIDI0NCwgMTMxLCAxNDAsIDEsIDI1MSwgCisgICAgNSwgMjE5LCA0MiwgMTQwLCAxLCAyMjUsIDE0NywgMjE5LCA0MiwgMTQwLCAxLCAyNTEsIDUsIDI0OCwgMjAwLCAxNDAsIDEsIAorICAgIDIyNSwgMTQ3LCAyNDgsIDIwMCwgMTQwLCAxLCAyMjUsIDYyLCAxNDAsIDEsIDI1MCwgMjQxLCAyNDgsIDIwMCwgMTQwLCAxLCAKKyAgICAyMDMsIDU3LCAxNDAsIDEsIDIxNiwgMTY0LCAxNDAsIDEsIDI0NCwgMTYyLCAyMjcsIDI0MywgMTQwLCAxLCAyMDYsIDU3LCAKKyAgICAxNDAsIDEsIDIxMCwgMTUsIDIxNCwgMjA3LCAxNDAsIDEsIDIyMywgMTkxLCAyMTQsIDIwNywgMTQwLCAxLCAyNDQsIDE2MiwgCisgICAgMjE0LCAyMDcsIDE0MCwgMSwgMjM3LCA3MSwgMTQwLCAxLCAyMjMsIDE5MSwgMjI3LCAyNDMsIDE0MCwgMSwgMjQwLCA2MiwgCisgICAgMTQwLCAyLCAyNTEsIDM4LCAxNDAsIDIyLCAyLCAyNTEsIDk5LCAxNDAsIDIyLCAyLCAyMjksIDE2OSwgMjUxLCAxMDYsIAorICAgIDE0MCwgMjIsIDIsIDI0MywgMjAwLCAyNTEsIDEwNiwgMTQwLCAyMiwgMiwgMjI5LCAxNjksIDIzMCwgMjE0LCAxNDAsIDIyLCAKKyAgICAyLCAyNDMsIDIwMCwgMjMwLCAyMTQsIDE0MCwgMjIsIDIsIDIyOSwgMTY5LCAyMTksIDE2NywgMTQwLCAyMiwgMiwgMjQzLCAKKyAgICAyMDAsIDIxOSwgMTY3LCAxNDAsIDIyLCAyLCAyMzgsIDI1MywgMTQwLCAyMiwgMiwgMjI5LCAxMSwgMTQwLCAyMiwgMiwgCisgICAgMjQzLCAyMDAsIDIyOSwgMTEsIDE0MCwgMjIsIDIsIDIyOSwgMTMsIDI0NCwgNTAsIDE0MCwgMjIsIDIsIDIyOSwgMTIsIAorICAgIDIzNywgMTU4LCAyNTEsIDk5LCAxNDAsIDIyLCAyLCAyMjksIDEyLCAyMzcsIDE1OCwgMjQzLCAyMDAsIDI1MSwgOTksIDE0MCwgCisgICAgMjIsIDIsIDIyOSwgMTIsIDIzNywgMTU4LCAyMzgsIDIwOSwgMTQwLCAyMiwgMiwgMjM4LCAyMDksIDE0MCwgMjI3LCA4OSwgCisgICAgMTcsIDIwMiwgODQsIDE0MCwgMjI3LCA4OSwgMTcsIDEwNSwgMTQwLCAyMjcsIDg5LCAxNywgMTA4LCAxNDAsIDIyNywgODksIAorICAgIDE3LCAxNDcsIDE0MCwgMjI3LCA4OSwgMTcsIDE0OSwgMTQwLCAyMjcsIDg5LCAxNywgMTcwLCAxNDAsIDIyNywgODksIDE3LCAKKyAgICAxOTUsIDE0MCwgMjI3LCA4OSwgMTcsIDIxMywgMTExLCAxNDAsIDIyNywgODksIDE3LCAxOTksIDE0MCwgMjI3LCA4OSwgMTcsIAorICAgIDIyMiwgNjMsIDE0MCwgMjIsIDIsIDI0MywgMjAwLCAyMzgsIDI1MywgMTQwLCAyMiwgMiwgMjQzLCAyMDAsIDIzOCwgMjA5LCAKKyAgICAxNDAsIDIxNywgMTc5LCAyMjgsIDE5NCwgMjA5LCAxMDMsIDE2NywgMjI5LCAyNywgMjMwLCAxOCwgMjA5LCAxMDMsIDE2NywgCisgICAgMjI5LCAxMTYsIDIyOSwgMTM5LCAyMDksIDEwMywgMTY3LCAyMjksIDExNiwgMjI5LCAxMDgsIDIwOSwgMTAzLCAxNjcsIAorICAgIDIyOSwgMTE2LCAyMjksIDEwMywgMjA5LCAxMDMsIDE2NywgMjI5LCAxMTYsIDIyOSwgMTEyLCAyMDksIDEwMywgMTY3LCAKKyAgICAyMjksIDExNiwgMjE2LCAxODUsIDIwOSwgMTAzLCAxNjcsIDIyMiwgMTI5LCAyMjIsIDExNiwgMjA5LCAxMDMsIDE2NywgCisgICAgMjQ2LCAxMTcsIDI0NiwgMTg4LCAyMDksIDEwMywgMTY3LCAyNDYsIDExNywgMjQ2LCAxMjcsIDIwOSwgMTAzLCAxNjcsIAorICAgIDI0NiwgMTE3LCAyNDYsIDE4NywgMjA5LCAxMDMsIDE2NywgMjEyLCAxNCwgMjEyLCAxMywgMjA5LCAxMDMsIDE2NywgMjQ2LCAKKyAgICAxMTcsIDI0NiwgMTEzLCAyMDksIDEwMywgMTY3LCAyMDIsIDI0OCwgMjAyLCAyNTUsIDIwOSwgMTAzLCAxNjcsIDI0MywgCisgICAgMTE0LCAyNDYsIDE5NiwgMjA5LCAxMDMsIDE2NywgMjA4LCAxNzMsIDIxOSwgNTMsIDIwOSwgMTAzLCAxNjcsIDIwOSwgNDgsIAorICAgIDIwOSwgOTcsIDIwOSwgMTAzLCAxNjcsIDIwOSwgNDgsIDIyMywgODAsIDIwOSwgMTAzLCAxNjcsIDIwOSwgNDgsIDIxOCwgCisgICAgMTcwLCAyMDksIDEwMywgMTY3LCAyMjEsIDE5MiwgMjIyLCAyMzAsIDIwOSwgMTAzLCAxNjcsIDI0MywgMTE0LCAyNDQsIDUxLCAKKyAgICAyMDksIDEwMywgMTY3LCAyMDgsIDE3MywgMjA5LCAyMjMsIDIwOSwgMTAzLCAxNjcsIDIwOSwgNDgsIDIwOSwgMTYsIDIwOSwgCisgICAgMTAzLCAxNjcsIDIwOSwgNDgsIDIwOSwgMTA0LCAyMDksIDEwMywgMTY3LCAyMDksIDQ4LCAyMDksIDQzLCAyMDksIDEwMywgCisgICAgMTY3LCAyMjEsIDE5MiwgMjIxLCA4NCwgMjA5LCAxMDMsIDE2NywgMjQ4LCAyNCwgMjQ5LCAwLCAyMDksIDEwMywgMTY3LCAKKyAgICAyMTgsIDcwLCAyMTgsIDk4LCAyMDksIDEwMywgMTY3LCAyMTgsIDE4MSwgMjE4LCAxNzIsIDIwOSwgMTAzLCAxNjcsIDIzOSwgCisgICAgMTg3LCAyNDAsIDEwOCwgMjA5LCAxMDMsIDE2NywgMjE4LCAxODEsIDIxOCwgMjAxLCAyMDksIDEwMywgMTY3LCAyMzksIAorICAgIDE4NywgMjQwLCA4MSwgMjA5LCAxMDMsIDE2NywgMjE4LCAxODEsIDIxNCwgMjQ3LCAyMDksIDEwMywgMTY3LCAyMjQsIDgzLCAKKyAgICAxOTIsIDIwOSwgMTAzLCAxNjcsIDIwMiwgMjQ4LCAyMDMsIDg2LCAyMDksIDEwMywgMTY3LCAyMTUsIDIyOCwgMjE1LCAxNDQsIAorICAgIDIwOSwgMTAzLCAxNjcsIDIxNSwgMTQ1LCAyMDksIDEwMywgMTY3LCAyMjcsIDUwLCAyMjcsIDEwNywgMjA5LCAxMDMsIDE2NywgCisgICAgMjI2LCAyMzksIDIwOSwgMTAzLCAxNjcsIDIwNCwgMSwgMjA0LCAxMDYsIDIwOSwgMTAzLCAxNjcsIDIxMiwgMTQsIDIxNSwgCisgICAgNiwgMjA5LCAxMDMsIDE2NywgMjEyLCAxNCwgMjE1LCAxMTYsIDIwOSwgMTAzLCAxNjcsIDIxMiwgMTQsIDIxMSwgOSwgMjA5LCAKKyAgICAxMDMsIDE2NywgMjM2LCAxMzcsIDIzNiwgMjMzLCAyMDksIDEwMywgMTY3LCAyMjcsIDUwLCAyNDYsIDk3LCAyMDksIDEwMywgCisgICAgMTY3LCAxNTgsIDI1MCwgMjIzLCAyMDksIDEwMywgMTY3LCAyMzYsIDEzNywgMjIxLCAxODcsIDIwOSwgMTAzLCAxNjcsIAorICAgIDIxOSwgMTQ0LCAyMDksIDEwMywgMTY3LCAyMTQsIDIyOSwgNjMsIDIwOSwgMTAzLCAxNjcsIDIyNSwgMTQxLCAyMzcsIDEyNSwgCisgICAgMjA5LCAxMDMsIDE2NywgMjE0LCAyMjksIDI1MiwgMjUsIDIwOSwgMTAzLCAxNjcsIDIxNCwgMjI5LCAyNTAsIDI0NywgMjA5LCAKKyAgICAxMDMsIDE2NywgMjE0LCAyMjksIDc1LCAyMDksIDEwMywgMTY3LCAyMTQsIDIyOSwgMjMxLCA4MywgMjA5LCAxMDMsIDE2NywgCisgICAgMjE0LCAyMjksIDIwNywgMjQsIDIwOSwgMTAzLCAxNjcsIDIxNCwgMjI5LCAyMDcsIDIyLCAyMDksIDEwMywgMTY3LCAyMTQsIAorICAgIDIyOSwgNjgsIDIwOSwgMTAzLCAxNjcsIDIxNCwgMjI5LCAyMDYsIDE3OCwgMjA5LCAxMDMsIDE2NywgMjE4LCAxODMsIDIwOSwgCisgICAgMTAzLCAyNDUsIDkyLCAxNiwgMjQ5LCAxLCAyMDksIDEwMywgMTY3LCAyMTQsIDIyOSwgNzQsIDIwOSwgMTAzLCAxNjcsIAorICAgIDIxNCwgMjI5LCAyNTEsIDEwOSwgMjA5LCAxMDMsIDE2NywgMjE0LCAyMjksIDc4LCAyMDksIDEwMywgMTY3LCAyMTQsIDIyOSwgCisgICAgMjUxLCA2NSwgMjI1LCAxMzUsIDIwOSwgMTAzLCAxNjcsIDIxNCwgMjI5LCAyNTEsIDY1LCAyMjUsIDEzNiwgMjA5LCAxMDMsIAorICAgIDE2NywgMjI4LCAzMiwgMjA5LCAxMDMsIDE2NywgMjI1LCAxMzIsIDIwOSwgMTAzLCAxNjcsIDIyNSwgMTMzLCAyMDksIDEwMywgCisgICAgMTY3LCAyMjUsIDE0MSwgMjQxLCAxMjksIDIwOSwgMTAzLCAxNjcsIDIyNSwgMTQxLCAyMDksIDQ3LCAyMDksIDEwMywgMTY3LCAKKyAgICAyMjUsIDE0MSwgMjA4LCA4OCwgMjA5LCAxMDMsIDE2NywgMjI1LCAxNDEsIDI0NiwgMTc1LCAyMDksIDEwMywgMTY3LCAyMDksIAorICAgIDk1LCAyMDksIDEwMywgMTY3LCAyMjIsIDcyLCAyMDksIDEwMywgMTY3LCAyMDMsIDgwLCAyMDksIDEwMywgMTY3LCAyMzksIAorICAgIDE3NywgMjA5LCAxMDMsIDE3LCAyMDIsIDg0LCAyMDksIDEwMywgMTcsIDEwNSwgMjA5LCAxMDMsIDE3LCAxMDgsIDIwOSwgCisgICAgMTAzLCAxNywgMTQ3LCAyMDksIDEwMywgMTcsIDE0OSwgMjA5LCAxMDMsIDE3LCAxNzAsIDIwOSwgMTAzLCAxNywgMTk1LCAKKyAgICAyMDksIDEwMywgMTcsIDIxMywgMTExLCAyMDksIDEwMywgMTcsIDE5OSwgMjA5LCAxMDMsIDE3LCAyMjIsIDYzLCAyMDksIAorICAgIDEwMywgMTY3LCAyNTAsIDIxOSwgMjA5LCAxMDMsIDE2NywgMjI5LCAxMTMsIDIyOCwgMTIsIDEsIDIyOSwgMjYsIDIyOCwgCisgICAgMTIsIDEsIDIyOSwgMTE2LCAyMTAsIDIxMSwgMjI4LCAxMiwgMSwgMjI5LCAxMTYsIDIwOSwgMjMyLCAyMjgsIDEyLCAxLCAKKyAgICAyMjIsIDEyOCwgMjI4LCAxMiwgMSwgMjQ1LCAyNTQsIDIyOCwgMTIsIDEsIDIxMiwgMTQsIDIwOSwgMjMyLCAyMjgsIDEyLCAKKyAgICAxLCAyMjAsIDIzMywgMjI4LCAxMiwgMSwgMjQzLCAxMTMsIDIyOCwgMTIsIDEsIDEzNSwgMjI4LCAxMiwgMSwgMjA5LCA0OCwgCisgICAgMjEwLCAyMTEsIDIyOCwgMTIsIDEsIDIwOSwgNDgsIDIwOSwgMjMyLCAyMjgsIDEyLCAxLCAyMjEsIDE5MSwgMjI4LCAxMiwgCisgICAgMSwgMjQ4LCAyMywgMjI4LCAxMiwgMSwgMjE4LCA2OSwgMjI4LCAxMiwgMSwgMjE4LCAxODEsIDIxMCwgMjExLCAyMjgsIDEyLCAKKyAgICAxLCAyMzksIDE4NywgMjA5LCAyMzIsIDIyOCwgMTIsIDEsIDIxOCwgMTgxLCAyMDksIDIzMiwgMjI4LCAxMiwgMSwgMjM5LCAKKyAgICAxODcsIDIxMCwgMjExLCAyMjgsIDEyLCAxLCAyMjQsIDgyLCAyMjgsIDEyLCAxLCAyMDIsIDI0NywgMjI4LCAxMiwgMSwgCisgICAgMjI3LCA1MCwgMjI3LCAxMDcsIDIyOCwgMTIsIDEsIDIyNywgNTAsIDIyNywgMTIsIDIyOCwgMTIsIDEsIDIwNCwgMCwgMjI4LCAKKyAgICAxMiwgMSwgMjEyLCAxNCwgMjEwLCAyMTEsIDIyOCwgMTIsIDEsIDIzNiwgMTM3LCAyMTAsIDIxMSwgMjI4LCAxMiwgMSwgNzgsIAorICAgIDIyOCwgMTIsIDEsIDIzNiwgMTM3LCAyMDksIDIzMiwgMjI4LCAxMiwgMjQxLCAxMDgsIDIyOCwgMTIsIDIyLCAyLCA2MywgCisgICAgMjI4LCAxMiwgMjIsIDIsIDIyNSwgMTQxLCAyMzAsIDQsIDIyOCwgMTIsIDIyLCAyLCAyNTIsIDI1LCAyMjgsIDEyLCAyMiwgCisgICAgMiwgMjUwLCAyNDcsIDIyOCwgMTIsIDIyLCAyLCA3NSwgMjI4LCAxMiwgMjIsIDIsIDIzMSwgODMsIDIyOCwgMTIsIDIyLCAyLCAKKyAgICAyMDMsIDEyNCwgMjI4LCAxMiwgMjIsIDIsIDIwMiwgMTY5LCAyMjgsIDEyLCAyMiwgMiwgNjgsIDIyOCwgMTIsIDIyLCAyLCAKKyAgICAyMDYsIDE3OCwgMjI4LCAxMiwgMjIsIDIsIDIyNSwgMTQxLCAyMjksIDksIDIyOCwgMTIsIDIxMywgMTM4LCAyLCAyMjcsIAorICAgIDQ5LCAyMjgsIDEyLCAyMTMsIDEzOCwgMiwgMjIwLCAyMzMsIDIyOCwgMTIsIDIyLCAyLCA3NCwgMjI4LCAxMiwgMjIsIDIsIAorICAgIDI0MSwgMTQ1LCAyMjgsIDEyLCAyMiwgMiwgNzgsIDIyOCwgMTIsIDIyLCAyLCAyNTAsIDgsIDIyOCwgMTIsIDIyLCAyLCAKKyAgICAyNTEsIDY0LCAyMjgsIDEyLCAyMjksIDI3LCAyMjgsIDExMywgMjI4LCAxMiwgMTQzLCAyMjUsIDE0MSwgMjQxLCAxMjksIAorICAgIDIyOCwgMTIsIDE0MywgMjI1LCAxNDEsIDIwOSwgNDcsIDIyOCwgMTIsIDE0MywgMjI1LCAxNDEsIDIwOSwgMiwgMjI4LCAxMiwgCisgICAgMTQzLCAyMjUsIDE0MSwgMjQ3LCAxNiwgMjI4LCAxMiwgMjQ3LCA1OCwgODIsIDIyOCwgMTIsIDIyMiwgODEsIDIyOCwgMTIsIAorICAgIDE3LCAyMDIsIDg0LCAyMjgsIDEyLCAxNywgMTA1LCAyMjgsIDEyLCAxNywgMTA4LCAyMjgsIDEyLCAxNywgMTQ3LCAyMjgsIAorICAgIDEyLCAxNywgMTQ5LCAyMjgsIDEyLCAxNywgMTcwLCAyMjgsIDEyLCAxNywgMTk1LCAyMjgsIDEyLCAxNywgMjEzLCAxMTEsIAorICAgIDIyOCwgMTIsIDE3LCAxOTksIDIyOCwgMTIsIDE3LCAyMjIsIDYzLCAyMjgsIDEyLCAyMzYsIDEzNywgMjIxLCAxOTEsIDIyOCwgCisgICAgMTIsIDIzNiwgMTM3LCAyMjQsIDgyLCAyMjgsIDEyLCAxLCAyMjksIDExNywgMjM4LCAzOSwgMjI4LCAxMiwgMSwgMjI5LCAKKyAgICAxMTcsIDIyMCwgMjMzLCA3NywgNCwgMjIwLCAzOSwgNzcsIDEzMSwgMjM3LCAyMzIsIDIwMywgMywgMjI0LCAxNzMsIDIwOCwgCisgICAgMjYsIDYzLCA3NywgMTMxLCAyMzcsIDIzMiwgMjAzLCAzLCAyMjQsIDE3MywgMjU1LCAyMiwgMjE1LCAyMzIsIDI0OCwgMTY0LCAKKyAgICAxOTIsIDc3LCAxMzEsIDIzNywgMjMyLCAyMDMsIDMsIDIyNCwgMTczLCAyNTUsIDIyLCAyMzcsIDIzMiwgMjA4LCA2LCAxOTIsIAorICAgIDc3LCAxMzEsIDgxLCAyMDMsIDMsIDIyNCwgMTczLCAyMjUsIDIyLCAxOTIsIDc3LCAxMzEsIDI0NiwgMTIsIDIwMywgMywgCisgICAgMjI0LCAxNzMsIDIxMywgOTcsIDE5MiwgNzcsIDEzMSwgMjQ3LCAzNCwgMjAzLCAzLCAyMjQsIDE3MywgMjE4LCAxNzEsIAorICAgIDIxMywgODMsIDE5MiwgNzcsIDEzMSwgMjAzLCAzLCAyMjQsIDE3MywgMjA4LCA2LCAyMTMsIDgzLCAxOTIsIDc3LCAxMzEsIAorICAgIDIxNCwgMjA1LCAyMTMsIDgyLCA3NywgMTMxLCAyNDcsIDE5NiwgMjAzLCAzLCAyMjQsIDE3MiwgNzcsIDEzMSwgMjQ4LCA0NSwgCisgICAgMjEyLCAyMzgsIDIwMywgMywgMjI0LCAxNzIsIDc3LCAxMzEsIDIzMCwgMjQzLCAyMDgsIDUsIDc3LCAxMzEsIDI0NCwgNDQsIAorICAgIDIwOCwgNiwgMjQ3LCAxOTUsIDc3LCAxMzEsIDIxMywgODIsIDc3LCAxMzEsIDIyMCwgMjM4LCAyMTMsIDgyLCA3NywgMTMxLCAKKyAgICAyMDgsIDYsIDIxMywgODIsIDc3LCAxMzEsIDIyMCwgMjM4LCAyMDgsIDYsIDIxMywgODIsIDc3LCAxMzEsIDIxNSwgMjU1LCAKKyAgICAyNDYsIDE1NiwgMjExLCAxODAsIDIxMywgODIsIDc3LCAxMzEsIDIxNiwgNjUsIDIzOCwgOSwgMjEzLCA4MiwgNzcsIDEzMSwgCisgICAgMjQ3LCAzNCwgMjU1LCAyNiwgMjE1LCAxNDksIDIyNSwgMjEsIDE2MywgMjQ3LCA2MSwgNzcsIDEzMSwgMjM3LCAyMzIsIAorICAgIDIwOCwgNSwgNzcsIDIyNywgMzUsIDIsIDI0NiwgMTk3LCAyMTUsIDE0OCwgNzcsIDIyNywgMzUsIDIsIDIyNywgMTU5LCAKKyAgICAyMTUsIDE0OCwgNzcsIDI1MCwgNTUsIDIsIDIxMywgOTMsIDIzOCwgMTkzLCAyNTUsIDI3LCAyMTUsIDE0OCwgNzcsIDI1MCwgCisgICAgNTUsIDIsIDI1NSwgMjQsIDE4NSwgNzcsIDI1MCwgNTUsIDIsIDIxNCwgMTc4LCAyMDgsIDAsIDc3LCAyLCAyMTYsIDE2MCwgCisgICAgMjQzLCAxMjcsIDIzOCwgMTkyLCA3NywgMiwgMjE2LCAxNjAsIDI0MywgMTI3LCAyMzgsIDQxLCA3NywgMiwgMjE2LCAxNjAsIAorICAgIDI0MywgMTI3LCAyMzcsIDIzMywgNzcsIDIsIDIxNiwgMTYwLCAyMjMsIDk5LCAyMzgsIDE5MiwgNzcsIDIsIDIxNiwgMTYwLCAKKyAgICAyMjMsIDk5LCAyMzgsIDQxLCA3NywgMiwgMjE2LCAxNjAsIDI0MywgMTI3LCAyMTYsIDE2MCwgMjIzLCA5OCwgNzcsIDE3LCAKKyAgICAyMDIsIDg0LCA3NywgMTcsIDEwNSwgNzcsIDE3LCAxMDgsIDc3LCAxNywgMTQ3LCA3NywgMTcsIDE0OSwgNzcsIDE3LCAxNzAsIAorICAgIDc3LCAxNywgMTk1LCA3NywgMTcsIDIxMywgMTExLCA3NywgMTcsIDE5OSwgNzcsIDE3LCAyMjIsIDYzLCA3NywgMTcsIDE2MiwgCisgICAgMTA1LCA3NywgMTcsIDE2MiwgMTA4LCA3NywgMTcsIDE2MiwgMTQ3LCA3NywgMTcsIDE2MiwgMTQ5LCA3NywgMTcsIDE2MiwgCisgICAgMTcwLCA3NywgMTcsIDE2MiwgMTk1LCA3NywgMTcsIDE2MiwgMjEzLCAxMTEsIDc3LCAxNywgMTYyLCAxOTksIDc3LCAxNywgCisgICAgMTYyLCAyMjIsIDYzLCA3NywgMTcsIDE2MiwgMjAyLCA4NCwgNzcsIDEzMSwgMjQ3LCAxOTgsIDIxNSwgMTQ4LCA3NywgMTMxLCAKKyAgICAyMjIsIDE5NCwgMjQ3LCAxMjcsIDIyMCwgMjQ5LCAyMDIsIDE5LCA3NywgMTMxLCAyNDcsIDM0LCAyNTUsIDI2LCAyMTUsIAorICAgIDE0OSwgMjQ3LCAxMjgsIDIyNCwgMTI2LCAyNDcsIDYxLCA3NywgMTMxLCAyMjIsIDE5NCwgMjQ3LCAxMjcsIDIxMywgOTQsIAorICAgIDIxNSwgMTQ4LCA3NywgMTMxLCAyNDYsIDE3MSwgMjI0LCAxNzIsIDc3LCAxMzEsIDIwOCwgMjEsIDI1NSwgMjMsIDc3LCAKKyAgICAxMzEsIDIzNywgMjE1LCAyMTUsIDE0OSwgMjM3LCAxNzQsIDc3LCAxMzEsIDIzNywgMjE1LCAyMTUsIDE0OSwgMjM3LCAxODAsIAorICAgIDc3LCAxMzEsIDI1MCwgMjI0LCAyMjksIDEzNCwgMjM3LCAxNzQsIDc3LCAxMzEsIDI1MCwgMjI0LCAyMjksIDEzNCwgMjM3LCAKKyAgICAxODAsIDc3LCAyLCAyMDMsIDcyLCAyMDgsIDQsIDc3LCAyLCAyMjUsIDEwMSwgMjA4LCA0LCA3NywgMSwgMTczLCA3NywgMSwgCisgICAgMjI5LCAxNDQsIDc3LCAxLCAyMzksIDgsIDc3LCAxLCAyMzgsIDExOSwgNzcsIDEsIDIyMiwgMjAzLCA3NywgMSwgMjQ3LCAKKyAgICA5MiwgNzcsIDEsIDI0NiwgMTk5LCA3NywgMSwgMjMwLCAxODEsIDc3LCAxLCAyMjEsIDExLCA3NywgMSwgMjA3LCAyNDEsIAorICAgIDc3LCAxLCAyMDcsIDIyOSwgNzcsIDEsIDI0NCwgMTIwLCA3NywgMSwgMjQ0LCAxMDQsIDc3LCAxLCAyMjEsIDIyNywgNzcsIAorICAgIDEsIDIxMCwgMjIsIDc3LCAxLCAyMDksIDEwOCwgNzcsIDEsIDI0NCwgMjEyLCA3NywgMSwgMjQ0LCAxLCA3NywgMSwgMjAxLCAKKyAgICAyMDEsIDc3LCAxLCAxODUsIDc3LCAxLCAyMTgsIDIwOCwgNzcsIDEsIDI0OSwgMzIsIDc3LCAxLCAyNDgsIDk4LCA3NywgMSwgCisgICAgMTkyLCA3NywgMSwgMjA4LCAyMCwgNzcsIDEsIDIwOCwgMTAsIDc3LCAxLCAyNDEsIDI1NSwgNzcsIDEsIDI0MSwgMjQ5LCAKKyAgICA3NywgMSwgMjA0LCAxMTEsIDc3LCAxLCAyMDIsIDgwLCA3NywgMSwgMjAyLCAxMTYsIDc3LCAxLCAyNTUsIDI5LCA3NywgMSwgCisgICAgMTk4LCA3NywgMSwgMjE2LCAyMjAsIDc3LCAxLCAyMjgsIDExMywgNzcsIDEsIDIxMywgOTAsIDc3LCAxLCAyMTEsIDE2NCwgCisgICAgNzcsIDEsIDIxNSwgMzYsIDc3LCAxLCAxNTIsIDc3LCAxLCA2MywgNzcsIDEsIDIyOCwgMjIzLCA3NywgMSwgMjM5LCAyMjksIAorICAgIDIxNiwgMjIwLCA3NywgMSwgMjI5LCA0NywgNzcsIDEsIDIxNSwgMTg1LCA3NywgMjIsIDIsIDI1MiwgMjUsIDc3LCAyMiwgMiwgCisgICAgNzUsIDc3LCAyMiwgMiwgMjMxLCA4MywgNzcsIDIyLCAyLCA2OCwgNzcsIDIyLCAyLCAyMDYsIDE3OCwgNzcsIDIyLCAyLCAKKyAgICAxMjUsIDE0NiwgNzcsIDIyLCAyLCAxMjUsIDIxNSwgMTg2LCA3NywgMjIsIDIsIDEyNSwgMTU5LCA3NywgMjIsIDIsIDEyNSwgCisgICAgMjI3LCA3OCwgNzcsIDIyLCAyLCA3NCwgNzcsIDIyLCAyLCAyNDEsIDE2MSwgNzcsIDIyLCAyLCA3OCwgNzcsIDIyLCAyLCAKKyAgICAyMjAsIDE4LCA3NywgMiwgMjE1LCAyMzgsIDIxMSwgMTEsIDIyMiwgMjA0LCAyMTUsIDIyNywgNzcsIDIsIDIxNSwgMjMyLCAKKyAgICAyNDgsIDE2MywgNzcsIDIyLCAyLCAyMTYsIDczLCA3NSwgNzcsIDIyLCAyLCAyMTYsIDczLCAyMzEsIDgzLCA3NywgMiwgCisgICAgMjIwLCAyNDksIDIwMiwgMjAsIDIyMywgMTA3LCAyNDQsIDIxMiwgNzcsIDIsIDIxMiwgMjcsIDIyNywgMjM2LCA3NywgMTMxLCAKKyAgICAyMzcsIDEzOSwgNzcsIDEzMSwgMjE5LCAxMzIsIDc3LCAyLCAyMjcsIDIzOSwgMjE1LCAxNDgsIDc3LCAyLCAyMDMsIDc3LCAKKyAgICAyMTUsIDE0OCwgNzcsIDIsIDIyNywgMjQwLCAyMDgsIDIxLCAyNDcsIDYxLCA3NywgMiwgMjI1LCAyNCwgMjQ3LCA2MSwgNzcsIAorICAgIDIsIDIzNywgMjM2LCAyNDcsIDYyLCAyMTYsIDYzLCA3NywgMiwgMjM3LCAyMzYsIDIyNSwgMTQsIDIxNiwgNjMsIDc3LCAyLCAKKyAgICAyMzAsIDIzOSwgMjI1LCAyNCwgMjQ3LCA2MSwgNzcsIDIxMCwgMjU0LCAyLCAyMjcsIDI0MCwgMjA4LCAyMSwgMjQ3LCA2MSwgCisgICAgNzcsIDIxMCwgMjU0LCAyLCAyMjUsIDI0LCAyNDcsIDYxLCA3NywgMjEwLCAyNTQsIDIsIDIzMCwgMjM5LCAyMjUsIDI0LCAKKyAgICAyNDcsIDYxLCA3NywgMjEwLCAyNTQsIDEsIDE3MywgNzcsIDIxMCwgMjU0LCAxLCAyMjksIDE0NCwgNzcsIDIxMCwgMjU0LCAKKyAgICAxLCAyMzksIDgsIDc3LCAyMTAsIDI1NCwgMSwgMjM4LCAxMTksIDc3LCAyMTAsIDI1NCwgMSwgMjIyLCAyMDMsIDc3LCAyMTAsIAorICAgIDI1NCwgMSwgMjQ3LCA5MiwgNzcsIDIxMCwgMjU0LCAxLCAyNDYsIDE5OSwgNzcsIDIxMCwgMjU0LCAxLCAyMzAsIDE4MSwgCisgICAgNzcsIDIxMCwgMjU0LCAxLCAyMjEsIDExLCA3NywgMjEwLCAyNTQsIDEsIDIwNywgMjQxLCA3NywgMjEwLCAyNTQsIDEsIAorICAgIDIwNywgMjI5LCA3NywgMjEwLCAyNTQsIDEsIDI0NCwgMTIwLCA3NywgMjEwLCAyNTQsIDEsIDI0NCwgMTA0LCA3NywgMjEwLCAKKyAgICAyNTQsIDEsIDIyMSwgMjI3LCA3NywgMjEwLCAyNTQsIDEsIDIxMCwgMjIsIDc3LCAyMTAsIDI1NCwgMSwgMjA5LCAxMDgsIAorICAgIDc3LCAyMTAsIDI1NCwgMSwgMjQ0LCAyMTIsIDc3LCAyMTAsIDI1NCwgMSwgMjQ0LCAxLCA3NywgMjEwLCAyNTQsIDEsIDIwMSwgCisgICAgMjAxLCA3NywgMjEwLCAyNTQsIDEsIDE4NSwgNzcsIDIxMCwgMjU0LCAxLCAyMTgsIDIwOCwgNzcsIDIxMCwgMjU0LCAxLCAKKyAgICAyNDksIDMyLCA3NywgMjEwLCAyNTQsIDEsIDI0OCwgOTgsIDc3LCAyMTAsIDI1NCwgMSwgMTkyLCA3NywgMjEwLCAyNTQsIDEsIAorICAgIDIwOCwgMjAsIDc3LCAyMTAsIDI1NCwgMSwgMjA4LCAxMCwgNzcsIDIxMCwgMjU0LCAxLCAyNDEsIDI1NSwgNzcsIDIxMCwgCisgICAgMjU0LCAxLCAyNDEsIDI0OSwgNzcsIDIxMCwgMjU0LCAxLCAyMDQsIDExMSwgNzcsIDIxMCwgMjU0LCAxLCAyMDIsIDgwLCAKKyAgICA3NywgMjEwLCAyNTQsIDEsIDIwMiwgMTE2LCA3NywgMjEwLCAyNTQsIDEsIDI1NSwgMjksIDc3LCAyMTAsIDI1NCwgMSwgCisgICAgMTk4LCA3NywgMjEwLCAyNTQsIDEsIDIxNiwgMjIwLCA3NywgMjEwLCAyNTQsIDEsIDIyOCwgMTEzLCA3NywgMjEwLCAyNTQsIAorICAgIDEsIDIxMywgOTAsIDc3LCAyMTAsIDI1NCwgMSwgMjExLCAxNjQsIDc3LCAyMTAsIDI1NCwgMSwgMjE1LCAzNiwgNzcsIDIxMCwgCisgICAgMjU0LCAxLCAxNTIsIDc3LCAyMTAsIDI1NCwgMSwgNjMsIDc3LCAyMTAsIDI1NCwgMSwgMjI4LCAyMjMsIDc3LCAyMTAsIAorICAgIDI1NCwgMSwgMjM5LCAyMjksIDIwNCwgMTExLCA3NywgMjEwLCAyNTQsIDEsIDIzOSwgMjI5LCAxOTgsIDc3LCAyMTAsIDI1NCwgCisgICAgMSwgMjM5LCAyMjksIDIxNiwgMjIwLCA3NywgMjI4LCAyMTAsIDIxNSwgMTQ2LCAyMjksIDE0NCwgNzcsIDIyOCwgMjEwLCAKKyAgICAyMTUsIDE0NiwgMjI5LCAxNDUsIDI0NywgMTI4LCAyMjQsIDEyNiwgMjQ3LCA2MSwgNzcsIDI0NywgNDksIDIsIDc5LCAyNDgsIAorICAgIDE1NSwgNzcsIDI0NywgNDksIDIsIDE1NywgMjQ4LCAxNTUsIDc3LCAyNDcsIDQ5LCAyLCAyNDcsIDUwLCAyMDksIDE4NSwgCisgICAgNzcsIDI0NywgNDksIDIsIDIxNCwgMjA0LCAyNTUsIDI4LCA3NywgMTYsIDI0MiwgNTUsIDI0NywgMTkzLCA3NywgMTYsIAorICAgIDIxNiwgMTU5LCAyMTUsIDIzOSwgNzcsIDE2LCAyMTksIDE1NSwgMjM4LCAxOTEsIDc3LCAxNiwgMjE2LCAxNTksIDIxNSwgCisgICAgMjQwLCAyMTYsIDY1LCAyMzgsIDgsIDc3LCAxNiwgMjE4LCAxNzEsIDE4NSwgNzcsIDE2LCAyMjEsIDE3NSwgMjQ3LCAxOTMsIAorICAgIDc3LCAxNiwgMjIxLCAxNzUsIDI0NywgMTk0LCAyMjAsIDIzOCwgMjU1LCAyNSwgNzcsIDE2LCAyMjEsIDE3NSwgMjQ3LCAKKyAgICAxOTQsIDIzNywgMjM0LCAyNTUsIDI1LCA3NywgMTYsIDIyMSwgMTc1LCAyNDcsIDE5NCwgMjQ3LCAxMjgsIDI1NSwgMjUsIAorICAgIDc3LCAyLCAyMTYsIDE2MCwgMjIzLCA5OSwgMjE2LCAxNjAsIDI0MywgMTI2LCA3NywgMiwgMjE2LCAxNjAsIDIyMywgOTksIAorICAgIDIzNywgMjMzLCA3NywgMTMxLCAyNDcsIDE5NywgMjEyLCAyMzgsIDIzOCwgODIsIDIyNCwgMTczLCAyMTYsIDY0LCA3NywgCisgICAgMTMxLCAyMjQsIDg0LCAyMDMsIDMsIDIzOCwgODIsIDIyNCwgMTczLCAyMTYsIDY0LCA3NywgMTMxLCAyMjAsIDIzOCwgMjA4LCAKKyAgICA1LCA3NywgMTMxLCA4MSwgMjQ3LCAyMjAsIDIxNSwgMjI5LCAyMDMsIDMsIDIyNCwgMTczLCAyMjUsIDIyLCAxOTIsIDc3LCAKKyAgICAxMzEsIDI0NiwgMTIsIDI0NywgMjIwLCAyMTUsIDIyOSwgMjAzLCAzLCAyMjQsIDE3MywgMjEzLCA5NywgMTkyLCAyMTYsIAorICAgIDE1LCAyMTAsIDE3NCwgNTQsIDIyNywgMjIxLCAyMTAsIDE3NCwgNTQsIDIxNiwgMTUsIDIxMCwgMTc0LCAyLCAzLCAyNDMsIAorICAgIDgzLCAyMjcsIDIyMSwgMjEwLCAxNzQsIDIsIDMsIDI0MywgODMsIDc3LCAxMzEsIDIyNywgMjMxLCAyMjUsIDI1LCAyMTUsIAorICAgIDE0OCwgNzcsIDEzMSwgMjA4LCAxMTIsIDIyNSwgMjUsIDIxNSwgMTQ4LCA2OSwgMSwgMTczLCA2OSwgMSwgMjI5LCAxNDQsIAorICAgIDY5LCAxLCAyMzksIDgsIDY5LCAxLCAyMzgsIDExOSwgNjksIDEsIDIyMiwgMjAzLCA2OSwgMSwgMjQ3LCA5MiwgNjksIDEsIAorICAgIDI0NiwgMTk5LCA2OSwgMSwgMjMwLCAxODEsIDY5LCAxLCAyMzAsIDE0OSwgNjksIDEsIDIyMSwgMTEsIDY5LCAxLCAyMjEsIAorICAgIDE5MywgNjksIDEsIDIwNywgMjQxLCA2OSwgMSwgMjA3LCAyMjksIDY5LCAxLCAyNDQsIDEyMCwgNjksIDEsIDI0NCwgMTA0LCAKKyAgICA2OSwgMSwgMjIxLCAyMjcsIDY5LCAxLCAyMTAsIDIyLCA2OSwgMSwgMjA5LCAxMDgsIDY5LCAxLCAyNDQsIDIxMiwgNjksIDEsIAorICAgIDI0NCwgMSwgNjksIDEsIDIwMSwgMjAxLCA2OSwgMSwgMTg1LCA2OSwgMSwgMjE4LCAyMDgsIDY5LCAxLCAyNDksIDMyLCA2OSwgCisgICAgMSwgMjQ4LCA5OCwgNjksIDEsIDE5MiwgNjksIDEsIDE5OCwgNjksIDEsIDIxNiwgMjIwLCA2OSwgMSwgMjI4LCAxMTMsIDY5LCAKKyAgICAxLCAyMDQsIDExMSwgNjksIDEsIDIxNSwgMzYsIDY5LCAxLCAxNTIsIDY5LCAxLCAyMjcsIDc3LCA2OSwgMSwgNjMsIDY5LCAKKyAgICAxLCAyMTMsIDY3LCA2MywgNjksIDEsIDc1LCA2OSwgMSwgMjMxLCA4MywgNjksIDEsIDY4LCA2OSwgMSwgMjA2LCAxNzgsIAorICAgIDY5LCAxLCA3NCwgNjksIDEsIDIyNCwgNTUsIDc0LCA2OSwgMSwgNzgsIDY5LCAxLCAyNTAsIDM0LCA2OSwgMjIsIDIsIDIwOSwgCisgICAgMjM0LCAyNTIsIDI1LCA2OSwgMjIsIDIsIDI1MiwgMjUsIDY5LCAyMiwgMiwgNzUsIDY5LCAyMiwgMiwgMjMxLCA4MywgNjksIAorICAgIDIyLCAyLCA2OCwgNjksIDIyLCAyLCAyMDYsIDE3OCwgNjksIDIyLCAyLCA3NCwgNjksIDIyLCAyLCAyNTEsIDY0LCA2OSwgCisgICAgMjIsIDIsIDIyNCwgNTUsIDIzMSwgODMsIDY5LCAyMiwgMiwgMjI0LCA1NSwgNzgsIDY5LCAyMiwgMiwgMTg4LCA1NSwgNjksIAorICAgIDIsIDI1MCwgMTgwLCA2OSwgMiwgNzAsIDU2LCA2OSwgMiwgMjA1LCAxOTksIDY5LCAyLCAyMDUsIDIwNCwgNjksIDIsIDI1MCwgCisgICAgNzksIDY5LCAxMDksIDIsIDE3NCwgMTk4LCA2OSwgMTA5LCAyLCAxNzQsIDIxNiwgMjIwLCA2OSwgMTA5LCAyLCAxNzQsIAorICAgIDIwNCwgMTExLCA2OSwgMTA5LCAyLCAxNzQsIDE1MiwgNjksIDEsIDIzNywgMjQ5LCAyMTUsIDM2LCA2OSwgMTcsIDIwMiwgCisgICAgODQsIDY5LCAxNywgMTA1LCA2OSwgMTcsIDEwOCwgNjksIDE3LCAxNDcsIDY5LCAxNywgMTQ5LCA2OSwgMTcsIDE3MCwgNjksIAorICAgIDE3LCAxOTUsIDY5LCAxNywgMjEzLCAxMTEsIDY5LCAxNywgMTk5LCA2OSwgMTcsIDIyMiwgNjMsIDY5LCAyLCAyMjcsIDg2LCAKKyAgICAyMTQsIDE2NywgNjksIDIsIDIxNCwgMTY3LCA2OSwgMTYsIDIyNywgNDQsIDY5LCAxNiwgMjQ1LCAyMjcsIDY5LCAxNiwgCisgICAgMjUxLCA4NSwgNjksIDE2LCAyMzgsIDE3NCwgNjksIDEsIDIxMywgOTAsIDY5LCAxLCAyMTEsIDE2NCwgNjksIDEsIDEyNSwgCisgICAgMTQ2LCA2OSwgMSwgMTI1LCAyMTUsIDE4NiwgNjksIDEsIDEyNSwgMTU5LCA2OSwgMSwgMTI1LCAyMjcsIDc4LCA2OSwgMjIsIAorICAgIDIsIDEyNSwgMTQ2LCA2OSwgMjIsIDIsIDEyNSwgMjE1LCAxODYsIDY5LCAyMiwgMiwgMTI1LCAxNTksIDY5LCAyMiwgMiwgCisgICAgMTI1LCAyMjcsIDc4LCA2OSwgMSwgMjI0LCA1NSwgMjIyLCAyMDMsIDY5LCAxLCAyMjQsIDU1LCAyMzAsIDE0OSwgNjksIDEsIAorICAgIDIyNCwgNTUsIDI0OCwgMTk4LCA2OSwgMSwgMjI0LCA1NSwgMjQ4LCAxOTMsIDY5LCAxMDksIDIsIDIyNCwgNTUsIDE3NCwgCisgICAgMjAxLCAyMDEsIDY5LCAxMDksIDIsIDIyNCwgNTUsIDE3NCwgMTkyLCA2OSwgMTA5LCAyLCAyMjQsIDU1LCAxNzQsIDIyOCwgCisgICAgMTEzLCA2OSwgMSwgMjEzLCA5NiwgMjI5LCAyMzcsIDIxMywgOTAsIDY5LCAyMiwgMiwgMjEzLCA5NiwgMjI5LCAyMzcsIAorICAgIDI0MCwgMjM4LCA2OSwgMTQzLCAxMzEsIDIxMywgOTYsIDIyOSwgMjM3LCAyMzcsIDc5LCA2OSwgMTQzLCAxMzEsIDIxMywgCisgICAgOTYsIDIyOSwgMjM3LCAyMjksIDIwMiwgMjE4LCAxODAsIDY5LCAxLCAyMDQsIDQ0LCAyMTcsIDE0NiwgMjI5LCAyMzcsIAorICAgIDIwOSwgMTA4LCA2OSwgMSwgMjA0LCA0NCwgMjE3LCAxNDYsIDIyOSwgMjM3LCAyMTcsIDE1MiwgNjksIDIyLCAyLCAyMDQsIAorICAgIDQ0LCAyMTcsIDE0NiwgMjI5LCAyMzcsIDI0MCwgMjM4LCA2OSwgMjIsIDIsIDIwNCwgNDQsIDIxNywgMTQ2LCAyMjksIDIzNywgCisgICAgMjA3LCAyNCwgNjksIDIsIDIwNCwgNDQsIDIxNywgMTQ2LCAyMjksIDIzNywgMjA4LCAxNjAsIDY5LCAyLCAyMDQsIDQ0LCAKKyAgICAyMTcsIDE0NiwgMjI5LCAyMzcsIDIwOCwgMTU5LCA2OSwgMiwgMjA0LCA0NCwgMjE3LCAxNDYsIDIyOSwgMjM3LCAyMDgsIAorICAgIDE1OCwgNjksIDIsIDIwNCwgNDQsIDIxNywgMTQ2LCAyMjksIDIzNywgMjA4LCAxNTcsIDY5LCAyLCAyMDQsIDQ0LCAyMTcsIAorICAgIDE0NiwgMjI5LCAyMzcsIDIwOCwgMTU2LCA2OSwgMSwgMjQxLCAxNzQsIDIxNywgMTQ2LCAyMjksIDIzNywgMjIxLCAyMjcsIAorICAgIDY5LCAxLCAyNDEsIDE3NCwgMjE3LCAxNDYsIDIyOSwgMjM3LCAyMDIsIDE3NiwgNjksIDEsIDI0MSwgMTc0LCAyMTcsIDE0NiwgCisgICAgMjI5LCAyMzcsIDIzOCwgODQsIDY5LCAyMiwgMiwgMjM4LCAxODYsIDIyOSwgMjM3LCA3NSwgNjksIDIyLCAyLCAyMjksIAorICAgIDIwNywgMjIwLCA3MywgNjksIDIyLCAyLCAyMjksIDIwNywgNjgsIDY5LCAyMiwgMiwgMjI5LCAyMDcsIDI0MSwgMTYxLCA2OSwgCisgICAgMSwgMjEzLCA2NywgMTczLCA2OSwgMSwgMjEzLCA2NywgMjI5LCAxNDQsIDY5LCAxLCAyMTMsIDY3LCAyMzksIDgsIDY5LCAxLCAKKyAgICAyMTMsIDY3LCAyNDcsIDkyLCA2OSwgMSwgMjEzLCA2NywgMjAyLCAxMTYsIDY5LCAxLCAyMTMsIDY3LCAyMjEsIDExLCA2OSwgCisgICAgMSwgMjEzLCA2NywgMjQ0LCAyMTIsIDY5LCAxLCAyMTMsIDY3LCAyMDEsIDIwMSwgNjksIDEsIDIxMywgNjcsIDIxOCwgMjA4LCAKKyAgICA2OSwgMSwgMjEzLCA2NywgMjQwLCAxMDgsIDY5LCAxLCAyMTMsIDY3LCAyNDksIDMyLCA2OSwgMSwgMjEzLCA2NywgMjA5LCAKKyAgICAxMDgsIDY5LCAxLCAyMTMsIDY3LCAxNTIsIDY5LCAxMDksIDIsIDIxMywgNjcsIDE3NCwgMjA0LCAxMTEsIDY5LCAyMiwgMiwgCisgICAgMjEzLCA2NywgMjUyLCAyNSwgNjksIDIyLCAyLCAyMTMsIDY3LCA3NCwgNjksIDIyLCAyLCAyMTMsIDY3LCAxODgsIDU1LCAKKyAgICA2OSwgMjIsIDIsIDIxMywgNjcsIDQ2LCAyMDMsIDEyNCwgNjksIDIsIDIxMywgNjcsIDIwOCwgMTU5LCA2OSwgMiwgMjEzLCAKKyAgICA2NywgMjA4LCAxNTgsIDY5LCAyLCAyMTMsIDY3LCAyMDgsIDE1NiwgNjksIDIsIDIxMywgNjcsIDIwOCwgMTU1LCA2OSwgMiwgCisgICAgMjEzLCA2NywgMjQ1LCAxNTYsIDIwOCwgMTU5LCA2OSwgMiwgMjEzLCA2NywgMjQ1LCAxNTYsIDIwOCwgMTU4LCA2OSwgMiwgCisgICAgMjEzLCA2NywgMjQ1LCAxNTYsIDI0MSwgOTUsIDIwOCwgMTYxLCA2OSwgMSwgMjE1LCAxMzAsIDIxOSwgMTM5LCAyNDAsIAorICAgIDEwOCwgNjksIDIsIDIxNSwgMTMwLCAyMTksIDEzOSwgMjA4LCAxNTYsIDY5LCAyMTMsIDY3LCAxNywgMjAyLCA4NCwgNjksIAorICAgIDIxMywgNjcsIDE3LCAxMDUsIDY5LCAyMTMsIDY3LCAxNywgMTA4LCA2OSwgMjEzLCA2NywgMTcsIDE0NywgNjksIDIxMywgCisgICAgNjcsIDE3LCAxNDksIDY5LCAyMTMsIDY3LCAxNywgMTcwLCA2OSwgMjEzLCA2NywgMTcsIDE5NSwgNjksIDIxMywgNjcsIDE3LCAKKyAgICAyMTMsIDExMSwgNjksIDIxMywgNjcsIDE3LCAxOTksIDY5LCAyMTMsIDY3LCAxNywgMjIyLCA2MywgNjksIDIsIDIyOSwgCisgICAgMTM3LCAyMDgsIDE2MCwgNjksIDIsIDIyOSwgMTM3LCAyMDgsIDE1OCwgNjksIDIyLCAyLCAyNTEsIDUxLCA2MywgNjksIDIyLCAKKyAgICAyLCAyNTEsIDUxLCAyNTEsIDY0LCA2OSwgMTYsIDIxMywgNjcsIDEwNSwgNjksIDE2LCAyMTMsIDY3LCAyNDAsIDIxMSwgCisgICAgMTE0LCA2LCAxLCAyNTAsIDIzMSwgMTE0LCA2LCAxLCAyNDgsIDI0MiwgMTE0LCA2LCAxLCAyMzgsIDIzNCwgMTE0LCA2LCAxLCAKKyAgICAyNDMsIDkzLCAxMTQsIDYsIDEsIDI0MSwgOTIsIDExNCwgNiwgMSwgMjA1LCAyMTMsIDExNCwgNiwgMSwgMjAyLCA4NywgCisgICAgMTE0LCA2LCAxLCAyMDksIDIzMCwgMTE0LCA2LCAxLCAyMzEsIDQ5LCAxMTQsIDYsIDEsIDIzMCwgNCwgMTE0LCA2LCAxLCAKKyAgICAyMjgsIDIsIDExNCwgNiwgMSwgMjI1LCAxMjIsIDExNCwgNiwgMSwgMjIzLCA3NCwgMTE0LCA2LCAxLCAyMjAsIDMxLCAxMTQsIAorICAgIDYsIDEsIDIxOSwgOTEsIDExNCwgNiwgMSwgMjAyLCA3NiwgMTE0LCA2LCAxLCAyMTYsIDIwMiwgMTE0LCA2LCAxLCAyMTQsIAorICAgIDI0MywgMTE0LCA2LCAxLCAyMDksIDIxOCwgMTE0LCA2LCAxLCAyMDYsIDI1NSwgMTE0LCA2LCAxLCAyMTgsIDIwMCwgMTE0LCAKKyAgICA2LCAxLCAyMjksIDEzMiwgMTE0LCA2LCAxLCAyMzgsIDExMCwgMTE0LCA2LCAxLCAyMTcsIDExMSwgMTE0LCA2LCAxLCAyMTIsIAorICAgIDI1NSwgMTE0LCA2LCAxLCAyNDYsIDEyOSwgMTE0LCA2LCAxLCAyNDcsIDYxLCAxMTQsIDYsIDEsIDIzMCwgMTMzLCAxMTQsIAorICAgIDYsIDEsIDI0NiwgNjgsIDExNCwgNiwgMSwgMjQ2LCAxODMsIDExNCwgNiwgMSwgMjAzLCAxODAsIDExNCwgNiwgMSwgMjMwLCAKKyAgICAxNDYsIDExNCwgNiwgMSwgMjM3LCAxNTQsIDExNCwgNiwgMSwgMjM3LCA2NywgMTE0LCA2LCAxLCAyMzYsIDI1NCwgMTE0LCAKKyAgICA2LCAxLCAyMDQsIDYyLCAxMTQsIDYsIDEsIDIzNywgOTIsIDExNCwgNiwgMSwgMjM2LCAxMzIsIDExNCwgNiwgMSwgMjAyLCAKKyAgICAyNDksIDExNCwgNiwgMSwgMjUxLCA5OCwgMTE0LCAxLCAyNTAsIDIzMSwgMTE0LCAxLCAyNDgsIDI0MiwgMTE0LCAxLCAyMzgsIAorICAgIDIzNCwgMTE0LCAxLCAyNDMsIDkzLCAxMTQsIDEsIDI0MSwgOTIsIDExNCwgMSwgMjA1LCAyMTMsIDExNCwgMSwgMjAyLCA4NywgCisgICAgMTE0LCAxLCAyMDksIDIzMCwgMTE0LCAxLCAyMzEsIDQ5LCAxMTQsIDEsIDIzMCwgNCwgMTE0LCAxLCAyMjgsIDIsIDExNCwgCisgICAgMSwgMjI1LCAxMjIsIDExNCwgMSwgMjIzLCA3NCwgMTE0LCAxLCAyMjAsIDMxLCAxMTQsIDEsIDIxOSwgOTEsIDExNCwgMSwgCisgICAgMjAyLCA3NiwgMTE0LCAxLCAyMTYsIDIwMiwgMTE0LCAxLCAyMTQsIDI0MywgMTE0LCAxLCAyMDksIDIxOCwgMTE0LCAxLCAKKyAgICAyMDYsIDI1NSwgMTE0LCAxLCAyMTgsIDIwMCwgMTE0LCAxLCAyMjksIDEzMiwgMTE0LCAxLCAyMzgsIDExMCwgMTE0LCAxLCAKKyAgICAyMTcsIDExMSwgMTE0LCAxLCAyMTIsIDI1NSwgMTE0LCAxLCAyNDYsIDEyOSwgMTE0LCAxLCAyNDcsIDYxLCAxMTQsIDEsIAorICAgIDIzMCwgMTMzLCAxMTQsIDEsIDI0NiwgNjgsIDExNCwgMSwgMjQ2LCAxODMsIDExNCwgMSwgMjAzLCAxODAsIDExNCwgMSwgCisgICAgMjMwLCAxNDYsIDExNCwgMSwgMjM3LCAxNTQsIDExNCwgMSwgMjM3LCA2NywgMTE0LCAxLCAyMzYsIDI1NCwgMTE0LCAxLCAKKyAgICAyMDQsIDYyLCAxMTQsIDEsIDIzNywgOTIsIDExNCwgMSwgMjM2LCAxMzIsIDExNCwgMSwgMjQwLCAyNiwgMTE0LCAxLCAyMDIsIAorICAgIDI0OSwgMTE0LCAxLCAyNDEsIDExMCwgMTE0LCAxLCAyMDcsIDE3NCwgMjM4LCAyMzQsIDExNCwgMSwgMjUxLCA1OSwgMTE0LCAKKyAgICAyMTksIDg5LCAyMTMsIDEzMCwgNjUsIDEsIDExNCwgMjIzLCA3NCwgMTE0LCAxLCAyNTEsIDk4LCAxMTQsIDEsIDIzNywgOTEsIAorICAgIDU0LCAxMTQsIDEsIDIyOCwgMTA0LCA1NCwgMjgsIDEyMywgMjI5LCA1OSwgMjgsIDEyMywgMjExLCAxNTYsIDI4LCAxMjMsIAorICAgIDIyMiwgOTMsIDI4LCAxMjMsIDIwOCwgMjQwLCAyOCwgMTIzLCAyMTEsIDE0NSwgMjgsIDEyMywgMjE2LCA0NywgMjgsIDEyMywgCisgICAgMjI0LCAxNDEsIDI4LCAxMjMsIDIxOCwgMTUzLCAyOCwgMTIzLCAyMTEsIDE1MywgMjgsIDEyMywgMjEyLCAxMTEsIDI4LCAKKyAgICAxMjMsIDIxMSwgMTUwLCAyOCwgMTIzLCAyMzEsIDEwNiwgMjgsIDEyMywgMjQ2LCA3NCwgMjgsIDEyMywgMjExLCAxNjAsIAorICAgIDI4LCAxMjMsIDI0NiwgMTM4LCAyOCwgMTIzLCAyMjksIDEyMCwgMjgsIDEyMywgMjA5LCA2NiwgMjgsIDEyMywgMjE4LCAKKyAgICAxOTAsIDI4LCAxMjMsIDIzNiwgMjUxLCAyOCwgMTIzLCAyMjIsIDg5LCAyOCwgMTIzLCAyMTEsIDE1NCwgMjgsIDEyMywgCisgICAgMjIyLCA4MywgMjgsIDEyMywgMjIyLCA4NywgMjgsIDEyMywgMjA4LCAyMzcsIDI4LCAxMjMsIDIxNiwgMzUsIDI4LCAxMjMsIAorICAgIDIxMSwgMTUyLCAyOCwgMTIzLCAyMTYsIDQ1LCAyOCwgMTIzLCAyMjksIDI0MywgMjgsIDEyMywgMjI0LCAxMzQsIDI4LCAKKyAgICAxMjMsIDIyOSwgMjQ2LCAyOCwgMTIzLCAyMTgsIDE0OCwgMjgsIDEyMywgMjE4LCAxNDYsIDI4LCAxMjMsIDIxOCwgMTM0LCAKKyAgICAyOCwgMTIzLCAyMTgsIDE0MiwgMjgsIDEyMywgMjE4LCAxNDAsIDI4LCAxMjMsIDIxOCwgMTM3LCAyOCwgMTIzLCAyMTgsIAorICAgIDEzOSwgMjgsIDEyMywgMjE4LCAxMzYsIDI4LCAxMjMsIDIxOCwgMTQxLCAyOCwgMTIzLCAyMTgsIDE1MSwgMjgsIDEyMywgCisgICAgMjE4LCAxNTIsIDI4LCAxMjMsIDIxOCwgMTM1LCAyOCwgMTIzLCAyMTgsIDE0NSwgMjgsIDEyMywgMjI5LCAyNDQsIDI4LCAKKyAgICAxMjMsIDIyOSwgMjQyLCAyOCwgMTIzLCAyMTIsIDEwNCwgMjgsIDEyMywgMjEyLCAxMDIsIDI4LCAxMjMsIDIxMiwgOTQsIAorICAgIDI4LCAxMjMsIDIxMiwgOTcsIDI4LCAxMjMsIDIxMiwgMTAzLCAyOCwgMTIzLCAyMTIsIDk5LCAyOCwgMTIzLCAyMTIsIDk4LCAKKyAgICAyOCwgMTIzLCAyMTIsIDk2LCAyOCwgMTIzLCAyMTIsIDEwNywgMjgsIDEyMywgMjEyLCAxMDksIDI4LCAxMjMsIDIxMiwgCisgICAgMTEwLCAyOCwgMTIzLCAyMTIsIDEwNSwgMjgsIDEyMywgMjEyLCA5NSwgMjgsIDEyMywgMjEyLCAxMDAsIDI4LCAxMjMsIAorICAgIDIxMiwgMTA4LCAyOCwgMTIzLCAyNDYsIDEyMCwgMjgsIDEyMywgMjQ2LCAxMTgsIDI4LCAxMjMsIDI0NiwgMjEwLCAyOCwgCisgICAgMTIzLCAyNDYsIDIwOCwgMjgsIDEyMywgMjE5LCAxMDcsIDI4LCAxMjMsIDIzMSwgMTAxLCAyOCwgMTIzLCAyMzEsIDkyLCAKKyAgICAyOCwgMTIzLCAyMzEsIDEwMCwgMjgsIDEyMywgMjMxLCA5NywgMjgsIDEyMywgMjMxLCA5NSwgMjgsIDEyMywgMjMxLCA5OSwgCisgICAgMjgsIDEyMywgMjExLCAxNTcsIDI4LCAxMjMsIDIzMSwgMTA0LCAyOCwgMTIzLCAyMzEsIDEwNSwgMjgsIDEyMywgMjMxLCAKKyAgICA5MywgMjgsIDEyMywgMjMxLCA5OCwgMjgsIDEyMywgMjAzLCAyOSwgMjgsIDEyMywgMjQ2LCA3MywgMjgsIDEyMywgMjQ2LCAKKyAgICAxMjEsIDI4LCAxMjMsIDI0NiwgMTE5LCAyOCwgMTIzLCAyNDYsIDIxMSwgMjgsIDEyMywgMjQ2LCAyMDksIDI4LCAxMjMsIAorICAgIDI0NiwgMTM2LCAyOCwgMTIzLCAyNDYsIDEzNywgMjgsIDEyMywgMjQ2LCAxMjIsIDI4LCAxMjMsIDI0NiwgMjEyLCAyOCwgCisgICAgMTIzLCAyMTgsIDE4OCwgMjgsIDEyMywgMjI5LCAyNDUsIDI4LCAxMjMsIDIxMSwgMTU4LCAyOCwgMTIzLCAyMDMsIDM1LCAKKyAgICAyOCwgMTIzLCAyMjksIDUwLCAyOCwgMTIzLCAyMjIsIDg1LCAyOCwgMTIzLCAyMjIsIDkxLCAyOCwgMTIzLCAyMjIsIDkwLCAKKyAgICAyOCwgMTIzLCAyMDgsIDIzNCwgMjgsIDEyMywgMjQwLCA3LCAyOCwgMTc2LCAyNDAsIDcsIDI4LCAxNzYsIDYzLCAyOCwgCisgICAgMTc2LCAyNTEsIDEwOSwgMjgsIDE3NiwgMTk4LCAyOCwgMTc2LCAyMDMsIDk5LCAyOCwgMTc2LCAyNDEsIDU1LCAyOCwgMTc2LCAKKyAgICA3NCwgMjgsIDE3NiwgMjAzLCAzOSwgMjgsIDE3NiwgMjAzLCA1MiwgMjgsIDE3NiwgNzgsIDI4LCAxNzYsIDIwNCwgMTExLCAKKyAgICAyOCwgMTc2LCAyMDQsIDEwNywgMjgsIDE3NiwgMjIwLCA3MywgMjgsIDE3NiwgMjAyLCAyNDcsIDI4LCAxNzYsIDY4LCAyOCwgCisgICAgMTc2LCAyMDQsIDQ4LCAyOCwgMTc2LCAyMDQsIDYyLCAyOCwgMTc2LCAyMDQsIDMwLCAyOCwgMTc2LCAyMDIsIDIxMywgMjgsIAorICAgIDE3NiwgMjQwLCAyMzgsIDI4LCAxNzYsIDIwMywgMTEsIDI4LCAxNzYsIDc1LCAyOCwgMTc2LCAyNTUsIDIwLCAyOCwgMTc2LCAKKyAgICAyNTUsIDE5LCAyOCwgMTc2LCAyMDMsIDExMywgMjgsIDE3NiwgMjAzLCAxMTEsIDI4LCAxNzYsIDI0MSwgNTMsIDI4LCAxNzYsIAorICAgIDI0MSwgNTIsIDI4LCAxNzYsIDI0MSwgNTQsIDI4LCAxNzYsIDIwMywgMzgsIDI4LCAxNzYsIDIwMywgMzcsIDI4LCAxNzYsIAorICAgIDIyMCwgMTgxLCAyOCwgMTc2LCAyMjAsIDE4MiwgMjgsIDE3NiwgMjIwLCAxNzUsIDI4LCAxNzYsIDIyMCwgMTgwLCAyOCwgCisgICAgMTc2LCAyMjAsIDE3OCwgMjgsIDE3NiwgMjAyLCAyNDEsIDI4LCAxNzYsIDIwMiwgMjQwLCAyOCwgMTc2LCAyMDIsIDIzOSwgCisgICAgMjgsIDE3NiwgMjAyLCAyNDIsIDI4LCAxNzYsIDIwMiwgMjQzLCAyOCwgMTc2LCAyMDcsIDk3LCAyOCwgMTc2LCAyMDcsIDk2LCAKKyAgICAyOCwgMTc2LCAyMDcsIDk0LCAyOCwgMTc2LCAyMDcsIDkwLCAyOCwgMTc2LCAyMDcsIDkxLCAyOCwgMTc2LCAyMDIsIDIxMiwgCisgICAgMjgsIDE3NiwgMjAyLCAyMDksIDI4LCAxNzYsIDIwMiwgMjEwLCAyOCwgMTc2LCAyMDIsIDIwNCwgMjgsIDE3NiwgMjAyLCAKKyAgICAyMDUsIDI4LCAxNzYsIDIwMiwgMjA2LCAyOCwgMTc2LCAyMDIsIDIwOCwgMjgsIDE3NiwgMjQwLCAyMzIsIDI4LCAxNzYsIAorICAgIDI0MCwgMjM0LCAyOCwgMTc2LCAyMDMsIDEwLCAyOCwgMTc2LCAyMzUsIDIwNSwgMjgsIDE3NiwgMjM1LCAxOTcsIDI4LCAKKyAgICAxNzYsIDIzNSwgMjAwLCAyOCwgMTc2LCAyMzUsIDE5OCwgMjgsIDE3NiwgMjM1LCAyMDIsIDI4LCAxNzYsIDIzNSwgMjA0LCAKKyAgICAyOCwgMTc2LCAyNTAsIDEzNywgMjgsIDE3NiwgMjUwLCAxMzQsIDI4LCAxNzYsIDI1MCwgMTMyLCAyOCwgMTc2LCAyNTAsIAorICAgIDEzMywgMjgsIDE3NiwgMjExLCAxNjEsIDI4LCAxNzYsIDI1NSwgMjEsIDI4LCAxNzYsIDIwMywgMTEyLCAyOCwgMTc2LCAKKyAgICAyMDMsIDM2LCAyOCwgMTc2LCAyMjAsIDE3NywgMjgsIDE3NiwgMjIwLCAxNzYsIDI4LCAxMDcsIDIyOSwgNTksIDI4LCAxMDcsIAorICAgIDIxMSwgMTU2LCAyOCwgMTA3LCAyMjksIDUyLCAyOCwgMTA3LCAyMjIsIDkzLCAyOCwgMTA3LCAyMjIsIDkxLCAyOCwgMTA3LCAKKyAgICAyMjIsIDkwLCAyOCwgMTA3LCAyMDgsIDI0MCwgMjgsIDEwNywgMjE2LCA0NywgMjgsIDEwNywgMjE2LCA0MiwgMjgsIDEwNywgCisgICAgMjE2LCAzOSwgMjgsIDEwNywgMjE2LCAzMiwgMjgsIDEwNywgMjE2LCAyNywgMjgsIDEwNywgMjE2LCAyMiwgMjgsIDEwNywgCisgICAgMjE2LCAzMywgMjgsIDEwNywgMjE2LCA0NSwgMjgsIDEwNywgMjI0LCAxNDEsIDI4LCAxMDcsIDIxOCwgMTUzLCAyOCwgMTA3LCAKKyAgICAyMTgsIDE0MiwgMjgsIDEwNywgMjEyLCAxMTEsIDI4LCAxMDcsIDIxMSwgMTUwLCAyOCwgMTA3LCAyMzEsIDEwNiwgMjgsIAorICAgIDEwNywgMjQ2LCA3NCwgMjgsIDEwNywgMjQ2LCAxMzgsIDI4LCAxMDcsIDIyOSwgMTIwLCAyOCwgMTA3LCAyMDksIDY2LCAyOCwgCisgICAgMTA3LCAyMTgsIDE5MCwgMjgsIDEwNywgMjM2LCAyNTEsIDI4LCAxMDcsIDIyOSwgNTMsIDI4LCAxMDcsIDIyOSwgNTEsIDI4LCAKKyAgICAxMDcsIDIyMiwgODksIDI4LCAxMDcsIDIyMiwgODMsIDI4LCAxMDcsIDIyMiwgODUsIDI4LCAxMDcsIDIyMiwgODgsIDI4LCAKKyAgICAxMDcsIDIyMiwgODQsIDI4LCAxMDcsIDIwOCwgMjM3LCAyOCwgMTA3LCAyMDgsIDIzNCwgMjgsIDEwNywgMjE2LCA0MCwgMjgsIAorICAgIDEwNywgMjE2LCAzNSwgMjgsIDEwNywgMjE2LCAyMSwgMjgsIDEwNywgMjE2LCAyMCwgMjgsIDEwNywgMjExLCAxNTIsIDI4LCAKKyAgICAxMDcsIDIxNiwgMzcsIDI4LCAxMDcsIDIxNiwgMzYsIDI4LCAxMDcsIDIxNiwgMjksIDI4LCAxMDcsIDIxNiwgMzEsIDI4LCAKKyAgICAxMDcsIDIxNiwgNDQsIDI4LCAxMDcsIDIxNiwgMjQsIDI4LCAxMDcsIDIxNiwgMzQsIDI4LCAxMDcsIDIxNiwgNDMsIDI4LCAKKyAgICAxMDcsIDIxNiwgMTksIDI4LCAxMDcsIDIyNCwgMTM3LCAyOCwgMTA3LCAyMjQsIDEzMiwgMjgsIDEwNywgMjI0LCAxMzQsIAorICAgIDI4LCAxMDcsIDIyNCwgMTMxLCAyOCwgMTA3LCAyMjQsIDEyOSwgMjgsIDEwNywgMjI0LCAxMzUsIDI4LCAxMDcsIDIyNCwgCisgICAgMTQwLCAyOCwgMTA3LCAyMjQsIDEzOCwgMjgsIDEwNywgMjI5LCAyNDYsIDI4LCAxMDcsIDIxOCwgMTQ0LCAyOCwgMTA3LCAKKyAgICAyMTgsIDE0NSwgMjgsIDEwNywgMjE4LCAxNTAsIDI4LCAxMDcsIDIyOSwgMjQ0LCAyOCwgMTA3LCAyMTIsIDEwNCwgMjgsIAorICAgIDEwNywgMjEyLCA5NCwgMjgsIDEwNywgMjEyLCA5NywgMjgsIDEwNywgMjEyLCA5OSwgMjgsIDEwNywgMjE5LCAxMDcsIDI4LCAKKyAgICAxMDcsIDIzMSwgMTAxLCAyOCwgMTA3LCAyMzEsIDk0LCAyOCwgMTA3LCAyMTEsIDE1NywgMjgsIDEwNywgMjMxLCAxMDIsIAorICAgIDI4LCAxMDcsIDIwMywgMjksIDI4LCAxMDcsIDIwMywgMjUsIDI4LCAxMDcsIDIwMywgMjYsIDI4LCAxMDcsIDIxOCwgMTg4LCAKKyAgICAyOCwgMTA3LCAyMjksIDI0NSwgMjgsIDEwNywgMjM2LCAyNDksIDI4LCAxMDcsIDIzNiwgMjQ3LCAyOCwgMTA3LCAyMzYsIAorICAgIDI1MCwgMjgsIDEwNywgMjM2LCAyNDgsIDI4LCAxMDcsIDIwMywgMzUsIDI4LCAxMDcsIDIyOSwgNTUsIDI4LCAxMDcsIDIyOSwgCisgICAgNTQsIDI4LCAxMDcsIDIyOSwgNTgsIDI4LCAxMDcsIDIyOSwgNTYsIDI4LCAxMDcsIDIyOSwgNTcsIDI4LCAxMDcsIDIxMSwgCisgICAgMTU0LCAzMywgNCwgMTUyLCAzMywgNCwgMjM2LCAyNiwgMzMsIDQsIDIzNywgMywgMzMsIDQsIDIzNywgMTU3LCAzMywgNCwgCisgICAgMjM3LCA0OCwgMzMsIDQsIDIzNywgNjcsIDMzLCA0LCAyMzYsIDEzNiwgMzMsIDQsIDIzNiwgMTM1LCAzMywgNCwgMjI4LCAKKyAgICAxMTMsIDMzLCA0LCAyMjYsIDIzOSwgMzMsIDQsIDIyNywgMTQ4LCAzMywgNCwgMjI4LCAxMTIsIDMzLCA0LCAyMjcsIDIyNiwgCisgICAgMzMsIDQsIDIyNywgMjM0LCAzMywgNCwgMjI3LCA0OSwgMzMsIDQsIDIyNiwgMjA3LCAzMywgNCwgMjM3LCAxMiwgMzMsIDQsIAorICAgIDIzNywgNiwgMzMsIDQsIDIzNywgOCwgMzMsIDQsIDIzNywgMTEsIDMzLCA0LCAyMzcsIDksIDMzLCA0LCAyMzcsIDEwLCAzMywgCisgICAgNCwgMjM3LCA3LCAzMywgNCwgMjM3LCA1LCAzMywgNCwgMTkyLCAzMywgNCwgMjIzLCAyNDYsIDMzLCA0LCAyMjQsIDE1NSwgCisgICAgMzMsIDQsIDIyNSwgMTc1LCAzMywgNCwgMjI1LCA4LCAzMywgNCwgMjI1LCAyMCwgMzMsIDQsIDIyNCwgODIsIDMzLCA0LCAKKyAgICAyMjMsIDE4MCwgMzMsIDQsIDIxMCwgODAsIDMzLCA0LCAyMTAsIDc0LCAzMywgNCwgMjEwLCA3NiwgMzMsIDQsIDIxMCwgNzksIAorICAgIDMzLCA0LCAyMTAsIDc3LCAzMywgNCwgMjEwLCA3OCwgMzMsIDQsIDIxMCwgNzUsIDMzLCA0LCAyMTAsIDczLCAzMywgNCwgCisgICAgMjE2LCAyMjAsIDMzLCA0LCAyMTUsIDE0NSwgMzMsIDQsIDIxNiwgNTcsIDMzLCA0LCAyMTYsIDIxNiwgMzMsIDQsIDIxNiwgCisgICAgMTM1LCAzMywgNCwgMjE2LCAxNTgsIDMzLCA0LCAyMTUsIDIyNywgMzMsIDQsIDIxNSwgMTExLCAzMywgNCwgMjE1LCAzNiwgCisgICAgMzMsIDQsIDIxMSwgMTAsIDMzLCA0LCAyMTIsIDE2MiwgMzMsIDQsIDIxNSwgMzMsIDMzLCA0LCAyMTQsIDE2NSwgMzMsIDQsIAorICAgIDIxNCwgMTc3LCAzMywgNCwgMjEyLCAxMywgMzMsIDQsIDIxMCwgMTcyLCAzMywgNCwgMjEzLCA5MCwgMzMsIDQsIDIxMiwgCisgICAgMTk5LCAzMywgNCwgMjEzLCAxMSwgMzMsIDQsIDIxMywgODUsIDMzLCA0LCAyMTMsIDQxLCAzMywgNCwgMjEzLCA0MywgMzMsIAorICAgIDQsIDIxMiwgMjQyLCAzMywgNCwgMjEyLCAxODAsIDMzLCA0LCAyMTcsIDEyNiwgMzMsIDQsIDIxNywgNjUsIDMzLCA0LCAKKyAgICAyMTcsIDg4LCAzMywgNCwgMjE3LCAxMjUsIDMzLCA0LCAyMTcsIDEwNSwgMzMsIDQsIDIxNywgMTA2LCAzMywgNCwgMjE3LCAKKyAgICA3NywgMzMsIDQsIDIxNywgNzYsIDMzLCA0LCAyMTcsIDE5LCAzMywgNCwgMjE3LCAxNSwgMzMsIDQsIDIxNywgMTgsIDMzLCAKKyAgICA0LCAyMTcsIDE2LCAzMywgNCwgMjE3LCAxNywgMzMsIDQsIDIxNywgMTAyLCAzMywgNCwgMjE3LCA5NCwgMzMsIDQsIDIxNywgCisgICAgOTcsIDMzLCA0LCAyMTcsIDEwMSwgMzMsIDQsIDIxNywgOTgsIDMzLCA0LCAyMTcsIDk5LCAzMywgNCwgMjE3LCA5NiwgMzMsIAorICAgIDQsIDIxNywgOTMsIDMzLCA0LCAyMTcsIDg5LCAzMywgNCwgMjE3LCA5MiwgMzMsIDQsIDIxNywgOTAsIDMzLCA0LCAyMTcsIAorICAgIDkxLCAzMywgNCwgMjQ5LCAzMiwgMzMsIDQsIDI0NywgMTkzLCAzMywgNCwgMjQ4LCA4NiwgMzMsIDQsIDI0OSwgMzAsIDMzLCAKKyAgICA0LCAyNDgsIDE1MCwgMzMsIDQsIDI0OCwgMTYyLCAzMywgNCwgMjQ4LCAyMywgMzMsIDQsIDI0NywgMTQyLCAzMywgNCwgCisgICAgMjA2LCA4NiwgMzMsIDQsIDIwNCwgMTYzLCAzMywgNCwgMjA1LCAyMzAsIDMzLCA0LCAyMDYsIDg1LCAzMywgNCwgMjA2LCAKKyAgICA1MCwgMzMsIDQsIDIwNiwgNTUsIDMzLCA0LCAyMDUsIDE4OSwgMzMsIDQsIDIwNCwgMTU0LCAzMywgNCwgMjEwLCAyMiwgMzMsIAorICAgIDQsIDIwNywgMjAzLCAzMywgNCwgMjA5LCAyLCAzMywgNCwgMjEwLCAxOCwgMzMsIDQsIDIwOSwgMTc2LCAzMywgNCwgMjA5LCAKKyAgICAxODcsIDMzLCA0LCAxMzUsIDMzLCA0LCAyMDcsIDE2MCwgMzMsIDQsIDI0NywgOTIsIDMzLCA0LCAyNDUsIDExMCwgMzMsIDQsIAorICAgIDI0NiwgNzksIDMzLCA0LCAyNDcsIDkxLCAzMywgNCwgMjQ2LCAyMzAsIDMzLCA0LCAyNDYsIDIzOCwgMzMsIDQsIDI0NSwgCisgICAgMjU0LCAzMywgNCwgMjQ1LCA3NCwgMzMsIDQsIDIwMywgMTgyLCAzMywgNCwgMjAzLCAxNTIsIDMzLCA0LCAyMDMsIDE3MCwgCisgICAgMzMsIDQsIDIwMywgMTgxLCAzMywgNCwgMjAzLCAxNzUsIDMzLCA0LCAyMDMsIDE3NiwgMzMsIDQsIDIwMywgMTYwLCAzMywgCisgICAgNCwgMjAzLCAxNTksIDMzLCA0LCAyMDMsIDE0NiwgMzMsIDQsIDIwMywgMTQyLCAzMywgNCwgMjAzLCAxNDUsIDMzLCA0LCAKKyAgICAyMDMsIDE0MywgMzMsIDQsIDIwMywgMTQ0LCAzMywgNCwgMjAxLCAyMDEsIDMzLCA0LCAyMjEsIDg0LCAzMywgNCwgMjIyLCAKKyAgICAxMDAsIDMzLCA0LCAyMjMsIDEwNiwgMzMsIDQsIDIyMiwgMjM1LCAzMywgNCwgMjIyLCAyNDAsIDMzLCA0LCAyMjEsIDE5MSwgCisgICAgMzMsIDQsIDIyMSwgMjAsIDMzLCA0LCAyMjEsIDExLCAzMywgNCwgMjIwLCAyMjYsIDMzLCA0LCAyMjAsIDI0OCwgMzMsIDQsIAorICAgIDIyMSwgMTAsIDMzLCA0LCAyMjEsIDAsIDMzLCA0LCAyMjEsIDEsIDMzLCA0LCAyMjAsIDIzMywgMzMsIDQsIDIyMCwgMjE2LCAKKyAgICAzMywgNCwgMjM4LCA0NSwgNjMsIDMzLCA0LCAyMzgsIDQ1LCA2OCwgMzMsIDQsIDIzOCwgNDUsIDc1LCAzMywgNCwgMjM4LCAKKyAgICA0NSwgMjUyLCAyNSwgMzMsIDQsIDIzOCwgNDUsIDI0MSwgMTYxLCAzMywgNCwgMjM4LCA0NSwgNzQsIDMzLCA0LCAyMzgsIAorICAgIDQ1LCA3OCwgMzMsIDQsIDIzOCwgNDUsIDIwNCwgMTExLCAzMywgNCwgMTczLCAzMywgNCwgMjI4LCAyMDksIDMzLCA0LCAKKyAgICAyMjksIDEwMCwgMzMsIDQsIDIzMCwgNDEsIDMzLCA0LCAyMjksIDE5OCwgMzMsIDQsIDIyOSwgMjAxLCAzMywgNCwgMjI5LCAKKyAgICAyNiwgMzMsIDQsIDIyOSwgMjUsIDMzLCA0LCAyMjgsIDE2NywgMzMsIDQsIDIyOCwgMTYwLCAzMywgNCwgMjI4LCAxNjYsIAorICAgIDMzLCA0LCAyMjgsIDE2MSwgMzMsIDQsIDIyOCwgMTYyLCAzMywgNCwgMjI4LCAxNTMsIDMzLCA0LCAyMjgsIDE0NywgMzMsIAorICAgIDQsIDIyOCwgMTQ5LCAzMywgNCwgMjI4LCAxNTIsIDMzLCA0LCAyMjgsIDE1MCwgMzMsIDQsIDIyOCwgMTUxLCAzMywgNCwgCisgICAgMjI4LCAxNDgsIDMzLCA0LCAyMjgsIDE0NiwgMzMsIDQsIDIyOCwgMTQyLCAzMywgNCwgMjI4LCAxNDUsIDMzLCA0LCAyMjgsIAorICAgIDE0MywgMzMsIDQsIDIyOCwgMTQ0LCAzMywgNCwgMjA0LCAxMTEsIDMzLCA0LCAyMDMsIDIxNywgMzMsIDQsIDIwNCwgMzAsIAorICAgIDMzLCA0LCAyMDQsIDExMCwgMzMsIDQsIDIwNCwgNTUsIDMzLCA0LCAyMDQsIDYyLCAzMywgNCwgMjA0LCAwLCAzMywgNCwgCisgICAgMjAzLCAyNTUsIDMzLCA0LCAyMTgsIDE5OSwgNjMsIDMzLCA0LCAyMTgsIDE5OSwgNjgsIDMzLCA0LCAyMTgsIDE5OSwgNzUsIAorICAgIDMzLCA0LCAyMTgsIDE5OSwgMjUyLCAyNSwgMzMsIDQsIDIxOCwgMTk5LCAyNDEsIDE2MSwgMzMsIDQsIDIxOCwgMTk5LCA3NCwgCisgICAgMzMsIDQsIDIxOCwgMTk5LCA3OCwgMzMsIDQsIDIwMiwgMTE2LCAzMywgNCwgMjAyLCA2LCAzMywgNCwgMjAyLCAzOSwgMzMsIAorICAgIDQsIDIwMiwgMTE0LCAzMywgNCwgMjAyLCA5MCwgMzMsIDQsIDIwMiwgOTIsIDMzLCA0LCAyMDIsIDE3LCAzMywgNCwgMjAxLCAKKyAgICAyNDksIDMzLCA0LCAyMDIsIDgwLCAzMywgNCwgMjAyLCA1NywgMzMsIDQsIDIwMiwgNjYsIDMzLCA0LCAyMDIsIDc5LCAzMywgCisgICAgNCwgMjAyLCA3MCwgMzMsIDQsIDIwMiwgNzEsIDMzLCA0LCAyMDIsIDYzLCAzMywgNCwgMjAyLCA0OCwgMzMsIDQsIDE5OCwgCisgICAgMzMsIDQsIDIwMiwgMjEzLCAzMywgNCwgMjAzLCAxMSwgMzMsIDQsIDIwMywgMTEwLCAzMywgNCwgMjAzLCA0OSwgMzMsIDQsIAorICAgIDIwMywgNTIsIDMzLCA0LCAyMDIsIDI0NywgMzMsIDQsIDIwMiwgMjM4LCAzMywgNCwgMjQ0LCAyMTIsIDMzLCA0LCAyNDIsIAorICAgIDQyLCAzMywgNCwgMjQzLCAyMzMsIDMzLCA0LCAyNDQsIDIxMSwgMzMsIDQsIDI0NCwgNjEsIDMzLCA0LCAyNDQsIDc1LCAzMywgCisgICAgNCwgMjQzLCAxMTMsIDMzLCA0LCAyNDIsIDEwLCAzMywgNCwgMjQ0LCAxMjAsIDMzLCA0LCAyNDQsIDg1LCAzMywgNCwgMjQ0LCAKKyAgICA5NywgMzMsIDQsIDI0NCwgMTE5LCAzMywgNCwgMjQ0LCAxMDcsIDMzLCA0LCAyNDQsIDEwOCwgMzMsIDQsIDI0NCwgOTAsIAorICAgIDMzLCA0LCAyNDQsIDc2LCAzMywgNCwgMjMwLCAxODEsIDMzLCA0LCAyMzAsIDgyLCAzMywgNCwgMjMwLCAxNDEsIDMzLCA0LCAKKyAgICAyMzAsIDE4MCwgMzMsIDQsIDIzMCwgMTU5LCAzMywgNCwgMjMwLCAxNjEsIDMzLCA0LCAyMzAsIDEwMSwgMzMsIDQsIDIzMCwgCisgICAgNjIsIDMzLCA0LCAyMzksIDgsIDMzLCA0LCAyMzcsIDIzMCwgMzMsIDQsIDIzOCwgODEsIDMzLCA0LCAyMzksIDUsIDMzLCA0LCAKKyAgICAyMzgsIDE4MiwgMzMsIDQsIDIzOCwgMTkwLCAzMywgNCwgMjM4LCAzOSwgMzMsIDQsIDIzOCwgMzgsIDMzLCA0LCAyMzcsIAorICAgIDE5MCwgMzMsIDQsIDIzNywgMTg2LCAzMywgNCwgMjM3LCAxODksIDMzLCA0LCAyMzcsIDE4NywgMzMsIDQsIDIzNywgMTg4LCAKKyAgICAzMywgNCwgMjM4LCAxNTUsIDMzLCA0LCAyMzgsIDEzNSwgMzMsIDQsIDIzOCwgMTQ1LCAzMywgNCwgMjM4LCAxNTQsIDMzLCAKKyAgICA0LCAyMzgsIDE0OSwgMzMsIDQsIDIzOCwgMTUwLCAzMywgNCwgMjM4LCAxMzksIDMzLCA0LCAyMzgsIDEyNCwgMzMsIDQsIAorICAgIDIwOSwgMTA4LCAzMywgNCwgMjA5LCAyMiwgMzMsIDQsIDIwOSwgNzAsIDMzLCA0LCAyMDksIDEwNywgMzMsIDQsIDIwOSwgCisgICAgOTAsIDMzLCA0LCAyMDksIDkyLCAzMywgNCwgMjA5LCA0NywgMzMsIDQsIDIwOSwgMTMsIDMzLCA0LCAyNDYsIDE5OSwgMzMsIAorICAgIDQsIDI0NiwgOTgsIDMzLCA0LCAyNDYsIDE0MiwgMzMsIDQsIDI0NiwgMTk4LCAzMywgNCwgMjQ2LCAxNjYsIDMzLCA0LCAKKyAgICAyNDYsIDE3MCwgMzMsIDQsIDI0NiwgMTE2LCAzMywgNCwgMjQ2LCA4NywgMzMsIDQsIDIxOCwgMjA4LCAzMywgNCwgMjE4LCAKKyAgICAxNzMsIDMzLCA0LCAyMTgsIDE5MiwgMzMsIDQsIDIxOCwgMjA3LCAzMywgNCwgMjE4LCAxOTQsIDMzLCA0LCAyMTgsIDE5NSwgCisgICAgMzMsIDQsIDIxOCwgMTgwLCAzMywgNCwgMjE4LCAxNjksIDMzLCA0LCAyMDgsIDIwLCAzMywgNCwgMjA3LCAyNDksIDMzLCA0LCAKKyAgICAyMDcsIDI1NSwgMzMsIDQsIDIwOCwgMTksIDMzLCA0LCAyMDgsIDEzLCAzMywgNCwgMjA4LCAxNCwgMzMsIDQsIDIwNywgCisgICAgMjUzLCAzMywgNCwgMjA3LCAyNDcsIDMzLCA0LCAyMDcsIDEwNiwgMzMsIDQsIDIwNywgOTgsIDMzLCA0LCAyMDcsIDEwMiwgCisgICAgMzMsIDQsIDIwNywgMTA1LCAzMywgNCwgMjA3LCAxMDMsIDMzLCA0LCAyMDcsIDEwNCwgMzMsIDQsIDIwNywgMTAwLCAzMywgCisgICAgNCwgMjA3LCA5OSwgMzMsIDQsIDI0MCwgMTA4LCAzMywgNCwgMjM5LCAxMDgsIDMzLCA0LCAyNDAsIDI2LCAzMywgNCwgMjQwLCAKKyAgICAxMDcsIDMzLCA0LCAyNDAsIDUzLCAzMywgNCwgMjQwLCA2MCwgMzMsIDQsIDIzOSwgMTg2LCAzMywgNCwgMjM5LCA4NiwgMzMsIAorICAgIDQsIDE4NSwgMzMsIDQsIDIxNywgMTkxLCAzMywgNCwgMjE4LCAxNjcsIDMzLCA0LCAyMTksIDE2OCwgMzMsIDQsIDIxOSwgCisgICAgMjMsIDMzLCA0LCAyMTksIDM0LCAzMywgNCwgMjE4LCA2OSwgMzMsIDQsIDIxNywgMTUyLCAzMywgNCwgMjE1LCAxMDEsIDMzLCAKKyAgICA0LCAyMjMsIDE2OSwgMzMsIDQsIDIzOSwgODAsIDMzLCAzOSwgMjM4LCAxNzksIDI1LCAyMiwgMjI3LCAxOTYsIDgyLCAzMywgCisgICAgMzksIDIyLCAyMjcsIDE5NiwgODIsIDMzLCAzOSwgMjM4LCAxNzksIDgyLCAzMywgMjE0LCAxNjgsIDgyLCAzMywgMjAzLCAKKyAgICAyMzcsIDMzLCAyMzksIDEwMiwgMjExLCA2MSwgMzMsIDI0NSwgMjMzLCAzMywgMjEzLCAxNDMsIDMzLCAyNDUsIDI0MiwgMzMsIAorICAgIDIxNywgMjQ2LCAyNDUsIDI0MiwgMzMsIDIxNywgNDcsIDgyLCAzMywgMjE5LCA4OSwgMjEzLCAxMzAsIDMzLCAxNywgMTA1LCAKKyAgICAzMywgMTcsIDEwOCwgMzMsIDE3LCAxNDcsIDMzLCAxNywgMTQ5LCAzMywgMTcsIDE3MCwgMzMsIDE3LCAxOTUsIDMzLCAxNywgCisgICAgMjEzLCAxMTEsIDMzLCAxNywgMTk5LCAzMywgMTcsIDIyMiwgNjMsIDMzLCA0MiwgMjA5LCAxNTIsIDMzLCA0MiwgMjA3LCAKKyAgICAxNTEsIDMzLCA0MiwgMjA5LCA1MywgMzMsIDQyLCAyMzksIDE1MywgMzMsIDQyLCAyNDAsIDE4LCAzMywgNDIsIDIxMiwgNzQsIAorICAgIDMzLCA0MiwgMjEzLCAxMDUsIDMzLCA0MiwgMjQxLCAxMzQsIDMzLCA0MiwgMjIyLCA1OCwgMzMsIDQyLCAyMzYsIDExLCAzMywgCisgICAgNDIsIDIwOSwgMTUzLCAyMDksIDM2LCAzMywgNCwgMjE0LCAxNzMsIDIyMywgMTgwLCAzMywgNCwgMjIzLCAxNzYsIDMzLCA0LCAKKyAgICAyMjMsIDE3NywgMzMsIDQsIDIyMywgMTc4LCAzMywgNCwgMjE0LCAxNzMsIDI0NywgMTQyLCAzMywgNCwgMjQ3LCAxMzksIAorICAgIDMzLCA0LCAyNDcsIDE0MCwgMzMsIDQsIDI0NywgMTQxLCAzMywgNCwgMjE0LCAxNzMsIDIzOSwgODYsIDMzLCA0LCAyMzksIAorICAgIDgyLCAzMywgNCwgMjM5LCA4MywgMzMsIDQsIDIzOSwgODQsIDMzLCA0LCAyMTQsIDE3MywgMjE3LCAxNTIsIDMzLCA0LCAKKyAgICAyMTcsIDE0OCwgMzMsIDQsIDIxNywgMTQ5LCAzMywgNCwgMjE3LCAxNTAsIDMzLCAyMDgsIDE2MiwgMTMxLCAyMDIsIDI1MCwgCisgICAgMzMsIDIwOCwgMTYyLCAxMzEsIDI0NCwgMjIsIDMzLCAyMDgsIDE2MiwgMTMxLCAyMTYsIDIsIDMzLCAyMDgsIDE2MiwgMTMxLCAKKyAgICAyMTIsIDIyOCwgMjE2LCAyLCAzMywgMjA4LCAxNjIsIDEzMSwgMjQzLCAyMDcsIDMzLCAyMDgsIDE2MiwgMTMxLCAyMjksIAorICAgIDE3OSwgMzMsIDIwOCwgMTYyLCAxMzEsIDI0NiwgMTI0LCAzMywgMjA4LCAxNjIsIDEzMSwgMjM3LCAwLCAzMywgMjA4LCAKKyAgICAxNjIsIDEzMSwgMjQ0LCAyMSwgMzMsIDIwOCwgMTYyLCAxMzEsIDIyOCwgMTgxLCA5MCwgMSwgNjMsIDkwLCAxLCA3NCwgOTAsIAorICAgIDEsIDc1LCA5MCwgMSwgNzgsIDkwLCAxLCA2OCwgOTAsIDEsIDIwNiwgMTY0LCA5MCwgMSwgMjM5LCA4LCA5MCwgMSwgMTczLCAKKyAgICA5MCwgMSwgMjM4LCAxOTAsIDkwLCAxLCAyMzgsIDgxLCA5MCwgMSwgMjM4LCAzOSwgOTAsIDEsIDIzNywgMjMwLCA5MCwgMSwgCisgICAgMjM3LCAxOTIsIDkwLCAxLCAxNTIsIDkwLCAxLCAyMzcsIDY3LCA5MCwgMSwgMjM3LCAzLCA5MCwgMSwgMjM2LCAxMzYsIDkwLCAKKyAgICAxLCAyMzYsIDI2LCA5MCwgMSwgMjM1LCAyNTUsIDkwLCAxLCAyMjgsIDExMywgOTAsIDEsIDIyNywgMjM0LCA5MCwgMSwgCisgICAgMjI3LCAxNDgsIDkwLCAxLCAyMjcsIDQ5LCA5MCwgMSwgMjI2LCAyMzksIDkwLCAxLCAyMjYsIDIwOCwgOTAsIDEsIDE5MiwgCisgICAgOTAsIDEsIDIyNSwgMjAsIDkwLCAxLCAyMjQsIDE1NSwgOTAsIDEsIDIyNCwgODIsIDkwLCAxLCAyMjMsIDI0NiwgOTAsIDEsIAorICAgIDIwMSwgMjAxLCA5MCwgMSwgMjM2LCAxNjAsIDkwLCAxLCAyMjMsIDkzLCA5MCwgMSwgMjIyLCAyNDAsIDkwLCAxLCAyMjIsIAorICAgIDEwMCwgOTAsIDEsIDIyMSwgMTkxLCA5MCwgMSwgMjIxLCA4NCwgOTAsIDEsIDIyMSwgMjIsIDkwLCAxLCAyMTcsIDY0LCA5MCwgCisgICAgMSwgMjE3LCA1MCwgOTAsIDEsIDIxNywgNDMsIDkwLCAxLCAyMTcsIDM0LCA5MCwgMSwgMjE3LCAyMywgOTAsIDEsIDIxNywgCisgICAgMjEsIDkwLCAxLCAyMTUsIDM2LCA5MCwgMSwgMTk0LCA5MCwgMSwgMjE0LCAxNzcsIDkwLCAxLCAyMTIsIDE2MiwgOTAsIDEsIAorICAgIDIxMiwgMTMsIDkwLCAxLCAyMTEsIDEwLCA5MCwgMSwgMjEwLCAxNzcsIDkwLCAxLCAyNDQsIDIxMiwgOTAsIDEsIDIxMCwgCisgICAgMjIsIDkwLCAxLCAyNDQsIDc1LCA5MCwgMSwgMjA5LCAxODcsIDkwLCAxLCAyNDMsIDIzMywgOTAsIDEsIDIwOSwgMiwgOTAsIAorICAgIDEsIDI0MywgMTEzLCA5MCwgMSwgMjQyLCA0MiwgOTAsIDEsIDI0MiwgMTMsIDkwLCAxLCAyNDMsIDEyNCwgOTAsIDEsIDIwOCwgCisgICAgMTkwLCA5MCwgMSwgMjA4LCAxODksIDkwLCAxLCAyMDgsIDE3OCwgOTAsIDEsIDIwOCwgMTc3LCA5MCwgMSwgMjA4LCAxNzYsIAorICAgIDkwLCAxLCAyMDgsIDE3NSwgOTAsIDEsIDIwOCwgMjAsIDkwLCAxLCAyMDgsIDE0LCA5MCwgMSwgMjA3LCAyNTUsIDkwLCAxLCAKKyAgICAyMDcsIDI1MywgOTAsIDEsIDIwNywgMjQ5LCA5MCwgMSwgMjA3LCAyNDgsIDkwLCAxLCAyMDQsIDExMSwgOTAsIDEsIDIwNCwgCisgICAgNjIsIDkwLCAxLCAyMDQsIDMwLCA5MCwgMSwgMjA0LCAwLCA5MCwgMSwgMjAzLCAyMTcsIDkwLCAxLCAyMDMsIDIwNCwgOTAsIAorICAgIDEsIDE5OCwgOTAsIDEsIDIwMywgNTIsIDkwLCAxLCAyMDMsIDExLCA5MCwgMSwgMjAyLCAyNDcsIDkwLCAxLCAyMDIsIDIxMywgCisgICAgOTAsIDEsIDIwMiwgMTc3LCA5MCwgMSwgMjIzLCAxODcsIDkwLCA1LCAxLCAyMDMsIDUyLCA5MCwgNSwgMSwgMjAzLCAxMSwgCisgICAgOTAsIDUsIDEsIDIwMiwgMjQ3LCA5MCwgNSwgMSwgMjAyLCAyMTMsIDkwLCA1LCAxLCAyMDIsIDE3NywgOTAsIDUsIDEsIAorICAgIDIyMywgMTg3LCAxOSwgMjAsIDIzNSwgMjIwLCAxOSwgMjAsIDc0LCAxOSwgMjAsIDI1MSwgMjQ1LCAxOSwgMjAsIDc1LCAxOSwgCisgICAgMjAsIDIzMSwgODMsIDE5LCAyMCwgNzgsIDE5LCAyMCwgMjIwLCAxOCwgMTksIDIwLCAyMDMsIDEyMywgMjIwLCAxOCwgMTksIAorICAgIDIwLCA4OCwgMjQxLCAxNjEsIDE5LCAyMCwgODgsIDc1LCAxOSwgMjAsIDYzLCAxOSwgMjAsIDI1MiwgMjUsIDE5LCAyMCwgCisgICAgMjA0LCA2MiwgMTksIDIwLCAxOTYsIDIwNCwgNjIsIDE5LCAyMCwgMjA0LCAzMCwgMTksIDIwLCAxOTYsIDIwNCwgMzAsIDE5LCAKKyAgICAyMCwgMjA0LCAxOSwgMTksIDIwLCAxOTYsIDIwNCwgMTksIDE5LCAyMCwgMjA0LCAwLCAxOSwgMjAsIDE5NiwgMjA0LCAwLCAKKyAgICAxOSwgMjAsIDIwMywgMjQ0LCAxOSwgMjAsIDE5NiwgMjAzLCAyNDQsIDE5LCAyMCwgMjIzLCA2OCwgMjAzLCAyNDQsIDE5LCAKKyAgICAyMCwgMjA0LCAxMTEsIDE5LCAyMCwgMTk2LCAyMDQsIDExMSwgMTksIDIwLCAyMDQsIDExMCwgMTksIDIwLCAxOTYsIDIwNCwgCisgICAgMTEwLCAxOSwgMjAsIDIyMywgNjgsIDIwNCwgMTEwLCAxOSwgMjAsIDI1MSwgNjQsIDE5LCAyMCwgMjAzLCAxMjMsIDIwNCwgCisgICAgMTQ0LCAxOSwgMjAsIDIzOCwgNDUsIDIxMSwgNjEsIDE5LCAyMCwgNDYsIDE2NSwgMTksIDIwLCA0NiwgMjM3LCAyNTMsIDE5LCAKKyAgICAyMCwgNDYsIDI0NywgMjQ4LCAxNjIsIDIxNSwgMjUyLCAxOSwgMjAsIDQ2LCAyMDgsIDE0NSwgMTYyLCAyMTUsIDI1MiwgMTksIAorICAgIDIwLCA0NiwgNTAsIDE2MiwgMjE1LCAyNTIsIDE5LCAyMCwgNDYsIDIxNSwgMjUyLCAxOSwgMjAsIDQ2LCA1MiwgMTY1LCAxOSwgCisgICAgMjAsIDQ2LCA1MiwgMjEyLCAyMjgsIDgwLCAyMTEsIDE5LCAxOSwgMjAsIDQ2LCAxMDEsIDI0MywgODUsIDE5LCAyMCwgNDYsIAorICAgIDIxMiwgMjI4LCAyMzYsIDEwNiwgOTUsIDE5LCAyMCwgNDYsIDIxOCwgNzYsIDE5LCAyMCwgNDYsIDEyMSwgMjEwLCAzLCAxOSwgCisgICAgMjAsIDI0MSwgOTIsIDE5LCAyMCwgMjMxLCA0OSwgMTksIDIwLCAyMjAsIDMxLCAxOSwgMjAsIDI1MCwgMjMxLCAxOSwgMjAsIAorICAgIDIxOSwgMzQsIDE5LCAyMCwgMjE5LCAxNjYsIDE5LCAyMCwgMjE4LCAxNjcsIDE5LCAyMCwgMjE4LCAxMjksIDE5LCAyMCwgCisgICAgMjE4LCA2OSwgMTksIDIwLCAyMTgsIDQ1LCAxOSwgMjAsIDIwMywgMTIzLCAyMTgsIDQ1LCAxOSwgMjAsIDg4LCAyMzcsIDQ4LCAKKyAgICAxOSwgMjAsIDg4LCAyMzcsIDMsIDE5LCAyMCwgMTg1LCAxOSwgMjAsIDIxOSwgMTY4LCAxOSwgMjAsIDIxNywgMTUwLCAxOSwgCisgICAgMjAsIDE5NiwgMjE3LCAxNTAsIDE5LCAyMCwgMjE3LCAxNDgsIDE5LCAyMCwgMTk2LCAyMTcsIDE0OCwgMTksIDIwLCAyMTcsIAorICAgIDE0NywgMTksIDIwLCAxOTYsIDIxNywgMTQ3LCAxOSwgMjAsIDIxNywgMTQ1LCAxOSwgMjAsIDE5NiwgMjE3LCAxNDUsIDE5LCAKKyAgICAyMCwgMjE3LCAxNDQsIDE5LCAyMCwgMTk2LCAyMTcsIDE0NCwgMTksIDIwLCAyMTcsIDE1MiwgMTksIDIwLCAxOTYsIDIxNywgCisgICAgMTUyLCAxOSwgMjAsIDIxNywgMTUxLCAxOSwgMjAsIDE5NiwgMjE3LCAxNTEsIDE5LCAyMCwgMjAzLCAxMjMsIDIxNywgMTUxLCAKKyAgICAxOSwgMjAsIDIxOSwgMTg0LCAxOSwgMjAsIDE5NiwgMjE5LCAxODQsIDE5LCAyMCwgODgsIDIzNywgMTcxLCAxOSwgMjAsIAorICAgIDIwOSwgMTg3LCAxOSwgMjAsIDIxMCwgMTYsIDE5LCAyMCwgMjA5LCAyLCAxOSwgMjAsIDIwOCwgMjQyLCAxOSwgMjAsIDEzNSwgCisgICAgMTksIDIwLCAyMDgsIDE0OCwgMTksIDIwLCAyMDMsIDEyMywgMjA4LCAxNDgsIDE5LCAyMCwgODgsIDI0NCwgNjEsIDE5LCAKKyAgICAyMCwgODgsIDI0MywgMjMzLCAxOSwgMjAsIDIxMCwgMjIsIDE5LCAyMCwgMjEwLCAxOCwgMTksIDIwLCAyMDcsIDE1OCwgMTksIAorICAgIDIwLCAxOTYsIDIwNywgMTU4LCAxOSwgMjAsIDIwNywgMTQwLCAxOSwgMjAsIDE5NiwgMjA3LCAxNDAsIDE5LCAyMCwgMjA3LCAKKyAgICAxMzksIDE5LCAyMCwgMTk2LCAyMDcsIDEzOSwgMTksIDIwLCAxMDgsIDE5LCAyMCwgMTk2LCAxMDgsIDE5LCAyMCwgMjA3LCAKKyAgICAxMzAsIDE5LCAyMCwgMTk2LCAyMDcsIDEzMCwgMTksIDIwLCAyMDcsIDE2MCwgMTksIDIwLCAxOTYsIDIwNywgMTYwLCAxOSwgCisgICAgMjAsIDIwNywgMTU5LCAxOSwgMjAsIDE5NiwgMjA3LCAxNTksIDE5LCAyMCwgMjIzLCA2OCwgMjA3LCAxNTksIDE5LCAyMCwgCisgICAgMjEwLCA2OSwgMTksIDIwLCAyMDcsIDIzNiwgMTksIDIwLCAyMDcsIDIyMCwgMTksIDIwLCAyMDcsIDIxOCwgMTksIDIwLCAKKyAgICAyMDcsIDI0MSwgMTksIDIwLCAyMjksIDIwMSwgMTksIDIwLCAyMzAsIDM2LCAxOSwgMjAsIDIyOSwgMTAwLCAxOSwgMjAsIAorICAgIDIyOSwgODcsIDE5LCAyMCwgMjI5LCAyNiwgMTksIDIwLCAyMjksIDYsIDE5LCAyMCwgMjAzLCAxMjMsIDIyOSwgNiwgMTksIAorICAgIDIwLCAxNzMsIDE5LCAyMCwgMjMwLCA0MSwgMTksIDIwLCAyMjgsIDE2MiwgMTksIDIwLCAxOTYsIDIyOCwgMTYyLCAxOSwgCisgICAgMjAsIDIyOCwgMTYwLCAxOSwgMjAsIDE5NiwgMjI4LCAxNjAsIDE5LCAyMCwgMjI4LCAxNTksIDE5LCAyMCwgMTk2LCAyMjgsIAorICAgIDE1OSwgMTksIDIwLCAyMjgsIDE1NywgMTksIDIwLCAxOTYsIDIyOCwgMTU3LCAxOSwgMjAsIDIyOCwgMTU2LCAxOSwgMjAsIAorICAgIDE5NiwgMjI4LCAxNTYsIDE5LCAyMCwgMjI4LCAxNjcsIDE5LCAyMCwgMTk2LCAyMjgsIDE2NywgMTksIDIwLCAyMjgsIDE2NiwgCisgICAgMTksIDIwLCAxOTYsIDIyOCwgMTY2LCAxOSwgMjAsIDIyMywgNjgsIDIyOCwgMTY2LCAxOSwgMjAsIDIzMCwgNTQsIDE5LCAKKyAgICAyMCwgMjI4LCAxNjgsIDE5LCAyMCwgMjExLCAyMzcsIDIyOSwgMTkxLCAxOSwgMjAsIDIxMSwgMjM3LCAyMjksIDg4LCAxOSwgCisgICAgMjAsIDIxMSwgMjM3LCAyMjksIDIwLCAxOSwgMjAsIDIxMSwgMjM3LCAyMzAsIDIwLCAxOSwgMjAsIDI0NiwgMjM4LCAxOSwgCisgICAgMjAsIDI0NywgOTAsIDE5LCAyMCwgMjQ2LCA3OSwgMTksIDIwLCAyNDYsIDY5LCAxOSwgMjAsIDI0NSwgMjU0LCAxOSwgMjAsIAorICAgIDI0NSwgMTgwLCAxOSwgMjAsIDIwMywgMTIzLCAyNDUsIDE4MCwgMTksIDIwLCAyNDcsIDkyLCAxOSwgMjAsIDI0NywgOTEsIAorICAgIDE5LCAyMCwgMjQ1LCA3MiwgMTksIDIwLCAxOTYsIDI0NSwgNzIsIDE5LCAyMCwgMjQ1LCA3MCwgMTksIDIwLCAxOTYsIDI0NSwgCisgICAgNzAsIDE5LCAyMCwgMjQ1LCA2OSwgMTksIDIwLCAxOTYsIDI0NSwgNjksIDE5LCAyMCwgMjQ1LCA2OCwgMTksIDIwLCAxOTYsIAorICAgIDI0NSwgNjgsIDE5LCAyMCwgMjQ1LCA2NywgMTksIDIwLCAxOTYsIDI0NSwgNjcsIDE5LCAyMCwgMjQ1LCA3NCwgMTksIDIwLCAKKyAgICAxOTYsIDI0NSwgNzQsIDE5LCAyMCwgMjQ1LCA3MywgMTksIDIwLCAxOTYsIDI0NSwgNzMsIDE5LCAyMCwgMjIzLCA2OCwgCisgICAgMjQ1LCA3MywgMTksIDIwLCAyNDcsIDEyNSwgMTksIDIwLCAyMTQsIDIwNiwgMjA5LCAxMTAsIDE5LCAyMCwgMjI1LCAyMCwgCisgICAgMTksIDIwLCAyMjUsIDE3NCwgMTksIDIwLCAyMjQsIDE1NSwgMTksIDIwLCAyMjQsIDEyNSwgMTksIDIwLCAyMjQsIDgyLCAKKyAgICAxOSwgMjAsIDIyNCwgMzUsIDE5LCAyMCwgMjAzLCAxMjMsIDIyNCwgMzUsIDE5LCAyMCwgMTkyLCAxOSwgMjAsIDIyNSwgCisgICAgMTc1LCAxOSwgMjAsIDIyMywgMTc4LCAxOSwgMjAsIDE5NiwgMjIzLCAxNzgsIDE5LCAyMCwgMjIzLCAxNzYsIDE5LCAyMCwgCisgICAgMTk2LCAyMjMsIDE3NiwgMTksIDIwLCAyMjMsIDE3NSwgMTksIDIwLCAxOTYsIDIyMywgMTc1LCAxOSwgMjAsIDIyMywgMTc0LCAKKyAgICAxOSwgMjAsIDE5NiwgMjIzLCAxNzQsIDE5LCAyMCwgMjIzLCAxNzMsIDE5LCAyMCwgMTk2LCAyMjMsIDE3MywgMTksIDIwLCAKKyAgICAyMjMsIDE4MCwgMTksIDIwLCAxOTYsIDIyMywgMTgwLCAxOSwgMjAsIDIyMywgMTc5LCAxOSwgMjAsIDE5NiwgMjIzLCAxNzksIAorICAgIDE5LCAyMCwgMjIzLCA2OCwgMjIzLCAxNzksIDE5LCAyMCwgMjI2LCAxODUsIDE5LCAyMCwgMTk2LCAyMjYsIDE4NSwgMTksIAorICAgIDIwLCAyMjQsIDE1OSwgMTksIDIwLCAyNTAsIDQ4LCAyMjYsIDE4NSwgMTksIDIwLCAyMTQsIDIwNiwgMjI2LCAxODUsIDE5LCAKKyAgICAyMCwgMjIyLCAyNDAsIDE5LCAyMCwgMjIzLCAxMDUsIDE5LCAyMCwgMjIyLCAxMDAsIDE5LCAyMCwgMjIyLCA3NSwgMTksIAorICAgIDIwLCAyMjEsIDE5MSwgMTksIDIwLCAyMjEsIDE4MCwgMTksIDIwLCAyMDMsIDEyMywgMjIxLCAxODAsIDE5LCAyMCwgMjAxLCAKKyAgICAyMDEsIDE5LCAyMCwgMjIzLCAxMDYsIDE5LCAyMCwgMjIxLCAxOCwgMTksIDIwLCAxOTYsIDIyMSwgMTgsIDE5LCAyMCwgCisgICAgMjIxLCAyMCwgMTksIDIwLCAxOTYsIDIyMSwgMjAsIDE5LCAyMCwgMjIxLCAxOSwgMTksIDIwLCAxOTYsIDIyMSwgMTksIDE5LCAKKyAgICAyMCwgMjIzLCA2OCwgMjIxLCAxOSwgMTksIDIwLCAyMjMsIDE2MywgMTksIDIwLCA4OCwgMjIyLCAyMDUsIDE5LCAyMCwgCisgICAgMjIyLCAxMDUsIDE5LCAyMCwgMjI3LCAyMzQsIDE5LCAyMCwgMjI4LCAxMTEsIDE5LCAyMCwgMjI3LCAxNDgsIDE5LCAyMCwgCisgICAgMjI3LCAxMzAsIDE5LCAyMCwgMjI3LCA0OSwgMTksIDIwLCAyMjcsIDE4LCAxOSwgMjAsIDIwMywgMTIzLCAyMjcsIDE4LCAKKyAgICAxOSwgMjAsIDIyOCwgMTEzLCAxOSwgMjAsIDIyOCwgMTEyLCAxOSwgMjAsIDIyNiwgMjA1LCAxOSwgMjAsIDE5NiwgMjI2LCAKKyAgICAyMDUsIDE5LCAyMCwgMjI2LCAyMDQsIDE5LCAyMCwgMTk2LCAyMjYsIDIwNCwgMTksIDIwLCAyMjYsIDIwMywgMTksIDIwLCAKKyAgICAxOTYsIDIyNiwgMjAzLCAxOSwgMjAsIDIyNiwgMjAyLCAxOSwgMjAsIDE5NiwgMjI2LCAyMDIsIDE5LCAyMCwgMjI2LCAyMDEsIAorICAgIDE5LCAyMCwgMTk2LCAyMjYsIDIwMSwgMTksIDIwLCAyMjYsIDIwNywgMTksIDIwLCAxOTYsIDIyNiwgMjA3LCAxOSwgMjAsIAorICAgIDIyNiwgMjA2LCAxOSwgMjAsIDE5NiwgMjI2LCAyMDYsIDE5LCAyMCwgMTU5LCAxOSwgMjAsIDE5NiwgMTU5LCAxOSwgMjAsIAorICAgIDE3NCwgMTU5LCAxOSwgMjAsIDIxNCwgMTc3LCAxOSwgMjAsIDIxNSwgMzEsIDE5LCAyMCwgMjEyLCAxNjIsIDE5LCAyMCwgCisgICAgMjEyLCAxNDIsIDE5LCAyMCwgMjEyLCAxMywgMTksIDIwLCAyMTEsIDI1MCwgMTksIDIwLCAyMDMsIDEyMywgMjExLCAyNTAsIAorICAgIDE5LCAyMCwgMjE1LCAzNiwgMTksIDIwLCAyMTUsIDMzLCAxOSwgMjAsIDIxMCwgMTY4LCAxOSwgMjAsIDE5NiwgMjEwLCAKKyAgICAxNjgsIDE5LCAyMCwgMjEwLCAxNjIsIDE5LCAyMCwgMTk2LCAyMTAsIDE2MiwgMTksIDIwLCAyMTAsIDE2MSwgMTksIDIwLCAKKyAgICAxOTYsIDIxMCwgMTYxLCAxOSwgMjAsIDIxMCwgMTU3LCAxOSwgMjAsIDE5NiwgMjEwLCAxNTcsIDE5LCAyMCwgMjEwLCAxNTYsIAorICAgIDE5LCAyMCwgMTk2LCAyMTAsIDE1NiwgMTksIDIwLCAyMTAsIDE3MiwgMTksIDIwLCAxOTYsIDIxMCwgMTcyLCAxOSwgMjAsIAorICAgIDIxMCwgMTcxLCAxOSwgMjAsIDE5NiwgMjEwLCAxNzEsIDE5LCAyMCwgMjIzLCA2OCwgMjEwLCAxNzEsIDE5LCAyMCwgMTk0LCAKKyAgICAxOSwgMjAsIDI1MCwgNDgsIDE5NCwgMTksIDIwLCAyMTAsIDE3MywgMTksIDIwLCAyNDgsIDQwLCAxOTQsIDE5LCAyMCwgCisgICAgMjI0LCAyOCwgMjEyLCA3MCwgMTksIDIwLCAyMjMsIDY4LCAyMTIsIDYxLCAxOSwgMjAsIDIyMywgNjgsIDIxNSwgOTIsIDE5LCAKKyAgICAyMCwgMjIzLCA2OCwgMjExLCAxNzksIDE5LCAyMCwgMjIzLCA2OCwgMjExLCAxMywgMTksIDIwLCAyMjMsIDY4LCAyMTIsIAorICAgIDYwLCAxOSwgMjAsIDIyMywgNjgsIDIxNCwgMTgwLCAxOSwgMjAsIDIxMywgNDMsIDE5LCAyMCwgMjEzLCAxMSwgMTksIDIwLCAKKyAgICAyMTMsIDYsIDE5LCAyMCwgMjEyLCAyNDIsIDE5LCAyMCwgMjEyLCAyMzYsIDE5LCAyMCwgMjEzLCA5MCwgMTksIDIwLCAyMTMsIAorICAgIDg1LCAxOSwgMjAsIDIxMiwgMTc3LCAxOSwgMjAsIDE5NiwgMjEyLCAxNzcsIDE5LCAyMCwgMjEyLCAxNzYsIDE5LCAyMCwgCisgICAgMTk2LCAyMTIsIDE3NiwgMTksIDIwLCAyMTIsIDE3NSwgMTksIDIwLCAxOTYsIDIxMiwgMTc1LCAxOSwgMjAsIDIxMiwgMTc0LCAKKyAgICAxOSwgMjAsIDE5NiwgMjEyLCAxNzQsIDE5LCAyMCwgMjEyLCAxNzMsIDE5LCAyMCwgMTk2LCAyMTIsIDE3MywgMTksIDIwLCAKKyAgICAyMTIsIDE4MCwgMTksIDIwLCAxOTYsIDIxMiwgMTgwLCAxOSwgMjAsIDIxMiwgMTc5LCAxOSwgMjAsIDE5NiwgMjEyLCAxNzksIAorICAgIDE5LCAyMCwgMjEzLCA5MiwgMTksIDIwLCAyMDMsIDUyLCAxOSwgMjAsIDIwMywgMTA4LCAxOSwgMjAsIDIwMywgMTEsIDE5LCAKKyAgICAyMCwgMjAzLCAyLCAxOSwgMjAsIDIwMiwgMjQ3LCAxOSwgMjAsIDIwMiwgMjMyLCAxOSwgMjAsIDIwMywgMTIzLCAyMDIsIAorICAgIDIzMiwgMTksIDIwLCAxOTgsIDE5LCAyMCwgMjAzLCAxMTAsIDE5LCAyMCwgMjAyLCAxNzQsIDE5LCAyMCwgMTk2LCAyMDIsIAorICAgIDE3NCwgMTksIDIwLCAyMDIsIDE3MywgMTksIDIwLCAxOTYsIDIwMiwgMTczLCAxOSwgMjAsIDIwMiwgMTcyLCAxOSwgMjAsIAorICAgIDE5NiwgMjAyLCAxNzIsIDE5LCAyMCwgMjAyLCAxNzEsIDE5LCAyMCwgMTk2LCAyMDIsIDE3MSwgMTksIDIwLCAyMDIsIDE3MCwgCisgICAgMTksIDIwLCAxOTYsIDIwMiwgMTcwLCAxOSwgMjAsIDIwMiwgMTc2LCAxOSwgMjAsIDE5NiwgMjAyLCAxNzYsIDE5LCAyMCwgCisgICAgMjAyLCAxNzUsIDE5LCAyMCwgMTk2LCAyMDIsIDE3NSwgMTksIDIwLCAyMjMsIDY4LCAyMDIsIDE3NSwgMTksIDIwLCAyMDMsIAorICAgIDEyNCwgMTksIDIwLCAyNDgsIDg0LCAyMDMsIDEyNCwgMTksIDIwLCAxOTYsIDIwMywgMTI0LCAxOSwgMjAsIDIxNCwgMjA2LCAKKyAgICAyMDMsIDExLCAxOSwgMjAsIDIxNiwgMTU4LCAxOSwgMjAsIDIxNywgMCwgMjE2LCAxNTgsIDE5LCAyMCwgMTk2LCAyMjcsIAorICAgIDIzNCwgMTksIDIwLCAyMTYsIDIxNSwgMTksIDIwLCAyMTYsIDU3LCAxOSwgMjAsIDIxNiwgMywgMTksIDIwLCAyMTUsIDIyNywgCisgICAgMTksIDIwLCAyMTUsIDIwOCwgMTksIDIwLCAxOTYsIDIyNywgNDksIDE5LCAyMCwgMjE2LCAyMjAsIDE5LCAyMCwgMjE2LCAKKyAgICAyMTYsIDE5LCAyMCwgMTk2LCAyMjgsIDExMywgMTksIDIwLCAyMTUsIDExMCwgMTksIDIwLCAxOTYsIDIxNSwgMTEwLCAxOSwgCisgICAgMjAsIDE0NiwgMTksIDIwLCAxOTYsIDE0NiwgMTksIDIwLCAxNzQsIDE0NiwgMTksIDIwLCAyNDAsIDYwLCAxOSwgMjAsIAorICAgIDI0MCwgMTA1LCAxOSwgMjAsIDI0MCwgMjYsIDE5LCAyMCwgMjQwLCAxMiwgMTksIDIwLCAyMzksIDE4NiwgMTksIDIwLCAKKyAgICAyMzksIDE3NSwgMTksIDIwLCAyNDAsIDEwOCwgMTksIDIwLCAyNDAsIDEwNywgMTksIDIwLCAyMzksIDg1LCAxOSwgMjAsIAorICAgIDE5NiwgMjM5LCA4NSwgMTksIDIwLCAyNDAsIDE3NCwgMTksIDIwLCAyMDksIDkyLCAxOSwgMjAsIDIyMywgMTYxLCAyMDksIAorICAgIDkyLCAxOSwgMjAsIDIwOSwgNzAsIDE5LCAyMCwgMjIzLCAxNjEsIDIwOSwgNzAsIDE5LCAyMCwgMjA5LCA2NCwgMTksIDIwLCAKKyAgICAyMjMsIDE2MSwgMjA5LCA2NCwgMTksIDIwLCAyMDksIDQ3LCAxOSwgMjAsIDIwOSwgNDIsIDE5LCAyMCwgMjA5LCAxMDgsIAorICAgIDE5LCAyMCwgMjA5LCAxMDcsIDE5LCAyMCwgMjA5LCAxMiwgMTksIDIwLCAxOTYsIDIwOSwgMTIsIDE5LCAyMCwgMjA5LCAKKyAgICAxMTAsIDE5LCAyMCwgMjA3LCAyMjcsIDE5LCAyMCwgMjA3LCAyMjUsIDE5LCAyMCwgMjA3LCAyMjQsIDE5LCAyMCwgMjA3LCAKKyAgICAyMjksIDE5LCAyMCwgMjA3LCAyMzAsIDE5LCAyMCwgMjA3LCAxMjQsIDE5LCAyMCwgMjA3LCAxMjMsIDE5LCAyMCwgMjA3LCAKKyAgICAxMjIsIDE5LCAyMCwgMjA3LCAxMjYsIDE5LCAyMCwgMjIxLCAzOSwgMjM3LCA2NywgMTksIDIwLCAyMjEsIDM5LCAyMzcsIDMsIAorICAgIDE5LCAyMCwgMjIxLCAzOSwgMjM2LCAyMzksIDE5LCAyMCwgMjIxLCAzOSwgMjM2LCAxMzYsIDE5LCAyMCwgMjIxLCAzOSwgCisgICAgMjM2LCAxMTcsIDE5LCAyMCwgMjIxLCAzOSwgMTUyLCAxOSwgMjAsIDIyMSwgMzksIDIzNywgMTU3LCAxOSwgMjAsIDIyMSwgCisgICAgMzksIDIzNywgMTcxLCAxOSwgMjAsIDIyMSwgMzgsIDIzNywgMTcxLCAxOSwgMjAsIDIzNiwgMjI2LCAxOSwgMjAsIDIxNywgCisgICAgMTIyLCAxOSwgMjAsIDIxNywgODgsIDE5LCAyMCwgMjE3LCA4MywgMTksIDIwLCAyMTcsIDc3LCAxOSwgMjAsIDIxNywgNzIsIAorICAgIDE5LCAyMCwgMjE3LCAxMjYsIDE5LCAyMCwgMjE3LCAxMjUsIDE5LCAyMCwgMjE3LCAxMzQsIDE5LCAyMCwgMjA4LCAxODYsIAorICAgIDE5LCAyMCwgMjA4LCAxODQsIDE5LCAyMCwgMjA4LCAxODMsIDE5LCAyMCwgMjA4LCAxODcsIDE5LCAyMCwgMTk2LCAyMTYsIAorICAgIDE1OCwgMTksIDIwLCAxOTYsIDIxNiwgNTcsIDE5LCAyMCwgMTk2LCAyMTUsIDIyNywgMTksIDIwLCAxOTYsIDIxNiwgMjIwLCAKKyAgICAxOSwgMjAsIDIyMiwgMjAxLCAxOSwgMjAsIDIyMiwgMTUxLCAxOSwgMjAsIDIyMiwgMTQ3LCAxOSwgMjAsIDIyMiwgMTI4LCAKKyAgICAxOSwgMjAsIDIyMiwgMTIzLCAxOSwgMjAsIDIyMiwgMjAzLCAxOSwgMjAsIDIyMiwgMjAyLCAxOSwgMjAsIDIyMiwgMjA1LCAKKyAgICAxOSwgMjAsIDIyMSwgMjIwLCAxOSwgMjAsIDIxNCwgMjA2LCAyMTMsIDQzLCAxOSwgMjAsIDIxNCwgMjA2LCAyMTMsIDExLCAKKyAgICAxOSwgMjAsIDIxNCwgMjA2LCAyMTIsIDI0MiwgMTksIDIwLCAyMTQsIDIwNiwgMjEzLCA5MCwgMTksIDIwLCAyMDMsIDI0MiwgCisgICAgMjA5LCA5MiwgMTksIDIwLCAyMDMsIDI0MiwgMjA5LCA3MCwgMTksIDIwLCAyMDMsIDI0MiwgMjA5LCA0NywgMTksIDIwLCAKKyAgICAyMDMsIDI0MiwgMjA5LCAxMDgsIDE5LCAyMCwgMjAzLCAyNDIsIDIwOSwgMTEwLCAxOSwgMjAsIDIyNywgMTU1LCAxOSwgMjAsIAorICAgIDIyNywgMTU0LCAxOSwgMjAsIDIyNywgMTUzLCAxOSwgMjAsIDIyNywgMTUyLCAxOSwgMjAsIDIyNywgMTYxLCAxOSwgMjAsIAorICAgIDIyNywgMTYwLCAxOSwgMjAsIDIyNywgMTYyLCAxOSwgMjAsIDIwOSwgMTA5LCAyMDksIDkyLCAxOSwgMjAsIDIwOSwgMTA5LCAKKyAgICAyMDksIDcwLCAxOSwgMjAsIDIwOSwgMTA5LCAyMDksIDY0LCAxOSwgMjAsIDIwOSwgMTA5LCAyMDksIDQ3LCAxOSwgMjAsIAorICAgIDIwOSwgMTA5LCAyMDksIDQyLCAxOSwgMjAsIDIwOSwgMTA5LCAyMDksIDEwOCwgMTksIDIwLCAyMDksIDEwOSwgMjA5LCAKKyAgICAxMDcsIDE5LCAyMCwgMjA5LCAxMDksIDIwOSwgMTEwLCAxOSwgMjAsIDI1MSwgNTAsIDI0OSwgMjU1LCAxOSwgMjAsIDI0OCwgCisgICAgNDAsIDc0LCAxOSwgMjAsIDI0OCwgNDAsIDc1LCAxOSwgMjAsIDI0OCwgNDAsIDc4LCAxOSwgMjAsIDI0OCwgNDAsIDYzLCAKKyAgICAxOSwgMjAsIDI0OCwgNDAsIDIwNCwgNjIsIDE5LCAyMCwgMjQ4LCA0MCwgMjA0LCAzMCwgMTksIDIwLCAyNDgsIDQwLCAyMDQsIAorICAgIDAsIDE5LCAyMCwgMjQ4LCA0MCwgMjA0LCAxMTEsIDE5LCAyMCwgMjQ4LCA0MCwgMjIyLCAyNDAsIDE5LCAyMCwgMjQ4LCA0MCwgCisgICAgMjIyLCAxMDAsIDE5LCAyMCwgMjQ4LCA0MCwgMjIxLCAxOTEsIDE5LCAyMCwgMjQ4LCA0MCwgMjAxLCAyMDEsIDE5LCAyMCwgCisgICAgMjQ4LCA0MCwgMjI5LCAyMDEsIDE5LCAyMCwgMjQ4LCA0MCwgMjI5LCAxMDAsIDE5LCAyMCwgMjQ4LCA0MCwgMjI5LCAyNiwgCisgICAgMTksIDIwLCAyNDgsIDQwLCAxNzMsIDE5LCAyMCwgMjE0LCAyMDYsIDIzNywgNjcsIDE5LCAyMCwgMjE0LCAyMDYsIDIzNywgCisgICAgMywgMTksIDIwLCAyMTQsIDIwNiwgMjM2LCAxMzYsIDE5LCAyMCwgMjE0LCAyMDYsIDE1MiwgMTksIDIwLCA4OCwgMjM4LCAKKyAgICA4NywgMTksIDIwLCA4OCwgMjM4LCA5MSwgMTksIDIwLCA4OCwgMjM4LCAxMDUsIDE5LCAyMCwgODgsIDIzOCwgMTA0LCAxOSwgCisgICAgMjAsIDg4LCAyMzgsIDkzLCAxOSwgMjAsIDg4LCAyMzgsIDExOSwgMTksIDIwLCA4OCwgMjE1LCAxNDUsIDE5LCAyMCwgODgsIAorICAgIDIxNSwgMjI3LCAxOSwgMjAsIDg4LCAyMTYsIDE1OCwgMTksIDIwLCA4OCwgMjE2LCAxMzUsIDE5LCAyMCwgODgsIDIxNiwgCisgICAgNTcsIDE5LCAyMCwgODgsIDIxNiwgMjIwLCAxOSwgMjAsIDg4LCAyMDMsIDIxNywgMTksIDIwLCA4OCwgMjA0LCAwLCAxOSwgCisgICAgMjAsIDg4LCAyMDQsIDYyLCAxOSwgMjAsIDg4LCAyMDQsIDU1LCAxOSwgMjAsIDg4LCAyMDQsIDMwLCAxOSwgMjAsIDg4LCAKKyAgICAyMDQsIDExMSwgMTksIDIwLCA4OCwgMjM1LCAyNDcsIDE5LCAyMCwgODgsIDIzNSwgMjQ4LCAxOSwgMjAsIDg4LCAyMzUsIAorICAgIDI1MSwgMTksIDIwLCA4OCwgMjM1LCAyNTAsIDE5LCAyMCwgODgsIDIzNSwgMjQ5LCAxOSwgMjAsIDg4LCAyMzUsIDI1NCwgCisgICAgMTksIDIwLCA4OCwgMjA5LCAyMiwgMTksIDIwLCA4OCwgMjA5LCA0NywgMTksIDIwLCA4OCwgMjA5LCA5MiwgMTksIDIwLCAKKyAgICA4OCwgMjA5LCA5MCwgMTksIDIwLCA4OCwgMjA5LCA3MCwgMTksIDIwLCA4OCwgMjA5LCAxMDgsIDE5LCAyMCwgODgsIDIwNywgCisgICAgMjA4LCAxOSwgMjAsIDg4LCAyMDcsIDIxOCwgMTksIDIwLCA4OCwgMjA3LCAyMzYsIDE5LCAyMCwgODgsIDIwNywgMjM1LCAKKyAgICAxOSwgMjAsIDg4LCAyMDcsIDIyMCwgMTksIDIwLCA4OCwgMjA3LCAyNDEsIDE5LCAyMCwgODgsIDIxNywgMTkxLCAxOSwgMjAsIAorICAgIDg4LCAyMTgsIDY5LCAxOSwgMjAsIDg4LCAyMTksIDM0LCAxOSwgMjAsIDg4LCAyMTksIDIzLCAxOSwgMjAsIDg4LCAyMTgsIAorICAgIDE2NywgMTksIDIwLCA4OCwgMTg1LCAxOSwgMjAsIDg4LCAyMTksIDE4NCwgMTksIDIwLCA4OCwgMjM3LCAyMzAsIDE5LCAyMCwgCisgICAgODgsIDIzOCwgMzksIDE5LCAyMCwgODgsIDIzOCwgMTkwLCAxOSwgMjAsIDg4LCAyMzgsIDE4MiwgMTksIDIwLCA4OCwgMjM4LCAKKyAgICA4MSwgMTksIDIwLCA4OCwgMjM5LCA4LCAxOSwgMjAsIDg4LCAyMjksIDEwOSwgMTksIDIwLCA4OCwgMjI5LCAxMTUsIDE5LCAKKyAgICAyMCwgODgsIDIyOSwgMTI5LCAxOSwgMjAsIDg4LCAyMjksIDEyOCwgMTksIDIwLCA4OCwgMjI5LCAxMjIsIDE5LCAyMCwgODgsIAorICAgIDIyOSwgMTQ0LCAxOSwgMjAsIDg4LCAyMjksIDQyLCAxOSwgMjAsIDg4LCAyMjksIDQzLCAxOSwgMjAsIDg4LCAyMjksIDQ2LCAKKyAgICAxOSwgMjAsIDg4LCAyMjksIDQ1LCAxOSwgMjAsIDg4LCAyMjksIDQ0LCAxOSwgMjAsIDg4LCAyMjksIDQ3LCAxOSwgMjAsIAorICAgIDg4LCAyMjksIDQ4LCAxOSwgMjAsIDg4LCAyMjEsIDg0LCAxOSwgMjAsIDg4LCAyMjEsIDE5MSwgMTksIDIwLCA4OCwgMjIyLCAKKyAgICAyNDAsIDE5LCAyMCwgODgsIDIyMiwgMjM1LCAxOSwgMjAsIDg4LCAyMjIsIDEwMCwgMTksIDIwLCA4OCwgMjAxLCAyMDEsIAorICAgIDE5LCAyMCwgODgsIDIyMywgMjQ2LCAxOSwgMjAsIDg4LCAyMjQsIDgyLCAxOSwgMjAsIDg4LCAyMjUsIDIwLCAxOSwgMjAsIAorICAgIDg4LCAyMjUsIDgsIDE5LCAyMCwgODgsIDIyNCwgMTU1LCAxOSwgMjAsIDg4LCAxOTIsIDE5LCAyMCwgODgsIDIwMiwgMjEzLCAKKyAgICAxOSwgMjAsIDg4LCAyMDIsIDI0NywgMTksIDIwLCA4OCwgMjAzLCA1MiwgMTksIDIwLCA4OCwgMjAzLCA0OSwgMTksIDIwLCAKKyAgICA4OCwgMjAzLCAxMSwgMTksIDIwLCA4OCwgMTk4LCAxOSwgMjAsIDg4LCAyMzAsIDgyLCAxOSwgMjAsIDIxNCwgMjA2LCAyMzAsIAorICAgIDgyLCAxOSwgMjAsIDg4LCAyMzAsIDEwMSwgMTksIDIwLCA4OCwgMjMwLCAxNjEsIDE5LCAyMCwgODgsIDIzMCwgMTU5LCAxOSwgCisgICAgMjAsIDg4LCAyMzAsIDE0MSwgMTksIDIwLCAyMTQsIDIwNiwgMjMwLCAxNDEsIDE5LCAyMCwgODgsIDIzMCwgMTgxLCAxOSwgCisgICAgMjAsIDg4LCAyMzAsIDExNCwgMTksIDIwLCA4OCwgMjMwLCAxMTgsIDE5LCAyMCwgODgsIDIzMCwgMTI4LCAxOSwgMjAsIDg4LCAKKyAgICAyMzAsIDEyNywgMTksIDIwLCA4OCwgMjMwLCAxMjYsIDE5LCAyMCwgODgsIDIzMCwgMTI5LCAxOSwgMjAsIDg4LCAyMjYsIAorICAgIDIzOSwgMTksIDIwLCA4OCwgMjI3LCA0OSwgMTksIDIwLCA4OCwgMjI3LCAyMzQsIDE5LCAyMCwgODgsIDIyNywgMjI2LCAxOSwgCisgICAgMjAsIDg4LCAyMjcsIDE0OCwgMTksIDIwLCA4OCwgMjI4LCAxMTMsIDE5LCAyMCwgODgsIDI0MywgMTE3LCAxOSwgMjAsIDg4LCAKKyAgICAyNDMsIDExOCwgMTksIDIwLCA4OCwgMjQzLCAxMjMsIDE5LCAyMCwgODgsIDI0MywgMTIyLCAxOSwgMjAsIDg4LCAyNDMsIAorICAgIDExOSwgMTksIDIwLCA4OCwgMjQzLCAxMjQsIDE5LCAyMCwgODgsIDIyNywgMTUxLCAxOSwgMjAsIDg4LCAyMjcsIDE1MywgCisgICAgMTksIDIwLCA4OCwgMjI3LCAxNTcsIDE5LCAyMCwgODgsIDIyNywgMTU2LCAxOSwgMjAsIDg4LCAyMjcsIDE1NSwgMTksIDIwLCAKKyAgICA4OCwgMjI3LCAxNjEsIDE5LCAyMCwgODgsIDIwOCwgMTgxLCAxOSwgMjAsIDg4LCAyMDgsIDE4MywgMTksIDIwLCA4OCwgCisgICAgMjA4LCAxODYsIDE5LCAyMCwgODgsIDIwOCwgMTg1LCAxOSwgMjAsIDg4LCAyMDgsIDE4NCwgMTksIDIwLCA4OCwgMjA4LCAKKyAgICAxODcsIDE5LCAyMCwgODgsIDIwOCwgMTc2LCAxOSwgMjAsIDg4LCAyMDgsIDE3NywgMTksIDIwLCA4OCwgMjA4LCAxODksIAorICAgIDE5LCAyMCwgODgsIDIwOCwgMTg4LCAxOSwgMjAsIDg4LCAyMDgsIDE3OCwgMTksIDIwLCA4OCwgMjA4LCAxOTAsIDE5LCAyMCwgCisgICAgODgsIDIwMiwgNiwgMTksIDIwLCA4OCwgMjAyLCAxNywgMTksIDIwLCA4OCwgMjAyLCA5MiwgMTksIDIwLCA4OCwgMjAyLCAKKyAgICA5MCwgMTksIDIwLCA4OCwgMjAyLCAzOSwgMTksIDIwLCA4OCwgMjAyLCAxMTYsIDE5LCAyMCwgODgsIDIwMiwgMTU5LCAxOSwgCisgICAgMjAsIDg4LCA4MSwgMjAyLCAxNTksIDE5LCAyMCwgODgsIDI0MSwgMjQyLCAxOSwgMjAsIDg4LCAyNDEsIDI0MywgMTksIDIwLCAKKyAgICA4OCwgMjQxLCAyNTIsIDE5LCAyMCwgODgsIDI0MSwgMjUxLCAxOSwgMjAsIDg4LCAyNDEsIDI0NiwgMTksIDIwLCA4OCwgCisgICAgMjQxLCAyNTUsIDE5LCAyMCwgODgsIDIxMSwgMTAsIDE5LCAyMCwgODgsIDIxMiwgMTMsIDE5LCAyMCwgODgsIDIxNCwgMTc3LCAKKyAgICAxOSwgMjAsIDg4LCAyMTQsIDE2NSwgMTksIDIwLCA4OCwgMjEyLCAxNjIsIDE5LCAyMCwgODgsIDIxNSwgMzYsIDE5LCAyMCwgCisgICAgODgsIDIxMiwgMTk5LCAxOSwgMjAsIDg4LCAyMTIsIDI0MiwgMTksIDIwLCA4OCwgMjEzLCA0MywgMTksIDIwLCA4OCwgMjEzLCAKKyAgICA0MSwgMTksIDIwLCA4OCwgMjEzLCAxMSwgMTksIDIwLCA4OCwgMjEzLCA5MCwgMTksIDIwLCA4OCwgMjEzLCA5MiwgMTksIAorICAgIDIwLCA4OCwgMjA3LCAyNDksIDE5LCAyMCwgODgsIDIwNywgMjUzLCAxOSwgMjAsIDg4LCAyMDgsIDE0LCAxOSwgMjAsIDg4LCAKKyAgICAyMDgsIDEzLCAxOSwgMjAsIDg4LCAyMDcsIDI1NSwgMTksIDIwLCA4OCwgMjA4LCAyMCwgMTksIDIwLCA4OCwgMjQ2LCA5OCwgCisgICAgMTksIDIwLCA4OCwgMjQ2LCAxMTYsIDE5LCAyMCwgODgsIDI0NiwgMTcwLCAxOSwgMjAsIDg4LCAyNDYsIDE2NiwgMTksIDIwLCAKKyAgICA4OCwgMjQ2LCAxNDIsIDE5LCAyMCwgODgsIDI0NiwgMTk5LCAxOSwgMjAsIDg4LCAyMDcsIDIxMSwgMTksIDIwLCA4OCwgCisgICAgMjA3LCAyMTIsIDE5LCAyMCwgODgsIDIwNywgMjE1LCAxOSwgMjAsIDg4LCAyMDcsIDIxNCwgMTksIDIwLCA4OCwgMjA3LCAKKyAgICAyMTMsIDE5LCAyMCwgODgsIDIwNywgMjE2LCAxOSwgMjAsIDI0NiwgMTQzLCA1NCwgMTksIDIwLCAyMzksIDEwMiwgMjExLCAKKyAgICA2MSwgMTksIDIwLCAyMTcsIDExOCwgMTksIDIwLCAyMjIsIDE5OSwgMTksIDIwLCAyMjEsIDIxNywgMTksIDIwLCAyMjEsIAorICAgIDIxNiwgMTksIDIwLCAyMjEsIDIxNSwgMTksIDIwLCAyMjEsIDIxNCwgMTksIDIwLCAyMjEsIDIxOSwgMTksIDIwLCAyMjEsIAorICAgIDIxOCwgMTksIDIwLCAyMDMsIDI0MiwgMjA5LCAxMCwgMTksIDIwLCAyMDMsIDI0MiwgMjA5LCA5LCAxOSwgMjAsIDIwMywgCisgICAgMjQyLCAyMDksIDgsIDE5LCAyMCwgMjAzLCAyNDIsIDIwOSwgNywgMTksIDIwLCAyMDMsIDI0MiwgMjA5LCA2LCAxOSwgMjAsIAorICAgIDIwMywgMjQyLCAyMDksIDEzLCAxOSwgMjAsIDIwMywgMjQyLCAyMDksIDEyLCAxOSwgMjAsIDIwMywgMjQyLCA0NiwgMjA5LCAKKyAgICAxMTAsIDE5LCAyMCwgMjQ4LCA0MCwgMjA0LCAxNDQsIDIyMCwgNjQsIDIxMSwgMjI5LCA4MiwgMjIwLCA2NCwgMSwgMjQ4LCAKKyAgICAxMzIsIDIyMCwgNjQsIDEsIDIyNiwgMjI1LCAyMjAsIDY0LCAxLCAyNDAsIDU3LCAyMjAsIDY0LCAxLCAyMTUsIDE2LCAyMjAsIAorICAgIDY0LCAxLCAyMjIsIDU2LCAyMjAsIDY0LCAxLCAyMDcsIDM2LCAyMjAsIDY0LCAxLCAyNDQsIDE4NiwgMjIwLCA2NCwgMSwgCisgICAgMjA4LCAyMTQsIDIyMCwgNjQsIDEsIDI0NSwgMjQ1LCAyMjAsIDY0LCAxLCAyNDYsIDIyNSwgMjIwLCA2NCwgMSwgMjIzLCAKKyAgICAyMzMsIDIyMCwgNjQsIDEsIDIzOCwgMjAsIDIyMCwgNjQsIDEsIDIyMiwgMTg5LCAyMjAsIDY0LCAxLCAyMTEsIDU0LCAyMjAsIAorICAgIDY0LCAxLCAyMTUsIDEzOCwgMjIwLCA2NCwgMSwgMjUxLCA2MSwgMjIwLCA2NCwgMSwgMjIwLCAyMiwgMjIwLCA2NCwgMSwgCisgICAgMjA2LCAyMTAsIDIyMCwgNjQsIDEsIDI0MSwgMTg3LCAyMjAsIDY0LCAxLCAyMzAsIDIzMywgMjIwLCA2NCwgMSwgMjQxLCAKKyAgICAxODgsIDIyMCwgNjQsIDEsIDIxOSwgMjQ0LCAyMjAsIDY0LCAxLCAyMDcsIDE1LCAyMjAsIDY0LCAxLCAyMzEsIDg5LCAyMjAsIAorICAgIDY0LCAxLCAyNDEsIDE4NSwgMjIwLCA2NCwgMSwgMjE5LCAxMywgMjIwLCA2NCwgMjQwLCA1NiwgODIsIDIyMCwgNjQsIDIxNiwgCisgICAgNzMsIDI0MCwgNTYsIDgyLCAxOTcsIDEsIDI0MCwgNDYsIDI0MCwgMzgsIDI0MCwgNjEsIDI0MCwgMTc0LCAxOTcsIDEsIAorICAgIDIwNiwgMTY0LCAxOTcsIDEsIDIwNiwgMTk1LCAyMDYsIDIxMSwgNjgsIDE5NywgMSwgMjAyLCAyMTYsIDE5NywgMSwgMjAzLCAKKyAgICAxMjQsIDE5NywgMSwgMjA0LCAxNDQsIDE5NywgMSwgMjA5LCAxNSwgMjA5LCAxNCwgMjA5LCA0MCwgMTk3LCAxLCAyNDAsIAorICAgIDI0MywgMTk3LCAxLCAyNTAsIDE5OSwgNjMsIDE5NywgMSwgMjE5LCAyMjgsIDc4LCAxOTcsIDEsIDI1MSwgMTQyLCA2MywgCisgICAgMTk3LCAxLCAyNTEsIDkzLCAxOTcsIDEsIDIyNywgMjQsIDc4LCAxOTcsIDEsIDIxMiwgMjIxLCA3OCwgMTk3LCAxLCA3OCwgCisgICAgMTk3LCAxLCAyMjAsIDczLCAxOTcsIDEsIDIyMCwgMzEsIDE5NywgMSwgMjE2LCAxOTUsIDIxNiwgMjA4LCAyMTYsIDEyMCwgCisgICAgMTQ2LCAxOTcsIDEsIDIyOSwgMjE2LCAxOTcsIDEsIDI0NiwgMjIxLCAxOTcsIDEsIDIyOSwgMjE3LCAyMzAsIDU0LCAxOTcsIAorICAgIDEsIDIzOSwgNzUsIDE5NywgMSwgMjQxLCA3OCwgMTk3LCAxLCAyMzgsIDE4NSwgMjM3LCAxNzcsIDIzOSwgNzUsIDE5NywgMSwgCisgICAgMjM4LCAyMjQsIDE5NywgMSwgMjAzLCAyMDksIDIwMywgMjAwLCAyMDQsIDE0NCwgMTk3LCAxLCAyMzcsIDE0OSwgMjM3LCAKKyAgICAxNzEsIDE5NywgMSwgMjM3LCAxNTMsIDIzNywgMTcxLCAxOTcsIDEsIDIyNywgMjYsIDIzNywgMTcxLCAxOTcsIDEsIDIxMiwgCisgICAgMjI0LCAyMzcsIDE3MSwgMTk3LCAxLCAyMjMsIDYzLCAyMjEsIDIsIDIyMywgNjQsIDIyMywgMTYzLCAxOTcsIDEsIDIxMiwgCisgICAgMjIyLCAyMjMsIDE2MywgMTk3LCAxLCAyNDIsIDgwLCAxOTcsIDEsIDIzMCwgMjEyLCAyMzAsIDIxNiwgMjMwLCAyMDMsIDc1LCAKKyAgICAxOTcsIDEsIDc0LCAxOTcsIDEsIDIzMCwgMTUyLCAyMzAsIDE4NCwgMTk3LCAxLCAyMzgsIDE2OSwgMTk3LCAxLCAyMjcsIAorICAgIDI3LCAyNTEsIDEwOSwgMTk3LCAxLCAyMTIsIDIyNiwgNjMsIDE5NywgMSwgMjMwLCAxOTUsIDI0MSwgNTEsIDE5NywgMSwgCisgICAgMjE4LCAyMjYsIDIxOCwgMjUxLCAyMTksIDE4NCwgMTk3LCAxLCAyNTEsIDIzLCAyNDEsIDQ5LCAxOTcsIDEsIDIxMSwgMjM0LCAKKyAgICAxOTQsIDE5NywgMSwgMjEyLCAxNDYsIDIyNywgMjMsIDE5NCwgMTk3LCAxLCAyMTIsIDIyMCwgMTk0LCAxOTcsIDEsIDI0NywgCisgICAgMTI1LCAxOTcsIDEsIDIwMiwgMTU5LCAxOTcsIDEsIDIwOCwgMTk1LCAyMDgsIDIwNywgMjA3LCAxMDgsIDIxMCwgNjksIAorICAgIDE5NywgMSwgMjEyLCAyMTksIDIxMCwgNjksIDE5NywgMSwgMjQ1LCA1MSwgMTk3LCAxLCAyNDgsIDExMSwgMjQ4LCAxMTQsIAorICAgIDI0OCwgNDYsIDI0OSwgMjU1LCAxOTcsIDEsIDIxMiwgMjI1LCAyNDksIDI1NSwgMTk3LCAxLCAyNDIsIDc5LCAxOTcsIDEsIAorICAgIDIyMCwgMiwgMTk3LCAxLCAyNDEsIDE0NiwgMjQxLCAxNDgsIDc0LCAxOTcsIDEsIDIyNSwgMTEzLCAyMjUsIDEyMywgMjI2LCAKKyAgICAxODUsIDE5NywgMSwgMjI3LCAyNSwgMjI2LCAxODUsIDE5NywgMSwgMjEyLCAyMjMsIDIyNiwgMTg1LCAxOTcsIDEsIDIyNywgCisgICAgMjQ5LCAyMjgsIDkxLCAyMjcsIDM0LCAxNTksIDE5NywgMSwgMjQyLCA4MSwgMTk3LCAxLCAyMzEsIDIzLCAxOTcsIDEsIAorICAgIDIzMSwgMjQsIDE5NywgMSwgMjQ0LCAyMDAsIDI0NCwgMjA2LCAyNDUsIDUxLCAxOTcsIDEsIDIxOSwgMjIyLCAyNDAsIDI0MiwgCisgICAgNzgsIDE5NywgMSwgMjQxLCAxODMsIDE5NywgMSwgMjMwLCAyMzIsIDE5NywgMSwgMjQ1LCA3MSwgMTk3LCAxLCAyNDcsIDc1LCAKKyAgICAxOTcsIDEsIDI0NiwgMjM3LCAxOTcsIDEsIDIxMSwgOTksIDE5NywgMSwgMjI3LCAyMiwgMTk3LCAxLCAyMTIsIDIxOCwgCisgICAgMTk3LCAxLCAyMzUsIDE2MSwgMTk3LCAxLCAyMTcsIDEzNCwgMTk3LCAxLCAyMDMsIDE5NiwgMTk3LCAyMTIsIDEyMCwgMjE3LCAKKyAgICAxNzgsIDE5NywgMjIzLCAyMjYsIDIxNywgMTc4LCAxOTcsIDI0NSwgMTMxLCAyMTcsIDE3OCwgMTk3LCAyNTAsIDEwOCwgOTcsIAorICAgIDE5NywgMjA3LCAxNjIsIDk3LCAxOTcsIDI0OCwgMTMwLCA5NywgMTk3LCAxLCAyMzAsIDU0LCAxOTcsIDEsIDIxMywgOTIsIAorICAgIDE5NywgMSwgMjIwLCAxOCwgMTk3LCAxLCAyMzksIDEzMSwgMjQ3LCAyMCwgMjE5LCAyMjcsIDE5NywgMSwgMjM5LCAxMzEsIAorICAgIDI0NywgMjAsIDIzMCwgMjE1LCAxOTcsIDEsIDIzOSwgMTMxLCAyNDcsIDIwLCAyNDEsIDE0NywgMTk3LCAxLCAyMzksIDEzMSwgCisgICAgMjQ3LCAyMCwgMjUxLCAxNDEsIDE5NywgMSwgMjM5LCAxMzEsIDI0NywgMjAsIDI1MSwgOTMsIDIwOSwgMjU0LCAxLCA2MywgCisgICAgMjA5LCAyNTQsIDEsIDc1LCAyMDksIDI1NCwgMSwgNjgsIDIwOSwgMjU0LCAxLCAxNzMsIDIwOSwgMjU0LCAxLCAyMzksIDgsIAorICAgIDIwOSwgMjU0LCAxLCAyMjIsIDIwMywgMjA5LCAyNTQsIDEsIDIxMCwgMjIsIDIwOSwgMjU0LCAxLCAyNDQsIDIxMiwgMjA5LCAKKyAgICAyNTQsIDEsIDIwMSwgMjAxLCAyMDksIDI1NCwgMSwgMTg1LCAyMDksIDI1NCwgMSwgMjQ5LCAzMiwgMjA5LCAyNTQsIDEsIAorICAgIDE5MiwgMjA5LCAyNTQsIDEsIDE5OCwgMjA5LCAyNTQsIDEsIDIyOCwgMTEzLCAyMDksIDI1NCwgMSwgMjA0LCAxMTEsIDIwOSwgCisgICAgMjU0LCAxLCAyMTUsIDM2LCAyMDksIDI1NCwgMSwgMTUyLCAyMDksIDI1NCwgMjIsIDIsIDc1LCAyMDksIDI1NCwgMjIsIDIsIAorICAgIDY4LCAyMDksIDI1NCwgMiwgMjA1LCAyMDQsIDIzNywgOTYsIDEsIDYzLCAyMzcsIDk2LCAxLCA3NSwgMjM3LCA5NiwgMSwgCisgICAgNjgsIDIzNywgOTYsIDEsIDE3MywgMjM3LCA5NiwgMSwgMjM5LCA4LCAyMzcsIDk2LCAxLCAyMjIsIDIwMywgMjM3LCA5NiwgCisgICAgMSwgMjEwLCAyMiwgMjM3LCA5NiwgMSwgMjQ0LCAyMTIsIDIzNywgOTYsIDEsIDIwMSwgMjAxLCAyMzcsIDk2LCAxLCAxODUsIAorICAgIDIzNywgOTYsIDEsIDI0OSwgMzIsIDIzNywgOTYsIDEsIDE5MiwgMjM3LCA5NiwgMSwgMTk4LCAyMzcsIDk2LCAxLCAyMTYsIAorICAgIDIyMCwgMjM3LCA5NiwgMSwgMjI4LCAxMTMsIDIzNywgOTYsIDEsIDIwNCwgMTExLCAyMzcsIDk2LCAxLCAyMTUsIDM2LCAKKyAgICAyMzcsIDk2LCAxLCAxNTIsIDIzNywgOTYsIDIyLCAyLCA3NSwgMjM3LCA5NiwgMjIsIDIsIDY4LCAyMzcsIDk2LCAyLCAyMTksIAorICAgIDEyNCwgMjE4LCAxODUsIDIxMiwgMTIwLCAyMTcsIDE3OCwgMjE4LCAxODUsIDUyLCAyMTcsIDE3OCwgMjQ3LCAxODUsIDEsIAorICAgIDYzLCAyNDcsIDE4NSwgMSwgNzUsIDI0NywgMTg1LCAxLCA2OCwgMjQ3LCAxODUsIDEsIDE3MywgMjQ3LCAxODUsIDEsIDIzOSwgCisgICAgOCwgMjQ3LCAxODUsIDEsIDIyMiwgMjAzLCAyNDcsIDE4NSwgMSwgMjEwLCAyMiwgMjQ3LCAxODUsIDEsIDI0NCwgMjEyLCAKKyAgICAyNDcsIDE4NSwgMSwgMjAxLCAyMDEsIDI0NywgMTg1LCAxLCAxODUsIDI0NywgMTg1LCAxLCAyNDksIDMyLCAyNDcsIDE4NSwgCisgICAgMSwgMTkyLCAyNDcsIDE4NSwgMSwgMTk4LCAyNDcsIDE4NSwgMSwgMjE2LCAyMjAsIDI0NywgMTg1LCAxLCAyMjgsIDExMywgCisgICAgMjQ3LCAxODUsIDEsIDIwNCwgMTExLCAyNDcsIDE4NSwgMSwgMjE1LCAzNiwgMjQ3LCAxODUsIDEsIDE1MiwgMjQ3LCAxODUsIAorICAgIDIyLCAyLCA3NSwgMjQ3LCAxODUsIDIyLCAyLCA2OCwgMjA5LCAyNTMsIDEsIDYzLCAyMDksIDI1MywgMSwgNzUsIDIwOSwgCisgICAgMjUzLCAxLCA2OCwgMjA5LCAyNTMsIDEsIDE3MywgMjA5LCAyNTMsIDEsIDIzOSwgOCwgMjA5LCAyNTMsIDEsIDIyMiwgMjAzLCAKKyAgICAyMDksIDI1MywgMSwgMjEwLCAyMiwgMjA5LCAyNTMsIDEsIDI0NCwgMjEyLCAyMDksIDI1MywgMSwgMjAxLCAyMDEsIDIwOSwgCisgICAgMjUzLCAxLCAxODUsIDIwOSwgMjUzLCAxLCAyNDksIDMyLCAyMDksIDI1MywgMSwgMTkyLCAyMDksIDI1MywgMSwgMTk4LCAKKyAgICAyMDksIDI1MywgMSwgMjI4LCAxMTMsIDIwOSwgMjUzLCAxLCAyMDQsIDExMSwgMjA5LCAyNTMsIDEsIDIxNSwgMzYsIDIwOSwgCisgICAgMjUzLCAyMiwgMiwgNzUsIDIwOSwgMjUzLCAyMiwgMiwgNjgsIDg1LCAxLCAxNzMsIDg1LCAxLCAyMjksIDE0NCwgODUsIDEsIAorICAgIDIyOSwgMjYsIDg1LCAxLCAyMjksIDExNSwgODUsIDEsIDIyMiwgMTI4LCA4NSwgMSwgMjQ3LCA5MiwgODUsIDEsIDI0NiwgCisgICAgMTk5LCA4NSwgMSwgMjQ1LCAyNTQsIDg1LCAxLCAyNDYsIDExNiwgODUsIDEsIDIyMCwgMjMzLCA4NSwgMSwgMjQ0LCAyMTIsIAorICAgIDg1LCAxLCAyMDcsIDIyOSwgODUsIDEsIDI0MywgMTEzLCA4NSwgMSwgMjA3LCAyMjQsIDg1LCAxLCAyMjEsIDE5NywgODUsIAorICAgIDEsIDIxMCwgMjIsIDg1LCAxLCAyMDksIDEwOCwgODUsIDEsIDEzNSwgODUsIDEsIDIwOSwgNDcsIDg1LCAxLCAyMjEsIDE5MSwgCisgICAgODUsIDEsIDI0OSwgMzIsIDg1LCAxLCAyMTgsIDIwOCwgODUsIDEsIDIxOCwgNjksIDg1LCAxLCAyMTgsIDE4MCwgODUsIDEsIAorICAgIDIyNCwgODIsIDg1LCAxLCAyMDIsIDI0NywgODUsIDEsIDIxNSwgMjI3LCA4NSwgMSwgMjI3LCA0OSwgODUsIDEsIDIwNSwgCisgICAgMTg5LCA4NSwgMSwgMjEzLCA5MCwgODUsIDEsIDIxMSwgMTI0LCA4NSwgMSwgMjE1LCAzNiwgODUsIDEsIDE1MiwgODUsIDEsIAorICAgIDIyOCwgMTEzLCA4NSwgMSwgMjE3LCAxMjYsIDg1LCAyMzEsIDM2LCAyMiwgMjE3LCAxMTIsIDg1LCAyMzEsIDM2LCAyMiwgCisgICAgMjE3LCAxMjUsIDg1LCAyMzEsIDM2LCAyMiwgMjE3LCA4OCwgODUsIDIzMSwgMzYsIDIyLCAyMTcsIDgzLCA4NSwgMjMxLCAKKyAgICAzNiwgMjIsIDIxNywgNjUsIDg1LCAyMzEsIDM2LCAyMiwgMjE3LCAzNSwgODUsIDIzMSwgMzYsIDIyLCAyMTcsIDIzLCA4NSwgCisgICAgMjMxLCAzNiwgMjIsIDIxNywgMjIsIDg1LCAyMzEsIDM2LCAyMiwgMjE1LCAxMDIsIDg1LCAyMzEsIDM2LCAyMiwgMjE1LCAKKyAgICA5NSwgODUsIDIzMSwgMzYsIDIyLCAyMjYsIDE5OSwgODUsIDIzMSwgMzYsIDIyLCAyMjYsIDE4OCwgODUsIDIzMSwgMzYsIAorICAgIDIyLCAyMTcsIDEwNiwgODUsIDIzMSwgMzYsIDIyLCAyMTcsIDExOCwgODUsIDIzMSwgMzYsIDIyLCAyMTcsIDczLCAyMDcsIAorICAgIDEyMSwgMTA1LCA4NSwgMjMxLCAzNiwgMjIsIDIxNywgNzMsIDIwNywgMTIxLCAxMDgsIDg1LCAyMzEsIDM2LCAyMiwgMjE3LCAKKyAgICAxMDgsIDg1LCAyMiwgMjMxLCAyMSwgMjUwLCAxNDgsIDg1LCAyMiwgMjMxLCAyMSwgMjUyLCAyNSwgODUsIDIyLCAyLCAyNTIsIAorICAgIDI1LCA4NSwgMjIsIDIsIDc1LCA4NSwgMjIsIDIsIDIzMSwgODMsIDg1LCAyMiwgMiwgMjAzLCAxMjQsIDg1LCAyMiwgMiwgCisgICAgMjAyLCAxNjksIDg1LCAyMiwgMiwgNjgsIDg1LCAyMiwgMiwgMjA2LCAxNzgsIDg1LCAyMiwgMiwgMjA3LCAzOSwgODUsIDIyLCAKKyAgICAyLCAyMjAsIDczLCA4NSwgMjIsIDIsIDE5OCwgODUsIDIyLCAyLCAyMzEsIDExMCwgODUsIDIyLCAyLCA3NCwgODUsIDIyLCAKKyAgICAyLCAyNTEsIDEwOSwgODUsIDIyLCAyLCAyNTEsIDY0LCA4NSwgMjIsIDIsIDIyMCwgMTgsIDg1LCAyMiwgMiwgMjUwLCAzNCwgCisgICAgODUsIDIsIDIyMiwgNzMsIDg1LCAyLCAyMTYsIDE1NiwgODUsIDIsIDIwMiwgMTgwLCA4NSwgMiwgMjIzLCAxOTAsIDg1LCAyLCAKKyAgICAyMDgsIDczLCA4NSwgMiwgMjQ4LCAyMzMsIDg1LCAyLCAyMTUsIDIyMiwgODUsIDIsIDIwOCwgMTcxLCA4NSwgMiwgMjMwLCAKKyAgICAxMSwgODUsIDIsIDI1MSwgNjYsIDg1LCAyLCAyMTQsIDI0NCwgMjE0LCAyMzcsIDg1LCAyLCAyMDUsIDIwMSwgODUsIDIsIAorICAgIDI0NSwgMjQ4LCA4NSwgMiwgMjQ4LCAyMDUsIDg1LCAyLCAyMjksIDEzNiwgODUsIDIsIDI0OCwgMjI4LCA4NSwgMiwgMjQ3LCAKKyAgICA2NCwgMjE4LCAxMzAsIDIyOCwgMTczLCA4NSwgMiwgMjI3LCAyMDMsIDIwOCwgMTQ4LCA4NSwgMiwgMjQ4LCAxMDAsIDg1LCAKKyAgICAyLCAyMTgsIDE4MiwgMjIzLCAyNDMsIDg1LCAyLCAyMjksIDQsIDg1LCAyNDUsIDkyLCAxNiwgMjE2LCA0OSwgODUsIDIsIAorICAgIDI1MCwgMTYsIDg1LCAyLCAyNTAsIDM3LCA4NSwgMTcsIDIwMiwgODQsIDg1LCAxNywgMTA1LCA4NSwgMTcsIDEwOCwgODUsIAorICAgIDE3LCAxNDcsIDg1LCAxNywgMTQ5LCA4NSwgMTcsIDE3MCwgODUsIDE3LCAxOTUsIDg1LCAxNywgMjEzLCAxMTEsIDg1LCAxNywgCisgICAgMTk5LCA4NSwgMTcsIDIyMiwgNjMsIDg1LCAxNiwgMjI3LCAyMDMsIDI1MCwgMzksIDIxMSwgMjUzLCA4NSwgMTYsIDIyNywgCisgICAgMjAzLCAyNTAsIDM5LCAyMjMsIDIxMCwgODUsIDE2LCAyMjcsIDIwMywgMjUwLCAzOSwgMjE4LCAxMjksIDg1LCAxNiwgMjI3LCAKKyAgICAyMDMsIDI1MCwgMzksIDI0OCwgMTMzLCA4NSwgMTYsIDIyNywgMjAzLCAyNTAsIDM5LCAyNDcsIDE2NSwgODUsIDE2LCAyMjcsIAorICAgIDIwMywgMjUwLCAzOSwgMjE4LCA3LCA4NSwgMTYsIDIyNywgMjAzLCAyNTAsIDM5LCAyMTgsIDEsIDg1LCAxNiwgMjI3LCAKKyAgICAyMDMsIDI1MCwgMzksIDIxNywgMjU1LCA4NSwgMTYsIDIyNywgMjAzLCAyNTAsIDM5LCAyMTgsIDUsIDg1LCAxNiwgMjI3LCAKKyAgICAyMDMsIDI1MCwgMzksIDIxOCwgMywgOTQsIDI0OCwgNTksIDk0LCAyNDEsIDEwOCwgOTQsIDI0NSwgMjMzLCA5NCwgMjM5LCAKKyAgICAxMDIsIDIxMSwgNjEsIDk0LCAyNDUsIDI0MiwgOTQsIDIzOSwgMTQ3LCAyNDMsIDgzLCA5NCwgMjA4LCAxNzAsIDIxMiwgNywgCisgICAgMjM1LCAyMjAsIDk0LCAyMTIsIDE2MCwgNCwgMjQ3LCAyNDQsIDIyNSwgODgsIDk0LCAyMjUsIDExOSwgMjQ1LCAyMzMsIDk0LCAKKyAgICAyMjUsIDExOSwgMjM5LCAxMDIsIDIxMSwgNjEsIDk0LCAyMjIsIDU0LCA5NCwgMjM5LCAxMzAsIDU3LCAyMTQsIDE1MSwgCisgICAgMTA1LCA5NCwgMjM5LCAxMzAsIDU3LCAyMTQsIDE1MSwgMTA4LCA5NCwgMjM5LCAxMzAsIDU3LCAyMTQsIDE1MSwgMTQ3LCAKKyAgICA5NCwgMjIsIDIxMywgMTMwLCA5NCwgMTcsIDIwMiwgODQsIDk0LCAxNywgMTA1LCA5NCwgMTcsIDEwOCwgOTQsIDE3LCAxNDcsIAorICAgIDk0LCAxNywgMTQ5LCA5NCwgMTcsIDE3MCwgOTQsIDE3LCAxOTUsIDk0LCAxNywgMjEzLCAxMTEsIDk0LCAxNywgMTk5LCA5NCwgCisgICAgMTcsIDIyMiwgNjMsIDk0LCAxLCA2MywgOTQsIDEsIDc0LCA5NCwgMSwgNzUsIDk0LCAxLCA3OCwgOTQsIDEsIDY4LCA5NCwgCisgICAgMSwgMjIwLCA3MywgOTQsIDEsIDIwNywgMjQsIDk0LCAxLCAyNDEsIDE2MSwgOTQsIDEsIDIwMSwgMjAxLCA5NCwgMSwgMjUwLCAKKyAgICAyMjMsIDk0LCAxLCAyNDksIDMyLCA5NCwgMSwgMTg1LCA5NCwgMSwgMjE3LCAxMjYsIDk0LCAxLCAyMzksIDgsIDk0LCAxLCAKKyAgICAxOTIsIDk0LCAxLCAyMjgsIDExMywgOTQsIDEsIDIxNSwgMzYsIDk0LCAxLCAyMTMsIDkwLCA5NCwgMSwgMjEwLCAyMiwgOTQsIAorICAgIDEsIDI0NCwgMjEyLCA5NCwgMSwgMjQ2LCAxOTksIDk0LCAxLCAyMzAsIDE4MSwgOTQsIDEsIDE5OCwgOTQsIDEsIDIxNiwgCisgICAgMjIwLCA5NCwgMSwgMjA0LCAxMTEsIDk0LCAxLCAyNDAsIDEwOCwgOTQsIDEsIDE3MywgOTQsIDEsIDIyOSwgMTQ0LCA5NCwgCisgICAgMSwgMjA4LCAyMCwgOTQsIDEsIDIwMiwgMTE2LCA5NCwgMSwgMjM3LCAxNTcsIDk0LCAxLCAyMDIsIDEwLCA5NCwgMSwgMjI3LCAKKyAgICAxNjEsIDk0LCAxLCAyMDIsIDY2LCA5NCwgMSwgMjQ2LCAxNDIsIDk0LCAxLCAyMDgsIDE3MCwgMTYzLCAyMiwgNTQsIDk0LCAKKyAgICAxLCAyMDgsIDE3MCwgNzQsIDk0LCAxLCAyMDgsIDE3MCwgNzUsIDk0LCAxLCAyMDgsIDE3MCwgNzgsIDk0LCAxLCAyMDgsIAorICAgIDE3MCwgNjgsIDk0LCAxLCAyMDgsIDE3MCwgMjIwLCA3MywgOTQsIDEsIDIwOCwgMTcwLCAyMDcsIDI0LCA5NCwgMSwgMjA4LCAKKyAgICAxNzAsIDI1MCwgMjIzLCA5NCwgMSwgMjA4LCAxNzAsIDI0OSwgMzIsIDk0LCAxLCAyMDgsIDE3MCwgMTg1LCA5NCwgMSwgCisgICAgMjA4LCAxNzAsIDIxNywgMTI2LCA5NCwgMSwgMjA4LCAxNzAsIDIzOSwgOCwgOTQsIDEsIDIwOCwgMTcwLCAxOTIsIDk0LCAxLCAKKyAgICAyMDgsIDE3MCwgMjEwLCAyMiwgOTQsIDEsIDIwOCwgMTcwLCAyNDQsIDIxMiwgOTQsIDEsIDIwOCwgMTcwLCAyNDYsIDE5OSwgCisgICAgOTQsIDEsIDIwOCwgMTcwLCAyMzAsIDE4MSwgOTQsIDEsIDIwOCwgMTcwLCAyMDgsIDIwLCA5NCwgMSwgMjA4LCAxNzAsIAorICAgIDE5OCwgOTQsIDEsIDIwOCwgMTcwLCAyMDQsIDExMSwgOTQsIDEsIDIwOCwgMTcwLCAxNzMsIDk0LCAxLCAyMDgsIDE3MCwgCisgICAgMjM5LCA1LCA5NCwgMSwgMjA4LCAxNzAsIDIzNywgMTU3LCA5NCwgMSwgMjA4LCAxNzAsIDIzMCwgMTQwLCA5NCwgMSwgMjA4LCAKKyAgICAxNzAsIDIyMiwgOTgsIDk0LCAxLCAyMDgsIDE3MCwgMjQxLCAyNTUsIDk0LCAxLCAyMTIsIDE2MCwgNzQsIDk0LCAxLCAyMTIsIAorICAgIDE2MCwgNzUsIDk0LCAxLCAyMTIsIDE2MCwgMjMwLCAxOTIsIDk0LCAxLCAyMTIsIDE2MCwgMjA3LCAyNCwgOTQsIDEsIDIxMiwgCisgICAgMTYwLCA2OCwgOTQsIDEsIDIxMiwgMTYwLCAyNTAsIDIyMywgOTQsIDEsIDIxMiwgMTYwLCAxNzMsIDk0LCAxLCAyMTIsIAorICAgIDE2MCwgMjM5LCA4LCA5NCwgMSwgMjEyLCAxNjAsIDE1MiwgOTQsIDEsIDIxMiwgMTYwLCAxODUsIDk0LCAxLCAyMTIsIDE2MCwgCisgICAgMjEzLCA5MCwgOTQsIDEsIDIxMiwgMTYwLCAyMTAsIDIyLCA5NCwgMSwgMjEyLCAxNjAsIDI0NCwgMjEyLCA5NCwgMSwgMjEyLCAKKyAgICAxNjAsIDIzMCwgMTgxLCA5NCwgMSwgMjEyLCAxNjAsIDI0MCwgMTA4LCA5NCwgMSwgMjEyLCAxNjAsIDIzOSwgNSwgOTQsIDEsIAorICAgIDIxMiwgMTYwLCAyMzcsIDE1NywgOTQsIDEsIDIxMiwgMTYwLCAyMDgsIDIwLCA5NCwgMSwgMjEyLCAxNjAsIDIwMiwgMTE2LCAKKyAgICA5NCwgMSwgMjEyLCAxNjAsIDIxNiwgMjE2LCA5NCwgMSwgMjEyLCAxNjAsIDI0NiwgMTk5LCA5NCwgMSwgMjEyLCAxNjAsIAorICAgIDIwMiwgODAsIDk0LCAxLCAyMjUsIDExOSwgNzUsIDk0LCAxLCAyMjUsIDExOSwgMTczLCA5NCwgMSwgMjI1LCAxMTksIDIxNiwgCisgICAgMjIwLCA5NCwgMSwgMjI1LCAxMTksIDI0MCwgMTA4LCA5NCwgMSwgMjI1LCAxMTksIDIwMiwgODAsIDk0LCAxLCAyNTEsIDIyLCAKKyAgICAyMzgsIDI0NCwgMjUwLCAxODEsIDEwNSwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCAyMDUsIDIwMCwgMTA1LCA5NCwgMSwgCisgICAgMjUxLCAyMiwgMjM4LCAyNDQsIDI0NCwgMTc0LCA5NCwgMSwgMjUxLCAyMiwgMjM4LCAyNDQsIDIwNywgMzQsIDk0LCAxLCAKKyAgICAyNTEsIDIyLCAyMzgsIDI0NCwgMjMwLCAyMzksIDIwNywgMzQsIDk0LCAxLCAyNTEsIDIyLCAyMzgsIDI0NCwgMjQ4LCAyNDUsIAorICAgIDk0LCAxLCAyNTEsIDIyLCAyMzgsIDI0NCwgMTI2LCAyNDgsIDI0NSwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCA2MywgCisgICAgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCA3NSwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCAxNzMsIDk0LCAxLCAyNTEsIAorICAgIDIyLCAyMzgsIDI0NCwgMjIyLCAyMDMsIDk0LCAxLCAyNTEsIDIyLCAyMzgsIDI0NCwgMjQ3LCA5MiwgOTQsIDEsIDI1MSwgCisgICAgMjIsIDIzOCwgMjQ0LCAyMDcsIDI0MSwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCAyMDcsIDIyOSwgOTQsIDEsIDI1MSwgCisgICAgMjIsIDIzOCwgMjQ0LCAyNDQsIDEyMCwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCAyMjEsIDIyNywgOTQsIDEsIDI1MSwgCisgICAgMjIsIDIzOCwgMjQ0LCAyMTAsIDIyLCA5NCwgMSwgMjUxLCAyMiwgMjM4LCAyNDQsIDI0NCwgMjEyLCA5NCwgMSwgMjUxLCAKKyAgICAyMiwgMjM4LCAyNDQsIDE4NSwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCAyMTgsIDIwOCwgOTQsIDEsIDI1MSwgMjIsIAorICAgIDIzOCwgMjQ0LCAyMTEsIDE2NCwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCAyMDIsIDgwLCA5NCwgMSwgMjUxLCAyMiwgCisgICAgMjM4LCAyNDQsIDIwMiwgMTE2LCA5NCwgMSwgMjUxLCAyMiwgMjM4LCAyNDQsIDI1MSwgNzMsIDk0LCAxLCAyMDgsIDE3MCwgCisgICAgMjUxLCAyMiwgMjM4LCAyNDQsIDIxMCwgMjIsIDk0LCAxLCAyMDgsIDE3MCwgMjUxLCAyMiwgMjM4LCAyNDQsIDIwMiwgODAsIAorICAgIDk0LCAxLCAyMjUsIDExOSwgMjUxLCAyMiwgMjM4LCAyNDQsIDIzOCwgMTE5LCA5NCwgMSwgMjI1LCAxMTksIDI1MSwgMjIsIAorICAgIDIzOCwgMjQ0LCAyMjIsIDIwMywgOTQsIDEsIDIyNSwgMTE5LCAyNTEsIDIyLCAyMzgsIDI0NCwgMjQ3LCA5MiwgOTQsIDEsIAorICAgIDIyNSwgMTE5LCAyNTEsIDIyLCAyMzgsIDI0NCwgMjMwLCAxNDksIDk0LCAxLCAyMjUsIDExOSwgMjUxLCAyMiwgMjM4LCAKKyAgICAyNDQsIDIwNywgMjQxLCA5NCwgMSwgMjI1LCAxMTksIDI1MSwgMjIsIDIzOCwgMjQ0LCAyNDQsIDEwNCwgOTQsIDEsIDIyNSwgCisgICAgMTE5LCAyNTEsIDIyLCAyMzgsIDI0NCwgMjEwLCAyMiwgOTQsIDEsIDIyNSwgMTE5LCAyNTEsIDIyLCAyMzgsIDI0NCwgMjQ0LCAKKyAgICAxLCA5NCwgMSwgMjI1LCAxMTksIDI1MSwgMjIsIDIzOCwgMjQ0LCAyMTEsIDE2NCwgOTQsIDEsIDIyNSwgMTE5LCAyNTEsIAorICAgIDIyLCAyMzgsIDI0NCwgMjQ1LCA2NSwgOTQsIDEsIDIyNSwgMTE5LCAyNTEsIDIyLCAyMzgsIDI0NCwgMjAyLCA4MCwgOTQsIAorICAgIDEsIDIyNSwgMTE5LCAyNTEsIDIyLCAyMzgsIDI0NCwgMjAyLCAxMTYsIDk0LCAxLCAyNTEsIDIyLCAyMzgsIDI0NCwgMTYyLCAKKyAgICA2OCwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCAxNjIsIDE5OCwgOTQsIDEsIDIyNSwgMTE5LCAyNTEsIDIyLCAyMzgsIAorICAgIDI0NCwgMjQ4LCA5OCwgOTQsIDEsIDI1MSwgMjIsIDIzOCwgMjQ0LCAyNDQsIDIwMSwgOTQsIDEsIDIyNSwgMTE5LCAyNTEsIAorICAgIDIyLCAyMzgsIDI0NCwgMjI3LCAxNjEsIDE5LCAyMCwgMjE5LCAxODgsIDE5LCAyMCwgMjUwLCA4LCAxOSwgMjAsIDI1MSwgCisgICAgMjM2LCAxOSwgMjAsIDIwNCwgNjUsIDE5LCAyMCwgMjE4LCAxMywgMTksIDIwLCAyMTksIDQzLCAxOSwgMjAsIDIxNywgMTQzLCAKKyAgICAxOSwgMjAsIDIwOSwgMTk2LCAxOSwgMjAsIDIyOSwgMjA4LCAxOSwgMjAsIDIyOCwgMTY0LCAxOSwgMjAsIDIyNSwgNjMsIAorICAgIDE5LCAyMCwgMjIxLCAxNDksIDE5LCAyMCwgMjIzLCA1OSwgMTksIDIwLCAyMjcsIDI0NCwgMTksIDIwLCAyMTEsIDIzMiwgCisgICAgMTksIDIwLCAyMTQsIDIwOCwgMTksIDIwLCAyMTIsIDIwNywgMTksIDIwLCAyMTMsIDQ3LCAxOSwgMjAsIDIxMiwgMTcyLCAKKyAgICAxOSwgMjAsIDIwMiwgMjIyLCAxOSwgMjAsIDIwMywgNTgsIDE5LCAyMCwgMjE2LCAxNjUsIDE5LCAyMCwgMjIxLCAxNywgMTksIAorICAgIDIwLCAyMjAsIDUzLCAyMjEsIDE3LCAxOSwgMjAsIDIyMSwgMTYsIDE5LCAyMCwgMjIwLCA1MywgMjIxLCAxNiwgMTksIDIwLCAKKyAgICAyMjEsIDE1LCAxOSwgMjAsIDIyMCwgNTMsIDIyMSwgMTUsIDE5LCAyMCwgMjIxLCAxNCwgMTksIDIwLCAyMjAsIDUzLCAyMjEsIAorICAgIDE0LCAxOSwgMjAsIDIxNSwgMTA3LCAxOSwgMjAsIDIxNSwgMTA2LCAxOSwgMjAsIDIxNSwgMTA1LCAxOSwgMjAsIDIxNSwgCisgICAgMTA0LCAxOSwgMjAsIDIxNSwgMTAzLCAxOSwgMjAsIDIxNSwgMTExLCAxOSwgMjAsIDIyMCwgNTMsIDIxOSwgMTg0LCAxOSwgCisgICAgMjAsIDIyMCwgNTMsIDIxMCwgNjksIDE5LCAyMCwgMjIwLCA1MywgMjMwLCA1NCwgMTksIDIwLCAyMjAsIDUzLCAyNDcsIAorICAgIDEyNSwgMTksIDIwLCAyMjAsIDUzLCAyMjYsIDE4NSwgMTksIDIwLCAyMjAsIDUzLCAyMjMsIDE2MywgMTksIDIwLCAyMjAsIAorICAgIDUzLCAxOTQsIDE5LCAyMCwgMjIwLCA1MywgMjEzLCA5MiwgMTksIDIwLCAyNDEsIDE3NCwgMjA0LCAxNDQsIDE5LCAyMCwgCisgICAgMjA0LCA0NCwgMjA0LCAxNDQsIDE5LCAyMCwgNDYsIDUsIDIxNSwgMjUyLCAxOSwgMjAsIDQ2LCAyMTYsIDE4OCwgMjQzLCAKKyAgICA4NSwgMTksIDIwLCAyMTcsIDAsIDIxNSwgMTA4LCAxOSwgMjAsIDE5NiwgMjI3LCAxOCwgMTksIDIwLCAxOTYsIDIyOCwgCisgICAgMTEyLCAxOSwgMjAsIDIwOSwgMTEsIDE5LCAyMCwgMjA5LCAxMywgMTksIDIwLCAyMDcsIDIyMSwgMTksIDIwLCAyMDcsIAorICAgIDIyMywgMTksIDIwLCAyMDcsIDIyOCwgMTksIDIwLCAyMDgsIDE4MCwgMTksIDIwLCAyMDgsIDE4MiwgMTksIDIwLCAyMTQsIAorICAgIDIwNiwgMjEyLCAxNzcsIDE5LCAyMCwgMjE0LCAyMDYsIDIxMiwgMjM2LCAxOSwgMjAsIDIxNCwgMjA2LCAyMzYsIDExNywgCisgICAgMTksIDIwLCA4OCwgMjM3LCAxODUsIDE5LCAyMCwgODgsIDI0NCwgMzUsIDIzOCwgMTgyLCAxOSwgMjAsIDg4LCAyMzksIDUsIAorICAgIDE5LCAyMCwgODgsIDIzNywgMTkwLCAxOSwgMjAsIDIxNCwgMjA2LCAyMzAsIDY0LCAxOSwgMjAsIDg4LCAyMzAsIDYyLCAxOSwgCisgICAgMjAsIDI0OCwgMTUzLCAyNDQsIDM1LCAxNTksIDE5LCAyMCwgMjQ4LCAxNTMsIDI0NCwgMzUsIDE0NiwgMTksIDIwLCA4OCwgCisgICAgMjQ0LCAzMCwgMTk0LCAyMjcsIDEyNCwgMjA1LCAxNjksIDIyNywgMTc0LCAyMjcsIDEyNCwgMSwgMTczLCAyMjcsIDEyNCwgCisgICAgMSwgMjI5LCAxNDQsIDIyNywgMTI0LCAxLCAyMzksIDgsIDIyNywgMTI0LCAxLCAyMzgsIDExOSwgMjI3LCAxMjQsIDEsIAorICAgIDIyMiwgMjAzLCAyMjcsIDEyNCwgMSwgMjQ3LCA5MiwgMjI3LCAxMjQsIDEsIDI0NiwgMTk5LCAyMjcsIDEyNCwgMSwgMjMwLCAKKyAgICAxODEsIDIyNywgMTI0LCAxLCAyMzAsIDE0OSwgMjI3LCAxMjQsIDEsIDIwMywgNzgsIDIyNywgMTI0LCAxLCAyMTAsIDIyLCAKKyAgICAyMjcsIDEyNCwgMSwgMjA5LCAxMDgsIDIyNywgMTI0LCAxLCAyNDQsIDIxMiwgMjI3LCAxMjQsIDEsIDI0NCwgMSwgMjI3LCAKKyAgICAxMjQsIDEsIDIwMSwgMjAxLCAyMjcsIDEyNCwgMSwgMTg1LCAyMjcsIDEyNCwgMSwgMjE4LCAyMDgsIDIyNywgMTI0LCAxLCAKKyAgICAyNDksIDMyLCAyMjcsIDEyNCwgMSwgMjQ4LCA5OCwgMjI3LCAxMjQsIDEsIDE5MiwgMjI3LCAxMjQsIDEsIDE5OCwgMjI3LCAKKyAgICAxMjQsIDEsIDIxNiwgMjIwLCAyMjcsIDEyNCwgMSwgMjI4LCAxMTMsIDIyNywgMTI0LCAxLCAyMDQsIDExMSwgMjI3LCAxMjQsIAorICAgIDEsIDIxMywgOTAsIDIyNywgMTI0LCAxLCAyMTEsIDE2NCwgMjI3LCAxMjQsIDEsIDIxNSwgMzYsIDIyNywgMTI0LCAxLCAKKyAgICAxNTIsIDIyNywgMTI0LCAxLCAyMzcsIDE4MSwgMjI3LCAxMjQsIDEsIDIwOCwgMTE5LCAyMjcsIDEyNCwgMjIsIDIsIDYzLCAKKyAgICAyMjcsIDEyNCwgMjIsIDIsIDc1LCAyMjcsIDEyNCwgMjIsIDIsIDY4LCAyMjcsIDEyNCwgMjIsIDIsIDI0MSwgMTYxLCAyMjcsIAorICAgIDEyNCwgMjIsIDIsIDI1MSwgNjQsIDIyNywgMTI0LCAyMiwgMiwgMjIwLCAxOCwgMjI3LCAxMjQsIDIyLCAyLCAyNTAsIDM0LCAKKyAgICAyMjcsIDEyNCwgMjIsIDIsIDc0LCAyMjcsIDEyNCwgMjIsIDIsIDc4LCAyMjcsIDEyNCwgMjEwLCAyNTQsIDEsIDE5OCwgCisgICAgMjI3LCAxMjQsIDIxMCwgMjU0LCAxLCAyMTYsIDIyMCwgMjI3LCAxMjQsIDIxMCwgMjU0LCAxLCAyMDQsIDExMSwgMjI3LCAKKyAgICAxMjQsIDUsIDEsIDE3MywgMjI3LCAxMjQsIDUsIDEsIDIyMiwgMjAzLCAyMjcsIDEyNCwgNSwgMSwgMjUwLCAxODAsIDIyNywgCisgICAgMTI0LCA1LCAxLCAyMTAsIDIyLCAyMjcsIDEyNCwgNSwgMSwgMjAxLCAyMDEsIDIyNywgMTI0LCA1LCAxLCAxODUsIDIyNywgCisgICAgMTI0LCA1LCAxLCAxOTIsIDIyNywgMTI0LCA1LCAxLCAyMTYsIDIyMCwgMjI3LCAxMjQsIDUsIDEsIDIyOCwgMTEzLCAyMjcsIAorICAgIDEyNCwgMiwgMjIzLCAyMzEsIDIyNywgMTI0LCAyLCAyMjksIDE4NiwgMjI3LCAxMjQsIDIsIDIxNSwgMzQsIDIyNywgMTI0LCAKKyAgICAyLCAyMjcsIDE4LCAyMjcsIDEyNCwgMjQwLCAyMTIsIDgyLCAyMjcsIDEyNCwgMjE3LCA0NywgODIsIDIyNywgMTI0LCAxNywgCisgICAgMjAyLCA4NCwgMjI3LCAxMjQsIDE3LCAxMDUsIDIyNywgMTI0LCAxNywgMTA4LCAyMjcsIDEyNCwgMTcsIDE0NywgMjI3LCAKKyAgICAxMjQsIDE3LCAxNDksIDIyNywgMTI0LCAxNywgMTcwLCAyMjcsIDEyNCwgMTcsIDE5NSwgMjI3LCAxMjQsIDE3LCAyMTMsIAorICAgIDExMSwgMjI3LCAxMjQsIDE3LCAxOTksIDIyNywgMTI0LCAxNywgMjIyLCA2MywgNDUsIDIyNywgMjM1LCAxLCAxNzMsIDQ1LCAKKyAgICAyMjcsIDIzNSwgMSwgMjAzLCAxODIsIDQ1LCAyMjcsIDIzNSwgMSwgMjIyLCAyMDMsIDQ1LCAyMjcsIDIzNSwgMSwgMjA4LCAKKyAgICAyMCwgNDUsIDIyNywgMjM1LCAxLCAyMTUsIDM2LCA0NSwgMjI3LCAyMzUsIDEsIDE5OCwgNDUsIDIyNywgMjM1LCAxLCAyMTAsIAorICAgIDIyLCA0NSwgMjI3LCAyMzUsIDEsIDIwOSwgMTA4LCA0NSwgMjI3LCAyMzUsIDEsIDIyOCwgMTEzLCA0NSwgMjI3LCAyMzUsIAorICAgIDEsIDE4NSwgNDUsIDIyNywgMjM1LCAxLCAyMTgsIDIwOCwgNDUsIDIyNywgMjM1LCAxLCAxOTIsIDQ1LCAyMjcsIDIzNSwgMSwgCisgICAgMjQwLCAxMDgsIDQ1LCAyMjcsIDIzNSwgMSwgMjA2LCA4NiwgNDUsIDIyNywgMjM1LCAxLCAxNTIsIDQ1LCAyMjcsIDIzNSwgCisgICAgMSwgMjE3LCAxMjYsIDQ1LCAyMjcsIDIzNSwgMSwgMjI5LCAxNDQsIDQ1LCAyMjcsIDIzNSwgMSwgMjA4LCAxMCwgNDUsIAorICAgIDIyNywgMjM1LCAxLCAyMDEsIDIwMSwgNDUsIDIyNywgMjM1LCAxLCA2MywgNDUsIDIyNywgMjM1LCAxLCA3NSwgNDUsIDIyNywgCisgICAgMjM1LCAxLCAyNDEsIDE2MSwgNDUsIDIyNywgMjM1LCAxLCAyNDEsIDE0NywgNDUsIDIyNywgMjM1LCAxLCA2OCwgNDUsIAorICAgIDIyNywgMjM1LCAxLCAyMjAsIDE4LCA0NSwgMjI3LCAyMzUsIDEsIDc4LCA0NSwgMjI3LCAyMzUsIDEsIDIwNywgMjQsIDQ1LCAKKyAgICAyMjcsIDIzNSwgMSwgNzQsIDQ1LCAyMjcsIDIzNSwgMSwgMjUwLCAzMiwgNDUsIDIyNywgMjM1LCAxLCAyNTEsIDY0LCA0NSwgCisgICAgMjI3LCAyMzUsIDEsIDIwOCwgMTU5LCA0NSwgMjI3LCAyMzUsIDEsIDIwOCwgMTU4LCA0NSwgMjI3LCAyMzUsIDEsIDIwOCwgCisgICAgMTU3LCA0NSwgMjI3LCAyMzUsIDEsIDIwOCwgMTU2LCA0NSwgMjI3LCAyMzUsIDEsIDIwOCwgMTU1LCAyMjIsIDIxNCwgNDUsIAorICAgIDIyNiwgMjMzLCAxLCAxMzgsIDIxNywgMTI2LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMjQsIDIxNywgMTI2LCAKKyAgICAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMzgsIDE3MywgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTM4LCAyMDMsIAorICAgIDE4MiwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTM4LCAyMjIsIDIwMywgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgCisgICAgMTI0LCAxNzMsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDEyNCwgMjAzLCAxODIsIDIyMiwgMjE0LCA0NSwgMjI2LCAKKyAgICAyMzMsIDEsIDEyNCwgMjIyLCAyMDMsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDEzOCwgMjA4LCAyMCwgMjIyLCAyMTQsIAorICAgIDQ1LCAyMjYsIDIzMywgMSwgMTM4LCAyMTUsIDM2LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMzgsIDE5OCwgMjIyLCAKKyAgICAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTI0LCAyMDgsIDIwLCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMjQsIDIxNSwgCisgICAgMzYsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDEyNCwgMTk4LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMzgsIAorICAgIDIxMCwgMjIsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDEzOCwgMjA5LCAxMDgsIDIyMiwgMjE0LCA0NSwgMjI2LCAKKyAgICAyMzMsIDEsIDEzOCwgMjAxLCAyMDEsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDEyNCwgMjEwLCAyMiwgMjIyLCAyMTQsIAorICAgIDQ1LCAyMjYsIDIzMywgMSwgMTI0LCAyMDksIDEwOCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTI0LCAyMDEsIDIwMSwgCisgICAgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTM4LCAxODUsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDEzOCwgMjE4LCAKKyAgICAyMDgsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDEzOCwgMTkyLCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMjQsIAorICAgIDE4NSwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTI0LCAyMTgsIDIwOCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgCisgICAgMTI0LCAxOTIsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDEzOCwgMjQwLCAxMDgsIDIyMiwgMjE0LCA0NSwgMjI2LCAKKyAgICAyMzMsIDEsIDEzOCwgMjA2LCA4NiwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTM4LCAyMjgsIDExMywgMjIyLCAyMTQsIAorICAgIDQ1LCAyMjYsIDIzMywgMSwgMTI0LCAyNDAsIDEwOCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTI0LCAyMDYsIDg2LCAKKyAgICAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMjQsIDIyOCwgMTEzLCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMzgsIAorICAgIDE1MiwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTM4LCAyNDQsIDIxMiwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgCisgICAgMTM4LCAyNDksIDMyLCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMjQsIDE1MiwgMjIyLCAyMTQsIDQ1LCAyMjYsIAorICAgIDIzMywgMSwgMTI0LCAyNDQsIDIxMiwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgMTI0LCAyNDksIDMyLCAyMjIsIDIxNCwgCisgICAgNDUsIDIyNiwgMjMzLCAxLCAxMzgsIDIyOCwgMTY5LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMzgsIDIwMywgMTQ5LCAKKyAgICAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMjQsIDIyOCwgMTY5LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMjQsIAorICAgIDIwMywgMTQ5LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCAxMzgsIDIxMSwgOSwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgCisgICAgMSwgMTI0LCAyMTEsIDksIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDIyLCAyLCAyMiwgMjEyLCAyMTYsIDIyMiwgMjE0LCAKKyAgICA0NSwgMjI2LCAyMzMsIDIyLCAyLCAyNTIsIDI1LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAyMiwgMiwgMjMxLCA4MywgCisgICAgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMjIsIDIsIDY4LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAyMiwgMiwgMjA2LCAKKyAgICAxNzgsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDIyLCAyLCA3NCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMjIsIDIsIAorICAgIDI1MSwgMTA5LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAyMiwgMiwgNzgsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDIyLCAKKyAgICAyLCAyMjAsIDk3LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAyMiwgMiwgMjA3LCAyNCwgMjIyLCAyMTQsIDQ1LCAyMjYsIAorICAgIDIzMywgMjIsIDIsIDI1MCwgOCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMjIsIDIsIDI1MSwgMjM2LCAyMjIsIDIxNCwgCisgICAgNDUsIDIyNiwgMjMzLCAyMiwgMiwgMjA2LCAxNzAsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDIyLCAyLCAyMTksIDE4OCwgCisgICAgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMjIsIDIsIDIyMCwgOTQsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDIyLCAyLCAKKyAgICAyMDcsIDIwLCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAyMiwgMiwgMjMwLCAxOTIsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIAorICAgIDEsIDQ2LCAyMDYsIDE2NCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgNDYsIDIyMiwgMjA1LCAyMjIsIDIxNCwgNDUsIAorICAgIDIyNiwgMjMzLCAxLCA0NiwgMjIzLCAxNjMsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDQ2LCAyMjYsIDE4NSwgMjIyLCAKKyAgICAyMTQsIDQ1LCAyMjYsIDIzMywgMSwgNDYsIDIzMCwgNTQsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDEsIDQ2LCAyNDUsIAorICAgIDUxLCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxLCA0NiwgMjQ5LCAyNTUsIDIyMiwgMjE0LCA0NSwgMjI2LCAyMzMsIDE0MywgCisgICAgMjI1LCA5MiwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMTQzLCAyMjUsIDkxLCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAKKyAgICAxNywgMjAyLCA4NCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMTcsIDEwNSwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMTcsIAorICAgIDEwOCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMTcsIDE0NywgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMTcsIDE0OSwgCisgICAgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMTcsIDE3MCwgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMTcsIDE5NSwgMjIyLCAKKyAgICAyMTQsIDQ1LCAyMjYsIDIzMywgMTcsIDIxMywgMTExLCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAxNywgMTk5LCAyMjIsIAorICAgIDIxNCwgNDUsIDIyNiwgMjMzLCAxNywgMjIyLCA2MywgMjIyLCAyMTQsIDQ1LCAyMjYsIDIzMywgMTA0LCAxNywgMTA1LCAKKyAgICAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAyLCAyMjgsIDk3LCAyMjIsIDIxNCwgNDUsIDIyNiwgMjMzLCAyLCAyMjgsIDk2LCAKKyAgICA4NSwgMTYsIDIxOSwgNTEsIDg1LCAxNiwgMjIzLCAyMTEsIDIyOSwgMjIsIDg1LCAxNiwgMjE4LCAxMzAsIDIyOSwgMjIsIAorICAgIDg1LCAxNiwgMjQ4LCAxMzQsIDIyOSwgMjIsIDg1LCAxNiwgMjQ3LCAxNjYsIDIyOSwgMjIsIDg1LCAxNiwgMjE4LCA4LCAKKyAgICAyMjksIDIyLCA4NSwgMTYsIDIxOCwgMiwgMjI5LCAyMiwgODUsIDE2LCAyMTgsIDAsIDIyOSwgMjIsIDg1LCAxNiwgMjE4LCAKKyAgICA2LCAyMjksIDIyLCA4NSwgMTYsIDIxOCwgNCwgMjI5LCAyMiwgODUsIDE2LCAyNDQsIDE2MSwgMjI5LCAyMiwgODUsIDE2LCAKKyAgICAyNDQsIDE1NywgMjI5LCAyMiwgODUsIDE2LCAyNDQsIDE1NiwgMjI5LCAyMiwgODUsIDE2LCAyNDQsIDE1OSwgMjI5LCAyMiwgCisgICAgODUsIDE2LCAyNDQsIDE1OCwgMjI5LCAyMiwgODUsIDE2LCAyNDQsIDE1NSwgMjI5LCAyMiwgODUsIDE2LCAyMDcsIDE2NywgCisgICAgODUsIDE2LCAyMjMsIDIxMSwgMjE1LCAyMjAsIDg1LCAxNiwgMjE4LCAxMzAsIDIxNSwgMjIwLCA4NSwgMTYsIDI0OCwgMTM0LCAKKyAgICAyMTUsIDIyMCwgODUsIDE2LCAyNDcsIDE2NiwgMjE1LCAyMjAsIDg1LCAxNiwgMjE4LCA4LCAyMTUsIDIyMCwgODUsIDE2LCAKKyAgICAyMTgsIDIsIDIxNSwgMjIwLCA4NSwgMTYsIDIxOCwgMCwgMjE1LCAyMjAsIDg1LCAxNiwgMjE4LCA2LCAyMTUsIDIyMCwgODUsIAorICAgIDE2LCAyMTgsIDQsIDIxNSwgMjIwLCA4NSwgMTYsIDI0NCwgMTYxLCAyMTUsIDIyMCwgODUsIDE2LCAyNDQsIDE1NywgMjE1LCAKKyAgICAyMjAsIDg1LCAxNiwgMjQ0LCAxNTYsIDIxNSwgMjIwLCA4NSwgMTYsIDI0NCwgMTU5LCAyMTUsIDIyMCwgODUsIDE2LCAyNDQsIAorICAgIDE1OCwgMjE1LCAyMjAsIDg1LCAxNiwgMjQ0LCAxNTUsIDIxNSwgMjIwLCAyNDcsIDE4NiwgMSwgMTczLCAyNDcsIDE4NiwgMSwgCisgICAgMjM5LCA4LCAyNDcsIDE4NiwgMSwgMjIyLCAyMDMsIDI0NywgMTg2LCAxLCAyMjIsIDE0NiwgMjQ3LCAxODYsIDEsIDE4NSwgCisgICAgMjQ3LCAxODYsIDEsIDI0OSwgMzIsIDI0NywgMTg2LCAxLCAxOTIsIDI0NywgMTg2LCAxLCAyMjMsIDI1MCwgMjQ3LCAxODYsIAorICAgIDEsIDIxMCwgMjIsIDI0NywgMTg2LCAxLCAyNDQsIDIxMiwgMjQ3LCAxODYsIDEsIDIwMSwgMjAxLCAyNDcsIDE4NiwgMSwgCisgICAgMjIxLCAxNDcsIDI0NywgMTg2LCAxLCAyNDcsIDkyLCAyNDcsIDE4NiwgMSwgMjMwLCAxODEsIDI0NywgMTg2LCAxLCAyMjEsIAorICAgIDExLCAyNDcsIDE4NiwgMSwgMjIxLCAzLCAyNDcsIDE4NiwgMSwgMTk4LCAyNDcsIDE4NiwgMSwgMjE2LCAyMjAsIDI0NywgCisgICAgMTg2LCAxLCAyMjgsIDExMywgMjQ3LCAxODYsIDEsIDIwNiwgODYsIDI0NywgMTg2LCAxLCAyMTUsIDM2LCAyNDcsIDE4NiwgCisgICAgMSwgNjMsIDI0NywgMTg2LCAxLCAxNTIsIDI0NywgMTg2LCAyMiwgMiwgNzUsIDI0NywgMTg2LCAyMiwgMiwgNjgsIDI0NywgCisgICAgMTg2LCAyMiwgMiwgNzQsIDI0NywgMTg2LCAyMiwgMiwgNzgsIDI0NywgMTg2LCAyMiwgMiwgMjUxLCAxMDksIDI0NywgMTg2LCAKKyAgICAyMTksIDEzNiwgMjQ3LCAxODYsIDI0MSwgODQsIDc2LCAyMTQsIDE2NywgNDUsIDEwNCwgMSwgMTM4LCAxNzMsIDQ1LCAxMDQsIAorICAgIDEsIDEzOCwgMjI5LCAxNDQsIDQ1LCAxMDQsIDEsIDEzOCwgMjI4LCAxNTMsIDQ1LCAxMDQsIDEsIDEyNCwgMTczLCA0NSwgCisgICAgMTA0LCAxLCAxMjQsIDIyOCwgMTUzLCA0NSwgMTA0LCAxLCAxMjQsIDIyOSwgMTQ0LCA0NSwgMTA0LCAxLCAyMjIsIDIwMywgCisgICAgNDUsIDEwNCwgMSwgMTM4LCAyNDcsIDkyLCA0NSwgMTA0LCAxLCAxMzgsIDI0NiwgMTk5LCA0NSwgMTA0LCAxLCAxMjQsIAorICAgIDI0NywgOTIsIDQ1LCAxMDQsIDEsIDEyNCwgMjE1LCAzNiwgNDUsIDEwNCwgMSwgMTI0LCAyNDYsIDE5OSwgNDUsIDEwNCwgMSwgCisgICAgMjIxLCAxMSwgNDUsIDEwNCwgMSwgMjE2LCAxNzEsIDQ1LCAxMDQsIDEsIDEzOCwgMjE2LCAxNjksIDQ1LCAxMDQsIDEsIAorICAgIDI0NCwgMjEyLCA0NSwgMTA0LCAxLCAxMjQsIDIxNiwgMTY5LCA0NSwgMTA0LCAxLCAyMTYsIDE4MCwgNDUsIDEwNCwgMSwgCisgICAgMTM4LCAyMTAsIDIyLCA0NSwgMTA0LCAxLCAxMzgsIDIwOSwgMTA4LCA0NSwgMTA0LCAxLCAxMjQsIDIxMCwgMjIsIDQ1LCAKKyAgICAxMDQsIDEsIDEyNCwgMjA5LCAxMDgsIDQ1LCAxMDQsIDEsIDIwMSwgMjAxLCA0NSwgMTA0LCAxLCAyNDksIDMyLCA0NSwgCisgICAgMTA0LCAxLCAxMzgsIDE4NSwgNDUsIDEwNCwgMSwgMTM4LCAyMTgsIDIwOCwgNDUsIDEwNCwgMSwgMTM4LCAyNDAsIDEwOCwgCisgICAgNDUsIDEwNCwgMSwgMTI0LCAxODUsIDQ1LCAxMDQsIDEsIDEyNCwgMjQwLCAxMDgsIDQ1LCAxMDQsIDEsIDEyNCwgMjE4LCAKKyAgICAyMDgsIDQ1LCAxMDQsIDEsIDE5MiwgNDUsIDEwNCwgMSwgMTI0LCAxOTgsIDQ1LCAxMDQsIDEsIDEzOCwgMTk4LCA0NSwgCisgICAgMTA0LCAxLCAyMTYsIDIyMCwgNDUsIDEwNCwgMSwgMjE1LCAxNDAsIDQ1LCAxMDQsIDEsIDIyOCwgMTEzLCA0NSwgMTA0LCAxLCAKKyAgICAyMjYsIDIzMiwgNDUsIDEwNCwgMSwgMjA0LCAxMTEsIDQ1LCAxMDQsIDEsIDEzOCwgMjEzLCA5MCwgNDUsIDEwNCwgMSwgCisgICAgMTM4LCAyMTEsIDE2NCwgNDUsIDEwNCwgMSwgMTM4LCAyMTUsIDM2LCA0NSwgMTA0LCAxLCAxMzgsIDE1MiwgNDUsIDEwNCwgCisgICAgMSwgMjI3LCA3NywgNDUsIDEwNCwgMSwgNjMsIDQ1LCAxMDQsIDEsIDEyNCwgMTUyLCA0NSwgMTA0LCAxLCA3NSwgNDUsIAorICAgIDEwNCwgMSwgMjMxLCA4MywgNDUsIDEwNCwgMSwgNjgsIDQ1LCAxMDQsIDEsIDIwNiwgMTc4LCA0NSwgMTA0LCAxLCAyNDEsIAorICAgIDE2MSwgNDUsIDEwNCwgMSwgMjIwLCAxOCwgNDUsIDEwNCwgMSwgMjI4LCA5NywgNDUsIDEwNCwgMSwgMjM3LCAyNDksIDIxNSwgCisgICAgMzYsIDQ1LCAxMDQsIDEwOSwgMiwgMTc0LCAyMTYsIDIyMCwgNDUsIDEwNCwgMTA5LCAyLCAxNzQsIDIyOCwgMTEzLCA0NSwgCisgICAgMTA0LCAxMDksIDIsIDIyOCwgMTE0LCAyMDksIDIyOCwgMjI4LCA4NiwgNDUsIDEwNCwgMiwgMjI1LCAxNDEsIDIzMCwgMSwgCisgICAgMjI4LCA4NiwgNDUsIDEwNCwgMTA5LCAyLCA0NiwgMjIyLCAyMDMsIDQ1LCAxMDQsIDEwOSwgMiwgMTI0LCAxODUsIDQ1LCAKKyAgICAxMDQsIDEwOSwgMiwgMTM4LCAyMTYsIDE3MCwgMjE5LCAyNDUsIDEyNCwgMTg1LCA0NSwgMTA0LCAxMDksIDIsIDE5MiwgNDUsIAorICAgIDEwNCwgMTA5LCAyLCAyNDksIDMyLCA0NSwgMTA0LCAxMDksIDIsIDIxNSwgMzYsIDQ1LCAxMDQsIDIsIDIxNSwgMTAsIDQ1LCAKKyAgICAxMDQsIDIyLCAyLCA2MywgNDUsIDEwNCwgMjIsIDIsIDIyNSwgMTQxLCAyMTQsIDIyNSwgNDUsIDEwNCwgMjIsIDIsIDI1MiwgCisgICAgMjUsIDQ1LCAxMDQsIDIyLCAyLCAyMDksIDIzNCwgMjUyLCAyNSwgNDUsIDEwNCwgMjIsIDIsIDc1LCA0NSwgMTA0LCAyMiwgCisgICAgMiwgMjMxLCA4MywgNDUsIDEwNCwgMjIsIDIsIDIwNywgMjQsIDQ1LCAxMDQsIDIyLCAyLCAyMDYsIDE3NywgNDUsIDEwNCwgCisgICAgMjIsIDIsIDY4LCA0NSwgMTA0LCAyMiwgMiwgMjA2LCAxNzgsIDQ1LCAxMDQsIDIyLCAyLCA3OCwgNDUsIDEwNCwgMjIsIDIsIAorICAgIDIyMCwgOTgsIDU2LCA0NSwgMTA0LCAyMiwgMiwgMjE5LCAxODgsIDQ1LCAxMDQsIDIyLCAyLCA3NCwgNDUsIDEwNCwgMjIsIAorICAgIDIsIDI1MSwgMTA5LCA0NSwgMTA0LCAyMiwgMiwgMjIwLCAxOCwgNDUsIDEwNCwgMjIsIDIsIDI1MSwgNjQsIDQ1LCAxMDQsIAorICAgIDIyLCAyLCAxMDQsIDI1MSwgNjQsIDQ1LCAxMDQsIDIyLCAyLCAyMjAsIDk4LCA1NSwgNDUsIDEwNCwgMiwgMjI1LCAxNDEsIAorICAgIDIzMCwgMCwgNDUsIDEwNCwgMiwgMjA4LCAxNjAsIDQ1LCAxMDQsIDIsIDIwOCwgMTU5LCA0NSwgMTA0LCAyLCAyMjksIDEwNSwgCisgICAgMjA4LCAxNTgsIDQ1LCAxMDQsIDIsIDIyOSwgMTA1LCAyMDgsIDE1NywgNDUsIDEwNCwgMiwgMjI5LCAxMDUsIDIwOCwgMTU2LCAKKyAgICA0NSwgMTA0LCAyLCAyMTYsIDIyMSwgMjM3LCAxNTYsIDQ1LCAxMDQsIDIsIDIyNSwgMTQxLCAyMTQsIDI1MywgNDUsIDEwNCwgCisgICAgMiwgMjI5LCAxMDQsIDIyOSwgMjM5LCA0NSwgMTA0LCAzOSwgMjQ1LCAxMTMsIDI0MywgODUsIDQ1LCAxMDQsIDIzNiwgMTA4LCAKKyAgICAxNywgMjAyLCA4NCwgNDUsIDEwNCwgMjM2LCAxMDgsIDE3LCAxMDUsIDQ1LCAxMDQsIDIzNiwgMTA4LCAxNywgMTA4LCA0NSwgCisgICAgMTA0LCAyMzYsIDEwOCwgMTcsIDE0NywgNDUsIDEwNCwgMjM2LCAxMDgsIDE3LCAxNDksIDQ1LCAxMDQsIDIzNiwgMTA4LCAKKyAgICAxNywgMTcwLCA0NSwgMTA0LCAyMzYsIDEwOCwgMTcsIDE5NSwgNDUsIDEwNCwgMjM2LCAxMDgsIDE3LCAyMTMsIDExMSwgNDUsIAorICAgIDEwNCwgMjM2LCAxMDgsIDE3LCAxOTksIDQ1LCAxMDQsIDIzNiwgMTA4LCAxNywgMjIyLCA2MywgNDUsIDEwNCwgMTA0LCAxNywgCisgICAgMjAyLCA4NCwgNDUsIDEwNCwgMTA0LCAxNywgMTA1LCA0NSwgMTA0LCAxMDQsIDE3LCAxMDgsIDQ1LCAxMDQsIDEwNCwgMTcsIAorICAgIDE0NywgNDUsIDEwNCwgMTA0LCAxNywgMTQ5LCA0NSwgMTA0LCAxMDQsIDE3LCAxNzAsIDQ1LCAxMDQsIDEwNCwgMTcsIDE5NSwgCisgICAgNDUsIDEwNCwgMTA0LCAxNywgMjEzLCAxMTEsIDQ1LCAxMDQsIDEwNCwgMTcsIDE5OSwgNDUsIDEwNCwgMTA0LCAxNywgMjIyLCAKKyAgICA2MywgNDUsIDEwNCwgMiwgMjA0LCAyOSwgNDUsIDEwNCwgMiwgMjA0LCAyOCwgNDUsIDEwNCwgMiwgMjE0LCAyMTIsIDQ1LCAKKyAgICAxMDQsIDIsIDIyOSwgMTc1LCA0NSwgMTA0LCAyLCAyMzYsIDM2LCA0NSwgMTA0LCAyLCAyNDMsIDk5LCA0NSwgMTA0LCAyLCAKKyAgICAyMTYsIDczLCAyMTUsIDE5OCwgMjE2LCAxODAsIDQ1LCAxMDQsIDIsIDIyNSwgMTQxLCAyMDMsIDc5LCA0NSwgMTA0LCAyLCAKKyAgICAyMzAsIDM1LCA0NSwgMTA0LCAyLCAyMzAsIDM0LCA0NSwgMTA0LCAyLCAyMTQsIDIyMCwgNDUsIDEwNCwgMiwgMjE0LCAyMTksIAorICAgIDQ1LCAxMDQsIDIsIDIzNywgOTgsIDQ1LCAxMDQsIDIsIDI0NywgODksIDM5LCAyNDIsIDc1LCAyNDYsIDUzLCAyNTEsIDEzOCwgCisgICAgMzksIDI0MywgMjMwLCAzOSwgMjMxLCAyNywgMzksIDE4MywgNDcsIDM5LCAyMDgsIDcwLCAyNDMsIDg1LCAzOSwgMjAzLCAKKyAgICAxOTUsIDU2LCAzOSwgMjA0LCAyMSwgMjI3LCAxMTUsIDU2LCAzOSwgMTcxLCAxMzEsIDU2LCAzOSwgNTIsIDE3MSwgMTMxLCAKKyAgICA1NiwgMzksIDE1NywgMjQ2LCAyMTksIDIxMSwgMzIsIDU2LCAzOSwgMjExLCAxOCwgMjQ2LCAyMTksIDIxMSwgMzIsIDU2LCAKKyAgICAzOSwgMjE5LCA3OCwgNTUsIDM5LCA1MiwgMjE5LCA3OCwgNTUsIDM5LCAyMTksIDc4LCA1NiwgMzksIDIxOSwgNzgsIDIxOSwgCisgICAgMTk5LCAxMzAsIDIsIDIwNywgOSwgMjE2LCA1MSwgMTMwLCAyLCAyMDcsIDksIDI0NywgNTQsIDEzMCwgMiwgMjQ2LCAyMzQsIAorICAgIDEzMCwgMiwgMjEwLCAxOTEsIDEzMCwgMiwgMjQ4LCA1NiwgMTMwLCAxLCAyNTEsIDQ1LCAxMzAsIDEsIDI1MSwgNDYsIDIwOSwgCisgICAgMTc4LCAxMzAsIDEsIDIzMSwgNzksIDEzMCwgMSwgMjMxLCA4MCwgMjA5LCAxNzgsIDEzMCwgMSwgMjA3LCAxMiwgMTMwLCAxLCAKKyAgICAyMDcsIDEzLCAyMDksIDE3OCwgMTMwLCAxLCAyMTYsIDIyMSwgMjE2LCAxMDMsIDEzMCwgMSwgMjE2LCAyMjEsIDIxNiwgCisgICAgMTA0LCAyMDksIDE3OCwgMTMwLCAxLCAyMjgsIDExNCwgMjI3LCAxOTcsIDEzMCwgMSwgMjI4LCAxMTQsIDIyNywgMTk4LCAKKyAgICAyMDksIDE3OCwgMTMwLCAxLCAyNDEsIDEyNywgMTMwLCAxLCAyNTEsIDYyLCAxMzAsIDEsIDIyMCwgNDksIDEzMCwgMSwgCisgICAgMjIwLCA1MCwgMjA5LCAxNzgsIDEzMCwgMSwgMTczLCAxMzAsIDEsIDIzMCwgNDQsIDIyNSwgMTQ0LCAxMzAsIDEsIDIzOSwgCisgICAgOCwgMTMwLCAxLCAyMzksIDksIDIzOCwgMjUsIDEzMCwgMSwgMjIyLCAyMDMsIDEzMCwgMSwgMjQ3LCA5MiwgMTMwLCAxLCAKKyAgICAyNDcsIDkzLCAyMjgsIDEwMCwgMTMwLCAxLCAyMzAsIDE4MSwgMTMwLCAxLCAyMzAsIDE4MiwgMjMwLCAxNTMsIDEzMCwgMSwgCisgICAgMjIxLCAxMSwgMTMwLCAxLCAyMTAsIDIzLCAyMjcsIDI1MywgMTMwLCAxLCAyMTAsIDIzLCAyMjMsIDIwNiwgMjI1LCAxNDQsIAorICAgIDEzMCwgMSwgMjQ0LCAyMTMsIDIyMywgMjA2LCAyNTEsIDQsIDEzMCwgMSwgMjQ0LCAyMTMsIDIyMywgMjA2LCAyMjUsIDE0NCwgCisgICAgMTMwLCAxLCAyMjMsIDExMSwgMjE2LCAxODMsIDEzMCwgMSwgMjEwLCAyMiwgMTMwLCAxLCAyMTAsIDIzLCAyMDksIDIwMCwgCisgICAgMTMwLCAxLCAyNDQsIDIxMiwgMTMwLCAxLCAyNDQsIDIxMywgMjI1LCAxNjMsIDEzMCwgMSwgMjAxLCAyMDEsIDEzMCwgMSwgCisgICAgMTg1LCAxMzAsIDEsIDIxOSwgMTY5LCAyMjksIDI1MSwgMTMwLCAxLCAyNDksIDMyLCAxMzAsIDEsIDI0OSwgMzMsIDIyOSwgCisgICAgMTg3LCAxMzAsIDEsIDE5MiwgMTMwLCAxLCAxOTgsIDEzMCwgMSwgMjE2LCAyMjAsIDEzMCwgMSwgMjI4LCAxMTMsIDEzMCwgCisgICAgMSwgMjA0LCAxMTEsIDEzMCwgMSwgMjE1LCAzNywgMjE1LCAyMSwgMTMwLCAxLCAyMTUsIDM3LCAyMTQsIDIzMiwgMTMwLCAxLCAKKyAgICAyMTUsIDM2LCAxMzAsIDEsIDE1MiwgMTMwLCAyLCAyMTYsIDk0LCAxMzAsIDIyLCAyLCAyMDksIDE3OCwgMTMwLCAyMiwgMiwgCisgICAgMjA3LCA4LCAxMzAsIDIyLCAyLCAyMDcsIDksIDIxNCwgMjI4LCAxMzAsIDIyLCAyLCAyMTAsIDIyNCwgMTMwLCAyMiwgMiwgCisgICAgMjEwLCAyMjUsIDIzMSwgNzEsIDEzMCwgMjIsIDIsIDIxNiwgMjIxLCAyMTYsIDEwMywgMTMwLCAyMiwgMiwgMjE2LCAyMjEsIAorICAgIDIxNiwgMTA0LCAyMDksIDE3OCwgMTMwLCAyMiwgMiwgMjI4LCAxMTQsIDIyNywgMTk3LCAxMzAsIDIyLCAyLCAyMjgsIDExNCwgCisgICAgMjI3LCAxOTgsIDIwOSwgMTc4LCAxMzAsIDIyLCAyLCAyMDksIDIzNSwgMTMwLCAyMiwgMiwgMjA5LCAyMzYsIDIxNiwgMTAzLCAKKyAgICAxMzAsIDIyLCAyLCAyMDksIDIzNiwgMjA5LCAxNzgsIDEzMCwgMjIsIDIsIDIwOSwgMjM2LCAyMTYsIDEwNCwgMjA5LCAxNzgsIAorICAgIDEzMCwgMjIsIDIsIDIxOCwgMjQ5LCAxMzAsIDIyLCAyLCAyMTgsIDI1MCwgMjA5LCAxNzgsIDEzMCwgMjUxLCAxMTcsIDI1MSwgCisgICAgMTE2LCAxMzAsIDEsIDIzMCwgMjMsIDIxNCwgMjI3LCAxMzAsIDEsIDIyOSwgMTExLCAyMTQsIDIyNywgMTMwLCAxLCAyMDcsIAorICAgIDEwMSwgMjE0LCAyMjcsIDEzMCwgMSwgMjQxLCAxNTUsIDIxNCwgMjI3LCAxMzAsIDEsIDIwNiwgNTYsIDIxNCwgMjI3LCAKKyAgICAxMzAsIDEsIDIwMiwgMTA2LCAyMTQsIDIyNywgMTMwLCAxLCAyNTAsIDUyLCAyMTQsIDIyNywgMTMwLCAxNywgMjAyLCA4NCwgCisgICAgMTMwLCAxNywgMTA1LCAxMzAsIDE3LCAxMDgsIDEzMCwgMTcsIDE0NywgMTMwLCAxNywgMTQ5LCAxMzAsIDE3LCAxNzAsIAorICAgIDEzMCwgMTcsIDE5NSwgMTMwLCAxNywgMjEzLCAxMTEsIDEzMCwgMTcsIDE5OSwgMTMwLCAxNywgMjIyLCA2MywgMTMwLCAKKyAgICAyMTksIDEwNCwgMTMwLCAyMTksIDEzMCwgMTMwLCAyMDQsIDE0LCAxMzAsIDI0NywgMzEsIDIxOSwgMTIzLCAxMzAsIDI0NywgCisgICAgMzEsIDIxMiwgMTM5LCAxMzAsIDI0NywgMzEsIDIxOSwgNzUsIDEzMCwgMjE5LCAxMjksIDEzMCwgMzEsIDE2LCAyNDMsIDkxLCAKKyAgICAxMzAsIDMxLCAxNiwgMjQ0LCAzNCwgMTMwLCAzMSwgMTYsIDI0MiwgMjcsIDEzMCwgMzEsIDE2LCAyNDQsIDE2NCwgMTMwLCAKKyAgICAzMSwgMTYsIDI0NCwgMTY1LCAyMTAsIDE5MSwgMTMwLCAzMSwgMTYsIDI0MywgMTc1LCAxMzAsIDMxLCAxNiwgMjQ0LCAyMDUsIAorICAgIDEzMCwgMzEsIDE2LCAyNDQsIDEwLCAxMzAsIDMxLCAxNiwgMjQ0LCAxODcsIDEzMCwgMzEsIDE2LCAyNDQsIDE2NSwgMjM4LCAKKyAgICAxODQsIDEzMCwgMzEsIDE2LCAzOSwgMjA5LCAxNzEsIDEzMCwgMzEsIDE2LCAzOSwgMjQxLCA4MiwgMTMwLCAzMSwgMTYsIAorICAgIDM5LCAyMjksIDE4MiwgMTMwLCAzMSwgMTYsIDM5LCAyMjksIDE4NCwgMTMwLCAzMSwgMTYsIDM5LCAyMzAsIDE1NywgMTMwLCAKKyAgICAzMSwgMTYsIDM5LCAyMjksIDE4MywgMywgMjMwLCAxNTcsIDEzMCwgMzEsIDE2LCAzOSwgMjI5LCAxODUsIDMsIDIzMCwgCisgICAgMTU3LCAxMzAsIDMxLCAxNiwgMzksIDI0OCwgMTE5LCAxMzAsIDMxLCAxNiwgMzksIDIzOCwgMjksIDEzMCwgMzEsIDE2LCAKKyAgICAyMTYsIDE0LCAxNzEsIDI0MiwgMzcsIDEzMCwgMzEsIDE2LCAyMTYsIDE0LCAxNzEsIDI0NCwgMjAzLCAxMzAsIDMxLCAxNiwgCisgICAgMjE2LCAxNCwgMjQ2LCAxNiwgMjA3LCAxOTUsIDEzMCwgMzEsIDE2LCAyMTYsIDE0LCAyNDYsIDE2LCAyMDksIDI0NCwgMTMwLCAKKyAgICAzMSwgMTYsIDIyNywgMjIwLCAxNzEsIDIxOSwgMTE4LCAxMzAsIDMxLCAxNiwgMjI3LCAyMjAsIDE3MSwgMjE3LCAxNzcsIAorICAgIDEzMCwgMzEsIDE2LCAyMjcsIDIyMCwgMjQ2LCAxNiwgMjE4LCA5NCwgMTMwLCAzMSwgMTYsIDIyNywgMjIwLCAyNDYsIDE2LCAKKyAgICAyMTgsIDgwLCAxMzAsIDMxLCAxNiwgMjI3LCAyMjAsIDE3MSwgMjE4LCAxMTksIDIxMCwgMjEzLCAyLCAyMTksIDEwMSwgCisgICAgMjEwLCAyMTMsIDIsIDIxOSwgMTE0LCAyMTAsIDIxMywgMiwgMjE5LCAxMTAsIDIxMCwgMjEzLCAxLCA2MywgMjEwLCAyMTMsIAorICAgIDEsIDc1LCAyMTAsIDIxMywgMSwgNjgsIDIxMCwgMjEzLCAxLCAyNTEsIDEwOSwgMjEwLCAyMTMsIDEsIDc4LCAyMTAsIDIxMywgCisgICAgMSwgNzQsIDIxMCwgMjEzLCAxLCAyNDAsIDIzOCwgMjEwLCAyMTMsIDEsIDE3MywgMjEwLCAyMTMsIDEsIDIxNywgMTI2LCAKKyAgICAyMTAsIDIxMywgMSwgMjM5LCA4LCAyMTAsIDIxMywgMSwgMjIyLCAyMDMsIDIxMCwgMjEzLCAxLCAyNDcsIDkyLCAyMTAsIAorICAgIDIxMywgMSwgMjMwLCAxODEsIDIxMCwgMjEzLCAxLCAyMDIsIDExNiwgMjEwLCAyMTMsIDEsIDIyMSwgMTEsIDIxMCwgMjEzLCAKKyAgICAxLCAyMTAsIDIyLCAyMTAsIDIxMywgMSwgMjQ0LCAyMTIsIDIxMCwgMjEzLCAxLCAyMDEsIDIwMSwgMjEwLCAyMTMsIDEsIAorICAgIDE4NSwgMjEwLCAyMTMsIDEsIDI0MCwgMTA4LCAyMTAsIDIxMywgMSwgMjA2LCA4NiwgMjEwLCAyMTMsIDEsIDI0OSwgMzIsIAorICAgIDIxMCwgMjEzLCAxLCAxOTIsIDIxMCwgMjEzLCAxLCAxOTgsIDIxMCwgMjEzLCAxLCAyMTYsIDIyMCwgMjEwLCAyMTMsIDEsIAorICAgIDIyOCwgMTEzLCAyMTAsIDIxMywgMSwgMjA0LCAxMTEsIDIxMCwgMjEzLCAxLCAyMTUsIDM2LCAyMTAsIDIxMywgMSwgMjAzLCAKKyAgICAxODIsIDIxMCwgMjEzLCAxLCAxNTIsIDIxMCwgMjEzLCAxMDksIDIsIDIxOSwgMTI3LCAyMTAsIDIxMywgMTA5LCAyLCAyMTksIAorICAgIDEwMywgMjEwLCAyMTMsIDEwOSwgMiwgMjE5LCAxMDAsIDIxMCwgMjEzLCAyMiwgMiwgMjE5LCAxMTcsIDIxMCwgMjEzLCAyMiwgCisgICAgMiwgMjE5LCA5OSwgMjEwLCAyMTMsIDIyLCAyLCAyMTksIDEyMSwgMjEwLCAyMTMsIDIyLCAyLCAyMTksIDEwOSwgMjEwLCAKKyAgICAyMTMsIDIyLCAyLCAyMTksIDEyOCwgMjEwLCAyMTMsIDIyLCAyLCAyMTksIDExOSwgMjEwLCAyMTMsIDIsIDIxOSwgMTMxLCAKKyAgICAyMTAsIDIxMywgMiwgMjA1LCAyMDQsIDIxMCwgMjEzLCAxMDksIDIsIDIxOSwgNjQsIDE5MiwgMjEwLCAyMTMsIDEwOSwgMiwgCisgICAgMjE5LCA2NCwgMjA0LCAxMTEsIDIxMCwgMjEzLCAxLCAyMjksIDE0NCwgMjEwLCAyMTMsIDEsIDIxMCwgMTUwLCAyMTAsIAorICAgIDIxMywgMTcsIDIwMiwgODQsIDIxMCwgMjEzLCAxNywgMTA1LCAyMTAsIDIxMywgMTcsIDEwOCwgMjEwLCAyMTMsIDE3LCAKKyAgICAxNDcsIDIxMCwgMjEzLCAxNywgMTQ5LCAyMTAsIDIxMywgMTcsIDE3MCwgMjEwLCAyMTMsIDE3LCAxOTUsIDIxMCwgMjEzLCAKKyAgICAxNywgMjEzLCAxMTEsIDIxMCwgMjEzLCAxNywgMTk5LCAyMTAsIDIxMywgMTcsIDIyMiwgNjMsIDIxMCwgMjEzLCAyNTAsIAorICAgIDE3LCAyMTAsIDIxMywgMSwgMjE2LCA3NiwgMjEwLCAyMTMsIDEsIDIyNywgMTcxLCAyMTAsIDIxMywgMSwgMjQ4LCA5OCwgCisgICAgMjEwLCAyMTMsIDEsIDQ2LCAyMzAsIDU0LCAyMTAsIDIxMywgMSwgNDYsIDIyNiwgMTg1LCAyNDgsIDIwOCwgMSwgNjMsIAorICAgIDI0OCwgMjA4LCAxLCAyMTIsIDEzMSwgNjMsIDI0OCwgMjA4LCAxLCAxNTIsIDI0OCwgMjA4LCAxLCAyMTIsIDEzMSwgMTUyLCAKKyAgICAyNDgsIDIwOCwgMSwgMjI1LCAxMTcsIDE1MiwgMjQ4LCAyMDgsIDEsIDI0OSwgMzIsIDI0OCwgMjA4LCAxLCAyMjksIDIzNiwgCisgICAgMjQ5LCAzMiwgMjQ4LCAyMDgsIDEsIDE4NSwgMjQ4LCAyMDgsIDEsIDIxMiwgMTMxLCAxODUsIDI0OCwgMjA4LCAxLCAyMDEsIAorICAgIDIwMSwgMjQ4LCAyMDgsIDEsIDIyNSwgMTE3LCAyMDEsIDIwMSwgMjQ4LCAyMDgsIDEsIDIwNCwgMTExLCAyNDgsIDIwOCwgMSwgCisgICAgMjEyLCAxMzEsIDIwNCwgMTExLCAyNDgsIDIwOCwgMSwgMjE5LCAxNDMsIDIwNCwgMTExLCAyNDgsIDIwOCwgMSwgMjM5LCA4LCAKKyAgICAyNDgsIDIwOCwgMSwgMjEyLCAxMzEsIDIzOSwgOCwgMjQ4LCAyMDgsIDEsIDIzMCwgMTgxLCAyNDgsIDIwOCwgMSwgMjQ0LCAKKyAgICAyMTIsIDI0OCwgMjA4LCAxLCAyMTYsIDIyMCwgMjQ4LCAyMDgsIDEsIDIxMiwgMTMxLCAyMTYsIDIyMCwgMjQ4LCAyMDgsIDEsIAorICAgIDE5MiwgMjQ4LCAyMDgsIDEsIDIxMiwgMTMxLCAxOTIsIDI0OCwgMjA4LCAxLCAyMTEsIDIzNiwgMjEwLCAyMiwgMjQ4LCAKKyAgICAyMDgsIDEsIDIyMSwgMTcwLCAyMTAsIDIyLCAyNDgsIDIwOCwgMSwgMjE1LCAzNiwgMjQ4LCAyMDgsIDEsIDIxMiwgMTMxLCAKKyAgICAyMTUsIDM2LCAyNDgsIDIwOCwgMSwgMjI1LCAxMTcsIDIxNSwgMzYsIDI0OCwgMjA4LCAxLCAxOTgsIDI0OCwgMjA4LCAxLCAKKyAgICAyMTIsIDEzMSwgMTk4LCAyNDgsIDIwOCwgMSwgMjIyLCAyMDMsIDI0OCwgMjA4LCAxLCAyMjgsIDExMywgMjQ4LCAyMDgsIDEsIAorICAgIDIxMiwgMTMxLCAyMjgsIDExMywgMjQ4LCAyMDgsIDEsIDIyMSwgMTEsIDI0OCwgMjA4LCAxLCAyNDcsIDkyLCAyNDgsIDIwOCwgCisgICAgMSwgMjIzLCAyNSwgMjQ4LCAyMDgsIDEsIDIyNSwgNTQsIDI0OCwgMjA4LCAxLCA3NSwgMjQ4LCAyMDgsIDEsIDY4LCAyNDgsIAorICAgIDIwOCwgMiwgMjA4LCAxNjQsIDI0OCwgMjA4LCAyMiwgMiwgNzQsIDI0OCwgMjA4LCAyMiwgMiwgMjE5LCAxNDMsIDc0LCAKKyAgICAyNDgsIDIwOCwgMjIsIDIsIDI0MSwgMTYxLCAyNDgsIDIwOCwgMjIsIDIsIDc1LCAyNDgsIDIwOCwgMjIsIDIsIDIyOSwgCisgICAgMjM2LCA3NSwgMjQ4LCAyMDgsIDIyLCAyLCA3OCwgMjQ4LCAyMDgsIDIyLCAyLCAyMjksIDIzNiwgNzgsIDI0OCwgMjA4LCAKKyAgICAyMiwgMiwgNjgsIDI0OCwgMjA4LCAyMiwgMiwgMTA2LCAzNSwgMjEyLCAxMzEsIDIxNSwgMzYsIDI0OCwgMjA4LCAxMDksIDIsIAorICAgIDIyMiwgMjA1LCAyNDgsIDIwOCwgMTA5LCAyLCAyMzcsIDE3MSwgMjQ4LCAyMDgsIDIxOSwgMTEyLCAyNDgsIDIwOCwgMjE5LCAKKyAgICAxMDgsIDI0OCwgMjA4LCAxNiwgMjQ4LCA2NCwgMjIzLCAxMTEsIDIyNCwgMjE4LCAyNDgsIDIwOCwgMTYsIDI0OCwgNjQsIAorICAgIDIxOCwgMTIyLCAyNDgsIDIwOCwgMTYsIDI0OCwgNjQsIDIzMCwgNzksIDI0OCwgMjA4LCAxNiwgMjQ4LCA2NCwgMjE5LCAKKyAgICAxMTIsIDIyNywgMTgxLCAxLCAxNzMsIDIyNywgMTgxLCAxLCAyMjksIDQwLCAyMjcsIDE4MSwgMSwgMjI5LCAxNDQsIDIyNywgCisgICAgMTgxLCAxLCAyMzksIDgsIDIyNywgMTgxLCAxLCAyMzgsIDUxLCAyMjcsIDE4MSwgMSwgMjIyLCAyMDMsIDIyNywgMTgxLCAxLCAKKyAgICAyNDcsIDkyLCAyMjcsIDE4MSwgMSwgMjQ2LCAxOTksIDIyNywgMTgxLCAxLCAyMzAsIDE4MSwgMjI3LCAxODEsIDEsIDIyMSwgCisgICAgMTEsIDIyNywgMTgxLCAxLCAyMTAsIDIyLCAyMjcsIDE4MSwgMSwgMjA5LCAxMDgsIDIyNywgMTgxLCAxLCAyNDQsIDIxMiwgCisgICAgMjI3LCAxODEsIDEsIDIwMSwgMjAxLCAyMjcsIDE4MSwgMSwgMTg1LCAyMjcsIDE4MSwgMSwgMjE4LCA5OCwgMjI3LCAxODEsIAorICAgIDEsIDIxOCwgMjA4LCAyMjcsIDE4MSwgMSwgMjQwLCAxMDgsIDIyNywgMTgxLCAxLCAyMzksIDIyNywgMjI3LCAxODEsIDEsIAorICAgIDI0OSwgMzIsIDIyNywgMTgxLCAxLCAyNDgsIDQ0LCAyMjcsIDE4MSwgMSwgMTkyLCAyMjcsIDE4MSwgMSwgMjI0LCA4OSwgCisgICAgMjI3LCAxODEsIDEsIDIwOCwgMjAsIDIyNywgMTgxLCAxLCAyMDgsIDEwLCAyMjcsIDE4MSwgMSwgMjQxLCAyNTUsIDIyNywgCisgICAgMTgxLCAxLCAxOTgsIDIyNywgMTgxLCAxLCAyMTYsIDIyMCwgMjI3LCAxODEsIDEsIDIyOCwgMTEzLCAyMjcsIDE4MSwgMSwgCisgICAgMTUyLCAyMjcsIDE4MSwgMSwgMjM2LCAyMjQsIDIyNywgMTgxLCAxLCAyMDYsIDg2LCAyMjcsIDE4MSwgMSwgMjE1LCAzNiwgCisgICAgMjI3LCAxODEsIDEsIDIxMywgOTAsIDIyNywgMTgxLCAxLCAyMDQsIDExMSwgMjI3LCAxODEsIDEsIDYzLCAyMjcsIDE4MSwgCisgICAgMjEwLCAyNTQsIDEsIDE5OCwgMjI3LCAxODEsIDIxMCwgMjU0LCAxLCAyMTYsIDIyMCwgMjI3LCAxODEsIDIyLCAyLCAyNTIsIAorICAgIDI1LCAyMjcsIDE4MSwgMjIsIDIsIDc1LCAyMjcsIDE4MSwgMjIsIDIsIDc4LCAyMjcsIDE4MSwgMjIsIDIsIDIyMCwgMTgsIAorICAgIDIyNywgMTgxLCAyMiwgMiwgNjgsIDIyNywgMTgxLCAyMiwgMiwgMjA2LCAxNzgsIDIyNywgMTgxLCAyMiwgMiwgNzQsIDIyNywgCisgICAgMTgxLCAxMDksIDIsIDIzMCwgNTQsIDIyNywgMTgxLCAxMDksIDIsIDIyNiwgMTg1LCAyMjcsIDE4MSwgMTA5LCAyLCAxNTksIAorICAgIDIyNywgMTgxLCAxMDksIDIsIDIyMywgMTYzLCAyMjcsIDE4MSwgMTA5LCAyLCAyMTksIDE4NCwgMjI3LCAxODEsIDEwOSwgMiwgCisgICAgMTQ2LCAyMjcsIDE4MSwgMTA5LCAyLCAyMTAsIDY5LCAyMjcsIDE4MSwgMTA5LCAyLCAyMjAsIDI0MSwgMjI3LCAxODEsIAorICAgIDEwOSwgMiwgMjMwLCAwLCAyMjcsIDE4MSwgMiwgMjE2LCAxODEsIDIyNywgMTgxLCAyLCAyMjEsIDUxLCAyMjcsIDE4MSwgCisgICAgMjE3LCAxNzksIDIxMCwgMjAsIDIyNywgMTgxLCAyMTcsIDE3OSwgMjIwLCAyNTIsIDIwOSwgNSwgMjEwLCAyMCwgMjI3LCAKKyAgICAxODEsIDIxNywgMTc5LCAyNDYsIDIwNiwgMjI3LCAxODEsIDIxNywgMTc5LCAyMDgsIDIsIDI0NiwgMjA2LCAyMjcsIDE4MSwgCisgICAgMjE3LCAxNzksIDIwOCwgMSwgMjI3LCAxODEsIDE3LCAyMDIsIDg0LCAyMjcsIDE4MSwgMTcsIDEwNSwgMjI3LCAxODEsIDE3LCAKKyAgICAxMDgsIDIyNywgMTgxLCAxNywgMTQ3LCAyMjcsIDE4MSwgMTcsIDE0OSwgMjI3LCAxODEsIDE3LCAxNzAsIDIyNywgMTgxLCAKKyAgICAxNywgMTk1LCAyMjcsIDE4MSwgMTcsIDIxMywgMTExLCAyMjcsIDE4MSwgMTcsIDE5OSwgMjI3LCAxODEsIDE3LCAyMjIsIAorICAgIDYzLCAyMjcsIDE4MSwgMSwgMjA3LCAyNDEsIDIyNywgMTgxLCAxLCAyMDcsIDIyOSwgMjI3LCAxODEsIDEsIDI0NCwgMTIwLCAKKyAgICAyMjAsIDQ3LCAyNDYsIDEzNSwgMTcsIDIwMiwgODQsIDIyMCwgNDcsIDI0NiwgMTM1LCAxNywgMTA1LCAyMjAsIDQ3LCAyNDYsIAorICAgIDEzNSwgMTcsIDEwOCwgMjIwLCA0NywgMjQ2LCAxMzUsIDE3LCAxNDcsIDIyMCwgNDcsIDI0NiwgMTM1LCAxNywgMTQ5LCAKKyAgICAyMjAsIDQ3LCAyNDYsIDEzNSwgMTcsIDE3MCwgMjIwLCA0NywgMjQ2LCAxMzUsIDE3LCAxOTUsIDIyMCwgNDcsIDI0NiwgCisgICAgMTM1LCAxNywgMjEzLCAxMTEsIDIyMCwgNDcsIDI0NiwgMTM1LCAxNywgMTk5LCAyMjAsIDQ3LCAyNDYsIDEzNSwgMTcsIAorICAgIDIyMiwgNjMsIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyMjgsIDExMywgMjIwLCA0NywgMjQ2LCAxMzUsIDEsIDI1MCwgNDksIAorICAgIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyNTEsIDgxLCAyMjAsIDQ3LCAyNDYsIDEzNSwgMSwgMjUwLCAyMjMsIDIyMCwgNDcsIAorICAgIDI0NiwgMTM1LCAxLCAyNTEsIDM5LCAyMjAsIDQ3LCAyNDYsIDEzNSwgMSwgMjI4LCAxMTIsIDIyMCwgNDcsIDI0NiwgMTM1LCAKKyAgICAxLCAyNTEsIDI0MywgMjIwLCA0NywgMjQ2LCAxMzUsIDEsIDI1MSwgMjQ0LCAyMjAsIDQ3LCAyNDYsIDEzNSwgMSwgMjUxLCAKKyAgICAyNDIsIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyNTEsIDIzNywgMjIwLCA0NywgMjQ2LCAxMzUsIDEsIDIyNywgMTQ4LCAyMjAsIAorICAgIDQ3LCAyNDYsIDEzNSwgMSwgMjMwLCAyMTUsIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyMzEsIDg0LCAyMjAsIDQ3LCAyNDYsIAorICAgIDEzNSwgMSwgMjMwLCAyMzYsIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyMzAsIDIyNCwgMjIwLCA0NywgMjQ2LCAxMzUsIDEsIAorICAgIDIyNiwgMjM5LCAyMjAsIDQ3LCAyNDYsIDEzNSwgMSwgMjA3LCAzMSwgMjIwLCA0NywgMjQ2LCAxMzUsIDEsIDIwNywgMjksIAorICAgIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyMDYsIDIyOSwgMjIwLCA0NywgMjQ2LCAxMzUsIDEsIDIwNiwgMTcwLCAyMjAsIDQ3LCAKKyAgICAyNDYsIDEzNSwgMSwgMjI3LCAyMzQsIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyNDEsIDQ2LCAyMjAsIDQ3LCAyNDYsIDEzNSwgCisgICAgMSwgMjQxLCAxNjQsIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyNDEsIDkyLCAyMjAsIDQ3LCAyNDYsIDEzNSwgMSwgMjQxLCAKKyAgICAyMSwgMjIwLCA0NywgMjQ2LCAxMzUsIDEsIDIyNywgNDksIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyMTksIDIxOSwgMjIwLCAKKyAgICA0NywgMjQ2LCAxMzUsIDEsIDIyMCwgOTMsIDIyMCwgNDcsIDI0NiwgMTM1LCAxLCAyMTksIDIwNiwgMjIwLCA0NywgMjQ2LCAKKyAgICAxMzUsIDEsIDIyMCwgNjAsIDIyMCwgNDcsIDI0NiwgMTM1LCAyMjMsIDI0NywgMjA3LCAyMDYsIDIyMCwgNDcsIDI0NiwgCisgICAgMTM1LCAyMzksIDMsIDIwNywgMjA3LCAyMjAsIDQ3LCAyNDYsIDEzNSwgMjIzLCAyNDUsIDIwNywgMjA3LCAyMjAsIDQ3LCAKKyAgICAyNDYsIDEzNSwgMjE2LCAxMTgsIDIyMCwgNDcsIDI0NiwgMTM1LCAyMTgsIDIwNiwgMjIwLCA0NywgMjQ2LCAxMzUsIDI1MSwgCisgICAgNzIsIDIyMCwgNDcsIDI0NiwgMTM1LCAyMTcsIDE3OSwgMjIzLCAyNDEsIDIyMCwgNDcsIDI0NiwgMTM1LCAyMTcsIDE3OSwgCisgICAgNTIsIDIyMywgMjQxLCAyMTAsIDIxMywgMjE3LCAxNzksIDI0OCwgNjQsIDIxMCwgMTg0LCAyMTAsIDIxMywgMjE3LCAxNzksIAorICAgIDI0OCwgNjQsIDIxOSwgMTEzLCAyMTAsIDIxMywgMjE3LCAxNzksIDI0OCwgNjQsIDIxNywgMTY3LCAyMTAsIDIxMywgMjE3LCAKKyAgICAxNzksIDI0OCwgNjQsIDI0NywgNzcsIDIxMCwgMjEzLCAyMTcsIDE3OSwgMjQ4LCA2NCwgMjI3LCAxNzIsIDIxNCwgMjI0LCAKKyAgICAyMTAsIDIxMywgMjE3LCAxNzksIDI0OCwgNjQsIDIzMCwgNDQsIDIxNCwgMjI0LCAyMTAsIDIxMywgMjE3LCAxNzksIDI0OCwgCisgICAgNjQsIDI0NCwgMjEzLCAyMTQsIDIyNCwgMjEwLCAyMTMsIDIxNywgMTc5LCAyNDgsIDY0LCAyNDksIDMzLCAyMTQsIDIyNCwgCisgICAgMjA2LCA1MiwgMTQzLCAyMjksIDIzNCwgMjA2LCA1MiwgMTQzLCAyMTMsIDU4LCAyMDYsIDUyLCAxNDMsIDIxNywgMjQ1LCAKKyAgICAyMDYsIDUyLCAyLCAyMjIsIDc2LCAyMDYsIDUyLCAyLCAyMDMsIDg3LCAyMjQsIDE0NiwgMjEwLCAxNzUsIDIwNiwgNTIsIAorICAgIDE0MywgMjAzLCA4NywgMjUxLCA3NywgMjMxLCAzNiwgMjEwLCAxNzUsIDIwNiwgNTIsIDE0MywgMjAzLCA4NywgMjMxLCAzNiwgCisgICAgMjEwLCAxNzUsIDIwNiwgNTIsIDE0MywgMjAzLCA4NywgMjI5LCAyMjIsIDIzMSwgMzYsIDIxMCwgMTc1LCAyMDYsIDUyLCAKKyAgICAxNDMsIDI0NywgNTUsIDU2LCAyMDYsIDUyLCAxNDMsIDIwMywgODcsIDIyOSwgMjIyLCAyMzEsIDM2LCAyMTAsIDE3NiwgCisgICAgMjE0LCAxOTQsIDIwNiwgNTIsIDE0MywgNTIsIDIxMCwgMTc1LCAyMDYsIDUyLCAxNDMsIDIwOCwgNzAsIDIxMCwgMTc1LCAKKyAgICAyMDYsIDUyLCAxNDMsIDIyOSwgMjIyLCAyNTAsIDE4MiwgMjA2LCA1MiwgMTQzLCA3MCwgNTYsIDIwNiwgNTIsIDE0MywgCisgICAgMTIwLCAxODcsIDU2LCAyMDYsIDUyLCAxNDMsIDEyNiwgMTg3LCA1NiwgMjA2LCA1MiwgMTQzLCAyMTYsIDQsIDIyOSwgMjMzLCAKKyAgICAyMzEsIDM2LCAyMTAsIDE3NSwgMjA2LCA1MiwgMTQzLCAyNTAsIDQ3LCAyMzEsIDM2LCAyMTAsIDE3NSwgMjA2LCA1MiwgMiwgCisgICAgMjA1LCAyMDAsIDIxMCwgMTc1LCAyMDYsIDUyLCAyLCAyMDUsIDIwMCwgMjA3LCAyNiwgMjA2LCA1MiwgMiwgMjE2LCA3MywgCisgICAgMjA1LCAyMDAsIDIwNywgMjYsIDIwNiwgNTIsIDIsIDIwNSwgMjAwLCAyNTAsIDE4MiwgMjA2LCA1MiwgMiwgMjE2LCA3MywgCisgICAgMjA1LCAyMDAsIDI1MCwgMTgyLCAyMDYsIDUyLCAyLCAyMDUsIDIwMCwgMjA3LCAyNywgMywgMjA5LCAyNDgsIDIwNiwgNTIsIAorICAgIDIsIDIwNSwgMjAwLCAyNTAsIDE4MywgMywgMjA5LCAyNDgsIDIwNiwgNTIsIDIsIDI1MCwgMTgxLCAyNTAsIDE5NywgMjA2LCAKKyAgICA1MiwgMiwgMjUwLCAxODEsIDI0OSwgMiwgMjA2LCA1MiwgMiwgMjUwLCAxODEsIDIwNiwgNzcsIDIwNiwgNTIsIDIsIDI1MCwgCisgICAgMTgxLCAyMDYsIDc4LCAzLCAyMDksIDI0OCwgMjA2LCA1MiwgMiwgMjA4LCAyMDEsIDIwNiwgNTIsIDIsIDIzNywgMTUsIAorICAgIDE2MywgMjUwLCAxODAsIDIwNiwgNTIsIDIsIDE2MywgMjUwLCAxODAsIDIwNiwgNTIsIDIsIDIxNSwgMTQ3LCAxNjMsIDI1MCwgCisgICAgMTgwLCAyMDYsIDUyLCAyLCAyNTAsIDE4MSwgMjA3LCAzMywgMjIzLCAyMzIsIDIwNiwgNTIsIDIsIDI1MCwgMTIyLCAyMDYsIAorICAgIDUyLCAyLCAyMTUsIDE5OCwgMjUwLCAxMjIsIDIwNiwgNTIsIDE0MywgMjQ3LCA1NSwgNTUsIDIwNiwgNTIsIDIsIDIzMCwgCisgICAgMTM1LCAyMDYsIDUyLCAyLCAyMDYsIDIyMiwgMjA2LCA1MiwgMTQzLCAyMTUsIDI1MywgNTUsIDIwNiwgNTIsIDE0MywgNTIsIAorICAgIDIxNSwgMjUzLCA1NSwgOCwgMSwgNSwgNiwgNjMsIDgsIDEsIDUsIDYsIDI1MSwgMTA5LCA4LCA1LCAxLCAyMDcsIDE3NCwgCisgICAgMjUxLCAxMDksIDgsIDEsIDUsIDYsIDI0OCwgMjI1LCAyNDksIDI1NSwgOCwgMSwgNSwgNiwgMjQ3LCAxMjUsIDgsIDEsIDUsIAorICAgIDYsIDI0NSwgNTEsIDgsIDEsIDUsIDYsIDI0MCwgMjQzLCA4LCAxLCA1LCA2LCA3NCwgOCwgNSwgMSwgMjA3LCAxNzQsIDE3MSwgCisgICAgNzQsIDgsIDUsIDEsIDIwNywgMTc0LCA3NSwgOCwgMSwgNSwgNiwgMjMwLCAxODQsIDgsIDEsIDUsIDYsIDIzMCwgNTQsIDgsIAorICAgIDEsIDUsIDYsIDIyOCwgMTMxLCAzLCA5NSwgOCwgMSwgNSwgNiwgMjI2LCAxODUsIDgsIDEsIDUsIDYsIDIxNiwgNzMsIDIyMywgCisgICAgMTYzLCA4LCAxLCA1LCA2LCA3OCwgOCwgMSwgNSwgNiwgMTcxLCA3OCwgOCwgNSwgMSwgMjEyLCAxNTQsIDc4LCA4LCA1LCAxLCAKKyAgICAyMTIsIDE1NCwgMTcxLCA3OCwgOCwgNSwgMSwgMjEyLCAxNTQsIDE1OCwgMywgOTUsIDgsIDUsIDEsIDIwNywgMTc0LCAyMjAsIAorICAgIDczLCA4LCAxLCA1LCA2LCAyMTksIDIxNiwgOCwgNSwgMSwgMjA4LCAxNDUsIDE2MiwgNzgsIDgsIDUsIDEsIDI0NywgMjQ4LCAKKyAgICAxNjIsIDc4LCA4LCAxLCA1LCA2LCAyMTksIDE4NCwgOCwgMSwgNSwgNiwgMjE2LCA3MywgMTQ2LCA4LCAxLCA1LCA2LCAyMDcsIAorICAgIDE3NCwgMTQ2LCA4LCAxLCA1LCA2LCAyMTAsIDY5LCA4LCAxLCA1LCA2LCA2OCwgOCwgNSwgMSwgMjEyLCAxNTQsIDY4LCA4LCAKKyAgICA1LCAxLCAyMTIsIDE1NCwgMjQzLCAyMjksIDY4LCA4LCA1LCAxLCAyMTIsIDE1NCwgMjA3LCAxNzQsIDIyNiwgMTg1LCA4LCAKKyAgICAxLCA1LCA2LCAyMDYsIDE2NCwgOCwgMSwgNSwgNiwgMjA0LCAxNDQsIDgsIDEsIDUsIDYsIDIwMiwgMTU5LCA4LCAxLCA1LCAKKyAgICA2LCAyNDAsIDE3NywgOCwgMSwgMjA1LCAxODYsIDIyOCwgMywgMjExLCAyMDAsIDgsIDEsIDI1MSwgNTksIDMwLCAxLCA1LCAKKyAgICA2LCAyMzgsIDIzNSwgMzAsIDEsIDUsIDYsIDIyOCwgMjQsIDMwLCAxLCA1LCA2LCAyMTgsIDE2NywgMzAsIDEsIDUsIDYsIAorICAgIDIxNiwgNTksIDMwLCAxLCA1LCA2LCAyMTcsIDIwMiwgMzYsIDEsIDUsIDYsIDI0MSwgMTIyLCA2NSwgMSwgNiwgNjMsIDY1LCAKKyAgICAxLCA2LCAyNTEsIDEwOSwgNjUsIDEsIDYsIDI0OSwgMjU1LCA2NSwgMSwgNiwgMjQ4LCAyMjUsIDI0OSwgMjU1LCA2NSwgMSwgCisgICAgNiwgMjQ1LCA1MSwgNjUsIDEsIDYsIDc0LCA2NSwgMSwgNiwgMjE2LCA3MywgNzQsIDY1LCAxLCA2LCAyMzksIDc1LCA2NSwgCisgICAgMSwgNiwgMjM3LCAxNzEsIDY1LCAxLCA2LCA3NSwgNjUsIDEsIDYsIDIzMCwgMTg0LCA2NSwgMSwgNiwgMjMwLCA1NCwgNjUsIAorICAgIDEsIDYsIDE1OSwgNjUsIDEsIDYsIDIyNiwgMTg1LCA2NSwgMSwgNiwgMjIzLCAxNjMsIDY1LCAxLCA2LCAyMTYsIDczLCAKKyAgICAyMjMsIDE2MywgNjUsIDEsIDYsIDc4LCA2NSwgMSwgNiwgMjE5LCAyMTYsIDY1LCAxLCA2LCAyMTksIDE4NCwgNjUsIDEsIDYsIAorICAgIDE0NiwgNjUsIDEsIDYsIDIxMCwgNjksIDY1LCAxLCA2LCA2OCwgNjUsIDEsIDYsIDIwNCwgMTQ0LCA2NSwgMSwgNSwgNjMsIAorICAgIDY1LCAxLCA1LCAyMDcsIDE3NCwgNjMsIDY1LCAxLCA1LCAyNTEsIDIsIDY1LCAxLCA1LCAyMDcsIDE3NCwgMjUxLCAxMDksIAorICAgIDY1LCAxLCA1LCAyNDksIDI1NSwgNjUsIDEsIDUsIDI0NSwgNTEsIDY1LCAxLCA1LCA3NCwgNjUsIDEsIDUsIDIxNCwgMTkyLCAKKyAgICA2NSwgMSwgNSwgMTcxLCA3NCwgNjUsIDEsIDUsIDIwNywgMTc0LCAxNzEsIDc0LCA2NSwgMSwgNSwgMjM5LCA3NSwgNjUsIDEsIAorICAgIDUsIDIwNywgMTc0LCA3NSwgNjUsIDEsIDUsIDIzMCwgNTQsIDY1LCAxLCA1LCAyMjYsIDE4NSwgNjUsIDEsIDUsIDI0MSwgCisgICAgNzgsIDY1LCAxLCA1LCA3OCwgNjUsIDEsIDUsIDE3MSwgNzgsIDY1LCAxLCA1LCAyMDgsIDE0NSwgMTYyLCA3OCwgNjUsIDEsIAorICAgIDUsIDI0NywgMjQ4LCAxNjIsIDc4LCA2NSwgMSwgNSwgMjE5LCAxODQsIDY1LCAxLCA1LCAyMTAsIDY5LCA2NSwgMSwgNSwgCisgICAgNjgsIDY1LCAxLCA1LCAyMTIsIDE1NCwgNjgsIDY1LCAxLCA1LCAyMDcsIDE3NCwgMjI2LCAxODUsIDY1LCAxLCA1LCAyMDYsIAorICAgIDE2NCwgNjUsIDEsIDUsIDI1MSwgNTksIDY1LCAxLCA1LCAyNDgsIDEwNiwgNjUsIDEsIDUsIDMwLCAyMzgsIDIzNSwgNjUsIAorICAgIDEsIDUsIDI0NCwgMzcsIDY1LCAxLCA1LCAzMCwgMjE4LCAxOTIsIDY1LCAxLCA1LCAyNDYsIDE0MiwgOCwgMjEwLCAyNDYsIAorICAgIDUsIDEsIDc1LCA4LCAyMTAsIDI0NiwgNSwgMSwgMTQ2LCA4LCAyMTAsIDI0NiwgNSwgMSwgNjgsIDgsIDIxMCwgMjQ2LCA1LCAKKyAgICAxLCAyMDYsIDE2NCwgMzAsIDIxMCwgMjQ2LCA1LCAxLCAyNDgsIDEwNiwgMzAsIDIxMCwgMjQ2LCA1LCAxLCAyMzgsIDIzNSwgCisgICAgMzAsIDIxMCwgMjQ2LCA1LCAxLCAyMTYsIDU5LCAzMCwgMjEwLCAyNDYsIDUsIDEsIDIxOCwgMTkyLCAzMCwgMjEwLCAyNDYsIAorICAgIDUsIDEsIDI0NiwgMTQyLCA4LCA1LCAxLCAyMDcsIDI0LCA4LCA1LCAxLCA2NiwgMywgMTAxLCAyMDgsIDIyNywgOCwgNSwgMSwgCisgICAgMjQ1LCA1MiwgMywgMTAxLCAyMDgsIDIyNywgOCwgNSwgMSwgMjQwLCAxNzUsIDMsIDEwMSwgMjA4LCAyMjcsIDgsIDUsIDEsIAorICAgIDIyNiwgMTg2LCAzLCAxMDEsIDIwOCwgMjI3LCA4LCA1LCAxLCAyMjMsIDE2NCwgMywgMTAxLCAyMDgsIDIyNywgOCwgNSwgMSwgCisgICAgMjE5LCAxODUsIDMsIDEwMSwgMjA4LCAyMjcsIDgsIDUsIDEsIDIxNywgMSwgMywgMTAxLCAyMDgsIDIyNywgOCwgNSwgMSwgCisgICAgMjE3LCAxLCAzLCAyMzksIDI0MSwgMjUsIDEwMSwgMjA4LCAyMjcsIDgsIDUsIDEsIDIxNSwgOTQsIDMsIDEwMSwgMjA4LCAKKyAgICAyMjcsIDgsIDUsIDEsIDIxMCwgNzAsIDMsIDEwMSwgMjA4LCAyMjcsIDgsIDUsIDEsIDIwMiwgMTYwLCAzLCAxMDEsIDIwOCwgCisgICAgMjI3LCA4LCA1LCAxLCAyMDcsIDE3NCwgMjM5LCA3NSwgNjUsIDEsIDM2LCAyNDEsIDkyLCA4LCA1LCAxLCAyMzEsIDQsIAorICAgIDIzOSwgNzUsIDgsIDUsIDEsIDIwOSwgMTExLCAzLCAyMTEsIDM2LCA4LCA1LCA2LCAxLCAyMzUsIDIwNiwgMywgOTUsIDgsIAorICAgIDUsIDEsIDIzMCwgMjMxLCAzLCA5NSwgOCwgNSwgMSwgMjE5LCAxODUsIDMsIDk1LCA4LCA1LCA2LCAxLCAxMDYsIDMsIDk1LCAKKyAgICA4LCA1LCAxLCAyMDYsIDIxNywgMywgOTUsIDgsIDUsIDEsIDY2LCAzLCAyMTksIDE0MiwgMTEzLCA4LCA1LCAxLCAyNDUsIAorICAgIDUyLCAzLCAyMTksIDE0MiwgMTEzLCA4LCA1LCAxLCAyNDAsIDE3NSwgMywgMjE5LCAxNDIsIDExMywgOCwgNSwgMSwgMjM5LCAKKyAgICA3NiwgMywgMjE5LCAxNDIsIDExMywgOCwgNSwgMSwgMjMwLCA1NSwgMywgMjE5LCAxNDIsIDExMywgOCwgNSwgMSwgMjI4LCAKKyAgICAxMzEsIDMsIDIxOSwgMTQyLCAxMTMsIDgsIDUsIDEsIDIyNiwgMTg2LCAzLCAyMTksIDE0MiwgMTEzLCA4LCA1LCAxLCAyMjMsIAorICAgIDE2NCwgMywgMjE5LCAxNDIsIDExMywgOCwgNSwgMSwgMjE5LCAxODUsIDMsIDIxOSwgMTQyLCAxMTMsIDgsIDUsIDEsIDIxNywgCisgICAgMSwgMywgMjE5LCAxNDIsIDExMywgOCwgNSwgMSwgMjE1LCA5NCwgMywgMjE5LCAxNDIsIDExMywgOCwgNSwgMSwgMjQxLCA4LCAKKyAgICAzLCAyMTksIDE0MiwgMTEzLCA4LCA1LCAxLCAyMDYsIDE2NSwgMywgMjE5LCAxNDIsIDExMywgOCwgNSwgMSwgMjAzLCAxOTcsIAorICAgIDMsIDIxOSwgMTQyLCAxMTMsIDgsIDUsIDEsIDIwMiwgMTYwLCAzLCAyMTksIDE0MiwgMTEzLCA4LCA1LCAxLCAzNCwgMywgCisgICAgMjE2LCA3OSwgMTEzLCA4LCA1LCAxLCAyNTEsIDMsIDMsIDIxNiwgNzksIDExMywgOCwgNSwgMSwgMjQ1LCA1MiwgMywgMjM2LCAKKyAgICAxMTYsIDI1LCAyMDksIDI0OCwgOCwgNSwgMSwgMTg4LCAzLCAyMTYsIDc5LCAxMTMsIDgsIDUsIDEsIDE3MSwgMTg4LCAzLCAKKyAgICAyMTYsIDc5LCAxMTMsIDgsIDUsIDEsIDIxNiwgNzMsIDE3MSwgMTg4LCAzLCAyMTYsIDc5LCAxMTMsIDgsIDUsIDEsIDIxNCwgCisgICAgMTkzLCAzLCAyMTYsIDc5LCAxMTMsIDgsIDUsIDEsIDIzNSwgMjA2LCAzLCAyMTYsIDc5LCAxMTMsIDgsIDUsIDEsIDE3MSwgCisgICAgMTU4LCAzLCAyMTYsIDc5LCAxMTMsIDgsIDUsIDEsIDI0MSwgOCwgMywgMjE2LCA3OSwgMTEzLCA4LCA1LCAxLCAxMDYsIDMsIAorICAgIDIxNiwgNzksIDExMywgOCwgNSwgMSwgMjQwLCAxNzgsIDMsIDIxNiwgNzksIDExMywgNjUsIDEsIDUsIDIwNywgMTc0LCAKKyAgICAyNTEsIDIsIDY1LCAxLCA1LCAyNDcsIDEyNSwgNjUsIDEsIDUsIDI0NywgMTI2LCAzLCAyNDUsIDk1LCA2NSwgMSwgNSwgCisgICAgMjQwLCAyNDMsIDY1LCAxLCA1LCAyMTYsIDczLCAxNzEsIDc0LCA2NSwgMSwgNSwgMjQwLCAxNzQsIDY1LCAxLCA1LCAyNDMsIAorICAgIDg0LCAyMzAsIDE4NSwgMywgOTUsIDY1LCAxLCA1LCAxMzIsIDIzOSwgNzUsIDY1LCAxLCA1LCAyMDcsIDE3NCwgMjM3LCAKKyAgICAxNzEsIDY1LCAxLCA1LCAyMzUsIDIwNiwgMywgOTUsIDY1LCAxLCA1LCAyMzAsIDIzMCwgNjUsIDEsIDUsIDYsIDc1LCA2NSwgCisgICAgMSwgNSwgNiwgMjM1LCAyMDYsIDMsIDk1LCA2NSwgMSwgNSwgMjMwLCAxODUsIDMsIDI0NSwgMTI2LCA2NSwgMSwgNSwgMjI4LCAKKyAgICAxMzEsIDMsIDIxNiwgNzksIDExMywgNjUsIDEsIDUsIDIyOCwgMTMxLCAzLCAyMTksIDE0MiwgMTEzLCA2NSwgMSwgNSwgNiwgCisgICAgMTU5LCA2NSwgMSwgNSwgMjI2LCAxODYsIDMsIDExMywgNjUsIDEsIDUsIDIwNywgMTc0LCAyMjYsIDE4NiwgMywgMTYzLCAKKyAgICAyMjcsIDIxMCwgNjUsIDEsIDUsIDIyMywgMTY0LCAzLCA0OSwgMTEzLCA2NSwgMSwgNSwgMjIzLCAxNjQsIDMsIDIxNiwgNzksIAorICAgIDExMywgNjUsIDEsIDUsIDYsIDIyMywgMTYzLCA2NSwgMSwgNSwgMjQ4LCAyMjUsIDc4LCA2NSwgMSwgNSwgMjE4LCAxOTIsIAorICAgIDY1LCAxLCA1LCAyMTUsIDk0LCAzLCAxMTMsIDY1LCAxLCA1LCAyNDEsIDcsIDY1LCAxLCA1LCAyMTAsIDcwLCAzLCAyMTksIAorICAgIDE0MiwgMTEzLCA2NSwgMSwgNSwgMTA2LCAxNDIsIDY1LCAxLCA1LCAyMDYsIDIxNiwgNjUsIDEsIDUsIDYsIDY4LCA2NSwgMSwgCisgICAgNSwgMjA2LCAxNjUsIDMsIDExMywgNjUsIDEsIDUsIDIwNywgMTc0LCAyMDYsIDE2NCwgNjUsIDEsIDUsIDIwMiwgMTU5LCAKKyAgICA2NSwgMSwgNSwgMjAyLCAxNjAsIDMsIDIxNiwgNzksIDExMywgNjUsIDEsIDUsIDIwMiwgMTYwLCAzLCAyNDUsIDk1LCA2NSwgCisgICAgMSwgNSwgMjQwLCAxNzcsIDY1LCAxLCA1LCAyMDksIDc0LCAzOSwgMjQyLCA4MywgMjM3LCAyNTQsIDI1MSwgMTM4LCAzOSwgCisgICAgMjQyLCA4MywgMjUxLCAxMjYsIDI1MSwgMTM4LCAzOSwgMjEyLCAyNSwgNTYsIDM5LCAyMTAsIDE4MiwgODIsIDM5LCAyMjUsIAorICAgIDE2OSwgMzksIDIzNywgMjUxLCAzOSwgMjI1LCAxNjcsIDM5LCAyNTEsIDEyNCwgMzksIDIzNywgMjUyLCAzOSwgMjUxLCAKKyAgICAxMjUsIDM5LCA4LCA1LCAxLCAyMTcsIDEsIDU2LCAzOSwgMjQ3LCAyMTMsIDM5LCAyMjUsIDE2OCwgMzksIDUyLCAyNDYsIAorICAgIDUzLCA1NSwgMzksIDIyMCwgNjMsIDU1LCAzOSwgMjAyLCAzMCwgNTYsIDM5LCAyMzAsIDIxNiwgNTYsIDM5LCAyMDYsIDIxMSwgCisgICAgNTUsIDM5LCAyMDYsIDE5NCwgNTUsIDM5LCA4LCA1LCAxLCAyMzksIDIxNCwgMTcxLCAzNCwgNTUsIDM5LCA4LCA1LCAxLCAKKyAgICAyNTEsIDEwOSwgMzksIDgsIDUsIDEsIDI1MCwgMTc4LCAzOSwgOCwgNSwgMSwgMjUwLCAxOCwgMzksIDgsIDUsIDEsIDI0NywgCisgICAgMTI2LCAyNDYsIDIzMSwgMzksIDgsIDUsIDEsIDIzMSwgNCwgMjQ1LCA1MSwgMzksIDgsIDUsIDEsIDI0MCwgMjQzLCAzOSwgCisgICAgOCwgNSwgMSwgMjM5LCA3NSwgMzksIDgsIDEsIDUsIDYsIDIzOSwgNzUsIDM5LCA4LCA1LCAxLCAyMzAsIDU0LCAzOSwgOCwgCisgICAgNSwgMSwgMTU5LCAzOSwgOCwgMSwgNSwgNiwgMTU5LCAzOSwgOCwgMSwgNSwgNiwgMjI2LCAxODUsIDM5LCA4LCA1LCAxLCAKKyAgICAyMjMsIDE2MywgMzksIDgsIDEsIDUsIDYsIDIyMywgMTYzLCAzOSwgOCwgMSwgNSwgNiwgMTQ2LCAzOSwgOCwgNSwgMSwgCisgICAgMjE3LCAxLCAyMTUsIDE5MiwgMzksIDgsIDUsIDEsIDE5NCwgMzksIDgsIDUsIDEsIDE2MywgMTk0LCAzOSwgOCwgNSwgMSwgCisgICAgMjAyLCAxNTksIDM5LCA4LCA1LCAxLCAyNTEsIDIsIDM5LCA4LCA1LCAxLCAyNDksIDI1NSwgMzksIDgsIDUsIDEsIDI0OCwgCisgICAgMTA2LCAzOSwgOCwgNSwgMSwgMjE0LCAxOTIsIDM5LCA4LCA1LCAxLCAyNDAsIDE3NCwgMzksIDgsIDUsIDEsIDIyOCwgMTMxLCAKKyAgICAzLCA1MiwgMTAxLCAyMDgsIDIyNywgMzksIDgsIDUsIDEsIDE1OCwgMywgMTU3LCAyNDYsIDIxOSwgOTUsIDM5LCA4LCA1LCAKKyAgICAxLCAyMTksIDE4NCwgMzksIDgsIDUsIDEsIDI0MSwgNywgMzksIDgsIDUsIDEsIDEwNiwgMywgMTU3LCAyNDYsIDIxOSwgOTUsIAorICAgIDM5LCA4LCA1LCAxLCAyMDQsIDE0NCwgMzksIDgsIDUsIDEsIDM0LCAzLCAyNDMsIDIzMSwgMzksIDgsIDUsIDEsIDE1OCwgMywgCisgICAgMjQzLCAyMzEsIDM5LCA4LCA1LCAxLCAxMDYsIDMsIDI0MywgMjMxLCAzOSwgMTEyLCAyMTAsIDQsIDU1LCAzOSwgNTIsIAorICAgIDIzMCwgMjM5LCAyNDcsIDIxNSwgNTYsIDM5LCAyNTEsIDcsIDE1NiwgMjA4LCAxNzMsIDU2LCAzOSwgNDksIDI1MCwgOTUsIAorICAgIDU1LCAzOSwgNTAsIDI1MCwgOTUsIDI1LCAxMjEsIDI1MCwgOTUsIDU2LCA4LCA2LCAxLCAzNCwgMywgMjE1LCAyNTMsIDU2LCAKKyAgICA4LCA1LCAxLCAzNCwgMywgMjE1LCAyNTMsIDU2LCA4LCA2LCAxLCA2NiwgMywgNzAsIDU1LCA4LCA1LCAxLCA2NiwgMywgNzAsIAorICAgIDU1LCA4LCA2LCAxLCA2NiwgMywgNzAsIDU2LCA4LCA1LCAxLCA2NiwgMywgNzAsIDU2LCA4LCA2LCAxLCA2NiwgMywgMjI3LCAKKyAgICAxMTUsIDU2LCA4LCA1LCAxLCA2NiwgMywgMjI3LCAxMTUsIDU2LCA4LCA2LCAxLCAyNDcsIDEyNiwgMywgMjQ2LCAyMzIsIAorICAgIDI1LCAxNjUsIDgsIDUsIDEsIDI0NywgMTI2LCAzLCAyNDYsIDIzMiwgMjUsIDE2NSwgOCwgNiwgMSwgMjQ1LCA1MiwgMywgCisgICAgNzAsIDU1LCA4LCA1LCAxLCAyNDUsIDUyLCAzLCA3MCwgNTUsIDgsIDYsIDEsIDI0NSwgNTIsIDMsIDcwLCA1NiwgOCwgNSwgCisgICAgMSwgMjQ1LCA1MiwgMywgNzAsIDU2LCA4LCA2LCAxLCAyNDUsIDUyLCAzLCAyMjcsIDExNSwgNTYsIDgsIDUsIDEsIDI0NSwgCisgICAgNTIsIDMsIDIyNywgMTE1LCA1NiwgOCwgNiwgMSwgMjQ1LCA1MiwgMywgMjQ2LCAyMzEsIDgsIDUsIDEsIDI0NSwgNTIsIDMsIAorICAgIDI0NiwgMjMxLCA4LCA2LCAxLCAyNDUsIDUyLCAzLCAyNDYsIDUzLCA1NiwgOCwgNSwgMSwgMjQ1LCA1MiwgMywgMjQ2LCA1MywgCisgICAgNTYsIDgsIDYsIDEsIDE4OCwgMywgMjI1LCAxNzEsIDI1LCAyMzcsIDI1MywgOCwgNSwgMSwgMTg4LCAzLCAyMjUsIDE3MSwgCisgICAgMjUsIDIzNywgMjUzLCA4LCA2LCAxLCAxODgsIDMsIDIyNSwgMTcxLCAyNSwgMTY1LCA4LCA1LCAxLCAxODgsIDMsIDIyNSwgCisgICAgMTcxLCAyNSwgMTY1LCA4LCA2LCAxLCAxODgsIDMsIDI0NiwgNTMsIDU2LCA4LCA1LCAxLCAxODgsIDMsIDI0NiwgNTMsIDU2LCAKKyAgICA4LCA2LCAxLCAxODgsIDMsIDIwOCwgMjI4LCA1NiwgOCwgNSwgMSwgMTg4LCAzLCAyMDgsIDIyOCwgNTYsIDgsIDYsIDEsIAorICAgIDE4OCwgMywgMjQ2LCAyMzIsIDI1LCAyNDcsIDIxNCwgOCwgNSwgMSwgMTg4LCAzLCAyNDYsIDIzMiwgMjUsIDI0NywgMjE0LCAKKyAgICA4LCA2LCAxLCAyNDAsIDE3NSwgMywgNzAsIDU1LCA4LCA1LCAxLCAyNDAsIDE3NSwgMywgNzAsIDU1LCA4LCA2LCAxLCAyMzksIAorICAgIDc2LCAzLCAyMjUsIDE3MCwgOCwgNSwgMSwgMjM5LCA3NiwgMywgMjI1LCAxNzAsIDgsIDYsIDEsIDIzNywgMTcyLCAzLCA3MCwgCisgICAgNTUsIDgsIDUsIDEsIDIzNywgMTcyLCAzLCA3MCwgNTUsIDgsIDYsIDEsIDIzNywgMTcyLCAzLCA3MCwgNTYsIDgsIDUsIDEsIAorICAgIDIzNywgMTcyLCAzLCA3MCwgNTYsIDgsIDYsIDEsIDIzNywgMTcyLCAzLCAyNDMsIDIzMSwgOCwgNSwgMSwgMjM3LCAxNzIsIAorICAgIDMsIDI0MywgMjMxLCA4LCA2LCAxLCAyMzcsIDE3MiwgMywgMjQ2LCAyMzEsIDgsIDUsIDEsIDIzNywgMTcyLCAzLCAyNDYsIAorICAgIDIzMSwgOCwgNiwgMSwgMjM3LCAxNzIsIDMsIDI0NywgMjE1LCA1NiwgOCwgNSwgMSwgMjM3LCAxNzIsIDMsIDI0NywgMjE1LCAKKyAgICA1NiwgOCwgNiwgMSwgMjM1LCAyMDYsIDMsIDIwOCwgMjI4LCA1NiwgOCwgNSwgMSwgMjM1LCAyMDYsIDMsIDIwOCwgMjI4LCAKKyAgICA1NiwgOCwgNiwgMSwgMjM1LCAyMDYsIDMsIDI0MywgMjMyLCAyNSwgMTY1LCA4LCA1LCAxLCAyMzUsIDIwNiwgMywgMjQzLCAKKyAgICAyMzIsIDI1LCAxNjUsIDgsIDYsIDEsIDIzMCwgNTUsIDMsIDE2NSwgOCwgNSwgMSwgMjMwLCA1NSwgMywgMTY1LCA4LCA2LCAKKyAgICAxLCAyMzAsIDU1LCAzLCA3MCwgNTYsIDgsIDUsIDEsIDIzMCwgNTUsIDMsIDcwLCA1NiwgOCwgNiwgMSwgMjMwLCA1NSwgMywgCisgICAgMjI3LCAxMTUsIDU2LCA4LCA1LCAxLCAyMzAsIDU1LCAzLCAyMjcsIDExNSwgNTYsIDgsIDYsIDEsIDIyOCwgMTMxLCAzLCAKKyAgICA3MCwgNTYsIDgsIDUsIDEsIDIyOCwgMTMxLCAzLCA3MCwgNTYsIDgsIDYsIDEsIDIyOCwgMTMxLCAzLCA3MCwgMjQ4LCAxMjYsIAorICAgIDI1LCAyMjUsIDE3MCwgOCwgNSwgMSwgMjI4LCAxMzEsIDMsIDcwLCAyNDgsIDEyNiwgMjUsIDIyNSwgMTcwLCA4LCA2LCAxLCAKKyAgICAyMjgsIDEzMSwgMywgMjI3LCAxMTUsIDU2LCA4LCA1LCAxLCAyMjgsIDEzMSwgMywgMjI3LCAxMTUsIDU2LCA4LCA2LCAxLCAKKyAgICAyMjgsIDEzMSwgMywgMjQ2LCA1MywgNTYsIDgsIDUsIDEsIDIyOCwgMTMxLCAzLCAyNDYsIDUzLCA1NiwgOCwgNiwgMSwgCisgICAgMjI2LCAxODYsIDMsIDE2NSwgOCwgNSwgMSwgMjI2LCAxODYsIDMsIDE2NSwgOCwgNiwgMSwgMjI2LCAxODYsIDMsIDcwLCAKKyAgICA1NSwgOCwgNSwgMSwgMjI2LCAxODYsIDMsIDcwLCA1NSwgOCwgNiwgMSwgMjI2LCAxODYsIDMsIDcwLCA1NiwgOCwgNSwgMSwgCisgICAgMjI2LCAxODYsIDMsIDcwLCA1NiwgOCwgNiwgMSwgMjIzLCAxNjQsIDMsIDcwLCA1NSwgOCwgNSwgMSwgMjIzLCAxNjQsIDMsIAorICAgIDcwLCA1NSwgOCwgNiwgMSwgMjIzLCAxNjQsIDMsIDcwLCA1NiwgOCwgNSwgMSwgMjIzLCAxNjQsIDMsIDcwLCA1NiwgOCwgNiwgCisgICAgMSwgMjIzLCAxNjQsIDMsIDIyNywgMTE1LCA1NiwgOCwgNSwgMSwgMjIzLCAxNjQsIDMsIDIyNywgMTE1LCA1NiwgOCwgNiwgCisgICAgMSwgMjIzLCAxNjQsIDMsIDI0NiwgNTMsIDU2LCA4LCA1LCAxLCAyMjMsIDE2NCwgMywgMjQ2LCA1MywgNTYsIDgsIDYsIDEsIAorICAgIDE1OCwgMywgMjA4LCAyMjgsIDI1LCAxNjUsIDgsIDUsIDEsIDE1OCwgMywgMjA4LCAyMjgsIDI1LCAxNjUsIDgsIDYsIDEsIAorICAgIDE1OCwgMywgMjA4LCAyMjgsIDI1LCAyNDMsIDIzMSwgOCwgNSwgMSwgMTU4LCAzLCAyMDgsIDIyOCwgMjUsIDI0MywgMjMxLCAKKyAgICA4LCA2LCAxLCAxNTgsIDMsIDIyNSwgMTcxLCAyNSwgMjM3LCAyNTMsIDgsIDUsIDEsIDE1OCwgMywgMjI1LCAxNzEsIDI1LCAKKyAgICAyMzcsIDI1MywgOCwgNiwgMSwgMTU4LCAzLCAyMjUsIDE3MSwgMjUsIDE2NSwgOCwgNSwgMSwgMTU4LCAzLCAyMjUsIDE3MSwgCisgICAgMjUsIDE2NSwgOCwgNiwgMSwgMjE5LCAxODUsIDMsIDE2NSwgOCwgNSwgMSwgMjE5LCAxODUsIDMsIDE2NSwgOCwgNiwgMSwgCisgICAgMjE5LCAxODUsIDMsIDcwLCA1NSwgOCwgNSwgMSwgMjE5LCAxODUsIDMsIDcwLCA1NSwgOCwgNiwgMSwgMjE3LCAxLCAzLCAKKyAgICA3MCwgNTUsIDgsIDUsIDEsIDIxNywgMSwgMywgNzAsIDU1LCA4LCA2LCAxLCAyMTcsIDEsIDMsIDcwLCA1NiwgOCwgNSwgMSwgCisgICAgMjE3LCAxLCAzLCA3MCwgNTYsIDgsIDYsIDEsIDIxNywgMSwgMywgNzAsIDI0OCwgMTI2LCAyNSwgMjI1LCAxNzAsIDgsIDUsIAorICAgIDEsIDIxNywgMSwgMywgNzAsIDI0OCwgMTI2LCAyNSwgMjI1LCAxNzAsIDgsIDYsIDEsIDIxNywgMSwgMywgMjI3LCAxMTUsIAorICAgIDU2LCA4LCA1LCAxLCAyMTcsIDEsIDMsIDIyNywgMTE1LCA1NiwgOCwgNiwgMSwgMjE1LCA5NCwgMywgNzAsIDU1LCA4LCA1LCAKKyAgICAxLCAyMTUsIDk0LCAzLCA3MCwgNTUsIDgsIDYsIDEsIDIxNSwgOTQsIDMsIDcwLCA1NiwgOCwgNSwgMSwgMjE1LCA5NCwgMywgCisgICAgNzAsIDU2LCA4LCA2LCAxLCAyMTUsIDk0LCAzLCAyNTEsIDEyNiwgMjUsIDcwLCA1NSwgOCwgNSwgMSwgMjE1LCA5NCwgMywgCisgICAgMjUxLCAxMjYsIDI1LCA3MCwgNTUsIDgsIDYsIDEsIDIxNSwgOTQsIDMsIDI0NywgMzAsIDI1LCA3MCwgNTUsIDgsIDUsIDEsIAorICAgIDIxNSwgOTQsIDMsIDI0NywgMzAsIDI1LCA3MCwgNTUsIDgsIDYsIDEsIDIxNSwgOTQsIDMsIDcwLCAyNDgsIDEyNiwgMjUsIAorICAgIDcwLCA1NSwgOCwgNSwgMSwgMjE1LCA5NCwgMywgNzAsIDI0OCwgMTI2LCAyNSwgNzAsIDU1LCA4LCA2LCAxLCAyMTAsIDcwLCAKKyAgICAzLCA3MCwgNTUsIDgsIDUsIDEsIDIxMCwgNzAsIDMsIDcwLCA1NSwgOCwgNiwgMSwgMjEwLCA3MCwgMywgNzAsIDU2LCA4LCAKKyAgICA1LCAxLCAyMTAsIDcwLCAzLCA3MCwgNTYsIDgsIDYsIDEsIDIxMCwgNzAsIDMsIDIyNywgMTE1LCA1NiwgOCwgNSwgMSwgCisgICAgMjEwLCA3MCwgMywgMjI3LCAxMTUsIDU2LCA4LCA2LCAxLCAyMTAsIDcwLCAzLCAyNDYsIDUzLCA1NiwgOCwgNSwgMSwgMjEwLCAKKyAgICA3MCwgMywgMjQ2LCA1MywgNTYsIDgsIDYsIDEsIDEwNiwgMywgMjQzLCAyMzIsIDU2LCA4LCA1LCAxLCAxMDYsIDMsIDI0MywgCisgICAgMjMyLCA1NiwgOCwgNiwgMSwgMTA2LCAzLCAyMDgsIDIyOCwgNTYsIDgsIDUsIDEsIDEwNiwgMywgMjA4LCAyMjgsIDU2LCA4LCAKKyAgICA2LCAxLCAxMDYsIDMsIDI0NiwgNTMsIDU2LCA4LCA1LCAxLCAxMDYsIDMsIDI0NiwgNTMsIDU2LCA4LCA2LCAxLCAxMDYsIDMsIAorICAgIDIwOCwgMjI4LCAyNSwgMTY1LCA4LCA1LCAxLCAxMDYsIDMsIDIwOCwgMjI4LCAyNSwgMTY1LCA4LCA2LCAxLCAxMDYsIDMsIAorICAgIDIyNSwgMTcxLCAyNSwgMjQzLCAyMzEsIDgsIDUsIDEsIDEwNiwgMywgMjI1LCAxNzEsIDI1LCAyNDMsIDIzMSwgOCwgNiwgMSwgCisgICAgMjA2LCAxNjUsIDMsIDIwOCwgMjI3LCA4LCA1LCAxLCAyMDYsIDE2NSwgMywgMjA4LCAyMjcsIDgsIDYsIDEsIDIwNiwgMTY1LCAKKyAgICAzLCA3MCwgNTYsIDgsIDUsIDEsIDIwNiwgMTY1LCAzLCA3MCwgNTYsIDgsIDYsIDEsIDIwNCwgMTQ1LCAzLCAyMzcsIDI1MywgCisgICAgOCwgNSwgMSwgMjA0LCAxNDUsIDMsIDIzNywgMjUzLCA4LCA2LCAxLCAyMDQsIDE0NSwgMywgMTY1LCA4LCA1LCAxLCAyMDQsIAorICAgIDE0NSwgMywgMTY1LCA4LCA2LCAxLCAyMDQsIDE0NSwgMywgMjQzLCAyMzEsIDgsIDUsIDEsIDIwNCwgMTQ1LCAzLCAyNDMsIAorICAgIDIzMSwgOCwgNiwgMSwgMjA0LCAxNDUsIDMsIDcwLCA1NSwgOCwgNSwgMSwgMjA0LCAxNDUsIDMsIDcwLCA1NSwgOCwgNiwgMSwgCisgICAgMjA0LCAxNDUsIDMsIDcwLCA1NiwgOCwgNSwgMSwgMjA0LCAxNDUsIDMsIDcwLCA1NiwgOCwgNiwgMSwgMjAzLCAxOTcsIDMsIAorICAgIDcwLCA1NSwgOCwgNSwgMSwgMjAzLCAxOTcsIDMsIDcwLCA1NSwgOCwgNiwgMSwgMjAzLCAxOTcsIDMsIDI0MywgMjMxLCA4LCAKKyAgICA1LCAxLCAyMDMsIDE5NywgMywgMjQzLCAyMzEsIDgsIDYsIDEsIDIwMywgMTI1LCAzLCA3MCwgNTUsIDgsIDUsIDEsIDIwMywgCisgICAgMTI1LCAzLCA3MCwgNTUsIDgsIDYsIDEsIDIwMiwgMTYwLCAzLCAyNDYsIDUyLCA4LCA1LCAxLCAyMDIsIDE2MCwgMywgMjQ2LCAKKyAgICA1MiwgOCwgNiwgMSwgMjAyLCAxNjAsIDMsIDcwLCA1NiwgOCwgNSwgMSwgMjAyLCAxNjAsIDMsIDcwLCA1NiwgOCwgNiwgMSwgCisgICAgMjAyLCAxNjAsIDMsIDIyNywgMTE1LCA1NiwgOCwgNSwgMSwgMjAyLCAxNjAsIDMsIDIyNywgMTE1LCA1NiwgOCwgNSwgMSwgCisgICAgMjM3LCAxNzIsIDMsIDIyNywgMTE1LCA1NiwgOCwgNSwgMSwgMjEwLCA3MCwgMywgMjQzLCAyMzEsIDgsIDUsIDEsIDIwNCwgCisgICAgMTQ1LCAzLCAyMTUsIDI1MywgNTUsIDgsIDUsIDEsIDIwMywgMTI1LCAzLCAyMTUsIDI1MywgNTUsIDgsIDUsIDEsIDM0LCAzLCAKKyAgICA1MCwgMTYyLCAyMTUsIDI1MiwgOCwgNSwgMSwgMTYzLCAyMTUsIDk0LCAzLCA3MCwgNTUsIDgsIDUsIDEsIDE2MywgMjE1LCAKKyAgICA5NCwgMywgMjQzLCAyMjgsIDk1LCA4LCA1LCAxLCAxNjMsIDIxNSwgOTQsIDMsIDEzOCwgOTUsIDgsIDYsIDEsIDIxMywgNTcsIAorICAgIDE5NCwgOCwgNSwgMSwgMjQ0LCAzNywgOCwgNiwgMSwgMzQsIDMsIDcwLCA1NiwgOCwgNSwgMSwgMzQsIDMsIDcwLCA1NiwgOCwgCisgICAgNiwgMSwgMzQsIDMsIDIzNiwgMTE2LCA1NSwgOCwgNSwgMSwgMzQsIDMsIDIzNiwgMTE2LCA1NSwgOCwgNiwgMSwgMzQsIDMsIAorICAgIDI0NiwgNTMsIDI1LCAxNjUsIDgsIDUsIDEsIDM0LCAzLCAyNDYsIDUzLCAyNSwgMTY1LCA4LCA2LCAxLCAzNCwgMywgMjQ2LCAKKyAgICA1MywgMjUsIDIzNywgMjUzLCA4LCA1LCAxLCAzNCwgMywgMjQ2LCA1MywgMjUsIDIzNywgMjUzLCA4LCA2LCAxLCAzNCwgMywgCisgICAgMjQ2LCA1MywgMjUsIDIzNiwgMTE2LCA1NSwgOCwgNSwgMSwgMzQsIDMsIDI0NiwgNTMsIDI1LCAyMzYsIDExNiwgNTUsIDgsIAorICAgIDYsIDEsIDM0LCAzLCAyNDYsIDUzLCAyNSwgMjA4LCAyMjcsIDgsIDUsIDEsIDM0LCAzLCAyNDYsIDUzLCAyNSwgMjA4LCAKKyAgICAyMjcsIDgsIDYsIDEsIDM0LCAzLCAyNDYsIDUzLCAyNSwgNzAsIDU2LCA4LCA1LCAxLCAzNCwgMywgMjQ2LCA1MywgMjUsIAorICAgIDcwLCA1NiwgOCwgNiwgMSwgMzQsIDMsIDI0NywgMjE1LCAyNSwgMTY1LCA4LCA1LCAxLCAzNCwgMywgMjQ3LCAyMTUsIDI1LCAKKyAgICAxNjUsIDgsIDYsIDEsIDM0LCAzLCAyNDcsIDIxNSwgMjUsIDIzNywgMjUzLCA4LCA1LCAxLCAzNCwgMywgMjQ3LCAyMTUsIAorICAgIDI1LCAyMzcsIDI1MywgOCwgNiwgMSwgMzQsIDMsIDI0NywgMjE1LCAyNSwgMjM2LCAxMTYsIDU1LCA4LCA1LCAxLCAzNCwgMywgCisgICAgMjQ3LCAyMTUsIDI1LCAyMzYsIDExNiwgNTUsIDgsIDYsIDEsIDM0LCAzLCAyNDcsIDIxNSwgMjUsIDIwOCwgMjI3LCA4LCA1LCAKKyAgICAxLCAzNCwgMywgMjQ3LCAyMTUsIDI1LCAyMDgsIDIyNywgOCwgNiwgMSwgMzQsIDMsIDI0NywgMjE1LCAyNSwgNzAsIDU2LCAKKyAgICA4LCA1LCAxLCAzNCwgMywgMjQ3LCAyMTUsIDI1LCA3MCwgNTYsIDgsIDYsIDEsIDE4OCwgMywgNzAsIDU2LCA4LCA1LCAxLCAKKyAgICAxODgsIDMsIDcwLCA1NiwgOCwgNiwgMSwgMTg4LCAzLCAyMzYsIDExNiwgNTUsIDgsIDUsIDEsIDE4OCwgMywgMjM2LCAxMTYsIAorICAgIDU1LCA4LCA2LCAxLCAxODgsIDMsIDIwOCwgMjI3LCA4LCA1LCAxLCAxODgsIDMsIDIwOCwgMjI3LCA4LCA2LCAxLCAxODgsIAorICAgIDMsIDI0NiwgNTMsIDI1LCAxNjUsIDgsIDUsIDEsIDE4OCwgMywgMjQ2LCA1MywgMjUsIDE2NSwgOCwgNiwgMSwgMTg4LCAzLCAKKyAgICAyNDYsIDUzLCAyNSwgMjM3LCAyNTMsIDgsIDUsIDEsIDE4OCwgMywgMjQ2LCA1MywgMjUsIDIzNywgMjUzLCA4LCA2LCAxLCAKKyAgICAxODgsIDMsIDI0NiwgNTMsIDI1LCAyMzYsIDExNiwgNTUsIDgsIDUsIDEsIDE4OCwgMywgMjQ2LCA1MywgMjUsIDIzNiwgCisgICAgMTE2LCA1NSwgOCwgNiwgMSwgMTg4LCAzLCAyNDYsIDUzLCAyNSwgMjA4LCAyMjcsIDgsIDUsIDEsIDE4OCwgMywgMjQ2LCAKKyAgICA1MywgMjUsIDIwOCwgMjI3LCA4LCA2LCAxLCAxODgsIDMsIDI0NiwgNTMsIDI1LCA3MCwgNTYsIDgsIDUsIDEsIDE4OCwgMywgCisgICAgMjQ2LCA1MywgMjUsIDcwLCA1NiwgOCwgNiwgMSwgMjM1LCAyMDYsIDMsIDIzNiwgMTE2LCA1NSwgOCwgNSwgMSwgMjM1LCAKKyAgICAyMDYsIDMsIDIzNiwgMTE2LCA1NSwgOCwgNiwgMSwgMjM1LCAyMDYsIDMsIDcwLCA1NiwgOCwgNSwgMSwgMjM1LCAyMDYsIDMsIAorICAgIDcwLCA1NiwgOCwgNiwgMSwgMTU4LCAzLCA3MCwgNTYsIDgsIDUsIDEsIDE1OCwgMywgNzAsIDU2LCA4LCA2LCAxLCAxNTgsIAorICAgIDMsIDIzNiwgMTE2LCA1NSwgOCwgNSwgMSwgMTU4LCAzLCAyMzYsIDExNiwgNTUsIDgsIDYsIDEsIDE1OCwgMywgMjQ2LCA1MywgCisgICAgMjUsIDE2NSwgOCwgNSwgMSwgMTU4LCAzLCAyNDYsIDUzLCAyNSwgMTY1LCA4LCA2LCAxLCAxNTgsIDMsIDI0NiwgNTMsIDI1LCAKKyAgICAyMzcsIDI1MywgOCwgNSwgMSwgMTU4LCAzLCAyNDYsIDUzLCAyNSwgMjM3LCAyNTMsIDgsIDYsIDEsIDE1OCwgMywgMjQ2LCAKKyAgICA1MywgMjUsIDIzNiwgMTE2LCA1NSwgOCwgNSwgMSwgMTU4LCAzLCAyNDYsIDUzLCAyNSwgMjM2LCAxMTYsIDU1LCA4LCA2LCAKKyAgICAxLCAxNTgsIDMsIDI0NiwgNTMsIDI1LCAyMDgsIDIyNywgOCwgNSwgMSwgMTU4LCAzLCAyNDYsIDUzLCAyNSwgMjA4LCAyMjcsIAorICAgIDgsIDYsIDEsIDE1OCwgMywgMjQ2LCA1MywgMjUsIDcwLCA1NiwgOCwgNSwgMSwgMTU4LCAzLCAyNDYsIDUzLCAyNSwgNzAsIAorICAgIDU2LCA4LCA2LCAxLCAxNTgsIDMsIDIzNiwgNTQsIDI1LCAxNjUsIDgsIDUsIDEsIDE1OCwgMywgMjM2LCA1NCwgMjUsIDE2NSwgCisgICAgOCwgNiwgMSwgMTU4LCAzLCAyMzYsIDU0LCAyNSwgMjM3LCAyNTMsIDgsIDUsIDEsIDE1OCwgMywgMjM2LCA1NCwgMjUsIAorICAgIDIzNywgMjUzLCA4LCA2LCAxLCAxNTgsIDMsIDIzNiwgNTQsIDI1LCAyMzYsIDExNiwgNTUsIDgsIDUsIDEsIDE1OCwgMywgCisgICAgMjM2LCA1NCwgMjUsIDIzNiwgMTE2LCA1NSwgOCwgNiwgMSwgMTU4LCAzLCAyMzYsIDU0LCAyNSwgMjA4LCAyMjcsIDgsIDUsIAorICAgIDEsIDE1OCwgMywgMjM2LCA1NCwgMjUsIDIwOCwgMjI3LCA4LCA2LCAxLCAxNTgsIDMsIDIzNiwgNTQsIDI1LCA3MCwgNTYsIAorICAgIDgsIDUsIDEsIDE1OCwgMywgMjM2LCA1NCwgMjUsIDcwLCA1NiwgOCwgNiwgMSwgMTA2LCAzLCA3MCwgNTYsIDgsIDUsIDEsIAorICAgIDEwNiwgMywgNzAsIDU2LCA4LCA2LCAxLCAxMDYsIDMsIDIzNiwgMTE2LCA1NSwgOCwgNSwgMSwgMTA2LCAzLCAyMzYsIDExNiwgCisgICAgNTUsIDgsIDYsIDEsIDEwNiwgMywgMjM2LCA1NCwgMjUsIDE2NSwgOCwgNSwgMSwgMTA2LCAzLCAyMzYsIDU0LCAyNSwgMTY1LCAKKyAgICA4LCA2LCAxLCAxMDYsIDMsIDIzNiwgNTQsIDI1LCAyMzcsIDI1MywgOCwgNSwgMSwgMTA2LCAzLCAyMzYsIDU0LCAyNSwgCisgICAgMjM3LCAyNTMsIDgsIDYsIDEsIDEwNiwgMywgMjM2LCA1NCwgMjUsIDIzNiwgMTE2LCA1NSwgOCwgNSwgMSwgMTA2LCAzLCAKKyAgICAyMzYsIDU0LCAyNSwgMjM2LCAxMTYsIDU1LCA4LCA2LCAxLCAxMDYsIDMsIDIzNiwgNTQsIDI1LCAyMDgsIDIyNywgOCwgNSwgCisgICAgMSwgMTA2LCAzLCAyMzYsIDU0LCAyNSwgMjA4LCAyMjcsIDgsIDYsIDEsIDEwNiwgMywgMjM2LCA1NCwgMjUsIDcwLCA1NiwgCisgICAgOCwgNSwgMSwgMTA2LCAzLCAyMzYsIDU0LCAyNSwgNzAsIDU2LCA4LCA2LCAxLCAyMDMsIDEyNSwgMywgMjM3LCAyNTMsIDgsIAorICAgIDUsIDEsIDIwMywgMTI1LCAzLCAyMzcsIDI1MywgOCwgNiwgMSwgMjAzLCAxMjUsIDMsIDcwLCA1NiwgOCwgNSwgMSwgMjAzLCAKKyAgICAxMjUsIDMsIDcwLCA1NiwgOCwgNiwgMSwgMjAzLCAxMjUsIDMsIDIzNiwgMTE2LCA1NSwgOCwgNSwgMSwgMjAzLCAxMjUsIDMsIAorICAgIDIzNiwgMTE2LCA1NSwgOCwgNiwgMSwgMjAzLCAxMjUsIDMsIDIwOCwgMjI3LCA4LCA1LCAxLCAyMDMsIDEyNSwgMywgMjA4LCAKKyAgICAyMjcsIDgsIDYsIDEsIDIyNCwgMTQ3LCAyMjcsIDc4LCA4LCA1LCAxLCAyMjQsIDE0NywgMjI3LCA3OCwgOCwgNiwgMSwgCisgICAgMjI0LCAxNDcsIDIwNiwgMTY0LCA4LCA1LCAxLCAyMjQsIDE0NywgMjA2LCAxNjQsIDgsIDYsIDEsIDIwMywgMTI1LCAzLCAKKyAgICAyMjcsIDE0LCA4LCA1LCAxLCAyMDMsIDEyNSwgMywgMjI3LCAxNCwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjE3LCAxOTUsIAorICAgIDMwLCA1LCAxLCAyNTEsIDMsIDMsIDI0NCwgMTQxLCAzMCwgNSwgMSwgMjUxLCAzLCAzLCAyMTcsIDE5NiwgMjUsIDIwNiwgCisgICAgNzAsIDMwLCA1LCAxLCAyNTEsIDMsIDMsIDI0NCwgMTQyLCAyNSwgMjA2LCA3MCwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjE3LCAKKyAgICAxOTYsIDI1LCAyMTksIDE4OSwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjQ0LCAxNDIsIDI1LCAyMTksIDE4OSwgMzAsIDUsIDEsIAorICAgIDI1MSwgMywgMywgMjE3LCAxOTYsIDI1LCAyMTgsIDIzOSwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjQ0LCAxNDIsIDI1LCAKKyAgICAyMTgsIDIzOSwgMzAsIDYsIDEsIDI1MSwgMywgMywgMjE3LCAxOTUsIDMwLCA2LCAxLCAyNTEsIDMsIDMsIDI0NCwgMTQxLCAKKyAgICAzMCwgNiwgMSwgMjUxLCAzLCAzLCAyMTcsIDE5NiwgMjUsIDIwNiwgNzAsIDMwLCA2LCAxLCAyNTEsIDMsIDMsIDI0NCwgCisgICAgMTQyLCAyNSwgMjA2LCA3MCwgMzAsIDYsIDEsIDI1MSwgMywgMywgMjE3LCAxOTYsIDI1LCAyMTksIDE4OSwgMzAsIDYsIDEsIAorICAgIDI1MSwgMywgMywgMjQ0LCAxNDIsIDI1LCAyMTksIDE4OSwgMzAsIDYsIDEsIDI1MSwgMywgMywgMjE3LCAxOTYsIDI1LCAKKyAgICAyMTgsIDIzOSwgMzAsIDYsIDEsIDI1MSwgMywgMywgMjQ0LCAxNDIsIDI1LCAyMTgsIDIzOSwgMzAsIDUsIDEsIDI0MSwgMzgsIAorICAgIDMsIDIxNywgMTk1LCAzMCwgNSwgMSwgMjQxLCAzOCwgMywgMjQ0LCAxNDEsIDMwLCA1LCAxLCAyNDEsIDM4LCAzLCAyMTcsIAorICAgIDE5NiwgMjUsIDIwNiwgNzAsIDMwLCA1LCAxLCAyNDEsIDM4LCAzLCAyNDQsIDE0MiwgMjUsIDIwNiwgNzAsIDMwLCA1LCAxLCAKKyAgICAyNDEsIDM4LCAzLCAyMTcsIDE5NiwgMjUsIDIxOSwgMTg5LCAzMCwgNSwgMSwgMjQxLCAzOCwgMywgMjQ0LCAxNDIsIDI1LCAKKyAgICAyMTksIDE4OSwgMzAsIDYsIDEsIDI0MSwgMzgsIDMsIDIxNywgMTk1LCAzMCwgNiwgMSwgMjQxLCAzOCwgMywgMjQ0LCAxNDEsIAorICAgIDMwLCA2LCAxLCAyNDEsIDM4LCAzLCAyMTcsIDE5NiwgMjUsIDIwNiwgNzAsIDMwLCA2LCAxLCAyNDEsIDM4LCAzLCAyNDQsIAorICAgIDE0MiwgMjUsIDIwNiwgNzAsIDMwLCA2LCAxLCAyNDEsIDM4LCAzLCAyMTcsIDE5NiwgMjUsIDIxOSwgMTg5LCAzMCwgNiwgMSwgCisgICAgMjQxLCAzOCwgMywgMjQ0LCAxNDIsIDI1LCAyMTksIDE4OSwgMzAsIDUsIDEsIDI0MCwgMjQ5LCAzLCAyMTcsIDE5NSwgMzAsIAorICAgIDUsIDEsIDI0MCwgMjQ5LCAzLCAyNDQsIDE0MSwgMzAsIDUsIDEsIDI0MCwgMjQ5LCAzLCAyMTcsIDE5NiwgMjUsIDIwNiwgCisgICAgNzAsIDMwLCA1LCAxLCAyNDAsIDI0OSwgMywgMjQ0LCAxNDIsIDI1LCAyMDYsIDcwLCAzMCwgNSwgMSwgMjQwLCAyNDksIDMsIAorICAgIDIxNywgMTk2LCAyNSwgMjE5LCAxODksIDMwLCA1LCAxLCAyNDAsIDI0OSwgMywgMjQ0LCAxNDIsIDI1LCAyMTksIDE4OSwgCisgICAgMzAsIDUsIDEsIDI0MCwgMjQ5LCAzLCAyMTcsIDE5NiwgMjUsIDIxOCwgMjM5LCAzMCwgNSwgMSwgMjQwLCAyNDksIDMsIAorICAgIDI0NCwgMTQyLCAyNSwgMjE4LCAyMzksIDMwLCA2LCAxLCAyNDAsIDI0OSwgMywgMjE3LCAxOTUsIDMwLCA2LCAxLCAyNDAsIAorICAgIDI0OSwgMywgMjQ0LCAxNDEsIDMwLCA2LCAxLCAyNDAsIDI0OSwgMywgMjE3LCAxOTYsIDI1LCAyMDYsIDcwLCAzMCwgNiwgMSwgCisgICAgMjQwLCAyNDksIDMsIDI0NCwgMTQyLCAyNSwgMjA2LCA3MCwgMzAsIDYsIDEsIDI0MCwgMjQ5LCAzLCAyMTcsIDE5NiwgMjUsIAorICAgIDIxOSwgMTg5LCAzMCwgNiwgMSwgMjQwLCAyNDksIDMsIDI0NCwgMTQyLCAyNSwgMjE5LCAxODksIDMwLCA2LCAxLCAyNDAsIAorICAgIDI0OSwgMywgMjE3LCAxOTYsIDI1LCAyMTgsIDIzOSwgMzAsIDYsIDEsIDI0MCwgMjQ5LCAzLCAyNDQsIDE0MiwgMjUsIDIxOCwgCisgICAgMjM5LCAzMCwgNSwgMSwgMjMwLCAyMzEsIDMsIDIxNywgMTk1LCAzMCwgNSwgMSwgMjMwLCAyMzEsIDMsIDI0NCwgMTQxLCAKKyAgICAzMCwgNSwgMSwgMjMwLCAyMzEsIDMsIDIxNywgMTk2LCAyNSwgMjA2LCA3MCwgMzAsIDUsIDEsIDIzMCwgMjMxLCAzLCAyNDQsIAorICAgIDE0MiwgMjUsIDIwNiwgNzAsIDMwLCA1LCAxLCAyMzAsIDIzMSwgMywgMjE3LCAxOTYsIDI1LCAyMTksIDE4OSwgMzAsIDUsIAorICAgIDEsIDIzMCwgMjMxLCAzLCAyNDQsIDE0MiwgMjUsIDIxOSwgMTg5LCAzMCwgNSwgMSwgMjMwLCAyMzEsIDMsIDIxNywgMTk2LCAKKyAgICAyNSwgMjE4LCAyMzksIDMwLCA1LCAxLCAyMzAsIDIzMSwgMywgMjQ0LCAxNDIsIDI1LCAyMTgsIDIzOSwgMzAsIDYsIDEsIAorICAgIDIzMCwgMjMxLCAzLCAyMTcsIDE5NSwgMzAsIDYsIDEsIDIzMCwgMjMxLCAzLCAyNDQsIDE0MSwgMzAsIDYsIDEsIDIzMCwgCisgICAgMjMxLCAzLCAyMTcsIDE5NiwgMjUsIDIwNiwgNzAsIDMwLCA2LCAxLCAyMzAsIDIzMSwgMywgMjQ0LCAxNDIsIDI1LCAyMDYsIAorICAgIDcwLCAzMCwgNiwgMSwgMjMwLCAyMzEsIDMsIDIxNywgMTk2LCAyNSwgMjE5LCAxODksIDMwLCA2LCAxLCAyMzAsIDIzMSwgMywgCisgICAgMjQ0LCAxNDIsIDI1LCAyMTksIDE4OSwgMzAsIDYsIDEsIDIzMCwgMjMxLCAzLCAyMTcsIDE5NiwgMjUsIDIxOCwgMjM5LCAKKyAgICAzMCwgNiwgMSwgMjMwLCAyMzEsIDMsIDI0NCwgMTQyLCAyNSwgMjE4LCAyMzksIDMwLCA1LCAxLCAyMjAsIDM1LCAzLCAyMTcsIAorICAgIDE5NSwgMzAsIDUsIDEsIDIyMCwgMzUsIDMsIDI0NCwgMTQxLCAzMCwgNSwgMSwgMjIwLCAzNSwgMywgMjE3LCAxOTYsIDI1LCAKKyAgICAyMDYsIDcwLCAzMCwgNSwgMSwgMjIwLCAzNSwgMywgMjQ0LCAxNDIsIDI1LCAyMDYsIDcwLCAzMCwgNSwgMSwgMjIwLCAzNSwgCisgICAgMywgMjE3LCAxOTYsIDI1LCAyMTksIDE4OSwgMzAsIDUsIDEsIDIyMCwgMzUsIDMsIDI0NCwgMTQyLCAyNSwgMjE5LCAxODksIAorICAgIDMwLCA2LCAxLCAyMjAsIDM1LCAzLCAyMTcsIDE5NSwgMzAsIDYsIDEsIDIyMCwgMzUsIDMsIDI0NCwgMTQxLCAzMCwgNiwgMSwgCisgICAgMjIwLCAzNSwgMywgMjE3LCAxOTYsIDI1LCAyMDYsIDcwLCAzMCwgNiwgMSwgMjIwLCAzNSwgMywgMjQ0LCAxNDIsIDI1LCAKKyAgICAyMDYsIDcwLCAzMCwgNiwgMSwgMjIwLCAzNSwgMywgMjE3LCAxOTYsIDI1LCAyMTksIDE4OSwgMzAsIDYsIDEsIDIyMCwgMzUsIAorICAgIDMsIDI0NCwgMTQyLCAyNSwgMjE5LCAxODksIDMwLCA1LCAxLCAyMDYsIDIxNywgMywgMjE3LCAxOTUsIDMwLCA1LCAxLCAKKyAgICAyMDYsIDIxNywgMywgMjQ0LCAxNDEsIDMwLCA1LCAxLCAyMDYsIDIxNywgMywgMjE3LCAxOTYsIDI1LCAyMDYsIDcwLCAzMCwgCisgICAgNSwgMSwgMjA2LCAyMTcsIDMsIDI0NCwgMTQyLCAyNSwgMjA2LCA3MCwgMzAsIDUsIDEsIDIwNiwgMjE3LCAzLCAyMTcsIAorICAgIDE5NiwgMjUsIDIxOSwgMTg5LCAzMCwgNSwgMSwgMjA2LCAyMTcsIDMsIDI0NCwgMTQyLCAyNSwgMjE5LCAxODksIDMwLCA1LCAKKyAgICAxLCAyMDYsIDIxNywgMywgMjE3LCAxOTYsIDI1LCAyMTgsIDIzOSwgMzAsIDUsIDEsIDIwNiwgMjE3LCAzLCAyNDQsIDE0MiwgCisgICAgMjUsIDIxOCwgMjM5LCAzMCwgNiwgMSwgMjA2LCAyMTcsIDMsIDI0NCwgMTQxLCAzMCwgNiwgMSwgMjA2LCAyMTcsIDMsIAorICAgIDI0NCwgMTQyLCAyNSwgMjA2LCA3MCwgMzAsIDYsIDEsIDIwNiwgMjE3LCAzLCAyNDQsIDE0MiwgMjUsIDIxOSwgMTg5LCAzMCwgCisgICAgNiwgMSwgMjA2LCAyMTcsIDMsIDI0NCwgMTQyLCAyNSwgMjE4LCAyMzksIDMwLCA1LCAxLCAyMjAsIDM3LCAzLCAyMTcsIAorICAgIDE5NSwgMzAsIDUsIDEsIDIyMCwgMzcsIDMsIDI0NCwgMTQxLCAzMCwgNSwgMSwgMjIwLCAzNywgMywgMjE3LCAxOTYsIDI1LCAKKyAgICAyMDYsIDcwLCAzMCwgNSwgMSwgMjIwLCAzNywgMywgMjQ0LCAxNDIsIDI1LCAyMDYsIDcwLCAzMCwgNSwgMSwgMjIwLCAzNywgCisgICAgMywgMjE3LCAxOTYsIDI1LCAyMTksIDE4OSwgMzAsIDUsIDEsIDIyMCwgMzcsIDMsIDI0NCwgMTQyLCAyNSwgMjE5LCAxODksIAorICAgIDMwLCA1LCAxLCAyMjAsIDM3LCAzLCAyMTcsIDE5NiwgMjUsIDIxOCwgMjM5LCAzMCwgNSwgMSwgMjIwLCAzNywgMywgMjQ0LCAKKyAgICAxNDIsIDI1LCAyMTgsIDIzOSwgMzAsIDYsIDEsIDIyMCwgMzcsIDMsIDIxNywgMTk1LCAzMCwgNiwgMSwgMjIwLCAzNywgMywgCisgICAgMjQ0LCAxNDEsIDMwLCA2LCAxLCAyMjAsIDM3LCAzLCAyMTcsIDE5NiwgMjUsIDIwNiwgNzAsIDMwLCA2LCAxLCAyMjAsIDM3LCAKKyAgICAzLCAyNDQsIDE0MiwgMjUsIDIwNiwgNzAsIDMwLCA2LCAxLCAyMjAsIDM3LCAzLCAyMTcsIDE5NiwgMjUsIDIxOSwgMTg5LCAKKyAgICAzMCwgNiwgMSwgMjIwLCAzNywgMywgMjQ0LCAxNDIsIDI1LCAyMTksIDE4OSwgMzAsIDYsIDEsIDIyMCwgMzcsIDMsIDIxNywgCisgICAgMTk2LCAyNSwgMjE4LCAyMzksIDMwLCA2LCAxLCAyMjAsIDM3LCAzLCAyNDQsIDE0MiwgMjUsIDIxOCwgMjM5LCAzMCwgNSwgCisgICAgMSwgMjUxLCAzLCAzLCAyMDYsIDcwLCAzMCwgNSwgMSwgMjUxLCAzLCAzLCAyMTksIDE4OSwgMzAsIDUsIDEsIDI0MSwgMzgsIAorICAgIDMsIDIwNiwgNzAsIDMwLCA1LCAxLCAyNDEsIDM4LCAzLCAyMTksIDE4OSwgMzAsIDUsIDEsIDI0MCwgMjQ5LCAzLCAyMDYsIAorICAgIDcwLCAzMCwgNSwgMSwgMjQwLCAyNDksIDMsIDIxOSwgMTg5LCAzMCwgNSwgMSwgMjMwLCAyMzEsIDMsIDIwNiwgNzAsIDMwLCAKKyAgICA1LCAxLCAyMzAsIDIzMSwgMywgMjE5LCAxODksIDMwLCA1LCAxLCAyMjAsIDM1LCAzLCAyMDYsIDcwLCAzMCwgNSwgMSwgCisgICAgMjIwLCAzNSwgMywgMjE5LCAxODksIDMwLCA1LCAxLCAyMDYsIDIxNywgMywgMjA2LCA3MCwgMzAsIDUsIDEsIDIwNiwgMjE3LCAKKyAgICAzLCAyMTksIDE4OSwgMzAsIDUsIDEsIDIyMCwgMzcsIDMsIDIwNiwgNzAsIDMwLCA1LCAxLCAyMjAsIDM3LCAzLCAyMTksIAorICAgIDE4OSwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjE3LCAxOTYsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDI1MSwgMywgMywgCisgICAgMjQ0LCAxNDIsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjE3LCAxOTYsIDI1LCAyMDYsIDcxLCAyNSwgCisgICAgMjAyLCAyMjEsIDMwLCA1LCAxLCAyNTEsIDMsIDMsIDI0NCwgMTQyLCAyNSwgMjA2LCA3MSwgMjUsIDIwMiwgMjIxLCAzMCwgCisgICAgNSwgMSwgMjUxLCAzLCAzLCAyMTcsIDE5NiwgMjUsIDIxOSwgMTkwLCAyNSwgMjAyLCAyMjEsIDMwLCA1LCAxLCAyNTEsIDMsIAorICAgIDMsIDI0NCwgMTQyLCAyNSwgMjE5LCAxOTAsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjE3LCAxOTYsIAorICAgIDI1LCAyMTgsIDI0MCwgMjUsIDIwMiwgMjIxLCAzMCwgNSwgMSwgMjUxLCAzLCAzLCAyNDQsIDE0MiwgMjUsIDIxOCwgMjQwLCAKKyAgICAyNSwgMjAyLCAyMjEsIDMwLCA2LCAxLCAyNTEsIDMsIDMsIDIxNywgMTk2LCAyNSwgMjE3LCAyMDksIDMwLCA2LCAxLCAyNTEsIAorICAgIDMsIDMsIDI0NCwgMTQyLCAyNSwgMjE3LCAyMDksIDMwLCA2LCAxLCAyNTEsIDMsIDMsIDIxNywgMTk2LCAyNSwgMjA2LCA3MSwgCisgICAgMjUsIDIxNywgMjA5LCAzMCwgNiwgMSwgMjUxLCAzLCAzLCAyNDQsIDE0MiwgMjUsIDIwNiwgNzEsIDI1LCAyMTcsIDIwOSwgCisgICAgMzAsIDYsIDEsIDI1MSwgMywgMywgMjE3LCAxOTYsIDI1LCAyMTksIDE5MCwgMjUsIDIxNywgMjA5LCAzMCwgNiwgMSwgMjUxLCAKKyAgICAzLCAzLCAyNDQsIDE0MiwgMjUsIDIxOSwgMTkwLCAyNSwgMjE3LCAyMDksIDMwLCA2LCAxLCAyNTEsIDMsIDMsIDIxNywgCisgICAgMTk2LCAyNSwgMjE4LCAyNDAsIDI1LCAyMTcsIDIwOSwgMzAsIDYsIDEsIDI1MSwgMywgMywgMjQ0LCAxNDIsIDI1LCAyMTgsIAorICAgIDI0MCwgMjUsIDIxNywgMjA5LCAzMCwgNSwgMSwgMjQwLCAyNDksIDMsIDIxNywgMTk2LCAyNSwgMjAyLCAyMjEsIDMwLCA1LCAKKyAgICAxLCAyNDAsIDI0OSwgMywgMjQ0LCAxNDIsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDI0MCwgMjQ5LCAzLCAyMTcsIDE5NiwgCisgICAgMjUsIDIwNiwgNzEsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDI0MCwgMjQ5LCAzLCAyNDQsIDE0MiwgMjUsIDIwNiwgNzEsIAorICAgIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDI0MCwgMjQ5LCAzLCAyMTcsIDE5NiwgMjUsIDIxOSwgMTkwLCAyNSwgMjAyLCAKKyAgICAyMjEsIDMwLCA1LCAxLCAyNDAsIDI0OSwgMywgMjQ0LCAxNDIsIDI1LCAyMTksIDE5MCwgMjUsIDIwMiwgMjIxLCAzMCwgNSwgCisgICAgMSwgMjQwLCAyNDksIDMsIDIxNywgMTk2LCAyNSwgMjE4LCAyNDAsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDI0MCwgMjQ5LCAKKyAgICAzLCAyNDQsIDE0MiwgMjUsIDIxOCwgMjQwLCAyNSwgMjAyLCAyMjEsIDMwLCA2LCAxLCAyNDAsIDI0OSwgMywgMjE3LCAxOTYsIAorICAgIDI1LCAyMTcsIDIwOSwgMzAsIDYsIDEsIDI0MCwgMjQ5LCAzLCAyNDQsIDE0MiwgMjUsIDIxNywgMjA5LCAzMCwgNiwgMSwgCisgICAgMjQwLCAyNDksIDMsIDIxNywgMTk2LCAyNSwgMjA2LCA3MSwgMjUsIDIxNywgMjA5LCAzMCwgNiwgMSwgMjQwLCAyNDksIDMsIAorICAgIDI0NCwgMTQyLCAyNSwgMjA2LCA3MSwgMjUsIDIxNywgMjA5LCAzMCwgNiwgMSwgMjQwLCAyNDksIDMsIDIxNywgMTk2LCAyNSwgCisgICAgMjE5LCAxOTAsIDI1LCAyMTcsIDIwOSwgMzAsIDYsIDEsIDI0MCwgMjQ5LCAzLCAyNDQsIDE0MiwgMjUsIDIxOSwgMTkwLCAKKyAgICAyNSwgMjE3LCAyMDksIDMwLCA2LCAxLCAyNDAsIDI0OSwgMywgMjE3LCAxOTYsIDI1LCAyMTgsIDI0MCwgMjUsIDIxNywgCisgICAgMjA5LCAzMCwgNiwgMSwgMjQwLCAyNDksIDMsIDI0NCwgMTQyLCAyNSwgMjE4LCAyNDAsIDI1LCAyMTcsIDIwOSwgMzAsIDUsIAorICAgIDEsIDIyMCwgMzcsIDMsIDIxNywgMTk2LCAyNSwgMjAyLCAyMjEsIDMwLCA1LCAxLCAyMjAsIDM3LCAzLCAyNDQsIDE0MiwgCisgICAgMjUsIDIwMiwgMjIxLCAzMCwgNSwgMSwgMjIwLCAzNywgMywgMjE3LCAxOTYsIDI1LCAyMDYsIDcxLCAyNSwgMjAyLCAyMjEsIAorICAgIDMwLCA1LCAxLCAyMjAsIDM3LCAzLCAyNDQsIDE0MiwgMjUsIDIwNiwgNzEsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDIyMCwgCisgICAgMzcsIDMsIDIxNywgMTk2LCAyNSwgMjE5LCAxOTAsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDIyMCwgMzcsIDMsIDI0NCwgCisgICAgMTQyLCAyNSwgMjE5LCAxOTAsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDIyMCwgMzcsIDMsIDIxNywgMTk2LCAyNSwgMjE4LCAKKyAgICAyNDAsIDI1LCAyMDIsIDIyMSwgMzAsIDUsIDEsIDIyMCwgMzcsIDMsIDI0NCwgMTQyLCAyNSwgMjE4LCAyNDAsIDI1LCAyMDIsIAorICAgIDIyMSwgMzAsIDYsIDEsIDIyMCwgMzcsIDMsIDIxNywgMTk2LCAyNSwgMjE3LCAyMDksIDMwLCA2LCAxLCAyMjAsIDM3LCAzLCAKKyAgICAyNDQsIDE0MiwgMjUsIDIxNywgMjA5LCAzMCwgNiwgMSwgMjIwLCAzNywgMywgMjE3LCAxOTYsIDI1LCAyMDYsIDcxLCAyNSwgCisgICAgMjE3LCAyMDksIDMwLCA2LCAxLCAyMjAsIDM3LCAzLCAyNDQsIDE0MiwgMjUsIDIwNiwgNzEsIDI1LCAyMTcsIDIwOSwgMzAsIAorICAgIDYsIDEsIDIyMCwgMzcsIDMsIDIxNywgMTk2LCAyNSwgMjE5LCAxOTAsIDI1LCAyMTcsIDIwOSwgMzAsIDYsIDEsIDIyMCwgCisgICAgMzcsIDMsIDI0NCwgMTQyLCAyNSwgMjE5LCAxOTAsIDI1LCAyMTcsIDIwOSwgMzAsIDYsIDEsIDIyMCwgMzcsIDMsIDIxNywgCisgICAgMTk2LCAyNSwgMjE4LCAyNDAsIDI1LCAyMTcsIDIwOSwgMzAsIDYsIDEsIDIyMCwgMzcsIDMsIDI0NCwgMTQyLCAyNSwgMjE4LCAKKyAgICAyNDAsIDI1LCAyMTcsIDIwOSwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjA1LCAxNjcsIDMwLCA1LCAxLCAyNTEsIDMsIDMsIAorICAgIDIyNSwgMTcwLCAzMCwgNSwgMSwgMjUxLCAzLCAzLCAyMDYsIDcxLCAyNSwgMjAyLCAyMjEsIDMwLCA1LCAxLCAyNTEsIDMsIAorICAgIDMsIDIwMiwgMjIxLCAzMCwgNSwgMSwgMjUxLCAzLCAzLCAyMTksIDE5MCwgMjUsIDIwMiwgMjIxLCAzMCwgNSwgMSwgMjUxLCAKKyAgICAzLCAzLCAyMTgsIDIzOSwgMzAsIDUsIDEsIDI1MSwgMywgMywgMjE4LCAyNDAsIDI1LCAyMDIsIDIyMSwgMzAsIDYsIDEsIAorICAgIDI1MSwgMywgMywgMjA1LCAxNjcsIDMwLCA2LCAxLCAyNTEsIDMsIDMsIDIyNSwgMTcwLCAzMCwgNiwgMSwgMjUxLCAzLCAzLCAKKyAgICAyMDYsIDcwLCAzMCwgNiwgMSwgMjUxLCAzLCAzLCAyMTksIDE4OSwgMzAsIDYsIDEsIDI1MSwgMywgMywgMjE3LCAyMDksIAorICAgIDMwLCAyMjgsIDI1MiwgMzAsIDIxNywgMjA5LCAzMCwgMjE3LCAxOTUsIDMwLCAyMTgsIDIzOSwgMzAsIDI0MywgMjI1LCAyNSwgCisgICAgMjE4LCAyMzksIDMwLCA1LCAxLCAyNDAsIDI0OSwgMywgMjA2LCA3MSwgMjUsIDIwMiwgMjIxLCAzMCwgNSwgMSwgMjQwLCAKKyAgICAyNDksIDMsIDIwMiwgMjIxLCAzMCwgNSwgMSwgMjQwLCAyNDksIDMsIDIxOSwgMTkwLCAyNSwgMjAyLCAyMjEsIDMwLCA1LCAKKyAgICAxLCAyNDAsIDI0OSwgMywgMjE4LCAyMzksIDMwLCA1LCAxLCAyNDAsIDI0OSwgMywgMjE4LCAyNDAsIDI1LCAyMDIsIDIyMSwgCisgICAgMzAsIDYsIDEsIDI0MSwgMzgsIDMsIDIwNiwgNzAsIDMwLCA2LCAxLCAyNDEsIDM4LCAzLCAyMTksIDE4OSwgMzAsIDYsIDEsIAorICAgIDI0MCwgMjQ5LCAzLCAyMDYsIDcwLCAzMCwgNiwgMSwgMjQwLCAyNDksIDMsIDIxOSwgMTg5LCAzMCwgNiwgMSwgMjQwLCAKKyAgICAyNDksIDMsIDIxNywgMjA5LCAzMCwgMjE3LCAxOTYsIDI1LCAyMDYsIDcwLCAzMCwgMjE3LCAxOTYsIDI1LCAyMTksIDE4OSwgCisgICAgMzAsIDIxNywgMTk2LCAyNSwgMjE4LCAyMzksIDMwLCA1LCAxLCAyMzAsIDIzMSwgMywgMjA1LCAxNjcsIDMwLCA1LCAxLCAKKyAgICAyMzAsIDIzMSwgMywgMjI1LCAxNzAsIDMwLCA1LCAxLCAyMzAsIDIzMSwgMywgMjQzLCAyMjUsIDI1LCAyMDYsIDcwLCAzMCwgCisgICAgNSwgMSwgMjMwLCAyMzEsIDMsIDI0MywgMjI1LCAyNSwgMjE5LCAxODksIDMwLCA1LCAxLCAyMzAsIDIzMSwgMywgMjE4LCAKKyAgICAyMzksIDMwLCA1LCAxLCAyMzAsIDIzMSwgMywgMjQzLCAyMjUsIDI1LCAyMTgsIDIzOSwgMzAsIDYsIDEsIDIzMCwgMjMxLCAKKyAgICAzLCAyMDUsIDE2NywgMzAsIDYsIDEsIDIzMCwgMjMxLCAzLCAyMjUsIDE3MCwgMzAsIDYsIDEsIDIzMCwgMjMxLCAzLCAyMDYsIAorICAgIDcwLCAzMCwgNiwgMSwgMjMwLCAyMzEsIDMsIDIxOSwgMTg5LCAzMCwgMjQ0LCAxNDIsIDI1LCAyMDYsIDcwLCAzMCwgMjQ0LCAKKyAgICAxNDIsIDI1LCAyMTksIDE4OSwgMzAsIDI0NCwgMTQyLCAyNSwgMjE4LCAyMzksIDMwLCA1LCAxLCAyMDYsIDIxNywgMywgCisgICAgMjA1LCAxNjcsIDMwLCA1LCAxLCAyMDYsIDIxNywgMywgMjI1LCAxNzAsIDMwLCA1LCAxLCAyMDYsIDIxNywgMywgMjQzLCAKKyAgICAyMjUsIDI1LCAyMDYsIDcwLCAzMCwgNSwgMSwgMjA2LCAyMTcsIDMsIDI0MywgMjI1LCAyNSwgMjE5LCAxODksIDMwLCA1LCAKKyAgICAxLCAyMTYsIDYwLCAzLCAyMTcsIDE5NSwgMzAsIDUsIDEsIDIxNiwgNjAsIDMsIDI0NCwgMTQxLCAzMCwgNSwgMSwgMjA2LCAKKyAgICAyMTcsIDMsIDIxOCwgMjM5LCAzMCwgNSwgMSwgMjA2LCAyMTcsIDMsIDI0MywgMjI1LCAyNSwgMjE4LCAyMzksIDMwLCA2LCAKKyAgICAxLCAyMDYsIDIxNywgMywgMjA1LCAxNjcsIDMwLCA2LCAxLCAyMDYsIDIxNywgMywgMjI1LCAxNzAsIDMwLCA2LCAxLCAyMDYsIAorICAgIDIxNywgMywgMjA2LCA3MCwgMzAsIDYsIDEsIDIwNiwgMjE3LCAzLCAyMTksIDE4OSwgMzAsIDYsIDEsIDIxNiwgNjAsIDMsIAorICAgIDI0NCwgMTQxLCAzMCwgMjQzLCAyMjUsIDI1LCAyMDYsIDcwLCAzMCwgMjQzLCAyMjUsIDI1LCAyMTksIDE4OSwgMzAsIDIwNiwgCisgICAgNzAsIDMwLCA1LCAxLCAyMjAsIDM3LCAzLCAyMDYsIDcxLCAyNSwgMjAyLCAyMjEsIDMwLCA1LCAxLCAyMjAsIDM3LCAzLCAKKyAgICAyMDIsIDIyMSwgMzAsIDUsIDEsIDIyMCwgMzcsIDMsIDIxOSwgMTkwLCAyNSwgMjAyLCAyMjEsIDMwLCA1LCAxLCAyMjAsIAorICAgIDM3LCAzLCAyMTgsIDIzOSwgMzAsIDUsIDEsIDIyMCwgMzcsIDMsIDIxOCwgMjQwLCAyNSwgMjAyLCAyMjEsIDMwLCA2LCAxLCAKKyAgICAyMjAsIDM1LCAzLCAyMDYsIDcwLCAzMCwgNiwgMSwgMjIwLCAzNSwgMywgMjE5LCAxODksIDMwLCA2LCAxLCAyMjAsIDM3LCAKKyAgICAzLCAyMDYsIDcwLCAzMCwgNiwgMSwgMjIwLCAzNywgMywgMjE5LCAxODksIDMwLCA2LCAxLCAyMjAsIDM3LCAzLCAyMTcsIAorICAgIDIwOSwgMzAsIDIxOSwgMTg5LCAzMCwgMjQ0LCAxNDEsIDI0MSwgOTMsIDIxNywgNjIsIDI0MSwgMTA0LCAyMTcsIDYyLCAKKyAgICAyNDEsIDkzLCAyMTEsIDIyOCwgMjQxLCAxMDQsIDIxMSwgMjI4LCAyMDksIDI4LCAyMTEsIDIyOCwgMjM5LCAxNDUsIDIxMSwgCisgICAgMjI4LCAyMTIsIDg2LCAyMTEsIDIyOCwgMjQwLCAxNiwgMjExLCAyMjgsIDIxNywgMTc5LCAyMTEsIDIyOCwgMjA5LCA2MywgCisgICAgMjExLCAyMjgsIDIzNywgMTQ2LCAyMTEsIDIyOCwgMjAyLCA4NSwgMjA0LCAyNCwgMjExLCAyMjgsIDIwMiwgODUsIDIwNCwgCisgICAgMjQsIDIyMSwgMTgzLCAyMDIsIDg1LCAyMDQsIDI0LCAyMzAsIDk2LCAyMjcsIDIxMywgODIsIDIxNiwgNywgODIsIDIzNSwgCisgICAgMjIwLCAyMjEsIDE4NCwgMjM1LCAyMjAsIDI0MCwgMTYsIDI0NCwgMTQ0LCAyNDEsIDkzLCAyNDQsIDE0NCwgMjQxLCAxMDQsIAorICAgIDI0NCwgMTQ0LCAyMzYsIDEwNiwgMTQyLCA1MiwgODAsIDIyNywgMTE0LCA1MiwgMTI0LCAyMjcsIDExNCwgNDksIDIxMiwgCisgICAgMTIwLCAyMTcsIDMxLCA4MiwgNTAsIDIxMiwgMTIwLCAyMTcsIDMxLCA4MiwgMjEyLCAxMjAsIDIyNiwgMjU1LCAyMTcsIDMxLCAKKyAgICA4MiwgMjEyLCAxMjAsIDIzNiwgMjQxLCAyMTcsIDMxLCA4MiwgNDksIDUyLCAyMTcsIDMxLCA4MiwgNTAsIDUyLCAyMTcsIAorICAgIDMxLCA4MiwgNTIsIDIyNiwgMjU1LCAyMTcsIDMxLCA4MiwgNTIsIDIzNiwgMjQxLCAyMTcsIDMxLCA4MiwgMjQ0LCAxOTUsIAorICAgIDUyLCAyNDQsIDE5NSwgMjQ3LCAxNzcsIDIwOCwgODIsIDI0NywgMTc3LCAxMTgsIDcwLCAyMjcsIDIzMiwgMTIwLCA3MCwgCisgICAgMjI3LCAyMzIsIDIzNiwgMTA2LCAyNDEsIDEwOCwgMjM1LCAyMTgsIDIxOCwgNjIsIDIyNywgMTE1LCAyMTMsIDEzMCwgMjE5LCAKKyAgICA4OSwgMjEzLCAxMzAsIDIyNywgMjEzLCAyNDEsIDEwMiwgMjE2LCA3LCAyNDEsIDEwMiwgMjE4LCA0MiwgMjQzLCAxNjUsIAorICAgIDIzOSwgMTU3LCAyMjcsIDIxMywgMjE5LCAxOTYsIDIxNiwgNywgMjE5LCAxOTYsIDIyMywgNzMsIDIyMSwgMTkwLCAyMTEsIAorICAgIDIyOCwgMjE4LCAyNDcsIDIyNCwgMTE2LCA1NCwgMjE4LCAyNDcsIDIwOSwgMTUzLCAyMDksIDM3LCA1NCwgMjE3LCAyMzYsIAorICAgIDUyLCAyMTcsIDIzNiwgMjA4LCA3MCwgMjE3LCAyMzYsIDIxNiwgNzMsIDIxNywgMjM2LCAyMTYsIDczLCA1MiwgMjE3LCAKKyAgICAyMzYsIDIxNiwgNzMsIDIwOCwgNzAsIDIxNywgMjM2LCAyNDcsIDMzLCAyMTIsIDEyMCwgMjI3LCAyMTcsIDI1MCwgMjE4LCAKKyAgICAyMTcsIDMxLCA4MiwgMjEyLCAxMjAsIDIxNiwgMTEsIDI1MCwgMjE4LCAyMTcsIDMxLCA4MiwgMjE2LCAxMzQsIDgyLCA1MiwgCisgICAgMjQwLCAyMTIsIDgyLCAyMzAsIDI0NywgMjE5LCAxOTgsIDIwNiwgMjQzLCAxNjcsIDIwOCwgMjUwLCAyNDcsIDM0LCAyMzEsIAorICAgIDgsIDIxOCwgNjIsIDI1MCwgNTcsIDIzNSwgMjIxLCAyNDcsIDE3NywgMjM5LCAxMzgsIDIxMiwgNTcsIDQ5LCA1MSwgMjQ3LCAKKyAgICAyMjcsIDMsIDIxNywgNDEsIDUwLCA1MSwgMjQ3LCAyMjcsIDMsIDIxNywgNDEsIDUyLCAyMTcsIDQ3LCA4MiwgMjE3LCA0NywgCisgICAgMjQwLCAyMTIsIDgyLCAyNDAsIDIxMiwgMjE3LCA0NywgODIsIDIwOCwgMjAzLCAyLCAyNDAsIDI1MCwgMjE2LCA3MywgMjE4LCAKKyAgICAxMjYsIDU0LCA2MiwgOTYsIDI0NywgMTc3LCA2MiwgODYsIDI0NywgMTc3LCAxMjQsIDI1MCwgNTksIDIxNiwgNzMsIDIxMywgCisgICAgMTQzLCAyNDYsIDE3LCAyMDYsIDIyNCwgMTIwLCAyNTAsIDU4LCAyNTEsIDE4LCAyMDUsIDI0MywgMjQ1LCAyMzEsIDIyNCwgCisgICAgMTAzLCA1NCwgMjEwLCAxNTMsIDI0NCwgMTQ0LCAyMzAsIDIzOSwgMjA2LCAyNDMsIDIzOSwgMTk4LCAyMTcsIDE3OSwgODIsIAorICAgIDEyNiwgNzAsIDIxNywgMTc4LCAyMTcsIDU4LCAyMTcsIDIzNiwgMjM5LCAxNDcsIDcwLCAyMTcsIDE3OCwgMjM5LCAyMzMsIAorICAgIDcwLCAyMTcsIDE3OCwgMTIwLCA3MCwgMjE3LCAxNzgsIDIzOSwgMTQ3LCA3MCwgODIsIDI0MiwgODMsIDI0NSwgMTMwLCAKKyAgICAyMDgsIDgxLCA4MCwgMjM5LCAxNDcsIDI0MywgODMsIDIyNSwgMTAsIDEzLCAyMTEsIDIyOCwgMjAzLCAyMzgsIDIzMCwgOTYsIAorICAgIDIzOSwgMTAwLCAyNTAsIDE1NSwgMjMwLCAyMzcsIDIwOCwgMjE5LCAyMzAsIDIzNywgMjEzLCAxMzAsIDIzMCwgMjM3LCAKKyAgICAyMTgsIDc2LCAyMjcsIDIxMywgMjMwLCAyMDcsIDIxNiwgNywgMjMwLCAyMDcsIDIzOSwgMjQ1LCAyMTEsIDE4LCAyMzAsIAorICAgIDIwNywgMjE4LCA0MiwgMjQzLCAxNjUsIDIzMCwgMjA3LCAyMzEsIDIwLCAyMTAsIDEwMSwgMjEwLCAxNzAsIDI1MSwgMTI4LCAKKyAgICAyMTAsIDEwMSwgMjEwLCAxNzAsIDIzMSwgMjAsIDEwLCAyMzksIDE1OSwgMjEzLCA2MSwgMjUxLCAxMjgsIDEwLCAyMzksIAorICAgIDE1OSwgMjEzLCA2MSwgMjIzLCA2NywgMTcsIDIxMywgNjIsIDIyMSwgMTg2LCAxNywgMjEzLCA2MiwgMjEwLCAxOTksIDIwMiwgCisgICAgODQsIDIxMCwgMTk5LCA4LCA1LCAxLCA3NSwgMjEwLCAxOTksIDE0OSwgMjEwLCAxOTksIDE3MCwgMjEwLCAxOTksIDE5NSwgCisgICAgMjEwLCAxOTksIDIxMywgMTExLCAyMTAsIDE5OSwgMTk5LCAyMTAsIDE5OSwgMjIyLCA2MywgMjEwLCAxOTksIDkxLCA1NCwgCisgICAgMjEwLCAxOTksIDIyNCwgMTAyLCAyMTAsIDE5OSwgMjQxLCAzNSwgNTQsIDIxMCwgMTk5LCA0OSwgMjE5LCA3NiwgMjEwLCAKKyAgICAxOTksIDUwLCAyMTksIDc2LCAyMTAsIDE5OSwgOCwgNSwgMSwgMjIzLCAxNjMsIDIxMCwgMjQ2LCAyMDIsIDg0LCAyMTAsIAorICAgIDI0NiwgMTA1LCAyMTAsIDI0NiwgMTA4LCAyMTAsIDI0NiwgMTQ3LCAyMTAsIDI0NiwgMTQ5LCAyMTAsIDI0NiwgMTcwLCAKKyAgICAyMTAsIDI0NiwgMTk1LCAyMTAsIDI0NiwgMjEzLCAxMTEsIDIxMCwgMjQ2LCAxOTksIDIxMCwgMjQ2LCAyMjIsIDYzLCAyMTAsIAorICAgIDI0NiwgOTEsIDU0LCAyMTAsIDI0NiwgMjI0LCAxMDIsIDIxMCwgMjQ2LCAyNDEsIDM1LCA1NCwgMjEwLCAyNDYsIDQ5LCAKKyAgICAyMTksIDc2LCAyMTAsIDI0NiwgNTAsIDIxOSwgNzYsIDgsIDIxMCwgMjQ2LCA1LCAxLCA2MywgOCwgMjEwLCAyNDYsIDUsIDEsIAorICAgIDc0LCA4LCAyMTAsIDI0NiwgNSwgMSwgNzgsIDgsIDIxMCwgMjQ2LCA1LCAxLCAyMDMsIDE5NiwgOCwgMjEwLCAyNDYsIDUsIAorICAgIDEsIDIxNCwgMTkyLCA4LCAyMTAsIDI0NiwgNSwgMSwgMjM3LCAxNzEsIDgsIDIxMCwgMjQ2LCA1LCAxLCAyMzAsIDU0LCA4LCAKKyAgICAyMTAsIDI0NiwgNSwgMSwgMTU5LCA4LCAyMTAsIDI0NiwgNSwgMSwgMjI2LCAxODUsIDgsIDIxMCwgMjQ2LCA1LCAxLCAyMjMsIAorICAgIDE2MywgOCwgMjEwLCAyNDYsIDUsIDEsIDIxOSwgMTg0LCA4LCAyMTAsIDI0NiwgNSwgMSwgMTk0LCA4LCAyMTAsIDI0NiwgNSwgCisgICAgMSwgMjEwLCA2OSwgMjQwLCAyMjksIDU0LCAyNDUsIDI0MywgNTQsIDI0NSwgMTE1LCA1NCwgMjM5LCAxMjgsIDIzOSwgMTMyLCAKKyAgICA1NCwgMjI3LCA5NCwgNTQsIDIyNCwgMTE3LCA1NCwgMjIzLCA5MCwgNTQsIDIxOCwgMjI0LCA1NCwgMjE1LCAxMjAsIDU0LCAKKyAgICAyMDMsIDI0NiwgNTQsIDIyMiwgMjE0LCAyMTMsIDI5LCA1NCwgMjQzLCA5MiwgNTQsIDI0MCwgMjMwLCA1NCwgMjI5LCA3OSwgCisgICAgNTQsIDIwNywgMTk2LCA1NCwgMjQyLCA2NiwgNTQsIDIzOCwgMTY2LCAyMTksIDIsIDU0LCAyMTgsIDIyMSwgNTQsIDIzNywgCisgICAgMjI1LCA1NCwgMjUwLCAyNCwgNTQsIDIzNiwgMzIsIDU0LCAyNDYsIDIzMywgNTQsIDIyNywgODQsIDIwOCwgMTI1LCA1NCwgCisgICAgMjExLCAyMDksIDU0LCAyMDksIDE1MCwgNTQsIDIzMSwgMzQsIDIxNSwgMTIwLCA1NCwgMjA3LCAxNzcsIDIyNywgOTQsIDU0LCAKKyAgICAyMjEsIDE3MywgMTMxLCA1NCwgMjI1LCAxMjAsIDU0LCAyMTUsIDE0MiwgNTQsIDIyOCwgNCwgNTQsIDM5LCA0OSwgMjM3LCAKKyAgICA4NywgNTUsIDM5LCA1MCwgMjM3LCA4NywgNTUsIDM5LCAxNjMsIDgwLCAyMjcsIDExNSwgMjE5LCAxOTksIDM5LCAyMTIsIAorICAgIDIyOCwgODAsIDIyNywgMTE1LCAyMTksIDE5OSwgMzksIDI1MCwgMTk0LCA1MywgNTUsIDM5LCAyNDYsIDE4LCA1MywgNTUsIAorICAgIDM5LCA0OSwgNTMsIDU1LCAzOSwgNTAsIDUzLCA1NSwgMzksIDIxNSwgMjUzLCAyMTksIDE5OSwgMzksIDI0NiwgMTgsIDIxNSwgCisgICAgMjUzLCAyMTksIDE5OSwgMzksIDI1MCwgMTk0LCAyMTUsIDI1MywgMjE5LCAxOTksIDM5LCAxMjYsIDE4NywgNTUsIDM5LCAKKyAgICAyMzksIDE0NywgMTg3LCA1NSwgMzksIDI0MSwgODgsIDI0NiwgNjEsIDM5LCAyNDEsIDg4LCAyMTEsIDE3NywgMzksIDI0MSwgCisgICAgODgsIDI0MywgMjIxLCAzOSwgMjQxLCA4OCwgMjQ2LCA2MiwgMjQ5LCAyMCwgMzksIDQ5LCA1MCwgNTMsIDU1LCAzOSwgMjQxLCAKKyAgICA4OCwgMjE0LCAxODQsIDM5LCAyNDEsIDg4LCAyMjksIDE0NywgMzksIDI0MSwgODgsIDIwNiwgMjE0LCAyMTgsIDU5LCAyMDgsIAorICAgIDg1LCAzOSwgMjE2LCA3NCwgMjEyLCAxLCAyMTksIDE5OSwgMzksIDUyLCA4MCwgMjExLCAzMiwgMjE5LCAxOTksIDM5LCAKKyAgICAyNTAsIDIwNCwgOTcsIDM5LCAyMDgsIDcwLCAyMDYsIDI0NSwgMzksIDIwNCwgMjcsIDI0NywgMjA4LCA1NSwgMzksIDk2LCAKKyAgICA1MywgMjE5LCAxOTksIDM5LCAxNjMsIDUyLCAyMTIsIDEsIDIxOSwgMTk5LCAzOSwgODYsIDIzNywgODcsIDMsIDE1MCwgCisgICAgMjQyLCA2OCwgMzksIDk2LCAyMzcsIDg3LCAzLCAxNTAsIDI0MiwgNjgsIDM5LCA0OSwgNTMsIDU2LCAzOSwgNTAsIDUzLCAKKyAgICA1NiwgMzksIDI1MCwgNjAsIDU1LCAyNTEsIDEzNCwgMjIwLCA2OSwgMjUxLCAxMTgsIDIwOCwgMTczLCAyMDksIDkzLCAyMTAsIAorICAgIDI1NSwgMTY5LCA2LCAyNDcsIDEyNSwgMjQ0LCA1NSwgMjQ2LCAyMjMsIDI0NiwgMjE4LCAyMjcsIDExNSwgOTcsIDI0NywgCisgICAgMzUsIDIyMCwgNjksIDI0NywgODQsIDIwNiwgMjU0LCAyNDAsIDIzMSwgMjQ1LCAyMDAsIDIxNCwgMTgxLCAyNDQsIDU1LCAKKyAgICAyNDAsIDkwLCAxMzIsIDUsIDIzOSwgNzUsIDEzMiwgNiwgMjM3LCAxNzEsIDI0OCwgNDEsIDYsIDIzNywgMTcxLCAxNjksIDYsIAorICAgIDIzNywgMTcxLCAyMTgsIDkzLCAyNDUsIDIwMCwgMjE4LCA5MywgMjQ1LCAyMDEsIDExNSwgMTIwLCAyMTgsIDE2NywgMTMyLCAKKyAgICA2LCA3NSwgMjQ4LCA0MSwgNiwgNzUsIDEzMiwgNiwgMTU5LCAxMzIsIDUsIDE1OSwgMjI4LCAxMzEsIDY2LCAyNDgsIDIzMSwgCisgICAgOTcsIDE2OSwgNiwgMjIzLCAxNjMsIDIyMSwgNDIsIDU0LCAyMTEsIDI0MSwgMjE2LCAxNDYsIDI0NSwgMTY4LCAxMzIsIDYsIAorICAgIDIxOSwgMTg0LCAxNjksIDYsIDIxOSwgMTg0LCAxNjksIDYsIDIxNywgMTM0LCAxMzIsIDYsIDE0NiwgMjQ4LCA0MSwgNiwgCisgICAgMTQ2LCAxNjksIDYsIDE0NiwgMjE3LCAyNDMsIDIwOSwgMjQxLCAyMTYsIDg2LCAyMTMsIDEyMiwgODIsIDIwOSwgMTYyLCAKKyAgICA1NCwgMjA4LCAxMTUsIDEzMSwgNTQsIDIwNiwgMzksIDE2OSwgNiwgMjAyLCAxNTksIDIxOSwgMjE1LCA1NCwgMjIwLCA1OSwgCisgICAgNTQsIDIzMCwgMjM5LCAyMjAsIDU5LCA1NCwgMjQ4LCA0MSwgNiwgMjAyLCAxNTksIDIwNywgMTc0LCAzMCwgNSwgMSwgMjMwLCAKKyAgICAyMzAsIDIyOSwgMTg4LCA1NCwgMjUwLCAyMTMsIDU0LCAxMzIsIDYsIDI0OSwgMjU1LCAyNDgsIDQxLCA2LCAyNDcsIDEyNSwgCisgICAgMjQwLCAyNTUsIDk3LCAxMzIsIDUsIDc0LCAxMzIsIDYsIDc0LCAxMzIsIDYsIDI0MCwgMTc0LCAyMDcsIDE3NCwgNiwgMjQwLCAKKyAgICAxNzQsIDEzMiwgNiwgMjI2LCAxODUsIDEzMiwgNSwgNzgsIDEzNywgOTcsIDI0OCwgMTA5LCA5NywgMjM4LCA2OCwgOTcsIAorICAgIDI0NCwgMTc5LCA5NywgMjMxLCAyNSwgMjExLCAyMzksIDIxNSwgMTk4LCA2LCAyMTcsIDEzNCwgMjQwLCA5MywgNTQsIDE2OSwgCisgICAgNSwgMjE4LCAxNjcsIDE2OSwgNSwgMjM4LCAyMzUsIDE2OSwgNiwgMjM4LCAyMzUsIDE2OSwgNiwgMjE4LCAxNjcsIDE2OSwgCisgICAgMjIzLCAxNjIsIDIxMCwgMjE3LCAyMDcsIDE3NCwgNDEsIDYsIDIzOSwgNzUsIDIwNywgMTc0LCA0MSwgNiwgMTU5LCAyMTYsIAorICAgIDczLCA0MSwgNiwgMTU5LCAyMDcsIDE3NCwgNDEsIDYsIDIwMywgMTI0LCAxNjksIDM3LCA2LCAyNDUsIDUxLCAxNjksIDM3LCAKKyAgICA1LCAyNDUsIDUxLCAxNjksIDM3LCA1LCA3NCwgMTY5LCAzNywgNSwgNzUsIDE2OSwgMzcsIDUsIDIzMCwgMTg0LCAyMTcsIAorICAgIDIxMiwgMjI3LCAxMTQsIDIwNywgMTc0LCAyNTAsIDIzNSwgMjE4LCAyNDcsIDU0LCAyNTEsIDQxLCAyMDcsIDE3NCwgNSwgCisgICAgMjQwLCAxNzQsIDE2LCAzNSwgMjE0LCAyNTIsIDIxMSwgMjM5LCAyMDQsIDE2MSwgMjM5LCAxMzgsIDExOCwgMjEzLCAxMDcsIAorICAgIDIwNCwgMTYxLCAyMzksIDEzOCwgMTE4LCAyMjIsIDU3LCAyMDQsIDE2MSwgMjM5LCAxMzgsIDExOCwgMjA5LCAxNDMsIDIwNCwgCisgICAgMTYxLCAyMzksIDEzOCwgMTE4LCAyMDksIDYwLCAyMDQsIDE2MSwgMjM5LCAxMzgsIDEyMCwgMjA5LCA1NywgMjA0LCAxNjEsIAorICAgIDIzOSwgMTM4LCAxMTgsIDI0MCwgMjEsIDIwNCwgMTYxLCAyMzksIDEzOCwgMTIwLCAyNDAsIDIwLCAyMDQsIDE2MSwgMjM5LCAKKyAgICAxMzgsIDEyNiwgMjQwLCAyMCwgMjA0LCAxNjEsIDIzOSwgMTM4LCAyMzksIDE0NywgMjQwLCAyMCwgMjA0LCAxNjEsIDIzOSwgCisgICAgMTM4LCAxMTgsIDIxMiwgNzgsIDIwNCwgMTYxLCAyMzksIDEzOCwgMjM5LCAyMzMsIDIxMiwgNzYsIDIwNCwgMTYxLCAyMzksIAorICAgIDEzOCwgMTE4LCAyNDEsIDEzOCwgMjA0LCAxNjEsIDIzOSwgMTM4LCAxMjYsIDI0MSwgMTM2LCAyMDQsIDE2MSwgMjM5LCAKKyAgICAxMzgsIDIzOSwgMjMzLCAyNDEsIDEzNiwgMjA0LCAxNjEsIDIzOSwgMTM4LCAyMTMsIDExMiwgMjQxLCAxMzYsIDIzOSwgCisgICAgMTM4LCAyMjEsIDQzLCAxMDUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAxMDUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAxMDgsIDIxNSwgCisgICAgMjEwLCAyMjEsIDQ0LCAxNDcsIDIxNSwgMjEwLCAyMjEsIDQ0LCAxNDksIDIxNSwgMjEwLCAyMjEsIDQ0LCAxNzAsIDIxNSwgCisgICAgMjEwLCAyMjEsIDQ0LCAxOTUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAyMTMsIDExMSwgMjE1LCAyMTAsIDIyMSwgNDQsIDE5OSwgCisgICAgMjE1LCAyMTAsIDIyMSwgNDQsIDIyMiwgNjMsIDIxNSwgMjEwLCAyMjEsIDQ0LCAyMDksIDE1MiwgMjE1LCAyMTAsIDIyMSwgCisgICAgNDQsIDI0MSwgMTEyLCAyMTUsIDIxMCwgMjIxLCA0NCwgMjA3LCAxNTQsIDIxNSwgMjEwLCAyMjEsIDQ0LCAyNDAsIDE4LCAKKyAgICAyMTUsIDIxMCwgMjIxLCA0NCwgMTE4LCAyMzYsIDExLCAyMTUsIDIxMCwgMjIxLCA0NCwgMjM5LCAyMzMsIDIzNiwgMTEsIAorICAgIDIxNSwgMjEwLCAyMjEsIDQ0LCAxMTgsIDIwOSwgMzYsIDUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAxMDUsIDUsIDIxNSwgMjEwLCAKKyAgICAyMjEsIDQ0LCAxMDgsIDUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAxNDcsIDUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAxNDksIDUsIAorICAgIDIxNSwgMjEwLCAyMjEsIDQ0LCAxNzAsIDUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAxOTUsIDUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAKKyAgICAyMTMsIDExMSwgNSwgMjE1LCAyMTAsIDIyMSwgNDQsIDE5OSwgNSwgMjE1LCAyMTAsIDIyMSwgNDQsIDIyMiwgNjMsIDUsIAorICAgIDIxNSwgMjEwLCAyMjEsIDQ0LCAyMDksIDE1MiwgNSwgMjE1LCAyMTAsIDIyMSwgNDQsIDI0MSwgMTEyLCA1LCAyMTUsIDIxMCwgCisgICAgMjIxLCA0NCwgMjA3LCAxNTQsIDUsIDIxNSwgMjEwLCAyMjEsIDQ0LCAyNDAsIDE4LCA1LCAyMTUsIDIxMCwgMjIxLCA0NCwgCisgICAgMTE4LCAyMzYsIDExLCA1LCAyMTUsIDIxMCwgMjIxLCA0NCwgMjM5LCAyMzMsIDIzNiwgMTEsIDUsIDIxNSwgMjEwLCAyMjEsIAorICAgIDQ0LCAxMTgsIDIwOSwgMzYsIDIxNSwgMjEwLCAyMjEsIDQ0LCAxMTgsIDIwOSwgMzcsIDI0NywgMTI2LCAyNDUsIDUxLCAKKyAgICAyMTUsIDIxMCwgMjIxLCA0NCwgMjM5LCAyMzMsIDIwOSwgMzYsIDIxNSwgMjEwLCAyMjEsIDQ0LCAyMDksIDE1MywgMjA5LCAKKyAgICAzNiwgMjE1LCAyMTAsIDIyMSwgNDQsIDIxNiwgNzMsIDExOCwgMjM2LCAxMSwgOCwgNSwgMSwgMjE2LCA3MywgMjQ3LCAxMjUsIAorICAgIDIxNSwgMjEwLCAyMjEsIDQ0LCAyMTIsIDg4LCAyMjcsIDI1NSwgMTgsIDIxNSwgMjEwLCAyMjEsIDQ0LCAyNDAsIDE5LCAKKyAgICAyNDEsIDE4MiwgMTgsIDIxNSwgMjEwLCAyMjEsIDQ0LCAyNDAsIDE5LCAyMDksIDM2LCAyMTUsIDIxMCwgMjIxLCA0NCwgCisgICAgMTE4LCAyMzYsIDEyLCAyMDksIDM2LCAyMDQsIDE2MSwgMjM5LCAxMzgsIDIwMiwgODUsIDIwOSwgNTcsIDIwNywgMTc0LCAKKyAgICAxNywgMTA4LCAyMDcsIDE3NCwgMTcsIDE0NywgOTYsIDQ3LCAxNzcsIDQ3LCA4NiwgNDcsIDE4MywgNDcsIDQ5LCA1MCwgNDcsIAorICAgIDExMiwgMTIxLCA0NywgMTUzLCAyMDQsIDQ2LCA0NywgMTUzLCAyNDEsIDE3NiwgNDcsIDIxMSwgMjM4LCAyNDEsIDE3NiwgCisgICAgNDcsIDIxMSwgMjM4LCAyMDQsIDQ2LCA0NywgOTYsIDUzLCAzLCA5NSwgODYsIDUzLCAzLCA5NSwgOTYsIDIwNCwgNzYsIDQ3LCAKKyAgICA4NiwgMjA0LCA3NiwgNDcsIDk2LCAxMjAsIDIzNywgNjIsIDQ3LCAxNzcsIDEyMCwgMjM3LCA2MiwgNDcsIDg2LCAxMjAsIAorICAgIDIzNywgNjIsIDQ3LCAxODMsIDEyMCwgMjM3LCA2MiwgNDcsIDk2LCA1MywgMywgMjA5LCAyNDgsIDg2LCA1MywgMywgMjA5LCAKKyAgICAyNDgsIDk2LCA1MywgMjM5LCAxMjAsIDE0MiwgMTc3LCA1MywgMjM5LCAxMjAsIDE0MiwgODYsIDUzLCAyMzksIDEyMCwgCisgICAgMTQyLCAxODMsIDUzLCAyMzksIDEyMCwgMTQyLCAxMTIsIDEyMSwgNTMsIDMsIDI0OCwgMjE4LCA5NiwgNTMsIDMsIDExMywgCisgICAgODYsIDUzLCAzLCAxMTMsIDk2LCA1MywgMywgMjI3LCAxNCwgODYsIDUzLCAzLCAyMjcsIDE0LCA0OSwgNTAsIDIwNCwgNzYsIAorICAgIDQ3LCA0OSwgNTAsIDUzLCAzLCA5NSwgMTgzLCAyMDIsIDMwLCA0NywgMTc3LCA1MywgMywgMjA4LCAyMTEsIDIyNywgMjEyLCAKKyAgICAxNzcsIDUzLCAzLCAyMDgsIDIxMSwgMjE2LCA1LCAxODMsIDUzLCAzLCAyMDgsIDIxMSwgMjI3LCAyMTIsIDE4MywgNTMsIDMsIAorICAgIDIwOCwgMjExLCAyMTYsIDUsIDg2LCA1MywgMywgMjQ1LCAxNjYsIDI0MiwgNjgsIDE4MywgNTMsIDMsIDI0NSwgMTY2LCAKKyAgICAyMjcsIDIxMiwgMjUwLCAxOTQsIDIwOCwgMTQ1LCAyMTMsIDE0NiwgNDcsIDI0NiwgMTgsIDIwOCwgMTQ1LCAyMTMsIDE0NiwgCisgICAgNDcsIDE1MywgMjA0LCA0NiwgNTMsIDIwOCwgMTczLCAxNjMsIDE0MiwgOTYsIDUzLCAyMDgsIDE3MywgMjQ4LCAyMzEsIAorICAgIDExNSwgODYsIDUzLCAyMDgsIDE3MywgMTQyLCAyNTAsIDE5NCwgMTcxLCAyNDYsIDYyLCA0NywgMjQ2LCAxOCwgMTcxLCAKKyAgICAyNDYsIDYyLCA0NywgOTYsIDIzNywgODcsIDMsIDE1MCwgMjA2LCAyMTIsIDk2LCAyMzcsIDg3LCAzLCAxNTAsIDI0MiwgNjgsIAorICAgIDE3NywgMjM3LCA4NywgMywgMTUwLCAyMTYsIDUsIDE3NywgMjM3LCA4NywgMywgMTUwLCAyMjcsIDIxMiwgODYsIDIzNywgCisgICAgODcsIDMsIDE1MCwgMjA2LCAyMTIsIDg2LCAyMzcsIDg3LCAzLCAxNTAsIDI0MiwgNjgsIDE4MywgMjM3LCA4NywgMywgMTUwLCAKKyAgICAyMTYsIDUsIDE4MywgMjM3LCA4NywgMywgMTUwLCAyMjcsIDIxMiwgODYsIDUzLCAxMTUsIDk2LCA0NywgMTc3LCA1MywgOTYsIAorICAgIDc2LCAxODMsIDQ3LCA5NiwgNTMsIDExNSwgODYsIDQ3LCA5NiwgMjE5LCAxNDYsIDI1MCwgOTEsIDE3NywgMjE5LCAxNDYsIAorICAgIDI1MCwgOTEsIDg2LCAyMTksIDE0NiwgMjUwLCA5MSwgMTgzLCAyMTksIDE0NiwgMjUwLCA5MSwgOTYsIDIzNywgODcsIDExNSwgCisgICAgODYsIDIzNywgODYsIDg2LCAyMzcsIDg3LCAxMTUsIDk2LCAyMzcsIDg2LCA5NiwgNTIsIDUzLCAzLCA5NSwgNDksIDUwLCAKKyAgICA1MiwgNTMsIDMsIDk1LCA4NiwgNTIsIDUzLCAzLCA5NSwgOTYsIDUyLCA0NywgMTc3LCA1MiwgNDcsIDg2LCA1MiwgNDcsIAorICAgIDE4MywgNTIsIDQ3LCA0OSwgNTAsIDUyLCA0NywgMTEyLCAxMjEsIDUyLCA0NywgMTUzLCAyMDQsIDQ2LCA1MiwgNDcsIDE1MywgCisgICAgMjQxLCAxNzYsIDUyLCA0NywgMjExLCAyMzgsIDI0MSwgMTc2LCA1MiwgNDcsIDIxMSwgMjM4LCAyMDQsIDQ2LCA1MiwgNDcsIAorICAgIDk2LCAyMDgsIDcwLCA0NywgODYsIDIwOCwgNzAsIDQ3LCA5NiwgMjExLCAxNzEsIDQ3LCA4NiwgMjExLCAxNzEsIDQ3LCAKKyAgICAxNzcsIDUzLCAzLCA1MiwgOTUsIDE4MywgNTMsIDMsIDUyLCA5NSwgOTYsIDI0NCwgMTQzLCA0NywgMTc3LCAyNDQsIDE0MywgCisgICAgNDcsIDg2LCAyNDQsIDE0MywgNDcsIDE4MywgMjQ0LCAxNDMsIDQ3LCA5NiwgNTMsIDIwOCwgMTczLCAxNDIsIDg2LCA1MywgCisgICAgMjA4LCAxNzMsIDE0MiwgOTYsIDYxLCA0NywgMTc3LCA2MSwgNDcsIDg2LCA2MSwgNDcsIDE4MywgNjEsIDQ3LCAxNzcsIDYxLCAKKyAgICA1MywgMjM5LCAxMjAsIDE0MiwgMTc3LCA2MSwgNTMsIDIyMCwgMzIsIDIxOSwgMjYsIDE3NywgNjEsIDUzLCAyMjAsIDMyLCAKKyAgICAyMTksIDI3LCAzLCAyMzYsIDEwNiwgMTQyLCAxNzcsIDYxLCA1MywgMjIwLCAzMiwgMjE5LCAyNywgMywgODAsIDE0MiwgCisgICAgMTc3LCA2MSwgNTIsIDQ3LCAxNzcsIDYxLCA1MiwgNTMsIDIyMCwgMzIsIDIxOSwgMjYsIDg2LCA2MSwgNTMsIDIzOSwgMTIwLCAKKyAgICAyMDQsIDk5LCAxNTMsIDIwNCwgNDYsIDUzLCAyMDgsIDE3MywgMjQ1LCAxNjUsIDIxMSwgMjM4LCAyNDEsIDE3NiwgNTMsIAorICAgIDIwOCwgMTczLCAyNDUsIDE2NSwgMTEyLCAxMjEsIDYxLCA0NywgNTAsIDUzLCAzLCA1LCAyNDYsIDYxLCAxODMsIDUzLCA5NiwgCisgICAgNzYsIDE3NywgNDcsIDEyNiwgODYsIDI1MCwgOTEsIDk2LCA1MywgMywgODAsIDk1LCA4NiwgNTMsIDMsIDgwLCA5NSwgNDksIAorICAgIDUwLCA1MywgMywgODAsIDk1LCA5NiwgNTMsIDMsIDUyLCA4MCwgOTUsIDg2LCA1MywgMywgNTIsIDgwLCA5NSwgNDksIDUwLCAKKyAgICA1MywgMywgNTIsIDgwLCA5NSwgOTYsIDIyMCwgNiwgNDcsIDg2LCAyMjAsIDYsIDQ3LCA0OSwgNTAsIDIyMCwgNiwgNDcsIAorICAgIDM1LCAyNTEsIDE0LCAyNDUsIDIyOCwgMjE5LCA2OSwgMjQzLCAyMDUsIDIwOSwgODMsIDI0MCwgMjA3LCAyMDksIDgzLCAKKyAgICAyNDMsIDEwNCwgMjIxLCAxNjYsIDI0MCwgMjA4LCAyNDEsIDk0LCAyMTMsIDExNywgMjMxLCAzOCwgMjIzLCAxMDEsIDI0MSwgCisgICAgMTE1LCAyMjAsIDY5LCAyMjEsIDE2NiwgMjUwLCAyMzIsIDI0MSwgMTE1LCAyMjAsIDY5LCA1LCAyNDEsIDExNSwgMjIwLCAKKyAgICA2OSwgMjQ1LCAxOTQsIDI1MCwgODIsIDIyNCwgMjQ0LCAyNDMsIDEwNCwgMjIxLCAxNjYsIDI0NSwgMTk2LCAyNTAsIDgyLCAKKyAgICAyMjQsIDI0NCwgNSwgMjQ1LCAxOTQsIDI1MCwgODIsIDIyNCwgMjQ0LCAyNDEsIDg0LCA3NiwgMjE3LCAyMTQsIDIyMywgCisgICAgMTYyLCAyMTcsIDIyNCwgMjIzLCAxNjIsIDI0NSwgMTcxLCAyMjMsIDE2MiwgMjEwLCAyMTcsIDIyNCwgMTAzLCA1NCwgMjI0LCAKKyAgICAxMDEsIDU0LCA3MCwgMjE4LCA3NiwgMjQzLCAxMzcsIDIxMiwgNTcsIDIxMywgMTE4LCAyMjQsIDEwMiwgMjUwLCA2MCwgCisgICAgMjE5LCAyNTQsIDIxNSwgMjUzLCAyMTksIDI1NCwgMjQ3LCAxNzgsIDIxOSwgMjU0LCA1MSwgMjE1LCAyMDQsIDI0NSwgMTA2LCAKKyAgICAyMTUsIDIwNCwgMjM5LCAxNDAsIDIxNSwgMjA0LCAyMTcsIDIxMCwgMTM1LCAyMzEsIDI3LCA1MCwgMjUwLCAyMTcsIDI1MCwgCisgICAgMjE3LCAyMjUsIDE3LCAyNTAsIDIxNywgMjExLCAyMDgsIDI1MCwgMjE3LCAyNDMsIDEzOSwgMjQzLCAxMDQsIDIyMSwgMTY2LCAKKyAgICAyNDMsIDE0MywgMjE5LCA4MiwgMTM1LCAyMjEsIDE2NiwgMjE5LCA4MiwgMTM1LCAyMjcsIDM3LCAyNTAsIDIyNiwgMjI3LCAKKyAgICAzNywgMjE5LCAyNDQsIDIzMCwgMjQ0LCAyMDYsIDIzNywgMjMxLCAyLCA1MiwgMjMxLCAyLCAyMDgsIDcwLCAyMzEsIDIsIAorICAgIDI0NSwgMTg4LCAyMzEsIDIsIDIxMCwgMTg5LCAyMzEsIDIsIDIwNSwgMTc4LCAyMzEsIDIsIDI0NiwgMTgsIDIzMSwgMiwgCisgICAgMjQ2LCAxOCwgMjQ1LCAxODgsIDIzMSwgMiwgMjUwLCAxOTQsIDI0NSwgMTg4LCAyMzEsIDIsIDIwOSwgODIsIDI0OCwgMTUyLCAKKyAgICAyMTYsIDE2OCwgMjE3LCAyMTEsIDcwLCAyMjQsIDEwMiwgMjQwLCAyMTUsIDIzOCwgMTcyLCAyMTcsIDIxMSwgMjM2LCAxMjEsIAorICAgIDIwOCwgMjI4LCAyMTksIDI1NCwgMjE2LCA3MywgMjA4LCAyMjcsIDIzMCwgMjM5LCAyMjcsIDI0MSwgMTk0LCAyMTIsIDEyMiwgCisgICAgMjA0LCA3NSwgMjAzLCAyMjYsIDIxNywgMjI0LCAyMjEsIDE2NiwgMjA4LCAyMjcsIDIyNCwgMTAzLCAyMDgsIDIyNywgMjUwLCAKKyAgICA1MywgMTU2LCAxMzUsIDIyMSwgMTY2LCAyNTAsIDUzLCAxNTYsIDEzNSwgMjUwLCAxNTEsIDE1NiwgMTM1LCAyNTAsIDE1MSwgCisgICAgMjQ3LCAxNDgsIDIyMSwgMTY2LCAyNTEsIDEyNywgMTU2LCAxMzUsIDIyMiwgMjMyLCAyNTAsIDE1MSwgMjIxLCAxNzUsIAorICAgIDI1MSwgMTI3LCAxNTYsIDEzNSwgMjUxLCA3LCAxNTYsIDEzNSwgMjIxLCAxNjYsIDI1MSwgNywgMTU2LCAxMzUsIDI1MSwgNywgCisgICAgMTU2LCAyMTksIDI0NSwgMTU2LCAxMzUsIDIwOCwgNzAsIDIwOCwgMjI3LCAyNTEsIDE1LCAxNTYsIDEzNSwgMjQxLCAzMCwgCisgICAgMTM1LCAyMzgsIDE3MSwgMjQxLCAzMCwgMTM1LCAyNDMsIDIwNiwgMjQ4LCAxMDMsIDI1MCwgMTUzLCAyMDksIDkzLCAyMjcsIAorICAgIDEyMiwgMjM4LCAxNzEsIDE1NiwgMTM1LCAyNTAsIDE1MSwgMTU2LCAyMDgsIDE3MywgMjE5LCAyNDUsIDIwOSwgOTMsIDIzMSwgCisgICAgNjUsIDIyMCwgNjksIDIzMSwgNjUsIDc2LCAyMTksIDI0NSwgMjUwLCAxNTEsIDE1NiwgMTM1LCAyNDUsIDI0MywgMjQxLCAKKyAgICAzNCwgMjQxLCAzNSwgMjQ1LCAyNDIsIDIxNSwgMjUzLCAyMzEsIDUwLCAxNTYsIDEzNSwgMjE1LCAyNTMsIDE1NiwgMTM1LCAKKyAgICAyNDUsIDE1OSwgMTM1LCAyNDAsIDI1NCwgMjQxLCAzMywgMTM1LCAyMTEsIDk1LCAyNDEsIDM0LCAyNDQsIDM4LCAxNTYsIAorICAgIDEzNSwgMTU2LCAyMDgsIDE3MywgMjQ3LCAxMzcsIDI0NCwgNTYsIDIyNSwgMTcsIDI0NywgMTM2LCAyMTcsIDQ1LCAxNTYsIAorICAgIDEzNSwgMjIxLCAxNjYsIDE1NiwgMTM1LCAyMzUsIDE1NCwgMTM1LCAyMjEsIDE2NiwgMjM1LCAxNTQsIDEzNSwgMjExLCAzOSwgCisgICAgMjQxLCAzMCwgMTM1LCAyMjcsIDE3OSwgMjE5LCAyNDUsIDE1NiwgMTM1LCAyMzcsIDI0NywgMjE5LCAyNDUsIDE1NiwgMTM1LCAKKyAgICAyMjcsIDE3OSwgMTE1LCAxNTYsIDEzNSwgMjM3LCAyNDcsIDExNSwgMTU2LCAxMzUsIDIyNywgMTc5LCAyNDcsIDE0OCwgCisgICAgMjIxLCAxNjYsIDE1NiwgMTM1LCAyMzcsIDI0NywgMjQ3LCAxNDgsIDIyMSwgMTY2LCAxNTYsIDEzNSwgMjIzLCAyNDAsIAorICAgIDIyNywgMTc4LCAyMjMsIDI0MCwgMjM3LCAyNDYsIDI0OCwgMTAzLCAyMjEsIDE2NiwgMjQxLCAzMCwgMTM1LCAyMjEsIDE2NiwgCisgICAgMjI3LCAxNzgsIDIyMSwgMTY2LCAyMzcsIDI0NiwgMjIyLCAyMzIsIDIyNywgMTc5LCAyMjEsIDE3NSwgMTU2LCAxMzUsIAorICAgIDIyMiwgMjMyLCAyMzcsIDI0NywgMjIxLCAxNzUsIDE1NiwgMTM1LCAyMjcsIDE3OSwgMjE5LCAyNDUsIDI0MSwgMzAsIDEzNSwgCisgICAgMjM3LCAyNDcsIDIxOSwgMjQ1LCAyNDEsIDMwLCAxMzUsIDIyMiwgMjMyLCAyMjcsIDE3OSwgMjIxLCAxNzUsIDI0MSwgMzAsIAorICAgIDEzNSwgMjIyLCAyMzIsIDIzNywgMjQ3LCAyMjEsIDE3NSwgMjQxLCAzMCwgMTM1LCAyMjcsIDE3OSwgMjE5LCAyNDUsIDIzNywgCisgICAgMjQ2LCAyMzcsIDI0NywgMjE5LCAyNDUsIDIyNywgMTc4LCAyMjIsIDIzMiwgMjI3LCAxNzksIDIyMSwgMTc1LCAyMzcsIAorICAgIDI0NiwgMjIyLCAyMzIsIDIzNywgMjQ3LCAyMjEsIDE3NSwgMjI3LCAxNzgsIDIxNywgMjQ5LCAyMTAsIDIzNiwgMjE3LCAKKyAgICAyNTAsIDIxOSwgMjQ1LCAxNTYsIDEzNSwgMjEwLCAyMzcsIDIxOSwgMjQ1LCAxNTYsIDEzNSwgMjE3LCAyNTAsIDIxOSwgCisgICAgMjQ1LCAyNDEsIDMwLCAxMzUsIDIxMCwgMjM3LCAyMTksIDI0NSwgMjQxLCAzMCwgMTM1LCAyNDMsIDEwNCwgMjIxLCAxNjYsIAorICAgIDIxNywgMjUyLCAyNDMsIDEwNCwgMjIxLCAxNjYsIDIxMCwgMjM4LCAyMTAsIDI0NSwgMjIwLCA2OSwgMjEwLCAxOTgsIDIyMCwgCisgICAgNjksIDIyMSwgMTY2LCAzNCwgMjEwLCAyNDUsIDIyMCwgNjksIDIyMSwgMTY2LCAzNCwgMjEwLCAxOTgsIDIyMCwgNjksIAorICAgIDIxMCwgMjQ1LCA3NiwgMjE5LCAyNDUsIDE1NiwgMTM1LCAyMTAsIDE5OCwgNzYsIDIxOSwgMjQ1LCAxNTYsIDEzNSwgMjIyLCAKKyAgICAyMzIsIDM0LCAyMTAsIDI0NSwgNzYsIDIyMSwgMTc1LCAxNTYsIDEzNSwgMjIyLCAyMzIsIDM0LCAyMTAsIDE5OCwgNzYsIAorICAgIDIyMSwgMTc1LCAxNTYsIDEzNSwgMjEwLCAyNDUsIDc2LCAzLCAyMjEsIDE2NiwgMTU2LCAxMzUsIDIxMCwgMTk4LCA3NiwgMywgCisgICAgMjIxLCAxNjYsIDE1NiwgMTM1LCAyMjMsIDIyMSwgMjIzLCAyMjIsIDIyMywgMjIzLCAyMjMsIDIyMiwgMjA2LCAyMzcsIDUxLCAKKyAgICAyMzEsIDY1LCAyMjAsIDY5LCA1MSwgMjE5LCAyMzYsIDIyMCwgNjksIDUxLCAyMzEsIDY1LCA3NiwgMjE5LCAyNDUsIDE1NiwgCisgICAgMTM1LCA1MSwgMjE5LCAyMzYsIDc2LCAyMTksIDI0NSwgMTU2LCAxMzUsIDUxLCAyNDcsIDQ4LCA1MSwgMjQ1LCA5OSwgNDMsIAorICAgIDIxOCwgNzYsIDQzLCAyMjQsIDEwMiwgNDMsIDIwOCwgMjE5LCA0MywgMjQzLCAxMzcsIDIxMiwgNTcsIDQzLCA3MCwgMjE5LCAKKyAgICAyNTQsIDQzLCAyMTUsIDI1MywgMjE5LCAyNTQsIDQzLCAyNTAsIDYwLCAyMTksIDI1NCwgNDMsIDI0MSwgMzQsIDQzLCAyNDQsIAorICAgIDE0NCwgMTAzLCAyMTgsIDc2LCAxMDMsIDIyNCwgMTAyLCAxMDMsIDIwOCwgMjE5LCAxMDMsIDcwLCAyMTksIDI1NCwgNTAsIAorICAgIDIxMCwgMywgNDksIDIxMCwgMywgMTIxLCAyMTAsIDMsIDExMiwgMjEwLCAzLCAyNTAsIDYzLCAyMjQsIDc3LCAyMDgsIDQ5LCAKKyAgICAyMzksIDE2NSwgMjA4LCA3MCwgODAsIDI0OCwgMjMxLCA1MCwgMjA3LCAxNzMsIDUyLCA4MCwgMjQ4LCAyMzEsIDUyLCA1MCwgCisgICAgMjA3LCAxNzMsIDI0MywgMTA0LCAyMjEsIDE2NiwgMjE3LCAyMDUsIDIyMSwgMTY2LCAyMDgsIDQ5LCAyNDMsIDEwNCwgMjIxLCAKKyAgICAxNjYsIDIzOSwgMTY2LCAyMjIsIDIzNCwgNTIsIDgwLCAyNDgsIDIzMSwgNTIsIDUwLCAyMDcsIDE3MywgMjE3LCAyNTAsIAorICAgIDIwNiwgMjQ4LCAyMTYsIDExNywgMjEwLCAyMzcsIDIwNiwgMjQ4LCAyMTYsIDExNywgMjIxLCAxNzIsIDIxMSwgMiwgMjIwLCAKKyAgICA2OSwgMjQ1LCAxOTQsIDI1MCwgODIsIDIyMSwgMTcyLCAyMTEsIDEsIDIyMSwgMTcyLCAyMTEsIDIsIDc2LCAyMTksIDI0NSwgCisgICAgMTU2LCAxMzUsIDI0NSwgMTk0LCAyNTAsIDgyLCAyMjEsIDE3MiwgMjExLCAyLCAyMTksIDI0NSwgMTU2LCAxMzUsIDIxOSwgCisgICAgMjM2LCAyMjAsIDY5LCAyMzEsIDY1LCAyMjAsIDY5LCAyMjMsIDIyOCwgMjM3LCAyNCwgMjQ1LCAyMDUsIDIyNSwgNjksIAorICAgIDIzMCwgMjU1LCAyMDMsIDE1NiwgMjIzLCA4MSwgMjIxLCAxNzQsIDUwLCAyNTAsIDIxOCwgMywgMjUwLCAxMjgsIDUwLCAKKyAgICAyMDgsIDg1LCAyMjMsIDE2MiwgMjI3LCAzNywgMjUwLCAyMjYsIDIyMywgMTYyLCAyMjcsIDM3LCAyMTksIDI0NCwgMjIzLCAKKyAgICAxNjIsIDIzMCwgMjQ0LCAyMjMsIDE2MiwgMjA2LCAyMzcsIDI0MywgMjIyLCAyMTksIDI1NCwgNzAsIDIxOSwgMjU0LCAyMTEsIAorICAgIDk1LCAyMTksIDI1NCwgMjQzLCAxMzcsIDIwOCwgMjE5LCAyNDcsIDIzNCwgNDksIDIyMSwgMTcyLCAyNDAsIDkyLCAyMTMsIAorICAgIDE0MiwgMjE3LCAyMjQsIDUwLCAyMjEsIDE3MiwgMjQwLCA5MiwgMjEzLCAxNDIsIDIxNywgMjI0LCA0OSwgMjEzLCAxNDIsIAorICAgIDIxNywgMjI0LCA1MCwgMjEzLCAxNDIsIDIxNywgMjI0LCAyMTYsIDczLCAyMDgsIDIyOCwgMjQxLCAzNCwgMjQ1LCA5MywgCisgICAgMjI3LCAzNywgMjE5LCAyNDQsIDI0NSwgOTMsIDIyNywgMzcsIDI1MCwgMjI2LCA1MiwgMjEwLCAyNDQsIDUyLCAyMTAsIAorICAgIDE5NywgNTIsIDIzMCwgMjQ0LCA1MiwgMjA2LCAyMzcsIDIxOCwgMTAzLCAxNTYsIDI1LCAyMTksIDgyLCAxMzUsIDIyNywgCisgICAgMTc5LCAzLCAyNDMsIDg1LCAyMzcsIDI0NywgMywgMjQzLCA4NSwgMjA1LCAyNDIsIDIyMywgMjQwLCAyMjcsIDE3OCwgMjA1LCAKKyAgICAyNDIsIDIyMywgMjQwLCAyMzcsIDI0NiwgMjI3LCAxNzksIDE1NiwgMjA4LCAxNzMsIDIxOSwgMjQ1LCAyMzcsIDI0NiwgCisgICAgMjM3LCAyNDcsIDE1NiwgMjA4LCAxNzMsIDIxOSwgMjQ1LCAyMjcsIDE3OCwgMTU2LCAyMDgsIDE3MywgMjE5LCAyNDUsIAorICAgIDIyNywgMTc4LCAxNTYsIDIwOCwgMTczLCAyMTksIDI0NSwgMjM3LCAyNDYsIDE1NiwgMjA4LCAxNzMsIDIxOSwgMjQ1LCAKKyAgICAyMTcsIDI0OSwgMTU2LCAyMDgsIDE3MywgMjE5LCAyNDUsIDIxMCwgMjM2LCAyNDMsIDEwNCwgMjIxLCAxNjYsIDIxNywgCisgICAgMjUzLCAyMTksIDI0NSwgMjQxLCAzNiwgMjQzLCAxMDQsIDIyMSwgMTY2LCAyMTAsIDIzOSwgMjE5LCAyNDUsIDI0MSwgMzYsIAorICAgIDIyMSwgMTY2LCA1MSwgMjMxLCA2NSwgNzYsIDIxOSwgMjQ1LCAxNTYsIDEzNSwgMjIxLCAxNjYsIDUxLCAyMTksIDIzNiwgCisgICAgNzYsIDIxOSwgMjQ1LCAxNTYsIDEzNSwgNTEsIDIzMSwgNjUsIDc2LCAyMTksIDI0NSwgMjIxLCAxNjYsIDE1NiwgMTM1LCAKKyAgICA1MSwgMjE5LCAyMzYsIDc2LCAyMTksIDI0NSwgMjIxLCAxNjYsIDE1NiwgMTM1LCAyMjcsIDE3OSwgMjQ3LCAxNDgsIDIyMSwgCisgICAgMTY2LCAyNDEsIDMwLCAxMzUsIDIzNywgMjQ3LCAyNDcsIDE0OCwgMjIxLCAxNjYsIDI0MSwgMzAsIDEzNSwgMjE3LCAyNTAsIAorICAgIDI0NywgMTQ4LCAyMjEsIDE2NiwgMjQxLCAzMCwgMTM1LCAyMTAsIDIzNywgMjQ3LCAxNDgsIDIyMSwgMTY2LCAyNDEsIDMwLCAKKyAgICAxMzUsIDIyMSwgMTY2LCAyMjEsIDE3MiwgMjExLCAyLCAyMjAsIDY5LCAyNDMsIDEwNCwgMjIxLCAxNjYsIDI0NSwgMTk2LCAKKyAgICAyNTAsIDgyLCAyMjEsIDE3MiwgMjExLCAxLCAyMjEsIDE2NiwgMjIxLCAxNzIsIDIxMSwgMiwgNzYsIDIxOSwgMjQ1LCAxNTYsIAorICAgIDEzNSwgMjQzLCAxMDQsIDIyMSwgMTY2LCAyNDUsIDE5NiwgMjUwLCA4MiwgMjIxLCAxNzIsIDIxMSwgMiwgMjE5LCAyNDUsIAorICAgIDI0MSwgMzYsIDgwLCAyNDEsIDEwOCwgMjI0LCAxNDYsIDIzNiwgMTA2LCAyNDEsIDEwOCwgMTEyLCA1MCwgMjQzLCAyMjgsIAorICAgIDI0MSwgMTA4LCAxMjEsIDUwLCAyNDMsIDIyOCwgMjQxLCAxMDgsIDI0MSwgMTE1LCA3NiwgMywgMTYzLCAyMzYsIDEwNiwgCisgICAgOTUsIDI0MSwgMTE1LCA3NiwgMywgODAsIDI0OCwgMjMxLCAyNTAsIDUwLCAyNDEsIDg0LCA3NiwgMjM2LCAxMDYsIDk1LCA1LCAKKyAgICAyNDEsIDExNSwgNzYsIDMsIDgwLCAyNDgsIDIzMSwgMjUwLCA1MCwgMjQxLCA4NCwgNzYsIDIzNiwgMTA2LCA5NSwgMjQxLCAKKyAgICAxMTUsIDc2LCAzLCA3MCwgNTUsIDI0MSwgMTE1LCA3NiwgMywgMjE5LCAyMDMsIDUsIDI0MSwgMTE1LCA3NiwgMywgMjE5LCAKKyAgICAyMDMsIDI0MSwgMTE1LCA3NiwgMywgMjA2LCAyNDYsIDI0MSwgMTE1LCA3NiwgMywgMTIwLCAyMzYsIDEwNiwgMjExLCAxOSwgCisgICAgMjQ1LCAxOTQsIDMsIDE2MywgMjM2LCAxMDYsIDk1LCAyNDUsIDE5NCwgMywgODAsIDI0OCwgMjMxLCAyNTAsIDUwLCAyNDEsIAorICAgIDg0LCA3NiwgMjM2LCAxMDYsIDk1LCA1LCAyNDUsIDE5NCwgMywgODAsIDI0OCwgMjMxLCAyNTAsIDUwLCAyNDEsIDg0LCA3NiwgCisgICAgMjM2LCAxMDYsIDk1LCAyNDUsIDE5NCwgMywgMjE5LCAyMDMsIDUsIDI0NSwgMTk0LCAzLCAyMTksIDIwMywgMjAyLCAxNjAsIAorICAgIDIyMSwgMTY0LCAyNDksIDExLCAyMjQsIDI0MywgMjQzLCAyMjMsIDU0LCAyNDEsIDExNywgNDcsIDIzNiwgMzgsIDExMiwgCisgICAgMjUwLCA5NCwgMTIxLCAyNTAsIDk0LCAyMTcsIDIxOCwgMjE4LCAyMjcsIDIwNCwgNzIsIDIyNywgMTE0LCA0OSwgMjQ2LCAKKyAgICAyMjYsIDUwLCAyNDYsIDIyNiwgNDksIDIzOSwgMjA0LCA1MCwgMjM5LCAyMDQsIDI0NywgMjQ4LCA1MCwgMjQ1LCAxMzIsIAorICAgIDI0NywgMjQ4LCA0OSwgMjQ1LCAxMzIsIDIwOCwgMTQ1LCA1MCwgMjQ1LCAxMzIsIDIwOCwgMTQ1LCA0OSwgMjQ1LCAxMzIsIAorICAgIDIxNiwgNzMsIDIyMSwgMTY2LCA1NCwgNTEsIDIyNiwgMjQ2LCAyNTAsIDEyOCwgMjE0LCAxNTgsIDIxNCwgMTY2LCAyMDksIAorICAgIDE2MiwgMjE2LCAxNDcsIDIxOCwgMzQsIDIzMSwgMzEsIDIwNSwgMjE4LCAyMTEsIDE3NywgMjE4LCA5NywgNzYsIDIzMCwgCisgICAgMjU0LCA1NCwgMjA3LCAxNzQsIDIyMSwgMTY2LCA1NCwgMjA0LCA4MiwgMjM2LCA0MCwgMjA4LCAxNDUsIDQ5LCAyNDUsIAorICAgIDE2NSwgMjA4LCAxNDUsIDUwLCAyNDUsIDE2NSwgMjQ3LCAyNDgsIDQ5LCAyNDUsIDE2NSwgMjQ3LCAyNDgsIDUwLCAyNDUsIAorICAgIDE2NSwgMjA4LCAxNDUsIDE2MiwgMjMxLCAyLCAyNDcsIDI0OCwgMTYyLCAyMzEsIDIsIDIzOSwgMTE1LCAyMTIsIDMxLCAKKyAgICAxMTIsIDI1MCwgOTUsIDI0OCwgMTA0LCAxMjAsIDIzNiwgMTA2LCAyNDgsIDIyMCwgMjE5LCAyNDcsIDIyOSwgMTUxLCAyNDEsIAorICAgIDI2LCAyMDgsIDE3MywgMjA5LCA5MywgMjE2LCAxNiwgMjAzLCAxOTcsIDIzMSwgNTAsIDM0LCAyMTYsIDE0NCwgMjQ3LCAKKyAgICAyMzMsIDIyOSwgMTQ5LCAyMjcsIDIxNywgMjUwLCAyMTgsIDE1NSwgMjE2LCAxMSwgMjUwLCAyMTgsIDE1NSwgMjQxLCAyNiwgCisgICAgMjA4LCAxNzMsIDIwOSwgOTMsIDIyNywgMjIyLCAyNDgsIDExNSwgMjE1LCAyNTIsIDI0NSwgNjEsIDI1MSwgMTUsIDI1MCwgCisgICAgMTAzLCAyMTAsIDEwMCwgMjA4LCAxMzAsIDIxNSwgMTI1LCAyNDMsIDE4NSwgMjE5LCAyMzcsIDI0NSwgMjA5LCAyMDksIAorICAgIDIyMCwgMjEyLCA0NCwgMjQ1LCAxNTUsIDI0NSwgMTU0LCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIzNSwgMjAzLCAyNTAsIAorICAgIDE2OSwgMjM5LCA5OCwgMTYsIDIxMSwgMTY5LCAyMTcsIDYyLCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIxNywgNjMsIDI0MSwgCisgICAgMzYsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCA2MywgMjQzLCAxNDMsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCAKKyAgICA2MywgMjQzLCAyMjEsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCA2MywgMjMwLCA4OCwgMjUwLCAxNjksIDIzOSwgOTgsIAorICAgIDE2LCAyMTcsIDYzLCAyNDYsIDYxLCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDI0NiwgNjIsIDIxMSwgNjksIDI1MCwgMTY5LCAKKyAgICAyMzksIDk4LCAxNiwgMjQ2LCA2MiwgMjMwLCA4OCwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyMTIsIDU4LCAxNDIsIDI1MCwgCisgICAgMTY5LCAyMzksIDk4LCAxNiwgMjQ5LCAyMSwgMTQyLCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIxNywgNjMsIDIxMiwgNTcsIAorICAgIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCA2MywgMjQ5LCAyMCwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyMTcsIDYzLCAKKyAgICAyMjcsIDE3OCwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyMTcsIDYzLCAyMzcsIDI0NiwgMjUwLCAxNjksIDIzOSwgOTgsIAorICAgIDE2LCA5NiwgMjA2LCA3NiwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCA4NiwgMjA2LCA3NiwgMjUwLCAxNjksIDIzOSwgOTgsIAorICAgIDE2LCAyMTcsIDYzLCA5NiwgNDcsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCA2MywgODYsIDQ3LCAyNTAsIDE2OSwgCisgICAgMjM5LCA5OCwgMTYsIDI0NiwgNjIsIDI0OSwgMjAsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMTIxLCAyMTAsIDQsIDIwNiwgCisgICAgMjQ2LCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDI0NCwgMzgsIDIxMSwgNjksIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCAKKyAgICA2MywgMTIxLCAyNDcsIDMzLCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIxNywgNjMsIDI0NCwgMzcsIDI1MCwgMTY5LCAyMzksIAorICAgIDk4LCAxNiwgMTIxLCAyMTAsIDQsIDIzMCwgODgsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMTc3LCAyMDYsIDc2LCAyNTAsIAorICAgIDE2OSwgMjM5LCA5OCwgMTYsIDIxNywgNjMsIDE3NywgNDcsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMTEyLCAyMTAsIDQsIAorICAgIDIxOSwgMjAzLCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDI0NCwgNDksIDIxMSwgNjksIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgCisgICAgMjE3LCA2MywgMTEyLCAyNDcsIDMzLCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIxNywgNjMsIDI0NCwgNDgsIDI1MCwgMTY5LCAKKyAgICAyMzksIDk4LCAxNiwgMTEyLCAyMTAsIDQsIDIzMCwgODgsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMTgzLCAyMDYsIDc2LCAKKyAgICAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIxNywgNjMsIDE4MywgNDcsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCAzMCwgCisgICAgMjA2LCAyNDYsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjQ0LCAzOCwgMjA2LCAyNDYsIDI1MCwgMTY5LCAyMzksIDk4LCAKKyAgICAxNiwgMjQzLCAyMjIsIDIwNiwgMjQ2LCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIzMCwgODksIDIwNiwgMjQ2LCAyNTAsIAorICAgIDE2OSwgMjM5LCA5OCwgMTYsIDI0NiwgNjIsIDIwNiwgMjQ2LCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDExMiwgMjEyLCAKKyAgICAyNDAsIDIzMCwgODgsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCAzMCwgMjE3LCA2MiwgMjUwLCAxNjksIDIzOSwgOTgsIAorICAgIDE2LCAyNDYsIDYyLCAyMTEsIDk0LCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIxNywgNjMsIDI0NSwgMjQyLCAyNTAsIDE2OSwgCisgICAgMjM5LCA5OCwgMTYsIDExMiwgMjEwLCA0LCAyNDMsIDIzMSwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyNDQsIDQ5LCAyNDMsIAorICAgIDIzMSwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyMTEsIDk1LCAyNDMsIDIzMSwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAKKyAgICAyMzAsIDg5LCAyNDMsIDIzMSwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyNDYsIDYyLCAyNDMsIDIzMSwgMjUwLCAxNjksIAorICAgIDIzOSwgOTgsIDE2LCAxMjEsIDIxMiwgMjQwLCAyMTEsIDY5LCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDQ5LCAyMTIsIDI0MCwgCisgICAgMjExLCA2OSwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyMDgsIDIyOCwgMjQzLCAyMzEsIDI1MCwgMTY5LCAyMzksIDk4LCAKKyAgICAxNiwgMjM3LCAyNDcsIDI0MywgMjMxLCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDI0NSwgMjM0LCAxNDIsIDI1MCwgMTY5LCAKKyAgICAyMzksIDk4LCAxNiwgMjQ0LCA0OSwgMjA4LCAyMjcsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjAyLCAyOSwgMjUwLCAxNjksIAorICAgIDIzOSwgOTgsIDE2LCAyMTEsIDcwLCAyMDgsIDIyNywgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyMTMsIDE0NCwgMjA2LCAKKyAgICAyNDYsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE3LCA2MywgMjIxLCAxNjYsIDI0MSwgMzYsIDI1MCwgMTY5LCAyMzksIAorICAgIDk4LCAxNiwgMjE3LCA2MywgMjE3LCA0NiwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAxMjEsIDI0NywgMzQsIDIwOCwgMjI3LCAKKyAgICAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDExMiwgMjQ3LCAzNCwgMjA4LCAyMjcsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgCisgICAgMjMwLCAyMzAsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjE2LCA1OSwgMjUwLCAxNjksIDIzOSwgOTgsIDE2LCAyMjAsIDM2LCAKKyAgICAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDI1MSwgMywgMjA2LCAyNDYsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjQxLCAzOCwgCisgICAgMjA2LCAyNDYsIDI1MCwgMTY5LCAyMzksIDk4LCAxNiwgMjMwLCAyMzEsIDIwNiwgMjQ2LCAyNTAsIDE2OSwgMjM5LCA5OCwgCisgICAgMTYsIDIyMCwgMzcsIDIwNiwgMjQ2LCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDI1MSwgMiwgMjIxLCAxNjYsIDI0NiwgMTY5LCAKKyAgICA4MiwgNTAsIDI1MCwgMjE4LCAzLCAxODMsIDIwMiwgMzAsIDQ3LCAyMTIsIDIxMCwgMTcxLCAyNDcsIDIzMywgMjQ4LCAxMjksIAorICAgIDk3LCA4MCwgMjI3LCAxMTUsIDMsIDEwMSwgMjQzLCA4NSwgMjMxLCA4LCA5NywgMjQ1LCAxODksIDIwNiwgMjQ0LCA5NywgCisgICAgMjQzLCAxNTgsIDIwNiwgMjQ0LCA5NywgMjQxLCA5NiwgOTcsIDI0NSwgMjI0LCA5NywgNjEsIDUxLCAzLCAyNDYsIDIxOCwgCisgICAgODAsIDIyNywgMTE0LCAyNDEsIDY4LCA5NywgMjUwLCAyNTAsIDIyOSwgMTUyLCA5NywgMjM3LCAzNywgOTcsIDQzLCAyMzYsIAorICAgIDEwNiwgMjQ4LCAyMzEsIDMsIDIyMSwgMTYzLCA0MywgMjA4LCA4NiwgMjQyLCA3MCwgMjQ3LCAyMDMsIDI0NiwgNjIsIDMsIAorICAgIDIyMSwgMTY5LCA0NywgMjA2LCAyNDIsIDk3LCAyMjQsIDQwLCA5NywgMjM1LCAyMTYsIDk3LCAyMjAsIDcsIDIzNywgMTcwLCAKKyAgICA5NywgMjIwLCA3LCAyMjgsIDEyOSwgOTcsIDIxOSwgNTksIDk3LCAyMTksIDU4LCA5NywgMjQzLCAxNjcsIDI0NSwgOTEsIAorICAgIDE2LCAyMzksIDE1OSwgMTA4LCAyMTIsIDUsIDk3LCAyNTAsIDE2OSwgMjM5LCA5OCwgMTYsIDIxNywgNjIsIDI0NCwgNjgsIAorICAgIDIxMywgMTMxLCAyMjksIDE1MiwgOTcsIDIxNywgMjM4LCAyMTksIDE1MywgMjIyLCAyMDgsIDIxOSwgMTUzLCAyMTcsIDIzNCwgCisgICAgMjE0LCAxODUsIDk3LCAyNDYsIDMzLCAyMTQsIDE4NSwgOTcsIDQ5LCAyMTksIDc3LCAyMDYsIDIyMSwgMTEzLCA0OSwgMjE5LCAKKyAgICA3NywgMjQwLCAyMDAsIDQ5LCAyMTksIDc3LCAyMjYsIDI1MSwgMTEzLCA1MCwgMjE5LCA3NywgMjA2LCAyMjEsIDExMywgNTAsIAorICAgIDIxOSwgNzcsIDI0MCwgMjAwLCA1MCwgMjE5LCA3NywgMjI2LCAyNTEsIDExMywgNDksIDUxLCAyNDcsIDIyNywgMjA2LCAKKyAgICAyMjEsIDI0NSwgMTY1LCA0OSwgNTEsIDI0NywgMjI3LCAyNDAsIDIwMCwgNDksIDUxLCAyNDcsIDIyNywgMjI2LCAyNTEsIAorICAgIDI0NSwgMTY1LCA1MCwgNTEsIDI0NywgMjI3LCAyMDYsIDIyMSwgMjQ1LCAxNjUsIDUwLCA1MSwgMjQ3LCAyMjcsIDI0MCwgCisgICAgMjAwLCA1MCwgNTEsIDI0NywgMjI3LCAyMjYsIDI1MSwgMjQ1LCAxNjUsIDQ5LCAyNDUsIDkzLCAyNDcsIDIyNywgMjA2LCAKKyAgICAyMjEsIDExMywgNDksIDI0NSwgOTMsIDI0NywgMjI3LCAxMDEsIDIxOCwgMTU5LCA0OSwgMjQ1LCA5MywgMjQ3LCAyMjcsIAorICAgIDIyNiwgMjUxLCAxMTMsIDI0NSwgOTMsIDI0NywgMjI3LCAyNDAsIDIwMCwgNTAsIDI0NSwgOTMsIDI0NywgMjI3LCAyMDYsIAorICAgIDIyMSwgMTEzLCA1MCwgMjQ1LCA5MywgMjQ3LCAyMjcsIDEwMSwgMjE4LCAxNTksIDUwLCAyNDUsIDkzLCAyNDcsIDIyNywgCisgICAgMjI2LCAyNTEsIDExMywgMjMxLCAzLCAyNDAsIDIwMCwgMjM2LCAxMDYsIDIyNywgMTE1LCAyNDAsIDIwMCwgMjA2LCAyMjEsIAorICAgIDQ5LCAyMTksIDI0NSwgMjI2LCAyNTEsIDUwLCAyNDUsIDkzLCAyNDcsIDIyNywgMjE0LCAxNjcsIDIwNiwgMjIxLCA1MCwgCisgICAgMjE5LCAyNDUsIDIyNiwgMjUxLCA0OSwgMjQ1LCA5MywgMjQ3LCAyMjcsIDIxNCwgMTY3LCAyMTAsIDIxOCwgMjA4LCAxNDQsIAorICAgIDIxMCwgMjE4LCAyNDcsIDI0NywgMjA4LCAxNDUsIDUxLCAxNTUsIDI0NywgMjQ4LCA1MSwgMTU1LCAyNDcsIDI0OCwgNTEsIAorICAgIDI0NywgMjI3LCAxMTUsIDIwOCwgMTQ1LCA1MSwgMTU1LCA0MCwgMTYsIDI0NywgMjQ3LCA0OSwgODAsIDk4LCAyMjcsIDExNCwgCisgICAgNTAsIDgwLCA5OCwgMjI3LCAxMTQsIDIzNiwgMTA2LCAyMTQsIDIwMiwgMjI3LCAxMTMsIDIzNiwgMTA2LCAyMTQsIDIwMiwgCisgICAgMjI3LCAxMTIsIDIzNiwgMTA2LCAyMTQsIDIwMiwgMjI3LCAxMTEsIDIzNiwgMTA2LCAyMTQsIDIwMiwgMjI3LCAxMTAsIAorICAgIDI0NCwgMjksIDE2LCAxNTcsIDgwLCAyNSwgMjA4LCAxNDUsIDIxNiwgMTYsIDI0NCwgMjksIDE2LCAxNTcsIDgwLCAyNSwgCisgICAgMjQ3LCAyNDgsIDIxNiwgMTYsIDI0NCwgMjksIDE2LCAxNTcsIDgwLCAzLCAyNDYsIDYxLCAyNDQsIDI5LCAxNiwgMTU3LCAKKyAgICAxMjEsIDI1LCAyMzYsIDEwNiwgMywgMjQ2LCA2MSwgMjQ0LCAyOSwgMTYsIDE1NywgMTEyLCAyNSwgMjM2LCAxMDYsIDMsIAorICAgIDI0NiwgNjEsIDI0NCwgMjksIDE2LCAxNTcsIDgwLCAzLCAyMDgsIDg1LCAyNDQsIDI5LCAxNiwgMTU3LCAxMjEsIDI1LCAKKyAgICAyMzYsIDEwNiwgMywgMjA4LCA4NSwgMjQ0LCAyOSwgMTYsIDE1NywgMTEyLCAyNSwgMjM2LCAxMDYsIDMsIDIwOCwgODUsIAorICAgIDI0NCwgMjksIDE2LCAxNTcsIDgwLCAyNSwgMjA0LCA3NSwgMjQ0LCAyOSwgMTYsIDE1NywgMTIxLCAyNSwgMjM2LCAxMDYsIAorICAgIDMsIDIwNCwgNzUsIDI0NCwgMjksIDE2LCAxNTcsIDExMiwgMjUsIDIzNiwgMTA2LCAzLCAyMDQsIDc1LCAyNDQsIDI5LCAxNiwgCisgICAgMTU3LCAxMjEsIDI1LCAyMzYsIDEwNSwgMjQ0LCAyOSwgMTYsIDE1NywgMTEyLCAyNSwgMjM2LCAxMDUsIDI0NCwgMjksIDE2LCAKKyAgICAxNTcsIDgwLCAyNSwgMjA4LCAxNDUsIDIyNywgMjIyLCAyNDQsIDI5LCAxNiwgMTU3LCA4MCwgMjUsIDI0NywgMjQ4LCAyMjcsIAorICAgIDIyMiwgNTEsIDIzOSwgMTcyLCAyMTYsIDc4LCA5NywgMjQxLCAxMzEsIDk3LCA4MCwgMjI3LCAxMTUsIDI0MCwgMjAwLCAKKyAgICAyMjQsIDIxNCwgMjQ3LCAyMTQsIDIyNCwgMjE0LCAxNjMsIDExNSwgMjEyLCAyMjcsIDIyNCwgMjE0LCAyMTIsIDIyOCwgCisgICAgMTE1LCAyMjcsIDI4LCAyMjQsIDIxNCwgMTYzLCAxMTUsIDEyMCwgMjEyLCAyMTMsIDIyNCwgMjE0LCAxMjAsIDIxMiwgMjE0LCAKKyAgICAxMTUsIDIyNywgMjgsIDIyNCwgMjE0LCAxMjAsIDIxMiwgMjE0LCAyMzAsIDk3LCAyMjQsIDIxNCwgMjA4LCA2NiwgMjI0LCAKKyAgICAyMTQsIDIwOSwgMTI0LCAyMjQsIDIxNCwgMjE4LCAyNTMsIDI0MSwgMTgwLCAyMzcsIDIzOSwgMjM5LCA5MiwgMjA4LCAxNDUsIAorICAgIDIxOSwgNzYsIDI0NywgMjQ4LCAyMTksIDc2LCAyMDgsIDE0NSwgMjQ1LCA5MywgMTU1LCAyNDcsIDI0OCwgMjQ1LCA5MywgCisgICAgMTU1LCAyMDgsIDE0NSwgMjA4LCAxMzMsIDIxMywgMzMsIDE1NSwgMjQ3LCAyNDgsIDIwOCwgMTMzLCAyMTMsIDMzLCAxNTUsIAorICAgIDYxLCAyMDgsIDEwMSwgMjQ4LCAxMTUsIDIxNSwgMjUzLCAzLCAyNDYsIDYxLCAyMTEsIDUxLCAyMzksIDIxNSwgMjUxLCAKKyAgICAxNDIsIDI0NSwgOTAsIDI0MSwgMTE2LCAyMzAsIDI0NCwgMjQ0LCA2OCwgMjQwLCAyMDQsIDk3LCA2MiwgMjE2LCAxMSwgNTIsIAorICAgIDIwOCwgODUsIDYyLCAyMjcsIDIxNywgNTIsIDIwOCwgODUsIDYyLCAyMDYsIDIyMywgNTIsIDIwOCwgODUsIDYyLCAyNDIsIAorICAgIDY5LCA1MiwgMjA4LCA4NSwgNjIsIDIxNiwgMTEsIDUyLCAyMDgsIDg2LCAzLCA4MCwgMTQyLCA2MiwgMjI3LCAyMTcsIDUyLCAKKyAgICAyMDgsIDg2LCAzLCA4MCwgMTQyLCA2MiwgMjE2LCAxMSwgMjA4LCA4NiwgMywgNTIsIDgwLCAxNDIsIDI1MSwgMzQsIDI0NiwgCisgICAgMTksIDIxMSwgNTgsIDIwOCwgMjIwLCAyNDYsIDE5LCAyMzYsIDQxLCAzLCAyMzksIDE5NSwgMjE0LCAyNDEsIDYyLCAyMjUsIAorICAgIDEwLCAyMjcsIDIxNywgMjA4LCA4NSwgNjIsIDIyNSwgMTAsIDIxNiwgMTEsIDIwOCwgODUsIDYyLCAyMjUsIDEwLCAyMDYsIAorICAgIDIyMywgMjA4LCA4NSwgNjIsIDIyNSwgMTAsIDI0MiwgNjksIDIwOCwgODUsIDUyLCA4MCwgMTQyLCA2MiwgNTEsIDM1LCAKKyAgICAyMTEsIDYxLCA2MiwgMjQ2LCA2MiwgMzUsIDIxNiwgMTQ4LCAxNiwgMzUsIDIyMSwgNDgsIDE2LCAzNSwgMjExLCA5MCwgNzYsIAorICAgIDIzNywgNjEsIDE2LCAzNSwgMjExLCA5MCwgNzYsIDIwOSwgMTEyLCAxNiwgMzUsIDI0MSwgODQsIDc2LCAyMDksIDExMiwgCisgICAgMTYsIDM1LCAyNDEsIDg0LCA3NiwgMjA4LCAxMDUsIDE2LCAzNSwgMjQxLCA3MSwgMTYsIDM1LCAyNTEsIDEzMCwgMTYsIDM1LCAKKyAgICAyNDgsIDEyOCwgMTYsIDM1LCAyNDksIDE5LCAxNiwgMzUsIDIzNiwgMTA2LCAyMTAsIDUsIDE2LCAzNSwgMjI3LCAxMTUsIAorICAgIDI0MCwgNTEsIDE2LCAzNSwgODAsIDIxMCwgNSwgMTYsIDM1LCAyMzksIDE1OSwgMjQwLCA1MSwgMTYsIDM1LCAyNDcsIDI1LCAKKyAgICAyMTYsIDc3LCAxNiwgMzUsIDIxMywgNywgMjE5LCAyMTEsIDE2LCAzNSwgMjEzLCA3LCAyMzEsIDQ5LCAxNiwgMzUsIDI0NCwgCisgICAgMTM5LCAyMjcsIDEwNSwgMjQxLCA5LCAxNiwgMzUsIDI0NCwgOCwgMjQ1LCAxODQsIDEwNSwgMTYsIDM1LCAyNDQsIDgsIAorICAgIDI0NSwgMTg0LCAxMDgsIDE2LCAzNSwgMjQ0LCA4LCAyNDUsIDE4NCwgMTQ3LCAxNiwgMzUsIDI0NCwgOCwgMjQ1LCAxODQsIAorICAgIDE0OSwgMTYsIDM1LCAxODIsIDI1MSwgMTMwLCAxNiwgMzUsIDIxMCwgOTUsIDIzMSwgMTEyLCAxNiwgMzUsIDI0MSwgODQsIAorICAgIDc2LCAyMDgsIDEwNiwgMjQ4LCAzMywgMTYsIDM1LCAyNDcsIDU5LCAxNiwgMzUsIDI0MSwgODQsIDc2LCAyMjUsIDksIDE2LCAKKyAgICAzNSwgMjEwLCAyNDIsIDE2LCAzNSwgMjQxLCA5LCAxNiwgMzUsIDI0MCwgMTEsIDIxMywgMTMwLCAxNiwgMzUsIDIzNywgCisgICAgMjM4LCAyMTMsIDEzMCwgMTYsIDM1LCAyMTYsIDE0OSwgMjEzLCAxMzAsIDE2LCAzNSwgMjA2LCAyMzYsIDIxMywgMTMwLCAKKyAgICAxNiwgMzUsIDIxMSwgMjI4LCAxNiwgMzUsIDI0NCwgNDYsIDI0OCwgMzcsIDk3LCAxNzEsIDI0NywgMjMzLCAxNiwgMzUsIAorICAgIDIyMiwgMjExLCAxNiwgMzUsIDI0NCwgNDcsIDIzOSwgMTU5LCAxMDgsIDE2LCAzNSwgMjEwLCAyNDMsIDIzOSwgMTU5LCAKKyAgICAxMDgsIDIyMCwgODIsIDExMywgMjIwLCA4MiwgMjQ2LCAxOTQsIDIyMCwgODIsIDIzOSwgMTYyLCAyMjAsIDgyLCAyMzAsIAorICAgIDIzOSwgMjM5LCAxNjIsIDIyMCwgODIsIDI0OCwgMTI1LCAyNDcsIDE5MCwgMjIwLCA4MiwgMjQ3LCAyNDEsIDIwOCwgMjUwLCAKKyAgICAyMjAsIDgyLCAyNDcsIDIyNCwgMjQ4LCAyMzYsIDIzNSwgMTUzLCAyMjAsIDgyLCAyNTAsIDIzNywgNzYsIDI0NiwgMTY4LCAKKyAgICAyMjAsIDgyLCAyNDQsIDE0NCwgMjIwLCA4MiwgMjQ1LCA4MCwgMjUxLCAxMzQsIDIyMSwgNDYsIDIyMCwgODIsIDUyLCAyNDksIAorICAgIDIwLCA0MywgMTcsIDEwNSwgNDMsIDE3LCAxMDgsIDQzLCAxNywgMTQ3LCA0MywgMTcsIDE0OSwgNDMsIDE3LCAxNzAsIDQzLCAKKyAgICAxNywgMTk1LCA0MywgMTcsIDIxMywgMTExLCA0MywgMTcsIDE5OSwgNDMsIDE3LCAyMjIsIDYzLCA0MywgNDIsIDIwOSwgCisgICAgMTUyLCA0MywgNDIsIDI0MSwgMTEyLCA0MywgNDIsIDIwNywgMTU0LCA0MywgNDIsIDIwOSwgNTUsIDQzLCA0MiwgMjM5LCAKKyAgICAxNDEsIDQzLCA0MiwgMjQwLCAyMiwgNDMsIDQyLCAyMTIsIDgyLCA0MywgNDIsIDIxMywgMTA4LCA0MywgNDIsIDI0MSwgCisgICAgMTQwLCA0MywgNDIsIDIyMiwgNjAsIDQzLCA0MiwgMjA3LCAxNTEsIDEwMiwgMTcsIDEwNSwgMTAyLCAxNywgMTA4LCAxMDIsIAorICAgIDE3LCAxNDcsIDEwMiwgMTcsIDE0OSwgMTAyLCAxNywgMTcwLCAxMDIsIDE3LCAxOTUsIDEwMiwgMTcsIDIxMywgMTExLCAKKyAgICAxMDIsIDE3LCAxOTksIDEwMiwgMTcsIDIyMiwgNjMsIDEwMiwgNDIsIDIwOSwgMTUyLCAxMDIsIDQyLCAyNDEsIDExMiwgCisgICAgMTAyLCA0MiwgMjA3LCAxNTQsIDEwMiwgNDIsIDIwOSwgNTUsIDEwMiwgNDIsIDIzOSwgMTQxLCAxMDIsIDQyLCAyNDAsIDIyLCAKKyAgICAxMDIsIDQyLCAyMTIsIDgyLCAxMDIsIDQyLCAyMTMsIDEwOCwgMTAyLCA0MiwgMjQxLCAxNDAsIDEwMiwgNDIsIDIyMiwgNjAsIAorICAgIDEwMiwgNDIsIDIwNywgMTUxLCAxNywgMTE4LCAyMzksIDEwMiwgMjExLCA2MSwgMTcsIDEyMCwgMjM5LCAxMDIsIDIxMSwgCisgICAgNjEsIDE3LCAxMjYsIDIzOSwgMTAyLCAyMTEsIDYxLCAxNywgMjM5LCAxNDcsIDIzOSwgMTAyLCAyMTEsIDYxLCAxNywgMjM5LCAKKyAgICAyMzMsIDIzOSwgMTAyLCAyMTEsIDYxLCAxNywgMjEyLCA4OCwgMjM5LCAxMDIsIDIxMSwgNjEsIDE3LCAyMTMsIDExMiwgCisgICAgMjM5LCAxMDIsIDIxMSwgNjEsIDE3LCAyNDEsIDE0MywgMjM5LCAxMDIsIDIxMSwgNjEsIDE3LCAyMjIsIDY0LCAyMzksIAorICAgIDEwMiwgMjExLCA2MSwgNDIsIDIwOSwgMTUzLCAyMzksIDEwMiwgMjExLCA2MSwgNDIsIDI0MSwgMTEzLCAyMzksIDEwMiwgCisgICAgMjExLCA2MSwgNDIsIDIwNywgMTU1LCAyMzksIDEwMiwgMjExLCA2MSwgNDIsIDIwOSwgNTYsIDIzOSwgMTAyLCAyMTEsIDYxLCAKKyAgICA0MiwgMjM5LCAxNDIsIDIzOSwgMTAyLCAyMTEsIDYxLCA0MiwgMjQwLCAyMywgMjM5LCAxMDIsIDIxMSwgNjEsIDQyLCAyMTIsIAorICAgIDgzLCAyMzksIDEwMiwgMjExLCA2MSwgNDIsIDIxMywgMTA5LCAyMzksIDEwMiwgMjExLCA2MSwgNDIsIDI0MSwgMTQxLCAKKyAgICAyMzksIDEwMiwgMjExLCA2MSwgNDIsIDIyMiwgNjEsIDIzOSwgMTAyLCAyMTEsIDYxLCA0MiwgMjA3LCAxNTIsIDIzOSwgCisgICAgMTAyLCAyMTEsIDYxLCAxMDIsIDgsIDUsIDEsIDYzLCAxMDIsIDgsIDUsIDEsIDI0OSwgMjU1LCAxMDIsIDgsIDUsIDEsIAorICAgIDI0NywgMTI1LCAxMDIsIDgsIDUsIDEsIDI0NSwgNTEsIDEwMiwgOCwgNSwgMSwgNzQsIDEwMiwgOCwgNSwgMSwgMjQwLCAKKyAgICAxNzQsIDEwMiwgOCwgNSwgMSwgMjM5LCA3NSwgMTAyLCA4LCA1LCAxLCAyMzcsIDE3MSwgMTAyLCA4LCA1LCAxLCA3NSwgCisgICAgMTAyLCA4LCA1LCAxLCAyMzAsIDE4NCwgMTAyLCA4LCA1LCAxLCAyMzAsIDU0LCAxMDIsIDgsIDUsIDEsIDE1OSwgMTAyLCA4LCAKKyAgICA1LCAxLCAyMjYsIDE4NSwgMTAyLCA4LCA1LCAxLCAyMjMsIDE2MywgMTAyLCA4LCA1LCAxLCA3OCwgMTAyLCA4LCA1LCAxLCAKKyAgICAyMTksIDE4NCwgMTAyLCA4LCA1LCAxLCAyMTcsIDEzNCwgMTAyLCA4LCA1LCAxLCAxNDYsIDEwMiwgOCwgNSwgMSwgMTk0LCAKKyAgICAxMDIsIDgsIDUsIDEsIDIxMCwgNjksIDEwMiwgOCwgNSwgMSwgNjgsIDEwMiwgOCwgNSwgMSwgMjA2LCAxNjQsIDEwMiwgOCwgCisgICAgNSwgMSwgMjA0LCAxNDQsIDEwMiwgOCwgNSwgMSwgMjAzLCAxOTYsIDEwMiwgOCwgNSwgMSwgMjAzLCAxMjQsIDEwMiwgOCwgCisgICAgNSwgMSwgMjAyLCAxNTksIDQzLCA4LCA2LCAxLCA2MywgNDMsIDgsIDYsIDEsIDI0OSwgMjU1LCA0MywgOCwgNiwgMSwgMjQ3LCAKKyAgICAxMjUsIDQzLCA4LCA2LCAxLCAyNDUsIDUxLCA0MywgOCwgNiwgMSwgNzQsIDQzLCA4LCA2LCAxLCAyNDAsIDE3NCwgNDMsIDgsIAorICAgIDYsIDEsIDIzOSwgNzUsIDQzLCA4LCA2LCAxLCAyMzcsIDE3MSwgNDMsIDgsIDYsIDEsIDc1LCA0MywgOCwgNiwgMSwgMjMwLCAKKyAgICAxODQsIDQzLCA4LCA2LCAxLCAyMzAsIDU0LCA0MywgOCwgNiwgMSwgMTU5LCA0MywgOCwgNiwgMSwgMjI2LCAxODUsIDQzLCAKKyAgICA4LCA2LCAxLCAyMjMsIDE2MywgNDMsIDgsIDYsIDEsIDc4LCA0MywgOCwgNiwgMSwgMjE5LCAxODQsIDQzLCA4LCA2LCAxLCAKKyAgICAyMTcsIDEzNCwgNDMsIDgsIDYsIDEsIDE0NiwgNDMsIDgsIDYsIDEsIDE5NCwgNDMsIDgsIDYsIDEsIDIxMCwgNjksIDQzLCAKKyAgICA4LCA2LCAxLCA2OCwgNDMsIDgsIDYsIDEsIDIwNiwgMTY0LCA0MywgOCwgNiwgMSwgMjA0LCAxNDQsIDQzLCA4LCA2LCAxLCAKKyAgICAyMDMsIDE5NiwgNDMsIDgsIDYsIDEsIDIwMywgMTI0LCA0MywgOCwgNiwgMSwgMjAyLCAxNTksIDQzLCA4LCA1LCAxLCA2MywgCisgICAgNDMsIDgsIDUsIDEsIDI0OSwgMjU1LCA0MywgOCwgNSwgMSwgMjQ3LCAxMjUsIDQzLCA4LCA1LCAxLCAyNDUsIDUxLCA0MywgCisgICAgOCwgNSwgMSwgNzQsIDQzLCA4LCA1LCAxLCAyNDAsIDE3NCwgNDMsIDgsIDUsIDEsIDIzOSwgNzUsIDQzLCA4LCA1LCAxLCAKKyAgICAyMzcsIDE3MSwgNDMsIDgsIDUsIDEsIDc1LCA0MywgOCwgNSwgMSwgMjMwLCAxODQsIDQzLCA4LCA1LCAxLCAyMzAsIDU0LCAKKyAgICA0MywgOCwgNSwgMSwgMTU5LCA0MywgOCwgNSwgMSwgMjI2LCAxODUsIDQzLCA4LCA1LCAxLCAyMjMsIDE2MywgNDMsIDgsIDUsIAorICAgIDEsIDc4LCA0MywgOCwgNSwgMSwgMjE5LCAxODQsIDQzLCA4LCA1LCAxLCAyMTcsIDEzNCwgNDMsIDgsIDUsIDEsIDE0NiwgCisgICAgNDMsIDgsIDUsIDEsIDE5NCwgNDMsIDgsIDUsIDEsIDIxMCwgNjksIDQzLCA4LCA1LCAxLCA2OCwgNDMsIDgsIDUsIDEsIAorICAgIDIwNiwgMTY0LCA0MywgOCwgNSwgMSwgMjA0LCAxNDQsIDQzLCA4LCA1LCAxLCAyMDMsIDE5NiwgNDMsIDgsIDUsIDEsIDIwMywgCisgICAgMTI0LCA0MywgOCwgNSwgMSwgMjAyLCAxNTksIDQzLCAxNywgMjAyLCA4NCwgMTgyLCA0MywgNDIsIDI0MSwgMTEyLCAxODIsIAorICAgIDQzLCA0MiwgMjA3LCAxNTQsIDE4MiwgNDMsIDQyLCAyMDksIDU1LCAxODIsIDQzLCA0MiwgMjM5LCAxNDEsIDE4MiwgNDMsIAorICAgIDQyLCAyNDAsIDIyLCAxODIsIDQzLCA0MiwgMjEyLCA4MiwgMTgyLCA0MywgNDIsIDIxMywgMTA4LCAxODIsIDQzLCA0MiwgCisgICAgMjQxLCAxNDAsIDE4MiwgNDMsIDQyLCAyMjIsIDYwLCAxODIsIDQzLCA0MiwgMjA3LCAxNTEsIDUyLCA0MywgMTcsIDEwNSwgCisgICAgNTIsIDQzLCAxNywgMTA4LCA1MiwgNDMsIDE3LCAxNDcsIDUyLCA0MywgMTcsIDE0OSwgNTIsIDQzLCAxNywgMTcwLCA1MiwgCisgICAgNDMsIDE3LCAxOTUsIDUyLCA0MywgMTcsIDIxMywgMTExLCA1MiwgNDMsIDE3LCAxOTksIDUyLCA0MywgMTcsIDIyMiwgNjMsIAorICAgIDUyLCA0MywgNDIsIDIwOSwgMTUyLCAxODIsIDQzLCAxNywgMjAyLCA4NCwgOTgsIDExNiwgMTU3LCAyMzYsIDEwNSwgOTgsIAorICAgIDExNiwgNzksIDIzNiwgMTA1LCA5OCwgMTE2LCAxNTcsIDIwNiwgMzgsIDk4LCAxMTYsIDc5LCAyMDYsIDM4LCA5OCwgMTE2LCAKKyAgICAxNTcsIDIwOCwgNzAsIDI0NCwgMTQ1LCAyMzYsIDEwNSwgOTgsIDExNiwgNzksIDIwOCwgNzAsIDI0NCwgMTQ1LCAyMzYsIAorICAgIDEwNSwgOTgsIDExNiwgMTU3LCAyMDgsIDcwLCAyNDQsIDE0NSwgMjA2LCAzOCwgOTgsIDExNiwgNzksIDIwOCwgNzAsIDI0NCwgCisgICAgMTQ1LCAyMDYsIDM4LCA5OCwgMTE2LCAxNTcsIDIxNywgNTgsIDI0NCwgMTQ1LCAyMzYsIDEwNSwgOTgsIDExNiwgNzksIAorICAgIDIxNywgNTgsIDI0NCwgMTQ1LCAyMzYsIDEwNSwgOTgsIDExNiwgMTU3LCAyMTcsIDU4LCAyNDQsIDE0NSwgMjA2LCAzOCwgCisgICAgOTgsIDExNiwgNzksIDIxNywgNTgsIDI0NCwgMTQ1LCAyMDYsIDM4LCA5OCwgMTE2LCAxNTcsIDEyMSwgMjUsIDIxNiwgMTYsIAorICAgIDk4LCAxMTYsIDEyMSwgMTU3LCAyNSwgNTAsIDIzNywgNDksIDk4LCAxMTYsIDEyMSwgNzksIDI1LCA1MCwgMjI3LCAxMzQsIAorICAgIDk4LCAxMTYsIDc5LCAxMjEsIDI1LCAyMTYsIDE2LCA5OCwgMTE2LCAxNTcsIDEyMSwgMjUsIDIyNywgMjIyLCA5OCwgMTE2LCAKKyAgICAxMjEsIDE1NywgMjUsIDQ5LCAyMzcsIDQ5LCA5OCwgMTE2LCAxMjEsIDc5LCAyNSwgNDksIDIyNywgMTM0LCA5OCwgMTE2LCAKKyAgICA3OSwgMTIxLCAyNSwgMjI3LCAyMjIsIDk4LCAxMTYsIDE1NywgMTEyLCAyNSwgMjE2LCAxNiwgOTgsIDExNiwgMTEyLCAxNTcsIAorICAgIDI1LCA1MCwgMjM3LCA0OSwgOTgsIDExNiwgMTEyLCA3OSwgMjUsIDUwLCAyMjcsIDEzNCwgOTgsIDExNiwgNzksIDExMiwgCisgICAgMjUsIDIxNiwgMTYsIDk4LCAxMTYsIDE1NywgMTEyLCAyNSwgMjI3LCAyMjIsIDk4LCAxMTYsIDExMiwgMTU3LCAyNSwgNDksIAorICAgIDIzNywgNDksIDk4LCAxMTYsIDExMiwgNzksIDI1LCA0OSwgMjI3LCAxMzQsIDk4LCAxMTYsIDc5LCAxMTIsIDI1LCAyMjcsIAorICAgIDIyMiwgOTgsIDExNiwgMTU3LCA4MCwgMjUsIDIxNiwgMTYsIDk4LCAxMTYsIDgwLCAxNTcsIDI1LCA1MCwgMjM3LCA0OSwgCisgICAgOTgsIDExNiwgMTEyLCA3OSwgMjUsIDUwLCAxMjEsIDIyNywgMTM0LCA5OCwgMTE2LCAxMjEsIDc5LCAyNSwgNTAsIDExMiwgCisgICAgMjI3LCAxMzQsIDk4LCAxMTYsIDgwLCA3OSwgMjUsIDUwLCAyMjcsIDEzNCwgOTgsIDExNiwgMTIxLCAxNTcsIDI1LCA1MCwgCisgICAgMTEyLCAyMzcsIDQ5LCA5OCwgMTE2LCAxMTIsIDE1NywgMjUsIDUwLCAxMjEsIDIzNywgNDksIDk4LCAxMTYsIDc5LCA4MCwgCisgICAgMjUsIDIxNiwgMTYsIDk4LCAxMTYsIDE1NywgODAsIDI1LCAyMjcsIDIyMiwgOTgsIDExNiwgODAsIDE1NywgMjUsIDQ5LCAKKyAgICAyMzcsIDQ5LCA5OCwgMTE2LCAxMTIsIDc5LCAyNSwgNDksIDEyMSwgMjI3LCAxMzQsIDk4LCAxMTYsIDEyMSwgNzksIDI1LCAKKyAgICA0OSwgMTEyLCAyMjcsIDEzNCwgOTgsIDExNiwgODAsIDc5LCAyNSwgNDksIDIyNywgMTM0LCA5OCwgMTE2LCAxMjEsIDE1NywgCisgICAgMjUsIDQ5LCAxMTIsIDIzNywgNDksIDk4LCAxMTYsIDExMiwgMTU3LCAyNSwgNDksIDEyMSwgMjM3LCA0OSwgOTgsIDExNiwgCisgICAgNzksIDgwLCAyNSwgMjI3LCAyMjIsIDk4LCAxMTYsIDE1NywgMTIxLCAyNSwgMjM2LCAxMDUsIDk4LCAxMTYsIDQ5LCA3OSwgCisgICAgMjUsIDUwLCAxMjEsIDIyNywgMTM0LCA5OCwgMTE2LCA1MCwgNzksIDI1LCA0OSwgMTIxLCAyMjcsIDEzNCwgOTgsIDExNiwgCisgICAgMTIxLCAxNTcsIDI1LCAyMzYsIDEwNiwgMjM3LCA0OSwgOTgsIDExNiwgMTIxLCA3OSwgMjUsIDIzNiwgMTA2LCAyMjcsIAorICAgIDEzNCwgOTgsIDExNiwgNTAsIDE1NywgMjUsIDQ5LCAxMjEsIDIzNywgNDksIDk4LCAxMTYsIDQ5LCAxNTcsIDI1LCA1MCwgCisgICAgMTIxLCAyMzcsIDQ5LCA5OCwgMTE2LCA3OSwgMTIxLCAyNSwgMjM2LCAxMDUsIDk4LCAxMTYsIDE1NywgMTEyLCAyNSwgMjM2LCAKKyAgICAxMDUsIDk4LCAxMTYsIDQ5LCA3OSwgMjUsIDUwLCAxMTIsIDIyNywgMTM0LCA5OCwgMTE2LCA1MCwgNzksIDI1LCA0OSwgCisgICAgMTEyLCAyMjcsIDEzNCwgOTgsIDExNiwgMTEyLCAxNTcsIDI1LCAyMzYsIDEwNiwgMjM3LCA0OSwgOTgsIDExNiwgMTEyLCAKKyAgICA3OSwgMjUsIDIzNiwgMTA2LCAyMjcsIDEzNCwgOTgsIDExNiwgNTAsIDE1NywgMjUsIDQ5LCAxMTIsIDIzNywgNDksIDk4LCAKKyAgICAxMTYsIDQ5LCAxNTcsIDI1LCA1MCwgMTEyLCAyMzcsIDQ5LCA5OCwgMTE2LCA3OSwgMTEyLCAyNSwgMjM2LCAxMDUsIDk4LCAKKyAgICAxMTYsIDE1NywgODAsIDI1LCAyMzYsIDEwNSwgOTgsIDExNiwgNDksIDc5LCAyNSwgNTAsIDgwLCAyMjcsIDEzNCwgOTgsIAorICAgIDExNiwgNTAsIDc5LCAyNSwgNDksIDgwLCAyMjcsIDEzNCwgOTgsIDExNiwgODAsIDE1NywgMjUsIDIzNiwgMTA2LCAyMzcsIAorICAgIDQ5LCA5OCwgMTE2LCAxMTIsIDc5LCAyNSwgMTIxLCAyMzYsIDEwNiwgMjI3LCAxMzQsIDk4LCAxMTYsIDEyMSwgNzksIDI1LCAKKyAgICAxMTIsIDIzNiwgMTA2LCAyMjcsIDEzNCwgOTgsIDExNiwgODAsIDc5LCAyNSwgMjM2LCAxMDYsIDIyNywgMTM0LCA5OCwgCisgICAgMTE2LCA0OSwgMTEyLCA3OSwgMjUsIDUwLCAxMjEsIDIyNywgMTM0LCA5OCwgMTE2LCA1MCwgMTEyLCA3OSwgMjUsIDQ5LCAKKyAgICAxMjEsIDIyNywgMTM0LCA5OCwgMTE2LCA0OSwgMTIxLCA3OSwgMjUsIDUwLCAxMTIsIDIyNywgMTM0LCA5OCwgMTE2LCA1MCwgCisgICAgMTIxLCA3OSwgMjUsIDQ5LCAxMTIsIDIyNywgMTM0LCA5OCwgMTE2LCAxMjEsIDE1NywgMjUsIDExMiwgMjM2LCAxMDYsIAorICAgIDIzNywgNDksIDk4LCAxMTYsIDExMiwgMTU3LCAyNSwgMTIxLCAyMzYsIDEwNiwgMjM3LCA0OSwgOTgsIDExNiwgNTAsIDE1NywgCisgICAgMjUsIDQ5LCA4MCwgMjM3LCA0OSwgOTgsIDExNiwgNDksIDE1NywgMjUsIDUwLCA4MCwgMjM3LCA0OSwgOTgsIDExNiwgNzksIAorICAgIDgwLCAyNSwgMjM2LCAxMDUsIDk4LCAxMTYsIDE1NywgNTIsIDI0NCwgMTQ1LCAyMzYsIDEwNSwgOTgsIDExNiwgNzksIDUyLCAKKyAgICAyNDQsIDE0NSwgMjM2LCAxMDUsIDk4LCAxMTYsIDE1NywgNTIsIDI0NCwgMTQ1LCAyMDYsIDM4LCA5OCwgMTE2LCA3OSwgNTIsIAorICAgIDI0NCwgMTQ1LCAyMDYsIDM4LCA5OCwgMTE2LCA1MiwgMjM2LCAxMDUsIDk4LCAxMTYsIDUyLCAyMDYsIDM4LCA5OCwgMTE2LCAKKyAgICAxMjEsIDIxMiwgMTIwLCAyNSwgNTAsIDI0MiwgNzgsIDk4LCAxMTYsIDEyMSwgNTIsIDI1LCA1MCwgMjEyLCAxMTksIDk4LCAKKyAgICAxMTYsIDUyLCAxMjEsIDI1LCAyMTYsIDE2LCA5OCwgMTE2LCAxMjEsIDIxMiwgMTIwLCAyNSwgNDksIDI0MiwgNzgsIDk4LCAKKyAgICAxMTYsIDEyMSwgNTIsIDI1LCA0OSwgMjEyLCAxMTksIDk4LCAxMTYsIDUyLCAxMjEsIDI1LCAyMjcsIDIyMiwgOTgsIDExNiwgCisgICAgMTEyLCAyMTIsIDEyMCwgMjUsIDUwLCAyNDIsIDc4LCA5OCwgMTE2LCAxMTIsIDUyLCAyNSwgNTAsIDIxMiwgMTE5LCA5OCwgCisgICAgMTE2LCA1MiwgMTEyLCAyNSwgMjE2LCAxNiwgOTgsIDExNiwgMTEyLCAyMTIsIDEyMCwgMjUsIDQ5LCAyNDIsIDc4LCA5OCwgCisgICAgMTE2LCAxMTIsIDUyLCAyNSwgNDksIDIxMiwgMTE5LCA5OCwgMTE2LCA1MiwgMTEyLCAyNSwgMjI3LCAyMjIsIDk4LCAxMTYsIAorICAgIDgwLCAyMTIsIDEyMCwgMjUsIDUwLCAyNDIsIDc4LCA5OCwgMTE2LCA4MCwgNTIsIDI1LCA1MCwgMjEyLCAxMTksIDk4LCAKKyAgICAxMTYsIDUyLCA4MCwgMjUsIDIxNiwgMTYsIDk4LCAxMTYsIDgwLCAyMTIsIDEyMCwgMjUsIDQ5LCAyNDIsIDc4LCA5OCwgCisgICAgMTE2LCA4MCwgNTIsIDI1LCA0OSwgMjEyLCAxMTksIDk4LCAxMTYsIDUyLCA4MCwgMjUsIDIyNywgMjIyLCA5OCwgMTE2LCAKKyAgICAxMjEsIDIxMiwgMTIwLCAyNSwgMjM2LCAxMDYsIDI0MiwgNzgsIDk4LCAxMTYsIDEyMSwgNTIsIDI1LCAyMzYsIDEwNiwgCisgICAgMjEyLCAxMTksIDk4LCAxMTYsIDUyLCAxMjEsIDI1LCAyMzYsIDEwNSwgOTgsIDExNiwgMTEyLCAyMTIsIDEyMCwgMjUsIAorICAgIDIzNiwgMTA2LCAyNDIsIDc4LCA5OCwgMTE2LCAxMTIsIDUyLCAyNSwgMjM2LCAxMDYsIDIxMiwgMTE5LCA5OCwgMTE2LCA1MiwgCisgICAgMTEyLCAyNSwgMjM2LCAxMDUsIDk4LCAxMTYsIDgwLCAyMTIsIDEyMCwgMjUsIDIzNiwgMTA2LCAyNDIsIDc4LCA5OCwgMTE2LCAKKyAgICA4MCwgNTIsIDI1LCAyMzYsIDEwNiwgMjEyLCAxMTksIDk4LCAxMTYsIDUyLCA4MCwgMjUsIDIzNiwgMTA1LCA5OCwgMTE2LCAKKyAgICAxNTcsIDI1MCwgMTI5LCAxMjEsIDI1LCAyMTYsIDE2LCA5OCwgMTE2LCAxNTcsIDI1MCwgMTI5LCAxMjEsIDI1LCAyMjcsIAorICAgIDIyMiwgOTgsIDExNiwgMTU3LCAyNTAsIDEyOSwgMTEyLCAyNSwgMjI3LCAyMjIsIDk4LCAxMTYsIDE1NywgMjUwLCAxMjksIAorICAgIDExMiwgMjUsIDIxNiwgMTYsIDk4LCAxMTYsIDE1NywgMjQzLCAyMjgsIDIwNiwgMjIxLCA1MCwgMjA4LCAxNzMsIDIyNiwgCisgICAgMjUxLCAyMjcsIDIyMiwgOTgsIDExNiwgMTU3LCAyNDMsIDIyOCwgMjA2LCAyMjEsIDQ5LCAyMDgsIDE3MywgMjI2LCAyNTEsIAorICAgIDIxNiwgMTYsIDk4LCAxMTYsIDE1NywgMjQzLCAyMjgsIDI0NSwgMTMwLCA5OCwgMTE2LCAxNTcsIDIyNywgMjIyLCA5OCwgCisgICAgMTE2LCAxNTcsIDIwNiwgMjI0LCA5OCwgMTE2LCAxNTcsIDIxNiwgMTYsIDk4LCAxMTYsIDE1NywgMjQyLCA3MCwgOTgsIAorICAgIDExNiwgNzksIDIyNywgMjIyLCA5OCwgMTE2LCA3OSwgMjA2LCAyMjQsIDk4LCAxMTYsIDc5LCAyMTYsIDE2LCA5OCwgMTE2LCAKKyAgICA3OSwgMjQyLCA3MCwgOTgsIDExNiwgMTU3LCA0OSwgMjUsIDc5LCAyMTYsIDE2LCA5OCwgMTE2LCAxNTcsIDExMiwgMjUsIAorICAgIDc5LCAyNDIsIDcwLCA5OCwgMTE2LCA3OSwgNDksIDI1LCAxNTcsIDIxNiwgMTYsIDk4LCAxMTYsIDc5LCAxMTIsIDI1LCAKKyAgICAxNTcsIDI0MiwgNzAsIDIwNiwgMjIxLCAxNjIsIDI0OCwgMzMsIDIyNiwgMjUxLCAxMTgsIDI0MSwgMTM5LCAyNDgsIDMzLCAKKyAgICAyMjYsIDI1MSwgMTE4LCAyMTcsIDU2LCAyNDgsIDMzLCAyMjYsIDI1MSwgMTI2LCAyNDEsIDEzNywgMjQ4LCAzMywgMjI2LCAKKyAgICAyNTEsIDE2MiwgMjQ4LCAzMywgMjI2LCAyNTEsIDIzOSwgMjMzLCAyNDEsIDEzNywgMjQ4LCAzMywgMjI2LCAyNTEsIDEyNiwgCisgICAgMjE3LCA1NCwgMjQ4LCAzMywgMjI2LCAyNTEsIDIxMywgMTEyLCAyNDEsIDEzNywgMjQ4LCAzMywgMjM5LCAxMDIsIDI0OCwgCisgICAgMzMsIDQ5LCAyMTMsIDExMiwgMjQxLCAxMzcsIDI0OCwgMzMsIDQ5LCAxMjYsIDIxNywgNTQsIDI0OCwgMzMsIDQ5LCAyMzksIAorICAgIDIzMywgMjQxLCAxMzcsIDI0OCwgMzMsIDQ5LCAxNjIsIDI0OCwgMzMsIDQ5LCAxMjYsIDI0MSwgMTM3LCAyNDgsIDMzLCA0OSwgCisgICAgMTE4LCAyMTcsIDU2LCAyNDgsIDMzLCA0OSwgMTE4LCAyNDEsIDEzOSwgMjQ4LCAzMywgNTAsIDE2MiwgMjQ4LCAzMywgMTU3LCAKKyAgICAyMTMsIDc5LCAyMjUsIDEwLCAyMTMsIDc5LCAyNDQsIDE1MCwgMjEzLCA3OSwgMjA2LCAyMjEsIDExOCwgMjQxLCAxMzksIAorICAgIDI0OCwgMzMsIDUwLCAxMTgsIDI0MSwgMTM5LCAyNDgsIDMzLCAyMTcsIDYwLCAyMjYsIDI1MSwgMjI3LCAyMjIsIDIxNywgCisgICAgNjAsIDIyNiwgMjUxLCAyMTYsIDE2LCAyMTcsIDYwLCAyMDYsIDIyMSwgMjI3LCAyMjIsIDIxNywgNjAsIDIwNiwgMjIxLCAKKyAgICA0OSwgMjUsIDIyNiwgMjUxLCA0OSwgMjUsIDIyNiwgMjUxLCAyMTYsIDE2LCAyMTcsIDYwLCAyMDYsIDIyMSwgNDksIDI1LCAKKyAgICAyMjYsIDI1MSwgMjE2LCAxNiwgMjE3LCA2MCwgMjA2LCAyMjEsIDQ5LCAyNSwgMjA2LCAyMjEsIDUwLCAyNSwgMjI2LCAyNTEsIAorICAgIDIyNywgMjIyLCAyMTcsIDYwLCAyMDYsIDIyMSwgNDksIDI1LCAyMDYsIDIyMSwgNTAsIDI1LCAyMjYsIDI1MSwgMjE2LCAxNiwgCisgICAgMjE3LCA2MCwgMjA2LCAyMjEsIDIxNiwgMTYsIDIxNywgNjAsIDIwNiwgMjIxLCA1MCwgMjUsIDIyNiwgMjUxLCAyMjcsIAorICAgIDIyMiwgMjE3LCA2MCwgMjA2LCAyMjEsIDUwLCAyNSwgMjI2LCAyNTEsIDQ5LCAyNSwgMjI2LCAyNTEsIDIxNiwgMTYsIDYyLCAKKyAgICAyMTEsIDE3NywgNjEsIDIxMSwgMTc3LCA2MSwgNTEsIDMsIDIxNSwgMTg5LCAyNDUsIDE2NCwgNjEsIDUxLCAyNDUsIDE5NSwgCisgICAgNjIsIDUsIDIxMSwgMTc3LCA1MSwgMywgMjM2LCAxMDYsIDI0MCwgOSwgNTEsIDMsIDgwLCAyNDAsIDksIDUxLCAzLCAyMTksIAorICAgIDIyOSwgMjQ1LCAxMjUsIDI0MCwgOSwgNTEsIDMsIDIwNiwgMjIxLCA0OSwgMjA4LCAxNzMsIDIyNiwgMjUxLCA1MCwgMjQwLCAKKyAgICA5LCA1MSwgMywgMjA2LCAyMjEsIDUwLCAyMDgsIDE3MywgMjI2LCAyNTEsIDQ5LCAyNDAsIDksIDUxLCAzLCAyNDMsIDIyOCwgCisgICAgMjQ1LCAxMjUsIDI0MCwgOSwgNjIsIDUsIDIxMSwgMTc3LCA2MSwgNSwgMjExLCAxNzcsIDYyLCAyMTYsIDE0MywgNjEsIAorICAgIDIxNiwgMTQzLCA2MiwgODAsIDIxNiwgMTQzLCA2MSwgODAsIDIxNiwgMTQzLCA2MiwgMjE5LCA4MCwgNjEsIDIxOSwgODAsIAorICAgIDYyLCAyMDYsIDIyMywgMjA4LCA4NSwgNjEsIDIwNiwgMjIzLCAyMDgsIDg1LCA2MiwgMjA2LCAyMjMsIDUsIDIwOCwgODUsIAorICAgIDYxLCAyMDYsIDIyMywgNSwgMjA4LCA4NSwgNjIsIDIxNiwgMTEsIDIwOCwgODUsIDYxLCAyMTYsIDExLCAyMDgsIDg1LCA2MiwgCisgICAgMjE2LCAxMSwgNSwgMjA4LCA4NSwgNjEsIDIxNiwgMTEsIDUsIDIwOCwgODUsIDYyLCAyMTYsIDExLCAyMTgsIDYwLCA2MSwgCisgICAgMjE2LCAxMSwgMjE4LCA2MCwgNjIsIDI0MiwgNjksIDIwOCwgODUsIDYxLCAyNDIsIDY5LCAyMDgsIDg1LCA2MiwgMjQyLCAKKyAgICA2OSwgNSwgMjA4LCA4NSwgNjEsIDI0MiwgNjksIDUsIDIwOCwgODUsIDYyLCAyMjcsIDIxNywgMjA4LCA4NSwgNjEsIDIyNywgCisgICAgMjE3LCAyMDgsIDg1LCA2MiwgMjI3LCAyMTcsIDUsIDIwOCwgODUsIDYxLCAyMjcsIDIxNywgNSwgMjA4LCA4NSwgNjIsIAorICAgIDIyNywgMjE3LCAyMTgsIDYwLCA2MSwgMjI3LCAyMTcsIDIxOCwgNjAsIDYyLCAyNDMsIDIyMSwgNjEsIDI0MywgMjIxLCA2MSwgCisgICAgMjQzLCAyMjIsIDI0NSwgMTk1LCA2MiwgNSwgMjQzLCAyMjEsIDIzOSwgMjQyLCAyMjYsIDI0NiwgNjEsIDI0NiwgNjEsIAorICAgIDI0MiwgODMsIDI0NiwgNjEsIDI0NiwgNjIsIDMsIDgwLCAyNDAsIDksIDI0NywgMTczLCA2MiwgMjQ2LCA2MSwgMjQ2LCA2MiwgCisgICAgMywgNDksIDE2MiwgMjQ4LCA0MywgMjQ2LCA2MiwgMywgNTAsIDE2MiwgMjQ4LCA0MywgMjQ2LCA2MiwgMywgMjI2LCAyNTEsIAorICAgIDE2MiwgMjQ4LCA0MywgMjQ2LCA2MiwgMywgMjA2LCAyMjEsIDE2MiwgMjQ4LCA0MywgMjQ2LCA2MiwgMywgMjA2LCAyMjEsIAorICAgIDUwLCAyMTcsIDYwLCAyNDgsIDQzLCAyNDYsIDYyLCAzLCAyNTEsIDE1LCAyNDcsIDE0OCwgMjA2LCAyMjEsIDQ5LCAyMTcsIAorICAgIDYwLCAyNDgsIDQzLCA0OSwgMTYyLCA2MiwgMjQ2LCA2MSwgNTAsIDE2MiwgNjIsIDI0NiwgNjEsIDIzMCwgMjQwLCAyNDcsIAorICAgIDE3NywgMjMwLCAyNDAsIDYxLCAyNDYsIDYxLCAyMDYsIDIyMSwgMTYyLCAyMzAsIDI0MCwgNjEsIDI0NiwgNjEsIDIyNiwgCisgICAgMjUxLCAxNjIsIDIzMCwgMjQwLCA2MSwgMjQ2LCA2MSwgMjA2LCAyMjEsIDQ5LCAyMTcsIDYwLCAyNDYsIDU1LCAyNTAsIAorICAgIDEyOCwgMjA2LCAyMjEsIDUwLCAyMTcsIDYwLCAyNDYsIDU1LCAyNTAsIDEyOCwgMjI2LCAyNTEsIDUwLCAyMTcsIDYwLCAKKyAgICAyNDYsIDU1LCAyNTAsIDEyOCwgMjI2LCAyNTEsIDQ5LCAyMTcsIDYwLCAyNDYsIDU1LCAyNTAsIDEyOCwgMjA2LCAyMjEsIAorICAgIDE2MiwgMjQ2LCA2MSwgMjI2LCAyNTEsIDE2MiwgMjQ2LCA2MSwgNjIsIDIyNiwgMjUxLCA1MCwgMjA4LCA4NSwgNjIsIDIyNiwgCisgICAgMjUxLCA0OSwgMjA4LCA4NSwgNjIsIDIwNiwgMjIxLCA0OSwgMjA4LCA4NSwgNjIsIDIwNiwgMjIxLCA1MCwgMjA4LCA4NSwgCisgICAgNjEsIDI0NywgMTc3LCA1MSwgMywgNDksIDE2MiwgMjQ4LCA0MywgNTEsIDMsIDUwLCAxNjIsIDI0OCwgNDMsIDUxLCAzLCAKKyAgICAyMDYsIDIyMSwgNDksIDI0MywgMjI4LCAxNjIsIDI0OCwgNDMsIDUxLCAzLCAyMjYsIDI1MSwgNTAsIDI0MywgMjI4LCAxNjIsIAorICAgIDI0OCwgNDMsIDYxLCA1MSwgMywgODAsIDI0OCwgNTUsIDIyNywgMTE0LCA2MSwgMjA2LCAyMjMsIDIwOCwgODYsIDMsIDI0MywgCisgICAgODUsIDIwNiwgMjIzLCAyMDgsIDg2LCAzLCA0OSwgMTYyLCAyNDgsIDQzLCAyMDYsIDIyMywgMjA4LCA4NiwgMywgNTAsIAorICAgIDE2MiwgMjQ4LCA0MywgMjI4LCA4LCAyNDYsIDYxLCA2MSwgNTEsIDMsIDIwNiwgMjIxLCA0OSwgMjE3LCA1OSwgNjEsIDUxLCAKKyAgICAzLCAyMjYsIDI1MSwgNDksIDIxNywgNTksIDYxLCA1MSwgMywgMjI2LCAyNTEsIDUwLCAyMTcsIDU5LCA2MSwgNTEsIDMsIAorICAgIDIwNiwgMjIxLCA1MCwgMjE3LCA1OSwgNjEsIDI0NiwgNjIsIDMsIDIwNiwgMjIxLCA0OSwgMjE3LCA1OSwgNjEsIDI0NiwgCisgICAgNjIsIDMsIDIyNiwgMjUxLCA0OSwgMjE3LCA1OSwgNjEsIDI0NiwgNjIsIDMsIDIyNiwgMjUxLCA1MCwgMjE3LCA1OSwgNjEsIAorICAgIDI0NiwgNjIsIDMsIDIwNiwgMjIxLCA1MCwgMjE3LCA1OSwgMjA2LCAyMjEsIDQ5LCAyMDgsIDg1LCAyMDYsIDIyMSwgNTAsIAorICAgIDIwOCwgODUsIDIyNiwgMjUxLCA0OSwgMjA4LCA4NSwgNjEsIDIyNSwgMTAsIDIxMSwgMTc3LCA2MiwgMjI1LCAxMCwgMjExLCAKKyAgICAxNzcsIDYxLCAyMjUsIDEwLCA1LCAyMTEsIDE3NywgNjIsIDIyNSwgMTAsIDUsIDIxMSwgMTc3LCAyMjYsIDI1MSwgNTAsIAorICAgIDIwOCwgODUsIDYyLCAyMTAsIDIxNSwgMywgMjE2LCAxNjIsIDI0NiwgNywgMjA3LCAzLCAyMTIsIDE1LCAyNDUsIDIzNiwgCisgICAgNjIsIDIxMSwgOTQsIDYxLCAyMTEsIDk0LCAyMjcsIDEzMSwgMjA5LCAxNywgMjEwLCAyMTQsIDI1MCwgNzgsIDIyMSwgMTg4LCAKKyAgICAyNDQsIDE5LCAyMjEsIDE4OCwgMjQ1LCAyMDQsIDIxOSwgMjUwLCA2MiwgMjA5LCAxNjEsIDYxLCAyMDksIDE2MSwgMjQ4LCAKKyAgICAyNDgsIDI0NywgMjMzLCAyNDgsIDI0OCwgOTgsIDMsIDI0NiwgMTY4LCAyNDgsIDI0OCwgOTgsIDMsIDIwMywgMTk2LCAyMTQsIAorICAgIDI1NCwgMjA3LCA0LCAzLCAyMTYsIDE5MSwgMjQyLCA0OCwgMjM2LCA0NywgMjQ4LCAxMDIsIDYxLCAyMTIsIDIzNywgMjE4LCAKKyAgICAxNTksIDYyLCAyMTIsIDIzNywgMjE4LCAxNTksIDIxMywgNjgsIDIxNiwgNzMsIDIxNSwgMTk4LCAyMzksIDIwMSwgMjM3LCAKKyAgICA1NiwgMjQ3LCAxNzcsIDYyLCA0OSwgMjE4LCA1OSwgMjMxLCAzNSwgNjIsIDUwLCAyMTgsIDU5LCAyMzEsIDM1LCA2MSwgNDksIAorICAgIDIxOCwgNTksIDIzMSwgMzUsIDYxLCAxMTIsIDIxOCwgNTksIDIzMSwgMzUsIDYxLCA1MCwgMjE4LCA1OSwgMjMxLCAzNSwgCisgICAgNjEsIDEyMSwgMjE4LCA1OSwgMjMxLCAzNSwgMjEyLCA2MywgMjUsIDI0NSwgMTI5LCAyNDcsIDExLCA1NCwgMjE2LCAyMDMsIAorICAgIDU0LCAyNDgsIDYyLCA1NCwgMjQ3LCA4MywgMjUwLCAyMDgsIDIxOSwgMjMwLCAyNDUsIDEzMCwgMjQ2LCAxNDMsIDIxNiwgCisgICAgNTksIDI0NSwgMTMxLCA3NiwgMjI3LCA5LCAyNDUsIDEzMSwgNzYsIDIzMCwgMTUxLCAyMTEsIDk1LCAyNSwgMjQ1LCAxMzgsIAorICAgIDI0MCwgNzUsIDk3LCAyNTEsIDExNSwgMjEzLCA3MCwgMjM3LCAxMzEsIDI1LCAyMTIsIDE1OSwgMjE5LCAzMywgOTcsIDIwMywgCisgICAgMSwgMjAzLCA3NiwgMjA4LCA3NSwgMzUsIDIzNywgNTEsIDIwOCwgNzUsIDM1LCAyMjgsIDMzLCAyMDgsIDc1LCAzNSwgMjM5LCAKKyAgICAyNDksIDIwOCwgNzUsIDM1LCAyMDksIDE4LCAyMDgsIDc1LCAzNSwgMjA0LCAxNiwgMjA4LCA3NSwgMzUsIDIwNCwgODAsIAorICAgIDIwOCwgNzUsIDM1LCAyMjQsIDEyLCAyMDgsIDc1LCAzNSwgMjQxLCAxNzksIDIwNCwgMzcsIDc2LCAyNDMsIDI0OSwgNjEsIAorICAgIDIzOSwgMTE0LCAyNDAsIDEwMiwgNjEsIDIxMiwgMzAsIDI0MCwgMTAyLCA2MiwgMjEyLCAzMCwgMjQwLCAxMDIsIDYxLCAKKyAgICAyMTAsIDIxNSwgMywgMjE2LCAxNjIsIDIzOSwgMjQ1LCAyMTcsIDU2LCAyMjQsIDI5LCAyMjgsIDEsIDIxNywgNTYsIDIyNCwgCisgICAgMjksIDIyNCwgMjM0LCAyNDAsIDQzLCA1NCwgMjQxLCAxNzksIDIyNSwgMTI3LCA1NCwgMjMwLCA2OSwgMjE0LCAyMTgsIAorICAgIDIwNiwgMjA1LCAyMjIsIDIyNCwgMjE4LCA3MywgMjUwLCAxMTQsIDIwOSwgMjA1LCAyMzgsIDE3OCwgMjQ3LCA1NywgMjI3LCAKKyAgICAxODQsIDIwNSwgMjAyLCAyMjcsIDE0NSwgMjE0LCAxODcsIDIxNSwgMjAsIDI0NywgNDMsIDI1MCwgMTQ1LCAyMTgsIDEwOCwgCisgICAgNjEsIDI0NiwgMTUwLCAyMjksIDgxLCA2MSwgMjQ2LCAxNTAsIDIxNywgNDgsIDYxLCAyNDYsIDE1MCwgMjE1LCAyMDYsIDYxLCAKKyAgICAyNDYsIDE1MCwgMjQ4LCA1NCwgNjEsIDI0NiwgMTUwLCAyMjksIDMxLCA2MSwgMjQ2LCAxNTAsIDIxOSwgNDUsIDYyLCAyNDYsIAorICAgIDE1MCwgMjI5LCA4MSwgNjIsIDI0NiwgMTUwLCAyMTcsIDQ4LCA2MiwgMjQ2LCAxNTAsIDIxNSwgMjA2LCA2MiwgMjQ2LCAKKyAgICAxNTAsIDI0OCwgNTQsIDYyLCAyNDYsIDE1MCwgMjI5LCAzMSwgNjIsIDI0NiwgMTUwLCAyMTksIDQ1LCA2MiwgMjExLCAyMjYsIAorICAgIDIxMCwgMjI3LCA2MSwgMjM3LCA1NiwgMjEwLCAyMjcsIDYxLCAyNDMsIDIyMiwgMjEwLCAyMjcsIDYyLCAyNDYsIDUsIDIxMCwgCisgICAgMjI3LCA2MSwgMjExLCAyMjYsIDIxMCwgMjI3LCA2MiwgMjM3LCA1NiwgMjEwLCAyMjcsIDYyLCAyNDMsIDIyMiwgMjEwLCAKKyAgICAyMjcsIDYxLCAyNDYsIDUsIDIxMCwgMjI3LCAyMzYsIDQ3LCAyMTEsIDE4MiwgMjE3LCA1NiwgMjIxLCAxNjAsIDI0MSwgCisgICAgMTM5LCAyMjEsIDE2MCwgMjQ4LCAxNTgsIDI0MSwgMTM5LCAyMjEsIDE1NSwgMjQ4LCAxNTgsIDIxMiwgODEsIDIyMSwgMTU1LCAKKyAgICAyMjMsIDE5NSwgMjM5LCAyMTcsIDU0LCAyMjMsIDE5NSwgMjIzLCA2NiwgNTQsIDIyMywgMTk1LCAyMTMsIDU3LCA1NCwgCisgICAgMjA0LCA0NiwgMjEwLCA4OSwgMjQ1LCAxMzAsIDI0MSwgMTc2LCAyMTAsIDg5LCAyNDUsIDEzMCwgMjA2LCAyMzMsIDIxNiwgCisgICAgMTM5LCA5NywgMjE2LCAxMzksIDE2LCAzNSwgMjA3LCAxMjAsIDIxOCwgOTAsIDIxNiwgMTM5LCAxNiwgMzUsIDIwNywgMTE4LCAKKyAgICAyMTgsIDkwLCAyMTYsIDEzOSwgMTYsIDM1LCAyMDcsIDExNywgMjE4LCA5MCwgMjE2LCAxMzksIDE2LCAzNSwgMjA3LCAxMTUsIAorICAgIDIxOCwgOTAsIDIxNiwgMTM5LCAxNiwgMzUsIDIwNywgMTEzLCAyMTgsIDkwLCAyMTYsIDEzOSwgMTYsIDM1LCAyMDcsIDExMSwgCisgICAgMjE4LCA5MCwgMjE2LCAxMzksIDE2LCAzNSwgMjA3LCAxMDksIDIxOCwgOTAsIDIxNiwgMTM5LCAxNiwgMzUsIDIzOCwgMTc2LCAKKyAgICAyMjUsIDcwLCA2MiwgMjA2LCAyMzMsIDIxNiwgMTM5LCA5NywgMjE2LCAxNDAsIDIxOSwgOTUsIDk3LCAyMTksIDY4LCAyMTksIAorICAgIDk1LCA5NywgMjE4LCAyMzgsIDIxOSwgOTUsIDU0LCAyMDQsIDM1LCA5NywgMjQzLCAyMTQsIDI0MCwgMTAxLCAyNDMsIDIxNCwgCisgICAgMjQwLCAxMDAsIDI0MywgMjE0LCAyNDAsIDk5LCAyNDMsIDIxNCwgMjQwLCA5OCwgMjQzLCAyMTQsIDI0MCwgOTcsIDI0MywgCisgICAgMjE0LCAyNDAsIDk2LCA2MSwgMjQ2LCA2MiwgMywgNzAsIDIxNiwgMTYsIDYxLCAyNDYsIDYyLCAzLCAxMjAsIDI0MywgODMsIAorICAgIDYyLCAyNDYsIDYyLCAzLCA2MSwgNzAsIDIxNiwgMTYsIDYyLCAyNDYsIDYyLCAzLCAxMjAsIDYxLCAyNDMsIDgzLCAyMjQsIAorICAgIDQ1LCAzNSwgMjAzLCA3NiwgMjI0LCA0NSwgMzUsIDIwMywgMCwgMjQzLCAxOTUsIDM1LCAyMzcsIDI0OCwgMjAzLCA3NiwgCisgICAgMjQzLCAxOTUsIDM1LCAyMjcsIDE3NywgMjAzLCAwLCAyNDMsIDE5NSwgMzUsIDIyNywgMTc3LCAyMDMsIDc2LCAyNDMsIAorICAgIDE5NSwgMzUsIDIzNywgMjQ4LCAyMDMsIDAsIDYxLCAyMzksIDIyNSwgNjIsIDIzOSwgMjI1LCAyMzcsIDEzMSwgMjUsIDIxOCwgCisgICAgMTYzLCAyNTAsIDIyOCwgMjQ1LCAxMjgsIDIxMCwgMTU0LCAyMTEsIDEwMywgNzYsIDI1MSwgOTIsIDIxNCwgMjAzLCAyNTEsIAorICAgIDI5LCAyMzksIDE5NywgMjM4LCAxODcsIDIxMSwgMTAzLCA3NiwgMjM3LCAyNiwgMjUwLCA0MiwgOTcsIDIzOSwgMjEzLCAKKyAgICAyMTksIDIwNywgNjEsIDIxMSwgOTQsIDEyNiwgMjI3LCAxMDksIDI0NSwgMTgxLCAyMTYsIDE2LCAxMjYsIDIyNywgMTA5LCAKKyAgICAyNDUsIDE4MSwgMjI3LCAyMjIsIDIwNCwgOTEsIDU0LCAxMzgsIDIwNSwgMTc5LCA1NCwgMjQyLCA3NSwgMjQwLCA0MywgNTQsIAorICAgIDI0MiwgNzUsIDIyNSwgMTI3LCA1NCwgMjMwLCAyNTAsIDI0MCwgNDMsIDI1LCAyMjUsIDEyNywgNTQsIDIyNSwgMTI3LCAyNSwgCisgICAgMjQwLCA0MywgNTQsIDIyNSwgMTI3LCAzLCAyMTEsIDMyLCA1NCwgMjI1LCAxMjcsIDMsIDIxMSwgMzIsIDI1LCAyMjUsIAorICAgIDEyNywgMjUsIDI0MCwgNDMsIDU0LCA4MCwgMjI1LCAxMjcsIDMsIDIxMSwgMzIsIDU0LCAyMzYsIDEwNiwgMjI1LCAxMjcsIAorICAgIDMsIDIxMSwgMzIsIDU0LCAyMjUsIDEwLCA2MSwgMjQ2LCA2MSwgMjI1LCAxMCwgNjIsIDI0NiwgNjEsIDIyNSwgMTAsIDUsIAorICAgIDYxLCAyNDYsIDYxLCAyMjUsIDg2LCA5NywgMjQzLCAxMzUsIDk3LCAyMDYsIDIzMCwgMjE5LCA2NywgOTcsIDI0NSwgMjQ3LCAKKyAgICAyMzksIDk3LCAyMDYsIDIwMSwgMjIyLCAyMTcsIDI0NiwgMjAzLCAyMTksIDEzNywgMjMwLCA3NSwgMjA1LCAyNDAsIDI0NiwgCisgICAgMTIzLCA2MiwgMjI0LCAzMCwgMjI3LCAxMjgsIDIxMywgMTAxLCAyMTMsIDE0MCwgMjE3LCAzOCwgMjEzLCAxMjAsIDIxMiwgCisgICAgMTAsIDI0OCwgMjUxLCAyNDgsIDIxNywgMTAzLCAyMjksIDE1MSwgNjEsIDI0MiwgNTgsIDIyNSwgMTIyLCA2MSwgMjQyLCAKKyAgICA1OCwgMjI5LCA4MSwgNjIsIDI0MiwgNTgsIDIyNSwgMTIyLCA2MiwgMjQyLCA1OCwgMjI5LCA4MSwgMjEyLCAxNiwgMjA0LCAKKyAgICAzLCAyMTIsIDE5LCAyMTAsIDIxNSwgMjQ4LCAxMzUsIDI0NiwgNywgMjE2LCAxOTAsIDYyLCAyMTIsIDE1LCAyMDksIDE5LCAKKyAgICAyNDYsIDgsIDI1LCAyMTYsIDE5MCwgMjA3LCAxNzQsIDYxLCAyMTIsIDIzNywgMjE4LCAxNTksIDIwNywgMTc0LCA2MiwgCisgICAgMjEyLCAyMzcsIDIxOCwgMTU5LCA2MSwgMjQzLCAyMjIsIDIzMSwgNTAsIDIxMSwgMTc3LCAyNDUsIDEyNCwgMjI4LCAxNSwgCisgICAgMjQzLCAxNjIsIDI0NywgMzksIDIxOSwgMjUzLCAyMTgsIDE2MywgMjQ3LCA0MCwgMjEyLCA0OCwgMjM3LCAzNiwgMywgNjEsIAorICAgIDI0NSwgMTMwLCA0MywgMjQ1LCAxMjQsIDIyOCwgMTUsIDI0NiwgMTk1LCAyMjEsIDE5MiwgMjQxLCA2MiwgMjUwLCAyNTUsIAorICAgIDIyMCwgMjYsIDQ5LCAyMDQsIDY2LCAyMDgsIDExMywgNjIsIDIwNywgMTMxLCA0OSwgMjA0LCA2NiwgMjA4LCAxMTMsIDYxLCAKKyAgICAyMDcsIDEzMSwgNDksIDIwNCwgNjYsIDIwOCwgMTEzLCA2MiwgNDksIDIyOCwgMTYsIDIyNCwgMjMzLCA2MSwgNDksIDIyOCwgCisgICAgMTYsIDIyNCwgMjMzLCAyNDIsIDUzLCAyMTIsIDQwLCA1NCwgNzksIDYxLCAyNDIsIDY5LCAyMDgsIDg1LCA0OSwgMjQ2LCAKKyAgICAxNiwgMjQxLCA2MiwgMTAzLCAyMTQsIDI1NCwgMjQwLCA4NCwgMjQzLCAyMjgsIDIzMSwgNTAsIDYxLCAyNDYsIDYyLCAyMzEsIAorICAgIDUwLCA2MiwgMjExLCAxNzcsIDYyLCAyMDgsIDUwLCAyMTYsIDg0LCA0OSwgMjQxLCA2MSwgMjE2LCA4NCwgNDksIDI0MSwgCisgICAgNjAsIDI1MCwgNTQsIDE2LCAzNSwgMjA2LCAyMDUsIDc5LCAyNDYsIDYyLCAzLCAyMTEsIDMyLCAyNSwgMTIwLCAxODcsIDU1LCAKKyAgICAyMTgsIDI1NCwgMjE2LCAxMywgMjMwLCAyNTIsIDIxOCwgMjU0LCAyMjcsIDIxOSwgMjMwLCAyNTIsIDIxOCwgMjU0LCAyMzAsIAorICAgIDIzOSwgMjE4LCAyNTQsIDYyLCAyNDUsIDEzMSwgMjIwLCAzMiwgMjEzLCA4LCAyMTIsIDI1MiwgMjEyLCAyMDMsIDI0NiwgCisgICAgOTAsIDI0NywgMTksIDIzNiwgMjMxLCAyMTIsIDg5LCAyMzgsIDE4OCwgMjA0LCAzLCAyMzYsIDIzLCAyMzgsIDE4OCwgMywgCisgICAgMjM3LCAxMDEsIDIyNSwgMTA3LCAxNiwgMzUsIDIyNywgMTMzLCAyMjQsIDEyLCAyMDcsIDQsIDIyMCwgMzIsIDIzNywgMjM5LCAKKyAgICAyMzksIDE0OCwgMjM5LCAyMjYsIDIzMSwgNTAsIDIzNiwgMTI2LCAyNDAsIDM0LCAyMTUsIDE1LCA1MSwgMjM5LCAxNDcsIAorICAgIDI0NSwgMTY0LCAyMTIsIDY2LCAyMzUsIDE2MywgMjEyLCA2OSwgMjE4LCAyMzAsIDMsIDI0OCwgMjUxLCAyMDksIDE0NCwgCisgICAgMjMwLCAxNjksIDI0OCwgMjM2LCA5NywgMjM3LCA1OSwgMjM3LCAyNTAsIDk3LCAyMzksIDEwNSwgMjE3LCAxODAsIDI0NSwgCisgICAgMTAwLCAyMjAsIDMyLCA2MiwgMjExLCAxNzcsIDYxLCAyMzksIDIyNiwgMywgMjM2LCAxMDYsIDEwMSwgNjIsIDIxMSwgMzMsIAorICAgIDYyLCAyMTUsIDI1LCAyMTQsIDE5MCwgMjA2LCAyMjEsIDI0OCwgMzgsIDIxNCwgMTkwLCA2MiwgMjE0LCAxOTAsIDIyNiwgCisgICAgMjUxLCAyNDgsIDM4LCAyMTQsIDE5MCwgNjEsIDIxNCwgMTkwLCA2MSwgNzksIDI0NiwgMTY5LCA4MiwgMjA5LCAxNjIsIAorICAgIDIyNywgNDcsIDU0LCAyMDksIDIyMSwgMjQyLCA1MiwgMjUxLCA1MiwgMjQxLCA1NywgMjE2LCAxODgsIDIzOSwgMjM4LCAKKyAgICAyMTYsIDE4OCwgMjM3LCAxMjMsIDIwNSwgMjI4LCAyMzcsIDEyMywgMjAzLCAyMjAsIDIzNywgMTIzLCAyMjYsIDI1MSwgNTAsIAorICAgIDIxOSwgOCwgMjE5LCA4LCAyMDYsIDIyMSwgNTAsIDIxOSwgOCwgNjEsIDIyMiwgOTcsIDYyLCAyMjIsIDk3LCAyNDYsIDE2OSwgCisgICAgODIsIDc5LCAyNDYsIDE2OSwgODIsIDIyMywgMjI0LCAyMDMsIDE5NiwgNzksIDIyMywgMjI0LCAyMDMsIDE5NiwgMjQ4LCAKKyAgICAyNDgsIDIwMywgMTk2LCA3OSwgMjQ4LCAyNDgsIDIwMywgMTk2LCAyMTksIDIwNywgMzAsIDI0NSwgMTMwLCA3OSwgMzAsIAorICAgIDI0NSwgMTMwLCAxNzEsIDI0NiwgMjE4LCAyNDUsIDEzMCwgNzksIDE3MSwgMjQ2LCAyMTgsIDI0NSwgMTMwLCA4LCAyNDUsIAorICAgIDEzMCwgMjEzLCA3NywgNjEsIDgsIDI0NSwgMTMwLCAyMTksIDIwNywgOCwgMjQ1LCAxMzAsIDIyNSwgMTI0LCAyNDUsIDEzMCwgCisgICAgMjExLCA5NSwgNzYsIDI0NCwgMTM3LCAyMzksIDE0NywgMjA5LCAxODAsIDI1MCwgNTksIDIzOSwgMTQ3LCAyNDgsIDI0OSwgCisgICAgMjUwLCA1OSwgNzksIDIzOSwgMTQ3LCAyNDgsIDI0OSwgMjUwLCA1OSwgMjM5LCAxNDcsIDI0NiwgMywgMjUwLCA1OSwgNjIsIAorICAgIDIzOSwgMTQ3LCAyMTgsIDYxLCAyMTEsIDk0LCA2MSwgMjM5LCAxNDcsIDIxOCwgNjEsIDIxMSwgOTQsIDIxMSwgMjIxLCAKKyAgICAyMTEsIDQyLCAyMTksIDIwNywgNjEsIDIxMSwgOTQsIDQzLCA2MSwgMjExLCA5NCwgMTcxLCAyNDYsIDIxOCwgNjIsIDIxMSwgCisgICAgOTQsIDYyLCAyNDYsIDIxOCwgNjEsIDIxMSwgOTQsIDIxOSwgMjA3LCA2MiwgMjExLCA5NCwgNzksIDIxOSwgMjA3LCA2MiwgCisgICAgMjExLCA5NCwgMjE4LCAxMTgsIDIxMSwgOTQsIDIxMywgNzcsIDYxLCAyMTEsIDk0LCA3OSwgMjUwLCA1OSwgMTcxLCAyNDYsIAorICAgIDIxOCwgMjUwLCA1OSwgMjQxLCAxNDMsIDIxMSwgMTkxLCAyNTAsIDU5LCAyNDEsIDE0MywgMjE4LCA2MSwgNjIsIDIxMSwgCisgICAgOTQsIDI0MSwgMTQzLCAyMTgsIDYxLCAyMTgsIDExOCwgMjExLCA5NCwgMjEyLCA4OCwgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIAorICAgIDI0MSwgMTQzLCAyMTgsIDYxLCAyMTYsIDE0MSwgNjIsIDIxMSwgOTQsIDc5LCAyNDEsIDE0MywgMjE4LCA2MSwgMjE2LCAKKyAgICAxNDEsIDYyLCAyMTEsIDk0LCAyMDcsIDE1NSwgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDIxMiwgODMsIDIxOCwgNjEsIDI1MCwgCisgICAgNTksIDIwOSwgMTgwLCAyNTAsIDU5LCAxNzEsIDI0NiwgMjE4LCAyMDksIDE4MCwgMjUwLCA1OSwgNzksIDIwOSwgMTgwLCAKKyAgICAyNTAsIDU5LCAyMTIsIDg4LCAyMTgsIDIxOCwgNjIsIDI1LCA2MSwgMjM5LCAyMDAsIDYyLCAyMzksIDIwMCwgNjEsIDIzOSwgCisgICAgMjAwLCAyNDEsIDE0MywgMjE4LCAyMTgsIDIxOSwgMjA3LCA2MiwgMjM5LCAyMDAsIDQzLCAxNzEsIDI0NiwgMjE4LCAyNDEsIAorICAgIDE0MywgMjE4LCA2MSwgMjExLCA5NCwgNzksIDIwOSwgMTgwLCAyMTgsIDExOCwgMjUwLCA1OSwgMjEyLCAxNywgMjA4LCAKKyAgICAyNDQsIDIwOCwgNzgsIDIxMiwgMTcsIDc5LCAyNDYsIDE0NiwgMjEyLCAxNywgMjExLCAyMjMsIDc5LCAyMTEsIDIyMywgCisgICAgMjQ4LCAyNDksIDI1MCwgNTksIDI0MSwgMTQzLCAyMDksIDE4MCwgMjE3LCAyMTMsIDI1MCwgNTksIDc5LCAyNDEsIDE0MywgCisgICAgMjA5LCAxODAsIDIxNywgMjEzLCAyNTAsIDU5LCAyNDUsIDEzMSwgODIsIDIxMywgNzcsIDYxLCAyNDYsIDYxLCAxODIsIAorICAgIDEwMywgMjQ1LCAxMzEsIDgyLCAyMjYsIDI1MSwgNTAsIDI0MiwgNTAsIDYxLCAyMTEsIDE3NywgMjA2LCAyMjEsIDUwLCAKKyAgICAyNDIsIDUwLCA2MSwgMjExLCAxNzcsIDIyNiwgMjUxLCA1MCwgMjEzLCA3NywgNjEsIDIxMSwgMTc3LCAyMDYsIDIyMSwgNTAsIAorICAgIDIxMywgNzcsIDYxLCAyMTEsIDE3NywgNjIsIDIxNywgNDcsIDEzMSwgMjE5LCAyMzMsIDYxLCAyMTcsIDQ3LCAxMzEsIDIxOSwgCisgICAgMjMzLCA2MSwgMjQwLCAyMTIsIDEzMSwgMjE5LCAyMzMsIDYyLCAyNDMsIDIyMiwgMjI0LCAxMDMsIDYxLCAyMDMsIDE5NiwgCisgICAgNzksIDI0MCwgMjEyLCAxMzEsIDk3LCAxNTcsIDgwLCAxNDIsIDIyNSwgMTAsIDgwLCAxNDIsIDc5LCA4MCwgMTQyLCA3OSwgCisgICAgMjEyLCAxMjAsIDIwNywgMTc0LCAyNDUsIDIzNCwgMjE3LCAzMSwgMTMxLCAyMTksIDIzMywgNzksIDIxMiwgMTIwLCAyNDUsIAorICAgIDIzNCwgMjE3LCAzMSwgMTMxLCAyMTksIDIzMywgNzksIDUyLCAyMDcsIDE3NCwgMjQ1LCAyMzQsIDIxNywgMzEsIDEzMSwgCisgICAgMjE5LCAyMzMsIDc5LCA1MiwgMjQ1LCAyMzQsIDIxNywgMzEsIDEzMSwgMjE5LCAyMzMsIDc5LCAxMjQsIDIxMiwgMTIwLCAKKyAgICAyNDUsIDIzNCwgMjE3LCAzMSwgMTMxLCAyMTksIDIzMywgNzksIDEyNCwgNTIsIDI0NSwgMjM0LCAyMTcsIDMxLCAxMzEsIAorICAgIDIxOSwgMjMzLCAyNDUsIDg2LCAyMTEsIDc4LCAyMTksIDg5LCAyLCAyMTksIDIzMywgNzksIDI0MCwgMjEyLCAxMzEsIDIxOSwgCisgICAgMjMzLCA3OSwgMjM3LCA1NiwgMjQwLCAyMTIsIDEzMSwgMjE5LCAyMzMsIDc5LCA2MiwgMjM3LCA1NSwgMjE1LCAxOTgsIDc5LCAKKyAgICA2MiwgMjM3LCA1NiwgMjQ3LCAxNzcsIDIzOSwgMjAxLCAyMzcsIDU1LCAyMTUsIDE5OCwgMjM5LCAyMDEsIDIzNywgNTYsIAorICAgIDI0NywgMTc3LCAyMjUsIDEwLCA0OSwgMjE5LCA3NywgMjE5LCAyMzMsIDIyNSwgMTAsIDUwLCAyMTksIDc3LCAyMTksIDIzMywgCisgICAgMjI1LCAxMCwgMjM5LCAyMTQsIDQ5LCAyMTksIDc3LCAyMTksIDIzMywgMjI1LCAxMCwgMjM5LCAyMTQsIDUwLCAyMTksIDc3LCAKKyAgICAyMTksIDIzMywgMjI1LCAxMCwgMjI3LCAyMTcsIDI1MCwgMjE4LCAyNDcsIDIyNywgMjE5LCAyMzMsIDIyNSwgMTAsIDIxNiwgCisgICAgMTEsIDI1MCwgMjE4LCAyNDcsIDIyNywgMjE5LCAyMzMsIDc5LCAyMjcsIDIxNywgMjUwLCAyMTgsIDIxNywgMzEsIDEzMSwgCisgICAgMjE5LCAyMzMsIDc5LCAyMTYsIDExLCAyNTAsIDIxOCwgMjE3LCAzMSwgMTMxLCAyMTksIDIzMywgNzksIDIyNywgMjE3LCAKKyAgICAyNTAsIDIxOCwgMjQ3LCAyMjcsIDIxOSwgMjMzLCA3OSwgMjE2LCAxMSwgMjUwLCAyMTgsIDI0NywgMjI3LCAyMTksIDIzMywgCisgICAgMTU3LCA0OSwgMjA4LCAxMzMsIDIxMywgMzMsIDI0NywgMjI3LCAyMTksIDIzMywgMTU3LCA1MCwgMjA4LCAxMzMsIDIxMywgCisgICAgMzMsIDI0NywgMjI3LCAyMTksIDIzMywgMjI1LCAxMCwgNDksIDI0NSwgOTMsIDI0NywgMjI3LCAyMTksIDIzMywgMjI1LCAKKyAgICAxMCwgNTAsIDI0NSwgOTMsIDI0NywgMjI3LCAyMTksIDIzMywgMjQzLCAxNzQsIDE4MiwgNDMsIDE3LCAxMDUsIDI0MywgCisgICAgMTc0LCAxODIsIDQzLCAxNywgMTA4LCAyNDMsIDE3NCwgMTgyLCA0MywgMTcsIDE0NywgMjQzLCAxNzQsIDE4MiwgNDMsIDE3LCAKKyAgICAxNDksIDI0MywgMTc0LCAxODIsIDQzLCAxNywgMTcwLCAyNDMsIDE3NCwgMTgyLCA0MywgMTcsIDE5NSwgMjQzLCAxNzQsIAorICAgIDE4MiwgNDMsIDE3LCAyMTMsIDExMSwgMjQzLCAxNzQsIDE4MiwgNDMsIDE3LCAxOTksIDI0MywgMTc0LCAxODIsIDQzLCAxNywgCisgICAgMjIyLCA2MywgMjQzLCAxNzQsIDE4MiwgNDMsIDQyLCAyMDksIDE1MiwgMjQzLCAxNzQsIDQzLCA0MSwgMTcsIDEwNSwgMjQzLCAKKyAgICAxNzQsIDQzLCA0MSwgMTcsIDEwOCwgMjQzLCAxNzQsIDQzLCA0MSwgMTcsIDE0NywgMjQzLCAxNzQsIDQzLCA0MSwgMTcsIAorICAgIDE0OSwgMjQzLCAxNzQsIDQzLCA0MSwgMTcsIDE3MCwgMjQzLCAxNzQsIDQzLCA0MSwgMTcsIDE5NSwgMjQzLCAxNzQsIDQzLCAKKyAgICA0MSwgMTcsIDIxMywgMTExLCAyNDMsIDE3NCwgNDMsIDQxLCAxNywgMTk5LCAyNDMsIDE3NCwgNDMsIDQxLCAxNywgMjIyLCAKKyAgICA2MywgMjQzLCAxNzQsIDQzLCA0MSwgNDIsIDIwOSwgMTUyLCAyNDMsIDE3NCwgMTgyLCA0MywgNDEsIDE3LCAxMDUsIDI0MywgCisgICAgMTc0LCAxODIsIDQzLCA0MSwgMTcsIDEwOCwgMjQzLCAxNzQsIDE4MiwgNDMsIDQxLCAxNywgMTQ3LCAyNDMsIDE3NCwgMTgyLCAKKyAgICA0MywgNDEsIDE3LCAxNDksIDI0MywgMTc0LCAxODIsIDQzLCA0MSwgMTcsIDE3MCwgMjQzLCAxNzQsIDE4MiwgNDMsIDQxLCAKKyAgICAxNywgMTk1LCAyNDMsIDE3NCwgMTgyLCA0MywgNDEsIDE3LCAyMTMsIDExMSwgMjQzLCAxNzQsIDE4MiwgNDMsIDQxLCAxNywgCisgICAgMTk5LCAyNDMsIDE3NCwgMTgyLCA0MywgNDEsIDE3LCAyMjIsIDYzLCAyNDMsIDE3NCwgMTgyLCA0MywgNDEsIDQyLCAyMDksIAorICAgIDE1MiwgNzksIDIwNCwgMjYsIDg2LCA0NywgNzksIDkxLCA1NCwgNzksIDIyNCwgMTAzLCA1NCwgNzksIDI0MywgMTM3LCA1NCwgCisgICAgNzksIDIxMSwgMjM4LCAyNDEsIDE3NiwgNDcsIDc5LCA4NiwgNDcsIDc5LCAxNTMsIDI0MSwgMTc2LCA0NywgMjQyLCA2MywgCisgICAgMjE4LCA2MywgODYsIDQ3LCA3OSwgMjE1LCAxOTAsIDg2LCA0NywgMjA4LCA4NCwgODYsIDQ3LCA3OSwgMjA4LCA4NCwgODYsIAorICAgIDQ3LCAyNDQsIDE0MywgMjA4LCA4NCwgODYsIDQ3LCA3OSwgMjQ0LCAxNDMsIDIwOCwgODQsIDg2LCA0NywgNjIsIDg2LCA0NywgCisgICAgMjA5LCAzMSwgMjA4LCAxNDMsIDg2LCAyNTAsIDk0LCAyMDksIDMxLCAyNDcsIDI0NiwgODYsIDI1MCwgOTQsIDYyLCA4NiwgCisgICAgMjUwLCA5NCwgNzksIDYyLCAyNDUsIDg2LCAxODMsIDI1LCA4NiwgNDcsIDc5LCA2MiwgMjQ1LCA4NiwgMTc3LCAyNSwgODYsIAorICAgIDQ3LCAyMTEsIDE3NCwgNjIsIDg2LCA0NywgNzksIDI0NSwgMjE3LCA2MiwgODYsIDQ3LCAyMTYsIDEwLCA2MSwgODYsIDQ3LCAKKyAgICAyMjcsIDIxNiwgNjEsIDg2LCA0NywgMjQ5LCAyNCwgMjEzLCA3NywgNjEsIDg2LCA0NywgMjM5LCAxMTcsIDIxMywgNzcsIAorICAgIDYxLCA4NiwgNDcsIDc5LCAyMjYsIDI1MSwgMjE2LCA5LCA2MSwgODYsIDQ3LCA3OSwgMjA2LCAyMjEsIDIxNiwgOSwgNjEsIAorICAgIDg2LCA0NywgMjIxLCAxNjIsIDIyNiwgMjUxLCAyMTYsIDksIDYxLCA4NiwgNDcsIDI0NSwgOTMsIDIyNywgMTQsIDIyMSwgCisgICAgMTYyLCAyMDYsIDIyMSwgMjE2LCA5LCA2MSwgODYsIDQ3LCA0MywgNzksIDYxLCA4NiwgNDcsIDIwNCwgMzIsIDg2LCA0NywgCisgICAgMjQ4LCA0MiwgMjExLCAyMzgsIDI0MSwgMTc2LCA0NywgMjQ4LCA0MiwgODYsIDQ3LCAyNDgsIDQyLCAxNTMsIDI0MSwgMTc2LCAKKyAgICA0NywgNzksIDI0OCwgNDIsIDIxMSwgMjM4LCAyNDEsIDE3NiwgNDcsIDc5LCAyNDgsIDQyLCA4NiwgNDcsIDc5LCAyNDgsIAorICAgIDQyLCAxNTMsIDI0MSwgMTc2LCA0NywgMjA5LCAxODIsIDg2LCA0NywgNzksIDIwOSwgMTgxLCA4NiwgNDcsIDIwNCwgNTYsIAorICAgIDg2LCA0NywgNzksIDIwNCwgNTYsIDg2LCA0NywgMjIwLCAzLCA4NiwgNDcsIDUyLCAyNDUsIDkzLCAyMjcsIDE0LCAxMjYsIAorICAgIDI0MywgMTg0LCAyNTAsIDIxNywgNjEsIDIwOCwgODYsIDI0NSwgMTk1LCA1LCA2MSwgMjA4LCA4NSwgMjE4LCAyMzMsIDE3MSwgCisgICAgMjEwLCAyNDQsIDE3MSwgMjEwLCAxOTcsIDQ5LCAyMTUsIDkzLCAyNDksIDExLCAyNDQsIDQzLCA1MCwgMjE1LCA5MywgMjQ5LCAKKyAgICAxMSwgMjQ0LCA0MywgMjE5LCAyNDUsIDMsIDcwLCAyMzEsIDYsIDIxNiwgNzQsIDIxMiwgMSwgMjE3LCAyNDgsIDIxMCwgCisgICAgMjQ0LCAyMTAsIDE5OCwgMjE3LCAyNDgsIDIxMiwgMCwgODAsIDI0OCwgMjMxLCAzLCAyMzYsIDEwNiwgOTUsIDEzLCAyMTUsIAorICAgIDI0NSwgMjQzLCAyMjcsIDE2MywgMjQzLCAxMzYsIDEzLCAyNDAsIDg0LCAyNDMsIDIyNywgMTAzLCAyMjcsIDM3LCAyNTAsIAorICAgIDIyNiwgMTAzLCAyMjcsIDM3LCAyMTksIDI0NCwgNjEsIDI0MywgMjIyLCAzLCAyNDYsIDIxNiwgMjQzLCA4NSwgMjUsIDMsIAorICAgIDI0MywgODUsIDI0MSwgMTE1LCA3NiwgMjIwLCAxLCAyMDYsIDIxMiwgMjI2LCAyNTEsIDUwLCAyNDUsIDE2NiwgMywgMjQzLCAKKyAgICA4NSwgMjA2LCAyMjEsIDQ5LCAyNDUsIDE2NiwgMywgMjQzLCA4NSwgNDksIDIxOSwgMjA5LCAyMzAsIDk5LCA1MCwgMjE5LCAKKyAgICAyMDksIDIzMCwgOTksIDIzOSwgMTAyLCAyMTksIDIwOSwgMjMwLCA5OSwgMjI4LCA4LCAxMTIsIDIxMCwgMywgMjI4LCA4LCAKKyAgICAxMjEsIDIxMCwgMywgNDksIDI1LCA1MCwgNTIsIDIwNywgMTczLCA0OSwgMjUsIDUwLCAyMTAsIDMsIDQ5LCAyMjMsIDIyOCwgCisgICAgMTYzLCA1MCwgMjEwLCAzLCAxNjMsIDQ5LCAyMTAsIDMsIDExMiwgMjEwLCA0LCAzLCAyNDYsIDYyLCA1NSwgMjI2LCAyNDcsIAorICAgIDI0MywgMTQyLCAyNDcsIDEzNywgMjM2LCAxMDYsIDIxNSwgMTM1LCA2MSwgMjQ1LCAyMTYsIDI0MywgMjIxLCA2MSwgMjQ1LCAKKyAgICAyMTYsIDI0MywgMjIyLCAzLCA5NiwgMjA4LCAyNTQsIDYxLCAyNDUsIDIxNiwgMjQzLCAyMjIsIDMsIDg2LCAyMDgsIDI1NCwgCisgICAgNjEsIDUxLCAzLCA5NiwgMjA4LCAyNTQsIDYxLCA1MSwgMywgODYsIDIwOCwgMjU0LCAxMywgNDksIDYxLCA1MSwgMTU1LCAKKyAgICAxMywgNTAsIDYxLCA1MSwgMTU1LCAxMywgNDksIDI1MCwgMjE4LCAxNTUsIDEzLCA1MCwgMjUwLCAyMTgsIDE1NSwgMTMsIAorICAgIDQ5LCA1MiwgMjUwLCAyMTgsIDE1NSwgMTMsIDUwLCA1MiwgMjUwLCAyMTgsIDE1NSwgMTMsIDQ5LCA2MSwgMjA4LCAxMzMsIAorICAgIDIxMywgMzMsIDE1NSwgMTMsIDUwLCA2MSwgMjA4LCAxMzMsIDIxMywgMzMsIDE1NSwgMTMsIDQ5LCAyMzksIDIxNCwgMjE5LCAKKyAgICA3NiwgMTMsIDUwLCAyMzksIDIxNCwgMjE5LCA3NiwgMTc3LCAyMTcsIDU4LCA0NywgMTgzLCAyMTcsIDU4LCA0NywgMjUwLCAKKyAgICAxOTQsIDIzOCwgMjI2LCAyNDYsIDYyLCA0NywgMjQ2LCAxOCwgMjM4LCAyMjYsIDI0NiwgNjIsIDQ3LCA1MCwgNTMsIDMsIAorICAgIDQzLCAyMTgsIDc2LCAxNjMsIDk2LCA0NywgMTYzLCA4NiwgNDcsIDE2MywgNDksIDUwLCA0NywgMTYzLCA5NiwgNTIsIDQ3LCAKKyAgICAxNjMsIDg2LCA1MiwgNDcsIDE2MywgNDksIDUwLCA1MiwgNDcsIDE2MywgOTYsIDUzLCAyMzksIDEyMCwgMTQyLCAxNjMsIAorICAgIDg2LCA1MywgMjM5LCAxMjAsIDE0MiwgMTYzLCA5NiwgNTIsIDUzLCAyMzksIDEyMCwgMTQyLCAxNjMsIDg2LCA1MiwgNTMsIAorICAgIDIzOSwgMTIwLCAxNDIsIDE2MywgODYsIDIxMSwgMTcxLCA0NywgNTgsIDU5LCAyNDgsIDM2LCA1OCwgNTksIDI0MywgODIsIAorICAgIDU4LCA1OSwgMjQyLCAyMTAsIDU4LCA1OSwgMjQzLCA4MSwgNTgsIDU5LCAyNDIsIDE0NiwgNTgsIDU5LCAyNDMsIDE3LCA1OCwgCisgICAgNTksIDI0MiwgMjA5LCA1OCwgNTksIDI0MywgODAsIDU4LCA1OSwgMjQyLCAxMTQsIDU4LCA1OSwgMjQyLCAyNDEsIDU4LCAKKyAgICA1OSwgMjQyLCAxNzcsIDU4LCA1OSwgMjQzLCA0OCwgNTgsIDU5LCAyNDIsIDE0NSwgNTgsIDU5LCAyNDMsIDE2LCA1OCwgNTksIAorICAgIDI0MiwgMjA4LCA1OCwgNTksIDI0MywgNzksIDU4LCA1OSwgMjQyLCA5OCwgNTgsIDU5LCAyNDIsIDIyNSwgNTgsIDU5LCAKKyAgICAyNDIsIDE2MSwgNTgsIDU5LCAyNDMsIDMyLCA1OCwgNTksIDI0MiwgMTI5LCA1OCwgNTksIDI0MywgMCwgNTgsIDU5LCAyNDIsIAorICAgIDE5MiwgNTgsIDU5LCAyNDMsIDYzLCA1OCwgNTksIDI0MiwgMTEzLCA1OCwgNTksIDI0MiwgMjQwLCA1OCwgNTksIDI0MiwgCisgICAgMTc2LCA1OCwgNTksIDI0MywgNDcsIDU4LCA1OSwgMjQyLCAxNDQsIDU4LCA1OSwgMjQzLCAxNSwgNTgsIDU5LCAyNDIsIAorICAgIDIwNywgNTgsIDU5LCAyNDMsIDc4LCA1OCwgNTksIDI0MiwgOTAsIDU4LCA1OSwgMjQyLCAyMTcsIDU4LCA1OSwgMjQyLCAKKyAgICAxNTMsIDU4LCA1OSwgMjQzLCAyNCwgNTgsIDU5LCAyNDIsIDEyMSwgNTgsIDU5LCAyNDIsIDI0OCwgNTgsIDU5LCAyNDIsIAorICAgIDE4NCwgNTgsIDU5LCAyNDMsIDU1LCA1OCwgNTksIDI0MiwgMTA1LCA1OCwgNTksIDI0MiwgMjMyLCA1OCwgNTksIDI0MiwgCisgICAgMTY4LCA1OCwgNTksIDI0MywgMzksIDU4LCA1OSwgMjQyLCAxMzYsIDU4LCA1OSwgMjQzLCA3LCA1OCwgNTksIDI0MiwgMTk5LCAKKyAgICA1OCwgNTksIDI0MywgNzAsIDU4LCA1OSwgMjQyLCA5NywgNTgsIDU5LCAyNDIsIDIyNCwgNTgsIDU5LCAyNDIsIDE2MCwgNTgsIAorICAgIDU5LCAyNDMsIDMxLCA1OCwgNTksIDI0MiwgMTI4LCA1OCwgNTksIDI0MiwgMjU1LCA1OCwgNTksIDI0MiwgMTkxLCA1OCwgCisgICAgNTksIDI0MywgNjIsIDU4LCA1OSwgMjQyLCAxMTIsIDU4LCA1OSwgMjQyLCAyMzksIDU4LCA1OSwgMjQyLCAxNzUsIDU4LCAKKyAgICA1OSwgMjQzLCA0NiwgNTgsIDU5LCAyNDIsIDE0MywgNTgsIDU5LCAyNDMsIDE0LCA1OCwgNTksIDI0MiwgMjA2LCA1OCwgNTksIAorICAgIDI0MywgNzcsIDU4LCA1OSwgMjQyLCA4NiwgNTgsIDU5LCAyNDIsIDIxMywgNTgsIDU5LCAyNDIsIDE0OSwgNTgsIDU5LCAKKyAgICAyNDMsIDIwLCA1OCwgNTksIDI0MiwgMTE3LCA1OCwgNTksIDI0MiwgMjQ0LCA1OCwgNTksIDI0MiwgMTgwLCA1OCwgNTksIAorICAgIDI0MywgNTEsIDU4LCA1OSwgMjQyLCAxMDEsIDU4LCA1OSwgMjQyLCAyMjgsIDU4LCA1OSwgMjQyLCAxNjQsIDU4LCA1OSwgCisgICAgMjQzLCAzNSwgNTgsIDU5LCAyNDIsIDEzMiwgNTgsIDU5LCAyNDMsIDMsIDU4LCA1OSwgMjQyLCAxOTUsIDU4LCA1OSwgMjQzLCAKKyAgICA2NiwgNTgsIDU5LCAyNDIsIDkzLCA1OCwgNTksIDI0MiwgMjIwLCA1OCwgNTksIDI0MiwgMTU2LCA1OCwgNTksIDI0MywgMjcsIAorICAgIDU4LCA1OSwgMjQyLCAxMjQsIDU4LCA1OSwgMjQyLCAyNTEsIDU4LCA1OSwgMjQyLCAxODcsIDU4LCA1OSwgMjQzLCA1OCwgCisgICAgNTgsIDU5LCAyNDIsIDEwOCwgNTgsIDU5LCAyNDIsIDIzNSwgNTgsIDU5LCAyNDIsIDE3MSwgNTgsIDU5LCAyNDMsIDQyLCAKKyAgICA1OCwgNTksIDI0MiwgMTM5LCA1OCwgNTksIDI0MywgMTAsIDU4LCA1OSwgMjQyLCAyMDIsIDU4LCA1OSwgMjQzLCA3MywgNTgsIAorICAgIDU5LCAyNDIsIDg5LCA1OCwgNTksIDI0MiwgMjE2LCA1OCwgNTksIDI0MiwgMTUyLCA1OCwgNTksIDI0MywgMjMsIDU4LCA1OSwgCisgICAgMjQyLCAxMjAsIDU4LCA1OSwgMjQyLCAyNDcsIDU4LCA1OSwgMjQyLCAxODMsIDU4LCA1OSwgMjQzLCA1NCwgNTgsIDU5LCAKKyAgICAyNDIsIDEwNCwgNTgsIDU5LCAyNDIsIDIzMSwgNTgsIDU5LCAyNDIsIDE2NywgNTgsIDU5LCAyNDMsIDM4LCA1OCwgNTksIAorICAgIDI0MiwgMTM1LCA1OCwgNTksIDI0MywgNiwgNTgsIDU5LCAyNDIsIDE5OCwgNTgsIDU5LCAyNDMsIDY5LCA1OCwgNTksIDI0MiwgCisgICAgOTYsIDU4LCA1OSwgMjQyLCAyMjMsIDU4LCA1OSwgMjQyLCAxNTksIDU4LCA1OSwgMjQzLCAzMCwgNTgsIDU5LCAyNDIsIAorICAgIDEyNywgNTgsIDU5LCAyNDIsIDI1NCwgNTgsIDU5LCAyNDIsIDE5MCwgNTgsIDU5LCAyNDMsIDYxLCA1OCwgNTksIDI0MiwgCisgICAgMTExLCA1OCwgNTksIDI0MiwgMjM4LCA1OCwgNTksIDI0MiwgMTc0LCA1OCwgNTksIDI0MywgNDUsIDU4LCA1OSwgMjQyLCAKKyAgICAxNDIsIDU4LCA1OSwgMjQzLCAxMywgNTgsIDU5LCAyNDIsIDIwNSwgNTgsIDU5LCAyNDMsIDc2LCA1OCwgNTksIDI0MiwgODQsIAorICAgIDU4LCA1OSwgMjQyLCAyMTEsIDU4LCA1OSwgMjQyLCAxNDcsIDU4LCA1OSwgMjQzLCAxOCwgNTgsIDU5LCAyNDIsIDExNSwgCisgICAgNTgsIDU5LCAyNDIsIDI0MiwgNTgsIDU5LCAyNDIsIDE3OCwgNTgsIDU5LCAyNDMsIDQ5LCA1OCwgNTksIDI0MiwgOTksIDU4LCAKKyAgICA1OSwgMjQyLCAyMjYsIDU4LCA1OSwgMjQyLCAxNjIsIDU4LCA1OSwgMjQzLCAzMywgNTgsIDU5LCAyNDIsIDEzMCwgNTgsIAorICAgIDU5LCAyNDMsIDEsIDU4LCA1OSwgMjQyLCAxOTMsIDU4LCA1OSwgMjQzLCA2NCwgNTgsIDU5LCAyNDIsIDkxLCA1OCwgNTksIAorICAgIDI0MiwgMjE4LCA1OCwgNTksIDI0MiwgMTU0LCA1OCwgNTksIDI0MywgMjUsIDU4LCA1OSwgMjQyLCAxMjIsIDU4LCA1OSwgCisgICAgMjQyLCAyNDksIDU4LCA1OSwgMjQyLCAxODUsIDU4LCA1OSwgMjQzLCA1NiwgNTgsIDU5LCAyNDIsIDEwNiwgNTgsIDU5LCAKKyAgICAyNDIsIDIzMywgNTgsIDU5LCAyNDIsIDE2OSwgNTgsIDU5LCAyNDMsIDQwLCA1OCwgNTksIDI0MiwgMTM3LCA1OCwgNTksIAorICAgIDI0MywgOCwgNTgsIDU5LCAyNDIsIDIwMCwgNTgsIDU5LCAyNDMsIDcxLCA1OCwgNTksIDI0MiwgODcsIDU4LCA1OSwgMjQyLCAKKyAgICAyMTQsIDU4LCA1OSwgMjQyLCAxNTAsIDU4LCA1OSwgMjQzLCAyMSwgNTgsIDU5LCAyNDIsIDExOCwgNTgsIDU5LCAyNDIsIAorICAgIDI0NSwgNTgsIDU5LCAyNDIsIDE4MSwgNTgsIDU5LCAyNDMsIDUyLCA1OCwgNTksIDI0MiwgMTAyLCA1OCwgNTksIDI0MiwgCisgICAgMjI5LCA1OCwgNTksIDI0MiwgMTY1LCA1OCwgNTksIDI0MywgMzYsIDU4LCA1OSwgMjQyLCAxMzMsIDU4LCA1OSwgMjQzLCA0LCAKKyAgICA1OCwgNTksIDI0MiwgMTk2LCA1OCwgNTksIDI0MywgNjcsIDU4LCA1OSwgMjQyLCA5NCwgNTgsIDU5LCAyNDIsIDIyMSwgNTgsIAorICAgIDU5LCAyNDIsIDE1NywgNTgsIDU5LCAyNDMsIDI4LCA1OCwgNTksIDI0MiwgMTI1LCA1OCwgNTksIDI0MiwgMjUyLCA1OCwgCisgICAgNTksIDI0MiwgMTg4LCA1OCwgNTksIDI0MywgNTksIDU4LCA1OSwgMjQyLCAxMDksIDU4LCA1OSwgMjQyLCAyMzYsIDU4LCAKKyAgICA1OSwgMjQyLCAxNzIsIDU4LCA1OSwgMjQzLCA0MywgNTgsIDU5LCAyNDIsIDE0MCwgNTgsIDU5LCAyNDMsIDExLCA1OCwgNTksIAorICAgIDI0MiwgMjAzLCA1OCwgNTksIDI0MywgNzQsIDU4LCA1OSwgMjQyLCA4NSwgNTgsIDU5LCAyNDIsIDIxMiwgNTgsIDU5LCAKKyAgICAyNDIsIDE0OCwgNTgsIDU5LCAyNDMsIDE5LCA1OCwgNTksIDI0MiwgMTE2LCA1OCwgNTksIDI0MiwgMjQzLCA1OCwgNTksIAorICAgIDI0MiwgMTc5LCA1OCwgNTksIDI0MywgNTAsIDU4LCA1OSwgMjQyLCAxMDAsIDU4LCA1OSwgMjQyLCAyMjcsIDU4LCA1OSwgCisgICAgMjQyLCAxNjMsIDU4LCA1OSwgMjQzLCAzNCwgNTgsIDU5LCAyNDIsIDEzMSwgNTgsIDU5LCAyNDMsIDIsIDU4LCA1OSwgMjQyLCAKKyAgICAxOTQsIDU4LCA1OSwgMjQzLCA2NSwgNTgsIDU5LCAyNDIsIDkyLCA1OCwgNTksIDI0MiwgMjE5LCA1OCwgNTksIDI0MiwgCisgICAgMTU1LCA1OCwgNTksIDI0MywgMjYsIDU4LCA1OSwgMjQyLCAxMjMsIDU4LCA1OSwgMjQyLCAyNTAsIDU4LCA1OSwgMjQyLCAKKyAgICAxODYsIDU4LCA1OSwgMjQzLCA1NywgNTgsIDU5LCAyNDIsIDEwNywgNTgsIDU5LCAyNDIsIDIzNCwgNTgsIDU5LCAyNDIsIAorICAgIDE3MCwgNTgsIDU5LCAyNDMsIDQxLCA1OCwgNTksIDI0MiwgMTM4LCA1OCwgNTksIDI0MywgOSwgNTgsIDU5LCAyNDIsIDIwMSwgCisgICAgNTgsIDU5LCAyNDMsIDcyLCA1OCwgNTksIDI0MiwgODgsIDU4LCA1OSwgMjQyLCAyMTUsIDU4LCA1OSwgMjQyLCAxNTEsIDU4LCAKKyAgICA1OSwgMjQzLCAyMiwgNTgsIDU5LCAyNDIsIDExOSwgNTgsIDU5LCAyNDIsIDI0NiwgNTgsIDU5LCAyNDIsIDE4MiwgNTgsIAorICAgIDU5LCAyNDMsIDUzLCA1OCwgNTksIDI0MiwgMTAzLCA1OCwgNTksIDI0MiwgMjMwLCA1OCwgNTksIDI0MiwgMTY2LCA1OCwgCisgICAgNTksIDI0MywgMzcsIDU4LCA1OSwgMjQyLCAxMzQsIDU4LCA1OSwgMjQzLCA1LCA1OCwgNTksIDI0MiwgMTk3LCA1OCwgNTksIAorICAgIDI0MywgNjgsIDU4LCA1OSwgMjQyLCA5NSwgNTgsIDU5LCAyNDIsIDIyMiwgNTgsIDU5LCAyNDIsIDE1OCwgNTgsIDU5LCAKKyAgICAyNDMsIDI5LCA1OCwgNTksIDI0MiwgMTI2LCA1OCwgNTksIDI0MiwgMjUzLCA1OCwgNTksIDI0MiwgMTg5LCA1OCwgNTksIAorICAgIDI0MywgNjAsIDU4LCA1OSwgMjQyLCAxMTAsIDU4LCA1OSwgMjQyLCAyMzcsIDU4LCA1OSwgMjQyLCAxNzMsIDU4LCA1OSwgCisgICAgMjQzLCA0NCwgNTgsIDU5LCAyNDIsIDE0MSwgNTgsIDU5LCAyNDMsIDEyLCA1OCwgNTksIDI0MiwgMjA0LCA1OCwgNTksIAorICAgIDI0MywgNzUsIDg2LCAyMDcsIDEzNCwgNTMsIDMsIDgwLCA5NSwgODYsIDIwNywgMTM0LCA1MywgMywgNTIsIDgwLCA5NSwgCisgICAgOTYsIDUyLCA1MywgMywgODAsIDk1LCA4NiwgNTIsIDUzLCAzLCA4MCwgOTUsIDQ5LCA1MCwgNTIsIDUzLCAzLCA4MCwgOTUsIAorICAgIDg2LCAyMDcsIDEzNCwgNTMsIDIzOSwgMTIwLCAxNDIsIDk2LCA1MiwgNTMsIDIzOSwgMTIwLCAxNDIsIDg2LCA1MiwgNTMsIAorICAgIDIzOSwgMTIwLCAxNDIsIDE4MywgNTMsIDMsIDIzNiwgMTA2LCA5NSwgMTc3LCA1MywgMywgMjM2LCAxMDYsIDk1LCAxNzcsIAorICAgIDIwOCwgNzAsIDQ3LCAxODMsIDIwOCwgNzAsIDQ3LCA5NiwgNTIsIDI0NCwgMTQ1LCA0NywgODYsIDUyLCAyNDQsIDE0NSwgCisgICAgNDcsIDk2LCAyMDgsIDcwLCAyNDQsIDE0NSwgNDcsIDg2LCAyMDgsIDcwLCAyNDQsIDE0NSwgNDcsIDg2LCAyMDcsIDEzNCwgCisgICAgMjA4LCA3MCwgMjQ0LCAxNDUsIDQ3LCA4NiwgNTMsIDMsIDI0MiwgODMsIDIxMSwgNzcsIDE3NywgNTMsIDIwOCwgMTczLCAKKyAgICAxNDIsIDE4MywgNTMsIDIwOCwgMTczLCAxNDIsIDg2LCA1MywgMywgMjA5LCAyNDksIDMsIDgwLCA5NSwgODYsIDUzLCAzLCAKKyAgICAyMDksIDI0OSwgMywgNTIsIDgwLCA5NSwgODYsIDIwNywgMTM0LCA1MywgMywgMjA5LCAyNDgsIDg2LCAyMDcsIDEzNCwgNTMsIAorICAgIDMsIDIwOSwgMjQ5LCAzLCA4MCwgOTUsIDg2LCAyMDcsIDEzNCwgNTMsIDMsIDIwOSwgMjQ5LCAzLCA1MiwgODAsIDk1LCA5NiwgCisgICAgMjUwLCA5NiwgODYsIDI1MCwgOTYsIDk2LCA1MiwgMjUwLCA5NiwgODYsIDUyLCAyNTAsIDk2LCA5NiwgNTMsIDIwOCwgMTczLCAKKyAgICA2MiwgMjQzLCAyMjEsIDg2LCA1MywgMjA4LCAxNzMsIDYyLCAyNDMsIDIyMSwgOTYsIDUzLCAyMzksIDEyMCwgMjQ4LCAyMzEsIAorICAgIDIwOCwgMTczLCA2MiwgMjQzLCAyMjEsIDg2LCA1MywgMjM5LCAxMjAsIDI0OCwgMjMxLCAyMDgsIDE3MywgNjIsIDI0MywgCisgICAgMjIxLCAxNTMsIDIwNCwgNDYsIDI1LCAyMTEsIDIzOCwgMjQxLCAxNzYsIDQ3LCAxNTMsIDI0MSwgMTc2LCAyNSwgMjExLCAKKyAgICAyMzgsIDIwNCwgNDYsIDQ3LCAxNTMsIDIwNCwgNDYsIDUzLCAzLCAxMTMsIDE1MywgMjQxLCAxNzYsIDUzLCAzLCAxMTMsIAorICAgIDIxMSwgMjM4LCAyNDEsIDE3NiwgNTMsIDMsIDExMywgMjExLCAyMzgsIDIwNCwgNDYsIDUzLCAzLCAxMTMsIDE1MywgMjA0LCAKKyAgICA0NiwgNTMsIDI1LCAxNTMsIDI0MSwgMTc2LCA0NywgMTUzLCAyNDEsIDE3NiwgNTMsIDI1LCAyMTEsIDIzOCwgMjQxLCAxNzYsIAorICAgIDQ3LCAyMTEsIDIzOCwgMjQxLCAxNzYsIDUzLCAyNSwgMjExLCAyMzgsIDIwNCwgNDYsIDQ3LCAyMTEsIDIzOCwgMjA0LCA0NiwgCisgICAgNTMsIDI1LCAxNTMsIDIwNCwgNDYsIDQ3LCAyMTUsIDI0NSwgMjQzLCAyMjgsIDI0NSwgMTI0LCAyNDAsIDg0LCAyNDMsIAorICAgIDIyNywgMjQwLCA4NCwgMjQzLCAyMjgsIDI0NSwgMTI0LCAyMTUsIDI0NSwgMjQzLCAyMjcsIDIxMSwgMjM4LCAyNDEsIDE3NiwgCisgICAgNTMsIDI0NSwgMTI0LCAxNTMsIDI0MSwgMTc2LCA0NywgMTUzLCAyNDEsIDE3NiwgNTMsIDI0NSwgMTI0LCAyMTEsIDIzOCwgCisgICAgMjQxLCAxNzYsIDQ3LCAyNDAsIDg0LCAyNDMsIDIyOCwgMjQ1LCAxMjQsIDE1MywgMjQxLCAxNzYsIDQ3LCAyMTUsIDI0NSwgCisgICAgMjQzLCAyMjgsIDI0NSwgMTI0LCAyMTEsIDIzOCwgMjQxLCAxNzYsIDQ3LCAxNTMsIDI0MSwgMTc2LCA1MywgMjQ1LCAxMjQsIAorICAgIDE1MywgMjA0LCA0NiwgNDcsIDE1MywgMjA0LCA0NiwgNTMsIDI0NSwgMTI0LCAxNTMsIDI0MSwgMTc2LCA0NywgMjA0LCA3NiwgCisgICAgNTMsIDIxOCwgNTksIDI0MywgMTY0LCAyMTYsIDE2LCA1MywgMjE4LCA1OSwgODYsIDIwOSwgODQsIDI0NSwgODQsIDIwNiwgCisgICAgMjEyLCA1MywgMjE4LCA1OSwgODYsIDIwOSwgODQsIDI0NSwgODQsIDI0MiwgNjgsIDUzLCAyMTgsIDU5LCAxODMsIDIwOSwgCisgICAgODQsIDI0NSwgODQsIDIyNywgMjEyLCA1MywgMjE4LCA1OSwgMTgzLCAyMDksIDg0LCAyNDUsIDg0LCAyMTYsIDUsIDIxNiwgCisgICAgOCwgMjUwLCAxMjksIDI0NiwgMTgsIDQ3LCAyMjcsIDIxNSwgMjUwLCAxMjksIDI1MCwgMTk0LCA0NywgMjA4LCAxNDUsIAorICAgIDI1MCwgMTI5LCAyNTAsIDE5NCwgNDcsIDI0NywgMjQ4LCAyNTAsIDEyOSwgMjUwLCAxOTQsIDQ3LCAyMDgsIDE0NSwgMjUwLCAKKyAgICAxMjksIDI0NiwgMTgsIDUzLCAzLCAyMjQsIDEwMiwgMjA4LCAxNDUsIDI1MCwgMTI5LCAyNTAsIDE5NCwgNTMsIDMsIDIxOCwgCisgICAgNzYsIDIyNiwgMjUxLCA1MCwgMjEzLCAxNDUsIDI0NiwgMTgsIDQ3LCAyMjYsIDI1MSwgNDksIDIxMywgMTQ1LCAyNTAsIAorICAgIDE5NCwgNDcsIDI1MCwgMTk0LCAyNDYsIDE2LCAyNDYsIDYyLCA0NywgMjQ2LCAxOCwgMjQ2LCAxNiwgMjQ2LCA2MiwgNDcsIAorICAgIDg2LCA1MywgODcsIDIxMiwgMjI4LCA5NiwgNDcsIDk2LCA1MywgODcsIDIxMiwgMjI4LCA4NiwgNDcsIDIxMiwgMjI4LCA4NiwgCisgICAgNTMsIDg3LCA5NiwgNDcsIDg2LCA1MywgMywgOTEsIDU2LCA5NiwgNTMsIDMsIDkxLCA1NiwgODYsIDUzLCAyMDksIDI1LCAKKyAgICAyMDMsIDE5NiwgNDksIDUwLCA1MywgMjA5LCAyNSwgNSwgMjQ2LCA2MSwgMTc3LCAyMDcsIDEzNCwgNTMsIDIzOSwgMTIwLCAKKyAgICA1LCAyNDYsIDYxLCA0OSwgMTUwLCAxMTIsIDUwLCAxNTAsIDEyMSwgMjM3LCA4NiwgNDksIDE1MCwgMTIxLCA1MCwgMTUwLCAKKyAgICAxMTIsIDIzNywgODYsIDExMiwgMTUwLCA1MCwgMTIxLCAxNTAsIDQ5LCAyMzcsIDg2LCAxMTIsIDE1MCwgNDksIDEyMSwgCisgICAgMTUwLCA1MCwgMjM3LCA4NiwgNDksIDE1MCwgMTEyLCA1MCwgMTUwLCAxMTIsIDIzNywgODYsIDExMiwgMTUwLCA1MCwgMTIxLCAKKyAgICAxNTAsIDUwLCAyMzcsIDg2LCA0OSwgMTUwLCAxMjEsIDUwLCAxNTAsIDEyMSwgMjM3LCA4NiwgMTEyLCAxNTAsIDQ5LCAxMjEsIAorICAgIDE1MCwgNDksIDIzNywgODYsIDk2LCAyMzcsIDg3LCAzLCAxNTAsIDExMiwgMjA4LCAxNzMsIDE0MiwgODYsIDIzNywgODcsIAorICAgIDMsIDE1MCwgMTEyLCAyMDgsIDE3MywgMTQyLCAxNzcsIDIzNywgODcsIDMsIDE1MCwgNTAsIDIwOCwgMTczLCAxNDIsIDE4MywgCisgICAgMjM3LCA4NywgMywgMTUwLCA1MCwgMjA4LCAxNzMsIDE0MiwgOTYsIDIzNywgODcsIDMsIDE1MCwgMTIxLCAyMDgsIDE3MywgCisgICAgMTQyLCA4NiwgMjM3LCA4NywgMywgMTUwLCAxMjEsIDIwOCwgMTczLCAxNDIsIDE3NywgMjM3LCA4NywgMywgMTUwLCA0OSwgCisgICAgMjA4LCAxNzMsIDE0MiwgMTgzLCAyMzcsIDg3LCAzLCAxNTAsIDQ5LCAyMDgsIDE3MywgMTQyLCA5NiwgMjM3LCA4NywgMywgCisgICAgMTUwLCAxMTIsIDIzOSwgMTIwLCAxNDIsIDg2LCAyMzcsIDg3LCAzLCAxNTAsIDExMiwgMjM5LCAxMjAsIDE0MiwgMTc3LCAKKyAgICAyMzcsIDg3LCAzLCAxNTAsIDUwLCAyMzksIDEyMCwgMTQyLCAxODMsIDIzNywgODcsIDMsIDE1MCwgNTAsIDIzOSwgMTIwLCAKKyAgICAxNDIsIDk2LCAyMzcsIDg3LCAzLCAxNTAsIDEyMSwgMjM5LCAxMjAsIDE0MiwgODYsIDIzNywgODcsIDMsIDE1MCwgMTIxLCAKKyAgICAyMzksIDEyMCwgMTQyLCAxNzcsIDIzNywgODcsIDMsIDE1MCwgNDksIDIzOSwgMTIwLCAxNDIsIDE4MywgMjM3LCA4NywgMywgCisgICAgMTUwLCA0OSwgMjM5LCAxMjAsIDE0MiwgOTYsIDIzNywgODcsIDMsIDE1MCwgMTEyLCA4NywgOTYsIDIzNywgODcsIDMsIAorICAgIDE1MCwgMjQyLCA3MCwgMTc3LCAyMzcsIDg3LCAzLCAxNTAsIDQ5LCAyNDgsIDExMCwgMTc3LCAyMzcsIDg3LCAzLCAxNTAsIAorICAgIDIxNiwgMTYsIDg2LCAyMzcsIDg3LCAzLCAxNTAsIDExMiwgODcsIDg2LCAyMzcsIDg3LCAzLCAxNTAsIDI0MiwgNzAsIDE4MywgCisgICAgMjM3LCA4NywgMywgMTUwLCA0OSwgMjQ4LCAxMTAsIDE4MywgMjM3LCA4NywgMywgMTUwLCAyMTYsIDE2LCA5NiwgMjM3LCAKKyAgICA4NywgMywgMTUwLCAxMTIsIDg3LCA4NiwgMjM3LCA4NywgMywgMTUwLCAyMDYsIDIyNCwgOTYsIDIzNywgODcsIDMsIDE1MCwgCisgICAgMTIxLCA4NywgODYsIDIzNywgODcsIDMsIDE1MCwgMjQyLCA3MCwgODYsIDIzNywgODcsIDMsIDE1MCwgMTEyLCA4NywgOTYsIAorICAgIDIzNywgODcsIDMsIDE1MCwgMjA2LCAyMjQsIDg2LCAyMzcsIDg3LCAzLCAxNTAsIDEyMSwgODcsIDk2LCAyMzcsIDg3LCAzLCAKKyAgICAxNTAsIDI0MiwgNzAsIDk2LCAyMzcsIDg3LCAzLCAxNTAsIDExMiwgODcsIDE2MywgMjQ0LCAxNDQsIDk2LCAyMzcsIDg3LCAKKyAgICAzLCAxNTAsIDEyMSwgMjQ4LCAxMjYsIDE2MywgMjQ0LCAxNDQsIDg2LCAyMzcsIDg3LCAzLCAxNTAsIDExMiwgODcsIDE2MywgCisgICAgMjQ0LCAxNDQsIDg2LCAyMzcsIDg3LCAzLCAxNTAsIDEyMSwgMjQ4LCAxMjYsIDE2MywgMjQ0LCAxNDQsIDE3NywgMjM3LCAKKyAgICA4NywgMywgMTUwLCA0OSwgMjQ4LCAxMTAsIDE4MywgMjM3LCA4NywgMywgMTUwLCAyMTYsIDE2LCAxODMsIDIzNywgODcsIDMsIAorICAgIDE1MCwgNDksIDI0OCwgMTEwLCAxNzcsIDIzNywgODcsIDMsIDE1MCwgMjE2LCAxNiwgNTAsIDUyLCA1MywgMywgMjE1LCAKKyAgICAxODksIDIzNywgNjQsIDI0MSwgMzUsIDIsIDg3LCA4NiwgNDcsIDIwOCwgMjI4LCAyMTksIDI1NSwgODcsIDg2LCA0NywgOTYsIAorICAgIDUzLCA4NywgMjA4LCAyMjgsIDIxOSwgMjU0LCA4NiwgNTMsIDg3LCAyMDgsIDIyOCwgMjE5LCAyNTQsIDg2LCA1MywgODcsIAorICAgIDI1MSwgNywgMTU2LCAxMzUsIDIyNywgMTc5LCA4NywgOTYsIDQ3LCA5NiwgNTMsIDIwOSwgMjUsIDIyNywgMTc4LCAyMzcsIAorICAgIDI0NywgODcsIDg2LCA0NywgMjEwLCAyNDUsIDg3LCA4NiwgNDcsIDk2LCA1MywgMjA5LCAyNSwgMjEwLCAyNDQsIDIxMCwgCisgICAgMTk4LCA4NywgOTYsIDQ3LCA0OSwgMjM5LCAyNDQsIDIwOSwgMjQ4LCA1MCwgMjM5LCAyNDQsIDIwOSwgMjQ4LCAxMTIsIAorICAgIDIzOSwgMjQ0LCAyMDksIDI0OCwgMTIxLCAyMzksIDI0NCwgMjA5LCAyNDgsIDIwOCwgNzAsIDgwLCAyNDgsIDIzMSwgMjQ0LCAKKyAgICA0MywgMjAyLCAxNjAsIDIyMSwgMTY0LCAyMTEsIDE4OCwgMjAyLCAxNjAsIDIyMSwgMTY0LCAyMDcsIDEyMSwgMjQ1LCAyNDIsIAorICAgIDQ5LCA2MSwgMjQ1LCA5MywgMTU1LCA1MCwgNjEsIDI0NSwgOTMsIDE1NSwgNDksIDYxLCAyMTksIDc2LCA1MCwgNjEsIDIxOSwgCisgICAgNzYsIDIwMiwgMTYwLCAyMjEsIDE2NCwgNDksIDIzMSwgNjUsIDE1NSwgMjAyLCAxNjAsIDIyMSwgMTY0LCA1MCwgMjMxLCAKKyAgICA2NSwgMTU1LCAyMDIsIDE2MCwgMjIxLCAxNjQsIDQ5LCAyNDgsIDY1LCAxNTUsIDIwMiwgMTYwLCAyMjEsIDE2NCwgNTAsIAorICAgIDI0OCwgNjUsIDE1NSwgNDksIDUxLCAyNDcsIDIyNywgMywgMjA2LCAyNDYsIDUwLCA1MSwgMjQ3LCAyMjcsIDMsIDIwNiwgCisgICAgMjQ2LCA0OSwgNTEsIDI0NywgMjI3LCAzLCAyMDgsIDI1NSwgMjMxLCA1MCwgMjA4LCAxNDUsIDI0NSwgMTY1LCA1MCwgNTEsIAorICAgIDI0NywgMjI3LCAzLCAyMDgsIDI1NSwgMjMxLCA1MCwgMjQ3LCAyNDgsIDI0NSwgMTY1LCA0OSwgNTEsIDI0NywgMjI3LCAzLCAKKyAgICAyMDgsIDI1NSwgMjMxLCA1MCwgMjQ3LCAyNDgsIDI0NSwgMTY1LCA1MCwgNTEsIDI0NywgMjI3LCAzLCAyMDgsIDI1NSwgCisgICAgMjMxLCA1MCwgMjA4LCAxNDUsIDI0NSwgMTY1LCA0OSwgMjUwLCAyMTgsIDI0NywgMjI3LCAzLCAyNDMsIDg1LCA1MCwgMjUwLCAKKyAgICAyMTgsIDI0NywgMjI3LCAzLCAyNDMsIDg1LCA0OSwgMjUwLCAxMjksIDIyNywgMTc5LCAxNTUsIDUwLCAyNTAsIDEyOSwgCisgICAgMjM3LCAyNDcsIDE1NSwgNTIsIDQ5LCAyNTAsIDEyOSwgMjM3LCAyNDcsIDE1NSwgNTIsIDUwLCAyNTAsIDEyOSwgMjI3LCAKKyAgICAxNzksIDE1NSwgNDksIDYyLCAyMDgsIDEzMywgMjEzLCAzMywgMTU1LCA1MCwgNjIsIDIwOCwgMTMzLCAyMTMsIDMzLCAxNTUsIAorICAgIDI0MiwgODMsIDI0MCwgNDAsIDgwLCAyMDIsIDMwLCAyMjcsIDExNCwgMjI1LCAxNywgMjUwLCAyMTgsIDIyMCwgMSwgMjI3LCAKKyAgICAyMjIsIDUwLCAyNTAsIDIxOCwgMjA2LCA2OSwgMywgMjExLCAxNzcsIDIyNSwgMTcsIDUwLCAyNTAsIDIxOCwgMywgMjQzLCAKKyAgICA4NSwgMjUwLCAyMTgsIDMsIDIxNSwgOTQsIDIzMSwgNiwgMjUxLCAxMjYsIDI1MCwgMjE3LCAyMTEsIDIwOCwgMjUwLCAyMTgsIAorICAgIDIyMCwgMSwgMjI3LCAyMjIsIDIxMSwgMjA4LCAyNTAsIDIxOCwgMjIwLCAxLCAyMDYsIDIyNCwgMjA3LCAxNzQsIDI1MCwgCisgICAgMjE3LCAyMTYsIDczLCAyNTAsIDIxNywgMjUwLCAyMTgsIDMsIDIwNiwgMjQ2LCAyMTYsIDczLCAyNTAsIDIxOCwgMywgMjA2LCAKKyAgICAyNDYsIDIyMCwgODksIDI1MCwgMjE4LCAyMjAsIDEsIDIwNiwgMjI0LCAyMjAsIDg5LCAyNTAsIDIxOCwgMjIwLCAxLCAyNDIsIAorICAgIDcwLCAyMjUsIDE3LCAyNTAsIDIxOCwgMywgMTcxLCAyNTAsIDEwNywgMjQxLCA4MSwgMjMxLCA1MCwgNTMsIDIxOCwgNTksIAorICAgIDExMiwgMjUsIDIxNiwgMTYsIDIyNSwgMTcsIDI1MCwgMjE4LCAzLCAxNzEsIDI1MCwgMTA3LCAyNDEsIDgxLCAyMzEsIDUwLCAKKyAgICA1MywgMjE4LCA1OSwgMTEyLCAyNSwgMjI3LCAyMjIsIDIyNSwgMTcsIDI1MCwgMjE4LCAzLCAxNzEsIDI1MCwgMTA3LCAyNDEsIAorICAgIDgxLCAyMzEsIDUwLCA1MywgMjE4LCA1OSwgMTIxLCAyNSwgMjE2LCAxNiwgMjI1LCAxNywgMjUwLCAyMTgsIDMsIDE3MSwgCisgICAgMjUwLCAxMDcsIDI0MSwgODEsIDIzMSwgNTAsIDUzLCAyMTgsIDU5LCAxMjEsIDI1LCAyMjcsIDIyMiwgMjI1LCAxNywgMjUwLCAKKyAgICAyMTgsIDMsIDE3MSwgMjUwLCAxMDcsIDI0MSwgODEsIDIzMSwgNTAsIDUzLCAyMTgsIDU5LCA1MCwgMjUsIDIwNiwgMjI0LCAKKyAgICAyMjUsIDE3LCAyNTAsIDIxOCwgMywgMTcxLCAyNTAsIDEwNywgMjQxLCA4MSwgMjMxLCA1MCwgNTMsIDIxOCwgNTksIDQ5LCAKKyAgICAyNSwgMjA2LCAyMjQsIDIyNSwgMTcsIDI1MCwgMjE4LCAzLCAxNzEsIDI1MCwgMTA3LCAyNDEsIDgxLCAyMzEsIDUwLCA1MywgCisgICAgMjE4LCA1OSwgNTAsIDI1LCAyNDIsIDcwLCAyMjUsIDE3LCAyNTAsIDIxOCwgMywgMTcxLCAyNTAsIDEwNywgMjQxLCA4MSwgCisgICAgMjMxLCA1MCwgNTMsIDIxOCwgNTksIDQ5LCAyNSwgMjQyLCA3MCwgMjE2LCA3MywgMjQxLCA5NCwgMjEzLCAxMTcsIDI0MSwgCisgICAgOTQsIDIxMywgMTE4LCAzLCAyMTksIDIwMywgMjQxLCA5NCwgMjEzLCAxMTgsIDMsIDUsIDI0NiwgNjIsIDU1LCAyNDEsIDk0LCAKKyAgICAyMTMsIDExOCwgMywgNTAsIDUzLCA1NSwgMjQxLCA5NCwgMjEzLCAxMTgsIDMsIDQ5LCA1MywgNTUsIDI0NiwgNjIsIDMsIAorICAgIDIzNiwgMTA2LCAxNDIsIDQzLCA4MCwgMTQyLCA0MywgMjE5LCA4MSwgNDMsIDIxNiwgNzQsIDIxMiwgMCwgNDMsIDIxOCwgCisgICAgMjMzLCAyNDYsIDYyLCAyNDMsIDE0MiwgMjQ3LCAxMzcsIDIzNiwgMTA2LCAyNDgsIDIzMSwgMjUsIDIwOCwgMTQ1LCAxNjIsIAorICAgIDI0MywgMTQyLCAyNDcsIDEzNywgODAsIDE0MiwgMjQ2LCA2MiwgMywgMjEwLCAyMDAsIDIwMywgMTk2LCA0MywgMjUwLCAKKyAgICAxOTIsIDI0MywgMTM3LCA1NCwgMTEyLCA1MywgMjA5LCAyNSwgMjQ2LCA2MSwgNDMsIDYxLCAyNDcsIDE3NywgNDMsIDI0NywgCisgICAgMTc3LCA0MywgMjI3LCAxNzgsIDQzLCAyMzcsIDI0NiwgMjQ2LCA2MiwgMywgNSwgMjQ2LCA2MiwgMjA4LCAxNzMsIDIwOSwgCisgICAgOTMsIDIxNiwgMTYsIDI0NiwgNjIsIDMsIDEyMCwgMjM2LCAxMDYsIDIxMSwgMjAsIDIwOCwgMTczLCAyMDksIDkzLCAyMTYsIAorICAgIDE2LCAxMDMsIDIxNSwgMjQ1LCAyNDMsIDIyOCwgMjEyLCA1NywgMTAzLCAyNDAsIDg0LCAyNDMsIDIyOCwgMjEyLCA1NywgCisgICAgMTAzLCAyNTAsIDU5LCAxMDMsIDUsIDI0NiwgNjEsIDEwMywgMjExLCAxNzcsIDEyMCwgMjMwLCA5OCwgMjExLCAxNzUsIAorICAgIDIwOCwgODYsIDMsIDcwLCA1NSwgMjA4LCA4NiwgMywgMjA2LCAyNDYsIDIxNSwgOTQsIDIzMSwgNTAsIDIwOCwgODUsIDIwOCwgCisgICAgODYsIDMsIDIxMywgMTI0LCAyNTAsIDUwLCAyNDcsIDI0NywgNTAsIDIwOCwgODYsIDg3LCA0OSwgMjA4LCA4NSwgNDksIAorICAgIDIwOCwgODYsIDI0OCwgMTEwLCA4MCwgMTQyLCA4MCwgMjQ4LCAyMzEsIDI0OCwgMTEwLCA1MCwgMjA4LCA4NSwgMjQ3LCAKKyAgICAyMzUsIDMsIDQ5LCAxNjIsIDI0OCwgNDMsIDI0NywgMjM1LCAzLCA1MCwgMTYyLCAyNDgsIDQzLCA2MiwgMjQ3LCAyMzQsIAorICAgIDIzLCAzLCA0OSwgMTYyLCAyNDgsIDQzLCAyMywgMywgNTAsIDE2MiwgMjQ4LCA0MywgNjEsIDIzNiwgNDAsIDYyLCAyMzYsIAorICAgIDQwLCA0OSwgMjA0LCAyMSwgMjQwLCA0MCwgNTAsIDIwNCwgMjEsIDI0MCwgNDAsIDQ5LCA1MiwgMjA0LCAyMSwgMjQwLCA0MCwgCisgICAgNTAsIDUyLCAyMDQsIDIxLCAyNDAsIDQwLCAyMzEsIDQyLCAyMzEsIDI3LCAyMDgsIDI1MSwgMTE1LCAyMzEsIDI3LCAyMzEsIAorICAgIDI4LCAyMjIsIDIzNCwgMywgODAsIDE0MiwgMjQyLCA3NywgMjIzLCAyMjgsIDUxLCAzLCAyNDUsIDE4NywgMjE5LCAyMDgsIAorICAgIDIzMSwgMzksIDI1MCwgODEsIDIxMiwgMTkzLCAyMTcsIDIyNCwgMjQxLCAzNSwgMiwgMjUsIDIxMiwgNTksIDIxOSwgODEsIAorICAgIDI0MSwgMzUsIDIsIDI1LCAyMTIsIDU5LCAyMTksIDgyLCAzLCAyMDgsIDIyOCwgNTUsIDIzNSwgMTU0LCAyMDgsIDE3MywgCisgICAgMjUsIDIxMiwgNTksIDIxOSwgODEsIDIzOCwgNDgsIDIxMSwgOTMsIDIwOSwgODEsIDI0MiwgNjksIDIwOCwgODYsIDMsIDQ5LCAKKyAgICAxNjIsIDI0OCwgNDMsIDI0MiwgNjksIDIwOCwgODYsIDMsIDUwLCAxNjIsIDI0OCwgNDMsIDYyLCAyNDMsIDIyMiwgMywgCisgICAgMTIxLCA0NywgNjIsIDIyNiwgMjQ2LCA2MSwgMjQ2LCA2MiwgMywgMTIxLCA0NywgNjIsIDI0NiwgNjIsIDMsIDEyMSwgNDcsIAorICAgIDI0MSwgMjAsIDYxLCAyMTEsIDE3NywgMjQxLCAyMCwgNjIsIDIxMSwgMTc3LCAyNDEsIDIwLCA2MSwgMjQzLCAyMjEsIDI0MSwgCisgICAgMjAsIDYyLCAyNDMsIDIyMSwgMjQxLCAyMCwgNjEsIDI0NiwgNjEsIDI0MSwgMjAsIDYyLCAyNDYsIDYxLCAyMTUsIDEzNCwgCisgICAgMjE2LCA3NCwgMjEyLCAxLCAyMTksIDI1NCwgMjEyLCAxLCAzLCAyMTksIDIwMywgMjE2LCA3NCwgMjEyLCAxLCAzLCAyMzYsIAorICAgIDEwNiwgOTUsIDI0OCwgNzMsIDIxMiwgMCwgMjQ4LCA3MywgMjE2LCA3NCwgMjEyLCAwLCA1MiwgMjE4LCA3NiwgMjA4LCA3MCwgCisgICAgMjE4LCA3NiwgMjI3LCAyMTcsIDI0NSwgODYsIDI1MCwgMjE4LCAxNTUsIDIxNiwgMTEsIDI0NSwgODYsIDI1MCwgMjE4LCAKKyAgICAxNTUsIDIwOCwgMjEyLCAyMjQsIDEwMCwgMjIzLCAxNjIsIDQzLCA3MCwgMjE5LCAyNTQsIDIyMywgMTYyLCA0MywgOTEsIAorICAgIDIxOSwgMjU0LCAyMjMsIDE2MiwgNDMsIDIzLCAyMTksIDI1NCwgMjIzLCAxNjIsIDIwNiwgMjM4LCAyMTksIDI1NSwgMywgCisgICAgMjQzLCA4NSwgMjIzLCAxNjIsIDIwNiwgMjM4LCAyMTksIDI1NSwgMywgMjE4LCA3NiwgMjIzLCAxNjIsIDUxLCAyMzAsIAorICAgIDI0NSwgMjE5LCAyNTQsIDIyMywgMTYyLCA1MSwgMjA2LCAyMzgsIDIxOSwgMjU0LCAxMjAsIDIyNywgMzcsIDI1LCAyMTksIAorICAgIDI1NCwgMTIwLCAyMjcsIDM3LCAyMTksIDI0NSwgMjE5LCAyNTQsIDIyMywgMTYyLCAyMywgMjE5LCAyNTQsIDIyNCwgNTgsIAorICAgIDEyMCwgMjEwLCAyMjAsIDIxMCwgMjE4LCAzLCAyMzEsIDIsIDIxNywgNTgsIDIzMSwgMywgMjE5LCAyNTQsIDIzOSwgMjUyLCAKKyAgICAyMTksIDcxLCAyMzEsIDIsIDIzMSwgMywgMywgNTIsIDk1LCAyMzEsIDMsIDI1MCwgMTUsIDMsIDIxMiwgNTcsIDI0NiwgNTQsIAorICAgIDIzOSwgOTksIDI1MCwgMTk0LCAyMzEsIDAsIDIyNywgMTE1LCAyMzEsIDEsIDMsIDIxNiwgMTQyLCAyMTksIDUyLCAyNTAsIAorICAgIDEwNCwgMjE4LCA1MywgMjI3LCAxMTUsIDIzMSwgMSwgMywgMjEzLCAxNDUsIDIxOSwgNTIsIDI1MCwgMTA0LCAyMTgsIDUzLCAKKyAgICAyMjcsIDExNSwgMjMxLCAxLCAyMjEsIDE2NiwgMjMxLCA0NCwgMjA5LCA5MywgMjE4LCA1MywgMjMxLCAzLCAyNTAsIDEwNCwgCisgICAgMzQsIDIxOCwgNjMsIDIxOSwgMjU0LCAyMTcsIDUyLCAyMzEsIDMsIDIxOSwgMjU0LCAyMzEsIDMsIDMsIDk2LCA1MywgMywgCisgICAgMTEzLCAyMzEsIDMsIDMsIDIzLCA1NCwgMjMxLCAzLCAzLCAyMzAsIDI0NCwgMjMxLCAzLCAzLCAyMDYsIDIzNywgMjMxLCAzLCAKKyAgICAzLCAyMTksIDIwMywgMjMxLCAzLCAzLCAyMDYsIDI0NiwgMjMwLCA5OSwgMjI4LCA4LCA0OSwgMjA4LCA4NiwgMjE5LCAyNTQsIAorICAgIDIwMiwgMTYwLCAyMjEsIDE2NCwgMjE0LCAxOTgsIDI0NSwgMjIzLCAyMDIsIDE2MCwgMjIxLCAxNjQsIDIxNCwgMTk4LCAKKyAgICAyMTgsIDExNCwgMjAyLCAxNjAsIDIyMSwgMTY0LCAyMTQsIDE5OCwgMjE3LCAyMTksIDkxLCAyLCAzLCA1LCAyNDYsIDYyLCAKKyAgICA1NSwgOTEsIDIsIDMsIDI0NiwgNTMsIDI1MSwgMTM5LCA1NSwgOTEsIDIsIDMsIDIwOCwgMjI4LCA1NSwgOTEsIDIsIDMsIAorICAgIDcwLCA1NiwgOTEsIDIsIDMsIDIwOCwgMjI4LCA1NiwgOTEsIDIsIDMsIDIxMCwgMjQ2LCAxMDgsIDkxLCAyLCAzLCA2MiwgCisgICAgMjA4LCA4NSwgMjI0LCAxMDMsIDIsIDMsIDI0NSwgMjM0LCA1NSwgMjI0LCAxMDMsIDIsIDMsIDcwLCA1NiwgMjI0LCAxMDMsIAorICAgIDIsIDMsIDI0MCwgODQsIDI0MywgODMsIDIyNCwgMTAzLCAyLCAzLCAyMTUsIDI0NSwgMjQzLCA4MywgOTEsIDIsIDIzMSwgCisgICAgNTAsIDQ5LCAxNjIsIDI0NiwgNjEsIDkxLCAyLCAyMzEsIDUwLCA1MCwgMTYyLCAyNDYsIDYxLCAyMDYsIDU0LCAyMTksIAorICAgIDI0NSwgMjQ1LCAxMzEsIDIxNywgMjI0LCAyMjMsIDIyNCwgMiwgMywgNzAsIDU1LCAyMjMsIDIyNCwgMiwgMywgMjA2LCAKKyAgICAyNDYsIDIxMywgMTQyLCAyMTcsIDIyNSwgMywgMjQ3LCAyNDgsIDI0NiwgMTUsIDIxMiwgMzQsIDIxNywgMjI0LCAyMjMsIAorICAgIDIyNCwgMiwgMjMxLCA1MCwgNDksIDE2MiwgMjQ2LCA2MSwgMjIzLCAyMjQsIDIsIDIzMSwgNTAsIDUwLCAxNjIsIDI0NiwgCisgICAgNjEsIDQzLCAyMjMsIDIyNCwgMiwgMywgMjQ2LCA1MywgMjUxLCAxMzgsIDIyMywgMjI0LCAyLCAyMzEsIDUwLCA1MiwgMjQ2LCAKKyAgICA2MSwgNDMsIDI0MywgMTM3LCA1NCwgOTEsIDIsIDIzMSwgNTAsIDIwOCwgODUsIDIyNCwgMTAzLCAyLCAyMzEsIDUwLCAyMDgsIAorICAgIDg1LCAyMjMsIDIyNCwgMiwgMjMxLCA1MCwgMjA4LCA4NSwgMjMwLCAyNTMsIDIxNywgMjI0LCAyMTYsIDYsIDIzMCwgMjUzLCAKKyAgICAyMTcsIDIyNCwgMjAyLCAxNjAsIDIyMSwgMTY0LCAyMTYsIDExNiwgMjQ1LCAyMjMsIDI1MCwgMjQ1LCAyMTksIDI0NSwgCisgICAgMjQ1LCAxNzEsIDIzMCwgMjQ1LCAzLCAyNDMsIDg1LCAyMDYsIDIzOCwgMywgMjI0LCAxMDMsIDU0LCAyMDYsIDIzOCwgMywgCisgICAgMjE5LCAyMDMsIDIzMCwgMjQ1LCAzLCAyMTksIDIwMywgMjMwLCAyNDUsIDMsIDIyNywgMzcsIDI1MCwgMjI2LCAyMDYsIAorICAgIDIzOCwgMywgMjI3LCAzNywgMjE5LCAyNDQsIDIwNiwgMjM4LCA4NywgMjMwLCAyNDQsIDIzMCwgMjQ1LCA4NywgMjA2LCAKKyAgICAyMzcsIDIwNiwgMjM4LCA4NywgMjQ4LCAyMzEsIDg3LCAyMzAsIDI0NCwgMjMwLCAyNDUsIDg3LCAyNDgsIDIzMSwgODcsIAorICAgIDIwNiwgMjM3LCAyMDYsIDIzOCwgMjQ4LCAxMTAsIDI1LCAyMzAsIDk4LCAzLCAyMDYsIDIzNywgMjMwLCAyNDUsIDI0OCwgCisgICAgMTEwLCAyNSwgMjMwLCA5OCwgMywgMjMwLCAyNDQsIDI0NiwgMTYsIDIwNiwgMjM4LCAzLCAyMTMsIDEyMywgMjQ2LCAxNiwgCisgICAgMjMwLCAyNDUsIDMsIDIxMywgMTIzLCA1MiwgNTEsIDIzMCwgMjQ0LCA1MiwgNTEsIDIwNiwgMjM3LCAyNDYsIDE2LCAyMDYsIAorICAgIDIzOCwgMywgMjEzLCAxMjQsIDI1LCAyMTIsIDM0LCAyMTcsIDIyNCwgMjI3LCAzNywgMjUsIDMsIDcwLCA1NSwgMjI3LCAzNywgCisgICAgMjE5LCAyNDUsIDMsIDcwLCA1NSwgNTIsIDIyNywgMzcsIDI1MCwgMjI2LCA1MiwgMjI3LCAzNywgMjE5LCAyNDQsIDEyMCwgCisgICAgMjMwLCAyNDYsIDIyNywgMzcsIDI1MCwgMjI2LCAxMjAsIDIzMCwgMjQ2LCAyMjcsIDM3LCAyMTksIDI0NCwgMjEyLCA0MywgCisgICAgMjI4LCA4LCAyMTksIDI0NCwgMjEyLCA0MywgMjI4LCA4LCAyNTAsIDIyNiwgMjI3LCAzNywgMjE5LCAyNDUsIDIxOSwgMjAwLCAKKyAgICAyMjcsIDM3LCAyNTAsIDIyNiwgMjI3LCAzNywgMjUsIDMsIDEwMSwgMjExLCA3NywgMjI3LCAzNywgMjE5LCAyNDUsIDMsIAorICAgIDEwMSwgMjExLCA3NywgMjI3LCAzNywgMjUsIDMsIDIzNiwgMTA2LCAyNDQsIDE0NCwgMjI3LCAzNywgMjE5LCAyNDUsIDMsIAorICAgIDIzNiwgMTA2LCAyNDQsIDE0NCwgMjI3LCAzNywgMjUsIDMsIDUyLCAyMTksIDIwMywgMjI3LCAzNywgMjUsIDMsIDIwNiwgCisgICAgMjQ2LCAyMjcsIDM3LCAyNSwgMywgNTIsIDIwNiwgMjQ2LCA1LCAyMDYsIDUxLCAzLCAyMDYsIDI0NiwgMjI3LCAzNywgMjE5LCAKKyAgICAyNDUsIDMsIDUyLCAyMTksIDIwMywgMjI3LCAzNywgMjE5LCAyNDUsIDMsIDUyLCAyMDYsIDI0NiwgMjAyLCAxNjAsIDIyMSwgCisgICAgMTY0LCAyNDMsIDk0LCAyNTAsIDE4NCwgMjAyLCAxNjAsIDIyMSwgMTY0LCAyMTYsIDE3OSwgMjUwLCAxODQsIDI0MSwgMzUsIAorICAgIDIsIDMsIDcwLCA1NiwgMjM1LCAxNTQsIDMsIDcwLCA1NSwgMjA4LCA3MCwgMjM2LCAxMDYsIDI0OCwgMjMxLCAzLCA1MiwgCisgICAgODAsIDk1LCAyMDgsIDcwLCAyMzYsIDEwNiwgMjQ4LCAyMzEsIDMsIDIwOCwgNzAsIDgwLCA5NSwgMjA4LCAyMjgsIDIxOSwgCisgICAgMjU1LCAzLCA3MCwgNTUsIDIwOCwgMjI4LCAyMTksIDI1NSwgMywgMjE1LCAyNDUsIDI0MywgODMsIDIxMiwgMTI5LCAyMjQsIAorICAgIDEwMywgMjEyLCAxMjgsIDI0NSwgMjEwLCAzLCA3MCwgNTUsIDI0MSwgMzUsIDMsIDI1MCwgNTksIDI1MSwgNywgMTU2LCAKKyAgICAyMDgsIDE3MywgMywgMjQ2LCA1MywgMjUxLCAxMzgsIDI1MCwgMTUxLCAxNTYsIDIxOSwgMjQ1LCAxNTYsIDEzNSwgMjQxLCAKKyAgICAzNSwgMiwgODcsIDkxLCA1NCwgOTEsIDIsIDg3LCAyNDEsIDM1LCA1NCwgMjQxLCAzNSwgMiwgODcsIDIwOCwgMjI4LCAyMTksIAorICAgIDI1NCwgNTIsIDI0NSwgMjQzLCAyNDEsIDM2LCAxMjAsIDI0NSwgMjAzLCAyNDEsIDM1LCAyMTIsIDE0MywgMTI2LCAyNDUsIAorICAgIDIwMywgMjQxLCAzNSwgMjEyLCAxNDMsIDI0MSwgMzUsIDIsIDMsIDEyMCwgMTg3LCA4NywgMjUsIDEyMCwgMTg3LCA1NiwgCisgICAgMjQxLCAzMCwgMywgMjM5LCAxNDcsIDE4NywgNTUsIDIyNywgMTc5LCAzLCAyNDYsIDYyLCAyMzEsIDYsIDIzNywgMjQ3LCAzLCAKKyAgICAyNDYsIDYyLCAyMzEsIDYsIDIyNywgMTc5LCAzLCAyMTcsIDQ3LCAxMzEsIDU1LCAyMzcsIDI0NywgMywgMjE3LCA0NywgCisgICAgMTMxLCA1NSwgMjI3LCAxNzksIDIxOSwgMjQ1LCAyMTIsIDU5LCAxNTYsIDEzNSwgMjM3LCAyNDcsIDIxOSwgMjQ1LCAyMTIsIAorICAgIDU5LCAxNTYsIDEzNSwgMjI3LCAxNzksIDIxOSwgMjQ1LCAyMTIsIDU5LCAxNTYsIDIwOCwgMTczLCAzLCA3MCwgMjMxLCA2LCAKKyAgICAyMzcsIDI0NywgMjE5LCAyNDUsIDIxMiwgNTksIDE1NiwgMjA4LCAxNzMsIDMsIDcwLCAyMzEsIDYsIDIyNywgMTc5LCAyMTksIAorICAgIDI0NSwgMjEyLCA1OSwgMTU2LCAyMDgsIDE3MywgMywgNzAsIDU1LCAyMzcsIDI0NywgMjE5LCAyNDUsIDIxMiwgNTksIDE1NiwgCisgICAgMjA4LCAxNzMsIDMsIDcwLCA1NSwgMjI3LCAxNzksIDIxOSwgMjQ1LCAyMTIsIDU5LCAxNTYsIDIwOCwgMTczLCAzLCA3MCwgCisgICAgODcsIDIxNiwgMTYsIDIzNywgMjQ3LCAyMTksIDI0NSwgMjEyLCA1OSwgMTU2LCAyMDgsIDE3MywgMywgNzAsIDg3LCAyMjcsIAorICAgIDIyMiwgMjI3LCAxNzksIDIxOSwgMjQ1LCAyNTAsIDE1MiwgMjM3LCAyNDcsIDIxOSwgMjQ1LCAyNTAsIDE1MiwgMjI3LCAKKyAgICAxNzksIDI1LCAyMTIsIDExOCwgMjIxLCAxNjYsIDE1NiwgMTM1LCAyMzcsIDI0NywgMjUsIDIxMiwgMTE4LCAyMjEsIDE2NiwgCisgICAgMTU2LCAxMzUsIDIyNywgMTc5LCAyNSwgMjIxLCAxNjYsIDI1MCwgMTUyLCAyMzcsIDI0NywgMjUsIDIyMSwgMTY2LCAyNTAsIAorICAgIDE1MiwgMjI3LCAxNzksIDg3LCAyNDIsIDc2LCAxNTYsIDg3LCAyMzcsIDI0NiwgMjM3LCAyNDcsIDg3LCAyNDIsIDc2LCAKKyAgICAxNTYsIDg3LCAyMjcsIDE3OCwgMjI3LCAxNzksIDg3LCAyMTIsIDEyOSwgMjE5LCAyNDUsIDI0MSwgMzYsIDIzNywgMjQ3LCAKKyAgICA4NywgMjEyLCAxMjksIDIxOSwgMjQ1LCAyNDEsIDM2LCAyMjcsIDE3OSwgODcsIDIxMiwgMTI5LCA4NywgMjM3LCAyNDYsIAorICAgIDIzNywgMjQ3LCA4NywgMjEyLCAxMjksIDg3LCAyMjcsIDE3OCwgMjI3LCAxNzksIDg3LCAyMzcsIDI0NywgODcsIDI0MiwgCisgICAgNzYsIDI0MSwgMzYsIDIzNywgMjQ3LCA4NywgMjI3LCAxNzksIDg3LCAyNDIsIDc2LCAyNDEsIDM2LCAyMjcsIDE3OSwgODcsIAorICAgIDIxMiwgNTksIDE1NiwgODcsIDIzNywgMjQ3LCA4NywgMjEyLCA1OSwgMjQxLCAzNiwgMjM3LCAyNDcsIDg3LCAyMTIsIDU5LCAKKyAgICAxNTYsIDg3LCAyMjcsIDE3OSwgODcsIDIxMiwgNTksIDI0MSwgMzYsIDIxMiwgNTksIDE1NiwgMjA4LCAxNzMsIDIxOSwgCisgICAgMjQ1LCAyMjcsIDE3OCwgMjEyLCA1OSwgMTU2LCAyMDgsIDE3MywgMjE5LCAyNDUsIDIzNywgMjQ2LCAyMTIsIDU5LCAxNTYsIAorICAgIDIwOCwgMTczLCAyMTksIDI0NSwgMjI3LCAxNzksIDMsIDcwLCAyMzEsIDYsIDIxMiwgNTksIDE1NiwgMjA4LCAxNzMsIDIxOSwgCisgICAgMjQ1LCAyMzcsIDI0NywgMywgNzAsIDIzMSwgNiwgMjQyLCA3NiwgMTU2LCAyMDgsIDE3MywgMjE5LCAyNDUsIDIyNywgMTc4LCAKKyAgICAyNDIsIDc2LCAxNTYsIDIwOCwgMTczLCAyMTksIDI0NSwgMjM3LCAyNDYsIDI0MiwgNzYsIDIxMiwgNTksIDE1NiwgMjA4LCAKKyAgICAxNzMsIDIxOSwgMjQ1LCAyMjcsIDE3OCwgMjQyLCA3NiwgMjEyLCA1OSwgMTU2LCAyMDgsIDE3MywgMjE5LCAyNDUsIDIzNywgCisgICAgMjQ2LCAyMTIsIDEyOSwgMjE5LCAyNDUsIDIyNywgMTc4LCAyMTIsIDEyOSwgMjE5LCAyNDUsIDIzNywgMjQ2LCAyMTIsIAorICAgIDEyOSwgODcsIDIyNywgMTc5LCA4NywgMjQxLCAzNSwgNTQsIDIxMiwgMTI5LCA4NywgMjM3LCAyNDcsIDg3LCAyNDEsIDM1LCAKKyAgICA1NCwgNTIsIDIyMiwgMjIxLCAyMjcsIDE3OCwgNTIsIDIyMiwgMjIxLCAyMzcsIDI0NiwgNTIsIDIyMiwgMjIxLCAyMjcsIAorICAgIDE3OSwgMywgMjA2LCAyNDYsIDIzNywgMjQ3LCAyMTksIDIwMCwgMjI3LCAxNzgsIDIzNywgMjQ3LCAyNDgsIDExMCwgMjI3LCAKKyAgICAxNzgsIDIyNywgMTc5LCAyNDYsIDE2LCAyNDcsIDEzNywgMjQ1LCA4NywgMjM3LCAyNDcsIDI0NiwgMTYsIDI0NywgMTM3LCAKKyAgICAyNDUsIDg3LCAyMjcsIDE3OSwgMjQ2LCAxNiwgMjQ3LCAxMzcsIDI0NSwgODgsIDg3LCAyMTIsIDU5LCAyNDEsIDM2LCAyMzcsIAorICAgIDI0NywgMjQ2LCAxNiwgMjQ3LCAxMzcsIDI0NSwgODgsIDg3LCAyMTIsIDU5LCAyNDEsIDM2LCAyMTIsIDM1LCAyMDksIDk3LCAKKyAgICAyMjgsIDYsIDIwOSwgOTcsIDIxMiwgMzUsIDIwOSwgOTgsIDIxOSwgMjQ1LCAxNTYsIDEzNSwgMjI4LCA2LCAyMDksIDk4LCAKKyAgICAyMTksIDI0NSwgMTU2LCAxMzUsIDI0MSwgMzUsIDIsIDMsIDI0NywgMTcwLCA1NSwgMjE3LCAyNTAsIDg3LCAyMTIsIDExOCwgCisgICAgMjQxLCAzNSwgNTQsIDIxMCwgMjM3LCA4NywgMjEyLCAxMTgsIDI0MSwgMzUsIDU0LCAyMTcsIDI1MCwgODcsIDIxMiwgMTE4LCAKKyAgICAyMjEsIDE2NiwgMTU2LCAxMzUsIDIxMCwgMjM3LCA4NywgMjEyLCAxMTgsIDIyMSwgMTY2LCAxNTYsIDEzNSwgMjE3LCAyNTAsIAorICAgIDg3LCAyNDEsIDM1LCA1NCwgMjEwLCAyMzcsIDg3LCAyNDEsIDM1LCA1NCwgMjE3LCAyNTAsIDg3LCAyMjEsIDE2NiwgMTU2LCAKKyAgICAxMzUsIDIxMCwgMjM3LCA4NywgMjIxLCAxNjYsIDE1NiwgMTM1LCAyMTcsIDI1MCwgODcsIDI1MSwgNywgMTU2LCAxMzUsIAorICAgIDIxMCwgMjM3LCA4NywgMjUxLCA3LCAxNTYsIDEzNSwgMjE3LCAyNTAsIDg3LCAyMjEsIDE2NiwgMjUxLCA3LCAxNTYsIDEzNSwgCisgICAgMjEwLCAyMzcsIDg3LCAyMjEsIDE2NiwgMjUxLCA3LCAxNTYsIDEzNSwgNTIsIDIxNywgMjQ5LCA1MiwgMjEwLCAyMzYsIAorICAgIDIxMCwgMjQ1LCAzLCAyNDMsIDg1LCAyMTAsIDE5OCwgMywgMjQzLCA4NSwgMjEwLCAyNDUsIDMsIDkxLCAyLCA1NiwgMjEwLCAKKyAgICAxOTgsIDMsIDkxLCAyLCA1NiwgMjEwLCAyNDUsIDMsIDIyMywgMjI0LCAyLCA1NiwgMjEwLCAxOTgsIDMsIDIyMywgMjI0LCAKKyAgICAyLCA1NiwgMjEwLCAyNDUsIDc2LCAyMTksIDI0NSwgMTU2LCAyMDgsIDE3MywgMywgNzAsIDU1LCAyMTAsIDE5OCwgNzYsIAorICAgIDIxOSwgMjQ1LCAxNTYsIDIwOCwgMTczLCAzLCA3MCwgNTUsIDIxMCwgMjQ1LCA3NiwgODcsIDI0MSwgMzUsIDU0LCAyMTAsIAorICAgIDE5OCwgNzYsIDg3LCAyNDEsIDM1LCA1NCwgMjEwLCAyNDUsIDc2LCA4NywgMjA4LCAyMjgsIDIxOSwgMjU0LCAyMTAsIDE5OCwgCisgICAgNzYsIDg3LCAyMDgsIDIyOCwgMjE5LCAyNTQsIDIxMCwgMjQ1LCA3NiwgODcsIDI1MSwgNywgMTU2LCAxMzUsIDIxMCwgMTk4LCAKKyAgICA3NiwgODcsIDI1MSwgNywgMTU2LCAxMzUsIDIxMCwgMjQ1LCA3NiwgODcsIDIyMSwgMTY2LCAxNTYsIDEzNSwgMjEwLCAxOTgsIAorICAgIDc2LCA4NywgMjIxLCAxNjYsIDE1NiwgMTM1LCA1MSwgNDksIDE3MSwgOTgsIDIxOSwgMjU0LCA1MSwgNTAsIDE3MSwgOTgsIAorICAgIDIxOSwgMjU0LCAyNDYsIDE2LCAyMTAsIDI0NCwgMjQ2LCAxNiwgMjEwLCAxOTcsIDI0NiwgMTYsIDIxMCwgMjQ1LCAyMTksIAorICAgIDI0NSwgMTU2LCAxMzUsIDI0NiwgMTYsIDIxMCwgMTk4LCAyMTksIDI0NSwgMTU2LCAxMzUsIDIxMCwgMjQ1LCA4NywgMjEwLCAKKyAgICAxOTcsIDIxMCwgMTk4LCA4NywgMjEwLCAyNDQsIDIxMCwgMjQ1LCA4NywgMjEwLCAyNDQsIDIxMCwgMTk4LCA4NywgMjEwLCAKKyAgICAxOTcsIDIxMCwgMTk4LCAyNDgsIDExMCwgMjEwLCAyNDQsIDIxMCwgMTk4LCAyNDgsIDExMCwgMjUsIDIzMCwgOTgsIDI0NywgCisgICAgMTM3LCAyNDQsIDE0NSwgMywgMjEwLCAyNDQsIDI0MSwgMTE1LCA3NiwgMjIwLCAxLCAyNDIsIDY4LCAyMTgsIDEwNCwgMywgCisgICAgMjA5LCAxNzcsIDIwOCwgMTQ0LCAyMDgsIDEwMiwgMjMwLCAyNDQsIDIzOSwgMTYwLCAyMjEsIDE4MSwgMjEyLCAyMjgsIDQ5LCAKKyAgICAyMTAsIDMsIDIxMiwgMjI4LCAxMjEsIDIxMCwgMywgMjEyLCAyMjgsIDExMiwgMjEwLCAzLCAyMTgsIDIzNCwgMywgMTk0LCAKKyAgICA4MCwgMjQ4LCAyMzEsIDIwOCwgNzAsIDUwLCAyMDcsIDE3MywgNTIsIDgwLCAyNDgsIDIzMSwgNDksIDIwNywgMTczLCA4MCwgCisgICAgMjQ4LCAyMzEsIDUyLCA0OSwgMjA3LCAxNzMsIDUyLCA4MCwgMjQ4LCAyMzEsIDUyLCA0OSwgMjA3LCAxNzMsIDE2MywgMjQ0LCAKKyAgICAxNDUsIDIzOSwgMTIwLCA0OSwgMjI0LCAyNDUsIDc2LCA1MiwgMjA2LCAzOCwgMjEyLCAyMjgsIDEyMSwgMjEwLCA0LCAzLCAKKyAgICAyMTksIDIwMywgMjEyLCAyMjgsIDExMiwgMjEwLCA0LCAzLCAyMDYsIDI0NiwgMjEyLCAyMjgsIDExMiwgMjEwLCA0LCA4NywgCisgICAgMjEyLCAyMjgsIDEyMSwgMjEwLCAzLCA1MiwgMTIxLCAyMTAsIDMsIDUyLCAxMTIsIDIxMCwgMywgNTIsIDIxMSwgMzIsIAorICAgIDIyMSwgMTY2LCA1NCwgMjE2LCA3MywgNTIsIDIxMSwgMzIsIDIyMSwgMTY2LCA1NCwgMjQzLCAxMDQsIDIyMSwgMTY2LCAKKyAgICAyNDMsIDE0NCwgMywgMjE2LCA3MywgMjIyLCAyMzMsIDIxMiwgNTcsIDgwLCAyMjcsIDExNSwgMywgMjQ2LCA2MiwgNTUsIAorICAgIDgwLCAyMjcsIDExNSwgMywgMjQ2LCA2MiwgNTYsIDEyMSwgMjEwLCA0LCAzLCAyNDYsIDYyLCA1NiwgMjE5LCA4MiwgMywgCisgICAgMjM2LCAxMDYsIDk1LCAyMTksIDgyLCAzLCAyMDgsIDIyOCwgMjE5LCAyNTQsIDIwOCwgNzAsIDgwLCAyNDgsIDIzMSwgMjQ4LCAKKyAgICA2NywgMjE2LCAxMTcsIDIwOCwgNzAsIDgwLCAyNDgsIDIzMSwgMywgMjM2LCAxMDYsIDk1LCAyMDgsIDcwLCAyNDUsIDI0MywgCisgICAgMjE5LCAyNTQsIDIwOCwgNzAsIDIyMiwgMjIxLCAyMjcsIDE3OCwgMjA4LCA3MCwgMjIyLCAyMjEsIDIzNywgMjQ2LCAyNDIsIAorICAgIDc2LCAyMTIsIDU5LCAyMjcsIDE3OSwgMjE5LCAyNDUsIDE1NiwgMTM1LCAyNDIsIDc2LCAyMTIsIDU5LCAyMzcsIDI0NywgCisgICAgMjE5LCAyNDUsIDE1NiwgMTM1LCAyMDgsIDcwLCAyMTIsIDEsIDI0OCwgNjcsIDIxNiwgMTE3LCAyMjgsIDgsIDIwOCwgNzAsIAorICAgIDgwLCAyNDgsIDIzMSwgMjE5LCAyNTQsIDUyLCAyMTIsIDEsIDIxOSwgMjU0LCA2MSwgODAsIDE0MiwgMjIzLCAxNjIsIDYxLCAKKyAgICA4MCwgMTQyLCAxNTMsIDI0MSwgMTc2LCA2MSwgNDcsIDE1MywgMjA0LCA0NiwgNjEsIDQ3LCAyMTEsIDIzOCwgMjQxLCAxNzYsIAorICAgIDYxLCA0NywgMjExLCAyMzgsIDIwNCwgNDYsIDYxLCA0NywgNDksIDUwLCA2MSwgNDcsIDk2LCA2MiwgNDcsIDE3NywgNjIsIAorICAgIDQ3LCAxODMsIDYyLCA0NywgMTUzLCAyNDEsIDE3NiwgNjIsIDQ3LCAxNTMsIDIwNCwgNDYsIDYyLCA0NywgMjExLCAyMzgsIAorICAgIDI0MSwgMTc2LCA2MiwgNDcsIDIxMSwgMjM4LCAyMDQsIDQ2LCA2MiwgNDcsIDQ5LCA1MCwgNjIsIDQ3LCAxMTIsIDEyMSwgCisgICAgNjIsIDQ3LCA4NiwgNTMsIDMsIDIwOCwgMjExLCAyNDIsIDY4LCA4NiwgNTMsIDMsIDIwOCwgMjExLCAyMDYsIDIxMiwgOTYsIAorICAgIDUzLCAzLCAyMDgsIDIxMSwgMjQyLCA2OCwgOTYsIDUzLCAzLCAyMDgsIDIxMSwgMjA2LCAyMTIsIDUxLCAzLCAyMDgsIDE0NSwgCisgICAgMTYyLCAyNDgsIDQzLCA1MSwgMywgMjQ3LCAyNDgsIDE2MiwgMjQ4LCA0MywgNTEsIDMsIDIwNiwgMjIxLCA1MCwgMjQzLCAKKyAgICAyMjgsIDE2MiwgMjQ4LCA0MywgNTEsIDMsIDIyNiwgMjUxLCA0OSwgMjQzLCAyMjgsIDE2MiwgMjQ4LCA0MywgMjQzLCAyMjIsIAorICAgIDMsIDQ5LCAxNjIsIDI0OCwgNDMsIDI0MywgMjIyLCAzLCA1MCwgMTYyLCAyNDgsIDQzLCAyNDMsIDIyMiwgMywgMjA4LCAKKyAgICAxNDUsIDE2MiwgMjQ4LCA0MywgMjQzLCAyMjIsIDMsIDI0NywgMjQ4LCAxNjIsIDI0OCwgNDMsIDI0MiwgODMsIDIxMSwgCisgICAgMTc3LCA2MiwgMjI4LCA4LCAyMTEsIDE3NywgNjEsIDIyOCwgOCwgMjExLCAxNzcsIDYyLCAyMDUsIDI0MiwgNSwgMjExLCAKKyAgICAxNzcsIDYxLCAyMDUsIDI0MiwgNSwgMjExLCAxNzcsIDYyLCAyMTgsIDI1NSwgNjEsIDIxOCwgMjU1LCA2MSwgMjM3LCAxNywgCisgICAgNjIsIDIzNywgMTcsIDIzNiwgMTA2LCA2MiwgMjM3LCAxNywgNjIsIDIyOCwgOCwgMjQ2LCA2MSwgNjIsIDIyNSwgMTAsIAorICAgIDI0MywgMjIxLCA2MSwgMjI1LCAxMCwgMjQzLCAyMjEsIDYyLCAyMjUsIDEwLCAyMjYsIDI0NiwgNjEsIDIyNSwgMTAsIDIyNiwgCisgICAgMjQ2LCA2MiwgNSwgMjQzLCAyMjEsIDYyLCA1LCAyMjYsIDI0NiwgNjEsIDUsIDIyNiwgMjQ2LCA2MiwgMjM2LCAxMDYsIAorICAgIDI0MSwgMTA5LCA2MSwgMjM2LCAxMDYsIDI0MSwgMTA5LCA2MiwgODAsIDI0MSwgMTA5LCA2MSwgODAsIDI0MSwgMTA5LCA0OSwgCisgICAgNTMsIDMsIDUsIDI0NiwgNjEsIDEyNiwgOTYsIDI1MCwgOTEsIDQ5LCA1MywgMywgNDMsIDIxOCwgNzYsIDE2MywgOTYsIAorICAgIDIxMSwgMTcxLCA0NywgOTYsIDIwNywgMTM0LCA1MywgMywgODAsIDk1LCA5NiwgMjA3LCAxMzQsIDUzLCAzLCA1MiwgODAsIAorICAgIDk1LCA5NiwgMjA3LCAxMzQsIDUzLCAyMzksIDEyMCwgMTQyLCA5NiwgMjA3LCAxMzQsIDIwOCwgNzAsIDI0NCwgMTQ1LCA0NywgCisgICAgOTYsIDUzLCAzLCAyNDIsIDgzLCAyMTEsIDc3LCA5NiwgNTMsIDMsIDIwOSwgMjQ5LCAzLCA4MCwgOTUsIDk2LCA1MywgMywgCisgICAgMjA5LCAyNDksIDMsIDUyLCA4MCwgOTUsIDk2LCAyMDcsIDEzNCwgNTMsIDMsIDIwOSwgMjQ4LCA5NiwgMjA3LCAxMzQsIDUzLCAKKyAgICAzLCAyMDksIDI0OSwgMywgODAsIDk1LCA5NiwgMjA3LCAxMzQsIDUzLCAzLCAyMDksIDI0OSwgMywgNTIsIDgwLCA5NSwgOTYsIAorICAgIDUzLCAyMDksIDI1LCAyMDMsIDE5NiwgMjA0LCA3NiwgNTMsIDIxOCwgNTksIDI0MywgMTY0LCAyMjcsIDIyMiwgMjQxLCAzNSwgCisgICAgMiwgODcsIDk2LCA0NywgMjE2LCA3NCwgMjA4LCAyMjgsIDIxOSwgMjU1LCA4NywgOTYsIDQ3LCA5NiwgNTMsIDg3LCAyMTYsIAorICAgIDc0LCAyNTEsIDcsIDE1NiwgMTM1LCA4NiwgNTMsIDIwOSwgMjUsIDIzNywgMjQ2LCA4NiwgNTMsIDIwOSwgMjUsIDIxMCwgCisgICAgMTk3LCA5NiwgMjE3LCA1OCwgNDcsIDg2LCAyMTcsIDU4LCA0NywgMjE2LCA3NCwgMjA4LCAyMjgsIDIxOSwgMjU1LCA4NywgCisgICAgODYsIDQ3LCA4NiwgNTMsIDg3LCAyMTYsIDc0LCAyNTEsIDcsIDE1NiwgMTM1LCAyMDgsIDIyOCwgMjE5LCAyNTUsIDg3LCAKKyAgICA5NiwgNDcsIDk2LCA1MywgODcsIDI1MSwgNywgMTU2LCAxMzUsIDk2LCA1MywgODcsIDIxNiwgNzQsIDIwOCwgMjI4LCAyMTksIAorICAgIDI1NCwgODYsIDUzLCA4NywgMjE2LCA3NCwgMjA4LCAyMjgsIDIxOSwgMjU0LCAxODMsIDIwOCwgODQsIDIwMiwgMzAsIDQ3LCAKKyAgICAyMTIsIDIyOCwgMjEyLCA1OSwgMTUzLCA0NywgMjEyLCAyMjgsIDI0OSwgMjIsIDIxMSwgMjM4LCA0NywgNjEsIDIyNSwgMTAsIAorICAgIDIxMSwgOTQsIDYyLCA1LCAyMTEsIDk0LCA2MSwgNSwgMjExLCA5NCwgNjIsIDIxNiwgMTEsIDIxOCwgMjU1LCA2MSwgMjE2LCAKKyAgICAxMSwgMjE4LCAyNTUsIDc5LCAyMjgsIDgsIDI0NiwgNjEsIDc5LCAyMTksIDIwNSwgMywgMjE5LCAyMDUsIDIzMSwgNiwgNzksIAorICAgIDI0NiwgNjIsIDMsIDI0NiwgNjIsIDIzMSwgNiwgNzksIDI0NiwgNjEsIDc5LCA0MywgMjE0LCAyNTQsIDIxMiwgNTksIDE1MywgCisgICAgNTMsIDMsIDIzNiwgMTE1LCAyMzcsIDY0LCAyNDksIDIyLCAyMTEsIDIzOCwgNTMsIDMsIDIzNiwgMTE1LCAyMDksIDI0OCwgCisgICAgMjEyLCA1OSwgMTUzLCA1MywgMywgMjM2LCAxMDYsIDIwOSwgMjQ4LCAyNDksIDIyLCAyMTEsIDIzOCwgNTMsIDMsIDIzNiwgCisgICAgMTA2LCAyMDksIDI0OCwgMjQ4LCAxMTgsIDUzLCAyMTgsIDU5LCAxODMsIDIwOSwgODQsIDE1MywgMjQxLCAxNzUsIDIxMiwgCisgICAgMjI4LCAyNDgsIDExOCwgNTMsIDIxOCwgNTksIDE4MywgMjA5LCA4NCwgMTUzLCAyNDEsIDE3NSwgOTYsIDIwOCwgODQsIDQ3LCAKKyAgICAxNzcsIDIwOCwgODQsIDQ3LCA4NiwgMjA4LCA4NCwgNDcsIDE4MywgMjA4LCA4NCwgNDcsIDQ5LCA1MCwgMjA4LCA4NCwgNDcsIAorICAgIDExMiwgMTIxLCAyMDgsIDg0LCA0NywgMTUzLCAyMDQsIDQ2LCAyMDgsIDg0LCA0NywgMTUzLCAyNDEsIDE3NiwgMjA4LCA4NCwgCisgICAgNDcsIDIxMSwgMjM4LCAyNDEsIDE3NiwgMjA4LCA4NCwgNDcsIDIxMSwgMjM4LCAyMDQsIDQ2LCAyMDgsIDg0LCA0NywgOTYsIAorICAgIDIwOCwgODQsIDI0NCwgMTQzLCA0NywgMTc3LCAyMDgsIDg0LCAyNDQsIDE0MywgNDcsIDg2LCAyMDgsIDg0LCAyNDQsIDE0MywgCisgICAgNDcsIDE4MywgMjA4LCA4NCwgMjQ0LCAxNDMsIDQ3LCAyNDYsIDE4LCAyMDgsIDg0LCAxNzEsIDI0NiwgNjIsIDQ3LCAyNTAsIAorICAgIDE5NCwgMjA4LCA4NCwgMTcxLCAyNDYsIDYyLCA0NywgOTYsIDIwOCwgODQsIDUzLCAyMDgsIDE3MywgMTQyLCAxNzcsIDIwOCwgCisgICAgODQsIDUzLCAyMDgsIDE3MywgMTQyLCA4NiwgMjA4LCA4NCwgNTMsIDIwOCwgMTczLCAxNDIsIDE4MywgMjA4LCA4NCwgNTMsIAorICAgIDIwOCwgMTczLCAxNDIsIDE1MywgMjA0LCA0NiwgMjA4LCA4NCwgNTMsIDIwOCwgMTczLCAxNDIsIDE1MywgMjQxLCAxNzYsIAorICAgIDIwOCwgODQsIDUzLCAyMDgsIDE3MywgMTQyLCAyMTEsIDIzOCwgMjQxLCAxNzYsIDIwOCwgODQsIDUzLCAyMDgsIDE3MywgCisgICAgMTQyLCAyMTEsIDIzOCwgMjA0LCA0NiwgMjA4LCA4NCwgNTMsIDIwOCwgMTczLCAxNDIsIDk2LCAyMDgsIDg0LCA1MywgMywgCisgICAgNTIsIDIzNiwgMTA2LCA5NSwgMTc3LCAyMDgsIDg0LCA1MywgMywgNTIsIDIzNiwgMTA2LCA5NSwgODYsIDIwOCwgODQsIDUzLCAKKyAgICAzLCA1MiwgMjM2LCAxMDYsIDk1LCAxODMsIDIwOCwgODQsIDUzLCAzLCA1MiwgMjM2LCAxMDYsIDk1LCAyMzYsIDEwNiwgCisgICAgMjEwLCAxMSwgMjI5LCAxNTEsIDgwLCAyMTAsIDExLCAyMjksIDE1MSwgOTYsIDIwOCwgODQsIDUzLCAxMTUsIDg2LCAyMDgsIAorICAgIDg0LCA0NywgMTc3LCAyMDgsIDg0LCA1MywgOTYsIDc2LCAxODMsIDIwOCwgODQsIDQ3LCA4NiwgMjA4LCA4NCwgNTMsIDExNSwgCisgICAgOTYsIDIwOCwgODQsIDQ3LCAxODMsIDIwOCwgODQsIDUzLCA5NiwgNzYsIDE3NywgMjA4LCA4NCwgNDcsIDk2LCAyMDgsIDg0LCAKKyAgICAyMTksIDE0NiwgMjUwLCA5MSwgMTc3LCAyMDgsIDg0LCAyMTksIDE0NiwgMjUwLCA5MSwgODYsIDIwOCwgODQsIDIxOSwgCisgICAgMTQ2LCAyNTAsIDkxLCAxODMsIDIwOCwgODQsIDIxOSwgMTQ2LCAyNTAsIDkxLCA5NiwgNjIsIDQzLCA2MSwgNDcsIDE3NywgCisgICAgNjIsIDQzLCA2MSwgNDcsIDg2LCA2MiwgNDMsIDYxLCA0NywgMTgzLCA2MiwgNDMsIDYxLCA0NywgMjUwLCAxOTQsIDIwOCwgCisgICAgODQsIDUwLCAyMDcsIDkyLCA0NywgMjUwLCAxOTQsIDIwOCwgODQsIDI0NywgMjQ4LCAyMDcsIDkyLCA0NywgMjUwLCAxOTQsIAorICAgIDIwOCwgODQsIDQ5LCAyMDcsIDkyLCA0NywgMjUwLCAxOTQsIDIwOCwgODQsIDIwOCwgMTQ1LCAyMDcsIDkyLCA0NywgMjE2LCAKKyAgICA3OCwgMjI3LCAyMjIsIDIxNiwgNzgsIDIxNiwgMTYsIDIyMiwgMjEyLCAyMjcsIDIyMiwgMjIyLCAyMTIsIDIxNiwgMTYsIAorICAgIDIzOSwgMTQ3LCAyNDUsIDE2NiwgMjUwLCA5MiwgMjQ2LCA1NywgMjUwLCAxOTMsIDg2LCA2MiwgNDcsIDIwOSwgMzEsIDIwOCwgCisgICAgMTQzLCA5NiwgMjQxLCAzMSwgMjUwLCA5NCwgMjA5LCAzMSwgMjE2LCAxMiwgMTc3LCAyNDEsIDMxLCAyNTAsIDk0LCAyMDksIAorICAgIDMxLCAyMDgsIDE0MywgODYsIDI0MSwgMzEsIDI1MCwgOTQsIDIwOSwgMzEsIDIyNywgMjE4LCAxODMsIDI0MSwgMzEsIDI1MCwgCisgICAgOTQsIDYyLCA5NiwgMjQxLCAzMSwgMjUwLCA5NCwgNjIsIDE3NywgMjQxLCAzMSwgMjUwLCA5NCwgNjIsIDg2LCAyNDEsIDMxLCAKKyAgICAyNTAsIDk0LCA2MiwgMTgzLCAyNDEsIDMxLCAyNTAsIDk0LCAxODMsIDIwOCwgODQsIDUzLCAzLCAxNjMsIDIwOCwgMjExLCAKKyAgICAyMjcsIDIxMiwgMTgzLCAyMDgsIDg0LCA1MywgMywgMTYzLCAyMDgsIDIxMSwgMjE2LCA1LCAxNzcsIDIwOCwgODQsIDUzLCAKKyAgICAzLCAxNjMsIDIwOCwgMjExLCAyMjcsIDIxMiwgMTc3LCAyMDgsIDg0LCA1MywgMywgMTYzLCAyMDgsIDIxMSwgMjE2LCA1LCAKKyAgICA5NiwgMjA4LCA4NCwgNTMsIDMsIDE2MywgMjA4LCAyMTEsIDIwNiwgMjEyLCA4NiwgMjA4LCA4NCwgNTMsIDMsIDE2MywgCisgICAgMjA4LCAyMTEsIDIwNiwgMjEyLCA5NiwgMjA4LCA4NCwgNTMsIDMsIDE2MywgMjA4LCAyMTEsIDI0MiwgNjgsIDg2LCAyMDgsIAorICAgIDg0LCA1MywgMywgMTYzLCAyMDgsIDIxMSwgMjQyLCA2OCwgNjIsIDI0NSwgODYsIDE4MywgMjUsIDk2LCA0NywgNjIsIDI0NSwgCisgICAgODYsIDE4MywgMjUsIDg2LCA0NywgNjIsIDI0NSwgODYsIDE3NywgMjUsIDk2LCA0NywgNjIsIDI0NSwgODYsIDE3NywgMjUsIAorICAgIDg2LCA0NywgNjIsIDI0NSwgODYsIDk2LCAyNSwgMTc3LCA0NywgNjIsIDI0NSwgODYsIDg2LCAyNSwgMTc3LCA0NywgNjIsIAorICAgIDI0NSwgODYsIDk2LCAyNSwgMTgzLCA0NywgNjIsIDI0NSwgODYsIDg2LCAyNSwgMTgzLCA0NywgMjE2LCA1NSwgNTMsIDEyMSwgCisgICAgMjI3LCAyMjIsIDIxNiwgNTUsIDUzLCAxMjEsIDIxNiwgMTYsIDIxNiwgNTUsIDUzLCAxMTIsIDIyNywgMjIyLCAyMTYsIDU1LCAKKyAgICA1MywgMTEyLCAyMTYsIDE2LCAyMTYsIDU1LCA1MywgNDksIDIwNiwgMjI0LCAyMTYsIDU1LCA1MywgNTAsIDIwNiwgMjI0LCAKKyAgICAyMTYsIDU1LCA1MywgNDksIDI0MiwgNzAsIDIxNiwgNTUsIDUzLCA1MCwgMjQyLCA3MCwgMTc3LCA2MSwgNTMsIDIzOSwgCisgICAgMTIwLCAyNDgsIDIzMSwgMywgMjM2LCAxMDYsIDE0MiwgMTEyLCAyNTAsIDk1LCAyMzEsIDUwLCAzNCwgMjE2LCAxNDQsIAorICAgIDI0NywgMjMzLCAyNDgsIDI0OCwgOTgsIDMsIDE1NywgMjAzLCAxOTYsIDQzLCAyMDMsIDE5NiwgNDMsIDI2LCAyMDMsIDE5NiwgCisgICAgNjIsIDUxLCAyNDYsIDIxNSwgNjIsIDI0MywgMjIyLCAyNDYsIDIxNSwgMjA3LCAxNzQsIDYyLCAyMTgsIDI1NSwgMjM2LCAKKyAgICAxMDYsIDYyLCAyMjAsIDgxLCA2MiwgMjIwLCA4MSwgNjIsIDIyNSwgMTAsIDIwNiwgMjIzLCAyMDgsIDg2LCAyNDYsIDIxNSwgCisgICAgNjIsIDIyNSwgMTAsIDI0MiwgNjksIDIwOCwgODYsIDI0NiwgMjE1LCA2MiwgMjI1LCAxMCwgMjI3LCAyMTcsIDIwOCwgODYsIAorICAgIDI0NiwgMjE1LCA2MiwgMjI1LCAxMCwgMjE2LCAxMSwgMjA4LCA4NiwgMjQ2LCAyMTUsIDIwOCwgMTQ1LCAxNjIsIDYyLCAKKyAgICAyNDYsIDYxLCAyNDcsIDI0OCwgMTYyLCA2MiwgMjQ2LCA2MSwgMTU3LCAyMzksIDE0NywgMjE4LCA2MSwgNjIsIDI0NSwgODIsIAorICAgIDIxNSwgMTk4LCAxNTcsIDIzOSwgMTQ3LCAyMTgsIDYxLCA2MiwgMjQ1LCA4MiwgNjEsIDIzOSwgMTQ3LCAyMTgsIDYxLCAKKyAgICAyNDUsIDgyLCAyMTUsIDE5OCwgNjEsIDIzOSwgMTQ3LCAyMTgsIDYxLCAyNDUsIDgyLCA1MSwgMjE4LCAzNCwgMjMxLCAzMSwgCisgICAgMjA2LCAyNTAsIDU0LCA5NiwgMjA3LCAxMzQsIDUzLCAzLCAyMDgsIDg2LCAyNTAsIDkzLCAxNzcsIDIwNywgMTM0LCA1MywgCisgICAgMywgMjA4LCA4NiwgMjUwLCA5MywgODYsIDIwNywgMTM0LCA1MywgMywgMjA4LCA4NiwgMjUwLCA5MywgMTgzLCAyMDcsIAorICAgIDEzNCwgNTMsIDMsIDIwOCwgODYsIDI1MCwgOTMsIDE4MCwgNiwgMSwgMjUwLCAwLCAxODAsIDYsIDEsIDI0NywgMTgxLCAKKyAgICAxODAsIDYsIDEsIDIwNiwgNTMsIDE4MCwgNiwgMSwgMjM4LCA1MCwgMTgwLCA2LCAxLCAyNDMsIDEwOCwgMTgwLCA2LCAxLCAKKyAgICAyMDMsIDI0LCAxODAsIDYsIDEsIDIwMiwgNjQsIDE4MCwgNiwgMSwgMjQxLCAyNTAsIDE4MCwgNiwgMSwgMjAyLCA4OSwgCisgICAgMTgwLCA2LCAxLCAyMzAsIDE4OCwgMTgwLCA2LCAxLCA4MSwgMjMwLCAxODgsIDE4MCwgNiwgMSwgNzUsIDE4MCwgNiwgMSwgCisgICAgMjQzLCAxMjgsIDE4MCwgNiwgMSwgMjMwLCAxMCwgMTgwLCA2LCAxLCAyMjcsIDc5LCAxODAsIDYsIDEsIDIyMywgMTY3LCAKKyAgICAxODAsIDYsIDEsIDIyMywgNjksIDE4MCwgNiwgMSwgMjIwLCAyMCwgMTgwLCA2LCAxLCAyMTgsIDU2LCAxODAsIDYsIDEsIAorICAgIDIxNSwgMjQ0LCAxODAsIDYsIDEsIDIxMiwgNDEsIDE4MCwgNiwgMSwgMjA3LCAxNjEsIDE4MCwgNiwgMSwgMjA3LCAxMCwgCisgICAgMTgwLCA2LCAxLCAyMzksIDEyMywgMTgwLCA2LCAxLCAyMzcsIDIzLCAxODAsIDYsIDEsIDIxOSwgMjE3LCAxODAsIDYsIDEsIAorICAgIDIxOSwgMzQsIDE4MCwgNiwgMSwgMjEyLCAyMDIsIDE4MCwgNiwgMSwgMjA3LCAyNTUsIDE4MCwgNiwgMSwgMjQ2LCAxMDQsIAorICAgIDE4MCwgNiwgMSwgMjEzLCA5MCwgMTgwLCA2LCAxLCAyMDMsIDMwLCAxODAsIDYsIDEsIDIwMywgMzIsIDE4MCwgNiwgMSwgCisgICAgMjAzLCA2NCwgMTgwLCA2LCAxLCAyMTEsIDIwNCwgMTUyLCAxODAsIDYsIDEsIDIwMiwgMjEzLCAxODAsIDYsIDEsIDUsIAorICAgIDIwMiwgMTgzLCAxODAsIDYsIDEsIDUsIDIwMiwgMTg0LCAzLCAyMDksIDI0OCwgMTgwLCA2LCAxLCAyMDIsIDI0NywgMTgwLCAKKyAgICA2LCAxLCAyMzAsIDIyOSwgNSwgMjAyLCAxODMsIDE4MCwgNiwgMSwgMjQ4LCA3MywgMjAyLCAxODMsIDE4MCwgNiwgMSwgCisgICAgMjMwLCAyMjksIDI0OCwgNzMsIDIwMiwgMTgzLCAxODAsIDYsIDEsIDIzOSwgMjM1LCAxODAsIDYsIDEsIDIzMCwgMTg2LCAKKyAgICAxODAsIDYsIDEsIDIxMiwgMjAxLCAxODAsIDYsIDEsIDIwOCwgNjAsIDYzLCAxODAsIDYsIDEsIDIyNywgMjUyLCAyMjMsIAorICAgIDE2NywgMTgwLCA1LCAxLCAyNTAsIDAsIDE4MCwgNSwgMSwgMjQ3LCAxODEsIDE4MCwgNSwgMSwgMjA2LCA1MywgMTgwLCA1LCAKKyAgICAxLCAyMzgsIDUwLCAxODAsIDUsIDEsIDI0MywgMTA4LCAxODAsIDUsIDEsIDIwMywgMjQsIDE4MCwgNSwgMSwgMjAyLCA2NCwgCisgICAgMTgwLCA1LCAxLCAyNDEsIDI1MCwgMTgwLCA1LCAxLCAyMDIsIDg5LCAxODAsIDUsIDEsIDIzMCwgMTg4LCAxODAsIDUsIDEsIAorICAgIDgxLCAyMzAsIDE4OCwgMTgwLCA1LCAxLCA3NSwgMTgwLCA1LCAxLCAyNDMsIDEyOCwgMTgwLCA1LCAxLCAyMzAsIDEwLCAKKyAgICAxODAsIDUsIDEsIDIyNywgNzksIDE4MCwgNSwgMSwgMjIzLCAxNjcsIDE4MCwgNSwgMSwgMjIzLCA2OSwgMTgwLCA1LCAxLCAKKyAgICAyMjAsIDIwLCAxODAsIDUsIDEsIDIxOCwgNTYsIDE4MCwgNSwgMSwgMjE1LCAyNDQsIDE4MCwgNSwgMSwgMjEyLCA0MSwgCisgICAgMTgwLCA1LCAxLCAyMDcsIDE2MSwgMTgwLCA1LCAxLCAyMDcsIDEwLCAxODAsIDUsIDEsIDIzOSwgMTIzLCAxODAsIDUsIDEsIAorICAgIDIzNywgMjMsIDE4MCwgNSwgMSwgMjE5LCAyMTcsIDE4MCwgNSwgMSwgMjE5LCAzNCwgMTgwLCA1LCAxLCAyMTIsIDIwMiwgCisgICAgMTgwLCA1LCAxLCAyMDcsIDI1NSwgMTgwLCA1LCAxLCAyNDYsIDEwNCwgMTgwLCA1LCAxLCAyMTMsIDkwLCAxODAsIDUsIDEsIAorICAgIDIwMywgMzAsIDE4MCwgNSwgMSwgMjAzLCAzMiwgMTgwLCA1LCAxLCAyMDMsIDY0LCAxODAsIDUsIDEsIDIxMSwgMjA0LCAKKyAgICAxNTIsIDE4MCwgNSwgMSwgMjAyLCAyMTMsIDE4MCwgNSwgMSwgNSwgMjAyLCAxODMsIDE4MCwgNSwgMSwgNSwgMjAyLCAxODQsIAorICAgIDMsIDIwOSwgMjQ4LCAxODAsIDUsIDEsIDIwMiwgMjQ3LCAxODAsIDUsIDEsIDIzMCwgMjI5LCA1LCAyMDIsIDE4MywgMTgwLCAKKyAgICA1LCAxLCAyNDgsIDczLCAyMDIsIDE4MywgMTgwLCA1LCAxLCAyMzAsIDIyOSwgMjQ4LCA3MywgMjAyLCAxODMsIDE4MCwgNSwgCisgICAgMSwgMjM5LCAyMzUsIDE4MCwgNSwgMSwgMjMwLCAxODYsIDE4MCwgNSwgMSwgMjEyLCAyMDEsIDE4MCwgNSwgMSwgMjA4LCAKKyAgICA2MCwgNjMsIDE4MCwgNSwgMSwgMjI3LCAyNTIsIDIyMywgMTY3LCA4LCA2LCAxLCAyMjgsIDEzMSwgMywgNTIsIDE0MiwgOCwgCisgICAgNSwgMSwgMjI4LCAxMzEsIDMsIDUyLCAxNDIsIDgsIDYsIDEsIDIyOCwgMTMxLCAzLCAxMDEsIDIwOCwgMjI3LCA4LCA2LCAxLCAKKyAgICAyMTksIDE4NSwgMywgOTUsIDgsIDYsIDEsIDIxNywgMSwgMywgMjA5LCAyNDgsIDgsIDUsIDEsIDM0LCAzLCA5NSwgOCwgNSwgCisgICAgMSwgMjEwLCA3MCwgMywgMjQzLCAyMjgsIDk1LCA4LCA2LCAxLCAyMzcsIDE3MiwgMywgMjQ0LCAyMCwgOCwgNSwgMSwgMjM3LCAKKyAgICAxNzIsIDMsIDI0NCwgMjAsIDgsIDYsIDEsIDIzMCwgNTUsIDMsIDI0NCwgMjAsIDgsIDUsIDEsIDIzMCwgNTUsIDMsIDI0NCwgCisgICAgMjAsIDgsIDYsIDEsIDIwMiwgMTYwLCAzLCAyNDQsIDIwLCA4LCA1LCAxLCAyMDIsIDE2MCwgMywgMjQ0LCAyMCwgOCwgNiwgCisgICAgMSwgMjUxLCAyLCA4LCA2LCAxLCAyMjYsIDE4NiwgMywgMTEzLCA4LCA2LCAxLCAyMDcsIDE3NCwgNjMsIDgsIDYsIDEsIAorICAgIDIwNywgMTc0LCAyNTEsIDIsIDgsIDUsIDEsIDIwNiwgMTY1LCAzLCA1MCwgMTEzLCA4LCA2LCAxLCAyMDQsIDE0NSwgMywgCisgICAgMTEzLCA4LCA1LCAxLCAyMDQsIDE0NSwgMywgMTEzLCA4LCA1LCAxLCAyMDYsIDE2NSwgMywgMjQ1LCA5NSwgOCwgNiwgMSwgCisgICAgMTYyLCAyMzcsIDE3MSwgOCwgNSwgMSwgMTYyLCAyMzcsIDE3MSwgOCwgNSwgMSwgMjA5LCAyNDYsIDIxOCwgMTkyLCA4LCA1LCAKKyAgICAxLCAxODgsIDMsIDIyMSwgMTYzLCA4LCA1LCAxLCAyMDcsIDE3NCwgMjE3LCAxLCAzLCAyMDksIDI0OCwgOCwgNSwgMSwgCisgICAgMTU4LCAzLCAxMjQsIDIxNSwgMjUzLCAyMzEsIDYsIDgsIDEsIDUsIDYsIDIwNywgMTc0LCA3NCwgOCwgMjEwLCAyNDYsIDUsIAorICAgIDEsIDIzMCwgMTg0LCA2NSwgMSwgNiwgMjA2LCAxNjQsIDgsIDYsIDEsIDIxNSwgOTQsIDMsIDIxMCwgMTY5LCAyMDksIDI0OCwgCisgICAgOCwgNiwgMSwgMjAyLCAxNjAsIDMsIDIxMCwgMTY5LCAyMDksIDI0OCwgODQsIDYsIDEsIDI1MSwgMjQsIDg0LCA1LCAxLCAKKyAgICAyNTEsIDI0LCA4NCwgNiwgMSwgMjA1LCAyMjcsIDg0LCA1LCAxLCAyMDUsIDIyNywgODQsIDYsIDEsIDIzOCwgMjM1LCA4NCwgCisgICAgNSwgMSwgMjM4LCAyMzUsIDg0LCA2LCAxLCAyNDQsIDE4MCwgODQsIDUsIDEsIDI0NCwgMTgwLCA4NCwgNiwgMSwgMjQxLCAKKyAgICAxNDQsIDg0LCA1LCAxLCAyNDEsIDE0NCwgODQsIDYsIDEsIDIxMSwgMjQzLCA4NCwgNSwgMSwgMjExLCAyNDMsIDg0LCA2LCAKKyAgICAxLCAyMDIsIDk5LCA4NCwgNSwgMSwgMjAyLCA5OSwgODQsIDYsIDEsIDIzNywgODAsIDg0LCA1LCAxLCAyMzcsIDgwLCA4NCwgCisgICAgNiwgMSwgMjA5LCA3MiwgODQsIDUsIDEsIDIwOSwgNzIsIDg0LCA2LCAxLCAyMzUsIDE2OCwgODQsIDUsIDEsIDIzNSwgMTY4LCAKKyAgICA4NCwgNiwgMSwgMjI5LCAyNTIsIDg0LCA1LCAxLCAyMjksIDI1MiwgODQsIDYsIDEsIDIyNywgMjQ4LCA4NCwgNSwgMSwgCisgICAgMjI3LCAyNDgsIDg0LCA2LCAxLCAyMjQsIDE1NSwgODQsIDUsIDEsIDIyNCwgMTU1LCA4NCwgNiwgMSwgMjIyLCAxMDAsIDg0LCAKKyAgICA1LCAxLCAyMjIsIDEwMCwgODQsIDYsIDEsIDIyOCwgMjI1LCA4NCwgNSwgMSwgMjI4LCAyMjUsIDg0LCA2LCAxLCA3OCwgODQsIAorICAgIDUsIDEsIDc4LCA4NCwgNiwgMSwgMjE4LCAxNjcsIDg0LCA1LCAxLCAyMTgsIDE2NywgODQsIDYsIDEsIDIxNSwgMjI3LCA4NCwgCisgICAgNSwgMSwgMjE1LCAyMjcsIDg0LCA2LCAxLCAyMTIsIDEzMiwgODQsIDUsIDEsIDIxMiwgMTMyLCA4NCwgNiwgMSwgMjA5LCAKKyAgICAyMDcsIDg0LCA1LCAxLCAyMDksIDIwNywgODQsIDYsIDEsIDIwNywgMzksIDg0LCA1LCAxLCAyMDcsIDM5LCA4NCwgNiwgMSwgCisgICAgMjQwLCAyNiwgODQsIDUsIDEsIDI0MCwgMjYsIDg0LCA2LCAxLCAyMjksIDEyMiwgODQsIDUsIDEsIDIyOSwgMTIyLCA4NCwgCisgICAgNiwgMSwgMjE3LCAyMDIsIDg0LCA1LCAxLCAyMTcsIDIwMiwgODQsIDYsIDEsIDIyMCwgMTIsIDg0LCA1LCAxLCAyMjAsIDEyLCAKKyAgICA4NCwgNiwgMSwgMjQzLCAyMjYsIDI1MSwgMzAsIDg0LCA1LCAxLCAyNDMsIDIyNiwgMjUxLCAzMCwgODQsIDYsIDEsIDM4LCAKKyAgICA4NCwgMjUxLCA1OSwgODQsIDUsIDEsIDM4LCA4NCwgMjUxLCA1OSwgODQsIDYsIDEsIDI0NSwgMTEzLCAyNDEsIDE0NCwgODQsIAorICAgIDUsIDEsIDI0NSwgMTEzLCAyNDEsIDE0NCwgODQsIDYsIDEsIDI0MywgMjI2LCAyMjksIDI1MiwgODQsIDUsIDEsIDI0MywgCisgICAgMjI2LCAyMjksIDI1MiwgODQsIDYsIDEsIDI0MywgMjI2LCAyMjIsIDEwMCwgODQsIDUsIDEsIDI0MywgMjI2LCAyMjIsIAorICAgIDEwMCwgODQsIDYsIDEsIDI0NSwgMTEzLCAyMjIsIDEwMCwgODQsIDUsIDEsIDI0NSwgMTEzLCAyMjIsIDEwMCwgODQsIDYsIAorICAgIDEsIDM4LCA4NCwgMjIwLCAxMiwgODQsIDUsIDEsIDM4LCA4NCwgMjIwLCAxMiwgODQsIDYsIDEsIDIxNCwgMjQ2LCA4NCwgNSwgCisgICAgMSwgMjE0LCAyNDYsIDg0LCA2LCAxLCAyNDUsIDEyOCwgMjEzLCAzNSwgODQsIDUsIDEsIDI0NSwgMTI4LCAyMTMsIDM1LCAKKyAgICA4NCwgNiwgMSwgMzgsIDg0LCAyMTMsIDM1LCA4NCwgNSwgMSwgMzgsIDg0LCAyMTMsIDM1LCA4NCwgNiwgMSwgMzgsIDg0LCAKKyAgICAyNDEsIDcsIDg0LCA1LCAxLCAzOCwgODQsIDI0MSwgNywgODQsIDYsIDEsIDI1MSwgNDMsIDIyOSwgMTI3LCA4NCwgNSwgMSwgCisgICAgMjUxLCA0MywgMjI5LCAxMjcsIDg0LCA2LCAxLCAyNDMsIDIyNiwgMjM2LCAxMDcsIDg0LCA1LCAxLCAyNDMsIDIyNiwgMjM2LCAKKyAgICAxMDcsIDg0LCA2LCAxLCAzOCwgODQsIDIzNiwgMTA3LCA4NCwgNSwgMSwgMzgsIDg0LCAyMzYsIDEwNywgODQsIDYsIDEsIAorICAgIDM4LCA4NCwgMTUyLCA4NCwgNSwgMSwgMzgsIDg0LCAxNTIsIDg0LCA2LCAxLCAyMjgsIDEzMCwgMTUyLCA4NCwgNSwgMSwgCisgICAgMjI4LCAxMzAsIDE1MiwgODQsIDYsIDEsIDM4LCA4NCwgMjM3LCA0MiwgODQsIDUsIDEsIDM4LCA4NCwgMjM3LCA0MiwgODQsIAorICAgIDYsIDEsIDM4LCA4NCwgMjM3LCA4MywgODQsIDUsIDEsIDM4LCA4NCwgMjM3LCA4MywgODQsIDYsIDEsIDM4LCA4NCwgMjM4LCAKKyAgICAyMzAsIDg0LCA1LCAxLCAzOCwgODQsIDIzOCwgMjMwLCA4NCwgNiwgMSwgMzgsIDg0LCAyNDMsIDEzMSwgODQsIDUsIDEsIAorICAgIDM4LCA4NCwgMjQzLCAxMzEsIDg0LCA2LCAxLCAzOCwgODQsIDIxMywgMSwgODQsIDUsIDEsIDM4LCA4NCwgMjEzLCAxLCA4NCwgCisgICAgNiwgMSwgMzgsIDIyMSwgNTQsIDIxMywgMSwgODQsIDUsIDEsIDM4LCAyMjEsIDU0LCAyMTMsIDEsIDg0LCA2LCAxLCAzOCwgCisgICAgMjIxLCA1NCwgMjIyLCAxNTEsIDg0LCA1LCAxLCAzOCwgMjIxLCA1NCwgMjIyLCAxNTEsIDg0LCA2LCAxLCAzOCwgMjIxLCAKKyAgICA1NCwgMjIwLCAyNDgsIDg0LCA1LCAxLCAzOCwgMjIxLCA1NCwgMjIwLCAyNDgsIDg0LCA2LCAxLCAzOCwgMjIxLCA1NCwgCisgICAgMjA0LCA3NywgODQsIDUsIDEsIDM4LCAyMjEsIDU0LCAyMDQsIDc3LCA4NCwgMTYsIDIzMCwgMTgsIDg0LCAxNiwgMjI0LCAKKyAgICAxNTYsIDIxNSwgMjI3LCA4NCwgMTYsIDIxOCwgMTY4LCAyMTUsIDIyNywgODQsIDE2LCAyMTEsIDg1LCA4NCwgMTYsIDIwOSwgCisgICAgMjA4LCAyMTUsIDIyNywgODQsIDE2LCAyMjksIDEyMywgMjE1LCAyMjcsIDg0LCAxNiwgMjEzLCAyLCAyMTIsIDEzMiwgODQsIAorICAgIDYsIDEsIDI0NSwgMTEzLCAyMTMsIDM1LCA4NCwgNSwgMSwgMjQ1LCAxMTMsIDIxMywgMzUsIDg0LCA2LCAxLCAyNDUsIDExMywgCisgICAgMjM4LCAyMzAsIDg0LCA1LCAxLCAyNDUsIDExMywgMjM4LCAyMzAsIDg0LCAzOSwgMjIyLCAxMDEsIDU1LCA4NCwgMzksIAorICAgIDIxMSwgMTk3LCAyNTAsIDY3LCA4NCwgMzksIDIxMSwgMTk3LCAyMjcsIDE4NiwgODQsIDYsIDEsIDI0OCwgMTYsIDIyOSwgCisgICAgMTI3LCA4NCwgNSwgMSwgMjQ4LCAxNiwgMjI5LCAxMjcsIDg0LCAzOCwgMjIxLCA1NCwgMjM5LCAxMDIsIDIxMSwgNjEsIDg0LCAKKyAgICAzOCwgMjIxLCA1NCwgMjQzLCAxNjcsIDIxNywgNDcsIDgyLCA4NCwgMzgsIDIyMSwgNTQsIDIzMSwgMzAsIDIxNywgNDcsIAorICAgIDgyLCA4NCwgMzgsIDIyMSwgNTQsIDIwNiwgNDAsIDI0MywgMTQxLCA4NCwgMjM5LCAxMzgsIDExOCwgMjM3LCAxMzcsIDg0LCAKKyAgICAyMzksIDEwMiwgMjExLCA2MSwgODQsIDIyNCwgMjUsIDI0MywgMTQxLCAxMTQsIDUsIDEsIDI1MCwgMjMxLCAxMTQsIDUsIDEsIAorICAgIDI0OCwgMjQyLCAxMTQsIDUsIDEsIDIzOCwgMjM0LCAxMTQsIDUsIDEsIDI0MywgOTMsIDExNCwgNSwgMSwgMjQxLCA5MiwgCisgICAgMTE0LCA1LCAxLCAyMDUsIDIxMywgMTE0LCA1LCAxLCAyMDIsIDg3LCAxMTQsIDUsIDEsIDIwOSwgMjMwLCAxMTQsIDUsIDEsIAorICAgIDIzMSwgNDksIDExNCwgNSwgMSwgMjMwLCA0LCAxMTQsIDUsIDEsIDIyOCwgMiwgMTE0LCA1LCAxLCAyMjUsIDEyMiwgMTE0LCAKKyAgICA1LCAxLCAyMjMsIDc0LCAxMTQsIDUsIDEsIDIyMCwgMzEsIDExNCwgNSwgMSwgMjE5LCA5MSwgMTE0LCA1LCAxLCAyMDIsIAorICAgIDc2LCAxMTQsIDUsIDEsIDIxNiwgMjAyLCAxMTQsIDUsIDEsIDIxNCwgMjQzLCAxMTQsIDUsIDEsIDIwOSwgMjE4LCAxMTQsIAorICAgIDUsIDEsIDIwNiwgMjU1LCAxMTQsIDUsIDEsIDIxOCwgMjAwLCAxMTQsIDUsIDEsIDIyOSwgMTMyLCAxMTQsIDUsIDEsIDIzOCwgCisgICAgMTEwLCAxMTQsIDUsIDEsIDIxNywgMTExLCAxMTQsIDUsIDEsIDIxMiwgMjU1LCAxMTQsIDUsIDEsIDI0NiwgMTI5LCAxMTQsIAorICAgIDUsIDEsIDI0NywgNjEsIDExNCwgNSwgMSwgMjMwLCAxMzMsIDExNCwgNSwgMSwgMjQ2LCA2OCwgMTE0LCA1LCAxLCAyNDYsIAorICAgIDE4MywgMTE0LCA1LCAxLCAyMDMsIDE4MCwgMTE0LCA1LCAxLCAyMzAsIDE0NiwgMTE0LCA1LCAxLCAyMzcsIDE1NCwgMTE0LCAKKyAgICA1LCAxLCAyMzcsIDY3LCAxMTQsIDUsIDEsIDIzNiwgMjU0LCAxMTQsIDUsIDEsIDIwNCwgNjIsIDExNCwgNSwgMSwgMjM3LCAKKyAgICA5MiwgMTE0LCA1LCAxLCAyMzYsIDEzMiwgMTE0LCA1LCAxLCAyMDIsIDI0OSwgMTE0LCA1LCAxLCAyNTEsIDk4LCAyMDgsIAorICAgIDI0NywgMSwgMTk4LCAyMDgsIDI0NywgMSwgMjAzLCAxMDYsIDIwOCwgMjQ3LCAxLCAyMDMsIDEwNSwgMjA4LCAyNDcsIDEsIAorICAgIDIwMywgOTUsIDIwOCwgMjQ3LCAxLCAyMDMsIDkzLCAyMDgsIDI0NywgMSwgMjQ4LCAxMTIsIDI1MSwgMTQwLCAyMDMsIDg4LCAKKyAgICAyMDgsIDI0NywgMSwgMjAzLCA4OCwgMjA4LCAyNDcsIDEsIDIwMywgMTAzLCAyMDgsIDI0NywgMSwgMjAzLCAxMDAsIDIwOCwgCisgICAgMjQ3LCAxLCAyMDMsIDEwMiwgMjA4LCAyNDcsIDEsIDIwMywgMTAxLCAyMDgsIDI0NywgMSwgMjAzLCAxNSwgMjA4LCAyNDcsIAorICAgIDEsIDIwMywgOTcsIDIwOCwgMjQ3LCAxLCAyMDMsIDg2LCAyMDgsIDI0NywgMSwgMjA3LCAyMDAsIDIwMywgODYsIDIwOCwgCisgICAgMjQ3LCAxLCAyMDMsIDgzLCAyMDgsIDI0NywgMSwgMjAzLCA5MSwgMjA4LCAyNDcsIDEsIDI0OCwgMTEyLCAyNTEsIDE0MCwgCisgICAgMjAzLCA5MSwgMjA4LCAyNDcsIDEsIDIwNywgMjAwLCAyMDMsIDkxLCAyMDgsIDI0NywgMSwgMjAzLCA5MCwgMjA4LCAyNDcsIAorICAgIDEsIDIwMywgMTEwLCAyMDgsIDI0NywgMSwgMjAzLCA4NCwgMjA4LCAyNDcsIDEsIDIwNywgMjAwLCAyMDMsIDg0LCAyMDgsIAorICAgIDI0NywgMSwgMjAzLCA3MywgMjA4LCAyNDcsIDEsIDIwNywgMjAwLCAyMDMsIDczLCAyMDgsIDI0NywgMSwgMjAzLCAxMSwgCisgICAgMjA4LCAyNDcsIDEsIDIwMywgNTQsIDIwOCwgMjQ3LCAxLCAyNTEsIDcxLCAyMDMsIDU0LCAyMDgsIDI0NywgMSwgMjA3LCAKKyAgICAyMDAsIDIwMywgNTQsIDIwOCwgMjQ3LCAxLCAyMDMsIDgyLCAyMDgsIDI0NywgMSwgMjAzLCA4MSwgMjA4LCAyNDcsIDEsIAorICAgIDIwMywgNzgsIDIwOCwgMjQ3LCAxLCAyMDcsIDIwMCwgMjAzLCA5MiwgMjA4LCAyNDcsIDEsIDIwNywgMjAwLCAyMDMsIDc2LCAKKyAgICAyMDgsIDI0NywgMSwgMjAzLCA3NCwgMjA4LCAyNDcsIDEsIDIwMiwgMjEzLCAyMDgsIDI0NywgMSwgMjAzLCA3MSwgMjA4LCAKKyAgICAyNDcsIDEsIDIwMywgNzAsIDIwOCwgMjQ3LCAxLCAyMDMsIDk0LCAyMDgsIDI0NywgMSwgMjA3LCAyMDAsIDIwMywgOTQsIAorICAgIDIwOCwgMjQ3LCAxLCAyNTAsIDQsIDIwMywgOTQsIDIwOCwgMjQ3LCAxLCAyMDMsIDY5LCAyMDgsIDI0NywgMSwgMjAzLCA2NywgCisgICAgMjA4LCAyNDcsIDEsIDIwMywgNjgsIDIwOCwgMjQ3LCAxLCAyMDMsIDY2LCAyMDgsIDI0NywgMSwgMjAzLCA2NSwgMjA4LCAKKyAgICAyNDcsIDEsIDIwMywgMTA0LCAyMDgsIDI0NywgMSwgMjAzLCA2MywgMjA4LCAyNDcsIDEsIDIwMywgNjEsIDIwOCwgMjQ3LCAKKyAgICAxLCAyMDMsIDYwLCAyMDgsIDI0NywgMSwgMjAzLCA1OCwgMjA4LCAyNDcsIDEsIDIwMywgNTUsIDIwOCwgMjQ3LCAxLCAyMDksIAorICAgIDE5OSwgMjAzLCA1NSwgMjA4LCAyNDcsIDEsIDIwMywgNTMsIDIwOCwgMjQ3LCAxLCAyMDMsIDUyLCAyMDgsIDI0NywgMSwgCisgICAgMjAyLCAyNDcsIDIwOCwgMjQ3LCA2NSwgMSwgMjI4LCAxMDMsIDgyLCAyMDgsIDI0NywgMjEzLCAxMzEsIDgyLCAyMDgsIAorICAgIDI0NywgMTA5LCAyMzAsIDk2LCAzMywgNCwgMjI3LCA0OCwgMzMsIDQsIDIyNCwgODEsIDMzLCA0LCAyMTUsIDIyNSwgMzMsIAorICAgIDQsIDIxMiwgMTIsIDMzLCA0LCAyMTIsIDI0MSwgMzMsIDQsIDI0OCwgMjIsIDMzLCA0LCAyMDgsIDE3MiwgMzMsIDQsIDI0NSwgCisgICAgMjUzLCAzMywgNCwgMjIxLCAxODksIDMzLCA0LCAyMjAsIDIzMiwgMzMsIDQsIDIzOCwgNDUsIDIyMCwgOTcsIDMzLCA0LCAKKyAgICAyMDIsIDE2LCAzMywgNCwgMjQzLCAxMTEsIDMzLCA0LCAyNDQsIDg5LCAzMywgNCwgMjMwLCAxMDAsIDMzLCA0LCAyMDksIAorICAgIDQ2LCAzMywgNCwgMjQ2LCAxMTUsIDMzLCA0LCAyMTgsIDE3OSwgMzMsIDQsIDIxOCwgNjgsIDMzLCA0LCAyMzgsIDEyNSwgCisgICAgMzMsIDQsIDIzOCwgMTIxLCAzMywgNCwgMjM4LCAxMjIsIDMzLCA0LCAyMzgsIDEyMywgMzMsIDQsIDIxMSwgMTY0LCAzMywgCisgICAgNCwgMjExLCAxMTksIDMzLCA0LCAyMTEsIDEzMiwgMzMsIDQsIDIxMSwgMTYzLCAzMywgNCwgMjExLCAxMzcsIDMzLCA0LCAKKyAgICAyMTEsIDEzOCwgMzMsIDQsIDIxMSwgMTI0LCAzMywgNCwgMjQ3LCA1LCAzMywgNCwgMjQ2LCAyNDAsIDMzLCA0LCAyNDYsIAorICAgIDI0MiwgMzMsIDQsIDI0NywgNCwgMzMsIDQsIDI0NywgMiwgMzMsIDQsIDI0NywgMywgMzMsIDQsIDI0NiwgMjQxLCAzMywgNCwgCisgICAgMjAxLCAyMzUsIDMzLCA0LCAyMDEsIDIxMywgMzMsIDQsIDIwMSwgMjI2LCAzMywgNCwgMjAxLCAyMzQsIDMzLCA0LCAyMDEsIAorICAgIDIyOSwgMzMsIDQsIDIwMSwgMjMwLCAzMywgNCwgMjAxLCAyMTgsIDMzLCA0LCAyNDcsIDAsIDMzLCA0LCAyNDYsIDI0MywgCisgICAgMzMsIDQsIDI0NiwgMjQ1LCAzMywgNCwgMjQ2LCAyNTUsIDMzLCA0LCAyNDYsIDI1MywgMzMsIDQsIDI0NiwgMjU0LCAzMywgCisgICAgNCwgMjQ2LCAyNDQsIDMzLCA0LCAyMTcsIDEzLCAzMywgNCwgMjE3LCAzLCAzMywgNCwgMjE3LCA5LCAzMywgNCwgMjE3LCAKKyAgICAxMiwgMzMsIDQsIDIxNywgMTAsIDMzLCA0LCAyMTcsIDExLCAzMywgNCwgMjE3LCA4LCAzMywgNCwgMjI4LCAxNDEsIDMzLCAKKyAgICA0LCAyMjgsIDEzMywgMzMsIDQsIDIyOCwgMTM2LCAzMywgNCwgMjI4LCAxNDAsIDMzLCA0LCAyMjgsIDEzNywgMzMsIDQsIAorICAgIDIyOCwgMTM4LCAzMywgNCwgMjI4LCAxMzQsIDMzLCA0LCAyMDMsIDE0MCwgMzMsIDQsIDIwMywgMTI3LCAzMywgNCwgMjAzLCAKKyAgICAxMzUsIDMzLCA0LCAyMDMsIDEzOSwgMzMsIDQsIDIwMywgMTM3LCAzMywgNCwgMjAzLCAxMzgsIDMzLCA0LCAyMDMsIDEzNCwgCisgICAgMzMsIDQsIDIzNywgMTgzLCAzMywgNCwgMjM3LCAxNzMsIDMzLCA0LCAyMzcsIDE3NiwgMzMsIDQsIDIzNywgMTgyLCAzMywgCisgICAgNCwgMjM3LCAxNzgsIDMzLCA0LCAyMzcsIDE3OSwgMzMsIDQsIDIzNywgMTc1LCAzOSwgMzYsIDEsIDI0OCwgMTYyLCAzOSwgCisgICAgMzYsIDEsIDIwNiwgNTUsIDM5LCAzNiwgMSwgMjM4LCAxMDUsIDM5LCAzNiwgMSwgMjQ0LCA3NSwgMzksIDM2LCAxLCAyMDIsIAorICAgIDcxLCAzOSwgMzYsIDEsIDIwMiwgOTIsIDM5LCAzNiwgMSwgMTczLCAzOSwgMzYsIDEsIDI0MSwgMTIyLCAzOSwgMzYsIDEsIAorICAgIDI0MSwgMTAzLCAzOSwgMzYsIDEsIDI0MSwgOTIsIDM5LCAzNiwgMSwgNzgsIDM5LCAzNiwgMSwgMjE5LCAzNCwgMzksIDM2LCAKKyAgICAxLCAyNDEsIDI4LCAzOSwgMzYsIDEsIDI0MSwgMTcsIDM5LCAzNiwgMSwgMjA5LCAxODcsIDM5LCAzNiwgMSwgMTUyLCAzOSwgCisgICAgMzYsIDEsIDIwOCwgMTQsIDM5LCAzNiwgMSwgMjQ2LCAxNzAsIDM5LCAzNiwgMSwgMjEzLCA5MCwgMzksIDM2LCAxLCAyMTMsIAorICAgIDQ2LCAzOSwgMzYsIDEsIDIzOSwgMjM1LCAzOSwgMzYsIDEsIDI0MSwgMTMsIDM5LCAzNiwgMSwgNjMsIDM5LCAzNiwgMSwgCisgICAgMjMxLCAxMTAsIDM5LCAzNiwgMSwgMjQzLCAxMjksIDM5LCAzNiwgMSwgMjI0LCA0MywgMjA3LCAxNCwgMzksIDM2LCAxLCAKKyAgICAyMDMsIDY2LCAzOSwgMzYsIDEsIDIwMiwgMjEzLCAzOSwgMzYsIDEsIDIzMCwgMjI4LCA2MywgMzksIDM2LCAxLCAyMjcsIAorICAgIDg2LCAyMDIsIDE4MywgMzksIDM2LCAxLCAyNDgsIDczLCAyMDIsIDE4MywgMzksIDM2LCAxLCAyMzAsIDIyOCwgMjQ4LCA3MywgCisgICAgMjAyLCAxODMsIDUwLCAyNTAsIDIxOCwgMjEwLCAyNDEsIDIyNSwgODgsIDUwLCAyNTAsIDIxOCwgMjQyLCA4MywgMjEwLCAKKyAgICAyNDEsIDIyNSwgODgsIDQ5LCAyMTAsIDI0MSwgMTU1LCA1MCwgMjEwLCAyNDEsIDE1NSwgNDksIDI0MiwgODMsIDIxMCwgCisgICAgMjQxLCAxNTUsIDUwLCAyNDIsIDgzLCAyMTAsIDI0MSwgMTU1LCAyMTYsIDE4OCwgMjMwLCAyNDksIDIyNSwgODgsIDIxNiwgCisgICAgMTg4LCAyNDIsIDgzLCAyMzAsIDI0OSwgMjI1LCA4OCwgMjQyLCA4MywgMjA4LCAxMDMsIDIyNSwgODgsIDQ5LCAyMDgsIAorICAgIDEwMywgMTU1LCA1MCwgMjA4LCAxMDMsIDE1NSwgMjE2LCAxODgsIDIxMSwgMTc3LCA0OSwgMjE2LCAxODgsIDIyMCwgMzMsIAorICAgIDE1NSwgNTAsIDIxNiwgMTg4LCAyMjAsIDMzLCAxNTUsIDI0MSwgMTYyLCAyNDUsIDE2MywgMjE5LCA4NywgMjM5LCAxNjEsIAorICAgIDIxOSwgODcsIDIxNiwgNzMsIDIzOSwgMTYxLCAyMTksIDg3LCAyMzUsIDIxNywgMjQyLCA4MywgMjIwLCA5MiwgMTgzLCAKKyAgICAyNTAsIDIyNywgMTc3LCAyNTAsIDIyNywgMjQyLCA4MywgMjE2LCAxMSwgMjUwLCAyMTcsIDUyLCAyMjAsIDg5LCAyMzUsIAorICAgIDIyMCwgMjMwLCAyMzksIDIzMCwgMjQ3LCAyMTksIDEzNSwgMjQ3LCAyMjMsIDIzNSwgMjIxLCAzLCAyNDMsIDIzMSwgMjA4LCAKKyAgICAyMjgsIDMsIDIxNSwgMjUzLCA1NSwgNDksIDEyNCwgMjE5LCA3OSwgMTU1LCA1MCwgMTI0LCAyMTksIDc5LCAxNTUsIDIwOCwgCisgICAgMjI4LCAzLCA3MCwgNTUsIDIwOCwgMjI4LCAzLCA3MCwgNTYsIDQ5LCA4MCwgMjQ4LCAyMzEsIDMsIDIxNywgNDEsIDUwLCAKKyAgICA4MCwgMjQ4LCAyMzEsIDMsIDIxNywgNDEsIDIwOCwgMTQ1LCA0OSwgMTYyLCAxNTUsIDIwOCwgMTQ1LCA1MCwgMTYyLCAxNTUsIAorICAgIDI0NywgMjQ4LCA0OSwgMTYyLCAxNTUsIDI0NywgMjQ4LCA1MCwgMTYyLCAxNTUsIDQ5LCAyMTIsIDE1NCwgMTA2LCAxNTUsIAorICAgIDUwLCAyMTIsIDE1NCwgMTA2LCAxNTUsIDQ5LCA1MiwgMjE5LCA3NiwgNTAsIDUyLCAyMTksIDc2LCAxMjAsIDE4NywgMTE1LCAKKyAgICAxMTgsIDcwLCAyMTcsIDE3OCwgMTE4LCA3MCwgMTE1LCAxMjAsIDE4NywgMjE3LCAxNzgsIDEwMywgMjM5LCAxNDcsIDcwLCAKKyAgICAyMTcsIDE3OCwgMjM5LCAyMzMsIDcwLCA4MiwgMjE2LCA3MywgMjE3LCA0NywgODIsIDgwLCAyMDgsIDIyNywgMjE1LCAyNTMsIAorICAgIDIxOCwgNjIsIDIwMywgMjM4LCAyMTMsIDEzMSwgMTAxLCAyNDMsIDg1LCAyMDcsIDE3NCwgMjQ1LCAyMzMsIDIxNiwgMTg4LCAKKyAgICAyNDMsIDg1LCAyMTYsIDE4OCwgMjQ1LCAyMzMsIDIwNywgMTc0LCAyMTMsIDE0MywgMjQ0LCAxOTYsIDMsIDQ5LCAyMzcsIAorICAgIDIyNCwgMjQ0LCAxOTYsIDMsIDUwLCAyMzcsIDIyNCwgMjA3LCAxNzQsIDI0NCwgMTk1LCAyMDgsIDE0NSwgMTYyLCAyMTQsIAorICAgIDE2OCwgNTQsIDIwNywgMTM1LCAyNDQsIDE0NCwgMjA5LCAzMCwgMjQ0LCAxNDQsIDIxMSwgNzYsIDIzOSwgMTAyLCAyMTEsIAorICAgIDYxLCA4MCwgMjEyLCA4OCwgMjQzLCA4MywgMjA0LCAyMSwgODAsIDIyNywgMTE0LCAyNDcsIDQ2LCA1MiwgMjM1LCAyMjAsIAorICAgIDIxNiwgNzMsIDI0NSwgMjMzLCA1MiwgMjI2LCAyNTIsIDIxNywgMzEsIDgyLCAxMiwgNDAsIDIxNiwgMTAwLCAxMiwgNDAsIAorICAgIDI0NiwgMjYsIDEyLCA0MCwgMjE0LCAxNzEsIDEwNSwgMTIsIDQwLCAyMTQsIDE3MSwgMTA4LCAxMiwgNDAsIDIxNCwgMTcxLCAKKyAgICAxNDcsIDEyLCA0MCwgMjE4LCAyMjksIDEyLCA0MCwgMjQ3LCAyMzMsIDEyLCA0MCwgMjEwLCA4LCAxMiwgNDAsIDIyOSwgMzQsIAorICAgIDEwNSwgMTIsIDQwLCAyMjksIDM0LCAxMDgsIDEyLCA0MCwgMjQzLCAxMzgsIDEyLCA0MCwgMjE0LCAxNzUsIDEyLCA0MCwgNSwgCisgICAgMTA1LCAxMiwgNDAsIDUsIDEwOCwgMTIsIDQwLCAyMjgsIDIzLCAxMDUsIDEyLCA0MCwgMjI4LCAyMywgMTA4LCAxMiwgNDAsIAorICAgIDIyOCwgMjMsIDE0NywgMTIsIDQwLCAyMjgsIDIzLCAxNDksIDEyLCA0MCwgMjEyLCAyNCwgMTIsIDQwLCAyMDksIDMzLCAxMiwgCisgICAgNDAsIDIxMiwgMjIsIDEwNSwgMTIsIDQwLCAyMTIsIDIyLCAxMDgsIDEyLCA0MCwgMjM3LCA1NiwgMTA1LCAxMiwgNDAsIAorICAgIDIzNywgNTYsIDEwOCwgMTIsIDQwLCAyMzcsIDEyMywgMTIsIDQwLCAyMTYsIDE3OCwgMTIsIDQwLCAyNDYsIDExMiwgMTIsIAorICAgIDQwLCAyMTAsIDIxNCwgMTIsIDQwLCAyMjQsIDI5LCAxMiwgNDAsIDI0NCwgNzMsIDEyLCA0MCwgMjI0LCAyMCwgMTIsIDQwLCAKKyAgICAyNDYsIDQ0LCAxMiwgNDAsIDIwNCwgODEsIDEwNSwgMTIsIDQwLCAyMDQsIDgxLCAxMDgsIDEyLCA0MCwgMjM5LCAyNDksIAorICAgIDEyLCA0MCwgMjE5LCA0NiwgMTA1LCAxMiwgNDAsIDIxOSwgNDYsIDEwOCwgMTIsIDQwLCAyMTIsIDEyNywgMTYyLCAyMDgsIAorICAgIDk2LCAyMDgsIDI1LCAxMiwgNDAsIDI0NSwgMTQ5LCAxMiwgNDAsIDI0MywgMTAyLCAxMiwgNDAsIDIzMCwgMTc2LCAxMiwgCisgICAgNDAsIDI0OCwgMTUsIDc2LCAyNDYsIDEwLCAxMiwgNDAsIDI0MCwgMTkxLCAxMiwgNDAsIDIxMSwgMTk5LCAxMDUsIDEyLCAKKyAgICA0MCwgMjExLCAxOTksIDEwOCwgMTIsIDQwLCAyNDgsIDI0NCwgMTIsIDQwLCAyMTIsIDEzNCwgMTIsIDQwLCAyNDcsIDEyMiwgCisgICAgMjEyLCAxMzQsIDEyLCA0MCwgMjIyLCAyMjAsIDEwNSwgMTIsIDQwLCAyMjIsIDIyMCwgMTA4LCAxMiwgNDAsIDIyMiwgMjIwLCAKKyAgICAxNDcsIDEyLCA0MCwgMjIyLCAyMjAsIDE0OSwgMTIsIDQwLCAyMjQsIDIyNywgMTIsIDQwLCAyMTMsIDM3LCAxMiwgNDAsIAorICAgIDIxNiwgMTg0LCAxMiwgNDAsIDI0MCwgMjE5LCAxMiwgNDAsIDIyMCwgNDUsIDEyLCA0MCwgMjQ3LCAyMDEsIDEwNSwgMTIsIAorICAgIDQwLCAyNDcsIDIwMSwgMTA4LCAxMiwgNDAsIDIyNSwgMTUsIDEyLCA0MCwgMjI0LCAyNCwgMTIsIDQwLCAyMzgsIDEsIDEwNSwgCisgICAgMTIsIDQwLCAyMzgsIDEsIDEwOCwgMTIsIDQwLCAyMzgsIDEsIDE0NywgMTIsIDQwLCAyMDgsIDI0NSwgMTIsIDQwLCAyNDYsIAorICAgIDksIDEyLCA0MCwgMjA0LCA0NiwgMTA1LCAxMiwgNDAsIDIwNCwgNDYsIDEwOCwgMTIsIDQwLCAyNDcsIDEyMiwgMjE0LCAKKyAgICAxNjUsIDEyLCA0MCwgMjEyLCAxMjcsIDIzNiwgNTMsIDEyLCA0MCwgMjM2LCA1MywgMTIsIDQwLCAyNDcsIDEyMiwgMjExLCAKKyAgICAyMTEsIDEyLCA0MCwgMjQ3LCAxMjIsIDIxMywgMzIsIDEyLCA0MCwgMjM5LCAxNzIsIDEyLCA0MCwgMjQ3LCAxMjIsIDI0NywgCisgICAgMjMsIDEyLCA0MCwgMjEyLCAxMjcsIDIwNCwgMTAxLCAxMiwgNDAsIDIwNCwgMTAyLCAxMDUsIDEyLCA0MCwgMjA0LCAxMDIsIAorICAgIDEwOCwgMTIsIDQwLCAyNDYsIDQ3LCAxMiwgNDAsIDI0NywgMTIyLCAyMzgsIDMxLCAxMiwgNDAsIDE2MywgMTA1LCAxMiwgCisgICAgNDAsIDE2MywgMTA4LCAxMiwgNDAsIDI0NywgMTIyLCAyMjcsIDI4LCAxMiwgNDAsIDI0NywgMTIyLCAyMzgsIDIxNiwgMTIsIAorICAgIDQwLCAyMjQsIDE2LCAxMDUsIDEyLCA0MCwgMjI0LCAxNiwgMTA4LCAxMiwgNDAsIDIxNiwgMTkwLCAxMiwgNDAsIDI0OCwgCisgICAgMjUsIDEyLCA0MCwgMjQ3LCAxMjIsIDIwOSwgMjI0LCAyMjcsIDIyOCwgMTIsIDQwLCAyNDcsIDEyMiwgMjI3LCAyMjksIDEyLCAKKyAgICA0MCwgMjQ3LCAxMjIsIDIwNCwgMTYsIDEyLCA0MCwgMjQ3LCAxMjIsIDIzOSwgMTkwLCAxMiwgNDAsIDI0MSwgMTczLCAxMDUsIAorICAgIDEyLCA0MCwgMjQxLCAxNzMsIDEwOCwgMTIsIDQwLCAyNDEsIDE3MywgMTQ3LCAxMiwgNDAsIDI0NywgMTIyLCAyNDEsIDE3MiwgCisgICAgMTIsIDQwLCAyMzcsIDY0LCAxMiwgNDAsIDI0NywgMTIyLCAyMzYsIDQ5LCAxMiwgNDAsIDI0OCwgMTEsIDEyLCA0MCwgMjM4LCAKKyAgICA4OSwgMTIsIDQwLCAyNDcsIDEyMiwgMjM5LCAyNDMsIDEyLCA0MCwgMjQ3LCAxMjIsIDI0OCwgNjAsIDEyLCA0MCwgMjQ3LCAKKyAgICAxMjIsIDIxNSwgMSwgMTIsIDQwLCAyMTIsIDEyNywgMjA0LCAzOCwgMTIsIDQwLCAyMTIsIDEyNywgMjAzLCA0NCwgMTIsIAorICAgIDQwLCAyNDcsIDEyMiwgMjM5LCAxMjEsIDEyLCA0MCwgMjMwLCAxODMsIDI0MCwgMjI0LCAxMiwgNDAsIDI0NywgMTIyLCAKKyAgICAyNDAsIDIyNCwgMTIsIDQwLCAyMzAsIDE4MywgMjA4LCAxNDYsIDEyLCA0MCwgMjQ3LCAxMjIsIDIwOCwgMTQ2LCAxMiwgNDAsIAorICAgIDIzMCwgMTgzLCAyNDIsIDYxLCAxMiwgNDAsIDI0NywgMTIyLCAyNDIsIDYxLCAxMiwgNDAsIDIwNywgMTcxLCAxMiwgNDAsIAorICAgIDIzMCwgMTgzLCAyMDcsIDE3MSwgMTIsIDQwLCAyNDcsIDEyMiwgMjA3LCAxNzEsIDcxLCA0MCwgMTA1LCA3MSwgNDAsIDIyNywgCisgICAgMTE0LCA3MSwgNDAsIDI0MywgODUsIDcxLCA0MCwgMjEyLCA1NywgNzEsIDQwLCAyMTQsIDE3MCwgNzEsIDQwLCAxMTMsIDcxLCAKKyAgICA0MCwgMTA4LCA3MSwgNDAsIDIyNywgMTQzLCA3MSwgNDAsIDIyNSwgMTIyLCA3MSwgNDAsIDIyNywgMjA3LCA3MSwgNDAsIAorICAgIDI0MSwgNjcsIDcxLCA0MCwgMTk5LCA3MSwgNDAsIDEyMSwgMjQ3LCAyMzMsIDcxLCA0MCwgMjQ1LCAxNTEsIDcxLCA0MCwgCisgICAgMjM1LCAxNjIsIDcxLCA0MCwgMjEwLCA4LCA3MSwgNDAsIDE3MSwgMjQ3LCAyMzMsIDcxLCA0MCwgMjI5LCAzMywgNzEsIDQwLCAKKyAgICAyMTgsIDE2LCA3MSwgNDAsIDIwMywgMjI4LCA3MSwgNDAsIDIxMSwgMTkwLCA3MSwgNDAsIDUwLCAxNzEsIDI0NywgMjMzLCAKKyAgICA3MSwgNDAsIDIzNiwgMjU1LCAyNDEsIDg3LCA3MSwgNDAsIDIwOSwgMTUyLCA3MSwgNDAsIDI0MywgMTM4LCA3MSwgNDAsIAorICAgIDIxNCwgMTc1LCA3MSwgNDAsIDI0NiwgMjYsIDcxLCA0MCwgMjE3LCAyMjYsIDcxLCA0MCwgMjUxLCA4MCwgNzEsIDQwLCAKKyAgICAyMjQsIDcsIDcxLCA0MCwgMjQxLCA4NywgNzEsIDQwLCAyNDEsIDE3OSwgNzEsIDQwLCAyMTQsIDE5NywgNzEsIDQwLCAyMzgsIAorICAgIDM5LCA3MSwgNDAsIDIzOCwgNDAsIDIxMiwgMzgsIDcxLCA0MCwgMjQwLCAyMjMsIDcxLCA0MCwgMjQ4LCA3MiwgNzEsIDQwLCAKKyAgICAyMDMsIDI1MCwgNzEsIDQwLCAyNDYsIDEzMywgNzEsIDQwLCAyMTUsIDIwNywgNzEsIDQwLCAyMzEsIDQ1LCA3MSwgNDAsIAorICAgIDIxMiwgMzYsIDcxLCA0MCwgMjI4LCAyMiwgNzEsIDQwLCAyNDUsIDE2MSwgNzEsIDQwLCAyMTEsIDE4MSwgNzEsIDQwLCAKKyAgICAyMjQsIDEyLCA3MSwgNDAsIDIxNSwgMjQxLCA3MSwgNDAsIDIwMywgMjM1LCA3MSwgNDAsIDIyMCwgMjUsIDcxLCA0MCwgCisgICAgMjA3LCAxODAsIDcxLCA0MCwgMjQyLCA0NCwgNzEsIDQwLCAyMTIsIDIyOCwgMjA5LCAzMywgNzEsIDQwLCAyNDIsIDgzLCAKKyAgICAyNDYsIDI2LCA3MSwgNDAsIDE2MywgMjExLCAzOCwgNzEsIDQwLCAxMjAsIDIzNywgOTksIDcxLCA0MCwgMjEyLCAyMzQsIAorICAgIDcxLCA0MCwgMjQ3LCAyNDAsIDcxLCA0MCwgMjEyLCAyMSwgNzEsIDQwLCAyNDcsIDIwNSwgNzEsIDQwLCAyMTEsIDc1LCA3MSwgCisgICAgNDAsIDIzNywgNTUsIDcxLCA0MCwgMjM3LCAxMzgsIDcxLCA0MCwgMjQzLCA4OCwgNzEsIDQwLCAyMzcsIDEyMywgNzEsIDQwLCAKKyAgICAyNDcsIDIyMywgNzEsIDQwLCAyMTYsIDE3OCwgNzEsIDQwLCAyMTQsIDE4MywgNzEsIDQwLCAyNDMsIDE2OSwgNzEsIDQwLCAKKyAgICAyNTAsIDksIDcxLCA0MCwgMjExLCAxNzcsIDcxLCA0MCwgMjIxLCAxNjUsIDcxLCA0MCwgMjEwLCAyMTQsIDcxLCA0MCwgCisgICAgMjE0LCAyMDgsIDcxLCA0MCwgMjI0LCAyOSwgNzEsIDQwLCAyMDgsIDk1LCA3MSwgNDAsIDIyOCwgOTksIDcxLCA0MCwgMjExLCAKKyAgICA2MSwgNzEsIDQwLCAyNDQsIDczLCA3MSwgNDAsIDIwNCwgNjEsIDcxLCA0MCwgMjQzLCAxMTQsIDIyMSwgMTY1LCA3MSwgNDAsIAorICAgIDI0NSwgMjI5LCA3MSwgNDAsIDIzOSwgOTUsIDcxLCA0MCwgMjQ2LCAzOCwgNzEsIDQwLCAyMTEsIDgwLCA3MSwgNDAsIDIwNCwgCisgICAgODAsIDcxLCA0MCwgMjM5LCAyNDksIDcxLCA0MCwgMjQ2LCAzNCwgNzEsIDQwLCAyNDAsIDY3LCA3MSwgNDAsIDUyLCAyMDMsIAorICAgIDE5NiwgNzEsIDQwLCAxNjIsIDIwOCwgOTYsIDIwOCwgMjUsIDcxLCA0MCwgMjEyLCA1MCwgNzEsIDQwLCAyNDAsIDc5LCA3MSwgCisgICAgNDAsIDI0NSwgMTQ5LCA3MSwgNDAsIDI0MywgMTAyLCA3MSwgNDAsIDIxNywgMjIzLCA3MSwgNDAsIDIzMCwgMTc2LCA3MSwgCisgICAgNDAsIDIyNCwgMjQ5LCA3MSwgNDAsIDIwOCwgMjI2LCA3MSwgNDAsIDIxMCwgMTY0LCA3MSwgNDAsIDIyNywgMTM3LCA3MSwgCisgICAgNDAsIDIwNiwgMTkxLCA3MSwgNDAsIDI0MCwgMjQsIDcxLCA0MCwgMjQ4LCAxNSwgNzYsIDI0NiwgMTAsIDcxLCA0MCwgMjEyLCAKKyAgICAxNTgsIDcxLCA0MCwgMjQyLCA4MywgMjA5LCAxNDQsIDcxLCA0MCwgMjA0LCAzMywgNzEsIDQwLCAyMTIsIDY1LCA3MSwgNDAsIAorICAgIDI0MywgMTU2LCA3MSwgNDAsIDI0MCwgMTkxLCA3MSwgNDAsIDIxMSwgMjE0LCA3MSwgNDAsIDQ3LCA3MSwgNDAsIDIxMSwgCisgICAgNjMsIDcxLCA0MCwgMjExLCAxOTgsIDcxLCA0MCwgMjA4LCAxMTgsIDcxLCA0MCwgMjM4LCAxMCwgNzEsIDQwLCAyNDcsIDEwLCAKKyAgICA3MSwgNDAsIDIxMSwgOTgsIDcxLCA0MCwgMjQ4LCAyNDQsIDcxLCA0MCwgMjE2LCA1MiwgNzEsIDQwLCAyMTIsIDEzNCwgNzEsIAorICAgIDQwLCAyMzAsIDE2OCwgNzEsIDQwLCAyMjIsIDIxOSwgNzEsIDQwLCAyMTMsIDM3LCA3MSwgNDAsIDI0MCwgNTUsIDcxLCA0MCwgCisgICAgMjIwLCA0NSwgNzEsIDQwLCAyNTAsIDIyNiwgNzEsIDQwLCAyMTgsIDgzLCA3MSwgNDAsIDI0MSwgMTgzLCA3MSwgNDAsIAorICAgIDI0NywgMjAwLCA3MSwgNDAsIDIyNSwgMTUsIDcxLCA0MCwgMjI0LCAxMDQsIDcxLCA0MCwgMjEzLCAxNDksIDcxLCA0MCwgCisgICAgMjUwLCA5OCwgNzEsIDQwLCAyMjQsIDI0LCA3MSwgNDAsIDIwOCwgMTUwLCA3MSwgNDAsIDIxOSwgMjUyLCA3MSwgNDAsIAorICAgIDI0OCwgMTksIDcxLCA0MCwgMjExLCA1OSwgNzEsIDQwLCAyNDUsIDI0MSwgNzEsIDQwLCAyMzgsIDAsIDcxLCA0MCwgMjA4LCAKKyAgICAyNDUsIDcxLCA0MCwgMjMxLCA5LCA3MSwgNDAsIDI0OCwgMzEsIDcxLCA0MCwgMjA0LCAxMDIsIDI0MSwgODcsIDcxLCA0MCwgCisgICAgMjQ2LCA5LCA3MSwgNDAsIDIwNCwgNDUsIDcxLCA0MCwgMjE0LCAxNjUsIDcxLCA0MCwgMjM2LCA1MywgNzEsIDQwLCAyMTEsIAorICAgIDIxMSwgNzEsIDQwLCAyMDYsIDc5LCA3MSwgNDAsIDI0OCwgMTU3LCA3MSwgNDAsIDIxOCwgMTMxLCA3MSwgNDAsIDI0OSwgCisgICAgMTMsIDcxLCA0MCwgMjEzLCAzMiwgNzEsIDQwLCAyMTYsIDEzNywgNzEsIDQwLCAyMTUsIDEyOCwgNzEsIDQwLCAyMzksIAorICAgIDE3MiwgNzEsIDQwLCAyNDgsIDE3LCA3MSwgNDAsIDI0NywgMjMsIDcxLCA0MCwgMjQ4LCA0OCwgNzEsIDQwLCAyMjQsIDI2LCAKKyAgICA3MSwgNDAsIDIwNCwgMTAxLCA3MSwgNDAsIDI0NiwgNDcsIDcxLCA0MCwgMjA0LCAxMiwgNzEsIDQwLCAyNDMsIDE0OSwgNzEsIAorICAgIDQwLCAyMDUsIDIxNCwgNzEsIDQwLCAyMzgsIDMxLCA3MSwgNDAsIDIyNywgMjgsIDcxLCA0MCwgMjM4LCAyMTYsIDcxLCA0MCwgCisgICAgMjI0LCAxNSwgNzEsIDQwLCAyMTIsIDU2LCA3MSwgNDAsIDIxMiwgMjI4LCAyMDksIDI0NywgMjQ4LCA2MCwgNzEsIDQwLCAKKyAgICAyMTYsIDE5MCwgNzEsIDQwLCAyNDgsIDI1LCA3MSwgNDAsIDIwMywgMjE5LCA3MSwgNDAsIDI0MCwgMTAyLCA3MSwgNDAsIAorICAgIDIyNywgMjI4LCA3MSwgNDAsIDIwOSwgMjI0LCAyMjcsIDIyOCwgNzEsIDQwLCAyMjcsIDIyNCwgNzEsIDQwLCAyMTEsIDI0MCwgCisgICAgNzEsIDQwLCAyMjcsIDIyOSwgNzEsIDQwLCAyMDQsIDE2LCA3MSwgNDAsIDIzOSwgMTkwLCA3MSwgNDAsIDI0MSwgMTcyLCAKKyAgICA3MSwgNDAsIDIzNywgNjQsIDcxLCA0MCwgMjM5LCAxMzYsIDcxLCA0MCwgMjM2LCA0OSwgNzEsIDQwLCAyNDgsIDExLCA3MSwgCisgICAgNDAsIDIwOSwgMjMzLCA3MSwgNDAsIDIzNywgMTQ1LCA3MSwgNDAsIDI0MCwgMTcsIDcxLCA0MCwgMjE1LCAzMCwgMjA0LCAKKyAgICAxMiwgNzEsIDQwLCAyNDcsIDEyLCA3MSwgNDAsIDIzOCwgODksIDcxLCA0MCwgMjM5LCAyNDMsIDcxLCA0MCwgMjQ4LCA2MCwgCisgICAgNzEsIDQwLCAyMTUsIDEsIDcxLCA0MCwgMjQ0LCA1OCwgNzEsIDQwLCAyMDQsIDM4LCA3MSwgNDAsIDIzNywgMzQsIDcxLCAKKyAgICA0MCwgMjAzLCA0NCwgNzEsIDQwLCAyMjQsIDExNSwgNzEsIDQwLCAyNDgsIDQzLCA3MSwgNDAsIDI0MSwgOTksIDcxLCA0MCwgCisgICAgMjM5LCAxMjEsIDcxLCA0MCwgMjA4LCA2NywgNzEsIDQwLCAyNDIsIDQ2LCA3MSwgNDAsIDIxNiwgMTcyLCA3MSwgNDAsIAorICAgIDIyMSwgMTY3LCA3MSwgNDAsIDI0MCwgMjI0LCA3MSwgNDAsIDIwOCwgMTQ2LCA3MSwgNDAsIDI0MiwgNjEsIDcxLCA0MCwgCisgICAgMjA3LCAxNzEsIDcxLCA0MCwgMjM5LCAxOTMsIDEzOSwgMjQ0LCAxOCwgMTY3LCA0OSwgMjA4LCAxNzMsIDIxNiwgMTYsIAorICAgIDEzOSwgMjQ0LCAxOCwgMTY3LCA4NywgMjA4LCAxNzMsIDU2LCAxMzksIDI0NCwgMTgsIDE2NywgNDksIDIwOCwgMTczLCAKKyAgICAxMDEsIDI1LCAyMTYsIDE2LCAxMzksIDI0NCwgMTgsIDE2NywgODcsIDIwOCwgMTczLCAxMDEsIDI1LCA1NiwgMTM5LCAyNDQsIAorICAgIDE4LCAxNjcsIDIzOSwgMTAyLCAyMTAsIDE4NiwgMTM5LCAyNDQsIDE4LCAxNjcsIDIxMCwgMTg3LCAyMzksIDEyMCwgNTUsIAorICAgIDEzOSwgMjQ0LCAxOCwgMTY3LCAyMTAsIDE4NywgMjM5LCAxMjAsIDU2LCAxMzksIDI0NCwgMTgsIDE2NywgMjEwLCAxODcsIAorICAgIDIzOSwgMTIwLCAyMjcsIDIyMiwgMTM5LCAyNDQsIDE4LCAxNjcsIDIxMCwgMTg3LCAyMzksIDEyMCwgMjA2LCAyMjEsIDIyNywgCisgICAgMjIyLCAxMzksIDI0NCwgMTgsIDE2NywgMjEwLCAxODcsIDIzOSwgMTIwLCAyMDYsIDIyMSwgMjE2LCAxNiwgMTM5LCAyNDQsIAorICAgIDE4LCAxNjcsIDIxMCwgMTg3LCAyMzksIDEyMCwgMjI2LCAyNTEsIDIyNywgMjIyLCAxMzksIDI0NCwgMTgsIDE2NywgMjE5LCAKKyAgICAyMDIsIDEzOSwgMjExLCAyMjgsIDEzOSwgMjQ1LCAyMzMsIDEzOSwgMjM5LCAxMDIsIDIxMSwgNjEsIDI0MywgMTQ2LCA4MiwgCisgICAgMjMwLCAxNjksIDIzMSwgMjksIDIxMSwgOTcsIDk3LCAxMzksIDIzMCwgMTk5LCA4MiwgMTM5LCAyNDYsIDEyLCA4MiwgMTM5LCAKKyAgICA0MiwgMjAyLCA4NCwgNDksIDI1MCwgMjE4LCAxNTUsIDUwLCAyNTAsIDIxOCwgMTU1LCA0OSwgNTIsIDI1MCwgMjE4LCAxNTUsIAorICAgIDUwLCA1MiwgMjUwLCAyMTgsIDE1NSwgNDksIDI0NSwgMTY2LCAxNTUsIDUwLCAyNDUsIDE2NiwgMTU1LCA0OSwgNjEsIDI0NSwgCisgICAgMTY2LCAxNTUsIDUwLCA2MSwgMjQ1LCAxNjYsIDE1NSwgNDksIDYyLCAyMjcsIDE4NSwgMTU1LCA1MCwgNjIsIDIyNywgMTg1LCAKKyAgICAxNTUsIDIxOCwgMjksIDgyLCAyMzgsIDE1OCwgODIsIDQ5LCAyMDgsIDEzMywgMjEzLCAzMywgMTU1LCA1MCwgMjA4LCAxMzMsIAorICAgIDIxMywgMzMsIDE1NSwgNDksIDYxLCAyMjcsIDE4NSwgMTU1LCA1MCwgNjEsIDIyNywgMTg1LCAxNTUsIDQ5LCA2MSwgMjA4LCAKKyAgICAxMzMsIDIxMywgMzMsIDE1NSwgNTAsIDYxLCAyMDgsIDEzMywgMjEzLCAzMywgMTU1LCA0OSwgNjEsIDUxLCAxNTUsIDUwLCAKKyAgICA2MSwgNTEsIDE1NSwgMjA0LCA3NiwgMjQ0LCAxNDQsIDIxNiwgNzMsIDUyLCAyMTcsIDIzNywgMjE3LCAzMSwgODIsIDUyLCAKKyAgICAyMTcsIDIzNywgMjE3LCAzMSwgODIsIDEyNCwgNTIsIDIxNywgMjM3LCAyMTcsIDMxLCA4MiwgMjE4LCAyOSwgMTMxLCAyNDAsIAorICAgIDEwMiwgMjM3LCA5NywgMjIxLCA0NCwgMTA1LCAyMzcsIDk3LCAyMjEsIDQ0LCAxMDgsIDIzNywgOTcsIDIyMSwgNDQsIDE0NywgCisgICAgMjM3LCA5NywgMjIxLCA0NCwgMTQ5LCAyMzcsIDk3LCAyMjEsIDQ0LCAxNzAsIDIzNywgOTcsIDIyMSwgNDQsIDE5NSwgMjM3LCAKKyAgICA5NywgMjIxLCA0NCwgMjEzLCAxMTEsIDIzNywgOTcsIDIyMSwgNDQsIDE5OSwgMjM3LCA5NywgMjIxLCA0NCwgMjIyLCA2MywgCisgICAgMTM5LCAyMjcsIDE2NywgMTQzLCA4MiwgMTM5LCAyMTUsIDI0NSwgMTQzLCA4MiwgMTM5LCAyNDQsIDI3LCAxNDMsIDgyLCAKKyAgICAxMzksIDI0MSwgNjYsIDE0MywgODIsIDI4LCAyMTIsIDEyMCwgNzAsIDE0MywgODIsIDI4LCA1MiwgNzAsIDE0MywgODIsIAorICAgIDIwNCwgNzIsIDI0NCwgMTQ0LCA4MCwgMjMwLCAzLCAyMTYsIDEwMSwgODIsIDgwLCAyMzAsIDMsIDIxNiwgMTAxLCAzLCAKKyAgICAyMDUsIDE4NiwgMjExLCAyNDEsIDgyLCA4MCwgMjMwLCAzLCAyMTYsIDEwMSwgMTMxLCAyMDYsIDIyMSwgMjM3LCAxMzcsIAorICAgIDgwLCAyMzAsIDMsIDIxNiwgMTAxLCAzLCAyMDUsIDE4NiwgMjExLCAyNDEsIDEzMSwgMjA2LCAyMjEsIDIzNywgMTM3LCA4MCwgCisgICAgMjMwLCAzLCAyMTYsIDEwMSwgMTMxLCAyMjYsIDI1MSwgMjM3LCAxMzcsIDQzLCAyMTgsIDI5LCA4MiwgMTM5LCAyMDksIAorICAgIDE2NCwgMjI3LCAxMTUsIDI0MCwgNTIsIDIxMywgMTMxLCA5NywgMjM3LCA5NywgMjIxLCA0NCwgMjA5LCAxNTIsIDIzNywgCisgICAgOTcsIDIyMSwgNDQsIDIwNywgMTUxLCAyMzcsIDk3LCAyMjEsIDQ0LCAyMDksIDUzLCA4MCwgMTM5LCAyMzAsIDE5OSwgODIsIAorICAgIDIyNSwgNzIsIDgyLCAyMTksIDcxLCAyNTAsIDI1MSwgODIsIDEzOSwgNTcsIDIzMSwgMzEsIDEzOSwgMTYyLCAyNDAsIDEwLCAKKyAgICAyMTEsIDIyOCwgMTcyLCAxLCA1LCA2MywgMTcyLCAxLCA2MywgMTcyLCAxLCA1LCA3NSwgMTcyLCAxLCA3NSwgMTcyLCAxLCAKKyAgICA1LCA2OCwgMTcyLCAxLCA2OCwgMTcyLCAxLCA1LCA3NCwgMTcyLCAxLCA3NCwgMTcyLCAxLCA1LCA3OCwgMTcyLCAxLCA3OCwgCisgICAgMTcyLCAxLCAxNzMsIDE3MiwgMSwgMjM5LCA4LCAxNzIsIDEsIDIyOSwgMTAwLCAxNzIsIDEsIDIzOCwgODEsIDE3MiwgMSwgCisgICAgMjI4LCAyMDksIDE3MiwgMSwgMjM3LCAyMzAsIDE3MiwgMSwgMjI5LCAyMDEsIDE3MiwgMSwgMjM4LCAxOTAsIDE3MiwgMSwgCisgICAgMjI5LCAyNiwgMTcyLCAxLCAyMzgsIDM5LCAxNzIsIDEsIDIxNSwgMzYsIDE3MiwgMSwgMjAyLCAxMTYsIDE3MiwgMSwgMjEyLCAKKyAgICAxNjIsIDE3MiwgMSwgMjAyLCAzOSwgMTcyLCAxLCAyMTEsIDEwLCAxNzIsIDEsIDIwMiwgNiwgMTcyLCAxLCAyMTQsIDE3NywgCisgICAgMTcyLCAxLCAyMDIsIDkyLCAxNzIsIDEsIDIxMiwgMTMsIDE3MiwgMSwgMjAyLCAxNywgMTcyLCAxLCAyMTAsIDIyLCAxNzIsIAorICAgIDEsIDI0NCwgMjEyLCAxNzIsIDEsIDIwOSwgMiwgMTcyLCAxLCAyNDMsIDIzMywgMTcyLCAxLCA1LCAyMDcsIDIwMywgMTcyLCAKKyAgICAxLCAyMDcsIDIwMywgMTcyLCAxLCAyNDIsIDQyLCAxNzIsIDEsIDIwOSwgMTg3LCAxNzIsIDEsIDI0NCwgNzUsIDE3MiwgMSwgCisgICAgMTM1LCAxNzIsIDEsIDI0MywgMTEzLCAxNzIsIDEsIDIwMSwgMjAxLCAxNzIsIDEsIDIyMiwgMTAwLCAxNzIsIDEsIDIyMSwgCisgICAgODQsIDE3MiwgMSwgMjIyLCAyNDAsIDE3MiwgMSwgMjIxLCAxOTEsIDE3MiwgMSwgMTUyLCAxNzIsIDEsIDI0OSwgMzIsIAorICAgIDE3MiwgMSwgMTg1LCAxNzIsIDEsIDIzNywgMywgMTcyLCAxLCAyNDgsIDg2LCAxNzIsIDEsIDIxOCwgMTY3LCAxNzIsIDEsIAorICAgIDIzNiwgMjYsIDE3MiwgMSwgMjQ3LCAxOTMsIDE3MiwgMSwgMjE3LCAxOTEsIDE3MiwgMSwgMjM3LCA2NywgMTcyLCAxLCAKKyAgICAyNDgsIDE2MiwgMTcyLCAxLCAyMTksIDM0LCAxNzIsIDEsIDIzNiwgMTM2LCAxNzIsIDEsIDI0OCwgMjMsIDE3MiwgMSwgCisgICAgMjE4LCA2OSwgMTcyLCAxLCAxOTIsIDE3MiwgMSwgMjI0LCAxNTUsIDE3MiwgMSwgMjIzLCAyNDYsIDE3MiwgMSwgMjI1LCAKKyAgICAyMCwgMTcyLCAxLCAyMjQsIDgyLCAxNzIsIDEsIDUsIDE5OCwgMTcyLCAxLCAxOTgsIDE3MiwgMSwgNSwgMjAyLCAyMTMsIAorICAgIDE3MiwgMSwgMjAyLCAyMTMsIDE3MiwgMSwgNSwgMjAyLCAyNDcsIDE3MiwgMSwgMjAyLCAyNDcsIDE3MiwgMSwgMjE2LCAKKyAgICAyMjAsIDE3MiwgMSwgMjE2LCA1NywgMTcyLCAxLCAyMTUsIDE0NSwgMTcyLCAxLCAyMTYsIDE1OCwgMTcyLCAxLCAyMTUsIAorICAgIDIyNywgMTcyLCAxLCA1LCAyMDQsIDExMSwgMTcyLCAxLCAyMDQsIDExMSwgMTcyLCAxLCAyMDQsIDMwLCAxNzIsIDEsIDIwNCwgCisgICAgNjIsIDE3MiwgMSwgMjA0LCAwLCAxNzIsIDEsIDIyMywgMTYzLCAxNzIsIDEsIDIwNCwgMTYzLCAxNzIsIDEsIDUsIDE3MywgCisgICAgMTcyLCAxLCA1LCAyMjksIDIwMSwgMzksIDIyOSwgMjI1LCAyMDUsIDE4NiwgMjExLCAyNDEsIDgyLCAzOSwgMjI5LCAyMjUsIAorICAgIDIxMywgMTQ4LCAyMTEsIDI0MSwgODIsIDIyOSwgMjI1LCAyMDUsIDE4NiwgMjExLCAyNDEsIDgyLCAyMjksIDIyNSwgMjEzLCAKKyAgICAxNDgsIDIxMSwgMjQxLCA4MiwgMTcyLCAyMzAsIDE5OSwgODIsIDE3MiwgMjA1LCAxODYsIDIzMCwgMTk5LCA4MiwgMTcyLCAKKyAgICAyNDMsIDE5MiwgMjAyLCAyMjgsIDIyOSwgMjI1LCA1MiwgMjM1LCAyMjAsIDY3LCAxLCA1LCA2MywgNjcsIDEsIDYzLCA2NywgCisgICAgMSwgNSwgNzUsIDY3LCAxLCA3NSwgNjcsIDEsIDUsIDY4LCA2NywgMSwgNjgsIDY3LCAxLCA1LCA3NCwgNjcsIDEsIDc0LCAKKyAgICA2NywgMSwgNSwgNzgsIDY3LCAxLCA3OCwgNjcsIDEsIDE3MywgNjcsIDEsIDIzOSwgOCwgNjcsIDEsIDIyOSwgMTAwLCA2NywgCisgICAgMSwgMjM4LCA4MSwgNjcsIDEsIDIyOCwgMjA5LCA2NywgMSwgMjM3LCAyMzAsIDY3LCAxLCAyMjksIDIwMSwgNjcsIDEsIAorICAgIDIzOCwgMTkwLCA2NywgMSwgMjI5LCAyNiwgNjcsIDEsIDIzOCwgMzksIDY3LCAxLCAyMTUsIDM2LCA2NywgMSwgMjAyLCAKKyAgICAxMTYsIDY3LCAxLCAyMTIsIDE2MiwgNjcsIDEsIDIwMiwgMzksIDY3LCAxLCAyMTEsIDEwLCA2NywgMSwgMjAyLCA2LCA2NywgCisgICAgMSwgMjE0LCAxNzcsIDY3LCAxLCAyMDIsIDkyLCA2NywgMSwgMjEyLCAxMywgNjcsIDEsIDIwMiwgMTcsIDY3LCAxLCAyMTAsIAorICAgIDIyLCA2NywgMSwgMjQ0LCAyMTIsIDY3LCAxLCAyMDksIDIsIDY3LCAxLCAyNDMsIDIzMywgNjcsIDEsIDUsIDIwNywgMjAzLCAKKyAgICA2NywgMSwgMjA3LCAyMDMsIDY3LCAxLCAyNDIsIDQyLCA2NywgMSwgMjA5LCAxODcsIDY3LCAxLCAyNDQsIDc1LCA2NywgMSwgCisgICAgMTM1LCA2NywgMSwgMjQzLCAxMTMsIDY3LCAxLCAyMDEsIDIwMSwgNjcsIDEsIDIyMiwgMTAwLCA2NywgMSwgMjIxLCA4NCwgCisgICAgNjcsIDEsIDIyMiwgMjQwLCA2NywgMSwgMjIxLCAxOTEsIDY3LCAxLCAxNTIsIDY3LCAxLCAyNDksIDMyLCA2NywgMSwgMTg1LCAKKyAgICA2NywgMSwgMjM3LCAzLCA2NywgMSwgMjQ4LCA4NiwgNjcsIDEsIDIxOCwgMTY3LCA2NywgMSwgMjM2LCAyNiwgNjcsIDEsIAorICAgIDI0NywgMTkzLCA2NywgMSwgMjE3LCAxOTEsIDY3LCAxLCAyMzcsIDY3LCA2NywgMSwgMjQ4LCAxNjIsIDY3LCAxLCAyMTksIAorICAgIDM0LCA2NywgMSwgMjM2LCAxMzYsIDY3LCAxLCAyNDgsIDIzLCA2NywgMSwgMjE4LCA2OSwgNjcsIDEsIDE5MiwgNjcsIDEsIAorICAgIDIyNCwgMTU1LCA2NywgMSwgMjIzLCAyNDYsIDY3LCAxLCAyMjUsIDIwLCA2NywgMSwgMjI0LCA4MiwgNjcsIDEsIDUsIDE5OCwgCisgICAgNjcsIDEsIDE5OCwgNjcsIDEsIDUsIDIwMiwgMjEzLCA2NywgMSwgMjAyLCAyMTMsIDY3LCAxLCA1LCAyMDIsIDI0NywgNjcsIAorICAgIDEsIDIwMiwgMjQ3LCA2NywgMSwgMjE2LCAyMjAsIDY3LCAxLCAyMTYsIDU3LCA2NywgMSwgMjE1LCAxNDUsIDY3LCAxLCAKKyAgICAyMTYsIDE1OCwgNjcsIDEsIDIxNSwgMjI3LCA2NywgMSwgNSwgMjA0LCAxMTEsIDY3LCAxLCAyMDQsIDExMSwgNjcsIDEsIAorICAgIDIwNCwgMzAsIDY3LCAxLCAyMDQsIDYyLCA2NywgMSwgMjA0LCAwLCA2NywgMSwgMjIzLCAxNjMsIDY3LCAxLCAyMDQsIDE2MywgCisgICAgNjcsIDEsIDUsIDE3MywgNjcsIDEsIDUsIDIyOSwgMjAxLCA2NywgMSwgMjA2LCA4NiwgNjcsIDEsIDIwNSwgMjMwLCA2NywgCisgICAgMSwgMjA2LCA1NSwgNjcsIDEsIDIwNSwgMTg5LCA2NywgMTAxLCAyNDMsIDg1LCAyMjksIDIyNSwgMjE3LCAyMTUsIDIxMSwgCisgICAgMjQxLCA4MiwgNjcsIDIzMCwgMTk5LCA4MiwgNjcsIDIwNSwgMTg2LCAyMzAsIDE5OSwgODIsIDY3LCAyNDMsIDE5MiwgMjI4LCAKKyAgICAyNDksIDI0OCwgMSwgMSwgMjQ5LCAyNTUsIDI0OCwgMSwgMSwgMjE5LCAxODQsIDI0OCwgMSwgMSwgMjI2LCAxODUsIDI0OCwgCisgICAgMSwgMSwgMjQwLCAxNzQsIDI0OCwgMSwgMSwgMjQ1LCA1MSwgMjQ4LCAxLCAxLCAyMTAsIDY5LCAyNDgsIDEsIDEsIDIyMywgCisgICAgMTYzLCAyNDgsIDEsIDEsIDE1OSwgMjQ4LCAxLCAxLCAyMzksIDc1LCAyNDgsIDEsIDEsIDIzMCwgNTQsIDI0OCwgMSwgMSwgCisgICAgMjM3LCAxNzEsIDI0OCwgMSwgMSwgMjMwLCAxODQsIDI0OCwgMSwgMSwgMjE3LCAxMzQsIDI0OCwgMSwgMSwgMjAzLCAxOTYsIAorICAgIDI0OCwgMSwgMSwgMjAyLCA4MSwgMjQ4LCAxLCAxLCAyNDYsIDIwMCwgMjQ4LCAxLCAxLCAyMTMsIDkyLCAyNDgsIDEsIDEsIAorICAgIDE0NiwgMjQ4LCAxLCAxLCAyMDIsIDE1OSwgMjQ4LCAxLCAxLCAyNDcsIDEyNSwgMjQ4LCAxLCAxLCAxOTQsIDI0OCwgMSwgMSwgCisgICAgNjMsIDI0OCwgMSwgMSwgNzgsIDI0OCwgMSwgMSwgNzQsIDI0OCwgMSwgMSwgMjQxLCAxNDcsIDI0OCwgMSwgMSwgMjUxLCAKKyAgICA2NCwgMjQ4LCAxLCAxLCAyNDEsIDE0NSwgMjQ4LCAxLCAxLCAyNTAsIDM0LCAyNDgsIDEsIDEsIDIxOSwgMjE2LCAyNDgsIDEsIAorICAgIDEsIDI1MCwgMjMxLCAyNDgsIDEsIDEsIDI0MSwgOTIsIDI0OCwgMSwgMSwgMjUwLCAyMjMsIDI0OCwgMSwgMSwgMjQxLCA3OCwgCisgICAgMjQ4LCAxLCAxLCAyNDEsIDI4LCAyNDgsIDEsIDEsIDc1LCAyNDgsIDEsIDEsIDY4LCAyNDgsIDEsIDEsIDIzMCwgMTk3LCAKKyAgICAyNDgsIDEsIDEsIDIwNiwgMTY0LCAyNDgsIDEsIDEsIDIyMiwgMjA1LCAyNDgsIDEsIDEsIDIzOCwgNDMsIDI0OCwgMSwgMSwgCisgICAgMjMxLCA4NCwgMjgsIDEsIDIyOSwgNTksIDI4LCAxLCAyMTEsIDE1NiwgMjgsIDEsIDIyOSwgNTIsIDI4LCAxLCAyMjIsIDkzLCAKKyAgICAyOCwgMSwgMjIyLCA5MSwgMjgsIDEsIDIyMiwgOTAsIDI4LCAxLCAyMDgsIDI0MCwgMjgsIDEsIDIxMSwgMTQ1LCAyOCwgMSwgCisgICAgMjE2LCA0NywgMjgsIDEsIDIxNiwgNDIsIDI4LCAxLCAyMTYsIDM5LCAyOCwgMSwgMjE2LCAzMiwgMjgsIDEsIDIxNiwgMjcsIAorICAgIDI4LCAxLCAyMTYsIDIyLCAyOCwgMSwgMjE2LCAzMywgMjgsIDEsIDIxNiwgNDUsIDI4LCAxLCAyMjQsIDE0MSwgMjgsIDEsIAorICAgIDIxOCwgMTUzLCAyOCwgMSwgMjExLCAxNTMsIDI4LCAxLCAyMTgsIDE0MiwgMjgsIDEsIDIxMiwgMTExLCAyOCwgMSwgMjExLCAKKyAgICAxNTAsIDI4LCAxLCAyMzEsIDEwNiwgMjgsIDEsIDI0NiwgNzQsIDI4LCAxLCAyMTEsIDE2MCwgMjgsIDEsIDI0NiwgMTM4LCAKKyAgICAyOCwgMSwgMjI5LCAxMjAsIDI4LCAxLCAyMDksIDY2LCAyOCwgMSwgMjE4LCAxOTAsIDI4LCAxLCAyMzYsIDI1MSwgMjgsIDEsIAorICAgIDYzLCAyOCwgMSwgMjUxLCAxMDksIDI4LCAxLCAxOTgsIDI4LCAxLCAyMDMsIDk5LCAyOCwgMSwgMjQxLCA1NSwgMjgsIDEsIAorICAgIDc0LCAyOCwgMSwgMjAzLCAzOSwgMjgsIDEsIDIwMywgNTIsIDI4LCAxLCA3OCwgMjgsIDEsIDIwNCwgMTExLCAyOCwgMSwgCisgICAgMjA0LCAxMDcsIDI4LCAxLCAyMjAsIDczLCAyOCwgMSwgMjAyLCAyNDcsIDI4LCAxLCA2OCwgMjgsIDEsIDIwNCwgNDgsIDI4LCAKKyAgICAxLCAyMDQsIDYyLCAyOCwgMSwgMjA0LCAzMCwgMjgsIDEsIDIwMiwgMjEzLCAyOCwgMSwgMjQwLCAyMzgsIDI4LCAxLCAyMDMsIAorICAgIDExLCAyOCwgMSwgNzUsIDI4LCAyNDAsIDcsIDI4LCAxLCAyMTEsIDE1NCwgMjgsIDEsIDIyMiwgODMsIDI4LCAxLCAyMjIsIAorICAgIDg1LCAyOCwgMSwgMjIyLCA4OCwgMjgsIDEsIDIxNiwgNDAsIDI4LCAxLCAyMTYsIDIxLCAyOCwgMSwgMjE2LCAyOSwgMjgsIAorICAgIDEsIDIxNiwgMzQsIDI4LCAxLCAyMTYsIDE5LCAyOCwgMSwgMjI0LCAxMzQsIDI4LCAxLCAyMjQsIDEzMSwgMjgsIDEsIDIyNCwgCisgICAgMTM1LCAyOCwgMSwgMjI5LCAyNDYsIDI4LCAxLCAyMTgsIDE0OCwgMjgsIDEsIDIxOCwgMTM0LCAyOCwgMSwgMjE4LCAxNDAsIAorICAgIDI4LCAxLCAyMTgsIDEzNywgMjgsIDEsIDIxOCwgMTUxLCAyOCwgMSwgMjE4LCAxMzUsIDI4LCAxLCAyMjksIDI0NCwgMjgsIAorICAgIDEsIDIyOSwgMjQyLCAyOCwgMSwgMjEyLCAxMDQsIDI4LCAxLCAyMTIsIDEwMiwgMjgsIDEsIDIxMiwgOTQsIDI4LCAxLCAKKyAgICAyMTIsIDk5LCAyOCwgMSwgMjEyLCAxMDksIDI4LCAxLCAyMTksIDEwNywgMjgsIDEsIDIxMSwgMTU3LCAyOCwgMSwgMjAzLCAKKyAgICAyOSwgMjgsIDEsIDIwMywgMjUsIDI4LCAxLCAyMDMsIDI2LCAyOCwgMSwgMjI5LCAyNDUsIDI4LCAxLCAyMTEsIDE1OCwgMjgsIAorICAgIDEsIDIwMywgMzUsIDI4LCAxLCAyMDIsIDI0MSwgMjgsIDEsIDIwMiwgMjQwLCAyOCwgMSwgMjAyLCAyNDMsIDI4LCAxLCAKKyAgICAyMDIsIDIwNCwgMjgsIDEsIDIwMiwgMjA1LCAyOCwgMSwgMjAyLCAyMDgsIDI4LCAxLCAyNTAsIDEzNywgMjgsIDEsIDI1MCwgCisgICAgMTMxLCAxMzksIDI1MCwgMjA1LCAyMjcsIDEwMywgODIsIDEzOSwgMjUwLCAyMDUsIDIxNiwgNzQsIDgyLCAxMzksIDI1MCwgCisgICAgMjA1LCAxMTgsIDgyLCAxMzksIDI1MCwgMjA1LCAxMjAsIDgyLCAxMzksIDI1MCwgMjA1LCAxMjYsIDgyLCAxMzksIDI1MCwgCisgICAgMjA1LCAyMzksIDE0NywgODIsIDEzOSwgMjUwLCAyMDUsIDIwOCwgMTQ1LCA4MiwgMTM5LCAyNTAsIDIwNSwgMTAxLCA4MiwgCisgICAgMTM5LCAyNTAsIDIwNSwgMjQ3LCAyNDgsIDgyLCAxMzksIDI1MCwgMjA1LCAyMzksIDI0NSwgODIsIDEzOSwgMjUwLCAyMDUsIAorICAgIDIxNCwgMTcxLCA4MiwgMTM5LCAyNTAsIDIwNSwgMjA5LCA2MSwgODIsIDEzOSwgMjUwLCAyMDUsIDIzOSwgMTQwLCA4MiwgCisgICAgMTM5LCAyNTAsIDIwNSwgMjM3LCA1MiwgODIsIDEzOSwgMjUwLCAyMDUsIDI0MSwgMTgwLCA4MiwgMTM5LCAyNTAsIDIwNSwgCisgICAgMjI1LCAxMjMsIDgyLCAyNDgsIDEsIDEsIDI0NywgMTkzLCAyNDgsIDEsIDEsIDIwMiwgMzksIDI0OCwgMSwgMSwgMjMwLCAKKyAgICAxNDEsIDI0OCwgMSwgMSwgMjM3LCAyMzAsIDI0OCwgMSwgMSwgMjQxLCAxNjEsIDI0OCwgMSwgMSwgMjQxLCA3NSwgMjQ4LCAKKyAgICAxLCAxLCAyMjAsIDE4LCAyNDgsIDEsIDEsIDIyMCwgMjIsIDI0OCwgMSwgMSwgMjMwLCAyMjQsIDI0OCwgMSwgMSwgMjUwLCAKKyAgICAyMDcsIDI0OCwgMSwgMSwgMjMxLCAxNiwgMjQ4LCAxLCAxLCAyMDYsIDIyOSwgMjQ4LCAxLCAxLCAyMzEsIDY2LCAyNDgsIDEsIAorICAgIDEsIDIyMiwgMTgzLCAyNDgsIDEsIDEsIDI1MSwgNTgsIDI0OCwgMSwgMSwgMjUwLCAyOSwgMjQ4LCAxLCAxLCAyNTAsIDI0NywgCisgICAgMjQ4LCAxLCAxLCAyMjAsIDM5LCAyNDgsIDEsIDEsIDIyMCwgMjQsIDI0OCwgMSwgMSwgMjMxLCAxMywgMjQ4LCAxLCA0NiwgCisgICAgMSwgMjE5LCAxODQsIDI0OCwgMSwgNDYsIDEsIDIxMCwgNjksIDI0OCwgMSwgNDYsIDEsIDIzMCwgNTQsIDI0OCwgMSwgNDYsIAorICAgIDEsIDIzNywgMTcxLCAyNDgsIDEsIDEsIDIzOCwgMTIwLCAyNDgsIDEsIDEsIDIyNywgMTYyLCAyNDgsIDEsIDEsIDIwMSwgCisgICAgMjQyLCAxMiwgMjExLCAzMiwgMjEwLCA2OSwgMTIsIDIxMSwgMzIsIDIwNCwgNDEsIDEyLCAyMTEsIDMyLCAyMDMsIDE3MSwgCisgICAgMTIsIDIxMSwgMzIsIDI0NywgMTM4LCAxMiwgMjExLCAzMiwgMjEwLCAxNzMsIDEyLCAyMTEsIDMyLCAyMzUsIDIxMCwgMTIsIAorICAgIDIxMSwgMzIsIDIzNSwgMjE0LCAxMiwgMjExLCAzMiwgMjM2LCAzNSwgMTIsIDIxMSwgMzIsIDIzNSwgMjExLCAxMiwgMjExLCAKKyAgICAzMiwgMjEwLCA3MiwgMTIsIDIxMSwgMzIsIDIzNSwgMjEzLCAxMiwgMjExLCAzMiwgMjM1LCAyMDksIDEyLCAyMTEsIDMyLCAKKyAgICAyMzYsIDMzLCAxMiwgMjExLCAzMiwgMjM1LCAyMTIsIDEyLCAyMTEsIDMyLCAyMzUsIDIwOCwgMTIsIDIxMSwgMzIsIDIyMywgCisgICAgMTYzLCAxMiwgMjExLCAzMiwgMjM3LCAxNzEsIDEyLCAyMTEsIDMyLCAxOTQsIDEyLCAyMTEsIDMyLCAyMTksIDE4NCwgMTIsIAorICAgIDIxMSwgMzIsIDIxMSwgMjMxLCAxMiwgMjExLCAzMiwgMjQ1LCA1MSwgMTIsIDIxMSwgMzIsIDIzNSwgMjE1LCAxMiwgMjExLCAKKyAgICAzMiwgMjM3LCAxMywgMTIsIDIxMSwgMzIsIDIxMCwgODEsIDEyLCAyMTEsIDMyLCAyMTAsIDE1MiwgMTIsIDIxMSwgMzIsIAorICAgIDIxMSwgMTA4LCAxMiwgMjExLCAzMiwgMjEzLCA5OCwgMTIsIDIxMSwgMzIsIDIxOSwgMzgsIDEyLCAyMTEsIDMyLCAyMTcsIAorICAgIDEzNiwgMTIsIDIxMSwgMzIsIDIwOCwgMTc0LCAxMiwgMjExLCAzMiwgMjEwLCA3MSwgMTIsIDIxMSwgMzIsIDIxMCwgMTYzLCAKKyAgICAxMiwgMjExLCAzMiwgMjM1LCAyMjMsIDEyLCAyMTEsIDMyLCAyMzUsIDIwNywgMTIsIDIxMSwgMzIsIDIxOCwgMjEwLCAxMiwgCisgICAgMjExLCAzMiwgMjE3LCAxMzQsIDY3LCAxLCA1LCAyMjgsIDIwOSwgNjcsIDEsIDUsIDIxMiwgMTYyLCA2NywgMSwgNSwgMjExLCAKKyAgICAxMCwgNjcsIDEsIDUsIDEzNSwgNjcsIDEsIDUsIDIyMSwgODQsIDY3LCAxLCA1LCAxNTIsIDY3LCAxLCA1LCAyMzcsIDMsIAorICAgIDY3LCAxLCA1LCAyMzYsIDI2LCA2NywgMSwgNSwgMjM3LCA2NywgNjcsIDEsIDUsIDIzNiwgMTM2LCA2NywgMSwgNSwgMjIzLCAKKyAgICAyNDYsIDY3LCAxLCA1LCAyMTYsIDIyMCwgNjcsIDEsIDUsIDIxNiwgNTcsIDY3LCAxLCA1LCAyMTUsIDE0NSwgNjcsIDEsIDUsIAorICAgIDIxNiwgMTU4LCA2NywgMSwgNSwgMjE1LCAyMjcsIDEwMiwgMjgsIDIyOSwgNTksIDEwMiwgMjgsIDIyMiwgOTMsIDEwMiwgCisgICAgMjgsIDIwOCwgMjQwLCAxMDIsIDI4LCAyMTYsIDQ3LCAxMDIsIDI4LCAyMjQsIDE0MSwgMTAyLCAyOCwgMjE4LCAxNTMsIAorICAgIDEwMiwgMjgsIDIxMiwgMTExLCAxMDIsIDI4LCAyMzEsIDEwNiwgMTAyLCAyOCwgMjQ2LCA3NCwgMTAyLCAyOCwgMjQ2LCAKKyAgICAxMzgsIDEwMiwgMjgsIDIyOSwgMTIwLCAxMDIsIDI4LCAyMDksIDY2LCAxMDIsIDI4LCAyMTgsIDE5MCwgMTAyLCAyOCwgCisgICAgMjM2LCAyNTEsIDEwMiwgMjgsIDIyOSwgNjAsIDYzLCAxMDIsIDI4LCAyMjIsIDk0LCA2MywgMTAyLCAyOCwgMjA4LCAyNDEsIAorICAgIDYzLCAxMDIsIDI4LCAyMTYsIDQ4LCA2MywgMTAyLCAyOCwgMjI0LCAxNDIsIDYzLCAxMDIsIDI4LCAyMTgsIDE1NCwgNjMsIAorICAgIDEwMiwgMjgsIDIxMiwgMTEyLCA2MywgMTAyLCAyOCwgMjMxLCAxMDcsIDYzLCAxMDIsIDI4LCAyNDYsIDc1LCA2MywgMTAyLCAKKyAgICAyOCwgMjQ2LCAxMzksIDYzLCAxMDIsIDI4LCAyMjksIDEyMSwgNjMsIDEwMiwgMjgsIDIwOSwgNjcsIDYzLCAxMDIsIDI4LCAKKyAgICAyMTgsIDE5MSwgNjMsIDEwMiwgMjgsIDIzNiwgMjUyLCA2MywgMTAyLCAyOCwgMjQ2LCA3NSwgNjgsIDEwMiwgMjI4LCAyNTMsIAorICAgIDE2NywgMjIwLCA1NCwgMTAyLCAyMjgsIDI1MywgMTY3LCAxNTgsIDIzNiwgMjYsIDEwMiwgMTg5LCAxMDUsIDEwMiwgMTg5LCAKKyAgICAxMDgsIDEwMiwgMTg5LCAxNDcsIDEwMiwgMTg5LCAxNDksIDEwMiwgMTg5LCAxNzAsIDEwMiwgMTg5LCAxOTUsIDEwMiwgCisgICAgMTg5LCAyMTMsIDExMSwgMTAyLCAxODksIDE5OSwgMTAyLCAxODksIDIyMiwgNjMsIDEwMiwgMTg5LCAyMDksIDE1MiwgMTAyLCAKKyAgICAxODksIDIyNCwgMjksIDEwMiwgMTg5LCAyMzksIDI0OSwgMTAyLCAxODksIDIwNCwgODAsIDEwMiwgMTg5LCAyMDMsIDI0MywgCisgICAgMTAyLCAxODksIDIyNCwgMjIwLCAxMDIsIDE4OSwgMjQxLCAxNzksIDEwMiwgMTg5LCAyMTAsIDIxNCwgMTAyLCAxODksIAorICAgIDIxMSwgNjQsIDEwMiwgMTg5LCAyMzcsIDc0LCAxMDIsIDE4OSwgMjEyLCA5LCAxMDIsIDE4OSwgMjIzLCA4NCwgMTAyLCAKKyAgICAxODksIDIxMSwgMjEzLCAxMDIsIDE4OSwgMjQwLCA0LCAxMDIsIDE4OSwgMjQ1LCAyMTEsIDEwMiwgMTg5LCAyMjgsIDEwMiwgCisgICAgMTAyLCAxODksIDIxNiwgOTUsIDEwMiwgMTg5LCAyNDcsIDcxLCAxMDIsIDE4OSwgMjExLCAxNCwgMTAyLCAxODksIDIxMCwgCisgICAgMTk2LCAxMDIsIDE4OSwgMjQxLCA2NSwgMTAyLCAxODksIDIxNiwgODcsIDEwMiwgMTg5LCAyNTEsIDEwLCAxMDIsIDE4OSwgCisgICAgMjQwLCAzMywgMTAyLCAxODksIDIxNiwgODUsIDEwMiwgMTg5LCAyMTMsIDE0OSwgMTAyLCAxODksIDIxNiwgMTU3LCA0MywgCisgICAgMTg5LCAyMTcsIDQ2LCA0MywgMTg5LCAyMjksIDgzLCA0MywgMTg5LCAyMTQsIDE5NSwgNDMsIDE4OSwgMjI4LCAyNDksIDQzLCAKKyAgICA0MiwgMjA5LCAxNTMsIDIyMCwgMzIsIDYyLCAyMTEsIDE3NywgNDMsIDQyLCAyMDcsIDE1MiwgMjIwLCAzMiwgNjIsIDIxMSwgCisgICAgMTc3LCA0MywgNDIsIDIwOSwgNTQsIDIyMCwgMzIsIDYyLCAyMTEsIDE3NywgNDMsIDQyLCAyMzksIDE1NCwgMjIwLCAzMiwgCisgICAgNjIsIDIxMSwgMTc3LCA0MywgNDIsIDI0MCwgMTksIDIyMCwgMzIsIDYyLCAyMTEsIDE3NywgNDMsIDQyLCAyMTIsIDc1LCAKKyAgICAyMjAsIDMyLCA2MiwgMjExLCAxNzcsIDQzLCA0MiwgMjEzLCAxMDYsIDIyMCwgMzIsIDYyLCAyMTEsIDE3NywgNDMsIDQyLCAKKyAgICAyNDEsIDEzNSwgMjIwLCAzMiwgNjIsIDIxMSwgMTc3LCAyMTksIDY3LCA1NCwgNDMsIDQyLCAyMDcsIDE1MiwgMTA1LCA0MywgCisgICAgNDIsIDIwNywgMTUyLCAxMDgsIDQzLCA0MiwgMjA3LCAxNTIsIDE0NywgNDMsIDQyLCAyMDcsIDE1MiwgMTQ5LCA0MywgNDIsIAorICAgIDIwNywgMTUyLCAxNzAsIDQzLCA0MiwgMjA3LCAxNTIsIDE5NSwgNDMsIDQyLCAyMDcsIDE1MiwgMjEzLCAxMTEsIDQzLCA0MiwgCisgICAgMjA3LCAxNTIsIDE5OSwgNDMsIDQyLCAyMDcsIDE1MiwgMjIyLCA2MywgNDMsIDQyLCAyMDksIDUzLCA0MywgNDIsIDIwOSwgCisgICAgNTQsIDEwNSwgNDMsIDQyLCAyMDksIDU0LCAxMDgsIDQzLCA0MiwgMjA5LCA1NCwgMTQ3LCA0MywgNDIsIDIwOSwgNTQsIAorICAgIDE0OSwgNDMsIDQyLCAyMDksIDU0LCAxNzAsIDQzLCAyOCwgMjI5LCA1OSwgNDMsIDI4LCAyMjIsIDkzLCA0MywgMjgsIDIwOCwgCisgICAgMjQwLCA0MywgMjgsIDIxNiwgNDcsIDQzLCAyOCwgMjI0LCAxNDEsIDQzLCAyOCwgMjE4LCAxNTMsIDQzLCAyOCwgMjEyLCAKKyAgICAxMTEsIDQzLCAyOCwgMjMxLCAxMDYsIDQzLCAyOCwgMjQ2LCA3NCwgNDMsIDI4LCAyNDYsIDEzOCwgNDMsIDI4LCAyMjksIAorICAgIDEyMCwgNDMsIDI4LCAyMDksIDY2LCA0MywgMjgsIDIxOCwgMTkwLCA0MywgMjgsIDIzNiwgMjUxLCA0MywgMjgsIDIyOSwgCisgICAgNjAsIDYzLCA0MywgMjgsIDIyMiwgOTQsIDYzLCA0MywgMjgsIDIwOCwgMjQxLCA2MywgNDMsIDI4LCAyMTYsIDQ4LCA2MywgCisgICAgNDMsIDI4LCAyMjQsIDE0MiwgNjMsIDQzLCAyOCwgMjE4LCAxNTQsIDYzLCA0MywgMjgsIDIxMiwgMTEyLCA2MywgNDMsIDI4LCAKKyAgICAyMzEsIDEwNywgNjMsIDQzLCAyOCwgMjQ2LCA3NSwgNjMsIDQzLCAyOCwgMjQ2LCAxMzksIDYzLCA0MywgMjgsIDIyOSwgCisgICAgMTIxLCA2MywgNDMsIDI4LCAyMDksIDY3LCA2MywgNDMsIDI4LCAyMTgsIDE5MSwgNjMsIDQzLCAyOCwgMjM2LCAyNTIsIDYzLCAKKyAgICA0MywgMjI4LCAyNTMsIDE2NywgMjQ2LCAxODksIDQzLCAyMjgsIDI1MywgMTY3LCAyMzAsIDc4LCA0MywgMjgsIDIzMSwgCisgICAgMTA3LCA2OCwgMjI4LCAyNTMsIDIxMSwgOTcsIDk3LCA0MywgMTg5LCAxMDUsIDQzLCAxODksIDEwOCwgNDMsIDE4OSwgMTQ3LCAKKyAgICA0MywgMTg5LCAxNDksIDQzLCAxODksIDE3MCwgNDMsIDE4OSwgMTk1LCA0MywgMTg5LCAyMTMsIDExMSwgNDMsIDE4OSwgCisgICAgMTk5LCA0MywgMTg5LCAyMjIsIDYzLCA0MywgMTg5LCAyMDksIDE1MiwgNDMsIDE4OSwgMjI0LCAyOSwgNDMsIDE4OSwgMjM5LCAKKyAgICAyNDksIDQzLCAxODksIDIwNCwgODAsIDQzLCAxODksIDIwMywgMjQzLCA0MywgMTg5LCAyMjQsIDIyMCwgNDMsIDE4OSwgCisgICAgMjQxLCAxNzksIDQzLCAxODksIDIxMCwgMjE0LCA0MywgMTg5LCAyMTEsIDY0LCA0MywgMTg5LCAyMzcsIDc0LCA0MywgMTg5LCAKKyAgICAyMTIsIDksIDQzLCAxODksIDIyMywgODQsIDQzLCAxODksIDIxMSwgMjEzLCA0MywgMTg5LCAyNDAsIDQsIDQzLCAxODksIAorICAgIDI0NSwgMjExLCA0MywgMTg5LCAyMjgsIDEwMiwgNDMsIDE4OSwgMjE0LCAxNjksIDQzLCAxODksIDIyNSwgMTI2LCA0MywgCisgICAgMTg5LCAyNDAsIDQyLCA0MywgMTg5LCAyMTAsIDIyNiwgNDMsIDE4OSwgMjQwLCAyMTYsIDQzLCAxODksIDIxNywgMjMzLCAKKyAgICA0MywgMTg5LCAyNTAsIDM4LCA0MywgMTg5LCAyMzAsIDIwMCwgNDMsIDE4OSwgMjE2LCA4NSwgNDMsIDE4OSwgMjQ1LCAxNzAsIAorICAgIDQzLCAxODksIDI0NSwgMTYwLCA0MywgMTg5LCAyMzYsIDI0NCwgNDMsIDE4OSwgMjQ2LCAyMTcsIDQzLCAxODksIDIyNywgMCwgCisgICAgNDMsIDE4OSwgMjI3LCAyMjIsIDQzLCAxODksIDIxNiwgMTYsIDQzLCAxODksIDIyNSwgMTEsIDQzLCAxODksIDIxNiwgMTEyLCAKKyAgICA0MywgMTg5LCAyMTEsIDE0LCA0MywgMTg5LCAyMTAsIDE5NiwgNDMsIDE4OSwgMjQxLCA2NSwgNDMsIDE4OSwgMjE2LCA4NywgCisgICAgNDMsIDE4OSwgMjUxLCAxMCwgNDMsIDE4OSwgMjIyLCA3OSwgNDMsIDQyLCAyMDksIDU0LCAxOTUsIDQzLCA0MiwgMjA5LCAKKyAgICA1NCwgMjEzLCAxMTEsIDQzLCA0MiwgMjA5LCA1NCwgMTk5LCA0MywgNDIsIDIwOSwgNTQsIDIyMiwgNjMsIDQzLCA0MiwgCisgICAgMjM5LCAxNTMsIDQzLCA0MiwgMjM5LCAxNTQsIDEwNSwgNDMsIDQyLCAyMzksIDE1NCwgMTA4LCA0MywgNDIsIDIzOSwgMTU0LCAKKyAgICAxNDcsIDQzLCA0MiwgMjM5LCAxNTQsIDE0OSwgNDMsIDQyLCAyMzksIDE1NCwgMTcwLCA0MywgNDIsIDIzOSwgMTU0LCAxOTUsIAorICAgIDQzLCA0MiwgMjM5LCAxNTQsIDIxMywgMTExLCA0MywgNDIsIDIzOSwgMTU0LCAxOTksIDQzLCA0MiwgMjM5LCAxNTQsIDIyMiwgCisgICAgNjMsIDQzLCA0MiwgMjQwLCAxOCwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyMzAsIDE3MSwgMTM5LCAyMDksIDE2NCwgMTYsIAorICAgIDM1LCAyNDAsIDU0LCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDIyNSwgOTQsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjUwLCAKKyAgICAxNTAsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjI1LCA2MywgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyMzAsIDc2LCAxMzksIAorICAgIDIwOSwgMTY0LCAxNiwgMzUsIDIzMCwgNzcsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjUwLCAzMCwgMTM5LCAyMDksIDE2NCwgCisgICAgMTYsIDM1LCAyMTMsIDEyOSwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyMjAsIDc5LCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIAorICAgIDIyMSwgMTUzLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgNzAsIDUxLCAyMzcsIDEzLCA1MSwgMjQxLCAyNCwgNTEsIAorICAgIDI0MCwgMjI2LCAyMjcsIDEyMCwgMjI3LCAxNDcsIDU0LCA0MywgNjcsIDYzLCA0MywgNjcsIDc1LCA0MywgNjcsIDY4LCA0MywgCisgICAgNjcsIDc0LCA0MywgNjcsIDc4LCA0MywgNjcsIDE3MywgNDMsIDY3LCAyMjksIDEwMCwgNDMsIDY3LCAyMjgsIDIwOSwgNDMsIAorICAgIDY3LCAyMjksIDIwMSwgNDMsIDY3LCAyMjksIDI2LCA0MywgNjcsIDIxNSwgMzYsIDQzLCA2NywgMjEyLCAxNjIsIDQzLCA2NywgCisgICAgMjExLCAxMCwgNDMsIDY3LCAyMTQsIDE3NywgNDMsIDY3LCAyMTIsIDEzLCA0MywgNjcsIDIxMCwgMjIsIDQzLCA2NywgMjA5LCAKKyAgICAyLCA0MywgNjcsIDIwNywgMjAzLCA0MywgNjcsIDIwOSwgMTg3LCA0MywgNjcsIDEzNSwgNDMsIDY3LCAyMDEsIDIwMSwgNDMsIAorICAgIDY3LCAyMjIsIDEwMCwgNDMsIDY3LCAyMjEsIDg0LCA0MywgNjcsIDIyMiwgMjQwLCA0MywgNjcsIDIyMSwgMTkxLCA0MywgCisgICAgNjcsIDE1MiwgNDMsIDY3LCAyMzcsIDMsIDQzLCA2NywgMjM2LCAyNiwgNDMsIDY3LCAyMzcsIDY3LCA0MywgNjcsIDIzNiwgCisgICAgMTM2LCA0MywgNjcsIDE5MiwgNDMsIDY3LCAyMjQsIDE1NSwgNDMsIDY3LCAyMjMsIDI0NiwgNDMsIDY3LCAyMjUsIDIwLCAKKyAgICA0MywgNjcsIDIyNCwgODIsIDQzLCA2NywgMTk4LCA0MywgNjcsIDIwMiwgMjEzLCA0MywgNjcsIDIwMiwgMjQ3LCA0MywgNjcsIAorICAgIDIxNiwgMjIwLCA0MywgNjcsIDIxNiwgNTcsIDQzLCA2NywgMjE1LCAxNDUsIDQzLCA2NywgMjE2LCAxNTgsIDQzLCA2NywgCisgICAgMjE1LCAyMjcsIDQzLCA2NywgMjA0LCAxMTEsIDQzLCA2NywgMjA0LCAzMCwgNDMsIDY3LCAyMDQsIDYyLCA0MywgNjcsIAorICAgIDIwNCwgMCwgNTEsIDI1MCwgMTc0LCA1MSwgMjUwLCA4MywgNTEsIDI1MCwgMjAxLCA1MSwgMjUxLCAyMzksIDUxLCAyMzEsIAorICAgIDE4LCA1MSwgMjMwLCAyNDIsIDUxLCAyMDYsIDIyNywgNTEsIDI0MCwgMjUzLCA1MSwgMjQxLCAxNTgsIDUxLCAyMjAsIDIxLCAKKyAgICA1MSwgMjIwLCAxNCwgNTEsIDIzMCwgMTYsIDUxLCAyMjksIDIzOCwgNTEsIDIyOSwgMjM1LCA1MSwgMjM4LCAyMjAsIDUxLCAKKyAgICAyMzgsIDIyOSwgNTEsIDIzOCwgNzAsIDUxLCAyMzgsIDY2LCA1MSwgMjI4LCAxMzIsIDUxLCAyMzgsIDU4LCA1MSwgMjI5LCAKKyAgICA3NSwgNTEsIDIyOSwgNzQsIDUxLCAyMjksIDczLCA1MSwgMjI5LCA3MiwgNTEsIDIzNywgMjAwLCA1MSwgMjM3LCAxOTksIAorICAgIDUxLCAyMjgsIDE4MCwgNTEsIDIyOCwgMTgyLCA1MSwgMjI5LCAxOTQsIDUxLCAyMjgsIDI1MSwgNTEsIDIyOSwgMywgNTEsIAorICAgIDIxNSwgMTcsIDUxLCAyMTQsIDIzNiwgNTEsIDIxMiwgOTIsIDUxLCAyMTMsIDEzNCwgNTEsIDIxMywgMTMzLCA1MSwgMjQ0LCAKKyAgICAyMDksIDUxLCAyNDQsIDE0LCA1MSwgMjQzLCA4NiwgNTEsIDIwOCwgMTYzLCA1MSwgMjIzLCA3OSwgNTEsIDIyMSwgMTU0LCAKKyAgICA1MSwgMjM3LCAxNDIsIDUxLCAyMTksIDE2MywgNTEsIDIxOSwgMTYyLCA1MSwgMjQ5LCAyOSwgNTEsIDIxOCwgMTY0LCA1MSwgCisgICAgMjE4LCAxMjcsIDUxLCAyMTgsIDEyOCwgNTEsIDI0OCwgNTcsIDUxLCAyMzYsIDI0LCA1MSwgMjM2LCAxOSwgNTEsIDI0NywgCisgICAgMTUxLCA1MSwgMjM2LCA0LCA1MSwgMjM3LCAzOSwgNTEsIDIxOCwgMjIwLCA1MSwgMjE5LCA0LCA1MSwgMjM3LCAyMiwgNTEsIAorICAgIDIxOSwgMCwgNTEsIDIxOSwgMTgsIDUxLCAyNDgsIDE0NSwgNTEsIDIxOCwgNTgsIDUxLCAyNDcsIDI1MywgNTEsIDIzNiwgCisgICAgMTIwLCA1MSwgMjE4LCA0NiwgNTEsIDIzNiwgMTExLCA1MSwgMjM2LCAxMTMsIDUxLCAyMjUsIDEzOCwgNTEsIDIyNSwgMTM0LCAKKyAgICA1MSwgMjI1LCAxNDMsIDUxLCAyMjUsIDgzLCA1MSwgMjI1LCAxMTAsIDUxLCAyMjQsIDEyMSwgNTEsIDIyNCwgOTcsIDUxLCAKKyAgICAyMjQsIDk2LCA1MSwgMjI1LCAwLCA1MSwgMjI0LCAyNTMsIDUxLCAyMjUsIDEsIDUxLCAyMDMsIDEwOSwgNTEsIDIwMywgCisgICAgMTA3LCA1MSwgMjAyLCAyMDIsIDUxLCAyMTUsIDI0MywgNTEsIDIxNSwgMjQ3LCA1MSwgMjE1LCAxMTksIDUxLCAyMTUsIAorICAgIDExMywgNTEsIDIxNiwgMTA5LCA1MSwgMjE2LCAxMDYsIDUxLCAyMDQsIDc4LCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDIzNiwgCisgICAgNDMsIDIwMiwgODQsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjM2LCA0MywgMTA1LCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIAorICAgIDIzNiwgNDMsIDEwOCwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyMzYsIDQzLCAxNDcsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgCisgICAgMjM2LCA0MywgMTQ5LCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDIzNiwgNDMsIDE3MCwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAKKyAgICAyMzYsIDQzLCAxOTUsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjM2LCA0MywgMjEzLCAxMTEsIDEzOSwgMjA5LCAxNjQsIAorICAgIDE2LCAzNSwgMjM2LCA0MywgMTk5LCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDIzNiwgNDMsIDIyMiwgNjMsIDEzOSwgMjA5LCAKKyAgICAxNjQsIDE2LCAzNSwgMjM2LCA0MywgMjA5LCAxNTIsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjM2LCA0MywgMjQxLCAxMTIsIAorICAgIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjM2LCA0MywgMjA3LCAxNTQsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjM2LCA0MywgCisgICAgMjA5LCA1NSwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyMzYsIDQzLCAyMzksIDE0MSwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAKKyAgICAyMzYsIDQzLCAyNDAsIDIyLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDIzNiwgNDMsIDIxMiwgODIsIDEzOSwgMjA5LCAxNjQsIAorICAgIDE2LCAzNSwgMjM2LCA0MywgMjEzLCAxMDgsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjM2LCA0MywgMjQxLCAxNDAsIDEzOSwgCisgICAgMjA5LCAxNjQsIDE2LCAzNSwgMjM2LCA0MywgMjIyLCA2MCwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyMzYsIDQzLCAyMDcsIAorICAgIDE1MSwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyMzYsIDQzLCAyMDcsIDE0NSwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAKKyAgICAyMzYsIDQzLCAyMDcsIDE0MSwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyMzYsIDQzLCAyMDcsIDE0MiwgMTM5LCAyMDksIAorICAgIDE2NCwgMTYsIDM1LCAyMzYsIDQzLCAyMDcsIDE0NywgNTEsIDIzNiwgMzQsIDUxLCAyNDQsIDIxMiwgNTEsIDI1MCwgMzQsIAorICAgIDUxLCAxNDIsIDUxLCAyMTksIDIwNiwgNTEsIDIxOSwgMzksIDUxLCAyNDMsIDExNSwgNTEsIDI0MywgMTE2LCAyMTEsIDE3NiwgCisgICAgNTEsIDI0MywgMTE2LCAyNDUsIDEwNSwgNTEsIDIzMCwgMTk3LCA1MSwgMjQxLCAyNywgMjIzLCA4NSwgMjM3LCA0MCwgNTEsIAorICAgIDI0MSwgMjcsIDIyMywgODUsIDIxMCwgOTIsIDUxLCAyNDEsIDI3LCAyMjMsIDg1LCAyMDksIDI0NSwgNTEsIDI0MSwgMjcsIAorICAgIDIyMywgODUsIDIyNCwgMjUyLCA1MSwgMjQ1LCAxNjIsIDUxLCAyMTksIDE2OSwgMjUwLCAyMzMsIDUxLCAyMDEsIDIwMSwgCisgICAgNTEsIDIyMywgMjQ3LCA2MywgNTEsIDE5MiwgNTEsIDE3MywgNTEsIDIyOSwgMjA0LCA1MSwgMjI1LCA1OSwgNTEsIDIzOCwgCisgICAgMjA4LCA1MSwgMjQ3LCA3NiwgNTEsIDIyOSwgMjAzLCA1MSwgMjE4LCAyMTEsIDUxLCAyMjIsIDIwNywgNTEsIDIyMywgMjQ3LCAKKyAgICAyNDAsIDE3NCwgNTEsIDIyMywgMjQ3LCAyMzksIDc1LCA1MSwgMjI0LCAxOTYsIDUxLCAyMjksIDE0NiwgNTEsIDIzNSwgCisgICAgMjE1LCA1MSwgMjI5LCAxMDIsIDUxLCAyMjQsIDE1NywgNTEsIDIzOCwgODMsIDUxLCAyMDksIDQsIDUxLCAyMjMsIDI0NywgCisgICAgMTU5LCA1MSwgMjI0LCA5MCwgNTEsIDI0MywgMTI1LCA1MSwgMjI5LCA0MSwgNTEsIDIzOSwgMTg4LCA1MSwgMjIxLCAyMjksIAorICAgIDUxLCAyMjMsIDI0NywgMjI2LCAxODUsIDUxLCAyMjQsIDg3LCA1MSwgMjQ1LCAyNTUsIDUxLCAyMjksIDM1LCA1MSwgMjI0LCAKKyAgICA4OCwgMjExLCAxNzYsIDUxLCAyNDYsIDAsIDIxMSwgMTc2LCA1MSwgMjI2LCAxODYsIDIxMSwgMTc2LCA1MSwgMjI5LCAzNiwgCisgICAgMjExLCAxNzYsIDUxLCAyMjQsIDg4LCAyNDUsIDEwNSwgNTEsIDI0NiwgMCwgMjQ1LCAxMDUsIDUxLCAyMjYsIDE4NiwgMjQ1LCAKKyAgICAxMDUsIDUxLCAyMjksIDM2LCAyNDUsIDEwNSwgNTEsIDIyNiwgMTg2LCAxMTUsIDE5NCwgNTEsIDIyNiwgMTg2LCAxMTUsIAorICAgIDIxNSwgOTQsIDIxMSwgMTc2LCA1MSwgMTg1LCA1MSwgMjI4LCAyNDQsIDUxLCAyMjMsIDI1MCwgNTEsIDIzOCwgMTUsIDUxLCAKKyAgICAyMTYsIDIwNywgNTEsIDIxNiwgMjA4LCAxMTUsIDE5NCwgNTEsIDIxNiwgMjA4LCAxMTUsIDIxNSwgOTQsIDIxMSwgMTc2LCAKKyAgICA1MSwgMjE3LCAyMDQsIDUxLCAyMjEsIDEyMiwgNTEsIDIyMywgMjQ3LCAxOTQsIDUxLCAyMjMsIDI0OCwgNTEsIDIxNywgCisgICAgMTU0LCA1MSwgMjIxLCAyMiwgNTEsIDIyMywgMjQ3LCAyMDYsIDE2NCwgNTEsIDIyMywgMTg3LCA1MSwgMjI4LCAxNzAsIDUxLCAKKyAgICAyMjMsIDE4OCwgMjI1LCAwLCA1MSwgMjE3LCAxNTMsIDUxLCAyMjEsIDIxLCA1MSwgMjIzLCAyNDcsIDIwNCwgMTQ0LCA1MSwgCisgICAgMjIzLCAxODEsIDUxLCAyMjgsIDE2OCwgNTEsIDIyMywgMTgyLCAyMjUsIDAsIDUxLCAyMzAsIDU1LCAyMjAsIDU4LCA1MSwgCisgICAgMjI2LCAxODYsIDIyMCwgNTgsIDUxLCAyNTAsIDI0NywgNTEsIDI0NywgMjI5LCA1MSwgMjQ3LCA2LCA1MSwgMjQ2LCAyMzksIAorICAgIDUxLCAyNDcsIDEyNiwgMTE1LCAyMjksIDE0NiwgNTEsIDI0NSwgMjU0LCA1MSwgMjQ0LCAxMjksIDUxLCAyMzcsIDE4NCwgCisgICAgNTEsIDE1MiwgNTEsIDIzNiwgMzUsIDUxLCAyMzEsIDQ5LCA1MSwgMjI5LCA0OCwgNTEsIDIyOSwgMzYsIDI0NywgNDcsIDUxLCAKKyAgICAyMjgsIDIxMSwgNTEsIDIyNywgNTIsIDUxLCAyMjcsIDUxLCA1MSwgMjI3LCAzOCwgNTEsIDIyNiwgMjAwLCA1MSwgMjI1LCAKKyAgICA2MCwgMjEyLCAzNiwgNTEsIDIyNCwgMTIwLCA1MSwgMjI0LCA1NiwgNTEsIDIxOCwgMjA5LCA1MSwgMjE4LCA3MiwgNTEsIAorICAgIDIxOCwgMTEsIDUxLCAyMTgsIDksIDUxLCAyMTEsIDE2OCwgNTEsIDIxMCwgMTc3LCA1MSwgMjA0LCA2NCwgNTEsIDIwNiwgCisgICAgMTY1LCAxMTUsIDIyNiwgMTg1LCA1MSwgMzQsIDExNSwgMjI2LCAxODUsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAKKyAgICAxMzMsIDEwNSwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyNDQsIDEzMywgMTA4LCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIAorICAgIDI0NCwgMTMzLCAxNDcsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDE0OSwgMTM5LCAyMDksIDE2NCwgMTYsIAorICAgIDM1LCAyNDQsIDEzMywgMTcwLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAxOTUsIDEzOSwgMjA5LCAxNjQsIAorICAgIDE2LCAzNSwgMjQ0LCAxMzMsIDIxMywgMTExLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAxOTksIDEzOSwgCisgICAgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDIyMiwgNjMsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIAorICAgIDIwOSwgMTUyLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAyNDEsIDExMiwgMTM5LCAyMDksIDE2NCwgMTYsIAorICAgIDM1LCAyNDQsIDEzMywgMjA3LCAxNTQsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDIwOSwgNTUsIDEzOSwgCisgICAgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDIzOSwgMTQxLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAKKyAgICAyNDAsIDIyLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAyMTIsIDgyLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIAorICAgIDI0NCwgMTMzLCAyMTMsIDEwOCwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyNDQsIDEzMywgMjQxLCAxNDAsIDEzOSwgMjA5LCAKKyAgICAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDIyMiwgNjAsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDIwNywgCisgICAgMTUxLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAyMDcsIDE0NSwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAKKyAgICAyNDQsIDEzMywgMjA3LCAxNDEsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDIwNywgMTQyLCAxMzksIDIwOSwgCisgICAgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAyMDcsIDE0NywgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyNDQsIDEzMywgMjA3LCAKKyAgICAxNDgsIDEzOSwgMjA5LCAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDIwNywgMTQzLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIAorICAgIDI0NCwgMTMzLCAyMDcsIDE0NCwgMTM5LCAyMDksIDE2NCwgMTYsIDM1LCAyNDQsIDEzMywgMjA3LCAxNTAsIDEzOSwgMjA5LCAKKyAgICAxNjQsIDE2LCAzNSwgMjQ0LCAxMzMsIDIwNywgMTQ2LCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAyMDksIAorICAgIDUzLCAxMzksIDIwOSwgMTY0LCAxNiwgMzUsIDI0NCwgMTMzLCAyMDksIDUyLCA1MSwgMjM4LCAyNDYsIDIzNywgMTYsIDM1LCAKKyAgICAyMDksIDkzLCAyNDUsIDE0MiwgMjM3LCA1MSwgMjM3LCAxNiwgMzUsIDIwOSwgOTMsIDIxNiwgMTUxLCAyNDEsIDE3OSwgCisgICAgMjM3LCAxNiwgMzUsIDI0MywgMjAzLCAyNTAsIDUwLCAyMDksIDkzLCAyNDgsIDE0MCwgMjM3LCAxNiwgMzUsIDIwMiwgMjI2LCAKKyAgICAyMzksIDE4MCwgMjM3LCAxNiwgMzUsIDIwNCwgMTAzLCAyMzcsIDE2LCAzNSwgMjQ1LCAyMTQsIDIzNywgMTYsIDM1LCAyMDksIAorICAgIDkzLCAyNTAsIDEwNSwgMjM3LCAxNiwgMzUsIDIzNiwgMTI3LCAyMDgsIDE2OSwgMjM3LCAxNiwgMzUsIDUsIDIwOSwgMjMxLCAKKyAgICAyMzcsIDE2LCAzNSwgMjA4LCA5NywgMjM3LCAxNiwgMzUsIDIxOSwgMzIsIDIzNywgMTYsIDM1LCAyMTEsIDk2LCAyMzcsIAorICAgIDE2LCAzNSwgMjQwLCA0NCwgMjM3LCAxNiwgMzUsIDIzNywgMjQ5LCAyMTgsIDMyLCAyMzcsIDE2LCAzNSwgMjI0LCA3NSwgCisgICAgMjM3LCAxNiwgMzUsIDI0MSwgNjQsIDIzNywgMTYsIDM1LCAyMzksIDE4MSwgMjM3LCAxNiwgMzUsIDIwMywgMjM2LCAyMjAsIAorICAgIDMyLCAyMDksIDkzLCAyNDQsIDcxLCAyMzcsIDE2LCAzNSwgMjUwLCAxNTQsIDIzNywgMTYsIDM1LCAyNDUsIDE5MywgMjM3LCAKKyAgICAxNiwgMzUsIDI0OCwgNDksIDIwOSwgMjQsIDIzNywgMTYsIDM1LCAyMzgsIDEzLCAyMzcsIDE2LCAzNSwgMjExLCAxOTIsIAorICAgIDI1MCwgMTczLCAyMzcsIDE2LCAzNSwgMjE2LCA3NywgMjM3LCAxNiwgMzUsIDIzMSwgMTIsIDIzNywgMTYsIDM1LCAyMzcsIAorICAgIDI0OSwgMjA5LCAyMzEsIDIzNywgMTYsIDM1LCAyMjQsIDgsIDI0NSwgMTY0LCAyMzcsIDE2LCAzNSwgMjM3LCAyNDksIDIxNywgCisgICAgMjQ0LCAyMzcsIDE2LCAzNSwgMjA5LCA5MywgMjUxLCAxNDMsIDIwNCwgODAsIDIzNywgMTYsIDM1LCAyMDksIDkzLCAyNDYsIAorICAgIDI0LCAyMzksIDI0OSwgMjM3LCAxNiwgMzUsIDIzMSwgMjYsIDIzNywgMTYsIDM1LCAyNDIsIDIwLCAyMzcsIDE2LCAzNSwgCisgICAgMjE2LCA4MCwgMjM3LCAxNiwgMzUsIDIzNywgMjQ5LCAyMTgsIDE2LCAyMzcsIDE2LCAzNSwgMjE3LCAyMjEsIDIzNywgMTYsIAorICAgIDM1LCAyNDQsIDE0OSwgNzYsIDIwOSwgOTMsIDIyNywgMTM0LCAyMzcsIDE2LCAzNSwgMjA5LCA5MywgMjQwLCA4MiwgMjM3LCAKKyAgICAxNiwgMzUsIDIxOSwgMjUwLCAyMzcsIDE2LCAzNSwgMjIwLCA4NSwgMjM3LCAxNiwgMzUsIDI0NCwgNDIsIDIzNywgMTYsIAorICAgIDM1LCAyNDQsIDYzLCAyMzcsIDE2LCAzNSwgMjMxLCA0MCwgMjM3LCAxNiwgMzUsIDI0NywgMjE3LCAyMzcsIDE2LCAzNSwgCisgICAgMjQ1LCAyMzUsIDIwOCwgMTczLCAyMjUsIDMsIDIzNywgMTYsIDM1LCAyMzgsIDIxNSwgMjA4LCAxNjksIDIzNywgMTYsIDM1LCAKKyAgICAyMTcsIDE2MywgMjA2LCAyMTMsIDIzNywgMTYsIDM1LCAyMTksIDI0OSwgMjM3LCAxNiwgMzUsIDIwOSwgOTMsIDIwNCwgNTAsIAorICAgIDIzNywgMTYsIDM1LCAyMTYsIDY4LCAyMzcsIDE2LCAzNSwgMjA5LCA5MywgMjQ3LCAxMiwgMjM3LCAxNiwgMzUsIDIwOSwgCisgICAgOTMsIDI1MCwgMTAxLCAyMDksIDE4LCAyMzcsIDE2LCAzNSwgMjA5LCA5MywgMjI5LCAxOTUsIDIxMSwgNjgsIDIyNCwgMTIsIAorICAgIDIzNywgMTYsIDM1LCAyNDQsIDksIDIzNywgMTYsIDM1LCAyMDksIDkzLCAyMjUsIDg1LCAyMjUsIDEzOSwgMjM3LCAxNiwgCisgICAgMzUsIDI1MSwgMTQ0LCAyMzcsIDE2LCAzNSwgMjA5LCA5MywgMjA0LCA5NiwgMjM3LCAxNiwgMzUsIDIwOSwgOTMsIDIzOCwgCisgICAgMTczLCAyMDQsIDE2LCAyMzcsIDE2LCAzNSwgMjA5LCA5MywgMjMwLCA4NCwgMjI4LCAzMywgMjM3LCAxNiwgMzUsIDI0MywgCisgICAgMTUzLCAyMzcsIDE2LCAzNSwgMjI3LCAxMjEsIDIzNywgMTYsIDM1LCAyMzEsIDE1LCAyMDgsIDI0LCAyMzcsIDE2LCAzNSwgCisgICAgNSwgMjE3LCAyNDQsIDIzNywgMTYsIDM1LCAyNTEsIDgyLCAyNDUsIDIyNiwgMjM3LCAxNiwgMzUsIDI0OCwgMTQzLCAyNDUsIAorICAgIDIyNiwgMTEsIDQsIDIzMCwgMjAxLCAxMSwgNCwgMjMwLCAxOTMsIDExLCA0LCA3NSwgMTEsIDQsIDIzMCwgMjI3LCAxMSwgNCwgCisgICAgMjMxLCAxMDgsIDExLCA0LCAyMzEsIDkxLCAxMSwgNCwgMjMxLCAxMTAsIDExLCA0LCAyMzEsIDEwOSwgMTEsIDQsIDI1MCwgCisgICAgNDksIDExLCA0LCAyNTAsIDEwLCAxMSwgNCwgNjMsIDExLCA0LCAyNTAsIDE3NSwgMTEsIDQsIDIwNiwgMjI1LCAxMSwgNCwgCisgICAgMjA2LCAyMjgsIDExLCA0LCAyMDYsIDIyNiwgMTEsIDQsIDIxOSwgMjI0LCAxMSwgNCwgMjE5LCAxOTMsIDExLCA0LCA3OCwgCisgICAgMTEsIDQsIDIyMCwgOSwgMTEsIDQsIDI0MCwgMjE3LCAxMSwgNCwgNzQsIDExLCA0LCAyMDMsIDIxNywgMTEsIDQsIDI0OCwgCisgICAgNTEsIDExLCA0LCAyNDgsIDQ3LCAxMSwgNCwgMjQ4LCA4NiwgMTEsIDQsIDI0OCwgNjEsIDExLCA0LCAyNDgsIDc1LCAxMSwgCisgICAgNCwgMjQ4LCA3NCwgMTEsIDQsIDI0OCwgNzcsIDExLCA0LCAyNDgsIDc2LCAxMSwgNCwgMjQ4LCAyMDksIDExLCA0LCAyNDgsIAorICAgIDIwMSwgMTEsIDQsIDI0OSwgMzIsIDExLCA0LCAyNDgsIDIzMiwgMTEsIDQsIDI0NywgMTYzLCAxMSwgNCwgMjQ3LCAxNjcsIAorICAgIDExLCA0LCAyNDcsIDE2NCwgMTEsIDQsIDI0NywgMjUyLCAxMSwgNCwgMjQ3LCAyMzMsIDExLCA0LCAyNDgsIDIzLCAxMSwgNCwgCisgICAgMjQ4LCAyLCAxMSwgNCwgMjQ4LCAxMDEsIDExLCA0LCAyNDgsIDE2MiwgMTEsIDQsIDI0OCwgMTEzLCAxMSwgNCwgMjQ3LCAKKyAgICAxNDcsIDExLCA0LCAyNDcsIDE0MywgMTEsIDQsIDI0NywgMTkzLCAxMSwgNCwgMjQ3LCAxNjIsIDExLCA0LCAyNDcsIDE1NSwgCisgICAgMTEsIDQsIDI0NywgMTYwLCAxMSwgNCwgMjQ3LCAxMzEsIDExLCA0LCAyNDcsIDEyOSwgMTEsIDQsIDI0NywgMTM2LCAxMSwgCisgICAgNCwgMjQ3LCAxMzQsIDExLCA0LCAyNDcsIDEzMiwgMTEsIDQsIDI0NywgMTMzLCAxMSwgNCwgMjE4LCAxMDUsIDExLCA0LCAKKyAgICAyMTgsIDEwMSwgMTEsIDQsIDIxOCwgMTY3LCAxMSwgNCwgMjE4LCAxMTcsIDExLCA0LCAyMTgsIDEzMywgMTEsIDQsIDIxOCwgCisgICAgMTYwLCAxMSwgNCwgMjE4LCAxNTYsIDExLCA0LCAyMTksIDU1LCAxMSwgNCwgMjE5LCA0NCwgMTEsIDQsIDE4NSwgMTEsIDQsIAorICAgIDIxOSwgOTYsIDExLCA0LCAyMTcsIDE3MywgMTEsIDQsIDIxNywgMTc1LCAxMSwgNCwgMjE3LCAxNzQsIDExLCA0LCAyMTgsIAorICAgIDI1LCAxMSwgNCwgMjE4LCAxNCwgMTEsIDQsIDIxOCwgNjksIDExLCA0LCAyMTgsIDQxLCAxMSwgNCwgMjE3LCAxNTksIDExLCAKKyAgICA0LCAyMTcsIDE1NSwgMTEsIDQsIDIxNywgMTkxLCAxMSwgNCwgMjE3LCAxNzIsIDExLCA0LCAyMTcsIDE2NCwgMTEsIDQsIAorICAgIDIxNywgMTcwLCAxMSwgNCwgMjE3LCAxMzgsIDExLCA0LCAyMTcsIDEzNywgMTEsIDQsIDIxNywgMTQyLCAxMSwgNCwgMjE3LCAKKyAgICAxNDEsIDExLCA0LCAyMTcsIDEzOSwgMTEsIDQsIDIxNywgMTQwLCAxMSwgNCwgMjQ4LCAxODMsIDExLCA0LCAyNDgsIDE4MiwgCisgICAgMTEsIDQsIDI0OCwgMTg5LCAxMSwgNCwgMjQ4LCAxODQsIDExLCA0LCAyNDgsIDE4NiwgMTEsIDQsIDI0OCwgMTg1LCAxMSwgCisgICAgNCwgMjQ4LCAxODgsIDExLCA0LCAyNDgsIDE4NywgMTEsIDQsIDI0OCwgMTk1LCAxMSwgNCwgMjQ4LCAxOTQsIDExLCA0LCAKKyAgICAyNDgsIDE5OCwgMTEsIDQsIDI0OCwgMTk2LCAxMSwgNCwgMjQ4LCAxNzQsIDExLCA0LCAyNDgsIDE3NiwgMTEsIDQsIDI0OCwgCisgICAgMTc1LCAxMSwgNCwgMjQ4LCAxNzksIDExLCA0LCAyNDgsIDE3OCwgMTEsIDQsIDI0OCwgMTgxLCAxMSwgNCwgMjQ4LCAxODAsIAorICAgIDExLCA0LCAyNDgsIDE5MCwgMTEsIDQsIDI0OCwgMTkzLCAxMSwgNCwgMjQ4LCAxOTEsIDExLCA0LCAyNDgsIDE3MCwgMTEsIAorICAgIDQsIDI0OCwgMTY5LCAxMSwgNCwgMjQ4LCAxNzcsIDExLCA0LCAyNDgsIDE3MywgMTEsIDQsIDI0OCwgMTcxLCAxMSwgNCwgCisgICAgMjQ4LCAxNzIsIDExLCA0LCAyNDgsIDE2NiwgMTEsIDQsIDI0OCwgMTY1LCAxMSwgNCwgMjQ4LCAxNjgsIDExLCA0LCAyNDgsIAorICAgIDE2NywgMTEsIDQsIDIyMywgNDcsIDExLCA0LCAyMjMsIDQ2LCAxMSwgNCwgMjIzLCA1MiwgMTEsIDQsIDIyMywgNDgsIDExLCAKKyAgICA0LCAyMjMsIDQ5LCAxMSwgNCwgMjIzLCA1MSwgMTEsIDQsIDIyMywgNTAsIDExLCA0LCAyMjMsIDU1LCAxMSwgNCwgMjIzLCAKKyAgICA1NCwgMTEsIDQsIDIyMywgNTcsIDExLCA0LCAyMjMsIDU2LCAxMSwgNCwgMjIzLCA0MywgMTEsIDQsIDIyMywgNDIsIDExLCAKKyAgICA0LCAyMjMsIDQ1LCAxMSwgNCwgMjIzLCA0NCwgMTEsIDQsIDIyMywgMzYsIDExLCA0LCAyMjMsIDM1LCAxMSwgNCwgMjIzLCAKKyAgICA0MCwgMTEsIDQsIDIyMywgMzksIDExLCA0LCAyMjMsIDM3LCAxMSwgNCwgMjIzLCAzOCwgMTEsIDQsIDIyMywgMzAsIDExLCAKKyAgICA0LCAyMjMsIDI5LCAxMSwgNCwgMjIzLCAzNCwgMTEsIDQsIDIyMywgMzMsIDExLCA0LCAyMjMsIDMxLCAxMSwgNCwgMjIzLCAKKyAgICAzMiwgMTEsIDQsIDIzNiwgMTgwLCAxMSwgNCwgMjM2LCAxNzksIDExLCA0LCAyMzYsIDE4NSwgMTEsIDQsIDIzNiwgMTgxLCAKKyAgICAxMSwgNCwgMjM2LCAxODIsIDExLCA0LCAyMzYsIDE4NCwgMTEsIDQsIDIzNiwgMTgzLCAxMSwgNCwgMjM2LCAxODgsIDExLCAKKyAgICA0LCAyMzYsIDE4NywgMTEsIDQsIDIzNiwgMTkwLCAxMSwgNCwgMjM2LCAxODksIDExLCA0LCAyMzYsIDE3MSwgMTEsIDQsIAorICAgIDIzNiwgMTczLCAxMSwgNCwgMjM2LCAxNzIsIDExLCA0LCAyMzYsIDE3NiwgMTEsIDQsIDIzNiwgMTc1LCAxMSwgNCwgMjM2LCAKKyAgICAxNzgsIDExLCA0LCAyMzYsIDE3NywgMTEsIDQsIDIzNiwgMTY3LCAxMSwgNCwgMjM2LCAxNjYsIDExLCA0LCAyMzYsIDE3NCwgCisgICAgMTEsIDQsIDIzNiwgMTcwLCAxMSwgNCwgMjM2LCAxNjgsIDExLCA0LCAyMzYsIDE2OSwgMTEsIDQsIDIzNiwgMTYxLCAxMSwgCisgICAgNCwgMjM2LCAxNjUsIDExLCA0LCAyMzYsIDE2NCwgMTEsIDQsIDIzNiwgMTYyLCAxMSwgNCwgMjM2LCAxNjMsIDExLCA0LCAKKyAgICAyMjQsIDkzLCAxMSwgNCwgMjI0LCA5MiwgMTEsIDQsIDIyNCwgMTU1LCAxMSwgNCwgMjI0LCA5OSwgMTEsIDQsIDIyNCwgCisgICAgMTI3LCAxMSwgNCwgMjI0LCAxNDUsIDExLCA0LCAyMjQsIDE0MywgMTEsIDQsIDIyNSwgNzEsIDExLCA0LCAyMjUsIDY2LCAKKyAgICAxMSwgNCwgMTkyLCAxMSwgNCwgMjI1LCAxMDYsIDExLCA0LCAyMjMsIDIxMywgMTEsIDQsIDIyMywgMjEyLCAxMSwgNCwgCisgICAgMjIzLCAyMTYsIDExLCA0LCAyMjMsIDIxNCwgMTEsIDQsIDIyNCwgMjEsIDExLCA0LCAyMjMsIDI1MiwgMTEsIDQsIDIyNCwgCisgICAgODIsIDExLCA0LCAyMjQsIDI3LCAxMSwgNCwgMjI0LCAyMDcsIDExLCA0LCAyMjUsIDIwLCAxMSwgNCwgMjIzLCAxOTMsIDExLCAKKyAgICA0LCAyMjMsIDE4OSwgMTEsIDQsIDIyMywgMjQ2LCAxMSwgNCwgMjIzLCAyMDksIDExLCA0LCAyMjMsIDIwMiwgMTEsIDQsIAorICAgIDIyMywgMjA3LCAxMSwgNCwgMjIzLCAxNjYsIDExLCA0LCAyMjMsIDE2NSwgMTEsIDQsIDIyMywgMTcxLCAxMSwgNCwgMjIzLCAKKyAgICAxNjgsIDExLCA0LCAyMzksIDIzNiwgMTEsIDQsIDIzOSwgMjMwLCAxMSwgNCwgMjQwLCAyNiwgMTEsIDQsIDIzOSwgMjUxLCAKKyAgICAxMSwgNCwgMjQwLCA3MywgMTEsIDQsIDI0MCwgNjQsIDExLCA0LCAyNDAsIDEwOCwgMTEsIDQsIDI0MCwgNzgsIDExLCA0LCAKKyAgICAyMzksIDEzOSwgMTEsIDQsIDIzOSwgMTg2LCAxMSwgNCwgMjM5LCAxNjcsIDExLCA0LCAyMzksIDkxLCAxMSwgNCwgMjM5LCAKKyAgICA5MCwgMTEsIDQsIDIzOSwgMTA4LCAxMSwgNCwgMjM5LCA5NiwgMTEsIDQsIDIzOSwgOTQsIDExLCA0LCAyMzksIDk1LCAxMSwgCisgICAgNCwgMjM5LCA3OCwgMTEsIDQsIDIzOSwgNzcsIDExLCA0LCAyMzksIDgxLCAxMSwgNCwgMjM5LCA3OSwgMTEsIDQsIDIwNSwgCisgICAgMTk2LCAxMSwgNCwgMjA1LCAxOTEsIDExLCA0LCAyMDUsIDIzMCwgMTEsIDQsIDIwNSwgMjA1LCAxMSwgNCwgMjA1LCAyMTksIAorICAgIDExLCA0LCAyMDUsIDIxNiwgMTEsIDQsIDIwNSwgMjIyLCAxMSwgNCwgMjA1LCAyMjEsIDExLCA0LCAyMDYsIDYzLCAxMSwgNCwgCisgICAgMjA2LCA1OCwgMTEsIDQsIDIwNiwgODYsIDExLCA0LCAyMDYsIDc1LCAxMSwgNCwgMjA1LCAxNzIsIDExLCA0LCAyMDUsIAorICAgIDE2OCwgMTEsIDQsIDIwNSwgMTg5LCAxMSwgNCwgMjA1LCAxNzQsIDExLCA0LCAyMDUsIDIzMywgMTEsIDQsIDIwNiwgNDQsIAorICAgIDExLCA0LCAyMDQsIDE1NywgMTEsIDQsIDIwNCwgMTU1LCAxMSwgNCwgMjA0LCAxNjMsIDExLCA0LCAyMDQsIDE2MCwgMTEsIAorICAgIDQsIDIwNCwgMTU4LCAxMSwgNCwgMjA0LCAxNTksIDExLCA0LCAyMDQsIDE0OCwgMTEsIDQsIDIwNCwgMTQ3LCAxMSwgNCwgCisgICAgMjA0LCAxNTIsIDExLCA0LCAyMDQsIDE1MSwgMTEsIDQsIDIwNCwgMTQ5LCAxMSwgNCwgMjA0LCAxNTAsIDExLCA0LCAyNDMsIAorICAgIDE0NywgMTEsIDQsIDI0MywgMTM0LCAxMSwgNCwgMjQzLCAyMzMsIDExLCA0LCAyNDMsIDE3MywgMTEsIDQsIDI0MywgMjA4LCAKKyAgICAxMSwgNCwgMjQzLCAyMTMsIDExLCA0LCAyNDMsIDIxMiwgMTEsIDQsIDI0NCwgMTQwLCAxMSwgNCwgMjQ0LCAxMzQsIDExLCAKKyAgICA0LCAyNDQsIDIxMiwgMTEsIDQsIDI0NCwgMTYwLCAxMSwgNCwgMjQyLCAyNSwgMTEsIDQsIDI0MiwgMjYsIDExLCA0LCAyNDMsIAorICAgIDg1LCAxMSwgNCwgMjQyLCA2NywgMTEsIDQsIDI0MywgMTEzLCAxMSwgNCwgMjQzLCA4NywgMTEsIDQsIDI0NCwgNywgMTEsIAorICAgIDQsIDI0NCwgNzUsIDExLCA0LCAyNDQsIDI4LCAxMSwgNCwgMjQyLCAxNiwgMTEsIDQsIDI0MiwgMTQsIDExLCA0LCAyNDIsIAorICAgIDQyLCAxMSwgNCwgMjQyLCAyNCwgMTEsIDQsIDI0MiwgMTksIDExLCA0LCAyNDIsIDIyLCAxMSwgNCwgMjA4LCAyMDAsIDExLCAKKyAgICA0LCAyMDgsIDE5MiwgMTEsIDQsIDIwOSwgMiwgMTEsIDQsIDIwOCwgMjEwLCAxMSwgNCwgMjA4LCAyNDgsIDExLCA0LCAyMDgsIAorICAgIDI1MCwgMTEsIDQsIDIwOCwgMjQ5LCAxMSwgNCwgMjA5LCAyMTIsIDExLCA0LCAyMDksIDE5OCwgMTEsIDQsIDIxMCwgMjIsIAorICAgIDExLCA0LCAyMDksIDIyMiwgMTEsIDQsIDIwNywgMTg1LCAxMSwgNCwgMjA3LCAxODQsIDExLCA0LCAyMDcsIDE4NywgMTEsIAorICAgIDQsIDIwNywgMTg2LCAxMSwgNCwgMjA4LCAxMzEsIDExLCA0LCAyMDgsIDEyMSwgMTEsIDQsIDEzNSwgMTEsIDQsIDIwOCwgCisgICAgMTQ0LCAxMSwgNCwgMjA5LCAxMTQsIDExLCA0LCAyMDksIDE4NywgMTEsIDQsIDIwOSwgMTM5LCAxMSwgNCwgMjA3LCAxNjgsIAorICAgIDExLCA0LCAyMDcsIDE2MywgMTEsIDQsIDIwNywgMjAzLCAxMSwgNCwgMjA3LCAxODMsIDExLCA0LCAyMDcsIDE2OSwgMTEsIAorICAgIDQsIDIwNywgMTgxLCAxMSwgNCwgMjQ0LCA5MiwgMTEsIDQsIDI0NCwgOTEsIDExLCA0LCAyNDQsIDk3LCAxMSwgNCwgMjQ0LCAKKyAgICA5MywgMTEsIDQsIDI0NCwgOTQsIDExLCA0LCAyNDQsIDk2LCAxMSwgNCwgMjQ0LCA5NSwgMTEsIDQsIDI0NCwgMTEzLCAxMSwgCisgICAgNCwgMjQ0LCAxMTIsIDExLCA0LCAyNDQsIDEyMCwgMTEsIDQsIDI0NCwgMTE0LCAxMSwgNCwgMjQ0LCA4MiwgMTEsIDQsIAorICAgIDI0NCwgODQsIDExLCA0LCAyNDQsIDgzLCAxMSwgNCwgMjQ0LCA4NywgMTEsIDQsIDI0NCwgODYsIDExLCA0LCAyNDQsIDkwLCAKKyAgICAxMSwgNCwgMjQ0LCA4OCwgMTEsIDQsIDI0NCwgMTA1LCAxMSwgNCwgMjQ0LCAxMDgsIDExLCA0LCAyNDQsIDEwNiwgMTEsIDQsIAorICAgIDI0NCwgNzgsIDExLCA0LCAyNDQsIDc3LCAxMSwgNCwgMjQ0LCA4NSwgMTEsIDQsIDI0NCwgODEsIDExLCA0LCAyNDQsIDc5LCAKKyAgICAxMSwgNCwgMjQ0LCA4MCwgMTEsIDQsIDIyMywgMywgMTEsIDQsIDIyMywgMiwgMTEsIDQsIDIyMywgMTAsIDExLCA0LCAyMjMsIAorICAgIDUsIDExLCA0LCAyMjMsIDYsIDExLCA0LCAyMjMsIDcsIDExLCA0LCAyMjMsIDE5LCAxMSwgNCwgMjIzLCAxOCwgMTEsIDQsIAorICAgIDIyMywgMjUsIDExLCA0LCAyMjMsIDIwLCAxMSwgNCwgMjIyLCAyNTEsIDExLCA0LCAyMjIsIDI1MCwgMTEsIDQsIDIyMywgMSwgCisgICAgMTEsIDQsIDIyMiwgMjUyLCAxMSwgNCwgMjIzLCAxMSwgMTEsIDQsIDIyMywgMTcsIDExLCA0LCAyMjMsIDE1LCAxMSwgNCwgCisgICAgMjIyLCAyNDMsIDExLCA0LCAyMjIsIDI0MiwgMTEsIDQsIDIyMiwgMjQ4LCAxMSwgNCwgMjIyLCAyNDYsIDExLCA0LCAyMjIsIAorICAgIDI0NCwgMTEsIDQsIDIyMiwgMjQ1LCAxMSwgNCwgMjM2LCAxNDYsIDExLCA0LCAyMzYsIDE0NSwgMTEsIDQsIDIzNiwgMTUyLCAKKyAgICAxMSwgNCwgMjM2LCAxNDcsIDExLCA0LCAyMzYsIDE0OSwgMTEsIDQsIDIzNiwgMTQ4LCAxMSwgNCwgMjM2LCAxNTEsIDExLCAKKyAgICA0LCAyMzYsIDE1MCwgMTEsIDQsIDIzNiwgMTU4LCAxMSwgNCwgMjM2LCAxNTYsIDExLCA0LCAyMzYsIDE2MCwgMTEsIDQsIAorICAgIDIzNiwgMTU5LCAxMSwgNCwgMjM2LCAxMzksIDExLCA0LCAyMzYsIDE0MCwgMTEsIDQsIDIzNiwgMTQzLCAxMSwgNCwgMjM2LCAKKyAgICAxNDIsIDExLCA0LCAyMzYsIDE0NCwgMTEsIDQsIDIzNiwgMTUzLCAxMSwgNCwgMjM2LCAxNTUsIDExLCA0LCAyMzYsIDE1NCwgCisgICAgMTEsIDQsIDIzNiwgMTM4LCAxMSwgNCwgMjIyLCA1MiwgMTEsIDQsIDIyMiwgNTAsIDExLCA0LCAyMjIsIDEwMCwgMTEsIDQsIAorICAgIDIyMiwgNTUsIDExLCA0LCAyMjIsIDgyLCAxMSwgNCwgMjIyLCA5NiwgMTEsIDQsIDIyMiwgOTUsIDExLCA0LCAyMjMsIDYxLCAKKyAgICAxMSwgNCwgMjAxLCAyMDEsIDExLCA0LCAyMjMsIDc2LCAxMSwgNCwgMjIxLCAzMiwgMTEsIDQsIDIyMSwgMzQsIDExLCA0LCAKKyAgICAyMjEsIDMzLCAxMSwgNCwgMjIxLCAxNjUsIDExLCA0LCAyMjEsIDE1MCwgMTEsIDQsIDIyMSwgMTkxLCAxMSwgNCwgMjIxLCAKKyAgICAxNzYsIDExLCA0LCAyMjIsIDIwOSwgMTEsIDQsIDIyMiwgMjQwLCAxMSwgNCwgMjIyLCAyMjUsIDExLCA0LCAyMjEsIDI3LCAKKyAgICAxMSwgNCwgMjIxLCAyMywgMTEsIDQsIDIyMSwgODQsIDExLCA0LCAyMjEsIDMxLCAxMSwgNCwgMjIxLCAyOSwgMTEsIDQsIAorICAgIDIyMSwgMzAsIDExLCA0LCAyMzYsIDIxMSwgMTEsIDQsIDIzNiwgMjEwLCAxMSwgNCwgMjM2LCAyMTYsIDExLCA0LCAyMzYsIAorICAgIDIxMiwgMTEsIDQsIDIzNiwgMjEzLCAxMSwgNCwgMjM2LCAyMTUsIDExLCA0LCAyMzYsIDIxNCwgMTEsIDQsIDIzNiwgMjIyLCAKKyAgICAxMSwgNCwgMjM2LCAyMjAsIDExLCA0LCAyMzYsIDIyNCwgMTEsIDQsIDIzNiwgMjIzLCAxMSwgNCwgMjM2LCAyMDMsIDExLCAKKyAgICA0LCAyMzYsIDIwNSwgMTEsIDQsIDIzNiwgMjA0LCAxMSwgNCwgMjM2LCAyMDcsIDExLCA0LCAyMzYsIDIwOSwgMTEsIDQsIAorICAgIDIzNiwgMjA4LCAxMSwgNCwgMjM2LCAyMTcsIDExLCA0LCAyMzYsIDIxOSwgMTEsIDQsIDIzNiwgMjE4LCAxMSwgNCwgMjM2LCAKKyAgICAxOTksIDExLCA0LCAyMzYsIDE5OCwgMTEsIDQsIDIzNiwgMjA2LCAxMSwgNCwgMjM2LCAyMDIsIDExLCA0LCAyMzYsIDIwMCwgCisgICAgMTEsIDQsIDIzNiwgMjAxLCAxMSwgNCwgMjM2LCAxOTMsIDExLCA0LCAyMzYsIDE5MiwgMTEsIDQsIDIzNiwgMTk3LCAxMSwgCisgICAgNCwgMjM2LCAxOTYsIDExLCA0LCAyMzYsIDE5NCwgMTEsIDQsIDIzNiwgMTk1LCAxMSwgNCwgMjI3LCA5MCwgMTEsIDQsIAorICAgIDIyNywgODIsIDExLCA0LCAyMjcsIDE0OCwgMTEsIDQsIDIyNywgMTAwLCAxMSwgNCwgMjI3LCAxMzksIDExLCA0LCAyMjcsIAorICAgIDEzOCwgMTEsIDQsIDIyNywgMTQyLCAxMSwgNCwgMjI3LCAxNDAsIDExLCA0LCAyMjgsIDAsIDExLCA0LCAyMjcsIDI0NSwgCisgICAgMTEsIDQsIDIyOCwgMTEzLCAxMSwgNCwgMjI4LCAxMSwgMTEsIDQsIDIyNiwgMjE3LCAxMSwgNCwgMjI2LCAyMTYsIDExLCA0LCAKKyAgICAyMjYsIDIxOSwgMTEsIDQsIDIyNiwgMjE4LCAxMSwgNCwgMjI3LCA2LCAxMSwgNCwgMjI2LCAyNDgsIDExLCA0LCAyMjcsIAorICAgIDQ5LCAxMSwgNCwgMjI3LCAxMSwgMTEsIDQsIDIyNywgMTY1LCAxMSwgNCwgMjI3LCAyMzQsIDExLCA0LCAyMjcsIDE4MiwgCisgICAgMTEsIDQsIDIyNiwgMjExLCAxMSwgNCwgMjI2LCAyMDksIDExLCA0LCAyMjYsIDIzOSwgMTEsIDQsIDIyNiwgMjE1LCAxMSwgCisgICAgNCwgMjI2LCAyMTMsIDExLCA0LCAyMjYsIDIxNCwgMTEsIDQsIDIyNiwgMTkwLCAxMSwgNCwgMjI2LCAxODksIDExLCA0LCAKKyAgICAyMjYsIDE5OSwgMTEsIDQsIDIyNiwgMTkzLCAxMSwgNCwgMjI2LCAxOTEsIDExLCA0LCAyMjYsIDE5MiwgMTEsIDQsIDIzOCwgCisgICAgNTQsIDExLCA0LCAyMzgsIDUzLCAxMSwgNCwgMjM4LCA4MSwgMTEsIDQsIDIzOCwgNjUsIDExLCA0LCAyMzgsIDczLCAxMSwgCisgICAgNCwgMjM4LCA3MiwgMTEsIDQsIDIzOCwgNzUsIDExLCA0LCAyMzgsIDc0LCAxMSwgNCwgMjM4LCAyMTcsIDExLCA0LCAyMzgsIAorICAgIDIxMiwgMTEsIDQsIDIzOSwgOCwgMTEsIDQsIDIzOCwgMjI3LCAxMSwgNCwgMjM3LCAyMDUsIDExLCA0LCAyMzcsIDIwNCwgCisgICAgMTEsIDQsIDIzNywgMjA3LCAxMSwgNCwgMjM3LCAyMDYsIDExLCA0LCAyMzgsIDE4LCAxMSwgNCwgMjM4LCAxNiwgMTEsIDQsIAorICAgIDIzOCwgMzksIDExLCA0LCAyMzgsIDI2LCAxMSwgNCwgMjM4LCAxNTksIDExLCA0LCAyMzgsIDE1NywgMTEsIDQsIDIzOCwgCisgICAgMTkwLCAxMSwgNCwgMjM4LCAxNzAsIDExLCA0LCAyMzcsIDE5NCwgMTEsIDQsIDIzNywgMTkzLCAxMSwgNCwgMjM3LCAyMzAsIAorICAgIDExLCA0LCAyMzcsIDIwMywgMTEsIDQsIDIzNywgMTk1LCAxMSwgNCwgMjM3LCAyMDIsIDExLCA0LCAyMjksIDY0LCAxMSwgNCwgCisgICAgMjI5LCA2MSwgMTEsIDQsIDIyOSwgMTAwLCAxMSwgNCwgMjI5LCA3OCwgMTEsIDQsIDIyOSwgODksIDExLCA0LCAyMjksIDkzLCAKKyAgICAxMSwgNCwgMjI5LCA5MSwgMTEsIDQsIDIyOSwgMjI2LCAxMSwgNCwgMjI5LCAyMDksIDExLCA0LCAxNzMsIDExLCA0LCAyMjksIAorICAgIDI1MywgMTEsIDQsIDIyOCwgMTg3LCAxMSwgNCwgMjI4LCAxOTIsIDExLCA0LCAyMjgsIDE4OSwgMTEsIDQsIDIyOCwgMjUwLCAKKyAgICAxMSwgNCwgMjI4LCAyNDUsIDExLCA0LCAyMjksIDI2LCAxMSwgNCwgMjI5LCAxLCAxMSwgNCwgMjI5LCAxNzAsIDExLCA0LCAKKyAgICAyMjksIDE1MywgMTEsIDQsIDIyOSwgMjAxLCAxMSwgNCwgMjI5LCAxNzQsIDExLCA0LCAyMjgsIDE3NSwgMTEsIDQsIDIyOCwgCisgICAgMTcxLCAxMSwgNCwgMjI4LCAyMDksIDExLCA0LCAyMjgsIDE4NiwgMTEsIDQsIDIyOCwgMTc5LCAxMSwgNCwgMjI4LCAxODMsIAorICAgIDExLCA0LCAyMzgsIDE0MSwgMTEsIDQsIDIzOCwgMTQwLCAxMSwgNCwgMjM4LCAxNDUsIDExLCA0LCAyMzgsIDE0MiwgMTEsIAorICAgIDQsIDIzOCwgMTQ0LCAxMSwgNCwgMjM4LCAxNDMsIDExLCA0LCAyMzgsIDE1MiwgMTEsIDQsIDIzOCwgMTUxLCAxMSwgNCwgCisgICAgMjM4LCAxNTUsIDExLCA0LCAyMzgsIDE1MywgMTEsIDQsIDIzOCwgMTMyLCAxMSwgNCwgMjM4LCAxMzEsIDExLCA0LCAyMzgsIAorICAgIDEzNCwgMTEsIDQsIDIzOCwgMTMzLCAxMSwgNCwgMjM4LCAxMzcsIDExLCA0LCAyMzgsIDEzNiwgMTEsIDQsIDIzOCwgMTM5LCAKKyAgICAxMSwgNCwgMjM4LCAxMzgsIDExLCA0LCAyMzgsIDE0NywgMTEsIDQsIDIzOCwgMTQ2LCAxMSwgNCwgMjM4LCAxNTAsIDExLCAKKyAgICA0LCAyMzgsIDE0OCwgMTEsIDQsIDIzOCwgMTI3LCAxMSwgNCwgMjM4LCAxMjYsIDExLCA0LCAyMzgsIDEzNSwgMTEsIDQsIAorICAgIDIzOCwgMTMwLCAxMSwgNCwgMjM4LCAxMjgsIDExLCA0LCAyMzgsIDEyOSwgMTEsIDQsIDIyNCwgMTc0LCAxMSwgNCwgMjI0LCAKKyAgICAxNzUsIDExLCA0LCAyMjQsIDE5MywgMTEsIDQsIDIyNCwgMTkyLCAxMSwgNCwgMjI0LCAxOTUsIDExLCA0LCAyMjQsIDE5NCwgCisgICAgMTEsIDQsIDIyNCwgMTY1LCAxMSwgNCwgMjI0LCAxNjcsIDExLCA0LCAyMjQsIDE2NiwgMTEsIDQsIDIyNCwgMTcwLCAxMSwgCisgICAgNCwgMjI0LCAxNjksIDExLCA0LCAyMjQsIDE3MiwgMTEsIDQsIDIyNCwgMTcxLCAxMSwgNCwgMjI0LCAxNzYsIDExLCA0LCAKKyAgICAyMjQsIDE3OCwgMTEsIDQsIDIyNCwgMTc3LCAxMSwgNCwgMjI0LCAxNjEsIDExLCA0LCAyMjQsIDE2MCwgMTEsIDQsIDIyNCwgCisgICAgMTY4LCAxMSwgNCwgMjI0LCAxNjQsIDExLCA0LCAyMjQsIDE2MiwgMTEsIDQsIDIyNCwgMTYzLCAxMSwgNCwgMjM1LCAyMzMsIAorICAgIDExLCA0LCAyMzUsIDIzMiwgMTEsIDQsIDIzNSwgMjM5LCAxMSwgNCwgMjM1LCAyMzQsIDExLCA0LCAyMzUsIDIzNiwgMTEsIAorICAgIDQsIDIzNSwgMjM1LCAxMSwgNCwgMjM1LCAyMzgsIDExLCA0LCAyMzUsIDIzNywgMTEsIDQsIDIzNSwgMjQ0LCAxMSwgNCwgCisgICAgMjM1LCAyNDMsIDExLCA0LCAyMzUsIDI0NiwgMTEsIDQsIDIzNSwgMjQ1LCAxMSwgNCwgMjM1LCAyMjUsIDExLCA0LCAyMzUsIAorICAgIDIyNCwgMTEsIDQsIDIzNSwgMjI3LCAxMSwgNCwgMjM1LCAyMjYsIDExLCA0LCAyMzUsIDIyOSwgMTEsIDQsIDIzNSwgMjI4LCAKKyAgICAxMSwgNCwgMjM1LCAyMzEsIDExLCA0LCAyMzUsIDIzMCwgMTEsIDQsIDIzNSwgMjQwLCAxMSwgNCwgMjM1LCAyNDIsIDExLCAKKyAgICA0LCAyMzUsIDI0MSwgMTEsIDQsIDIyMiwgMTQ4LCAxMSwgNCwgMjIyLCAxNTAsIDExLCA0LCAyMjIsIDE0OSwgMTEsIDQsIAorICAgIDIyMiwgMTkzLCAxMSwgNCwgMjIyLCAxOTEsIDExLCA0LCAyMjIsIDIwMywgMTEsIDQsIDIyMiwgMTk2LCAxMSwgNCwgMjIyLCAKKyAgICAxMTAsIDExLCA0LCAyMjIsIDEwOSwgMTEsIDQsIDIyMiwgMTExLCAxMSwgNCwgMjIyLCAxMjAsIDExLCA0LCAyMjIsIDExNywgCisgICAgMTEsIDQsIDIyMiwgMTI4LCAxMSwgNCwgMjIyLCAxMjIsIDExLCA0LCAyMjIsIDE4NCwgMTEsIDQsIDIyMiwgMTkwLCAxMSwgCisgICAgNCwgMjIyLCAxODYsIDExLCA0LCAyMzYsIDIzMCwgMTEsIDQsIDIzNiwgMjQ1LCAxMSwgNCwgMjM2LCAyNTQsIDExLCA0LCAKKyAgICAyMzcsIDgzLCAxMSwgNCwgMjM3LCA3MiwgMTEsIDQsIDE1MiwgMTEsIDQsIDIzNywgOTQsIDExLCA0LCAyMzYsIDYsIDExLCAKKyAgICA0LCAyMzYsIDUsIDExLCA0LCAyMzYsIDgsIDExLCA0LCAyMzYsIDcsIDExLCA0LCAyMzYsIDQ2LCAxMSwgNCwgMjM2LCAzNywgCisgICAgMTEsIDQsIDIzNiwgMTM2LCAxMSwgNCwgMjM2LCAxMDksIDExLCA0LCAyMzcsIDE4LCAxMSwgNCwgMjM3LCA2NywgMTEsIDQsIAorICAgIDIzNywgMzAsIDExLCA0LCAyMDQsIDgzLCAxMSwgNCwgMjA0LCA2OCwgMTEsIDQsIDIwNCwgMTExLCAxMSwgNCwgMjA0LCA5MywgCisgICAgMTEsIDQsIDIwMywgMjA2LCAxMSwgNCwgMjAzLCAyMDgsIDExLCA0LCAyMDMsIDIwNywgMTEsIDQsIDIwMywgMjI5LCAxMSwgCisgICAgNCwgMjA0LCAwLCAxMSwgNCwgMjAzLCAyMzksIDExLCA0LCAyMDQsIDQyLCAxMSwgNCwgMjA0LCA2MiwgMTEsIDQsIDIwNCwgCisgICAgNDcsIDExLCA0LCAyMDIsIDI0LCAxMSwgNCwgMjAyLCAyMywgMTEsIDQsIDIwMiwgMzksIDExLCA0LCAyMDIsIDI3LCAxMSwgCisgICAgNCwgMjAyLCAzMiwgMTEsIDQsIDIwMiwgMzQsIDExLCA0LCAyMDIsIDMzLCAxMSwgNCwgMjAyLCAxMDAsIDExLCA0LCAyMDIsIAorICAgIDk3LCAxMSwgNCwgMjAyLCAxMTYsIDExLCA0LCAyMDIsIDEwNCwgMTEsIDQsIDIwMSwgMjU1LCAxMSwgNCwgMjAyLCAxLCAxMSwgCisgICAgNCwgMjAyLCAwLCAxMSwgNCwgMjAyLCAxMywgMTEsIDQsIDIwMiwgMTIsIDExLCA0LCAyMDIsIDE3LCAxMSwgNCwgMjAyLCAKKyAgICAxNCwgMTEsIDQsIDIwMiwgODIsIDExLCA0LCAyMDIsIDkyLCAxMSwgNCwgMjAyLCA4NiwgMTEsIDQsIDIwMSwgMjUxLCAxMSwgCisgICAgNCwgMjAxLCAyNTAsIDExLCA0LCAyMDIsIDYsIDExLCA0LCAyMDEsIDI1NCwgMTEsIDQsIDIwMSwgMjUyLCAxMSwgNCwgMjAxLCAKKyAgICAyNTMsIDExLCA0LCAyMDEsIDIzNywgMTEsIDQsIDIwMSwgMjM2LCAxMSwgNCwgMjAxLCAyNDIsIDExLCA0LCAyMDEsIDI0MCwgCisgICAgMTEsIDQsIDIwMSwgMjM4LCAxMSwgNCwgMjAxLCAyMzksIDExLCA0LCAyNDYsIDUwLCAxMSwgNCwgMjQ2LCA0MywgMTEsIDQsIAorICAgIDI0NiwgNzksIDExLCA0LCAyNDYsIDYzLCAxMSwgNCwgMjQ2LCA3NiwgMTEsIDQsIDI0NiwgNzAsIDExLCA0LCAyNDYsIDc4LCAKKyAgICAxMSwgNCwgMjQ2LCA3NywgMTEsIDQsIDI0NywgMTcsIDExLCA0LCAyNDcsIDksIDExLCA0LCAyNDcsIDkyLCAxMSwgNCwgCisgICAgMjQ3LCA0OCwgMTEsIDQsIDI0NSwgMTAxLCAxMSwgNCwgMjQ1LCAxMDMsIDExLCA0LCAyNDUsIDEwMiwgMTEsIDQsIDI0NSwgCisgICAgMTU4LCAxMSwgNCwgMjQ1LCAxNDgsIDExLCA0LCAyNDUsIDI1NCwgMTEsIDQsIDI0NSwgMTc1LCAxMSwgNCwgMjQ2LCAyMDIsIAorICAgIDExLCA0LCAyNDYsIDIzOCwgMTEsIDQsIDI0NiwgMjA3LCAxMSwgNCwgMjQ1LCA3NywgMTEsIDQsIDI0NSwgNzUsIDExLCA0LCAKKyAgICAyNDUsIDExMCwgMTEsIDQsIDI0NSwgOTksIDExLCA0LCAyNDUsIDgzLCAxMSwgNCwgMjQ1LCA5NiwgMTEsIDQsIDI0NSwgNTQsIAorICAgIDExLCA0LCAyNDUsIDUzLCAxMSwgNCwgMjQ1LCA2NiwgMTEsIDQsIDI0NSwgNjAsIDExLCA0LCAyNDUsIDU1LCAxMSwgNCwgCisgICAgMjQ1LCA1NywgMTEsIDQsIDIwMSwgMjIwLCAxMSwgNCwgMjAxLCAyMTksIDExLCA0LCAyMDEsIDIyNiwgMTEsIDQsIDIwMSwgCisgICAgMjIxLCAxMSwgNCwgMjAxLCAyMjMsIDExLCA0LCAyMDEsIDIyMiwgMTEsIDQsIDIwMSwgMjI1LCAxMSwgNCwgMjAxLCAyMjQsIAorICAgIDExLCA0LCAyMDEsIDIzMiwgMTEsIDQsIDIwMSwgMjMxLCAxMSwgNCwgMjAxLCAyMzUsIDExLCA0LCAyMDEsIDIzMywgMTEsIAorICAgIDQsIDIwMSwgMjE2LCAxMSwgNCwgMjAxLCAyMTgsIDExLCA0LCAyMDEsIDIxNywgMTEsIDQsIDIwMSwgMjI3LCAxMSwgNCwgCisgICAgMjAxLCAyMzAsIDExLCA0LCAyMDEsIDIyOCwgMTEsIDQsIDIwMSwgMjA5LCAxMSwgNCwgMjAxLCAyMTMsIDExLCA0LCAyMDEsIAorICAgIDIxMiwgMTEsIDQsIDIwMSwgMjEwLCAxMSwgNCwgMjAxLCAyMTEsIDExLCA0LCAyMDEsIDIwMywgMTEsIDQsIDIwMSwgMjAyLCAKKyAgICAxMSwgNCwgMjAxLCAyMDgsIDExLCA0LCAyMDEsIDIwNiwgMTEsIDQsIDIwMSwgMjA0LCAxMSwgNCwgMjAxLCAyMDUsIDExLCAKKyAgICA0LCAyMjAsIDIwMSwgMTEsIDQsIDIyMCwgMjAwLCAxMSwgNCwgMjIwLCAyMDYsIDExLCA0LCAyMjAsIDIwMiwgMTEsIDQsIAorICAgIDIyMCwgMjAzLCAxMSwgNCwgMjIwLCAyMDUsIDExLCA0LCAyMjAsIDIwNCwgMTEsIDQsIDIyMCwgMjExLCAxMSwgNCwgMjIwLCAKKyAgICAyMTAsIDExLCA0LCAyMjAsIDIxNCwgMTEsIDQsIDIyMCwgMjEzLCAxMSwgNCwgMjIwLCAxOTQsIDExLCA0LCAyMjAsIDE5NSwgCisgICAgMTEsIDQsIDIyMCwgMTk4LCAxMSwgNCwgMjIwLCAxOTksIDExLCA0LCAyMjAsIDIwNywgMTEsIDQsIDIyMCwgMjA5LCAxMSwgCisgICAgNCwgMjIwLCAxODksIDExLCA0LCAyMjAsIDE5NywgMTEsIDQsIDIyMCwgMTkzLCAxMSwgNCwgMjIwLCAxOTAsIDExLCA0LCAKKyAgICAyMjAsIDE5MSwgMTEsIDQsIDIyMCwgMTg0LCAxMSwgNCwgMjIwLCAxODMsIDExLCA0LCAyMjAsIDE4OCwgMTEsIDQsIDIyMCwgCisgICAgMTg3LCAxMSwgNCwgMjIwLCAxODUsIDExLCA0LCAyMjAsIDE4NiwgMTEsIDQsIDIxMiwgOTAsIDExLCA0LCAxOTUsIDExLCA0LCAKKyAgICAyMTIsIDE2MiwgMTEsIDQsIDIxMiwgOTMsIDExLCA0LCAyMTIsIDE1MCwgMTEsIDQsIDIxMiwgMTUzLCAxMSwgNCwgMjEyLCAKKyAgICAxNTEsIDExLCA0LCAyMTQsIDIyNSwgMTEsIDQsIDIxNCwgMjExLCAxMSwgNCwgMjE1LCAzNiwgMTEsIDQsIDIxNCwgMjMzLCAKKyAgICAxMSwgNCwgMjEwLCAyMDQsIDExLCA0LCAyMTAsIDIwNiwgMTEsIDQsIDIxMCwgMjA1LCAxMSwgNCwgMjExLCAyNDQsIDExLCAKKyAgICA0LCAyMTEsIDIzMywgMTEsIDQsIDIxMiwgMTMsIDExLCA0LCAyMTEsIDI0OCwgMTEsIDQsIDIxMywgMTAzLCAxMSwgNCwgCisgICAgMjE0LCAxNzcsIDExLCA0LCAyMTMsIDEzMiwgMTEsIDQsIDIxMCwgMTgxLCAxMSwgNCwgMjEwLCAxNzgsIDExLCA0LCAyMTEsIAorICAgIDEwLCAxMSwgNCwgMjEwLCAyMDMsIDExLCA0LCAyMTAsIDE4NSwgMTEsIDQsIDIxMCwgMTkzLCAxMSwgNCwgMjEwLCA4MywgCisgICAgMTEsIDQsIDIxMCwgODIsIDExLCA0LCAyMTAsIDE1MSwgMTEsIDQsIDIxMCwgOTEsIDExLCA0LCAyMTAsIDg1LCAxMSwgNCwgCisgICAgMjEwLCA5MCwgMTEsIDQsIDIxMSwgMTI2LCAxMSwgNCwgMjExLCAxMjUsIDExLCA0LCAyMTEsIDEzMiwgMTEsIDQsIDIxMSwgCisgICAgMTI3LCAxMSwgNCwgMjExLCAxMjksIDExLCA0LCAyMTEsIDEzMSwgMTEsIDQsIDIxMSwgMTMwLCAxMSwgNCwgMjExLCAxNDEsIAorICAgIDExLCA0LCAyMTEsIDEzOSwgMTEsIDQsIDIxMSwgMTY0LCAxMSwgNCwgMjExLCAxNDIsIDExLCA0LCAyMTEsIDEyMSwgMTEsIAorICAgIDQsIDIxMSwgMTIwLCAxMSwgNCwgMjExLCAxMjQsIDExLCA0LCAyMTEsIDEyMiwgMTEsIDQsIDIxMSwgMTM1LCAxMSwgNCwgCisgICAgMjExLCAxMzgsIDExLCA0LCAyMTEsIDEzNiwgMTEsIDQsIDIxMSwgMTE3LCAxMSwgNCwgMjExLCAxMTUsIDExLCA0LCAyMTEsIAorICAgIDExOSwgMTEsIDQsIDIxMSwgMTE4LCAxMSwgNCwgMjExLCAxMTAsIDExLCA0LCAyMTEsIDEwOSwgMTEsIDQsIDIxMSwgMTE0LCAKKyAgICAxMSwgNCwgMjExLCAxMTMsIDExLCA0LCAyMTEsIDExMSwgMTEsIDQsIDIxMSwgMTEyLCAxMSwgNCwgMjAyLCA3NSwgMTEsIDQsIAorICAgIDIwMiwgNzQsIDExLCA0LCAyMDIsIDgwLCAxMSwgNCwgMjAyLCA3NywgMTEsIDQsIDIwMiwgNTQsIDExLCA0LCAyMDIsIDU2LCAKKyAgICAxMSwgNCwgMjAyLCA1NSwgMTEsIDQsIDIwMiwgNTksIDExLCA0LCAyMDIsIDU4LCAxMSwgNCwgMjAyLCA2MywgMTEsIDQsIAorICAgIDIwMiwgNjAsIDExLCA0LCAyMDIsIDY4LCAxMSwgNCwgMjAyLCA2NywgMTEsIDQsIDIwMiwgNzEsIDExLCA0LCAyMDIsIDY5LCAKKyAgICAxMSwgNCwgMjAyLCA1MCwgMTEsIDQsIDIwMiwgNDksIDExLCA0LCAyMDIsIDU3LCAxMSwgNCwgMjAyLCA1MywgMTEsIDQsIAorICAgIDIwMiwgNTEsIDExLCA0LCAyMDIsIDUyLCAxMSwgNCwgMjAyLCA0MiwgMTEsIDQsIDIwMiwgNDEsIDExLCA0LCAyMDIsIDQ2LCAKKyAgICAxMSwgNCwgMjAyLCA0NSwgMTEsIDQsIDIwMiwgNDMsIDExLCA0LCAyMDIsIDQ0LCAxMSwgNCwgMjQ2LCAxNzYsIDExLCA0LCAKKyAgICAyNDYsIDE3MiwgMTEsIDQsIDI0NiwgMTk5LCAxMSwgNCwgMjQ2LCAxODUsIDExLCA0LCAyNDYsIDk0LCAxMSwgNCwgMjQ2LCAKKyAgICA5MywgMTEsIDQsIDI0NiwgOTYsIDExLCA0LCAyNDYsIDk1LCAxMSwgNCwgMjQ2LCAxMDksIDExLCA0LCAyNDYsIDEwOCwgMTEsIAorICAgIDQsIDI0NiwgMTE2LCAxMSwgNCwgMjQ2LCAxMTEsIDExLCA0LCAyNDYsIDE0NywgMTEsIDQsIDI0NiwgMTQ1LCAxMSwgNCwgCisgICAgMjQ2LCAxNzAsIDExLCA0LCAyNDYsIDE1NSwgMTEsIDQsIDI0NiwgODgsIDExLCA0LCAyNDYsIDk4LCAxMSwgNCwgMjQ2LCAKKyAgICA5MiwgMTEsIDQsIDI0NiwgODksIDExLCA0LCAyNDYsIDkxLCAxMSwgNCwgMjQ2LCA4MSwgMTEsIDQsIDI0NiwgODAsIDExLCAKKyAgICA0LCAyNDYsIDg1LCAxMSwgNCwgMjQ2LCA4NCwgMTEsIDQsIDI0NiwgODIsIDExLCA0LCAyNDYsIDgzLCAxMSwgNCwgMjE1LCAKKyAgICAxODEsIDExLCA0LCAyMTUsIDE4NSwgMTEsIDQsIDIxNSwgMTYzLCAxMSwgNCwgMjE1LCAxNjQsIDExLCA0LCAyMTUsIDE2OCwgCisgICAgMTEsIDQsIDIxNSwgMTY3LCAxMSwgNCwgMjE1LCAxNzEsIDExLCA0LCAyMTUsIDE2OSwgMTEsIDQsIDIxNSwgMTc1LCAxMSwgCisgICAgNCwgMjE1LCAxNzQsIDExLCA0LCAyMTUsIDE4MCwgMTEsIDQsIDIxNSwgMTc2LCAxMSwgNCwgMjE1LCAxNTksIDExLCA0LCAKKyAgICAyMTUsIDE1NywgMTEsIDQsIDIxNSwgMTY1LCAxMSwgNCwgMjE1LCAxNjIsIDExLCA0LCAyMTUsIDE2MCwgMTEsIDQsIDIxNSwgCisgICAgMTYxLCAxMSwgNCwgMjE1LCAxNTIsIDExLCA0LCAyMTUsIDE1MSwgMTEsIDQsIDIxNSwgMTU2LCAxMSwgNCwgMjE1LCAxNTUsIAorICAgIDExLCA0LCAyMTUsIDE1MywgMTEsIDQsIDIxNSwgMTU0LCAxMSwgNCwgMjIxLCAxNDUsIDExLCA0LCAyMjEsIDE0NCwgMTEsIAorICAgIDQsIDIyMSwgMTQ3LCAxMSwgNCwgMjIxLCAxNDYsIDExLCA0LCAyMjEsIDEzNiwgMTEsIDQsIDIyMSwgMTM4LCAxMSwgNCwgCisgICAgMjIxLCAxMzcsIDExLCA0LCAyMjEsIDE0MCwgMTEsIDQsIDIyMSwgMTM5LCAxMSwgNCwgMjIxLCAxNDMsIDExLCA0LCAyMjEsIAorICAgIDE0MiwgMTEsIDQsIDIyMSwgMTMwLCAxMSwgNCwgMjIxLCAxMjksIDExLCA0LCAyMjEsIDEzNSwgMTEsIDQsIDIyMSwgMTMzLCAKKyAgICAxMSwgNCwgMjIxLCAxMzEsIDExLCA0LCAyMjEsIDEzMiwgMTEsIDQsIDIyMSwgMTI0LCAxMSwgNCwgMjIxLCAxMjMsIDExLCAKKyAgICA0LCAyMjEsIDEyOCwgMTEsIDQsIDIyMSwgMTI3LCAxMSwgNCwgMjIxLCAxMjUsIDExLCA0LCAyMjEsIDEyNiwgMTEsIDQsIAorICAgIDIxMywgNTMsIDExLCA0LCAyMTMsIDQ4LCAxMSwgNCwgMjEzLCA5MCwgMTEsIDQsIDIxMywgNjQsIDExLCA0LCAyMTIsIDE4OCwgCisgICAgMTEsIDQsIDIxMiwgMTkwLCAxMSwgNCwgMjEyLCAxODksIDExLCA0LCAyMTIsIDIxMiwgMTEsIDQsIDIxMiwgMjA4LCAxMSwgCisgICAgNCwgMjEyLCAyNDIsIDExLCA0LCAyMTIsIDIzMiwgMTEsIDQsIDIxMywgMjEsIDExLCA0LCAyMTMsIDE0LCAxMSwgNCwgMjEzLCAKKyAgICA0MywgMTEsIDQsIDIxMywgMzAsIDExLCA0LCAyMTIsIDE4NCwgMTEsIDQsIDIxMiwgMTgxLCAxMSwgNCwgMjEyLCAxOTksIAorICAgIDExLCA0LCAyMTIsIDE4NywgMTEsIDQsIDIxMiwgMTg1LCAxMSwgNCwgMjEyLCAxODYsIDExLCA0LCAyMTIsIDE2NSwgMTEsIAorICAgIDQsIDIxMiwgMTY0LCAxMSwgNCwgMjEyLCAxNzEsIDExLCA0LCAyMTIsIDE2OCwgMTEsIDQsIDIxMiwgMTY2LCAxMSwgNCwgCisgICAgMjEyLCAxNjcsIDExLCA0LCAyMTYsIDE3MiwgMTEsIDQsIDIxNiwgMTY2LCAxMSwgNCwgMjE2LCAyMjAsIDExLCA0LCAyMTYsIAorICAgIDE3OCwgMTEsIDQsIDIxNSwgMTIyLCAxMSwgNCwgMjE1LCAxMjQsIDExLCA0LCAyMTUsIDEyMywgMTEsIDQsIDIxNSwgMTk5LCAKKyAgICAxMSwgNCwgMjE1LCAxODcsIDExLCA0LCAyMTUsIDIyNywgMTEsIDQsIDIxNSwgMjAzLCAxMSwgNCwgMjE2LCA2NiwgMTEsIDQsIAorICAgIDIxNiwgMTU4LCAxMSwgNCwgMjE2LCAxMDUsIDExLCA0LCAyMTUsIDExNSwgMTEsIDQsIDIxNSwgMTEyLCAxMSwgNCwgMjE1LCAKKyAgICAxNDUsIDExLCA0LCAyMTUsIDEyMSwgMTEsIDQsIDIxNSwgMTE3LCAxMSwgNCwgMjE1LCAxMTgsIDExLCA0LCAyMTUsIDk3LCAKKyAgICAxMSwgNCwgMjE1LCA5NiwgMTEsIDQsIDIxNSwgMTAyLCAxMSwgNCwgMjE1LCAxMDAsIDExLCA0LCAyMTUsIDk4LCAxMSwgNCwgCisgICAgMjE1LCA5OSwgMTEsIDQsIDIzMCwgMTMxLCAxMSwgNCwgMjMwLCAxMzAsIDExLCA0LCAyMzAsIDE0MSwgMTEsIDQsIDIzMCwgCisgICAgMTMyLCAxMSwgNCwgMjMwLCAxMzcsIDExLCA0LCAyMzAsIDEzNiwgMTEsIDQsIDIzMCwgMTM5LCAxMSwgNCwgMjMwLCAxMzgsIAorICAgIDExLCA0LCAyMzAsIDcyLCAxMSwgNCwgMjMwLCA3MSwgMTEsIDQsIDIzMCwgNzQsIDExLCA0LCAyMzAsIDczLCAxMSwgNCwgCisgICAgMjMwLCA4OCwgMTEsIDQsIDIzMCwgODYsIDExLCA0LCAyMzAsIDEwMSwgMTEsIDQsIDIzMCwgOTAsIDExLCA0LCAyMzAsIDY1LCAKKyAgICAxMSwgNCwgMjMwLCA2MywgMTEsIDQsIDIzMCwgODIsIDExLCA0LCAyMzAsIDcwLCAxMSwgNCwgMjMwLCA2NywgMTEsIDQsIAorICAgIDIzMCwgNjgsIDExLCA0LCAyMzAsIDU3LCAxMSwgNCwgMjMwLCA1NiwgMTEsIDQsIDIzMCwgNjEsIDExLCA0LCAyMzAsIDYwLCAKKyAgICAxMSwgNCwgMjMwLCA1OCwgMTEsIDQsIDIzMCwgNTksIDExLCA0LCAyMTcsIDgxLCAxMSwgNCwgMjE3LCA3OSwgMTEsIDQsIAorICAgIDIxNywgODgsIDExLCA0LCAyMTcsIDgyLCAxMSwgNCwgMjE3LCA4NSwgMTEsIDQsIDIxNywgODQsIDExLCA0LCAyMTcsIDg3LCAKKyAgICAxMSwgNCwgMjE3LCA4NiwgMTEsIDQsIDIxNywgMzIsIDExLCA0LCAyMTcsIDI5LCAxMSwgNCwgMjE3LCAzNCwgMTEsIDQsIAorICAgIDIxNywgMzMsIDExLCA0LCAyMTcsIDY4LCAxMSwgNCwgMjE3LCA2NywgMTEsIDQsIDIxNywgNzcsIDExLCA0LCAyMTcsIDcxLCAKKyAgICAxMSwgNCwgMjE3LCAyNCwgMTEsIDQsIDIxNywgMjAsIDExLCA0LCAyMTcsIDY1LCAxMSwgNCwgMjE3LCAyOCwgMTEsIDQsIAorICAgIDIxNywgMjYsIDExLCA0LCAyMTcsIDI3LCAxMSwgNCwgMjE3LCA0LCAxMSwgNCwgMjE3LCAyLCAxMSwgNCwgMjE3LCAxNCwgCisgICAgMTEsIDQsIDIxNywgNywgMTEsIDQsIDIxNywgNSwgMTEsIDQsIDIxNywgNiwgMTEsIDQsIDIzMCwgMTIwLCAxMSwgNCwgMjMwLCAKKyAgICAxMTksIDExLCA0LCAyMzAsIDEyNiwgMTEsIDQsIDIzMCwgMTIxLCAxMSwgNCwgMjMwLCAxMjMsIDExLCA0LCAyMzAsIDEyMiwgCisgICAgMTEsIDQsIDIzMCwgMTI1LCAxMSwgNCwgMjMwLCAxMjQsIDExLCA0LCAyMzAsIDExMSwgMTEsIDQsIDIzMCwgMTEzLCAxMSwgCisgICAgNCwgMjMwLCAxMTIsIDExLCA0LCAyMzAsIDExNiwgMTEsIDQsIDIzMCwgMTE1LCAxMSwgNCwgMjMwLCAxMTgsIDExLCA0LCAKKyAgICAyMzAsIDExNywgMTEsIDQsIDIzMCwgMTA3LCAxMSwgNCwgMjMwLCAxMDYsIDExLCA0LCAyMzAsIDExNCwgMTEsIDQsIDIzMCwgCisgICAgMTEwLCAxMSwgNCwgMjMwLCAxMDgsIDExLCA0LCAyMzAsIDEwOSwgMTEsIDQsIDIzMCwgMTAzLCAxMSwgNCwgMjMwLCAxMDIsIAorICAgIDExLCA0LCAyMzAsIDEwNSwgMTEsIDQsIDIzMCwgMTA0LCAxMSwgNCwgMjIyLCAyNSwgMTEsIDQsIDIyMiwgMjQsIDExLCA0LCAKKyAgICAyMjIsIDMyLCAxMSwgNCwgMjIyLCAyNiwgMTEsIDQsIDIyMiwgMjgsIDExLCA0LCAyMjIsIDI3LCAxMSwgNCwgMjIyLCAzMSwgCisgICAgMTEsIDQsIDIyMiwgMjksIDExLCA0LCAyMjIsIDE0LCAxMSwgNCwgMjIyLCAxNSwgMTEsIDQsIDIyMiwgMjAsIDExLCA0LCAKKyAgICAyMjIsIDE5LCAxMSwgNCwgMjIyLCAyMywgMTEsIDQsIDIyMiwgMjEsIDExLCA0LCAyMjIsIDksIDExLCA0LCAyMjIsIDE4LCAKKyAgICAxMSwgNCwgMjIyLCAxMywgMTEsIDQsIDIyMiwgMTAsIDExLCA0LCAyMjIsIDExLCAxMSwgNCwgMjIyLCA0LCAxMSwgNCwgCisgICAgMjIyLCAzLCAxMSwgNCwgMjIyLCA4LCAxMSwgNCwgMjIyLCA3LCAxMSwgNCwgMjIyLCA1LCAxMSwgNCwgMjIyLCA2LCAxMSwgCisgICAgNCwgMjIwLCAyMzYsIDExLCA0LCAyMjAsIDIzNSwgMTEsIDQsIDIyMCwgMjQ4LCAxMSwgNCwgMjIwLCAyNDAsIDExLCA0LCAKKyAgICAyMjAsIDI0NSwgMTEsIDQsIDIyMCwgMjQ0LCAxMSwgNCwgMjIwLCAyNDcsIDExLCA0LCAyMjAsIDI0NiwgMTEsIDQsIDIyMCwgCisgICAgMjIxLCAxMSwgNCwgMjIwLCAyMjMsIDExLCA0LCAyMjAsIDIyMiwgMTEsIDQsIDIyMCwgMjI4LCAxMSwgNCwgMjIwLCAyMjcsIAorICAgIDExLCA0LCAyMjAsIDIzMywgMTEsIDQsIDIyMCwgMjI5LCAxMSwgNCwgMjIwLCAyMTksIDExLCA0LCAyMjAsIDIxNywgMTEsIAorICAgIDQsIDIyMCwgMjI2LCAxMSwgNCwgMjIwLCAyMjAsIDExLCA0LCAyMDMsIDE2MiwgMTEsIDQsIDIwMywgMTYxLCAxMSwgNCwgCisgICAgMjAzLCAxNzAsIDExLCA0LCAyMDMsIDE2NCwgMTEsIDQsIDIwMywgMTY2LCAxMSwgNCwgMjAzLCAxNjUsIDExLCA0LCAyMDMsIAorICAgIDE2OCwgMTEsIDQsIDIwMywgMTY3LCAxMSwgNCwgMjAzLCAxNTAsIDExLCA0LCAyMDMsIDE1MSwgMTEsIDQsIDIwMywgMTU1LCAKKyAgICAxMSwgNCwgMjAzLCAxNTQsIDExLCA0LCAyMDMsIDE2MCwgMTEsIDQsIDIwMywgMTU4LCAxMSwgNCwgMjAzLCAxMjgsIDExLCAKKyAgICA0LCAyMDMsIDEyNiwgMTEsIDQsIDIwMywgMTQxLCAxMSwgNCwgMjAzLCAxMzEsIDExLCA0LCAyMDMsIDEyOSwgMTEsIDQsIAorICAgIDIwMywgMTMwLCAxMSwgNCwgMjAyLCAyNTMsIDExLCA0LCAyMDIsIDI1MSwgMTEsIDQsIDIwMywgMTEsIDExLCA0LCAyMDIsIAorICAgIDI1NCwgMTEsIDQsIDIwMywgNSwgMTEsIDQsIDIwMywgNCwgMTEsIDQsIDIwMywgOCwgMTEsIDQsIDIwMywgNiwgMTEsIDQsIAorICAgIDIwMiwgMTkxLCAxMSwgNCwgMjAyLCAxOTAsIDExLCA0LCAyMDIsIDE5NCwgMTEsIDQsIDIwMiwgMTkyLCAxMSwgNCwgMjAyLCAKKyAgICAyMjcsIDExLCA0LCAyMDIsIDIyMywgMTEsIDQsIDIwMiwgMjQ3LCAxMSwgNCwgMjAyLCAyMzEsIDExLCA0LCAyMDIsIDE4MiwgCisgICAgMTEsIDQsIDIwMiwgMTc4LCAxMSwgNCwgMjAyLCAyMTMsIDExLCA0LCAyMDIsIDE4OSwgMTEsIDQsIDIwMiwgMTg1LCAxMSwgCisgICAgNCwgMjAyLCAxODYsIDExLCA0LCAyMDIsIDE2MiwgMTEsIDQsIDIwMiwgMTYxLCAxMSwgNCwgMjAyLCAxNjksIDExLCA0LCAKKyAgICAyMDIsIDE2NSwgMTEsIDQsIDIwMiwgMTYzLCAxMSwgNCwgMjAyLCAxNjQsIDExLCA0MCwgMjE3LCA2OCwgMTEsIDQwLCAyMjcsIAorICAgIDE0OCwgMTEsIDQwLCAyMjksIDY0LCAxMSwgNDAsIDIyMCwgMjQwLCAxMSwgNDAsIDI0NSwgNjAsIDExLCA0MCwgMjExLCAKKyAgICAxMzIsIDExLCA0MCwgMjM4LCAxMzgsIDExLCA0MCwgMjM4LCAxNzAsIDExLCA0MCwgMjI0LCAxNTUsIDExLCA0MCwgMjM1LCAKKyAgICAyMzMsIDExLCA0MCwgMjI2LCAxOTIsIDExLCA0MCwgMjQ4LCAxNzAsIDExLCA0MCwgMjI0LCAyNywgMTEsIDQwLCAyMDIsIAorICAgIDI0NywgMTEsIDQwLCAyMTcsIDE1OSwgMTEsIDQwLCAyMzUsIDIyNywgMTEsIDQwLCAyMDksIDIxMiwgMTEsIDQwLCAyMzksIAorICAgIDgsIDExLCA0MCwgMjAxLCAyNTQsIDExLCA0MCwgMjQ1LCA1NCwgMTEsIDQwLCAyNDQsIDgwLCAxMSwgNDAsIDI0NywgMTYwLCAKKyAgICAxMSwgNDAsIDIzOCwgMTM0LCAxMSwgNDAsIDIyMCwgMjI5LCAxMSwgNDAsIDIwNywgMjAzLCAxMSwgNDAsIDIyMCwgOSwgMTEsIAorICAgIDQwLCAyMzAsIDEwNywgMTEsIDQwLCAyMDIsIDEzLCAxMSwgNDAsIDIxNywgMTM4LCAxMSwgNDAsIDIzNiwgMTc4LCAxMSwgCisgICAgNDAsIDIwMiwgMjUzLCAxMSwgNDAsIDIwNCwgMTU5LCAxMSwgNDAsIDIxMiwgMTcxLCAxMSwgNDAsIDIwNiwgNDQsIDExLCAKKyAgICA0MCwgMjAyLCAxMTYsIDExLCA0MCwgMjMwLCAxMDEsIDExLCA0MCwgMjIwLCAxOTMsIDExLCA0MCwgMjMwLCAxMDUsIDExLCAKKyAgICA0MCwgMjM4LCAxOCwgMTEsIDQwLCAyMzAsIDEyNSwgMTEsIDQwLCAyMDQsIDAsIDExLCA0MCwgMjQyLCA0MiwgMTEsIDQwLCAKKyAgICAyMTIsIDE4NiwgMTEsIDQwLCAyMjcsIDE0MiwgMTEsIDQwLCAyNDUsIDY2LCAxMSwgNDAsIDI0NSwgMTAyLCAxMSwgNDAsIAorICAgIDI0NiwgNjMsIDExLCA0MCwgMjM1LCAyMzAsIDExLCA0MCwgMjEzLCA1MywgMTEsIDQwLCAyMDEsIDI1MywgMTEsIDQwLCAKKyAgICAyMTIsIDIzMiwgMTEsIDQwLCAyNDYsIDE3MCwgMTEsIDQwLCAyMDEsIDIyMywgMTEsIDQwLCAyMjMsIDUxLCAxMSwgNDAsIAorICAgIDIyOSwgMjAxLCAyMjcsIDkxLCAxLCAyNDksIDMyLCAyMjcsIDkxLCAxLCAxODUsIDIyNywgOTEsIDEsIDIxOCwgMjA4LCAKKyAgICAyMjcsIDkxLCAxLCAyNDQsIDIxMiwgMjI3LCA5MSwgMSwgMjEwLCAyMiwgMjI3LCA5MSwgMSwgMjA5LCAxMDgsIDIyNywgOTEsIAorICAgIDEsIDIzOSwgOCwgMjI3LCA5MSwgMSwgMTczLCAyMjcsIDkxLCAxLCAyMjksIDE0NCwgMjI3LCA5MSwgMSwgMjMwLCAxODEsIAorICAgIDIyNywgOTEsIDEsIDI0NywgOTIsIDIyNywgOTEsIDEsIDI0NiwgMTk5LCAyMjcsIDkxLCAxLCAyNDEsIDI1NSwgMjI3LCA5MSwgCisgICAgMSwgMjA4LCAyMCwgMjI3LCA5MSwgMSwgMjA4LCAxMCwgMjI3LCA5MSwgMSwgMTkyLCAyMjcsIDkxLCAxLCAyMDEsIDIwMSwgCisgICAgMjI3LCA5MSwgMSwgMjI4LCAxMTMsIDIyNywgOTEsIDEsIDIxNSwgMzYsIDIyNywgOTEsIDEsIDIwMiwgODAsIDIyNywgOTEsIAorICAgIDEsIDIwMiwgMTE2LCAyMjcsIDkxLCAxLCAyMjIsIDIwMywgMjI3LCA5MSwgMSwgMTUyLCAyMjcsIDkxLCAxLCAyMDMsIDE4MiwgCisgICAgMjI3LCA5MSwgMSwgMjM3LCAxMiwgMjI3LCA5MSwgMSwgMjQwLCAxMDgsIDIyNywgOTEsIDEsIDIwNCwgMTExLCAyMjcsIDkxLCAKKyAgICAxLCAyMTMsIDkwLCAyMjcsIDkxLCAxLCAxOTgsIDIyNywgOTEsIDEsIDIzOCwgMTE5LCAyMjcsIDkxLCAxLCA2MywgMjI3LCAKKyAgICA5MSwgMSwgMjUxLCAxMDksIDIyNywgOTEsIDEsIDc0LCAyMjcsIDkxLCAxLCAyNDAsIDIzOCwgMjI3LCA5MSwgMSwgNzUsIAorICAgIDIyNywgOTEsIDEsIDc4LCAyMjcsIDkxLCAxLCA2OCwgMjI3LCA5MSwgMSwgMjA3LCAyNCwgMjI3LCA5MSwgMSwgMjA3LCAxOCwgCisgICAgMjI3LCA5MSwgMSwgMjIwLCA3MywgMjI3LCA5MSwgMSwgMTQzLCAyMjMsIDE3MCwgMjA5LCAyLCAyMjcsIDkxLCAxLCAxNDMsIAorICAgIDIyMywgMTExLCAyMTgsIDY5LCAyMjcsIDkxLCAxLCAxNDMsIDIyMywgMTcwLCAyNDUsIDY1LCAyMjcsIDkxLCAxLCAxNDMsIAorICAgIDIyMywgMTcwLCAyNDgsIDIzLCAyMjcsIDkxLCAxLCAxNDMsIDIyMywgMTcwLCAyMDEsIDIwMSwgMjI3LCA5MSwgMSwgMTQzLCAKKyAgICAyMjMsIDE3MCwgMjMwLCAxNTAsIDIyNywgOTEsIDIxNywgMTc5LCAyNDUsIDIzMywgMjI3LCA5MSwgMjE3LCAxNzksIDIzOSwgCisgICAgMTAyLCAyMTEsIDYxLCA0OCwgNCwgMjQxLCAxNjEsIDQ4LCA0LCAyNDEsIDE1NywgNDgsIDQsIDIzNywgNDgsIDQ4LCA0LCAKKyAgICAyMDQsIDU1LCA0OCwgNCwgMjA0LCA1NCwgNDgsIDQsIDIxOSwgMjMsIDQ4LCA0LCAyNDgsIDkzLCA0OCwgNCwgMjQ4LCAxNTAsIAorICAgIDQ4LCA0LCAyMjUsIDQ2LCA0OCwgNCwgMjI4LCAyMzksIDQ4LCA0LCAyMjQsIDE4NywgNDgsIDQsIDIzOCwgMjAzLCA0OCwgNCwgCisgICAgMjQwLCA1MywgNDgsIDQsIDIwNiwgNTAsIDQ4LCA0LCAyMDksIDE3NiwgNDgsIDQsIDIwOSwgOTAsIDQ4LCA0LCAyNDMsIAorICAgIDI0NywgNDgsIDQsIDI0MywgMjQ0LCA0OCwgNCwgMjI3LCAyMjYsIDQ4LCA0LCAyMTYsIDEzNSwgNDgsIDQsIDI0NCwgNjEsIAorICAgIDQ4LCA0LCAyMjMsIDE2LCA0OCwgNCwgMjE0LCAxNjUsIDQ4LCA0LCAyMTMsIDQxLCA0OCwgNCwgMjAyLCA5MCwgNDgsIDQsIAorICAgIDIwMiwgNzAsIDQ4LCA0LCAyNDYsIDIzMCwgNDgsIDQsIDIzMCwgMTU5LCA0OCwgNCwgMjIyLCAzOSwgNDgsIDQsIDIwMywgCisgICAgNDksIDQ4LCA0LCAyMjksIDE5OCwgNDgsIDQsIDIyMiwgMTc2LCA0OCwgNCwgMjM4LCAxODIsIDQ4LCA0LCAyMjUsIDgsIDQ4LCAKKyAgICA0LCAyMjIsIDIzNSwgNDgsIDQsIDIyMSwgMCwgNDgsIDQsIDc1LCA0OCwgNCwgMjMxLCA0OSwgNDgsIDQsIDIzNywgMywgNDgsIAorICAgIDQsIDIzNiwgMjM4LCA0OCwgNCwgMjA0LCAzMCwgNDgsIDQsIDIwNCwgMTgsIDQ4LCA0LCAyMTgsIDE2NywgNDgsIDQsIDI0OCwgCisgICAgOTEsIDQ4LCA0LCAyNDgsIDg2LCA0OCwgNCwgMjI1LCAzOSwgNDgsIDQsIDIyOCwgMjM2LCA0OCwgNCwgMjI0LCAxODQsIDQ4LCAKKyAgICA0LCAyMzgsIDE5OSwgNDgsIDQsIDI0MCwgMjYsIDQ4LCA0LCAyMDUsIDIzMCwgNDgsIDQsIDIwOSwgMiwgNDgsIDQsIDIwOSwgCisgICAgNzAsIDQ4LCA0LCAyNDMsIDIzOSwgNDgsIDQsIDI0MywgMjQzLCA0OCwgNCwgMjI3LCAxNDgsIDQ4LCA0LCAyMTYsIDU3LCAKKyAgICA0OCwgNCwgMjQzLCAyMzMsIDQ4LCA0LCAyMjMsIDEwLCA0OCwgNCwgMjEyLCAxNjIsIDQ4LCA0LCAyMTMsIDExLCA0OCwgNCwgCisgICAgMjAyLCAzOSwgNDgsIDQsIDIwMiwgNjYsIDQ4LCA0LCAyNDYsIDc5LCA0OCwgNCwgMjMwLCAxNDEsIDQ4LCA0LCAyMjIsIDMyLCAKKyAgICA0OCwgNCwgMjAzLCAxMSwgNDgsIDQsIDIyOSwgMTAwLCA0OCwgNCwgMjIyLCAxNjgsIDQ4LCA0LCAyMzgsIDgxLCA0OCwgNCwgCisgICAgMjI0LCAxNTUsIDQ4LCA0LCAyMjIsIDEwMCwgNDgsIDQsIDIyMCwgMjQ4LCA0OCwgNCwgNjMsIDQ4LCA0LCAyNTAsIDIzMSwgCisgICAgNDgsIDQsIDIyMiwgMTk4LCA0OCwgNCwgMTUyLCA0OCwgNCwgMjM3LCAxMjYsIDQ4LCA0LCAyMDQsIDExMSwgNDgsIDQsIAorICAgIDIwNCwgOTcsIDQ4LCA0LCAxODUsIDQ4LCA0LCAyNDgsIDk4LCA0OCwgNCwgMjQ5LCAzMiwgNDgsIDQsIDIyNSwgNTQsIDQ4LCAKKyAgICA0LCAyMjgsIDI0NCwgNDgsIDQsIDIyOCwgMjQyLCA0OCwgNCwgMjI0LCAxOTEsIDQ4LCA0LCAyMzgsIDIwNywgNDgsIDQsIAorICAgIDI0MCwgMTA4LCA0OCwgNCwgMjA2LCA4NiwgNDgsIDQsIDIxMCwgMjIsIDQ4LCA0LCAyMDksIDEwOCwgNDgsIDQsIDI0NCwgMSwgCisgICAgNDgsIDQsIDI0MywgMjQ2LCA0OCwgNCwgMjI4LCAxMTMsIDQ4LCA0LCAyMTYsIDIyMCwgNDgsIDQsIDI0NCwgMjEyLCA0OCwgCisgICAgNCwgMjIzLCAyNSwgNDgsIDQsIDIxNSwgMzYsIDQ4LCA0LCAyMTMsIDkwLCA0OCwgNCwgMjAyLCAxMTYsIDQ4LCA0LCAyMDIsIAorICAgIDgwLCA0OCwgNCwgMjQ3LCA5MiwgNDgsIDQsIDIzMCwgMTgxLCA0OCwgNCwgMjIyLCA0OCwgNDgsIDQsIDE5OCwgNDgsIDQsIAorICAgIDE3MywgNDgsIDQsIDIzMCwgNCwgNDgsIDQsIDIyMiwgMTgyLCA0OCwgNCwgMjM5LCA4LCA0OCwgNCwgMTkyLCA0OCwgNCwgCisgICAgMjAxLCAyMDEsIDQ4LCA0LCAyMjEsIDExLCA0OCwgNCwgMjIwLCAxOCwgNDgsIDQsIDIyMCwgMTMsIDQ4LCA0LCAyMzYsIAorICAgIDExNywgNDgsIDQsIDIwMywgMjQ0LCA0OCwgNCwgMjAzLCAyNDAsIDQ4LCA0LCAyMTgsIDQ1LCA0OCwgNCwgMjQ4LCA4OSwgCisgICAgNDgsIDQsIDI0OCwgMTAsIDQ4LCA0LCAyMjUsIDM0LCA0OCwgNCwgMjI4LCAyMzQsIDQ4LCA0LCAyMjQsIDE4MCwgNDgsIDQsIAorICAgIDIzOCwgMTk1LCA0OCwgNCwgMjM5LCAxNzUsIDQ4LCA0LCAyMDUsIDE3NiwgNDgsIDQsIDIwOCwgMTQ4LCA0OCwgNCwgMjA5LCAKKyAgICA0MiwgNDgsIDQsIDI0MywgMjM2LCA0OCwgNCwgMjQzLCAyNDEsIDQ4LCA0LCAyMjcsIDE4LCA0OCwgNCwgMjE1LCAyMDgsIAorICAgIDQ4LCA0LCAyNDMsIDkwLCA0OCwgNCwgMjIyLCAyNTMsIDQ4LCA0LCAyMTEsIDI1MCwgNDgsIDQsIDIxMiwgMjM2LCA0OCwgNCwgCisgICAgMjAyLCAxNSwgNDgsIDQsIDIwMiwgNjEsIDQ4LCA0LCAyNDUsIDE4MCwgNDgsIDQsIDIzMCwgOTEsIDQ4LCA0LCAyMjIsIDIyLCAKKyAgICA0OCwgNCwgMjAyLCAyMzIsIDQ4LCA0LCAyMjksIDYsIDQ4LCA0LCAyMjIsIDE2NiwgNDgsIDQsIDIzOCwgMjgsIDQ4LCA0LCAKKyAgICAyMjQsIDM1LCA0OCwgNCwgMjIxLCAxODAsIDQ4LCA0LCAyMjAsIDIzMCwgNDgsIDQsIDY4LCA0OCwgNCwgMjA2LCAyNTUsIAorICAgIDQ4LCA0LCAyMzYsIDI2LCA0OCwgNCwgMjM2LCAxMywgNDgsIDQsIDIwMywgMjE3LCA0OCwgNCwgMjAzLCAyMTAsIDQ4LCA0LCAKKyAgICAyMTcsIDE5MSwgNDgsIDQsIDI0OCwgODgsIDQ4LCA0LCAyNDcsIDE5MywgNDgsIDQsIDIyNSwgMzMsIDQ4LCA0LCAyMjgsIAorICAgIDIzMiwgNDgsIDQsIDIyNCwgMTc5LCA0OCwgNCwgMjM4LCAxOTQsIDQ4LCA0LCAyMzksIDEwOCwgNDgsIDQsIDIwNCwgMTYzLCAKKyAgICA0OCwgNCwgMjA3LCAyMDMsIDQ4LCA0LCAyMDksIDIyLCA0OCwgNCwgMjQzLCAyMzQsIDQ4LCA0LCAyNDMsIDI0MCwgNDgsIDQsIAorICAgIDIyNiwgMjM5LCA0OCwgNCwgMjE1LCAxNDUsIDQ4LCA0LCAyNDIsIDQyLCA0OCwgNCwgMjIyLCAyNDgsIDQ4LCA0LCAyMTEsIAorICAgIDEwLCA0OCwgNCwgMjEyLCAxOTksIDQ4LCA0LCAyMDIsIDYsIDQ4LCA0LCAyMDIsIDU3LCA0OCwgNCwgMjQ1LCAxMTAsIDQ4LCAKKyAgICA0LCAyMzAsIDgyLCA0OCwgNCwgMjIyLCAxOCwgNDgsIDQsIDIwMiwgMjEzLCA0OCwgNCwgMjI4LCAyMDksIDQ4LCA0LCAyMjIsIAorICAgIDE2NSwgNDgsIDQsIDIzNywgMjMwLCA0OCwgNCwgMjIzLCAyNDYsIDQ4LCA0LCAyMjEsIDg0LCA0OCwgNCwgMjIwLCAyMjYsIAorICAgIDQ4LCA0LCA3OCwgNDgsIDQsIDIyMCwgMzEsIDQ4LCA0LCAyMjIsIDEyNCwgNDgsIDQsIDIzNiwgMTM2LCA0OCwgNCwgMjM2LCAKKyAgICAxMjAsIDQ4LCA0LCAyMDQsIDAsIDQ4LCA0LCAyMDMsIDI0NSwgNDgsIDQsIDIxOCwgNjksIDQ4LCA0LCAyNDgsIDkwLCA0OCwgCisgICAgNCwgMjQ4LCAyMywgNDgsIDQsIDIyNSwgMzUsIDQ4LCA0LCAyMjgsIDIzNSwgNDgsIDQsIDIyNCwgMTgyLCA0OCwgNCwgMjM4LCAKKyAgICAxOTcsIDQ4LCA0LCAyMzgsIDE5NiwgNDgsIDQsIDIzOSwgMTg2LCA0OCwgNCwgMjA1LCAxODksIDQ4LCA0LCAxMzUsIDQ4LCAKKyAgICA0LCAyMDksIDQ3LCA0OCwgNCwgMjQzLCAyMzcsIDQ4LCA0LCAyNDMsIDI0MiwgNDgsIDQsIDIyNywgNDksIDQ4LCA0LCAyMTUsIAorICAgIDIyNywgNDgsIDQsIDI0MywgMTEzLCA0OCwgNCwgMjIzLCAxLCA0OCwgNCwgMjEyLCAxMywgNDgsIDQsIDIxMiwgMjQyLCA0OCwgCisgICAgNCwgMjAyLCAxNywgNDgsIDQsIDIwMiwgNjMsIDQ4LCA0LCAyNDUsIDI1NCwgNDgsIDQsIDIzMCwgMTAxLCA0OCwgNCwgMjIyLCAKKyAgICAyMywgNDgsIDQsIDIwMiwgMjQ3LCA0OCwgNCwgMjI5LCAyNiwgNDgsIDQsIDIyMiwgMTY3LCA0OCwgNCwgMjM4LCAzOSwgNDgsIAorICAgIDQsIDIyNCwgODIsIDQ4LCA0LCAyMjEsIDE5MSwgNDgsIDQsIDIyMCwgMjMzLCA0OCwgNCwgNzQsIDQ4LCA0LCAyNDEsIDkyLCAKKyAgICA0OCwgNCwgMjIyLCAxODcsIDQ4LCA0LCAyMzcsIDY3LCA0OCwgNCwgMjM3LCAzMywgNDgsIDQsIDIwNCwgNjIsIDQ4LCA0LCAKKyAgICAyMDQsIDQ5LCA0OCwgNCwgMjE5LCAzNCwgNDgsIDQsIDI0OCwgOTQsIDQ4LCA0LCAyNDgsIDE2MiwgNDgsIDQsIDIyNSwgNDcsIAorICAgIDQ4LCA0LCAyMjgsIDI0MCwgNDgsIDQsIDIyOCwgMjM4LCA0OCwgNCwgMjI0LCAxODgsIDQ4LCA0LCAyMzgsIDIwNCwgNDgsIAorICAgIDQsIDIzOCwgMjAyLCA0OCwgNCwgMjQwLCA2MCwgNDgsIDQsIDIwNiwgNTUsIDQ4LCA0LCAyMDksIDE4NywgNDgsIDQsIDIwOSwgCisgICAgOTIsIDQ4LCA0LCAyNDMsIDI0OCwgNDgsIDQsIDI0MywgMjQ1LCA0OCwgNCwgMjI3LCAyMzQsIDQ4LCA0LCAyMTYsIDE1OCwgCisgICAgNDgsIDQsIDI0NCwgNzUsIDQ4LCA0LCAyMjMsIDE3LCA0OCwgNCwgMjE0LCAxNzcsIDQ4LCA0LCAyMTMsIDQzLCA0OCwgNCwgCisgICAgMjAyLCA5MiwgNDgsIDQsIDIwMiwgNzEsIDQ4LCA0LCAyNDYsIDIzOCwgNDgsIDQsIDIzMCwgMTYxLCA0OCwgNCwgMjIyLCAKKyAgICA0MSwgNDgsIDQsIDIwMywgNTIsIDQ4LCA0LCAyMjksIDIwMSwgNDgsIDQsIDIyMiwgMTc3LCA0OCwgNCwgMjIyLCAxNzMsIAorICAgIDQ4LCA0LCAyMzgsIDE5MCwgNDgsIDQsIDIzOCwgMTc3LCA0OCwgNCwgMjI1LCAyMCwgNDgsIDQsIDIyMiwgMjQwLCA0OCwgNCwgCisgICAgMjIxLCAxLCA0OCwgNCwgMjIyLCAyMDUsIDQ4LCA0LCAyMjcsIDE4OCwgNDgsIDI0NSwgMjMzLCA0OCwgMjM5LCAxMDIsIAorICAgIDIxMSwgNjEsIDQ4LCAyMTcsIDQ3LCA4MiwgNDgsIDQsIDIyMywgMCwgMjQwLCAxMDgsIDQ4LCA0LCAyMjMsIDAsIDE3MywgCisgICAgNDgsIDQsIDIyMywgMCwgMjExLCAyNTAsIDQ4LCAxNiwgMjQwLCA0OSwgNDgsIDE2LCAyMjksIDE5NiwgNDgsIDE2LCAyMDgsIAorICAgIDIxNSwgNDgsIDE2LCAyMjIsIDc1LCA0OCwgMTYsIDI0OCwgMjM3LCA0OCwgMTYsIDI0MCwgMTA3LCA0OCwgMTYsIDIxMCwgCisgICAgMTgsIDQ4LCAxNiwgMjQ0LCAxNjQsIDQ4LCAxNiwgMjQzLCA4OSwgNDgsIDE2LCAyMjgsIDE5MywgNDgsIDE2LCAyMDgsIAorICAgIDE1MiwgNDgsIDE2LCAyNDMsIDExMiwgNDgsIDE2LCAyMzAsIDkyLCA0OCwgMTcsIDIwMiwgODQsIDQ4LCAxNywgMTA1LCA0OCwgCisgICAgMTcsIDEwOCwgNDgsIDE3LCAxNDcsIDQ4LCAxNywgMTQ5LCA0OCwgMTcsIDE3MCwgNDgsIDE3LCAxOTUsIDQ4LCAxNywgMjEzLCAKKyAgICAxMTEsIDQ4LCAxNywgMTk5LCA0OCwgMTcsIDIyMiwgNjMsIDQ4LCA0LCAyMjMsIDAsIDE5MiwgNDgsIDQsIDIyMywgMCwgCisgICAgMjQzLCAxMTMsIDM2LCA2LCAxLCAyMDIsIDg4LCAzNiwgNSwgMSwgMjAyLCA4OCwgMzYsIDYsIDEsIDI0MSwgMjUwLCAzNiwgCisgICAgNSwgMSwgMjQxLCAyNTAsIDM2LCA2LCAxLCAyMTYsIDczLCAyNDEsIDI1MiwgMzYsIDUsIDEsIDIxNiwgNzMsIDI0MSwgMjUyLCAKKyAgICAzNiwgNiwgMSwgMjMwLCAyMzAsIDM2LCA1LCAxLCAyMzAsIDIzMCwgMzYsIDYsIDEsIDI0MywgMTI5LCAzNiwgNSwgMSwgCisgICAgMjQzLCAxMjksIDM2LCA2LCAxLCAyMjQsIDQzLCAyMDcsIDE0LCAzNiwgNSwgMSwgMjI0LCA0MywgMjA3LCAxNCwgMzYsIDYsIAorICAgIDEsIDI0NywgMjA0LCAyMjAsIDM2LCAzNiwgNSwgMSwgMjQ3LCAyMDQsIDIyMCwgMzYsIDM2LCA2LCAxLCAyMjIsIDIxNiwgCisgICAgMjAzLCAzNCwgMzYsIDUsIDEsIDIyMiwgMjE2LCAyMDMsIDM0LCAzNiwgNiwgMSwgMjAzLCAzMSwgMywgMjQ5LCAyNiwgMjAzLCAKKyAgICAzNCwgMzYsIDUsIDEsIDIwMywgMzEsIDMsIDI0OSwgMjYsIDIwMywgMzQsIDM2LCA2LCAxLCAyMzAsIDIyOCwgMjAzLCA2NiwgCisgICAgMzYsIDUsIDEsIDIzMCwgMjI4LCAyMDMsIDY2LCAzNiwgNiwgMSwgMjE2LCA3MywgMjAyLCAyMTMsIDM2LCA1LCAxLCAyMTYsIAorICAgIDczLCAyMDIsIDIxMywgMzYsIDYsIDEsIDIzMCwgMjI4LCA2MywgMzYsIDUsIDEsIDIzMCwgMjI4LCA2MywgMzYsIDYsIDEsIAorICAgIDI0NiwgMTYsIDIyNywgODYsIDIwMiwgMTgzLCAzNiwgNSwgMSwgMjQ2LCAxNiwgMjI3LCA4NiwgMjAyLCAxODMsIDM2LCA2LCAKKyAgICAxLCAyNDgsIDM1LCAyMDIsIDE4MywgMzYsIDUsIDEsIDI0OCwgMzUsIDIwMiwgMTgzLCAzNiwgNiwgMSwgMjMwLCAyMjgsIAorICAgIDI0NiwgMTYsIDIyNywgODYsIDIwMiwgMTgzLCAzNiwgNSwgMSwgMjMwLCAyMjgsIDI0NiwgMTYsIDIyNywgODYsIDIwMiwgCisgICAgMTgzLCAzNiwgNiwgMSwgMjAyLCAyNDksIDM2LCA1LCAxLCAyMDIsIDI0OSwgMzYsIDYsIDEsIDIxNiwgNzMsIDIwOCwgMTQsIAorICAgIDM2LCA1LCAxLCAyMTYsIDczLCAyMDgsIDE0LCAzNiwgNiwgMSwgMjEyLCA3LCAyNDQsIDc1LCAzNiwgNSwgMSwgMjEyLCA3LCAKKyAgICAyNDQsIDc1LCAzNiwgNiwgMSwgMjEyLCA3LCAyNDEsIDEyMiwgMzYsIDUsIDEsIDIxMiwgNywgMjQxLCAxMjIsIDM2LCA2LCAKKyAgICAxLCAyMTIsIDcsIDI0MSwgMTAzLCAzNiwgNSwgMSwgMjEyLCA3LCAyNDEsIDEwMywgMzYsIDYsIDEsIDIyNCwgNDcsIDc4LCAKKyAgICAzNiwgNSwgMSwgMjI0LCA0NywgNzgsIDM2LCA2LCAxLCAyNDgsIDYzLCA3OCwgMzYsIDUsIDEsIDI0OCwgNjMsIDc4LCAzNiwgCisgICAgNiwgMSwgNTIsIDIyNCwgNDcsIDc4LCAzNiwgNSwgMSwgNTIsIDIyNCwgNDcsIDc4LCAzNiwgMSwgMjIzLCAyMjcsIDc4LCAKKyAgICAzOSwgMzYsIDIwNCwgMTQ2LCAzOSwgMzYsIDIwOSwgMTUzLCAyMjQsIDExNCwgNTQsIDM5LCAzNiwgMjM2LCAxMiwgMjI0LCAKKyAgICAxMTQsIDU0LCAzOSwgMzYsIDIwOSwgMzcsIDIyNCwgMTE0LCA1NCwgMjEyLCA1NSwgMjUwLCA1OSwgMzksIDM2LCAxLCAyMDcsIAorICAgIDExLCAyMzEsIDExMCwgMzksIDM2LCAxLCA3NSwgMzksIDM2LCAxLCAyMDMsIDExLCAzOSwgMzYsIDEsIDY4LCAzOSwgMzYsIAorICAgIDEsIDIzNywgOTEsIDU0LCAzOSwgMzYsIDEsIDIwMywgMzAsIDM5LCAzNiwgMSwgMjEyLCA3LCA1NCwgMzksIDM2LCAxLCAKKyAgICAyMjAsIDM2LCAzOSwgMzYsIDIyOSwgMjEzLCAzOSwgMzYsIDIxOSwgNDEsIDM2LCAyMjksIDIxMywgMzYsIDIxOSwgNDEsIAorICAgIDM2LCA2LCAxLCAyNDIsIDksIDM2LCA1LCAxLCAyNDIsIDksIDM2LCA2LCAxLCAyNDEsIDI0MSwgMzYsIDUsIDEsIDI0MSwgCisgICAgMjQxLCAzNiwgNiwgMSwgMjAyLCA0NywgMzYsIDUsIDEsIDIwMiwgNDcsIDM2LCA2LCAxLCAyNDYsIDI1NCwgMzYsIDUsIDEsIAorICAgIDI0NiwgMjU0LCAzNiwgNiwgMSwgMjQxLCAyMzgsIDM2LCA1LCAxLCAyNDEsIDIzOCwgMzYsIDYsIDEsIDIwOSwgMTg4LCAzLCAKKyAgICAxMDEsIDExMywgMzYsIDUsIDEsIDIwOSwgMTg4LCAzLCAxMDEsIDExMywgMzYsIDYsIDEsIDIwNywgMTU4LCAzNiwgNSwgMSwgCisgICAgMjA3LCAxNTgsIDM2LCA2LCAxLCAyMDcsIDI0NSwgMzYsIDUsIDEsIDIwNywgMjQ1LCAzNiwgNiwgMSwgMjA3LCAyNTAsIDM2LCAKKyAgICA1LCAxLCAyMDcsIDI1MCwgMzYsIDYsIDEsIDIwOSwgMTkzLCAzNiwgNSwgMSwgMjA5LCAxOTMsIDM2LCA2LCAxLCAyMzUsIAorICAgIDI1MSwgMzYsIDUsIDEsIDIzNSwgMjUxLCAzNiwgNiwgMSwgMjEyLCAxNzcsIDM2LCA1LCAxLCAyMTIsIDE3NywgMzYsIDYsIAorICAgIDEsIDUyLCA3OCwgMzYsIDUsIDEsIDUyLCA3OCwgMzYsIDYsIDEsIDI0NSwgMTI4LCA3OCwgMzYsIDUsIDEsIDI0NSwgMTI4LCAKKyAgICA3OCwgNjUsIDEsIDM2LCAyMzcsIDkxLCA1NCwgNjUsIDEsIDM2LCAyMTIsIDcsIDU0LCAzOSwgMzYsIDEsIDI0MSwgMTU0LCAKKyAgICAzOSwgMzYsIDEsIDIzMCwgMjI4LCA3NCwgMjQsIDEsIDYzLCAyNCwgMSwgMTczLCAyNCwgMSwgNjgsIDI0LCAxLCAyMjgsIAorICAgIDIwOSwgMjQsIDEsIDI0MSwgMTYxLCAyNCwgMSwgMjE2LCAxMzUsIDI0LCAxLCAyMTAsIDEsIDI0LCAxLCA3OCwgMjQsIDEsIAorICAgIDIyMCwgMjQ4LCAyNCwgMSwgNzUsIDI0LCAxLCAyMjgsIDExMywgMjQsIDEsIDE4NSwgMjQsIDEsIDIxNiwgMywgMjQsIDEsIAorICAgIDIxNiwgNTAsIDI0LCAxLCAyMjcsIDIyNSwgMjQsIDEsIDIyNSwgNywgMjQsIDEsIDIxMCwgMTgsIDI0LCAxLCAyMjMsIDIzLCAKKyAgICAyNCwgMSwgMjIyLCA0NiwgMjQsIDEsIDIyNiwgMTg1LCAyNCwgMSwgMjEwLCAxNzksIDI0LCAxLCAyMjMsIDI0NiwgMjQsIDEsIAorICAgIDIxMywgNiwgMjQsIDEsIDIxMiwgMTYyLCAyNCwgMSwgMjEzLCAxNiwgMjQsIDEsIDIxMywgMTEzLCAyNCwgMSwgMjI4LCAKKyAgICAxMzcsIDI0LCAxLCAyMjksIDE3MCwgMjQsIDEsIDIyMSwgNTUsIDI0LCAxLCAyMjEsIDg0LCAyNCwgMSwgMjIyLCAxNywgMjQsIAorICAgIDEsIDIwMiwgMjI5LCAyNCwgMSwgMjEyLCAxOTksIDI0LCAxLCAyMDIsIDE4NywgMjQsIDEsIDE5OCwgMjQsIDEsIDIyMSwgCisgICAgMTE4LCAyNCwgMSwgMjI5LCAxNTYsIDI0LCAxLCAyMTgsIDIxMiwgMjQsIDEsIDIyMiwgMzksIDI0LCAxLCAyMjEsIDk5LCAKKyAgICAyNCwgMSwgMjE3LCAxODMsIDI0LCAxLCAyMDMsIDIxNCwgMjQsIDEsIDIxOSwgMjMsIDI0LCAxLCAyNDAsIDUzLCAyNCwgMSwgCisgICAgMjE1LCAxNDUsIDI0LCAxLCAyMjYsIDIzOSwgMjQsIDEsIDIyNCwgMTU1LCAyNCwgMSwgMjIyLCAxMDAsIDI0LCAxLCAyMTYsIAorICAgIDc1LCAyNCwgMSwgMjE2LCAyMDIsIDI0LCAxLCAyMjksIDE4MCwgMjQsIDEsIDIyMiwgMTMxLCAyNCwgMSwgMjIyLCAxODIsIAorICAgIDI0LCAxLCAyMjIsIDIwMywgMjQsIDEsIDIxMiwgMjQyLCAyNCwgMSwgMjE3LCAxODgsIDI0LCAxLCAyMzksIDEwOCwgMjQsIAorICAgIDEsIDIzOSwgMTc5LCAyNCwgMSwgMjA0LCAxMTEsIDI0LCAxLCAyMDEsIDIwMSwgMjQsIDEsIDIyNywgMTQ4LCAyNCwgMSwgCisgICAgMjE4LCAxNjcsIDI0LCAxLCAyMjcsIDEwLCAyNCwgMSwgMjI5LCAyNiwgMjQsIDEsIDIyNSwgNDQsIDI0LCAxLCAyMTYsIAorICAgIDEwNywgMjQsIDEsIDIyNCwgMjQwLCAyNCwgMSwgMTkyLCAyNCwgMSwgMjA5LCAyLCAyNCwgMSwgMjI5LCAxMDAsIDI0LCAxLCAKKyAgICAyMjQsIDgyLCAyNCwgMSwgMjI1LCA1MiwgMjQsIDEsIDIwOSwgMTMyLCAyNCwgMSwgMjI4LCAyNDQsIDI0LCAxLCAyMDksIAorICAgIDE1MiwgMjQsIDEsIDIyMSwgODYsIDI0LCAxLCAyMTQsIDI1MSwgMjQsIDEsIDI0MCwgMTA0LCAyNCwgMSwgMjI4LCAyNDYsIAorICAgIDI0LCAxLCAyMjksIDIxLCAyNCwgMzksIDEzMSwgMjI4LCAyNTUsIDI0LCAzOSwgMTMxLCAyMDcsIDE5NCwgMjQsIDIyMiwgCisgICAgNDUsIDI0LCAyMzksIDEwMiwgMjExLCA2MSwgMjQsIDI0NSwgMjQyLCAyNCwgMjQ1LCAyMzMsIDI0LCAyMTMsIDE0MywgMjQsIAorICAgIDIxNywgNDcsIDgyLCA2NSwgMSwgMjQ2LCAxMjgsIDE0MywgMjAzLCAxLCAyMTgsIDExOSwgNjUsIDEsIDI0NiwgMTI4LCAKKyAgICAxNDMsIDIwMywgNzcsIDIxOCwgMTE5LCA2NSwgMSwgMjQ2LCAxMjgsIDE0MywgMjAzLCAxLCAyMTMsIDY1LCA2NSwgMSwgCisgICAgMjQ2LCAxMjgsIDE0MywgMjAzLCA3NywgMjEzLCA2NSwgNjUsIDEsIDI0NiwgMTI4LCAxNDMsIDIwMywgMSwgMjE3LCA2NSwgCisgICAgNjUsIDEsIDI0NiwgMTI4LCAxNDMsIDIwMywgNzcsIDIxNywgNjUsIDY1LCAxLCAyNDYsIDEyOCwgMTQzLCAyMDMsIDEsIAorICAgIDIxNSwgMTQ1LCA2NSwgMSwgMjQ2LCAxMjgsIDE0MywgMjAzLCA3NywgMjE1LCAxNDUsIDY1LCAxLCAyNDAsIDE5OCwgMjQyLCAKKyAgICA4MywgMTQzLCAxNDIsIDY1LCAxLCAxMzgsIDI0MiwgODMsIDE0MywgMTQyLCA2NSwgMSwgMjI0LCAxNTAsIDI0MiwgODMsIAorICAgIDE0MywgMTQyLCA2NSwgMSwgMTI0LCAyNDIsIDgzLCAxNDMsIDE0MiwgNjUsIDEsIDI0MCwgMTk3LCAyNDIsIDgzLCAxNDMsIAorICAgIDE0MiwgNjUsIDEsIDI0MCwgMTk4LCAyNDIsIDgzLCAyMjcsIDIxNCwgMTQzLCAxNDIsIDY1LCAxLCAxMzgsIDI0MiwgODMsIAorICAgIDIyNywgMjE0LCAxNDMsIDE0MiwgNjUsIDEsIDIyNCwgMTUwLCAyNDIsIDgzLCAyMjcsIDIxNCwgMTQzLCAxNDIsIDY1LCAxLCAKKyAgICAxMjQsIDI0MiwgODMsIDIyNywgMjE0LCAxNDMsIDE0MiwgNjUsIDEsIDI0MCwgMTk3LCAyNDIsIDgzLCAyMjcsIDIxNCwgCisgICAgMTQzLCAxNDIsIDY1LCAxLCAyNDAsIDE5OCwgMjI3LCAyMTQsIDE0MywgMTQyLCA2NSwgMSwgMTM4LCAyMjcsIDIxNCwgMTQzLCAKKyAgICAxNDIsIDY1LCAxLCAyMjQsIDE1MCwgMjI3LCAyMTQsIDE0MywgMTQyLCA2NSwgMSwgMTI0LCAyMjcsIDIxNCwgMTQzLCAxNDIsIAorICAgIDY1LCAxLCAyNDAsIDE5NywgMjI3LCAyMTQsIDE0MywgMTQyLCA2NSwgMSwgNzAsIDgwLCAxNDIsIDY1LCAxLCA3MCwgMjEyLCAKKyAgICA1NywgNjUsIDEsIDcwLCAyMzYsIDEwNiwgMTQyLCA2NSwgMSwgMjI2LCAyNTEsIDUwLCAyNDUsIDE2NiwgMjUwLCAyMTcsIAorICAgIDY1LCAxLCAyMTYsIDE4OCwgMTEyLCA0NywgNjUsIDEsIDIxNiwgMTg4LCAxMjEsIDQ3LCA2NSwgMSwgMjE2LCAxODgsIDI0MCwgCisgICAgMjEyLCA4MiwgNjUsIDEsIDIxNiwgMTg4LCAyMzAsIDIzOSwgMjQwLCAyMTIsIDgyLCA2NSwgMSwgMTI0LCAyMzAsIDIzOSwgCisgICAgMjQwLCAyMTIsIDgyLCA2NSwgMSwgMjExLCA0MiwgMjUsIDEzOCwgMjA4LCAxNjEsIDY1LCAxLCAyMTEsIDQyLCAyNSwgMTI0LCAKKyAgICAyMDgsIDE2MSwgOCwgNiwgMSwgMjQxLCAxNDksIDI1MSwgMzAsIDgsIDUsIDEsIDI0MSwgMTQ5LCAyNTEsIDMwLCA4LCA2LCAKKyAgICAxLCAyNDEsIDE0OSwgMjUxLCA1OSwgOCwgNSwgMSwgMjQxLCAxNDksIDI1MSwgNTksIDgsIDYsIDEsIDIzNywgMzEsIDgsIDUsIAorICAgIDEsIDIzNywgMzEsIDgsIDYsIDEsIDIwNywgMTA3LCA4LCA1LCAxLCAyMDcsIDEwNywgOCwgNiwgMSwgMjA4LCA4OSwgOCwgNSwgCisgICAgMSwgMjA4LCA4OSwgOCwgNiwgMSwgMjQ1LCAxMDcsIDgsIDUsIDEsIDI0NSwgMTA3LCA4LCA2LCAxLCAyNDUsIDEwOCwgMywgCisgICAgMjQ1LCAyMzMsIDgsIDUsIDEsIDI0NSwgMTA4LCAzLCAyNDUsIDIzMywgOCwgMSwgNSwgNiwgMjQwLCAxNzQsIDgsIDEsIDUsIAorICAgIDYsIDE5NCwgOCwgNiwgMSwgMjUyLCAyNSwgOCwgNSwgMSwgMjUyLCAyNSwgOCwgNiwgMSwgMjUwLCAxNzgsIDgsIDUsIDEsIAorICAgIDI1MCwgMTc4LCA4LCA2LCAxLCAyNTAsIDM0LCA4LCA1LCAxLCAyNTAsIDM0LCA4LCA2LCAxLCAyNTAsIDE4LCA4LCA1LCAxLCAKKyAgICAyNTAsIDE4LCA4LCA2LCAxLCAyNTAsIDE5LCAzLCAyMzYsIDEwNiwgMTQyLCA4LCA1LCAxLCAyNTAsIDE5LCAzLCAyMzYsIAorICAgIDEwNiwgMTQyLCA4LCA2LCAxLCAyNTAsIDgsIDgsIDUsIDEsIDI1MCwgOCwgOCwgNiwgMSwgMjE2LCA3MywgMjQ3LCAxMjYsIAorICAgIDMsIDI0MywgODUsIDgsIDUsIDEsIDIxNiwgNzMsIDI0NywgMTI2LCAzLCAyNDMsIDg1LCA4LCA2LCAxLCAyMzAsIDU1LCAzLCAKKyAgICA5NSwgOCwgNSwgMSwgMjMwLCA1NSwgMywgOTUsIDgsIDYsIDEsIDIzMCwgNTUsIDMsIDI0MywgMjI4LCA5NSwgOCwgNSwgMSwgCisgICAgMjMwLCA1NSwgMywgMjQzLCAyMjgsIDk1LCA4LCA2LCAxLCAyMzAsIDU1LCAzLCAyMTEsIDMyLCAyNSwgMjQzLCAyMjgsIDk1LCAKKyAgICA4LCA1LCAxLCAyMzAsIDU1LCAzLCAyMTEsIDMyLCAyNSwgMjQzLCAyMjgsIDk1LCA4LCA2LCAxLCAyNDcsIDIwMywgMTU5LCAKKyAgICA4LCA1LCAxLCAyNDcsIDIwMywgMTU5LCA4LCA2LCAxLCAyMjgsIDEzMSwgMywgMTM4LCA5NSwgOCwgNSwgMSwgMjI4LCAxMzEsIAorICAgIDMsIDEzOCwgOTUsIDgsIDYsIDEsIDE1OCwgMywgMTYzLCAyMTEsIDMyLCAyMTksIDE5OSwgOCwgNSwgMSwgMTU4LCAzLCAKKyAgICAxNjMsIDIxMSwgMzIsIDIxOSwgMTk5LCA4LCA2LCAxLCAxNTgsIDMsIDIyNywgMTQsIDgsIDUsIDEsIDE1OCwgMywgMjI3LCAKKyAgICAxNCwgOCwgNiwgMSwgMjIwLCAxOCwgOCwgNSwgMSwgMjIwLCAxOCwgOCwgNiwgMSwgMjE5LCAxODUsIDMsIDIxMSwgMzIsIAorICAgIDIwOSwgMjUsIDI0NCwgMjAsIDgsIDUsIDEsIDIxOSwgMTg1LCAzLCAyMTEsIDMyLCAyMDksIDI1LCAyNDQsIDIwLCA4LCA2LCAKKyAgICAxLCAyMTksIDE4NSwgMywgMjM5LCAxOTksIDgsIDUsIDEsIDIxOSwgMTg1LCAzLCAyMzksIDE5OSwgOCwgNiwgMSwgMjE5LCAKKyAgICAxODUsIDMsIDIxMSwgMTcwLCAyMDksIDI0OCwgOCwgNSwgMSwgMjE5LCAxODUsIDMsIDIxMSwgMTcwLCAyMDksIDI0OCwgOCwgCisgICAgNiwgMSwgMjE3LCAxMzUsIDMsIDIxMSwgMzIsIDIwOSwgMjUsIDI0NCwgMjAsIDgsIDUsIDEsIDIxNywgMTM1LCAzLCAyMTEsIAorICAgIDMyLCAyMDksIDI1LCAyNDQsIDIwLCA4LCA2LCAxLCAyMTcsIDEzNSwgMywgMjQzLCAyMjgsIDk1LCA4LCA1LCAxLCAyMTcsIAorICAgIDEzNSwgMywgMjQzLCAyMjgsIDk1LCA4LCA2LCAxLCAyMTcsIDEsIDIxNSwgMTkyLCA4LCA1LCAxLCAyMTcsIDEsIDIxNSwgCisgICAgMTkyLCA4LCA2LCAxLCAyMTUsIDEzMiwgMjE1LCAxOTIsIDgsIDUsIDEsIDIxNSwgMTMyLCAyMTUsIDE5MiwgOCwgNiwgMSwgCisgICAgMjA2LCAxNjUsIDMsIDI0MywgMjI4LCA5NSwgOCwgNSwgMSwgMjA2LCAxNjUsIDMsIDI0MywgMjI4LCA5NSwgOCwgNiwgMSwgCisgICAgMjA0LCAxNTIsIDgsIDUsIDEsIDIwNCwgMTUyLCA4LCA2LCAxLCAyMDUsIDE5NywgMjAyLCAxNTksIDgsIDUsIDEsIDIwNSwgCisgICAgMTk3LCAyMDIsIDE1OSwgOCwgNiwgMSwgMjA5LCA0MSwgMywgOTUsIDgsIDUsIDEsIDIwOSwgNDEsIDMsIDk1LCA4LCA2LCAxLCAKKyAgICAyMDksIDQxLCAzLCAyMTEsIDMyLCAyMDksIDI1LCAyNDQsIDIwLCA4LCA1LCAxLCAyMDksIDQxLCAzLCAyMTEsIDMyLCAyMDksIAorICAgIDI1LCAyNDQsIDIwLCA4LCA2LCAxLCAyMDYsIDQ1LCA4LCA1LCAxLCAyMDYsIDQ1LCA4LCA2LCAxLCAyNDAsIDI1MCwgOCwgNSwgCisgICAgMSwgMjQwLCAyNTAsIDgsIDYsIDEsIDIzMCwgMjE1LCA4LCA1LCAxLCAyMzAsIDIxNSwgOCwgNiwgMSwgMjQ1LCAyMTgsIDgsIAorICAgIDUsIDEsIDI0NSwgMjE4LCA2NSwgMSwgMjA2LCAxOTMsIDgsIDUsIDEsIDI0MiwgMzIsIDgsIDUsIDEsIDIyNiwgMjIyLCA4LCAKKyAgICA1LCAxLCAyMjMsIDIyMCwgOCwgNSwgMSwgMjIxLCA0NywgOCwgNSwgMSwgMjE1LCAxMzEsIDgsIDEsIDUsIDYsIDIxNSwgCisgICAgMTMxLCA4LCA1LCAxLCAyMDcsIDE5MSwgOCwgNSwgMSwgMjA3LCA2LCA4LCA2LCAxLCAyMzEsIDQsIDI0NSwgNTEsIDgsIDUsIAorICAgIDEsIDIzMSwgNCwgMjQ1LCA1MSwgOCwgNiwgMSwgMjMxLCA0LCAyNDAsIDE3NCwgOCwgNSwgMSwgMjMxLCA0LCAyNDAsIDE3NCwgCisgICAgOCwgNiwgMSwgMjMxLCA0LCAyMzksIDc1LCA4LCA2LCAxLCAyMDcsIDE3NCwgMjMxLCA0LCAyMzksIDc1LCA4LCA1LCAxLCAKKyAgICAyMDcsIDE3NCwgMjMxLCA0LCAyMzksIDc1LCA4LCA2LCAxLCAyMDcsIDE3NCwgMTU5LCA4LCA1LCAxLCAyMDcsIDE3NCwgCisgICAgMTU5LCA4LCA2LCAxLCAyMzEsIDQsIDE0NiwgOCwgNSwgMSwgMjMxLCA0LCAxNDYsIDgsIDYsIDEsIDIzMSwgNCwgMTk0LCA4LCAKKyAgICA1LCAxLCAyMzEsIDQsIDE5NCwgOCwgNiwgMSwgMjMxLCA0LCAyMTAsIDY5LCA4LCA1LCAxLCAyMzEsIDQsIDIxMCwgNjksIAorICAgIDY1LCAxLCAxMjQsIDI0NiwgNTMsIDI1MSwgMTM4LCA2NSwgMSwgMjQ1LCAyNDIsIDY1LCAxLCAyMTIsIDIyOCwgMjQxLCAzNSwgCisgICAgNTQsIDgsIDYsIDEsIDIxNCwgMjU1LCA4LCA1LCAxLCAyMTQsIDI1NSwgOCwgNiwgMSwgMjA3LCAxNzQsIDIzNywgMTcxLCA4LCAKKyAgICA1LCAxLCAyMjgsIDEzMSwgMywgMjE2LCA3OSwgMjM2LCAxMTYsIDI1LCAyNDgsIDEyNCwgOCwgMSwgMjEyLCAxMTQsIDI0MywgCisgICAgODUsIDgsIDYsIDEsIDIyMywgMTY0LCAzLCAyNDQsIDIwLCA4LCA1LCAxLCAyMjMsIDE2NCwgMywgMjQ0LCAyMCwgOCwgNiwgCisgICAgMSwgMjQ3LCAxMjYsIDMsIDE0MiwgOCwgNSwgMSwgMjQ3LCAxMjYsIDMsIDE0MiwgOCwgNSwgMSwgMjQ3LCAxMjYsIDMsIAorICAgIDIxOSwgMTQyLCAxMTMsIDgsIDUsIDEsIDIzNywgMTcyLCAzLCAyMTksIDE0MiwgMTEzLCA4LCA2LCAxLCA2NiwgMywgMjM5LCAKKyAgICAxOTksIDgsIDUsIDEsIDY2LCAzLCAyMzksIDE5OSwgOCwgNiwgMSwgMjQwLCAxNzUsIDMsIDk1LCA4LCA1LCAxLCAyNDAsIAorICAgIDE3NSwgMywgOTUsIDgsIDYsIDEsIDIwNSwgMTgyLCAyNTEsIDEwOSwgOCwgNSwgMSwgMjA1LCAxODIsIDI1MSwgMTA5LCA4LCAKKyAgICA2LCAxLCAyMDUsIDE4MiwgMjIwLCA3MywgOCwgNSwgMSwgMjA1LCAxODIsIDIyMCwgNzMsIDgsIDYsIDEsIDIwNSwgMTgyLCAKKyAgICAyMDcsIDI0LCA4LCA1LCAxLCAyMDUsIDE4MiwgMjA3LCAyNCwgOCwgNiwgMSwgMjM5LCA3NiwgMywgMjIwLCA4OSwgOTUsIDgsIAorICAgIDUsIDEsIDIzOSwgNzYsIDMsIDIyMCwgODksIDk1LCA4LCA2LCAxLCAyMzAsIDU1LCAzLCAyMjAsIDg5LCA5NSwgOCwgNSwgMSwgCisgICAgMjMwLCA1NSwgMywgMjIwLCA4OSwgOTUsIDgsIDYsIDEsIDIyMywgMTY0LCAzLCAyMjAsIDg5LCA5NSwgOCwgNSwgMSwgMjIzLCAKKyAgICAxNjQsIDMsIDIyMCwgODksIDk1LCA4LCA2LCAxLCAyMTcsIDEsIDMsIDIyMCwgODksIDk1LCA4LCA1LCAxLCAyMTcsIDEsIDMsIAorICAgIDIyMCwgODksIDk1LCA4LCA2LCAxLCAyMTUsIDk0LCAzLCAyMjAsIDg5LCA5NSwgOCwgNSwgMSwgMjE1LCA5NCwgMywgMjIwLCAKKyAgICA4OSwgOTUsIDgsIDYsIDEsIDIzNywgMTcyLCAzLCAxMTMsIDgsIDYsIDEsIDIxNiwgNzMsIDE3MSwgNzQsIDgsIDYsIDEsIAorICAgIDEzMiwgMjM5LCA3NSwgOCwgNiwgMSwgMjI4LCAxMzEsIDMsIDI0OCwgMTI0LCA4LCA2LCAxLCAyMDcsIDE3NCwgMjMwLCA1NCwgCisgICAgOCwgNiwgMSwgMjA3LCAxNzQsIDIxMCwgNjksIDgsIDYsIDEsIDIzMCwgMTg1LCAzLCAyNDUsIDEyNiwgOCwgNiwgMSwgMjQ2LCAKKyAgICAxNDIsIDgsIDYsIDEsIDI0OCwgMTA2LCA4LCA1LCAxLCAyNDgsIDEwNiwgOCwgNiwgMSwgMjIwLCAzNiwgOCwgNSwgMSwgCisgICAgMjIwLCAzNiwgOCwgMjQxLCA0MCwgMSwgMjEyLCAxNTQsIDc1LCA2NSwgMSwgNiwgMjM3LCAxNzIsIDMsIDk1LCA2NSwgMSwgCisgICAgNSwgMzIsIDIyMCwgNzMsIDgsIDEsIDUsIDYsIDIwNywgMTc0LCAyMjYsIDE4NSwgOCwgMjQxLCA0MCwgMSwgMjE2LCA3MywgCisgICAgMjQwLCAxNzQsIDgsIDI0MSwgNDAsIDEsIDIxNiwgNzMsIDIxOSwgMTg0LCA4LCAyNDEsIDQwLCAxLCAyMzAsIDIzOSwgMjI2LCAKKyAgICAxODUsIDgsIDI0MSwgNDAsIDEsIDIzNSwgMjA2LCAyMjcsIDIwLCA4LCAyNDEsIDQwLCAxLCAyNTAsIDEyNiwgMjI2LCAxODUsIAorICAgIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCA2MywgMjEwLCAxNDksIDIyMywgOTQsIDEsIDc1LCAyMTAsIDE0OSwgMjIzLCA5NCwgMiwgCisgICAgMjQyLCAxMSwgMjEwLCAxNDksIDIyMywgOTQsIDEsIDY4LCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgNzQsIDIxMCwgMTQ5LCAKKyAgICAyMjMsIDk0LCAxLCA3OCwgMjEwLCAxNDksIDIyMywgOTQsIDIsIDIzNywgODUsIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAyMjksIAorICAgIDI2LCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjI5LCAxMTUsIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAyMzgsIDM5LCAyMTAsIAorICAgIDE0OSwgMjIzLCA5NCwgMSwgMjM4LCA5MSwgMjEwLCAxNDksIDIyMywgOTQsIDIsIDI1MCwgMTgwLCAyMTAsIDE0OSwgMjIzLCAKKyAgICA5NCwgMSwgMjQ1LCAyNTQsIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAyNDYsIDExNiwgMjEwLCAxNDksIDIyMywgOTQsIDEsIAorICAgIDIzMCwgMTAxLCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjMwLCAxNDMsIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAyMDcsIDIxOCwgCisgICAgMjEwLCAxNDksIDIyMywgOTQsIDEsIDIwNywgMjI0LCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjQ0LCA5MCwgMjEwLCAxNDksIAorICAgIDIyMywgOTQsIDEsIDI0NCwgOTksIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAxMzUsIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAKKyAgICAyMDksIDQ3LCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjQzLCAxMTMsIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAyNDMsIDIzNywgCisgICAgMjEwLCAxNDksIDIyMywgOTQsIDEsIDIyMSwgMTkxLCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjE4LCA2OSwgMjEwLCAxNDksIAorICAgIDIyMywgOTQsIDEsIDIxOCwgMTgwLCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjQ4LCAyMywgMjEwLCAxNDksIDIyMywgOTQsIAorICAgIDEsIDI0OCwgOTAsIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAyMjQsIDgyLCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjE1LCAKKyAgICAyMjcsIDIxMCwgMTQ5LCAyMjMsIDk0LCAxLCAyMjcsIDQ5LCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjE1LCAxNzEsIDIxMCwgCisgICAgMTQ5LCAyMjMsIDk0LCAxLCAyMTIsIDEzLCAyMTAsIDE0OSwgMjIzLCA5NCwgMSwgMjM2LCAxMzYsIDIxMCwgMTQ5LCAyMjMsIAorICAgIDk0LCAyMiwgMiwgNjMsIDIxMCwgMTQ5LCAyMjMsIDk0LCAyMiwgMiwgNzUsIDIxMCwgMTQ5LCAyMjMsIDk0LCAyMiwgMiwgCisgICAgNjgsIDIxMCwgMTQ5LCAyMjMsIDk0LCAyMiwgMiwgNzQsIDIxMCwgMTQ5LCAyMjMsIDk0LCAyMiwgMiwgMjIwLCAxOCwgMjEwLCAKKyAgICAxNDksIDIyMywgOTQsIDIxOCwgNjQsIDIyNSwgOTIsIDIxMCwgMTQ5LCAyMjMsIDk0LCAyMTgsIDY0LCAyMjUsIDkxLCAyMTAsIAorICAgIDE0OSwgMjIzLCA5NCwgMjE4LCA2NCwgMjI1LCA5MCwgMjEwLCAxNDksIDIyMywgOTQsIDIxOCwgNjQsIDIyNSwgODksIDE1MywgCisgICAgMjMxLCAzMywgMjM5LCAxMzgsIDExOCwgMjE3LCA1NSwgMTUzLCAyMzEsIDMzLCAyMzksIDEzOCwgMTE4LCAyMzcsIDEzNywgCisgICAgMTUzLCAyMzEsIDMzLCAyMzksIDEzOCwgMTI2LCAyMTcsIDUzLCAxNTMsIDIzMSwgMzMsIDIzOSwgMTM4LCAxMTgsIDIxMiwgCisgICAgODAsIDE1MywgMjMxLCAzMywgMjM5LCAxMzgsIDExOCwgMjQxLCAxMzgsIDE1MywgMjMxLCAzMywgMjM5LCAxMzgsIDEyNiwgCisgICAgMjEyLCA3OSwgMTUzLCAyMzEsIDMzLCAyMTcsIDU2LCA4MiwgMTUzLCAyMzEsIDMzLCAyMTgsIDk2LCA4MiwgMTUzLCAyMzEsIAorICAgIDMzLCAyMTUsIDEyMCwgODIsIDE1MywgMjMxLCAzMywgMjE3LCA1NywgODIsIDIxOCwgMjA0LCAxLCAxNzMsIDIxOCwgMjA0LCAKKyAgICAxLCAyMjksIDE0NCwgMjE4LCAyMDQsIDEsIDIzOSwgOCwgMjE4LCAyMDQsIDEsIDIyMiwgMjAzLCAyMTgsIDIwNCwgMSwgCisgICAgMjQ3LCA5MiwgMjE4LCAyMDQsIDEsIDI0NiwgMTk5LCAyMTgsIDIwNCwgMSwgMjMwLCAxODEsIDIxOCwgMjA0LCAxLCAyMjEsIAorICAgIDExLCAyMTgsIDIwNCwgMSwgMjEwLCAyMiwgMjE4LCAyMDQsIDEsIDIwOSwgMTA4LCAyMTgsIDIwNCwgMSwgMjQ0LCAyMTIsIAorICAgIDIxOCwgMjA0LCAxLCAyMDEsIDIwMSwgMjE4LCAyMDQsIDEsIDE4NSwgMjE4LCAyMDQsIDEsIDIxOCwgMjA4LCAyMTgsIDIwNCwgCisgICAgMSwgMjQ5LCAzMiwgMjE4LCAyMDQsIDEsIDE5MiwgMjE4LCAyMDQsIDEsIDIwOCwgMjAsIDIxOCwgMjA0LCAxLCAyMDgsIDEwLCAKKyAgICAyMTgsIDIwNCwgMSwgMjQxLCAyNTUsIDIxOCwgMjA0LCAxLCAyMDQsIDExMSwgMjE4LCAyMDQsIDEsIDIwMiwgODAsIDIxOCwgCisgICAgMjA0LCAxLCAyMDIsIDExNiwgMjE4LCAyMDQsIDEsIDUsIDYzLCAyMTgsIDIwNCwgMSwgMTk4LCAyMTgsIDIwNCwgMSwgMjE2LCAKKyAgICAyMjAsIDIxOCwgMjA0LCAxLCAyMjgsIDExMywgMjE4LCAyMDQsIDEsIDIxMywgOTAsIDIxOCwgMjA0LCAxLCAyMTUsIDM2LCAKKyAgICAyMTgsIDIwNCwgMSwgMTUyLCAyMTgsIDIwNCwgMSwgNjMsIDIxOCwgMjA0LCAxLCA3NSwgMjE4LCAyMDQsIDEsIDY4LCAyMTgsIAorICAgIDIwNCwgMSwgNzQsIDIxOCwgMjA0LCAxLCA3OCwgMjE4LCAyMDQsIDEsIDIxNywgMTI2LCAyMTgsIDIwNCwgMSwgMjAzLCAKKyAgICAxODIsIDIxOCwgMjA0LCAxLCAyNDAsIDEwOCwgMjE4LCAyMDQsIDEsIDIzOCwgMTU1LCAyMTgsIDIwNCwgMSwgMjQxLCAxNjEsIAorICAgIDIxOCwgMjA0LCAyMTAsIDI1NCwgMSwgMjA0LCAxMTEsIDIxOCwgMjA0LCAyMTAsIDI1NCwgMSwgMTk4LCAyMTgsIDIwNCwgMSwgCisgICAgMjA3LCAyNDEsIDIxOCwgMjA0LCAxLCAyMDcsIDIyOSwgMjE4LCAyMDQsIDEsIDI0NCwgMTIwLCAyMTgsIDIwNCwgMSwgMjIxLCAKKyAgICAyMjcsIDIxOCwgMjA0LCAxLCAyNTAsIDI1NSwgMTk4LCAyMTgsIDIwNCwgMSwgMjA1LCAxODUsIDIxMywgOTAsIDIxOCwgCisgICAgMjA0LCAxLCAyMDUsIDE4NiwgMTUyLCAyMTgsIDIwNCwgMSwgMjUwLCA2NiwgMjQwLCAxMDgsIDIxOCwgMjA0LCAyMTAsIAorICAgIDI1NCwgMSwgMjE2LCAyMjAsIDIxOCwgMjA0LCAyMTAsIDIwMSwgMSwgMjE2LCAyMjAsIDIxOCwgMjA0LCAxLCAyNDcsIDUyLCAKKyAgICAyMTgsIDIwNCwgMjEyLCAxMjAsIDIzNywgNjUsIDgyLCAyMTgsIDIwNCwgNTIsIDIzNywgNjUsIDgyLCAyMTgsIDIwNCwgCisgICAgMTMxLCAyMTMsIDgyLCAyMTgsIDIwNCwgMTMxLCA1MiwgMjEzLCA4MiwgMjE0LCAyMTUsIDIsIDI1MCwgMTgwLCAyMTQsIAorICAgIDIxNSwgMiwgMjA1LCAxOTksIDIxNCwgMjE1LCAxLCA2MywgMjE0LCAyMTUsIDEsIDI1MiwgMjUsIDIxNCwgMjE1LCAxLCA3NSwgCisgICAgMjE0LCAyMTUsIDEsIDIzMSwgODMsIDIxNCwgMjE1LCAxLCA2OCwgMjE0LCAyMTUsIDEsIDIwNiwgMTc4LCAyMTQsIDIxNSwgCisgICAgMSwgMTI1LCAxNDYsIDIxNCwgMjE1LCAxLCAxMjUsIDIxNSwgMTg2LCAyMTQsIDIxNSwgMSwgMTI1LCAxNTksIDIxNCwgMjE1LCAKKyAgICAxLCAxMjUsIDIyNywgNzgsIDIxNCwgMjE1LCAxLCA3NCwgMjE0LCAyMTUsIDEsIDI0MSwgMTYxLCAyMTQsIDIxNSwgMSwgCisgICAgMjUxLCA2NCwgMjE0LCAyMTUsIDEsIDc4LCAyMTQsIDIxNSwgMSwgMjIwLCAxOCwgMjE0LCAyMTUsIDEsIDI1MCwgMzQsIAorICAgIDIxNCwgMjE1LCAxLCAxNzMsIDIxNCwgMjE1LCAxLCAyMjksIDE0NCwgMjE0LCAyMTUsIDEsIDIzOSwgOCwgMjE0LCAyMTUsIAorICAgIDEsIDIzOCwgMTE5LCAyMTQsIDIxNSwgMSwgMjIyLCAyMDMsIDIxNCwgMjE1LCAxLCAyNDcsIDkyLCAyMTQsIDIxNSwgMSwgCisgICAgMjQ2LCAxOTksIDIxNCwgMjE1LCAxLCAyMzAsIDE4MSwgMjE0LCAyMTUsIDEsIDIzMCwgMTQ5LCAyMTQsIDIxNSwgMSwgMjIxLCAKKyAgICAxMSwgMjE0LCAyMTUsIDEsIDIwNywgMjQxLCAyMTQsIDIxNSwgMSwgMjA3LCAyMjksIDIxNCwgMjE1LCAxLCAyNDQsIDEyMCwgCisgICAgMjE0LCAyMTUsIDEsIDI0NCwgMTA0LCAyMTQsIDIxNSwgMSwgMjIxLCAyMjcsIDIxNCwgMjE1LCAxLCAyMTAsIDIyLCAyMTQsIAorICAgIDIxNSwgMSwgMjA5LCAxMDgsIDIxNCwgMjE1LCAxLCAyNDQsIDIxMiwgMjE0LCAyMTUsIDEsIDI0NCwgMSwgMjE0LCAyMTUsIAorICAgIDEsIDIwMSwgMjAxLCAyMTQsIDIxNSwgMSwgMTg1LCAyMTQsIDIxNSwgMSwgMjE4LCAyMDgsIDIxNCwgMjE1LCAxLCAyNDksIAorICAgIDMyLCAyMTQsIDIxNSwgMSwgMjQ4LCA5OCwgMjE0LCAyMTUsIDEsIDE5MiwgMjE0LCAyMTUsIDEsIDE5OCwgMjE0LCAyMTUsIAorICAgIDEsIDIxNiwgMjIwLCAyMTQsIDIxNSwgMSwgMjI4LCAxMTMsIDIxNCwgMjE1LCAxLCAyMDYsIDg2LCAyMTQsIDIxNSwgMSwgCisgICAgMjEzLCA5MCwgMjE0LCAyMTUsIDEsIDIxMSwgMTY0LCAyMTQsIDIxNSwgMSwgMjE1LCAzNiwgMjE0LCAyMTUsIDEsIDE1MiwgCisgICAgMjE0LCAyMTUsIDEsIDIyNywgNzcsIDIxNCwgMjE1LCAxMDksIDIsIDIzNywgMTU1LCAyMTQsIDIxNSwgMjIsIDIsIDI1MiwgCisgICAgMjUsIDIxNCwgMjE1LCAyMiwgMiwgNzUsIDIxNCwgMjE1LCAyMiwgMiwgMjMxLCA4MywgMjE0LCAyMTUsIDIyLCAyLCA2OCwgCisgICAgMjE0LCAyMTUsIDIyLCAyLCAyMDYsIDE3OCwgMjE0LCAyMTUsIDIyLCAyLCAxMjUsIDE0NiwgMjE0LCAyMTUsIDIyLCAyLCAKKyAgICAxMjUsIDIxNSwgMTg2LCAyMTQsIDIxNSwgMjIsIDIsIDEyNSwgMTU5LCAyMTQsIDIxNSwgMjIsIDIsIDEyNSwgMjI3LCA3OCwgCisgICAgMjE0LCAyMTUsIDIyLCAyLCA3NCwgMjE0LCAyMTUsIDIyLCAyLCAyNDEsIDE2MSwgMjE0LCAyMTUsIDIyLCAyLCAyNTEsIDY0LCAKKyAgICAyMTQsIDIxNSwgMjIsIDIsIDc4LCAyMTQsIDIxNSwgMjIsIDIsIDIyMCwgMTgsIDIxNCwgMjE1LCAyMiwgMiwgMjUwLCAzNCwgCisgICAgMjE0LCAyMTUsIDIsIDIwNSwgMjA0LCAyMTQsIDIxNSwgMjQ0LCAxNjYsIDIxNCwgMjE1LCA1MiwgMjQ0LCAxNjYsIDIxNCwgCisgICAgMjE1LCAxNywgMjAyLCA4NCwgMjE0LCAyMTUsIDE3LCAxMDUsIDIxNCwgMjE1LCAxNywgMTA4LCAyMTQsIDIxNSwgMTcsIAorICAgIDE0NywgMjE0LCAyMTUsIDE3LCAxNDksIDIxNCwgMjE1LCAxNywgMTcwLCAyMTQsIDIxNSwgMTcsIDE5NSwgMjE0LCAyMTUsIAorICAgIDE3LCAyMTMsIDExMSwgMjE0LCAyMTUsIDE3LCAxOTksIDIxNCwgMjE1LCAxNywgMjIyLCA2MywgMzksIDkyLCAxNywgMjAyLCAKKyAgICA4NCwgMzksIDkyLCAxNywgMTA1LCAzOSwgOTIsIDE3LCAxMDgsIDM5LCA5MiwgMTcsIDE0NywgMzksIDkyLCAxNywgMTQ5LCAKKyAgICAzOSwgOTIsIDE3LCAxNzAsIDM5LCA5MiwgMTcsIDE5NSwgMzksIDkyLCAxNywgMjEzLCAxMTEsIDM5LCA5MiwgMTcsIDE5OSwgCisgICAgMzksIDkyLCAxNywgMjIyLCA2MywgMzksIDkyLCAxLCA2MywgMzksIDkyLCAxLCA2OCwgMzksIDkyLCAxLCAxNzMsIDM5LCAKKyAgICA5MiwgMSwgMjAxLCAyMDEsIDM5LCA5MiwgMSwgMTg1LCAzOSwgOTIsIDEsIDIxNiwgMjIwLCAzOSwgOTIsIDEsIDIwNSwgCisgICAgMjMwLCAzOSwgOTIsIDIsIDI1MCwgMTcsIDkyLCAyLCAyMTEsIDIyNywgMjQ3LCA1MiwgOTIsIDIsIDI0NywgNTMsIDIwNSwgCisgICAgMjA0LCA5MiwgMiwgNTIsIDI0NywgNTMsIDIwNSwgMjA0LCA5MiwgMiwgMjQ3LCA1MywgMTA4LCA5MiwgMiwgMjQ3LCA1MywgCisgICAgMTQ3LCA5MiwgMiwgMjQ3LCA1MywgMjUwLCAxNywgOTIsIDIsIDIxNywgMTYyLCA5MiwgMjM4LCAyMjgsIDI0MCwgNywgOTIsIAorICAgIDI0NywgMzMsIDkyLCAyMzcsIDU4LCA5MiwgMiwgMjEyLCAxNTcsIDkyLCAyMzAsIDE3MywgMjIwLCAzOSwgMjI5LCAyMDcsIAorICAgIDIyNywgMTQ5LCAxNywgMjAyLCA4NCwgMjI5LCAyMDcsIDIyNywgMTQ5LCAxNywgMTA1LCAyMjksIDIwNywgMjI3LCAxNDksIAorICAgIDE3LCAxMDgsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMTcsIDE0NywgMjI5LCAyMDcsIDIyNywgMTQ5LCAxNywgMTQ5LCAyMjksIAorICAgIDIwNywgMjI3LCAxNDksIDE3LCAxNzAsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMTcsIDE5NSwgMjI5LCAyMDcsIDIyNywgMTQ5LCAKKyAgICAxNywgMjEzLCAxMTEsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMTcsIDE5OSwgMjI5LCAyMDcsIDIyNywgMTQ5LCAxNywgMjIyLCAKKyAgICA2MywgMjI5LCAyMDcsIDIyNywgMTQ5LCAxLCAxNzMsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMSwgMjI5LCAxNDQsIDIyOSwgCisgICAgMjA3LCAyMjcsIDE0OSwgMSwgMjM5LCA4LCAyMjksIDIwNywgMjI3LCAxNDksIDEsIDIyMiwgMjAzLCAyMjksIDIwNywgMjI3LCAKKyAgICAxNDksIDEsIDIxNSwgMzYsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMSwgMjEzLCA5MCwgMjI5LCAyMDcsIDIyNywgMTQ5LCAxLCAKKyAgICAyMDIsIDExNiwgMjI5LCAyMDcsIDIyNywgMTQ5LCAxLCAyMjEsIDExLCAyMjksIDIwNywgMjI3LCAxNDksIDEsIDIxMCwgMjIsIAorICAgIDIyOSwgMjA3LCAyMjcsIDE0OSwgMSwgMjM2LCAzMCwgMjI5LCAyMDcsIDIyNywgMTQ5LCAxLCAyMDEsIDIwMSwgMjI5LCAKKyAgICAyMDcsIDIyNywgMTQ5LCAxLCAxODUsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMSwgMjE4LCAyMDgsIDIyOSwgMjA3LCAyMjcsIAorICAgIDE0OSwgMSwgMTkyLCAyMjksIDIwNywgMjI3LCAxNDksIDEsIDI0NCwgMjEyLCAyMjksIDIwNywgMjI3LCAxNDksIDEsIDI0OSwgCisgICAgMzIsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMSwgMjE2LCAyMjAsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMSwgMTk4LCAyMjksIAorICAgIDIwNywgMjI3LCAxNDksIDEsIDIyOCwgMTEzLCAyMjksIDIwNywgMjI3LCAxNDksIDEsIDIwNCwgMTExLCAyMjksIDIwNywgCisgICAgMjI3LCAxNDksIDEsIDIwOSwgMTA4LCAyMjksIDIwNywgMjI3LCAxNDksIDEsIDE1MiwgMjI5LCAyMDcsIDIyNywgMTQ5LCAxLCAKKyAgICAyMDYsIDg2LCAyMjksIDIwNywgMjI3LCAxNDksIDEsIDI0NywgOTIsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMSwgNjMsIDIyOSwgCisgICAgMjA3LCAyMjcsIDE0OSwgMSwgMjIwLCA3MywgMjI5LCAyMDcsIDIyNywgMTQ5LCAxLCA3NSwgMjI5LCAyMDcsIDIyNywgMTQ5LCAKKyAgICAxLCAyMjAsIDE4LCAyMjksIDIwNywgMjI3LCAxNDksIDIyLCAyMDcsIDI0LCAyMjksIDIwNywgMjI3LCAxNDksIDIyLCA3NCwgCisgICAgMjI5LCAyMDcsIDIyNywgMTQ5LCAyMiwgNjgsIDIyOSwgMjA3LCAyMjcsIDE0OSwgMjIsIDI0MSwgMTYxLCAyMjksIDIwNywgCisgICAgMjI3LCAxNDksIDIyLCA3OCwgMjI5LCAyMDcsIDIyNywgMTQ5LCAxNDMsIDIxOCwgODQsIDIyOSwgMjA3LCAyMjcsIDE0OSwgCisgICAgMTQzLCAyNDcsIDY4LCAyMjksIDIwNywgMjI3LCAxNDksIDE0MywgMjQ3LCA2OSwgMjE4LCA4NCwgMjI5LCAyMDcsIDIyNywgCisgICAgMTQ5LCAyLCAyNDUsIDcwLCAyMjksIDIwNywgMjI3LCAxNDksIDIsIDIxMiwgMTcwLCAyMTYsIDExOSwgMSwgMTczLCAyMTYsIAorICAgIDExOSwgMSwgMjM5LCA4LCAyMTYsIDExOSwgMSwgMjIyLCAyMDMsIDIxNiwgMTE5LCAxLCAyMTAsIDIyLCAyMTYsIDExOSwgMSwgCisgICAgMjQ0LCAyMTIsIDIxNiwgMTE5LCAxLCAyMDEsIDIwMSwgMjE2LCAxMTksIDEsIDE4NSwgMjE2LCAxMTksIDEsIDI0OSwgMzIsIAorICAgIDIxNiwgMTE5LCAxLCAxOTIsIDIxNiwgMTE5LCAxLCAyNDcsIDkyLCAyMTYsIDExOSwgMSwgMjMwLCAxODEsIDIxNiwgMTE5LCAKKyAgICAxLCAyMjEsIDExLCAyMTYsIDExOSwgMSwgMjE1LCAzNiwgMjE2LCAxMTksIDEsIDIxNiwgMjIwLCAyMTYsIDExOSwgMSwgCisgICAgMjI4LCAxMTMsIDIxNiwgMTE5LCAxLCAxOTgsIDIxNiwgMTE5LCAxLCAyMDQsIDExMSwgMjE2LCAxMTksIDEsIDE1MiwgMjE2LCAKKyAgICAxMTksIDEsIDIyNSwgNTQsIDIxNiwgMTE5LCAxLCAyMjIsIDE4MiwgMjE2LCAxMTksIDEsIDIyMywgMjUsIDIxNiwgMTE5LCAKKyAgICAxLCAyMjAsIDIzNCwgMjE2LCAxMTksIDEsIDYzLCAyMTYsIDExOSwgMjIsIDIsIDc1LCAyMTYsIDExOSwgMjIsIDIsIDY4LCAKKyAgICAyMTYsIDExOSwgMjIsIDIsIDc0LCAyMTYsIDExOSwgMjIsIDIsIDI1MSwgNjQsIDIxNiwgMTE5LCAyMiwgMiwgNzgsIDIxNiwgCisgICAgMTE5LCAyMiwgMiwgMjUwLCAzNCwgMjE2LCAxMTksIDIyLCAyLCAyNDAsIDIzOCwgMjE2LCAxMTksIDIyLCAyLCAyNDEsIAorICAgIDE4OSwgMjE2LCAxMTksIDEwOSwgMiwgMjIyLCAyMDUsIDIxNiwgMTE5LCAxMDksIDIsIDIyMywgMTYzLCAyMTYsIDExOSwgCisgICAgMTA5LCAyLCAxNDYsIDIxNiwgMTE5LCAxMDksIDIsIDIzNywgMTcxLCAyMTYsIDExOSwgMjA1LCAyMDQsIDIxNiwgMTE5LCAKKyAgICAyMTQsIDE2OCwgODIsIDI4LCAxMjMsIDIwOCwgMjM2LCAyOCwgMTIzLCAyMDgsIDIzNSwgMjgsIDEyMywgMjA4LCAyMzMsIAorICAgIDI4LCAxMjMsIDIwOCwgMjM4LCAyOCwgMTIzLCAyMTYsIDQyLCAyOCwgMTIzLCAyMTYsIDI2LCAyOCwgMTIzLCAyMTYsIDIxLCAKKyAgICAyOCwgMTIzLCAyMTYsIDIzLCAyOCwgMTIzLCAyMTYsIDM5LCAyOCwgMTIzLCAyMTYsIDMyLCAyOCwgMTIzLCAyMTYsIDI1LCAKKyAgICAyOCwgMTIzLCAyMTYsIDQ0LCAyOCwgMTIzLCAyMTYsIDI3LCAyOCwgMTIzLCAyMTYsIDQ2LCAyOCwgMTIzLCAyMTYsIDQzLCAKKyAgICAyOCwgMTIzLCAyMjQsIDEzNywgMjgsIDEyMywgMjI0LCAxMjgsIDI4LCAxMjMsIDIyNCwgMTMxLCAyOCwgMTIzLCAyMTgsIAorICAgIDEzOCwgMjgsIDEyMywgMjE4LCAxNDksIDI4LCAxMjMsIDIxOCwgMTUwLCAyOCwgMTIzLCAyMTEsIDE0OCwgMjgsIDEyMywgCisgICAgMjMxLCA5NiwgMjgsIDEyMywgMjMxLCAxMDMsIDI4LCAxMjMsIDIxMSwgMTU5LCAyOCwgMTIzLCAyMTEsIDE0NiwgMjgsIAorICAgIDEyMywgMjE4LCAxODksIDI4LCAxMjMsIDIzNiwgMjQ2LCAyOCwgMTIzLCAyMTEsIDE0MywgMTkwLCAyLCAyMTksIDEwMiwgCisgICAgMTkwLCAyLCAyNDYsIDIzNSwgMTkwLCAyLCAyMjcsIDI0MiwgMTkwLCAyLCAyMDQsIDIwLCAxOTAsIDEsIDYzLCAxOTAsIDEsIAorICAgIDIzNSwgMjA2LCAyMjksIDIxMSwgMTkwLCAxLCA3NSwgMTkwLCAxLCAyMzEsIDgzLCAxOTAsIDEsIDY4LCAxOTAsIDEsIDIxOSwgCisgICAgMTY5LCAyNDYsIDIwNSwgMTkwLCAxLCAyMjIsIDIwNCwgMjI3LCAyMDEsIDE5MCwgMSwgMjIyLCAyMDQsIDIyNywgMjAyLCAKKyAgICAyMTYsIDE3MywgMTkwLCAxLCA3NCwgMTkwLCAxLCAyNTEsIDY0LCAxOTAsIDEsIDc4LCAxOTAsIDEsIDE3MywgMTkwLCAxLCAKKyAgICAyMzAsIDQ0LCAyMTQsIDIyNywgMTkwLCAxLCAyMzAsIDQ0LCAyMjMsIDIwNSwgMTkwLCAxLCAyMzksIDgsIDE5MCwgMSwgCisgICAgMjM5LCA5LCAyMjMsIDIwNSwgMTkwLCAxLCAyMjIsIDIwMywgMTkwLCAxLCAyNDcsIDkyLCAxOTAsIDEsIDI0NywgOTMsIAorICAgIDIyMywgMjA1LCAxOTAsIDEsIDIzMCwgMTgxLCAxOTAsIDEsIDIyMSwgMTIsIDIyMywgMjA1LCAxOTAsIDEsIDIzMCwgMTgyLCAKKyAgICAyMjUsIDE0NCwgMTkwLCAxLCAyMjEsIDExLCAxOTAsIDEsIDIwNywgMjQxLCAxOTAsIDEsIDIwNywgMjQyLCAyMjUsIDE0NCwgCisgICAgMTkwLCAxLCAyNDQsIDEyMCwgMTkwLCAxLCAyNDQsIDEyMSwgMjI1LCAxNDQsIDE5MCwgMSwgMjIzLCAxMTEsIDIyMywgMjA1LCAKKyAgICAxOTAsIDEsIDIxMCwgMjIsIDE5MCwgMSwgMjEwLCAyMywgMjIzLCAyMDUsIDE5MCwgMSwgMjQ0LCAyMTIsIDE5MCwgMSwgCisgICAgMjQ0LCAyMTMsIDIyNSwgMTQ0LCAxOTAsIDEsIDIwMSwgMjAxLCAxOTAsIDEsIDE4NSwgMTkwLCAxLCAyMTksIDE2OSwgMjIzLCAKKyAgICAyMDUsIDE5MCwgMSwgMjQ5LCAzMiwgMTkwLCAxLCAyNDksIDMzLCAyMjMsIDIwNSwgMTkwLCAxLCAxOTIsIDE5MCwgMSwgCisgICAgMTk4LCAxOTAsIDEsIDIxNiwgMjIwLCAxOTAsIDEsIDIxNiwgMjIxLCAyNTEsIDc0LCAxOTAsIDEsIDIyOCwgMTEzLCAxOTAsIAorICAgIDEsIDIwNCwgMTExLCAxOTAsIDEsIDIxNSwgMzcsIDIyMywgMjA1LCAxOTAsIDEsIDIxNSwgMzcsIDIyNSwgMTQ0LCAxOTAsIAorICAgIDEsIDIxNSwgMzYsIDE5MCwgMSwgMTUyLCAxOTAsIDIsIDI0NiwgMjM2LCAyMDksIDE1NSwgMTkwLCAyMiwgMiwgMjA5LCAKKyAgICAyMTQsIDE5MCwgMjIsIDIsIDIwOCwgMTY2LCAxOTAsIDIyLCAyLCAyMDMsIDIxMSwgMTkwLCAyMiwgMiwgMjAzLCAyMTIsIAorICAgIDIyNCwgMjUxLCAxOTAsIDIyLCAyLCAyMTAsIDIyNCwgMTkwLCAyMiwgMiwgMjEwLCAyMjUsIDIyNCwgMjM5LCAxOTAsIDIyLCAKKyAgICAyLCAyMDksIDIzNSwgMTkwLCAyMiwgMiwgMjQzLCAxNjMsIDIyMywgMjA0LCAxOTAsIDIyLCAyLCAyMTgsIDI0OSwgMTkwLCAKKyAgICAxMDksIDIsIDIyOSwgMTczLCAxOTAsIDEwOSwgMiwgMjE5LCA2LCAxOTAsIDEwOSwgMiwgMjQ3LCA3NywgMTkwLCAyMTksIAorICAgIDExNSwgMTkwLCA0OSwgMjE2LCA5MywgMTkwLCA1MCwgMjE2LCA5MywgMTkwLCAyMTksIDE1OCwgMjUwLCAyMjUsIDE5MCwgCisgICAgMjE5LCAxNTgsIDIyNSwgMTYyLCAxOTAsIDIxOSwgMTU4LCAyMjYsIDIyNiwgMTkwLCAyMTksIDE1OCwgMjA0LCAxNCwgMTkwLCAKKyAgICAyMTksIDE1OCwgMjE5LCAxMTYsIDE5MCwgMjE5LCAxNTgsIDIyNywgMTA2LCAxOTAsIDIxOSwgMTU4LCAyMjYsIDIyMCwgCisgICAgMTkwLCAyMTksIDE1OCwgMjUxLCAxMTYsIDE5MCwgMjE5LCAxNTgsIDI1MSwgMTE3LCAyNTEsIDExNiwgMTkwLCAyMTksIAorICAgIDE1OCwgMjE4LCAxMDcsIDE5MCwgMjA3LCAxNzQsIDIxOSwgMTU4LCAyMTgsIDEwNywgMTkwLCAyMTksIDExMSwgMTkwLCAxNywgCisgICAgMjAyLCA4NCwgMTkwLCAxNywgMTA1LCAxOTAsIDE3LCAxMDgsIDE5MCwgMTcsIDE0NywgMTkwLCAxNywgMTQ5LCAxOTAsIDE3LCAKKyAgICAxNzAsIDE5MCwgMTcsIDE5NSwgMTkwLCAxNywgMjEzLCAxMTEsIDE5MCwgMTcsIDE5OSwgMTkwLCAxNywgMjIyLCA2MywgCisgICAgMTkwLCAyMTksIDE1OCwgMjA4LCAyMDIsIDIwNywgMTg5LCAxOTAsIDIxOSwgMTU4LCAyMzAsIDIxMSwgNjksIDEsIDIxMywgCisgICAgNjcsIDIzOCwgMTE5LCA2OSwgMSwgMjEzLCA2NywgMjQ2LCAxOTksIDY5LCAxLCAyMTMsIDY3LCAyMzAsIDE0OSwgNjksIDEsIAorICAgIDIxMywgNjcsIDIyMSwgMjI3LCA2OSwgMSwgMjEzLCA2NywgMjQ4LCA5OCwgNjksIDIsIDIxMywgNjcsIDIxNCwgMjEzLCA2OSwgCisgICAgNjUsIDEsIDIxMywgNjcsIDIxNiwgMTM2LCA2OSwgMSwgNDUsIDIyOCwgODUsIDIyMSwgMTEsIDY5LCAxLCA0NSwgMjI4LCAKKyAgICA4NSwgMjQwLCAxMDgsIDY5LCAxLCA0NSwgMjI4LCA4NSwgMjM5LCA4LCA2OSwgMSwgNDUsIDIyOCwgODUsIDIzOCwgMTE5LCAKKyAgICA2OSwgMSwgNDUsIDIyOCwgODUsIDIzMCwgMTgxLCA2OSwgMSwgNDUsIDIyOCwgODUsIDIzMCwgMTQ5LCA2OSwgMSwgNDUsIAorICAgIDIyOCwgODUsIDI0NCwgMTIwLCA2OSwgMSwgNDUsIDIyOCwgODUsIDI0NCwgMTA0LCA2OSwgMSwgNDUsIDIyOCwgODUsIDIyMSwgCisgICAgMjI3LCA2OSwgNDUsIDIyOCwgODUsIDE3LCAyMDIsIDg0LCA2OSwgNDUsIDIyOCwgODUsIDE3LCAxMDUsIDY5LCA0NSwgMjI4LCAKKyAgICA4NSwgMTcsIDEwOCwgNjksIDQ1LCAyMjgsIDg1LCAxNywgMTQ3LCA2OSwgNDUsIDIyOCwgODUsIDE3LCAxNDksIDY5LCA0NSwgCisgICAgMjI4LCA4NSwgMTcsIDE3MCwgNjksIDQ1LCAyMjgsIDg1LCAxNywgMTk1LCA2OSwgNDUsIDIyOCwgODUsIDE3LCAyMTMsIAorICAgIDExMSwgNjksIDQ1LCAyMjgsIDg1LCAxNywgMTk5LCA2OSwgNDUsIDIyOCwgODUsIDE3LCAyMjIsIDYzLCA2OSwgMSwgNDUsIAorICAgIDIyOCwgODUsIDIyNywgNzcsIDY5LCAxLCA0NSwgMjI4LCA4NSwgMjQ0LCAyMTIsIDY5LCAxLCA0NSwgMjI4LCA4NSwgMjQ0LCAKKyAgICAxLCA2OSwgMSwgNDUsIDIyOCwgODUsIDI0OSwgMzIsIDY5LCAxLCA0NSwgMjI4LCA4NSwgMjQ4LCA5OCwgMjQ2LCAxOTIsIDEsIAorICAgIDYzLCAyNDYsIDE5MiwgMSwgNzUsIDI0NiwgMTkyLCAxLCA2OCwgMjQ2LCAxOTIsIDEsIDc0LCAyNDYsIDE5MiwgMSwgMjUxLCAKKyAgICA2NCwgMjQ2LCAxOTIsIDEsIDc4LCAyNDYsIDE5MiwgMSwgMTczLCAyNDYsIDE5MiwgMSwgMjI5LCAxNDQsIDI0NiwgMTkyLCAKKyAgICAxLCAyMzksIDgsIDI0NiwgMTkyLCAxLCAyMzgsIDExOSwgMjQ2LCAxOTIsIDEsIDIyMiwgMTEyLCAyNDYsIDE5MiwgMSwgCisgICAgMjIyLCAyMDMsIDI0NiwgMTkyLCAxLCAyNDYsIDE5OSwgMjQ2LCAxOTIsIDEsIDI0NiwgMTQ0LCAyNDYsIDE5MiwgMSwgMjMwLCAKKyAgICAxODEsIDI0NiwgMTkyLCAxLCAyMzAsIDE0OSwgMjQ2LCAxOTIsIDEsIDIyMiwgMTAyLCAyNDYsIDE5MiwgMSwgMjIyLCAxMDQsIAorICAgIDI0NiwgMTkyLCAxLCAyMjIsIDEwMywgMjQ2LCAxOTIsIDEsIDIxMCwgMjIsIDI0NiwgMTkyLCAxLCAyMDksIDEwOCwgMjQ2LCAKKyAgICAxOTIsIDEsIDI0NCwgMjEyLCAyNDYsIDE5MiwgMSwgMjQ0LCAxLCAyNDYsIDE5MiwgMSwgMjIxLCA1MywgMjQ2LCAxOTIsIDEsIAorICAgIDIwMSwgMjAxLCAyNDYsIDE5MiwgMSwgMjQ0LCAxMjAsIDI0NiwgMTkyLCAxLCAxODUsIDI0NiwgMTkyLCAxLCAyMTgsIDEyLCAKKyAgICAyNDYsIDE5MiwgMSwgMjE4LCAyMDgsIDI0NiwgMTkyLCAxLCAyNDksIDMyLCAyNDYsIDE5MiwgMSwgMjQ4LCA5OCwgMjQ2LCAKKyAgICAxOTIsIDEsIDIyMywgMjM4LCAyNDYsIDE5MiwgMSwgMTkyLCAyNDYsIDE5MiwgMSwgMjQ4LCAxOTgsIDI0NiwgMTkyLCAxLCAKKyAgICAxOTgsIDI0NiwgMTkyLCAxLCAyMTYsIDIyMCwgMjQ2LCAxOTIsIDEsIDIyOCwgMTEzLCAyNDYsIDE5MiwgMSwgMjA2LCA4NiwgCisgICAgMjQ2LCAxOTIsIDEsIDIxMSwgMTY0LCAyNDYsIDE5MiwgMSwgMjE1LCAzNiwgMjQ2LCAxOTIsIDEsIDE1MiwgMjQ2LCAxOTIsIAorICAgIDIyLCAyLCAyNTIsIDI1LCAyNDYsIDE5MiwgMjIsIDIsIDc1LCAyNDYsIDE5MiwgMjIsIDIsIDIzMSwgODMsIDI0NiwgMTkyLCAKKyAgICAyMiwgMiwgMjQxLCAxNDUsIDI0NiwgMTkyLCAyMiwgMiwgNjgsIDI0NiwgMTkyLCAyMiwgMiwgMjIwLCA3MywgMjQ2LCAxOTIsIAorICAgIDIyLCAyLCA3OCwgMjQ2LCAxOTIsIDIyLCAyLCAyNTEsIDY0LCAyNDYsIDE5MiwgMjIsIDIsIDI1MCwgMzQsIDI0NiwgMTkyLCAKKyAgICAyMiwgMiwgMjA3LCAyNCwgMjQ2LCAxOTIsIDEwOSwgMiwgMTk4LCAyNDYsIDE5MiwgMTA5LCAyLCAyMTYsIDIyMCwgMjQ2LCAKKyAgICAxOTIsIDEwOSwgMiwgMjI4LCAxMTMsIDI0NiwgMTkyLCAxMDksIDIsIDIwNCwgMTExLCAyNDYsIDE5MiwgMSwgNDYsIDIzMCwgCisgICAgNTQsIDI0NiwgMTkyLCAxLCA0NiwgMjM5LCA3NSwgMjQ2LCAxOTIsIDEsIDQ2LCAyMjIsIDIwNSwgMjQ2LCAxOTIsIDEwOSwgCisgICAgMiwgNDYsIDIyMiwgMjA1LCAyNDYsIDE5MiwgMSwgNDYsIDI0NiwgMjAwLCAyNDYsIDE5MiwgMSwgNDYsIDIxMCwgNjksIAorICAgIDI0NiwgMTkyLCAxLCA0NiwgMjIzLCAxNjMsIDI0NiwgMTkyLCAxLCA0NiwgMjE5LCAxODQsIDI0NiwgMTkyLCAxLCA0NiwgCisgICAgMjAzLCAxMjQsIDI0NiwgMTkyLCAxLCA0NiwgMTQ2LCAyNDYsIDE5MiwgMSwgNDYsIDE1OSwgMjQ2LCAxOTIsIDEsIDQ2LCAKKyAgICAyMTEsIDE2NywgMjQ2LCAxOTIsIDEwOSwgMiwgNDYsIDIyNiwgMTg1LCAyNDYsIDE5MiwgMTA5LCAyLCA0NiwgMjM3LCAxNzEsIAorICAgIDI0NiwgMTkyLCAxNywgMjAyLCA4NCwgMjQ2LCAxOTIsIDE3LCAxMDUsIDI0NiwgMTkyLCAxNywgMTA4LCAyNDYsIDE5MiwgCisgICAgMTcsIDE0NywgMjQ2LCAxOTIsIDE3LCAxNDksIDI0NiwgMTkyLCAxNywgMTcwLCAyNDYsIDE5MiwgMTcsIDE5NSwgMjQ2LCAKKyAgICAxOTIsIDE3LCAyMTMsIDExMSwgMjQ2LCAxOTIsIDE3LCAxOTksIDI0NiwgMTkyLCAxNywgMjIyLCA2MywgMjQ2LCAxOTIsIAorICAgIDIxNywgMTc5LCAyMTEsIDIwMSwgMjQ2LCAxOTIsIDIxNywgMTc5LCAyNDQsIDE2NiwgMjQ2LCAxOTIsIDIxNywgMTc5LCA1MiwgCisgICAgMjQ0LCAxNjYsIDI0NiwgMTkyLCAyMTcsIDE3OSwgMjA4LCA3MCwgMjQ0LCAxNjYsIDY5LCAxLCAyMjksIDEzNywgMjM5LCA4LCAKKyAgICA2OSwgMSwgMjI5LCAxMzcsIDI0NywgOTIsIDY5LCAxLCAyMjksIDEzNywgMjQ2LCAxOTksIDY5LCAxLCAyMjksIDEzNywgCisgICAgMjMwLCAxODEsIDY5LCAxLCAyMjksIDEzNywgMjMwLCAxNDksIDY5LCAxLCAyMjksIDEzNywgMjIxLCAxMSwgNjksIDEsIAorICAgIDIyOSwgMTM3LCAyMDcsIDI0MSwgNjksIDEsIDIyOSwgMTM3LCAyMDcsIDIyOSwgNjksIDEsIDIyOSwgMTM3LCAyNDQsIDEyMCwgCisgICAgNjksIDEsIDIyOSwgMTM3LCAyNDQsIDEwNCwgNjksIDEsIDIyOSwgMTM3LCAyNDQsIDEsIDY5LCAxLCAyMjksIDEzNywgMjAxLCAKKyAgICAyMDEsIDY5LCAxLCAyMjksIDEzNywgMjE1LCAzNiwgNjksIDEsIDIyOSwgMTM3LCAxNTIsIDY5LCAxLCAyMjksIDEzNywgCisgICAgMjM3LCAxMiwgNjksIDEsIDIyOSwgMTM3LCAyNDAsIDEwOCwgNjksIDY1LCAxLCAyMjksIDEzNywgMjE2LCAxMzYsIDY5LCAxLCAKKyAgICAyMjksIDEzNywgMjAzLCAxODIsIDY5LCAxLCAyMjksIDEzNywgMjAyLCAxMTYsIDY5LCAxLCAyMjksIDEzNywgMjE2LCAyMjAsIAorICAgIDY5LCAyMjcsIDM2LCAyMjksIDEzNywgMjIwLCA5NCwgNjksIDIyNywgMzYsIDIyOSwgMTM3LCAyMTcsIDc4LCA2OSwgMjI3LCAKKyAgICAzNiwgMjI5LCAxMzcsIDIzNiwgMTkxLCA2OSwgMTYsIDI1MSwgNTEsIDI0MCwgMjExLCA2OSwgMTYsIDI1MSwgNTEsIDEwNSwgCisgICAgNjksIDE2LCAyNTEsIDUxLCAxMDgsIDY5LCAxLCAyNTEsIDUxLCAyMTYsIDIyMCwgNjksIDIsIDIxOSwgOTgsIDIyOSwgMjM3LCAKKyAgICAyMDgsIDE2MSwgNjksIDIsIDQ1LCAyMjgsIDg1LCAyMDgsIDE1OSwgNjksIDIsIDQ1LCAyMjgsIDg1LCAyMDgsIDE1NiwgNjksIAorICAgIDEsIDIxMiwgMTc4LCAyMTksIDEzOSwgMjQ2LCAxOTksIDY5LCAxLCAyMTIsIDE3OCwgMjE5LCAxMzksIDIxMywgOTAsIDQ1LCAKKyAgICAyMDUsIDIyMCwgMSwgMTI0LCAyMjksIDI2LCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMjI5LCAyNiwgNDUsIDIwNSwgMjIwLCAKKyAgICAxLCAxMjQsIDIyOSwgMTE1LCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMjI5LCAxMTUsIDQ1LCAyMDUsIDIyMCwgMSwgMTI0LCAKKyAgICAyMjksIDEyNCwgNDUsIDIwNSwgMjIwLCAxLCAxMzgsIDIyOSwgMTI0LCA0NSwgMjA1LCAyMjAsIDEsIDEyNCwgMjM4LCAzOSwgCisgICAgNDUsIDIwNSwgMjIwLCAxLCAxMzgsIDIzOCwgMzksIDQ1LCAyMDUsIDIyMCwgMSwgMTI0LCAyMjIsIDEyOCwgNDUsIDIwNSwgCisgICAgMjIwLCAxLCAxMzgsIDIyMiwgMTI4LCA0NSwgMjA1LCAyMjAsIDEsIDEyNCwgMjQ1LCAyNTQsIDQ1LCAyMDUsIDIyMCwgMSwgCisgICAgMTM4LCAyNDUsIDI1NCwgNDUsIDIwNSwgMjIwLCAxLCAxMjQsIDI0NiwgMTE2LCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMjQ2LCAKKyAgICAxMTYsIDQ1LCAyMDUsIDIyMCwgMSwgMTI0LCAyMTIsIDEzLCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMjEyLCAxMywgNDUsIAorICAgIDIwNSwgMjIwLCAxLCAxMjQsIDIyMCwgMjMzLCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMjIwLCAyMzMsIDQ1LCAyMDUsIDIyMCwgCisgICAgMSwgMTI0LCAyNDMsIDExMywgNDUsIDIwNSwgMjIwLCAxLCAxMzgsIDI0MywgMTEzLCA0NSwgMjA1LCAyMjAsIDEsIDEyNCwgCisgICAgMTM1LCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMTM1LCA0NSwgMjA1LCAyMjAsIDEsIDEyNCwgMjA5LCA0NywgNDUsIDIwNSwgCisgICAgMjIwLCAxLCAxMzgsIDIwOSwgNDcsIDQ1LCAyMDUsIDIyMCwgMSwgMTI0LCAyMjEsIDE5MSwgNDUsIDIwNSwgMjIwLCAxLCAKKyAgICAxMzgsIDIyMSwgMTkxLCA0NSwgMjA1LCAyMjAsIDEsIDEyNCwgMjQ4LCAyMywgNDUsIDIwNSwgMjIwLCAxLCAxMzgsIDI0OCwgCisgICAgMjMsIDQ1LCAyMDUsIDIyMCwgMSwgMTI0LCAyMTgsIDY5LCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMjE4LCA2OSwgNDUsIAorICAgIDIwNSwgMjIwLCAxLCAxMjQsIDIxOCwgMTgwLCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMjE4LCAxODAsIDQ1LCAyMDUsIDIyMCwgCisgICAgMSwgMTI0LCAyMzksIDE4NiwgNDUsIDIwNSwgMjIwLCAxLCAxMzgsIDIzOSwgMTg2LCA0NSwgMjA1LCAyMjAsIDEsIDEyNCwgCisgICAgMjI0LCA4MiwgNDUsIDIwNSwgMjIwLCAxLCAxMzgsIDIyNCwgODIsIDQ1LCAyMDUsIDIyMCwgMSwgMTI0LCAyMDIsIDI0NywgCisgICAgNDUsIDIwNSwgMjIwLCAxLCAxMzgsIDIwMiwgMjQ3LCA0NSwgMjA1LCAyMjAsIDEsIDEyNCwgMjE1LCAyMjcsIDQ1LCAyMDUsIAorICAgIDIyMCwgMSwgMTM4LCAyMTUsIDIyNywgNDUsIDIwNSwgMjIwLCAxLCAxMjQsIDIyNywgNDksIDQ1LCAyMDUsIDIyMCwgMSwgCisgICAgMTM4LCAyMjcsIDQ5LCA0NSwgMjA1LCAyMjAsIDEsIDEyNCwgMjA1LCAxODksIDQ1LCAyMDUsIDIyMCwgMSwgMTM4LCAyMDUsIAorICAgIDE4OSwgNDUsIDIwNSwgMjIwLCAxLCAxMjQsIDIzNiwgMTM2LCA0NSwgMjA1LCAyMjAsIDEsIDEzOCwgMjM2LCAxMzYsIDQ1LCAKKyAgICAyMDUsIDIyMCwgMSwgMTI0LCA3OCwgNDUsIDIwNSwgMjIwLCAxLCAxMzgsIDc4LCA0NSwgMjA1LCAyMjAsIDIyNSwgMTQxLCAKKyAgICAyMzAsIDAsIDQ1LCAyMDUsIDIyMCwgMjIsIDI1MiwgMjUsIDQ1LCAyMDUsIDIyMCwgMjIsIDc1LCA0NSwgMjA1LCAyMjAsIAorICAgIDIyLCAyMDcsIDI0LCA0NSwgMjA1LCAyMjAsIDIyLCA2OCwgNDUsIDIwNSwgMjIwLCAyMiwgNzQsIDQ1LCAyMDUsIDIyMCwgCisgICAgMjIsIDc4LCA0NSwgMjA1LCAyMjAsIDIyNSwgMTQxLCAyMjksIDExOCwgNDUsIDIwNSwgMjIwLCAyMiwgMjM1LCAxNzEsIDQ1LCAKKyAgICAyMDUsIDIyMCwgMjIsIDIwNywgMjMsIDQ1LCAyMDUsIDIyMCwgMjIsIDIwNywgMzksIDQ1LCAyMDUsIDIyMCwgMjIsIDI1MCwgCisgICAgMzIsIDQ1LCAyMDUsIDIyMCwgMjIsIDI1MCwgOCwgNDUsIDIwNSwgMjIwLCAyMiwgMjUwLCAyMzEsIDQ1LCAyMDUsIDIyMCwgCisgICAgMjIsIDI1MCwgMjQ3LCA0NSwgMjA1LCAyMjAsIDE0MywgMjI1LCAxNDEsIDI0MSwgMTI5LCA0NSwgMjA1LCAyMjAsIDE0MywgCisgICAgMjI1LCAxNDEsIDIyMSwgNTIsIDQ1LCAyMDUsIDIyMCwgMTQzLCAyMjUsIDE0MSwgMjA5LCA0NywgNDUsIDIwNSwgMjIwLCAKKyAgICAxNDMsIDIyNSwgMTQxLCAyMTEsIDI1MiwgNDUsIDIwNSwgMjIwLCAxNiwgMjI5LCA5LCA0NSwgMjA1LCAyMjAsIDE2LCAyMjEsIAorICAgIDUyLCA0NSwgMjA1LCAyMjAsIDE2LCAyMTQsIDI1MywgNDUsIDIwNSwgMjIwLCAxNiwgMjM2LCAxMzcsIDIzNiwgMTMxLCA0NSwgCisgICAgMjA1LCAyMjAsIDE2LCAyMjksIDE5LCAyMjksIDE4LCAyMjUsIDIsIDIyNSwgNjEsIDEsIDc0LCAyMjUsIDIsIDIyNSwgNjEsIAorICAgIDEsIDc4LCAyMjUsIDIsIDIyNSwgNjEsIDEsIDI0NiwgMTk5LCAyMjUsIDIsIDIyNSwgNjEsIDEsIDIyMSwgMTEsIDIyNSwgMiwgCisgICAgMjI1LCA2MSwgMSwgMjA3LCAyNDEsIDIyNSwgMiwgMjI1LCA2MSwgMSwgMjA3LCAyMjksIDIyNSwgMiwgMjI1LCA2MSwgMSwgCisgICAgMjQ0LCAxMjAsIDIyNSwgMiwgMjI1LCA2MSwgMSwgMjQ0LCAxMDQsIDIyNSwgMiwgMjI1LCA2MSwgMSwgMjIxLCAyMjcsIAorICAgIDIyNSwgMiwgMjI1LCA2MSwgMSwgMjEzLCA5MCwgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMTEsIDE2NCwgMjI1LCAyLCAyMjUsIAorICAgIDYxLCAyMiwgMiwgMjMxLCA4MywgMjI1LCAyLCAyMjUsIDYxLCAyMiwgMiwgMjA2LCAxNzgsIDIyNSwgMiwgMjI1LCA2MSwgCisgICAgMjIsIDIsIDI1MSwgMjQ1LCAyMjUsIDIsIDIyNSwgNjEsIDIyLCAyLCAyNTAsIDM0LCAyMjUsIDIsIDIyNSwgNjEsIDIyLCAyLCAKKyAgICAyNTEsIDIzOCwgMjI1LCAyLCAyMjUsIDYxLCAyNDYsIDE1OSwgMjI1LCAyLCAyMjUsIDYxLCAyNTEsIDcwLCAyMjksIDEwNywgCisgICAgMjI1LCAyLCAyMjUsIDYxLCAyNTAsIDIwOSwgMjI1LCAyLCAyMjUsIDYxLCA0LCAyMTYsIDk4LCA4MiwgMjI1LCAyLCAyMjUsIAorICAgIDYxLCAyMDMsIDIzOCwgMjE2LCA5OCwgODIsIDIyNSwgMiwgMjI1LCA2MSwgMjIsIDIsIDIwNSwgMTk5LCAyMjUsIDIsIDIyNSwgCisgICAgNjEsIDIwNSwgMjA0LCAzMywgNCwgMjA3LCAyMjIsIDMzLCA0LCAyMDcsIDIyNSwgMzMsIDQsIDIwNywgMjI4LCAzMywgNCwgCisgICAgMjA3LCAyMjYsIDMzLCA0LCAyMDcsIDIyNywgMzMsIDQsIDIwNywgMjI0LCAzMywgNCwgMjQ0LCA5OCwgMzMsIDQsIDI0NCwgCisgICAgMTAwLCAzMywgNCwgMjQ0LCAxMDMsIDMzLCA0LCAyNDQsIDEwMSwgMzMsIDQsIDI0NCwgMTAyLCAzMywgNCwgMjQ0LCA5OSwgCisgICAgMzMsIDQsIDI0MSwgMjQyLCAzMywgNCwgMjQxLCAyNDYsIDMzLCA0LCAyNDEsIDI1NCwgMzMsIDQsIDI0MSwgMjUxLCAzMywgCisgICAgNCwgMjQxLCAyNTIsIDMzLCA0LCAyNDEsIDI0MywgMzMsIDQsIDI0NiwgMjUyLCAzMywgNCwgMjQ2LCAyNDYsIDMzLCA0LCAKKyAgICAyNDYsIDI0OCwgMzMsIDQsIDI0NiwgMjUxLCAzMywgNCwgMjQ2LCAyNDksIDMzLCA0LCAyNDYsIDI1MCwgMzMsIDQsIDI0NiwgCisgICAgMjQ3LCAzMywgNCwgMjQ4LCAxOTgsIDMzLCA0LCAyNDgsIDE3NywgMzMsIDQsIDI0OCwgMTg5LCAzMywgNCwgMjQ4LCAxOTcsIAorICAgIDMzLCA0LCAyNDgsIDE5MiwgMzMsIDQsIDI0OCwgMTkzLCAzMywgNCwgMjQ4LCAxODEsIDgsIDUsIDEsIDI0OCwgMjI1LCAKKyAgICAyNTEsIDIsIDgsIDUsIDEsIDM0LCAyMTYsIDcxLCA4LCA1LCAxLCAyNDgsIDM5LCA3NCwgOCwgNSwgMSwgMjQ4LCAyMjUsIAorICAgIDc0LCA4LCA1LCAxLCAxODgsIDMsIDIzOSwgMTk5LCA4LCA1LCAxLCAyMjcsIDE4NywgMjQwLCAxNzQsIDgsIDUsIDEsIDEzMiwgCisgICAgMjM5LCA3NiwgMywgMjQ1LCAxMjYsIDgsIDUsIDEsIDIyOCwgMTMxLCAzLCAyMzAsIDIzOSwgMjI3LCAyNDEsIDE5NCwgOCwgCisgICAgNSwgMSwgMjI4LCAxMzEsIDMsIDUyLCAxMDEsIDIwOCwgMjI3LCA4LCA1LCAxLCAyMjgsIDEzMSwgMywgMTAxLCAyMTUsIAorICAgIDI1MiwgOCwgNSwgMSwgMjI2LCAxODYsIDMsIDI0NSwgMTI2LCA4LCA1LCAxLCAyMjMsIDE2NCwgMywgMjQ1LCAxMjYsIDgsIAorICAgIDUsIDEsIDI0MSwgNzksIDMsIDI0NSwgMTI2LCA4LCA1LCAxLCAyNDgsIDM5LCA3OCwgOCwgNSwgMSwgMjQ4LCAzOSwgMTU4LCAKKyAgICAzLCA5NSwgOCwgNSwgMSwgMTcxLCAxNTgsIDMsIDk1LCA4LCA1LCAxLCAyMzAsIDIzOSwgMjIwLCA3MywgOCwgNSwgMSwgCisgICAgMjA3LCAxNzQsIDIyMCwgNzQsIDMsIDk1LCA4LCA1LCAxLCAyMDcsIDE3NCwgMjIwLCA3NCwgMywgMjM2LCAxMDYsIDk1LCA4LCAKKyAgICA1LCAxLCAyMDcsIDE3NCwgMTU4LCAyMjAsIDQsIDgsIDUsIDEsIDIwNywgMTc0LCAxNTgsIDIyMCwgNSwgMywgOTUsIDgsIDUsIAorICAgIDEsIDIxMSwgNjYsIDE0NiwgOCwgMSwgNSwgNiwgMjE3LCAxLCAzLCA1MCwgMjI3LCAyMTAsIDgsIDUsIDEsIDIxNywgMSwgCisgICAgMjA0LCAzLCAyMzcsIDEwMiwgOCwgNSwgMSwgNTIsIDE0NiwgOCwgNSwgMSwgMjE3LCAxLCAzLCAyNDUsIDEyNiwgOCwgNSwgCisgICAgMSwgNTIsIDIxNywgMSwgMywgMjQ1LCAxMjYsIDgsIDUsIDEsIDEzMiwgMTQ2LCA4LCA1LCAxLCAxMzIsIDIxNywgMSwgMywgCisgICAgMjE1LCAyNTIsIDgsIDUsIDEsIDI0OCwgMjE2LCAyNDEsIDcsIDgsIDUsIDEsIDEwNiwgMywgMjEyLCAyMjgsIDUwLCAyMjcsIAorICAgIDIxMCwgOCwgNSwgMSwgMTA2LCAyNDgsIDIzMSwgMywgMjEyLCAyMjgsIDUwLCAyMjcsIDIxMCwgOCwgNSwgMSwgMjA3LCAxNywgCisgICAgOCwgNSwgMSwgMjA3LCAxNzQsIDIwNywgMTcsIDgsIDUsIDEsIDEwNiwgMywgNDksIDExMywgOCwgNSwgMSwgMjQ2LCAxNDIsIAorICAgIDgsIDUsIDEsIDI0NiwgMTQzLCAzLCAxMjQsIDUwLCAyMTUsIDI1MiwgOCwgNSwgMSwgMjQ2LCAxNDMsIDMsIDEyNCwgNDksIAorICAgIDIxMywgMTI1LCA4LCA1LCAxLCAyMDMsIDE5NywgMywgMTI0LCA1MCwgMjE1LCAyNTIsIDgsIDUsIDEsIDIwMywgMTk3LCAzLCAKKyAgICAxNjMsIDQ5LCAyMjcsIDIxMCwgOCwgNSwgMSwgMjAzLCAxOTcsIDMsIDE2MywgNDksIDIyNywgMjExLCAyNSwgMTI0LCA1MCwgCisgICAgMjE1LCAyNTIsIDgsIDUsIDEsIDIwMywgMTk3LCAzLCAxNjMsIDQ5LCAyMjcsIDIxMSwgMywgMjEzLCAxMjUsIDgsIDUsIDEsIAorICAgIDIwMywgMTI1LCAzLCAyMTIsIDIyOCwgNTAsIDIyNywgMjEwLCA2NSwgMjQ3LCAyMTUsIDMsIDIzMCwgMjM5LCAyNDcsIDIxNCwgCisgICAgNjUsIDEsIDUsIDIzNywgMzEsIDY1LCAxLCA1LCAyMjgsIDEzMSwgMywgMjMwLCAyMzksIDIyNywgMjQxLCAxOTQsIDY1LCAxLCAKKyAgICA1LCAyMjgsIDEzMSwgMywgMTAxLCAyMDgsIDIyNywgNjUsIDEsIDUsIDEwNiwgMywgNDksIDExMywgOCwgNSwgMSwgMjE1LCAKKyAgICAxMSwgMjAzLCA2NiwgOCwgNSwgMSwgMjMwLCAyMjgsIDc0LCA4LCA1LCAxLCAxNzEsIDIyMCwgNzMsIDgsIDUsIDEsIDIwNiwgCisgICAgMjI4LCA4LCA1LCAxLCAyMzAsIDIzOSwgMjUxLCAyLCAzMCwgMSwgNSwgNiwgMjIwLCAzNiwgOTAsIDUsIDEsIDYzLCA5MCwgCisgICAgNSwgMSwgNzQsIDkwLCA1LCAxLCA3NSwgOTAsIDUsIDEsIDc4LCA5MCwgNSwgMSwgNjgsIDkwLCA1LCAxLCAyMDYsIDE2NCwgCisgICAgOTAsIDUsIDEsIDIzOSwgOCwgOTAsIDUsIDEsIDE3MywgOTAsIDUsIDEsIDIzOCwgMTkwLCA5MCwgNSwgMSwgMjM4LCA4MSwgCisgICAgOTAsIDUsIDEsIDIzOCwgMzksIDkwLCA1LCAxLCAyMzcsIDIzMCwgOTAsIDUsIDEsIDIzNywgMTkyLCA5MCwgNSwgMSwgMTUyLCAKKyAgICA5MCwgNSwgMSwgMjM3LCA2NywgOTAsIDUsIDEsIDIzNywgMywgOTAsIDUsIDEsIDIzNiwgMTM2LCA5MCwgNSwgMSwgMjM2LCAKKyAgICAyNiwgOTAsIDUsIDEsIDIzNSwgMjU1LCA5MCwgNSwgMSwgMjI4LCAxMTMsIDkwLCA1LCAxLCAyMjcsIDIzNCwgOTAsIDUsIDEsIAorICAgIDIyNywgMTQ4LCA5MCwgNSwgMSwgMjI3LCA0OSwgOTAsIDUsIDEsIDIyNiwgMjM5LCA5MCwgNSwgMSwgMjI2LCAyMDgsIDkwLCAKKyAgICA1LCAxLCAxOTIsIDkwLCA1LCAxLCAyMjUsIDIwLCA5MCwgNSwgMSwgMjI0LCAxNTUsIDkwLCA1LCAxLCAyMjQsIDgyLCA5MCwgCisgICAgNSwgMSwgMjIzLCAyNDYsIDkwLCA1LCAxLCAyMDEsIDIwMSwgOTAsIDUsIDEsIDIzNiwgMTYwLCA5MCwgNSwgMSwgMjIzLCAKKyAgICA5MywgOTAsIDUsIDEsIDIyMiwgMjQwLCA5MCwgNSwgMSwgMjIyLCAxMDAsIDkwLCA1LCAxLCAyMjEsIDE5MSwgOTAsIDUsIDEsIAorICAgIDIyMSwgODQsIDkwLCA1LCAxLCAyMjEsIDIyLCA5MCwgNSwgMSwgMjE3LCA2NCwgOTAsIDUsIDEsIDIxNywgNTAsIDkwLCA1LCAKKyAgICAxLCAyMTcsIDQzLCA5MCwgNSwgMSwgMjE3LCAzNCwgOTAsIDUsIDEsIDIxNywgMjMsIDkwLCA1LCAxLCAyMTcsIDIxLCA5MCwgCisgICAgNSwgMSwgMjE1LCAzNiwgOTAsIDUsIDEsIDE5NCwgOTAsIDUsIDEsIDIxNCwgMTc3LCA5MCwgNSwgMSwgMjEyLCAxNjIsIDkwLCAKKyAgICA1LCAxLCAyMTIsIDEzLCA5MCwgNSwgMSwgMjExLCAxMCwgOTAsIDUsIDEsIDIxMCwgMTc3LCA5MCwgNSwgMSwgMjQ0LCAyMTIsIAorICAgIDkwLCA1LCAxLCAyMTAsIDIyLCA5MCwgNSwgMSwgMjQ0LCA3NSwgOTAsIDUsIDEsIDIwOSwgMTg3LCA5MCwgNSwgMSwgMjQzLCAKKyAgICAyMzMsIDkwLCA1LCAxLCAyMDksIDIsIDkwLCA1LCAxLCAyNDMsIDExMywgOTAsIDUsIDEsIDI0MiwgNDIsIDkwLCA1LCAxLCAKKyAgICAyNDIsIDEzLCA5MCwgNSwgMSwgMjQzLCAxMjQsIDkwLCA1LCAxLCAyMDgsIDE5MCwgOTAsIDUsIDEsIDIwOCwgMTg5LCA5MCwgCisgICAgNSwgMSwgMjA4LCAxNzgsIDkwLCA1LCAxLCAyMDgsIDE3NywgOTAsIDUsIDEsIDIwOCwgMTc2LCA5MCwgNSwgMSwgMjA4LCAKKyAgICAxNzUsIDkwLCA1LCAxLCAyMDgsIDIwLCA5MCwgNSwgMSwgMjA4LCAxNCwgOTAsIDUsIDEsIDIwNywgMjU1LCA5MCwgNSwgMSwgCisgICAgMjA3LCAyNTMsIDkwLCA1LCAxLCAyMDcsIDI0OSwgOTAsIDUsIDEsIDIwNywgMjQ4LCA5MCwgNSwgMSwgMjA0LCAxMTEsIDkwLCAKKyAgICA1LCAxLCAyMDQsIDYyLCA5MCwgNSwgMSwgMjA0LCAzMCwgOTAsIDUsIDEsIDIwNCwgMCwgOTAsIDUsIDEsIDIwMywgMjE3LCAKKyAgICA5MCwgNSwgMSwgMjAzLCAyMDQsIDkwLCA1LCAxLCAxOTgsIDIyNSwgMiwgMjI1LCA2MSwgMSwgMjI5LCAxNiwgMjI1LCAyLCAKKyAgICAyMjUsIDYxLCAxLCAyMTQsIDI1MywgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMjgsIDg2LCAyMjUsIDIsIDIyNSwgNjEsIDEsIAorICAgIDIyNCwgOTMsIDIyNSwgMiwgMjI1LCA2MSwgMSwgMTg1LCAyMjUsIDIsIDIyNSwgNjEsIDEsIDIwMSwgMjAxLCAyMjUsIDIsIAorICAgIDIyNSwgNjEsIDEsIDI0NiwgMTM0LCAyMjUsIDIsIDIyNSwgNjEsIDEsIDIwOCwgMjI5LCAyMjUsIDIsIDIyNSwgNjEsIDEsIAorICAgIDIyOSwgMTEwLCAyMjUsIDIsIDIyNSwgNjEsIDEsIDIyMiwgMTE4LCAyMjUsIDIsIDIyNSwgNjEsIDEsIDIwOSwgMzksIDIyNSwgCisgICAgMiwgMjI1LCA2MSwgMSwgMjA0LCAxMDUsIDIyNSwgMiwgMjI1LCA2MSwgMSwgMjAzLCA3NiwgMjI1LCAyLCAyMjUsIDYxLCAxLCAKKyAgICAyMzYsIDE4LCAyMjUsIDIsIDIyNSwgNjEsIDEsIDIwNiwgMjU1LCAyMjUsIDIsIDIyNSwgNjEsIDEsIDc1LCAyMjUsIDIsIAorICAgIDIyNSwgNjEsIDEsIDIxOCwgMjAyLCAyMjUsIDIsIDIyNSwgNjEsIDEsIDI1MCwgNDUsIDIyNSwgMiwgMjI1LCA2MSwgMSwgCisgICAgMjM4LCAzMiwgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMzAsIDE0NywgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMTYsIDE5NywgMjI1LCAKKyAgICAyLCAyMjUsIDYxLCAxLCAyNDksIDMyLCAyMjUsIDIsIDIyNSwgNjEsIDEsIDIzMCwgMTMzLCAyMjUsIDIsIDIyNSwgNjEsIDEsIAorICAgIDI0MywgMTkwLCAyMjUsIDIsIDIyNSwgNjEsIDEsIDIzOCwgODgsIDIyNSwgMiwgMjI1LCA2MSwgMSwgMjQzLCAyMzUsIDIyNSwgCisgICAgMiwgMjI1LCA2MSwgMSwgMjQ4LCA5NiwgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMjksIDE3LCAyMjcsIDE5LCAyMjUsIDIsIAorICAgIDIyNSwgNjEsIDEsIDIyOCwgODcsIDIyNywgMTksIDIyNSwgMiwgMjI1LCA2MSwgMSwgMjI0LCA5NCwgMjI3LCAxOSwgMjI1LCAKKyAgICAyLCAyMjUsIDYxLCAxLCAyMTksIDE2OSwgMjI3LCAxOSwgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMjMsIDExMSwgMjI3LCAxOSwgCisgICAgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMDgsIDIzMCwgMjI3LCAxOSwgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMjIsIDExOSwgMjI3LCAKKyAgICAxOSwgMjI1LCAyLCAyMjUsIDYxLCAxLCAyMzUsIDIwNiwgMjI3LCAxOSwgMjI1LCAyLCAyMjUsIDYxLCAyMiwgMiwgMjIwLCAKKyAgICAzMCwgMjI1LCAyLCAyMjUsIDYxLCAyMiwgMiwgMjMxLCA0NywgMjI1LCAyLCAyMjUsIDYxLCAyMiwgMiwgMjUwLCAyMzAsIAorICAgIDIyNSwgMiwgMjI1LCA2MSwgMjIsIDIsIDIwMywgNDEsIDIyNSwgMiwgMjI1LCA2MSwgMjIsIDIsIDIxMSwgMjQyLCAyMjUsIAorICAgIDIsIDIyNSwgNjEsIDIyLCAyLCAyMDYsIDI1MiwgMjI1LCAyLCAyMjUsIDYxLCAyMiwgMiwgMjQ2LCAxNTcsIDIyNSwgMiwgCisgICAgMjI1LCA2MSwgMjIsIDIsIDIyMSwgMzcsIDIyNSwgMiwgMjI1LCA2MSwgMjQ2LCAxNTgsIDIyNSwgMiwgMjI1LCA2MSwgMjI2LCAKKyAgICAyMjMsIDIzMCwgMTkwLCAyMjUsIDIsIDIyNSwgNjEsIDI1MCwgMTQ5LCAyMzAsIDE5MCwgMjI1LCAyLCAyMjUsIDYxLCAxNywgCisgICAgMjAyLCA4NCwgMjI1LCAyLCAyMjUsIDYxLCAxNywgMTA1LCAyMjUsIDIsIDIyNSwgNjEsIDE3LCAxMDgsIDIyNSwgMiwgMjI1LCAKKyAgICA2MSwgMTcsIDE0NywgMjI1LCAyLCAyMjUsIDYxLCAxNywgMTQ5LCAyMjUsIDIsIDIyNSwgNjEsIDE3LCAxNzAsIDIyNSwgMiwgCisgICAgMjI1LCA2MSwgMTcsIDE5NSwgMjI1LCAyLCAyMjUsIDYxLCAxNywgMjEzLCAxMTEsIDIyNSwgMiwgMjI1LCA2MSwgMTcsIAorICAgIDE5OSwgMjI1LCAyLCAyMjUsIDYxLCAxNywgMjIyLCA2MywgMjgsIDE3NiwgMjIwLCAxNzQsIDI4LCAxNzYsIDIyMCwgMTc5LCAKKyAgICAyOCwgMTc2LCAyMDIsIDI0NiwgMjgsIDE3NiwgMjAyLCAyNDUsIDI4LCAxNzYsIDIwMiwgMjQ0LCAyOCwgMTc2LCAyMDcsIAorICAgIDg5LCAyOCwgMTc2LCAyMDcsIDkzLCAyOCwgMTc2LCAyMDIsIDIxMSwgMjgsIDE3NiwgMjAyLCAyMDcsIDI4LCAxNzYsIDI0MCwgCisgICAgMjM3LCAyOCwgMTc2LCAyNDAsIDIzNSwgMjgsIDE3NiwgMjQwLCAyMzYsIDI4LCAxNzYsIDI0MCwgMjMzLCAyOCwgMTc2LCAKKyAgICAyMzUsIDE5NiwgMjgsIDE3NiwgMjM1LCAxOTUsIDI4LCAxNzYsIDIzNSwgMTkzLCAyOCwgMTc2LCAyMzUsIDE5NCwgMjgsIAorICAgIDE3NiwgMjM1LCAxOTksIDI4LCAxNzYsIDIzNSwgMTkyLCAyOCwgMTc2LCAyMzUsIDE5MSwgMjgsIDE3NiwgMjM1LCAyMDEsIAorICAgIDI4LCAxNzYsIDI1MCwgMTM2LCAyOCwgMTc2LCAyNTAsIDEzNSwgMjgsIDEwNywgMjIyLCA4NiwgMjgsIDEwNywgMjIyLCA5MiwgCisgICAgMjgsIDEwNywgMjExLCAxNDUsIDI4LCAxMDcsIDIxMSwgMTQ0LCAyOCwgMTA3LCAyMDgsIDIzNSwgMjgsIDEwNywgMjA4LCAKKyAgICAyMzMsIDI4LCAxMDcsIDIwOCwgMjMyLCAyOCwgMTA3LCAyMDgsIDIzOCwgMjgsIDEwNywgMjA4LCAyMzksIDI4LCAxMDcsIAorICAgIDIwOCwgMjMxLCAyOCwgMTA3LCAyMTYsIDI2LCAyOCwgMTA3LCAyMTYsIDQxLCAyOCwgMTA3LCAyMTEsIDE1MSwgMjgsIDEwNywgCisgICAgMjE2LCAzOCwgMjgsIDEwNywgMjE2LCAyOCwgMjgsIDEwNywgMjE2LCAzMCwgMjgsIDEwNywgMjE2LCAxNywgMjgsIDEwNywgCisgICAgMjE2LCAxOCwgMjgsIDEwNywgMjI5LCAyNDMsIDI4LCAxMDcsIDIyNCwgMTM2LCAyOCwgMTA3LCAyMjQsIDEzMCwgMjgsIAorICAgIDEwNywgMjExLCAxNTUsIDI4LCAxMDcsIDIyNCwgMTMzLCAyOCwgMTA3LCAyMjQsIDEzOSwgMjgsIDEwNywgMjE4LCAxMzQsIAorICAgIDI4LCAxMDcsIDIxOCwgMTQzLCAyOCwgMTA3LCAyMTgsIDE0NywgMjgsIDEwNywgMjExLCAxNTMsIDI4LCAxMDcsIDIxOCwgCisgICAgMTM3LCAyOCwgMTA3LCAyMTgsIDE1MSwgMjgsIDEwNywgMjE4LCAxNTIsIDI4LCAxMDcsIDIxMiwgMTAzLCAyOCwgMTA3LCAKKyAgICAyMTIsIDEwNiwgMjgsIDEwNywgMjExLCAxNDksIDI4LCAxMDcsIDIxMSwgMTQ3LCAyOCwgMTA3LCAyMTIsIDEwMSwgMjgsIAorICAgIDEwNywgMjEyLCAxMDksIDI4LCAxMDcsIDIxMiwgMTEwLCAyOCwgMTA3LCAyMTIsIDk1LCAyOCwgMTA3LCAyMTIsIDEwOCwgCisgICAgMjgsIDEwNywgMjE5LCAxMDUsIDI4LCAxMDcsIDIxOSwgMTA2LCAyOCwgMTA3LCAyMDMsIDI3LCAyOCwgMTA3LCAyMDMsIDI4LCAKKyAgICAyOCwgMTA3LCAyNDYsIDcyLCAyOCwgMTA3LCAyNDYsIDcxLCAyOCwgMTA3LCAyMTEsIDE2MCwgMjgsIDEwNywgMjE4LCAxODcsIAorICAgIDI4LCAxMDcsIDIxOCwgMTg2LCAxMiwgMTUsIDIzMywgNzQsIDEyLCAxNSwgMjMzLCA3MywgMTIsIDE1LCAyMzMsIDcyLCAxMiwgCisgICAgMTUsIDIzMywgNzEsIDEyLCAxNSwgMjMzLCA3MCwgMTIsIDE1LCAyMzMsIDY5LCAxMiwgMTUsIDIzMywgNjgsIDEyLCAxNSwgCisgICAgMjMzLCA2NywgMTIsIDE1LCAyMzMsIDY2LCAxMiwgMTUsIDIzMywgNjUsIDEyLCAxNSwgMjMzLCA2NCwgMTIsIDE1LCAyMzMsIAorICAgIDYzLCAxMiwgMTUsIDIzMywgNjIsIDEyLCAxNSwgMjMzLCA2MSwgMTIsIDE1LCAyMzMsIDYwLCAxMiwgMTUsIDIzMywgNTksIAorICAgIDEyLCAxNSwgMjMzLCA1OCwgMTIsIDE1LCAyMzMsIDU3LCAxMiwgMTUsIDIzMywgNTYsIDEyLCAxNSwgMjMzLCA1NSwgMTIsIAorICAgIDE1LCAyMzMsIDU0LCAxMiwgMTUsIDIzMywgNTMsIDEyLCAxNSwgMjMzLCA1MiwgMTIsIDE1LCAyMzMsIDUxLCAxMiwgMTUsIAorICAgIDIzMywgNTAsIDEyLCAxNSwgMjMzLCA0OSwgMTIsIDE1LCAyMzMsIDQ4LCAxMiwgMTUsIDIzMywgNDcsIDEyLCAxNSwgMjMzLCAKKyAgICA0NiwgMTIsIDE1LCAyMzMsIDQ1LCAxMiwgMTUsIDIzMywgNDQsIDEyLCAxNSwgMjMzLCA0MywgMTIsIDE1LCAyMzMsIDQyLCAKKyAgICAxMiwgMTUsIDIzMywgNDEsIDEyLCAxNSwgMjMzLCA0MCwgMTIsIDE1LCAyMzMsIDM5LCAxMiwgMTUsIDIzMywgMzgsIDEyLCAKKyAgICAxNSwgMjMzLCAzNywgMTIsIDE1LCAyMzMsIDM2LCAxMiwgMTUsIDIzMywgMzUsIDEyLCAxNSwgMjMzLCAzNCwgMTIsIDE1LCAKKyAgICAyMzMsIDMzLCAxMiwgMTUsIDIzMywgMzIsIDEyLCAxNSwgMjMzLCAzMSwgMTIsIDE1LCAyMzMsIDMwLCAxMiwgMTUsIDIzMywgCisgICAgMjksIDEyLCAxNSwgMjMzLCAyOCwgMTIsIDE1LCAyMzMsIDI3LCAxMiwgMTUsIDIzMywgMjYsIDEyLCAxNSwgMjMzLCAyNSwgCisgICAgMTIsIDE1LCAyMzMsIDI0LCAxMiwgMTUsIDIzMywgMjMsIDEyLCAxNSwgMjMzLCAyMiwgMTIsIDE1LCAyMzMsIDIxLCAxMiwgCisgICAgMTUsIDIzMywgMjAsIDEyLCAxNSwgMjMzLCAxOSwgMTIsIDE1LCAyMzMsIDE4LCAxMiwgMTUsIDIzMywgMTcsIDEyLCAxNSwgCisgICAgMjMzLCAxNiwgMTIsIDE1LCAyMzMsIDE1LCAxMiwgMTUsIDIzMywgMTQsIDEyLCAxNSwgMjMzLCAxMywgMTIsIDE1LCAyMzMsIAorICAgIDEyLCAxMiwgMTUsIDIzMywgMTEsIDEyLCAxNSwgMjMzLCAxMCwgMTIsIDE1LCAyMzMsIDksIDEyLCAxNSwgMjMzLCA4LCAxMiwgCisgICAgMTUsIDIzMywgNywgMTIsIDE1LCAyMzMsIDYsIDEyLCAxNSwgMjMzLCA1LCAxMiwgMTUsIDIzMywgNCwgMTIsIDE1LCAyMzMsIAorICAgIDMsIDEyLCAxNSwgMjMzLCAyLCAxMiwgMTUsIDIzMywgMSwgMTIsIDE1LCAyMzMsIDAsIDEyLCAxNSwgMjMyLCAyNTUsIDEyLCAKKyAgICAxNSwgMjMyLCAyNTQsIDEyLCAxNSwgMjMyLCAyNTMsIDEyLCAxNSwgMjMyLCAyNTIsIDEyLCAxNSwgMjMyLCAyNTEsIDEyLCAKKyAgICAxNSwgMjMyLCAyNTAsIDEyLCAxNSwgMjMyLCAyNDksIDEyLCAxNSwgMjMyLCAyNDgsIDEyLCAxNSwgMjMyLCAyNDcsIDEyLCAKKyAgICAxNSwgMjMyLCAyNDYsIDEyLCAxNSwgMjMyLCAyNDUsIDEyLCAxNSwgMjMyLCAyNDQsIDEyLCAxNSwgMjMyLCAyNDMsIDEyLCAKKyAgICAxNSwgMjMyLCAyNDIsIDEyLCAxNSwgMjMyLCAyNDEsIDEyLCAxNSwgMjMyLCAyNDAsIDEyLCAxNSwgMjMyLCAyMzksIDEyLCAKKyAgICAxNSwgMjMyLCAyMzgsIDEyLCAxNSwgMjMyLCAyMzcsIDEyLCAxNSwgMjMyLCAyMzYsIDEyLCAxNSwgMjMyLCAyMzUsIDEyLCAKKyAgICAxNSwgMjMyLCAyMzQsIDEyLCAxNSwgMjMyLCAyMzMsIDEyLCAxNSwgMjMyLCAyMzIsIDEyLCAxNSwgMjMyLCAyMzEsIDEyLCAKKyAgICAxNSwgMjMyLCAyMzAsIDEyLCAxNSwgMjMyLCAyMjksIDEyLCAxNSwgMjMyLCAyMjgsIDEyLCAxNSwgMjMyLCAyMjcsIDEyLCAKKyAgICAxNSwgMjMyLCAyMjYsIDEyLCAxNSwgMjMyLCAyMjUsIDEyLCAxNSwgMjMyLCAyMjQsIDEyLCAxNSwgMjMyLCAyMjMsIDEyLCAKKyAgICAxNSwgMjMyLCAyMjIsIDEyLCAxNSwgMjMyLCAyMjEsIDEyLCAxNSwgMjMyLCAyMjAsIDEyLCAxNSwgMjMyLCAyMTksIDEyLCAKKyAgICAxNSwgMjMyLCAyMTgsIDEyLCAxNSwgMjMyLCAyMTcsIDEyLCAxNSwgMjMyLCAyMTYsIDEyLCAxNSwgMjMyLCAyMTUsIDEyLCAKKyAgICAxNSwgMjMyLCAyMTQsIDEyLCAxNSwgMjMyLCAyMTMsIDEyLCAxNSwgMjMyLCAyMTIsIDEyLCAxNSwgMjMyLCAyMTEsIDEyLCAKKyAgICAxNSwgMjMyLCAyMTAsIDEyLCAxNSwgMjMyLCAyMDksIDEyLCAxNSwgMjMyLCAyMDgsIDEyLCAxNSwgMjMyLCAyMDcsIDEyLCAKKyAgICAxNSwgMjMyLCAyMDYsIDEyLCAxNSwgMjMyLCAyMDUsIDEyLCAxNSwgMjMyLCAyMDQsIDEyLCAxNSwgMjMyLCAyMDMsIDEyLCAKKyAgICAxNSwgMjMyLCAyMDIsIDEyLCAxNSwgMjMyLCAyMDEsIDEyLCAxNSwgMjMyLCAyMDAsIDEyLCAxNSwgMjMyLCAxOTksIDEyLCAKKyAgICAxNSwgMjMyLCAxOTgsIDEyLCAxNSwgMjMyLCAxOTcsIDEyLCAxNSwgMjMyLCAxOTYsIDEyLCAxNSwgMjMyLCAxOTUsIDEyLCAKKyAgICAxNSwgMjMyLCAxOTQsIDEyLCAxNSwgMjMyLCAxOTMsIDEyLCAxNSwgMjMyLCAxOTIsIDEyLCAxNSwgMjMyLCAxOTEsIDEyLCAKKyAgICAxNSwgMjMyLCAxOTAsIDEyLCAxNSwgMjMyLCAxODksIDEyLCAxNSwgMjMyLCAxODgsIDEyLCAxNSwgMjMyLCAxODcsIDEyLCAKKyAgICAxNSwgMjMyLCAxODYsIDEyLCAxNSwgMjMyLCAxODUsIDEyLCAxNSwgMjMyLCAxODQsIDEyLCAxNSwgMjMyLCAxODMsIDEyLCAKKyAgICAxNSwgMjMyLCAxODIsIDEyLCAxNSwgMjMyLCAxODEsIDEyLCAxNSwgMjMyLCAxODAsIDEyLCAxNSwgMjMyLCAxNzksIDEyLCAKKyAgICAxNSwgMjMyLCAxNzgsIDEyLCAxNSwgMjMyLCAxNzcsIDEyLCAxNSwgMjMyLCAxNzYsIDEyLCAxNSwgMjMyLCAxNzUsIDEyLCAKKyAgICAxNSwgMjMyLCAxNzQsIDEyLCAxNSwgMjMyLCAxNzMsIDEyLCAxNSwgMjMyLCAxNzIsIDEyLCAxNSwgMjMyLCAxNzEsIDEyLCAKKyAgICAxNSwgMjMyLCAxNzAsIDEyLCAxNSwgMjMyLCAxNjksIDEyLCAxNSwgMjMyLCAxNjgsIDEyLCAxNSwgMjMyLCAxNjcsIDEyLCAKKyAgICAxNSwgMjMyLCAxNjYsIDEyLCAxNSwgMjMyLCAxNjUsIDEyLCAxNSwgMjMyLCAxNjQsIDEyLCAxNSwgMjMyLCAxNjMsIDEyLCAKKyAgICAxNSwgMjMyLCAxNjIsIDEyLCAxNSwgMjMyLCAxNjEsIDEyLCAxNSwgMjMyLCAxNjAsIDEyLCAxNSwgMjMyLCAxNTksIDEyLCAKKyAgICAxNSwgMjMyLCAxNTgsIDEyLCAxNSwgMjMyLCAxNTcsIDEyLCAxNSwgMjMyLCAxNTYsIDEyLCAxNSwgMjMyLCAxNTUsIDEyLCAKKyAgICAxNSwgMjMyLCAxNTQsIDEyLCAxNSwgMjMyLCAxNTMsIDEyLCAxNSwgMjMyLCAxNTIsIDEyLCAxNSwgMjMyLCAxNTEsIDEyLCAKKyAgICAxNSwgMjMyLCAxNTAsIDEyLCAxNSwgMjMyLCAxNDksIDEyLCAxNSwgMjMyLCAxNDgsIDEyLCAxNSwgMjMyLCAxNDcsIDEyLCAKKyAgICAxNSwgMjMyLCAxNDYsIDEyLCAxNSwgMjMyLCAxNDUsIDEyLCAxNSwgMjMyLCAxNDQsIDEyLCAxNSwgMjMyLCAxNDMsIDEyLCAKKyAgICAxNSwgMjMyLCAxNDIsIDEyLCAxNSwgMjMyLCAxNDEsIDEyLCAxNSwgMjMyLCAxNDAsIDEyLCAxNSwgMjMyLCAxMzksIDEyLCAKKyAgICAxNSwgMjMyLCAxMzgsIDEyLCAxNSwgMjMyLCAxMzcsIDEyLCAxNSwgMjMyLCAxMzYsIDEyLCAxNSwgMjMyLCAxMzUsIDEyLCAKKyAgICAxNSwgMjMyLCAxMzQsIDEyLCAxNSwgMjMyLCAxMzMsIDEyLCAxNSwgMjMyLCAxMzIsIDEyLCAxNSwgMjMyLCAxMzEsIDEyLCAKKyAgICAxNSwgMjMyLCAxMzAsIDEyLCAxNSwgMjMyLCAxMjksIDEyLCAxNSwgMjMyLCAxMjgsIDEyLCAxNSwgMjMyLCAxMjcsIDEyLCAKKyAgICAxNSwgMjMyLCAxMjYsIDEyLCAxNSwgMjMyLCAxMjUsIDEyLCAxNSwgMjMyLCAxMjQsIDEyLCAxNSwgMjMyLCAxMjMsIDEyLCAKKyAgICAxNSwgMjMyLCAxMjIsIDEyLCAxNSwgMjMyLCAxMjEsIDEyLCAxNSwgMjMyLCAxMjAsIDEyLCAxNSwgMjMyLCAxMTksIDEyLCAKKyAgICAxNSwgMjMyLCAxMTgsIDEyLCAxNSwgMjMyLCAxMTcsIDEyLCAxNSwgMjMyLCAxMTYsIDEyLCAxNSwgMjMyLCAxMTUsIDEyLCAKKyAgICAxNSwgMjMyLCAxMTQsIDEyLCAxNSwgMjMyLCAxMTMsIDEyLCAxNSwgMjMyLCAxMTIsIDEyLCAxNSwgMjMyLCAxMTEsIDEyLCAKKyAgICAxNSwgMjMyLCAxMTAsIDEyLCAxNSwgMjMyLCAxMDksIDEyLCAxNSwgMjMyLCAxMDgsIDEyLCAxNSwgMjMyLCAxMDcsIDEyLCAKKyAgICAxNSwgMjMyLCAxMDYsIDEyLCAxNSwgMjMyLCAxMDUsIDEyLCAxNSwgMjMyLCAxMDQsIDEyLCAxNSwgMjMyLCAxMDMsIDEyLCAKKyAgICAxNSwgMjMyLCAxMDIsIDEyLCAxNSwgMjMyLCAxMDEsIDEyLCAxNSwgMjMyLCAxMDAsIDEyLCAxNSwgMjMyLCA5OSwgMTIsIAorICAgIDE1LCAyMzIsIDk4LCAxMiwgMTUsIDIzMiwgOTcsIDEyLCAxNSwgMjMyLCA5NiwgMTIsIDE1LCAyMzIsIDk1LCAxMiwgMTUsIAorICAgIDIzMiwgOTQsIDEyLCAxNSwgMjMyLCA5MywgMTIsIDE1LCAyMzIsIDkyLCAxMiwgMTUsIDIzMiwgOTEsIDEyLCAxNSwgMjMyLCAKKyAgICA5MCwgMTIsIDE1LCAyMzIsIDg5LCAxMiwgMTUsIDIzMiwgODgsIDEyLCAxNSwgMjMyLCA4NywgMTIsIDE1LCAyMzIsIDg2LCAKKyAgICAxMiwgMTUsIDIzMiwgODUsIDEyLCAxNSwgMjMyLCA4NCwgMTIsIDE1LCAyMzIsIDgzLCAxMiwgMTUsIDIzMiwgODIsIDEyLCAKKyAgICAxNSwgMjMyLCA4MSwgMTIsIDE1LCAyMzIsIDgwLCAxMiwgMTUsIDIzMiwgNzksIDEyLCAxNSwgMjMyLCA3OCwgMTIsIDE1LCAKKyAgICAyMzIsIDc3LCAxMiwgMTUsIDIzMiwgNzYsIDEyLCAxNSwgMjMyLCA3NSwgMTIsIDE1LCAyMzIsIDc0LCAxMiwgMTUsIDIzMiwgCisgICAgNzMsIDEyLCAxNSwgMjMyLCA3MiwgMTIsIDE1LCAyMzIsIDcxLCAxMiwgMTUsIDIzMiwgNzAsIDEyLCAxNSwgMjMyLCA2OSwgCisgICAgMTIsIDE1LCAyMzIsIDY4LCAxMiwgMTUsIDIzMiwgNjcsIDEyLCAxNSwgMjMyLCA2NiwgMTIsIDE1LCAyMzIsIDY1LCAxMiwgCisgICAgMTUsIDIzMiwgNjQsIDEyLCAxNSwgMjMyLCA2MywgMTIsIDE1LCAyMzIsIDYyLCAxMiwgMTUsIDIzMiwgNjEsIDEyLCAxNSwgCisgICAgMjMyLCA2MCwgMTIsIDE1LCAyMzIsIDU5LCAxMiwgMTUsIDIzMiwgNTgsIDEyLCAxNSwgMjMyLCA1NywgMTIsIDE1LCAyMzIsIAorICAgIDU2LCAxMiwgMTUsIDIzMiwgNTUsIDEyLCAxNSwgMjMyLCA1NCwgMTIsIDE1LCAyMzIsIDUzLCAxMiwgMTUsIDIzMiwgNTIsIAorICAgIDEyLCAxNSwgMjMyLCA1MSwgMTIsIDE1LCAyMzIsIDUwLCAxMiwgMTUsIDIzMiwgNDksIDEyLCAxNSwgMjMyLCA0OCwgMTIsIAorICAgIDE1LCAyMzIsIDQ3LCAxMiwgMTUsIDIzMiwgNDYsIDEyLCAxNSwgMjMyLCA0NSwgMTIsIDE1LCAyMzIsIDQ0LCAxMiwgMTUsIAorICAgIDIzMiwgNDMsIDEyLCAxNSwgMjMyLCA0MiwgMTIsIDE1LCAyMzIsIDQxLCAxMiwgMTUsIDIzMiwgNDAsIDEyLCAxNSwgMjMyLCAKKyAgICAzOSwgMTIsIDE1LCAyMzIsIDM4LCAxMiwgMTUsIDIzMiwgMzcsIDEyLCAxNSwgMjMyLCAzNiwgMTIsIDE1LCAyMzIsIDM1LCAKKyAgICAxMiwgMTUsIDIzMiwgMzQsIDEyLCAxNSwgMjMyLCAzMywgMTIsIDE1LCAyMzIsIDMyLCAxMiwgMTUsIDIzMiwgMzEsIDEyLCAKKyAgICAxNSwgMjMyLCAzMCwgMTIsIDE1LCAyMzIsIDI5LCAxMiwgMTUsIDIzMiwgMjgsIDEyLCAxNSwgMjMyLCAyNywgMTIsIDE1LCAKKyAgICAyMzIsIDI2LCAxMiwgMTUsIDIzMiwgMjUsIDEyLCAxNSwgMjMyLCAyNCwgMTIsIDE1LCAyMzIsIDIzLCAxMiwgMTUsIDIzMiwgCisgICAgMjIsIDEyLCAxNSwgMjMyLCAyMSwgMTIsIDE1LCAyMzIsIDIwLCAxMiwgMTUsIDIzMiwgMTksIDEyLCAxNSwgMjMyLCAxOCwgCisgICAgMTIsIDE1LCAyMzIsIDE3LCAxMiwgMTUsIDIzMiwgMTYsIDEyLCAxNSwgMjMyLCAxNSwgMTIsIDE1LCAyMzIsIDE0LCAxMiwgCisgICAgMTUsIDIzMiwgMTMsIDEyLCAxNSwgMjMyLCAxMiwgMTIsIDE1LCAyMzIsIDExLCAxMiwgMTUsIDIzMiwgMTAsIDEyLCAxNSwgCisgICAgMjMyLCA5LCAxMiwgMTUsIDIzMiwgOCwgMTIsIDE1LCAyMzIsIDcsIDEyLCAxNSwgMjMyLCA2LCAxMiwgMTUsIDIzMiwgNSwgCisgICAgMTIsIDE1LCAyMzIsIDQsIDEyLCAxNSwgMjMyLCAzLCAxMiwgMTUsIDIzMiwgMiwgMTIsIDE1LCAyMzIsIDEsIDEyLCAxNSwgCisgICAgMjMyLCAwLCAxMiwgMTUsIDIzMSwgMjU1LCAxMiwgMTUsIDIzMSwgMjU0LCAxMiwgMTUsIDIzMSwgMjUzLCAxMiwgMTUsIAorICAgIDIzMSwgMjUyLCAxMiwgMTUsIDIzMSwgMjUxLCAxMiwgMTUsIDIzMSwgMjUwLCAxMiwgMTUsIDIzMSwgMjQ5LCAxMiwgMTUsIAorICAgIDIzMSwgMjQ4LCAxMiwgMTUsIDIzMSwgMjQ3LCAxMiwgMTUsIDIzMSwgMjQ2LCAxMiwgMTUsIDIzMSwgMjQ1LCAxMiwgMTUsIAorICAgIDIzMSwgMjQ0LCAxMiwgMTUsIDIzMSwgMjQzLCAxMiwgMTUsIDIzMSwgMjQyLCAxMiwgMTUsIDIzMSwgMjQxLCAxMiwgMTUsIAorICAgIDIzMSwgMjQwLCAxMiwgMTUsIDIzMSwgMjM5LCAxMiwgMTUsIDIzMSwgMjM4LCAxMiwgMTUsIDIzMSwgMjM3LCAxMiwgMTUsIAorICAgIDIzMSwgMjM2LCAxMiwgMTUsIDIzMSwgMjM1LCAxMiwgMTUsIDIzMSwgMjM0LCAxMiwgMTUsIDIzMSwgMjMzLCAxMiwgMTUsIAorICAgIDIzMSwgMjMyLCAxMiwgMTUsIDIzMSwgMjMxLCAxMiwgMTUsIDIzMSwgMjMwLCAxMiwgMTUsIDIzMSwgMjI5LCAxMiwgMTUsIAorICAgIDIzMSwgMjI4LCAxMiwgMTUsIDIzMSwgMjI3LCAxMiwgMTUsIDIzMSwgMjI2LCAxMiwgMTUsIDIzMSwgMjI1LCAxMiwgMTUsIAorICAgIDIzMSwgMjI0LCAxMiwgMTUsIDIzMSwgMjIzLCAxMiwgMTUsIDIzMSwgMjIyLCAxMiwgMTUsIDIzMSwgMjIxLCAxMiwgMTUsIAorICAgIDIzMSwgMjIwLCAxMiwgMTUsIDIzMSwgMjE5LCAxMiwgMTUsIDIzMSwgMjE4LCAxMiwgMTUsIDIzMSwgMjE3LCAxMiwgMTUsIAorICAgIDIzMSwgMjE2LCAxMiwgMTUsIDIzMSwgMjE1LCAxMiwgMTUsIDIzMSwgMjE0LCAxMiwgMTUsIDIzMSwgMjEzLCAxMiwgMTUsIAorICAgIDIzMSwgMjEyLCAxMiwgMTUsIDIzMSwgMjExLCAxMiwgMTUsIDIzMSwgMjEwLCAxMiwgMTUsIDIzMSwgMjA5LCAxMiwgMTUsIAorICAgIDIzMSwgMjA4LCAxMiwgMTUsIDIzMSwgMjA3LCAxMiwgMTUsIDIzMSwgMjA2LCAxMiwgMTUsIDIzMSwgMjA1LCAxMiwgMTUsIAorICAgIDIzMSwgMjA0LCAxMiwgMTUsIDIzMSwgMjAzLCAxMiwgMTUsIDIzMSwgMjAyLCAxMiwgMTUsIDIzMSwgMjAxLCAxMiwgMTUsIAorICAgIDIzMSwgMjAwLCAxMiwgMTUsIDIzMSwgMTk5LCAxMiwgMTUsIDIzMSwgMTk4LCAxMiwgMTUsIDIzMSwgMTk3LCAxMiwgMTUsIAorICAgIDIzMSwgMTk2LCAxMiwgMTUsIDIzMSwgMTk1LCAxMiwgMTUsIDIzMSwgMTk0LCAxMiwgMTUsIDIzMSwgMTkzLCAxMiwgMTUsIAorICAgIDIzMSwgMTkyLCAxMiwgMTUsIDIzMSwgMTkxLCAxMiwgMTUsIDIzMSwgMTkwLCAxMiwgMTUsIDIzMSwgMTg5LCAxMiwgMTUsIAorICAgIDIzMSwgMTg4LCAxMiwgMTUsIDIzMSwgMTg3LCAxMiwgMTUsIDIzMSwgMTg2LCAxMiwgMTUsIDIzMSwgMTg1LCAxMiwgMTUsIAorICAgIDIzMSwgMTg0LCAxMiwgMTUsIDIzMSwgMTgzLCAxMiwgMTUsIDIzMSwgMTgyLCAxMiwgMTUsIDIzMSwgMTgxLCAxMiwgMTUsIAorICAgIDIzMSwgMTgwLCAxMiwgMTUsIDIzMSwgMTc5LCAxMiwgMTUsIDIzMSwgMTc4LCAxMiwgMTUsIDIzMSwgMTc3LCAxMiwgMTUsIAorICAgIDIzMSwgMTc2LCAxMiwgMTUsIDIzMSwgMTc1LCAxMiwgMTUsIDIzMSwgMTc0LCAxMiwgMTUsIDIzMSwgMTczLCAxMiwgMTUsIAorICAgIDIzMSwgMTcyLCAxMiwgMTUsIDIzMSwgMTcxLCAxMiwgMTUsIDIzMSwgMTcwLCAxMiwgMTUsIDIzMSwgMTY5LCAxMiwgMTUsIAorICAgIDIzMSwgMTY4LCAxMiwgMTUsIDIzMSwgMTY3LCAxMiwgMTUsIDIzMSwgMTY2LCAxMiwgMTUsIDIzMSwgMTY1LCAxMiwgMTUsIAorICAgIDIzMSwgMTY0LCAxMiwgMTUsIDIzMSwgMTYzLCAxMiwgMTUsIDIzMSwgMTYyLCAxMiwgMTUsIDIzMSwgMTYxLCAxMiwgMTUsIAorICAgIDIzMSwgMTYwLCAxMiwgMTUsIDIzMSwgMTU5LCAxMiwgMTUsIDIzMSwgMTU4LCAxMiwgMTUsIDIzMSwgMTU3LCAxMiwgMTUsIAorICAgIDIzMSwgMTU2LCAxMiwgMTUsIDIzMSwgMTU1LCAxMiwgMTUsIDIzMSwgMTU0LCAxMiwgMTUsIDIzMSwgMTUzLCAxMiwgMTUsIAorICAgIDIzMSwgMTUyLCAxMiwgMTUsIDIzMSwgMTUxLCAxMiwgMTUsIDIzMSwgMTUwLCAxMiwgMTUsIDIzMSwgMTQ5LCAxMiwgMTUsIAorICAgIDIzMSwgMTQ4LCAxMiwgMTUsIDIzMSwgMTQ3LCAxMiwgMTUsIDIzMSwgMTQ2LCAxMiwgMTUsIDIzMSwgMTQ1LCAxMiwgMTUsIAorICAgIDIzMSwgMTQ0LCAxMiwgMTUsIDIzMSwgMTQzLCAxMiwgMTUsIDIzMSwgMTQyLCAxMiwgMTUsIDIzMSwgMTQxLCAxMiwgMTUsIAorICAgIDIzMSwgMTQwLCAxMiwgMTUsIDIzMSwgMTM5LCAxMiwgMTUsIDIzMSwgMTM4LCAxMiwgMTUsIDIzMSwgMTM3LCAxMiwgMTUsIAorICAgIDIzMSwgMTM2LCAxMiwgMTUsIDIzMSwgMTM1LCAxMiwgMTUsIDIzMSwgMTM0LCAxMiwgMTUsIDIzMSwgMTMzLCAxMiwgMTUsIAorICAgIDIzMSwgMTMyLCAxMiwgMTUsIDIzMSwgMTMxLCAxMiwgMTUsIDIzMSwgMTMwLCAxMiwgMTUsIDIzMSwgMTI5LCAxMiwgMTUsIAorICAgIDIzMSwgMTI4LCAxMiwgMTUsIDIzMSwgMTI3LCAxMiwgMTUsIDIzMSwgMTI2LCAxMiwgMTUsIDIzMSwgMTI1LCAxMiwgMTUsIAorICAgIDIzMSwgMTI0LCAxMiwgMTUsIDIzMSwgMTIzLCAxMiwgMTUsIDIzMSwgMTIyLCAxMiwgMTUsIDIzMSwgMTIxLCAxMiwgMTUsIAorICAgIDIzMSwgMTIwLCAxMiwgMTUsIDIzMSwgMTE5LCAxMiwgMTUsIDIzMSwgMTE4LCAxMiwgMTUsIDIzMSwgMTE3LCAxMiwgMTUsIAorICAgIDIzMSwgMTE2LCAxMiwgMTUsIDIzMSwgMTE1LCA4LCA1LCAzMiwgMjQwLCAzMCwgOCwgNSwgMzIsIDI0MCwgMjYsIDgsIDUsIAorICAgIDMyLCAyMzksIDIyOCwgOCwgNSwgMzIsIDI0MCwgMjksIDgsIDUsIDMyLCAyNDAsIDI4LCA4LCA1LCAzMiwgMTYzLCAyMTUsIAorICAgIDk0LCAyMTAsIDY5LCA4LCA1LCAzMiwgMjExLCAxMDgsIDE3OCwgNSwgMzIsIDIyNCwgMjQxLCAyMjEsIDE1MiwgMTc4LCA1LCAKKyAgICAzMiwgMjI0LCAyNDEsIDI0MSwgMTY3LCAxNzgsIDUsIDMyLCAyMjQsIDI0MSwgMjMxLCAxOSwgMTc4LCA1LCAzMiwgMjA1LCAKKyAgICAyMzUsIDIyMSwgMTUyLCAxNzgsIDUsIDMyLCAyMjQsIDI0MSwgMjAzLCAxNzQsIDExMCwgMSwgMjAyLCAyMzcsIDMsIDIzNiwgCisgICAgMjMyLCAxMTAsIDIxOCwgNjMsIDIzMCwgODEsIDIwNiwgNjcsIDExMCwgMzIsIDIwMywgOSwgMjAyLCAyMzcsIDIwMiwgMjM3LCAKKyAgICAyMTksIDU0LCAxMTAsIDEsIDI1MCwgMjUwLCAyNTAsIDMsIDExMCwgMSwgMjA0LCAyNywgMjUxLCAzMCwgMTEwLCAxLCAyMDQsIAorICAgIDI3LCAyNDQsIDE3OCwgMTEwLCAxLCAyMDQsIDI3LCAyMzcsIDY3LCAxMTAsIDEsIDIwNCwgMjcsIDIzMCwgMjIsIDExMCwgMSwgCisgICAgMjA0LCAyNywgMjI4LCAyMCwgMTEwLCAxLCAyMDQsIDI3LCA0NiwgMjI0LCAyNDcsIDExMCwgMSwgMjA0LCAyNywgMjE2LCAKKyAgICA5MSwgMTEwLCAxLCAyMDQsIDI3LCAyMDksIDIwMywgMTEwLCAxLCAyNTAsIDI1MCwgOTEsIDU0LCAxMTAsIDEsIDIxMywgMCwgCisgICAgMywgMjEzLCAwLCAyNDMsIDg1LCAxMTAsIDEsIDIxMywgMCwgMywgMjEyLCAxMjQsIDI0MywgODUsIDExMCwgMSwgMjEzLCAwLCAKKyAgICAzLCAyNDQsIDE5OCwgMjUsIDIxMywgMCwgMjQzLCA4NSwgMTEwLCAxLCAyMTMsIDAsIDMsIDI0NCwgMTk4LCAyNSwgMjEyLCAKKyAgICAxMjQsIDI0MywgODUsIDExMCwgMSwgMTM3LCAzLCAyMTksIDU0LCAxMTAsIDEsIDEzNywgMywgMjE3LCAxMTQsIDExMCwgMSwgCisgICAgMTM3LCAzLCAyMjUsIDEwNSwgMTEwLCAxLCAyNDgsIDEwOSwgMywgMjQ0LCAxOTcsIDExMCwgMSwgMjM4LCA2OCwgMywgMjQ0LCAKKyAgICAxOTcsIDExMCwgMSwgMjQ0LCAxNzksIDMsIDI0NCwgMTk3LCAxMTAsIDEsIDIzNywgNjgsIDMsIDIyNSwgMTA1LCAxMTAsIDEsIAorICAgIDIwNiwgNjAsIDMsIDI0NCwgMTk3LCAxMTAsIDEsIDIwMiwgOTYsIDMsIDI0NCwgMTk3LCAxMTAsIDEsIDIwOSwgMTMzLCAzLCAKKyAgICAyNDQsIDE5NywgMTEwLCAxLCAyMDIsIDIzNywgMywgMjQ0LCAxOTcsIDExMCwgMSwgNDYsIDIzMCwgMjMsIDMsIDI0NCwgCisgICAgMTk3LCAxMTAsIDEsIDIzMCwgMjMsIDMsIDI0NCwgMTk3LCAxMTAsIDEsIDIyOCwgMjEsIDMsIDI0NCwgMTk3LCAxMTAsIDEsIAorICAgIDIyNCwgMjQ4LCAzLCAyNDQsIDE5NywgMTEwLCAxLCAyMjEsIDQxLCAzLCAyNDQsIDE5NywgMTEwLCAxLCAyMTQsIDI1MCwgMywgCisgICAgMjQ0LCAxOTcsIDExMCwgMSwgNDYsIDIxOSwgMzUsIDMsIDI0NCwgMTk3LCAxMTAsIDEsIDIxOSwgMzUsIDMsIDI0NCwgMTk3LCAKKyAgICAxMTAsIDEsIDIwOCwgMTYsIDMsIDI0NCwgMTk3LCAxMTAsIDEsIDIxNywgNzUsIDMsIDI0NCwgMTk3LCAxMTAsIDEsIDIxNiwgCisgICAgOTIsIDMsIDI0NCwgMTk3LCAxMTAsIDEsIDIxMywgMCwgMywgMjQ0LCAxOTcsIDExMCwgMSwgMjA5LCAyMDQsIDMsIDI0NCwgCisgICAgMTk3LCAxMTAsIDEsIDIwNiwgNjAsIDMsIDIzNiwgMTI4LCAxMTAsIDEsIDI0OCwgMTA5LCAzLCAyMTYsIDIwMCwgMTEwLCAxLCAKKyAgICAyMzAsIDIzLCAzLCAyMTYsIDIwMCwgMTEwLCAxLCAyMTksIDM1LCAzLCAyMTYsIDIwMCwgMTEwLCAzMiwgMTM3LCAyMjgsIAorICAgIDIwLCAxMCwgMSwgMTM3LCAyMDQsIDg4LCA2NCwgMTgsIDEwLCAxLCAxMzcsIDIwNCwgODgsIDQ2LCAxOCwgMTAsIDEsIDI0OCwgCisgICAgMTQ5LCA2NCwgMTgsIDEwLCAxLCAyNDgsIDE0OSwgNDYsIDE4LCAxMCwgMSwgMjQ4LCAxNDksIDgxLCAxOCwgMTAsIDEsIAorICAgIDI0OCwgMTQ5LCAxNzQsIDE4LCAxMCwgMSwgMjE5LCAxNywgNjQsIDE4LCAxMCwgMSwgMjE5LCAxNywgNDYsIDE4LCAxMCwgMSwgCisgICAgMjE5LCAxNywgODEsIDE4LCAxMCwgMSwgMjE5LCAxNywgMTc0LCAxOCwgMTAsIDEsIDI0OCwgMTM3LCA2NCwgMTgsIDEwLCAxLCAKKyAgICAyNDgsIDEzNywgNDYsIDE4LCAxMCwgMSwgMjQ4LCAxMzcsIDgxLCAxOCwgMTAsIDEsIDI0OCwgMTM3LCAxNzQsIDE4LCAxMCwgCisgICAgMSwgMjA3LCAyMzIsIDY0LCAxOCwgMTAsIDEsIDIwNywgMjMyLCA0NiwgMTgsIDEwLCAxLCAyMDcsIDIzMiwgODEsIDE4LCAKKyAgICAxMCwgMSwgMjA3LCAyMzIsIDE3NCwgMTgsIDEwLCAxLCAyMDksIDE2OCwgNjQsIDE4LCAxMCwgMSwgMjA5LCAxNjgsIDQ2LCAKKyAgICAxOCwgMTAsIDEsIDIwOSwgMTY4LCA4MSwgMTgsIDEwLCAxLCAyMDksIDE2OCwgMTc0LCAxOCwgMTAsIDEsIDIwNywgMjM0LCAKKyAgICA2NCwgMTgsIDEwLCAxLCAyMDcsIDIzNCwgNDYsIDE4LCAxMCwgMSwgMjA3LCAyMzQsIDgxLCAxOCwgMTAsIDEsIDIwNywgCisgICAgMjM0LCAxNzQsIDE4LCAxMCwgMSwgMjA2LCA0OSwgNjQsIDE4LCAxMCwgMSwgMjA2LCA0OSwgNDYsIDE4LCAxMCwgMSwgMjA2LCAKKyAgICA0OSwgODEsIDE4LCAxMCwgMSwgMjA2LCA0OSwgMTc0LCAxOCwgMTAsIDEsIDIxOSwgMTUsIDY0LCAxOCwgMTAsIDEsIDIxOSwgCisgICAgMTUsIDQ2LCAxOCwgMTAsIDEsIDIxOSwgMTUsIDgxLCAxOCwgMTAsIDEsIDIxOSwgMTUsIDE3NCwgMTgsIDEwLCAxLCAyNDIsIAorICAgIDYsIDY0LCAxOCwgMTAsIDEsIDI0MiwgNiwgNDYsIDE4LCAxMCwgMSwgMjQyLCA2LCA4MSwgMTgsIDEwLCAxLCAyNDIsIDYsIAorICAgIDE3NCwgMTgsIDEwLCAxLCAyMjAsIDI1NSwgNjQsIDE4LCAxMCwgMSwgMjIwLCAyNTUsIDQ2LCAxOCwgMTAsIDEsIDIyMCwgCisgICAgMjU1LCA4MSwgMTgsIDEwLCAxLCAyMjAsIDI1NSwgMTc0LCAxOCwgMTAsIDEsIDIwOSwgMTkyLCA2NCwgMTgsIDEwLCAxLCAKKyAgICAyMDksIDE5MiwgNDYsIDE4LCAxMCwgMSwgMjA5LCAxOTIsIDgxLCAxOCwgMTAsIDEsIDIwOSwgMTkyLCAxNzQsIDE4LCAxMCwgCisgICAgMSwgMjA5LCAxOTAsIDY0LCAxOCwgMTAsIDEsIDIwOSwgMTkwLCA0NiwgMTgsIDEwLCAxLCAyMDksIDE5MCwgODEsIDE4LCAKKyAgICAxMCwgMSwgMjA5LCAxOTAsIDE3NCwgMTgsIDEwLCAxLCAyNDQsIDExOCwgNjQsIDE4LCAxMCwgMSwgMjQ0LCAxMTgsIDQ2LCAKKyAgICAxOCwgMTAsIDEsIDI0NCwgMTkyLCA2NCwgMTgsIDEwLCAxLCAyNDQsIDE5MiwgNDYsIDE4LCAxMCwgMSwgMjQyLCAzNCwgNjQsIAorICAgIDE4LCAxMCwgMSwgMjQyLCAzNCwgNDYsIDE4LCAxMCwgMSwgMjQ0LCAxMTYsIDY0LCAxOCwgMTAsIDEsIDI0NCwgMTE2LCA0NiwgCisgICAgMTgsIDEwLCAxLCAyMzAsIDE1NiwgNjQsIDE4LCAxMCwgMSwgMjMwLCAxNTYsIDQ2LCAxOCwgMTAsIDEsIDIxNSwgMTc4LCAKKyAgICA2NCwgMTgsIDEwLCAxLCAyMTUsIDE3OCwgNDYsIDE4LCAxMCwgMSwgMjI5LCAxOTAsIDY0LCAxOCwgMTAsIDEsIDIyOSwgCisgICAgMTkwLCA0NiwgMTgsIDEwLCAxLCAyMjksIDE5MCwgODEsIDE4LCAxMCwgMSwgMjI5LCAxOTAsIDE3NCwgMTgsIDEwLCAxLCAKKyAgICAyMzgsIDI1MiwgNjQsIDE4LCAxMCwgMSwgMjM4LCAyNTIsIDQ2LCAxOCwgMTAsIDEsIDIzOCwgMjUyLCA4MSwgMTgsIDEwLCAKKyAgICAxLCAyMzgsIDI1MiwgMTc0LCAxOCwgMTAsIDEsIDIzNywgMjE4LCA2NCwgMTgsIDEwLCAxLCAyMzcsIDIxOCwgNDYsIDE4LCAKKyAgICAxMCwgMSwgMjM3LCAyMTgsIDgxLCAxOCwgMTAsIDEsIDIzNywgMjE4LCAxNzQsIDE4LCAxMCwgMSwgMjIyLCAxMjcsIDY0LCAKKyAgICAxOCwgMTAsIDEsIDIyMiwgMTI3LCA0NiwgMTgsIDEwLCAxLCAyMjIsIDEyNywgODEsIDE4LCAxMCwgMSwgMjIyLCAxMjcsIAorICAgIDE3NCwgMTgsIDEwLCAxLCAyMjEsIDE3OSwgMjM4LCA4NiwgNjQsIDE4LCAxMCwgMSwgMjIxLCAxNzksIDIzOCwgODYsIDQ2LCAKKyAgICAxOCwgMTAsIDEsIDIxNSwgMjMxLCA2NCwgMTgsIDEwLCAxLCAyMTUsIDIzMSwgNDYsIDE4LCAxMCwgMSwgMjE1LCAyMzEsIAorICAgIDgxLCAxOCwgMTAsIDEsIDIxNSwgMjMxLCAxNzQsIDE4LCAxMCwgMSwgMjM3LCA0NCwgMywgODksIDg3LCA2NCwgMTgsIDEwLCAKKyAgICAxLCAyMzcsIDQ0LCAzLCA4OSwgODcsIDQ2LCAxOCwgMTAsIDEsIDIzNywgNDQsIDIzOCwgMzcsIDY0LCAxOCwgMTAsIDEsIAorICAgIDIzNywgNDQsIDIzOCwgMzcsIDQ2LCAxOCwgMTAsIDEsIDIzNywgNDQsIDIzOCwgMzcsIDgxLCAxOCwgMTAsIDEsIDIzNywgCisgICAgNDQsIDIzOCwgMzcsIDE3NCwgMTgsIDEwLCAxLCAyMzcsIDQ0LCAyNDMsIDExMCwgNjQsIDE4LCAxMCwgMSwgMjM3LCA0NCwgCisgICAgMjQzLCAxMTAsIDQ2LCAxOCwgMTAsIDEsIDIzNywgNDQsIDI0MywgMTEwLCA4MSwgMTgsIDEwLCAxLCAyMzcsIDQ0LCAyNDMsIAorICAgIDExMCwgMTc0LCAxOCwgMTAsIDEsIDg5LCAyNDgsIDIyNCwgNjQsIDE4LCAxMCwgMSwgODksIDI0OCwgMjI0LCA0NiwgMTgsIAorICAgIDEwLCAxLCA4OSwgMjQ4LCAyMjQsIDMsIDIzNywgMTI4LCA4NywgNjQsIDE4LCAxMCwgMSwgODksIDI0OCwgMjI0LCAzLCAKKyAgICAyMzcsIDEyOCwgODcsIDQ2LCAxOCwgMTAsIDE2LCA3MCwgNTUsIDEwLCAxNiwgNzAsIDU2LCAxMCwgMTYsIDEyMCwgMTg3LCAKKyAgICA1NSwgMTAsIDE2LCAxMjAsIDE4NywgNTYsIDEwLCAxNiwgMTI2LCAxODcsIDU1LCAxMCwgMTYsIDEyNiwgMTg3LCA1NiwgMTAsIAorICAgIDE2LCAxMjYsIDE4NywgMjE4LCA1OSwgMTgzLCA1NSwgMTAsIDE2LCAxMjYsIDE4NywgMjE4LCA1OSwgMTgzLCA1NiwgMTAsIAorICAgIDE2LCAyMzksIDE0NywgMTg3LCA1NSwgMTAsIDE2LCAyMzksIDE0NywgMTg3LCA1NiwgMTAsIDE2LCA1MiwgODAsIDI0OCwgCisgICAgMjMxLCA1NiwgMTAsIDE2LCAxMjAsIDE4NywgMjA1LCAyNDQsIDU1LCAxMCwgMTYsIDEyMCwgMTg3LCAyMDUsIDI0NCwgNTYsIAorICAgIDEwLCAxNiwgMjE1LCAyNTIsIDEwLCAxNiwgNSwgMjA5LCAyNTIsIDU1LCAxMCwgMTYsIDUsIDIwOSwgMjUyLCA1NiwgMTAsIAorICAgIDEsIDIyMiwgMjA2LCA2NCwgMTgsIDEwLCAxLCAyMjIsIDIwNiwgNDYsIDE4LCAxMCwgMSwgMjIyLCAyMDYsIDgxLCAxOCwgCisgICAgMTAsIDEsIDIyMiwgMjA2LCAxNzQsIDE4LCAxMCwgMSwgMTA2LCA2NCwgMTgsIDEwLCAxLCAxMDYsIDQ2LCAxOCwgMTAsIDEsIAorICAgIDIyMCwgNzQsIDY0LCAxOCwgMTAsIDEsIDIyMCwgNzQsIDQ2LCAxOCwgMTAsIDEsIDIwMiwgMjE0LCA2NCwgMTgsIDEwLCAxLCAKKyAgICAyMDIsIDIxNCwgNDYsIDE4LCAxMCwgMSwgMTA2LCAzLCAyMzcsIDEyOCwgODcsIDY0LCAxOCwgMTAsIDEsIDIwNiwgNTYsIAorICAgIDY0LCAxOCwgMTAsIDEsIDIwNiwgNTYsIDQ2LCAxOCwgMTAsIDEsIDIyOSwgNzYsIDIyMCwgNzQsIDY0LCAxOCwgMTAsIDEsIAorICAgIDIyOSwgNzYsIDIyMCwgNzQsIDQ2LCAxOCwgMTAsIDEsIDIyOSwgNzYsIDIwMiwgMjE0LCA2NCwgMTgsIDEwLCAxLCAyMjksIAorICAgIDc2LCAyMDIsIDIxNCwgNDYsIDE4LCAxMCwgMSwgMTg4LCA2NCwgMTgsIDEwLCAxLCAxODgsIDQ2LCAxOCwgMTAsIDEsIDE4OCwgCisgICAgODEsIDE4LCAxMCwgMSwgMTg4LCAxNzQsIDE4LCAxMCwgMSwgMjA3LCAxNiwgMjI5LCAyMDUsIDIyOSwgNzYsIDEzNywgMjI1LCAKKyAgICAxMzAsIDgxLCAxOCwgMTAsIDEsIDIwNywgMTYsIDIyOSwgMjA1LCAyMjksIDc2LCAxMzcsIDIyNSwgMTMwLCAxNzQsIDE4LCAKKyAgICAxMCwgMzIsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDEzNywgNjQsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMzcsIDEyOCwgODcsIAorICAgIDMsIDEzNywgNDYsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDI1MSwgMTEwLCA2NCwgMTgsIDEwLCAzMiwgCisgICAgODksIDMsIDIzNywgMTI4LCA4NywgMywgMjUxLCAxMTAsIDQ2LCAxOCwgMTAsIDMyLCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAKKyAgICAyMDQsIDcxLCA2NCwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMjA0LCA3MSwgNDYsIDE4LCAxMCwgMzIsIAorICAgIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDEwNiwgNjQsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDEwNiwgCisgICAgNDYsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDIyMCwgNzQsIDY0LCAxOCwgMTAsIDMyLCA4OSwgMywgCisgICAgMjM3LCAxMjgsIDg3LCAzLCAyMjAsIDc0LCA0NiwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMjAyLCAKKyAgICAyMTQsIDY0LCAxOCwgMTAsIDMyLCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAyMDIsIDIxNCwgNDYsIDE4LCAxMCwgMzIsIAorICAgIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDE4OCwgNjQsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDE4OCwgCisgICAgNDYsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDE4OCwgODEsIDE4LCAxMCwgMzIsIDIwNywgMTYsIAorICAgIDIyOSwgNzYsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDEzNywgMjI1LCAxMzAsIDY0LCAxOCwgMTAsIDMyLCAyMDcsIDE2LCAKKyAgICAyMjksIDc2LCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjA3LCAxNiwgCisgICAgMjI5LCA3NiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMTM3LCAyMjUsIDEzMCwgODEsIDE4LCAxMCwgMSwgMjQwLCA3NSwgCisgICAgODksIDY0LCAxOCwgMTAsIDEsIDI0MCwgNzUsIDg5LCA0NiwgMTgsIDEwLCAxLCAyNDAsIDc1LCA4OSwgODEsIDE4LCAxMCwgCisgICAgMSwgMjQwLCA3NSwgODksIDE3NCwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMTg0LCA2NCwgMTgsIDEwLCAKKyAgICAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMTUxLCA2NCwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgCisgICAgODMsIDY0LCAxOCwgMTAsIDMyLCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAxMzcsIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAKKyAgICAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgODksIDY0LCAxOCwgMTAsIDMyLCAyNDgsIDEzOSwgMywgMTg0LCA2NCwgMTgsIAorICAgIDEwLCAzMiwgMjQ4LCAxMzksIDMsIDE1MSwgNjQsIDE4LCAxMCwgMzIsIDI0OCwgMTM5LCAzLCAyMjksIDE0MSwgNjQsIDE4LCAKKyAgICAxMCwgMzIsIDI0OCwgMTM5LCAzLCA4MywgNjQsIDE4LCAxMCwgMzIsIDI0OCwgMTM5LCAzLCAxMzcsIDIyNSwgMTMwLCA2NCwgCisgICAgMTgsIDEwLCAzMiwgMjQ4LCAxMzksIDMsIDg5LCA2NCwgMTgsIDEwLCAzMiwgMjA5LCAxNzAsIDMsIDE4NCwgNjQsIDE4LCAKKyAgICAxMCwgMzIsIDIwOSwgMTcwLCAzLCAxNTEsIDY0LCAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgMjI5LCAxNDEsIDY0LCAxOCwgCisgICAgMTAsIDMyLCAyMDksIDE3MCwgMywgODMsIDY0LCAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgMTM3LCAyMjUsIDEzMCwgNjQsIAorICAgIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCA4OSwgNjQsIDE4LCAxMCwgMzIsIDIwOSwgODksIDMsIDE4NCwgNjQsIDE4LCAxMCwgCisgICAgMzIsIDIwOSwgODksIDMsIDgzLCA2NCwgMTgsIDEwLCAzMiwgMjA5LCA4OSwgMywgMTM3LCAyMjUsIDEzMCwgNjQsIDE4LCAKKyAgICAxMCwgMzIsIDIwOSwgODksIDMsIDg5LCA2NCwgMTgsIDEwLCAzMiwgMTg0LCAzLCAxNTEsIDY0LCAxOCwgMTAsIDMyLCAxODQsIAorICAgIDMsIDgzLCA2NCwgMTgsIDEwLCAzMiwgMTUxLCAzLCAxODQsIDY0LCAxOCwgMTAsIDMyLCAxNTEsIDMsIDgzLCA2NCwgMTgsIAorICAgIDEwLCAzMiwgMjI5LCAxNDEsIDMsIDE4NCwgNjQsIDE4LCAxMCwgMzIsIDIyOSwgMTQxLCAzLCAxNTEsIDY0LCAxOCwgMTAsIAorICAgIDMyLCAyMjksIDE0MSwgMywgODMsIDY0LCAxOCwgMTAsIDMyLCAyMTQsIDE2MiwgMywgMTg0LCA2NCwgMTgsIDEwLCAzMiwgCisgICAgMjE0LCAxNjIsIDMsIDE1MSwgNjQsIDE4LCAxMCwgMzIsIDIxNCwgMTYyLCAzLCAyMjksIDE0MSwgNjQsIDE4LCAxMCwgMzIsIAorICAgIDIxNCwgMTYyLCAzLCA4MywgNjQsIDE4LCAxMCwgMzIsIDIxNSwgMjksIDMsIDE1MSwgNjQsIDE4LCAxMCwgMzIsIDIxNSwgCisgICAgMjksIDMsIDgzLCA2NCwgMTgsIDEwLCAzMiwgMjQ0LCAyMDgsIDMsIDE4NCwgNjQsIDE4LCAxMCwgMzIsIDI0NCwgMjA4LCAzLCAKKyAgICAxNTEsIDY0LCAxOCwgMTAsIDMyLCAyNDQsIDIwOCwgMywgMjI5LCAxNDEsIDY0LCAxOCwgMTAsIDMyLCAyNDQsIDIwOCwgMywgCisgICAgODMsIDY0LCAxOCwgMTAsIDMyLCAyMDksIDI1MiwgMywgMTUxLCA2NCwgMTgsIDEwLCAzMiwgMjA5LCAyNTIsIDMsIDgzLCAKKyAgICA2NCwgMTgsIDEwLCAzMiwgMjAyLCAxMTEsIDMsIDgzLCA2NCwgMTgsIDEwLCAzMiwgMjUxLCA2MCwgMywgMTg0LCA2NCwgMTgsIAorICAgIDEwLCAzMiwgMjUxLCA2MCwgMywgODMsIDY0LCAxOCwgMTAsIDMyLCAyMzgsIDExNSwgMywgMTg0LCA2NCwgMTgsIDEwLCAzMiwgCisgICAgMjM4LCAxMTUsIDMsIDgzLCA2NCwgMTgsIDEwLCAzMiwgMjQwLCA0OCwgMywgMTg0LCA2NCwgMTgsIDEwLCAzMiwgMjQwLCAKKyAgICA0OCwgMywgMTUxLCA2NCwgMTgsIDEwLCAzMiwgMjQwLCA0OCwgMywgMjI5LCAxNDEsIDY0LCAxOCwgMTAsIDMyLCAyNDAsIAorICAgIDQ4LCAzLCA4MywgNjQsIDE4LCAxMCwgMzIsIDI0MCwgNDgsIDMsIDEzNywgMjI1LCAxMzAsIDY0LCAxOCwgMTAsIDMyLCAKKyAgICAyNDAsIDQ4LCAzLCA4OSwgNjQsIDE4LCAxMCwgMzIsIDIxNywgMTIwLCAzLCAxNTEsIDY0LCAxOCwgMTAsIDMyLCAyMTcsIAorICAgIDEyMCwgMywgODMsIDY0LCAxOCwgMTAsIDMyLCAyMTcsIDEyMCwgMywgMTM3LCAyMjUsIDEzMCwgNjQsIDE4LCAxMCwgMzIsIAorICAgIDIxNywgMTIwLCAzLCA4OSwgNjQsIDE4LCAxMCwgMzIsIDIzMCwgMjMsIDMsIDEzNywgNjQsIDE4LCAxMCwgMzIsIDIzMCwgCisgICAgMjMsIDMsIDE4NCwgNjQsIDE4LCAxMCwgMzIsIDIzMCwgMjMsIDMsIDE1MSwgNjQsIDE4LCAxMCwgMzIsIDIzMCwgMjMsIDMsIAorICAgIDIyOSwgMTQxLCA2NCwgMTgsIDEwLCAzMiwgMjMwLCAyMywgMywgMjI4LCAyOSwgNjQsIDE4LCAxMCwgMzIsIDIzMCwgMjMsIAorICAgIDMsIDgzLCA2NCwgMTgsIDEwLCAzMiwgMjMwLCAyMywgMywgMTM3LCAyMjUsIDEzMCwgNjQsIDE4LCAxMCwgMzIsIDIzMCwgCisgICAgMjMsIDMsIDg5LCA2NCwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgMywgMTg0LCA2NCwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgMywgCisgICAgMTUxLCA2NCwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgMywgMjI5LCAxNDEsIDY0LCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAzLCAKKyAgICA4MywgNjQsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDEzNywgMjI1LCAxMzAsIDY0LCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAKKyAgICAzLCA4OSwgNjQsIDE4LCAxMCwgMzIsIDgzLCAzLCAxODQsIDY0LCAxOCwgMTAsIDMyLCA4MywgMywgMTUxLCA2NCwgMTgsIAorICAgIDEwLCAzMiwgODMsIDMsIDIyOSwgMTQxLCA2NCwgMTgsIDEwLCAzMiwgODMsIDMsIDgzLCA2NCwgMTgsIDEwLCAzMiwgODMsIAorICAgIDMsIDEzNywgMjI1LCAxMzAsIDY0LCAxOCwgMTAsIDMyLCA4MywgMywgODksIDY0LCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgCisgICAgMTg0LCA2NCwgMTgsIDEwLCAzMiwgMjIxLCAxNzksIDMsIDE1MSwgNjQsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCAyMjksIAorICAgIDE0MSwgNjQsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCA4MywgNjQsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCAxMzcsIAorICAgIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAzMiwgMjIxLCAxNzksIDMsIDg5LCA2NCwgMTgsIDEwLCAzMiwgMjM3LCA0NCwgMywgCisgICAgMTg0LCA2NCwgMTgsIDEwLCAzMiwgMjM3LCA0NCwgMywgODMsIDY0LCAxOCwgMTAsIDMyLCAyMzcsIDQ0LCAzLCAxMzcsIAorICAgIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAzMiwgMjM3LCA0NCwgMywgODksIDY0LCAxOCwgMTAsIDMyLCA4OSwgMywgMTg0LCA2NCwgCisgICAgMTgsIDEwLCAzMiwgODksIDMsIDE1MSwgNjQsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMjksIDE0MSwgNjQsIDE4LCAxMCwgMzIsIAorICAgIDg5LCAzLCA4MywgNjQsIDE4LCAxMCwgMzIsIDg5LCAzLCAxMzcsIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAzMiwgODksIDMsIAorICAgIDg5LCA2NCwgMTgsIDEwLCAzMiwgMjA5LCAxMDEsIDMsIDIxMCwgMTk5LCAxMzcsIDY0LCAxOCwgMTAsIDMyLCAyMTYsIDEyMywgCisgICAgMywgMjEwLCAxOTksIDEzNywgNjQsIDE4LCAxMCwgMzIsIDEzNywgMjI1LCAxMzAsIDMsIDIxMCwgMTk5LCAxMzcsIDY0LCAKKyAgICAxOCwgMTAsIDMyLCAyMTMsIDgxLCAzLCAyNDQsIDE3MSwgNjQsIDE4LCAxMCwgMzIsIDIxMywgODEsIDMsIDIyOSwgMjI4LCAKKyAgICA2NCwgMTgsIDEwLCAzMiwgMjEzLCA4MSwgMywgMjQwLCA3MiwgNjQsIDE4LCAxMCwgMzIsIDIxMywgODEsIDMsIDI0NCwgCisgICAgMTczLCA2NCwgMTgsIDEwLCAzMiwgMjEzLCA4MSwgMywgMjI5LCAyMzAsIDY0LCAxOCwgMTAsIDMyLCAyMTMsIDgxLCAzLCAKKyAgICAyMTAsIDE5OSwgMTM3LCA2NCwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMjE2LCAxMjMsIDQ2LCAxOCwgCisgICAgMTAsIDMyLCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAyMDIsIDEwOCwgNDYsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMzcsIAorICAgIDEyOCwgODcsIDMsIDgzLCA0NiwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMjIxLCAxNzksIDQ2LCAxOCwgCisgICAgMTAsIDMyLCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgODksIDMsIAorICAgIDIzNywgMTI4LCA4NywgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyNDgsIDEzOSwgMywgMjE2LCAxMjMsIDQ2LCAxOCwgMTAsIAorICAgIDMyLCAyNDgsIDEzOSwgMywgMjAyLCAxMDgsIDQ2LCAxOCwgMTAsIDMyLCAyNDgsIDEzOSwgMywgODMsIDQ2LCAxOCwgMTAsIAorICAgIDMyLCAyNDgsIDEzOSwgMywgMjIxLCAxNzksIDQ2LCAxOCwgMTAsIDMyLCAyNDgsIDEzOSwgMywgMTM3LCAyMjUsIDEzMCwgCisgICAgNDYsIDE4LCAxMCwgMzIsIDI0OCwgMTM5LCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCAyMTYsIDEyMywgCisgICAgNDYsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCAyMDIsIDEwOCwgNDYsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCA4MywgCisgICAgNDYsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCAyMjEsIDE3OSwgNDYsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCAxMzcsIAorICAgIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjA5LCAxNzAsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgMjA5LCA4OSwgMywgCisgICAgMjE2LCAxMjMsIDQ2LCAxOCwgMTAsIDMyLCAyMDksIDg5LCAzLCAyMDIsIDEwOCwgNDYsIDE4LCAxMCwgMzIsIDIwOSwgODksIAorICAgIDMsIDgzLCA0NiwgMTgsIDEwLCAzMiwgMjA5LCA4OSwgMywgMjIxLCAxNzksIDQ2LCAxOCwgMTAsIDMyLCAyMDksIDg5LCAzLCAKKyAgICAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjA5LCA4OSwgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyNDAsIDQ4LCAKKyAgICAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjQwLCA0OCwgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyMTcsIAorICAgIDEyMCwgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDIxNywgMTIwLCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIAorICAgIDIzMCwgMjMsIDMsIDEzNywgNDYsIDE4LCAxMCwgMzIsIDIzMCwgMjMsIDMsIDIyOCwgMjksIDQ2LCAxOCwgMTAsIDMyLCAKKyAgICAyMzAsIDIzLCAzLCA4MywgNDYsIDE4LCAxMCwgMzIsIDIzMCwgMjMsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIAorICAgIDMyLCAyMzAsIDIzLCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDgzLCA0NiwgMTgsIDEwLCAzMiwgMjI4LCAKKyAgICAyOSwgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgODMsIAorICAgIDMsIDEzNywgNDYsIDE4LCAxMCwgMzIsIDgzLCAzLCA4MywgNDYsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCAyMTYsIDEyMywgCisgICAgNDYsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCAyMDIsIDEwOCwgNDYsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCA4MywgCisgICAgNDYsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCAyMjEsIDE3OSwgNDYsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCAxMzcsIAorICAgIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjIxLCAxNzksIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgMTM3LCAyMjUsIDEzMCwgCisgICAgMywgMjEwLCAxOTksIDEzNywgNDYsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMTYsIDEyMywgNDYsIDE4LCAxMCwgMzIsIDg5LCAzLCAKKyAgICAyMDIsIDEwOCwgNDYsIDE4LCAxMCwgMzIsIDg5LCAzLCA4MywgNDYsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMjEsIDE3OSwgNDYsIAorICAgIDE4LCAxMCwgMzIsIDg5LCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgODksIDMsIDg5LCA0NiwgMTgsIDEwLCAKKyAgICAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMTg0LCA4MSwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgCisgICAgMTUxLCA4MSwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgMTI4LCA4NywgMywgMjI5LCAxNDEsIDgxLCAxOCwgMTAsIDMyLCAKKyAgICA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDIzNywgCisgICAgNDQsIDgxLCAxOCwgMTAsIDMyLCAyNDgsIDEzOSwgMywgMTg0LCA4MSwgMTgsIDEwLCAzMiwgMjQ4LCAxMzksIDMsIDE1MSwgCisgICAgODEsIDE4LCAxMCwgMzIsIDI0OCwgMTM5LCAzLCAyMjksIDE0MSwgODEsIDE4LCAxMCwgMzIsIDI0OCwgMTM5LCAzLCA4MywgCisgICAgODEsIDE4LCAxMCwgMzIsIDI0OCwgMTM5LCAzLCAyMzcsIDQ0LCA4MSwgMTgsIDEwLCAzMiwgMjA5LCAxNzAsIDMsIDE4NCwgCisgICAgODEsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCAxNTEsIDgxLCAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgMjI5LCAxNDEsIAorICAgIDgxLCAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgODMsIDgxLCAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgMjM3LCA0NCwgCisgICAgODEsIDE4LCAxMCwgMzIsIDIwOSwgODksIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMTg0LCAzLCAxNTEsIDgxLCAxOCwgMTAsIAorICAgIDMyLCAxODQsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMTUxLCAzLCAxODQsIDgxLCAxOCwgMTAsIDMyLCAxNTEsIDMsIDgzLCAKKyAgICA4MSwgMTgsIDEwLCAzMiwgMjI5LCAxNDEsIDMsIDE4NCwgODEsIDE4LCAxMCwgMzIsIDIyOSwgMTQxLCAzLCA4MywgODEsIAorICAgIDE4LCAxMCwgMzIsIDIxNCwgMTYyLCAzLCAxODQsIDgxLCAxOCwgMTAsIDMyLCAyMTQsIDE2MiwgMywgMTUxLCA4MSwgMTgsIAorICAgIDEwLCAzMiwgMjE0LCAxNjIsIDMsIDIyOSwgMTQxLCA4MSwgMTgsIDEwLCAzMiwgMjE0LCAxNjIsIDMsIDgzLCA4MSwgMTgsIAorICAgIDEwLCAzMiwgMjE1LCAyOSwgMywgMTUxLCA4MSwgMTgsIDEwLCAzMiwgMjE1LCAyOSwgMywgMjI5LCAxNDEsIDgxLCAxOCwgCisgICAgMTAsIDMyLCAyMTUsIDI5LCAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDI0NCwgMjA4LCAzLCAxODQsIDgxLCAxOCwgMTAsIDMyLCAKKyAgICAyNDQsIDIwOCwgMywgMTUxLCA4MSwgMTgsIDEwLCAzMiwgMjQ0LCAyMDgsIDMsIDIyOSwgMTQxLCA4MSwgMTgsIDEwLCAzMiwgCisgICAgMjQ0LCAyMDgsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjA5LCAyNTIsIDMsIDE1MSwgODEsIDE4LCAxMCwgMzIsIDIwMiwgCisgICAgMTExLCAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDI1MSwgNjAsIDMsIDE4NCwgODEsIDE4LCAxMCwgMzIsIDI1MSwgNjAsIDMsIAorICAgIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjM4LCAxMTUsIDMsIDE4NCwgODEsIDE4LCAxMCwgMzIsIDIzOCwgMTE1LCAzLCA4MywgCisgICAgODEsIDE4LCAxMCwgMzIsIDI0MCwgNDgsIDMsIDE4NCwgODEsIDE4LCAxMCwgMzIsIDI0MCwgNDgsIDMsIDE1MSwgODEsIDE4LCAKKyAgICAxMCwgMzIsIDI0MCwgNDgsIDMsIDIyOSwgMTQxLCA4MSwgMTgsIDEwLCAzMiwgMjQwLCA0OCwgMywgODMsIDgxLCAxOCwgMTAsIAorICAgIDMyLCAyMTcsIDEyMCwgMywgMTUxLCA4MSwgMTgsIDEwLCAzMiwgMjE3LCAxMjAsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgCisgICAgMjMwLCAyMywgMywgMTg0LCA4MSwgMTgsIDEwLCAzMiwgMjMwLCAyMywgMywgMTUxLCA4MSwgMTgsIDEwLCAzMiwgMjMwLCAKKyAgICAyMywgMywgMjI5LCAxNDEsIDgxLCAxOCwgMTAsIDMyLCAyMzAsIDIzLCAzLCAyMjgsIDI5LCA4MSwgMTgsIDEwLCAzMiwgCisgICAgMjMwLCAyMywgMywgODMsIDgxLCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAzLCAxODQsIDgxLCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAKKyAgICAzLCAxNTEsIDgxLCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAzLCAyMjksIDE0MSwgODEsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIAorICAgIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgMywgMjM3LCA0NCwgODEsIDE4LCAxMCwgMzIsIDgzLCAzLCAxODQsIDgxLCAKKyAgICAxOCwgMTAsIDMyLCA4MywgMywgMTUxLCA4MSwgMTgsIDEwLCAzMiwgODMsIDMsIDIyOSwgMTQxLCA4MSwgMTgsIDEwLCAzMiwgCisgICAgODMsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjIxLCAxNzksIDMsIDE4NCwgODEsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCAKKyAgICAxNTEsIDgxLCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgMjI5LCAxNDEsIDgxLCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgCisgICAgODMsIDgxLCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgMjM3LCA0NCwgODEsIDE4LCAxMCwgMzIsIDIzNywgNDQsIDMsIAorICAgIDE4NCwgODEsIDE4LCAxMCwgMzIsIDIzNywgNDQsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjM3LCA0NCwgMywgMjEwLCAKKyAgICAxOTksIDEzNywgODEsIDE4LCAxMCwgMzIsIDg5LCAzLCAxODQsIDgxLCAxOCwgMTAsIDMyLCA4OSwgMywgMTUxLCA4MSwgMTgsIAorICAgIDEwLCAzMiwgODksIDMsIDIyOSwgMTQxLCA4MSwgMTgsIDEwLCAzMiwgODksIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgODksIAorICAgIDMsIDIzNywgNDQsIDgxLCAxOCwgMTAsIDMyLCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCA4MywgMTc0LCAxOCwgMTAsIDMyLCAKKyAgICA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAyMzcsIDQ0LCAxNzQsIDE4LCAxMCwgMzIsIDI0OCwgMTM5LCAzLCA4MywgMTc0LCAKKyAgICAxOCwgMTAsIDMyLCAyNDgsIDEzOSwgMywgMjM3LCA0NCwgMTc0LCAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgODMsIDE3NCwgCisgICAgMTgsIDEwLCAzMiwgMjA5LCAxNzAsIDMsIDIzNywgNDQsIDE3NCwgMTgsIDEwLCAzMiwgMjA5LCA4OSwgMywgODMsIDE3NCwgCisgICAgMTgsIDEwLCAzMiwgMjA5LCA4OSwgMywgMjM3LCA0NCwgMTc0LCAxOCwgMTAsIDMyLCAyMTQsIDE2MiwgMywgODMsIDE3NCwgCisgICAgMTgsIDEwLCAzMiwgMjE0LCAxNjIsIDMsIDIzNywgNDQsIDE3NCwgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgODMsIDE3NCwgCisgICAgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgMjM3LCA0NCwgMTc0LCAxOCwgMTAsIDMyLCAyMzAsIDIzLCAzLCAyMjgsIDI5LCAKKyAgICAxNzQsIDE4LCAxMCwgMzIsIDIzMCwgMjMsIDMsIDgzLCAxNzQsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDgzLCAxNzQsIAorICAgIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCA4MywgMTc0LCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgMjM3LCA0NCwgMTc0LCAKKyAgICAxOCwgMTAsIDMyLCA4OSwgMywgODMsIDE3NCwgMTgsIDEwLCAzMiwgODksIDMsIDIzNywgNDQsIDE3NCwgMTgsIDEwLCAzMiwgCisgICAgMjEzLCA4MSwgMywgMjQwLCA3MiwgMTc0LCAxOCwgMTAsIDMyLCAyMTMsIDgxLCAzLCAyNDQsIDE3MywgMTc0LCAxOCwgMTAsIAorICAgIDMyLCAyMTMsIDgxLCAzLCAyMjksIDIzMCwgMTc0LCAxOCwgMTAsIDMyLCAyMDksIDI1MiwgMywgMTM3LCAyMjUsIDEzMCwgCisgICAgNjQsIDE4LCAxMCwgMzIsIDIwOSwgMjUyLCAzLCA4OSwgNjQsIDE4LCAxMCwgMzIsIDI1MSwgNjAsIDMsIDEzNywgMjI1LCAKKyAgICAxMzAsIDY0LCAxOCwgMTAsIDMyLCAyNTEsIDYwLCAzLCA4OSwgNjQsIDE4LCAxMCwgMzIsIDIzOCwgMTE1LCAzLCAxMzcsIAorICAgIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAzMiwgMjM4LCAxMTUsIDMsIDg5LCA2NCwgMTgsIDEwLCAzMiwgMjE0LCAxNjIsIDMsIAorICAgIDEzNywgMjI1LCAxMzAsIDY0LCAxOCwgMTAsIDMyLCAyMTQsIDE2MiwgMywgODksIDY0LCAxOCwgMTAsIDMyLCAyMTMsIDQwLCAKKyAgICAzLCAxMzcsIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgODksIDY0LCAxOCwgMTAsIDMyLCAxNTEsIDMsIAorICAgIDEzNywgMjI1LCAxMzAsIDY0LCAxOCwgMTAsIDMyLCAxNTEsIDMsIDg5LCA2NCwgMTgsIDEwLCAzMiwgMTg0LCAzLCAxMzcsIAorICAgIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAzMiwgMTg0LCAzLCA4OSwgNjQsIDE4LCAxMCwgMzIsIDIyOSwgMTQxLCAzLCAxMzcsIAorICAgIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAzMiwgMjI5LCAxNDEsIDMsIDg5LCA2NCwgMTgsIDEwLCAzMiwgMjE1LCAyOSwgMywgCisgICAgMTM3LCAyMjUsIDEzMCwgNjQsIDE4LCAxMCwgMzIsIDIxNSwgMjksIDMsIDg5LCA2NCwgMTgsIDEwLCAzMiwgMjQ0LCAyMDgsIAorICAgIDMsIDEzNywgMjI1LCAxMzAsIDY0LCAxOCwgMTAsIDMyLCAyNDQsIDIwOCwgMywgODksIDY0LCAxOCwgMTAsIDMyLCAyMTMsIAorICAgIDQwLCAzLCAxODQsIDY0LCAxOCwgMTAsIDMyLCAyMTMsIDQwLCAzLCAxNTEsIDY0LCAxOCwgMTAsIDMyLCAyMTMsIDQwLCAzLCAKKyAgICAyMjksIDE0MSwgNjQsIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDgzLCA2NCwgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgCisgICAgMjE2LCAxMjMsIDY0LCAxOCwgMTAsIDMyLCAyMTQsIDE2MiwgMywgMjE2LCAxMjMsIDY0LCAxOCwgMTAsIDMyLCAyMTUsIDI5LCAKKyAgICAzLCAyMTYsIDEyMywgNjQsIDE4LCAxMCwgMzIsIDI0NCwgMjA4LCAzLCAyMTYsIDEyMywgNjQsIDE4LCAxMCwgMzIsIDIwOSwgCisgICAgMjUyLCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjA5LCAyNTIsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgCisgICAgMjUxLCA2MCwgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDI1MSwgNjAsIDMsIDg5LCA0NiwgMTgsIDEwLCAKKyAgICAzMiwgMjM4LCAxMTUsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAyMzgsIDExNSwgMywgODksIDQ2LCAxOCwgCisgICAgMTAsIDMyLCAyMTQsIDE2MiwgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDIxNCwgMTYyLCAzLCA4OSwgNDYsIAorICAgIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAyMTMsIDQwLCAzLCA4OSwgCisgICAgNDYsIDE4LCAxMCwgMzIsIDE1MSwgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDE1MSwgMywgODksIDQ2LCAKKyAgICAxOCwgMTAsIDMyLCAxODQsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAxODQsIDMsIDg5LCA0NiwgMTgsIAorICAgIDEwLCAzMiwgMjI5LCAxNDEsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAyMjksIDE0MSwgMywgODksIDQ2LCAKKyAgICAxOCwgMTAsIDMyLCAyMTUsIDI5LCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjE1LCAyOSwgMywgODksIAorICAgIDQ2LCAxOCwgMTAsIDMyLCAyNDQsIDIwOCwgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDI0NCwgMjA4LCAzLCAKKyAgICA4OSwgNDYsIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDE4NCwgNDYsIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDE1MSwgNDYsIAorICAgIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDIyOSwgMTQxLCA0NiwgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgODMsIDQ2LCAxOCwgCisgICAgMTAsIDMyLCAyMTMsIDQwLCAzLCAyMTYsIDEyMywgNDYsIDE4LCAxMCwgMzIsIDIxNCwgMTYyLCAzLCAyMTYsIDEyMywgNDYsIAorICAgIDE4LCAxMCwgMzIsIDIxNSwgMjksIDMsIDIxNiwgMTIzLCA0NiwgMTgsIDEwLCAzMiwgMjQ0LCAyMDgsIDMsIDIxNiwgMTIzLCAKKyAgICA0NiwgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgMTg0LCA4MSwgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgMTUxLCA4MSwgMTgsIAorICAgIDEwLCAzMiwgMjEzLCA0MCwgMywgMjI5LCAxNDEsIDgxLCAxOCwgMTAsIDMyLCAyMTMsIDQwLCAzLCA4MywgODEsIDE4LCAxMCwgCisgICAgMzIsIDIxNCwgMTYyLCAzLCAyMzcsIDQ0LCA4MSwgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgMjM3LCA0NCwgODEsIDE4LCAKKyAgICAxMCwgMzIsIDIwOSwgMjUyLCAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDIxNCwgMTYyLCAzLCAxODQsIDE3NCwgMTgsIDEwLCAKKyAgICAzMiwgMjE0LCAxNjIsIDMsIDE1MSwgMTc0LCAxOCwgMTAsIDMyLCAyMTQsIDE2MiwgMywgMjI5LCAxNDEsIDE3NCwgMTgsIAorICAgIDEwLCAzMiwgMjEzLCA0MCwgMywgMTg0LCAxNzQsIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDE1MSwgMTc0LCAxOCwgMTAsIAorICAgIDMyLCAyMTMsIDQwLCAzLCAyMjksIDE0MSwgMTc0LCAxOCwgMTAsIDMyLCAyMDksIDI1MiwgMywgODMsIDE3NCwgMTgsIDEwLCAKKyAgICAzMiwgMjAyLCAxMTEsIDMsIDgzLCAxNzQsIDE4LCAxMCwgMzIsIDEzNywgMywgMjQwLCA3MCwgNDYsIDE4LCAxMCwgMzIsIAorICAgIDEzNywgMywgMjQwLCA3MCwgNjQsIDE4LCAyMTksIDIzMSwgNDksIDIxOSwgNzYsIDIxOSwgMjMxLCA1MCwgMjE5LCA3NiwgCisgICAgMTAsIDMyLCAyMDksIDE3MCwgMywgMTg0LCAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCAxNTEsIDMsIAorICAgIDE4NCwgNDYsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCAxNTEsIDMsIDE4NCwgODEsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAKKyAgICAzLCAxNTEsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjA5LCAxNzAsIDMsIDIyOSwgMTQxLCAzLCA4MywgODEsIDE4LCAxMCwgCisgICAgMzIsIDIwOSwgMTcwLCAzLCA4MywgMywgMTg0LCA4MSwgMTgsIDEwLCAzMiwgMjA5LCAxNzAsIDMsIDgzLCAzLCAxNTEsIDgxLCAKKyAgICAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgODMsIDMsIDIyOSwgMTQxLCA4MSwgMTgsIDEwLCAzMiwgMTg0LCAzLCA4MywgMywgCisgICAgMTUxLCA0NiwgMTgsIDEwLCAzMiwgMTg0LCAzLCA4MywgMywgMTUxLCA4MSwgMTgsIDEwLCAzMiwgMTUxLCAzLCA4MywgMywgCisgICAgODksIDQ2LCAxOCwgMTAsIDMyLCAxNTEsIDMsIDgzLCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjE0LCAKKyAgICAxNjIsIDMsIDE1MSwgMywgMTg0LCA4MSwgMTgsIDEwLCAzMiwgMjE0LCAxNjIsIDMsIDE4NCwgMywgMTUxLCA4MSwgMTgsIAorICAgIDEwLCAzMiwgMjE0LCAxNjIsIDMsIDE4NCwgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDIxNCwgMTYyLCAzLCAKKyAgICA4MywgMywgMTUxLCA0NiwgMTgsIDEwLCAzMiwgMjE0LCAxNjIsIDMsIDgzLCAzLCAxNTEsIDgxLCAxOCwgMTAsIDMyLCAyMTQsIAorICAgIDE2MiwgMywgODMsIDMsIDE4NCwgODEsIDE4LCAxMCwgMzIsIDIxNCwgMTYyLCAzLCA4MywgMywgODMsIDQ2LCAxOCwgMTAsIAorICAgIDMyLCAyMTQsIDE2MiwgMywgODMsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjE1LCAyOSwgMywgMTUxLCAzLCAxNTEsIDQ2LCAKKyAgICAxOCwgMTAsIDMyLCAyMTUsIDI5LCAzLCAxNTEsIDMsIDE1MSwgODEsIDE4LCAxMCwgMzIsIDIxNSwgMjksIDMsIDgzLCAzLCAKKyAgICA4MywgNDYsIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDE1MSwgMywgODMsIDQ2LCAxOCwgMTAsIDMyLCAyMTMsIDQwLCAzLCAKKyAgICAxNTEsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjEzLCA0MCwgMywgMTg0LCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDIxMywgCisgICAgNDAsIDMsIDgzLCAzLCAyMjksIDE0MSwgNDYsIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDgzLCAzLCAyMjksIDE0MSwgODEsIAorICAgIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDgzLCAzLCA4MywgNDYsIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDgzLCAzLCA4MywgCisgICAgODEsIDE4LCAxMCwgMzIsIDI0NCwgMjA4LCAzLCAxNTEsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAyNDQsIAorICAgIDIwOCwgMywgMjI5LCAxNDEsIDMsIDgzLCA0NiwgMTgsIDEwLCAzMiwgMjQ0LCAyMDgsIDMsIDIyOSwgMTQxLCAzLCA4MywgCisgICAgODEsIDE4LCAxMCwgMzIsIDIwOSwgMjUyLCAzLCA4MywgMywgMTUxLCA0NiwgMTgsIDEwLCAzMiwgMjA5LCAyNTIsIDMsIDgzLCAKKyAgICAzLCAxNTEsIDgxLCAxOCwgMTAsIDMyLCAyMDksIDI1MiwgMywgODMsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjA5LCAyNTIsIAorICAgIDMsIDgzLCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDI1MSwgNjAsIDMsIDE4NCwgMywgODMsIDQ2LCAxOCwgMTAsIDMyLCAKKyAgICAyNTEsIDYwLCAzLCA4MywgMywgODMsIDQ2LCAxOCwgMTAsIDMyLCAyNTEsIDYwLCAzLCA4MywgMywgODMsIDgxLCAxOCwgMTAsIAorICAgIDMyLCAyNTEsIDYwLCAzLCA4MywgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDIzOCwgMTE1LCAzLCA4MywgMywgCisgICAgODMsIDQ2LCAxOCwgMTAsIDMyLCAyMzgsIDExNSwgMywgODMsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgMjM4LCAxMTUsIDMsIAorICAgIDgzLCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjQwLCA0OCwgMywgMjI5LCAxNDEsIDMsIDgzLCA0NiwgCisgICAgMTgsIDEwLCAzMiwgMjQwLCA0OCwgMywgMjI5LCAxNDEsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjE3LCAxMjAsIDMsIDgzLCAKKyAgICAzLCAxNTEsIDQ2LCAxOCwgMTAsIDMyLCAyMTcsIDEyMCwgMywgODMsIDMsIDgzLCA0NiwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgCisgICAgMywgMTUxLCAzLCA4MywgNDYsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDE1MSwgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAKKyAgICAyMjgsIDI5LCAzLCAxNTEsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAzLCAxODQsIDMsIAorICAgIDE4NCwgODEsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDE4NCwgMywgMTg0LCA0NiwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgMywgCisgICAgMjI5LCAxNDEsIDMsIDgzLCA0NiwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgMywgMjI5LCAxNDEsIDMsIDgzLCA4MSwgMTgsIDEwLCAKKyAgICAzMiwgMjI4LCAyOSwgMywgODMsIDMsIDE1MSwgNDYsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDgzLCAzLCAxNTEsIDgxLCAKKyAgICAxOCwgMTAsIDMyLCA4MywgMywgMTUxLCAzLCAxODQsIDgxLCAxOCwgMTAsIDMyLCA4MywgMywgMTUxLCAzLCA4MywgODEsIAorICAgIDE4LCAxMCwgMzIsIDgzLCAzLCAxNTEsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgODMsIDMsIDE4NCwgMywgMTUxLCA4MSwgCisgICAgMTgsIDEwLCAzMiwgODMsIDMsIDE4NCwgMywgODMsIDgxLCAxOCwgMTAsIDMyLCA4MywgMywgMjI5LCAxNDEsIDMsIDE4NCwgCisgICAgODEsIDE4LCAxMCwgMzIsIDgzLCAzLCAyMjksIDE0MSwgMywgODMsIDgxLCAxOCwgMTAsIDMyLCA4MywgMywgMTg0LCAzLCAKKyAgICAyMjksIDE0MSwgODEsIDE4LCAxMCwgMzIsIDIzNywgNDQsIDMsIDgzLCAzLCAxODQsIDgxLCAxOCwgMTAsIDMyLCAyMzcsIAorICAgIDQ0LCAzLCA4MywgMywgODMsIDgxLCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgMTUxLCAzLCA4MywgODEsIDE4LCAxMCwgCisgICAgMzIsIDIyMSwgMTc5LCAzLCAxNTEsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgMTg0LCAKKyAgICAzLCA4MywgNDYsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCAxODQsIDMsIDgzLCA4MSwgMTgsIDEwLCAzMiwgMjIxLCAxNzksIAorICAgIDMsIDE4NCwgMywgMTM3LCAyMjUsIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDIyMSwgMTc5LCAzLCA4MywgMywgODksIDQ2LCAxOCwgCisgICAgMTAsIDMyLCAyMjEsIDE3OSwgMywgODMsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCA4OSwgMywgODMsIDMsIAorICAgIDgzLCA0NiwgMTgsIDEwLCAzMiwgODksIDMsIDgzLCAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDI0OCwgMTM5LCAzLCAyMjksIAorICAgIDE0MSwgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgMTg0LCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDIwOSwgCisgICAgMTcwLCAzLCAxODQsIDMsIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAyMDksIDE3MCwgMywgMjI5LCAxNDEsIDMsIAorICAgIDg5LCA0NiwgMTgsIDEwLCAzMiwgMjA5LCAxNzAsIDMsIDIyOSwgMTQxLCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAKKyAgICAzMiwgMjA5LCAxNzAsIDMsIDgzLCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDIwOSwgMTcwLCAzLCA4MywgMywgMTM3LCAyMjUsIAorICAgIDEzMCwgNDYsIDE4LCAxMCwgMzIsIDE4NCwgMywgODMsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgMTg0LCAzLCAxNTEsIDMsIAorICAgIDEzNywgMjI1LCAxMzAsIDQ2LCAxOCwgMTAsIDMyLCAxODQsIDMsIDgzLCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAKKyAgICAzMiwgMjE0LCAxNjIsIDMsIDIyOSwgMTQxLCAzLCAxMzcsIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAzMiwgMjE1LCAyOSwgMywgCisgICAgMTUxLCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDIxMywgNDAsIDMsIDE1MSwgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyNDQsIAorICAgIDIwOCwgMywgMTUxLCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDE4NCwgMywgODksIDQ2LCAxOCwgMTAsIAorICAgIDMyLCAyMjgsIDI5LCAzLCA4MywgMywgODksIDQ2LCAxOCwgMTAsIDMyLCA4OSwgMywgMTUxLCAzLCA4OSwgNDYsIDE4LCAxMCwgCisgICAgMzIsIDg5LCAzLCAxODQsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgODksIDMsIDgzLCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIAorICAgIDgzLCAzLCA4MywgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyMTcsIDEyMCwgMywgODMsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgCisgICAgMjIxLCAxNzksIDMsIDE1MSwgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyMTcsIDEyMCwgMywgODMsIDMsIDE1MSwgODEsIDE4LCAKKyAgICAxMCwgMzIsIDIyOCwgMjksIDMsIDE1MSwgMywgODMsIDgxLCAxOCwgMTAsIDMyLCAyNTEsIDYwLCAzLCA4MywgMywgODksIAorICAgIDQ2LCAxOCwgMTAsIDMyLCAyMzAsIDIzLCAzLCA4MywgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgMTg0LCAKKyAgICAzLCAxNTEsIDgxLCAxOCwgMTAsIDMyLCA4MywgMywgMjI5LCAxNDEsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgCisgICAgMywgMTg0LCAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDIzMCwgMjMsIDMsIDgzLCAzLCA4MywgNDYsIDE4LCAxMCwgMzIsIAorICAgIDIyOCwgMjksIDMsIDE4NCwgMywgODMsIDQ2LCAxOCwgMTAsIDMyLCAyMjEsIDE3OSwgMywgMTg0LCAzLCAxNTEsIDQ2LCAxOCwgCisgICAgMTAsIDMyLCAxODQsIDMsIDE1MSwgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAxNTEsIDMsIDE4NCwgMywgODksIDQ2LCAxOCwgCisgICAgMTAsIDMyLCA4MywgMywgMTg0LCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDI0MCwgNDgsIDMsIDgzLCAzLCA4OSwgNDYsIDE4LCAKKyAgICAxMCwgMzIsIDI0OCwgMTM5LCAzLCAxNTEsIDMsIDg5LCA0NiwgMTgsIDEwLCAzMiwgMjMwLCAyMywgMywgODMsIDMsIDgzLCAKKyAgICA4MSwgMTgsIDEwLCAzMiwgMjUxLCA2MCwgMywgMTg0LCAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDIxNSwgMjksIDMsIDgzLCAKKyAgICAzLCA4MywgODEsIDE4LCAxMCwgMzIsIDIxNCwgMTYyLCAzLCAyMjksIDE0MSwgMywgODksIDQ2LCAxOCwgMTAsIDMyLCAyMjEsIAorICAgIDE3OSwgMywgMTg0LCAzLCA4OSwgNDYsIDE4LCAxMCwgMzIsIDIxNSwgNCwgMjA2LCAxODgsIDI1MCwgODIsIDIyOCwgMjU0LCAKKyAgICAyMTEsIDYyLCAyLCA2NCwgMTgsIDEwLCAzMiwgMjE3LCAxMTYsIDIwNiwgMTg4LCAyNTAsIDgyLCAyMjgsIDI1NCwgMjExLCAKKyAgICA2MiwgMiwgNjQsIDE4LCAxMCwgMzIsIDI1MSwgMTMsIDY0LCAxOCwgMTAsIDMyLCAyNTEsIDQ0LCA2NCwgMTgsIDEwLCAzMiwgCisgICAgMjI0LCA1NywgNjQsIDE4LCAxMCwgMzIsIDIxNSwgNSwgNjQsIDE4LCAxMCwgMzIsIDIxNiwgMTc0LCA2NCwgMTgsIDEwLCAKKyAgICAzMiwgMjUxLCAzMywgNjQsIDE4LCAxMCwgMzIsIDIwNCwgOTAsIDY0LCAxOCwgMTAsIDMyLCAyMTUsIDQsIDY0LCAxOCwgMTAsIAorICAgIDMyLCAyMTUsIDMsIDI1MSwgMzMsIDIwNCwgODksIDEwLCAzMiwgMjMwLCAxNzIsIDIxNiwgNTYsIDU0LCAxMCwgMzIsIDI0OCwgCisgICAgNTMsIDI1MCwgMTQyLCAyNTAsIDE0MywgNTcsIDIxNCwgMTQ5LCA1NywgMjE0LCAzOCwgNTcsIDIxMywgMjI2LCA1NywgMjEzLCAKKyAgICAyMTUsIDU3LCAyMTMsIDIwNCwgNTcsIDIxMywgMTkzLCA1NywgMjEzLCAxODIsIDU3LCAyMTMsIDE3MSwgNTcsIDIxMywgCisgICAgMTYwLCA1NywgMjE0LCAxNDgsIDU3LCAyMTQsIDEzNywgNTcsIDIxNCwgMTI2LCA1NywgMjE0LCAxMTUsIDU3LCAyMTQsIAorICAgIDEwNCwgNTcsIDIxNCwgOTMsIDU3LCAyMTQsIDgyLCAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgMjQ1LCAyMzMsIDIxNywgCisgICAgMjQxLCAyMzksIDE1OSwgMzUsIDgwLCAxMzksIDI0NSwgMjMzLCAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgMTM5LCAKKyAgICAyMzksIDEwMiwgMjExLCA2MSwgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDI0NSwgMjQyLCAyMTcsIDI0MSwgMjM5LCAKKyAgICAxNTksIDM1LCA4MCwgMjEzLCAxNDMsIDIxNywgMjQxLCAyMzksIDE1OSwgMzUsIDgwLCAyNDAsIDIxMiwgODIsIDIxNywgCisgICAgMjQxLCAyMzksIDE1OSwgMzUsIDgwLCAyMTcsIDQ3LCA4MiwgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDQ5LCA2MSwgCisgICAgMjI3LCAxODUsIDE1NSwgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDUwLCA2MSwgMjI3LCAxODUsIDI0NywgMjI1LCAKKyAgICAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgMjM2LCAxMDYsIDI0MSwgMTA4LCAzOSwgMzIsIDQ5LCAyMzcsIDEzNywgMzksIAorICAgIDMyLCA1MCwgMjM3LCAxMzcsIDM5LCA1MiwgMjA4LCAyMjgsIDQ5LCAyMzcsIDEzNywgMzksIDUyLCAyMDgsIDIyOCwgNTAsIAorICAgIDIzNywgMTM3LCAzOSwgMjI1LCAxNzEsIDQ5LCAyMzcsIDEzNywgMzksIDIyNSwgMTcxLCA1MCwgMjM3LCAxMzcsIDM5LCAKKyAgICAyNDUsIDIwNiwgMjI1LCAxNzAsIDM5LCAzMiwgNDksIDE2MiwgNTYsIDM5LCAzMiwgNTAsIDE2MiwgNTYsIDM5LCAyMDgsIAorICAgIDIyOCwgNDksIDE2MiwgNTYsIDM5LCAyMDgsIDIyOCwgNTAsIDE2MiwgNTYsIDM5LCAyMjUsIDE3MSwgNDksIDE2MiwgNTYsIAorICAgIDM5LCAyMjUsIDE3MSwgNTAsIDE2MiwgNTYsIDM5LCAyNDUsIDIwNiwgMjI1LCAxNzEsIDU2LCAzOSwgMzYsIDIwOCwgMTk4LCAKKyAgICA0OSwgMjM3LCAxMzcsIDM5LCAzNiwgMjA4LCAxOTgsIDUwLCAyMzcsIDEzNywgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIAorICAgIDEyMCwgNzAsIDIyNywgMjMyLCAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgMjQxLCAxMDQsIDI0NCwgMTQ0LCAyMTcsIAorICAgIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgMjQxLCA5MywgMjQ0LCAxNDQsIDIxNywgMjQxLCAyMzksIDE1OSwgMzUsIDgwLCAKKyAgICAxMjQsIDIyNywgMTE0LCAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgMjA0LCA3MiwgMTI0LCAyMjcsIDExNCwgMjE3LCAKKyAgICAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDQ5LCAyMTksIDc2LCAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgNTAsIDIxOSwgCisgICAgNzYsIDIxNywgMjQxLCAyMzksIDE1OSwgMzUsIDgwLCA0OSwgMjQ1LCA5MywgMTU1LCAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCAKKyAgICA4MCwgNTAsIDI0NSwgOTMsIDE1NSwgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDQ5LCAyMDgsIDEzMywgMjEzLCAzMywgCisgICAgMTU1LCAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgNTAsIDIwOCwgMTMzLCAyMTMsIDMzLCAxNTUsIDIxNywgMjQxLCAKKyAgICAyMzksIDE1OSwgMzUsIDgwLCA0OSwgNjIsIDIyNywgMTg1LCAxNTUsIDIxNywgMjQxLCAyMzksIDE1OSwgMzUsIDgwLCA1MCwgCisgICAgNjIsIDIyNywgMTg1LCAxNTUsIDIxNywgMjQxLCAyMzksIDE1OSwgMzUsIDgwLCA0OSwgNTIsIDI1MCwgMjE4LCAxNTUsIAorICAgIDIxNywgMjQxLCAyMzksIDE1OSwgMzUsIDgwLCA1MCwgNTIsIDI1MCwgMjE4LCAxNTUsIDIxNywgMjQxLCAyMzksIDE1OSwgCisgICAgMzUsIDgwLCA0OSwgMjUwLCAyMTgsIDE1NSwgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDUwLCAyNTAsIDIxOCwgMTU1LCAKKyAgICAyMTcsIDI0MSwgMjM5LCAxNTksIDM1LCA4MCwgNDksIDI0NSwgMTY2LCAxNTUsIDIxNywgMjQxLCAyMzksIDE1OSwgMzUsIAorICAgIDgwLCA1MCwgMjQ1LCAxNjYsIDE1NSwgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDQ5LCA2MSwgMjQ1LCAxNjYsIDE1NSwgCisgICAgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDUwLCA2MSwgMjQ1LCAxNjYsIDE1NSwgMjEzLCAxMjEsIDI0MywgODUsIDYxLCAKKyAgICAyMTMsIDEyMSwgMjQzLCA4NSwgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDQ5LCA1MSwgMTU1LCAyMTcsIDI0MSwgCisgICAgMjM5LCAxNTksIDM1LCA4MCwgNTAsIDUxLCAxNTUsIDI0NCwgMTQzLCAyMTksIDE5OCwgMjQ2LCAyMTQsIDIxOSwgMTk4LCAKKyAgICAyMDQsIDcyLCAyMTksIDE5OCwgNTIsIDIwNCwgNzIsIDIxOSwgMTk4LCAyNDQsIDE0MywgMTI0LCAyMjcsIDExNCwgMjQ2LCAKKyAgICAyMTQsIDEyNCwgMjI3LCAxMTQsIDIwNCwgNzIsIDEyNCwgMjI3LCAxMTQsIDUsIDI0NSwgMjMzLCA1LCAxMzksIDI0NSwgCisgICAgMjMzLCA1LCAyMzksIDEwMiwgMjExLCA2MSwgNSwgMjEzLCAxNDMsIDUsIDI0NSwgMjQyLCA1LCAyMTcsIDQ3LCA4MiwgNSwgCisgICAgMjQwLCAyMTIsIDgyLCA1LCAyNDEsIDEwNCwgMjQ0LCAxNDQsIDUsIDQ5LCAyMTksIDc2LCA1LCA1MCwgMjE5LCA3NiwgNSwgCisgICAgNDksIDI0NSwgOTMsIDE1NSwgNSwgNTAsIDI0NSwgOTMsIDE1NSwgNSwgNDksIDIwOCwgMTMzLCAyMTMsIDMzLCAxNTUsIDUsIAorICAgIDUwLCAyMDgsIDEzMywgMjEzLCAzMywgMTU1LCA1LCA0MiwgNTQsIDUsIDI1MCwgMjM1LCA1LCAyNTAsIDU5LCA1LCA5MSwgCisgICAgNTQsIDUsIDIzNSwgMjE5LCA1LCAyMjcsIDE3OSwgNTQsIDUsIDIzNywgMjQ3LCA1NCwgNSwgMjQxLCAzNSwgNTQsIDUsIAorICAgIDIxNiwgNzQsIDIxMiwgMCwgNSwgMjQzLCA5NywgNTQsIDUsIDIxOCwgMjQ2LCA1NCwgNSwgMjQ1LCAyMzEsIDI1MCwgNDksIAorICAgIDEwLCAyNDAsIDcwLCA2NCwgMTgsIDEwLCAyMDksIDIxMCwgMywgMjQwLCA3MCwgNTUsIDEwLCAyNDQsIDE3MSwgNjQsIDE4LCAKKyAgICAxMCwgMjA5LCAyNDksIDIzOSwgMTM3LCAxMCwgMjI5LCAyMjgsIDY0LCAxOCwgMTAsIDI0MCwgNzIsIDY0LCAxOCwgMTAsIAorICAgIDI0MCwgNzIsIDE3NCwgMTgsIDEwLCAyNDQsIDE3MywgNjQsIDE4LCAxMCwgMjQ0LCAxNzMsIDE3NCwgMTgsIDEwLCAyMjksIAorICAgIDIzMCwgNjQsIDE4LCAxMCwgMjI5LCAyMzAsIDE3NCwgMTgsIDEwLCAyMTMsIDgxLCA2NCwgMTgsIDEwLCAyMTMsIDgxLCAKKyAgICAxNzQsIDE4LCAxMCwgMjEwLCAyMjMsIDY0LCAxOCwgMTAsIDIxMCwgMjIzLCAxNzQsIDE4LCAxMCwgMSwgMjM3LCAxMjgsIAorICAgIDY0LCAxOCwgMTAsIDEsIDEzNywgMywgMjI1LCAxNjYsIDg3LCA2NCwgMTgsIDEwLCAxLCAxMzcsIDMsIDIyNSwgMTY2LCA4NywgCisgICAgNDYsIDE4LCAxMCwgMSwgMTM3LCAzLCAyMzcsIDEyOCwgODcsIDY0LCAxOCwgMTAsIDEsIDEzNywgMywgMjM3LCAxMjgsIDg3LCAKKyAgICA0NiwgMTgsIDEwLCAxLCAyMDQsIDcxLCAzLCAyMzcsIDEyOCwgODcsIDY0LCAxOCwgMTAsIDEsIDIwNCwgNzEsIDMsIDIzNywgCisgICAgMTI4LCA4NywgNDYsIDE4LCAxMCwgMSwgMTM3LCAzLCAyMzcsIDEyOCwgMjQ4LCAxMjYsIDY0LCAxOCwgMTAsIDEsIDEzNywgCisgICAgMywgMjM3LCAxMjgsIDI0OCwgMTI2LCA0NiwgMTgsIDEwLCAxLCA4OSwgMywgMjM3LCAxMjgsIDg3LCA2NCwgMTgsIDEwLCAxLCAKKyAgICA4OSwgMywgMjM3LCAxMjgsIDg3LCA0NiwgMTgsIDEwLCAxLCA4OSwgMywgMjM3LCAxMjgsIDg3LCA4MSwgMTgsIDEwLCAxLCAKKyAgICA4OSwgMywgMjM3LCAxMjgsIDg3LCAxNzQsIDE4LCAxMCwgMSwgMTM3LCA2NCwgMTgsIDEwLCAxLCAxMzcsIDQ2LCAxOCwgMTAsIAorICAgIDEsIDI0OCwgMTM5LCA2NCwgMTgsIDEwLCAxLCAyNDgsIDEzOSwgNDYsIDE4LCAxMCwgMSwgMjQ4LCAxMzksIDgxLCAxOCwgCisgICAgMTAsIDEsIDI0OCwgMTM5LCAxNzQsIDE4LCAxMCwgMSwgMjA5LCAxNzAsIDIyNSwgOTksIDY0LCAxOCwgMTAsIDEsIDIwOSwgCisgICAgMTcwLCAyMjUsIDk5LCA0NiwgMTgsIDEwLCAxLCAyMDksIDE3MCwgNjQsIDE4LCAxMCwgMSwgMjA5LCAxNzAsIDQ2LCAxOCwgCisgICAgMTAsIDEsIDIwOSwgMTcwLCA4MSwgMTgsIDEwLCAxLCAyMDksIDE3MCwgMTc0LCAxOCwgMTAsIDEsIDIwOSwgODksIDY0LCAKKyAgICAxOCwgMTAsIDEsIDIwOSwgODksIDQ2LCAxOCwgMTAsIDEsIDIwOSwgODksIDgxLCAxOCwgMTAsIDEsIDIwOSwgODksIDE3NCwgCisgICAgMTgsIDEwLCAxLCAxODQsIDY0LCAxOCwgMTAsIDEsIDE4NCwgNDYsIDE4LCAxMCwgMSwgMTg0LCA4MSwgMTgsIDEwLCAxLCAKKyAgICAxODQsIDE3NCwgMTgsIDEwLCAxLCAxNTEsIDY0LCAxOCwgMTAsIDEsIDE1MSwgNDYsIDE4LCAxMCwgMSwgMTUxLCA4MSwgMTgsIAorICAgIDEwLCAxLCAxNTEsIDE3NCwgMTgsIDEwLCAxLCAyMjksIDE0MSwgNjQsIDE4LCAxMCwgMSwgMjI5LCAxNDEsIDQ2LCAxOCwgCisgICAgMTAsIDEsIDIyOSwgMTQxLCA4MSwgMTgsIDEwLCAxLCAyMjksIDE0MSwgMTc0LCAxOCwgMTAsIDEsIDI0NCwgMTg1LCA2NCwgCisgICAgMTgsIDEwLCAxLCAyNDQsIDE4NSwgNDYsIDE4LCAxMCwgMSwgMjA5LCAxMDEsIDY0LCAxOCwgMTAsIDEsIDIwOSwgMTAxLCAKKyAgICA0NiwgMTgsIDEwLCAxLCAyMTYsIDEyMywgNjQsIDE4LCAxMCwgMSwgMjE2LCAxMjMsIDQ2LCAxOCwgMTAsIDEsIDIwMiwgCisgICAgMTA4LCA2NCwgMTgsIDEwLCAxLCAyMDIsIDEwOCwgNDYsIDE4LCAxMCwgMSwgMjE0LCAxNjIsIDY0LCAxOCwgMTAsIDEsIAorICAgIDIxNCwgMTYyLCA0NiwgMTgsIDEwLCAxLCAyMTQsIDE2MiwgODEsIDE4LCAxMCwgMSwgMjE0LCAxNjIsIDE3NCwgMTgsIDEwLCAKKyAgICAxLCAyMTMsIDQwLCA2NCwgMTgsIDEwLCAxLCAyMTMsIDQwLCA0NiwgMTgsIDEwLCAxLCAyMTMsIDQwLCA4MSwgMTgsIDEwLCAKKyAgICAxLCAyMTMsIDQwLCAxNzQsIDE4LCAxMCwgMSwgMjE1LCAyOSwgNjQsIDE4LCAxMCwgMSwgMjE1LCAyOSwgNDYsIDE4LCAxMCwgCisgICAgMSwgMjE1LCAyOSwgODEsIDE4LCAxMCwgMSwgMjE1LCAyOSwgMTc0LCAxOCwgMTAsIDEsIDI0NCwgMjA4LCA2NCwgMTgsIDEwLCAKKyAgICAxLCAyNDQsIDIwOCwgNDYsIDE4LCAxMCwgMSwgMjQ0LCAyMDgsIDgxLCAxOCwgMTAsIDEsIDI0NCwgMjA4LCAxNzQsIDE4LCAKKyAgICAxMCwgMSwgMjA5LCAyNTIsIDY0LCAxOCwgMTAsIDEsIDIwOSwgMjUyLCA0NiwgMTgsIDEwLCAxLCAyMDksIDI1MiwgODEsIAorICAgIDE4LCAxMCwgMSwgMjA5LCAyNTIsIDE3NCwgMTgsIDEwLCAxLCAyMDIsIDExMSwgNjQsIDE4LCAxMCwgMSwgMjAyLCAxMTEsIAorICAgIDQ2LCAxOCwgMTAsIDEsIDIwMiwgMTExLCA4MSwgMTgsIDEwLCAxLCAyMDIsIDExMSwgMTc0LCAxOCwgMTAsIDEsIDI1MSwgCisgICAgNjAsIDY0LCAxOCwgMTAsIDEsIDI1MSwgNjAsIDQ2LCAxOCwgMTAsIDEsIDI1MSwgNjAsIDgxLCAxOCwgMTAsIDEsIDI1MSwgCisgICAgNjAsIDE3NCwgMTgsIDEwLCAxLCAyMzgsIDExNSwgNjQsIDE4LCAxMCwgMSwgMjM4LCAxMTUsIDQ2LCAxOCwgMTAsIDEsIAorICAgIDIzOCwgMTE1LCA4MSwgMTgsIDEwLCAxLCAyMzgsIDExNSwgMTc0LCAxOCwgMTAsIDEsIDI0MCwgNDgsIDY0LCAxOCwgMTAsIAorICAgIDEsIDI0MCwgNDgsIDQ2LCAxOCwgMTAsIDEsIDI0MCwgNDgsIDgxLCAxOCwgMTAsIDEsIDI0MCwgNDgsIDE3NCwgMTgsIDEwLCAKKyAgICAxLCAyMTcsIDEyMCwgNjQsIDE4LCAxMCwgMSwgMjE3LCAxMjAsIDQ2LCAxOCwgMTAsIDEsIDIxNywgMTIwLCA4MSwgMTgsIAorICAgIDEwLCAxLCAyMTcsIDEyMCwgMTc0LCAxOCwgMTAsIDEsIDIzMCwgMjMsIDY0LCAxOCwgMTAsIDEsIDIzMCwgMjMsIDQ2LCAxOCwgCisgICAgMTAsIDEsIDIzMCwgMjMsIDgxLCAxOCwgMTAsIDEsIDIzMCwgMjMsIDE3NCwgMTgsIDEwLCAxLCAyMjgsIDI5LCA2NCwgMTgsIAorICAgIDEwLCAxLCAyMjgsIDI5LCA0NiwgMTgsIDEwLCAxLCAyMjgsIDI5LCA4MSwgMTgsIDEwLCAxLCAyMjgsIDI5LCAxNzQsIDE4LCAKKyAgICAxMCwgMSwgODMsIDY0LCAxOCwgMTAsIDEsIDgzLCA0NiwgMTgsIDEwLCAxLCA4MywgODEsIDE4LCAxMCwgMSwgODMsIDE3NCwgCisgICAgMTgsIDEwLCAxLCAyMjEsIDE3OSwgNjQsIDE4LCAxMCwgMSwgMjIxLCAxNzksIDQ2LCAxOCwgMTAsIDEsIDIyMSwgMTc5LCAKKyAgICA4MSwgMTgsIDEwLCAxLCAyMjEsIDE3OSwgMTc0LCAxOCwgMTAsIDEsIDIzNywgNDQsIDY0LCAxOCwgMTAsIDEsIDIzNywgNDQsIAorICAgIDQ2LCAxOCwgMTAsIDEsIDIzNywgNDQsIDgxLCAxOCwgMTAsIDEsIDIzNywgNDQsIDE3NCwgMTgsIDEwLCAxLCAyMDQsIDcxLCAKKyAgICA2NCwgMTgsIDEwLCAxLCAyMDQsIDcxLCA0NiwgMTgsIDEwLCAxLCAxMzcsIDIyNSwgMTMwLCA2NCwgMTgsIDEwLCAxLCAxMzcsIAorICAgIDIyNSwgMTMwLCA0NiwgMTgsIDEwLCAxLCA4OSwgNjQsIDE4LCAxMCwgMSwgODksIDQ2LCAxOCwgMTAsIDEsIDg5LCA4MSwgCisgICAgMTgsIDEwLCAxLCA4OSwgMTc0LCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAzLCAxMzcsIDMsIDIyNSwgMTY2LCA4NywgNjQsIDE4LCAKKyAgICAxMCwgMzIsIDIyOCwgMjksIDMsIDEzNywgMywgMjI1LCAxNjYsIDg3LCA0NiwgMTgsIDEwLCAzMiwgMjI4LCAyOSwgMywgCisgICAgMTM3LCAzLCAyMzcsIDEyOCwgODcsIDY0LCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAzLCAxMzcsIDMsIDIzNywgMTI4LCA4NywgCisgICAgNDYsIDE4LCAxMCwgMzIsIDIyOCwgMjksIDMsIDEzNywgMywgMjM3LCAxMjgsIDI0OCwgMTI2LCA2NCwgMTgsIDEwLCAzMiwgCisgICAgMjI4LCAyOSwgMywgMTM3LCAzLCAyMzcsIDEyOCwgMjQ4LCAxMjYsIDQ2LCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAzLCAxMzcsIAorICAgIDY0LCAxOCwgMTAsIDMyLCAyMjgsIDI5LCAzLCAxMzcsIDQ2LCAxOCwgMjAyLCA4NSwgMjA0LCAyNCwgMjIxLCAxOTAsIDIxMSwgCisgICAgMjI4LCAxNTQsIDI0MCwgMjEyLCA4MiwgMTU0LCAyMTcsIDMxLCA4MiwgMTU0LCA0MiwgNTQsIDE1NCwgMjQzLCA5NywgNTQsIAorICAgIDE1NCwgMjE4LCAyNDYsIDU0LCAxNTQsIDI1MCwgMjM1LCAxNTQsIDI1MCwgMTYwLCAxNTQsIDQ5LCAyMTksIDc2LCAxNTQsIAorICAgIDUwLCAyMTksIDc2LCAxNTQsIDI1MCwgNTksIDE1NCwgOTEsIDU0LCAxNTQsIDI0NSwgMjMzLCAxNTQsIDIzNSwgMjE5LCAKKyAgICAxNTQsIDIzOSwgMTAyLCAyMTEsIDYxLCAxNTQsIDIxMiwgMCwgMTU0LCAxNywgMjAyLCA4NCwgMTU0LCAxNywgMTA1LCAxNTQsIAorICAgIDE3LCAxMDgsIDE1NCwgMTcsIDE0NywgMTU0LCAxNywgMTQ5LCAxNTQsIDE3LCAxNzAsIDE1NCwgMTcsIDE5NSwgMTU0LCAxNywgCisgICAgMjEzLCAxMTEsIDE1NCwgMTcsIDE5OSwgMTU0LCAxNywgMjIyLCA2MywgMTU0LCAyNDUsIDI0MiwgMTU0LCAyMTMsIDE0MywgCisgICAgMTU0LCAyMjcsIDE3OSwgNTQsIDE1NCwgMjQxLCAzNSwgNTQsIDE1NCwgMjM3LCAyNDcsIDU0LCAxNTQsIDIxNywgNDcsIDgyLCAKKyAgICAxNTQsIDI0NSwgMjMxLCAyNTAsIDQ5LCAxNTQsIDgsIDYsIDEsIDYzLCAxNTQsIDgsIDYsIDEsIDI0OSwgMjU1LCAxNTQsIDgsIAorICAgIDYsIDEsIDI0NywgMTI1LCAxNTQsIDgsIDYsIDEsIDI0NSwgNTEsIDE1NCwgOCwgNiwgMSwgNzQsIDE1NCwgOCwgNiwgMSwgCisgICAgMjQwLCAxNzQsIDE1NCwgOCwgNiwgMSwgMjM5LCA3NSwgMTU0LCA4LCA2LCAxLCAyMzcsIDE3MSwgMTU0LCA4LCA2LCAxLCAKKyAgICA3NSwgMTU0LCA4LCA2LCAxLCAyMzAsIDE4NCwgMTU0LCA4LCA2LCAxLCAyMzAsIDU0LCAxNTQsIDgsIDYsIDEsIDE1OSwgCisgICAgMTU0LCA4LCA2LCAxLCAyMjYsIDE4NSwgMTU0LCA4LCA2LCAxLCAyMjMsIDE2MywgMTU0LCA4LCA2LCAxLCA3OCwgMTU0LCA4LCAKKyAgICA2LCAxLCAyMTksIDE4NCwgMTU0LCA4LCA2LCAxLCAyMTcsIDEzNCwgMTU0LCA4LCA2LCAxLCAxNDYsIDE1NCwgOCwgNiwgMSwgCisgICAgMTk0LCAxNTQsIDgsIDYsIDEsIDIxMCwgNjksIDE1NCwgOCwgNiwgMSwgNjgsIDE1NCwgOCwgNiwgMSwgMjA2LCAxNjQsIAorICAgIDE1NCwgOCwgNiwgMSwgMjA0LCAxNDQsIDE1NCwgOCwgNiwgMSwgMjAzLCAxOTYsIDE1NCwgOCwgNiwgMSwgMjAzLCAxMjQsIAorICAgIDE1NCwgOCwgNiwgMSwgMjAyLCAxNTksIDE1NCwgNDksIDUxLCAxNTUsIDE1NCwgMjE2LCA3NCwgMjEyLCAwLCAxNTQsIDUwLCAKKyAgICA1MSwgMTU1LCAxNTQsIDI0NiwgNTMsIDI1MSwgMTM4LCAxNTQsIDEyNCwgMjI3LCAxMTQsIDE1NCwgMjM3LCAyNTQsIDI1MSwgCisgICAgMTM4LCAxNTQsIDgsIDUsIDEsIDYzLCAxNTQsIDgsIDUsIDEsIDI0OSwgMjU1LCAxNTQsIDgsIDUsIDEsIDI0NywgMTI1LCAKKyAgICAxNTQsIDgsIDUsIDEsIDI0NSwgNTEsIDE1NCwgOCwgNSwgMSwgNzQsIDE1NCwgOCwgNSwgMSwgMjQwLCAxNzQsIDE1NCwgOCwgCisgICAgNSwgMSwgMjM5LCA3NSwgMTU0LCA4LCA1LCAxLCAyMzcsIDE3MSwgMTU0LCA4LCA1LCAxLCA3NSwgMTU0LCA4LCA1LCAxLCAKKyAgICAyMzAsIDE4NCwgMTU0LCA4LCA1LCAxLCAyMzAsIDU0LCAxNTQsIDgsIDUsIDEsIDE1OSwgMTU0LCA4LCA1LCAxLCAyMjYsIAorICAgIDE4NSwgMTU0LCA4LCA1LCAxLCAyMjMsIDE2MywgMTU0LCA4LCA1LCAxLCA3OCwgMTU0LCA4LCA1LCAxLCAyMTksIDE4NCwgCisgICAgMTU0LCA4LCA1LCAxLCAyMTcsIDEzNCwgMTU0LCA4LCA1LCAxLCAxNDYsIDE1NCwgOCwgNSwgMSwgMTk0LCAxNTQsIDgsIDUsIAorICAgIDEsIDIxMCwgNjksIDE1NCwgOCwgNSwgMSwgNjgsIDE1NCwgOCwgNSwgMSwgMjA2LCAxNjQsIDE1NCwgOCwgNSwgMSwgMjA0LCAKKyAgICAxNDQsIDE1NCwgOCwgNSwgMSwgMjAzLCAxOTYsIDE1NCwgOCwgNSwgMSwgMjAzLCAxMjQsIDE1NCwgOCwgNSwgMSwgMjAyLCAKKyAgICAxNTksIDE1NCwgNDksIDI0NSwgOTMsIDE1NSwgMTU0LCA4MCwgMjI3LCAxMTQsIDE1NCwgNTAsIDI0NSwgOTMsIDE1NSwgCisgICAgMTU0LCAyMDgsIDIyNywgMTU0LCA0OSwgNjEsIDIxOSwgNzYsIDE1NCwgNTAsIDYxLCAyMTksIDc2LCAxMjcsIDEzOSwgMjM5LCAKKyAgICAxMDIsIDIxMSwgNjEsIDEyNywgNDksIDI0NSwgMTY2LCAxNTUsIDEyNywgNTAsIDI0NSwgMTY2LCAxNTUsIDEyNywgMTM5LCAKKyAgICAyNDUsIDIzMywgMTI3LCA2NywgMTAxLCAyNDMsIDg1LCAxMjcsIDY3LCAxLCAyMDQsIDAsIDEyNywgNjcsIDEsIDUsIDYzLCAKKyAgICAxMjcsIDY3LCAxLCA1LCA3NSwgMTI3LCA2NywgMSwgNSwgNjgsIDEyNywgNjcsIDEsIDUsIDc0LCAxMjcsIDY3LCAxLCA1LCAKKyAgICA3OCwgMTI3LCA2NywgMSwgNSwgMTk4LCAxMjcsIDY3LCAxLCA1LCAyMDIsIDIxMywgMTI3LCA2NywgMSwgNSwgMjAyLCAyNDcsIAorICAgIDEyNywgNjcsIDEsIDUsIDIwNywgMjAzLCAxMjcsIDIyOSwgMjI1LCAyMTcsIDIxNSwgMjExLCAyNDEsIDgyLCAxMjcsIDY3LCAKKyAgICAxLCA2MywgMTI3LCA2NywgMSwgNzUsIDEyNywgNjcsIDEsIDY4LCAxMjcsIDY3LCAxLCA3NCwgMTI3LCA2NywgMSwgNzgsIAorICAgIDEyNywgNjcsIDEsIDE3MywgMTI3LCA2NywgMSwgMjI5LCAxMDAsIDEyNywgNjcsIDEsIDIyOCwgMjA5LCAxMjcsIDY3LCAxLCAKKyAgICAyMjksIDIwMSwgMTI3LCA2NywgMSwgMjI5LCAyNiwgMTI3LCA2NywgMSwgMjE1LCAzNiwgMTI3LCA2NywgMSwgMjEyLCAxNjIsIAorICAgIDEyNywgNjcsIDEsIDIxMSwgMTAsIDEyNywgNjcsIDEsIDIxNCwgMTc3LCAxMjcsIDY3LCAxLCAyMTIsIDEzLCAxMjcsIDY3LCAKKyAgICAxLCAyMTAsIDIyLCAxMjcsIDY3LCAxLCAyMDksIDIsIDEyNywgNjcsIDEsIDIwNywgMjAzLCAxMjcsIDY3LCAxLCAyMDksIAorICAgIDE4NywgMTI3LCA2NywgMSwgMTM1LCAxMjcsIDY3LCAxLCAyMDEsIDIwMSwgMTI3LCA2NywgMSwgMjIyLCAxMDAsIDEyNywgCisgICAgNjcsIDEsIDIyMSwgODQsIDEyNywgNjcsIDEsIDIyMiwgMjQwLCAxMjcsIDY3LCAxLCAyMjEsIDE5MSwgMTI3LCA2NywgMSwgCisgICAgMTUyLCAxMjcsIDY3LCAxLCAyMzcsIDMsIDEyNywgNjcsIDEsIDIzNiwgMjYsIDEyNywgNjcsIDEsIDIzNywgNjcsIDEyNywgCisgICAgNjcsIDEsIDIzNiwgMTM2LCAxMjcsIDY3LCAxLCAxOTIsIDEyNywgNjcsIDEsIDIyNCwgMTU1LCAxMjcsIDY3LCAxLCAyMjMsIAorICAgIDI0NiwgMTI3LCA2NywgMSwgMjI1LCAyMCwgMTI3LCA2NywgMSwgMjI0LCA4MiwgMTI3LCA2NywgMSwgMTk4LCAxMjcsIDY3LCAKKyAgICAxLCAyMDIsIDIxMywgMTI3LCA2NywgMSwgMjAyLCAyNDcsIDEyNywgNjcsIDEsIDIxNiwgMjIwLCAxMjcsIDY3LCAxLCAyMTYsIAorICAgIDU3LCAxMjcsIDY3LCAxLCAyMTUsIDE0NSwgMTI3LCA2NywgMSwgMjE2LCAxNTgsIDEyNywgNjcsIDEsIDIxNSwgMjI3LCAKKyAgICAxMjcsIDY3LCAxLCAyMDQsIDExMSwgMTI3LCA2NywgMSwgMjIzLCAxNjMsIDEyNywgNjcsIDIwNSwgMTg2LCAyMTEsIDI0MSwgCisgICAgODIsIDEyNywgNjcsIDIxMywgMTQ4LCAyMTEsIDI0MSwgODIsIDEyNywgMjgsIDI0MCwgNywgMTI3LCAyOCwgMSwgMjI5LCAKKyAgICA1OSwgMTI3LCAyOCwgMSwgMjExLCAxNTYsIDEyNywgMjgsIDEsIDIyOSwgNTIsIDEyNywgMjgsIDEsIDIyMiwgOTMsIDEyNywgCisgICAgMjgsIDEsIDIyMiwgOTEsIDEyNywgMjgsIDEsIDIyMiwgOTAsIDEyNywgMjgsIDEsIDIwOCwgMjQwLCAxMjcsIDI4LCAxLCAKKyAgICAyMTEsIDE0NSwgMTI3LCAyOCwgMSwgMjE2LCA0NywgMTI3LCAyOCwgMSwgMjE2LCA0MiwgMTI3LCAyOCwgMSwgMjE2LCAzOSwgCisgICAgMTI3LCAyOCwgMSwgMjE2LCAzMiwgMTI3LCAyOCwgMSwgMjE2LCAyNywgMTI3LCAyOCwgMSwgMjE2LCAyMiwgMTI3LCAyOCwgCisgICAgMSwgMjE2LCAzMywgMTI3LCAyOCwgMSwgMjE2LCA0NSwgMTI3LCAyOCwgMSwgMjI0LCAxNDEsIDEyNywgMjgsIDEsIDIxOCwgCisgICAgMTUzLCAxMjcsIDI4LCAxLCAyMTEsIDE1MywgMTI3LCAyOCwgMSwgMjE4LCAxNDIsIDEyNywgMjgsIDEsIDIxMiwgMTExLCAKKyAgICAxMjcsIDI4LCAxLCAyMTEsIDE1MCwgMTI3LCAyOCwgMSwgMjMxLCAxMDYsIDEyNywgMjgsIDEsIDI0NiwgNzQsIDEyNywgMjgsIAorICAgIDEsIDIxMSwgMTYwLCAxMjcsIDI4LCAxLCAyNDYsIDEzOCwgMTI3LCAyOCwgMSwgMjI5LCAxMjAsIDEyNywgMjgsIDEsIDIwOSwgCisgICAgNjYsIDEyNywgMjgsIDEsIDIxOCwgMTkwLCAxMjcsIDI4LCAxLCAyMzYsIDI1MSwgMTI3LCAyOCwgMSwgNjMsIDEyNywgMjgsIAorICAgIDEsIDI1MSwgMTA5LCAxMjcsIDI4LCAxLCAxOTgsIDEyNywgMjgsIDEsIDIwMywgOTksIDEyNywgMjgsIDEsIDI0MSwgNTUsIAorICAgIDEyNywgMjgsIDEsIDc0LCAxMjcsIDI4LCAxLCAyMDMsIDM5LCAxMjcsIDI4LCAxLCAyMDMsIDUyLCAxMjcsIDI4LCAxLCA3OCwgCisgICAgMTI3LCAyOCwgMSwgMjA0LCAxMTEsIDEyNywgMjgsIDEsIDIwNCwgMTA3LCAxMjcsIDI4LCAxLCAyMjAsIDczLCAxMjcsIDI4LCAKKyAgICAxLCAyMDIsIDI0NywgMTI3LCAyOCwgMSwgNjgsIDEyNywgMjgsIDEsIDIwNCwgNDgsIDEyNywgMjgsIDEsIDIwNCwgNjIsIAorICAgIDEyNywgMjgsIDEsIDIwNCwgMzAsIDEyNywgMjgsIDEsIDIwMiwgMjEzLCAxMjcsIDI4LCAxLCAyNDAsIDIzOCwgMTI3LCAyOCwgCisgICAgMSwgMjAzLCAxMSwgMTI3LCAyOCwgMSwgNzUsIDE1NCwgMjQ2LCAyMjAsIDU0LCAxNTQsIDIxOCwgMjAsIDU0LCAxNTQsIAorICAgIDIyMSwgMTY2LCA1NCwgMTU0LCAyMjUsIDE3MCwgMTU0LCAyNDcsIDIwMywgMTQyLCAxNTQsIDIwMywgNDMsIDU0LCAxNTQsIAorICAgIDIwMywgMjQ2LCA1NCwgMTI3LCAyMzksIDE1NiwgMTU3LCAyMDYsIDM4LCAxMjcsIDk2LCA0NywgMTI3LCAxNzcsIDQ3LCAKKyAgICAxMjcsIDg2LCA0NywgMTI3LCAxODMsIDQ3LCAxMjcsIDYyLCAyMTEsIDE3NywgMTI3LCA2MSwgMjQ2LCA2MSwgMjMwLCAyNTEsIAorICAgIDI1MCwgMjA1LCAyNTAsIDIyOCwgMjMwLCAyNTEsIDI1MCwgMjA1LCAyMTMsIDEzMCwgMjMwLCAyNTEsIDI1MCwgMjA1LCAKKyAgICAyMDksIDEzOCwgMjIwLCA5MCwgMjE2LCA5NiwgMjQ2LCAxODIsIDIxNiwgOTYsIDI0NiwgMTgyLCAyOSwgNjYsIDQsIDI0OSwgCisgICAgMjM5LCA2MywgMjksIDY2LCA0LCAyNDksIDIwOCwgNzQsIDI5LCA2NiwgNCwgMjQ5LCAyMTcsIDc1LCAyOSwgNjYsIDQsIAorICAgIDI0OSwgMTg1LCA3OCwgMjksIDY2LCA0LCAyNDksIDIzNSwgNjgsIDI5LCA2NiwgNCwgMjQ5LCAyNTQsIDI0NCwgMjEyLCAyOSwgCisgICAgNjYsIDQsIDI0OSwgMjAxLCAyNDQsIDc1LCAyOSwgNjYsIDQsIDI0OSwgMjQxLCAyNDMsIDIzMywgMjksIDY2LCA0LCAyNDksIAorICAgIDIzMSwgMjQzLCAxMTMsIDI5LCA2NiwgNCwgMjQ5LCAxOTUsIDI0MiwgNDIsIDI5LCA2NiwgNCwgMjQ5LCAxODksIDIzMCwgCisgICAgMTgxLCAyOSwgNjYsIDQsIDI0OSwgMjAwLCAyMzAsIDE2MSwgMjksIDY2LCA0LCAyNDksIDIxMCwgMjMwLCAxMDEsIDI5LCAKKyAgICA2NiwgNCwgMjQ5LCAxODEsIDIzMCwgODIsIDI5LCA2NiwgNCwgMjQ5LCAxNjksIDE3MywgMjksIDY2LCA0LCAyNDksIDIwMiwgCisgICAgMjI5LCAyMDEsIDI5LCA2NiwgNCwgMjQ5LCAxNzksIDIyOSwgMTAwLCAyOSwgNjYsIDQsIDI0OSwgMTc2LCAyMjksIDI2LCAKKyAgICAyOSwgNjYsIDQsIDI0OSwgMTY1LCAyMjgsIDIwOSwgMjksIDY2LCA0LCAyNDksIDE2NiwgMTkyLCAyOSwgNjYsIDQsIDI0OSwgCisgICAgMjMyLCAyMjUsIDIwLCAyOSwgNjYsIDQsIDI0OSwgMTczLCAyMjQsIDE1NSwgMjksIDY2LCA0LCAyNDksIDIzMCwgMjI0LCAKKyAgICA4MiwgMjksIDY2LCA0LCAyNDksIDIyMiwgMjIzLCAyNDYsIDI5LCA2NiwgNCwgMjQ5LCAyNDMsIDIwMSwgMjAxLCAyOSwgNjYsIAorICAgIDQsIDI0OSwgMjIxLCAyMjIsIDI0MCwgMjksIDY2LCA0LCAyNDksIDIxNSwgMjIyLCAxMDAsIDI5LCA2NiwgNCwgMjQ5LCAKKyAgICAxOTQsIDIyMSwgMTkxLCAyOSwgNjYsIDQsIDI0OSwgMTkxLCAyMjEsIDg0LCAyOSwgNjYsIDQsIDI0OSwgMjUwLCAxODUsIAorICAgIDI5LCA2NiwgNCwgMjQ5LCAxNzQsIDIxOSwgMzQsIDI5LCA2NiwgNCwgMjQ5LCAyMDcsIDIxOCwgMTY3LCAyOSwgNjYsIDQsIAorICAgIDI0OSwgMjM0LCAyMTgsIDY5LCAyOSwgNjYsIDQsIDI0OSwgMTk2LCAyMTcsIDE5MSwgMjksIDY2LCA0LCAyNDksIDIyOSwgCisgICAgMjE3LCAxMjYsIDI5LCA2NiwgNCwgMjQ5LCAxNjgsIDIxNywgMTA2LCAyOSwgNjYsIDQsIDI0OSwgMjI0LCAyMTcsIDg4LCAKKyAgICAyOSwgNjYsIDQsIDI0OSwgMjEzLCAyMTcsIDc3LCAyOSwgNjYsIDQsIDI0OSwgMTg2LCAyMTYsIDIyMCwgMjksIDY2LCA0LCAKKyAgICAyNDksIDIxOCwgMjE2LCAxNTgsIDI5LCA2NiwgNCwgMjQ5LCAxOTMsIDIxNiwgNTcsIDI5LCA2NiwgNCwgMjQ5LCAyNTIsIAorICAgIDIxNSwgMjI3LCAyOSwgNjYsIDQsIDI0OSwgMjE5LCAyMTUsIDE0NSwgMjksIDY2LCA0LCAyNDksIDIxNCwgMjE1LCAzNiwgCisgICAgMjksIDY2LCA0LCAyNDksIDIzNywgMjE0LCAxNzcsIDI5LCA2NiwgNCwgMjQ5LCAyMDUsIDIxMiwgMTYyLCAyOSwgNjYsIDQsIAorICAgIDI0OSwgMjMzLCAyMTIsIDEzLCAyOSwgNjYsIDQsIDI0OSwgMTg4LCAyMTEsIDEwLCAyOSwgNjYsIDQsIDI0OSwgMTg3LCAKKyAgICAyMTAsIDIyLCAyOSwgNjYsIDQsIDI0OSwgMjQ4LCAyMDksIDE4NywgMjksIDY2LCA0LCAyNDksIDIwOSwgMjA5LCAyLCAyOSwgCisgICAgNjYsIDQsIDI0OSwgMjQ2LCAxMzUsIDI5LCA2NiwgNCwgMjQ5LCAxNzcsIDIwNywgMjAzLCAyOSwgNjYsIDQsIDI0OSwgMTkyLCAKKyAgICAyMDQsIDExMSwgMjksIDY2LCA0LCAyNDksIDE3MSwgMjA0LCA2MiwgMjksIDY2LCA0LCAyNDksIDIwNiwgMjA0LCAzMCwgMjksIAorICAgIDY2LCA0LCAyNDksIDIwNCwgMjA0LCAwLCAyOSwgNjYsIDQsIDI0OSwgMjI4LCAyMDIsIDExNiwgMjksIDY2LCA0LCAyNDksIAorICAgIDE3MiwgMjAyLCA5MiwgMjksIDY2LCA0LCAyNDksIDIyNSwgMjAyLCAxNywgMjksIDY2LCA0LCAyNDksIDIyMCwgMjU0LCAzNCwgCisgICAgMjksIDY2LCA0LCAyNDksIDIwMywgMjUzLCAxNzgsIDI5LCA2NiwgNCwgMjQ5LCAxNjIsIDI1MCwgMzQsIDI5LCA2NiwgNCwgCisgICAgMjQ5LCAxNzUsIDI0MiwgOSwgMjksIDY2LCA0LCAyNDksIDE1OCwgMjQyLCA4LCAyOSwgNjYsIDQsIDI0OSwgMTk4LCAyMjEsIAorICAgIDIwLCAyOSwgNjYsIDQsIDI0OSwgMjE2LCAyMTcsIDE4OSwgMjksIDY2LCA0LCAyNDksIDE4NCwgMjE3LCAxOTMsIDI5LCA2NiwgCisgICAgNCwgMjQ5LCAxNzAsIDIxNiwgMjE4LCAyOSwgNjYsIDQsIDI0OSwgMjEyLCAyMTYsIDIxNywgMjksIDY2LCA0LCAyNDksIAorICAgIDE3OCwgMjE1LCAyMjYsIDI5LCA2NiwgNCwgMjQ5LCAxODAsIDIxMCwgMTksIDI5LCA2NiwgNCwgMjQ5LCAxNjAsIDIwNywgCisgICAgMTU4LCAyOSwgNjYsIDQsIDI0OSwgMTU3LCAxMDgsIDI5LCA2NiwgMTYsIDI0OSwgMjI3LCAyOSwgNjYsIDE2LCAyNDksIAorICAgIDIyNiwgMjksIDY2LCAxNiwgMjQ5LCAyMjMsIDI5LCA2NiwgMTYsIDI0OSwgMjExLCAyOSwgNjYsIDE2LCAyNDksIDE5OSwgCisgICAgMjksIDY2LCAxNiwgMjQ5LCAxOTcsIDI5LCA2NiwgMTYsIDI0OSwgMTkwLCAyOSwgNjYsIDE2LCAyNDksIDE4MywgMjksIDY2LCAKKyAgICAxNiwgMjQ5LCAxODIsIDI5LCA2NiwgMTYsIDI0OSwgMTY3LCAyOSwgNjYsIDE2LCAyNDksIDE2NCwgMjksIDY2LCAxNiwgCisgICAgMjQ5LCAxNjMsIDI5LCA2NiwgMTYsIDI0OSwgMTYxLCAyOSwgNjYsIDE2LCAyNDksIDE1OSwgMjksIDY2LCAxMzMsIDI0OSwgCisgICAgMTU2LCAyMjUsIDEyMiwgMjksIDY2LCAxMzMsIDI0OSwgMTU1LCAyMDMsIDI1MCwgMjksIDY2LCAxMzMsIDI0OSwgMTU0LCAKKyAgICAyNDQsIDU4LCAyOSwgNjYsIDEzMywgMjQ5LCAxNTMsIDI0MSwgMzIsIDI5LCA2NiwgMTMzLCAyNDksIDE1MiwgMjI1LCA5MywgCisgICAgMjksIDY2LCAxMzMsIDI0OSwgMTUxLCAyMTEsIDEwMSwgMjksIDY2LCAxMzMsIDI0OSwgMTUwLCAyNDAsIDIxOSwgMjksIDY2LCAKKyAgICAxMzMsIDI0OSwgMTQ5LCAyMTYsIDE4NCwgMjksIDY2LCAxMzMsIDI0OSwgMTQ4LCAyMTMsIDQyLCAyOSwgNjYsIDEzMywgCisgICAgMjQ5LCAxNDcsIDIzNywgNjYsIDI5LCA2NiwgMTMzLCAyNDksIDE0NiwgMjExLCAyMzUsIDI5LCA2NiwgMTMzLCAyNDksIAorICAgIDE0NSwgMjQ4LCAyMSwgMjksIDY2LCAxMzMsIDI0OSwgMTQ0LCAyNDUsIDE0OSwgMjksIDY2LCAxMzMsIDI0OSwgMTQzLCAKKyAgICAyNDcsIDE3OSwgMjksIDY2LCAxMzMsIDI0OSwgMTQyLCAyMDQsIDM4LCAyOSwgNjYsIDEzMywgMjQ5LCAxNDEsIDI0OCwgCisgICAgMjI3LCAyOSwgNjYsIDEzMywgMjQ5LCAxNDAsIDIyMCwgNDEsIDI5LCA2NiwgMTMzLCAyNDksIDEzOSwgMjExLCAyMDcsIDI5LCAKKyAgICA2NiwgMTMzLCAyNDksIDEzOCwgMjQ1LCA1OSwgMjksIDY2LCAyMjQsIDQ1LCAyNDksIDEzNywgMjI5LCAyNDksIDI5LCA2NiwgCisgICAgMjI0LCA0NSwgMjQ5LCAxMzYsIDIzMCwgMiwgMjksIDY2LCAxMzMsIDI0OSwgMTM1LCAyMjAsIDU1LCAyOSwgNjYsIDEzMywgCisgICAgMjQ5LCAxMzQsIDIwNCwgMTIsIDI5LCA2NiwgMTMzLCAyNDksIDEzMywgMjksIDY2LCAyMjQsIDQ1LCAyNDksIDEzMiwgMjUwLCAKKyAgICAxMTksIDI5LCA2NiwgMjI0LCA0NSwgMjQ5LCAxMzEsIDIyNCwgMjMyLCAyOSwgNjYsIDEzMywgMjQ5LCAxMzAsIDI0NywgCisgICAgMjAyLCAyOSwgNjYsIDEzMywgMjQ5LCAxMjksIDIzOCwgMzEsIDI5LCA2NiwgMTMzLCAyNDksIDEyOCwgMjksIDY2LCAxMzMsIAorICAgIDI0OSwgMTI3LCAyMDMsIDI0MSwgMjksIDY2LCAxMzMsIDI0OSwgMTI2LCAyOSwgNjYsIDEzMywgMjQ5LCAxMjUsIDI5LCA2NiwgCisgICAgMTMzLCAyNDksIDEyNCwgMjM2LCA1MywgMjksIDY2LCAxMzMsIDI0OSwgMTIzLCAyOSwgNjYsIDEzMywgMjQ5LCAxMjIsIDI5LCAKKyAgICA2NiwgMTMzLCAyNDksIDEyMSwgMjksIDY2LCAyMjQsIDQ1LCAyNDksIDExOSwgMjA3LCAxNzIsIDI5LCA2NiwgMTMzLCAyNDksIAorICAgIDExOCwgMjksIDY2LCAxMzMsIDI0OSwgMTE3LCAyOSwgNjYsIDEzMywgMjQ5LCAxMTYsIDI0NiwgMTAsIDI5LCA2NiwgMTMzLCAKKyAgICAyNDksIDExNSwgMjksIDY2LCAxMzMsIDI0OSwgMTE0LCAyOSwgNjYsIDEzMywgMjQ5LCAxMTMsIDIzOCwgMjIxLCAyOSwgNjYsIAorICAgIDEzMywgMjQ5LCAxMTIsIDI1MCwgMTA2LCAyOSwgNjYsIDEzMywgMjQ5LCAxMTEsIDI5LCA2NiwgMTMzLCAyNDksIDExMCwgCisgICAgMjksIDY2LCAxMzMsIDI0OSwgMTA5LCAyOSwgNjYsIDEzMywgMjQ5LCAxMDgsIDI5LCA2NiwgMTMzLCAyNDksIDEwNywgMjksIAorICAgIDY2LCAxMzMsIDI0OSwgMTA2LCAyOSwgNjYsIDEzMywgMjQ5LCAxMDUsIDI5LCA2NiwgMTMzLCAyNDksIDEwNCwgMjksIDY2LCAKKyAgICAxMzMsIDI0OSwgMTAzLCAyOSwgNjYsIDEzMywgMjQ5LCAxMDIsIDIyNCwgMzcsIDI5LCA2NiwgMTMzLCAyNDksIDEwMSwgMjksIAorICAgIDY2LCAxMzMsIDI0OSwgMTAwLCAyMDgsIDk1LCAyOSwgNjYsIDEzMywgMjQ5LCA5OSwgMjksIDY2LCAxMzMsIDI0OSwgOTgsIAorICAgIDI5LCA2NiwgMTMzLCAyNDksIDk3LCAyOSwgNjYsIDEzMywgMjQ5LCA5NiwgMjksIDY2LCAxMzMsIDI0OSwgOTUsIDI5LCA2NiwgCisgICAgMTMzLCAyNDksIDk0LCAyOSwgNjYsIDEzMywgMjQ5LCA5MywgMjksIDY2LCAxMzMsIDI0OSwgOTIsIDI5LCA2NiwgMTMzLCAKKyAgICAyNDksIDkxLCAyOSwgNjYsIDEzMywgMjQ5LCA5MCwgMjksIDY2LCAxMzMsIDI0OSwgODksIDI5LCA2NiwgMTMzLCAyNDksIAorICAgIDg4LCAyMzcsIDM1LCAyOSwgNjYsIDEzMywgMjQ5LCA2NywgMjM5LCAxNjgsIDI5LCA2NiwgMTMzLCAyNDksIDY0LCAyNDgsIAorICAgIDIwNCwgMjksIDY2LCAxMzMsIDI0OSwgNTksIDIxMSwgMjE0LCAyOSwgNjYsIDEzMywgMjQ5LCA1OCwgNDcsIDI5LCA2NiwgCisgICAgMTMzLCAyNDksIDU3LCAyOSwgNjYsIDEzMywgMjQ5LCA1NiwgMjEwLCAxNTUsIDI5LCA2NiwgMTMzLCAyNDksIDU1LCAyOSwgCisgICAgNjYsIDEzMywgMjQ5LCA1NCwgMjksIDY2LCAxMzMsIDI0OSwgNTMsIDIwNCwgMzQsIDI0NiwgMTc5LCAyOSwgNjYsIDEzMywgCisgICAgMjQ5LCA1MiwgMjQ2LCAxNzksIDI5LCA2NiwgMTMzLCAyNDksIDUxLCAyNDYsIDE4MCwgMjM5LCAxMzQsIDI5LCA2NiwgMTMzLCAKKyAgICAyNDksIDUwLCAyMDQsIDM2LCAyOSwgNjYsIDEzMywgMjQ5LCA0OSwgMjksIDY2LCAxMzMsIDI0OSwgNDgsIDI5LCA2NiwgCisgICAgMjI0LCA0NSwgMjQ5LCA0NywgMjQzLCAxNjgsIDI5LCA2NiwgMTMzLCAyNDksIDQ2LCAyOSwgNjYsIDEzMywgMjQ5LCA0NSwgCisgICAgMjksIDY2LCAxMzMsIDI0OSwgNDMsIDI5LCA2NiwgMTMzLCAyNDksIDQyLCAyOSwgNjYsIDEzMywgMjQ5LCA0MSwgMjksIDY2LCAKKyAgICAxMzMsIDI0OSwgNDAsIDI0NCwgMTQ3LCAyOSwgNjYsIDEzMywgMjQ5LCAzOSwgMjksIDY2LCAxMzMsIDI0OSwgMzgsIDI5LCAKKyAgICA2NiwgMTMzLCAyNDksIDM3LCAyOSwgNjYsIDEzMywgMjQ5LCAzNiwgMjksIDY2LCAxMzMsIDI0OSwgMzUsIDI5LCA2NiwgCisgICAgMTMzLCAyMDUsIDI0MSwgMjQ5LCAxMjAsIDI5LCA2NiwgMTMzLCAyMDUsIDI0MSwgMjQ5LCA4NywgMjksIDY2LCAxMzMsIAorICAgIDIwNSwgMjQxLCAyNDksIDg2LCAyOSwgNjYsIDEzMywgMjA1LCAyNDEsIDI0OSwgODUsIDI5LCA2NiwgMTMzLCAyMDUsIDI0MSwgCisgICAgMjQ5LCA4NCwgMjksIDY2LCAxMzMsIDIwNSwgMjQxLCAyNDksIDgzLCAyOSwgNjYsIDEzMywgMjA1LCAyNDEsIDI0OSwgODIsIAorICAgIDI5LCA2NiwgMTMzLCAyMDUsIDI0MSwgMjQ5LCA4MSwgMjksIDY2LCAxMzMsIDIwNSwgMjQxLCAyNDksIDgwLCAyOSwgNjYsIAorICAgIDEzMywgMjA1LCAyNDEsIDI0OSwgNzksIDI5LCA2NiwgMTMzLCAyMDUsIDI0MSwgMjQ5LCA3OCwgMjksIDY2LCAxMzMsIDIwNSwgCisgICAgMjQxLCAyNDksIDc3LCAyOSwgNjYsIDEzMywgMjA1LCAyNDEsIDI0OSwgNzYsIDI5LCA2NiwgMTMzLCAyMDUsIDI0MSwgMjQ5LCAKKyAgICA3NSwgMjksIDY2LCAxMzMsIDIwNSwgMjQxLCAyNDksIDc0LCAyOSwgNjYsIDEzMywgMjA1LCAyNDEsIDI0OSwgNzMsIDI5LCAKKyAgICA2NiwgMTMzLCAyMDUsIDI0MSwgMjQ5LCA3MiwgMjksIDY2LCAxMzMsIDIwNSwgMjQxLCAyNDksIDcxLCAyOSwgNjYsIDEzMywgCisgICAgMjA1LCAyNDEsIDI0OSwgNzAsIDI5LCA2NiwgMTMzLCAyMDUsIDI0MSwgMjQ5LCA2OSwgMjksIDY2LCAxMzMsIDIwNSwgMjQxLCAKKyAgICAyNDksIDY4LCAyOSwgNjYsIDEzMywgMjA1LCAyNDEsIDI0OSwgNjYsIDI5LCA2NiwgMTMzLCAyMDUsIDI0MSwgMjQ5LCA2NSwgCisgICAgMjksIDY2LCAxMzMsIDIwNSwgMjQxLCAyNDksIDYzLCAyOSwgNjYsIDEzMywgMjA1LCAyNDEsIDI0OSwgNjIsIDI5LCA2NiwgCisgICAgMTMzLCAyMDUsIDI0MSwgMjQ5LCA2MSwgMjksIDY2LCAxMzMsIDIwNSwgMjQxLCAyNDksIDYwLCAyOSwgNjYsIDEzMywgMjA1LCAKKyAgICAyNDEsIDI0OSwgNDQsIDI5LCA2NiwgMTMzLCAyMDUsIDI0MSwgMjQ5LCAzNCwgMjUxLCAxMDIsIDIwMywgMjM4LCAyMTMsIAorICAgIDEzMSwgMjI3LCAxMTQsIDI1MSwgMTAyLCAyMDMsIDIzOCwgMjEzLCAxMzEsIDI0MywgODUsIDI1MSwgMTAyLCAyNDYsIDE2OSwgCisgICAgODIsIDI1MSwgMTAyLCA0MiwgMTA1LCAyNTEsIDEwMiwgNDIsIDEwOCwgMjUxLCAxMDIsIDQyLCAxNDcsIDI1MSwgMTAyLCAKKyAgICA0MiwgMTQ5LCAyNTEsIDEwMiwgNDIsIDE3MCwgMjUxLCAxMDIsIDQyLCAxOTUsIDI1MSwgMTAyLCA0MiwgMjEzLCAxMTEsIAorICAgIDI1MSwgMTAyLCA0MiwgMTk5LCAyNTEsIDEwMiwgNDIsIDIyMiwgNjMsIDI1MSwgMTAyLCA0MiwgMjA5LCAxNTIsIDI1MSwgCisgICAgMTAyLCA0MiwgMjA3LCAxNTEsIDI1MSwgMTAyLCA0MiwgMjA5LCA1MywgMjUxLCAxMDIsIDQyLCAyMzksIDE1MywgMjUxLCAKKyAgICAxMDIsIDQyLCAyNDAsIDE4LCAyNTEsIDEwMiwgNDIsIDIxMiwgNzQsIDI1MSwgMTAyLCA0MiwgMjEzLCAxMDUsIDI1MSwgCisgICAgMTAyLCA0MiwgMjQxLCAxMzQsIDI1MSwgMTAyLCA0MiwgMjIyLCA1OCwgMjUxLCAxMDIsIDQyLCAxMTgsIDIzNiwgMTEsIAorICAgIDI1MSwgMTAyLCA0MiwgMTIwLCAyMzYsIDExLCAyNTEsIDEwMiwgNDIsIDEyNiwgMjM2LCAxMSwgMjUxLCAxMDIsIDQyLCAKKyAgICAyMzksIDE0NywgMjM2LCAxMSwgMjUxLCAxMDIsIDQyLCAyMzksIDIzMywgMjM2LCAxMSwgMjUxLCAxMDIsIDQyLCAyMTIsIAorICAgIDg4LCAyMzYsIDExLCAyNTEsIDEwMiwgNDIsIDIxMywgMTEyLCAyMzYsIDExLCAyNTEsIDEwMiwgNDIsIDI0MSwgMTQzLCAKKyAgICAyMzYsIDExLCAyNTEsIDEwMiwgNDIsIDIyMiwgNjQsIDIzNiwgMTEsIDI1MSwgMTAyLCA0MiwgMTE4LCAyMDksIDM2LCAyNTEsIAorICAgIDEwMiwgNDIsIDEyMCwgMjA5LCAzNiwgMjUxLCAxMDIsIDQyLCAxMjYsIDIwOSwgMzYsIDI1MSwgMTAyLCA0MiwgMjM5LCAKKyAgICAxNDcsIDIwOSwgMzYsIDI1MSwgMTAyLCA0MiwgMjM5LCAyMzMsIDIwOSwgMzYsIDI1MSwgMTAyLCA0MiwgMjEyLCA4OCwgCisgICAgMjA5LCAzNiwgMjUxLCAxMDIsIDQyLCAyMTMsIDExMiwgMjA5LCAzNiwgMjUxLCAxMDIsIDQyLCAyNDEsIDE0MywgMjA5LCAKKyAgICAzNiwgMjUxLCAxMDIsIDQyLCAyMjIsIDY0LCAyMDksIDM2LCAyNTEsIDEwMiwgNDIsIDIwOSwgMTUzLCAyMDksIDM2LCAyNTEsIAorICAgIDEwMiwgNDIsIDIwNywgMTUyLCAyMDksIDM2LCAyNTEsIDEwMiwgNDIsIDIwOSwgNTQsIDIwOSwgMzYsIDI1MSwgMTAyLCA0MiwgCisgICAgMjM5LCAxNTQsIDIwOSwgMzYsIDI1MSwgMTAyLCA0MiwgMjQwLCAxOSwgMjA5LCAzNiwgMjUxLCAxMDIsIDQyLCAyMTIsIDc1LCAKKyAgICAyMDksIDM2LCAyNTEsIDEwMiwgNDIsIDIxMywgMTA2LCAyMDksIDM2LCAyNTEsIDEwMiwgNDIsIDI0MSwgMTM1LCAyMDksIAorICAgIDM2LCAyNTEsIDEwMiwgNDIsIDIyMiwgNTksIDIwOSwgMzYsIDI1MSwgMTAyLCAyMDQsIDUxLCAyNDgsIDIxOSwgMjA2LCAKKyAgICAyMzUsIDI1MSwgMTAyLCAyMDQsIDUxLCAyMzksIDI0NSwgMjEwLCAyNDAsIDI1MSwgMTAyLCAyMDQsIDUxLCAyMTQsIDE3MSwgCisgICAgMjEwLCAyNDAsIDI1MSwgMTAyLCAyMDQsIDUxLCAyMDksIDYxLCAyMTAsIDI0MCwgMjUxLCAxMDIsIDIwNCwgNTEsIDIzOSwgCisgICAgMTQwLCAyMTAsIDI0MCwgMjUxLCAxMDIsIDI0MiwgNDUsIDIyNSwgMTksIDIzOSwgMjQ1LCAyMTAsIDI0MCwgMjUxLCAxMDIsIAorICAgIDIyNywgOTUsIDIyNSwgMTksIDIzOSwgMjQ1LCAyMTAsIDI0MCwgMjUxLCAxMDIsIDIyNSwgMTksIDIxNCwgMTcxLCAyMTAsIAorICAgIDI0MCwgMjUxLCAxMDIsIDIyNSwgMTksIDIwOSwgNjEsIDIxMCwgMjQwLCAzMCwgMjUxLCAxMjksIDI1MCwgMzYsIDExOCwgCisgICAgMjE3LCA1NSwgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAxMTgsIDIzNywgMTM3LCAzMCwgMjUxLCAxMjksIDI1MCwgMzYsIAorICAgIDExOCwgMjQyLCA2NSwgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAxNzAsIDMwLCAyNTEsIDEyOSwgMjUwLCAzNiwgMjQwLCAxOCwgCisgICAgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAyMzksIDIzMywgMjM2LCAxMSwgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAyMzksIAorICAgIDIzMywgMjA5LCAzNiwgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAyNDAsIDE5LCAyMDksIDM2LCAzMCwgMjUxLCAxMjksIDI1MCwgCisgICAgMzYsIDIzOSwgMjMzLCAyMDksIDIzNywgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAyMDksIDE1MywgMjA5LCAyMzcsIDMwLCAKKyAgICAyNTEsIDEyOSwgMjUwLCAzNiwgMjQwLCAxOSwgMjA5LCAyMzcsIDMwLCAyNTEsIDEyOSwgMjUwLCAzNiwgMTE4LCAyMzYsIAorICAgIDEyLCAyMDksIDIzNywgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAyMzksIDIzMywgMjM2LCAxMiwgMjA5LCAyMzcsIDMwLCAKKyAgICAyNTEsIDEyOSwgMjUwLCAzNiwgMTE4LCAyMDksIDM3LCAyMDksIDIzNywgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAyMzksIAorICAgIDIzMywgMjA5LCAzNywgMjA5LCAyMzcsIDMwLCAyNTEsIDEyOSwgMjUwLCAzNiwgMjM5LCAyMzMsIDIxMSwgODgsIDMwLCAKKyAgICAyNTEsIDEyOSwgMjUwLCAzNiwgMjA5LCAxNTMsIDIxMSwgODgsIDMwLCAyNTEsIDEyOSwgMjUwLCAzNiwgMjQwLCAxOSwgCisgICAgMjExLCA4OCwgMzAsIDI1MSwgMTI5LCAyNTAsIDM2LCAxMTgsIDIzNiwgMTIsIDIxMSwgODgsIDMwLCAyNTEsIDEyOSwgMjUwLCAKKyAgICAzNiwgMjM5LCAyMzMsIDIzNiwgMTIsIDIxMSwgODgsIDMwLCAyNTEsIDEyOSwgMjUwLCAzNiwgMTE4LCAyMDksIDM3LCAyMTEsIAorICAgIDg4LCAzMCwgMjUxLCAxMjksIDI1MCwgMzYsIDIwOSwgMTUzLCAyMDksIDM3LCAyMTEsIDg4LCAzMCwgMjUxLCAxMjksIDI1MCwgCisgICAgMzYsIDI0MCwgMTksIDIwOSwgMzcsIDIxMSwgODgsIDMwLCAyNTEsIDEyOSwgMjUwLCAzNiwgMjA5LCAxNTMsIDIyNCwgODUsIAorICAgIDMwLCAyNTEsIDEyOSwgMjM3LCAyOSwgMTE4LCAyMTgsIDg2LCAzMCwgMjUxLCAxMjksIDIwOSwgNzYsIDEwNSwgMzAsIDI1MSwgCisgICAgMTI5LCAyMzcsIDI1LCAxMDUsIDMwLCAyNTEsIDEyOSwgMjQxLCA0MSwgMTA4LCAzMCwgMjUxLCAxMjksIDIwOSwgNzYsIAorICAgIDEwOCwgMzAsIDI1MSwgMTI5LCAyNDUsIDU2LCAxMjAsIDI0MiwgNjQsIDMwLCAyNTEsIDEyOSwgMjQxLCA0MSwgMTIwLCAKKyAgICAyNDIsIDY0LCAzMCwgMjUxLCAxMjksIDIwOCwgNjEsIDE3MCwgMzAsIDI1MSwgMTI5LCAyMDgsIDYxLCAyMDksIDE1MiwgMzAsIAorICAgIDI1MSwgMTI5LCAyMDgsIDYxLCAyMDksIDE1MywgMjUwLCAyNTUsIDE4LCAzMCwgMjUxLCAxMjksIDIzNywgMjUsIDIwOSwgCisgICAgMTUyLCAzMCwgMjUxLCAxMjksIDIyNCwgMjIyLCAyMDksIDE1MiwgMzAsIDI1MSwgMTI5LCAyMDksIDc2LCAyMDksIDE1MiwgCisgICAgMzAsIDI1MSwgMTI5LCAyMDksIDc2LCAyMDksIDUzLCAzMCwgMjUxLCAxMjksIDIwOCwgNjEsIDI0MCwgMTgsIDMwLCAyNTEsIAorICAgIDEyOSwgMjA4LCA2MSwgMjQwLCAxOSwgMjUwLCAyNTUsIDE4LCAzMCwgMjUxLCAxMjksIDIzNywgMjUsIDI0MCwgMTgsIDMwLCAKKyAgICAyNTEsIDEyOSwgMjA5LCA3NiwgMjQwLCAxOCwgMzAsIDI1MSwgMTI5LCAyMDksIDc2LCAxMTgsIDIzNiwgMTEsIDMwLCAyNTEsIAorICAgIDEyOSwgMjA5LCA3NiwgMTI2LCAyMzYsIDExLCAzMCwgMjUxLCAxMjksIDI0MSwgNDEsIDIzOSwgMjMzLCAyMzYsIDExLCAzMCwgCisgICAgMjUxLCAxMjksIDIwOCwgNjEsIDIzOSwgMjMzLCAyMzYsIDExLCAzMCwgMjUxLCAxMjksIDIwOSwgNzYsIDIzOSwgMjMzLCAKKyAgICAyMzYsIDExLCAzMCwgMjUxLCAxMjksIDI0NywgMjEsIDIzOSwgMjMzLCAyMzYsIDExLCAzMCwgMjUxLCAxMjksIDIyMywgNjAsIAorICAgIDIzOSwgMjMzLCAyMzYsIDExLCAzMCwgMjUxLCAxMjksIDIwOSwgNzYsIDExOCwgMjA5LCAzNiwgMzAsIDI1MSwgMTI5LCAKKyAgICAyMDksIDc2LCAyMzksIDIzMywgMjA5LCAzNiwgMzAsIDI1MSwgMTI5LCAyNDQsIDQwLCAyMzksIDIzMywgMjI0LCA4NSwgMzAsIAorICAgIDI1MSwgMTI5LCAyMTEsIDQ5LCAyNDAsIDE5LCAyMjQsIDg1LCAzMCwgMTE4LCAxNjIsIDU0LCAzMCwgMTE4LCAxNjIsIDIsIAorICAgIDI1MCwgMjU1LCAxOCwgMzAsIDEyMCwgMjA5LCA1OCwgNTQsIDMwLCAxMjYsIDIxNywgNTQsIDU0LCAzMCwgMjAzLCA1MCwgCisgICAgNTQsIDMwLCAyMDksIDIzOCwgNTQsIDMwLCAyNDIsIDY2LCA1NCwgMzAsIDIyMCwgODcsIDU0LCAzMCwgMTIwLCAyMjAsIDg2LCAKKyAgICA1NCwgMzAsIDEyNiwgMjIwLCA4NiwgNTQsIDMwLCAyMzksIDE0NywgMjIwLCA4NiwgNTQsIDMwLCAyMzksIDIzMywgMjIwLCAKKyAgICA4NiwgNTQsIDMwLCAyMjQsIDIxNiwgNTQsIDMwLCAyMjgsIDEzOSwgMjQ4LCAyMTksIDU0LCAzMCwgMjI3LCA4OCwgNTQsIAorICAgIDMwLCAyMTksIDIxMywgNTQsIDMwLCAyMDMsIDE3MywgNTQsIDMwLCAyNTAsIDg3LCA1NCwgMzAsIDI1MCwgMTAyLCA1NCwgCisgICAgMzAsIDIzOCwgNywgNTQsIDMwLCAyMDgsIDIzLCAyNDgsIDIxOSwgNTQsIDMwLCAyMDIsIDg1LCA1NCwgMzAsIDExOCwgMjE3LCAKKyAgICA1NiwgNTQsIDMwLCAyMTIsIDExMywgNTQsIDIxNSwgMjEwLCAyMTMsIDEwMiwgNTQsIDIxNSwgMjEwLCAyMDYsIDI0OSwgNTQsIAorICAgIDIxNSwgMjEwLCAyMTMsIDEzNSwgNTQsIDIxNSwgMjEwLCAyMTMsIDEwMCwgNTQsIDIxNSwgMjEwLCAyNDMsIDE4MywgMjEzLCAKKyAgICAxMDAsIDU0LCAyMTUsIDIxMCwgMjEyLCAxMzUsIDU0LCAyMTUsIDIxMCwgMjQ0LCAzNiwgNTQsIDIxNSwgMjEwLCAyMTcsIAorICAgIDM5LCA1NCwgMjE1LCAyMTAsIDIxMywgMTE5LCA1NCwgMjE1LCAyMTAsIDI0MiwgMjMsIDU0LCAyMTUsIDIxMCwgMjUwLCA4MiwgCisgICAgNTQsIDIxNSwgMjEwLCAyNDYsIDIxMywgNTQsIDMwLCAxNiwgMjA5LCAyMDgsIDIxNiwgNTksIDIxOCwgMjAzLCAyNDMsIAorICAgIDE2MCwgMiwgMjE5LCAyNSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMTgsIDc4LCAyMzcsIDY0LCAyMTgsIDIwMywgMjQzLCAKKyAgICAxNjAsIDIsIDIwOSwgMjExLCAyMzcsIDY0LCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDI0NywgNDIsIDIxOCwgMjAzLCAyNDMsIAorICAgIDE2MCwgMiwgMjQ2LCAxMzMsIDIxOCwgMjAzLCAyNDMsIDE2MCwgMiwgMjAzLCAyNTAsIDIxOCwgMjAzLCAyNDMsIDE2MCwgMiwgCisgICAgMjM3LCAzNSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMzgsIDIxMywgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMDksIDAsIAorICAgIDIxOCwgMjAzLCAyNDMsIDE2MCwgMiwgNDcsIDIxOCwgMjAzLCAyNDMsIDE2MCwgMiwgMjQ3LCAyNDAsIDIxOCwgMjAzLCAKKyAgICAyNDMsIDE2MCwgMiwgMjEzLCA4LCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDI0NiwgNCwgMjE4LCAyMDMsIDI0MywgMTYwLCAKKyAgICAyLCAyMjUsIDEyMSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMjUsIDY4LCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDIxNCwgCisgICAgMjEzLCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDIyNywgMTQzLCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDI0OCwgNSwgMjE4LCAKKyAgICAyMDMsIDI0MywgMTYwLCAyLCAyNDcsIDI2LCAyMTgsIDkxLCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDI0MywgOTgsIDIxOCwgCisgICAgMjAzLCAyNDMsIDE2MCwgMiwgMjQ1LCAyMzksIDIxOCwgMjAzLCAyNDMsIDE2MCwgMiwgMjEyLCA0NiwgMjE4LCAyMDMsIAorICAgIDI0MywgMTYwLCAyLCAyNDUsIDI0MCwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyNDgsIDE0NywgMjE4LCAyMDMsIDI0MywgCisgICAgMTYwLCAyLCAyMTIsIDI1MSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMzYsIDUzLCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIAorICAgIDIzNywgMSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyNDcsIDE3NCwgMjI3LCAyMTAsIDIxOCwgMjAzLCAyNDMsIDE2MCwgMiwgCisgICAgMjQ3LCAxNywgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMTYsIDE4NCwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyNDEsIAorICAgIDE4NiwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyNDIsIDcxLCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDIwNywgMTg4LCAKKyAgICAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDI0OCwgMTUwLCAyMTgsIDIwMywgMjQzLCAxNjAsIDIsIDIxOCwgOTIsIDIwOCwgOTUsIAorICAgIDIxOCwgMjAzLCAyNDMsIDE2MCwgMiwgMjA1LCAyMTEsIDIxOCwgMjAzLCAyNDMsIDE2MCwgMiwgMjE5LCA5MiwgMjE4LCAKKyAgICAyMDMsIDI0MywgMTYwLCAyLCAyMTUsIDIwMSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMjcsIDEyNywgMjE4LCAyMDMsIAorICAgIDI0MywgMTYwLCAyLCAyMTksIDE5NCwgMjQ5LCAyNSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMzksIDE5MywgMjE4LCAKKyAgICAyMDMsIDI0MywgMTYwLCAyLCAyMzcsIDI1NSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMTEsIDUwLCAyMTgsIDIwMywgCisgICAgMjQzLCAxNjAsIDIsIDUsIDI1MCwgOSwgMjE4LCAyMDMsIDI0MywgMTYwLCAyLCAyMDQsIDcyLCAyNDgsIDIzOCwgMjE4LCAKKyAgICAyMDMsIDI0MywgMTYwLCAyLCAzOSwgMjIwLCA4OSwgOTUsIDIyNiwgMTk3LCAxLCA2MywgMjI2LCAxOTcsIDEsIDc0LCAyMjYsIAorICAgIDE5NywgMSwgMjQ5LCAyNTUsIDIyNiwgMTk3LCAxLCAyNDgsIDk5LCAyMjYsIDE5NywgMSwgMjM5LCA3NSwgMjI2LCAxOTcsIAorICAgIDEsIDI0NSwgNTEsIDIyNiwgMTk3LCAxLCA3NSwgMjI2LCAxOTcsIDEsIDIwNCwgMTQ0LCAyMjYsIDE5NywgMSwgMjAyLCAKKyAgICAxNTksIDIyNiwgMTk3LCAxLCAyMDksIDExMCwgMjI2LCAxOTcsIDEsIDIzMCwgMTg0LCAyMjYsIDE5NywgMSwgMjMwLCA1NCwgCisgICAgMjI2LCAxOTcsIDEsIDIxNywgMTM0LCAyMjYsIDE5NywgMSwgMTU5LCAyMjYsIDE5NywgMSwgMjI2LCAxODUsIDIyNiwgMTk3LCAKKyAgICAxLCAyMjMsIDE2MywgMjI2LCAxOTcsIDEsIDIyNCwgODcsIDIyNiwgMTk3LCAxLCAyMjEsIDIyOCwgMjI2LCAxOTcsIDEsIAorICAgIDY4LCAyMjYsIDE5NywgMSwgMjE5LCAxODQsIDIyNiwgMTk3LCAxLCAyMjksIDQ4LCAyMjYsIDE5NywgMSwgMTQ2LCAyMjYsIAorICAgIDE5NywgMSwgMTk0LCAyMjYsIDE5NywgMSwgMjEwLCA2OSwgMjI2LCAxOTcsIDEsIDIwNywgMjQ0LCAyMjYsIDE5NywgMSwgCisgICAgMjUwLCAyMzEsIDIyNiwgMTk3LCAxLCAyNDEsIDkyLCAyMjYsIDE5NywgMSwgMjM3LCAxNzEsIDIyNiwgMTk3LCAxLCAyMDMsIAorICAgIDE5NiwgMjQ3LCAzMiwgMSwgNjMsIDI0NywgMzIsIDEsIDIxOSwgMTcwLCAyNDcsIDMyLCAxLCAyNDUsIDUxLCAyNDcsIDMyLCAKKyAgICAxLCAxNTksIDI0NywgMzIsIDEsIDIwNiwgMTc2LCAyNDcsIDMyLCAxLCAxNDYsIDI0NywgMzIsIDEsIDIyNywgMjM4LCAyNDcsIAorICAgIDMyLCAxLCAyNTQsIDM0LCAyNDcsIDMyLCAxLCAyMTcsIDEzNCwgMjQ3LCAzMiwgMSwgMjQ5LCAyNTUsIDI0NywgMzIsIDEsIAorICAgIDIyNiwgMTg1LCAyNDcsIDMyLCAxLCA3OCwgMjQ3LCAzMiwgMSwgMjQ0LCAyMTQsIDI0NywgMzIsIDEsIDIxMCwgNjksIDI0NywgCisgICAgMzIsIDEsIDIxMywgOTIsIDI0NywgMzIsIDEsIDIxMywgOTEsIDI0NywgMzIsIDEsIDE5NCwgMjQ3LCAzMiwgMSwgMjQ3LCAKKyAgICAxMjQsIDI0NywgMzIsIDEsIDY4LCAyNDcsIDMyLCAxLCAyMjEsIDIyOCwgMjQ3LCAzMiwgMSwgMjAzLCAxOTYsIDI0NywgMzIsIAorICAgIDEsIDIyMywgMTYzLCAyNDcsIDMyLCAxLCAyMDcsIDI0MywgMjQ3LCAzMiwgMSwgMjE5LCAxODQsIDI0NywgMzIsIDEsIDIxMSwgCisgICAgMTY3LCAyNDcsIDMyLCAxLCA3NSwgMjQ3LCAzMiwgMSwgNzQsIDI0NywgMzIsIDEsIDIwNiwgMTczLCAyNDcsIDMyLCAxLCAKKyAgICAyMzAsIDU0LCAyNDcsIDMyLCAxLCAyMzAsIDQ1LCAyNDcsIDMyLCAxLCAyMjMsIDI3LCAyNDcsIDMyLCAxLCAyMDYsIDE3OCwgCisgICAgMjQ3LCAzMiwgMSwgMjM5LCA3NSwgMjQ3LCAzMiwgMSwgMjM5LCAxMCwgMjQ3LCAzMiwgMSwgMjExLCAxMDgsIDI0NywgMzIsIAorICAgIDEsIDIxMSwgMTA3LCAyNDcsIDMyLCAxLCAyMjIsIDIwNSwgMjQ3LCAzMiwgMSwgMjMxLCA4MywgMjQ3LCAzMiwgMSwgMjQ3LCAKKyAgICAxMjMsIDI0NywgMzIsIDEsIDIwNywgMjQ0LCAyNDcsIDMyLCAxLCAyMDYsIDE3NSwgMjQ3LCAzMiwgMSwgMjE1LCAxODYsIAorICAgIDI0NywgMzIsIDEsIDIyNSwgNTksIDI0NywgMzIsIDEsIDIyNSwgNTgsIDI0NywgMzIsIDEsIDIyNSwgNTcsIDI0NywgMzIsIAorICAgIDEsIDIyNSwgNTYsIDI0NywgMzIsIDEsIDIyNywgMjM3LCAyNDcsIDMyLCAxLCAyNDEsIDE5MCwgMjQ3LCAzMiwgMSwgMjA2LCAKKyAgICAxNzQsIDg0LCAyNDEsIDQ0LCAyMDksIDM1LCA4MiwgODQsIDI0MSwgNDQsIDE3LCAxMDUsIDg0LCAyNDEsIDQ0LCAxNywgCisgICAgMTA4LCA4NCwgMjQxLCA0NCwgMTcsIDE0NywgODQsIDI0MSwgNDQsIDE3LCAxNDksIDg0LCAyNDEsIDQ0LCAxNywgMTcwLCAKKyAgICA4NCwgMjQxLCA0NCwgMTcsIDE5NSwgODQsIDI0MSwgNDQsIDE3LCAyMTMsIDExMSwgODQsIDI0MSwgNDQsIDE3LCAxOTksIAorICAgIDg0LCAyNDEsIDQ0LCAxNywgMjIyLCA2MywgODQsIDI0MSwgNDQsIDQyLCAyMDksIDE1MiwgODQsIDI0MSwgNDQsIDQyLCAKKyAgICAyMDcsIDE1MSwgODQsIDI0MSwgNDQsIDQyLCAyMDksIDUzLCA4NCwgMjQxLCA0NCwgNDIsIDIzOSwgMTUzLCA4NCwgMjQxLCAKKyAgICA0NCwgNDIsIDI0MCwgMTgsIDg0LCAyNDEsIDQ0LCA0MiwgMjEyLCA3NCwgODQsIDI0MSwgNDQsIDQyLCAyMTMsIDEwNSwgODQsIAorICAgIDI0MSwgNDQsIDQyLCAyNDEsIDEzNCwgODQsIDI0MSwgNDQsIDQyLCAyMjIsIDU4LCA4NCwgMjQxLCA0NCwgNDIsIDExOCwgCisgICAgMjM2LCAxMSwgODQsIDI0MSwgNDQsIDQyLCAxMjAsIDIzNiwgMTEsIDg0LCAyNDEsIDQ0LCA0MiwgMTI2LCAyMzYsIDExLCAKKyAgICA4NCwgMjQxLCA0NCwgNDIsIDIzOSwgMTQ3LCAyMzYsIDExLCA4NCwgMjQxLCA0NCwgNDIsIDIzOSwgMjMzLCAyMzYsIDExLCAKKyAgICA4NCwgMjQxLCA0NCwgNDIsIDIxMiwgODgsIDIzNiwgMTEsIDg0LCAyNDEsIDQ0LCA0MiwgMjEzLCAxMTIsIDIzNiwgMTEsIAorICAgIDg0LCAyNDEsIDQ0LCA0MiwgMjQxLCAxNDMsIDIzNiwgMTEsIDg0LCAyNDEsIDQ0LCA0MiwgMjIyLCA2NCwgMjM2LCAxMSwgCisgICAgMzgsIDM3LCAxLCA2MywgMzgsIDM3LCAxLCAyNDgsIDE2MiwgMzgsIDM3LCAxLCAyMjksIDIwMSwgMzgsIDM3LCAxLCAyNDQsIAorICAgIDc1LCAzOCwgMzcsIDEsIDc0LCAzOCwgMzcsIDEsIDIwNiwgNTUsIDM4LCAzNywgMSwgMjAyLCA5MiwgMzgsIDM3LCAxLCAKKyAgICAyMzcsIDY3LCAzOCwgMzcsIDEsIDIwOSwgOTIsIDM4LCAzNywgMSwgNzUsIDM4LCAzNywgMSwgMTczLCAzOCwgMzcsIDEsIAorICAgIDI0MSwgMTIyLCAzOCwgMzcsIDEsIDI0MSwgMTAzLCAzOCwgMzcsIDEsIDI0MSwgOTIsIDM4LCAzNywgMSwgMjQxLCA3LCAzOCwgCisgICAgMzcsIDEsIDc4LCAzOCwgMzcsIDEsIDIxOSwgMzQsIDM4LCAzNywgMSwgMjEzLCA0MywgMzgsIDM3LCAxLCAyMjgsIDIwOSwgCisgICAgMzgsIDM3LCAxLCAyNDEsIDI4LCAzOCwgMzcsIDEsIDI0MSwgMTcsIDM4LCAzNywgMSwgMjA5LCAxODcsIDM4LCAzNywgMSwgCisgICAgNjgsIDM4LCAzNywgMSwgMjQxLCAxMjUsIDM4LCAzNywgMSwgMjE4LCAxOTUsIDM4LCAzNywgMSwgMjI5LCAxMjksIDM4LCAKKyAgICAzNywgMSwgMjQxLCAxNTQsIDM4LCAzNywgMSwgMjQxLCAxOSwgMzgsIDM3LCAxLCAyNDYsIDE3MCwgMzgsIDM3LCAxLCAyMzEsIAorICAgIDgzLCAzOCwgMzcsIDEsIDIwNiwgMTc4LCAzOCwgMzcsIDEsIDI0MSwgMCwgMzgsIDM3LCAyMjEsIDQ0LCAxMDUsIDM4LCAzNywgCisgICAgMjIxLCA0NCwgMTcwLCAzOCwgMzcsIDIyMSwgNDQsIDIwOSwgMTUyLCAzOCwgMzcsIDIyMSwgNDQsIDI0MCwgMTgsIDIzOCwgCisgICAgMTcsIDEsIDI1MSwgNjcsIDIzOCwgMTcsIDEsIDI0OCwgMjU1LCAyMzgsIDE3LCAxLCAyMzgsIDc4LCAyMzgsIDE3LCAxLCAKKyAgICAyNDQsIDE5NCwgMjM4LCAxNywgMSwgMjUxLCA2MywgMjM4LCAxNywgMSwgMjE3LCAxMTcsIDIzOCwgMTcsIDEsIDIzMCwgCisgICAgMTk2LCAyMzgsIDE3LCAxLCAyMzcsIDE1MCwgMjM4LCAxNywgMSwgMjA5LCA0OSwgMjM4LCAxNywgMSwgMjQxLCAxMzMsIAorICAgIDIzOCwgMTcsIDEsIDIyOCwgMTc2LCAyMzgsIDE3LCAxLCAyMjgsIDkwLCAyMzgsIDE3LCAxLCAyMjUsIDExNCwgMjM4LCAxNywgCisgICAgMSwgMjIzLCA2MiwgMjM4LCAxNywgMSwgMjMwLCAxNTQsIDIzOCwgMTcsIDEsIDIwNiwgMTk2LCAyMzgsIDE3LCAxLCAyMTksIAorICAgIDE0NSwgMjM4LCAxNywgMSwgMjIyLCA1OCwgMjM4LCAxNywgMSwgMjE2LCAxOTYsIDIzOCwgMTcsIDEsIDIxNCwgMjE2LCAKKyAgICAyMzgsIDE3LCAxLCAyMDksIDE2NiwgMjM4LCAxNywgMSwgMjA0LCAxMCwgMjM4LCAxNywgMSwgMjQwLCA4OCwgMjM4LCAxNywgCisgICAgMSwgMjMxLCA4NywgMjM4LCAxNywgMSwgMjM1LCAyNTIsIDIzOCwgMTcsIDEsIDIxOSwgMjIzLCAyMzgsIDE3LCAxLCAyMjIsIAorICAgIDY0LCAyMzYsIDExLCAzOCwgMjE4LCAyMzcsIDEsIDI1MCwgMjMxLCAzOCwgMjE4LCAyMzcsIDEsIDI0NywgMTYwLCAzOCwgCisgICAgMjE4LCAyMzcsIDEsIDIzOCwgMjQ4LCAzOCwgMjE4LCAyMzcsIDEsIDI0MywgMTAxLCAzOCwgMjE4LCAyMzcsIDEsIDc0LCAKKyAgICAzOCwgMjE4LCAyMzcsIDEsIDIwMiwgNjIsIDM4LCAyMTgsIDIzNywgMSwgMjQxLCAyNDcsIDM4LCAyMTgsIDIzNywgMSwgCisgICAgMjAyLCA5OSwgMzgsIDIxOCwgMjM3LCAxLCAyNDEsIDI0NSwgMzgsIDIxOCwgMjM3LCAxLCA3NSwgMzgsIDIxOCwgMjM3LCAxLCAKKyAgICAyMjksIDE1LCAzOCwgMjE4LCAyMzcsIDEsIDIyNywgMjA2LCAzOCwgMjE4LCAyMzcsIDEsIDIyNCwgMjM4LCAzOCwgMjE4LCAKKyAgICAyMzcsIDEsIDIyMiwgMjI4LCAzOCwgMjE4LCAyMzcsIDEsIDIwNSwgMTc1LCAzOCwgMjE4LCAyMzcsIDEsIDIxOSwgMjIsIAorICAgIDM4LCAyMTgsIDIzNywgMSwgMjE2LCAxMjEsIDM4LCAyMTgsIDIzNywgMSwgMjEyLCAxNDIsIDM4LCAyMTgsIDIzNywgMSwgCisgICAgMjA5LCAyNTAsIDM4LCAyMTgsIDIzNywgMSwgNjgsIDM4LCAyMTgsIDIzNywgMSwgMjQ2LCAxNTEsIDM4LCAyMTgsIDIzNywgCisgICAgMSwgMjEyLCAyMzUsIDM4LCAyMTgsIDIzNywgMSwgMjEzLCA0NSwgMzgsIDIxOCwgMjM3LCAxLCAyMDIsIDIxNSwgMzgsIAorICAgIDIxOCwgMjM3LCAxLCAyMDMsIDMwLCAzOCwgMjE4LCAyMzcsIDEsIDc4LCAzOCwgMjE4LCAyMzcsIDEsIDIyMCwgMTgsIDM4LCAKKyAgICAyMTgsIDIzNywgMSwgMjQxLCAxNTQsIDM4LCAyMTgsIDIzNywgMSwgMTUyLCAzOCwgMjE4LCAyMzcsIDEsIDIwNywgMjU0LCAKKyAgICAzOCwgMjE4LCAyMzcsIDEsIDIwNiwgNDMsIDM4LCAyMTgsIDIzNywgMSwgMjAzLCAzNCwgMzgsIDIxOCwgMjM3LCAxLCAyMDMsIAorICAgIDMyLCAzOCwgMjE4LCAyMzcsIDEsIDIwMywgNjYsIDM4LCAyMTgsIDIzNywgMSwgMjMxLCAxMTAsIDM4LCAyMTgsIDIzNywgMSwgCisgICAgMjAyLCAyMTMsIDM4LCAyMTgsIDIzNywgMSwgMTk4LCAzOCwgMjE4LCAyMzcsIDEsIDIzNSwgMTcxLCAzOSwgMzgsIDIxOCwgCisgICAgMjM3LCAxLCAyNTAsIDIzMSwgMzksIDM4LCAyMTgsIDIzNywgMSwgMjQzLCAxMDEsIDM5LCAzOCwgMjE4LCAyMzcsIDEsIAorICAgIDIwMiwgOTksIDM5LCAzOCwgMjE4LCAyMzcsIDEsIDIyMiwgMjI4LCAzOSwgMzgsIDIxOCwgMjM3LCAxLCAyMTIsIDE0MiwgCisgICAgMjA3LCAxOSwgMSwgMjUxLCA2LCAyMDcsIDE5LCAxLCAyNDgsIDEwNiwgMjA3LCAxOSwgMSwgMjM4LCAyMzYsIDIwNywgMTksIAorICAgIDEsIDIyOSwgMTQ0LCAyMDcsIDE5LCAxLCAyNDQsIDM3LCAyMDcsIDE5LCAxLCAyMzYsIDEzNiwgMjA3LCAxOSwgMSwgMjA0LCAKKyAgICAwLCAyMDcsIDE5LCAxLCAyMDIsIDgzLCAyMDcsIDE5LCAxLCAyMzYsIDQ1LCAyMDcsIDE5LCAxLCAyMDksIDEzMiwgMjA3LCAKKyAgICAxOSwgMSwgMjAyLCAyMzYsIDIwNywgMTksIDEsIDIzMCwgMjIsIDIwNywgMTksIDEsIDIxMiwgMjU1LCAyMDcsIDE5LCAxLCAKKyAgICAyMjgsIDI0LCAyMDcsIDE5LCAxLCAyMjQsIDI0NywgMjA3LCAxOSwgMSwgMjQzLCAyNTMsIDIwNywgMTksIDEsIDIyMSwgNDAsIAorICAgIDIwNywgMTksIDEsIDIwMiwgNiwgMjA3LCAxOSwgMSwgMjE0LCAyNDgsIDIwNywgMTksIDEsIDI1MSwgNTksIDIwNywgMTksIAorICAgIDEsIDIxNywgMTkxLCAyMDcsIDE5LCAxLCAyMTUsIDI3LCAyMDcsIDE5LCAxLCAyMTcsIDcwLCAyMDcsIDE5LCAxLCAyMTYsIAorICAgIDE3NSwgMjA3LCAxOSwgMSwgMjA5LCA5NiwgMjA3LCAxOSwgMSwgMjM4LCAxMTQsIDIwNywgMTksIDEsIDEzNSwgMjA3LCAxOSwgCisgICAgMSwgNzUsIDIwNywgMTksIDEsIDY4LCAyMDcsIDE5LCAxLCAyMTEsIDExOSwgMjA3LCAxOSwgMjAzLCAyMzgsIDI0MywgMTQxLCAKKyAgICAzOCwgMjE4LCAyMzEsIDIsIDYzLCAzOCwgMjE4LCAyMzEsIDIsIDc1LCAzOCwgMjE4LCAyMzEsIDIsIDY4LCAzOCwgMjE4LCAKKyAgICAyMzEsIDIsIDE3MywgMzgsIDIxOCwgMjMxLCAyLCAyMjgsIDIwOSwgMzgsIDIxOCwgMjMxLCAyLCAyMzksIDgsIDM4LCAyMTgsIAorICAgIDIzMSwgMiwgMjM3LCAyMzAsIDM4LCAyMTgsIDIzMSwgMiwgMjAzLCAxODIsIDM4LCAyMTgsIDIzMSwgMiwgMjQ3LCA5MiwgCisgICAgMzgsIDIxOCwgMjMxLCAyLCAyMzAsIDE4MSwgMzgsIDIxOCwgMjMxLCAyLCAyMzAsIDE0MSwgMzgsIDIxOCwgMjMxLCAyLCAKKyAgICAyMTAsIDIyLCAzOCwgMjE4LCAyMzEsIDIsIDIwNywgMjAzLCAzOCwgMjE4LCAyMzEsIDIsIDI0NCwgMjEyLCAzOCwgMjE4LCAKKyAgICAyMzEsIDIsIDI0MywgMjMzLCAzOCwgMjE4LCAyMzEsIDIsIDI0MiwgNDIsIDM4LCAyMTgsIDIzMSwgMiwgMjA5LCAxMDgsIAorICAgIDM4LCAyMTgsIDIzMSwgMiwgMTg1LCAzOCwgMjE4LCAyMzEsIDIsIDI0OSwgMzIsIDM4LCAyMTgsIDIzMSwgMiwgMjQwLCAKKyAgICAxMDgsIDM4LCAyMTgsIDIzMSwgMiwgMjAxLCAyMDEsIDM4LCAyMTgsIDIzMSwgMiwgMjIxLCA4NCwgMzgsIDIxOCwgMjMxLCAKKyAgICAyLCAxOTIsIDM4LCAyMTgsIDIzMSwgMiwgMjI0LCAxNTUsIDM4LCAyMTgsIDIzMSwgMiwgMjIzLCAyNDYsIDM4LCAyMTgsIAorICAgIDIzMSwgMiwgMTk4LCAzOCwgMjE4LCAyMzEsIDIsIDIwNiwgODYsIDM4LCAyMTgsIDIzMSwgMiwgMjA1LCAyMzAsIDM4LCAKKyAgICAyMTgsIDIzMSwgMiwgMjE2LCAyMjAsIDM4LCAyMTgsIDIzMSwgMiwgMjE1LCAxNDUsIDM4LCAyMTgsIDIzMSwgMiwgMjI4LCAKKyAgICAxMTMsIDM4LCAyMTgsIDIzMSwgMiwgMjE1LCAzNiwgMzgsIDIxOCwgMjMxLCAyLCAyMDIsIDExNiwgMzgsIDIxOCwgMjMxLCAKKyAgICAyLCAyMTMsIDkwLCAzOCwgMjE4LCAyMzEsIDIsIDIxMSwgMTY0LCAzOCwgMjE4LCAyMzEsIDIsIDE1MiwgMzgsIDIxOCwgCisgICAgMjMxLCAyLCAyNTAsIDI4LCAzOCwgMjE4LCAyMzEsIDIsIDI1MCwgMjcsIDM4LCAyMTgsIDIzMSwgMiwgMjUwLCAyNiwgMzgsIAorICAgIDIxOCwgMjMxLCAyLCAyMDMsIDE1MywgMzgsIDIxOCwgMjMxLCAyLCAyNDQsIDE5MCwgMzgsIDIxOCwgMjMxLCAyLCAyNDQsIAorICAgIDE4OSwgMzgsIDIxOCwgMjMxLCAyLCAyNDksIDgsIDM4LCAyMTgsIDIzMSwgMiwgMjQ3LCAxNDQsIDM4LCAyMTgsIDIzMSwgCisgICAgMjAzLCAyMzgsIDI0MywgMTQxLCAzOCwgMjE4LCAyMzEsIDQyLCAxMDUsIDM4LCAyMTgsIDIzMSwgNDIsIDEwOCwgMzgsIAorICAgIDIxOCwgMjMxLCA0MiwgMjA5LCAxNTIsIDM4LCAyMTgsIDIzMSwgNDIsIDIwNywgMTUxLCAzOCwgMjE4LCAyMzEsIDQyLCAKKyAgICAyMzYsIDExLCAyNDQsIDE3LCA2LCAxLCAxNjMsIDc1LCAyNDQsIDE3LCA2LCAxLCAxNjMsIDc0LCAyNDQsIDE3LCA2LCAxLCAKKyAgICAxNjMsIDYzLCAyNDQsIDE3LCA2LCAxLCAxNjMsIDI1MSwgNzMsIDI0NCwgMTcsIDYsIDEsIDE2MywgNzgsIDI0NCwgMTcsIDYsIAorICAgIDEsIDE2MywgMjIwLCAxOCwgMjQ0LCAxNywgNiwgMSwgMjEyLCAyMjgsIDc1LCAyNDQsIDE3LCA2LCAxLCAyMTIsIDIyOCwgCisgICAgNzQsIDI0NCwgMTcsIDYsIDEsIDIxMiwgMjI4LCA2MywgMjQ0LCAxNywgNiwgMSwgMjEyLCAyMjgsIDI1MSwgNzMsIDI0NCwgCisgICAgMTcsIDYsIDEsIDIxMiwgMjI4LCA3OCwgMjQ0LCAxNywgNiwgMSwgMjEyLCAyMjgsIDIyMCwgMTgsIDI0NCwgMTcsIDYsIDEsIAorICAgIDI1MCwgOCwgMjQ0LCAxNywgNiwgMSwgMjE5LCAxOTUsIDI0NCwgMTcsIDYsIDEsIDIwMywgMjE3LCAyNDQsIDE3LCA2LCAxLCAKKyAgICAyMDMsIDQ5LCAyNDQsIDE3LCA2LCAxLCAyMzcsIDE3MSwgMjQ0LCAxNywgNiwgMSwgMjE5LCAyMywgMjQ0LCAxNywgNiwgMSwgCisgICAgMjQ4LCAxNTAsIDI0NCwgMTcsIDYsIDEsIDIwOSwgMTc2LCAyNDQsIDE3LCA2LCAxLCAyNDQsIDYxLCAyNDQsIDE3LCA2LCAxLCAKKyAgICAyNDYsIDE2NiwgMjQ0LCAxNywgNiwgMSwgMjMwLCAxNTksIDI0NCwgMTcsIDYsIDEsIDIyOSwgMjA4LCAyNDQsIDE3LCA2LCAKKyAgICAxLCAyMzgsIDIxMSwgMjQ0LCAxNywgNiwgMSwgMjQxLCAxNTQsIDI0NCwgMTcsIDYsIDEsIDIwNiwgNTAsIDI0NCwgMTcsIDYsIAorICAgIDEsIDI0MCwgMjQzLCAyNDQsIDE3LCA2LCAxLCAyMDksIDkwLCAyNDQsIDE3LCA2LCAxLCAyNDEsIDE3LCAyNDQsIDE3LCA2LCAKKyAgICAxLCAyMDIsIDkwLCAyNDQsIDE3LCA2LCAxLCAyNDEsIDcsIDI0NCwgMTcsIDYsIDEsIDIwMiwgNzAsIDI0NCwgMTcsIDYsIDEsIAorICAgIDI0MSwgMjgsIDI0NCwgMTcsIDYsIDEsIDI0MSwgMTIyLCAyNDQsIDE3LCA2LCAxLCAyNDEsIDEwMywgMjQ0LCAxNywgNiwgMSwgCisgICAgMjQxLCA5MiwgMjQ0LCAxNywgNiwgMSwgMjQxLCA3OCwgMjQ0LCAxNywgNiwgMSwgMjIwLCA1NywgMjQ0LCAxNywgNiwgMSwgCisgICAgMjQwLCAyMjAsIDI0NCwgMTcsIDUsIDEsIDE2MywgNzUsIDI0NCwgMTcsIDUsIDEsIDE2MywgNzQsIDI0NCwgMTcsIDUsIDEsIAorICAgIDE2MywgNjMsIDI0NCwgMTcsIDUsIDEsIDE2MywgMjUxLCA3MywgMjQ0LCAxNywgNSwgMSwgMTYzLCA3OCwgMjQ0LCAxNywgNSwgCisgICAgMSwgMTYzLCAyMjAsIDE4LCAyNDQsIDE3LCA1LCAxLCAyMTIsIDIyOCwgNzUsIDI0NCwgMTcsIDUsIDEsIDIxMiwgMjI4LCAKKyAgICA3NCwgMjQ0LCAxNywgNSwgMSwgMjEyLCAyMjgsIDYzLCAyNDQsIDE3LCA1LCAxLCAyMTIsIDIyOCwgMjUxLCA3MywgMjQ0LCAKKyAgICAxNywgNSwgMSwgMjEyLCAyMjgsIDc4LCAyNDQsIDE3LCA1LCAxLCAyMTIsIDIyOCwgMjIwLCAxOCwgMjQ0LCAxNywgNSwgMSwgCisgICAgMjUwLCA4LCAyNDQsIDE3LCA1LCAxLCAyMTksIDE5NSwgMjQ0LCAxNywgNSwgMSwgMjAzLCAyMTcsIDI0NCwgMTcsIDUsIDEsIAorICAgIDIwMywgNDksIDI0NCwgMTcsIDUsIDEsIDIzNywgMTcxLCAyNDQsIDE3LCA1LCAxLCAyMTksIDIzLCAyNDQsIDE3LCA1LCAxLCAKKyAgICAyNDgsIDE1MCwgMjQ0LCAxNywgNSwgMSwgMjA5LCAxNzYsIDI0NCwgMTcsIDUsIDEsIDI0NCwgNjEsIDI0NCwgMTcsIDUsIDEsIAorICAgIDI0NiwgMTY2LCAyNDQsIDE3LCA1LCAxLCAyMzAsIDE1OSwgMjQ0LCAxNywgNSwgMSwgMjI5LCAyMDgsIDI0NCwgMTcsIDUsIAorICAgIDEsIDIzOCwgMjExLCAyNDQsIDE3LCA1LCAxLCAyNDEsIDE1NCwgMjQ0LCAxNywgNSwgMSwgMjA2LCA1MCwgMjQ0LCAxNywgNSwgCisgICAgMSwgMjQwLCAyNDMsIDI0NCwgMTcsIDUsIDEsIDIwOSwgOTAsIDI0NCwgMTcsIDUsIDEsIDI0MSwgMTcsIDI0NCwgMTcsIDUsIAorICAgIDEsIDIwMiwgOTAsIDI0NCwgMTcsIDUsIDEsIDI0MSwgNywgMjQ0LCAxNywgNSwgMSwgMjAyLCA3MCwgMjQ0LCAxNywgNSwgMSwgCisgICAgMjQxLCAyOCwgMjQ0LCAxNywgNSwgMSwgMjQxLCAxMjIsIDI0NCwgMTcsIDUsIDEsIDI0MSwgMTAzLCAyNDQsIDE3LCA1LCAxLCAKKyAgICAyNDEsIDkyLCAyNDQsIDE3LCA1LCAxLCAyNDEsIDc4LCAyNDQsIDE3LCA1LCAxLCAyMjAsIDU3LCAyNDQsIDE3LCA1LCAxLCAKKyAgICAyNDAsIDIyMCwgMjEzLCA1MCwgMSwgMjE5LCAyMCwgMjEzLCA1MCwgMSwgMjA4LCAxMzEsIDIxMywgNTAsIDEsIDIyOSwgOTYsIAorICAgIDIxMywgNTAsIDEsIDI0MCwgNTMsIDIxMywgNTAsIDEsIDIwOSwgNjUsIDIxMywgNTAsIDEsIDIxMiwgMTMsIDIxMywgNTAsIAorICAgIDEsIDIxMCwgMTkwLCAyMTMsIDUwLCAxLCAyNDYsIDkwLCAyMTMsIDUwLCAxLCAyMDMsIDUxLCAyMTMsIDUwLCAxLCAyMzYsIAorICAgIDksIDIxMywgNTAsIDEsIDI0OCwgODUsIDIxMywgNTAsIDEsIDI0NCwgNzQsIDIxMywgNTAsIDEsIDIzOCwgMjUwLCAyMTMsIAorICAgIDUwLCAxLCAyMDUsIDE3MCwgMjEzLCA1MCwgMSwgMjA5LCA3MSwgMjEzLCA1MCwgMSwgMjAyLCAxNSwgMjEzLCA1MCwgMSwgCisgICAgMjI1LCAxOCwgMjEzLCA1MCwgMSwgMjMwLCA4MCwgMjEzLCA1MCwgMSwgMjAzLCAyNTQsIDIxMywgNTAsIDEsIDIzNywgMTU5LCAKKyAgICAyMTMsIDUwLCAxLCAyMjcsIDMzLCAyMTMsIDUwLCAxLCAyMjQsIDExMSwgMjEzLCA1MCwgMSwgMjMxLCA5MCwgMjEzLCA1MCwgCisgICAgMSwgMjQxLCAxNTIsIDIxMywgNTAsIDEsIDI1MCwgNzUsIDIxMywgNTAsIDEsIDI1MSwgMTEzLCAyMTMsIDUwLCAxLCAyMjAsIAorICAgIDMxLCAyMTMsIDUwLCAxLCAyMDMsIDI0MSwgMjEzLCA1MCwgMSwgMjE5LCAyMTEsIDIxMywgNTAsIDEsIDI1MSwgNzMsIDIxMywgCisgICAgNTAsIDEsIDIxNSwgMjI0LCAyMTMsIDUwLCAxLCAyMjEsIDQwLCAyMTMsIDUwLCAxLCAyNDEsIDE3MiwgMjEzLCA1MCwgMSwgCisgICAgMjUxLCA3OCwgMjEzLCA1MCwgMSwgMjM1LCAxNjIsIDIxMywgNTAsIDEsIDIwNiwgMjI0LCAyMTMsIDUwLCAxLCAyMjAsIDk1LCAKKyAgICAyMTMsIDUwLCAxLCAyMjAsIDEwLCAyMTMsIDUwLCAxLCAyMjAsIDU1LCAyMTMsIDUwLCAxLCAyNTAsIDExLCAyMTMsIDUwLCAKKyAgICAxLCAyNTAsIDEyMSwgMjEzLCA1MCwgMSwgMjE5LCAyNDQsIDIxMywgNTAsIDEsIDI1MSwgNTQsIDIxMywgNTAsIDEsIDI0MSwgCisgICAgMjEsIDIxMywgNTAsIDEsIDI1MCwgOTksIDIxMywgNTAsIDEsIDI0MSwgMTgzLCAyMTMsIDUwLCAxLCAyMzUsIDE3MCwgMjEzLCAKKyAgICA1MCwgMSwgMjAzLCAxNiwgMjE5LCAyMjUsIDEsIDI1MSwgMzAsIDIxOSwgMjI1LCAxLCAyNDksIDMyLCAyMTksIDIyNSwgMSwgCisgICAgMjEwLCAyMiwgMjE5LCAyMjUsIDEsIDIzMCwgMTgxLCAyMTksIDIyNSwgMSwgMjAzLCAxODIsIDIxOSwgMjI1LCAxLCAyMjksIAorICAgIDE0NCwgMjE5LCAyMjUsIDEsIDI0NCwgNjAsIDIxOSwgMjI1LCAxLCAyMTYsIDIyMCwgMjE5LCAyMjUsIDEsIDIxNSwgMzYsIAorICAgIDIxOSwgMjI1LCAxLCAyMTMsIDUsIDIxOSwgMjI1LCAxLCAyNDQsIDEsIDIxOSwgMjI1LCAxLCAyNDcsIDcsIDIxOSwgMjI1LCAKKyAgICAxLCAyMzksIDgsIDIxOSwgMjI1LCAxLCAyNDAsIDEwOCwgMjE5LCAyMjUsIDEsIDIxNywgMTI0LCAyMTksIDIyNSwgMSwgCisgICAgMjMwLCAzOCwgMjE5LCAyMjUsIDEsIDIyOCwgMTA4LCAyMTksIDIyNSwgMSwgMjI0LCAxMjQsIDIxOSwgMjI1LCAxLCAyMjEsIAorICAgIDI0LCAyMTksIDIyNSwgMSwgMjA0LCA3MCwgMjE5LCAyMjUsIDEsIDE1MiwgMjE5LCAyMjUsIDEsIDE5OCwgMjE5LCAyMjUsIAorICAgIDEsIDYzLCAyMTksIDIyNSwgMSwgNzQsIDIxOSwgMjI1LCAxLCA3NSwgMjE5LCAyMjUsIDEsIDc4LCAyMTksIDIyNSwgMSwgCisgICAgNjgsIDIxOSwgMjI1LCAxLCAyNTIsIDI1LCAyMTksIDIyNSwgMSwgMjQxLCAxNjEsIDIxOSwgMjI1LCAxLCAyMjAsIDE4LCAKKyAgICAyMTksIDIyNSwgMTcsIDIwMiwgODQsIDIxOSwgMjI1LCAxNywgMTA1LCAyMTksIDIyNSwgMTcsIDEwOCwgMjE5LCAyMjUsIAorICAgIDE3LCAxNDcsIDIxOSwgMjI1LCAxNywgMTQ5LCAyMTksIDIyNSwgMTcsIDE3MCwgMjE5LCAyMjUsIDE3LCAxOTUsIDIxOSwgCisgICAgMjI1LCAxNywgMjEzLCAxMTEsIDIxOSwgMjI1LCAxNywgMTk5LCAyMTksIDIyNSwgMTcsIDIyMiwgNjMsIDI0MSwgMTE4LCAxLCAKKyAgICA2MywgMjQxLCAxMTgsIDEsIDI0OCwgMTYyLCAyNDEsIDExOCwgMSwgMjQ2LCAyMzgsIDI0MSwgMTE4LCAxLCAyNDYsIDE3MCwgCisgICAgMjQxLCAxMTgsIDEsIDI0NCwgNzUsIDI0MSwgMTE4LCAxLCAyMjMsIDE3LCAyNDEsIDExOCwgMSwgMjQzLCAyNDgsIDI0MSwgCisgICAgMTE4LCAxLCAyNDEsIDE0NSwgMjQxLCAxMTgsIDEsIDc0LCAyNDEsIDExOCwgMSwgMjQwLCA2MCwgMjQxLCAxMTgsIDEsIAorICAgIDIzOCwgMTkwLCAyNDEsIDExOCwgMSwgMjM4LCA1MiwgMjQxLCAxMTgsIDEsIDIzNywgNjcsIDI0MSwgMTE4LCAxLCA3NSwgCisgICAgMjQxLCAxMTgsIDEsIDIzMCwgMTYxLCAyNDEsIDExOCwgMSwgMjI5LCAyMDEsIDI0MSwgMTE4LCAxLCAyMjcsIDIzNCwgMjQxLCAKKyAgICAxMTgsIDEsIDIyNywgNzMsIDI0MSwgMTE4LCAxLCAyMjUsIDIwLCAyNDEsIDExOCwgMSwgMjIyLCAyNDAsIDI0MSwgMTE4LCAKKyAgICAxLCAyMDEsIDIwMSwgMjQxLCAxMTgsIDEsIDIyMiwgNDEsIDI0MSwgMTE4LCAxLCA3OCwgMjQxLCAxMTgsIDEsIDIxOSwgMzQsIAorICAgIDI0MSwgMTE4LCAxLCAyMTcsIDEwNiwgMjQxLCAxMTgsIDEsIDIxNiwgMTU4LCAyNDEsIDExOCwgMSwgMjE1LCAxODAsIDI0MSwgCisgICAgMTE4LCAxLCAyMTQsIDE3NywgMjQxLCAxMTgsIDEsIDIxMywgNDMsIDI0MSwgMTE4LCAxLCAyMDksIDE4NywgMjQxLCAxMTgsIAorICAgIDEsIDIwOSwgOTIsIDI0MSwgMTE4LCAxLCA2OCwgMjQxLCAxMTgsIDEsIDIwNiwgNTUsIDI0MSwgMTE4LCAxLCAyMDMsIDE3NiwgCisgICAgMjQxLCAxMTgsIDEsIDIwMywgMTI0LCAyNDEsIDExOCwgMSwgMjAyLCA5MiwgMjQxLCAxMTgsIDEsIDIwMiwgNzEsIDI0MSwgCisgICAgMTE4LCAxLCAyMzgsIDEwNSwgMjQxLCAxMTgsIDEsIDIzOCwgMTExLCAyNDEsIDExOCwgMSwgMjI5LCAxMjksIDI0NywgMTQsIAorICAgIDI1MSwgMzEsIDEsIDI1MSwgMSwgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjQ4LCAxMDgsIDI0NywgMTQsIDI1MSwgMzEsIDEsIAorICAgIDIzOCwgNjksIDI0NywgMTQsIDI1MSwgMzEsIDEsIDI0NCwgMTQwLCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyNDEsIDE3MSwgCisgICAgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjAyLCAxMDIsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDI0MCwgMTgzLCAyNDcsIDE0LCAKKyAgICAyNTEsIDMxLCAxLCAyMDIsIDY1LCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyMDksIDIxMywgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgCisgICAgMjQ2LCAxOTksIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIwMiwgMjI0LCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyMDIsIDgwLCAKKyAgICAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyMzAsIDIyMywgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjEzLCA5MCwgMjQ3LCAxNCwgCisgICAgMjUxLCAzMSwgMSwgMjI4LCAxNywgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjMwLCAyMzUsIDI0NywgMTQsIDI1MSwgMzEsIDEsIAorICAgIDIwMywgMTcyLCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyNDIsIDcsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDI0NywgMzksIDI0NywgCisgICAgMTQsIDI1MSwgMzEsIDEsIDIzMCwgMTQyLCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyMjksIDI0MCwgMjQ3LCAxNCwgMjUxLCAKKyAgICAzMSwgMSwgMjI2LCAxOTQsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIzNywgMTQsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIxNywgCisgICAgMTA3LCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyNTAsIDE3NywgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjQ2LCAxMDcsIDI0NywgCisgICAgMTQsIDI1MSwgMzEsIDEsIDI0NiwgMTQyLCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyNDUsIDYzLCAyNDcsIDE0LCAyNTEsIDMxLCAKKyAgICAxLCAyMjUsIDEwMywgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjE3LCAxMTEsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIyMSwgCisgICAgMTUxLCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyNDEsIDI0MCwgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjEzLCA3MywgMjQ3LCAKKyAgICAxNCwgMjUxLCAzMSwgMSwgMjMwLCAxNjIsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIyMCwgMzEsIDI0NywgMTQsIDI1MSwgMzEsIAorICAgIDEsIDIwNywgMTI1LCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyNDAsIDgzLCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyNDEsIDI1MywgCisgICAgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjQ2LCAxNzYsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIxOSwgOSwgMjQ3LCAxNCwgMjUxLCAKKyAgICAzMSwgMSwgMjM4LCA5NSwgMjQ3LCAxNCwgMjUxLCAzMSwgMSwgMjE2LCAxNzIsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIxMywgCisgICAgOTksIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIwNSwgMjMyLCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyMDgsIDE5MywgMjQ3LCAKKyAgICAxNCwgMjUxLCAzMSwgMSwgMjEyLCAyMDcsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIzMCwgMTk0LCAyNDcsIDE0LCAyNTEsIAorICAgIDMxLCAxLCAyNDUsIDY0LCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyNDcsIDcsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIwMywgCisgICAgNTYsIDI0NywgMTQsIDI1MSwgMzEsIDEsIDIxOCwgMTAyLCAyNDcsIDE0LCAyNTEsIDMxLCAxLCAyMjksIDYyLCAyNDcsIDE0LCAKKyAgICAyNTEsIDMxLCAyNDYsIDQ5LCA4MiwgMjksIDM0LCAyLCAyNTEsIDIzMSwgMjksIDM0LCAyLCAyNTEsIDIzMCwgMjksIDM0LCAKKyAgICAyLCAyNTEsIDIyOSwgMjksIDM0LCAyLCAyNTEsIDIyOCwgMjksIDM0LCAyLCAyNTEsIDIyNywgMjksIDM0LCAyLCAyNTEsIAorICAgIDIyNiwgMjksIDM0LCAyLCAyNTEsIDIyNSwgMjksIDM0LCAyLCAyNTEsIDIyNCwgMjksIDM0LCAyLCAyNTEsIDIyMywgMjksIAorICAgIDM0LCAyLCAyNTEsIDIyMiwgMjksIDM0LCAyLCAyNTEsIDIyMSwgMjksIDM0LCAyLCAyNTEsIDIyMCwgMjksIDM0LCAyLCAKKyAgICAyNTEsIDIxOSwgMjksIDM0LCAyLCAyNTEsIDIxOCwgMjksIDM0LCAyLCAyNTEsIDIxNywgMjksIDM0LCAyLCAyNTEsIDIxNiwgCisgICAgMjksIDM0LCAyLCAyNTEsIDIxNSwgMjksIDM0LCAyLCAyNTEsIDIxNCwgMjksIDM0LCAyLCAyNTEsIDIxMywgMjksIDM0LCAyLCAKKyAgICAyNTEsIDIxMiwgMjksIDM0LCAyLCAyNTEsIDIxMSwgMjksIDM0LCAyLCAyNTEsIDIxMCwgMjksIDM0LCAyLCAyNTEsIDIwOSwgCisgICAgMjksIDM0LCAyLCAyNTEsIDIwOCwgMjksIDM0LCAyLCAyNTEsIDIwNywgMjksIDM0LCAyLCAyNTEsIDIwNiwgMjksIDM0LCAyLCAKKyAgICAyNTEsIDIwNSwgMjksIDM0LCAyLCAyNTQsIDIzOSwgMjksIDM0LCAyLCAyNTEsIDIwNCwgMjksIDM0LCAyLCAyNTEsIDIwMywgCisgICAgMjksIDM0LCAyLCAyNTEsIDIwMiwgMjksIDM0LCAyLCAyNTEsIDIwMSwgMjksIDM0LCAyLCAyNTEsIDIwMCwgMjksIDM0LCAyLCAKKyAgICAyNTEsIDE5OSwgMjksIDM0LCAyLCAyNTEsIDE5OCwgMjksIDM0LCAyLCAyNTEsIDE5NywgMjksIDM0LCAyLCAyNTEsIDE5NiwgCisgICAgMjksIDM0LCAyLCAyNTEsIDE5NSwgMjksIDM0LCAyLCAyNTEsIDE5NCwgMjksIDM0LCAyLCAyNTEsIDE5MywgMjksIDM0LCAyLCAKKyAgICAyNTEsIDE5MiwgMjksIDM0LCAyLCAyNTEsIDE5MSwgMjksIDM0LCAyLCAyNTEsIDE5MCwgMjksIDM0LCAyLCAyNTEsIDE4OSwgCisgICAgMjksIDM0LCAyLCAyNTEsIDE4OCwgMjksIDM0LCAyLCAyNTEsIDE4NywgMjksIDM0LCAyLCAyNTEsIDE4NiwgMjksIDM0LCAyLCAKKyAgICAyNTEsIDE4NSwgMjksIDM0LCAyLCAyNTEsIDE4NCwgMjksIDM0LCAyLCAyNTEsIDE4MywgMjksIDM0LCAyLCAyNTEsIDE4MiwgCisgICAgMjksIDM0LCAyLCAyNTEsIDE4MSwgMjksIDM0LCAyLCAyNTEsIDE4MCwgMjksIDM0LCAyLCAyNTEsIDE3OSwgMjksIDM0LCAyLCAKKyAgICAyNTEsIDE3OCwgMjksIDM0LCAyLCAyNTEsIDE3NywgMjksIDM0LCAyLCAyNTEsIDE3NiwgMjksIDM0LCAyLCAyNTEsIDE3NSwgCisgICAgMjksIDM0LCAyLCAyNTEsIDE3NCwgMjksIDM0LCAyLCAyNTEsIDE3MywgMjksIDM0LCAyLCAyNTEsIDE3MiwgMjksIDM0LCAyLCAKKyAgICAyNTEsIDE3MSwgMjksIDM0LCAyLCAyNTEsIDE3MCwgMjksIDM0LCAyLCAyNTEsIDE2OSwgMjksIDM0LCAyLCAyNTEsIDE2OCwgCisgICAgMjksIDM0LCAyLCAyNTEsIDE2NywgMjksIDM0LCAyLCAyNTEsIDE2NiwgMjksIDM0LCAyLCAyNTEsIDE2NSwgMjksIDM0LCAyLCAKKyAgICAyNTEsIDE2NCwgMjksIDM0LCAyLCAyNTEsIDE2MywgMjksIDM0LCAyLCAyNTEsIDE2MiwgMjksIDM0LCAyLCAyNTQsIDE1MiwgCisgICAgMjksIDM0LCAyLCAyNTEsIDE2MSwgMjksIDM0LCAyLCAyNTEsIDE2MCwgMjksIDM0LCAyLCAyNTQsIDExNywgMjksIDM0LCAyLCAKKyAgICAyNTEsIDE1OSwgMjksIDM0LCAyLCAyNTEsIDE1OCwgMjksIDM0LCAyLCAyNTEsIDE1NywgMjksIDM0LCAyLCAyNTEsIDE1NiwgCisgICAgMjksIDM0LCAyLCAyNTQsIDEwNCwgMjksIDM0LCAyLCAyNTEsIDE1NSwgMjksIDM0LCAyLCAyNTEsIDE1NCwgMjksIDM0LCAyLCAKKyAgICAyNTEsIDE1MywgMjksIDM0LCAyLCAyNTEsIDE1MiwgMjksIDM0LCAyLCAyNTEsIDE1MSwgMjksIDM0LCAyLCAyNTMsIDE3NiwgCisgICAgMjksIDM0LCAyLCAyNTMsIDE3NSwgMjksIDM0LCAyLCAyNTMsIDE3NCwgMjksIDM0LCAyLCAyNTMsIDE3MywgMjksIDM0LCAyLCAKKyAgICAyNTMsIDE3MiwgMjksIDM0LCAyLCAyNTMsIDE3MSwgMjksIDM0LCAyLCAyNTMsIDE3MCwgMjksIDM0LCAyLCAyNTMsIDE2OSwgCisgICAgMjksIDM0LCAyLCAyNTMsIDE2NywgMjksIDM0LCAyLCAyNTMsIDE2NiwgMjksIDM0LCAyLCAyNTMsIDE2NSwgMjksIDM0LCAyLCAKKyAgICAyNTMsIDE2NCwgMjksIDM0LCAyLCAyNTMsIDE2MywgMjksIDM0LCAyLCAyNTMsIDE2MiwgMjksIDM0LCAyLCAyNTMsIDE2MCwgCisgICAgMjksIDM0LCAyLCAyNTMsIDE1OSwgMjksIDM0LCAyLCAyNTMsIDE1OCwgMjksIDM0LCAyLCAyNTMsIDE1NywgMjksIDM0LCAyLCAKKyAgICAyNTMsIDE1NiwgMjksIDM0LCAyLCAyNTMsIDE1NSwgMjksIDM0LCAyLCAyNTMsIDE1NCwgMjksIDM0LCAyLCAyNTMsIDE1MywgCisgICAgMjksIDM0LCAyLCAyNTMsIDE1MiwgMjksIDM0LCAyLCAyNTMsIDE1MSwgMjksIDM0LCAyLCAyNTMsIDE1MCwgMjksIDM0LCAyLCAKKyAgICAyNTMsIDE0OSwgMjksIDM0LCAyLCAyNTMsIDE0OCwgMjksIDM0LCAyLCAyNTMsIDE0NywgMjksIDM0LCAyLCAyNTMsIDE0NiwgCisgICAgMjksIDM0LCAyLCAyNTMsIDE0NSwgMjksIDM0LCAyLCAyNTMsIDE0NCwgMjksIDM0LCAyLCAyNTMsIDE0MywgMjksIDM0LCAyLCAKKyAgICAyNTMsIDE0MiwgMjksIDM0LCAyLCAyNTMsIDE0MCwgMjksIDM0LCAyLCAyNTMsIDEzOSwgMjksIDM0LCAyLCAyNTMsIDEzOCwgCisgICAgMjksIDM0LCAyLCAyNTMsIDEzNCwgMjksIDM0LCAyLCAyNTMsIDEzMywgMjksIDM0LCAyLCAyNTMsIDEzMiwgMjksIDM0LCAyLCAKKyAgICAyNTMsIDEzMSwgMjksIDM0LCAyLCAyNTMsIDEyNywgMjksIDM0LCAyLCAyNTMsIDEyNiwgMjksIDM0LCAyLCAyNTMsIDEyNSwgCisgICAgMjksIDM0LCAyLCAyNTMsIDEyNCwgMjksIDM0LCAyLCAyNTMsIDEyMywgMjksIDM0LCAyLCAyNTMsIDEyMiwgMjksIDM0LCAyLCAKKyAgICAyNTMsIDEyMSwgMjksIDM0LCAyLCAyNTMsIDEyMCwgMjksIDM0LCAyLCAyNTMsIDExOSwgMjksIDM0LCAyLCAyNTMsIDExOCwgCisgICAgMjksIDM0LCAyLCAyNTMsIDExNywgMjksIDM0LCAyLCAyNTMsIDExNiwgMjksIDM0LCAyLCAyNTMsIDExNSwgMjksIDM0LCAyLCAKKyAgICAyNTMsIDExNCwgMjksIDM0LCAyLCAyNTMsIDExMywgMjksIDM0LCAyLCAyNTMsIDExMiwgMjksIDM0LCAyLCAyNTMsIDExMSwgCisgICAgMjksIDM0LCAyLCAyNTMsIDExMCwgMjksIDM0LCAyLCAyNTMsIDEwOSwgMjksIDM0LCAyLCAyNTMsIDEwOCwgMjksIDM0LCAyLCAKKyAgICAyNTMsIDEwNywgMjksIDM0LCAyLCAyNTMsIDEwNiwgMjksIDM0LCAyLCAyNTMsIDEwNSwgMjksIDM0LCAyLCAyNTMsIDEwMywgCisgICAgMjksIDM0LCAyLCAyNTMsIDEwMiwgMjksIDM0LCAyLCAyNTMsIDEwMSwgMjksIDM0LCAyLCAyNTMsIDEwMCwgMjksIDM0LCAyLCAKKyAgICAyNTMsIDk5LCAyOSwgMzQsIDIsIDI1MywgOTcsIDI5LCAzNCwgMiwgMjUzLCA5NiwgMjksIDM0LCAyLCAyNTMsIDk1LCAyOSwgCisgICAgMzQsIDIsIDI1MywgOTQsIDI5LCAzNCwgMiwgMjUzLCA5MiwgMjksIDM0LCAyLCAyNTMsIDkxLCAyOSwgMzQsIDIsIDI1MywgCisgICAgOTAsIDI5LCAzNCwgMiwgMjUzLCA1NiwgMjksIDM0LCAyLCAyNTMsIDU0LCAyOSwgMzQsIDIsIDI1MywgNTIsIDI5LCAzNCwgCisgICAgMiwgMjUzLCA1MCwgMjksIDM0LCAyLCAyNTMsIDQ4LCAyOSwgMzQsIDIsIDI1MywgNDYsIDI5LCAzNCwgMiwgMjUzLCA0NCwgCisgICAgMjksIDM0LCAyLCAyNTMsIDQyLCAyOSwgMzQsIDIsIDI1MywgNDAsIDI5LCAzNCwgMiwgMjUzLCAzOCwgMjksIDM0LCAyLCAKKyAgICAyNTMsIDM2LCAyOSwgMzQsIDIsIDI1MywgMzMsIDI5LCAzNCwgMiwgMjUzLCAzMSwgMjksIDM0LCAyLCAyNTMsIDI5LCAyOSwgCisgICAgMzQsIDIsIDI1MywgMjcsIDI5LCAzNCwgMiwgMjUzLCAyNSwgMjksIDM0LCAyLCAyNTMsIDIzLCAyOSwgMzQsIDIsIDI1MywgCisgICAgMjEsIDI5LCAzNCwgMiwgMjUzLCAxOSwgMjksIDM0LCAyLCAyNTIsIDE5MywgMjksIDM0LCAyLCAyNTIsIDE5MiwgMjksIDM0LCAKKyAgICAyLCAyNTIsIDE5MSwgMjksIDM0LCAyLCAyNTIsIDE5MCwgMjksIDM0LCAyLCAyNTIsIDE4OSwgMjksIDM0LCAyLCAyNTIsIAorICAgIDE4OCwgMjksIDM0LCAyLCAyNTIsIDE4NiwgMjksIDM0LCAyLCAyNTIsIDE4NSwgMjksIDM0LCAyLCAyNTIsIDE4NCwgMjksIAorICAgIDM0LCAyLCAyNTIsIDE4MywgMjksIDM0LCAyLCAyNTIsIDE4MiwgMjksIDM0LCAyLCAyNTIsIDE4MSwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDE3OSwgMjksIDM0LCAyLCAyNTIsIDE3OCwgMjksIDM0LCAyLCAyNTIsIDE3NCwgMjksIDM0LCAyLCAyNTIsIDE3MywgCisgICAgMjksIDM0LCAyLCAyNTIsIDE3MSwgMjksIDM0LCAyLCAyNTIsIDE3MCwgMjksIDM0LCAyLCAyNTIsIDE2OSwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDE2OCwgMjksIDM0LCAyLCAyNTIsIDE2NywgMjksIDM0LCAyLCAyNTIsIDE2NiwgMjksIDM0LCAyLCAyNTIsIDE2NSwgCisgICAgMjksIDM0LCAyLCAyNTIsIDE2NCwgMjksIDM0LCAyLCAyNTIsIDE2MywgMjksIDM0LCAyLCAyNTIsIDE2MiwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDE2MSwgMjksIDM0LCAyLCAyNTIsIDE2MCwgMjksIDM0LCAyLCAyNTIsIDE1OSwgMjksIDM0LCAyLCAyNTIsIDE1OCwgCisgICAgMjksIDM0LCAyLCAyNTIsIDE1NywgMjksIDM0LCAyLCAyNTIsIDE1NiwgMjksIDM0LCAyLCAyNTIsIDE1NSwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDE1NCwgMjksIDM0LCAyLCAyNTIsIDE1MywgMjksIDM0LCAyLCAyNTIsIDE1MiwgMjksIDM0LCAyLCAyNTIsIDE1MSwgCisgICAgMjksIDM0LCAyLCAyNTIsIDE1MCwgMjksIDM0LCAyLCAyNTIsIDE0OSwgMjksIDM0LCAyLCAyNTIsIDE0OCwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDE0NywgMjksIDM0LCAyLCAyNTIsIDE0NiwgMjksIDM0LCAyLCAyNTIsIDE0NSwgMjksIDM0LCAyLCAyNTIsIDE0NCwgCisgICAgMjksIDM0LCAyLCAyNTIsIDE0MywgMjksIDM0LCAyLCAyNTIsIDE0MiwgMjksIDM0LCAyLCAyNTIsIDE0MSwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDE0MCwgMjksIDM0LCAyLCAyNTIsIDEzOSwgMjksIDM0LCAyLCAyNTIsIDEzOCwgMjksIDM0LCAyLCAyNTIsIDEzNywgCisgICAgMjksIDM0LCAyLCAyNTIsIDEzNiwgMjksIDM0LCAyLCAyNTIsIDEzNSwgMjksIDM0LCAyLCAyNTIsIDEzNCwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDEzMywgMjksIDM0LCAyLCAyNTIsIDEzMiwgMjksIDM0LCAyLCAyNTIsIDEzMSwgMjksIDM0LCAyLCAyNTIsIDEzMCwgCisgICAgMjksIDM0LCAyLCAyNTIsIDEyOSwgMjksIDM0LCAyLCAyNTIsIDEyOCwgMjksIDM0LCAyLCAyNTIsIDEyNywgMjksIDM0LCAyLCAKKyAgICAyNTIsIDEyNiwgMjksIDM0LCAyLCAyNTIsIDEyNSwgMjksIDM0LCAyLCAyNTIsIDEyNCwgMjksIDM0LCAyLCAyNTIsIDEyMywgCisgICAgMjksIDM0LCAyLCAyNTIsIDEyMiwgMjksIDM0LCAyLCAyNTIsIDEyMSwgMjksIDM0LCAyLCAyNTIsIDEyMCwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDExOSwgMjksIDM0LCAyLCAyNTIsIDExOCwgMjksIDM0LCAyLCAyNTIsIDExNywgMjksIDM0LCAyLCAyNTIsIDExNiwgCisgICAgMjksIDM0LCAyLCAyNTIsIDExNSwgMjksIDM0LCAyLCAyNTIsIDExNCwgMjksIDM0LCAyLCAyNTIsIDExMywgMjksIDM0LCAyLCAKKyAgICAyNTIsIDExMiwgMjksIDM0LCAyLCAyNTIsIDExMSwgMjksIDM0LCAyLCAyNTIsIDExMCwgMjksIDM0LCAyLCAyNTIsIDEwOSwgCisgICAgMjksIDM0LCAyLCAyNTIsIDEwOCwgMjksIDM0LCAyLCAyNTIsIDEwNywgMjksIDM0LCAyLCAyNTIsIDEwNiwgMjksIDM0LCAyLCAKKyAgICAyNTIsIDEwNSwgMjksIDM0LCAyLCAyNTIsIDEwNCwgMjksIDM0LCAyLCAyNTIsIDEwMywgMjksIDM0LCAyLCAyNTIsIDEwMiwgCisgICAgMjksIDM0LCAyLCAyNTIsIDEwMSwgMjksIDM0LCAyLCAyNTIsIDEwMCwgMjksIDM0LCAyLCAyNTIsIDk5LCAyOSwgMzQsIDIsIAorICAgIDI1MiwgOTgsIDI5LCAzNCwgMiwgMjUyLCA5NywgMjksIDM0LCAyLCAyNTIsIDk2LCAyOSwgMzQsIDIsIDI1MiwgOTUsIDI5LCAKKyAgICAzNCwgMiwgMjUyLCA5NCwgMjksIDM0LCAyLCAyNTIsIDkzLCAyOSwgMzQsIDIsIDI1MiwgOTIsIDI5LCAzNCwgMiwgMjUyLCAKKyAgICA5MSwgMjksIDM0LCAyLCAyNTIsIDkwLCAyOSwgMzQsIDIsIDI1MiwgODksIDI5LCAzNCwgMiwgMjUyLCA4OCwgMjksIDM0LCAKKyAgICAyLCAyNTIsIDg3LCAyOSwgMzQsIDIsIDI1MiwgODYsIDI5LCAzNCwgMiwgMjUyLCA4NSwgMjksIDM0LCAyLCAyNTIsIDg0LCAKKyAgICAyOSwgMzQsIDIsIDI1MiwgODMsIDI5LCAzNCwgMiwgMjUyLCA4MiwgMjksIDM0LCAyLCAyNTIsIDgxLCAyOSwgMzQsIDIsIAorICAgIDI1MiwgODAsIDI5LCAzNCwgMiwgMjUyLCA3OSwgMjksIDM0LCAyLCAyNTIsIDc4LCAyOSwgMzQsIDIsIDI1MiwgNzcsIDI5LCAKKyAgICAzNCwgMiwgMjUyLCA3NiwgMjksIDM0LCAyLCAyNTIsIDc1LCAyOSwgMzQsIDIsIDI1MiwgNzQsIDI5LCAzNCwgMiwgMjUyLCAKKyAgICA3MywgMjksIDM0LCAyLCAyNTIsIDcyLCAyOSwgMzQsIDIsIDI1MiwgNzEsIDI5LCAzNCwgMiwgMjUyLCA3MCwgMjksIDM0LCAKKyAgICAyLCAyNTIsIDY5LCAyOSwgMzQsIDIsIDI1MiwgNjgsIDI5LCAzNCwgMiwgMjUyLCA2NywgMjksIDM0LCAyLCAyNTIsIDY2LCAKKyAgICAyOSwgMzQsIDIsIDI1MiwgNjUsIDI5LCAzNCwgMiwgMjUyLCA2NCwgMjksIDM0LCAyLCAyNTIsIDYzLCAyOSwgMzQsIDIsIAorICAgIDI1MiwgNjIsIDI5LCAzNCwgMiwgMjUyLCA2MSwgMjksIDM0LCAyLCAyNTIsIDYwLCAyOSwgMzQsIDIsIDI1MiwgNTksIDI5LCAKKyAgICAzNCwgMiwgMjUyLCA1OCwgMjksIDM0LCAyLCAyNTIsIDU3LCAyOSwgMzQsIDIsIDI1MiwgNTYsIDI5LCAzNCwgMiwgMjUyLCAKKyAgICA1NSwgNjMsIDI5LCAzNCwgMiwgMjUyLCA1NCwgMjQ5LCAyNTUsIDI5LCAzNCwgMiwgMjUyLCA1MywgMjQ1LCA1MSwgMjksIAorICAgIDM0LCAyLCAyNTIsIDUyLCA3NCwgMjksIDM0LCAyLCAyNTIsIDUxLCAyNDAsIDE3NCwgMjksIDM0LCAyLCAyNTIsIDUwLCAKKyAgICAyMzcsIDE3MSwgMjksIDM0LCAyLCAyNTIsIDQ5LCAyMzAsIDE4NCwgMjksIDM0LCAyLCAyNTIsIDQ4LCAyMzAsIDU0LCAyOSwgCisgICAgMzQsIDIsIDI1MiwgNDcsIDE1OSwgMjksIDM0LCAyLCAyNTIsIDQ2LCAyMjgsIDExOCwgMjksIDM0LCAyLCAyNTIsIDQ1LCAKKyAgICAyMjgsIDExNywgMjksIDM0LCAyLCAyNTIsIDQ0LCAyMjgsIDExNiwgMjksIDM0LCAyLCAyNTIsIDQzLCAyMjgsIDExNSwgMjksIAorICAgIDM0LCAyLCAyNTIsIDQyLCAyMDQsIDE0NCwgMjksIDM0LCAyLCAyNTIsIDQxLCAyMDMsIDE5NiwgMjksIDM0LCAyLCAyNTIsIAorICAgIDQwLCAyMDMsIDEyNCwgMjksIDM0LCAyLCAyNTIsIDM5LCAyMjAsIDM2LCAyOSwgMzQsIDIsIDI1MiwgMzgsIDI1MSwgMTQ3LCAKKyAgICAyOSwgMzQsIDIsIDI1MiwgMzcsIDI0OCwgMTk5LCAyOSwgMzQsIDIsIDI1MiwgMzYsIDI0NCwgMTIyLCAyOSwgMzQsIDIsIAorICAgIDI1MiwgMzUsIDI0MCwgMTgyLCAyOSwgMzQsIDIsIDI1MiwgMzQsIDIzMCwgMTYxLCAyOSwgMzQsIDIsIDI1MiwgMzMsIDI5LCAKKyAgICAzNCwgMiwgMjUyLCAzMiwgMjksIDM0LCAyLCAyNTIsIDMxLCAyOSwgMzQsIDIsIDI1MiwgMzAsIDI5LCAzNCwgMiwgMjUyLCAKKyAgICAyOSwgMjksIDM0LCAyLCAyNTIsIDI4LCAyOSwgMzQsIDIsIDI1MiwgMjcsIDI5LCAzNCwgMiwgMjUyLCAyNiwgMjQ1LCA1OCwgCisgICAgNCwgNjMsIDI0NSwgNTgsIDQsIDc0LCAyNDUsIDU4LCA0LCA3NSwgMjQ1LCA1OCwgNCwgNzgsIDI0NSwgNTgsIDQsIDY4LCAKKyAgICAyNDUsIDU4LCA0LCAyMzAsIDE4MSwgMjQ1LCA1OCwgNCwgMjMwLCAxMDEsIDI0NSwgNTgsIDQsIDE3MywgMjQ1LCA1OCwgNCwgCisgICAgMjI5LCAyMDEsIDI0NSwgNTgsIDQsIDIyOSwgMTAwLCAyNDUsIDU4LCA0LCAyMjksIDI2LCAyNDUsIDU4LCA0LCAyMjgsIAorICAgIDIwOSwgMjQ1LCA1OCwgNCwgMjI4LCAxMTMsIDI0NSwgNTgsIDQsIDIyNywgMjM0LCAyNDUsIDU4LCA0LCAyMjcsIDE0OCwgCisgICAgMjQ1LCA1OCwgNCwgMjI3LCA0OSwgMjQ1LCA1OCwgNCwgMjI2LCAyMzksIDI0NSwgNTgsIDQsIDE5MiwgMjQ1LCA1OCwgNCwgCisgICAgMjI1LCAyMCwgMjQ1LCA1OCwgNCwgMjI0LCAxNTUsIDI0NSwgNTgsIDQsIDIyNCwgODIsIDI0NSwgNTgsIDQsIDIyMywgMjQ2LCAKKyAgICAyNDUsIDU4LCA0LCAyMDEsIDIwMSwgMjQ1LCA1OCwgNCwgMjIyLCAyNDAsIDI0NSwgNTgsIDQsIDIyMiwgMTAwLCAyNDUsIAorICAgIDU4LCA0LCAyMjEsIDE5MSwgMjQ1LCA1OCwgNCwgMjIxLCA4NCwgMjQ1LCA1OCwgNCwgMTg1LCAyNDUsIDU4LCA0LCAyMTksIAorICAgIDM0LCAyNDUsIDU4LCA0LCAyMTgsIDE2NywgMjQ1LCA1OCwgNCwgMjE4LCA2OSwgMjQ1LCA1OCwgNCwgMjE3LCAxOTEsIDI0NSwgCisgICAgNTgsIDQsIDIxNiwgMjIwLCAyNDUsIDU4LCA0LCAyMTYsIDE1OCwgMjQ1LCA1OCwgNCwgMjE2LCA1NywgMjQ1LCA1OCwgNCwgCisgICAgMjE1LCAyMjcsIDI0NSwgNTgsIDQsIDIxNSwgMTQ1LCAyNDUsIDU4LCA0LCAyMTUsIDM2LCAyNDUsIDU4LCA0LCAyMTQsIAorICAgIDE3NywgMjQ1LCA1OCwgNCwgMjEyLCAxNjIsIDI0NSwgNTgsIDQsIDIxMiwgMTMsIDI0NSwgNTgsIDQsIDIxMSwgMTAsIDI0NSwgCisgICAgNTgsIDQsIDIxMCwgMjIsIDI0NSwgNTgsIDQsIDIwOSwgMTg3LCAyNDUsIDU4LCA0LCAyMDksIDIsIDI0NSwgNTgsIDQsIAorICAgIDEzNSwgMjQ1LCA1OCwgNCwgMjA3LCAyMDMsIDI0NSwgNTgsIDQsIDIwNCwgMTExLCAyNDUsIDU4LCA0LCAyMDQsIDYyLCAKKyAgICAyNDUsIDU4LCA0LCAyMDQsIDMwLCAyNDUsIDU4LCA0LCAyMDQsIDAsIDI0NSwgNTgsIDQsIDIwMywgMTgyLCAyNDUsIDU4LCAKKyAgICA0LCAyMDMsIDE3NiwgMjQ1LCA1OCwgNCwgMjAyLCAxMTYsIDI0NSwgNTgsIDQsIDIwMiwgMTcsIDIzMSwgNTEsIDI1MCwgCisgICAgMTMwLCAxLCAyNTEsIDI4LCAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjQ4LCAxMDUsIDIzMSwgNTEsIDI1MCwgMTMwLCAxLCAKKyAgICAyMzgsIDY3LCAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjQ0LCAxNzcsIDIzMSwgNTEsIDI1MCwgMTMwLCAxLCAyMzcsIDY3LCAKKyAgICAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjA0LCA3MCwgMjMxLCA1MSwgMjUwLCAxMzAsIDEsIDIwMiwgOTUsIDIzMSwgNTEsIAorICAgIDI1MCwgMTMwLCAxLCAyMzcsIDE5LCAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjA5LCAxMjgsIDIzMSwgNTEsIDI1MCwgMTMwLCAKKyAgICAxLCAyMDIsIDIzNSwgMjMxLCA1MSwgMjUwLCAxMzAsIDEsIDIyOSwgMjUwLCAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjI4LCAKKyAgICAxOSwgMjMxLCA1MSwgMjUwLCAxMzAsIDEsIDIyNCwgMjQ3LCAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjIxLCA0MCwgMjMxLCAKKyAgICA1MSwgMjUwLCAxMzAsIDEsIDIxNCwgMjQ5LCAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjUwLCAzLCAyMzEsIDUxLCAyNTAsIAorICAgIDEzMCwgMSwgMjE5LCAzNCwgMjMxLCA1MSwgMjUwLCAxMzAsIDEsIDIxNSwgMjYsIDIzMSwgNTEsIDI1MCwgMTMwLCAxLCAKKyAgICAyMTcsIDY5LCAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjE2LCA5MSwgMjMxLCA1MSwgMjUwLCAxMzAsIDEsIDIxMiwgMjU1LCAKKyAgICAyMzEsIDUxLCAyNTAsIDEzMCwgMSwgMjA5LCAyMDEsIDIzMSwgNTEsIDI1MCwgMTMwLCAyMTQsIDE2OCwgNTQsIDIzMSwgNTEsIAorICAgIDI1MCwgMTMwLCA0MiwgMTA1LCAyMzEsIDUxLCAyNTAsIDEzMCwgNDIsIDEwOCwgMjMxLCA1MSwgMjUwLCAxMzAsIDQyLCAKKyAgICAxNDcsIDIzMSwgNTEsIDI1MCwgMTMwLCA0MiwgMjA5LCAxNTIsIDIzMSwgNTEsIDI1MCwgMTMwLCA0MiwgMjA3LCAxNTEsIAorICAgIDIzMSwgNTEsIDI1MCwgMTMwLCA0MiwgMTE4LCAyMzYsIDExLCAyMzEsIDUxLCAyNTAsIDEzMCwgNDIsIDExOCwgMjA5LCAzNiwgCisgICAgMjMxLCA1MSwgMjUwLCAxMzAsIDQyLCAyMDksIDE1MywgMjA5LCAzNiwgMjE5LCAxMzQsIDEsIDI1MSwgMjgsIDIxOSwgMTM0LCAKKyAgICAxLCAyNDgsIDEwNSwgMjE5LCAxMzQsIDEsIDIzOCwgNjcsIDIxOSwgMTM0LCAxLCAyNDQsIDE3NywgMjE5LCAxMzQsIDEsIAorICAgIDIzNywgNjcsIDIxOSwgMTM0LCAxLCAyMDQsIDcwLCAyMTksIDEzNCwgMSwgMjAyLCA5NSwgMjE5LCAxMzQsIDEsIDIzNywgCisgICAgMTksIDIxOSwgMTM0LCAxLCAyMDksIDEyOCwgMjE5LCAxMzQsIDEsIDIwMiwgMjM1LCAyMTksIDEzNCwgMSwgMjI5LCAyNTAsIAorICAgIDIxOSwgMTM0LCAxLCAyMjgsIDE5LCAyMTksIDEzNCwgMSwgMjI0LCAyNDcsIDIxOSwgMTM0LCAxLCA0NiwgMjIxLCA0MCwgCisgICAgMjE5LCAxMzQsIDEsIDIyMSwgNDAsIDIxOSwgMTM0LCAxLCAyMTQsIDI0OSwgMjE5LCAxMzQsIDEsIDI1MCwgMywgMjE5LCAKKyAgICAxMzQsIDEsIDIxOSwgMzQsIDIxOSwgMTM0LCAxLCAyMTUsIDI2LCAyMTksIDEzNCwgMSwgMjE3LCA2OSwgMjE5LCAxMzQsIDEsIAorICAgIDIxNiwgOTEsIDIxOSwgMTM0LCAxLCAyMTIsIDI1NSwgMjE5LCAxMzQsIDEsIDIwOSwgMjAxLCAyMTksIDEzNCwgMjI3LCAKKyAgICAyMTcsIDIzOSwgMjEyLCAyMTksIDEzNCwgMjE2LCAxMSwgMjM5LCAyMTIsIDIxOSwgMTM0LCA0MiwgMTA1LCAyMTksIDEzNCwgCisgICAgNDIsIDEwOCwgMjE5LCAxMzQsIDQyLCAxNDcsIDIxOSwgMTM0LCA0MiwgMTQ5LCAyMTksIDEzNCwgNDIsIDE3MCwgMjE5LCAKKyAgICAxMzQsIDQyLCAyMDksIDE1MiwgMjE5LCAxMzQsIDQyLCAyMDcsIDE1MSwgMjIzLCAxMDIsIDEsIDQ2LCAyNTEsIDI4LCAyMjMsIAorICAgIDEwMiwgMSwgMjUxLCAyOCwgMjIzLCAxMDIsIDEsIDQ2LCAyNDgsIDEwNSwgMjIzLCAxMDIsIDEsIDI0OCwgMTA1LCAyMjMsIAorICAgIDEwMiwgMSwgMjM4LCA2NywgMjIzLCAxMDIsIDEsIDI0NCwgMTc3LCAyMjMsIDEwMiwgMSwgNDYsIDIzNywgNjcsIDIyMywgCisgICAgMTAyLCAxLCAyMzcsIDY3LCAyMjMsIDEwMiwgMSwgMjA0LCA3MCwgMjIzLCAxMDIsIDEsIDIwMiwgOTUsIDIyMywgMTAyLCAxLCAKKyAgICAyMzcsIDE5LCAyMjMsIDEwMiwgMSwgMjA5LCAxMjgsIDIyMywgMTAyLCAxLCA0NiwgMjAyLCAyMzUsIDIyMywgMTAyLCAxLCAKKyAgICAyMDIsIDIzNSwgMjIzLCAxMDIsIDEsIDQ2LCAyMjksIDI1MCwgMjIzLCAxMDIsIDEsIDIyOSwgMjUwLCAyMjMsIDEwMiwgMSwgCisgICAgNDYsIDIyOCwgMTksIDIyMywgMTAyLCAxLCAyMjgsIDE5LCAyMjMsIDEwMiwgMSwgNDYsIDIyNCwgMjQ3LCAyMjMsIDEwMiwgCisgICAgMSwgMjI0LCAyNDcsIDIyMywgMTAyLCAxLCA0NiwgMjIxLCA0MCwgMjIzLCAxMDIsIDEsIDIyMSwgNDAsIDIyMywgMTAyLCAxLCAKKyAgICAyMTQsIDI0OSwgMjIzLCAxMDIsIDEsIDI1MCwgMywgMjIzLCAxMDIsIDEsIDIxOSwgMzQsIDIyMywgMTAyLCAxLCAyMTUsIAorICAgIDI2LCAyMjMsIDEwMiwgMSwgMjE3LCA2OSwgMjIzLCAxMDIsIDEsIDIxNiwgOTEsIDIyMywgMTAyLCAxLCA0NiwgMjEyLCAKKyAgICAyNTUsIDIyMywgMTAyLCAxLCAyMTIsIDI1NSwgMjIzLCAxMDIsIDEsIDIwOSwgMjAxLCAyMjMsIDEwMiwgNDIsIDEwNSwgCisgICAgMjIzLCAxMDIsIDQyLCAxMDgsIDIyMywgMTAyLCA0MiwgMTQ3LCAyMjMsIDEwMiwgNDIsIDE0OSwgMjIzLCAxMDIsIDI0NSwgCisgICAgMTE2LCA0MiwgMTQ5LCAyMjMsIDEwMiwgNDIsIDE3MCwgMjIzLCAxMDIsIDQyLCAyMDksIDE1MiwgMjIzLCAxMDIsIDQyLCAKKyAgICAyMDcsIDE1MSwgMjIzLCAxMDIsIDQyLCAxMTgsIDIzNiwgMTEsIDIzNywgNzgsIDEsIDI1MSwgMjgsIDIzNywgNzgsIDEsIAorICAgIDI0OCwgMTA1LCAyMzcsIDc4LCAxLCAyMzgsIDY3LCAyMzcsIDc4LCAxLCAyNDQsIDE3NiwgMjM3LCA3OCwgMSwgMjM3LCA2NywgCisgICAgMjM3LCA3OCwgMSwgMjA0LCA3MCwgMjM3LCA3OCwgMSwgMjAyLCA5NCwgMjM3LCA3OCwgMSwgMjM3LCAxOSwgMjM3LCA3OCwgCisgICAgMSwgMjA5LCAxMjgsIDIzNywgNzgsIDEsIDIwMiwgMjM1LCAyMzcsIDc4LCAxLCAyMjksIDI1MCwgMjM3LCA3OCwgMSwgMjI4LCAKKyAgICAxOSwgMjM3LCA3OCwgMSwgMjI0LCAyNDcsIDIzNywgNzgsIDEsIDIyMSwgNDAsIDIzNywgNzgsIDEsIDIxNCwgMjQ5LCAyMzcsIAorICAgIDc4LCAxLCAyNTAsIDIsIDIzNywgNzgsIDEsIDIxOSwgMzQsIDIzNywgNzgsIDEsIDIxNSwgMjYsIDIzNywgNzgsIDEsIDIxNywgCisgICAgNjksIDIzNywgNzgsIDEsIDIxMiwgMjU1LCAyMzcsIDc4LCAxLCAyMDksIDIwMSwgMjM3LCA3OCwgNDIsIDEwNSwgMjM3LCAKKyAgICA3OCwgNDIsIDE3MCwgMjM3LCA3OCwgNDIsIDIwOSwgMTUyLCAyMzcsIDc4LCA0MiwgMjA3LCAxNTEsIDIzNywgNzgsIDQyLCAKKyAgICAxMTgsIDIzNiwgMTEsIDIxOCwgMTc4LCAxLCAyNTEsIDI1LCAyMTgsIDE3OCwgMSwgMjQ4LCAxMDgsIDIxOCwgMTc4LCAxLCAKKyAgICAyMzgsIDIzNywgMjE4LCAxNzgsIDEsIDI0NCwgMzksIDIxOCwgMTc4LCAxLCAyMzcsIDY3LCAyMTgsIDE3OCwgMSwgMjA0LCAKKyAgICA3NywgMjE4LCAxNzgsIDEsIDIwMiwgMTA5LCAyMTgsIDE3OCwgMSwgMjM3LCAyMSwgMjE4LCAxNzgsIDEsIDIwOSwgMTMyLCAKKyAgICAyMTgsIDE3OCwgMSwgMjAyLCAyMzYsIDIxOCwgMTc4LCAxLCAyMzAsIDIyLCAyMTgsIDE3OCwgMSwgMjI4LCAyNSwgMjE4LCAKKyAgICAxNzgsIDEsIDIyNCwgMjQ3LCAyMTgsIDE3OCwgMSwgMjIxLCA0MCwgMjE4LCAxNzgsIDEsIDIxMywgMTM3LCAyMTgsIDE3OCwgCisgICAgMSwgMjUxLCA1OSwgMjE4LCAxNzgsIDEsIDIxOSwgMzQsIDIxOCwgMTc4LCAxLCAyMTUsIDI3LCAyMTgsIDE3OCwgMSwgMjE3LCAKKyAgICA3NCwgMjE4LCAxNzgsIDEsIDIxNSwgMjAwLCAyMTgsIDE3OCwgMSwgMjEyLCAyNTUsIDIxOCwgMTc4LCAxLCAyMDksIDIwNywgCisgICAgMjE4LCAxNzgsIDQyLCAxMDUsIDIxOCwgMTc4LCA0MiwgMjA5LCAxNTIsIDIxOCwgMTc4LCA0MiwgMjA3LCAxNTEsIDIxOCwgCisgICAgMTc4LCA0MiwgMTE4LCAyMzYsIDExLCAyMTgsIDE3OCwgNDIsIDEwOCwgMjE4LCAxNzgsIDQyLCAxNDcsIDIxOCwgMTc4LCAKKyAgICAyMDMsIDIzOCwgMjEzLCAxMzAsIDIyNiwgMTk2LCAxLCA2MywgMjI2LCAxOTYsIDEsIDI0OSwgMjU1LCAyMjYsIDE5NiwgMSwgCisgICAgMjM5LCA3NSwgMjI2LCAxOTYsIDEsIDI0NSwgNTEsIDIyNiwgMTk2LCAxLCA3NCwgMjI2LCAxOTYsIDEsIDIwNiwgMTY0LCAKKyAgICAyMjYsIDE5NiwgMSwgNzUsIDIyNiwgMTk2LCAxLCAyMDMsIDEyNCwgMjI2LCAxOTYsIDEsIDIzMCwgNTQsIDIyNiwgMTk2LCAKKyAgICAxLCAxNTksIDIyNiwgMTk2LCAxLCAyMjYsIDE4NSwgMjI2LCAxOTYsIDEsIDIyMywgMTYzLCAyMjYsIDE5NiwgMSwgNzgsIAorICAgIDIyNiwgMTk2LCAxLCAxNDYsIDIyNiwgMTk2LCAxLCAyMTEsIDE2NywgMjI2LCAxOTYsIDEsIDIxMCwgNjksIDIyNiwgMTk2LCAKKyAgICAxLCA2OCwgMjI2LCAxOTYsIDEsIDI0MCwgMTc0LCAyMjYsIDE5NiwgMSwgMjE3LCAxMzQsIDIyNiwgMTk2LCAxLCAxOTQsIAorICAgIDIyNiwgMTk2LCAxLCAyMDcsIDI0NCwgMjI2LCAxOTYsIDEsIDI1MCwgMjMxLCAyMjYsIDE5NiwgMSwgMjQxLCA5MiwgMjI2LCAKKyAgICAxOTYsIDEsIDIyNiwgMTk5LCAyMjYsIDE5NiwgMSwgMjIxLCAyMjgsIDIyNiwgMTk2LCAxLCAyNDcsIDEyNSwgMjI2LCAxOTYsIAorICAgIDIwOCwgODIsIDgyLCAxMjksIDIzNiwgMjUzLCAxLCA2MywgMTI5LCAyMzYsIDI1MywgMSwgNzQsIDEyOSwgMjM2LCAyNTMsIAorICAgIDEsIDc1LCAxMjksIDIzNiwgMjUzLCAxLCA3OCwgMTI5LCAyMzYsIDI1MywgMSwgMTk4LCAxMjksIDIzNiwgMjUzLCAxLCAKKyAgICAyMDQsIDExMSwgMTI5LCAyMzYsIDI1MywgMSwgMjQ5LCAzMiwgMTI5LCAyMzYsIDI1MywgMSwgMjQ5LCAzMSwgMTI5LCAyMzYsIAorICAgIDI1MywgMSwgMTg1LCAxMjksIDIzNiwgMjUzLCAxLCAxOTIsIDEyOSwgMjM2LCAyNTMsIDEsIDIwMSwgMjAxLCAxMjksIDIzNiwgCisgICAgMjUzLCAxLCAyMjMsIDExMCwgMTI5LCAyMzYsIDI1MywgMSwgMjIyLCAyNDAsIDEyOSwgMjM2LCAyNTMsIDEsIDIyMiwgMjM5LCAKKyAgICAxMjksIDIzNiwgMjUzLCAxLCAyMTYsIDIyMCwgMTI5LCAyMzYsIDI1MywgMSwgMjE2LCAyMTksIDEyOSwgMjM2LCAyNTMsIDEsIAorICAgIDIyOCwgMTEzLCAxMjksIDIzNiwgMjUzLCAxLCAyMjksIDE0NCwgMTI5LCAyMzYsIDI1MywgMSwgMjM3LCAxMiwgMTI5LCAKKyAgICAyMzYsIDI1MywgMSwgMjE1LCAzNiwgMTI5LCAyMzYsIDI1MywgMSwgMjE1LCAzNSwgMTI5LCAyMzYsIDI1MywgMSwgMjE0LCAKKyAgICAxNzcsIDEyOSwgMjM2LCAyNTMsIDEsIDE3MywgMTI5LCAyMzYsIDI1MywgMSwgMjE3LCAxMjYsIDEyOSwgMjM2LCAyNTMsIDEsIAorICAgIDIxMCwgMjIsIDEyOSwgMjM2LCAyNTMsIDEsIDIxMCwgMjEsIDEyOSwgMjM2LCAyNTMsIDEsIDIwOSwgMTg3LCAxMjksIDIzNiwgCisgICAgMjUzLCAxLCAyMDksIDE4NiwgMTI5LCAyMzYsIDI1MywgMSwgMTM1LCAxMjksIDIzNiwgMjUzLCAxLCAyNDQsIDIxMiwgMTI5LCAKKyAgICAyMzYsIDI1MywgMTYsIDIwNSwgMjI0LCAxMjksIDIzNiwgMjUzLCAxNiwgMjA1LCAyMjMsIDEyOSwgMTkxLCAxLCA2MywgCisgICAgMTI5LCAxOTEsIDEsIDc0LCAxMjksIDE5MSwgMSwgNzUsIDEyOSwgMTkxLCAxLCA3OCwgMTI5LCAxOTEsIDEsIDE5OCwgMTI5LCAKKyAgICAxOTEsIDEsIDIwNCwgMTExLCAxMjksIDE5MSwgMSwgMjQ5LCAzMiwgMTI5LCAxOTEsIDEsIDE4NSwgMTI5LCAxOTEsIDEsIAorICAgIDE5MiwgMTI5LCAxOTEsIDEsIDIwMSwgMjAxLCAxMjksIDE5MSwgMSwgMjIyLCAyNDAsIDEyOSwgMTkxLCAxLCAyMTYsIDIyMCwgCisgICAgMTI5LCAxOTEsIDEsIDIyOCwgMTEzLCAxMjksIDE5MSwgMSwgMjI5LCAxNDQsIDEyOSwgMTkxLCAxLCAyMzcsIDEyLCAxMjksIAorICAgIDE5MSwgMSwgMjE1LCAzNiwgMTI5LCAxOTEsIDEsIDI1MCwgMTI2LCAyMTUsIDM2LCAxMjksIDE5MSwgMSwgMjE0LCAxNzcsIAorICAgIDEyOSwgMTkxLCAxLCAxNzMsIDEyOSwgMTkxLCAxLCAyMTcsIDEyNiwgMTI5LCAxOTEsIDEsIDIxMCwgMjIsIDEyOSwgMTkxLCAKKyAgICAxLCAyMDksIDE4NywgMTI5LCAxOTEsIDEsIDEzNSwgMTI5LCAxOTEsIDEsIDI0NCwgMjEyLCAxMjksIDE5MSwgMjM5LCAxMzgsIAorICAgIDI0MSwgMTEzLCAyMDcsIDE1NiwgMTI5LCAxOTEsIDIzOSwgMTM4LCAxMTgsIDIzNywgMTM3LCAxMjksIDE5MSwgMjI3LCAzNiwgCisgICAgMjE1LCAyMzMsIDEyOSwgMTkxLCAyMjcsIDM2LCAyMzEsIDU2LCAxMjksIDE5MSwgNDIsIDEwNSwgMTI5LCAxOTEsIDQyLCAKKyAgICAxMDgsIDEyOSwgMTkxLCA0MiwgMTQ3LCAxMjksIDE5MSwgNDIsIDE0OSwgMTI5LCAxOTEsIDQyLCAxNzAsIDEyOSwgMTkxLCAKKyAgICA0MiwgMTk1LCAxMjksIDE5MSwgNDIsIDIxMywgMTExLCAxMjksIDE5MSwgNDIsIDE5OSwgMTI5LCAxOTEsIDQyLCAyMjIsIAorICAgIDYzLCAxMjksIDE5MSwgNDIsIDIwOSwgMTUyLCAxMjksIDE5MSwgNDIsIDIwNywgMTUxLCAxMjksIDE5MSwgNDIsIDIwOSwgCisgICAgNTMsIDEyOSwgMTkxLCA0MiwgMjM5LCAxNTMsIDEyOSwgMTkxLCA0MiwgMjQwLCAxOCwgMTI5LCAxOTEsIDQyLCAyMTIsIDc0LCAKKyAgICAxMjksIDE5MSwgNDIsIDIxMywgMTA1LCAxMjksIDE5MSwgNDIsIDExOCwgMjM2LCAxMSwgMTI5LCAxOTEsIDQyLCAxMjAsIAorICAgIDIzNiwgMTEsIDEyOSwgMTkxLCA0MiwgMTI2LCAyMzYsIDExLCAxMjksIDE5MSwgNDIsIDIzOSwgMTQ3LCAyMzYsIDExLCAKKyAgICAxMjksIDE5MSwgNDIsIDIzOSwgMjMzLCAyMzYsIDExLCAxMjksIDE5MSwgNDIsIDIxMiwgODgsIDIzNiwgMTEsIDEyOSwgCisgICAgMTkxLCA0MiwgMjEzLCAxMTIsIDIzNiwgMTEsIDEyOSwgMTkxLCA0MiwgMjQxLCAxNDMsIDIzNiwgMTEsIDEyOSwgMTkxLCAKKyAgICA0MiwgMjIyLCA2NCwgMjM2LCAxMSwgMTI5LCAxOTEsIDQyLCAxMTgsIDIwOSwgMzYsIDEyOSwgMTkxLCA0MiwgMTIwLCAyMDksIAorICAgIDM2LCAxMjksIDE5MSwgNDIsIDEyNiwgMjA5LCAzNiwgMTI5LCAxOTEsIDQyLCAyMzksIDE0NywgMjA5LCAzNiwgMTI5LCAKKyAgICAxOTEsIDQyLCAyMzksIDIzMywgMjA5LCAzNiwgMTI5LCAxOTEsIDQyLCAyMTIsIDg4LCAyMDksIDM2LCAxMjksIDE5MSwgNDIsIAorICAgIDIxMywgMTEyLCAyMDksIDM2LCAxMjksIDE5MSwgNDIsIDI0MSwgMTQzLCAyMDksIDM2LCAxMjksIDE5MSwgNDIsIDIyMiwgCisgICAgNjQsIDIwOSwgMzYsIDEyOSwgMTkxLCA0MiwgMjA5LCAxNTMsIDIwOSwgMzYsIDEyOSwgMTkxLCA0MiwgMjA3LCAxNTIsIAorICAgIDIwOSwgMzYsIDEyOSwgMTkxLCA0MiwgMjA5LCA1NCwgMjA5LCAzNiwgMTI5LCAxOTEsIDQyLCAyMzksIDE1NCwgMjA5LCAzNiwgCisgICAgMTI5LCAxOTEsIDQyLCAyNDAsIDE5LCAyMDksIDM2LCAxMjksIDE5MSwgNDIsIDIxMiwgNzUsIDIwOSwgMzYsIDEyOSwgMTkxLCAKKyAgICA0MiwgMjEzLCAxMDYsIDIwOSwgMzYsIDEyOSwgMTkxLCA0MiwgMjQxLCAxMzUsIDIwOSwgMzYsIDEyOSwgMTkxLCA0MiwgCisgICAgMjIyLCA1OSwgMjA5LCAzNiwgMTI5LCAxOTEsIDQyLCAxMTgsIDIzNiwgMTIsIDIwOSwgMzYsIDEyOSwgMTkxLCA0MiwgMTIwLCAKKyAgICAyMzYsIDEyLCAyMDksIDM2LCAxMjksIDE5MSwgNDIsIDEyNiwgMjM2LCAxMiwgMjA5LCAzNiwgMTI5LCAxOTEsIDQyLCAyMzksIAorICAgIDE0NywgMjM2LCAxMiwgMjA5LCAzNiwgMTI5LCAxOTEsIDQyLCAyMzksIDIzMywgMjM2LCAxMiwgMjA5LCAzNiwgMTI5LCAKKyAgICAxOTEsIDQyLCAyMTIsIDg4LCAyMzYsIDEyLCAyMDksIDM2LCAxMjksIDE5MSwgNDIsIDIxMywgMTEyLCAyMzYsIDEyLCAyMDksIAorICAgIDM2LCAxMjksIDE5MSwgNDIsIDI0MSwgMTQzLCAyMzYsIDEyLCAyMDksIDM2LCAxMjksIDE5MSwgNDIsIDIyMiwgNjQsIDIzNiwgCisgICAgMTIsIDIwOSwgMzYsIDEyOSwgMTkxLCAyMzksIDEzOCwgMTE4LCAyMDcsIDE1NywgMTI5LCAxOTEsIDIzOSwgMTM4LCAxMjAsIAorICAgIDIwNywgMTU2LCAxMjksIDE5MSwgMjM5LCAxMzgsIDEyNiwgMjA3LCAxNTYsIDEyOSwgMTkxLCAyMzksIDEzOCwgMjM5LCAKKyAgICAxNDcsIDIwNywgMTU2LCAxMjksIDE5MSwgMjM5LCAxMzgsIDIzOSwgMjMzLCAyMDcsIDE1NiwgMTI5LCAxOTEsIDIzOSwgCisgICAgMTM4LCAyMTIsIDg4LCAyMDcsIDE1NiwgMTI5LCAxOTEsIDIzOSwgMTM4LCAyMTMsIDExMiwgMjA3LCAxNTYsIDEyOSwgMTkxLCAKKyAgICAyMzksIDEzOCwgMjQxLCAxNDMsIDIwNywgMTU2LCAxMjksIDE5MSwgMjM5LCAxMzgsIDIyMiwgNjQsIDIwNywgMTU2LCAxMjksIAorICAgIDE5MSwgMjM5LCAxMzgsIDIwOSwgMTUzLCAyMDcsIDE1NiwgMjI5LCAxMzEsIDEsIDYzLCAyMjksIDEzMSwgMjIsIDIsIDc1LCAKKyAgICAyMjksIDEzMSwgMjIsIDIsIDY4LCAyMjksIDEzMSwgMjIsIDIsIDEyNSwgMTQ2LCAyMjksIDEzMSwgMjIsIDIsIDc0LCAyMjksIAorICAgIDEzMSwgMjIsIDIsIDc4LCAyMjksIDEzMSwgMjIsIDIyNywgMTk2LCA4MiwgMjI5LCAxMzEsIDIsIDUyLCAyMTUsIDI1MywgCisgICAgNTYsIDIyOSwgMTMxLCAyLCAyNTAsIDE4MCwgMjI5LCAxMzEsIDIsIDIwNSwgMTk5LCAyMjksIDEzMSwgMSwgMTczLCAyMjksIAorICAgIDEzMSwgMSwgMjI5LCAxNDQsIDIyOSwgMTMxLCAxLCAyMzksIDgsIDIyOSwgMTMxLCAxLCAyMzgsIDExOSwgMjI5LCAxMzEsIAorICAgIDEsIDI0NywgOTIsIDIyOSwgMTMxLCAxLCAyNDYsIDE5OSwgMjI5LCAxMzEsIDEsIDIzMCwgMTgxLCAyMjksIDEzMSwgMSwgCisgICAgMjIxLCAxMSwgMjI5LCAxMzEsIDEsIDIwNywgMjQxLCAyMjksIDEzMSwgMSwgMjA3LCAyMjksIDIyOSwgMTMxLCAxLCAyNDQsIAorICAgIDEyMCwgMjI5LCAxMzEsIDEsIDI0NCwgMTA0LCAyMjksIDEzMSwgMSwgMjIxLCAyMjcsIDIyOSwgMTMxLCAxLCAyMTAsIDIyLCAKKyAgICAyMjksIDEzMSwgMSwgMjA5LCAxMDgsIDIyOSwgMTMxLCAxLCAyNDQsIDIxMiwgMjI5LCAxMzEsIDEsIDI0NCwgMSwgMjI5LCAKKyAgICAxMzEsIDEsIDIwMSwgMjAxLCAyMjksIDEzMSwgMSwgMTg1LCAyMjksIDEzMSwgMSwgMjE4LCAyMDgsIDIyOSwgMTMxLCAxLCAKKyAgICAyNDksIDMyLCAyMjksIDEzMSwgMSwgMjQ4LCA5OCwgMjI5LCAxMzEsIDEsIDE5MiwgMjI5LCAxMzEsIDEsIDE5OCwgMjI5LCAKKyAgICAxMzEsIDEsIDIxNiwgMjIwLCAyMjksIDEzMSwgMSwgMjI4LCAxMTMsIDIyOSwgMTMxLCAxLCAyMDYsIDg2LCAyMjksIDEzMSwgCisgICAgMSwgMjEzLCA5MCwgMjI5LCAxMzEsIDEsIDIxMSwgMTY0LCAyMjksIDEzMSwgMSwgMjE1LCAzNiwgMjI5LCAxMzEsIDEsIAorICAgIDIwMiwgMTE2LCAyMjksIDEzMSwgMSwgMTUyLCAyMjksIDEzMSwgMSwgMjI5LCA0NywgMjI5LCAxMzEsIDEsIDIwNywgMjA5LCAKKyAgICAyMjksIDEzMSwgMiwgMjQ4LCAyMzEsIDU1LCAyMjksIDEzMSwgMiwgMjQ3LCAxMywgMjI5LCAxMzEsIDIsIDcwLCA1NiwgCisgICAgMjI5LCAxMzEsIDIwNSwgMjA0LCAyMjksIDEzMSwgMTcsIDEwNSwgMjI5LCAxMzEsIDE3LCAxMDgsIDIyOSwgMTMxLCAxNywgCisgICAgMTQ3LCAyMjksIDEzMSwgMTcsIDE0OSwgMjI5LCAxMzEsIDQyLCAyMDksIDE1MiwgMjI5LCAxMzEsIDQyLCAyMDcsIDE1MSwgCisgICAgMjI5LCAxMzEsIDQyLCAxMTgsIDIzNiwgMTEsIDIyOSwgMTMxLCA0MiwgMTE4LCAyMDksIDM2LCAyMjksIDEzMSwgMjE3LCAKKyAgICAxNzksIDI0MywgODUsIDIyOSwgMTMxLCAyMTcsIDE3OSwgNSwgMjQ2LCA2MSwgMjI5LCAxMzEsIDIxNywgMTc5LCAyNDYsIAorICAgIDYxLCAyMjksIDEzMSwgMjE3LCAxNzksIDI0NSwgMTM5LCAxNDIsIDIyOSwgMTMxLCAyMTcsIDE3OSwgMjI1LCAxMTYsIDIyOSwgCisgICAgMTMxLCAyMTcsIDE3OSwgMjI3LCA1LCAyMjksIDEzMSwgMjE3LCAxNzksIDI0NCwgMTY2LCAyMjksIDEzMSwgMjE3LCAxNzksIAorICAgIDUyLCAyNDQsIDE2NiwgMjI5LCAxMzEsIDIxNywgMTc5LCAyMjcsIDEwOCwgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgCisgICAgMjM3LCA2NywgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgMjI4LCAxOSwgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgCisgICAgMjM3LCAxOSwgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgMjI0LCAyNDcsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIAorICAgIDIxNywgNjksIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIDIwNCwgNzAsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIAorICAgIDIxMiwgMjU1LCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAyMTYsIDkxLCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAKKyAgICAyNDgsIDEwNSwgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgMjA5LCAyMDEsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIAorICAgIDIxNCwgMjI1LCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAyMjksIDI1MCwgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgCisgICAgMjIxLCA0MCwgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgMjI5LCAxMjYsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIAorICAgIDIxNSwgMjYsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIDIxNCwgMjQ5LCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAKKyAgICAyNDAsIDYwLCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAyNTEsIDMwLCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAKKyAgICAyNTAsIDIsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIDI0MywgMjU0LCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAKKyAgICAyMzgsIDY3LCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAyNDQsIDE3NywgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgCisgICAgMjM4LCAxMDcsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIDIwOSwgMTI4LCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAKKyAgICAyMDIsIDk0LCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxLCAyNDMsIDI1MSwgMzgsIDIxMSwgMjM4LCAyNTAsIDE0MSwgMSwgCisgICAgMjAyLCAyMzUsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIDIwOSwgOTQsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDEsIAorICAgIDIwOSwgNzMsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDQyLCAxMDUsIDM4LCAyMTEsIDIzOCwgMjUwLCAxNDEsIDQyLCAKKyAgICAyNDAsIDE4LCAzOCwgMjExLCAyMzgsIDI1MCwgMTQxLCAxNDEsIDIzMSwgMzEsIDM4LCAxNTMsIDI1MCwgMTQxLCAxLCAyMzcsIAorICAgIDQzLCAzOCwgMTUzLCAyNTAsIDE0MSwgMSwgMjI4LCAyOCwgMzgsIDE1MywgMjUwLCAxNDEsIDEsIDIzNywgMTQ4LCAzOCwgCisgICAgMTUzLCAyNTAsIDE0MSwgMSwgMjI1LCA1LCAzOCwgMTUzLCAyNTAsIDE0MSwgMSwgMjE3LCAxMTksIDM4LCAxNTMsIDI1MCwgCisgICAgMTQxLCAxLCAyMDQsIDcwLCAzOCwgMTUzLCAyNTAsIDE0MSwgMSwgMjQxLCAxNSwgMzgsIDE1MywgMjUwLCAxNDEsIDEsIAorICAgIDIxNiwgMTIyLCAzOCwgMTUzLCAyNTAsIDE0MSwgMSwgMjQ4LCAxMzgsIDM4LCAxNTMsIDI1MCwgMTQxLCAxLCAyMDksIDE2OSwgCisgICAgMzgsIDE1MywgMjUwLCAxNDEsIDEsIDI0MSwgMTYsIDM4LCAxNTMsIDI1MCwgMTQxLCAxLCAyMzAsIDIyLCAzOCwgMTUzLCAKKyAgICAyNTAsIDE0MSwgMSwgMjIxLCAxNzgsIDM4LCAxNTMsIDI1MCwgMTQxLCAxLCAyMjksIDE0MCwgMzgsIDE1MywgMjUwLCAxNDEsIAorICAgIDEsIDIxNSwgMjgsIDM4LCAxNTMsIDI1MCwgMTQxLCAxLCAyNDEsIDE0LCAzOCwgMTUzLCAyNTAsIDE0MSwgMSwgMjQwLCA0NywgCisgICAgMzgsIDE1MywgMjUwLCAxNDEsIDEsIDI1MSwgMzAsIDM4LCAxNTMsIDI1MCwgMTQxLCAxLCAyNTEsIDU5LCAzOCwgMTUzLCAKKyAgICAyNTAsIDE0MSwgMSwgMjQ0LCAyMDcsIDM4LCAxNTMsIDI1MCwgMTQxLCAxLCAyMzgsIDE4MSwgMzgsIDE1MywgMjUwLCAxNDEsIAorICAgIDEsIDI0NCwgMTg0LCAzOCwgMTUzLCAyNTAsIDE0MSwgMSwgMjM4LCAxMTQsIDM4LCAxNTMsIDI1MCwgMTQxLCAxLCAyMDksIAorICAgIDI1MSwgMzgsIDE1MywgMjUwLCAxNDEsIDEsIDIwMiwgMTA3LCAzOCwgMTUzLCAyNTAsIDE0MSwgMSwgMjA5LCAxMDAsIDM4LCAKKyAgICAxNTMsIDI1MCwgMTQxLCAxLCAyMDMsIDQ3LCAzOCwgMTUzLCAyNTAsIDE0MSwgMSwgMjA5LCA4OCwgMzgsIDE1MywgMjUwLCAKKyAgICAxNDEsIDEsIDIwMiwgMTEwLCAzOCwgMTUzLCAyNTAsIDE0MSwgNDIsIDEwNSwgMzgsIDE1MywgMjUwLCAxNDEsIDQyLCAyMDksIAorICAgIDE1MiwgMzgsIDE1MywgMjUwLCAxNDEsIDQyLCAyMDcsIDE1MSwgMjI1LCAxMTUsIDEsIDI1MSwgMjgsIDIyNSwgMTE1LCAxLCAKKyAgICAyNDgsIDEwNSwgMjI1LCAxMTUsIDEsIDI0OCwgOTIsIDIyNSwgMTE1LCAxLCAyMzgsIDY3LCAyMjUsIDExNSwgMSwgMjM4LCAKKyAgICA5MiwgMjI1LCAxMTUsIDEsIDI0NCwgMTc3LCAyMjUsIDExNSwgMSwgMjM3LCA2NywgMjI1LCAxMTUsIDEsIDIwNCwgNzAsIAorICAgIDIyNSwgMTE1LCAyLCAyMDcsIDI5LCAyMjUsIDExNSwgMSwgMjAyLCA5NSwgMjI1LCAxMTUsIDEsIDIwMiwgNzMsIDIyNSwgCisgICAgMTE1LCAxLCAyMzAsIDE2MywgMjI1LCAxMTUsIDEsIDIzMCwgMTQ1LCAyMjUsIDExNSwgMSwgMjM3LCAxOSwgMjI1LCAxMTUsIAorICAgIDEsIDIwOSwgMTI4LCAyMjUsIDExNSwgMSwgMjAyLCAyMzUsIDIyNSwgMTE1LCAxLCAyMjksIDI1MCwgMjI1LCAxMTUsIDEsIAorICAgIDIwMywgMTc5LCAyMjUsIDExNSwgMSwgMjI5LCAxMzMsIDIyNSwgMTE1LCAxLCAyMjgsIDE5LCAyMjUsIDExNSwgMSwgMjQzLCAKKyAgICAyNTAsIDIyNSwgMTE1LCAxLCAyMDksIDk5LCAyMjUsIDExNSwgMSwgMjI0LCAyNDcsIDIyNSwgMTE1LCAxLCAyMjEsIDQwLCAKKyAgICAyMjUsIDExNSwgMSwgMjE0LCAyNDksIDIyNSwgMTE1LCAxLCAyNTAsIDMsIDIyNSwgMTE1LCAxLCAyNTEsIDIzNCwgMjI1LCAKKyAgICAxMTUsIDEsIDIxOSwgMzQsIDIyNSwgMTE1LCAxLCAyNDAsIDYwLCAyMjUsIDExNSwgMSwgMjE1LCAyNiwgMjI1LCAxMTUsIDEsIAorICAgIDIxNywgNjksIDIyNSwgMTE1LCAxLCAyMDMsIDE1NywgMjI1LCAxMTUsIDEsIDIxNywgOTUsIDIyNSwgMTE1LCAxLCAyMTYsIAorICAgIDkxLCAyMjUsIDExNSwgMSwgMjEyLCAyNTUsIDIyNSwgMTE1LCAxLCAyMTEsIDEzMywgMjI1LCAxMTUsIDEsIDIwOSwgMjAxLCAKKyAgICAyMjUsIDExNSwgMjUxLCAxNDYsIDEzMSwgNTUsIDIyNSwgMTE1LCAyNTEsIDE0NiwgMTMxLCA1NiwgMjI1LCAxMTUsIDQyLCAKKyAgICAxMDUsIDIyNSwgMTE1LCA0MiwgMTcwLCAyMjUsIDExNSwgNDIsIDIwOSwgMTUyLCAyMjUsIDExNSwgNDIsIDIwNywgMTUxLCAKKyAgICAyMjUsIDExNSwgNDIsIDExOCwgMjM2LCAxMSwgMjI1LCAxMTUsIDIxNywgMTc5LCAyMTEsIDk0LCAyMjUsIDExNSwgMjE3LCAKKyAgICAxNzksIDIzOSwgMjEyLCAyMjUsIDExNSwgMjE3LCAxNzksIDUyLCA3MCwgMjA0LCA1LCAyNDMsIDg1LCAyMjUsIDExNSwgCisgICAgMjE3LCAxNzksIDcwLCAyMDQsIDUsIDI0MywgODUsIDIyNSwgMTE1LCAyMTcsIDE3OSwgMjQzLCA4NSwgMjI1LCAxMTUsIAorICAgIDIxNywgMTc5LCAxMjAsIDI0MywgODMsIDIyNSwgMTE1LCAyMTcsIDE3OSwgMjI3LCAxMTUsIDI0MCwgNywgMjUwLCAxNCwgMSwgCisgICAgNjMsIDI1MCwgMTQsIDEsIDI1MiwgMjUsIDI1MCwgMTQsIDEsIDI1MCwgMTc4LCAyNTAsIDE0LCAxLCAyNTEsIDI0MCwgMjUwLCAKKyAgICAxNCwgMSwgMjUwLCAyMzEsIDI1MCwgMTQsIDEsIDI1MSwgMjQxLCAyNTAsIDE0LCAxLCAyNTEsIDEwOSwgMjUwLCAxNCwgMSwgCisgICAgMjUxLCAxMDUsIDI1MCwgMTQsIDEsIDc0LCAyNTAsIDE0LCAxLCAyNDEsIDE2MSwgMjUwLCAxNCwgMSwgNzgsIDI1MCwgMTQsIAorICAgIDEsIDIyMCwgMTgsIDI1MCwgMTQsIDEsIDc1LCAyNTAsIDE0LCAxLCAyMzEsIDgzLCAyNTAsIDE0LCAxLCA2OCwgMjUwLCAxNCwgCisgICAgMSwgMjA2LCAxNzgsIDI1MCwgMTQsIDEsIDIyOSwgMjAxLCAyNTAsIDE0LCAxLCAyMDMsIDE3NiwgMjUwLCAxNCwgMSwgMjAzLCAKKyAgICAxMzgsIDI1MCwgMTQsIDEsIDIwMywgMTQ4LCAyNTAsIDE0LCAxLCAyMzgsIDE5MCwgMjUwLCAxNCwgMSwgMjM4LCAxNTAsIAorICAgIDI1MCwgMTQsIDEsIDIzOCwgMTA1LCAyNTAsIDE0LCAxLCAyNDYsIDIzOCwgMjUwLCAxNCwgMSwgMjMwLCAxNjEsIDI1MCwgCisgICAgMTQsIDEsIDIwOSwgMTg3LCAyNTAsIDE0LCAxLCAyMDksIDkyLCAyNTAsIDE0LCAxLCAyNDQsIDc1LCAyNTAsIDE0LCAxLCAKKyAgICAyNDMsIDI0OCwgMjUwLCAxNCwgMSwgMjA3LCAyMzYsIDI1MCwgMTQsIDEsIDIxOSwgMzQsIDI1MCwgMTQsIDEsIDI0MCwgNjAsIAorICAgIDI1MCwgMTQsIDEsIDI0OCwgMTYyLCAyNTAsIDE0LCAxLCAyNDgsIDk0LCAyNTAsIDE0LCAxLCAyMjIsIDE5MCwgMjUwLCAxNCwgCisgICAgMSwgMjIyLCAxMDYsIDI1MCwgMTQsIDEsIDIyMiwgMTA3LCAyNTAsIDE0LCAxLCAyMjIsIDI0MCwgMjUwLCAxNCwgMSwgMjIxLCAKKyAgICAxLCAyNTAsIDE0LCAxLCAyMjEsIDIyMiwgMjUwLCAxNCwgMSwgMjI1LCAyMCwgMjUwLCAxNCwgMSwgMjM2LCAxODYsIDI1MCwgCisgICAgMTQsIDEsIDIwMiwgMTY2LCAyNTAsIDE0LCAxLCAyMDMsIDUyLCAyNTAsIDE0LCAxLCAyMDYsIDU1LCAyNTAsIDE0LCAxLCAKKyAgICAyMTYsIDE1OCwgMjUwLCAxNCwgMSwgMjI3LCAyMzQsIDI1MCwgMTQsIDEsIDIxNCwgMTc3LCAyNTAsIDE0LCAxLCAyMDIsIAorICAgIDkyLCAyNTAsIDE0LCAxLCAyMTMsIDQzLCAyNTAsIDE0LCAxLCAyMDIsIDcxLCAyNTAsIDE0LCAxLCAyMTIsIDE2OSwgMjUwLCAKKyAgICAxNCwgMSwgMjExLCAxMzQsIDI1MCwgMTQsIDEsIDIzNywgNjcsIDI1MCwgMTQsIDI1MSwgMTQ2LCA4MiwgMjA4LCAyMTMsIAorICAgIDEyMCwgMTg3LCAxMTUsIDExOCwgNzAsIDIxNywgMTc4LCA1LCAxMjAsIDE4NywgMTE1LCAxMTgsIDcwLCAyMTcsIDE3OCwgCisgICAgMjI4LCA4LCAxMjAsIDE4NywgMTE1LCAxMTgsIDcwLCAyMTcsIDE3OCwgMjI4LCA4LCAxMTgsIDcwLCAxMTUsIDEyMCwgMTg3LCAKKyAgICAyMTcsIDE3OCwgMjI4LCA4LCAxMjAsIDIxNSwgMjUwLCAxMTUsIDExOCwgMjE1LCAyNTMsIDIxNywgMTc4LCAyMjgsIDgsIAorICAgIDExOCwgMjE1LCAyNTMsIDExNSwgMTIwLCAyMTUsIDI1MCwgMjE3LCAxNzgsIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDI1MSwgCisgICAgMjgsIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDI0OCwgMTA1LCAyMzEsIDEwLCAyMTksIDcwLCAxLCAyMzgsIDY3LCAyMzEsIDEwLCAKKyAgICAyMTksIDcwLCAxLCAyNDQsIDE3NywgMjMxLCAxMCwgMjE5LCA3MCwgMSwgMjM3LCA2NywgMjMxLCAxMCwgMjE5LCA3MCwgMSwgCisgICAgMjA0LCA3MCwgMjMxLCAxMCwgMjE5LCA3MCwgMSwgMjAyLCA5NSwgMjMxLCAxMCwgMjE5LCA3MCwgMSwgMjM3LCAxOSwgMjMxLCAKKyAgICAxMCwgMjE5LCA3MCwgMSwgMjA5LCAxMjgsIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDIwMiwgMjM1LCAyMzEsIDEwLCAyMTksIAorICAgIDcwLCAxLCAyMjksIDI1MCwgMjMxLCAxMCwgMjE5LCA3MCwgMSwgMjI4LCAxOSwgMjMxLCAxMCwgMjE5LCA3MCwgMSwgMjI0LCAKKyAgICAyNDcsIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDIyMSwgNDAsIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDIxNCwgMjQ5LCAyMzEsIAorICAgIDEwLCAyMTksIDcwLCAxLCAyNTAsIDMsIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDIxOSwgMzQsIDIzMSwgMTAsIDIxOSwgNzAsIAorICAgIDEsIDIxNSwgMjYsIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDIxNywgNjksIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDIxNiwgOTEsIAorICAgIDIzMSwgMTAsIDIxOSwgNzAsIDEsIDIxMiwgMjU1LCAyMzEsIDEwLCAyMTksIDcwLCAxLCAyMDksIDIwMSwgMjMxLCAxMCwgCisgICAgMjE5LCA3MCwgNDIsIDEwNSwgMjMxLCAxMCwgMjE5LCA3MCwgNDIsIDEwOCwgMjMxLCAxMCwgMjE5LCA3MCwgNDIsIDE0NywgCisgICAgMjMxLCAxMCwgMjE5LCA3MCwgNDIsIDE0OSwgMjMxLCAxMCwgMjE5LCA3MCwgNDIsIDIwOSwgMTUyLCAyMzEsIDEwLCAyMTksIAorICAgIDcwLCA0MiwgMjA3LCAxNTEsIDIzMSwgMTAsIDIxOSwgNzAsIDQyLCAxMTgsIDIzNiwgMTEsIDIzMSwgMTAsIDIxOSwgNzAsIAorICAgIDQyLCAxMTgsIDIwOSwgMzYsIDIzMSwgMTAsIDIxOSwgMTQ5LCAxLCAyNTEsIDI4LCAyMzEsIDEwLCAyMTksIDE0OSwgMSwgCisgICAgMjQ4LCAxMDUsIDIzMSwgMTAsIDIxOSwgMTQ5LCAxLCAyMzgsIDY3LCAyMzEsIDEwLCAyMTksIDE0OSwgMSwgMjQ0LCAxNzcsIAorICAgIDIzMSwgMTAsIDIxOSwgMTQ5LCAxLCAyMzcsIDY3LCAyMzEsIDEwLCAyMTksIDE0OSwgMSwgMjA0LCA2OSwgMjMxLCAxMCwgCisgICAgMjE5LCAxNDksIDEsIDIwMiwgOTUsIDIzMSwgMTAsIDIxOSwgMTQ5LCAxLCAyMzcsIDE5LCAyMzEsIDEwLCAyMTksIDE0OSwgCisgICAgMSwgMjA5LCAxMjgsIDIzMSwgMTAsIDIxOSwgMTQ5LCAxLCAyMDIsIDIzNSwgMjMxLCAxMCwgMjE5LCAxNDksIDEsIDIyOSwgCisgICAgMjUwLCAyMzEsIDEwLCAyMTksIDE0OSwgMSwgMjI4LCAxOSwgMjMxLCAxMCwgMjE5LCAxNDksIDEsIDIyNCwgMjQ2LCAyMzEsIAorICAgIDEwLCAyMTksIDE0OSwgMSwgMjIxLCA0MCwgMjMxLCAxMCwgMjE5LCAxNDksIDEsIDIxNCwgMjQ5LCAyMzEsIDEwLCAyMTksIAorICAgIDE0OSwgMSwgMjE5LCAzNCwgMjMxLCAxMCwgMjE5LCAxNDksIDEsIDIxNSwgMjYsIDIzMSwgMTAsIDIxOSwgMTQ5LCAxLCAKKyAgICAyMTIsIDI1NSwgMjMxLCAxMCwgMjE5LCAxNDksIDEsIDIwOSwgMjAxLCAyMzEsIDEwLCAyMTksIDE0OSwgNDIsIDEwNSwgCisgICAgMjMxLCAxMCwgMjE5LCAxNDksIDQyLCAxMDgsIDIzMSwgMTAsIDIxOSwgMTQ5LCA0MiwgMTQ3LCAyMzEsIDEwLCAyMTksIAorICAgIDE0OSwgNDIsIDE0OSwgMjMxLCAxMCwgMjE5LCAxNDksIDQyLCAyMDksIDE1MiwgMjMxLCAxMCwgMjE5LCAxNDksIDQyLCAKKyAgICAyMDcsIDE1MSwgMjMxLCAxMCwgMjE5LCAxNDksIDQyLCAxMTgsIDIzNiwgMTEsIDIzMSwgMTAsIDIxOSwgMTQ5LCA0MiwgCisgICAgMTE4LCAyMDksIDM2LCAyMTcsIDIwMywgMjE5LCAxNDksIDEsIDI1MSwgMjgsIDIxNywgMjAzLCAyMTksIDE0OSwgMSwgMjQ4LCAKKyAgICAxMDUsIDIxNywgMjAzLCAyMTksIDE0OSwgMSwgMjM4LCA2NywgMjE3LCAyMDMsIDIxOSwgMTQ5LCAxLCAyNDQsIDE3NywgCisgICAgMjE3LCAyMDMsIDIxOSwgMTQ5LCAxLCAyMzcsIDY3LCAyMTcsIDIwMywgMjE5LCAxNDksIDEsIDIwNCwgNjksIDIxNywgMjAzLCAKKyAgICAyMTksIDE0OSwgMSwgMjAyLCA5NSwgMjE3LCAyMDMsIDIxOSwgMTQ5LCAxLCAyMzcsIDE5LCAyMTcsIDIwMywgMjE5LCAxNDksIAorICAgIDEsIDIwMiwgMjM1LCAyMTcsIDIwMywgMjE5LCAxNDksIDEsIDIyOSwgMjUwLCAyMTcsIDIwMywgMjE5LCAxNDksIDEsIDIyOCwgCisgICAgMTksIDIxNywgMjAzLCAyMTksIDE0OSwgMSwgMjI0LCAyNDYsIDIxNywgMjAzLCAyMTksIDE0OSwgMSwgMjIxLCA0MCwgMjE3LCAKKyAgICAyMDMsIDIxOSwgMTQ5LCAxLCAyMTQsIDI0OSwgMjE3LCAyMDMsIDIxOSwgMTQ5LCAxLCAyMTksIDM0LCAyMTcsIDIwMywgCisgICAgMjE5LCAxNDksIDEsIDIxNSwgMjYsIDIxNywgMjAzLCAyMTksIDE0OSwgMSwgMjEyLCAyNTUsIDIxNywgMjAzLCAyMTksIAorICAgIDE0OSwgMSwgMjA5LCAyMDEsIDIxNywgMjAzLCAyMTksIDE0OSwgMjE0LCAxNjgsIDgyLCAyMTcsIDIwMywgMjE5LCAxNDksIAorICAgIDIwNywgMTc0LCAyMTQsIDE2OCwgODIsIDIxNywgMjAzLCAyMTksIDE0OSwgMjM5LCAxNDcsIDE4NywgMywgMjQ1LCAxMzAsIAorICAgIDIxNywgMjAzLCAyMTksIDE0OSwgMjM5LCAxNDcsIDE4NywgMywgMjQzLCA4NSwgMjE3LCAyMDMsIDIxOSwgMTQ5LCA0MiwgCisgICAgMTA1LCAyMTcsIDIwMywgMjE5LCAxNDksIDQyLCAxMDgsIDIxNywgMjAzLCAyMTksIDE0OSwgNDIsIDE0NywgMjE3LCAyMDMsIAorICAgIDIxOSwgMTQ5LCA0MiwgMTQ5LCAyMTcsIDIwMywgMjE5LCAxNDksIDQyLCAyMDksIDE1MiwgMjE3LCAyMDMsIDIxOSwgMTQ5LCAKKyAgICA0MiwgMjA3LCAxNTEsIDIxNywgMjAzLCAyMTksIDE0OSwgNDIsIDExOCwgMjM2LCAxMSwgMzgsIDIwNywgMTc4LCAxLCAyMTksIAorICAgIDIzNSwgNjMsIDM4LCAyMDcsIDE3OCwgMSwgMjAzLCA0MCwgNjMsIDM4LCAyMDcsIDE3OCwgMSwgMjAzLCA0MCwgMjUxLCAKKyAgICAxMDksIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDc1LCAzOCwgMjA3LCAxNzgsIDEsIDIwMywgNDAsIDc1LCAzOCwgCisgICAgMjA3LCAxNzgsIDEsIDIwMywgNDAsIDc0LCAzOCwgMjA3LCAxNzgsIDEsIDIxOSwgMjM1LCA3OCwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMTksIDIzNSwgMjIwLCA3MywgMzgsIDIwNywgMTc4LCAxLCAyMDMsIDQwLCAyMjAsIDczLCAzOCwgMjA3LCAxNzgsIDEsIAorICAgIDIxOSwgMjM1LCAyNTEsIDIzMiwgMzgsIDIwNywgMTc4LCAxLCAyMDMsIDQwLCAyNTEsIDIzMiwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMTksIDIzNSwgMjUxLCAxMDgsIDM4LCAyMDcsIDE3OCwgMSwgMjAzLCA0MCwgMjUxLCAxMDgsIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjE5LCAyMzUsIDI1MSwgODEsIDM4LCAyMDcsIDE3OCwgMSwgMjAzLCA0MCwgMjUxLCA4MSwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMTksIDIzNSwgMjUxLCAxMDMsIDM4LCAyMDcsIDE3OCwgMSwgMjAzLCA0MCwgMjUxLCAxMDMsIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjE5LCAyMzUsIDI1MSwgMTIyLCAzOCwgMjA3LCAxNzgsIDEsIDIwMywgNDAsIDI1MSwgMTIyLCAzOCwgMjA3LCAxNzgsIDEsIAorICAgIDIxOSwgMjM1LCAyNTEsIDEwNywgMzgsIDIwNywgMTc4LCAxLCAyMTksIDIzNSwgMjQwLCAxODEsIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjAzLCA0MCwgMjQwLCAxODEsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDI1MCwgOCwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMDMsIDQwLCAyNTAsIDgsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDI1MSwgOTAsIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjAzLCA0MCwgMjUxLCA5MCwgMzgsIDIwNywgMTc4LCAxLCAyMTksIDIzNSwgMjUxLCAxMDEsIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjAzLCA0MCwgMjUxLCAxMDEsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDIyMCwgNzEsIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjAzLCA0MCwgMjIwLCA3MSwgMzgsIDIwNywgMTc4LCAxLCAyMTksIDIzNSwgMjUxLCAzOSwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMDMsIDQwLCAyNTEsIDM5LCAzOCwgMjA3LCAxNzgsIDEsIDIxOSwgMjM1LCAyNTEsIDEwMCwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMTksIDIzNSwgMjQxLCAxMDYsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDI0MSwgMTAzLCAzOCwgMjA3LCAxNzgsIDEsIAorICAgIDIxOSwgMjM1LCAyNTAsIDIzMSwgMzgsIDIwNywgMTc4LCAxLCAyMTksIDIzNSwgMjUxLCA5OCwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMDMsIDQwLCAyNTEsIDk4LCAzOCwgMjA3LCAxNzgsIDEsIDIxOSwgMjM1LCAyNDEsIDcwLCAzOCwgMjA3LCAxNzgsIDEsIAorICAgIDIwMywgNDAsIDI0MSwgNzAsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDI0MSwgODksIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjAzLCA0MCwgMjQxLCA4OSwgMzgsIDIwNywgMTc4LCAxLCAyMTksIDIzNSwgMjQxLCA1NiwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMDMsIDQwLCAyNDEsIDU2LCAzOCwgMjA3LCAxNzgsIDEsIDIwMywgNDAsIDI1MCwgMjIzLCAzOCwgMjA3LCAxNzgsIDEsIAorICAgIDIxOSwgMjM1LCAyNDEsIDc4LCAzOCwgMjA3LCAxNzgsIDEsIDIwMywgNDAsIDI1MSwgOTcsIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjE5LCAyMzUsIDI0MSwgNDYsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDIyMCwgOSwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMTksIDIzNSwgMjM1LCAxNjQsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDI0MSwgMTY5LCAzOCwgMjA3LCAxNzgsIDEsIAorICAgIDIwMywgNDAsIDI0MSwgMTY5LCAzOCwgMjA3LCAxNzgsIDEsIDIxOSwgMjM1LCAyNTAsIDE0OCwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMDMsIDQwLCAyNTAsIDE0OCwgMzgsIDIwNywgMTc4LCAxLCAyMTksIDIzNSwgMjMwLCAyMjYsIDM4LCAyMDcsIDE3OCwgMSwgCisgICAgMjAzLCA0MCwgMjMwLCAyMjYsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDIxOSwgMjQ2LCAzOCwgMjA3LCAxNzgsIDEsIAorICAgIDIwMywgNDAsIDIxOSwgMjQ2LCAzOCwgMjA3LCAxNzgsIDEsIDIxOSwgMjM1LCAyNTAsIDE0NCwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMDMsIDQwLCAyNTAsIDE0NCwgMzgsIDIwNywgMTc4LCAxLCAyMTksIDIzNSwgMjUxLCA5NiwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMTksIDIzNSwgMjUwLCA4MSwgMzgsIDIwNywgMTc4LCAxLCAyMTksIDIzNSwgMjUxLCA5NCwgMzgsIDIwNywgMTc4LCAxLCAKKyAgICAyMTksIDIzNSwgMjUwLCA3NSwgMzgsIDIwNywgMTc4LCAxLCAyMDMsIDQwLCAyNTAsIDc1LCAzOCwgMjA3LCAxNzgsIDEsIAorICAgIDIxOSwgMjM1LCAyNDEsIDcsIDM4LCAyMDcsIDE3OCwgMSwgMjAzLCA0MCwgMjQxLCA3LCAzOCwgMjA3LCAxNzgsIDEsIDIxOSwgCisgICAgMjM1LCAyNTAsIDQ5LCAzOCwgMjA3LCAxNzgsIDEsIDIwMywgNDAsIDI1MCwgNDksIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAKKyAgICAyMzUsIDI1MSwgOTEsIDM4LCAyMDcsIDE3OCwgMSwgMjAzLCA0MCwgMjUxLCA5MSwgMzgsIDIwNywgMTc4LCAxLCAyMTksIAorICAgIDIzNSwgMjE5LCAyMjQsIDM4LCAyMDcsIDE3OCwgMSwgMjE5LCAyMzUsIDI0OCwgMjE1LCAzOCwgMTQ1LCA2LCAxLCA2MywgCisgICAgMzgsIDE0NSwgNiwgMSwgMjUyLCAyNSwgMzgsIDE0NSwgNiwgMSwgMjQxLCAxNzEsIDM4LCAxNDUsIDYsIDEsIDI1MCwgMjQyLCAKKyAgICAzOCwgMTQ1LCA2LCAxLCAyNDEsIDE2OSwgMzgsIDE0NSwgNiwgMSwgMjQxLCA4OSwgMzgsIDE0NSwgNiwgMSwgMjQxLCAxNjYsIAorICAgIDM4LCAxNDUsIDYsIDEsIDI0MSwgMTY1LCAzOCwgMTQ1LCA2LCAxLCAyNTAsIDIyNiwgMzgsIDE0NSwgNiwgMSwgNzQsIDM4LCAKKyAgICAxNDUsIDYsIDEsIDI0NiwgMTcsIDc0LCAzOCwgMTQ1LCA2LCAxLCAyNDEsIDE2MSwgMzgsIDE0NSwgNiwgMSwgMjQxLCAxNTQsIAorICAgIDM4LCAxNDUsIDYsIDEsIDI0MSwgMTUzLCAzOCwgMTQ1LCA2LCAxLCAyNDEsIDE1MCwgMzgsIDE0NSwgNiwgMSwgMjQxLCAKKyAgICAxNDcsIDM4LCAxNDUsIDYsIDEsIDc1LCAzOCwgMTQ1LCA2LCAxLCAyMzEsIDgzLCAzOCwgMTQ1LCA2LCAxLCAyNDEsIDEzMiwgCisgICAgMzgsIDE0NSwgNiwgMSwgMjQxLCAxMjksIDM4LCAxNDUsIDYsIDEsIDI1MSwgNDcsIDM4LCAxNDUsIDYsIDEsIDIwNiwgMjMyLCAKKyAgICAzOCwgMTQ1LCA2LCAxLCAyNDEsIDEyMiwgMzgsIDE0NSwgNiwgMSwgMjQxLCAxMDUsIDM4LCAxNDUsIDYsIDEsIDI0MSwgCisgICAgMTAzLCAzOCwgMTQ1LCA2LCAxLCAyNDEsIDkyLCAzOCwgMTQ1LCA2LCAxLCAyNDEsIDU2LCAzOCwgMTQ1LCA2LCAxLCA3OCwgCisgICAgMzgsIDE0NSwgNiwgMSwgMjIwLCAxOCwgMzgsIDE0NSwgNiwgMSwgMjIyLCA3MSwgMjIwLCA3MywgMzgsIDE0NSwgNiwgMSwgCisgICAgMjE1LCAxNDEsIDIyMCwgNzMsIDM4LCAxNDUsIDYsIDEsIDIyMCwgNzIsIDM4LCAxNDUsIDYsIDEsIDI0MSwgNDYsIDM4LCAKKyAgICAxNDUsIDYsIDEsIDI0MSwgOTcsIDM4LCAxNDUsIDYsIDEsIDI0MSwgMjgsIDM4LCAxNDUsIDYsIDEsIDIxMiwgMjI4LCAyNDEsIAorICAgIDI4LCAzOCwgMTQ1LCA2LCAxLCAyNDEsIDE3LCAzOCwgMTQ1LCA2LCAxLCAyNDAsIDI1MiwgMzgsIDE0NSwgNiwgMSwgMjQwLCAKKyAgICAyNTAsIDM4LCAxNDUsIDYsIDEsIDI0MSwgNzAsIDM4LCAxNDUsIDYsIDEsIDI0MCwgMjM5LCAzOCwgMTQ1LCA2LCAxLCAyNDEsIAorICAgIDE2NywgMzgsIDE0NSwgNiwgMSwgNjgsIDM4LCAxNDUsIDYsIDEsIDIwNiwgMTc4LCAzOCwgMTQ1LCA2LCAxLCAyMjIsIDcxLCAKKyAgICAyMDcsIDI0LCAzOCwgMTQ1LCA2LCAxLCAyMTUsIDE0MSwgMjA3LCAyNCwgMzgsIDE0NSwgNiwgMSwgMjQwLCAyMjYsIDM4LCAKKyAgICAxNDUsIDYsIDEsIDI0MCwgMTgxLCAzOCwgMTQ1LCA2LCAxLCAyNDAsIDE3NiwgMzgsIDE0NSwgNiwgMSwgMjQxLCA2OSwgNTQsIAorICAgIDM4LCAxNDUsIDYsIDEsIDIwNiwgMTkzLCAzOCwgMTQ1LCA1LCAxLCA2MywgMzgsIDE0NSwgNSwgMSwgMjUyLCAyNSwgMzgsIAorICAgIDE0NSwgNSwgMSwgMjQxLCAxNzEsIDM4LCAxNDUsIDUsIDEsIDI1MCwgMjQyLCAzOCwgMTQ1LCA1LCAxLCAyNDEsIDE2OSwgCisgICAgMzgsIDE0NSwgNSwgMSwgMjQxLCA4OSwgMzgsIDE0NSwgNSwgMSwgMjQxLCAxNjYsIDM4LCAxNDUsIDUsIDEsIDI0MSwgMTY1LCAKKyAgICAzOCwgMTQ1LCA1LCAxLCAyNTAsIDIyNiwgMzgsIDE0NSwgNSwgMSwgNzQsIDM4LCAxNDUsIDUsIDEsIDI0NiwgMTcsIDc0LCAKKyAgICAzOCwgMTQ1LCA1LCAxLCAyNDEsIDE2MSwgMzgsIDE0NSwgNSwgMSwgMjQxLCAxNTQsIDM4LCAxNDUsIDUsIDEsIDI0MSwgCisgICAgMTUzLCAzOCwgMTQ1LCA1LCAxLCAyNDEsIDE1MCwgMzgsIDE0NSwgNSwgMSwgMjQxLCAxNDcsIDM4LCAxNDUsIDUsIDEsIDc1LCAKKyAgICAzOCwgMTQ1LCA1LCAxLCAyMzEsIDgzLCAzOCwgMTQ1LCA1LCAxLCAyNDEsIDEzMiwgMzgsIDE0NSwgNSwgMSwgMjQxLCAxMjksIAorICAgIDM4LCAxNDUsIDUsIDEsIDI1MSwgNDcsIDM4LCAxNDUsIDUsIDEsIDIwNiwgMjMyLCAzOCwgMTQ1LCA1LCAxLCAyNDEsIDEyMiwgCisgICAgMzgsIDE0NSwgNSwgMSwgMjQxLCAxMDUsIDM4LCAxNDUsIDUsIDEsIDI0MSwgMTAzLCAzOCwgMTQ1LCA1LCAxLCAyNDEsIDkyLCAKKyAgICAzOCwgMTQ1LCA1LCAxLCAyNDEsIDU2LCAzOCwgMTQ1LCA1LCAxLCA3OCwgMzgsIDE0NSwgNSwgMSwgMjIwLCAxOCwgMzgsIAorICAgIDE0NSwgNSwgMSwgMjIyLCA3MSwgMjIwLCA3MywgMzgsIDE0NSwgNSwgMSwgMjE1LCAxNDEsIDIyMCwgNzMsIDM4LCAxNDUsIAorICAgIDUsIDEsIDIyMCwgNzIsIDM4LCAxNDUsIDUsIDEsIDI0MSwgNDYsIDM4LCAxNDUsIDUsIDEsIDI0MSwgOTcsIDM4LCAxNDUsIAorICAgIDUsIDEsIDI0MSwgMjgsIDM4LCAxNDUsIDUsIDEsIDIxMiwgMjI4LCAyNDEsIDI4LCAzOCwgMTQ1LCA1LCAxLCAyNDEsIDE3LCAKKyAgICAzOCwgMTQ1LCA1LCAxLCAyNDAsIDI1MiwgMzgsIDE0NSwgNSwgMSwgMjQwLCAyNTAsIDM4LCAxNDUsIDUsIDEsIDI0MSwgNzAsIAorICAgIDM4LCAxNDUsIDUsIDEsIDI0MCwgMjM5LCAzOCwgMTQ1LCA1LCAxLCAyNDEsIDE2NywgMzgsIDE0NSwgNSwgMSwgNjgsIDM4LCAKKyAgICAxNDUsIDUsIDEsIDIwNiwgMTc4LCAzOCwgMTQ1LCA1LCAxLCAyMjIsIDcxLCAyMDcsIDI0LCAzOCwgMTQ1LCA1LCAxLCAyMTUsIAorICAgIDE0MSwgMjA3LCAyNCwgMzgsIDE0NSwgNSwgMSwgMjQwLCAyMjYsIDM4LCAxNDUsIDUsIDEsIDI0MCwgMTgxLCAzOCwgMTQ1LCAKKyAgICA1LCAxLCAyNDAsIDE3NiwgMzgsIDE0NSwgNSwgMSwgMjQxLCA2OSwgNTQsIDM4LCAxNDUsIDUsIDEsIDIwNiwgMTkzLCAzOCwgCisgICAgMTQ1LCA0MiwgMTA1LCAzOCwgMTQ1LCA0MiwgMTcwLCAzOCwgMTQ1LCA0MiwgMjA5LCAxNTIsIDM4LCAxNDUsIDQyLCAyNDAsIAorICAgIDE4LCAzOCwgMTQ1LCA0MiwgMTE4LCAyMzYsIDExLCAzOCwgMTQ1LCA0MiwgMTE4LCAyMDksIDM2LCAyMTUsIDEyOSwgMTcsIAorICAgIDEwNSwgMjE1LCAxMjksIDE3LCAxMDgsIDIxNSwgMTI5LCAxNywgMTQ3LCAyMTUsIDEyOSwgMTcsIDE0OSwgMjE1LCAxMjksIAorICAgIDE3LCAxNzAsIDIxNSwgMTI5LCAxNywgMTk1LCAyMTUsIDEyOSwgMTcsIDIxMywgMTExLCAyMTUsIDEyOSwgMTcsIDE5OSwgCisgICAgMjE1LCAxMjksIDE3LCAyMjIsIDYzLCAyMTUsIDEyOSwgNDIsIDIwOSwgMTUyLCAyMTUsIDEyOSwgNDIsIDIwNywgMTUxLCAKKyAgICAyMTUsIDEyOSwgNDIsIDIwOSwgNTMsIDIxNSwgMTI5LCA0MiwgMjM5LCAxNTMsIDIxNSwgMTI5LCA0MiwgMjQwLCAxOCwgCisgICAgMjE1LCAxMjksIDQyLCAyMTIsIDc0LCAyMTUsIDEyOSwgNDIsIDIxMywgMTA1LCAyMTUsIDEyOSwgNDIsIDI0MSwgMTM0LCAKKyAgICAyMTUsIDEyOSwgNDIsIDIyMiwgNTgsIDIxNSwgMTI5LCA0MiwgMTE4LCAyMzYsIDExLCAyMTUsIDEyOSwgNDIsIDEyMCwgCisgICAgMjM2LCAxMSwgMjE1LCAxMjksIDQyLCAxMjYsIDIzNiwgMTEsIDIxNSwgMTI5LCA0MiwgMjM5LCAxNDcsIDIzNiwgMTEsIAorICAgIDIxNSwgMTI5LCA0MiwgMjM5LCAyMzMsIDIzNiwgMTEsIDIxNSwgMTI5LCA0MiwgMjEyLCA4OCwgMjM2LCAxMSwgMjE1LCAKKyAgICAxMjksIDQyLCAyMTMsIDExMiwgMjM2LCAxMSwgMjE1LCAxMjksIDQyLCAyNDEsIDE0MywgMjM2LCAxMSwgMjE1LCAxMjksIAorICAgIDQyLCAyMjIsIDY0LCAyMzYsIDExLCAyMTUsIDEyOSwgMjM5LCAxMzgsIDExOCwgMjM3LCAxMzcsIDIxNSwgMTI5LCAyMzksIAorICAgIDEzOCwgMTE4LCAyMTcsIDU1LCAyMTUsIDEyOSwgMjM5LCAxMzgsIDExOCwgMjA5LCA2MCwgMjE1LCAxMjksIDIzOSwgMTM4LCAKKyAgICAxMjAsIDIwOSwgNTcsIDE0NCwgMiwgMjQ3LCA1MiwgMTQ0LCAyLCAyNTAsIDE4MCwgMTQ0LCAyLCAyMDUsIDE5OSwgMTQ0LCAKKyAgICAyLCAyMzAsIDEzNSwgMTQ0LCAyLCAyMDYsIDIyMiwgMTQ0LCAxLCA2MywgMTQ0LCAxLCAyNTIsIDI1LCAxNDQsIDEsIDc1LCAKKyAgICAxNDQsIDEsIDIzMSwgODMsIDE0NCwgMSwgNjgsIDE0NCwgMSwgMjA2LCAxNzgsIDE0NCwgMSwgMTI1LCAxNDYsIDE0NCwgMSwgCisgICAgMTI1LCAyMTUsIDE4NiwgMTQ0LCAxLCAxMjUsIDE1OSwgMTQ0LCAxLCAxMjUsIDIyNywgNzgsIDE0NCwgMSwgNzQsIDE0NCwgCisgICAgMSwgMjUxLCA2NCwgMTQ0LCAxLCA3OCwgMTQ0LCAxLCAyNTAsIDM0LCAxNDQsIDEsIDE3MywgMTQ0LCAxLCAyMjksIDE0NCwgCisgICAgMTQ0LCAxLCAyMzksIDgsIDE0NCwgMSwgMjM4LCAxMTksIDE0NCwgMSwgMjIyLCAyMDMsIDE0NCwgMSwgMjQ3LCA5MiwgMTQ0LCAKKyAgICAxLCAyNDYsIDE5OSwgMTQ0LCAxLCAyMzAsIDE4MSwgMTQ0LCAxLCAyMzAsIDE0OSwgMTQ0LCAxLCAyMjEsIDExLCAxNDQsIDEsIAorICAgIDIwNywgMjQxLCAxNDQsIDEsIDIwNywgMjI5LCAxNDQsIDEsIDI0NCwgMTIwLCAxNDQsIDEsIDI0NCwgMTA0LCAxNDQsIDEsIAorICAgIDIyMSwgMjI3LCAxNDQsIDEsIDIxMCwgMjIsIDE0NCwgMSwgMjA5LCAxMDgsIDE0NCwgMSwgMjQ0LCAyMTIsIDE0NCwgMSwgCisgICAgMjQ0LCAxLCAxNDQsIDEsIDIwMSwgMjAxLCAxNDQsIDEsIDE4NSwgMTQ0LCAxLCAyMTgsIDIwOCwgMTQ0LCAxLCAyNDksIDMyLCAKKyAgICAxNDQsIDEsIDI0OCwgOTgsIDE0NCwgMSwgMTkyLCAxNDQsIDEsIDE5OCwgMTQ0LCAxLCAyMTYsIDIyMCwgMTQ0LCAxLCAyMjgsIAorICAgIDExMywgMTQ0LCAxLCAyMDYsIDg2LCAxNDQsIDEsIDIxMywgOTAsIDE0NCwgMSwgMjExLCAxNjQsIDE0NCwgMSwgMjE1LCAzNiwgCisgICAgMTQ0LCAxLCAxNTIsIDE0NCwgMSwgMjI3LCA3NywgMTQ0LCAxLCAzOCwgNDQsIDIyNywgNjgsIDE0NCwgMSwgMzgsIDQ0LCAKKyAgICAyMTUsIDE4NSwgMTQ0LCAxLCAzOCwgNDQsIDIyMSwgMjA5LCAxNDQsIDIyLCAyLCAyNTIsIDI1LCAxNDQsIDIyLCAyLCAyNDgsIAorICAgIDk1LCAyNTIsIDI1LCAxNDQsIDIyLCAyLCA3NSwgMTQ0LCAyMiwgMiwgMjMxLCA4MywgMTQ0LCAyMiwgMiwgNjgsIDE0NCwgCisgICAgMjIsIDIsIDIwNiwgMTc4LCAxNDQsIDIyLCAyLCAxMjUsIDE0NiwgMTQ0LCAyMiwgMiwgMTI1LCAyMTUsIDE4NiwgMTQ0LCAKKyAgICAyMiwgMiwgMTI1LCAxNTksIDE0NCwgMjIsIDIsIDEyNSwgMjI3LCA3OCwgMTQ0LCAyMiwgMiwgNzQsIDE0NCwgMjIsIDIsIAorICAgIDI1MSwgNjQsIDE0NCwgMjIsIDIsIDc4LCAxNDQsIDIyLCAyLCAyNTAsIDM0LCAxNDQsIDIwNSwgMjA0LCAxNDQsIDI0NCwgCisgICAgMTY2LCAxNDQsIDUyLCAyNDQsIDE2NiwgMTQ0LCAyMTcsIDE3OSwgMjQzLCA4NSwgMTQ0LCAyMTcsIDE3OSwgNTIsIDI0MywgCisgICAgODUsIDE0NCwgMjE3LCAxNzksIDIyNywgMTE0LCAxNDQsIDIxNywgMTc5LCAyNDUsIDEzOSwgMTQyLCAxNDQsIDIxNywgMTc5LCAKKyAgICAyMjcsIDUsIDE0NCwgNDIsIDEwNSwgMTQ0LCA0MiwgMTA4LCAxNDQsIDQyLCAxNDcsIDE0NCwgNDIsIDE0OSwgMTQ0LCA0MiwgCisgICAgMTcwLCAxNDQsIDQyLCAxOTUsIDE0NCwgNDIsIDIxMywgMTExLCAxNDQsIDQyLCAxOTksIDE0NCwgNDIsIDIyMiwgNjMsIAorICAgIDE0NCwgNDIsIDIwOSwgMTUyLCAxNDQsIDQyLCAyMDcsIDE1MSwgMTQ0LCA0MiwgMjA5LCA1MywgMTQ0LCA0MiwgMjM5LCAKKyAgICAxNTMsIDE0NCwgNDIsIDI0MCwgMTgsIDE0NCwgNDIsIDIxMiwgNzQsIDE0NCwgNDIsIDIxMywgMTA1LCAxNDQsIDQyLCAyNDEsIAorICAgIDEzNCwgMTQ0LCA0MiwgMjIyLCA1OCwgMTQ0LCA0MiwgMTE4LCAyMzYsIDExLCAxNDQsIDQyLCAxMTgsIDIwOSwgMzYsIDE0NCwgCisgICAgMTcsIDIwMiwgODQsIDE0NCwgMTcsIDEwNSwgMTQ0LCAxNywgMTA4LCAxNDQsIDE3LCAxNDcsIDE0NCwgMTcsIDE0OSwgMTQ0LCAKKyAgICAxNywgMTcwLCAxNDQsIDE3LCAxOTUsIDE0NCwgMTcsIDIxMywgMTExLCAxNDQsIDE3LCAxOTksIDE0NCwgMTcsIDIyMiwgNjMsIAorICAgIDE0NCwgNDIsIDIzMCwgOTYsIDIzMCwgMTUsIDIsIDI0NywgNTIsIDIzMCwgMTUsIDIsIDI1MCwgMTgwLCAyMzAsIDE1LCAyLCAKKyAgICAyMDUsIDE5OSwgMjMwLCAxNSwgMSwgNjMsIDIzMCwgMTUsIDEsIDI1MiwgMjUsIDIzMCwgMTUsIDEsIDc1LCAyMzAsIDE1LCAKKyAgICAxLCAyMzEsIDgzLCAyMzAsIDE1LCAxLCA2OCwgMjMwLCAxNSwgMSwgMjA2LCAxNzgsIDIzMCwgMTUsIDEsIDc0LCAyMzAsIAorICAgIDE1LCAxLCAyNTEsIDY0LCAyMzAsIDE1LCAxLCA3OCwgMjMwLCAxNSwgMSwgMjUwLCAzNCwgMjMwLCAxNSwgMSwgMTczLCAKKyAgICAyMzAsIDE1LCAxLCAyMjksIDE0NCwgMjMwLCAxNSwgMSwgMjM5LCA4LCAyMzAsIDE1LCAxLCAyMzgsIDExOSwgMjMwLCAxNSwgCisgICAgMSwgMjIyLCAyMDMsIDIzMCwgMTUsIDEsIDI0NywgOTIsIDIzMCwgMTUsIDEsIDI0NiwgMTk5LCAyMzAsIDE1LCAxLCAyMzAsIAorICAgIDE4MSwgMjMwLCAxNSwgMSwgMjMwLCAxNDksIDIzMCwgMTUsIDEsIDIyMSwgMTEsIDIzMCwgMTUsIDEsIDIwNywgMjQxLCAKKyAgICAyMzAsIDE1LCAxLCAyMDcsIDIyOSwgMjMwLCAxNSwgMSwgMjQ0LCAxMjAsIDIzMCwgMTUsIDEsIDI0NCwgMTA5LCAyMzAsIAorICAgIDE1LCAxLCAyNDQsIDEwNCwgMjMwLCAxNSwgMSwgMjE2LCA2MSwgMjMwLCAxNSwgMSwgMjIxLCAyMjcsIDIzMCwgMTUsIDEsIAorICAgIDIxMCwgMjIsIDIzMCwgMTUsIDEsIDIwOSwgMTA4LCAyMzAsIDE1LCAxLCAyNDQsIDIxMiwgMjMwLCAxNSwgMSwgMjQ0LCAxLCAKKyAgICAyMzAsIDE1LCAxLCAyMDEsIDIwMSwgMjMwLCAxNSwgMSwgMTg1LCAyMzAsIDE1LCAxLCAyMTgsIDIwOCwgMjMwLCAxNSwgMSwgCisgICAgMjQ5LCAzMiwgMjMwLCAxNSwgMSwgMjQ4LCA5OCwgMjMwLCAxNSwgMSwgMTkyLCAyMzAsIDE1LCAxLCAxOTgsIDIzMCwgMTUsIAorICAgIDEsIDIxNiwgMjIwLCAyMzAsIDE1LCAxLCAyMjgsIDExMywgMjMwLCAxNSwgMSwgMjA2LCA4NiwgMjMwLCAxNSwgMSwgMjEzLCAKKyAgICA5MCwgMjMwLCAxNSwgMSwgMjExLCAxNjQsIDIzMCwgMTUsIDEsIDIxNSwgMzYsIDIzMCwgMTUsIDEsIDE1MiwgMjMwLCAxNSwgCisgICAgMjIsIDIsIDI1MiwgMjUsIDIzMCwgMTUsIDIyLCAyLCA3NSwgMjMwLCAxNSwgMjIsIDIsIDIzMSwgODMsIDIzMCwgMTUsIDIyLCAKKyAgICAyLCA2OCwgMjMwLCAxNSwgMjIsIDIsIDIwNiwgMTc4LCAyMzAsIDE1LCAyMiwgMiwgNzQsIDIzMCwgMTUsIDIyLCAyLCAyNTEsIAorICAgIDY0LCAyMzAsIDE1LCAyMiwgMiwgNzgsIDIzMCwgMTUsIDIyLCAyLCAyNTAsIDM0LCAyMzAsIDE1LCAyLCAyMDUsIDIwNCwgCisgICAgMjMwLCAxNSwgMiwgMjIxLCA1MSwgMjMwLCAxNSwgMjUxLCAxNDYsIDU0LCAyMzAsIDE1LCAyNDEsIDU5LCA1NCwgMjMwLCAKKyAgICAxNSwgNDIsIDU0LCAyMzAsIDE1LCAyMTQsIDE2OCwgODIsIDIzMCwgMTUsIDUyLCAyMTQsIDE2OCwgODIsIDIzMCwgMTUsIAorICAgIDI0NCwgMTY2LCAyMzAsIDE1LCA1MiwgMjQ0LCAxNjYsIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMSwgMjE1LCAxOSwgMjExLCAKKyAgICAyNDYsIDIxMSwgMjU0LCAxLCAyMDksIDI1MSwgMjExLCAyNDYsIDIxMSwgMjU0LCAxLCAyNDksIDUsIDIxMSwgMjQ2LCAyMTEsIAorICAgIDI1NCwgMSwgMjQ3LCA4MSwgMjExLCAyNDYsIDIxMSwgMjU0LCAxLCAyNDQsIDE5MywgMjExLCAyNDYsIDIxMSwgMjU0LCAxLCAKKyAgICAyMzgsIDI0OSwgMjExLCAyNDYsIDIxMSwgMjU0LCAxLCAyMjUsIDE0OCwgMjExLCAyNDYsIDIxMSwgMjU0LCAxLCAyMjIsIAorICAgIDIwMCwgMjExLCAyNDYsIDIxMSwgMjU0LCAxLCAyMjgsIDg5LCAyMTEsIDI0NiwgMjExLCAyNTQsIDEsIDIyMywgOTMsIDIxMSwgCisgICAgMjQ2LCAyMTEsIDI1NCwgMSwgMjA2LCA4MiwgMjExLCAyNDYsIDIxMSwgMjU0LCAxLCAyMTksIDE1MCwgMjExLCAyNDYsIAorICAgIDIxMSwgMjU0LCAxLCAyMDMsIDkxLCAyMTEsIDI0NiwgMjExLCAyNTQsIDEsIDIxNiwgMTk5LCAyMTEsIDI0NiwgMjExLCAKKyAgICAyNTQsIDEsIDIzNywgMTQ4LCAyMTEsIDI0NiwgMjExLCAyNTQsIDEsIDIzMCwgMjAsIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMSwgCisgICAgMjMwLCAxNzUsIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMSwgMjIxLCA4LCAyMTEsIDI0NiwgMjExLCAyNTQsIDEsIDI1MSwgNzMsIAorICAgIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMSwgMjQxLCAxNTksIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMSwgMjMxLCA4NCwgMjExLCAKKyAgICAyNDYsIDIxMSwgMjU0LCAxLCAyMDcsIDE4LCAyMTEsIDI0NiwgMjExLCAyNTQsIDEsIDIyMCwgNjAsIDIxMSwgMjQ2LCAyMTEsIAorICAgIDI1NCwgMSwgMjQxLCAxNDcsIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMSwgMjI1LCAxNjEsIDIxMSwgMjQ2LCAyMTEsIDI1NCwgCisgICAgMTcsIDIwMiwgODQsIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMTcsIDEwNSwgMjExLCAyNDYsIDIxMSwgMjU0LCAxNywgMTA4LCAKKyAgICAyMTEsIDI0NiwgMjExLCAyNTQsIDE3LCAxNDcsIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMTcsIDE0OSwgMjExLCAyNDYsIDIxMSwgCisgICAgMjU0LCAxNywgMTcwLCAyMTEsIDI0NiwgMjExLCAyNTQsIDE3LCAxOTUsIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMTcsIDIxMywgCisgICAgMTExLCAyMTEsIDI0NiwgMjExLCAyNTQsIDE3LCAxOTksIDIxMSwgMjQ2LCAyMTEsIDI1NCwgMTcsIDIyMiwgNjMsIDI0NiwgCisgICAgMTkzLCAyLCAyNDcsIDUyLCAyNDYsIDE5MywgMiwgMjUwLCAxODAsIDI0NiwgMTkzLCAyLCAyMDUsIDE5OSwgMjQ2LCAxOTMsIAorICAgIDEsIDI1MiwgMjUsIDI0NiwgMTkzLCAxLCA3NSwgMjQ2LCAxOTMsIDEsIDY4LCAyNDYsIDE5MywgMSwgNzQsIDI0NiwgMTkzLCAKKyAgICAxLCAyMzAsIDQxLCAyNDYsIDE5MywgMSwgMjI5LCAxNDMsIDI0NiwgMTkzLCAxLCAyMzksIDUsIDI0NiwgMTkzLCAxLCAyMzgsIAorICAgIDExOCwgMjQ2LCAxOTMsIDEsIDIyMiwgMjAyLCAyNDYsIDE5MywgMSwgMjQ3LCA5MSwgMjQ2LCAxOTMsIDEsIDI0NiwgMTk4LCAKKyAgICAyNDYsIDE5MywgMSwgMjMwLCAxODAsIDI0NiwgMTkzLCAxLCAyMzAsIDE0OCwgMjQ2LCAxOTMsIDEsIDIyMSwgMTAsIDI0NiwgCisgICAgMTkzLCAxLCAyMDcsIDI0MCwgMjQ2LCAxOTMsIDEsIDIwNywgMjI4LCAyNDYsIDE5MywgMSwgMjQ0LCAxMTksIDI0NiwgMTkzLCAKKyAgICAxLCAyNDQsIDEwMywgMjQ2LCAxOTMsIDEsIDIyMSwgMjI2LCAyNDYsIDE5MywgMSwgMjEwLCAxOCwgMjQ2LCAxOTMsIDEsIAorICAgIDIwOSwgMTA3LCAyNDYsIDE5MywgMSwgMjQ0LCAyMTEsIDI0NiwgMTkzLCAxLCAyNDQsIDAsIDI0NiwgMTkzLCAxLCAyMjMsIAorICAgIDEwNiwgMjQ2LCAxOTMsIDEsIDIxOSwgMTY4LCAyNDYsIDE5MywgMSwgMjE4LCAyMDcsIDI0NiwgMTkzLCAxLCAyNDksIDMwLCAKKyAgICAyNDYsIDE5MywgMSwgMjQ4LCA5NywgMjQ2LCAxOTMsIDEsIDIyNSwgMTc1LCAyNDYsIDE5MywgMSwgMjAyLCAxNjcsIDI0NiwgCisgICAgMTkzLCAxLCAyMDMsIDExMCwgMjQ2LCAxOTMsIDEsIDIxNiwgMjE2LCAyNDYsIDE5MywgMSwgMjI4LCAxMTIsIDI0NiwgMTkzLCAKKyAgICAxLCAyMDQsIDExMCwgMjQ2LCAxOTMsIDEsIDIxNSwgMzMsIDI0NiwgMTkzLCAxLCAyMzcsIDE1NywgMjQ2LCAxOTMsIDIyLCAKKyAgICAyLCA2MywgMjQ2LCAxOTMsIDIyLCAyLCA3NSwgMjQ2LCAxOTMsIDIyLCAyLCAyMzEsIDgzLCAyNDYsIDE5MywgMjIsIDIsIAorICAgIDY4LCAyNDYsIDE5MywgMjIsIDIsIDIwNiwgMTc4LCAyNDYsIDE5MywgMjIsIDIsIDc0LCAyNDYsIDE5MywgMjIsIDIsIDI1MSwgCisgICAgNjQsIDI0NiwgMTkzLCAyMiwgMiwgNzgsIDI0NiwgMTkzLCAyMiwgMiwgMjUwLCAzNCwgMjQ2LCAxOTMsIDIyLCAyLCAyMjAsIAorICAgIDU3LCAyNDYsIDE5MywgMTU4LCA4MiwgMjQ2LCAxOTMsIDI1MCwgMzUsIDgyLCAyNDYsIDE5MywgMjA1LCAyMDQsIDI0NiwgCisgICAgMTkzLCAyMjUsIDE3MywgMjQ2LCAxOTMsIDE3LCAyMDIsIDg0LCAyNDYsIDE5MywgMTcsIDEwNSwgMjQ2LCAxOTMsIDE3LCAKKyAgICAxMDgsIDI0NiwgMTkzLCAxNywgMTQ3LCAyNDYsIDE5MywgMTcsIDE0OSwgMjQ2LCAxOTMsIDE3LCAxNzAsIDI0NiwgMTkzLCAKKyAgICAxNywgMTk1LCAyNDYsIDE5MywgMTcsIDIxMywgMTExLCAyNDYsIDE5MywgMTcsIDE5OSwgMjQ2LCAxOTMsIDE3LCAyMjIsIAorICAgIDYzLCAyNDYsIDE5MywgMjE0LCAxNjgsIDgyLCAyNDYsIDE5MywgMjQ0LCAxNjYsIDI0NiwgMTkzLCA1MiwgMjQ0LCAxNjYsIAorICAgIDI0NiwgMTkzLCAyMTcsIDQ3LCA4MiwgMjI1LCAxNDYsIDEsIDYzLCAyMjUsIDE0NiwgMSwgNzUsIDIyNSwgMTQ2LCAxLCA2OCwgCisgICAgMjI1LCAxNDYsIDEsIDc0LCAyMjUsIDE0NiwgMSwgNzgsIDIyNSwgMTQ2LCAxLCAxNzMsIDIyNSwgMTQ2LCAxLCAyMjksIAorICAgIDE0NCwgMjI1LCAxNDYsIDEsIDIzOSwgOCwgMjI1LCAxNDYsIDEsIDIzOCwgMTE5LCAyMjUsIDE0NiwgMSwgMjQ3LCA5MiwgCisgICAgMjI1LCAxNDYsIDEsIDI0NiwgMTk5LCAyMjUsIDE0NiwgMSwgMjMwLCAxODEsIDIyNSwgMTQ2LCAxLCAyMzAsIDE0OSwgMjI1LCAKKyAgICAxNDYsIDEsIDIyMSwgMTEsIDIyNSwgMTQ2LCAxLCAyMDcsIDI0MSwgMjI1LCAxNDYsIDEsIDIwNywgMjI5LCAyMjUsIDE0NiwgCisgICAgMSwgMjQ0LCAxMjAsIDIyNSwgMTQ2LCAxLCAyNDQsIDEwNCwgMjI1LCAxNDYsIDEsIDIyMSwgMjI3LCAyMjUsIDE0NiwgMSwgCisgICAgMjEwLCAyMiwgMjI1LCAxNDYsIDEsIDIwOSwgMTA4LCAyMjUsIDE0NiwgMSwgMjQ0LCAyMTIsIDIyNSwgMTQ2LCAxLCAyNDQsIAorICAgIDEsIDIyNSwgMTQ2LCAxLCAyMDEsIDIwMSwgMjI1LCAxNDYsIDEsIDE4NSwgMjI1LCAxNDYsIDEsIDIxOCwgMjA4LCAyMjUsIAorICAgIDE0NiwgMSwgMjQ5LCAzMiwgMjI1LCAxNDYsIDEsIDI0OCwgOTgsIDIyNSwgMTQ2LCAxLCAxOTIsIDIyNSwgMTQ2LCAxLCAKKyAgICAyMTYsIDIyMCwgMjI1LCAxNDYsIDEsIDIyOCwgMTEzLCAyMjUsIDE0NiwgMSwgMjA2LCA4NiwgMjI1LCAxNDYsIDEsIDIxNSwgCisgICAgMzYsIDIyNSwgMTQ2LCAxLCAxNTIsIDIyNSwgMTQ2LCAxLCAyMTUsIDE4NSwgMjI1LCAxNDYsIDIsIDIyMSwgNTEsIDIyNSwgCisgICAgMTQ2LCAyNTEsIDE0NiwgNTQsIDIyNSwgMTQ2LCAyMTQsIDE2OCwgODIsIDIyNSwgMTQ2LCAzMiwgMjEyLCAyMDYsIDE4MSwgCisgICAgMiwgMjQ3LCA1MiwgMTgxLCAyLCAyNTAsIDE4MCwgMTgxLCAyLCAyMDUsIDE5OSwgMTgxLCAxLCA2MywgMTgxLCAxLCAyNTIsIAorICAgIDI1LCAxODEsIDEsIDc1LCAxODEsIDEsIDIzMSwgODMsIDE4MSwgMSwgNjgsIDE4MSwgMSwgMjA2LCAxNzgsIDE4MSwgMSwgCisgICAgMTI1LCAxNDYsIDE4MSwgMSwgMTI1LCAyMTUsIDE4NiwgMTgxLCAxLCAxMjUsIDE1OSwgMTgxLCAxLCAxMjUsIDIyNywgNzgsIAorICAgIDE4MSwgMSwgNzQsIDE4MSwgMSwgMjUxLCA2NCwgMTgxLCAxLCA3OCwgMTgxLCAxLCAyNTAsIDM0LCAxODEsIDEsIDE3MywgCisgICAgMTgxLCAxLCAyMjksIDE0NCwgMTgxLCAxLCAyMzksIDgsIDE4MSwgMSwgMjM4LCAxMTksIDE4MSwgMSwgMjIyLCAyMDMsIAorICAgIDE4MSwgMSwgMjQ3LCA5MiwgMTgxLCAxLCAyNDYsIDE5OSwgMTgxLCAxLCAyMzAsIDE4MSwgMTgxLCAxLCAyMzAsIDE0OSwgCisgICAgMTgxLCAxLCAyMjEsIDExLCAxODEsIDEsIDIwNywgMjQxLCAxODEsIDEsIDIwNywgMjI5LCAxODEsIDEsIDI0NCwgMTIwLCAKKyAgICAxODEsIDEsIDI0NCwgMTA0LCAxODEsIDEsIDIyMSwgMjI3LCAxODEsIDEsIDIxMCwgMjIsIDE4MSwgMSwgMjA5LCAxMDgsIAorICAgIDE4MSwgMSwgMjQ0LCAyMTIsIDE4MSwgMSwgMjQ0LCAxLCAxODEsIDEsIDIwMSwgMjAxLCAxODEsIDEsIDE4NSwgMTgxLCAxLCAKKyAgICAyMTgsIDIwOCwgMTgxLCAxLCAyNDksIDMyLCAxODEsIDEsIDI0OCwgOTgsIDE4MSwgMSwgMTkyLCAxODEsIDEsIDE5OCwgCisgICAgMTgxLCAxLCAyMTYsIDIyMCwgMTgxLCAxLCAyMjgsIDExMywgMTgxLCAxLCAyMjcsIDc3LCAxODEsIDEsIDIwNiwgODYsIAorICAgIDE4MSwgMSwgMjEzLCA5MCwgMTgxLCAxLCAyMTEsIDE2NCwgMTgxLCAxLCAyMTUsIDM2LCAxODEsIDEsIDE1MiwgMTgxLCAyMiwgCisgICAgMiwgMjUyLCAyNSwgMTgxLCAyMiwgMiwgNzUsIDE4MSwgMjIsIDIsIDIzMSwgODMsIDE4MSwgMjIsIDIsIDY4LCAxODEsIDIyLCAKKyAgICAyLCAyMDYsIDE3OCwgMTgxLCAyMiwgMiwgMTI1LCAxNDYsIDE4MSwgMjIsIDIsIDEyNSwgMjE1LCAxODYsIDE4MSwgMjIsIDIsIAorICAgIDEyNSwgMTU5LCAxODEsIDIyLCAyLCAxMjUsIDIyNywgNzgsIDE4MSwgMjIsIDIsIDc0LCAxODEsIDIyLCAyLCAyNTEsIDY0LCAKKyAgICAxODEsIDIyLCAyLCA3OCwgMTgxLCAyMiwgMiwgMjUwLCAzNCwgMTgxLCAyLCAyMDUsIDIwNCwgMTgxLCAyLCAyNTAsIDE3LCAKKyAgICAxODEsIDIsIDIzMCwgMTM1LCAxODEsIDIsIDIwNiwgMjIyLCAxODEsIDIyMCwgMzksIDE4MSwgMjQ0LCAxNjYsIDE4MSwgNTIsIAorICAgIDI0NCwgMTY2LCAxODEsIDI1MSwgMTQ2LCA1NCwgMTgxLCAyMTMsIDEzMCwgMTgxLCAyMTQsIDIzOSwgODIsIDE4MSwgMiwgCisgICAgMjIxLCA1MSwgMTgxLCAyMiwgNjUsIDgyLCAxODEsIDI0MCwgMTk5LCAyMTIsIDIyOCwgMjIsIDgyLCAxODEsIDIxMCwgMTgwLCAKKyAgICA4MiwgMTgxLCAxNywgMjAyLCA4NCwgMTgxLCAxNywgMTA1LCAxODEsIDE3LCAxMDgsIDE4MSwgMTcsIDE0NywgMTgxLCAxNywgCisgICAgMTQ5LCAxODEsIDE3LCAxNzAsIDE4MSwgMTcsIDE5NSwgMTgxLCAxNywgMjEzLCAxMTEsIDE4MSwgMTcsIDE5OSwgMTgxLCAKKyAgICAxNywgMjIyLCA2MywgMTgxLCAyNDEsIDEyOCwgMTgxLCAyLCAyMTIsIDE1NywgMTgxLCAyMzcsIDU4LCAxODEsIDI0NSwgCisgICAgMTkxLCA1NCwgMTgxLCAyMTQsIDE2OCwgMjI1LCA5MiwgMTgxLCAyMTQsIDE2OCwgMjI1LCA5MSwgMTQwLCAyNTAsIDEyNiwgCisgICAgMTcsIDEwNSwgMTQwLCAyNTAsIDEyNiwgMTcsIDEwOCwgMTQwLCAyNTAsIDEyNiwgMTcsIDE0NywgMTQwLCAyNTAsIDEyNiwgCisgICAgMTcsIDE0OSwgMTQwLCAyNTAsIDEyNiwgMTcsIDE3MCwgMTQwLCAyNTAsIDEyNiwgMTcsIDE5NSwgMTQwLCAyNTAsIDEyNiwgCisgICAgMTcsIDIxMywgMTExLCAxNDAsIDI1MCwgMTI2LCAxNywgMTk5LCAxNDAsIDI1MCwgMTI2LCAxNywgMjIyLCA2MywgMTQwLCAKKyAgICAyNTAsIDEyNiwgNDIsIDIwOSwgMTUyLCAxNDAsIDI1MCwgMTI2LCA0MiwgMjA3LCAxNTEsIDE0MCwgMjUwLCAxMjYsIDQyLCAKKyAgICAyMDksIDUzLCAxNDAsIDI1MCwgMTI2LCA0MiwgMjM5LCAxNTMsIDE0MCwgMjUwLCAxMjYsIDQyLCAyNDAsIDE4LCAxNDAsIAorICAgIDI1MCwgMTI2LCA0MiwgMjEyLCA3NCwgMTQwLCAyNTAsIDEyNiwgNDIsIDIxMywgMTA1LCAxNDAsIDI1MCwgMTI2LCA0MiwgCisgICAgMjQxLCAxMzQsIDE0MCwgMjUwLCAxMjYsIDQyLCAyMjIsIDU4LCAxNDAsIDI1MCwgMTI2LCA0MiwgMTE4LCAyMzYsIDExLCAKKyAgICAxNDAsIDI1MCwgMTI2LCA0MiwgMTE4LCAyMDksIDM2LCAyMjksIDExNCwgMSwgNjMsIDIyOSwgMTE0LCAxLCAyNTIsIDI1LCAKKyAgICAyMjksIDExNCwgMSwgNzUsIDIyOSwgMTE0LCAxLCA2OCwgMjI5LCAxMTQsIDEsIDc0LCAyMjksIDExNCwgMSwgMjUxLCA2NCwgCisgICAgMjI5LCAxMTQsIDEsIDc4LCAyMjksIDExNCwgMSwgMjUwLCAzNCwgMjI5LCAxMTQsIDEsIDE3MywgMjI5LCAxMTQsIDEsIAorICAgIDIyOSwgMTQ0LCAyMjksIDExNCwgMSwgMjM5LCA4LCAyMjksIDExNCwgMSwgMjM4LCAxNTUsIDIyOSwgMTE0LCAxLCAyMzgsIAorICAgIDExOSwgMjI5LCAxMTQsIDEsIDIyMiwgMjAzLCAyMjksIDExNCwgMSwgMjQ3LCA5MiwgMjI5LCAxMTQsIDEsIDI0NiwgMTk5LCAKKyAgICAyMjksIDExNCwgMSwgMjMwLCAxODEsIDIyOSwgMTE0LCAxLCAyMzAsIDEyOSwgMjI5LCAxMTQsIDEsIDIyMSwgMTEsIDIyOSwgCisgICAgMTE0LCAxLCAyMDcsIDI0MSwgMjI5LCAxMTQsIDEsIDIwNywgMjI5LCAyMjksIDExNCwgMSwgMjQ0LCAxMjAsIDIyOSwgMTE0LCAKKyAgICAxLCAyNDQsIDEwNCwgMjI5LCAxMTQsIDEsIDIyMSwgMjI3LCAyMjksIDExNCwgMSwgMjEwLCAyMiwgMjI5LCAxMTQsIDEsIAorICAgIDIwOSwgMTA4LCAyMjksIDExNCwgMSwgMjQ0LCAyMTIsIDIyOSwgMTE0LCAxLCAyNDQsIDExMCwgMjI5LCAxMTQsIDEsIDI0NCwgCisgICAgMSwgMjI5LCAxMTQsIDEsIDIwMSwgMjAxLCAyMjksIDExNCwgMSwgMTg1LCAyMjksIDExNCwgMSwgMjE4LCAyMDgsIDIyOSwgCisgICAgMTE0LCAxLCAyNDksIDMyLCAyMjksIDExNCwgMSwgMjQ4LCAxOTgsIDIyOSwgMTE0LCAxLCAyNDgsIDk4LCAyMjksIDExNCwgCisgICAgMSwgMTkyLCAyMjksIDExNCwgMSwgMTk4LCAyMjksIDExNCwgMSwgMjE2LCAyMjAsIDIyOSwgMTE0LCAxLCAyMjgsIDExMywgCisgICAgMjI5LCAxMTQsIDEsIDIwNiwgODYsIDIyOSwgMTE0LCAxLCAyMTUsIDM2LCAyMjksIDExNCwgMSwgMTUyLCAyMjksIDExNCwgCisgICAgMSwgMjI3LCA3NywgMjI5LCAxMTQsIDIyLCAyLCAyNTIsIDI1LCAyMjksIDExNCwgMjIsIDIsIDc1LCAyMjksIDExNCwgMjIsIAorICAgIDIsIDIzMSwgODMsIDIyOSwgMTE0LCAyMiwgMiwgNjgsIDIyOSwgMTE0LCAyMiwgMiwgNzQsIDIyOSwgMTE0LCAyMiwgMiwgCisgICAgMjUxLCA2NCwgMjI5LCAxMTQsIDIyLCAyLCA3OCwgMjI5LCAxMTQsIDIyLCAyLCAyNTAsIDM0LCAyMjksIDExNCwgMiwgMjUwLCAKKyAgICAxODAsIDIyOSwgMTE0LCAyLCAyMDUsIDIwNCwgMjI5LCAxMTQsIDIsIDIyMSwgNTEsIDIyOSwgMTE0LCAyLCAyMTMsIDgwLCAKKyAgICAyMjksIDExNCwgMjQ0LCAxNjYsIDIyOSwgMTE0LCA1MiwgMjQ0LCAxNjYsIDIyOSwgMTE0LCAyMDMsIDIzOCwgMjEzLCAxMzAsIAorICAgIDIyOSwgMTE0LCAyMTQsIDE2OCwgODIsIDIyOSwgMTE0LCA1MiwgMjE0LCAxNjgsIDgyLCAyMjksIDExNCwgMjUxLCAxNDYsIAorICAgIDU0LCAyMjMsIDIzMCwgMSwgNjMsIDIyMywgMjMwLCAxLCA3NSwgMjIzLCAyMzAsIDEsIDY4LCAyMjMsIDIzMCwgMSwgNzQsIAorICAgIDIyMywgMjMwLCAxLCAxNzMsIDIyMywgMjMwLCAxLCAyMjksIDE0NCwgMjIzLCAyMzAsIDEsIDIzOSwgOCwgMjIzLCAyMzAsIAorICAgIDEsIDIzOCwgMTE5LCAyMjMsIDIzMCwgMSwgMjQ3LCA5MiwgMjIzLCAyMzAsIDEsIDI0NiwgMTk5LCAyMjMsIDIzMCwgMSwgCisgICAgMjMwLCAxODEsIDIyMywgMjMwLCAxLCAyMzAsIDEyOSwgMjIzLCAyMzAsIDEsIDIyMSwgMTEsIDIyMywgMjMwLCAxLCAyMDcsIAorICAgIDI0MSwgMjIzLCAyMzAsIDEsIDIwNywgMjI5LCAyMjMsIDIzMCwgMSwgMjQ0LCAxMjAsIDIyMywgMjMwLCAxLCAyNDQsIDExMCwgCisgICAgMjIzLCAyMzAsIDEsIDI0NCwgMTA0LCAyMjMsIDIzMCwgMSwgMjIxLCAyMjcsIDIyMywgMjMwLCAxLCAyMTAsIDIyLCAyMjMsIAorICAgIDIzMCwgMSwgMjA5LCAxMDgsIDIyMywgMjMwLCAxLCAyNDQsIDIxMiwgMjIzLCAyMzAsIDEsIDI0NCwgMSwgMjIzLCAyMzAsIAorICAgIDEsIDIwMSwgMjAxLCAyMjMsIDIzMCwgMSwgMTg1LCAyMjMsIDIzMCwgMSwgMjE4LCAyMDgsIDIyMywgMjMwLCAxLCAyNDksIAorICAgIDMyLCAyMjMsIDIzMCwgMSwgMjQ4LCA5OCwgMjIzLCAyMzAsIDEsIDE5MiwgMjIzLCAyMzAsIDEsIDE5OCwgMjIzLCAyMzAsIAorICAgIDEsIDIxNiwgMjIwLCAyMjMsIDIzMCwgMSwgMjI4LCAxMTMsIDIyMywgMjMwLCAxLCAyMDYsIDg2LCAyMjMsIDIzMCwgMSwgCisgICAgMjE1LCAzNiwgMjIzLCAyMzAsIDEsIDE1MiwgMjIzLCAyMzAsIDEsIDIxNSwgMTg1LCAyMjMsIDIzMCwgMSwgMjE2LCA2MSwgCisgICAgMjIzLCAyMzAsIDIxNCwgMTY4LCA4MiwgMjI5LCAxMDYsIDEsIDYzLCAyMjksIDEwNiwgMSwgMjUyLCAyNSwgMjI5LCAxMDYsIAorICAgIDEsIDc1LCAyMjksIDEwNiwgMSwgMjMxLCA4MywgMjI5LCAxMDYsIDEsIDY4LCAyMjksIDEwNiwgMSwgMjA2LCAxNzgsIDIyOSwgCisgICAgMTA2LCAxLCA3NCwgMjI5LCAxMDYsIDEsIDI1MSwgNjQsIDIyOSwgMTA2LCAxLCA3OCwgMjI5LCAxMDYsIDEsIDI1MCwgMzQsIAorICAgIDIyOSwgMTA2LCAxLCAxNzMsIDIyOSwgMTA2LCAxLCAyMjksIDE0NCwgMjI5LCAxMDYsIDEsIDIzOSwgOCwgMjI5LCAxMDYsIAorICAgIDEsIDIzOCwgMTU1LCAyMjksIDEwNiwgMSwgMjM4LCAxMTksIDIyOSwgMTA2LCAxLCAyMjIsIDIwMywgMjI5LCAxMDYsIDEsIAorICAgIDI0NywgOTIsIDIyOSwgMTA2LCAxLCAyNDYsIDE5OSwgMjI5LCAxMDYsIDEsIDIzMCwgMTgxLCAyMjksIDEwNiwgMSwgMjMwLCAKKyAgICAxMjksIDIyOSwgMTA2LCAxLCAyMzAsIDE0OSwgMjI5LCAxMDYsIDEsIDIyMSwgMTEsIDIyOSwgMTA2LCAxLCAyMDcsIDI0MSwgCisgICAgMjI5LCAxMDYsIDEsIDIwNywgMjI5LCAyMjksIDEwNiwgMSwgMjQ0LCAxMjAsIDIyOSwgMTA2LCAxLCAyNDQsIDExMCwgMjI5LCAKKyAgICAxMDYsIDEsIDIxNSwgMTg1LCAyMjksIDEwNiwgMSwgMjQ0LCAxMDQsIDIyOSwgMTA2LCAxLCAyMjEsIDIyNywgMjI5LCAxMDYsIAorICAgIDEsIDIxMCwgMjIsIDIyOSwgMTA2LCAxLCAyMDksIDEwOCwgMjI5LCAxMDYsIDEsIDI0NCwgMjEyLCAyMjksIDEwNiwgMSwgCisgICAgMjQ0LCAxLCAyMjksIDEwNiwgMSwgMjAxLCAyMDEsIDIyOSwgMTA2LCAxLCAxODUsIDIyOSwgMTA2LCAxLCAyMTgsIDIwOCwgCisgICAgMjI5LCAxMDYsIDEsIDI0OSwgMzIsIDIyOSwgMTA2LCAxLCAyNDgsIDE5OCwgMjI5LCAxMDYsIDEsIDI0OCwgOTgsIDIyOSwgCisgICAgMTA2LCAxLCAxOTIsIDIyOSwgMTA2LCAxLCAxOTgsIDIyOSwgMTA2LCAxLCAyMTYsIDIyMCwgMjI5LCAxMDYsIDEsIDIyOCwgCisgICAgMTEzLCAyMjksIDEwNiwgMSwgMjA2LCA4NiwgMjI5LCAxMDYsIDEsIDIxMywgOTAsIDIyOSwgMTA2LCAxLCAyMTUsIDM2LCAKKyAgICAyMjksIDEwNiwgMSwgMTUyLCAyMjksIDEwNiwgMiwgMjUwLCAxODAsIDIyOSwgMTA2LCAyMiwgMiwgMjUyLCAyNSwgMjI5LCAKKyAgICAxMDYsIDIyLCAyLCA3NSwgMjI5LCAxMDYsIDIyLCAyLCAyMzEsIDgzLCAyMjksIDEwNiwgMjIsIDIsIDY4LCAyMjksIDEwNiwgCisgICAgMjIsIDIsIDIwNiwgMTc4LCAyMjksIDEwNiwgMjIsIDIsIDc0LCAyMjksIDEwNiwgMjIsIDIsIDI1MSwgNjQsIDIyOSwgMTA2LCAKKyAgICAyMiwgMiwgNzgsIDIyOSwgMTA2LCAyMiwgMiwgMjUwLCAzNCwgMjI5LCAxMDYsIDIsIDIyMSwgNTEsIDIyOSwgMTA2LCAyLCAKKyAgICAyMDUsIDIwNCwgMjI5LCAxMDYsIDE3LCAyMDIsIDg0LCAyMjksIDEwNiwgMTcsIDEwNSwgMjI5LCAxMDYsIDE3LCAxMDgsIAorICAgIDIyOSwgMTA2LCAxNywgMTQ3LCAyMjksIDEwNiwgMTcsIDE0OSwgMjI5LCAxMDYsIDE3LCAxNzAsIDIyOSwgMTA2LCAxNywgCisgICAgMTk1LCAyMjksIDEwNiwgMTcsIDIxMywgMTExLCAyMjksIDEwNiwgMTcsIDE5OSwgMjI5LCAxMDYsIDE3LCAyMjIsIDYzLCAKKyAgICAyMzgsIDYsIDIsIDM5LCAyNTAsIDE4MSwgNTUsIDIzOCwgNiwgMiwgMjQ3LCA1MiwgMjM4LCA2LCAyLCAyNTAsIDE4MCwgCisgICAgMjM4LCA2LCAyLCAyMDUsIDE5OSwgMjM4LCA2LCAxLCA2MywgMjM4LCA2LCAxLCAyNTIsIDI1LCAyMzgsIDYsIDEsIDc1LCAKKyAgICAyMzgsIDYsIDEsIDIzMSwgODMsIDIzOCwgNiwgMSwgNjgsIDIzOCwgNiwgMSwgMjA2LCAxNzgsIDIzOCwgNiwgMSwgMTI1LCAKKyAgICAxNDYsIDIzOCwgNiwgMSwgMTI1LCAxNTksIDIzOCwgNiwgMSwgMjQxLCAxNjEsIDIzOCwgNiwgMSwgMjUxLCA2NCwgMjM4LCAKKyAgICA2LCAxLCAyMjAsIDE4LCAyMzgsIDYsIDEsIDI1MCwgMzQsIDIzOCwgNiwgMSwgMTczLCAyMzgsIDYsIDEsIDIyOSwgMTQ0LCAKKyAgICAyMzgsIDYsIDEsIDIzOSwgOCwgMjM4LCA2LCAxLCAyMzgsIDExOSwgMjM4LCA2LCAxLCAyMjIsIDIwMywgMjM4LCA2LCAxLCAKKyAgICAyNDcsIDkyLCAyMzgsIDYsIDEsIDI0NiwgMTk5LCAyMzgsIDYsIDEsIDIzMCwgMTgxLCAyMzgsIDYsIDEsIDIzMCwgMTQ5LCAKKyAgICAyMzgsIDYsIDEsIDIyMSwgMTEsIDIzOCwgNiwgMSwgMjA3LCAyNDEsIDIzOCwgNiwgMSwgMjA3LCAyMjksIDIzOCwgNiwgMSwgCisgICAgMjQ0LCAxMjAsIDIzOCwgNiwgMSwgMjQ0LCAxMDQsIDIzOCwgNiwgMSwgMjIxLCAyMjcsIDIzOCwgNiwgMSwgMjEwLCAyMiwgCisgICAgMjM4LCA2LCAxLCAyMDksIDEwOCwgMjM4LCA2LCAxLCAyNDQsIDIxMiwgMjM4LCA2LCAxLCAyNDQsIDEsIDIzOCwgNiwgMSwgCisgICAgMjAxLCAyMDEsIDIzOCwgNiwgMSwgMTg1LCAyMzgsIDYsIDEsIDIxOCwgMjA4LCAyMzgsIDYsIDEsIDI0OSwgMzIsIDIzOCwgCisgICAgNiwgMSwgMjQ4LCA5OCwgMjM4LCA2LCAxLCAxOTIsIDIzOCwgNiwgMSwgMTk4LCAyMzgsIDYsIDEsIDIxNiwgMjIwLCAyMzgsIAorICAgIDYsIDEsIDIyOCwgMTEzLCAyMzgsIDYsIDEsIDIyNywgNzcsIDIzOCwgNiwgMSwgMjA2LCA4NiwgMjM4LCA2LCAxLCAyMTMsIAorICAgIDkwLCAyMzgsIDYsIDEsIDIxMSwgMTY0LCAyMzgsIDYsIDEsIDIxNSwgMzYsIDIzOCwgNiwgMSwgMTUyLCAyMzgsIDYsIDIsIAorICAgIDIyMSwgNTEsIDIzOCwgNiwgMiwgMjUwLCAxNywgMjM4LCA2LCAyMiwgMiwgMjUyLCAyNSwgMjM4LCA2LCAyMiwgMiwgNzUsIAorICAgIDIzOCwgNiwgMjIsIDIsIDIzMSwgODMsIDIzOCwgNiwgMjIsIDIsIDY4LCAyMzgsIDYsIDIyLCAyLCAyMDYsIDE3OCwgMjM4LCAKKyAgICA2LCAyMiwgMiwgMTI1LCAxNDYsIDIzOCwgNiwgMjIsIDIsIDEyNSwgMjE1LCAxODYsIDIzOCwgNiwgMjIsIDIsIDI0MSwgCisgICAgMTYxLCAyMzgsIDYsIDIyLCAyLCAyNTEsIDY0LCAyMzgsIDYsIDIyLCAyLCAyMjAsIDE4LCAyMzgsIDYsIDIyLCAyLCAyNTAsIAorICAgIDM0LCAyMzgsIDYsIDIsIDIwNSwgMjA0LCAyMzgsIDYsIDIyMCwgMzksIDIzOCwgNiwgMjUwLCAzNSwgMjI3LCAxOTYsIDgyLCAKKyAgICAyMzgsIDYsIDIsIDIxOCwgNzQsIDIzOCwgNiwgMSwgMjA2LCA1MiwgMjUwLCAxODAsIDIzOCwgNiwgMSwgMjA2LCA1MiwgNTIsIAorICAgIDI1MCwgMTgwLCAyMzgsIDYsIDEsIDEyNSwgMjE1LCAxODYsIDIzOCwgNiwgMSwgMTI1LCAyMjcsIDc4LCAyMzgsIDYsIDIyLCAKKyAgICAyLCAxMjUsIDE1OSwgMjM4LCA2LCAyMiwgMiwgMTI1LCAyMjcsIDc4LCAzOSwgMjM4LCA2LCAxNywgMjAyLCA4NCwgMzksIAorICAgIDIzOCwgNiwgMTcsIDEwNSwgMzksIDIzOCwgNiwgMTcsIDEwOCwgMzksIDIzOCwgNiwgMTcsIDE0NywgMzksIDIzOCwgNiwgCisgICAgMTcsIDE0OSwgMzksIDIzOCwgNiwgMTcsIDE3MCwgMzksIDIzOCwgNiwgMTcsIDE5NSwgMzksIDIzOCwgNiwgMSwgNjMsIDM5LCAKKyAgICAyMzgsIDYsIDEsIDE3MywgMzksIDIzOCwgNiwgMSwgMjAxLCAyMDEsIDM5LCAyMzgsIDYsIDEsIDIwNSwgMjMwLCAzOSwgCisgICAgMjM4LCA2LCAxLCAxODUsIDIwOCwgMjA0LCAyNTAsIDIwOSwgMjA4LCAyMDQsIDEsIDYzLCAyMDgsIDIwNCwgMSwgMjUyLCAKKyAgICAyNSwgMjA4LCAyMDQsIDEsIDc1LCAyMDgsIDIwNCwgMSwgMjMxLCA4MywgMjA4LCAyMDQsIDEsIDY4LCAyMDgsIDIwNCwgMSwgCisgICAgMjA2LCAxNzgsIDIwOCwgMjA0LCAxLCAxMjUsIDE0NiwgMjA4LCAyMDQsIDEsIDEyNSwgMjE1LCAxODYsIDIwOCwgMjA0LCAxLCAKKyAgICAxMjUsIDE1OSwgMjA4LCAyMDQsIDEsIDEyNSwgMjI3LCA3OCwgMjA4LCAyMDQsIDEsIDc0LCAyMDgsIDIwNCwgMSwgMjUxLCAKKyAgICA2NCwgMjA4LCAyMDQsIDEsIDc4LCAyMDgsIDIwNCwgMSwgMjUwLCAzNCwgMjA4LCAyMDQsIDEsIDE3MywgMjA4LCAyMDQsIDEsIAorICAgIDIyOSwgMTQ0LCAyMDgsIDIwNCwgMSwgMjM5LCA4LCAyMDgsIDIwNCwgMSwgMjM4LCAxMTksIDIwOCwgMjA0LCAxLCAyMjIsIAorICAgIDIwMywgMjA4LCAyMDQsIDEsIDI0NywgOTIsIDIwOCwgMjA0LCAxLCAyNDYsIDE5OSwgMjA4LCAyMDQsIDEsIDIzMCwgMTgxLCAKKyAgICAyMDgsIDIwNCwgMSwgMjMwLCAxNDksIDIwOCwgMjA0LCAxLCAyMjEsIDExLCAyMDgsIDIwNCwgMSwgMjA3LCAyNDEsIDIwOCwgCisgICAgMjA0LCAxLCAyMDcsIDIyOSwgMjA4LCAyMDQsIDEsIDI0NCwgMTIwLCAyMDgsIDIwNCwgMSwgMjQ0LCAxMDQsIDIwOCwgMjA0LCAKKyAgICAxLCAyMjEsIDIyNywgMjA4LCAyMDQsIDEsIDIxMCwgMjIsIDIwOCwgMjA0LCAxLCAyMDksIDEwOCwgMjA4LCAyMDQsIDEsIAorICAgIDI0NCwgMjEyLCAyMDgsIDIwNCwgMSwgMjQ0LCAxLCAyMDgsIDIwNCwgMSwgMjAxLCAyMDEsIDIwOCwgMjA0LCAxLCAxODUsIAorICAgIDIwOCwgMjA0LCAxLCAyMTgsIDIwOCwgMjA4LCAyMDQsIDEsIDI0OSwgMzIsIDIwOCwgMjA0LCAxLCAyNDgsIDk4LCAyMDgsIAorICAgIDIwNCwgMSwgMTkyLCAyMDgsIDIwNCwgMSwgMTk4LCAyMDgsIDIwNCwgMSwgMjE2LCAyMjAsIDIwOCwgMjA0LCAxLCAyMjgsIAorICAgIDExMywgMjA4LCAyMDQsIDEsIDIwNiwgODYsIDIwOCwgMjA0LCAxLCAyMTMsIDkwLCAyMDgsIDIwNCwgMSwgMjExLCAxNjQsIAorICAgIDIwOCwgMjA0LCAxLCAyMTUsIDM2LCAyMDgsIDIwNCwgMSwgMTUyLCAyMDgsIDIwNCwgMjIsIDIsIDI1MiwgMjUsIDIwOCwgCisgICAgMjA0LCAyMiwgMiwgNzUsIDIwOCwgMjA0LCAyMiwgMiwgMjMxLCA4MywgMjA4LCAyMDQsIDIyLCAyLCA2OCwgMjA4LCAyMDQsIAorICAgIDIyLCAyLCAyMDYsIDE3OCwgMjA4LCAyMDQsIDIyLCAyLCAxMjUsIDE0NiwgMjA4LCAyMDQsIDIyLCAyLCAxMjUsIDIxNSwgCisgICAgMTg2LCAyMDgsIDIwNCwgMjIsIDIsIDEyNSwgMTU5LCAyMDgsIDIwNCwgMjIsIDIsIDEyNSwgMjI3LCA3OCwgMjA4LCAyMDQsIAorICAgIDIyLCAyLCA3NCwgMjA4LCAyMDQsIDIyLCAyLCAyMTIsIDIyOCwgNzQsIDIwOCwgMjA0LCAyMiwgMiwgMjUxLCA2NCwgMjA4LCAKKyAgICAyMDQsIDIyLCAyLCA3OCwgMjA4LCAyMDQsIDIyLCAyLCAyMTIsIDIyOCwgNzgsIDIwOCwgMjA0LCAyMiwgMiwgMjUwLCAzNCwgCisgICAgMjA4LCAyMDQsIDIsIDI0NywgNTIsIDIwOCwgMjA0LCAyLCAyNTAsIDE4MCwgMjA4LCAyMDQsIDIsIDIwNSwgMTk5LCAyMDgsIAorICAgIDIwNCwgMiwgMjA1LCAyMDQsIDIwOCwgMjA0LCAyLCAyMjEsIDUxLCAyMDgsIDIwNCwgMiwgMjUwLCAxNywgMjA4LCAyMDQsIAorICAgIDIzNywgMTkxLCAyMDgsIDIwNCwgMjUxLCAxNDYsIDU0LCAyMDgsIDIwNCwgMjIwLCAzOSwgMjA4LCAyMDQsIDE3LCAyMDIsIAorICAgIDg0LCAyMDgsIDIwNCwgMTcsIDEwNSwgMjA4LCAyMDQsIDE3LCAxMDgsIDIwOCwgMjA0LCAxNywgMTQ3LCAyMDgsIDIwNCwgCisgICAgMTcsIDE0OSwgMjA4LCAyMDQsIDE3LCAxNzAsIDIwOCwgMjA0LCAxNywgMTk1LCAyMDgsIDIwNCwgMTcsIDIxMywgMTExLCAKKyAgICAyMDgsIDIwNCwgMTcsIDE5OSwgMjA4LCAyMDQsIDE3LCAyMjIsIDYzLCAxODYsIDEsIDYzLCAxODYsIDEsIDI1MiwgMjUsIAorICAgIDE4NiwgMSwgNzUsIDE4NiwgMSwgMjMxLCA4MywgMTg2LCAxLCA2OCwgMTg2LCAxLCAyMDYsIDE3OCwgMTg2LCAxLCAxMjUsIAorICAgIDE0NiwgMTg2LCAxLCAxMjUsIDIxNSwgMTg2LCAxODYsIDEsIDEyNSwgMTU5LCAxODYsIDEsIDEyNSwgMjI3LCA3OCwgMTg2LCAKKyAgICAxLCA3NCwgMTg2LCAxLCAyNTEsIDY0LCAxODYsIDEsIDc4LCAxODYsIDEsIDI1MCwgMzQsIDE4NiwgMSwgMTczLCAxODYsIDEsIAorICAgIDIyOSwgMTQ0LCAxODYsIDEsIDIzOSwgOCwgMTg2LCAxLCAyMzgsIDExOSwgMTg2LCAxLCAyMjIsIDIwMywgMTg2LCAxLCAKKyAgICAyNDcsIDkyLCAxODYsIDEsIDI0NiwgMTk5LCAxODYsIDEsIDIzMCwgMTgxLCAxODYsIDEsIDIzMCwgMTQ5LCAxODYsIDEsIAorICAgIDIyMSwgMTEsIDE4NiwgMSwgMjA3LCAyNDEsIDE4NiwgMSwgMjA3LCAyMjksIDE4NiwgMSwgMjQ0LCAxMjAsIDE4NiwgMSwgCisgICAgMjQ0LCAxMDQsIDE4NiwgMSwgMjIxLCAyMjcsIDE4NiwgMSwgMjEwLCAyMiwgMTg2LCAxLCAyMDksIDEwOCwgMTg2LCAxLCAKKyAgICAyNDQsIDIxMiwgMTg2LCAxLCAyNDQsIDEsIDE4NiwgMSwgMjAxLCAyMDEsIDE4NiwgMSwgMTg1LCAxODYsIDEsIDIxOCwgCisgICAgMjA4LCAxODYsIDEsIDI0OSwgMzIsIDE4NiwgMSwgMjQ4LCA5OCwgMTg2LCAxLCAxOTIsIDE4NiwgMSwgMTk4LCAxODYsIDEsIAorICAgIDIxNiwgMjIwLCAxODYsIDEsIDIyOCwgMTEzLCAxODYsIDEsIDIwNiwgODYsIDE4NiwgMSwgMjEzLCA5MCwgMTg2LCAxLCAKKyAgICAyMTEsIDE2NCwgMTg2LCAxLCAyMTUsIDM2LCAxODYsIDEsIDE1MiwgMTg2LCAyMiwgMiwgMjUyLCAyNSwgMTg2LCAyMiwgMiwgCisgICAgNzUsIDE4NiwgMjIsIDIsIDIzMSwgODMsIDE4NiwgMjIsIDIsIDY4LCAxODYsIDIyLCAyLCAyMDYsIDE3OCwgMTg2LCAyMiwgCisgICAgMiwgMTI1LCAxNDYsIDE4NiwgMjIsIDIsIDEyNSwgMjE1LCAxODYsIDE4NiwgMjIsIDIsIDc0LCAxODYsIDIyLCAyLCAyNTEsIAorICAgIDY0LCAxODYsIDIyLCAyLCA3OCwgMTg2LCAyMiwgMiwgMjUwLCAzNCwgMTg2LCAyLCAyNDcsIDUyLCAxODYsIDIsIDI1MCwgCisgICAgMTgwLCAxODYsIDIsIDIwNSwgMTk5LCAxODYsIDIsIDIwNSwgMjA0LCAxODYsIDIsIDIyMSwgNTEsIDE4NiwgMiwgMjEyLCAKKyAgICAxNTcsIDE4NiwgMjQ0LCAxNjYsIDE4NiwgNTIsIDI0NCwgMTY2LCAxODYsIDIxMywgMTMxLCAyNDMsIDg1LCAxODYsIDIxMywgCisgICAgMTMxLCAxNDIsIDE4NiwgMjE2LCA5OCwgMjI1LCA5MiwgMTg2LCAyMTYsIDk4LCAyMjUsIDkxLCAxODYsIDIxNiwgOTgsIAorICAgIDIyNSwgOTAsIDE4NiwgMjQxLCA4NCwgNzYsIDIwOSwgMTEzLCA4MiwgMTg2LCAyMTQsIDE2OCwgMTMxLCAzLCAyMDgsIDgwLCAKKyAgICAyNSwgMjA3LCA5MiwgMjE5LCAyMzIsIDE4NiwgMjE0LCAxNjgsIDEzMSwgMywgMjA4LCA4MCwgMjUsIDI0MiwgODMsIDI0NSwgCisgICAgMTM3LCAxODYsIDIxNCwgMTY4LCAxMzEsIDMsIDIxNiwgMTYzLCAyNSwgMjQyLCA4MywgMjQ1LCAxMzcsIDE4NiwgMjE0LCAKKyAgICAxNjgsIDEzMSwgMywgMjE2LCAxNjMsIDI1LCAyNDIsIDgzLCA1MiwgMjQ1LCAxMzcsIDE4NiwgMjE0LCAxNjgsIDEzMSwgMywgCisgICAgMjE2LCAxNjMsIDI1LCAyNDIsIDgzLCAyMDgsIDcwLCAyNDUsIDEzNywgMTg2LCAyMTQsIDE2OCwgMTMxLCA1MiwgMjE1LCAKKyAgICAyNTIsIDE4NiwgMjE0LCAxNjgsIDEzMSwgNTIsIDIxNSwgMjUzLCAzLCAyMTYsIDE2MiwgMTg2LCAyMTQsIDE2OCwgMTMxLCAKKyAgICAzLCA1MiwgMjQ1LCAxMzcsIDE4NiwgMjE0LCAxNjgsIDEzMSwgMywgMjA4LCA3MCwgMjQ1LCAxMzcsIDE4NiwgMjE0LCAxNjgsIAorICAgIDEzMSwgMywgMjE3LCA1OCwgMjQ1LCAxMzcsIDE4NiwgMjE0LCAxNjgsIDEzMSwgMywgMjEzLCAxMjgsIDI0NSwgMTM3LCAKKyAgICAxODYsIDIxNCwgMTY4LCAxMzEsIDMsIDI0NiwgNTksIDI1LCAyMTYsIDE2MiwgMTg2LCAyMTQsIDE2OCwgMTMxLCAzLCAyNDYsIAorICAgIDU5LCAyNSwgMTIwLCAyNDEsIDg2LCAxODYsIDIxNCwgMTY4LCAxMzEsIDMsIDI0NiwgNTksIDI1LCAyMzksIDE0NywgMjQxLCAKKyAgICA4NiwgMTg2LCAxLCAyMDksIDMyLCAyNTAsIDI1NSwgNzUsIDE4NiwgMSwgMjA3LCAxMzYsIDI1MCwgMjU1LCA3NSwgMTg2LCAKKyAgICAxLCAyMDcsIDEzNiwgMjUwLCAyNTUsIDIzMSwgODMsIDE4NiwgMSwgMjUwLCAyNTUsIDY4LCAxODYsIDIyLCAyLCAyNTAsIAorICAgIDI1NSwgNjgsIDE4NiwgMjIsIDIsIDI1MCwgMjU1LCAyMDYsIDE3OCwgMjI0LCA3NCwgMSwgNjMsIDIyNCwgNzQsIDEsIDI1MiwgCisgICAgMjUsIDIyNCwgNzQsIDEsIDc1LCAyMjQsIDc0LCAxLCAyMzEsIDgzLCAyMjQsIDc0LCAxLCA2OCwgMjI0LCA3NCwgMSwgMjA2LCAKKyAgICAxNzgsIDIyNCwgNzQsIDEsIDEyNSwgMTQ2LCAyMjQsIDc0LCAxLCAxMjUsIDIxNSwgMTg2LCAyMjQsIDc0LCAxLCAxMjUsIAorICAgIDE1OSwgMjI0LCA3NCwgMSwgMTI1LCAyMjcsIDc4LCAyMjQsIDc0LCAxLCA3NCwgMjI0LCA3NCwgMSwgMjUxLCA2NCwgMjI0LCAKKyAgICA3NCwgMSwgNzgsIDIyNCwgNzQsIDEsIDI1MCwgMzQsIDIyNCwgNzQsIDEsIDE3MywgMjI0LCA3NCwgMSwgMjI5LCAxNDQsIAorICAgIDIyNCwgNzQsIDEsIDIzOSwgOCwgMjI0LCA3NCwgMSwgMjM4LCAxMTksIDIyNCwgNzQsIDEsIDIyMiwgMjAzLCAyMjQsIDc0LCAKKyAgICAxLCAyNDcsIDkyLCAyMjQsIDc0LCAxLCAyNDYsIDE5OSwgMjI0LCA3NCwgMSwgMjMwLCAxODEsIDIyNCwgNzQsIDEsIDIzMCwgCisgICAgMTQ5LCAyMjQsIDc0LCAxLCAyMjEsIDExLCAyMjQsIDc0LCAxLCAyMDcsIDI0MSwgMjI0LCA3NCwgMSwgMjA3LCAyMjksIAorICAgIDIyNCwgNzQsIDEsIDI0NCwgMTIwLCAyMjQsIDc0LCAxLCAyNDQsIDEwNCwgMjI0LCA3NCwgMSwgMjIxLCAyMjcsIDIyNCwgCisgICAgNzQsIDEsIDIxMCwgMjIsIDIyNCwgNzQsIDEsIDIwOSwgMTA4LCAyMjQsIDc0LCAxLCAyNDQsIDIxMiwgMjI0LCA3NCwgMSwgCisgICAgMjQ0LCAxLCAyMjQsIDc0LCAxLCAyMDEsIDIwMSwgMjI0LCA3NCwgMSwgMTg1LCAyMjQsIDc0LCAxLCAyMTgsIDIwOCwgMjI0LCAKKyAgICA3NCwgMSwgMjQ5LCAzMiwgMjI0LCA3NCwgMSwgMjQ4LCA5OCwgMjI0LCA3NCwgMSwgMTkyLCAyMjQsIDc0LCAxLCAxOTgsIAorICAgIDIyNCwgNzQsIDEsIDIxNiwgMjIwLCAyMjQsIDc0LCAxLCAyMjgsIDExMywgMjI0LCA3NCwgMSwgMjA2LCA4NiwgMjI0LCA3NCwgCisgICAgMSwgMjEzLCA5MCwgMjI0LCA3NCwgMSwgMjExLCAxNjQsIDIyNCwgNzQsIDEsIDIxNSwgMzYsIDIyNCwgNzQsIDEsIDE1MiwgCisgICAgMjI0LCA3NCwgMSwgMjI3LCA3NywgMjI0LCA3NCwgMjIsIDIsIDI1MiwgMjUsIDIyNCwgNzQsIDIyLCAyLCA3NSwgMjI0LCAKKyAgICA3NCwgMjIsIDIsIDIzMSwgODMsIDIyNCwgNzQsIDIyLCAyLCA2OCwgMjI0LCA3NCwgMjIsIDIsIDIwNiwgMTc4LCAyMjQsIAorICAgIDc0LCAyMiwgMiwgMTI1LCAxNDYsIDIyNCwgNzQsIDIyLCAyLCAxMjUsIDIxNSwgMTg2LCAyMjQsIDc0LCAyMiwgMiwgMTI1LCAKKyAgICAxNTksIDIyNCwgNzQsIDIyLCAyLCAxMjUsIDIyNywgNzgsIDIyNCwgNzQsIDIyLCAyLCA3NCwgMjI0LCA3NCwgMjIsIDIsIAorICAgIDI1MSwgNjQsIDIyNCwgNzQsIDIyLCAyLCA3OCwgMjI0LCA3NCwgMjIsIDIsIDI1MCwgMzQsIDIyNCwgNzQsIDIsIDI1MCwgCisgICAgMTgwLCAyMjQsIDc0LCAyLCAyMDUsIDE5OSwgMjI0LCA3NCwgMiwgMjA1LCAyMDQsIDIyNCwgNzQsIDIsIDI1MCwgMTIzLCAKKyAgICAyMjQsIDc0LCAyNDQsIDE2NiwgMjI0LCA3NCwgNTIsIDI0NCwgMTY2LCAyMjQsIDc0LCAyNTEsIDE0NiwgNTQsIDIyNCwgNzQsIAorICAgIDIsIDIzNiwgMCwgMjI0LCA3NCwgMTcsIDIwMiwgODQsIDIyNCwgNzQsIDE3LCAxMDUsIDIyNCwgNzQsIDE3LCAxMDgsIDIyNCwgCisgICAgNzQsIDE3LCAxNDcsIDIyNCwgNzQsIDE3LCAxNDksIDIyNCwgNzQsIDE3LCAxNzAsIDIyNCwgNzQsIDE3LCAxOTUsIDIyNCwgCisgICAgNzQsIDE3LCAyMTMsIDExMSwgMjI0LCA3NCwgMTcsIDE5OSwgMjI0LCA3NCwgMTcsIDIyMiwgNjMsIDIwOSwgMjM5LCAxLCAKKyAgICA2MywgMjA5LCAyMzksIDEsIDI1MiwgMjUsIDIwOSwgMjM5LCAxLCA3NSwgMjA5LCAyMzksIDEsIDIzMSwgODMsIDIwOSwgCisgICAgMjM5LCAxLCA2OCwgMjA5LCAyMzksIDEsIDIwNiwgMTc4LCAyMDksIDIzOSwgMSwgNzQsIDIwOSwgMjM5LCAxLCAyNTEsIDY0LCAKKyAgICAyMDksIDIzOSwgMSwgNzgsIDIwOSwgMjM5LCAxLCAyNTAsIDM0LCAyMDksIDIzOSwgMSwgMTczLCAyMDksIDIzOSwgMSwgCisgICAgMjI5LCAxNDQsIDIwOSwgMjM5LCAxLCAyMzksIDgsIDIwOSwgMjM5LCAxLCAyMzgsIDExOSwgMjA5LCAyMzksIDEsIDIyMiwgCisgICAgMjAzLCAyMDksIDIzOSwgMSwgMjQ3LCA5MiwgMjA5LCAyMzksIDEsIDI0NiwgMTk5LCAyMDksIDIzOSwgMSwgMjMwLCAxODEsIAorICAgIDIwOSwgMjM5LCAxLCAyMzAsIDE0OSwgMjA5LCAyMzksIDEsIDIyMSwgMTEsIDIwOSwgMjM5LCAxLCAyMDcsIDI0MSwgMjA5LCAKKyAgICAyMzksIDEsIDIwNywgMjI5LCAyMDksIDIzOSwgMSwgMjQ0LCAxMjAsIDIwOSwgMjM5LCAxLCAyNDQsIDEwNCwgMjA5LCAyMzksIAorICAgIDEsIDIyMSwgMjI3LCAyMDksIDIzOSwgMSwgMjEwLCAyMiwgMjA5LCAyMzksIDEsIDIwOSwgMTA4LCAyMDksIDIzOSwgMSwgCisgICAgMjQ0LCAyMTIsIDIwOSwgMjM5LCAxLCAyNDQsIDEsIDIwOSwgMjM5LCAxLCAyMDEsIDIwMSwgMjA5LCAyMzksIDEsIDE4NSwgCisgICAgMjA5LCAyMzksIDEsIDIxOCwgMjA4LCAyMDksIDIzOSwgMSwgMjQ5LCAzMiwgMjA5LCAyMzksIDEsIDI0OCwgOTgsIDIwOSwgCisgICAgMjM5LCAxLCAxOTIsIDIwOSwgMjM5LCAxLCAxOTgsIDIwOSwgMjM5LCAxLCAyMTYsIDIyMCwgMjA5LCAyMzksIDEsIDIyOCwgCisgICAgMTEzLCAyMDksIDIzOSwgMSwgMjA2LCA4NiwgMjA5LCAyMzksIDEsIDIxMywgOTAsIDIwOSwgMjM5LCAxLCAyMTUsIDM2LCAKKyAgICAyMDksIDIzOSwgMSwgMTUyLCAyMDksIDIzOSwgMSwgMjE1LCAxODUsIDIwOSwgMjM5LCAyLCAyNTAsIDE4MCwgMjA5LCAyMzksIAorICAgIDIsIDIwNSwgMTk5LCAyMDksIDIzOSwgMjIsIDIsIDI1MiwgMjUsIDIwOSwgMjM5LCAyMiwgMiwgNzUsIDIwOSwgMjM5LCAyMiwgCisgICAgMiwgMjMxLCA4MywgMjA5LCAyMzksIDIyLCAyLCA2OCwgMjA5LCAyMzksIDIyLCAyLCAyMDYsIDE3OCwgMjA5LCAyMzksIDIyLCAKKyAgICAyLCA3NCwgMjA5LCAyMzksIDIyLCAyLCAyNTEsIDY0LCAyMDksIDIzOSwgMjIsIDIsIDc4LCAyMDksIDIzOSwgMjIsIDIsIAorICAgIDI1MCwgMzQsIDIwOSwgMjM5LCAyLCAyMDUsIDIwNCwgMjA5LCAyMzksIDIsIDIyMSwgNTEsIDIwOSwgMjM5LCAxNywgMjAyLCAKKyAgICA4NCwgMjA5LCAyMzksIDE3LCAxMDUsIDIwOSwgMjM5LCAxNywgMTA4LCAyMDksIDIzOSwgMTcsIDE0NywgMjA5LCAyMzksIAorICAgIDE3LCAxNDksIDIwOSwgMjM5LCAxNywgMTcwLCAyMDksIDIzOSwgMTcsIDE5NSwgMjA5LCAyMzksIDE3LCAyMTMsIDExMSwgCisgICAgMjA5LCAyMzksIDE3LCAxOTksIDIwOSwgMjM5LCAxNywgMjIyLCA2MywgMjUxLCA2OCwgMSwgMTczLCAyNTEsIDY4LCAxLCAKKyAgICAyMjksIDE0NCwgMjUxLCA2OCwgMSwgMjIyLCAyMDMsIDI1MSwgNjgsIDEsIDIwMSwgMjAxLCAyNTEsIDY4LCAxLCAyMTAsIAorICAgIDIyLCAyNTEsIDY4LCAxLCAyNTAsIDI1NSwgMjEwLCAyMiwgMjUxLCA2OCwgMSwgMTg1LCAyNTEsIDY4LCAxLCAyMTgsIDIwOCwgCisgICAgMjUxLCA2OCwgMSwgMjQ5LCAzMiwgMjUxLCA2OCwgMSwgMTkyLCAyNTEsIDY4LCAxLCAyMzAsIDE4MSwgMjUxLCA2OCwgMSwgCisgICAgMjQ2LCAxOTksIDI1MSwgNjgsIDEsIDIwOSwgMTA4LCAyNTEsIDY4LCAxLCAyMTYsIDIyMCwgMjUxLCA2OCwgMSwgMjI4LCAKKyAgICAxMTMsIDI1MSwgNjgsIDEsIDIxNSwgMzYsIDI1MSwgNjgsIDEsIDIyMSwgMTEsIDI1MSwgNjgsIDEsIDE1MiwgMjUxLCA2OCwgCisgICAgMSwgNjMsIDI1MSwgNjgsIDEsIDI0NCwgMjEyLCAyNTEsIDY4LCAxLCAyNDQsIDEsIDI1MSwgNjgsIDEsIDIzOSwgOCwgMjUxLCAKKyAgICA2OCwgMSwgMjUwLCAyNTUsIDIzOSwgOCwgMjUxLCA2OCwgMSwgMjM4LCAxMTksIDI1MSwgNjgsIDEsIDI0OCwgOTgsIDI1MSwgCisgICAgNjgsIDEsIDIzMCwgMTQ5LCAyNTEsIDY4LCAxMDksIDIsIDE3NCwgMjI4LCAxMTMsIDI1MSwgNjgsIDEwOSwgMiwgMTc0LCAKKyAgICAyMTYsIDIyMCwgMjUxLCA2OCwgMTA5LCAyLCAxNzQsIDIyNywgMTM1LCAyMTYsIDIyMCwgMjUxLCA2OCwgMjIsIDIsIDYzLCAKKyAgICAyNTEsIDY4LCAyMiwgMiwgMjUyLCAyNSwgMjUxLCA2OCwgMjIsIDIsIDc1LCAyNTEsIDY4LCAyMiwgMiwgMjMxLCA4MywgCisgICAgMjUxLCA2OCwgMjIsIDIsIDY4LCAyNTEsIDY4LCAyMiwgMiwgMjA2LCAxNzgsIDI1MSwgNjgsIDIyLCAyLCA3NCwgMjUxLCAKKyAgICA2OCwgMjIsIDIsIDI1MCwgMTMsIDI1MSwgNjgsIDIyLCAyLCA3OCwgMjUxLCA2OCwgMjIsIDIsIDI1MSwgNjQsIDI1MSwgNjgsIAorICAgIDIyLCAyLCAyNTAsIDI0NywgMjUxLCA2OCwgMiwgMjI5LCA4NiwgMjUxLCA2OCwgMTcsIDIwMiwgODQsIDI1MSwgNjgsIDE3LCAKKyAgICAxMDUsIDI1MSwgNjgsIDE3LCAxMDgsIDI1MSwgNjgsIDE3LCAxNDcsIDI1MSwgNjgsIDE3LCAxNDksIDI1MSwgNjgsIDE3LCAKKyAgICAxNzAsIDI1MSwgNjgsIDE3LCAxOTUsIDI1MSwgNjgsIDE3LCAyMTMsIDExMSwgMjUxLCA2OCwgMTcsIDE5OSwgMjUxLCA2OCwgCisgICAgMTcsIDIyMiwgNjMsIDI1MSwgNjgsIDQyLCAyMDksIDE1MiwgMjUxLCA2OCwgNDIsIDIwNywgMTUxLCAyNTEsIDY4LCAyLCA1LCAKKyAgICAyMTQsIDE2NywgMjUxLCA2OCwgMiwgMjE0LCAxNjcsIDI1MSwgNjgsIDIsIDIxNSwgMTM2LCAyNTEsIDY4LCAxNiwgMjA1LCAKKyAgICAyMzAsIDIwNCwgOTIsIDI0NiwgNDgsIDYsIDEsIDIyMiwgMjAyLCAyMDQsIDkyLCAyNDYsIDQ4LCA2LCAxLCA2MywgMjA0LCAKKyAgICA5MiwgMjQ2LCA0OCwgNiwgMSwgMjA0LCAzMCwgMjA0LCA5MiwgMjQ2LCA0OCwgNiwgMSwgMjAyLCAyMTMsIDIwNCwgOTIsIAorICAgIDI0NiwgNDgsIDYsIDEsIDE5OCwgMjA0LCA5MiwgMjQ2LCA0OCwgNiwgMSwgMjAyLCAyNDcsIDIwNCwgOTIsIDI0NiwgNDgsIAorICAgIDYsIDEsIDIzMSwgODMsIDIwNCwgOTIsIDI0NiwgNDgsIDYsIDEsIDIwNiwgMTc4LCAyMDQsIDkyLCAyNDYsIDQ4LCA2LCAxLCAKKyAgICA3NCwgMjA0LCA5MiwgMjQ2LCA0OCwgNiwgMSwgNzgsIDIwNCwgOTIsIDI0NiwgNDgsIDYsIDEsIDI1MCwgMjIzLCAyMDQsIAorICAgIDkyLCAyNDYsIDQ4LCA2LCAxLCAyMzksIDgsIDIwNCwgOTIsIDI0NiwgNDgsIDYsIDEsIDIyOSwgMjYsIDIwNCwgOTIsIDI0NiwgCisgICAgNDgsIDYsIDEsIDI0MSwgNTYsIDIwNCwgOTIsIDI0NiwgNDgsIDYsIDEsIDIwMiwgMTk3LCAyMDQsIDkyLCAyNDYsIDQ4LCA2LCAKKyAgICAxLCAyMDcsIDMxLCAyMDQsIDkyLCAyNDYsIDQ4LCA2LCAxLCAyNDEsIDc1LCAyMDQsIDkyLCAyNDYsIDQ4LCA2LCAxLCAyMjAsIAorICAgIDc2LCAyMDQsIDkyLCAyNDYsIDQ4LCA2LCAxLCAyMDcsIDIzNiwgMjA0LCA5MiwgMjQ2LCA0OCwgNiwgMSwgMjIxLCAzNywgCisgICAgMjA0LCA5MiwgMjQ2LCA0OCwgNiwgMSwgMjQ0LCAyMTIsIDIwNCwgOTIsIDI0NiwgNDgsIDYsIDEsIDI1MCwgNDksIDIwNCwgCisgICAgOTIsIDI0NiwgNDgsIDYsIDEsIDI1MCwgMjQ3LCAyMDQsIDkyLCAyNDYsIDQ4LCA2LCAxLCAyNDcsIDE5MywgMjA0LCA5MiwgCisgICAgMjQ2LCA0OCwgNiwgMSwgMjE3LCAxOTEsIDIwNCwgOTIsIDI0NiwgNDgsIDYsIDEsIDIzNiwgMjI4LCAyMDQsIDkyLCAyNDYsIAorICAgIDQ4LCA2LCAxLCAyMzYsIDEyNCwgMjA0LCA5MiwgMjQ2LCA0OCwgNiwgMSwgMjM2LCA1MSwgMjA0LCA5MiwgMjQ2LCA0OCwgNiwgCisgICAgMSwgMjM3LCA5MiwgMjA0LCA5MiwgMjQ2LCA0OCwgNiwgMSwgMjExLCAxMTYsIDIwNCwgOTIsIDI0NiwgNDgsIDYsIDEsIAorICAgIDIxMiwgMTQyLCAyMDQsIDkyLCAyNDYsIDQ4LCA2LCAxLCAyMDUsIDE5MCwgMjA0LCA5MiwgMjQ2LCA0OCwgNSwgMSwgMjIyLCAKKyAgICAyMDIsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIDEsIDYzLCAyMDQsIDkyLCAyNDYsIDQ4LCA1LCAxLCAyMDQsIDMwLCAyMDQsIAorICAgIDkyLCAyNDYsIDQ4LCA1LCAxLCAyMDIsIDIxMywgMjA0LCA5MiwgMjQ2LCA0OCwgNSwgMSwgMTk4LCAyMDQsIDkyLCAyNDYsIAorICAgIDQ4LCA1LCAxLCAyMDIsIDI0NywgMjA0LCA5MiwgMjQ2LCA0OCwgNSwgMSwgMjMxLCA4MywgMjA0LCA5MiwgMjQ2LCA0OCwgNSwgCisgICAgMSwgMjA2LCAxNzgsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIDEsIDc0LCAyMDQsIDkyLCAyNDYsIDQ4LCA1LCAxLCA3OCwgMjA0LCAKKyAgICA5MiwgMjQ2LCA0OCwgNSwgMSwgMjUwLCAyMjMsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIDEsIDIzOSwgOCwgMjA0LCA5MiwgCisgICAgMjQ2LCA0OCwgNSwgMSwgMjI5LCAyNiwgMjA0LCA5MiwgMjQ2LCA0OCwgNSwgMSwgMjQxLCA1NiwgMjA0LCA5MiwgMjQ2LCAKKyAgICA0OCwgNSwgMSwgMjAyLCAxOTcsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIDEsIDIwNywgMzEsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIAorICAgIDEsIDI0MSwgNzUsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIDEsIDIyMCwgNzYsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIDEsIDIwNywgCisgICAgMjM2LCAyMDQsIDkyLCAyNDYsIDQ4LCA1LCAxLCAyMjEsIDM3LCAyMDQsIDkyLCAyNDYsIDQ4LCA1LCAxLCAyNDQsIDIxMiwgCisgICAgMjA0LCA5MiwgMjQ2LCA0OCwgNSwgMSwgMjUwLCA0OSwgMjA0LCA5MiwgMjQ2LCA0OCwgNSwgMSwgMjUwLCAyNDcsIDIwNCwgCisgICAgOTIsIDI0NiwgNDgsIDUsIDEsIDI0NywgMTkzLCAyMDQsIDkyLCAyNDYsIDQ4LCA1LCAxLCAyMTcsIDE5MSwgMjA0LCA5MiwgCisgICAgMjQ2LCA0OCwgNSwgMSwgMjM2LCAyMjgsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIDEsIDIzNiwgMTI0LCAyMDQsIDkyLCAyNDYsIAorICAgIDQ4LCA1LCAxLCAyMzYsIDUxLCAyMDQsIDkyLCAyNDYsIDQ4LCA1LCAxLCAyMzcsIDkyLCAyMDQsIDkyLCAyNDYsIDQ4LCA1LCAKKyAgICAxLCAyMTEsIDExNiwgMjA0LCA5MiwgMjQ2LCA0OCwgNSwgMSwgMjEyLCAxNDIsIDIwNCwgOTIsIDI0NiwgNDgsIDUsIDEsIAorICAgIDIwNSwgMTkwLCAyMDQsIDkyLCAyNDYsIDQ4LCAxNywgMjAyLCA4NCwgMjA0LCA5MiwgMjQ2LCA0OCwgMTcsIDEwNSwgMjA0LCAKKyAgICA5MiwgMjQ2LCA0OCwgMTcsIDEwOCwgMjA0LCA5MiwgMjQ2LCA0OCwgMTcsIDE0NywgMjA0LCA5MiwgMjQ2LCA0OCwgMTcsIAorICAgIDE0OSwgMjA0LCA5MiwgMjQ2LCA0OCwgMTcsIDE3MCwgMjA0LCA5MiwgMjQ2LCA0OCwgMTcsIDE5NSwgMjA0LCA5MiwgMjQ2LCAKKyAgICA0OCwgMTcsIDIxMywgMTExLCAyMDQsIDkyLCAyNDYsIDQ4LCAxNywgMTk5LCAyMDQsIDkyLCAyNDYsIDQ4LCAxNywgMjIyLCAKKyAgICA2MywgMjA0LCA5MiwgMjQ2LCA0OCwgNDIsIDIwOSwgMTUyLCAyMDQsIDkyLCAyNDYsIDQ4LCA0MiwgMjA3LCAxNTEsIDIwNCwgCisgICAgOTIsIDI0NiwgNDgsIDQyLCAyMDksIDUzLCAyMDQsIDkyLCAyNDYsIDQ4LCA0MiwgMjM5LCAxNTMsIDIwNCwgOTIsIDI0NiwgCisgICAgNDgsIDQyLCAyNDAsIDE4LCAyMDQsIDkyLCAyNDYsIDQ4LCA0MiwgMjEyLCA3NCwgMjA0LCA5MiwgMjQ2LCA0OCwgNDIsIAorICAgIDIxMywgMTA1LCAyMDQsIDkyLCAyNDYsIDQ4LCA0MiwgMjQxLCAxMzQsIDIwNCwgOTIsIDI0NiwgNDgsIDQyLCAyMjIsIDU4LCAKKyAgICAyMDQsIDkyLCAyNDYsIDQ4LCAyMjAsIDM5LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCAxODUsIDIxOSwgNDksIAorICAgIDI0NiwgNjYsIDIzNywgNzcsIDEsIDE3MywgMjE5LCA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMSwgMjI4LCAxMTMsIDIxOSwgCisgICAgNDksIDI0NiwgNjYsIDIzNywgNzcsIDEsIDE5MiwgMjE5LCA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMSwgMjQ0LCAyMTIsIAorICAgIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDEsIDIwMiwgMTE2LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCAKKyAgICAyMDYsIDg2LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCAyMjIsIDIwMywgMjE5LCA0OSwgMjQ2LCA2NiwgMjM3LCAKKyAgICA3NywgMSwgMTUyLCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCAyMzksIDgsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgCisgICAgNzcsIDEsIDIyOSwgMTQ0LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCAyMTUsIDM2LCAyMTksIDQ5LCAyNDYsIDY2LCAKKyAgICAyMzcsIDc3LCAxLCAyNDksIDMyLCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCAyNDcsIDkyLCAyMTksIDQ5LCAyNDYsIAorICAgIDY2LCAyMzcsIDc3LCAxLCAyMTAsIDIyLCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCAyMDksIDEwOCwgMjE5LCA0OSwgCisgICAgMjQ2LCA2NiwgMjM3LCA3NywgMSwgMjAxLCAyMDEsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDEsIDIxOCwgMjA4LCAKKyAgICAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCAyMTYsIDIyMCwgMjE5LCA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMSwgCisgICAgMjQwLCAxMDgsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDEsIDI0NiwgMTk5LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIAorICAgIDc3LCAxLCA2MywgMjE5LCA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMSwgNzQsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIAorICAgIDEsIDc1LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCA3OCwgMjE5LCA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMSwgCisgICAgNjgsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDEsIDIwNywgMzksIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDEsIAorICAgIDIzNSwgMTcxLCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCA0NiwgMjE5LCAxODQsIDIxOSwgNDksIDI0NiwgNjYsIAorICAgIDIzNywgNzcsIDEsIDQ2LCAyMzAsIDU0LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCA0NiwgMjEwLCA2OSwgMjE5LCAKKyAgICA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMSwgNDYsIDIyNiwgMTg1LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAxLCA0NiwgCisgICAgMjIzLCAxNjMsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDEsIDQ2LCAxNTksIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgCisgICAgNzcsIDEsIDQ2LCAyMDQsIDE0NCwgMjE5LCA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMSwgNDYsIDIyMiwgMjA1LCAyMTksIDQ5LCAKKyAgICAyNDYsIDY2LCAyMzcsIDc3LCAxLCA0NiwgMjAzLCAxMjQsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDIxNSwgMjQ1LCAKKyAgICAxNDMsIDIyNywgMjgsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDIxNSwgMjQ1LCAyMDgsIDE2MSwgMjE5LCA0OSwgCisgICAgMjQ2LCA2NiwgMjM3LCA3NywgMjE0LCAyMzksIDIzOCwgNDUsIDIxMSwgNjEsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIAorICAgIDIxNSwgMjQ1LCAxNDMsIDE2MywgMjQwLCA1LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAyMTUsIDI0NSwgMTQzLCAKKyAgICAyNDAsIDUsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDIxNCwgMjM5LCAyMzgsIDQ1LCAyMTEsIDYyLCAyNDAsIDUsIAorICAgIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDIxNCwgMjM5LCAxNDMsIDIyNywgMjgsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgCisgICAgNzcsIDIxNCwgMjM5LCAyMDgsIDE2MSwgMjE5LCA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMjE0LCAyMzksIDE0MywgMTYzLCAKKyAgICAyNDAsIDUsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDIxNCwgMjM5LCAxNDMsIDI0MCwgNSwgMjE5LCA0OSwgMjQ2LCAKKyAgICA2NiwgMjM3LCA3NywgMjI0LCAxNDksIDIwOCwgMTYxLCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAyMzgsIDQ1LCAyMTEsIAorICAgIDYyLCAyMDYsIDY4LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAyMjQsIDE0OSwgMTQzLCAxNjMsIDI0MCwgNSwgMjE5LCAKKyAgICA0OSwgMjQ2LCA2NiwgMjM3LCA3NywgMjI0LCAxNDksIDE0MywgMjQwLCA1LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAKKyAgICAyMjYsIDI1NCwgMTQzLCAyMjcsIDI4LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAyMjYsIDI1NCwgMjA4LCAxNjEsIAorICAgIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDIzOCwgNDUsIDIxMSwgNjEsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIAorICAgIDIyNiwgMjU0LCAxNDMsIDE2MywgMjQwLCA1LCAyMTksIDQ5LCAyNDYsIDY2LCAyMzcsIDc3LCAyMjYsIDI1NCwgMTQzLCAKKyAgICAyNDAsIDUsIDIxOSwgNDksIDI0NiwgNjYsIDIzNywgNzcsIDIzOCwgNDUsIDIxMSwgNjIsIDI0MCwgNSwgOSwgMiwgNjMsIDksIAorICAgIDIsIDM0LCAyMywgNjMsIDksIDIsIDM0LCAyMywgMjQ5LCAxNSwgOSwgMiwgMzQsIDIzLCAyMzgsIDIzMywgMjA5LCAxNDEsIAorICAgIDksIDIsIDM0LCAyMywgMTUyLCA5LCAyLCAzNCwgMjMsIDIzMSwgODUsIDksIDIsIDM0LCAyMywgMjI4LCA5MywgMjM3LCAKKyAgICAyMDgsIDksIDIsIDM0LCAyMywgMjIzLCAxOTksIDksIDIsIDM0LCAyMywgMjE1LCAyMiwgOSwgMiwgMjU0LCAzNCwgOSwgMiwgCisgICAgMjUxLCAyMzIsIDksIDIsIDI1MSwgMjMzLCAyMywgMjUwLCA3MywgOSwgMiwgMjUxLCAyMzMsIDIzLCAyNDIsIDMwLCAyMzcsIAorICAgIDIwOCwgOSwgMiwgMjUxLCAyMzMsIDIzLCAyMzgsIDI0NiwgOSwgMiwgMjUxLCAyMzMsIDIzLCAyMzgsIDIzMywgMjA5LCAKKyAgICAxNDEsIDksIDIsIDI1MSwgMjMzLCAyMywgMTUyLCA5LCAyLCAyNTEsIDIzMywgMjMsIDIzMSwgODYsIDIzNywgMjA4LCA5LCAKKyAgICAyLCAyNTEsIDIzMywgMjMsIDIzMSwgNTksIDksIDIsIDI1MSwgMjMzLCAyMywgMjI4LCA5NCwgOSwgMiwgMjUxLCAyMzMsIAorICAgIDIzLCAyMTMsIDI3LCA5LCAyLCAyNTEsIDIzMywgMjMsIDEwNiwgOTEsIDEwNiwgOTEsIDY4LCA5LCAyLCAyNTEsIDIzMywgCisgICAgMjM3LCAyMDgsIDksIDIsIDI1MSwgMTQ5LCA5LCAyLCAyNTEsIDE1MCwgMjMsIDI0OCwgMjUyLCA5LCAyLCAyNTEsIDE1MCwgCisgICAgMjMsIDIzOCwgMjMzLCAyMDksIDE0MSwgOSwgMiwgMjUxLCAxNTAsIDIzLCAyMjUsIDIxLCA5MSwgMjQxLCA5MiwgOSwgMiwgCisgICAgMjUxLCAxNTAsIDIzLCAyMTMsIDg4LCA5LCAyLCAyNTEsIDE1MCwgMjMsIDIwOSwgMjQyLCA5LCAyLCAyNTEsIDEyMiwgOSwgCisgICAgMiwgMjUxLCA0NywgOSwgMiwgMjUxLCA0OCwgMjMsIDI0MSwgMjIsIDksIDIsIDI1MSwgNDgsIDIzLCAyMTIsIDI0NSwgOTEsIAorICAgIDIzOCwgNTUsIDksIDIsIDI1MSwgMzksIDksIDIsIDI1MSwgNDAsIDIzLCAyNTEsIDM5LCA5LCAyLCAyNTEsIDQwLCAyMywgCisgICAgMjQzLCAxODYsIDksIDIsIDI1MSwgNDAsIDIzLCAyMzgsIDU1LCA5LCAyLCAyNTEsIDQwLCAyMywgMTUyLCA5LCAyLCAyNTEsIAorICAgIDQwLCAyMywgMjMwLCAyNywgOSwgMiwgMjUxLCA0MCwgMjMsIDIyOSwgMTAwLCA5LCAyLCAyNTEsIDQwLCAyMywgMjEzLCA0MywgCisgICAgOSwgMiwgMjUxLCA0MCwgMjMsIDIwNiwgMTg2LCA5LCAyLCAyNTEsIDM2LCA5LCAyLCAyNTEsIDI4LCA5LCAyLCAyNTAsIAorICAgIDI0MywgOSwgMiwgMjUwLCAyNDQsIDIzLCAyMTMsIDQzLCA5LCAyLCAyNTAsIDIzMSwgOSwgMiwgMjUwLCAyMzIsIDExNSwgCisgICAgMjUwLCAyMzEsIDksIDIsIDI1MCwgMjMyLCAxMjYsIDIwOCwgMjE5LCA5LCAyLCAyNTAsIDIzMiwgOTEsIDIyMywgOTcsIAorICAgIDIxOSwgMjUxLCAyNTAsIDIzMiwgOTEsIDIyMywgOTYsIDksIDIsIDI1MCwgMjMyLCA5MSwgMjIzLCA5NywgMjExLCAxNzYsIAorICAgIDksIDIsIDI1MCwgMjAwLCA5LCAyLCAyNTAsIDE3MCwgOSwgMiwgMjUwLCAxMzgsIDksIDIsIDI1MCwgMTM5LCAyMywgMjI4LCAKKyAgICAxODMsIDksIDIsIDI1MCwgMTEwLCA5LCAyLCAyNTAsIDgwLCA5LCAyLCAyNTAsIDc1LCA5LCAyLCAyNTAsIDc2LCAyMDIsIAorICAgIDM1LCAyMDksIDE0MSwgOSwgMiwgMjUwLCA3NiwgMjMwLCAzMSwgMjA5LCAxNDEsIDksIDIsIDI1MCwgNzYsIDExNSwgMjUwLCAKKyAgICA3NiwgMjA3LCAxOTgsIDExNSwgMjA3LCAxOTgsIDIwNywgMTk4LCAxMTUsIDIwNywgMTk4LCAyMTksIDk2LCA5LCAyLCAyNTAsIAorICAgIDc2LCAxMTUsIDI1MCwgNzYsIDExNSwgMjUwLCA3NSwgOSwgMiwgMjUwLCA3NiwgMTE1LCAyNTAsIDc2LCAxMTUsIDI1MCwgCisgICAgNzYsIDI0NSwgMTI0LCAyNTAsIDc2LCAxMTUsIDI1MCwgNzYsIDExNSwgMjUwLCA3NSwgOSwgMiwgMjUwLCA3MywgOSwgMiwgCisgICAgMjUwLCA2OSwgOSwgMiwgMjQ5LCAzMiwgOSwgMiwgMjQ5LCAxNSwgOSwgMiwgMjQ5LCA5LCA5LCAyLCAyNDksIDMsIDksIDIsIAorICAgIDI0OCwgMjUzLCA5LCAyLCAyNDgsIDI1NCwgMTE1LCAyNDgsIDI1MywgOSwgMiwgMjQ4LCAyNTIsIDksIDIsIDE0MiwgOSwgMiwgCisgICAgMjQ4LCAyMzAsIDksIDIsIDI0OCwgODYsIDksIDIsIDI0OCwgODcsIDIzLCA2MywgOSwgMiwgMjQ4LCA4NywgMjMsIDIzOCwgCisgICAgMjI0LCA5LCAyLCAyNDgsIDg3LCAyMywgMjMxLCA4NiwgMjM3LCAyMDgsIDksIDIsIDI0NywgMTkzLCA5LCAyLCAyNDcsIAorICAgIDE5NCwgMTE1LCAyNDcsIDE5NCwgMjUxLCAyMzIsIDksIDIsIDI0NywgMTk0LCAxMTUsIDI0NywgMTk0LCAyMDYsIDI1NSwgOSwgCisgICAgMiwgMjQ3LCAxOTQsIDI0NSwgMTI0LCAyNDcsIDE5MywgOSwgMiwgMjQ3LCAxNzEsIDksIDIsIDI0NywgMTcyLCAxMTUsIAorICAgIDI0NywgMTcxLCA5LCAyLCAyNDcsIDE2MCwgOSwgMiwgMjQ3LCAxNTksIDksIDIsIDI0NCwgMjEyLCA5LCAyLCAyNDQsIDIwMywgCisgICAgOSwgMiwgMjQ0LCAyMDQsIDIyOSwgNjksIDIzLCAzNCwgOTEsIDIyNSwgNzksIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAKKyAgICAyMywgMjUwLCAyNDMsIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgMjQ4LCAyNTIsIDksIDIsIDI0NCwgMjA0LCAyMjksIAorICAgIDY5LCAyMywgMjQ4LCA4NiwgOSwgMiwgMjQ0LCAyMDQsIDIyOSwgNjksIDIzLCAyMzksIDgsIDksIDIsIDI0NCwgMjA0LCAKKyAgICAyMjksIDY5LCAyMywgMjM5LCA5LCA5MSwgMjI1LCA3OSwgOSwgMiwgMjQ0LCAyMDQsIDIyOSwgNjksIDIzLCAyMzgsIDgxLCAKKyAgICA5LCAyLCAyNDQsIDIwNCwgMjI5LCA2OSwgMjMsIDIzOCwgNjMsIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgMjM3LCAKKyAgICAyMTksIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgMTUyLCA5LCAyLCAyNDQsIDIwNCwgMjI5LCA2OSwgMjMsIDIzMCwgCisgICAgMjI0LCA5LCAyLCAyNDQsIDIwNCwgMjI5LCA2OSwgMjMsIDIzMCwgMjI1LCA5MSwgMjI2LCAyMzksIDksIDIsIDI0NCwgMjA0LCAKKyAgICAyMjksIDY5LCAyMywgMjMwLCAxMiwgOSwgMiwgMjQ0LCAyMDQsIDIyOSwgNjksIDIzLCAyMjgsIDExMywgOSwgMiwgMjQ0LCAKKyAgICAyMDQsIDIyOSwgNjksIDIzLCAyMjYsIDIzOSwgOSwgMiwgMjQ0LCAyMDQsIDIyOSwgNjksIDIzLCAyMjYsIDI0MCwgOTEsIAorICAgIDIyNSwgNzgsIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgMjI2LCAyMjIsIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAKKyAgICAyMywgMjIyLCAyNDAsIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgMjE5LCA5NywgOTEsIDIxOSwgOTYsIDksIDIsIAorICAgIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgMjEyLCAxNjIsIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgMjA5LCAyNDIsIAorICAgIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgMjA3LCA0MSwgOTEsIDIzOCwgNjMsIDksIDIsIDI0NCwgMjA0LCAyMjksIAorICAgIDY5LCAyMywgMjA2LCAxODYsIDksIDIsIDI0NCwgMTc1LCA5LCAyLCAyNDQsIDE1NCwgOSwgMiwgMjQ0LCAxNTMsIDksIDIsIAorICAgIDI0NCwgMTUyLCA5LCAyLCAyNDMsIDIzMywgOSwgMiwgMjQzLCAyMTUsIDksIDIsIDI0MywgMTg4LCA5LCAyLCAyNDMsIDE4OSwgCisgICAgMjMsIDIxMywgNDMsIDksIDIsIDI0MywgMTg2LCA5LCAyLCAyNDMsIDE3NiwgOSwgMiwgMjQzLCAxNzcsIDIyOSwgMjMyLCAKKyAgICAxMDYsIDIzNywgMjA5LCAyNDMsIDE1NiwgOSwgMiwgMjQzLCAxNTYsIDksIDIsIDI0MiwgNDIsIDksIDIsIDI0MiwgNDMsIAorICAgIDExNSwgMjQyLCA0MiwgOSwgMiwgMjQyLCA0MywgMjM3LCAyMDgsIDksIDIsIDI0MiwgNDMsIDIxMywgMjQsIDksIDIsIDI0MiwgCisgICAgNDAsIDksIDIsIDI0MiwgNDEsIDIzLCAyNDEsIDQsIDksIDIsIDI0MiwgMzksIDksIDIsIDI0MiwgMzcsIDksIDIsIDI0MiwgCisgICAgMzYsIDksIDIsIDI0MiwgMzUsIDksIDIsIDI0MiwgMzEsIDksIDIsIDI0MiwgMjksIDksIDIsIDI0MiwgMzAsIDIzNywgMjA4LCAKKyAgICA5LCAyLCAyNDIsIDMwLCAyMzcsIDIwOSwgMjM3LCAyMDgsIDksIDIsIDI0MiwgMjgsIDksIDIsIDI0MiwgMjEsIDksIDIsIAorICAgIDc0LCA5LCAyLCAxODgsIDIzLCAyMTksIDk2LCA5LCAyLCAxODgsIDExNSwgMTg4LCAyMjEsIDQxLCAxMTUsIDIyMSwgNDAsIAorICAgIDksIDIsIDI0MSwgMTkwLCA5LCAyLCAyNDEsIDE5MSwgMjMsIDM0LCA5MSwgMjM3LCAxNjAsIDkxLCAyNDQsIDIxMiwgOSwgMiwgCisgICAgMjQxLCAxOTEsIDIzLCAyMzgsIDIyNCwgOSwgMiwgMjQxLCAxOTEsIDIzLCAyMjQsIDE1NSwgOSwgMiwgMjQxLCAxOTEsIDIzLCAKKyAgICAyMTUsIDgsIDksIDIsIDI0MSwgMTkxLCAyMywgMjEzLCA0MywgOSwgMiwgMjQxLCAxOTEsIDIzLCA2OCwgOSwgMiwgMjQxLCAKKyAgICAxNjMsIDksIDIsIDI0MSwgMTUxLCA5LCAyLCAyNDEsIDEyMiwgOSwgMiwgMjQxLCA5MiwgOSwgMiwgMjQxLCA5MywgMjMsIAorICAgIDIzOCwgMjMyLCA5LCAyLCAyNDEsIDkzLCAyMywgMjM4LCAyMzMsIDIwOSwgMTQxLCA5LCAyLCAyNDEsIDkzLCAyMywgMjI1LCAKKyAgICAyMCwgOSwgMiwgMjQxLCA5MywgMjQ1LCAxMjQsIDI0MSwgOTIsIDksIDIsIDI0MSwgOTMsIDIxOSwgMjUxLCAyNDEsIDkyLCAKKyAgICA5LCAyLCAyNDEsIDkzLCAyMTEsIDE3NiwgOSwgMiwgMjQxLCAyNSwgOSwgMiwgMjQxLCAyMiwgOSwgMiwgMjQxLCA0LCA5LCAKKyAgICAyLCAyNDAsIDE3OSwgOSwgMiwgMjQwLCAxODAsIDIzLCA2MywgOSwgMiwgMjQwLCAxODAsIDIzLCAzNCwgOTEsIDIyOCwgMzAsIAorICAgIDksIDIsIDI0MCwgMTgwLCAyMywgMzQsIDkxLCAyMjgsIDMxLCAyMywgMjI4LCAzMCwgOSwgMiwgMjQwLCAxODAsIDIzLCAKKyAgICAyNTAsIDIzMSwgOSwgMiwgMjQwLCAxODAsIDIzLCAyNDksIDE1LCA5LCAyLCAyNDAsIDE4MCwgMjMsIDI0MiwgMzAsIDIzNywgCisgICAgMjA4LCA5LCAyLCAyNDAsIDE4MCwgMjMsIDI0MiwgMzAsIDIzNywgMjA5LCAyMzcsIDIwOCwgOSwgMiwgMjQwLCAxODAsIDIzLCAKKyAgICAxNTIsIDksIDIsIDI0MCwgMTgwLCAyMywgMjM3LCAxNjAsIDIzNywgMjA4LCA5LCAyLCAyNDAsIDE4MCwgMjMsIDIzMSwgODYsIAorICAgIDIzNywgMjA4LCA5LCAyLCAyNDAsIDE4MCwgMjMsIDIyOSwgMjMxLCA5LCAyLCAyNDAsIDE4MCwgMjMsIDIyOSwgMjMyLCAKKyAgICAyMTEsIDE3NiwgOSwgMiwgMjQwLCAxODAsIDIzLCAyMjgsIDIwNywgOSwgMiwgMjQwLCAxODAsIDIzLCAyMjgsIDExMywgOSwgCisgICAgMiwgMjQwLCAxODAsIDIzLCAyMjgsIDMxLCAyMywgMjI4LCAzMCwgOSwgMiwgMjQwLCAxODAsIDIzLCAyMjcsIDE0OCwgOSwgCisgICAgMiwgMjQwLCAxODAsIDIzLCAyMjYsIDIzOSwgOSwgMiwgMjQwLCAxODAsIDIzLCAyMDcsIDQwLCA5LCAyLCAyNDAsIDE4MCwgCisgICAgMjMsIDIwNywgMjksIDksIDIsIDIzOSwgOCwgOSwgMiwgMjM5LCA5LCAyMzcsIDIwOCwgOSwgMiwgMjM5LCA2LCA5LCAyLCAKKyAgICAyMzksIDcsIDIzLCAzNCwgOTEsIDI0NCwgMjEzLCA5MSwgMTUyLCA5LCAyLCAyMzksIDcsIDIzLCAzNCwgOTEsIDE1MiwgOSwgCisgICAgMiwgMjM5LCA3LCAyMywgMzQsIDkxLCAyMzEsIDg1LCA5LCAyLCAyMzksIDcsIDIzLCAyNTEsIDE1MCwgMjA5LCAxNDIsIDkxLCAKKyAgICAyMTAsIDEwLCA5LCAyLCAyMzksIDcsIDIzLCAyNTAsIDIzMSwgOSwgMiwgMjM5LCA3LCAyMywgMjUwLCA3NSwgOSwgMiwgCisgICAgMjM5LCA3LCAyMywgMjUwLCA3NCwgOTEsIDIzOCwgMjQ2LCA5LCAyLCAyMzksIDcsIDIzLCAyNDksIDE1LCA5LCAyLCAyMzksIAorICAgIDcsIDIzLCAyNDgsIDIzMSwgOTEsIDIxNiwgMjIwLCA5LCAyLCAyMzksIDcsIDIzLCAyNDcsIDE2MCwgOSwgMiwgMjM5LCA3LCAKKyAgICAyMywgMjQ3LCAxNjEsIDkxLCAyMTYsIDIyMCwgOSwgMiwgMjM5LCA3LCAyMywgMjQ0LCAyMTIsIDksIDIsIDIzOSwgNywgMjMsIAorICAgIDI0MywgMjMzLCA5LCAyLCAyMzksIDcsIDIzLCAyNDMsIDE4OSwgMjMsIDIxMywgNDMsIDksIDIsIDIzOSwgNywgMjMsIDI0MiwgCisgICAgNDAsIDksIDIsIDIzOSwgNywgMjMsIDI0MSwgMTIyLCA5LCAyLCAyMzksIDcsIDIzLCAyNDEsIDEyMywgOTEsIDIyOCwgMTEzLCAKKyAgICA5LCAyLCAyMzksIDcsIDIzLCAyNDEsIDkyLCA5LCAyLCAyMzksIDcsIDIzLCAyNDEsIDkzLCAyMywgMjM4LCAyMzMsIDIwOSwgCisgICAgMTQxLCA5LCAyLCAyMzksIDcsIDIzLCAyMzgsIDIzMywgMjA5LCAxNDEsIDksIDIsIDIzOSwgNywgMjMsIDIzOCwgMjI0LCA5LCAKKyAgICAyLCAyMzksIDcsIDIzLCAyMzgsIDgxLCA5LCAyLCAyMzksIDcsIDIzLCAyMzgsIDc5LCA5LCAyLCAyMzksIDcsIDIzLCAyMzgsIAorICAgIDgwLCA5MSwgNjMsIDksIDIsIDIzOSwgNywgMjMsIDIzOCwgNjQsIDkxLCAyMTEsIDEwLCA5LCAyLCAyMzksIDcsIDIzLCAKKyAgICAyMzcsIDE2MCwgOTEsIDIyNiwgMjQwLCA5MSwgMjQxLCA0LCA5LCAyLCAyMzksIDcsIDIzLCAyMzcsIDE0MCwgOSwgMiwgCisgICAgMjM5LCA3LCAyMywgMjM3LCAxNDEsIDkxLCAyMjgsIDExMywgOSwgMiwgMjM5LCA3LCAyMywgMjM3LCA0LCA5MSwgMjI3LCAKKyAgICAxNDgsIDksIDIsIDIzOSwgNywgMjMsIDIzNiwgMjEsIDksIDIsIDIzOSwgNywgMjMsIDIzMSwgODYsIDIzNywgMjA4LCA5LCAKKyAgICAyLCAyMzksIDcsIDIzLCAyMzAsIDIxMCwgOTEsIDIzNiwgMjcsIDkxLCAyNTAsIDc1LCA5LCAyLCAyMzksIDcsIDIzLCAyMzAsIAorICAgIDEyLCA5LCAyLCAyMzksIDcsIDIzLCAyMjksIDIzMSwgOSwgMiwgMjM5LCA3LCAyMywgMjI5LCA5NCwgOSwgMiwgMjM5LCA3LCAKKyAgICAyMywgMjI5LCA5NSwgOTEsIDIyOCwgMzAsIDksIDIsIDIzOSwgNywgMjMsIDIyOCwgMjA4LCA5MSwgMjUwLCAyMzEsIDksIDIsIAorICAgIDIzOSwgNywgMjMsIDIyOCwgMTEzLCA5LCAyLCAyMzksIDcsIDIzLCAyMjUsIDIxLCA5MSwgMjQxLCA5MiwgOSwgMiwgMjM5LCAKKyAgICA3LCAyMywgMjI0LCAxNTUsIDksIDIsIDIzOSwgNywgMjMsIDIyMSwgNDAsIDksIDIsIDIzOSwgNywgMjMsIDIyMSwgNDEsIAorICAgIDExNSwgMjIxLCA0MCwgOSwgMiwgMjM5LCA3LCAyMywgMTg1LCA5LCAyLCAyMzksIDcsIDIzLCAyMTUsIDgsIDksIDIsIDIzOSwgCisgICAgNywgMjMsIDIxNCwgMjMwLCA5LCAyLCAyMzksIDcsIDIzLCAyMTMsIDQzLCA5LCAyLCAyMzksIDcsIDIzLCAyMTMsIDQ0LCAKKyAgICA5MSwgMjA3LCAxODEsIDksIDIsIDIzOSwgNywgMjMsIDIxMywgOSwgOSwgMiwgMjM5LCA3LCAyMywgMjEwLCAyMjAsIDksIDIsIAorICAgIDIzOSwgNywgMjMsIDIwOSwgMjQyLCA5LCAyLCAyMzksIDcsIDIzLCA2OCwgOSwgMiwgMjM5LCA3LCAyMywgMjA3LCAyOSwgOSwgCisgICAgMiwgMjM5LCA3LCAyMywgMjA3LCAzMCwgOTEsIDI0MiwgNDIsIDksIDIsIDIzOSwgNywgMTE1LCAyMzksIDYsIDksIDIsIAorICAgIDIzOSwgMSwgOSwgMiwgMjM5LCAyLCAyNDUsIDEyNCwgMjM5LCAxLCA5LCAyLCAyMzgsIDI1NSwgOSwgMiwgMjM5LCAwLCAKKyAgICAxMTUsIDIzOSwgMCwgMjM4LCAyMjUsIDExNSwgMjM4LCAyMjQsIDksIDIsIDIzOCwgMjQ2LCA5LCAyLCAyMzgsIDI0NywgCisgICAgMjM5LCAwLCAxMTUsIDIzOSwgMCwgMjM4LCAyMjUsIDExNSwgMjM4LCAyMjQsIDksIDIsIDIzOCwgMjQ1LCA5LCAyLCAyMzgsIAorICAgIDI0MywgOSwgMiwgMjM4LCAyMzQsIDksIDIsIDIzOCwgMjMyLCA5LCAyLCAyMzgsIDIzMywgMjA5LCAxNDEsIDksIDIsIDIzOCwgCisgICAgMjMzLCAxMTUsIDIzOCwgMjMyLCA5LCAyLCAyMzgsIDIzMywgMjQ1LCAxMjQsIDIzOCwgMjMyLCA5LCAyLCAyMzgsIDIyNCwgCisgICAgOSwgMiwgMjM4LCAyMjMsIDksIDIsIDIzOCwgMjE4LCA5LCAyLCAyMzgsIDE2MiwgOSwgMiwgMjM4LCAxNjMsIDIzLCAyMjgsIAorICAgIDE4MywgOSwgMiwgMjM4LCA4MSwgOSwgMiwgMjM4LCA4MiwgMjMsIDc0LCA5LCAyLCAyMzgsIDgyLCAyMywgNjgsIDksIDIsIAorICAgIDIzOCwgODIsIDI0NSwgMTI0LCAyMzgsIDgxLCA5LCAyLCAyMzgsIDc5LCA5LCAyLCAyMzgsIDgwLCAxMTUsIDIzOCwgNzksIAorICAgIDksIDIsIDIzOCwgODAsIDI0NSwgMTI0LCAyMzgsIDc5LCA5LCAyLCAyMzgsIDc2LCA5LCAyLCAyMzgsIDYzLCA5LCAyLCAKKyAgICAyMzgsIDY0LCAyMzcsIDIwOCwgOSwgMiwgMjM4LCA2MSwgOSwgMiwgMjM4LCA2MiwgMjMsIDM0LCA5MSwgMjMxLCA4NSwgOSwgCisgICAgMiwgMjM4LCA2MiwgMjMsIDIzOCwgMjMzLCAyMDksIDE0MSwgOSwgMiwgMjM4LCA2MiwgMjMsIDIzMSwgODUsIDksIDIsIAorICAgIDIzOCwgNjIsIDIzLCAyMjYsIDI0MCwgOTEsIDIzMSwgODUsIDksIDIsIDIzOCwgNjIsIDIzLCAxODUsIDksIDIsIDIzOCwgCisgICAgNTcsIDksIDIsIDIzOCwgNTUsIDksIDIsIDIzOCwgNTYsIDI0NSwgMTI0LCAyMzgsIDU1LCA5LCAyLCAyMzgsIDU2LCAyMywgCisgICAgMjQ5LCAxNSwgOSwgMiwgMjM4LCA1NiwgMjMsIDIwOSwgMjQyLCA5LCAyLCAyMzgsIDU2LCAyMDksIDE0MSwgOSwgMiwgMjM3LCAKKyAgICAyMzAsIDksIDIsIDIzNywgMjMxLCAyNDUsIDEyNCwgMjM3LCAyMzAsIDksIDIsIDIzNywgMjI4LCA5LCAyLCAyMzcsIDIyOSwgCisgICAgMjMsIDIzMCwgMTIsIDksIDIsIDIzNywgMjI5LCAyMywgMjMwLCAxMywgMjMsIDIzMSwgODYsIDIzNywgMjA4LCA5LCAyLCAKKyAgICAyMzcsIDIyOSwgMjMsIDIyMSwgNDAsIDksIDIsIDIzNywgMjI5LCAyMywgMjE1LCA5LCA5MSwgMjA3LCAxOTcsIDksIDIsIAorICAgIDIzNywgMjI5LCAyMzcsIDIwOCwgOSwgMiwgMjM3LCAyMTksIDksIDIsIDIzNywgMjIwLCAyMywgMzQsIDkxLCAyMjgsIDE4MywgCisgICAgOSwgMiwgMjM3LCAyMjAsIDIzLCAyMjgsIDE4MywgOSwgMiwgMjM3LCAyMjAsIDExNSwgMjM3LCAyMjAsIDIyNiwgMjMwLCA5LCAKKyAgICAyLCAyMzcsIDIxMiwgOSwgMiwgMjM3LCAyMTAsIDksIDIsIDIzNywgMjExLCAyMywgMjEzLCA0MywgOSwgMiwgMjM3LCAyMDIsIAorICAgIDksIDIsIDIzNywgMjAxLCA5LCAyLCAyMzcsIDE5NywgOSwgMiwgMjM3LCAxOTYsIDksIDIsIDE1MiwgOSwgMiwgMjM3LCAKKyAgICAxNjAsIDIwOSwgMTQxLCA5LCAyLCAyMzcsIDE2MCwgMjM3LCAyMDgsIDksIDIsIDIzNywgMTQwLCA5LCAyLCAyMzcsIDMsIDksIAorICAgIDIsIDIzNywgNCwgMjMsIDI1MCwgNzUsIDksIDIsIDIzNywgNCwgMjMsIDI1MCwgNzMsIDksIDIsIDIzNywgNCwgMjMsIDI0OSwgCisgICAgMTUsIDksIDIsIDIzNywgNCwgMjMsIDI0MywgMTU2LCA5LCAyLCAyMzcsIDQsIDIzLCAyMzgsIDI1NSwgOSwgMiwgMjM3LCA0LCAKKyAgICAyMywgMjI5LCA4NCwgOSwgMiwgMjM3LCA0LCAyMywgMjIxLCA0MCwgOSwgMiwgMjM3LCA0LCAyMywgMjEzLCA0MywgOSwgMiwgCisgICAgMjM3LCA0LCAyMywgNjgsIDksIDIsIDIzNiwgMjYsIDksIDIsIDIzNiwgMjEsIDksIDIsIDIzNiwgMjIsIDIzLCAyNTAsIAorICAgIDIzMSwgOSwgMiwgMjM2LCAyMiwgMjMsIDIzNywgMTQwLCA5LCAyLCAyMzYsIDIyLCAyMywgMjI5LCAyMzEsIDksIDIsIDIzNiwgCisgICAgMjIsIDIzLCAyMjcsIDkyLCA5LCAyLCAyMzYsIDIyLCAyMywgMjA3LCAyOSwgOSwgMiwgMjM2LCAxNywgOSwgMiwgNzUsIDksIAorICAgIDIsIDIzNSwgMjA2LCA2MywgOSwgMiwgMjM1LCAxNjYsIDksIDIsIDIzMSwgMTEzLCA5LCAyLCAyMzEsIDExNCwgMTE1LCAKKyAgICAyMzEsIDExNCwgMjQ3LCAxNjAsIDksIDIsIDIzMSwgMTE0LCAxMTUsIDIzMSwgMTE0LCAyMTEsIDE3NiwgOSwgMiwgMjMxLCAKKyAgICA4OCwgOSwgMiwgMjMxLCA4NSwgOSwgMiwgMjMxLCA4NiwgMjQzLCAyMTUsIDksIDIsIDIzMSwgODYsIDIxNiwgNTcsIDksIDIsIAorICAgIDIzMSwgODYsIDExNSwgMjMxLCA4NiwgMjEyLCAyNDksIDExNSwgMjEyLCAyNDksIDIwNywgMzAsIDExNSwgMjA3LCAyOSwgOSwgCisgICAgMiwgMjMxLCA4NiwgMjM3LCAyMDgsIDksIDIsIDIzMSwgNzcsIDksIDIsIDIzMSwgNzgsIDIzLCAyMzgsIDIzMywgMjA5LCAKKyAgICAxNDEsIDksIDIsIDIzMSwgNzYsIDksIDIsIDIzMSwgNjYsIDksIDIsIDIzMSwgNjcsIDIzLCAyMDksIDI0MiwgOSwgMiwgCisgICAgMjMxLCA2NywgMjQ1LCAxMjQsIDIzMSwgNjYsIDksIDIsIDIzMSwgNjcsIDIxOSwgMjUxLCAyMzEsIDY2LCA5LCAyLCAyMzEsIAorICAgIDY3LCAyMTEsIDE3NiwgOSwgMiwgMjMxLCA1OSwgOSwgMiwgMjMxLCA0OSwgOSwgMiwgMjMwLCAyMjQsIDksIDIsIDIzMCwgCisgICAgMjA5LCA5LCAyLCAxNzMsIDksIDIsIDIzMCwgNDQsIDIzLCA2MywgOSwgMiwgMjMwLCA0NCwgMjMsIDI1MSwgMTIyLCA5LCAyLCAKKyAgICAyMzAsIDQ0LCAyMywgMjUxLCAxMjMsIDkxLCAyMjgsIDIwNywgOSwgMiwgMjMwLCA0NCwgMjMsIDI1MCwgNzMsIDksIDIsIAorICAgIDIzMCwgNDQsIDIzLCAyNDksIDE1LCA5LCAyLCAyMzAsIDQ0LCAyMywgMjQ4LCAyNTIsIDksIDIsIDIzMCwgNDQsIDIzLCAKKyAgICAxNDIsIDksIDIsIDIzMCwgNDQsIDIzLCAyNDgsIDg2LCA5LCAyLCAyMzAsIDQ0LCAyMywgMjQxLCAyMiwgOSwgMiwgMjMwLCAKKyAgICA0NCwgMjMsIDI0MSwgNCwgOSwgMiwgMjMwLCA0NCwgMjMsIDIzOSwgOCwgOSwgMiwgMjMwLCA0NCwgMjMsIDIzOCwgMjQ2LCAKKyAgICA5LCAyLCAyMzAsIDQ0LCAyMywgMjM4LCAyMzMsIDIwOSwgMTQxLCA5LCAyLCAyMzAsIDQ0LCAyMywgMjM4LCAyMjQsIDksIDIsIAorICAgIDIzMCwgNDQsIDIzLCAyMzgsIDIyNSwgOTEsIDIxMywgODksIDkxLCA2MywgOSwgMiwgMjMwLCA0NCwgMjMsIDIzOCwgODEsIAorICAgIDksIDIsIDIzMCwgNDQsIDIzLCAyMzgsIDYzLCA5LCAyLCAyMzAsIDQ0LCAyMywgMjM4LCA1NiwgOTEsIDIxNCwgMjMwLCA5LCAKKyAgICAyLCAyMzAsIDQ0LCAyMywgMjM4LCA1NiwgMjQ1LCAxMjQsIDIzOCwgNTUsIDksIDIsIDIzMCwgNDQsIDIzLCAyMzcsIDIzMCwgCisgICAgOSwgMiwgMjMwLCA0NCwgMjMsIDIzNywgMjAxLCA5LCAyLCAyMzAsIDQ0LCAyMywgMjMxLCA4NSwgOSwgMiwgMjMwLCA0NCwgCisgICAgMjMsIDIzMSwgNjYsIDksIDIsIDIzMCwgNDQsIDIzLCAyMzAsIDEyLCA5LCAyLCAyMzAsIDQ0LCAyMywgMjI5LCAxMDAsIDksIAorICAgIDIsIDIzMCwgNDQsIDIzLCAyMjksIDk0LCA5LCAyLCAyMzAsIDQ0LCAyMywgMjI3LCAxNDgsIDksIDIsIDIzMCwgNDQsIDIzLCAKKyAgICAyMjYsIDIzOSwgOSwgMiwgMjMwLCA0NCwgMjMsIDIyNSwgMjAsIDksIDIsIDIzMCwgNDQsIDIzLCAyMjUsIDIxLCA5MSwgCisgICAgMjQyLCA0MiwgOSwgMiwgMjMwLCA0NCwgMjMsIDIyNSwgMjEsIDkxLCAyMzgsIDgxLCA5LCAyLCAyMzAsIDQ0LCAyMywgMjI1LCAKKyAgICAyMSwgOTEsIDIwOSwgMTg3LCA5LCAyLCAyMzAsIDQ0LCAyMywgMjI0LCAxNTUsIDksIDIsIDIzMCwgNDQsIDIzLCAyMjQsIAorICAgIDE1NiwgOTEsIDIyMSwgMzUsIDksIDIsIDIzMCwgNDQsIDIzLCAyMjIsIDI0MCwgOSwgMiwgMjMwLCA0NCwgMjMsIDIyMSwgCisgICAgNDAsIDksIDIsIDIzMCwgNDQsIDIzLCAyMTgsIDE2NywgOSwgMiwgMjMwLCA0NCwgMjMsIDIxNSwgMTQ1LCA5LCAyLCAyMzAsIAorICAgIDQ0LCAyMywgMjE1LCAzNiwgOSwgMiwgMjMwLCA0NCwgMjMsIDIxNCwgMjMwLCA5LCAyLCAyMzAsIDQ0LCAyMywgMjEzLCA5MCwgCisgICAgOSwgMiwgMjMwLCA0NCwgMjMsIDIxMywgNDMsIDksIDIsIDIzMCwgNDQsIDIzLCAyMTMsIDksIDksIDIsIDIzMCwgNDQsIDIzLCAKKyAgICAyMTIsIDE5OSwgOSwgMiwgMjMwLCA0NCwgMjMsIDIxMiwgMTQ5LCA5LCAyLCAyMzAsIDQ0LCAyMywgMjEwLCAyMjksIDksIDIsIAorICAgIDIzMCwgNDQsIDIzLCAyMDksIDIxOCwgOSwgMiwgMjMwLCA0NCwgMjMsIDY4LCA5LCAyLCAyMzAsIDQ0LCAyMywgMjA3LCA0MCwgCisgICAgOSwgMiwgMjMwLCA0NCwgMjMsIDIwNywgMjksIDksIDIsIDIzMCwgNDQsIDIzLCAyMDcsIDIsIDIzLCAxODUsIDksIDIsIAorICAgIDIzMCwgNDQsIDIzLCAyMDYsIDE4NiwgOSwgMiwgMjMwLCA0NCwgMjMsIDIwMiwgMzksIDksIDIsIDIzMCwgNDIsIDksIDIsIAorICAgIDIzMCwgNDMsIDI0NSwgMTI0LCAyMzAsIDQyLCA5LCAyLCAyMzAsIDMyLCA5LCAyLCAyMzAsIDI5LCA5LCAyLCAyMzAsIDI3LCAKKyAgICA5LCAyLCAyMzAsIDI2LCA5LCAyLCAyMzAsIDI0LCA5LCAyLCAyMzAsIDI1LCAxMTUsIDIzMCwgMjQsIDksIDIsIDIzMCwgMTIsIAorICAgIDksIDIsIDIzMCwgMTMsIDIzLCAyMzEsIDg2LCAyMzcsIDIwOCwgOSwgMiwgMjMwLCA4LCA5LCAyLCAyMzAsIDksIDIzLCAKKyAgICAyNDksIDE1LCA5LCAyLCAyMzAsIDksIDI0NSwgMTI0LCAyMzAsIDgsIDksIDIsIDIzMCwgNiwgOSwgMiwgMjMwLCA1LCA5LCAKKyAgICAyLCAyMjksIDIzMSwgOSwgMiwgMjI5LCAyMzIsIDIyOCwgOTUsIDIzLCAxMDYsIDExNSwgMjI4LCA5NSwgMjMsIDY4LCA5LCAKKyAgICAyLCAyMjksIDIzMiwgMTE1LCAyMjksIDIzMiwgMjI4LCA5NSwgMjMsIDEwNiwgMTE1LCAyMjgsIDk1LCAyMywgNjgsIDksIDIsIAorICAgIDIyOSwgMTcxLCA5LCAyLCAyMjksIDEwMCwgOSwgMiwgMjI5LCAxMDEsIDIzLCAyNDksIDE1LCA5LCAyLCAyMjksIDEwMSwgCisgICAgMjMsIDY4LCA5LCAyLCAyMjksIDEwMSwgMjMsIDIwNywgMjksIDksIDIsIDIyOSwgOTQsIDksIDIsIDIyOSwgODQsIDksIDIsIAorICAgIDIyOSwgNzEsIDksIDIsIDIyOSwgNzAsIDksIDIsIDIyOSwgNjgsIDksIDIsIDIyOSwgNjksIDExNSwgMjI5LCA2OCwgOSwgMiwgCisgICAgMjI4LCAyMDksIDksIDIsIDIyOCwgMjEwLCAxMTUsIDIzNywgNCwgMjMsIDI1MCwgNzQsIDIyOCwgMjEwLCAxMTUsIDIzNywgCisgICAgNCwgMjMsIDI1MCwgNzMsIDksIDIsIDIyOCwgMjA3LCA5LCAyLCAyMjgsIDIwNSwgOSwgMiwgMjI4LCAyMDYsIDIwNiwgNjksIAorICAgIDE4LCA5LCAyLCAyMjgsIDIwNCwgOSwgMiwgMjI4LCAxOTYsIDksIDIsIDIyOCwgMTk3LCAyMzcsIDIwOCwgOSwgMiwgMjI4LCAKKyAgICAxOTUsIDksIDIsIDIyOCwgMTgzLCA5LCAyLCAyMjgsIDE4NCwgMjE5LCAyNTEsIDIyOCwgMTgzLCA5LCAyLCAyMjgsIDE3NywgCisgICAgOSwgMiwgMjI4LCAxNTUsIDksIDIsIDIyOCwgMTEzLCA5LCAyLCAyMjgsIDk0LCA5LCAyLCAyMjgsIDk1LCAyMywgNjMsIDksIAorICAgIDIsIDIyOCwgOTUsIDIzLCAzNCwgOTEsIDI0NCwgMjEzLCA5MSwgMTUyLCA5LCAyLCAyMjgsIDk1LCAyMywgMzQsIDkxLCAKKyAgICAyMzgsIDIyNCwgOSwgMiwgMjI4LCA5NSwgMjMsIDM0LCA5MSwgMjI4LCAzMCwgOSwgMiwgMjI4LCA5NSwgMjMsIDI1MSwgMzksIAorICAgIDksIDIsIDIyOCwgOTUsIDIzLCAyNTAsIDIzMSwgOSwgMiwgMjI4LCA5NSwgMjMsIDI1MCwgNzYsIDIwMiwgMzUsIDIwOSwgCisgICAgMTQxLCA5LCAyLCAyMjgsIDk1LCAyMywgMjQ5LCAxNSwgOSwgMiwgMjI4LCA5NSwgMjMsIDI0OCwgODYsIDksIDIsIDIyOCwgCisgICAgOTUsIDIzLCAyNDQsIDE1NCwgOSwgMiwgMjI4LCA5NSwgMjMsIDI0MSwgOTIsIDksIDIsIDIyOCwgOTUsIDIzLCAyMzksIDgsIAorICAgIDksIDIsIDIyOCwgOTUsIDIzLCAyMzgsIDIyNCwgOSwgMiwgMjI4LCA5NSwgMjMsIDIzNywgMjE5LCA5LCAyLCAyMjgsIDk1LCAKKyAgICAyMywgMjM3LCAyMjAsIDkxLCAyMzcsIDIxOSwgOSwgMiwgMjI4LCA5NSwgMjMsIDE1MiwgOSwgMiwgMjI4LCA5NSwgMjMsIAorICAgIDIzNywgMTQwLCA5LCAyLCAyMjgsIDk1LCAyMywgMjM3LCA0LCAyMywgMjIxLCA0MCwgOSwgMiwgMjI4LCA5NSwgMjMsIDIzMSwgCisgICAgODYsIDIzNywgMjA4LCA5LCAyLCAyMjgsIDk1LCAyMywgMjMxLCA2NiwgOSwgMiwgMjI4LCA5NSwgMjMsIDIzMSwgNjcsIDkxLCAKKyAgICAxNTIsIDksIDIsIDIyOCwgOTUsIDIzLCAyMzEsIDY3LCA5MSwgMjI2LCAyMzksIDksIDIsIDIyOCwgOTUsIDIzLCAyMjksIAorICAgIDEwMCwgOSwgMiwgMjI4LCA5NSwgMjMsIDIyOSwgODQsIDksIDIsIDIyOCwgOTUsIDIzLCAyMjgsIDIwNywgOSwgMiwgMjI4LCAKKyAgICA5NSwgMjMsIDIyOCwgMTk2LCA5LCAyLCAyMjgsIDk1LCAyMywgMjI4LCAxOTcsIDkxLCAyMzcsIDQsIDkxLCA2MywgOSwgMiwgCisgICAgMjI4LCA5NSwgMjMsIDIyOCwgOTQsIDksIDIsIDIyOCwgOTUsIDIzLCAyMjcsIDkyLCA5LCAyLCAyMjgsIDk1LCAyMywgMjI2LCAKKyAgICAyMzksIDksIDIsIDIyOCwgOTUsIDIzLCAyMjYsIDIyNCwgOSwgMiwgMjI4LCA5NSwgMjMsIDIyNSwgMjAsIDksIDIsIDIyOCwgCisgICAgOTUsIDIzLCAyMjUsIDIxLCA5MSwgMjQxLCA5MiwgOSwgMiwgMjI4LCA5NSwgMjMsIDIyMywgMTk5LCA5LCAyLCAyMjgsIDk1LCAKKyAgICAyMywgMjIyLCAyNDAsIDksIDIsIDIyOCwgOTUsIDIzLCAyMTMsIDQ0LCA5MSwgMjEwLCAyMjAsIDksIDIsIDIyOCwgOTUsIAorICAgIDIzLCAyMTIsIDI0NSwgOTEsIDIzOCwgNTYsIDkxLCAyNDEsIDIyLCA5LCAyLCAyMjgsIDk1LCAyMywgMjEyLCAyNDUsIDkxLCAKKyAgICAyMzgsIDU2LCAyMDksIDE0MSwgOSwgMiwgMjI4LCA5NSwgMjMsIDIxMiwgMTk3LCA5LCAyLCAyMjgsIDk1LCAyMywgMjEyLCAKKyAgICAxOTgsIDkxLCAyMTIsIDE5NywgOSwgMiwgMjI4LCA5NSwgMjMsIDIxMCwgMjIwLCA5LCAyLCAyMjgsIDk1LCAyMywgMjA5LCAKKyAgICAyNTUsIDksIDIsIDIyOCwgOTUsIDIzLCAyMDksIDI0MiwgOSwgMiwgMjI4LCA5NSwgMjMsIDIwOSwgMTg4LCA5MSwgMzQsIAorICAgIDkxLCAyMTEsIDExLCA5MSwgMjAxLCAyMDEsIDksIDIsIDIyOCwgOTUsIDIzLCA2OCwgOSwgMiwgMjI4LCA5NSwgMjMsIDEwNiwgCisgICAgOTEsIDYzLCA5LCAyLCAyMjgsIDk1LCAyMywgMTA2LCA5MSwgMTA2LCA5MSwgNjgsIDksIDIsIDIyOCwgOTUsIDIzLCAyMDcsIAorICAgIDQxLCA5MSwgMjUwLCA3NSwgOSwgMiwgMjI4LCA5NSwgMjMsIDIwNywgMjksIDksIDIsIDIyOCwgOTUsIDIzLCAyMDYsIDE4NiwgCisgICAgOSwgMiwgMjI4LCA5NSwgMjExLCAxNzYsIDksIDIsIDIyOCwgOTIsIDksIDIsIDIyOCwgOTMsIDIzLCAyMTMsIDQzLCA5LCAyLCAKKyAgICAyMjgsIDkzLCAyMywgMjEzLCA0NCwgOTEsIDIxMCwgMjIwLCA5LCAyLCAyMjgsIDkzLCAyMzcsIDIwOCwgOSwgMiwgMjI4LCAKKyAgICA5MywgMjM3LCAyMDksIDExNSwgMjI4LCA5MywgMjM3LCAyMDksIDIxMywgNDMsIDksIDIsIDIyOCwgODgsIDksIDIsIDIyOCwgCisgICAgMzAsIDksIDIsIDIyOCwgMzEsIDIzLCAyMjgsIDMwLCA5LCAyLCAyMjgsIDI4LCA5LCAyLCAyMjgsIDI5LCAyMywgMjI4LCAKKyAgICAxODMsIDksIDIsIDIyOCwgMjksIDIzLCAyMjgsIDE4NCwgOTEsIDIxNSwgMTQ1LCA5LCAyLCAyMjcsIDE0OCwgOSwgMiwgCisgICAgMjI3LCAxMjksIDksIDIsIDIyNywgMTE3LCA5LCAyLCAyMjcsIDkyLCA5LCAyLCAyMjYsIDIzOSwgOSwgMiwgMjI2LCAyNDAsIAorICAgIDIzLCAyNDksIDE1LCA5LCAyLCAyMjYsIDIzNywgOSwgMiwgMjI2LCAyMzgsIDIzLCAyNTEsIDM5LCA5LCAyLCAyMjYsIDIzOCwgCisgICAgMjMsIDI0OSwgMTUsIDksIDIsIDIyNiwgMjM4LCAyMywgMjQxLCA0LCA5LCAyLCAyMjYsIDIzOCwgMjMsIDI0MSwgNSwgMjA5LCAKKyAgICAxNDEsIDksIDIsIDIyNiwgMjM4LCAyMywgMjM4LCAyMzMsIDIwOSwgMTQxLCA5LCAyLCAyMjYsIDIzOCwgMjMsIDIzNywgNCwgCisgICAgMjMsIDI0OSwgMTUsIDksIDIsIDIyNiwgMjM4LCAyMywgMjMxLCA2NiwgOSwgMiwgMjI2LCAyMzgsIDIzLCAyMzAsIDI5LCA5LCAKKyAgICAyLCAyMjYsIDIzOCwgMjMsIDIzMCwgMjcsIDksIDIsIDIyNiwgMjM4LCAyMywgMjMwLCAyOCwgOTEsIDI1MCwgNzUsIDksIDIsIAorICAgIDIyNiwgMjM4LCAyMywgMjI5LCAxMDAsIDksIDIsIDIyNiwgMjM4LCAyMywgMjI4LCAxMTQsIDkxLCAyNTAsIDc1LCA5LCAyLCAKKyAgICAyMjYsIDIzOCwgMjMsIDIyOCwgOTQsIDksIDIsIDIyNiwgMjM4LCAyMywgMjI1LCAyMSwgOTEsIDI0MSwgOTIsIDksIDIsIAorICAgIDIyNiwgMjM4LCAyMywgMjIyLCAyNDAsIDksIDIsIDIyNiwgMjM4LCAyMywgMjIxLCA4NCwgOSwgMiwgMjI2LCAyMzgsIDIzLCAKKyAgICAyMTIsIDE2MywgOTEsIDI1MCwgNzUsIDksIDIsIDIyNiwgMjM4LCAyMywgMjEyLCAxNDEsIDkxLCAyNDcsIDE5MywgOSwgMiwgCisgICAgMjI2LCAyMzgsIDIzLCAyMDcsIDE5NywgOSwgMiwgMjI2LCAyMzgsIDIwOSwgMTQxLCA5LCAyLCAyMjYsIDIzOCwgMjQ1LCAKKyAgICAxMjQsIDIyNiwgMjM3LCA5LCAyLCAyMjYsIDIzOCwgMjE5LCAyNTEsIDIyNiwgMjM3LCA5LCAyLCAyMjYsIDIzOCwgMjExLCAKKyAgICAxNzYsIDksIDIsIDIyNiwgMjM4LCAyMTMsIDI0LCA5LCAyLCAyMjYsIDIzNiwgOSwgMiwgMjI2LCAyMzAsIDksIDIsIDIyNiwgCisgICAgMjMxLCAxMTUsIDIyNiwgMjMwLCA5LCAyLCAyMjYsIDIzMSwgMjE5LCAyNTEsIDIyNiwgMjMwLCA5LCAyLCAyMjYsIDIzMSwgCisgICAgMjEzLCAyNCwgOSwgMiwgMjI2LCAyMjcsIDksIDIsIDIyNiwgMjI0LCA5LCAyLCAyMjYsIDIyMiwgOSwgMiwgMjI2LCAyMjMsIAorICAgIDExNSwgMjI2LCAyMjIsIDksIDIsIDIyNiwgMjIzLCAxMTUsIDIyNiwgMjIzLCAyMzgsIDIyNSwgMTE1LCAyMzgsIDIyNCwgOSwgCisgICAgMiwgMTkyLCA5LCAyLCAyMjUsIDE3NywgMjMsIDIwOSwgMjQyLCA5LCAyLCAyMjUsIDE3NywgMjM3LCAyMDgsIDksIDIsIAorICAgIDIyNSwgMTc2LCA5LCAyLCAyMjUsIDE0OCwgOSwgMiwgMjI1LCAxMDAsIDksIDIsIDIyNSwgNzksIDksIDIsIDIyNSwgNzgsIAorICAgIDksIDIsIDIyNSwgMjAsIDksIDIsIDIyNCwgMjI4LCA5LCAyLCAyMjQsIDE1NSwgOSwgMiwgMjI0LCAxMTAsIDksIDIsIDIyMywgCisgICAgMjQ2LCA5LCAyLCAyMjMsIDI0NywgMTE1LCAyMjMsIDI0NiwgOSwgMiwgMjIzLCAyMzUsIDksIDIsIDIyMywgMjM2LCAyMzcsIAorICAgIDIwOCwgOSwgMiwgMjIzLCAyMTcsIDksIDIsIDIyMywgMjAzLCA5LCAyLCAyMjMsIDE5OSwgOSwgMiwgMjIzLCAyMDAsIDIzLCAKKyAgICA2MywgOSwgMiwgMjIzLCAyMDAsIDIzLCAyMjgsIDE4MywgOSwgMiwgMjIzLCAyMDAsIDIzLCAyMDIsIDExNiwgOSwgMiwgCisgICAgMjIzLCAyMDAsIDExNSwgMjIzLCAxOTksIDksIDIsIDIyMywgMjAwLCAxMTUsIDIyMywgMjAwLCAyMywgMzQsIDkxLCAyMDEsIAorICAgIDIwMSwgOSwgMiwgMjIzLCAyMDAsIDI0NSwgMTI0LCAyMjMsIDE5OSwgOSwgMiwgMjIzLCAxOTcsIDksIDIsIDIyMywgMTk4LCAKKyAgICAyMywgNjMsIDksIDIsIDIyMywgMTk4LCAyMywgMzQsIDkxLCAyNDMsIDIzMywgOSwgMiwgMjIzLCAxOTgsIDIzLCAyNDMsIAorICAgIDIzMywgOSwgMiwgMjIzLCAxOTgsIDIzNywgMjA4LCA5LCAyLCAyMDEsIDIwMSwgOSwgMiwgMjIzLCAxMDksIDksIDIsIDIyMywgCisgICAgOTYsIDksIDIsIDIyMywgOTcsIDIzMCwgMjM4LCA5LCAyLCAyMjMsIDk3LCAyMywgMjEyLCAyMDAsIDIwOSwgMTQxLCA5LCAyLCAKKyAgICAyMjMsIDk3LCAyMTksIDI1MSwgMjIzLCA5NiwgOSwgMiwgMjIzLCA5NSwgOSwgMiwgMjIzLCA4OCwgMjIxLCAyNiwgOSwgMiwgCisgICAgMjIzLCA4NywgOSwgMiwgMjIzLCA4NiwgOSwgMiwgMjIyLCAyNDAsIDksIDIsIDIyMiwgMjQxLCAyMywgNjMsIDksIDIsIAorICAgIDIyMiwgMjQxLCAyMywgMjA3LCAyOSwgOSwgMiwgMjIyLCAyNDEsIDIxMywgMjQsIDksIDIsIDIyMiwgMTAwLCA5LCAyLCAKKyAgICAyMjIsIDEwMSwgMjMsIDc0LCA5LCAyLCAyMjIsIDk5LCA5LCAyLCAyMjIsIDY5LCA5LCAyLCAyMjIsIDcwLCAyMywgMjM4LCAKKyAgICAyMzMsIDIwOSwgMTQxLCA5LCAyLCAyMjIsIDcwLCAyMywgMjM4LCAyMjUsIDkxLCAyMzgsIDIzMywgMjA5LCAxNDEsIDksIDIsIAorICAgIDIyMiwgNjUsIDksIDIsIDIyMiwgNjYsIDIzLCAyNTAsIDIzMSwgOSwgMiwgMjIyLCA2NiwgMjMsIDI1MCwgNzUsIDksIDIsIAorICAgIDIyMiwgNjYsIDIzLCAyNTAsIDc2LCA5MSwgMjUwLCA3NSwgOSwgMiwgMjIyLCA2NiwgMjMsIDIzNywgMjE5LCA5LCAyLCAKKyAgICAyMjIsIDY2LCAyMywgMjI1LCAyMSwgOTEsIDIzOCwgMjMzLCAyMDksIDE0MSwgOSwgMiwgMjIyLCA2NiwgMjMsIDIyMiwgCisgICAgMjQwLCA5LCAyLCAyMjIsIDY2LCAyMywgMjIxLCA0MCwgOSwgMiwgMjIyLCA2NiwgMjMsIDIxMywgNDMsIDksIDIsIDIyMiwgCisgICAgNjYsIDIzLCAyMTMsIDQ0LCA5MSwgMzQsIDI1MCwgMjMxLCA5LCAyLCAyMjIsIDY2LCAyMywgMjEzLCA0NCwgOTEsIDI1MCwgCisgICAgNzUsIDksIDIsIDIyMiwgNjYsIDIzLCAyMTMsIDQ0LCA5MSwgMjUwLCA3NiwgOTEsIDI1MCwgNzUsIDksIDIsIDIyMiwgNjYsIAorICAgIDIzLCAyMDcsIDQxLCA5MSwgMjUwLCA3NSwgOSwgMiwgMjIyLCA2NiwgMjMsIDIwNiwgMTg2LCA5LCAyLCAyMjIsIDUzLCA5LCAKKyAgICAyLCAyMjEsIDg0LCA5LCAyLCAyMjEsIDU2LCA5LCAyLCAyMjEsIDQwLCA5LCAyLCAyMjEsIDQxLCAyMjgsIDkzLCAyMywgCisgICAgMjM4LCAyMjQsIDksIDIsIDIyMSwgNDEsIDIyOCwgOTMsIDIzLCAyMjUsIDc5LCA5LCAyLCAyMjEsIDQxLCAyMjgsIDkzLCAKKyAgICAyMywgMjE1LCA4LCA5LCAyLCAyMjEsIDQxLCAyMjgsIDkzLCAyMywgMjE1LCA5LCAxMTUsIDIyMSwgNDEsIDIyOCwgOTMsIAorICAgIDIzLCAyMTUsIDgsIDksIDIsIDIyMSwgNDEsIDIyOCwgOTMsIDIzLCAyMDYsIDE4NiwgOSwgMiwgMjIxLCA0MSwgMjA5LCAKKyAgICAxNDEsIDksIDIsIDIyMSwgNDEsIDExNSwgMjIxLCA0MCwgOSwgMiwgMjIxLCA0MSwgMjQ1LCAxMjQsIDIyMSwgNDAsIDksIDIsIAorICAgIDIyMSwgNDEsIDI0NSwgMTI0LCAyMjEsIDQxLCAyMjgsIDkzLCAxMTUsIDIyOCwgOTIsIDksIDIsIDIyMSwgMzUsIDksIDIsIAorICAgIDIyMSwgMzYsIDI1MSwgMTUwLCAyMywgMjUwLCA2OSwgOSwgMiwgMjIxLCAzNiwgMjUxLCAxNTAsIDIzLCAyNDgsIDg2LCA5LCAKKyAgICAyLCAyMjEsIDM2LCAyNTEsIDE1MCwgMjMsIDI0MiwgMzcsIDksIDIsIDIyMSwgMzYsIDI1MSwgMTUwLCAyMywgMjM3LCAyMTksIAorICAgIDksIDIsIDIyMSwgMzYsIDI1MSwgMTUwLCAyMywgMjMxLCA4NiwgMjM3LCAyMDgsIDksIDIsIDIyMSwgMzYsIDI1MSwgMTUwLCAKKyAgICAyMywgMjMwLCAyNywgOSwgMiwgMjIxLCAzNiwgMjUxLCAxNTAsIDIzLCAyMjgsIDExMywgOSwgMiwgMjIxLCAzNiwgMjUxLCAKKyAgICAxNTAsIDIzLCAyMjIsIDI0MCwgOSwgMiwgMjIxLCAzNiwgMjUxLCAxNTAsIDIzLCAyMTIsIDEzOCwgOSwgMiwgMjIxLCAzNiwgCisgICAgMjUxLCAxNTAsIDIzLCAyMDcsIDQwLCA5LCAyLCAyMjEsIDM2LCAyMjksIDY5LCAyMywgMjQ4LCA4NiwgOSwgMiwgMjIxLCAKKyAgICAzNiwgMjI5LCA2OSwgMjMsIDI0OCwgODcsIDY4LCA5LCAyLCAxODUsIDksIDIsIDIxOSwgMTU5LCA5LCAyLCAyMTksIDEyMiwgCisgICAgOSwgMiwgMjE5LCA5NiwgOSwgMiwgMjE4LCAyMjIsIDksIDIsIDIxOCwgMTY3LCA5LCAyLCAyMTgsIDE2OCwgMjMsIDYzLCA5LCAKKyAgICAyLCAyMTgsIDE2OCwgMjMsIDI1MSwgMjMyLCA5LCAyLCAyMTgsIDE2OCwgMjMsIDI0OCwgODYsIDksIDIsIDIxOCwgMTY4LCAKKyAgICAyMywgMjQ3LCAxOTMsIDksIDIsIDIxOCwgMTY4LCAyMywgNzQsIDksIDIsIDIxOCwgMTY4LCAyMywgNzUsIDksIDIsIDIxOCwgCisgICAgMTY4LCAyMywgMjM1LCAxNjYsIDksIDIsIDIxOCwgMTY4LCAyMywgNjgsIDksIDIsIDIxOCwgMTY4LCAyMywgMjA3LCA0MCwgCisgICAgOSwgMiwgMjE4LCAxNjgsIDI0NSwgMTI0LCAyMTgsIDE2NywgOSwgMiwgMjE4LCAxMDksIDksIDIsIDIxOCwgMTEwLCAyMywgCisgICAgMjMwLCA4LCA5LCAyLCAyMTgsIDExMCwgMjMsIDIwNywgMjksIDksIDIsIDIxOCwgMTEwLCAyMywgMjAyLCAxMTYsIDksIDIsIAorICAgIDIxOCwgMTEwLCAyMTksIDI1MSwgMjE4LCAxMDksIDksIDIsIDIxNiwgMjIwLCA5LCAyLCAyMTYsIDIxNCwgOSwgMiwgMjE2LCAKKyAgICA1NywgOSwgMiwgMjE1LCAxNDUsIDksIDIsIDIxNSwgMzYsIDksIDIsIDIxNSwgMjMsIDIyMSwgMjYsIDksIDIsIDIxNSwgMjIsIAorICAgIDksIDIsIDIxNSwgMjMsIDIzLCA2MywgOSwgMiwgMjE1LCAyMywgMjMsIDI0MiwgNDIsIDksIDIsIDIxNSwgMjMsIDIzLCAKKyAgICAyNDIsIDQwLCA5LCAyLCAyMTUsIDIzLCAyMywgMTUyLCA5LCAyLCAyMTUsIDIzLCAyMywgMjMwLCAxMiwgOSwgMiwgMjE1LCAKKyAgICAyMywgMjMsIDIyOCwgMTgzLCA5LCAyLCAyMTUsIDIzLCAyMywgMjI2LCAyMjIsIDksIDIsIDIxNSwgMjMsIDIzLCAyMjQsIAorICAgIDE1NSwgOSwgMiwgMjE1LCAyMywgMjMsIDIyMSwgNDAsIDksIDIsIDIxNSwgMjMsIDIzLCAyMTUsIDgsIDksIDIsIDIxNSwgCisgICAgMjMsIDIzLCAyMTMsIDksIDksIDIsIDIxNSwgMjMsIDIzLCAyMTAsIDEwLCA5LCAyLCAyMTUsIDIzLCAyMywgMjA3LCA0MCwgCisgICAgOSwgMiwgMjE1LCAyMywgMjMsIDIwNywgMzUsIDksIDIsIDIxNSwgMjMsIDIzLCAyMDcsIDYsIDksIDIsIDIxNSwgMjMsIDIzLCAKKyAgICAyMDYsIDIxMCwgOSwgMiwgMjE1LCAyMywgMjMsIDIwNiwgMTg2LCA5LCAyLCAyMTUsIDIzLCAxMTUsIDIxNSwgMjIsIDksIDIsIAorICAgIDIxNSwgMjMsIDIzNywgMjA4LCA5LCAyLCAyMTUsIDgsIDksIDIsIDIxNSwgOSwgMjI4LCA5NSwgMjMsIDI1MCwgNzMsIDksIAorICAgIDIsIDIxNCwgMjM4LCA5LCAyLCAyMTQsIDIzMCwgOSwgMiwgMjEzLCA5MCwgOSwgMiwgMjEzLCA4OCwgOSwgMiwgMjEzLCA4OSwgCisgICAgMjMsIDYzLCA5LCAyLCAyMTMsIDg5LCAyMywgMjQ5LCAxNSwgOSwgMiwgMjEzLCA4OSwgMjMsIDIzOCwgNTUsIDksIDIsIAorICAgIDIxMywgODksIDIzLCAyMjIsIDI0MCwgOSwgMiwgMjEzLCA4OSwgMjMsIDIxMiwgMTk3LCA5LCAyLCAyMTMsIDg5LCAyMywgCisgICAgMjA3LCAxODEsIDksIDIsIDIxMywgODksIDIzLCA2OCwgOSwgMiwgMjEzLCA4OSwgMjMsIDEwNiwgOTEsIDYzLCA5LCAyLCAKKyAgICAyMTMsIDg2LCA5LCAyLCAyMTMsIDg0LCA5LCAyLCAyMTMsIDU5LCA5LCAyLCAyMTMsIDQzLCA5LCAyLCAyMTMsIDQ0LCAyMzYsIAorICAgIDI2LCA5LCAyLCAyMTMsIDQ0LCAxMTUsIDIxMywgNDQsIDIzOSwgMCwgMTE1LCAyMzksIDAsIDIzOCwgMjI1LCAxMTUsIDIzOCwgCisgICAgMjI0LCA5LCAyLCAyMTMsIDQ0LCAxMTUsIDIxMywgNDQsIDIxMCwgMTEsIDExNSwgMjEwLCAxMSwgMjM4LCAyMjUsIDExNSwgCisgICAgMjM4LCAyMjQsIDksIDIsIDIxMywgMzYsIDksIDIsIDIxMywgMzEsIDksIDIsIDIxMywgMjcsIDksIDIsIDIxMywgMjYsIDksIAorICAgIDIsIDIxMywgMjMsIDksIDIsIDIxMywgOSwgOSwgMiwgMjEzLCAxMCwgMjMsIDYzLCA5LCAyLCAyMTMsIDEwLCAyMywgMjMxLCAKKyAgICA2NiwgOSwgMiwgMjEzLCAzLCA5LCAyLCAyMTMsIDQsIDIzLCA2MywgOSwgMiwgMjEzLCA0LCAyMywgMjQ4LCAyNTMsIDksIDIsIAorICAgIDIxMywgNCwgMjMsIDI0NywgMTcxLCA5LCAyLCAyMTMsIDQsIDIzLCAyNDMsIDE3NiwgOSwgMiwgMjEzLCA0LCAyMywgMjM4LCAKKyAgICAyMjQsIDksIDIsIDIxMywgNCwgMjMsIDIzMSwgODUsIDksIDIsIDIxMywgNCwgMjMsIDIzMSwgODYsIDIzNywgMjA4LCA5LCAKKyAgICAyLCAyMTMsIDQsIDIzLCAyMjgsIDE3NywgOSwgMiwgMjEzLCA0LCAyMywgMjI2LCAyMjQsIDksIDIsIDIxMywgNCwgMjMsIAorICAgIDIyMywgMjM1LCA5LCAyLCAyMTMsIDQsIDIzLCAyMTUsIDgsIDksIDIsIDIxMiwgMjUzLCA5LCAyLCAyMTIsIDI0OCwgOSwgMiwgCisgICAgMjEyLCAyNDksIDIwOSwgMTQxLCA5LCAyLCAyMTIsIDI0OSwgMTE1LCAyMTIsIDI0OSwgMjQ3LCAxNjEsIDExNSwgMjQ3LCAKKyAgICAxNjAsIDksIDIsIDIxMiwgMjQ0LCA5LCAyLCAyMTIsIDE5OSwgOSwgMiwgMjEyLCAyMDAsIDExNSwgMjMwLCAyMzksIDIxMiwgCisgICAgMTk5LCA5LCAyLCAyMTIsIDE5NywgOSwgMiwgMjEyLCAxOTYsIDksIDIsIDIxMiwgMTYyLCA5LCAyLCAyMTIsIDE2MywgMjM3LCAKKyAgICAyMDgsIDksIDIsIDIxMiwgMTQ5LCA5LCAyLCAyMTIsIDE0NywgOSwgMiwgMjEyLCAxNDgsIDExNSwgMjEyLCAxNDgsIDIxMiwgCisgICAgMTk3LCA5LCAyLCAyMTIsIDE0MCwgOSwgMiwgMjEyLCAxMzgsIDksIDIsIDIxMSwgMTAsIDksIDIsIDIxMSwgMTEsIDExNSwgCisgICAgMjExLCAxMCwgOSwgMiwgMjEwLCAyMzIsIDksIDIsIDIxMCwgMjMxLCA5LCAyLCAyMTAsIDIyOSwgOSwgMiwgMjEwLCAyMjAsIAorICAgIDksIDIsIDIxMCwgMjE5LCA5LCAyLCAyMTAsIDE5MywgOSwgMiwgMjEwLCAxOTIsIDksIDIsIDIxMCwgMjIsIDksIDIsIDIxMCwgCisgICAgMjMsIDI1MCwgNTksIDksIDIsIDIxMCwgMjMsIDIzLCAyMzcsIDMsIDksIDIsIDIxMCwgMjMsIDIzLCAyMjQsIDE1NSwgOSwgCisgICAgMiwgMjEwLCAyMywgMjM3LCAyMDgsIDksIDIsIDIxMCwgMTAsIDksIDIsIDIxMCwgMTEsIDExNSwgMjEwLCAxMSwgMjIyLCAKKyAgICAxMDEsIDExNSwgMjIyLCAxMDEsIDI0MywgMTU3LCAxMTUsIDI0MywgMTU2LCA5LCAyLCAyMTAsIDExLCAyMTEsIDE3NiwgOSwgCisgICAgMiwgMjA5LCAyNTUsIDksIDIsIDE2MCwgMjMsIDI0OCwgODYsIDksIDIsIDE2MCwgMjMsIDIzNywgMjE5LCA5LCAyLCAxNjAsIAorICAgIDIzLCAyMTMsIDQzLCA5LCAyLCAxNjAsIDIzLCAyMTIsIDE5OSwgOSwgMiwgMTYwLCAyMywgMjA3LCAxOTcsIDksIDIsIDE2MCwgCisgICAgMjMsIDIwNywgMjksIDksIDIsIDIwOSwgMjQyLCA5LCAyLCAyMDksIDIxOCwgOSwgMiwgMjA5LCAxODcsIDksIDIsIDIwOSwgCisgICAgMTg4LCAyMzcsIDIwOCwgOSwgMiwgMjA5LCAyLCA5LCAyLCAyMDksIDMsIDIwOSwgMTQxLCA5LCAyLCAyMDgsIDIyOSwgOSwgCisgICAgMiwgMjA4LCAyMDYsIDksIDIsIDIwOCwgMjA3LCAyMywgMjA5LCAyNDIsIDksIDIsIDIwOCwgMjA3LCAxMTUsIDIwOCwgMjA2LCAKKyAgICA5LCAyLCAyMDgsIDIwNywgMTE1LCAyMDgsIDIwNywgMjM5LCAwLCAxMTUsIDIzOSwgMCwgMjM4LCAyMjUsIDExNSwgMjM4LCAKKyAgICAyMjQsIDksIDIsIDIwNywgMjAzLCA5LCAyLCAyMDcsIDE5NywgOSwgMiwgMjA3LCAxOTUsIDksIDIsIDIwNywgMTkxLCA5LCAKKyAgICAyLCAyMDcsIDE4MSwgOSwgMiwgMjA3LCAxODIsIDExNSwgMjA3LCAxODIsIDIwMiwgMTE3LCAxMTUsIDIwMiwgMTE2LCA5LCAKKyAgICAyLCA2OCwgOSwgMiwgMTA2LCAyMzcsIDIxOSwgOSwgMiwgMTA2LCAxMDYsIDY4LCA5LCAyLCAxMDYsIDExNSwgMTA2LCAyMTksIAorICAgIDE2OSwgMTE1LCAyMTksIDE2OSwgMjM4LCAyMjUsIDExNSwgMjM4LCAyMjQsIDksIDIsIDEwNiwgMTE1LCAxMDYsIDIxMCwgCisgICAgMTk0LCAxMTUsIDIxMCwgMTkzLCA5LCAyLCAxMDYsIDExNSwgMTA2LCAxMDYsIDIxNiwgNzMsIDExNSwgMTA2LCAyMTYsIDcyLCAKKyAgICA5LCAyLCAyMDcsIDQwLCA5LCAyLCAyMDcsIDM1LCA5LCAyLCAyMDcsIDI5LCA5LCAyLCAyMDcsIDMwLCAyMjgsIDE3NywgOSwgCisgICAgMiwgMjA3LCAzMCwgMjMsIDI0OSwgMTUsIDksIDIsIDIwNywgMzAsIDIzLCAyMjQsIDE1NSwgOSwgMiwgMjA3LCAzMCwgMjMsIAorICAgIDEwNiwgOTEsIDEwNiwgOTEsIDY4LCA5LCAyLCAyMDcsIDMwLCAyMywgMTA2LCA5MSwgMTA2LCA5MSwgMTA2LCAyMzcsIDIwOCwgCisgICAgOSwgMiwgMjA3LCAzMCwgMjM3LCAyMDgsIDksIDIsIDIwNywgMzAsIDIxMywgMjQsIDksIDIsIDIwNywgMzAsIDIxMywgMjUsIAorICAgIDIzLCAyNDksIDE1LCA5LCAyLCAyMDcsIDI1LCA5LCAyLCAyMDcsIDYsIDksIDIsIDIwNywgNywgMjMsIDIyOCwgOTQsIDksIAorICAgIDIsIDIwNywgNywgMjMsIDIyNSwgMjEsIDkxLCAyNDQsIDIxMiwgOSwgMiwgMjA3LCA3LCAyMywgMjEzLCA4OCwgOSwgMiwgCisgICAgMjA3LCA3LCAyMywgNjgsIDksIDIsIDIwNywgNSwgOSwgMiwgMjA3LCAxLCA5LCAyLCAyMDcsIDIsIDIzLCAyMjksIDIzMSwgCisgICAgOSwgMiwgMjA3LCAyLCAyMywgMTg1LCA5LCAyLCAyMDYsIDI1NSwgOSwgMiwgMjA3LCAwLCAyMzcsIDIwOCwgOSwgMiwgMjA2LCAKKyAgICAyMTAsIDksIDIsIDIwNiwgMjExLCAyNDUsIDEyNCwgMjA2LCAyMTAsIDksIDIsIDIwNiwgMjExLCAyMTMsIDI0LCA5LCAyLCAKKyAgICAyMDYsIDIwOCwgOSwgMiwgMjA2LCAyMDksIDIzLCAzNCwgOTEsIDE1MiwgOSwgMiwgMjA2LCAyMDksIDIzLCAzNCwgOTEsIAorICAgIDIwMSwgMjAxLCA5LCAyLCAyMDYsIDIwOSwgMjMsIDI1MSwgMzksIDksIDIsIDIwNiwgMjA5LCAyMywgMTUyLCA5LCAyLCAKKyAgICAyMDYsIDIwOSwgMjMsIDIyMSwgNDAsIDksIDIsIDIwNiwgMjA5LCAyMywgMjA3LCA0MCwgOSwgMiwgMjA2LCAyMDksIDIzLCAKKyAgICAyMDcsIDQxLCA5MSwgMjUwLCA3NSwgOSwgMiwgMjA2LCAyMDksIDIzLCAyMDcsIDQxLCA5MSwgMjQ4LCA4NiwgOSwgMiwgCisgICAgMjA2LCAyMDcsIDksIDIsIDIwNiwgMjA0LCA5LCAyLCAyMDYsIDIwMywgOSwgMiwgMjA2LCAxOTksIDksIDIsIDIwNiwgMjAwLCAKKyAgICAyMywgNjMsIDksIDIsIDIwNiwgMjAwLCAyMywgMjUwLCA2OSwgOSwgMiwgMjA2LCAyMDAsIDIzLCAxNDIsIDksIDIsIDIwNiwgCisgICAgMjAwLCAyMywgMjQyLCAzMSwgOSwgMiwgMjA2LCAyMDAsIDIzLCAyMzksIDgsIDksIDIsIDIwNiwgMjAwLCAyMywgMjM4LCAKKyAgICAyNDYsIDksIDIsIDIwNiwgMjAwLCAyMywgMjM4LCAyMzMsIDIwOSwgMTQxLCA5LCAyLCAyMDYsIDIwMCwgMjMsIDIzOCwgCisgICAgMjI0LCA5LCAyLCAyMDYsIDIwMCwgMjMsIDIzNywgMjMwLCA5LCAyLCAyMDYsIDIwMCwgMjMsIDE1MiwgOSwgMiwgMjA2LCAKKyAgICAyMDAsIDIzLCAyMzEsIDg1LCA5LCAyLCAyMDYsIDIwMCwgMjMsIDIzMSwgNjYsIDksIDIsIDIwNiwgMjAwLCAyMywgMjMwLCAKKyAgICAyMDksIDksIDIsIDIwNiwgMjAwLCAyMywgMjI5LCAxMDAsIDksIDIsIDIwNiwgMjAwLCAyMywgMjI2LCAyMjIsIDksIDIsIAorICAgIDIwNiwgMjAwLCAyMywgMjI0LCAxMTAsIDksIDIsIDIwNiwgMjAwLCAyMywgMTg1LCA5LCAyLCAyMDYsIDIwMCwgMjMsIDIxMywgCisgICAgNDMsIDksIDIsIDIwNiwgMjAwLCAyMywgMjEyLCAxNDcsIDksIDIsIDIwNiwgMjAwLCAyMywgMjA3LCAyMDMsIDksIDIsIAorICAgIDIwNiwgMjAwLCAyMywgMTA2LCA5MSwgMjM3LCAyMTksIDksIDIsIDIwNiwgMjAwLCAyMywgMjA3LCAyOSwgOSwgMiwgMjA2LCAKKyAgICAyMDAsIDIzLCAyMDYsIDE5NywgOSwgMiwgMjA2LCAxOTcsIDksIDIsIDIwNiwgMTk4LCAyMywgNjgsIDksIDIsIDIwNiwgCisgICAgMTg2LCA5LCAyLCAyMDYsIDE4NywgMjMsIDYzLCA5LCAyLCAyMDYsIDE4NywgMjMsIDIyOCwgMjA5LCA5LCAyLCAyMDYsIAorICAgIDE4NywgMjMsIDIyOCwgMTgzLCA5LCAyLCAyMDYsIDE4NywgMjMsIDIwOSwgMjQyLCA5LCAyLCAyMDYsIDE4MiwgOSwgMiwgCisgICAgMjA2LCAxODUsIDksIDIsIDIwNiwgMTgzLCA5LCAyLCAyMDYsIDE3OSwgOSwgMiwgMjA2LCAxNjcsIDksIDIsIDIwNiwgMTY4LCAKKyAgICAyMywgMjI5LCAyMzEsIDksIDIsIDIwNiwgMTY2LCA5LCAyLCAyMDIsIDExNiwgOSwgMiwgMjAyLCAxMTcsIDIwOSwgMTQxLCAKKyAgICA5LCAyLCAyMDIsIDExNywgMTAzLCAyMywgMjI4LCAxODMsIDksIDIsIDIwMiwgMTEyLCA5LCAyLCAyMDIsIDEwNSwgOSwgMiwgCisgICAgMjAyLCA5MSwgOSwgMiwgMjAyLCAzOSwgOSwgMiwgMjAyLCA0MCwgMTE1LCAyMDIsIDM5LCA5LCAyLCAyMDIsIDM4LCA5LCAyLCAKKyAgICAyMDIsIDM2LCA5LCAyLCAyMDIsIDM3LCAyMzAsIDMxLCAyMDksIDE0MSwgOSwgMiwgMjAyLCAzMSwgOSwgMiwgMjAyLCAyMiwgCisgICAgOSwgMiwgMjAyLCA2LCA5LCAyLCAyMDIsIDQsIDksIDIsIDIwMiwgNSwgMjMsIDYzLCA5LCAyLCAyMDIsIDMsIDksIDIsIAorICAgIDIwMiwgMiwgOSwgMiwgMjI5LCAyNTQsIDI0MSwgMTE5LCA5LCAyLCAyNTEsIDIzMywgMjMsIDIyMSwgNDAsIDksIDIsIDI1MSwgCisgICAgMTUwLCAyMywgNjMsIDksIDIsIDI1MCwgMjQ0LCAyMywgMjI4LCAxOTgsIDksIDIsIDI0NCwgMjA0LCAyMjksIDY5LCAyMywgCisgICAgMjA3LCA0MSwgOTEsIDIyNSwgNzksIDksIDIsIDI0NCwgMjAyLCA5LCAyLCAyNDMsIDE1NywgOTEsIDIxMiwgMTk5LCA5LCAyLCAKKyAgICAyNDIsIDQxLCAyMywgMjEzLCA0MywgOSwgMiwgMjQwLCAxODAsIDIzLCAyMzcsIDIxOSwgOSwgMiwgMjQwLCAxODAsIDIzLCAKKyAgICAyMTMsIDQzLCA5LCAyLCAyMzksIDcsIDIzLCAyNTAsIDIzMiwgOTEsIDIzMCwgMTMsIDkxLCA2MywgOSwgMiwgMjM5LCA3LCAKKyAgICAyMywgMjUwLCA3MywgOSwgMiwgMjM4LCAxODksIDksIDIsIDIzOCwgNzEsIDksIDIsIDIzNiwgMywgOSwgMiwgMjMwLCA0NCwgCisgICAgMjMsIDI1MCwgMjAwLCA5LCAyLCAyMzAsIDQ0LCAyMywgMjUwLCA3MiwgOSwgMiwgMjMwLCA0NCwgMjMsIDIzOCwgNTUsIDksIAorICAgIDIsIDIzMCwgNDQsIDIzLCAyMzcsIDIxOSwgOSwgMiwgMjMwLCA0NCwgMjMsIDIzNywgNCwgMjMsIDI1MCwgNzMsIDksIDIsIAorICAgIDIzMCwgNDQsIDIzLCAyMjYsIDIyMiwgOSwgMiwgMjMwLCA0NCwgMjMsIDE4NSwgOSwgMiwgMjMwLCA0NCwgMjMsIDIxMiwgCisgICAgMTkyLCA5LCAyLCAyMzAsIDQ0LCAyMywgMjA3LCAyMDMsIDksIDIsIDIzMCwgNDQsIDIzLCAyMDYsIDIwOCwgOSwgMiwgMjI4LCAKKyAgICA5NSwgMjMsIDIzOCwgODEsIDksIDIsIDIyNiwgMjM4LCAyMTMsIDI1LCAyMywgMjQ5LCAxNSwgOSwgMiwgMjI2LCAyMzgsIAorICAgIDIzLCAyNDEsIDUsIDkxLCAyMjgsIDMwLCA5LCAyLCAyMjYsIDIzOCwgMjMsIDIxMiwgMTk5LCA5LCAyLCAyMjQsIDIyNywgOSwgCisgICAgMiwgMjIzLCAxOTgsIDIzLCAyMDIsIDExNiwgOSwgMiwgMjIzLCAxMDgsIDksIDIsIDIyMiwgNjgsIDksIDIsIDIyMiwgNjcsIAorICAgIDksIDIsIDIyMiwgNjYsIDIzLCAyNDgsIDI1MywgOSwgMiwgMjIyLCA2NiwgMjMsIDIzOCwgODEsIDksIDIsIDIyMSwgNTcsIAorICAgIDIxNSwgMTk4LCAyMjIsIDU5LCAyNDQsIDU0LCA5LCAyLCAyMTgsIDIyMywgMjUwLCA1OSwgOSwgMiwgMjE4LCAxMTMsIDksIAorICAgIDIsIDIxNSwgMjMsIDIzLCAyMzEsIDg2LCAyMzcsIDIwOCwgOSwgMiwgMjA5LCAxLCA5LCAyLCAyMDcsIDcsIDIzLCAyMjUsIAorICAgIDIwLCA5LCAyLCAxMDYsIDY4LCA5LCAxNDEsIDIsIDEyMCwgMjUwLCA3NSwgOSwgMTQxLCAyLCAxMjYsIDI1MCwgNzUsIDksIAorICAgIDE0MSwgMiwgMjM5LCAxNDcsIDI1MCwgNzUsIDksIDE0MSwgMiwgMjM5LCAyMzMsIDI1MCwgNzUsIDksIDE0MSwgMiwgMjEyLCAKKyAgICA4OCwgMjUwLCA3NSwgOSwgMTQxLCAyLCAyMTMsIDExMiwgMjUwLCA3NSwgOSwgMTQxLCAyLCAyNDEsIDE0MywgMjUwLCA3NSwgCisgICAgOSwgMTQxLCAyLCAyMjIsIDY0LCAyNTAsIDc1LCA5LCAxNDEsIDIsIDEyNiwgMjQzLCAxNTYsIDksIDE0MSwgMiwgMjM5LCAKKyAgICAxNDcsIDI0MywgMTU2LCA5LCAxNDEsIDIsIDIzOSwgMjMzLCAyNDMsIDE1NiwgOSwgMTQxLCAyLCAyMTIsIDg4LCAyNDMsIAorICAgIDE1NiwgOSwgMTQxLCAyLCAyMTMsIDExMiwgMjQzLCAxNTYsIDksIDE0MSwgMiwgMjQxLCAxNDMsIDI0MywgMTU2LCA5LCAKKyAgICAxNDEsIDIsIDIyMiwgNjQsIDI0MywgMTU2LCA5LCAxNDEsIDIsIDIzOSwgMTQ3LCA2OCwgOSwgMTQxLCAyLCAyMzksIDIzMywgCisgICAgNjgsIDksIDE0MSwgMiwgMjEyLCA4OCwgNjgsIDksIDE0MSwgMiwgMjEzLCAxMTIsIDY4LCA5LCAxNDEsIDIsIDI0MSwgMTQzLCAKKyAgICA2OCwgOSwgMTQxLCAyLCAyMjIsIDY0LCA2OCwgOSwgMTQxLCAyLCAxMTgsIDIzOCwgMTY0LCA5LCAxNDEsIDIsIDEyMCwgCisgICAgMjM4LCAxNjQsIDksIDE0MSwgMiwgMTI2LCAyMzgsIDE2NCwgOSwgMTQxLCAyLCAyMzksIDE0NywgMjM4LCAxNjQsIDksIAorICAgIDE0MSwgMiwgMjM5LCAyMzMsIDIzOCwgMTY0LCA5LCAxNDEsIDIsIDIxMiwgODgsIDIzOCwgMTY0LCA5LCAxNDEsIDIsIDIxMywgCisgICAgMTEyLCAyMzgsIDE2NCwgOSwgMTQxLCAyLCAyNDEsIDE0MywgMjM4LCAxNjQsIDksIDE0MSwgMiwgMjIyLCA2NCwgMjM4LCAKKyAgICAxNjQsIDksIDE0MSwgMiwgMTE4LCAyMzgsIDE2MSwgOSwgMTQxLCAyLCAxMjAsIDIzOCwgMTYxLCA5LCAxNDEsIDIsIDEyNiwgCisgICAgMjM4LCAxNjEsIDksIDE0MSwgMiwgMjM5LCAxNDcsIDIzOCwgMTYxLCA5LCAxNDEsIDIsIDIzOSwgMjMzLCAyMzgsIDE2MSwgCisgICAgOSwgMTQxLCAyLCAxMjAsIDIxMywgNTksIDksIDE0MSwgMiwgMTI2LCAyMTMsIDU5LCA5LCAxNDEsIDIsIDEyNiwgMjEzLCAKKyAgICA2MCwgMjA2LCA2OSwgMTgsIDksIDE0MSwgMiwgMjM5LCAxNDcsIDIxMywgNTksIDksIDE0MSwgMiwgMjM5LCAyMzMsIDIxMywgCisgICAgNTksIDksIDE0MSwgMiwgMjEyLCA4OCwgMjEzLCA1OSwgOSwgMTQxLCAyLCAyMTMsIDExMiwgMjEzLCA1OSwgOSwgMTQxLCAyLCAKKyAgICAyNDEsIDE0MywgMjEzLCA1OSwgOSwgMTQxLCAyLCAyMjIsIDY0LCAyMTMsIDU5LCA5LCAxNDEsIDIsIDExOCwgMjEzLCA1NCwgCisgICAgOSwgMTQxLCAyLCAxMjAsIDIxMywgNTQsIDksIDE0MSwgMiwgMTI2LCAyMTMsIDU0LCA5LCAxNDEsIDIsIDEyNiwgMjEzLCAKKyAgICA1NSwgMjA2LCA2OSwgMTgsIDksIDE0MSwgMiwgMjM5LCAxNDcsIDIxMywgNTQsIDksIDE0MSwgMiwgMjM5LCAyMzMsIDIxMywgCisgICAgNTQsIDksIDE0MSwgMiwgMjEzLCA2MCwgMjMsIDIzOCwgMjQ3LCA5MSwgMjQzLCAxNTYsIDksIDE0MSwgMiwgMjEzLCA2MCwgCisgICAgMjMsIDIzOCwgMjQ3LCA5MSwgMjI0LCAxMTAsIDksIDE0MSwgMiwgMTE4LCAyNDcsIDE1NiwgOSwgMTQxLCAyLCAxMjAsIAorICAgIDI0NywgMTU2LCA5LCAxNDEsIDIsIDEyNiwgMjQ3LCAxNTYsIDksIDE0MSwgMiwgMTI2LCAyNDcsIDE1NywgMjA2LCA2OSwgCisgICAgMTgsIDksIDE0MSwgMiwgMjM5LCAxNDcsIDI0NywgMTU2LCA5LCAxNDEsIDIsIDIzOSwgMjMzLCAyNDcsIDE1NiwgOSwgMTQxLCAKKyAgICAyLCAxMjYsIDIwNiwgNjksIDIzOSwgMTU5LCAyNDEsIDYsIDksIDE0MSwgMiwgMTI2LCAyMDYsIDY5LCAyMzksIDE1OSwgCisgICAgMjQxLCAzLCA5LCAxNDEsIDIsIDIzOSwgMTQ3LCAyMDYsIDY5LCAyMzksIDE1OSwgMjI3LCAxMTgsIDksIDE0MSwgMiwgMjM5LCAKKyAgICAxNDcsIDIwNiwgNjksIDIzOSwgMTU5LCAyMjcsIDExNiwgOSwgMTQxLCAyLCAyMzksIDE0NywgMjA2LCA2OSwgMjM5LCAxNTksIAorICAgIDIyNywgMTE5LCA2MywgOSwgMTQxLCAyLCAyMzksIDE0NywgMjA2LCA2OSwgMjM5LCAxNTksIDIyNywgMTE5LCAyNDksIDI1NSwgCisgICAgOSwgMTQxLCAyLCAyMTIsIDg4LCAyMDYsIDY5LCAyMzksIDE1OSwgMjUwLCA3MSwgOSwgMTQxLCAyLCAyMTMsIDExMiwgMjA2LCAKKyAgICA2OSwgMjM5LCAxNTksIDIzMSwgNTgsIDksIDE0MSwgMiwgMjEzLCAxMTIsIDIwNiwgNjksIDIzOSwgMTU5LCAyMzEsIDYwLCAKKyAgICA2MywgOSwgMTQxLCAyLCAyMTMsIDExMiwgMjA2LCA2OSwgMjM5LCAxNTksIDIzMSwgNjAsIDI0OSwgMjU1LCA5LCAxNDEsIDIsIAorICAgIDI0MSwgMTQzLCAyMDYsIDY5LCAyMzksIDE1OSwgMjA2LCAxODEsIDksIDE0MSwgMiwgMjQxLCAxNDMsIDIwNiwgNjksIDIzOSwgCisgICAgMTU5LCAyMDYsIDE4MCwgOSwgMTQxLCAyLCAyMjIsIDY0LCAyMDYsIDY5LCAyMzksIDE1OSwgMjMxLCA3NCwgOSwgMTQxLCAyLCAKKyAgICAyMjIsIDY0LCAyMDYsIDY5LCAyMzksIDE1OSwgMjMxLCA3MywgOSwgMTQxLCAyLCAyMjIsIDY0LCAyMDYsIDY5LCAyMzksIAorICAgIDE1OSwgMjMxLCA3MiwgOSwgMTQxLCAyLCAyMjIsIDY0LCAyMDYsIDY5LCAyMzksIDE1OSwgMjMxLCA3NSwgNjMsIDksIDE0MSwgCisgICAgMiwgMTIwLCAyNTAsIDc2LCAyMDksIDE0MSwgOSwgMTQxLCAyLCAxMjYsIDI1MCwgNzYsIDIwOSwgMTQxLCA5LCAxNDEsIDIsIAorICAgIDIzOSwgMTQ3LCAyNTAsIDc2LCAyMDksIDE0MSwgOSwgMTQxLCAyLCAyMzksIDIzMywgMjUwLCA3NiwgMjA5LCAxNDEsIDksIAorICAgIDE0MSwgMiwgMjEyLCA4OCwgMjUwLCA3NiwgMjA5LCAxNDEsIDksIDE0MSwgMiwgMTE4LCAyNDgsIDI0MCwgOSwgMTQxLCAyLCAKKyAgICAxMjAsIDI0OCwgMjQwLCA5LCAxNDEsIDIsIDEyNiwgMjQ4LCAyNDAsIDksIDE0MSwgMiwgMjM5LCAxNDcsIDI0OCwgMjQwLCAKKyAgICA5LCAxNDEsIDIsIDIzOSwgMTQ3LCAyNDgsIDI0MSwgMjA2LCA2OSwgMTgsIDksIDE0MSwgMiwgMjM5LCAyMzMsIDI0OCwgCisgICAgMjQwLCA5LCAxNDEsIDIsIDIzOSwgMjMzLCAyNDgsIDI0MSwgMjA2LCA2OSwgMTgsIDksIDE0MSwgMiwgMjIyLCA3NywgOSwgCisgICAgMTQxLCAyLCAyMjIsIDc4LCA5LCAxNDEsIDIsIDExOCwgMjQxLCAyLCA5LCAxNDEsIDIsIDEyMCwgMjQxLCAyLCA5LCAxNDEsIAorICAgIDIsIDExOCwgMjA5LCA2MSwgMjQzLCAxNTYsIDksIDE0MSwgMiwgMTIwLCAyMDksIDU4LCAyNDMsIDE1NiwgOSwgMTQxLCAyLCAKKyAgICAyMzksIDIzMywgMjEyLCA3NywgMjQzLCAxNTYsIDksIDE0MSwgMiwgMTE4LCAyMDksIDYxLCAyMDYsIDY5LCAyMzksIDE1OSwgCisgICAgNjMsIDksIDE0MSwgMiwgMTIwLCAyMDksIDU4LCAyMDYsIDY5LCAyMzksIDE1OSwgNjMsIDksIDE0MSwgMiwgMTE4LCAyNDEsIAorICAgIDEzOSwgMjUwLCA3NSwgOSwgMTQxLCAyLCAxMTgsIDIxNywgNTYsIDI1MCwgNzUsIDksIDE0MSwgMiwgMzgsIDI1MCwgNjIsIAorICAgIDExOCwgMjEyLCA3OCwgOSwgMTQxLCAyLCAzOCwgMjUwLCA2MiwgMTE4LCAyMTcsIDU1LCA5LCAxNDEsIDIsIDExOCwgMjE3LCAKKyAgICA1NiwgMjM3LCAyMDIsIDksIDE0MSwgMiwgMTE4LCAxNjIsIDIzNywgMjAyLCA5LCAxNDEsIDIsIDI0MSwgMTIwLCAxMTgsIAorICAgIDIwOSwgNjAsIDksIDE0MSwgMiwgMjQxLCAxMjAsIDEyMCwgMjA5LCA1NywgOSwgMTQxLCAyLCAyNDEsIDEyMCwgMjM5LCAKKyAgICAxNTMsIDksIDE0MSwgMiwgMjQxLCAxMjAsIDI0MCwgMTgsIDksIDE0MSwgMiwgMjM5LCAxNDcsIDEwNiwgMjA2LCA2OSwgMTgsIAorICAgIDksIDE0MSwgMiwgMjM5LCAyMzMsIDEwNiwgMjA2LCA2OSwgMTgsIDksIDE0MSwgMiwgMjEyLCA4OCwgMTA2LCAyMDYsIDY5LCAKKyAgICAxOCwgOSwgMTQxLCAyLCAyMTMsIDExMiwgMTA2LCAyMDYsIDY5LCAxOCwgOSwgMTQxLCAyLCAyNDEsIDE0MywgMTA2LCAyMDYsIAorICAgIDY5LCAxOCwgOSwgMTQxLCAyLCAyMjIsIDY0LCAxMDYsIDIwNiwgNjksIDE4LCA5LCAyMTcsIDE3OSwgMiwgMzgsIDI1MCwgCisgICAgNjIsIDIwMywgMjM4LCAyNDMsIDE0MSwgOSwgMjE3LCAxNzksIDIsIDgwLCAyNDUsIDI0MiwgOSwgMjE3LCAxNzksIDIsIAorICAgIDI0MywgMjI4LCAyNDUsIDI0MiwgOSwgMjE3LCAxNzksIDIsIDI0MywgMjI4LCAyMDgsIDgxLCA5LCAyMTcsIDE3OSwgMiwgCisgICAgMjQzLCAyMjgsIDIxNywgNjEsIDksIDIsIDI1MSwgMjMzLCAyMywgMjIxLCA0MSwgMjA5LCAxNDEsIDksIDIsIDI1MSwgMjMzLCAKKyAgICAyMywgMjEyLCAxOTcsIDksIDIsIDI1MSwgMTIzLCAyMywgMjQxLCA0LCA5LCAyLCAyNDksIDE2LCAyMywgMjQzLCAxNTcsIAorICAgIDIwOSwgMTQxLCA5LCAyLCAyNDksIDQsIDIzLCAyNTEsIDE0OSwgOSwgMiwgMjQ5LCA0LCAyMywgMjIyLCAxMDAsIDksIDIsIAorICAgIDI0OSwgNCwgMjMsIDIwMiwgMTE2LCA5LCAyLCAyNDcsIDE5NCwgMTE1LCAyNDcsIDE5NCwgMjMsIDIyMywgMTA5LCA5LCAyLCAKKyAgICAyNDQsIDIxMywgMjMsIDIwOSwgMjQyLCA5LCAyLCAyNDQsIDIwNCwgMjMsIDIyOCwgMTgzLCA5LCAyLCAyNDMsIDE4OSwgMjMsIAorICAgIDIzMSwgODUsIDksIDIsIDI0MywgMTg5LCAyMywgMTA2LCAxMDYsIDY4LCA5LCAyLCAyNDMsIDE4NywgMjMsIDIwNywgMjksIAorICAgIDksIDIsIDI0MiwgMzgsIDIzLCAyNTAsIDIwMCwgOSwgMiwgMjQyLCAzOCwgMjMsIDI1MCwgNzUsIDksIDIsIDI0MiwgMzgsIAorICAgIDIzLCAyNTAsIDc2LCAyNTAsIDUwLCAyMjcsIDIyMiwgOSwgMiwgMjQyLCAzOCwgMjMsIDI0MywgMTc2LCA5LCAyLCAyNDIsIAorICAgIDM4LCAyMywgMjQyLCAzMSwgOSwgMiwgMjQyLCAzOCwgMjMsIDI0MSwgMjIsIDksIDIsIDI0MiwgMzgsIDIzLCAyMzksIDgsIAorICAgIDksIDIsIDI0MiwgMzgsIDIzLCAyMzgsIDgxLCA5LCAyLCAyNDIsIDM4LCAyMywgMjM4LCA2NCwgMjM3LCAyMDgsIDksIDIsIAorICAgIDI0MiwgMzgsIDIzLCAyMzgsIDU1LCA5LCAyLCAyNDIsIDM4LCAyMywgMTUyLCA5LCAyLCAyNDIsIDM4LCAyMywgMjM3LCAzLCAKKyAgICA5LCAyLCAyNDIsIDM4LCAyMywgMjMxLCA4NiwgMjM3LCAyMDgsIDksIDIsIDI0MiwgMzgsIDIzLCAyMjksIDIzMSwgOSwgMiwgCisgICAgMjQyLCAzOCwgMjMsIDIyOCwgMTgzLCA5LCAyLCAyNDIsIDM4LCAyMywgMjI4LCAxNzcsIDksIDIsIDI0MiwgMzgsIDIzLCAKKyAgICAyMjgsIDE3OCwgOTEsIDIyOSwgMjMxLCA5LCAyLCAyNDIsIDM4LCAyMywgMjI4LCA4MiwgOSwgMiwgMjQyLCAzOCwgMjMsIAorICAgIDIyOCwgMjgsIDksIDIsIDI0MiwgMzgsIDIzLCAyMjgsIDI5LCAyMywgMjI4LCAxODMsIDksIDIsIDI0MiwgMzgsIDIzLCAKKyAgICAyMjYsIDIyOCwgOTEsIDIzOCwgNTUsIDksIDIsIDI0MiwgMzgsIDIzLCAyMjUsIDc5LCA5LCAyLCAyNDIsIDM4LCAyMywgCisgICAgMjI0LCAyMjgsIDksIDIsIDI0MiwgMzgsIDIzLCAyMjQsIDE1NSwgOSwgMiwgMjQyLCAzOCwgMjMsIDIyMiwgMTAwLCA5LCAyLCAKKyAgICAyNDIsIDM4LCAyMywgMjE4LCAxNjcsIDksIDIsIDI0MiwgMzgsIDIzLCAyMTMsIDQzLCA5LCAyLCAyNDIsIDM4LCAyMywgCisgICAgMjEyLCAxNjMsIDIzNywgMjA4LCA5LCAyLCAyNDEsIDE5MSwgMjMsIDIyOCwgMTgzLCA5LCAyLCAyNDEsIDE5MSwgMjMsIAorICAgIDIxOSwgOTYsIDksIDIsIDI0MSwgMjMsIDIwMywgMTk2LCA5LCAyLCAyNDEsIDUsIDI0NSwgMTI0LCAyNDEsIDQsIDksIDIsIAorICAgIDI0MCwgMTgwLCAyMTMsIDI1LCAyMywgMjUwLCA3NSwgOSwgMiwgMjQwLCAxODAsIDIxMywgMjUsIDIzLCAyMzcsIDMsIDksIAorICAgIDIsIDI0MCwgMTgwLCAyMTMsIDI1LCAyMywgMjMxLCA4NiwgMjM3LCAyMDgsIDksIDIsIDI0MCwgMTgwLCAyMTMsIDI1LCAyMywgCisgICAgMjI4LCAxMTMsIDksIDIsIDI0MCwgMTgwLCAyMTMsIDI1LCAyMywgMjI4LCAzMCwgOSwgMiwgMjQwLCAxODAsIDIxMywgMjUsIAorICAgIDIzLCAyMjUsIDIwLCA5LCAyLCAyNDAsIDE4MCwgMjEzLCAyNSwgMjMsIDIyNCwgMjI4LCA5LCAyLCAyNDAsIDE4MCwgMjEzLCAKKyAgICAyNSwgMjMsIDIxMSwgMTAsIDksIDIsIDI0MCwgMTgwLCAyMywgMjExLCAxMCwgOSwgMiwgMjM5LCA3LCAyMywgMjQ5LCAzLCAKKyAgICA5LCAyLCAyMzksIDcsIDIzLCAyNDMsIDE4OSwgMjM3LCAyMDgsIDksIDIsIDIzOSwgNywgMjMsIDI0MiwgMzgsIDIzLCAyMzEsIAorICAgIDg2LCAyMzcsIDIwOCwgOSwgMiwgMjM5LCA3LCAyMywgMjQyLCAzOCwgMjMsIDIyOSwgMjMxLCA5LCAyLCAyMzksIDcsIDIzLCAKKyAgICAyNDEsIDI1LCA5LCAyLCAyMzksIDcsIDIzLCAyMzksIDgsIDksIDIsIDIzOSwgNywgMjMsIDIzOCwgMjI1LCA5MSwgMjQzLCAKKyAgICAyMzMsIDksIDIsIDIzOSwgNywgMjMsIDIzOCwgMjI1LCA5MSwgMjIyLCAyNDAsIDksIDIsIDIzOSwgNywgMjMsIDIzNywgCisgICAgMTYwLCA5MSwgNjMsIDksIDIsIDIzOSwgNywgMjMsIDIyOCwgMTc4LCA5MSwgMjI5LCAyMzEsIDksIDIsIDIzOSwgNywgMjMsIAorICAgIDIyOCwgMjgsIDksIDIsIDIzOSwgNywgMjMsIDIyOCwgMjksIDIzLCAyMjgsIDE4MywgOSwgMiwgMjM5LCA3LCAyMywgMjI2LCAKKyAgICAyMjcsIDksIDIsIDIzOSwgNywgMjMsIDIyMywgMTk5LCA5LCAyLCAyMzksIDcsIDIzLCAyMjIsIDI0MCwgOSwgMiwgMjM5LCAKKyAgICA3LCAyMywgMjIyLCAyNDEsIDkxLCAyNDEsIDE5MCwgOSwgMiwgMjM5LCA3LCAyMywgMjIyLCAyNDEsIDkxLCAyMzgsIDgxLCAKKyAgICA5LCAyLCAyMzksIDcsIDIzLCAyMTMsIDMsIDksIDIsIDIzOSwgNywgMjMsIDIwMiwgMjIsIDksIDIsIDIzOSwgMiwgMjE1LCAKKyAgICAxOTgsIDIyMiwgNTksIDI0NCwgNTQsIDksIDIsIDIzOCwgMTYzLCAyMywgNjgsIDksIDIsIDIzOCwgNTYsIDIzLCAyMzgsIAorICAgIDU2LCAyNDUsIDEyNCwgMjM4LCA1NSwgOSwgMiwgMjM3LCAyMjksIDIzLCAyMzEsIDg2LCAyMzcsIDIwOCwgOSwgMiwgMjM3LCAKKyAgICAyMjAsIDkxLCAyMzgsIDU2LCAyMywgMjA5LCAyNDIsIDksIDIsIDIzNywgMTYwLCAyMDksIDE0MiwgMjM3LCAyMDgsIDksIDIsIAorICAgIDIzNywgNCwgMjMsIDI1MCwgNzYsIDExNSwgMjM3LCA0LCAyMywgMjUwLCA3NSwgOSwgMiwgMjMwLCA0NCwgMjMsIDI0NywgCisgICAgMTkzLCA5LCAyLCAyMzAsIDQ0LCAyMywgMTczLCA5LCAyLCAyMzAsIDQ0LCAyMywgMTA2LCAxMDYsIDY4LCA5LCAyLCAyMzAsIAorICAgIDQ0LCAyMywgMjA2LCAyMTAsIDksIDIsIDIyOCwgOTUsIDIzLCAyMDIsIDcsIDExNSwgMjAyLCA2LCA5LCAyLCAyMjgsIDgzLCAKKyAgICA5LCAyLCAyMjgsIDgxLCA5LCAyLCAyMjgsIDgwLCA5LCAyLCAyMjgsIDc5LCA5LCAyLCAyMjgsIDc4LCA5LCAyLCAyMjgsIAorICAgIDc3LCA5LCAyLCAyMjgsIDc2LCA5LCAyLCAyMjgsIDc1LCAxMTUsIDIyOCwgNzUsIDIzNywgMjA4LCA5LCAyLCAyMjgsIDc0LCAKKyAgICA5LCAyLCAyMjgsIDczLCAxMTUsIDIyOCwgNzIsIDksIDIsIDIyOCwgNzEsIDksIDIsIDIyOCwgNzAsIDksIDIsIDIyOCwgNjksIAorICAgIDksIDIsIDIyOCwgNjgsIDksIDIsIDIyOCwgNjcsIDksIDIsIDIyOCwgNjYsIDksIDIsIDIyOCwgNjUsIDksIDIsIDIyOCwgCisgICAgNjQsIDksIDIsIDIyOCwgNjMsIDksIDIsIDIyOCwgNjIsIDksIDIsIDIyOCwgNjEsIDksIDIsIDIyOCwgNjAsIDksIDIsIAorICAgIDIyOCwgNTksIDksIDIsIDIyOCwgNTgsIDksIDIsIDIyOCwgNTcsIDksIDIsIDIyOCwgNTYsIDksIDIsIDIyOCwgNTUsIDksIAorICAgIDIsIDIyOCwgNTQsIDksIDIsIDIyOCwgNTIsIDksIDIsIDIyOCwgNTMsIDIzLCAyMzcsIDIzMCwgOSwgMiwgMjI4LCA1MywgCisgICAgMjMsIDIzMSwgODUsIDksIDIsIDIyOCwgNTMsIDIzLCAyMTksIDk3LCA5MSwgMjI2LCAyMzYsIDksIDIsIDIyOCwgNTMsIDIzLCAKKyAgICAyMTksIDk3LCA5MSwgMjE5LCA5NywgOTEsIDIyNiwgMjM2LCA5LCAyLCAyMjgsIDUzLCAyMywgMjA3LCA0MSwgOTEsIDI0OSwgCisgICAgMzIsIDksIDIsIDIyOCwgNTEsIDksIDIsIDIyOCwgNTAsIDksIDIsIDIyOCwgNDksIDksIDIsIDIyOCwgNDgsIDksIDIsIAorICAgIDIyOCwgNDcsIDksIDIsIDIyOCwgNDYsIDksIDIsIDIyOCwgNDUsIDksIDIsIDIyOCwgNDQsIDksIDIsIDIyOCwgNDMsIDksIAorICAgIDIsIDIyOCwgNDIsIDksIDIsIDIyOCwgNDAsIDksIDIsIDIyOCwgNDEsIDIzLCAyNTAsIDc1LCA5LCAyLCAyMjgsIDQxLCAyMywgCisgICAgMjQ5LCAxNSwgOSwgMiwgMjI4LCA0MSwgMjMsIDI0MiwgMzAsIDIzNywgMjA5LCAyMzcsIDIwOCwgOSwgMiwgMjI4LCA0MSwgCisgICAgMjMsIDIyOCwgMjA3LCA5LCAyLCAyMjgsIDQxLCAyMywgMjI4LCAxMTMsIDksIDIsIDIyOCwgNDEsIDIzLCAyMDksIDIxOCwgCisgICAgOSwgMiwgMjI4LCA0MSwgMjMsIDIwOSwgMTg3LCA5LCAyLCAyMjgsIDQxLCAyMywgMjA3LCA0MCwgOSwgMiwgMjI4LCA0MSwgCisgICAgMjMsIDIwNywgMjksIDksIDIsIDIyOCwgNDEsIDIzLCAyMDYsIDE5NywgOSwgMiwgMjI4LCAzOSwgOSwgMiwgMjI4LCAzNywgCisgICAgOSwgMiwgMjI4LCAzOCwgMjMsIDI0MiwgNDAsIDksIDIsIDIyOCwgMzgsIDIzLCAyMzksIDgsIDksIDIsIDIyOCwgMzgsIDIzLCAKKyAgICAyMzEsIDg1LCA5LCAyLCAyMjgsIDM4LCAyMywgMjMxLCA4NiwgMjM3LCAyMDgsIDksIDIsIDIyOCwgMzgsIDIzLCAyMjIsIAorICAgIDEwMCwgOSwgMiwgMjI4LCAzOCwgMjMsIDIxOSwgOTcsIDkxLCAyMTksIDk3LCA5MSwgMjI2LCAyMzYsIDksIDIsIDIyOCwgCisgICAgMzgsIDIzLCAyMTMsIDI4LCA5MSwgMjI5LCAxMDAsIDksIDIsIDIyOCwgMzgsIDIzLCAyMDcsIDI5LCA5LCAyLCAyMjgsIDM4LCAKKyAgICAyMywgMjA2LCAxOTcsIDksIDIsIDIyOCwgMzUsIDksIDIsIDIyOCwgMzQsIDksIDIsIDIyNiwgMjM4LCAyMzcsIDIwOSwgMjMsIAorICAgIDI1MCwgNzUsIDksIDIsIDIyNiwgMjM4LCAyMywgMjQzLCAxNTYsIDksIDIsIDIyNiwgMjM4LCAyMywgMjM3LCAxNDAsIDksIAorICAgIDIsIDIyNiwgMjM4LCAyMywgMjE5LCA5NiwgOSwgMiwgMjI2LCAyMzgsIDIzLCAyMTksIDk3LCA5MSwgMjE5LCA5NywgOTEsIAorICAgIDIyNiwgMjM2LCA5LCAyLCAyMjYsIDIzOCwgMjMsIDIwOSwgMjQyLCA5LCAyLCAyMjQsIDE1NiwgOTEsIDIwMiwgMTE1LCA5LCAKKyAgICAyLCAyMjMsIDIwMCwgMTE1LCAyMjMsIDIwMCwgMjMsIDIzOSwgOCwgOSwgMiwgMjIzLCAyMDAsIDExNSwgMjIzLCAyMDAsIAorICAgIDIzLCAyMzAsIDEyLCA5LCAyLCAyMjIsIDY2LCAyMywgMjQzLCAxODksIDIzNywgMjA4LCA5LCAyLCAyMjIsIDY2LCAyMywgCisgICAgMjM4LCA1NSwgOSwgMiwgMjIyLCA2NiwgMjMsIDIzNywgMjEyLCA5LCAyLCAyMjIsIDY2LCAyMywgMjM3LCAzLCA5LCAyLCAKKyAgICAyMjIsIDY2LCAyMywgMjI5LCAxNzEsIDksIDIsIDIyMiwgNjYsIDIzLCAyMjgsIDc4LCA5LCAyLCAyMjIsIDY2LCAyMywgCisgICAgMjI1LCA3OSwgOSwgMiwgMjIyLCA2NiwgMjMsIDIxOSwgOTcsIDkxLCAyMTksIDk2LCA5LCAyLCAyMjIsIDY2LCAyMywgNjgsIAorICAgIDksIDIsIDIyMiwgNjYsIDIzLCAxMDYsIDkxLCA2OCwgOSwgMiwgMjIyLCA2NiwgMjMsIDIwNiwgMTk3LCA5LCAyLCAyMTUsIAorICAgIDIzLCAyMzcsIDIwOSwgMjMsIDE1MiwgOSwgMiwgMjE1LCAyMywgMjMsIDI0MSwgOTIsIDksIDIsIDIxNSwgMjMsIDIzLCAKKyAgICAyMTMsIDQ0LCAyNTAsIDUwLCAyMjcsIDIyMiwgOSwgMiwgMjE1LCAyMywgMjMsIDIwOSwgMjQyLCA5LCAyLCAyMTMsIDg3LCAKKyAgICAyMDksIDE0MSwgOSwgMiwgMjEzLCA0NCwgMTE1LCAyMTMsIDQzLCA5LCAyLCAyMTMsIDQ0LCA5MSwgMjM2LCAyMSwgOSwgMiwgCisgICAgMjEzLCA0NCwgOTEsIDIyMywgODYsIDksIDIsIDIxMywgNDQsIDkxLCAyMTQsIDIzMCwgOSwgMiwgMjEyLCAxOTgsIDkxLCAKKyAgICAyNDIsIDM4LCAyMywgMjIyLCAxMDAsIDksIDIsIDIxMiwgMTk4LCA5MSwgMjQxLCAxOTEsIDIzLCAyNTAsIDIzMSwgOSwgMiwgCisgICAgMjEyLCAxNjMsIDIzLCAyMDksIDI0MiwgOSwgMiwgMjA5LCAyNDMsIDkxLCAyMTUsIDIyLCA5LCAyLCAyMDcsIDE5MiwgMjMsIAorICAgIDIzOCwgMjMzLCAyMDksIDE0MSwgOSwgMiwgMjA3LCAxOTIsIDIzLCAxMjYsIDI0MywgMTU2LCA5LCAyLCAyMDYsIDIwOSwgCisgICAgMjMwLCAyMzgsIDksIDIsIDIwNiwgMjA5LCAyMywgMjA3LCAyOSwgOSwgMiwgMjA2LCAyMDAsIDIzLCAyNDQsIDE1MywgOSwgCisgICAgMiwgMjA2LCAyMDAsIDIzLCAyMjgsIDM2LCA5LCAyLCAyMDYsIDIwMCwgMjMsIDIyNiwgMjM2LCA5LCAyLCAyMDIsIDExNSwgCisgICAgOSwgMiwgMjAyLCA3LCAxMTUsIDIwMiwgNywgOTEsIDIxNCwgMjMwLCA5LCAyLCAyMDIsIDUsIDIzLCAxMjYsIDI0MywgMTU3LCAKKyAgICAyMDksIDE0MSwgMTQsIDcsIDI1NSwgMTgsIDE0LCA3LCAyNTUsIDE3LCAxNCwgNywgMjU1LCAxNiwgMTQsIDcsIDI1NSwgMTUsIAorICAgIDE0LCA3LCAyNTUsIDE0LCAxNCwgNywgMjU1LCAxMywgMTQsIDcsIDI1NSwgMTIsIDE0LCA3LCAyNTUsIDExLCAxNCwgNywgCisgICAgMjU1LCAxMCwgMTQsIDcsIDI1NSwgOSwgMTQsIDcsIDI1NSwgOCwgMTQsIDcsIDI1NSwgNywgMTQsIDcsIDI1NSwgNiwgMTQsIAorICAgIDcsIDI1NSwgNCwgMTQsIDcsIDI1NSwgMywgMTQsIDcsIDI1NSwgMiwgMTQsIDcsIDI1NSwgMSwgMTQsIDcsIDI1NSwgMCwgCisgICAgMTQsIDcsIDI1NCwgMjU1LCAxNCwgNywgMjU0LCAyNTQsIDE0LCA3LCAyNTQsIDI1MywgMTQsIDcsIDI1NCwgMjUyLCAxNCwgCisgICAgNywgMjU0LCAyNTEsIDE0LCA3LCAyNTQsIDI1MCwgMTQsIDcsIDI1NCwgMjQ5LCAxNCwgNywgMjU0LCAyNDgsIDE0LCA3LCAKKyAgICAyNTQsIDI0NywgMTQsIDcsIDI1NCwgMjQ2LCAxNCwgNywgMjU0LCAyNDUsIDE0LCA3LCAyNTQsIDI0NCwgMTQsIDcsIDI1NCwgCisgICAgMjQzLCAxNCwgNywgMjU0LCAyNDEsIDE0LCA3LCAyNTQsIDI0MCwgMTQsIDcsIDI1NCwgMjM4LCAxNCwgNywgMjU0LCAyMzcsIAorICAgIDE0LCA3LCAyNTQsIDIzNiwgMTQsIDcsIDI1NCwgMjM1LCAxNCwgNywgMjU0LCAyMzQsIDE0LCA3LCAyNTQsIDIzMywgMTQsIAorICAgIDcsIDI1NCwgMjMyLCAxNCwgNywgMjU0LCAyMzEsIDE0LCA3LCAyNTQsIDIzMCwgMTQsIDcsIDI1NCwgMjI5LCAxNCwgNywgCisgICAgMjU0LCAyMjgsIDE0LCA3LCAyNTQsIDIyNywgMTQsIDcsIDI1NCwgMjI1LCAxNCwgNywgMjU0LCAyMjQsIDE0LCA3LCAyNTQsIAorICAgIDIyMywgMTQsIDcsIDI1NCwgMjIxLCAxNCwgNywgMjU0LCAyMjAsIDE0LCA3LCAyNTQsIDIxOSwgMTQsIDcsIDI1NCwgMjE4LCAKKyAgICAxNCwgNywgMjU0LCAyMTcsIDE0LCA3LCAyNTQsIDIxNiwgMTQsIDcsIDI1NCwgMjE1LCAxNCwgNywgMjU0LCAyMTQsIDE0LCAKKyAgICA3LCAyNTQsIDIxMSwgMTQsIDcsIDI1NCwgMjEwLCAxNCwgNywgMjU0LCAyMDksIDE0LCA3LCAyNTQsIDIwOCwgMTQsIDcsIAorICAgIDI1NCwgMjA3LCAxNCwgNywgMjU0LCAyMDYsIDE0LCA3LCAyNTQsIDIwNSwgMTQsIDcsIDI1NCwgMjA0LCAxNCwgNywgMjU0LCAKKyAgICAyMDMsIDE0LCA3LCAyNTQsIDIwMiwgMTQsIDcsIDI1NCwgMjAxLCAxNCwgNywgMjU0LCAyMDAsIDE0LCA3LCAyNTQsIDE5OSwgCisgICAgMTQsIDcsIDI1NCwgMTk4LCAxNCwgNywgMjU0LCAxOTcsIDE0LCA3LCAyNTQsIDE5NiwgMTQsIDcsIDI1NCwgMTk1LCAxNCwgCisgICAgNywgMjU0LCAxOTQsIDE0LCA3LCAyNTQsIDE5MywgMTQsIDcsIDI1NCwgMTkyLCAxNCwgNywgMjU0LCAxODgsIDE0LCA3LCAKKyAgICAyNTQsIDE4NywgMTQsIDcsIDI1NCwgMTg2LCAxNCwgNywgMjU0LCAxODUsIDE0LCA3LCAyNDksIDI1MywgMTQsIDcsIDI0OSwgCisgICAgMjUxLCAxNCwgNywgMjQ5LCAyNDksIDE0LCA3LCAyNDksIDI0NywgMTQsIDcsIDI0OSwgMjQ1LCAxNCwgNywgMjQ5LCAyNDQsIAorICAgIDE0LCA3LCAyNDksIDI0MiwgMTQsIDcsIDI0OSwgMjQwLCAxNCwgNywgMjQ5LCAyMzgsIDE0LCA3LCAyNDksIDIzNiwgMTQsIAorICAgIDcsIDI0NywgMTIxLCAxNCwgNywgMjQ3LCAxMjAsIDE0LCA3LCAyNDcsIDExOSwgMTQsIDcsIDI0NywgMTE4LCAxNCwgNywgCisgICAgMjQ3LCAxMTcsIDE0LCA3LCAyNDcsIDExNiwgMTQsIDcsIDI0NywgMTE1LCAxNCwgNywgMjQ3LCAxMTQsIDE0LCA3LCAyNDcsIAorICAgIDExMywgMTQsIDcsIDI0NywgMTEyLCAxNCwgNywgMjQ3LCAxMTEsIDE0LCA3LCAyNDcsIDExMCwgMTQsIDcsIDI0NywgMTA5LCAKKyAgICAxNCwgNywgMjQ3LCAxMDgsIDE0LCA3LCAyNDcsIDEwNywgMTQsIDcsIDI0NywgMTA2LCAxNCwgNywgMjQ3LCAxMDUsIDE0LCAKKyAgICA3LCAyNDcsIDEwNCwgMTQsIDcsIDI0NywgMTAzLCAxNCwgNywgMjQ3LCAxMDIsIDE0LCA3LCAyNDcsIDEwMSwgMTQsIDcsIAorICAgIDI0NywgMTAwLCAxNCwgNywgMjQ3LCA5OSwgMTQsIDcsIDI0NywgOTgsIDE0LCA3LCAyNDcsIDk3LCAxNCwgNywgMjQ3LCA5NiwgCisgICAgMTQsIDcsIDI0NywgOTUsIDE0LCA3LCAyNDcsIDk0LCAxNCwgNywgMjQ1LCA1MCwgMTQsIDcsIDI0NSwgNDksIDE0LCA3LCAKKyAgICAyNDUsIDQ4LCAxNCwgNywgMjQ1LCA0NywgMTQsIDcsIDI0NSwgNDYsIDE0LCA3LCAyNDUsIDQ1LCAxNCwgNywgMjQ1LCA0NCwgCisgICAgMTQsIDcsIDI0NSwgNDMsIDE0LCA3LCAyNDUsIDQyLCAxNCwgNywgMjQ1LCA0MSwgMTQsIDcsIDI0NSwgNDAsIDE0LCA3LCAKKyAgICAyNDUsIDM5LCAxNCwgNywgMjQ1LCAzOCwgMTQsIDcsIDI0NSwgMzcsIDE0LCA3LCAyNDUsIDM2LCAxNCwgNywgMjQ1LCAzNSwgCisgICAgMTQsIDcsIDI0NSwgMzQsIDE0LCA3LCAyNDUsIDMzLCAxNCwgNywgMjQ1LCAzMiwgMTQsIDcsIDI0NSwgMzEsIDE0LCA3LCAKKyAgICAyNDUsIDMwLCAxNCwgNywgMjQ1LCAyOSwgMTQsIDcsIDI0NSwgMjgsIDE0LCA3LCAyNDUsIDI3LCAxNCwgNywgMjQ1LCAyNiwgCisgICAgMTQsIDcsIDI0NSwgMjUsIDE0LCA3LCAyNDUsIDI0LCAxNCwgNywgMjQ1LCAyMywgMTQsIDcsIDI0NSwgMjIsIDE0LCA3LCAKKyAgICAyNDUsIDIxLCAxNCwgNywgMjQ1LCAyMCwgMTQsIDcsIDI0NSwgMTksIDE0LCA3LCAyNDUsIDE4LCAxNCwgNywgMjQ1LCAxNywgCisgICAgMTQsIDcsIDI0NSwgMTYsIDE0LCA3LCAyNDUsIDE1LCAxNCwgNywgMjQ1LCAxNCwgMTQsIDcsIDI0NSwgMTMsIDE0LCA3LCAKKyAgICAyNDUsIDEyLCAxNCwgNywgMjQ1LCAxMSwgMTQsIDcsIDI0NSwgMTAsIDE0LCA3LCAyNDUsIDksIDE0LCA3LCAyNDUsIDgsIAorICAgIDE0LCA3LCAyNDUsIDcsIDE0LCA3LCAyNDUsIDYsIDE0LCA3LCAyNDUsIDUsIDE0LCA3LCAyNDUsIDQsIDE0LCA3LCAyNDUsIAorICAgIDMsIDE0LCA3LCAyNDUsIDIsIDE0LCA3LCAyNDUsIDEsIDE0LCA3LCAyNDUsIDAsIDE0LCA3LCAyNDQsIDI1NSwgMTQsIDcsIAorICAgIDI0NCwgMjU0LCAxNCwgNywgMjQ0LCAyNTMsIDE0LCA3LCAyNDQsIDI1MiwgMTQsIDcsIDI0NCwgMjUxLCAxNCwgNywgMjQ0LCAKKyAgICAyNTAsIDE0LCA3LCAyNDQsIDI0OSwgMTQsIDcsIDI0NCwgMjQ4LCAxNCwgNywgMjQ0LCAyNDcsIDE0LCA3LCAyNDQsIDI0NiwgCisgICAgMTQsIDcsIDI0NCwgMjQ1LCAxNCwgNywgMjQ0LCAyNDQsIDE0LCA3LCAyNDQsIDI0MywgMTQsIDcsIDI0NCwgMjQyLCAxNCwgCisgICAgNywgMjQ0LCAyNDEsIDE0LCA3LCAyNDQsIDI0MCwgMTQsIDcsIDI0NCwgMjM5LCAxNCwgNywgMjQ0LCAyMzgsIDE0LCA3LCAKKyAgICAyNDQsIDIzNywgMTQsIDcsIDI0NCwgMjM2LCAxNCwgNywgMjQ0LCAyMzUsIDE0LCA3LCAyNDQsIDIzNCwgMTQsIDcsIDI0NCwgCisgICAgMjMzLCAxNCwgNywgMjQ0LCAyMzIsIDE0LCA3LCAyNDQsIDIzMSwgMTQsIDcsIDI0NCwgMjMwLCAxNCwgNywgMjQ0LCAyMjksIAorICAgIDE0LCA3LCAyNDQsIDIyOCwgMTQsIDcsIDI0NCwgMjI3LCAxNCwgNywgMjQ0LCAyMjYsIDE0LCA3LCAyNDQsIDIyNSwgMTQsIAorICAgIDcsIDI0NCwgMjI0LCAxNCwgNywgMjQ0LCAyMjMsIDE0LCA3LCAyNDQsIDIyMiwgMTQsIDcsIDI0NCwgMjIxLCAxNCwgNywgCisgICAgMjQ0LCAyMjAsIDE0LCA3LCAyNDQsIDIxOSwgMTQsIDcsIDI0NCwgMjE4LCAxNCwgNywgMjQ0LCAyMTcsIDE0LCA3LCAyNDQsIAorICAgIDIxNiwgMTQsIDcsIDI0NCwgMjE1LCAxNCwgNywgMjQxLCAyMzUsIDE0LCA3LCAyNDEsIDIzNCwgMTQsIDcsIDI0MSwgMjMzLCAKKyAgICAxNCwgNywgMjQxLCAyMzIsIDE0LCA3LCAyNDEsIDIzMSwgMTQsIDcsIDI0MSwgMjMwLCAxNCwgNywgMjQxLCAyMjksIDE0LCAKKyAgICA3LCAyNDEsIDIyOCwgMTQsIDcsIDI0MSwgMjI3LCAxNCwgNywgMjQxLCAyMjYsIDE0LCA3LCAyNDEsIDIyNSwgMTQsIDcsIAorICAgIDI0MSwgMjI0LCAxNCwgNywgMjQxLCAyMjMsIDE0LCA3LCAyNDEsIDIyMiwgMTQsIDcsIDI0MSwgMjIxLCAxNCwgNywgMjQxLCAKKyAgICAyMjAsIDE0LCA3LCAyNDEsIDIxOSwgMTQsIDcsIDI0MSwgMjE4LCAxNCwgNywgMjQxLCAyMTcsIDE0LCA3LCAyNDEsIDIxNiwgCisgICAgMTQsIDcsIDI0MSwgMjE1LCAxNCwgNywgMjQxLCAyMTQsIDE0LCA3LCAyNDEsIDIxMywgMTQsIDcsIDI0MSwgMjEyLCAxNCwgCisgICAgNywgMjQxLCAyMTEsIDE0LCA3LCAyNDEsIDIxMCwgMTQsIDcsIDI0MSwgMjA5LCAxNCwgNywgMjQxLCAyMDgsIDE0LCA3LCAKKyAgICAyNDEsIDIwNywgMTQsIDcsIDI0MSwgMjA2LCAxNCwgNywgMjQxLCAyMDUsIDE0LCA3LCAyNDEsIDIwNCwgMTQsIDcsIDI0MSwgCisgICAgMjAzLCAxNCwgNywgMjQxLCAyMDIsIDE0LCA3LCAyNDEsIDIwMSwgMTQsIDcsIDI0MSwgMjAwLCAxNCwgNywgMjQxLCAxOTksIAorICAgIDE0LCA3LCAyNDEsIDE5OCwgMTQsIDcsIDI0MSwgMTk3LCAxNCwgNywgMjQxLCAxOTYsIDE0LCA3LCAyNDEsIDE5NSwgMTQsIAorICAgIDcsIDI0MSwgMTk0LCAxNCwgNywgMjQxLCAxOTMsIDE0LCA3LCAyNDEsIDE5MiwgMTQsIDcsIDI0MCwgMTczLCAxNCwgNywgCisgICAgMjQwLCAxNzIsIDE0LCA3LCAyNDAsIDE3MSwgMTQsIDcsIDI0MCwgMTcwLCAxNCwgNywgMjQwLCAxNjksIDE0LCA3LCAyNDAsIAorICAgIDE2OCwgMTQsIDcsIDI0MCwgMTY3LCAxNCwgNywgMjQwLCAxNjYsIDE0LCA3LCAyNDAsIDE2NSwgMTQsIDcsIDI0MCwgMTY0LCAKKyAgICAxNCwgNywgMjQwLCAxNjMsIDE0LCA3LCAyNDAsIDE2MiwgMTQsIDcsIDI0MCwgMTYxLCAxNCwgNywgMjQwLCAxNjAsIDE0LCAKKyAgICA3LCAyNDAsIDE1OSwgMTQsIDcsIDI0MCwgMTU4LCAxNCwgNywgMjQwLCAxNTcsIDE0LCA3LCAyNDAsIDE1NiwgMTQsIDcsIAorICAgIDI0MCwgMTU1LCAxNCwgNywgMjQwLCAxNTQsIDE0LCA3LCAyNDAsIDE1MywgMTQsIDcsIDI0MCwgMTUyLCAxNCwgNywgMjQwLCAKKyAgICAxNTEsIDE0LCA3LCAyNDAsIDE1MCwgMTQsIDcsIDI0MCwgMTQ5LCAxNCwgNywgMjQwLCAxNDgsIDE0LCA3LCAyNDAsIDE0NywgCisgICAgMTQsIDcsIDI0MCwgMTQ2LCAxNCwgNywgMjQwLCAxNDUsIDE0LCA3LCAyNDAsIDE0NCwgMTQsIDcsIDI0MCwgMTQzLCAxNCwgCisgICAgNywgMjQwLCAxNDIsIDE0LCA3LCAyNDAsIDE0MSwgMTQsIDcsIDI0MCwgMTQwLCAxNCwgNywgMjQwLCAxMzksIDE0LCA3LCAKKyAgICAyNDAsIDEzOCwgMTQsIDcsIDI0MCwgMTM3LCAxNCwgNywgMjQwLCAxMzYsIDE0LCA3LCAyNDAsIDEzNSwgMTQsIDcsIDI0MCwgCisgICAgMTM0LCAxNCwgNywgMjQwLCAxMzMsIDE0LCA3LCAyNDAsIDEzMiwgMTQsIDcsIDI0MCwgMTMxLCAxNCwgNywgMjQwLCAxMzAsIAorICAgIDE0LCA3LCAyNDAsIDEyOSwgMTQsIDcsIDI0MCwgMTI4LCAxNCwgNywgMjQwLCAxMjcsIDE0LCA3LCAyNDAsIDEyNiwgMTQsIAorICAgIDcsIDI0MCwgMTI1LCAxNCwgNywgMjQwLCAxMjQsIDE0LCA3LCAyNDAsIDEyMywgMTQsIDcsIDI0MCwgMTIyLCAxNCwgNywgCisgICAgMjQwLCAxMjEsIDE0LCA3LCAyNDAsIDEyMCwgMTQsIDcsIDI0MCwgMTE5LCAxNCwgNywgMjQwLCAxMTgsIDE0LCA3LCAyNDAsIAorICAgIDExNywgMTQsIDcsIDI0MCwgMTE2LCAxNCwgNywgMjQwLCAxMTUsIDE0LCA3LCAyNDAsIDExNCwgMTQsIDcsIDI0MCwgMTEzLCAKKyAgICAxNCwgNywgMjQwLCAxMTIsIDE0LCA3LCAyNDAsIDExMSwgMTQsIDcsIDI0MCwgMTEwLCAxNCwgNywgMjQwLCAxMDksIDE0LCAKKyAgICA3LCAyMzksIDc0LCAxNCwgNywgMjM5LCA3MywgMTQsIDcsIDIzOSwgNzIsIDE0LCA3LCAyMzksIDcxLCAxNCwgNywgMjM5LCAKKyAgICA3MCwgMTQsIDcsIDIzOSwgNjksIDE0LCA3LCAyMzksIDY4LCAxNCwgNywgMjM5LCA2NywgMTQsIDcsIDIzOSwgNjYsIDE0LCAKKyAgICA3LCAyMzksIDY1LCAxNCwgNywgMjM5LCA2NCwgMTQsIDcsIDIzOSwgNjMsIDE0LCA3LCAyMzksIDYyLCAxNCwgNywgMjM5LCAKKyAgICA2MSwgMTQsIDcsIDIzOSwgNjAsIDE0LCA3LCAyMzksIDU5LCAxNCwgNywgMjM5LCA1OCwgMTQsIDcsIDIzOSwgNTcsIDE0LCAKKyAgICA3LCAyMzksIDU2LCAxNCwgNywgMjM5LCA1NSwgMTQsIDcsIDIzOSwgNTQsIDE0LCA3LCAyMzksIDUzLCAxNCwgNywgMjM5LCAKKyAgICA1MiwgMTQsIDcsIDIzOSwgNTEsIDE0LCA3LCAyMzksIDUwLCAxNCwgNywgMjM5LCA0OSwgMTQsIDcsIDIzOSwgNDgsIDE0LCAKKyAgICA3LCAyMzksIDQ3LCAxNCwgNywgMjM5LCA0NiwgMTQsIDcsIDIzOSwgNDUsIDE0LCA3LCAyMzksIDQ0LCAxNCwgNywgMjM5LCAKKyAgICA0MywgMTQsIDcsIDIzOSwgNDIsIDE0LCA3LCAyMzksIDQxLCAxNCwgNywgMjM5LCA0MCwgMTQsIDcsIDIzOSwgMzksIDE0LCAKKyAgICA3LCAyMzksIDM4LCAxNCwgNywgMjM5LCAzNywgMTQsIDcsIDIzOSwgMzYsIDE0LCA3LCAyMzksIDM1LCAxNCwgNywgMjM5LCAKKyAgICAzNCwgMTQsIDcsIDIzOSwgMzMsIDE0LCA3LCAyMzksIDMyLCAxNCwgNywgMjM5LCAzMSwgMTQsIDcsIDIzOSwgMzAsIDE0LCAKKyAgICA3LCAyMzksIDI5LCAxNCwgNywgMjM5LCAyOCwgMTQsIDcsIDIzOSwgMjcsIDE0LCA3LCAyMzksIDI2LCAxNCwgNywgMjM5LCAKKyAgICAyNSwgMTQsIDcsIDIzOSwgMjQsIDE0LCA3LCAyMzksIDIzLCAxNCwgNywgMjM5LCAyMiwgMTQsIDcsIDIzOSwgMjEsIDE0LCAKKyAgICA3LCAyMzksIDIwLCAxNCwgNywgMjM5LCAxOSwgMTQsIDcsIDIzOSwgMTgsIDE0LCA3LCAyMzksIDE3LCAxNCwgNywgMjM5LCAKKyAgICAxNiwgMTQsIDcsIDIzOSwgMTUsIDE0LCA3LCAyMzksIDE0LCAxNCwgNywgMjM5LCAxMywgMTQsIDcsIDIzOSwgMTIsIDE0LCAKKyAgICA3LCAyMzksIDExLCAxNCwgNywgMjM3LCAxNjksIDE0LCA3LCAyMzcsIDE2OCwgMTQsIDcsIDIzNywgMTY3LCAxNCwgNywgCisgICAgMjM3LCAxNjYsIDE0LCA3LCAyMzcsIDE2NSwgMTQsIDcsIDIzNywgMTY0LCAxNCwgNywgMjM3LCAxNjMsIDE0LCA3LCAyMzcsIAorICAgIDE2MiwgMTQsIDcsIDIzNywgMTYxLCAxNCwgNywgMjM1LCAxOTAsIDE0LCA3LCAyMzUsIDE4OSwgMTQsIDcsIDIzNSwgMTg4LCAKKyAgICAxNCwgNywgMjM1LCAxODcsIDE0LCA3LCAyMzUsIDE4NiwgMTQsIDcsIDIzNSwgMTg1LCAxNCwgNywgMjM1LCAxODQsIDE0LCAKKyAgICA3LCAyMzUsIDE4MywgMTQsIDcsIDIzNSwgMTgyLCAxNCwgNywgMjM1LCAxODEsIDE0LCA3LCAyMzUsIDE4MCwgMTQsIDcsIAorICAgIDIzNSwgMTc5LCAxNCwgNywgMjM1LCAxNzgsIDE0LCA3LCAyMzUsIDE3NywgMTQsIDcsIDIzNSwgMTc2LCAxNCwgNywgMjM1LCAKKyAgICAxNzUsIDE0LCA3LCAyMzUsIDE3NCwgMTQsIDcsIDIzNSwgMTczLCAxNCwgNywgMjM1LCAxNzIsIDE0LCA3LCAyMzAsIDUzLCAKKyAgICAxNCwgNywgMjMwLCA1MiwgMTQsIDcsIDIzMCwgNTEsIDE0LCA3LCAyMzAsIDUwLCAxNCwgNywgMjMwLCA0OSwgMTQsIDcsIAorICAgIDIzMCwgNDgsIDE0LCA3LCAyMzAsIDQ3LCAxNCwgNywgMjMwLCA0NiwgMTQsIDcsIDIyOCwgMTI4LCAxNCwgNywgMjI4LCAKKyAgICAxMjcsIDE0LCA3LCAyMjgsIDEyNiwgMTQsIDcsIDIyOCwgMTI1LCAxNCwgNywgMjI4LCAxMjQsIDE0LCA3LCAyMjgsIDEyMywgCisgICAgMTQsIDcsIDIyOCwgMTIyLCAxNCwgNywgMjI4LCAxMjEsIDE0LCA3LCAyMjgsIDEyMCwgMTQsIDcsIDIyOCwgMTE5LCAxNCwgCisgICAgNywgMjI2LCAxODMsIDE0LCA3LCAyMjYsIDE4MiwgMTQsIDcsIDIyNiwgMTgxLCAxNCwgNywgMjI2LCAxNzksIDE0LCA3LCAKKyAgICAyMjYsIDE3NywgMTQsIDcsIDIyNiwgMTc2LCAxNCwgNywgMjI2LCAxNzQsIDE0LCA3LCAyMjYsIDE3MiwgMTQsIDcsIDIyNiwgCisgICAgMTcwLCAxNCwgNywgMjI2LCAxNjgsIDE0LCA3LCAyMjYsIDE2NiwgMTQsIDcsIDIyNiwgMTY0LCAxNCwgNywgMjI2LCAxNjIsIAorICAgIDE0LCA3LCAyMjYsIDE2MSwgMTQsIDcsIDIyNiwgMTU5LCAxNCwgNywgMjI2LCAxNTcsIDE0LCA3LCAyMjYsIDE1NiwgMTQsIAorICAgIDcsIDIyNiwgMTU1LCAxNCwgNywgMjI2LCAxNTQsIDE0LCA3LCAyMjYsIDE1MywgMTQsIDcsIDIyNiwgMTUyLCAxNCwgNywgCisgICAgMjI2LCAxNTEsIDE0LCA3LCAyMjYsIDE1MCwgMTQsIDcsIDIyNiwgMTQ5LCAxNCwgNywgMjI2LCAxNDcsIDE0LCA3LCAyMjYsIAorICAgIDE0NSwgMTQsIDcsIDIyNiwgMTQzLCAxNCwgNywgMjI2LCAxNDIsIDE0LCA3LCAyMjYsIDE0MCwgMTQsIDcsIDIyNiwgMTM5LCAKKyAgICAxNCwgNywgMjI2LCAxMzcsIDE0LCA3LCAyMjYsIDEzNiwgMTQsIDcsIDIyNiwgMTM0LCAxNCwgNywgMjI2LCAxMzIsIDE0LCAKKyAgICA3LCAyMjYsIDEzMCwgMTQsIDcsIDIyNiwgMTI4LCAxNCwgNywgMjI2LCAxMjYsIDE0LCA3LCAyMjYsIDEyNSwgMTQsIDcsIAorICAgIDIyNiwgMTIzLCAxNCwgNywgMjI2LCAxMjEsIDE0LCA3LCAyMjYsIDEyMCwgMTQsIDcsIDIyNiwgMTE4LCAxNCwgNywgMjI2LCAKKyAgICAxMTYsIDE0LCA3LCAyMjYsIDExNCwgMTQsIDcsIDIyNiwgMTEyLCAxNCwgNywgMjI2LCAxMTEsIDE0LCA3LCAyMjYsIDEwOSwgCisgICAgMTQsIDcsIDIyNiwgMTA3LCAxNCwgNywgMjI2LCAxMDUsIDE0LCA3LCAyMjYsIDEwNCwgMTQsIDcsIDIyNiwgMTAyLCAxNCwgCisgICAgNywgMjI2LCAxMDAsIDE0LCA3LCAyMjYsIDk5LCAxNCwgNywgMjI2LCA5OCwgMTQsIDcsIDIyNiwgOTYsIDE0LCA3LCAyMjYsIAorICAgIDk0LCAxNCwgNywgMjI2LCA5MiwgMTQsIDcsIDIyNiwgOTAsIDE0LCA3LCAyMjYsIDg4LCAxNCwgNywgMjI2LCA4NiwgMTQsIAorICAgIDcsIDIyNiwgODQsIDE0LCA3LCAyMjYsIDgzLCAxNCwgNywgMjI2LCA4MSwgMTQsIDcsIDIyNiwgNzksIDE0LCA3LCAyMjYsIAorICAgIDc3LCAxNCwgNywgMjI2LCA3NSwgMTQsIDcsIDIyMywgMTYwLCAxNCwgNywgMjIzLCAxNTksIDE0LCA3LCAyMjMsIDE1OCwgCisgICAgMTQsIDcsIDIyMywgMTU3LCAxNCwgNywgMjIzLCAxNTYsIDE0LCA3LCAyMjMsIDE1NSwgMTQsIDcsIDIyMywgMTU0LCAxNCwgCisgICAgNywgMjIzLCAxNTMsIDE0LCA3LCAyMjMsIDE1MiwgMTQsIDcsIDIyMywgMTUxLCAxNCwgNywgMjIzLCAxNTAsIDE0LCA3LCAKKyAgICAyMjMsIDE0OSwgMTQsIDcsIDIyMywgMTQ4LCAxNCwgNywgMjIzLCAxNDcsIDE0LCA3LCAyMjMsIDE0NiwgMTQsIDcsIDIyMywgCisgICAgMTQ1LCAxNCwgNywgMjIzLCAxNDQsIDE0LCA3LCAyMjMsIDE0MywgMTQsIDcsIDIyMywgMTQyLCAxNCwgNywgMjIzLCAxNDEsIAorICAgIDE0LCA3LCAyMjMsIDE0MCwgMTQsIDcsIDIyMywgMTM5LCAxNCwgNywgMjIzLCAxMzgsIDE0LCA3LCAyMjMsIDEzNywgMTQsIAorICAgIDcsIDIyMywgMTM2LCAxNCwgNywgMjIzLCAxMzUsIDE0LCA3LCAyMjMsIDEzNCwgMTQsIDcsIDIyMywgMTMzLCAxNCwgNywgCisgICAgMjIzLCAxMzIsIDE0LCA3LCAyMjMsIDEzMSwgMTQsIDcsIDIyMywgMTMwLCAxNCwgNywgMjIzLCAxMjksIDE0LCA3LCAyMjMsIAorICAgIDEyOCwgMTQsIDcsIDIyMywgMTI3LCAxNCwgNywgMjIzLCAxMjYsIDE0LCA3LCAyMjMsIDEyNSwgMTQsIDcsIDIyMywgMTI0LCAKKyAgICAxNCwgNywgMjIzLCAxMjMsIDE0LCA3LCAyMjMsIDEyMiwgMTQsIDcsIDIyMywgMTIxLCAxNCwgNywgMjIzLCAxMjAsIDE0LCAKKyAgICA3LCAyMjMsIDExOSwgMTQsIDcsIDIyMywgMTE4LCAxNCwgNywgMjIzLCAxMTcsIDE0LCA3LCAyMjMsIDExNiwgMTQsIDcsIAorICAgIDIyMywgMTE1LCAxNCwgNywgMjIzLCAxMTQsIDE0LCA3LCAyMjMsIDExMywgMTQsIDcsIDIyMywgMTEyLCAxNCwgNywgMjIxLCAKKyAgICAyNTIsIDE0LCA3LCAyMjEsIDI1MSwgMTQsIDcsIDIyMSwgMjUwLCAxNCwgNywgMjIxLCAyNDksIDE0LCA3LCAyMjEsIDI0OCwgCisgICAgMTQsIDcsIDIyMSwgMjQ3LCAxNCwgNywgMjIxLCAyNDYsIDE0LCA3LCAyMjEsIDI0NSwgMTQsIDcsIDIyMSwgMjQ0LCAxNCwgCisgICAgNywgMjIxLCAyNDMsIDE0LCA3LCAyMjEsIDI0MiwgMTQsIDcsIDIyMSwgMjQxLCAxNCwgNywgMjIxLCAyNDAsIDE0LCA3LCAKKyAgICAyMjEsIDIzOSwgMTQsIDcsIDIyMSwgMjM4LCAxNCwgNywgMjIxLCAyMzcsIDE0LCA3LCAyMjEsIDIzNiwgMTQsIDcsIDIyMSwgCisgICAgMjM1LCAxNCwgNywgMjIxLCAyMzQsIDE0LCA3LCAyMjEsIDIzMywgMTQsIDcsIDIyMSwgMjMyLCAxNCwgNywgMjIxLCAyMzEsIAorICAgIDE0LCA3LCAyMjEsIDgzLCAxNCwgNywgMjIxLCA4MiwgMTQsIDcsIDIyMSwgODEsIDE0LCA3LCAyMjEsIDgwLCAxNCwgNywgCisgICAgMjIxLCA3OSwgMTQsIDcsIDIyMSwgNzgsIDE0LCA3LCAyMjEsIDc3LCAxNCwgNywgMjIxLCA3NiwgMTQsIDcsIDIyMSwgNzUsIAorICAgIDE0LCA3LCAyMjEsIDc0LCAxNCwgNywgMjIxLCA3MywgMTQsIDcsIDIyMSwgNzIsIDE0LCA3LCAyMjEsIDcxLCAxNCwgNywgCisgICAgMjIxLCA3MCwgMTQsIDcsIDIyMSwgNjksIDE0LCA3LCAyMjEsIDY4LCAxNCwgNywgMjIxLCA2NywgMTQsIDcsIDIyMSwgNjYsIAorICAgIDE0LCA3LCAyMjEsIDY1LCAxNCwgNywgMjIxLCA2NCwgMTQsIDcsIDIyMSwgNjMsIDE0LCA3LCAyMjEsIDYyLCAxNCwgNywgCisgICAgMjIxLCA2MSwgMTQsIDcsIDIyMSwgNjAsIDE0LCA3LCAyMjEsIDU5LCAxNCwgNywgMjIxLCA1OCwgMTQsIDcsIDIyMCwgMTczLCAKKyAgICAxNCwgNywgMjIwLCAxNzIsIDE0LCA3LCAyMjAsIDE3MSwgMTQsIDcsIDIyMCwgMTcwLCAxNCwgNywgMjIwLCAxNjksIDE0LCAKKyAgICA3LCAyMjAsIDE2OCwgMTQsIDcsIDIyMCwgMTY3LCAxNCwgNywgMjIwLCAxNjYsIDE0LCA3LCAyMjAsIDE2NSwgMTQsIDcsIAorICAgIDIyMCwgMTY0LCAxNCwgNywgMjIwLCAxNjMsIDE0LCA3LCAyMjAsIDE2MiwgMTQsIDcsIDIyMCwgMTYxLCAxNCwgNywgMjIwLCAKKyAgICAxNjAsIDE0LCA3LCAyMjAsIDE1OSwgMTQsIDcsIDIyMCwgMTU4LCAxNCwgNywgMjIwLCAxNTcsIDE0LCA3LCAyMjAsIDE1NiwgCisgICAgMTQsIDcsIDIyMCwgMTU1LCAxNCwgNywgMjIwLCAxNTQsIDE0LCA3LCAyMjAsIDE1MywgMTQsIDcsIDIyMCwgMTUyLCAxNCwgCisgICAgNywgMjIwLCAxNTEsIDE0LCA3LCAyMjAsIDE1MCwgMTQsIDcsIDIyMCwgMTQ5LCAxNCwgNywgMjIwLCAxNDgsIDE0LCA3LCAKKyAgICAyMjAsIDE0NywgMTQsIDcsIDIyMCwgMTQ2LCAxNCwgNywgMjIwLCAxNDUsIDE0LCA3LCAyMjAsIDE0NCwgMTQsIDcsIDIyMCwgCisgICAgMTQzLCAxNCwgNywgMjIwLCAxNDIsIDE0LCA3LCAyMjAsIDE0MSwgMTQsIDcsIDIyMCwgMTQwLCAxNCwgNywgMjIwLCAxMzksIAorICAgIDE0LCA3LCAyMjAsIDEzOCwgMTQsIDcsIDIyMCwgMTM3LCAxNCwgNywgMjIwLCAxMzYsIDE0LCA3LCAyMjAsIDEzNSwgMTQsIAorICAgIDcsIDIyMCwgMTM0LCAxNCwgNywgMjIwLCAxMzMsIDE0LCA3LCAyMjAsIDEzMiwgMTQsIDcsIDIyMCwgMTMxLCAxNCwgNywgCisgICAgMjIwLCAxMzAsIDE0LCA3LCAyMjAsIDEyOSwgMTQsIDcsIDIyMCwgMTI4LCAxNCwgNywgMjIwLCAxMjcsIDE0LCA3LCAyMjAsIAorICAgIDEyNiwgMTQsIDcsIDIyMCwgMTI1LCAxNCwgNywgMjIwLCAxMjQsIDE0LCA3LCAyMjAsIDEyMywgMTQsIDcsIDIyMCwgMTIyLCAKKyAgICAxNCwgNywgMjIwLCAxMjEsIDE0LCA3LCAyMjAsIDEyMCwgMTQsIDcsIDIyMCwgMTE5LCAxNCwgNywgMjIwLCAxMTgsIDE0LCAKKyAgICA3LCAyMjAsIDExNywgMTQsIDcsIDIyMCwgMTE2LCAxNCwgNywgMjIwLCAxMTUsIDE0LCA3LCAyMjAsIDExNCwgMTQsIDcsIAorICAgIDIyMCwgMTEzLCAxNCwgNywgMjIwLCAxMTIsIDE0LCA3LCAyMjAsIDExMSwgMTQsIDcsIDIyMCwgMTEwLCAxNCwgNywgMjIwLCAKKyAgICAxMDksIDE0LCA3LCAyMjAsIDEwOCwgMTQsIDcsIDIyMCwgMTA3LCAxNCwgNywgMjIwLCAxMDYsIDE0LCA3LCAyMjAsIDEwNSwgCisgICAgMTQsIDcsIDIyMCwgMTA0LCAxNCwgNywgMjIwLCAxMDMsIDE0LCA3LCAyMjAsIDEwMiwgMTQsIDcsIDIyMCwgMTAxLCAxNCwgCisgICAgNywgMjIwLCAxMDAsIDE0LCA3LCAyMjAsIDk5LCAxNCwgNywgMjE5LCAxODMsIDE0LCA3LCAyMTksIDE4MiwgMTQsIDcsIAorICAgIDIxOSwgMTgxLCAxNCwgNywgMjE5LCAxODAsIDE0LCA3LCAyMTksIDE3OSwgMTQsIDcsIDIxOSwgMTc4LCAxNCwgNywgMjE5LCAKKyAgICAxNzcsIDE0LCA3LCAyMTksIDE3NiwgMTQsIDcsIDIxOSwgMTc1LCAxNCwgNywgMjE5LCAxNzQsIDE0LCA3LCAyMTksIDE3MywgCisgICAgMTQsIDcsIDIxOSwgMTcyLCAxNCwgNywgMjE5LCAxNzEsIDE0LCA3LCAyMTcsIDEzMywgMTQsIDcsIDIxNywgMTMyLCAxNCwgCisgICAgNywgMjE3LCAxMzEsIDE0LCA3LCAyMTcsIDEzMCwgMTQsIDcsIDIxNywgMTI5LCAxNCwgNywgMjE3LCAxMjgsIDE0LCA3LCAKKyAgICAyMTcsIDEyNywgMTQsIDcsIDIxNiwgMjU1LCAxNCwgNywgMjE2LCAyNTQsIDE0LCA3LCAyMTYsIDI1MywgMTQsIDcsIDIxNiwgCisgICAgMjUyLCAxNCwgNywgMjE2LCAyNTEsIDE0LCA3LCAyMTYsIDI1MCwgMTQsIDcsIDIxNiwgMjQ5LCAxNCwgNywgMjE2LCAyNDgsIAorICAgIDE0LCA3LCAyMTYsIDI0NywgMTQsIDcsIDIxNiwgMjQ2LCAxNCwgNywgMjE2LCAyNDUsIDE0LCA3LCAyMTYsIDI0NCwgMTQsIAorICAgIDcsIDIxNiwgMjQzLCAxNCwgNywgMjE2LCAyNDIsIDE0LCA3LCAyMTYsIDI0MSwgMTQsIDcsIDIxNiwgMjQwLCAxNCwgNywgCisgICAgMjE2LCAyMzksIDE0LCA3LCAyMTYsIDIzOCwgMTQsIDcsIDIxNiwgMjM3LCAxNCwgNywgMjE2LCAyMzYsIDE0LCA3LCAyMTYsIAorICAgIDIzNSwgMTQsIDcsIDIxNiwgMjM0LCAxNCwgNywgMjE2LCAyMzMsIDE0LCA3LCAyMTYsIDIzMiwgMTQsIDcsIDIxNiwgMjMxLCAKKyAgICAxNCwgNywgMjE2LCAyMzAsIDE0LCA3LCAyMTYsIDIyOSwgMTQsIDcsIDIxNiwgMjI4LCAxNCwgNywgMjE2LCAyMjcsIDE0LCAKKyAgICA3LCAyMTYsIDIyNiwgMTQsIDcsIDIxNiwgMjI1LCAxNCwgNywgMjE2LCAyMjQsIDE0LCA3LCAyMTYsIDIyMywgMTQsIDcsIAorICAgIDIxNiwgMjIyLCAxNCwgNywgMjE1LCA5MSwgMTQsIDcsIDIxNSwgOTAsIDE0LCA3LCAyMTUsIDg5LCAxNCwgNywgMjE1LCA4OCwgCisgICAgMTQsIDcsIDIxNSwgODcsIDE0LCA3LCAyMTUsIDg2LCAxNCwgNywgMjE1LCA4NSwgMTQsIDcsIDIxNSwgODQsIDE0LCA3LCAKKyAgICAyMTUsIDgzLCAxNCwgNywgMjE1LCA4MiwgMTQsIDcsIDIxNSwgODEsIDE0LCA3LCAyMTUsIDgwLCAxNCwgNywgMjE1LCA3OSwgCisgICAgMTQsIDcsIDIxNSwgNzgsIDE0LCA3LCAyMTUsIDc3LCAxNCwgNywgMjE1LCA3NiwgMTQsIDcsIDIxNSwgNzUsIDE0LCA3LCAKKyAgICAyMTUsIDc0LCAxNCwgNywgMjE1LCA3MywgMTQsIDcsIDIxNSwgNzIsIDE0LCA3LCAyMTUsIDcxLCAxNCwgNywgMjE1LCA3MCwgCisgICAgMTQsIDcsIDIxNSwgNjksIDE0LCA3LCAyMTUsIDY4LCAxNCwgNywgMjE1LCA2NywgMTQsIDcsIDIxNSwgNjYsIDE0LCA3LCAKKyAgICAyMTUsIDY1LCAxNCwgNywgMjE1LCA2NCwgMTQsIDcsIDIxNSwgNjMsIDE0LCA3LCAyMTUsIDYyLCAxNCwgNywgMjE1LCA2MSwgCisgICAgMTQsIDcsIDIxNSwgNjAsIDE0LCA3LCAyMTUsIDU5LCAxNCwgNywgMjE1LCA1OCwgMTQsIDcsIDIxNSwgNTcsIDE0LCA3LCAKKyAgICAyMTUsIDU2LCAxNCwgNywgMjE1LCA1NSwgMTQsIDcsIDIxNSwgNTQsIDE0LCA3LCAyMTUsIDUzLCAxNCwgNywgMjE1LCA1MiwgCisgICAgMTQsIDcsIDIxNSwgNTEsIDE0LCA3LCAyMTUsIDUwLCAxNCwgNywgMjE1LCA0OSwgMTQsIDcsIDIxNSwgNDgsIDE0LCA3LCAKKyAgICAyMTUsIDQ3LCAxNCwgNywgMjE1LCA0NiwgMTQsIDcsIDIxNSwgNDUsIDE0LCA3LCAyMTUsIDQ0LCAxNCwgNywgMjE1LCA0MywgCisgICAgMTQsIDcsIDIxNSwgNDIsIDE0LCA3LCAyMTUsIDQxLCAxNCwgNywgMjE1LCA0MCwgMTQsIDcsIDIxNSwgMzksIDE0LCA3LCAKKyAgICAyMTUsIDM4LCAxNCwgNywgMjEwLCA2NywgMTQsIDcsIDIxMCwgNjYsIDE0LCA3LCAyMTAsIDY1LCAxNCwgNywgMjEwLCA2NCwgCisgICAgMTQsIDcsIDIxMCwgNjMsIDE0LCA3LCAyMTAsIDYyLCAxNCwgNywgMjEwLCA2MSwgMTQsIDcsIDIxMCwgNjAsIDE0LCA3LCAKKyAgICAyMTAsIDU5LCAxNCwgNywgMjEwLCA1OCwgMTQsIDcsIDIxMCwgNTcsIDE0LCA3LCAyMTAsIDU2LCAxNCwgNywgMjEwLCA1NSwgCisgICAgMTQsIDcsIDIxMCwgNTQsIDE0LCA3LCAyMTAsIDUzLCAxNCwgNywgMjEwLCA1MiwgMTQsIDcsIDIxMCwgNTEsIDE0LCA3LCAKKyAgICAyMTAsIDUwLCAxNCwgNywgMjEwLCA0OSwgMTQsIDcsIDIxMCwgNDgsIDE0LCA3LCAyMTAsIDQ3LCAxNCwgNywgMjEwLCA0NiwgCisgICAgMTQsIDcsIDIxMCwgNDUsIDE0LCA3LCAyMTAsIDQ0LCAxNCwgNywgMjEwLCA0MywgMTQsIDcsIDIxMCwgNDIsIDE0LCA3LCAKKyAgICAyMTAsIDQxLCAxNCwgNywgMjEwLCA0MCwgMTQsIDcsIDIxMCwgMzksIDE0LCA3LCAyMTAsIDM4LCAxNCwgNywgMjEwLCAzNywgCisgICAgMTQsIDcsIDIxMCwgMzYsIDE0LCA3LCAyMTAsIDM1LCAxNCwgNywgMjEwLCAzNCwgMTQsIDcsIDIxMCwgMzMsIDE0LCA3LCAKKyAgICAyMTAsIDMyLCAxNCwgNywgMjEwLCAzMSwgMTQsIDcsIDIxMCwgMzAsIDE0LCA3LCAyMTAsIDI5LCAxNCwgNywgMjEwLCAyOCwgCisgICAgMTQsIDcsIDIxMCwgMjcsIDE0LCA3LCAyMTAsIDI2LCAxNCwgNywgMjEwLCAyNSwgMTQsIDcsIDIxMCwgMjQsIDE0LCA3LCAKKyAgICAyMDcsIDg4LCAxNCwgNywgMjA3LCA4NywgMTQsIDcsIDIwNywgODYsIDE0LCA3LCAyMDcsIDg1LCAxNCwgNywgMjA3LCA4NCwgCisgICAgMTQsIDcsIDIwNywgODMsIDE0LCA3LCAyMDcsIDgyLCAxNCwgNywgMjA3LCA4MSwgMTQsIDcsIDIwNywgODAsIDE0LCA3LCAKKyAgICAyMDcsIDc5LCAxNCwgNywgMjA3LCA3OCwgMTQsIDcsIDIwNywgNzcsIDE0LCA3LCAyMDcsIDc2LCAxNCwgNywgMjA3LCA3NSwgCisgICAgMTQsIDcsIDIwNywgNzQsIDE0LCA3LCAyMDcsIDczLCAxNCwgNywgMjA3LCA3MiwgMTQsIDcsIDIwNywgNzEsIDE0LCA3LCAKKyAgICAyMDcsIDcwLCAxNCwgNywgMjA3LCA2OSwgMTQsIDcsIDIwNywgNjgsIDE0LCA3LCAyMDcsIDY3LCAxNCwgNywgMjA3LCA2NiwgCisgICAgMTQsIDcsIDIwNywgNjUsIDE0LCA3LCAyMDcsIDY0LCAxNCwgNywgMjA3LCA2MywgMTQsIDcsIDIwNywgNjIsIDE0LCA3LCAKKyAgICAyMDcsIDYxLCAxNCwgNywgMjA3LCA2MCwgMTQsIDcsIDIwNywgNTksIDE0LCA3LCAyMDcsIDU4LCAxNCwgNywgMjA3LCA1NywgCisgICAgMTQsIDcsIDIwNywgNTYsIDE0LCA3LCAyMDcsIDU1LCAxNCwgNywgMjA3LCA1NCwgMTQsIDcsIDIwNywgNTMsIDE0LCA3LCAKKyAgICAyMDcsIDUyLCAxNCwgNywgMjA3LCA1MSwgMTQsIDcsIDIwNywgNTAsIDE0LCA3LCAyMDcsIDQ5LCAxNCwgNywgMjA3LCA0OCwgCisgICAgMTQsIDcsIDIwNywgNDcsIDE0LCA3LCAyMDcsIDQ2LCAxNCwgNywgMjA3LCA0NSwgMTQsIDcsIDIwNywgNDQsIDE0LCA3LCAKKyAgICAyMDcsIDQzLCAxNCwgNywgMjA3LCA0MiwgMTQsIDcsIDIwNiwgMTYzLCAxNCwgNywgMjA2LCAxNjIsIDE0LCA3LCAyMDYsIAorICAgIDE2MSwgMTQsIDcsIDIwNiwgMTYwLCAxNCwgNywgMjA2LCAxNTksIDE0LCA3LCAyMDYsIDE1OCwgMTQsIDcsIDIwNiwgMTU3LCAKKyAgICAxNCwgNywgMjA2LCAxNTYsIDE0LCA3LCAyMDYsIDE1NSwgMTQsIDcsIDIwNiwgMTU0LCAxNCwgNywgMjA2LCAxNTMsIDE0LCAKKyAgICA3LCAyMDYsIDE1MiwgMTQsIDcsIDIwNiwgMTUxLCAxNCwgNywgMjA2LCAxNTAsIDE0LCA3LCAyMDYsIDE0OSwgMTQsIDcsIAorICAgIDIwNiwgMTQ4LCAxNCwgNywgMjA2LCAxNDcsIDE0LCA3LCAyMDYsIDE0NiwgMTQsIDcsIDIwNiwgMTQ1LCAxNCwgNywgMjA2LCAKKyAgICAxNDQsIDE0LCA3LCAyMDYsIDE0MywgMTQsIDcsIDIwNiwgMTQyLCAxNCwgNywgMjA2LCAxNDEsIDE0LCA3LCAyMDYsIDE0MCwgCisgICAgMTQsIDcsIDIwNiwgMTM5LCAxNCwgNywgMjA2LCAxMzgsIDE0LCA3LCAyMDYsIDEzNywgMTQsIDcsIDIwNiwgMTM2LCAxNCwgCisgICAgNywgMjA2LCAxMzUsIDE0LCA3LCAyMDYsIDEzNCwgMTQsIDcsIDIwNiwgMTMzLCAxNCwgNywgMjA2LCAxMzIsIDE0LCA3LCAKKyAgICAyMDYsIDEzMSwgMTQsIDcsIDIwNiwgMTMwLCAxNCwgNywgMjA2LCAxMjksIDE0LCA3LCAyMDYsIDEyOCwgMTQsIDcsIDIwNiwgCisgICAgMTI3LCAxNCwgNywgMjA2LCAxMjYsIDE0LCA3LCAyMDYsIDEyNSwgMTQsIDcsIDIwNiwgMTI0LCAxNCwgNywgMjA2LCAxMjMsIAorICAgIDE0LCA3LCAyMDYsIDEyMiwgMTQsIDcsIDIwNiwgMTIxLCAxNCwgNywgMjA2LCAxMjAsIDE0LCA3LCAyMDYsIDExOSwgMTQsIAorICAgIDcsIDIwNiwgMTE4LCAxNCwgNywgMjA2LCAxMTcsIDE0LCA3LCAyMDYsIDExNiwgMTQsIDcsIDIwNiwgMTE1LCAxNCwgNywgCisgICAgMjA2LCAxMTQsIDE0LCA3LCAyMDYsIDExMywgMTQsIDcsIDIwNiwgMTEyLCAxNCwgNywgMjA2LCAxMTEsIDE0LCA3LCAyMDYsIAorICAgIDExMCwgMTQsIDcsIDIwNiwgMTA5LCAxNCwgNywgMjA2LCAxMDgsIDE0LCA3LCAyMDYsIDEwNywgMTQsIDcsIDIwNiwgMTA2LCAKKyAgICAxNCwgNywgMjA2LCAxMDUsIDE0LCA3LCAyMDYsIDEwNCwgMTQsIDcsIDIwNiwgMTAzLCAxNCwgNywgMjA2LCAxMDIsIDE0LCAKKyAgICA3LCAyMDYsIDEwMSwgMTQsIDcsIDIwNiwgMTAwLCAxNCwgNywgMjA2LCA5OSwgMTQsIDcsIDIwNiwgOTgsIDE0LCA3LCAyMDYsIAorICAgIDk3LCAxNCwgNywgMjA2LCA5NiwgMTQsIDcsIDIwNiwgOTUsIDE0LCA3LCAyMDYsIDk0LCAxNCwgNywgMjA2LCA5MywgMTQsIAorICAgIDcsIDIwNiwgOTIsIDE0LCA3LCAyMDYsIDkxLCAxNCwgNywgMjA2LCA5MCwgMTQsIDcsIDIwNiwgODksIDE0LCA3LCAyMDYsIAorICAgIDg4LCAxNCwgNywgMjA2LCA4NywgMTQsIDcsIDIwNCwgMTQzLCAxNCwgNywgMjA0LCAxNDIsIDE0LCA3LCAyMDQsIDE0MSwgCisgICAgMTQsIDcsIDIwNCwgMTQwLCAxNCwgNywgMjA0LCAxMzksIDE0LCA3LCAyMDQsIDEzOCwgMTQsIDcsIDIwNCwgMTM3LCAxNCwgCisgICAgNywgMjA0LCAxMzYsIDE0LCA3LCAyMDQsIDEzNSwgMTQsIDcsIDIwNCwgMTM0LCAxNCwgNywgMjA0LCAxMzMsIDE0LCA3LCAKKyAgICAyMDQsIDEzMiwgMTQsIDcsIDIwNCwgMTMxLCAxNCwgNywgMjA0LCAxMzAsIDE0LCA3LCAyMDQsIDEyOSwgMTQsIDcsIDIwNCwgCisgICAgMTI4LCAxNCwgNywgMjA0LCAxMjcsIDE0LCA3LCAyMDQsIDEyNiwgMTQsIDcsIDIwNCwgMTI1LCAxNCwgNywgMjA0LCAxMjQsIAorICAgIDE0LCA3LCAyMDQsIDEyMywgMTQsIDcsIDIwNCwgMTIyLCAxNCwgNywgMjA0LCAxMjEsIDE0LCA3LCAyMDQsIDEyMCwgMTQsIAorICAgIDcsIDIwNCwgMTE5LCAxNCwgNywgMjA0LCAxMTgsIDE0LCA3LCAyMDQsIDExNywgMTQsIDcsIDIwNCwgMTE2LCAxNCwgNywgCisgICAgMjA0LCAxMTUsIDE0LCA3LCAyMDQsIDExNCwgMTQsIDcsIDIwNCwgMTEzLCAxNCwgNywgMjA0LCAxMTIsIDE0LCA3LCAyMDMsIAorICAgIDE5NCwgMTQsIDcsIDIwMywgMTkzLCAxNCwgNywgMjAzLCAxOTIsIDE0LCA3LCAyMDMsIDE5MSwgMTQsIDcsIDIwMywgMTkwLCAKKyAgICAxNCwgNywgMjAzLCAxODksIDE0LCA3LCAyMDMsIDE4OCwgMTQsIDcsIDIwMywgMTg3LCAxNCwgNywgMjAzLCAxODYsIDE0LCAKKyAgICA3LCAyMDMsIDE4NSwgMTQsIDcsIDIwMywgMTg0LCAxNCwgNywgMjAzLCAxODMsIDE0LCA3LCAyMDMsIDEyMiwgMTQsIDcsIAorICAgIDIwMywgMTIxLCAxNCwgNywgMjAzLCAxMjAsIDE0LCA3LCAyMDMsIDExOSwgMTQsIDcsIDIwMywgMTE4LCAxNCwgNywgMjAzLCAKKyAgICAxMTcsIDE0LCA3LCAyMDMsIDExNiwgMTQsIDcsIDIwMywgMTE1LCAxNCwgNywgMjAzLCAxMTQsIDE0LCA3LCAyMDIsIDE1OCwgCisgICAgMTQsIDcsIDIwMiwgMTU3LCAxNCwgNywgMjAyLCAxNTYsIDE0LCA3LCAyMDIsIDE1NSwgMTQsIDcsIDIwMiwgMTU0LCAxNCwgCisgICAgNywgMjAyLCAxNTMsIDE0LCA3LCAyMDIsIDE1MiwgMTQsIDcsIDIwMiwgMTUxLCAxNCwgNywgMjAyLCAxNTAsIDE0LCA3LCAKKyAgICAyMDIsIDE0OSwgMTQsIDcsIDIwMiwgMTQ4LCAxNCwgNywgMjAyLCAxNDcsIDE0LCA3LCAyMDIsIDE0NiwgMTQsIDcsIDIwMiwgCisgICAgMTQ1LCAxNCwgNywgMjAyLCAxNDQsIDE0LCA3LCAyMDIsIDE0MywgMTQsIDcsIDIwMiwgMTQyLCAxNCwgNywgMjAyLCAxNDEsIAorICAgIDE0LCA3LCAyMDIsIDE0MCwgMTQsIDcsIDIwMiwgMTM5LCAxNCwgNywgMjAyLCAxMzgsIDE0LCA3LCAyMDIsIDEzNywgMTQsIAorICAgIDcsIDIwMiwgMTM2LCAxNCwgNywgMjAyLCAxMzUsIDE0LCA3LCAyMDIsIDEzNCwgMTQsIDcsIDIwMiwgMTMzLCAxNCwgNywgCisgICAgMjAyLCAxMzIsIDE0LCA3LCAyMDIsIDEzMSwgMTQsIDcsIDIwMiwgMTMwLCAxNCwgNywgMjAyLCAxMjksIDE0LCA3LCAyMDIsIAorICAgIDEyOCwgMTQsIDcsIDIwMiwgMTI3LCAxNCwgNywgMjAyLCAxMjYsIDE0LCA3LCAyMDIsIDEyNSwgMTQsIDcsIDIwMiwgMTI0LCAKKyAgICAxNCwgNywgMjAyLCAxMjMsIDE0LCA3LCAyMDIsIDEyMiwgMTQsIDcsIDIwMiwgMTIxLCAxNCwgNywgMjAyLCAxMjAsIDE0LCAKKyAgICA3LCAyMDIsIDExOSwgMTQsIDcsIDIwMiwgMTE4LCAxNCwgNywgMjUyLCAyNCwgMTQsIDcsIDI1MiwgMjMsIDE0LCA3LCAyNTIsIAorICAgIDIyLCAxNCwgNywgMjUyLCAyMSwgMTQsIDcsIDI1MiwgMjAsIDE0LCA3LCAyNTIsIDE5LCAxNCwgNywgMjUyLCAxOCwgMTQsIAorICAgIDcsIDI1MiwgMTcsIDE0LCA3LCAyNTIsIDE2LCAxNCwgNywgMjUyLCAxNSwgMTQsIDcsIDI1MiwgMTQsIDE0LCA3LCAyNTIsIAorICAgIDEzLCAxNCwgNywgMjUyLCAxMiwgMTQsIDcsIDI1MiwgMTEsIDE0LCA3LCAyNTIsIDEwLCAxNCwgNywgMjUyLCA5LCAxNCwgNywgCisgICAgMjUyLCA4LCAxNCwgNywgMjUyLCA3LCAxNCwgNywgMjUyLCA2LCAxNCwgNywgMjUyLCA1LCAxNCwgNywgMjUyLCA0LCAxNCwgCisgICAgNywgMjUyLCAzLCAxNCwgNywgMjUyLCAyLCAxNCwgNywgMjUyLCAxLCAxNCwgNywgMjUyLCAwLCAxNCwgNywgMjUxLCAyNTUsIAorICAgIDE0LCA3LCAyNTEsIDI1NCwgMTQsIDcsIDI1MSwgMjUzLCAxNCwgNywgMjUxLCAyNTIsIDE0LCA3LCAyNTEsIDI1MSwgMTQsIAorICAgIDcsIDI1MSwgMjUwLCAxNCwgNywgMjUxLCAyNDksIDE0LCA3LCAyNTEsIDI0OCwgMTQsIDcsIDI1MSwgMjQ3LCAyNywgNywgCisgICAgMjU1LCAxOCwgMjcsIDcsIDI1NSwgMTcsIDI3LCA3LCAyNTUsIDE2LCAyNywgNywgMjU1LCAxNSwgMjcsIDcsIDI1NSwgMTQsIAorICAgIDI3LCA3LCAyNTUsIDEyLCAyNywgNywgMjU1LCA5LCAyNywgNywgMjU1LCA4LCAyNywgNywgMjU1LCA3LCAyNywgNywgMjU1LCAKKyAgICA2LCAyNywgNywgMjU1LCA1LCAyNywgNywgMjU1LCA0LCAyNywgNywgMjU1LCAzLCAyNywgNywgMjU1LCAyLCAyNywgNywgCisgICAgMjU1LCAxLCAyNywgNywgMjU0LCAyNTUsIDI3LCA3LCAyNTQsIDI1NCwgMjcsIDcsIDI1NCwgMjUzLCAyNywgNywgMjU0LCAKKyAgICAyNTEsIDI3LCA3LCAyNTQsIDI1MCwgMjcsIDcsIDI1NCwgMjQ5LCAyNywgNywgMjU0LCAyNDgsIDI3LCA3LCAyNTQsIDI0NywgCisgICAgMjcsIDcsIDI1NCwgMjQ2LCAyNywgNywgMjU0LCAyNDUsIDI3LCA3LCAyNTQsIDI0NCwgMjcsIDcsIDI1NCwgMjQzLCAyNywgCisgICAgNywgMjU0LCAyNDIsIDI3LCA3LCAyNTQsIDI0MSwgMjcsIDcsIDI1NCwgMjQwLCAyNywgNywgMjU0LCAyMzgsIDI3LCA3LCAKKyAgICAyNTQsIDIzNywgMjcsIDcsIDI1NCwgMjM2LCAyNywgNywgMjU0LCAyMzUsIDI3LCA3LCAyNTQsIDIzMywgMjcsIDcsIDI1NCwgCisgICAgMjMyLCAyNywgNywgMjU0LCAyMzEsIDI3LCA3LCAyNTQsIDIzMCwgMjcsIDcsIDI1NCwgMjI5LCAyNywgNywgMjU0LCAyMjgsIAorICAgIDI3LCA3LCAyNTQsIDIyNywgMjcsIDcsIDI1NCwgMjI2LCAyNywgNywgMjU0LCAyMjUsIDI3LCA3LCAyNTQsIDIyMywgMjcsIAorICAgIDcsIDI1NCwgMjIyLCAyNywgNywgMjU0LCAyMjEsIDI3LCA3LCAyNTQsIDIxOSwgMjcsIDcsIDI1NCwgMjE3LCAyNywgNywgCisgICAgMjU0LCAyMTYsIDI3LCA3LCAyNTQsIDIxNSwgMjcsIDcsIDI1NCwgMjE0LCAyNywgNywgMjU0LCAyMTMsIDI3LCA3LCAyNTQsIAorICAgIDIxMiwgMjcsIDcsIDI1NCwgMjExLCAyNywgNywgMjU0LCAyMTAsIDI3LCA3LCAyNTQsIDIwOSwgMjcsIDcsIDI1NCwgMjA4LCAKKyAgICAyNywgNywgMjU0LCAyMDcsIDI3LCA3LCAyNTQsIDIwNiwgMjcsIDcsIDI1NCwgMjA1LCAyNywgNywgMjU0LCAyMDQsIDI3LCAKKyAgICA3LCAyNTQsIDIwMywgMjcsIDcsIDI1NCwgMjAyLCAyNywgNywgMjU0LCAyMDEsIDI3LCA3LCAyNTQsIDIwMCwgMjcsIDcsIAorICAgIDI1NCwgMTk5LCAyNywgNywgMjU0LCAxOTgsIDI3LCA3LCAyNTQsIDE5NywgMjcsIDcsIDI1NCwgMTk2LCAyNywgNywgMjU0LCAKKyAgICAxOTUsIDI3LCA3LCAyNTQsIDE5NCwgMjcsIDcsIDI1NCwgMTkzLCAyNywgNywgMjU0LCAxOTIsIDI3LCA3LCAyNTQsIDE5MSwgCisgICAgMjcsIDcsIDI1NCwgMTkwLCAyNywgNywgMjU0LCAxODksIDI3LCA3LCAyNTQsIDE4OCwgMjcsIDcsIDI1NCwgMTg3LCAyNywgCisgICAgNywgMjU0LCAxODYsIDI3LCA3LCAyNTQsIDE4NSwgMjcsIDcsIDI1NCwgMTg0LCAyNywgNywgMjU0LCAxODMsIDI3LCA3LCAKKyAgICAyNTQsIDE4MiwgMjcsIDcsIDI1NCwgMTgxLCAyNywgNywgMjU0LCAxODAsIDI3LCA3LCAyNTQsIDE3OSwgMjcsIDcsIDI1NCwgCisgICAgMTc4LCAyNywgNywgMjU0LCAxNzcsIDI3LCA3LCAyNTQsIDE3NiwgMjcsIDcsIDI1NCwgMTc1LCAyNywgNywgMjU0LCAxNzQsIAorICAgIDI3LCA3LCAyNTQsIDE3MywgMjcsIDcsIDI1NCwgMTcyLCAyNywgNywgMjU0LCAxNzEsIDI3LCA3LCAyNTQsIDE3MCwgMjcsIAorICAgIDcsIDI1NCwgMTY5LCAyNywgNywgMjU0LCAxNjgsIDI3LCA3LCAyNTQsIDE2NywgMjcsIDcsIDI1NCwgMTY2LCAyNywgNywgCisgICAgMjU0LCAxNjUsIDI3LCA3LCAyNTQsIDE2NCwgMjcsIDcsIDI1NCwgMTYzLCAyNywgNywgMjU0LCAxNjIsIDI3LCA3LCAyNTQsIAorICAgIDE2MSwgMjcsIDcsIDI1NCwgMTYwLCAyNywgNywgMjU0LCAxNTksIDI3LCA3LCAyNTQsIDE1OCwgMjcsIDcsIDI1NCwgMTU3LCAKKyAgICAyNywgNywgMjU0LCAxNTYsIDI3LCA3LCAyNTQsIDE1NSwgMjcsIDcsIDI1NCwgMTU0LCAyNywgNywgMjU0LCAxNTMsIDI3LCAKKyAgICA3LCAyNTQsIDE1MSwgMjcsIDcsIDI1NCwgMTUwLCAyNywgNywgMjU0LCAxNDksIDI3LCA3LCAyNTQsIDE0OCwgMjcsIDcsIAorICAgIDI1NCwgMTQ3LCAyNywgNywgMjU0LCAxNDYsIDI3LCA3LCAyNTQsIDE0NSwgMjcsIDcsIDI1NCwgMTQ0LCAyNywgNywgMjU0LCAKKyAgICAxNDMsIDI3LCA3LCAyNTQsIDE0MiwgMjcsIDcsIDI1NCwgMTQxLCAyNywgNywgMjU0LCAxNDAsIDI3LCA3LCAyNTQsIDEzOSwgCisgICAgMjcsIDcsIDI1NCwgMTM4LCAyNywgNywgMjU0LCAxMzcsIDI3LCA3LCAyNTQsIDEzNiwgMjcsIDcsIDI1NCwgMTM1LCAyNywgCisgICAgNywgMjU0LCAxMzQsIDI3LCA3LCAyNTQsIDEzMywgMjcsIDcsIDI1NCwgMTMyLCAyNywgNywgMjU0LCAxMzEsIDI3LCA3LCAKKyAgICAyNTQsIDEzMCwgMjcsIDcsIDI1NCwgMTI5LCAyNywgNywgMjU0LCAxMjgsIDI3LCA3LCAyNTQsIDEyNywgMjcsIDcsIDI1NCwgCisgICAgMTI2LCAyNywgNywgMjU0LCAxMjUsIDI3LCA3LCAyNTQsIDEyNCwgMjcsIDcsIDI1NCwgMTIzLCAyNywgNywgMjU0LCAxMjIsIAorICAgIDI3LCA3LCAyNTQsIDEyMSwgMjcsIDcsIDI1NCwgMTIwLCAyNywgNywgMjU0LCAxMTksIDI3LCA3LCAyNTQsIDExOCwgMjcsIAorICAgIDcsIDI1NCwgMTE2LCAyNywgNywgMjU0LCAxMTUsIDI3LCA3LCAyNTQsIDExNCwgMjcsIDcsIDI1NCwgMTEzLCAyNywgNywgCisgICAgMjU0LCAxMTIsIDI3LCA3LCAyNTQsIDExMSwgMjcsIDcsIDI1NCwgMTEwLCAyNywgNywgMjU0LCAxMDksIDI3LCA3LCAyNTQsIAorICAgIDEwOCwgMjcsIDcsIDI1NCwgMTA3LCAyNywgNywgMjU0LCAxMDYsIDI3LCA3LCAyNTQsIDEwNSwgMjcsIDcsIDI1NCwgMTAzLCAKKyAgICAyNywgNywgMjU0LCAxMDIsIDI3LCA3LCAyNTQsIDEwMSwgMjcsIDcsIDI1NCwgMTAwLCAyNywgNywgMjU0LCA5OSwgMjcsIDcsIAorICAgIDI1NCwgOTgsIDI3LCA3LCAyNTQsIDk3LCAyNywgNywgMjU0LCA5NiwgMjcsIDcsIDI1NCwgOTUsIDI3LCA3LCAyNTQsIDk0LCAKKyAgICAyNywgNywgMjU0LCA5MywgMjcsIDcsIDI1NCwgOTIsIDI3LCA3LCAyNTQsIDkxLCAyNywgNywgMjU0LCA5MCwgMjcsIDcsIAorICAgIDI1NCwgODksIDI3LCA3LCAyNTQsIDg4LCAyNywgNywgMjU0LCA4NywgMjcsIDcsIDI1NCwgODYsIDI3LCA3LCAyNTQsIDg1LCAKKyAgICAyNywgNywgMjU0LCA4NCwgMjcsIDcsIDI1NCwgODMsIDI3LCA3LCAyNTQsIDgyLCAyNywgNywgMjU0LCA4MSwgMjcsIDcsIAorICAgIDI1NCwgODAsIDI3LCA3LCAyNTQsIDc5LCAyNywgNywgMjU0LCA3OCwgMjcsIDcsIDI1NCwgNzcsIDI3LCA3LCAyNTQsIDc2LCAKKyAgICAyNywgNywgMjU0LCA3NSwgMjcsIDcsIDI1NCwgNzQsIDI3LCA3LCAyNTQsIDczLCAyNywgNywgMjU0LCA3MiwgMjcsIDcsIAorICAgIDI1NCwgNzEsIDI3LCA3LCAyNTQsIDcwLCAyNywgNywgMjU0LCA2OSwgMjcsIDcsIDI1NCwgNjgsIDI3LCA3LCAyNTQsIDY3LCAKKyAgICAyNywgNywgMjU0LCA2NiwgMjcsIDcsIDI1NCwgNjUsIDI3LCA3LCAyNTQsIDY0LCAyNywgNywgMjU0LCA2MywgMjcsIDcsIAorICAgIDI1NCwgNjIsIDI3LCA3LCAyNTQsIDYxLCAyNywgNywgMjU0LCA2MCwgMjcsIDcsIDI1NCwgNTksIDI3LCA3LCAyNTQsIDU4LCAKKyAgICAyNywgNywgMjU0LCA1NywgMjcsIDcsIDI1NCwgNTYsIDI3LCA3LCAyNTQsIDU1LCAyNywgNywgMjU0LCA1NCwgMjcsIDcsIAorICAgIDI1NCwgNTMsIDI3LCA3LCAyNTQsIDUyLCAyNywgNywgMjU0LCA1MSwgMjcsIDcsIDI1NCwgNTAsIDI3LCA3LCAyNTQsIDQ5LCAKKyAgICAyNywgNywgMjU0LCA0OCwgMjcsIDcsIDI1NCwgNDcsIDI3LCA3LCAyNTQsIDQ2LCAyNywgNywgMjU0LCA0NSwgMjcsIDcsIAorICAgIDI1NCwgNDQsIDI3LCA3LCAyNTQsIDQzLCAyNywgNywgMjU0LCA0MiwgMjcsIDcsIDI1NCwgNDEsIDI3LCA3LCAyNTQsIDQwLCAKKyAgICAyNywgNywgMjU0LCAzOSwgMjcsIDcsIDI1NCwgMzgsIDI3LCA3LCAyNTQsIDM3LCAyNywgNywgMjU0LCAzNiwgMjcsIDcsIAorICAgIDI1NCwgMzUsIDI3LCA3LCAyNTQsIDMzLCAyNywgNywgMjU0LCAzMiwgMjcsIDcsIDI1NCwgMzEsIDI3LCA3LCAyNTQsIDMwLCAKKyAgICAyNywgNywgMjU0LCAyOSwgMjcsIDcsIDI1NCwgMjgsIDI3LCA3LCAyNTQsIDI3LCAyNywgNywgMjU0LCAyNiwgMjcsIDcsIAorICAgIDI1NCwgMjUsIDI3LCA3LCAyNTQsIDI0LCAyNywgNywgMjU0LCAyMywgMjcsIDcsIDI1NCwgMjIsIDI3LCA3LCAyNTQsIDIxLCAKKyAgICAyNywgNywgMjU0LCAyMCwgMjcsIDcsIDI1NCwgMTksIDI3LCA3LCAyNTQsIDE4LCAyNywgNywgMjU0LCAxNywgMjcsIDcsIAorICAgIDI1NCwgMTYsIDI3LCA3LCAyNTQsIDE1LCAyNywgNywgMjU0LCAxNCwgMjcsIDcsIDI1NCwgMTMsIDI3LCA3LCAyNTQsIDEyLCAKKyAgICAyNywgNywgMjU0LCAxMSwgMjcsIDcsIDI1NCwgMTAsIDI3LCA3LCAyNTQsIDksIDI3LCA3LCAyNTQsIDgsIDI3LCA3LCAyNTQsIAorICAgIDcsIDI3LCA3LCAyNTQsIDYsIDI3LCA3LCAyNTQsIDUsIDI3LCA3LCAyNTQsIDQsIDI3LCA3LCAyNTQsIDMsIDI3LCA3LCAKKyAgICAyNTQsIDIsIDI3LCA3LCAyNTQsIDEsIDI3LCA3LCAyNTQsIDAsIDI3LCA3LCAyNTMsIDI1NSwgMjcsIDcsIDI1MywgMjU0LCAKKyAgICAyNywgNywgMjUzLCAyNTMsIDI3LCA3LCAyNTMsIDI1MiwgMjcsIDcsIDI1MywgMjUxLCAyNywgNywgMjUzLCAyNTAsIDI3LCAKKyAgICA3LCAyNTMsIDI0OSwgMjcsIDcsIDI1MywgMjQ4LCAyNywgNywgMjUzLCAyNDcsIDI3LCA3LCAyNTMsIDI0NiwgMjcsIDcsIAorICAgIDI1MywgMjQ1LCAyNywgNywgMjUzLCAyNDQsIDI3LCA3LCAyNTMsIDI0MywgMjcsIDcsIDI1MywgMjQyLCAyNywgNywgMjUzLCAKKyAgICAyNDEsIDI3LCA3LCAyNTMsIDI0MCwgMjcsIDcsIDI1MywgMjM5LCAyNywgNywgMjUzLCAyMzgsIDI3LCA3LCAyNTMsIDIzNywgCisgICAgMjcsIDcsIDI1MywgMjM2LCAyNywgNywgMjUzLCAyMzUsIDI3LCA3LCAyNTMsIDIzNCwgMjcsIDcsIDI1MywgMjMzLCAyNywgCisgICAgNywgMjUzLCAyMzIsIDI3LCA3LCAyNTMsIDIzMSwgMjcsIDcsIDI1MywgMjMwLCAyNywgNywgMjUzLCAyMjksIDI3LCA3LCAKKyAgICAyNTMsIDIyOCwgMjcsIDcsIDI1MywgMjI3LCAyNywgNywgMjUzLCAyMjYsIDI3LCA3LCAyNTMsIDIyNSwgMjcsIDcsIDI1MywgCisgICAgMjI0LCAyNywgNywgMjUzLCAyMjMsIDI3LCA3LCAyNTMsIDIyMiwgMjcsIDcsIDI1MywgMjIxLCAyNywgNywgMjUzLCAyMjAsIAorICAgIDI3LCA3LCAyNTMsIDIxOSwgMjcsIDcsIDI1MywgMjE4LCAyNywgNywgMjUzLCAyMTcsIDI3LCA3LCAyNTMsIDIxNiwgMjcsIAorICAgIDcsIDI1MywgMjE1LCAyNywgNywgMjUzLCAyMTQsIDI3LCA3LCAyNTMsIDIxMywgMjcsIDcsIDI1MywgMjEyLCAyNywgNywgCisgICAgMjUzLCAyMTEsIDI3LCA3LCAyNTMsIDIxMCwgMjcsIDcsIDI1MywgMjA5LCAyNywgNywgMjUzLCAyMDgsIDI3LCA3LCAyNTMsIAorICAgIDIwNywgMjcsIDcsIDI1MywgMjA2LCAyNywgNywgMjUzLCAyMDUsIDI3LCA3LCAyNTMsIDIwNCwgMjcsIDcsIDI1MywgMjAzLCAKKyAgICAyNywgNywgMjUzLCAyMDIsIDI3LCA3LCAyNTMsIDIwMSwgMjcsIDcsIDI1MywgMjAwLCAyNywgNywgMjUzLCAxOTksIDI3LCAKKyAgICA3LCAyNTMsIDE5OCwgMjcsIDcsIDI1MywgMTk3LCAyNywgNywgMjUzLCAxOTYsIDI3LCA3LCAyNTMsIDE5NSwgMjcsIDcsIAorICAgIDI1MywgMTk0LCAyNywgNywgMjUzLCAxOTMsIDI3LCA3LCAyNTMsIDE5MiwgMjcsIDcsIDI1MywgMTkxLCAyNywgNywgMjUzLCAKKyAgICAxOTAsIDI3LCA3LCAyNTMsIDE4OSwgMjcsIDcsIDI1MywgMTg4LCAyNywgNywgMjUzLCAxODcsIDI3LCA3LCAyNTMsIDE4NiwgCisgICAgMjcsIDcsIDI1MywgMTg1LCAyNywgNywgMjUzLCAxODQsIDI3LCA3LCAyNTMsIDE4MywgMjcsIDcsIDI1MywgMTgyLCAyNywgCisgICAgNywgMjUzLCAxODEsIDI3LCA3LCAyNTMsIDE4MCwgMjcsIDcsIDI1MywgMTc5LCAyNywgNywgMjUzLCAxNzcsIDI3LCA3LCAKKyAgICAyNTMsIDE3NiwgMjcsIDcsIDI1MywgMTc1LCAyNywgNywgMjUzLCAxNzQsIDI3LCA3LCAyNTMsIDE3MywgMjcsIDcsIDI1MywgCisgICAgMTcyLCAyNywgNywgMjUzLCAxNzEsIDI3LCA3LCAyNTMsIDE3MCwgMjcsIDcsIDI1MywgMTY5LCAyNywgNywgMjUzLCAxNjgsIAorICAgIDI3LCA3LCAyNTMsIDE2NywgMjcsIDcsIDI1MywgMTY0LCAyNywgNywgMjUzLCAxNjMsIDI3LCA3LCAyNTMsIDE2MiwgMjcsIAorICAgIDcsIDI1MywgMTYxLCAyNywgNywgMjUzLCAxNTcsIDI3LCA3LCAyNTMsIDE1NiwgMjcsIDcsIDI1MywgMTU1LCAyNywgNywgCisgICAgMjUzLCAxNTQsIDI3LCA3LCAyNTMsIDE1MywgMjcsIDcsIDI1MywgMTUyLCAyNywgNywgMjUzLCAxNTEsIDI3LCA3LCAyNTMsIAorICAgIDE1MCwgMjcsIDcsIDI1MywgMTQ5LCAyNywgNywgMjUzLCAxNDgsIDI3LCA3LCAyNTMsIDE0NywgMjcsIDcsIDI1MywgMTQ2LCAKKyAgICAyNywgNywgMjUzLCAxNDUsIDI3LCA3LCAyNTMsIDE0NCwgMjcsIDcsIDI1MywgMTQzLCAyNywgNywgMjUzLCAxNDIsIDI3LCAKKyAgICA3LCAyNTMsIDE0MSwgMjcsIDcsIDI1MywgMTQwLCAyNywgNywgMjUzLCAxMzksIDI3LCA3LCAyNTMsIDEzNywgMjcsIDcsIAorICAgIDI1MywgMTM2LCAyNywgNywgMjUzLCAxMzUsIDI3LCA3LCAyNTMsIDEzNCwgMjcsIDcsIDI1MywgMTMzLCAyNywgNywgMjUzLCAKKyAgICAxMzIsIDI3LCA3LCAyNTMsIDEzMSwgMjcsIDcsIDI1MywgMTMwLCAyNywgNywgMjUzLCAxMjksIDI3LCA3LCAyNTMsIDEyOCwgCisgICAgMjcsIDcsIDI1MywgMTI3LCAyNywgNywgMjUzLCAxMjYsIDI3LCA3LCAyNTMsIDEyNSwgMjcsIDcsIDI1MywgMTI0LCAyNywgCisgICAgNywgMjUzLCAxMjMsIDI3LCA3LCAyNTMsIDEyMiwgMjcsIDcsIDI1MywgMTIxLCAyNywgNywgMjUzLCAxMjAsIDI3LCA3LCAKKyAgICAyNTMsIDExOSwgMjcsIDcsIDI1MywgMTE4LCAyNywgNywgMjUzLCAxMTcsIDI3LCA3LCAyNTMsIDExNiwgMjcsIDcsIDI1MywgCisgICAgMTE1LCAyNywgNywgMjUzLCAxMTQsIDI3LCA3LCAyNTMsIDExMywgMjcsIDcsIDI1MywgMTEyLCAyNywgNywgMjUzLCAxMTEsIAorICAgIDI3LCA3LCAyNTMsIDExMCwgMjcsIDcsIDI1MywgMTA5LCAyNywgNywgMjUzLCAxMDgsIDI3LCA3LCAyNTMsIDEwNywgMjcsIAorICAgIDcsIDI1MywgMTA2LCAyNywgNywgMjUzLCAxMDUsIDI3LCA3LCAyNTMsIDEwNCwgMjcsIDcsIDI1MywgMTAzLCAyNywgNywgCisgICAgMjUzLCAxMDIsIDI3LCA3LCAyNTMsIDEwMSwgMjcsIDcsIDI1MywgMTAwLCAyNywgNywgMjUzLCA5OSwgMjcsIDcsIDI1MywgCisgICAgOTgsIDI3LCA3LCAyNTMsIDk3LCAyNywgNywgMjUzLCA5NiwgMjcsIDcsIDI1MywgOTUsIDI3LCA3LCAyNTMsIDk0LCAyNywgCisgICAgNywgMjUzLCA5MywgMjcsIDcsIDI1MywgOTIsIDI3LCA3LCAyNTMsIDkxLCAyNywgNywgMjUzLCA5MCwgMjcsIDcsIDI1MywgCisgICAgODksIDI3LCA3LCAyNTMsIDg4LCAyNywgNywgMjUzLCA4NywgMjcsIDcsIDI1MywgODYsIDI3LCA3LCAyNTMsIDg1LCAyNywgCisgICAgNywgMjUzLCA4NCwgMjcsIDcsIDI1MywgODMsIDI3LCA3LCAyNTMsIDgyLCAyNywgNywgMjUzLCA4MSwgMjcsIDcsIDI1MywgCisgICAgODAsIDI3LCA3LCAyNTMsIDc5LCAyNywgNywgMjUzLCA3OCwgMjcsIDcsIDI1MywgNzcsIDI3LCA3LCAyNTMsIDc2LCAyMTYsIAorICAgIDIyMSwgMjE5LCAyNDUsIDIxNiwgNTcsIDI3LCA3LCAyNTMsIDc1LCAyNywgNywgMjUzLCA3NCwgMjcsIDcsIDI1MywgNzMsIAorICAgIDI3LCA3LCAyNTMsIDcyLCAyNywgNywgMjUzLCA3MSwgMjcsIDcsIDI1MywgNzAsIDI3LCA3LCAyNTMsIDY5LCAyNywgNywgCisgICAgMjUzLCA2OCwgMjcsIDcsIDI1MywgNjcsIDI3LCA3LCAyNTMsIDY2LCAyNywgNywgMjUzLCA2NSwgMjcsIDcsIDI1MywgNjQsIAorICAgIDE5OSwgMjcsIDcsIDI1MywgNjMsIDI3LCA3LCAyNTMsIDYyLCAyNywgNywgMjUzLCA2MSwgMjcsIDcsIDI1MywgNjAsIDI3LCAKKyAgICA3LCAyNTMsIDU5LCAyNywgNywgMjUzLCA1OCwgMjcsIDcsIDI1MywgNTcsIDI3LCA3LCAyNTMsIDU1LCAyNywgNywgMjUzLCAKKyAgICA1MywgMjcsIDcsIDI1MywgNTEsIDI3LCA3LCAyNTMsIDQ5LCAyNywgNywgMjUzLCA0NywgMjcsIDcsIDI1MywgNDUsIDI3LCAKKyAgICA3LCAyNTMsIDQzLCAyNywgNywgMjUzLCA0MSwgMjcsIDcsIDI1MywgMzksIDI3LCA3LCAyNTMsIDM3LCAyNDgsIDE0MiwgCisgICAgMjI3LCAzNiwgODIsIDI3LCA3LCAyNTMsIDM1LCAyNDEsIDg0LCAyMjcsIDM2LCA4MiwgMjcsIDcsIDI1MywgMzQsIDI3LCA3LCAKKyAgICAyNTMsIDMyLCAyNywgNywgMjUzLCAzMCwgMjcsIDcsIDI1MywgMjgsIDI3LCA3LCAyNTMsIDI2LCAyNywgNywgMjUzLCAyNCwgCisgICAgMjcsIDcsIDI1MywgMjIsIDI3LCA3LCAyNTMsIDIwLCAyNywgNywgMjUzLCAxOCwgMjcsIDcsIDI1MywgMTcsIDI3LCA3LCAKKyAgICAyNTMsIDE2LCAyNywgNywgMjUzLCAxNSwgMjcsIDcsIDI1MywgMTQsIDI3LCA3LCAyNTMsIDEzLCAyNywgNywgMjUzLCAxMiwgCisgICAgMjcsIDcsIDI1MywgMTEsIDI3LCA3LCAyNTMsIDEwLCAyNywgNywgMjUzLCA5LCAyNywgNywgMjUzLCA4LCAyNywgNywgMjUzLCAKKyAgICA3LCAyNywgNywgMjUzLCA2LCAyNywgNywgMjUzLCA1LCAyNywgNywgMjUzLCA0LCAyNywgNywgMjUzLCAzLCAyNywgNywgCisgICAgMjUzLCAyLCAyNywgNywgMjUzLCAxLCAyNywgNywgMjUzLCAwLCAyNywgNywgMjUyLCAyNTUsIDI3LCA3LCAyNTIsIDI1NCwgCisgICAgMjcsIDcsIDI1MiwgMjUzLCAyNywgNywgMjUyLCAyNTIsIDI3LCA3LCAyNTIsIDI1MSwgMjcsIDcsIDI1MiwgMjUwLCAyNywgCisgICAgNywgMjUyLCAyNDksIDI3LCA3LCAyNTIsIDI0OCwgMjcsIDcsIDI1MiwgMjQ3LCAyNywgNywgMjUyLCAyNDYsIDI3LCA3LCAKKyAgICAyNTIsIDI0NSwgMjcsIDcsIDI1MiwgMjQ0LCAyNywgNywgMjUyLCAyNDMsIDI3LCA3LCAyNTIsIDI0MiwgMjcsIDcsIDI1MiwgCisgICAgMjQxLCAyNywgNywgMjUyLCAyNDAsIDI3LCA3LCAyNTIsIDIzOSwgMjcsIDcsIDI1MiwgMjM4LCAyNywgNywgMjUyLCAyMzcsIAorICAgIDI3LCA3LCAyNTIsIDIzNiwgMjcsIDcsIDI1MiwgMjM1LCAyNywgNywgMjUyLCAyMzQsIDI3LCA3LCAyNTIsIDIzMywgMjcsIAorICAgIDcsIDI1MiwgMjMyLCAyNywgNywgMjUyLCAyMzEsIDI3LCA3LCAyNTIsIDIzMCwgMjcsIDcsIDI1MiwgMjI5LCAyNywgNywgCisgICAgMjUyLCAyMjgsIDI3LCA3LCAyNTIsIDIyNywgMjcsIDcsIDI1MiwgMjI2LCAyNywgNywgMjUyLCAyMjUsIDI3LCA3LCAyNTIsIAorICAgIDIyNCwgMjcsIDcsIDI1MiwgMjIzLCAyNywgNywgMjUyLCAyMjIsIDI3LCA3LCAyNTIsIDIyMSwgMjcsIDcsIDI1MiwgMjIwLCAKKyAgICAyNywgNywgMjUyLCAyMTksIDI3LCA3LCAyNTIsIDIxOCwgMjcsIDcsIDI1MiwgMjE3LCAyNywgNywgMjUyLCAyMTYsIDI3LCAKKyAgICA3LCAyNTIsIDIxNSwgMjcsIDcsIDI1MiwgMjE0LCAyNywgNywgMjUyLCAyMTMsIDI3LCA3LCAyNTIsIDIxMiwgMjcsIDcsIAorICAgIDI1MiwgMjExLCAyNywgNywgMjUyLCAyMTAsIDI3LCA3LCAyNTIsIDIwOSwgMjcsIDcsIDI1MiwgMjA4LCAyNywgNywgMjUyLCAKKyAgICAyMDcsIDI3LCA3LCAyNTIsIDIwNiwgMjcsIDcsIDI1MiwgMjA1LCAyNywgNywgMjUyLCAyMDQsIDI3LCA3LCAyNTIsIDIwMywgCisgICAgMjcsIDcsIDI1MiwgMjAyLCAyNywgNywgMjUyLCAyMDEsIDI3LCA3LCAyNTIsIDIwMCwgMjcsIDcsIDI1MiwgMTk5LCAyNywgCisgICAgNywgMjUyLCAxOTgsIDI3LCA3LCAyNTIsIDE5NywgMjcsIDcsIDI1MiwgMTk2LCAyNywgNywgMjUyLCAxOTUsIDI3LCA3LCAKKyAgICAyNTIsIDE5NCwgMjcsIDcsIDI1MiwgMTkzLCAyNywgNywgMjUyLCAxOTIsIDI3LCA3LCAyNTIsIDE5MSwgMjcsIDcsIDI1MiwgCisgICAgMTkwLCAyNywgNywgMjUyLCAxODksIDI3LCA3LCAyNTIsIDE4OCwgMjcsIDcsIDI1MiwgMTg3LCAyNywgNywgMjUyLCAxODYsIAorICAgIDI3LCA3LCAyNTIsIDE4NSwgMjcsIDcsIDI1MiwgMTg0LCAyNywgNywgMjUyLCAxODMsIDI3LCA3LCAyNTIsIDE4MiwgMjcsIAorICAgIDcsIDI1MiwgMTgxLCAyNywgNywgMjUyLCAxODAsIDI3LCA3LCAyNTIsIDE3OSwgMjcsIDcsIDI1MiwgMTc4LCAyNywgNywgCisgICAgMjUyLCAxNzcsIDI3LCA3LCAyNTIsIDE3NiwgMjcsIDcsIDI1MiwgMTc1LCAyNywgNywgMjUyLCAxNzQsIDI3LCA3LCAyNTIsIAorICAgIDE3MywgMjcsIDcsIDI1MiwgMTcyLCAyNywgNywgMjUyLCAxNzEsIDI3LCA3LCAyNTIsIDE3MCwgMjcsIDcsIDI1MiwgMTY5LCAKKyAgICAyNywgNywgMjUyLCAxNjgsIDI3LCA3LCAyNTIsIDE2NywgMjcsIDcsIDI1MiwgMTY2LCAyNywgNywgMjUyLCAxNjUsIDI3LCAKKyAgICA3LCAyNTIsIDE2NCwgMjQsIDEsIDIxOCwgMTk4LCAyMjIsIDEzNiwgMjI0LCAxOTcsIDI0LCAxLCAyMTgsIDE5OCwgMjM4LCAKKyAgICAxOTgsIDIzOSwgMTc4LCAyNCwgMSwgMjE4LCAxOTgsIDIxOCwgNDcsIDIyNCwgMTk4LCAyMTgsIDExNSwgMjQsIDEsIDIxOCwgCisgICAgMTk4LCAyMTgsIDQ3LCAyMjQsIDE5OCwgMjE4LCAxMTYsIDI0LCAxLCAyMTgsIDE5OCwgMjIzLCAxMDcsIDIyNCwgMTk3LCAKKyAgICAyNCwgMSwgMjE4LCAxOTgsIDIxMiwgMTk1LCAyNCwgMSwgMjE4LCAxOTgsIDIwOCwgMTk5LCAyMjQsIDE5NywgMjQsIDEsIAorICAgIDIxOCwgMTk4LCAyMjAsIDIxNSwgMjI0LCAxOTcsIDI0LCAxLCAyMTgsIDE5OCwgMjEyLCAyNTQsIDIxOSwgMTY5LCAyMjIsIAorICAgIDMyLCAyNCwgMSwgMjE4LCAxOTgsIDIxOCwgNDcsIDIxOSwgMTY5LCAyMjIsIDMzLCAyMTgsIDExNSwgMjQsIDEsIDIxOCwgCisgICAgMTk4LCAyMTgsIDQ3LCAyMTksIDE2OSwgMjIyLCAzMywgMjE4LCAxMTYsIDI0LCAxLCAyMTgsIDE5OCwgMjI1LCAxNTYsIDI0LCAKKyAgICAxLCAyMTgsIDE5OCwgMjA3LCAyMDQsIDIyNSwgMTU3LCAyNCwgMSwgMjE4LCAxOTgsIDIyMiwgMTk3LCAyNCwgMSwgMjE4LCAKKyAgICAxOTgsIDIyNSwgMTUzLCAyNCwgMSwgMjE4LCAxOTgsIDIyNSwgMTExLCAyNCwgMSwgMjE4LCAxOTgsIDIyMywgMTg2LCAyNCwgCisgICAgMSwgMjE4LCAxOTgsIDIxMywgMTE0LCAyNCwgMSwgMjE4LCAxOTgsIDIyMSwgOTEsIDI0LCAxLCAyMTgsIDE5OCwgMjI5LCAKKyAgICAxNjMsIDI0LCAxLCAyMTgsIDE5OCwgMjIyLCAwLCAyNCwgMSwgMjE4LCAxOTgsIDIxMCwgMTc5LCAyNCwgMSwgMjE4LCAxOTgsIAorICAgIDIyMiwgMTM1LCAyNCwgMSwgMjE4LCAxOTgsIDIyOCwgMTAsIDI0LCAxLCAyMTgsIDE5OCwgMjI3LCAxNzYsIDIyOCwgMTc1LCAKKyAgICAyNCwgMSwgMjE4LCAxOTgsIDIyMSwgMTAxLCAyMjQsIDIwNSwgMjQsIDEsIDIxOCwgMTk4LCAyMjUsIDE2MCwgMjQsIDEsIAorICAgIDIxOCwgMTk4LCAyMTksIDYyLCAyNCwgMSwgMjE4LCAxOTgsIDIzOCwgMTAwLCAyNCwgMSwgMjE4LCAxOTgsIDIxOSwgMTI1LCAKKyAgICAyNCwgMSwgMjE4LCAxOTgsIDIyNCwgNTUsIDIyMiwgMTcwLCAyNCwgMSwgMjE4LCAxOTgsIDIyMCwgMTk2LCAyMjQsIDIwOCwgCisgICAgMjQsIDEsIDIxOCwgMTk4LCAxMDYsIDIwMiwgMTg4LCAyMjMsIDEwMCwgMjQsIDEsIDIxOCwgMTk4LCAyMzgsIDEwMSwgMjQsIAorICAgIDEsIDIxOCwgMTk4LCAyMjEsIDEwMSwgMjIxLCAxMDIsIDI0LCAxLCAyMTgsIDE5OCwgMjEyLCA5MSwgMjQsIDEsIDIxOCwgCisgICAgMTk4LCAyMjQsIDE5MCwgMjQsIDEsIDIxOCwgMTk4LCAyMjQsIDIxMSwgMjQsIDEsIDIxOCwgMTk4LCAyMjQsIDMxLCAyNCwgCisgICAgMSwgMjE4LCAxOTgsIDIzMCwgMjEsIDI0LCAxLCAyMTgsIDE5OCwgMjE5LCAxNjksIDIyNywgMjIzLCAyNCwgMSwgMjE4LCAKKyAgICAxOTgsIDIyMywgMjYsIDIyNywgMjIzLCAyNCwgMSwgMjE4LCAxOTgsIDIxOCwgMjE5LCAyNCwgMSwgMjE4LCAxOTgsIDIyNSwgCisgICAgMTU0LCAyNCwgMSwgMjE4LCAxOTgsIDIyMiwgNzQsIDI0LCAxLCAyMTgsIDE5OCwgMjE3LCAxNzIsIDI0LCAxLCAyMTgsIAorICAgIDE5OCwgMjA3LCAyMDEsIDI0LCAxLCAyMTgsIDE5OCwgMjI2LCAyMzUsIDI0LCAxLCAyMTgsIDE5OCwgMjExLCAyNTEsIDI0LCAKKyAgICAxLCAyMTgsIDE5OCwgMjA5LCAxMTcsIDI0LCAxLCAyMTgsIDE5OCwgMjI1LCAxNTEsIDI0LCAxLCAyMTgsIDE5OCwgMjI5LCAKKyAgICAxNzAsIDI0LCAxLCAyMTgsIDE5OCwgMjIzLCAyMiwgMjQsIDEsIDIxOCwgMTk4LCAyMjgsIDE4OCwgMjQsIDEsIDIxOCwgCisgICAgMTk4LCAyMjQsIDMyLCAyNCwgMSwgMjE4LCAxOTgsIDIxMiwgMTkxLCAyNCwgMSwgMjE4LCAxOTgsIDIyNywgMjksIDI0LCAxLCAKKyAgICAyMTgsIDE5OCwgMjM5LCAyNDYsIDI0LCAxLCAyMTgsIDE5OCwgMjE1LCAyMTEsIDI0LCAxLCAyMTgsIDE5OCwgMjI4LCAyMzMsIAorICAgIDI0LCAxLCAyMTgsIDE5OCwgMjExLCAyNDcsIDI0LCAxLCAyMTgsIDE5OCwgMjI1LCAxMDcsIDIxOCwgMTU3LCAyNCwgMSwgCisgICAgMjE4LCAxOTgsIDIxMiwgMjQ3LCAyNCwgMSwgMjE4LCAxOTgsIDIyMSwgMTAwLCAyNCwgMSwgMjE4LCAxOTgsIDIxMiwgMjMwLCAKKyAgICAyMjEsIDExMSwgMjAyLCAxOTYsIDI0LCAxLCAyMTgsIDE5OCwgMjIwLCAyMzcsIDIyNCwgNTEsIDI0LCAxLCAyMTgsIDE5OCwgCisgICAgMjE5LCAxNjQsIDI0LCAxLCAyMTgsIDE5OCwgMjIyLCAyLCAyNCwgMSwgMjE4LCAxOTgsIDIwNiwgMjMxLCAyNCwgMSwgMjE4LCAKKyAgICAxOTgsIDIyMiwgMTczLCAyNCwgMSwgMjE4LCAxOTgsIDIyNSwgMTUwLCAyNCwgMSwgMjE4LCAxOTgsIDIyMiwgNDQsIDI0LCAKKyAgICAxLCAyMTgsIDE5OCwgMjI1LCA0OSwgMjQsIDEsIDIxOCwgMTk4LCAyMjAsIDI1MSwgMjQsIDEsIDIxOCwgMTk4LCAyMDksIAorICAgIDEyMSwgMjQsIDEsIDIxOCwgMTk4LCAyMTEsIDI0NCwgMjQsIDEsIDIxOCwgMTk4LCAyMTksIDE2NSwgMjQsIDEsIDIxOCwgCisgICAgMTk4LCAyMjEsIDExNSwgMjQsIDEsIDIxOCwgMTk4LCAyMjUsIDE1OCwgMjQsIDEsIDIxOCwgMTk4LCAyMjAsIDI0OCwgMjQsIAorICAgIDEsIDIxOCwgMTk4LCAyMjksIDI0MSwgMjQsIDEsIDIxOCwgMTk4LCAyMjEsIDExOCwgMjQsIDEsIDIxOCwgMTk4LCAyMDYsIAorICAgIDUwLCAyNCwgMSwgMjE4LCAxOTgsIDIyNiwgMjM5LCAyNCwgMSwgMjE4LCAxOTgsIDIyMiwgMjMwLCAyNCwgMSwgMjE4LCAKKyAgICAxOTgsIDIyMywgNzUsIDI0LCAxLCAyMTgsIDE5OCwgMjI1LCA0OCwgMjQsIDEsIDIxOCwgMTk3LCAyMjEsIDExMywgMjQsIDEsIAorICAgIDIxOCwgMTk3LCAyMDcsIDIwNCwgMjI1LCAxNTUsIDI0LCAxLCAyMTgsIDE5NywgMjEyLCAxNTIsIDI0LCAxLCAyMTgsIDE5NywgCisgICAgMjEzLCAxMTgsIDIwNywgMjAzLCAyNCwgMSwgMjE4LCAxOTcsIDIyNywgMzEsIDIyMSwgOTcsIDI0LCAxLCAyMTgsIDE5NywgCisgICAgMjI1LCA1NSwgMjI1LCAxNTksIDI0LCAxLCAyMTgsIDE5NywgMjI5LCA5MiwgMjQsIDEsIDIxOCwgMTk3LCAyMDMsIDE4LCAKKyAgICAyNCwgMSwgMjE4LCAxOTcsIDIyNSwgNTAsIDI0LCAxLCAyMTgsIDE5NywgMjMwLCA3LCAyNCwgMSwgMjE4LCAxOTcsIDIxOSwgCisgICAgMTksIDI0LCAxLCAyMTgsIDE5NywgMjAzLCA5NiwgMjI3LCAyMjMsIDI0LCAxLCAyMTgsIDE5NywgMjI4LCAyOSwgMjIxLCAKKyAgICAxMTEsIDIyMSwgNiwgMjQsIDEsIDIxOCwgMTk3LCAyMjEsIDk0LCAyMTMsIDE3LCAyNCwgMSwgMjE4LCAxOTcsIDIyMiwgCisgICAgMjQ5LCAyMjIsIDQ3LCAyNCwgMSwgMjE4LCAxOTcsIDIzOCwgOTgsIDI0LCAxLCAyMTgsIDE5NywgMjE4LCAxMDUsIDI0LCAxLCAKKyAgICAyMTgsIDE5NywgMjA3LCAyMDQsIDIyMSwgMTA5LCAyNCwgMSwgMjE4LCAxOTcsIDIxMywgMjIsIDIyMiwgNDIsIDI0LCAxLCAKKyAgICAyMTgsIDE5NywgMjEzLCAxOCwgMjQsIDEsIDIxOCwgMTk3LCAyMjQsIDE5OCwgMjA5LCAxMjAsIDI0LCAxLCAyMTgsIDE5NywgCisgICAgMjI1LCAzNywgMjI1LCA1MSwgMjQsIDEsIDIxOCwgMTk3LCAyMjAsIDI0OSwgMjIxLCA5NywgMjQsIDEsIDIxOCwgMTk3LCAKKyAgICAyMjksIDE1OSwgMjQsIDEsIDIxOCwgMTk3LCAyMzgsIDk5LCAyNCwgMSwgMjE4LCAxOTcsIDIyOSwgMTU1LCAyNCwgMSwgCisgICAgMjE4LCAxOTcsIDIyOCwgMTA3LCAyNCwgMSwgMjE4LCAxOTcsIDIxOSwgNjUsIDI0LCAxLCAyMTgsIDE5NywgMjA1LCAyMzcsIAorICAgIDI0LCAxLCAyMTgsIDE5NywgMjIyLCAxMzcsIDIyMywgMTg0LCAyNCwgMSwgMjE4LCAxOTcsIDIyMiwgMTcyLCAyMjUsIDMzLCAKKyAgICAyNCwgMSwgMjE4LCAxOTcsIDIwMywgMjE1LCAyNCwgMSwgMjE4LCAxOTcsIDIxNSwgMTIsIDI0LCAxLCAyMTgsIDE5NywgCisgICAgMjEwLCAxNCwgMjQsIDEsIDIxOCwgMTk3LCAyMjQsIDIxMCwgMjQsIDEsIDIxOCwgMTk3LCAyMjIsIDE1NiwgMjQsIDEsIAorICAgIDIxOCwgMTk3LCAyMjIsIDE1NywgMjI4LCA3LCAyNCwgMSwgMjE4LCAxOTcsIDIyNCwgMjAwLCAyNCwgMSwgMjE4LCAxOTcsIAorICAgIDIxMCwgMjMwLCAyNCwgMSwgMjE4LCAxOTcsIDIyNSwgNDEsIDI0LCAxLCAyMTgsIDE5NywgMjI0LCAzNiwgMjQsIDEsIDIxOCwgCisgICAgMTk3LCAyMjEsIDksIDI0LCAxLCAyMTgsIDE5NywgMjE3LCAxNzYsIDI0LCAxLCAyMTgsIDE5NywgMjI0LCAyMDksIDIyMiwgCisgICAgMTc0LCAyNCwgMSwgMjE4LCAxOTcsIDI0MCwgMzEsIDI0LCAxLCAyMTgsIDE5NywgMjI1LCAyOCwgMjQsIDEsIDIxOCwgMTk3LCAKKyAgICAyNDAsIDUzLCAyNCwgMSwgMjE4LCAxOTcsIDIyOSwgMTY3LCAyNCwgMSwgMjE4LCAxOTcsIDIyNSwgMTc3LCAyMjIsIDM2LCAKKyAgICAyNCwgMSwgMjE4LCAxOTcsIDIyNSwgMTc3LCAyMjIsIDEyLCAyNCwgMSwgMjE4LCAxOTcsIDIyNywgMTc1LCAyNCwgMSwgCisgICAgMjE4LCAxOTcsIDIyMiwgMTgwLCAyNCwgMSwgMjE4LCAxOTcsIDIyMSwgMTIwLCAyNCwgMSwgMjE4LCAxOTcsIDE5MiwgMjQsIAorICAgIDEsIDIxOCwgMTk3LCAyMjksIDc3LCAyNCwgMSwgMjE4LCAxOTcsIDIyMiwgMTI1LCAyNCwgMSwgMTY4LCAyMjIsIDEzNiwgCisgICAgMjI1LCAxNTcsIDI0LCAxLCAxNjgsIDIyMCwgMjE0LCAyNCwgMSwgMTY4LCAyMDIsIDE5NiwgMjQsIDEsIDE2OCwgMjA0LCAKKyAgICA5NSwgMjQsIDEsIDE2OCwgMjIyLCAxNzMsIDI0LCAxLCAxNjgsIDIyMywgMTQsIDI0LCAxLCAxNjgsIDIyMiwgMTQzLCAyNCwgCisgICAgMSwgMTY4LCAyMzgsIDEwOCwgMjQsIDEsIDE2OCwgMjI1LCA0NSwgMjQsIDEsIDE2OCwgMjM4LCAyMDUsIDI0LCAxLCAxNjgsIAorICAgIDIyMCwgMjM5LCAyMjQsIDkxLCAyMjQsIDIxMiwgMjQsIDEsIDE2OCwgMjIxLCA4OSwgMjI1LCAzNiwgMjQsIDEsIDE2OCwgCisgICAgMjI1LCA0MiwgMjQsIDEsIDE2OCwgMjE4LCAxMTEsIDI0LCAxLCAxNjgsIDIyMiwgMjU1LCAyNCwgMSwgMTY4LCAyMjUsIDUzLCAKKyAgICAyNDcsIDg4LCAyNCwgMSwgMTY4LCAyMjksIDE1NywgMjQsIDEsIDE2OCwgMjM4LCAxMDksIDI0LCAxLCAxNjgsIDIyOSwgCisgICAgMTY0LCAyNCwgMSwgMTY4LCAyMDIsIDIxNCwgMjIzLCAyMTUsIDI0LCAxLCAxNjgsIDIyMCwgMjA4LCAyNCwgMSwgMTY4LCAKKyAgICAyMjUsIDMwLCAyNCwgMSwgMTY4LCAyMjEsIDExOSwgMjQsIDEsIDE2OCwgMjI1LCAzNiwgMjQsIDEsIDE2OCwgMjAzLCAxOSwgCisgICAgMjQsIDEsIDE2OCwgMjI4LCAyNDEsIDI0LCAxLCAxNjgsIDIzMCwgNDEsIDI0LCAxLCAxNjgsIDIxMywgMTEzLCAyNCwgMSwgCisgICAgMTY4LCAyMjMsIDgsIDI0LCAxLCAxNjgsIDIxMCwgMTIsIDI0LCAxLCAxNjgsIDIyMiwgMTYsIDI0LCAxLCAxNjgsIDIwOCwgCisgICAgMTk5LCAyMDIsIDE5OSwgMjQsIDEsIDE2OCwgMjExLCA1LCAyNCwgMSwgMTY4LCAyMjIsIDE2MywgMjIxLCA2LCAyNCwgMSwgCisgICAgMTY4LCAyMDUsIDIzNiwgMjQsIDEsIDE2OCwgMjIzLCA3OCwgMjQsIDEsIDE2OCwgMjI1LCAxNzcsIDIyOSwgMTY2LCAyNCwgCisgICAgMSwgMTY4LCAyMjEsIDEwMiwgMjQsIDEsIDE2OCwgMjIyLCAxNTgsIDI0LCAxLCAxNjgsIDIyOCwgMTEsIDI0LCAxLCAxNjgsIAorICAgIDIyNSwgMzgsIDI0LCAxLCAxNjgsIDIyNCwgMTg5LCAyNCwgMSwgMTY4LCAyMjEsIDk2LCAyNCwgMSwgMTY4LCAyMDksIDExNiwgCisgICAgMjQsIDEsIDE2OCwgMjIyLCAxNjAsIDI0LCAxLCAxNjgsIDIzOSwgMTA2LCAyNCwgMSwgMTY4LCAyMjMsIDEzLCAyNCwgMSwgCisgICAgMTY4LCAyMjEsIDEyMSwgMjQsIDEsIDE2OCwgMjIxLCAxMTcsIDI0LCAxLCAxNjgsIDI0NywgMTY5LCAyNCwgMSwgMTY4LCAKKyAgICAyMDUsIDIzOCwgMjQsIDEsIDE2OCwgMjI1LCA0MywgMjQsIDEsIDE2OCwgMjE1LCAxNDUsIDI0LCAxLCAxNjgsIDIyMiwgNDYsIAorICAgIDI0LCAxLCAxNjgsIDIyOCwgMjgsIDI0LCAxLCAxNjgsIDIwOCwgMTk2LCAyNCwgMSwgMTY4LCAyMjEsIDEwMywgMjIyLCAKKyAgICAxMjUsIDI0LCAxLCAxNjgsIDIyMiwgMzgsIDI0LCAxLCAxNjgsIDIyOSwgMTcwLCAyNCwgMSwgMTY4LCAyMjIsIDE2NSwgMjQsIAorICAgIDEsIDE2OCwgMjI1LCAxNTAsIDI0LCAxLCAxNjgsIDIyNSwgMzEsIDI0LCAxLCAxNjgsIDIyNiwgMjM5LCAyNCwgMSwgMTY4LCAKKyAgICAyMjgsIDE3NSwgMjQsIDEsIDE2OCwgMjIyLCA0NCwgMjQsIDEsIDE2OCwgMjIyLCAxMjUsIDI0LCAxLCAxNjgsIDIwMywgCisgICAgMjA1LCAyNCwgMSwgMTY4LCAyMjIsIDE2MSwgMjQsIDEsIDE2OCwgMjIxLCAxMDYsIDI0LCAxLCAxNjgsIDIyMSwgOTgsIDI0LCAKKyAgICAxLCAxNjgsIDIyOCwgMTkwLCAyMjIsIDIsIDI0LCAxLCAxNjgsIDIyMSwgMTA0LCAyNCwgMSwgMTY4LCAyMjMsIDIxLCAyNCwgCisgICAgMSwgMTY4LCAyMjUsIDE3NywgMjIxLCAxMDksIDI0LCAxLCAxNjgsIDIwMywgMTEwLCAyNCwgMSwgMTY4LCAyMjMsIDIwLCAKKyAgICAyNCwgMSwgMTY4LCAyMTIsIDE5NCwgMjQsIDEsIDE2OCwgMjEzLCAxMTYsIDI0LCAxLCAxNjgsIDIyNSwgMzksIDI0LCAxLCAKKyAgICAxNjgsIDIyNSwgMTU3LCAyNCwgMSwgMTY4LCAyMjUsIDQ5LCAyNCwgMSwgMTY4LCAyMjksIDE1OCwgMjQsIDEsIDE2OCwgCisgICAgMjI1LCA0MCwgMjQsIDEsIDE2OCwgMjI5LCAxNjIsIDI0LCAxLCAxNjgsIDIyNSwgNTMsIDIxOCwgMTYyLCAyNCwgMSwgMTY4LCAKKyAgICAyMDIsIDE3OSwgMjQsIDEsIDE2OCwgMjIyLCAzNCwgMjQsIDEsIDE2OCwgMjI0LCAxNDQsIDI0LCAxLCAxNjgsIDIyMywgCisgICAgMjQ0LCAyNCwgMSwgMTY4LCAyMTIsIDI1MCwgMjQsIDEsIDE2OCwgMjI5LCAxODEsIDIyNywgMjQ2LCAyNCwgMSwgMTY4LCAKKyAgICAyMjksIDE4MSwgMjQwLCA2NiwgMjQsIDEsIDE2OCwgMjIyLCAxOTUsIDI0LCAxLCAxNjgsIDIyMywgNzUsIDI0LCAxLCAxNjgsIAorICAgIDIyNywgOTYsIDI0LCAxLCAxNjgsIDIxOCwgMTIzLCAyNCwgMSwgMTY4LCAyMTksIDksIDI0LCAxLCAxNjgsIDIwOSwgMTMyLCAKKyAgICAyNCwgMSwgMTM0LCAyMjUsIDI5LCAyNCwgMSwgMTM0LCAyMDQsIDkzLCAyNCwgMSwgMTM0LCAyMjIsIDMyLCAyNCwgMSwgCisgICAgMTM0LCAyMjQsIDE5NywgMjQsIDEsIDEzNCwgMjIyLCAzMCwgMjQsIDEsIDEzNCwgMjI3LCAxNDEsIDI0LCAxLCAxMzQsIAorICAgIDIyMiwgMzUsIDI0LCAxLCAxMzQsIDIyMSwgMTE2LCAyNCwgMSwgMTM0LCAyMjIsIDE3OSwgMjQsIDEsIDEzNCwgMjIxLCA2LCAKKyAgICAyNCwgMSwgMTM0LCAyMDMsIDIxNiwgMjQsIDEsIDEzNCwgMjIyLCAxMzMsIDI0LCAxLCAxMzQsIDIxMywgNDEsIDI0LCAxLCAKKyAgICAxMzQsIDIyMiwgMTQ0LCAyNCwgMSwgMTM0LCAyMjksIDE2NSwgMjQsIDEsIDEzNCwgMjA5LCAxMTgsIDI0LCAxLCAxMzQsIAorICAgIDIxMywgMjAsIDI0LCAxLCAxMzQsIDIyMiwgNDMsIDI0LCAxLCAxMzQsIDIxMCwgMjMwLCAyNCwgMSwgMTM0LCAyMjksIDE3MCwgCisgICAgMjQsIDEsIDEzNCwgMjAzLCA5OCwgMjQsIDEsIDEzNCwgMjI4LCAxOTEsIDI0LCAxLCAxMzQsIDIxNCwgMjMzLCAyNCwgMSwgCisgICAgMTM0LCAyMjQsIDIwMiwgMjQsIDEsIDEzNCwgMjIzLCAxMiwgMjQsIDEsIDEzNCwgMjI1LCAxMjUsIDI0LCAxLCAxMzQsIAorICAgIDIyNCwgMjA4LCAyNCwgMSwgMTM0LCAyMTMsIDExNSwgMjQsIDEsIDEzNCwgMjAzLCA0MiwgMjQsIDEsIDEzNCwgMjIyLCAzNywgCisgICAgMjQsIDEsIDEzNCwgMjI5LCAxNjEsIDIyNSwgMzIsIDI0LCAxLCAxMzQsIDIyMiwgMTQwLCAyNCwgMSwgMTM0LCAyMDcsIAorICAgIDIwMywgMjQsIDEsIDEzNCwgMjM4LCAxMTgsIDI0LCAxLCAxMzQsIDIyMiwgMTMwLCAyNCwgMSwgMTM0LCAyNDAsIDMyLCAyNCwgCisgICAgMSwgMTM0LCAyMjMsIDE2LCAyNCwgMSwgMTM0LCAyMjQsIDE4MSwgMjQsIDEsIDEzNCwgMjI3LCAxNjksIDI0LCAxLCAxMzQsIAorICAgIDIyMiwgMjU0LCAyNCwgMSwgMTM0LCAyMjQsIDUwLCAyNCwgMSwgMTM0LCAyMjQsIDE4NSwgMjQsIDEsIDEzNCwgMjE3LCAKKyAgICAxNTYsIDI0LCAxLCAxMzQsIDIyNCwgMTgzLCAyNCwgMSwgMTM0LCAyMjQsIDE5OSwgMjQsIDEsIDEzNCwgMjI2LCAyMjIsIAorICAgIDI0LCAxLCAxMzQsIDIyMSwgMTA4LCAyNCwgMSwgMTM0LCAyMjUsIDUyLCAyNCwgMSwgMTM0LCAyMjgsIDE2NSwgMjQsIDEsIAorICAgIDEzNCwgMjIwLCAyNTEsIDI0LCAxLCAxMzQsIDIwOSwgMTIxLCAyNCwgMSwgMTM0LCAyMTEsIDI0NCwgMjQsIDEsIDEzNCwgCisgICAgMjAyLCAxNzksIDI0LCAxLCAxMzQsIDIyOSwgMTYyLCAyNCwgMSwgMTM0LCAyMTYsIDIwMSwgMjQsIDEsIDEzNCwgMjA5LCAKKyAgICAxNzUsIDI0LCAxLCAxMzQsIDIyMiwgMTQxLCAyNCwgMSwgMTM0LCAyMjQsIDIwNCwgMjQsIDEsIDEzNCwgMjIxLCAxMDcsIAorICAgIDI0LCAxLCAxMzQsIDIyOSwgMTYwLCAyNCwgMSwgMTM0LCAyMTgsIDExNywgMjQsIDEsIDEzNCwgMjE4LCAyMTMsIDI0LCAxLCAKKyAgICAxMzQsIDIyMCwgMjI1LCAyNCwgMSwgMTM0LCAyMjcsIDE3NSwgMjQsIDEsIDEzNCwgMjIyLCAxODAsIDI0LCAxLCAxMzQsIAorICAgIDIyNCwgMjAxLCAyNCwgMSwgMTM0LCAyMjIsIDE1MywgMjQsIDEsIDEzNCwgMjAyLCAxOTMsIDI0LCAxLCAxMzQsIDIxOSwgCisgICAgOTYsIDI0LCAxLCAxMzQsIDIwMiwgMTkyLCAyNCwgMSwgMTM0LCAyMjMsIDIxLCAyNCwgMSwgMTM0LCAyMjEsIDk3LCAyNCwgCisgICAgMSwgMTM0LCAyMTEsIDcsIDI0LCAxLCAxMzQsIDIyOCwgMTk1LCAyNCwgMSwgMTM0LCAyMjIsIDE2OSwgMjQsIDEsIDEzNCwgCisgICAgMjIyLCAxMzgsIDI0LCAxLCAxMzQsIDIwNywgMTg1LCAyNCwgMSwgMTM0LCAyMjQsIDIxMiwgMjQsIDEsIDEzNCwgMjI4LCAKKyAgICAxODUsIDI0LCAxLCAxMzQsIDIyMSwgMTA1LCAyNCwgMSwgMTM0LCAyMDksIDExOSwgMjQsIDEsIDEzNCwgMjI1LCAxNTIsIAorICAgIDI0LCAxLCAxMzQsIDIyMiwgMTc4LCAyNCwgMSwgMTM0LCAyMjcsIDE2OCwgMjQsIDEsIDEzNCwgMjIyLCAxNTksIDI0LCAxLCAKKyAgICAxMzQsIDIyMSwgMTEwLCAyNCwgMSwgMTM0LCAyMjIsIDE2LCAyNCwgMSwgMTM0LCAyMzgsIDEwMiwgMjQsIDEsIDEzNCwgCisgICAgMjI4LCAyMDksIDI0LCAxLCAxMzQsIDIxNiwgMTA4LCAyMjAsIDQ1LCAyNCwgMSwgMTM0LCAyMTAsIDEsIDI0LCAxLCAxMzQsIAorICAgIDIwOCwgMTQxLCAyNCwgMSwgMTM0LCAyMjAsIDI0OCwgMjQsIDEsIDEzNCwgMjE2LCAzLCAyNCwgMSwgMTM0LCAyMjcsIDIyNSwgCisgICAgMjQsIDEsIDEzNCwgMjI1LCA3LCAyNCwgMSwgMTM0LCAyMjYsIDE4NSwgMjQsIDEsIDEzNCwgMjEwLCAxNzksIDI0LCAxLCAKKyAgICAxMzQsIDIyMywgMjQ2LCAyNCwgMSwgMTM0LCAyMTMsIDYsIDI0LCAxLCAxMzQsIDIxMywgMTYsIDI0LCAxLCAxMzQsIDIyOCwgCisgICAgMTM3LCAyNCwgMSwgMTM0LCAyMjEsIDg0LCAyNCwgMSwgMTM0LCAyMTIsIDE5OSwgMjQsIDEsIDEzNCwgMjIxLCA5OSwgMjQsIAorICAgIDEsIDEzNCwgMjE5LCAyMywgMjQsIDEsIDEzNCwgMjIyLCAxMDAsIDI0LCAxLCAxMzQsIDIxMiwgMjI5LCAyNCwgMSwgMTM0LCAKKyAgICAyMTcsIDE3MSwgMjQsIDEsIDEzNCwgMjIzLCAxODQsIDI0LCAxLCAxMzQsIDIyNywgMTAsIDI0LCAxLCAxMzQsIDIxNiwgCisgICAgMTA4LCAyMjMsIDIzOSwgMjQsIDEsIDEzNCwgMjA5LCAyLCAyNCwgMSwgMTM0LCAyMjEsIDg2LCAyNCwgMSwgMTM0LCAyMjUsIAorICAgIDUzLCAyMTMsIDExMSwgMjQsIDEsIDEzNCwgMjE0LCAyMzEsIDI0LCAxLCAxMzQsIDI0MCwgMTA3LCAyNCwgMSwgOTMsIDIyMywgCisgICAgMjAsIDI0LCAxLCA5MywgMjA4LCAxNDcsIDI0LCAxLCA5MywgMjI1LCA0MiwgMjQsIDEsIDkzLCAyMjgsIDExLCAyNCwgMSwgCisgICAgOTMsIDIwNSwgMTc3LCAyNCwgMSwgOTMsIDIyNywgMTYsIDI0LCAxLCA5MywgMjE5LCAxNjgsIDI0LCAxLCA5MywgMjExLCAKKyAgICAyNTUsIDI0LCAxLCA5MywgMjE2LCAxNzYsIDI0LCAxLCA5MywgMjIxLCAxMTIsIDI0LCAxLCA5MywgMjIyLCAyNDcsIDI0LCAKKyAgICAxLCA5MywgMjE3LCAxODgsIDI0LCAxLCA5MywgMjA5LCAyMzIsIDI0LCAxLCA5MywgMjIyLCAxNDYsIDI0LCAxLCA5MywgCisgICAgMjI4LCAyMzcsIDI0LCAxLCA5MywgMjAzLCAyMDgsIDI0LCAxLCA5MywgMjE0LCAxNjUsIDI0LCAxLCA5MywgMjIyLCAxNzAsIAorICAgIDI0LCAxLCA5MywgMjE5LCAxNjUsIDI0LCAxLCA5MywgMjA4LCAxNDgsIDI0LCAxLCA5MywgMjI4LCAxODksIDI0LCAxLCA5MywgCisgICAgMjI3LCAzMCwgMjQsIDEsIDkzLCAyMjEsIDExNSwgMjQsIDEsIDkzLCAyMjIsIDEyMiwgMjQsIDEsIDkzLCAyMjUsIDE1OCwgCisgICAgMjQsIDEsIDkzLCAyMjIsIDEzOSwgMjQsIDEsIDkzLCAyMjIsIDEyMSwgMjQsIDEsIDkzLCAyMjEsIDExNCwgMjQsIDEsIDkzLCAKKyAgICAyMTYsIDAsIDI0LCAxLCA5MywgMjIyLCAzNCwgMjQsIDEsIDkzLCAyMTksIDIxLCAyNCwgMSwgOTMsIDIxNSwgMzMsIDI0LCAKKyAgICAxLCA5MywgMjIyLCAxNTQsIDI0LCAxLCA5MywgMjI0LCAxOTEsIDI0LCAxLCA5MywgMjM4LCA5NiwgMjQsIDEsIDkzLCAyMjIsIAorICAgIDE0MiwgMjQsIDEsIDkzLCAyMjIsIDQ1LCAyNCwgMSwgOTMsIDIyNSwgMTA2LCAyNCwgMSwgOTMsIDIyNywgMTIsIDI0LCAxLCAKKyAgICA5MywgMjIyLCAxNzUsIDI0LCAxLCA5MywgMjIzLCA0LCAyNCwgMSwgOTMsIDIxMCwgMCwgMjIxLCA5NywgMjQsIDEsIDkzLCAKKyAgICAyMTMsIDExNywgMjQsIDEsIDkzLCAyMTcsIDE4MSwgMjQsIDEsIDkzLCAyMjMsIDI0LCAyMTIsIDYsIDI0LCAxLCA5MywgCisgICAgMjIyLCAxNjIsIDIyMSwgNiwgMjQsIDEsIDkzLCAyMDMsIDcsIDI0LCAxLCA5MywgMjM4LCA5NywgMjQsIDEsIDkzLCAyMDcsIAorICAgIDIwMiwgMjQsIDEsIDkzLCAyMDMsIDIyLCAyNCwgMSwgOTMsIDIxOCwgNjksIDI0LCAxLCA5MywgMjA3LCAxOTAsIDI0LCAxLCAKKyAgICA5MywgMjI5LCAxNjgsIDI0LCAxLCA5MywgMjExLCA2LCAyNCwgMSwgOTMsIDIwOSwgMTIwLCAyNCwgMSwgOTMsIDIwNSwgCisgICAgMjM5LCAyNCwgMSwgOTMsIDIwNCwgNDMsIDI0LCAxLCA5MywgMjI4LCAxMTAsIDI0LCAxLCA5MywgMjE3LCAxOTEsIDI0LCAxLCAKKyAgICA5MywgMjEwLCAxMywgMjQsIDEsIDkzLCAyMzgsIDExNywgMjQsIDEsIDkzLCAyMjIsIDE4NSwgMjQsIDEsIDkzLCAyMTMsIAorICAgIDE5LCAyNCwgMSwgOTMsIDIyNCwgMTg2LCAyNCwgMSwgOTMsIDIyNSwgNDYsIDI0LCAxLCA5MywgMjIwLCAyMTIsIDI0LCAxLCAKKyAgICA5MywgMjIxLCAyNTQsIDI0LCAxLCA5MywgMjM4LCAyMDEsIDI0LCAxLCA5MywgMjA3LCAxOTEsIDI0LCAxLCA5MywgMjI4LCAKKyAgICAxOTksIDI0LCAxLCA5MywgMjAzLCA3NCwgMjQsIDEsIDkzLCAyMjAsIDI0OSwgMjQ2LCAzMiwgMjQsIDEsIDkzLCAyMDIsIAorICAgIDI1MywgMjQsIDEsIDkzLCAyMjQsIDIwMywgMjQsIDEsIDkzLCAyMjMsIDksIDI0LCAxLCA5MywgMjE4LCAxNTgsIDI0LCAxLCAKKyAgICA5MywgMjAyLCAxOTgsIDI0LCAxLCA5MywgMjI3LCAxNzAsIDI0LCAxLCA5MywgMjM5LCAxMDYsIDI0LCAxLCA5MywgMjM4LCAKKyAgICAyMDAsIDI0LCAxLCA5MywgMjIyLCAxMzIsIDI0LCAxLCA5MywgMjI5LCAxNzAsIDI0LCAxLCA5MywgMjI1LCAxNjEsIDI0LCAKKyAgICAxLCA5MywgMjIyLCAxNDUsIDI0LCAxLCA5MywgMjM4LCAxMDMsIDI0LCAxLCA5MywgMjQwLCAxMDgsIDI0LCAxLCA5MywgCisgICAgMjIxLCA4NywgMjQsIDEsIDkzLCAyMTgsIDIxNCwgMjQsIDEsIDkzLCAyMDMsIDIwLCAyNCwgMSwgOTMsIDIyMiwgMTcxLCAKKyAgICAyNCwgMSwgOTMsIDIyMCwgMjQ5LCAyNDgsIDEwMywgMjQsIDEsIDkzLCAyMjAsIDE5MiwgMjQsIDEsIDkzLCAyMTgsIDQzLCAKKyAgICAyNCwgMSwgOTMsIDIyNCwgMTQ0LCAyNCwgMSwgOTMsIDIzOSwgMTA0LCAyNCwgMSwgOTMsIDIyMywgMTAwLCAyNCwgMSwgOTMsIAorICAgIDIyMywgMjQ0LCAyNCwgMSwgOTMsIDIzOCwgMTAyLCAyNCwgMSwgOTMsIDIzOSwgMTA5LCA3NSwgMjQsIDEsIDkzLCAyMjMsIAorICAgIDE4NSwgMjQsIDEsIDkzLCAyMTcsIDE4NywgMjQsIDEsIDkzLCAyMjIsIDEzNCwgMjQsIDEsIDkzLCAyMjgsIDE3NSwgMjQsIAorICAgIDEsIDkzLCAyMTgsIDE1NSwgMjQsIDEsIDkzLCAyMjEsIDEwMCwgMjQsIDEsIDkzLCAyMDMsIDIxLCAyNCwgMSwgOTMsIDIyMiwgCisgICAgMTU1LCAyNCwgMSwgOTMsIDIxOSwgMTY5LCAyMTgsIDI1MiwgMjQsIDEsIDkzLCAyMzksIDEwOSwgMjQ3LCA3MSwgMjQsIDEsIAorICAgIDkzLCAyMzksIDE3OSwgMjQsIDEsIDkzLCAyMjIsIDM5LCAyNCwgMSwgOTMsIDYzLCAyNCwgMSwgOTMsIDIwOCwgMTQxLCAyNCwgCisgICAgMSwgOTMsIDc4LCAyNCwgMSwgOTMsIDc1LCAyNCwgMSwgOTMsIDIyOCwgOSwgMjQsIDEsIDkzLCAyMTksIDE2OSwgMjE4LCAKKyAgICA3NywgMjQsIDEsIDkzLCAyMTAsIDE4LCAyNCwgMSwgOTMsIDIwOSwgMjE5LCAyNCwgMSwgOTMsIDIyMywgMjQsIDIyMywgCisgICAgMTcyLCAyMzYsIDM4LCAyNCwgMSwgOTMsIDIxMiwgMjUwLCAyNCwgMSwgOTMsIDIwMywgMTcsIDI0LCAxLCA5MywgMjIyLCAKKyAgICAxMTUsIDI0LCAxLCA5MywgMjAyLCAyMDMsIDI0LCAxLCA5MywgMjAyLCAyMzAsIDIxMCwgMTU5LCAyNCwgMSwgOTMsIDIwMiwgCisgICAgMjMwLCAyNDUsIDE1MSwgMjQsIDEsIDkzLCAyMDIsIDE4NywgMjQsIDEsIDkzLCAyMDIsIDE5NSwgMjQsIDEsIDkzLCAyMjksIAorICAgIDE1NiwgMjQsIDEsIDkzLCAyMTgsIDIxMiwgMjQsIDEsIDkzLCAyMjIsIDQwLCAyNDEsIDM5LCAyNCwgMSwgOTMsIDIxNywgCisgICAgMTgzLCAyNCwgMSwgOTMsIDIwMywgMjE0LCAyNCwgMSwgOTMsIDI0MCwgNTMsIDI0LCAxLCA5MywgMjA2LCA1MCwgMjQsIDEsIAorICAgIDkzLCAyMjYsIDIzOSwgMjQsIDEsIDkzLCAyMjQsIDE1NSwgMjQsIDEsIDkzLCAyMTYsIDc1LCAyNCwgMSwgOTMsIDIxNiwgCisgICAgMjAyLCAyNCwgMSwgOTMsIDIyMiwgMTE0LCAyNCwgMSwgOTMsIDIyMiwgMjAzLCAyNCwgMSwgOTMsIDIxMiwgMjQyLCAyNCwgCisgICAgMSwgOTMsIDIxMiwgMjI5LCAyNCwgMSwgOTMsIDIzOSwgMTA5LCAyMTYsIDExMSwgMjQsIDEsIDkzLCAyMDEsIDIwMSwgMjQsIAorICAgIDEsIDkzLCAyMTgsIDE2NywgMjQsIDEsIDkzLCAyMjcsIDEwLCAyNCwgMSwgOTMsIDIyOSwgMjYsIDI0LCAxLCA5MywgMjI0LCAKKyAgICAyNDAsIDI0LCAxLCA5MywgMTkyLCAyNCwgMSwgOTMsIDIyNSwgMTAzLCAyNCwgMSwgOTMsIDIwOSwgMTIyLCAyNCwgMSwgOTMsIAorICAgIDIyOSwgMTAwLCAyNCwgMSwgOTMsIDIyNCwgNTQsIDI0LCAxLCA5MywgMjA5LCAxNTIsIDI0LCAxLCA5MywgMjQwLCA3NywgCisgICAgMjQsIDEsIDkzLCAyMzgsIDkwLCAyNCwgMSwgMjE4LCAxOTYsIDE3MywgMjQsIDEsIDIxOCwgMTk2LCA2OCwgMjQsIDEsIAorICAgIDIxOCwgMTk2LCAyMjgsIDIwOSwgMjQsIDEsIDIxOCwgMTk2LCAyNDEsIDE2MSwgMjQsIDEsIDIxOCwgMTk2LCAyMTYsIDEzNSwgCisgICAgMjQsIDEsIDIxOCwgMTk2LCAyMTAsIDEsIDI0LCAxLCAyMTgsIDE5NiwgMjIwLCAyNDgsIDI0LCAxLCAyMTgsIDE5NiwgMjI4LCAKKyAgICAxMTMsIDI0LCAxLCAyMTgsIDE5NiwgMjE2LCAzLCAyNCwgMSwgMjE4LCAxOTYsIDIxNiwgNTAsIDI0LCAxLCAyMTgsIDE5NiwgCisgICAgMjI1LCA3LCAyNCwgMSwgMjE4LCAxOTYsIDIxMCwgMTgsIDI0LCAxLCAyMTgsIDE5NiwgMjIzLCAyMywgMjQsIDEsIDIxOCwgCisgICAgMTk2LCAyMjIsIDQ2LCAyNCwgMSwgMjE4LCAxOTYsIDIyNiwgMTg1LCAyNCwgMSwgMjE4LCAxOTYsIDIxMCwgMTc5LCAyNCwgCisgICAgMSwgMjE4LCAxOTYsIDIxMywgNiwgMjQsIDEsIDIxOCwgMTk2LCAyMTIsIDE2MiwgMjQsIDEsIDIxOCwgMTk2LCAyMTMsIAorICAgIDExMywgMjQsIDEsIDIxOCwgMTk2LCAyMjgsIDEzNywgMjQsIDEsIDIxOCwgMTk2LCAyMjksIDE3MCwgMjQsIDEsIDIxOCwgCisgICAgMTk2LCAyMjEsIDU1LCAyNCwgMSwgMjE4LCAxOTYsIDIyMSwgODQsIDI0LCAxLCAyMTgsIDE5NiwgMjIyLCAxNywgMjQsIDEsIAorICAgIDIxOCwgMTk2LCAyMDIsIDIyOSwgMjQsIDEsIDIxOCwgMTk2LCAyMTIsIDE5OSwgMjQsIDEsIDIxOCwgMTk2LCAxOTgsIDI0LCAKKyAgICAxLCAyMTgsIDE5NiwgMjIxLCAxMTgsIDI0LCAxLCAyMTgsIDE5NiwgMjE4LCAyMTIsIDI0LCAxLCAyMTgsIDE5NiwgMjIxLCAKKyAgICA5OSwgMjQsIDEsIDIxOCwgMTk2LCAyMDMsIDIxNCwgMjQsIDEsIDIxOCwgMTk2LCAyMTksIDIzLCAyNCwgMSwgMjE4LCAxOTYsIAorICAgIDIxNSwgMTQ1LCAyNCwgMSwgMjE4LCAxOTYsIDIyMiwgMTAwLCAyNCwgMSwgMjE4LCAxOTYsIDIxNiwgNzUsIDI0LCAxLCAKKyAgICAyMTgsIDE5NiwgMjI5LCAxODAsIDI0LCAxLCAyMTgsIDE5NiwgMjIyLCAxMzEsIDI0LCAxLCAyMTgsIDE5NiwgMjIyLCAxODIsIAorICAgIDI0LCAxLCAyMTgsIDE5NiwgMjEyLCAyNDIsIDI0LCAxLCAyMTgsIDE5NiwgMjE3LCAxODgsIDI0LCAxLCAyMTgsIDE5NiwgCisgICAgMjM5LCAxNzksIDI0LCAxLCAyMTgsIDE5NiwgMjA0LCAxMTEsIDI0LCAxLCAyMTgsIDE5NiwgMjI3LCAxNDgsIDI0LCAxLCAKKyAgICAyMTgsIDE5NiwgMjI3LCAxMCwgMjQsIDEsIDIxOCwgMTk2LCAyMjksIDI2LCAyNCwgMSwgMjE4LCAxOTYsIDIyNSwgNDQsIAorICAgIDI0LCAxLCAyMTgsIDE5NiwgMjE2LCAxMDcsIDI0LCAxLCAyMTgsIDE5NiwgMTkyLCAyNCwgMSwgMjE4LCAxOTYsIDIyNCwgCisgICAgODIsIDI0LCAxLCAyMTgsIDE5NiwgMjI1LCA1MiwgMjQsIDEsIDIxOCwgMTk2LCAyMDksIDEzMiwgMjQsIDEsIDIxOCwgMTk2LCAKKyAgICAyMjgsIDI0NCwgMjQsIDEsIDIxOCwgMTk2LCAyMTQsIDI1MSwgMjQsIDEsIDIxOCwgMTk2LCAyMDQsIDE2MiwgMjIzLCAyNDksIAorICAgIDEsIDIxMCwgMjIsIDIyMywgMjQ5LCAxLCAyMjIsIDE1MSwgMjIzLCAyNDksIDEsIDIwMiwgMjQ3LCAyMjMsIDI0OSwgMSwgCisgICAgMjI0LCAxMTIsIDIyMywgMjQ5LCAxLCAyNDksIDMyLCAyMjMsIDI0OSwgMSwgMjQ0LCAyMTIsIDIyMywgMjQ5LCAxLCA2MywgCisgICAgMjIzLCAyNDksIDEsIDIxOCwgMTkyLCAyMjMsIDI0OSwgMSwgMjI5LCAxMzksIDIyMywgMjQ5LCAxLCAyMzcsIDk1LCAyMjMsIAorICAgIDI0OSwgMSwgMjQ0LCAxODgsIDIyMywgMjQ5LCAxLCAyNDYsIDk4LCAyMjMsIDI0OSwgMSwgMjI5LCAyMDAsIDIyMywgMjQ5LCAKKyAgICAxLCAyMjAsIDQ2LCAyMjMsIDI0OSwgMSwgMjI1LCAxNTgsIDIyMywgMjQ5LCAxLCAyMjIsIDY4LCAyMjMsIDI0OSwgMSwgCisgICAgMTg1LCAyMjMsIDI0OSwgMSwgMjIwLCAxOCwgMjIzLCAyNDksIDEsIDc4LCAyMjMsIDI0OSwgMSwgMjE1LCAyMjcsIDIyMywgCisgICAgMjQ5LCAxLCAyMTMsIDExLCAyMjMsIDI0OSwgMSwgMjA5LCA5MSwgMjIzLCAyNDksIDEsIDI0MSwgMTg5LCAyMjMsIDI0OSwgCisgICAgMSwgMjA0LCAxMTEsIDIyMywgMjQ5LCAxLCA3NCwgMjIzLCAyNDksIDEsIDIyOSwgMjYsIDIyMywgMjQ5LCAxLCAyMjgsIDE3LCAKKyAgICAyMjMsIDI0OSwgMSwgMjI4LCAxMTMsIDIyMywgMjQ5LCAxLCAyMzcsIDE0NywgMjIzLCAyNDksIDEsIDIxNiwgNTcsIDIyMywgCisgICAgMjQ5LCAxLCAyMDksIDE2NSwgMjIzLCAyNDksIDE3LCAyMDIsIDg0LCAyMjMsIDI0OSwgMTcsIDEwNSwgMjIzLCAyNDksIDE3LCAKKyAgICAxMDgsIDIyMywgMjQ5LCAxNywgMTQ3LCAyMjMsIDI0OSwgMTcsIDE0OSwgMjIzLCAyNDksIDE3LCAxNzAsIDIyMywgMjQ5LCAKKyAgICAxNywgMTk1LCAyMjMsIDI0OSwgMTcsIDIxMywgMTExLCAyMjMsIDI0OSwgMTcsIDE5OSwgMjIzLCAyNDksIDE3LCAyMjIsIAorICAgIDYzLCAyMjMsIDI0OSwgMjQ0LCAxNjYsIDIyMywgMjQ5LCA1MiwgMjQ0LCAxNjYsIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCAKKyAgICAyNDEsIDc0LCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMTczLCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMjE0LCAxNzcsIDI0OCwgCisgICAgMjEyLCAyMDYsIDgzLCAxLCAyNDAsIDEwOCwgMjQ4LCAyMTIsIDIwNiwgODMsIDEsIDIyNSwgNDcsIDI0OCwgMjEyLCAyMDYsIAorICAgIDgzLCAxLCAyMDMsIDgsIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCAyMzgsIDI0OSwgMjQ4LCAyMTIsIDIwNiwgODMsIDEsIDI0MywgCisgICAgMjM4LCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMjI4LCAyNDMsIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCAyMzAsIDEwMSwgMjQ4LCAKKyAgICAyMTIsIDIwNiwgODMsIDEsIDIzNSwgMjUzLCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMjA0LCAxMTEsIDI0OCwgMjEyLCAyMDYsIAorICAgIDgzLCAxLCAyMDIsIDE3LCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMjM4LCAxOTQsIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCAKKyAgICAyNDMsIDExMywgMjQ4LCAyMTIsIDIwNiwgODMsIDEsIDI0NiwgMjM4LCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMjA2LCAxNzEsIAorICAgIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCAxMzUsIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCAyNDksIDMyLCAyNDgsIDIxMiwgMjA2LCAKKyAgICA4MywgMSwgMjA0LCAxNjMsIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCAyMDMsIDQ2LCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgCisgICAgMTg1LCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMjA0LCAxMDgsIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCA2MywgMjQ4LCAyMTIsIAorICAgIDIwNiwgODMsIDEsIDc4LCAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMjIwLCAxOCwgMjQ4LCAyMTIsIDIwNiwgODMsIDEsIDY4LCAKKyAgICAyNDgsIDIxMiwgMjA2LCA4MywgMSwgMjQxLCAxNjEsIDI0OCwgMjEyLCAyMDYsIDgzLCAxLCA3NCwgMjQ4LCAyMTIsIDIwNiwgCisgICAgODMsIDEsIDc1LCAyNDgsIDIxMiwgMjA2LCA4MywgMzksIDEzOCwgMjA4LCAxNjEsIDI0OCwgMjEyLCAyMDYsIDgzLCAzOSwgCisgICAgMTI0LCAyMDgsIDE2MSwgMjQ4LCAyMTIsIDIwNiwgODMsIDM5LCAyMjQsIDE1MCwgMjA4LCAxNjEsIDI0OCwgMjEyLCAyMDYsIAorICAgIDgzLCAzOSwgMjI2LCAyNTMsIDIwOCwgMTYxLCAyNDgsIDIxMiwgMjA2LCA4MywgMzksIDIzNiwgMjQyLCAyMDgsIDE2MSwgCisgICAgMjQ4LCAyMTIsIDIwNiwgODMsIDIzOSwgMTAyLCAyMTEsIDYxLCAxMTksIDExNywgMjIsIDIyOSwgMTk3LCAxMTksIDExNywgCisgICAgMjIsIDIyOSwgMTkzLCAxMTksIDExNywgMjIsIDIyOSwgOTcsIDExOSwgMTE3LCAyMiwgMjI5LCA2MywgMTE5LCAxMTcsIDIyLCAKKyAgICAyMjksIDIxOCwgMTE5LCAxMTcsIDIyLCAyMjksIDIxNSwgMTE5LCAxMTcsIDIyLCAyMjgsIDIwMCwgMTE5LCAxMTcsIDIyLCAKKyAgICAyMjgsIDE3MiwgMTE5LCAxMTcsIDIyLCAyMjksIDE5OSwgMTE5LCAxMTcsIDIyLCAyMjksIDE1NCwgMTE5LCAxMTcsIDIyLCAKKyAgICAyMzAsIDE3LCAxMTksIDExNywgMjIsIDIzMCwgMTQsIDExOSwgMTE3LCAyMiwgMjI5LCA1LCAxMTksIDExNywgMjIsIDIyOSwgCisgICAgMiwgMTE5LCAxMTcsIDIyLCAyMjksIDIxMiwgMTE5LCAxMTcsIDIyLCAyMjksIDIxMCwgMTE5LCAxMTcsIDIyLCAyMjgsIAorICAgIDIwMiwgMTE5LCAxMTcsIDIyLCAyMjgsIDIwMSwgMTE5LCAxMTcsIDIyLCAyMjksIDIzLCAxMTksIDExNywgMjIsIDIyOCwgCisgICAgMjQ3LCAxMTksIDExNywgMjIsIDIyOSwgOTksIDExOSwgMTE3LCAyMiwgMjI5LCA5OCwgMTE5LCAxMTcsIDIyLCAyMzAsIDMyLCAKKyAgICAxMTksIDExNywgMjIsIDIyOSwgMjE0LCAxMTksIDExNywgMjIsIDIyOCwgMTYzLCAxMTksIDExNywgMjIsIDIyOCwgMTU0LCAKKyAgICAxMTksIDExNywgMjIsIDIzMCwgNDAsIDExOSwgMTE3LCAyMiwgMjMwLCAzMywgMTE5LCAxMTcsIDEwOSwgMjA2LCA2MSwgCisgICAgMTE5LCAxMTcsIDEwOSwgMjIxLCA5MCwgMTE5LCAxMTcsIDEwOSwgMjI3LCAyNTEsIDExOSwgMTE3LCAxMDksIDIzNywgNzYsIAorICAgIDExOSwgMTE3LCAxMDksIDIyMSwgMjMwLCAxMTksIDExNywgMTA5LCAyMTYsIDE2NywgMTE5LCAxMTcsIDEwOSwgMjIyLCAxLCAKKyAgICAxMTksIDExNywgMTA5LCAyMTcsIDEwMCwgMTE5LCAxMTcsIDEwOSwgMjAzLCA2MiwgMTE5LCAxMTcsIDEwOSwgMjM2LCAyMjEsIAorICAgIDExOSwgMTE3LCAxMDksIDIyNSwgNjcsIDExOSwgMTE3LCAxMDksIDI0NiwgMTc0LCAxMTksIDExNywgMTA5LCAyMjMsIDI4LCAKKyAgICAxMTksIDExNywgMTA5LCAyMzYsIDE1NywgMTE5LCAxMTcsIDEwOSwgMjE4LCA4NSwgMTE5LCAxMTcsIDEwOSwgMjIxLCA5NSwgCisgICAgMTE5LCAxMTcsIDEwOSwgMjIzLCA2NSwgMTE5LCAxMTcsIDEwOSwgMjUwLCAzNCwgMTE5LCAxMTcsIDEwOSwgMjAzLCAxNzgsIAorICAgIDExOSwgMTE3LCAxMDksIDI0NywgMTUsIDExOSwgMTE3LCAxMzEsIDI0NiwgNjcsIDIwNywgMTk5LCAxMTksIDExNywgMTMxLCAKKyAgICAyNDYsIDY3LCAyMTIsIDEzLCAxMTksIDExNywgMTMxLCAyNDYsIDY3LCAyMjksIDE3MiwgMTE5LCAxMTcsIDEzMSwgMjQ2LCAKKyAgICA2NywgMjI5LCAxMzAsIDExOSwgMTE3LCAxMzEsIDI0NiwgNjcsIDIxMSwgNCwgMTE5LCAxMTcsIDEzMSwgMjQ2LCA2NywgCisgICAgMjM2LCAxMjMsIDExOSwgMTE3LCAxMzEsIDI0NiwgNjcsIDIwOSwgMjA2LCAxMTksIDExNywgMiwgMjA1LCAxNzMsIDIwOSwgCisgICAgNDQsIDExOSwgMTE3LCAyLCAyMDUsIDE3MywgMjA4LCA5LCAyNDYsIDIyOSwgMTE5LCAxMTcsIDIsIDI0NiwgNjcsIDI0NiwgCisgICAgMTYzLCAxMTksIDExNywgMiwgMjA1LCAxNzMsIDIwOSwgNjksIDExOSwgMTE3LCAyLCAyMDUsIDE3MywgMjQwLCA1MCwgMTE5LCAKKyAgICAxMTcsIDIsIDIwMywgMTM2LCAyMjEsIDg1LCAxMTksIDExNywgMiwgMjAzLCAxMzYsIDIxNiwgNTksIDExOSwgMTE3LCAyLCAKKyAgICAyMDMsIDEzNiwgMjA4LCAxMjQsIDExOSwgMTE3LCAyLCAyMDMsIDEzNiwgMjQwLCA4OSwgMTE5LCAxMTcsIDIsIDIwNSwgCisgICAgMTczLCAyMTQsIDE1OSwgMTE5LCAxMTcsIDIsIDIyNSwgNiwgMjExLCA4LCAxMTksIDExNywgMiwgMjA1LCAxNzMsIDIyMSwgCisgICAgMTM0LCAxMTksIDExNywgMiwgMjM1LCAxNjcsIDIwMywgODEsIDExOSwgMTE3LCAyLCAyMDMsIDE3NywgMTE5LCAxMTcsIDIsIAorICAgIDI0NiwgNjcsIDIwNywgMjUyLCAyMTUsIDIxNiwgMTE5LCAxMTcsIDE3LCAyMDIsIDg0LCAxMTksIDExNywgMTcsIDEwNSwgCisgICAgMTE5LCAxMTcsIDE3LCAxMDgsIDExOSwgMTE3LCAxNywgMTQ3LCAxMTksIDExNywgMTcsIDE0OSwgMTE5LCAxMTcsIDE3LCAKKyAgICAxNzAsIDExOSwgMTE3LCAxNywgMTk1LCAxMTksIDExNywgMTcsIDIxMywgMTExLCAxMTksIDExNywgMTcsIDE5OSwgMTE5LCAKKyAgICAxMTcsIDE3LCAyMjIsIDYzLCAxMTksIDExNywgNDIsIDIwOSwgMTQ3LCAxMTksIDExNywgNDIsIDIzNiwgMTAsIDExOSwgCisgICAgMTE3LCA0MiwgMjA5LCAxNTMsIDIwOSwgMzQsIDExOSwgMTE3LCA0MiwgMjI0LCAxMTMsIDExOSwgMTE3LCA0MiwgMjM2LCAKKyAgICAxMiwgMjI0LCAxMTMsIDExOSwgMTE3LCA0MiwgMjA5LCAxNTMsIDI0OCwgNjgsIDExOSwgMTE3LCA0MiwgMjA4LCA3MiwgCisgICAgMTE5LCAxMTcsIDIsIDIwNSwgMTczLCAyMjYsIDIzNCwgMTE5LCAxMTcsIDIsIDIwMywgMTMzLCAxMTksIDExNywgMiwgMjM2LCAKKyAgICAyMTYsIDExOSwgMTE3LCAyLCAyMDksIDU5LCAyMzYsIDIxNiwgMTE5LCAxMTcsIDIsIDIwMSwgMjQ3LCAyMDksIDEwMiwgCisgICAgMTE5LCAxMTcsIDIsIDIzNiwgMTQxLCAxMTksIDExNywgMiwgMjIxLCAxNDgsIDExOSwgMTE3LCAyLCAyMDMsIDE2OSwgMTE5LCAKKyAgICAxMTcsIDIsIDIyMSwgODgsIDExOSwgMTE3LCAyLCAyNTAsIDE4LCAxMTksIDExNywgMiwgMjA3LCAxMjksIDI0NiwgMjI4LCAKKyAgICAxMTksIDExNywgMiwgMjI1LCA2LCAyMDgsIDEyLCAxMTksIDExNywgMiwgMjA5LCAyMDcsIDExOSwgMTE3LCAyLCAyMjcsIDcsIAorICAgIDExOSwgMTE3LCAyLCAyMjMsIDIwMSwgMTE5LCAxMTcsIDIsIDI0NiwgNjcsIDIzNywgMTQzLCAyMjYsIDIxMiwgMjIxLCA5MywgCisgICAgMjIxLCA5MiwgMTE5LCAxMTcsIDIsIDI0NiwgNjcsIDI0NSwgMTA5LCAyMDgsIDMsIDExOSwgMTE3LCAyLCAyNDYsIDY3LCAKKyAgICAyMDcsIDEyNywgMTE5LCAxMTcsIDIsIDI0NiwgNjcsIDIwNywgMTI4LCAyNDYsIDg2LCAxMTksIDExNywgMiwgMjQ2LCA2NywgCisgICAgMjE3LCAxODYsIDI0NCwgMTM1LCAxMTksIDExNywgMiwgMjQ2LCA2NywgMjIxLCAxNDEsIDIwOCwgMTMyLCAxMTksIDExNywgCisgICAgMjQ2LCAzOSwgMiwgMjA4LCA3LCAxMTksIDExNywgMjQ2LCAzOSwgMiwgMjAzLCA0OCwgMTE5LCAxMTcsIDI0NiwgMzksIDIsIAorICAgIDIyNywgOTMsIDExOSwgMTE3LCAyNDYsIDM5LCAyLCAyMjcsIDI1MCwgMTE5LCAxMTcsIDI0NiwgMzksIDIsIDIwMywgMTMyLCAKKyAgICAxMTksIDExNywgMjQ2LCAzOSwgMiwgMjI5LCA2LCAxMTksIDExNywgMjQ2LCAzOSwgMiwgMjM3LCA3MywgMTE5LCAxMTcsIAorICAgIDI0NiwgMzksIDIsIDIyMywgMjQyLCAxMTksIDExNywgMjQ2LCAzOSwgMiwgMjA5LCA0NSwgMTE5LCAxMTcsIDI0NiwgMzksIAorICAgIDIsIDIwOCwgMTcsIDExOSwgMTE3LCAyNDYsIDM5LCAyLCAyMTgsIDIwNSwgMTE5LCAxMTcsIDI0NiwgMzksIDIsIDIyOSwgCisgICAgMTQyLCAxMTksIDExNywgMjQ2LCAzOSwgMiwgMjM3LCAxMzMsIDExOSwgMTE3LCAyNDYsIDM5LCAyLCAyMDYsIDgwLCAxMTksIAorICAgIDExNywgMjQ2LCAzOSwgMiwgMjQwLCA4NiwgMTE5LCAxMTcsIDI0NiwgMzksIDIsIDIwMywgODgsIDExOSwgMTE3LCAyNDYsIAorICAgIDM5LCAyLCAyMDcsIDI0NiwgMTE5LCAxMTcsIDI0NiwgMzksIDIsIDIyOCwgMTU4LCAxMTksIDExNywgMjQ2LCAzOSwgMiwgCisgICAgMjA0LCAxNTMsIDExMSwgMSwgMTg1LCAxMTEsIDEsIDI0OSwgMzIsIDExMSwgMSwgMTEsIDE4NSwgMTExLCAxLCAyMTgsIDk4LCAKKyAgICAxMTEsIDEsIDE5MiwgMTExLCAxLCAyMjQsIDE1OCwgMTExLCAxLCAyNTAsIDEyNiwgMTkyLCAxMTEsIDEsIDI0MCwgMTA4LCAKKyAgICAxMTEsIDEsIDIwNiwgODYsIDExMSwgMSwgMjA1LCAyMzEsIDExMSwgMSwgMjEwLCAyMiwgMTExLCAxLCAyNDQsIDIxMiwgCisgICAgMTExLCAxLCAxMSwgMjA3LCAyNDEsIDExMSwgMSwgMTEsIDIxMCwgMjIsIDExMSwgMSwgMjA3LCAyNDEsIDExMSwgMSwgMjQ0LCAKKyAgICAxMjAsIDExMSwgMSwgMjAxLCAyMDEsIDExMSwgMSwgMjIyLCAxMDQsIDExMSwgMSwgMTEsIDIyMSwgMjI3LCAxMTEsIDEsIAorICAgIDI1MCwgMTI2LCAyMDEsIDIwMSwgMTExLCAxLCAyMjEsIDIyNywgMTExLCAxLCAyMjEsIDIxMywgMTExLCAxLCAyMjgsIDExMywgCisgICAgMTExLCAxLCAyMjYsIDE5OCwgMTExLCAxLCAyMjcsIDE2MSwgMTExLCAxLCAyMjcsIDE1MCwgMTExLCAxLCAyMDgsIDE4NywgCisgICAgMTExLCAxLCAyNDMsIDEyMSwgMTExLCAxLCAyMDgsIDE3OSwgMTExLCAxLCAyNDMsIDEyMCwgMTExLCAxLCAxNzMsIDExMSwgCisgICAgMSwgMjM5LCA4LCAxMTEsIDEsIDExLCAxNzMsIDExMSwgMSwgMjE3LCAxMjYsIDExMSwgMSwgMjE3LCAxMDMsIDExMSwgMSwgCisgICAgMjIyLCAyMDMsIDExMSwgMSwgMjIyLCAxNTIsIDExMSwgMSwgMjUwLCAxMjYsIDIyMiwgMjAzLCAxMTEsIDEsIDE1MiwgMTExLCAKKyAgICAxLCAyMDMsIDE4MiwgMTExLCAxLCAyMzgsIDExOSwgMTExLCAxLCAyMzgsIDk0LCAxMTEsIDEsIDIwNywgMjUxLCAxMTEsIDEsIAorICAgIDI0MSwgMjM5LCAxMTEsIDEsIDIyMSwgMTEsIDExMSwgMSwgMjIwLCAyNTAsIDExMSwgMSwgMjA4LCAxMCwgMTExLCAxLCAKKyAgICAyNDEsIDI0OSwgMTExLCAxLCAxMSwgMjA4LCAxMCwgMTExLCAxLCAxMSwgMjQxLCAyNDksIDExMSwgMSwgMjE2LCAxMzMsIAorICAgIDIwOCwgMTAsIDExMSwgMSwgMjEzLCA5MCwgMTExLCAxLCAyMTEsIDE2NCwgMTExLCAxLCAyMDIsIDgwLCAxMTEsIDEsIDIwMiwgCisgICAgOCwgMTExLCAxLCAyMDgsIDIwLCAxMTEsIDEsIDI0MSwgMjU1LCAxMTEsIDEsIDExLCAyMDgsIDIwLCAxMTEsIDEsIDIxNSwgCisgICAgMzYsIDExMSwgMSwgMjAyLCAxMTYsIDExMSwgMSwgMjAyLCA5LCAxMTEsIDEsIDIwMSwgMjM1LCAxMTEsIDEsIDIwMSwgMjE1LCAKKyAgICAxMTEsIDEsIDI1MCwgMTI2LCAyMDEsIDIzNSwgMTExLCAxLCAyMDEsIDIwNywgMTExLCAxLCAyMDEsIDIxNCwgMTExLCAxLCAKKyAgICAyMDQsIDExMSwgMTExLCAxLCAyNTEsIDczLCAxMTEsIDEsIDIzNywgMTIsIDExMSwgMSwgMjIzLCA3MCwgMTExLCAyLCAyNTAsIAorICAgIDY1LCAxMTEsIDIsIDIxNiwgMTMzLCAyMDUsIDE4NCwgMTExLCAyLCAyMTYsIDEzMywgMjUwLCA2NSwgMTExLCAyMiwgMiwgCisgICAgNjMsIDExMSwgMjIsIDIsIDI1MiwgMjUsIDExMSwgMjIsIDIsIDI1MSwgNjksIDExMSwgMjIsIDIsIDI1MCwgMjMxLCAxMTEsIAorICAgIDIyLCAyLCAyNTAsIDIyMywgMTExLCAyMiwgMiwgNzgsIDExMSwgMjIsIDIsIDIyMCwgMTgsIDExMSwgMjIsIDIsIDIwNCwgMCwgCisgICAgMTExLCAyMiwgMiwgMjA0LCAxNDQsIDExMSwgMjIsIDIsIDc0LCAxMTEsIDIyLCAyLCAyNDEsIDkyLCAxMTEsIDIyLCAyLCAKKyAgICAyNDEsIDc4LCAxMTEsIDIyLCAyLCAyMjAsIDcwLCAxMTEsIDIyLCAyLCA3NSwgMTExLCAyMiwgMiwgMjM1LCAxNzEsIDExMSwgCisgICAgMjIsIDIsIDIzNSwgMTcwLCAxMTEsIDIyLCAyLCAyMzUsIDE2OSwgMTExLCAyMiwgMiwgMjMwLCAyMzQsIDExMSwgMjIsIDIsIAorICAgIDIzMSwgMTEwLCAxMTEsIDIyLCAyLCAyMzEsIDgzLCAxMTEsIDIyLCAyLCAyMzAsIDE5NywgMTExLCAyMiwgMiwgMjMxLCAyNCwgCisgICAgMTExLCAyMiwgMiwgNjgsIDExMSwgMjIsIDIsIDIwNywgMzksIDExMSwgMjIsIDIsIDIwNywgMzgsIDExMSwgMjIsIDIsIAorICAgIDIwNywgMzcsIDExMSwgMjIsIDIsIDIwNiwgMTc4LCAxMTEsIDIyLCAyLCAyMDcsIDIxLCAxMTEsIDIyLCAyLCAyMDYsIDI0MSwgCisgICAgMTExLCAyMiwgMiwgMjAzLCAxMjQsIDExMSwgMjIsIDIsIDIwMywgMTEsIDExMSwgMjIsIDIsIDI1MSwgMTA5LCAxMTEsIDIyLCAKKyAgICAyLCAyNTEsIDEwNSwgMTExLCAyMiwgMiwgMjQxLCAyMSwgMTExLCAyMiwgMiwgMjE1LCAxODksIDI0MSwgMjEsIDExMSwgMjIsIAorICAgIDIsIDI0MSwgMjgsIDExMSwgMjIsIDIsIDIxNSwgMTg5LCAyNDEsIDI4LCAxMTEsIDIyLCAyLCAyNTEsIDY0LCAxMTEsIDIyLCAKKyAgICAyLCAyNDEsIDE0NSwgMTExLCAyMiwgMiwgMjUwLCAzNCwgMTExLCAyMiwgMiwgMjE5LCAyMTYsIDExMSwgMjIsIDIsIDIyMywgCisgICAgMTYzLCAxMTEsIDIyLCAyLCAyMjIsIDIwNSwgMTExLCAxNDMsIDIxNiwgMTYsIDExMSwgMTQzLCAyMDgsIDE0NSwgMjE2LCAKKyAgICAxNiwgMTExLCAxNDMsIDU1LCAxMTEsIDE0MywgNTYsIDExMSwgMSwgMjA4LCAxNTksIDExMSwgMSwgMjA4LCAxNTgsIDExMSwgCisgICAgMSwgMjA4LCAxNTcsIDExMSwgMSwgMjA4LCAxNTYsIDExMSwgMSwgMjA4LCAxNTUsIDExMSwgMSwgMjA4LCAxNTQsIDExMSwgCisgICAgMSwgMjA4LCAxNTMsIDExMSwgMSwgMjE2LCAxMzMsIDIwOCwgMTYwLCAxMTEsIDEsIDIxNiwgMTMzLCAyMDgsIDE1OSwgMTExLCAKKyAgICAxLCAyMTYsIDEzMywgMjA4LCAxNTcsIDExMSwgMSwgMjE2LCAxMzMsIDIwOCwgMTU2LCAxMTEsIDEsIDIxNiwgMTMzLCAyMDgsIAorICAgIDE1NSwgMTExLCAxLCAyMTYsIDEzMywgMjA4LCAxNTMsIDY3LCAxLCAyNTAsIDEyNiwgNzQsIDE3MiwgMSwgMjUwLCAxMjYsIAorICAgIDIwMywgNTIsIDEwMCwgMSwgMjM3LCAxNzEsIDEwMCwgMSwgMjAzLCAxOTYsIDEwMCwgMSwgMjE5LCAxODQsIDEwMCwgMSwgCisgICAgMjEwLCA2OSwgMTAwLCAxLCAyNDAsIDE3NCwgMTAwLCAxLCAyMzAsIDU0LCAxMDAsIDEsIDE1OSwgMTAwLCAxLCAyNDksIAorICAgIDI1NSwgMTAwLCAxLCAyNDUsIDUxLCAxMDAsIDEsIDIwNiwgMTY0LCAxMDAsIDEsIDIzOSwgNzUsIDEwMCwgMSwgMTQ2LCAKKyAgICAxMDAsIDEsIDIxOSwgMTg1LCAyMjMsIDE2MywgMTAwLCAxLCAyNDUsIDUyLCAxOTQsIDEwMCwgMSwgMjQwLCAxNzUsIDIyMywgCisgICAgMTYzLCAxMDAsIDEsIDIzMCwgNTUsIDIyNiwgMTg1LCAxMDAsIDEsIDIxNywgMSwgMTk0LCAxMDAsIDEsIDIwOSwgMTEwLCAKKyAgICAxMDAsIDEsIDIxMiwgNDUsIDI0NCwgMiwgMTAwLCAxLCAyNDQsIDIsIDEwMCwgMSwgMjI5LCA0OCwgMTAwLCAxLCAyMTIsIAorICAgIDQ1LCAyMzAsIDE4NCwgMTAwLCAxLCAyMzYsIDIyNSwgMTAwLCAxLCAyMjcsIDE2MiwgMTAwLCAxLCAyMTYsIDYyLCAxMDAsIAorICAgIDEsIDIyNiwgMTg1LCAxMDAsIDEsIDIyMywgMTYzLCAxMDAsIDEsIDIzMCwgMTg0LCAxMDAsIDEsIDE5NCwgMTAwLCAxLCAKKyAgICAyMjYsIDE4NiwgMjIzLCAxNjMsIDEwMCwgMSwgMjIzLCAxNjQsIDIyNiwgMTg1LCAxMDAsIDEsIDIzMCwgMTg1LCAyMjYsIAorICAgIDE4NSwgMTAwLCAxLCAyMTUsIDk0LCAyMzAsIDE4NCwgMTAwLCAxLCAyMjYsIDE4NiwgMywgMjQzLCA4NSwgMTAwLCAxLCAKKyAgICAyMjMsIDE2NCwgMywgMjQzLCA4NSwgMTAwLCAxLCAyMzAsIDE4NSwgMywgMjQzLCA4NSwgMTAwLCAxLCAyMzAsIDE4NSwgMywgCisgICAgMTg3LCAyMzEsIDcsIDI1LCA1NSwgMTAwLCAxLCAyMTUsIDk0LCAzLCAyNDMsIDg1LCAxMDAsIDEsIDIxNSwgOTQsIDMsIDcwLCAKKyAgICA1NiwgMTAwLCAxLCAyMjYsIDE4NiwgMTk0LCAxMDAsIDEsIDIyMywgMTY0LCAxOTQsIDEwMCwgMSwgMjMwLCAxODUsIDE5NCwgCisgICAgMTAwLCAxLCAyMTUsIDk0LCAxOTQsIDEwMCwgMSwgMjI2LCAxODYsIDIyMywgMTY0LCAxOTQsIDEwMCwgMSwgMjIzLCAxNjQsIAorICAgIDIyNiwgMTg2LCAxOTQsIDEwMCwgMSwgMjMwLCAxODUsIDIyNiwgMTg2LCAxOTQsIDEwMCwgMSwgMjE1LCA5NCwgMjMwLCAKKyAgICAxODUsIDE5NCwgMTAwLCAxLCAyMzAsIDE4NSwgMjE1LCA5NCwgMywgMjQzLCA4NSwgMTAwLCAxLCAyMzAsIDE4NSwgMjIzLCAKKyAgICAxNjMsIDEwMCwgMSwgMjMwLCAxODUsIDIyMywgMTY0LCAxOTQsIDEwMCwgMSwgMjE1LCA5NCwgMjEwLCA2OSwgMTAwLCAxLCAKKyAgICAyMTUsIDk0LCAyMTAsIDcwLCAxNDYsIDEwMCwgMSwgMjE1LCA5NCwgMjE5LCAxODQsIDEwMCwgMSwgMjE1LCA5NCwgMjE5LCAKKyAgICAxODUsIDE0NiwgMTAwLCAxLCAyMTAsIDcwLCAxOTQsIDEwMCwgMSwgMjEwLCA3MCwgMjE3LCAxLCAxOTQsIDEwMCwgMSwgCisgICAgMjA0LCAxNDQsIDEwMCwgMSwgMjA0LCA0MCwgMTAwLCAxLCAyMDQsIDE0NSwgMTQ2LCAxMDAsIDEsIDIxNSwgOTQsIDIyMywgCisgICAgMTYzLCAxMDAsIDEsIDIxNSwgOTQsIDIyNiwgMTg1LCAxMDAsIDEsIDIzMCwgNTUsIDIxNywgMSwgMTk0LCAxMDAsIDEsIAorICAgIDIzOSwgNzYsIDIxNywgMSwgMTk0LCAxMDAsIDEsIDIxNSwgOTQsIDIzMCwgNTQsIDEwMCwgMSwgMjE1LCA5NCwgMjMwLCA1NSwgCisgICAgMTQ2LCAxMDAsIDEsIDYzLCAxMDAsIDEsIDIxMiwgNDUsIDIxOSwgMTk1LCAxMDAsIDEsIDIyMCwgOTcsIDEwMCwgMSwgNzgsIAorICAgIDEwMCwgMSwgMjUwLCAxNzYsIDEwMCwgMSwgNzUsIDEwMCwgMSwgNzQsIDEwMCwgMSwgMjMxLCAxMTAsIDEwMCwgMSwgMjEyLCAKKyAgICAyMjgsIDc1LCAxMDAsIDEsIDIwNywgMTcsIDEwMCwgMSwgMjQxLCAxNjEsIDEwMCwgMSwgMjEyLCA0NSwgMjQxLCAxNDcsIAorICAgIDEwMCwgMSwgMjE1LCAyMDksIDc1LCAxMDAsIDEsIDIxMiwgNDUsIDI0MSwgMTYxLCAxMDAsIDEsIDE2MywgNzUsIDEwMCwgMSwgCisgICAgMjAzLCA1MiwgMTAwLCAxLCA2OCwgMTAwLCAxLCAyNDAsIDIzOCwgMTAwLCAxLCAyMDMsIDE0NywgMTAwLCAxLCAxMDYsIAorICAgIDIyMywgMTYzLCAxMDAsIDEsIDE2MywgNjgsIDEwMCwgMSwgMjE1LCAyMDksIDY4LCAxMDAsIDEsIDIwNywgMTgsIDEwMCwgMSwgCisgICAgMjEyLCA0NSwgNjgsIDEwMCwgMSwgMjIwLCAxNSwgMTAwLCAxLCAyMTksIDE5NSwgMTAwLCAxLCAyMTksIDIxNiwgMTAwLCAxLCAKKyAgICAyMDQsIDExMSwgMTAwLCAxLCAyMDQsIDAsIDEwMCwgMSwgMjA0LCAzMCwgMTAwLCAxLCAyMDQsIDUzLCAxMDAsIDEsIDIwMywgCisgICAgMjMwLCAxMDAsIDEsIDIyMywgNzIsIDY4LCAxMDAsIDEsIDIyMywgNzIsIDc4LCAxMDAsIDEsIDIyMywgNzIsIDc1LCAxMDAsIAorICAgIDEsIDIyMywgNzIsIDYzLCAxMDAsIDEsIDIxOCwgMjM1LCAyNTAsIDIzMSwgMTAwLCAxLCAyMTgsIDIzNSwgMjUwLCAyNDcsIAorICAgIDEwMCwgMSwgMjEyLCA0NSwgMjQxLCA5MiwgMTAwLCAxLCAyMTIsIDQ1LCAyNTAsIDIzMSwgMTAwLCAxLCAyMTIsIDQ1LCAKKyAgICAyMjAsIDMxLCAxMDAsIDEsIDEyNSwgMjI2LCAxODUsIDEwMCwgMjUxLCA4OCwgNDksIDIzNiwgMTA2LCAyMTQsIDE3MiwgCisgICAgMTAwLCAyNTEsIDg4LCAyMjQsIDE1MCwgMjM2LCAxMDYsIDIxNCwgMTcyLCAxMDAsIDI1MSwgODgsIDUwLCAyMzYsIDEwNiwgCisgICAgMjE0LCAxNzIsIDEwMCwgMjUxLCA4OCwgMTI0LCA4MCwgMjE0LCAxNzIsIDEwMCwgMjUxLCA4OCwgMjI0LCAxNTAsIDgwLCAKKyAgICAyMTQsIDE3MiwgMTAwLCAyNTEsIDg4LCAxMzgsIDgwLCAyMTQsIDE3MiwgMTAwLCAyNTEsIDg4LCAyNTAsIDQwLCAyMTQsIAorICAgIDE3MiwgMTAwLCAyNTEsIDg4LCAyNTAsIDQwLCAyMjcsIDIxMywgMjE0LCAxNzIsIDEwMCwgMjUxLCA4OCwgMjUwLCA0MCwgCisgICAgMjA5LCAyMjYsIDEwMCwgMjUxLCA4OCwgMjUwLCA0MCwgMjA5LCAyNDgsIDEwMCwgMjUxLCA4OCwgMjUwLCA0MCwgMTg4LCAKKyAgICAxMTMsIDEwMCwgMjUxLCA4OCwgMjUwLCA0MCwgMjM1LCAyMDYsIDExMywgMTAwLCAyNTEsIDg4LCAyNTAsIDQwLCAyMDksIAorICAgIDIyNywgMTEzLCAxMDAsIDI1MSwgODgsIDEzOCwgMTY1LCAxMDAsIDI1MSwgODgsIDEzOCwgMjA4LCAyNDQsIDE2NSwgMTAwLCAKKyAgICAyNTEsIDg4LCAxMzgsIDIzNywgMjUzLCAxMDAsIDI1MSwgODgsIDEzOCwgMTYzLCAyMzcsIDI1MywgMTAwLCAyNTEsIDg4LCAKKyAgICAxMzgsIDI0MywgODUsIDEwMCwgMjUxLCA4OCwgMTM4LCAyNDYsIDYxLCAxMDAsIDI1MSwgODgsIDEzOCwgMjI3LCAxMTQsIAorICAgIDEwMCwgMjUxLCA4OCwgMTM4LCAyMDQsIDc1LCAxMDAsIDI1MSwgODgsIDEzOCwgMjA2LCAzOCwgMTAwLCAyNTEsIDg4LCAKKyAgICAxMjQsIDE2NSwgMTAwLCAyNTEsIDg4LCAxMjQsIDIwOCwgMjQ0LCAxNjUsIDEwMCwgMjUxLCA4OCwgMTI0LCAyMzcsIDI1MywgCisgICAgMTAwLCAyNTEsIDg4LCAxMjQsIDE2MywgMjM3LCAyNTMsIDEwMCwgMjUxLCA4OCwgMTI0LCAyNDMsIDg1LCAxMDAsIDI1MSwgCisgICAgODgsIDEyNCwgMjQ2LCA2MSwgMTAwLCAyNTEsIDg4LCAxMjQsIDIyNywgMTE0LCAxMDAsIDI1MSwgODgsIDEyNCwgMjA0LCAKKyAgICA3NSwgMTAwLCAyNTEsIDg4LCAxMjQsIDIwNiwgMzgsIDEwMCwgMjUxLCA4OCwgMTI0LCA0NywgMTAwLCAyLCAxNTgsIDMsIAorICAgIDI0NSwgMTMwLCAxMDAsIDIwOSwgNjgsIDEsIDIxNCwgMTUwLCAxMDAsIDUyLCA4MiwgMTAwLCAyMTcsIDE3OSwgMjQ2LCAKKyAgICAxMjYsIDIzOSwgMTAyLCAyMTEsIDYxLCAyMTIsIDIxNSwgMjM5LCAxNTgsIDEsIDIxOSwgMjAxLCAyMTIsIDIxNSwgMjM5LCAKKyAgICAxNTgsIDI0NSwgMTkwLCAyMTksIDIwMSwgMjEyLCAyMTUsIDIzOSwgMTU4LCAxMjEsIDIxMSwgNzUsIDIxMiwgMjE1LCAyMzksIAorICAgIDE1OCwgMTEyLCAyMTEsIDc1LCA2MCwgMzEsIDE2LCAyMTcsIDE5NSwgNjAsIDMxLCAxNiwgMjQ0LCAxNDYsIDYwLCAzMSwgCisgICAgMTYsIDIxOCwgMjM5LCA2MCwgMzEsIDE2LCAyMTksIDE5MiwgMjQxLCAxMjYsIDYwLCAzMSwgMTYsIDIxOSwgMTkyLCAyNDMsIAorICAgIDE3MSwgNjAsIDMxLCAxNiwgMjA2LCA3MywgMjQxLCAxMjYsIDYwLCAzMSwgMTYsIDIwNiwgNzMsIDI0MywgMTcxLCA2MCwgCisgICAgMzEsIDE2LCAyMjksIDIyMSwgNjAsIDMxLCAxNiwgMjEwLCA4NiwgNjAsIDMxLCAxNiwgMjE5LCA4MywgNjAsIDMxLCAxNiwgCisgICAgMjAyLCAyMTksIDYwLCAzMSwgMTYsIDIwMiwgMjIwLCAyNDMsIDE3MSwgNjAsIDMxLCAxNiwgMjI4LCAyMjYsIDYwLCAzMSwgCisgICAgMTYsIDI1MCwgMTcxLCAyNDEsIDEyNiwgNjAsIDMxLCAxNiwgMjQwLCAyMDYsIDI0MSwgMTI2LCA2MCwgMzEsIDE2LCAyMDksIAorICAgIDE2MywgNjAsIDMxLCAxNiwgMjI5LCAxNzYsIDYwLCAzMSwgMTYsIDI1MCwgMTYxLCA2MCwgMzEsIDE2LCAyNTAsIDE2MiwgCisgICAgMjQzLCAxNzEsIDYwLCAzMSwgMTYsIDIxMCwgOTMsIDYwLCAzMSwgMTYsIDIwOSwgNTAsIDYwLCAzMSwgMTYsIDIyMCwgNDIsIAorICAgIDI1MCwgMTI0LCA2MCwgMzEsIDE2LCAyMzgsIDIzLCAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjE3LCAxOTQsIDYwLCAzMSwgCisgICAgMTYsIDI0NiwgMTkwLCA2MCwgMzEsIDE2LCAyMDYsIDYyLCA2MCwgMzEsIDE2LCAyMzAsIDIwNiwgMjUwLCAxMjQsIDYwLCAKKyAgICAzMSwgMTYsIDIyOSwgMTc4LCAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjI5LCAxNzcsIDI1MCwgMTI0LCA2MCwgMzEsIDE2LCAKKyAgICAyMTQsIDIxMCwgNjAsIDMxLCAxNiwgMjE5LCA3MywgNjAsIDMxLCAxNiwgMjExLCA4NCwgMjUwLCAxNjQsIDYwLCAzMSwgMTYsIAorICAgIDIxOSwgMTkxLCAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjA2LCA3MiwgMjUwLCAxMjQsIDYwLCAzMSwgMTYsIDI1MCwgMTY1LCAKKyAgICAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjUwLCAxNTksIDYwLCAzMSwgMTYsIDIyOSwgMzgsIDYwLCAzMSwgMTYsIDIxNiwgNjksIAorICAgIDYwLCAzMSwgMTYsIDIxOCwgMTY1LCAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjA4LCAyMTcsIDYwLCAzMSwgMTYsIDI1MCwgCisgICAgMjI5LCA2MCwgMzEsIDE2LCAyMTQsIDE1MywgNjAsIDMxLCAxNiwgMjEwLCA5NywgMjUwLCAxMjQsIDYwLCAzMSwgMTYsIAorICAgIDIxMCwgOTcsIDIyNCwgMjIxLCAyMTEsIDgyLCA2MCwgMzEsIDE2LCAyMTksIDE4NiwgMjUwLCAxMjQsIDYwLCAzMSwgMTYsIAorICAgIDIwOSwgODYsIDYwLCAzMSwgMTYsIDIyNywgMjAwLCA2MCwgMzEsIDE2LCAyNDIsIDIsIDYwLCAzMSwgMTYsIDIwOCwgODcsIAorICAgIDYwLCAzMSwgMTYsIDIwOSwgMTM0LCA2MCwgMzEsIDE2LCAyMjgsIDIyOSwgNjAsIDMxLCAxNiwgMjUwLCAxNzEsIDI0MCwgCisgICAgMjA2LCAyMjIsIDIyNiwgNjAsIDMxLCAxNiwgMjM5LCAxMTAsIDI1MCwgMTI0LCA2MCwgMzEsIDE2LCAyMzEsIDYyLCA2MCwgCisgICAgMzEsIDE2LCAyMDgsIDU3LCAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjI5LCAyMjQsIDIwOCwgNTYsIDYwLCAzMSwgMTYsIAorICAgIDIxOSwgMTEsIDYwLCAzMSwgMTYsIDIxNywgMTk5LCA2MCwgMzEsIDE2LCAyMjksIDcsIDYwLCAzMSwgMTYsIDI0NiwgMTEwLCAKKyAgICAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjE2LCAxNzcsIDYwLCAzMSwgMTYsIDIxOSwgODYsIDI1MCwgMTI0LCA2MCwgMzEsIAorICAgIDE2LCAyMTksIDg0LCAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjM1LCAxNjAsIDYwLCAzMSwgMTYsIDIyMywgODIsIDYwLCAzMSwgCisgICAgMTYsIDIxOCwgMjE3LCA2MCwgMzEsIDE2LCAyMjksIDgsIDI1MSwgOSwgNjAsIDMxLCAxNiwgMjA4LCA1NywgMjUxLCA5LCAKKyAgICA2MCwgMzEsIDE2LCAyMTEsIDU1LCA2MCwgMzEsIDE2LCAyMzcsIDI0MCwgNjAsIDMxLCAxNiwgMjMwLCAyMDYsIDIyMiwgCisgICAgMjI2LCA2MCwgMzEsIDE2LCAyMjAsIDQyLCAyMjIsIDIyNiwgNjAsIDMxLCAxNiwgMjE5LCAxOTIsIDIyMiwgMjI2LCA2MCwgCisgICAgMzEsIDE2LCAyMTgsIDIxNiwgNjAsIDMxLCAxNiwgMjI4LCAyNDgsIDYwLCAzMSwgMTYsIDIxOCwgMjE1LCA2MCwgMzEsIDE2LCAKKyAgICAyMjgsIDIyOCwgNjAsIDMxLCAxNiwgMjE5LCAxMiwgMjIyLCAyMjYsIDYwLCAzMSwgMTYsIDIyOSwgMTc3LCAyMjIsIDIyNywgCisgICAgMjUwLCAyMDIsIDYwLCAzMSwgMTYsIDIyOSwgMTc4LCAyMjIsIDIyNywgMjUwLCAyMDIsIDYwLCAzMSwgMTYsIDIwMiwgMjE3LCAKKyAgICA2MCwgMzEsIDE2LCAyNTAsIDE2MiwgMjIyLCAyMjYsIDYwLCAzMSwgMTYsIDI1MCwgMTYzLCAyMTAsIDk0LCAyMjIsIDIyNiwgCisgICAgNjAsIDMxLCAxNiwgMjAyLCAyMTgsIDYwLCAzMSwgMTYsIDIyOCwgMjI3LCA2MCwgMzEsIDE2LCAyNDEsIDEyMSwgNjAsIDMxLCAKKyAgICAxNiwgMjQ2LCAxOTEsIDYwLCAzMSwgMTYsIDIyNCwgMTIyLCAyMzAsIDIwNSwgNjAsIDMxLCAxNiwgMjA2LCA3MywgMjIyLCAKKyAgICAyMjYsIDYwLCAzMSwgMTYsIDIxOCwgMTY1LCAyMjIsIDIyNiwgNjAsIDMxLCAxNiwgMjE3LCAyMDAsIDIyMiwgMjI2LCA2MCwgCisgICAgMzEsIDE2LCAyMjAsIDM4LCA2MCwgMzEsIDE2LCAyNTAsIDE4OSwgNjAsIDMxLCAxNiwgMjI2LCAxOTUsIDYwLCAzMSwgMTYsIAorICAgIDIxOSwgODQsIDIyMiwgMjI2LCA2MCwgMzEsIDE2LCAyMTksIDg2LCAyMjIsIDIyNiwgNjAsIDMxLCAxNiwgMjQwLCAyNDQsIAorICAgIDIxOSwgODUsIDYwLCAzMSwgMTYsIDIyOCwgMTM1LCA2MCwgMzEsIDE2LCAyNTAsIDE5MCwgNjAsIDMxLCAxNiwgMjA4LCA1NywgCisgICAgMjIyLCAyMjYsIDYwLCAzMSwgMTYsIDI0MSwgMTI0LCA2MCwgMzEsIDE2LCAyMTAsIDk3LCAyMjIsIDIyNiwgNjAsIDMxLCAKKyAgICAxNiwgMjEwLCA4NywgNjAsIDMxLCAxNiwgMjQ2LCAxMTAsIDIyMiwgMjI2LCA2MCwgMzEsIDE2LCAyNDEsIDQzLCA2MCwgMzEsIAorICAgIDE2LCAyMTQsIDE1NCwgMjIyLCAyMjYsIDYwLCAzMSwgMTYsIDIwMywgMTYzLCAyMjksIDM4LCA2MCwgMzEsIDE2LCAyMDgsIAorICAgIDU0LCA2MCwgMzEsIDE2LCAyMTcsIDIwMSwgNjAsIDMxLCAxNiwgMjA4LCA1OCwgNjAsIDMxLCAxNiwgMjA4LCA1NSwgNjAsIAorICAgIDMxLCAxNiwgMjE3LCAxOTgsIDYwLCAzMSwgMTYsIDIwOCwgNTMsIDYwLCAzMSwgMTYsIDIxNywgMTk3LCA2MCwgMzEsIDE2LCAKKyAgICAyMzgsIDIyLCA2MCwgMzEsIDE2LCAyNTAsIDExNiwgNjAsIDMxLCAxNiwgMjQwLCAyNDQsIDI1MCwgMTE2LCA2MCwgMzEsIAorICAgIDE2LCAyMTksIDE4NiwgMjIyLCAyMjYsIDYwLCAzMSwgMTYsIDIwOSwgODUsIDI0MSwgMSwgNjAsIDMxLCAxNiwgMjA5LCA4NSwgCisgICAgMjQwLCAyMDUsIDYwLCAzMSwgMTYsIDIwOSwgODcsIDI1MCwgMTY2LCA2MCwgMzEsIDE2LCAyMDksIDc5LCAyMzAsIDE5LCAKKyAgICAyNTAsIDE1OCwgNjAsIDMxLCAxNiwgMjI5LCAyMjMsIDYwLCAzMSwgMTYsIDI0MSwgODAsIDYwLCAzMSwgMTYsIDIwMywgMTQsIAorICAgIDIyOSwgMjIwLCA2MCwgMzEsIDE2LCAyMDMsIDE0LCAyNTAsIDIwMiwgNjAsIDMxLCAxNiwgMjExLCA4MywgNjAsIDMxLCAxNiwgCisgICAgMjI5LCAzOSwgMjUwLCAyMDIsIDYwLCAzMSwgMTYsIDI0MywgMTcyLCAyNTAsIDEyNCwgNjAsIDMxLCAxNiwgMjI4LCAyMzAsIAorICAgIDI1MCwgMTI0LCA2MCwgMzEsIDE2LCAyMjgsIDIzMCwgMjUxLCA5LCA2MCwgMzEsIDE2LCAyMjgsIDIzMCwgMjIyLCAyMjYsIAorICAgIDYwLCAzMSwgMTYsIDI1MCwgMTY1LCAyMjIsIDIyNiwgNjAsIDMxLCAxNiwgMjUwLCAxNjcsIDYwLCAzMSwgMTYsIDI0MywgCisgICAgMTcxLCA2MCwgMzEsIDE2LCAyMDgsIDY4LCA2MCwgMzEsIDE2LCAyMDksIDEyNSwgNjAsIDMxLCAxNiwgMjI4LCAyNTIsIDYwLCAKKyAgICAzMSwgMTYsIDIyNywgMjA1LCAyNDEsIDczLCAyNDYsIDEwMCwgNjAsIDMxLCAxNiwgMjI3LCAyMDUsIDI0MiwgMywgMjQ2LCAKKyAgICAxMDEsIDYwLCAzMSwgMTYsIDIyNywgMjA1LCAyMDgsIDcxLCAyNDYsIDEwMSwgNjAsIDMxLCAxNiwgMjI3LCAyMDUsIDIwOSwgCisgICAgMTM2LCAyNDYsIDEwMSwgNjAsIDMxLCAxNiwgMjI3LCAyMDUsIDIzMSwgNTcsIDI0NiwgMTAwLCA2MCwgMzEsIDE2LCAyMzgsIAorICAgIDIzLCAyMjIsIDIyNywgMjUwLCAyMDIsIDYwLCAzMSwgMTYsIDIzOCwgMjMsIDIxOSwgNzQsIDI1MCwgMTEyLCA2MCwgMzEsIAorICAgIDE2LCAyMzgsIDIzLCAyMTksIDc0LCAyNDQsIDYsIDYwLCAzMSwgMTYsIDI0MywgMTk2LCA2MCwgMzEsIDE2LCAyNDMsIDE5NywgCisgICAgMjE5LCA3NCwgMjUwLCAxMTMsIDIyOSwgMjIwLCA2MCwgMzEsIDE2LCAyNDMsIDE5NywgMjE5LCA3NCwgMjUwLCAxMTMsIAorICAgIDI1MCwgMjAyLCA2MCwgMzEsIDE2LCAyNDMsIDE5NywgMjE5LCA3NCwgMjQ0LCA2LCA2MCwgMzEsIDE2LCAyMDgsIDc2LCA2MCwgCisgICAgMzEsIDE2LCAyNTAsIDExNywgNjAsIDMxLCAxNiwgMjMxLCA2NCwgNjAsIDMxLCAxNiwgMjQzLCAyMTksIDYwLCAzMSwgMTYsIAorICAgIDI1MSwgNzUsIDIxOCwgNTIsIDI1MCwgMTE4LCA2MCwgMzEsIDE2LCAyNTEsIDc1LCAyNTAsIDExNSwgNjAsIDMxLCAxNiwgCisgICAgMjUxLCA3NSwgMjUwLCAxMTgsIDYwLCAzMSwgMTYsIDI1MSwgNzUsIDIyNCwgMjE1LCA2MCwgMzEsIDE2LCAyNTEsIDc1LCAKKyAgICAyMjQsIDIyNiwgNjAsIDMxLCAxNiwgMjUxLCA3NSwgMjM4LCAyNCwgNjAsIDMxLCAxNiwgMjUxLCA3NSwgMjM4LCAyMSwgNjAsIAorICAgIDMxLCAxNiwgMjUxLCA3NSwgMjE4LCA1MiwgMjM4LCAyNCwgNjAsIDMxLCAxNiwgMjI1LCA4NCwgMjE3LCAyMDcsIDIzNSwgCisgICAgMTU4LCA2MCwgMzEsIDE2LCAyMjUsIDg0LCAyNTEsIDExLCAyMTcsIDIwNywgMjM1LCAxNTgsIDYwLCAzMSwgMTYsIDIyNSwgCisgICAgODQsIDI0NCwgNSwgMjM1LCAxNTgsIDYwLCAzMSwgMTYsIDIyNSwgODQsIDI1MSwgMTEsIDI0NCwgNSwgMjM1LCAxNTgsIDYwLCAKKyAgICAzMSwgMTYsIDIyNSwgODQsIDIwOCwgNjMsIDIzNSwgMTU4LCA2MCwgMzEsIDE2LCAyMjUsIDg0LCAyMDgsIDc3LCA2MCwgMzEsIAorICAgIDE2LCAyMjUsIDg0LCAyMDksIDEzMCwgMjM1LCAxNTgsIDYwLCAzMSwgMTYsIDIyNSwgODQsIDIwOSwgMTMwLCAyMjcsIDIwOSwgCisgICAgMjM1LCAxNTgsIDYwLCAzMSwgMTYsIDIyNSwgODQsIDIyNywgMjA5LCAyMzUsIDE1OCwgNjAsIDMxLCAxNiwgMjI1LCA4NCwgCisgICAgMjE4LCA5NSwgMjM1LCAxNTgsIDYwLCAzMSwgMTYsIDIzMCwgMjEzLCAyMDksIDE1NiwgMjM1LCAxNTksIDYwLCAzMSwgMTYsIAorICAgIDI1MCwgMTYzLCAyMDksIDE1NiwgMjM1LCAxNTksIDYwLCAzMSwgMTYsIDI0MCwgODAsIDIwOSwgMTI3LCA2MCwgMzEsIDE2LCAKKyAgICAyNDAsIDgwLCAyMjQsIDQ2LCA2MCwgMzEsIDE2LCAyNDAsIDgwLCAyNDMsIDIwMiwgNjAsIDMxLCAxNiwgMjI1LCA4NCwgCisgICAgMjA2LCA2NiwgMjM1LCAxNTgsIDYwLCAzMSwgMTYsIDIyNSwgODQsIDIxNywgMjA2LCAyMzUsIDE1OCwgNjAsIDMxLCAxNiwgCisgICAgMjI1LCA4NCwgMjE4LCA5NSwgMjA5LCAxMzAsIDIzNSwgMTU4LCA2MCwgMzEsIDE2LCAyMzgsIDE5LCAyMjMsIDE2NCwgMjUwLCAKKyAgICAxNjYsIDYwLCAzMSwgMTYsIDIzOCwgMTksIDIyMywgMTY0LCAyNDMsIDE3MCwgNjAsIDMxLCAxNiwgMjQxLCA5MCwgMjMwLCAKKyAgICAxOSwgMjM5LCAxMTAsIDIwNSwgMTcxLCA2MCwgMzEsIDE2LCAyMzEsIDYzLCA2MCwgMzEsIDE2LCAyMzEsIDYxLCA2MCwgMzEsIAorICAgIDE2LCAyMzksIDExMCwgMjUwLCAxMjUsIDI0NCwgNCwgMjM1LCAxNTcsIDYwLCAzMSwgMTYsIDIzOSwgMTEwLCAyNDMsIDIxNywgCisgICAgMTg1LCA2MCwgMzEsIDE2LCAyMzksIDExMCwgMjQzLCAyMTcsIDIyMywgODIsIDYwLCAzMSwgMTYsIDIzOSwgMTEwLCAyMjMsIAorICAgIDc3LCAyMzUsIDE1OCwgNjAsIDMxLCAxNiwgMjM5LCAxMTAsIDI0MywgMjE3LCAyNDMsIDIzMywgNjAsIDMxLCAxNiwgMjM5LCAKKyAgICAxMTAsIDIxMiwgNjQsIDI0MywgMjE2LCAyNDMsIDIzMywgNjAsIDMxLCAxNiwgMjM5LCAxMTAsIDI0MywgMjE3LCAyMjksIAorICAgIDIwMSwgNjAsIDMxLCAxNiwgMjM5LCAxMTAsIDI0MywgMjE3LCAyMDIsIDE3LCA2MCwgMzEsIDE2LCAyMzksIDExMCwgMjQzLCAKKyAgICAyMTcsIDIyMiwgMTAxLCAyMjksIDIyMCwgNjAsIDMxLCAxNiwgMjM5LCAxMTAsIDI0MywgMjE3LCAyMjIsIDEwMSwgMjUwLCAKKyAgICAyMDIsIDYwLCAzMSwgMTYsIDIzOSwgMTEwLCAyMjUsIDEyOCwgMjQ2LCAxMDIsIDI0MywgMjAyLCA2MCwgMzEsIDE2LCAyMzksIAorICAgIDExMCwgMjI1LCAxMjgsIDI0NiwgMTAyLCAyMjQsIDQ2LCA2MCwgMzEsIDE2LCAyNDAsIDI3LCAyMTIsIDY0LCAyNDYsIDEwMiwgCisgICAgMjA2LCA2NSwgNjAsIDMxLCAxNiwgMjM5LCAxMTAsIDIxMiwgNjQsIDI0NiwgMTAyLCAyMTAsIDk4LCA2MCwgMzEsIDE2LCAKKyAgICAyMzksIDExMCwgMjIyLCAyMjksIDYwLCAzMSwgMTYsIDI0NiwgMTAzLCAyMDEsIDI0MSwgNjAsIDMxLCAxNiwgMjQ2LCAxMDMsIAorICAgIDIyOSwgMzcsIDYwLCAzMSwgMTYsIDI0NiwgMTAzLCAyMTEsIDIxOSwgNjAsIDMxLCAxNiwgMjM5LCAxMTAsIDIzNSwgMjA2LCAKKyAgICAyMDMsIDEzLCAyMDksIDEzMSwgNjAsIDMxLCAxNiwgMjM5LCAxMTAsIDI0MSwgOTEsIDI1MCwgMTkxLCA2MCwgMzEsIDE2LCAKKyAgICAyMDMsIDEzLCAyMDgsIDY0LCA2MCwgMzEsIDE2LCAyNDMsIDIxMCwgMjA4LCA2NCwgNjAsIDMxLCAxNiwgMjQzLCAyMTAsIAorICAgIDIwOSwgMTMxLCA2MCwgMzEsIDE2LCAyNDMsIDIxMCwgMjUwLCAxNjgsIDI0MiwgMywgMjQzLCAxMDUsIDYwLCAzMSwgMTYsIAorICAgIDI0MywgMjEwLCAyMjQsIDQ0LCAyMDksIDEzNSwgMjQzLCAxMDUsIDYwLCAzMSwgMTYsIDI0MywgMjEwLCAyNDMsIDE5MywgCisgICAgMjQwLCAyMTgsIDI0MywgMTA1LCA2MCwgMzEsIDE2LCAyNDMsIDIxMCwgMjA4LCA3NCwgMjIwLCA0OCwgMjQzLCAxMDUsIDYwLCAKKyAgICAzMSwgMTYsIDIwMywgMTMsIDI1MCwgMTY4LCAyNDIsIDMsIDI0MywgMTA1LCA2MCwgMzEsIDE2LCAyMDMsIDEzLCAyMjQsIAorICAgIDQ0LCAyMDksIDEzNSwgMjQzLCAxMDUsIDYwLCAzMSwgMTYsIDIwMywgMTMsIDI0MywgMTkzLCAyNDAsIDIxOCwgMjQzLCAKKyAgICAxMDUsIDYwLCAzMSwgMTYsIDIwMywgMTMsIDIwOCwgNzQsIDIyMCwgNDgsIDI0MywgMTA1LCA2MCwgMzEsIDE2LCAyMzgsIAorICAgIDE3NSwgMjQzLCAyMDksIDYwLCAzMSwgMTYsIDIzOCwgMTc1LCAyMDMsIDEyLCA2MCwgMzEsIDE2LCAyNDMsIDIxOCwgMjUwLCAKKyAgICAxNjgsIDIyNCwgMTIzLCA2MCwgMzEsIDE2LCAyNDMsIDIxOCwgMjUwLCAxNjgsIDIyNCwgMjU1LCA2MCwgMzEsIDE2LCAyNDMsIAorICAgIDIxOCwgMjQzLCAxNzEsIDYwLCAzMSwgMTYsIDI0MywgMjE4LCAyMDksIDc3LCA2MCwgMzEsIDE2LCAyMTIsIDEzMCwgMjA5LCAKKyAgICA3NywgNjAsIDMxLCAxNiwgMjEyLCAxMzAsIDIwOSwgNzgsIDI0MywgMTU1LCA2MCwgMzEsIDE2LCAyMTIsIDEzMCwgMjA5LCAKKyAgICA3OCwgMjA4LCA2NSwgNjAsIDMxLCAxNiwgMjEyLCAxMzAsIDIwOSwgNzgsIDIwOSwgMTIzLCA2MCwgMzEsIDE2LCAyMTIsIAorICAgIDEzMCwgMjUwLCA4OCwgNjAsIDMxLCAxNiwgMjEyLCAxMzAsIDI1MCwgODksIDI0MywgMTU1LCA2MCwgMzEsIDE2LCAyMTIsIAorICAgIDEzMCwgMjUwLCA4OSwgMjA4LCA2NSwgNjAsIDMxLCAxNiwgMjEyLCAxMzAsIDI1MCwgODksIDIwOSwgMTIzLCA2MCwgMzEsIAorICAgIDE2LCAyNDMsIDE5NCwgMjM4LCAxNTYsIDYwLCAzMSwgMTYsIDI0MywgMjAxLCAyMTksIDIxNiwgNjAsIDMxLCAxNiwgMjExLCAKKyAgICA3MSwgNjAsIDMxLCAxNiwgMjUwLCAxMDksIDE4NSwgNjAsIDMxLCAxNiwgMjUwLCAxMDksIDIwNSwgMTcxLCA2MCwgMzEsIAorICAgIDE2LCAyNTAsIDEwOSwgMjM5LCA4LCA2MCwgMzEsIDE2LCAyNTAsIDEwOSwgMjQzLCAyMzMsIDYwLCAzMSwgMTYsIDI1MCwgCisgICAgMTA5LCAyMjksIDIwMSwgNjAsIDMxLCAxNiwgMjUwLCAxMDksIDIwMiwgMTcsIDYwLCAzMSwgMTYsIDI1MCwgMTA5LCAyMjIsIAorICAgIDEwMCwgNjAsIDMxLCAxNiwgMjI5LCAxNzcsIDIyMiwgMjI3LCAyMjQsIDIyNSwgNjAsIDMxLCAxNiwgMjI5LCAxNzgsIDIyMiwgCisgICAgMjI3LCAyMjQsIDIyNSwgNjAsIDMxLCAxNiwgMjI5LCAxNzcsIDIyMiwgMjI3LCAyMjksIDIyMCwgNjAsIDMxLCAxNiwgMjI5LCAKKyAgICAxNzgsIDIyMiwgMjI3LCAyMjksIDIyMCwgNjAsIDMxLCAxNiwgMjI5LCAzOSwgMjI5LCAyMjAsIDYwLCAzMSwgMTYsIDIzOCwgCisgICAgMjMsIDIyMiwgMjI3LCAyMjksIDIyMCwgMzEsIDE2LCAyMTIsIDEyMCwgMjQ4LCAyMjYsIDMxLCAxNiwgNTIsIDI0OCwgMjI2LCAKKyAgICAzMSwgMTYsIDQ2LCAyNDgsIDIyNiwgMzEsIDE2LCAyMTYsIDc0LCA0NiwgMjQ4LCAyMjYsIDMxLCAxNiwgMjQ0LCAxNDMsIAorICAgIDI0OCwgMjI2LCAzMSwgMTYsIDIxMiwgMjI4LCAyNDgsIDIyNiwgMzEsIDE2LCA0OSwgMjE2LCAxMDEsIDU0LCAzMSwgMTYsIAorICAgIDUwLCAyMTYsIDEwMSwgNTQsIDMxLCAxNiwgMjE2LCAxMDEsIDI0MywgODMsIDMxLCAxNiwgMjQ0LCAxODUsIDIxNCwgMTU3LCAKKyAgICAzMSwgMTYsIDI0NCwgMjEzLCAyNDcsIDQ1LCAzMSwgMTYsIDIxNCwgMTU3LCAzMSwgMTYsIDI0NSwgMjUwLCAzMSwgMTYsIAorICAgIDIxNiwgOTksIDI0MCwgMTUsIDMxLCAxNiwgMjE2LCA5OSwgMjQwLCAxNCwgMzEsIDE2LCAyMTYsIDk5LCAyNDAsIDEzLCAzMSwgCisgICAgMTYsIDI0MCwgMzYsIDMxLCAxNiwgMjQwLCAzNywgNTYsIDMxLCAxNiwgMjQ3LCAyMTYsIDgyLCAzMSwgMTYsIDI0NywgODIsIAorICAgIDMxLCAxNiwgMjQ3LCAyMjgsIDMxLCAxNiwgMTU1LCAzMSwgMTYsIDIyMCwgMjgsIDIxMSwgMTAyLCAzMSwgMTYsIDIwNywgCisgICAgMTMzLCAyMTEsIDEwMiwgMzEsIDE2LCAyMDksIDI5LCAyMTEsIDEwMiwgMzEsIDE2LCAyMzksIDE0NiwgMjExLCAxMDIsIDMxLCAKKyAgICAxNiwgMjM5LCAyMzIsIDIxMSwgMTAyLCAzMSwgMTYsIDIxMiwgODcsIDIxMSwgMTAyLCAzMSwgMTYsIDIxMiwgODUsIDIzOSwgCisgICAgMTI3LCAzMSwgMTYsIDIzOSwgMTQ0LCAyMzksIDEyNywgMzEsIDE2LCAyMzksIDc2LCAyNDYsIDMwLCAzMSwgMTYsIDIzOSwgCisgICAgNzYsIDI0NiwgMzEsIDIxOSwgMjE4LCAyNTEsIDAsIDMxLCAxNiwgMjM5LCA3NiwgMjQ2LCAzMSwgMjE5LCAyMTgsIDI0OCwgCisgICAgMjExLCAzMSwgMTYsIDI0NywgMTI2LCAyNDYsIDMwLCAzMSwgMTYsIDI0MCwgMTc1LCAyNDYsIDMwLCAzMSwgMTYsIDI0MCwgCisgICAgMTc1LCAyNDYsIDMxLCAyMTksIDIxOCwgMjUxLCAwLCAzMSwgMTYsIDI0MCwgMTc1LCAyNDYsIDMxLCAyMTksIDIxOCwgMjQ4LCAKKyAgICAyMTEsIDMxLCAxNiwgMjQyLCA0NywgMjQ2LCAyOSwgMzEsIDE2LCAyNDIsIDQ3LCAyNDYsIDI4LCAzMSwgMTYsIDIyMywgCisgICAgMjI2LCAyMjUsIDE5LCAyMTYsIDg1LCAzMSwgMTYsIDUyLCAyMTMsIDU2LCAzMSwgMTYsIDUyLCAyMzksIDIxNiwgMzEsIDE2LCAKKyAgICAyMzksIDIxNywgMjA2LCAyMjQsIDMxLCAxNiwgMjM5LCAyMTcsIDI0MiwgNzAsIDMxLCAxNiwgMjIzLCA2NiwgMjA2LCAyMjQsIAorICAgIDMxLCAxNiwgMjIzLCA2NiwgMjQyLCA3MCwgMzEsIDE2LCAyMTMsIDU3LCAyMDYsIDIyNCwgMzEsIDE2LCAyMTMsIDU3LCAKKyAgICAyNDIsIDcwLCAzMSwgMTYsIDIxNywgNTYsIDE0MywgMjEzLCA1NiwgMzEsIDE2LCAyMTcsIDU2LCAxNDMsIDIzOSwgMjE2LCAKKyAgICAzMSwgMTYsIDI0NSwgMjMwLCAyMDgsIDIyMSwgMzEsIDE2LCAyNDUsIDc4LCAyMDgsIDIyMSwgMzEsIDE2LCAyMTksIDIxOCwgCisgICAgMjUxLCAwLCAzMSwgMTYsIDIxOSwgMjE4LCAyNDgsIDIxMSwgMzEsIDE2LCAyMTcsIDM3LCAyNTEsIDAsIDMxLCAxNiwgMjE3LCAKKyAgICAzNywgMjQ4LCAyMTEsIDMxLCAxNiwgMjIzLCAyMjksIDIxNiwgODUsIDMxLCAxNiwgMjA0LCAzMSwgMjE2LCA4NSwgMzEsIAorICAgIDE2LCAxNjIsIDIxNiwgODUsIDMxLCAxNiwgMjE3LCA1NiwgMjE2LCA4NSwgMzEsIDE2LCAyNDEsIDEzOSwgMjE2LCA4NSwgCisgICAgMzEsIDE2LCAyMTIsIDgxLCAyMTYsIDg1LCAzMSwgMTYsIDIwOSwgNTEsIDIxNiwgODUsIDMxLCAxNiwgMjEyLCA3MywgMjE2LCAKKyAgICA4NSwgMzEsIDE2LCAxMTgsIDIzNiwgMTIsIDIwNywgMTQ5LCAyMTYsIDg1LCAzMSwgMTYsIDIwMywgMTk3LCAyMjEsIDE1NiwgCisgICAgMzEsIDE2LCA5MSwgMjIxLCAxNTYsIDMxLCAxNiwgMjQ2LCA2MiwgMjAzLCAxOTcsIDIyMSwgMTU2LCAzMSwgMTYsIDUxLCAKKyAgICAyMjEsIDE1NywgMjA0LCAzMywgMzEsIDE2LCA1MSwgMjIxLCAxNTcsIDI0OCwgNDMsIDMxLCAxNiwgMjA4LCA4NiwgMjIxLCAKKyAgICAxNTcsIDExMiwgMjA0LCAzMywgMzEsIDE2LCAyMDgsIDg2LCAyMjEsIDE1NywgMTEyLCAyNDgsIDQzLCAzMSwgMTYsIDIwOCwgCisgICAgODYsIDIyMSwgMTU3LCA0OSwgMjA0LCAzMywgMzEsIDE2LCAyMDgsIDg2LCAyMjEsIDE1NywgNDksIDI0OCwgNDMsIDMxLCAKKyAgICAxNiwgMjA4LCA4NiwgMjIxLCAxNTcsIDUwLCAyMDQsIDMzLCAzMSwgMTYsIDIwOCwgODYsIDIyMSwgMTU3LCA1MCwgMjQ4LCAKKyAgICA0MywgMzEsIDE2LCAyMDgsIDg2LCAyMjEsIDE1NywgMTIxLCAyMDQsIDMzLCAzMSwgMTYsIDIwOCwgODYsIDIyMSwgMTU3LCAKKyAgICAxMjEsIDI0OCwgNDMsIDMxLCAxNiwgMjA4LCA4NiwgMjIxLCAxNTcsIDExMiwgNTAsIDIwNCwgMzMsIDMxLCAxNiwgMjA4LCAKKyAgICA4NiwgMjIxLCAxNTcsIDExMiwgNTAsIDI0OCwgNDMsIDMxLCAxNiwgMjI0LCAzMCwgMjIxLCAxNTcsIDIwNCwgMzMsIDMxLCAKKyAgICAxNiwgMjI0LCAzMCwgMjIxLCAxNTcsIDI0OCwgNDMsIDMxLCAxNiwgMjA4LCA4MywgMjIxLCAxNTcsIDEyMSwgMjA0LCAzMywgCisgICAgMzEsIDE2LCAyMDgsIDgzLCAyMjEsIDE1NywgMTIxLCAyNDgsIDQzLCAzMSwgMTYsIDIxOSwgNzcsIDIyMSwgMTU2LCAzMSwgCisgICAgMTYsIDIwNSwgMTgzLCAyMjEsIDE1NiwgMzEsIDE2LCAyMjEsIDE1NywgMjQ4LCA0MywgMzEsIDE2LCAyMjEsIDQ5LCAyMjEsIAorICAgIDE1NiwgMzEsIDE2LCAyNDYsIDEsIDIyMSwgMTU3LCAyMDQsIDMzLCAzMSwgMTYsIDI0NiwgMSwgMjIxLCAxNTcsIDI0OCwgCisgICAgNDMsIDMxLCAxNiwgMjQ3LCAyMTQsIDMxLCAxNiwgMjA0LCAzMSwgMjIxLCAxNjAsIDMxLCAxNiwgMTYyLCAyMjEsIDE2MCwgCisgICAgMzEsIDE2LCAyMTcsIDU2LCAyMjEsIDE2MCwgMzEsIDE2LCAyNDEsIDEzOSwgMjIxLCAxNjAsIDMxLCAxNiwgMjEyLCA4MSwgCisgICAgMjIxLCAxNjAsIDMxLCAxNiwgMjA5LCA1MSwgMjIxLCAxNjAsIDMxLCAxNiwgMjEyLCA3MywgMjIxLCAxNjAsIDMxLCAxNiwgCisgICAgMTE4LCAyMzYsIDEyLCAyMDcsIDE0OSwgMjIxLCAxNjAsIDMxLCAxNiwgMzksIDIxMSwgNzcsIDMxLCAxNiwgMzksIDIxMSwgCisgICAgMTg0LCAyMTEsIDc3LCAzMSwgMTYsIDM5LCAyMDgsIDk0LCAzMSwgMTYsIDM5LCAyMDgsIDkzLCAzMSwgMTYsIDM5LCAyMDgsIAorICAgIDkyLCAzMSwgMTYsIDI0MCwgMCwgMjA4LCA5NCwgMzEsIDE2LCAyNDAsIDAsIDIwOCwgOTMsIDMxLCAxNiwgMjQwLCAwLCAKKyAgICAyMDgsIDkyLCAzMSwgMTYsIDM5LCAyNTAsIDMxLCAyNDMsIDg1LCAzMSwgMTYsIDM5LCAyMzksIDIyNCwgMzEsIDE2LCAzOSwgCisgICAgMjM5LCAyMjMsIDMxLCAxNiwgMzksIDIzOSwgMjIyLCAzMSwgMTYsIDM5LCAyMzksIDIyMSwgMzEsIDE2LCAzOSwgMjM5LCAKKyAgICAyMjAsIDMxLCAxNiwgMjQ4LCAxNDIsIDI0OCwgMTU5LCAzMSwgMTYsIDI0MSwgODQsIDI0OCwgMTU5LCAzMSwgMTYsIDI0OCwgCisgICAgMTQyLCAyMDgsIDI1MCwgMzEsIDE2LCAyNDEsIDg0LCAyMDgsIDI1MCwgMzEsIDE2LCAyNDgsIDE0MiwgMjEyLCAzNywgMzEsIAorICAgIDE2LCAyNDEsIDg0LCAyMTIsIDM3LCAzMSwgMTYsIDI0OCwgMTQyLCAyMTgsIDE3NCwgMzEsIDE2LCAyNDEsIDg0LCAyMTgsIAorICAgIDE3NCwgMzEsIDE2LCAzOSwgMjUxLCAxMzgsIDMxLCAxNiwgMzksIDIxMSwgMTA1LCAzMSwgMTYsIDM5LCAyMDksIDE0MCwgCisgICAgMzEsIDE2LCAzOSwgMjExLCAxMDYsIDMxLCAxNiwgMzksIDIyNSwgOTYsIDMxLCAxNiwgMzksIDIyNSwgOTUsIDMxLCAxNiwgCisgICAgMzksIDI1MSwgMTM3LCAzMSwgMTYsIDM5LCAyMjcsIDIsIDMxLCAxNiwgMjUwLCAxMDAsIDIwNiwgMjI0LCAzMSwgMTYsIAorICAgIDI1MCwgMTAwLCAyNDIsIDcwLCAzMSwgMTYsIDM5LCAyNDMsIDEwMCwgMzEsIDE2LCAzOSwgMjE1LCAyNDksIDMxLCAxNiwgCisgICAgMzksIDIzOSwgMjA2LCAzMSwgMTYsIDM5LCAyMTIsIDMzLCAzMSwgMTYsIDM5LCAyNDgsIDEyMCwgMzEsIDE2LCAzOSwgNTIsIAorICAgIDIwOCwgMTUwLCAzMSwgMTYsIDM5LCAyMDgsIDcwLCAyMDgsIDE1MCwgMzEsIDE2LCAyMTUsIDI1NCwgMzEsIDE2LCAyMTEsIAorICAgIDAsIDMxLCAxNiwgMjAyLCAxNTksIDMxLCAxNiwgMjE4LCAxNjYsIDMxLCAxNiwgMjI0LCAyMDYsIDMxLCAxNiwgMjM5LCAKKyAgICAxNTUsIDMxLCAxNiwgMjQ1LCAxNDAsIDMxLCAxNiwgMjQ0LCA2MiwgMzEsIDE2LCAyMzgsIDE0LCAyMjEsIDE2MSwgMjEyLCAKKyAgICA1NywgMzEsIDE2LCAyMzgsIDE0LCAyMjEsIDE2MSwgMjIxLCAxOTIsIDIxMiwgNTcsIDMxLCAxNiwgMjA4LCAxMjAsIDMxLCAKKyAgICAxNiwgMjA3LCAxNzUsIDMxLCAxNiwgMjMwLCAyMzksIDIwNywgMTc1LCAzMSwgMTYsIDIwNywgMTc2LCAyMTIsIDU3LCAzMSwgCisgICAgMTYsIDIwNywgMTc2LCAyMDYsIDIyNCwgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAzMSwgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAKKyAgICAyOCwgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAyNywgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAyNiwgMzEsIDE2LCAyMTksIAorICAgIDIzNCwgMjExLCAyNSwgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAyNCwgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAyMywgMzEsIAorICAgIDE2LCAyMTksIDIzNCwgMjExLCAyMiwgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAyMSwgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAKKyAgICAzMCwgMzEsIDE2LCAyMTksIDIzNCwgMjExLCAyOSwgMzEsIDE2LCAyMzcsIDc1LCAzMSwgMTYsIDIyMiwgMjM4LCAzMSwgMTYsIAorICAgIDI0MSwgODQsIDc2LCAyMTEsIDY3LCAzMSwgMTYsIDI0NCwgNTUsIDIxMiwgNTcsIDMxLCAxNiwgMzksIDEyMSwgMjQ3LCAKKyAgICAyNDAsIDMxLCAxNiwgMzksIDExMiwgMjQ3LCAyNDAsIDMxLCAxNiwgMzksIDIzNywgODgsIDMxLCAxNiwgMzksIDIxMiwgMjMsIAorICAgIDIxOCwgOTksIDMxLCAxNiwgMjE5LCAyOCwgODIsIDMxLCAxNiwgMjE5LCAyOCwgMTEyLCA4MiwgMzEsIDE2LCAxNjIsIDIxOSwgCisgICAgMjgsIDgyLCAzMSwgMTYsIDIzOCwgNDcsIDIwNiwgMjI0LCAzMSwgMTYsIDIzOCwgNDcsIDI0MiwgNzAsIDMxLCAxNiwgMywgCisgICAgMjM5LCAyNTUsIDMxLCAxNiwgMjQ0LCAxNjgsIDMxLCAxNiwgMjQ0LCAxNjksIDI1MSwgMTQsIDMxLCAxNiwgMjI1LCA2NSwgCisgICAgMzEsIDE2LCAyMjcsIDIwLCAzMSwgMTYsIDI0NywgMjExLCAzMSwgMTYsIDIxMywgMTQ3LCAyMDQsIDMzLCAzMSwgMTYsIAorICAgIDIxMywgMTQ3LCAyNDgsIDQzLCAzMSwgMTYsIDIyNCwgMTA2LCAzMSwgMTYsIDIyNCwgMTA3LCAyNDgsIDQzLCAzMSwgMTYsIAorICAgIDIxMywgMTQxLCAyMDQsIDMzLCAzMSwgMTYsIDIxMywgMTQxLCAyNDgsIDQzLCAzMSwgMTYsIDIzOSwgOTMsIDIwNCwgMzMsIAorICAgIDMxLCAxNiwgMjM5LCA5MywgMjQ4LCA0MywgMzEsIDE2LCAyMjcsIDIxLCAyMTgsIDI0NCwgMjE2LCA4NSwgMzEsIDE2LCAKKyAgICAyMjcsIDIxLCAyMzEsIDU0LCAyMTYsIDg1LCAzMSwgMTYsIDI0NywgMjEyLCAyMTYsIDg1LCAzMSwgMTYsIDIxMywgMTQ3LCAKKyAgICAyMTYsIDg1LCAzMSwgMTYsIDIyNCwgMTA3LCAyMTYsIDg1LCAzMSwgMTYsIDIxMywgMTQxLCAyMTYsIDg1LCAzMSwgMTYsIAorICAgIDIwOSwgMTU0LCAyMTgsIDI0MiwgMjQ1LCAxMDQsIDIxNywgMjE2LCAyMTgsIDI0MywgMzEsIDE2LCAyMDksIDE1NCwgMjE4LCAKKyAgICAyNDIsIDI0NSwgMTA0LCAyMTcsIDIxNiwgMjMxLCA1MywgMzEsIDE2LCAyMDksIDE1NCwgMjE4LCAyNDIsIDI0NSwgMTA0LCAKKyAgICAyMTcsIDIxNiwgMjE4LCAyNDQsIDI0MywgMTgxLCAzMSwgMTYsIDIwOSwgMTU0LCAyMzEsIDUyLCAyNDUsIDEwNCwgMjE3LCAKKyAgICAyMTYsIDIxOCwgMjQzLCAzMSwgMTYsIDIwOSwgMTU0LCAyMzEsIDUyLCAyNDUsIDEwNCwgMjE3LCAyMTYsIDIzMSwgNTMsIAorICAgIDMxLCAxNiwgMjA5LCAxNTQsIDIzMSwgNTIsIDI0NSwgMTA0LCAyMTcsIDIxNiwgMjMxLCA1NCwgMjQzLCAxODEsIDMxLCAxNiwgCisgICAgMjA5LCAxNTQsIDIzMSwgNTIsIDI0NSwgMTA0LCAyMTcsIDIxNiwgMjMxLCA1NCwgMjQzLCAxODAsIDMxLCAxNiwgMjA5LCAKKyAgICAxNTQsIDIzMSwgNTIsIDI0NSwgMTA0LCAyMTcsIDIxNiwgMjMxLCA1NCwgMjQzLCAxNzksIDMxLCAxNiwgMjQ1LCAxMzMsIAorICAgIDMxLCAxNiwgMjM3LCAyNDMsIDI0NywgMTI2LCAyNDYsIDMwLCAzMSwgMTYsIDIzNywgMjQzLCAyNDAsIDE3NSwgMjQ2LCAzMCwgCisgICAgMzEsIDE2LCA1MSwgMjQ5LCAyNTUsIDMxLCAxNiwgMjA1LCAyMDMsIDMxLCAxNiwgMjE4LCA2NiwgMzEsIDE2LCAyNDYsIDIxLCAKKyAgICAzMSwgMTYsIDIxNCwgMjAwLCAzMSwgMTYsIDI0NiwgMjUsIDMxLCAxNiwgMjA4LCAxMzgsIDMxLCAxNiwgMjE4LCAzNiwgMzEsIAorICAgIDE2LCAyMTgsIDM3LCAyMzksIDIwOSwgMzEsIDE2LCAyMTQsIDIwMSwgMjM5LCAyMDksIDMxLCAxNiwgMjA4LCAxMzksIDIxNiwgCisgICAgODIsIDMxLCAxNiwgMjE4LCAyMjUsIDIxMCwgMjQ3LCAzMSwgMTYsIDIyOSwgOTAsIDI0NywgMTI2LCAyNDYsIDMwLCAzMSwgCisgICAgMTYsIDIyOSwgOTAsIDI0MSwgODQsIDc2LCAyMTgsIDE1OSwgMzEsIDE2LCAyMjksIDkwLCA0NiwgMjIxLCAxNjAsIDMxLCAKKyAgICAxNiwgMjI5LCA5MCwgMjE2LCAxNTAsIDgyLCAzMSwgMTYsIDIyOSwgOTAsIDIwNCwgMzEsIDIyMSwgMTYwLCAzMSwgMTYsIAorICAgIDIyOSwgOTAsIDE2MiwgMjIxLCAxNjAsIDMxLCAxNiwgMjI5LCA5MCwgMjE3LCA1NiwgMjIxLCAxNjEsIDIxMSwgNzgsIDI0MiwgCisgICAgNzAsIDMxLCAxNiwgMjI5LCA5MCwgMjE3LCA1NiwgMjIxLCAxNjEsIDIxMSwgNzgsIDIwNiwgMjI0LCAzMSwgMTYsIDIyOSwgCisgICAgOTAsIDI0MSwgMTM5LCAyMjEsIDE2MSwgMjExLCA3OCwgMjQyLCA3MCwgMzEsIDE2LCAyMjksIDkwLCAyNDEsIDEzOSwgMjIxLCAKKyAgICAxNjEsIDIxMSwgNzgsIDIwNiwgMjI0LCAzMSwgMTYsIDIyOSwgOTAsIDIzOSwgMjE3LCA1NCwgMzAsIDIwNSwgMTg4LCAyMjEsIAorICAgIDE2NCwgMjEwLCAxNDgsIDMwLCAyMDUsIDE4OCwgMjIxLCAxNjQsIDIxMCwgMTM3LCAzMCwgMjA1LCAxODgsIDIyMSwgMTY0LCAKKyAgICAyMTAsIDEyNywgMzAsIDIwNSwgMTg4LCAyMjEsIDE2NCwgMjEwLCAxMjAsIDMwLCAyMDUsIDE4OCwgMjIxLCAxNjQsIDIxMCwgCisgICAgMTEyLCAzMCwgMjA1LCAxODgsIDIyMSwgMTY0LCAyMTAsIDEwNiwgMzAsIDIwNSwgMTg4LCAyMjEsIDE2NCwgMjEwLCAxMDUsIAorICAgIDMwLCAyMDUsIDE4OCwgMjIxLCAxNjQsIDIxMCwgMTA0LCAzMCwgMjA1LCAxODgsIDIyMSwgMTY0LCAyMTAsIDEwMywgMzAsIAorICAgIDIwNSwgMTg4LCAyMjEsIDE2NCwgMjEwLCAxNDcsIDMwLCAyMDUsIDE4OCwgMjIxLCAxNjQsIDIxMCwgMTQ2LCAzMCwgMjA1LCAKKyAgICAxODgsIDIyMSwgMTY0LCAyMTAsIDE0NSwgMzAsIDIwNSwgMTg4LCAyMjEsIDE2NCwgMjEwLCAxNDQsIDMwLCAyMDUsIDE4OCwgCisgICAgMjIxLCAxNjQsIDIxMCwgMTQzLCAzMCwgMjA1LCAxODgsIDIyMSwgMTY0LCAyMTAsIDE0MiwgMzAsIDIwNSwgMTg4LCAyMjEsIAorICAgIDE2NCwgMjEwLCAxNDEsIDMwLCAyMDUsIDE4OCwgMjIxLCAxNjQsIDIxMCwgMTQwLCAzMCwgMjA1LCAxODgsIDIyMSwgMTY0LCAKKyAgICAyMTAsIDEzOSwgMzAsIDIwNSwgMTg4LCAyMjEsIDE2NCwgMjEwLCAxMzgsIDMwLCAyMDUsIDE4OCwgMjIxLCAxNjQsIDIxMCwgCisgICAgMTM2LCAzMCwgMjA1LCAxODgsIDIyMSwgMTY0LCAyMTAsIDEzNSwgMzAsIDIwNSwgMTg4LCAyMjEsIDE2NCwgMjEwLCAxMzQsIAorICAgIDMwLCAyMDUsIDE4OCwgMjIxLCAxNjQsIDIxMCwgMTMzLCAzMCwgMjA1LCAxODgsIDIyMSwgMTY0LCAyMTAsIDEzMiwgMzAsIAorICAgIDIwNSwgMTg4LCAyMjEsIDE2NCwgMjEwLCAxMTEsIDMwLCAyMDUsIDE4OCwgMjIxLCAxNjQsIDIxMCwgMTEwLCAzMCwgMjA1LCAKKyAgICAxODgsIDIyMSwgMTY0LCAyMTAsIDEwOSwgMzAsIDIwNSwgMTg4LCAyMjEsIDE2NCwgMjEwLCAxMDgsIDMwLCAyMDUsIDE4OCwgCisgICAgMjIxLCAxNjQsIDIxMCwgMTA3LCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxNDgsIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAKKyAgICAyMTAsIDEzNywgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTIwLCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxMTIsIAorICAgIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIDEwNSwgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTA0LCAzMCwgMjMxLCAKKyAgICA1LCAyMjEsIDE2NCwgMjEwLCAxNDYsIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIDE0NSwgMzAsIDIzMSwgNSwgMjIxLCAKKyAgICAxNjQsIDIxMCwgMTQ0LCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxNDMsIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIAorICAgIDE0MCwgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTM5LCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxMzgsIDMwLCAKKyAgICAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIDEzMywgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTMyLCAzMCwgMjMxLCA1LCAKKyAgICAyMjEsIDE2NCwgMjEwLCAxMzEsIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIDEzMCwgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIAorICAgIDIxMCwgMTI5LCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxMjgsIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIDEyNiwgCisgICAgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTI1LCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxMjQsIDMwLCAyMzEsIAorICAgIDUsIDIyMSwgMTY0LCAyMTAsIDEyMywgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTIyLCAzMCwgMjMxLCA1LCAyMjEsIAorICAgIDE2NCwgMjEwLCAxMjEsIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIDExOSwgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgCisgICAgMTE4LCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxMTcsIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIDExNiwgMzAsIAorICAgIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTE1LCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxMTQsIDMwLCAyMzEsIDUsIAorICAgIDIyMSwgMTY0LCAyMTAsIDExMywgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTExLCAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgCisgICAgMjEwLCAxMTAsIDMwLCAyMzEsIDUsIDIyMSwgMTY0LCAyMTAsIDEwOSwgMzAsIDIzMSwgNSwgMjIxLCAxNjQsIDIxMCwgMTA4LCAKKyAgICAzMCwgMjMxLCA1LCAyMjEsIDE2NCwgMjEwLCAxMDcsIDM5LCAzMCwgMzEsIDIwOCwgNjYsIDM5LCAzMCwgMzEsIDIwOSwgCisgICAgMTI0LCAzOSwgMzAsIDMxLCAyMTgsIDI1MywgMzAsIDMxLCAyMjcsIDIwNCwgMjI0LCA0NSwgMzUsIDI0MSwgMTc5LCAyNDMsIAorICAgIDE5NSwgMzUsIDIzNywgNTAsIDI0MSwgMTc5LCAyNDMsIDE5NSwgMzUsIDIzNiwgMTYsIDI0MSwgMTc5LCAyNDMsIDE5NSwgCisgICAgMzUsIDI0MSwgMTc4LCAyMzcsIDUxLCAyNDMsIDE5NSwgMzUsIDI0MSwgMTc4LCAyMzYsIDE1LCAyNDMsIDE5NSwgMzUsIAorICAgIDI0MSwgMTc5LCAyMDksIDEyNiwgMzUsIDI0NiwgMjE3LCAyMDksIDEyNiwgMzUsIDIzOSwgMTAyLCAyNDYsIDYxLCAyMDksIAorICAgIDEyNiwgMzUsIDIyNCwgOTgsIDIwOSwgMTI2LCAzNSwgMjQ4LCAyMjEsIDIwOSwgMTI2LCAzNSwgMjI5LCAxOTUsIDIxMiwgCisgICAgMzYsIDIwOSwgMTI2LCAzNSwgMjQ1LCAxODUsIDIwOSwgMTI2LCAzNSwgMjUwLCA3NywgMjA5LCAxMjYsIDM1LCAyMTksIAorICAgIDI1MCwgMjA5LCAxMjYsIDM1LCAyNDcsIDIyMSwgMjE5LCAyMTEsIDIwOSwgMTI2LCAzNSwgMjQ0LCA1NywgMjE5LCAyNDUsIAorICAgIDI0MywgMTQ4LCAyMDksIDEyNiwgMzUsIDI0MywgMTQ1LCAyMDksIDEyNiwgMzUsIDIwMiwgMjI1LCAyMDksIDEyNiwgMzUsIAorICAgIDIzMSwgNDAsIDIwOSwgMTI2LCAzNSwgMjE5LCA3LCAyMDksIDEyNiwgMzUsIDIxNiwgMTU3LCAyMDksIDEyNiwgMzUsIDI0NSwgCisgICAgMTk3LCAyMDksIDEyNiwgMzUsIDIzNiwgMTI3LCAyNDksIDI1LCAyMDksIDEyNiwgMzUsIDIwNCwgMTAzLCAyMDksIDEyNiwgCisgICAgMzUsIDIzOSwgMTgxLCAyMDksIDEyNiwgMzUsIDI1MSwgMTEyLCAyMDksIDEyNiwgMzUsIDIxNiwgMTE0LCAyMDksIDEyNiwgCisgICAgMzUsIDIxNiwgODksIDIwOSwgMTI2LCAzNSwgMjQxLCAxNzcsIDIwOSwgMTI2LCAzNSwgMjMwLCA4NSwgMjA5LCAxMjYsIDM1LCAKKyAgICAyNDUsIDE5MiwgMjA5LCAxMjYsIDM1LCAyNDEsIDgzLCAyMDksIDEyNiwgMzUsIDI0MiwgMTUsIDIwOSwgMTI2LCAzNSwgCisgICAgMjQ2LCAxODYsIDIwOSwgMTI2LCAzNSwgMjQ0LCA2NywgMjA5LCAxMjYsIDM1LCAyNiwgMjE2LCA4OCwgMjA5LCAxMjYsIDM1LCAKKyAgICAyMTksIDE2MCwgMjA5LCAxMjYsIDM1LCAyMjcsIDIwOCwgMjA5LCAxMjYsIDM1LCAyNDYsIDE0LCAyMDksIDEyNiwgMzUsIAorICAgIDIyOSwgODAsIDIwOSwgMTI2LCAzNSwgMjM4LCAyMTQsIDIwOSwgMTI2LCAzNSwgMjExLCA0MywgMjA5LCAxMjYsIDM1LCAKKyAgICAyMTcsIDE2OCwgMjA5LCAxMjYsIDM1LCAyMzksIDEwMSwgMjA5LCAxMjYsIDM1LCAyMTYsIDkwLCAyMDksIDEyNiwgMzUsIAorICAgIDIyNywgMjQ3LCAyMTksIDI0NSwgMjI0LCA3OCwgMjA5LCAxMjYsIDM1LCAyMTYsIDg2LCAyMDksIDEyNiwgMzUsIDIzOCwgCisgICAgMzMsIDIwOCwgMTczLCAyMjUsIDMsIDIwOSwgMTI2LCAzNSwgMjQxLCA4NSwgMjA5LCAxMjYsIDM1LCAyMTEsIDU2LCAyMDksIAorICAgIDEyNiwgMzUsIDIzNywgMjQ1LCAyMDksIDEyNiwgMzUsIDI0MSwgNzYsIDIwOSwgMTI2LCAzNSwgMjE5LCA1MCwgMjA5LCAKKyAgICAxMjYsIDM1LCAyMTUsIDI0MiwgMjA5LCAxMjYsIDM1LCAyMzksIDIwNywgMjA5LCAxMjYsIDM1LCAyMDYsIDY0LCAyMTksIAorICAgIDI0NSwgMjA0LCA4NCwgMjA5LCAxMjYsIDM1LCAyNDUsIDIwMiwgMjA5LCAxMjYsIDM1LCAyMjUsIDE4LCAyMDksIDEyNiwgCisgICAgMzUsIDI0MCwgMjQ1LCAyMDksIDEyNiwgMzUsIDIwNiwgMjM0LCAyMDksIDEyNiwgMzUsIDI0MywgMTgyLCAyMDksIDEyNiwgCisgICAgMzUsIDI0NiwgMTYsIDIyNCwgNywgMjA5LCAxMjYsIDM1LCAyMzcsIDIyMiwgMjA5LCAxMjYsIDM1LCAyMzgsIDIxNSwgMjMxLCAKKyAgICA0OSwgMjA5LCAxMjYsIDM1LCAyMjUsIDczLCAyMDksIDEyNiwgMzUsIDI1MSwgMTMzLCAyMDksIDEyNiwgMzUsIDI0MSwgCisgICAgMTAxLCAyMDksIDEyNiwgMzUsIDI0MiwgNzQsIDIwOSwgMTI2LCAzNSwgMjA0LCA4MiwgMjA5LCAxMjYsIDM1LCAyMTIsIAorICAgIDExNSwgMjA5LCAxMjYsIDM1LCAyMzEsIDE0LCAyMDksIDEyNiwgMzUsIDI0NCwgMjUsIDIwOSwgMTI2LCAzNSwgMjQ0LCAKKyAgICAxNDgsIDIwOSwgMTI2LCAzNSwgMjQzLCAxNzgsIDIwOSwgMTI2LCAzNSwgMjQwLCAyMDksIDIwOSwgMTI2LCAzNSwgMjEzLCAKKyAgICAxMDQsIDIwOSwgMTI2LCAzNSwgMjExLCA2MCwgMjA5LCAxMjYsIDM1LCAyMzcsIDkwLCAyMDksIDEyNiwgMzUsIDI0NSwgCisgICAgMjI2LCAyMDksIDEyNiwgMzUsIDI0NiwgMTEsIDIwOSwgMTI2LCAzNSwgMjQwLCA4NywgMjA5LCAxMjYsIDM1LCAyNTEsIDc2LCAKKyAgICAyMDksIDEyNiwgMzUsIDI0NSwgMjI1LCAyMDksIDEyNiwgMzUsIDIyMCwgMzIsIDIwOSwgOTMsIDIwNiwgNDEsIDIwOSwgCisgICAgMTI2LCAzNSwgMjQzLCAyMDQsIDIwOSwgMTI2LCAzNSwgMjI4LCAxMDEsIDIwOSwgMTI2LCAzNSwgMjM5LCAxNTAsIDI0NSwgCisgICAgMTUzLCAyMTUsIDIxNywgMjA2LCAyMzYsIDE3LCAxMDUsIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA2LCAyMzYsIDE3LCAxMDgsIAorICAgIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA2LCAyMzYsIDE3LCAxNDcsIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA2LCAyMzYsIDE3LCAKKyAgICAxNDksIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA2LCAyMzYsIDE3LCAxNzAsIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA2LCAyMzYsIAorICAgIDE3LCAxOTUsIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA2LCAyMzYsIDE3LCAyMTMsIDExMSwgMjQ1LCAxNTMsIDIxNSwgMjE3LCAKKyAgICAyMDYsIDIzNiwgMTcsIDE5OSwgMjQ1LCAxNTMsIDIxNSwgMjE3LCAyMDYsIDIzNiwgMTcsIDIyMiwgNjMsIDI0NSwgMTUzLCAKKyAgICAyMTUsIDIxNywgMjA5LCAxNDgsIDE3LCAxMDUsIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA5LCAxNDgsIDE3LCAxMDgsIDI0NSwgCisgICAgMTUzLCAyMTUsIDIxNywgMjA5LCAxNDgsIDE3LCAxNDcsIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA5LCAxNDgsIDE3LCAxNDksIAorICAgIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA5LCAxNDgsIDE3LCAxNzAsIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA5LCAxNDgsIDE3LCAKKyAgICAxOTUsIDI0NSwgMTUzLCAyMTUsIDIxNywgMjA5LCAxNDgsIDE3LCAyMTMsIDExMSwgMjQ1LCAxNTMsIDIxNSwgMjE3LCAyMDksIAorICAgIDE0OCwgMTcsIDE5OSwgMjQ1LCAxNTMsIDIxNSwgMjE3LCAyMDksIDE0OCwgMTcsIDIyMiwgNjMsIDEzLCAyNiwgNiwgNjMsIAorICAgIDEzLCAyNiwgNiwgMjQ5LCAyNTUsIDEzLCAyNiwgNiwgMjQ3LCAxMjUsIDEzLCAyNiwgNiwgMjQ1LCA1MSwgMTMsIDI2LCA2LCAKKyAgICA3NCwgMTMsIDI2LCA2LCAyNDAsIDE3NCwgMTMsIDI2LCA2LCAyMzksIDc1LCAxMywgMjYsIDYsIDIzNywgMTcxLCAxMywgMjYsIAorICAgIDYsIDc1LCAxMywgMjYsIDYsIDIzMCwgMTg0LCAxMywgMjYsIDYsIDIzMCwgNTQsIDEzLCAyNiwgNiwgMTU5LCAxMywgMjYsIAorICAgIDYsIDIyNiwgMTg1LCAxMywgMjYsIDYsIDIyMywgMTYzLCAxMywgMjYsIDYsIDc4LCAxMywgMjYsIDYsIDIxOSwgMTg0LCAxMywgCisgICAgMjYsIDYsIDIxNywgMTM0LCAxMywgMjYsIDYsIDE0NiwgMTMsIDI2LCA2LCAxOTQsIDEzLCAyNiwgNiwgMjEwLCA2OSwgMTMsIAorICAgIDI2LCA2LCA2OCwgMTMsIDI2LCA2LCAyMDYsIDE2NCwgMTMsIDI2LCA2LCAyMDQsIDE0NCwgMTMsIDI2LCA2LCAyMDMsIDE5NiwgCisgICAgMTMsIDI2LCA2LCAyMDMsIDEyNCwgMTMsIDI2LCA2LCAyMDIsIDE1OSwgMTMsIDI2LCA1LCA2MywgMTMsIDI2LCA1LCAyNDksIAorICAgIDI1NSwgMTMsIDI2LCA1LCAyNDcsIDEyNSwgMTMsIDI2LCA1LCAyNDUsIDUxLCAxMywgMjYsIDUsIDc0LCAxMywgMjYsIDUsIAorICAgIDI0MCwgMTc0LCAxMywgMjYsIDUsIDIzOSwgNzUsIDEzLCAyNiwgNSwgMjM3LCAxNzEsIDEzLCAyNiwgNSwgNzUsIDEzLCAyNiwgCisgICAgNSwgMjMwLCAxODQsIDEzLCAyNiwgNSwgMjMwLCA1NCwgMTMsIDI2LCA1LCAxNTksIDEzLCAyNiwgNSwgMjI2LCAxODUsIDEzLCAKKyAgICAyNiwgNSwgMjIzLCAxNjMsIDEzLCAyNiwgNSwgNzgsIDEzLCAyNiwgNSwgMjE5LCAxODQsIDEzLCAyNiwgNSwgMjE3LCAxMzQsIAorICAgIDEzLCAyNiwgNSwgMTQ2LCAxMywgMjYsIDUsIDE5NCwgMTMsIDI2LCA1LCAyMTAsIDY5LCAxMywgMjYsIDUsIDY4LCAxMywgCisgICAgMjYsIDUsIDIwNiwgMTY0LCAxMywgMjYsIDUsIDIwNCwgMTQ0LCAxMywgMjYsIDUsIDIwMywgMTk2LCAxMywgMjYsIDUsIAorICAgIDIwMywgMTI0LCAxMywgMjYsIDUsIDIwMiwgMTU5LCAxMywgMzcsIDYsIDYzLCAxMywgMzcsIDYsIDI0OSwgMjU1LCAxMywgCisgICAgMzcsIDYsIDI0NywgMTI1LCAxMywgMzcsIDYsIDI0NSwgNTEsIDEzLCAzNywgNiwgNzQsIDEzLCAzNywgNiwgMjQwLCAxNzQsIAorICAgIDEzLCAzNywgNiwgMjM5LCA3NSwgMTMsIDM3LCA2LCAyMzcsIDE3MSwgMTMsIDM3LCA2LCA3NSwgMTMsIDM3LCA2LCAyMzAsIAorICAgIDE4NCwgMTMsIDM3LCA2LCAyMzAsIDU0LCAxMywgMzcsIDYsIDE1OSwgMTMsIDM3LCA2LCAyMjYsIDE4NSwgMTMsIDM3LCA2LCAKKyAgICAyMjMsIDE2MywgMTMsIDM3LCA2LCA3OCwgMTMsIDM3LCA2LCAyMTksIDE4NCwgMTMsIDM3LCA2LCAyMTcsIDEzNCwgMTMsIAorICAgIDM3LCA2LCAxNDYsIDEzLCAzNywgNiwgMTk0LCAxMywgMzcsIDYsIDIxMCwgNjksIDEzLCAzNywgNiwgNjgsIDEzLCAzNywgNiwgCisgICAgMjA2LCAxNjQsIDEzLCAzNywgNiwgMjA0LCAxNDQsIDEzLCAzNywgNiwgMjAzLCAxOTYsIDEzLCAzNywgNiwgMjAzLCAxMjQsIAorICAgIDEzLCAzNywgNiwgMjAyLCAxNTksIDEzLCAzNywgNSwgNjMsIDEzLCAzNywgNSwgMjQ5LCAyNTUsIDEzLCAzNywgNSwgMjQ3LCAKKyAgICAxMjUsIDEzLCAzNywgNSwgMjQ1LCA1MSwgMTMsIDM3LCA1LCA3NCwgMTMsIDM3LCA1LCAyNDAsIDE3NCwgMTMsIDM3LCA1LCAKKyAgICAyMzksIDc1LCAxMywgMzcsIDUsIDc1LCAxMywgMzcsIDUsIDIzMCwgMTg0LCAxMywgMzcsIDUsIDIzMCwgNTQsIDEzLCAzNywgCisgICAgNSwgMTU5LCAxMywgMzcsIDUsIDIyNiwgMTg1LCAxMywgMzcsIDUsIDIyMywgMTYzLCAxMywgMzcsIDUsIDc4LCAxMywgMzcsIAorICAgIDUsIDIxOSwgMTg0LCAxMywgMzcsIDUsIDIxNywgMTM0LCAxMywgMzcsIDUsIDE0NiwgMTMsIDM3LCA1LCAxOTQsIDEzLCAzNywgCisgICAgNSwgMjEwLCA2OSwgMTMsIDM3LCA1LCA2OCwgMTMsIDM3LCA1LCAyMDYsIDE2NCwgMTMsIDM3LCA1LCAyMDQsIDE0NCwgMTMsIAorICAgIDM3LCA1LCAyMDMsIDE5NiwgMTMsIDM3LCA1LCAyMDMsIDEyNCwgMTMsIDM3LCA1LCAyMDIsIDE1OSwgMTMsIDI2LCAzNywgNiwgCisgICAgNjMsIDEzLCAyNiwgMzcsIDYsIDI0OSwgMjU1LCAxMywgMjYsIDM3LCA2LCAyNDcsIDEyNSwgMTMsIDI2LCAzNywgNiwgMjQ1LCAKKyAgICA1MSwgMTMsIDI2LCAzNywgNiwgNzQsIDEzLCAyNiwgMzcsIDYsIDI0MCwgMTc0LCAxMywgMjYsIDM3LCA2LCAyMzksIDc1LCAKKyAgICAxMywgMjYsIDM3LCA2LCAyMzcsIDE3MSwgMTMsIDI2LCAzNywgNiwgNzUsIDEzLCAyNiwgMzcsIDYsIDIzMCwgMTg0LCAxMywgCisgICAgMjYsIDM3LCA2LCAyMzAsIDU0LCAxMywgMjYsIDM3LCA2LCAxNTksIDEzLCAyNiwgMzcsIDYsIDIyNiwgMTg1LCAxMywgMjYsIAorICAgIDM3LCA2LCAyMjMsIDE2MywgMTMsIDI2LCAzNywgNiwgNzgsIDEzLCAyNiwgMzcsIDYsIDIxOSwgMTg0LCAxMywgMjYsIDM3LCAKKyAgICA2LCAyMTcsIDEzNCwgMTMsIDI2LCAzNywgNiwgMTQ2LCAxMywgMjYsIDM3LCA2LCAxOTQsIDEzLCAyNiwgMzcsIDYsIDIxMCwgCisgICAgNjksIDEzLCAyNiwgMzcsIDYsIDY4LCAxMywgMjYsIDM3LCA2LCAyMDYsIDE2NCwgMTMsIDI2LCAzNywgNiwgMjA0LCAxNDQsIAorICAgIDEzLCAyNiwgMzcsIDYsIDIwMywgMTk2LCAxMywgMjYsIDM3LCA2LCAyMDMsIDEyNCwgMTMsIDI2LCAzNywgNiwgMjAyLCAKKyAgICAxNTksIDEzLCAyNiwgMzcsIDUsIDYzLCAxMywgMjYsIDM3LCA1LCAyNDksIDI1NSwgMTMsIDI2LCAzNywgNSwgMjQ3LCAxMjUsIAorICAgIDEzLCAyNiwgMzcsIDUsIDI0NSwgNTEsIDEzLCAyNiwgMzcsIDUsIDc0LCAxMywgMjYsIDM3LCA1LCAyNDAsIDE3NCwgMTMsIAorICAgIDI2LCAzNywgNSwgMjM5LCA3NSwgMTMsIDI2LCAzNywgNSwgMjM3LCAxNzEsIDEzLCAyNiwgMzcsIDUsIDc1LCAxMywgMjYsIAorICAgIDM3LCA1LCAyMzAsIDE4NCwgMTMsIDI2LCAzNywgNSwgMjMwLCA1NCwgMTMsIDI2LCAzNywgNSwgMTU5LCAxMywgMjYsIDM3LCAKKyAgICA1LCAyMjYsIDE4NSwgMTMsIDI2LCAzNywgNSwgMjIzLCAxNjMsIDEzLCAyNiwgMzcsIDUsIDc4LCAxMywgMjYsIDM3LCA1LCAKKyAgICAyMTksIDE4NCwgMTMsIDI2LCAzNywgNSwgMjE3LCAxMzQsIDEzLCAyNiwgMzcsIDUsIDE0NiwgMTMsIDI2LCAzNywgNSwgCisgICAgMTk0LCAxMywgMjYsIDM3LCA1LCAyMTAsIDY5LCAxMywgMjYsIDM3LCA1LCA2OCwgMTMsIDI2LCAzNywgNSwgMjA2LCAxNjQsIAorICAgIDEzLCAyNiwgMzcsIDUsIDIwNCwgMTQ0LCAxMywgMjYsIDM3LCA1LCAyMDMsIDE5NiwgMTMsIDI2LCAzNywgNSwgMjAzLCAKKyAgICAxMjQsIDEzLCAyNiwgMzcsIDUsIDIwMiwgMTU5LCAxMywgMTMyLCA2LCA2MywgMTMsIDEzMiwgNiwgMjQ3LCAxMjUsIDEzLCAKKyAgICAxMzIsIDYsIDI0NSwgNTEsIDEzLCAxMzIsIDYsIDIzOSwgNzUsIDEzLCAxMzIsIDYsIDIzMCwgMTg0LCAxMywgMTMyLCA2LCAKKyAgICAyMzAsIDU0LCAxMywgMTMyLCA2LCAyMjMsIDE2MywgMTMsIDEzMiwgNiwgNzgsIDEzLCAxMzIsIDYsIDIxOSwgMTg0LCAxMywgCisgICAgMTMyLCA2LCAyMTcsIDEzNCwgMTMsIDEzMiwgNiwgMTk0LCAxMywgMTMyLCA2LCAyMTAsIDY5LCAxMywgMTMyLCA2LCA2OCwgCisgICAgMTMsIDEzMiwgNiwgMjA2LCAxNjQsIDEzLCAxMzIsIDYsIDIwNCwgMTQ0LCAxMywgMTMyLCA2LCAyMDMsIDE5NiwgMTMsIAorICAgIDEzMiwgNiwgMjAzLCAxMjQsIDEzLCAxMzIsIDYsIDIwMiwgMTU5LCAxMywgMTMyLCA1LCA2MywgMTMsIDEzMiwgNSwgMjQ5LCAKKyAgICAyNTUsIDEzLCAxMzIsIDUsIDI0NywgMTI1LCAxMywgMTMyLCA1LCAyNDUsIDUxLCAxMywgMTMyLCA1LCAyNDAsIDE3NCwgMTMsIAorICAgIDEzMiwgNSwgMjM3LCAxNzEsIDEzLCAxMzIsIDUsIDc1LCAxMywgMTMyLCA1LCAyMzAsIDE4NCwgMTMsIDEzMiwgNSwgMjMwLCAKKyAgICA1NCwgMTMsIDEzMiwgNSwgMTU5LCAxMywgMTMyLCA1LCAyMjYsIDE4NSwgMTMsIDEzMiwgNSwgMjIzLCAxNjMsIDEzLCAxMzIsIAorICAgIDUsIDIxOSwgMTg0LCAxMywgMTMyLCA1LCAyMTcsIDEzNCwgMTMsIDEzMiwgNSwgMTQ2LCAxMywgMTMyLCA1LCAxOTQsIDEzLCAKKyAgICAxMzIsIDUsIDIxMCwgNjksIDEzLCAxMzIsIDUsIDY4LCAxMywgMTMyLCA1LCAyMDYsIDE2NCwgMTMsIDEzMiwgNSwgMjA0LCAKKyAgICAxNDQsIDEzLCAxMzIsIDUsIDIwMywgMTk2LCAxMywgMTMyLCA1LCAyMDMsIDEyNCwgMTMsIDEzMiwgNSwgMjAyLCAxNTksIAorICAgIDEzLCAyNiwgMTMyLCA2LCA2MywgMTMsIDI2LCAxMzIsIDYsIDI0OSwgMjU1LCAxMywgMjYsIDEzMiwgNiwgMjQ3LCAxMjUsIAorICAgIDEzLCAyNiwgMTMyLCA2LCAyNDUsIDUxLCAxMywgMjYsIDEzMiwgNiwgNzQsIDEzLCAyNiwgMTMyLCA2LCAyNDAsIDE3NCwgCisgICAgMTMsIDI2LCAxMzIsIDYsIDIzOSwgNzUsIDEzLCAyNiwgMTMyLCA2LCAyMzcsIDE3MSwgMTMsIDI2LCAxMzIsIDYsIDc1LCAKKyAgICAxMywgMjYsIDEzMiwgNiwgMjMwLCAxODQsIDEzLCAyNiwgMTMyLCA2LCAyMzAsIDU0LCAxMywgMjYsIDEzMiwgNiwgMTU5LCAKKyAgICAxMywgMjYsIDEzMiwgNiwgMjI2LCAxODUsIDEzLCAyNiwgMTMyLCA2LCAyMjMsIDE2MywgMTMsIDI2LCAxMzIsIDYsIDc4LCAKKyAgICAxMywgMjYsIDEzMiwgNiwgMjE5LCAxODQsIDEzLCAyNiwgMTMyLCA2LCAyMTcsIDEzNCwgMTMsIDI2LCAxMzIsIDYsIDE0NiwgCisgICAgMTMsIDI2LCAxMzIsIDYsIDE5NCwgMTMsIDI2LCAxMzIsIDYsIDIxMCwgNjksIDEzLCAyNiwgMTMyLCA2LCA2OCwgMTMsIDI2LCAKKyAgICAxMzIsIDYsIDIwNiwgMTY0LCAxMywgMjYsIDEzMiwgNiwgMjA0LCAxNDQsIDEzLCAyNiwgMTMyLCA2LCAyMDMsIDE5NiwgMTMsIAorICAgIDI2LCAxMzIsIDYsIDIwMywgMTI0LCAxMywgMjYsIDEzMiwgNiwgMjAyLCAxNTksIDEzLCAyNiwgMTMyLCA1LCA2MywgMTMsIAorICAgIDI2LCAxMzIsIDUsIDI0OSwgMjU1LCAxMywgMjYsIDEzMiwgNSwgMjQ3LCAxMjUsIDEzLCAyNiwgMTMyLCA1LCAyNDUsIDUxLCAKKyAgICAxMywgMjYsIDEzMiwgNSwgNzQsIDEzLCAyNiwgMTMyLCA1LCAyNDAsIDE3NCwgMTMsIDI2LCAxMzIsIDUsIDIzOSwgNzUsIAorICAgIDEzLCAyNiwgMTMyLCA1LCAyMzcsIDE3MSwgMTMsIDI2LCAxMzIsIDUsIDc1LCAxMywgMjYsIDEzMiwgNSwgMjMwLCAxODQsIAorICAgIDEzLCAyNiwgMTMyLCA1LCAyMzAsIDU0LCAxMywgMjYsIDEzMiwgNSwgMTU5LCAxMywgMjYsIDEzMiwgNSwgMjI2LCAxODUsIAorICAgIDEzLCAyNiwgMTMyLCA1LCAyMjMsIDE2MywgMTMsIDI2LCAxMzIsIDUsIDc4LCAxMywgMjYsIDEzMiwgNSwgMjE5LCAxODQsIAorICAgIDEzLCAyNiwgMTMyLCA1LCAyMTcsIDEzNCwgMTMsIDI2LCAxMzIsIDUsIDE0NiwgMTMsIDI2LCAxMzIsIDUsIDE5NCwgMTMsIAorICAgIDI2LCAxMzIsIDUsIDIxMCwgNjksIDEzLCAyNiwgMTMyLCA1LCA2OCwgMTMsIDI2LCAxMzIsIDUsIDIwNiwgMTY0LCAxMywgCisgICAgMjYsIDEzMiwgNSwgMjA0LCAxNDQsIDEzLCAyNiwgMTMyLCA1LCAyMDMsIDE5NiwgMTMsIDI2LCAxMzIsIDUsIDIwMywgMTI0LCAKKyAgICAxMywgMjYsIDEzMiwgNSwgMjAyLCAxNTksIDEzLCAxNjYsIDYsIDYzLCAxMywgMTY2LCA2LCAyNDksIDI1NSwgMTMsIDE2NiwgCisgICAgNiwgMjQ1LCA1MSwgMTMsIDE2NiwgNiwgNzQsIDEzLCAxNjYsIDYsIDI0MCwgMTc0LCAxMywgMTY2LCA2LCAyMzksIDc1LCAKKyAgICAxMywgMTY2LCA2LCAyMzAsIDE4NCwgMTMsIDE2NiwgNiwgMjMwLCA1NCwgMTMsIDE2NiwgNiwgMTU5LCAxMywgMTY2LCA2LCAKKyAgICAyMjYsIDE4NSwgMTMsIDE2NiwgNiwgMjIzLCAxNjMsIDEzLCAxNjYsIDYsIDc4LCAxMywgMTY2LCA2LCAyMTksIDE4NCwgMTMsIAorICAgIDE2NiwgNiwgMjE3LCAxMzQsIDEzLCAxNjYsIDYsIDE5NCwgMTMsIDE2NiwgNiwgMjEwLCA2OSwgMTMsIDE2NiwgNiwgNjgsIAorICAgIDEzLCAxNjYsIDYsIDIwNiwgMTY0LCAxMywgMTY2LCA2LCAyMDQsIDE0NCwgMTMsIDE2NiwgNiwgMjAzLCAxOTYsIDEzLCAKKyAgICAxNjYsIDYsIDIwMywgMTI0LCAxMywgMTY2LCA1LCA2MywgMTMsIDE2NiwgNSwgMjQ5LCAyNTUsIDEzLCAxNjYsIDUsIDI0NywgCisgICAgMTI1LCAxMywgMTY2LCA1LCAyNDUsIDUxLCAxMywgMTY2LCA1LCA3NCwgMTMsIDE2NiwgNSwgMjQwLCAxNzQsIDEzLCAxNjYsIAorICAgIDUsIDIzOSwgNzUsIDEzLCAxNjYsIDUsIDIzNywgMTcxLCAxMywgMTY2LCA1LCA3NSwgMTMsIDE2NiwgNSwgMjMwLCAxODQsIAorICAgIDEzLCAxNjYsIDUsIDIzMCwgNTQsIDEzLCAxNjYsIDUsIDE1OSwgMTMsIDE2NiwgNSwgMjI2LCAxODUsIDEzLCAxNjYsIDUsIAorICAgIDIyMywgMTYzLCAxMywgMTY2LCA1LCA3OCwgMTMsIDE2NiwgNSwgMjE5LCAxODQsIDEzLCAxNjYsIDUsIDIxNywgMTM0LCAxMywgCisgICAgMTY2LCA1LCAxNDYsIDEzLCAxNjYsIDUsIDE5NCwgMTMsIDE2NiwgNSwgMjEwLCA2OSwgMTMsIDE2NiwgNSwgNjgsIDEzLCAKKyAgICAxNjYsIDUsIDIwNiwgMTY0LCAxMywgMTY2LCA1LCAyMDQsIDE0NCwgMTMsIDE2NiwgNSwgMjAzLCAxOTYsIDEzLCAxNjYsIDUsIAorICAgIDIwMywgMTI0LCAxMywgMTY2LCA1LCAyMDIsIDE1OSwgMTMsIDE2OSwgNiwgNjMsIDEzLCAxNjksIDYsIDI0OSwgMjU1LCAxMywgCisgICAgMTY5LCA2LCAyNDUsIDUxLCAxMywgMTY5LCA2LCA3NCwgMTMsIDE2OSwgNiwgMjQwLCAxNzQsIDEzLCAxNjksIDYsIDIzOSwgCisgICAgNzUsIDEzLCAxNjksIDYsIDc1LCAxMywgMTY5LCA2LCAyMzAsIDE4NCwgMTMsIDE2OSwgNiwgMjMwLCA1NCwgMTMsIDE2OSwgCisgICAgNiwgMTU5LCAxMywgMTY5LCA2LCAyMjYsIDE4NSwgMTMsIDE2OSwgNiwgNzgsIDEzLCAxNjksIDYsIDE5NCwgMTMsIDE2OSwgCisgICAgNiwgMjEwLCA2OSwgMTMsIDE2OSwgNiwgNjgsIDEzLCAxNjksIDYsIDIwNiwgMTY0LCAxMywgMTY5LCA2LCAyMDQsIDE0NCwgCisgICAgMTMsIDE2OSwgNiwgMjAzLCAxOTYsIDEzLCAxNjksIDYsIDIwMywgMTI0LCAxMywgMTY5LCA1LCA2MywgMTMsIDE2OSwgNSwgCisgICAgMjQ5LCAyNTUsIDEzLCAxNjksIDUsIDI0NywgMTI1LCAxMywgMTY5LCA1LCAyNDUsIDUxLCAxMywgMTY5LCA1LCA3NCwgMTMsIAorICAgIDE2OSwgNSwgMjQwLCAxNzQsIDEzLCAxNjksIDUsIDIzOSwgNzUsIDEzLCAxNjksIDUsIDIzNywgMTcxLCAxMywgMTY5LCA1LCAKKyAgICA3NSwgMTMsIDE2OSwgNSwgMjMwLCAxODQsIDEzLCAxNjksIDUsIDIzMCwgNTQsIDEzLCAxNjksIDUsIDE1OSwgMTMsIDE2OSwgCisgICAgNSwgMjI2LCAxODUsIDEzLCAxNjksIDUsIDIyMywgMTYzLCAxMywgMTY5LCA1LCA3OCwgMTMsIDE2OSwgNSwgMjE5LCAxODQsIAorICAgIDEzLCAxNjksIDUsIDIxNywgMTM0LCAxMywgMTY5LCA1LCAxNDYsIDEzLCAxNjksIDUsIDE5NCwgMTMsIDE2OSwgNSwgMjEwLCAKKyAgICA2OSwgMTMsIDE2OSwgNSwgNjgsIDEzLCAxNjksIDUsIDIwNiwgMTY0LCAxMywgMTY5LCA1LCAyMDQsIDE0NCwgMTMsIDE2OSwgCisgICAgNSwgMjAzLCAxOTYsIDEzLCAxNjksIDUsIDIwMywgMTI0LCAxMywgMTY5LCA1LCAyMDIsIDE1OSwgMTMsIDI2LCAxNjYsIDYsIAorICAgIDYzLCAxMywgMjYsIDE2NiwgNiwgMjQ5LCAyNTUsIDEzLCAyNiwgMTY2LCA2LCAyNDcsIDEyNSwgMTMsIDI2LCAxNjYsIDYsIAorICAgIDI0NSwgNTEsIDEzLCAyNiwgMTY2LCA2LCA3NCwgMTMsIDI2LCAxNjYsIDYsIDI0MCwgMTc0LCAxMywgMjYsIDE2NiwgNiwgCisgICAgMjM5LCA3NSwgMTMsIDI2LCAxNjYsIDYsIDIzNywgMTcxLCAxMywgMjYsIDE2NiwgNiwgNzUsIDEzLCAyNiwgMTY2LCA2LCAKKyAgICAyMzAsIDE4NCwgMTMsIDI2LCAxNjYsIDYsIDIzMCwgNTQsIDEzLCAyNiwgMTY2LCA2LCAxNTksIDEzLCAyNiwgMTY2LCA2LCAKKyAgICAyMjYsIDE4NSwgMTMsIDI2LCAxNjYsIDYsIDIyMywgMTYzLCAxMywgMjYsIDE2NiwgNiwgNzgsIDEzLCAyNiwgMTY2LCA2LCAKKyAgICAyMTksIDE4NCwgMTMsIDI2LCAxNjYsIDYsIDIxNywgMTM0LCAxMywgMjYsIDE2NiwgNiwgMTQ2LCAxMywgMjYsIDE2NiwgNiwgCisgICAgMTk0LCAxMywgMjYsIDE2NiwgNiwgMjEwLCA2OSwgMTMsIDI2LCAxNjYsIDYsIDY4LCAxMywgMjYsIDE2NiwgNiwgMjA2LCAKKyAgICAxNjQsIDEzLCAyNiwgMTY2LCA2LCAyMDQsIDE0NCwgMTMsIDI2LCAxNjYsIDYsIDIwMywgMTk2LCAxMywgMjYsIDE2NiwgNiwgCisgICAgMjAzLCAxMjQsIDEzLCAyNiwgMTY2LCA2LCAyMDIsIDE1OSwgMTMsIDI2LCAxNjYsIDUsIDYzLCAxMywgMjYsIDE2NiwgNSwgCisgICAgMjQ5LCAyNTUsIDEzLCAyNiwgMTY2LCA1LCAyNDcsIDEyNSwgMTMsIDI2LCAxNjYsIDUsIDI0NSwgNTEsIDEzLCAyNiwgMTY2LCAKKyAgICA1LCA3NCwgMTMsIDI2LCAxNjYsIDUsIDI0MCwgMTc0LCAxMywgMjYsIDE2NiwgNSwgMjM5LCA3NSwgMTMsIDI2LCAxNjYsIDUsIAorICAgIDIzNywgMTcxLCAxMywgMjYsIDE2NiwgNSwgNzUsIDEzLCAyNiwgMTY2LCA1LCAyMzAsIDE4NCwgMTMsIDI2LCAxNjYsIDUsIAorICAgIDIzMCwgNTQsIDEzLCAyNiwgMTY2LCA1LCAxNTksIDEzLCAyNiwgMTY2LCA1LCAyMjYsIDE4NSwgMTMsIDI2LCAxNjYsIDUsIAorICAgIDIyMywgMTYzLCAxMywgMjYsIDE2NiwgNSwgNzgsIDEzLCAyNiwgMTY2LCA1LCAyMTksIDE4NCwgMTMsIDI2LCAxNjYsIDUsIAorICAgIDIxNywgMTM0LCAxMywgMjYsIDE2NiwgNSwgMTQ2LCAxMywgMjYsIDE2NiwgNSwgMTk0LCAxMywgMjYsIDE2NiwgNSwgMjEwLCAKKyAgICA2OSwgMTMsIDI2LCAxNjYsIDUsIDY4LCAxMywgMjYsIDE2NiwgNSwgMjA2LCAxNjQsIDEzLCAyNiwgMTY2LCA1LCAyMDQsIAorICAgIDE0NCwgMTMsIDI2LCAxNjYsIDUsIDIwMywgMTk2LCAxMywgMjYsIDE2NiwgNSwgMjAzLCAxMjQsIDEzLCAyNiwgMTY2LCA1LCAKKyAgICAyMDIsIDE1OSwgMTMsIDQxLCA2LCA2MywgMTMsIDQxLCA2LCAyNDksIDI1NSwgMTMsIDQxLCA2LCAyNDcsIDEyNSwgMTMsIAorICAgIDQxLCA2LCAyNDUsIDUxLCAxMywgNDEsIDYsIDc0LCAxMywgNDEsIDYsIDI0MCwgMTc0LCAxMywgNDEsIDYsIDIzOSwgNzUsIAorICAgIDEzLCA0MSwgNiwgMjM3LCAxNzEsIDEzLCA0MSwgNiwgNzUsIDEzLCA0MSwgNiwgMjMwLCAxODQsIDEzLCA0MSwgNiwgMjMwLCAKKyAgICA1NCwgMTMsIDQxLCA2LCAxNTksIDEzLCA0MSwgNiwgMjI2LCAxODUsIDEzLCA0MSwgNiwgMjIzLCAxNjMsIDEzLCA0MSwgNiwgCisgICAgNzgsIDEzLCA0MSwgNiwgMjE5LCAxODQsIDEzLCA0MSwgNiwgMjE3LCAxMzQsIDEzLCA0MSwgNiwgMTQ2LCAxMywgNDEsIDYsIAorICAgIDE5NCwgMTMsIDQxLCA2LCAyMTAsIDY5LCAxMywgNDEsIDYsIDY4LCAxMywgNDEsIDYsIDIwNiwgMTY0LCAxMywgNDEsIDYsIAorICAgIDIwNCwgMTQ0LCAxMywgNDEsIDYsIDIwMywgMTk2LCAxMywgNDEsIDYsIDIwMywgMTI0LCAxMywgNDEsIDYsIDIwMiwgMTU5LCAKKyAgICAxMywgNDEsIDUsIDYzLCAxMywgNDEsIDUsIDI0OSwgMjU1LCAxMywgNDEsIDUsIDI0NywgMTI1LCAxMywgNDEsIDUsIDI0NSwgCisgICAgNTEsIDEzLCA0MSwgNSwgNzQsIDEzLCA0MSwgNSwgMjQwLCAxNzQsIDEzLCA0MSwgNSwgMjM5LCA3NSwgMTMsIDQxLCA1LCAKKyAgICAyMzcsIDE3MSwgMTMsIDQxLCA1LCA3NSwgMTMsIDQxLCA1LCAyMzAsIDE4NCwgMTMsIDQxLCA1LCAyMzAsIDU0LCAxMywgNDEsIAorICAgIDUsIDE1OSwgMTMsIDQxLCA1LCAyMjYsIDE4NSwgMTMsIDQxLCA1LCAyMjMsIDE2MywgMTMsIDQxLCA1LCA3OCwgMTMsIDQxLCAKKyAgICA1LCAyMTksIDE4NCwgMTMsIDQxLCA1LCAyMTcsIDEzNCwgMTMsIDQxLCA1LCAxNDYsIDEzLCA0MSwgNSwgMTk0LCAxMywgNDEsIAorICAgIDUsIDIxMCwgNjksIDEzLCA0MSwgNSwgNjgsIDEzLCA0MSwgNSwgMjA2LCAxNjQsIDEzLCA0MSwgNSwgMjA0LCAxNDQsIDEzLCAKKyAgICA0MSwgNSwgMjAzLCAxOTYsIDEzLCA0MSwgNSwgMjAzLCAxMjQsIDEzLCA0MSwgNSwgMjAyLCAxNTksIDEzLCA0MSwgMjYsIDYsIAorICAgIDYzLCAxMywgNDEsIDI2LCA2LCAyNDksIDI1NSwgMTMsIDQxLCAyNiwgNiwgMjQ3LCAxMjUsIDEzLCA0MSwgMjYsIDYsIDI0NSwgCisgICAgNTEsIDEzLCA0MSwgMjYsIDYsIDc0LCAxMywgNDEsIDI2LCA2LCAyNDAsIDE3NCwgMTMsIDQxLCAyNiwgNiwgMjM5LCA3NSwgCisgICAgMTMsIDQxLCAyNiwgNiwgMjM3LCAxNzEsIDEzLCA0MSwgMjYsIDYsIDc1LCAxMywgNDEsIDI2LCA2LCAyMzAsIDE4NCwgMTMsIAorICAgIDQxLCAyNiwgNiwgMjMwLCA1NCwgMTMsIDQxLCAyNiwgNiwgMTU5LCAxMywgNDEsIDI2LCA2LCAyMjYsIDE4NSwgMTMsIDQxLCAKKyAgICAyNiwgNiwgMjIzLCAxNjMsIDEzLCA0MSwgMjYsIDYsIDc4LCAxMywgNDEsIDI2LCA2LCAyMTksIDE4NCwgMTMsIDQxLCAyNiwgCisgICAgNiwgMjE3LCAxMzQsIDEzLCA0MSwgMjYsIDYsIDE0NiwgMTMsIDQxLCAyNiwgNiwgMTk0LCAxMywgNDEsIDI2LCA2LCAyMTAsIAorICAgIDY5LCAxMywgNDEsIDI2LCA2LCA2OCwgMTMsIDQxLCAyNiwgNiwgMjA2LCAxNjQsIDEzLCA0MSwgMjYsIDYsIDIwNCwgMTQ0LCAKKyAgICAxMywgNDEsIDI2LCA2LCAyMDMsIDE5NiwgMTMsIDQxLCAyNiwgNiwgMjAzLCAxMjQsIDEzLCA0MSwgMjYsIDYsIDIwMiwgCisgICAgMTU5LCAxMywgNDEsIDI2LCA1LCA2MywgMTMsIDQxLCAyNiwgNSwgMjQ5LCAyNTUsIDEzLCA0MSwgMjYsIDUsIDI0NywgMTI1LCAKKyAgICAxMywgNDEsIDI2LCA1LCAyNDUsIDUxLCAxMywgNDEsIDI2LCA1LCA3NCwgMTMsIDQxLCAyNiwgNSwgMjQwLCAxNzQsIDEzLCAKKyAgICA0MSwgMjYsIDUsIDIzOSwgNzUsIDEzLCA0MSwgMjYsIDUsIDIzNywgMTcxLCAxMywgNDEsIDI2LCA1LCA3NSwgMTMsIDQxLCAKKyAgICAyNiwgNSwgMjMwLCAxODQsIDEzLCA0MSwgMjYsIDUsIDIzMCwgNTQsIDEzLCA0MSwgMjYsIDUsIDE1OSwgMTMsIDQxLCAyNiwgCisgICAgNSwgMjI2LCAxODUsIDEzLCA0MSwgMjYsIDUsIDIyMywgMTYzLCAxMywgNDEsIDI2LCA1LCA3OCwgMTMsIDQxLCAyNiwgNSwgCisgICAgMjE5LCAxODQsIDEzLCA0MSwgMjYsIDUsIDIxNywgMTM0LCAxMywgNDEsIDI2LCA1LCAxNDYsIDEzLCA0MSwgMjYsIDUsIAorICAgIDE5NCwgMTMsIDQxLCAyNiwgNSwgMjEwLCA2OSwgMTMsIDQxLCAyNiwgNSwgNjgsIDEzLCA0MSwgMjYsIDUsIDIwNiwgMTY0LCAKKyAgICAxMywgNDEsIDI2LCA1LCAyMDQsIDE0NCwgMTMsIDQxLCAyNiwgNSwgMjAzLCAxOTYsIDEzLCA0MSwgMjYsIDUsIDIwMywgCisgICAgMTI0LCAxMywgNDEsIDI2LCA1LCAyMDIsIDE1OSwgMTMsIDQxLCAzNywgNiwgNjMsIDEzLCA0MSwgMzcsIDYsIDI0OSwgMjU1LCAKKyAgICAxMywgNDEsIDM3LCA2LCAyNDcsIDEyNSwgMTMsIDQxLCAzNywgNiwgMjQ1LCA1MSwgMTMsIDQxLCAzNywgNiwgNzQsIDEzLCAKKyAgICA0MSwgMzcsIDYsIDI0MCwgMTc0LCAxMywgNDEsIDM3LCA2LCAyMzksIDc1LCAxMywgNDEsIDM3LCA2LCAyMzcsIDE3MSwgMTMsIAorICAgIDQxLCAzNywgNiwgNzUsIDEzLCA0MSwgMzcsIDYsIDIzMCwgMTg0LCAxMywgNDEsIDM3LCA2LCAyMzAsIDU0LCAxMywgNDEsIAorICAgIDM3LCA2LCAxNTksIDEzLCA0MSwgMzcsIDYsIDIyNiwgMTg1LCAxMywgNDEsIDM3LCA2LCAyMjMsIDE2MywgMTMsIDQxLCAzNywgCisgICAgNiwgNzgsIDEzLCA0MSwgMzcsIDYsIDIxOSwgMTg0LCAxMywgNDEsIDM3LCA2LCAyMTcsIDEzNCwgMTMsIDQxLCAzNywgNiwgCisgICAgMTQ2LCAxMywgNDEsIDM3LCA2LCAxOTQsIDEzLCA0MSwgMzcsIDYsIDIxMCwgNjksIDEzLCA0MSwgMzcsIDYsIDY4LCAxMywgCisgICAgNDEsIDM3LCA2LCAyMDYsIDE2NCwgMTMsIDQxLCAzNywgNiwgMjA0LCAxNDQsIDEzLCA0MSwgMzcsIDYsIDIwMywgMTk2LCAKKyAgICAxMywgNDEsIDM3LCA2LCAyMDMsIDEyNCwgMTMsIDQxLCAzNywgNiwgMjAyLCAxNTksIDEzLCA0MSwgMzcsIDUsIDYzLCAxMywgCisgICAgNDEsIDM3LCA1LCAyNDksIDI1NSwgMTMsIDQxLCAzNywgNSwgMjQ3LCAxMjUsIDEzLCA0MSwgMzcsIDUsIDI0NSwgNTEsIDEzLCAKKyAgICA0MSwgMzcsIDUsIDc0LCAxMywgNDEsIDM3LCA1LCAyNDAsIDE3NCwgMTMsIDQxLCAzNywgNSwgMjM5LCA3NSwgMTMsIDQxLCAKKyAgICAzNywgNSwgMjM3LCAxNzEsIDEzLCA0MSwgMzcsIDUsIDc1LCAxMywgNDEsIDM3LCA1LCAyMzAsIDE4NCwgMTMsIDQxLCAzNywgCisgICAgNSwgMjMwLCA1NCwgMTMsIDQxLCAzNywgNSwgMTU5LCAxMywgNDEsIDM3LCA1LCAyMjYsIDE4NSwgMTMsIDQxLCAzNywgNSwgCisgICAgMjIzLCAxNjMsIDEzLCA0MSwgMzcsIDUsIDc4LCAxMywgNDEsIDM3LCA1LCAyMTksIDE4NCwgMTMsIDQxLCAzNywgNSwgMjE3LCAKKyAgICAxMzQsIDEzLCA0MSwgMzcsIDUsIDE0NiwgMTMsIDQxLCAzNywgNSwgMTk0LCAxMywgNDEsIDM3LCA1LCAyMTAsIDY5LCAxMywgCisgICAgNDEsIDM3LCA1LCA2OCwgMTMsIDQxLCAzNywgNSwgMjA2LCAxNjQsIDEzLCA0MSwgMzcsIDUsIDIwNCwgMTQ0LCAxMywgNDEsIAorICAgIDM3LCA1LCAyMDMsIDE5NiwgMTMsIDQxLCAzNywgNSwgMjAzLCAxMjQsIDEzLCA0MSwgMzcsIDUsIDIwMiwgMTU5LCAxMywgCisgICAgNDEsIDI2LCAzNywgNiwgNjMsIDEzLCA0MSwgMjYsIDM3LCA2LCAyNDksIDI1NSwgMTMsIDQxLCAyNiwgMzcsIDYsIDI0NywgCisgICAgMTI1LCAxMywgNDEsIDI2LCAzNywgNiwgMjQ1LCA1MSwgMTMsIDQxLCAyNiwgMzcsIDYsIDc0LCAxMywgNDEsIDI2LCAzNywgCisgICAgNiwgMjQwLCAxNzQsIDEzLCA0MSwgMjYsIDM3LCA2LCAyMzksIDc1LCAxMywgNDEsIDI2LCAzNywgNiwgMjM3LCAxNzEsIDEzLCAKKyAgICA0MSwgMjYsIDM3LCA2LCA3NSwgMTMsIDQxLCAyNiwgMzcsIDYsIDIzMCwgMTg0LCAxMywgNDEsIDI2LCAzNywgNiwgMjMwLCAKKyAgICA1NCwgMTMsIDQxLCAyNiwgMzcsIDYsIDE1OSwgMTMsIDQxLCAyNiwgMzcsIDYsIDIyNiwgMTg1LCAxMywgNDEsIDI2LCAzNywgCisgICAgNiwgMjIzLCAxNjMsIDEzLCA0MSwgMjYsIDM3LCA2LCA3OCwgMTMsIDQxLCAyNiwgMzcsIDYsIDIxOSwgMTg0LCAxMywgNDEsIAorICAgIDI2LCAzNywgNiwgMjE3LCAxMzQsIDEzLCA0MSwgMjYsIDM3LCA2LCAxNDYsIDEzLCA0MSwgMjYsIDM3LCA2LCAxOTQsIDEzLCAKKyAgICA0MSwgMjYsIDM3LCA2LCAyMTAsIDY5LCAxMywgNDEsIDI2LCAzNywgNiwgNjgsIDEzLCA0MSwgMjYsIDM3LCA2LCAyMDYsIAorICAgIDE2NCwgMTMsIDQxLCAyNiwgMzcsIDYsIDIwNCwgMTQ0LCAxMywgNDEsIDI2LCAzNywgNiwgMjAzLCAxOTYsIDEzLCA0MSwgCisgICAgMjYsIDM3LCA2LCAyMDMsIDEyNCwgMTMsIDQxLCAyNiwgMzcsIDYsIDIwMiwgMTU5LCAxMywgNDEsIDI2LCAzNywgNSwgNjMsIAorICAgIDEzLCA0MSwgMjYsIDM3LCA1LCAyNDksIDI1NSwgMTMsIDQxLCAyNiwgMzcsIDUsIDI0NywgMTI1LCAxMywgNDEsIDI2LCAzNywgCisgICAgNSwgMjQ1LCA1MSwgMTMsIDQxLCAyNiwgMzcsIDUsIDc0LCAxMywgNDEsIDI2LCAzNywgNSwgMjQwLCAxNzQsIDEzLCA0MSwgCisgICAgMjYsIDM3LCA1LCAyMzksIDc1LCAxMywgNDEsIDI2LCAzNywgNSwgMjM3LCAxNzEsIDEzLCA0MSwgMjYsIDM3LCA1LCA3NSwgCisgICAgMTMsIDQxLCAyNiwgMzcsIDUsIDIzMCwgMTg0LCAxMywgNDEsIDI2LCAzNywgNSwgMjMwLCA1NCwgMTMsIDQxLCAyNiwgMzcsIAorICAgIDUsIDE1OSwgMTMsIDQxLCAyNiwgMzcsIDUsIDIyNiwgMTg1LCAxMywgNDEsIDI2LCAzNywgNSwgMjIzLCAxNjMsIDEzLCA0MSwgCisgICAgMjYsIDM3LCA1LCA3OCwgMTMsIDQxLCAyNiwgMzcsIDUsIDIxOSwgMTg0LCAxMywgNDEsIDI2LCAzNywgNSwgMjE3LCAxMzQsIAorICAgIDEzLCA0MSwgMjYsIDM3LCA1LCAxNDYsIDEzLCA0MSwgMjYsIDM3LCA1LCAxOTQsIDEzLCA0MSwgMjYsIDM3LCA1LCAyMTAsIAorICAgIDY5LCAxMywgNDEsIDI2LCAzNywgNSwgNjgsIDEzLCA0MSwgMjYsIDM3LCA1LCAyMDYsIDE2NCwgMTMsIDQxLCAyNiwgMzcsIAorICAgIDUsIDIwNCwgMTQ0LCAxMywgNDEsIDI2LCAzNywgNSwgMjAzLCAxOTYsIDEzLCA0MSwgMjYsIDM3LCA1LCAyMDMsIDEyNCwgCisgICAgMTMsIDQxLCAyNiwgMzcsIDUsIDIwMiwgMTU5LCAxMywgMjI0LCA0MSwgNiwgNjMsIDEzLCAyMjQsIDQxLCA2LCAyNDksIAorICAgIDI1NSwgMTMsIDIyNCwgNDEsIDYsIDI0NywgMTI1LCAxMywgMjI0LCA0MSwgNiwgMjQ1LCA1MSwgMTMsIDIyNCwgNDEsIDYsIAorICAgIDc0LCAxMywgMjI0LCA0MSwgNiwgMjQwLCAxNzQsIDEzLCAyMjQsIDQxLCA2LCAyMzksIDc1LCAxMywgMjI0LCA0MSwgNiwgCisgICAgMjM3LCAxNzEsIDEzLCAyMjQsIDQxLCA2LCA3NSwgMTMsIDIyNCwgNDEsIDYsIDIzMCwgMTg0LCAxMywgMjI0LCA0MSwgNiwgCisgICAgMjMwLCA1NCwgMTMsIDIyNCwgNDEsIDYsIDE1OSwgMTMsIDIyNCwgNDEsIDYsIDIyNiwgMTg1LCAxMywgMjI0LCA0MSwgNiwgCisgICAgMjIzLCAxNjMsIDEzLCAyMjQsIDQxLCA2LCA3OCwgMTMsIDIyNCwgNDEsIDYsIDIxOSwgMTg0LCAxMywgMjI0LCA0MSwgNiwgCisgICAgMjE3LCAxMzQsIDEzLCAyMjQsIDQxLCA2LCAxNDYsIDEzLCAyMjQsIDQxLCA2LCAxOTQsIDEzLCAyMjQsIDQxLCA2LCAyMTAsIAorICAgIDY5LCAxMywgMjI0LCA0MSwgNiwgNjgsIDEzLCAyMjQsIDQxLCA2LCAyMDYsIDE2NCwgMTMsIDIyNCwgNDEsIDYsIDIwNCwgCisgICAgMTQ0LCAxMywgMjI0LCA0MSwgNiwgMjAzLCAxOTYsIDEzLCAyMjQsIDQxLCA2LCAyMDMsIDEyNCwgMTMsIDIyNCwgNDEsIDYsIAorICAgIDIwMiwgMTU5LCAxMywgMjI0LCA0MSwgNSwgNjMsIDEzLCAyMjQsIDQxLCA1LCAyNDksIDI1NSwgMTMsIDIyNCwgNDEsIDUsIAorICAgIDI0NywgMTI1LCAxMywgMjI0LCA0MSwgNSwgMjQ1LCA1MSwgMTMsIDIyNCwgNDEsIDUsIDc0LCAxMywgMjI0LCA0MSwgNSwgCisgICAgMjQwLCAxNzQsIDEzLCAyMjQsIDQxLCA1LCAyMzksIDc1LCAxMywgMjI0LCA0MSwgNSwgMjM3LCAxNzEsIDEzLCAyMjQsIDQxLCAKKyAgICA1LCA3NSwgMTMsIDIyNCwgNDEsIDUsIDIzMCwgMTg0LCAxMywgMjI0LCA0MSwgNSwgMjMwLCA1NCwgMTMsIDIyNCwgNDEsIDUsIAorICAgIDE1OSwgMTMsIDIyNCwgNDEsIDUsIDIyNiwgMTg1LCAxMywgMjI0LCA0MSwgNSwgMjIzLCAxNjMsIDEzLCAyMjQsIDQxLCA1LCAKKyAgICA3OCwgMTMsIDIyNCwgNDEsIDUsIDIxOSwgMTg0LCAxMywgMjI0LCA0MSwgNSwgMjE3LCAxMzQsIDEzLCAyMjQsIDQxLCA1LCAKKyAgICAxNDYsIDEzLCAyMjQsIDQxLCA1LCAxOTQsIDEzLCAyMjQsIDQxLCA1LCAyMTAsIDY5LCAxMywgMjI0LCA0MSwgNSwgNjgsIAorICAgIDEzLCAyMjQsIDQxLCA1LCAyMDYsIDE2NCwgMTMsIDIyNCwgNDEsIDUsIDIwNCwgMTQ0LCAxMywgMjI0LCA0MSwgNSwgMjAzLCAKKyAgICAxOTYsIDEzLCAyMjQsIDQxLCA1LCAyMDMsIDEyNCwgMTMsIDIyNCwgNDEsIDUsIDIwMiwgMTU5LCAxMywgMzcsIDUsIDI0MywgCisgICAgODQsIDc1LCAxMywgMzcsIDUsIDI0MywgODQsIDIzMCwgMTg0LCAxMywgMjYsIDYsIDI1MSwgMiwgMTMsIDI2LCA2LCAyNDgsIAorICAgIDEwNiwgMTMsIDI2LCA2LCAyMzgsIDIzNSwgMTMsIDI2LCA2LCAyNDQsIDM3LCAxMywgMjYsIDYsIDI0MSwgMzcsIDEzLCAyNiwgCisgICAgNiwgMjAyLCA4MywgMTMsIDI2LCA2LCAyNDAsIDI0OCwgMTMsIDI2LCA2LCAyMDksIDc0LCAxMywgMjYsIDYsIDIzMCwgMjMwLCAKKyAgICAxMywgMjYsIDYsIDIyOSwgMjQ3LCAxMywgMjYsIDYsIDIyOCwgMjQsIDEzLCAyNiwgNiwgMjIzLCAyNDYsIDEzLCAyNiwgNiwgCisgICAgMjIxLCA4NCwgMTMsIDI2LCA2LCAyMDMsIDE3MCwgMTMsIDI2LCA2LCAyMjAsIDM0LCAxMywgMjYsIDYsIDIxOCwgMTY3LCAKKyAgICAxMywgMjYsIDYsIDIxNiwgNTksIDEzLCAyNiwgNiwgMjA5LCA3NSwgOTcsIDEzLCAyNiwgNiwgMjEyLCAxNDQsIDEzLCAyNiwgCisgICAgNiwgMjA5LCAyMDcsIDEzLCAyNiwgNiwgMjA2LCAyMTYsIDEzLCAyNiwgNiwgMjE4LCAxOTIsIDEzLCAyNiwgNiwgMjQ2LCAKKyAgICAxNDIsIDEzLCAyNiwgNiwgMjE3LCAyMDIsIDEzLCAyNiwgNiwgMjIwLCAzNiwgMTMsIDI2LCAyMjMsIDEwMSwgMTMsIDI2LCAKKyAgICA1LCAyNTEsIDIsIDEzLCAyNiwgNSwgMjQ4LCAxMDYsIDEzLCAyNiwgNSwgMjM4LCAyMzUsIDEzLCAyNiwgNSwgMjQ0LCAzNywgCisgICAgMTMsIDI2LCA1LCAyNDEsIDM3LCAxMywgMjYsIDUsIDIwMiwgODMsIDEzLCAyNiwgNSwgMjQwLCAyNDgsIDEzLCAyNiwgNSwgCisgICAgMjA5LCA3NCwgMTMsIDI2LCA1LCAyMzAsIDIzMCwgMTMsIDI2LCA1LCAyMjksIDI0NywgMTMsIDI2LCA1LCAyMjgsIDI0LCAKKyAgICAxMywgMjYsIDUsIDIyMywgMjQ2LCAxMywgMjYsIDUsIDIyMSwgODQsIDEzLCAyNiwgNSwgMjAzLCAxNzAsIDEzLCAyNiwgNSwgCisgICAgMjIwLCAzNCwgMTMsIDI2LCA1LCAyMTgsIDE2NywgMTMsIDI2LCA1LCAyMTYsIDU5LCAxMywgMjYsIDUsIDQ2LCAyMTIsIAorICAgIDE0NCwgMTMsIDI2LCA1LCAyMTIsIDE0NCwgMTMsIDI2LCA1LCAyMDksIDIwNywgMTMsIDI2LCA1LCAyMDYsIDIxNiwgMTMsIAorICAgIDI2LCA1LCAyMTgsIDE5MiwgMTMsIDI2LCA1LCAyNDYsIDE0MiwgMTMsIDI2LCA1LCAyMTcsIDIwMiwgMTMsIDI2LCA1LCAKKyAgICAyMjAsIDM2LCAxMywgMjYsIDIxOSwgNjksIDI0MywgMjA1LCAxMywgMjYsIDI0MSwgMzgsIDk3LCAxMywgMjYsIDIwOSwgNzUsIAorICAgIDk3LCAxMywgMjYsIDIyOSwgMjQ4LCA5NywgMTMsIDI2LCAyMTgsIDE5MywgOTcsIDEzLCAyNiwgMjE2LCA2MCwgOTcsIDEzLCAKKyAgICAyNiwgMjE4LCAxNjgsIDk3LCAxMywgMzcsIDYsIDI1MSwgMiwgMTMsIDM3LCA2LCAyNDgsIDEwNiwgMTMsIDM3LCA2LCAyMzgsIAorICAgIDIzNSwgMTMsIDM3LCA2LCAyNDQsIDM3LCAxMywgMzcsIDYsIDI0MSwgMzcsIDEzLCAzNywgNiwgMjAyLCA4MywgMTMsIDM3LCAKKyAgICA2LCAyNDAsIDI0OCwgMTMsIDM3LCA2LCAyMDksIDc0LCAxMywgMzcsIDYsIDIzMCwgMjMwLCAxMywgMzcsIDYsIDIyOSwgCisgICAgMjQ3LCAxMywgMzcsIDYsIDIyOCwgMjQsIDEzLCAzNywgNiwgMjIzLCAyNDYsIDEzLCAzNywgNiwgMjIxLCA4NCwgMTMsIDM3LCAKKyAgICA2LCAyMDMsIDE3MCwgMTMsIDM3LCA2LCAyMjAsIDM0LCAxMywgMzcsIDYsIDIxOCwgMTY3LCAxMywgMzcsIDYsIDIxNiwgNTksIAorICAgIDEzLCAzNywgNiwgMjA5LCA3NSwgOTcsIDEzLCAzNywgNiwgMjEyLCAxNDQsIDEzLCAzNywgNiwgMjA5LCAyMDcsIDEzLCAzNywgCisgICAgNiwgMjA2LCAyMTYsIDEzLCAzNywgNiwgMjE4LCAxOTIsIDEzLCAzNywgNiwgMjQ2LCAxNDIsIDEzLCAzNywgNiwgMjE3LCAKKyAgICAyMDIsIDEzLCAzNywgNiwgMjIwLCAzNiwgMTMsIDM3LCAyMjMsIDEwMSwgMTMsIDM3LCA1LCAyNTEsIDIsIDEzLCAzNywgNSwgCisgICAgMjQ4LCAxMDYsIDEzLCAzNywgNSwgMjM4LCAyMzUsIDEzLCAzNywgNSwgMjQ0LCAzNywgMTMsIDM3LCA1LCAyNDEsIDM3LCAKKyAgICAxMywgMzcsIDUsIDIwMiwgODMsIDEzLCAzNywgNSwgMjQwLCAyNDgsIDEzLCAzNywgNSwgMjA5LCA3NCwgMTMsIDM3LCA1LCAKKyAgICAyMzAsIDIzMCwgMTMsIDM3LCA1LCAyMjksIDI0NywgMTMsIDM3LCA1LCAyMjgsIDI0LCAxMywgMzcsIDUsIDIyMywgMjQ2LCAKKyAgICAxMywgMzcsIDUsIDIyMSwgODQsIDEzLCAzNywgNSwgMjAzLCAxNzAsIDEzLCAzNywgNSwgMjIwLCAzNCwgMTMsIDM3LCA1LCAKKyAgICAyMTgsIDE2NywgMTMsIDM3LCA1LCAyMTYsIDU5LCAxMywgMzcsIDUsIDQ2LCAyMTIsIDE0NCwgMTMsIDM3LCA1LCAyMTIsIAorICAgIDE0NCwgMTMsIDM3LCA1LCAyMDksIDIwNywgMTMsIDM3LCA1LCAyMDYsIDIxNiwgMTMsIDM3LCA1LCAyMTgsIDE5MiwgMTMsIAorICAgIDM3LCA1LCAyNDYsIDE0MiwgMTMsIDM3LCA1LCAyMTcsIDIwMiwgMTMsIDM3LCA1LCAyMjAsIDM2LCAxMywgMzcsIDIxOSwgCisgICAgNjksIDI0MywgMjA1LCAxMywgMzcsIDI0MSwgMzgsIDk3LCAxMywgMzcsIDIwOSwgNzUsIDk3LCAxMywgMzcsIDIyOSwgMjQ4LCAKKyAgICA5NywgMTMsIDM3LCAyMTgsIDE5MywgOTcsIDEzLCAzNywgMjE2LCA2MCwgOTcsIDEzLCAzNywgMjE4LCAxNjgsIDk3LCAxMywgCisgICAgMjYsIDM3LCA2LCAyNTEsIDIsIDEzLCAyNiwgMzcsIDYsIDI0OCwgMTA2LCAxMywgMjYsIDM3LCA2LCAyMzgsIDIzNSwgMTMsIAorICAgIDI2LCAzNywgNiwgMjQ0LCAzNywgMTMsIDI2LCAzNywgNiwgMjQxLCAzNywgMTMsIDI2LCAzNywgNiwgMjAyLCA4MywgMTMsIAorICAgIDI2LCAzNywgNiwgMjQwLCAyNDgsIDEzLCAyNiwgMzcsIDYsIDIwOSwgNzQsIDEzLCAyNiwgMzcsIDYsIDIzMCwgMjMwLCAxMywgCisgICAgMjYsIDM3LCA2LCAyMjksIDI0NywgMTMsIDI2LCAzNywgNiwgMjI4LCAyNCwgMTMsIDI2LCAzNywgNiwgMjIzLCAyNDYsIDEzLCAKKyAgICAyNiwgMzcsIDYsIDIyMSwgODQsIDEzLCAyNiwgMzcsIDYsIDIwMywgMTcwLCAxMywgMjYsIDM3LCA2LCAyMjAsIDM0LCAxMywgCisgICAgMjYsIDM3LCA2LCAyMTgsIDE2NywgMTMsIDI2LCAzNywgNiwgMjE2LCA1OSwgMTMsIDI2LCAzNywgNiwgMjA5LCA3NSwgOTcsIAorICAgIDEzLCAyNiwgMzcsIDYsIDIxMiwgMTQ0LCAxMywgMjYsIDM3LCA2LCAyMDksIDIwNywgMTMsIDI2LCAzNywgNiwgMjA2LCAKKyAgICAyMTYsIDEzLCAyNiwgMzcsIDYsIDIxOCwgMTkyLCAxMywgMjYsIDM3LCA2LCAyNDYsIDE0MiwgMTMsIDI2LCAzNywgNiwgCisgICAgMjE3LCAyMDIsIDEzLCAyNiwgMzcsIDYsIDIyMCwgMzYsIDEzLCAyNiwgMzcsIDIyMywgMTAxLCAxMywgMjYsIDM3LCA1LCAKKyAgICAyNTEsIDIsIDEzLCAyNiwgMzcsIDUsIDI0OCwgMTA2LCAxMywgMjYsIDM3LCA1LCAyMzgsIDIzNSwgMTMsIDI2LCAzNywgNSwgCisgICAgMjQ0LCAzNywgMTMsIDI2LCAzNywgNSwgMjQxLCAzNywgMTMsIDI2LCAzNywgNSwgMjAyLCA4MywgMTMsIDI2LCAzNywgNSwgCisgICAgMjQwLCAyNDgsIDEzLCAyNiwgMzcsIDUsIDIwOSwgNzQsIDEzLCAyNiwgMzcsIDUsIDIzMCwgMjMwLCAxMywgMjYsIDM3LCA1LCAKKyAgICAyMjksIDI0NywgMTMsIDI2LCAzNywgNSwgMjI4LCAyNCwgMTMsIDI2LCAzNywgNSwgMjIzLCAyNDYsIDEzLCAyNiwgMzcsIDUsIAorICAgIDIyMSwgODQsIDEzLCAyNiwgMzcsIDUsIDIwMywgMTcwLCAxMywgMjYsIDM3LCA1LCAyMjAsIDM0LCAxMywgMjYsIDM3LCA1LCAKKyAgICAyMTgsIDE2NywgMTMsIDI2LCAzNywgNSwgMjE2LCA1OSwgMTMsIDI2LCAzNywgNSwgNDYsIDIxMiwgMTQ0LCAxMywgMjYsIAorICAgIDM3LCA1LCAyMTIsIDE0NCwgMTMsIDI2LCAzNywgNSwgMjA5LCAyMDcsIDEzLCAyNiwgMzcsIDUsIDIwNiwgMjE2LCAxMywgCisgICAgMjYsIDM3LCA1LCAyMTgsIDE5MiwgMTMsIDI2LCAzNywgNSwgMjQ2LCAxNDIsIDEzLCAyNiwgMzcsIDUsIDIxNywgMjAyLCAKKyAgICAxMywgMjYsIDM3LCA1LCAyMjAsIDM2LCAxMywgMjYsIDM3LCAyMTksIDY5LCAyNDMsIDIwNSwgMTMsIDI2LCAzNywgMjQxLCAKKyAgICAzOCwgOTcsIDEzLCAyNiwgMzcsIDIwOSwgNzUsIDk3LCAxMywgMjYsIDM3LCAyMjksIDI0OCwgOTcsIDEzLCAyNiwgMzcsIAorICAgIDIxOCwgMTkzLCA5NywgMTMsIDI2LCAzNywgMjE2LCA2MCwgOTcsIDEzLCAyNiwgMzcsIDIxOCwgMTY4LCA5NywgMTMsIDQxLCAKKyAgICAyNiwgNiwgMjUxLCAyLCAxMywgNDEsIDI2LCA2LCAyNDgsIDEwNiwgMTMsIDQxLCAyNiwgNiwgMjM4LCAyMzUsIDEzLCA0MSwgCisgICAgMjYsIDYsIDI0NCwgMzcsIDEzLCA0MSwgMjYsIDYsIDI0MSwgMzcsIDEzLCA0MSwgMjYsIDYsIDIwMiwgODMsIDEzLCA0MSwgCisgICAgMjYsIDYsIDI0MCwgMjQ4LCAxMywgNDEsIDI2LCA2LCAyMDksIDc0LCAxMywgNDEsIDI2LCA2LCAyMzAsIDIzMCwgMTMsIDQxLCAKKyAgICAyNiwgNiwgMjI5LCAyNDcsIDEzLCA0MSwgMjYsIDYsIDIyOCwgMjQsIDEzLCA0MSwgMjYsIDYsIDIyMywgMjQ2LCAxMywgNDEsIAorICAgIDI2LCA2LCAyMjEsIDg0LCAxMywgNDEsIDI2LCA2LCAyMDMsIDE3MCwgMTMsIDQxLCAyNiwgNiwgMjIwLCAzNCwgMTMsIDQxLCAKKyAgICAyNiwgNiwgMjE4LCAxNjcsIDEzLCA0MSwgMjYsIDYsIDIxNiwgNTksIDEzLCA0MSwgMjYsIDYsIDIwOSwgNzUsIDk3LCAxMywgCisgICAgNDEsIDI2LCA2LCAyMTIsIDE0NCwgMTMsIDQxLCAyNiwgNiwgMjA5LCAyMDcsIDEzLCA0MSwgMjYsIDYsIDIwNiwgMjE2LCAKKyAgICAxMywgNDEsIDI2LCA2LCAyMTgsIDE5MiwgMTMsIDQxLCAyNiwgNiwgMjQ2LCAxNDIsIDEzLCA0MSwgMjYsIDYsIDIxNywgCisgICAgMjAyLCAxMywgNDEsIDI2LCA2LCAyMjAsIDM2LCAxMywgNDEsIDI2LCAyMjMsIDEwMSwgMTMsIDQxLCAyNiwgNSwgMjUxLCAyLCAKKyAgICAxMywgNDEsIDI2LCA1LCAyNDgsIDEwNiwgMTMsIDQxLCAyNiwgNSwgMjM4LCAyMzUsIDEzLCA0MSwgMjYsIDUsIDI0NCwgMzcsIAorICAgIDEzLCA0MSwgMjYsIDUsIDI0MSwgMzcsIDEzLCA0MSwgMjYsIDUsIDIwMiwgODMsIDEzLCA0MSwgMjYsIDUsIDI0MCwgMjQ4LCAKKyAgICAxMywgNDEsIDI2LCA1LCAyMDksIDc0LCAxMywgNDEsIDI2LCA1LCAyMzAsIDIzMCwgMTMsIDQxLCAyNiwgNSwgMjI5LCAyNDcsIAorICAgIDEzLCA0MSwgMjYsIDUsIDIyOCwgMjQsIDEzLCA0MSwgMjYsIDUsIDIyMywgMjQ2LCAxMywgNDEsIDI2LCA1LCAyMjEsIDg0LCAKKyAgICAxMywgNDEsIDI2LCA1LCAyMDMsIDE3MCwgMTMsIDQxLCAyNiwgNSwgMjIwLCAzNCwgMTMsIDQxLCAyNiwgNSwgMjE4LCAxNjcsIAorICAgIDEzLCA0MSwgMjYsIDUsIDIxNiwgNTksIDEzLCA0MSwgMjYsIDUsIDQ2LCAyMTIsIDE0NCwgMTMsIDQxLCAyNiwgNSwgMjEyLCAKKyAgICAxNDQsIDEzLCA0MSwgMjYsIDUsIDIwOSwgMjA3LCAxMywgNDEsIDI2LCA1LCAyMDYsIDIxNiwgMTMsIDQxLCAyNiwgNSwgCisgICAgMjE4LCAxOTIsIDEzLCA0MSwgMjYsIDUsIDI0NiwgMTQyLCAxMywgNDEsIDI2LCA1LCAyMTcsIDIwMiwgMTMsIDQxLCAyNiwgCisgICAgNSwgMjIwLCAzNiwgMTMsIDQxLCAyNiwgMjE5LCA2OSwgMjQzLCAyMDUsIDEzLCA0MSwgMjYsIDI0MSwgMzgsIDk3LCAxMywgCisgICAgNDEsIDI2LCAyMDksIDc1LCA5NywgMTMsIDQxLCAyNiwgMjI5LCAyNDgsIDk3LCAxMywgNDEsIDI2LCAyMTgsIDE5MywgOTcsIAorICAgIDEzLCA0MSwgMjYsIDIxNiwgNjAsIDk3LCAxMywgNDEsIDI2LCAyMTgsIDE2OCwgOTcsIDEzLCA0MSwgMjYsIDM3LCA2LCAKKyAgICAyNTEsIDIsIDEzLCA0MSwgMjYsIDM3LCA2LCAyNDgsIDEwNiwgMTMsIDQxLCAyNiwgMzcsIDYsIDIzOCwgMjM1LCAxMywgNDEsIAorICAgIDI2LCAzNywgNiwgMjQ0LCAzNywgMTMsIDQxLCAyNiwgMzcsIDYsIDI0MSwgMzcsIDEzLCA0MSwgMjYsIDM3LCA2LCAyMDIsIAorICAgIDgzLCAxMywgNDEsIDI2LCAzNywgNiwgMjQwLCAyNDgsIDEzLCA0MSwgMjYsIDM3LCA2LCAyMDksIDc0LCAxMywgNDEsIDI2LCAKKyAgICAzNywgNiwgMjMwLCAyMzAsIDEzLCA0MSwgMjYsIDM3LCA2LCAyMjksIDI0NywgMTMsIDQxLCAyNiwgMzcsIDYsIDIyOCwgMjQsIAorICAgIDEzLCA0MSwgMjYsIDM3LCA2LCAyMjMsIDI0NiwgMTMsIDQxLCAyNiwgMzcsIDYsIDIyMSwgODQsIDEzLCA0MSwgMjYsIDM3LCAKKyAgICA2LCAyMDMsIDE3MCwgMTMsIDQxLCAyNiwgMzcsIDYsIDIyMCwgMzQsIDEzLCA0MSwgMjYsIDM3LCA2LCAyMTgsIDE2NywgMTMsIAorICAgIDQxLCAyNiwgMzcsIDYsIDIxNiwgNTksIDEzLCA0MSwgMjYsIDM3LCA2LCAyMDksIDc1LCA5NywgMTMsIDQxLCAyNiwgMzcsIAorICAgIDYsIDIxMiwgMTQ0LCAxMywgNDEsIDI2LCAzNywgNiwgMjA5LCAyMDcsIDEzLCA0MSwgMjYsIDM3LCA2LCAyMDYsIDIxNiwgCisgICAgMTMsIDQxLCAyNiwgMzcsIDYsIDIxOCwgMTkyLCAxMywgNDEsIDI2LCAzNywgNiwgMjQ2LCAxNDIsIDEzLCA0MSwgMjYsIDM3LCAKKyAgICA2LCAyMTcsIDIwMiwgMTMsIDQxLCAyNiwgMzcsIDYsIDIyMCwgMzYsIDEzLCA0MSwgMjYsIDM3LCAyMjMsIDEwMSwgMTMsIAorICAgIDQxLCAyNiwgMzcsIDUsIDI1MSwgMiwgMTMsIDQxLCAyNiwgMzcsIDUsIDI0OCwgMTA2LCAxMywgNDEsIDI2LCAzNywgNSwgCisgICAgMjM4LCAyMzUsIDEzLCA0MSwgMjYsIDM3LCA1LCAyNDQsIDM3LCAxMywgNDEsIDI2LCAzNywgNSwgMjQxLCAzNywgMTMsIDQxLCAKKyAgICAyNiwgMzcsIDUsIDIwMiwgODMsIDEzLCA0MSwgMjYsIDM3LCA1LCAyNDAsIDI0OCwgMTMsIDQxLCAyNiwgMzcsIDUsIDIwOSwgCisgICAgNzQsIDEzLCA0MSwgMjYsIDM3LCA1LCAyMzAsIDIzMCwgMTMsIDQxLCAyNiwgMzcsIDUsIDIyOSwgMjQ3LCAxMywgNDEsIDI2LCAKKyAgICAzNywgNSwgMjI4LCAyNCwgMTMsIDQxLCAyNiwgMzcsIDUsIDIyMywgMjQ2LCAxMywgNDEsIDI2LCAzNywgNSwgMjIxLCA4NCwgCisgICAgMTMsIDQxLCAyNiwgMzcsIDUsIDIwMywgMTcwLCAxMywgNDEsIDI2LCAzNywgNSwgMjIwLCAzNCwgMTMsIDQxLCAyNiwgMzcsIAorICAgIDUsIDIxOCwgMTY3LCAxMywgNDEsIDI2LCAzNywgNSwgMjE2LCA1OSwgMTMsIDQxLCAyNiwgMzcsIDUsIDQ2LCAyMTIsIDE0NCwgCisgICAgMTMsIDQxLCAyNiwgMzcsIDUsIDIxMiwgMTQ0LCAxMywgNDEsIDI2LCAzNywgNSwgMjA5LCAyMDcsIDEzLCA0MSwgMjYsIDM3LCAKKyAgICA1LCAyMDYsIDIxNiwgMTMsIDQxLCAyNiwgMzcsIDUsIDIxOCwgMTkyLCAxMywgNDEsIDI2LCAzNywgNSwgMjQ2LCAxNDIsIAorICAgIDEzLCA0MSwgMjYsIDM3LCA1LCAyMTcsIDIwMiwgMTMsIDQxLCAyNiwgMzcsIDUsIDIyMCwgMzYsIDEzLCA0MSwgMjYsIDM3LCAKKyAgICAyMTksIDY5LCAyNDMsIDIwNSwgMTMsIDQxLCAyNiwgMzcsIDI0MSwgMzgsIDk3LCAxMywgNDEsIDI2LCAzNywgMjA5LCA3NSwgCisgICAgOTcsIDEzLCA0MSwgMjYsIDM3LCAyMjksIDI0OCwgOTcsIDEzLCA0MSwgMjYsIDM3LCAyMTgsIDE5MywgOTcsIDEzLCA0MSwgCisgICAgMjYsIDM3LCAyMTYsIDYwLCA5NywgMTMsIDQxLCAyNiwgMzcsIDIxOCwgMTY4LCA5NywgMTMsIDI2LCA2LCAyNDMsIDE5OSwgCisgICAgMTMsIDI2LCA1LCAyNDMsIDE5OSwgMTMsIDI2LCAxNywgMjAyLCA4NCwgMTMsIDI2LCAxNywgMTA1LCAxMywgMjYsIDE3LCAKKyAgICAxMDgsIDEzLCAyNiwgMTcsIDE0NywgMTMsIDI2LCAxNywgMTQ5LCAxMywgMjYsIDE3LCAxNzAsIDEzLCAyNiwgMTcsIDE5NSwgCisgICAgMTMsIDI2LCAxNywgMjEzLCAxMTEsIDEzLCAyNiwgMTcsIDE5OSwgMTMsIDI2LCAxNywgMjIyLCA2MywgMTMsIDE2OSwgMTcsIAorICAgIDIwMiwgODQsIDEzLCAxNjksIDE3LCAxMDUsIDEzLCAxNjksIDE3LCAxMDgsIDEzLCAxNjksIDE3LCAxNDcsIDEzLCAxNjksIAorICAgIDE3LCAxNDksIDEzLCAxNjksIDE3LCAxNzAsIDEzLCAxNjksIDE3LCAxOTUsIDEzLCAxNjksIDE3LCAyMTMsIDExMSwgMTMsIAorICAgIDE2OSwgMTcsIDE5OSwgMTMsIDE2OSwgMTcsIDIyMiwgNjMsIDEzLCA0MSwgMTcsIDIwMiwgODQsIDEzLCA0MSwgMTcsIDEwNSwgCisgICAgMTMsIDQxLCAxNywgMTA4LCAxMywgNDEsIDE3LCAxNDcsIDEzLCA0MSwgMTcsIDE0OSwgMTMsIDQxLCAxNywgMTcwLCAxMywgCisgICAgNDEsIDE3LCAxOTUsIDEzLCA0MSwgMTcsIDIxMywgMTExLCAxMywgNDEsIDE3LCAxOTksIDEzLCA0MSwgMTcsIDIyMiwgNjMsIAorICAgIDEzLCA0MSwgMjYsIDE3LCAyMDIsIDg0LCAxMywgNDEsIDI2LCAxNywgMTA1LCAxMywgNDEsIDI2LCAxNywgMTA4LCAxMywgCisgICAgNDEsIDI2LCAxNywgMTQ3LCAxMywgNDEsIDI2LCAxNywgMTQ5LCAxMywgNDEsIDI2LCAxNywgMTcwLCAxMywgNDEsIDI2LCAKKyAgICAxNywgMTk1LCAxMywgNDEsIDI2LCAxNywgMjEzLCAxMTEsIDEzLCA0MSwgMjYsIDE3LCAxOTksIDEzLCA0MSwgMjYsIDE3LCAKKyAgICAyMjIsIDYzLCAxMywgMjI0LCA0MSwgMTcsIDIwMiwgODQsIDEzLCAyMjQsIDQxLCAxNywgMTA1LCAxMywgMjI0LCA0MSwgMTcsIAorICAgIDEwOCwgMTMsIDIyNCwgNDEsIDE3LCAxNDcsIDEzLCAyMjQsIDQxLCAxNywgMTQ5LCAxMywgMjI0LCA0MSwgMTcsIDE3MCwgCisgICAgMTMsIDIyNCwgNDEsIDE3LCAxOTUsIDEzLCAyMjQsIDQxLCAxNywgMjEzLCAxMTEsIDEzLCAyMjQsIDQxLCAxNywgMTk5LCAKKyAgICAxMywgMjI0LCA0MSwgMTcsIDIyMiwgNjMsIDIxLCAxMjgsIDIzMSwgMzUsIDIxLCAyMzcsIDEyMCwgMjMxLCAzNSwgMjEsIAorICAgIDIzNywgMTE2LCAyMzEsIDM1LCAyMSwgMjM3LCAxMDUsIDIzMSwgMzUsIDIxLCAyMzcsIDEwOSwgMjMxLCAzNSwgMjEsIDIzNywgCisgICAgMTIyLCAyMzEsIDM1LCAyMSwgMTI4LCAxMjIsIDI0OCwgMTE3LCAyMSwgMjM3LCAxMjAsIDEyMiwgMjQ4LCAxMTcsIDIxLCAKKyAgICAxMjgsIDE0OCwgMjA2LCAyNDgsIDEyMiwgMjQ4LCAxMTcsIDIxLCAxMjgsIDEyMiwgMjE2LCAxODgsIDIyOSwgMjksIDIxLCAKKyAgICAxMjgsIDEyMiwgMjQ1LCA5NywgMjEsIDEyOCwgMTIyLCAyMzYsIDIzNSwgMjEsIDEyOCwgMTIyLCAyMzYsIDIzNiwgMjI3LCAKKyAgICAwLCAyMSwgMjM3LCAxMjAsIDEyMiwgMjM2LCAyMzcsIDIxLCAxMjgsIDEyMiwgMjI0LCAxNDgsIDIxLCAyMzcsIDEyMCwgCisgICAgMTIyLCAyMjQsIDE0OCwgMjEsIDEyOCwgMTIyLCAxMDEsIDI0OCwgMTE3LCAyMSwgMTI4LCAxMjIsIDEwMSwgMjE2LCAxODgsIAorICAgIDIyOSwgMjgsIDIxLCAxMjgsIDEyMiwgMTAxLCAyMzYsIDIzNSwgMjEsIDEyOCwgMTIyLCAxMTIsIDEwMSwgMjM2LCAyMzUsIAorICAgIDIxLCAxMjgsIDEyMiwgMjM2LCAyMzYsIDEwMSwgMjA2LCAyMjQsIDIxLCAxMjgsIDEyMiwgMTAxLCAyNDUsIDIwNywgMjEsIAorICAgIDEyOCwgMTIyLCAxMDEsIDI0NSwgMjA4LCAxMjIsIDI0OCwgMTE3LCAyMSwgMTI4LCAxMjIsIDEwMSwgMjQ1LCAyMDgsIDEwMSwgCisgICAgMjQ4LCAxMTcsIDIxLCAxMjgsIDEyMiwgMTAxLCAyNDUsIDIwOCwgMjQ1LCA5NywgMjEsIDEyOCwgMTIyLCAxMDEsIDI0NSwgCisgICAgMjA4LCAyMzYsIDIzNSwgMjEsIDEyOCwgMTIyLCAxMDEsIDI0NSwgMTI3LCAyMSwgMjM3LCAxMjAsIDEyMiwgMTAxLCAyNDUsIAorICAgIDEyNywgMjEsIDEyOCwgMTAxLCAyNDgsIDExOCwgMTE1LCAyMzEsIDM1LCAyMSwgMTI4LCAxMjIsIDI0OCwgMTE4LCAxMTUsIAorICAgIDIyNCwgMTQ4LCAyMSwgMTI4LCAxMjIsIDEwMSwgMjA5LCAyMSwgMjEsIDIzNywgMTIwLCAxMjIsIDEwMSwgMjA5LCAyMSwgCisgICAgMjEsIDEyOCwgMTIyLCAxMDEsIDIxMSwgNTMsIDE0OCwgMjQ4LCAxMTcsIDIxLCAxMjgsIDEyMiwgMTAxLCAyNDgsIDExOCwgCisgICAgMTQ4LCAyMTEsIDUyLCAyMSwgMTI4LCAxMjIsIDEwMSwgMTQ4LCAyNDgsIDExNywgMjEsIDEyOCwgMTIyLCAxMDEsIDIzNiwgCisgICAgMjM2LCAyMTEsIDE4NiwgMTQ4LCAyMTIsIDE1NSwgMjEsIDEyOCwgMTIyLCAxMTIsIDEwMSwgMjM2LCAyMzYsIDE0OCwgMjEyLCAKKyAgICAxNTUsIDIxLCAxMjgsIDEyMiwgMTEyLCAxMDEsIDIzNiwgMjM2LCAxNDgsIDI0NSwgMjA3LCAyMSwgMTI4LCAxMjIsIDIzNiwgCisgICAgMjM2LCAxMDEsIDExMiwgMTQ4LCAyMTIsIDE1NSwgMjEsIDEyOCwgMTIyLCAxMDEsIDExMiwgMjExLCAxODYsIDE0OCwgMjM5LCAKKyAgICAxNTEsIDIxLCAxMjgsIDEyMiwgMTAxLCAxNDgsIDI0NSwgOTcsIDIxLCAxMjgsIDEyMiwgMTAxLCAxNDgsIDI0NiwgNjAsIAorICAgIDIxLCAxMjgsIDEyMiwgMTAxLCAxNDgsIDIzNiwgMTE0LCAyMSwgMTI4LCAxMjIsIDEwMSwgMTQ4LCAyMzYsIDIzNSwgMjEsIAorICAgIDEyOCwgMTQ4LCAyNDgsIDEwNCwgMTIyLCAxMDEsIDIxMSwgNTIsIDIxLCAxMjgsIDEyMiwgMTAxLCAyNDUsIDIwOCwgMTQ4LCAKKyAgICAyMTIsIDE1NSwgMjEsIDEyOCwgMTIyLCAxMDEsIDI0NSwgMjA4LCAxNDgsIDIxMiwgMTU2LCAyNDUsIDIwNywgMjEsIDEyOCwgCisgICAgMTIyLCAxMDEsIDI0NSwgMjA4LCAxNDgsIDIxMiwgMTU2LCAyNDgsIDExNywgMjEsIDEyOCwgMTAxLCAxNDgsIDIzNiwgMTE1LCAKKyAgICAxMjIsIDIwNiwgMjI0LCAyMSwgMTI4LCAxMjIsIDE0OCwgMjM2LCAxMTUsIDEwMSwgMjA2LCAyMjQsIDIxLCAxMjgsIDEyMiwgCisgICAgMTAxLCAyNDUsIDIwOCwgMjM2LCAyMzYsIDE0OCwgMjEyLCAxNTUsIDIxLCAxMjgsIDEyMiwgMTAxLCAyNDUsIDEyOCwgMTQ4LCAKKyAgICAyMTIsIDE1NSwgMjEsIDEyOCwgMTIyLCAxMDEsIDI0NSwgMjA4LCAxNDgsIDIzOSwgMTUxLCAyMSwgMTI4LCAxMjIsIDEwMSwgCisgICAgMjQ1LCAyMDgsIDI0NSwgOTgsIDE0OCwgMjM5LCAxNTEsIDIxLCAxMjgsIDEwMSwgMTQ4LCAyNDUsIDk4LCAxMjIsIDIwNiwgCisgICAgMjI0LCAyMSwgMTI4LCAxMjIsIDE0OCwgMjQ1LCA5OCwgMTAxLCAyMDYsIDIyNCwgMjEsIDEyOCwgMTAxLCAxNDgsIDQzLCAKKyAgICAxMjIsIDIwNiwgMjI0LCAyMSwgMTI4LCAxMDEsIDE0OCwgNDMsIDEyMiwgMjM2LCAyMzUsIDIxLCAxMjgsIDEyMiwgMTQ4LCAKKyAgICAyNTAsIDIxNiwgMjE5LCAyMTIsIDEwMSwgMjA2LCAyMjQsIDIxLCAxMjgsIDEyMiwgMTQ4LCAyNTAsIDIxNiwgMjMxLCA1MCwgCisgICAgMTAxLCAyMDYsIDIyNCwgMjEsIDEyOCwgMTIyLCAxNDgsIDQzLCAxMDEsIDIwNiwgMjI0LCAyMSwgMTI4LCAxMjIsIDEwMSwgCisgICAgMTQ4LCAyNDUsIDIwOCwgMjM2LCAyMzUsIDIxLCAxMjgsIDEyMiwgMTAxLCAxNDgsIDI1MCwgMjE2LCAyMTksIDIxMSwgMjEsIAorICAgIDEyOCwgMTIyLCAxMDEsIDE0OCwgMjUwLCAyMTUsIDIxLCAxMjgsIDEwMSwgMTQ4LCAyNTAsIDIxNiwgMjE5LCAyMTIsIDEyMiwgCisgICAgMjA2LCAyMjQsIDIxLCAxMjgsIDEwMSwgMTQ4LCAyNTAsIDIxNiwgMjE5LCAyMTIsIDEyMiwgMjQ1LCAxMjcsIDIxLCAxMjgsIAorICAgIDEwMSwgMTQ4LCAyNTAsIDIxNiwgMTIyLCAyMDYsIDIyNCwgMjEsIDEyOCwgMTIyLCAxNDgsIDIzNiwgMTE1LCAxMDEsIDIzNiwgCisgICAgMjM1LCAyMSwgMjM3LCAxMTEsIDIzOSwgMTQ3LCAyMzksIDI1MywgMjEsIDIzNywgMTExLCAyMzksIDE0NywgMjM5LCAyNTQsIAorICAgIDI0OCwgMTE3LCAyMSwgMjM3LCAxMTEsIDIzOSwgMTQ3LCAyMzksIDI1NCwgMjM2LCAyMzUsIDIxLCAyMzcsIDExMSwgMjM5LCAKKyAgICAxNDcsIDIzOSwgMjU0LCAyNDUsIDIwNywgMjEsIDIzNywgMTExLCAyMzksIDE0NywgMjM5LCAyNTQsIDI0NSwgMjA4LCAyMTEsIAorICAgIDE5MywgMjEsIDIzNywgMTE4LCAyMzksIDE0NywgMjM5LCAyNTQsIDI0NSwgMjA3LCAyMSwgMTI4LCAyMzksIDE0NywgMjM5LCAKKyAgICAyNTQsIDI0NSwgMjA4LCAyNDgsIDExNywgMjEsIDIzNywgMTA5LCAyMzksIDE0NywgMjM5LCAyNTQsIDI0NSwgMjA3LCAyMSwgCisgICAgMjM3LCAxMTEsIDIzOSwgMjMzLCAyMzksIDI1NCwgMjExLCAxODUsIDIxLCAyMzcsIDExMSwgMjM3LCA0NiwgMjM5LCAyMzMsIAorICAgIDIzOSwgMjU0LCAyMTEsIDE4NSwgMjEsIDIzNywgMTExLCAyMzksIDIzMywgMjM5LCAyNTQsIDIxMSwgMTg2LCAyMzksIDE0NywgCisgICAgMjQ4LCAxMTcsIDIxLCAyMzcsIDExMSwgMjM3LCA0NiwgMjM5LCAyMzMsIDIzOSwgMjU0LCAyMTEsIDE4NiwgMjM5LCAxNDcsIAorICAgIDI0OCwgMTE3LCAyMSwgMjM3LCAxMTEsIDIzOSwgMjMzLCAyMzksIDI1NCwgMjExLCAxODYsIDI0OCwgMTE3LCAyMSwgMjM3LCAKKyAgICAxMTEsIDIzNywgNDYsIDIzOSwgMjMzLCAyMzksIDI1NCwgMjExLCAxODYsIDI0OCwgMTE3LCAyMSwgMjM3LCAxMTEsIDIzOSwgCisgICAgMjMzLCAyMzksIDI1NCwgMjExLCAxODYsIDE0OCwgMjM5LCAxNTEsIDIxLCAyMzcsIDExNiwgMjM5LCAyMzMsIDIzOSwgMjU0LCAKKyAgICAyMTEsIDE4NSwgMjEsIDIzNywgMTE2LCAyMzksIDIzMywgMjM5LCAyNTQsIDIxMSwgMTg2LCAyMjAsIDgsIDIxLCAyMzcsIAorICAgIDEwOSwgMjM5LCAyMzMsIDIzOSwgMjU0LCAyMTEsIDE4NiwgMjIwLCA4LCAyMSwgMjM3LCAxMDUsIDIzOSwgMjMzLCAyMzksIAorICAgIDI1NCwgMjExLCAxODUsIDIxLCAyMzcsIDExMSwgMjM5LCAyMzMsIDIzOSwgMjU0LCAyMTEsIDE4NiwgMjM2LCAyMzUsIDIxLCAKKyAgICAyMzcsIDExMSwgMjM5LCAyMzMsIDIzOSwgMjU0LCAyMTEsIDE4NiwgMjM2LCAyMzYsIDE0OCwgMjEyLCAxNTUsIDIxLCAyMzcsIAorICAgIDExMSwgMjM5LCAyMzMsIDIzOSwgMjU0LCAyMTEsIDE4NiwgMjM2LCAyMzYsIDIyMSwgMTkyLCAyMDksIDIxLCAyMSwgMjM3LCAKKyAgICAxMTAsIDIxLCAyMzcsIDExMSwgMjQ4LCAxMDQsIDIxOSwgMTM1LCAyNDAsIDk0LCAyMSwgMjM3LCAxMTEsIDIzNywgNDUsIAorICAgIDIxLCAyMzcsIDExMSwgMTQ4LCAyMTIsIDE1NSwgMjEsIDIzNywgMTExLCAyMzcsIDQ2LCAxNDgsIDIxMiwgMTU1LCAyMSwgCisgICAgMjM3LCAxMTEsIDE0OCwgMjQ4LCAxMTcsIDIxLCAyMzcsIDExMSwgMTQ4LCAyMzksIDE1MSwgMjEsIDIzNywgMTExLCAyMTEsIAorICAgIDE5NCwgMTIyLCAxNDgsIDIxMiwgMTU1LCAyMSwgMjM3LCAxMTEsIDIxMSwgMTk0LCAyNDYsIDIxNywgMjEsIDIzNywgMTExLCAKKyAgICAyMTEsIDE5NCwgMjQ2LCAyMTgsIDE0OCwgMjEyLCAxNTUsIDIxLCAyMzcsIDExMSwgMjExLCAxOTQsIDI0NiwgMjE4LCAxNDgsIAorICAgIDIxMiwgMTU2LCAyNDgsIDExNywgMjEsIDIzNywgMTExLCAyMTEsIDE5NCwgMjI3LCA4NSwgMjEsIDIzNywgMTE3LCAyMSwgCisgICAgMjM3LCAxMTgsIDE0OCwgMjEyLCAxNTUsIDIxLCAyMzcsIDExOCwgMjIxLCAxOTIsIDIwOSwgMjEsIDIxLCAyMzcsIDExOCwgCisgICAgMTQ4LCAyMzksIDE1MSwgMjEsIDIzNywgMTA3LCAyNDUsIDk0LCAyMSwgMjM3LCAxMDYsIDIxLCAyMzcsIDExNiwgMjIwLCA4LCAKKyAgICAyMSwgMjM3LCAxMTUsIDIxLCAyMzcsIDExNiwgMTcxLCAxNDgsIDIxMiwgMTU1LCAyMSwgMjM3LCAxMTYsIDE0OCwgMjEyLCAKKyAgICAxNTUsIDIxLCAyMzcsIDExNiwgMTcxLCAyMjEsIDE5MiwgMjA5LCAyMSwgMjEsIDIzNywgMTE2LCAyMjEsIDE5MiwgMjA5LCAKKyAgICAyMSwgMjEsIDIzNywgMTE2LCAxNzEsIDE0OCwgMjM5LCAxNTEsIDIxLCAyMzcsIDExNiwgMTQ4LCAyMzksIDE1MSwgMjEsIAorICAgIDIzNywgMTE0LCAyMjAsIDgsIDIxLCAyMzcsIDExMywgMjEsIDIzNywgMTE5LCAyMSwgMjM3LCAxMDQsIDIxLCAyMzcsIDEwNSwgCisgICAgMTQ4LCAyMTIsIDE1NSwgMjEsIDIzNywgMTA1LCAyMjEsIDE5MiwgMjA5LCAyMSwgMjEsIDIzNywgMTA1LCAxNDgsIDIzOSwgCisgICAgMTUxLCAyMSwgMjM3LCAxMDksIDIyMCwgOCwgMjEsIDIzNywgMTA5LCAxNzEsIDE0OCwgMjM5LCAxNTEsIDIxLCAyMzcsIAorICAgIDEwOCwgMjEsIDIzNywgMTA5LCAyMTIsIDM2LCAyMSwgMjM3LCAxMDksIDE3MSwgMTQ4LCAyMTIsIDE1NSwgMjEsIDIzNywgCisgICAgMTA5LCAxNDgsIDIxMiwgMTU1LCAyMSwgMjM3LCAxMDksIDE3MSwgMjIxLCAxOTIsIDIwOSwgMjEsIDIxLCAyMzcsIDEwOSwgCisgICAgMjIxLCAxOTIsIDIwOSwgMjEsIDIxLCAyMzcsIDEwOSwgMTQ4LCAyMTIsIDE1NiwgMjA4LCAxMjcsIDIzMSwgMzUsIDIxLCAKKyAgICAyMzcsIDEwOSwgMTQ4LCAyNDgsIDEwNCwgMTAxLCAyMTUsIDI1MiwgMjEsIDIzNywgMTIxLCAyMSwgMTI4LCAxMjIsIDEwMSwgCisgICAgMjE1LCAyNTIsIDIxLCAyMzcsIDEyMCwgMTIyLCAxMDEsIDIxNSwgMjUyLCAyMSwgMjM3LCAxMDksIDEyMiwgMTAxLCAyMTUsIAorICAgIDI1MiwgMjEsIDIzNywgMTIyLCAxMjIsIDEwMSwgMjE1LCAyNTIsIDIxLCAyMzcsIDEwOSwgMjI3LCA4NSwgMjEsIDEyOCwgCisgICAgMTIyLCAxMDEsIDIxNSwgMjUzLCAyNDgsIDExNywgMjEsIDEyOCwgMTIyLCAxMDEsIDIxNSwgMjUzLCAyNDUsIDIwNywgMjEsIAorICAgIDIzNywgMTA5LCAxMjIsIDEwMSwgMjE1LCAyNTMsIDI0NSwgMjA3LCAyMSwgMTI4LCAyMjcsIDg2LCAyNDIsIDcwLCAyMSwgCisgICAgMTI4LCAyMjcsIDg2LCAxMjEsIDIxNSwgMjQ4LCAyMTEsIDUyLCAyMSwgMTI4LCAyMjcsIDg2LCAxMjEsIDIxNSwgMjQ4LCAKKyAgICAyNDUsIDg1LCAyMSwgMTI4LCAyMjcsIDg2LCAxMjEsIDIxOSwgMjIwLCAyNDYsIDYwLCAyMSwgMTI4LCAyMjcsIDg2LCAyMDYsIAorICAgIDIyNCwgMjEsIDEyOCwgMTQ4LCAyMDYsIDI0OCwgMjI3LCA4NiwgMjA2LCAyMjQsIDIxLCAyMzcsIDEyMCwgMjI3LCA4NiwgCisgICAgMjA2LCAyMjQsIDIxLCAyMzcsIDEwNSwgMjI3LCA4NiwgMjA2LCAyMjQsIDIxLCAyMzcsIDEyMiwgMjI3LCA4NiwgMjA2LCAKKyAgICAyMjQsIDIxLCAxMjgsIDIyNywgODYsIDIxNiwgMTg4LCAyMjksIDI5LCAyMSwgMTI4LCAyMjcsIDg2LCAyNDgsIDExNywgMjEsIAorICAgIDEyOCwgMjI3LCA4NiwgMjA4LCAxMjgsIDIwOSwgMjEsIDIxLCAxMjgsIDIyNywgODYsIDIwOSwgMjEsIDIxLCAyMzcsIDEwOSwgCisgICAgMjI3LCA4NiwgMjA5LCAyMSwgMjEsIDEyOCwgMjI3LCA4NiwgMTIyLCAyMDksIDIxLCAyMSwgMjM3LCAxMDksIDIyNywgODYsIAorICAgIDEyMiwgMjA5LCAyMSwgMjEsIDIzNywgMTIyLCAyMjcsIDg2LCAxMjIsIDE0OCwgMTIyLCAxNDgsIDIxOSwgMjExLCAyMSwgCisgICAgMjM3LCAxMjIsIDIyNywgODYsIDEyMiwgMTQ4LCAxMjIsIDIwOSwgMjEsIDIxLCAxMjgsIDIyNywgODYsIDIzMSwgMzUsIDIxLCAKKyAgICAyMzcsIDEyMCwgMjI3LCA4NiwgMjMxLCAzNSwgMjEsIDIzNywgMTA5LCAyMjcsIDg2LCAyMzEsIDM1LCAyMSwgMjM3LCAxMjIsIAorICAgIDIyNywgODYsIDIzMSwgMzUsIDIxLCAxMjgsIDEyMiwgMTAxLCAyMjcsIDg1LCAyMSwgMjM3LCAxMjAsIDEyMiwgMTAxLCAKKyAgICAyMjcsIDg1LCAyMSwgMjM3LCAxMDksIDEyMiwgMTAxLCAyMjcsIDg1LCAyMSwgMjM3LCAxMDksIDIxNSwgMjUyLCAyMSwgCisgICAgMjM3LCAxMjIsIDEyMiwgMTAxLCAyMjcsIDg1LCAyMSwgMTI4LCAxMjIsIDEwMSwgMjQ1LCAxMzEsIDIyNywgODUsIDIxLCAKKyAgICAyMzcsIDEyMCwgMTIyLCAxMDEsIDI0NSwgMTMxLCAyMjcsIDg1LCAyMSwgMTI4LCAyMTUsIDI1MywgMjQyLCA3MCwgMjEsIAorICAgIDIzNywgMTA5LCAyMTUsIDI1MywgMTIxLCAxMjIsIDE0OCwgMjM2LCAxMTYsIDIyNCwgMTQ4LCAyMSwgMjM3LCAxMjIsIDIxNSwgCisgICAgMjUzLCAxMjEsIDEwMSwgMTQ4LCAxMjIsIDI0NSwgMTMwLCAyMSwgMTI4LCAyMTUsIDI1MywgMjA2LCAyMjQsIDIxLCAxMjgsIAorICAgIDIxNSwgMjUzLCAyMTYsIDE4OCwgMjI5LCAyOSwgMjEsIDEyOCwgMjE1LCAyNTMsIDIyNywgODUsIDIxLCAyMzcsIDEyMCwgCisgICAgMjE1LCAyNTMsIDIyNywgODUsIDIxLCAyMzcsIDEwNSwgMjE1LCAyNTMsIDIyNywgODUsIDIxLCAyMzcsIDEyMiwgMjE1LCAKKyAgICAyNTMsIDIyNywgODUsIDIxLCAxMjgsIDIxNSwgMjUzLCAyMjQsIDE0OCwgMjEsIDEyOCwgMjE1LCAyNTMsIDEwMSwgMjQ1LCAKKyAgICAyMDcsIDIxLCAxMjgsIDIxNSwgMjUzLCAxMDEsIDIxNiwgMTg4LCAyMjksIDI4LCAyMSwgMTI4LCAyMTUsIDI1MywgMjMxLCAKKyAgICAzNSwgMjEsIDEyOCwgMjE1LCAyNTMsIDIwOSwgMjEsIDIxLCAyMzcsIDEwNywgMjE1LCAyNTMsIDIwOSwgMjEsIDIxLCAxMjgsIAorICAgIDEyMiwgMjE1LCAyNTMsIDIyNywgODUsIDIxLCAyMzcsIDEyMCwgMTIyLCAyMTUsIDI1MywgMjI3LCA4NSwgMjEsIDIzNywgCisgICAgMTE0LCAxMjIsIDIxNSwgMjUzLCAyMjcsIDg2LCAyMjAsIDMxLCAyMSwgMjM3LCAxMDcsIDEyMiwgMjE1LCAyNTMsIDIyNywgCisgICAgODYsIDIxOSwgMjExLCAyMSwgMjM3LCAxMDcsIDEyMiwgMjE1LCAyNTMsIDIyNywgODYsIDIzMSwgNDksIDIxLCAyMzcsIAorICAgIDEwNywgMTIyLCAyMTUsIDI1MywgMjI3LCA4NiwgMjA2LCAyNDcsIDIxLCAyMzcsIDExNiwgMTIyLCAyMTUsIDI1MywgMjI3LCAKKyAgICA4NSwgMjEsIDIzNywgMTA5LCAxMjIsIDIxNSwgMjUzLCAyMjcsIDg1LCAyMSwgMjM3LCAxMjIsIDEyMiwgMjE1LCAyNTMsIAorICAgIDIyNywgODYsIDIxOSwgMjExLCAyMSwgMjM3LCAxMjIsIDEyMiwgMjE1LCAyNTMsIDIyNywgODUsIDIxLCAxMjgsIDEwMSwgCisgICAgMjQyLCA3MCwgMjEsIDIzNywgMTA5LCAyMjQsIDE0OCwgMjEsIDEyOCwgMTAxLCAyMDYsIDIyNCwgMjEsIDIzNywgMTIwLCAKKyAgICAxMDEsIDIwNiwgMjI0LCAyMSwgMTI4LCAxMDEsIDIxNiwgMTg4LCAyMjksIDI5LCAyMSwgMTI4LCAxMDEsIDExMiwgMTQ4LCAKKyAgICAyMTIsIDE1NSwgMjEsIDIzNywgMTA3LCAxMDEsIDIwOSwgMjEsIDIxLCAxMjgsIDEwMSwgMTQ4LCAyMjcsIDg1LCAyMSwgCisgICAgMTI4LCAxMDEsIDIyNywgODUsIDIxLCAxMjgsIDEwMSwgMjE1LCAyNTMsIDIyNywgODUsIDIxLCAyMzcsIDEyMCwgMTAxLCAKKyAgICAyMTUsIDI1MywgMjI3LCA4NSwgMjEsIDIzNywgMTE0LCAxMDEsIDIxNSwgMjUzLCAyMjcsIDg2LCAyMjAsIDMxLCAyMSwgCisgICAgMjM3LCAxMTYsIDEwMSwgMjE1LCAyNTMsIDIyNywgODUsIDIxLCAyMzcsIDEwOSwgMTAxLCAyMTUsIDI1MywgMjI3LCA4NSwgCisgICAgMjEsIDIzNywgMTIyLCAxMDEsIDIxNSwgMjUzLCAyMjcsIDg2LCAyMTksIDIxMSwgMjEsIDIzNywgMTIyLCAxMDEsIDIxNSwgCisgICAgMjUzLCAyMjcsIDg2LCAyMzEsIDQ5LCAyMSwgMjM3LCAxMjIsIDEwMSwgMjE1LCAyNTMsIDIyNywgODUsIDIxLCAyMzcsIAorICAgIDEyMCwgMTAxLCAyMTUsIDI1MywgMjI3LCA4NiwgMjQ4LCAxMTcsIDIxLCAyMzcsIDExOCwgMTAxLCAyMTUsIDI1MywgMjI3LCAKKyAgICA4NiwgMjQ1LCAyMDcsIDIxLCAyMzcsIDExOCwgMTAxLCAyMTUsIDI1MywgMjI3LCA4NiwgMjQ1LCAyMDgsIDIxMiwgMTU1LCAKKyAgICAyMSwgMjM3LCAxMDcsIDEwMSwgMjE1LCAyNTMsIDIyNywgODYsIDI0NSwgMjA4LCAyMTksIDIxMSwgMjEsIDIzNywgMTA3LCAKKyAgICAxMDEsIDIxNSwgMjUzLCAyMjcsIDg2LCAyNDUsIDIwOCwgMjMxLCA0OSwgMjEsIDIzNywgMTA3LCAxMDEsIDIxNSwgMjUzLCAKKyAgICAyMjcsIDg2LCAyNDUsIDIwNywgMjEsIDIzNywgMTA5LCAxMjIsIDIzNiwgMjM1LCAyMSwgMTI4LCAxMjIsIDE0OCwgMjEyLCAKKyAgICAxNTUsIDIxLCAyMzcsIDEwOSwgMTIyLCAxNDgsIDIxMiwgMTU1LCAyMSwgMTI4LCAxMjIsIDE0OCwgMjEyLCAxNTYsIDE0OCwgCisgICAgMjQzLCAyMjcsIDIxLCAxMjgsIDEyMiwgMTQ4LCAyMTIsIDE1NiwgMTQ4LCAyNDUsIDIwNywgMjEsIDEyOCwgMTIyLCAxNDgsIAorICAgIDIxMiwgMTU2LCAxNDgsIDI0OCwgMTE3LCAyMSwgMTI4LCAxMjIsIDE0OCwgMjEyLCAxNTYsIDEyMiwgMjQ4LCAxMTcsIDIxLCAKKyAgICAxMjgsIDEyMiwgMTQ4LCAyMTIsIDE1NiwgMjQ3LCAyNTEsIDI0OCwgMTE3LCAyMSwgMTI4LCAxMjIsIDE0OCwgMjEyLCAxNTYsIAorICAgIDEyMiwgMjM2LCAyMzcsIDIxLCAxMjgsIDEyMiwgMTQ4LCAyMzksIDE1MiwgMTIyLCAyMTEsIDUyLCAyMSwgMTI4LCAxMjIsIAorICAgIDE0OCwgMjM5LCAxNTIsIDEyMiwgMjQ4LCAxMTcsIDIxLCAxMjgsIDEyMiwgMTQ4LCAxMTMsIDIxLCAxMjgsIDEyMiwgMTQ4LCAKKyAgICAyNDUsIDk0LCAyMSwgMTI4LCAxMjIsIDE0OCwgMjQ1LCA4OCwgMTQ4LCAyMzEsIDYsIDIxLCAyMzcsIDExOCwgMTIyLCAxNDgsIAorICAgIDI0NSwgODgsIDE0OCwgMjMxLCA2LCAyMSwgMTI4LCAxMjIsIDE0OCwgMjQ1LCA4OCwgMTQ4LCAyMDYsIDI0NywgMjEsIDEyOCwgCisgICAgMTIyLCAxNDgsIDI0NiwgNjEsIDIxLCAyMzcsIDExNiwgMTIyLCAyMDksIDIxLCAyMSwgMjM3LCAxMTYsIDEyMiwgMTQ4LCAKKyAgICAyMjAsIDgsIDIxLCAyMzcsIDEwOSwgMTIyLCAxNDgsIDIyMCwgOCwgMjEsIDIzNywgMTA5LCAxMjIsIDE0OCwgMjI4LCA3LCAKKyAgICAyMSwgMjM3LCAxMDksIDEyMiwgMjA5LCAyMSwgMjEsIDIzNywgMTA5LCAxMjIsIDE0OCwgMjEyLCAzNiwgMjEsIDIzNywgCisgICAgMTIyLCAxMjIsIDE0OCwgMjE5LCAyMTEsIDIxLCAyMzcsIDEyMiwgMTIyLCAxNDgsIDIzMSwgNDksIDIxLCAyMzcsIDEyMiwgCisgICAgMTIyLCAyMDksIDIxLCAyMSwgMTI4LCAyMDksIDIxLCAyMSwgMTI4LCAxNDgsIDIzNywgNDUsIDIxLCAxMjgsIDE0OCwgMjEyLCAKKyAgICAxNTYsIDI0MywgMjI3LCAyMSwgMTI4LCAxNDgsIDIxMiwgMTU2LCAyNDUsIDIwNywgMjEsIDEyOCwgMTQ4LCAyMTIsIDE1NiwgCisgICAgMjQ4LCAxMTcsIDIxLCAxMjgsIDE0OCwgMjM5LCAxNTEsIDIxLCAxMjgsIDE0OCwgMjQ4LCAxMDQsIDEyMiwgMjI0LCAxNDgsIAorICAgIDIxLCAxMjgsIDE0OCwgMjQ4LCAxMDQsIDEwMSwgMjE1LCAyNTIsIDIxLCAxMjgsIDE0OCwgMjQ4LCAxMDQsIDIxNSwgMjUzLCAKKyAgICAyMjcsIDg1LCAyMSwgMTI4LCAxNDgsIDIwNiwgMjQ4LCAxMjAsIDIzOSwgMjUzLCAyMSwgMTI4LCAxNDgsIDExNSwgMTIwLCAKKyAgICAyMzksIDI1MywgMjEsIDEyOCwgMTQ4LCAyMDYsIDI0OCwgMTI2LCAyMzksIDI1MywgMjEsIDEyOCwgMTQ4LCAyMDYsIDI0OCwgCisgICAgMjM5LCAxNDcsIDIzOSwgMjUzLCAyMSwgMTI4LCAxNDgsIDExNSwgMjM5LCAxNDcsIDIxNiwgMTg4LCAyMjksIDI4LCAyMSwgCisgICAgMjM3LCAxMTIsIDIxLCAxMjgsIDIzNywgNDUsIDIxLCAyMDgsIDEyOSwgMjEyLCAxMTksIDIxLCAyMDgsIDEyOSwgMjIzLCAKKyAgICAyMjUsIDIxLCAyMDgsIDEyOSwgMjQ4LCAxMDMsIDIxLCAyMzgsIDIsIDIxMiwgMTE5LCAyMSwgMjM4LCAyLCAyMjMsIDIyNSwgCisgICAgMjEsIDIzOCwgMiwgMjQ4LCAxMDMsIDIxLCAyMTEsIDM3LCAyMTIsIDExOSwgMjEsIDIxMSwgMzcsIDIyMywgMjI1LCAyMSwgCisgICAgMjExLCAzNywgMjQ4LCAxMDMsIDIxLCAyNDcsIDIwMSwgMjEyLCAxMTksIDIxLCAyNDcsIDIwMSwgMjIzLCAyMjUsIDIxLCAKKyAgICAyNDcsIDIwMSwgMjQ4LCAxMDMsIDIxLCAyMTUsIDE0MywgMjEyLCAxMTksIDIxLCAyMTUsIDE0MywgMjIzLCAyMjUsIDIxLCAKKyAgICAyMTUsIDE0MywgMjQ4LCAxMDMsIDIxLCAyMTAsIDE4OSwgMjEwLCAxMDIsIDIxLCAyMTAsIDE4OSwgMjQ4LCAxMDMsIDIxLCAKKyAgICAyMTEsIDE3MywgMjI4LCA4LCAyMTIsIDExOSwgMjEsIDIxMSwgMTczLCA1LCAyMTIsIDExOSwgMjEsIDIxMSwgMTczLCAyMjgsIAorICAgIDgsIDIyMywgMjI1LCAyMSwgMjExLCAxNzMsIDUsIDIyMywgMjI1LCAyMSwgMjExLCAxNzMsIDIxMywgMTI2LCAyMSwgMjM5LCAKKyAgICAyMDgsIDIyOCwgOCwgMjEyLCAxMTksIDIxLCAyMzksIDIwOCwgNSwgMjEyLCAxMTksIDIxLCAyMzksIDIwOCwgMjI4LCA4LCAKKyAgICAyMjMsIDIyNSwgMjEsIDIzOSwgMjA4LCA1LCAyMjMsIDIyNSwgMjEsIDIzOSwgMjA4LCAyMTMsIDEyNiwgMjEsIDIxMSwgCisgICAgMTczLCAyMzksIDIwOCwgMjUwLCAyNTIsIDIxLCAyMjQsIDAsIDExMiwgMTIxLCAyMjgsIDcsIDIxLCAyMjQsIDAsIDExMiwgCisgICAgMTIxLCAyMTIsIDM2LCAyMSwgMjI0LCAwLCAxMTIsIDIxMywgMTI2LCAyMSwgMjI0LCAwLCAxMjEsIDIxMywgMTI2LCAyMSwgCisgICAgMjI0LCAwLCAxMTIsIDEyMSwgMjUwLCAyNTMsIDIyOCwgNywgMjEsIDIyNCwgMCwgMTEyLCAxMjEsIDI1MCwgMjUzLCAyMTIsIAorICAgIDM2LCAyMSwgMjI0LCAwLCAyMTIsIDE1NiwgMjA4LCAxNzMsIDIxMiwgMTU2LCAyMTQsIDE5MCwgMjEsIDIyMywgMjU1LCAKKyAgICAyNDAsIDMsIDI0NSwgMTk3LCAyMSwgMjI0LCAxLCAyNDAsIDMsIDI0NSwgMTk3LCAyMSwgMjIzLCAyNTUsIDIxMiwgMTIwLCAKKyAgICAyMTEsIDUzLCAyMTIsIDM2LCAyMSwgMjIzLCAyNTUsIDIxMiwgMTIwLCAyMTEsIDUzLCAyMjUsIDksIDIxLCAyMjMsIDI1NSwgCisgICAgMjEyLCAxMjAsIDIxMSwgNTMsIDIyOCwgNywgMjEsIDIyMywgMjU1LCAyMTIsIDEyMCwgMjExLCA1MywgMjI4LCA1LCAyMSwgCisgICAgMjIzLCAyNTUsIDIxMiwgMTIwLCAyMDMsIDIyMSwgMjM5LCAyMTEsIDIxLCAyMjMsIDI1NSwgNTIsIDIxMSwgNTIsIDIxLCAKKyAgICAyMjMsIDI1NSwgNTIsIDIwMywgMjIxLCAyMzksIDIxMSwgMjEsIDIyMywgMjU1LCA1MiwgMjUwLCAyNTIsIDIxLCAyMjMsIAorICAgIDI1NSwgNTIsIDI1MCwgMjUzLCAyMDMsIDIyMSwgMjM5LCAyMTEsIDIxLCAyMjMsIDI1NSwgMjQ1LCAxMzAsIDIxLCAyMjMsIAorICAgIDI1NSwgMjA4LCA3MCwgMjExLCA1MywgMjI0LCAzLCAyMSwgMjIzLCAyNTUsIDIwOCwgNzAsIDIwMywgMjIxLCAyMzksIDIxMSwgCisgICAgMjEsIDIyMywgMjU1LCAyMDgsIDcwLCAyNTAsIDI1MiwgMjEsIDIyMywgMjU1LCAyMDgsIDcwLCAyNTAsIDI1MywgMjAzLCAKKyAgICAyMjEsIDIzOSwgMjExLCAyMSwgMjIzLCAyNTUsIDI0OCwgMTIxLCAyMTIsIDM2LCAyMSwgMjIzLCAyNTUsIDI0OCwgMTIxLCAKKyAgICAyMjUsIDksIDIxLCAyMjMsIDI1NSwgMjQ4LCAxMjEsIDIyOCwgNywgMjEsIDIyMywgMjU1LCAyNDUsIDE2NiwgMjEyLCAzNiwgCisgICAgMjEsIDIyMywgMjU1LCAyNDUsIDE2NiwgMjI1LCA5LCAyMSwgMjIzLCAyNTUsIDI0NSwgMTY2LCAyMjgsIDcsIDIxLCAyMjMsIAorICAgIDI1NSwgMjQ1LCAxNjYsIDIxNSwgMTk2LCAyMSwgMjIzLCAyNTUsIDI0NiwgMTY5LCAyMTIsIDM2LCAyMSwgMjIzLCAyNTUsIAorICAgIDI0NiwgMTY5LCAyMjUsIDksIDIxLCAyMjMsIDI1NSwgMjQ2LCAxNjksIDIyOCwgNywgMjEsIDIyMywgMjU1LCA5OCwgMjEyLCAKKyAgICAzNiwgMjEsIDIyMywgMjU1LCA5OCwgMjI1LCA5LCAyMSwgMjIzLCAyNTUsIDk4LCAyMjgsIDcsIDIxLCAyMjMsIDI1NSwgCisgICAgMjAyLCAzMCwgMjEyLCAzNiwgMjEsIDIyMywgMjU1LCAyMDIsIDMwLCAyMjUsIDksIDIxLCAyMjMsIDI1NSwgMjAyLCAzMCwgCisgICAgMjI4LCA3LCAyMSwgMjIzLCAyNTUsIDIxOSwgMzAsIDIxMiwgMzYsIDIxLCAyMjMsIDI1NSwgMjE5LCAzMCwgMjI1LCA5LCAKKyAgICAyMSwgMjIzLCAyNTUsIDIxOSwgMzAsIDIyOCwgNywgMjEsIDIwOCwgOTksIDIxNSwgMTk0LCAyMTIsIDExOSwgMjEsIDIwOCwgCisgICAgOTksIDIxNSwgMTk0LCAyNDIsIDc4LCAyMSwgMjA4LCA5OSwgMjE1LCAxOTQsIDI1MCwgMjUyLCAyMSwgMjA4LCA5OSwgMjE1LCAKKyAgICAxOTUsIDIxMiwgMTE5LCAyMSwgMjA4LCA5OSwgMjE1LCAxOTUsIDI0MiwgNzgsIDIxLCAyMDgsIDk5LCAyMTUsIDE5NSwgCisgICAgMjUwLCAyNTIsIDIxLCAyMDgsIDk5LCAyMTMsIDcxLCAyMSwgMjA4LCA5OSwgMjUwLCAxMDcsIDIxMSwgMjAyLCAyMTIsIAorICAgIDExOSwgMjEsIDIwOCwgOTksIDI1MCwgMTA3LCAyMTEsIDIwMiwgMjQyLCA3OCwgMjEsIDIwOCwgOTksIDI1MCwgMTA3LCAKKyAgICAyMTEsIDIwMiwgMjA4LCA2OSwgMjEsIDIyNCwgMiwgMjUwLCAxMiwgMjEyLCAzNiwgMjEsIDIyNCwgMiwgMjUwLCAxMiwgCisgICAgMjI1LCA5LCAyMSwgMjI0LCAyLCAyNTAsIDEyLCAyMjgsIDcsIDIxLCAyMjQsIDIsIDI1MCwgMTIsIDIyOCwgNSwgMjEsIAorICAgIDIyNCwgMiwgMjA4LCAxMjMsIDIxMiwgMzYsIDIxLCAyMjQsIDIsIDIwOCwgMTIzLCAyMjUsIDksIDIxLCAyMjQsIDIsIDIwOCwgCisgICAgMTIzLCAyMjgsIDcsIDIxLCAyMjQsIDIsIDIwOCwgMTIzLCAyMjgsIDUsIDIxLCAyMjQsIDIsIDI0OCwgMTA0LCAyNTAsIDEyLCAKKyAgICAyMTIsIDM2LCAyMSwgMjI0LCAyLCAyNDgsIDEwNCwgMjUwLCAxMiwgMjI1LCA5LCAyMSwgMjI0LCAyLCAyNDgsIDEwNCwgCisgICAgMjUwLCAxMiwgMjI4LCA3LCAyMSwgMjI0LCAyLCAyNDgsIDEwNCwgMjUwLCAxMiwgMjI4LCA1LCAyMSwgMjI0LCAyLCAyNDgsIAorICAgIDEwNCwgMjA4LCAxMjMsIDIxMiwgMzYsIDIxLCAyMjQsIDIsIDI0OCwgMTA0LCAyMDgsIDEyMywgMjI1LCA5LCAyMSwgMjI0LCAKKyAgICAyLCAyNDgsIDEwNCwgMjA4LCAxMjMsIDIyOCwgNywgMjEsIDIyNCwgMiwgMjQ4LCAxMDQsIDIwOCwgMTIzLCAyMjgsIDUsIAorICAgIDIxLCAyMjQsIDEsIDIxMiwgMTIwLCAyMTEsIDUzLCAyMTIsIDM2LCAyMSwgMjI0LCAxLCAyMTIsIDEyMCwgMjExLCA1MywgCisgICAgMjI1LCA5LCAyMSwgMjI0LCAxLCAyMTIsIDEyMCwgMjExLCA1MywgMjI4LCA3LCAyMSwgMjI0LCAxLCAyMTIsIDEyMCwgMjExLCAKKyAgICA1MywgMjI4LCA1LCAyMSwgMjI0LCAxLCAyMTIsIDEyMCwgMjAzLCAyMjEsIDIzOSwgMjExLCAyMSwgMjI0LCAxLCA1MiwgCisgICAgMjExLCA1MiwgMjEsIDIyNCwgMSwgNTIsIDIwMywgMjIxLCAyMzksIDIxMSwgMjEsIDIyNCwgMSwgNTIsIDI1MCwgMjUyLCAKKyAgICAyMSwgMjI0LCAxLCA1MiwgMjUwLCAyNTMsIDIwMywgMjIxLCAyMzksIDIxMSwgMjEsIDIyNCwgMSwgMjQ1LCAxMzAsIDIxLCAKKyAgICAyMjQsIDEsIDIwOCwgNzAsIDIxMSwgNTMsIDIyNCwgMywgMjEsIDIyNCwgMSwgMjA4LCA3MCwgMjAzLCAyMjEsIDIzOSwgCisgICAgMjExLCAyMSwgMjI0LCAxLCAyMDgsIDcwLCAyNTAsIDI1MywgMjI0LCAzLCAyMSwgMjI0LCAxLCAyMDgsIDcwLCAyNTAsIAorICAgIDI1MywgMjAzLCAyMjEsIDIzOSwgMjExLCAyMSwgMjI0LCAxLCAyNDgsIDEyMCwgMjEsIDIyNCwgMSwgMjQ1LCAxNjYsIDIxMiwgCisgICAgMzYsIDIxLCAyMjQsIDEsIDI0NSwgMTY2LCAyMjUsIDksIDIxLCAyMjQsIDEsIDI0NSwgMTY2LCAyMjgsIDcsIDIxLCAyMjQsIAorICAgIDEsIDI0NiwgMTY4LCAyMSwgMjI0LCAxLCA5OCwgMjEyLCAzNiwgMjEsIDIyNCwgMSwgOTgsIDIyNSwgOSwgMjEsIDIyNCwgMSwgCisgICAgOTgsIDIyOCwgNywgMjEsIDIyNCwgMSwgMjAyLCAzMCwgMjEyLCAzNiwgMjEsIDIyNCwgMSwgMjAyLCAzMCwgMjI1LCA5LCAKKyAgICAyMSwgMjI0LCAxLCAyMDIsIDMwLCAyMjgsIDcsIDIxLCAyMjQsIDEsIDIxOSwgMzAsIDIxMiwgMzYsIDIxLCAyMjQsIDEsIAorICAgIDIxOSwgMzAsIDIyNSwgOSwgMjEsIDIyNCwgMSwgMjE5LCAzMCwgMjI4LCA3LCAyMSwgMjA4LCAxMDAsIDIxNSwgMTk1LCAKKyAgICAyMTIsIDExOSwgMjEsIDIwOCwgMTAwLCAyMTUsIDE5NSwgMjQyLCA3OCwgMjEsIDIwOCwgMTAwLCAyMTUsIDE5NSwgMjUwLCAKKyAgICAyNTIsIDIxLCAyMDgsIDEwMCwgMjE1LCAxOTQsIDIxMiwgMTE5LCAyMSwgMjA4LCAxMDAsIDIxNSwgMTk0LCAyNDIsIDc4LCAKKyAgICAyMSwgMjA4LCAxMDAsIDIxNSwgMTk0LCAyNTAsIDI1MiwgMjEsIDIwOCwgMTAwLCAyMTMsIDcxLCAyMSwgMjIzLCAyNTUsIAorICAgIDI0NSwgODgsIDIxNywgNTYsIDIxMiwgMzYsIDIxLCAyMjMsIDI1NSwgMjQ1LCA4OCwgMjE3LCA1NiwgMjI1LCA5LCAyMSwgCisgICAgMjIzLCAyNTUsIDI0NSwgODgsIDIxNywgNTYsIDIyOCwgNywgMjEsIDIyMywgMjU1LCAyNDUsIDg4LCAyMTcsIDU2LCAyMjgsIAorICAgIDUsIDIxLCAyMjMsIDI1NSwgMjQ1LCA4OCwgMjM3LCAxMzYsIDIxMiwgMzYsIDIxLCAyMjMsIDI1NSwgMjQ1LCA4OCwgMjM3LCAKKyAgICAxMzYsIDIyNSwgOSwgMjEsIDIyMywgMjU1LCAyNDUsIDg4LCAyMzcsIDEzNiwgMjI4LCA3LCAyMSwgMjIzLCAyNTUsIDI0NSwgCisgICAgODgsIDIzNywgMTM2LCAyMjgsIDUsIDIxLCAyMjMsIDI1NSwgMjQ1LCA4OCwgMjA5LCAyNywgMjQ2LCA2MiwgMjEyLCAzNiwgCisgICAgMjEsIDIyMywgMjU1LCAyNDUsIDg4LCAyMDksIDI3LCAyNDYsIDYyLCAyMjUsIDksIDIxLCAyMjMsIDI1NSwgMjM2LCAxNCwgCisgICAgMjEyLCAzNiwgMjEsIDIyMywgMjU1LCAyMzYsIDE0LCAyMjUsIDksIDIxLCAyMjMsIDI1NSwgMjM2LCAxNCwgMjI4LCA3LCAKKyAgICAyMSwgMjIzLCAyNTUsIDIyNywgMTUsIDIxMiwgMzYsIDIxLCAyMjMsIDI1NSwgMjI3LCAxNSwgMjI1LCA5LCAyMSwgMjIzLCAKKyAgICAyNTUsIDIyNywgMTUsIDIyOCwgNywgMjEsIDIyMywgMjU1LCAyMjcsIDE1LCA1LCAyNDIsIDc4LCAyMSwgMjIzLCAyNTUsIAorICAgIDIwNCwgNzYsIDI0NSwgODgsIDUyLCAyMTIsIDM2LCAyMSwgMjIzLCAyNTUsIDIwNCwgNzYsIDI0NSwgODgsIDUyLCAyMjUsIAorICAgIDksIDIxLCAyMjMsIDI1NSwgMjA0LCA3NiwgMjQ1LCA4OCwgNTIsIDIyOCwgNywgMjEsIDIyMywgMjU1LCAyMDQsIDc2LCAKKyAgICAyNDUsIDg4LCAyMDgsIDcwLCAyMTIsIDM2LCAyMSwgMjIzLCAyNTUsIDIwNCwgNzYsIDI0NSwgODgsIDIwOCwgNzAsIDIyNSwgCisgICAgOSwgMjEsIDIyMywgMjU1LCAyMDQsIDc2LCAyNDUsIDg4LCAyMDgsIDcwLCAyMjgsIDcsIDIxLCAyMjMsIDI1NSwgMjQ1LCAKKyAgICA4OCwgMjA5LCA4NCwgMjExLCA1MiwgMjEsIDIyMywgMjU1LCAyNDUsIDg2LCAyNDUsIDEzMSwgMjEyLCAzNiwgMjEsIDIyMywgCisgICAgMjU1LCAyNDUsIDg2LCAyNDUsIDEzMSwgMjI1LCA5LCAyMSwgMjE1LCAxOTQsIDIxMiwgMTE5LCAyMSwgMjE1LCAxOTQsIAorICAgIDI0MiwgNzgsIDIxLCAyMTUsIDE5NCwgMjUwLCAyNTQsIDIxLCAyMjMsIDI1NSwgMjEzLCA3MSwgMjEsIDIyMywgMjU1LCAKKyAgICAyNDUsIDg4LCAyMzYsIDIyOSwgMjM5LCAxMTksIDIwNCwgOTksIDIxLCAyMjMsIDI1NSwgMjM2LCAxNCwgMjM2LCAyMjksIAorICAgIDIzOSwgMTE5LCAyMDQsIDk5LCAyMSwgMjIzLCAyNTUsIDIyNywgMTUsIDIzNiwgMjI5LCAyMzksIDExOSwgMjA0LCA5OSwgCisgICAgMjEsIDIyMywgMjU1LCAyMDQsIDc2LCAyMzYsIDIyOSwgMjM5LCAxMTksIDIwNCwgOTksIDIxLCAyMTUsIDE5NCwgMjEyLCAKKyAgICAxMjAsIDIzNiwgMjI5LCAyMzksIDExOSwgMjA0LCA5OSwgMjEsIDIxNSwgMTk0LCA1MiwgMjM2LCAyMjksIDIzOSwgMTE5LCAKKyAgICAyMDQsIDk5LCAyMSwgMjE1LCAxOTQsIDI1MCwgMjUzLCAyMzYsIDIyOSwgMjM5LCAxMTksIDIwNCwgOTksIDIxLCAyMjMsIAorICAgIDI1NSwgMjQ1LCA4OCwgMjM2LCAyMjksIDI0NiwgMTQ5LCAyMSwgMjIzLCAyNTUsIDIzNiwgMTQsIDIzNiwgMjI5LCAyNDYsIAorICAgIDE0OSwgMjEsIDIyMywgMjU1LCAyMjcsIDE1LCAyMzYsIDIyOSwgMjQ2LCAxNDksIDIxLCAyMjMsIDI1NSwgMjA0LCA3NiwgCisgICAgMjM2LCAyMjksIDI0NiwgMTQ5LCAyMSwgMjE1LCAxOTQsIDIxMiwgMTIwLCAyMzYsIDIyOSwgMjQ2LCAxNDksIDIxLCAyMTUsIAorICAgIDE5NCwgNTIsIDIzNiwgMjI5LCAyNDYsIDE0OSwgMjEsIDIxNSwgMTk0LCAyNTAsIDI1MywgMjM2LCAyMjksIDI0NiwgMTQ5LCAKKyAgICAyMSwgMjIzLCAyNTUsIDIwNCwgNzYsIDI0MywgMjI4LCAyMTksIDUyLCAyMTIsIDM2LCAyMSwgMjIzLCAyNTUsIDIwNCwgNzYsIAorICAgIDI0MywgMjI4LCAyMTksIDUyLCAyMjUsIDksIDIxLCAyMjMsIDI1NSwgMjA0LCA3NiwgMjQzLCAyMjgsIDIxOSwgNTIsIDIyOCwgCisgICAgNywgMjEsIDIyNCwgMSwgMjQ1LCA4OCwgMjM2LCAyMjksIDI0NiwgMjI3LCAyMTIsIDM2LCAyMSwgMjI0LCAxLCAyNDUsIDg4LCAKKyAgICAyMzYsIDIyOSwgMjQ2LCAyMjcsIDIyOCwgNywgMjEsIDIyNCwgMSwgMjM2LCAxNCwgMjM2LCAyMjksIDI0NiwgMjI3LCA1LCAKKyAgICAyNDIsIDc4LCAyMSwgMjI0LCAxLCAyMzYsIDE0LCAyMzYsIDIyOSwgMjQ2LCAyMjcsIDIyOCwgOCwgMjQyLCA3OCwgMjEsIAorICAgIDIyNCwgMSwgMjM2LCAxNCwgMjM2LCAyMjksIDI0NiwgMjI3LCA1LCAyMDgsIDY5LCAyMSwgMjI0LCAxLCAyMzYsIDE0LCAKKyAgICAyMzYsIDIyOSwgMjQ2LCAyMjcsIDIyOCwgOCwgMjA4LCA2OSwgMjEsIDIyNCwgMSwgMjI3LCAxNSwgMjM2LCAyMjksIDI0NiwgCisgICAgMjI3LCA1LCAyMTIsIDExOSwgMjEsIDIyNCwgMSwgMjI3LCAxNSwgMjM2LCAyMjksIDI0NiwgMjI3LCAyMjgsIDgsIDIxMiwgCisgICAgMTE5LCAyMSwgMjI0LCAxLCAyMjcsIDE1LCAyMzYsIDIyOSwgMjQ2LCAyMjcsIDUsIDI0MiwgNzgsIDIxLCAyMjQsIDEsIAorICAgIDIyNywgMTUsIDIzNiwgMjI5LCAyNDYsIDIyNywgMjI4LCA4LCAyNDIsIDc4LCAyMSwgMjI0LCAxLCAyMDQsIDc2LCAyMzYsIAorICAgIDIyOSwgMjQ2LCAyMjcsIDIxMiwgMzYsIDIxLCAyMjQsIDEsIDIwNCwgNzYsIDIzNiwgMjI5LCAyNDYsIDIyNywgMjI4LCA3LCAKKyAgICAyMSwgMjE1LCAxOTUsIDIxMiwgMTIwLCAyMzYsIDIyOSwgMjQ2LCAyMjYsIDIxLCAyMTUsIDE5NSwgNTIsIDIzNiwgMjI5LCAKKyAgICAyNDYsIDIyNiwgMjEsIDIxNSwgMTk1LCAyNTAsIDI1MywgMjM2LCAyMjksIDI0NiwgMjI2LCAyMSwgMjI0LCAxLCAyNDUsIAorICAgIDg4LCAyMzYsIDIyOSwgMjM5LCAyMDUsIDIxMiwgMzYsIDIxLCAyMjQsIDEsIDI0NSwgODgsIDIzNiwgMjI5LCAyMzksIDIwNSwgCisgICAgMjI4LCA3LCAyMSwgMjI0LCAxLCAyMzYsIDE0LCAyMzYsIDIyOSwgMjM5LCAyMDUsIDUsIDI0MiwgNzgsIDIxLCAyMjQsIDEsIAorICAgIDIzNiwgMTQsIDIzNiwgMjI5LCAyMzksIDIwNSwgMjI4LCA4LCAyNDIsIDc4LCAyMSwgMjI0LCAxLCAyMzYsIDE0LCAyMzYsIAorICAgIDIyOSwgMjM5LCAyMDUsIDIwOCwgNzAsIDUsIDIwOCwgNjksIDIxLCAyMjQsIDEsIDIzNiwgMTQsIDIzNiwgMjI5LCAyMzksIAorICAgIDIwNSwgMjA4LCA3MCwgMjI4LCA4LCAyMDgsIDY5LCAyMSwgMjI0LCAxLCAyMjcsIDE1LCAyMzYsIDIyOSwgMjM5LCAyMDUsIAorICAgIDUsIDIxMiwgMTE5LCAyMSwgMjI0LCAxLCAyMjcsIDE1LCAyMzYsIDIyOSwgMjM5LCAyMDUsIDIyOCwgOCwgMjEyLCAxMTksIAorICAgIDIxLCAyMjQsIDEsIDIyNywgMTUsIDIzNiwgMjI5LCAyMzksIDIwNSwgNSwgMjQyLCA3OCwgMjEsIDIyNCwgMSwgMjI3LCAxNSwgCisgICAgMjM2LCAyMjksIDIzOSwgMjA1LCAyMjgsIDgsIDI0MiwgNzgsIDIxLCAyMjQsIDEsIDIwNCwgNzYsIDIzNiwgMjI5LCAyMzksIAorICAgIDIwNSwgMjEyLCAzNiwgMjEsIDIyNCwgMSwgMjA0LCA3NiwgMjM2LCAyMjksIDIzOSwgMjA1LCAyMjgsIDcsIDIxLCAyMTUsIAorICAgIDE5NSwgMjEyLCAxMjAsIDIzNiwgMjI5LCAyMzksIDIwNCwgMjEsIDIxNSwgMTk1LCA1MiwgMjM2LCAyMjksIDIzOSwgMjA0LCAKKyAgICAyMSwgMjE1LCAxOTUsIDI1MCwgMjUzLCAyMzYsIDIyOSwgMjM5LCAyMDQsIDIxLCAyMjQsIDEsIDI0NSwgODgsIDIxMiwgMzYsIAorICAgIDIxLCAyMjQsIDEsIDI0NSwgODgsIDIyNSwgOSwgMjEsIDIyNCwgMSwgMjQ1LCA4OCwgMjI4LCA3LCAyMSwgMjI0LCAxLCAKKyAgICAyNDUsIDg4LCAyMjgsIDUsIDIxLCAyMjQsIDEsIDI0NSwgODgsIDI0NSwgMjM3LCAyMSwgMjI0LCAxLCAyMzYsIDE0LCAyMTIsIAorICAgIDM2LCAyMSwgMjI0LCAxLCAyMjcsIDE1LCAyMTIsIDM2LCAyMSwgMjI0LCAxLCAyMDQsIDc2LCAyMTIsIDI0LCAyMSwgMjI0LCAKKyAgICAxLCAyMDQsIDc2LCAyMTIsIDM2LCAyMSwgMjI0LCAxLCAyMDQsIDc2LCAyMjgsIDcsIDIxLCAyMTUsIDE5NSwgMjEyLCAxMTksIAorICAgIDIxLCAyMTUsIDE5NSwgMjQyLCA3OCwgMjEsIDIxNSwgMTk1LCAyNTAsIDI1MiwgMjEsIDIyNCwgMSwgMjEzLCA3MiwgMjE5LCAKKyAgICA4MSwgMjEsIDIyMywgMjU1LCAyNTAsIDEwNywgMjQ2LCA2MiwgNSwgMjEyLCAxMTksIDIxLCAyMjMsIDI1NSwgMjUwLCAxMDcsIAorICAgIDI0NiwgNjIsIDIyNSwgMTAsIDIxMiwgMTE5LCAyMSwgMjIzLCAyNTUsIDI1MCwgMTA3LCAyNDYsIDYyLCA1LCAyNDIsIDc4LCAKKyAgICAyMSwgMjIzLCAyNTUsIDI1MCwgMTA3LCAyNDYsIDYyLCAyMjUsIDEwLCAyNDIsIDc4LCAyMSwgMjI0LCAxLCAyNTAsIDEwNywgCisgICAgMjQ2LCA2MiwgMjM2LCAyMjksIDIwNCwgMTAwLCA1LCAyMTIsIDExOSwgMjEsIDIyNCwgMSwgMjUwLCAxMDcsIDI0NiwgNjIsIAorICAgIDIzNiwgMjI5LCAyMDQsIDEwMCwgMjI1LCAxMCwgMjEyLCAxMTksIDIxLCAyMjQsIDEsIDI1MCwgMTA3LCAyNDYsIDYyLCAKKyAgICAyMzYsIDIyOSwgMjA0LCAxMDAsIDIyOCwgOCwgMjEyLCAxMTksIDIxLCAyMjQsIDEsIDI1MCwgMTA3LCAyNDYsIDYyLCAyMzYsIAorICAgIDIyOSwgMjA0LCAxMDAsIDUsIDI0MiwgNzgsIDIxLCAyMjQsIDEsIDI1MCwgMTA3LCAyNDYsIDYyLCAyMzYsIDIyOSwgMjA0LCAKKyAgICAxMDAsIDIyNSwgMTAsIDI0MiwgNzgsIDIxLCAyMjQsIDEsIDI1MCwgMTA3LCAyNDYsIDYyLCAyMzYsIDIyOSwgMjA0LCAxMDAsIAorICAgIDIyOCwgOCwgMjQyLCA3OCwgMjEsIDIyMywgMjU1LCAyMDMsIDIyMSwgMjQ2LCA2MiwgMjM5LCAxMTksIDIxMiwgMTE5LCAyMSwgCisgICAgMjIzLCAyNTUsIDIwMywgMjIxLCAyNDYsIDYyLCAyMzksIDExOSwgMjQyLCA3OCwgMjEsIDIyNCwgMSwgMjAzLCAyMjEsIAorICAgIDI0NiwgNjIsIDIzNiwgMjI5LCAyMDQsIDEwMCwgMjEyLCAxMTksIDIxLCAyMjQsIDEsIDIwMywgMjIxLCAyNDYsIDYyLCAKKyAgICAyMzYsIDIyOSwgMjA0LCAxMDAsIDI0MiwgNzgsIDIxLCAyMjMsIDI1NSwgMjQwLCAzLCAyNDYsIDU5LCAyMTIsIDExOSwgMjEsIAorICAgIDIyMywgMjU1LCAyNDAsIDMsIDI0NiwgNTksIDI0MiwgNzgsIDIxLCAyMjQsIDEsIDI0MCwgMywgMjQ2LCA1OSwgMjM2LCAKKyAgICAyMjksIDIwNCwgMTAwLCAyMTIsIDExOSwgMjEsIDIyNCwgMSwgMjQwLCAzLCAyNDYsIDU5LCAyMzYsIDIyOSwgMjA0LCAxMDAsIAorICAgIDI0MiwgNzgsIDIxLCAyNDIsIDQsIDI1MCwgOTUsIDIxMiwgMzYsIDIxLCAyNDIsIDQsIDI1MCwgOTUsIDIyOCwgNywgMjEsIAorICAgIDI0MiwgNCwgMjQwLCA3NCwgMjEsIDI0MiwgNCwgMjEyLCAzOSwgMjEsIDI0MiwgNCwgMjA5LCAxNDUsIDIxLCAyNDIsIDQsIAorICAgIDIxNiwgMTE1LCAyMSwgMjQyLCA0LCAyMTIsIDEyNSwgMjEsIDI0MiwgNCwgMjEyLCAxMjYsIDI1MCwgMjUyLCAyMSwgMjQyLCAKKyAgICA0LCAyNDAsIDIyMSwgMjE5LCAyMjEsIDIwOCwgMjIxLCAyMSwgMjQyLCA0LCAyMzgsIDEyLCAyMSwgMjM3LCA2NCwgMjEsIAorICAgIDIzNywgNjUsIDIxNiwgMSwgMjEsIDIzNywgNjUsIDIyMywgMjU1LCAyMTEsIDUyLCAyMSwgMjM3LCA2NSwgMjIzLCAyNTUsIAorICAgIDIwOCwgMjI0LCAyMSwgMjM3LCA2NSwgMjI0LCAxLCAyMTEsIDUyLCAyMSwgMjM3LCA2NSwgMjIzLCAyNTUsIDI0NSwgODcsIAorICAgIDIxLCAyMzcsIDY1LCAyMjQsIDEsIDI0NSwgODcsIDIxLCAyMzcsIDY1LCAyMjQsIDQsIDI0NiwgNjEsIDIxLCAyNDAsIDEwMywgCisgICAgMjQzLCAxNjYsIDIxOCwgMzQsIDIyMSwgMTY4LCAyMzksIDE1MiwgMjA4LCAyMjIsIDIxLCAyNDAsIDEwMywgMjQzLCAxNjYsIAorICAgIDIxOCwgMzQsIDIyMSwgMTY4LCAxMTIsIDIxOSwgMjQ1LCAyNDIsIDcwLCAyMSwgMjQwLCAxMDMsIDI0MywgMTY2LCAyMTgsIAorICAgIDM0LCAyMjEsIDE2OCwgMTEyLCAyMTksIDI0NSwgMTIxLCAyMDgsIDIyMiwgMjEsIDI0MCwgMTkwLCAyMTEsIDUzLCAyMDYsIAorICAgIDIyNCwgMjEsIDI0MCwgMTkwLCAyMTEsIDUzLCAyMjIsIDIxNSwgMjEsIDI0MCwgMTkwLCAyMTEsIDUzLCAyNDIsIDcwLCAyMSwgCisgICAgMjQyLCA1NywgMjQwLCAxOTAsIDIyMiwgMjE2LCAyNDIsIDcwLCAyMSwgMjQyLCA1NywgMjQwLCAxOTAsIDEyMSwgMjIyLCAKKyAgICAyMTUsIDIxLCAyNDIsIDU3LCAyNDAsIDE5MCwgMTEyLCAyMjIsIDIxNSwgMjEsIDI0MiwgNTcsIDI0MCwgMTkwLCAyMjIsIAorICAgIDIxNiwgMjA2LCAyMjQsIDIxLCAyMzksIDE2NCwgMjIyLCAyMTUsIDIxLCAyMzksIDE2NCwgMjQ1LCAxOTcsIDIxLCAyMzksIAorICAgIDE2NCwgMjAzLCAyMjQsIDIxLCAyNDAsIDE4NSwgMjIwLCA4LCAyMSwgMjQwLCAxODUsIDIxMSwgMTcyLCAyMSwgMjQwLCAKKyAgICAxODUsIDI0NiwgMTUsIDIxLCAyNDAsIDE5MiwgMjQ4LCAzNCwgMjEyLCAxMTksIDIxLCAyNDAsIDE5MiwgMjQ4LCAzNCwgCisgICAgMjIzLCAyMjUsIDIxLCAyNDAsIDE4NSwgMTYyLCAyMjAsIDgsIDIxLCAyNDAsIDE4NSwgMjA0LCAyNywgMjIwLCA4LCAyMSwgCisgICAgMjQwLCAxODUsIDE2MiwgMjQ2LCAxNSwgMjEsIDI0MCwgMTg1LCAyMDQsIDI1LCAyMjQsIDMsIDIxLCAyNDAsIDE5MiwgMjA0LCAKKyAgICA5LCAyMSwgMjQwLCAxODYsIDIwNiwgMjI0LCAyMSwgMjQwLCAxODYsIDI0MiwgNzAsIDIxLCAyNDAsIDE4NiwgMjM5LCAxOTEsIAorICAgIDIxLCAyNDAsIDE4OCwgMjExLCA1MiwgMjEsIDI0MCwgMTg4LCAyMTEsIDUzLCAyNDIsIDc4LCAyMSwgMjQwLCAxODgsIDIxMSwgCisgICAgNTMsIDI1MCwgMjUyLCAyMSwgMjQwLCAxODksIDIxMSwgNTIsIDIxLCAyNDAsIDE4OSwgMjExLCA1MywgMjQyLCA3OCwgMjEsIAorICAgIDI0MCwgMTg5LCAyMTEsIDUzLCAyNTAsIDI1MiwgMjEsIDI0MCwgMTg4LCAyNDUsIDg1LCAyMSwgMjQwLCAxODksIDI0NSwgCisgICAgODUsIDIxLCAyNDAsIDE4OCwgMjQ2LCA1NiwgMjEsIDI0NiwgMTY0LCAyMTcsIDE4MiwgMjEsIDI0NiwgMTY0LCAyMjIsIAorICAgIDIxNSwgMjEsIDI0NiwgMTY0LCAyMTAsIDIzNCwgMjEsIDIwOSwgMTQ2LCAyNDYsIDE2NCwgMjM2LCAyNDQsIDIxLCAyMDksIAorICAgIDE0NiwgMjQ2LCAxNjQsIDIyNCwgMTQ4LCAyMSwgMjA5LCAxNDYsIDI0NiwgMTY0LCAyMjcsIDAsIDIxLCAyNDEsIDE4MSwgCisgICAgMjEsIDIyMSwgMTY4LCAyMjIsIDIxNSwgMjEsIDIyMSwgMTY4LCAyNDUsIDE5NywgMjEsIDIyMSwgMTY4LCAyMDMsIDIyMiwgCisgICAgMjEsIDIyMSwgMTY4LCAyMDQsIDIyLCAyMSwgMjUxLCA1NSwgMjQ4LCAyNywgMjE5LCAyMTEsIDIxLCAyNTEsIDU1LCAyMTAsIAorICAgIDIzMywgMjMxLCA0OSwgMjEsIDI1MSwgNTUsIDI0OCwgMjksIDUsIDIxNSwgMTkzLCAyMSwgMjUxLCA1NSwgMjEwLCAyMzUsIAorICAgIDUsIDIxNSwgMTkzLCAyMSwgMjQ3LCAyMTYsIDIzMSwgMjIsIDIxLCAyNDcsIDIxNiwgMjQwLCAyMTAsIDIxLCAyMjQsIDgsIAorICAgIDI0NiwgMTYsIDIyMiwgMjE1LCAyMSwgMjI0LCA4LCAyNDYsIDE2LCAyMzksIDE1MSwgMjEsIDIyNCwgOCwgMjQ2LCAxNiwgCisgICAgMjQ1LCAxOTcsIDIxLCAyMjQsIDgsIDIxMiwgMzEsIDIxLCAyMjQsIDgsIDIxMiwgMzIsIDIwMywgMjI0LCAyMSwgMjI0LCA4LCAKKyAgICAyMTIsIDMyLCAyMjAsIDgsIDIxLCAyMjQsIDgsIDIzOSwgMTE1LCAyMSwgMjI0LCA4LCAyMzksIDExNiwgMjAzLCAyMjQsIAorICAgIDIxLCAyMjQsIDgsIDIzOSwgMTE2LCAyMjAsIDgsIDIxLCAyMjQsIDgsIDE3MSwgMjQ2LCA2MSwgMjEsIDIyNCwgOCwgMTcxLCAKKyAgICAyMzksIDE1MSwgMjEsIDIyNCwgOCwgMTcxLCAyMDMsIDIyNCwgMjEsIDIyNCwgOCwgMTcxLCAyMTksIDIwNCwgMjEsIDIyNCwgCisgICAgOCwgMTcxLCAyMTksIDIwNSwgMjAzLCAyMjQsIDIxLCAyMjQsIDgsIDE3MSwgMjE5LCAyMDUsIDIwMywgNTksIDIxLCAyMjQsIAorICAgIDgsIDE3MSwgMjE2LCAxNDMsIDIxLCAyMjQsIDgsIDE3MSwgMjE2LCAxNDQsIDIwMywgMjI0LCAyMSwgMjI0LCA4LCAxNzEsIAorICAgIDIxNiwgMTQ0LCAyMDMsIDU5LCAyMSwgMjI0LCA4LCAyMjksIDY2LCAyMSwgMjI0LCA4LCAyMjksIDY3LCAyMzksIDE1MSwgCisgICAgMjEsIDIyNCwgOCwgMjI5LCA2NywgMjAzLCAyMjQsIDIxLCAyMjQsIDgsIDIwOSwgMTQ1LCAyMSwgMjI0LCA4LCAyMDksIAorICAgIDE0NiwgMjM5LCAxNTEsIDIxLCAyMjQsIDgsIDIwOSwgMTQ2LCAyMTAsIDIzNCwgMjEsIDIyNywgOTksIDIxNywgMjM5LCAKKyAgICAyMDgsIDE2OSwgMjEsIDIyNywgMTAxLCAyMjYsIDI1MSwgMTE1LCAyMDYsIDIyMCwgMjEsIDIyNywgMTAxLCAyMDYsIDIyMSwgCisgICAgMTE1LCAyMjYsIDI1MCwgMjEsIDIyNCwgOCwgMjQ1LCAxNjQsIDIxLCAyMjQsIDgsIDIwMywgMjIzLCAyMTIsIDExOSwgMjEsIAorICAgIDIyNCwgOCwgMjAzLCAyMjMsIDI0MiwgNzgsIDIxLCAyMDgsIDE1MSwgMjExLCA3MiwgMjE5LCAyMTIsIDI0MCwgNzYsIDIxLCAKKyAgICAyMDgsIDE1MSwgMjI3LCAxNDQsIDIyNywgOTgsIDIxLCAyMDgsIDE1MSwgMjA4LCAyMTEsIDI0OCwgMTA0LCAyMjcsIDk4LCAKKyAgICAyMSwgMjA4LCAxNTEsIDIwOCwgMjExLCAyMDgsIDEyNywgMjMxLCA3LCAyMjQsIDcsIDIxLCAyMDgsIDE1MSwgMjMxLCA3LCAKKyAgICAyMjQsIDgsIDIxNiwgMTE1LCAyMSwgMjA4LCAxNTEsIDIyMywgMjU0LCAyNTEsIDc5LCAyNDYsIDE2NSwgMjEsIDIwOCwgCisgICAgMTUxLCAyNDYsIDIxOCwgMjExLCA3MiwgMjE5LCAyMTEsIDIxLCAyMDgsIDE1MSwgMjQ2LCAyMTgsIDIzMSwgNywgMjI0LCA3LCAKKyAgICAyMSwgMjA5LCAxNzIsIDIxLCAyMDksIDE3MywgMjI0LCAzLCAyMSwgMjA5LCAxNzMsIDIyMCwgMzIsIDIwOCwgMTUwLCAyMSwgCisgICAgMjA5LCAxNzMsIDIyMCwgMzIsIDIwOCwgMTUxLCAyMjQsIDMsIDIxLCAyMDksIDE3MywgMjIwLCAzMiwgMjI3LCA5OCwgMjEsIAorICAgIDIwOSwgMTczLCAyMjAsIDMyLCAyMjcsIDk5LCAyMjQsIDMsIDIxLCAyMDksIDE3MywgMjQ4LCA1MCwgMjI3LCA5OCwgMjEsIAorICAgIDIyMywgMjU1LCAyMzAsIDE2NSwgMjEsIDIyNCwgMSwgMjMwLCAxNjUsIDIxLCAyMjIsIDIzNywgMjEsIDIzNywgMTQ1LCAyMSwgCisgICAgMjQwLCAyMTMsIDIxLCAyMTIsIDIxMSwgMjM2LCAyMzQsIDIxMSwgMjAzLCAyMSwgMjEyLCAyMTEsIDIzNiwgMjM0LCAyMTgsIAorICAgIDMzLCAyMSwgMjA0LCA5OCwgMjEyLCAyMTEsIDIzNiwgMjM0LCAyMjQsIDYsIDIxLCAyMzksIDIwMywgMjEyLCAyMTEsIDIzNiwgCisgICAgMjM0LCAyMjQsIDYsIDIxLCAyMTIsIDIxMSwgMjA4LCAyMjMsIDIzOSwgMTIwLCAyMDQsIDEwNCwgMjEsIDIwOCwgMTM0LCAKKyAgICAyMTEsIDUzLCAyMTEsIDQxLCAyMSwgMjA4LCAxMzQsIDI0NSwgODYsIDI0OCwgMTIwLCAyMSwgMjA4LCAxMzUsIDIwNywgCisgICAgMTM3LCAyMSwgMjA2LCAyMjEsIDI0OCwgMTgsIDIwOCwgMjIzLCAyMzksIDEyMCwgMjM2LCAyMzQsIDIzMCwgOTUsIDIxLCAKKyAgICAyMjcsIDEyNiwgMjQ1LCAyMzgsIDIxLCAyMjcsIDEyNiwgMjI3LCAxOTUsIDIxLCAyMjcsIDEyNiwgMjI3LCAxOTQsIDIxLCAKKyAgICAyMjcsIDEyNiwgMjI3LCAxOTMsIDIxLCAyMjcsIDEyNiwgMjI3LCAxOTIsIDIxLCAyMjcsIDEyNiwgMjI3LCAxOTEsIDIxLCAKKyAgICAyMjcsIDEyNiwgMjI3LCAxOTAsIDIxLCAyMjcsIDEyNiwgMjI3LCAxODksIDIxLCAyNDAsIDIsIDIxLCAyMjcsIDQ1LCAyMTEsIAorICAgIDIyOCwgMjEsIDIyNywgNDYsIDIxMSwgMjI4LCAyMSwgMjI3LCA0NywgMjM3LCA0MSwgMjEsIDIyNywgNDcsIDIwNCwgMjMsIAorICAgIDIxLCAyMjcsIDQ3LCAyNDQsIDI0LCAyMSwgMjI3LCA0NywgMjM3LCA2NSwgMjIyLCAyMzcsIDIxLCAyMjcsIDQ3LCAyMDgsIAorICAgIDEzNiwgMjEsIDIyNywgNDcsIDIyNywgMTI1LCAyNDMsIDE5OCwgMjEsIDI0NSwgMjMzLCAyMSwgMjM5LCAxMDIsIDIxMSwgCisgICAgNjEsIDIxLCAyMTMsIDE0MywgMjEsIDI0NSwgMjQyLCAyMSwgMjE5LCA3NiwgMjEsIDI0MCwgMTAsIDIyNCwgNjYsIDIxLCAKKyAgICAyNDAsIDEwLCAyMjQsIDY1LCAyMSwgMjQwLCAxMCwgMjI0LCA2NCwgMjEsIDI0MCwgMTAsIDIyNCwgNjMsIDIxLCAyNDAsIAorICAgIDEwLCAyMjQsIDYyLCAyMSwgMjE1LCAxOTcsIDIyNCwgNjYsIDIxLCAyMTUsIDE5NywgMjI0LCA2NSwgMjEsIDIxNSwgMTk3LCAKKyAgICAyMjQsIDY0LCAyMSwgMjE1LCAxOTcsIDIyNCwgNjMsIDIxLCAyMTUsIDE5NywgMjI0LCA2MiwgMjEsIDIxNSwgMTk3LCAyMjQsIAorICAgIDYxLCAyMSwgMjE1LCAxOTcsIDIyNCwgNjAsIDIxLCAyMTUsIDE5NywgMjI0LCA1OSwgMjEsIDIxNSwgMTk3LCAyMjQsIDczLCAKKyAgICAyMSwgMjE1LCAxOTcsIDIyNCwgNzIsIDIxLCAyMTUsIDE5NywgMjI0LCA3MSwgMjEsIDIxNSwgMTk3LCAyMjQsIDcwLCAyMSwgCisgICAgMjE1LCAxOTcsIDIyNCwgNjksIDIxLCAyMTUsIDE5NywgMjI0LCA2OCwgMjEsIDIxNSwgMTk3LCAyMjQsIDY3LCA3MywgNzIsIAorICAgIDQsIDIyNiwgMTg0LCAyMjksIDEwMCwgNzMsIDcyLCA0LCAyMjYsIDE4MCwgMTczLCA3MywgNzIsIDQsIDIyNiwgMTc4LCAKKyAgICAyMjgsIDIwOSwgNzMsIDcyLCA0LCAyMjYsIDU0LCAyMjksIDE5OCwgNzMsIDcyLCA0LCAyMjYsIDI0LCAyMjksIDIwMSwgNzMsIAorICAgIDcyLCA0LCAyMjYsIDQzLCAyMjksIDYsIDczLCA3MiwgNCwgMjI2LCA3MSwgMjI5LCAyNiwgNzMsIDcyLCA0LCAyMjUsIDE5NiwgCisgICAgMjI4LCAyMDMsIDczLCA3MiwgNCwgMjI2LCAxNzUsIDIwNCwgMzAsIDczLCA3MiwgNCwgMjI2LCAxNzMsIDIwNCwgMTExLCAKKyAgICA3MywgNzIsIDQsIDIyNiwgMTcxLCAyMDMsIDIxNywgNzMsIDcyLCA0LCAyMjUsIDI0OSwgMjA0LCA1NSwgNzMsIDcyLCA0LCAKKyAgICAyMjYsIDEsIDIwNCwgNjIsIDczLCA3MiwgNCwgMjI2LCA1LCAyMDMsIDI0NCwgNzMsIDcyLCA0LCAyMjYsIDc0LCAyMDQsIDAsIAorICAgIDczLCA3MiwgNCwgMjI1LCAxODEsIDIwMywgMjEzLCA3MywgNzIsIDQsIDIyNSwgMjMyLCAyMDQsIDUzLCA3MywgNzIsIDQsIAorICAgIDIyNiwgNTgsIDIwMywgMjAxLCA3MywgNzIsIDQsIDIyNiwgNzAsIDIwMywgMjAzLCA3MywgNzIsIDQsIDIyNSwgMjM2LCAKKyAgICAyMDMsIDIwMiwgNzMsIDcyLCA0LCAyMjYsIDE2OSwgMjI0LCAxMTAsIDczLCA3MiwgNCwgMjI2LCAxNjcsIDIyNSwgMTIyLCAKKyAgICA3MywgNzIsIDQsIDIyNiwgMTY1LCAyMjMsIDIxOSwgNzMsIDcyLCA0LCAyMjYsIDYwLCAyMjQsIDI0MCwgNzMsIDcyLCA0LCAKKyAgICAyMjYsIDI1LCAyMjQsIDU0LCA3MywgNzIsIDQsIDIyNSwgMjIxLCAyMjMsIDI0MywgNzMsIDcyLCA0LCAyMjUsIDE4NiwgCisgICAgMjIzLCAyMzcsIDczLCA3MiwgNCwgMjI2LCAxNjMsIDI0OCwgODYsIDczLCA3MiwgNCwgMjI2LCAxNjAsIDI0OSwgMzIsIDczLCAKKyAgICA3MiwgNCwgMjI2LCAxNTgsIDI0NywgMTkzLCA3MywgNzIsIDQsIDIyNSwgMjI1LCAyNDgsIDE1MCwgNzMsIDcyLCA0LCAyMjYsIAorICAgIDIyLCAyNDgsIDE2MiwgNzMsIDcyLCA0LCAyMjYsIDE2LCAyNDgsIDEwLCA3MywgNzIsIDQsIDIyNSwgMjM3LCAyNDgsIDIzLCAKKyAgICA3MywgNzIsIDQsIDIyNiwgMTQ4LCA3NSwgNzMsIDcyLCA0LCAyMjYsIDE0NiwgNjMsIDczLCA3MiwgNCwgMjI2LCAxNDQsIAorICAgIDY4LCA3MywgNzIsIDQsIDIyNSwgMjEyLCAyNDEsIDE2MSwgNzMsIDcyLCA0LCAyMjYsIDE5LCA3NCwgNzMsIDcyLCA0LCAKKyAgICAyMjUsIDIxMCwgMjIwLCAxOCwgNzMsIDcyLCA0LCAyMjUsIDIyOCwgNzgsIDczLCA3MiwgNCwgMjI1LCAyMzgsIDI0MSwgCisgICAgMTQ1LCA3MywgNzIsIDQsIDIyNSwgMjQ0LCAyMzEsIDQ5LCA3MywgNzIsIDQsIDIyNSwgMjQwLCAyMzEsIDQ5LCA3MywgNzIsIAorICAgIDQsIDIyNSwgMTgwLCAyNTAsIDIzMSwgNzMsIDcyLCA0LCAyMjUsIDE5NywgMjQxLCA5MiwgNzMsIDcyLCA0LCAyMjYsIDEzMywgCisgICAgMjEyLCAxNjIsIDczLCA3MiwgNCwgMjI2LCAxMzEsIDIxNSwgMzYsIDczLCA3MiwgNCwgMjI2LCAxMjksIDIxMSwgMTAsIDczLCAKKyAgICA3MiwgNCwgMjI1LCAyMTMsIDIxNCwgMTY1LCA3MywgNzIsIDQsIDIyNiwgMywgMjE0LCAxNzcsIDczLCA3MiwgNCwgMjI1LCAKKyAgICAyMzksIDIxMSwgMjUwLCA3MywgNzIsIDQsIDIyNiwgNDAsIDIxMiwgMTMsIDczLCA3MiwgNCwgMjI1LCAxNzksIDIxMiwgCisgICAgMTYxLCA3MywgNzIsIDQsIDIyNiwgMTE5LCAyMjcsIDE0OCwgNzMsIDcyLCA0LCAyMjYsIDExNywgMjI4LCAxMTMsIDczLCAKKyAgICA3MiwgNCwgMjI2LCAxMTUsIDIyNiwgMjM5LCA3MywgNzIsIDQsIDIyNiwgMzUsIDIyNywgMjI2LCA3MywgNzIsIDQsIDIyNiwgCisgICAgNDYsIDIyNywgMjM0LCA3MywgNzIsIDQsIDIyNiwgNjUsIDIyNywgMTgsIDczLCA3MiwgNCwgMjI1LCAyMjIsIDIyNywgNDksIAorICAgIDczLCA3MiwgNCwgMjI2LCA5LCAxNjMsIDIyNywgMjM0LCA3MywgNzIsIDQsIDIyNiwgMTQxLCAyNDMsIDIzMywgNzMsIDcyLCAKKyAgICA0LCAyMjYsIDEzOCwgMjQ0LCAyMTIsIDczLCA3MiwgNCwgMjI2LCAxMzUsIDI0MiwgNDIsIDczLCA3MiwgNCwgMjI2LCAzMCwgCisgICAgMjQ0LCA2MSwgNzMsIDcyLCA0LCAyMjUsIDE5NSwgMjQzLCA5MCwgNzMsIDcyLCA0LCAyMjUsIDE5NCwgMjQzLCAxMTMsIDczLCAKKyAgICA3MiwgNCwgMjI2LCAxMjcsIDIwOSwgMiwgNzMsIDcyLCA0LCAyMjYsIDEyNCwgMjEwLCAyMiwgNzMsIDcyLCA0LCAyMjYsIAorICAgIDEyMiwgMjA3LCAyMDMsIDczLCA3MiwgNCwgMjI2LCAyOCwgMjA5LCAxNzYsIDczLCA3MiwgNCwgMjI2LCA2NCwgMjA5LCAKKyAgICAxODcsIDczLCA3MiwgNCwgMjI2LCAxNSwgMjA4LCAxNDgsIDczLCA3MiwgNCwgMjI2LCA1MCwgMTM1LCA3MywgNzIsIDQsIAorICAgIDIyNiwgMTEzLCAyMzAsIDE0MSwgNzMsIDcyLCA0LCAyMjYsIDExMCwgMjMwLCAxODEsIDczLCA3MiwgNCwgMjI2LCAxMDgsIAorICAgIDIzMCwgODIsIDczLCA3MiwgNCwgMjI1LCAyMTgsIDIzMCwgMTU5LCA3MywgNzIsIDQsIDIyNiwgNiwgMjMwLCAxNjEsIDczLCAKKyAgICA3MiwgNCwgMjI1LCAyMTUsIDIzMCwgOTEsIDczLCA3MiwgNCwgMjI2LCA1NiwgMjMwLCAxMDEsIDczLCA3MiwgNCwgMjI1LCAKKyAgICAyMDAsIDE2MywgMjMwLCAxMDEsIDczLCA3MiwgNCwgMjI2LCAxMDYsIDIwMywgMTEsIDczLCA3MiwgNCwgMjI2LCAxMDMsIAorICAgIDE5OCwgNzMsIDcyLCA0LCAyMjYsIDEwMSwgMjAyLCAyMTMsIDczLCA3MiwgNCwgMjI2LCAxMCwgMjAzLCA0OSwgNzMsIDcyLCAKKyAgICA0LCAyMjYsIDM5LCAyMDMsIDUyLCA3MywgNzIsIDQsIDIyNSwgMjM0LCAyMDIsIDIzMiwgNzMsIDcyLCA0LCAyMjUsIDI1NCwgCisgICAgMjAyLCAyNDcsIDczLCA3MiwgNCwgMjI2LCA5NywgMjQwLCAyNiwgNzMsIDcyLCA0LCAyMjYsIDk1LCAyNDAsIDEwOCwgNzMsIAorICAgIDcyLCA0LCAyMjYsIDkzLCAyMzksIDEwOCwgNzMsIDcyLCA0LCAyMjYsIDQxLCAyNDAsIDUzLCA3MywgNzIsIDQsIDIyNiwgCisgICAgNDQsIDI0MCwgNjAsIDczLCA3MiwgNCwgMjI1LCAyNDIsIDIzOSwgMTc1LCA3MywgNzIsIDQsIDIyNiwgMzEsIDIzOSwgMTg2LCAKKyAgICA3MywgNzIsIDQsIDIyNSwgMTc4LCAyMzksIDEwNywgNzMsIDcyLCA0LCAyMjYsIDE4LCAyNDAsIDgxLCA3MywgNzIsIDQsIAorICAgIDIyNiwgOTEsIDIyMiwgNjgsIDczLCA3MiwgNCwgMjI2LCA4OSwgMjIzLCA4MywgNzMsIDcyLCA0LCAyMjYsIDg3LCAyMjEsIAorICAgIDQwLCA3MywgNzIsIDQsIDIyNiwgMiwgMjIyLCAyMzAsIDczLCA3MiwgNCwgMjI1LCAyMDYsIDIyMSwgMTg1LCA3MywgNzIsIAorICAgIDQsIDIyNSwgMTk5LCAyMzcsIDMsIDczLCA3MiwgNCwgMjI2LCA4MiwgMTUyLCA3MywgNzIsIDQsIDIyNSwgMTg5LCAyMzYsIAorICAgIDI2LCA3MywgNzIsIDQsIDIyNiwgODUsIDIzNywgNDgsIDczLCA3MiwgNCwgMjI2LCAyMywgMjM3LCA2NywgNzMsIDcyLCA0LCAKKyAgICAyMjYsIDgwLCAyMzYsIDExNywgNzMsIDcyLCA0LCAyMjUsIDIzNSwgMjM2LCAxMzYsIDczLCA3MiwgNCwgMjI2LCAzNiwgCisgICAgMjM3LCA0NywgNzMsIDcyLCA0LCAyMjUsIDI0NywgMjM2LCAxMTAsIDczLCA3MiwgNCwgMjI2LCA2NiwgMjM2LCAyMzgsIDczLCAKKyAgICA3MiwgNCwgMjI1LCAyNDUsIDIzNywgMTI2LCA3MywgNzIsIDQsIDIyNiwgMzIsIDIzNiwgMTMsIDczLCA3MiwgNCwgMjI2LCAKKyAgICA2NywgMjM3LCAzMywgNzMsIDcyLCA0LCAyMjUsIDE4MiwgMjM2LCAxMjAsIDczLCA3MiwgNCwgMjI2LCA3MywgMjM2LCAyNSwgCisgICAgNzMsIDcyLCA0LCAyMjYsIDI5LCAyMjIsIDE2OCwgNzMsIDcyLCA0LCAyMjYsIDc4LCAyMjIsIDE4MiwgNzMsIDcyLCA0LCAKKyAgICAyMjYsIDM3LCAyMjIsIDE2NSwgNzMsIDcyLCA0LCAyMjYsIDQsIDIyMiwgMTc2LCA3MywgNzIsIDQsIDIyNSwgMjI5LCAyMjIsIAorICAgIDE3NywgNzMsIDcyLCA0LCAyMjUsIDIxOSwgMjIyLCAxNjYsIDczLCA3MiwgNCwgMjI1LCAyNTUsIDIyMiwgMTY3LCA3MywgCisgICAgNzIsIDQsIDIyNSwgMjE2LCAyMjIsIDE4MSwgNzMsIDcyLCA0LCAyMjUsIDI0OCwgMjIyLCAxNjQsIDczLCA3MiwgNCwgMjI2LCAKKyAgICAzMywgMTYzLCAyMjIsIDE3NywgNzMsIDcyLCA0LCAyMjYsIDEzLCAxNjMsIDIyMiwgMTY2LCA3MywgNzIsIDQsIDIyNSwgCisgICAgMTkyLCAxNjMsIDIyMiwgMTY3LCA3MywgNzIsIDQsIDIyNSwgMjIwLCAyMzgsIDgxLCA3MywgNzIsIDQsIDIyNiwgOCwgMjM5LCAKKyAgICA4LCA3MywgNzIsIDQsIDIyNSwgMjA3LCAyMzcsIDIzMCwgNzMsIDcyLCA0LCAyMjUsIDE4NSwgMjM4LCAxODIsIDczLCA3MiwgCisgICAgNCwgMjI1LCAyMDksIDIzNywgMjE2LCA3MywgNzIsIDQsIDIyNSwgMjA4LCAyMzcsIDIyNiwgNzMsIDcyLCA0LCAyMjUsIAorICAgIDE5MSwgMjIyLCAxODcsIDczLCA3MiwgNCwgMjI2LCA2MiwgMjIyLCAxMjQsIDczLCA3MiwgNCwgMjI1LCAxOTgsIDIyMiwgCisgICAgMTEzLCA3MywgNzIsIDQsIDIyNiwgNTEsIDIxOCwgMTY3LCA3MywgNzIsIDQsIDIyNiwgMjAsIDE4NSwgNzMsIDcyLCA0LCAKKyAgICAyMjYsIDY5LCAyMTcsIDE5MSwgNzMsIDcyLCA0LCAyMjYsIDM4LCAyMTksIDIzLCA3MywgNzIsIDQsIDIyNiwgNjgsIDIxOSwgCisgICAgMzQsIDczLCA3MiwgNCwgMjI2LCAxNywgMjE4LCA0NSwgNzMsIDcyLCA0LCAyMjYsIDUzLCAyMTgsIDY5LCA3MywgNzIsIDQsIAorICAgIDIyNSwgMjMwLCAyMjUsIDM5LCA3MywgNzIsIDQsIDIyNiwgNTcsIDIyNSwgNTQsIDczLCA3MiwgNCwgMjI1LCAyNTMsIDIyNSwgCisgICAgMzMsIDczLCA3MiwgNCwgMjI2LCA3MiwgMjI1LCA0NiwgNzMsIDcyLCA0LCAyMjUsIDE4NywgMjI1LCA0NiwgNzMsIDcyLCA0LCAKKyAgICAyMjYsIDQ3LCAyMjUsIDQ3LCA3MywgNzIsIDQsIDIyNSwgMjAzLCAyMjUsIDM0LCA3MywgNzIsIDQsIDIyNSwgMjAxLCAyMjUsIAorICAgIDM1LCA3MywgNzIsIDQsIDIyNSwgMTg4LCAyMjUsIDI3LCA3MywgNzIsIDQsIDIyNSwgMjE0LCAxNjMsIDIyNSwgNDcsIDczLCAKKyAgICA3MiwgNCwgMjI2LCAxNCwgMTYzLCAyMjUsIDM0LCA3MywgNzIsIDQsIDIyNSwgMjMzLCAxNjMsIDIyNSwgMzUsIDczLCA3MiwgCisgICAgNCwgMjI1LCAyNDMsIDIyOCwgMjM2LCA3MywgNzIsIDQsIDIyNiwgMjcsIDIyOCwgMjQ0LCA3MywgNzIsIDQsIDIyNiwgNDUsIAorICAgIDIyOCwgMjMyLCA3MywgNzIsIDQsIDIyNiwgNzYsIDIyOCwgMjM5LCA3MywgNzIsIDQsIDIyNiwgMTEsIDIyOCwgMjQwLCA3MywgCisgICAgNzIsIDQsIDIyNiwgNywgMjI4LCAyMzQsIDczLCA3MiwgNCwgMjI1LCAyMTcsIDIyOCwgMjM1LCA3MywgNzIsIDQsIDIyNSwgCisgICAgMjUxLCAyMzgsIDE5OSwgNzMsIDcyLCA0LCAyMjYsIDYzLCAyMzgsIDIwNywgNzMsIDcyLCA0LCAyMjUsIDIyNywgMjM4LCAKKyAgICAxOTQsIDczLCA3MiwgNCwgMjI2LCAyNiwgMjM4LCAyMDMsIDczLCA3MiwgNCwgMjI2LCAxMiwgMjM4LCAyMDQsIDczLCA3MiwgCisgICAgNCwgMjI2LCA0OCwgMjM4LCAxOTUsIDczLCA3MiwgNCwgMjI2LCA0OSwgMjM4LCAxOTcsIDczLCA3MiwgNCwgMjI1LCAyMDQsIAorICAgIDIxNiwgMjIwLCA3MywgNzIsIDQsIDIyNSwgMjUyLCAyMjMsIDEwLCA3MywgNzIsIDQsIDIyNSwgMjQ2LCAyMjMsIDI1LCA3MywgCisgICAgNzIsIDQsIDIyNSwgMjUwLCAyMjIsIDI0OCwgNzMsIDcyLCA0LCAyMjUsIDE4NCwgMjIzLCAxNiwgNzMsIDcyLCA0LCAyMjYsIAorICAgIDAsIDIyMywgMTcsIDczLCA3MiwgNCwgMjI2LCA1MiwgMjIyLCAyNTMsIDczLCA3MiwgNCwgMjI2LCA1NSwgMjIzLCAxLCA3MywgCisgICAgNzIsIDQsIDIyNSwgMjIzLCAyMjIsIDQ4LCA3MywgNzIsIDQsIDIyNSwgMTgzLCAyMjIsIDE4LCA3MywgNzIsIDQsIDIyNSwgCisgICAgMjI2LCAyMjIsIDM5LCA3MywgNzIsIDQsIDIyNSwgMjQxLCAyMjIsIDIyLCA3MywgNzIsIDQsIDIyNSwgMTkzLCAyMDUsIAorICAgIDIzMCwgNzMsIDcyLCA0LCAyMjUsIDE5MCwgMjA2LCA4NiwgNzMsIDcyLCA0LCAyMjUsIDIyNCwgMjA0LCAxNjMsIDczLCA3MiwgCisgICAgNCwgMjI1LCAyMDIsIDIwNiwgNTAsIDczLCA3MiwgNCwgMjI2LCAzNCwgMjA2LCA1NSwgNzMsIDcyLCA0LCAyMjUsIDIzMSwgCisgICAgMjA1LCAxNzYsIDczLCA3MiwgNCwgMjI2LCA0MiwgMjA1LCAxODksIDczLCA3MiwgNCwgMjI1LCAyMTEsIDIyMCwgMjQyLCAKKyAgICA3MywgNzIsIDQsIDIyNiwgNjEsIDIyMSwgNSwgNzMsIDcyLCA0LCAyMjUsIDIwNSwgMjIwLCAyMjQsIDczLCA3MiwgNCwgCisgICAgMjI2LCAyMSwgMjIwLCAyNTMsIDczLCA3MiwgNCwgMjI2LCA1OSwgMjIwLCAyMzEsIDczLCA3MiwgMTcsIDEwNSwgNzMsIDcyLCAKKyAgICAxNywgMTA4LCA3MywgNzIsIDE3LCAxNDcsIDczLCA3MiwgMTcsIDE0OSwgNzMsIDcyLCAxNywgMTcwLCA3MywgNzIsIDE3LCAKKyAgICAxOTUsIDczLCA3MiwgMTcsIDIxMywgMTExLCA3MywgNzIsIDE3LCAxOTksIDczLCA3MiwgMTcsIDIyMiwgNjMsIDczLCA3MiwgCisgICAgMzksIDQyLCAyMDksIDE3NCwgNzMsIDcyLCAzOSwgNDIsIDIwOSwgMTQ3LCA3MywgNzIsIDM5LCA0MiwgMjM2LCAxMCwgNzMsIAorICAgIDcyLCAzOSwgNDIsIDIwOSwgMzQsIDczLCA3MiwgMzksIDQyLCAyMDksIDE1MywgMjA5LCAzNCwgNzMsIDcyLCAzOSwgNDIsIAorICAgIDIzNiwgMTIsIDIwOSwgMzQsIDczLCA3MiwgMzksIDQyLCAyMjQsIDExMywgMTAsIDEzLCAyNTEsIDMwLCAxMCwgMTMsIDI0OCwgCisgICAgMTM4LCAxMCwgMTMsIDIzMCwgMTU4LCAxMCwgMTMsIDI0NCwgMTg0LCAxMCwgMTMsIDIwNCwgNzAsIDEwLCAxMywgMjAyLCAKKyAgICAxMDcsIDEwLCAxMywgMjM3LCAxNDgsIDEwLCAxMywgMjA5LCAyNTEsIDEwLCAxMywgMjAzLCA0NywgMTAsIDEzLCAyMzAsIAorICAgIDIyLCAxMCwgMTMsIDIyOCwgMjgsIDEwLCAxMywgMjI1LCA1LCAxMCwgMTMsIDIyMSwgMTc4LCAxMCwgMTMsIDIxNCwgMTYxLCAKKyAgICAxMCwgMTMsIDI1MSwgNTksIDEwLCAxMywgMjQwLCA0NywgMTAsIDEzLCAyMTUsIDI4LCAxMCwgMTMsIDIxNywgMTE5LCAxMCwgCisgICAgMTMsIDIxNiwgMTIyLCAxMCwgMTMsIDIxMywgMzksIDEwLCAxMywgMjA5LCAxNjksIDEwLCAxMywgMjA5LCA4OCwgMTAsIDEzLCAKKyAgICAyMjksIDE0MCwgMTAsIDEzLCAyMDksIDEwMCwgMTAsIDEzLCAyNDQsIDIwNywgMTAsIDEzLCAyMDIsIDExMCwgMTAsIDEzLCAKKyAgICAyMzgsIDExNCwgMTAsIDEzLCAyNDMsIDg0LCAyNDgsIDEzOCwgMTAsIDEzLCAyNDMsIDg0LCAyMjEsIDE3OCwgMTAsIDEzLCAKKyAgICAyNDMsIDg0LCAyNDAsIDQ3LCAxMCwgMTMsIDI0MywgODQsIDIxNywgMTE5LCAxMCwgMTMsIDgxLCAyNDgsIDEzOCwgMTAsIAorICAgIDEzLCA4MSwgMjMwLCAxNTgsIDEwLCAxMywgODEsIDIzNywgNDMsIDEwLCAxMywgODEsIDIzNywgMTQ4LCAxMCwgMTMsIDgxLCAKKyAgICAyMDMsIDQ3LCAxMCwgMTMsIDgxLCAyMzAsIDIyLCAxMCwgMTMsIDgxLCAyMjgsIDI4LCAxMCwgMTMsIDgxLCAyMjUsIDUsIAorICAgIDEwLCAxMywgODEsIDIyMSwgMTc4LCAxMCwgMTMsIDgxLCAyMTQsIDE2MSwgMTAsIDEzLCA4MSwgMjUxLCA1OSwgMTAsIDEzLCAKKyAgICA4MSwgMjQwLCA0NywgMTAsIDEzLCA4MSwgMjE1LCAyOCwgMTAsIDEzLCA4MSwgMjE3LCAxMTksIDEwLCAxMywgODEsIDIxMywgCisgICAgMzksIDEwLCAxMywgODEsIDIwOSwgMTY5LCAxMCwgMTMsIDgxLCAyMDksIDg4LCAxMCwgMTMsIDgxLCAyMjksIDE0MCwgMTAsIAorICAgIDEzLCA4MSwgMjQ0LCAyMDcsIDEwLCAxMywgODEsIDIzOCwgMTE0LCAxMCwgMTMsIDIwOSwgMjQ3LCAyMzAsIDE1OCwgMTAsIAorICAgIDEzLCAyMDksIDI0NywgMjM3LCAxNDgsIDEwLCAxMywgMjA5LCAyNDcsIDIwMywgNDcsIDEwLCAxMywgMjA5LCAyNDcsIDIyOCwgCisgICAgMjgsIDEwLCAxMywgMjA5LCAyNDcsIDIyMSwgMTc4LCAxMCwgMTMsIDIwOSwgMjQ3LCAyMTQsIDE2MSwgMTAsIDEzLCAyMDksIAorICAgIDI0NywgMjUxLCA1OSwgMTAsIDEzLCAyMDksIDI0NywgMjE1LCAyOCwgMTAsIDEzLCAyMDksIDI0NywgMjE3LCAxMTksIDEwLCAKKyAgICAxMywgMjA5LCAyNDcsIDIxMywgMzksIDEwLCAxMywgMjA5LCAyNDcsIDIyOSwgMTQwLCAxMCwgMTMsIDIwOSwgMjQ3LCAyNDQsIAorICAgIDIwNywgMTAsIDEzLCAyMDksIDI0NywgMjM4LCAxMTQsIDEwLCAxMywgMjA5LCAyNDcsIDI0MywgODQsIDIyMSwgMTc4LCAxMCwgCisgICAgMTMsIDIwOSwgMjQ3LCAyNDMsIDg0LCAyMTcsIDExOSwgMTAsIDEzLCAyMTEsIDQwLCAyNDgsIDEzOCwgMTAsIDEzLCAyMTEsIAorICAgIDQwLCAyMzAsIDE1OCwgMTAsIDEzLCAyMTEsIDQwLCAyMzcsIDQzLCAxMCwgMTMsIDIxMSwgNDAsIDIzNywgMTQ4LCAxMCwgCisgICAgMTMsIDIxMSwgNDAsIDIwOSwgMjUxLCAxMCwgMTMsIDIxMSwgNDAsIDIwMywgNDcsIDEwLCAxMywgMjExLCA0MCwgMjMwLCAKKyAgICAyMiwgMTAsIDEzLCAyMTEsIDQwLCAyMjUsIDUsIDEwLCAxMywgMjExLCA0MCwgMjIxLCAxNzgsIDEwLCAxMywgMjExLCA0MCwgCisgICAgMjE0LCAxNjEsIDEwLCAxMywgMjExLCA0MCwgMjUxLCA1OSwgMTAsIDEzLCAyMTEsIDQwLCAyNDAsIDQ3LCAxMCwgMTMsIAorICAgIDIxMSwgNDAsIDIxNSwgMjgsIDEwLCAxMywgMjExLCA0MCwgMjE3LCAxMTksIDEwLCAxMywgMjExLCA0MCwgMjEzLCAzOSwgCisgICAgMTAsIDEzLCAyMTEsIDQwLCAyMDksIDE2OSwgMTAsIDEzLCAyMTEsIDQwLCAyMDksIDg4LCAxMCwgMTMsIDIxMSwgNDAsIAorICAgIDIyOSwgMTQwLCAxMCwgMTMsIDIxMSwgNDAsIDI0NCwgMjA3LCAxMCwgMTMsIDIxMSwgNDAsIDIwMiwgMTEwLCAxMCwgMTMsIAorICAgIDIxMSwgNDAsIDIzOCwgMTE0LCAxMCwgMTMsIDIxMSwgNDAsIDI0MywgODQsIDI0OCwgMTM4LCAxMCwgMTMsIDIxMSwgNDAsIAorICAgIDI0MywgODQsIDI0MCwgNDcsIDEwLCAxMywgMjI3LCAxMywgMjUxLCAzMCwgMTAsIDEzLCAyMjcsIDEzLCAyNDgsIDEzOCwgCisgICAgMTAsIDEzLCAyMjcsIDEzLCAyMzAsIDE1OCwgMTAsIDEzLCAyMjcsIDEzLCAyNDQsIDE4NCwgMTAsIDEzLCAyMjcsIDEzLCAKKyAgICAyMzcsIDQzLCAxMCwgMTMsIDIyNywgMTMsIDIwNCwgNzAsIDEwLCAxMywgMjI3LCAxMywgMjAyLCAxMDcsIDEwLCAxMywgCisgICAgMjI3LCAxMywgMjM3LCAxNDgsIDEwLCAxMywgMjI3LCAxMywgMjA5LCAyNTEsIDEwLCAxMywgMjI3LCAxMywgMjAzLCA0NywgCisgICAgMTAsIDEzLCAyMjcsIDEzLCAyMjgsIDI4LCAxMCwgMTMsIDIyNywgMTMsIDIyNSwgNSwgMTAsIDEzLCAyMjcsIDEzLCAyMjEsIAorICAgIDE3OCwgMTAsIDEzLCAyMjcsIDEzLCAyMTQsIDE2MSwgMTAsIDEzLCAyMjcsIDEzLCAyNTEsIDU5LCAxMCwgMTMsIDIyNywgCisgICAgMTMsIDI0MCwgNDcsIDEwLCAxMywgMjI3LCAxMywgMjE1LCAyOCwgMTAsIDEzLCAyMjcsIDEzLCAyMTcsIDExOSwgMTAsIDEzLCAKKyAgICAyMjcsIDEzLCAyMTYsIDEyMiwgMTAsIDEzLCAyMjcsIDEzLCAyMTMsIDM5LCAxMCwgMTMsIDIyNywgMTMsIDIwOSwgMTY5LCAKKyAgICAxMCwgMTMsIDIyNywgMTMsIDIwOSwgODgsIDEwLCAxMywgMjI3LCAxMywgMjI5LCAxNDAsIDEwLCAxMywgMjI3LCAxMywgCisgICAgMjA5LCAxMDAsIDEwLCAxMywgMjI3LCAxMywgMjQ0LCAyMDcsIDEwLCAxMywgMjI3LCAxMywgMjAyLCAxMTAsIDEwLCAxMywgCisgICAgMjI3LCAxMywgMjM4LCAxMTQsIDEwLCAxMywgMTY5LCAyNDgsIDEzOCwgMTAsIDEzLCAxNjksIDIzMCwgMTU4LCAxMCwgMTMsIAorICAgIDE2OSwgMjQ0LCAxODQsIDEwLCAxMywgMTY5LCAyMDQsIDcwLCAxMCwgMTMsIDE2OSwgMjAyLCAxMDcsIDEwLCAxMywgMTY5LCAKKyAgICAyMzcsIDE0OCwgMTAsIDEzLCAxNjksIDIwOSwgMjUxLCAxMCwgMTMsIDE2OSwgMjAzLCA0NywgMTAsIDEzLCAxNjksIDIyOCwgCisgICAgMjgsIDEwLCAxMywgMTY5LCAyMjUsIDUsIDEwLCAxMywgMTY5LCAyMjEsIDE3OCwgMTAsIDEzLCAxNjksIDIxNCwgMTYxLCAKKyAgICAxMCwgMTMsIDE2OSwgMjUxLCA1OSwgMTAsIDEzLCAxNjksIDI0MCwgNDcsIDEwLCAxMywgMTY5LCAyMTUsIDI4LCAxMCwgMTMsIAorICAgIDE2OSwgMjE3LCAxMTksIDEwLCAxMywgMTY5LCAyMTYsIDEyMiwgMTAsIDEzLCAxNjksIDIxMywgMzksIDEwLCAxMywgMTY5LCAKKyAgICAyMDksIDE2OSwgMTAsIDEzLCAxNjksIDIwOSwgODgsIDEwLCAxMywgMTY5LCAyMjksIDE0MCwgMTAsIDEzLCAxNjksIDIwOSwgCisgICAgMTAwLCAxMCwgMTMsIDE2OSwgMjQ0LCAyMDcsIDEwLCAxMywgMTY5LCAyMDIsIDExMCwgMTAsIDEzLCAxNjksIDIzOCwgMTE0LCAKKyAgICAxMCwgMTMsIDIxOSwgMjU1LCA4MywgMywgMTUxLCAzLCAyMDksIDIwOSwgMTAsIDEzLCAyMTksIDI1NSwgMTUxLCAzLCAyNDQsIAorICAgIDE4NCwgMjI1LCAxNDIsIDk5LCAyNDEsIDE3NiwgMjA0LCAxNiwgMjI1LCAxNDIsIDk5LCAyMTEsIDIzOCwgMjA0LCAxNiwgCisgICAgMjI1LCAxNDIsIDk5LCAyMDQsIDQ2LCAyMDQsIDE2LCAyMjUsIDE0MiwgOTksIDE1MywgMjA0LCAxNiwgMjI1LCAxNDIsIDk5LCAKKyAgICAyMTYsIDEzOCwgMjQyLCA2MSwgMjI1LCAxNDIsIDk5LCAyMzcsIDI0NCwgMjQyLCA2MSwgMjI1LCAxNDIsIDk5LCA2MSwgCisgICAgMjQyLCA2MSwgMjI1LCAxNDIsIDk5LCAxMTgsIDc2LCAyNDYsIDE4MSwgMjI1LCAxNDIsIDk5LCAxMjAsIDc2LCAyNDYsIAorICAgIDE4MSwgMjI1LCAxNDIsIDk5LCAxMjYsIDc2LCAyNDYsIDE4MSwgMjI1LCAxNDIsIDk5LCAyMzksIDE0NywgNzYsIDI0NiwgCisgICAgMTgxLCAyMjUsIDE0MiwgOTksIDIzOSwgMjMzLCA3NiwgMjQ2LCAxODEsIDIyNSwgMTQyLCA5OSwgMjEyLCA4OCwgNzYsIAorICAgIDI0NiwgMTgxLCAyMjUsIDE0MiwgOTksIDIxMywgMTEyLCA3NiwgMjQ2LCAxODEsIDIyNSwgMTQyLCA5OSwgMjQxLCAxNDMsIAorICAgIDc2LCAyNDYsIDE4MSwgMjI1LCAxNDIsIDk5LCAyMjIsIDY0LCA3NiwgMjQ2LCAxODEsIDIyNSwgMTQyLCA5OSwgMTE4LCA3NiwgCisgICAgMjQ4LCAyNDMsIDIyNSwgMTQyLCA5OSwgMTIwLCA3NiwgMjQ4LCAyNDMsIDIyNSwgMTQyLCA5OSwgMTI2LCA3NiwgMjQ4LCAKKyAgICAyNDMsIDIyNSwgMTQyLCA5OSwgMjM5LCAxNDcsIDc2LCAyNDgsIDI0MywgMjI1LCAxNDIsIDk5LCAyMzksIDIzMywgNzYsIAorICAgIDI0OCwgMjQzLCAyMjUsIDE0MiwgOTksIDIxMiwgODgsIDc2LCAyNDgsIDI0MywgMjI1LCAxNDIsIDk5LCAyMTMsIDExMiwgCisgICAgNzYsIDI0OCwgMjQzLCAyMjUsIDE0MiwgOTksIDI0MSwgMTQzLCA3NiwgMjQ4LCAyNDMsIDIyNSwgMTQyLCA5OSwgMjIyLCAKKyAgICA2NCwgNzYsIDI0OCwgMjQzLCAyMjUsIDE0MiwgOTksIDExOCwgNzYsIDI0NiwgNTgsIDIyNSwgMTQyLCA5OSwgMTIwLCA3NiwgCisgICAgMjQ2LCA1OCwgMjI1LCAxNDIsIDk5LCAxMjYsIDc2LCAyNDYsIDU4LCAyMjUsIDE0MiwgOTksIDIzOSwgMTQ3LCA3NiwgMjQ2LCAKKyAgICA1OCwgMjI1LCAxNDIsIDk5LCAyMzksIDIzMywgNzYsIDI0NiwgNTgsIDIyNSwgMTQyLCA5OSwgMjEyLCA4OCwgNzYsIDI0NiwgCisgICAgNTgsIDIyNSwgMTQyLCA5OSwgMjEzLCAxMTIsIDc2LCAyNDYsIDU4LCAyMjUsIDE0MiwgOTksIDI0MSwgMTQzLCA3NiwgMjQ2LCAKKyAgICA1OCwgMjI1LCAxNDIsIDk5LCAyMjIsIDY0LCA3NiwgMjQ2LCA1OCwgMjI1LCAxNDIsIDk5LCAyMTgsIDc5LCAyMjUsIDE0MiwgCisgICAgOTksIDIxOSwgMjQyLCAyMjUsIDE0MiwgOTksIDI0OCwgMjQ0LCAyMjUsIDE0MiwgOTksIDI0NiwgOTksIDIyNSwgMTQyLCAKKyAgICA5OSwgMjExLCAxODMsIDIyNSwgMTQyLCA5OSwgMjEwLCAyMTYsIDIyNSwgMTQyLCA5OSwgMjUwLCAyMSwgMjI1LCAxNDIsIAorICAgIDk5LCAyMDQsIDcsIDIyNSwgMTQyLCA5OSwgMjMwLCA5NCwgMjI1LCAxNDIsIDk5LCAyNDksIDI1LCAxNjEsIDk5LCAyMzYsIAorICAgIDEwNiwgMjQ5LCAyNSwgMTYxLCA5OSwgMjM2LCAxMDQsIDE2MSwgOTksIDIzNiwgMTAzLCAxNjEsIDk5LCAyMzYsIDEwMiwgCisgICAgMTYxLCA5OSwgMjM2LCAxMDEsIDE2MSwgOTksIDIzNiwgMTAwLCAxNjEsIDk5LCAyMzYsIDk5LCAxNjEsIDk5LCAyMzYsIDk4LCAKKyAgICAxNjEsIDk5LCAyMzYsIDk3LCAxNjEsIDk5LCAyMzYsIDk2LCAxNjEsIDk5LCAyMzYsIDk1LCAxNjEsIDk5LCAyMzYsIDk0LCAKKyAgICAxNjEsIDk5LCAyMzYsIDkzLCAxNjEsIDk5LCAyMzYsIDkyLCAxNjEsIDk5LCAyMzYsIDkxLCAxNjEsIDk5LCAyMzYsIDkwLCAKKyAgICAxNjEsIDk5LCAyMzYsIDg5LCAxNjEsIDk5LCAyMzYsIDg4LCAxNjEsIDk5LCAyMzYsIDg3LCAxNjEsIDk5LCAyMzYsIDg2LCAKKyAgICAxNjEsIDk5LCAyMzYsIDg1LCAxNjEsIDk5LCAyMzYsIDg0LCAxNjEsIDk5LCAyMzYsIDgzLCAxNjEsIDk5LCAyMzYsIDgyLCAKKyAgICAxNjEsIDk5LCAyMzYsIDgxLCAxNjEsIDk5LCAyMzYsIDgwLCAxNjEsIDk5LCAyMzYsIDc5LCAxNjEsIDk5LCAyMzYsIDc4LCAKKyAgICAxNjEsIDk5LCAyMzYsIDc3LCAxNjEsIDk5LCAyMzYsIDc2LCAxNjEsIDk5LCAyMzYsIDc1LCAxNjEsIDk5LCAyMzYsIDc0LCAKKyAgICAxNjEsIDk5LCAyMzYsIDczLCAxNjEsIDk5LCAyMzYsIDcyLCAxNjEsIDk5LCAyMzYsIDcxLCAxNjEsIDk5LCAyMzYsIDcwLCAKKyAgICAxNjEsIDk5LCAyMzYsIDY5LCAxNjEsIDk5LCAyMzYsIDY4LCAxNjEsIDk5LCAyMzYsIDY3LCAxNjEsIDk5LCAyMzYsIDY2LCAKKyAgICAxNjEsIDk5LCAyMzYsIDY1LCAxNjEsIDk5LCAyMzYsIDY0LCAxNjEsIDk5LCAyMzYsIDYzLCAxNjEsIDk5LCAyMzYsIDYyLCAKKyAgICAxNjEsIDk5LCAyMzYsIDYxLCAxNjEsIDk5LCAyMzYsIDYwLCAxNjEsIDk5LCAyMzYsIDU5LCAxNjEsIDk5LCAyMzYsIDU4LCAKKyAgICAxNjEsIDk5LCAyMzYsIDU3LCAxNjEsIDk5LCAyMzYsIDU2LCAxNjEsIDk5LCA4MCwgMjQ5LCAyNSwgMTYxLCA5OSwgMjA2LCAKKyAgICAzNywgMTYxLCA5OSwgMjA2LCAzNiwgMTYxLCA5OSwgMjA2LCAzNSwgMTYxLCA5OSwgMjA2LCAzNCwgMTYxLCA5OSwgMjA2LCAKKyAgICAzMywgMTYxLCA5OSwgMjA2LCAzMiwgMTYxLCA5OSwgMjA2LCAzMSwgMTYxLCA5OSwgMjA2LCAzMCwgMTYxLCA5OSwgMjA2LCAKKyAgICAyOSwgMTYxLCA5OSwgMjA2LCAyOCwgMTYxLCA5OSwgMjA2LCAyNywgMTYxLCA5OSwgMjA2LCAyNiwgMTYxLCA5OSwgMjA2LCAKKyAgICAyNSwgMTYxLCA5OSwgMjA2LCAyNCwgMTYxLCA5OSwgMjA2LCAyMywgMTYxLCA5OSwgMjA2LCAyMiwgMTYxLCA5OSwgMjA2LCAKKyAgICAyMSwgMTYxLCA5OSwgMjA2LCAyMCwgMTYxLCA5OSwgMjA2LCAxOSwgMTYxLCA5OSwgMjA2LCAxOCwgMTYxLCA5OSwgMjA2LCAKKyAgICAxNywgMTYxLCA5OSwgMjA2LCAxNiwgMTYxLCA5OSwgMjA2LCAxNSwgMTYxLCA5OSwgMjA2LCAxNCwgMTYxLCA5OSwgMjA2LCAKKyAgICAxMywgMTYxLCA5OSwgMjA2LCAxMiwgMTYxLCA5OSwgMjA2LCAxMSwgMTYxLCA5OSwgMjA2LCAxMCwgMTYxLCA5OSwgMjA2LCAKKyAgICA5LCAxNjEsIDk5LCAyMDYsIDgsIDE2MSwgOTksIDIwNiwgNywgMTYxLCA5OSwgMjA2LCA2LCAxNjEsIDk5LCAyMDYsIDUsIAorICAgIDE2MSwgOTksIDIwNiwgNCwgMTYxLCA5OSwgMjA2LCAzLCAxNjEsIDk5LCAyMDYsIDIsIDE2MSwgOTksIDIwNiwgMSwgMTYxLCAKKyAgICA5OSwgMjA2LCAwLCAxNjEsIDk5LCAyMDUsIDI1NSwgMTYxLCA5OSwgMjA1LCAyNTQsIDE2MSwgOTksIDIwNSwgMjUzLCAxNjEsIAorICAgIDk5LCAyMDUsIDI1MiwgMTYxLCA5OSwgMjA1LCAyNTEsIDE2MSwgOTksIDIwNSwgMjUwLCAxNjEsIDk5LCAyMDUsIDI0OSwgCisgICAgMTYxLCA5OSwgMjA1LCAyNDgsIDE2MSwgOTksIDIwNSwgMjQ3LCAxNjEsIDk5LCAyMDUsIDI0NiwgMTYxLCA5OSwgMjA1LCAKKyAgICAyNDUsIDIxOCwgODgsIDI0NywgMzgsIDI0OSwgMjUsIDIxOCwgODgsIDI0NywgMzgsIDI1MSwgMTMyLCA3NiwgMjExLCAyMjUsIAorICAgIDIxOCwgODgsIDI0NywgMzgsIDEyMCwgNzYsIDIxMSwgMjI1LCAyMTgsIDg4LCAyNDcsIDM4LCAxMjYsIDc2LCAyMTEsIDIyNSwgCisgICAgMjE4LCA4OCwgMjQ3LCAzOCwgMjM5LCAxNDcsIDc2LCAyMTEsIDIyNSwgMjE4LCA4OCwgMjQ3LCAzOCwgMjM5LCAyMzMsIDc2LCAKKyAgICAyMTEsIDIyNSwgMjE4LCA4OCwgMjQ3LCAzOCwgMjEyLCA4OCwgNzYsIDIxMSwgMjI1LCAyMTgsIDg4LCAyNDcsIDM4LCAyMTMsIAorICAgIDExMiwgNzYsIDIxMSwgMjI1LCAyMTgsIDg4LCAyNDcsIDM4LCAyNDEsIDE0MywgNzYsIDIxMSwgMjI1LCAyMTgsIDg4LCAKKyAgICAyNDcsIDM4LCAyMjIsIDY0LCA3NiwgMjExLCAyMjUsIDIxOCwgODgsIDI0NywgMzgsIDIwOSwgMTUzLCA3NiwgMjExLCAyMjUsIAorICAgIDIxOCwgODgsIDI0NywgMzgsIDIzMCwgMTc5LCA3NiwgMjExLCAyMjUsIDIxOCwgODgsIDI0NywgMzgsIDIyOSwgMzIsIDc2LCAKKyAgICAyMTEsIDIyNSwgMjE4LCA4OCwgMjQ3LCAzOCwgMjE3LCA0OSwgNzYsIDIxMSwgMjI1LCAyMTgsIDg4LCAyNDcsIDM4LCAyMjksIAorICAgIDgyLCA3NiwgMjExLCAyMjUsIDIxOCwgODgsIDI0NywgMzgsIDI1MSwgMTMyLCA3NiwgMjM3LCA1MywgMjE4LCA4OCwgMjQ3LCAKKyAgICAzOCwgMTIwLCA3NiwgMjM3LCA1MywgMjE4LCA4OCwgMjQ3LCAzOCwgMTI2LCA3NiwgMjM3LCA1MywgMjE4LCA4OCwgMjQ3LCAKKyAgICAzOCwgMjM5LCAxNDcsIDc2LCAyMzcsIDUzLCAyMTgsIDg4LCAyNDcsIDM4LCAyMzksIDIzMywgNzYsIDIzNywgNTMsIDIxOCwgCisgICAgODgsIDI0NywgMzgsIDIxMiwgODgsIDc2LCAyMzcsIDUzLCAyMTgsIDg4LCAyNDcsIDM4LCAyMTMsIDExMiwgNzYsIDIzNywgCisgICAgNTMsIDIxOCwgODgsIDI0NywgMzgsIDI0MSwgMTQzLCA3NiwgMjM3LCA1MywgMjE4LCA4OCwgMjQ3LCAzOCwgMjIyLCA2NCwgCisgICAgNzYsIDIzNywgNTMsIDIxOCwgODgsIDI0NywgMzgsIDIwOSwgMTUzLCA3NiwgMjM3LCA1MywgMjE4LCA4OCwgMjQ3LCAzOCwgCisgICAgMjMwLCAxNzksIDc2LCAyMzcsIDUzLCAyMTgsIDg4LCAyNDcsIDM4LCAyMjksIDMyLCA3NiwgMjM3LCA1MywgMjE4LCA4OCwgCisgICAgMjQ3LCAzOCwgMjE3LCA0OSwgNzYsIDIzNywgNTMsIDIxOCwgODgsIDI0NywgMzgsIDIyOSwgODIsIDc2LCAyMzcsIDUzLCAKKyAgICAyMTgsIDg4LCAyNDcsIDM4LCAyMTYsIDEzOCwgMjMwLCA5NCwgMjE4LCA4OCwgMjQ3LCAzOCwgMjUxLCAxMzIsIDc2LCAyNDMsIAorICAgIDIyMCwgMjE4LCA4OCwgMjQ3LCAzOCwgMTIwLCA3NiwgMjQzLCAyMjAsIDIxOCwgODgsIDI0NywgMzgsIDEyNiwgNzYsIDI0MywgCisgICAgMjIwLCAyMTgsIDg4LCAyNDcsIDM4LCAyMzksIDE0NywgNzYsIDI0MywgMjIwLCAyMTgsIDg4LCAyNDcsIDM4LCAyMzksIAorICAgIDIzMywgNzYsIDI0MywgMjIwLCAyMTgsIDg4LCAyNDcsIDM4LCAyMTIsIDg4LCA3NiwgMjQzLCAyMjAsIDIxOCwgODgsIDI0NywgCisgICAgMzgsIDIxMywgMTEyLCA3NiwgMjQzLCAyMjAsIDIxOCwgODgsIDI0NywgMzgsIDI0MSwgMTQzLCA3NiwgMjQzLCAyMjAsIAorICAgIDIxOCwgODgsIDI0NywgMzgsIDIyMiwgNjQsIDc2LCAyNDMsIDIyMCwgMjE4LCA4OCwgMjQ3LCAzOCwgMjA5LCAxNTMsIDc2LCAKKyAgICAyNDMsIDIyMCwgMjE4LCA4OCwgMjQ3LCAzOCwgMjMwLCAxNzksIDc2LCAyNDMsIDIyMCwgMjE4LCA4OCwgMjQ3LCAzOCwgCisgICAgMjI5LCAzMiwgNzYsIDI0MywgMjIwLCAyMTgsIDg4LCAyNDcsIDM4LCAyMTcsIDQ5LCA3NiwgMjQzLCAyMjAsIDIxOCwgODgsIAorICAgIDI0NywgMzgsIDIyOSwgODIsIDc2LCAyNDMsIDIyMCwgMjE4LCA4OCwgMjQ3LCAzOCwgNjIsIDIzMCwgOTQsIDIxOCwgODgsIAorICAgIDI0NywgMzgsIDI1MSwgMTMyLCA3NiwgMjQ2LCAyLCAyMTgsIDg4LCAyNDcsIDM4LCAxMjAsIDc2LCAyNDYsIDIsIDIxOCwgCisgICAgODgsIDI0NywgMzgsIDEyNiwgNzYsIDI0NiwgMiwgMjE4LCA4OCwgMjQ3LCAzOCwgMjM5LCAxNDcsIDc2LCAyNDYsIDIsIAorICAgIDIxOCwgODgsIDI0NywgMzgsIDIzOSwgMjMzLCA3NiwgMjQ2LCAyLCAyMTgsIDg4LCAyNDcsIDM4LCAyMTIsIDg4LCA3NiwgCisgICAgMjQ2LCAyLCAyMTgsIDg4LCAyNDcsIDM4LCAyMTMsIDExMiwgNzYsIDI0NiwgMiwgMjE4LCA4OCwgMjQ3LCAzOCwgMjQxLCAKKyAgICAxNDMsIDc2LCAyNDYsIDIsIDIxOCwgODgsIDI0NywgMzgsIDIyMiwgNjQsIDc2LCAyNDYsIDIsIDIxOCwgODgsIDI0NywgMzgsIAorICAgIDIwOSwgMTUzLCA3NiwgMjQ2LCAyLCAyMTgsIDg4LCAyNDcsIDM4LCAyMzAsIDE3OSwgNzYsIDI0NiwgMiwgMjE4LCA4OCwgCisgICAgMjQ3LCAzOCwgMjI5LCAzMiwgNzYsIDI0NiwgMiwgMjE4LCA4OCwgMjQ3LCAzOCwgMjE3LCA0OSwgNzYsIDI0NiwgMiwgMjE4LCAKKyAgICA4OCwgMjQ3LCAzOCwgMjI5LCA4MiwgNzYsIDI0NiwgMiwgMjE4LCA4OCwgMjQ3LCAzOCwgNjEsIDIzMCwgOTQsIDIxOCwgODgsIAorICAgIDI0NywgMzgsIDIzOSwgMTczLCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDQ4LCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDM3LCAKKyAgICAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDM0LCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDMzLCAyMTgsIDg4LCAyNDcsIDM4LCAKKyAgICAyMDgsIDMyLCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDMxLCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDMwLCAyMTgsIDg4LCAKKyAgICAyNDcsIDM4LCAyMDgsIDI5LCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDI4LCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDQ3LCAKKyAgICAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDQ2LCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDQ1LCAyMTgsIDg4LCAyNDcsIDM4LCAKKyAgICAyMDgsIDQ0LCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDQzLCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDQyLCAyMTgsIDg4LCAKKyAgICAyNDcsIDM4LCAyMDgsIDQxLCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDQwLCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDM5LCAKKyAgICAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDM4LCAyMTgsIDg4LCAyNDcsIDM4LCAyMDgsIDM2LCAyMTgsIDg4LCAyNDcsIDM4LCAKKyAgICAyMDgsIDM1LCAxNywgMjAyLCA4NSwgMjM5LCAxMDIsIDIxMSwgNjEsIDE3LCAyMDIsIDg1LCAyNDUsIDIzMywgMTcsIDExOCwgCisgICAgMjQ1LCAyMzMsIDE3LCAxMjAsIDI0NSwgMjMzLCAxNywgMTI2LCAyNDUsIDIzMywgMTcsIDIzOSwgMTQ3LCAyNDUsIDIzMywgCisgICAgMTcsIDIzOSwgMjMzLCAyNDUsIDIzMywgMTcsIDIxMiwgODgsIDI0NSwgMjMzLCAxNywgMjEzLCAxMTIsIDI0NSwgMjMzLCAKKyAgICAxNywgMjQxLCAxNDMsIDI0NSwgMjMzLCAxNywgMjIyLCA2NCwgMjQ1LCAyMzMsIDI0MywgMTc0LCA0MywgNDEsIDE3LCAyMDIsIAorICAgIDg0LCAyNDMsIDE3NCwgMTgyLCA0MywgNDEsIDE3LCAyMDIsIDg0LCAxMDIsIDgsIDYsIDEsIDYzLCAxMDIsIDgsIDYsIDEsIAorICAgIDI0OSwgMjU1LCAxMDIsIDgsIDYsIDEsIDI0NywgMTI1LCAxMDIsIDgsIDYsIDEsIDI0NSwgNTEsIDEwMiwgOCwgNiwgMSwgCisgICAgNzQsIDEwMiwgOCwgNiwgMSwgMjQwLCAxNzQsIDEwMiwgOCwgNiwgMSwgMjM5LCA3NSwgMTAyLCA4LCA2LCAxLCAyMzcsIAorICAgIDE3MSwgMTAyLCA4LCA2LCAxLCA3NSwgMTAyLCA4LCA2LCAxLCAyMzAsIDE4NCwgMTAyLCA4LCA2LCAxLCAyMzAsIDU0LCAKKyAgICAxMDIsIDgsIDYsIDEsIDE1OSwgMTAyLCA4LCA2LCAxLCAyMjYsIDE4NSwgMTAyLCA4LCA2LCAxLCAyMjMsIDE2MywgMTAyLCAKKyAgICA4LCA2LCAxLCA3OCwgMTAyLCA4LCA2LCAxLCAyMTksIDE4NCwgMTAyLCA4LCA2LCAxLCAyMTcsIDEzNCwgMTAyLCA4LCA2LCAKKyAgICAxLCAxNDYsIDEwMiwgOCwgNiwgMSwgMTk0LCAxMDIsIDgsIDYsIDEsIDIxMCwgNjksIDEwMiwgOCwgNiwgMSwgNjgsIDEwMiwgCisgICAgOCwgNiwgMSwgMjA2LCAxNjQsIDEwMiwgOCwgNiwgMSwgMjA0LCAxNDQsIDEwMiwgOCwgNiwgMSwgMjAzLCAxOTYsIDEwMiwgCisgICAgOCwgNiwgMSwgMjAzLCAxMjQsIDEwMiwgOCwgNiwgMSwgMjAyLCAxNTksIDIwOCwgMTMzLCAyMTMsIDMzLCAyNDcsIDIyNiwgCisgICAgOCwgNiwgMSwgMTk0LCA0MywgMzcsIDgsIDYsIDEsIDI0NywgMTI1LCA0MywgMzcsIDgsIDYsIDEsIDE0NiwgNDMsIDI0NiwgCisgICAgMjM5LCA0MywgMjAzLCAxOTgsIDEwMywgOCwgNiwgMSwgNjMsIDEwMywgOCwgNiwgMSwgMjQ5LCAyNTUsIDEwMywgOCwgNiwgCisgICAgMSwgMjQ3LCAxMjUsIDEwMywgOCwgNiwgMSwgMjQ1LCA1MSwgMTAzLCA4LCA2LCAxLCA3NCwgMTAzLCA4LCA2LCAxLCAyNDAsIAorICAgIDE3NCwgMTAzLCA4LCA2LCAxLCAyMzksIDc1LCAxMDMsIDgsIDYsIDEsIDIzNywgMTcxLCAxMDMsIDgsIDYsIDEsIDc1LCAKKyAgICAxMDMsIDgsIDYsIDEsIDIzMCwgMTg0LCAxMDMsIDgsIDYsIDEsIDIzMCwgNTQsIDEwMywgOCwgNiwgMSwgMTU5LCAxMDMsIDgsIAorICAgIDYsIDEsIDIyNiwgMTg1LCAxMDMsIDgsIDYsIDEsIDIyMywgMTYzLCAxMDMsIDgsIDYsIDEsIDc4LCAxMDMsIDgsIDYsIDEsIAorICAgIDIxOSwgMTg0LCAxMDMsIDgsIDYsIDEsIDIxNywgMTM0LCAxMDMsIDgsIDYsIDEsIDE0NiwgMTAzLCA4LCA2LCAxLCAxOTQsIAorICAgIDEwMywgOCwgNiwgMSwgMjEwLCA2OSwgMTAzLCA4LCA2LCAxLCA2OCwgMTAzLCA4LCA2LCAxLCAyMDYsIDE2NCwgMTAzLCA4LCAKKyAgICA2LCAxLCAyMDQsIDE0NCwgMTAzLCA4LCA2LCAxLCAyMDMsIDE5NiwgMTAzLCA4LCA2LCAxLCAyMDMsIDEyNCwgMTAzLCA4LCAKKyAgICA2LCAxLCAyMDIsIDE1OSwgMTAzLCAyMzUsIDI1NSwgMTAzLCAyMjMsIDE4NywgMTAzLCAyMTQsIDE3OSwgMTAzLCAyMTEsIAorICAgIDE2NywgMTAzLCAyMTgsIDEwLCAxMDMsIDIwNCwgNjMsIDE4MiwgNDMsIDgsIDYsIDEsIDYzLCAxODIsIDQzLCA4LCA2LCAxLCAKKyAgICAyNDksIDI1NSwgMTgyLCA0MywgOCwgNiwgMSwgMjQ3LCAxMjUsIDE4MiwgNDMsIDgsIDYsIDEsIDI0NSwgNTEsIDE4MiwgNDMsIAorICAgIDgsIDYsIDEsIDc0LCAxODIsIDQzLCA4LCA2LCAxLCAyNDAsIDE3NCwgMTgyLCA0MywgOCwgNiwgMSwgMjM5LCA3NSwgMTgyLCAKKyAgICA0MywgOCwgNiwgMSwgMjM3LCAxNzEsIDE4MiwgNDMsIDgsIDYsIDEsIDc1LCAxODIsIDQzLCA4LCA2LCAxLCAyMzAsIDE4NCwgCisgICAgMTgyLCA0MywgOCwgNiwgMSwgMjMwLCA1NCwgMTgyLCA0MywgOCwgNiwgMSwgMTU5LCAxODIsIDQzLCA4LCA2LCAxLCAyMjYsIAorICAgIDE4NSwgMTgyLCA0MywgOCwgNiwgMSwgMjIzLCAxNjMsIDE4MiwgNDMsIDgsIDYsIDEsIDc4LCAxODIsIDQzLCA4LCA2LCAxLCAKKyAgICAyMTksIDE4NCwgMTgyLCA0MywgOCwgNiwgMSwgMjE3LCAxMzQsIDE4MiwgNDMsIDgsIDYsIDEsIDE0NiwgMTgyLCA0MywgOCwgCisgICAgNiwgMSwgMTk0LCAxODIsIDQzLCA4LCA2LCAxLCAyMTAsIDY5LCAxODIsIDQzLCA4LCA2LCAxLCA2OCwgMTgyLCA0MywgOCwgCisgICAgNiwgMSwgMjA2LCAxNjQsIDE4MiwgNDMsIDgsIDYsIDEsIDIwNCwgMTQ0LCAxODIsIDQzLCA4LCA2LCAxLCAyMDMsIDE5NiwgCisgICAgMTgyLCA0MywgOCwgNiwgMSwgMjAzLCAxMjQsIDE4MiwgNDMsIDgsIDYsIDEsIDIwMiwgMTU5LCAyMTYsIDE4OCwgMjI1LCAKKyAgICAyNiwgNTQsIDIxNiwgMTg4LCAyMjUsIDIzLCA1NCwgMTgyLCAxMDMsIDgsIDYsIDEsIDYzLCAxODIsIDEwMywgOCwgNiwgMSwgCisgICAgMjQ5LCAyNTUsIDE4MiwgMTAzLCA4LCA2LCAxLCAyNDcsIDEyNSwgMTgyLCAxMDMsIDgsIDYsIDEsIDI0NSwgNTEsIDE4MiwgCisgICAgMTAzLCA4LCA2LCAxLCA3NCwgMTgyLCAxMDMsIDgsIDYsIDEsIDI0MCwgMTc0LCAxODIsIDEwMywgOCwgNiwgMSwgMjM5LCAKKyAgICA3NSwgMTgyLCAxMDMsIDgsIDYsIDEsIDIzNywgMTcxLCAxODIsIDEwMywgOCwgNiwgMSwgNzUsIDE4MiwgMTAzLCA4LCA2LCAKKyAgICAxLCAyMzAsIDE4NCwgMTgyLCAxMDMsIDgsIDYsIDEsIDIzMCwgNTQsIDE4MiwgMTAzLCA4LCA2LCAxLCAxNTksIDE4MiwgCisgICAgMTAzLCA4LCA2LCAxLCAyMjYsIDE4NSwgMTgyLCAxMDMsIDgsIDYsIDEsIDIyMywgMTYzLCAxODIsIDEwMywgOCwgNiwgMSwgCisgICAgNzgsIDE4MiwgMTAzLCA4LCA2LCAxLCAyMTksIDE4NCwgMTgyLCAxMDMsIDgsIDYsIDEsIDIxNywgMTM0LCAxODIsIDEwMywgCisgICAgOCwgNiwgMSwgMTQ2LCAxODIsIDEwMywgOCwgNiwgMSwgMTk0LCAxODIsIDEwMywgOCwgNiwgMSwgMjEwLCA2OSwgMTgyLCAKKyAgICAxMDMsIDgsIDYsIDEsIDY4LCAxODIsIDEwMywgOCwgNiwgMSwgMjA2LCAxNjQsIDE4MiwgMTAzLCA4LCA2LCAxLCAyMDQsIAorICAgIDE0NCwgMTgyLCAxMDMsIDgsIDYsIDEsIDIwMywgMTk2LCAxODIsIDEwMywgOCwgNiwgMSwgMjAzLCAxMjQsIDE4MiwgMTAzLCAKKyAgICA4LCA2LCAxLCAyMDIsIDE1OSwgMjQ1LCAxMjgsIDE4MiwgMTAzLCA4LCA2LCAxLCAyMTksIDE4NCwgMTgyLCAxMDMsIDIzNSwgCisgICAgMTY0LCAxODIsIDEwMywgMTg1LCAxODIsIDEwMywgMjE1LCAzNiwgMTgyLCAxMDMsIDI1MSwgMjMyLCAxODIsIDEwMywgMjA0LCAKKyAgICA2MywgNTEsIDI0MywgMTMyLCAxMDMsIDI0NiwgNDIsIDEwMywgMjQ1LCAxNzYsIDEwMywgMjM5LCAxMjksIDEwMywgMjM1LCAKKyAgICAxNTUsIDEwMywgMjIyLCAyMTMsIDEwMywgMjIyLCAyMDUsIDEwMywgMjIwLCA1MSwgMTAzLCAyMTEsIDI0NSwgMTAzLCAxMTIsIAorICAgIDMsIDI0MCwgMjEyLCA4MiwgMTAzLCAyMDUsIDE2NiwgMjE2LCAxMzAsIDIzMSwgMzIsIDE2LCAxLCA2MywgMjE2LCAxMzAsIAorICAgIDIzMSwgMzIsIDE2LCAxLCAyNDksIDI1NSwgMjE2LCAxMzAsIDIzMSwgMzIsIDE2LCAxLCAyNDcsIDEyNSwgMjE2LCAxMzAsIAorICAgIDIzMSwgMzIsIDE2LCAxLCAyNDUsIDUxLCAyMTYsIDEzMCwgMjMxLCAzMiwgMTYsIDEsIDc0LCAyMTYsIDEzMCwgMjMxLCAzMiwgCisgICAgMTYsIDEsIDI0MCwgMTc0LCAyMTYsIDEzMCwgMjMxLCAzMiwgMTYsIDEsIDIzOSwgNzUsIDIxNiwgMTMwLCAyMzEsIDMyLCAKKyAgICAxNiwgMSwgMjM3LCAxNzEsIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgNzUsIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgCisgICAgMjMwLCAxODQsIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgMjMwLCA1NCwgMjE2LCAxMzAsIDIzMSwgMzIsIDE2LCAxLCAKKyAgICAxNTksIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgMjI2LCAxODUsIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgMjIzLCAKKyAgICAxNjMsIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgNzgsIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgMjE5LCAxODQsIAorICAgIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgMjE3LCAxMzQsIDIxNiwgMTMwLCAyMzEsIDMyLCAxNiwgMSwgMTQ2LCAyMTYsIAorICAgIDEzMCwgMjMxLCAzMiwgMTYsIDEsIDE5NCwgMjE2LCAxMzAsIDIzMSwgMzIsIDE2LCAxLCAyMTAsIDY5LCAyMTYsIDEzMCwgCisgICAgMjMxLCAzMiwgMTYsIDEsIDY4LCAyMTYsIDEzMCwgMjMxLCAzMiwgMTYsIDEsIDIwNiwgMTY0LCAyMTYsIDEzMCwgMjMxLCAKKyAgICAzMiwgMTYsIDEsIDIwNCwgMTQ0LCAyMTYsIDEzMCwgMjMxLCAzMiwgMTYsIDEsIDIwMywgMTk2LCAyMTYsIDEzMCwgMjMxLCAKKyAgICAzMiwgMTYsIDEsIDIwMywgMTI0LCAyMTYsIDEzMCwgMjMxLCAzMiwgMTYsIDEsIDIwMiwgMTU5LCA1MSwgMTcyLCAyMzYsIAorICAgIDEzMCwgMTAzLCA2NywgMjI5LCAxNCwgMTAzLCA2NywgMjE1LCAzNiwgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgMTAwLCAKKyAgICAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCAxMDQsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDExMiwgMTAzLCA2NywgMjQ0LCAKKyAgICA3NSwgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgMTE5LCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCAxMDYsIDEwMywgMTIsIAorICAgIDIwNiwgMjM5LCAyMzMsIDc4LCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCAxMDUsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIAorICAgIDExOCwgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgOTIsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDg1LCAxMDMsIDEyLCAKKyAgICAyMDYsIDIzOSwgMjMzLCA5NCwgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgMTE1LCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCAKKyAgICAxMDEsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDExNywgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgOTMsIDEwMywgMTIsIAorICAgIDIwNiwgMjM5LCAyMzMsIDExNiwgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgNzksIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIAorICAgIDg0LCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCA3NywgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgMTA3LCAxMDMsIDEyLCAKKyAgICAyMDYsIDIzOSwgMjMzLCAxMDksIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDg3LCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCAKKyAgICA5OCwgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgOTYsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDEyMiwgMTAzLCAxMiwgCisgICAgMjA2LCAyMzksIDIzMywgMTIxLCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCA3NSwgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgCisgICAgMTAyLCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCAxMjAsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDExMSwgMTAzLCAxMiwgCisgICAgMjA2LCAyMzksIDIzMywgOTcsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDc2LCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCAKKyAgICA5OSwgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgODEsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDgwLCAxMDMsIDEyLCAyMDYsIAorICAgIDIzOSwgMjMzLCAxMTAsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDg4LCAxMDMsIDEyLCAyMDYsIDIzOSwgMjMzLCA5MCwgCisgICAgMTAzLCAxMiwgMjA2LCAyMzksIDIzMywgOTEsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDgzLCAxMDMsIDEyLCAyMDYsIAorICAgIDIzOSwgMjMzLCAxMTQsIDEwMywgMTIsIDIwNiwgMjM5LCAyMzMsIDEwOCwgMjA4LCAxMzMsIDIxMywgMzMsIDI0NywgMjI2LCAKKyAgICAxMiwgMjA2LCAyMzksIDIzMywgODksIDIwOCwgMTMzLCAyMTMsIDMzLCAyNDcsIDIyNiwgMTIsIDIwNiwgMjM5LCAyMzMsIAorICAgIDEyMSwgMjA4LCAxMzMsIDIxMywgMzMsIDI0NywgMjI2LCAxMiwgMjA2LCAyMzksIDIzMywgMTE5LCAyMDgsIDEzMywgMjEzLCAKKyAgICAzMywgMjQ3LCAyMjYsIDEyLCAyMDYsIDIzOSwgMjMzLCAxMDMsIDIwOCwgMTMzLCAyMTMsIDMzLCAyNDcsIDIyNiwgMTIsIAorICAgIDIwNiwgMjM5LCAyMzMsIDg2LCAyMDgsIDEzMywgMjEzLCAzMywgMjQ3LCAyMjYsIDEyLCAyMDYsIDIzOSwgMjMzLCA5OSwgCisgICAgMjA4LCAxMzMsIDIxMywgMzMsIDI0NywgMjI2LCAxMiwgMjA2LCAyMzksIDIzMywgODIsIDIwOCwgMTMzLCAyMTMsIDMzLCAKKyAgICAyNDcsIDIyNiwgMTIsIDIwNiwgMjM5LCAyMzMsIDExMywgMjA4LCAxMzMsIDIxMywgMzMsIDI0NywgMjI2LCAxMiwgMjA2LCAKKyAgICAyMzksIDIzMywgOTUsIDQzLCAxODksIDI1MSwgMTExLCA0MywgMTg5LCAyNTEsIDEzNiwgMjQ1LCA2MiwgMjM5LCAxODQsIAorICAgIDI0NiwgMTYsIDIwNywgMywgMjIyLCA4MCwgMywgMjExLCA5MSwgMjEwLCAyMDksIDExNSwgMjI0LCAxMSwgMjEwLCAyMDgsIAorICAgIDI0NiwgNDYsIDI1MCwgNTAsIDI0MiwgMTcsIDIxMCwgMjA3LCAxMTUsIDI0NywgMTgyLCAyMTYsIDE4OSwgMjQ3LCAyMDgsIAorICAgIDI1MCwgNTAsIDIyMiwgNzksIDIwNCwgODEsIDIwNCwgNzUsIDIwNSwgMTgxLCAyMjQsIDExOCwgMjA0LCA2NSwgMjQxLCAKKyAgICAxODAsIDIzOCwgNDYsIDI0MCwgMjI4LCAyNDEsIDE4MCwgMjM4LCA0NiwgMjUwLCAyMzgsIDI0MSwgMTgwLCAyMzgsIDQ2LCAKKyAgICAyNTAsIDY4LCAyMzgsIDQ2LCAzLCAyMjQsIDIzMSwgMjIyLCAyMTQsIDIyNCwgMzAsIDk3LCAyMDQsIDY3LCAyNDUsIDEzOSwgCisgICAgMjI0LCAzMCwgOTcsIDIzOSwgMjQ1LCAyMTcsIDU2LCAyMjQsIDMwLCA5NywgMjA0LCA2NywgMjM4LCA3NywgMjI0LCAzMCwgCisgICAgOTcsIDIzOSwgMTAyLCAyMjQsIDMwLCA5NywgMjA0LCA5NCwgMjM4LCA3NywgMjI0LCAzMCwgOTcsIDIyOCwgMSwgMjE3LCAKKyAgICA1NiwgMjI0LCAzMCwgOTcsIDIwNCwgOTQsIDI0NSwgMTM5LCAyMjQsIDMwLCA5NywgMjQ1LCAxMzksIDIyNCwgMjksIDIyMiwgCisgICAgMjE0LCAyMjQsIDMwLCAzLCAyNDAsIDEwMiwgMjM5LCAyNDUsIDIxNywgNTYsIDIyNCwgMzAsIDMsIDI0MCwgMTAyLCAyMjgsIAorICAgIDEsIDIxNywgNTYsIDIyNCwgMzAsIDMsIDI0MCwgMTAyLCAyMzksIDEwMiwgMjI0LCAzMCwgMywgMjQwLCAxMDIsIDIxMCwgCisgICAgMjE1LCAzLCAyNDAsIDEwMiwgMjM4LCA0NCwgMjExLCA5NCwgMjEyLCAyMzMsIDIxMSwgOTQsIDIwOSwgODAsIDYyLCAyNDIsIAorICAgIDQ5LCA2MSwgMjEwLCAyMTQsIDYxLCAyMTAsIDIxNSwgMywgNSwgMjQ2LCA3LCA2MSwgMjEwLCAyMTUsIDI0OCwgMTM1LCAKKyAgICAyNDYsIDcsIDYxLCAyMTAsIDIxNSwgMjQ4LCAxMzUsIDI0NiwgOCwgMywgMjE2LCAxOTAsIDI0NiwgOCwgMywgMjE2LCAxOTAsIAorICAgIDI0NiwgOCwgMywgMjEyLCAxOSwgMjQ2LCA4LCAzLCAyMjcsIDEzMSwgMjQ2LCA4LCAzLCAyMDgsIDEzNywgMjM5LCAxODUsIAorICAgIDIwNCwgMTcsIDI0OCwgMjcsIDI0MCwgMTAyLCAyMzYsIDQ3LCAyNDMsIDEwMiwgMjEwLCAyLCAyNDcsIDE1OCwgMjQ2LCAKKyAgICAxNDgsIDIxNCwgMTYzLCAyNDAsIDIyMiwgMjA4LCA5NSwgMjQ0LCA2OSwgMjA4LCA5NSwgMjE5LCAxMzUsIDIwOCwgOTUsIAorICAgIDI0NywgODUsIDIzNiwgNDcsIDIxOCwgMjQ4LCAyMDcsIDE5MywgMjQ2LCAxNTIsIDI0OCwgMzAsIDIxNSwgMjAyLCAyMzcsIAorICAgIDIsIDIxMCwgMjEyLCAyNDgsIDMwLCAyNDEsIDE4NCwgNzYsIDIyNSwgMTMxLCAyNDEsIDE4NCwgNzYsIDIxNiwgNTIsIDIzNywgCisgICAgMjgsIDIzOSwgMTQ3LCAyMjcsIDIzMCwgMjQ2LCA2LCAyMjUsIDEwNCwgMjI3LCAyMjksIDI0MCwgODUsIDIyNywgMjI5LCAKKyAgICAyMjcsIDIzMCwgMjM5LCAxOTIsIDIzMSwgNTAsIDIwNCwgMTYsIDIyMywgMTk2LCAyMDgsIDE2NSwgMjUwLCAzMywgMjM4LCAKKyAgICA1LCAyMjQsIDI0OSwgMjA0LCA3OSwgMjA5LCAyMjUsIDIyNywgMTk5LCAyNDgsIDIzOSwgMjE4LCAxMjAsIDIxNiwgMTM4LCAKKyAgICAyNTAsIDE1NywgMjM3LCAyNDQsIDI1MCwgMTU3LCAyMTksIDI5LCAyMTksIDMxLCAyNDYsIDE1MywgMjExLCA0NSwgMjM3LCAKKyAgICAxMzIsIDIxMiwgNTEsIDc2LCAyMTgsIDEwMCwgMjI1LCAxNiwgMjIwLCAzMiwgMjQ4LCAxMSwgMjE4LCAyMSwgMjI3LCAyMTAsIAorICAgIDIxNiwgNTMsIDI0NSwgMTQ1LCAyMTYsIDUzLCAyNDgsIDI1MSwgMjQ1LCAxNzksIDIxNiwgNTIsIDI0NSwgODksIDI1LCAKKyAgICAyMTYsIDUyLCAyMTEsIDc5LCAyNDcsIDIzNywgMjExLCAyMjQsIDI0NywgMjE5LCAyMzksIDEyOCwgMjM5LCAxMjQsIDIxNSwgCisgICAgMjIzLCAyMTAsIDE2NSwgMjE4LCAyMywgMjQ0LCAxNjMsIDIyMCwgNzUsIDIxMCwgMTgzLCAyMzksIDEyNSwgMjEyLCAyMDQsIAorICAgIDIzOSwgMjQ0LCAyNDcsIDc5LCAzLCAyMTAsIDE1OCwgMjQ0LCAxMywgMjEyLCA3LCAyMzUsIDE2MywgMjQ1LCAxNDMsIDIxMywgCisgICAgNTEsIDIzNSwgMTYyLCAyMzUsIDE2MywgMjQ1LCAxNDMsIDI0MiwgNzMsIDI0NSwgMTc4LCAyNDYsIDExNCwgMTQyLCAyNDcsIAorICAgIDUxLCAyMjcsIDMyLCAyNDUsIDgxLCAyMzYsIDExOSwgMjE4LCAyNSwgMjEyLCAyMTcsIDI0OCwgMTE2LCAyNDcsIDIzMywgCisgICAgMjE4LCAyNiwgNzYsIDIzOSwgMTc0LCAyNDUsIDE3NywgMjM5LCAxNjMsIDI1LCAyMjksIDMzLCAyMDksIDE4NCwgMjA0LCAzLCAKKyAgICAyMzcsIDEwMiwgMjE1LCAxMywgMjQ3LCAyNTAsIDI1LCAyNDUsIDk5LCAyMDQsIDEzLCAyMzgsIDQ5LCAyNDUsIDI1MSwgCisgICAgMjM4LCA0OSwgMjA4LCA1MSwgMjQyLCA1NCwgMjQ4LCAxNDYsIDIyMywgMjM1LCAyNDYsIDIzLCAyNDgsIDE0NiwgMjIzLCAKKyAgICAyMzQsIDI0OSwgMjgsIDI0NywgMjQ5LCAyMzksIDE2MywgMjUsIDIyOSwgMzQsIDMsIDIxOCwgODksIDI0NywgMjUwLCAzLCAKKyAgICAyMTgsIDM4LCAyNDUsIDE2NywgMjE4LCA0MCwgMjE2LCA1NCwgMjAzLCAyMjcsIDIxNywgMjQyLCAyNDgsIDU4LCAyNDcsIAorICAgIDc4LCAyMzAsIDE3OCwgMjQ2LCAxMDYsIDIwOCwgOTUsIDI0MCwgNjgsIDI0NiwgMTA1LCAyMzksIDI0NywgMjM5LCAyNDgsIAorICAgIDIxMSwgMjIyLCAyNDgsIDI1MCwgMjE5LCA2NiwgMjE4LCAzOSwgMjQ1LCAyMTUsIDI0OCwgMjUxLCAyMDksIDIyOSwgMjA4LCAKKyAgICA5NSwgMjQ1LCAxMjgsIDIzOSwgMjE5LCAyMTgsIDEyMSwgMjQ0LCA2NiwgMjMwLCAxNjksIDI0MywgOTYsIDI0NywgMjcsIAorICAgIDIxMSwgNDQsIDIwNCwgMTcsIDI0NiwgMTMwLCAyMjQsIDMwLCAyMDUsIDIxNywgMjQ2LCAyMDQsIDIxNCwgMTk2LCAyMTQsIAorICAgIDIyMywgMjM4LCAxMSwgMjQ3LCA0OCwgMjM3LCA1NiwgMywgMjA4LCAyMTEsIDIyMCwgMzIsIDIwOSwgOTMsIDIyNywgMjIyLCAKKyAgICAyNDcsIDI0MywgNzYsIDIzOSwgMTk2LCAyMjQsIDExOSwgMjI1LCAxMywgMjE2LCAxMTAsIDIxNiwgNTQsIDMxLCAyMjksIAorICAgIDE1MCwgMywgMjMwLCAxNzcsIDIxMSwgMTUsIDIyNCwgMTUyLCAyMjcsIDE2NywgMjEyLCA0OSwgMjQ1LCAxODQsIDIyOSwgCisgICAgMzAsIDI0OCwgMTU4LCAyNTAsIDc4LCAzMSwgMjIxLCAxNTUsIDI0OCwgMTU4LCAyNDQsIDE5LCAzMSwgMjIxLCAxNTUsIAorICAgIDI0MCwgNiwgMjM5LCAxMzMsIDI1MSwgMTE0LCAyMDgsIDI1MiwgMjQ3LCAyOCwgMjM2LCA0OSwgMjQwLCAzNSwgMjA0LCAzNiwgCisgICAgMjE1LCAyMTMsIDI0NSwgMjUyLCAyMzksIDIzOSwgMjE4LCA1NCwgMjUsIDIzOSwgMjQzLCAyMjQsIDE1MiwgMjIzLCAyNTMsIAorICAgIDI0NywgNjUsIDI0NiwgNjUsIDIzNywgNjAsIDI1MCwgODUsIDIxOSwgMTM4LCAyMDgsIDE0NSwgMjM3LCA4MywgMjQ2LCA1MSwgCisgICAgMjA5LCAxNDQsIDIwOCwgMjUzLCAyNDYsIDM3LCAyNDgsIDIwLCAyMTgsIDI0MSwgMjUwLCA4NCwgMjA1LCAyMjYsIDIzOCwgCisgICAgMjM4LCAyNDMsIDE2NywgMjM2LCAyMzAsIDIxMiwgNDIsIDIyNSwgMTcyLCAyNDgsIDY5LCAyMzgsIDIzOSwgMjQzLCAyMTMsIAorICAgIDI0NywgMjM2LCAyMzksIDE5OCwgMjE4LCA4OCwgMjQ3LCAzNiwgMzEsIDIyMSwgMTYwLCAyMjMsIDIyNiwgMzEsIDIyMSwgCisgICAgMTU1LCAyMTQsIDIwOSwgMjM3LCAyMTQsIDMxLCAyMjksIDE0OSwgMjA4LCAyNywgMjA1LCAyMDYsIDMxLCAyMTQsIDE4OSwgCisgICAgMjE1LCAxMjYsIDIxMiwgMjQ2LCAzLCAyMTQsIDIyNiwgMjA5LCAxNDksIDIxNiwgMjA5LCAyNSwgMjQ4LCAyNTEsIDIxMiwgCisgICAgNjcsIDI1LCAyMTIsIDY3LCAyNDgsIDQsIDI0OCwgMjEzLCAyNSwgMjM2LCAxMTIsIDI0NiwgMTU0LCAyMzksIDIyNSwgMjEyLCAKKyAgICAxOCwgMjE1LCAxMjcsIDIxMCwgMTg4LCAyMTEsIDE4OSwgMjI1LCAxMywgMjA4LCA1MiwgMjM2LCA1MCwgMjE2LCAyMTAsIAorICAgIDI1MCwgMjM5LCAyMzksIDE3MSwgMjE1LCAxMzksIDIzOSwgMTcxLCAyMTAsIDE2MCwgMjA0LCA1MSwgMjI3LCAxMzYsIDIzOCwgCisgICAgMzAsIDIxNiwgMjExLCAyMjQsIDE4LCAyMTYsIDIxMSwgMjQ3LCAzOSwgMjQ1LCAxMzYsIDI0OCwgMjEwLCAyNSwgMjQ4LCAKKyAgICAyNTEsIDIwNSwgMTgwLCAyNDAsIDI1LCAyMzYsIDEzMywgMjExLCA3MywgMjUsIDI0OCwgMjUxLCAyMzUsIDE2MywgMjM2LCAKKyAgICAxMzMsIDIxMSwgNzMsIDI1LCAyMTcsIDE4NCwgMjEwLCA5LCAyMDksIDE0OSwgMjE5LCAxNTYsIDI1LCAyNDgsIDI1MSwgCisgICAgMjEyLCAyMCwgMjQ3LCA0NCwgMjI0LCAxMiwgMjQ3LCA2MywgMjQ4LCAxNjEsIDMsIDIwNywgMywgMjQ3LCAxODQsIDI0NSwgCisgICAgMTk4LCAyMzYsIDM5LCAyNDcsIDE4MiwgMjQ2LCA0NSwgMjQ0LCAyMywgMjM2LCAzOSwgMjQ3LCAxODMsIDI0NiwgMzUsIAorICAgIDI0NywgMTgzLCAyNDQsIDE1LCAyNDQsIDE2LCAyMzAsIDIwOCwgMjIzLCA2NywgMjE5LCA3MiwgMjExLCAxMDQsIDIzNiwgCisgICAgMzksIDI0NywgMTgzLCAyMzYsIDM5LCAzLCAyMzgsIDIyMiwgMjIwLCA2NywgMjQ3LCAxODMsIDIzMCwgMTY5LCAyMTgsIDMxLCAKKyAgICAyMjAsIDY2LCAyNDAsIDIyNywgMjE4LCAzMSwgMjIwLCA2NiwgMjM2LCA0OCwgMjQ4LCAyMzUsIDI1MCwgMjMsIDIwOSwgCisgICAgMTU3LCAyMjUsIDE3MiwgMjM2LCA0NCwgMjI3LCAxLCAyMzYsIDQ0LCAyNDUsIDE4MiwgMjExLCA1NywgMjE0LCAxOTUsIAorICAgIDI0NCwgMjYsIDIxMSwgNTcsIDI0MCwgOTEsIDIzMCwgMTg5LCAyMjgsIDEzLCAyMzAsIDE2OSwgMjQ3LCAxOSwgMjQwLCAKKyAgICAyMjcsIDI0NywgMTksIDYxLCAyMTksIDMsIDYyLCAyMTksIDMsIDIwNCwgNzMsIDYxLCAyMzksIDIyNSwgMjA0LCA3MywgNjIsIAorICAgIDIzOSwgMjI1LCAyMTUsIDIwMSwgNjIsIDIxNSwgMjAxLCAyMjgsIDEwNSwgMjQ5LCAxMiwgMjE2LCAyMDksIDI1LCAyMTIsIAorICAgIDE4MywgMjQ3LCAyNDEsIDI1LCA0NywgMjUwLCAyMzQsIDI0MSwgOTgsIDY1LCAyMzksIDIzNCwgMjA3LCAxMTksIDI0MSwgCisgICAgOTgsIDY1LCAyMzksIDIzNCwgMjA3LCAxMTYsIDI0MSwgOTgsIDY1LCAyMzksIDIzNCwgMjA3LCAxMTQsIDI0MSwgOTgsIDY1LCAKKyAgICAyMzksIDIzNCwgMjA3LCAxMTIsIDI0MSwgOTgsIDY1LCAyMzksIDIzNCwgMjA3LCAxMTAsIDIxNiwgMTcyLCAyMjQsIDksIAorICAgIDIxOSwgMTkzLCAyMDQsIDgxLCAyNDcsIDE4OCwgMjQ1LCAxNDksIDIwOCwgMjQ1LCAyMjcsIDE4MywgMjE2LCAyMTIsIDI0NywgCisgICAgMTcsIDI0MiwgNjEsIDI0NSwgMTM1LCAyMDQsIDM5LCAyMTIsIDI2LCAyMTIsIDI0LCAyMzYsIDQ5LCAyMTYsIDE4NCwgMjM4LCAKKyAgICAzNSwgMjEzLCAzNywgMjI0LCA0OCwgMjE1LCAyMDUsIDI0NiwgMTQwLCAyNDMsIDEwMiwgMjE4LCAxMzEsIDI0OCwgMjEsIAorICAgIDI0MSwgMTE0LCAyMjAsIDc4LCAyMTEsIDIwMiwgMjEzLCAzMiwgMjQ3LCAxODcsIDI1MCwgMTk4LCAyMzYsIDExOCwgMjI4LCAKKyAgICA5OCwgMjQ4LCAxNDQsIDIzOSwgMjQzLCAyMDgsIDUxLCAyMzksIDI0MywgMjQ4LCAyOCwgMjA3LCAxNzEsIDIzNywgODEsIAorICAgIDI0NiwgMTQxLCAyNDksIDI4LCAyNDYsIDE0MSwgMjM5LCAxMTgsIDI0OSwgMjgsIDI0NiwgMTQxLCAyNDgsIDYwLCAyMTksIAorICAgIDUsIDIyOSwgMjQsIDIxOCwgNDQsIDI0MiwgNTEsIDI0NywgNjcsIDI0OSwgMTcsIDI0NywgNjcsIDI0MywgOTUsIDIyNCwgCisgICAgMTAsIDI0MCwgMTAyLCAyNDUsIDE1MCwgMjQwLCAxMDIsIDIwOCwgMjQ2LCAyNDAsIDEwMiwgMjE2LCAyMTMsIDI0MCwgMTAyLCAKKyAgICAyNDcsIDE4LCAyNDAsIDEwMiwgMjQyLCA2MiwgMjQwLCAxMDIsIDIxMSwgMTg3LCAyMDQsIDM5LCAyMzYsIDUwLCAyNDAsIAorICAgIDEwMiwgMjI0LCA0OSwgMjQwLCAxMDIsIDI0MywgMTAzLCAyNDAsIDEwMiwgMjE4LCAxMzIsIDI0MCwgMTAyLCAyMzksIDEyMiwgCisgICAgMjQwLCAxMDIsIDIzNywgMTI5LCAyNDAsIDEwMiwgMjAzLCAyNTMsIDI0MCwgMTAyLCAyNDgsIDE1NiwgMjQwLCAxMDIsIAorICAgIDIxOSwgMTIwLCAyNDAsIDEwMiwgMjE4LCAxMzIsIDIyMSwgMTY3LCAyMTksIDQ2LCAyMTcsIDIzMCwgMjQ2LCAxMjUsIDI0MCwgCisgICAgMTg0LCAyNDAsIDE5MSwgMjQxLCAxODMsIDIyMSwgMTY3LCAyMjQsIDcsIDIwOCwgMTUwLCA2MSwgMTEyLCAyMTgsIDU5LCAKKyAgICAyNDksIDIzLCAyMzEsIDM1LCA2MSwgMTIxLCAyMTgsIDU5LCAyNDksIDIzLCAyMzEsIDM1LCA2MSwgNDksIDIxOCwgNTksIAorICAgIDI0OSwgMjMsIDIzMSwgMzUsIDYxLCA1MCwgMjE4LCA1OSwgMjQ5LCAyMywgMjMxLCAzNSwgMjM5LCAyMzcsIDIzNywgMTI0LCAKKyAgICA1NCwgMjA0LCA3MywgMjM3LCAxMjQsIDU0LCAyMjAsIDUyLCAyMzcsIDEyNCwgNTQsIDIwOSwgMjAsIDExMiwgNTQsIDIwOSwgCisgICAgMjAsIDEyMSwgNTQsIDI0NiwgMzYsIDIzNywgMTAwLCA1NCwgMTcxLCAyMzcsIDEwMCwgNTQsIDI0NSwgMTIyLCAyMDMsIAorICAgIDI0OSwgMjM3LCA4MywgMjQwLCAxODcsIDIyMiwgMjM2LCAyMTAsIDY4LCAyMzAsIDE2MCwgMjQyLCA1NiwgMjI5LCA4NSwgCisgICAgMjQ4LCA3MSwgMjAzLCAyNDksIDI0NiwgOSwgMjE3LCAxNjUsIDIzNywgMTAzLCAyMTgsIDIyLCAyMjUsIDExMiwgMjEyLCAKKyAgICAyMzksIDI1MCwgNDYsIDIxMiwgMjM5LCAyMzYsIDI0MywgMjEyLCAyMzksIDIwMywgMjQ5LCAyMTQsIDI0MCwgMjAzLCAyNDksIAorICAgIDI0OCwgMywgMjM5LCAxNjksIDI0NywgMTUwLCAyMzEsIDUwLCAyMTIsIDEzNiwgMjQ3LCAxNDksIDIzMSwgNTAsIDIxMiwgCisgICAgMTM2LCAyNDcsIDIzMiwgMjM4LCA2MCwgMjI1LCAxMjIsIDIwMywgMjUwLCAyNDAsIDgyLCAyMjUsIDEyMywgMjUsIDIwMywgCisgICAgMjUxLCAyMzYsIDEyNywgMjM3LCA5OSwgMTIwLCAyMjQsIDI0MSwgMjM2LCAxMjcsIDIzNywgOTksIDEyMCwgMjAzLCAyNDgsIAorICAgIDIzNiwgMTI3LCAyMzcsIDk5LCAyMTgsIDUxLCAyMjAsIDY1LCAyMDMsIDI1MSwgMywgMjQ3LCAxNjgsIDI0MSwgMTgxLCAKKyAgICAyNDcsIDIwOSwgMywgMjA2LCA0NiwgMjE4LCAyMzAsIDMsIDI0OCwgMzIsIDIzNywgMTQ1LCAyMjUsIDEyMywgMywgMjM3LCAKKyAgICAyMjcsIDIxOCwgMTY4LCAyMjUsIDEwOCwgMjI1LCAxMjMsIDMsIDIwNywgMTgwLCAyMjAsIDQ0LCAyMjUsIDEyMiwgMjIwLCAKKyAgICA0NCwgMjAzLCAyNTAsIDI0OSwgMjcsIDI0NSwgMTk5LCAyMDMsIDIzNCwgMjE3LCAyMzUsIDIzMCwgMTY5LCAyMjAsIDYxLCAKKyAgICAyMzAsIDE2OSwgMjM4LCAzNCwgMjM4LCA4OSwgMjQ5LCAyOCwgMjUwLCAyMjEsIDI0MCwgMTk2LCAyNTEsIDIwLCAyNTEsIAorICAgIDIxLCAyMjQsIDM5LCAyMzEsIDU1LCAyMTIsIDYyLCAyMzEsIDI1LCAyNDQsIDEyLCAyMTgsIDIyOSwgMjM3LCAyMjEsIDI0NCwgCisgICAgMTY3LCAyMjcsIDk3LCAyMjMsIDkxLCAyMTgsIDUwLCAyNDAsIDEwMywgMjI1LCA3NCwgMjM3LCAxNDQsIDI0OCwgMjI5LCAKKyAgICAyMTgsIDUzLCAyMTAsIDg4LCAyMTgsIDEyNCwgMjI5LCA2NywgODIsIDIyNywgMSwgMjI3LCAxNzQsIDIxNSwgMjUyLCAyMzgsIAorICAgIDE4MCwgMjExLCA2MywgMjI5LCA2NiwgMjQ3LCAyNDIsIDI0NSwgMTUyLCAzLCAyMzcsIDU1LCAyMDQsIDU4LCAyNDgsIDE1NCwgCisgICAgMjM3LCA1NSwgMjQ3LCAyMDMsIDIzNywgNTUsIDEyMCwgMjM3LCA1MywgMjExLCAyMjAsIDIzNywgNTUsIDIzNywgMjM3LCAKKyAgICAyMzcsIDU1LCAyMzcsIDU2LCAzLCA0NywgMjQ4LCAyNiwgMjM3LCA1NSwgMjM3LCAyNDQsIDIzNywgNTUsIDIwMywgNDUsIAorICAgIDIzNywgNTUsIDIxNywgMTY2LCAyMzcsIDU1LCAyMzcsIDU2LCAzLCAyMTYsIDU0LCAyMTYsIDY3LCAyMzcsIDUzLCAyMzcsIAorICAgIDU2LCAyNDQsIDY2LCAyNDMsIDIyMiwgMjEzLCA2MywgMywgMzQsIDcwLCAyMzEsIDYsIDI0MSwgMTE3LCAxNTcsIDI0NywgCisgICAgMTgwLCAyNTAsIDIyMCwgOTcsIDI0OCwgMTIsIDIxMiwgNTQsIDk3LCAyNDUsIDI0NCwgOTcsIDIxMSwgMTk2LCAyMTAsIAorICAgIDE2NywgOTcsIDI0MiwgNDksIDI0NCwgMTQ1LCA5NywgMjE4LCAxMjUsIDc2LCAyMTgsIDQ1LCAyMzksIDIxMCwgMjQ4LCA4MywgCisgICAgMjQzLCAxMzMsIDk3LCAyMTEsIDIxMiwgMjQ4LCAyNTAsIDIwOSwgMzgsIDI0OCwgMjUwLCA2MSwgMjM5LCAxOTcsIDIzNiwgCisgICAgMTIsIDIxOCwgNTcsIDk3LCAyMjQsIDUzLCAyNDksIDEwLCAyNDUsIDkyLCAyNDAsIDIxNCwgNzksIDI0MywgOTcsIDU0LCAKKyAgICAyNDUsIDE0MSwgMjQ3LCAzNywgMjQ4LCAyMzQsIDMsIDIwMywgNDMsIDU0LCAyNDgsIDIzNCwgMywgMjQzLCA5NywgNTQsIAorICAgIDI0OCwgMjM0LCAzLCAyNDAsIDIzMCwgNTQsIDI0OCwgMjM0LCAzLCAyMTgsIDIwLCA1NCwgMjI0LCA1MywgMywgMjA0LCAxMSwgCisgICAgMjQ2LCAxNzgsIDMsIDE3NywgMjA4LCA5MSwgMjUsIDIwMywgNDMsIDU0LCAyMTQsIDE3NCwgMjE4LCAyMjgsIDI0NSwgMjIwLCAKKyAgICAyNDcsIDIwNywgMjI0LCAxMDgsIDIzOSwgMjAyLCAyNDMsIDE1NCwgMjE5LCAyNDgsIDI0MywgMTU5LCAyNDIsIDEyLCAyNDAsIAorICAgIDExLCAyMzksIDE4MiwgMTcxLCAyNDAsIDExLCAyMzksIDE4MiwgMjE5LCAxNTQsIDMsIDI0NSwgOTUsIDIxOSwgMTU0LCAKKyAgICAyNDAsIDk1LCAyMDYsIDIyNCwgMjQ3LCA3MiwgMjA5LCAxODMsIDI0NywgNzIsIDI0NywgMzgsIDIzMSwgMzUsIDI0NiwgCisgICAgMTc4LCAzLCAxNzcsIDIwOCwgOTAsIDI0NiwgMTc4LCAzLCAxODMsIDIwOCwgOTAsIDI0OCwgMjMxLCAyNDYsIDE3NywgMjQ2LCAKKyAgICAyMiwgMjE3LCAxNjEsIDIxNSwgMTkxLCAyMTcsIDE2MSwgMjE5LCA5NCwgMjExLCA1MywgMjE1LCAxMzMsIDIwOCwgODIsIAorICAgIDIxNSwgMTMzLCAyNDgsIDgsIDIxMCwgNywgMjI3LCAyMjcsIDIyMSwgMTU4LCAyMjEsIDE1OSwgMywgMjQ0LCA2NSwgMjQ1LCAKKyAgICAxNTEsIDI0NiwgMTYsIDI0OCwgOSwgMTcxLCAyNDgsIDksIDIzNywgMjQ0LCAyNDgsIDksIDI0OCwgMjYsIDI0OCwgOSwgCisgICAgMjE5LCAyNDMsIDI0OCwgOSwgMjQ4LCA2LCAyMjMsIDg1LCAyNDksIDE0LCAyMTQsIDE4MiwgMjI0LCAyNDIsIDIwOSwgMTYyLCAKKyAgICAyMTYsIDE1MiwgMjE5LCAxNTIsIDI0MCwgNjUsIDIyNSwgMTcyLCAyMTQsIDIyMiwgMjUwLCAxOTUsIDIxNywgMTg1LCAyNTEsIAorICAgIDExOSwgMjI3LCAzLCAyNDYsIDE2MiwgMjI0LCAyNTQsIDIxOSwgMjEwLCAyMDgsIDk4LCAyMzEsIDQ2LCAyMDgsIDk4LCAKKyAgICAyMTksIDE2MSwgMjQxLCAyMzYsIDk3LCAyMzEsIDQzLCAyNDEsIDU3LCAyNDEsIDU4LCAzLCAxODMsIDUzLCA1NSwgMjQ2LCAKKyAgICAxNiwgMjI1LCAxMzcsIDMsIDIyNiwgMjQ5LCAyMzksIDIyNSwgMjQ2LCAxNiwgMjI1LCAxMzcsIDMsIDIxNiwgMTg4LCAyMzksIAorICAgIDIyNSwgMTcxLCAyMjUsIDEzNywgMywgMjE2LCAxODgsIDIzOSwgMjI1LCAxNzEsIDIyNSwgMTM3LCAzLCAyMjYsIDI0OSwgCisgICAgMjM5LCAyMjUsIDIxOCwgMjgsIDIxOCwgMjksIDIzNiwgNTMsIDIyMiwgMjEwLCAyMjQsIDgwLCAyMTgsIDE3NiwgMjI0LCAKKyAgICA4MCwgMjE4LCAxNzcsIDMsIDg2LCA1MywgMjUwLCA1MCwgMjI3LCAyMjIsIDIwNSwgMjI5LCAyMjQsIDc5LCAyMjQsIDgwLCAKKyAgICAyMTgsIDE3NywgMjIwLCA2OCwgMjIxLCAxOTIsIDIyNCwgODAsIDIxOCwgMTc1LCAyNTAsIDE5NiwgMywgMjQ4LCAyMjAsIAorICAgIDI0NywgNjUsIDI0NywgNjYsIDMsIDIzOSwgMjE4LCAyMDUsIDIyNiwgMjQ3LCA2NSwgMjA5LCAxNTksIDIxNiwgMjA0LCAKKyAgICAyMDUsIDIyNSwgMjQwLCA2LCAyMTcsIDIxNywgMjE4LCAzNSwgMjExLCA3NCwgMjE3LCAyNTQsIDI0OCwgMTYwLCAyMDcsIAorICAgIDEzOCwgODYsIDI1MCwgOTEsIDI0NiwgMTgsIDg2LCAyNSwgOTYsIDE3MSwgMjQ2LCA2MiwgMjUwLCA5MSwgMjQ2LCAxOCwgCisgICAgODYsIDI1LCA5NiwgMTcxLCAyNDYsIDYyLCAyNTAsIDkyLCAzLCA0MywgMTE4LCAyMTksIDE5OSwgMjQ2LCAxOCwgMTgzLCAKKyAgICAyNSwgMTc3LCAxNzEsIDI0NiwgNjIsIDI1MCwgOTEsIDI1MCwgMTk0LCAxODMsIDI1LCAxNzcsIDE3MSwgMjQ2LCA2MiwgCisgICAgMjUwLCA5MSwgMTI0LCAyNDcsIDIwNiwgOTcsIDEzOCwgMjQ3LCAyMDYsIDk3LCAyMTEsIDIxNywgMywgMjQ3LCA1OCwgOTUsIAorICAgIDIxMSwgMjE2LCAyMTEsIDIxNywgMywgMTE4LCAyMTEsIDI0MSwgMjA0LCA3NSwgMjExLCAyMTcsIDMsIDEyNiwgMjExLCAKKyAgICAyNDEsIDIwNCwgNzQsIDI0OCwgMjAzLCAyNDEsIDExNywgMjE4LCA4MSwgMjI3LCAyMTcsIDIyNSwgMTQ5LCAyMzgsIDQ5LCAKKyAgICAyMTYsIDExLCAyMjUsIDE0OSwgMjM4LCA0OSwgMjI3LCA0MywgMywgMjMxLCAxNywgMjE5LCA5LCAyNDYsIDE2LCAyMjcsIAorICAgIDQzLCAzLCAyMjksIDE1MSwgMjI5LCAxNTEsIDIyNywgNDIsIDE3MSwgMjI3LCA0MiwgMjQ4LCAxMjgsIDI0OCwgMTI5LCAzLCAKKyAgICAyNDcsIDU4LCA5NSwgMjQ4LCA3LCAyMjcsIDEwNSwgOTcsIDIxNiwgMjA1LCAyNDcsIDE0NSwgMjQ5LCAyNiwgMywgOTYsIAorICAgIDUzLCA1NSwgMjQxLCA4NCwgMywgOTYsIDUzLCA1NSwgMjIwLCAzMiwgMywgMjQwLCAyMTIsIDEzMSwgMywgNDksIDUwLCA1MywgCisgICAgNTUsIDIxMSwgMjQ5LCAzLCA4NiwgNTMsIDU1LCAyMDgsIDE0NSwgMywgMTc3LCA1MywgNTUsIDIyMSwgMTkyLCAxMTgsIAorICAgIDIwNiwgMjQ4LCAyNDEsIDE0MSwgOTcsIDIyOSwgMTQ4LCAyMDksIDE1MiwgMjMxLCAxMSwgMTYsIDM1LCA4LCA2LCAyMjcsIAorICAgIDE3MywgMjMxLCAxMSwgMTYsIDM1LCA4LCA1LCAyMjcsIDE3MywgMjMxLCAxMSwgMTYsIDM1LCAyMjEsIDQ1LCAyMzEsIDExLCAKKyAgICAxNiwgMzUsIDIxMCwgMTAyLCAyMzEsIDExLCAxNiwgMzUsIDgsIDIyNywgMTczLCAyMzksIDI0OSwgMjQxLCAxMTcsIDIwOCwgCisgICAgMTQwLCAyMDMsIDIyNSwgMjM3LCAxMzAsIDIyMSwgMjgsIDI1LCAyNDgsIDE0LCAyMzYsIDEzNCwgMjE4LCAxMDYsIDIyNCwgCisgICAgMTUxLCAyMDksIDE2MCwgMjQ1LCAxMTIsIDI0OCwgMjUxLCAyMTIsIDg4LCAyMTgsIDYxLCAyMTEsIDk1LCAzLCAxMDEsIAorICAgIDI0MywgODUsIDIzMCwgMTY5LCAxNiwgMzUsIDI0OCwgMTQxLCAyMDgsIDgwLCAyNDEsIDEwMCwgNjIsIDUxLCAyNDcsIDE0NSwgCisgICAgNjEsIDUxLCAyNDcsIDE0NSwgMjI4LCA4LCAyMTYsIDEzOCwgMjQ2LCA2MSwgMjI4LCA4LCAyNDgsIDI2LCAyNDYsIDYxLCAKKyAgICAyMjgsIDgsIDIxOSwgMjQzLCAyNDMsIDIyMSwgMjI4LCA4LCAyNDgsIDI2LCAyNDMsIDIyMSwgNSwgMjE5LCAyNDMsIDI0MywgCisgICAgMjIxLCA1LCAyNDgsIDI2LCAyNDMsIDIyMSwgMjA2LCAyMjMsIDIxNiwgMTM4LCAyMDgsIDg1LCAyNDIsIDY5LCAyMTYsIAorICAgIDEzOCwgMjA4LCA4NSwgMjA2LCAyMjMsIDUsIDIxNiwgMTM4LCAyMDgsIDg1LCAyNDIsIDY5LCA1LCAyMTYsIDEzOCwgMjA4LCAKKyAgICA4NSwgMjI2LCAyNTEsIDUwLCAyMTMsIDc3LCA2MSwgMjQ2LCA2MSwgMjA2LCAyMjEsIDUwLCAyMTMsIDc3LCA2MSwgMjQ2LCAKKyAgICA2MSwgNDMsIDI0NSwgMTMxLCAyMTgsIDQ4LCAyNDUsIDEzMSwgMjE4LCA0OSwgMywgMjM3LCAxMzYsIDU2LCAyNDUsIDEzMSwgCisgICAgMjE4LCA0OCwgMjIxLCAxNjIsIDQ5LCAyMTMsIDE0NiwgMywgMTI2LCAyNDMsIDgzLCAyMjEsIDE2MiwgNTAsIDIxMywgMTQ2LCAKKyAgICAzLCAxMjYsIDI0MywgODMsIDE2LCAzNSwgMjI1LCA4NywgMjQ2LCAxODQsIDYxLCA4LCAyNDUsIDEzMCwgNzksIDgsIDI0NSwgCisgICAgMTMwLCAyNDYsIDIyMiwgMjQ1LCAxMzAsIDIyMCwgNDAsIDk3LCAyNDIsIDcyLCA3NiwgMjE5LCAzMiwgMjMwLCAzOSwgMjI0LCAKKyAgICAyMiwgMjEwLCA5NiwgMjI0LCAyMzcsIDMsIDIyMiwgNjQsIDI0NywgMjIyLCAyNDcsIDIzOCwgNzYsIDIzNSwgMjIyLCAyNDYsIAorICAgIDIwLCAyNDAsIDEwMywgMTE4LCAyMjAsIDgzLCAyNDYsIDIwLCAyNDAsIDEwMywgMTIwLCAyMjAsIDgzLCAyNDYsIDIwLCAKKyAgICAyNDAsIDEwMywgMTI2LCAyMjAsIDgzLCAyNDYsIDIwLCAyNDAsIDEwMywgMjM5LCAxNDcsIDIyMCwgODMsIDI0NiwgMjAsIAorICAgIDI0MCwgMTAzLCAyMzksIDIzMywgMjIwLCA4MywgMjQ2LCAyMCwgMjQwLCAxMDMsIDIxMiwgODgsIDIyMCwgODMsIDI0NiwgCisgICAgMjAsIDI0MCwgMTAzLCAyMTMsIDExMiwgMjIwLCA4MywgMjQ2LCAyMCwgMjQwLCAxMDMsIDI0MSwgMTQzLCAyMjAsIDgzLCAKKyAgICAyNDYsIDIwLCAyNDAsIDEwMywgMjIyLCA2NCwgMjIwLCA4MywgMjQ2LCAyMCwgMjQwLCAxMDMsIDIwOSwgMTUzLCAyMjAsIAorICAgIDgzLCAyNDYsIDIwLCAyNDAsIDEwMywgMjQxLCAxMTMsIDIyMCwgODMsIDI0NiwgMjAsIDI0MCwgMTAzLCAyMDcsIDE1NSwgCisgICAgMjIwLCA4MywgMjQ2LCAyMCwgMjQwLCAxMDMsIDIyMCwgMjcsIDI0NiwgMjAsIDI0MCwgMTAzLCAyMDcsIDEzMiwgMjQ2LCAKKyAgICAyMCwgMjQwLCAxMDMsIDIwOSwgMjYsIDI0NiwgMjAsIDI0MCwgMTAzLCAyMzksIDE0MywgMjQ2LCAyMCwgMjQwLCAxMDMsIAorICAgIDIzOSwgMjMxLCAyNDYsIDIwLCAyNDAsIDEwMywgMjEyLCA4NCwgMjQ2LCAyMCwgMjQwLCAxMDMsIDIxMywgMTEwLCAyNDYsIAorICAgIDIwLCAyNDAsIDEwMywgMjQxLCAxNDIsIDI0NiwgMjAsIDI0MCwgMTAzLCAyMjIsIDYyLCAyNDYsIDIwLCAyNDAsIDEwMywgCisgICAgMjA5LCAxNTEsIDI0NiwgMjAsIDI0MCwgMTAzLCAyNDEsIDExMSwgMjQ2LCAyMCwgMjQwLCAxMDMsIDIwNywgMTUzLCA1MCwgCisgICAgMjExLCAyMTYsIDUwLCAyMTEsIDIxNywgMywgMTE4LCAyMTEsIDI0MSwgMjA0LCA3NSwgNTAsIDIxMSwgMjE3LCAzLCAxMjYsIAorICAgIDIxMSwgMjQxLCAyMDQsIDc0LCAyNDcsIDE3NSwgMjQ3LCAxNzYsIDMsIDIxMSwgMjQxLCAyMDQsIDc0LCAyMTUsIDI1MSwgCisgICAgMjQ4LCAxMjgsIDI0OCwgOSwgMjQ3LCA1NiwgMjI1LCAxMDksIDI0NiwgMTksIDYyLCAyMTIsIDYzLCAyNSwgMjQ1LCAxMjksIAorICAgIDIyMSwgMTkyLCAyMTgsIDExMiwgMjM2LCAxMjYsIDIyNSwgMTIzLCAyMzEsIDUwLCAyNDcsIDE1MiwgMjEwLCAyMjgsIDIyNywgCisgICAgMTY2LCAyMTIsIDUyLCAyMTksIDI0NSwgMjExLCAxNzgsIDI0NCwgMTUwLCAyMTAsIDIxMCwgMjExLCAyMDUsIDIxMSwgMjA2LCAKKyAgICAyMDQsIDU5LCAyMzAsIDgzLCA0OSwgMjM3LCAxMjQsIDIwOSwgMTYyLCAyMTYsIDE1MiwgMjA5LCAxNjIsIDIxNiwgMTUzLCAKKyAgICAzLCAyMTksIDE1MywgNTAsIDIzNywgMTI0LCAyMDksIDE2MiwgMjE2LCAxNTIsIDYxLCAyMDgsIDEyNiwgMjA5LCAxNjEsIAorICAgIDYyLCAyMDgsIDEyNiwgMjA5LCAxNjEsIDIwOSwgMTYyLCAyMjAsIDMyLCAyMDgsIDE0NSwgNzYsIDIyNCwgNzYsIDI0NiwgCisgICAgNDAsIDIyNCwgODAsIDIxOCwgMTc2LCAyNDksIDI2LCA3NiwgMjQxLCA1NywgMjExLCAxMDAsIDI0MSwgNTcsIDI0MSwgNTgsIAorICAgIDMsIDIyNywgMTMxLCAyMzksIDE4OSwgMjQxLCA1NywgMjE5LCAxMCwgMTE1LCAyMTEsIDEwMCwgMjQxLCA1NywgMjI3LCAKKyAgICAxMDQsIDIxOSwgOTMsIDYyLCAyMTcsIDE2MSwgMjI2LCAyNTEsIDQ5LCAyMTksIDgsIDIyNiwgMjUxLCA0OSwgMjQ4LCAyNDYsIAorICAgIDIxOSwgOSwgMjI2LCAyNTEsIDQ5LCAyMzksIDE0OSwgMjE5LCA5LCAyMjYsIDI1MSwgNDksIDIxOSwgMTQ3LCAyMjYsIDI1MSwgCisgICAgNDksIDI0NSwgMTQ0LCA0OSwgMjAzLCAyMjAsIDIzNywgMTIzLCAyMDcsIDE3NCwgMjIwLCA1MiwgMjM3LCAxMjQsIDU0LCAKKyAgICAyMTYsIDE4OCwgMjM3LCAxMjQsIDMsIDIzOSwgMjU0LCAyMTEsIDE5NSwgMjE2LCA3MywgMjE2LCAxODgsIDIzNywgMTI0LCAKKyAgICAzLCAyMzksIDI1NCwgMjExLCAxOTUsIDIxNiwgNzMsIDIwOSwgMjAsIDExMiwgNTQsIDIxNiwgNzMsIDIwOSwgMjAsIDEyMSwgCisgICAgNTQsIDIxNiwgNzMsIDIwNSwgMjI4LCAyMzcsIDEyMywgMjE2LCA3MywgMjM3LCAxMjQsIDMsIDEwMSwgMjQwLCAzLCAyNDAsIAorICAgIDIwMSwgMjE2LCAxODgsIDIzNywgMTI0LCAzLCAyMTksIDcxLCAyNDgsIDEwNCwgMTAxLCAyNSwgMjE1LCAyNTMsIDIzOSwgCisgICAgMjUzLCA2MSwgMTIxLCAyMTgsIDU5LCA0OSwgMjM3LCAxMjQsIDIzMSwgMzUsIDIxMiwgMTU0LCA2MSwgNDksIDIxOCwgNTksIAorICAgIDIzMSwgMzUsIDIxMiwgMTU0LCA2MSwgNTAsIDIxOCwgNTksIDIzMSwgMzUsIDIxMiwgMTU0LCA2MiwgNDksIDIxOCwgNTksIAorICAgIDIzMSwgMzUsIDIxMiwgMTU0LCA2MiwgNTAsIDIxOCwgNTksIDIzMSwgMzUsIDYyLCA0OSwgMjE4LCA1OSwgMjQ5LCAyMywgCisgICAgMjMxLCAzNSwgNjIsIDUwLCAyMTgsIDU5LCAyNDksIDIzLCAyMzEsIDM1LCAyMTIsIDE1NCwgNjEsIDExMiwgMjE4LCA1OSwgCisgICAgMjMxLCAzNSwgMjEyLCAxNTQsIDYxLCAxMjEsIDIxOCwgNTksIDIzMSwgMzUsIDIxMiwgMTU0LCA2MiwgMTEyLCAyMTgsIDU5LCAKKyAgICAyMzEsIDM1LCAyMTIsIDE1NCwgNjIsIDEyMSwgMjE4LCA1OSwgMjMxLCAzNSwgNjIsIDExMiwgMjE4LCA1OSwgMjQ5LCAyMywgCisgICAgMjMxLCAzNSwgNjIsIDEyMSwgMjE4LCA1OSwgMjQ5LCAyMywgMjMxLCAzNSwgMjQ0LCAxMSwgMjQ1LCAyMjAsIDIyOSwgMTUwLCAKKyAgICAyNSwgMjI0LCA5LCAxMjYsIDIyMiwgMjE4LCAyNDUsIDIxOSwgMjE3LCAyMzEsIDIxOCwgNjcsIDI0NywgNzQsIDYyLCAyMzcsIAorICAgIDkxLCAyMTMsIDMzLCAyMzksIDIwMiwgMjQzLCAxNTQsIDYxLCAyMzcsIDkxLCAyMTMsIDMzLCAyMzksIDIwMiwgMjQzLCAKKyAgICAxNTQsIDIxMiwgNywgMjEzLCAzMywgMjM5LCAyMDIsIDI0MywgMTU0LCAyMDksIDIyMSwgMjQ3LCAyMiwgMjA0LCA2LCAyMjksIAorICAgIDE0OSwgMTE4LCAyNDcsIDE0NiwgMjI0LCA5LCAxMjAsIDI0NywgMTQ2LCAyMjQsIDksIDEyNiwgMjQ3LCAxNDYsIDIyNCwgOSwgCisgICAgMjA4LCAxMTcsIDM4LCAyMTgsIDIyOCwgMjQ1LCAyMjAsIDIzNywgOTEsIDI0MywgMTU0LCAyMTQsIDE4NCwgMjE3LCAyMzIsIAorICAgIDIzNSwgMTU2LCAyNDAsIDY1LCAyMzUsIDE1NiwgMjE5LCAyNDgsIDI0MywgMTYwLCAyMzUsIDE1NiwgMjQzLCAxMDcsIDMsIAorICAgIDIwOSwgMTEyLCAyNDMsIDEwNywgMywgMjA5LCAxMTMsIDI1LCAyMTgsIDE2MSwgMjQzLCAxMDcsIDMsIDIxOCwgMTYxLCAKKyAgICAyMzksIDEzNSwgMywgMjE4LCAxNjEsIDIzOSwgMTM1LCAzLCAyMDgsIDIyNSwgMjM5LCAxMzUsIDMsIDI1MCwgMjMyLCAyMDMsIAorICAgIDE5NiwgNjIsIDIzOSwgMTgyLCAyMzksIDE4MiwgMTcxLCAyMzksIDE4MiwgMjQ3LCAzOCwgMTIyLCAyNDMsIDE0MCwgMjQ3LCAKKyAgICAzOCwgMjQwLCAxMSwgMjQ3LCAyMzMsIDI0MCwgMTEsIDI0NywgODcsIDI0MSwgOTQsIDIyMSwgMTYwLCAyNDEsIDk0LCAyMjEsIAorICAgIDE2MSwgMjE5LCAxNTMsIDI0MSwgOTQsIDIyMSwgMTYxLCAyMTksIDE1OSwgMjIxLCAxNjAsIDIyMSwgMTYxLCAyMTksIDE1MywgCisgICAgMjIxLCAxNjEsIDIxOSwgMTU5LCAyNDEsIDk0LCAyNDMsIDEwNiwgMjQxLCA5NCwgMjE5LCAxNTMsIDI0MSwgOTQsIDIxOSwgCisgICAgMTUxLCAyNDMsIDEwNiwgMjE5LCAxNTMsIDIxOSwgMTUxLCAyMDQsIDg1LCAyMTEsIDIwMiwgMjIxLCAxNjEsIDIxOSwgMTU5LCAKKyAgICAyMTEsIDIwMiwgMjQ3LCA3MywgMjE5LCAxNTksIDI0NCwgMTEsIDIwNCwgMTUsIDIyNCwgMTA1LCAyMjUsIDY0LCAyMTksIAorICAgIDIwMSwgMjQ2LCAxOCwgNTAsIDI1LCA0OSwgMjEzLCAxNDYsIDI1MCwgOTEsIDI0NywgNTgsIDIwMywgMTk2LCAyMzEsIDQxLCAKKyAgICAyMzksIDE3NiwgMjEyLCA3MiwgOTcsIDI0NCwgNjQsIDIzOSwgMTc2LCAyMTIsIDcyLCA5NywgMjQ1LCAyMjEsIDM4LCAyMjksIAorICAgIDE1MSwgMjE1LCAyMTQsIDIyMiwgMjEwLCAyMTksIDE1NCwgMywgNDMsIDIwOSwgMTEyLCAyMTEsIDY1LCAyNDYsIDE3NywgCisgICAgMjQ0LCAxOTYsIDIyOSwgMzMsIDIyNywgOTgsIDIxMSwgMjE1LCAyMzcsIDY1LCAyMzEsIDUwLCAyMTIsIDEzNiwgMTI2LCAKKyAgICAyMTYsIDE2MywgNTUsIDEyNiwgMjE2LCAxNjMsIDU2LCAxMjYsIDIxNiwgMTYzLCAyMjcsIDIyMiwgMTI2LCAyMTYsIDE2MywgCisgICAgMjE2LCAxNiwgNDksIDIxMSwgMjEyLCAyNDcsIDE5MiwgNTAsIDIxMSwgMjEyLCAyNDcsIDE5MiwgMTIwLCAyMTEsIDIxMiwgCisgICAgMjQ3LCAxOTEsIDEyNiwgMjExLCAyMTIsIDI0NywgMTkxLCA0OSwgMjA5LCAzOCwgMjQ3LCAxOTIsIDUwLCAyMDksIDM4LCAKKyAgICAyNDcsIDE5MiwgNDksIDI1MCwgMjIwLCAyNDcsIDE5MiwgNTAsIDI1MCwgMjIwLCAyNDcsIDE5MiwgMjI0LCAzNCwgMjQ3LCAKKyAgICAxOTIsIDIyNywgMTMyLCAyMjQsIDM0LCAyNDcsIDE5MiwgMjI3LCAxMzIsIDIyNCwgMzMsIDI0OCwgMjQ4LCA5OCwgMywgCisgICAgMjQ4LCAyNDcsIDI0OCwgMjQ4LCAxMzIsIDIwMywgMTk2LCAyNDgsIDI0OCwgOTgsIDMsIDEzMiwgMjAzLCAxOTYsIDI0OCwgCisgICAgMjQ4LCAyNiwgMTMyLCAyMDMsIDE5NiwgMjQ4LCAyNDgsIDk4LCAzLCAyNiwgMTMyLCAyMDMsIDE5NiwgMTU3LCAyNDYsIAorICAgIDE2OSwgODIsIDI0OCwgMjQ4LCA5OCwgMywgMjYsIDI0NiwgMTY4LCAyMDMsIDIzMywgMjI1LCAxMDYsIDIyNCwgMTQsIDIzOSwgCisgICAgMTAzLCAyMDgsIDE2NywgMjA4LCAxMjIsIDIxMSwgODYsIDc2LCAyMjcsIDE0NiwgMjEyLCAxMzcsIDc2LCAyMzAsIDE3MCwgCisgICAgMjIzLCAyNTEsIDIzNywgMjQxLCAyNDAsIDEwMiwgMjM3LCAyNDEsIDI0MCwgMTAzLCAzLCAyMTIsIDMwLCAyNDAsIDE4NCwgCisgICAgMjQwLCAxMDMsIDMsIDIwOSwgMTc5LCA3NiwgMjMwLCA4NSwgMjEyLCAzMCwgMjQwLCAxMDMsIDMsIDE3MSwgMjI0LCA3LCAKKyAgICAyMTIsIDMwLCAyNDAsIDEwMywgMywgMTcxLCAyMjQsIDgsIDI1LCAyMTIsIDMwLCAyNDAsIDE4NCwgMjEyLCAzMCwgMjQwLCAKKyAgICAxMDMsIDMsIDE3MSwgMjI0LCA4LCAyNSwgMjQ1LCAyNDYsIDIxMCwgMTY2LCAyMTIsIDMwLCAyNDAsIDEwMywgMywgMTcxLCAKKyAgICAyMjQsIDgsIDI1LCAyMDgsIDI0MywgMjQwLCAxODQsIDIxMiwgMzAsIDI0MCwgMTAzLCAzLCAyMzcsIDEzNSwgMjEyLCAzMCwgCisgICAgMjQwLCAxMDMsIDMsIDIzNiwgNTIsIDIwNCwgOCwgMjQwLCAxMDIsIDIxMiwgMzAsIDI0MCwgMTAzLCAzLCAyMTIsIDMwLCAKKyAgICAyNDAsIDE4NCwgMjQwLCAxMDMsIDIxNCwgMjE0LCAyNDQsIDQ1LCAyMzksIDE3NCwgMjE2LCAxMTMsIDI0MCwgMTAyLCAyMTIsIAorICAgIDMwLCAyNDAsIDEwMywgMywgMjM3LCA1NCwgMjQwLCAxODQsIDIxMiwgMzAsIDI0MCwgMTAzLCAzLCAyMTAsIDIxMCwgMjEyLCAKKyAgICAyOSwgMjQwLCAxMDIsIDIyMiwgMjE2LCAyNDAsIDEwMiwgMjQwLCAyMDMsIDI0MCwgMTAyLCAyMDYsIDI1MywgMjQwLCAxMDIsIAorICAgIDI0MCwgMTAzLCAzLCAyNDUsIDI0NiwgMjEwLCAxNjYsIDIxOSwgMSwgMjQwLCAxMDIsIDI0NSwgMjEyLCAyNDAsIDEwMiwgCisgICAgMjQ1LCAyMTMsIDI0MCwgMTAyLCAyMjksIDY1LCAyNDAsIDEwMiwgMjQwLCAxMDMsIDIwOSwgMjMsIDM0LCAyMjksIDY2LCAKKyAgICAyMjksIDY1LCAyNDAsIDEwMywgMywgMjEyLCAzMCwgMjQwLCAxODQsIDIyOSwgNjUsIDI0MCwgMTAzLCAzLCAyNDYsIDE2LCAKKyAgICAyNDAsIDE4NCwgMjQwLCAxMDMsIDMsIDIxMSwgMTYsIDIwOCwgMTUwLCAyNDAsIDEwMywgMywgMjExLCAxNiwgMjA4LCAxNTEsIAorICAgIDI1LCAyMDQsIDgsIDI0MCwgMTkxLCAyNDAsIDEwMywgMywgMjExLCAxNiwgMjA4LCAxNTEsIDI1LCAyMDgsIDI0MywgMjQwLCAKKyAgICAxODQsIDI0MywgMTYxLCAyNDAsIDEwMiwgMjAzLCAyMzIsIDI0MCwgMTAyLCAyNTAsIDIxNCwgMjQwLCAxMDIsIDIxOCwgMTksIAorICAgIDI0MCwgMTAyLCAyNDUsIDExNCwgMjQwLCAxMDIsIDIxOCwgMjMyLCAyNDAsIDEwMiwgMjQwLCAxMDMsIDMsIDIyNywgMTcsIAorICAgIDc2LCAyMDgsIDYyLCAyNDMsIDE2MSwgMjQ3LCAxNDgsIDIxNiwgMTEzLCAyNDAsIDEwMiwgMjM5LCAxMTQsIDI0MCwgMTAzLCAKKyAgICAzLCAxNzEsIDIyNCwgNywgMjUwLCAyMTIsIDI0MCwgMTAyLCAyNDAsIDU4LCAyNDAsIDEwMiwgMjA0LCA2MCwgMjQwLCAxMDIsIAorICAgIDIxMiwgNTMsIDI0MCwgMTAyLCAyMDgsIDIwNSwgMjQwLCAxMDIsIDIzNywgMjQyLCAyNDAsIDEwMiwgMjI3LCA0LCAyNDUsIAorICAgIDExNCwgMjQwLCAxMDIsIDI0MCwgMTAzLCAzLCAxNzEsIDIyNCwgNywgMjM2LCAyLCAyNDAsIDEwMiwgMjQwLCAxMDMsIDMsIAorICAgIDE3MSwgMjI0LCA4LCAyNSwgMjQ1LCAyNDYsIDIxMCwgMTY2LCAyNDAsIDEwMywgMjE0LCAxODYsIDIzMSwgNTAsIDI0MCwgCisgICAgNTksIDI1MCwgNTYsIDI0MCwgMTAyLCAyMzksIDE5NCwgMjQwLCAxMDIsIDIxMiwgNTQsIDI0MCwgMTAyLCAyNDMsIDEzMywgCisgICAgMjQwLCAxMDIsIDI0MCwgMTAzLCAyMDQsIDMsIDIyNCwgNywgMjQwLCAxMDMsIDMsIDIyNSwgMTIsIDIyNSwgNzYsIDIzNywgCisgICAgMjQxLCAyNDcsIDE4LCAyNDAsIDEwMywgMywgMjEyLCAzMCwgMjQwLCAxODQsIDI0NywgMTgsIDI0MCwgMTAzLCAzLCAyMDksIAorICAgIDE3OSwgNzYsIDIzMCwgODUsIDIxMiwgMzAsIDI0NywgMTgsIDI0MCwgMTAzLCAzLCAxNzEsIDIyNCwgNywgMjEyLCAzMCwgCisgICAgMjQ3LCAxOCwgMjQwLCAxMDMsIDMsIDIzNywgNTQsIDI0MCwgMTg0LCAyNDcsIDE4LCAyNDAsIDEwMywgMywgMjAzLCAyMTgsIAorICAgIDIxMiwgMzEsIDIyOSwgNjUsIDI0NywgMTgsIDI0MCwgMTAzLCAzLCAyNDYsIDE2LCAyNDAsIDE4NCwgMjE4LCAxOSwgMjQ3LCAKKyAgICAxOCwgMjQwLCAxMDIsIDI0NSwgMTE0LCAyNDcsIDE4LCAyNDAsIDEwMiwgMjA0LCA2MCwgMjQ3LCAxOCwgMjQwLCAxMDIsIAorICAgIDIxMiwgNDcsIDIzOSwgMTE0LCAyNDAsIDEwMiwgMjEyLCA0NywgMjEyLCAzMCwgMjQwLCAxMDIsIDIwNiwgMjE4LCAyNDAsIAorICAgIDEwMiwgMjQwLCAxMDMsIDMsIDIxNSwgMjEyLCAyNDAsIDE4NCwgMjQwLCAxMDMsIDMsIDIyMSwgMTkyLCAyMzgsIDI3LCAKKyAgICAyMzgsIDE2MCwgMjQwLCAxMDMsIDMsIDIyMCwgNTIsIDIzOCwgMTYwLCAyMTgsIDIzMCwgMjQ3LCAyMzksIDI0NCwgNTksIAorICAgIDIxNCwgMTY0LCAyMjQsIDQ4LCAyMzcsIDU3LCAyMjQsIDQ4LCAyMTEsIDIxOCwgMjI0LCA0OCwgMjM3LCA5MywgMjE4LCAKKyAgICAyMzAsIDIxNiwgMTg3LCAxMTgsIDIzNywgMTIzLCAyMTgsIDIzMCwgMjE2LCAxODcsIDI0NywgMjUxLCAyMzcsIDEwMCwgCisgICAgMjMxLCA1MCwgMjQ2LCAyMjQsIDIxOCwgMjMwLCAyMzksIDExMywgMjE4LCAyMzAsIDMsIDIxOCwgMTksIDI0MCwgMTAyLCAKKyAgICAyMTgsIDIzMCwgMywgMjM5LCAxODMsIDIzNywgOTksIDE1MywgMjA0LCA0NiwgMjE4LCA1OSwgMjI3LCAyMjksIDIxMSwgCisgICAgMjM4LCAyMDQsIDQ2LCAyMTgsIDU5LCAyMjcsIDIyOSwgMTUzLCAyNDEsIDE3NiwgMjE4LCA1OSwgMjI3LCAyMjksIDIxMSwgCisgICAgMjM4LCAyNDEsIDE3NiwgMjE4LCA1OSwgMjI3LCAyMjksIDIwNywgMTc0LCAxNTMsIDIwNCwgNDYsIDIxOCwgNTksIDIyNywgCisgICAgMjI5LCAyMDcsIDE3NCwgMjExLCAyMzgsIDIwNCwgNDYsIDIxOCwgNTksIDIyNywgMjI5LCAyMDcsIDE3NCwgMTUzLCAyNDEsIAorICAgIDE3NiwgMjE4LCA1OSwgMjI3LCAyMjksIDIwNywgMTc0LCAyMTEsIDIzOCwgMjQxLCAxNzYsIDIxOCwgNTksIDIyNywgMjI5LCAKKyAgICAxNTMsIDIwNCwgNDYsIDIxOCwgNTksIDIwNSwgMjEyLCAyMjcsIDIyOSwgMjExLCAyMzgsIDIwNCwgNDYsIDIxOCwgNTksIAorICAgIDIwNSwgMjEyLCAyMjcsIDIyOSwgMTUzLCAyNDEsIDE3NiwgMjE4LCA1OSwgMjA1LCAyMTIsIDIyNywgMjI5LCAyMTEsIDIzOCwgCisgICAgMjQxLCAxNzYsIDIxOCwgNTksIDIwNSwgMjEyLCAyMjcsIDIyOSwgNzksIDE1MywgMjA0LCA0NiwgMjE4LCA1OSwgMjA1LCAKKyAgICAyMTIsIDIyNywgMjI5LCA3OSwgMjExLCAyMzgsIDIwNCwgNDYsIDIxOCwgNTksIDIwNSwgMjEyLCAyMjcsIDIyOSwgNzksIAorICAgIDE1MywgMjQxLCAxNzYsIDIxOCwgNTksIDIwNSwgMjEyLCAyMjcsIDIyOSwgNzksIDIxMSwgMjM4LCAyNDEsIDE3NiwgMjE4LCAKKyAgICA1OSwgMjA1LCAyMTIsIDIyNywgMjI5LCAxNTMsIDIwNCwgNDYsIDIxOCwgNTksIDI0NywgMTg5LCAyMTEsIDIzOCwgMjA0LCAKKyAgICA0NiwgMjE4LCA1OSwgMjQ3LCAxODksIDE1MywgMjQxLCAxNzYsIDIxOCwgNTksIDI0NywgMTg5LCAyMTEsIDIzOCwgMjQxLCAKKyAgICAxNzYsIDIxOCwgNTksIDI0NywgMTg5LCA3OSwgMTUzLCAyMDQsIDQ2LCAyMTgsIDU5LCAyNDcsIDE4OSwgNzksIDIxMSwgCisgICAgMjM4LCAyMDQsIDQ2LCAyMTgsIDU5LCAyNDcsIDE4OSwgNzksIDE1MywgMjQxLCAxNzYsIDIxOCwgNTksIDI0NywgMTg5LCAKKyAgICA3OSwgMjExLCAyMzgsIDI0MSwgMTc2LCAyMTgsIDU5LCAyNDcsIDE4OSwgMjM2LCAxMjUsIDIxNywgNDAsIDUxLCAyMTksIAorICAgIDIzMywgMjM2LCAxMjUsIDIxNywgNDAsIDUxLCAyMTksIDIzNCwgMjMxLCA1MCwgNjIsIDIxMSwgMTc3LCAyMTIsIDIsIDIxNywgCisgICAgNDAsIDUxLCAyMTksIDIzMywgMjEyLCAyLCAyMTcsIDQwLCA1MSwgMjE5LCAyMzQsIDIzMSwgNTAsIDYyLCAyMTEsIDE3NywgCisgICAgOTYsIDIxNSwgMjE4LCAxNzcsIDIxNSwgMjE4LCA4NiwgMjE1LCAyMTgsIDE4MywgMjE1LCAyMTgsIDEzMiwgMzIsIDI0MCwgCisgICAgMjUxLCAyMTksIDIzMywgNzksIDEzMiwgMzIsIDI0MCwgMjUxLCAyMTksIDIzMywgMzIsIDE3MSwgMjQwLCAyNTEsIDIxOSwgCisgICAgMjMzLCA3OSwgMzIsIDE3MSwgMjQwLCAyNTEsIDIxOSwgMjMzLCA3OSwgMjUwLCAyMzYsIDIxOSwgMjMzLCAyMTAsIDE2OSwgCisgICAgMjUwLCAyMzYsIDIxOSwgMjMzLCA0MSwgNzksIDUyLCAyMDcsIDE3NCwgMjQ1LCAyMzQsIDIxNywgMzEsIDEzMSwgMjE5LCAKKyAgICAyMzMsIDQxLCA3OSwgNTIsIDI0NSwgMjM0LCAyMTcsIDMxLCAxMzEsIDIxOSwgMjMzLCA0MSwgNzksIDEyNCwgNTIsIDI0NSwgCisgICAgMjM0LCAyMTcsIDMxLCAxMzEsIDIxOSwgMjMzLCA3OSwgMjMwLCAyNDgsIDIxOSwgMjMzLCA0MSwgMjMwLCAyNDgsIDIxOSwgCisgICAgMjMzLCA3OSwgNDEsIDIzMCwgMjQ4LCAyMTksIDIzMywgMjA1LCAyNDIsIDc5LCAyMTIsIDAsIDIwNSwgMjQyLCA3OSwgMjE2LCAKKyAgICA3NCwgMjEyLCAwLCAyNDYsIDE2NywgMjQ4LCAyMCwgMjE2LCA3NCwgMjQ2LCAxNjcsIDI0OCwgMjAsIDIxNSwgMjE4LCAyMzcsIAorICAgIDM4LCAyMTEsIDgxLCAyMjcsIDQwLCAyMTYsIDE5MywgMjQ3LCAzOSwgMjM2LCAyNDAsIDIwOCwgMTEwLCAyMzYsIDI0MCwgCisgICAgMjA4LCAxMTEsIDMsIDI0NywgMTc4LCAyMjEsIDE2NywgMjA4LCAxMTAsIDIyNCwgMjEzLCAxNTcsIDIxNiwgMTk0LCAyMTEsIAorICAgIDg3LCAyMDgsIDEwOCwgMjA4LCAxMDksIDI0NywgMzksIDI0NywgMTUzLCAyMjAsIDI5LCAyNDcsIDE1MywgMjA4LCA1OSwgCisgICAgMjQ3LCAxNTQsIDIxMSwgNjEsIDIyNCwgMTA5LCAyNTAsIDI0MCwgMjM5LCAyNTAsIDI0MSwgNzcsIDIxOCwgNTEsIDI0NywgCisgICAgMzksIDIyMCwgMjksIDIxOCwgNTEsIDI0NywgMzksIDIwOSwgMTk3LCAyMjAsIDI5LCAyMDksIDE5NywgMjUwLCAyMiwgMjIwLCAKKyAgICAyOSwgMjUwLCAyMiwgMjE2LCAxNDUsIDIwNiwgNDcsIDI0NCwgNDEsIDIwOCwgNTAsIDI1MCwgODYsIDIyNywgOCwgMjA4LCAKKyAgICAxMTYsIDIyNCwgNDIsIDIyNCwgMTMsIDIxNiwgMTkyLCAyMTAsIDE4MiwgMjE2LCAxOTIsIDIyNCwgMTMsIDI0NywgODYsIAorICAgIDI1MSwgOTUsIDIwOCwgMTA3LCAyMTIsIDI1MSwgMjE1LCAxODgsIDIxMSwgMjEwLCAyMzYsIDEwNiwgMjA4LCAxMTQsIDIyNywgCisgICAgMTM0LCA4MCwgMjA4LCAxMTQsIDIyNywgMTM0LCAyNDUsIDE5OSwgNTQsIDIxOCwgNTEsIDI0NywgMjQsIDIxNiwgNjcsIAorICAgIDIyNywgMTM0LCAyMDgsIDgyLCAyMzksIDIyNiwgMjIwLCAzMiwgMjE4LCAzMCwgMjQzLCA4OCwgMjIxLCAxOTIsIDI0MSwgCisgICAgNjMsIDU0LCAyMTIsIDI4LCA5NywgMjIxLCAxOTIsIDIxMiwgMjgsIDk3LCAyMTcsIDE2MCwgMjI3LCA4NywgMjMxLCA1MCwgCisgICAgMjMwLCAxOTgsIDIxOCwgOTcsIDk3LCAyNDMsIDExNCwgMjIxLCAxNjYsIDIyNywgODcsIDk3LCAyMTgsIDI0LCAyMDQsIDgxLCAKKyAgICA5NywgMjIxLCAxODIsIDIwNCwgODEsIDk3LCAyNDgsIDgyLCAyMjEsIDE5MiwgMjQ4LCA4MSwgMjQ4LCA4MCwgMjI0LCAxMywgCisgICAgMjQ4LCA4MCwgMjE5LCAyNSwgMjIxLCAxOTIsIDIxOSwgMjQsIDI0NiwgMTMyLCAyNDUsIDEyMywgMjI0LCAyMzYsIDk3LCAKKyAgICAyMDMsIDI0NywgOTcsIDIxNiwgODMsIDI0OSwgMjgsIDk3LCAyMDgsIDE2OCwgMjA0LCA4MSwgMjQ2LCAxMywgMjEyLCAyMDksIAorICAgIDI0OCwgMjA2LCAyNDgsIDIwNCwgMjE5LCA1NywgMjQ1LCAxODMsIDI0NSwgNzksIDI0OSwgNywgMjQ2LCA0MSwgNDksIDIyNiwgCisgICAgMjI5LCAyMDgsIDg2LCAzLCAyMTUsIDE4OSwgMjQ1LCAxNjQsIDIxNywgMjIwLCA1NCwgNDMsIDIzMSwgMjUsIDIxMSwgMjM5LCAKKyAgICAyNDcsIDIzMSwgOTcsIDIzOCwgNTksIDk3LCAyNDUsIDE1NywgMjUsIDIyOCwgMTgsIDIxMiwgNTQsIDI1MSwgMTM1LCAyMTIsIAorICAgIDIzMSwgMjQ5LCA2LCAyNDgsIDEyNywgMjQ4LCAxMjgsIDI0OCwgMTUxLCAyMTgsIDk3LCA3NiwgMjAzLCAyMzEsIDIzNywgCisgICAgMTMxLCAyNSwgMjAzLCAyMjUsIDIxMywgOCwgMjIwLCA1NiwgMjQyLCA0NiwgMjI0LCAxNywgMjE2LCAxOTMsIDIwOCwgMTE4LCAKKyAgICAyMjQsIDE5LCAyNDgsIDE5LCAyMDYsIDIyMywgMjI0LCAxMTksIDI1MSwgNTIsIDIwNiwgMjIzLCAyNTEsIDUyLCAyMDYsIAorICAgIDIyMywgNSwgMjUxLCA1MiwgNSwgMjUxLCA1MiwgMjIxLCAxNzEsIDI1MSwgNTIsIDI1MSwgNTMsIDI0NCwgMjUsIDI1MSwgCisgICAgNTMsIDI1MCwgOTcsIDIxNCwgMjIxLCAyMjAsIDI5LCAyMzksIDI1MCwgMjQxLCA3NywgMjQzLCAyMTEsIDIyNywgNDAsIAorICAgIDIxOSwgNjAsIDIxMiwgMjUxLCAxMzYsIDE2LCAzNSwgMjE3LCAzNiwgMTM2LCAxNiwgMzUsIDI1MSwgNTQsIDEzNiwgMTYsIAorICAgIDM1LCAyMzksIDI0OSwgMTM2LCAxNiwgMzUsIDI0MSwgMTc5LCAxMzYsIDE2LCAzNSwgMjA0LCA4MCwgMTM2LCAxNiwgMzUsIAorICAgIDI1MCwgMTQ2LCAxMzYsIDE2LCAzNSwgMjUwLCAxNDcsIDIxNiwgMTMyLCAxMzYsIDE2LCAzNSwgMjUwLCAxNDcsIDIxNiwgCisgICAgMTMxLCAxMzYsIDE2LCAzNSwgMjUwLCAxNDcsIDIwNSwgMTk1LCAxMzYsIDE2LCAzNSwgMjUwLCAxNDcsIDIwNSwgMTk0LCAKKyAgICAxMzYsIDE2LCAzNSwgMjA1LCAyMDksIDEzNiwgMTYsIDM1LCAyMDUsIDIwOCwgMTM2LCAxNiwgMzUsIDIwNSwgMjA3LCAxMzYsIAorICAgIDE2LCAzNSwgMjEwLCAyMjEsIDEzNiwgMTYsIDM1LCAyMTgsIDE4NCwgMjEwLCAyMjEsIDEzNiwgMTYsIDM1LCA2MiwgMjEwLCAKKyAgICAyMjEsIDEzNiwgMTYsIDM1LCAyMjQsIDIzNSwgMjEwLCAyNTIsIDEzNiwgMTYsIDM1LCAyMjQsIDIzNSwgMjEwLCAyNTEsIAorICAgIDEzNiwgMTYsIDM1LCAyMjQsIDIzNSwgMjEwLCAyNTAsIDEzNiwgMTYsIDM1LCAyNDYsIDY0LCAxMzYsIDE2LCAzNSwgMjE1LCAKKyAgICAxLCAxMzYsIDE2LCAzNSwgMjIyLCA1MSwgMTM2LCAxNiwgMzUsIDIwNSwgMTkzLCAxMzYsIDE2LCAzNSwgMjA1LCAxOTIsIAorICAgIDEzNiwgMTYsIDM1LCAyMTUsIDIxOSwgMjE1LCAxLCAxMzYsIDE2LCAzNSwgMjE1LCAyMTksIDIxNSwgMCwgMTM2LCAxNiwgCisgICAgMzUsIDIzOCwgMzEsIDEzNiwgMTYsIDM1LCAyMTIsIDEzMywgMTM2LCAxNiwgMzUsIDIzMCwgMjIxLCAyMTksIDIzOSwgMTM2LCAKKyAgICAxNiwgMzUsIDIzMCwgMjIxLCAyMTksIDIzOCwgMTM2LCAxNiwgMzUsIDI0NSwgMTM0LCA3NiwgMjMwLCAyMjAsIDEzNiwgMTYsIAorICAgIDM1LCAyMTYsIDEyOCwgNzYsIDIzMCwgMjIwLCAxMzYsIDE2LCAzNSwgMjQ1LCAxNzQsIDIxOSwgMjM5LCAxMzYsIDE2LCAzNSwgCisgICAgMjMwLCAyMTksIDIxOSwgMjM5LCAxMzYsIDE2LCAzNSwgMjEwLCAyNTMsIDc2LCAyNDUsIDE3MywgMTM2LCAxNiwgMzUsIAorICAgIDI0NSwgMTM0LCA3NiwgMjQ1LCAxNzMsIDEzNiwgMTYsIDM1LCAyNDUsIDEzNCwgNzYsIDI0NSwgMTcyLCAxMzYsIDE2LCAzNSwgCisgICAgMjQ1LCAxNzQsIDI1MCwgMTg4LCAxMzYsIDE2LCAzNSwgMjE1LCAyLCA3NiwgMjQ1LCAxNzQsIDI1MCwgMTg4LCAxMzYsIDE2LCAKKyAgICAzNSwgMjEwLCAyNTMsIDc2LCAyMTUsIDIsIDc2LCAyNDUsIDE3MywgMTM2LCAxNiwgMzUsIDIwNiwgNDIsIDEzNiwgMTYsIAorICAgIDM1LCAyMDgsIDIxOCwgMjE5LCAyMzksIDEzNiwgMTYsIDM1LCAyMjcsIDIzMywgMjE5LCAyMzksIDEzNiwgMTYsIDM1LCAKKyAgICAyNTAsIDE4NywgMjE5LCAyMzksIDEzNiwgMTYsIDM1LCAyMTAsIDI1MywgNzYsIDI1MCwgMTg2LCAxMzYsIDE2LCAzNSwgCisgICAgMjE1LCAyLCA3NiwgMjUwLCAxODYsIDEzNiwgMTYsIDM1LCAyMTAsIDI1MywgNzYsIDIxNSwgMiwgNzYsIDI1MCwgMTg2LCAKKyAgICAxMzYsIDE2LCAzNSwgMjA1LCAyMTAsIDc2LCAyNTAsIDE4NiwgMTM2LCAxNiwgMzUsIDIxNiwgMTI4LCA3NiwgMjUwLCAxODYsIAorICAgIDEzNiwgMTYsIDM1LCAyMTYsIDEyOCwgNzYsIDI1MCwgMTg1LCAxMzYsIDE2LCAzNSwgMjE2LCAxMjcsIDEzNiwgMTYsIDM1LCAKKyAgICAyMTYsIDEyNiwgMTM2LCAxNiwgMzUsIDIxNiwgMTI1LCAxMzYsIDE2LCAzNSwgMjE2LCAxMjQsIDEzNiwgMTYsIDM1LCAyNTEsIAorICAgIDE3LCAxMzYsIDE2LCAzNSwgMjUxLCAxNiwgMTM2LCAxNiwgMzUsIDIyNSwgOTcsIDEzNiwgMTYsIDM1LCAyMTUsIDcsIDEzNiwgCisgICAgMTYsIDM1LCAyNTAsIDkwLCAxMzYsIDE2LCAzNSwgMjE2LCAxNTUsIDEzNiwgMTYsIDM1LCAyMTYsIDE1NCwgMTM2LCAxNiwgCisgICAgMzUsIDI1MCwgMjUsIDEzNiwgMTYsIDM1LCAyNDgsIDUyLCAyMTksIDIzOSwgMTM2LCAxNiwgMzUsIDIwOSwgMjE2LCAxMzYsIAorICAgIDE2LCAzNSwgMjA5LCAyMTUsIDEzNiwgMTYsIDM1LCAyMTcsIDQyLCAyMjcsIDEyMywgMTM2LCAxNiwgMzUsIDI0OCwgMCwgCisgICAgMTM2LCAxNiwgMzUsIDI0NywgMjU1LCAxMzYsIDE2LCAzNSwgMjQ3LCAyNTQsIDEzNiwgMTYsIDM1LCAyNTAsIDI0OSwgMTM2LCAKKyAgICAxNiwgMzUsIDIyMCwgNTUsIDEzNiwgMTYsIDM1LCAyMTEsIDE5OCwgMTM2LCAxNiwgMzUsIDIwOCwgMjE2LCAxMzYsIDE2LCAKKyAgICAzNSwgMjM3LCAyMTAsIDEzNiwgMTYsIDM1LCAyMDQsIDY4LCAxMzYsIDE2LCAzNSwgMjE4LCAxOCwgMTM2LCAxNiwgMzUsIAorICAgIDI0NywgNzAsIDEzNiwgMTYsIDM1LCAyMDcsIDE2NiwgMTM2LCAxNiwgMzUsIDI0NywgNDEsIDIyNCwgMjMsIDEzNiwgMTYsIAorICAgIDM1LCAyMTQsIDE5OSwgNzYsIDIzMCwgODcsIDEzNiwgMTYsIDM1LCAyNDcsIDgzLCAxMzYsIDE2LCAzNSwgMjA4LCA3OSwgCisgICAgMTM2LCAxNiwgMzUsIDIxMSwgOTIsIDIwOCwgNzksIDEzNiwgMTYsIDM1LCAyMjcsIDM5LCAxMzYsIDE2LCAzNSwgMjEyLCAKKyAgICAxMSwgMTM2LCAxNiwgMzUsIDIwNiwgMjAyLCAxMzYsIDE2LCAzNSwgMjM2LCA1MCwgMjQyLCAyNywgMTM2LCAxNiwgMzUsIAorICAgIDI1MCwgNzAsIDEzNiwgMTYsIDM1LCAyMTgsIDI2LCAyNTAsIDcwLCAxMzYsIDE2LCAzNSwgMjQ3LCAyMTAsIDEzNiwgMTYsIAorICAgIDM1LCAyMTgsIDE3LCAyNDcsIDIxMCwgMTM2LCAxNiwgMzUsIDI1MCwgMjQ2LCAxMzYsIDE2LCAzNSwgMjExLCA0OCwgMjEwLCAKKyAgICAyMDIsIDIxMSwgNDcsIDEzNiwgMTYsIDM1LCAyMTEsIDQ4LCAyMTAsIDIwMiwgMjExLCA0NiwgMTM2LCAxNiwgMzUsIDIxMCwgCisgICAgMjQ5LCAxMzYsIDE2LCAzNSwgMjE3LCAyNDcsIDEzNiwgMTYsIDM1LCAyNDMsIDE1MCwgMTM2LCAxNiwgMzUsIDI0MywgMTUyLCAKKyAgICAxMzYsIDE2LCAzNSwgMjQzLCAxNTEsIDEzNiwgMTYsIDM1LCAyMTcsIDE2OSwgMTM2LCAxNiwgMzUsIDIxNywgMTU4LCAxMzYsIAorICAgIDE2LCAzNSwgMjQ1LCAxMjEsIDEzNiwgMTYsIDM1LCAyNDUsIDEyMCwgMTM2LCAxNiwgMzUsIDI0NSwgMTE5LCAxMzYsIDE2LCAKKyAgICAzNSwgMjQ1LCAxMTgsIDEzNiwgMTYsIDM1LCAyNDUsIDExNywgMTM2LCAxNiwgMzUsIDI1MSwgMjksIDEzNiwgMTYsIDM1LCAKKyAgICAyNDgsIDIwNywgNzYsIDIyNSwgODEsIDEzNiwgMTYsIDM1LCAyNDgsIDIwNywgNzYsIDIwNiwgNzQsIDEzNiwgMTYsIDM1LCAKKyAgICAyMTYsIDgxLCAxMzYsIDE2LCAzNSwgMjM2LCA0MiwgMTM2LCAxNiwgMzUsIDIyMiwgNzksIDEzNiwgMTYsIDM1LCAyNDQsIAorICAgIDEzMiwgMTM2LCAxNiwgMzUsIDIyNCwgMzcsIDEzNiwgMTYsIDM1LCAxNjIsIDI0MiwgNTksIDEzNiwgMTYsIDM1LCAxNjIsIAorICAgIDIxOSwgMjE0LCA2MiwgMjI3LCAyMTcsIDIzMCwgMjA0LCA1MCwgMjA4LCA4NSwgNjIsIDIwNiwgMjIzLCAyMzAsIDIwNCwgCisgICAgNTAsIDIwOCwgODUsIDYyLCAyMTYsIDExLCAyMzAsIDIwNCwgNTAsIDIwOCwgODUsIDYyLCAyNDIsIDY5LCAyMzAsIDIwNCwgCisgICAgNTAsIDIwOCwgODUsIDYyLCAyMTIsIDQ3LCA1LCAyNDYsIDYxLCAyMjUsIDEwLCAyNiwgNjEsIDI0NiwgNjEsIDI2LCA2MSwgCisgICAgMjQ2LCA2MSwgNzksIDYxLCAyNDYsIDYxLCAyMDUsIDI0MiwgNzksIDYxLCAyNDYsIDYxLCAyNDAsIDE5NSwgNzksIDYxLCAKKyAgICAyNDYsIDYxLCA2MSwgMjQ2LCA2MiwgMjQ1LCAxOTUsIDYyLCA1LCAyNDYsIDYxLCAyMTUsIDE5MSwgMjA5LCAyMTcsIDYyLCAKKyAgICAyMDgsIDIxMywgMjExLCAxNzcsIDYyLCAyMTIsIDQ3LCA1LCAyMTEsIDE3NywgMTU3LCA2MSwgMjExLCAxNzcsIDIyNSwgMTAsIAorICAgIDYxLCAyMTEsIDE3NywgMjYsIDYxLCAyMTEsIDE3NywgNzksIDYxLCAyMTEsIDE3NywgMjA1LCAyNDIsIDc5LCA2MSwgMjExLCAKKyAgICAxNzcsIDI0MCwgMTk1LCA3OSwgNjEsIDIxMSwgMTc3LCA2MSwgNTEsIDI0NSwgMTk1LCA2MiwgMjA1LCAyNDIsIDUsIDIxMSwgCisgICAgMTc3LCA2MSwgNTEsIDI0NSwgMTk1LCA2MiwgMjI1LCAxMCwgMjExLCAxNzcsIDUxLCAyMDksIDIxNywgNjIsIDIwOCwgMjEzLCAKKyAgICAyNDMsIDIyMSwgNjIsIDIwNSwgMjQyLCA1LCAyNDMsIDIyMSwgNjIsIDIyNSwgMTAsIDUsIDI0MywgMjIxLCA2MSwgMjQzLCAKKyAgICAyMjIsIDI0NSwgMTk1LCA2MiwgMjA1LCAyNDIsIDUsIDI0MywgMjIxLCA2MSwgMjQzLCAyMjIsIDI0NSwgMTk1LCA2MiwgCisgICAgMjI1LCAxMCwgMjQzLCAyMjEsIDI0MywgMjIyLCAyMDksIDIxNywgNjIsIDIwOCwgMjEzLCAyMjYsIDI0NiwgNjIsIDIwNSwgCisgICAgMjQyLCA1LCAyMjYsIDI0NiwgNjIsIDIyNSwgMTAsIDUsIDIyNiwgMjQ2LCA2MSwgMjI2LCAyNDcsIDI0NSwgMTk1LCA2MiwgCisgICAgNSwgMjI2LCAyNDYsIDIwOSwgNjMsIDMwLCAyNDUsIDEzMCwgMTU3LCAzMCwgMjQ1LCAxMzAsIDIyNSwgMTAsIDMwLCAyNDUsIAorICAgIDEzMCwgMjYsIDMwLCAyNDUsIDEzMCwgMjA1LCAyNDIsIDI2LCAzMCwgMjQ1LCAxMzAsIDIwNSwgMjQyLCA3OSwgMzAsIDI0NSwgCisgICAgMTMwLCAyNDAsIDE5NSwgNzksIDMwLCAyNDUsIDEzMCwgMjA5LCA2MywgMjE0LCAyNTQsIDE1NywgMjE0LCAyNTQsIDIyNSwgCisgICAgMTAsIDIxNCwgMjU0LCAyNiwgMjE0LCAyNTQsIDc5LCAyMTQsIDI1NCwgMjA1LCAyNDIsIDc5LCAyMTQsIDI1NCwgMjQwLCAKKyAgICAxOTUsIDc5LCAyMTQsIDI1NCwgMTU3LCAyMzksIDIzMywgMjExLCAxOTEsIDI1MCwgNTksIDIyNSwgMTAsIDIzOSwgMjMzLCAKKyAgICAyMTEsIDE5MSwgMjUwLCA1OSwgMjYsIDIzOSwgMjMzLCAyMTEsIDE5MSwgMjUwLCA1OSwgNzksIDIzOSwgMjMzLCAyMTEsIAorICAgIDE5MSwgMjUwLCA1OSwgMjA1LCAyNDIsIDc5LCAyMzksIDIzMywgMjExLCAxOTEsIDI1MCwgNTksIDI0MCwgMTk1LCA3OSwgCisgICAgMjM5LCAyMzMsIDIxMSwgMTkxLCAyNTAsIDU5LCAxNTcsIDIxMiwgODgsIDIxMSwgMTkxLCAyNTAsIDU5LCAyMjUsIDEwLCAKKyAgICAyMTIsIDg4LCAyMTEsIDE5MSwgMjUwLCA1OSwgMjYsIDIxMiwgODgsIDIxMSwgMTkxLCAyNTAsIDU5LCA3OSwgMjEyLCA4OCwgCisgICAgMjExLCAxOTEsIDI1MCwgNTksIDIwNSwgMjQyLCA3OSwgMjEyLCA4OCwgMjExLCAxOTEsIDI1MCwgNTksIDI0MCwgMTk1LCAKKyAgICA3OSwgMjEyLCA4OCwgMjExLCAxOTEsIDI1MCwgNTksIDE1NywgMjQxLCAxNDMsIDIxMSwgMTkxLCAyNTAsIDU5LCAyMjUsIAorICAgIDEwLCAyNDEsIDE0MywgMjExLCAxOTEsIDI1MCwgNTksIDI2LCAyNDEsIDE0MywgMjExLCAxOTEsIDI1MCwgNTksIDc5LCAKKyAgICAyNDEsIDE0MywgMjExLCAxOTEsIDI1MCwgNTksIDIwNSwgMjQyLCA3OSwgMjQxLCAxNDMsIDIxMSwgMTkxLCAyNTAsIDU5LCAKKyAgICAxNTcsIDEyNiwgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDIyNSwgMTAsIDEyNiwgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDEyNiwgCisgICAgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDIyNSwgMTAsIDEyNiwgMjE4LCA2MSwgMjE4LCAxMTgsIDIxMSwgOTQsIDE1NywgMjM5LCAKKyAgICAxNDcsIDIxOCwgNjEsIDYyLCAyMTEsIDk0LCAyMjUsIDEwLCAyMzksIDE0NywgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDIzOSwgCisgICAgMTQ3LCAyMTgsIDYxLCA2MiwgMjExLCA5NCwgMjI1LCAxMCwgMjM5LCAxNDcsIDIxOCwgNjEsIDIxOCwgMTE4LCAyMTEsIDk0LCAKKyAgICAyMTYsIDc0LCAxNTcsIDIzOSwgMTQ3LCAyMTgsIDYxLCAyMTgsIDExOCwgMjExLCA5NCwgMTU3LCAyMzksIDIzMywgMjE4LCAKKyAgICA2MSwgNjIsIDIxMSwgOTQsIDc5LCAyMzksIDIzMywgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDIyNSwgMTAsIDIxMiwgODgsIAorICAgIDIxOCwgNjEsIDYyLCAyMTEsIDk0LCA3OSwgMjEyLCA4OCwgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDIxMiwgODgsIDIxOCwgCisgICAgNjEsIDIxOCwgMTE4LCAyMTEsIDk0LCAyMjUsIDEwLCAyNDEsIDE0MywgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDc5LCAyNDEsIAorICAgIDE0MywgMjE4LCA2MSwgNjIsIDIxMSwgOTQsIDIwNSwgMjQyLCA3OSwgMjQxLCAxNDMsIDIxOCwgNjEsIDYyLCAyMTEsIDk0LCAKKyAgICA3OSwgMjQxLCAxNDMsIDIxOCwgNjEsIDIxOCwgMTE4LCAyMTEsIDk0LCAxNTcsIDIwNywgMTU1LCAyMTgsIDYxLCA2MiwgCisgICAgMjExLCA5NCwgNzksIDIwNywgMTU1LCAyMTgsIDYxLCA2MiwgMjExLCA5NCwgNzksIDIwNywgMTU1LCAyMTgsIDYxLCAyMTgsIAorICAgIDExOCwgMjExLCA5NCwgOTYsIDUzLCAzLCA1LCAyMDgsIDg2LCAyNTAsIDk0LCAxNzcsIDUzLCAzLCA1LCAyMDgsIDg2LCAKKyAgICAyNTAsIDk0LCA4NiwgNTMsIDMsIDUsIDIwOCwgODYsIDI1MCwgOTQsIDE4MywgNTMsIDMsIDUsIDIwOCwgODYsIDI1MCwgOTQsIAorICAgIDk2LCA1MywgMywgMjI1LCAxMCwgMjA4LCA4NiwgMjUwLCA5NCwgMTc3LCA1MywgMywgMjI1LCAxMCwgMjA4LCA4NiwgMjUwLCAKKyAgICA5NCwgODYsIDUzLCAzLCAyMjUsIDEwLCAyMDgsIDg2LCAyNTAsIDk0LCAxODMsIDUzLCAzLCAyMjUsIDEwLCAyMDgsIDg2LCAKKyAgICAyNTAsIDk0LCA5NiwgNTMsIDMsIDIyOCwgOCwgMjA4LCA4NiwgMjUwLCA5NCwgMTc3LCA1MywgMywgMjI4LCA4LCAyMDgsIAorICAgIDg2LCAyNTAsIDk0LCA4NiwgNTMsIDMsIDIyOCwgOCwgMjA4LCA4NiwgMjUwLCA5NCwgMTgzLCA1MywgMywgMjI4LCA4LCAKKyAgICAyMDgsIDg2LCAyNTAsIDk0LCA5NiwgNTMsIDMsIDUsIDI0MSwgMzEsIDI1MCwgOTQsIDE3NywgNTMsIDMsIDUsIDI0MSwgMzEsIAorICAgIDI1MCwgOTQsIDg2LCA1MywgMywgNSwgMjQxLCAzMSwgMjUwLCA5NCwgMTgzLCA1MywgMywgNSwgMjQxLCAzMSwgMjUwLCA5NCwgCisgICAgOTYsIDUzLCAzLCAyNDEsIDMxLCAyNTAsIDk0LCAxNzcsIDUzLCAzLCAyNDEsIDMxLCAyNTAsIDk0LCA4NiwgNTMsIDMsIAorICAgIDI0MSwgMzEsIDI1MCwgOTQsIDE4MywgNTMsIDMsIDI0MSwgMzEsIDI1MCwgOTQsIDc5LCA5NiwgNTMsIDMsIDI0MSwgMzEsIAorICAgIDI1MCwgOTQsIDc5LCAxNzcsIDUzLCAzLCAyNDEsIDMxLCAyNTAsIDk0LCA3OSwgODYsIDUzLCAzLCAyNDEsIDMxLCAyNTAsIAorICAgIDk0LCA3OSwgMTgzLCA1MywgMywgMjQxLCAzMSwgMjUwLCA5NCwgNzksIDk2LCA1MywgMywgMjI4LCA4LCAyNDEsIDMxLCAKKyAgICAyNTAsIDk0LCA3OSwgMTc3LCA1MywgMywgMjI4LCA4LCAyNDEsIDMxLCAyNTAsIDk0LCA3OSwgODYsIDUzLCAzLCAyMjgsIDgsIAorICAgIDI0MSwgMzEsIDI1MCwgOTQsIDc5LCAxODMsIDUzLCAzLCAyMjgsIDgsIDI0MSwgMzEsIDI1MCwgOTQsIDk2LCAyMDgsIDg0LCAKKyAgICA1MywgMywgMjIzLCA3MywgMjEzLCA3NSwgMTc3LCAyMDgsIDg0LCA1MywgMywgMjIzLCA3MywgMjEzLCA3NSwgODYsIDIwOCwgCisgICAgODQsIDUzLCAzLCAyMjMsIDczLCAyMTMsIDc1LCAxODMsIDIwOCwgODQsIDUzLCAzLCAyMjMsIDczLCAyMTMsIDc1LCA5NiwgCisgICAgMjA4LCA4NCwgNTMsIDMsIDIyNSwgMTAsIDIxMywgNzUsIDE3NywgMjA4LCA4NCwgNTMsIDMsIDIyNSwgMTAsIDIxMywgNzUsIAorICAgIDg2LCAyMDgsIDg0LCA1MywgMywgMjI1LCAxMCwgMjEzLCA3NSwgMTgzLCAyMDgsIDg0LCA1MywgMywgMjI1LCAxMCwgMjEzLCAKKyAgICA3NSwgOTYsIDIwOCwgODQsIDUzLCAzLCAyNiwgMjEzLCA3NSwgMTc3LCAyMDgsIDg0LCA1MywgMywgMjYsIDIxMywgNzUsIAorICAgIDg2LCAyMDgsIDg0LCA1MywgMywgMjYsIDIxMywgNzUsIDE4MywgMjA4LCA4NCwgNTMsIDMsIDI2LCAyMTMsIDc1LCA5NiwgCisgICAgMjA4LCA4NCwgNTMsIDMsIDc5LCAyMTMsIDc1LCAxNzcsIDIwOCwgODQsIDUzLCAzLCA3OSwgMjEzLCA3NSwgODYsIDIwOCwgCisgICAgODQsIDUzLCAzLCA3OSwgMjEzLCA3NSwgMTgzLCAyMDgsIDg0LCA1MywgMywgNzksIDIxMywgNzUsIDk2LCAyMDgsIDg0LCAKKyAgICA1MywgMywgMjA1LCAyNDIsIDc5LCAyMTMsIDc1LCAxNzcsIDIwOCwgODQsIDUzLCAzLCAyMDUsIDI0MiwgNzksIDIxMywgNzUsIAorICAgIDg2LCAyMDgsIDg0LCA1MywgMywgMjA1LCAyNDIsIDc5LCAyMTMsIDc1LCAxODMsIDIwOCwgODQsIDUzLCAzLCAyMDUsIDI0MiwgCisgICAgNzksIDIxMywgNzUsIDk2LCAyNDAsIDEsIDQ3LCAxNzcsIDI0MCwgMSwgNDcsIDg2LCAyNDAsIDEsIDQ3LCAxODMsIDI0MCwgCisgICAgMSwgNDcsIDk2LCAxMDMsIDQ3LCAxNzcsIDEwMywgNDcsIDg2LCAxMDMsIDQ3LCAxODMsIDEwMywgNDcsIDk2LCAyNDUsIAorICAgIDIyMiwgNDcsIDE3NywgMjQ1LCAyMjIsIDQ3LCA4NiwgMjQ1LCAyMjIsIDQ3LCAxODMsIDI0NSwgMjIyLCA0NywgOTYsIDc5LCAKKyAgICAyNDUsIDIyMiwgNDcsIDE3NywgNzksIDI0NSwgMjIyLCA0NywgODYsIDc5LCAyNDUsIDIyMiwgNDcsIDE4MywgNzksIDI0NSwgCisgICAgMjIyLCA0NywgOTYsIDc5LCA0NywgMTc3LCA3OSwgNDcsIDg2LCA3OSwgNDcsIDE4MywgNzksIDQ3LCA5NiwgNDEsIDQ3LCAKKyAgICAxNzcsIDQxLCA0NywgODYsIDQxLCA0NywgMTgzLCA0MSwgNDcsIDE1MywgMjA0LCA0NiwgNDEsIDQ3LCAxNTMsIDI0MSwgCisgICAgMTc2LCA0MSwgNDcsIDIxMSwgMjM4LCAyNDEsIDE3NiwgNDEsIDQ3LCAyMTEsIDIzOCwgMjA0LCA0NiwgNDEsIDQ3LCA0OSwgCisgICAgNTAsIDQxLCA0NywgMTEyLCAxMjEsIDQxLCA0NywgMjA0LCAyNiwgOTYsIDE1NywgMTUwLCA0NywgMjA0LCAyNiwgMTc3LCAKKyAgICAxNTcsIDE1MCwgNDcsIDIwNCwgMjYsIDg2LCAxNTcsIDE1MCwgNDcsIDIwNCwgMjYsIDE4MywgMTU3LCAxNTAsIDQ3LCAyMDQsIAorICAgIDI2LCAxNTMsIDIwNCwgNDYsIDE1NywgMTUwLCA0NywgMjA0LCAyNiwgMTUzLCAyNDEsIDE3NiwgMTU3LCAxNTAsIDQ3LCAKKyAgICAyMDQsIDI2LCAyMTEsIDIzOCwgMjQxLCAxNzYsIDE1NywgMTUwLCA0NywgMjA0LCAyNiwgMjExLCAyMzgsIDIwNCwgNDYsIAorICAgIDE1NywgMTUwLCA0NywgMjA0LCAyNiwgOTYsIDE1MCwgNDcsIDIwNCwgMjYsIDE3NywgMTUwLCA0NywgMjA0LCAyNiwgODYsIAorICAgIDE1MCwgNDcsIDIwNCwgMjYsIDE4MywgMTUwLCA0NywgMjA0LCAyNiwgMTUzLCAyMDQsIDQ2LCAxNTAsIDQ3LCAyMDQsIDI2LCAKKyAgICAxNTMsIDI0MSwgMTc2LCAxNTAsIDQ3LCAyMDQsIDI2LCAyMTEsIDIzOCwgMjQxLCAxNzYsIDE1MCwgNDcsIDIwNCwgMjYsIAorICAgIDIxMSwgMjM4LCAyMDQsIDQ2LCAxNTAsIDQ3LCAyMDQsIDI2LCA5NiwgMjI1LCAxMCwgMTUwLCA0NywgMjA0LCAyNiwgMTc3LCAKKyAgICAyMjUsIDEwLCAxNTAsIDQ3LCAyMDQsIDI2LCA4NiwgMjI1LCAxMCwgMTUwLCA0NywgMjA0LCAyNiwgMTgzLCAyMjUsIDEwLCAKKyAgICAxNTAsIDQ3LCAyMDQsIDI2LCAxNTMsIDIwNCwgNDYsIDIyNSwgMTAsIDE1MCwgNDcsIDIwNCwgMjYsIDE1MywgMjQxLCAxNzYsIAorICAgIDIyNSwgMTAsIDE1MCwgNDcsIDIwNCwgMjYsIDIxMSwgMjM4LCAyNDEsIDE3NiwgMjI1LCAxMCwgMTUwLCA0NywgMjA0LCAyNiwgCisgICAgMjExLCAyMzgsIDIwNCwgNDYsIDIyNSwgMTAsIDE1MCwgNDcsIDIwNCwgMjYsIDk2LCA3OSwgMTUwLCA0NywgMjA0LCAyNiwgCisgICAgMTc3LCA3OSwgMTUwLCA0NywgMjA0LCAyNiwgODYsIDc5LCAxNTAsIDQ3LCAyMDQsIDI2LCAxODMsIDc5LCAxNTAsIDQ3LCAKKyAgICAyMDQsIDI2LCAxNTMsIDIwNCwgNDYsIDc5LCAxNTAsIDQ3LCAyMDQsIDI2LCAxNTMsIDI0MSwgMTc2LCA3OSwgMTUwLCA0NywgCisgICAgMjA0LCAyNiwgMjExLCAyMzgsIDI0MSwgMTc2LCA3OSwgMTUwLCA0NywgMjA0LCAyNiwgMjExLCAyMzgsIDIwNCwgNDYsIDc5LCAKKyAgICAxNTAsIDQ3LCAyMDQsIDI2LCA5NiwgMjA1LCAyNDIsIDc5LCAxNTAsIDQ3LCAyMDQsIDI2LCAxNzcsIDIwNSwgMjQyLCA3OSwgCisgICAgMTUwLCA0NywgMjA0LCAyNiwgODYsIDIwNSwgMjQyLCA3OSwgMTUwLCA0NywgMjA0LCAyNiwgMTgzLCAyMDUsIDI0MiwgNzksIAorICAgIDE1MCwgNDcsIDIwNCwgMjYsIDE1MywgMjA0LCA0NiwgMjA1LCAyNDIsIDc5LCAxNTAsIDQ3LCAyMDQsIDI2LCAxNTMsIDI0MSwgCisgICAgMTc2LCAyMDUsIDI0MiwgNzksIDE1MCwgNDcsIDIwNCwgMjYsIDIxMSwgMjM4LCAyNDEsIDE3NiwgMjA1LCAyNDIsIDc5LCAKKyAgICAxNTAsIDQ3LCAyMDQsIDI2LCAyMTEsIDIzOCwgMjA0LCA0NiwgMjA1LCAyNDIsIDc5LCAxNTAsIDQ3LCA5NiwgMjA4LCA4NiwgCisgICAgMjUwLCA5NCwgMTc3LCAyMDgsIDg2LCAyNTAsIDk0LCA4NiwgMjA4LCA4NiwgMjUwLCA5NCwgMTgzLCAyMDgsIDg2LCAyNTAsIAorICAgIDk0LCA5NiwgNjEsIDUzLCAyMDQsIDUsIDIwOCwgODYsIDI1MCwgOTQsIDE3NywgNjEsIDUzLCAyMDQsIDUsIDIwOCwgODYsIAorICAgIDI1MCwgOTQsIDg2LCA2MSwgNTMsIDIwNCwgNSwgMjA4LCA4NiwgMjUwLCA5NCwgMTgzLCA2MSwgNTMsIDIwNCwgNSwgMjA4LCAKKyAgICA4NiwgMjUwLCA5NCwgOTYsIDUzLCAzLCAyMjEsIDE2MiwgMjA5LCAyNDgsIDE3NywgNTMsIDMsIDIyMSwgMTYyLCAyMDksIAorICAgIDI0OCwgODYsIDUzLCAzLCAyMjEsIDE2MiwgMjA5LCAyNDgsIDE4MywgNTMsIDMsIDIyMSwgMTYyLCAyMDksIDI0OCwgNzksIAorICAgIDUzLCAyMTMsIDc2LCAyMDQsIDI0LCAxMDUsIDc5LCA1MywgMjEzLCA3NiwgMjA0LCAyNCwgMTIwLCAyMDksIDU3LCA3OSwgCisgICAgNTMsIDIxMywgNzYsIDIwNCwgMjQsIDExOCwgMjM3LCAxMzcsIDc5LCA1MywgMjEzLCA3NiwgMjA0LCAyNCwgMTE4LCAyMDksIAorICAgIDYwLCA5NiwgMjQ3LCAyNDUsIDYxLCA0NywgODYsIDI0NywgMjQ4LCAyMTMsIDc4LCA2MSwgNDcsIDk2LCAyMDgsIDE0NSwgCisgICAgMjEzLCA3OCwgNjEsIDQ3LCA4NiwgMjA4LCAxNDUsIDIxMywgNzgsIDYxLCA0NywgOTYsIDIyNywgMjE2LCA2MSwgNDcsIDg2LCAKKyAgICAyMTYsIDEwLCA2MSwgNDcsIDk2LCAyMTYsIDEwLCA2MSwgNDcsIDg2LCAyMjcsIDIxNiwgNjEsIDQ3LCA5NiwgMjQ5LCAyNCwgCisgICAgMjEzLCA3NywgNjEsIDQ3LCA4NiwgMjQ5LCAyNCwgMjEzLCA3NywgNjEsIDQ3LCA5NiwgMjM5LCAxMTcsIDIxMywgNzcsIDYxLCAKKyAgICA0NywgODYsIDIzOSwgMTE3LCAyMTMsIDc3LCA2MSwgNDcsIDYxLCA1MywgMjEzLCA3NiwgMjA0LCAyNCwgMTA1LCA2MSwgNTMsIAorICAgIDIxMywgNzYsIDIwNCwgMjQsIDEyMCwgMjA5LCA1NywgMjAyLCAyNiwgMjQwLCAxMDIsIDIyNCwgNTIsIDI0MCwgMTAyLCAKKyAgICAyNDAsIDEwMywgMywgMjA5LCA4MCwgMjIyLCAyMjIsIDI0MCwgMTAyLCAyMDksIDYyLCAyNDAsIDEwMiwgMjQwLCAxMDMsIDMsIAorICAgIDIzNywgNjMsIDIxNSwgMjIxLCAyNDAsIDEwMiwgMjM2LCAyMCwgMjQwLCAxMDIsIDIsIDc2LCAyMDksIDkzLCAyMzYsIDUyLCAKKyAgICAyNDUsIDE0NiwgMjI3LCAxMDIsIDI0MCwgMTAyLCAyMTQsIDE4OCwgMjA3LCAxNzksIDIwNiwgMjQwLCAyNDAsIDEwMiwgCisgICAgMjQ2LCAxNjEsIDIwNCwgNTcsIDEyLCAxNSwgMjM1LCAxNTIsIDEyLCAxNSwgMjM1LCAxNTEsIDEyLCAxNSwgMjM1LCAxNTAsIAorICAgIDEyLCAxNSwgMjM1LCAxNDksIDEyLCAxNSwgMjM1LCAxNDgsIDEyLCAxNSwgMjM1LCAxNDcsIDEyLCAxNSwgMjM1LCAxNDYsIAorICAgIDEyLCAxNSwgMjM1LCAxNDUsIDEyLCAxNSwgMjM1LCAxNDQsIDEyLCAxNSwgMjM1LCAxNDMsIDEyLCAxNSwgMjM1LCAxNDIsIAorICAgIDEyLCAxNSwgMjM1LCAxNDEsIDEyLCAxNSwgMjM1LCAxNDAsIDEyLCAxNSwgMjM1LCAxMzksIDEyLCAxNSwgMjM1LCAxMzgsIAorICAgIDEyLCAxNSwgMjM1LCAxMzcsIDEyLCAxNSwgMjM1LCAxMzYsIDEyLCAxNSwgMjM1LCAxMzUsIDEyLCAxNSwgMjM1LCAxMzQsIAorICAgIDEyLCAxNSwgMjM1LCAxMzMsIDEyLCAxNSwgMjM1LCAxMzIsIDEyLCAxNSwgMjM1LCAxMzEsIDEyLCAxNSwgMjM1LCAxMzAsIAorICAgIDEyLCAxNSwgMjM1LCAxMjksIDEyLCAxNSwgMjM1LCAxMjgsIDEyLCAxNSwgMjM1LCAxMjcsIDEyLCAxNSwgMjM1LCAxMjYsIAorICAgIDEyLCAxNSwgMjM1LCAxMjUsIDEyLCAxNSwgMjM1LCAxMjQsIDEyLCAxNSwgMjM1LCAxMjMsIDEyLCAxNSwgMjM1LCAxMjIsIAorICAgIDEyLCAxNSwgMjM1LCAxMjEsIDEyLCAxNSwgMjM1LCAxMjAsIDEyLCAxNSwgMjM1LCAxMTksIDEyLCAxNSwgMjM1LCAxMTgsIAorICAgIDEyLCAxNSwgMjM1LCAxMTcsIDEyLCAxNSwgMjM1LCAxMTYsIDEyLCAxNSwgMjM1LCAxMTUsIDEyLCAxNSwgMjM1LCAxMTQsIAorICAgIDEyLCAxNSwgMjM1LCAxMTMsIDEyLCAxNSwgMjM1LCAxMTIsIDEyLCAxNSwgMjM1LCAxMTEsIDEyLCAxNSwgMjM1LCAxMTAsIAorICAgIDEyLCAxNSwgMjM1LCAxMDksIDEyLCAxNSwgMjM1LCAxMDgsIDEyLCAxNSwgMjM1LCAxMDcsIDEyLCAxNSwgMjM1LCAxMDYsIAorICAgIDEyLCAxNSwgMjM1LCAxMDUsIDEyLCAxNSwgMjM1LCAxMDQsIDEyLCAxNSwgMjM1LCAxMDMsIDEyLCAxNSwgMjM1LCAxMDIsIAorICAgIDEyLCAxNSwgMjM1LCAxMDEsIDEyLCAxNSwgMjM1LCAxMDAsIDEyLCAxNSwgMjM1LCA5OSwgMTIsIDE1LCAyMzUsIDk4LCAxMiwgCisgICAgMTUsIDIzNSwgOTcsIDEyLCAxNSwgMjM1LCA5NiwgMTIsIDE1LCAyMzUsIDk1LCAxMiwgMTUsIDIzNSwgOTQsIDEyLCAxNSwgCisgICAgMjM1LCA5MywgMTIsIDE1LCAyMzUsIDkyLCAxMiwgMTUsIDIzNSwgOTEsIDEyLCAxNSwgMjM1LCA5MCwgMTIsIDE1LCAyMzUsIAorICAgIDg5LCAxMiwgMTUsIDIzNSwgODgsIDEyLCAxNSwgMjM1LCA4NywgMTIsIDE1LCAyMzUsIDg2LCAxMiwgMTUsIDIzNSwgODUsIAorICAgIDEyLCAxNSwgMjM1LCA4NCwgMTIsIDE1LCAyMzUsIDgzLCAxMiwgMTUsIDIzNSwgODIsIDEyLCAxNSwgMjM1LCA4MSwgMTIsIAorICAgIDE1LCAyMzUsIDgwLCAxMiwgMTUsIDIzNSwgNzksIDEyLCAxNSwgMjM1LCA3OCwgMTIsIDE1LCAyMzUsIDc3LCAxMiwgMTUsIAorICAgIDIzNSwgNzYsIDEyLCAxNSwgMjM1LCA3NSwgMTIsIDE1LCAyMzUsIDc0LCAxMiwgMTUsIDIzNSwgNzMsIDEyLCAxNSwgMjM1LCAKKyAgICA3MiwgMTIsIDE1LCAyMzUsIDcxLCAxMiwgMTUsIDIzNSwgNzAsIDEyLCAxNSwgMjM1LCA2OSwgMTIsIDE1LCAyMzUsIDY4LCAKKyAgICAxMiwgMTUsIDIzNSwgNjcsIDEyLCAxNSwgMjM1LCA2NiwgMTIsIDE1LCAyMzUsIDY1LCAxMiwgMTUsIDIzNSwgNjQsIDEyLCAKKyAgICAxNSwgMjM1LCA2MywgMTIsIDE1LCAyMzUsIDYyLCAxMiwgMTUsIDIzNSwgNjEsIDEyLCAxNSwgMjM1LCA2MCwgMTIsIDE1LCAKKyAgICAyMzUsIDU5LCAxMiwgMTUsIDIzNSwgNTgsIDEyLCAxNSwgMjM1LCA1NywgMTIsIDE1LCAyMzUsIDU2LCAxMiwgMTUsIDIzNSwgCisgICAgNTUsIDEyLCAxNSwgMjM1LCA1NCwgMTIsIDE1LCAyMzUsIDUzLCAxMiwgMTUsIDIzNSwgNTIsIDEyLCAxNSwgMjM1LCA1MSwgCisgICAgMTIsIDE1LCAyMzUsIDUwLCAxMiwgMTUsIDIzNSwgNDksIDEyLCAxNSwgMjM1LCA0OCwgMTIsIDE1LCAyMzUsIDQ3LCAxMiwgCisgICAgMTUsIDIzNSwgNDYsIDEyLCAxNSwgMjM1LCA0NSwgMTIsIDE1LCAyMzUsIDQ0LCAxMiwgMTUsIDIzNSwgNDMsIDEyLCAxNSwgCisgICAgMjM1LCA0MiwgMTIsIDE1LCAyMzUsIDQxLCAxMiwgMTUsIDIzNSwgNDAsIDEyLCAxNSwgMjM1LCAzOSwgMTIsIDE1LCAyMzUsIAorICAgIDM4LCAxMiwgMTUsIDIzNSwgMzcsIDEyLCAxNSwgMjM1LCAzNiwgMTIsIDE1LCAyMzUsIDM1LCAxMiwgMTUsIDIzNSwgMzQsIAorICAgIDEyLCAxNSwgMjM1LCAzMywgMTIsIDE1LCAyMzUsIDMyLCAxMiwgMTUsIDIzNSwgMzEsIDEyLCAxNSwgMjM1LCAzMCwgMTIsIAorICAgIDE1LCAyMzUsIDI5LCAxMiwgMTUsIDIzNSwgMjgsIDEyLCAxNSwgMjM1LCAyNywgMTIsIDE1LCAyMzUsIDI2LCAxMiwgMTUsIAorICAgIDIzNSwgMjUsIDEyLCAxNSwgMjM1LCAyNCwgMTIsIDE1LCAyMzUsIDIzLCAxMiwgMTUsIDIzNSwgMjIsIDEyLCAxNSwgMjM1LCAKKyAgICAyMSwgMTIsIDE1LCAyMzUsIDIwLCAxMiwgMTUsIDIzNSwgMTksIDEyLCAxNSwgMjM1LCAxOCwgMTIsIDE1LCAyMzUsIDE3LCAKKyAgICAxMiwgMTUsIDIzNSwgMTYsIDEyLCAxNSwgMjM1LCAxNSwgMTIsIDE1LCAyMzUsIDE0LCAxMiwgMTUsIDIzNSwgMTMsIDEyLCAKKyAgICAxNSwgMjM1LCAxMiwgMTIsIDE1LCAyMzUsIDExLCAxMiwgMTUsIDIzNSwgMTAsIDEyLCAxNSwgMjM1LCA5LCAxMiwgMTUsIAorICAgIDIzNSwgOCwgMTIsIDE1LCAyMzUsIDcsIDEyLCAxNSwgMjM1LCA2LCAxMiwgMTUsIDIzNSwgNSwgMTIsIDE1LCAyMzUsIDQsIAorICAgIDEyLCAxNSwgMjM1LCAzLCAxMiwgMTUsIDIzNSwgMiwgMTIsIDE1LCAyMzUsIDEsIDEyLCAxNSwgMjM1LCAwLCAxMiwgMTUsIAorICAgIDIzNCwgMjU1LCAxMiwgMTUsIDIzNCwgMjU0LCAxMiwgMTUsIDIzNCwgMjUzLCAxMiwgMTUsIDIzNCwgMjUyLCAxMiwgMTUsIAorICAgIDIzNCwgMjUxLCAxMiwgMTUsIDIzNCwgMjUwLCAxMiwgMTUsIDIzNCwgMjQ5LCAxMiwgMTUsIDIzNCwgMjQ4LCAxMiwgMTUsIAorICAgIDIzNCwgMjQ3LCAxMiwgMTUsIDIzNCwgMjQ2LCAxMiwgMTUsIDIzNCwgMjQ1LCAxMiwgMTUsIDIzNCwgMjQ0LCAxMiwgMTUsIAorICAgIDIzNCwgMjQzLCAxMiwgMTUsIDIzNCwgMjQyLCAxMiwgMTUsIDIzNCwgMjQxLCAxMiwgMTUsIDIzNCwgMjQwLCAxMiwgMTUsIAorICAgIDIzNCwgMjM5LCAxMiwgMTUsIDIzNCwgMjM4LCAxMiwgMTUsIDIzNCwgMjM3LCAxMiwgMTUsIDIzNCwgMjM2LCAxMiwgMTUsIAorICAgIDIzNCwgMjM1LCAxMiwgMTUsIDIzNCwgMjM0LCAxMiwgMTUsIDIzNCwgMjMzLCAxMiwgMTUsIDIzNCwgMjMyLCAxMiwgMTUsIAorICAgIDIzNCwgMjMxLCAxMiwgMTUsIDIzNCwgMjMwLCAxMiwgMTUsIDIzNCwgMjI5LCAxMiwgMTUsIDIzNCwgMjI4LCAxMiwgMTUsIAorICAgIDIzNCwgMjI3LCAxMiwgMTUsIDIzNCwgMjI2LCAxMiwgMTUsIDIzNCwgMjI1LCAxMiwgMTUsIDIzNCwgMjI0LCAxMiwgMTUsIAorICAgIDIzNCwgMjIzLCAxMiwgMTUsIDIzNCwgMjIyLCAxMiwgMTUsIDIzNCwgMjIxLCAxMiwgMTUsIDIzNCwgMjIwLCAxMiwgMTUsIAorICAgIDIzNCwgMjE5LCAxMiwgMTUsIDIzNCwgMjE4LCAxMiwgMTUsIDIzNCwgMjE3LCAxMiwgMTUsIDIzNCwgMjE2LCAxMiwgMTUsIAorICAgIDIzNCwgMjE1LCAxMiwgMTUsIDIzNCwgMjE0LCAxMiwgMTUsIDIzNCwgMjEzLCAxMiwgMTUsIDIzNCwgMjEyLCAxMiwgMTUsIAorICAgIDIzNCwgMjExLCAxMiwgMTUsIDIzNCwgMjEwLCAxMiwgMTUsIDIzNCwgMjA5LCAxMiwgMTUsIDIzNCwgMjA4LCAxMiwgMTUsIAorICAgIDIzNCwgMjA3LCAxMiwgMTUsIDIzNCwgMjA2LCAxMiwgMTUsIDIzNCwgMjA1LCAxMiwgMTUsIDIzNCwgMjA0LCAxMiwgMTUsIAorICAgIDIzNCwgMjAzLCAxMiwgMTUsIDIzNCwgMjAyLCAxMiwgMTUsIDIzNCwgMjAxLCAxMiwgMTUsIDIzNCwgMjAwLCAxMiwgMTUsIAorICAgIDIzNCwgMTk5LCAxMiwgMTUsIDIzNCwgMTk4LCAxMiwgMTUsIDIzNCwgMTk3LCAxMiwgMTUsIDIzNCwgMTk2LCAxMiwgMTUsIAorICAgIDIzNCwgMTk1LCAxMiwgMTUsIDIzNCwgMTk0LCAxMiwgMTUsIDIzNCwgMTkzLCAxMiwgMTUsIDIzNCwgMTkyLCAxMiwgMTUsIAorICAgIDIzNCwgMTkxLCAxMiwgMTUsIDIzNCwgMTkwLCAxMiwgMTUsIDIzNCwgMTg5LCAxMiwgMTUsIDIzNCwgMTg4LCAxMiwgMTUsIAorICAgIDIzNCwgMTg3LCAxMiwgMTUsIDIzNCwgMTg2LCAxMiwgMTUsIDIzNCwgMTg1LCAxMiwgMTUsIDIzNCwgMTg0LCAxMiwgMTUsIAorICAgIDIzNCwgMTgzLCAxMiwgMTUsIDIzNCwgMTgyLCAxMiwgMTUsIDIzNCwgMTgxLCAxMiwgMTUsIDIzNCwgMTgwLCAxMiwgMTUsIAorICAgIDIzNCwgMTc5LCAxMiwgMTUsIDIzNCwgMTc4LCAxMiwgMTUsIDIzNCwgMTc3LCAxMiwgMTUsIDIzNCwgMTc2LCAxMiwgMTUsIAorICAgIDIzNCwgMTc1LCAxMiwgMTUsIDIzNCwgMTc0LCAxMiwgMTUsIDIzNCwgMTczLCAxMiwgMTUsIDIzNCwgMTcyLCAxMiwgMTUsIAorICAgIDIzNCwgMTcxLCAxMiwgMTUsIDIzNCwgMTcwLCAxMiwgMTUsIDIzNCwgMTY5LCAxMiwgMTUsIDIzNCwgMTY4LCAxMiwgMTUsIAorICAgIDIzNCwgMTY3LCAxMiwgMTUsIDIzNCwgMTY2LCAxMiwgMTUsIDIzNCwgMTY1LCAxMiwgMTUsIDIzNCwgMTY0LCAxMiwgMTUsIAorICAgIDIzNCwgMTYzLCAxMiwgMTUsIDIzNCwgMTYyLCAxMiwgMTUsIDIzNCwgMTYxLCAxMiwgMTUsIDIzNCwgMTYwLCAxMiwgMTUsIAorICAgIDIzNCwgMTU5LCAxMiwgMTUsIDIzNCwgMTU4LCAxMiwgMTUsIDIzNCwgMTU3LCAxMiwgMTUsIDIzNCwgMTU2LCAxMiwgMTUsIAorICAgIDIzNCwgMTU1LCAxMiwgMTUsIDIzNCwgMTU0LCAxMiwgMTUsIDIzNCwgMTUzLCAxMiwgMTUsIDIzNCwgMTUyLCAxMiwgMTUsIAorICAgIDIzNCwgMTUxLCAxMiwgMTUsIDIzNCwgMTUwLCAxMiwgMTUsIDIzNCwgMTQ5LCAxMiwgMTUsIDIzNCwgMTQ4LCAxMiwgMTUsIAorICAgIDIzNCwgMTQ3LCAxMiwgMTUsIDIzNCwgMTQ2LCAxMiwgMTUsIDIzNCwgMTQ1LCAxMiwgMTUsIDIzNCwgMTQ0LCAxMiwgMTUsIAorICAgIDIzNCwgMTQzLCAxMiwgMTUsIDIzNCwgMTQyLCAxMiwgMTUsIDIzNCwgMTQxLCAxMiwgMTUsIDIzNCwgMTQwLCAxMiwgMTUsIAorICAgIDIzNCwgMTM5LCAxMiwgMTUsIDIzNCwgMTM4LCAxMiwgMTUsIDIzNCwgMTM3LCAxMiwgMTUsIDIzNCwgMTM2LCAxMiwgMTUsIAorICAgIDIzNCwgMTM1LCAxMiwgMTUsIDIzNCwgMTM0LCAxMiwgMTUsIDIzNCwgMTMzLCAxMiwgMTUsIDIzNCwgMTMyLCAxMiwgMTUsIAorICAgIDIzNCwgMTMxLCAxMiwgMTUsIDIzNCwgMTMwLCAxMiwgMTUsIDIzNCwgMTI5LCAxMiwgMTUsIDIzNCwgMTI4LCAxMiwgMTUsIAorICAgIDIzNCwgMTI3LCAxMiwgMTUsIDIzNCwgMTI2LCAxMiwgMTUsIDIzNCwgMTI1LCAxMiwgMTUsIDIzNCwgMTI0LCAxMiwgMTUsIAorICAgIDIzNCwgMTIzLCAxMiwgMTUsIDIzNCwgMTIyLCAxMiwgMTUsIDIzNCwgMTIxLCAxMiwgMTUsIDIzNCwgMTIwLCAxMiwgMTUsIAorICAgIDIzNCwgMTE5LCAxMiwgMTUsIDIzNCwgMTE4LCAxMiwgMTUsIDIzNCwgMTE3LCAxMiwgMTUsIDIzNCwgMTE2LCAxMiwgMTUsIAorICAgIDIzNCwgMTE1LCAxMiwgMTUsIDIzNCwgMTE0LCAxMiwgMTUsIDIzNCwgMTEzLCAxMiwgMTUsIDIzNCwgMTEyLCAxMiwgMTUsIAorICAgIDIzNCwgMTExLCAxMiwgMTUsIDIzNCwgMTEwLCAxMiwgMTUsIDIzNCwgMTA5LCAxMiwgMTUsIDIzNCwgMTA4LCAxMiwgMTUsIAorICAgIDIzNCwgMTA3LCAxMiwgMTUsIDIzNCwgMTA2LCAxMiwgMTUsIDIzNCwgMTA1LCAxMiwgMTUsIDIzNCwgMTA0LCAxMiwgMTUsIAorICAgIDIzNCwgMTAzLCAxMiwgMTUsIDIzNCwgMTAyLCAxMiwgMTUsIDIzNCwgMTAxLCAxMiwgMTUsIDIzNCwgMTAwLCAxMiwgMTUsIAorICAgIDIzNCwgOTksIDEyLCAxNSwgMjM0LCA5OCwgMTIsIDE1LCAyMzQsIDk3LCAxMiwgMTUsIDIzNCwgOTYsIDEyLCAxNSwgMjM0LCAKKyAgICA5NSwgMTIsIDE1LCAyMzQsIDk0LCAxMiwgMTUsIDIzNCwgOTMsIDEyLCAxNSwgMjM0LCA5MiwgMTIsIDE1LCAyMzQsIDkxLCAKKyAgICAxMiwgMTUsIDIzNCwgOTAsIDEyLCAxNSwgMjM0LCA4OSwgMTIsIDE1LCAyMzQsIDg4LCAxMiwgMTUsIDIzNCwgODcsIDEyLCAKKyAgICAxNSwgMjM0LCA4NiwgMTIsIDE1LCAyMzQsIDg1LCAxMiwgMTUsIDIzNCwgODQsIDEyLCAxNSwgMjM0LCA4MywgMTIsIDE1LCAKKyAgICAyMzQsIDgyLCAxMiwgMTUsIDIzNCwgODEsIDEyLCAxNSwgMjM0LCA4MCwgMTIsIDE1LCAyMzQsIDc5LCAxMiwgMTUsIDIzNCwgCisgICAgNzgsIDEyLCAxNSwgMjM0LCA3NywgMTIsIDE1LCAyMzQsIDc2LCAxMiwgMTUsIDIzNCwgNzUsIDEyLCAxNSwgMjM0LCA3NCwgCisgICAgMTIsIDE1LCAyMzQsIDczLCAxMiwgMTUsIDIzNCwgNzIsIDEyLCAxNSwgMjM0LCA3MSwgMTIsIDE1LCAyMzQsIDcwLCAxMiwgCisgICAgMTUsIDIzNCwgNjksIDEyLCAxNSwgMjM0LCA2OCwgMTIsIDE1LCAyMzQsIDY3LCAxMiwgMTUsIDIzNCwgNjYsIDEyLCAxNSwgCisgICAgMjM0LCA2NSwgMTIsIDE1LCAyMzQsIDY0LCAxMiwgMTUsIDIzNCwgNjMsIDEyLCAxNSwgMjM0LCA2MiwgMTIsIDE1LCAyMzQsIAorICAgIDYxLCAxMiwgMTUsIDIzNCwgNjAsIDEyLCAxNSwgMjM0LCA1OSwgMTIsIDE1LCAyMzQsIDU4LCAxMiwgMTUsIDIzNCwgNTcsIAorICAgIDEyLCAxNSwgMjM0LCA1NiwgMTIsIDE1LCAyMzQsIDU1LCAxMiwgMTUsIDIzNCwgNTQsIDEyLCAxNSwgMjM0LCA1MywgMTIsIAorICAgIDE1LCAyMzQsIDUyLCAxMiwgMTUsIDIzNCwgNTEsIDEyLCAxNSwgMjM0LCA1MCwgMTIsIDE1LCAyMzQsIDQ5LCAxMiwgMTUsIAorICAgIDIzNCwgNDgsIDEyLCAxNSwgMjM0LCA0NywgMTIsIDE1LCAyMzQsIDQ2LCAxMiwgMTUsIDIzNCwgNDUsIDEyLCAxNSwgMjM0LCAKKyAgICA0NCwgMTIsIDE1LCAyMzQsIDQzLCAxMiwgMTUsIDIzNCwgNDIsIDEyLCAxNSwgMjM0LCA0MSwgMTIsIDE1LCAyMzQsIDQwLCAKKyAgICAxMiwgMTUsIDIzNCwgMzksIDEyLCAxNSwgMjM0LCAzOCwgMTIsIDE1LCAyMzQsIDM3LCAxMiwgMTUsIDIzNCwgMzYsIDEyLCAKKyAgICAxNSwgMjM0LCAzNSwgMTIsIDE1LCAyMzQsIDM0LCAxMiwgMTUsIDIzNCwgMzMsIDEyLCAxNSwgMjM0LCAzMiwgMTIsIDE1LCAKKyAgICAyMzQsIDMxLCAxMiwgMTUsIDIzNCwgMzAsIDEyLCAxNSwgMjM0LCAyOSwgMTIsIDE1LCAyMzQsIDI4LCAxMiwgMTUsIDIzNCwgCisgICAgMjcsIDEyLCAxNSwgMjM0LCAyNiwgMTIsIDE1LCAyMzQsIDI1LCAxMiwgMTUsIDIzNCwgMjQsIDEyLCAxNSwgMjM0LCAyMywgCisgICAgMTIsIDE1LCAyMzQsIDIyLCAxMiwgMTUsIDIzNCwgMjEsIDEyLCAxNSwgMjM0LCAyMCwgMTIsIDE1LCAyMzQsIDE5LCAxMiwgCisgICAgMTUsIDIzNCwgMTgsIDEyLCAxNSwgMjM0LCAxNywgMTIsIDE1LCAyMzQsIDE2LCAxMiwgMTUsIDIzNCwgMTUsIDEyLCAxNSwgCisgICAgMjM0LCAxNCwgMTIsIDE1LCAyMzQsIDEzLCAxMiwgMTUsIDIzNCwgMTIsIDEyLCAxNSwgMjM0LCAxMSwgMTIsIDE1LCAyMzQsIAorICAgIDEwLCAxMiwgMTUsIDIzNCwgOSwgMTIsIDE1LCAyMzQsIDgsIDEyLCAxNSwgMjM0LCA3LCAxMiwgMTUsIDIzNCwgNiwgMTIsIAorICAgIDE1LCAyMzQsIDUsIDEyLCAxNSwgMjM0LCA0LCAxMiwgMTUsIDIzNCwgMywgMTIsIDE1LCAyMzQsIDIsIDEyLCAxNSwgMjM0LCAKKyAgICAxLCAxMiwgMTUsIDIzNCwgMCwgMTIsIDE1LCAyMzMsIDI1NSwgMTIsIDE1LCAyMzMsIDI1NCwgMTIsIDE1LCAyMzMsIDI1MywgCisgICAgMTIsIDE1LCAyMzMsIDI1MiwgMTIsIDE1LCAyMzMsIDI1MSwgMTIsIDE1LCAyMzMsIDI1MCwgMTIsIDE1LCAyMzMsIDI0OSwgCisgICAgMTIsIDE1LCAyMzMsIDI0OCwgMTIsIDE1LCAyMzMsIDI0NywgMTIsIDE1LCAyMzMsIDI0NiwgMTIsIDE1LCAyMzMsIDI0NSwgCisgICAgMTIsIDE1LCAyMzMsIDI0NCwgMTIsIDE1LCAyMzMsIDI0MywgMTIsIDE1LCAyMzMsIDI0MiwgMTIsIDE1LCAyMzMsIDI0MSwgCisgICAgMTIsIDE1LCAyMzMsIDI0MCwgMTIsIDE1LCAyMzMsIDIzOSwgMTIsIDE1LCAyMzMsIDIzOCwgMTIsIDE1LCAyMzMsIDIzNywgCisgICAgMTIsIDE1LCAyMzMsIDIzNiwgMTIsIDE1LCAyMzMsIDIzNSwgMTIsIDE1LCAyMzMsIDIzNCwgMTIsIDE1LCAyMzMsIDIzMywgCisgICAgMTIsIDE1LCAyMzMsIDIzMiwgMTIsIDE1LCAyMzMsIDIzMSwgMTIsIDE1LCAyMzMsIDIzMCwgMTIsIDE1LCAyMzMsIDIyOSwgCisgICAgMTIsIDE1LCAyMzMsIDIyOCwgMTIsIDE1LCAyMzMsIDIyNywgMTIsIDE1LCAyMzMsIDIyNiwgMTIsIDE1LCAyMzMsIDIyNSwgCisgICAgMTIsIDE1LCAyMzMsIDIyNCwgMTIsIDE1LCAyMzMsIDIyMywgMTIsIDE1LCAyMzMsIDIyMiwgMTIsIDE1LCAyMzMsIDIyMSwgCisgICAgMTIsIDE1LCAyMzMsIDIyMCwgMTIsIDE1LCAyMzMsIDIxOSwgMTIsIDE1LCAyMzMsIDIxOCwgMTIsIDE1LCAyMzMsIDIxNywgCisgICAgMTIsIDE1LCAyMzMsIDIxNiwgMTIsIDE1LCAyMzMsIDIxNSwgMTIsIDE1LCAyMzMsIDIxNCwgMTIsIDE1LCAyMzMsIDIxMywgCisgICAgMTIsIDE1LCAyMzMsIDIxMiwgMTIsIDE1LCAyMzMsIDIxMSwgMTIsIDE1LCAyMzMsIDIxMCwgMTIsIDE1LCAyMzMsIDIwOSwgCisgICAgMTIsIDE1LCAyMzMsIDIwOCwgMTIsIDE1LCAyMzMsIDIwNywgMTIsIDE1LCAyMzMsIDIwNiwgMTIsIDE1LCAyMzMsIDIwNSwgCisgICAgMTIsIDE1LCAyMzMsIDIwNCwgMTIsIDE1LCAyMzMsIDIwMywgMTIsIDE1LCAyMzMsIDIwMiwgMTIsIDE1LCAyMzMsIDIwMSwgCisgICAgMTIsIDE1LCAyMzMsIDIwMCwgMTIsIDE1LCAyMzMsIDE5OSwgMTIsIDE1LCAyMzMsIDE5OCwgMTIsIDE1LCAyMzMsIDE5NywgCisgICAgMTIsIDE1LCAyMzMsIDE5NiwgMTIsIDE1LCAyMzMsIDE5NSwgMTIsIDE1LCAyMzMsIDE5NCwgMTIsIDE1LCAyMzMsIDE5MywgCisgICAgMTIsIDE1LCAyMzMsIDE5MiwgMTIsIDE1LCAyMzMsIDE5MSwgMTIsIDE1LCAyMzMsIDE5MCwgMTIsIDE1LCAyMzMsIDE4OSwgCisgICAgMTIsIDE1LCAyMzMsIDE4OCwgMTIsIDE1LCAyMzMsIDE4NywgMTIsIDE1LCAyMzMsIDE4NiwgMTIsIDE1LCAyMzMsIDE4NSwgCisgICAgMTIsIDE1LCAyMzMsIDE4NCwgMTIsIDE1LCAyMzMsIDE4MywgMTIsIDE1LCAyMzMsIDE4MiwgMTIsIDE1LCAyMzMsIDE4MSwgCisgICAgMTIsIDE1LCAyMzMsIDE4MCwgMTIsIDE1LCAyMzMsIDE3OSwgMTIsIDE1LCAyMzMsIDE3OCwgMTIsIDE1LCAyMzMsIDE3NywgCisgICAgMTIsIDE1LCAyMzMsIDE3NiwgMTIsIDE1LCAyMzMsIDE3NSwgMTIsIDE1LCAyMzMsIDE3NCwgMTIsIDE1LCAyMzMsIDE3MywgCisgICAgMTIsIDE1LCAyMzMsIDE3MiwgMTIsIDE1LCAyMzMsIDE3MSwgMTIsIDE1LCAyMzMsIDE3MCwgMTIsIDE1LCAyMzMsIDE2OSwgCisgICAgMTIsIDE1LCAyMzMsIDE2OCwgMTIsIDE1LCAyMzMsIDE2NywgMTIsIDE1LCAyMzMsIDE2NiwgMTIsIDE1LCAyMzMsIDE2NSwgCisgICAgMTIsIDE1LCAyMzMsIDE2NCwgMTIsIDE1LCAyMzMsIDE2MywgMTIsIDE1LCAyMzMsIDE2MiwgMTIsIDE1LCAyMzMsIDE2MSwgCisgICAgMTIsIDE1LCAyMzMsIDE2MCwgMTIsIDE1LCAyMzMsIDE1OSwgMTIsIDE1LCAyMzMsIDE1OCwgMTIsIDE1LCAyMzMsIDE1NywgCisgICAgMTIsIDE1LCAyMzMsIDE1NiwgMTIsIDE1LCAyMzMsIDE1NSwgMTIsIDE1LCAyMzMsIDE1NCwgMTIsIDE1LCAyMzMsIDE1MywgCisgICAgMTIsIDE1LCAyMzMsIDE1MiwgMTIsIDE1LCAyMzMsIDE1MSwgMTIsIDE1LCAyMzMsIDE1MCwgMTIsIDE1LCAyMzMsIDE0OSwgCisgICAgMTIsIDE1LCAyMzMsIDE0OCwgMTIsIDE1LCAyMzMsIDE0NywgMTIsIDE1LCAyMzMsIDE0NiwgMTIsIDE1LCAyMzMsIDE0NSwgCisgICAgMTIsIDE1LCAyMzMsIDE0NCwgMTIsIDE1LCAyMzMsIDE0MywgMTIsIDE1LCAyMzMsIDE0MiwgMTIsIDE1LCAyMzMsIDE0MSwgCisgICAgMTIsIDE1LCAyMzMsIDE0MCwgMTIsIDE1LCAyMzMsIDEzOSwgMTIsIDE1LCAyMzMsIDEzOCwgMTIsIDE1LCAyMzMsIDEzNywgCisgICAgMTIsIDE1LCAyMzMsIDEzNiwgMTIsIDE1LCAyMzMsIDEzNSwgMTIsIDE1LCAyMzMsIDEzNCwgMTIsIDE1LCAyMzMsIDEzMywgCisgICAgMTIsIDE1LCAyMzMsIDEzMiwgMTIsIDE1LCAyMzMsIDEzMSwgMTIsIDE1LCAyMzMsIDEzMCwgMTIsIDE1LCAyMzMsIDEyOSwgCisgICAgMTIsIDE1LCAyMzMsIDEyOCwgMTIsIDE1LCAyMzMsIDEyNywgMTIsIDE1LCAyMzMsIDEyNiwgMTIsIDE1LCAyMzMsIDEyNSwgCisgICAgMTIsIDE1LCAyMzMsIDEyNCwgMTIsIDE1LCAyMzMsIDEyMywgMjI4LCAxNCwgMjA5LCAyNTUsIDE2MCwgMjExLCAyMjgsIAorICAgIDE2MCwgMjQwLCAyMTIsIDgyLCAxNjAsIDIxNywgMzEsIDgyLCAxNjAsIDQyLCA1NCwgMTYwLCAyNDMsIDk3LCA1NCwgMTYwLCAKKyAgICAyMTgsIDI0NiwgNTQsIDE2MCwgMjUwLCAyMzUsIDE2MCwgMjUwLCAxNjAsIDE2MCwgNDksIDIxOSwgNzYsIDE2MCwgNTAsIAorICAgIDIxOSwgNzYsIDE2MCwgMjUwLCA1OSwgMTYwLCA5MSwgNTQsIDE2MCwgMjQ1LCAyMzMsIDE2MCwgMjM1LCAyMTksIDE2MCwgCisgICAgMjM5LCAxMDIsIDIxMSwgNjEsIDE2MCwgMjEyLCAwLCAxNjAsIDE3LCAyMDIsIDg0LCAxNjAsIDE3LCAxMDUsIDE2MCwgMTcsIAorICAgIDEwOCwgMTYwLCAxNywgMTQ3LCAxNjAsIDE3LCAxNDksIDE2MCwgMTcsIDE3MCwgMTYwLCAxNywgMTk1LCAxNjAsIDE3LCAKKyAgICAyMTMsIDExMSwgMTYwLCAxNywgMTk5LCAxNjAsIDE3LCAyMjIsIDYzLCAxNjAsIDI0NSwgMjQyLCAxNjAsIDIxMywgMTQzLCAKKyAgICAxNjAsIDIyNywgMTc5LCA1NCwgMTYwLCAyNDEsIDM1LCA1NCwgMTYwLCAyMzcsIDI0NywgNTQsIDE2MCwgMjE3LCA0NywgODIsIAorICAgIDE2MCwgMjQ1LCAyMzEsIDI1MCwgNDksIDE2MCwgOCwgNiwgMSwgNjMsIDE2MCwgOCwgNiwgMSwgMjQ5LCAyNTUsIDE2MCwgOCwgCisgICAgNiwgMSwgMjQ3LCAxMjUsIDE2MCwgOCwgNiwgMSwgMjQ1LCA1MSwgMTYwLCA4LCA2LCAxLCA3NCwgMTYwLCA4LCA2LCAxLCAKKyAgICAyNDAsIDE3NCwgMTYwLCA4LCA2LCAxLCAyMzksIDc1LCAxNjAsIDgsIDYsIDEsIDIzNywgMTcxLCAxNjAsIDgsIDYsIDEsIAorICAgIDc1LCAxNjAsIDgsIDYsIDEsIDIzMCwgMTg0LCAxNjAsIDgsIDYsIDEsIDIzMCwgNTQsIDE2MCwgOCwgNiwgMSwgMTU5LCAKKyAgICAxNjAsIDgsIDYsIDEsIDIyNiwgMTg1LCAxNjAsIDgsIDYsIDEsIDIyMywgMTYzLCAxNjAsIDgsIDYsIDEsIDc4LCAxNjAsIDgsIAorICAgIDYsIDEsIDIxOSwgMTg0LCAxNjAsIDgsIDYsIDEsIDIxNywgMTM0LCAxNjAsIDgsIDYsIDEsIDE0NiwgMTYwLCA4LCA2LCAxLCAKKyAgICAxOTQsIDE2MCwgOCwgNiwgMSwgMjEwLCA2OSwgMTYwLCA4LCA2LCAxLCA2OCwgMTYwLCA4LCA2LCAxLCAyMDYsIDE2NCwgCisgICAgMTYwLCA4LCA2LCAxLCAyMDQsIDE0NCwgMTYwLCA4LCA2LCAxLCAyMDMsIDE5NiwgMTYwLCA4LCA2LCAxLCAyMDMsIDEyNCwgCisgICAgMTYwLCA4LCA2LCAxLCAyMDIsIDE1OSwgMTYwLCA0OSwgNTEsIDE1NSwgMTYwLCAyMTYsIDc0LCAyMTIsIDAsIDE2MCwgNTAsIAorICAgIDUxLCAxNTUsIDE2MCwgMjQ2LCA1MywgMjUxLCAxMzgsIDE2MCwgMTI0LCAyMjcsIDExNCwgMTYwLCAyMzcsIDI1NCwgMjUxLCAKKyAgICAxMzgsIDE2MCwgOCwgNSwgMSwgNjMsIDE2MCwgOCwgNSwgMSwgMjQ5LCAyNTUsIDE2MCwgOCwgNSwgMSwgMjQ3LCAxMjUsIAorICAgIDE2MCwgOCwgNSwgMSwgMjQ1LCA1MSwgMTYwLCA4LCA1LCAxLCA3NCwgMTYwLCA4LCA1LCAxLCAyNDAsIDE3NCwgMTYwLCA4LCAKKyAgICA1LCAxLCAyMzksIDc1LCAxNjAsIDgsIDUsIDEsIDIzNywgMTcxLCAxNjAsIDgsIDUsIDEsIDc1LCAxNjAsIDgsIDUsIDEsIAorICAgIDIzMCwgMTg0LCAxNjAsIDgsIDUsIDEsIDIzMCwgNTQsIDE2MCwgOCwgNSwgMSwgMTU5LCAxNjAsIDgsIDUsIDEsIDIyNiwgCisgICAgMTg1LCAxNjAsIDgsIDUsIDEsIDIyMywgMTYzLCAxNjAsIDgsIDUsIDEsIDc4LCAxNjAsIDgsIDUsIDEsIDIxOSwgMTg0LCAKKyAgICAxNjAsIDgsIDUsIDEsIDIxNywgMTM0LCAxNjAsIDgsIDUsIDEsIDE0NiwgMTYwLCA4LCA1LCAxLCAxOTQsIDE2MCwgOCwgNSwgCisgICAgMSwgMjEwLCA2OSwgMTYwLCA4LCA1LCAxLCA2OCwgMTYwLCA4LCA1LCAxLCAyMDYsIDE2NCwgMTYwLCA4LCA1LCAxLCAyMDQsIAorICAgIDE0NCwgMTYwLCA4LCA1LCAxLCAyMDMsIDE5NiwgMTYwLCA4LCA1LCAxLCAyMDMsIDEyNCwgMTYwLCA4LCA1LCAxLCAyMDIsIAorICAgIDE1OSwgMTYwLCA0OSwgMjQ1LCA5MywgMTU1LCAxNjAsIDgwLCAyMjcsIDExNCwgMTYwLCA1MCwgMjQ1LCA5MywgMTU1LCAKKyAgICAxNjAsIDIwOCwgMjI3LCAyNDcsIDYwLCAyMDksIDI1NSwgNTcsIDIxNCwgNzEsIDU3LCAyMTQsIDYwLCA1NywgMjE0LCA0OSwgCisgICAgNTcsIDIxNCwgMzcsIDU3LCAyMTQsIDI2LCA1NywgMjE0LCAxNSwgNTcsIDIxNCwgNCwgNTcsIDIxMywgMjQ5LCA1NywgMjEzLCAKKyAgICAyMzgsIDU3LCAyMTMsIDIzMCwgNTcsIDIxMywgMjI5LCA1NywgMjEzLCAyMjgsIDU3LCAyMTMsIDIyNywgNTcsIDIxMywgCisgICAgMjI1LCA1NywgMjEzLCAyMjQsIDU3LCAyMTMsIDIyMywgNTcsIDIxMywgMjIyLCA1NywgMjEzLCAyMjEsIDU3LCAyMTMsIAorICAgIDIyMCwgNTcsIDIxMywgMjE5LCA1NywgMjEzLCAyMTgsIDU3LCAyMTMsIDIxNywgNTcsIDIxMywgMjE2LCA1NywgMjEzLCAKKyAgICAyMTQsIDU3LCAyMTMsIDIxMywgNTcsIDIxMywgMjEyLCA1NywgMjEzLCAyMTEsIDU3LCAyMTMsIDIxMCwgNTcsIDIxMywgCisgICAgMjA5LCA1NywgMjEzLCAyMDgsIDU3LCAyMTMsIDIwNywgNTcsIDIxMywgMjA2LCA1NywgMjEzLCAyMDUsIDU3LCAyMTMsIAorICAgIDIwMywgNTcsIDIxMywgMjAyLCA1NywgMjEzLCAyMDEsIDU3LCAyMTMsIDIwMCwgNTcsIDIxMywgMTk5LCA1NywgMjEzLCAKKyAgICAxOTgsIDU3LCAyMTMsIDE5NywgNTcsIDIxMywgMTk2LCA1NywgMjEzLCAxOTUsIDU3LCAyMTMsIDE5NCwgNTcsIDIxMywgCisgICAgMTkyLCA1NywgMjEzLCAxOTEsIDU3LCAyMTMsIDE5MCwgNTcsIDIxMywgMTg5LCA1NywgMjEzLCAxODgsIDU3LCAyMTMsIAorICAgIDE4NywgNTcsIDIxMywgMTg2LCA1NywgMjEzLCAxODUsIDU3LCAyMTMsIDE4NCwgNTcsIDIxMywgMTgzLCA1NywgMjEzLCAKKyAgICAxODEsIDU3LCAyMTMsIDE4MCwgNTcsIDIxMywgMTc5LCA1NywgMjEzLCAxNzgsIDU3LCAyMTMsIDE3NywgNTcsIDIxMywgCisgICAgMTc2LCA1NywgMjEzLCAxNzUsIDU3LCAyMTMsIDE3NCwgNTcsIDIxMywgMTczLCA1NywgMjEzLCAxNzIsIDU3LCAyMTMsIAorICAgIDE3MCwgNTcsIDIxMywgMTY5LCA1NywgMjEzLCAxNjgsIDU3LCAyMTMsIDE2NywgNTcsIDIxMywgMTY2LCA1NywgMjEzLCAKKyAgICAxNjUsIDU3LCAyMTMsIDE2NCwgNTcsIDIxMywgMTYzLCA1NywgMjEzLCAxNjIsIDU3LCAyMTMsIDE2MSwgNTcsIDIxMywgCisgICAgMTU5LCA1NywgMjEzLCAxNTgsIDU3LCAyMTMsIDE1NywgNTcsIDIxMywgMTU2LCA1NywgMjEzLCAxNTUsIDU3LCAyMTMsIAorICAgIDE1NCwgNTcsIDIxMywgMTUzLCA1NywgMjEzLCAxNTIsIDU3LCAyMTMsIDE1MSwgNTcsIDIxMywgMTUwLCA1NywgMjE0LCAKKyAgICAxNDcsIDU3LCAyMTQsIDE0NiwgNTcsIDIxNCwgMTQ1LCA1NywgMjE0LCAxNDQsIDU3LCAyMTQsIDE0MywgNTcsIDIxNCwgCisgICAgMTQyLCA1NywgMjE0LCAxNDEsIDU3LCAyMTQsIDE0MCwgNTcsIDIxNCwgMTM5LCA1NywgMjE0LCAxMzgsIDU3LCAyMTQsIAorICAgIDEzNiwgNTcsIDIxNCwgMTM1LCA1NywgMjE0LCAxMzQsIDU3LCAyMTQsIDEzMywgNTcsIDIxNCwgMTMyLCA1NywgMjE0LCAKKyAgICAxMzEsIDU3LCAyMTQsIDEzMCwgNTcsIDIxNCwgMTI5LCA1NywgMjE0LCAxMjgsIDU3LCAyMTQsIDEyNywgNTcsIDIxNCwgCisgICAgMTI1LCA1NywgMjE0LCAxMjQsIDU3LCAyMTQsIDEyMywgNTcsIDIxNCwgMTIyLCA1NywgMjE0LCAxMjEsIDU3LCAyMTQsIAorICAgIDEyMCwgNTcsIDIxNCwgMTE5LCA1NywgMjE0LCAxMTgsIDU3LCAyMTQsIDExNywgNTcsIDIxNCwgMTE2LCA1NywgMjE0LCAKKyAgICAxMTQsIDU3LCAyMTQsIDExMywgNTcsIDIxNCwgMTEyLCA1NywgMjE0LCAxMTEsIDU3LCAyMTQsIDExMCwgNTcsIDIxNCwgCisgICAgMTA5LCA1NywgMjE0LCAxMDgsIDU3LCAyMTQsIDEwNywgNTcsIDIxNCwgMTA2LCA1NywgMjE0LCAxMDUsIDU3LCAyMTQsIAorICAgIDEwMywgNTcsIDIxNCwgMTAyLCA1NywgMjE0LCAxMDEsIDU3LCAyMTQsIDEwMCwgNTcsIDIxNCwgOTksIDU3LCAyMTQsIDk4LCAKKyAgICA1NywgMjE0LCA5NywgNTcsIDIxNCwgOTYsIDU3LCAyMTQsIDk1LCA1NywgMjE0LCA5NCwgNTcsIDIxNCwgOTIsIDU3LCAyMTQsIAorICAgIDkxLCA1NywgMjE0LCA5MCwgNTcsIDIxNCwgODksIDU3LCAyMTQsIDg4LCA1NywgMjE0LCA4NywgNTcsIDIxNCwgODYsIDU3LCAKKyAgICAyMTQsIDg1LCA1NywgMjE0LCA4NCwgNTcsIDIxNCwgODMsIDU3LCAyMTQsIDgxLCA1NywgMjE0LCA4MCwgNTcsIDIxNCwgNzksIAorICAgIDU3LCAyMTQsIDc4LCA1NywgMjE0LCA3NywgNTcsIDIxNCwgNzYsIDU3LCAyMTQsIDc1LCA1NywgMjE0LCA3NCwgNTcsIDIxNCwgCisgICAgNzMsIDU3LCAyMTQsIDcyLCA1NywgMjE0LCA3MCwgNTcsIDIxNCwgNjksIDU3LCAyMTQsIDY4LCA1NywgMjE0LCA2NywgNTcsIAorICAgIDIxNCwgNjYsIDU3LCAyMTQsIDY1LCA1NywgMjE0LCA2NCwgNTcsIDIxNCwgNjMsIDU3LCAyMTQsIDYyLCA1NywgMjE0LCA2MSwgCisgICAgNTcsIDIxNCwgNTksIDU3LCAyMTQsIDU4LCA1NywgMjE0LCA1NywgNTcsIDIxNCwgNTYsIDU3LCAyMTQsIDU1LCA1NywgMjE0LCAKKyAgICA1NCwgNTcsIDIxNCwgNTMsIDU3LCAyMTQsIDUyLCA1NywgMjE0LCA1MSwgNTcsIDIxNCwgNTAsIDU3LCAyMTQsIDQ4LCA1NywgCisgICAgMjE0LCA0NywgNTcsIDIxNCwgNDYsIDU3LCAyMTQsIDQ1LCA1NywgMjE0LCA0NCwgNTcsIDIxNCwgNDMsIDU3LCAyMTQsIDQyLCAKKyAgICA1NywgMjE0LCA0MSwgNTcsIDIxNCwgNDAsIDU3LCAyMTQsIDM5LCA1NywgMjE0LCAzNiwgNTcsIDIxNCwgMzUsIDU3LCAyMTQsIAorICAgIDM0LCA1NywgMjE0LCAzMywgNTcsIDIxNCwgMzIsIDU3LCAyMTQsIDMxLCA1NywgMjE0LCAzMCwgNTcsIDIxNCwgMjksIDU3LCAKKyAgICAyMTQsIDI4LCA1NywgMjE0LCAyNywgNTcsIDIxNCwgMjUsIDU3LCAyMTQsIDI0LCA1NywgMjE0LCAyMywgNTcsIDIxNCwgMjIsIAorICAgIDU3LCAyMTQsIDIxLCA1NywgMjE0LCAyMCwgNTcsIDIxNCwgMTksIDU3LCAyMTQsIDE4LCA1NywgMjE0LCAxNywgNTcsIDIxNCwgCisgICAgMTYsIDU3LCAyMTQsIDE0LCA1NywgMjE0LCAxMywgNTcsIDIxNCwgMTIsIDU3LCAyMTQsIDExLCA1NywgMjE0LCAxMCwgNTcsIAorICAgIDIxNCwgOSwgNTcsIDIxNCwgOCwgNTcsIDIxNCwgNywgNTcsIDIxNCwgNiwgNTcsIDIxNCwgNSwgNTcsIDIxNCwgMywgNTcsIAorICAgIDIxNCwgMiwgNTcsIDIxNCwgMSwgNTcsIDIxNCwgMCwgNTcsIDIxMywgMjU1LCA1NywgMjEzLCAyNTQsIDU3LCAyMTMsIDI1MywgCisgICAgNTcsIDIxMywgMjUyLCA1NywgMjEzLCAyNTEsIDU3LCAyMTMsIDI1MCwgNTcsIDIxMywgMjQ4LCA1NywgMjEzLCAyNDcsIDU3LCAKKyAgICAyMTMsIDI0NiwgNTcsIDIxMywgMjQ1LCA1NywgMjEzLCAyNDQsIDU3LCAyMTMsIDI0MywgNTcsIDIxMywgMjQyLCA1NywgCisgICAgMjEzLCAyNDEsIDU3LCAyMTMsIDI0MCwgNTcsIDIxMywgMjM5LCA1NywgMjEzLCAyMzcsIDU3LCAyMTMsIDIzNiwgNTcsIAorICAgIDIxMywgMjM1LCA1NywgMjEzLCAyMzQsIDU3LCAyMTMsIDIzMywgNTcsIDIxMywgMjMyLCA1NywgMjEzLCAyMzEsIDIyMSwgCisgICAgNDgsIDIyMSwgNTAsIDIxMSwgOTAsIDc2LCAyMzcsIDYxLCAyMTIsIDMsIDIxMSwgOTAsIDc2LCAyMDksIDExMiwgMjExLCAKKyAgICAxMiwgMjQxLCA4NCwgNzYsIDIwOSwgMTEyLCAyNDAsIDI0MCwgMjQxLCA4NCwgNzYsIDIwOCwgMTA1LCAyNDEsIDQ3LCAyNDEsIAorICAgIDcxLCAyNDEsIDcyLCAyNTEsIDEzMCwgMjUxLCAxMzEsIDI1MSwgMjcsIDI0OCwgMTMxLCAyNDksIDE5LCAyNDcsIDE5OSwgCisgICAgMTY3LCAyMTAsIDUsIDIzNiwgMTA2LCAyMTAsIDUsIDIzNiwgMzEsIDIxMCwgMTAsIDIyNywgMTE1LCAyNDAsIDUxLCAyMjIsIAorICAgIDIxNCwgMjI3LCAxMTQsIDI0MSwgODQsIDc2LCAyMjcsIDExNCwgMjI3LCAxNjMsIDIyMSwgMjUzLCAyNDEsIDUwLCAyMjcsIAorICAgIDExNSwgMjEwLCA1LCA4MCwgMjEwLCA1LCAyMDQsIDE2NSwgMjM5LCAxNTksIDI0MCwgNTEsIDI0MCwgMzAsIDI0NywgMjUsIAorICAgIDIxNiwgNzcsIDI0NSwgMTQ3LCAyMTMsIDcsIDIxOSwgMjExLCAyMjcsIDQxLCAxMDUsIDIxMiwgMTMsIDIxMywgNywgMjMxLCAKKyAgICA0OSwgMjI3LCA0MSwgMjAyLCA4NCwgMjEyLCAxNjIsIDI0NCwgMTM5LCAyMjcsIDEwNSwgMjQxLCA5LCAyNDMsIDEyMywgCisgICAgMjQ0LCA4LCAyNDUsIDE4NCwgMTA1LCAyNDQsIDEyOCwgMjQ0LCA4LCAyNDUsIDE4NCwgMTA4LCAyNDQsIDEyNywgMjQ0LCA4LCAKKyAgICAyNDUsIDE4NCwgMTQ3LCAyNDQsIDEyNiwgMjQ0LCA4LCAyNDUsIDE4NCwgMTQ5LCAyNDQsIDEyNSwgMTgyLCAyNTEsIDEzMCwgCisgICAgMjIzLCA4OSwgMjEwLCA5NSwgMjMxLCAxMTIsIDIxMCwgOTksIDI0MSwgODQsIDc2LCAyMDgsIDEwNiwgMjQ4LCAzMywgMjQwLCAKKyAgICAyNDcsIDI0NywgNTksIDI0NywgNjEsIDI0MSwgODQsIDc2LCAyMjUsIDksIDI0MSwgNDgsIDIxMCwgMjQyLCAyMTEsIDMsIAorICAgIDI0MSwgOSwgMjQxLCAxMCwgMjMxLCAyNSwgMjEzLCAxMzEsIDE0OSwgMjQwLCAxMSwgMjEzLCAxMzAsIDIzOSwgMTEyLCAKKyAgICAyMzEsIDI1LCAyMTMsIDEzMSwgMTQ3LCAyMzcsIDIzOCwgMjEzLCAxMzAsIDIzNywgMjM1LCAyMzEsIDI1LCAyMTMsIDEzMSwgCisgICAgMTA4LCAyMTYsIDE0OSwgMjEzLCAxMzAsIDIxNSwgMTUwLCAyMzEsIDI1LCAyMTMsIDEzMSwgMTA1LCAyMDYsIDIzNiwgMjEzLCAKKyAgICAxMzAsIDIwNiwgMTkzLCAyMTEsIDIzMSwgMjQ0LCA0NiwgMjQ0LCA0OCwgMjE5LCAxNTcsIDI0NiwgMTgyLCAyMTksIDE1OSwgCisgICAgMTM4LCAyMjAsIDgwLCAyMTcsIDI0MCwgMjM2LCAxMDksIDI0NywgMjE4LCAyMTgsIDIzNiwgMjM3LCAyNywgMjQ3LCAyMzAsIAorICAgIDIyMSwgMTkyLCAyNDcsIDIxOCwgMjM3LCAyNywgMjIzLCA1MywgMjMxLCAzNSwgMjMxLCAzNywgMjIyLCAyMDgsIDIyNywgCisgICAgMTE0LCAyMjIsIDIzMSwgMjExLCA5MCwgNzYsIDIxNCwgMTUyLCAyNTAsIDEyMCwgMjExLCAxNjQsIDI0MSwgODQsIDc2LCAKKyAgICAyMTQsIDE1MiwgMjUwLCAxMjAsIDI0MSwgMTIsIDE2NywgMjEwLCA2LCAyMTMsIDExNywgMjM2LCAxMDYsIDIxMCwgNiwgCisgICAgMjEzLCAxMTcsIDIzNiwgMjgsIDE2NywgMjEwLCA2LCAzLCAyMzAsIDY2LCAyMzYsIDEwNiwgMjEwLCA2LCAzLCAyMzAsIDY2LCAKKyAgICAyMzYsIDI5LCAyMjcsIDExNSwgMjEwLCA2LCAyMTMsIDExNywgODAsIDIxMCwgNiwgMjEzLCAxMTcsIDIwNCwgMTY0LCAyMTksIAorICAgIDY5LCAyMjcsIDExNSwgMjM5LCAxNTEsIDIxOSwgNjksIDIyNywgMTE1LCAyNDIsIDcwLCAyMTgsIDg3LCAyMTksIDY5LCAKKyAgICAyMjcsIDExNSwgMjQ5LCAxOCwgMjE5LCA2OSwgMjI3LCAxMTUsIDIwNiwgMjI0LCAyMTgsIDgyLCAyMTYsIDc0LCAyMjcsIAorICAgIDExNSwgMjQwLCA1MSwgMjE2LCA3NCwgMjMxLCAzNSwgMjE2LCA1NywgMjEyLCAxMjAsIDIxMywgNywgMTA4LCAyMTIsIDExNywgCisgICAgMjExLCAxNjYsIDIxMiwgMTIwLCAyMTMsIDcsIDE0NywgMjEyLCAxMTYsIDIxMSwgMTY1LCAyNDQsIDgsIDI0NSwgMTg0LCAKKyAgICAyMTEsIDM0LCAyNDQsIDEyMywgMjE3LCAyMjcsIDIwNiwgMTkyLCAxMDUsIDIxNywgMjI3LCAyMDYsIDE5MCwgMjE3LCAxOTAsIAorICAgIDIxNywgMjI3LCAyMDYsIDE5MiwgMTA4LCAyMTcsIDIyNywgMjA2LCAxODksIDIxNywgMTg5LCAyMTMsIDExOCwgMjA4LCAKKyAgICAxMDQsIDIxMSwgODksIDIxMSwgMTcsIDI0NywgNjAsIDI0NiwgMTgyLCAyNDcsIDEsIDIyNCwgMjI0LCAyMDQsIDEwMywgCisgICAgMjIzLCAxODEsIDIxMSwgOTAsIDc2LCAyMzcsIDIyMywgMjUwLCAxMjAsIDIxMSwgOTAsIDc2LCAyMTcsIDIwOCwgMjUwLCAKKyAgICAxMjAsIDIxMSwgMjMwLCAyNDEsIDg0LCA3NiwgMjM3LCAyMjMsIDI1MCwgMTIwLCAyNDEsIDg0LCA3NiwgMjE3LCAyMDgsIAorICAgIDI1MCwgMTIwLCAyNDEsIDQ1LCAyMTEsIDkwLCA3NiwgMjExLCAzNCwgMjExLCAyNDUsIDIxMiwgMTIwLCAyMzgsIDMsIDE2NywgCisgICAgMjMwLCAyNDEsIDIxMywgOTUsIDIxMiwgMTIwLCAxNjcsIDIzMCwgMjQxLCAyMTQsIDE5MSwgMjQ1LCAxODQsIDIxMywgMTI3LCAKKyAgICAyMzAsIDI0MSwgMjQ1LCAxMTEsIDIxMSwgMzUsIDIwOSwgMTM4LCAyMTEsIDEwOCwgMjIwLCAwLCAyMTAsIDg0LCAyNDUsIAorICAgIDIzMiwgMjE5LCAyMjYsIDIxNywgMjI4LCAyMjQsIDIyMywgMjE4LCA3MiwgMjUwLCAxNTYsIDIxNywgMjIyLCAyNDUsIDIzMiwgCisgICAgMjUwLCAxNzIsIDIyMywgNDEsIDIxMiwgMTcxLCA4LCA2LCAxLCAyMzgsIDExOSwgOCwgNSwgMSwgMjM4LCAxMTksIDI0NiwgCisgICAgMjAxLCAyNTEsIDgsIDIxMCwgODksIDIxMCwgMjQ4LCAyNDUsIDI0MywgMjEyLCA2OCwgMjI3LCAyMjIsIDIwMCwgMSwgMjI3LCAKKyAgICA2OCwgMjI4LCAxMiwgMSwgMjM5LCAxODcsIDIzOSwgMTc4LCAyMjgsIDEyLCAxLCAyMzksIDE4NywgMjQwLCA2MywgMjI4LCAKKyAgICAxMiwgMSwgMjE1LCAyMjcsIDIyOCwgMTIsIDEsIDIyNywgNDksIDc3LCAxMzEsIDI0OCwgNDUsIDIxMiwgMjM4LCAyMzgsIAorICAgIDgyLCAyMjQsIDE3MywgMjE2LCA2NCwgMjM5LCA4OSwgMjM5LCA4OCwgMjM5LCA4NywgMjIzLCAxODMsIDIwMSwgMjQzLCAKKyAgICAyMDEsIDI0NCwgMjAxLCAyNDYsIDIyNiwgMjQzLCAyMTUsIDIzNSwgMjI2LCAyNDUsIDIxNSwgMjM3LCAyMTksIDM3LCAyMjYsIAorICAgIDI0MiwgMjE1LCAyMzQsIDIyMSwgMjIzLCAyMjQsIDg2LCAyMDQsIDIsIDIyNiwgMjQ0LCAyMTUsIDIzNiwgMjM5LCAxMTEsIAorICAgIDIxOSwgMzYsIDIwNCwgNTIsIDI0MSwgMTA3LCAyMzksIDk5LCAyMjQsIDE1NCwgMjIwLCAzMiwgMjA2LCAxOTQsIDk3LCAKKyAgICAyMjQsIDE1NCwgMjQ0LCAxNDUsIDk3LCA5NiwgMjA4LCA4NCwgNTMsIDMsIDUyLCA4MCwgOTUsIDg2LCAyMDgsIDg0LCA1MywgCisgICAgMywgNTIsIDgwLCA5NSwgMTEsIDQsIDIzMCwgMTk5LCA4MiwgMjE3LCAyNDEsIDIzOSwgMTU5LCAzNSwgODAsIDUwLCA2MSwgCisgICAgMjI3LCAxODUsIDE1NSwgMjA1LCAxNjUsIDIwNSwgNTQsIDIwNCwgMjQyLCAyMDQsIDIzMSwgMjA0LCAyMjAsIDIwNCwgMjA5LCAKKyAgICAyMDQsIDE5OCwgMjA0LCAxODcsIDIwNCwgMTc2LCAyMDUsIDE2NCwgMjA1LCAxNTMsIDIwNSwgMTQyLCAyMDUsIDEzMSwgCisgICAgMjA1LCAxMjAsIDIwNSwgMTA5LCAyMDUsIDk4LCAyNDcsIDEzMCwgMjE5LCAyNDEsIDgyLCAyNDgsIDEzLCAyMDEsIDI0NSwgCisgICAgOSwgMiwgMjIxLCA1NywgMjA5LCAxNDEsIDksIDIsIDIyMSwgNTcsIDExNSwgMjIxLCA1NywgMjQ3LCAxNjEsIDExNSwgMjQ3LCAKKyAgICAxNjAsIDYwLCAzMSwgMTYsIDIzOSwgMTEwLCAyMTIsIDY0LCAyNDYsIDEwMiwgMjA2LCA2NSwgMjA1LCA4NywgMjA1LCA3NiwgCisgICAgMjA1LCA2NSwgMjA1LCA1MywgMjA1LCA0MiwgMjA1LCAzMSwgMjA1LCAyMCwgMjA1LCA5LCAyMDQsIDI1NCwgMjA0LCAyNDYsIAorICAgIDIwNCwgMjQ1LCAyMDQsIDI0NCwgMjA0LCAyNDMsIDIwNCwgMjQxLCAyMDQsIDI0MCwgMjA0LCAyMzksIDIwNCwgMjM4LCAKKyAgICAyMDQsIDIzNywgMjA0LCAyMzYsIDIwNCwgMjM1LCAyMDQsIDIzNCwgMjA0LCAyMzMsIDIwNCwgMjMyLCAyMDQsIDIzMCwgCisgICAgMjA0LCAyMjksIDIwNCwgMjI4LCAyMDQsIDIyNywgMjA0LCAyMjYsIDIwNCwgMjI1LCAyMDQsIDIyNCwgMjA0LCAyMjMsIAorICAgIDIwNCwgMjIyLCAyMDQsIDIyMSwgMjA0LCAyMTksIDIwNCwgMjE4LCAyMDQsIDIxNywgMjA0LCAyMTYsIDIwNCwgMjE1LCAKKyAgICAyMDQsIDIxNCwgMjA0LCAyMTMsIDIwNCwgMjEyLCAyMDQsIDIxMSwgMjA0LCAyMTAsIDIwNCwgMjA4LCAyMDQsIDIwNywgCisgICAgMjA0LCAyMDYsIDIwNCwgMjA1LCAyMDQsIDIwNCwgMjA0LCAyMDMsIDIwNCwgMjAyLCAyMDQsIDIwMSwgMjA0LCAyMDAsIAorICAgIDIwNCwgMTk5LCAyMDQsIDE5NywgMjA0LCAxOTYsIDIwNCwgMTk1LCAyMDQsIDE5NCwgMjA0LCAxOTMsIDIwNCwgMTkyLCAKKyAgICAyMDQsIDE5MSwgMjA0LCAxOTAsIDIwNCwgMTg5LCAyMDQsIDE4OCwgMjA0LCAxODYsIDIwNCwgMTg1LCAyMDQsIDE4NCwgCisgICAgMjA0LCAxODMsIDIwNCwgMTgyLCAyMDQsIDE4MSwgMjA0LCAxODAsIDIwNCwgMTc5LCAyMDQsIDE3OCwgMjA0LCAxNzcsIAorICAgIDIwNCwgMTc1LCAyMDQsIDE3NCwgMjA0LCAxNzMsIDIwNCwgMTcyLCAyMDQsIDE3MSwgMjA0LCAxNzAsIDIwNCwgMTY5LCAKKyAgICAyMDQsIDE2OCwgMjA0LCAxNjcsIDIwNCwgMTY2LCAyMDUsIDE2MywgMjA1LCAxNjIsIDIwNSwgMTYxLCAyMDUsIDE2MCwgCisgICAgMjA1LCAxNTksIDIwNSwgMTU4LCAyMDUsIDE1NywgMjA1LCAxNTYsIDIwNSwgMTU1LCAyMDUsIDE1NCwgMjA1LCAxNTIsIAorICAgIDIwNSwgMTUxLCAyMDUsIDE1MCwgMjA1LCAxNDksIDIwNSwgMTQ4LCAyMDUsIDE0NywgMjA1LCAxNDYsIDIwNSwgMTQ1LCAKKyAgICAyMDUsIDE0NCwgMjA1LCAxNDMsIDIwNSwgMTQxLCAyMDUsIDE0MCwgMjA1LCAxMzksIDIwNSwgMTM4LCAyMDUsIDEzNywgCisgICAgMjA1LCAxMzYsIDIwNSwgMTM1LCAyMDUsIDEzNCwgMjA1LCAxMzMsIDIwNSwgMTMyLCAyMDUsIDEzMCwgMjA1LCAxMjksIAorICAgIDIwNSwgMTI4LCAyMDUsIDEyNywgMjA1LCAxMjYsIDIwNSwgMTI1LCAyMDUsIDEyNCwgMjA1LCAxMjMsIDIwNSwgMTIyLCAKKyAgICAyMDUsIDEyMSwgMjA1LCAxMTksIDIwNSwgMTE4LCAyMDUsIDExNywgMjA1LCAxMTYsIDIwNSwgMTE1LCAyMDUsIDExNCwgCisgICAgMjA1LCAxMTMsIDIwNSwgMTEyLCAyMDUsIDExMSwgMjA1LCAxMTAsIDIwNSwgMTA4LCAyMDUsIDEwNywgMjA1LCAxMDYsIAorICAgIDIwNSwgMTA1LCAyMDUsIDEwNCwgMjA1LCAxMDMsIDIwNSwgMTAyLCAyMDUsIDEwMSwgMjA1LCAxMDAsIDIwNSwgOTksIDIwNSwgCisgICAgOTcsIDIwNSwgOTYsIDIwNSwgOTUsIDIwNSwgOTQsIDIwNSwgOTMsIDIwNSwgOTIsIDIwNSwgOTEsIDIwNSwgOTAsIDIwNSwgCisgICAgODksIDIwNSwgODgsIDIwNSwgODYsIDIwNSwgODUsIDIwNSwgODQsIDIwNSwgODMsIDIwNSwgODIsIDIwNSwgODEsIDIwNSwgCisgICAgODAsIDIwNSwgNzksIDIwNSwgNzgsIDIwNSwgNzcsIDIwNSwgNzUsIDIwNSwgNzQsIDIwNSwgNzMsIDIwNSwgNzIsIDIwNSwgCisgICAgNzEsIDIwNSwgNzAsIDIwNSwgNjksIDIwNSwgNjgsIDIwNSwgNjcsIDIwNSwgNjYsIDIwNSwgNjQsIDIwNSwgNjMsIDIwNSwgCisgICAgNjIsIDIwNSwgNjEsIDIwNSwgNjAsIDIwNSwgNTksIDIwNSwgNTgsIDIwNSwgNTcsIDIwNSwgNTYsIDIwNSwgNTUsIDIwNSwgCisgICAgNTIsIDIwNSwgNTEsIDIwNSwgNTAsIDIwNSwgNDksIDIwNSwgNDgsIDIwNSwgNDcsIDIwNSwgNDYsIDIwNSwgNDUsIDIwNSwgCisgICAgNDQsIDIwNSwgNDMsIDIwNSwgNDEsIDIwNSwgNDAsIDIwNSwgMzksIDIwNSwgMzgsIDIwNSwgMzcsIDIwNSwgMzYsIDIwNSwgCisgICAgMzUsIDIwNSwgMzQsIDIwNSwgMzMsIDIwNSwgMzIsIDIwNSwgMzAsIDIwNSwgMjksIDIwNSwgMjgsIDIwNSwgMjcsIDIwNSwgCisgICAgMjYsIDIwNSwgMjUsIDIwNSwgMjQsIDIwNSwgMjMsIDIwNSwgMjIsIDIwNSwgMjEsIDIwNSwgMTksIDIwNSwgMTgsIDIwNSwgCisgICAgMTcsIDIwNSwgMTYsIDIwNSwgMTUsIDIwNSwgMTQsIDIwNSwgMTMsIDIwNSwgMTIsIDIwNSwgMTEsIDIwNSwgMTAsIDIwNSwgCisgICAgOCwgMjA1LCA3LCAyMDUsIDYsIDIwNSwgNSwgMjA1LCA0LCAyMDUsIDMsIDIwNSwgMiwgMjA1LCAxLCAyMDUsIDAsIDIwNCwgCisgICAgMjU1LCAyMDQsIDI1MywgMjA0LCAyNTIsIDIwNCwgMjUxLCAyMDQsIDI1MCwgMjA0LCAyNDksIDIwNCwgMjQ4LCAyMDQsIAorICAgIDI0NywgOCwgNiwgMSwgMzQsIDMsIDIyNSwgMTcxLCAyNSwgMjM3LCAyNTMsIDgsIDUsIDEsIDM0LCAzLCAyMjUsIDE3MSwgCisgICAgMjUsIDIzNywgMjUzLCA4LCA2LCAxLCAxODgsIDMsIDgwLCAyMjcsIDExNSwgNTYsIDgsIDUsIDEsIDE4OCwgMywgODAsIAorICAgIDIyNywgMTE1LCA1NiwgOCwgNiwgMSwgMTg4LCAzLCA4MCwgMjI3LCAxMTUsIDI0OCwgMTI2LCAyNSwgMjM3LCAyNTMsIDgsIAorICAgIDUsIDEsIDE4OCwgMywgODAsIDIyNywgMTE1LCAyNDgsIDEyNiwgMjUsIDIzNywgMjUzLCA4LCA2LCAxLCAxODgsIDMsIDgwLCAKKyAgICAyMjcsIDExNSwgMjQ4LCAxMjYsIDI1LCAxNjUsIDgsIDUsIDEsIDE4OCwgMywgODAsIDIyNywgMTE1LCAyNDgsIDEyNiwgMjUsIAorICAgIDE2NSwgOCwgNiwgMSwgMTg4LCAzLCAyNDYsIDUzLCAyNSwgMjI1LCAxNzAsIDgsIDUsIDEsIDE4OCwgMywgMjQ2LCA1MywgCisgICAgMjUsIDIyNSwgMTcwLCA4LCA2LCAxLCAxODgsIDMsIDI0NiwgNTMsIDI1LCAyNDcsIDI5LCA4LCA1LCAxLCAxODgsIDMsIAorICAgIDI0NiwgNTMsIDI1LCAyNDcsIDI5LCA4LCA2LCAxLCAyMzUsIDIwNiwgMywgMjI1LCAxNzEsIDI1LCAyMzcsIDI1MywgOCwgNSwgCisgICAgMSwgMjM1LCAyMDYsIDMsIDIyNSwgMTcxLCAyNSwgMjM3LCAyNTMsIDgsIDUsIDEsIDIzNSwgMjA2LCAzLCA3MCwgODcsIDI1LCAKKyAgICAxNjUsIDgsIDUsIDEsIDIyMiwgMjA2LCAzLCAyMDgsIDIyOCwgNTUsIDgsIDYsIDEsIDE1OCwgMywgODAsIDIyNywgMTE1LCAKKyAgICA1NiwgOCwgNSwgMSwgMTU4LCAzLCA4MCwgMjI3LCAxMTUsIDU2LCA4LCA2LCAxLCAxNTgsIDMsIDgwLCAyMjcsIDExNSwgCisgICAgMjQ4LCAxMjYsIDI1LCAyMzcsIDI1MywgOCwgNSwgMSwgMTU4LCAzLCA4MCwgMjI3LCAxMTUsIDI0OCwgMTI2LCAyNSwgMjM3LCAKKyAgICAyNTMsIDgsIDYsIDEsIDE1OCwgMywgODAsIDIyNywgMTE1LCAyNDgsIDEyNiwgMjUsIDE2NSwgOCwgNSwgMSwgMTU4LCAzLCAKKyAgICA4MCwgMjI3LCAxMTUsIDI0OCwgMTI2LCAyNSwgMTY1LCA4LCA2LCAxLCAyMTUsIDk0LCAzLCA4MCwgMjI3LCAxMTUsIDU2LCAKKyAgICA4LCA1LCAxLCAyMTUsIDk0LCAzLCA4MCwgMjI3LCAxMTUsIDU2LCA4LCA2LCAxLCAxMDYsIDMsIDIyNSwgMTcxLCAyNSwgCisgICAgMjM3LCAyNTMsIDgsIDUsIDEsIDEwNiwgMywgMjI1LCAxNzEsIDI1LCAyMzcsIDI1MywgOCwgNiwgMSwgMzQsIDMsIDIyMCwgCisgICAgNjMsIDI1LCAxNjUsIDgsIDUsIDEsIDM0LCAzLCAyMjAsIDYzLCAyNSwgMTY1LCA4LCA2LCAxLCAzNCwgMywgMjIwLCA2MywgCisgICAgMjUsIDIwOCwgMjI3LCA4LCA1LCAxLCAzNCwgMywgMjIwLCA2MywgMjUsIDIwOCwgMjI3LCA4LCA2LCAxLCAxODgsIDMsIAorICAgIDIyMCwgNjMsIDI1LCAxNjUsIDgsIDUsIDEsIDE4OCwgMywgMjIwLCA2MywgMjUsIDE2NSwgOCwgNiwgMSwgMTg4LCAzLCAKKyAgICAyMjAsIDYzLCAyNSwgMjA4LCAyMjcsIDgsIDUsIDEsIDE4OCwgMywgMjIwLCA2MywgMjUsIDIwOCwgMjI3LCA4LCA2LCAxLCAKKyAgICAxODgsIDMsIDcwLCA4NywgMjUsIDE2NSwgOCwgNSwgMSwgMTg4LCAzLCA3MCwgODcsIDI1LCAxNjUsIDgsIDYsIDEsIDE4OCwgCisgICAgMywgNzAsIDg3LCAyNSwgMjA4LCAyMjcsIDgsIDUsIDEsIDE4OCwgMywgNzAsIDg3LCAyNSwgMjA4LCAyMjcsIDgsIDUsIDEsIAorICAgIDIzNSwgMjA2LCAzLCA3MCwgODcsIDI1LCAyMzcsIDI1MywgOCwgNSwgMSwgMjM1LCAyMDYsIDMsIDcwLCA4NywgMjUsIDIwOCwgCisgICAgMjI3LCA4LCA2LCAxLCAyMzUsIDIwNiwgMywgMjIwLCA2MywgMjUsIDE2NSwgOCwgNSwgMSwgMjM1LCAyMDYsIDMsIDIyMCwgCisgICAgNjMsIDI1LCA3MCwgODcsIDI1LCAxNjUsIDgsIDYsIDEsIDIzNSwgMjA2LCAzLCAyMjAsIDYzLCAyNSwgMjA4LCAyMjcsIDgsIAorICAgIDUsIDEsIDIzNSwgMjA2LCAzLCAyMjAsIDYzLCAyNSwgNzAsIDg3LCAyNSwgMjA4LCAyMjcsIDgsIDYsIDEsIDIzMCwgMTg1LCAKKyAgICAzLCAyMDgsIDIyNywgOCwgNSwgMSwgMjMwLCAxODUsIDMsIDcwLCA4NywgMjUsIDIwOCwgMjI3LCA4LCA2LCAxLCAyMjgsIAorICAgIDEzMSwgMywgMjA4LCAyMjcsIDgsIDUsIDEsIDIyOCwgMTMxLCAzLCAyMDgsIDIyNywgOCwgNiwgMSwgMjI2LCAxODYsIDMsIAorICAgIDIwOCwgMjI3LCA4LCA1LCAxLCAyMjYsIDE4NiwgMywgMjA4LCAyMjcsIDgsIDYsIDEsIDIxNywgMSwgMywgMjA4LCAyMjcsIAorICAgIDgsIDUsIDEsIDIxNywgMSwgMywgMjA4LCAyMjcsIDgsIDYsIDEsIDEwNiwgMywgMjIwLCA2MywgMjUsIDE2NSwgOCwgNSwgMSwgCisgICAgMTA2LCAzLCAyMjAsIDYzLCAyNSwgMTY1LCA4LCA2LCAxLCAxMDYsIDMsIDIyMCwgNjMsIDI1LCAyMDgsIDIyNywgOCwgNSwgCisgICAgMSwgMTA2LCAzLCAyMjAsIDYzLCAyNSwgMjA4LCAyMjcsIDgsIDYsIDEsIDEwNiwgMywgMjI1LCAxNzEsIDI1LCAxNjUsIDgsIAorICAgIDUsIDEsIDEwNiwgMywgMjI1LCAxNzEsIDI1LCAxNjUsIDgsIDYsIDEsIDEwNiwgMywgMjI1LCAxNzEsIDI1LCAyMDgsIDIyNywgCisgICAgOCwgNSwgMSwgMTA2LCAzLCAyMjUsIDE3MSwgMjUsIDIwOCwgMjI3LCA4LCA1LCAxLCAyNTEsIDExMCwgMywgMjM3LCAyNTMsIAorICAgIDgsIDUsIDEsIDE3MSwgMTU4LCAzLCAyMzcsIDI1MywgOCwgNSwgMSwgMTcxLCAxNTgsIDMsIDE2NSwgOCwgNSwgMSwgMjA3LCAKKyAgICAxNzQsIDIwNiwgMTY1LCAzLCAyMzcsIDI1MywgOCwgNSwgMSwgMjA3LCAxNzQsIDIwNiwgMTY1LCAzLCAxNjUsIDgsIDUsIDEsIAorICAgIDIxNCwgMTkzLCAzLCAyMzcsIDI1MywgOCwgNSwgMSwgMjE0LCAxOTMsIDMsIDE2NSwgOCwgNSwgMSwgMjM2LCAxMTUsIDIxNCwgCisgICAgMTkzLCAzLCAyMzcsIDI1MywgOCwgNSwgMSwgMjM2LCAxMTUsIDIxNCwgMTkzLCAzLCAxNjUsIDEwLCAyMTMsIDEyNywgODksIAorICAgIDMsIDIzNywgMTI4LCA4NywgMywgMjUxLCAzMCwgMTAsIDIxMywgMTI3LCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAyMDQsIAorICAgIDcwLCAxMCwgMjEzLCAxMjcsIDg5LCAzLCAyMzcsIDEyOCwgODcsIDMsIDEzNywgMjI1LCAxMjksIDEwLCAyMTMsIDEyNywgCisgICAgODksIDMsIDIzNywgMTI4LCA4NywgMywgMjIwLCA3MywgMTAsIDIxMywgMTI3LCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAKKyAgICA2OCwgMTAsIDIxMywgMTI3LCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAyMDIsIDIxMywgMTAsIDIxMywgMTI3LCA4OSwgMywgCisgICAgMjM3LCAxMjgsIDg3LCAzLCA3NCwgMTAsIDIxMywgMTI3LCA4OSwgMywgMjM3LCAxMjgsIDg3LCAzLCAyNTEsIDEwOSwgMTAsIAorICAgIDIxMywgMTI3LCAyMjEsIDE3OSwgMywgMjI5LCAxODksIDE3OSwgMSwgMjI5LCAxMTksIDQ0LCAxMDksIDIzMCwgNTQsIDQ0LCAKKyAgICAxMDksIDIyMiwgMjA1LCA0NCwgMTA5LCAyNDcsIDEyNSwgNDQsIDEwOSwgMjIxLCAxMywgNDQsIDEwOSwgMjA3LCAyNDQsIAorICAgIDQ0LCAxMDksIDIyMSwgMjI4LCA0NCwgMTA5LCAyMTAsIDY5LCA0NCwgMTA5LCAyMjMsIDE2MywgNDQsIDEwOSwgMjE5LCAKKyAgICAxODQsIDQ0LCAxMDksIDIyNiwgMTg1LCA0NCwgMTA5LCAyMDMsIDEyNCwgNDQsIDEwOSwgMTQ2LCA0NCwgMTA5LCAxNTksIAorICAgIDQ0LCAxMDksIDIwNiwgMTY0LCA0NCwgMTA5LCAyMjcsIDY5LCA0NCwgMTA5LCAyMjcsIDc4LCA0NCwgMTA5LCAyMTUsIDE4NiwgCisgICAgNDQsIDEwOSwgMjIxLCAyMTAsIDQ0LCAxMDksIDIzMCwgMTg0LCA0NCwgMTA5LCAyMTMsIDkyLCA0NCwgMTA5LCAyMTEsIAorICAgIDE2NywgNDQsIDEwOSwgMTk0LCA0NCwgMTA5LCAyMzcsIDE3MSwgNDQsIDEwOSwgMjI4LCAyMjQsIDQ0LCA0LCAyMzAsIDQxLCAKKyAgICA0NCwgNCwgMjI5LCAxMDAsIDQ0LCA0LCAyMjksIDg3LCA0NCwgNCwgMjI4LCAyMDksIDQ0LCA0LCAyMjgsIDE3NCwgNDQsIDQsIAorICAgIDIyOSwgMjAxLCA0NCwgNCwgMjI5LCAxOTgsIDQ0LCA0LCAyMzAsIDE4LCA0NCwgNCwgMjI5LCAyNiwgNDQsIDQsIDIyOSwgNiwgCisgICAgNDQsIDQsIDIyOSwgMjE5LCA0NCwgNCwgMjIyLCAyMDIsIDQ0LCA0LCAyMjIsIDE1MSwgNDQsIDQsIDIyMiwgMTQ3LCA0NCwgCisgICAgNCwgMjIyLCAxMTYsIDQ0LCA0LCAyMjIsIDEwOCwgNDQsIDQsIDIyMiwgMTkwLCA0NCwgNCwgMjIyLCAxODgsIDQ0LCA0LCAKKyAgICAyMjIsIDE5OSwgNDQsIDQsIDIyMiwgMTI4LCA0NCwgNCwgMjIyLCAxMjMsIDQ0LCA0LCAyMjIsIDE5MiwgNDQsIDQsIDI0NywgCisgICAgOTEsIDQ0LCA0LCAyNDYsIDc5LCA0NCwgNCwgMjQ2LCA2OSwgNDQsIDQsIDI0NSwgMTEwLCA0NCwgNCwgMjQ1LCA3NiwgNDQsIAorICAgIDQsIDI0NiwgMjM4LCA0NCwgNCwgMjQ2LCAyMzAsIDQ0LCA0LCAyNDcsIDgwLCA0NCwgNCwgMjQ1LCAyNTQsIDQ0LCA0LCAKKyAgICAyNDUsIDE4MCwgNDQsIDQsIDI0NywgMTUsIDQ0LCA0LCAyMjEsIDEwLCA0NCwgNCwgMjIwLCAyNDgsIDQ0LCA0LCAyMjAsIAorICAgIDI0MywgNDQsIDQsIDIyMCwgMjI2LCA0NCwgNCwgMjIwLCAyMTgsIDQ0LCA0LCAyMjEsIDEsIDQ0LCA0LCAyMjEsIDAsIDQ0LCAKKyAgICA0LCAyMjEsIDcsIDQ0LCA0LCAyMjAsIDIzMywgNDQsIDQsIDIyMCwgMjMwLCA0NCwgNCwgMjIxLCA0LCA0NCwgNCwgMjA3LCAKKyAgICAyNDAsIDQ0LCA0LCAyMDcsIDIyMCwgNDQsIDQsIDIwNywgMjE5LCA0NCwgNCwgMjA3LCAyMDgsIDQ0LCA0LCAyMDcsIDIwNSwgCisgICAgNDQsIDQsIDIwNywgMjM2LCA0NCwgNCwgMjA3LCAyMzUsIDQ0LCA0LCAyMDcsIDIzOSwgNDQsIDQsIDIwNywgMjE4LCA0NCwgCisgICAgNCwgMjA3LCAyMTcsIDQ0LCA0LCAyMDcsIDIzOCwgNDQsIDQsIDIyMSwgMjI2LCA0NCwgNCwgMjIxLCAyMTIsIDQ0LCA0LCAKKyAgICAyMjEsIDIxMSwgNDQsIDQsIDIyMSwgMTk1LCA0NCwgNCwgMjIxLCAxOTQsIDQ0LCA0LCAyMjEsIDIyMiwgNDQsIDQsIDIyMSwgCisgICAgMjIxLCA0NCwgNCwgMjIxLCAyMjUsIDQ0LCA0LCAyMjEsIDE5NywgNDQsIDQsIDIyMSwgMTk2LCA0NCwgNCwgMjIxLCAyMjQsIAorICAgIDQ0LCA0LCAyMTAsIDE4LCA0NCwgNCwgMjA5LCAyLCA0NCwgNCwgMjA4LCAyNDIsIDQ0LCA0LCAyMDcsIDIwMywgNDQsIDQsIAorICAgIDIwNywgMTY1LCA0NCwgNCwgMjA5LCAxODcsIDQ0LCA0LCAyMDksIDE3NiwgNDQsIDQsIDIwOSwgMjUwLCA0NCwgNCwgMTM1LCAKKyAgICA0NCwgNCwgMjA4LCAxNDgsIDQ0LCA0LCAyMDksIDIwNywgNDQsIDQsIDIyMywgMTA2LCA0NCwgNCwgMjIyLCAxMDAsIDQ0LCAKKyAgICA0LCAyMjIsIDc1LCA0NCwgNCwgMjIxLCA4NCwgNDQsIDQsIDIyMSwgMjUsIDQ0LCA0LCAyMjIsIDI0MCwgNDQsIDQsIDIyMiwgCisgICAgMjM1LCA0NCwgNCwgMjIzLCA5MiwgNDQsIDQsIDIyMSwgMTkxLCA0NCwgNCwgMjIxLCAxODAsIDQ0LCA0LCAyMjMsIDY1LCAKKyAgICA0NCwgNCwgMjE5LCAxNjgsIDQ0LCA0LCAyMTgsIDE2NywgNDQsIDQsIDIxOCwgMTI5LCA0NCwgNCwgMjE3LCAxOTEsIDQ0LCAKKyAgICA0LCAyMTcsIDE1NywgNDQsIDQsIDIxOSwgMzQsIDQ0LCA0LCAyMTksIDIzLCA0NCwgNCwgMjE5LCAxNDgsIDQ0LCA0LCAyMTgsIAorICAgIDY5LCA0NCwgNCwgMjE4LCA0NSwgNDQsIDQsIDIxOSwgNDgsIDQ0LCA0LCAyMjUsIDE3NSwgNDQsIDQsIDIyNCwgMTU1LCA0NCwgCisgICAgNCwgMjI0LCAxMjUsIDQ0LCA0LCAyMjMsIDI0NiwgNDQsIDQsIDIyMywgMTkyLCA0NCwgNCwgMjI1LCAyMCwgNDQsIDQsIAorICAgIDIyNSwgOCwgNDQsIDQsIDIyNSwgMTQwLCA0NCwgNCwgMjI0LCA4MiwgNDQsIDQsIDIyNCwgMzUsIDQ0LCA0LCAyMjUsIDY3LCAKKyAgICA0NCwgNCwgMjAzLCAxMTAsIDQ0LCA0LCAyMDMsIDExLCA0NCwgNCwgMjAzLCAyLCA0NCwgNCwgMjAyLCAyMTMsIDQ0LCA0LCAKKyAgICAyMDIsIDE4MSwgNDQsIDQsIDIwMywgNTIsIDQ0LCA0LCAyMDMsIDQ5LCA0NCwgNCwgMjAzLCA4OSwgNDQsIDQsIDIwMiwgCisgICAgMjQ3LCA0NCwgNCwgMjAyLCAyMzIsIDQ0LCA0LCAyMDMsIDYyLCA0NCwgNCwgMjE2LCAyMTYsIDQ0LCA0LCAyMTYsIDU3LCAKKyAgICA0NCwgNCwgMjE2LCAzLCA0NCwgNCwgMjE1LCAxNDUsIDQ0LCA0LCAyMTUsIDExNCwgNDQsIDQsIDIxNiwgMTU4LCA0NCwgNCwgCisgICAgMjE2LCAxMzUsIDQ0LCA0LCAyMTYsIDE5NywgNDQsIDQsIDIxNSwgMjI3LCA0NCwgNCwgMjE1LCAyMDgsIDQ0LCA0LCAyMTYsIAorICAgIDE2NywgNDQsIDQsIDIyOCwgMTEyLCA0NCwgNCwgMjI3LCAxNDgsIDQ0LCA0LCAyMjcsIDEzMCwgNDQsIDQsIDIyNiwgMjM5LCAKKyAgICA0NCwgNCwgMjI2LCAyMTAsIDQ0LCA0LCAyMjcsIDIzNCwgNDQsIDQsIDIyNywgMjI2LCA0NCwgNCwgMjI4LCA4NiwgNDQsIDQsIAorICAgIDIyNywgNDksIDQ0LCA0LCAyMjcsIDE4LCA0NCwgNCwgMjI3LCAyNTEsIDQ0LCA0LCAyMDYsIDg1LCA0NCwgNCwgMjA1LCAKKyAgICAyMzAsIDQ0LCA0LCAyMDUsIDIxNSwgNDQsIDQsIDIwNCwgMTYzLCA0NCwgNCwgMjA0LCAxNTYsIDQ0LCA0LCAyMDYsIDU1LCAKKyAgICA0NCwgNCwgMjA2LCA1MCwgNDQsIDQsIDIwNiwgODEsIDQ0LCA0LCAyMDUsIDE4OSwgNDQsIDQsIDIwNSwgMTc2LCA0NCwgNCwgCisgICAgMjA2LCA2MSwgNDQsIDQsIDIyNywgNjcsIDQ0LCA0LCAyMjcsIDYyLCA0NCwgNCwgMjI3LCA2MSwgNDQsIDQsIDIyNywgNTgsIAorICAgIDQ0LCA0LCAyMjcsIDU3LCA0NCwgNCwgMjI3LCA2NCwgNDQsIDQsIDIyNywgNjMsIDQ0LCA0LCAyMjcsIDY2LCA0NCwgNCwgCisgICAgMjI3LCA2MCwgNDQsIDQsIDIyNywgNTksIDQ0LCA0LCAyMjcsIDY1LCA0NCwgNCwgMjI3LCA3NiwgNDQsIDQsIDIyNywgNzEsIAorICAgIDQ0LCA0LCAyMjcsIDcwLCA0NCwgNCwgMjI3LCA1NCwgNDQsIDQsIDIyNywgNTMsIDQ0LCA0LCAyMjcsIDczLCA0NCwgNCwgCisgICAgMjI3LCA3MiwgNDQsIDQsIDIyNywgNzUsIDQ0LCA0LCAyMjcsIDU2LCA0NCwgNCwgMjI3LCA1NSwgNDQsIDQsIDIyNywgNzQsIAorICAgIDQ0LCA0LCAyMTUsIDE4NCwgNDQsIDQsIDIxNSwgMTczLCA0NCwgNCwgMjE1LCAxNzIsIDQ0LCA0LCAyMTUsIDE2NSwgNDQsIAorICAgIDQsIDIxNSwgMTU4LCA0NCwgNCwgMjE1LCAxODAsIDQ0LCA0LCAyMTUsIDE3OSwgNDQsIDQsIDIxNSwgMTgzLCA0NCwgNCwgCisgICAgMjE1LCAxNzEsIDQ0LCA0LCAyMTUsIDE3MCwgNDQsIDQsIDIxNSwgMTgyLCA0NCwgNCwgMjIxLCAyMDgsIDQ0LCA0LCAyMjEsIAorICAgIDIwMywgNDQsIDQsIDIyMSwgMjAyLCA0NCwgNCwgMjIxLCAxOTksIDQ0LCA0LCAyMjEsIDE5OCwgNDQsIDQsIDIyMSwgMjA1LCAKKyAgICA0NCwgNCwgMjIxLCAyMDQsIDQ0LCA0LCAyMjEsIDIwNywgNDQsIDQsIDIyMSwgMjAxLCA0NCwgNCwgMjIxLCAyMDAsIDQ0LCAKKyAgICA0LCAyMjEsIDIwNiwgNDQsIDQsIDIzMCwgMTgwLCA0NCwgNCwgMjMwLCAxNDEsIDQ0LCA0LCAyMzAsIDEzNCwgNDQsIDQsIAorICAgIDIzMCwgODIsIDQ0LCA0LCAyMzAsIDY0LCA0NCwgNCwgMjMwLCAxNjEsIDQ0LCA0LCAyMzAsIDE1OSwgNDQsIDQsIDIzMCwgCisgICAgMTc0LCA0NCwgNCwgMjMwLCAxMDEsIDQ0LCA0LCAyMzAsIDkxLCA0NCwgNCwgMjMwLCAxNjcsIDQ0LCA0LCAyMTMsIDg1LCAKKyAgICA0NCwgNCwgMjEzLCAxMSwgNDQsIDQsIDIxMywgNiwgNDQsIDQsIDIxMiwgMTk5LCA0NCwgNCwgMjEyLCAxODIsIDQ0LCA0LCAKKyAgICAyMTMsIDQzLCA0NCwgNCwgMjEzLCA0MSwgNDQsIDQsIDIxMywgNzQsIDQ0LCA0LCAyMTIsIDI0MiwgNDQsIDQsIDIxMiwgCisgICAgMjM2LCA0NCwgNCwgMjEzLCA1MiwgNDQsIDQsIDIxMSwgMTYzLCA0NCwgNCwgMjExLCAxMzIsIDQ0LCA0LCAyMTEsIDEyOCwgCisgICAgNDQsIDQsIDIxMSwgMTE5LCA0NCwgNCwgMjExLCAxMTYsIDQ0LCA0LCAyMTEsIDEzOCwgNDQsIDQsIDIxMSwgMTM3LCA0NCwgCisgICAgNCwgMjExLCAxNjIsIDQ0LCA0LCAyMTEsIDEyNCwgNDQsIDQsIDIxMSwgMTIzLCA0NCwgNCwgMjExLCAxNDAsIDQ0LCA0LCAKKyAgICAyMTUsIDMzLCA0NCwgNCwgMjEyLCAxNjIsIDQ0LCA0LCAyMTIsIDE0MiwgNDQsIDQsIDIxMSwgMTAsIDQ0LCA0LCAyMTAsIAorICAgIDE3OSwgNDQsIDQsIDIxNCwgMTc3LCA0NCwgNCwgMjE0LCAxNjUsIDQ0LCA0LCAyMTUsIDE4LCA0NCwgNCwgMjEyLCAxMywgCisgICAgNDQsIDQsIDIxMSwgMjUwLCA0NCwgNCwgMjE0LCAyMTcsIDQ0LCA0LCAyMzcsIDE1NywgNDQsIDQsIDIzNywgMywgNDQsIDQsIAorICAgIDIzNiwgMjM5LCA0NCwgNCwgMjM2LCAyNiwgNDQsIDQsIDIzNiwgMSwgNDQsIDQsIDIzNywgNjcsIDQ0LCA0LCAyMzcsIDQ4LCAKKyAgICA0NCwgNCwgMjM3LCAxNDcsIDQ0LCA0LCAyMzYsIDEzNiwgNDQsIDQsIDIzNiwgMTE3LCA0NCwgNCwgMjM3LCA3NiwgNDQsIDQsIAorICAgIDIyOCwgMjIzLCA0NCwgNCwgMjI4LCAyMjIsIDQ0LCA0LCAyMjgsIDIxNywgNDQsIDQsIDIyOCwgMjE2LCA0NCwgNCwgMjI4LCAKKyAgICAyMTMsIDQ0LCA0LCAyMjgsIDIxMiwgNDQsIDQsIDIyOCwgMjE5LCA0NCwgNCwgMjI4LCAyMTgsIDQ0LCA0LCAyMjgsIDIyMSwgCisgICAgNDQsIDQsIDIyOCwgMjE1LCA0NCwgNCwgMjI4LCAyMTQsIDQ0LCA0LCAyMjgsIDIyMCwgNDQsIDQsIDIxMiwgMjA1LCAxNDAsIAorICAgIDEwOSwgMiwgMjAzLCA3NSwgMTQwLCAxMDksIDIsIDIxNiwgMTg2LCAxNDAsIDEwOSwgMiwgMjE2LCAxMDIsIDExNCwgMSwgCisgICAgMjA3LCA5NSwgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDE3MywgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDIyOSwgMTQ0LCA4NSwgCisgICAgMTA5LCAyLCAyNDUsIDI0OSwgMjI5LCAyNiwgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDIyOSwgMTE1LCA4NSwgMTA5LCAyLCAKKyAgICAyNDUsIDI0OSwgMjIyLCAxMjgsIDg1LCAxMDksIDIsIDI0NSwgMjQ5LCAyNDcsIDkyLCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgCisgICAgMjQ2LCAxOTksIDg1LCAxMDksIDIsIDI0NSwgMjQ5LCAyNDUsIDI1NCwgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDI0NiwgMTE2LCAKKyAgICA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjIwLCAyMzMsIDg1LCAxMDksIDIsIDI0NSwgMjQ5LCAyNDQsIDIxMiwgODUsIDEwOSwgCisgICAgMiwgMjQ1LCAyNDksIDIwNywgMjI5LCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjQzLCAxMTMsIDg1LCAxMDksIDIsIDI0NSwgCisgICAgMjQ5LCAyMDcsIDIyNCwgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDIwMSwgMjAxLCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjEwLCAKKyAgICAyMiwgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDIwOSwgMTA4LCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMTM1LCA4NSwgMTA5LCAKKyAgICAyLCAyNDUsIDI0OSwgMjA5LCA0NywgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDIyMSwgMTkxLCA4NSwgMTA5LCAyLCAyNDUsIAorICAgIDI0OSwgMjQ5LCAzMiwgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDIxOCwgMjA4LCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjE4LCAKKyAgICA2OSwgODUsIDEwOSwgMiwgMjQ1LCAyNDksIDIxOCwgMTgwLCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjI0LCA4MiwgODUsIAorICAgIDEwOSwgMiwgMjQ1LCAyNDksIDIwMiwgMjQ3LCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjE1LCAyMjcsIDg1LCAxMDksIDIsIAorICAgIDI0NSwgMjQ5LCAyMjcsIDQ5LCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjA1LCAxODksIDg1LCAxMDksIDIsIDI0NSwgMjQ5LCAKKyAgICAyMTMsIDkwLCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjExLCAxNjQsIDg1LCAxMDksIDIsIDI0NSwgMjQ5LCAyMTUsIDM2LCAKKyAgICA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMTUyLCA4NSwgMTA5LCAyLCAyNDUsIDI0OSwgMjI4LCAxMTMsIDg1LCAyMiwgMiwgCisgICAgMjQ1LCAyNDksIDIxNywgMTI2LCA4NSwgMjMxLCAzNiwgMjIsIDIsIDI0NSwgMjQ5LCAyMTcsIDY1LCA4NSwgMjMxLCAzNiwgCisgICAgMjIsIDIsIDI0NSwgMjQ5LCAyMTUsIDEwMiwgODUsIDIzMSwgMzYsIDIyLCAyLCAyNDUsIDI0OSwgMjE1LCA5NSwgODUsIAorICAgIDIzMSwgMzYsIDIyLCAyLCAyNDUsIDI0OSwgMjE3LCAxMDYsIDg1LCAyMiwgMiwgMjIwLCAzOSwgODUsIDIyLCAyLCAyNTEsIAorICAgIDI0MiwgMTcyLCAxLCAyNDgsIDc5LCAyMjIsIDIwMywgMTcyLCAxLCAyNDgsIDc5LCAyMjIsIDE1MSwgMTcyLCAxLCAyNDgsIAorICAgIDc5LCAyMjIsIDExNiwgMTcyLCAxLCAyNDgsIDc5LCAyMjIsIDE5MCwgMTcyLCAxLCAyNDgsIDc5LCAyMjIsIDEyOCwgNjcsIAorICAgIDEsIDI0OCwgNzksIDIyMiwgMjAzLCA2NywgMSwgMjQ4LCA3OSwgMjIyLCAxNTEsIDY3LCAxLCAyNDgsIDc5LCAyMjIsIDExNiwgCisgICAgNjcsIDEsIDI0OCwgNzksIDIyMiwgMTkwLCA2NywgMSwgMjQ4LCA3OSwgMjIyLCAxMjgsIDY3LCAxLCAyNTEsIDU3LCAyNDYsIAorICAgIDIzOCwgNjcsIDEsIDI1MSwgNTcsIDIwNywgMjAzLCA2NywgMSwgMjUxLCA1NywgMTM1LCA2NywgMSwgMjUxLCA1NywgMjE5LCAKKyAgICAxODQsIDY1LCAxLCAyNDAsIDE5OCwgMjQwLCAxOTcsIDI0NSwgMTg4LCAxNDMsIDE0MiwgNjUsIDEsIDI0MCwgMTk3LCAyNDAsIAorICAgIDE5OCwgMjQ1LCAxODgsIDE0MywgMTQyLCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBocmFzZWJvb2tfb2Zmc2V0MVtdID0gewogICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgCiAgICAgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgCi0gICAgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgCi0gICAgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgCi0gICAgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgCi0gICAgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgCi0gICAgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgCi0gICAgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgCi0gICAgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgMTA0LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAKLSAgICAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgCi0gICAgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDEyOSwgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgMTMwLCAxMzEsIAotICAgIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAKLSAgICAxNDYsIDE0NywgODcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAxNTMsIDg3LCAKLSAgICAxNTQsIDE1NSwgMTU2LCA4NywgMTU3LCA4NywgMTU4LCA4NywgODcsIDg3LCAxNTksIDg3LCA4NywgODcsIDE2MCwgMTYxLCAKLSAgICAxNjIsIDE2MywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgMTY0LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAxNjUsIDE2NiwgMTY3LCAxNjgsIAotICAgIDE2OSwgMTcwLCAxNzEsIDg3LCAxNzIsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgMTczLCAxNzQsIDE3NSwgMTc2LCAxNzcsIDE3OCwgCi0gICAgMTc5LCAxODAsIDE4MSwgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDE4MiwgCi0gICAgMTgzLCAxODQsIDE4NSwgMTg2LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAxODcsIDE4OCwgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICAxODksIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgCi0gICAgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgCi0gICAgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgCi0gICAgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDE5MCwgMTkxLCAxOTIsIDE5MywgMTk0LCA4NywgMTk1LCAKLSAgICA4NywgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgMjA0LCAyMDUsIDg3LCA4NywgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDg3LCAyMTEsIDIxMiwgMjEzLCAyMTQsIAotICAgIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAyMjAsIDIyMSwgCi0gICAgMjIyLCAyMjMsIDIyNCwgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCAKLSAgICA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgMjI1LCA4NywgMjI2LCAyMjcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIDg3LCA4NywgODcsIAotICAgIDg3LCA4NywgODcsIDg3LCAKKyAgICAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUzLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTQsIDU1LCA1NiwgNTcsIDU4LCAKKyAgICA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDY2LCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCAKKyAgICA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDUyLCA4NywgNTIsIDg4LCAKKyAgICA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDUyLCA5NywgNTIsIDUyLCA1MiwgNTIsIDUyLCA5OCwgOTksIDEwMCwgCisgICAgMTAxLCAxMDIsIDEwMywgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDEwNCwgMTA1LCAxMDYsIAorICAgIDEwNywgMTA4LCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICAxMDksIDExMCwgMTExLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCAxMTIsIDExMywgMTE0LCAxMTUsIDUyLCA1MiwgNTIsIDExNiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDExNywgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAxMTgsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAxMTksIDEyMCwgCisgICAgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDEzMCwgNTIsIDUyLCA1MiwgNTIsIDUyLCAxMzEsIDUyLCAxMzIsIDEzMywgMTM0LCAKKyAgICAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgMTQyLCAxNDMsIDE0NCwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDE0NSwgMTQ2LCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDE0NywgMTQ4LCAxNDksIAorICAgIDE1MCwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUyLCAKKyAgICA1MiwgNTIsIDUyLCA1MiwgNTIsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBwaHJhc2Vib29rX29mZnNldDJbXSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAzLCA2LCA5LCAxMSwgMTQsIDE3LCAxOSwgMjEsIDI0LCAyNywgMjksIDMxLCAKLSAgICAzMywgMzUsIDM5LCA0MSwgNDQsIDQ2LCA0OCwgNTAsIDUyLCA1NCwgNTYsIDU4LCA2MCwgNjIsIDY0LCA2NiwgNjksIDcyLCAKLSAgICA3NSwgNzgsIDgyLCA4NiwgOTEsIDk2LCAxMDEsIDEwNSwgMTEwLCAxMTUsIDEyMCwgMTI0LCAxMjksIDEzNCwgMTM4LCAxNDIsIAotICAgIDE0NywgMTUxLCAxNTYsIDE2MSwgMTY1LCAxNzAsIDE3NSwgMTc5LCAxODQsIDE4OSwgMTk0LCAxOTksIDIwNCwgMjA3LCAKLSAgICAyMTEsIDIxNCwgMjE4LCAyMjEsIDIyNSwgMjI5LCAyMzQsIDIzOSwgMjQ0LCAyNDgsIDI1MywgMjU4LCAyNjMsIDI2NywgCi0gICAgMjcyLCAyNzcsIDI4MSwgMjg1LCAyOTAsIDI5NCwgMjk5LCAzMDQsIDMwOCwgMzEzLCAzMTgsIDMyMiwgMzI3LCAzMzIsIAotICAgIDMzNywgMzQyLCAzNDcsIDM1MSwgMzU0LCAzNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1OSwgMzYzLCAzNjgsIAotICAgIDM3MSwgMzc0LCAzNzcsIDM4MCwgMzgzLCAzODYsIDM4OCwgMzkxLCAzOTcsIDQwNSwgNDA4LCA0MTIsIDQxNSwgNDE3LCAKLSAgICA0MjAsIDQyMywgNDI2LCA0MjksIDQzMywgNDM2LCA0MzksIDQ0MywgNDQ1LCA0NDgsIDQ1NCwgNDYyLCA0NjksIDQ3NiwgCi0gICAgNDgzLCA0ODgsIDQ5NSwgNTAxLCA1MDgsIDUxNCwgNTIxLCA1MjksIDUzNCwgNTQyLCA1NDksIDU1NSwgNTYyLCA1NjksIAotICAgIDU3NywgNTg0LCA1OTIsIDYwMCwgNjA1LCA2MTIsIDYxOSwgNjI1LCA2MzIsIDYzOCwgNjQ1LCA2NDgsIDY1NCwgNjYxLCAKLSAgICA2NjcsIDY3NCwgNjgxLCA2ODgsIDY5MywgNzAwLCA3MDcsIDcxMywgNzIwLCA3MjYsIDczMywgNzQxLCA3NDYsIDc1NCwgCi0gICAgNzYxLCA3NjcsIDc3NCwgNzgxLCA3ODksIDc5NiwgODA0LCA4MTIsIDgxNywgODI0LCA4MzEsIDgzNywgODQ0LCA4NTAsIAotICAgIDg1NywgODYwLCA4NjYsIDg3MywgODc5LCA4ODYsIDg5MywgOTAwLCA5MDUsIDkxMywgOTIwLCA5MjcsIDkzNCwgOTQxLCAKLSAgICA5NDgsIDk1NSwgOTYyLCA5NjksIDk3NywgOTg1LCA5OTMsIDEwMDEsIDEwMDksIDEwMTcsIDEwMjUsIDEwMzMsIDEwNDAsIAotICAgIDEwNDcsIDEwNTQsIDEwNjEsIDEwNjgsIDEwNzUsIDEwODIsIDEwODksIDEwOTYsIDExMDMsIDExMTAsIDExMTcsIDExMjUsIAotICAgIDExMzMsIDExNDEsIDExNDksIDExNTcsIDExNjUsIDExNzMsIDExODEsIDExODksIDExOTcsIDEyMDQsIDEyMTEsIDEyMTgsIAotICAgIDEyMjUsIDEyMzMsIDEyNDEsIDEyNDksIDEyNTcsIDEyNjUsIDEyNzMsIDEyODEsIDEyODcsIDEyOTIsIDEyOTcsIDEzMDUsIAotICAgIDEzMTMsIDEzMjEsIDEzMjksIDEzMzQsIDEzNDEsIDEzNDgsIDEzNTYsIDEzNjQsIDEzNzIsIDEzODAsIDEzOTAsIDE0MDAsIAotICAgIDE0MDcsIDE0MTQsIDE0MjEsIDE0MjgsIDE0MzYsIDE0NDQsIDE0NTIsIDE0NjAsIDE0NzEsIDE0NzYsIDE0ODEsIDE0ODgsIAotICAgIDE0OTUsIDE1MDIsIDE1MDksIDE1MTYsIDE1MjMsIDE1MjgsIDE1MzMsIDE1NDAsIDE1NDcsIDE1NTUsIDE1NjMsIDE1NzEsIAotICAgIDE1NzksIDE1ODYsIDE1OTMsIDE2MDEsIDE2MDksIDE2MTcsIDE2MjUsIDE2MzMsIDE2NDEsIDE2NDksIDE2NTcsIDE2NjUsIAotICAgIDE2NzMsIDE2ODAsIDE2ODcsIDE2OTMsIDE2OTksIDE3MDYsIDE3MTMsIDE3MjAsIDE3MjcsIDE3MzUsIDE3NDMsIDE3NTAsIAotICAgIDE3NTcsIDE3NjQsIDE3NzEsIDE3NzksIDE3ODcsIDE3OTUsIDE4MDMsIDE4MTEsIDE4MTgsIDE4MjUsIDE4MzMsIDE4NDEsIAotICAgIDE4NDksIDE4NTcsIDE4NjMsIDE4NjksIDE4NzUsIDE4ODIsIDE4ODksIDE4OTQsIDE4OTksIDE5MDQsIDE5MTEsIDE5MTgsIAotICAgIDE5MjUsIDE5MzIsIDE5NDAsIDE5NDgsIDE5NTUsIDE5NjEsIDE5NjYsIDE5NzEsIDE5NzgsIDE5ODUsIDE5OTIsIDE5OTcsIAotICAgIDIwMDIsIDIwMDcsIDIwMTQsIDIwMjEsIDIwMjgsIDIwMzUsIDIwNDIsIDIwNDgsIDIwNTYsIDIwNjYsIDIwNzQsIDIwODEsIAotICAgIDIwODgsIDIwOTMsIDIwOTgsIDIxMDUsIDIxMTIsIDIxMTYsIDIxMjEsIDIxMjYsIDIxMzEsIDIxMzksIDIxNDgsIDIxNTUsIAotICAgIDIxNjIsIDIxNzEsIDIxNzgsIDIxODUsIDIxOTAsIDIxOTcsIDIyMDQsIDIyMTEsIDIyMTgsIDIyMjUsIDIyMzAsIDIyMzcsIAotICAgIDIyNDQsIDIyNTIsIDIyNTcsIDIyNjIsIDIyNjcsIDIyNzcsIDIyODEsIDIyODcsIDIyOTMsIDIyOTksIDIzMDUsIDIzMTMsIAotICAgIDIzMjYsIDIzMzQsIDIzMzksIDIzNDksIDIzNTQsIDIzNTksIDIzNjksIDIzNzQsIDIzODEsIDIzODgsIDIzOTYsIDI0MDQsIAotICAgIDI0MTEsIDI0MTgsIDI0MjUsIDI0MzIsIDI0NDIsIDI0NTIsIDI0NjEsIDI0NzAsIDI0ODAsIDI0OTAsIDI1MDAsIDI1MTAsIAotICAgIDI1MTYsIDI1MjYsIDI1MzYsIDI1NDYsIDI1NTYsIDI1NjQsIDI1NzIsIDI1NzksIDI1ODYsIDI1OTQsIDI2MDIsIDI2MTAsIAotICAgIDI2MTgsIDI2MjUsIDI2MzIsIDI2NDIsIDI2NTIsIDI2NjAsIDI2NjgsIDI2NzYsIDI2ODEsIDI2OTEsIDI2OTYsIDI3MDMsIAotICAgIDI3MTAsIDI3MTUsIDI3MjAsIDI3MjgsIDI3MzYsIDI3NDYsIDI3NTYsIDI3NjMsIDI3NzAsIDI3NzksIDI3ODgsIDI3OTYsIAotICAgIDI4MDQsIDI4MTMsIDI4MjIsIDI4MzAsIDI4MzgsIDI4NDcsIDI4NTYsIDI4NjUsIDI4NzQsIDI4ODQsIDI4OTQsIDI5MDIsIAotICAgIDI5MTAsIDI5MTksIDI5MjgsIDI5MzcsIDI5NDYsIDI5NTYsIDI5NjYsIDI5NzQsIDI5ODIsIDI5OTEsIDMwMDAsIDMwMDksIAotICAgIDMwMTgsIDMwMjcsIDMwMzYsIDMwNDEsIDMwNDYsIDMwNTQsIDMwNjIsIDMwNzIsIDMwODAsIDMwODUsIDMwOTAsIDMwOTcsIAotICAgIDMxMDQsIDMxMTEsIDMxMTgsIDMxMjUsIDMxMzIsIDMxNDIsIDMxNTIsIDMxNjIsIDMxNzIsIDMxNzksIDMxODYsIDMxOTYsIAotICAgIDMyMDYsIDMyMTQsIDMyMjIsIDMyMzAsIDMyMzgsIDMyNDYsIDMyNTMsIDMyNjAsIDMyNjcsIDMyNzMsIDMyODAsIDMyODcsIAotICAgIDMyOTQsIDMzMDMsIDMzMTMsIDMzMjMsIDMzMzAsIDMzMzcsIDMzNDMsIDMzNDgsIDMzNTUsIDMzNjEsIDMzNjcsIDMzNzQsIAotICAgIDMzODEsIDMzOTIsIDM0MDIsIDM0MDksIDM0MTYsIDM0MjMsIDM0MzAsIDM0MzYsIDM0NDEsIDM0NDgsIDM0NTQsIDM0NTksIAotICAgIDM0NjcsIDM0NzUsIDM0ODIsIDM0ODgsIDM0OTMsIDM1MDAsIDM1MDUsIDM1MTIsIDM1MjEsIDM1MzAsIDM1MzksIDM1NDYsIAotICAgIDM1NTIsIDM1NTgsIDM1NjMsIDM1NzAsIDM1NzcsIDM1ODQsIDM1OTEsIDM1OTgsIDM2MDMsIDM2MDgsIDM2MTcsIDM2MjUsIAotICAgIDM2MzQsIDM2MzksIDM2NDUsIDM2NTYsIDM2NjMsIDM2NzEsIDM2ODAsIDM2ODYsIDM2OTIsIDM2OTgsIDM3MDUsIDM3MTAsIAotICAgIDM3MTYsIDM3MjcsIDM3MzYsIDM3NDUsIDM3NTMsIDM3NjEsIDM3NzEsIDM3NzYsIDM3ODMsIDM3OTAsIDM3OTUsIDM4MDcsIAotICAgIDM4MTYsIDM4MjQsIDM4MzEsIDM4NDAsIDM4NDUsIDM4NTAsIDM4NTcsIDM4NjQsIDM4NzEsIDM4NzgsIDM4ODQsIDM4OTMsIAotICAgIDM5MDEsIDM5MDYsIDM5MTQsIDM5MjAsIDM5MjgsIDM5MzYsIDM5NDIsIDM5NDgsIDM5NTQsIDM5NjEsIDM5NjksIDM5NzUsIAotICAgIDM5ODMsIDM5OTAsIDM5OTUsIDQwMDIsIDQwMTAsIDQwMjAsIDQwMjcsIDQwMzQsIDQwNDQsIDQwNTEsIDQwNTgsIDQwNjgsIAotICAgIDQwNzUsIDQwODIsIDQwODksIDQwOTUsIDQxMDEsIDQxMTEsIDQxMjQsIDQxMjksIDQxMzYsIDQxNDEsIDQxNDUsIDQxNTEsIAotICAgIDQxNjAsIDQxNjcsIDQxNzIsIDQxNzcsIDQxODEsIDQxODYsIDQxOTIsIDQxOTYsIDQyMDIsIDQyMDgsIDQyMTQsIDQyMjAsIAotICAgIDQyMjgsIDQyMzMsIDQyMzgsIDQyNDMsIDQyNDgsIDQyNTQsIDQyNTYsIDQyNjEsIDQyNjUsIDQyNzEsIDQyNzcsIDQyODMsIAotICAgIDQyODgsIDQyOTUsIDQzMDIsIDQzMDgsIDQzMTUsIDQzMjMsIDQzMzEsIDQzMzYsIDQzNDEsIDQzNDUsIDQzNTAsIDQzNTIsIAotICAgIDQzNTQsIDQzNTcsIDQzNTksIDQzNjEsIDQzNjYsIDQzNzEsIDQzNzcsIDQzODIsIDQzODYsIDQzOTEsIDQzOTYsIDQ0MDUsIAotICAgIDQ0MTEsIDQ0MTYsIDQ0MjIsIDQ0MjcsIDQ0MzMsIDQ0NDEsIDQ0NDksIDQ0NTMsIDQ0NTcsIDQ0NjIsIDQ0NjgsIDQ0NzQsIAotICAgIDQ0ODAsIDQ0ODYsIDQ0OTEsIDQ0OTksIDQ1MDgsIDQ1MTcsIDQ1MjEsIDQ1MjcsIDQ1MzQsIDQ1NDEsIDQ1NDgsIDQ1NTUsIAotICAgIDQ1NTksIDQ1NjQsIDQ1NjksIDQ1NzQsIDQ1NzksIDQ1ODQsIDQ1ODYsIDQ1ODksIDQ1OTIsIDQ1OTUsIDQ1OTgsIDQ2MDEsIAotICAgIDQ2MDUsIDQ2MDksIDQ2MTUsIDQ2MTgsIDQ2MjMsIDQ2MjksIDQ2MzUsIDQ2MzgsIDQ2NDMsIDQ2NDksIDQ2NTMsIDQ2NTksIAotICAgIDQ2NjUsIDQ2NzEsIDQ2NzcsIDQ2ODIsIDQ2ODcsIDQ2OTIsIDQ2OTUsIDQ3MDEsIDQ3MDYsIDQ3MTEsIDQ3MTUsIDQ3MjAsIAotICAgIDQ3MjYsIDQ3MzIsIDQ3MzUsIDQ3MzksIDQ3NDMsIDQ3NDcsIDQ3NTAsIDQ3NTMsIDQ3NTgsIDQ3NjIsIDQ3NjksIDQ3NzMsIAotICAgIDQ3NzksIDQ3ODMsIDQ3ODksIDQ3OTMsIDQ3OTcsIDQ4MDEsIDQ4MDYsIDQ4MTEsIDQ4MTgsIDQ4MjQsIDQ4MzEsIDQ4MzcsIAotICAgIDQ4NDMsIDQ4NDksIDQ4NTIsIDQ4NTYsIDQ4NjAsIDQ4NjMsIDQ4NjcsIDQ4NzIsIDQ4NzcsIDQ4ODEsIDQ4ODUsIDQ4OTEsIAotICAgIDQ4OTUsIDQ4OTksIDQ5MDQsIDQ5MTAsIDQ5MTUsIDQ5MjEsIDQ5MjUsIDQ5MzIsIDQ5MzcsIDQ5NDIsIDQ5NDcsIDQ5NTIsIAotICAgIDQ5NTgsIDQ5NjEsIDQ5NjUsIDQ5NzAsIDQ5NzUsIDQ5ODQsIDQ5OTAsIDQ5OTUsIDQ5OTksIDUwMDQsIDUwMDgsIDUwMTMsIAotICAgIDUwMTcsIDUwMjEsIDUwMjYsIDUwMjksIDUwMzUsIDUwNDAsIDUwNDUsIDUwNTAsIDUwNTUsIDUwNjAsIDUwNjUsIDUwNzEsIAotICAgIDUwNzcsIDUwODMsIDUwODgsIDUwOTMsIDUwOTksIDUxMDUsIDUxMTEsIDUxMTYsIDUxMjEsIDUxMjgsIDUxMzUsIDUxMzksIAotICAgIDUxNDUsIDUxNTIsIDAsIDAsIDUxNTksIDUxNjIsIDUxNzEsIDUxODAsIDUxOTEsIDAsIDAsIDAsIDAsIDAsIDUxOTUsIAotICAgIDUxOTgsIDUyMDMsIDUyMTEsIDUyMTYsIDUyMjQsIDUyMzIsIDAsIDUyNDAsIDAsIDUyNDgsIDUyNTYsIDUyNjQsIDUyNzUsIAotICAgIDUyODAsIDUyODUsIDUyOTAsIDUyOTUsIDUzMDAsIDUzMDUsIDUzMTAsIDUzMTUsIDUzMjAsIDUzMjUsIDUzMzAsIDUzMzUsIAotICAgIDUzNDAsIDUzNDUsIDUzNTAsIDUzNTUsIDAsIDUzNjAsIDUzNjUsIDUzNzAsIDUzNzUsIDUzODAsIDUzODUsIDUzOTAsIAotICAgIDUzOTUsIDU0MDMsIDU0MTEsIDU0MTksIDU0MjcsIDU0MzUsIDU0NDMsIDU0NTQsIDU0NTksIDU0NjQsIDU0NjksIDU0NzQsIAotICAgIDU0NzksIDU0ODQsIDU0ODksIDU0OTQsIDU0OTksIDU1MDQsIDU1MDksIDU1MTQsIDU1MTksIDU1MjQsIDU1MjksIDU1MzQsIAotICAgIDU1MzksIDU1NDUsIDU1NTAsIDU1NTUsIDU1NjAsIDU1NjUsIDU1NzAsIDU1NzUsIDU1ODAsIDU1ODgsIDU1OTYsIDU2MDQsIAotICAgIDU2MTIsIDU2MjAsIDU2MjUsIDU2MjksIDU2MzMsIDU2NDAsIDU2NTAsIDU2NjAsIDU2NjQsIDU2NjgsIDU2NzIsIDU2NzgsIAotICAgIDU2ODUsIDU2ODksIDU2OTQsIDU2OTgsIDU3MDMsIDU3MDcsIDU3MTIsIDU3MTYsIDU3MjEsIDU3MjYsIDU3MzEsIDU3MzYsIAotICAgIDU3NDEsIDU3NDYsIDU3NTEsIDU3NTYsIDU3NjEsIDU3NjYsIDU3NzEsIDU3NzYsIDU3ODEsIDU3ODYsIDU3OTEsIDU3OTUsIAotICAgIDU3OTksIDU4MDUsIDU4MDksIDU4MTQsIDU4MjAsIDU4MjgsIDU4MzMsIDU4MzgsIDU4NDUsIDU4NTAsIDU4NTUsIDU4NjIsIAotICAgIDU4NzEsIDU4ODAsIDU4OTEsIDU4OTksIDU5MDQsIDU5MDksIDU5MTQsIDU5MjEsIDU5MjYsIDU5MzIsIDU5MzcsIDU5NDIsIAotICAgIDU5NDcsIDU5NTIsIDU5NTcsIDU5NjIsIDU5NzAsIDU5NzYsIDU5ODEsIDU5ODUsIDU5OTAsIDU5OTUsIDYwMDAsIDYwMDUsIAotICAgIDYwMTAsIDYwMTUsIDYwMjAsIDYwMjQsIDYwMzAsIDYwMzQsIDYwMzksIDYwNDQsIDYwNDksIDYwNTMsIDYwNTgsIDYwNjMsIAotICAgIDYwNjgsIDYwNzMsIDYwNzcsIDYwODIsIDYwODYsIDYwOTEsIDYwOTYsIDYxMDEsIDYxMDYsIDYxMTIsIDYxMTcsIDYxMjMsIAotICAgIDYxMjcsIDYxMzIsIDYxMzYsIDYxNDAsIDYxNDUsIDYxNTAsIDYxNTUsIDYxNjAsIDYxNjUsIDYxNzAsIDYxNzUsIDYxNzksIAotICAgIDYxODUsIDYxODksIDYxOTQsIDYxOTksIDYyMDQsIDYyMDgsIDYyMTMsIDYyMTgsIDYyMjMsIDYyMjgsIDYyMzIsIDYyMzcsIAotICAgIDYyNDEsIDYyNDYsIDYyNTEsIDYyNTYsIDYyNjEsIDYyNjcsIDYyNzIsIDYyNzgsIDYyODIsIDYyODcsIDYyOTEsIDYyOTksIAotICAgIDYzMDQsIDYzMDksIDYzMTQsIDYzMjEsIDYzMjYsIDYzMzIsIDYzMzcsIDYzNDIsIDYzNDcsIDYzNTIsIDYzNTcsIDYzNjIsIAotICAgIDYzNzAsIDYzNzYsIDYzODEsIDYzODYsIDYzOTEsIDYzOTYsIDY0MDEsIDY0MDcsIDY0MTMsIDY0MjAsIDY0MjcsIDY0MzYsIAotICAgIDY0NDUsIDY0NTIsIDY0NTksIDY0NjgsIDY0NzcsIDY0ODIsIDY0ODcsIDY0OTIsIDY0OTcsIDY1MDIsIDY1MDcsIDY1MTIsIAotICAgIDY1MTcsIDY1MjgsIDY1MzksIDY1NDQsIDY1NDksIDY1NTYsIDY1NjMsIDY1NzEsIDY1NzksIDY1ODQsIDY1ODksIDY1OTQsIAotICAgIDY1OTksIDY2MDMsIDY2MDcsIDY2MTEsIDY2MTcsIDY2MjMsIDY2MjcsIDY2MzQsIDY2MzksIDY2NDksIDY2NTksIDY2NjUsIAotICAgIDY2NzEsIDY2NzksIDY2ODcsIDY2OTUsIDY3MDMsIDY3MTAsIDY3MTcsIDY3MjYsIDY3MzUsIDY3NDMsIDY3NTEsIDY3NTksIAotICAgIDY3NjcsIDY3NzUsIDY3ODMsIDY3OTEsIDY3OTksIDY4MDYsIDY4MTMsIDY4MTksIDY4MjUsIDY4MzMsIDY4NDEsIDY4NDgsIAotICAgIDY4NTUsIDY4NjQsIDY4NzMsIDY4NzksIDY4ODUsIDY4OTMsIDY5MDEsIDY5MDksIDY5MTcsIDY5MjMsIDY5MjksIDY5MzcsIAotICAgIDY5NDUsIDY5NTMsIDY5NjEsIDY5NjgsIDY5NzUsIDY5ODMsIDY5OTEsIDY5OTksIDcwMDcsIDcwMTIsIDcwMTcsIDcwMjQsIAotICAgIDcwMzEsIDcwNDEsIDcwNTEsIDcwNTUsIDcwNjMsIDcwNzEsIDcwNzgsIDcwODUsIDcwOTMsIDcxMDEsIDcxMDgsIDcxMTUsIAotICAgIDcxMjMsIDcxMzEsIDcxMzgsIDcxNDUsIDcxNTMsIDcxNjEsIDcxNjYsIDcxNzMsIDcxODAsIDcxODcsIDcxOTQsIDcyMDAsIAotICAgIDcyMDYsIDcyMTQsIDcyMjIsIDcyMjcsIDcyMzIsIDcyNDAsIDcyNDgsIDcyNTYsIDcyNjQsIDcyNzIsIDcyODAsIDcyODcsIAotICAgIDcyOTQsIDczMDIsIDczMTAsIDczMTgsIDczMjYsIDczMzMsIDczNDAsIDczNDYsIDczNTIsIDczNjEsIDczNzAsIDczNzcsIAotICAgIDczODQsIDczOTEsIDczOTgsIDc0MDUsIDc0MTIsIDc0MTksIDc0MjYsIDc0MzQsIDc0NDIsIDc0NTAsIDc0NTgsIDc0NjYsIAotICAgIDc0NzQsIDc0ODQsIDc0OTQsIDc1MDEsIDc1MDgsIDc1MTUsIDc1MjIsIDc1MjksIDc1MzYsIDc1NDMsIDc1NTAsIDc1NTcsIAotICAgIDc1NjQsIDc1NzEsIDc1NzgsIDc1ODUsIDc1OTIsIDc1OTksIDc2MDYsIDc2MTMsIDc2MjAsIDc2MjcsIDc2MzQsIDc2NDEsIAotICAgIDc2NDgsIDc2NTUsIDc2NjIsIDc2NjcsIDc2NzIsIDc2NzcsIDc2ODIsIDc2ODcsIDc2OTIsIDc2OTcsIDc3MDIsIDc3MDcsIAotICAgIDc3MTIsIDc3MTgsIDc3MjQsIDc3MzMsIDc3NDIsIDc3NTEsIDc3NjAsIDc3NjgsIDc3NzYsIDc3ODQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDc3OTIsIDc3OTcsIDc4MDIsIDc4MDcsIDc4MTIsIDc4MTcsIDc4MjIsIDc4MjcsIDc4MzIsIAotICAgIDc4MzYsIDc4NDEsIDc4NDYsIDc4NTEsIDc4NTYsIDc4NjEsIDc4NjYsIDc4NzEsIDc4NzYsIDc4ODEsIDc4ODYsIDc4OTEsIAotICAgIDc4OTYsIDc5MDEsIDc5MDYsIDc5MTEsIDc5MTYsIDc5MjEsIDc5MjYsIDc5MzAsIDc5MzUsIDc5NDAsIDc5NDUsIDc5NTAsIAotICAgIDc5NTUsIDc5NjAsIDc5NjUsIDc5NzAsIDc5NzUsIDAsIDAsIDc5ODAsIDc5ODcsIDc5OTAsIDc5OTQsIDc5OTgsIDgwMDEsIAotICAgIDgwMDUsIDAsIDgwMDksIDgwMTQsIDgwMTksIDgwMjQsIDgwMjksIDgwMzQsIDgwMzksIDgwNDQsIDgwNDksIDgwNTMsIAotICAgIDgwNTgsIDgwNjMsIDgwNjgsIDgwNzMsIDgwNzgsIDgwODMsIDgwODgsIDgwOTMsIDgwOTgsIDgxMDMsIDgxMDgsIDgxMTMsIAotICAgIDgxMTgsIDgxMjMsIDgxMjgsIDgxMzMsIDgxMzgsIDgxNDMsIDgxNDcsIDgxNTIsIDgxNTcsIDgxNjIsIDgxNjcsIDgxNzIsIAotICAgIDgxNzcsIDgxODIsIDgxODcsIDgxOTIsIDgxOTcsIDAsIDgyMDQsIDgyMDksIDAsIDAsIDAsIDAsIDgyMTIsIDAsIDgyMTYsIAotICAgIDgyMjEsIDgyMjYsIDgyMzEsIDgyMzgsIDgyNDUsIDgyNTAsIDgyNTUsIDgyNjAsIDgyNjUsIDgyNzAsIDgyNzUsIDgyODAsIAotICAgIDgyODcsIDgyOTIsIDgyOTksIDgzMDYsIDgzMTEsIDgzMTgsIDgzMjMsIDgzMjgsIDgzMzMsIDgzNDAsIDgzNDUsIDgzNTAsIAotICAgIDgzNTcsIDgzNjYsIDgzNzEsIDgzNzYsIDgzODEsIDgzODYsIDgzOTIsIDgzOTcsIDg0MDQsIDg0MTEsIDg0MTgsIDg0MjMsIAotICAgIDg0MjgsIDg0MzMsIDg0MzgsIDg0NDMsIDg0NDgsIDg0NTgsIDg0NjMsIDg0NzEsIDg0NzYsIDg0ODEsIDg0ODYsIDg0OTEsIAotICAgIDg0OTgsIDg1MDUsIDg1MTIsIDg1MTgsIDg1MjQsIDg1MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg1MzgsIDg1NDIsIAotICAgIDg1NDYsIDg1NTAsIDg1NTQsIDg1NTgsIDg1NjIsIDg1NjYsIDg1NzAsIDg1NzQsIDg1NzgsIDg1ODMsIDg1ODcsIDg1OTEsIAotICAgIDg1OTYsIDg2MDAsIDg2MDUsIDg2MDksIDg2MTMsIDg2MTcsIDg2MjIsIDg2MjYsIDg2MzEsIDg2MzUsIDg2MzksIDg2NDMsIAotICAgIDg2NDcsIDAsIDAsIDAsIDAsIDAsIDg2NTEsIDg2NTgsIDg2NjYsIDg2NzMsIDg2NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDg2ODMsIDg2ODYsIDg2OTAsIDg2OTUsIDg2OTksIDAsIDg3MDMsIDg3MDksIDg3MTUsIDg3MTgsIAotICAgIDg3MjUsIDg3MzQsIDg3MzcsIDg3NDAsIDg3NDUsIDg3NTEsIDg3NTUsIDg3NjMsIDg3NjksIDg3NzUsIDg3ODMsIDg3ODcsIAotICAgIDg3OTIsIDg4MDMsIDg4MDgsIDg4MTIsIDg4MTYsIDg4MjAsIDg4MjMsIDAsIDg4MjYsIDg4MzMsIDg4MzcsIDg4NDMsIAotICAgIDg4NDcsIDg4NTQsIDg4NjAsIDg4NjcsIDg4NzMsIDg4NzksIDg4ODMsIDg4ODcsIDg4OTMsIDg4OTcsIDg5MDEsIDg5MDUsIAotICAgIDg5MDksIDg5MTMsIDg5MTcsIDg5MjEsIDg5MjUsIDg5MjksIDg5MzMsIDg5MzcsIDg5NDEsIDg5NDUsIDg5NDksIDg5NTMsIAotICAgIDg5NTcsIDg5NjEsIDg5NjksIDg5NzcsIDg5ODcsIDg5OTYsIDkwMDUsIDkwMDgsIDkwMTIsIDkwMTYsIDkwMjAsIDkwMjQsIAotICAgIDkwMjgsIDkwMzIsIDkwMzYsIDkwNDAsIDkwNDUsIDkwNDksIDkwNTIsIDkwNTUsIDkwNTgsIDkwNjEsIDkwNjQsIDkwNjcsIAotICAgIDkwNzAsIDkwNzMsIDkwNzcsIDkwODAsIDkwODMsIDkwODgsIDkwOTMsIDkwOTksIDkxMDIsIDkxMDksIDkxMTgsIDkxMjMsIAotICAgIDkxMjgsIDkxMzUsIDkxNDAsIDkxNDUsIDkxNDksIDkxNTMsIDkxNTcsIDkxNjEsIDkxNjUsIDkxNjksIDkxNzMsIDkxNzcsIAotICAgIDkxODEsIDkxODUsIDkxOTAsIDkxOTUsIDkyMDIsIDkyMDgsIDkyMTQsIDkyMjAsIDkyMjUsIDkyMzMsIDkyNDEsIDkyNDYsIAotICAgIDkyNTIsIDkyNTgsIDkyNjQsIDkyNzAsIDkyNzQsIDkyNzgsIDkyODIsIDkyODksIDkyOTksIDkzMDMsIDkzMDcsIDkzMTEsIAotICAgIDkzMTcsIDkzMjUsIDkzMjksIDkzMzMsIDkzNDAsIDkzNDQsIDkzNDgsIDkzNTIsIDkzNTksIDkzNjYsIDkzNzgsIDkzODIsIAotICAgIDkzODYsIDkzOTAsIDk0MDAsIDk0MDksIDk0MTMsIDk0MjEsIDk0MjgsIDk0MzUsIDk0NDQsIDk0NTUsIDk0NjMsIDk0NjcsIAotICAgIDk0NzYsIDk0ODcsIDk0OTUsIDk1MDgsIDk1MTYsIDk1MjQsIDk1MzIsIDk1NDAsIDk1NDYsIDk1NTUsIDk1NjIsIDk1NjYsIAotICAgIDk1NzQsIDk1NzgsIDk1ODUsIDk1OTMsIDk1OTcsIDk2MDMsIDk2MTAsIDk2MTcsIDk2MjEsIDk2MjksIDk2MzMsIDk2NDAsIAotICAgIDk2NDQsIDk2NTIsIDk2NTYsIDk2NjQsIDk2NzIsIDk2NzksIDk2ODcsIDk2OTUsIDk3MDIsIDk3MDgsIDk3MTIsIDk3MTksIAotICAgIDk3MjcsIDk3MzMsIDk3NDAsIDk3NDcsIDk3NTMsIDk3NjIsIDk3NzAsIDk3NzcsIDk3ODMsIDk3ODcsIDk3OTAsIDk3OTQsIAotICAgIDk4MDAsIDk4MDgsIDk4MTIsIDk4MTgsIDk4MjQsIDk4MzEsIDk4MzgsIDk4NDEsIDk4NDgsIDk4NTMsIDk4NjEsIDk4NjYsIAotICAgIDk4NzAsIDk4ODMsIDk4OTYsIDk5MDIsIDk5MDksIDk5MTQsIDk5MjAsIDk5MjUsIDk5MzEsIDk5NDEsIDk5NDgsIDk5NTcsIAotICAgIDk5NjcsIDk5NzMsIDk5NzgsIDk5ODMsIDk5ODcsIDk5OTEsIDk5OTYsIDEwMDAxLCAxMDAwNywgMTAwMTUsIDEwMDIzLCAKLSAgICAxMDAzNCwgMTAwMzksIDEwMDQ4LCAxMDA1NywgMTAwNjQsIDEwMDcwLCAxMDA3NiwgMTAwODIsIDEwMDg4LCAxMDA5NCwgCi0gICAgMTAxMDAsIDEwMTA2LCAxMDExMiwgMTAxMTgsIDEwMTI1LCAxMDEzMiwgMTAxMzksIDEwMTQ1LCAxMDE1MywgMTAxNjIsIAotICAgIDEwMTY4LCAxMDE3NSwgMTAxODIsIDEwMTg3LCAxMDE5MiwgMTAxOTYsIDEwMjAzLCAxMDIxMCwgMTAyMTksIDEwMjI4LCAKLSAgICAxMDIzMSwgMTAyMzYsIDEwMjQxLCAwLCAxMDI0NiwgMTAyNTAsIDEwMjU0LCAxMDI2MCwgMTAyNjQsIDEwMjY4LCAxMDI3NCwgCi0gICAgMTAyNzgsIDEwMjg2LCAxMDI5MCwgMTAyOTQsIDEwMjk4LCAxMDMwMiwgMTAzMDYsIDEwMzEyLCAxMDMxNiwgMTAzMjIsIAotICAgIDEwMzI2LCAxMDMzMCwgMTAzMzQsIDEwMzM4LCAxMDM0MiwgMTAzNDcsIDEwMzUwLCAxMDM1NCwgMTAzNjAsIDEwMzY0LCAKLSAgICAxMDM2OCwgMTAzNzIsIDEwMzc2LCAxMDM4MCwgMTAzODYsIDEwMzkyLCAxMDM5OCwgMTA0MDIsIDEwNDA2LCAxMDQxMSwgCi0gICAgMTA0MTUsIDEwNDE5LCAxMDQyNCwgMTA0MjgsIDEwNDMyLCAxMDQzOSwgMTA0NDYsIDEwNDUwLCAxMDQ1NCwgMTA0NTksIAotICAgIDEwNDYzLCAxMDQ2NywgMTA0NzAsIDEwNDc1LCAxMDQ3OCwgMTA0ODEsIDEwNDg2LCAxMDQ5MSwgMTA0OTUsIDEwNDk5LCAKLSAgICAxMDUwNSwgMTA1MTEsIDEwNTE0LCAwLCAwLCAxMDUxNywgMTA1MjMsIDEwNTI5LCAxMDUzNSwgMTA1NDUsIDEwNTU3LCAKLSAgICAxMDU2OSwgMTA1ODYsIDEwNTk4LCAxMDYwOSwgMTA2MTcsIDEwNjI0LCAxMDYzNSwgMTA2NTAsIDEwNjYxLCAxMDY2NywgCi0gICAgMTA2NzYsIDEwNjg0LCAxMDY5NiwgMTA3MDYsIDEwNzE0LCAxMDcyNiwgMTA3MzMsIDEwNzQxLCAxMDc1MywgMTA3NTksIAotICAgIDEwNzY1LCAxMDc3MywgMTA3ODEsIDEwNzg5LCAxMDc5NSwgMTA4MDUsIDEwODEyLCAxMDgyMiwgMTA4MzIsIDEwODQ1LCAKLSAgICAxMDg1OSwgMTA4NzMsIDEwODgzLCAxMDg5NCwgMTA5MDUsIDEwOTE4LCAxMDkzMSwgMTA5NDUsIDEwOTU3LCAxMDk2OSwgCi0gICAgMTA5ODIsIDEwOTk1LCAxMTAwNywgMTEwMjAsIDExMDI5LCAxMTAzNywgMTEwNDIsIDExMDQ3LCAxMTA1MiwgMTEwNTcsIAotICAgIDExMDYyLCAxMTA2NywgMTEwNzIsIDExMDc3LCAxMTA4MiwgMTEwODcsIDExMDkyLCAxMTA5NywgMTExMDIsIDExMTA3LCAKLSAgICAxMTExMiwgMTExMTcsIDExMTIyLCAxMTEyNywgMTExMzIsIDExMTM3LCAxMTE0MiwgMTExNDcsIDExMTUyLCAxMTE1NywgCi0gICAgMTExNjIsIDExMTY3LCAxMTE3MiwgMTExNzcsIDExMTgyLCAxMTE4NywgMTExOTIsIDExMTk3LCAxMTIwMSwgMTEyMDYsIAotICAgIDExMjExLCAxMTIxNiwgMTEyMjEsIDExMjI2LCAxMTIzMCwgMTEyMzQsIDExMjM4LCAxMTI0MiwgMTEyNDYsIDExMjUwLCAKLSAgICAxMTI1NCwgMTEyNTgsIDExMjYyLCAxMTI2NiwgMTEyNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDExMjc1LCAxMTI4MCwgMTEyODQsIDExMjg4LCAxMTI5MiwgMTEyOTYsIDExMzAwLCAxMTMwNCwgMTEzMDgsIDExMzEyLCAKLSAgICAxMTMxNiwgMTEzMjAsIDExMzI1LCAxMTMyOSwgMTEzMzMsIDExMzM3LCAxMTM0MiwgMTEzNDYsIDExMzUxLCAxMTM1NiwgCi0gICAgMTEzNjEsIDExMzY1LCAxMTM3MCwgMTEzNzUsIDExMzgwLCAxMTM4NSwgMTEzODksIDExMzk0LCAxMTM5OCwgMTE0MDMsIAotICAgIDExNDA4LCAxMTQxMiwgMTE0MTcsIDExNDI0LCAxMTQyOCwgMTE0MzMsIDExNDM3LCAxMTQ0MSwgMTE0NDYsIDExNDUwLCAKLSAgICAxMTQ1NywgMTE0NjQsIDExNDcxLCAxMTQ3NywgMTE0ODUsIDExNDkzLCAxMTUwMiwgMTE1MTAsIDExNTE3LCAxMTUyNCwgCi0gICAgMTE1MzIsIDExNTM4LCAxMTU0NCwgMTE1NTAsIDExNTU2LCAxMTU2MywgMTE1NjgsIDExNTcyLCAxMTU3NywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTE1ODEsIDExNTg2LCAxMTU5MSwgMTE1OTYsIDExNjAxLCAxMTYwNiwgMTE2MTEsIDExNjE2LCAxMTYyMSwgCi0gICAgMTE2MjYsIDExNjMxLCAxMTYzNiwgMTE2NDEsIDExNjQ2LCAxMTY1MSwgMTE2NTYsIDExNjYxLCAxMTY2NiwgMTE2NzEsIAotICAgIDExNjc2LCAxMTY4MSwgMTE2ODYsIDExNjkxLCAxMTY5NiwgMTE3MDEsIDExNzA2LCAxMTcxMSwgMTE3MTksIDExNzI2LCAKLSAgICAxMTczMiwgMTE3MzcsIDExNzQ1LCAxMTc1MiwgMTE3NTgsIDExNzY1LCAxMTc3MSwgMTE3NzYsIDExNzgzLCAxMTc5MCwgCi0gICAgMTE3OTYsIDExODAxLCAxMTgwNiwgMTE4MTIsIDExODE3LCAxMTgyMiwgMTE4MjgsIDAsIDAsIDExODMzLCAxMTgzOSwgCi0gICAgMTE4NDUsIDExODUxLCAxMTg1NywgMTE4NjMsIDExODY5LCAxMTg3NCwgMTE4ODIsIDExODg4LCAxMTg5NCwgMTE5MDAsIAotICAgIDExOTA2LCAxMTkxMiwgMTE5MjAsIDAsIDExOTI2LCAxMTkzMSwgMTE5MzYsIDExOTQxLCAxMTk0NiwgMTE5NTEsIDExOTU2LCAKLSAgICAxMTk2MSwgMTE5NjYsIDExOTcxLCAxMTk3NiwgMTE5ODEsIDExOTg2LCAxMTk5MSwgMTE5OTYsIDEyMDAxLCAxMjAwNiwgCi0gICAgMTIwMTEsIDEyMDE2LCAxMjAyMSwgMTIwMjYsIDEyMDMxLCAxMjAzNiwgMTIwNDEsIDEyMDQ2LCAxMjA1MSwgMTIwNTYsIAotICAgIDEyMDYxLCAwLCAwLCAxMjA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzMsIDM1LCAzOSwgNDEsIDQ0LCA0NiwgNDgsIDUwLCA1MiwgNTQsIDU2LCA1OSwgNjEsIDY0LCA2NiwgNjgsIDcxLCA3NCwgCisgICAgNzcsIDgwLCA4NCwgODgsIDkzLCA5OCwgMTAzLCAxMDcsIDExMiwgMTE3LCAxMjIsIDEyNiwgMTMxLCAxMzYsIDE0MCwgMTQ1LCAKKyAgICAxNTAsIDE1NCwgMTU5LCAxNjQsIDE2OCwgMTcyLCAxNzcsIDE4MSwgMTg2LCAxOTEsIDE5NiwgMjAxLCAyMDYsIDIwOSwgCisgICAgMjEzLCAyMTYsIDIyMCwgMjIzLCAyMjcsIDIzMSwgMjM2LCAyNDEsIDI0NiwgMjUwLCAyNTUsIDI2MCwgMjY1LCAyNjksIAorICAgIDI3NCwgMjc5LCAyODMsIDI4OCwgMjkzLCAyOTcsIDMwMiwgMzA3LCAzMTEsIDMxNSwgMzIwLCAzMjQsIDMyOSwgMzM0LCAKKyAgICAzMzksIDM0NCwgMzQ5LCAzNTMsIDM1NiwgMzYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjIsIDM2NiwgMzcxLCAKKyAgICAzNzQsIDM3NywgMzgwLCAzODMsIDM4NiwgMzg5LCAzOTEsIDM5NCwgNDAwLCA0MDgsIDQxMSwgNDE1LCA0MTgsIDQyMCwgCisgICAgNDIzLCA0MjYsIDQyOSwgNDMyLCA0MzYsIDQzOSwgNDQyLCA0NDUsIDQ0NywgNDUwLCA0NTYsIDQ2NCwgNDcxLCA0NzgsIAorICAgIDQ4NSwgNDkwLCA0OTcsIDUwMywgNTEwLCA1MTcsIDUyNCwgNTMyLCA1MzcsIDU0NSwgNTUyLCA1NTgsIDU2NSwgNTcyLCAKKyAgICA1ODAsIDU4NywgNTk1LCA2MDMsIDYwOCwgNjE2LCA2MjMsIDYyOSwgNjM2LCA2NDMsIDY1MCwgNjUzLCA2NTksIDY2NiwgCisgICAgNjcyLCA2NzksIDY4NiwgNjkzLCA2OTgsIDcwNCwgNzExLCA3MTcsIDcyNCwgNzMxLCA3MzgsIDc0NiwgNzUxLCA3NTksIAorICAgIDc2NiwgNzcyLCA3NzksIDc4NiwgNzk0LCA4MDEsIDgwOSwgODE3LCA4MjIsIDgzMCwgODM3LCA4NDMsIDg1MCwgODU3LCAKKyAgICA4NjQsIDg2NywgODczLCA4ODAsIDg4NiwgODkzLCA5MDAsIDkwNywgOTEyLCA5MjAsIDkyNywgOTM0LCA5NDEsIDk0OCwgCisgICAgOTU1LCA5NjIsIDk2OSwgOTc2LCA5ODQsIDk5MiwgMTAwMCwgMTAwOCwgMTAxNiwgMTAyNCwgMTAzMiwgMTA0MCwgMTA0NywgCisgICAgMTA1NCwgMTA2MSwgMTA2OCwgMTA3NSwgMTA4MiwgMTA4OSwgMTA5NiwgMTEwMywgMTExMCwgMTExNywgMTEyNCwgMTEzMiwgCisgICAgMTE0MCwgMTE0OCwgMTE1NiwgMTE2NCwgMTE3MiwgMTE4MCwgMTE4OCwgMTE5NiwgMTIwNCwgMTIxMSwgMTIxOCwgMTIyNiwgCisgICAgMTIzNCwgMTI0MiwgMTI1MCwgMTI1OCwgMTI2NiwgMTI3NCwgMTI4MiwgMTI5MCwgMTI5NiwgMTMwMSwgMTMwNiwgMTMxNCwgCisgICAgMTMyMiwgMTMzMCwgMTMzOCwgMTM0MywgMTM1MCwgMTM1NywgMTM2NSwgMTM3MywgMTM4MSwgMTM4OSwgMTM5OCwgMTQwNywgCisgICAgMTQxNCwgMTQyMSwgMTQyOCwgMTQzNSwgMTQ0MywgMTQ1MSwgMTQ1OSwgMTQ2NywgMTQ3OCwgMTQ4MywgMTQ4OCwgMTQ5NSwgCisgICAgMTUwMiwgMTUwOSwgMTUxNiwgMTUyMywgMTUzMCwgMTUzNSwgMTU0MCwgMTU0NywgMTU1NCwgMTU2MiwgMTU3MCwgMTU3OCwgCisgICAgMTU4NiwgMTU5MywgMTYwMCwgMTYwOCwgMTYxNiwgMTYyNCwgMTYzMiwgMTY0MCwgMTY0OCwgMTY1NiwgMTY2NCwgMTY3MiwgCisgICAgMTY4MCwgMTY4NywgMTY5NCwgMTcwMSwgMTcwOCwgMTcxNSwgMTcyMiwgMTcyOSwgMTczNiwgMTc0NCwgMTc1MiwgMTc1OSwgCisgICAgMTc2NiwgMTc3MywgMTc4MCwgMTc4OCwgMTc5NiwgMTgwNCwgMTgxMiwgMTgyMCwgMTgyNywgMTgzNCwgMTg0MiwgMTg1MCwgCisgICAgMTg1OCwgMTg2NiwgMTg3MSwgMTg3NywgMTg4MywgMTg5MCwgMTg5NywgMTkwMiwgMTkwNywgMTkxMiwgMTkxOSwgMTkyNiwgCisgICAgMTkzMywgMTk0MCwgMTk0OCwgMTk1NiwgMTk2MywgMTk2OSwgMTk3NCwgMTk3OSwgMTk4NiwgMTk5MywgMjAwMCwgMjAwNSwgCisgICAgMjAxMCwgMjAxNSwgMjAyMiwgMjAyOSwgMjAzNiwgMjA0MywgMjA1MCwgMjA1NywgMjA2NSwgMjA3NSwgMjA4MywgMjA5MCwgCisgICAgMjA5NywgMjEwMiwgMjEwNywgMjExNCwgMjEyMSwgMjEyNSwgMjEzMCwgMjEzNSwgMjE0MCwgMjE0OCwgMjE1NywgMjE2NCwgCisgICAgMjE3MSwgMjE4MCwgMjE4NywgMjE5NCwgMjE5OSwgMjIwNiwgMjIxMywgMjIyMCwgMjIyNywgMjIzNCwgMjIzOSwgMjI0NiwgCisgICAgMjI1MywgMjI2MSwgMjI2NiwgMjI3MSwgMjI3NiwgMjI4NiwgMjI5MCwgMjI5NiwgMjMwMiwgMjMwOCwgMjMxNCwgMjMyMiwgCisgICAgMjMzNSwgMjM0MywgMjM0OCwgMjM1OCwgMjM2MywgMjM2OCwgMjM3OCwgMjM4MywgMjM5MCwgMjM5NywgMjQwNSwgMjQxMywgCisgICAgMjQyMCwgMjQyNywgMjQzNCwgMjQ0MSwgMjQ1MSwgMjQ2MSwgMjQ3MCwgMjQ3OSwgMjQ4OSwgMjQ5OSwgMjUwOSwgMjUxOSwgCisgICAgMjUyNSwgMjUzNSwgMjU0NSwgMjU1NSwgMjU2NSwgMjU3MywgMjU4MSwgMjU4OCwgMjU5NSwgMjYwMywgMjYxMSwgMjYxOSwgCisgICAgMjYyNywgMjYzNCwgMjY0MSwgMjY1MSwgMjY2MSwgMjY2OSwgMjY3NywgMjY4NSwgMjY5MCwgMjcwMCwgMjcwNSwgMjcxMiwgCisgICAgMjcxOSwgMjcyNCwgMjcyOSwgMjczNywgMjc0NSwgMjc1NSwgMjc2NSwgMjc3MiwgMjc3OSwgMjc4OCwgMjc5NywgMjgwNSwgCisgICAgMjgxMywgMjgyMiwgMjgzMSwgMjgzOSwgMjg0NywgMjg1NiwgMjg2NSwgMjg3NCwgMjg4MywgMjg5MywgMjkwMywgMjkxMSwgCisgICAgMjkxOSwgMjkyOCwgMjkzNywgMjk0NiwgMjk1NSwgMjk2NSwgMjk3NSwgMjk4MywgMjk5MSwgMzAwMCwgMzAwOSwgMzAxOCwgCisgICAgMzAyNywgMzAzNiwgMzA0NSwgMzA1MCwgMzA1NSwgMzA2MywgMzA3MSwgMzA4MSwgMzA4OSwgMzA5NCwgMzA5OSwgMzEwNiwgCisgICAgMzExMywgMzEyMCwgMzEyNywgMzEzNCwgMzE0MSwgMzE1MSwgMzE2MSwgMzE3MSwgMzE4MSwgMzE4OCwgMzE5NSwgMzIwNSwgCisgICAgMzIxNSwgMzIyMywgMzIzMSwgMzIzOSwgMzI0NywgMzI1NSwgMzI2MiwgMzI2OSwgMzI3NiwgMzI4MiwgMzI4OSwgMzI5NiwgCisgICAgMzMwMywgMzMxMiwgMzMyMiwgMzMzMiwgMzMzOSwgMzM0NiwgMzM1MiwgMzM1NywgMzM2NCwgMzM3MCwgMzM3NiwgMzM4MywgCisgICAgMzM5MCwgMzQwMSwgMzQxMSwgMzQxOCwgMzQyNSwgMzQzMiwgMzQzOSwgMzQ0NSwgMzQ1MCwgMzQ1NywgMzQ2MywgMzQ2OCwgCisgICAgMzQ3NiwgMzQ4NCwgMzQ5MSwgMzQ5NywgMzUwMiwgMzUwOSwgMzUxNCwgMzUyMSwgMzUzMCwgMzUzOSwgMzU0OCwgMzU1NSwgCisgICAgMzU2MSwgMzU2NywgMzU3MiwgMzU3OSwgMzU4NiwgMzU5MywgMzYwMCwgMzYwNywgMzYxMiwgMzYxNywgMzYyNiwgMzYzNCwgCisgICAgMzY0MywgMzY0OCwgMzY1NSwgMzY2NiwgMzY3MywgMzY4MSwgMzY5MCwgMzY5NiwgMzcwMiwgMzcwOCwgMzcxNSwgMzcyMCwgCisgICAgMzcyNiwgMzczNywgMzc0NiwgMzc1NSwgMzc2MywgMzc3MSwgMzc4MSwgMzc4NiwgMzc5MywgMzgwMCwgMzgwNSwgMzgxNywgCisgICAgMzgyNiwgMzgzNCwgMzg0MSwgMzg1MCwgMzg1NSwgMzg2MCwgMzg2NywgMzg3NCwgMzg4MSwgMzg4OCwgMzg5NCwgMzkwMywgCisgICAgMzkxMSwgMzkxNiwgMzkyNCwgMzkzMCwgMzkzOCwgMzk0NiwgMzk1MiwgMzk1OCwgMzk2NCwgMzk3MSwgMzk3OSwgMzk4NSwgCisgICAgMzk5MywgNDAwMCwgNDAwNSwgNDAxMiwgNDAyMCwgNDAzMCwgNDAzNywgNDA0NCwgNDA1NCwgNDA2MSwgNDA2OCwgNDA3OCwgCisgICAgNDA4NSwgNDA5MiwgNDA5OSwgNDEwNSwgNDExMSwgNDEyMSwgNDEzNCwgNDEzOSwgNDE0NiwgNDE1MSwgNDE1NSwgNDE2MSwgCisgICAgNDE3MCwgNDE3NywgNDE4MiwgNDE4NywgNDE5MSwgNDE5NiwgNDIwMiwgNDIwNiwgNDIxMiwgNDIxOCwgNDIyNCwgNDIzMCwgCisgICAgNDIzOCwgNDI0MywgNDI0OCwgNDI1MywgNDI1OCwgNDI2NCwgNDI2NiwgNDI3MSwgNDI3NSwgNDI4MSwgNDI4NywgNDI5MywgCisgICAgNDI5OCwgNDMwNSwgNDMxMiwgNDMxOCwgNDMyNSwgNDMzMywgNDM0MSwgNDM0NiwgNDM1MSwgNDM1NSwgNDM2MCwgNDM2MiwgCisgICAgNDM2NCwgNDM2NywgNDM2OSwgNDM3MiwgNDM3NywgNDM4MiwgNDM4OCwgNDM5MywgNDM5NywgNDQwMSwgNDQwNiwgNDQxNSwgCisgICAgNDQyMSwgNDQyNiwgNDQzMiwgNDQzNywgNDQ0MywgNDQ1MSwgNDQ1OSwgNDQ2MywgNDQ2NywgNDQ3MiwgNDQ3OCwgNDQ4NCwgCisgICAgNDQ5MCwgNDQ5NiwgNDUwMSwgNDUwOCwgNDUxNiwgNDUyNCwgNDUyOSwgNDUzNSwgNDU0MiwgNDU0OSwgNDU1NiwgNDU2MywgCisgICAgNDU2NywgNDU3MiwgNDU3NywgNDU4MiwgNDU4NywgNDU5MiwgNDU5NSwgNDU5OCwgNDYwMSwgNDYwNCwgNDYwNywgNDYxMCwgCisgICAgNDYxNCwgNDYxOCwgNDYyNCwgNDYyNywgNDYzMiwgNDYzOCwgNDY0NCwgNDY0NywgNDY1MiwgNDY1OCwgNDY2MiwgNDY2OCwgCisgICAgNDY3NCwgNDY4MCwgNDY4NiwgNDY5MSwgNDY5NiwgNDcwMSwgNDcwNCwgNDcxMCwgNDcxNSwgNDcyMCwgNDcyNCwgNDcyOSwgCisgICAgNDczNSwgNDc0MSwgNDc0NCwgNDc0OCwgNDc1MiwgNDc1NiwgNDc1OSwgNDc2MiwgNDc2NywgNDc3MSwgNDc3OCwgNDc4MiwgCisgICAgNDc4OCwgNDc5MiwgNDc5OCwgNDgwMiwgNDgwNiwgNDgxMCwgNDgxNSwgNDgyMCwgNDgyNywgNDgzMywgNDg0MCwgNDg0NiwgCisgICAgNDg1MiwgNDg1OCwgNDg2MSwgNDg2NSwgNDg2OSwgNDg3MywgNDg3NywgNDg4MiwgNDg4NywgNDg5MSwgNDg5NSwgNDkwMSwgCisgICAgNDkwNSwgNDkwOSwgNDkxNCwgNDkyMCwgNDkyNSwgNDkzMSwgNDkzNSwgNDk0MiwgNDk0NywgNDk1MSwgNDk1NiwgNDk2MSwgCisgICAgNDk2NywgNDk3MCwgNDk3NCwgNDk3OSwgNDk4NCwgNDk5MywgNDk5OSwgNTAwNCwgNTAwOCwgNTAxMywgNTAxNywgNTAyMiwgCisgICAgNTAyNiwgNTAzMCwgNTAzNSwgNTAzOSwgNTA0NSwgNTA1MCwgNTA1NSwgNTA2MCwgNTA2NSwgNTA3MCwgNTA3NSwgNTA4MSwgCisgICAgNTA4NywgNTA5MywgNTA5OSwgNTEwNCwgNTExMCwgNTExNiwgNTEyMiwgNTEyNywgNTEzMiwgNTEzOSwgNTE0NiwgNTE1MCwgCisgICAgNTE1NiwgNTE2MywgMCwgMCwgNTE3MCwgNTE3MywgNTE4MiwgNTE5MSwgNTIwMiwgNTIwNiwgMCwgMCwgMCwgMCwgNTIxMSwgCisgICAgNTIxNCwgNTIxOSwgNTIyNywgNTIzMiwgNTI0MCwgNTI0OCwgMCwgNTI1NiwgMCwgNTI2NCwgNTI3MiwgNTI4MCwgNTI5MSwgCisgICAgNTI5NiwgNTMwMSwgNTMwNiwgNTMxMSwgNTMxNiwgNTMyMSwgNTMyNiwgNTMzMSwgNTMzNiwgNTM0MSwgNTM0NiwgNTM1MSwgCisgICAgNTM1NiwgNTM2MSwgNTM2NiwgNTM3MSwgMCwgNTM3NiwgNTM4MSwgNTM4NiwgNTM5MSwgNTM5NiwgNTQwMSwgNTQwNiwgCisgICAgNTQxMSwgNTQxOSwgNTQyNywgNTQzNSwgNTQ0MywgNTQ1MSwgNTQ1OSwgNTQ3MCwgNTQ3NSwgNTQ4MCwgNTQ4NSwgNTQ5MCwgCisgICAgNTQ5NSwgNTUwMCwgNTUwNSwgNTUxMCwgNTUxNSwgNTUyMCwgNTUyNSwgNTUzMCwgNTUzNSwgNTU0MCwgNTU0NSwgNTU1MCwgCisgICAgNTU1NSwgNTU2MSwgNTU2NiwgNTU3MSwgNTU3NiwgNTU4MSwgNTU4NiwgNTU5MSwgNTU5NiwgNTYwNCwgNTYxMiwgNTYyMCwgCisgICAgNTYyOCwgNTYzNiwgNTY0MSwgNTY0NSwgNTY0OSwgNTY1NiwgNTY2NiwgNTY3NiwgNTY4MCwgNTY4NCwgNTY4OCwgNTY5NCwgCisgICAgNTcwMSwgNTcwNSwgNTcxMCwgNTcxNCwgNTcxOSwgNTcyMywgNTcyOCwgNTczMiwgNTczNywgNTc0MiwgNTc0NywgNTc1MiwgCisgICAgNTc1NywgNTc2MiwgNTc2NywgNTc3MiwgNTc3NywgNTc4MiwgNTc4NywgNTc5MiwgNTc5NywgNTgwMiwgNTgwNywgNTgxMSwgCisgICAgNTgxNSwgNTgyMSwgNTgyNSwgNTgzMCwgNTgzNiwgNTg0NCwgNTg0OSwgNTg1NCwgNTg2MSwgNTg2NiwgNTg3MSwgNTg3OCwgCisgICAgNTg4NywgNTg5NiwgNTkwNywgNTkxNSwgNTkyMCwgNTkyNSwgNTkzMCwgNTkzNywgNTk0MiwgNTk0OCwgNTk1MywgNTk1OCwgCisgICAgNTk2MywgNTk2OCwgNTk3MywgNTk3OCwgNTk4NiwgNTk5MiwgNTk5NywgNjAwMSwgNjAwNiwgNjAxMSwgNjAxNiwgNjAyMSwgCisgICAgNjAyNiwgNjAzMSwgNjAzNiwgNjA0MCwgNjA0NiwgNjA1MCwgNjA1NSwgNjA2MCwgNjA2NSwgNjA2OSwgNjA3NCwgNjA3OSwgCisgICAgNjA4NCwgNjA4OSwgNjA5MywgNjA5OCwgNjEwMiwgNjEwNywgNjExMiwgNjExNywgNjEyMiwgNjEyOCwgNjEzMywgNjEzOSwgCisgICAgNjE0MywgNjE0OCwgNjE1MiwgNjE1NiwgNjE2MSwgNjE2NiwgNjE3MSwgNjE3NiwgNjE4MSwgNjE4NiwgNjE5MSwgNjE5NSwgCisgICAgNjIwMSwgNjIwNSwgNjIxMCwgNjIxNSwgNjIyMCwgNjIyNCwgNjIyOSwgNjIzNCwgNjIzOSwgNjI0NCwgNjI0OCwgNjI1MywgCisgICAgNjI1NywgNjI2MiwgNjI2NywgNjI3MiwgNjI3NywgNjI4MywgNjI4OCwgNjI5NCwgNjI5OCwgNjMwMywgNjMwNywgNjMxNSwgCisgICAgNjMyMCwgNjMyNSwgNjMzMCwgNjMzNywgNjM0MiwgNjM0OCwgNjM1MywgNjM1OCwgNjM2MywgNjM2OCwgNjM3MywgNjM3OCwgCisgICAgNjM4NiwgNjM5MiwgNjM5NywgNjQwMiwgNjQwNywgNjQxMiwgNjQxNywgNjQyMywgNjQyOSwgNjQzNiwgNjQ0MywgNjQ1MiwgCisgICAgNjQ2MSwgNjQ2OCwgNjQ3NSwgNjQ4NCwgNjQ5MywgNjQ5OCwgNjUwMywgNjUwOCwgNjUxMywgNjUxOCwgNjUyMywgNjUyOCwgCisgICAgNjUzMywgNjU0NCwgNjU1NSwgNjU2MCwgNjU2NSwgNjU3MiwgNjU3OSwgNjU4NywgNjU5NSwgNjYwMCwgNjYwNSwgNjYxMCwgCisgICAgNjYxNSwgNjYxOSwgNjYyMywgNjYyNywgNjYzMywgNjYzOSwgNjY0MywgNjY1MCwgNjY1NSwgNjY2NSwgNjY3NSwgNjY4MSwgCisgICAgNjY4NywgNjY5NSwgNjcwMywgNjcxMSwgNjcxOSwgNjcyNiwgNjczMywgNjc0MSwgNjc0OSwgNjc1NywgNjc2NSwgNjc3MywgCisgICAgNjc4MSwgNjc4OSwgNjc5NywgNjgwNSwgNjgxMywgNjgyMCwgNjgyNywgNjgzMywgNjgzOSwgNjg0NywgNjg1NSwgNjg2MiwgCisgICAgNjg2OSwgNjg3NywgNjg4NSwgNjg5MSwgNjg5NywgNjkwNSwgNjkxMywgNjkyMSwgNjkyOSwgNjkzNSwgNjk0MSwgNjk0OSwgCisgICAgNjk1NywgNjk2NSwgNjk3MywgNjk4MCwgNjk4NywgNjk5NSwgNzAwMywgNzAxMSwgNzAxOSwgNzAyNCwgNzAyOSwgNzAzNiwgCisgICAgNzA0MywgNzA1MywgNzA2MywgNzA2NywgNzA3NSwgNzA4MywgNzA5MCwgNzA5NywgNzEwNSwgNzExMywgNzEyMCwgNzEyNywgCisgICAgNzEzNSwgNzE0MywgNzE1MCwgNzE1NywgNzE2NSwgNzE3MywgNzE3OCwgNzE4NSwgNzE5MiwgNzE5OSwgNzIwNiwgNzIxMiwgCisgICAgNzIxOCwgNzIyNiwgNzIzNCwgNzIzOSwgNzI0NCwgNzI1MiwgNzI2MCwgNzI2OCwgNzI3NiwgNzI4NCwgNzI5MiwgNzI5OSwgCisgICAgNzMwNiwgNzMxNCwgNzMyMiwgNzMzMCwgNzMzOCwgNzM0NSwgNzM1MiwgNzM1OCwgNzM2NCwgNzM3MywgNzM4MiwgNzM4OSwgCisgICAgNzM5NiwgNzQwMywgNzQxMCwgNzQxNywgNzQyNCwgNzQzMSwgNzQzOCwgNzQ0NiwgNzQ1NCwgNzQ2MiwgNzQ3MCwgNzQ3OCwgCisgICAgNzQ4NiwgNzQ5NiwgNzUwNiwgNzUxMywgNzUyMCwgNzUyNywgNzUzNCwgNzU0MSwgNzU0OCwgNzU1NSwgNzU2MiwgNzU2OSwgCisgICAgNzU3NiwgNzU4MywgNzU5MCwgNzU5NywgNzYwNCwgNzYxMSwgNzYxOCwgNzYyNSwgNzYzMiwgNzYzOSwgNzY0NiwgNzY1MywgCisgICAgNzY2MCwgNzY2NywgNzY3NCwgNzY3OSwgNzY4NCwgNzY4OSwgNzY5NCwgNzY5OSwgNzcwNCwgNzcwOSwgNzcxNCwgNzcxOSwgCisgICAgNzcyNCwgNzczMCwgNzczNiwgNzc0NCwgNzc1MiwgNzc2MCwgNzc2OCwgNzc3NiwgNzc4NCwgNzc5MiwgNzgwMCwgNzgwOCwgCisgICAgNzgxNiwgNzgyMSwgNzgyNiwgNzgzMSwgNzgzNiwgNzg0NCwgMCwgNzg1MiwgNzg1NywgNzg2MiwgNzg2NywgNzg3MiwgCisgICAgNzg3NywgNzg4MiwgNzg4NywgNzg5MiwgNzg5NiwgNzkwMSwgNzkwNiwgNzkxMSwgNzkxNiwgNzkyMSwgNzkyNiwgNzkzMSwgCisgICAgNzkzNiwgNzk0MSwgNzk0NiwgNzk1MSwgNzk1NiwgNzk2MSwgNzk2NiwgNzk3MSwgNzk3NiwgNzk4MSwgNzk4NiwgNzk5MSwgCisgICAgNzk5NiwgODAwMSwgODAwNiwgODAxMSwgODAxNiwgODAyMSwgODAyNiwgODAzMSwgODAzNiwgMCwgMCwgODA0MSwgODA0OCwgCisgICAgODA1MSwgODA1NSwgODA1OSwgODA2MiwgODA2NiwgMCwgODA3MCwgODA3NSwgODA4MCwgODA4NSwgODA5MCwgODA5NSwgCisgICAgODEwMCwgODEwNSwgODExMCwgODExNCwgODExOSwgODEyNCwgODEyOSwgODEzNCwgODEzOSwgODE0NCwgODE0OSwgODE1NCwgCisgICAgODE1OSwgODE2NCwgODE2OSwgODE3NCwgODE3OSwgODE4NCwgODE4OSwgODE5NCwgODE5OSwgODIwNCwgODIwOSwgODIxNCwgCisgICAgODIxOSwgODIyNCwgODIyOSwgODIzNCwgODIzOSwgODI0NCwgODI0OSwgODI1NCwgODI1OSwgMCwgODI2NiwgODI3MSwgMCwgCisgICAgMCwgODI3NCwgODI4MCwgODI4NiwgMCwgODI5MCwgODI5NSwgODMwMCwgODMwNSwgODMxMiwgODMxOSwgODMyNCwgODMyOSwgCisgICAgODMzNCwgODMzOSwgODM0NCwgODM0OSwgODM1NCwgODM2MSwgODM2NiwgODM3MywgODM4MCwgODM4NSwgODM5MiwgODM5NywgCisgICAgODQwMiwgODQwNywgODQxNCwgODQxOSwgODQyNCwgODQzMSwgODQ0MCwgODQ0NSwgODQ1MCwgODQ1NSwgODQ2MCwgODQ2NiwgCisgICAgODQ3MSwgODQ3OCwgODQ4NSwgODQ5MiwgODQ5NywgODUwMiwgODUwNywgODUxMiwgODUxNywgODUyMiwgODUzMiwgODUzNywgCisgICAgODU0NiwgODU1MSwgODU1NiwgODU2MSwgODU2NiwgODU3MywgODU4MCwgODU4NywgODU5MywgODU5OSwgODYwNiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgODYxMywgODYxNywgODYyMSwgODYyNSwgODYyOSwgODYzMywgODYzNywgODY0MSwgODY0NSwgCisgICAgODY0OSwgODY1MywgODY1OCwgODY2MiwgODY2NiwgODY3MSwgODY3NSwgODY4MCwgODY4NCwgODY4OCwgODY5MiwgODY5NywgCisgICAgODcwMSwgODcwNiwgODcxMCwgODcxNCwgODcxOCwgODcyMiwgMCwgMCwgMCwgMCwgMCwgODcyNiwgODczMywgODc0MSwgCisgICAgODc0OCwgODc1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODc1OCwgODc2MSwgODc2NSwgODc3MCwgCisgICAgODc3NCwgODc3OCwgODc4MiwgODc4OCwgODc5NCwgODc5NywgODgwNCwgODgxMywgODgxNiwgODgxOSwgODgyNCwgODgzMCwgCisgICAgODgzNCwgODg0MiwgODg0OCwgODg1NCwgODg2MiwgODg2NiwgODg3MSwgODg4MiwgODg4NywgODg5MSwgODg5NSwgODg5OSwgCisgICAgODkwMiwgMCwgODkwNSwgODkxMiwgODkxNiwgODkyMiwgODkyNiwgODkzMywgODk0MCwgODk0OCwgODk1NSwgODk2MiwgCisgICAgODk2NiwgODk3MCwgODk3NiwgODk4MCwgODk4NCwgODk4OCwgODk5MiwgODk5NiwgOTAwMCwgOTAwNCwgOTAwOCwgOTAxMiwgCisgICAgOTAxNiwgOTAyMCwgOTAyNCwgOTAyOCwgOTAzMiwgOTAzNiwgOTA0MCwgOTA0NCwgOTA1MiwgOTA2MCwgOTA3MCwgOTA3OSwgCisgICAgOTA4OCwgOTA5MSwgOTA5NSwgOTA5OSwgOTEwMywgOTEwNywgOTExMSwgOTExNSwgOTExOSwgOTEyMywgOTEyOCwgOTEzMiwgCisgICAgOTEzNSwgOTEzOCwgOTE0MSwgOTE0NCwgOTE0NywgOTE1MCwgOTE1MywgOTE1NiwgOTE2MCwgOTE2NCwgOTE2OCwgOTE3MywgCisgICAgOTE3OCwgOTE4NCwgOTE4NywgOTE5NCwgOTIwMywgOTIwOCwgOTIxMywgOTIyMCwgOTIyNiwgOTIzMSwgOTIzNSwgOTIzOSwgCisgICAgOTI0MywgOTI0NywgOTI1MSwgOTI1NSwgOTI2MCwgOTI2NCwgOTI2OSwgOTI3MywgOTI3OCwgOTI4MywgOTI5MCwgOTI5NiwgCisgICAgOTMwMiwgOTMwOCwgOTMxMywgOTMyMiwgOTMzMSwgOTMzNiwgOTM0MywgOTM1MCwgOTM1NywgOTM2NCwgOTM2OCwgOTM3MiwgCisgICAgOTM3NiwgOTM4MywgOTM5MywgOTM5NywgOTQwMSwgOTQwNSwgOTQxMiwgOTQyMCwgOTQyNCwgOTQyOCwgOTQzNSwgOTQzOSwgCisgICAgOTQ0MywgOTQ0NywgOTQ1NCwgOTQ2MSwgOTQ3MywgOTQ3NywgOTQ4MSwgOTQ4NSwgOTQ5NSwgOTUwNCwgOTUwOCwgOTUxNiwgCisgICAgOTUyMywgOTUzMCwgOTUzOSwgOTU1MCwgOTU1OCwgOTU2MiwgOTU3MSwgOTU4MiwgOTU5MCwgOTYwMywgOTYxMSwgOTYxOSwgCisgICAgOTYyNywgOTYzNSwgOTY0MSwgOTY1MCwgOTY1NywgOTY2MSwgOTY2OSwgOTY3MywgOTY4MCwgOTY4OCwgOTY5MiwgOTY5OCwgCisgICAgOTcwNSwgOTcxMiwgOTcxNiwgOTcyNCwgOTcyOCwgOTczNSwgOTczOSwgOTc0NywgOTc1MSwgOTc1OSwgOTc2NywgOTc3NCwgCisgICAgOTc4MiwgOTc5MCwgOTc5NywgOTgwMywgOTgwNywgOTgxNCwgOTgyMiwgOTgyOCwgOTgzNSwgOTg0MiwgOTg0OCwgOTg1OCwgCisgICAgOTg2NiwgOTg3MywgOTg3OSwgOTg4MywgOTg4NiwgOTg5MCwgOTg5NiwgOTkwNCwgOTkwOCwgOTkxNCwgOTkyMCwgOTkyNywgCisgICAgOTkzNCwgOTkzNywgOTk0NCwgOTk0OSwgOTk1OCwgOTk2MywgOTk2NywgOTk4MCwgOTk5MywgOTk5OSwgMTAwMDYsIDEwMDExLCAKKyAgICAxMDAxNywgMTAwMjIsIDEwMDI4LCAxMDAzOCwgMTAwNDUsIDEwMDU0LCAxMDA2NCwgMTAwNzAsIDEwMDc1LCAxMDA4MCwgCisgICAgMTAwODQsIDEwMDg4LCAxMDA5MywgMTAwOTgsIDEwMTA0LCAxMDExMiwgMTAxMjAsIDEwMTMxLCAxMDEzNiwgMTAxNDUsIAorICAgIDEwMTU0LCAxMDE2MSwgMTAxNjcsIDEwMTczLCAxMDE3OSwgMTAxODUsIDEwMTkxLCAxMDE5NywgMTAyMDQsIDEwMjEwLCAKKyAgICAxMDIxNywgMTAyMjQsIDEwMjMxLCAxMDIzOCwgMTAyNDQsIDEwMjUyLCAxMDI2MSwgMTAyNjgsIDEwMjc2LCAxMDI4NCwgCisgICAgMTAyOTAsIDEwMjk2LCAxMDMwMiwgMTAzMTAsIDEwMzE4LCAxMDMyOCwgMTAzMzgsIDEwMzQyLCAxMDM0OCwgMTAzNTQsIDAsIAorICAgIDEwMzYwLCAxMDM2NSwgMTAzNzAsIDEwMzc3LCAxMDM4MiwgMTAzODcsIDEwMzk0LCAxMDM5OSwgMTA0MDgsIDEwNDEzLCAKKyAgICAxMDQxOCwgMTA0MjMsIDEwNDI4LCAxMDQzMywgMTA0NDAsIDEwNDQ1LCAxMDQ1MiwgMTA0NTcsIDEwNDYyLCAxMDQ2NywgCisgICAgMTA0NzIsIDEwNDc3LCAxMDQ4MywgMTA0ODcsIDEwNDkyLCAxMDQ5OSwgMTA1MDQsIDEwNTA5LCAxMDUxNCwgMTA1MTksIAorICAgIDEwNTI0LCAxMDUzMSwgMTA1MzgsIDEwNTQ1LCAxMDU1MCwgMTA1NTUsIDEwNTYxLCAxMDU2NiwgMTA1NzEsIDEwNTc3LCAKKyAgICAxMDU4MiwgMTA1ODcsIDEwNTk1LCAxMDYwMywgMTA2MDgsIDEwNjEzLCAxMDYxOSwgMTA2MjQsIDEwNjI5LCAxMDYzMywgCisgICAgMTA2MzksIDEwNjQzLCAxMDY0NywgMTA2NTMsIDEwNjU5LCAxMDY2NCwgMTA2NjksIDEwNjc2LCAxMDY4MywgMTA2ODcsIDAsIAorICAgIDAsIDEwNjkxLCAxMDY5OCwgMTA3MDUsIDEwNzEyLCAxMDcyMiwgMTA3MzQsIDEwNzQ1LCAxMDc2MSwgMTA3NzMsIDEwNzg0LCAKKyAgICAxMDc5MiwgMTA3OTksIDEwODA5LCAxMDgyNCwgMTA4MzUsIDEwODQxLCAxMDg1MCwgMTA4NTgsIDEwODY5LCAxMDg3OSwgCisgICAgMTA4ODcsIDEwODk4LCAxMDkwNSwgMTA5MTMsIDEwOTI0LCAxMDkzMCwgMTA5MzYsIDEwOTQ0LCAxMDk1MiwgMTA5NjAsIAorICAgIDEwOTY2LCAxMDk3NiwgMTA5ODQsIDEwOTk0LCAxMTAwNCwgMTEwMTcsIDExMDMxLCAxMTA0NSwgMTEwNTUsIDExMDY2LCAKKyAgICAxMTA3NywgMTEwOTAsIDExMTAzLCAxMTExNywgMTExMjksIDExMTQxLCAxMTE1NCwgMTExNjcsIDExMTc5LCAxMTE5MiwgCisgICAgMTEyMDEsIDExMjA5LCAxMTIxNCwgMTEyMTksIDExMjI0LCAxMTIyOSwgMTEyMzQsIDExMjM5LCAxMTI0NCwgMTEyNDksIAorICAgIDExMjU0LCAxMTI1OSwgMTEyNjQsIDExMjY5LCAxMTI3NCwgMTEyNzksIDExMjg0LCAxMTI4OSwgMTEyOTQsIDExMjk5LCAKKyAgICAxMTMwNCwgMTEzMDksIDExMzE0LCAxMTMxOSwgMTEzMjQsIDExMzI5LCAxMTMzNCwgMTEzMzksIDExMzQ0LCAxMTM0OSwgCisgICAgMTEzNTQsIDExMzU5LCAxMTM2NCwgMTEzNjksIDExMzczLCAxMTM3OCwgMTEzODMsIDExMzg4LCAxMTM5MywgMTEzOTgsIAorICAgIDExNDAyLCAxMTQwNiwgMTE0MTAsIDExNDE0LCAxMTQxOCwgMTE0MjIsIDExNDI2LCAxMTQzMCwgMTE0MzQsIDExNDM4LCAKKyAgICAxMTQ0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0NDcsIDExNDUyLCAxMTQ1NiwgCisgICAgMTE0NjAsIDExNDY0LCAxMTQ2OCwgMTE0NzIsIDExNDc2LCAxMTQ4MSwgMTE0ODUsIDExNDkwLCAxMTQ5NCwgMTE0OTksIAorICAgIDExNTAzLCAxMTUwNywgMTE1MTEsIDExNTE2LCAxMTUyMCwgMTE1MjUsIDExNTMwLCAxMTUzNSwgMTE1MzksIDExNTQ0LCAKKyAgICAxMTU0OSwgMTE1NTQsIDExNTU5LCAxMTU2NCwgMTE1NjksIDExNTc0LCAxMTU3OSwgMTE1ODQsIDExNTg4LCAxMTU5MywgCisgICAgMTE2MDAsIDExNjA0LCAxMTYwOSwgMTE2MTQsIDExNjE4LCAxMTYyMywgMTE2MjcsIDExNjM0LCAxMTY0MSwgMTE2NDgsIAorICAgIDExNjU1LCAxMTY2MywgMTE2NzEsIDExNjgwLCAxMTY4OCwgMTE2OTUsIDExNzAyLCAxMTcxMCwgMTE3MTYsIDExNzIyLCAKKyAgICAxMTcyOCwgMTE3MzQsIDExNzQxLCAxMTc0NiwgMTE3NTAsIDExNzU1LCAwLCAwLCAwLCAwLCAwLCAxMTc1OSwgMTE3NjQsIAorICAgIDExNzY5LCAxMTc3NCwgMTE3NzksIDExNzg0LCAxMTc4OSwgMTE3OTQsIDExNzk5LCAxMTgwNCwgMTE4MDksIDExODE0LCAKKyAgICAxMTgxOSwgMTE4MjQsIDExODI5LCAxMTgzNCwgMTE4MzksIDExODQ0LCAxMTg0OSwgMTE4NTQsIDExODU5LCAxMTg2NCwgCisgICAgMTE4NjksIDExODc0LCAxMTg3OSwgMTE4ODQsIDExODg5LCAxMTg5NywgMTE5MDQsIDExOTEwLCAxMTkxNSwgMTE5MjMsIAorICAgIDExOTMwLCAxMTkzNiwgMTE5NDMsIDExOTQ5LCAxMTk1NCwgMTE5NjEsIDExOTY4LCAxMTk3NCwgMTE5NzksIDExOTg0LCAKKyAgICAxMTk5MCwgMTE5OTUsIDEyMDAwLCAxMjAwNiwgMCwgMCwgMTIwMTEsIDEyMDE3LCAxMjAyMywgMTIwMjksIDEyMDM1LCAKKyAgICAxMjA0MSwgMTIwNDcsIDEyMDUyLCAxMjA2MCwgMTIwNjYsIDEyMDcyLCAxMjA3OCwgMTIwODQsIDEyMDkwLCAxMjA5OCwgMCwgCisgICAgMTIxMDQsIDEyMTA5LCAxMjExNCwgMTIxMTksIDEyMTI0LCAxMjEyOSwgMTIxMzQsIDEyMTM5LCAxMjE0NCwgMTIxNDksIAorICAgIDEyMTU0LCAxMjE1OSwgMTIxNjQsIDEyMTY5LCAxMjE3NCwgMTIxNzksIDEyMTg0LCAxMjE4OSwgMTIxOTQsIDEyMTk5LCAKKyAgICAxMjIwNCwgMTIyMDksIDEyMjE0LCAxMjIxOSwgMTIyMjQsIDEyMjI5LCAxMjIzNCwgMTIyMzksIDAsIDAsIDEyMjQ0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjI0OCwgMTIyNTcsIDEyMjY1LCAKKyAgICAxMjI3MiwgMTIyODAsIDEyMjkyLCAxMjI5OSwgMTIzMDYsIDEyMzEzLCAxMjMyNSwgMTIzMzYsIDEyMzQzLCAxMjM1MSwgCisgICAgMTIzNTcsIDEyMzYyLCAxMjM3MCwgMTIzNzgsIDEyMzg2LCAxMjM5MiwgMTI0MDIsIDEyNDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQxNywgMTI0MjMsIDEyNDI4LCAKKyAgICAxMjQzMywgMTI0MzgsIDEyNDQzLCAxMjQ0OCwgMTI0NTMsIDEyNDU4LCAxMjQ2MywgMTI0NjgsIDEyNDczLCAxMjQ3OCwgCisgICAgMTI0ODMsIDEyNDg3LCAxMjQ5MSwgMTI0OTUsIDEyNTAwLCAxMjUwNiwgMTI1MTIsIDEyNTE4LCAxMjUyMywgMTI1MjgsIAorICAgIDEyNTMzLCAxMjUzOCwgMTI1NDQsIDEyNTUzLCAxMjU2MSwgMTI1NjcsIDEyNTc1LCAxMjU4MSwgMTI1ODUsIDEyNTg5LCAKKyAgICAxMjU5MywgMTI1OTgsIDEyNjAxLCAxMjYwNSwgMTI2MDgsIDEyNjEyLCAxMjYxNSwgMTI2MTksIDEyNjIzLCAxMjYyNywgCisgICAgMTI2MzIsIDEyNjM3LCAxMjY0MCwgMTI2NDQsIDEyNjQ5LCAxMjY1NCwgMTI2NTcsIDEyNjYxLCAxMjY2NCwgMTI2NjgsIAorICAgIDEyNjcyLCAxMjY3NiwgMTI2ODAsIDEyNjg0LCAxMjY4OCwgMTI2OTIsIDEyNjk2LCAxMjcwMCwgMTI3MDQsIDEyNzA4LCAKKyAgICAxMjcxMiwgMTI3MTYsIDEyNzIwLCAxMjcyNCwgMTI3MjgsIDEyNzMyLCAxMjczNiwgMTI3NDAsIDEyNzQ0LCAxMjc0NywgCisgICAgMTI3NTEsIDEyNzU1LCAxMjc1OSwgMTI3NjIsIDEyNzY1LCAxMjc2OSwgMTI3NzMsIDEyNzc3LCAxMjc4MSwgMTI3ODUsIAorICAgIDEyNzg5LCAxMjc5MywgMTI3OTcsIDEyODAxLCAxMjgwNCwgMTI4MDksIDEyODE0LCAxMjgxOCwgMTI4MjIsIDEyODI3LCAKKyAgICAxMjgzMSwgMTI4MzYsIDEyODQwLCAxMjg0NSwgMTI4NTAsIDEyODU2LCAxMjg2MiwgMTI4NjgsIDEyODcyLCAxMjg3NywgCisgICAgMTI4ODMsIDEyODg5LCAxMjg5MywgMTI4OTgsIDEyOTAyLCAxMjkwOCwgMTI5MTMsIDEyOTE2LCAxMjkyMiwgMTI5MjgsIAorICAgIDEyOTMzLCAxMjkzOCwgMTI5NDUsIDEyOTUwLCAxMjk1NSwgMTI5NTksIDEyOTYzLCAxMjk2NywgMTI5NzEsIDEyOTc1LCAKKyAgICAxMjk3OSwgMTI5ODMsIDEyOTg3LCAxMjk5MiwgMTI5OTcsIDEzMDAyLCAxMzAwOCwgMTMwMTEsIDEzMDE1LCAxMzAxOSwgCisgICAgMTMwMjIsIDEzMDI1LCAxMzAyOCwgMTMwMzEsIDEzMDM0LCAxMzAzNywgMTMwNDEsIDEzMDQ0LCAxMzA0OCwgMTMwNTIsIAorICAgIDEzMDU5LCAxMzA2NCwgMTMwNjgsIDEzMDcyLCAxMzA3NiwgMTMwODAsIDEzMDg0LCAxMzA5MCwgMTMwOTQsIDEzMDk4LCAKKyAgICAxMzEwMiwgMTMxMDYsIDEzMTEyLCAxMzExNiwgMTMxMjAsIDEzMTIzLCAxMzEyNywgMTMxMzEsIDAsIDEzMTM1LCAxMzEzOCwgCisgICAgMTMxNDIsIDEzMTQ1LCAxMzE0OSwgMTMxNTIsIDEzMTU2LCAxMzE2MCwgMCwgMCwgMTMxNjQsIDEzMTY3LCAwLCAwLCAKKyAgICAxMzE3MSwgMTMxNzQsIDEzMTc4LCAxMzE4MSwgMTMxODUsIDEzMTg5LCAxMzE5MywgMTMxOTcsIDEzMjAxLCAxMzIwNSwgCisgICAgMTMyMDksIDEzMjEzLCAxMzIxNywgMTMyMjEsIDEzMjI1LCAxMzIyOSwgMTMyMzMsIDEzMjM3LCAxMzI0MSwgMTMyNDUsIAorICAgIDEzMjQ5LCAxMzI1MywgMCwgMTMyNTcsIDEzMjYwLCAxMzI2NCwgMTMyNjgsIDEzMjcyLCAxMzI3NSwgMTMyNzgsIDAsIAorICAgIDEzMjgyLCAwLCAwLCAwLCAxMzI4NiwgMTMyOTAsIDEzMjk0LCAxMzI5OCwgMCwgMCwgMTMzMDEsIDEzMzA1LCAxMzMwOSwgCisgICAgMTMzMTQsIDEzMzE4LCAxMzMyMywgMTMzMjcsIDEzMzMyLCAxMzMzNywgMCwgMCwgMTMzNDMsIDEzMzQ3LCAwLCAwLCAKKyAgICAxMzM1MiwgMTMzNTYsIDEzMzYxLCAxMzM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzNzEsIDAsIDAsIDAsIDAsIAorICAgIDEzMzc3LCAxMzM4MSwgMCwgMTMzODUsIDEzMzg5LCAxMzM5NCwgMTMzOTksIDEzNDA0LCAwLCAwLCAxMzQxMCwgMTM0MTQsIAorICAgIDEzNDE3LCAxMzQyMCwgMTM0MjMsIDEzNDI2LCAxMzQyOSwgMTM0MzIsIDEzNDM2LCAxMzQzOSwgMTM0NDMsIDEzNDUxLCAKKyAgICAxMzQ2MCwgMTM0NjQsIDEzNDY4LCAxMzQ3NCwgMTM0ODAsIDEzNDg2LCAxMzQ5MiwgMTM1MDYsIDEzNTEzLCAxMzUxNiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTM1MjAsIDEzNTI3LCAxMzUzMiwgMCwgMTM1MzcsIDEzNTQxLCAxMzU0NiwgMTM1NTAsIDEzNTU1LCAKKyAgICAxMzU1OSwgMCwgMCwgMCwgMCwgMTM1NjQsIDEzNTY5LCAwLCAwLCAxMzU3NCwgMTM1NzksIDEzNTg0LCAxMzU4OCwgMTM1OTMsIAorICAgIDEzNTk4LCAxMzYwMywgMTM2MDgsIDEzNjEzLCAxMzYxOCwgMTM2MjMsIDEzNjI4LCAxMzYzMywgMTM2MzgsIDEzNjQzLCAKKyAgICAxMzY0OCwgMTM2NTMsIDEzNjU4LCAxMzY2MywgMTM2NjgsIDEzNjczLCAxMzY3OCwgMCwgMTM2ODMsIDEzNjg3LCAxMzY5MiwgCisgICAgMTM2OTcsIDEzNzAyLCAxMzcwNiwgMTM3MTAsIDAsIDEzNzE1LCAxMzcyMCwgMCwgMTM3MjUsIDEzNzMwLCAwLCAxMzczNSwgCisgICAgMTM3NDAsIDAsIDAsIDEzNzQ0LCAwLCAxMzc0OSwgMTM3NTUsIDEzNzYwLCAxMzc2NiwgMTM3NzEsIDAsIDAsIDAsIDAsIAorICAgIDEzNzc3LCAxMzc4MywgMCwgMCwgMTM3ODksIDEzNzk1LCAxMzgwMSwgMCwgMCwgMCwgMTM4MDYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEzODExLCAxMzgxNiwgMTM4MjEsIDEzODI2LCAwLCAxMzgzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4MzYsIAorICAgIDEzODQxLCAxMzg0NSwgMTM4NDksIDEzODUzLCAxMzg1NywgMTM4NjEsIDEzODY1LCAxMzg3MCwgMTM4NzQsIDEzODc5LCAKKyAgICAxMzg4MywgMTM4ODcsIDEzODkxLCAxMzg5NSwgMTM5MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEzOTA2LCAxMzkxMSwgMTM5MTYsIDAsIDEzOTIxLCAxMzkyNSwgMTM5MzAsIDEzOTM0LCAxMzkzOSwgMTM5NDMsIDEzOTQ4LCAKKyAgICAxMzk1MywgMTM5NTgsIDAsIDEzOTY0LCAxMzk2OCwgMTM5NzMsIDAsIDEzOTc5LCAxMzk4MywgMTM5ODgsIDEzOTkyLCAKKyAgICAxMzk5NywgMTQwMDIsIDE0MDA3LCAxNDAxMiwgMTQwMTcsIDE0MDIyLCAxNDAyNywgMTQwMzIsIDE0MDM3LCAxNDA0MiwgCisgICAgMTQwNDcsIDE0MDUyLCAxNDA1NywgMTQwNjIsIDE0MDY3LCAxNDA3MiwgMTQwNzcsIDE0MDgyLCAwLCAxNDA4NywgMTQwOTEsIAorICAgIDE0MDk2LCAxNDEwMSwgMTQxMDYsIDE0MTEwLCAxNDExNCwgMCwgMTQxMTksIDE0MTI0LCAwLCAxNDEyOSwgMTQxMzQsIAorICAgIDE0MTM5LCAxNDE0NCwgMTQxNDksIDAsIDAsIDE0MTUzLCAxNDE1OCwgMTQxNjMsIDE0MTY5LCAxNDE3NCwgMTQxODAsIAorICAgIDE0MTg1LCAxNDE5MSwgMTQxOTcsIDE0MjA0LCAwLCAxNDIxMSwgMTQyMTYsIDE0MjIyLCAwLCAxNDIyOSwgMTQyMzQsIAorICAgIDE0MjQwLCAwLCAwLCAxNDI0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQyNDksIAorICAgIDE0MjU1LCAxNDI2MSwgMTQyNjcsIDAsIDAsIDE0Mjc0LCAxNDI3OSwgMTQyODMsIDE0Mjg3LCAxNDI5MSwgMTQyOTUsIAorICAgIDE0Mjk5LCAxNDMwMywgMTQzMDgsIDE0MzEyLCAxNDMxNywgMTQzMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MzI3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNDMzMiwgMTQzMzYsIDE0MzQwLCAwLCAxNDM0NCwgMTQzNDcsIDE0MzUxLCAxNDM1NCwgCisgICAgMTQzNTgsIDE0MzYxLCAxNDM2NSwgMTQzNjksIDAsIDAsIDE0MzczLCAxNDM3NiwgMCwgMCwgMTQzODAsIDE0MzgzLCAKKyAgICAxNDM4NywgMTQzOTAsIDE0Mzk0LCAxNDM5OCwgMTQ0MDIsIDE0NDA2LCAxNDQxMCwgMTQ0MTQsIDE0NDE4LCAxNDQyMiwgCisgICAgMTQ0MjYsIDE0NDMwLCAxNDQzNCwgMTQ0MzgsIDE0NDQyLCAxNDQ0NiwgMTQ0NTAsIDE0NDU0LCAxNDQ1OCwgMTQ0NjIsIDAsIAorICAgIDE0NDY2LCAxNDQ2OSwgMTQ0NzMsIDE0NDc3LCAxNDQ4MSwgMTQ0ODQsIDE0NDg3LCAwLCAxNDQ5MSwgMTQ0OTUsIDAsIAorICAgIDE0NDk5LCAxNDUwMywgMTQ1MDcsIDE0NTExLCAxNDUxNSwgMCwgMCwgMTQ1MTgsIDE0NTIyLCAxNDUyNiwgMTQ1MzEsIAorICAgIDE0NTM1LCAxNDU0MCwgMTQ1NDQsIDE0NTQ5LCAxNDU1NCwgMCwgMCwgMTQ1NjAsIDE0NTY0LCAwLCAwLCAxNDU2OSwgCisgICAgMTQ1NzMsIDE0NTc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDU4MiwgMTQ1ODgsIDAsIDAsIDAsIDAsIDE0NTk0LCAKKyAgICAxNDU5OCwgMCwgMTQ2MDIsIDE0NjA2LCAxNDYxMSwgMTQ2MTYsIDE0NjIxLCAwLCAwLCAxNDYyNywgMTQ2MzEsIDE0NjM0LCAKKyAgICAxNDYzNywgMTQ2NDAsIDE0NjQzLCAxNDY0NiwgMTQ2NDksIDE0NjUzLCAxNDY1NiwgMTQ2NjAsIDE0NjYzLCAxNDY2NywgCisgICAgMTQ2NzMsIDE0Njc5LCAxNDY4NSwgMTQ2OTEsIDE0Njk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDcwMywgCisgICAgMTQ3MDcsIDAsIDE0NzExLCAxNDcxNCwgMTQ3MTgsIDE0NzIxLCAxNDcyNSwgMTQ3MjgsIDAsIDAsIDAsIDE0NzMyLCAKKyAgICAxNDczNSwgMTQ3MzksIDAsIDE0NzQzLCAxNDc0NiwgMTQ3NTAsIDE0NzU0LCAwLCAwLCAwLCAxNDc1NywgMTQ3NjEsIDAsIAorICAgIDE0NzY1LCAwLCAxNDc2OSwgMTQ3NzMsIDAsIDAsIDAsIDE0Nzc3LCAxNDc4MSwgMCwgMCwgMCwgMTQ3ODUsIDE0Nzg5LCAKKyAgICAxNDc5MywgMCwgMCwgMCwgMTQ3OTYsIDE0Nzk5LCAxNDgwMiwgMTQ4MDYsIDE0ODEwLCAxNDgxNCwgMTQ4MTgsIDE0ODIyLCAKKyAgICAxNDgyNiwgMTQ4MzAsIDE0ODM0LCAxNDgzOCwgMCwgMCwgMCwgMCwgMTQ4NDEsIDE0ODQ2LCAxNDg1MCwgMTQ4NTUsIAorICAgIDE0ODU5LCAwLCAwLCAwLCAxNDg2NCwgMTQ4NjgsIDE0ODczLCAwLCAxNDg3OCwgMTQ4ODIsIDE0ODg3LCAxNDg5MiwgMCwgMCwgCisgICAgMTQ4OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNDkwNSwgMTQ5MDksIDE0OTEyLCAxNDkxNSwgMTQ5MTgsIDE0OTIxLCAxNDkyNCwgMTQ5MjcsIDE0OTMxLCAxNDkzNCwgCisgICAgMTQ5MzgsIDE0OTQyLCAxNDk0NywgMTQ5NTIsIDE0OTU2LCAxNDk2MCwgMTQ5NjQsIDE0OTY4LCAxNDk3MiwgMTQ5NzcsIAorICAgIDE0OTgxLCAwLCAwLCAwLCAwLCAwLCAxNDk4NCwgMTQ5OTAsIDE0OTk0LCAxNDk5OCwgMCwgMTUwMDIsIDE1MDA1LCAxNTAwOSwgCisgICAgMTUwMTIsIDE1MDE2LCAxNTAxOSwgMTUwMjMsIDE1MDI3LCAwLCAxNTAzMSwgMTUwMzQsIDE1MDM4LCAwLCAxNTA0MiwgCisgICAgMTUwNDUsIDE1MDQ5LCAxNTA1MywgMTUwNTYsIDE1MDYwLCAxNTA2NCwgMTUwNjgsIDE1MDcyLCAxNTA3NiwgMTUwODAsIAorICAgIDE1MDg0LCAxNTA4OCwgMTUwOTIsIDE1MDk2LCAxNTEwMCwgMTUxMDQsIDE1MTA4LCAxNTExMiwgMTUxMTYsIDE1MTIwLCAKKyAgICAxNTEyNCwgMTUxMjgsIDAsIDE1MTMyLCAxNTEzNSwgMTUxMzksIDE1MTQzLCAxNTE0NywgMTUxNTAsIDE1MTUzLCAxNTE1NywgCisgICAgMTUxNjEsIDE1MTY1LCAxNTE2OSwgMTUxNzMsIDE1MTc3LCAxNTE4MSwgMTUxODUsIDE1MTg5LCAwLCAwLCAwLCAxNTE5MiwgCisgICAgMTUxOTYsIDE1MjAxLCAxNTIwNSwgMTUyMTAsIDE1MjE0LCAxNTIxOSwgMTUyMjQsIDAsIDE1MjMwLCAxNTIzNCwgMTUyMzksIAorICAgIDAsIDE1MjQ0LCAxNTI0OCwgMTUyNTMsIDE1MjU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTI2MiwgMTUyNjYsIDAsIAorICAgIDE1MjcyLCAxNTI3NiwgMTUyODAsIDAsIDAsIDAsIDAsIDAsIDE1Mjg0LCAxNTI4OSwgMTUyOTQsIDE1Mjk5LCAwLCAwLCAKKyAgICAxNTMwNSwgMTUzMDksIDE1MzEyLCAxNTMxNSwgMTUzMTgsIDE1MzIxLCAxNTMyNCwgMTUzMjcsIDE1MzMxLCAxNTMzNCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUzMzgsIDE1MzUxLCAxNTM2MywgMTUzNzUsIDE1Mzg3LCAxNTM5OSwgMTU0MTEsIAorICAgIDE1NDIzLCAwLCAxNTQyNywgMTU0MzEsIDE1NDM1LCAwLCAxNTQzOSwgMTU0NDIsIDE1NDQ2LCAxNTQ0OSwgMTU0NTMsIAorICAgIDE1NDU2LCAxNTQ2MCwgMTU0NjQsIDAsIDE1NDY4LCAxNTQ3MSwgMTU0NzUsIDAsIDE1NDc5LCAxNTQ4MiwgMTU0ODYsIAorICAgIDE1NDkwLCAxNTQ5MywgMTU0OTcsIDE1NTAxLCAxNTUwNSwgMTU1MDksIDE1NTEzLCAxNTUxNywgMTU1MjEsIDE1NTI1LCAKKyAgICAxNTUyOSwgMTU1MzMsIDE1NTM3LCAxNTU0MSwgMTU1NDUsIDE1NTQ5LCAxNTU1MywgMTU1NTcsIDE1NTYxLCAxNTU2NSwgMCwgCisgICAgMTU1NjksIDE1NTcyLCAxNTU3NiwgMTU1ODAsIDE1NTg0LCAxNTU4NywgMTU1OTAsIDE1NTk0LCAxNTU5OCwgMTU2MDIsIDAsIAorICAgIDE1NjA2LCAxNTYxMCwgMTU2MTQsIDE1NjE4LCAxNTYyMiwgMCwgMCwgMTU2MjUsIDE1NjI5LCAxNTYzMywgMTU2MzgsIAorICAgIDE1NjQyLCAxNTY0NywgMTU2NTEsIDE1NjU2LCAxNTY2MSwgMCwgMTU2NjcsIDE1NjcxLCAxNTY3NiwgMCwgMTU2ODEsIAorICAgIDE1Njg1LCAxNTY5MCwgMTU2OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1Njk5LCAxNTcwMywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTU3MDksIDAsIDE1NzEzLCAxNTcxOCwgMTU3MjMsIDE1NzI4LCAwLCAwLCAxNTczNCwgMTU3MzgsIDE1NzQxLCAKKyAgICAxNTc0NCwgMTU3NDcsIDE1NzUwLCAxNTc1MywgMTU3NTYsIDE1NzYwLCAxNTc2MywgMCwgMTU3NjcsIDE1NzcxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTc3NSwgMTU3NzksIDE1NzgzLCAwLCAxNTc4NywgMTU3OTAsIAorICAgIDE1Nzk0LCAxNTc5NywgMTU4MDEsIDE1ODA0LCAxNTgwOCwgMTU4MTIsIDAsIDE1ODE2LCAxNTgxOSwgMTU4MjMsIDAsIAorICAgIDE1ODI3LCAxNTgzMCwgMTU4MzQsIDE1ODM4LCAxNTg0MSwgMTU4NDUsIDE1ODQ5LCAxNTg1MywgMTU4NTcsIDE1ODYxLCAKKyAgICAxNTg2NSwgMTU4NjksIDE1ODczLCAxNTg3NywgMTU4ODEsIDE1ODg1LCAxNTg4OSwgMTU4OTMsIDE1ODk3LCAxNTkwMSwgCisgICAgMTU5MDUsIDE1OTA5LCAxNTkxMywgMTU5MTcsIDE1OTIxLCAxNTkyNCwgMTU5MjgsIDE1OTMyLCAxNTkzNiwgMTU5MzksIAorICAgIDE1OTQyLCAxNTk0NiwgMTU5NTAsIDE1OTU0LCAxNTk1OCwgMTU5NjIsIDE1OTY2LCAxNTk3MCwgMTU5NzQsIDE1OTc4LCAKKyAgICAxNTk4MSwgMCwgMCwgMTU5ODUsIDE1OTg5LCAxNTk5NCwgMTU5OTgsIDE2MDAzLCAxNjAwNywgMTYwMTIsIDE2MDE3LCAwLCAKKyAgICAxNjAyMywgMTYwMjcsIDE2MDMyLCAwLCAxNjAzNywgMTYwNDEsIDE2MDQ2LCAxNjA1MSwgMTYwNTUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE2MDYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjA2NiwgMTYwNzIsIDE2MDc3LCAxNjA4MiwgMTYwODcsIAorICAgIDAsIDAsIDE2MDkzLCAxNjA5NywgMTYxMDAsIDE2MTAzLCAxNjEwNiwgMTYxMDksIDE2MTEyLCAxNjExNSwgMTYxMTksIAorICAgIDE2MTIyLCAxNjEyNiwgMTYxMzAsIDE2MTM1LCAxNjE0MCwgMTYxNDYsIDE2MTUyLCAwLCAwLCAwLCAxNjE1OCwgMTYxNjIsIAorICAgIDE2MTY4LCAxNjE3NCwgMTYxODAsIDE2MTg1LCAxNjE5MSwgMCwgMCwgMTYxOTcsIDE2MjAxLCAwLCAxNjIwNSwgMTYyMDksIAorICAgIDE2MjEzLCAxNjIxNywgMTYyMjEsIDE2MjI1LCAxNjIyOSwgMTYyMzMsIDE2MjM3LCAxNjI0MSwgMTYyNDUsIDE2MjQ5LCAKKyAgICAxNjI1MywgMTYyNTcsIDE2MjYxLCAxNjI2NSwgMTYyNjksIDE2MjczLCAwLCAwLCAwLCAxNjI3NywgMTYyODMsIDE2Mjg5LCAKKyAgICAxNjI5NSwgMTYzMDEsIDE2MzA3LCAxNjMxMywgMTYzMTksIDE2MzI1LCAxNjMzMSwgMTYzMzcsIDE2MzQzLCAxNjM1MSwgCisgICAgMTYzNTcsIDE2MzYzLCAxNjM2OSwgMTYzNzUsIDE2MzgxLCAxNjM4NywgMTYzOTMsIDE2Mzk5LCAxNjQwNSwgMTY0MTEsIAorICAgIDE2NDE3LCAwLCAxNjQyMywgMTY0MjksIDE2NDM1LCAxNjQ0MSwgMTY0NDcsIDE2NDUzLCAxNjQ1NywgMTY0NjMsIDE2NDY3LCAKKyAgICAwLCAxNjQ3MSwgMCwgMCwgMTY0NzcsIDE2NDgxLCAxNjQ4NywgMTY0OTMsIDE2NDk5LCAxNjUwMywgMTY1MDksIDAsIDAsIDAsIAorICAgIDE2NTEzLCAwLCAwLCAwLCAwLCAxNjUxNywgMTY1MjIsIDE2NTI5LCAxNjUzNiwgMTY1NDMsIDE2NTUwLCAwLCAxNjU1NywgMCwgCisgICAgMTY1NjQsIDE2NTY5LCAxNjU3NCwgMTY1ODEsIDE2NTg4LCAxNjU5NywgMTY2MDgsIDE2NjE3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNjYyMiwgMTY2MjgsIDE2NjMzLCAxNjYzOCwgMTY2NDMsIDE2NjQ4LCAxNjY1MywgMTY2NTgsIDE2NjY0LCAxNjY2OSwgMCwgCisgICAgMCwgMTY2NzUsIDE2NjgyLCAxNjY4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY2OTQsIDE2NzAxLCAKKyAgICAxNjcwOCwgMTY3MTUsIDE2NzIyLCAxNjcyOSwgMTY3MzYsIDE2NzQzLCAxNjc1MCwgMTY3NTcsIDE2NzY0LCAxNjc3MSwgCisgICAgMTY3NzgsIDE2Nzg1LCAxNjc5MiwgMTY3OTksIDE2ODA2LCAxNjgxMywgMTY4MjAsIDE2ODI3LCAxNjgzNCwgMTY4NDEsIAorICAgIDE2ODQ4LCAxNjg1NSwgMTY4NjIsIDE2ODY5LCAxNjg3NiwgMTY4ODMsIDE2ODkwLCAxNjg5NywgMTY5MDQsIDE2OTExLCAKKyAgICAxNjkxOCwgMTY5MjQsIDE2OTMxLCAxNjkzOCwgMTY5NDMsIDE2OTUwLCAxNjk1NSwgMTY5NjIsIDE2OTY5LCAxNjk3NiwgCisgICAgMTY5ODMsIDE2OTkwLCAxNjk5NywgMTcwMDMsIDE3MDEwLCAxNzAxNSwgMTcwMjEsIDE3MDI4LCAxNzAzNSwgMTcwNDIsIAorICAgIDE3MDQ4LCAxNzA1NSwgMTcwNjIsIDE3MDY5LCAxNzA3NSwgMTcwODIsIDAsIDAsIDAsIDAsIDE3MDg3LCAxNzA5NCwgCisgICAgMTcxMDAsIDE3MTA3LCAxNzExMywgMTcxMjIsIDE3MTMxLCAxNzEzNiwgMTcxNDEsIDE3MTQ2LCAxNzE1MywgMTcxNjAsIAorICAgIDE3MTY3LCAxNzE3NCwgMTcxNzksIDE3MTg0LCAxNzE4OSwgMTcxOTQsIDE3MTk5LCAxNzIwMywgMTcyMDcsIDE3MjExLCAKKyAgICAxNzIxNSwgMTcyMTksIDE3MjIzLCAxNzIyOCwgMTcyMzIsIDE3MjM3LCAxNzI0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTcyNDcsIDE3MjUyLCAwLCAxNzI1OSwgMCwgMCwgMTcyNjYsIDE3MjcxLCAwLCAxNzI3NiwgMCwgCisgICAgMCwgMTcyODMsIDAsIDAsIDAsIDAsIDAsIDAsIDE3Mjg4LCAxNzI5MywgMTcyOTcsIDE3MzA0LCAwLCAxNzMxMSwgMTczMTYsIAorICAgIDE3MzIxLCAxNzMyNiwgMTczMzMsIDE3MzQwLCAxNzM0NywgMCwgMTczNTQsIDE3MzU5LCAxNzM2NCwgMCwgMTczNzEsIDAsIAorICAgIDE3Mzc4LCAwLCAwLCAxNzM4MywgMTczOTAsIDAsIDE3Mzk3LCAxNzQwMSwgMTc0MDgsIDE3NDEyLCAxNzQxNywgMTc0MjUsIAorICAgIDE3NDMxLCAxNzQzNywgMTc0NDIsIDE3NDQ4LCAxNzQ1NCwgMTc0NjAsIDE3NDY1LCAwLCAxNzQ3MSwgMTc0NzksIDE3NDg2LCAKKyAgICAwLCAwLCAxNzQ5MywgMTc0OTgsIDE3NTA0LCAxNzUwOSwgMTc1MTUsIDAsIDE3NTIxLCAwLCAxNzUyNywgMTc1MzQsIAorICAgIDE3NTQxLCAxNzU0OCwgMTc1NTUsIDE3NTYwLCAwLCAwLCAxNzU2NCwgMTc1NjksIDE3NTczLCAxNzU3NywgMTc1ODEsIAorICAgIDE3NTg1LCAxNzU4OSwgMTc1OTMsIDE3NTk4LCAxNzYwMiwgMCwgMCwgMTc2MDcsIDE3NjEzLCAxNzYxOSwgMTc2MjYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NjMzLCAxNzYzNywgMTc2NDgsIDE3NjYzLCAxNzY3OCwgMTc2ODgsIDE3Njk5LCAKKyAgICAxNzcxMiwgMTc3MjMsIDE3NzI5LCAxNzczNywgMTc3NDcsIDE3NzUzLCAxNzc2MSwgMTc3NjUsIDE3NzcxLCAxNzc3NywgCisgICAgMTc3ODUsIDE3Nzk1LCAxNzgwMywgMTc4MTYsIDE3ODIyLCAxNzgzMCwgMTc4MzgsIDE3ODUwLCAxNzg1NywgMTc4NjUsIAorICAgIDE3ODczLCAxNzg4MSwgMTc4ODksIDE3ODk3LCAxNzkwNSwgMTc5MTUsIDE3OTE5LCAxNzkyMiwgMTc5MjUsIDE3OTI4LCAKKyAgICAxNzkzMSwgMTc5MzQsIDE3OTM3LCAxNzk0MSwgMTc5NDQsIDE3OTQ4LCAxNzk1MiwgMTc5NTYsIDE3OTYwLCAxNzk2NCwgCisgICAgMTc5NjgsIDE3OTcyLCAxNzk3NywgMTc5ODEsIDE3OTg2LCAxNzk5MSwgMTc5OTcsIDE4MDA3LCAxODAyMSwgMTgwMzEsIAorICAgIDE4MDM3LCAxODA0MywgMTgwNTEsIDE4MDU5LCAxODA2NywgMTgwNzUsIDE4MDgxLCAxODA4NywgMTgwOTAsIDE4MDk0LCAKKyAgICAxODA5OCwgMTgxMDIsIDE4MTA2LCAxODExMCwgMTgxMTQsIDAsIDE4MTE4LCAxODEyMiwgMTgxMjYsIDE4MTMwLCAxODEzNCwgCisgICAgMTgxMzgsIDE4MTQyLCAxODE0NiwgMTgxNTAsIDE4MTU0LCAxODE1OCwgMTgxNjIsIDE4MTY1LCAxODE2OSwgMTgxNzMsIAorICAgIDE4MTc3LCAxODE4MCwgMTgxODQsIDE4MTg4LCAxODE5MiwgMTgxOTYsIDE4MjAwLCAxODIwNCwgMTgyMDgsIDE4MjEyLCAKKyAgICAxODIxNSwgMTgyMTksIDE4MjIzLCAxODIyNywgMTgyMzEsIDE4MjM1LCAxODIzOCwgMTgyNDEsIDE4MjQ1LCAxODI1MSwgCisgICAgMTgyNTUsIDAsIDAsIDAsIDAsIDE4MjU5LCAxODI2NCwgMTgyNjgsIDE4MjczLCAxODI3NywgMTgyODIsIDE4Mjg3LCAKKyAgICAxODI5MywgMTgyOTgsIDE4MzA0LCAxODMwOCwgMTgzMTMsIDE4MzE3LCAxODMyMiwgMTgzMzIsIDE4MzM4LCAxODM0NCwgCisgICAgMTgzNTEsIDE4MzYxLCAxODM2NywgMTgzNzEsIDE4Mzc1LCAxODM4MSwgMTgzODcsIDE4Mzk1LCAxODQwMSwgMTg0MDksIAorICAgIDE4NDE3LCAxODQyNSwgMTg0MzUsIDE4NDQzLCAxODQ1MywgMTg0NTgsIDE4NDY0LCAxODQ3MCwgMTg0NzYsIDE4NDgyLCAKKyAgICAxODQ4OCwgMTg0OTQsIDAsIDE4NTAwLCAxODUwNiwgMTg1MTIsIDE4NTE4LCAxODUyNCwgMTg1MzAsIDE4NTM2LCAxODU0MiwgCisgICAgMTg1NDgsIDE4NTU0LCAxODU2MCwgMTg1NjYsIDE4NTcxLCAxODU3NywgMTg1ODMsIDE4NTg5LCAxODU5NCwgMTg2MDAsIAorICAgIDE4NjA2LCAxODYxMiwgMTg2MTgsIDE4NjI0LCAxODYzMCwgMTg2MzYsIDE4NjQyLCAxODY0NywgMTg2NTMsIDE4NjU5LCAKKyAgICAxODY2NSwgMTg2NzEsIDE4Njc3LCAxODY4MiwgMTg2ODcsIDE4NjkzLCAxODcwMSwgMTg3MDgsIDAsIDE4NzE2LCAxODcyMywgCisgICAgMTg3MzYsIDE4NzQzLCAxODc1MCwgMTg3NTgsIDE4NzY2LCAxODc3MiwgMTg3NzgsIDE4Nzg0LCAxODc5NCwgMTg3OTksIAorICAgIDE4ODA1LCAxODgxNSwgMTg4MjUsIDAsIDE4ODM1LCAxODg0NSwgMTg4NTMsIDE4ODY1LCAxODg3NywgMTg4ODMsIDE4ODk3LCAKKyAgICAxODkxMiwgMTg5MTcsIDE4OTIyLCAxODkzMCwgMTg5MzgsIDE4OTQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxODk1NCwgMTg5NTcsIDE4OTYxLCAxODk2NSwgMTg5NjksIDE4OTczLCAxODk3NywgMTg5ODEsIDE4OTg1LCAKKyAgICAxODk4OSwgMTg5OTMsIDE4OTk3LCAxOTAwMSwgMTkwMDUsIDE5MDA5LCAxOTAxMywgMTkwMTcsIDE5MDIxLCAxOTAyNSwgCisgICAgMTkwMjksIDE5MDMzLCAxOTAzNywgMTkwNDAsIDE5MDQ0LCAxOTA0OCwgMTkwNTIsIDE5MDU1LCAxOTA1OCwgMTkwNjIsIAorICAgIDE5MDY2LCAxOTA3MCwgMTkwNzQsIDE5MDc3LCAxOTA4MSwgMTkwODQsIDE5MDg5LCAxOTA5MiwgMTkwOTYsIDE5MDk5LCAKKyAgICAxOTEwMywgMTkxMDYsIDE5MTExLCAxOTExNCwgMTkxMTgsIDE5MTI1LCAxOTEzMCwgMTkxMzQsIDE5MTM5LCAxOTE0MywgCisgICAgMTkxNDgsIDE5MTUyLCAxOTE1NywgMTkxNjQsIDE5MTcwLCAxOTE3NSwgMTkxNzksIDE5MTgzLCAxOTE4NywgMTkxOTEsIAorICAgIDE5MTk1LCAxOTIwMCwgMTkyMDYsIDE5MjEyLCAxOTIxNywgMTkyMjMsIDE5MjI3LCAxOTIzMCwgMTkyMzMsIDE5MjM2LCAKKyAgICAxOTIzOSwgMTkyNDIsIDE5MjQ1LCAxOTI0OSwgMTkyNTIsIDE5MjU2LCAxOTI2MiwgMTkyNjYsIDE5MjcwLCAxOTI3NCwgCisgICAgMTkyNzgsIDE5MjgyLCAxOTI4NiwgMTkyOTAsIDE5Mjk0LCAxOTI5OSwgMTkzMDMsIDE5MzA4LCAxOTMxMywgMTkzMTksIAorICAgIDE5MzI0LCAxOTMzMCwgMTkzMzYsIDE5MzQyLCAxOTM0OCwgMTkzNTQsIDE5MzYyLCAxOTM2OSwgMTkzNzcsIDE5Mzg1LCAKKyAgICAxOTM5NCwgMTk0MDMsIDE5NDE0LCAxOTQyNCwgMTk0MzQsIDE5NDQ1LCAxOTQ1NiwgMTk0NjYsIDE5NDc2LCAxOTQ4NiwgCisgICAgMTk0OTYsIDE5NTA2LCAxOTUxNiwgMTk1MjYsIDE5NTM2LCAxOTU0NCwgMTk1NTEsIDE5NTU3LCAxOTU2NCwgMTk1NjksIAorICAgIDE5NTc1LCAxOTU4MSwgMTk1ODcsIDE5NTkzLCAxOTU5OSwgMTk2MDUsIDE5NjExLCAxOTYxNywgMTk2MjMsIDE5NjI5LCAKKyAgICAxOTYzNSwgMTk2NDAsIDE5NjQ4LCAxOTY1NSwgMTk2NjEsIDE5NjY4LCAxOTY3NiwgMTk2ODIsIDE5Njg4LCAxOTY5NCwgCisgICAgMTk3MDAsIDE5NzA4LCAxOTcxNiwgMTk3MjYsIDE5NzM0LCAxOTc0MiwgMTk3NDgsIDE5NzUzLCAxOTc1OCwgMTk3NjMsIAorICAgIDE5NzY4LCAxOTc3MywgMTk3NzgsIDE5Nzg0LCAxOTc4OSwgMTk3OTUsIDE5ODAxLCAxOTgwNywgMTk4MTMsIDE5ODIwLCAKKyAgICAxOTgyNSwgMTk4MzEsIDE5ODM2LCAxOTg0MSwgMTk4NDYsIDE5ODUxLCAxOTg1NiwgMTk4NjEsIDE5ODY2LCAxOTg3MSwgCisgICAgMTk4NzYsIDE5ODgxLCAxOTg4NiwgMTk4OTEsIDE5ODk2LCAxOTkwMSwgMTk5MDYsIDE5OTExLCAxOTkxNiwgMTk5MjEsIAorICAgIDE5OTI2LCAxOTkzMSwgMTk5MzYsIDE5OTQxLCAxOTk0NiwgMTk5NTEsIDE5OTU2LCAxOTk2MSwgMTk5NjYsIDE5OTcxLCAKKyAgICAxOTk3NiwgMTk5ODEsIDE5OTg2LCAxOTk5MSwgMTk5OTYsIDIwMDAxLCAyMDAwNiwgMjAwMTEsIDIwMDE2LCAwLCAyMDAyMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjAwMjYsIDAsIDAsIDIwMDMxLCAyMDAzNSwgMjAwMzksIDIwMDQzLCAyMDA0NywgMjAwNTEsIAorICAgIDIwMDU1LCAyMDA1OSwgMjAwNjMsIDIwMDY3LCAyMDA3MSwgMjAwNzUsIDIwMDc5LCAyMDA4MywgMjAwODcsIDIwMDkxLCAKKyAgICAyMDA5NSwgMjAwOTksIDIwMTAzLCAyMDEwNywgMjAxMTEsIDIwMTE1LCAyMDExOSwgMjAxMjMsIDIwMTI3LCAyMDEzMSwgCisgICAgMjAxMzUsIDIwMTM5LCAyMDE0MywgMjAxNDcsIDIwMTUxLCAyMDE1NSwgMjAxNTksIDIwMTYzLCAyMDE2NywgMjAxNzEsIAorICAgIDIwMTc1LCAyMDE3OSwgMjAxODMsIDIwMTg3LCAyMDE5MSwgMjAxOTUsIDIwMjAxLCAyMDIwNSwgMjAyMTAsIDIwMjE1LCAKKyAgICAyMDIxOSwgMjAyMjQsIDIwMjI5LCAyMDIzMywgMjAyMzcsIDIwMjQxLCAyMDI0NSwgMjAyNDksIDIwMjUzLCAyMDI1NywgCisgICAgMjAyNjEsIDIwMjY1LCAyMDI2OSwgMjAyNzMsIDIwMjc3LCAyMDI4MSwgMjAyODUsIDIwMjg5LCAyMDI5MywgMjAyOTcsIAorICAgIDIwMzAxLCAyMDMwNSwgMjAzMDksIDIwMzEzLCAyMDMxNywgMjAzMjEsIDIwMzI1LCAyMDMyOSwgMjAzMzMsIDIwMzM3LCAKKyAgICAyMDM0MSwgMjAzNDUsIDIwMzQ5LCAyMDM1MywgMjAzNTcsIDIwMzYxLCAyMDM2NSwgMjAzNjksIDIwMzczLCAyMDM3NywgCisgICAgMjAzODEsIDIwMzg1LCAyMDM4OSwgMjAzOTMsIDIwMzk3LCAyMDQwMSwgMjA0MDUsIDIwNDA5LCAyMDQxMywgMjA0MTcsIAorICAgIDIwNDIxLCAyMDQyNSwgMjA0MjksIDIwNDMzLCAyMDQzNywgMjA0NDEsIDIwNDQ1LCAyMDQ0OSwgMjA0NTMsIDIwNDU3LCAKKyAgICAyMDQ2MSwgMjA0NjUsIDIwNDY5LCAyMDQ3MywgMjA0NzcsIDIwNDgxLCAyMDQ4NSwgMjA0ODksIDIwNDkzLCAyMDQ5NywgCisgICAgMjA1MDEsIDIwNTA1LCAyMDUwOSwgMjA1MTMsIDIwNTE3LCAyMDUyMSwgMjA1MjUsIDIwNTI5LCAyMDUzMywgMjA1MzcsIAorICAgIDIwNTQxLCAyMDU0NSwgMjA1NDksIDIwNTUzLCAyMDU1NywgMjA1NjEsIDIwNTY1LCAyMDU2OSwgMjA1NzMsIDIwNTc3LCAKKyAgICAyMDU4MSwgMjA1ODUsIDIwNTg5LCAyMDU5MywgMjA1OTcsIDIwNjAxLCAyMDYwNSwgMjA2MDksIDIwNjEzLCAyMDYxNywgCisgICAgMjA2MjAsIDIwNjI0LCAyMDYyNywgMjA2MzEsIDIwNjM1LCAyMDYzOCwgMjA2NDIsIDIwNjQ2LCAyMDY0OSwgMjA2NTMsIAorICAgIDIwNjU3LCAyMDY2MSwgMjA2NjUsIDIwNjY4LCAyMDY3MiwgMjA2NzYsIDIwNjgwLCAyMDY4NCwgMjA2ODgsIDIwNjkyLCAKKyAgICAyMDY5NSwgMjA2OTksIDIwNzAzLCAyMDcwNywgMjA3MTEsIDIwNzE1LCAyMDcxOSwgMjA3MjMsIDIwNzI3LCAyMDczMSwgCisgICAgMjA3MzUsIDIwNzM5LCAyMDc0MywgMjA3NDcsIDIwNzUxLCAyMDc1NSwgMjA3NTksIDIwNzYzLCAyMDc2NywgMjA3NzEsIAorICAgIDIwNzc1LCAyMDc3OSwgMjA3ODMsIDIwNzg3LCAyMDc5MSwgMjA3OTUsIDIwNzk5LCAyMDgwMywgMjA4MDcsIDIwODExLCAKKyAgICAyMDgxNSwgMjA4MTksIDIwODIzLCAyMDgyNywgMjA4MzEsIDIwODM1LCAyMDgzOSwgMjA4NDMsIDIwODQ3LCAyMDg1MSwgCisgICAgMjA4NTUsIDIwODU5LCAyMDg2MywgMjA4NjcsIDIwODcxLCAyMDg3NSwgMjA4NzksIDIwODgzLCAyMDg4NywgMjA4OTEsIAorICAgIDIwODk1LCAyMDg5OSwgMjA5MDMsIDIwOTA3LCAyMDkxMSwgMjA5MTUsIDIwOTE5LCAyMDkyMywgMjA5MjcsIDIwOTMxLCAKKyAgICAyMDkzNSwgMjA5MzksIDIwOTQzLCAyMDk0NywgMjA5NTEsIDIwOTU1LCAyMDk1OSwgMjA5NjMsIDIwOTY3LCAyMDk3MSwgCisgICAgMjA5NzUsIDIwOTc5LCAyMDk4MywgMjA5ODcsIDIwOTkxLCAyMDk5NSwgMjA5OTksIDIxMDAzLCAyMTAwNywgMjEwMTEsIAorICAgIDIxMDE1LCAyMTAxOSwgMjEwMjMsIDIxMDI3LCAyMTAzMSwgMjEwMzUsIDIxMDM5LCAyMTA0MywgMjEwNDcsIDIxMDUxLCAKKyAgICAyMTA1NSwgMjEwNTksIDIxMDYzLCAyMTA2NywgMjEwNzEsIDIxMDc1LCAyMTA3OSwgMjEwODMsIDIxMDg3LCAyMTA5MSwgCisgICAgMjEwOTUsIDIxMDk5LCAyMTEwMywgMjExMDcsIDIxMTExLCAyMTExNSwgMjExMTksIDIxMTIzLCAyMTEyNywgMjExMzEsIAorICAgIDIxMTM1LCAyMTEzOSwgMjExNDMsIDIxMTQ3LCAyMTE1MSwgMjExNTUsIDIxMTU5LCAyMTE2MywgMjExNjcsIDIxMTcxLCAKKyAgICAyMTE3NSwgMjExNzksIDIxMTgzLCAyMTE4NywgMjExOTEsIDIxMTk1LCAyMTE5OSwgMjEyMDMsIDIxMjA3LCAyMTIxMSwgCisgICAgMjEyMTUsIDIxMjE5LCAyMTIyMywgMjEyMjcsIDIxMjMxLCAyMTIzNSwgMjEyMzksIDIxMjQzLCAyMTI0NywgMjEyNTAsIAorICAgIDIxMjU0LCAyMTI1OCwgMjEyNjIsIDIxMjY2LCAyMTI3MCwgMjEyNzQsIDIxMjc4LCAyMTI4MiwgMjEyODYsIDIxMjkwLCAKKyAgICAyMTI5NCwgMjEyOTgsIDIxMzAyLCAyMTMwNiwgMjEzMTAsIDIxMzE0LCAyMTMxOCwgMjEzMjIsIDIxMzI2LCAyMTMzMCwgCisgICAgMjEzMzQsIDIxMzM4LCAyMTM0MiwgMjEzNDUsIDIxMzQ5LCAyMTM1MywgMjEzNTcsIDIxMzYxLCAyMTM2NSwgMjEzNjksIAorICAgIDIxMzczLCAyMTM3NywgMjEzODEsIDIxMzg1LCAyMTM4OSwgMjEzOTMsIDIxMzk3LCAyMTQwMSwgMjE0MDUsIDIxNDA5LCAKKyAgICAyMTQxMywgMjE0MTcsIDIxNDIxLCAyMTQyNSwgMjE0MjksIDIxNDMzLCAyMTQzNywgMjE0NDEsIDIxNDQ1LCAyMTQ0OSwgCisgICAgMjE0NTMsIDIxNDU3LCAyMTQ2MSwgMjE0NjUsIDIxNDY5LCAyMTQ3MywgMjE0NzcsIDIxNDgxLCAyMTQ4NSwgMjE0ODksIAorICAgIDIxNDkzLCAyMTQ5NywgMjE1MDEsIDIxNTA1LCAyMTUwOSwgMjE1MTMsIDIxNTE3LCAyMTUyMSwgMjE1MjUsIDIxNTI5LCAKKyAgICAyMTUzMywgMCwgMjE1MzcsIDIxNTQxLCAyMTU0NSwgMjE1NDksIDAsIDAsIDIxNTUzLCAyMTU1NywgMjE1NjEsIDIxNTY1LCAKKyAgICAyMTU2OSwgMjE1NzMsIDIxNTc3LCAwLCAyMTU4MSwgMCwgMjE1ODUsIDIxNTg5LCAyMTU5MywgMjE1OTcsIDAsIDAsIAorICAgIDIxNjAxLCAyMTYwNSwgMjE2MDksIDIxNjEzLCAyMTYxNywgMjE2MjEsIDIxNjI1LCAyMTYyOSwgMjE2MzMsIDIxNjM3LCAKKyAgICAyMTY0MSwgMjE2NDUsIDIxNjQ5LCAyMTY1MywgMjE2NTcsIDIxNjYxLCAyMTY2NSwgMjE2NjksIDIxNjczLCAyMTY3NywgCisgICAgMjE2ODEsIDIxNjg1LCAyMTY4OSwgMjE2OTIsIDIxNjk2LCAyMTcwMCwgMjE3MDQsIDIxNzA4LCAyMTcxMiwgMjE3MTYsIAorICAgIDIxNzIwLCAyMTcyNCwgMjE3MjgsIDIxNzMyLCAyMTczNiwgMjE3NDAsIDIxNzQ0LCAyMTc0OCwgMjE3NTIsIDIxNzU2LCAKKyAgICAyMTc2MCwgMCwgMjE3NjQsIDIxNzY4LCAyMTc3MiwgMjE3NzYsIDAsIDAsIDIxNzgwLCAyMTc4NCwgMjE3ODgsIDIxNzkyLCAKKyAgICAyMTc5NiwgMjE4MDAsIDIxODA0LCAyMTgwOCwgMjE4MTIsIDIxODE2LCAyMTgyMCwgMjE4MjQsIDIxODI4LCAyMTgzMiwgCisgICAgMjE4MzYsIDIxODQwLCAyMTg0NCwgMjE4NDksIDIxODU0LCAyMTg1OSwgMjE4NjUsIDIxODcxLCAyMTg3NiwgMjE4ODEsIAorICAgIDIxODg3LCAyMTg5MCwgMjE4OTQsIDIxODk4LCAyMTkwMiwgMjE5MDYsIDIxOTEwLCAyMTkxNCwgMjE5MTgsIDAsIDIxOTIyLCAKKyAgICAyMTkyNiwgMjE5MzAsIDIxOTM0LCAwLCAwLCAyMTkzOCwgMjE5NDIsIDIxOTQ2LCAyMTk1MCwgMjE5NTQsIDIxOTU4LCAKKyAgICAyMTk2MiwgMCwgMjE5NjYsIDAsIDIxOTcwLCAyMTk3NCwgMjE5NzgsIDIxOTgyLCAwLCAwLCAyMTk4NiwgMjE5OTAsIAorICAgIDIxOTk0LCAyMTk5OCwgMjIwMDIsIDIyMDA2LCAyMjAxMCwgMjIwMTQsIDIyMDE4LCAyMjAyMywgMjIwMjgsIDIyMDMzLCAKKyAgICAyMjAzOSwgMjIwNDUsIDIyMDUwLCAwLCAyMjA1NSwgMjIwNTksIDIyMDYzLCAyMjA2NywgMjIwNzEsIDIyMDc1LCAyMjA3OSwgCisgICAgMjIwODMsIDIyMDg3LCAyMjA5MSwgMjIwOTUsIDIyMDk5LCAyMjEwMywgMjIxMDcsIDIyMTExLCAyMjExNSwgMjIxMTksIAorICAgIDIyMTIyLCAyMjEyNiwgMjIxMzAsIDIyMTM0LCAyMjEzOCwgMjIxNDIsIDIyMTQ2LCAyMjE1MCwgMjIxNTQsIDIyMTU4LCAKKyAgICAyMjE2MiwgMjIxNjYsIDIyMTcwLCAyMjE3NCwgMjIxNzgsIDIyMTgyLCAyMjE4NiwgMjIxOTAsIDIyMTk0LCAyMjE5OCwgCisgICAgMjIyMDIsIDIyMjA2LCAyMjIxMCwgMjIyMTQsIDIyMjE4LCAyMjIyMiwgMjIyMjYsIDIyMjMwLCAyMjIzNCwgMjIyMzgsIAorICAgIDIyMjQyLCAyMjI0NiwgMjIyNTAsIDIyMjU0LCAyMjI1OCwgMjIyNjIsIDIyMjY2LCAyMjI3MCwgMjIyNzQsIDIyMjc4LCAwLCAKKyAgICAyMjI4MiwgMjIyODYsIDIyMjkwLCAyMjI5NCwgMCwgMCwgMjIyOTgsIDIyMzAyLCAyMjMwNiwgMjIzMTAsIDIyMzE0LCAKKyAgICAyMjMxOCwgMjIzMjIsIDIyMzI2LCAyMjMzMCwgMjIzMzQsIDIyMzM4LCAyMjM0MiwgMjIzNDYsIDIyMzUwLCAyMjM1NCwgCisgICAgMjIzNTgsIDIyMzYyLCAyMjM2NiwgMjIzNzAsIDIyMzc0LCAyMjM3OCwgMjIzODIsIDIyMzg2LCAyMjM5MCwgMjIzOTQsIAorICAgIDIyMzk4LCAyMjQwMiwgMjI0MDYsIDIyNDEwLCAyMjQxNCwgMjI0MTgsIDIyNDIyLCAyMjQyNiwgMjI0MzAsIDIyNDM0LCAKKyAgICAyMjQzOCwgMjI0NDIsIDIyNDQ2LCAyMjQ1MCwgMjI0NTQsIDIyNDU4LCAyMjQ2MiwgMjI0NjYsIDIyNDcwLCAyMjQ3NCwgCisgICAgMjI0NzgsIDIyNDgyLCAyMjQ4NiwgMjI0OTAsIDIyNDk0LCAyMjQ5OCwgMjI1MDIsIDIyNTA2LCAyMjUxMCwgMjI1MTQsIAorICAgIDIyNTE4LCAyMjUyMiwgMjI1MjUsIDIyNTI5LCAyMjUzMywgMjI1MzcsIDIyNTQxLCAyMjU0NSwgMjI1NDksIDIyNTUzLCAKKyAgICAyMjU1NywgMjI1NjEsIDAsIDAsIDIyNTY1LCAyMjU3NCwgMjI1ODAsIDIyNTg1LCAyMjU4OSwgMjI1OTIsIDIyNTk3LCAKKyAgICAyMjYwMCwgMjI2MDMsIDIyNjA2LCAyMjYxMSwgMjI2MTUsIDIyNjIwLCAyMjYyMywgMjI2MjYsIDIyNjI5LCAyMjYzMiwgCisgICAgMjI2MzUsIDIyNjM4LCAyMjY0MiwgMjI2NDUsIDIyNjQ5LCAyMjY1MywgMjI2NTcsIDIyNjYxLCAyMjY2NSwgMjI2NjksIAorICAgIDIyNjczLCAyMjY3NywgMjI2ODEsIDIyNjg1LCAyMjY4OSwgMCwgMCwgMCwgMjI2OTUsIDIyNzAxLCAyMjcwNSwgMjI3MDksIAorICAgIDIyNzEzLCAyMjcxOSwgMjI3MjMsIDIyNzI3LCAyMjczMSwgMjI3MzcsIDIyNzQxLCAyMjc0NSwgMjI3NDksIDIyNzU1LCAKKyAgICAyMjc1OSwgMjI3NjMsIDIyNzY3LCAyMjc3MywgMjI3NzksIDIyNzg1LCAyMjc5MywgMjI3OTksIDIyODA1LCAyMjgxMSwgCisgICAgMjI4MTcsIDIyODIzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjgyOSwgMjI4MzIsIDIyODM1LCAyMjgzOCwgMjI4NDEsIDIyODQ0LCAKKyAgICAyMjg0OCwgMjI4NTIsIDIyODU1LCAyMjg1OSwgMjI4NjMsIDIyODY3LCAyMjg3MSwgMjI4NzUsIDIyODc4LCAyMjg4MiwgCisgICAgMjI4ODYsIDIyODkwLCAyMjg5NCwgMjI4OTgsIDIyOTAyLCAyMjkwNiwgMjI5MTAsIDIyOTE0LCAyMjkxOCwgMjI5MjIsIAorICAgIDIyOTI1LCAyMjkyOSwgMjI5MzMsIDIyOTM3LCAyMjk0MSwgMjI5NDUsIDIyOTQ5LCAyMjk1MywgMjI5NTcsIDIyOTYxLCAKKyAgICAyMjk2NSwgMjI5NjksIDIyOTczLCAyMjk3NywgMjI5ODEsIDIyOTg1LCAyMjk4OSwgMjI5OTMsIDIyOTk3LCAyMzAwMSwgCisgICAgMjMwMDQsIDIzMDA4LCAyMzAxMiwgMjMwMTYsIDIzMDIwLCAyMzAyNCwgMjMwMjgsIDIzMDMyLCAyMzAzNiwgMjMwNDAsIAorICAgIDIzMDQ0LCAyMzA0OCwgMjMwNTIsIDIzMDU2LCAyMzA2MCwgMjMwNjQsIDIzMDY4LCAyMzA3MiwgMjMwNzYsIDIzMDgwLCAKKyAgICAyMzA4NCwgMjMwODgsIDIzMDkyLCAyMzA5NiwgMjMxMDAsIDIzMTA0LCAyMzEwOCwgMjMxMTIsIDIzMTE2LCAyMzEyMCwgCisgICAgMjMxMjQsIDIzMTI4LCAyMzEzMiwgMjMxMzYsIDIzMTM5LCAyMzE0MywgMjMxNDcsIDIzMTUxLCAyMzE1NSwgMjMxNTksIDAsIAorICAgIDAsIDIzMTYzLCAyMzE2OCwgMjMxNzMsIDIzMTc4LCAyMzE4MywgMjMxODgsIDAsIDAsIDIzMTkzLCAyMzE5NywgMjMyMDAsIAorICAgIDIzMjA0LCAyMzIwNywgMjMyMTEsIDIzMjE0LCAyMzIxOCwgMjMyMjQsIDIzMjI5LCAyMzIzMywgMjMyMzYsIDIzMjQwLCAKKyAgICAyMzI0NCwgMjMyNDksIDIzMjUzLCAyMzI1OCwgMjMyNjIsIDIzMjY3LCAyMzI3MSwgMjMyNzYsIDIzMjgwLCAyMzI4NSwgCisgICAgMjMyOTEsIDIzMjk1LCAyMzMwMCwgMjMzMDQsIDIzMzA5LCAyMzMxNSwgMjMzMTksIDIzMzI1LCAyMzMzMSwgMjMzMzUsIAorICAgIDIzMzQwLCAyMzM0OCwgMjMzNTYsIDIzMzYzLCAyMzM2OCwgMjMzNzMsIDIzMzgyLCAyMzM4OCwgMjMzOTYsIDIzNDAxLCAKKyAgICAyMzQwNywgMjM0MTEsIDIzNDE1LCAyMzQxOSwgMjM0MjMsIDIzNDI3LCAyMzQzMSwgMjM0MzUsIDIzNDM5LCAyMzQ0MywgCisgICAgMjM0NDcsIDIzNDUzLCAyMzQ1OCwgMjM0NjMsIDIzNDY2LCAyMzQ3MCwgMjM0NzQsIDIzNDc5LCAyMzQ4MywgMjM0ODgsIAorICAgIDIzNDkyLCAyMzQ5NywgMjM1MDEsIDIzNTA2LCAyMzUxMCwgMjM1MTUsIDIzNTE5LCAyMzUyNCwgMjM1MjgsIDIzNTMzLCAKKyAgICAyMzUzOSwgMjM1NDMsIDIzNTQ4LCAyMzU1MywgMjM1NTcsIDIzNTYxLCAyMzU2NSwgMjM1NjksIDIzNTcyLCAyMzU3NiwgCisgICAgMjM1ODIsIDIzNTg3LCAyMzU5MiwgMjM1OTYsIDIzNjAwLCAyMzYwNCwgMjM2MDksIDIzNjEzLCAyMzYxOCwgMjM2MjIsIAorICAgIDIzNjI3LCAyMzYzMCwgMjM2MzQsIDIzNjM4LCAyMzY0MywgMjM2NDcsIDIzNjUyLCAyMzY1NiwgMjM2NjEsIDIzNjY3LCAKKyAgICAyMzY3MSwgMjM2NzUsIDIzNjc5LCAyMzY4MywgMjM2ODcsIDIzNjkxLCAyMzY5NSwgMjM2OTksIDIzNzAzLCAyMzcwNywgCisgICAgMjM3MTEsIDIzNzE3LCAyMzcyMCwgMjM3MjQsIDIzNzI4LCAyMzczMywgMjM3MzcsIDIzNzQyLCAyMzc0NiwgMjM3NTEsIAorICAgIDIzNzU1LCAyMzc2MCwgMjM3NjQsIDIzNzY5LCAyMzc3MywgMjM3NzgsIDIzNzgyLCAyMzc4NywgMjM3OTMsIDIzNzk3LCAKKyAgICAyMzgwMSwgMjM4MDcsIDIzODEzLCAyMzgxOSwgMjM4MjUsIDIzODI5LCAyMzgzMywgMjM4MzcsIDIzODQxLCAyMzg0NSwgCisgICAgMjM4NDksIDIzODU1LCAyMzg1OSwgMjM4NjMsIDIzODY3LCAyMzg3MiwgMjM4NzYsIDIzODgxLCAyMzg4NSwgMjM4OTAsIAorICAgIDIzODk0LCAyMzg5OSwgMjM5MDMsIDIzOTA4LCAyMzkxMiwgMjM5MTcsIDIzOTIxLCAyMzkyNiwgMjM5MzIsIDIzOTM2LCAKKyAgICAyMzk0MiwgMjM5NDYsIDIzOTUwLCAyMzk1NCwgMjM5NTgsIDIzOTYyLCAyMzk2NiwgMjM5NzIsIDIzOTc1LCAyMzk3OSwgCisgICAgMjM5ODMsIDIzOTg4LCAyMzk5MiwgMjM5OTcsIDI0MDAxLCAyNDAwNiwgMjQwMTAsIDI0MDE1LCAyNDAxOSwgMjQwMjQsIAorICAgIDI0MDI4LCAyNDAzMywgMjQwMzcsIDI0MDQyLCAyNDA0OCwgMjQwNTIsIDI0MDU3LCAyNDA2MSwgMjQwNjcsIDI0MDczLCAKKyAgICAyNDA3NywgMjQwODEsIDI0MDg1LCAyNDA4OSwgMjQwOTMsIDI0MDk3LCAyNDEwMywgMjQxMDcsIDI0MTExLCAyNDExNSwgCisgICAgMjQxMjAsIDI0MTI0LCAyNDEyOSwgMjQxMzMsIDI0MTM4LCAyNDE0NCwgMjQxNDgsIDI0MTUzLCAyNDE1NywgMjQxNjEsIAorICAgIDI0MTY1LCAyNDE2OSwgMjQxNzMsIDI0MTc3LCAyNDE4MSwgMjQxODcsIDI0MTkxLCAyNDE5NSwgMjQxOTksIDI0MjA0LCAKKyAgICAyNDIwOCwgMjQyMTMsIDI0MjE3LCAyNDIyMiwgMjQyMjYsIDI0MjMxLCAyNDIzNSwgMjQyNDAsIDI0MjQ0LCAyNDI0OSwgCisgICAgMjQyNTMsIDI0MjU4LCAyNDI2MSwgMjQyNjUsIDI0MjY5LCAyNDI3MywgMjQyNzcsIDI0MjgxLCAyNDI4NSwgMjQyODksIAorICAgIDI0MjkzLCAyNDI5OSwgMjQzMDMsIDI0MzA3LCAyNDMxMSwgMjQzMTYsIDI0MzIwLCAyNDMyNSwgMjQzMjksIDI0MzM0LCAKKyAgICAyNDMzOCwgMjQzNDMsIDI0MzQ3LCAyNDM1MiwgMjQzNTYsIDI0MzYxLCAyNDM2NSwgMjQzNzAsIDI0Mzc2LCAyNDM3OSwgCisgICAgMjQzODQsIDI0Mzg4LCAyNDM5MywgMjQzOTksIDI0NDA1LCAyNDQxMSwgMjQ0MTcsIDI0NDIzLCAyNDQyOSwgMjQ0MzUsIAorICAgIDI0NDM5LCAyNDQ0MywgMjQ0NDcsIDI0NDUxLCAyNDQ1NSwgMjQ0NTksIDI0NDYzLCAyNDQ2NywgMjQ0NzIsIDI0NDc2LCAKKyAgICAyNDQ4MSwgMjQ0ODUsIDI0NDkwLCAyNDQ5NCwgMjQ0OTksIDI0NTAzLCAyNDUwOCwgMjQ1MTIsIDI0NTE3LCAyNDUyMSwgCisgICAgMjQ1MjYsIDI0NTMwLCAyNDUzNCwgMjQ1MzgsIDI0NTQyLCAyNDU0NiwgMjQ1NTAsIDI0NTU0LCAyNDU2MCwgMjQ1NjMsIAorICAgIDI0NTY3LCAyNDU3MSwgMjQ1NzYsIDI0NTgwLCAyNDU4NSwgMjQ1ODksIDI0NTk0LCAyNDU5OCwgMjQ2MDMsIDI0NjA3LCAKKyAgICAyNDYxMiwgMjQ2MTYsIDI0NjIxLCAyNDYyNSwgMjQ2MzAsIDI0NjM2LCAyNDY0MCwgMjQ2NDYsIDI0NjUxLCAyNDY1NywgCisgICAgMjQ2NjEsIDI0NjY3LCAyNDY3MiwgMjQ2NzYsIDI0NjgwLCAyNDY4NCwgMjQ2ODgsIDI0NjkyLCAyNDY5NywgMjQ3MDEsIAorICAgIDI0NzA1LCAyNDcxMCwgMjQ3MTQsIDI0NzE5LCAyNDcyMiwgMjQ3MjYsIDI0NzMwLCAyNDczNCwgMjQ3MzgsIDI0NzQyLCAKKyAgICAyNDc0NiwgMjQ3NTAsIDI0NzU0LCAyNDc1OCwgMjQ3NjIsIDI0NzY2LCAyNDc3MSwgMjQ3NzUsIDI0Nzc5LCAyNDc4NSwgCisgICAgMjQ3ODksIDI0Nzk1LCAyNDc5OSwgMjQ4MDUsIDI0ODA5LCAyNDgxMywgMjQ4MTcsIDI0ODIxLCAyNDgyNSwgMjQ4MzAsIAorICAgIDI0ODM0LCAyNDgzOCwgMjQ4NDIsIDI0ODQ2LCAyNDg1MCwgMjQ4NTQsIDI0ODU4LCAyNDg2MiwgMjQ4NjYsIDI0ODcwLCAKKyAgICAyNDg3NiwgMjQ4ODIsIDI0ODg4LCAyNDg5NCwgMjQ5MDAsIDI0OTA1LCAyNDkxMSwgMjQ5MTcsIDI0OTIzLCAyNDkyNywgCisgICAgMjQ5MzEsIDI0OTM1LCAyNDkzOSwgMjQ5NDMsIDI0OTQ3LCAyNDk1MSwgMjQ5NTUsIDI0OTU5LCAyNDk2MywgMjQ5NjcsIAorICAgIDI0OTcxLCAyNDk3NSwgMjQ5ODAsIDI0OTg1LCAyNDk5MCwgMjQ5OTUsIDI0OTk5LCAyNTAwMywgMjUwMDcsIDI1MDExLCAKKyAgICAyNTAxNSwgMjUwMTksIDI1MDIzLCAyNTAyNywgMjUwMzEsIDI1MDM3LCAyNTA0MywgMjUwNDksIDI1MDU1LCAyNTA2MSwgCisgICAgMjUwNjcsIDI1MDczLCAyNTA3OSwgMjUwODUsIDI1MDg5LCAyNTA5MywgMjUwOTcsIDI1MTAxLCAyNTEwNSwgMjUxMDksIAorICAgIDI1MTEzLCAyNTExOSwgMjUxMjUsIDI1MTMxLCAyNTEzNywgMjUxNDMsIDI1MTQ5LCAyNTE1NSwgMjUxNjEsIDI1MTY3LCAKKyAgICAyNTE3MiwgMjUxNzcsIDI1MTgyLCAyNTE4NywgMjUxOTMsIDI1MTk5LCAyNTIwNSwgMjUyMTEsIDI1MjE3LCAyNTIyMywgCisgICAgMjUyMjksIDI1MjM1LCAyNTI0MSwgMjUyNDcsIDI1MjUzLCAyNTI1OCwgMjUyNjQsIDI1MjcwLCAyNTI3NiwgMjUyODEsIAorICAgIDI1Mjg2LCAyNTI5MSwgMjUyOTYsIDI1MzAxLCAyNTMwNiwgMjUzMTEsIDI1MzE2LCAyNTMyMSwgMjUzMjYsIDI1MzMxLCAKKyAgICAyNTMzNiwgMjUzNDEsIDI1MzQ2LCAyNTM1MSwgMjUzNTYsIDI1MzYxLCAyNTM2NiwgMjUzNzEsIDI1Mzc2LCAyNTM4MSwgCisgICAgMjUzODYsIDI1MzkxLCAyNTM5NiwgMjU0MDEsIDI1NDA2LCAyNTQxMSwgMjU0MTYsIDI1NDIxLCAyNTQyNiwgMjU0MzEsIAorICAgIDI1NDM2LCAyNTQ0MSwgMjU0NDYsIDI1NDUxLCAyNTQ1NiwgMjU0NjEsIDI1NDY2LCAyNTQ3MSwgMjU0NzYsIDI1NDgxLCAKKyAgICAyNTQ4NiwgMjU0OTAsIDI1NDk1LCAyNTUwMCwgMjU1MDUsIDI1NTEwLCAyNTUxNSwgMjU1MjAsIDI1NTI1LCAyNTUzMCwgCisgICAgMjU1MzUsIDI1NTQwLCAyNTU0NSwgMjU1NTAsIDI1NTU1LCAyNTU2MCwgMjU1NjUsIDI1NTcwLCAyNTU3NSwgMjU1ODAsIAorICAgIDI1NTg1LCAyNTU5MCwgMjU1OTUsIDI1NjAwLCAyNTYwNSwgMjU2MTAsIDI1NjE1LCAyNTYyMCwgMjU2MjUsIDI1NjMwLCAKKyAgICAyNTYzNSwgMjU2NDAsIDI1NjQ1LCAyNTY0OSwgMjU2NTQsIDI1NjU5LCAyNTY2NCwgMjU2NjksIDI1Njc0LCAyNTY3OCwgCisgICAgMjU2ODMsIDI1Njg5LCAyNTY5NCwgMjU2OTksIDI1NzA0LCAyNTcwOSwgMjU3MTUsIDI1NzIwLCAyNTcyNSwgMjU3MzAsIAorICAgIDI1NzM1LCAyNTc0MCwgMjU3NDUsIDI1NzUwLCAyNTc1NSwgMjU3NjAsIDI1NzY1LCAyNTc3MCwgMjU3NzUsIDI1NzgwLCAKKyAgICAyNTc4NSwgMjU3OTAsIDI1Nzk1LCAyNTgwMCwgMjU4MDUsIDI1ODEwLCAyNTgxNSwgMjU4MjAsIDI1ODI1LCAyNTgzMCwgCisgICAgMjU4MzUsIDI1ODQwLCAyNTg0NSwgMjU4NTAsIDI1ODU1LCAyNTg2MCwgMjU4NjUsIDI1ODcwLCAyNTg3NSwgMjU4ODAsIAorICAgIDI1ODg1LCAyNTg5MCwgMjU4OTUsIDI1OTAwLCAyNTkwNSwgMjU5MTAsIDI1OTE1LCAyNTkyMCwgMjU5MjUsIDI1OTMwLCAKKyAgICAyNTkzNSwgMjU5NDEsIDI1OTQ2LCAyNTk1MSwgMjU5NTYsIDI1OTYxLCAyNTk2NiwgMjU5NzEsIDI1OTc2LCAyNTk4MSwgCisgICAgMjU5ODYsIDI1OTkxLCAyNTk5NiwgMjYwMDEsIDI2MDA2LCAyNjAxMSwgMjYwMTYsIDI2MDIxLCAyNjAyNiwgMjYwMzEsIAorICAgIDI2MDM2LCAyNjA0MSwgMjYwNDYsIDI2MDUxLCAyNjA1NiwgMjYwNjEsIDI2MDY2LCAyNjA3MSwgMjYwNzYsIDI2MDgxLCAKKyAgICAyNjA4NiwgMjYwOTEsIDI2MDk2LCAyNjEwMSwgMjYxMDYsIDI2MTExLCAyNjExNiwgMjYxMjEsIDI2MTI2LCAyNjEzMSwgCisgICAgMjYxMzcsIDI2MTQxLCAyNjE0NSwgMjYxNDksIDI2MTUzLCAyNjE1NywgMjYxNjEsIDI2MTY1LCAyNjE2OSwgMjYxNzUsIAorICAgIDI2MTgxLCAyNjE4NywgMjYxOTMsIDI2MTk5LCAyNjIwNSwgMjYyMTEsIDI2MjE4LCAyNjIyNCwgMjYyMjksIDI2MjM0LCAKKyAgICAyNjIzOSwgMjYyNDQsIDI2MjQ5LCAyNjI1NCwgMjYyNTksIDI2MjY0LCAyNjI2OSwgMjYyNzQsIDI2Mjc5LCAyNjI4NCwgCisgICAgMjYyODksIDI2Mjk0LCAyNjI5OSwgMjYzMDQsIDI2MzA5LCAyNjMxNCwgMjYzMTksIDI2MzI0LCAyNjMyOSwgMjYzMzQsIAorICAgIDI2MzM5LCAyNjM0NCwgMjYzNDksIDI2MzU0LCAyNjM1OSwgMjYzNjQsIDAsIDAsIDAsIDI2MzcxLCAyNjM4MSwgMjYzODUsIAorICAgIDI2MzkyLCAyNjM5NiwgMjY0MDAsIDI2NDA0LCAyNjQxMiwgMjY0MTYsIDI2NDIxLCAyNjQyNiwgMjY0MzEsIDI2NDM1LCAKKyAgICAyNjQ0MCwgMjY0NDUsIDI2NDQ4LCAyNjQ1MiwgMjY0NTYsIDI2NDY1LCAyNjQ2OSwgMjY0NzMsIDI2NDc5LCAyNjQ4MywgCisgICAgMjY0ODcsIDI2NDk1LCAyNjQ5OSwgMjY1MDcsIDI2NTEzLCAyNjUxOSwgMjY1MjUsIDI2NTMxLCAyNjU0MSwgMjY1NDcsIAorICAgIDI2NTUxLCAyNjU2MCwgMjY1NjMsIDI2NTY5LCAyNjU3MywgMjY1NzksIDI2NTg0LCAyNjU5MCwgMjY1OTgsIDI2NjA0LCAKKyAgICAyNjYwOSwgMjY2MTYsIDI2NjIxLCAyNjYyNSwgMjY2MjksIDI2NjM5LCAyNjY0NSwgMjY2NDksIDI2NjU5LCAyNjY2NSwgCisgICAgMjY2NjksIDI2NjczLCAyNjY4MCwgMjY2ODgsIDI2Njk0LCAyNjcwMCwgMjY3MDksIDI2NzEzLCAyNjcxNywgMjY3MjEsIAorICAgIDI2NzI5LCAyNjczNiwgMjY3NDAsIDI2NzQ0LCAyNjc0OCwgMjY3NTIsIDI2NzU2LCAyNjc2MCwgMjY3NjQsIDI2NzY4LCAKKyAgICAyNjc3MiwgMjY3NzYsIDI2NzgwLCAyNjc4NSwgMjY3OTAsIDI2Nzk1LCAyNjc5OSwgMjY4MDMsIDI2ODA3LCAyNjgxMSwgCisgICAgMjY4MTUsIDI2ODE5LCAyNjgyNywgMjY4MzUsIDI2ODQzLCAyNjg1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY4NTksIAorICAgIDI2ODYzLCAyNjg2NywgMjY4NzEsIDI2ODc1LCAyNjg4MCwgMjY4ODUsIDI2ODkwLCAyNjg5NSwgMjY5MDAsIDI2OTA0LCAKKyAgICAyNjkwOSwgMjY5MTMsIDAsIDI2OTE3LCAyNjkyMiwgMjY5MjcsIDI2OTMyLCAyNjkzNiwgMjY5NDEsIDI2OTQ2LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjk1MSwgMjY5NTUsIDI2OTU5LCAyNjk2MywgMjY5NjcsIDI2OTcyLCAKKyAgICAyNjk3NywgMjY5ODIsIDI2OTg3LCAyNjk5MiwgMjY5OTYsIDI3MDAxLCAyNzAwNSwgMjcwMDksIDI3MDE0LCAyNzAxOSwgCisgICAgMjcwMjQsIDI3MDI5LCAyNzAzMywgMjcwMzgsIDI3MDQzLCAyNzA0OCwgMjcwNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI3MDU5LCAyNzA2MywgMjcwNjcsIDI3MDcxLCAyNzA3NSwgMjcwODAsIDI3MDg1LCAyNzA5MCwgMjcwOTUsIDI3MTAwLCAKKyAgICAyNzEwNCwgMjcxMDksIDI3MTEzLCAyNzExNywgMjcxMjIsIDI3MTI3LCAyNzEzMiwgMjcxMzcsIDI3MTQxLCAyNzE0NiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcxNTEsIDI3MTU1LCAyNzE1OSwgMjcxNjMsIDI3MTY3LCAKKyAgICAyNzE3MiwgMjcxNzcsIDI3MTgyLCAyNzE4NywgMjcxOTIsIDI3MTk2LCAyNzIwMSwgMjcyMDUsIDAsIDI3MjA5LCAyNzIxNCwgCisgICAgMjcyMTksIDAsIDI3MjI0LCAyNzIyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcyMzQsIDI3MjM3LCAKKyAgICAyNzI0MSwgMjcyNDUsIDI3MjQ5LCAyNzI1MywgMjcyNTcsIDI3MjYxLCAyNzI2NSwgMjcyNjksIDI3MjczLCAyNzI3NywgCisgICAgMjcyODEsIDI3Mjg1LCAyNzI4OSwgMjcyOTMsIDI3Mjk3LCAyNzMwMSwgMjczMDQsIDI3MzA4LCAyNzMxMiwgMjczMTYsIAorICAgIDI3MzIwLCAyNzMyNCwgMjczMjgsIDI3MzMyLCAyNzMzNiwgMjczNDAsIDI3MzQ0LCAyNzM0OCwgMjczNTIsIDI3MzU2LCAKKyAgICAyNzM2MCwgMjczNjMsIDI3MzY3LCAyNzM3MSwgMjczNzcsIDI3MzgzLCAyNzM4OSwgMjczOTUsIDI3NDAxLCAyNzQwNywgCisgICAgMjc0MTMsIDI3NDE5LCAyNzQyNSwgMjc0MzEsIDI3NDM3LCAyNzQ0MywgMjc0NDksIDI3NDU1LCAyNzQ2NCwgMjc0NzMsIAorICAgIDI3NDc5LCAyNzQ4NSwgMjc0OTEsIDI3NDk2LCAyNzUwMCwgMjc1MDUsIDI3NTEwLCAyNzUxNSwgMjc1MTksIDI3NTI0LCAKKyAgICAyNzUyOSwgMjc1MzQsIDI3NTM4LCAyNzU0MywgMjc1NDcsIDI3NTUyLCAyNzU1NywgMjc1NjIsIDI3NTY3LCAyNzU3MSwgCisgICAgMjc1NzUsIDI3NTc5LCAyNzU4MywgMjc1ODcsIDI3NTkxLCAyNzU5NSwgMjc1OTksIDI3NjAzLCAyNzYwNywgMjc2MTMsIAorICAgIDI3NjE3LCAyNzYyMSwgMjc2MjUsIDI3NjI5LCAyNzYzMywgMjc2NDEsIDI3NjQ3LCAyNzY1MSwgMjc2NTcsIDI3NjYxLCAKKyAgICAyNzY2NywgMjc2NzEsIDAsIDAsIDI3Njc1LCAyNzY3OSwgMjc2ODIsIDI3Njg1LCAyNzY4OCwgMjc2OTEsIDI3Njk0LCAKKyAgICAyNzY5NywgMjc3MDEsIDI3NzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAyNzcwOCwgMjc3MTYsIDI3NzI0LCAyNzczMiwgMjc3NDAsIAorICAgIDI3NzQ4LCAyNzc1NiwgMjc3NjQsIDI3NzcyLCAyNzc4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc3ODgsIDI3NzkxLCAyNzc5NCwgCisgICAgMjc3OTcsIDI3ODAyLCAyNzgwNSwgMjc4MTAsIDI3ODE3LCAyNzgyNSwgMjc4MzAsIDI3ODM3LCAyNzg0MCwgMjc4NDcsIAorICAgIDI3ODU0LCAyNzg2MSwgMCwgMjc4NjUsIDI3ODY5LCAyNzg3MiwgMjc4NzUsIDI3ODc4LCAyNzg4MSwgMjc4ODQsIDI3ODg3LCAKKyAgICAyNzg5MSwgMjc4OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDI3ODk4LCAyNzkwMSwgMjc5MDQsIDI3OTA3LCAyNzkxMCwgMjc5MTMsIAorICAgIDI3OTE3LCAyNzkyMSwgMjc5MjUsIDI3OTI5LCAyNzkzMywgMjc5MzcsIDI3OTQwLCAyNzk0NCwgMjc5NDgsIDI3OTUxLCAKKyAgICAyNzk1NSwgMjc5NTksIDI3OTYzLCAyNzk2NywgMjc5NzEsIDI3OTc1LCAyNzk3OSwgMjc5ODIsIDI3OTg2LCAyNzk5MCwgCisgICAgMjc5OTQsIDI3OTk3LCAyODAwMSwgMjgwMDUsIDI4MDA5LCAyODAxMywgMjgwMTcsIDI4MDIxLCAyODAyNSwgMjgwMjksIAorICAgIDI4MDM2LCAyODA0MSwgMjgwNDYsIDI4MDUxLCAyODA1NiwgMjgwNjIsIDI4MDY4LCAyODA3NCwgMjgwODAsIDI4MDg1LCAKKyAgICAyODA5MSwgMjgwOTcsIDI4MTAyLCAyODEwOCwgMjgxMTQsIDI4MTIwLCAyODEyNiwgMjgxMzIsIDI4MTM3LCAyODE0MywgCisgICAgMjgxNDgsIDI4MTU0LCAyODE2MCwgMjgxNjYsIDI4MTcyLCAyODE3OCwgMjgxODMsIDI4MTg4LCAyODE5NCwgMjgyMDAsIAorICAgIDI4MjA1LCAyODIxMSwgMjgyMTYsIDI4MjIyLCAyODIyNywgMjgyMzIsIDI4MjM4LCAyODI0NCwgMjgyNTAsIDI4MjU2LCAKKyAgICAyODI2MiwgMjgyNjgsIDI4Mjc0LCAyODI4MCwgMjgyODYsIDI4MjkyLCAyODI5OCwgMjgzMDQsIDI4MzA5LCAyODMxNCwgCisgICAgMjgzMjAsIDI4MzI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODMzMiwgMjgzNDEsIDI4MzUwLCAyODM1OCwgMjgzNjYsIAorICAgIDI4Mzc2LCAyODM4NCwgMjgzOTMsIDI4NDAwLCAyODQwNywgMjg0MTQsIDI4NDIyLCAyODQzMCwgMjg0MzgsIDI4NDQ2LCAKKyAgICAyODQ1NCwgMjg0NjIsIDI4NDcwLCAyODQ3OCwgMjg0ODUsIDI4NDkzLCAyODUwMSwgMjg1MDksIDI4NTE3LCAyODUyNSwgCisgICAgMjg1MzUsIDI4NTQ1LCAyODU1NSwgMjg1NjUsIDI4NTc1LCAyODU4NSwgMjg1OTUsIDI4NjA1LCAyODYxNSwgMjg2MjUsIAorICAgIDI4NjM1LCAyODY0NSwgMjg2NTUsIDI4NjY1LCAyODY3MywgMjg2ODEsIDI4NjkxLCAyODY5OSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjg3MDksIDI4NzEzLCAyODcxNywgMjg3MjEsIDI4NzI1LCAyODcyOSwgMjg3MzMsIDI4NzM3LCAyODc0MSwgMjg3NDUsIAorICAgIDI4NzQ5LCAyODc1MywgMjg3NTcsIDI4NzYxLCAyODc2NSwgMjg3NjksIDI4NzczLCAyODc3NywgMjg3ODEsIDI4Nzg1LCAKKyAgICAyODc4OSwgMjg3OTMsIDI4Nzk3LCAyODgwMSwgMjg4MDcsIDI4ODExLCAyODgxNywgMjg4MjEsIDI4ODI3LCAyODgzMSwgCisgICAgMjg4MzcsIDI4ODQxLCAyODg0NSwgMjg4NDksIDI4ODUzLCAyODg1NywgMjg4NjEsIDI4ODY3LCAyODg3MywgMjg4NzksIAorICAgIDI4ODg1LCAyODg5MSwgMjg4OTcsIDI4OTAyLCAyODkwOCwgMjg5MTQsIDI4OTIwLCAyODkyNiwgMjg5MzMsIDI4OTM5LCAKKyAgICAyODk0NCwgMjg5NDksIDI4OTUzLCAyODk1NywgMjg5NjEsIDI4OTY1LCAyODk2OSwgMjg5NzMsIDI4OTc3LCAyODk4MywgCisgICAgMjg5ODksIDI4OTk1LCAyOTAwMCwgMjkwMDcsIDI5MDEyLCAyOTAxNywgMjkwMjMsIDI5MDI4LCAyOTAzNSwgMjkwNDIsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MDQ4LCAyOTA1NCwgMjkwNTgsIDI5MDYzLCAyOTA2OCwgMjkwNzMsIAorICAgIDI5MDc4LCAyOTA4MywgMjkwODgsIDI5MDkzLCAyOTA5OCwgMjkxMDMsIDI5MTA4LCAyOTExMywgMjkxMTgsIDI5MTIzLCAKKyAgICAyOTEyOCwgMjkxMzIsIDI5MTM3LCAyOTE0MiwgMjkxNDcsIDI5MTUxLCAyOTE1NSwgMjkxNjAsIDI5MTY1LCAyOTE3MCwgCisgICAgMjkxNzUsIDI5MTgwLCAyOTE4NSwgMjkxODksIDI5MTk0LCAwLCAyOTE5OSwgMjkyMDQsIDI5MjA5LCAyOTIxNCwgMjkyMjAsIAorICAgIDI5MjI2LCAyOTIzMiwgMjkyMzgsIDI5MjQzLCAyOTI0OCwgMjkyNTQsIDI5MjYxLCAwLCAwLCAwLCAwLCAyOTI2OCwgCisgICAgMjkyNzMsIDI5Mjc5LCAyOTI4NSwgMjkyOTEsIDI5Mjk3LCAyOTMwMiwgMjkzMDcsIDI5MzEzLCAyOTMxOSwgMjkzMjQsIAorICAgIDI5MzI5LCAwLCAwLCAwLCAwLCAyOTMzNCwgMCwgMCwgMCwgMjkzMzksIDI5MzQ0LCAyOTM0OSwgMjkzNTQsIDI5MzU4LCAKKyAgICAyOTM2MiwgMjkzNjYsIDI5MzcwLCAyOTM3NCwgMjkzNzgsIDI5MzgzLCAyOTM4NywgMjkzOTIsIDI5Mzk3LCAyOTQwMywgCisgICAgMjk0MDksIDI5NDE1LCAyOTQyMSwgMjk0MjYsIDI5NDMyLCAyOTQzOCwgMjk0NDQsIDI5NDQ5LCAyOTQ1NSwgMjk0NjAsIAorICAgIDI5NDY2LCAyOTQ3MiwgMjk0NzcsIDI5NDgzLCAyOTQ4OSwgMjk0OTUsIDI5NTAxLCAyOTUwNiwgMjk1MTEsIDI5NTE3LCAKKyAgICAyOTUyMywgMjk1MjgsIDI5NTM0LCAyOTUzOSwgMjk1NDUsIDI5NTUwLCAyOTU1NiwgMCwgMCwgMjk1NjIsIDI5NTY4LCAKKyAgICAyOTU3NCwgMjk1ODAsIDI5NTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTU5MiwgMjk2MDEsIAorICAgIDI5NjEwLCAyOTYxOCwgMjk2MjcsIDI5NjM2LCAyOTY0NCwgMjk2NTMsIDI5NjYyLCAyOTY3MSwgMjk2ODAsIDI5Njg4LCAKKyAgICAyOTY5NywgMjk3MDYsIDI5NzE0LCAyOTcyMywgMjk3MzIsIDI5NzQxLCAyOTc1MCwgMjk3NTksIDI5NzY4LCAyOTc3NiwgCisgICAgMjk3ODUsIDI5NzkzLCAyOTgwMSwgMjk4MTAsIDI5ODE4LCAyOTgyNywgMjk4MzYsIDI5ODQ1LCAyOTg1NCwgMjk4NjMsIAorICAgIDI5ODcyLCAyOTg4MCwgMjk4ODksIDI5ODk4LCAyOTkwNiwgMjk5MTUsIDI5OTI0LCAyOTkzMywgMjk5NDIsIDI5OTUxLCAKKyAgICAyOTk2MCwgMjk5NjksIDAsIDAsIDAsIDAsIDI5OTc4LCAyOTk4OCwgMjk5OTcsIDMwMDA2LCAzMDAxNCwgMzAwMjMsIAorICAgIDMwMDMxLCAzMDA0MCwgMzAwNDgsIDMwMDU3LCAzMDA2NiwgMzAwNzUsIDMwMDg0LCAzMDA5MywgMzAxMDIsIDMwMTExLCAKKyAgICAzMDEyMCwgMzAxMjksIDMwMTM4LCAzMDE0NywgMzAxNTYsIDMwMTY1LCAzMDE3NCwgMzAxODMsIDMwMTkyLCAzMDIwMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMzAyMDgsIDMwMjE2LCAzMDIyMywgMzAyMzAsIDMwMjM3LCAzMDI0NCwgMzAyNTEsIDMwMjU4LCAKKyAgICAzMDI2NiwgMzAyNzMsIDMwMjgxLCAwLCAwLCAwLCAzMDI4OSwgMzAyOTcsIDMwMzA1LCAzMDMwOSwgMzAzMTUsIDMwMzIxLCAKKyAgICAzMDMyNywgMzAzMzMsIDMwMzM5LCAzMDM0NSwgMzAzNTEsIDMwMzU3LCAzMDM2MywgMzAzNjksIDMwMzc1LCAzMDM4MSwgCisgICAgMzAzODcsIDMwMzkzLCAzMDM5OSwgMzA0MDMsIDMwNDA5LCAzMDQxNSwgMzA0MjEsIDMwNDI3LCAzMDQzMywgMzA0MzksIAorICAgIDMwNDQ1LCAzMDQ1MSwgMzA0NTcsIDMwNDYzLCAzMDQ2OSwgMzA0NzUsIDMwNDgxLCAzMDQ4NywgMzA0OTMsIDMwNDk3LCAKKyAgICAzMDUwMiwgMzA1MDcsIDMwNTEyLCAzMDUxNiwgMzA1MjEsIDMwNTI1LCAzMDUzMCwgMzA1MzUsIDMwNTQwLCAzMDU0NSwgCisgICAgMzA1NTAsIDMwNTU1LCAzMDU2MCwgMzA1NjUsIDMwNTcwLCAzMDU3NCwgMzA1NzksIDMwNTg0LCAzMDU4OSwgMzA1OTQsIAorICAgIDMwNTk4LCAzMDYwMiwgMzA2MDcsIDMwNjEyLCAzMDYxNywgMzA2MjIsIDAsIDAsIDMwNjI4LCAzMDYzMiwgMzA2MzksIAorICAgIDMwNjQ0LCAzMDY1MCwgMzA2NTYsIDMwNjYxLCAzMDY2NywgMzA2NzMsIDMwNjc4LCAzMDY4NCwgMzA2OTAsIDMwNjk2LCAKKyAgICAzMDcwMiwgMzA3MDgsIDMwNzEzLCAzMDcxOCwgMzA3MjQsIDMwNzI5LCAzMDczNSwgMzA3NDAsIDMwNzQ2LCAzMDc1MiwgCisgICAgMzA3NTgsIDMwNzY0LCAzMDc2OSwgMzA3NzQsIDMwNzc5LCAzMDc4NSwgMzA3OTEsIDMwNzk2LCAzMDgwMiwgMzA4MDgsIAorICAgIDMwODEyLCAzMDgxNywgMzA4MjIsIDMwODI3LCAzMDgzMiwgMzA4MzcsIDMwODQyLCAzMDg0NywgMzA4NTMsIDMwODU5LCAKKyAgICAzMDg2NSwgMzA4NzAsIDMwODc1LCAzMDg3OSwgMzA4ODQsIDMwODg4LCAzMDg5MywgMzA4OTcsIDMwOTAyLCAzMDkwNywgCisgICAgMzA5MTIsIDMwOTE3LCAzMDkyNCwgMzA5MzEsIDMwOTM4LCAzMDk0OCwgMzA5NTcsIDMwOTY0LCAzMDk3MCwgMzA5ODEsIAorICAgIDMwOTg2LCAzMDk5MiwgMCwgMzA5OTgsIDMxMDAzLCAzMTAwOCwgMzEwMTYsIDMxMDIyLCAzMTAzMCwgMzEwMzUsIDMxMDQxLCAKKyAgICAzMTA0NywgMzEwNTMsIDMxMDU4LCAzMTA2NCwgMzEwNjksIDMxMDc2LCAzMTA4MiwgMzEwODcsIDMxMDkzLCAzMTA5OSwgCisgICAgMzExMDUsIDMxMTEyLCAzMTExOSwgMzExMjYsIDMxMTMxLCAzMTEzNiwgMzExNDMsIDMxMTUwLCAzMTE1NywgMzExNjQsIAorICAgIDMxMTcxLCAwLCAwLCAzMTE3OCwgMzExODUsIDMxMTkyLCAzMTE5OCwgMzEyMDQsIDMxMjEwLCAzMTIxNiwgMzEyMjIsIAorICAgIDMxMjI4LCAzMTIzNSwgMzEyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMjQ4LCAzMTI1NCwgMzEyNTksIDMxMjY0LCAzMTI2OSwgCisgICAgMzEyNzQsIDMxMjc5LCAzMTI4NCwgMzEyOTAsIDMxMjk1LCAwLCAwLCAwLCAwLCAwLCAwLCAzMTMwMSwgMzEzMDYsIDMxMzExLCAKKyAgICAzMTMxNiwgMzEzMjEsIDMxMzI2LCAzMTMzMSwgMzEzNDAsIDMxMzQ3LCAzMTM1MiwgMzEzNTcsIDMxMzYyLCAzMTM2NywgCisgICAgMzEzNzIsIDAsIDAsIDMxMzc3LCAzMTM4NCwgMzEzODcsIDMxMzkwLCAzMTM5MywgMzEzOTgsIDMxNDAyLCAzMTQwOCwgCisgICAgMzE0MTIsIDMxNDE3LCAzMTQyNCwgMzE0MzIsIDMxNDM2LCAzMTQ0MSwgMzE0NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNDUwLCAzMTQ1NiwgMzE0NjIsIDMxNDY2LCAzMTQ3MCwgMzE0NzQsIAorICAgIDMxNDc4LCAzMTQ4NCwgMzE0ODgsIDMxNDk0LCAzMTQ5OCwgMzE1MDQsIDMxNTEwLCAzMTUxOCwgMzE1MjQsIDMxNTMyLCAKKyAgICAzMTUzNiwgMzE1NDAsIDMxNTQ0LCAzMTU1MCwgMzE1NTMsIDMxNTU5LCAzMTU2MywgMzE1NjksIDMxNTczLCAzMTU3NywgCisgICAgMzE1ODMsIDMxNTg3LCAzMTU5MywgMzE1OTcsIDMxNjAzLCAzMTYxMSwgMzE2MTksIDMxNjI3LCAzMTYzMywgMzE2MzcsIAorICAgIDMxNjQzLCAzMTY0NywgMzE2NTMsIDMxNjU3LCAzMTY2MCwgMzE2NjYsIDMxNjcwLCAzMTY3NiwgMzE2NzksIDMxNjgyLCAKKyAgICAzMTY4NiwgMzE2OTAsIDMxNjk0LCAzMTcwMCwgMzE3MDYsIDMxNzEwLCAzMTcxMywgMzE3MTcsIDMxNzIyLCAzMTcyNywgCisgICAgMzE3MzQsIDMxNzM5LCAzMTc0NiwgMzE3NTMsIDMxNzYyLCAzMTc2OSwgMzE3NzgsIDMxNzgzLCAzMTc5MCwgMzE3OTcsIAorICAgIDMxODA2LCAzMTgxMSwgMzE4MTgsIDMxODIzLCAzMTgyOSwgMzE4MzUsIDMxODQxLCAzMTg0NywgMzE4NTMsIDMxODU5LCAwLCAKKyAgICAwLCAwLCAwLCAzMTg2NSwgMzE4NjksIDMxODcyLCAzMTg3NSwgMzE4NzgsIDMxODgxLCAzMTg4NCwgMzE4ODcsIDMxODkxLCAKKyAgICAzMTg5NCwgMzE4OTgsIDMxOTAxLCAzMTkwNCwgMzE5MDcsIDMxOTEyLCAzMTkxNywgMzE5MjIsIDMxOTI1LCAzMTkzMCwgCisgICAgMzE5MzUsIDMxOTQwLCAzMTk0NSwgMzE5NTIsIDMxOTU3LCAzMTk2MiwgMzE5NjcsIDMxOTcyLCAzMTk3OSwgMzE5ODUsIAorICAgIDMxOTkxLCAzMTk5NywgMzIwMDMsIDMyMDA5LCAzMjAxOCwgMzIwMjcsIDMyMDMzLCAzMjAzOSwgMzIwNDcsIDMyMDU1LCAKKyAgICAzMjA2NCwgMzIwNzMsIDMyMDgxLCAzMjA4OSwgMzIwOTgsIDMyMTA3LCAwLCAwLCAwLCAzMjExNSwgMzIxMjAsIDMyMTI1LCAKKyAgICAzMjEzMCwgMzIxMzQsIDMyMTM4LCAzMjE0MiwgMzIxNDcsIDMyMTUxLCAzMjE1NSwgMzIxNjAsIDMyMTY0LCAzMjE2OSwgCisgICAgMzIxNzQsIDMyMTc5LCAzMjE4NCwgMzIxODksIDMyMTk0LCAzMjE5OSwgMzIyMDQsIDMyMjA5LCAzMjIxNCwgMzIyMTgsIAorICAgIDMyMjIzLCAzMjIyOCwgMzIyMzMsIDMyMjM3LCAzMjI0MSwgMzIyNDYsIDMyMjUxLCAzMjI1NiwgMzIyNjEsIDMyMjY2LCAKKyAgICAzMjI3MCwgMzIyNzYsIDMyMjgyLCAzMjI4OCwgMzIyOTQsIDMyMzAwLCAzMjMwNiwgMzIzMTIsIDMyMzE4LCAzMjMyNCwgCisgICAgMzIzMjksIDMyMzM0LCAzMjM0MSwgMzIzNDksIDMyMzU0LCAzMjM1OSwgMzIzNjQsIDMyMzY4LCAzMjM3MiwgMzIzNzYsIAorICAgIDMyMzgwLCAzMjM4NCwgMzIzODgsIDMyMzkzLCAzMjM5NywgMzI0MDIsIDMyNDA2LCAzMjQxMSwgMzI0MTYsIDMyNDIxLCAKKyAgICAzMjQyNywgMzI0MzMsIDMyNDM3LCAzMjQ0MywgMzI0NDcsIDMyNDUzLCAzMjQ1OSwgMzI0NjQsIDMyNDcxLCAzMjQ3NSwgCisgICAgMzI0ODEsIDMyNDg2LCAzMjQ5MywgMzI0OTgsIDMyNTA1LCAzMjUxMiwgMzI1MTcsIDMyNTI0LCAzMjUyOSwgMzI1MzQsIAorICAgIDMyNTM5LCAzMjU0NiwgMzI1NTAsIDMyNTU2LCAzMjU2MywgMzI1NzAsIDMyNTc1LCAzMjU4MiwgMzI1ODksIDMyNTkzLCAKKyAgICAzMjU5OSwgMzI2MDQsIDMyNjA5LCAzMjYxNiwgMzI2MjEsIDMyNjI2LCAzMjYzMSwgMzI2MzYsIDMyNjQwLCAzMjY0NCwgCisgICAgMzI2NDksIDMyNjU0LCAzMjY2MSwgMzI2NjcsIDMyNjcyLCAzMjY3OSwgMzI2ODQsIDMyNjkxLCAzMjY5NiwgMzI3MDYsIAorICAgIDMyNzEyLCAzMjcxOCwgMzI3MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNzI2LCAzMjczNSwgMzI3NDIsIDMyNzQ5LCAKKyAgICAzMjc1NiwgMzI3NjAsIDMyNzY1LCAzMjc3MCwgMzI3NzUsIDMyNzgwLCAzMjc4NSwgMzI3OTAsIDMyNzk1LCAzMjgwMCwgCisgICAgMzI4MDUsIDMyODEwLCAzMjgxNSwgMzI4MjAsIDMyODI1LCAzMjgyOSwgMzI4MzQsIDMyODM5LCAzMjg0NCwgMzI4NDksIAorICAgIDMyODU0LCAzMjg1OSwgMzI4NjMsIDMyODY4LCAzMjg3MywgMzI4NzgsIDMyODgzLCAzMjg4NywgMzI4OTIsIDMyODk3LCAKKyAgICAzMjkwMSwgMzI5MDYsIDMyOTExLCAzMjkxNiwgMzI5MjEsIDMyOTI2LCAzMjkzMCwgMzI5MzYsIDMyOTQzLCAzMjk0OSwgCisgICAgMzI5NTQsIDMyOTU5LCAzMjk2NSwgMzI5NzAsIDMyOTc2LCAzMjk4MSwgMzI5ODcsIDMyOTkzLCAzMjk5OCwgMzMwMDQsIAorICAgIDMzMDEwLCAzMzAxNSwgMzMwMjEsIDMzMDI3LCAzMzAzMywgMzMwMzgsIDAsIDAsIDAsIDMzMDQzLCAzMzA0OSwgMzMwNTksIAorICAgIDMzMDY1LCAzMzA3MywgMzMwNzksIDMzMDg0LCAzMzA4OCwgMzMwOTIsIDMzMDk2LCAzMzEwMCwgMzMxMDQsIDMzMTA4LCAKKyAgICAzMzExMywgMzMxMTcsIDAsIDAsIDAsIDMzMTIyLCAzMzEyNywgMzMxMzIsIDMzMTM3LCAzMzE0NCwgMzMxNTAsIDMzMTU2LCAKKyAgICAzMzE2MiwgMzMxNjgsIDMzMTc0LCAzMzE4MCwgMzMxODcsIDMzMTkzLCAzMzIwMCwgMzMyMDcsIDMzMjE0LCAzMzIyMSwgCisgICAgMzMyMjgsIDMzMjM1LCAzMzI0MiwgMzMyNDksIDMzMjU2LCAzMzI2MywgMzMyNzAsIDMzMjc3LCAzMzI4NCwgMzMyOTEsIAorICAgIDMzMjk4LCAzMzMwNSwgMzMzMTIsIDMzMzE5LCAzMzMyNiwgMzMzMzMsIDMzMzQwLCAzMzM0NywgMzMzNTQsIDMzMzYxLCAKKyAgICAzMzM2OCwgMzMzNzUsIDMzMzgyLCAzMzM4OSwgMzMzOTYsIDMzNDAzLCAzMzQxMCwgMzM0MTgsIDMzNDI2LCAzMzQzNCwgCisgICAgMzM0NDAsIDMzNDQ2LCAzMzQ1MiwgMzM0NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDMzNDY5LCAzMzQ3NywgMzM0ODUsIDMzNDkzLCAzMzUwMSwgMzM1MTEsIDMzNTIxLCAzMzUzMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMzM1NDEsIDMzNTQ2LCAzMzU1MSwgMzM1NTYsIDMzNTYxLCAzMzU3MCwgMzM1ODEsIDMzNTkwLCAzMzYwMSwgCisgICAgMzM2MDcsIDMzNjIwLCAzMzYyNiwgMzM2MzMsIDMzNjQwLCAzMzY0NSwgMzM2NTEsIDMzNjU3LCAzMzY2OCwgMzM2NzcsIAorICAgIDMzNjg0LCAzMzY5MSwgMzM3MDAsIDMzNzA3LCAzMzcxNiwgMzM3MjYsIDMzNzM2LCAzMzc0MywgMzM3NTAsIDMzNzU3LCAKKyAgICAzMzc2NywgMzM3NzIsIDMzNzgwLCAzMzc4NiwgMzM3OTQsIDMzODAzLCAzMzgwOCwgMzM4MTUsIDMzODIxLCAzMzgyNiwgMCwgCisgICAgMzM4MzEsIDMzODM3LCAwLCAwLCAwLCAwLCAwLCAwLCAzMzg0NCwgMzM4NDksIDMzODU1LCAzMzg2MiwgMzM4NzAsIDMzODc2LCAKKyAgICAzMzg4MiwgMzM4ODgsIDMzODkzLCAzMzkwMCwgMzM5MDYsIDMzOTEyLCAzMzkxOCwgMzM5MjYsIDMzOTMyLCAzMzk0MCwgCisgICAgMzM5NDUsIDMzOTUxLCAzMzk1NywgMzM5NjQsIDMzOTcyLCAzMzk3OSwgMzM5ODUsIDMzOTkyLCAzMzk5OSwgMzQwMDUsIAorICAgIDM0MDEyLCAzNDAxOSwgMzQwMjUsIDM0MDMwLCAzNDAzNiwgMzQwNDQsIDM0MDUzLCAzNDA1OSwgMzQwNjUsIDM0MDcxLCAKKyAgICAzNDA3NywgMzQwODUsIDM0MDg5LCAzNDA5NSwgMzQxMDEsIDM0MTA3LCAzNDExMywgMzQxMTksIDM0MTI1LCAzNDEyOSwgCisgICAgMzQxMzQsIDM0MTM5LCAzNDE0NiwgMzQxNTEsIDM0MTU1LCAzNDE2MSwgMzQxNjYsIDM0MTcxLCAzNDE3NSwgMzQxODAsIAorICAgIDM0MTg1LCAzNDE4OSwgMzQxOTQsIDM0MTk5LCAzNDIwNiwgMzQyMTAsIDM0MjE1LCAzNDIyMCwgMzQyMjQsIDM0MjI5LCAKKyAgICAzNDIzMywgMzQyMzgsIDM0MjQyLCAzNDI0OCwgMzQyNTMsIDM0MjYwLCAzNDI2NSwgMzQyNzAsIDM0Mjc0LCAzNDI3OSwgCisgICAgMzQyODQsIDM0MjkxLCAzNDI5NiwgMzQzMDIsIDM0MzA3LCAzNDMxMiwgMzQzMTcsIDM0MzIxLCAzNDMyNiwgMzQzMzMsIAorICAgIDM0MzQwLCAzNDM0NSwgMzQzNTAsIDM0MzU0LCAzNDM2MCwgMzQzNjcsIDM0MzcyLCAzNDM3NywgMzQzODIsIDM0Mzg4LCAKKyAgICAzNDM5MywgMzQzOTksIDM0NDA0LCAzNDQxMCwgMzQ0MTYsIDM0NDIyLCAzNDQyOSwgMzQ0MzYsIDM0NDQzLCAzNDQ1MCwgCisgICAgMzQ0NTcsIDM0NDY0LCAzNDQ2OSwgMzQ0NzcsIDM0NDg2LCAzNDQ5NSwgMzQ1MDQsIDM0NTEzLCAzNDUyMiwgMzQ1MzEsIAorICAgIDM0NTQzLCAzNDU1MiwgMzQ1NjEsIDM0NTcwLCAzNDU3NywgMzQ1ODIsIDM0NTg5LCAzNDU5NywgMzQ2MDUsIDM0NjEyLCAKKyAgICAzNDYxOSwgMzQ2MjYsIDM0NjMzLCAzNDY0MSwgMzQ2NTAsIDM0NjU5LCAzNDY2OCwgMzQ2NzcsIDM0Njg2LCAzNDY5NSwgCisgICAgMzQ3MDQsIDM0NzEzLCAzNDcyMiwgMzQ3MzEsIDM0NzQwLCAzNDc0OSwgMzQ3NTgsIDM0NzY3LCAzNDc3NSwgMzQ3ODQsIAorICAgIDM0Nzk1LCAzNDgwMywgMzQ4MTIsIDM0ODIzLCAzNDgzMiwgMzQ4NDEsIDM0ODUwLCAzNDg1OSwgMzQ4NjcsIDM0ODc2LCAKKyAgICAzNDg4MywgMzQ4ODgsIDM0ODk2LCAzNDkwMSwgMzQ5MDgsIDM0OTEzLCAzNDkyMiwgMzQ5MjgsIDM0OTM1LCAzNDk0MiwgCisgICAgMzQ5NDcsIDM0OTUyLCAzNDk2MCwgMzQ5NjgsIDM0OTc3LCAzNDk4NiwgMzQ5OTEsIDM0OTk4LCAzNTAwOSwgMzUwMTcsIAorICAgIDM1MDI2LCAzNTAzMiwgMzUwMzgsIDM1MDQzLCAzNTA1MCwgMzUwNTUsIDM1MDY0LCAzNTA2OSwgMzUwNzQsIDM1MDc5LCAKKyAgICAzNTA4NiwgMzUwOTMsIDM1MDk4LCAzNTEwNywgMzUxMTUsIDM1MTIwLCAzNTEyNSwgMzUxMzIsIDM1MTM5LCAzNTE0MywgCisgICAgMzUxNDcsIDM1MTUwLCAzNTE1MywgMzUxNTYsIDM1MTU5LCAzNTE2MiwgMzUxNjUsIDM1MTcyLCAzNTE3NSwgMzUxNzgsIAorICAgIDM1MTgzLCAzNTE4NywgMzUxOTEsIDM1MTk1LCAzNTE5OSwgMzUyMDMsIDM1MjEyLCAzNTIxOCwgMzUyMjQsIDM1MjMwLCAKKyAgICAzNTIzOCwgMzUyNDYsIDM1MjUyLCAzNTI1OCwgMzUyNjUsIDM1MjcxLCAzNTI3NiwgMzUyODIsIDM1Mjg5LCAzNTI5NSwgCisgICAgMzUzMDIsIDM1MzA4LCAzNTMxNiwgMzUzMjEsIDM1MzI3LCAzNTMzMywgMzUzMzksIDM1MzQ1LCAzNTM1MSwgMzUzNTcsIAorICAgIDM1MzYzLCAzNTM3NCwgMzUzODQsIDM1MzkwLCAzNTM5NiwgMzU0MDYsIDM1NDEyLCAzNTQyMCwgMzU0MjgsIDM1NDM2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAzNTQ0MSwgMzU0NDgsIDM1NDU1LCAzNTQ2MCwgMzU0NjksIDM1NDc3LCAzNTQ4NSwgMzU0OTIsIAorICAgIDM1NDk5LCAzNTUwNiwgMzU1MTMsIDM1NTIxLCAzNTUyOSwgMzU1MzksIDM1NTQ5LCAzNTU1NywgMzU1NjUsIDM1NTczLCAKKyAgICAzNTU4MSwgMzU1OTAsIDM1NTk5LCAzNTYwNywgMzU2MTUsIDM1NjI0LCAzNTYzMywgMzU2NDMsIDM1NjUzLCAzNTY2MiwgCisgICAgMzU2NzEsIDM1Njc5LCAzNTY4NywgMzU2OTUsIDM1NzAzLCAzNTcxMywgMzU3MjMsIDM1NzMxLCAzNTczOSwgMzU3NDcsIAorICAgIDM1NzU1LCAzNTc2MywgMzU3NzEsIDM1Nzc5LCAzNTc4NywgMzU3OTUsIDM1ODAzLCAzNTgxMSwgMzU4MTksIDM1ODI4LCAKKyAgICAzNTgzNywgMzU4NDYsIDM1ODU1LCAzNTg2NSwgMzU4NzUsIDM1ODgyLCAzNTg4OSwgMzU4OTcsIDM1OTA1LCAzNTkxNCwgCisgICAgMzU5MjMsIDM1OTMxLCAzNTkzOSwgMzU5NTEsIDM1OTYzLCAzNTk3MiwgMzU5ODEsIDM1OTkwLCAzNTk5OSwgMzYwMDYsIAorICAgIDM2MDEzLCAzNjAyMSwgMzYwMjksIDM2MDM3LCAzNjA0NSwgMzYwNTMsIDM2MDYxLCAzNjA2OSwgMzYwNzcsIDM2MDg2LCAKKyAgICAzNjA5NSwgMzYxMDQsIDM2MTEzLCAzNjEyMiwgMzYxMzEsIDM2MTQxLCAzNjE1MSwgMzYxNjEsIDM2MTcxLCAzNjE4MCwgCisgICAgMzYxODksIDM2MTk2LCAzNjIwMywgMzYyMTEsIDM2MjE5LCAzNjIyNywgMzYyMzUsIDM2MjQzLCAzNjI1MSwgMzYyNjMsIAorICAgIDM2Mjc1LCAzNjI4NCwgMzYyOTMsIDM2MzAxLCAzNjMwOSwgMzYzMTcsIDM2MzI1LCAzNjMzNiwgMzYzNDcsIDM2MzU4LCAKKyAgICAzNjM2OSwgMzYzODEsIDM2MzkzLCAzNjQwMSwgMzY0MDksIDM2NDE3LCAzNjQyNSwgMzY0MzQsIDM2NDQzLCAzNjQ1MiwgCisgICAgMzY0NjEsIDM2NDY5LCAzNjQ3NywgMzY0ODUsIDM2NDkzLCAzNjUwMSwgMzY1MDksIDM2NTE4LCAzNjUyNywgMzY1MzcsIAorICAgIDM2NTQ3LCAzNjU1NSwgMzY1NjMsIDM2NTcxLCAzNjU3OSwgMzY1ODcsIDM2NTk1LCAzNjYwMiwgMzY2MDksIDM2NjE3LCAKKyAgICAzNjYyNSwgMzY2MzMsIDM2NjQxLCAzNjY0OSwgMzY2NTcsIDM2NjY1LCAzNjY3MywgMzY2ODEsIDM2Njg5LCAzNjY5NywgCisgICAgMzY3MDUsIDM2NzEzLCAzNjcyMSwgMzY3MjksIDM2NzM3LCAzNjc0NiwgMzY3NTUsIDM2NzY0LCAzNjc3MiwgMzY3ODEsIAorICAgIDM2NzkwLCAzNjc5OSwgMzY4MDgsIDM2ODE4LCAzNjgyNywgMzY4MzMsIDM2ODM4LCAzNjg0NSwgMzY4NTIsIDM2ODYwLCAKKyAgICAzNjg2OCwgMzY4NzcsIDM2ODg2LCAzNjg5NiwgMzY5MDYsIDM2OTE3LCAzNjkyOCwgMzY5MzgsIDM2OTQ4LCAzNjk1OCwgCisgICAgMzY5NjgsIDM2OTc3LCAzNjk4NiwgMzY5OTYsIDM3MDA2LCAzNzAxNywgMzcwMjgsIDM3MDM4LCAzNzA0OCwgMzcwNTgsIAorICAgIDM3MDY4LCAzNzA3NSwgMzcwODIsIDM3MDkwLCAzNzA5OCwgMzcxMDUsIDM3MTEyLCAzNzEyMSwgMzcxMzAsIDM3MTQwLCAKKyAgICAzNzE1MCwgMzcxNjEsIDM3MTcyLCAzNzE4MiwgMzcxOTIsIDM3MjAyLCAzNzIxMiwgMzcyMjEsIDM3MjMwLCAzNzIzOCwgCisgICAgMzcyNDYsIDM3MjUzLCAzNzI2MCwgMzcyNjgsIDM3Mjc2LCAzNzI4NSwgMzcyOTQsIDM3MzA0LCAzNzMxNCwgMzczMjUsIAorICAgIDM3MzM2LCAzNzM0NiwgMzczNTYsIDM3MzY2LCAzNzM3NiwgMzczODUsIDM3Mzk0LCAzNzQwNCwgMzc0MTQsIDM3NDI1LCAKKyAgICAzNzQzNiwgMzc0NDYsIDM3NDU2LCAzNzQ2NiwgMzc0NzYsIDM3NDgzLCAzNzQ5MCwgMzc0OTgsIDM3NTA2LCAzNzUxNSwgCisgICAgMzc1MjQsIDM3NTM0LCAzNzU0NCwgMzc1NTUsIDM3NTY2LCAzNzU3NiwgMzc1ODYsIDM3NTk2LCAzNzYwNiwgMzc2MTQsIAorICAgIDM3NjIyLCAzNzYzMCwgMzc2MzgsIDM3NjQ3LCAzNzY1NiwgMzc2NjQsIDM3NjcyLCAzNzY3OSwgMzc2ODYsIDM3NjkzLCAKKyAgICAzNzcwMCwgMzc3MDgsIDM3NzE2LCAzNzcyNCwgMzc3MzIsIDM3NzQzLCAzNzc1NCwgMzc3NjUsIDM3Nzc2LCAzNzc4NywgCisgICAgMzc3OTgsIDM3ODA2LCAzNzgxNCwgMzc4MjUsIDM3ODM2LCAzNzg0NywgMzc4NTgsIDM3ODY5LCAzNzg4MCwgMzc4ODgsIAorICAgIDM3ODk2LCAzNzkwNywgMzc5MTgsIDM3OTI5LCAwLCAwLCAzNzk0MCwgMzc5NDgsIDM3OTU2LCAzNzk2NywgMzc5NzgsIAorICAgIDM3OTg5LCAwLCAwLCAzODAwMCwgMzgwMDgsIDM4MDE2LCAzODAyNywgMzgwMzgsIDM4MDQ5LCAzODA2MCwgMzgwNzEsIAorICAgIDM4MDgyLCAzODA5MCwgMzgwOTgsIDM4MTA5LCAzODEyMCwgMzgxMzEsIDM4MTQyLCAzODE1MywgMzgxNjQsIDM4MTcyLCAKKyAgICAzODE4MCwgMzgxOTEsIDM4MjAyLCAzODIxMywgMzgyMjQsIDM4MjM1LCAzODI0NiwgMzgyNTQsIDM4MjYyLCAzODI3MywgCisgICAgMzgyODQsIDM4Mjk1LCAzODMwNiwgMzgzMTcsIDM4MzI4LCAzODMzNiwgMzgzNDQsIDM4MzU1LCAzODM2NiwgMzgzNzcsIDAsIAorICAgIDAsIDM4Mzg4LCAzODM5NiwgMzg0MDQsIDM4NDE1LCAzODQyNiwgMzg0MzcsIDAsIDAsIDM4NDQ4LCAzODQ1NiwgMzg0NjQsIAorICAgIDM4NDc1LCAzODQ4NiwgMzg0OTcsIDM4NTA4LCAzODUxOSwgMCwgMzg1MzAsIDAsIDM4NTM4LCAwLCAzODU0OSwgMCwgCisgICAgMzg1NjAsIDM4NTcxLCAzODU3OSwgMzg1ODcsIDM4NTk4LCAzODYwOSwgMzg2MjAsIDM4NjMxLCAzODY0MiwgMzg2NTMsIAorICAgIDM4NjYxLCAzODY2OSwgMzg2ODAsIDM4NjkxLCAzODcwMiwgMzg3MTMsIDM4NzI0LCAzODczNSwgMzg3NDMsIDM4NzUxLCAKKyAgICAzODc1OSwgMzg3NjcsIDM4Nzc1LCAzODc4MywgMzg3OTEsIDM4Nzk5LCAzODgwNywgMzg4MTUsIDM4ODIzLCAzODgzMSwgCisgICAgMzg4MzksIDAsIDAsIDM4ODQ3LCAzODg1OCwgMzg4NjksIDM4ODgzLCAzODg5NywgMzg5MTEsIDM4OTI1LCAzODkzOSwgCisgICAgMzg5NTMsIDM4OTY0LCAzODk3NSwgMzg5ODksIDM5MDAzLCAzOTAxNywgMzkwMzEsIDM5MDQ1LCAzOTA1OSwgMzkwNzAsIAorICAgIDM5MDgxLCAzOTA5NSwgMzkxMDksIDM5MTIzLCAzOTEzNywgMzkxNTEsIDM5MTY1LCAzOTE3NiwgMzkxODcsIDM5MjAxLCAKKyAgICAzOTIxNSwgMzkyMjksIDM5MjQzLCAzOTI1NywgMzkyNzEsIDM5MjgyLCAzOTI5MywgMzkzMDcsIDM5MzIxLCAzOTMzNSwgCisgICAgMzkzNDksIDM5MzYzLCAzOTM3NywgMzkzODgsIDM5Mzk5LCAzOTQxMywgMzk0MjcsIDM5NDQxLCAzOTQ1NSwgMzk0NjksIAorICAgIDM5NDgzLCAzOTQ5MSwgMzk0OTksIDM5NTEwLCAzOTUxOCwgMCwgMzk1MjksIDM5NTM3LCAzOTU0OCwgMzk1NTYsIDM5NTY0LCAKKyAgICAzOTU3MiwgMzk1ODAsIDM5NTg4LCAzOTU5MSwgMzk1OTQsIDM5NTk3LCAzOTYwMCwgMzk2MDYsIDM5NjE3LCAzOTYyNSwgMCwgCisgICAgMzk2MzYsIDM5NjQ0LCAzOTY1NSwgMzk2NjMsIDM5NjcxLCAzOTY3OSwgMzk2ODcsIDM5Njk1LCAzOTcwMSwgMzk3MDcsIAorICAgIDM5NzEzLCAzOTcyMSwgMzk3MjksIDM5NzQwLCAwLCAwLCAzOTc1MSwgMzk3NTksIDM5NzcwLCAzOTc3OCwgMzk3ODYsIAorICAgIDM5Nzk0LCAwLCAzOTgwMiwgMzk4MDgsIDM5ODE0LCAzOTgyMCwgMzk4MjgsIDM5ODM2LCAzOTg0NywgMzk4NTgsIDM5ODY2LCAKKyAgICAzOTg3NCwgMzk4ODIsIDM5ODkzLCAzOTkwMSwgMzk5MDksIDM5OTE3LCAzOTkyNSwgMzk5MzMsIDM5OTM5LCAzOTk0NSwgMCwgCisgICAgMCwgMzk5NDgsIDM5OTU5LCAzOTk2NywgMCwgMzk5NzgsIDM5OTg2LCAzOTk5NywgNDAwMDUsIDQwMDEzLCA0MDAyMSwgCisgICAgNDAwMjksIDQwMDM3LCA0MDA0MCwgMCwgNDAwNDMsIDQwMDQ3LCA0MDA1MSwgNDAwNTUsIDQwMDU5LCA0MDA2MywgNDAwNjcsIAorICAgIDQwMDcxLCA0MDA3NSwgNDAwNzksIDQwMDgzLCA0MDA4NywgNDAwOTMsIDQwMDk5LCA0MDEwNSwgNDAxMDgsIDQwMTExLCAKKyAgICA0MDExMywgNDAxMTcsIDQwMTIxLCA0MDEyNSwgNDAxMjksIDQwMTMyLCA0MDEzNiwgNDAxNDAsIDQwMTQ2LCA0MDE1MiwgCisgICAgNDAxNTksIDQwMTY2LCA0MDE3MSwgNDAxNzYsIDQwMTgyLCA0MDE4OCwgNDAxOTAsIDQwMTkzLCA0MDE5NSwgNDAxOTksIAorICAgIDQwMjAzLCA0MDIwNywgNDAyMTEsIDQwMjE1LCA0MDIxOSwgNDAyMjMsIDQwMjI3LCA0MDIzMSwgNDAyMzcsIDQwMjQxLCAKKyAgICA0MDI0NSwgNDAyNTEsIDQwMjU2LCA0MDI2MywgNDAyNjUsIDQwMjY4LCA0MDI3MiwgNDAyNzYsIDQwMjgxLCA0MDI4NywgCisgICAgNDAyODksIDQwMjk4LCA0MDMwNywgNDAzMTAsIDQwMzE0LCA0MDMxNiwgNDAzMTgsIDQwMzIwLCA0MDMyMywgNDAzMjksIAorICAgIDQwMzMxLCA0MDMzNSwgNDAzMzksIDQwMzQ2LCA0MDM1MywgNDAzNTcsIDQwMzYyLCA0MDM2NywgNDAzNzIsIDQwMzc3LCAKKyAgICA0MDM4MSwgNDAzODUsIDQwMzg4LCA0MDM5MiwgNDAzOTYsIDQwNDAzLCA0MDQwOCwgNDA0MTIsIDQwNDE2LCA0MDQyMSwgCisgICAgNDA0MjUsIDQwNDI5LCA0MDQzNCwgNDA0MzksIDQwNDQzLCA0MDQ0NywgNDA0NTEsIDQwNDUzLCA0MDQ1OCwgNDA0NjMsIAorICAgIDQwNDY3LCA0MDQ3MSwgNDA0NzUsIDQwNDc5LCAwLCA0MDQ4MywgNDA0ODcsIDQwNDkxLCA0MDQ5NywgNDA1MDMsIDQwNTA5LCAKKyAgICA0MDUxNSwgNDA1MjIsIDQwNTI5LCA0MDUzNCwgNDA1MzksIDQwNTQzLCAwLCAwLCA0MDU0OSwgNDA1NTIsIDQwNTU1LCAKKyAgICA0MDU1OCwgNDA1NjIsIDQwNTY1LCA0MDU2OSwgNDA1NzMsIDQwNTc3LCA0MDU4MiwgNDA1ODcsIDQwNTkyLCA0MDU5OSwgCisgICAgNDA2MDMsIDQwNjA2LCA0MDYwOSwgNDA2MTIsIDQwNjE1LCA0MDYxOCwgNDA2MjEsIDQwNjI1LCA0MDYyOCwgNDA2MzIsIAorICAgIDQwNjM2LCA0MDY0MCwgNDA2NDUsIDQwNjUwLCAwLCA0MDY1NSwgNDA2NjEsIDQwNjY3LCA0MDY3MywgNDA2ODAsIDQwNjg3LCAKKyAgICA0MDY5NCwgNDA3MDEsIDQwNzA3LCA0MDcxNCwgNDA3MjEsIDQwNzI4LCA0MDczNCwgMCwgMCwgMCwgNDA3NDEsIDQwNzQ0LCAKKyAgICA0MDc0NywgNDA3NTAsIDQwNzU1LCA0MDc1OCwgNDA3NjEsIDQwNzY0LCA0MDc2NywgNDA3NzAsIDQwNzczLCA0MDc3OCwgCisgICAgNDA3ODEsIDQwNzg0LCA0MDc4NywgNDA3OTAsIDQwNzkzLCA0MDc5OCwgNDA4MDEsIDQwODA0LCA0MDgwNywgNDA4MTAsIAorICAgIDQwODEzLCA0MDgxOCwgNDA4MjEsIDQwODI0LCA0MDgyOSwgNDA4MzQsIDQwODM4LCA0MDg0MSwgNDA4NDQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwODQ3LCA0MDg1MiwgNDA4NTcsIDQwODY0LCAKKyAgICA0MDg3MiwgNDA4NzcsIDQwODgyLCA0MDg4NiwgNDA4OTAsIDQwODk1LCA0MDkwMiwgNDA5MDksIDQwOTEzLCA0MDkxOCwgCisgICAgNDA5MjMsIDQwOTI4LCA0MDkzMywgNDA5NDAsIDQwOTQ1LCA0MDk1MCwgNDA5NTUsIDQwOTY0LCA0MDk3MSwgNDA5NzgsIAorICAgIDQwOTgyLCA0MDk4NywgNDA5OTMsIDQwOTk4LCA0MTAwNSwgNDEwMTMsIDQxMDIxLCA0MTAyNSwgNDEwMjksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMDMzLCA0MTAzNywgNDEwNDUsIDQxMDQ5LCA0MTA1MywgCisgICAgNDEwNTgsIDQxMDYyLCA0MTA2NiwgNDEwNzAsIDQxMDcyLCA0MTA3NiwgNDEwODAsIDQxMDg0LCA0MTA4OSwgNDEwOTMsIAorICAgIDQxMDk3LCA0MTEwNSwgNDExMDgsIDQxMTEyLCA0MTExNSwgNDExMTgsIDQxMTI0LCA0MTEyOCwgNDExMzEsIDQxMTM3LCAKKyAgICA0MTE0MSwgNDExNDUsIDQxMTQ5LCA0MTE1MiwgNDExNTYsIDQxMTU5LCA0MTE2MywgNDExNjUsIDQxMTY4LCA0MTE3MSwgCisgICAgNDExNzUsIDQxMTc3LCA0MTE4MSwgNDExODQsIDQxMTg3LCA0MTE5MiwgNDExOTcsIDQxMjA0LCA0MTIwNywgNDEyMTAsIAorICAgIDQxMjE0LCA0MTIxOSwgNDEyMjIsIDQxMjI1LCA0MTIyOCwgNDEyMzIsIDQxMjM3LCA0MTI0MSwgNDEyNDQsIDQxMjQ2LCAKKyAgICA0MTI0OSwgNDEyNTIsIDQxMjU1LCA0MTI1OSwgNDEyNjQsIDQxMjY3LCA0MTI3MSwgNDEyNzUsIDQxMjc5LCA0MTI4MywgCisgICAgNDEyODgsIDQxMjk0LCA0MTI5OSwgNDEzMDQsIDQxMzEwLCA0MTMxNSwgNDEzMjAsIDQxMzI0LCA0MTMyOCwgNDEzMzMsIAorICAgIDQxMzM3LCA0MTM0MSwgNDEzNDQsIDQxMzQ2LCA0MTM1MSwgNDEzNTcsIDQxMzY0LCA0MTM3MSwgNDEzNzgsIDQxMzg1LCAKKyAgICA0MTM5MiwgNDEzOTksIDQxNDA2LCA0MTQxMywgNDE0MjEsIDQxNDI4LCA0MTQzNiwgNDE0NDMsIDQxNDUwLCA0MTQ1OCwgCisgICAgNDE0NjYsIDQxNDcxLCA0MTQ3NiwgNDE0ODEsIDQxNDg2LCA0MTQ5MSwgNDE0OTYsIDQxNTAxLCA0MTUwNywgNDE1MTIsIAorICAgIDQxNTE4LCA0MTUyNCwgNDE1MzAsIDQxNTM2LCA0MTU0MiwgNDE1NDksIDQxNTU3LCA0MTU2NCwgNDE1NzAsIDQxNTc2LCAKKyAgICA0MTU4MiwgNDE1ODgsIDQxNTk0LCA0MTYwMCwgNDE2MDcsIDQxNjEzLCA0MTYyMCwgNDE2MjcsIDQxNjM0LCA0MTY0MSwgCisgICAgNDE2NDgsIDQxNjU2LCA0MTY2NSwgNDE2NzMsIDQxNjg0LCA0MTY5MiwgNDE3MDAsIDQxNzA5LCA0MTcxNiwgNDE3MjUsIAorICAgIDQxNzM0LCA0MTc0MiwgNDE3NTEsIDQxNzU5LCA0MTc2MywgMCwgMCwgMCwgMCwgNDE3NjcsIDQxNzY5LCA0MTc3MSwgCisgICAgNDE3NzMsIDQxNzc1LCA0MTc3OCwgNDE3ODEsIDQxNzg1LCA0MTc4OSwgNDE3OTQsIDQxNzk5LCA0MTgwMywgNDE4MDcsIAorICAgIDQxODExLCA0MTgxNSwgNDE4MjAsIDQxODI1LCA0MTgzMCwgNDE4MzUsIDQxODQwLCA0MTg0NSwgNDE4NTAsIDQxODU1LCAKKyAgICA0MTg2MCwgNDE4NjUsIDQxODcxLCA0MTg3NSwgNDE4NzksIDQxODg0LCA0MTg4OSwgNDE4OTQsIDQxODk5LCA0MTkwMywgCisgICAgNDE5MTAsIDQxOTE3LCA0MTkyNCwgNDE5MzEsIDQxOTM4LCA0MTk0NSwgNDE5NTIsIDQxOTU5LCA0MTk2NywgNDE5NzksIAorICAgIDQxOTg1LCA0MTk5MSwgNDE5OTgsIDQyMDA1LCA0MjAxMiwgNDIwMTksIDQyMDI2LCA0MjAzMywgNDIwNDAsIDQyMDQ3LCAKKyAgICA0MjA1MiwgNDIwNTgsIDQyMDYzLCA0MjA2OCwgNDIwNzMsIDQyMDc4LCA0MjA4MywgNDIwOTAsIDQyMDk3LCA0MjEwMiwgCisgICAgNDIxMDgsIDQyMTEzLCA0MjExNiwgNDIxMTksIDQyMTIyLCA0MjEyNSwgNDIxMjksIDQyMTMzLCA0MjEzOCwgNDIxNDMsIAorICAgIDQyMTQ5LCA0MjE1NSwgNDIxNTksIDQyMTYzLCA0MjE2NywgNDIxNzEsIDQyMTc2LCA0MjE4MSwgNDIxODUsIDQyMTg5LCAKKyAgICA0MjE5MywgNDIxOTcsIDQyMjAyLCA0MjIwNywgNDIyMTAsIDQyMjEzLCA0MjIxNiwgNDIyMTksIDQyMjI1LCA0MjIzMiwgCisgICAgNDIyNDMsIDQyMjUzLCA0MjI1NywgNDIyNjUsIDQyMjcyLCA0MjI4MCwgNDIyODksIDQyMjkzLCA0MjI5OSwgNDIzMDUsIAorICAgIDQyMzA5LCA0MjMxNCwgNDIzMTksIDQyMzI1LCA0MjMzMSwgNDIzMzcsIDQyMzQ0LCA0MjM0OCwgNDIzNTIsIDQyMzU3LCAKKyAgICA0MjM2MCwgNDIzNjIsIDQyMzY2LCA0MjM3MCwgNDIzNzgsIDQyMzgyLCA0MjM4NCwgNDIzODYsIDQyMzkwLCA0MjM5OCwgCisgICAgNDI0MDMsIDQyNDA5LCA0MjQxOSwgNDI0MjYsIDQyNDMxLCA0MjQzNSwgNDI0MzksIDQyNDQzLCA0MjQ0NiwgNDI0NDksIAorICAgIDQyNDUyLCA0MjQ1NiwgNDI0NjAsIDQyNDY0LCA0MjQ2OCwgNDI0NzIsIDQyNDc1LCA0MjQ3OSwgNDI0ODMsIDQyNDg2LCAKKyAgICA0MjQ4OCwgNDI0OTEsIDQyNDkzLCA0MjQ5NywgNDI1MDEsIDQyNTAzLCA0MjUwOSwgNDI1MTIsIDQyNTE3LCA0MjUyMSwgCisgICAgNDI1MjUsIDQyNTI3LCA0MjUyOSwgNDI1MzEsIDQyNTM0LCA0MjUzOCwgNDI1NDIsIDQyNTQ2LCA0MjU1MCwgNDI1NTQsIAorICAgIDQyNTYwLCA0MjU2NiwgNDI1NjgsIDQyNTcwLCA0MjU3MiwgNDI1NzQsIDQyNTc3LCA0MjU3OSwgNDI1ODMsIDQyNTg1LCAKKyAgICA0MjU4OSwgNDI1OTMsIDQyNTk4LCA0MjYwMiwgNDI2MDYsIDQyNjEwLCA0MjYxNCwgNDI2MTgsIDQyNjI0LCA0MjYyOCwgCisgICAgNDI2MzgsIDQyNjQ4LCA0MjY1MiwgNDI2NTgsIDQyNjY1LCA0MjY2OSwgNDI2NzMsIDQyNjc2LCA0MjY4MSwgNDI2ODUsIAorICAgIDQyNjkxLCA0MjY5NSwgNDI3MDgsIDQyNzE3LCA0MjcyMSwgNDI3MjUsIDQyNzMxLCA0MjczNSwgNDI3MzgsIDQyNzQwLCAKKyAgICA0Mjc0MywgNDI3NDcsIDQyNzUxLCA0Mjc1OCwgNDI3NjIsIDQyNzY2LCA0Mjc3MCwgNDI3NzMsIDQyNzc4LCA0Mjc4MywgCisgICAgNDI3ODksIDQyNzk1LCA0MjgwMCwgNDI4MDUsIDQyODEzLCA0MjgyMSwgNDI4MjUsIDQyODI5LCA0MjgzMSwgNDI4MzYsIAorICAgIDQyODQwLCA0Mjg0NCwgNDI4NTIsIDQyODYwLCA0Mjg2NywgNDI4NzQsIDQyODgzLCA0Mjg5MiwgNDI4OTgsIDQyOTA0LCAKKyAgICA0MjkxMiwgNDI5MjAsIDQyOTIyLCA0MjkyNCwgNDI5MzAsIDQyOTM2LCA0Mjk0MywgNDI5NTAsIDQyOTU2LCA0Mjk2MiwgCisgICAgNDI5NjYsIDQyOTcwLCA0Mjk3NywgNDI5ODQsIDQyOTkxLCA0Mjk5OCwgNDMwMDgsIDQzMDE4LCA0MzAyNiwgNDMwMzQsIAorICAgIDQzMDM2LCA0MzA0MCwgNDMwNDQsIDQzMDQ5LCA0MzA1NCwgNDMwNjIsIDQzMDcwLCA0MzA3MywgNDMwNzYsIDQzMDc5LCAKKyAgICA0MzA4MiwgNDMwODUsIDQzMDkwLCA0MzA5NCwgNDMwOTksIDQzMTA0LCA0MzEwNywgNDMxMTAsIDQzMTEzLCA0MzExNiwgCisgICAgNDMxMTksIDQzMTIzLCA0MzEyNiwgNDMxMjksIDQzMTMyLCA0MzEzNSwgNDMxMzcsIDQzMTM5LCA0MzE0MSwgNDMxNDMsIAorICAgIDQzMTUxLCA0MzE1OSwgNDMxNjUsIDQzMTY5LCA0MzE3NSwgNDMxODUsIDQzMTkxLCA0MzE5NywgNDMyMDMsIDQzMjExLCAKKyAgICA0MzIyMCwgNDMyMzIsIDQzMjM2LCA0MzI0MCwgNDMyNDIsIDQzMjQ4LCA0MzI1MCwgNDMyNTIsIDQzMjU0LCA0MzI1NiwgCisgICAgNDMyNjIsIDQzMjY1LCA0MzI3MSwgNDMyNzcsIDQzMjgxLCA0MzI4NSwgNDMyODksIDQzMjkyLCA0MzI5NiwgNDMzMDAsIAorICAgIDQzMzAyLCA0MzMxMSwgNDMzMjAsIDQzMzI1LCA0MzMzMCwgNDMzMzYsIDQzMzQyLCA0MzM0OCwgNDMzNTEsIDQzMzU0LCAKKyAgICA0MzM1NywgNDMzNjAsIDQzMzYyLCA0MzM2NywgNDMzNzIsIDQzMzc3LCA0MzM4MywgNDMzODksIDQzMzk4LCA0MzQwNywgCisgICAgNDM0MTQsIDQzNDIxLCA0MzQyOCwgNDM0MzUsIDQzNDQ1LCA0MzQ1NSwgNDM0NjUsIDQzNDc1LCA0MzQ4NSwgNDM0OTUsIAorICAgIDQzNTA0LCA0MzUxMywgNDM1MjIsIDQzNTMxLCA0MzUzOSwgNDM1NTEsIDQzNTYyLCA0MzU3OCwgNDM1ODEsIDQzNTg3LCAKKyAgICA0MzU5MywgNDM1OTksIDQzNjA3LCA0MzYyMiwgNDM2MzgsIDQzNjQ0LCA0MzY1MCwgNDM2NTcsIDQzNjYzLCA0MzY3MiwgCisgICAgNDM2NzksIDQzNjkzLCA0MzcwOCwgNDM3MTMsIDQzNzE5LCA0MzcyNywgNDM3MzAsIDQzNzMzLCA0MzczNSwgNDM3MzgsIAorICAgIDQzNzQxLCA0Mzc0MywgNDM3NDUsIDQzNzQ5LCA0Mzc1MiwgNDM3NTUsIDQzNzU4LCA0Mzc2MSwgNDM3NjYsIDQzNzcxLCAKKyAgICA0Mzc3NiwgNDM3ODEsIDQzNzg2LCA0Mzc4OSwgNDM3OTEsIDQzNzkzLCA0Mzc5NSwgNDM3OTksIDQzODAzLCA0MzgwNywgCisgICAgNDM4MTMsIDQzODE4LCA0MzgyMCwgNDM4MjIsIDQzODI3LCA0MzgzMiwgNDM4MzcsIDQzODQyLCA0Mzg0NywgNDM4NTIsIAorICAgIDQzODU0LCA0Mzg1NiwgNDM4NjYsIDQzODcwLCA0Mzg3OCwgNDM4ODcsIDQzODg5LCA0Mzg5NCwgNDM4OTksIDQzOTA3LCAKKyAgICA0MzkxMSwgNDM5MTMsIDQzOTE3LCA0MzkxOSwgNDM5MjMsIDQzOTI3LCA0MzkzMSwgNDM5MzMsIDQzOTM1LCA0MzkzNywgCisgICAgNDM5NDQsIDQzOTUzLCA0Mzk2MiwgNDM5NzEsIDQzOTgwLCA0Mzk4OSwgNDM5OTgsIDQ0MDA3LCA0NDAxNiwgNDQwMjQsIAorICAgIDQ0MDMyLCA0NDA0MSwgNDQwNTAsIDQ0MDU5LCA0NDA2OCwgNDQwNzYsIDQ0MDg0LCA0NDA5MywgNDQxMDIsIDQ0MTExLCAKKyAgICA0NDEyMSwgNDQxMzAsIDQ0MTQwLCA0NDE0OSwgNDQxNTksIDQ0MTY3LCA0NDE3NiwgNDQxODYsIDQ0MTk1LCA0NDIwNSwgCisgICAgNDQyMTQsIDQ0MjI0LCA0NDIzMiwgNDQyNDEsIDQ0MjUwLCA0NDI1OSwgNDQyNjgsIDQ0Mjc3LCA0NDI4NiwgNDQyOTYsIAorICAgIDQ0MzA1LCA0NDMxNCwgNDQzMjMsIDQ0MzMzLCA0NDM0MiwgNDQzNTEsIDQ0MzYwLCA0NDM2OSwgNDQzNzksIDQ0Mzg5LCAKKyAgICA0NDM5OCwgNDQ0MDcsIDQ0NDE1LCA0NDQyNCwgNDQ0MzEsIDQ0NDQwLCA0NDQ0OSwgNDQ0NjAsIDQ0NDY5LCA0NDQ3OSwgCisgICAgNDQ0ODksIDQ0NDk2LCA0NDUwMywgNDQ1MTAsIDQ0NTE5LCA0NDUyOCwgNDQ1MzcsIDQ0NTQ2LCA0NDU1MywgNDQ1NTgsIAorICAgIDQ0NTY2LCA0NDU3MSwgNDQ1NzQsIDQ0NTgxLCA0NDU4NCwgNDQ1ODksIDQ0NTk0LCA0NDU5NywgNDQ2MDAsIDQ0NjA4LCAKKyAgICA0NDYxMSwgNDQ2MTYsIDQ0NjE5LCA0NDYyNywgNDQ2MzIsIDQ0NjQwLCA0NDY0MywgNDQ2NDYsIDQ0NjQ5LCA0NDY1NCwgCisgICAgNDQ2NTksIDQ0NjYyLCA0NDY2NSwgNDQ2NzMsIDQ0Njc2LCA0NDY4MywgNDQ2OTAsIDQ0Njk0LCA0NDY5OCwgNDQ3MDMsIAorICAgIDQ0NzA4LCA0NDcxNCwgNDQ3MTksIDQ0NzI1LCA0NDczMSwgNDQ3MzYsIDQ0NzQyLCA0NDc1MCwgNDQ3NTYsIDQ0NzY0LCAKKyAgICA0NDc3MiwgNDQ3NzgsIDQ0Nzg2LCA0NDc5NCwgNDQ4MDIsIDQ0ODEwLCA0NDgxNiwgNDQ4MjQsIDQ0ODMyLCA0NDg0MCwgCisgICAgNDQ4NDQsIDQ0ODUwLCA0NDg2NCwgNDQ4NzgsIDQ0ODgyLCA0NDg4NiwgNDQ4OTAsIDQ0ODk0LCA0NDkwNCwgNDQ5MDgsIAorICAgIDQ0OTEzLCA0NDkxOCwgNDQ5MjQsIDQ0OTMwLCA0NDkzNiwgNDQ5NDIsIDQ0OTUyLCA0NDk2MiwgNDQ5NzAsIDQ0OTgxLCAKKyAgICA0NDk5MiwgNDUwMDAsIDQ1MDExLCA0NTAyMiwgNDUwMzAsIDQ1MDQxLCA0NTA1MiwgNDUwNjAsIDQ1MDY4LCA0NTA3OCwgCisgICAgNDUwODgsIDQ1MDkxLCA0NTA5NCwgNDUwOTcsIDQ1MTAyLCA0NTEwNiwgNDUxMTIsIDQ1MTE5LCA0NTEyNiwgNDUxMzQsIAorICAgIDQ1MTQxLCA0NTE0NSwgNDUxNDksIDQ1MTUzLCA0NTE1NywgNDUxNTksIDQ1MTYzLCA0NTE2NywgNDUxNzIsIDQ1MTc3LCAKKyAgICA0NTE4NCwgNDUxOTEsIDQ1MTk0LCA0NTIwMSwgNDUyMDMsIDQ1MjA1LCA0NTIwOSwgNDUyMTMsIDQ1MjE4LCA0NTIyNCwgCisgICAgNDUyMzAsIDQ1MjM2LCA0NTI0MiwgNDUyNTEsIDQ1MjYwLCA0NTI2OSwgNDUyNzMsIDQ1Mjc1LCA0NTI3OSwgNDUyODYsIAorICAgIDQ1MjkzLCA0NTMwMCwgNDUzMDcsIDQ1MzE0LCA0NTMxNywgNDUzMjIsIDAsIDAsIDAsIDAsIDAsIDQ1MzI4LCA0NTMzMiwgCisgICAgNDUzMzksIDQ1MzQ2LCA0NTM1MywgNDUzNjAsIDQ1MzY0LCA0NTM2OCwgNDUzNzIsIDQ1Mzc2LCA0NTM4MiwgNDUzODgsIAorICAgIDQ1MzkzLCA0NTM5OSwgNDU0MDUsIDQ1NDExLCA0NTQxNywgNDU0MjUsIDQ1NDMyLCA0NTQzOSwgNDU0NDYsIDQ1NDUzLCAKKyAgICA0NTQ1OCwgNDU0NjQsIDQ1NDczLCA0NTQ3NywgNDU0ODQsIDQ1NDg4LCA0NTQ5MiwgNDU0OTgsIDQ1NTA0LCA0NTUxMCwgCisgICAgNDU1MTYsIDQ1NTIwLCA0NTUyNCwgNDU1MjcsIDQ1NTMwLCA0NTUzNCwgNDU1NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1NTQ4LCA0NTU1MSwgNDU1NTUsIAorICAgIDQ1NTU5LCA0NTU2NSwgNDU1NzEsIDQ1NTc3LCA0NTU4NSwgNDU1OTIsIDQ1NTk2LCA0NTYwNCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU2MDksIDQ1NjEyLCA0NTYxNSwgNDU2MTgsIAorICAgIDQ1NjIxLCA0NTYyNCwgNDU2MjcsIDQ1NjMxLCA0NTYzNCwgNDU2MzgsIDQ1NjQyLCA0NTY0NiwgNDU2NTAsIDQ1NjU0LCAKKyAgICA0NTY1OCwgNDU2NjIsIDQ1NjY2LCA0NTY3MCwgNDU2NzQsIDQ1Njc4LCA0NTY4MiwgNDU2ODUsIDQ1Njg4LCA0NTY5MSwgCisgICAgNDU2OTQsIDQ1Njk3LCA0NTcwMCwgNDU3MDQsIDQ1NzA3LCA0NTcxMSwgNDU3MTUsIDQ1NzE5LCA0NTcyMywgNDU3MjcsIAorICAgIDQ1NzMxLCA0NTczNSwgNDU3MzksIDQ1NzQzLCA0NTc0NywgNDU3NTEsIDQ1NzU1LCA0NTc2MSwgNDU3NjcsIDQ1NzczLCAKKyAgICA0NTc4MCwgNDU3ODcsIDQ1Nzk0LCA0NTgwMSwgNDU4MDgsIDQ1ODE1LCA0NTgyMiwgNDU4MjksIDQ1ODM2LCA0NTg0MywgCisgICAgNDU4NTAsIDQ1ODU3LCA0NTg2NCwgNDU4NzEsIDQ1ODc4LCA0NTg4NSwgNDU4OTIsIDQ1ODk3LCA0NTkwMywgNDU5MDksIAorICAgIDQ1OTE1LCA0NTkyMCwgNDU5MjYsIDQ1OTMyLCA0NTkzOCwgNDU5NDMsIDQ1OTQ5LCA0NTk1NSwgNDU5NjAsIDQ1OTY2LCAKKyAgICA0NTk3MiwgNDU5NzcsIDQ1OTgzLCA0NTk4OSwgNDU5OTQsIDQ1OTk5LCA0NjAwNSwgNDYwMTAsIDQ2MDE2LCA0NjAyMiwgCisgICAgNDYwMjgsIDQ2MDM0LCA0NjA0MCwgNDYwNDUsIDQ2MDUxLCA0NjA1NywgNDYwNjMsIDQ2MDY4LCA0NjA3NCwgNDYwODAsIAorICAgIDQ2MDg2LCA0NjA5MSwgNDYwOTcsIDQ2MTAzLCA0NjEwOCwgNDYxMTQsIDQ2MTIwLCA0NjEyNSwgNDYxMzEsIDQ2MTM3LCAKKyAgICA0NjE0MiwgNDYxNDcsIDQ2MTUzLCA0NjE1OCwgNDYxNjQsIDQ2MTcwLCA0NjE3NiwgNDYxODIsIDQ2MTg4LCA0NjE5MywgCisgICAgNDYxOTksIDQ2MjA1LCA0NjIxMSwgNDYyMTYsIDQ2MjIyLCA0NjIyOCwgNDYyMzQsIDQ2MjM5LCA0NjI0NSwgNDYyNTEsIAorICAgIDQ2MjU2LCA0NjI2MiwgNDYyNjgsIDQ2MjczLCA0NjI3OSwgNDYyODUsIDQ2MjkwLCA0NjI5NSwgNDYzMDEsIDQ2MzA2LCAKKyAgICA0NjMxMiwgNDYzMTgsIDQ2MzI0LCA0NjMzMCwgNDYzMzYsIDQ2MzQwLCA0NjM0NSwgNDYzNTAsIDQ2MzU1LCA0NjM2MCwgCisgICAgNDYzNjUsIDQ2MzcwLCA0NjM3NSwgNDYzODAsIDQ2Mzg1LCA0NjM5MCwgNDYzOTQsIDQ2Mzk4LCA0NjQwMiwgNDY0MDYsIAorICAgIDQ2NDEwLCA0NjQxNCwgNDY0MTksIDQ2NDIzLCA0NjQyOCwgNDY0MzMsIDQ2NDM4LCA0NjQ0MywgNDY0NDgsIDQ2NDUzLCAKKyAgICA0NjQ1OCwgNDY0NjcsIDQ2NDc2LCA0NjQ4NSwgNDY0OTQsIDQ2NTAzLCA0NjUxMiwgNDY1MjEsIDQ2NTMwLCA0NjUzNywgCisgICAgNDY1NDUsIDQ2NTUzLCA0NjU2MCwgNDY1NjcsIDQ2NTc1LCA0NjU4MywgNDY1OTAsIDQ2NTk3LCA0NjYwNSwgNDY2MTMsIAorICAgIDQ2NjIwLCA0NjYyNywgNDY2MzUsIDQ2NjQzLCA0NjY1MCwgNDY2NTcsIDQ2NjY1LCA0NjY3NCwgNDY2ODMsIDQ2NjkxLCAKKyAgICA0NjcwMCwgNDY3MDksIDQ2NzE2LCA0NjcyMywgNDY3MzEsIDQ2NzQwLCA0Njc0OSwgNDY3NTcsIDQ2NzY2LCA0Njc3NSwgCisgICAgNDY3ODIsIDQ2Nzg5LCA0Njc5OCwgNDY4MDcsIDQ2ODE2LCA0NjgyNSwgNDY4MzQsIDQ2ODQzLCA0Njg1MCwgNDY4NTcsIAorICAgIDQ2ODY2LCA0Njg3NSwgNDY4ODQsIDQ2ODkzLCA0NjkwMiwgNDY5MTEsIDQ2OTE4LCA0NjkyNSwgNDY5MzQsIDQ2OTQzLCAKKyAgICA0Njk1MiwgNDY5NjIsIDQ2OTcyLCA0Njk4MSwgNDY5OTEsIDQ3MDAxLCA0NzAxMSwgNDcwMjEsIDQ3MDMxLCA0NzA0MSwgCisgICAgNDcwNTAsIDQ3MDU5LCA0NzA2NiwgNDcwNzQsIDQ3MDgyLCA0NzA5MCwgNDcwOTgsIDQ3MTAzLCA0NzEwOCwgNDcxMTcsIAorICAgIDQ3MTI1LCA0NzEzMiwgNDcxNDEsIDQ3MTQ5LCA0NzE1NiwgNDcxNjUsIDQ3MTczLCA0NzE4MCwgNDcxODksIDQ3MTk3LCAKKyAgICA0NzIwNCwgNDcyMTMsIDQ3MjIxLCA0NzIyOCwgNDcyMzcsIDQ3MjQ1LCA0NzI1MiwgNDcyNjIsIDQ3MjcxLCA0NzI3OCwgCisgICAgNDcyODgsIDQ3Mjk3LCA0NzMwNCwgNDczMTQsIDQ3MzIzLCA0NzMzMCwgNDczMzksIDQ3MzQ4LCA0NzM1NywgNDczNjYsIAorICAgIDQ3MzgwLCA0NzM5NCwgNDc0MDEsIDQ3NDA2LCA0NzQxMSwgNDc0MTYsIDQ3NDIxLCA0NzQyNiwgNDc0MzEsIDQ3NDM2LCAKKyAgICA0NzQ0MSwgNDc0NDksIDQ3NDU3LCA0NzQ2NSwgNDc0NzMsIDQ3NDc4LCA0NzQ4NSwgNDc0OTIsIDQ3NDk5LCA0NzUwNCwgCisgICAgNDc1MTIsIDQ3NTE5LCA0NzUyNywgNDc1MzEsIDQ3NTM4LCA0NzU0NCwgNDc1NTEsIDQ3NTU1LCA0NzU2MSwgNDc1NjcsIAorICAgIDQ3NTczLCA0NzU3NywgNDc1ODAsIDQ3NTg0LCA0NzU4OCwgNDc1OTUsIDQ3NjAxLCA0NzYwNywgNDc2MTMsIDQ3NjE5LCAKKyAgICA0NzYzMywgNDc2NDMsIDQ3NjU3LCA0NzY3MSwgNDc2NzcsIDQ3Njg3LCA0NzcwMSwgNDc3MDQsIDQ3NzA3LCA0NzcxNCwgCisgICAgNDc3MjIsIDQ3NzI4LCA0NzczMywgNDc3NDEsIDQ3NzUzLCA0Nzc2NSwgNDc3NzMsIDQ3Nzc3LCA0Nzc4MSwgNDc3ODQsIAorICAgIDQ3Nzg3LCA0Nzc5MSwgNDc3OTUsIDQ3Nzk4LCA0NzgwMSwgNDc4MDYsIDQ3ODExLCA0NzgxNywgNDc4MjMsIDQ3ODI4LCAKKyAgICA0NzgzMywgNDc4MzksIDQ3ODQ1LCA0Nzg1MCwgNDc4NTUsIDQ3ODYwLCA0Nzg2NSwgNDc4NzEsIDQ3ODc3LCA0Nzg4MiwgCisgICAgNDc4ODcsIDQ3ODkzLCA0Nzg5OSwgNDc5MDQsIDQ3OTA5LCA0NzkxMiwgNDc5MTUsIDQ3OTI0LCA0NzkyNiwgNDc5MjgsIAorICAgIDQ3OTMxLCA0NzkzNSwgNDc5NDEsIDQ3OTQzLCA0Nzk0NiwgNDc5NTMsIDQ3OTYwLCA0Nzk2OCwgNDc5NzYsIDQ3OTg2LCAKKyAgICA0ODAwMCwgNDgwMDUsIDQ4MDEwLCA0ODAxNCwgNDgwMTksIDQ4MDI3LCA0ODAzNSwgNDgwNDQsIDQ4MDUzLCA0ODA2MiwgCisgICAgNDgwNzEsIDQ4MDc2LCA0ODA4MSwgNDgwODcsIDQ4MDkzLCA0ODA5OSwgNDgxMDUsIDQ4MTA4LCA0ODExNCwgNDgxMjAsIAorICAgIDQ4MTMwLCA0ODE0MCwgNDgxNDgsIDQ4MTU2LCA0ODE2NSwgNDgxNzQsIDQ4MTc4LCA0ODE4NiwgNDgxOTQsIDQ4MjAyLCAKKyAgICA0ODIxMCwgNDgyMTksIDQ4MjI4LCA0ODIzNywgNDgyNDYsIDQ4MjUxLCA0ODI1NiwgNDgyNjEsIDQ4MjY2LCA0ODI3MSwgCisgICAgNDgyNzcsIDQ4MjgzLCA0ODI4OCwgNDgyOTQsIDQ4Mjk2LCA0ODI5OCwgNDgzMDAsIDQ4MzAyLCA0ODMwNSwgNDgzMDgsIAorICAgIDQ4MzEwLCA0ODMxMiwgNDgzMTQsIDQ4MzE4LCA0ODMyMiwgNDgzMjQsIDQ4MzI2LCA0ODMyOSwgNDgzMzIsIDQ4MzM2LCAKKyAgICA0ODM0MiwgNDgzNDgsIDQ4MzUwLCA0ODM1NywgNDgzNjEsIDQ4MzY2LCA0ODM3MSwgNDgzNzMsIDQ4MzgzLCA0ODM4OSwgCisgICAgNDgzOTUsIDQ4NDAxLCA0ODQwNywgNDg0MTMsIDQ4NDE5LCA0ODQyNCwgNDg0MjcsIDQ4NDMwLCA0ODQzMywgNDg0MzUsIAorICAgIDQ4NDM3LCA0ODQ0MSwgNDg0NDUsIDQ4NDUwLCA0ODQ1NSwgNDg0NjAsIDQ4NDYzLCA0ODQ2NywgNDg0NzIsIDQ4NDc1LCAKKyAgICA0ODQ3OSwgNDg0ODQsIDQ4NDg5LCA0ODQ5NCwgNDg0OTksIDQ4NTA0LCA0ODUwOSwgNDg1MTQsIDQ4NTE5LCA0ODUyNCwgCisgICAgNDg1MjksIDQ4NTM0LCA0ODUzOSwgNDg1NDUsIDQ4NTUxLCA0ODU1NywgNDg1NTksIDQ4NTYyLCA0ODU2NCwgNDg1NjcsIAorICAgIDQ4NTY5LCA0ODU3MSwgNDg1NzMsIDQ4NTc1LCA0ODU3NywgNDg1NzksIDQ4NTgxLCA0ODU4MywgNDg1ODUsIDQ4NTg3LCAKKyAgICA0ODU4OSwgNDg1OTEsIDQ4NTkzLCA0ODU5NSwgNDg1OTcsIDQ4NTk5LCA0ODYwMSwgNDg2MDYsIDQ4NjExLCA0ODYxNiwgCisgICAgNDg2MjEsIDQ4NjI2LCA0ODYzMSwgNDg2MzYsIDQ4NjQxLCA0ODY0NiwgNDg2NTEsIDQ4NjU2LCA0ODY2MSwgNDg2NjYsIAorICAgIDQ4NjcxLCA0ODY3NiwgNDg2ODEsIDQ4Njg2LCA0ODY5MSwgNDg2OTYsIDQ4NzAxLCA0ODcwNSwgNDg3MDksIDQ4NzEzLCAKKyAgICA0ODcxOSwgNDg3MjUsIDQ4NzMwLCA0ODczNSwgNDg3NDAsIDQ4NzQ2LCA0ODc1MiwgNDg3NTcsIDQ4NzY1LCA0ODc3MywgCisgICAgNDg3ODEsIDQ4Nzg5LCA0ODc5NywgNDg4MDUsIDQ4ODEzLCA0ODgyMSwgNDg4MjcsIDQ4ODMyLCA0ODgzNywgNDg4NDIsIAorICAgIDQ4ODQ1LCA0ODg0OSwgNDg4NTMsIDQ4ODU3LCA0ODg2MSwgNDg4NjUsIDQ4ODY5LCA0ODg3NiwgNDg4ODMsIDQ4ODkxLCAKKyAgICA0ODg5OSwgNDg5MDQsIDQ4OTA5LCA0ODkxNiwgNDg5MjMsIDQ4OTMwLCA0ODkzNywgNDg5NDAsIDQ4OTQzLCA0ODk0OCwgCisgICAgNDg5NTAsIDQ4OTU0LCA0ODk1OSwgNDg5NjEsIDQ4OTYzLCA0ODk2NSwgNDg5NjcsIDQ4OTcyLCA0ODk3NSwgNDg5NzcsIAorICAgIDQ4OTgyLCA0ODk4OSwgNDg5OTYsIDQ4OTk5LCA0OTAwMywgNDkwMDgsIDQ5MDEzLCA0OTAyMSwgNDkwMjcsIDQ5MDMzLCAKKyAgICA0OTA0NSwgNDkwNTIsIDQ5MDYwLCA0OTA2NSwgNDkwNzAsIDQ5MDc2LCA0OTA3OSwgNDkwODIsIDQ5MDg3LCA0OTA4OSwgCisgICAgNDkwOTMsIDQ5MDk1LCA0OTA5NywgNDkwOTksIDQ5MTAxLCA0OTEwMywgNDkxMDUsIDQ5MTEwLCA0OTExMiwgNDkxMTQsIAorICAgIDQ5MTE2LCA0OTExOCwgNDkxMjIsIDQ5MTI0LCA0OTEyNywgNDkxMzIsIDQ5MTM3LCA0OTE0MiwgNDkxNDcsIDQ5MTUzLCAKKyAgICA0OTE1OSwgNDkxNjEsIDQ5MTY0LCA0OTE3MSwgNDkxNzgsIDQ5MTg1LCA0OTE5MiwgNDkxOTYsIDQ5MjAwLCA0OTIwMiwgCisgICAgNDkyMDQsIDQ5MjA4LCA0OTIxNCwgNDkyMTksIDQ5MjIxLCA0OTIyNSwgNDkyMzQsIDQ5MjQyLCA0OTI1MCwgNDkyNTYsIAorICAgIDQ5MjYyLCA0OTI2NywgNDkyNzMsIDQ5Mjc4LCA0OTI4MSwgNDkyOTUsIDQ5Mjk4LCA0OTMwMywgNDkzMDgsIDQ5MzE0LCAKKyAgICA0OTMyNCwgNDkzMjYsIDQ5MzMyLCA0OTMzOCwgNDkzNDIsIDQ5MzQ5LCA0OTM1MywgNDkzNTUsIDQ5MzU3LCA0OTM2MSwgCisgICAgNDkzNjcsIDQ5MzcyLCA0OTM3OCwgNDkzODAsIDQ5Mzg2LCA0OTM4OCwgNDkzOTQsIDQ5Mzk2LCA0OTM5OCwgNDk0MDMsIAorICAgIDQ5NDA1LCA0OTQwOSwgNDk0MTQsIDQ5NDE2LCA0OTQyMSwgNDk0MjYsIDQ5NDMwLCA0OTQzNywgNDk0NDcsIDQ5NDUyLCAKKyAgICA0OTQ1OCwgNDk0NjEsIDQ5NDY3LCA0OTQ3MCwgNDk0NzUsIDQ5NDgwLCA0OTQ4NCwgNDk0ODYsIDQ5NDg4LCA0OTQ5MiwgCisgICAgNDk0OTYsIDQ5NTAwLCA0OTUwNCwgNDk1MDksIDQ5NTExLCA0OTUxNiwgNDk1MTksIDQ5NTIyLCA0OTUyNSwgNDk1MjksIAorICAgIDQ5NTMzLCA0OTUzOCwgNDk1NDIsIDQ5NTQ3LCA0OTU1MiwgNDk1NTYsIDQ5NTYxLCA0OTU2NywgNDk1NzAsIDQ5NTc2LCAKKyAgICA0OTU4MSwgNDk1ODUsIDQ5NTkwLCA0OTU5NiwgNDk2MDIsIDQ5NjA5LCA0OTYxNSwgNDk2MjIsIDQ5NjI5LCA0OTYzMSwgCisgICAgNDk2MzgsIDQ5NjQyLCA0OTY0OCwgNDk2NTQsIDQ5NjU5LCA0OTY2NSwgNDk2NjksIDQ5Njc0LCA0OTY3NywgNDk2ODIsIAorICAgIDQ5Njg4LCA0OTY5NSwgNDk3MDMsIDQ5NzEwLCA0OTcxOSwgNDk3MjksIDQ5NzM2LCA0OTc0MiwgNDk3NDYsIDQ5NzUzLCAKKyAgICA0OTc1OCwgNDk3NjcsIDQ5NzcwLCA0OTc3MywgNDk3ODIsIDQ5NzkyLCA0OTc5OSwgNDk4MDEsIDQ5ODA3LCA0OTgxMiwgCisgICAgNDk4MTQsIDQ5ODE3LCA0OTgyMSwgNDk4MjksIDQ5ODM4LCA0OTg0MSwgNDk4NDYsIDQ5ODUxLCA0OTg1OSwgNDk4NjcsIAorICAgIDQ5ODc1LCA0OTg4MywgNDk4ODksIDQ5ODk1LCA0OTkwMSwgNDk5MDksIDQ5OTE0LCA0OTkxNywgNDk5MjEsIDQ5OTI0LCAKKyAgICA0OTkzNiwgNDk5NDYsIDQ5OTU3LCA0OTk2NiwgNDk5NzcsIDQ5OTg3LCA0OTk5NiwgNTAwMDIsIDUwMDEwLCA1MDAxNCwgCisgICAgNTAwMjIsIDUwMDI2LCA1MDAzNCwgNTAwNDEsIDUwMDQ4LCA1MDA1NywgNTAwNjYsIDUwMDc2LCA1MDA4NiwgNTAwOTYsIAorICAgIDUwMTA2LCA1MDExNSwgNTAxMjQsIDUwMTM0LCA1MDE0NCwgNTAxNTMsIDUwMTYyLCA1MDE2OCwgNTAxNzQsIDUwMTgwLCAKKyAgICA1MDE4NiwgNTAxOTIsIDUwMTk4LCA1MDIwNSwgNTAyMTEsIDUwMjE4LCA1MDIyNSwgNTAyMzEsIDUwMjM3LCA1MDI0MywgCisgICAgNTAyNDksIDUwMjU1LCA1MDI2MSwgNTAyNjgsIDUwMjc0LCA1MDI4MSwgNTAyODgsIDUwMjk1LCA1MDMwMiwgNTAzMDksIAorICAgIDUwMzE2LCA1MDMyMywgNTAzMzAsIDUwMzM4LCA1MDM0NSwgNTAzNTMsIDUwMzYxLCA1MDM2NiwgNTAzNjksIDUwMzczLCAKKyAgICA1MDM3NywgNTAzODMsIDUwMzg2LCA1MDM5MSwgNTAzOTcsIDUwNDAyLCA1MDQwNiwgNTA0MTEsIDUwNDE3LCA1MDQyNCwgCisgICAgNTA0MjcsIDUwNDM0LCA1MDQ0MSwgNTA0NDUsIDUwNDUzLCA1MDQ2MSwgNTA0NjYsIDUwNDcyLCA1MDQ3NywgNTA0ODIsIAorICAgIDUwNDg5LCA1MDQ5NiwgNTA1MDQsIDUwNTEyLCA1MDUyMSwgNTA1MjUsIDUwNTM0LCA1MDUzOSwgNTA1NDMsIDUwNTUwLCAKKyAgICA1MDU1NCwgNTA1NjAsIDUwNTY4LCA1MDU3MywgNTA1ODAsIDUwNTg0LCA1MDU4OSwgNTA1OTMsIDUwNTk4LCA1MDYwMiwgCisgICAgNTA2MDcsIDUwNjEyLCA1MDYyMSwgNTA2MjMsIDUwNjI2LCA1MDYyOSwgNTA2MzYsIDUwNjQzLCA1MDY0OSwgNTA2NTcsIAorICAgIDUwNjYzLCA1MDY3MCwgNTA2NzUsIDUwNjc4LCA1MDY4MywgNTA2ODgsIDUwNjkzLCA1MDcwMSwgNTA3MDUsIDUwNzEyLCAKKyAgICA1MDcyMCwgNTA3MjgsIDUwNzMzLCA1MDczOCwgNTA3NDQsIDUwNzQ5LCA1MDc1NCwgNTA3NjAsIDUwNzY1LCA1MDc2OCwgCisgICAgNTA3NzIsIDUwNzc2LCA1MDc4MywgNTA3OTMsIDUwNzk4LCA1MDgwNywgNTA4MTYsIDUwODIyLCA1MDgyOCwgNTA4MzMsIAorICAgIDUwODM4LCA1MDg0MywgNTA4NDgsIDUwODU0LCA1MDg2MCwgNTA4NjgsIDUwODc2LCA1MDg4MiwgNTA4ODgsIDUwODkyLCAKKyAgICA1MDg5NiwgNTA5MDMsIDUwOTEwLCA1MDkxNiwgNTA5MTksIDUwOTIyLCA1MDkyNiwgNTA5MzAsIDUwOTM0LCA1MDkzOSwgCisgICAgNTA5NDUsIDUwOTUxLCA1MDk1OCwgNTA5NjUsIDUwOTcwLCA1MDk3NCwgNTA5NzgsIDUwOTgyLCA1MDk4NiwgNTA5OTAsIAorICAgIDUwOTk0LCA1MDk5OCwgNTEwMDIsIDUxMDA2LCA1MTAxMCwgNTEwMTQsIDUxMDE4LCA1MTAyMiwgNTEwMjYsIDUxMDMwLCAKKyAgICA1MTAzNCwgNTEwMzgsIDUxMDQyLCA1MTA0NiwgNTEwNTAsIDUxMDU0LCA1MTA1OCwgNTEwNjIsIDUxMDY2LCA1MTA3MCwgCisgICAgNTEwNzQsIDUxMDc4LCA1MTA4MiwgNTEwODYsIDUxMDkwLCA1MTA5NCwgNTEwOTgsIDUxMTAyLCA1MTEwNiwgNTExMTAsIAorICAgIDUxMTE0LCA1MTExOCwgNTExMjIsIDUxMTI2LCA1MTEzMCwgNTExMzQsIDUxMTM4LCA1MTE0MiwgNTExNDYsIDUxMTUwLCAKKyAgICA1MTE1NCwgNTExNTgsIDUxMTYyLCA1MTE2NiwgNTExNzAsIDUxMTc0LCA1MTE3OCwgNTExODIsIDUxMTg2LCA1MTE5MCwgCisgICAgNTExOTQsIDUxMTk4LCA1MTIwMiwgNTEyMDYsIDUxMjEwLCA1MTIxNCwgNTEyMTgsIDUxMjIyLCA1MTIyNiwgNTEyMzAsIAorICAgIDUxMjM0LCA1MTIzOCwgNTEyNDIsIDUxMjQ2LCA1MTI1MCwgNTEyNTQsIDUxMjU4LCA1MTI2MiwgNTEyNjYsIDUxMjcwLCAKKyAgICA1MTI3NCwgNTEyNzgsIDUxMjgyLCA1MTI4NiwgNTEyOTAsIDUxMjk0LCA1MTI5OCwgNTEzMDIsIDUxMzA2LCA1MTMxMCwgCisgICAgNTEzMTQsIDUxMzE4LCA1MTMyMiwgNTEzMjYsIDUxMzMwLCA1MTMzNCwgNTEzMzgsIDUxMzQyLCA1MTM0NiwgNTEzNTAsIAorICAgIDUxMzU0LCA1MTM1OCwgNTEzNjIsIDUxMzY2LCA1MTM3MCwgNTEzNzQsIDUxMzc4LCA1MTM4MiwgNTEzODYsIDUxMzkwLCAKKyAgICA1MTM5NCwgNTEzOTgsIDUxNDAyLCA1MTQwNiwgNTE0MTAsIDUxNDE0LCA1MTQxOCwgNTE0MjIsIDUxNDI2LCA1MTQzMCwgCisgICAgNTE0MzQsIDUxNDM4LCA1MTQ0MiwgNTE0NDYsIDUxNDUwLCA1MTQ1NCwgNTE0NTgsIDUxNDYyLCA1MTQ2NiwgNTE0NzAsIAorICAgIDUxNDc0LCA1MTQ3OCwgNTE0ODIsIDUxNDg2LCA1MTQ5MCwgNTE0OTQsIDUxNDk4LCA1MTUwMiwgNTE1MDYsIDUxNTEwLCAKKyAgICA1MTUxNCwgNTE1MTgsIDUxNTIyLCA1MTUyNiwgNTE1MzAsIDUxNTM0LCA1MTUzOCwgNTE1NDIsIDUxNTQ2LCA1MTU1MCwgCisgICAgNTE1NTQsIDUxNTU4LCA1MTU2MiwgNTE1NjYsIDUxNTcwLCA1MTU3NCwgNTE1NzgsIDUxNTgyLCA1MTU4NiwgNTE1OTAsIAorICAgIDUxNTk0LCA1MTU5OCwgNTE2MDIsIDUxNjA2LCA1MTYxMCwgNTE2MTQsIDUxNjE4LCA1MTYyMiwgNTE2MjYsIDUxNjMwLCAKKyAgICA1MTYzNCwgNTE2MzgsIDUxNjQyLCA1MTY0NiwgNTE2NTAsIDUxNjU0LCA1MTY1OCwgNTE2NjIsIDUxNjY2LCA1MTY3MCwgCisgICAgNTE2NzQsIDUxNjc4LCA1MTY4MiwgNTE2ODYsIDUxNjkwLCA1MTY5NCwgNTE2OTgsIDUxNzAyLCA1MTcwNiwgNTE3MTAsIAorICAgIDUxNzE0LCA1MTcxOCwgNTE3MjIsIDUxNzI2LCA1MTczMCwgNTE3MzQsIDUxNzM4LCA1MTc0MiwgNTE3NDYsIDUxNzUwLCAKKyAgICA1MTc1NCwgNTE3NTgsIDUxNzYyLCA1MTc2NiwgNTE3NzAsIDUxNzc0LCA1MTc3OCwgNTE3ODIsIDUxNzg2LCA1MTc5MCwgCisgICAgNTE3OTQsIDUxNzk4LCA1MTgwMiwgNTE4MDYsIDUxODEwLCA1MTgxNCwgNTE4MTgsIDUxODIyLCA1MTgyNiwgNTE4MzAsIAorICAgIDUxODM0LCA1MTgzOCwgNTE4NDIsIDUxODQ2LCA1MTg1MCwgNTE4NTQsIDUxODU4LCA1MTg2MiwgNTE4NjYsIDUxODcwLCAKKyAgICA1MTg3NCwgNTE4NzgsIDUxODgyLCA1MTg4NiwgNTE4OTAsIDUxODk0LCA1MTg5OCwgNTE5MDIsIDUxOTA2LCA1MTkxMCwgCisgICAgNTE5MTQsIDUxOTE4LCA1MTkyMiwgNTE5MjYsIDUxOTMwLCA1MTkzNCwgNTE5MzgsIDUxOTQyLCA1MTk0NiwgNTE5NTAsIAorICAgIDUxOTU0LCA1MTk1OCwgNTE5NjIsIDUxOTY2LCA1MTk3MCwgNTE5NzQsIDUxOTc4LCA1MTk4MiwgNTE5ODYsIDUxOTkwLCAKKyAgICA1MTk5NCwgNTIwMDEsIDUyMDA5LCA1MjAxNSwgNTIwMjEsIDUyMDI4LCA1MjAzNSwgNTIwNDEsIDUyMDQ3LCA1MjA1MywgCisgICAgNTIwNTksIDUyMDYzLCA1MjA2NywgNTIwNzIsIDUyMDc3LCA1MjA4MywgNTIwODksIDUyMDk3LCA1MjEwNCwgNTIxMDksIAorICAgIDUyMTE0LCA1MjEyMiwgNTIxMzEsIDUyMTM4LCA1MjE0OCwgNTIxNTksIDUyMTYyLCA1MjE2NSwgNTIxNjksIDUyMTczLCAKKyAgICA1MjE4MCwgNTIxODcsIDUyMTk4LCA1MjIwOSwgNTIyMTgsIDUyMjI3LCA1MjIzMywgNTIyMzksIDUyMjQ2LCA1MjI1MywgCisgICAgNTIyNjIsIDUyMjcyLCA1MjI4MywgNTIyOTMsIDUyMzAzLCA1MjMxMywgNTIzMjQsIDUyMzM1LCA1MjM0NSwgNTIzNTYsIAorICAgIDUyMzY2LCA1MjM3NiwgNTIzODUsIDUyMzk1LCA1MjQwNSwgNTI0MTUsIDUyNDI1LCA1MjQzMiwgNTI0MzksIDUyNDQ2LCAKKyAgICA1MjQ1MywgNTI0NjMsIDUyNDczLCA1MjQ4MSwgNTI0ODksIDUyNDk2LCA1MjUwMywgNTI1MTAsIDUyNTE3LCA1MjUyNCwgCisgICAgNTI1MjksIDUyNTM0LCA1MjU0MCwgNTI1NDgsIDUyNTU3LCA1MjU2NSwgNTI1NzMsIDUyNTgxLCA1MjU4OSwgNTI1OTcsIAorICAgIDUyNjA1LCA1MjYxMywgNTI2MjEsIDUyNjMwLCA1MjYzOSwgNTI2NDgsIDUyNjU3LCA1MjY2NiwgNTI2NzUsIDUyNjg0LCAKKyAgICA1MjY5MywgNTI3MDIsIDUyNzExLCA1MjcyMCwgNTI3MjksIDUyNzM4LCA1Mjc0NywgNTI3NTYsIDUyNzY1LCA1Mjc3OSwgCisgICAgNTI3OTQsIDUyODA4LCA1MjgyMywgNTI4MzcsIDUyODUxLCA1Mjg2NSwgNTI4NzksIDUyODg5LCA1MjkwMCwgNTI5MTAsIAorICAgIDUyOTIxLCA1MjkzNiwgNTI5NTEsIDUyOTU5LCA1Mjk2NSwgNTI5NzIsIDUyOTc5LCA1Mjk4NiwgNTI5OTMsIDUyOTk4LCAKKyAgICA1MzAwNCwgNTMwMDksIDUzMDE0LCA1MzAyMCwgNTMwMjUsIDUzMDMwLCA1MzAzNSwgNTMwNDAsIDUzMDQ1LCA1MzA1MiwgCisgICAgNTMwNTgsIDUzMDY2LCA1MzA3MSwgNTMwNzYsIDUzMDgwLCA1MzA4NCwgNTMwOTIsIDUzMTAwLCA1MzEwOCwgNTMxMTYsIAorICAgIDUzMTIzLCA1MzEzMCwgNTMxNDMsIDUzMTU2LCA1MzE2OSwgNTMxODIsIDUzMTkwLCA1MzE5OCwgNTMyMDQsIDUzMjEwLCAKKyAgICA1MzIxNywgNTMyMjQsIDUzMjMxLCA1MzIzOCwgNTMyNDIsIDUzMjQ3LCA1MzI1NSwgNTMyNjMsIDUzMjcxLCA1MzI3OCwgCisgICAgNTMyODIsIDUzMjkwLCA1MzI5OCwgNTMzMDIsIDUzMzA2LCA1MzMxMSwgNTMzMTgsIDUzMzI2LCA1MzMzNCwgNTMzNTMsIAorICAgIDUzMzcyLCA1MzM5MSwgNTM0MTAsIDUzNDI5LCA1MzQ0OCwgNTM0NjcsIDUzNDg2LCA1MzQ5MiwgNTM0OTksIDUzNTA4LCAKKyAgICA1MzUxNiwgNTM1MjQsIDUzNTMwLCA1MzUzMywgNTM1MzYsIDUzNTQxLCA1MzU0NCwgNTM1NjQsIDUzNTcxLCA1MzU3NywgCisgICAgNTM1ODMsIDUzNTg3LCA1MzU5MCwgNTM1OTMsIDUzNTk2LCA1MzYwOCwgNTM2MjIsIDUzNjI5LCA1MzYzNiwgNTM2MzksIAorICAgIDUzNjQzLCA1MzY0NiwgNTM2NTEsIDUzNjU2LCA1MzY2MSwgNTM2NjcsIDUzNjc2LCA1MzY4MywgNTM2OTAsIDUzNjk4LCAKKyAgICA1MzcwNSwgNTM3MTIsIDUzNzE1LCA1MzcyMSwgNTM3MjcsIDUzNzMwLCA1MzczMywgNTM3MzgsIDUzNzQzLCA1Mzc0OSwgCisgICAgNTM3NTUsIDUzNzU5LCA1Mzc2NCwgNTM3NzEsIDUzNzc1LCA1Mzc4MSwgNTM3ODUsIDUzNzg5LCA1Mzc5NywgNTM4MDksIAorICAgIDUzODE4LCA1MzgyMiwgNTM4MjQsIDUzODMzLCA1Mzg0MiwgNTM4NDgsIDUzODUxLCA1Mzg1NywgNTM4NjMsIDUzODY4LCAKKyAgICA1Mzg3MywgNTM4NzgsIDUzODgzLCA1Mzg4OCwgNTM4OTMsIDUzODk1LCA1MzkwMSwgNTM5MDYsIDUzOTE0LCA1MzkxOCwgCisgICAgNTM5MjQsIDUzOTI3LCA1MzkzMSwgNTM5MzgsIDUzOTQ1LCA1Mzk0NywgNTM5NDksIDUzOTU1LCA1Mzk2MSwgNTM5NjcsIAorICAgIDUzOTc2LCA1Mzk4NSwgNTM5OTIsIDUzOTk5LCA1NDAwNSwgNTQwMTIsIDU0MDE3LCA1NDAyMiwgNTQwMjcsIDU0MDMzLCAKKyAgICA1NDAzOSwgNTQwNDQsIDU0MDUxLCA1NDA1NSwgNTQwNTksIDU0MDcyLCA1NDA4NSwgNTQwOTcsIDU0MTA2LCA1NDExMiwgCisgICAgNTQxMTksIDU0MTI0LCA1NDEyOSwgNTQxMzQsIDU0MTM5LCA1NDE0NCwgNTQxNDYsIDU0MTUzLCA1NDE2MSwgNTQxNjksIAorICAgIDU0MTc3LCA1NDE4NCwgNTQxOTIsIDU0MTk4LCA1NDIwMywgNTQyMDksIDU0MjE1LCA1NDIyMSwgNTQyMjgsIDU0MjM0LCAKKyAgICA1NDI0MiwgNTQyNTAsIDU0MjU4LCA1NDI2NiwgNTQyNzQsIDU0MjgwLCA1NDI4NiwgNTQyOTUsIDU0Mjk5LCA1NDMwOCwgCisgICAgNTQzMTcsIDU0MzI2LCA1NDMzNCwgNTQzMzgsIDU0MzQ0LCA1NDM1MSwgNTQzNTgsIDU0MzYyLCA1NDM2OCwgNTQzNzYsIAorICAgIDU0MzgyLCA1NDM4NywgNTQzOTMsIDU0Mzk4LCA1NDQwMywgNTQ0MTAsIDU0NDE3LCA1NDQyMiwgNTQ0MjcsIDU0NDM1LCAKKyAgICA1NDQ0MywgNTQ0NTMsIDU0NDYzLCA1NDQ3MCwgNTQ0NzcsIDU0NDgxLCA1NDQ4NSwgNTQ0OTcsIDU0NTAzLCA1NDUxMCwgCisgICAgNTQ1MTUsIDU0NTIwLCA1NDUyNywgNTQ1MzQsIDU0NTQwLCA1NDU0NiwgNTQ1NTYsIDU0NTYzLCA1NDU3MSwgNTQ1NzksIAorICAgIDU0NTg4LCA1NDU5NSwgNTQ2MDEsIDU0NjA4LCA1NDYxNCwgNTQ2MjIsIDU0NjMwLCA1NDYzOCwgNTQ2NDYsIDU0NjUyLCAKKyAgICA1NDY1NywgNTQ2NjcsIDU0Njc4LCA1NDY4NSwgNTQ2OTQsIDU0NzAwLCA1NDcwNSwgNTQ3MTAsIDU0NzIwLCA1NDcyNywgCisgICAgNTQ3MzMsIDU0NzM5LCA1NDc0NywgNTQ3NTIsIDU0NzU5LCA1NDc2NiwgNTQ3NzcsIDU0Nzg0LCA1NDc5MSwgNTQ3OTgsIAorICAgIDU0ODA1LCA1NDgxMiwgNTQ4MjAsIDU0ODI4LCA1NDg0MSwgNTQ4NTQsIDU0ODY2LCA1NDg3OCwgNTQ4OTIsIDU0OTA2LCAKKyAgICA1NDkxMiwgNTQ5MTgsIDU0OTI3LCA1NDkzNiwgNTQ5NDMsIDU0OTUwLCA1NDk1OSwgNTQ5NjgsIDU0OTc3LCA1NDk4NiwgCisgICAgNTQ5OTQsIDU1MDAyLCA1NTAxMiwgNTUwMjIsIDU1MDM2LCA1NTA1MCwgNTUwNTksIDU1MDY4LCA1NTA4MSwgNTUwOTQsIAorICAgIDU1MTAzLCA1NTExMiwgNTUxMjMsIDU1MTM0LCA1NTE0MCwgNTUxNDYsIDU1MTU1LCA1NTE2NCwgNTUxNjksIDU1MTc0LCAKKyAgICA1NTE4MiwgNTUxODgsIDU1MTk0LCA1NTIwMiwgNTUyMTAsIDU1MjIzLCA1NTIzNiwgNTUyNDAsIDU1MjQ0LCA1NTI1MiwgCisgICAgNTUyNjAsIDU1MjY3LCA1NTI3NSwgNTUyODMsIDU1MjkyLCA1NTMwMSwgNTUzMDcsIDU1MzEzLCA1NTMyMCwgNTUzMjcsIAorICAgIDU1MzM0LCA1NTM0MSwgNTUzNTAsIDU1MzU5LCA1NTM2MiwgNTUzNjUsIDU1MzcwLCA1NTM3NSwgNTUzODEsIDU1Mzg3LCAKKyAgICA1NTM5NCwgNTU0MDEsIDU1NDEyLCA1NTQyMywgNTU0MzAsIDU1NDM3LCA1NTQ0NSwgNTU0NTMsIDU1NDYxLCA1NTQ2OSwgCisgICAgNTU0NzcsIDU1NDg1LCA1NTQ5MSwgNTU0OTcsIDU1NTAxLCA1NTUwNSwgNTU1MTMsIDU1NTIxLCA1NTUyNiwgNTU1MzEsIAorICAgIDU1NTM2LCA1NTU0MSwgNTU1NDcsIDU1NTYxLCA1NTU2OCwgNTU1NzUsIDU1NTc5LCA1NTU4MSwgNTU1ODMsIDU1NTg4LCAKKyAgICA1NTU5MywgNTU1OTgsIDU1NjAyLCA1NTYxMCwgNTU2MTcsIDU1NjI0LCA1NTYzMiwgNTU2NDQsIDU1NjUyLCA1NTY2MCwgCisgICAgNTU2NzEsIDU1Njc1LCA1NTY3OSwgNTU2ODUsIDU1NjkzLCA1NTcwNiwgNTU3MTMsIDU1NzIwLCA1NTcyNywgNTU3MzMsIAorICAgIDU1NzQwLCA1NTc0OSwgNTU3NTgsIDU1NzY0LCA1NTc3MCwgNTU3NzYsIDU1Nzg2LCA1NTc5NiwgNTU4MDQsIDU1ODEzLCAKKyAgICA1NTgxOCwgNTU4MjEsIDU1ODI2LCA1NTgzMSwgNTU4MzYsIDU1ODQyLCA1NTg0OCwgNTU4NTIsIDU1ODU1LCA1NTg1OCwgCisgICAgNTU4NjEsIDU1ODY2LCA1NTg3MSwgNTU4NzcsIDU1ODgzLCA1NTg4NywgNTU4OTEsIDU1ODk4LCA1NTkwNSwgNTU5MTIsIAorICAgIDU1OTE5LCA1NTkyNiwgNTU5MzMsIDU1OTQzLCA1NTk1MywgNTU5NjAsIDU1OTY3LCA1NTk3NSwgNTU5ODMsIDU1OTg3LCAKKyAgICA1NTk5MiwgNTU5OTcsIDU2MDAzLCA1NjAwOSwgNTYwMTIsIDU2MDE1LCA1NjAxOCwgNTYwMjEsIDU2MDI2LCA1NjAzMSwgCisgICAgNTYwMzYsIDU2MDQxLCA1NjA0NiwgNTYwNTEsIDU2MDU1LCA1NjA1OSwgNTYwNjMsIDU2MDY4LCA1NjA3MywgNTYwNzcsIAorICAgIDU2MDgxLCA1NjA4NywgNTYwOTEsIDU2MDk3LCA1NjEwMiwgNTYxMDksIDU2MTE3LCA1NjEyNCwgNTYxMzIsIDU2MTM5LCAKKyAgICA1NjE0NywgNTYxNTYsIDU2MTYzLCA1NjE3MywgNTYxODQsIDU2MTkwLCA1NjE5OSwgNTYyMDUsIDU2MjE0LCA1NjIyMywgCisgICAgNTYyMjksIDU2MjM1LCA1NjIzOSwgNTYyNDMsIDU2MjUyLCA1NjI2MSwgNTYyNjgsIDU2Mjc1LCA1NjI4NCwgNTYyOTMsIAorICAgIDU2Mjk5LCA1NjMwNSwgNTYzMTIsIDU2MzE3LCA1NjMyMSwgNTYzMjUsIDU2MzMwLCA1NjMzNSwgNTYzNDAsIDU2MzQ4LCAKKyAgICA1NjM1NiwgNTYzNTksIDU2MzYzLCA1NjM3MiwgNTYzODIsIDU2MzkxLCA1NjQwMSwgNTY0MTIsIDU2NDI1LCA1NjQyOSwgCisgICAgNTY0MzMsIDU2NDM3LCA1NjQ0MSwgNTY0NDYsIDU2NDUxLCA1NjQ1NywgNTY0NjMsIDU2NDcwLCA1NjQ3NywgNTY0ODMsIAorICAgIDU2NDg5LCA1NjQ5NSwgNTY1MDEsIDU2NTA5LCA1NjUxNywgNTY1MjQsIDU2NTMxLCA1NjUzOCwgMCwgMCwgNTY1NDUsIAorICAgIDU2NTU0LCA1NjU2MywgNTY1NzMsIDU2NTgzLCA1NjU5MiwgNTY2MDEsIDU2NjEwLCA1NjYxOSwgNTY2MjUsIDU2NjMwLCAKKyAgICA1NjYzOSwgNTY2NDksIDU2NjU4LCA1NjY2OCwgNTY2NzUsIDU2NjgyLCA1NjY4OSwgNTY2OTYsIDU2NzAxLCA1NjcwNiwgCisgICAgNTY3MTEsIDU2NzE2LCA1NjcyNCwgNTY3MzMsIDU2NzQxLCA1Njc1MCwgNTY3NTQsIDU2NzU4LCA1Njc2MiwgNTY3NjYsIAorICAgIDU2Nzc2LCAwLCAwLCA1Njc3OSwgNTY3ODgsIDU2Nzk3LCA1NjgwNiwgNTY4MTUsIDU2ODIxLCA1NjgyNywgNTY4MzMsIAorICAgIDU2ODM5LCA1Njg0OSwgNTY4NTksIDU2ODY5LCA1Njg3OSwgNTY4ODksIDU2ODk5LCA1NjkwOSwgNTY5MTksIDU2OTI2LCAKKyAgICA1NjkzMywgNTY5NDAsIDU2OTQ3LCA1Njk1NCwgNTY5NjEsIDU2OTY4LCA1Njk3NSwgNTY5ODEsIDU2OTg3LCA1Njk5MywgCisgICAgNTY5OTksIDU3MDA1LCA1NzAxMSwgNTcwMTcsIDU3MDIzLCA1NzAzNCwgMCwgMCwgMCwgNTcwNDQsIDU3MDUxLCA1NzA1NCwgCisgICAgNTcwNTgsIDU3MDYyLCA1NzA2NywgNTcwNzIsIDU3MDc3LCA1NzA4MCwgNTcwODksIDU3MDk4LCA1NzEwNywgMCwgNTcxMTYsIAorICAgIDU3MTIyLCA1NzEyOCwgNTcxMzYsIDU3MTQ2LCA1NzE1MywgNTcxNjIsIDU3MTY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzE3MCwgNTcxNzksIAorICAgIDU3MTg4LCA1NzE5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTcyMDYsIAorICAgIDU3MjExLCA1NzIxNiwgNTcyMjEsIDU3MjI2LCA1NzIzMSwgNTcyMzYsIDU3MjQxLCA1NzI0NiwgNTcyNTEsIDU3MjU2LCAKKyAgICA1NzI2MiwgNTcyNjYsIDU3MjcxLCA1NzI3NiwgNTcyODEsIDU3Mjg2LCA1NzI5MSwgNTcyOTYsIDU3MzAxLCA1NzMwNiwgCisgICAgNTczMTEsIDU3MzE2LCA1NzMyMSwgNTczMjYsIDU3MzMxLCA1NzMzNiwgNTczNDEsIDU3MzQ2LCA1NzM1MSwgNTczNTYsIAorICAgIDU3MzYxLCA1NzM2NiwgNTczNzEsIDU3Mzc2LCA1NzM4MiwgNTczODcsIDU3MzkzLCA1NzQwMiwgNTc0MDcsIDU3NDE1LCAKKyAgICA1NzQyMiwgNTc0MzEsIDU3NDM2LCA1NzQ0MSwgNTc0NDYsIDU3NDUyLCAwLCA1NzQ1OSwgNTc0NjQsIDU3NDY5LCA1NzQ3NCwgCisgICAgNTc0NzksIDU3NDg0LCA1NzQ4OSwgNTc0OTQsIDU3NDk5LCA1NzUwNCwgNTc1MDksIDU3NTE1LCA1NzUxOSwgNTc1MjQsIAorICAgIDU3NTI5LCA1NzUzNCwgNTc1MzksIDU3NTQ0LCA1NzU0OSwgNTc1NTQsIDU3NTU5LCA1NzU2NCwgNTc1NjksIDU3NTc0LCAKKyAgICA1NzU3OSwgNTc1ODQsIDU3NTg5LCA1NzU5NCwgNTc1OTksIDU3NjA0LCA1NzYwOSwgNTc2MTQsIDU3NjE5LCA1NzYyNCwgCisgICAgNTc2MjksIDU3NjM1LCA1NzY0MCwgNTc2NDYsIDU3NjU1LCA1NzY2MCwgNTc2NjgsIDU3Njc1LCA1NzY4NCwgNTc2ODksIAorICAgIDU3Njk0LCA1NzY5OSwgNTc3MDUsIDAsIDU3NzEyLCA1NzcyMCwgNTc3MjgsIDU3NzM3LCA1Nzc0NCwgNTc3NTIsIDU3NzU4LCAKKyAgICA1Nzc2NywgNTc3NzUsIDU3NzgzLCA1Nzc5MSwgNTc3OTksIDU3ODA3LCA1NzgxNSwgNTc4MjAsIDU3ODI3LCA1NzgzMywgCisgICAgNTc4NDAsIDU3ODQ4LCA1Nzg1NSwgNTc4NjIsIDU3ODcwLCA1Nzg3NiwgNTc4ODIsIDU3ODg5LCA1Nzg5NiwgNTc5MDYsIAorICAgIDU3OTE2LCA1NzkyMywgNTc5MzAsIDU3OTM1LCA1Nzk0NSwgNTc5NTUsIDU3OTYwLCA1Nzk2NSwgNTc5NzAsIDU3OTc1LCAKKyAgICA1Nzk4MCwgNTc5ODUsIDU3OTkwLCA1Nzk5NSwgNTgwMDAsIDU4MDA1LCA1ODAxMCwgNTgwMTUsIDU4MDIwLCA1ODAyNSwgCisgICAgNTgwMzAsIDU4MDM1LCA1ODA0MCwgNTgwNDUsIDU4MDUwLCA1ODA1NSwgNTgwNjAsIDU4MDY1LCA1ODA3MCwgNTgwNzUsIAorICAgIDU4MDgwLCA1ODA4NSwgNTgwOTAsIDU4MDk1LCA1ODEwMCwgNTgxMDUsIDU4MTA5LCA1ODExMywgNTgxMTgsIDU4MTIzLCAKKyAgICA1ODEyOCwgNTgxMzMsIDU4MTM4LCA1ODE0MywgNTgxNDgsIDU4MTUzLCA1ODE1OCwgNTgxNjMsIDU4MTY4LCA1ODE3MywgCisgICAgNTgxNzgsIDU4MTgzLCA1ODE4OCwgNTgxOTMsIDU4MTk4LCA1ODIwMywgNTgyMTAsIDU4MjE3LCA1ODIyNCwgNTgyMzEsIAorICAgIDU4MjM4LCA1ODI0NSwgNTgyNTIsIDU4MjU5LCA1ODI2NiwgNTgyNzMsIDU4MjgwLCA1ODI4NywgNTgyOTQsIDU4MzAxLCAKKyAgICA1ODMwNiwgNTgzMTEsIDU4MzE4LCA1ODMyNSwgNTgzMzIsIDU4MzM5LCA1ODM0NiwgNTgzNTMsIDU4MzYwLCA1ODM2NywgCisgICAgNTgzNzQsIDU4MzgxLCA1ODM4OCwgNTgzOTUsIDU4NDAxLCA1ODQwNywgNTg0MTMsIDU4NDE5LCA1ODQyNiwgNTg0MzMsIAorICAgIDU4NDQwLCA1ODQ0NywgNTg0NTQsIDU4NDYxLCA1ODQ2OCwgNTg0NzUsIDU4NDgyLCA1ODQ4OSwgNTg0OTcsIDU4NTA1LCAKKyAgICA1ODUxMywgNTg1MjEsIDU4NTI5LCA1ODUzNywgNTg1NDUsIDU4NTUzLCA1ODU1NywgNTg1NjMsIDU4NTY5LCA1ODU3MywgCisgICAgNTg1NzksIDU4NTg1LCA1ODU5MSwgNTg1OTgsIDU4NjA1LCA1ODYxMiwgNTg2MTksIDU4NjI0LCA1ODYzMCwgNTg2MzYsIAorICAgIDU4NjQzLCAwLCAwLCAwLCAwLCAwLCA1ODY1MCwgNTg2NTgsIDU4NjY3LCA1ODY3NiwgNTg2ODQsIDU4NjkwLCA1ODY5NSwgCisgICAgNTg3MDAsIDU4NzA1LCA1ODcxMCwgNTg3MTUsIDU4NzIwLCA1ODcyNSwgNTg3MzAsIDU4NzM1LCA1ODc0MCwgNTg3NDUsIAorICAgIDU4NzUwLCA1ODc1NSwgNTg3NjAsIDU4NzY1LCA1ODc3MCwgNTg3NzUsIDU4NzgwLCA1ODc4NSwgNTg3OTAsIDU4Nzk1LCAKKyAgICA1ODgwMCwgNTg4MDUsIDU4ODEwLCA1ODgxNSwgNTg4MjAsIDU4ODI1LCA1ODgzMCwgNTg4MzUsIDU4ODQwLCA1ODg0NSwgCisgICAgNTg4NTAsIDU4ODU1LCA1ODg2MCwgNTg4NjUsIDU4ODcwLCA1ODg3NSwgNTg4ODAsIDU4ODg1LCAwLCA1ODg5MCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNTg4OTUsIDAsIDAsIDU4OTAwLCA1ODkwNCwgNTg5MDksIDU4OTE0LCA1ODkxOSwgNTg5MjQsIDU4OTMzLCAKKyAgICA1ODkzOCwgNTg5NDMsIDU4OTQ4LCA1ODk1MywgNTg5NTgsIDU4OTYzLCA1ODk2OCwgNTg5NzMsIDU4OTgwLCA1ODk4NSwgCisgICAgNTg5OTAsIDU4OTk5LCA1OTAwNiwgNTkwMTEsIDU5MDE2LCA1OTAyMSwgNTkwMjgsIDU5MDMzLCA1OTA0MCwgNTkwNDUsIAorICAgIDU5MDUwLCA1OTA1NywgNTkwNjQsIDU5MDY5LCA1OTA3NCwgNTkwNzksIDU5MDg2LCA1OTA5MywgNTkwOTgsIDU5MTAzLCAKKyAgICA1OTEwOCwgNTkxMTMsIDU5MTE4LCA1OTEyNSwgNTkxMzIsIDU5MTM3LCA1OTE0MiwgNTkxNDcsIDU5MTUyLCA1OTE1NywgCisgICAgNTkxNjIsIDU5MTY3LCA1OTE3MiwgNTkxNzcsIDU5MTgyLCA1OTE4NywgNTkxOTQsIDU5MTk5LCA1OTIwNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNTkyMDksIDU5MjE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1OTIyMSwgNTkyMjYsIDU5MjMwLCA1OTIzNCwgNTkyMzgsIDU5MjQyLCA1OTI0NiwgNTkyNTAsIDU5MjU0LCA1OTI1OCwgCisgICAgNTkyNjIsIDU5MjY2LCA1OTI3MiwgNTkyNzYsIDU5MjgwLCA1OTI4NCwgNTkyODgsIDU5MjkyLCA1OTI5NiwgNTkzMDAsIAorICAgIDU5MzA0LCA1OTMwOCwgNTkzMTIsIDU5MzE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTMyMCwgNTkzMjQsIAorICAgIDU5MzI4LCA1OTMzMiwgNTkzMzYsIDU5MzQwLCA1OTM0NCwgMCwgNTkzNDgsIDU5MzUyLCA1OTM1NiwgNTkzNjAsIDU5MzY0LCAKKyAgICA1OTM2OCwgNTkzNzIsIDAsIDU5Mzc2LCA1OTM4MCwgNTkzODQsIDU5Mzg4LCA1OTM5MiwgNTkzOTYsIDU5NDAwLCAwLCAKKyAgICA1OTQwNCwgNTk0MDgsIDU5NDEyLCA1OTQxNiwgNTk0MjAsIDU5NDI0LCA1OTQyOCwgMCwgNTk0MzIsIDU5NDM2LCA1OTQ0MCwgCisgICAgNTk0NDQsIDU5NDQ4LCA1OTQ1MiwgNTk0NTYsIDAsIDU5NDYwLCA1OTQ2NCwgNTk0NjgsIDU5NDcyLCA1OTQ3NiwgNTk0ODAsIAorICAgIDU5NDg0LCAwLCA1OTQ4OCwgNTk0OTIsIDU5NDk2LCA1OTUwMCwgNTk1MDQsIDU5NTA4LCA1OTUxMiwgMCwgNTk1MTYsIAorICAgIDU5NTIwLCA1OTUyNCwgNTk1MjgsIDU5NTMyLCA1OTUzNiwgNTk1NDAsIDAsIDU5NTQ0LCA1OTU0OSwgNTk1NTQsIDU5NTU5LCAKKyAgICA1OTU2NCwgNTk1NjksIDU5NTc0LCA1OTU3OCwgNTk1ODMsIDU5NTg4LCA1OTU5MywgNTk1OTcsIDU5NjAyLCA1OTYwNywgCisgICAgNTk2MTIsIDU5NjE3LCA1OTYyMSwgNTk2MjYsIDU5NjMxLCA1OTYzNiwgNTk2NDEsIDU5NjQ2LCA1OTY1MSwgNTk2NTUsIAorICAgIDU5NjYwLCA1OTY2NSwgNTk2NzIsIDU5Njc3LCA1OTY4MiwgNTk2ODgsIDU5Njk1LCA1OTcwMiwgNTk3MTEsIDU5NzE4LCAKKyAgICA1OTcyNywgNTk3MzEsIDU5NzM1LCA1OTc0MSwgNTk3NDcsIDU5NzUzLCA1OTc2MSwgNTk3NjcsIDU5NzcxLCA1OTc3NSwgCisgICAgNTk3NzksIDU5Nzg1LCA1OTc5MSwgNTk3OTUsIDU5Nzk3LCA1OTgwMSwgNTk4MDcsIDU5ODA5LCA1OTgxMywgNTk4MTYsIAorICAgIDU5ODE5LCA1OTgyNSwgNTk4MzAsIDU5ODM0LCA1OTgzOCwgNTk4NDMsIDU5ODQ5LCA1OTg1NCwgNTk4NTksIDU5ODY0LCAKKyAgICA1OTg2OSwgNTk4NzYsIDU5ODgzLCA1OTg4OCwgNTk4OTMsIDU5ODk4LCA1OTkwMywgNTk5MDgsIDU5OTEzLCA1OTkxNywgCisgICAgNTk5MjEsIDU5OTI4LCA1OTkzNSwgNTk5NDEsIDU5OTQ1LCA1OTk1MCwgNTk5NTMsIDU5OTU3LCA1OTk2NCwgNTk5NjgsIAorICAgIDU5OTcyLCA1OTk3NiwgNTk5ODAsIDU5OTg2LCA1OTk5MiwgNTk5OTYsIDYwMDAyLCA2MDAwNiwgNjAwMTAsIDYwMDE2LCAKKyAgICA2MDAyMSwgNjAwMjYsIDYwMDI4LCA2MDAzMSwgNjAwMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYwMDQxLCA2MDA0NSwgNjAwNDksIDYwMDU0LCA2MDA1OSwgNjAwNjQsIDYwMDY4LCA2MDA3MiwgNjAwNzYsIDYwMDgxLCAKKyAgICA2MDA4NiwgNjAwOTAsIDYwMDk0LCA2MDA5OCwgNjAxMDIsIDYwMTA3LCA2MDExMiwgNjAxMTcsIDYwMTIyLCA2MDEyNiwgCisgICAgNjAxMzAsIDYwMTM1LCA2MDE0MCwgNjAxNDUsIDYwMTUwLCA2MDE1NCwgMCwgNjAxNTgsIDYwMTYyLCA2MDE2NiwgNjAxNzAsIAorICAgIDYwMTc0LCA2MDE3OCwgNjAxODIsIDYwMTg3LCA2MDE5MiwgNjAxOTYsIDYwMjAxLCA2MDIwNiwgNjAyMTUsIDYwMjE5LCAKKyAgICA2MDIyMywgNjAyMjcsIDYwMjM0LCA2MDIzOCwgNjAyNDMsIDYwMjQ4LCA2MDI1MiwgNjAyNTYsIDYwMjYyLCA2MDI2NywgCisgICAgNjAyNzIsIDYwMjc3LCA2MDI4MiwgNjAyODYsIDYwMjkwLCA2MDI5NCwgNjAyOTgsIDYwMzAyLCA2MDMwNywgNjAzMTIsIAorICAgIDYwMzE2LCA2MDMyMCwgNjAzMjUsIDYwMzMwLCA2MDMzNSwgNjAzMzksIDYwMzQzLCA2MDM0OCwgNjAzNTMsIDYwMzU5LCAKKyAgICA2MDM2NSwgNjAzNjksIDYwMzc1LCA2MDM4MSwgNjAzODUsIDYwMzkxLCA2MDM5NywgNjA0MDIsIDYwNDA3LCA2MDQxMSwgCisgICAgNjA0MTcsIDYwNDIxLCA2MDQyNSwgNjA0MzEsIDYwNDM3LCA2MDQ0MiwgNjA0NDcsIDYwNDUxLCA2MDQ1NSwgNjA0NjMsIAorICAgIDYwNDY5LCA2MDQ3NSwgNjA0ODEsIDYwNDg2LCA2MDQ5MSwgNjA0OTYsIDYwNTAyLCA2MDUwNiwgNjA1MTIsIDYwNTE2LCAKKyAgICA2MDUyMCwgNjA1MjYsIDYwNTMyLCA2MDUzOCwgNjA1NDQsIDYwNTUwLCA2MDU1NiwgNjA1NjIsIDYwNTY4LCA2MDU3NCwgCisgICAgNjA1ODAsIDYwNTg2LCA2MDU5MiwgNjA1OTYsIDYwNjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2MDYwOCwgNjA2MTEsIDYwNjE1LCA2MDYxOSwgNjA2MjMsIDYwNjI3LCA2MDYzMCwgNjA2MzMsIDYwNjM3LCA2MDY0MSwgCisgICAgNjA2NDUsIDYwNjQ5LCA2MDY1MiwgNjA2NTcsIDYwNjYxLCA2MDY2NSwgNjA2NjksIDYwNjc0LCA2MDY3OCwgNjA2ODIsIAorICAgIDYwNjg2LCA2MDY5MCwgNjA2OTYsIDYwNzAyLCA2MDcwNiwgNjA3MTAsIDYwNzE0LCA2MDcxOCwgNjA3MjIsIDYwNzI2LCAKKyAgICA2MDczMCwgNjA3MzQsIDYwNzM4LCA2MDc0MiwgNjA3NDYsIDYwNzUyLCA2MDc1NiwgNjA3NjAsIDYwNzY0LCA2MDc2OCwgCisgICAgNjA3NzIsIDYwNzc2LCA2MDc4MCwgNjA3ODQsIDYwNzg4LCA2MDc5MiwgNjA3OTYsIDYwODAwLCA2MDgwNCwgNjA4MDgsIAorICAgIDYwODEyLCA2MDgxNiwgNjA4MjIsIDYwODI4LCA2MDgzMywgNjA4MzgsIDYwODQyLCA2MDg0NiwgNjA4NTAsIDYwODU0LCAKKyAgICA2MDg1OCwgNjA4NjIsIDYwODY2LCA2MDg3MCwgNjA4NzQsIDYwODc4LCA2MDg4MiwgNjA4ODYsIDYwODkwLCA2MDg5NCwgCisgICAgNjA4OTgsIDYwOTAyLCA2MDkwNiwgNjA5MTAsIDYwOTE0LCA2MDkxOCwgNjA5MjIsIDYwOTI2LCA2MDkzMCwgNjA5MzQsIAorICAgIDYwOTQwLCA2MDk0NCwgNjA5NDgsIDYwOTUyLCA2MDk1NiwgNjA5NjAsIDYwOTY0LCA2MDk2OCwgNjA5NzIsIDYwOTc3LCAKKyAgICA2MDk4NCwgNjA5ODgsIDYwOTkyLCA2MDk5NiwgNjEwMDAsIDYxMDA0LCA2MTAwOCwgNjEwMTIsIDYxMDE2LCA2MTAyMCwgCisgICAgNjEwMjQsIDYxMDI4LCA2MTAzMiwgNjEwMzksIDYxMDQzLCA2MTA0OSwgNjEwNTMsIDYxMDU3LCA2MTA2MSwgNjEwNjUsIAorICAgIDYxMDY5LCA2MTA3MiwgNjEwNzYsIDYxMDgwLCA2MTA4NCwgNjEwODgsIDYxMDkyLCA2MTA5NiwgNjExMDAsIDYxMTA0LCAKKyAgICA2MTEwOCwgNjExMTIsIDYxMTE2LCA2MTEyMCwgNjExMjQsIDYxMTI4LCA2MTEzMiwgNjExMzYsIDYxMTQwLCA2MTE0NCwgCisgICAgNjExNDgsIDYxMTUyLCA2MTE1NiwgNjExNjAsIDYxMTY0LCA2MTE2OCwgNjExNzIsIDYxMTc2LCA2MTE4MCwgNjExODQsIAorICAgIDYxMTg4LCA2MTE5MiwgNjExOTYsIDYxMjAwLCA2MTIwNiwgNjEyMTAsIDYxMjE0LCA2MTIxOCwgNjEyMjIsIDYxMjI2LCAKKyAgICA2MTIzMCwgNjEyMzQsIDYxMjM4LCA2MTI0MiwgNjEyNDYsIDYxMjUwLCA2MTI1NCwgNjEyNTgsIDYxMjYyLCA2MTI2NiwgCisgICAgNjEyNzAsIDYxMjc0LCA2MTI3OCwgNjEyODIsIDYxMjg2LCA2MTI5MCwgNjEyOTQsIDYxMjk4LCA2MTMwMiwgNjEzMDYsIAorICAgIDYxMzEwLCA2MTMxNCwgNjEzMjIsIDYxMzI2LCA2MTMzMCwgNjEzMzQsIDYxMzM4LCA2MTM0MiwgNjEzNDgsIDYxMzUyLCAKKyAgICA2MTM1NiwgNjEzNjAsIDYxMzY0LCA2MTM2OCwgNjEzNzIsIDYxMzc2LCA2MTM4MCwgNjEzODQsIDYxMzg4LCA2MTM5MiwgCisgICAgNjEzOTYsIDYxNDAwLCA2MTQwNiwgNjE0MTAsIDYxNDE0LCA2MTQxOCwgNjE0MjIsIDYxNDI2LCA2MTQzMCwgNjE0MzQsIAorICAgIDYxNDM4LCA2MTQ0MiwgNjE0NDYsIDYxNDUwLCA2MTQ1NCwgNjE0NTgsIDYxNDYyLCA2MTQ2NiwgNjE0NzAsIDYxNDc0LCAKKyAgICA2MTQ3OCwgNjE0ODIsIDYxNDg2LCA2MTQ5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE0OTQsIDYxNTAzLCA2MTUxMSwgNjE1MjIsIDYxNTMyLCAKKyAgICA2MTU0MCwgNjE1NDksIDYxNTU4LCA2MTU2OCwgNjE1ODAsIDYxNTkyLCA2MTYwNCwgMCwgMCwgMCwgMCwgNjE2MTAsIAorICAgIDYxNjEzLCA2MTYxNiwgNjE2MjEsIDYxNjI0LCA2MTYzMSwgNjE2MzUsIDYxNjM5LCA2MTY0MywgNjE2NDcsIDYxNjUxLCAKKyAgICA2MTY1NiwgNjE2NjEsIDYxNjY1LCA2MTY2OSwgNjE2NzQsIDYxNjc5LCA2MTY4NCwgNjE2ODksIDYxNjkyLCA2MTY5NSwgCisgICAgNjE3MDEsIDYxNzA3LCA2MTcxMiwgNjE3MTcsIDYxNzI0LCA2MTczMSwgNjE3MzUsIDYxNzM5LCA2MTc0MywgNjE3NTEsIAorICAgIDYxNzU3LCA2MTc2NCwgNjE3NjksIDYxNzc0LCA2MTc3OSwgNjE3ODQsIDYxNzg5LCA2MTc5NCwgNjE3OTksIDYxODA1LCAKKyAgICA2MTgxMCwgNjE4MTYsIDYxODIxLCA2MTgyNiwgNjE4MzEsIDYxODM2LCA2MTg0MiwgNjE4NDcsIDYxODUxLCA2MTg1NywgCisgICAgNjE4NjgsIDYxODc4LCA2MTg5MywgNjE5MDMsIDYxOTA3LCA2MTkxNywgNjE5MjMsIDYxOTI5LCA2MTkzNSwgNjE5NDAsIAorICAgIDYxOTQzLCA2MTk0OCwgNjE5NTIsIDAsIDYxOTU4LCA2MTk2MiwgNjE5NjUsIDYxOTY5LCA2MTk3MiwgNjE5NzYsIDYxOTc5LCAKKyAgICA2MTk4MywgNjE5ODYsIDYxOTkwLCA2MTk5MywgNjE5OTYsIDYyMDAwLCA2MjAwNCwgNjIwMDgsIDYyMDEyLCA2MjAxNiwgCisgICAgNjIwMjAsIDYyMDI0LCA2MjAyOCwgNjIwMzIsIDYyMDM2LCA2MjA0MCwgNjIwNDQsIDYyMDQ4LCA2MjA1MiwgNjIwNTYsIAorICAgIDYyMDYwLCA2MjA2NCwgNjIwNjgsIDYyMDcyLCA2MjA3NiwgNjIwODAsIDYyMDg0LCA2MjA4OCwgNjIwOTMsIDYyMDk3LCAKKyAgICA2MjEwMSwgNjIxMDUsIDYyMTA5LCA2MjExMiwgNjIxMTYsIDYyMTIwLCA2MjEyNCwgNjIxMjgsIDYyMTMyLCA2MjEzNiwgCisgICAgNjIxMzksIDYyMTQzLCA2MjE0NiwgNjIxNTAsIDYyMTU0LCA2MjE1OCwgNjIxNjIsIDYyMTY2LCA2MjE3MCwgNjIxNzQsIAorICAgIDYyMTc4LCA2MjE4MiwgNjIxODYsIDYyMTkwLCA2MjE5NCwgNjIxOTcsIDYyMjAxLCA2MjIwNSwgNjIyMDksIDYyMjEzLCAKKyAgICA2MjIxNywgNjIyMjAsIDYyMjI1LCA2MjIyOSwgNjIyMzQsIDYyMjM4LCA2MjI0MiwgNjIyNDYsIDYyMjUwLCA2MjI1NCwgCisgICAgNjIyNTgsIDYyMjYzLCA2MjI2NywgNjIyNzEsIDYyMjc1LCA2MjI3OSwgNjIyODMsIDYyMjg3LCA2MjI5MSwgMCwgMCwgCisgICAgNjIyOTYsIDYyMzA0LCA2MjMxMiwgNjIzMTksIDYyMzI2LCA2MjMzMCwgNjIzMzYsIDYyMzQxLCA2MjM0NiwgNjIzNTAsIAorICAgIDYyMzUzLCA2MjM1NywgNjIzNjAsIDYyMzY0LCA2MjM2NywgNjIzNzEsIDYyMzc0LCA2MjM3OCwgNjIzODEsIDYyMzg0LCAKKyAgICA2MjM4OCwgNjIzOTIsIDYyMzk2LCA2MjQwMCwgNjI0MDQsIDYyNDA4LCA2MjQxMiwgNjI0MTYsIDYyNDIwLCA2MjQyNCwgCisgICAgNjI0MjgsIDYyNDMyLCA2MjQzNiwgNjI0NDAsIDYyNDQ0LCA2MjQ0OCwgNjI0NTIsIDYyNDU2LCA2MjQ2MCwgNjI0NjQsIAorICAgIDYyNDY4LCA2MjQ3MiwgNjI0NzYsIDYyNDgxLCA2MjQ4NSwgNjI0ODksIDYyNDkzLCA2MjQ5NywgNjI1MDAsIDYyNTA0LCAKKyAgICA2MjUwOCwgNjI1MTIsIDYyNTE2LCA2MjUyMCwgNjI1MjQsIDYyNTI3LCA2MjUzMSwgNjI1MzQsIDYyNTM4LCA2MjU0MiwgCisgICAgNjI1NDYsIDYyNTUwLCA2MjU1NCwgNjI1NTgsIDYyNTYyLCA2MjU2NiwgNjI1NzAsIDYyNTc0LCA2MjU3OCwgNjI1ODIsIAorICAgIDYyNTg1LCA2MjU4OSwgNjI1OTMsIDYyNTk3LCA2MjYwMSwgNjI2MDUsIDYyNjA4LCA2MjYxMywgNjI2MTcsIDYyNjIyLCAKKyAgICA2MjYyNiwgNjI2MzAsIDYyNjM0LCA2MjYzOCwgNjI2NDIsIDYyNjQ2LCA2MjY1MSwgNjI2NTUsIDYyNjU5LCA2MjY2MywgCisgICAgNjI2NjcsIDYyNjcxLCA2MjY3NSwgNjI2NzksIDYyNjg0LCA2MjY4OCwgNjI2OTIsIDYyNjk2LCA2MjcwMCwgNjI3MDQsIAorICAgIDYyNzExLCA2MjcxNSwgNjI3MjEsIDAsIDAsIDAsIDAsIDAsIDYyNzI2LCA2MjczMSwgNjI3MzYsIDYyNzQxLCA2Mjc0NiwgCisgICAgNjI3NTEsIDYyNzU2LCA2Mjc2MSwgNjI3NjUsIDYyNzcwLCA2Mjc3NSwgNjI3ODAsIDYyNzg1LCA2Mjc5MCwgNjI3OTUsIAorICAgIDYyODAwLCA2MjgwNSwgNjI4MTAsIDYyODE0LCA2MjgxOSwgNjI4MjQsIDYyODI4LCA2MjgzMiwgNjI4MzYsIDYyODQwLCAKKyAgICA2Mjg0NSwgNjI4NTAsIDYyODU1LCA2Mjg2MCwgNjI4NjUsIDYyODcwLCA2Mjg3NSwgNjI4ODAsIDYyODg1LCA2Mjg5MCwgCisgICAgNjI4OTQsIDYyODk4LCA2MjkwMywgNjI5MDgsIDYyOTEzLCA2MjkxOCwgMCwgMCwgMCwgNjI5MjMsIDYyOTI3LCA2MjkzMSwgCisgICAgNjI5MzUsIDYyOTM5LCA2Mjk0MywgNjI5NDcsIDYyOTUxLCA2Mjk1NSwgNjI5NTksIDYyOTYzLCA2Mjk2NywgNjI5NzEsIAorICAgIDYyOTc1LCA2Mjk3OSwgNjI5ODMsIDYyOTg3LCA2Mjk5MSwgNjI5OTUsIDYyOTk5LCA2MzAwMywgNjMwMDcsIDYzMDExLCAKKyAgICA2MzAxNSwgNjMwMTksIDYzMDIzLCA2MzAyNywgNjMwMzEsIDYzMDM1LCA2MzAzOSwgNjMwNDMsIDYzMDQ2LCA2MzA1MCwgCisgICAgNjMwNTMsIDYzMDU3LCA2MzA2MSwgNjMwNjQsIDYzMDY4LCA2MzA3MiwgNjMwNzUsIDYzMDc5LCA2MzA4MywgNjMwODcsIAorICAgIDYzMDkxLCA2MzA5NCwgNjMwOTgsIDYzMTAyLCA2MzEwNiwgNjMxMTAsIDYzMTE0LCA2MzExOCwgNjMxMjEsIDYzMTI0LCAKKyAgICA2MzEyOCwgNjMxMzIsIDYzMTM2LCA2MzE0MCwgNjMxNDQsIDYzMTQ4LCA2MzE1MiwgNjMxNTYsIDYzMTYwLCA2MzE2NCwgCisgICAgNjMxNjgsIDYzMTcyLCA2MzE3NiwgNjMxODAsIDYzMTg0LCA2MzE4OCwgNjMxOTIsIDYzMTk2LCA2MzIwMCwgNjMyMDQsIAorICAgIDYzMjA4LCA2MzIxMiwgNjMyMTYsIDYzMjIwLCA2MzIyNCwgNjMyMjgsIDYzMjMyLCA2MzIzNiwgNjMyNDAsIDYzMjQ0LCAKKyAgICA2MzI0OCwgNjMyNTIsIDYzMjU2LCA2MzI2MCwgNjMyNjQsIDYzMjY4LCA2MzI3MiwgNjMyNzYsIDYzMjgwLCA2MzI4NCwgCisgICAgNjMyODgsIDAsIDYzMjkyLCA2MzI5OCwgNjMzMDQsIDYzMzA5LCA2MzMxNCwgNjMzMTksIDYzMzI1LCA2MzMzMSwgNjMzMzYsIAorICAgIDYzMzQyLCA2MzM0OCwgNjMzNTQsIDYzMzYwLCA2MzM2NiwgNjMzNzIsIDYzMzc4LCA2MzM4NCwgNjMzODksIDYzMzk0LCAKKyAgICA2MzM5OSwgNjM0MDQsIDYzNDA5LCA2MzQxNCwgNjM0MTksIDYzNDI0LCA2MzQyOSwgNjM0MzQsIDYzNDM5LCA2MzQ0NCwgCisgICAgNjM0NDksIDYzNDU0LCA2MzQ1OSwgNjM0NjQsIDYzNDY5LCA2MzQ3NCwgNjM0NzksIDYzNDg0LCA2MzQ5MCwgNjM0OTYsIAorICAgIDYzNTAyLCA2MzUwOCwgNjM1MTMsIDYzNTE4LCAwLCAwLCAwLCAwLCAwLCA2MzUyMywgNjM1MjgsIDYzNTMzLCA2MzUzOCwgCisgICAgNjM1NDMsIDYzNTQ4LCA2MzU1MywgNjM1NTgsIDYzNTYzLCA2MzU2OCwgNjM1NzMsIDYzNTc4LCA2MzU4MywgNjM1ODgsIAorICAgIDYzNTkzLCA2MzU5OCwgNjM2MDMsIDYzNjA4LCA2MzYxMiwgNjM2MTcsIDYzNjIyLCA2MzYyNywgNjM2MzIsIDYzNjM3LCAKKyAgICA2MzY0MiwgNjM2NDcsIDYzNjUyLCA2MzY1NywgNjM2NjIsIDYzNjY3LCA2MzY3MiwgNjM2NzcsIDYzNjgyLCA2MzY4NywgCisgICAgNjM2OTIsIDYzNjk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzcwMiwgNjM3MDcsIDYzNzEyLCAKKyAgICA2MzcxNywgNjM3MjEsIDYzNzI2LCA2MzczMCwgNjM3MzUsIDYzNzQwLCA2Mzc0NSwgNjM3NTAsIDYzNzU1LCA2Mzc2MCwgCisgICAgNjM3NjUsIDYzNzcwLCA2Mzc3NSwgNjM3ODAsIDYzNzg0LCA2Mzc4OCwgNjM3OTIsIDYzNzk2LCA2MzgwMCwgNjM4MDQsIAorICAgIDYzODA4LCA2MzgxMiwgNjM4MTYsIDYzODIwLCA2MzgyNCwgNjM4MjgsIDYzODMyLCA2MzgzNiwgNjM4NDEsIDYzODQ2LCAKKyAgICA2Mzg1MSwgNjM4NTYsIDYzODYxLCA2Mzg2NiwgNjM4NzEsIDYzODc2LCA2Mzg4MSwgNjM4ODYsIDYzODkxLCA2Mzg5NiwgCisgICAgNjM5MDEsIDYzOTA2LCA2MzkxMSwgNjM5MTcsIDAsIDYzOTI0LCA2MzkyNywgNjM5MzAsIDYzOTMzLCA2MzkzNiwgNjM5MzksIAorICAgIDYzOTQyLCA2Mzk0NiwgNjM5NDksIDYzOTUzLCA2Mzk1NywgNjM5NjEsIDYzOTY1LCA2Mzk2OSwgNjM5NzMsIDYzOTc3LCAKKyAgICA2Mzk4MSwgNjM5ODUsIDYzOTg5LCA2Mzk5MywgNjM5OTcsIDY0MDAxLCA2NDAwNSwgNjQwMDksIDY0MDEzLCA2NDAxNywgCisgICAgNjQwMjEsIDY0MDI1LCA2NDAyOSwgNjQwMzMsIDY0MDM3LCA2NDA0MSwgNjQwNDUsIDY0MDQ5LCA2NDA1MywgNjQwNTcsIAorICAgIDY0MDYxLCA2NDA2NSwgNjQwNjksIDY0MDczLCA2NDA3NywgNjQwODYsIDY0MDk1LCA2NDEwNCwgNjQxMTMsIDY0MTIyLCAKKyAgICA2NDEzMSwgNjQxNDAsIDY0MTQ5LCA2NDE1MiwgNjQxNTcsIDY0MTYyLCA2NDE2NywgNjQxNzIsIDY0MTc3LCA2NDE4MiwgCisgICAgNjQxODgsIDY0MTkzLCA2NDE5OSwgNjQyMDMsIDY0MjA4LCA2NDIxMywgNjQyMTgsIDY0MjIzLCA2NDIyOCwgNjQyMzIsIAorICAgIDY0MjM2LCA2NDI0MCwgNjQyNDQsIDY0MjQ4LCA2NDI1MiwgNjQyNTYsIDY0MjYwLCA2NDI2NCwgNjQyNjgsIDY0MjcyLCAKKyAgICA2NDI3NiwgNjQyODAsIDY0Mjg0LCA2NDI4OSwgNjQyOTQsIDY0Mjk5LCA2NDMwNCwgNjQzMDksIDY0MzE0LCA2NDMxOSwgCisgICAgNjQzMjQsIDY0MzI5LCA2NDMzNCwgNjQzMzksIDY0MzQ0LCA2NDM0OSwgNjQzNTQsIDY0MzYwLCA2NDM2NiwgNjQzNzEsIAorICAgIDY0Mzc2LCA2NDM3OSwgNjQzODIsIDY0Mzg1LCA2NDM4OCwgNjQzOTEsIDY0Mzk0LCA2NDM5OCwgNjQ0MDEsIDY0NDA1LCAKKyAgICA2NDQwOSwgNjQ0MTMsIDY0NDE3LCA2NDQyMSwgNjQ0MjUsIDY0NDI5LCA2NDQzMywgNjQ0MzcsIDY0NDQxLCA2NDQ0NSwgCisgICAgNjQ0NDksIDY0NDUzLCA2NDQ1NywgNjQ0NjEsIDY0NDY1LCA2NDQ2OSwgNjQ0NzMsIDY0NDc3LCA2NDQ4MSwgNjQ0ODUsIAorICAgIDY0NDg5LCA2NDQ5MywgNjQ0OTcsIDY0NTAxLCA2NDUwNSwgNjQ1MDksIDY0NTEzLCA2NDUxNywgNjQ1MjEsIDY0NTI1LCAKKyAgICA2NDUyOSwgNjQ1MzMsIDY0NTM3LCA2NDU0MSwgNjQ1NDUsIDY0NTQ5LCA2NDU1MywgNjQ1NTcsIDY0NTYxLCA2NDU2NSwgCisgICAgNjQ1NzAsIDY0NTc2LCA2NDU4MSwgNjQ1ODcsIDY0NTkxLCA2NDU5NiwgNjQ2MDEsIDY0NjA2LCA2NDYxMSwgNjQ2MTYsIAorICAgIDY0NjIxLCA2NDYyNywgNjQ2MzIsIDY0NjM4LCA2NDY0MiwgNjQ2NDksIDY0NjU2LCA2NDY2MywgNjQ2NzAsIDY0Njc3LCAKKyAgICA2NDY4NCwgNjQ2OTEsIDY0Njk4LCA2NDcwNSwgNjQ3MTIsIDY0NzE5LCA2NDcyNiwgNjQ3MjksIDY0NzMyLCA2NDczNSwgCisgICAgNjQ3NDAsIDY0NzQzLCA2NDc0NiwgNjQ3NDksIDY0NzUyLCA2NDc1NSwgNjQ3NTgsIDY0NzYyLCA2NDc2NiwgNjQ3NzAsIAorICAgIDY0Nzc0LCA2NDc3OCwgNjQ3ODIsIDY0Nzg2LCA2NDc5MCwgNjQ3OTQsIDY0Nzk4LCA2NDgwMiwgNjQ4MDYsIDY0ODEwLCAKKyAgICA2NDgxMywgNjQ4MTcsIDY0ODIxLCA2NDgyNSwgNjQ4MjksIDY0ODMzLCA2NDgzNiwgNjQ4NDAsIDY0ODQ0LCA2NDg0OCwgCisgICAgNjQ4NTIsIDY0ODU1LCA2NDg1OSwgNjQ4NjMsIDY0ODY3LCA2NDg3MSwgNjQ4NzQsIDY0ODc4LCA2NDg4MiwgNjQ4ODYsIAorICAgIDY0ODkwLCA2NDg5NCwgNjQ4OTgsIDY0OTAyLCA2NDkwNiwgNjQ5MTAsIDY0OTE0LCAwLCA2NDkxOCwgNjQ5MjEsIDY0OTI0LCAKKyAgICA2NDkyNywgNjQ5MzAsIDY0OTMzLCA2NDkzNiwgNjQ5MzksIDY0OTQyLCA2NDk0NSwgNjQ5NDgsIDY0OTUxLCA2NDk1NCwgCisgICAgNjQ5NTcsIDY0OTYwLCA2NDk2MywgNjQ5NjYsIDY0OTY5LCA2NDk3MiwgNjQ5NzUsIDY0OTc4LCA2NDk4MSwgNjQ5ODQsIAorICAgIDY0OTg3LCA2NDk5MCwgNjQ5OTMsIDY0OTk2LCA2NDk5OSwgNjUwMDIsIDY1MDA1LCA2NTAwOCwgNjUwMTEsIDY1MDE0LCAKKyAgICA2NTAxNywgNjUwMjAsIDY1MDIzLCA2NTAyNiwgNjUwMjksIDY1MDMyLCA2NTAzNSwgNjUwMzgsIDY1MDQxLCA2NTA0NCwgCisgICAgNjUwNDcsIDY1MDUwLCA2NTA1MywgNjUwNTYsIDY1MDU5LCA2NTA2MiwgNjUwNjUsIDY1MDY4LCA2NTA3MSwgNjUwNzQsIAorICAgIDY1MDc3LCA2NTA4MCwgNjUwODMsIDY1MDg2LCA2NTA4OSwgNjUwOTIsIDY1MDk1LCA2NTA5OCwgNjUxMDEsIDY1MTA0LCAKKyAgICA2NTEwNywgNjUxMTAsIDY1MTEzLCA2NTExNiwgNjUxMTksIDY1MTIyLCA2NTEyNSwgNjUxMjgsIDY1MTMxLCA2NTEzNCwgCisgICAgNjUxMzcsIDY1MTQwLCA2NTE0MywgNjUxNDYsIDY1MTQ5LCA2NTE1MiwgNjUxNTUsIDY1MTU4LCA2NTE2MSwgNjUxNjQsIAorICAgIDY1MTY3LCA2NTE3MCwgNjUxNzMsIDY1MTc2LCA2NTE3OSwgNjUxODIsIDY1MTkxLCA2NTE5OSwgNjUyMDcsIDY1MjE1LCAKKyAgICA2NTIyMywgNjUyMzEsIDY1MjM5LCA2NTI0OCwgNjUyNTYsIDY1MjY1LCA2NTI3NCwgNjUyODMsIDY1MjkyLCA2NTMwMSwgCisgICAgNjUzMTAsIDY1MzE5LCA2NTMyOCwgNjUzMzcsIDY1MzQ2LCA2NTM1NSwgNjUzNjQsIDY1MzczLCA2NTM4MiwgNjUzOTEsIAorICAgIDY1NDAwLCA2NTQwMywgNjU0MDYsIDY1NDA5LCA2NTQxMSwgNjU0MTQsIDY1NDE3LCA2NTQyMCwgNjU0MjUsIDY1NDMwLCAKKyAgICA2NTQzMywgNjU0NDAsIDY1NDQ3LCA2NTQ1NCwgNjU0NjEsIDY1NDY0LCA2NTQ2OSwgNjU0NzIsIDY1NDc2LCA2NTQ3OCwgCisgICAgNjU0ODAsIDY1NDgzLCA2NTQ4NiwgNjU0ODksIDY1NDkyLCA2NTQ5NSwgNjU0OTgsIDY1NTAxLCA2NTUwNiwgNjU1MTEsIAorICAgIDY1NTE0LCA2NTUxNywgNjU1MjAsIDY1NTIzLCA2NTUyNiwgNjU1MjksIDY1NTMyLCA2NTUzNiwgNjU1MzksIDY1NTQyLCAKKyAgICA2NTU0NSwgNjU1NDgsIDY1NTUxLCA2NTU1NiwgNjU1NTksIDY1NTYyLCA2NTU2NSwgNjU1NzAsIDY1NTc1LCA2NTU4MCwgCisgICAgNjU1ODUsIDY1NTkwLCA2NTU5NSwgNjU2MDAsIDY1NjA1LCA2NTYxMCwgNjU2MTgsIDY1NjIwLCA2NTYyMywgNjU2MjYsIAorICAgIDY1NjI5LCA2NTYzMiwgNjU2MzcsIDY1NjQ1LCA2NTY0OCwgNjU2NTEsIDY1NjU1LCA2NTY1OCwgNjU2NjEsIDY1NjY0LCAKKyAgICA2NTY2OSwgNjU2NzIsIDY1Njc1LCA2NTY4MCwgNjU2ODMsIDY1Njg2LCA2NTY5MSwgNjU2OTQsIDY1Njk3LCA2NTcwMiwgCisgICAgNjU3MDcsIDY1NzEyLCA2NTcxNSwgNjU3MTgsIDY1NzIxLCA2NTcyNCwgNjU3MzAsIDY1NzMzLCA2NTczNiwgNjU3MzksIAorICAgIDY1NzQxLCA2NTc0NCwgNjU3NDcsIDY1NzUwLCA2NTc1NSwgNjU3NTgsIDY1NzYxLCA2NTc2NCwgNjU3NjcsIDY1NzcwLCAKKyAgICA2NTc3NSwgNjU3NzgsIDY1NzgxLCA2NTc4NCwgNjU3ODcsIDY1NzkwLCA2NTc5MywgNjU3OTYsIDY1Nzk5LCA2NTgwMiwgCisgICAgNjU4MDgsIDY1ODEzLCA2NTgyMSwgNjU4MjksIDY1ODM3LCA2NTg0NSwgNjU4NTMsIDY1ODYxLCA2NTg3MCwgNjU4NzgsIAorICAgIDY1ODg3LCA2NTg5NiwgNjU5MDUsIDY1OTE0LCA2NTkyMywgNjU5MzIsIDY1OTQxLCA2NTk1MCwgNjU5NTksIDY1OTY4LCAKKyAgICA2NTk3NywgNjU5ODYsIDY1OTk1LCA2NjAwNCwgNjYwMTMsIDY2MDIyLCA2NjAzMSwgNjYwNDAsIDY2MDQ5LCA2NjA1OCwgCisgICAgNjYwNjcsIDY2MDc2LCA2NjA4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIwNzAsIDAsIDEyMDc5LCAxMjA4NiwgMTIwOTQsIDEyMTA2LCAxMjExMywgMTIxMjAsIDEyMTI3LCAxMjEzOCwgMTIxNDksIAotICAgIDEyMTU2LCAxMjE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNzAsIDEyMTc1LCAxMjE4MCwgMTIxODUsIDEyMTkwLCAKLSAgICAxMjE5NSwgMTIyMDAsIDEyMjA1LCAxMjIxMCwgMTIyMTUsIDEyMjIwLCAxMjIyNSwgMTIyMzAsIDEyMjM0LCAxMjIzOCwgCi0gICAgMTIyNDIsIDEyMjQ3LCAxMjI1MywgMTIyNTksIDEyMjY1LCAxMjI3MCwgMTIyNzUsIDEyMjgwLCAxMjI4NSwgMTIyOTEsIAotICAgIDEyMzAwLCAxMjMwOCwgMCwgMTIzMTQsIDEyMzIwLCAxMjMyNCwgMTIzMjgsIDEyMzMyLCAxMjMzNywgMTIzNDAsIDEyMzQ0LCAKLSAgICAxMjM0NywgMTIzNTEsIDEyMzU0LCAxMjM1OCwgMTIzNjIsIDEyMzY2LCAxMjM3MSwgMTIzNzYsIDEyMzc5LCAxMjM4MywgCi0gICAgMTIzODgsIDEyMzkzLCAxMjM5NiwgMTI0MDAsIDEyNDAzLCAxMjQwNywgMTI0MTEsIDEyNDE1LCAxMjQxOSwgMTI0MjMsIAotICAgIDEyNDI3LCAxMjQzMSwgMTI0MzUsIDEyNDM5LCAxMjQ0MywgMTI0NDcsIDEyNDUxLCAxMjQ1NSwgMTI0NTksIDEyNDYzLCAKLSAgICAxMjQ2NywgMTI0NzEsIDEyNDc1LCAxMjQ3OCwgMTI0ODIsIDEyNDg1LCAxMjQ4OSwgMTI0OTMsIDEyNDk3LCAxMjUwMCwgCi0gICAgMTI1MDMsIDEyNTA2LCAxMjUxMCwgMTI1MTQsIDEyNTE4LCAxMjUyMiwgMTI1MjYsIDEyNTMwLCAxMjUzNCwgMTI1MzcsIAotICAgIDEyNTQwLCAxMjU0NSwgMTI1NTAsIDEyNTU0LCAxMjU1OCwgMTI1NjMsIDEyNTY3LCAxMjU3MiwgMTI1NzYsIDEyNTgxLCAKLSAgICAxMjU4NiwgMTI1OTIsIDEyNTk4LCAxMjYwNCwgMTI2MDgsIDEyNjEzLCAxMjYxOSwgMTI2MjUsIDEyNjI5LCAxMjYzNCwgCi0gICAgMTI2MzgsIDEyNjQ0LCAxMjY0OSwgMTI2NTIsIDEyNjU4LCAxMjY2NCwgMTI2NjksIDEyNjc0LCAxMjY4MSwgMTI2ODYsIAotICAgIDEyNjkxLCAxMjY5NSwgMTI2OTksIDEyNzAzLCAxMjcwNywgMTI3MTEsIDEyNzE1LCAxMjcxOSwgMTI3MjMsIDEyNzI4LCAKLSAgICAxMjczMywgMTI3MzgsIDEyNzQ0LCAxMjc0NywgMTI3NTEsIDEyNzU1LCAxMjc1OCwgMTI3NjEsIDEyNzY0LCAxMjc2NywgCi0gICAgMTI3NzAsIDEyNzczLCAxMjc3NiwgMTI3NzksIDEyNzgyLCAxMjc4NiwgMTI3OTMsIDEyNzk4LCAxMjgwMiwgMTI4MDYsIAotICAgIDEyODEwLCAxMjgxNCwgMCwgMTI4MTgsIDEyODIyLCAxMjgyNiwgMTI4MzAsIDEyODM0LCAxMjg0MCwgMTI4NDQsIDAsIAotICAgIDEyODQ4LCAxMjg1MiwgMTI4NTYsIDAsIDEyODYwLCAxMjg2MywgMTI4NjcsIDEyODcwLCAxMjg3NCwgMTI4NzcsIDEyODgxLCAKLSAgICAxMjg4NSwgMCwgMCwgMTI4ODksIDEyODkyLCAwLCAwLCAxMjg5NiwgMTI4OTksIDEyOTAzLCAxMjkwNiwgMTI5MTAsIAotICAgIDEyOTE0LCAxMjkxOCwgMTI5MjIsIDEyOTI2LCAxMjkzMCwgMTI5MzQsIDEyOTM4LCAxMjk0MiwgMTI5NDYsIDEyOTUwLCAKLSAgICAxMjk1NCwgMTI5NTgsIDEyOTYyLCAxMjk2NiwgMTI5NzAsIDEyOTc0LCAxMjk3OCwgMCwgMTI5ODEsIDEyOTg0LCAxMjk4OCwgCi0gICAgMTI5OTIsIDEyOTk2LCAxMjk5OSwgMTMwMDIsIDAsIDEzMDA1LCAwLCAwLCAwLCAxMzAwOSwgMTMwMTMsIDEzMDE3LCAKLSAgICAxMzAyMCwgMCwgMCwgMTMwMjMsIDEzMDI3LCAxMzAzMSwgMTMwMzYsIDEzMDQwLCAxMzA0NSwgMTMwNDksIDEzMDU0LCAKLSAgICAxMzA1OSwgMCwgMCwgMTMwNjUsIDEzMDY5LCAwLCAwLCAxMzA3NCwgMTMwNzgsIDEzMDgzLCAxMzA4NywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTMwOTMsIDAsIDAsIDAsIDAsIDEzMDk5LCAxMzEwMywgMCwgMTMxMDcsIDEzMTExLCAxMzExNiwgCi0gICAgMTMxMjEsIDEzMTI2LCAwLCAwLCAxMzEzMiwgMTMxMzYsIDEzMTM5LCAxMzE0MiwgMTMxNDUsIDEzMTQ4LCAxMzE1MSwgCi0gICAgMTMxNTQsIDEzMTU3LCAxMzE2MCwgMTMxNjMsIDEzMTcyLCAxMzE4MSwgMTMxODUsIDEzMTg5LCAxMzE5NSwgMTMyMDEsIAotICAgIDEzMjA3LCAxMzIxMywgMTMyMjcsIDEzMjM0LCAxMzIzNywgMCwgMCwgMCwgMCwgMCwgMTMyNDEsIDEzMjQ3LCAxMzI1MSwgMCwgCi0gICAgMTMyNTUsIDEzMjU4LCAxMzI2MiwgMTMyNjUsIDEzMjY5LCAxMzI3MiwgMCwgMCwgMCwgMCwgMTMyNzYsIDEzMjgwLCAwLCAwLCAKLSAgICAxMzI4NCwgMTMyODgsIDEzMjkyLCAxMzI5NSwgMTMyOTksIDEzMzAzLCAxMzMwNywgMTMzMTEsIDEzMzE1LCAxMzMxOSwgCi0gICAgMTMzMjMsIDEzMzI3LCAxMzMzMSwgMTMzMzUsIDEzMzM5LCAxMzM0MywgMTMzNDcsIDEzMzUxLCAxMzM1NSwgMTMzNTksIAotICAgIDEzMzYzLCAxMzM2NywgMCwgMTMzNzAsIDEzMzczLCAxMzM3NywgMTMzODEsIDEzMzg1LCAxMzM4OCwgMTMzOTEsIDAsIAotICAgIDEzMzk0LCAxMzM5OCwgMCwgMTM0MDIsIDEzNDA2LCAwLCAxMzQxMCwgMTM0MTMsIDAsIDAsIDEzNDE2LCAwLCAxMzQyMCwgCi0gICAgMTM0MjUsIDEzNDI5LCAxMzQzNCwgMTM0MzgsIDAsIDAsIDAsIDAsIDEzNDQzLCAxMzQ0OCwgMCwgMCwgMTM0NTMsIDEzNDU4LCAKLSAgICAxMzQ2MywgMCwgMCwgMCwgMTM0NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDcxLCAxMzQ3NSwgMTM0NzksIDEzNDgzLCAKLSAgICAwLCAxMzQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0OTEsIDEzNDk1LCAxMzQ5OCwgMTM1MDEsIDEzNTA0LCAxMzUwNywgCi0gICAgMTM1MTAsIDEzNTEzLCAxMzUxNiwgMTM1MTksIDEzNTIyLCAxMzUyNSwgMTM1MjgsIDEzNTMxLCAxMzUzNCwgMTM1MzksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTQzLCAxMzU0NywgMTM1NTEsIDAsIDEzNTU1LCAxMzU1OCwgCi0gICAgMTM1NjIsIDEzNTY1LCAxMzU2OSwgMTM1NzIsIDEzNTc2LCAxMzU4MCwgMTM1ODQsIDAsIDEzNTg5LCAxMzU5MiwgMTM1OTYsIAotICAgIDAsIDEzNjAxLCAxMzYwNCwgMTM2MDgsIDEzNjExLCAxMzYxNSwgMTM2MTksIDEzNjIzLCAxMzYyNywgMTM2MzEsIDEzNjM1LCAKLSAgICAxMzYzOSwgMTM2NDMsIDEzNjQ3LCAxMzY1MSwgMTM2NTUsIDEzNjU5LCAxMzY2MywgMTM2NjcsIDEzNjcxLCAxMzY3NSwgCi0gICAgMTM2NzksIDEzNjgzLCAwLCAxMzY4NiwgMTM2ODksIDEzNjkzLCAxMzY5NywgMTM3MDEsIDEzNzA0LCAxMzcwNywgMCwgCi0gICAgMTM3MTAsIDEzNzE0LCAwLCAxMzcxOCwgMTM3MjIsIDEzNzI2LCAxMzczMCwgMTM3MzMsIDAsIDAsIDEzNzM2LCAxMzc0MCwgCi0gICAgMTM3NDQsIDEzNzQ5LCAxMzc1MywgMTM3NTgsIDEzNzYyLCAxMzc2NywgMTM3NzIsIDEzNzc4LCAwLCAxMzc4NCwgMTM3ODgsIAotICAgIDEzNzkzLCAwLCAxMzc5OSwgMTM4MDMsIDEzODA4LCAwLCAwLCAxMzgxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTM4MTUsIDEzODIwLCAxMzgyNSwgMTM4MzAsIDAsIDAsIDEzODM2LCAxMzg0MCwgMTM4NDMsIAotICAgIDEzODQ2LCAxMzg0OSwgMTM4NTIsIDEzODU1LCAxMzg1OCwgMTM4NjEsIDEzODY0LCAxMzg2NywgMTM4NzEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODc1LCAxMzg3OSwgMTM4ODMsIDAsIDEzODg3LCAxMzg5MCwgCi0gICAgMTM4OTQsIDEzODk3LCAxMzkwMSwgMTM5MDQsIDEzOTA4LCAxMzkxMiwgMCwgMCwgMTM5MTYsIDEzOTE5LCAwLCAwLCAKLSAgICAxMzkyMywgMTM5MjYsIDEzOTMwLCAxMzkzMywgMTM5MzcsIDEzOTQxLCAxMzk0NSwgMTM5NDksIDEzOTUzLCAxMzk1NywgCi0gICAgMTM5NjEsIDEzOTY1LCAxMzk2OSwgMTM5NzMsIDEzOTc3LCAxMzk4MSwgMTM5ODUsIDEzOTg5LCAxMzk5MywgMTM5OTcsIAotICAgIDE0MDAxLCAxNDAwNSwgMCwgMTQwMDgsIDE0MDExLCAxNDAxNSwgMTQwMTksIDE0MDIzLCAxNDAyNiwgMTQwMjksIDAsIAotICAgIDE0MDMyLCAxNDAzNiwgMCwgMTQwNDAsIDE0MDQ0LCAxNDA0OCwgMTQwNTIsIDE0MDU1LCAwLCAwLCAxNDA1OCwgMTQwNjIsIAotICAgIDE0MDY2LCAxNDA3MSwgMTQwNzUsIDE0MDgwLCAxNDA4NCwgMTQwODksIDE0MDk0LCAwLCAwLCAxNDEwMCwgMTQxMDQsIDAsIAotICAgIDAsIDE0MTA5LCAxNDExMywgMTQxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTIyLCAxNDEyOCwgMCwgMCwgMCwgMCwgCi0gICAgMTQxMzQsIDE0MTM4LCAwLCAxNDE0MiwgMTQxNDYsIDE0MTUxLCAxNDE1NiwgMTQxNjEsIDAsIDAsIDE0MTY3LCAxNDE3MSwgCi0gICAgMTQxNzQsIDE0MTc3LCAxNDE4MCwgMTQxODMsIDE0MTg2LCAxNDE4OSwgMTQxOTIsIDE0MTk1LCAxNDE5OCwgMTQyMDEsIAotICAgIDE0MjA1LCAxNDIxMSwgMTQyMTcsIDE0MjIzLCAxNDIyOSwgMTQyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE0MjQxLCAxNDI0NSwgMCwgMTQyNDksIDE0MjUyLCAxNDI1NiwgMTQyNTksIDE0MjYzLCAxNDI2NiwgMCwgMCwgMCwgCi0gICAgMTQyNzAsIDE0MjczLCAxNDI3NywgMCwgMTQyODEsIDE0Mjg0LCAxNDI4OCwgMTQyOTIsIDAsIDAsIDAsIDE0Mjk1LCAKLSAgICAxNDI5OSwgMCwgMTQzMDMsIDAsIDE0MzA3LCAxNDMxMSwgMCwgMCwgMCwgMTQzMTUsIDE0MzE5LCAwLCAwLCAwLCAxNDMyMywgCi0gICAgMTQzMjYsIDE0MzMwLCAwLCAwLCAwLCAxNDMzMywgMTQzMzYsIDE0MzM5LCAxNDM0MiwgMTQzNDYsIDE0MzUwLCAxNDM1NCwgCi0gICAgMTQzNTgsIDE0MzYyLCAxNDM2NiwgMTQzNzAsIDE0MzczLCAwLCAwLCAwLCAwLCAxNDM3NiwgMTQzODEsIDE0Mzg1LCAKLSAgICAxNDM5MCwgMTQzOTQsIDAsIDAsIDAsIDE0Mzk5LCAxNDQwMywgMTQ0MDgsIDAsIDE0NDEzLCAxNDQxNywgMTQ0MjIsIAotICAgIDE0NDI3LCAwLCAwLCAxNDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE0NDQwLCAxNDQ0NCwgMTQ0NDcsIDE0NDUwLCAxNDQ1MywgMTQ0NTYsIDE0NDU5LCAxNDQ2MiwgCi0gICAgMTQ0NjUsIDE0NDY4LCAxNDQ3MSwgMTQ0NzUsIDE0NDgwLCAxNDQ4NSwgMTQ0ODksIDE0NDkzLCAxNDQ5NywgMTQ1MDEsIAotICAgIDE0NTA1LCAxNDUxMCwgMTQ1MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NTE3LCAxNDUyMSwgMTQ1MjUsIDAsIDE0NTI5LCAKLSAgICAxNDUzMiwgMTQ1MzYsIDE0NTM5LCAxNDU0MywgMTQ1NDYsIDE0NTUwLCAxNDU1NCwgMCwgMTQ1NTgsIDE0NTYxLCAxNDU2NSwgCi0gICAgMCwgMTQ1NjksIDE0NTcyLCAxNDU3NiwgMTQ1ODAsIDE0NTgzLCAxNDU4NywgMTQ1OTEsIDE0NTk1LCAxNDU5OSwgMTQ2MDMsIAotICAgIDE0NjA3LCAxNDYxMSwgMTQ2MTUsIDE0NjE5LCAxNDYyMywgMTQ2MjcsIDE0NjMxLCAxNDYzNSwgMTQ2MzksIDE0NjQzLCAKLSAgICAxNDY0NywgMTQ2NTEsIDE0NjU1LCAwLCAxNDY1OCwgMTQ2NjEsIDE0NjY1LCAxNDY2OSwgMTQ2NzMsIDE0Njc2LCAxNDY3OSwgCi0gICAgMTQ2ODIsIDE0Njg2LCAxNDY5MCwgMCwgMTQ2OTQsIDE0Njk4LCAxNDcwMiwgMTQ3MDYsIDE0NzA5LCAwLCAwLCAwLCAKLSAgICAxNDcxMiwgMTQ3MTYsIDE0NzIxLCAxNDcyNSwgMTQ3MzAsIDE0NzM0LCAxNDczOSwgMTQ3NDQsIDAsIDE0NzUwLCAxNDc1NCwgCi0gICAgMTQ3NTksIDAsIDE0NzY0LCAxNDc2OCwgMTQ3NzMsIDE0Nzc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc4MiwgMTQ3ODYsIAotICAgIDAsIDE0NzkyLCAxNDc5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4MDAsIDE0ODA1LCAxNDgxMCwgMTQ4MTUsIDAsIDAsIAotICAgIDE0ODIxLCAxNDgyNSwgMTQ4MjgsIDE0ODMxLCAxNDgzNCwgMTQ4MzcsIDE0ODQwLCAxNDg0MywgMTQ4NDYsIDE0ODQ5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDg1MiwgMTQ4NjUsIDE0ODc3LCAxNDg4OSwgMTQ5MDEsIDE0OTEzLCAxNDkyNSwgCi0gICAgMTQ5MzcsIDAsIDAsIDE0OTQxLCAxNDk0NSwgMCwgMTQ5NDksIDE0OTUyLCAxNDk1NiwgMTQ5NTksIDE0OTYzLCAxNDk2NiwgCi0gICAgMTQ5NzAsIDE0OTc0LCAwLCAxNDk3OCwgMTQ5ODEsIDE0OTg1LCAwLCAxNDk4OSwgMTQ5OTIsIDE0OTk2LCAxNTAwMCwgCi0gICAgMTUwMDMsIDE1MDA3LCAxNTAxMSwgMTUwMTUsIDE1MDE5LCAxNTAyMywgMTUwMjcsIDE1MDMxLCAxNTAzNSwgMTUwMzksIAotICAgIDE1MDQzLCAxNTA0NywgMTUwNTEsIDE1MDU1LCAxNTA1OSwgMTUwNjMsIDE1MDY3LCAxNTA3MSwgMTUwNzUsIDAsIDE1MDc4LCAKLSAgICAxNTA4MSwgMTUwODUsIDE1MDg5LCAxNTA5MywgMTUwOTYsIDE1MDk5LCAxNTEwMiwgMTUxMDYsIDE1MTEwLCAwLCAxNTExNCwgCi0gICAgMTUxMTgsIDE1MTIyLCAxNTEyNiwgMTUxMjksIDAsIDAsIDE1MTMyLCAxNTEzNiwgMTUxNDAsIDE1MTQ1LCAxNTE0OSwgCi0gICAgMTUxNTQsIDE1MTU4LCAxNTE2MywgMTUxNjgsIDAsIDE1MTc0LCAxNTE3OCwgMTUxODMsIDAsIDE1MTg4LCAxNTE5MiwgCi0gICAgMTUxOTcsIDE1MjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIwNiwgMTUyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE1MjE2LCAwLCAxNTIyMCwgMTUyMjUsIDE1MjMwLCAxNTIzNSwgMCwgMCwgMTUyNDEsIDE1MjQ1LCAxNTI0OCwgMTUyNTEsIAotICAgIDE1MjU0LCAxNTI1NywgMTUyNjAsIDE1MjYzLCAxNTI2NiwgMTUyNjksIDAsIDE1MjcyLCAxNTI3NiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyODAsIDE1Mjg0LCAwLCAxNTI4OCwgMTUyOTEsIDE1Mjk1LCAKLSAgICAxNTI5OCwgMTUzMDIsIDE1MzA1LCAxNTMwOSwgMTUzMTMsIDAsIDE1MzE3LCAxNTMyMCwgMTUzMjQsIDAsIDE1MzI4LCAKLSAgICAxNTMzMSwgMTUzMzUsIDE1MzM5LCAxNTM0MiwgMTUzNDYsIDE1MzUwLCAxNTM1NCwgMTUzNTgsIDE1MzYyLCAxNTM2NiwgCi0gICAgMTUzNzAsIDE1Mzc0LCAxNTM3OCwgMTUzODIsIDE1Mzg2LCAxNTM5MCwgMTUzOTQsIDE1Mzk4LCAxNTQwMiwgMTU0MDYsIAotICAgIDE1NDEwLCAxNTQxNCwgMTU0MTcsIDE1NDIxLCAxNTQyNCwgMTU0MjgsIDE1NDMyLCAxNTQzNiwgMTU0MzksIDE1NDQyLCAKLSAgICAxNTQ0NSwgMTU0NDksIDE1NDUzLCAxNTQ1NywgMTU0NjEsIDE1NDY1LCAxNTQ2OSwgMTU0NzMsIDE1NDc2LCAxNTQ3OSwgMCwgCi0gICAgMCwgMTU0ODMsIDE1NDg3LCAxNTQ5MiwgMTU0OTYsIDE1NTAxLCAxNTUwNSwgMTU1MTAsIDE1NTE1LCAwLCAxNTUyMSwgCi0gICAgMTU1MjUsIDE1NTMwLCAwLCAxNTUzNSwgMTU1MzksIDE1NTQ0LCAxNTU0OSwgMTU1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE1NTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2NCwgMTU1NjksIDE1NTc0LCAxNTU3OSwgMCwgMCwgCi0gICAgMTU1ODUsIDE1NTg5LCAxNTU5MiwgMTU1OTUsIDE1NTk4LCAxNTYwMSwgMTU2MDQsIDE1NjA3LCAxNTYxMCwgMTU2MTMsIAotICAgIDE1NjE2LCAxNTYyMCwgMTU2MjUsIDE1NjMwLCAxNTYzNiwgMTU2NDIsIDAsIDAsIDAsIDE1NjQ4LCAxNTY1MiwgMTU2NTgsIAotICAgIDE1NjY0LCAxNTY3MCwgMTU2NzUsIDE1NjgxLCAwLCAwLCAxNTY4NywgMTU2OTEsIDAsIDE1Njk1LCAxNTY5OSwgMTU3MDMsIAotICAgIDE1NzA3LCAxNTcxMSwgMTU3MTUsIDE1NzE5LCAxNTcyMywgMTU3MjcsIDE1NzMxLCAxNTczNSwgMTU3MzksIDE1NzQzLCAKLSAgICAxNTc0NywgMTU3NTEsIDE1NzU1LCAxNTc1OSwgMTU3NjMsIDAsIDAsIDAsIDE1NzY3LCAxNTc3MywgMTU3NzksIDE1Nzg1LCAKLSAgICAxNTc5MSwgMTU3OTcsIDE1ODAzLCAxNTgwOSwgMTU4MTUsIDE1ODIxLCAxNTgyNywgMTU4MzMsIDE1ODQxLCAxNTg0NywgCi0gICAgMTU4NTMsIDE1ODU5LCAxNTg2NSwgMTU4NzEsIDE1ODc3LCAxNTg4MywgMTU4ODksIDE1ODk1LCAxNTkwMSwgMTU5MDcsIDAsIAotICAgIDE1OTEzLCAxNTkxOSwgMTU5MjUsIDE1OTMxLCAxNTkzNywgMTU5NDMsIDE1OTQ3LCAxNTk1MywgMTU5NTcsIDAsIDE1OTYxLCAKLSAgICAwLCAwLCAxNTk2NywgMTU5NzEsIDE1OTc3LCAxNTk4MywgMTU5ODksIDE1OTkzLCAxNTk5OSwgMCwgMCwgMCwgMTYwMDMsIDAsIAotICAgIDAsIDAsIDAsIDE2MDA3LCAxNjAxMiwgMTYwMTksIDE2MDI2LCAxNjAzMywgMTYwNDAsIDAsIDE2MDQ3LCAwLCAxNjA1NCwgCi0gICAgMTYwNTksIDE2MDY0LCAxNjA3MSwgMTYwNzgsIDE2MDg3LCAxNjA5OCwgMTYxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTEyLCAxNjExOSwgMTYxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE2MTMxLCAxNjEzNywgMTYxNDMsIDE2MTQ5LCAxNjE1NSwgMTYxNjEsIDE2MTY3LCAxNjE3MywgCi0gICAgMTYxNzksIDE2MTg1LCAxNjE5MSwgMTYxOTcsIDE2MjAzLCAxNjIwOSwgMTYyMTUsIDE2MjIxLCAxNjIyNywgMTYyMzMsIAotICAgIDE2MjM5LCAxNjI0NSwgMTYyNTEsIDE2MjU3LCAxNjI2MywgMTYyNjksIDE2Mjc1LCAxNjI4MSwgMTYyODcsIDE2MjkzLCAKLSAgICAxNjI5OSwgMTYzMDUsIDE2MzExLCAxNjMxNywgMTYzMjMsIDE2MzI4LCAxNjMzNCwgMTYzNDAsIDE2MzQ0LCAxNjM1MCwgCi0gICAgMTYzNTQsIDE2MzYwLCAxNjM2NiwgMTYzNzIsIDE2Mzc4LCAxNjM4NCwgMTYzOTAsIDE2Mzk1LCAxNjQwMSwgMTY0MDUsIAotICAgIDE2NDEwLCAxNjQxNiwgMTY0MjIsIDE2NDI4LCAxNjQzMywgMTY0MzksIDE2NDQ1LCAxNjQ1MSwgMTY0NTYsIDE2NDYyLCAwLCAKLSAgICAwLCAwLCAwLCAxNjQ2NiwgMTY0NzIsIDE2NDc3LCAxNjQ4MywgMTY0ODgsIDE2NDk2LCAxNjUwNCwgMTY1MDgsIDE2NTEyLCAKLSAgICAxNjUxNiwgMTY1MjIsIDE2NTI4LCAxNjUzNCwgMTY1NDAsIDE2NTQ0LCAxNjU0OCwgMTY1NTIsIDE2NTU2LCAxNjU2MCwgCi0gICAgMTY1NjMsIDE2NTY2LCAxNjU2OSwgMTY1NzIsIDE2NTc1LCAxNjU3OCwgMTY1ODEsIDE2NTg0LCAxNjU4NywgMTY1OTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTk1LCAxNjYwMCwgMCwgMTY2MDcsIDAsIDAsIDE2NjE0LCAKLSAgICAxNjYxOSwgMCwgMTY2MjQsIDAsIDAsIDE2NjMxLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjYzNiwgMTY2NDEsIDE2NjQ1LCAKLSAgICAxNjY1MiwgMCwgMTY2NTksIDE2NjY0LCAxNjY2OSwgMTY2NzQsIDE2NjgxLCAxNjY4OCwgMTY2OTUsIDAsIDE2NzAyLCAKLSAgICAxNjcwNywgMTY3MTIsIDAsIDE2NzE5LCAwLCAxNjcyNiwgMCwgMCwgMTY3MzEsIDE2NzM4LCAwLCAxNjc0NSwgMTY3NDksIAotICAgIDE2NzU2LCAxNjc2MCwgMTY3NjUsIDE2NzczLCAxNjc3OSwgMTY3ODUsIDE2NzkwLCAxNjc5NiwgMTY4MDIsIDE2ODA4LCAKLSAgICAxNjgxMywgMCwgMTY4MTksIDE2ODI3LCAxNjgzNCwgMCwgMCwgMTY4NDEsIDE2ODQ2LCAxNjg1MiwgMTY4NTcsIDE2ODYzLCAKLSAgICAwLCAxNjg2OSwgMCwgMTY4NzUsIDE2ODgyLCAxNjg4OSwgMTY4OTYsIDE2OTAzLCAxNjkwOCwgMCwgMCwgMTY5MTIsIAotICAgIDE2OTE3LCAxNjkyMSwgMTY5MjUsIDE2OTI5LCAxNjkzMywgMTY5MzcsIDE2OTQxLCAxNjk0NSwgMTY5NDksIDAsIDAsIAotICAgIDE2OTUzLCAxNjk1OSwgMTY5NjUsIDE2OTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjk3OSwgMTY5ODMsIDE2OTk0LCAKLSAgICAxNzAwOSwgMTcwMjQsIDE3MDM0LCAxNzA0NSwgMTcwNTgsIDE3MDY5LCAxNzA3NSwgMTcwODMsIDE3MDkzLCAxNzA5OSwgCi0gICAgMTcxMDcsIDE3MTExLCAxNzExNywgMTcxMjMsIDE3MTMxLCAxNzE0MSwgMTcxNDksIDE3MTYyLCAxNzE2OCwgMTcxNzYsIAotICAgIDE3MTg0LCAxNzE5NiwgMTcyMDMsIDE3MjExLCAxNzIxOSwgMTcyMjcsIDE3MjM1LCAxNzI0MywgMTcyNTEsIDE3MjYxLCAKLSAgICAxNzI2NSwgMTcyNjgsIDE3MjcxLCAxNzI3NCwgMTcyNzcsIDE3MjgwLCAxNzI4MywgMTcyODYsIDE3Mjg5LCAxNzI5MiwgCi0gICAgMTcyOTYsIDE3MzAwLCAxNzMwNCwgMTczMDgsIDE3MzEyLCAxNzMxNiwgMTczMjAsIDE3MzI0LCAxNzMyOCwgMTczMzMsIAotICAgIDE3MzM5LCAxNzM0OSwgMTczNjMsIDE3MzczLCAxNzM3OSwgMTczODUsIDE3MzkzLCAxNzQwMSwgMTc0MDksIDE3NDE3LCAKLSAgICAxNzQyMywgMTc0MjksIDE3NDMyLCAxNzQzNiwgMTc0NDAsIDE3NDQ0LCAxNzQ0OCwgMTc0NTIsIDE3NDU2LCAwLCAxNzQ2MCwgCi0gICAgMTc0NjQsIDE3NDY4LCAxNzQ3MiwgMTc0NzYsIDE3NDgwLCAxNzQ4NCwgMTc0ODgsIDE3NDkyLCAxNzQ5NiwgMTc1MDAsIAotICAgIDE3NTAzLCAxNzUwNiwgMTc1MTAsIDE3NTE0LCAxNzUxOCwgMTc1MjEsIDE3NTI1LCAxNzUyOSwgMTc1MzMsIDE3NTM3LCAKLSAgICAxNzU0MSwgMTc1NDUsIDE3NTQ5LCAxNzU1MywgMTc1NTYsIDE3NTU5LCAxNzU2MywgMTc1NjcsIDE3NTcxLCAxNzU3NCwgCi0gICAgMTc1NzcsIDE3NTgwLCAxNzU4NCwgMTc1ODksIDE3NTkzLCAwLCAwLCAwLCAwLCAxNzU5NywgMTc2MDIsIDE3NjA2LCAKLSAgICAxNzYxMSwgMTc2MTUsIDE3NjIwLCAxNzYyNSwgMTc2MzEsIDE3NjM2LCAxNzY0MiwgMTc2NDYsIDE3NjUxLCAxNzY1NSwgCi0gICAgMTc2NjAsIDE3NjcwLCAxNzY3NiwgMTc2ODIsIDE3Njg5LCAxNzY5OSwgMTc3MDUsIDE3NzA5LCAxNzcxMywgMTc3MTksIAotICAgIDE3NzI1LCAxNzczMywgMTc3MzksIDE3NzQ3LCAxNzc1NSwgMTc3NjMsIDE3NzczLCAxNzc4MSwgMTc3OTEsIDE3Nzk2LCAKLSAgICAxNzgwMiwgMTc4MDgsIDE3ODE0LCAxNzgyMCwgMTc4MjYsIDE3ODMyLCAwLCAxNzgzOCwgMTc4NDQsIDE3ODUwLCAxNzg1NiwgCi0gICAgMTc4NjIsIDE3ODY4LCAxNzg3NCwgMTc4ODAsIDE3ODg2LCAxNzg5MiwgMTc4OTgsIDE3OTAzLCAxNzkwOCwgMTc5MTQsIAotICAgIDE3OTIwLCAxNzkyNiwgMTc5MzEsIDE3OTM3LCAxNzk0MywgMTc5NDksIDE3OTU1LCAxNzk2MSwgMTc5NjcsIDE3OTczLCAKLSAgICAxNzk3OSwgMTc5ODQsIDE3OTg5LCAxNzk5NSwgMTgwMDEsIDE4MDA3LCAxODAxMiwgMTgwMTcsIDE4MDIyLCAxODAyOCwgCi0gICAgMTgwMzYsIDE4MDQzLCAwLCAxODA1MCwgMTgwNTcsIDE4MDcwLCAxODA3NywgMTgwODQsIDE4MDkyLCAxODEwMCwgMTgxMDYsIAotICAgIDE4MTEyLCAxODExOCwgMTgxMjgsIDE4MTMzLCAxODEzOSwgMTgxNDksIDE4MTU5LCAwLCAxODE2OSwgMTgxNzksIDE4MTg3LCAKLSAgICAxODE5OSwgMTgyMTEsIDE4MjE3LCAxODIzMSwgMTgyNDYsIDE4MjUxLCAxODI1NiwgMTgyNjQsIDE4MjcyLCAxODI4MCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgyODgsIDE4MjkxLCAxODI5NSwgMTgyOTksIDE4MzAzLCAKLSAgICAxODMwNywgMTgzMTEsIDE4MzE1LCAxODMxOSwgMTgzMjMsIDE4MzI3LCAxODMzMSwgMTgzMzUsIDE4MzM5LCAxODM0MywgCi0gICAgMTgzNDcsIDE4MzUxLCAxODM1NSwgMTgzNTksIDE4MzYzLCAxODM2NywgMTgzNzAsIDE4MzczLCAxODM3NywgMTgzODEsIAotICAgIDE4Mzg1LCAxODM4OCwgMTgzOTEsIDE4Mzk0LCAxODM5OCwgMTg0MDIsIDE4NDA1LCAxODQwOCwgMTg0MTIsIDE4NDE1LCAKLSAgICAxODQyMCwgMTg0MjMsIDE4NDI3LCAxODQzMCwgMTg0MzQsIDE4NDM3LCAxODQ0MiwgMTg0NDUsIDE4NDQ5LCAxODQ1NiwgCi0gICAgMTg0NjEsIDE4NDY1LCAxODQ3MCwgMTg0NzQsIDE4NDc5LCAxODQ4MywgMTg0ODgsIDE4NDk1LCAxODUwMSwgMTg1MDYsIAotICAgIDE4NTEwLCAxODUxNCwgMTg1MTgsIDE4NTIyLCAxODUyNiwgMTg1MzEsIDE4NTM2LCAxODU0MiwgMTg1NDcsIDE4NTUyLCAKLSAgICAxODU1NiwgMTg1NTksIDE4NTYyLCAxODU2NSwgMTg1NjgsIDE4NTcxLCAxODU3NCwgMTg1NzcsIDE4NTgwLCAxODU4MywgCi0gICAgMTg1ODksIDE4NTkzLCAxODU5NywgMTg2MDEsIDE4NjA1LCAxODYwOSwgMTg2MTMsIDE4NjE3LCAxODYyMSwgMTg2MjYsIAotICAgIDE4NjMwLCAxODYzNSwgMTg2NDAsIDE4NjQ2LCAxODY1MSwgMTg2NTcsIDE4NjYzLCAxODY2OSwgMTg2NzUsIDE4NjgxLCAKLSAgICAxODY4OCwgMTg2OTUsIDE4NzAzLCAxODcxMSwgMTg3MjAsIDE4NzI5LCAxODc0MCwgMTg3NTAsIDE4NzYwLCAxODc3MSwgCi0gICAgMTg3ODIsIDE4NzkyLCAxODgwMiwgMTg4MTIsIDE4ODIyLCAxODgzMiwgMTg4NDIsIDE4ODUyLCAxODg2MiwgMTg4NzAsIAotICAgIDE4ODc3LCAxODg4MywgMTg4OTAsIDE4ODk1LCAxODkwMSwgMTg5MDcsIDE4OTEzLCAxODkxOSwgMTg5MjUsIDE4OTMxLCAKLSAgICAxODkzNiwgMTg5NDIsIDE4OTQ4LCAxODk1NCwgMTg5NjAsIDE4OTY1LCAxODk3MywgMTg5ODAsIDE4OTg2LCAxODk5MywgCi0gICAgMTkwMDEsIDE5MDA3LCAxOTAxMywgMTkwMTksIDE5MDI1LCAxOTAzMywgMTkwNDEsIDE5MDUxLCAxOTA1OSwgMTkwNjcsIAotICAgIDE5MDczLCAxOTA3OCwgMTkwODMsIDE5MDg4LCAxOTA5MywgMTkwOTgsIDE5MTAzLCAxOTEwOCwgMTkxMTMsIDE5MTE4LCAKLSAgICAxOTEyNCwgMTkxMzAsIDE5MTM2LCAxOTE0MywgMTkxNDgsIDE5MTU0LCAxOTE1OSwgMTkxNjQsIDE5MTY5LCAxOTE3NCwgCi0gICAgMTkxNzksIDE5MTg0LCAxOTE4OSwgMTkxOTQsIDE5MTk5LCAxOTIwNCwgMTkyMDksIDE5MjE0LCAxOTIxOSwgMTkyMjQsIAotICAgIDE5MjI5LCAxOTIzNCwgMTkyMzksIDE5MjQ0LCAxOTI0OSwgMTkyNTQsIDE5MjU5LCAxOTI2NCwgMTkyNjksIDE5Mjc0LCAKLSAgICAxOTI3OSwgMTkyODQsIDE5Mjg5LCAxOTI5NCwgMTkyOTksIDE5MzA0LCAxOTMwOSwgMTkzMTQsIDE5MzE5LCAxOTMyNCwgCi0gICAgMTkzMjksIDE5MzM0LCAxOTMzOSwgMCwgMTkzNDQsIDAsIDAsIDAsIDAsIDAsIDE5MzQ5LCAwLCAwLCAxOTM1NCwgMTkzNTgsIAotICAgIDE5MzYyLCAxOTM2NiwgMTkzNzAsIDE5Mzc0LCAxOTM3OCwgMTkzODIsIDE5Mzg2LCAxOTM5MCwgMTkzOTQsIDE5Mzk4LCAKLSAgICAxOTQwMiwgMTk0MDYsIDE5NDEwLCAxOTQxNCwgMTk0MTgsIDE5NDIyLCAxOTQyNiwgMTk0MzAsIDE5NDM0LCAxOTQzOCwgCi0gICAgMTk0NDIsIDE5NDQ2LCAxOTQ1MCwgMTk0NTQsIDE5NDU4LCAxOTQ2MiwgMTk0NjYsIDE5NDcwLCAxOTQ3NCwgMTk0NzgsIAotICAgIDE5NDgyLCAxOTQ4NiwgMTk0OTAsIDE5NDk0LCAxOTQ5OCwgMTk1MDIsIDE5NTA2LCAxOTUxMCwgMTk1MTQsIDE5NTE4LCAKLSAgICAxOTUyNCwgMTk1MjgsIDE5NTMzLCAxOTUzOCwgMTk1NDIsIDE5NTQ3LCAxOTU1MiwgMTk1NTYsIDE5NTYwLCAxOTU2NCwgCi0gICAgMTk1NjgsIDE5NTcyLCAxOTU3NiwgMTk1ODAsIDE5NTg0LCAxOTU4OCwgMTk1OTIsIDE5NTk2LCAxOTYwMCwgMTk2MDQsIAotICAgIDE5NjA4LCAxOTYxMiwgMTk2MTYsIDE5NjIwLCAxOTYyNCwgMTk2MjgsIDE5NjMyLCAxOTYzNiwgMTk2NDAsIDE5NjQ0LCAKLSAgICAxOTY0OCwgMTk2NTIsIDE5NjU2LCAxOTY2MCwgMTk2NjQsIDE5NjY4LCAxOTY3MiwgMTk2NzYsIDE5NjgwLCAxOTY4NCwgCi0gICAgMTk2ODgsIDE5NjkyLCAxOTY5NiwgMTk3MDAsIDE5NzA0LCAxOTcwOCwgMTk3MTIsIDE5NzE2LCAxOTcyMCwgMTk3MjQsIAotICAgIDE5NzI4LCAxOTczMiwgMTk3MzYsIDE5NzQwLCAxOTc0NCwgMTk3NDgsIDE5NzUyLCAxOTc1NiwgMTk3NjAsIDE5NzY0LCAKLSAgICAxOTc2OCwgMTk3NzIsIDE5Nzc2LCAxOTc4MCwgMTk3ODQsIDE5Nzg4LCAxOTc5MiwgMTk3OTYsIDE5ODAwLCAxOTgwNCwgCi0gICAgMTk4MDgsIDE5ODEyLCAxOTgxNiwgMTk4MjAsIDE5ODI0LCAxOTgyOCwgMTk4MzIsIDE5ODM2LCAxOTg0MCwgMTk4NDQsIAotICAgIDE5ODQ4LCAxOTg1MiwgMTk4NTYsIDE5ODYwLCAxOTg2NCwgMTk4NjgsIDE5ODcyLCAxOTg3NiwgMTk4ODAsIDE5ODg0LCAKLSAgICAxOTg4OCwgMTk4OTIsIDE5ODk2LCAxOTkwMCwgMTk5MDQsIDE5OTA4LCAxOTkxMiwgMTk5MTYsIDE5OTIwLCAxOTkyNCwgCi0gICAgMTk5MjgsIDE5OTMyLCAxOTkzNiwgMTk5NDAsIDE5OTQzLCAxOTk0NywgMTk5NTAsIDE5OTU0LCAxOTk1OCwgMTk5NjEsIAotICAgIDE5OTY1LCAxOTk2OSwgMTk5NzIsIDE5OTc2LCAxOTk4MCwgMTk5ODQsIDE5OTg4LCAxOTk5MSwgMTk5OTUsIDE5OTk5LCAKLSAgICAyMDAwMywgMjAwMDcsIDIwMDExLCAyMDAxNSwgMjAwMTgsIDIwMDIyLCAyMDAyNiwgMjAwMzAsIDIwMDM0LCAyMDAzOCwgCi0gICAgMjAwNDIsIDIwMDQ2LCAyMDA1MCwgMjAwNTQsIDIwMDU4LCAyMDA2MiwgMjAwNjYsIDIwMDcwLCAyMDA3NCwgMjAwNzgsIAotICAgIDIwMDgyLCAyMDA4NiwgMjAwOTAsIDIwMDk0LCAyMDA5OCwgMjAxMDIsIDIwMTA2LCAyMDExMCwgMjAxMTQsIDIwMTE4LCAKLSAgICAyMDEyMiwgMjAxMjYsIDIwMTMwLCAyMDEzNCwgMjAxMzgsIDIwMTQyLCAyMDE0NiwgMjAxNTAsIDIwMTU0LCAyMDE1OCwgCi0gICAgMjAxNjIsIDIwMTY2LCAyMDE3MCwgMjAxNzQsIDIwMTc4LCAyMDE4MiwgMjAxODYsIDIwMTkwLCAyMDE5NCwgMjAxOTgsIAotICAgIDIwMjAyLCAyMDIwNiwgMjAyMTAsIDIwMjE0LCAyMDIxOCwgMjAyMjIsIDIwMjI2LCAyMDIzMCwgMjAyMzQsIDIwMjM4LCAKLSAgICAyMDI0MiwgMjAyNDYsIDIwMjUwLCAyMDI1NCwgMjAyNTgsIDIwMjYyLCAyMDI2NiwgMjAyNzAsIDIwMjc0LCAyMDI3OCwgCi0gICAgMjAyODIsIDIwMjg2LCAyMDI5MCwgMjAyOTQsIDIwMjk4LCAyMDMwMiwgMjAzMDYsIDIwMzEwLCAyMDMxNCwgMjAzMTgsIAotICAgIDIwMzIyLCAyMDMyNiwgMjAzMzAsIDIwMzM0LCAyMDMzOCwgMjAzNDIsIDIwMzQ2LCAyMDM1MCwgMjAzNTQsIDIwMzU4LCAKLSAgICAyMDM2MiwgMjAzNjYsIDIwMzcwLCAyMDM3NCwgMjAzNzgsIDIwMzgyLCAyMDM4NiwgMjAzOTAsIDIwMzk0LCAyMDM5OCwgCi0gICAgMjA0MDIsIDIwNDA2LCAyMDQxMCwgMjA0MTQsIDIwNDE4LCAyMDQyMiwgMjA0MjYsIDIwNDMwLCAyMDQzNCwgMjA0MzgsIAotICAgIDIwNDQyLCAyMDQ0NiwgMjA0NTAsIDIwNDU0LCAyMDQ1OCwgMjA0NjIsIDIwNDY2LCAyMDQ3MCwgMjA0NzQsIDIwNDc4LCAKLSAgICAyMDQ4MiwgMjA0ODYsIDIwNDkwLCAyMDQ5NCwgMjA0OTgsIDIwNTAyLCAyMDUwNiwgMjA1MTAsIDIwNTE0LCAyMDUxOCwgCi0gICAgMjA1MjIsIDIwNTI2LCAyMDUzMCwgMjA1MzQsIDIwNTM4LCAyMDU0MiwgMjA1NDYsIDIwNTUwLCAyMDU1NCwgMjA1NTgsIAotICAgIDIwNTYyLCAyMDU2NiwgMjA1NzAsIDIwNTczLCAyMDU3NywgMjA1ODEsIDIwNTg1LCAyMDU4OSwgMjA1OTMsIDIwNTk3LCAKLSAgICAyMDYwMSwgMjA2MDUsIDIwNjA5LCAyMDYxMywgMjA2MTcsIDIwNjIxLCAyMDYyNSwgMjA2MjksIDIwNjMzLCAyMDYzNywgCi0gICAgMjA2NDEsIDIwNjQ1LCAyMDY0OSwgMjA2NTMsIDIwNjU3LCAyMDY2MSwgMjA2NjUsIDIwNjY4LCAyMDY3MiwgMjA2NzYsIAotICAgIDIwNjgwLCAyMDY4NCwgMjA2ODgsIDIwNjkyLCAyMDY5NiwgMjA3MDAsIDIwNzA0LCAyMDcwOCwgMjA3MTIsIDIwNzE2LCAKLSAgICAyMDcyMCwgMjA3MjQsIDIwNzI4LCAyMDczMSwgMjA3MzUsIDIwNzM5LCAyMDc0MywgMjA3NDcsIDIwNzUxLCAyMDc1NSwgCi0gICAgMjA3NTksIDIwNzYyLCAyMDc2NiwgMjA3NzAsIDIwNzc0LCAyMDc3OCwgMjA3ODIsIDIwNzg2LCAyMDc5MCwgMjA3OTQsIAotICAgIDIwNzk4LCAyMDgwMiwgMjA4MDYsIDIwODEwLCAyMDgxNCwgMjA4MTgsIDIwODIyLCAyMDgyNiwgMjA4MzAsIDIwODM0LCAKLSAgICAyMDgzOCwgMjA4NDIsIDIwODQ2LCAyMDg1MCwgMjA4NTQsIDAsIDIwODU4LCAyMDg2MiwgMjA4NjYsIDIwODcwLCAwLCAwLCAKLSAgICAyMDg3NCwgMjA4NzgsIDIwODgyLCAyMDg4NiwgMjA4OTAsIDIwODk0LCAyMDg5OCwgMCwgMjA5MDIsIDAsIDIwOTA2LCAKLSAgICAyMDkxMCwgMjA5MTQsIDIwOTE4LCAwLCAwLCAyMDkyMiwgMjA5MjYsIDIwOTMwLCAyMDkzNCwgMjA5MzgsIDIwOTQyLCAKLSAgICAyMDk0NiwgMjA5NTAsIDIwOTU0LCAyMDk1OCwgMjA5NjIsIDIwOTY2LCAyMDk3MCwgMjA5NzQsIDIwOTc4LCAyMDk4MiwgCi0gICAgMjA5ODYsIDIwOTkwLCAyMDk5NCwgMjA5OTgsIDIxMDAyLCAyMTAwNiwgMjEwMTAsIDIxMDEzLCAyMTAxNywgMjEwMjEsIAotICAgIDIxMDI1LCAyMTAyOSwgMjEwMzMsIDIxMDM3LCAyMTA0MSwgMjEwNDUsIDIxMDQ5LCAyMTA1MywgMjEwNTcsIDIxMDYxLCAKLSAgICAyMTA2NSwgMjEwNjksIDIxMDczLCAyMTA3NywgMjEwODEsIDAsIDIxMDg1LCAyMTA4OSwgMjEwOTMsIDIxMDk3LCAwLCAwLCAKLSAgICAyMTEwMSwgMjExMDQsIDIxMTA4LCAyMTExMiwgMjExMTYsIDIxMTIwLCAyMTEyNCwgMjExMjgsIDIxMTMyLCAyMTEzNiwgCi0gICAgMjExNDAsIDIxMTQ0LCAyMTE0OCwgMjExNTIsIDIxMTU2LCAyMTE2MCwgMjExNjQsIDIxMTY5LCAyMTE3NCwgMjExNzksIAotICAgIDIxMTg1LCAyMTE5MSwgMjExOTYsIDIxMjAxLCAyMTIwNywgMjEyMTAsIDIxMjE0LCAyMTIxOCwgMjEyMjIsIDIxMjI2LCAKLSAgICAyMTIzMCwgMjEyMzQsIDIxMjM4LCAwLCAyMTI0MiwgMjEyNDYsIDIxMjUwLCAyMTI1NCwgMCwgMCwgMjEyNTgsIDIxMjYyLCAKLSAgICAyMTI2NiwgMjEyNzAsIDIxMjc0LCAyMTI3OCwgMjEyODIsIDAsIDIxMjg2LCAwLCAyMTI5MCwgMjEyOTQsIDIxMjk4LCAKLSAgICAyMTMwMiwgMCwgMCwgMjEzMDYsIDIxMzEwLCAyMTMxNCwgMjEzMTgsIDIxMzIyLCAyMTMyNiwgMjEzMzAsIDIxMzM0LCAKLSAgICAyMTMzOCwgMjEzNDMsIDIxMzQ4LCAyMTM1MywgMjEzNTksIDIxMzY1LCAyMTM3MCwgMCwgMjEzNzUsIDIxMzc5LCAyMTM4MywgCi0gICAgMjEzODcsIDIxMzkxLCAyMTM5NSwgMjEzOTksIDIxNDAzLCAyMTQwNywgMjE0MTEsIDIxNDE1LCAyMTQxOSwgMjE0MjMsIAotICAgIDIxNDI3LCAyMTQzMSwgMjE0MzUsIDIxNDM5LCAyMTQ0MiwgMjE0NDYsIDIxNDUwLCAyMTQ1NCwgMjE0NTgsIDIxNDYyLCAKLSAgICAyMTQ2NiwgMjE0NzAsIDIxNDc0LCAyMTQ3OCwgMjE0ODIsIDIxNDg2LCAyMTQ5MCwgMjE0OTQsIDIxNDk4LCAyMTUwMiwgCi0gICAgMjE1MDYsIDIxNTEwLCAyMTUxNCwgMjE1MTgsIDIxNTIyLCAyMTUyNiwgMjE1MzAsIDIxNTM0LCAyMTUzOCwgMjE1NDIsIAotICAgIDIxNTQ2LCAyMTU1MCwgMjE1NTQsIDIxNTU4LCAyMTU2MiwgMjE1NjYsIDIxNTcwLCAyMTU3NCwgMjE1NzgsIDIxNTgyLCAKLSAgICAyMTU4NiwgMjE1OTAsIDIxNTk0LCAyMTU5OCwgMCwgMjE2MDIsIDIxNjA2LCAyMTYxMCwgMjE2MTQsIDAsIDAsIDIxNjE4LCAKLSAgICAyMTYyMiwgMjE2MjYsIDIxNjMwLCAyMTYzNCwgMjE2MzgsIDIxNjQyLCAyMTY0NiwgMjE2NTAsIDIxNjU0LCAyMTY1OCwgCi0gICAgMjE2NjIsIDIxNjY2LCAyMTY3MCwgMjE2NzQsIDIxNjc4LCAyMTY4MiwgMjE2ODYsIDIxNjkwLCAyMTY5NCwgMjE2OTgsIAotICAgIDIxNzAyLCAyMTcwNiwgMjE3MTAsIDIxNzE0LCAyMTcxOCwgMjE3MjIsIDIxNzI2LCAyMTczMCwgMjE3MzQsIDIxNzM4LCAKLSAgICAyMTc0MiwgMjE3NDYsIDIxNzUwLCAyMTc1NCwgMjE3NTgsIDIxNzYyLCAyMTc2NiwgMjE3NzAsIDIxNzc0LCAyMTc3OCwgCi0gICAgMjE3ODIsIDIxNzg2LCAyMTc5MCwgMjE3OTQsIDIxNzk4LCAyMTgwMiwgMjE4MDYsIDIxODEwLCAyMTgxNCwgMjE4MTgsIAotICAgIDIxODIyLCAyMTgyNiwgMjE4MzAsIDIxODM0LCAyMTgzOCwgMjE4NDIsIDIxODQ1LCAyMTg0OSwgMjE4NTMsIDIxODU3LCAKLSAgICAyMTg2MSwgMjE4NjUsIDIxODY5LCAyMTg3MywgMjE4NzcsIDIxODgxLCAwLCAwLCAyMTg4NSwgMjE4OTQsIDIxOTAwLCAKLSAgICAyMTkwNSwgMjE5MDksIDIxOTEyLCAyMTkxNywgMjE5MjAsIDIxOTIzLCAyMTkyNiwgMjE5MzEsIDIxOTM1LCAyMTk0MCwgCi0gICAgMjE5NDMsIDIxOTQ2LCAyMTk0OSwgMjE5NTIsIDIxOTU1LCAyMTk1OCwgMjE5NjEsIDIxOTY0LCAyMTk2NywgMjE5NzEsIAotICAgIDIxOTc1LCAyMTk3OSwgMjE5ODMsIDIxOTg3LCAyMTk5MSwgMjE5OTUsIDIxOTk5LCAyMjAwMywgMjIwMDcsIDAsIDAsIDAsIAotICAgIDIyMDEzLCAyMjAxOSwgMjIwMjMsIDIyMDI3LCAyMjAzMSwgMjIwMzcsIDIyMDQxLCAyMjA0NSwgMjIwNDksIDIyMDU1LCAKLSAgICAyMjA1OSwgMjIwNjMsIDIyMDY3LCAyMjA3MywgMjIwNzcsIDIyMDgxLCAyMjA4NSwgMjIwOTEsIDIyMDk3LCAyMjEwMywgCi0gICAgMjIxMTEsIDIyMTE3LCAyMjEyMywgMjIxMjksIDIyMTM1LCAyMjE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxNDcsIDIyMTUwLCAKLSAgICAyMjE1MywgMjIxNTYsIDIyMTU5LCAyMjE2MiwgMjIxNjYsIDIyMTcwLCAyMjE3MywgMjIxNzcsIDIyMTgxLCAyMjE4NSwgCi0gICAgMjIxODksIDIyMTkzLCAyMjE5NiwgMjIyMDAsIDIyMjA0LCAyMjIwOCwgMjIyMTIsIDIyMjE2LCAyMjIyMCwgMjIyMjQsIAotICAgIDIyMjI4LCAyMjIzMiwgMjIyMzYsIDIyMjQwLCAyMjI0MywgMjIyNDcsIDIyMjUxLCAyMjI1NSwgMjIyNTksIDIyMjYyLCAKLSAgICAyMjI2NiwgMjIyNzAsIDIyMjc0LCAyMjI3OCwgMjIyODIsIDIyMjg2LCAyMjI5MCwgMjIyOTQsIDIyMjk4LCAyMjMwMiwgCi0gICAgMjIzMDYsIDIyMzEwLCAyMjMxNCwgMjIzMTcsIDIyMzIxLCAyMjMyNSwgMjIzMjksIDIyMzMzLCAyMjMzNywgMjIzNDEsIAotICAgIDIyMzQ1LCAyMjM0OSwgMjIzNTMsIDIyMzU3LCAyMjM2MSwgMjIzNjUsIDIyMzY5LCAyMjM3MywgMjIzNzcsIDIyMzgxLCAKLSAgICAyMjM4NSwgMjIzODksIDIyMzkzLCAyMjM5NywgMjI0MDEsIDIyNDA1LCAyMjQwOSwgMjI0MTMsIDIyNDE3LCAyMjQyMSwgCi0gICAgMjI0MjUsIDIyNDI5LCAyMjQzMywgMjI0MzcsIDIyNDQxLCAyMjQ0NSwgMjI0NDksIDIyNDUzLCAyMjQ1NiwgMjI0NjAsIAotICAgIDIyNDY0LCAyMjQ2OCwgMjI0NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNDc2LCAyMjQ4MCwgCi0gICAgMjI0ODMsIDIyNDg3LCAyMjQ5MCwgMjI0OTQsIDIyNDk3LCAyMjUwMSwgMjI1MDcsIDIyNTEyLCAyMjUxNiwgMjI1MTksIAotICAgIDIyNTIzLCAyMjUyNywgMjI1MzIsIDIyNTM2LCAyMjU0MSwgMjI1NDUsIDIyNTUwLCAyMjU1NCwgMjI1NTksIDIyNTYzLCAKLSAgICAyMjU2OCwgMjI1NzQsIDIyNTc4LCAyMjU4MywgMjI1ODcsIDIyNTkyLCAyMjU5OCwgMjI2MDIsIDIyNjA4LCAyMjYxNCwgCi0gICAgMjI2MTgsIDIyNjIzLCAyMjYzMSwgMjI2MzksIDIyNjQ2LCAyMjY1MSwgMjI2NTYsIDIyNjY1LCAyMjY3MiwgMjI2NzksIAotICAgIDIyNjg0LCAyMjY5MCwgMjI2OTQsIDIyNjk4LCAyMjcwMiwgMjI3MDYsIDIyNzEwLCAyMjcxNCwgMjI3MTgsIDIyNzIyLCAKLSAgICAyMjcyNiwgMjI3MzAsIDIyNzM2LCAyMjc0MSwgMjI3NDYsIDIyNzQ5LCAyMjc1MywgMjI3NTcsIDIyNzYyLCAyMjc2NiwgCi0gICAgMjI3NzEsIDIyNzc1LCAyMjc4MCwgMjI3ODQsIDIyNzg5LCAyMjc5MywgMjI3OTgsIDIyODAyLCAyMjgwNywgMjI4MTEsIAotICAgIDIyODE2LCAyMjgyMiwgMjI4MjYsIDIyODMxLCAyMjgzNiwgMjI4NDAsIDIyODQ0LCAyMjg0OCwgMjI4NTIsIDIyODU1LCAKLSAgICAyMjg1OSwgMjI4NjUsIDIyODcwLCAyMjg3NSwgMjI4NzksIDIyODgzLCAyMjg4NywgMjI4OTIsIDIyODk2LCAyMjkwMSwgCi0gICAgMjI5MDUsIDIyOTEwLCAyMjkxMywgMjI5MTcsIDIyOTIxLCAyMjkyNiwgMjI5MzAsIDIyOTM1LCAyMjkzOSwgMjI5NDQsIAotICAgIDIyOTUwLCAyMjk1NCwgMjI5NTgsIDIyOTYyLCAyMjk2NiwgMjI5NzAsIDIyOTc0LCAyMjk3OCwgMjI5ODIsIDIyOTg2LCAKLSAgICAyMjk5MCwgMjI5OTQsIDIzMDAwLCAyMzAwMywgMjMwMDcsIDIzMDExLCAyMzAxNiwgMjMwMjAsIDIzMDI1LCAyMzAyOSwgCi0gICAgMjMwMzQsIDIzMDM4LCAyMzA0MywgMjMwNDcsIDIzMDUyLCAyMzA1NiwgMjMwNjEsIDIzMDY1LCAyMzA3MCwgMjMwNzYsIAotICAgIDIzMDgwLCAyMzA4NCwgMjMwOTAsIDIzMDk2LCAyMzEwMiwgMjMxMDgsIDIzMTEyLCAyMzExNiwgMjMxMjAsIDIzMTI0LCAKLSAgICAyMzEyOCwgMjMxMzIsIDIzMTM4LCAyMzE0MiwgMjMxNDYsIDIzMTUwLCAyMzE1NSwgMjMxNTksIDIzMTY0LCAyMzE2OCwgCi0gICAgMjMxNzMsIDIzMTc3LCAyMzE4MiwgMjMxODYsIDIzMTkxLCAyMzE5NSwgMjMyMDAsIDIzMjA0LCAyMzIwOSwgMjMyMTUsIAotICAgIDIzMjE5LCAyMzIyNSwgMjMyMjksIDIzMjMzLCAyMzIzNywgMjMyNDEsIDIzMjQ1LCAyMzI0OSwgMjMyNTUsIDIzMjU4LCAKLSAgICAyMzI2MiwgMjMyNjYsIDIzMjcxLCAyMzI3NSwgMjMyODAsIDIzMjg0LCAyMzI4OSwgMjMyOTMsIDIzMjk4LCAyMzMwMiwgCi0gICAgMjMzMDcsIDIzMzExLCAyMzMxNiwgMjMzMjAsIDIzMzI1LCAyMzMzMSwgMjMzMzQsIDIzMzM4LCAyMzM0MiwgMjMzNDcsIAotICAgIDIzMzUyLCAyMzM1NiwgMjMzNjAsIDIzMzY0LCAyMzM2OCwgMjMzNzIsIDIzMzc2LCAyMzM4MiwgMjMzODUsIDIzMzg5LCAKLSAgICAyMzM5MywgMjMzOTgsIDIzNDAyLCAyMzQwNywgMjM0MTEsIDIzNDE2LCAyMzQyMiwgMjM0MjYsIDIzNDMxLCAyMzQzNSwgCi0gICAgMjM0MzksIDIzNDQzLCAyMzQ0NywgMjM0NTEsIDIzNDU1LCAyMzQ1OSwgMjM0NjUsIDIzNDY5LCAyMzQ3MywgMjM0NzcsIAotICAgIDIzNDgyLCAyMzQ4NiwgMjM0OTEsIDIzNDk1LCAyMzUwMCwgMjM1MDQsIDIzNTA5LCAyMzUxMywgMjM1MTgsIDIzNTIyLCAKLSAgICAyMzUyNywgMjM1MzEsIDIzNTM2LCAyMzUzOSwgMjM1NDMsIDIzNTQ3LCAyMzU1MSwgMjM1NTUsIDIzNTU5LCAyMzU2MywgCi0gICAgMjM1NjcsIDIzNTcxLCAyMzU3NywgMjM1ODAsIDIzNTg0LCAyMzU4OCwgMjM1OTMsIDIzNTk3LCAyMzYwMiwgMjM2MDYsIAotICAgIDIzNjExLCAyMzYxNSwgMjM2MjAsIDIzNjI0LCAyMzYyOSwgMjM2MzMsIDIzNjM4LCAyMzY0MiwgMjM2NDcsIDIzNjUzLCAKLSAgICAyMzY1NywgMjM2NjMsIDIzNjY3LCAyMzY3MywgMjM2NzksIDIzNjg1LCAyMzY5MSwgMjM2OTcsIDIzNzAzLCAyMzcwOSwgCi0gICAgMjM3MTUsIDIzNzE5LCAyMzcyMywgMjM3MjcsIDIzNzMxLCAyMzczNSwgMjM3MzksIDIzNzQzLCAyMzc0NywgMjM3NTIsIAotICAgIDIzNzU2LCAyMzc2MSwgMjM3NjUsIDIzNzcwLCAyMzc3NCwgMjM3NzksIDIzNzgzLCAyMzc4OCwgMjM3OTIsIDIzNzk3LCAKLSAgICAyMzgwMSwgMjM4MDYsIDIzODEwLCAyMzgxNCwgMjM4MTgsIDIzODIyLCAyMzgyNiwgMjM4MzAsIDIzODM0LCAyMzg0MCwgCi0gICAgMjM4NDMsIDIzODQ3LCAyMzg1MSwgMjM4NTYsIDIzODYwLCAyMzg2NSwgMjM4NjksIDIzODc0LCAyMzg3OCwgMjM4ODMsIAotICAgIDIzODg3LCAyMzg5MiwgMjM4OTYsIDIzOTAxLCAyMzkwNSwgMjM5MTAsIDIzOTE2LCAyMzkyMCwgMjM5MjYsIDIzOTMxLCAKLSAgICAyMzkzNywgMjM5NDEsIDIzOTQ3LCAyMzk1MiwgMjM5NTYsIDIzOTYwLCAyMzk2NCwgMjM5NjgsIDIzOTcyLCAyMzk3NywgCi0gICAgMjM5ODAsIDIzOTg0LCAyMzk4OSwgMjM5OTMsIDIzOTk4LCAyNDAwMSwgMjQwMDUsIDI0MDA5LCAyNDAxMywgMjQwMTcsIAotICAgIDI0MDIxLCAyNDAyNSwgMjQwMjksIDI0MDMzLCAyNDAzNywgMjQwNDEsIDI0MDQ1LCAyNDA1MCwgMjQwNTQsIDI0MDU4LCAKLSAgICAyNDA2NCwgMjQwNjgsIDI0MDc0LCAyNDA3OCwgMjQwODQsIDI0MDg4LCAyNDA5MiwgMjQwOTYsIDI0MTAwLCAyNDEwNCwgCi0gICAgMjQxMDksIDI0MTEzLCAyNDExNywgMjQxMjEsIDI0MTI1LCAyNDEyOSwgMjQxMzMsIDI0MTM3LCAyNDE0MSwgMjQxNDUsIAotICAgIDI0MTQ5LCAyNDE1NSwgMjQxNjEsIDI0MTY3LCAyNDE3MywgMjQxNzksIDI0MTg0LCAyNDE5MCwgMjQxOTYsIDI0MjAyLCAKLSAgICAyNDIwNiwgMjQyMTAsIDI0MjE0LCAyNDIxOCwgMjQyMjIsIDI0MjI2LCAyNDIzMCwgMjQyMzQsIDI0MjM4LCAyNDI0MiwgCi0gICAgMjQyNDYsIDI0MjUwLCAyNDI1NCwgMjQyNTksIDI0MjY0LCAyNDI2OSwgMjQyNzMsIDI0Mjc3LCAyNDI4MSwgMjQyODUsIAotICAgIDI0Mjg5LCAyNDI5MywgMjQyOTcsIDI0MzAxLCAyNDMwNSwgMjQzMDksIDI0MzE1LCAyNDMyMSwgMjQzMjcsIDI0MzMzLCAKLSAgICAyNDMzOSwgMjQzNDUsIDI0MzUxLCAyNDM1NywgMjQzNjMsIDI0MzY3LCAyNDM3MSwgMjQzNzUsIDI0Mzc5LCAyNDM4MywgCi0gICAgMjQzODcsIDI0MzkxLCAyNDM5NywgMjQ0MDMsIDI0NDA5LCAyNDQxNSwgMjQ0MjEsIDI0NDI3LCAyNDQzMywgMjQ0MzksIAotICAgIDI0NDQ1LCAyNDQ1MCwgMjQ0NTUsIDI0NDYwLCAyNDQ2NSwgMjQ0NzEsIDI0NDc3LCAyNDQ4MywgMjQ0ODksIDI0NDk1LCAKLSAgICAyNDUwMSwgMjQ1MDcsIDI0NTEyLCAyNDUxOCwgMjQ1MjQsIDI0NTMwLCAyNDUzNSwgMjQ1NDEsIDI0NTQ3LCAyNDU1MywgCi0gICAgMjQ1NTgsIDI0NTYzLCAyNDU2OCwgMjQ1NzMsIDI0NTc4LCAyNDU4MywgMjQ1ODgsIDI0NTkzLCAyNDU5OCwgMjQ2MDMsIAotICAgIDI0NjA4LCAyNDYxMywgMjQ2MTcsIDI0NjIyLCAyNDYyNywgMjQ2MzIsIDI0NjM3LCAyNDY0MiwgMjQ2NDcsIDI0NjUyLCAKLSAgICAyNDY1NywgMjQ2NjIsIDI0NjY3LCAyNDY3MiwgMjQ2NzcsIDI0NjgyLCAyNDY4NywgMjQ2OTIsIDI0Njk3LCAyNDcwMiwgCi0gICAgMjQ3MDcsIDI0NzEyLCAyNDcxNywgMjQ3MjIsIDI0NzI3LCAyNDczMiwgMjQ3MzcsIDI0NzQyLCAyNDc0NywgMjQ3NTIsIAotICAgIDI0NzU3LCAyNDc2MiwgMjQ3NjYsIDI0NzcxLCAyNDc3NiwgMjQ3ODEsIDI0Nzg2LCAyNDc5MSwgMjQ3OTYsIDI0ODAxLCAKLSAgICAyNDgwNiwgMjQ4MTEsIDI0ODE2LCAyNDgyMSwgMjQ4MjYsIDI0ODMxLCAyNDgzNiwgMjQ4NDEsIDI0ODQ2LCAyNDg1MSwgCi0gICAgMjQ4NTYsIDI0ODYxLCAyNDg2NiwgMjQ4NzEsIDI0ODc2LCAyNDg4MSwgMjQ4ODYsIDI0ODkxLCAyNDg5NSwgMjQ5MDAsIAotICAgIDI0OTA1LCAyNDkxMCwgMjQ5MTUsIDI0OTIwLCAyNDkyNCwgMjQ5MjksIDI0OTM0LCAyNDkzOSwgMjQ5NDQsIDI0OTQ5LCAKLSAgICAyNDk1MywgMjQ5NTgsIDI0OTY0LCAyNDk2OSwgMjQ5NzQsIDI0OTc5LCAyNDk4NCwgMjQ5OTAsIDI0OTk1LCAyNTAwMCwgCi0gICAgMjUwMDUsIDI1MDEwLCAyNTAxNSwgMjUwMjAsIDI1MDI1LCAyNTAzMCwgMjUwMzUsIDI1MDQwLCAyNTA0NSwgMjUwNTAsIAotICAgIDI1MDU1LCAyNTA2MCwgMjUwNjUsIDI1MDcwLCAyNTA3NSwgMjUwODAsIDI1MDg1LCAyNTA5MCwgMjUwOTUsIDI1MTAwLCAKLSAgICAyNTEwNSwgMjUxMTAsIDI1MTE1LCAyNTEyMCwgMjUxMjUsIDI1MTMwLCAyNTEzNSwgMjUxNDAsIDI1MTQ1LCAyNTE1MCwgCi0gICAgMjUxNTUsIDI1MTYwLCAyNTE2NSwgMjUxNzAsIDI1MTc1LCAyNTE4MCwgMjUxODUsIDI1MTkwLCAyNTE5NSwgMjUyMDAsIAotICAgIDI1MjA1LCAyNTIxMCwgMjUyMTYsIDI1MjIxLCAyNTIyNiwgMjUyMzEsIDI1MjM2LCAyNTI0MSwgMjUyNDYsIDI1MjUxLCAKLSAgICAyNTI1NiwgMjUyNjEsIDI1MjY2LCAyNTI3MSwgMjUyNzUsIDI1MjgwLCAyNTI4NSwgMjUyOTAsIDI1Mjk1LCAyNTMwMCwgCi0gICAgMjUzMDUsIDI1MzEwLCAyNTMxNSwgMjUzMjAsIDI1MzI1LCAyNTMzMCwgMjUzMzUsIDI1MzQwLCAyNTM0NSwgMjUzNTAsIAotICAgIDI1MzU1LCAyNTM2MCwgMjUzNjUsIDI1MzcwLCAyNTM3NSwgMjUzODAsIDI1Mzg1LCAyNTM5MCwgMjUzOTUsIDI1NDAwLCAKLSAgICAyNTQwNSwgMjU0MTEsIDI1NDE1LCAyNTQxOSwgMjU0MjMsIDI1NDI3LCAyNTQzMSwgMjU0MzUsIDI1NDM5LCAyNTQ0MywgCi0gICAgMjU0NDksIDI1NDU1LCAyNTQ2MSwgMjU0NjcsIDI1NDczLCAyNTQ3OSwgMjU0ODUsIDI1NDkyLCAyNTQ5OCwgMjU1MDMsIAotICAgIDI1NTA4LCAyNTUxMywgMjU1MTgsIDI1NTIzLCAyNTUyOCwgMjU1MzMsIDI1NTM4LCAyNTU0MywgMjU1NDgsIDI1NTUzLCAKLSAgICAyNTU1OCwgMjU1NjMsIDI1NTY4LCAyNTU3MywgMjU1NzgsIDI1NTgzLCAyNTU4OCwgMjU1OTMsIDI1NTk4LCAyNTYwMywgCi0gICAgMjU2MDgsIDI1NjEzLCAyNTYxOCwgMjU2MjMsIDI1NjI4LCAyNTYzMywgMjU2MzgsIDAsIDAsIDAsIDI1NjQ1LCAyNTY1NSwgCi0gICAgMjU2NTksIDI1NjY2LCAyNTY3MCwgMjU2NzQsIDI1Njc4LCAyNTY4NiwgMjU2OTAsIDI1Njk1LCAyNTcwMCwgMjU3MDUsIAotICAgIDI1NzA5LCAyNTcxNCwgMjU3MTksIDI1NzIyLCAyNTcyNiwgMjU3MzAsIDI1NzM5LCAyNTc0MywgMjU3NDcsIDI1NzUzLCAKLSAgICAyNTc1NywgMjU3NjEsIDI1NzY5LCAyNTc3MywgMjU3ODEsIDI1Nzg3LCAyNTc5MywgMjU3OTksIDI1ODA1LCAyNTgxNSwgCi0gICAgMjU4MjEsIDI1ODI1LCAyNTgzNCwgMjU4MzcsIDI1ODQzLCAyNTg0NywgMjU4NTMsIDI1ODU4LCAyNTg2NCwgMjU4NzIsIAotICAgIDI1ODc4LCAyNTg4NCwgMjU4OTIsIDI1ODk4LCAyNTkwMiwgMjU5MDYsIDI1OTE2LCAyNTkyMiwgMjU5MjYsIDI1OTM2LCAKLSAgICAyNTk0MiwgMjU5NDYsIDI1OTUwLCAyNTk1NywgMjU5NjQsIDI1OTY5LCAyNTk3NCwgMjU5ODMsIDI1OTg3LCAyNTk5MSwgCi0gICAgMjU5OTUsIDI2MDAzLCAyNjAxMCwgMjYwMTQsIDI2MDE4LCAyNjAyMiwgMjYwMjYsIDI2MDMwLCAyNjAzNCwgMjYwMzgsIAotICAgIDI2MDQyLCAyNjA0NiwgMjYwNTAsIDI2MDU0LCAyNjA1OSwgMjYwNjQsIDI2MDY5LCAyNjA3MywgMjYwNzcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MDgxLCAyNjA4NSwgMjYwODksIDI2MDkzLCAyNjA5NywgCi0gICAgMjYxMDIsIDI2MTA3LCAyNjExMiwgMjYxMTcsIDI2MTIxLCAyNjEyNSwgMjYxMzAsIDI2MTM0LCAwLCAyNjEzOCwgMjYxNDMsIAotICAgIDI2MTQ4LCAyNjE1MiwgMjYxNTYsIDI2MTYxLCAyNjE2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjYxNzEsIDI2MTc1LCAyNjE3OSwgMjYxODMsIDI2MTg3LCAyNjE5MiwgMjYxOTcsIDI2MjAyLCAyNjIwNywgMjYyMTEsIAotICAgIDI2MjE1LCAyNjIyMCwgMjYyMjQsIDI2MjI4LCAyNjIzMiwgMjYyMzcsIDI2MjQyLCAyNjI0NiwgMjYyNTAsIDI2MjU1LCAKLSAgICAyNjI2MCwgMjYyNjUsIDI2MjcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjI3NiwgMjYyODAsIDI2Mjg0LCAKLSAgICAyNjI4OCwgMjYyOTIsIDI2Mjk3LCAyNjMwMiwgMjYzMDcsIDI2MzEyLCAyNjMxNiwgMjYzMjAsIDI2MzI1LCAyNjMyOSwgCi0gICAgMjYzMzMsIDI2MzM3LCAyNjM0MiwgMjYzNDcsIDI2MzUxLCAyNjM1NSwgMjYzNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDI2MzY1LCAyNjM2OSwgMjYzNzMsIDI2Mzc3LCAyNjM4MSwgMjYzODYsIDI2MzkxLCAyNjM5NiwgCi0gICAgMjY0MDEsIDI2NDA1LCAyNjQwOSwgMjY0MTQsIDI2NDE4LCAwLCAyNjQyMiwgMjY0MjcsIDI2NDMyLCAwLCAyNjQzNiwgCi0gICAgMjY0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NDQ2LCAyNjQ0OSwgMjY0NTMsIDI2NDU3LCAKLSAgICAyNjQ2MSwgMjY0NjUsIDI2NDY5LCAyNjQ3MywgMjY0NzcsIDI2NDgxLCAyNjQ4NSwgMjY0ODksIDI2NDkzLCAyNjQ5NywgCi0gICAgMjY1MDEsIDI2NTA1LCAyNjUwOSwgMjY1MTMsIDI2NTE2LCAyNjUyMCwgMjY1MjQsIDI2NTI4LCAyNjUzMiwgMjY1MzYsIAotICAgIDI2NTQwLCAyNjU0NCwgMjY1NDgsIDI2NTUyLCAyNjU1NiwgMjY1NjAsIDI2NTY0LCAyNjU2OCwgMjY1NzEsIDI2NTc0LCAKLSAgICAyNjU3OCwgMjY1ODIsIDI2NTg4LCAyNjU5NCwgMjY2MDAsIDI2NjA2LCAyNjYxMiwgMjY2MTgsIDI2NjI0LCAyNjYzMCwgCi0gICAgMjY2MzYsIDI2NjQyLCAyNjY0OCwgMjY2NTQsIDI2NjYwLCAyNjY2NiwgMjY2NzUsIDI2Njg0LCAyNjY5MCwgMjY2OTYsIAotICAgIDI2NzAyLCAyNjcwNywgMjY3MTEsIDI2NzE2LCAyNjcyMSwgMjY3MjYsIDI2NzMwLCAyNjczNSwgMjY3NDAsIDI2NzQ1LCAKLSAgICAyNjc0OSwgMjY3NTQsIDI2NzU4LCAyNjc2MywgMjY3NjgsIDI2NzczLCAyNjc3OCwgMjY3ODIsIDI2Nzg2LCAyNjc5MCwgCi0gICAgMjY3OTQsIDI2Nzk4LCAyNjgwMiwgMjY4MDYsIDI2ODEwLCAyNjgxNCwgMjY4MTgsIDI2ODI0LCAyNjgyOCwgMjY4MzIsIAotICAgIDI2ODM2LCAyNjg0MCwgMjY4NDQsIDI2ODUyLCAyNjg1OCwgMjY4NjIsIDI2ODY4LCAyNjg3MiwgMjY4NzgsIDI2ODgyLCAwLCAKLSAgICAwLCAyNjg4NiwgMjY4OTAsIDI2ODkzLCAyNjg5NiwgMjY4OTksIDI2OTAyLCAyNjkwNSwgMjY5MDgsIDI2OTExLCAyNjkxNCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY5MTcsIDI2OTI1LCAyNjkzMywgMjY5NDEsIDI2OTQ5LCAyNjk1NywgMjY5NjUsIDI2OTczLCAKLSAgICAyNjk4MSwgMjY5ODksIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTk3LCAyNzAwMCwgMjcwMDMsIDI3MDA2LCAyNzAxMSwgMjcwMTQsIAotICAgIDI3MDE5LCAyNzAyNiwgMjcwMzQsIDI3MDM5LCAyNzA0NiwgMjcwNDksIDI3MDU2LCAyNzA2MywgMjcwNzAsIDAsIDI3MDc0LCAKLSAgICAyNzA3OCwgMjcwODEsIDI3MDg0LCAyNzA4NywgMjcwOTAsIDI3MDkzLCAyNzA5NiwgMjcwOTksIDI3MTAyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAyNzEwNSwgMjcxMDgsIDI3MTExLCAyNzExNCwgMjcxMTcsIDI3MTIwLCAyNzEyNCwgMjcxMjgsIDI3MTMyLCAKLSAgICAyNzEzNSwgMjcxMzksIDI3MTQzLCAyNzE0NiwgMjcxNTAsIDI3MTU0LCAyNzE1NywgMjcxNjEsIDI3MTY0LCAyNzE2OCwgCi0gICAgMjcxNzIsIDI3MTc2LCAyNzE4MCwgMjcxODQsIDI3MTg3LCAyNzE5MCwgMjcxOTQsIDI3MTk4LCAyNzIwMSwgMjcyMDUsIAotICAgIDI3MjA5LCAyNzIxMywgMjcyMTcsIDI3MjIxLCAyNzIyNSwgMjcyMjksIDI3MjMzLCAyNzI0MCwgMjcyNDUsIDI3MjUwLCAKLSAgICAyNzI1NSwgMjcyNjAsIDI3MjY2LCAyNzI3MiwgMjcyNzgsIDI3Mjg0LCAyNzI4OSwgMjcyOTUsIDI3MzAxLCAyNzMwNiwgCi0gICAgMjczMTIsIDI3MzE4LCAyNzMyNCwgMjczMzAsIDI3MzM2LCAyNzM0MSwgMjczNDcsIDI3MzUyLCAyNzM1OCwgMjczNjQsIAotICAgIDI3MzcwLCAyNzM3NiwgMjczODIsIDI3Mzg3LCAyNzM5MiwgMjczOTgsIDI3NDA0LCAyNzQwOSwgMjc0MTUsIDI3NDIwLCAKLSAgICAyNzQyNiwgMjc0MzEsIDI3NDM2LCAyNzQ0MiwgMjc0NDgsIDI3NDU0LCAyNzQ2MCwgMjc0NjYsIDI3NDcyLCAyNzQ3OCwgCi0gICAgMjc0ODQsIDI3NDkwLCAyNzQ5NiwgMjc1MDIsIDI3NTA4LCAyNzUxMywgMjc1MTgsIDI3NTIzLCAyNzUyOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjc1MzUsIDI3NTQ0LCAyNzU1MywgMjc1NjEsIDI3NTY5LCAyNzU3OSwgMjc1ODcsIDI3NTk2LCAKLSAgICAyNzYwMywgMjc2MTAsIDI3NjE3LCAyNzYyNSwgMjc2MzMsIDI3NjQxLCAyNzY0OSwgMjc2NTcsIDI3NjY1LCAyNzY3MywgCi0gICAgMjc2ODEsIDI3Njg4LCAyNzY5NiwgMjc3MDQsIDI3NzEyLCAyNzcyMCwgMjc3MjgsIDI3NzM4LCAyNzc0OCwgMjc3NTgsIAotICAgIDI3NzY4LCAyNzc3OCwgMjc3ODgsIDI3Nzk4LCAyNzgwOCwgMjc4MTgsIDI3ODI4LCAyNzgzOCwgMjc4NDgsIDI3ODU4LCAKLSAgICAyNzg2OCwgMjc4NzYsIDI3ODg0LCAyNzg5NCwgMjc5MDIsIDAsIDAsIDAsIDAsIDAsIDI3OTEyLCAyNzkxNiwgMjc5MjAsIAotICAgIDI3OTI0LCAyNzkyOCwgMjc5MzIsIDI3OTM2LCAyNzk0MCwgMjc5NDQsIDI3OTQ4LCAyNzk1MiwgMjc5NTYsIDI3OTYwLCAKLSAgICAyNzk2NCwgMjc5NjgsIDI3OTcyLCAyNzk3NiwgMjc5ODAsIDI3OTg0LCAyNzk4OCwgMjc5OTIsIDI3OTk2LCAyODAwMCwgCi0gICAgMjgwMDQsIDI4MDEwLCAyODAxNCwgMjgwMjAsIDI4MDI0LCAyODAzMCwgMjgwMzQsIDI4MDQwLCAyODA0NCwgMjgwNDgsIAotICAgIDI4MDUyLCAyODA1NiwgMjgwNjAsIDI4MDY0LCAyODA3MCwgMjgwNzYsIDI4MDgyLCAyODA4OCwgMjgwOTMsIDI4MDk5LCAKLSAgICAyODEwNSwgMjgxMTEsIDI4MTE3LCAyODEyMywgMjgxMjksIDI4MTM2LCAyODE0MiwgMjgxNDcsIDI4MTUyLCAyODE1NiwgCi0gICAgMjgxNjAsIDI4MTY0LCAyODE2OCwgMjgxNzIsIDI4MTc2LCAyODE4MCwgMjgxODYsIDI4MTkyLCAyODE5OCwgMjgyMDMsIAotICAgIDI4MjEwLCAyODIxNSwgMjgyMjAsIDI4MjI2LCAyODIzMSwgMjgyMzgsIDI4MjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyODI1MiwgMjgyNTgsIDI4MjYyLCAyODI2NywgMjgyNzIsIDI4Mjc3LCAyODI4MiwgMjgyODcsIDI4MjkyLCAKLSAgICAyODI5NywgMjgzMDIsIDI4MzA3LCAyODMxMiwgMjgzMTcsIDI4MzIyLCAyODMyNywgMjgzMzEsIDI4MzM1LCAyODM0MCwgCi0gICAgMjgzNDUsIDI4MzUwLCAyODM1NCwgMjgzNTgsIDI4MzYyLCAyODM2NywgMjgzNzIsIDI4Mzc3LCAyODM4MiwgMjgzODYsIDAsIAotICAgIDAsIDAsIDI4MzkwLCAyODM5NSwgMjg0MDAsIDI4NDA1LCAyODQxMSwgMjg0MTcsIDI4NDIzLCAyODQyOSwgMjg0MzQsIAotICAgIDI4NDM5LCAyODQ0NSwgMjg0NTEsIDAsIDAsIDAsIDAsIDI4NDU4LCAyODQ2MywgMjg0NjksIDI4NDc1LCAyODQ4MSwgCi0gICAgMjg0ODYsIDI4NDkxLCAyODQ5NiwgMjg1MDEsIDI4NTA3LCAyODUxMiwgMjg1MTcsIDAsIDAsIDAsIDAsIDI4NTIyLCAwLCAwLCAKLSAgICAwLCAyODUyNywgMjg1MzIsIDI4NTM3LCAyODU0MiwgMjg1NDYsIDI4NTUwLCAyODU1NCwgMjg1NTgsIDI4NTYyLCAyODU2NiwgCi0gICAgMjg1NzAsIDI4NTc0LCAyODU3OCwgMjg1ODMsIDI4NTg5LCAyODU5NSwgMjg2MDEsIDI4NjA2LCAyODYxMSwgMjg2MTcsIAotICAgIDI4NjIzLCAyODYyOSwgMjg2MzQsIDI4NjQwLCAyODY0NSwgMjg2NTEsIDI4NjU3LCAyODY2MiwgMjg2NjgsIDI4Njc0LCAKLSAgICAyODY4MCwgMjg2ODUsIDI4NjkwLCAyODY5NSwgMjg3MDEsIDI4NzA3LCAyODcxMiwgMjg3MTgsIDI4NzIzLCAyODcyOSwgCi0gICAgMjg3MzQsIDI4NzQwLCAwLCAwLCAyODc0NiwgMjg3NTIsIDI4NzU4LCAyODc2NCwgMjg3NzAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI4Nzc2LCAyODc4MywgMjg3OTAsIDI4Nzk2LCAyODgwMywgMjg4MTAsIDI4ODE2LCAyODgyMywgCi0gICAgMjg4MzAsIDI4ODM3LCAyODg0MywgMjg4NDksIDI4ODU2LCAyODg2MiwgMjg4NjgsIDI4ODc1LCAyODg4MiwgMjg4ODgsIAotICAgIDI4ODk1LCAyODkwMiwgMjg5MDgsIDI4OTE0LCAyODkyMSwgMjg5MjcsIDI4OTMzLCAyODk0MCwgMjg5NDYsIDI4OTUzLCAKLSAgICAyODk2MCwgMjg5NjcsIDI4OTc0LCAyODk4MSwgMjg5ODgsIDI4OTk0LCAyOTAwMSwgMjkwMDgsIDI5MDE0LCAyOTAyMSwgCi0gICAgMjkwMjgsIDI5MDM1LCAyOTA0MiwgMjkwNDksIDI5MDU2LCAyOTA2MywgMCwgMCwgMCwgMCwgMjkwNzAsIDI5MDc4LCAKLSAgICAyOTA4NSwgMjkwOTIsIDI5MDk4LCAyOTEwNSwgMjkxMTEsIDI5MTE4LCAyOTEyNCwgMjkxMzEsIDI5MTM4LCAyOTE0NSwgCi0gICAgMjkxNTIsIDI5MTU5LCAyOTE2NiwgMjkxNzMsIDI5MTgwLCAyOTE4NywgMjkxOTQsIDI5MjAxLCAyOTIwOCwgMjkyMTQsIAotICAgIDI5MjIxLCAyOTIyOCwgMjkyMzUsIDI5MjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTI0NywgMjkyNTMsIDI5MjU4LCAyOTI2MywgCi0gICAgMjkyNjgsIDI5MjczLCAyOTI3OCwgMjkyODMsIDI5Mjg4LCAyOTI5MywgMjkyOTgsIDAsIDAsIDAsIDI5MzA0LCAyOTMxMCwgCi0gICAgMjkzMTYsIDI5MzIwLCAyOTMyNiwgMjkzMzIsIDI5MzM4LCAyOTM0NCwgMjkzNTAsIDI5MzU2LCAyOTM2MiwgMjkzNjgsIAotICAgIDI5Mzc0LCAyOTM4MCwgMjkzODYsIDI5MzkyLCAyOTM5OCwgMjk0MDQsIDI5NDEwLCAyOTQxNCwgMjk0MjAsIDI5NDI2LCAKLSAgICAyOTQzMiwgMjk0MzgsIDI5NDQ0LCAyOTQ1MCwgMjk0NTYsIDI5NDYyLCAyOTQ2OCwgMjk0NzQsIDI5NDgwLCAyOTQ4NiwgCi0gICAgMjk0OTIsIDI5NDk4LCAyOTUwNCwgMjk1MDgsIDI5NTEzLCAyOTUxOCwgMjk1MjMsIDI5NTI3LCAyOTUzMiwgMjk1MzYsIAotICAgIDI5NTQxLCAyOTU0NiwgMjk1NTEsIDI5NTU1LCAyOTU2MCwgMjk1NjUsIDI5NTcwLCAyOTU3NSwgMjk1ODAsIDI5NTg0LCAKLSAgICAyOTU4OCwgMjk1OTMsIDI5NTk4LCAyOTYwMiwgMjk2MDYsIDI5NjEwLCAyOTYxNSwgMjk2MjAsIDI5NjI1LCAyOTYzMCwgMCwgCi0gICAgMCwgMjk2MzYsIDI5NjQwLCAyOTY0NywgMjk2NTIsIDI5NjU4LCAyOTY2NCwgMjk2NjksIDI5Njc1LCAyOTY4MSwgMjk2ODYsIAotICAgIDI5NjkyLCAyOTY5OCwgMjk3MDQsIDI5NzA5LCAyOTcxNSwgMjk3MjAsIDI5NzI1LCAyOTczMSwgMjk3MzYsIDI5NzQyLCAKLSAgICAyOTc0NywgMjk3NTMsIDI5NzU5LCAyOTc2NSwgMjk3NzEsIDI5Nzc1LCAyOTc4MCwgMjk3ODUsIDI5NzkxLCAyOTc5NywgCi0gICAgMjk4MDIsIDI5ODA4LCAyOTgxNCwgMjk4MTgsIDI5ODIzLCAyOTgyOCwgMjk4MzIsIDI5ODM3LCAyOTg0MiwgMjk4NDcsIAotICAgIDI5ODUyLCAyOTg1OCwgMjk4NjQsIDI5ODY5LCAyOTg3NCwgMjk4NzksIDI5ODgzLCAyOTg4OCwgMjk4OTIsIDI5ODk3LCAKLSAgICAyOTkwMSwgMjk5MDYsIDI5OTExLCAyOTkxNiwgMjk5MjEsIDI5OTI3LCAyOTkzMywgMjk5NDAsIDI5OTUwLCAyOTk1OSwgCi0gICAgMjk5NjYsIDI5OTcyLCAyOTk4MiwgMjk5ODcsIDI5OTkzLCAwLCAyOTk5OCwgMzAwMDMsIDMwMDA4LCAzMDAxNiwgMzAwMjIsIAotICAgIDMwMDMwLCAzMDAzNSwgMzAwNDEsIDMwMDQ3LCAzMDA1MywgMzAwNTgsIDMwMDY0LCAzMDA2OSwgMzAwNzYsIDMwMDgyLCAKLSAgICAzMDA4NywgMzAwOTMsIDMwMDk5LCAzMDEwNSwgMzAxMTIsIDMwMTE5LCAzMDEyNiwgMzAxMzEsIDMwMTM2LCAzMDE0MywgCi0gICAgMzAxNTAsIDMwMTU3LCAzMDE2NCwgMzAxNzEsIDAsIDAsIDMwMTc4LCAzMDE4NSwgMzAxOTIsIDMwMTk4LCAzMDIwNCwgCi0gICAgMzAyMTAsIDMwMjE2LCAzMDIyMiwgMzAyMjgsIDMwMjM0LCAzMDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAyNDYsIDMwMjUyLCAKLSAgICAzMDI1NywgMzAyNjIsIDMwMjY3LCAzMDI3MiwgMzAyNzcsIDMwMjgyLCAzMDI4NywgMzAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDMwMjk3LCAzMDMwMiwgMzAzMDcsIDMwMzEyLCAzMDMxNywgMzAzMjIsIDMwMzI3LCAzMDMzNiwgMzAzNDMsIDMwMzQ4LCAKLSAgICAzMDM1MywgMzAzNTgsIDMwMzYzLCAzMDM2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjYwODgsIDY2MDk3LCA2NjEwNiwgNjYxMTcsIDY2MTI0LCA2NjEyOSwgNjYxMzQsIDY2MTQxLCA2NjE0OCwgNjYxNTQsIAorICAgIDY2MTU5LCA2NjE2NCwgNjYxNjksIDY2MTc0LCA2NjE4MSwgNjYxODYsIDY2MTkxLCA2NjE5NiwgNjYyMDcsIDY2MjEyLCAKKyAgICA2NjIxNywgNjYyMjQsIDY2MjI5LCA2NjIzNiwgNjYyNDEsIDY2MjQ2LCA2NjI1MywgNjYyNjAsIDY2MjY3LCA2NjI3NiwgCisgICAgNjYyODUsIDY2MjkwLCA2NjI5NSwgNjYzMDAsIDY2MzA3LCA2NjMxMiwgNjYzMjIsIDY2MzI5LCA2NjMzNCwgNjYzMzksIAorICAgIDY2MzQ0LCA2NjM0OSwgNjYzNTQsIDY2MzU5LCA2NjM2OCwgNjYzNzUsIDY2MzgyLCA2NjM4NywgNjYzOTQsIDY2Mzk5LCAKKyAgICA2NjQwNiwgNjY0MTUsIDY2NDI2LCA2NjQzMSwgNjY0NDAsIDY2NDQ1LCA2NjQ1MiwgNjY0NjEsIDY2NDcwLCA2NjQ3NSwgCisgICAgNjY0ODAsIDY2NDg3LCA2NjQ5MywgNjY1MDAsIDY2NTA3LCA2NjUxMSwgNjY1MTUsIDY2NTE4LCA2NjUyMiwgNjY1MjYsIAorICAgIDY2NTMwLCA2NjUzNCwgNjY1MzgsIDY2NTQyLCA2NjU0NiwgNjY1NDksIDY2NTUzLCA2NjU1NywgNjY1NjEsIDY2NTY1LCAKKyAgICA2NjU2OSwgNjY1NzMsIDY2NTc2LCA2NjU4MCwgNjY1ODQsIDY2NTg3LCA2NjU5MSwgNjY1OTUsIDY2NTk5LCA2NjYwMywgCisgICAgNjY2MDcsIDY2NjExLCA2NjYxNSwgNjY2MTksIDY2NjIzLCA2NjYyNywgNjY2MzEsIDY2NjM1LCA2NjYzOSwgNjY2NDMsIAorICAgIDY2NjQ3LCA2NjY1MSwgNjY2NTUsIDY2NjU5LCA2NjY2MywgNjY2NjcsIDY2NjcxLCA2NjY3NSwgNjY2NzksIDY2NjgzLCAKKyAgICA2NjY4NywgNjY2OTEsIDY2Njk1LCA2NjY5OSwgNjY3MDMsIDY2NzA3LCA2NjcxMSwgNjY3MTUsIDY2NzE5LCA2NjcyMywgCisgICAgNjY3MjcsIDY2NzMxLCA2NjczNSwgNjY3MzksIDY2NzQzLCA2Njc0NywgNjY3NTEsIDY2NzU1LCA2Njc1OSwgNjY3NjMsIAorICAgIDY2NzY2LCA2Njc3MCwgNjY3NzQsIDY2Nzc4LCA2Njc4MiwgNjY3ODYsIDY2NzkwLCA2Njc5NCwgNjY3OTgsIDY2ODAyLCAKKyAgICA2NjgwNiwgNjY4MTAsIDY2ODE0LCA2NjgxOCwgNjY4MjIsIDY2ODI2LCA2NjgzMCwgNjY4MzQsIDY2ODM4LCA2Njg0MiwgCisgICAgNjY4NDYsIDY2ODUwLCA2Njg1NCwgNjY4NTgsIDY2ODYyLCA2Njg2NiwgNjY4NzAsIDY2ODc0LCA2Njg3OCwgNjY4ODIsIAorICAgIDY2ODg2LCA2Njg5MCwgNjY4OTQsIDY2ODk4LCA2NjkwMiwgNjY5MDYsIDY2OTEwLCA2NjkxNCwgNjY5MTgsIDY2OTIyLCAKKyAgICA2NjkyNiwgNjY5MzAsIDY2OTM0LCA2NjkzOCwgNjY5NDIsIDY2OTQ2LCA2Njk1MCwgNjY5NTQsIDY2OTU4LCA2Njk2MiwgCisgICAgNjY5NjYsIDY2OTcwLCA2Njk3NCwgNjY5NzgsIDY2OTgyLCA2Njk4NiwgNjY5OTAsIDY2OTk0LCA2Njk5OCwgNjcwMDIsIAorICAgIDY3MDA2LCA2NzAxMCwgNjcwMTQsIDY3MDE4LCA2NzAyMiwgNjcwMjYsIDY3MDMwLCA2NzAzNCwgNjcwMzgsIDY3MDQyLCAKKyAgICA2NzA0NiwgNjcwNTAsIDY3MDU0LCA2NzA1OCwgNjcwNjIsIDY3MDY2LCA2NzA3MCwgNjcwNzQsIDY3MDc4LCA2NzA4MiwgCisgICAgNjcwODYsIDY3MDkwLCA2NzA5NCwgNjcwOTgsIDY3MTAyLCA2NzEwNiwgNjcxMTAsIDY3MTE0LCA2NzExOCwgNjcxMjIsIAorICAgIDY3MTI2LCA2NzEzMCwgNjcxMzQsIDY3MTM4LCA2NzE0MiwgNjcxNDYsIDY3MTUwLCA2NzE1NCwgNjcxNTgsIDY3MTYyLCAKKyAgICA2NzE2NiwgNjcxNzAsIDY3MTc0LCA2NzE3OCwgNjcxODIsIDY3MTg2LCA2NzE5MCwgNjcxOTQsIDY3MTk4LCA2NzIwMiwgCisgICAgNjcyMDYsIDY3MjEwLCA2NzIxNCwgNjcyMTgsIDY3MjIyLCA2NzIyNiwgNjcyMzAsIDY3MjM0LCA2NzIzNywgNjcyNDEsIAorICAgIDY3MjQ1LCA2NzI0OSwgNjcyNTMsIDY3MjU3LCA2NzI2MSwgNjcyNjUsIDY3MjY5LCA2NzI3MywgNjcyNzcsIDY3MjgxLCAKKyAgICA2NzI4NSwgNjcyODksIDY3MjkzLCA2NzI5NywgNjczMDEsIDY3MzA1LCA2NzMwOSwgNjczMTMsIDY3MzE3LCA2NzMyMSwgCisgICAgNjczMjUsIDY3MzI5LCA2NzMzMywgNjczMzcsIDY3MzQxLCA2NzM0NSwgNjczNDksIDY3MzUzLCA2NzM1NywgNjczNjEsIAorICAgIDY3MzY1LCA2NzM2OSwgNjczNzMsIDY3Mzc3LCA2NzM4MSwgNjczODUsIDY3Mzg5LCA2NzM5MywgNjczOTcsIDY3NDAxLCAKKyAgICA2NzQwNSwgNjc0MDksIDY3NDEzLCA2NzQxNywgNjc0MjEsIDY3NDI1LCA2NzQyOSwgNjc0MzMsIDY3NDM3LCA2NzQ0MSwgCisgICAgNjc0NDUsIDY3NDQ5LCA2NzQ1MywgNjc0NTcsIDY3NDYxLCA2NzQ2NSwgNjc0NjksIDY3NDczLCA2NzQ3NywgNjc0ODEsIAorICAgIDY3NDg1LCA2NzQ4OSwgNjc0OTMsIDY3NDk3LCA2NzUwMSwgNjc1MDUsIDY3NTA5LCA2NzUxMywgNjc1MTcsIDY3NTIxLCAKKyAgICA2NzUyNSwgNjc1MjksIDY3NTMzLCA2NzUzNywgNjc1NDEsIDY3NTQ1LCA2NzU0OSwgNjc1NTMsIDY3NTU3LCA2NzU2MSwgCisgICAgNjc1NjUsIDY3NTY5LCA2NzU3MywgNjc1NzcsIDY3NTgxLCA2NzU4NSwgNjc1ODksIDY3NTkzLCA2NzU5NywgNjc2MDEsIAorICAgIDY3NjA1LCA2NzYwOSwgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCA2NzYzMywgNjc2MzcsIDY3NjQxLCAKKyAgICA2NzY0NSwgNjc2NDksIDY3NjUzLCA2NzY1NywgNjc2NjEsIDY3NjY1LCA2NzY2OSwgNjc2NzMsIDY3Njc3LCA2NzY4MSwgCisgICAgNjc2ODUsIDY3Njg5LCA2NzY5MywgNjc2OTcsIDY3NzAwLCA2NzcwNCwgNjc3MDgsIDY3NzEyLCA2NzcxNiwgNjc3MjAsIAorICAgIDY3NzI0LCA2NzcyOCwgNjc3MzIsIDY3NzM2LCA2Nzc0MCwgNjc3NDQsIDY3NzQ4LCA2Nzc1MiwgNjc3NTYsIDY3NzYwLCAKKyAgICA2Nzc2NCwgNjc3NjgsIDY3NzcyLCA2Nzc3NiwgNjc3ODAsIDY3Nzg0LCA2Nzc4OCwgNjc3OTIsIDY3Nzk2LCA2NzgwMCwgCisgICAgNjc4MDQsIDY3ODA4LCA2NzgxMiwgNjc4MTYsIDY3ODIwLCA2NzgyNCwgNjc4MjgsIDY3ODMyLCA2NzgzNiwgNjc4NDAsIAorICAgIDY3ODQ0LCA2Nzg0OCwgNjc4NTIsIDY3ODU2LCA2Nzg2MCwgNjc4NjQsIDY3ODY4LCA2Nzg3MiwgNjc4NzYsIDY3ODgwLCAKKyAgICA2Nzg4NCwgNjc4ODgsIDY3ODkyLCA2Nzg5NiwgNjc5MDAsIDY3OTA0LCA2NzkwOCwgNjc5MTIsIDY3OTE2LCA2NzkyMCwgCisgICAgNjc5MjQsIDY3OTI4LCA2NzkzMiwgNjc5MzYsIDY3OTQwLCA2Nzk0NCwgNjc5NDgsIDY3OTUyLCA2Nzk1NiwgNjc5NjAsIAorICAgIDY3OTY0LCA2Nzk2OCwgNjc5NzIsIDY3OTc2LCA2Nzk4MCwgNjc5ODQsIDY3OTg4LCA2Nzk5MiwgNjc5OTYsIDY4MDAwLCAKKyAgICA2ODAwNCwgNjgwMDgsIDY4MDEyLCA2ODAxNiwgNjgwMjAsIDY4MDI0LCA2ODAyOCwgNjgwMzIsIDY4MDM2LCA2ODA0MCwgCisgICAgNjgwNDQsIDY4MDQ4LCA2ODA1MiwgNjgwNTYsIDY4MDYwLCA2ODA2NCwgNjgwNjgsIDY4MDcyLCA2ODA3NiwgNjgwODAsIAorICAgIDY4MDg0LCA2ODA4OCwgNjgwOTIsIDY4MDk2LCA2ODEwMCwgNjgxMDQsIDY4MTA4LCA2ODExMiwgNjgxMTYsIDY4MTIwLCAKKyAgICA2ODEyNCwgNjgxMjgsIDY4MTMyLCA2ODEzNiwgNjgxNDAsIDY4MTQ0LCA2ODE0OCwgNjgxNTIsIDY4MTU2LCA2ODE2MCwgCisgICAgNjgxNjQsIDY4MTY4LCA2ODE3MiwgNjgxNzYsIDY4MTgwLCA2ODE4NCwgNjgxODgsIDY4MTkyLCA2ODE5NiwgNjgyMDAsIAorICAgIDY4MjA0LCA2ODIwOCwgNjgyMTIsIDY4MjE2LCA2ODIyMCwgNjgyMjQsIDY4MjI4LCA2ODIzMiwgNjgyMzYsIDY4MjQwLCAKKyAgICA2ODI0NCwgNjgyNDgsIDY4MjUyLCA2ODI1NiwgNjgyNjAsIDY4MjY0LCA2ODI2OCwgNjgyNzIsIDY4Mjc2LCA2ODI4MCwgCisgICAgNjgyODQsIDY4Mjg4LCA2ODI5MiwgNjgyOTYsIDY4MzAwLCA2ODMwNCwgNjgzMDgsIDY4MzEyLCA2ODMxNiwgNjgzMjAsIAorICAgIDY4MzI0LCA2ODMyOCwgNjgzMzIsIDY4MzM2LCA2ODM0MCwgNjgzNDQsIDY4MzQ4LCA2ODM1MiwgNjgzNTYsIDY4MzYwLCAKKyAgICA2ODM2NCwgNjgzNjgsIDY4MzcyLCA2ODM3NiwgNjgzODAsIDY4Mzg0LCA2ODM4OCwgNjgzOTIsIDY4Mzk2LCA2ODQwMCwgCisgICAgNjg0MDQsIDY4NDA4LCA2ODQxMiwgNjg0MTYsIDY4NDIwLCA2ODQyNCwgNjg0MjgsIDY4NDMyLCA2ODQzNiwgNjg0NDAsIAorICAgIDY4NDQ0LCA2ODQ0OCwgNjg0NTIsIDY4NDU2LCA2ODQ2MCwgNjg0NjQsIDY4NDY4LCA2ODQ3MiwgNjg0NzYsIDY4NDgwLCAKKyAgICA2ODQ4NCwgNjg0ODgsIDY4NDkyLCA2ODQ5NiwgNjg1MDAsIDY4NTA0LCA2ODUwOCwgNjg1MTIsIDY4NTE2LCA2ODUyMCwgCisgICAgNjg1MjQsIDY4NTI4LCA2ODUzMiwgNjg1MzYsIDY4NTQwLCA2ODU0NCwgNjg1NDgsIDY4NTUyLCA2ODU1NSwgNjg1NTksIAorICAgIDY4NTYzLCA2ODU2NywgNjg1NzEsIDY4NTc1LCA2ODU3OSwgNjg1ODMsIDY4NTg3LCA2ODU5MSwgNjg1OTUsIDY4NTk5LCAKKyAgICA2ODYwMywgNjg2MDcsIDY4NjExLCA2ODYxNSwgNjg2MTksIDY4NjIzLCA2ODYyNywgNjg2MzEsIDY4NjM1LCA2ODYzOSwgCisgICAgNjg2NDMsIDY4NjQ3LCA2ODY1MSwgNjg2NTUsIDY4NjU5LCA2ODY2MywgNjg2NjcsIDY4NjcxLCA2ODY3NSwgNjg2NzksIAorICAgIDY4NjgzLCA2ODY4NywgNjg2OTEsIDY4Njk1LCA2ODY5OSwgNjg3MDMsIDY4NzA3LCA2ODcxMSwgNjg3MTUsIDY4NzE5LCAKKyAgICA2ODcyMywgNjg3MjcsIDY4NzMxLCA2ODczNSwgNjg3MzksIDY4NzQzLCA2ODc0NywgNjg3NTEsIDY4NzU1LCA2ODc1OSwgCisgICAgNjg3NjMsIDY4NzY3LCA2ODc3MSwgNjg3NzUsIDY4Nzc5LCA2ODc4MywgNjg3ODcsIDY4NzkxLCA2ODc5NSwgNjg3OTksIAorICAgIDY4ODAzLCA2ODgwNywgNjg4MTEsIDY4ODE1LCA2ODgxOSwgNjg4MjMsIDY4ODI3LCA2ODgzMSwgNjg4MzUsIDY4ODM5LCAKKyAgICA2ODg0MywgNjg4NDcsIDY4ODUxLCA2ODg1NSwgNjg4NTksIDY4ODYzLCA2ODg2NywgNjg4NzEsIDY4ODc1LCA2ODg3OSwgCisgICAgNjg4ODMsIDY4ODg3LCA2ODg5MSwgNjg4OTUsIDY4ODk5LCA2ODkwMywgNjg5MDcsIDY4OTExLCA2ODkxNSwgNjg5MTksIAorICAgIDY4OTIzLCA2ODkyNywgNjg5MzEsIDY4OTM1LCA2ODkzOSwgNjg5NDMsIDY4OTQ3LCA2ODk1MSwgNjg5NTUsIDY4OTU5LCAKKyAgICA2ODk2MywgNjg5NjcsIDY4OTcxLCA2ODk3NSwgNjg5NzksIDY4OTgzLCA2ODk4NywgNjg5OTEsIDY4OTk1LCA2ODk5OSwgCisgICAgNjkwMDMsIDY5MDA3LCA2OTAxMCwgNjkwMTQsIDY5MDE4LCA2OTAyMiwgNjkwMjYsIDY5MDMwLCA2OTAzNCwgNjkwMzgsIAorICAgIDY5MDQyLCA2OTA0NiwgNjkwNTAsIDY5MDU0LCA2OTA1OCwgNjkwNjIsIDY5MDY2LCA2OTA3MCwgNjkwNzQsIDY5MDc4LCAKKyAgICA2OTA4MiwgNjkwODYsIDY5MDkwLCA2OTA5NCwgNjkwOTgsIDY5MTAyLCA2OTEwNiwgNjkxMTAsIDY5MTE0LCA2OTExOCwgCisgICAgNjkxMjIsIDY5MTI2LCA2OTEzMCwgNjkxMzQsIDY5MTM4LCA2OTE0MiwgNjkxNDYsIDY5MTUwLCA2OTE1NCwgNjkxNTgsIAorICAgIDY5MTYyLCA2OTE2NiwgNjkxNzAsIDY5MTc0LCA2OTE3OCwgNjkxODIsIDY5MTg2LCA2OTE5MCwgNjkxOTQsIDY5MTk4LCAKKyAgICA2OTIwMiwgNjkyMDYsIDY5MjEwLCA2OTIxNCwgNjkyMTgsIDY5MjIyLCA2OTIyNiwgNjkyMzAsIDY5MjM0LCA2OTIzOCwgCisgICAgNjkyNDIsIDY5MjQ2LCA2OTI1MCwgNjkyNTQsIDY5MjU4LCA2OTI2MiwgNjkyNjYsIDY5MjcwLCA2OTI3NCwgNjkyNzgsIAorICAgIDY5MjgyLCA2OTI4NiwgNjkyOTAsIDY5Mjk0LCA2OTI5OCwgNjkzMDIsIDY5MzA2LCA2OTMxMCwgNjkzMTQsIDY5MzE4LCAKKyAgICA2OTMyMiwgNjkzMjYsIDY5MzMwLCA2OTMzNCwgNjkzMzgsIDY5MzQyLCA2OTM0NiwgNjkzNTAsIDY5MzU0LCA2OTM1OCwgCisgICAgNjkzNjIsIDY5MzY2LCA2OTM3MCwgNjkzNzQsIDY5Mzc4LCA2OTM4MiwgNjkzODYsIDY5MzkwLCA2OTM5NCwgNjkzOTgsIAorICAgIDY5NDAyLCA2OTQwNiwgNjk0MTAsIDY5NDE0LCA2OTQxOCwgNjk0MjIsIDY5NDI2LCA2OTQzMCwgNjk0MzQsIDY5NDM4LCAKKyAgICA2OTQ0MiwgNjk0NDYsIDY5NDUwLCA2OTQ1NCwgNjk0NTgsIDY5NDYyLCA2OTQ2NiwgNjk0NzAsIDY5NDc0LCA2OTQ3OCwgCisgICAgNjk0ODIsIDY5NDg2LCA2OTQ5MCwgNjk0OTQsIDY5NDk4LCA2OTUwMiwgNjk1MDYsIDY5NTEwLCA2OTUxNCwgNjk1MTgsIAorICAgIDY5NTIyLCA2OTUyNiwgNjk1MzAsIDY5NTM0LCA2OTUzOCwgNjk1NDIsIDY5NTQ2LCA2OTU1MCwgNjk1NTQsIDY5NTU4LCAKKyAgICA2OTU2MiwgNjk1NjYsIDY5NTcwLCA2OTU3NCwgNjk1NzgsIDY5NTgyLCA2OTU4NiwgNjk1OTAsIDY5NTk0LCA2OTU5OCwgCisgICAgNjk2MDIsIDY5NjA2LCA2OTYxMCwgNjk2MTMsIDY5NjE3LCA2OTYyMSwgNjk2MjUsIDY5NjI5LCA2OTYzMywgNjk2MzcsIAorICAgIDY5NjQxLCA2OTY0NSwgNjk2NDksIDY5NjUzLCA2OTY1NywgNjk2NjEsIDY5NjY1LCA2OTY2OSwgNjk2NzMsIDY5Njc3LCAKKyAgICA2OTY4MSwgNjk2ODUsIDY5Njg5LCA2OTY5MywgNjk2OTcsIDY5NzAxLCA2OTcwNSwgNjk3MDksIDY5NzEzLCA2OTcxNywgCisgICAgNjk3MjEsIDY5NzI1LCA2OTcyOSwgNjk3MzMsIDY5NzM3LCA2OTc0MSwgNjk3NDUsIDY5NzQ5LCA2OTc1MywgNjk3NTcsIAorICAgIDY5NzYxLCA2OTc2NSwgNjk3NjksIDY5NzczLCA2OTc3NywgNjk3ODEsIDY5Nzg1LCA2OTc4OSwgNjk3OTMsIDY5Nzk3LCAKKyAgICA2OTgwMSwgNjk4MDUsIDY5ODA5LCA2OTgxMywgNjk4MTcsIDY5ODIxLCA2OTgyNSwgNjk4MjksIDY5ODMzLCA2OTgzNywgCisgICAgNjk4NDEsIDY5ODQ1LCA2OTg0OSwgNjk4NTMsIDY5ODU3LCA2OTg2MSwgNjk4NjUsIDY5ODY5LCA2OTg3MywgNjk4NzcsIAorICAgIDY5ODgxLCA2OTg4NSwgNjk4ODksIDY5ODkzLCA2OTg5NywgNjk5MDEsIDY5OTA1LCA2OTkwOSwgNjk5MTMsIDY5OTE3LCAKKyAgICA2OTkyMSwgNjk5MjUsIDY5OTI5LCA2OTkzMywgNjk5MzcsIDY5OTQxLCA2OTk0NSwgNjk5NDksIDY5OTUzLCA2OTk1NywgCisgICAgNjk5NjEsIDY5OTY1LCA2OTk2OSwgNjk5NzMsIDY5OTc3LCA2OTk4MSwgNjk5ODUsIDY5OTg5LCA2OTk5MywgNjk5OTcsIAorICAgIDcwMDAxLCA3MDAwNSwgNzAwMDksIDcwMDEzLCA3MDAxNywgNzAwMjEsIDcwMDI1LCA3MDAyOSwgNzAwMzMsIDcwMDM3LCAKKyAgICA3MDA0MSwgNzAwNDUsIDcwMDQ5LCA3MDA1MywgNzAwNTcsIDcwMDYxLCA3MDA2NSwgNzAwNjksIDcwMDczLCA3MDA3NywgCisgICAgNzAwODEsIDcwMDg1LCA3MDA4OSwgNzAwOTMsIDcwMDk3LCA3MDEwMSwgNzAxMDUsIDcwMTA5LCA3MDExMywgNzAxMTcsIAorICAgIDcwMTIxLCA3MDEyNSwgNzAxMjksIDcwMTMzLCA3MDEzNywgNzAxNDEsIDcwMTQ1LCA3MDE0OSwgNzAxNTMsIDcwMTU3LCAKKyAgICA3MDE2MSwgNzAxNjUsIDcwMTY5LCA3MDE3MywgNzAxNzcsIDcwMTgxLCA3MDE4NSwgNzAxODksIDcwMTkzLCA3MDE5NywgCisgICAgNzAyMDEsIDcwMjA1LCA3MDIwOSwgNzAyMTMsIDcwMjE3LCA3MDIyMSwgNzAyMjUsIDcwMjI5LCA3MDIzMywgNzAyMzcsIAorICAgIDcwMjQxLCA3MDI0NSwgNzAyNDksIDcwMjUzLCA3MDI1NywgNzAyNjEsIDcwMjY1LCA3MDI2OSwgNzAyNzMsIDcwMjc3LCAKKyAgICA3MDI4MSwgNzAyODUsIDcwMjg5LCA3MDI5MywgNzAyOTcsIDcwMzAxLCA3MDMwNSwgNzAzMDksIDcwMzEzLCA3MDMxNywgCisgICAgNzAzMjEsIDcwMzI1LCA3MDMyOSwgNzAzMzMsIDcwMzM3LCA3MDM0MSwgNzAzNDUsIDcwMzQ5LCA3MDM1MywgNzAzNTcsIAorICAgIDcwMzYxLCA3MDM2NSwgNzAzNjksIDcwMzczLCA3MDM3NywgNzAzODEsIDcwMzg1LCA3MDM4OSwgNzAzOTMsIDcwMzk3LCAKKyAgICA3MDQwMSwgNzA0MDUsIDcwNDA5LCA3MDQxMywgNzA0MTcsIDcwNDIxLCA3MDQyNSwgNzA0MjksIDcwNDMzLCA3MDQzNywgCisgICAgNzA0NDEsIDcwNDQ1LCA3MDQ0OSwgNzA0NTMsIDcwNDU3LCA3MDQ2MSwgNzA0NjUsIDcwNDY5LCA3MDQ3MywgNzA0NzcsIAorICAgIDcwNDgxLCA3MDQ4NSwgNzA0ODksIDcwNDkzLCA3MDQ5NywgNzA1MDEsIDcwNTA1LCA3MDUwOSwgNzA1MTMsIDcwNTE3LCAKKyAgICA3MDUyMSwgNzA1MjUsIDcwNTI5LCA3MDUzMywgNzA1MzcsIDcwNTQxLCA3MDU0NSwgNzA1NDksIDcwNTUzLCA3MDU1NywgCisgICAgNzA1NjEsIDcwNTY1LCA3MDU2OSwgNzA1NzMsIDcwNTc3LCA3MDU4MSwgNzA1ODUsIDcwNTg5LCA3MDU5MywgNzA1OTcsIAorICAgIDcwNjAxLCA3MDYwNSwgNzA2MDksIDcwNjEzLCA3MDYxNywgNzA2MjEsIDcwNjI1LCA3MDYyOSwgNzA2MzMsIDcwNjM3LCAKKyAgICA3MDY0MSwgNzA2NDUsIDcwNjQ5LCA3MDY1MywgNzA2NTcsIDcwNjYxLCA3MDY2NSwgNzA2NjksIDcwNjczLCA3MDY3NywgCisgICAgNzA2ODEsIDcwNjg1LCA3MDY4OSwgNzA2OTMsIDcwNjk3LCA3MDcwMSwgNzA3MDUsIDcwNzA5LCA3MDcxMywgNzA3MTcsIAorICAgIDcwNzIxLCA3MDcyNSwgNzA3MjksIDcwNzMzLCA3MDczNywgNzA3NDEsIDcwNzQ1LCA3MDc0OSwgNzA3NTMsIDcwNzU3LCAKKyAgICA3MDc2MSwgNzA3NjUsIDcwNzY5LCA3MDc3MywgNzA3NzcsIDcwNzgxLCA3MDc4NSwgNzA3ODksIDcwNzkzLCA3MDc5NywgCisgICAgNzA4MDEsIDcwODA1LCA3MDgwOSwgNzA4MTMsIDcwODE3LCA3MDgyMSwgNzA4MjUsIDcwODI5LCA3MDgzMywgNzA4MzcsIAorICAgIDcwODQxLCA3MDg0NSwgNzA4NDksIDcwODUzLCA3MDg1NywgNzA4NjEsIDcwODY1LCA3MDg2OSwgNzA4NzMsIDcwODc3LCAKKyAgICA3MDg4MSwgNzA4ODUsIDcwODg5LCA3MDg5MywgNzA4OTcsIDcwOTAxLCA3MDkwNSwgNzA5MDksIDcwOTEzLCA3MDkxNywgCisgICAgNzA5MjEsIDcwOTI1LCA3MDkyOSwgNzA5MzMsIDcwOTM3LCA3MDk0MSwgNzA5NDUsIDcwOTQ5LCA3MDk1MywgNzA5NTcsIAorICAgIDcwOTYxLCA3MDk2NSwgNzA5NjksIDcwOTczLCA3MDk3NywgNzA5ODEsIDcwOTg1LCA3MDk4OSwgNzA5OTMsIDcwOTk3LCAKKyAgICA3MTAwMSwgNzEwMDUsIDcxMDA5LCA3MTAxMywgNzEwMTcsIDcxMDIxLCA3MTAyNSwgNzEwMjksIDcxMDMzLCA3MTAzNywgCisgICAgNzEwNDEsIDcxMDQ1LCA3MTA0OSwgNzEwNTMsIDcxMDU3LCA3MTA2MSwgNzEwNjUsIDcxMDY5LCA3MTA3MywgNzEwNzcsIAorICAgIDcxMDgxLCA3MTA4NSwgNzEwODksIDcxMDkzLCA3MTA5NywgNzExMDEsIDcxMTA1LCA3MTEwOSwgNzExMTMsIDcxMTE3LCAKKyAgICA3MTEyMSwgNzExMjUsIDcxMTI5LCA3MTEzMywgNzExMzcsIDcxMTQxLCA3MTE0NSwgNzExNDksIDcxMTUzLCAwLCAwLCAwLCAKKyAgICA3MTE1NywgNzExNjEsIDcxMTY1LCA3MTE2OSwgNzExNzMsIDcxMTc3LCA3MTE4MSwgNzExODUsIDcxMTg5LCA3MTE5MywgCisgICAgNzExOTcsIDcxMjAxLCA3MTIwNSwgNzEyMDksIDcxMjEzLCA3MTIxNywgNzEyMjEsIDcxMjI1LCA3MTIyOSwgNzEyMzMsIAorICAgIDcxMjM3LCA3MTI0MSwgNzEyNDUsIDcxMjQ5LCA3MTI1MywgNzEyNTcsIDcxMjYxLCA3MTI2NSwgNzEyNjksIDcxMjczLCAKKyAgICA3MTI3NywgNzEyODEsIDcxMjg1LCA3MTI4OSwgNzEyOTMsIDcxMjk3LCA3MTMwMSwgNzEzMDUsIDcxMzA5LCA3MTMxMywgCisgICAgNzEzMTcsIDcxMzIxLCA3MTMyNSwgNzEzMjksIDcxMzMzLCA3MTMzNywgNzEzNDEsIDcxMzQ1LCA3MTM0OSwgNzEzNTMsIAorICAgIDcxMzU3LCA3MTM2MSwgNzEzNjUsIDcxMzY5LCA3MTM3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzEzNzcsIAorICAgIDcxMzgyLCA3MTM4NiwgNzEzOTEsIDcxMzk2LCA3MTQwMSwgNzE0MDYsIDcxNDExLCA3MTQxNSwgNzE0MjAsIDcxNDI1LCAKKyAgICA3MTQzMCwgNzE0MzUsIDcxNDQwLCA3MTQ0NSwgNzE0NTAsIDcxNDU0LCA3MTQ1OSwgNzE0NjQsIDcxNDY5LCA3MTQ3NCwgCisgICAgNzE0NzksIDcxNDg0LCA3MTQ4OCwgNzE0OTMsIDcxNDk4LCA3MTUwMywgNzE1MDgsIDcxNTEzLCA3MTUxNywgNzE1MjIsIAorICAgIDcxNTI2LCA3MTUzMSwgNzE1MzUsIDcxNTQwLCA3MTU0NCwgNzE1NDgsIDcxNTUyLCA3MTU1NywgNzE1NjIsIDcxNTY3LCAKKyAgICA3MTU3NSwgNzE1ODMsIDcxNTkxLCA3MTU5OSwgNzE2MDcsIDcxNjE1LCA3MTYyMSwgNzE2MjksIDcxNjMzLCA3MTYzNywgCisgICAgNzE2NDEsIDcxNjQ1LCA3MTY0OSwgNzE2NTMsIDcxNjU3LCA3MTY2MSwgNzE2NjUsIDcxNjY5LCA3MTY3MywgNzE2NzcsIAorICAgIDcxNjgxLCA3MTY4NSwgNzE2ODksIDcxNjkzLCA3MTY5NywgNzE3MDEsIDcxNzA1LCA3MTcwOSwgNzE3MTMsIDcxNzE3LCAKKyAgICA3MTcyMSwgNzE3MjUsIDcxNzI5LCA3MTczMywgNzE3MzcsIDcxNzQxLCA3MTc0NSwgNzE3NDksIDcxNzUzLCA3MTc1NywgCisgICAgNzE3NjEsIDcxNzY1LCA3MTc2OSwgNzE3NzMsIDcxNzc2LCA3MTc4MCwgNzE3ODQsIDcxNzg4LCA3MTc5MiwgNzE3OTYsIAorICAgIDcxODAwLCA3MTgwNCwgNzE4MDgsIDcxODEyLCA3MTgxNiwgNzE4MjAsIDcxODI0LCA3MTgyOCwgNzE4MzIsIDcxODM2LCAKKyAgICA3MTg0MCwgNzE4NDQsIDcxODQ4LCA3MTg1MiwgNzE4NTYsIDcxODYwLCA3MTg2NCwgNzE4NjgsIDcxODcyLCA3MTg3NiwgCisgICAgNzE4ODAsIDcxODg0LCA3MTg4OCwgNzE4OTIsIDcxODk2LCA3MTkwMCwgNzE5MDQsIDcxOTA4LCA3MTkxMiwgNzE5MTYsIAorICAgIDcxOTIwLCA3MTkyMywgNzE5MjcsIDcxOTMxLCA3MTkzNCwgNzE5MzgsIDcxOTQyLCA3MTk0NiwgNzE5NDksIDcxOTUzLCAKKyAgICA3MTk1NywgNzE5NjEsIDcxOTY1LCA3MTk2OSwgNzE5NzMsIDcxOTc3LCA3MTk4MSwgNzE5ODUsIDcxOTg5LCA3MTk5MywgCisgICAgNzE5OTcsIDcyMDAxLCA3MjAwNSwgNzIwMDksIDcyMDEzLCA3MjAxNywgNzIwMjEsIDcyMDI1LCA3MjAyOSwgNzIwMzMsIAorICAgIDcyMDM3LCA3MjA0MSwgNzIwNDUsIDcyMDQ4LCA3MjA1MSwgNzIwNTUsIDcyMDU5LCA3MjA2MywgNzIwNjYsIDcyMDcwLCAKKyAgICA3MjA3NCwgNzIwNzgsIDcyMDgyLCA3MjA4NiwgNzIwOTAsIDcyMDk0LCA3MjA5OCwgNzIxMDIsIDcyMTA2LCA3MjExMCwgCisgICAgNzIxMTQsIDcyMTE4LCA3MjEyMiwgNzIxMjYsIDcyMTMwLCA3MjEzNCwgNzIxMzgsIDcyMTQyLCA3MjE0NiwgNzIxNTAsIAorICAgIDcyMTU0LCA3MjE1OCwgNzIxNjIsIDcyMTY2LCA3MjE3MCwgNzIxNzQsIDcyMTc4LCA3MjE4MiwgNzIxODYsIDcyMTkwLCAKKyAgICA3MjE5NCwgNzIxOTgsIDcyMjAyLCA3MjIwNiwgNzIyMTAsIDcyMjE0LCA3MjIxOCwgNzIyMjEsIDcyMjI1LCA3MjIyOSwgCisgICAgNzIyMzMsIDcyMjM3LCA3MjI0MSwgNzIyNDUsIDcyMjQ5LCA3MjI1MywgNzIyNTcsIDcyMjYxLCA3MjI2NSwgNzIyNjksIAorICAgIDcyMjczLCA3MjI3NywgNzIyODEsIDcyMjg1LCA3MjI4OSwgNzIyOTMsIDcyMjk3LCA3MjMwMSwgNzIzMDUsIDcyMzA5LCAKKyAgICA3MjMxMywgNzIzMTcsIDcyMzIxLCA3MjMyNSwgNzIzMjksIDcyMzMzLCA3MjMzNywgNzIzNDEsIDcyMzQ1LCA3MjM0OSwgCisgICAgNzIzNTMsIDcyMzU3LCA3MjM2MSwgNzIzNjUsIDcyMzY4LCA3MjM3MiwgNzIzNzYsIDcyMzgwLCA3MjM4NCwgNzIzODgsIAorICAgIDcyMzkyLCA3MjM5NiwgNzI0MDAsIDcyNDA0LCA3MjQwOCwgNzI0MTIsIDcyNDE2LCA3MjQyMCwgNzI0MjQsIDcyNDI4LCAKKyAgICA3MjQzMiwgNzI0MzUsIDcyNDM5LCA3MjQ0MywgNzI0NDcsIDcyNDUxLCA3MjQ1NSwgNzI0NTksIDcyNDYzLCA3MjQ2NywgCisgICAgNzI0NzEsIDcyNDc1LCA3MjQ3OSwgNzI0ODMsIDcyNDg3LCA3MjQ5MSwgNzI0OTUsIDcyNDk5LCA3MjUwMywgNzI1MDcsIAorICAgIDcyNTExLCA3MjUxNSwgNzI1MTksIDcyNTIyLCA3MjUyNiwgNzI1MzAsIDcyNTM0LCA3MjUzOCwgNzI1NDIsIDcyNTQ2LCAKKyAgICA3MjU1MCwgNzI1NTQsIDcyNTU4LCA3MjU2MiwgNzI1NjYsIDcyNTcwLCA3MjU3NCwgNzI1NzgsIDcyNTgyLCA3MjU4NiwgCisgICAgNzI1OTAsIDcyNTk0LCA3MjU5OCwgNzI2MDIsIDcyNjA2LCA3MjYxMCwgNzI2MTQsIDcyNjE4LCA3MjYyMiwgNzI2MjYsIAorICAgIDcyNjMwLCA3MjYzNCwgNzI2MzgsIDcyNjQyLCA3MjY0NiwgNzI2NTAsIDcyNjU0LCA3MjY1OCwgNzI2NjIsIDcyNjY2LCAKKyAgICA3MjY3MCwgNzI2NzQsIDcyNjc4LCA3MjY4MiwgNzI2ODYsIDcyNjkwLCA3MjY5NCwgNzI2OTcsIDcyNzAyLCA3MjcwNiwgCisgICAgNzI3MTIsIDcyNzE3LCA3MjcyMywgNzI3MjcsIDcyNzMxLCA3MjczNSwgNzI3MzksIDcyNzQzLCA3Mjc0NywgNzI3NTEsIAorICAgIDcyNzU1LCA3Mjc1OSwgNzI3NjMsIDcyNzY3LCA3Mjc3MSwgNzI3NzUsIDcyNzc5LCA3Mjc4MiwgNzI3ODUsIDcyNzg4LCAKKyAgICA3Mjc5MSwgNzI3OTQsIDcyNzk3LCA3MjgwMSwgNzI4MDQsIDcyODA4LCA3MjgxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI4MTksIDcyODI0LCA3MjgyOSwgNzI4MzQsIDcyODM5LCAKKyAgICA3Mjg0NiwgNzI4NTMsIDcyODU4LCA3Mjg2MywgNzI4NjgsIDcyODczLCA3Mjg4MCwgNzI4ODcsIDcyODk0LCA3MjkwMSwgCisgICAgNzI5MDgsIDcyOTE1LCA3MjkyNSwgNzI5MzUsIDcyOTQyLCA3Mjk0OSwgNzI5NTYsIDcyOTYzLCA3Mjk2OSwgNzI5NzUsIAorICAgIDcyOTg0LCA3Mjk5MywgNzMwMDAsIDczMDA3LCA3MzAxOCwgNzMwMjksIDczMDM0LCA3MzAzOSwgNzMwNDYsIDczMDUzLCAKKyAgICA3MzA2MCwgNzMwNjcsIDczMDc0LCA3MzA4MSwgNzMwODgsIDczMDk1LCA3MzEwMSwgNzMxMDcsIDczMTEzLCA3MzExOSwgCisgICAgNzMxMjYsIDczMTMzLCA3MzEzOCwgNzMxNDIsIDczMTQ5LCA3MzE1NiwgNzMxNjMsIDczMTY3LCA3MzE3NCwgNzMxNzgsIAorICAgIDczMTgzLCA3MzE4NywgNzMxOTMsIDczMTk4LCA3MzIwNCwgNzMyMDksIDczMjEzLCA3MzIxNywgNzMyMjAsIDczMjIzLCAKKyAgICA3MzIyOCwgNzMyMzMsIDczMjM4LCA3MzI0MywgNzMyNDgsIDczMjUzLCA3MzI1OCwgNzMyNjMsIDczMjY4LCA3MzI3MywgCisgICAgNzMyODEsIDczMjg5LCA3MzI5NCwgNzMyOTksIDczMzA0LCA3MzMwOSwgNzMzMTQsIDczMzE5LCA3MzMyNCwgNzMzMjksIAorICAgIDczMzM0LCA3MzMzOSwgNzMzNDQsIDczMzQ5LCA3MzM1NCwgNzMzNTksIDczMzY1LCA3MzM3MSwgNzMzNzcsIDczMzgzLCAKKyAgICA3MzM4OCwgNzMzOTQsIDczMzk3LCA3MzQwMCwgNzM0MDMsIDczNDA3LCA3MzQxMSwgNzM0MTUsIDczNDE5LCA3MzQyMiwgCisgICAgNzM0MjYsIDczNDI5LCA3MzQzMywgNzM0MzYsIDczNDQwLCA3MzQ0NCwgNzM0NDgsIDczNDUyLCA3MzQ1NiwgNzM0NjAsIAorICAgIDczNDY0LCA3MzQ2OCwgNzM0NzIsIDczNDc2LCA3MzQ4MCwgNzM0ODQsIDczNDg4LCA3MzQ5MiwgNzM0OTYsIDczNTAwLCAKKyAgICA3MzUwNCwgNzM1MDgsIDczNTEyLCA3MzUxNiwgNzM1MjAsIDczNTI0LCA3MzUyNywgNzM1MzEsIDczNTM1LCA3MzUzOSwgCisgICAgNzM1NDMsIDczNTQ3LCA3MzU1MSwgNzM1NTUsIDczNTU5LCA3MzU2MywgNzM1NjcsIDczNTcxLCA3MzU3NSwgNzM1NzksIAorICAgIDczNTgzLCA3MzU4NywgNzM1OTEsIDczNTk1LCA3MzU5OSwgNzM2MDMsIDczNjA3LCA3MzYxMSwgNzM2MTUsIDczNjE5LCAKKyAgICA3MzYyMywgNzM2MjcsIDczNjMxLCA3MzYzNSwgNzM2MzksIDczNjQzLCA3MzY0NywgNzM2NTEsIDczNjU1LCA3MzY1OCwgCisgICAgNzM2NjIsIDczNjY2LCA3MzY3MCwgNzM2NzQsIDczNjc4LCA3MzY4MiwgNzM2ODYsIDczNjkwLCA3MzY5NCwgNzM2OTgsIAorICAgIDczNzAyLCA3MzcwNiwgNzM3MTEsIDczNzE2LCA3MzcxOSwgNzM3MjQsIDczNzI3LCA3MzczMCwgNzM3MzMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDczNzM3LCA3Mzc0NiwgNzM3NTUsIDczNzY0LCA3Mzc3MywgNzM3ODIsIDczNzkxLCA3MzgwMCwgCisgICAgNzM4MDksIDczODE3LCA3MzgyNCwgNzM4MzIsIDczODM5LCA3Mzg0NywgNzM4NTcsIDczODY2LCA3Mzg3NiwgNzM4ODUsIAorICAgIDczODk1LCA3MzkwMywgNzM5MTAsIDczOTE4LCA3MzkyNSwgNzM5MzMsIDczOTM4LCA3Mzk0MywgNzM5NDksIDczOTU4LCAKKyAgICA3Mzk2NCwgNzM5NzAsIDczOTc3LCA3Mzk4NiwgNzM5OTQsIDc0MDAyLCA3NDAxMCwgNzQwMTcsIDc0MDI0LCA3NDAzMSwgCisgICAgNzQwMzgsIDc0MDQzLCA3NDA0OCwgNzQwNTMsIDc0MDU4LCA3NDA2MywgNzQwNjgsIDc0MDczLCA3NDA3OCwgNzQwODYsIAorICAgIDc0MDk0LCA3NDEwMCwgNzQxMDUsIDc0MTEwLCA3NDExNSwgNzQxMjAsIDc0MTI1LCA3NDEzMCwgNzQxMzUsIDc0MTQwLCAKKyAgICA3NDE0NSwgNzQxNTQsIDc0MTYzLCA3NDE2OCwgNzQxNzMsIDc0MTgzLCA3NDE5MywgNzQyMDAsIDc0MjA3LCA3NDIxNiwgCisgICAgNzQyMjUsIDc0MjM3LCA3NDI0OSwgNzQyNTUsIDc0MjYxLCA3NDI2OSwgNzQyNzcsIDc0Mjg3LCA3NDI5NywgNzQzMDQsIAorICAgIDc0MzExLCA3NDMxNiwgNzQzMjEsIDc0MzMzLCA3NDM0NSwgNzQzNTMsIDc0MzYxLCA3NDM3MSwgNzQzODEsIDc0MzkzLCAKKyAgICA3NDQwNSwgNzQ0MTQsIDc0NDIzLCA3NDQzMCwgNzQ0MzcsIDc0NDQ0LCA3NDQ1MSwgNzQ0NjAsIDc0NDY5LCA3NDQ3NCwgCisgICAgNzQ0NzksIDc0NDg2LCA3NDQ5MywgNzQ1MDAsIDc0NTA3LCA3NDUxOSwgNzQ1MzEsIDc0NTM2LCA3NDU0MSwgNzQ1NDYsIAorICAgIDc0NTUxLCA3NDU1NiwgNzQ1NjEsIDc0NTY2LCA3NDU3MSwgNzQ1NzUsIDc0NTgwLCA3NDU4NSwgNzQ1OTAsIDc0NTk1LCAKKyAgICA3NDYwMCwgNzQ2MDYsIDc0NjExLCA3NDYxNiwgNzQ2MjMsIDc0NjMwLCA3NDYzNywgNzQ2NDQsIDc0NjUxLCA3NDY2MCwgCisgICAgNzQ2NjksIDc0Njc1LCA3NDY4MSwgNzQ2ODcsIDc0NjkzLCA3NDY5OSwgNzQ3MDUsIDc0NzEyLCA3NDcxOSwgNzQ3MjYsIAorICAgIDc0NzMwLCA3NDczNywgNzQ3NDIsIDc0NzQ3LCA3NDc1NCwgNzQ3NjcsIDc0NzczLCA3NDc4MSwgNzQ3ODksIDc0Nzk2LCAKKyAgICA3NDgwMywgNzQ4MTIsIDc0ODIxLCA3NDgyOCwgNzQ4MzUsIDc0ODQyLCA3NDg0OSwgNzQ4NTYsIDc0ODYzLCA3NDg3MCwgCisgICAgNzQ4NzcsIDc0ODg0LCA3NDg5MSwgNzQ5MDAsIDc0OTA5LCA3NDkxOCwgNzQ5MjcsIDc0OTM2LCA3NDk0NSwgNzQ5NTQsIAorICAgIDc0OTYzLCA3NDk3MiwgNzQ5ODEsIDc0OTg4LCA3NDk5NSwgNzUwMDEsIDAsIDAsIDc1MDA5LCA3NTAxNiwgNzUwMjMsIAorICAgIDc1MDMxLCA3NTAzNiwgNzUwNDEsIDc1MDQ2LCA3NTA1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAzNzMsIDMwMzc5LCAKLSAgICAzMDM4NSwgMzAzODksIDMwMzkzLCAzMDM5NywgMzA0MDEsIDMwNDA3LCAzMDQxMSwgMzA0MTcsIDMwNDIxLCAzMDQyNywgCi0gICAgMzA0MzMsIDMwNDQxLCAzMDQ0NywgMzA0NTUsIDMwNDU5LCAzMDQ2MywgMzA0NjcsIDMwNDczLCAzMDQ3NiwgMzA0ODIsIAotICAgIDMwNDg2LCAzMDQ5MiwgMzA0OTYsIDMwNTAwLCAzMDUwNiwgMzA1MTAsIDMwNTE2LCAzMDUyMCwgMzA1MjYsIDMwNTM0LCAKLSAgICAzMDU0MiwgMzA1NTAsIDMwNTU2LCAzMDU2MCwgMzA1NjYsIDMwNTcwLCAzMDU3NiwgMzA1NzksIDMwNTgyLCAzMDU4OCwgCi0gICAgMzA1OTIsIDMwNTk4LCAzMDYwMSwgMzA2MDQsIDMwNjA3LCAzMDYxMSwgMzA2MTUsIDMwNjIxLCAzMDYyNywgMzA2MzAsIAotICAgIDMwNjMzLCAzMDYzNywgMzA2NDIsIDMwNjQ3LCAzMDY1NCwgMzA2NTksIDMwNjY2LCAzMDY3MywgMzA2ODIsIDMwNjg5LCAKLSAgICAzMDY5OCwgMzA3MDMsIDMwNzEwLCAzMDcxNywgMzA3MjYsIDMwNzMxLCAzMDczOCwgMzA3NDMsIDMwNzQ5LCAzMDc1NSwgCi0gICAgMzA3NjEsIDMwNzY3LCAzMDc3MywgMzA3NzksIDAsIDAsIDAsIDAsIDMwNzg1LCAzMDc4OSwgMzA3OTIsIDMwNzk1LCAKLSAgICAzMDc5OCwgMzA4MDEsIDMwODA0LCAzMDgwNywgMzA4MTAsIDMwODEzLCAzMDgxNiwgMzA4MTksIDMwODIyLCAzMDgyNSwgCi0gICAgMzA4MzAsIDMwODM1LCAzMDg0MCwgMzA4NDMsIDMwODQ4LCAzMDg1MywgMzA4NTgsIDMwODYzLCAzMDg3MCwgMzA4NzUsIAotICAgIDMwODgwLCAzMDg4NSwgMzA4OTAsIDMwODk3LCAzMDkwMywgMzA5MDksIDMwOTE1LCAzMDkyMSwgMzA5MjcsIDMwOTM2LCAKLSAgICAzMDk0NSwgMzA5NTEsIDMwOTU3LCAzMDk2NSwgMzA5NzMsIDMwOTgyLCAzMDk5MSwgMzA5OTksIDMxMDA3LCAzMTAxNiwgCi0gICAgMzEwMjUsIDAsIDAsIDAsIDMxMDMzLCAzMTAzNywgMzEwNDEsIDMxMDQ1LCAzMTA0OCwgMzEwNTEsIDMxMDU0LCAzMTA1OCwgCi0gICAgMzEwNjEsIDMxMDY0LCAzMTA2OCwgMzEwNzEsIDMxMDc1LCAzMTA3OSwgMzEwODMsIDMxMDg3LCAzMTA5MSwgMzEwOTUsIAotICAgIDMxMDk5LCAzMTEwMywgMzExMDcsIDMxMTEwLCAzMTExMywgMzExMTcsIDMxMTIxLCAzMTEyNSwgMzExMjgsIDMxMTMxLCAKLSAgICAzMTEzNCwgMzExMzgsIDMxMTQyLCAzMTE0NSwgMzExNDksIDMxMTUyLCAzMTE1NywgMzExNjIsIDMxMTY3LCAzMTE3MiwgCi0gICAgMzExNzcsIDMxMTgyLCAzMTE4NywgMzExOTIsIDMxMTk3LCAzMTIwMSwgMzEyMDUsIDMxMjExLCAzMTIxOCwgMzEyMjIsIAotICAgIDMxMjI2LCAzMTIzMCwgMzEyMzMsIDMxMjM2LCAzMTIzOSwgMzEyNDIsIDMxMjQ1LCAzMTI0OCwgMzEyNTEsIDMxMjU0LCAKLSAgICAzMTI1NywgMzEyNjAsIDMxMjY0LCAzMTI2OCwgMzEyNzIsIDMxMjc3LCAzMTI4MSwgMzEyODUsIDMxMjkxLCAzMTI5NSwgCi0gICAgMzEzMDEsIDMxMzA3LCAzMTMxMiwgMzEzMTksIDMxMzIzLCAzMTMyOSwgMzEzMzMsIDMxMzM5LCAzMTM0NCwgMzEzNTEsIAotICAgIDMxMzU4LCAzMTM2MywgMzEzNzAsIDMxMzc1LCAzMTM4MCwgMzEzODQsIDMxMzkwLCAzMTM5NCwgMzE0MDAsIDMxNDA3LCAKLSAgICAzMTQxNCwgMzE0MTgsIDMxNDI0LCAzMTQzMCwgMzE0MzQsIDMxNDQwLCAzMTQ0NSwgMzE0NTAsIDMxNDU3LCAzMTQ2MiwgCi0gICAgMzE0NjcsIDMxNDcyLCAzMTQ3NywgMzE0ODEsIDMxNDg1LCAzMTQ5MCwgMzE0OTUsIDMxNTAyLCAzMTUwOCwgMzE1MTMsIAotICAgIDMxNTIwLCAzMTUyNSwgMzE1MzIsIDMxNTM3LCAzMTU0NiwgMzE1NTIsIDMxNTU4LCAzMTU2MiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzE1NjYsIDMxNTc1LCAzMTU4MiwgMzE1ODksIDMxNTk2LCAzMTU5OSwgMzE2MDMsIDMxNjA3LCAzMTYxMSwgCi0gICAgMzE2MTUsIDMxNjE5LCAzMTYyMywgMzE2MjcsIDMxNjMxLCAzMTYzNSwgMzE2MzksIDMxNjQzLCAzMTY0NywgMzE2NTAsIAotICAgIDMxNjUzLCAzMTY1NywgMzE2NjEsIDMxNjY1LCAzMTY2OSwgMzE2NzMsIDMxNjc3LCAzMTY4MCwgMzE2ODQsIDMxNjg4LCAKLSAgICAzMTY5MiwgMzE2OTYsIDMxNjk5LCAzMTcwMiwgMzE3MDYsIDMxNzA5LCAzMTcxMywgMzE3MTcsIDMxNzIwLCAzMTcyNCwgCi0gICAgMzE3MjgsIDMxNzMxLCAzMTczNiwgMzE3NDEsIDMxNzQ2LCAzMTc1MCwgMzE3NTQsIDMxNzU5LCAzMTc2MywgMzE3NjgsIAotICAgIDMxNzcyLCAzMTc3NywgMzE3ODEsIDMxNzg1LCAzMTc5MCwgMzE3OTUsIDMxNzk5LCAzMTgwNCwgMzE4MDksIDMxODE0LCAKLSAgICAzMTgxOCwgMCwgMCwgMCwgMzE4MjIsIDMxODI3LCAzMTgzNiwgMzE4NDEsIDMxODQ4LCAzMTg1MywgMzE4NTcsIDMxODYwLCAKLSAgICAzMTg2MywgMzE4NjYsIDMxODY5LCAzMTg3MiwgMzE4NzUsIDMxODc4LCAzMTg4MSwgMCwgMCwgMCwgMzE4ODQsIDMxODg4LCAKLSAgICAzMTg5MiwgMzE4OTYsIDMxOTAzLCAzMTkwOSwgMzE5MTUsIDMxOTIxLCAzMTkyNywgMzE5MzMsIDMxOTM5LCAzMTk0NSwgCi0gICAgMzE5NTEsIDMxOTU3LCAzMTk2NCwgMzE5NzEsIDMxOTc4LCAzMTk4NSwgMzE5OTIsIDMxOTk5LCAzMjAwNiwgMzIwMTMsIAotICAgIDMyMDIwLCAzMjAyNywgMzIwMzQsIDMyMDQxLCAzMjA0OCwgMzIwNTUsIDMyMDYyLCAzMjA2OSwgMzIwNzYsIDMyMDgzLCAKLSAgICAzMjA5MCwgMzIwOTcsIDMyMTA0LCAzMjExMSwgMzIxMTgsIDMyMTI1LCAzMjEzMiwgMzIxMzksIDMyMTQ2LCAzMjE1MywgCi0gICAgMzIxNjAsIDMyMTY3LCAzMjE3NSwgMzIxODMsIDMyMTkxLCAzMjE5NywgMzIyMDMsIDMyMjA5LCAzMjIxNywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyMjYsIDMyMjMzLCAzMjI0MCwgMzIyNDcsIDMyMjU0LCAKLSAgICAzMjI2MywgMzIyNzIsIDMyMjgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjI5MCwgMzIyOTUsIDMyMzAwLCAzMjMwNSwgCi0gICAgMzIzMTAsIDMyMzE5LCAzMjMzMCwgMzIzMzksIDMyMzUwLCAzMjM1NiwgMzIzNjksIDMyMzc1LCAzMjM4MiwgMzIzODksIAotICAgIDMyMzk0LCAzMjQwMCwgMzI0MDYsIDMyNDE3LCAzMjQyNiwgMzI0MzMsIDMyNDQwLCAzMjQ0OSwgMzI0NTYsIDMyNDY1LCAKLSAgICAzMjQ3NSwgMzI0ODUsIDMyNDkyLCAzMjQ5OSwgMzI1MDYsIDMyNTE2LCAzMjUyMSwgMzI1MjksIDMyNTM1LCAzMjU0MywgCi0gICAgMzI1NTIsIDMyNTU3LCAzMjU2NCwgMzI1NzAsIDMyNTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjU4MCwgCi0gICAgMzI1ODUsIDMyNTkxLCAzMjU5OCwgMzI2MDYsIDMyNjEyLCAzMjYxOCwgMzI2MjQsIDMyNjI5LCAzMjYzNiwgMzI2NDIsIAotICAgIDMyNjQ4LCAzMjY1NCwgMzI2NjIsIDMyNjY3LCAzMjY3NSwgMzI2ODAsIDMyNjg2LCAzMjY5MiwgMzI2OTksIDMyNzA3LCAKLSAgICAzMjcxNCwgMzI3MjAsIDMyNzI3LCAzMjczNCwgMzI3NDAsIDMyNzQ3LCAzMjc1NCwgMzI3NjAsIDMyNzY1LCAzMjc3MSwgCi0gICAgMzI3NzksIDMyNzg3LCAzMjc5MywgMzI3OTksIDMyODA1LCAzMjgxMSwgMzI4MTksIDMyODIzLCAzMjgyOSwgMzI4MzUsIAotICAgIDMyODQxLCAzMjg0NywgMzI4NTMsIDMyODU5LCAzMjg2MywgMzI4NjgsIDMyODczLCAzMjg4MCwgMzI4ODUsIDMyODg5LCAKLSAgICAzMjg5NSwgMzI5MDAsIDMyOTA1LCAzMjkwOSwgMzI5MTQsIDMyOTE5LCAzMjkyMywgMzI5MjcsIDMyOTMyLCAzMjkzOSwgCi0gICAgMzI5NDMsIDMyOTQ4LCAzMjk1MywgMzI5NTcsIDMyOTYyLCAzMjk2NiwgMzI5NzEsIDMyOTc1LCAzMjk4MSwgMzI5ODYsIAotICAgIDMyOTkzLCAzMjk5OCwgMzMwMDMsIDMzMDA3LCAzMzAxMiwgMzMwMTcsIDMzMDI0LCAzMzAyOSwgMzMwMzUsIDMzMDQwLCAKLSAgICAzMzA0NCwgMzMwNDksIDMzMDUzLCAzMzA1OCwgMzMwNjUsIDMzMDcyLCAzMzA3NywgMzMwODIsIDMzMDg2LCAzMzA5MiwgCi0gICAgMzMwOTgsIDMzMTAzLCAzMzEwOCwgMzMxMTMsIDMzMTE5LCAzMzEyNCwgMzMxMzAsIDMzMTM1LCAzMzE0MSwgMzMxNDcsIAotICAgIDMzMTUzLCAzMzE2MCwgMzMxNjcsIDMzMTc0LCAzMzE4MSwgMzMxODgsIDMzMTk1LCAzMzIwMCwgMzMyMDgsIDMzMjE3LCAKLSAgICAzMzIyNiwgMzMyMzUsIDMzMjQ0LCAzMzI1MywgMzMyNjIsIDMzMjc0LCAzMzI4MywgMzMyOTIsIDMzMzAxLCAzMzMwOCwgCi0gICAgMzMzMTMsIDMzMzIwLCAzMzMyOCwgMzMzMzYsIDMzMzQzLCAzMzM1MCwgMzMzNTcsIDMzMzY0LCAzMzM3MiwgMzMzODEsIAotICAgIDMzMzkwLCAzMzM5OSwgMzM0MDgsIDMzNDE3LCAzMzQyNiwgMzM0MzUsIDMzNDQ0LCAzMzQ1MywgMzM0NjIsIDMzNDcxLCAKLSAgICAzMzQ4MCwgMzM0ODksIDMzNDk4LCAzMzUwNiwgMzM1MTUsIDMzNTI2LCAzMzUzNCwgMzM1NDMsIDMzNTU0LCAzMzU2MywgCi0gICAgMzM1NzIsIDMzNTgxLCAzMzU5MCwgMzM1OTgsIDMzNjA3LCAzMzYxNCwgMzM2MTksIDMzNjI3LCAzMzYzMiwgMzM2MzksIAotICAgIDMzNjQ0LCAzMzY1MywgMzM2NTksIDMzNjY2LCAzMzY3MywgMzM2NzgsIDMzNjgzLCAzMzY5MSwgMzM2OTksIDMzNzA4LCAKLSAgICAzMzcxNywgMzM3MjIsIDMzNzI5LCAzMzc0MCwgMzM3NDgsIDMzNzU3LCAzMzc2MywgMzM3NjksIDMzNzc0LCAzMzc4MSwgCi0gICAgMzM3ODYsIDMzNzk1LCAzMzgwMCwgMzM4MDUsIDMzODEwLCAzMzgxNywgMzM4MjQsIDMzODI5LCAzMzgzOCwgMzM4NDYsIAotICAgIDMzODUxLCAzMzg1NiwgMzM4NjMsIDMzODcwLCAzMzg3NCwgMzM4NzgsIDMzODgxLCAzMzg4NCwgMzM4ODcsIDMzODkwLCAKLSAgICAzMzg5MywgMzM4OTYsIDMzOTAzLCAzMzkwNiwgMzM5MDksIDMzOTE0LCAzMzkxOCwgMzM5MjIsIDMzOTI2LCAzMzkzMCwgCi0gICAgMzM5MzQsIDMzOTQzLCAzMzk0OSwgMzM5NTUsIDMzOTYxLCAzMzk2OSwgMzM5NzcsIDMzOTgzLCAzMzk4OSwgMzM5OTYsIAotICAgIDM0MDAyLCAzNDAwNywgMzQwMTMsIDM0MDE5LCAzNDAyNSwgMzQwMzIsIDM0MDM4LCAzNDA0NiwgMzQwNTIsIDM0MDU5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDA2NSwgMzQwNzIsIAotICAgIDM0MDc5LCAzNDA4NCwgMzQwOTMsIDM0MTAxLCAzNDEwOSwgMzQxMTYsIDM0MTIzLCAzNDEzMCwgMzQxMzcsIDM0MTQ1LCAKLSAgICAzNDE1MywgMzQxNjMsIDM0MTczLCAzNDE4MSwgMzQxODksIDM0MTk3LCAzNDIwNSwgMzQyMTQsIDM0MjIzLCAzNDIzMSwgCi0gICAgMzQyMzksIDM0MjQ4LCAzNDI1NywgMzQyNjcsIDM0Mjc3LCAzNDI4NiwgMzQyOTUsIDM0MzAzLCAzNDMxMSwgMzQzMTksIAotICAgIDM0MzI3LCAzNDMzNywgMzQzNDcsIDM0MzU1LCAzNDM2MywgMzQzNzEsIDM0Mzc5LCAzNDM4NywgMzQzOTUsIDM0NDAzLCAKLSAgICAzNDQxMSwgMzQ0MTksIDM0NDI3LCAzNDQzNSwgMzQ0NDMsIDM0NDUyLCAzNDQ2MSwgMzQ0NzAsIDM0NDc5LCAzNDQ4OSwgCi0gICAgMzQ0OTksIDM0NTA2LCAzNDUxMywgMzQ1MjEsIDM0NTI5LCAzNDUzOCwgMzQ1NDcsIDM0NTU1LCAzNDU2MywgMzQ1NzUsIAotICAgIDM0NTg3LCAzNDU5NiwgMzQ2MDUsIDM0NjE0LCAzNDYyMywgMzQ2MzAsIDM0NjM3LCAzNDY0NSwgMzQ2NTMsIDM0NjYxLCAKLSAgICAzNDY2OSwgMzQ2NzcsIDM0Njg1LCAzNDY5MywgMzQ3MDEsIDM0NzEwLCAzNDcxOSwgMzQ3MjgsIDM0NzM3LCAzNDc0NiwgCi0gICAgMzQ3NTUsIDM0NzY1LCAzNDc3NSwgMzQ3ODUsIDM0Nzk1LCAzNDgwNCwgMzQ4MTMsIDM0ODIwLCAzNDgyNywgMzQ4MzUsIAotICAgIDM0ODQzLCAzNDg1MSwgMzQ4NTksIDM0ODY3LCAzNDg3NSwgMzQ4ODcsIDM0ODk5LCAzNDkwOCwgMzQ5MTcsIDM0OTI1LCAKLSAgICAzNDkzMywgMzQ5NDEsIDM0OTQ5LCAzNDk2MCwgMzQ5NzEsIDM0OTgyLCAzNDk5MywgMzUwMDUsIDM1MDE3LCAzNTAyNSwgCi0gICAgMzUwMzMsIDM1MDQxLCAzNTA0OSwgMzUwNTgsIDM1MDY3LCAzNTA3NiwgMzUwODUsIDM1MDkzLCAzNTEwMSwgMzUxMDksIAotICAgIDM1MTE3LCAzNTEyNSwgMzUxMzMsIDM1MTQyLCAzNTE1MSwgMzUxNjEsIDM1MTcxLCAzNTE3OCwgMzUxODUsIDM1MTkzLCAKLSAgICAzNTIwMSwgMzUyMDksIDM1MjE3LCAzNTIyNCwgMzUyMzEsIDM1MjM5LCAzNTI0NywgMzUyNTUsIDM1MjYzLCAzNTI3MSwgCi0gICAgMzUyNzksIDM1Mjg3LCAzNTI5NSwgMzUzMDMsIDM1MzExLCAzNTMxOSwgMzUzMjcsIDM1MzM1LCAzNTM0MywgMzUzNTEsIAotICAgIDM1MzU5LCAzNTM2OCwgMzUzNzcsIDM1Mzg2LCAzNTM5NCwgMzU0MDMsIDM1NDEyLCAzNTQyMSwgMzU0MzAsIDM1NDQwLCAKLSAgICAzNTQ0OSwgMzU0NTYsIDM1NDYxLCAzNTQ2OCwgMzU0NzUsIDM1NDgzLCAzNTQ5MSwgMzU1MDAsIDM1NTA5LCAzNTUxOSwgCi0gICAgMzU1MjksIDM1NTQwLCAzNTU1MSwgMzU1NjAsIDM1NTY5LCAzNTU3OSwgMzU1ODksIDM1NTk4LCAzNTYwNywgMzU2MTcsIAotICAgIDM1NjI3LCAzNTYzOCwgMzU2NDksIDM1NjU4LCAzNTY2NywgMzU2NzcsIDM1Njg3LCAzNTY5NCwgMzU3MDEsIDM1NzA5LCAKLSAgICAzNTcxNywgMzU3MjMsIDM1NzI5LCAzNTczOCwgMzU3NDcsIDM1NzU3LCAzNTc2NywgMzU3NzgsIDM1Nzg5LCAzNTc5OCwgCi0gICAgMzU4MDcsIDM1ODE3LCAzNTgyNywgMzU4MzYsIDM1ODQ1LCAzNTg1MywgMzU4NjEsIDM1ODY4LCAzNTg3NSwgMzU4ODMsIAotICAgIDM1ODkxLCAzNTkwMCwgMzU5MDksIDM1OTE5LCAzNTkyOSwgMzU5NDAsIDM1OTUxLCAzNTk2MCwgMzU5NjksIDM1OTc5LCAKLSAgICAzNTk4OSwgMzU5OTgsIDM2MDA3LCAzNjAxNywgMzYwMjcsIDM2MDM4LCAzNjA0OSwgMzYwNTgsIDM2MDY3LCAzNjA3NywgCi0gICAgMzYwODcsIDM2MDk0LCAzNjEwMSwgMzYxMDksIDM2MTE3LCAzNjEyNiwgMzYxMzUsIDM2MTQ1LCAzNjE1NSwgMzYxNjYsIAotICAgIDM2MTc3LCAzNjE4NiwgMzYxOTUsIDM2MjA1LCAzNjIxNSwgMzYyMjMsIDM2MjMxLCAzNjIzOSwgMzYyNDcsIDM2MjU2LCAKLSAgICAzNjI2NSwgMzYyNzIsIDM2Mjc5LCAzNjI4NiwgMzYyOTMsIDM2MzAwLCAzNjMwNywgMzYzMTUsIDM2MzIzLCAzNjMzMSwgCi0gICAgMzYzMzksIDM2MzUwLCAzNjM2MSwgMzYzNzIsIDM2MzgzLCAzNjM5NCwgMzY0MDUsIDM2NDEzLCAzNjQyMSwgMzY0MzIsIAotICAgIDM2NDQzLCAzNjQ1NCwgMzY0NjUsIDM2NDc2LCAzNjQ4NywgMzY0OTUsIDM2NTAzLCAzNjUxNCwgMzY1MjUsIDM2NTM2LCAwLCAKLSAgICAwLCAzNjU0NywgMzY1NTUsIDM2NTYzLCAzNjU3NCwgMzY1ODUsIDM2NTk2LCAwLCAwLCAzNjYwNywgMzY2MTUsIDM2NjIzLCAKLSAgICAzNjYzNCwgMzY2NDUsIDM2NjU2LCAzNjY2NywgMzY2NzgsIDM2Njg5LCAzNjY5NywgMzY3MDUsIDM2NzE2LCAzNjcyNywgCi0gICAgMzY3MzgsIDM2NzQ5LCAzNjc2MCwgMzY3NzEsIDM2Nzc5LCAzNjc4NywgMzY3OTgsIDM2ODA5LCAzNjgyMCwgMzY4MzEsIAotICAgIDM2ODQyLCAzNjg1MywgMzY4NjEsIDM2ODY5LCAzNjg4MCwgMzY4OTEsIDM2OTAyLCAzNjkxMywgMzY5MjQsIDM2OTM1LCAKLSAgICAzNjk0MywgMzY5NTEsIDM2OTYyLCAzNjk3MywgMzY5ODQsIDAsIDAsIDM2OTk1LCAzNzAwMywgMzcwMTEsIDM3MDIyLCAKLSAgICAzNzAzMywgMzcwNDQsIDAsIDAsIDM3MDU1LCAzNzA2MywgMzcwNzEsIDM3MDgyLCAzNzA5MywgMzcxMDQsIDM3MTE1LCAKLSAgICAzNzEyNiwgMCwgMzcxMzcsIDAsIDM3MTQ1LCAwLCAzNzE1NiwgMCwgMzcxNjcsIDM3MTc4LCAzNzE4NiwgMzcxOTQsIAotICAgIDM3MjA1LCAzNzIxNiwgMzcyMjcsIDM3MjM4LCAzNzI0OSwgMzcyNjAsIDM3MjY4LCAzNzI3NiwgMzcyODcsIDM3Mjk4LCAKLSAgICAzNzMwOSwgMzczMjAsIDM3MzMxLCAzNzM0MiwgMzczNTAsIDM3MzU4LCAzNzM2NiwgMzczNzQsIDM3MzgyLCAzNzM5MCwgCi0gICAgMzczOTgsIDM3NDA2LCAzNzQxNCwgMzc0MjIsIDM3NDMwLCAzNzQzOCwgMzc0NDYsIDAsIDAsIDM3NDU0LCAzNzQ2NSwgCi0gICAgMzc0NzYsIDM3NDkwLCAzNzUwNCwgMzc1MTgsIDM3NTMyLCAzNzU0NiwgMzc1NjAsIDM3NTcxLCAzNzU4MiwgMzc1OTYsIAotICAgIDM3NjEwLCAzNzYyNCwgMzc2MzgsIDM3NjUyLCAzNzY2NiwgMzc2NzcsIDM3Njg4LCAzNzcwMiwgMzc3MTYsIDM3NzMwLCAKLSAgICAzNzc0NCwgMzc3NTgsIDM3NzcyLCAzNzc4MywgMzc3OTQsIDM3ODA4LCAzNzgyMiwgMzc4MzYsIDM3ODUwLCAzNzg2NCwgCi0gICAgMzc4NzgsIDM3ODg5LCAzNzkwMCwgMzc5MTQsIDM3OTI4LCAzNzk0MiwgMzc5NTYsIDM3OTcwLCAzNzk4NCwgMzc5OTUsIAotICAgIDM4MDA2LCAzODAyMCwgMzgwMzQsIDM4MDQ4LCAzODA2MiwgMzgwNzYsIDM4MDkwLCAzODA5OCwgMzgxMDYsIDM4MTE3LCAKLSAgICAzODEyNSwgMCwgMzgxMzYsIDM4MTQ0LCAzODE1NSwgMzgxNjMsIDM4MTcxLCAzODE3OSwgMzgxODcsIDM4MTk1LCAzODE5OCwgCi0gICAgMzgyMDEsIDM4MjA0LCAzODIwNywgMzgyMTMsIDM4MjI0LCAzODIzMiwgMCwgMzgyNDMsIDM4MjUxLCAzODI2MiwgMzgyNzAsIAotICAgIDM4Mjc4LCAzODI4NiwgMzgyOTQsIDM4MzAyLCAzODMwOCwgMzgzMTQsIDM4MzIwLCAzODMyOCwgMzgzMzYsIDM4MzQ3LCAwLCAKLSAgICAwLCAzODM1OCwgMzgzNjYsIDM4Mzc3LCAzODM4NSwgMzgzOTMsIDM4NDAxLCAwLCAzODQwOSwgMzg0MTUsIDM4NDIxLCAKLSAgICAzODQyNywgMzg0MzUsIDM4NDQzLCAzODQ1NCwgMzg0NjUsIDM4NDczLCAzODQ4MSwgMzg0ODksIDM4NTAwLCAzODUwOCwgCi0gICAgMzg1MTYsIDM4NTI0LCAzODUzMiwgMzg1NDAsIDM4NTQ2LCAzODU1MiwgMCwgMCwgMzg1NTUsIDM4NTY2LCAzODU3NCwgMCwgCi0gICAgMzg1ODUsIDM4NTkzLCAzODYwNCwgMzg2MTIsIDM4NjIwLCAzODYyOCwgMzg2MzYsIDM4NjQ0LCAzODY0NywgMCwgMzg2NTAsIAotICAgIDM4NjU0LCAzODY1OCwgMzg2NjIsIDM4NjY2LCAzODY3MCwgMzg2NzQsIDM4Njc4LCAzODY4MiwgMzg2ODYsIDM4NjkwLCAKLSAgICAzODY5NCwgMzg3MDAsIDM4NzA2LCAzODcxMiwgMzg3MTUsIDM4NzE4LCAzODcyMCwgMzg3MjQsIDM4NzI4LCAzODczMiwgCi0gICAgMzg3MzYsIDM4NzM4LCAzODc0MiwgMzg3NDYsIDM4NzUyLCAzODc1OCwgMzg3NjUsIDM4NzcyLCAzODc3NywgMzg3ODIsIAotICAgIDM4Nzg4LCAzODc5NCwgMzg3OTYsIDM4Nzk5LCAzODgwMSwgMzg4MDUsIDM4ODA5LCAzODgxMywgMzg4MTYsIDM4ODIwLCAKLSAgICAzODgyNCwgMzg4MjgsIDM4ODMyLCAzODgzNiwgMzg4NDIsIDM4ODQ2LCAzODg1MCwgMzg4NTYsIDM4ODYxLCAzODg2OCwgCi0gICAgMzg4NzAsIDM4ODczLCAzODg3NywgMzg4ODEsIDM4ODg2LCAzODg5MiwgMzg4OTQsIDM4OTAzLCAzODkxMiwgMzg5MTUsIAotICAgIDM4OTE5LCAzODkyMSwgMzg5MjMsIDM4OTI1LCAzODkyOCwgMzg5MzQsIDM4OTM2LCAzODk0MCwgMzg5NDQsIDM4OTUxLCAKLSAgICAzODk1OCwgMzg5NjIsIDM4OTY3LCAzODk3MiwgMzg5NzcsIDM4OTgyLCAzODk4NiwgMzg5OTAsIDM4OTkzLCAzODk5NywgCi0gICAgMzkwMDEsIDM5MDA4LCAzOTAxMywgMzkwMTcsIDM5MDIxLCAzOTAyNiwgMzkwMzAsIDM5MDM0LCAzOTAzOSwgMzkwNDQsIAotICAgIDM5MDQ4LCAzOTA1MiwgMzkwNTYsIDM5MDU4LCAzOTA2MywgMzkwNjgsIDM5MDcyLCAzOTA3NiwgMzkwODAsIDM5MDg0LCAwLCAKLSAgICAzOTA4OCwgMzkwOTIsIDM5MDk2LCAzOTEwMiwgMzkxMDgsIDM5MTE0LCAzOTEyMCwgMzkxMjcsIDM5MTM0LCAzOTEzOSwgCi0gICAgMzkxNDQsIDM5MTQ4LCAwLCAwLCAzOTE1NCwgMzkxNTcsIDM5MTYwLCAzOTE2MywgMzkxNjYsIDM5MTY5LCAzOTE3MiwgCi0gICAgMzkxNzYsIDM5MTgwLCAzOTE4NSwgMzkxOTAsIDM5MTk1LCAzOTIwMiwgMzkyMDYsIDM5MjA5LCAzOTIxMiwgMzkyMTUsIAotICAgIDM5MjE4LCAzOTIyMSwgMzkyMjQsIDM5MjI3LCAzOTIzMCwgMzkyMzMsIDM5MjM3LCAzOTI0MSwgMzkyNDYsIDM5MjUxLCAwLCAKLSAgICAzOTI1NiwgMzkyNjIsIDM5MjY4LCAzOTI3NCwgMzkyODEsIDM5Mjg4LCAzOTI5NSwgMzkzMDIsIDM5MzA4LCAzOTMxNCwgCi0gICAgMzkzMjEsIDM5MzI4LCAzOTMzNSwgMCwgMCwgMCwgMzkzNDIsIDM5MzQ1LCAzOTM0OCwgMzkzNTEsIDM5MzU2LCAzOTM1OSwgCi0gICAgMzkzNjIsIDM5MzY1LCAzOTM2OCwgMzkzNzEsIDM5Mzc0LCAzOTM3OCwgMzkzODEsIDM5Mzg0LCAzOTM4NywgMzkzOTAsIAotICAgIDM5MzkzLCAzOTM5OCwgMzk0MDEsIDM5NDA0LCAzOTQwNywgMzk0MTAsIDM5NDEzLCAzOTQxOCwgMzk0MjEsIDM5NDI0LCAKLSAgICAzOTQyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzk0MzQsIDM5NDM5LCAzOTQ0NCwgMzk0NTEsIDM5NDU5LCAzOTQ2NCwgMzk0NjksIDM5NDczLCAzOTQ3NywgMzk0ODIsIAotICAgIDM5NDg5LCAzOTQ5NiwgMzk1MDAsIDM5NTA1LCAzOTUxMCwgMzk1MTUsIDM5NTIwLCAzOTUyNywgMzk1MzIsIDM5NTM3LCAKLSAgICAzOTU0MiwgMzk1NTEsIDM5NTU4LCAzOTU2NSwgMzk1NjksIDM5NTc0LCAzOTU4MCwgMzk1ODUsIDM5NTkyLCAzOTYwMSwgCi0gICAgMzk2MTAsIDM5NjE0LCAzOTYxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk2MjIsIAotICAgIDM5NjI2LCAzOTYzNCwgMzk2MzgsIDM5NjQyLCAzOTY0NywgMzk2NTEsIDM5NjU1LCAzOTY1OSwgMzk2NjEsIDM5NjY1LCAKLSAgICAzOTY2OSwgMzk2NzMsIDM5Njc4LCAzOTY4MiwgMzk2ODYsIDM5Njk0LCAzOTY5NywgMzk3MDEsIDM5NzA0LCAzOTcwNywgCi0gICAgMzk3MTMsIDM5NzE3LCAzOTcyMCwgMzk3MjYsIDM5NzMwLCAzOTczNCwgMzk3MzgsIDM5NzQxLCAzOTc0NSwgMzk3NDgsIAotICAgIDM5NzUyLCAzOTc1NCwgMzk3NTcsIDM5NzYwLCAzOTc2NCwgMzk3NjYsIDM5NzcwLCAzOTc3MywgMzk3NzYsIDM5NzgxLCAKLSAgICAzOTc4NiwgMzk3OTMsIDM5Nzk2LCAzOTc5OSwgMzk4MDMsIDM5ODA4LCAzOTgxMSwgMzk4MTQsIDM5ODE3LCAzOTgyMSwgCi0gICAgMzk4MjYsIDM5ODI5LCAzOTgzMiwgMzk4MzQsIDM5ODM3LCAzOTg0MCwgMzk4NDMsIDM5ODQ3LCAzOTg1MiwgMzk4NTUsIAotICAgIDM5ODU5LCAzOTg2MywgMzk4NjcsIDM5ODcxLCAzOTg3NiwgMzk4ODIsIDM5ODg3LCAzOTg5MiwgMzk4OTgsIDM5OTAzLCAKLSAgICAzOTkwOCwgMzk5MTIsIDM5OTE2LCAzOTkyMSwgMzk5MjUsIDM5OTI5LCAzOTkzMiwgMzk5MzQsIDM5OTM5LCAzOTk0NSwgCi0gICAgMzk5NTIsIDM5OTU5LCAzOTk2NiwgMzk5NzMsIDM5OTgwLCAzOTk4NywgMzk5OTQsIDQwMDAxLCA0MDAwOSwgNDAwMTYsIAotICAgIDQwMDI0LCA0MDAzMSwgNDAwMzgsIDQwMDQ2LCA0MDA1NCwgNDAwNTksIDQwMDY0LCA0MDA2OSwgNDAwNzQsIDQwMDc5LCAKLSAgICA0MDA4NCwgNDAwODksIDQwMDk0LCA0MDA5OSwgNDAxMDQsIDQwMTEwLCA0MDExNiwgNDAxMjIsIDQwMTI4LCA0MDEzNSwgCi0gICAgNDAxNDMsIDQwMTUwLCA0MDE1NiwgNDAxNjIsIDQwMTY4LCA0MDE3NCwgNDAxODAsIDQwMTg2LCA0MDE5MiwgNDAxOTgsIAotICAgIDQwMjA0LCA0MDIxMSwgNDAyMTgsIDQwMjI1LCA0MDIzMiwgNDAyNDAsIDQwMjQ5LCA0MDI1NywgNDAyNjgsIDQwMjc2LCAKLSAgICA0MDI4NCwgNDAyOTMsIDQwMzAwLCA0MDMwOSwgNDAzMTgsIDQwMzI2LCA0MDMzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDAzNDMsIAotICAgIDQwMzQ1LCA0MDM0OCwgNDAzNTAsIDQwMzUzLCA0MDM1NiwgNDAzNTksIDQwMzY0LCA0MDM2OSwgNDAzNzQsIDQwMzc5LCAKLSAgICA0MDM4MywgNDAzODcsIDQwMzkxLCA0MDM5NSwgNDA0MDAsIDQwNDA2LCA0MDQxMSwgNDA0MTcsIDQwNDIyLCA0MDQyNywgCi0gICAgNDA0MzIsIDQwNDM4LCA0MDQ0MywgNDA0NDksIDQwNDU1LCA0MDQ1OSwgNDA0NjMsIDQwNDY4LCA0MDQ3MywgNDA0NzgsIAotICAgIDQwNDgzLCA0MDQ4OCwgNDA0OTYsIDQwNTA0LCA0MDUxMiwgNDA1MjAsIDQwNTI3LCA0MDUzNSwgNDA1NDIsIDQwNTQ5LCAKLSAgICA0MDU1OCwgNDA1NzAsIDQwNTc2LCA0MDU4MiwgNDA1OTAsIDQwNTk4LCA0MDYwNywgNDA2MTYsIDQwNjI0LCA0MDYzMiwgCi0gICAgNDA2NDEsIDQwNjUwLCA0MDY1NSwgNDA2NjMsIDQwNjY4LCA0MDY3MywgNDA2NzksIDQwNjg0LCA0MDY5MCwgNDA2OTcsIAotICAgIDQwNzA0LCA0MDcwOSwgNDA3MTUsIDQwNzIwLCA0MDcyMywgNDA3MjcsIDQwNzMwLCA0MDczNCwgNDA3MzgsIDQwNzQyLCAKLSAgICA0MDc0OCwgNDA3NTQsIDQwNzYwLCA0MDc2NiwgNDA3NzAsIDQwNzc0LCA0MDc3OCwgNDA3ODIsIDQwNzg4LCA0MDc5NCwgCi0gICAgNDA3OTgsIDQwODAzLCA0MDgwNywgNDA4MTIsIDQwODE3LCA0MDgyMiwgNDA4MjUsIDQwODI5LCA0MDgzMiwgNDA4MzYsIAotICAgIDQwODQzLCA0MDg1MSwgNDA4NjIsIDQwODczLCA0MDg3OCwgNDA4ODcsIDQwODk0LCA0MDkwMywgNDA5MTIsIDQwOTE2LCAKLSAgICA0MDkyMiwgNDA5MzAsIDQwOTM0LCA0MDkzOSwgNDA5NDQsIDQwOTUwLCA0MDk1NiwgNDA5NjIsIDQwOTY5LCA0MDk3MywgCi0gICAgNDA5NzcsIDQwOTgyLCA0MDk4NSwgNDA5ODcsIDQwOTkxLCA0MDk5NSwgNDEwMDMsIDQxMDA3LCA0MTAwOSwgNDEwMTEsIAotICAgIDQxMDE1LCA0MTAyMywgNDEwMjgsIDQxMDM0LCA0MTA0NCwgNDEwNTEsIDQxMDU2LCA0MTA2MCwgNDEwNjQsIDQxMDY4LCAKLSAgICA0MTA3MSwgNDEwNzQsIDQxMDc3LCA0MTA4MSwgNDEwODUsIDQxMDg5LCA0MTA5MywgNDEwOTcsIDQxMTAwLCA0MTEwNCwgCi0gICAgNDExMDgsIDQxMTExLCA0MTExMywgNDExMTYsIDQxMTE4LCA0MTEyMiwgNDExMjYsIDQxMTI4LCA0MTEzNCwgNDExMzcsIAotICAgIDQxMTQyLCA0MTE0NiwgNDExNTAsIDQxMTUyLCA0MTE1NCwgNDExNTYsIDQxMTU5LCA0MTE2MywgNDExNjcsIDQxMTcxLCAKLSAgICA0MTE3NSwgNDExNzksIDQxMTg1LCA0MTE5MSwgNDExOTMsIDQxMTk1LCA0MTE5NywgNDExOTksIDQxMjAyLCA0MTIwNCwgCi0gICAgNDEyMDgsIDQxMjEwLCA0MTIxNCwgNDEyMTcsIDQxMjIzLCA0MTIyNywgNDEyMzEsIDQxMjM0LCA0MTIzNywgNDEyNDEsIAotICAgIDQxMjQ3LCA0MTI1MSwgNDEyNjEsIDQxMjcxLCA0MTI3NSwgNDEyODEsIDQxMjg3LCA0MTI5MCwgNDEyOTQsIDQxMjk3LCAKLSAgICA0MTMwMiwgNDEzMDYsIDQxMzEyLCA0MTMxNiwgNDEzMjgsIDQxMzM2LCA0MTM0MCwgNDEzNDQsIDQxMzUwLCA0MTM1NCwgCi0gICAgNDEzNTcsIDQxMzU5LCA0MTM2MiwgNDEzNjYsIDQxMzcwLCA0MTM3NywgNDEzODEsIDQxMzg1LCA0MTM4OSwgNDEzOTIsIAotICAgIDQxMzk3LCA0MTQwMiwgNDE0MDcsIDQxNDEyLCA0MTQxNywgNDE0MjIsIDQxNDMwLCA0MTQzOCwgNDE0NDIsIDQxNDQ2LCAKLSAgICA0MTQ0OCwgNDE0NTMsIDQxNDU3LCA0MTQ2MSwgNDE0NjksIDQxNDc3LCA0MTQ4MywgNDE0ODksIDQxNDk4LCA0MTUwNywgCi0gICAgNDE1MTIsIDQxNTE3LCA0MTUyNSwgNDE1MzMsIDQxNTM1LCA0MTUzNywgNDE1NDIsIDQxNTQ3LCA0MTU1MywgNDE1NTksIAotICAgIDQxNTY1LCA0MTU3MSwgNDE1NzUsIDQxNTc5LCA0MTU4NiwgNDE1OTMsIDQxNTk5LCA0MTYwNSwgNDE2MTUsIDQxNjI1LCAKLSAgICA0MTYzMywgNDE2NDEsIDQxNjQzLCA0MTY0NywgNDE2NTEsIDQxNjU2LCA0MTY2MSwgNDE2NjgsIDQxNjc1LCA0MTY3OCwgCi0gICAgNDE2ODEsIDQxNjg0LCA0MTY4NywgNDE2OTAsIDQxNjk1LCA0MTY5OSwgNDE3MDQsIDQxNzA5LCA0MTcxMiwgNDE3MTUsIAotICAgIDQxNzE4LCA0MTcyMSwgNDE3MjQsIDQxNzI4LCA0MTczMSwgNDE3MzQsIDQxNzM3LCA0MTc0MCwgNDE3NDIsIDQxNzQ0LCAKLSAgICA0MTc0NiwgNDE3NDgsIDQxNzU2LCA0MTc2NCwgNDE3NzAsIDQxNzc0LCA0MTc4MCwgNDE3OTAsIDQxNzk2LCA0MTgwMiwgCi0gICAgNDE4MDgsIDQxODE2LCA0MTgyNCwgNDE4MzUsIDQxODM5LCA0MTg0MywgNDE4NDUsIDQxODUxLCA0MTg1MywgNDE4NTUsIAotICAgIDQxODU3LCA0MTg1OSwgNDE4NjUsIDQxODY4LCA0MTg3NCwgNDE4ODAsIDQxODg0LCA0MTg4OCwgNDE4OTIsIDQxODk1LCAKLSAgICA0MTg5OSwgNDE5MDMsIDQxOTA1LCA0MTkxNCwgNDE5MjMsIDQxOTI4LCA0MTkzMywgNDE5MzksIDQxOTQ1LCA0MTk1MSwgCi0gICAgNDE5NTQsIDQxOTU3LCA0MTk2MCwgNDE5NjMsIDQxOTY1LCA0MTk3MCwgNDE5NzUsIDQxOTgwLCA0MTk4NiwgNDE5OTIsIAotICAgIDQyMDAwLCA0MjAwOCwgNDIwMTQsIDQyMDIwLCA0MjAyNiwgNDIwMzIsIDQyMDQxLCA0MjA1MCwgNDIwNTksIDQyMDY4LCAKLSAgICA0MjA3NywgNDIwODYsIDQyMDk1LCA0MjEwNCwgNDIxMTMsIDQyMTIyLCA0MjEzMCwgNDIxNDIsIDQyMTUyLCA0MjE2NywgCi0gICAgNDIxNzAsIDQyMTc1LCA0MjE4MSwgNDIxODcsIDQyMTk0LCA0MjIwOCwgNDIyMjMsIDQyMjI5LCA0MjIzNSwgNDIyNDIsIAotICAgIDQyMjQ4LCA0MjI1NiwgNDIyNjIsIDQyMjc1LCA0MjI4OSwgNDIyOTQsIDQyMzAwLCA0MjMwNywgNDIzMTAsIDQyMzEzLCAKLSAgICA0MjMxNSwgNDIzMTgsIDQyMzIxLCA0MjMyMywgNDIzMjUsIDQyMzI5LCA0MjMzMiwgNDIzMzUsIDQyMzM4LCA0MjM0MSwgCi0gICAgNDIzNDYsIDQyMzUxLCA0MjM1NiwgNDIzNjEsIDQyMzY2LCA0MjM2OSwgNDIzNzEsIDQyMzczLCA0MjM3NSwgNDIzNzksIAotICAgIDQyMzgzLCA0MjM4NywgNDIzOTMsIDQyMzk4LCA0MjQwMCwgNDI0MDIsIDQyNDA3LCA0MjQxMiwgNDI0MTcsIDQyNDIyLCAKLSAgICA0MjQyNywgNDI0MzIsIDQyNDM0LCA0MjQzNiwgNDI0NDUsIDQyNDQ5LCA0MjQ1NywgNDI0NjYsIDQyNDY4LCA0MjQ3MywgCi0gICAgNDI0NzgsIDQyNDg2LCA0MjQ5MCwgNDI0OTIsIDQyNDk2LCA0MjQ5OCwgNDI1MDIsIDQyNTA2LCA0MjUxMCwgNDI1MTIsIAotICAgIDQyNTE0LCA0MjUxNiwgNDI1MjMsIDQyNTMyLCA0MjU0MSwgNDI1NTAsIDQyNTU5LCA0MjU2OCwgNDI1NzcsIDQyNTg2LCAKLSAgICA0MjU5NSwgNDI2MDMsIDQyNjExLCA0MjYyMCwgNDI2MjksIDQyNjM4LCA0MjY0NywgNDI2NTUsIDQyNjYzLCA0MjY3MiwgCi0gICAgNDI2ODEsIDQyNjkwLCA0MjcwMCwgNDI3MDksIDQyNzE5LCA0MjcyOCwgNDI3MzgsIDQyNzQ3LCA0Mjc1NywgNDI3NjcsIAotICAgIDQyNzc2LCA0Mjc4NiwgNDI3OTUsIDQyODA1LCA0MjgxNCwgNDI4MjQsIDQyODMzLCA0Mjg0MiwgNDI4NTEsIDQyODYwLCAKLSAgICA0Mjg2OSwgNDI4NzksIDQyODg4LCA0Mjg5NywgNDI5MDYsIDQyOTE2LCA0MjkyNSwgNDI5MzQsIDQyOTQzLCA0Mjk1MiwgCi0gICAgNDI5NjIsIDQyOTcyLCA0Mjk4MSwgNDI5OTAsIDQyOTk4LCA0MzAwNiwgNDMwMTMsIDQzMDIxLCA0MzAzMCwgNDMwNDEsIAotICAgIDQzMDUwLCA0MzA1OSwgNDMwNjgsIDQzMDc1LCA0MzA4MiwgNDMwODksIDQzMDk4LCA0MzEwNywgNDMxMTYsIDQzMTI1LCAKLSAgICA0MzEzMiwgNDMxMzcsIDQzMTQ2LCA0MzE1MSwgNDMxNTQsIDQzMTYyLCA0MzE2NSwgNDMxNzAsIDQzMTc1LCA0MzE3OCwgCi0gICAgNDMxODEsIDQzMTg5LCA0MzE5MiwgNDMxOTcsIDQzMjAwLCA0MzIwNywgNDMyMTIsIDQzMjIwLCA0MzIyMywgNDMyMjYsIAotICAgIDQzMjI5LCA0MzIzNCwgNDMyMzksIDQzMjQyLCA0MzI0NSwgNDMyNTMsIDQzMjU2LCA0MzI2MywgNDMyNzAsIDQzMjc0LCAKLSAgICA0MzI3OCwgNDMyODMsIDQzMjg4LCA0MzI5NCwgNDMyOTksIDQzMzA1LCA0MzMxMSwgNDMzMTYsIDQzMzIyLCA0MzMzMCwgCi0gICAgNDMzMzYsIDQzMzQ0LCA0MzM1MiwgNDMzNTgsIDQzMzY2LCA0MzM3NCwgNDMzODMsIDQzMzkxLCA0MzM5NywgNDM0MDUsIAotICAgIDQzNDE0LCA0MzQyMiwgNDM0MjYsIDQzNDMxLCA0MzQ0NCwgNDM0NTcsIDQzNDYxLCA0MzQ2NSwgNDM0NjksIDQzNDczLCAKLSAgICA0MzQ4MywgNDM0ODcsIDQzNDkyLCA0MzQ5NywgNDM1MDIsIDQzNTA3LCA0MzUxMiwgNDM1MTcsIDQzNTI3LCA0MzUzNywgCi0gICAgNDM1NDUsIDQzNTU1LCA0MzU2NSwgNDM1NzMsIDQzNTgzLCA0MzU5MywgNDM2MDEsIDQzNjExLCA0MzYyMSwgNDM2MjksIAotICAgIDQzNjM3LCA0MzY0NywgNDM2NTcsIDQzNjYwLCA0MzY2MywgNDM2NjYsIDQzNjcxLCA0MzY3NSwgNDM2ODEsIDQzNjg4LCAKLSAgICA0MzY5NSwgNDM3MDMsIDQzNzEwLCA0MzcxNCwgNDM3MTgsIDQzNzIyLCA0MzcyNiwgNDM3MjgsIDQzNzMyLCA0MzczNiwgCi0gICAgNDM3NDEsIDQzNzQ2LCA0Mzc1MywgNDM3NjAsIDQzNzYzLCA0Mzc3MCwgNDM3NzIsIDQzNzc0LCA0Mzc3OCwgNDM3ODIsIAotICAgIDQzNzg3LCA0Mzc5MywgNDM3OTksIDQzODA1LCA0MzgxMSwgNDM4MjAsIDQzODI5LCA0MzgzOCwgNDM4NDIsIDQzODQ0LCAKLSAgICA0Mzg0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM4NTUsIDQzODU5LCA0Mzg2NiwgNDM4NzMsIAotICAgIDQzODgwLCA0Mzg4NywgNDM4OTEsIDQzODk1LCA0Mzg5OSwgNDM5MDMsIDQzOTA4LCA0MzkxNCwgNDM5MTksIDQzOTI1LCAKLSAgICA0MzkzMSwgNDM5MzcsIDQzOTQzLCA0Mzk1MSwgNDM5NTgsIDQzOTY1LCA0Mzk3MiwgNDM5NzksIDQzOTg0LCA0Mzk5MCwgCi0gICAgNDM5OTksIDQ0MDAzLCA0NDAxMCwgNDQwMTQsIDQ0MDE4LCA0NDAyNCwgNDQwMzAsIDQ0MDM2LCA0NDA0MiwgNDQwNDYsIAotICAgIDQ0MDUwLCA0NDA1MywgNDQwNTYsIDQ0MDYwLCA0NDA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQwNzQsIDQ0MDc3LCA0NDA4MSwgNDQwODUsIDQ0MDkxLCAKLSAgICA0NDA5NywgNDQxMDMsIDQ0MTExLCA0NDExOCwgNDQxMjIsIDQ0MTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDEzNSwgNDQxMzgsIDQ0MTQxLCA0NDE0NCwgNDQxNDcsIAotICAgIDQ0MTUwLCA0NDE1MywgNDQxNTYsIDQ0MTU5LCA0NDE2MiwgNDQxNjYsIDQ0MTcwLCA0NDE3NCwgNDQxNzgsIDQ0MTgyLCAKLSAgICA0NDE4NiwgNDQxOTAsIDQ0MTk0LCA0NDE5OCwgNDQyMDIsIDQ0MjA2LCA0NDIwOSwgNDQyMTIsIDQ0MjE1LCA0NDIxOCwgCi0gICAgNDQyMjEsIDQ0MjI0LCA0NDIyNywgNDQyMzAsIDQ0MjMzLCA0NDIzNywgNDQyNDEsIDQ0MjQ1LCA0NDI0OSwgNDQyNTMsIAotICAgIDQ0MjU3LCA0NDI2MSwgNDQyNjUsIDQ0MjY5LCA0NDI3MywgNDQyNzcsIDQ0MjgzLCA0NDI4OSwgNDQyOTUsIDQ0MzAyLCAKLSAgICA0NDMwOSwgNDQzMTYsIDQ0MzIzLCA0NDMzMCwgNDQzMzcsIDQ0MzQ0LCA0NDM1MSwgNDQzNTgsIDQ0MzY1LCA0NDM3MiwgCi0gICAgNDQzNzksIDQ0Mzg2LCA0NDM5MywgNDQ0MDAsIDQ0NDA3LCA0NDQxNCwgNDQ0MTksIDQ0NDI1LCA0NDQzMSwgNDQ0MzcsIAotICAgIDQ0NDQyLCA0NDQ0OCwgNDQ0NTQsIDQ0NDYwLCA0NDQ2NSwgNDQ0NzEsIDQ0NDc3LCA0NDQ4MiwgNDQ0ODcsIDQ0NDkzLCAKLSAgICA0NDQ5OCwgNDQ1MDQsIDQ0NTEwLCA0NDUxNSwgNDQ1MjEsIDQ0NTI3LCA0NDUzMiwgNDQ1MzgsIDQ0NTQ0LCA0NDU1MCwgCi0gICAgNDQ1NTYsIDQ0NTYyLCA0NDU2NywgNDQ1NzMsIDQ0NTc5LCA0NDU4NSwgNDQ1OTAsIDQ0NTk2LCA0NDYwMiwgNDQ2MDgsIAotICAgIDQ0NjEzLCA0NDYxOSwgNDQ2MjUsIDQ0NjMwLCA0NDYzNSwgNDQ2NDEsIDQ0NjQ2LCA0NDY1MiwgNDQ2NTgsIDQ0NjYzLCAKLSAgICA0NDY2OSwgNDQ2NzUsIDQ0NjgwLCA0NDY4NiwgNDQ2OTIsIDQ0Njk4LCA0NDcwNCwgNDQ3MTAsIDQ0NzE1LCA0NDcyMSwgCi0gICAgNDQ3MjcsIDQ0NzMzLCA0NDczOCwgNDQ3NDQsIDQ0NzUwLCA0NDc1NiwgNDQ3NjEsIDQ0NzY3LCA0NDc3MywgNDQ3NzgsIAotICAgIDQ0NzgzLCA0NDc4OSwgNDQ3OTQsIDQ0ODAwLCA0NDgwNiwgNDQ4MTEsIDQ0ODE3LCA0NDgyMywgNDQ4MjgsIDQ0ODM0LCAKLSAgICA0NDg0MCwgNDQ4NDYsIDQ0ODUyLCA0NDg1OCwgNDQ4NjIsIDQ0ODY3LCA0NDg3MiwgNDQ4NzcsIDQ0ODgyLCA0NDg4NywgCi0gICAgNDQ4OTIsIDQ0ODk3LCA0NDkwMiwgNDQ5MDcsIDQ0OTEyLCA0NDkxNiwgNDQ5MjAsIDQ0OTI0LCA0NDkyOCwgNDQ5MzIsIAotICAgIDQ0OTM2LCA0NDk0MCwgNDQ5NDQsIDQ0OTQ4LCA0NDk1MywgNDQ5NTgsIDQ0OTYzLCA0NDk2OCwgNDQ5NzMsIDQ0OTc4LCAKLSAgICA0NDk4NywgNDQ5OTYsIDQ1MDA1LCA0NTAxNCwgNDUwMjMsIDQ1MDMyLCA0NTA0MSwgNDUwNTAsIDQ1MDU3LCA0NTA2NSwgCi0gICAgNDUwNzMsIDQ1MDgwLCA0NTA4NywgNDUwOTUsIDQ1MTAzLCA0NTExMCwgNDUxMTcsIDQ1MTI1LCA0NTEzMywgNDUxNDAsIAotICAgIDQ1MTQ3LCA0NTE1NSwgNDUxNjMsIDQ1MTcwLCA0NTE3NywgNDUxODUsIDQ1MTk0LCA0NTIwMywgNDUyMTEsIDQ1MjIwLCAKLSAgICA0NTIyOSwgNDUyMzYsIDQ1MjQzLCA0NTI1MSwgNDUyNjAsIDQ1MjY5LCA0NTI3NywgNDUyODYsIDQ1Mjk1LCA0NTMwMiwgCi0gICAgNDUzMDksIDQ1MzE4LCA0NTMyNywgNDUzMzUsIDQ1MzQzLCA0NTM1MiwgNDUzNjEsIDQ1MzY4LCA0NTM3NSwgNDUzODQsIAotICAgIDQ1MzkzLCA0NTQwMSwgNDU0MDksIDQ1NDE4LCA0NTQyNywgNDU0MzQsIDQ1NDQxLCA0NTQ1MCwgNDU0NTksIDQ1NDY3LCAKLSAgICA0NTQ3NiwgNDU0ODUsIDQ1NDkzLCA0NTUwMywgNDU1MTMsIDQ1NTIzLCA0NTUzMywgNDU1NDIsIDQ1NTUxLCA0NTU2MCwgCi0gICAgNDU1NjksIDQ1NTc2LCA0NTU4NCwgNDU1OTIsIDQ1NjAwLCA0NTYwOCwgNDU2MTMsIDQ1NjE4LCA0NTYyNywgNDU2MzUsIAotICAgIDQ1NjQyLCA0NTY1MSwgNDU2NTksIDQ1NjY2LCA0NTY3NSwgNDU2ODMsIDQ1NjkwLCA0NTY5OSwgNDU3MDcsIDQ1NzE0LCAKLSAgICA0NTcyMywgNDU3MzEsIDQ1NzM4LCA0NTc0NywgNDU3NTUsIDQ1NzYyLCA0NTc3MSwgNDU3NzksIDQ1Nzg2LCA0NTc5NSwgCi0gICAgNDU4MDMsIDQ1ODEwLCA0NTgxOSwgNDU4MjcsIDQ1ODM0LCA0NTg0MywgNDU4NTIsIDQ1ODYxLCA0NTg3MCwgNDU4ODQsIAotICAgIDQ1ODk4LCA0NTkwNSwgNDU5MTAsIDQ1OTE1LCA0NTkyMCwgNDU5MjUsIDQ1OTMwLCA0NTkzNSwgNDU5NDAsIDQ1OTQ1LCAKLSAgICA0NTk1MywgNDU5NjEsIDQ1OTY5LCA0NTk3NywgNDU5ODIsIDQ1OTg5LCA0NTk5NiwgNDYwMDMsIDQ2MDA4LCA0NjAxNiwgCi0gICAgNDYwMjMsIDQ2MDMxLCA0NjAzNSwgNDYwNDIsIDQ2MDQ4LCA0NjA1NSwgNDYwNTksIDQ2MDY1LCA0NjA3MSwgNDYwNzcsIAotICAgIDQ2MDgxLCA0NjA4NCwgNDYwODgsIDQ2MDkyLCA0NjA5OSwgNDYxMDUsIDQ2MTExLCA0NjExNywgNDYxMjMsIDQ2MTM3LCAKLSAgICA0NjE0NywgNDYxNjEsIDQ2MTc1LCA0NjE4MSwgNDYxOTEsIDQ2MjA1LCA0NjIwOCwgNDYyMTEsIDQ2MjE4LCA0NjIyNiwgCi0gICAgNDYyMzEsIDQ2MjM2LCA0NjI0NCwgNDYyNTYsIDQ2MjY4LCA0NjI3NiwgNDYyODAsIDQ2Mjg0LCA0NjI4NywgNDYyOTAsIAotICAgIDQ2Mjk0LCA0NjI5OCwgNDYzMDEsIDQ2MzA0LCA0NjMwOSwgNDYzMTQsIDQ2MzIwLCA0NjMyNiwgNDYzMzEsIDQ2MzM2LCAKLSAgICA0NjM0MiwgNDYzNDgsIDQ2MzUzLCA0NjM1OCwgNDYzNjMsIDQ2MzY4LCA0NjM3NCwgNDYzODAsIDQ2Mzg1LCA0NjM5MCwgCi0gICAgNDYzOTYsIDQ2NDAyLCA0NjQwNywgNDY0MTIsIDQ2NDE1LCA0NjQxOCwgNDY0MjcsIDQ2NDI5LCA0NjQzMSwgNDY0MzQsIAotICAgIDQ2NDM4LCA0NjQ0NCwgNDY0NDYsIDQ2NDQ5LCA0NjQ1NiwgNDY0NjMsIDQ2NDcxLCA0NjQ3OSwgNDY0ODksIDQ2NTAzLCAKLSAgICA0NjUwOCwgNDY1MTMsIDQ2NTE3LCA0NjUyMiwgNDY1MzAsIDQ2NTM4LCA0NjU0NywgNDY1NTYsIDQ2NTY1LCA0NjU3NCwgCi0gICAgNDY1NzksIDQ2NTg0LCA0NjU5MCwgNDY1OTYsIDQ2NjAyLCA0NjYwOCwgNDY2MTEsIDQ2NjE3LCA0NjYyMywgNDY2MzMsIAotICAgIDQ2NjQzLCA0NjY1MSwgNDY2NTksIDQ2NjY4LCA0NjY3NywgNDY2ODEsIDQ2Njg5LCA0NjY5NywgNDY3MDUsIDQ2NzEzLCAKLSAgICA0NjcyMiwgNDY3MzEsIDQ2NzQwLCA0Njc0OSwgNDY3NTQsIDQ2NzU5LCA0Njc2NCwgNDY3NjksIDQ2Nzc0LCA0Njc4MCwgCi0gICAgNDY3ODYsIDQ2NzkxLCA0Njc5NywgNDY3OTksIDQ2ODAxLCA0NjgwMywgNDY4MDUsIDQ2ODA4LCA0NjgxMSwgNDY4MTMsIAotICAgIDQ2ODE1LCA0NjgxNywgNDY4MjEsIDQ2ODI1LCA0NjgyNywgNDY4MjksIDQ2ODMyLCA0NjgzNSwgNDY4MzksIDQ2ODQ1LCAKLSAgICA0Njg1MSwgNDY4NTMsIDQ2ODYwLCA0Njg2NCwgNDY4NjksIDQ2ODc0LCA0Njg3NiwgNDY4ODYsIDQ2ODkyLCA0Njg5OCwgCi0gICAgNDY5MDQsIDQ2OTEwLCA0NjkxNiwgNDY5MjIsIDQ2OTI3LCA0NjkzMCwgNDY5MzMsIDQ2OTM2LCA0NjkzOCwgNDY5NDAsIAotICAgIDQ2OTQ0LCA0Njk0OCwgNDY5NTMsIDQ2OTU4LCA0Njk2MywgNDY5NjYsIDQ2OTcwLCA0Njk3NSwgNDY5NzgsIDQ2OTgyLCAKLSAgICA0Njk4NywgNDY5OTIsIDQ2OTk3LCA0NzAwMiwgNDcwMDcsIDQ3MDEyLCA0NzAxNywgNDcwMjIsIDQ3MDI3LCA0NzAzMiwgCi0gICAgNDcwMzcsIDQ3MDQyLCA0NzA0OCwgNDcwNTQsIDQ3MDYwLCA0NzA2MiwgNDcwNjUsIDQ3MDY3LCA0NzA3MCwgNDcwNzIsIAotICAgIDQ3MDc0LCA0NzA3NiwgNDcwNzgsIDQ3MDgwLCA0NzA4MiwgNDcwODQsIDQ3MDg2LCA0NzA4OCwgNDcwOTAsIDQ3MDkyLCAKLSAgICA0NzA5NCwgNDcwOTYsIDQ3MDk4LCA0NzEwMCwgNDcxMDIsIDQ3MTA0LCA0NzEwOSwgNDcxMTQsIDQ3MTE5LCA0NzEyNCwgCi0gICAgNDcxMjksIDQ3MTM0LCA0NzEzOSwgNDcxNDQsIDQ3MTQ5LCA0NzE1NCwgNDcxNTksIDQ3MTY0LCA0NzE2OSwgNDcxNzQsIAotICAgIDQ3MTc5LCA0NzE4NCwgNDcxODksIDQ3MTk0LCA0NzE5OSwgNDcyMDQsIDQ3MjA4LCA0NzIxMiwgNDcyMTYsIDQ3MjIyLCAKLSAgICA0NzIyOCwgNDcyMzMsIDQ3MjM4LCA0NzI0MywgNDcyNDgsIDQ3MjUzLCA0NzI1OCwgNDcyNjYsIDQ3Mjc0LCA0NzI4MiwgCi0gICAgNDcyOTAsIDQ3Mjk4LCA0NzMwNiwgNDczMTQsIDQ3MzIyLCA0NzMyOCwgNDczMzMsIDQ3MzM4LCA0NzM0MywgNDczNDYsIAotICAgIDQ3MzUwLCA0NzM1NCwgNDczNTgsIDQ3MzYyLCA0NzM2NiwgNDczNzAsIDQ3Mzc3LCA0NzM4NCwgNDczOTIsIDQ3NDAwLCAKLSAgICA0NzQwNSwgNDc0MTAsIDQ3NDE3LCA0NzQyNCwgNDc0MzEsIDQ3NDM4LCA0NzQ0MSwgNDc0NDQsIDQ3NDQ5LCA0NzQ1MSwgCi0gICAgNDc0NTUsIDQ3NDYwLCA0NzQ2MiwgNDc0NjQsIDQ3NDY2LCA0NzQ2OCwgNDc0NzMsIDQ3NDc2LCA0NzQ3OCwgNDc0ODMsIAotICAgIDQ3NDkwLCA0NzQ5NywgNDc1MDAsIDQ3NTA0LCA0NzUwOSwgNDc1MTQsIDQ3NTIyLCA0NzUyOCwgNDc1MzQsIDQ3NTQ2LCAKLSAgICA0NzU1MywgNDc1NjAsIDQ3NTY1LCA0NzU3MCwgNDc1NzYsIDQ3NTc5LCA0NzU4MiwgNDc1ODcsIDQ3NTg5LCA0NzU5MywgCi0gICAgNDc1OTUsIDQ3NTk3LCA0NzU5OSwgNDc2MDEsIDQ3NjAzLCA0NzYwNSwgNDc2MTAsIDQ3NjEyLCA0NzYxNCwgNDc2MTYsIAotICAgIDQ3NjE4LCA0NzYyMiwgNDc2MjQsIDQ3NjI3LCA0NzYzMiwgNDc2MzcsIDQ3NjQyLCA0NzY0NywgNDc2NTMsIDQ3NjU5LCAKLSAgICA0NzY2MSwgNDc2NjQsIDQ3NjcxLCA0NzY3OCwgNDc2ODUsIDQ3NjkyLCA0NzY5NiwgNDc3MDAsIDQ3NzAyLCA0NzcwNCwgCi0gICAgNDc3MDgsIDQ3NzE0LCA0NzcxOSwgNDc3MjEsIDQ3NzI1LCA0NzczNCwgNDc3NDIsIDQ3NzUwLCA0Nzc1NiwgNDc3NjIsIAotICAgIDQ3NzY3LCA0Nzc3MywgNDc3NzgsIDQ3NzgxLCA0Nzc5NSwgNDc3OTgsIDQ3ODAzLCA0NzgwOCwgNDc4MTQsIDQ3ODI0LCAKLSAgICA0NzgyNiwgNDc4MzIsIDQ3ODM4LCA0Nzg0MiwgNDc4NDksIDQ3ODUzLCA0Nzg1NSwgNDc4NTcsIDQ3ODYxLCA0Nzg2NywgCi0gICAgNDc4NzIsIDQ3ODc4LCA0Nzg4MCwgNDc4ODYsIDQ3ODg4LCA0Nzg5NCwgNDc4OTYsIDQ3ODk4LCA0NzkwMywgNDc5MDUsIAotICAgIDQ3OTA5LCA0NzkxNCwgNDc5MTYsIDQ3OTIxLCA0NzkyNiwgNDc5MzAsIDQ3OTM3LCAwLCA0Nzk0NywgNDc5NTMsIDQ3OTU2LCAKLSAgICA0Nzk2MiwgNDc5NjUsIDQ3OTcwLCA0Nzk3NSwgNDc5NzksIDQ3OTgxLCA0Nzk4MywgNDc5ODcsIDQ3OTkxLCA0Nzk5NSwgCi0gICAgNDc5OTksIDQ4MDA0LCA0ODAwNiwgNDgwMTEsIDQ4MDE0LCA0ODAxNywgNDgwMjAsIDQ4MDI0LCA0ODAyOCwgNDgwMzMsIAotICAgIDQ4MDM3LCA0ODA0MiwgNDgwNDcsIDQ4MDUxLCA0ODA1NiwgNDgwNjIsIDQ4MDY1LCA0ODA3MSwgNDgwNzYsIDQ4MDgwLCAKLSAgICA0ODA4NSwgNDgwOTEsIDQ4MDk3LCA0ODEwNCwgNDgxMTAsIDQ4MTE3LCA0ODEyNCwgNDgxMjYsIDQ4MTMzLCA0ODEzNywgCi0gICAgNDgxNDMsIDQ4MTQ5LCA0ODE1NCwgNDgxNjAsIDQ4MTY0LCA0ODE2OSwgNDgxNzIsIDQ4MTc3LCA0ODE4MywgNDgxOTAsIAotICAgIDQ4MTk4LCA0ODIwNSwgNDgyMTQsIDQ4MjI0LCA0ODIzMSwgNDgyMzcsIDQ4MjQxLCA0ODI0OCwgNDgyNTMsIDQ4MjYyLCAKLSAgICA0ODI2NSwgNDgyNjgsIDQ4Mjc3LCA0ODI4NywgNDgyOTQsIDQ4Mjk2LCA0ODMwMiwgNDgzMDcsIDQ4MzA5LCA0ODMxMiwgCi0gICAgNDgzMTYsIDQ4MzI0LCA0ODMzMywgNDgzMzYsIDQ4MzQxLCA0ODM0NiwgNDgzNTQsIDQ4MzYyLCA0ODM3MCwgNDgzNzgsIAotICAgIDQ4Mzg0LCA0ODM5MCwgNDgzOTYsIDQ4NDA0LCA0ODQwOSwgNDg0MTIsIDQ4NDE2LCA0ODQxOSwgNDg0MzEsIDQ4NDQxLCAKLSAgICA0ODQ1MiwgNDg0NjEsIDQ4NDcyLCA0ODQ4MiwgNDg0OTEsIDQ4NDk3LCA0ODUwNSwgNDg1MDksIDQ4NTE3LCA0ODUyMSwgCi0gICAgNDg1MjksIDQ4NTM2LCA0ODU0MywgNDg1NTIsIDQ4NTYxLCA0ODU3MSwgNDg1ODEsIDQ4NTkxLCA0ODYwMSwgNDg2MTAsIAotICAgIDQ4NjE5LCA0ODYyOSwgNDg2MzksIDQ4NjQ4LCA0ODY1NywgNDg2NjMsIDQ4NjY5LCA0ODY3NSwgNDg2ODEsIDQ4Njg3LCAKLSAgICA0ODY5MywgNDg2OTksIDQ4NzA1LCA0ODcxMSwgNDg3MTgsIDQ4NzI0LCA0ODczMCwgNDg3MzYsIDQ4NzQyLCA0ODc0OCwgCi0gICAgNDg3NTQsIDQ4NzYwLCA0ODc2NiwgNDg3NzIsIDQ4Nzc5LCA0ODc4NiwgNDg3OTMsIDQ4ODAwLCA0ODgwNywgNDg4MTQsIAotICAgIDQ4ODIxLCA0ODgyOCwgNDg4MzUsIDQ4ODQyLCA0ODg1MCwgNDg4NTUsIDQ4ODU4LCA0ODg2MiwgNDg4NjYsIDQ4ODcyLCAKLSAgICA0ODg3NSwgNDg4ODEsIDQ4ODg3LCA0ODg5MiwgNDg4OTYsIDQ4OTAxLCA0ODkwNywgNDg5MTQsIDQ4OTE3LCA0ODkyNCwgCi0gICAgNDg5MzEsIDQ4OTM1LCA0ODk0NCwgNDg5NTMsIDQ4OTU4LCA0ODk2NCwgNDg5NjksIDQ4OTc0LCA0ODk4MSwgNDg5ODgsIAotICAgIDQ4OTk2LCA0OTAwNCwgNDkwMTMsIDQ5MDE3LCA0OTAyNiwgNDkwMzEsIDQ5MDM1LCA0OTA0MiwgNDkwNDYsIDQ5MDUzLCAKLSAgICA0OTA2MSwgNDkwNjYsIDQ5MDc0LCA0OTA3OCwgNDkwODMsIDQ5MDg3LCA0OTA5MiwgNDkwOTYsIDQ5MTAxLCA0OTEwNiwgCi0gICAgNDkxMTUsIDQ5MTE3LCA0OTEyMCwgNDkxMjMsIDQ5MTMwLCA0OTEzNywgNDkxNDIsIDQ5MTUwLCA0OTE1NiwgNDkxNjIsIAotICAgIDQ5MTY3LCA0OTE3MCwgNDkxNzUsIDQ5MTgwLCA0OTE4NSwgNDkxOTMsIDQ5MTk3LCA0OTIwNCwgNDkyMTIsIDQ5MjIwLCAKLSAgICA0OTIyNSwgNDkyMzAsIDQ5MjM2LCA0OTI0MSwgNDkyNDYsIDQ5MjUyLCA0OTI1NywgNDkyNjAsIDQ5MjY0LCA0OTI2OCwgCi0gICAgNDkyNzUsIDQ5Mjg0LCA0OTI4OSwgNDkyOTgsIDQ5MzA3LCA0OTMxMywgNDkzMTksIDQ5MzI0LCA0OTMyOSwgNDkzMzQsIAotICAgIDQ5MzM5LCA0OTM0NSwgNDkzNTEsIDQ5MzU5LCA0OTM2NywgNDkzNzMsIDQ5Mzc5LCA0OTM4NCwgNDkzODksIDQ5Mzk2LCAKLSAgICA0OTQwMywgNDk0MDksIDQ5NDEyLCA0OTQxNSwgNDk0MTksIDQ5NDIzLCA0OTQyNywgNDk0MzIsIDQ5NDM4LCA0OTQ0NCwgCi0gICAgNDk0NTEsIDQ5NDU4LCA0OTQ2MywgNDk0NjcsIDQ5NDcxLCA0OTQ3NSwgNDk0NzksIDQ5NDgzLCA0OTQ4NywgNDk0OTEsIAotICAgIDQ5NDk1LCA0OTQ5OSwgNDk1MDMsIDQ5NTA3LCA0OTUxMSwgNDk1MTUsIDQ5NTE5LCA0OTUyMywgNDk1MjcsIDQ5NTMxLCAKLSAgICA0OTUzNSwgNDk1MzksIDQ5NTQzLCA0OTU0NywgNDk1NTEsIDQ5NTU1LCA0OTU1OSwgNDk1NjMsIDQ5NTY3LCA0OTU3MSwgCi0gICAgNDk1NzUsIDQ5NTc5LCA0OTU4MywgNDk1ODcsIDQ5NTkxLCA0OTU5NSwgNDk1OTksIDQ5NjAzLCA0OTYwNywgNDk2MTEsIAotICAgIDQ5NjE1LCA0OTYxOSwgNDk2MjMsIDQ5NjI3LCA0OTYzMSwgNDk2MzUsIDQ5NjM5LCA0OTY0MywgNDk2NDcsIDQ5NjUxLCAKLSAgICA0OTY1NSwgNDk2NTksIDQ5NjYzLCA0OTY2NywgNDk2NzEsIDQ5Njc1LCA0OTY3OSwgNDk2ODMsIDQ5Njg3LCA0OTY5MSwgCi0gICAgNDk2OTUsIDQ5Njk5LCA0OTcwMywgNDk3MDcsIDQ5NzExLCA0OTcxNSwgNDk3MTksIDQ5NzIzLCA0OTcyNywgNDk3MzEsIAotICAgIDQ5NzM1LCA0OTczOSwgNDk3NDMsIDQ5NzQ3LCA0OTc1MSwgNDk3NTUsIDQ5NzU5LCA0OTc2MywgNDk3NjcsIDQ5NzcxLCAKLSAgICA0OTc3NSwgNDk3NzksIDQ5NzgzLCA0OTc4NywgNDk3OTEsIDQ5Nzk1LCA0OTc5OSwgNDk4MDMsIDQ5ODA3LCA0OTgxMSwgCi0gICAgNDk4MTUsIDQ5ODE5LCA0OTgyMywgNDk4MjcsIDQ5ODMxLCA0OTgzNSwgNDk4MzksIDQ5ODQzLCA0OTg0NywgNDk4NTEsIAotICAgIDQ5ODU1LCA0OTg1OSwgNDk4NjMsIDQ5ODY3LCA0OTg3MSwgNDk4NzUsIDQ5ODc5LCA0OTg4MywgNDk4ODcsIDQ5ODkxLCAKLSAgICA0OTg5NSwgNDk4OTksIDQ5OTAzLCA0OTkwNywgNDk5MTEsIDQ5OTE1LCA0OTkxOSwgNDk5MjMsIDQ5OTI3LCA0OTkzMSwgCi0gICAgNDk5MzUsIDQ5OTM5LCA0OTk0MywgNDk5NDcsIDQ5OTUxLCA0OTk1NSwgNDk5NTksIDQ5OTYzLCA0OTk2NywgNDk5NzEsIAotICAgIDQ5OTc1LCA0OTk3OSwgNDk5ODMsIDQ5OTg3LCA0OTk5MSwgNDk5OTUsIDQ5OTk5LCA1MDAwMywgNTAwMDcsIDUwMDExLCAKLSAgICA1MDAxNSwgNTAwMTksIDUwMDIzLCA1MDAyNywgNTAwMzEsIDUwMDM1LCA1MDAzOSwgNTAwNDMsIDUwMDQ3LCA1MDA1MSwgCi0gICAgNTAwNTUsIDUwMDU5LCA1MDA2MywgNTAwNjcsIDUwMDcxLCA1MDA3NSwgNTAwNzksIDUwMDgzLCA1MDA4NywgNTAwOTEsIAotICAgIDUwMDk1LCA1MDA5OSwgNTAxMDMsIDUwMTA3LCA1MDExMSwgNTAxMTUsIDUwMTE5LCA1MDEyMywgNTAxMjcsIDUwMTMxLCAKLSAgICA1MDEzNSwgNTAxMzksIDUwMTQzLCA1MDE0NywgNTAxNTEsIDUwMTU1LCA1MDE1OSwgNTAxNjMsIDUwMTY3LCA1MDE3MSwgCi0gICAgNTAxNzUsIDUwMTc5LCA1MDE4MywgNTAxODcsIDUwMTkxLCA1MDE5NSwgNTAxOTksIDUwMjAzLCA1MDIwNywgNTAyMTEsIAotICAgIDUwMjE1LCA1MDIxOSwgNTAyMjMsIDUwMjI3LCA1MDIzMSwgNTAyMzUsIDUwMjM5LCA1MDI0MywgNTAyNDcsIDUwMjUxLCAKLSAgICA1MDI1NSwgNTAyNTksIDUwMjYzLCA1MDI2NywgNTAyNzEsIDUwMjc1LCA1MDI3OSwgNTAyODMsIDUwMjg3LCA1MDI5MSwgCi0gICAgNTAyOTUsIDUwMjk5LCA1MDMwMywgNTAzMDcsIDUwMzExLCA1MDMxNSwgNTAzMTksIDUwMzIzLCA1MDMyNywgNTAzMzEsIAotICAgIDUwMzM1LCA1MDMzOSwgNTAzNDMsIDUwMzQ3LCA1MDM1MSwgNTAzNTUsIDUwMzU5LCA1MDM2MywgNTAzNjcsIDUwMzcxLCAKLSAgICA1MDM3NSwgNTAzNzksIDUwMzgzLCA1MDM4NywgNTAzOTEsIDUwMzk1LCA1MDM5OSwgNTA0MDMsIDUwNDA3LCA1MDQxMSwgCi0gICAgNTA0MTUsIDUwNDE5LCA1MDQyMywgNTA0MjcsIDUwNDMxLCA1MDQzNSwgNTA0MzksIDUwNDQzLCA1MDQ0NywgNTA0NTEsIAotICAgIDUwNDU1LCA1MDQ1OSwgNTA0NjMsIDUwNDY3LCA1MDQ3MSwgNTA0NzUsIDUwNDc5LCA1MDQ4MywgNTA0ODcsIDUwNDk0LCAKLSAgICA1MDUwMiwgNTA1MDgsIDUwNTE0LCA1MDUyMSwgNTA1MjgsIDUwNTM0LCA1MDU0MCwgNTA1NDYsIDUwNTUyLCA1MDU1NywgCi0gICAgNTA1NjIsIDUwNTY3LCA1MDU3MiwgNTA1NzgsIDUwNTg0LCA1MDU5MiwgNTA1OTksIDUwNjA1LCA1MDYxMSwgNTA2MTksIAotICAgIDUwNjI4LCA1MDYzNSwgNTA2NDUsIDUwNjU2LCA1MDY1OSwgNTA2NjIsIDUwNjY2LCA1MDY3MCwgNTA2NzcsIDUwNjg0LCAKLSAgICA1MDY5NSwgNTA3MDYsIDUwNzE2LCA1MDcyNiwgNTA3MzMsIDUwNzQwLCA1MDc0NywgNTA3NTQsIDUwNzY1LCA1MDc3NiwgCi0gICAgNTA3ODcsIDUwNzk4LCA1MDgwOCwgNTA4MTgsIDUwODMwLCA1MDg0MiwgNTA4NTMsIDUwODY0LCA1MDg3NiwgNTA4ODgsIAotICAgIDUwODk3LCA1MDkwNywgNTA5MTcsIDUwOTI4LCA1MDkzOSwgNTA5NDYsIDUwOTUzLCA1MDk2MCwgNTA5NjcsIDUwOTc3LCAKLSAgICA1MDk4NywgNTA5OTUsIDUxMDAzLCA1MTAxMCwgNTEwMTcsIDUxMDI0LCA1MTAzMSwgNTEwMzgsIDUxMDQzLCA1MTA0OCwgCi0gICAgNTEwNTQsIDUxMDYyLCA1MTA3MiwgNTEwODIsIDUxMDkyLCA1MTEwMiwgNTExMTIsIDUxMTIyLCA1MTEzMiwgNTExNDIsIAotICAgIDUxMTUyLCA1MTE2MiwgNTExNzIsIDUxMTgzLCA1MTE5NCwgNTEyMDQsIDUxMjE0LCA1MTIyNSwgNTEyMzYsIDUxMjQ2LCAKLSAgICA1MTI1NiwgNTEyNjcsIDUxMjc4LCA1MTI4OCwgNTEyOTgsIDUxMzA5LCA1MTMyMCwgNTEzMzYsIDUxMzU1LCA1MTM3MSwgCi0gICAgNTEzOTAsIDUxNDA2LCA1MTQyMiwgNTE0MzgsIDUxNDU0LCA1MTQ2NSwgNTE0NzcsIDUxNDg4LCA1MTUwMCwgNTE1MTksIAotICAgIDUxNTM4LCA1MTU0NiwgNTE1NTIsIDUxNTU5LCA1MTU2NiwgNTE1NzMsIDUxNTgwLCA1MTU4NSwgNTE1OTEsIDUxNTk2LCAKLSAgICA1MTYwMSwgNTE2MDcsIDUxNjEyLCA1MTYxNywgNTE2MjIsIDUxNjI3LCA1MTYzMiwgNTE2MzksIDUxNjQ0LCA1MTY1MSwgCi0gICAgNTE2NTYsIDUxNjYxLCA1MTY2NSwgNTE2NjksIDUxNjc2LCA1MTY4MywgNTE2OTAsIDUxNjk3LCA1MTcwNCwgNTE3MTEsIAotICAgIDUxNzI0LCA1MTczNywgNTE3NTAsIDUxNzYzLCA1MTc3MSwgNTE3NzksIDUxNzg1LCA1MTc5MSwgNTE3OTgsIDUxODA1LCAKLSAgICA1MTgxMiwgNTE4MTksIDUxODIzLCA1MTgyOCwgNTE4MzYsIDUxODQ0LCA1MTg1MiwgNTE4NTksIDUxODYzLCA1MTg3MSwgCi0gICAgNTE4NzksIDUxODgzLCA1MTg4NywgNTE4OTIsIDUxODk5LCA1MTkwNywgNTE5MTUsIDUxOTM0LCA1MTk1MywgNTE5NzIsIAotICAgIDUxOTkxLCA1MjAxMCwgNTIwMjksIDUyMDQ4LCA1MjA2NywgNTIwNzMsIDUyMDgwLCA1MjA4OSwgNTIwOTcsIDUyMTA1LCAKLSAgICA1MjExMCwgNTIxMTMsIDUyMTE2LCA1MjEyMSwgNTIxMjQsIDUyMTQzLCA1MjE1MCwgNTIxNTYsIDUyMTYyLCA1MjE2NiwgCi0gICAgNTIxNjksIDUyMTcyLCA1MjE3NSwgNTIxODcsIDUyMjAwLCA1MjIwNywgNTIyMTQsIDUyMjE3LCA1MjIyMSwgNTIyMjQsIAotICAgIDUyMjI5LCA1MjIzNCwgNTIyMzksIDUyMjQ1LCA1MjI1NCwgNTIyNjEsIDUyMjY4LCA1MjI3NiwgNTIyODMsIDUyMjkwLCAKLSAgICA1MjI5MywgNTIyOTksIDUyMzA1LCA1MjMwOCwgNTIzMTEsIDUyMzE2LCA1MjMyMSwgNTIzMjcsIDUyMzMzLCA1MjMzNywgCi0gICAgNTIzNDIsIDUyMzQ5LCA1MjM1MywgNTIzNTksIDUyMzYzLCA1MjM2NywgNTIzNzUsIDUyMzg3LCA1MjM5NiwgNTI0MDAsIAotICAgIDUyNDAyLCA1MjQxMSwgNTI0MjAsIDUyNDI2LCA1MjQyOSwgNTI0MzUsIDUyNDQxLCA1MjQ0NiwgNTI0NTEsIDUyNDU2LCAKLSAgICA1MjQ2MSwgNTI0NjYsIDUyNDcxLCA1MjQ3MywgNTI0NzksIDUyNDg0LCA1MjQ5MSwgNTI0OTUsIDUyNTAxLCA1MjUwNCwgCi0gICAgNTI1MDgsIDUyNTE1LCA1MjUyMiwgNTI1MjQsIDUyNTI2LCA1MjUzMiwgNTI1MzgsIDUyNTQ0LCA1MjU1MywgNTI1NjIsIAotICAgIDUyNTY5LCA1MjU3NiwgNTI1ODIsIDUyNTg4LCA1MjU5MywgNTI1OTgsIDUyNjAzLCA1MjYwOSwgNTI2MTUsIDUyNjIwLCAKLSAgICA1MjYyNywgNTI2MzEsIDUyNjM1LCA1MjY0OCwgNTI2NjEsIDUyNjczLCA1MjY4MiwgNTI2ODgsIDUyNjk1LCA1MjcwMCwgCi0gICAgNTI3MDUsIDUyNzEwLCA1MjcxNSwgNTI3MjAsIDUyNzIyLCA1MjcyOSwgNTI3MzYsIDUyNzQzLCA1Mjc1MCwgNTI3NTcsIAotICAgIDUyNzY1LCA1Mjc3MSwgNTI3NzYsIDUyNzgyLCA1Mjc4OCwgNTI3OTQsIDUyODAxLCA1MjgwNywgNTI4MTUsIDUyODIzLCAKLSAgICA1MjgzMSwgNTI4MzksIDUyODQ2LCA1Mjg1MiwgNTI4NTgsIDUyODY3LCA1Mjg3MSwgNTI4ODAsIDUyODg5LCA1Mjg5OCwgCi0gICAgNTI5MDYsIDUyOTEwLCA1MjkxNiwgNTI5MjMsIDUyOTMwLCA1MjkzNCwgNTI5NDAsIDUyOTQ3LCA1Mjk1MiwgNTI5NTcsIAotICAgIDUyOTYzLCA1Mjk2OCwgNTI5NzMsIDUyOTgwLCA1Mjk4NywgNTI5OTIsIDUyOTk3LCA1MzAwNSwgNTMwMTMsIDUzMDIzLCAKLSAgICA1MzAzMywgNTMwNDAsIDUzMDQ3LCA1MzA1MSwgNTMwNTUsIDUzMDY3LCA1MzA3MywgNTMwNzksIDUzMDg0LCA1MzA4OSwgCi0gICAgNTMwOTYsIDUzMTAzLCA1MzEwOSwgNTMxMTUsIDUzMTI0LCA1MzEzMiwgNTMxNDAsIDUzMTQ3LCA1MzE1NCwgNTMxNjEsIAotICAgIDUzMTY3LCA1MzE3NCwgNTMxODAsIDUzMTg3LCA1MzE5NCwgNTMyMDEsIDUzMjA4LCA1MzIxNCwgNTMyMTksIDUzMjI4LCAKLSAgICA1MzIzOCwgNTMyNDUsIDUzMjU0LCA1MzI2MCwgNTMyNjUsIDUzMjcwLCA1MzI4MCwgNTMyODYsIDUzMjkyLCA1MzI5OCwgCi0gICAgNTMzMDYsIDUzMzExLCA1MzMxOCwgNTMzMjUsIDUzMzM2LCA1MzM0MywgNTMzNTAsIDUzMzU3LCA1MzM2NCwgNTMzNzEsIAotICAgIDUzMzc4LCA1MzM4NSwgNTMzOTcsIDUzNDA5LCA1MzQyMCwgNTM0MzEsIDUzNDQ0LCA1MzQ1NywgNTM0NjIsIDUzNDY3LCAKLSAgICA1MzQ3NiwgNTM0ODUsIDUzNDkyLCA1MzQ5OSwgNTM1MDgsIDUzNTE3LCA1MzUyNSwgNTM1MzMsIDUzNTQxLCA1MzU0OSwgCi0gICAgNTM1NTksIDUzNTY5LCA1MzU4MywgNTM1OTcsIDUzNjA1LCA1MzYxMywgNTM2MjUsIDUzNjM3LCA1MzY0NSwgNTM2NTMsIAotICAgIDUzNjYzLCA1MzY3MywgNTM2NzgsIDUzNjgzLCA1MzY5MiwgNTM3MDEsIDUzNzA2LCA1MzcxMSwgNTM3MTksIDUzNzI1LCAKLSAgICA1MzczMSwgNTM3MzksIDUzNzQ3LCA1Mzc2MCwgNTM3NzMsIDUzNzc3LCA1Mzc4MSwgNTM3ODgsIDUzNzk1LCA1MzgwMiwgCi0gICAgNTM4MTAsIDUzODE4LCA1MzgyNywgNTM4MzYsIDUzODQyLCA1Mzg0OCwgNTM4NTUsIDUzODYyLCA1Mzg2OSwgNTM4NzYsIAotICAgIDUzODg1LCA1Mzg5NCwgNTM4OTcsIDUzOTAwLCA1MzkwNSwgNTM5MTAsIDUzOTE2LCA1MzkyMiwgNTM5MjksIDUzOTM2LCAKLSAgICA1Mzk0NiwgNTM5NTYsIDUzOTYzLCA1Mzk3MCwgNTM5NzgsIDUzOTg2LCA1Mzk5NCwgNTQwMDIsIDU0MDEwLCA1NDAxOCwgCi0gICAgNTQwMjQsIDU0MDMwLCA1NDAzNCwgNTQwMzgsIDU0MDQ1LCA1NDA1MiwgNTQwNTcsIDU0MDYyLCA1NDA2NywgNTQwNzIsIAotICAgIDU0MDc4LCA1NDA5MiwgNTQwOTksIDU0MTA2LCA1NDExMCwgNTQxMTIsIDU0MTE0LCA1NDExOSwgNTQxMjQsIDU0MTI5LCAKLSAgICA1NDEzNCwgNTQxNDIsIDU0MTQ5LCA1NDE1NiwgNTQxNjQsIDU0MTc2LCA1NDE4NCwgNTQxOTIsIDU0MjAzLCA1NDIwNywgCi0gICAgNTQyMTEsIDU0MjE3LCA1NDIyNSwgNTQyMzgsIDU0MjQ1LCA1NDI1MiwgNTQyNTksIDU0MjY0LCA1NDI3MSwgNTQyODAsIAotICAgIDU0Mjg4LCA1NDI5NCwgNTQzMDAsIDU0MzA2LCA1NDMxNSwgNTQzMjQsIDU0MzMyLCA1NDM0MSwgNTQzNDYsIDU0MzQ5LCAKLSAgICA1NDM1NCwgNTQzNjAsIDU0MzY2LCA1NDM3MiwgNTQzNzgsIDU0MzgyLCA1NDM4NSwgNTQzODksIDU0MzkzLCA1NDM5OSwgCi0gICAgNTQ0MDUsIDU0NDExLCA1NDQxNywgNTQ0MjEsIDU0NDI1LCA1NDQzMiwgNTQ0MzksIDU0NDQ2LCA1NDQ1MywgNTQ0NjAsIAotICAgIDU0NDY3LCA1NDQ3NywgNTQ0ODcsIDU0NDk0LCA1NDUwMSwgNTQ1MDksIDU0NTE3LCA1NDUyMSwgNTQ1MjYsIDU0NTMxLCAKLSAgICA1NDUzNywgNTQ1NDMsIDU0NTQ2LCA1NDU0OSwgNTQ1NTIsIDU0NTU1LCA1NDU1OSwgNTQ1NjQsIDU0NTY5LCA1NDU3NCwgCi0gICAgNTQ1NzksIDU0NTg0LCA1NDU4OCwgNTQ1OTIsIDU0NTk2LCA1NDYwMCwgNTQ2MDQsIDU0NjA4LCA1NDYxMiwgNTQ2MTgsIAotICAgIDU0NjIyLCA1NDYyOCwgNTQ2MzMsIDU0NjQwLCA1NDY0OCwgNTQ2NTUsIDU0NjYzLCA1NDY3MCwgNTQ2NzgsIDU0Njg3LCAKLSAgICA1NDY5NCwgNTQ3MDQsIDU0NzE1LCA1NDcyMSwgNTQ3MzAsIDU0NzM2LCA1NDc0NSwgNTQ3NTQsIDU0NzYwLCA1NDc2NiwgCi0gICAgNTQ3NzAsIDU0Nzc0LCA1NDc4MywgNTQ3OTIsIDU0Nzk5LCA1NDgwNiwgNTQ4MTUsIDAsIDAsIDAsIDU0ODI0LCA1NDgyOSwgCi0gICAgNTQ4MzMsIDU0ODM3LCA1NDg0MiwgNTQ4NDcsIDU0ODUyLCA1NDg2MCwgNTQ4NjgsIDU0ODcxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3NTA1NiwgNzUwNjMsIDc1MDcwLCA3NTA3NiwgNzUwODQsIDc1MDkyLCA3NTEwMCwgNzUxMDgsIDc1MTE2LCAKKyAgICA3NTEyNCwgNzUxMzAsIDc1MTM2LCA3NTE0MywgNzUxNDksIDc1MTU1LCA3NTE2MSwgNzUxNjgsIDc1MTc1LCA3NTE4MiwgCisgICAgNzUxODksIDc1MTk2LCA3NTIwMywgNzUyMTAsIDc1MjE3LCA3NTIyNCwgNzUyMzEsIDc1MjM4LCA3NTI0NSwgNzUyNTIsIAorICAgIDc1MjU5LCA3NTI2NSwgNzUyNzIsIDc1Mjc5LCA3NTI4NiwgNzUyOTMsIDc1MzAwLCA3NTMwNywgNzUzMTQsIDc1MzIxLCAKKyAgICA3NTMyOCwgNzUzMzUsIDc1MzQyLCA3NTM0OSwgNzUzNTYsIDc1MzYzLCA3NTM3MCwgNzUzNzcsIDc1Mzg0LCA3NTM5MSwgCisgICAgNzUzOTksIDc1NDA3LCA3NTQxNSwgNzU0MjMsIDAsIDAsIDAsIDAsIDc1NDMxLCA3NTQzOSwgNzU0NDcsIDc1NDU1LCAKKyAgICA3NTQ2MywgNzU0NzEsIDc1NDc5LCA3NTQ4NSwgNzU0OTEsIDc1NDk3LCAwLCAwLCAwLCAwLCAwLCAwLCA3NTUwMywgNzU1MDcsIAorICAgIDc1NTEyLCA3NTUxNywgNzU1MjIsIDc1NTI3LCA3NTUzMiwgNzU1MzcsIDc1NTQyLCA3NTU0NywgNzU1NTIsIDc1NTU3LCAKKyAgICA3NTU2MiwgNzU1NjYsIDc1NTcxLCA3NTU3NiwgNzU1ODAsIDc1NTg1LCA3NTU5MCwgNzU1OTUsIDc1NjAwLCA3NTYwNSwgCisgICAgNzU2MTAsIDc1NjE1LCA3NTYxOSwgNzU2MjQsIDc1NjI5LCA3NTYzNCwgNzU2MzksIDc1NjQzLCA3NTY0NywgNzU2NTEsIAorICAgIDc1NjU1LCA3NTY1OSwgNzU2NjMsIDc1NjY4LCA3NTY3MywgNzU2NzgsIDc1NjgzLCA3NTY4OCwgNzU2OTUsIDc1NzAxLCAKKyAgICA3NTcwNiwgNzU3MTEsIDc1NzE2LCA3NTcyMSwgNzU3MjcsIDc1NzM0LCA3NTc0MCwgNzU3NDcsIDc1NzU0LCA3NTc2MSwgCisgICAgNzU3NjYsIDc1NzczLCA3NTc3OSwgNzU3ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NzkwLCA3NTc5NSwgNzU4MDAsIAorICAgIDc1ODA0LCA3NTgwOSwgNzU4MTMsIDc1ODE4LCA3NTgyMiwgNzU4MjcsIDc1ODMyLCA3NTgzOCwgNzU4NDMsIDc1ODQ5LCAKKyAgICA3NTg1MywgNzU4NTgsIDc1ODYzLCA3NTg2NywgNzU4NzIsIDc1ODc3LCA3NTg4MSwgNzU4ODYsIDc1ODkxLCA3NTg5NiwgCisgICAgNzU5MDEsIDc1OTA2LCA3NTkxMSwgNzU5MTYsIDc1OTIxLCA3NTkyNiwgNzU5MzEsIDc1OTM2LCA3NTk0MSwgNzU5NDYsIAorICAgIDc1OTUxLCA3NTk1NiwgNzU5NjEsIDc1OTY2LCA3NTk3MSwgNzU5NzYsIDc1OTgwLCA3NTk4NSwgNzU5OTAsIDc1OTk1LCAKKyAgICA3NTk5OSwgNzYwMDMsIDc2MDA4LCA3NjAxMywgNzYwMTgsIDc2MDIzLCA3NjAyOCwgNzYwMzMsIDc2MDM3LCA3NjA0MiwgCisgICAgNzYwNDgsIDc2MDU0LCA3NjA1OSwgNzYwNjUsIDc2MDcwLCA3NjA3NiwgNzYwODIsIDc2MDg5LCA3NjA5NSwgNzYxMDIsIAorICAgIDc2MTA3LCA3NjExMywgNzYxMTksIDc2MTI0LCA3NjEzMCwgNzYxMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDc2MTQxLCA3NjE0NSwgNzYxNTAsIDc2MTU1LCA3NjE1OSwgNzYxNjMsIDc2MTY3LCA3NjE3MSwgNzYxNzUsIDc2MTc5LCAKKyAgICA3NjE4NCwgNzYxODgsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MTkzLCA3NjE5OCwgNzYyMDIsIDc2MjA2LCA3NjIxMCwgNzYyMTQsIAorICAgIDc2MjE4LCA3NjIyMiwgNzYyMjcsIDc2MjMxLCA3NjIzNiwgNzYyNDAsIDc2MjQ0LCA3NjI0OCwgNzYyNTMsIDc2MjU3LCAKKyAgICA3NjI2MiwgNzYyNjcsIDc2MjcyLCA3NjI3OCwgNzYyODQsIDc2MjkxLCA3NjI5NiwgNzYzMDEsIDc2MzA3LCA3NjMxMSwgCisgICAgNzYzMTYsIDc2MzE5LCA3NjMyMiwgNzYzMjYsIDAsIDAsIDc2MzMxLCA3NjMzOCwgNzYzNDQsIDc2MzUwLCA3NjM1NiwgCisgICAgNzYzNjIsIDc2MzY4LCA3NjM3NCwgNzYzODEsIDc2Mzg3LCA3NjM5NCwgNzY0MDAsIDc2NDA3LCA3NjQxNCwgNzY0MjEsIAorICAgIDc2NDI4LCA3NjQzNSwgNzY0NDIsIDc2NDQ5LCA3NjQ1NiwgNzY0NjMsIDc2NDcwLCA3NjQ3NiwgNzY0ODMsIDc2NDg5LCAKKyAgICA3NjQ5NiwgNzY1MDMsIDc2NTEwLCA3NjUxNiwgNzY1MjMsIDc2NTMwLCA3NjUzNywgNzY1NDMsIDc2NTUwLCA3NjU1NywgCisgICAgNzY1NjMsIDc2NTcwLCA3NjU3NiwgNzY1ODMsIDc2NTkwLCA3NjU5NiwgNzY2MDIsIDc2NjA5LCA3NjYxNSwgNzY2MjIsIAorICAgIDc2NjI5LCA3NjYzOCwgNzY2NDUsIDc2NjUyLCA3NjY1NiwgNzY2NjEsIDc2NjY2LCA3NjY3MSwgNzY2NzYsIDc2NjgxLCAKKyAgICA3NjY4NSwgNzY2OTAsIDc2Njk0LCA3NjY5OSwgNzY3MDQsIDc2NzA5LCA3NjcxNCwgNzY3MTksIDc2NzI0LCA3NjcyOCwgCisgICAgNzY3MzMsIDc2NzM3LCA3Njc0MiwgNzY3NDcsIDc2NzUyLCA3Njc1NywgNzY3NjEsIDc2NzY2LCA3Njc3MSwgNzY3NzYsIAorICAgIDc2NzgyLCA3Njc4NywgNzY3OTMsIDc2Nzk5LCA3NjgwNSwgNzY4MTEsIDc2ODE3LCA3NjgyMiwgNzY4MjgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2ODMyLCA3NjgzNywgNzY4NDEsIDc2ODQ1LCA3Njg0OSwgNzY4NTMsIDc2ODU3LCAKKyAgICA3Njg2MSwgNzY4NjUsIDc2ODY5LCA3Njg3MywgNzY4NzcsIDc2ODgxLCA3Njg4NSwgNzY4ODksIDc2ODkzLCA3Njg5NywgCisgICAgNzY5MDEsIDc2OTA1LCA3NjkwOSwgNzY5MTMsIDc2OTE3LCA3NjkyMSwgNzY5MjUsIDc2OTI5LCA3NjkzMywgNzY5MzcsIAorICAgIDc2OTQxLCA3Njk0NSwgNzY5NDksIDAsIDAsIDAsIDc2OTUzLCA3Njk1NywgNzY5NjEsIDc2OTY1LCA3Njk2OSwgNzY5NzIsIAorICAgIDc2OTc4LCA3Njk4MSwgNzY5ODUsIDc2OTg4LCA3Njk5NCwgNzcwMDAsIDc3MDA4LCA3NzAxMSwgNzcwMTUsIDc3MDE4LCAKKyAgICA3NzAyMSwgNzcwMjcsIDc3MDMzLCA3NzAzNywgNzcwNDMsIDc3MDQ3LCA3NzA1MSwgNzcwNTcsIDc3MDYxLCA3NzA2NywgCisgICAgNzcwNzMsIDc3MDc3LCA3NzA4MSwgNzcwODcsIDc3MDkxLCA3NzA5NywgNzcxMDMsIDc3MTA3LCA3NzExMywgNzcxMTcsIAorICAgIDc3MTIzLCA3NzEyNywgNzcxMzAsIDc3MTM2LCA3NzE0MCwgNzcxNDYsIDc3MTQ5LCA3NzE1MiwgNzcxNTYsIDc3MTYyLCAKKyAgICA3NzE2NiwgNzcxNzAsIDc3MTc2LCA3NzE4MiwgNzcxODYsIDc3MTg5LCA3NzE5NSwgNzcyMDAsIDc3MjA1LCA3NzIxMCwgCisgICAgNzcyMTcsIDc3MjIyLCA3NzIyOSwgNzcyMzQsIDc3MjQxLCA3NzI0NiwgNzcyNTEsIDc3MjU2LCA3NzI2MSwgNzcyNjQsIAorICAgIDc3MjY4LCA3NzI3MiwgNzcyNzcsIDc3MjgyLCA3NzI4NywgNzcyOTIsIDc3Mjk3LCA3NzMwMiwgNzczMDcsIDc3MzEyLCAKKyAgICA3NzMxOSwgNzczMjQsIDAsIDc3MzMxLCA3NzMzNCwgNzczMzgsIDc3MzQxLCA3NzM0NCwgNzczNDcsIDc3MzUwLCA3NzM1MywgCisgICAgNzczNTYsIDc3MzYwLCA3NzM2MywgMCwgMCwgMCwgMCwgNzczNjcsIDc3Mzc0LCA3NzM3OSwgNzczODUsIDc3MzkxLCAKKyAgICA3NzM5NywgNzc0MDMsIDc3NDA5LCA3NzQxNSwgNzc0MjIsIDc3NDI5LCA3NzQzNiwgNzc0NDMsIDc3NDUwLCA3NzQ1NywgCisgICAgNzc0NjQsIDc3NDcxLCA3NzQ3OCwgNzc0ODUsIDc3NDkyLCA3NzQ5OCwgNzc1MDQsIDc3NTEwLCA3NzUxNiwgNzc1MjIsIAorICAgIDc3NTI4LCA3NzUzNSwgNzc1NDEsIDc3NTQ4LCA3NzU1NSwgNzc1NjIsIDc3NTY5LCA3NzU3NiwgMCwgNzc1ODMsIDc3NTg3LCAKKyAgICA3NzU5MSwgNzc1OTUsIDc3NTk5LCA3NzYwNCwgNzc2MDgsIDc3NjEyLCA3NzYxNywgNzc2MjIsIDc3NjI3LCA3NzYzMiwgCisgICAgNzc2MzcsIDc3NjQyLCA3NzY0NywgNzc2NTIsIDc3NjU3LCA3NzY2MiwgNzc2NjcsIDc3NjcyLCA3NzY3NywgNzc2ODIsIAorICAgIDc3Njg3LCA3NzY5MiwgNzc2OTcsIDc3NzAyLCA3NzcwNywgNzc3MTEsIDc3NzE2LCA3NzcyMSwgNzc3MjYsIDc3NzMxLCAKKyAgICA3NzczNiwgNzc3NDAsIDc3NzQ1LCA3Nzc0OSwgNzc3NTQsIDc3NzU5LCA3Nzc2NCwgNzc3NjksIDc3Nzc0LCA3Nzc3OCwgCisgICAgNzc3ODQsIDc3Nzg5LCA3Nzc5NSwgNzc4MDEsIDc3ODA2LCA3NzgxMiwgNzc4MTcsIDc3ODIzLCA3NzgyOSwgNzc4MzUsIAorICAgIDc3ODQwLCA3Nzg0NiwgNzc4NTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODU4LCA3Nzg2NCwgNzc4NzAsIAorICAgIDc3ODc2LCA3Nzg4MywgNzc4ODksIDc3ODk1LCA3NzkwMSwgNzc5MDcsIDc3OTEzLCA3NzkxOCwgNzc5MjMsIDc3OTI5LCAKKyAgICA3NzkzNiwgMCwgMCwgNzc5NDMsIDc3OTQ4LCA3Nzk1MiwgNzc5NTYsIDc3OTYwLCA3Nzk2NCwgNzc5NjgsIDc3OTcyLCAKKyAgICA3Nzk3NywgNzc5ODEsIDAsIDAsIDc3OTg2LCA3Nzk5MiwgNzc5OTgsIDc4MDA1LCA3ODAxMywgNzgwMTksIDc4MDI1LCAKKyAgICA3ODAzMSwgNzgwMzcsIDc4MDQzLCA3ODA0OSwgNzgwNTUsIDc4MDYxLCA3ODA2NywgNzgwNzMsIDc4MDc5LCA3ODA4NSwgCisgICAgNzgwOTEsIDc4MDk2LCA3ODEwMiwgNzgxMDgsIDc4MTE1LCA3ODEyMSwgNzgxMjcsIDc4MTMzLCA3ODE0MCwgNzgxNDcsIAorICAgIDc4MTU0LCA3ODE2MCwgNzgxNjUsIDc4MTcwLCA3ODE3NiwgNzgxODQsIDc4MTkxLCA3ODE5OCwgNzgyMDYsIDc4MjE0LCAKKyAgICA3ODIyMSwgNzgyMjgsIDc4MjM1LCA3ODI0MiwgNzgyNDksIDc4MjU2LCA3ODI2MywgNzgyNzAsIDc4Mjc3LCA3ODI4NCwgCisgICAgNzgyOTEsIDc4Mjk4LCA3ODMwNSwgNzgzMTIsIDc4MzE5LCA3ODMyNiwgNzgzMzMsIDc4MzQwLCA3ODM0NywgNzgzNTQsIAorICAgIDc4MzYwLCA3ODM2NiwgNzgzNzMsIDc4MzgwLCA3ODM4NywgNzgzOTQsIDc4NDAxLCA3ODQwOCwgNzg0MTUsIDc4NDIyLCAKKyAgICA3ODQyOSwgNzg0MzYsIDc4NDQzLCA3ODQ1MCwgNzg0NTcsIDc4NDY0LCA3ODQ3MSwgNzg0NzgsIDc4NDg1LCA3ODQ5MiwgCisgICAgNzg0OTksIDc4NTA2LCA3ODUxMywgNzg1MjAsIDc4NTI3LCA3ODUzNCwgNzg1NDAsIDc4NTQ2LCA3ODU1MywgNzg1NTksIAorICAgIDc4NTY0LCA3ODU3MCwgNzg1NzUsIDc4NTgwLCA3ODU4NSwgNzg1OTIsIDc4NTk4LCA3ODYwNCwgNzg2MTAsIDc4NjE2LCAKKyAgICA3ODYyMiwgNzg2MjgsIDc4NjM0LCA3ODY0MiwgNzg2NTAsIDc4NjU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODY2NiwgNzg2NzIsIDc4Njc4LCA3ODY4NCwgCisgICAgNzg2OTIsIDc4NzAwLCA3ODcwNiwgNzg3MTIsIDc4NzE5LCA3ODcyNiwgNzg3MzMsIDc4NzQwLCA3ODc0NywgNzg3NTQsIAorICAgIDc4NzYxLCA3ODc2OCwgNzg3NzUsIDc4NzgzLCA3ODc5MSwgNzg3OTksIDc4ODA3LCA3ODgxNSwgNzg4MjEsIDc4ODI5LCAKKyAgICA3ODgzNSwgNzg4NDMsIDc4ODUyLCA3ODg2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg4NjYsIDc4ODcwLCAKKyAgICA3ODg3NCwgNzg4NzgsIDc4ODgyLCA3ODg4NiwgMCwgMCwgNzg4OTAsIDc4ODk0LCA3ODg5OCwgNzg5MDIsIDc4OTA2LCAKKyAgICA3ODkxMCwgMCwgMCwgNzg5MTQsIDc4OTE4LCA3ODkyMiwgNzg5MjYsIDc4OTMwLCA3ODkzNCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzg5MzgsIDc4OTQyLCA3ODk0NiwgNzg5NTAsIDc4OTU0LCA3ODk1OCwgNzg5NjIsIDAsIDc4OTY2LCAKKyAgICA3ODk3MCwgNzg5NzQsIDc4OTc4LCA3ODk4MiwgNzg5ODYsIDc4OTkwLCAwLCA3ODk5NCwgNzkwMDEsIDc5MDA3LCA3OTAxMywgCisgICAgNzkwMTksIDc5MDI2LCA3OTAzMywgNzkwNDIsIDc5MDUzLCA3OTA2MywgNzkwNzIsIDc5MDgwLCA3OTA4OCwgNzkwOTYsIAorICAgIDc5MTAyLCA3OTExMCwgNzkxMTcsIDc5MTI0LCA3OTEzMywgNzkxNDQsIDc5MTUyLCA3OTE2MiwgNzkxNjgsIDc5MTc4LCAKKyAgICA3OTE4NywgNzkxOTIsIDc5MjAwLCA3OTIwOSwgNzkyMTQsIDc5MjIzLCA3OTIzMCwgNzkyNDAsIDc5MjUyLCA3OTI1NywgCisgICAgNzkyNjQsIDc5MjcxLCA3OTI3NiwgNzkyODYsIDc5Mjk2LCA3OTMwNiwgNzkzMTYsIDc5MzMxLCA3OTM0NCwgNzkzNTUsIAorICAgIDc5MzYzLCA3OTM2OCwgNzkzNzksIDc5Mzg4LCA3OTM5NSwgNzk0MDIsIDc5NDA4LCA3OTQxNCwgNzk0MTksIDc5NDI2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTQzMiwgNzk0MzYsIDc5NDQwLCA3OTQ0NCwgNzk0NDgsIDc5NDUyLCAKKyAgICA3OTQ1NywgNzk0NjIsIDc5NDY2LCA3OTQ3MSwgNzk0NzYsIDc5NDgxLCA3OTQ4NiwgNzk0OTEsIDc5NDk1LCA3OTUwMCwgCisgICAgNzk1MDUsIDc5NTEwLCA3OTUxNSwgNzk1MjAsIDc5NTI1LCA3OTUzMCwgNzk1MzUsIDc5NTQwLCA3OTU0NSwgNzk1NTAsIAorICAgIDc5NTU0LCA3OTU1OSwgNzk1NjQsIDc5NTY5LCA3OTU3NCwgNzk1NzksIDc5NTg0LCA3OTU4OSwgNzk1OTQsIDc5NTk5LCAKKyAgICA3OTYwNCwgNzk2MDksIDc5NjE0LCA3OTYxOSwgNzk2MjQsIDc5NjI5LCA3OTYzNCwgNzk2MzksIDc5NjQ0LCA3OTY0OSwgCisgICAgNzk2NTMsIDc5NjU4LCA3OTY2MywgNzk2NjgsIDc5NjczLCA3OTY3OCwgNzk2ODMsIDc5Njg4LCA3OTY5MywgNzk2OTgsIAorICAgIDc5NzAzLCA3OTcwOCwgNzk3MTMsIDc5NzE4LCA3OTcyMywgNzk3MjgsIDc5NzMzLCA3OTczOCwgNzk3NDMsIDc5NzQ4LCAKKyAgICA3OTc1MywgNzk3NTgsIDc5NzYzLCA3OTc2OCwgNzk3NzMsIDc5Nzc4LCA3OTc4MywgNzk3ODgsIDc5NzkzLCA3OTc5OCwgCisgICAgNzk4MDMsIDc5ODA4LCA3OTgxMywgNzk4MTgsIDc5ODIyLCA3OTgyOSwgNzk4MzYsIDc5ODQzLCA3OTg1MCwgNzk4NTYsIAorICAgIDc5ODYzLCA3OTg3MCwgNzk4NzcsIDc5ODg0LCA3OTg5MSwgNzk4OTgsIDc5OTA1LCA3OTkxMiwgNzk5MTksIDc5OTI2LCAKKyAgICA3OTkzMiwgNzk5MzksIDc5OTQ2LCA3OTk1MywgNzk5NjAsIDc5OTY3LCA3OTk3NCwgNzk5ODEsIDc5OTg4LCA3OTk5NSwgCisgICAgODAwMDIsIDgwMDA5LCA4MDAxOCwgODAwMjcsIDgwMDM2LCA4MDA0NSwgODAwNTQsIDgwMDYzLCA4MDA3MiwgODAwODEsIAorICAgIDgwMDg5LCA4MDA5NywgODAxMDUsIDgwMTEzLCA4MDEyMSwgODAxMjksIDgwMTM3LCA4MDE0NSwgODAxNTEsIDgwMTU5LCAwLCAKKyAgICAwLCA4MDE2NywgODAxNzQsIDgwMTgwLCA4MDE4NiwgODAxOTIsIDgwMTk4LCA4MDIwNCwgODAyMTAsIDgwMjE3LCA4MDIyMywgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ4NzUsIDU0ODgwLCA1NDg4NSwgCi0gICAgNTQ4OTAsIDU0ODk1LCA1NDkwMCwgNTQ5MDUsIDU0OTEwLCA1NDkxNSwgNTQ5MjAsIDU0OTI1LCA1NDkzMSwgNTQ5MzUsIAotICAgIDU0OTQwLCA1NDk0NSwgNTQ5NTAsIDU0OTU1LCA1NDk2MCwgNTQ5NjUsIDU0OTcwLCA1NDk3NSwgNTQ5ODAsIDU0OTg1LCAKLSAgICA1NDk5MCwgNTQ5OTUsIDU1MDAwLCA1NTAwNSwgNTUwMTAsIDU1MDE1LCA1NTAyMCwgNTUwMjUsIDU1MDMwLCA1NTAzNSwgCi0gICAgNTUwNDAsIDU1MDQ1LCA1NTA1MSwgNTUwNTYsIDU1MDYyLCA1NTA3MSwgNTUwNzYsIDU1MDg0LCA1NTA5MSwgNTUxMDAsIAotICAgIDU1MTA1LCA1NTExMCwgNTUxMTUsIDU1MTIxLCAwLCA1NTEyOCwgNTUxMzMsIDU1MTM4LCA1NTE0MywgNTUxNDgsIDU1MTUzLCAKLSAgICA1NTE1OCwgNTUxNjMsIDU1MTY4LCA1NTE3MywgNTUxNzgsIDU1MTg0LCA1NTE4OCwgNTUxOTMsIDU1MTk4LCA1NTIwMywgCi0gICAgNTUyMDgsIDU1MjEzLCA1NTIxOCwgNTUyMjMsIDU1MjI4LCA1NTIzMywgNTUyMzgsIDU1MjQzLCA1NTI0OCwgNTUyNTMsIAotICAgIDU1MjU4LCA1NTI2MywgNTUyNjgsIDU1MjczLCA1NTI3OCwgNTUyODMsIDU1Mjg4LCA1NTI5MywgNTUyOTgsIDU1MzA0LCAKLSAgICA1NTMwOSwgNTUzMTUsIDU1MzI0LCA1NTMyOSwgNTUzMzcsIDU1MzQ0LCA1NTM1MywgNTUzNTgsIDU1MzYzLCA1NTM2OCwgCi0gICAgNTUzNzQsIDAsIDU1MzgxLCA1NTM4OSwgNTUzOTcsIDU1NDA2LCA1NTQxMywgNTU0MjEsIDU1NDI3LCA1NTQzNiwgNTU0NDQsIAotICAgIDU1NDUyLCA1NTQ2MCwgNTU0NjgsIDU1NDc2LCA1NTQ4NCwgNTU0ODksIDU1NDk2LCA1NTUwMiwgNTU1MDksIDU1NTE3LCAKLSAgICA1NTUyNCwgNTU1MzEsIDU1NTM5LCA1NTU0NSwgNTU1NTEsIDU1NTU4LCA1NTU2NSwgNTU1NzUsIDU1NTg1LCA1NTU5MiwgCi0gICAgNTU1OTksIDU1NjA0LCA1NTYxNCwgNTU2MjQsIDU1NjI5LCA1NTYzNCwgNTU2MzksIDU1NjQ0LCA1NTY0OSwgNTU2NTQsIAotICAgIDU1NjU5LCA1NTY2NCwgNTU2NjksIDU1Njc0LCA1NTY3OSwgNTU2ODQsIDU1Njg5LCA1NTY5NCwgNTU2OTksIDU1NzA0LCAKLSAgICA1NTcwOSwgNTU3MTQsIDU1NzE5LCA1NTcyNCwgNTU3MjksIDU1NzM0LCA1NTczOSwgNTU3NDQsIDU1NzQ5LCA1NTc1NCwgCi0gICAgNTU3NTksIDU1NzY0LCA1NTc2OSwgNTU3NzQsIDU1Nzc4LCA1NTc4MiwgNTU3ODcsIDU1NzkyLCA1NTc5NywgNTU4MDIsIAotICAgIDU1ODA3LCA1NTgxMiwgNTU4MTcsIDU1ODIyLCA1NTgyNywgNTU4MzIsIDU1ODM3LCA1NTg0MiwgNTU4NDcsIDU1ODUyLCAKLSAgICA1NTg1NywgNTU4NjIsIDU1ODY3LCA1NTg3MiwgNTU4NzksIDU1ODg2LCA1NTg5MywgNTU5MDAsIDU1OTA3LCA1NTkxNCwgCi0gICAgNTU5MjEsIDU1OTI4LCA1NTkzNSwgNTU5NDIsIDU1OTQ5LCA1NTk1NiwgNTU5NjMsIDU1OTcwLCA1NTk3NSwgNTU5ODAsIAotICAgIDU1OTg3LCA1NTk5NCwgNTYwMDEsIDU2MDA4LCA1NjAxNSwgNTYwMjIsIDU2MDI5LCA1NjAzNiwgNTYwNDMsIDU2MDUwLCAKLSAgICA1NjA1NywgNTYwNjQsIDU2MDcwLCA1NjA3NiwgNTYwODIsIDU2MDg4LCA1NjA5NSwgNTYxMDIsIDU2MTA5LCA1NjExNiwgCi0gICAgNTYxMjMsIDU2MTMwLCA1NjEzNywgNTYxNDQsIDU2MTUxLCA1NjE1OCwgNTYxNjYsIDU2MTc0LCA1NjE4MiwgNTYxOTAsIAotICAgIDU2MTk4LCA1NjIwNiwgNTYyMTQsIDU2MjIyLCA1NjIyNiwgNTYyMzIsIDU2MjM4LCA1NjI0MiwgNTYyNDgsIDU2MjU0LCAKLSAgICA1NjI2MCwgNTYyNjcsIDU2Mjc0LCA1NjI4MSwgNTYyODgsIDU2MjkzLCA1NjI5OSwgNTYzMDUsIDU2MzEyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1NjMxOSwgNTYzMjcsIDU2MzM2LCA1NjM0NSwgNTYzNTMsIDU2MzU5LCA1NjM2NCwgNTYzNjksIDU2Mzc0LCAKLSAgICA1NjM3OSwgNTYzODQsIDU2Mzg5LCA1NjM5NCwgNTYzOTksIDU2NDA0LCA1NjQwOSwgNTY0MTQsIDU2NDE5LCA1NjQyNCwgCi0gICAgNTY0MjksIDU2NDM0LCA1NjQzOSwgNTY0NDQsIDU2NDQ5LCA1NjQ1NCwgNTY0NTksIDU2NDY0LCA1NjQ2OSwgNTY0NzQsIAotICAgIDU2NDc5LCA1NjQ4NCwgNTY0ODksIDU2NDk0LCA1NjQ5OSwgNTY1MDQsIDU2NTA5LCA1NjUxNCwgNTY1MTksIDU2NTI0LCAKLSAgICA1NjUyOSwgNTY1MzQsIDU2NTM5LCA1NjU0NCwgNTY1NDksIDU2NTU0LCAwLCA1NjU1OSwgMCwgMCwgMCwgMCwgMCwgNTY1NjQsIAotICAgIDAsIDAsIDU2NTY5LCA1NjU3MywgNTY1NzgsIDU2NTgzLCA1NjU4OCwgNTY1OTMsIDU2NjAyLCA1NjYwNywgNTY2MTIsIAotICAgIDU2NjE3LCA1NjYyMiwgNTY2MjcsIDU2NjMyLCA1NjYzNywgNTY2NDIsIDU2NjQ5LCA1NjY1NCwgNTY2NTksIDU2NjY4LCAKLSAgICA1NjY3NSwgNTY2ODAsIDU2Njg1LCA1NjY5MCwgNTY2OTcsIDU2NzAyLCA1NjcwOSwgNTY3MTQsIDU2NzE5LCA1NjcyNiwgCi0gICAgNTY3MzMsIDU2NzM4LCA1Njc0MywgNTY3NDgsIDU2NzU1LCA1Njc2MiwgNTY3NjcsIDU2NzcyLCA1Njc3NywgNTY3ODIsIAotICAgIDU2Nzg3LCA1Njc5NCwgNTY4MDEsIDU2ODA2LCA1NjgxMSwgNTY4MTYsIDU2ODIxLCA1NjgyNiwgNTY4MzEsIDU2ODM2LCAKLSAgICA1Njg0MSwgNTY4NDYsIDU2ODUxLCA1Njg1NiwgNTY4NjMsIDU2ODY4LCA1Njg3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTY4NzgsIDU2ODg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Njg5MCwgNTY4OTUsIAotICAgIDU2ODk5LCA1NjkwMywgNTY5MDcsIDU2OTExLCA1NjkxNSwgNTY5MTksIDU2OTIzLCA1NjkyNywgNTY5MzEsIDU2OTM1LCAKLSAgICA1Njk0MSwgNTY5NDUsIDU2OTQ5LCA1Njk1MywgNTY5NTcsIDU2OTYxLCA1Njk2NSwgNTY5NjksIDU2OTczLCA1Njk3NywgCi0gICAgNTY5ODEsIDU2OTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Njk4OSwgNTY5OTMsIDU2OTk3LCA1NzAwMSwgCi0gICAgNTcwMDUsIDU3MDA5LCA1NzAxMywgMCwgNTcwMTcsIDU3MDIxLCA1NzAyNSwgNTcwMjksIDU3MDMzLCA1NzAzNywgNTcwNDEsIAotICAgIDAsIDU3MDQ1LCA1NzA0OSwgNTcwNTMsIDU3MDU3LCA1NzA2MSwgNTcwNjUsIDU3MDY5LCAwLCA1NzA3MywgNTcwNzcsIAotICAgIDU3MDgxLCA1NzA4NSwgNTcwODksIDU3MDkzLCA1NzA5NywgMCwgNTcxMDEsIDU3MTA1LCA1NzEwOSwgNTcxMTMsIDU3MTE3LCAKLSAgICA1NzEyMSwgNTcxMjUsIDAsIDU3MTI5LCA1NzEzMywgNTcxMzcsIDU3MTQxLCA1NzE0NSwgNTcxNDksIDU3MTUzLCAwLCAKLSAgICA1NzE1NywgNTcxNjEsIDU3MTY1LCA1NzE2OSwgNTcxNzMsIDU3MTc3LCA1NzE4MSwgMCwgNTcxODUsIDU3MTg5LCA1NzE5MywgCi0gICAgNTcxOTcsIDU3MjAxLCA1NzIwNSwgNTcyMDksIDAsIDU3MjEzLCA1NzIxOCwgNTcyMjMsIDU3MjI4LCA1NzIzMywgNTcyMzgsIAotICAgIDU3MjQzLCA1NzI0NywgNTcyNTIsIDU3MjU3LCA1NzI2MiwgNTcyNjYsIDU3MjcxLCA1NzI3NiwgNTcyODEsIDU3Mjg2LCAKLSAgICA1NzI5MCwgNTcyOTUsIDU3MzAwLCA1NzMwNSwgNTczMTAsIDU3MzE1LCA1NzMyMCwgNTczMjQsIDU3MzI5LCA1NzMzNCwgCi0gICAgNTczNDEsIDU3MzQ2LCA1NzM1MSwgNTczNTcsIDU3MzY0LCA1NzM3MSwgNTczODAsIDU3Mzg3LCA1NzM5NiwgNTc0MDAsIAotICAgIDU3NDA0LCA1NzQxMCwgNTc0MTYsIDU3NDIyLCA1NzQzMCwgNTc0MzYsIDU3NDQwLCA1NzQ0NCwgNTc0NDgsIDU3NDU0LCAKLSAgICA1NzQ2MCwgNTc0NjQsIDU3NDY2LCA1NzQ3MCwgNTc0NzYsIDU3NDc4LCA1NzQ4MiwgNTc0ODYsIDU3NDkwLCA1NzQ5NiwgCi0gICAgNTc1MDEsIDU3NTA1LCA1NzUwOSwgNTc1MTQsIDU3NTIwLCA1NzUyNSwgNTc1MzAsIDU3NTM1LCA1NzU0MCwgNTc1NDcsIAotICAgIDU3NTU0LCA1NzU1OSwgNTc1NjQsIDU3NTY5LCA1NzU3NCwgNTc1NzksIDU3NTg0LCA1NzU4OCwgNTc1OTIsIDU3NTk5LCAKLSAgICA1NzYwNiwgNTc2MTIsIDU3NjE2LCA1NzYyMSwgNTc2MjMsIDU3NjI3LCA1NzYzNSwgNTc2MzksIDU3NjQzLCA1NzY0NywgCi0gICAgNTc2NTEsIDU3NjU3LCA1NzY2MywgNTc2NjcsIDU3NjczLCA1NzY3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAyMzAsIDgwMjM0LCA4MDIzOCwgODAyNDIsIAorICAgIDgwMjQ2LCA4MDI1MCwgODAyNTQsIDgwMjU4LCA4MDI2MiwgODAyNjYsIDgwMjcwLCA4MDI3NCwgODAyNzgsIDgwMjgyLCAKKyAgICA4MDI4NiwgODAyOTAsIDgwMjk0LCA4MDI5OCwgODAzMDIsIDgwMzA2LCA4MDMxMCwgODAzMTQsIDgwMzE4LCAwLCAwLCAwLCAKKyAgICAwLCA4MDMyMiwgODAzMjYsIDgwMzMwLCA4MDMzNCwgODAzMzgsIDgwMzQyLCA4MDM0NiwgODAzNTAsIDgwMzU0LCA4MDM1OCwgCisgICAgODAzNjIsIDgwMzY2LCA4MDM3MCwgODAzNzQsIDgwMzc4LCA4MDM4MiwgODAzODYsIDgwMzkwLCA4MDM5NCwgODAzOTgsIAorICAgIDgwNDAyLCA4MDQwNiwgODA0MTAsIDgwNDE0LCA4MDQxOCwgODA0MjIsIDgwNDI2LCA4MDQzMCwgODA0MzQsIDgwNDM4LCAKKyAgICA4MDQ0MiwgODA0NDYsIDgwNDUwLCA4MDQ1NCwgODA0NTgsIDgwNDYyLCA4MDQ2NiwgODA0NzAsIDgwNDc0LCA4MDQ3OCwgCisgICAgODA0ODIsIDgwNDg2LCA4MDQ5MCwgODA0OTQsIDgwNDk4LCA4MDUwMiwgODA1MDYsIDgwNTEwLCA4MDUxNCwgMCwgMCwgMCwgCisgICAgMCwgODA1MTgsIDgwNTIyLCA4MDUyNiwgODA1MzAsIDgwNTM0LCA4MDUzOCwgODA1NDIsIDgwNTQ2LCA4MDU1MCwgODA1NTQsIAorICAgIDgwNTU4LCA4MDU2MiwgODA1NjYsIDgwNTcwLCA4MDU3NCwgODA1NzgsIDgwNTgyLCA4MDU4NiwgODA1OTAsIDgwNTk0LCAKKyAgICA4MDU5OCwgODA2MDIsIDgwNjA2LCA4MDYxMCwgODA2MTQsIDgwNjE4LCA4MDYyMiwgODA2MjYsIDgwNjMwLCA4MDYzNCwgCisgICAgODA2MzgsIDgwNjQyLCA4MDY0NiwgODA2NTAsIDgwNjU0LCA4MDY1OCwgODA2NjIsIDgwNjY2LCA4MDY3MCwgODA2NzQsIAorICAgIDgwNjc4LCA4MDY4MiwgODA2ODYsIDgwNjkwLCA4MDY5NCwgODA2OTgsIDgwNzAyLCA4MDcwNiwgODA3MTAsIDgwNzE0LCAKKyAgICA4MDcxOCwgODA3MjIsIDgwNzI2LCA4MDczMCwgODA3MzQsIDgwNzM4LCA4MDc0MiwgODA3NDYsIDgwNzUwLCA4MDc1NCwgCisgICAgODA3NTgsIDgwNzYyLCA4MDc2NiwgODA3NzAsIDgwNzc0LCA4MDc3OCwgODA3ODIsIDgwNzg2LCA4MDc5MCwgODA3OTQsIAorICAgIDgwNzk4LCA4MDgwMiwgODA4MDYsIDgwODEwLCA4MDgxNCwgODA4MTgsIDgwODIyLCA4MDgyNiwgODA4MzAsIDgwODM0LCAKKyAgICA4MDgzOCwgODA4NDIsIDgwODQ2LCA4MDg1MCwgODA4NTQsIDgwODU4LCA4MDg2MiwgODA4NjYsIDgwODcwLCA4MDg3NCwgCisgICAgODA4NzgsIDgwODgyLCA4MDg4NiwgODA4OTAsIDgwODk0LCA4MDg5OCwgODA5MDIsIDgwOTA2LCA4MDkxMCwgODA5MTQsIAorICAgIDgwOTE4LCA4MDkyMiwgODA5MjYsIDgwOTMwLCA4MDkzNCwgODA5MzgsIDgwOTQyLCA4MDk0NiwgODA5NTAsIDgwOTU0LCAKKyAgICA4MDk1OCwgODA5NjIsIDgwOTY2LCA4MDk3MCwgODA5NzQsIDgwOTc4LCA4MDk4MiwgODA5ODYsIDgwOTkwLCA4MDk5NCwgCisgICAgODA5OTgsIDgxMDAyLCA4MTAwNiwgODEwMTAsIDgxMDE0LCA4MTAxOCwgODEwMjIsIDgxMDI2LCA4MTAzMCwgODEwMzQsIAorICAgIDgxMDM4LCA4MTA0MiwgODEwNDYsIDgxMDUwLCA4MTA1NCwgODEwNTgsIDgxMDYyLCA4MTA2NiwgODEwNzAsIDgxMDc0LCAKKyAgICA4MTA3OCwgODEwODIsIDgxMDg2LCA4MTA5MCwgODEwOTQsIDgxMDk4LCA4MTEwMiwgODExMDYsIDgxMTEwLCA4MTExNCwgCisgICAgODExMTgsIDgxMTIyLCA4MTEyNiwgODExMzAsIDgxMTM0LCA4MTEzOCwgODExNDIsIDgxMTQ2LCA4MTE1MCwgODExNTQsIAorICAgIDgxMTU4LCA4MTE2MiwgODExNjYsIDgxMTcwLCA4MTE3NCwgODExNzgsIDgxMTgyLCA4MTE4NiwgODExOTAsIDgxMTk0LCAKKyAgICA4MTE5OCwgODEyMDIsIDgxMjA2LCA4MTIxMCwgODEyMTQsIDgxMjE4LCA4MTIyMiwgODEyMjYsIDgxMjMwLCA4MTIzNCwgCisgICAgODEyMzgsIDgxMjQyLCA4MTI0NiwgODEyNTAsIDgxMjU0LCA4MTI1OCwgODEyNjIsIDgxMjY2LCA4MTI3MCwgODEyNzQsIAorICAgIDgxMjc4LCA4MTI4MiwgODEyODYsIDgxMjkwLCA4MTI5NCwgODEyOTgsIDgxMzAyLCA4MTMwNiwgODEzMTAsIDgxMzE0LCAKKyAgICA4MTMxOCwgODEzMjIsIDgxMzI2LCA4MTMzMCwgODEzMzQsIDgxMzM4LCA4MTM0MiwgODEzNDYsIDgxMzUwLCA4MTM1NCwgCisgICAgODEzNTgsIDgxMzYyLCA4MTM2NiwgODEzNzAsIDgxMzc0LCA4MTM3OCwgODEzODIsIDgxMzg2LCA4MTM5MCwgODEzOTQsIAorICAgIDgxMzk4LCA4MTQwMiwgODE0MDYsIDgxNDEwLCA4MTQxNCwgODE0MTgsIDgxNDIyLCA4MTQyNiwgODE0MzAsIDgxNDM0LCAKKyAgICA4MTQzOCwgODE0NDIsIDgxNDQ2LCA4MTQ1MCwgODE0NTQsIDgxNDU4LCA4MTQ2MiwgODE0NjYsIDgxNDcwLCA4MTQ3NCwgCisgICAgODE0NzgsIDgxNDgyLCA4MTQ4NiwgODE0OTAsIDgxNDk0LCA4MTQ5OCwgODE1MDIsIDgxNTA2LCA4MTUxMCwgODE1MTQsIAorICAgIDgxNTE4LCA4MTUyMiwgODE1MjYsIDgxNTMwLCA4MTUzNCwgODE1MzgsIDgxNTQyLCA4MTU0NiwgODE1NTAsIDgxNTU0LCAKKyAgICA4MTU1OCwgODE1NjIsIDgxNTY2LCA4MTU3MCwgODE1NzQsIDgxNTc4LCA4MTU4MiwgODE1ODYsIDgxNTkwLCA4MTU5NCwgCisgICAgODE1OTgsIDgxNjAyLCA4MTYwNiwgODE2MTAsIDgxNjE0LCA4MTYxOCwgODE2MjIsIDgxNjI2LCA4MTYzMCwgODE2MzQsIAorICAgIDgxNjM4LCA4MTY0MiwgODE2NDYsIDgxNjUwLCA4MTY1NCwgODE2NTgsIDgxNjYyLCA4MTY2NiwgODE2NzAsIDgxNjc0LCAKKyAgICA4MTY3OCwgODE2ODIsIDgxNjg2LCA4MTY5MCwgODE2OTQsIDgxNjk4LCA4MTcwMiwgODE3MDYsIDgxNzEwLCA4MTcxNCwgCisgICAgODE3MTgsIDgxNzIyLCA4MTcyNiwgODE3MzAsIDgxNzM0LCA4MTczOCwgODE3NDIsIDgxNzQ2LCA4MTc1MCwgODE3NTQsIAorICAgIDgxNzU4LCA4MTc2MiwgODE3NjYsIDgxNzcwLCA4MTc3NCwgODE3NzgsIDgxNzgyLCA4MTc4NiwgODE3OTAsIDgxNzk0LCAKKyAgICA4MTc5OCwgODE4MDIsIDgxODA2LCA4MTgxMCwgODE4MTQsIDgxODE4LCA4MTgyMiwgODE4MjYsIDgxODMwLCA4MTgzNCwgCisgICAgODE4MzgsIDgxODQyLCA4MTg0NiwgODE4NTAsIDgxODU0LCA4MTg1OCwgODE4NjIsIDgxODY2LCA4MTg3MCwgODE4NzQsIAorICAgIDgxODc4LCA4MTg4MiwgODE4ODYsIDgxODkwLCA4MTg5NCwgODE4OTgsIDgxOTAyLCA4MTkwNiwgODE5MTAsIDgxOTE0LCAKKyAgICA4MTkxOCwgODE5MjIsIDgxOTI2LCA4MTkzMCwgODE5MzQsIDgxOTM4LCA4MTk0MiwgODE5NDYsIDgxOTUwLCA4MTk1NCwgCisgICAgODE5NTgsIDgxOTYyLCA4MTk2NiwgODE5NzAsIDgxOTc0LCA4MTk3OCwgMCwgMCwgODE5ODIsIDgxOTg2LCA4MTk5MCwgCisgICAgODE5OTQsIDgxOTk4LCA4MjAwMiwgODIwMDYsIDgyMDEwLCA4MjAxNCwgODIwMTgsIDgyMDIyLCA4MjAyNiwgODIwMzAsIAorICAgIDgyMDM0LCA4MjAzOCwgODIwNDIsIDgyMDQ2LCA4MjA1MCwgODIwNTQsIDgyMDU4LCA4MjA2MiwgODIwNjYsIDgyMDcwLCAKKyAgICA4MjA3NCwgODIwNzgsIDgyMDgyLCA4MjA4NiwgODIwOTAsIDgyMDk0LCA4MjA5OCwgODIxMDIsIDgyMTA2LCA4MjExMCwgCisgICAgODIxMTQsIDgyMTE4LCA4MjEyMiwgODIxMjYsIDgyMTMwLCA4MjEzNCwgODIxMzgsIDgyMTQyLCA4MjE0NiwgODIxNTAsIAorICAgIDgyMTU0LCA4MjE1OCwgODIxNjIsIDgyMTY2LCA4MjE3MCwgODIxNzQsIDgyMTc4LCA4MjE4MiwgODIxODYsIDgyMTkwLCAKKyAgICA4MjE5NCwgODIxOTgsIDgyMjAyLCA4MjIwNiwgODIyMTAsIDgyMjE0LCA4MjIxOCwgODIyMjIsIDgyMjI2LCA4MjIzMCwgCisgICAgODIyMzQsIDgyMjM4LCA4MjI0MiwgODIyNDYsIDgyMjUwLCA4MjI1NCwgODIyNTgsIDgyMjYyLCA4MjI2NiwgODIyNzAsIAorICAgIDgyMjc0LCA4MjI3OCwgODIyODIsIDgyMjg2LCA4MjI5MCwgODIyOTQsIDgyMjk4LCA4MjMwMiwgODIzMDYsIDgyMzEwLCAKKyAgICA4MjMxNCwgODIzMTgsIDgyMzIyLCA4MjMyNiwgODIzMzAsIDgyMzM0LCA4MjMzOCwgODIzNDIsIDgyMzQ2LCA4MjM1MCwgCisgICAgODIzNTQsIDgyMzU4LCA4MjM2MiwgODIzNjYsIDgyMzcwLCA4MjM3NCwgODIzNzgsIDgyMzgyLCA4MjM4NiwgODIzOTAsIAorICAgIDgyMzk0LCA4MjM5OCwgODI0MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyNDA2LCAKKyAgICA4MjQxMSwgODI0MTYsIDgyNDIxLCA4MjQyNiwgODI0MzEsIDgyNDM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA4MjQ0NCwgODI0NTEsIDgyNDU4LCA4MjQ2NSwgODI0NzIsIDAsIDAsIDAsIDAsIDAsIDgyNDc5LCA4MjQ4NiwgCisgICAgODI0OTMsIDgyNTAzLCA4MjUwOSwgODI1MTUsIDgyNTIxLCA4MjUyNywgODI1MzMsIDgyNTM5LCA4MjU0NiwgODI1NTIsIAorICAgIDgyNTU4LCA4MjU2NCwgODI1NzMsIDgyNTgyLCA4MjU5NCwgODI2MDYsIDgyNjEyLCA4MjYxOCwgODI2MjQsIDgyNjMxLCAKKyAgICA4MjYzOCwgODI2NDUsIDgyNjUyLCA4MjY1OSwgMCwgODI2NjYsIDgyNjczLCA4MjY4MCwgODI2ODgsIDgyNjk1LCAwLCAKKyAgICA4MjcwMiwgMCwgODI3MDksIDgyNzE2LCAwLCA4MjcyMywgODI3MzEsIDAsIDgyNzM4LCA4Mjc0NSwgODI3NTIsIDgyNzU5LCAKKyAgICA4Mjc2NiwgODI3NzMsIDgyNzgwLCA4Mjc4NywgODI3OTQsIDgyODAxLCA4MjgwNiwgODI4MTMsIDgyODIwLCA4MjgyNiwgCisgICAgODI4MzIsIDgyODM4LCA4Mjg0NCwgODI4NTAsIDgyODU2LCA4Mjg2MiwgODI4NjgsIDgyODc0LCA4Mjg4MCwgODI4ODYsIAorICAgIDgyODkyLCA4Mjg5OCwgODI5MDQsIDgyOTEwLCA4MjkxNiwgODI5MjIsIDgyOTI4LCA4MjkzNCwgODI5NDAsIDgyOTQ2LCAKKyAgICA4Mjk1MiwgODI5NTgsIDgyOTY0LCA4Mjk3MCwgODI5NzYsIDgyOTgyLCA4Mjk4OCwgODI5OTQsIDgzMDAwLCA4MzAwNiwgCisgICAgODMwMTIsIDgzMDE4LCA4MzAyNCwgODMwMzAsIDgzMDM2LCA4MzA0MiwgODMwNDgsIDgzMDU0LCA4MzA2MCwgODMwNjYsIAorICAgIDgzMDcyLCA4MzA3OCwgODMwODQsIDgzMDkwLCA4MzA5NiwgODMxMDIsIDgzMTA4LCA4MzExNCwgODMxMjAsIDgzMTI2LCAKKyAgICA4MzEzMiwgODMxMzgsIDgzMTQ0LCA4MzE1MCwgODMxNTYsIDgzMTYyLCA4MzE2OCwgODMxNzQsIDgzMTgwLCA4MzE4NiwgCisgICAgODMxOTIsIDgzMTk4LCA4MzIwNCwgODMyMTAsIDgzMjE2LCA4MzIyMiwgODMyMjgsIDgzMjM0LCA4MzI0MCwgODMyNDYsIAorICAgIDgzMjUyLCA4MzI1OCwgODMyNjQsIDgzMjcwLCA4MzI3NiwgODMyODQsIDgzMjkyLCA4MzI5OCwgODMzMDQsIDgzMzEwLCAKKyAgICA4MzMxNiwgODMzMjUsIDgzMzM0LCA4MzM0MiwgODMzNTAsIDgzMzU4LCA4MzM2NiwgODMzNzQsIDgzMzgyLCA4MzM5MCwgCisgICAgODMzOTgsIDgzNDA1LCA4MzQxMiwgODM0MjMsIDgzNDM0LCA4MzQzOCwgODM0NDIsIDgzNDQ3LCA4MzQ1MiwgODM0NTcsIAorICAgIDgzNDYyLCA4MzQ3MCwgODM0NzgsIDgzNDg0LCA4MzQ5MCwgODM0OTcsIDgzNTA0LCA4MzUxMSwgODM1MTUsIDgzNTIxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MzUyNywgODM1MzMsIDgzNTM5LCAKKyAgICA4MzU0NSwgODM1NTEsIDgzNTU2LCA4MzU2MSwgODM1NjcsIDgzNTczLCA4MzU3OSwgODM1ODUsIDgzNTk0LCA4MzYwMCwgCisgICAgODM2MDYsIDgzNjE0LCA4MzYyMiwgODM2MzAsIDgzNjM4LCA4MzY0MywgODM2NDgsIDgzNjUzLCA4MzY1OCwgODM2NzEsIAorICAgIDgzNjg0LCA4MzY5NSwgODM3MDYsIDgzNzE4LCA4MzczMCwgODM3NDIsIDgzNzU0LCA4Mzc2NSwgODM3NzYsIDgzNzg4LCAKKyAgICA4MzgwMCwgODM4MTIsIDgzODI0LCA4MzgzNSwgODM4NDYsIDgzODU3LCA4Mzg3NCwgODM4OTEsIDgzOTA4LCA4MzkxNSwgCisgICAgODM5MjIsIDgzOTI5LCA4MzkzNiwgODM5NDcsIDgzOTU4LCA4Mzk2OSwgODM5ODIsIDgzOTkzLCA4NDAwMSwgODQwMDksIAorICAgIDg0MDE4LCA4NDAyNiwgODQwMzYsIDg0MDQ0LCA4NDA1MiwgODQwNjAsIDg0MDY5LCA4NDA3NywgODQwODcsIDg0MDk1LCAKKyAgICA4NDEwMywgODQxMTEsIDg0MTIxLCA4NDEyOSwgODQxMzYsIDg0MTQzLCA4NDE1MCwgODQxNTcsIDg0MTY1LCA4NDE3MywgCisgICAgODQxODEsIDg0MTg5LCA4NDE5NywgODQyMDYsIDg0MjE0LCA4NDIyMiwgODQyMzAsIDg0MjM4LCA4NDI0NiwgODQyNTUsIAorICAgIDg0MjYzLCA4NDI3MSwgODQyNzksIDg0Mjg3LCA4NDI5NSwgODQzMDMsIDg0MzExLCA4NDMxOSwgODQzMjcsIDg0MzM1LCAKKyAgICA4NDM0NCwgODQzNTIsIDg0MzYyLCA4NDM3MCwgODQzNzgsIDg0Mzg2LCA4NDM5NiwgODQ0MDQsIDg0NDEyLCA4NDQyMCwgCisgICAgODQ0MjgsIDg0NDM3LCA4NDQ0NiwgODQ0NTQsIDg0NDY0LCA4NDQ3MiwgODQ0ODAsIDg0NDg4LCA4NDQ5NywgODQ1MDUsIAorICAgIDg0NTE1LCA4NDUyMywgODQ1MzAsIDg0NTM3LCA4NDU0NSwgODQ1NTIsIDg0NTYxLCA4NDU2OCwgODQ1NzYsIDg0NTg0LCAKKyAgICA4NDU5MywgODQ2MDEsIDg0NjExLCA4NDYxOSwgODQ2MjcsIDg0NjM1LCA4NDY0NSwgODQ2NTMsIDg0NjYwLCA4NDY2NywgCisgICAgODQ2NzUsIDg0NjgyLCA4NDY5MSwgODQ2OTgsIDg0NzA4LCA4NDcxOCwgODQ3MjksIDg0NzM4LCA4NDc0NywgODQ3NTYsIAorICAgIDg0NzY1LCA4NDc3NCwgODQ3ODQsIDg0Nzk2LCA4NDgwOCwgODQ4MTksIDg0ODMxLCA4NDg0NCwgODQ4NTUsIDg0ODY0LCAKKyAgICA4NDg3MywgODQ4ODEsIDg0ODkwLCA4NDkwMCwgODQ5MDgsIDg0OTE3LCA4NDkyNiwgODQ5MzQsIDg0OTQzLCA4NDk1MywgCisgICAgODQ5NjEsIDg0OTcwLCA4NDk3OSwgODQ5ODcsIDg0OTk2LCA4NTAwNiwgODUwMTQsIDg1MDI0LCA4NTAzMiwgODUwNDIsIAorICAgIDg1MDUwLCA4NTA1OCwgODUwNjcsIDg1MDc1LCA4NTA4NSwgODUwOTMsIDg1MTAxLCA4NTExMSwgODUxMTksIDg1MTI2LCAKKyAgICA4NTEzMywgODUxNDIsIDg1MTUxLCA4NTE1OSwgODUxNjgsIDg1MTc4LCA4NTE4NiwgODUxOTcsIDg1MjA1LCA4NTIxMywgCisgICAgODUyMjAsIDg1MjI4LCA4NTIzNywgODUyNDQsIDg1MjU1LCA4NTI2NiwgODUyNzgsIDg1Mjg5LCA4NTMwMSwgODUzMDksIAorICAgIDg1MzE3LCA4NTMyNiwgODUzMzQsIDg1MzQzLCA4NTM1MSwgODUzNTksIDg1MzY4LCA4NTM3NiwgODUzODUsIDg1MzkzLCAKKyAgICA4NTQwMCwgODU0MDcsIDg1NDE0LCA4NTQyMSwgODU0MjksIDg1NDM3LCA4NTQ0NSwgODU0NTMsIDg1NDYyLCA4NTQ3MCwgCisgICAgODU0NzgsIDg1NDg3LCA4NTQ5NSwgODU1MDMsIDg1NTExLCA4NTUyMCwgODU1MjgsIDg1NTM2LCA4NTU0NCwgODU1NTIsIAorICAgIDg1NTYwLCA4NTU2OCwgODU1NzYsIDg1NTg0LCA4NTU5MiwgODU2MDEsIDg1NjA5LCA4NTYxNywgODU2MjUsIDg1NjMzLCAKKyAgICA4NTY0MSwgODU2NTAsIDg1NjU5LCA4NTY2NywgODU2NzUsIDg1NjgzLCA4NTY5MiwgODU3MDAsIDg1NzA5LCA4NTcxNiwgCisgICAgODU3MjMsIDg1NzMxLCA4NTczOCwgODU3NDYsIDg1NzU0LCA4NTc2MywgODU3NzEsIDg1NzgwLCA4NTc4OCwgODU3OTYsIAorICAgIDg1ODA2LCA4NTgxMywgODU4MjAsIDg1ODI4LCA4NTgzNSwgODU4NDMsIDg1ODU0LCA4NTg2NiwgODU4NzQsIDg1ODgzLCAKKyAgICA4NTg5MSwgODU5MDAsIDg1OTA4LCA4NTkxNywgODU5MjUsIDg1OTM0LCA4NTk0MiwgODU5NTEsIDg1OTYwLCA4NTk2OCwgCisgICAgODU5NzYsIDg1OTg0LCA4NTk5MywgODYwMDAsIDg2MDA4LCA4NjAxNywgODYwMjYsIDg2MDM1LCA4NjA0NSwgODYwNTMsIAorICAgIDg2MDYzLCA4NjA3MSwgODYwODEsIDg2MDg5LCA4NjA5OSwgODYxMDcsIDg2MTE3LCA4NjEyNSwgODYxMzQsIDg2MTQxLCAKKyAgICA4NjE1MCwgODYxNTcsIDg2MTY3LCA4NjE3NSwgODYxODUsIDg2MTkzLCA4NjIwMywgODYyMTEsIDg2MjE5LCA4NjIyNywgCisgICAgODYyMzYsIDg2MjQ0LCA4NjI1MywgODYyNjIsIDg2MjcxLCA4NjI4MCwgODYyOTAsIDg2Mjk4LCA4NjMwOCwgODYzMTYsIAorICAgIDg2MzI2LCA4NjMzNCwgODYzNDQsIDg2MzUyLCA4NjM2MiwgODYzNzAsIDg2Mzc5LCA4NjM4NiwgODYzOTUsIDg2NDAyLCAKKyAgICA4NjQxMiwgODY0MjAsIDg2NDMwLCA4NjQzOCwgODY0NDgsIDg2NDU2LCA4NjQ2NCwgODY0NzIsIDg2NDgxLCA4NjQ4OSwgCisgICAgODY0OTgsIDg2NTA3LCA4NjUxNiwgODY1MjUsIDg2NTMzLCA4NjU0MSwgODY1NTAsIDg2NTU4LCA4NjU2NywgODY1NzYsIAorICAgIDg2NTg0LCA4NjU5MiwgODY2MDAsIDg2NjA5LCA4NjYxNywgODY2MjUsIDg2NjM0LCA4NjY0MiwgODY2NTAsIDg2NjU4LCAKKyAgICA4NjY2NiwgODY2NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2Njc2LCAKKyAgICA4NjY4NiwgODY2OTYsIDg2NzA2LCA4NjcxNiwgODY3MjcsIDg2NzM3LCA4Njc0NywgODY3NTgsIDg2NzY3LCA4Njc3NiwgCisgICAgODY3ODUsIDg2Nzk2LCA4NjgwNiwgODY4MTYsIDg2ODI4LCA4NjgzOCwgODY4NDgsIDg2ODU4LCA4Njg2OCwgODY4NzgsIAorICAgIDg2ODg4LCA4Njg5OCwgODY5MDgsIDg2OTE4LCA4NjkyOCwgODY5MzgsIDg2OTQ5LCA4Njk2MCwgODY5NzAsIDg2OTgwLCAKKyAgICA4Njk5MiwgODcwMDMsIDg3MDE0LCA4NzAyNCwgODcwMzQsIDg3MDQ0LCA4NzA1NCwgODcwNjQsIDg3MDc0LCA4NzA4NCwgCisgICAgODcwOTYsIDg3MTA2LCA4NzExNiwgODcxMjgsIDg3MTM5LCA4NzE1MCwgODcxNjAsIDg3MTcwLCA4NzE4MCwgODcxOTAsIAorICAgIDg3MjAyLCA4NzIxMiwgODcyMjIsIDg3MjMzLCA4NzI0NCwgODcyNTQsIDg3MjY0LCA4NzI3MywgODcyODIsIDg3MjkxLCAKKyAgICA4NzMwMCwgODczMDksIDg3MzE5LCAwLCAwLCA4NzMyOSwgODczMzksIDg3MzQ5LCA4NzM1OSwgODczNjksIDg3MzgxLCAKKyAgICA4NzM5MSwgODc0MDEsIDg3NDEzLCA4NzQyMywgODc0MzUsIDg3NDQ0LCA4NzQ1MywgODc0NjQsIDg3NDc0LCA4NzQ4NiwgCisgICAgODc0OTcsIDg3NTEwLCA4NzUyMCwgODc1MzIsIDg3NTQxLCA4NzU1MiwgODc1NjMsIDg3NTc2LCA4NzU4NiwgODc1OTYsIAorICAgIDg3NjA2LCA4NzYxNiwgODc2MjYsIDg3NjM1LCA4NzY0NCwgODc2NTMsIDg3NjYyLCA4NzY3MiwgODc2ODIsIDg3NjkyLCAKKyAgICA4NzcwMiwgODc3MTIsIDg3NzIyLCA4NzczMiwgODc3NDIsIDg3NzUyLCA4Nzc2MiwgODc3NzIsIDg3NzgyLCA4Nzc5MSwgCisgICAgODc4MDAsIDg3ODA5LCA4NzgxOSwgODc4MjksIDg3ODM5LCA4Nzg0OSwgODc4NTksIDg3ODcwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzY4MSwgNTc2ODUsIDU3Njg5LCA1NzY5NCwgNTc2OTksIDU3NzA0LCAKLSAgICA1NzcwOCwgNTc3MTIsIDU3NzE2LCA1NzcyMSwgNTc3MjYsIDU3NzMwLCA1NzczNCwgNTc3MzgsIDU3NzQyLCA1Nzc0NywgCi0gICAgNTc3NTIsIDU3NzU3LCA1Nzc2MiwgNTc3NjYsIDU3NzcwLCA1Nzc3NSwgNTc3ODAsIDU3Nzg1LCA1Nzc5MCwgNTc3OTQsIDAsIAotICAgIDU3Nzk4LCA1NzgwMiwgNTc4MDYsIDU3ODEwLCA1NzgxNCwgNTc4MTgsIDU3ODIyLCA1NzgyNywgNTc4MzIsIDU3ODM2LCAKLSAgICA1Nzg0MSwgNTc4NDYsIDU3ODU1LCA1Nzg1OSwgNTc4NjMsIDU3ODY3LCA1Nzg3NCwgNTc4NzgsIDU3ODgzLCA1Nzg4OCwgCi0gICAgNTc4OTIsIDU3ODk2LCA1NzkwMiwgNTc5MDcsIDU3OTEyLCA1NzkxNywgNTc5MjIsIDU3OTI2LCA1NzkzMCwgNTc5MzQsIAotICAgIDU3OTM4LCA1Nzk0MiwgNTc5NDcsIDU3OTUyLCA1Nzk1NiwgNTc5NjAsIDU3OTY1LCA1Nzk3MCwgNTc5NzUsIDU3OTc5LCAKLSAgICA1Nzk4MywgNTc5ODgsIDU3OTkzLCA1Nzk5OSwgNTgwMDUsIDU4MDA5LCA1ODAxNSwgNTgwMjEsIDU4MDI1LCA1ODAzMSwgCi0gICAgNTgwMzcsIDU4MDQyLCA1ODA0NywgNTgwNTEsIDU4MDU3LCA1ODA2MSwgNTgwNjUsIDU4MDcxLCA1ODA3NywgNTgwODIsIAotICAgIDU4MDg3LCA1ODA5MSwgNTgwOTUsIDU4MTAzLCA1ODEwOSwgNTgxMTUsIDU4MTIxLCA1ODEyNiwgNTgxMzEsIDU4MTM2LCAKLSAgICA1ODE0MiwgNTgxNDYsIDU4MTUyLCA1ODE1NiwgNTgxNjAsIDU4MTY2LCA1ODE3MiwgNTgxNzgsIDU4MTg0LCA1ODE5MCwgCi0gICAgNTgxOTYsIDU4MjAyLCA1ODIwOCwgNTgyMTQsIDU4MjIwLCA1ODIyNiwgNTgyMzIsIDU4MjM2LCA1ODI0MiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgyNDgsIDU4MjUxLCA1ODI1NSwgNTgyNTksIDU4MjYzLCA1ODI2NywgCi0gICAgNTgyNzAsIDU4MjczLCA1ODI3NywgNTgyODEsIDU4Mjg1LCA1ODI4OSwgNTgyOTIsIDU4Mjk3LCA1ODMwMSwgNTgzMDUsIAotICAgIDU4MzA5LCA1ODMxNCwgNTgzMTgsIDU4MzIyLCA1ODMyNiwgNTgzMzAsIDU4MzM2LCA1ODM0MiwgNTgzNDYsIDU4MzUwLCAKLSAgICA1ODM1NCwgNTgzNTgsIDU4MzYyLCA1ODM2NiwgNTgzNzAsIDU4Mzc0LCA1ODM3OCwgNTgzODIsIDU4Mzg2LCA1ODM5MiwgCi0gICAgNTgzOTYsIDU4NDAwLCA1ODQwNCwgNTg0MDgsIDU4NDEyLCA1ODQxNiwgNTg0MjAsIDU4NDI0LCA1ODQyOCwgNTg0MzIsIAotICAgIDU4NDM2LCA1ODQ0MCwgNTg0NDQsIDU4NDQ4LCA1ODQ1MiwgNTg0NTYsIDU4NDYyLCA1ODQ2OCwgNTg0NzMsIDU4NDc4LCAKLSAgICA1ODQ4MiwgNTg0ODYsIDU4NDkwLCA1ODQ5NCwgNTg0OTgsIDU4NTAyLCA1ODUwNiwgNTg1MTAsIDU4NTE0LCA1ODUxOCwgCi0gICAgNTg1MjIsIDU4NTI2LCA1ODUzMCwgNTg1MzQsIDU4NTM4LCA1ODU0MiwgNTg1NDYsIDU4NTUwLCA1ODU1NCwgNTg1NTgsIAotICAgIDU4NTYyLCA1ODU2NiwgNTg1NzAsIDU4NTc0LCA1ODU4MCwgNTg1ODQsIDU4NTg4LCA1ODU5MiwgNTg1OTYsIDU4NjAwLCAKLSAgICA1ODYwNCwgNTg2MDgsIDU4NjEyLCA1ODYxNywgNTg2MjQsIDU4NjI4LCA1ODYzMiwgNTg2MzYsIDU4NjQwLCA1ODY0NCwgCi0gICAgNTg2NDgsIDU4NjUyLCA1ODY1NiwgNTg2NjAsIDU4NjY0LCA1ODY2OCwgNTg2NzIsIDU4Njc5LCA1ODY4MywgNTg2ODksIAotICAgIDU4NjkzLCA1ODY5NywgNTg3MDEsIDU4NzA1LCA1ODcwOSwgNTg3MTIsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIDU4NzI4LCAKLSAgICA1ODczMiwgNTg3MzYsIDU4NzQwLCA1ODc0NCwgNTg3NDgsIDU4NzUyLCA1ODc1NiwgNTg3NjAsIDU4NzY0LCA1ODc2OCwgCi0gICAgNTg3NzIsIDU4Nzc2LCA1ODc4MCwgNTg3ODQsIDU4Nzg4LCA1ODc5MiwgNTg3OTYsIDU4ODAwLCA1ODgwNCwgNTg4MDgsIAotICAgIDU4ODEyLCA1ODgxNiwgNTg4MjAsIDU4ODI0LCA1ODgyOCwgNTg4MzIsIDU4ODM2LCA1ODg0MCwgNTg4NDYsIDU4ODUwLCAKLSAgICA1ODg1NCwgNTg4NTgsIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg3OCwgNTg4ODIsIDU4ODg2LCA1ODg5MCwgCi0gICAgNTg4OTQsIDU4ODk4LCA1ODkwMiwgNTg5MDYsIDU4OTEwLCA1ODkxNCwgNTg5MTgsIDU4OTIyLCA1ODkyNiwgNTg5MzAsIAotICAgIDU4OTM0LCA1ODkzOCwgNTg5NDIsIDU4OTQ2LCA1ODk1MCwgNTg5NTQsIDU4OTYyLCA1ODk2NiwgNTg5NzAsIDU4OTc0LCAKLSAgICA1ODk3OCwgNTg5ODIsIDU4OTg4LCA1ODk5MiwgNTg5OTYsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDEyLCA1OTAxNiwgCi0gICAgNTkwMjAsIDU5MDI0LCA1OTAyOCwgNTkwMzIsIDU5MDM2LCA1OTA0MCwgNTkwNDYsIDU5MDUwLCA1OTA1NCwgNTkwNTgsIAotICAgIDU5MDYyLCA1OTA2NiwgNTkwNzAsIDU5MDc0LCA1OTA3OCwgNTkwODIsIDU5MDg2LCA1OTA5MCwgNTkwOTQsIDU5MDk4LCAKLSAgICA1OTEwMiwgNTkxMDYsIDU5MTEwLCA1OTExNCwgNTkxMTgsIDU5MTIyLCA1OTEyNiwgNTkxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5MTM0LCA1OTE0MywgCi0gICAgNTkxNTEsIDU5MTYzLCA1OTE3NCwgNTkxODIsIDU5MTkxLCA1OTIwMCwgNTkyMTAsIDU5MjIyLCA1OTIzNCwgNTkyNDYsIDAsIAotICAgIDAsIDAsIDAsIDU5MjUyLCA1OTI1NSwgNTkyNTgsIDU5MjYzLCA1OTI2NiwgNTkyNzMsIDU5Mjc3LCA1OTI4MSwgNTkyODUsIAotICAgIDU5Mjg5LCA1OTI5MywgNTkyOTgsIDU5MzAzLCA1OTMwNywgNTkzMTEsIDU5MzE2LCA1OTMyMSwgNTkzMjYsIDU5MzMxLCAKLSAgICA1OTMzNCwgNTkzMzcsIDU5MzQzLCA1OTM0OSwgNTkzNTQsIDU5MzU5LCA1OTM2NiwgNTkzNzMsIDU5Mzc3LCA1OTM4MSwgCi0gICAgNTkzODUsIDU5MzkzLCA1OTM5OSwgNTk0MDYsIDU5NDExLCA1OTQxNiwgNTk0MjEsIDU5NDI2LCA1OTQzMSwgNTk0MzYsIAotICAgIDU5NDQxLCA1OTQ0NiwgNTk0NTEsIDU5NDU2LCA1OTQ2MSwgNTk0NjYsIDU5NDcxLCA1OTQ3NiwgNTk0ODIsIDU5NDg3LCAKLSAgICA1OTQ5MSwgNTk0OTcsIDU5NTA4LCA1OTUxOCwgNTk1MzMsIDU5NTQzLCA1OTU0NywgNTk1NTcsIDU5NTYzLCA1OTU2OSwgCi0gICAgNTk1NzUsIDU5NTgwLCA1OTU4MywgNTk1ODgsIDU5NTkyLCAwLCA1OTU5OCwgNTk2MDIsIDU5NjA1LCA1OTYwOSwgNTk2MTIsIAotICAgIDU5NjE2LCA1OTYxOSwgNTk2MjMsIDU5NjI2LCA1OTYzMCwgNTk2MzMsIDU5NjM2LCA1OTY0MCwgNTk2NDQsIDU5NjQ4LCAKLSAgICA1OTY1MiwgNTk2NTYsIDU5NjYwLCA1OTY2NCwgNTk2NjgsIDU5NjcyLCA1OTY3NSwgNTk2NzksIDU5NjgzLCA1OTY4NywgCi0gICAgNTk2OTEsIDU5Njk1LCA1OTY5OSwgNTk3MDMsIDU5NzA3LCA1OTcxMSwgNTk3MTUsIDU5NzE5LCA1OTcyMywgNTk3MjcsIAotICAgIDU5NzMyLCA1OTczNiwgNTk3NDAsIDU5NzQ0LCA1OTc0OCwgNTk3NTEsIDU5NzU1LCA1OTc1OCwgNTk3NjIsIDU5NzY2LCAKLSAgICA1OTc3MCwgNTk3NzQsIDU5Nzc3LCA1OTc4MSwgNTk3ODQsIDU5Nzg4LCA1OTc5MiwgNTk3OTYsIDU5ODAwLCA1OTgwNCwgCi0gICAgNTk4MDgsIDU5ODEyLCA1OTgxNiwgNTk4MjAsIDU5ODI0LCA1OTgyOCwgNTk4MzIsIDU5ODM1LCA1OTgzOSwgNTk4NDMsIAotICAgIDU5ODQ3LCA1OTg1MSwgNTk4NTUsIDU5ODU4LCA1OTg2MywgNTk4NjcsIDU5ODcyLCA1OTg3NiwgNTk4NzksIDU5ODgzLCAKLSAgICA1OTg4NywgNTk4OTEsIDU5ODk1LCA1OTkwMCwgNTk5MDQsIDU5OTA4LCA1OTkxMiwgNTk5MTYsIDU5OTIwLCA1OTkyNCwgCi0gICAgNTk5MjgsIDAsIDAsIDU5OTMzLCA1OTk0MSwgNTk5NDksIDU5OTU2LCA1OTk2MywgNTk5NjcsIDU5OTczLCA1OTk3OCwgCi0gICAgNTk5ODMsIDU5OTg3LCA1OTk5MCwgNTk5OTQsIDU5OTk3LCA2MDAwMSwgNjAwMDQsIDYwMDA4LCA2MDAxMSwgNjAwMTUsIAotICAgIDYwMDE4LCA2MDAyMSwgNjAwMjUsIDYwMDI5LCA2MDAzMywgNjAwMzcsIDYwMDQxLCA2MDA0NSwgNjAwNDksIDYwMDUzLCAKLSAgICA2MDA1NywgNjAwNjAsIDYwMDY0LCA2MDA2OCwgNjAwNzIsIDYwMDc2LCA2MDA4MCwgNjAwODQsIDYwMDg4LCA2MDA5MiwgCi0gICAgNjAwOTYsIDYwMTAwLCA2MDEwNCwgNjAxMDgsIDYwMTEyLCA2MDExNywgNjAxMjEsIDYwMTI1LCA2MDEyOSwgNjAxMzMsIAotICAgIDYwMTM2LCA2MDE0MCwgNjAxNDMsIDYwMTQ3LCA2MDE1MSwgNjAxNTUsIDYwMTU5LCA2MDE2MiwgNjAxNjYsIDYwMTY5LCAKLSAgICA2MDE3MywgNjAxNzcsIDYwMTgxLCA2MDE4NSwgNjAxODksIDYwMTkzLCA2MDE5NywgNjAyMDEsIDYwMjA1LCA2MDIwOSwgCi0gICAgNjAyMTMsIDYwMjE3LCA2MDIyMCwgNjAyMjQsIDYwMjI4LCA2MDIzMiwgNjAyMzYsIDYwMjQwLCA2MDI0MywgNjAyNDgsIAotICAgIDYwMjUyLCA2MDI1NywgNjAyNjEsIDYwMjY0LCA2MDI2OCwgNjAyNzIsIDYwMjc2LCA2MDI4MCwgNjAyODUsIDYwMjg5LCAKLSAgICA2MDI5MywgNjAyOTcsIDYwMzAxLCA2MDMwNSwgNjAzMDksIDYwMzEzLCA2MDMxOCwgNjAzMjIsIDYwMzI2LCA2MDMzMCwgCi0gICAgNjAzMzQsIDYwMzM5LCA2MDM0NiwgNjAzNTAsIDYwMzU2LCAwLCAwLCAwLCAwLCAwLCA2MDM2MSwgNjAzNjYsIDYwMzcxLCAKLSAgICA2MDM3NSwgNjAzODAsIDYwMzg1LCA2MDM5MCwgNjAzOTUsIDYwMzk5LCA2MDQwNCwgNjA0MDksIDYwNDE0LCA2MDQxOSwgCi0gICAgNjA0MjQsIDYwNDI5LCA2MDQzNCwgNjA0MzksIDYwNDQ0LCA2MDQ0OCwgNjA0NTMsIDYwNDU4LCA2MDQ2MywgNjA0NjcsIAotICAgIDYwNDcxLCA2MDQ3NSwgNjA0ODAsIDYwNDg1LCA2MDQ5MCwgNjA0OTUsIDYwNTAwLCA2MDUwNSwgNjA1MTAsIDYwNTE1LCAKLSAgICA2MDUyMCwgNjA1MjUsIDYwNTI5LCA2MDUzMywgNjA1MzgsIDYwNTQzLCA2MDU0OCwgNjA1NTMsIDAsIDAsIDAsIDYwNTU4LCAKLSAgICA2MDU2MiwgNjA1NjYsIDYwNTcwLCA2MDU3NCwgNjA1NzgsIDYwNTgyLCA2MDU4NiwgNjA1OTAsIDYwNTk0LCA2MDU5OCwgCi0gICAgNjA2MDIsIDYwNjA2LCA2MDYxMCwgNjA2MTQsIDYwNjE4LCA2MDYyMiwgNjA2MjYsIDYwNjMwLCA2MDYzNCwgNjA2MzgsIAotICAgIDYwNjQyLCA2MDY0NiwgNjA2NTAsIDYwNjU0LCA2MDY1OCwgNjA2NjIsIDYwNjY2LCA2MDY3MCwgNjA2NzQsIDYwNjc4LCAKLSAgICA2MDY4MSwgNjA2ODUsIDYwNjg4LCA2MDY5MiwgNjA2OTYsIDYwNjk5LCA2MDcwMywgNjA3MDcsIDYwNzEwLCA2MDcxNCwgCi0gICAgNjA3MTgsIDYwNzIyLCA2MDcyNiwgNjA3MjksIDYwNzMzLCA2MDczNywgNjA3NDEsIDYwNzQ1LCA2MDc0OSwgNjA3NTMsIAotICAgIDYwNzU2LCA2MDc1OSwgNjA3NjMsIDYwNzY3LCA2MDc3MSwgNjA3NzUsIDYwNzc5LCA2MDc4MywgNjA3ODcsIDYwNzkxLCAKLSAgICA2MDc5NSwgNjA3OTksIDYwODAzLCA2MDgwNywgNjA4MTEsIDYwODE1LCA2MDgxOSwgNjA4MjMsIDYwODI3LCA2MDgzMSwgCi0gICAgNjA4MzUsIDYwODM5LCA2MDg0MywgNjA4NDcsIDYwODUxLCA2MDg1NSwgNjA4NTksIDYwODYzLCA2MDg2NywgNjA4NzEsIAotICAgIDYwODc1LCA2MDg3OSwgNjA4ODMsIDYwODg3LCA2MDg5MSwgNjA4OTUsIDYwODk5LCA2MDkwMywgNjA5MDcsIDYwOTExLCAKLSAgICA2MDkxNSwgNjA5MTksIDYwOTIzLCAwLCA2MDkyNywgNjA5MzMsIDYwOTM5LCA2MDk0NCwgNjA5NDksIDYwOTU0LCA2MDk2MCwgCi0gICAgNjA5NjYsIDYwOTcyLCA2MDk3OCwgNjA5ODQsIDYwOTkwLCA2MDk5NiwgNjEwMDIsIDYxMDA4LCA2MTAxNCwgNjEwMjAsIAotICAgIDYxMDI1LCA2MTAzMCwgNjEwMzUsIDYxMDQwLCA2MTA0NSwgNjEwNTAsIDYxMDU1LCA2MTA2MCwgNjEwNjUsIDYxMDcwLCAKLSAgICA2MTA3NSwgNjEwODAsIDYxMDg1LCA2MTA5MCwgNjEwOTUsIDYxMTAwLCA2MTEwNSwgNjExMTAsIDYxMTE1LCA2MTEyMCwgCi0gICAgNjExMjYsIDYxMTMyLCA2MTEzOCwgNjExNDQsIDYxMTQ5LCA2MTE1NCwgMCwgMCwgMCwgMCwgMCwgNjExNTksIDYxMTY0LCAKLSAgICA2MTE2OSwgNjExNzQsIDYxMTc5LCA2MTE4NCwgNjExODksIDYxMTk0LCA2MTE5OSwgNjEyMDQsIDYxMjA5LCA2MTIxNCwgCi0gICAgNjEyMTksIDYxMjI0LCA2MTIyOSwgNjEyMzQsIDYxMjM5LCA2MTI0NCwgNjEyNDksIDYxMjU0LCA2MTI1OSwgNjEyNjQsIAotICAgIDYxMjY5LCA2MTI3NCwgNjEyNzksIDYxMjg0LCA2MTI4OSwgNjEyOTQsIDYxMjk5LCA2MTMwNCwgNjEzMDksIDYxMzE0LCAKLSAgICA2MTMxOSwgNjEzMjQsIDYxMzI5LCA2MTMzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjEzMzksIAotICAgIDYxMzQ0LCA2MTM0OSwgNjEzNTQsIDYxMzU4LCA2MTM2MywgNjEzNjcsIDYxMzcyLCA2MTM3NywgNjEzODIsIDYxMzg3LCAKLSAgICA2MTM5MiwgNjEzOTYsIDYxNDAxLCA2MTQwNiwgNjE0MTEsIDYxNDE2LCA2MTQyMCwgNjE0MjQsIDYxNDI4LCA2MTQzMiwgCi0gICAgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDgsIDYxNDUyLCA2MTQ1NiwgNjE0NjAsIDYxNDY0LCA2MTQ2OCwgNjE0NzIsIAotICAgIDYxNDc3LCA2MTQ4MiwgNjE0ODcsIDYxNDkyLCA2MTQ5NywgNjE1MDIsIDYxNTA3LCA2MTUxMiwgNjE1MTcsIDYxNTIyLCAKLSAgICA2MTUyNywgNjE1MzIsIDYxNTM3LCA2MTU0MiwgNjE1NDcsIDYxNTUzLCAwLCA2MTU2MCwgNjE1NjMsIDYxNTY2LCA2MTU2OSwgCi0gICAgNjE1NzIsIDYxNTc1LCA2MTU3OCwgNjE1ODEsIDYxNTg0LCA2MTU4NywgNjE1OTEsIDYxNTk1LCA2MTU5OSwgNjE2MDMsIAotICAgIDYxNjA3LCA2MTYxMSwgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgNjE2MzksIDYxNjQzLCAKLSAgICA2MTY0NywgNjE2NTEsIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIDYxNjc5LCA2MTY4MywgCi0gICAgNjE2ODcsIDYxNjkxLCA2MTY5NSwgNjE2OTksIDYxNzAzLCA2MTcwNywgNjE3MTEsIDYxNzIwLCA2MTcyOSwgNjE3MzgsIAotICAgIDYxNzQ3LCA2MTc1NiwgNjE3NjUsIDYxNzc0LCA2MTc4MywgNjE3ODYsIDYxNzkxLCA2MTc5NiwgNjE4MDEsIDYxODA2LCAKLSAgICA2MTgxMSwgNjE4MTYsIDYxODIxLCA2MTgyNiwgNjE4MzEsIDYxODM1LCA2MTg0MCwgNjE4NDUsIDYxODUwLCA2MTg1NSwgCi0gICAgNjE4NjAsIDYxODY0LCA2MTg2OCwgNjE4NzIsIDYxODc2LCA2MTg4MCwgNjE4ODQsIDYxODg4LCA2MTg5MiwgNjE4OTYsIAotICAgIDYxOTAwLCA2MTkwNCwgNjE5MDgsIDYxOTEyLCA2MTkxNiwgNjE5MjEsIDYxOTI2LCA2MTkzMSwgNjE5MzYsIDYxOTQxLCAKLSAgICA2MTk0NiwgNjE5NTEsIDYxOTU2LCA2MTk2MSwgNjE5NjYsIDYxOTcxLCA2MTk3NiwgNjE5ODEsIDYxOTg2LCA2MTk5MiwgCi0gICAgNjE5OTgsIDYyMDAzLCA2MjAwOCwgNjIwMTEsIDYyMDE0LCA2MjAxNywgNjIwMjAsIDYyMDIzLCA2MjAyNiwgNjIwMjksIAotICAgIDYyMDMyLCA2MjAzNSwgNjIwMzksIDYyMDQzLCA2MjA0NywgNjIwNTEsIDYyMDU1LCA2MjA1OSwgNjIwNjMsIDYyMDY3LCAKLSAgICA2MjA3MSwgNjIwNzUsIDYyMDc5LCA2MjA4MywgNjIwODcsIDYyMDkxLCA2MjA5NSwgNjIwOTksIDYyMTAzLCA2MjEwNywgCi0gICAgNjIxMTEsIDYyMTE1LCA2MjExOSwgNjIxMjMsIDYyMTI3LCA2MjEzMSwgNjIxMzUsIDYyMTM5LCA2MjE0MywgNjIxNDcsIAotICAgIDYyMTUxLCA2MjE1NSwgNjIxNTksIDYyMTYzLCA2MjE2NywgNjIxNzEsIDYyMTc1LCA2MjE3OSwgNjIxODMsIDYyMTg3LCAKLSAgICA2MjE5MSwgNjIxOTUsIDYyMjAwLCA2MjIwNSwgNjIyMTAsIDYyMjE1LCA2MjIxOSwgNjIyMjQsIDYyMjI5LCA2MjIzNCwgCi0gICAgNjIyMzksIDYyMjQ0LCA2MjI0OSwgNjIyNTQsIDYyMjU5LCA2MjI2NCwgNjIyNjgsIDYyMjc1LCA2MjI4MiwgNjIyODksIAotICAgIDYyMjk2LCA2MjMwMywgNjIzMTAsIDYyMzE3LCA2MjMyNCwgNjIzMzEsIDYyMzM4LCA2MjM0NSwgNjIzNTIsIDYyMzU1LCAKLSAgICA2MjM1OCwgNjIzNjEsIDYyMzY2LCA2MjM2OSwgNjIzNzIsIDYyMzc1LCA2MjM3OCwgNjIzODEsIDYyMzg0LCA2MjM4OCwgCi0gICAgNjIzOTIsIDYyMzk2LCA2MjQwMCwgNjI0MDMsIDYyNDA3LCA2MjQxMSwgNjI0MTUsIDYyNDE5LCA2MjQyMywgNjI0MjcsIAotICAgIDYyNDMxLCA2MjQzNSwgNjI0MzgsIDYyNDQxLCA2MjQ0NSwgNjI0NDksIDYyNDUzLCA2MjQ1NywgNjI0NjAsIDYyNDY0LCAKLSAgICA2MjQ2OCwgNjI0NzIsIDYyNDc2LCA2MjQ3OSwgNjI0ODMsIDYyNDg3LCA2MjQ5MSwgNjI0OTUsIDYyNDk4LCA2MjUwMiwgCi0gICAgNjI1MDYsIDYyNTA5LCA2MjUxMywgNjI1MTcsIDYyNTIxLCA2MjUyNSwgNjI1MjksIDYyNTMzLCA2MjUzNywgMCwgNjI1NDEsIAotICAgIDYyNTQ0LCA2MjU0NywgNjI1NTAsIDYyNTUzLCA2MjU1NiwgNjI1NTksIDYyNTYyLCA2MjU2NSwgNjI1NjgsIDYyNTcxLCAKLSAgICA2MjU3NCwgNjI1NzcsIDYyNTgwLCA2MjU4MywgNjI1ODYsIDYyNTg5LCA2MjU5MiwgNjI1OTUsIDYyNTk4LCA2MjYwMSwgCi0gICAgNjI2MDQsIDYyNjA3LCA2MjYxMCwgNjI2MTMsIDYyNjE2LCA2MjYxOSwgNjI2MjIsIDYyNjI1LCA2MjYyOCwgNjI2MzEsIAotICAgIDYyNjM0LCA2MjYzNywgNjI2NDAsIDYyNjQzLCA2MjY0NiwgNjI2NDksIDYyNjUyLCA2MjY1NSwgNjI2NTgsIDYyNjYxLCAKLSAgICA2MjY2NCwgNjI2NjcsIDYyNjcwLCA2MjY3MywgNjI2NzYsIDYyNjc5LCA2MjY4MiwgNjI2ODUsIDYyNjg4LCA2MjY5MSwgCi0gICAgNjI2OTQsIDYyNjk3LCA2MjcwMCwgNjI3MDMsIDYyNzA2LCA2MjcwOSwgNjI3MTIsIDYyNzE1LCA2MjcxOCwgNjI3MjEsIAotICAgIDYyNzI0LCA2MjcyNywgNjI3MzAsIDYyNzMzLCA2MjczNiwgNjI3MzksIDYyNzQyLCA2Mjc0NSwgNjI3NDgsIDYyNzUxLCAKLSAgICA2Mjc1NCwgNjI3NTcsIDYyNzYwLCA2Mjc2MywgNjI3NjYsIDYyNzY5LCA2Mjc3MiwgNjI3NzUsIDYyNzc4LCA2Mjc4MSwgCi0gICAgNjI3ODQsIDYyNzg3LCA2Mjc5MCwgNjI3OTMsIDYyNzk2LCA2Mjc5OSwgNjI4MDIsIDYyODA1LCA2MjgxNCwgNjI4MjIsIAotICAgIDYyODMwLCA2MjgzOCwgNjI4NDYsIDYyODU0LCA2Mjg2MiwgNjI4NzAsIDYyODc4LCA2Mjg4NiwgNjI4OTUsIDYyOTA0LCAKLSAgICA2MjkxMywgNjI5MjIsIDYyOTMxLCA2Mjk0MCwgNjI5NDksIDYyOTU4LCA2Mjk2NywgNjI5NzYsIDYyOTg1LCA2Mjk5NCwgCi0gICAgNjMwMDMsIDYzMDEyLCA2MzAyMSwgNjMwMjQsIDYzMDI3LCA2MzAzMCwgNjMwMzIsIDYzMDM1LCA2MzAzOCwgNjMwNDEsIAotICAgIDYzMDQ2LCA2MzA1MSwgNjMwNTQsIDYzMDYxLCA2MzA2OCwgNjMwNzUsIDYzMDgyLCA2MzA4NSwgNjMwOTAsIDYzMDkyLCAKLSAgICA2MzA5NiwgNjMwOTgsIDYzMTAwLCA2MzEwMywgNjMxMDYsIDYzMTA5LCA2MzExMiwgNjMxMTUsIDYzMTE4LCA2MzEyMSwgCi0gICAgNjMxMjYsIDYzMTMxLCA2MzEzNCwgNjMxMzcsIDYzMTQwLCA2MzE0MywgNjMxNDYsIDYzMTQ5LCA2MzE1MiwgNjMxNTYsIAotICAgIDYzMTU5LCA2MzE2MiwgNjMxNjUsIDYzMTY4LCA2MzE3MSwgNjMxNzUsIDYzMTc4LCA2MzE4MSwgNjMxODQsIDYzMTg5LCAKLSAgICA2MzE5NCwgNjMxOTksIDYzMjA0LCA2MzIwOSwgNjMyMTQsIDYzMjE5LCA2MzIyNCwgNjMyMzAsIDYzMjM4LCA2MzI0MCwgCi0gICAgNjMyNDMsIDYzMjQ2LCA2MzI0OSwgNjMyNTIsIDYzMjU4LCA2MzI2NiwgNjMyNjksIDYzMjcyLCA2MzI3NywgNjMyODAsIAotICAgIDYzMjgzLCA2MzI4NiwgNjMyOTEsIDYzMjk0LCA2MzI5NywgNjMzMDIsIDYzMzA1LCA2MzMwOCwgNjMzMTMsIDYzMzE2LCAKLSAgICA2MzMxOSwgNjMzMjQsIDYzMzI5LCA2MzMzNCwgNjMzMzcsIDYzMzQwLCA2MzM0MywgNjMzNDYsIDYzMzUyLCA2MzM1NSwgCi0gICAgNjMzNTgsIDYzMzYxLCA2MzM2MywgNjMzNjYsIDYzMzY5LCA2MzM3MiwgNjMzNzcsIDYzMzgwLCA2MzM4MywgNjMzODYsIAotICAgIDYzMzg5LCA2MzM5MiwgNjMzOTcsIDYzNDAwLCA2MzQwMywgNjM0MDYsIDYzNDA5LCA2MzQxMiwgNjM0MTUsIDYzNDE4LCAKLSAgICA2MzQyMSwgNjM0MjQsIDYzNDI5LCA2MzQzMywgNjM0NDEsIDYzNDQ5LCA2MzQ1NywgNjM0NjUsIDYzNDczLCA2MzQ4MSwgCi0gICAgNjM0ODksIDYzNDk3LCA2MzUwNSwgNjM1MTQsIDYzNTIzLCA2MzUzMiwgNjM1NDEsIDYzNTUwLCA2MzU1OSwgNjM1NjgsIAotICAgIDYzNTc3LCA2MzU4NiwgNjM1OTUsIDYzNjA0LCA2MzYxMywgNjM2MjIsIDYzNjMxLCA2MzY0MCwgNjM2NDksIDYzNjU4LCAKLSAgICA2MzY2NywgNjM2NzYsIDYzNjg1LCA2MzY5NCwgNjM3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg3ODgwLCA4Nzg5NSwgODc5MTAsIDg3OTE2LCA4NzkyMiwgODc5MjgsIAorICAgIDg3OTM0LCA4Nzk0MCwgODc5NDYsIDg3OTUyLCA4Nzk1OCwgODc5NjYsIDg3OTcwLCA4Nzk3MywgMCwgMCwgODc5ODEsIAorICAgIDg3OTg0LCA4Nzk4NywgODc5OTAsIDg3OTkzLCA4Nzk5NiwgODc5OTksIDg4MDAyLCA4ODAwNSwgODgwMDgsIDg4MDExLCAKKyAgICA4ODAxNCwgODgwMTcsIDg4MDIwLCA4ODAyMywgODgwMjYsIDg4MDI5LCA4ODAzNywgODgwNDYsIDg4MDU3LCA4ODA2NSwgCisgICAgODgwNzMsIDg4MDgyLCA4ODA5MSwgODgxMDIsIDg4MTE0LCAwLCAwLCAwLCAwLCAwLCAwLCA4ODEyNCwgODgxMjksIDg4MTM0LCAKKyAgICA4ODE0MSwgODgxNDgsIDg4MTU0LCA4ODE2MCwgODgxNjUsIDg4MTcwLCA4ODE3NSwgODgxODEsIDg4MTg3LCA4ODE5MywgCisgICAgODgxOTksIDg4MjA1LCA4ODIxMiwgODgyMTksIDg4MjI5LCA4ODIzOSwgODgyNDksIDg4MjU4LCA4ODI2OSwgODgyNzgsIAorICAgIDg4Mjg3LCA4ODI5NywgODgzMDcsIDg4MzE5LCA4ODMzMSwgODgzNDIsIDg4MzUzLCA4ODM2NCwgODgzNzUsIDg4Mzg1LCAKKyAgICA4ODM5NSwgODg0MDUsIDg4NDE1LCA4ODQyNiwgODg0MzcsIDg4NDQxLCA4ODQ0NiwgODg0NTUsIDg4NDY0LCA4ODQ2OCwgCisgICAgODg0NzIsIDg4NDc2LCA4ODQ4MSwgODg0ODYsIDg4NDkxLCA4ODQ5NiwgODg0OTksIDg4NTAzLCAwLCA4ODUwOCwgODg1MTEsIAorICAgIDg4NTE0LCA4ODUxOCwgODg1MjIsIDg4NTI3LCA4ODUzMSwgODg1MzUsIDg4NTQwLCA4ODU0NSwgODg1NTIsIDg4NTU5LCAKKyAgICA4ODU2MiwgODg1NjUsIDg4NTY4LCA4ODU3MSwgODg1NzQsIDg4NTc4LCA4ODU4MiwgMCwgODg1ODYsIDg4NTkxLCA4ODU5NSwgCisgICAgODg1OTksIDAsIDAsIDAsIDAsIDg4NjA0LCA4ODYwOSwgODg2MTYsIDg4NjIxLCA4ODYyNiwgMCwgODg2MzEsIDg4NjM2LCAKKyAgICA4ODY0MSwgODg2NDYsIDg4NjUxLCA4ODY1NiwgODg2NjEsIDg4NjY2LCA4ODY3MSwgODg2NzYsIDg4NjgxLCA4ODY4NywgCisgICAgODg2OTYsIDg4NzA1LCA4ODcxNCwgODg3MjMsIDg4NzMzLCA4ODc0MywgODg3NTMsIDg4NzYzLCA4ODc3MiwgODg3ODEsIAorICAgIDg4NzkwLCA4ODc5OSwgODg4MDQsIDg4ODA5LCA4ODgxNSwgODg4MjEsIDg4ODI3LCA4ODgzMywgODg4NDEsIDg4ODQ5LCAKKyAgICA4ODg1NSwgODg4NjEsIDg4ODY3LCA4ODg3MywgODg4NzksIDg4ODg1LCA4ODg5MSwgODg4OTcsIDg4OTAyLCA4ODkwNywgCisgICAgODg5MTIsIDg4OTE3LCA4ODkyMiwgODg5MjcsIDg4OTMyLCA4ODkzNywgODg5NDMsIDg4OTQ5LCA4ODk1NSwgODg5NjEsIAorICAgIDg4OTY3LCA4ODk3MywgODg5NzksIDg4OTg1LCA4ODk5MSwgODg5OTcsIDg5MDAzLCA4OTAwOSwgODkwMTUsIDg5MDIxLCAKKyAgICA4OTAyNywgODkwMzMsIDg5MDM5LCA4OTA0NSwgODkwNTEsIDg5MDU3LCA4OTA2MywgODkwNjksIDg5MDc1LCA4OTA4MSwgCisgICAgODkwODcsIDg5MDkzLCA4OTA5OSwgODkxMDUsIDg5MTExLCA4OTExNywgODkxMjMsIDg5MTI5LCA4OTEzNSwgODkxNDEsIAorICAgIDg5MTQ3LCA4OTE1MywgODkxNTksIDg5MTY1LCA4OTE3MSwgODkxNzcsIDg5MTgzLCA4OTE4OSwgODkxOTUsIDg5MjAxLCAKKyAgICA4OTIwNywgODkyMTMsIDg5MjE5LCA4OTIyNSwgODkyMzEsIDg5MjM3LCA4OTI0MywgODkyNDksIDg5MjU1LCA4OTI2MSwgCisgICAgODkyNjcsIDg5MjczLCA4OTI3OSwgODkyODUsIDg5MjkxLCA4OTI5NywgODkzMDIsIDg5MzA3LCA4OTMxMiwgODkzMTcsIAorICAgIDg5MzIzLCA4OTMyOSwgODkzMzUsIDg5MzQxLCA4OTM0NywgODkzNTMsIDg5MzU5LCA4OTM2NSwgODkzNzEsIDg5Mzc3LCAKKyAgICA4OTM4NCwgODkzOTEsIDg5Mzk2LCA4OTQwMSwgODk0MDYsIDg5NDExLCA4OTQyMywgODk0MzUsIDg5NDQ3LCA4OTQ1OSwgCisgICAgODk0NzIsIDg5NDg1LCA4OTQ5MywgMCwgMCwgODk1MDEsIDAsIDg5NTA5LCA4OTUxMywgODk1MTcsIDg5NTIwLCA4OTUyNCwgCisgICAgODk1MjgsIDg5NTMxLCA4OTUzNCwgODk1MzgsIDg5NTQyLCA4OTU0NSwgODk1NDgsIDg5NTUxLCA4OTU1NCwgODk1NTksIAorICAgIDg5NTYyLCA4OTU2NiwgODk1NjksIDg5NTcyLCA4OTU3NSwgODk1NzgsIDg5NTgxLCA4OTU4NCwgODk1ODgsIDg5NTkxLCAKKyAgICA4OTU5NSwgODk1OTgsIDg5NjAxLCA4OTYwNSwgODk2MDksIDg5NjEzLCA4OTYxNywgODk2MjIsIDg5NjI3LCA4OTYzMywgCisgICAgODk2MzksIDg5NjQ1LCA4OTY1MCwgODk2NTYsIDg5NjYyLCA4OTY2OCwgODk2NzMsIDg5Njc5LCA4OTY4NSwgODk2OTAsIAorICAgIDg5Njk2LCA4OTcwMiwgODk3MDcsIDg5NzEzLCA4OTcxOSwgODk3MjQsIDg5NzI5LCA4OTczNSwgODk3NDAsIDg5NzQ2LCAKKyAgICA4OTc1MiwgODk3NTgsIDg5NzY0LCA4OTc3MCwgODk3NzQsIDg5Nzc5LCA4OTc4MywgODk3ODgsIDg5NzkyLCA4OTc5NywgCisgICAgODk4MDIsIDg5ODA4LCA4OTgxNCwgODk4MjAsIDg5ODI1LCA4OTgzMSwgODk4MzcsIDg5ODQzLCA4OTg0OCwgODk4NTQsIAorICAgIDg5ODYwLCA4OTg2NSwgODk4NzEsIDg5ODc3LCA4OTg4MiwgODk4ODgsIDg5ODk0LCA4OTg5OSwgODk5MDQsIDg5OTEwLCAKKyAgICA4OTkxNSwgODk5MjEsIDg5OTI3LCA4OTkzMywgODk5MzksIDg5OTQ1LCA4OTk1MCwgODk5NTQsIDg5OTU5LCA4OTk2MiwgCisgICAgODk5NjcsIDg5OTcyLCA4OTk3OCwgODk5ODMsIDg5OTg4LCA4OTk5MiwgODk5OTcsIDkwMDAyLCA5MDAwNywgOTAwMTIsIAorICAgIDkwMDE3LCA5MDAyMiwgOTAwMjcsIDkwMDMyLCA5MDAzOCwgOTAwNDQsIDkwMDUwLCA5MDA1OCwgOTAwNjIsIDkwMDY2LCAKKyAgICA5MDA3MCwgOTAwNzQsIDkwMDc4LCA5MDA4MiwgOTAwODcsIDkwMDkyLCA5MDA5NywgOTAxMDIsIDkwMTA3LCA5MDExMiwgCisgICAgOTAxMTcsIDkwMTIyLCA5MDEyNywgOTAxMzIsIDkwMTM3LCA5MDE0MiwgOTAxNDcsIDkwMTUxLCA5MDE1NiwgOTAxNjEsIAorICAgIDkwMTY2LCA5MDE3MSwgOTAxNzYsIDkwMTgwLCA5MDE4NSwgOTAxOTAsIDkwMTk1LCA5MDIwMCwgOTAyMDQsIDkwMjA5LCAKKyAgICA5MDIxNCwgOTAyMTksIDkwMjI0LCA5MDIyOCwgOTAyMzMsIDkwMjM4LCA5MDI0MywgOTAyNDgsIDkwMjUzLCA5MDI1OCwgCisgICAgOTAyNjMsIDkwMjY4LCA5MDI3MywgOTAyODAsIDkwMjg3LCA5MDI5MSwgOTAyOTYsIDkwMzAxLCA5MDMwNiwgOTAzMTEsIAorICAgIDkwMzE2LCA5MDMyMSwgOTAzMjYsIDkwMzMxLCA5MDMzNiwgOTAzNDEsIDkwMzQ2LCA5MDM1MSwgOTAzNTYsIDkwMzYxLCAKKyAgICA5MDM2NiwgOTAzNzEsIDkwMzc2LCA5MDM4MSwgOTAzODYsIDkwMzkxLCA5MDM5NiwgOTA0MDEsIDkwNDA2LCA5MDQxMSwgCisgICAgOTA0MTYsIDkwNDIxLCA5MDQyNiwgOTA0MzEsIDkwNDM2LCAwLCAwLCAwLCA5MDQ0MSwgOTA0NDUsIDkwNDUwLCA5MDQ1NCwgCisgICAgOTA0NTksIDkwNDY0LCAwLCAwLCA5MDQ2OCwgOTA0NzMsIDkwNDc4LCA5MDQ4MiwgOTA0ODcsIDkwNDkyLCAwLCAwLCAKKyAgICA5MDQ5NywgOTA1MDIsIDkwNTA2LCA5MDUxMSwgOTA1MTYsIDkwNTIxLCAwLCAwLCA5MDUyNiwgOTA1MzEsIDkwNTM2LCAwLCAKKyAgICAwLCAwLCA5MDU0MCwgOTA1NDQsIDkwNTQ4LCA5MDU1MiwgOTA1NTUsIDkwNTU5LCA5MDU2MywgMCwgOTA1NjcsIDkwNTczLCAKKyAgICA5MDU3NiwgOTA1NzksIDkwNTgyLCA5MDU4NSwgOTA1ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkwNTkzLCAKKyAgICA5MDU5OSwgOTA2MDUsIDkwNjExLCA5MDYxNywgMCwgMCwgOTA2MjEsIDkwNjI3LCA5MDYzMywgOTA2MzksIDkwNjQ1LCAKKyAgICA5MDY1MSwgOTA2NTgsIDkwNjY1LCA5MDY3MiwgOTA2NzksIDkwNjg2LCA5MDY5MywgMCwgOTA3MDAsIDkwNzA3LCA5MDcxNCwgCisgICAgOTA3MjAsIDkwNzI3LCA5MDczNCwgOTA3NDEsIDkwNzQ4LCA5MDc1NCwgOTA3NjEsIDkwNzY4LCA5MDc3NSwgOTA3ODIsIAorICAgIDkwNzg5LCA5MDc5NiwgOTA4MDMsIDkwODEwLCA5MDgxNywgOTA4MjMsIDkwODMwLCA5MDgzNywgOTA4NDQsIDkwODUxLCAKKyAgICA5MDg1OCwgOTA4NjUsIDkwODcyLCAwLCA5MDg3OSwgOTA4ODYsIDkwODkzLCA5MDkwMCwgOTA5MDcsIDkwOTE0LCA5MDkyMSwgCisgICAgOTA5MjgsIDkwOTM1LCA5MDk0MiwgOTA5NDksIDkwOTU2LCA5MDk2MywgOTA5NzAsIDkwOTc2LCA5MDk4MywgOTA5OTAsIAorICAgIDkwOTk3LCA5MTAwNCwgMCwgOTEwMTEsIDkxMDE4LCAwLCA5MTAyNSwgOTEwMzIsIDkxMDM5LCA5MTA0NiwgOTEwNTMsIAorICAgIDkxMDYwLCA5MTA2NywgOTEwNzQsIDkxMDgxLCA5MTA4OCwgOTEwOTUsIDkxMTAyLCA5MTEwOSwgOTExMTYsIDkxMTIzLCAwLCAKKyAgICAwLCA5MTEyOSwgOTExMzQsIDkxMTM5LCA5MTE0NCwgOTExNDksIDkxMTU0LCA5MTE1OSwgOTExNjQsIDkxMTY5LCA5MTE3NCwgCisgICAgOTExNzksIDkxMTg0LCA5MTE4OSwgOTExOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxMTk5LCA5MTIwNiwgCisgICAgOTEyMTMsIDkxMjIwLCA5MTIyNywgOTEyMzQsIDkxMjQxLCA5MTI0OCwgOTEyNTUsIDkxMjYyLCA5MTI2OSwgOTEyNzYsIAorICAgIDkxMjgzLCA5MTI5MCwgOTEyOTcsIDkxMzA0LCA5MTMxMSwgOTEzMTgsIDkxMzI1LCA5MTMzMiwgOTEzNDAsIDkxMzQ4LCAKKyAgICA5MTM1NSwgOTEzNjIsIDkxMzY3LCA5MTM3NSwgOTEzODMsIDkxMzkwLCA5MTM5NywgOTE0MDIsIDkxNDA5LCA5MTQxNCwgCisgICAgOTE0MTksIDkxNDI2LCA5MTQzMSwgOTE0MzYsIDkxNDQxLCA5MTQ0OSwgOTE0NTQsIDkxNDU5LCA5MTQ2NiwgOTE0NzEsIAorICAgIDkxNDc2LCA5MTQ4MywgOTE0OTAsIDkxNDk1LCA5MTUwMCwgOTE1MDUsIDkxNTEwLCA5MTUxNSwgOTE1MjAsIDkxNTI1LCAKKyAgICA5MTUzMCwgOTE1MzUsIDkxNTQyLCA5MTU0NywgOTE1NTQsIDkxNTU5LCA5MTU2NCwgOTE1NjksIDkxNTc0LCA5MTU3OSwgCisgICAgOTE1ODQsIDkxNTg5LCA5MTU5NCwgOTE1OTksIDkxNjA0LCA5MTYwOSwgOTE2MTYsIDkxNjIzLCA5MTYzMCwgOTE2MzcsIAorICAgIDkxNjQzLCA5MTY0OCwgOTE2NTUsIDkxNjYwLCA5MTY2NSwgOTE2NzQsIDkxNjgxLCA5MTY5MCwgOTE2OTcsIDkxNzAyLCAKKyAgICA5MTcwNywgOTE3MTUsIDkxNzIwLCA5MTcyNSwgOTE3MzAsIDkxNzM1LCA5MTc0MCwgOTE3NDcsIDkxNzUyLCA5MTc1NywgCisgICAgOTE3NjIsIDkxNzY3LCA5MTc3MiwgOTE3NzksIDkxNzg2LCA5MTc5MywgOTE4MDAsIDkxODA3LCA5MTgxNCwgOTE4MjEsIAorICAgIDkxODI4LCA5MTgzNSwgOTE4NDIsIDkxODQ5LCA5MTg1NiwgOTE4NjMsIDkxODcwLCA5MTg3NywgOTE4ODQsIDkxODkxLCAKKyAgICA5MTg5OCwgOTE5MDUsIDkxOTEyLCA5MTkxOSwgOTE5MjYsIDkxOTMzLCA5MTk0MCwgOTE5NDcsIDkxOTU0LCA5MTk2MSwgCisgICAgOTE5NjgsIDAsIDAsIDAsIDAsIDAsIDkxOTc1LCA5MTk4MywgOTE5OTEsIDAsIDAsIDAsIDAsIDkxOTk2LCA5MjAwMCwgCisgICAgOTIwMDQsIDkyMDA4LCA5MjAxMiwgOTIwMTYsIDkyMDIwLCA5MjAyNSwgOTIwMjksIDkyMDM0LCA5MjAzOSwgOTIwNDQsIAorICAgIDkyMDQ5LCA5MjA1NCwgOTIwNTksIDkyMDY0LCA5MjA2OSwgOTIwNzQsIDkyMDc5LCA5MjA4NSwgOTIwOTEsIDkyMDk3LCAKKyAgICA5MjEwNCwgOTIxMTEsIDkyMTE4LCA5MjEyNSwgOTIxMzIsIDkyMTM5LCA5MjE0NSwgOTIxNTEsIDkyMTU3LCA5MjE2NCwgCisgICAgOTIxNzEsIDkyMTc4LCA5MjE4NSwgOTIxOTIsIDkyMTk5LCA5MjIwNiwgOTIyMTMsIDkyMjIwLCA5MjIyNywgOTIyMzQsIAorICAgIDkyMjQxLCA5MjI0OCwgOTIyNTUsIDAsIDAsIDAsIDkyMjYyLCA5MjI3MCwgOTIyNzgsIDkyMjg2LCA5MjI5NCwgOTIzMDIsIAorICAgIDkyMzEyLCA5MjMyMiwgOTIzMzAsIDkyMzM4LCA5MjM0NiwgOTIzNTQsIDkyMzYyLCA5MjM2OCwgOTIzNzUsIDkyMzg0LCAKKyAgICA5MjM5MywgOTI0MDIsIDkyNDExLCA5MjQyMCwgOTI0MjksIDkyNDM5LCA5MjQ1MCwgOTI0NjAsIDkyNDcxLCA5MjQ4MCwgCisgICAgOTI0ODksIDkyNDk4LCA5MjUwOCwgOTI1MTksIDkyNTI5LCA5MjU0MCwgOTI1NTEsIDkyNTYwLCA5MjU2OCwgOTI1NzQsIAorICAgIDkyNTgwLCA5MjU4NiwgOTI1OTIsIDkyNjAwLCA5MjYwOCwgOTI2MTQsIDkyNjIxLCA5MjYzMSwgOTI2MzgsIDkyNjQ1LCAKKyAgICA5MjY1MiwgOTI2NTksIDkyNjY2LCA5MjY3NiwgOTI2ODMsIDkyNjkwLCA5MjY5OCwgOTI3MDYsIDkyNzE1LCA5MjcyNCwgCisgICAgOTI3MzMsIDkyNzQyLCA5Mjc1MSwgOTI3NTksIDkyNzY4LCA5Mjc3NywgOTI3ODYsIDkyNzkwLCA5Mjc5NywgOTI4MDIsIAorICAgIDkyODA3LCA5MjgxMSwgOTI4MTUsIDkyODE5LCA5MjgyMywgOTI4MjgsIDkyODMzLCA5MjgzOSwgOTI4NDUsIDkyODQ5LCAKKyAgICA5Mjg1NSwgOTI4NTksIDkyODYzLCA5Mjg2NywgOTI4NzEsIDkyODc1LCA5Mjg3OSwgOTI4ODUsIDkyODg5LCA5Mjg5NCwgMCwgCisgICAgMCwgMCwgOTI4OTgsIDkyOTAzLCA5MjkwOCwgOTI5MTMsIDkyOTE4LCA5MjkyNSwgOTI5MzAsIDkyOTM1LCA5Mjk0MCwgCisgICAgOTI5NDUsIDkyOTUwLCA5Mjk1NSwgMCwgMCwgMCwgMCwgOTI5NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDYzNzA2LCA2MzcxNSwgNjM3MjQsIDYzNzM1LCA2Mzc0MiwgNjM3NDcsIDYzNzUyLCA2Mzc1OSwgNjM3NjYsIAotICAgIDYzNzcyLCA2Mzc3NywgNjM3ODIsIDYzNzg3LCA2Mzc5MiwgNjM3OTksIDYzODA0LCA2MzgwOSwgNjM4MTQsIDYzODI1LCAKLSAgICA2MzgzMCwgNjM4MzUsIDYzODQyLCA2Mzg0NywgNjM4NTQsIDYzODU5LCA2Mzg2NCwgNjM4NzEsIDYzODc4LCA2Mzg4NSwgCi0gICAgNjM4OTQsIDYzOTAzLCA2MzkwOCwgNjM5MTMsIDYzOTE4LCA2MzkyNSwgNjM5MzAsIDYzOTQwLCA2Mzk0NywgNjM5NTIsIAotICAgIDYzOTU3LCA2Mzk2MiwgNjM5NjcsIDYzOTcyLCA2Mzk3NywgNjM5ODYsIDYzOTkzLCA2NDAwMCwgNjQwMDUsIDY0MDEyLCAKLSAgICA2NDAxNywgNjQwMjQsIDY0MDMzLCA2NDA0NCwgNjQwNDksIDY0MDU4LCA2NDA2MywgNjQwNzAsIDY0MDc5LCA2NDA4OCwgCi0gICAgNjQwOTMsIDY0MDk4LCA2NDEwNSwgNjQxMTEsIDY0MTE4LCA2NDEyNSwgNjQxMjksIDY0MTMzLCA2NDEzNiwgNjQxNDAsIAotICAgIDY0MTQ0LCA2NDE0OCwgNjQxNTIsIDY0MTU2LCA2NDE2MCwgNjQxNjQsIDY0MTY3LCA2NDE3MSwgNjQxNzUsIDY0MTc5LCAKLSAgICA2NDE4MywgNjQxODcsIDY0MTkxLCA2NDE5NCwgNjQxOTgsIDY0MjAyLCA2NDIwNSwgNjQyMDksIDY0MjEzLCA2NDIxNywgCi0gICAgNjQyMjEsIDY0MjI1LCA2NDIyOSwgNjQyMzMsIDY0MjM3LCA2NDI0MSwgNjQyNDUsIDY0MjQ5LCA2NDI1MywgNjQyNTcsIAotICAgIDY0MjYxLCA2NDI2NSwgNjQyNjksIDY0MjczLCA2NDI3NywgNjQyODEsIDY0Mjg1LCA2NDI4OSwgNjQyOTMsIDY0Mjk3LCAKLSAgICA2NDMwMSwgNjQzMDUsIDY0MzA5LCA2NDMxMywgNjQzMTcsIDY0MzIxLCA2NDMyNSwgNjQzMjksIDY0MzMzLCA2NDMzNywgCi0gICAgNjQzNDEsIDY0MzQ1LCA2NDM0OSwgNjQzNTMsIDY0MzU3LCA2NDM2MSwgNjQzNjUsIDY0MzY5LCA2NDM3MywgNjQzNzcsIAotICAgIDY0MzgxLCA2NDM4NCwgNjQzODgsIDY0MzkyLCA2NDM5NiwgNjQ0MDAsIDY0NDA0LCA2NDQwOCwgNjQ0MTIsIDY0NDE2LCAKLSAgICA2NDQyMCwgNjQ0MjQsIDY0NDI4LCA2NDQzMiwgNjQ0MzYsIDY0NDQwLCA2NDQ0NCwgNjQ0NDgsIDY0NDUyLCA2NDQ1NiwgCi0gICAgNjQ0NjAsIDY0NDY0LCA2NDQ2OCwgNjQ0NzIsIDY0NDc2LCA2NDQ4MCwgNjQ0ODQsIDY0NDg4LCA2NDQ5MiwgNjQ0OTYsIAotICAgIDY0NTAwLCA2NDUwNCwgNjQ1MDgsIDY0NTEyLCA2NDUxNiwgNjQ1MjAsIDY0NTI0LCA2NDUyOCwgNjQ1MzIsIDY0NTM2LCAKLSAgICA2NDU0MCwgNjQ1NDQsIDY0NTQ4LCA2NDU1MiwgNjQ1NTYsIDY0NTYwLCA2NDU2NCwgNjQ1NjgsIDY0NTcyLCA2NDU3NiwgCi0gICAgNjQ1ODAsIDY0NTg0LCA2NDU4OCwgNjQ1OTIsIDY0NTk2LCA2NDYwMCwgNjQ2MDQsIDY0NjA4LCA2NDYxMiwgNjQ2MTYsIAotICAgIDY0NjIwLCA2NDYyNCwgNjQ2MjgsIDY0NjMyLCA2NDYzNiwgNjQ2NDAsIDY0NjQ0LCA2NDY0OCwgNjQ2NTIsIDY0NjU2LCAKLSAgICA2NDY2MCwgNjQ2NjQsIDY0NjY4LCA2NDY3MiwgNjQ2NzYsIDY0NjgwLCA2NDY4NCwgNjQ2ODgsIDY0NjkyLCA2NDY5NiwgCi0gICAgNjQ3MDAsIDY0NzA0LCA2NDcwOCwgNjQ3MTIsIDY0NzE2LCA2NDcyMCwgNjQ3MjQsIDY0NzI4LCA2NDczMiwgNjQ3MzYsIAotICAgIDY0NzQwLCA2NDc0NCwgNjQ3NDgsIDY0NzUyLCA2NDc1NiwgNjQ3NjAsIDY0NzY0LCA2NDc2OCwgNjQ3NzIsIDY0Nzc2LCAKLSAgICA2NDc4MCwgNjQ3ODQsIDY0Nzg4LCA2NDc5MiwgNjQ3OTYsIDY0ODAwLCA2NDgwNCwgNjQ4MDgsIDY0ODEyLCA2NDgxNiwgCi0gICAgNjQ4MjAsIDY0ODI0LCA2NDgyOCwgNjQ4MzIsIDY0ODM2LCA2NDg0MCwgNjQ4NDQsIDY0ODQ4LCA2NDg1MiwgNjQ4NTUsIAotICAgIDY0ODU5LCA2NDg2MywgNjQ4NjcsIDY0ODcxLCA2NDg3NSwgNjQ4NzksIDY0ODgzLCA2NDg4NywgNjQ4OTEsIDY0ODk1LCAKLSAgICA2NDg5OSwgNjQ5MDMsIDY0OTA3LCA2NDkxMSwgNjQ5MTUsIDY0OTE5LCA2NDkyMywgNjQ5MjcsIDY0OTMxLCA2NDkzNSwgCi0gICAgNjQ5MzksIDY0OTQzLCA2NDk0NywgNjQ5NTEsIDY0OTU1LCA2NDk1OSwgNjQ5NjMsIDY0OTY3LCA2NDk3MSwgNjQ5NzUsIAotICAgIDY0OTc5LCA2NDk4MywgNjQ5ODcsIDY0OTkxLCA2NDk5NSwgNjQ5OTksIDY1MDAzLCA2NTAwNywgNjUwMTEsIDY1MDE1LCAKLSAgICA2NTAxOSwgNjUwMjMsIDY1MDI3LCA2NTAzMSwgNjUwMzUsIDY1MDM5LCA2NTA0MywgNjUwNDcsIDY1MDUxLCA2NTA1NSwgCi0gICAgNjUwNTksIDY1MDYzLCA2NTA2NywgNjUwNzEsIDY1MDc1LCA2NTA3OSwgNjUwODMsIDY1MDg3LCA2NTA5MSwgNjUwOTUsIAotICAgIDY1MDk5LCA2NTEwMywgNjUxMDcsIDY1MTExLCA2NTExNSwgNjUxMTksIDY1MTIzLCA2NTEyNywgNjUxMzEsIDY1MTM1LCAKLSAgICA2NTEzOSwgNjUxNDMsIDY1MTQ3LCA2NTE1MSwgNjUxNTUsIDY1MTU5LCA2NTE2MywgNjUxNjcsIDY1MTcxLCA2NTE3NSwgCi0gICAgNjUxNzksIDY1MTgzLCA2NTE4NywgNjUxOTEsIDY1MTk1LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCA2NTIxMSwgNjUyMTUsIAotICAgIDY1MjE5LCA2NTIyMywgNjUyMjcsIDY1MjMxLCA2NTIzNSwgNjUyMzksIDY1MjQzLCA2NTI0NywgNjUyNTEsIDY1MjU1LCAKLSAgICA2NTI1OSwgNjUyNjMsIDY1MjY3LCA2NTI3MSwgNjUyNzUsIDY1Mjc5LCA2NTI4MywgNjUyODcsIDY1MjkxLCA2NTI5NSwgCi0gICAgNjUyOTksIDY1MzAzLCA2NTMwNywgNjUzMTEsIDY1MzE1LCA2NTMxOCwgNjUzMjIsIDY1MzI2LCA2NTMzMCwgNjUzMzQsIAotICAgIDY1MzM4LCA2NTM0MiwgNjUzNDYsIDY1MzUwLCA2NTM1NCwgNjUzNTgsIDY1MzYyLCA2NTM2NiwgNjUzNzAsIDY1Mzc0LCAKLSAgICA2NTM3OCwgNjUzODIsIDY1Mzg2LCA2NTM5MCwgNjUzOTQsIDY1Mzk4LCA2NTQwMiwgNjU0MDYsIDY1NDEwLCA2NTQxNCwgCi0gICAgNjU0MTgsIDY1NDIyLCA2NTQyNiwgNjU0MzAsIDY1NDM0LCA2NTQzOCwgNjU0NDIsIDY1NDQ2LCA2NTQ1MCwgNjU0NTQsIAotICAgIDY1NDU4LCA2NTQ2MiwgNjU0NjYsIDY1NDcwLCA2NTQ3NCwgNjU0NzgsIDY1NDgyLCA2NTQ4NiwgNjU0OTAsIDY1NDk0LCAKLSAgICA2NTQ5OCwgNjU1MDIsIDY1NTA2LCA2NTUxMCwgNjU1MTQsIDY1NTE4LCA2NTUyMiwgNjU1MjYsIDY1NTMwLCA2NTUzNCwgCi0gICAgNjU1MzgsIDY1NTQyLCA2NTU0NiwgNjU1NTAsIDY1NTU0LCA2NTU1OCwgNjU1NjIsIDY1NTY2LCA2NTU3MCwgNjU1NzQsIAotICAgIDY1NTc4LCA2NTU4MiwgNjU1ODYsIDY1NTkwLCA2NTU5NCwgNjU1OTgsIDY1NjAyLCA2NTYwNiwgNjU2MTAsIDY1NjE0LCAKLSAgICA2NTYxOCwgNjU2MjIsIDY1NjI2LCA2NTYzMCwgNjU2MzQsIDY1NjM4LCA2NTY0MiwgNjU2NDYsIDY1NjUwLCA2NTY1NCwgCi0gICAgNjU2NTgsIDY1NjYyLCA2NTY2NiwgNjU2NzAsIDY1Njc0LCA2NTY3NywgNjU2ODEsIDY1Njg1LCA2NTY4OSwgNjU2OTMsIAotICAgIDY1Njk3LCA2NTcwMSwgNjU3MDUsIDY1NzA5LCA2NTcxMywgNjU3MTcsIDY1NzIxLCA2NTcyNSwgNjU3MjksIDY1NzMzLCAKLSAgICA2NTczNywgNjU3NDEsIDY1NzQ1LCA2NTc0OSwgNjU3NTMsIDY1NzU3LCA2NTc2MSwgNjU3NjUsIDY1NzY5LCA2NTc3MywgCi0gICAgNjU3NzcsIDY1NzgxLCA2NTc4NSwgNjU3ODksIDY1NzkzLCA2NTc5NywgNjU4MDEsIDY1ODA1LCA2NTgwOSwgNjU4MTMsIAotICAgIDY1ODE3LCA2NTgyMSwgNjU4MjUsIDY1ODI5LCA2NTgzMywgNjU4MzcsIDY1ODQxLCA2NTg0NSwgNjU4NDksIDY1ODUzLCAKLSAgICA2NTg1NywgNjU4NjEsIDY1ODY1LCA2NTg2OSwgNjU4NzMsIDY1ODc3LCA2NTg4MSwgNjU4ODUsIDY1ODg5LCA2NTg5MywgCi0gICAgNjU4OTcsIDY1OTAxLCA2NTkwNSwgNjU5MDksIDY1OTEzLCA2NTkxNywgNjU5MjEsIDY1OTI1LCA2NTkyOSwgNjU5MzMsIAotICAgIDY1OTM3LCA2NTk0MSwgNjU5NDUsIDY1OTQ5LCA2NTk1MywgNjU5NTcsIDY1OTYxLCA2NTk2NSwgNjU5NjksIDY1OTczLCAKLSAgICA2NTk3NywgNjU5ODEsIDY1OTg1LCA2NTk4OSwgNjU5OTMsIDY1OTk3LCA2NjAwMSwgNjYwMDUsIDY2MDA5LCA2NjAxMywgCi0gICAgNjYwMTcsIDY2MDIxLCA2NjAyNSwgNjYwMjksIDY2MDMzLCA2NjAzNywgNjYwNDEsIDY2MDQ1LCA2NjA0OSwgNjYwNTMsIAotICAgIDY2MDU3LCA2NjA2MSwgNjYwNjUsIDY2MDY5LCA2NjA3MywgNjYwNzcsIDY2MDgxLCA2NjA4NSwgNjYwODksIDY2MDkzLCAKLSAgICA2NjA5NywgNjYxMDEsIDY2MTA1LCA2NjEwOSwgNjYxMTMsIDY2MTE3LCA2NjEyMSwgNjYxMjUsIDY2MTI5LCA2NjEzMywgCi0gICAgNjYxMzcsIDY2MTQxLCA2NjE0NSwgNjYxNDksIDY2MTUzLCA2NjE1NywgNjYxNjEsIDY2MTY1LCA2NjE2OSwgNjYxNzIsIAotICAgIDY2MTc2LCA2NjE4MCwgNjYxODQsIDY2MTg4LCA2NjE5MiwgNjYxOTYsIDY2MjAwLCA2NjIwNCwgNjYyMDgsIDY2MjEyLCAKLSAgICA2NjIxNiwgNjYyMjAsIDY2MjI0LCA2NjIyOCwgNjYyMzIsIDY2MjM2LCA2NjI0MCwgNjYyNDQsIDY2MjQ4LCA2NjI1MiwgCi0gICAgNjYyNTYsIDY2MjYwLCA2NjI2NCwgNjYyNjgsIDY2MjcyLCA2NjI3NiwgNjYyODAsIDY2Mjg0LCA2NjI4OCwgNjYyOTIsIAotICAgIDY2Mjk2LCA2NjMwMCwgNjYzMDQsIDY2MzA4LCA2NjMxMiwgNjYzMTYsIDY2MzIwLCA2NjMyNCwgNjYzMjgsIDY2MzMyLCAKLSAgICA2NjMzNiwgNjYzNDAsIDY2MzQ0LCA2NjM0OCwgNjYzNTIsIDY2MzU2LCA2NjM2MCwgNjYzNjQsIDY2MzY4LCA2NjM3MiwgCi0gICAgNjYzNzYsIDY2MzgwLCA2NjM4NCwgNjYzODgsIDY2MzkyLCA2NjM5NiwgNjY0MDAsIDY2NDA0LCA2NjQwOCwgNjY0MTIsIAotICAgIDY2NDE2LCA2NjQyMCwgNjY0MjQsIDY2NDI4LCA2NjQzMiwgNjY0MzYsIDY2NDQwLCA2NjQ0NCwgNjY0NDgsIDY2NDUyLCAKLSAgICA2NjQ1NiwgNjY0NjAsIDY2NDY0LCA2NjQ2OCwgNjY0NzIsIDY2NDc2LCA2NjQ4MCwgNjY0ODQsIDY2NDg4LCA2NjQ5MiwgCi0gICAgNjY0OTYsIDY2NTAwLCA2NjUwNCwgNjY1MDgsIDY2NTEyLCA2NjUxNiwgNjY1MjAsIDY2NTI0LCA2NjUyOCwgNjY1MzIsIAotICAgIDY2NTM2LCA2NjU0MCwgNjY1NDQsIDY2NTQ4LCA2NjU1MiwgNjY1NTYsIDY2NTYwLCA2NjU2NCwgNjY1NjgsIDY2NTcyLCAKLSAgICA2NjU3NiwgNjY1ODAsIDY2NTg0LCA2NjU4OCwgNjY1OTIsIDY2NTk2LCA2NjYwMCwgNjY2MDQsIDY2NjA4LCA2NjYxMiwgCi0gICAgNjY2MTYsIDY2NjIwLCA2NjYyNCwgNjY2MjcsIDY2NjMxLCA2NjYzNSwgNjY2MzksIDY2NjQzLCA2NjY0NywgNjY2NTEsIAotICAgIDY2NjU1LCA2NjY1OSwgNjY2NjMsIDY2NjY3LCA2NjY3MSwgNjY2NzUsIDY2Njc5LCA2NjY4MywgNjY2ODcsIDY2NjkxLCAKLSAgICA2NjY5NSwgNjY2OTksIDY2NzAzLCA2NjcwNywgNjY3MTEsIDY2NzE1LCA2NjcxOSwgNjY3MjMsIDY2NzI3LCA2NjczMSwgCi0gICAgNjY3MzUsIDY2NzM5LCA2Njc0MywgNjY3NDcsIDY2NzUxLCA2Njc1NSwgNjY3NTksIDY2NzYzLCA2Njc2NywgNjY3NzEsIAotICAgIDY2Nzc1LCA2Njc3OSwgNjY3ODMsIDY2Nzg3LCA2Njc5MSwgNjY3OTUsIDY2Nzk5LCA2NjgwMywgNjY4MDcsIDY2ODExLCAKLSAgICA2NjgxNSwgNjY4MTksIDY2ODIzLCA2NjgyNywgNjY4MzEsIDY2ODM1LCA2NjgzOSwgNjY4NDMsIDY2ODQ3LCA2Njg1MSwgCi0gICAgNjY4NTUsIDY2ODU5LCA2Njg2MywgNjY4NjcsIDY2ODcxLCA2Njg3NSwgNjY4NzksIDY2ODgzLCA2Njg4NywgNjY4OTEsIAotICAgIDY2ODk1LCA2Njg5OSwgNjY5MDMsIDY2OTA3LCA2NjkxMSwgNjY5MTUsIDY2OTE5LCA2NjkyMywgNjY5MjcsIDY2OTMxLCAKLSAgICA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTEsIDY2OTU1LCA2Njk1OSwgNjY5NjMsIDY2OTY3LCA2Njk3MSwgCi0gICAgNjY5NzUsIDY2OTc5LCA2Njk4MywgNjY5ODcsIDY2OTkxLCA2Njk5NSwgNjY5OTksIDY3MDAzLCA2NzAwNywgNjcwMTEsIAotICAgIDY3MDE1LCA2NzAxOSwgNjcwMjMsIDY3MDI3LCA2NzAzMSwgNjcwMzUsIDY3MDM5LCA2NzA0MywgNjcwNDcsIDY3MDUxLCAKLSAgICA2NzA1NSwgNjcwNTksIDY3MDYzLCA2NzA2NywgNjcwNzEsIDY3MDc1LCA2NzA3OSwgNjcwODMsIDY3MDg3LCA2NzA5MSwgCi0gICAgNjcwOTUsIDY3MDk5LCA2NzEwMywgNjcxMDcsIDY3MTExLCA2NzExNSwgNjcxMTksIDY3MTIzLCA2NzEyNywgNjcxMzEsIAotICAgIDY3MTM1LCA2NzEzOSwgNjcxNDMsIDY3MTQ3LCA2NzE1MSwgNjcxNTUsIDY3MTU5LCA2NzE2MywgNjcxNjcsIDY3MTcxLCAKLSAgICA2NzE3NSwgNjcxNzksIDY3MTgzLCA2NzE4NywgNjcxOTEsIDY3MTk1LCA2NzE5OSwgNjcyMDMsIDY3MjA3LCA2NzIxMSwgCi0gICAgNjcyMTUsIDY3MjE5LCA2NzIyMywgNjcyMjcsIDY3MjMwLCA2NzIzNCwgNjcyMzgsIDY3MjQyLCA2NzI0NiwgNjcyNTAsIAotICAgIDY3MjU0LCA2NzI1OCwgNjcyNjEsIDY3MjY1LCA2NzI2OSwgNjcyNzMsIDY3Mjc3LCA2NzI4MSwgNjcyODUsIDY3Mjg5LCAKLSAgICA2NzI5MywgNjcyOTcsIDY3MzAxLCA2NzMwNSwgNjczMDksIDY3MzEzLCA2NzMxNywgNjczMjEsIDY3MzI1LCA2NzMyOSwgCi0gICAgNjczMzMsIDY3MzM3LCA2NzM0MSwgNjczNDUsIDY3MzQ5LCA2NzM1MywgNjczNTcsIDY3MzYxLCA2NzM2NSwgNjczNjksIAotICAgIDY3MzczLCA2NzM3NywgNjczODEsIDY3Mzg1LCA2NzM4OSwgNjczOTMsIDY3Mzk3LCA2NzQwMSwgNjc0MDUsIDY3NDA5LCAKLSAgICA2NzQxMywgNjc0MTcsIDY3NDIxLCA2NzQyNSwgNjc0MjksIDY3NDMzLCA2NzQzNywgNjc0NDEsIDY3NDQ1LCA2NzQ0OSwgCi0gICAgNjc0NTMsIDY3NDU3LCA2NzQ2MSwgNjc0NjUsIDY3NDY5LCA2NzQ3MywgNjc0NzcsIDY3NDgxLCA2NzQ4NSwgNjc0ODksIAotICAgIDY3NDkzLCA2NzQ5NywgNjc1MDEsIDY3NTA1LCA2NzUwOSwgNjc1MTMsIDY3NTE3LCA2NzUyMSwgNjc1MjUsIDY3NTI5LCAKLSAgICA2NzUzMywgNjc1MzcsIDY3NTQxLCA2NzU0NSwgNjc1NDksIDY3NTUzLCA2NzU1NywgNjc1NjEsIDY3NTY1LCA2NzU2OSwgCi0gICAgNjc1NzMsIDY3NTc3LCA2NzU4MSwgNjc1ODUsIDY3NTg5LCA2NzU5MywgNjc1OTcsIDY3NjAxLCA2NzYwNSwgNjc2MDksIAotICAgIDY3NjEzLCA2NzYxNywgNjc2MjEsIDY3NjI1LCA2NzYyOSwgNjc2MzMsIDY3NjM3LCA2NzY0MSwgNjc2NDUsIDY3NjQ5LCAKLSAgICA2NzY1MywgNjc2NTcsIDY3NjYxLCA2NzY2NSwgNjc2NjksIDY3NjczLCA2NzY3NywgNjc2ODEsIDY3Njg1LCA2NzY4OSwgCi0gICAgNjc2OTMsIDY3Njk3LCA2NzcwMSwgNjc3MDUsIDY3NzA5LCA2NzcxMywgNjc3MTcsIDY3NzIxLCA2NzcyNSwgNjc3MjksIAotICAgIDY3NzMzLCA2NzczNywgNjc3NDEsIDY3NzQ1LCA2Nzc0OSwgNjc3NTMsIDY3NzU3LCA2Nzc2MSwgNjc3NjUsIDY3NzY5LCAKLSAgICA2Nzc3MywgNjc3NzcsIDY3NzgxLCA2Nzc4NSwgNjc3ODksIDY3NzkzLCA2Nzc5NywgNjc4MDEsIDY3ODA1LCA2NzgwOSwgCi0gICAgNjc4MTMsIDY3ODE3LCA2NzgyMSwgNjc4MjUsIDY3ODI5LCA2NzgzMywgNjc4MzcsIDY3ODQxLCA2Nzg0NSwgNjc4NDksIAotICAgIDY3ODUzLCA2Nzg1NywgNjc4NjEsIDY3ODY1LCA2Nzg2OSwgNjc4NzMsIDY3ODc3LCA2Nzg4MSwgNjc4ODUsIDY3ODg5LCAKLSAgICA2Nzg5MywgNjc4OTcsIDY3OTAxLCA2NzkwNSwgNjc5MDksIDY3OTEzLCA2NzkxNywgNjc5MjEsIDY3OTI1LCA2NzkyOSwgCi0gICAgNjc5MzMsIDY3OTM3LCA2Nzk0MSwgNjc5NDUsIDY3OTQ5LCA2Nzk1MywgNjc5NTcsIDY3OTYxLCA2Nzk2NSwgNjc5NjksIAotICAgIDY3OTczLCA2Nzk3NywgNjc5ODEsIDY3OTg1LCA2Nzk4OCwgNjc5OTIsIDY3OTk2LCA2ODAwMCwgNjgwMDQsIDY4MDA4LCAKLSAgICA2ODAxMiwgNjgwMTYsIDY4MDIwLCA2ODAyNCwgNjgwMjgsIDY4MDMyLCA2ODAzNiwgNjgwNDAsIDY4MDQ0LCA2ODA0OCwgCi0gICAgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjQsIDY4MDY4LCA2ODA3MiwgNjgwNzYsIDY4MDgwLCA2ODA4NCwgNjgwODgsIAotICAgIDY4MDkyLCA2ODA5NiwgNjgxMDAsIDY4MTA0LCA2ODEwOCwgNjgxMTIsIDY4MTE2LCA2ODEyMCwgNjgxMjQsIDY4MTI4LCAKLSAgICA2ODEzMiwgNjgxMzYsIDY4MTQwLCA2ODE0NCwgNjgxNDgsIDY4MTUyLCA2ODE1NiwgNjgxNjAsIDY4MTY0LCA2ODE2OCwgCi0gICAgNjgxNzIsIDY4MTc2LCA2ODE4MCwgNjgxODQsIDY4MTg4LCA2ODE5MiwgNjgxOTYsIDY4MjAwLCA2ODIwNCwgNjgyMDgsIAotICAgIDY4MjEyLCA2ODIxNiwgNjgyMjAsIDY4MjI0LCA2ODIyOCwgNjgyMzIsIDY4MjM2LCA2ODI0MCwgNjgyNDQsIDY4MjQ4LCAKLSAgICA2ODI1MiwgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIDY4Mjg0LCA2ODI4OCwgCi0gICAgNjgyOTIsIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCA2ODMyNCwgNjgzMjgsIAotICAgIDY4MzMyLCA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgNjgzNjQsIDY4MzY4LCAKLSAgICA2ODM3MiwgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIDY4NDA0LCA2ODQwOCwgCi0gICAgNjg0MTIsIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCA2ODQ0NCwgNjg0NDgsIAotICAgIDY4NDUyLCA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgNjg0ODQsIDY4NDg4LCAKLSAgICA2ODQ5MiwgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIDY4NTI0LCA2ODUyOCwgCi0gICAgNjg1MzIsIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCA2ODU2NCwgNjg1NjgsIAotICAgIDY4NTcyLCA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgNjg2MDQsIDY4NjA4LCAKLSAgICA2ODYxMiwgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIDY4NjQ0LCA2ODY0OCwgCi0gICAgNjg2NTIsIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCA2ODY4NCwgNjg2ODgsIAotICAgIDY4NjkyLCA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgNjg3MjQsIDY4NzI4LCAKLSAgICA2ODczMiwgNjg3MzYsIDY4NzQwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgNjg3NjAsIDY4NzY0LCA2ODc2OCwgMCwgCi0gICAgMCwgMCwgNjg3NzIsIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIDY4ODAwLCA2ODgwNCwgCi0gICAgNjg4MDgsIDY4ODEyLCA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCA2ODg0MCwgNjg4NDQsIAotICAgIDY4ODQ4LCA2ODg1MiwgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgNjg4ODAsIDY4ODg0LCAKLSAgICA2ODg4OCwgNjg4OTIsIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIDY4OTIwLCA2ODkyNCwgCi0gICAgNjg5MjgsIDY4OTMyLCA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCA2ODk2MCwgNjg5NjQsIAotICAgIDY4OTY4LCA2ODk3MiwgNjg5NzYsIDY4OTgwLCA2ODk4NCwgNjg5ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDY4OTkyLCA2ODk5NywgNjkwMDEsIDY5MDA2LCA2OTAxMSwgNjkwMTYsIDY5MDIxLCA2OTAyNiwgNjkwMzAsIDY5MDM1LCAKLSAgICA2OTA0MCwgNjkwNDUsIDY5MDUwLCA2OTA1NSwgNjkwNjAsIDY5MDY1LCA2OTA2OSwgNjkwNzMsIDY5MDc4LCA2OTA4MiwgCi0gICAgNjkwODcsIDY5MDkyLCA2OTA5NywgNjkxMDEsIDY5MTA2LCA2OTExMSwgNjkxMTYsIDY5MTIxLCA2OTEyNiwgNjkxMzAsIAotICAgIDY5MTM1LCA2OTEzOSwgNjkxNDQsIDY5MTQ4LCA2OTE1MywgNjkxNTcsIDY5MTYxLCA2OTE2NSwgNjkxNzAsIDY5MTc1LCAKLSAgICA2OTE4MCwgNjkxODgsIDY5MTk2LCA2OTIwNCwgNjkyMTIsIDY5MjE5LCA2OTIyNywgNjkyMzMsIDY5MjQxLCA2OTI0NSwgCi0gICAgNjkyNDksIDY5MjUzLCA2OTI1NywgNjkyNjEsIDY5MjY1LCA2OTI2OSwgNjkyNzMsIDY5Mjc3LCA2OTI4MSwgNjkyODUsIAotICAgIDY5Mjg5LCA2OTI5MywgNjkyOTcsIDY5MzAxLCA2OTMwNSwgNjkzMDksIDY5MzEzLCA2OTMxNywgNjkzMjEsIDY5MzI1LCAKLSAgICA2OTMyOSwgNjkzMzMsIDY5MzM3LCA2OTM0MSwgNjkzNDUsIDY5MzQ5LCA2OTM1MywgNjkzNTcsIDY5MzYxLCA2OTM2NSwgCi0gICAgNjkzNjksIDY5MzczLCA2OTM3NywgNjkzODEsIDY5Mzg1LCA2OTM4OCwgNjkzOTIsIDY5Mzk2LCA2OTQwMCwgNjk0MDQsIAotICAgIDY5NDA4LCA2OTQxMiwgNjk0MTYsIDY5NDIwLCA2OTQyNCwgNjk0MjgsIDY5NDMyLCA2OTQzNiwgNjk0NDAsIDY5NDQ0LCAKLSAgICA2OTQ0OCwgNjk0NTIsIDY5NDU2LCA2OTQ2MCwgNjk0NjQsIDY5NDY4LCA2OTQ3MiwgNjk0NzYsIDY5NDgwLCA2OTQ4NCwgCi0gICAgNjk0ODgsIDY5NDkyLCA2OTQ5NiwgNjk1MDAsIDY5NTA0LCA2OTUwOCwgNjk1MTIsIDY5NTE2LCA2OTUyMCwgNjk1MjQsIAotICAgIDY5NTI4LCA2OTUzMiwgNjk1MzUsIDY5NTM5LCA2OTU0MywgNjk1NDYsIDY5NTUwLCA2OTU1NCwgNjk1NTgsIDY5NTYxLCAKLSAgICA2OTU2NSwgNjk1NjksIDY5NTczLCA2OTU3NywgNjk1ODEsIDY5NTg1LCA2OTU4OSwgNjk1OTMsIDY5NTk3LCA2OTYwMSwgCi0gICAgNjk2MDUsIDY5NjA5LCA2OTYxMywgNjk2MTcsIDY5NjIwLCA2OTYyNCwgNjk2MjgsIDY5NjMxLCA2OTYzNSwgNjk2MzksIAotICAgIDY5NjQzLCA2OTY0NywgNjk2NTEsIDY5NjU1LCA2OTY1OCwgNjk2NjEsIDY5NjY1LCA2OTY2OSwgNjk2NzMsIDY5Njc2LCAKLSAgICA2OTY3OSwgNjk2ODMsIDY5Njg3LCA2OTY5MSwgNjk2OTUsIDY5Njk5LCA2OTcwMywgNjk3MDcsIDY5NzExLCA2OTcxNSwgCi0gICAgNjk3MTksIDY5NzIzLCA2OTcyNywgNjk3MzEsIDY5NzM1LCA2OTczOSwgNjk3NDMsIDY5NzQ3LCA2OTc1MSwgNjk3NTUsIAotICAgIDY5NzU5LCA2OTc2MywgNjk3NjcsIDY5NzcxLCA2OTc3NSwgNjk3NzksIDY5NzgzLCA2OTc4NywgNjk3OTEsIDY5Nzk1LCAKLSAgICA2OTc5OSwgNjk4MDMsIDY5ODA3LCA2OTgxMSwgNjk4MTUsIDY5ODE5LCA2OTgyMywgNjk4MjcsIDY5ODMwLCA2OTgzNCwgCi0gICAgNjk4MzgsIDY5ODQyLCA2OTg0NiwgNjk4NTAsIDY5ODU0LCA2OTg1OCwgNjk4NjIsIDY5ODY2LCA2OTg3MCwgNjk4NzQsIAotICAgIDY5ODc4LCA2OTg4MiwgNjk4ODYsIDY5ODkwLCA2OTg5NCwgNjk4OTgsIDY5OTAyLCA2OTkwNiwgNjk5MTAsIDY5OTE0LCAKLSAgICA2OTkxOCwgNjk5MjIsIDY5OTI2LCA2OTkzMCwgNjk5MzQsIDY5OTM4LCA2OTk0MiwgNjk5NDYsIDY5OTUwLCA2OTk1NCwgCi0gICAgNjk5NTgsIDY5OTYyLCA2OTk2NiwgNjk5NzAsIDY5OTc0LCA2OTk3NywgNjk5ODEsIDY5OTg1LCA2OTk4OSwgNjk5OTMsIAotICAgIDY5OTk3LCA3MDAwMSwgNzAwMDUsIDcwMDA5LCA3MDAxMywgNzAwMTcsIDcwMDIxLCA3MDAyNSwgNzAwMjksIDcwMDMzLCAKLSAgICA3MDAzNywgNzAwNDEsIDcwMDQ0LCA3MDA0OCwgNzAwNTIsIDcwMDU2LCA3MDA2MCwgNzAwNjQsIDcwMDY4LCA3MDA3MiwgCi0gICAgNzAwNzYsIDcwMDgwLCA3MDA4NCwgNzAwODgsIDcwMDkyLCA3MDA5NiwgNzAxMDAsIDcwMTA0LCA3MDEwOCwgNzAxMTIsIAotICAgIDcwMTE2LCA3MDEyMCwgNzAxMjQsIDcwMTI4LCA3MDEzMSwgNzAxMzUsIDcwMTM5LCA3MDE0MywgNzAxNDcsIDcwMTUxLCAKLSAgICA3MDE1NSwgNzAxNTksIDcwMTYzLCA3MDE2NywgNzAxNzEsIDcwMTc1LCA3MDE3OSwgNzAxODMsIDcwMTg3LCA3MDE5MSwgCi0gICAgNzAxOTUsIDcwMTk5LCA3MDIwMywgNzAyMDcsIDcwMjExLCA3MDIxNSwgNzAyMTksIDcwMjIzLCA3MDIyNywgNzAyMzEsIAotICAgIDcwMjM1LCA3MDIzOSwgNzAyNDMsIDcwMjQ3LCA3MDI1MSwgNzAyNTUsIDcwMjU5LCA3MDI2MywgNzAyNjcsIDcwMjcxLCAKLSAgICA3MDI3NSwgNzAyNzksIDcwMjgzLCA3MDI4NywgNzAyOTEsIDcwMjk1LCA3MDI5OSwgNzAzMDMsIDcwMzA2LCA3MDMxMSwgCi0gICAgNzAzMTUsIDcwMzIxLCA3MDMyNiwgNzAzMzIsIDcwMzM2LCA3MDM0MCwgNzAzNDQsIDcwMzQ4LCA3MDM1MiwgNzAzNTYsIAotICAgIDcwMzYwLCA3MDM2NCwgNzAzNjgsIDcwMzcyLCA3MDM3NiwgNzAzODAsIDcwMzg0LCA3MDM4OCwgNzAzOTEsIDcwMzk0LCAKLSAgICA3MDM5NywgNzA0MDAsIDcwNDAzLCA3MDQwNiwgNzA0MDksIDcwNDEyLCA3MDQxNSwgNzA0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwNDI2LCA3MDQzMSwgNzA0MzYsIDcwNDQxLCAKLSAgICA3MDQ0NiwgNzA0NTMsIDcwNDYwLCA3MDQ2NSwgNzA0NzAsIDcwNDc1LCA3MDQ4MCwgNzA0ODcsIDcwNDk0LCA3MDUwMSwgCi0gICAgNzA1MDgsIDcwNTE1LCA3MDUyMiwgNzA1MzIsIDcwNTQyLCA3MDU0OSwgNzA1NTYsIDcwNTYzLCA3MDU3MCwgNzA1NzYsIAotICAgIDcwNTgyLCA3MDU5MSwgNzA2MDAsIDcwNjA3LCA3MDYxNCwgNzA2MjUsIDcwNjM2LCA3MDY0MSwgNzA2NDYsIDcwNjUzLCAKLSAgICA3MDY2MCwgNzA2NjcsIDcwNjc0LCA3MDY4MSwgNzA2ODgsIDcwNjk1LCA3MDcwMiwgNzA3MDgsIDcwNzE0LCA3MDcyMCwgCi0gICAgNzA3MjYsIDcwNzMzLCA3MDc0MCwgNzA3NDUsIDcwNzQ5LCA3MDc1NiwgNzA3NjMsIDcwNzcwLCA3MDc3NCwgNzA3ODEsIAotICAgIDcwNzg1LCA3MDc5MCwgNzA3OTQsIDcwODAwLCA3MDgwNSwgNzA4MTEsIDcwODE2LCA3MDgyMCwgNzA4MjQsIDcwODI3LCAKLSAgICA3MDgzMCwgNzA4MzUsIDcwODQwLCA3MDg0NSwgNzA4NTAsIDcwODU1LCA3MDg2MCwgNzA4NjUsIDcwODcwLCA3MDg3NSwgCi0gICAgNzA4ODAsIDcwODg5LCA3MDg5OCwgNzA5MDMsIDcwOTA4LCA3MDkxMywgNzA5MTgsIDcwOTIzLCA3MDkyOCwgNzA5MzMsIAotICAgIDcwOTM4LCA3MDk0MywgNzA5NDgsIDcwOTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDk1OCwgNzA5NjQsIDcwOTY3LCAKLSAgICA3MDk3MCwgNzA5NzMsIDcwOTc3LCA3MDk4MSwgNzA5ODUsIDcwOTg5LCA3MDk5MiwgNzA5OTYsIDcwOTk5LCA3MTAwMywgCi0gICAgNzEwMDYsIDcxMDEwLCA3MTAxNCwgNzEwMTgsIDcxMDIyLCA3MTAyNiwgNzEwMzAsIDcxMDM0LCA3MTAzNywgNzEwNDEsIAotICAgIDcxMDQ1LCA3MTA0OSwgNzEwNTMsIDcxMDU3LCA3MTA2MSwgNzEwNjUsIDcxMDY5LCA3MTA3MywgNzEwNzcsIDcxMDgxLCAKLSAgICA3MTA4NSwgNzEwODksIDcxMDkzLCA3MTA5NiwgNzExMDAsIDcxMTA0LCA3MTEwOCwgNzExMTIsIDcxMTE2LCA3MTEyMCwgCi0gICAgNzExMjQsIDcxMTI4LCA3MTEzMiwgNzExMzYsIDcxMTQwLCA3MTE0NCwgNzExNDgsIDcxMTUyLCA3MTE1NiwgNzExNjAsIAotICAgIDcxMTY0LCA3MTE2OCwgNzExNzIsIDcxMTc2LCA3MTE4MCwgNzExODQsIDcxMTg4LCA3MTE5MiwgNzExOTUsIDcxMTk5LCAKLSAgICA3MTIwMywgNzEyMDcsIDcxMjExLCA3MTIxNSwgNzEyMTksIDcxMjIzLCA3MTIyNiwgNzEyMzAsIDcxMjM0LCA3MTIzOCwgCi0gICAgNzEyNDIsIDcxMjQ2LCA3MTI1MCwgNzEyNTQsIDcxMjU4LCA3MTI2MiwgNzEyNjYsIDcxMjcwLCA3MTI3NCwgNzEyNzksIAotICAgIDcxMjg0LCA3MTI4NywgNzEyOTIsIDcxMjk1LCA3MTI5OCwgNzEzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxMzA1LCAKLSAgICA3MTMxNCwgNzEzMjMsIDcxMzMyLCA3MTM0MSwgNzEzNTAsIDcxMzU5LCA3MTM2OCwgNzEzNzcsIDcxMzg1LCA3MTM5MiwgCi0gICAgNzE0MDAsIDcxNDA3LCA3MTQxNSwgNzE0MjUsIDcxNDM0LCA3MTQ0NCwgNzE0NTMsIDcxNDYzLCA3MTQ3MSwgNzE0NzgsIAotICAgIDcxNDg2LCA3MTQ5MywgNzE1MDEsIDcxNTA2LCA3MTUxMSwgNzE1MTYsIDcxNTI1LCA3MTUzMSwgNzE1MzcsIDcxNTQ0LCAKLSAgICA3MTU1MywgNzE1NjEsIDcxNTY5LCA3MTU3NywgNzE1ODQsIDcxNTkxLCA3MTU5OCwgNzE2MDUsIDcxNjEwLCA3MTYxNSwgCi0gICAgNzE2MjAsIDcxNjI1LCA3MTYzMCwgNzE2MzUsIDcxNjQwLCA3MTY0NSwgNzE2NTMsIDcxNjYxLCA3MTY2NywgNzE2NzMsIAotICAgIDcxNjc4LCA3MTY4MywgNzE2ODgsIDcxNjkzLCA3MTY5OCwgNzE3MDMsIDcxNzA4LCA3MTcxMywgNzE3MjEsIDcxNzI5LCAKLSAgICA3MTczNCwgNzE3MzksIDcxNzQ5LCA3MTc1OSwgNzE3NjYsIDcxNzczLCA3MTc4MiwgNzE3OTEsIDcxODAzLCA3MTgxNSwgCi0gICAgNzE4MjEsIDcxODI3LCA3MTgzNSwgNzE4NDMsIDcxODUzLCA3MTg2MywgNzE4NzAsIDcxODc3LCA3MTg4MiwgNzE4ODcsIAotICAgIDcxODk5LCA3MTkxMSwgNzE5MTksIDcxOTI3LCA3MTkzNywgNzE5NDcsIDcxOTU5LCA3MTk3MSwgNzE5ODAsIDcxOTg5LCAKLSAgICA3MTk5NiwgNzIwMDMsIDcyMDEwLCA3MjAxNywgNzIwMjYsIDcyMDM1LCA3MjA0MCwgNzIwNDUsIDcyMDUyLCA3MjA1OSwgCi0gICAgNzIwNjYsIDcyMDczLCA3MjA4NSwgNzIwOTcsIDcyMTAyLCA3MjEwNywgNzIxMTIsIDcyMTE3LCA3MjEyMiwgNzIxMjcsIAotICAgIDcyMTMyLCA3MjEzNywgNzIxNDEsIDcyMTQ2LCA3MjE1MSwgNzIxNTYsIDcyMTYxLCA3MjE2NiwgNzIxNzIsIDcyMTc3LCAKLSAgICA3MjE4MiwgNzIxODksIDcyMTk2LCA3MjIwMywgNzIyMTAsIDcyMjE3LCA3MjIyNiwgNzIyMzUsIDcyMjQxLCA3MjI0NywgCi0gICAgNzIyNTMsIDcyMjU5LCA3MjI2NiwgNzIyNzMsIDcyMjgwLCA3MjI4NywgNzIyOTQsIDcyMjk4LCA3MjMwNSwgNzIzMTAsIAotICAgIDcyMzE1LCA3MjMyMiwgMCwgNzIzMzUsIDcyMzQzLCA3MjM1MSwgNzIzNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDcyMzY1LCA3MjM3NCwgNzIzODMsIDcyMzkyLCA3MjQwMSwgNzI0MTAsIDcyNDE5LCA3MjQyOCwgNzI0MzcsIAotICAgIDcyNDQ2LCA3MjQ1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI0NjIsIDcyNDY5LCA3MjQ3NSwgNzI0ODIsIDcyNDkwLCA3MjQ5OCwgCi0gICAgNzI1MDUsIDcyNTEzLCA3MjUyMCwgNzI1MjYsIDcyNTMyLCA3MjUzOSwgNzI1NDUsIDcyNTUxLCA3MjU1NywgNzI1NjQsIAotICAgIDcyNTcxLCA3MjU3OCwgNzI1ODUsIDcyNTkyLCA3MjU5OSwgNzI2MDYsIDcyNjEzLCA3MjYyMCwgNzI2MjcsIDcyNjM0LCAKLSAgICA3MjY0MSwgNzI2NDgsIDcyNjU1LCA3MjY2MSwgNzI2NjgsIDcyNjc1LCA3MjY4MiwgNzI2ODksIDcyNjk2LCA3MjcwMywgCi0gICAgNzI3MTAsIDcyNzE3LCA3MjcyNCwgNzI3MzEsIDcyNzM4LCA3Mjc0NSwgNzI3NTIsIDcyNzU5LCA3Mjc2NiwgNzI3NzMsIAotICAgIDcyNzgwLCA3Mjc4NywgNzI3OTUsIDcyODAzLCA3MjgxMSwgNzI4MTksIDAsIDAsIDAsIDAsIDcyODI3LCA3MjgzNiwgCi0gICAgNzI4NDUsIDcyODU0LCA3Mjg2MywgNzI4NzIsIDcyODgxLCA3Mjg4OCwgNzI4OTUsIDcyOTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3MjkwOSwgNzI5MTMsIDcyOTE4LCA3MjkyMywgNzI5MjgsIDcyOTMzLCA3MjkzOCwgNzI5NDMsIDcyOTQ4LCA3Mjk1MywgCi0gICAgNzI5NTgsIDcyOTYzLCA3Mjk2NywgNzI5NzEsIDcyOTc2LCA3Mjk4MSwgNzI5ODUsIDcyOTkwLCA3Mjk5NSwgNzMwMDAsIAotICAgIDczMDA1LCA3MzAxMCwgNzMwMTUsIDczMDIwLCA3MzAyNCwgNzMwMjgsIDczMDMzLCA3MzAzOCwgNzMwNDIsIDczMDQ2LCAKLSAgICA3MzA1MCwgNzMwNTQsIDczMDU4LCA3MzA2MiwgNzMwNjYsIDczMDcxLCA3MzA3NiwgNzMwODEsIDczMDg2LCA3MzA5MSwgCi0gICAgNzMwOTgsIDczMTA0LCA3MzEwOSwgNzMxMTQsIDczMTE5LCA3MzEyNCwgNzMxMzAsIDczMTM3LCA3MzE0MywgNzMxNTAsIAotICAgIDczMTU2LCA3MzE2MiwgNzMxNjcsIDczMTc0LCA3MzE4MCwgNzMxODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMTkxLCAKLSAgICA3MzE5NSwgNzMxOTksIDczMjAyLCA3MzIwNiwgNzMyMDksIDczMjEzLCA3MzIxNiwgNzMyMjAsIDczMjI0LCA3MzIyOSwgCi0gICAgNzMyMzMsIDczMjM4LCA3MzI0MSwgNzMyNDUsIDczMjQ5LCA3MzI1MiwgNzMyNTYsIDczMjYwLCA3MzI2MywgNzMyNjcsIAotICAgIDczMjcxLCA3MzI3NSwgNzMyNzksIDczMjgzLCA3MzI4NywgNzMyOTEsIDczMjk1LCA3MzI5OSwgNzMzMDMsIDczMzA3LCAKLSAgICA3MzMxMSwgNzMzMTUsIDczMzE5LCA3MzMyMywgNzMzMjcsIDczMzMxLCA3MzMzNSwgNzMzMzgsIDczMzQxLCA3MzM0NSwgCi0gICAgNzMzNDksIDczMzUzLCA3MzM1NiwgNzMzNTksIDczMzYyLCA3MzM2NiwgNzMzNzAsIDczMzc0LCA3MzM3OCwgNzMzODEsIAotICAgIDczMzg0LCA3MzM4OCwgNzMzOTMsIDczMzk4LCA3MzQwMiwgNzM0MDcsIDczNDExLCA3MzQxNiwgNzM0MjEsIDczNDI3LCAKLSAgICA3MzQzMiwgNzM0MzgsIDczNDQyLCA3MzQ0NywgNzM0NTIsIDczNDU2LCA3MzQ2MSwgNzM0NjYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDczNDcwLCA3MzQ3MywgNzM0NzcsIDczNDgxLCA3MzQ4NCwgNzM0ODcsIDczNDkwLCA3MzQ5MywgNzM0OTYsIAotICAgIDczNDk5LCA3MzUwMiwgNzM1MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDczNTA4LCA3MzUxMywgNzM1MTcsIDczNTIxLCA3MzUyNSwgCi0gICAgNzM1MjksIDczNTMzLCA3MzUzNywgNzM1NDEsIDczNTQ1LCA3MzU0OSwgNzM1NTMsIDczNTU3LCA3MzU2MSwgNzM1NjUsIAotICAgIDczNTY5LCA3MzU3MywgNzM1NzgsIDczNTgzLCA3MzU4OSwgNzM1OTUsIDczNjAyLCA3MzYwNywgNzM2MTIsIDczNjE4LCAKLSAgICA3MzYyMiwgNzM2MjcsIDczNjMwLCAwLCAwLCAwLCAwLCA3MzYzMywgNzM2NDAsIDczNjQ2LCA3MzY1MiwgNzM2NTgsIAotICAgIDczNjY0LCA3MzY3MCwgNzM2NzYsIDczNjgyLCA3MzY4OCwgNzM2OTQsIDczNzAwLCA3MzcwNywgNzM3MTQsIDczNzIxLCAKLSAgICA3MzcyNywgNzM3MzQsIDczNzQxLCA3Mzc0OCwgNzM3NTUsIDczNzYyLCA3Mzc2OCwgNzM3NzQsIDczNzgxLCA3Mzc4NywgCi0gICAgNzM3OTQsIDczODAxLCA3MzgwNywgNzM4MTMsIDczODIwLCA3MzgyNywgNzM4MzQsIDczODQwLCA3Mzg0NywgNzM4NTQsIAotICAgIDczODYwLCA3Mzg2NywgNzM4NzMsIDczODgwLCA3Mzg4NywgNzM4OTMsIDczODk5LCA3MzkwNiwgNzM5MTIsIDczOTE5LCAKLSAgICA3MzkyNiwgNzM5MzUsIDczOTQyLCA3Mzk0OSwgNzM5NTMsIDczOTU4LCA3Mzk2MywgNzM5NjgsIDczOTczLCA3Mzk3NywgCi0gICAgNzM5ODEsIDczOTg2LCA3Mzk5MCwgNzM5OTUsIDc0MDAwLCA3NDAwNSwgNzQwMDksIDc0MDEzLCA3NDAxOCwgNzQwMjIsIAotICAgIDc0MDI3LCA3NDAzMSwgNzQwMzYsIDc0MDQxLCA3NDA0NiwgNzQwNTEsIDc0MDU1LCA3NDA2MCwgNzQwNjUsIDc0MDcwLCAKLSAgICA3NDA3NiwgNzQwODEsIDc0MDg3LCA3NDA5MywgNzQwOTksIDc0MTA1LCA3NDExMSwgNzQxMTYsIDc0MTIyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDEyNiwgNzQxMzEsIDc0MTM1LCA3NDEzOSwgNzQxNDMsIDc0MTQ3LCA3NDE1MSwgCi0gICAgNzQxNTUsIDc0MTU5LCA3NDE2MywgNzQxNjcsIDc0MTcxLCA3NDE3NSwgNzQxNzksIDc0MTgzLCA3NDE4NywgNzQxOTEsIAotICAgIDc0MTk1LCA3NDE5OSwgNzQyMDMsIDc0MjA3LCA3NDIxMSwgNzQyMTUsIDc0MjE5LCA3NDIyMywgNzQyMjcsIDc0MjMxLCAKLSAgICA3NDIzNSwgNzQyMzksIDc0MjQzLCAwLCAwLCAwLCA3NDI0NywgNzQyNTEsIDc0MjU1LCA3NDI1OSwgNzQyNjMsIDc0MjY2LCAKLSAgICA3NDI3MiwgNzQyNzUsIDc0Mjc5LCA3NDI4MiwgNzQyODgsIDc0Mjk0LCA3NDMwMiwgNzQzMDUsIDc0MzA5LCA3NDMxMiwgCi0gICAgNzQzMTUsIDc0MzIxLCA3NDMyNywgNzQzMzEsIDc0MzM3LCA3NDM0MSwgNzQzNDUsIDc0MzUxLCA3NDM1NSwgNzQzNjEsIAotICAgIDc0MzY3LCA3NDM3MSwgNzQzNzUsIDc0MzgxLCA3NDM4NSwgNzQzOTEsIDc0Mzk3LCA3NDQwMSwgNzQ0MDcsIDc0NDExLCAKLSAgICA3NDQxNywgNzQ0MjAsIDc0NDIzLCA3NDQyOSwgNzQ0MzMsIDc0NDM5LCA3NDQ0MiwgNzQ0NDUsIDc0NDQ4LCA3NDQ1NCwgCi0gICAgNzQ0NTgsIDc0NDYyLCA3NDQ2OCwgNzQ0NzQsIDc0NDc3LCA3NDQ4MCwgNzQ0ODYsIDc0NDkxLCA3NDQ5NiwgNzQ1MDEsIAotICAgIDc0NTA4LCA3NDUxMywgNzQ1MjAsIDc0NTI1LCA3NDUzMiwgNzQ1MzcsIDc0NTQyLCA3NDU0NywgNzQ1NTIsIDc0NTU1LCAKLSAgICA3NDU1OSwgNzQ1NjMsIDc0NTY4LCA3NDU3MywgNzQ1NzgsIDc0NTgzLCA3NDU4OCwgNzQ1OTMsIDc0NTk4LCA3NDYwMywgCi0gICAgNzQ2MTAsIDc0NjE1LCAwLCA3NDYyMiwgNzQ2MjUsIDc0NjI5LCA3NDYzMiwgNzQ2MzUsIDc0NjM4LCA3NDY0MSwgNzQ2NDQsIAotICAgIDc0NjQ3LCA3NDY1MCwgNzQ2NTMsIDAsIDAsIDAsIDAsIDc0NjU2LCA3NDY2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzQ2NjgsIDc0NjcxLCA3NDY3NCwgNzQ2NzcsIDc0NjgwLCA3NDY4NCwgNzQ2ODcsIDc0NjkwLCA3NDY5NCwgNzQ2OTgsIAotICAgIDc0NzAyLCA3NDcwNiwgNzQ3MTAsIDc0NzE0LCA3NDcxOCwgNzQ3MjIsIDc0NzI2LCA3NDczMCwgNzQ3MzQsIDc0NzM4LCAKLSAgICA3NDc0MiwgNzQ3NDYsIDc0NzUwLCA3NDc1NCwgNzQ3NTgsIDc0NzYxLCA3NDc2NSwgNzQ3NjgsIDc0NzcyLCA3NDc3NiwgCi0gICAgNzQ3ODAsIDc0Nzg0LCA3NDc4OCwgNzQ3OTEsIDc0Nzk1LCA3NDc5OCwgNzQ4MDEsIDc0ODA1LCA3NDgwOSwgNzQ4MTMsIAotICAgIDc0ODE2LCA3NDgxOSwgNzQ4MjQsIDc0ODI4LCA3NDgzMywgNzQ4MzgsIDc0ODQyLCA3NDg0NywgNzQ4NTEsIDc0ODU2LCAKLSAgICA3NDg2MSwgNzQ4NjYsIDc0ODcwLCA3NDg3NCwgNzQ4NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0ODg0LCAKLSAgICA3NDg4OSwgNzQ4OTQsIDc0ODk5LCA3NDkwNSwgNzQ5MTAsIDc0OTE1LCA3NDkyMCwgNzQ5MjUsIDc0OTMwLCA3NDkzNCwgCi0gICAgNzQ5MzgsIDc0OTQzLCA3NDk0OCwgMCwgMCwgNzQ5NTQsIDc0OTU4LCA3NDk2MSwgNzQ5NjQsIDc0OTY3LCA3NDk3MCwgCi0gICAgNzQ5NzMsIDc0OTc2LCA3NDk3OSwgNzQ5ODIsIDAsIDAsIDc0OTg1LCA3NDk5MCwgNzQ5OTUsIDc1MDAxLCA3NTAwOCwgCi0gICAgNzUwMTQsIDc1MDIwLCA3NTAyNiwgNzUwMzIsIDc1MDM4LCA3NTA0NCwgNzUwNTAsIDc1MDU2LCA3NTA2MiwgNzUwNjgsIAotICAgIDc1MDc0LCA3NTA3OSwgNzUwODQsIDc1MDg5LCA3NTA5NSwgNzUxMDEsIDc1MTA4LCA3NTExNCwgNzUxMjAsIDc1MTI1LCAKLSAgICA3NTEzMiwgNzUxMzksIDc1MTQ2LCA3NTE1MiwgNzUxNTcsIDc1MTYyLCA3NTE2NywgMCwgMCwgMCwgMCwgNzUxNzUsIAotICAgIDc1MTgxLCA3NTE4NywgNzUxOTMsIDc1MTk5LCA3NTIwNSwgNzUyMTEsIDc1MjE3LCA3NTIyMywgNzUyMjksIDc1MjM1LCAKLSAgICA3NTI0MSwgNzUyNDcsIDc1MjUzLCA3NTI1OSwgNzUyNjUsIDc1MjcxLCA3NTI3NywgNzUyODMsIDc1Mjg5LCA3NTI5NSwgCi0gICAgNzUzMDAsIDc1MzA1LCA3NTMxMSwgNzUzMTcsIDc1MzIzLCA3NTMyOSwgNzUzMzUsIDc1MzQxLCA3NTM0NywgNzUzNTMsIAotICAgIDc1MzU5LCA3NTM2NSwgNzUzNzEsIDc1Mzc3LCA3NTM4MywgNzUzODksIDc1Mzk1LCA3NTQwMSwgNzU0MDcsIDc1NDEzLCAKLSAgICA3NTQxOSwgNzU0MjUsIDc1NDMxLCA3NTQzNywgNzU0NDMsIDc1NDQ5LCA3NTQ1NCwgNzU0NTksIDc1NDY1LCA3NTQ3MCwgCi0gICAgNzU0NzQsIDc1NDc5LCA3NTQ4MywgNzU0ODcsIDc1NDkxLCA3NTQ5NywgNzU1MDIsIDc1NTA3LCA3NTUxMiwgNzU1MTcsIAotICAgIDc1NTIyLCA3NTUyNywgNzU1MzIsIDc1NTM5LCA3NTU0NiwgNzU1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NTYwLCA3NTU2NSwgNzU1NzAsIDc1NTc1LCAKLSAgICA3NTU4MiwgNzU1ODksIDc1NTkzLCA3NTU5NywgNzU2MDIsIDc1NjA3LCA3NTYxMiwgNzU2MTcsIDc1NjIyLCA3NTYyNywgCi0gICAgNzU2MzIsIDc1NjM3LCA3NTY0MiwgNzU2NDgsIDc1NjU0LCA3NTY2MCwgNzU2NjYsIDc1NjcyLCA3NTY3NiwgNzU2ODIsIAotICAgIDc1Njg2LCA3NTY5MiwgNzU2OTksIDc1NzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTcwOSwgNzU3MTMsIAotICAgIDc1NzE3LCA3NTcyMSwgNzU3MjUsIDc1NzI5LCAwLCAwLCA3NTczMywgNzU3MzcsIDc1NzQxLCA3NTc0NSwgNzU3NDksIAotICAgIDc1NzUzLCAwLCAwLCA3NTc1NywgNzU3NjEsIDc1NzY1LCA3NTc2OSwgNzU3NzMsIDc1Nzc3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3NTc4MSwgNzU3ODUsIDc1Nzg5LCA3NTc5MywgNzU3OTcsIDc1ODAxLCA3NTgwNSwgMCwgNzU4MDksIAotICAgIDc1ODEzLCA3NTgxNywgNzU4MjEsIDc1ODI1LCA3NTgyOSwgNzU4MzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkyOTY2LCA5Mjk3MywgOTI5ODIsIDkyOTkxLCA5Mjk5OCwgCisgICAgOTMwMDUsIDkzMDEyLCA5MzAxOSwgOTMwMjYsIDkzMDMzLCA5MzAzOSwgOTMwNDYsIDkzMDUzLCA5MzA2MCwgOTMwNjcsIAorICAgIDkzMDc0LCA5MzA4MSwgOTMwODgsIDkzMDk1LCA5MzEwNCwgOTMxMTEsIDkzMTE4LCA5MzEyNSwgOTMxMzIsIDkzMTM5LCAKKyAgICA5MzE0NiwgOTMxNTMsIDkzMTYwLCA5MzE2OSwgOTMxNzYsIDkzMTgzLCA5MzE5MCwgOTMxOTcsIDkzMjA0LCA5MzIxMSwgCisgICAgOTMyMjAsIDkzMjI3LCA5MzIzNCwgOTMyNDEsIDkzMjQ4LCA5MzI1NywgOTMyNjQsIDkzMjcxLCA5MzI3OCwgOTMyODYsIAorICAgIDkzMjk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MzMwNCwgOTMzMDgsIDkzMzEyLCA5MzMxNywgOTMzMjIsIAorICAgIDkzMzI3LCA5MzMzMiwgOTMzMzYsIDkzMzQxLCA5MzM0NiwgOTMzNTEsIDkzMzU2LCA5MzM2MSwgOTMzNjYsIDkzMzcwLCAKKyAgICA5MzM3NSwgOTMzODAsIDkzMzg1LCA5MzM5MCwgOTMzOTQsIDkzMzk5LCA5MzQwNCwgOTM0MDgsIDkzNDEyLCA5MzQxNywgCisgICAgOTM0MjIsIDkzNDI3LCA5MzQzMiwgOTM0MzcsIDAsIDAsIDAsIDkzNDQyLCA5MzQ0NiwgOTM0NTEsIDkzNDU2LCA5MzQ2MCwgCisgICAgOTM0NjUsIDkzNDY5LCA5MzQ3NCwgOTM0NzksIDkzNDg0LCA5MzQ4OSwgOTM0OTQsIDkzNDk4LCA5MzUwMywgOTM1MDgsIAorICAgIDkzNTEzLCA5MzUxOCwgOTM1MjIsIDkzNTI3LCA5MzUzMSwgOTM1MzYsIDkzNTQxLCA5MzU0NiwgOTM1NTEsIDkzNTU2LCAKKyAgICA5MzU2MSwgOTM1NjUsIDkzNTY5LCA5MzU3NCwgOTM1NzksIDkzNTg0LCA5MzU4OSwgOTM1OTQsIDkzNTk5LCA5MzYwNCwgCisgICAgOTM2MDksIDkzNjE0LCA5MzYxOSwgOTM2MjQsIDkzNjI5LCA5MzYzNCwgOTM2MzksIDkzNjQ0LCA5MzY0OSwgOTM2NTQsIAorICAgIDkzNjU5LCA5MzY2NCwgOTM2NjksIDkzNjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5MzY3OSwgOTM2ODUsIDkzNjkwLCA5MzY5NSwgOTM3MDAsIDkzNzA1LCA5MzcxMCwgOTM3MTUsIDkzNzIxLCA5MzcyNiwgCisgICAgOTM3MzIsIDkzNzM4LCA5Mzc0NCwgOTM3NTAsIDkzNzU2LCA5Mzc2MiwgOTM3NjgsIDkzNzc0LCA5Mzc4MCwgOTM3ODYsIAorICAgIDkzNzkzLCA5MzgwMCwgOTM4MDcsIDkzODE1LCA5MzgyMywgOTM4MzEsIDkzODM5LCA5Mzg0NywgMCwgMCwgMCwgMCwgCisgICAgOTM4NTUsIDkzODU5LCA5Mzg2NCwgOTM4NjksIDkzODc0LCA5Mzg3OCwgOTM4ODMsIDkzODg4LCA5Mzg5MywgOTM4OTgsIAorICAgIDkzOTAyLCA5MzkwNiwgOTM5MTEsIDkzOTE2LCA5MzkyMSwgOTM5MjYsIDkzOTMwLCA5MzkzNSwgOTM5NDAsIDkzOTQ1LCAKKyAgICA5Mzk1MCwgOTM5NTUsIDkzOTYwLCA5Mzk2NCwgOTM5NjksIDkzOTc0LCA5Mzk3OSwgOTM5ODQsIDkzOTg5LCA5Mzk5NCwgCisgICAgOTM5OTksIDk0MDA0LCA5NDAwOSwgOTQwMTQsIDk0MDE5LCA5NDAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgOTQwMzEsIDk0MDM2LCA5NDA0MSwgOTQwNDYsIDk0MDUxLCA5NDA1NiwgOTQwNjEsIDk0MDY2LCA5NDA3MSwgCisgICAgOTQwNzYsIDk0MDgxLCA5NDA4NiwgOTQwOTEsIDk0MDk2LCA5NDEwMSwgOTQxMDYsIDk0MTExLCA5NDExNiwgOTQxMjEsIAorICAgIDk0MTI2LCA5NDEzMSwgOTQxMzYsIDk0MTQxLCA5NDE0NiwgOTQxNTEsIDk0MTU2LCA5NDE2MSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOTQxNjgsIDk0MTc0LCA5NDE4MCwgOTQxODYsIDk0MTkyLCA5NDE5NywgOTQyMDMsIDk0MjA5LCA5NDIxNSwgOTQyMjEsIAorICAgIDk0MjI2LCA5NDIzMiwgOTQyMzgsIDk0MjQ0LCA5NDI1MCwgOTQyNTYsIDk0MjYyLCA5NDI2OCwgOTQyNzQsIDk0MjgwLCAKKyAgICA5NDI4NSwgOTQyOTEsIDk0Mjk3LCA5NDMwMywgOTQzMDksIDk0MzE1LCA5NDMyMCwgOTQzMjYsIDk0MzMyLCA5NDMzNywgCisgICAgOTQzNDMsIDk0MzQ5LCA5NDM1NSwgOTQzNjEsIDk0MzY3LCA5NDM3MywgOTQzNzksIDk0Mzg0LCA5NDM5MCwgOTQzOTcsIAorICAgIDk0NDA0LCA5NDQxMSwgOTQ0MTgsIDAsIDAsIDAsIDAsIDAsIDk0NDI1LCA5NDQzMCwgOTQ0MzUsIDk0NDQwLCA5NDQ0NSwgCisgICAgOTQ0NTAsIDk0NDU1LCA5NDQ2MCwgOTQ0NjUsIDk0NDcwLCA5NDQ3NSwgOTQ0ODAsIDk0NDg1LCA5NDQ5MCwgOTQ0OTUsIAorICAgIDk0NTAwLCA5NDUwNSwgOTQ1MTAsIDk0NTE1LCA5NDUyMCwgOTQ1MjUsIDk0NTMwLCA5NDUzNSwgOTQ1NDAsIDk0NTQ1LCAKKyAgICA5NDU1MCwgOTQ1NTUsIDk0NTU5LCA5NDU2MywgOTQ1NjcsIDAsIDk0NTcyLCA5NDU3OCwgOTQ1ODMsIDk0NTg4LCA5NDU5MywgCisgICAgOTQ1OTgsIDk0NjA0LCA5NDYxMCwgOTQ2MTYsIDk0NjIyLCA5NDYyOCwgOTQ2MzQsIDk0NjQwLCA5NDY0NiwgOTQ2NTIsIAorICAgIDk0NjU4LCA5NDY2NCwgOTQ2NzAsIDk0Njc2LCA5NDY4MSwgOTQ2ODcsIDk0NjkzLCA5NDY5OSwgOTQ3MDUsIDk0NzEwLCAKKyAgICA5NDcxNiwgOTQ3MjIsIDk0NzI3LCA5NDczMywgOTQ3MzksIDk0NzQ1LCA5NDc1MSwgOTQ3NTcsIDk0NzYzLCA5NDc2OSwgCisgICAgOTQ3NzUsIDk0NzgxLCAwLCAwLCAwLCAwLCA5NDc4NiwgOTQ3OTIsIDk0Nzk4LCA5NDgwNCwgOTQ4MTAsIDk0ODE2LCAKKyAgICA5NDgyMiwgOTQ4MjgsIDk0ODM0LCA5NDg0MSwgOTQ4NDYsIDk0ODUxLCA5NDg1NywgOTQ4NjMsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1ODM3LCA3NTg0MiwgNzU4NDcsIDc1ODUyLCAKLSAgICA3NTg1NywgNzU4NjEsIDc1ODY1LCA3NTg3MCwgNzU4NzUsIDc1ODgwLCA3NTg4NSwgNzU4OTAsIDc1ODk1LCA3NTkwMCwgCi0gICAgNzU5MDUsIDc1OTEwLCA3NTkxNCwgNzU5MTksIDc1OTI0LCA3NTkyOSwgNzU5MzQsIDc1OTM5LCA3NTk0NCwgNzU5NDksIAotICAgIDc1OTU0LCA3NTk1OSwgNzU5NjQsIDc1OTY5LCA3NTk3NiwgNzU5ODMsIDc1OTkwLCA3NTk5NywgNzYwMDQsIDc2MDExLCAKLSAgICA3NjAxOCwgNzYwMjUsIDc2MDMxLCA3NjAzNywgNzYwNDMsIDc2MDQ5LCA3NjA1NSwgNzYwNjEsIDc2MDY3LCA3NjA3MywgCi0gICAgNzYwNzcsIDc2MDgzLCAwLCAwLCA3NjA4OSwgNzYwOTQsIDc2MDk4LCA3NjEwMiwgNzYxMDYsIDc2MTEwLCA3NjExNCwgCi0gICAgNzYxMTgsIDc2MTIyLCA3NjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ4NjksIDk0ODc1LCA5NDg4MSwgOTQ4ODcsIDk0ODk0LCAKKyAgICA5NDkwMCwgOTQ5MDcsIDk0OTE0LCA5NDkyMSwgOTQ5MjgsIDk0OTM2LCA5NDk0MywgOTQ5NTEsIDk0OTU3LCA5NDk2MywgCisgICAgOTQ5NjksIDk0OTc1LCA5NDk4MSwgOTQ5ODcsIDk0OTkzLCA5NDk5OSwgOTUwMDUsIDk1MDExLCA5NTAxNywgOTUwMjMsIAorICAgIDk1MDI5LCA5NTAzNSwgOTUwNDEsIDk1MDQ3LCA5NTA1MywgOTUwNTksIDk1MDY1LCA5NTA3MSwgOTUwNzcsIDk1MDgzLCAKKyAgICA5NTA4OSwgOTUwOTUsIDk1MTAxLCA5NTEwNywgOTUxMTMsIDk1MTE5LCA5NTEyNSwgOTUxMzEsIDk1MTM3LCA5NTE0NCwgCisgICAgOTUxNTAsIDk1MTU3LCA5NTE2NCwgOTUxNzEsIDk1MTc4LCA5NTE4NiwgOTUxOTMsIDk1MjAxLCA5NTIwNywgOTUyMTMsIAorICAgIDk1MjE5LCA5NTIyNSwgOTUyMzEsIDk1MjM3LCA5NTI0MywgOTUyNDksIDk1MjU1LCA5NTI2MSwgOTUyNjcsIDk1MjczLCAKKyAgICA5NTI3OSwgOTUyODUsIDk1MjkxLCA5NTI5NywgOTUzMDMsIDk1MzA5LCA5NTMxNSwgOTUzMjEsIDk1MzI3LCA5NTMzMywgCisgICAgOTUzMzksIDk1MzQ1LCA5NTM1MSwgOTUzNTcsIDk1MzYzLCA5NTM2OSwgOTUzNzQsIDk1Mzc5LCA5NTM4NCwgOTUzODksIAorICAgIDk1Mzk0LCA5NTM5OSwgOTU0MDQsIDk1NDA5LCA5NTQxNCwgOTU0MTksIDk1NDI0LCA5NTQyOSwgOTU0MzQsIDk1NDM5LCAKKyAgICA5NTQ0NCwgOTU0NDksIDk1NDU0LCA5NTQ1OSwgOTU0NjQsIDk1NDY5LCA5NTQ3NCwgOTU0NzksIDk1NDg0LCA5NTQ4OSwgCisgICAgOTU0OTQsIDk1NDk5LCA5NTUwNCwgOTU1MDksIDk1NTE0LCA5NTUxOSwgOTU1MjQsIDk1NTI5LCA5NTUzNCwgOTU1MzksIAorICAgIDk1NTQ0LCA5NTU0OSwgOTU1NTQsIDk1NTU5LCA5NTU2NCwgOTU1NjksIDk1NTc0LCA5NTU3OSwgOTU1ODQsIDk1NTg5LCAKKyAgICA5NTU5NCwgOTU1OTksIDk1NjA0LCA5NTYwOSwgOTU2MTQsIDk1NjE5LCA5NTYyNCwgOTU2MjksIDk1NjM0LCA5NTYzOSwgCisgICAgOTU2NDQsIDk1NjQ5LCA5NTY1NCwgOTU2NTksIDk1NjY0LCA5NTY2OSwgOTU2NzQsIDk1Njc5LCA5NTY4NCwgOTU2ODksIAorICAgIDk1Njk0LCA5NTY5OSwgOTU3MDQsIDk1NzA5LCA5NTcxMywgOTU3MTcsIDk1NzIxLCA5NTcyNSwgOTU3MjksIDk1NzMzLCAKKyAgICA5NTczNywgOTU3NDIsIDk1NzQ3LCAwLCAwLCA5NTc1MiwgOTU3NTcsIDk1NzYxLCA5NTc2NSwgOTU3NjksIDk1NzczLCAKKyAgICA5NTc3NywgOTU3ODEsIDk1Nzg2LCA5NTc5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxMzAsIDc2MTM0LCA3NjEzOCwgNzYxNDIsIDc2MTQ2LCAKLSAgICA3NjE1MCwgNzYxNTQsIDc2MTU4LCA3NjE2MiwgNzYxNjYsIDc2MTcwLCA3NjE3NCwgNzYxNzgsIDc2MTgyLCA3NjE4NiwgCi0gICAgNzYxOTAsIDc2MTk0LCA3NjE5OCwgNzYyMDIsIDc2MjA2LCA3NjIxMCwgNzYyMTQsIDc2MjE4LCAwLCAwLCAwLCAwLCAKLSAgICA3NjIyMiwgNzYyMjYsIDc2MjMwLCA3NjIzNCwgNzYyMzgsIDc2MjQyLCA3NjI0NiwgNzYyNTAsIDc2MjU0LCA3NjI1OCwgCi0gICAgNzYyNjIsIDc2MjY2LCA3NjI3MCwgNzYyNzQsIDc2Mjc4LCA3NjI4MiwgNzYyODYsIDc2MjkwLCA3NjI5NCwgNzYyOTgsIAotICAgIDc2MzAyLCA3NjMwNiwgNzYzMTAsIDc2MzE0LCA3NjMxOCwgNzYzMjIsIDc2MzI2LCA3NjMzMCwgNzYzMzQsIDc2MzM4LCAKLSAgICA3NjM0MiwgNzYzNDYsIDc2MzUwLCA3NjM1NCwgNzYzNTgsIDc2MzYyLCA3NjM2NiwgNzYzNzAsIDc2Mzc0LCA3NjM3OCwgCi0gICAgNzYzODIsIDc2Mzg2LCA3NjM5MCwgNzYzOTQsIDc2Mzk4LCA3NjQwMiwgNzY0MDYsIDc2NDEwLCA3NjQxNCwgMCwgMCwgMCwgCi0gICAgMCwgNzY0MTgsIDc2NDIyLCA3NjQyNiwgNzY0MzAsIDc2NDM0LCA3NjQzOCwgNzY0NDIsIDc2NDQ2LCA3NjQ1MCwgNzY0NTQsIAotICAgIDc2NDU4LCA3NjQ2MiwgNzY0NjYsIDc2NDcwLCA3NjQ3NCwgNzY0NzgsIDc2NDgyLCA3NjQ4NiwgNzY0OTAsIDc2NDk0LCAKLSAgICA3NjQ5OCwgNzY1MDIsIDc2NTA2LCA3NjUxMCwgNzY1MTQsIDc2NTE4LCA3NjUyMiwgNzY1MjYsIDc2NTMwLCA3NjUzNCwgCi0gICAgNzY1MzgsIDc2NTQyLCA3NjU0NiwgNzY1NTAsIDc2NTU0LCA3NjU1OCwgNzY1NjIsIDc2NTY2LCA3NjU3MCwgNzY1NzQsIAotICAgIDc2NTc4LCA3NjU4MiwgNzY1ODYsIDc2NTkwLCA3NjU5NCwgNzY1OTgsIDc2NjAyLCA3NjYwNiwgNzY2MTAsIDc2NjE0LCAKLSAgICA3NjYxOCwgNzY2MjIsIDc2NjI2LCA3NjYzMCwgNzY2MzQsIDc2NjM4LCA3NjY0MiwgNzY2NDYsIDc2NjUwLCA3NjY1NCwgCi0gICAgNzY2NTgsIDc2NjYyLCA3NjY2NiwgNzY2NzAsIDc2Njc0LCA3NjY3OCwgNzY2ODIsIDc2Njg2LCA3NjY5MCwgNzY2OTQsIAotICAgIDc2Njk4LCA3NjcwMiwgNzY3MDYsIDc2NzEwLCA3NjcxNCwgNzY3MTgsIDc2NzIyLCA3NjcyNiwgNzY3MzAsIDc2NzM0LCAKLSAgICA3NjczOCwgNzY3NDIsIDc2NzQ2LCA3Njc1MCwgNzY3NTQsIDc2NzU4LCA3Njc2MiwgNzY3NjYsIDc2NzcwLCA3Njc3NCwgCi0gICAgNzY3NzgsIDc2NzgyLCA3Njc4NiwgNzY3OTAsIDc2Nzk0LCA3Njc5OCwgNzY4MDIsIDc2ODA2LCA3NjgxMCwgNzY4MTQsIAotICAgIDc2ODE4LCA3NjgyMiwgNzY4MjYsIDc2ODMwLCA3NjgzNCwgNzY4MzgsIDc2ODQyLCA3Njg0NiwgNzY4NTAsIDc2ODU0LCAKLSAgICA3Njg1OCwgNzY4NjIsIDc2ODY2LCA3Njg3MCwgNzY4NzQsIDc2ODc4LCA3Njg4MiwgNzY4ODYsIDc2ODkwLCA3Njg5NCwgCi0gICAgNzY4OTgsIDc2OTAyLCA3NjkwNiwgNzY5MTAsIDc2OTE0LCA3NjkxOCwgNzY5MjIsIDc2OTI2LCA3NjkzMCwgNzY5MzQsIAotICAgIDc2OTM4LCA3Njk0MiwgNzY5NDYsIDc2OTUwLCA3Njk1NCwgNzY5NTgsIDc2OTYyLCA3Njk2NiwgNzY5NzAsIDc2OTc0LCAKLSAgICA3Njk3OCwgNzY5ODIsIDc2OTg2LCA3Njk5MCwgNzY5OTQsIDc2OTk4LCA3NzAwMiwgNzcwMDYsIDc3MDEwLCA3NzAxNCwgCi0gICAgNzcwMTgsIDc3MDIyLCA3NzAyNiwgNzcwMzAsIDc3MDM0LCA3NzAzOCwgNzcwNDIsIDc3MDQ2LCA3NzA1MCwgNzcwNTQsIAotICAgIDc3MDU4LCA3NzA2MiwgNzcwNjYsIDc3MDcwLCA3NzA3NCwgNzcwNzgsIDc3MDgyLCA3NzA4NiwgNzcwOTAsIDc3MDk0LCAKLSAgICA3NzA5OCwgNzcxMDIsIDc3MTA2LCA3NzExMCwgNzcxMTQsIDc3MTE4LCA3NzEyMiwgNzcxMjYsIDc3MTMwLCA3NzEzNCwgCi0gICAgNzcxMzgsIDc3MTQyLCA3NzE0NiwgNzcxNTAsIDc3MTU0LCA3NzE1OCwgNzcxNjIsIDc3MTY2LCA3NzE3MCwgNzcxNzQsIAotICAgIDc3MTc4LCA3NzE4MiwgNzcxODYsIDc3MTkwLCA3NzE5NCwgNzcxOTgsIDc3MjAyLCA3NzIwNiwgNzcyMTAsIDc3MjE0LCAKLSAgICA3NzIxOCwgNzcyMjIsIDc3MjI2LCA3NzIzMCwgNzcyMzQsIDc3MjM4LCA3NzI0MiwgNzcyNDYsIDc3MjUwLCA3NzI1NCwgCi0gICAgNzcyNTgsIDc3MjYyLCA3NzI2NiwgNzcyNzAsIDc3Mjc0LCA3NzI3OCwgNzcyODIsIDc3Mjg2LCA3NzI5MCwgNzcyOTQsIAotICAgIDc3Mjk4LCA3NzMwMiwgNzczMDYsIDc3MzEwLCA3NzMxNCwgNzczMTgsIDc3MzIyLCA3NzMyNiwgNzczMzAsIDc3MzM0LCAKLSAgICA3NzMzOCwgNzczNDIsIDc3MzQ2LCA3NzM1MCwgNzczNTQsIDc3MzU4LCA3NzM2MiwgNzczNjYsIDc3MzcwLCA3NzM3NCwgCi0gICAgNzczNzgsIDc3MzgyLCA3NzM4NiwgNzczOTAsIDc3Mzk0LCA3NzM5OCwgNzc0MDIsIDc3NDA2LCA3NzQxMCwgNzc0MTQsIAotICAgIDc3NDE4LCA3NzQyMiwgNzc0MjYsIDc3NDMwLCA3NzQzNCwgNzc0MzgsIDc3NDQyLCA3NzQ0NiwgNzc0NTAsIDc3NDU0LCAKLSAgICA3NzQ1OCwgNzc0NjIsIDc3NDY2LCA3NzQ3MCwgNzc0NzQsIDc3NDc4LCA3NzQ4MiwgNzc0ODYsIDc3NDkwLCA3NzQ5NCwgCi0gICAgNzc0OTgsIDc3NTAyLCA3NzUwNiwgNzc1MTAsIDc3NTE0LCA3NzUxOCwgNzc1MjIsIDc3NTI2LCA3NzUzMCwgNzc1MzQsIAotICAgIDc3NTM4LCA3NzU0MiwgNzc1NDYsIDc3NTUwLCA3NzU1NCwgNzc1NTgsIDc3NTYyLCA3NzU2NiwgNzc1NzAsIDc3NTc0LCAKLSAgICA3NzU3OCwgNzc1ODIsIDc3NTg2LCA3NzU5MCwgNzc1OTQsIDc3NTk4LCA3NzYwMiwgNzc2MDYsIDc3NjEwLCA3NzYxNCwgCi0gICAgNzc2MTgsIDc3NjIyLCA3NzYyNiwgNzc2MzAsIDc3NjM0LCA3NzYzOCwgNzc2NDIsIDc3NjQ2LCA3NzY1MCwgNzc2NTQsIAotICAgIDc3NjU4LCA3NzY2MiwgNzc2NjYsIDc3NjcwLCA3NzY3NCwgNzc2NzgsIDc3NjgyLCA3NzY4NiwgNzc2OTAsIDc3Njk0LCAKLSAgICA3NzY5OCwgNzc3MDIsIDc3NzA2LCA3NzcxMCwgNzc3MTQsIDc3NzE4LCA3NzcyMiwgNzc3MjYsIDc3NzMwLCA3NzczNCwgCi0gICAgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU0LCA3Nzc1OCwgNzc3NjIsIDc3NzY2LCA3Nzc3MCwgNzc3NzQsIAotICAgIDc3Nzc4LCA3Nzc4MiwgNzc3ODYsIDc3NzkwLCA3Nzc5NCwgNzc3OTgsIDc3ODAyLCA3NzgwNiwgNzc4MTAsIDc3ODE0LCAKLSAgICA3NzgxOCwgNzc4MjIsIDc3ODI2LCA3NzgzMCwgNzc4MzQsIDc3ODM4LCA3Nzg0MiwgNzc4NDYsIDc3ODUwLCA3Nzg1NCwgCi0gICAgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgMCwgMCwgNzc4ODIsIDc3ODg2LCA3Nzg5MCwgCi0gICAgNzc4OTQsIDc3ODk4LCA3NzkwMiwgNzc5MDYsIDc3OTEwLCA3NzkxNCwgNzc5MTgsIDc3OTIyLCA3NzkyNiwgNzc5MzAsIAotICAgIDc3OTM0LCA3NzkzOCwgNzc5NDIsIDc3OTQ2LCA3Nzk1MCwgNzc5NTQsIDc3OTU4LCA3Nzk2MiwgNzc5NjYsIDc3OTcwLCAKLSAgICA3Nzk3NCwgNzc5NzgsIDc3OTgyLCA3Nzk4NiwgNzc5OTAsIDc3OTk0LCA3Nzk5OCwgNzgwMDIsIDc4MDA2LCA3ODAxMCwgCi0gICAgNzgwMTQsIDc4MDE4LCA3ODAyMiwgNzgwMjYsIDc4MDMwLCA3ODAzNCwgNzgwMzgsIDc4MDQyLCA3ODA0NiwgNzgwNTAsIAotICAgIDc4MDU0LCA3ODA1OCwgNzgwNjIsIDc4MDY2LCA3ODA3MCwgNzgwNzQsIDc4MDc4LCA3ODA4MiwgNzgwODYsIDc4MDkwLCAKLSAgICA3ODA5NCwgNzgwOTgsIDc4MTAyLCA3ODEwNiwgNzgxMTAsIDc4MTE0LCA3ODExOCwgNzgxMjIsIDc4MTI2LCA3ODEzMCwgCi0gICAgNzgxMzQsIDc4MTM4LCA3ODE0MiwgNzgxNDYsIDc4MTUwLCA3ODE1NCwgNzgxNTgsIDc4MTYyLCA3ODE2NiwgNzgxNzAsIAotICAgIDc4MTc0LCA3ODE3OCwgNzgxODIsIDc4MTg2LCA3ODE5MCwgNzgxOTQsIDc4MTk4LCA3ODIwMiwgNzgyMDYsIDc4MjEwLCAKLSAgICA3ODIxNCwgNzgyMTgsIDc4MjIyLCA3ODIyNiwgNzgyMzAsIDc4MjM0LCA3ODIzOCwgNzgyNDIsIDc4MjQ2LCA3ODI1MCwgCi0gICAgNzgyNTQsIDc4MjU4LCA3ODI2MiwgNzgyNjYsIDc4MjcwLCA3ODI3NCwgNzgyNzgsIDc4MjgyLCA3ODI4NiwgNzgyOTAsIAotICAgIDc4Mjk0LCA3ODI5OCwgNzgzMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzA2LCAKLSAgICA3ODMxMSwgNzgzMTYsIDc4MzIxLCA3ODMyNiwgNzgzMzEsIDc4MzM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3ODM0NCwgNzgzNTEsIDc4MzU4LCA3ODM2NSwgNzgzNzIsIDAsIDAsIDAsIDAsIDAsIDc4Mzc5LCA3ODM4NiwgCi0gICAgNzgzOTMsIDc4NDAzLCA3ODQwOSwgNzg0MTUsIDc4NDIxLCA3ODQyNywgNzg0MzMsIDc4NDM5LCA3ODQ0NiwgNzg0NTIsIAotICAgIDc4NDU4LCA3ODQ2NCwgNzg0NzMsIDc4NDgyLCA3ODQ5NCwgNzg1MDYsIDc4NTEyLCA3ODUxOCwgNzg1MjQsIDc4NTMxLCAKLSAgICA3ODUzOCwgNzg1NDUsIDc4NTUyLCA3ODU1OSwgMCwgNzg1NjYsIDc4NTczLCA3ODU4MCwgNzg1ODgsIDc4NTk1LCAwLCAKLSAgICA3ODYwMiwgMCwgNzg2MDksIDc4NjE2LCAwLCA3ODYyMywgNzg2MzEsIDAsIDc4NjM4LCA3ODY0NSwgNzg2NTIsIDc4NjU5LCAKLSAgICA3ODY2NiwgNzg2NzMsIDc4NjgwLCA3ODY4NywgNzg2OTQsIDc4NzAxLCA3ODcwNiwgNzg3MTMsIDc4NzIwLCA3ODcyNiwgCi0gICAgNzg3MzIsIDc4NzM4LCA3ODc0NCwgNzg3NTAsIDc4NzU2LCA3ODc2MiwgNzg3NjgsIDc4Nzc0LCA3ODc4MCwgNzg3ODYsIAotICAgIDc4NzkyLCA3ODc5OCwgNzg4MDQsIDc4ODEwLCA3ODgxNiwgNzg4MjIsIDc4ODI4LCA3ODgzNCwgNzg4NDAsIDc4ODQ2LCAKLSAgICA3ODg1MiwgNzg4NTgsIDc4ODY0LCA3ODg3MCwgNzg4NzYsIDc4ODgyLCA3ODg4OCwgNzg4OTQsIDc4OTAwLCA3ODkwNiwgCi0gICAgNzg5MTIsIDc4OTE4LCA3ODkyNCwgNzg5MzAsIDc4OTM2LCA3ODk0MiwgNzg5NDgsIDc4OTU0LCA3ODk2MCwgNzg5NjYsIAotICAgIDc4OTcyLCA3ODk3OCwgNzg5ODQsIDc4OTkwLCA3ODk5NiwgNzkwMDIsIDc5MDA4LCA3OTAxNCwgNzkwMjAsIDc5MDI2LCAKLSAgICA3OTAzMiwgNzkwMzgsIDc5MDQ0LCA3OTA1MCwgNzkwNTYsIDc5MDYyLCA3OTA2OCwgNzkwNzQsIDc5MDgwLCA3OTA4NiwgCi0gICAgNzkwOTIsIDc5MDk4LCA3OTEwNCwgNzkxMTAsIDc5MTE2LCA3OTEyMiwgNzkxMjgsIDc5MTM0LCA3OTE0MCwgNzkxNDYsIAotICAgIDc5MTUyLCA3OTE1OCwgNzkxNjQsIDc5MTcwLCA3OTE3NiwgNzkxODQsIDc5MTkyLCA3OTE5OCwgNzkyMDQsIDc5MjEwLCAKLSAgICA3OTIxNiwgNzkyMjUsIDc5MjM0LCA3OTI0MiwgNzkyNTAsIDc5MjU4LCA3OTI2NiwgNzkyNzQsIDc5MjgyLCA3OTI5MCwgCi0gICAgNzkyOTgsIDc5MzA1LCA3OTMxMiwgNzkzMjIsIDc5MzMyLCA3OTMzNiwgNzkzNDAsIDc5MzQ1LCA3OTM1MCwgNzkzNTUsIAotICAgIDc5MzYwLCA3OTM2OSwgNzkzNzgsIDc5Mzg0LCA3OTM5MCwgNzkzOTcsIDc5NDA0LCA3OTQxMSwgNzk0MTUsIDc5NDIxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTQyNywgNzk0MzMsIDc5NDM5LCAKLSAgICA3OTQ0NSwgNzk0NTEsIDc5NDU2LCA3OTQ2MSwgNzk0NjcsIDc5NDczLCA3OTQ3OSwgNzk0ODUsIDc5NDkzLCA3OTQ5OSwgCi0gICAgNzk1MDUsIDc5NTEzLCA3OTUyMSwgNzk1MjksIDc5NTM3LCA3OTU0MiwgNzk1NDcsIDc5NTUyLCA3OTU1NywgNzk1NzAsIAotICAgIDc5NTgzLCA3OTU5MywgNzk2MDMsIDc5NjE0LCA3OTYyNSwgNzk2MzYsIDc5NjQ3LCA3OTY1NywgNzk2NjcsIDc5Njc4LCAKLSAgICA3OTY4OSwgNzk3MDAsIDc5NzExLCA3OTcyMSwgNzk3MzEsIDc5NzQxLCA3OTc1NywgNzk3NzMsIDc5Nzg5LCA3OTc5NiwgCi0gICAgNzk4MDMsIDc5ODEwLCA3OTgxNywgNzk4MjcsIDc5ODM3LCA3OTg0NywgNzk4NTksIDc5ODY5LCA3OTg3NywgNzk4ODUsIAotICAgIDc5ODk0LCA3OTkwMiwgNzk5MTIsIDc5OTIwLCA3OTkyOCwgNzk5MzYsIDc5OTQ1LCA3OTk1MywgNzk5NjMsIDc5OTcxLCAKLSAgICA3OTk3OSwgNzk5ODcsIDc5OTk3LCA4MDAwNSwgODAwMTIsIDgwMDE5LCA4MDAyNiwgODAwMzMsIDgwMDQxLCA4MDA0OSwgCi0gICAgODAwNTcsIDgwMDY1LCA4MDA3MywgODAwODIsIDgwMDkwLCA4MDA5OCwgODAxMDYsIDgwMTE0LCA4MDEyMiwgODAxMzEsIAotICAgIDgwMTM5LCA4MDE0NywgODAxNTUsIDgwMTYzLCA4MDE3MSwgODAxNzksIDgwMTg3LCA4MDE5NSwgODAyMDMsIDgwMjExLCAKLSAgICA4MDIyMCwgODAyMjgsIDgwMjM4LCA4MDI0NiwgODAyNTQsIDgwMjYyLCA4MDI3MiwgODAyODAsIDgwMjg4LCA4MDI5NiwgCi0gICAgODAzMDQsIDgwMzEzLCA4MDMyMiwgODAzMzAsIDgwMzQwLCA4MDM0OCwgODAzNTYsIDgwMzY0LCA4MDM3MywgODAzODEsIAotICAgIDgwMzkxLCA4MDM5OSwgODA0MDYsIDgwNDEzLCA4MDQyMSwgODA0MjgsIDgwNDM3LCA4MDQ0NCwgODA0NTIsIDgwNDYwLCAKLSAgICA4MDQ2OSwgODA0NzcsIDgwNDg3LCA4MDQ5NSwgODA1MDMsIDgwNTExLCA4MDUyMSwgODA1MjksIDgwNTM2LCA4MDU0MywgCi0gICAgODA1NTEsIDgwNTU4LCA4MDU2NywgODA1NzQsIDgwNTg0LCA4MDU5NCwgODA2MDUsIDgwNjE0LCA4MDYyMywgODA2MzIsIAotICAgIDgwNjQxLCA4MDY1MCwgODA2NjAsIDgwNjcxLCA4MDY4MiwgODA2OTIsIDgwNzAzLCA4MDcxNSwgODA3MjUsIDgwNzM0LCAKLSAgICA4MDc0MywgODA3NTEsIDgwNzYwLCA4MDc3MCwgODA3NzgsIDgwNzg3LCA4MDc5NiwgODA4MDQsIDgwODEzLCA4MDgyMywgCi0gICAgODA4MzEsIDgwODQwLCA4MDg0OSwgODA4NTcsIDgwODY2LCA4MDg3NiwgODA4ODQsIDgwODk0LCA4MDkwMiwgODA5MTIsIAotICAgIDgwOTIwLCA4MDkyOCwgODA5MzcsIDgwOTQ1LCA4MDk1NSwgODA5NjMsIDgwOTcxLCA4MDk4MSwgODA5ODksIDgwOTk2LCAKLSAgICA4MTAwMywgODEwMTIsIDgxMDIxLCA4MTAyOSwgODEwMzgsIDgxMDQ4LCA4MTA1NiwgODEwNjcsIDgxMDc1LCA4MTA4MywgCi0gICAgODEwOTAsIDgxMDk4LCA4MTEwNywgODExMTQsIDgxMTI0LCA4MTEzNCwgODExNDUsIDgxMTU1LCA4MTE2NiwgODExNzQsIAotICAgIDgxMTgyLCA4MTE5MSwgODExOTksIDgxMjA4LCA4MTIxNiwgODEyMjQsIDgxMjMzLCA4MTI0MSwgODEyNTAsIDgxMjU4LCAKLSAgICA4MTI2NSwgODEyNzIsIDgxMjc5LCA4MTI4NiwgODEyOTQsIDgxMzAyLCA4MTMxMCwgODEzMTgsIDgxMzI3LCA4MTMzNSwgCi0gICAgODEzNDMsIDgxMzUyLCA4MTM2MCwgODEzNjgsIDgxMzc2LCA4MTM4NSwgODEzOTMsIDgxNDAxLCA4MTQwOSwgODE0MTcsIAotICAgIDgxNDI1LCA4MTQzMywgODE0NDEsIDgxNDQ5LCA4MTQ1NywgODE0NjYsIDgxNDc0LCA4MTQ4MiwgODE0OTAsIDgxNDk4LCAKLSAgICA4MTUwNiwgODE1MTUsIDgxNTI0LCA4MTUzMiwgODE1NDAsIDgxNTQ4LCA4MTU1NywgODE1NjUsIDgxNTc0LCA4MTU4MSwgCi0gICAgODE1ODgsIDgxNTk2LCA4MTYwMywgODE2MTEsIDgxNjE5LCA4MTYyOCwgODE2MzYsIDgxNjQ1LCA4MTY1MywgODE2NjEsIAotICAgIDgxNjcxLCA4MTY3OCwgODE2ODUsIDgxNjkzLCA4MTcwMCwgODE3MDgsIDgxNzE4LCA4MTcyOSwgODE3MzcsIDgxNzQ2LCAKLSAgICA4MTc1NCwgODE3NjMsIDgxNzcxLCA4MTc4MCwgODE3ODgsIDgxNzk3LCA4MTgwNSwgODE4MTQsIDgxODIzLCA4MTgzMSwgCi0gICAgODE4MzksIDgxODQ3LCA4MTg1NiwgODE4NjMsIDgxODcxLCA4MTg4MCwgODE4ODksIDgxODk4LCA4MTkwOCwgODE5MTYsIAotICAgIDgxOTI2LCA4MTkzNCwgODE5NDQsIDgxOTUyLCA4MTk2MiwgODE5NzAsIDgxOTgwLCA4MTk4OCwgODE5OTcsIDgyMDA0LCAKLSAgICA4MjAxMywgODIwMjAsIDgyMDMwLCA4MjAzOCwgODIwNDgsIDgyMDU2LCA4MjA2NiwgODIwNzQsIDgyMDgyLCA4MjA5MCwgCi0gICAgODIwOTksIDgyMTA3LCA4MjExNiwgODIxMjUsIDgyMTM0LCA4MjE0MywgODIxNTMsIDgyMTYxLCA4MjE3MSwgODIxNzksIAotICAgIDgyMTg5LCA4MjE5NywgODIyMDcsIDgyMjE1LCA4MjIyNSwgODIyMzMsIDgyMjQyLCA4MjI0OSwgODIyNTgsIDgyMjY1LCAKLSAgICA4MjI3NSwgODIyODMsIDgyMjkzLCA4MjMwMSwgODIzMTEsIDgyMzE5LCA4MjMyNywgODIzMzUsIDgyMzQ0LCA4MjM1MiwgCi0gICAgODIzNjEsIDgyMzcwLCA4MjM3OSwgODIzODgsIDgyMzk2LCA4MjQwNCwgODI0MTMsIDgyNDIxLCA4MjQzMCwgODI0MzksIAotICAgIDgyNDQ3LCA4MjQ1NSwgODI0NjMsIDgyNDcyLCA4MjQ4MCwgODI0ODgsIDgyNDk3LCA4MjUwNSwgODI1MTMsIDgyNTIxLCAKLSAgICA4MjUyOSwgODI1MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyNTM5LCAKLSAgICA4MjU0OSwgODI1NTksIDgyNTY5LCA4MjU3OSwgODI1OTAsIDgyNjAwLCA4MjYxMCwgODI2MjEsIDgyNjMwLCA4MjYzOSwgCi0gICAgODI2NDgsIDgyNjU5LCA4MjY2OSwgODI2NzksIDgyNjkxLCA4MjcwMSwgODI3MTEsIDgyNzIxLCA4MjczMSwgODI3NDEsIAotICAgIDgyNzUxLCA4Mjc2MSwgODI3NzEsIDgyNzgxLCA4Mjc5MSwgODI4MDEsIDgyODEyLCA4MjgyMywgODI4MzMsIDgyODQzLCAKLSAgICA4Mjg1NSwgODI4NjYsIDgyODc3LCA4Mjg4NywgODI4OTcsIDgyOTA3LCA4MjkxNywgODI5MjcsIDgyOTM3LCA4Mjk0NywgCi0gICAgODI5NTksIDgyOTY5LCA4Mjk3OSwgODI5OTEsIDgzMDAyLCA4MzAxMywgODMwMjMsIDgzMDMzLCA4MzA0MywgODMwNTMsIAotICAgIDgzMDY1LCA4MzA3NSwgODMwODUsIDgzMDk2LCA4MzEwNywgODMxMTcsIDgzMTI3LCA4MzEzNiwgODMxNDUsIDgzMTU0LCAKLSAgICA4MzE2MywgODMxNzIsIDgzMTgyLCAwLCAwLCA4MzE5MiwgODMyMDIsIDgzMjEyLCA4MzIyMiwgODMyMzIsIDgzMjQ0LCAKLSAgICA4MzI1NCwgODMyNjQsIDgzMjc2LCA4MzI4NiwgODMyOTgsIDgzMzA3LCA4MzMxNiwgODMzMjcsIDgzMzM3LCA4MzM0OSwgCi0gICAgODMzNjAsIDgzMzczLCA4MzM4MywgODMzOTUsIDgzNDA0LCA4MzQxNSwgODM0MjYsIDgzNDM5LCA4MzQ0OSwgODM0NTksIAotICAgIDgzNDY5LCA4MzQ3OSwgODM0ODksIDgzNDk4LCA4MzUwNywgODM1MTYsIDgzNTI1LCA4MzUzNSwgODM1NDUsIDgzNTU1LCAKLSAgICA4MzU2NSwgODM1NzUsIDgzNTg1LCA4MzU5NSwgODM2MDUsIDgzNjE1LCA4MzYyNSwgODM2MzUsIDgzNjQ1LCA4MzY1NCwgCi0gICAgODM2NjMsIDgzNjcyLCA4MzY4MiwgODM2OTIsIDgzNzAyLCA4MzcxMiwgODM3MjIsIDgzNzMzLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Mzc0MywgODM3NTgsIDgzNzczLCA4Mzc3OSwgODM3ODUsIDgzNzkxLCAKLSAgICA4Mzc5NywgODM4MDMsIDgzODA5LCA4MzgxNSwgODM4MjEsIDgzODI5LCA4MzgzMywgODM4MzYsIDAsIDAsIDgzODQ0LCAKLSAgICA4Mzg0NywgODM4NTAsIDgzODUzLCA4Mzg1NiwgODM4NTksIDgzODYyLCA4Mzg2NSwgODM4NjgsIDgzODcxLCA4Mzg3NCwgCi0gICAgODM4NzcsIDgzODgwLCA4Mzg4MywgODM4ODYsIDgzODg5LCA4Mzg5MiwgODM5MDAsIDgzOTA5LCA4MzkyMCwgODM5MjgsIAotICAgIDgzOTM2LCA4Mzk0NSwgODM5NTQsIDgzOTY1LCA4Mzk3NywgMCwgMCwgMCwgMCwgMCwgMCwgODM5ODYsIDgzOTkxLCA4Mzk5NiwgCi0gICAgODQwMDMsIDg0MDEwLCA4NDAxNiwgODQwMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0MDI3LCA4NDAzNywgCi0gICAgODQwNDcsIDg0MDU3LCA4NDA2NiwgODQwNzcsIDg0MDg2LCA4NDA5NSwgODQxMDUsIDg0MTE1LCA4NDEyNywgODQxMzksIAotICAgIDg0MTUwLCA4NDE2MSwgODQxNzIsIDg0MTgzLCA4NDE5MywgODQyMDMsIDg0MjEzLCA4NDIyMywgODQyMzQsIDg0MjQ1LCAKLSAgICA4NDI0OSwgODQyNTQsIDg0MjYzLCA4NDI3MiwgODQyNzYsIDg0MjgwLCA4NDI4NCwgODQyODksIDg0Mjk0LCA4NDI5OSwgCi0gICAgODQzMDQsIDg0MzA3LCA4NDMxMSwgMCwgODQzMTYsIDg0MzE5LCA4NDMyMiwgODQzMjYsIDg0MzMwLCA4NDMzNSwgODQzMzksIAotICAgIDg0MzQzLCA4NDM0OCwgODQzNTMsIDg0MzYwLCA4NDM2NywgODQzNzAsIDg0MzczLCA4NDM3NiwgODQzNzksIDg0MzgyLCAKLSAgICA4NDM4NiwgODQzOTAsIDAsIDg0Mzk0LCA4NDM5OSwgODQ0MDMsIDg0NDA3LCAwLCAwLCAwLCAwLCA4NDQxMiwgODQ0MTcsIAotICAgIDg0NDI0LCA4NDQyOSwgODQ0MzQsIDAsIDg0NDM5LCA4NDQ0NCwgODQ0NDksIDg0NDU0LCA4NDQ1OSwgODQ0NjQsIDg0NDY5LCAKLSAgICA4NDQ3NCwgODQ0NzksIDg0NDg0LCA4NDQ4OSwgODQ0OTQsIDg0NTAzLCA4NDUxMiwgODQ1MjAsIDg0NTI4LCA4NDUzNywgCi0gICAgODQ1NDYsIDg0NTU1LCA4NDU2NCwgODQ1NzIsIDg0NTgwLCA4NDU4OCwgODQ1OTYsIDg0NjAxLCA4NDYwNiwgODQ2MTIsIAotICAgIDg0NjE4LCA4NDYyNCwgODQ2MzAsIDg0NjM4LCA4NDY0NiwgODQ2NTIsIDg0NjU4LCA4NDY2NCwgODQ2NzAsIDg0Njc2LCAKLSAgICA4NDY4MiwgODQ2ODgsIDg0Njk0LCA4NDY5OSwgODQ3MDQsIDg0NzA5LCA4NDcxNCwgODQ3MTksIDg0NzI0LCA4NDcyOSwgCi0gICAgODQ3MzQsIDg0NzQwLCA4NDc0NiwgODQ3NTIsIDg0NzU4LCA4NDc2NCwgODQ3NzAsIDg0Nzc2LCA4NDc4MiwgODQ3ODgsIAotICAgIDg0Nzk0LCA4NDgwMCwgODQ4MDYsIDg0ODEyLCA4NDgxOCwgODQ4MjQsIDg0ODMwLCA4NDgzNiwgODQ4NDIsIDg0ODQ4LCAKLSAgICA4NDg1NCwgODQ4NjAsIDg0ODY2LCA4NDg3MiwgODQ4NzgsIDg0ODg0LCA4NDg5MCwgODQ4OTYsIDg0OTAyLCA4NDkwOCwgCi0gICAgODQ5MTQsIDg0OTIwLCA4NDkyNiwgODQ5MzIsIDg0OTM4LCA4NDk0NCwgODQ5NTAsIDg0OTU2LCA4NDk2MiwgODQ5NjgsIAotICAgIDg0OTc0LCA4NDk4MCwgODQ5ODYsIDg0OTkyLCA4NDk5OCwgODUwMDQsIDg1MDEwLCA4NTAxNiwgODUwMjIsIDg1MDI4LCAKLSAgICA4NTAzNCwgODUwNDAsIDg1MDQ2LCA4NTA1MiwgODUwNTgsIDg1MDY0LCA4NTA3MCwgODUwNzYsIDg1MDgyLCA4NTA4OCwgCi0gICAgODUwOTQsIDg1MDk5LCA4NTEwNCwgODUxMDksIDg1MTE0LCA4NTEyMCwgODUxMjYsIDg1MTMyLCA4NTEzOCwgODUxNDQsIAotICAgIDg1MTUwLCA4NTE1NiwgODUxNjIsIDg1MTY4LCA4NTE3NCwgODUxODEsIDg1MTg4LCA4NTE5MywgODUxOTgsIDg1MjAzLCAKLSAgICA4NTIwOCwgODUyMjAsIDg1MjMyLCA4NTI0MywgODUyNTQsIDg1MjY2LCA4NTI3OCwgODUyODYsIDAsIDAsIDg1Mjk0LCAwLCAKLSAgICA4NTMwMiwgODUzMDYsIDg1MzEwLCA4NTMxMywgODUzMTcsIDg1MzIxLCA4NTMyNCwgODUzMjcsIDg1MzMxLCA4NTMzNSwgCi0gICAgODUzMzgsIDg1MzQxLCA4NTM0NCwgODUzNDcsIDg1MzUyLCA4NTM1NSwgODUzNTksIDg1MzYyLCA4NTM2NSwgODUzNjgsIAotICAgIDg1MzcxLCA4NTM3NCwgODUzNzcsIDg1MzgwLCA4NTM4MywgODUzODYsIDg1Mzg5LCA4NTM5MiwgODUzOTYsIDg1NDAwLCAKLSAgICA4NTQwNCwgODU0MDgsIDg1NDEzLCA4NTQxOCwgODU0MjQsIDg1NDMwLCA4NTQzNiwgODU0NDEsIDg1NDQ3LCA4NTQ1MywgCi0gICAgODU0NTksIDg1NDY0LCA4NTQ3MCwgODU0NzYsIDg1NDgxLCA4NTQ4NiwgODU0OTIsIDg1NDk3LCA4NTUwMywgODU1MDksIAotICAgIDg1NTE0LCA4NTUyMCwgODU1MjYsIDg1NTMxLCA4NTUzNywgODU1NDMsIDg1NTQ5LCA4NTU1NSwgODU1NjEsIDg1NTY1LCAKLSAgICA4NTU3MCwgODU1NzQsIDg1NTc5LCA4NTU4MywgODU1ODgsIDg1NTkzLCA4NTU5OSwgODU2MDUsIDg1NjExLCA4NTYxNiwgCi0gICAgODU2MjIsIDg1NjI4LCA4NTYzNCwgODU2MzksIDg1NjQ1LCA4NTY1MSwgODU2NTYsIDg1NjYxLCA4NTY2NywgODU2NzIsIAotICAgIDg1Njc4LCA4NTY4NCwgODU2ODksIDg1Njk1LCA4NTcwMSwgODU3MDYsIDg1NzEyLCA4NTcxOCwgODU3MjQsIDg1NzMwLCAKLSAgICA4NTczNiwgODU3NDEsIDg1NzQ1LCA4NTc1MCwgODU3NTIsIDg1NzU3LCA4NTc2MiwgODU3NjgsIDg1NzczLCA4NTc3OCwgCi0gICAgODU3ODIsIDg1Nzg4LCA4NTc5MywgODU3OTgsIDg1ODAzLCA4NTgwOCwgODU4MTMsIDg1ODE4LCA4NTgyMywgODU4MjksIAotICAgIDg1ODM1LCA4NTg0MSwgODU4NDksIDg1ODUzLCA4NTg1NywgODU4NjEsIDg1ODY1LCA4NTg2OSwgODU4NzMsIDg1ODc4LCAKLSAgICA4NTg4MywgODU4ODgsIDg1ODkzLCA4NTg5NywgODU5MDIsIDg1OTA3LCA4NTkxMiwgODU5MTcsIDg1OTIyLCA4NTkyNywgCi0gICAgODU5MzIsIDg1OTM3LCA4NTk0MSwgODU5NDUsIDg1OTUwLCA4NTk1NSwgODU5NjAsIDg1OTY1LCA4NTk2OSwgODU5NzQsIAotICAgIDg1OTc5LCA4NTk4NCwgODU5ODksIDg1OTkzLCA4NTk5OCwgODYwMDMsIDg2MDA4LCA4NjAxMywgODYwMTcsIDg2MDIyLCAKLSAgICA4NjAyNywgODYwMzEsIDg2MDM2LCA4NjA0MSwgODYwNDYsIDg2MDUxLCA4NjA1NiwgODYwNjEsIDg2MDY4LCA4NjA3NSwgCi0gICAgODYwNzksIDg2MDg0LCA4NjA4OSwgODYwOTQsIDg2MDk5LCA4NjEwNCwgODYxMDksIDg2MTE0LCA4NjExOSwgODYxMjQsIAotICAgIDg2MTI5LCA4NjEzNCwgODYxMzksIDg2MTQ0LCA4NjE0OSwgODYxNTQsIDg2MTU5LCA4NjE2NCwgODYxNjksIDg2MTc0LCAKLSAgICA4NjE3OSwgODYxODQsIDg2MTg5LCA4NjE5NCwgODYxOTksIDg2MjA0LCA4NjIwOSwgODYyMTQsIDg2MjE5LCA4NjIyNCwgMCwgCi0gICAgMCwgMCwgODYyMjksIDg2MjMzLCA4NjIzOCwgODYyNDIsIDg2MjQ3LCA4NjI1MiwgMCwgMCwgODYyNTYsIDg2MjYxLCAKLSAgICA4NjI2NiwgODYyNzAsIDg2Mjc1LCA4NjI4MCwgMCwgMCwgODYyODUsIDg2MjkwLCA4NjI5NCwgODYyOTksIDg2MzA0LCAKLSAgICA4NjMwOSwgMCwgMCwgODYzMTQsIDg2MzE5LCA4NjMyNCwgMCwgMCwgMCwgODYzMjgsIDg2MzMyLCA4NjMzNiwgODYzNDAsIAotICAgIDg2MzQzLCA4NjM0NywgODYzNTEsIDAsIDg2MzU1LCA4NjM2MSwgODYzNjQsIDg2MzY4LCA4NjM3MSwgODYzNzUsIDg2Mzc5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NjM4MywgODYzODksIDg2Mzk1LCA4NjQwMSwgODY0MDcsIDAsIDAsIAotICAgIDg2NDExLCA4NjQxNywgODY0MjMsIDg2NDI5LCA4NjQzNSwgODY0NDEsIDg2NDQ4LCA4NjQ1NSwgODY0NjIsIDg2NDY5LCAKLSAgICA4NjQ3NiwgODY0ODMsIDAsIDg2NDkwLCA4NjQ5NywgODY1MDQsIDg2NTEwLCA4NjUxNywgODY1MjQsIDg2NTMxLCA4NjUzOCwgCi0gICAgODY1NDQsIDg2NTUxLCA4NjU1OCwgODY1NjUsIDg2NTcyLCA4NjU3OCwgODY1ODUsIDg2NTkyLCA4NjU5OSwgODY2MDYsIAotICAgIDg2NjEyLCA4NjYxOSwgODY2MjYsIDg2NjMzLCA4NjY0MCwgODY2NDcsIDg2NjU0LCA4NjY2MSwgMCwgODY2NjgsIDg2Njc0LCAKLSAgICA4NjY4MSwgODY2ODgsIDg2Njk1LCA4NjcwMiwgODY3MDgsIDg2NzE1LCA4NjcyMiwgODY3MjksIDg2NzM2LCA4Njc0MywgCi0gICAgODY3NTAsIDg2NzU3LCA4Njc2MywgODY3NzAsIDg2Nzc3LCA4Njc4NCwgODY3OTEsIDAsIDg2Nzk4LCA4NjgwNSwgMCwgCi0gICAgODY4MTIsIDg2ODE5LCA4NjgyNiwgODY4MzMsIDg2ODQwLCA4Njg0NywgODY4NTQsIDg2ODYxLCA4Njg2OCwgODY4NzUsIAotICAgIDg2ODgyLCA4Njg4OSwgODY4OTYsIDg2OTAzLCA4NjkxMCwgMCwgMCwgODY5MTYsIDg2OTIxLCA4NjkyNiwgODY5MzEsIAotICAgIDg2OTM2LCA4Njk0MSwgODY5NDYsIDg2OTUxLCA4Njk1NiwgODY5NjEsIDg2OTY2LCA4Njk3MSwgODY5NzYsIDg2OTgxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Njk4NiwgODY5OTMsIDg3MDAwLCA4NzAwNywgODcwMTQsIDg3MDIxLCAKLSAgICA4NzAyOCwgODcwMzUsIDg3MDQyLCA4NzA0OSwgODcwNTYsIDg3MDYzLCA4NzA3MCwgODcwNzcsIDg3MDg0LCA4NzA5MSwgCi0gICAgODcwOTgsIDg3MTA1LCA4NzExMiwgODcxMTksIDg3MTI3LCA4NzEzNSwgODcxNDIsIDg3MTQ5LCA4NzE1NCwgODcxNjIsIAotICAgIDg3MTcwLCA4NzE3NywgODcxODQsIDg3MTg5LCA4NzE5NiwgODcyMDEsIDg3MjA2LCA4NzIxMywgODcyMTgsIDg3MjIzLCAKLSAgICA4NzIyOCwgODcyMzYsIDg3MjQxLCA4NzI0NiwgODcyNTMsIDg3MjU4LCA4NzI2MywgODcyNzAsIDg3Mjc3LCA4NzI4MiwgCi0gICAgODcyODcsIDg3MjkyLCA4NzI5NywgODczMDIsIDg3MzA3LCA4NzMxMiwgODczMTcsIDg3MzIyLCA4NzMyOSwgODczMzQsIAotICAgIDg3MzQxLCA4NzM0NiwgODczNTEsIDg3MzU2LCA4NzM2MSwgODczNjYsIDg3MzcxLCA4NzM3NiwgODczODEsIDg3Mzg2LCAKLSAgICA4NzM5MSwgODczOTYsIDg3NDAzLCA4NzQxMCwgODc0MTcsIDg3NDI0LCA4NzQzMCwgODc0MzUsIDg3NDQyLCA4NzQ0NywgCi0gICAgODc0NTIsIDg3NDYxLCA4NzQ2OCwgODc0NzcsIDg3NDg0LCA4NzQ4OSwgODc0OTQsIDg3NTAyLCA4NzUwNywgODc1MTIsIAotICAgIDg3NTE3LCA4NzUyMiwgODc1MjcsIDg3NTM0LCA4NzUzOSwgODc1NDQsIDg3NTQ5LCA4NzU1NCwgODc1NTksIDg3NTY2LCAKLSAgICA4NzU3MywgODc1ODAsIDg3NTg3LCA4NzU5NCwgODc2MDEsIDg3NjA4LCA4NzYxNSwgODc2MjIsIDg3NjI5LCA4NzYzNiwgCi0gICAgODc2NDMsIDg3NjUwLCA4NzY1NywgODc2NjQsIDg3NjcxLCA4NzY3OCwgODc2ODUsIDg3NjkyLCA4NzY5OSwgODc3MDYsIAotICAgIDg3NzEzLCA4NzcyMCwgODc3MjcsIDg3NzM0LCA4Nzc0MSwgODc3NDgsIDg3NzU1LCAwLCAwLCAwLCAwLCAwLCA4Nzc2MiwgCi0gICAgODc3NzAsIDg3Nzc4LCAwLCAwLCAwLCAwLCA4Nzc4MywgODc3ODcsIDg3NzkxLCA4Nzc5NSwgODc3OTksIDg3ODAzLCAKLSAgICA4NzgwNywgODc4MTEsIDg3ODE1LCA4NzgxOSwgODc4MjQsIDg3ODI5LCA4NzgzNCwgODc4MzksIDg3ODQ0LCA4Nzg0OSwgCi0gICAgODc4NTQsIDg3ODU5LCA4Nzg2NCwgODc4NzAsIDg3ODc2LCA4Nzg4MiwgODc4ODksIDg3ODk2LCA4NzkwMywgODc5MTAsIAotICAgIDg3OTE3LCA4NzkyNCwgODc5MzAsIDg3OTM2LCA4Nzk0MiwgODc5NDksIDg3OTU2LCA4Nzk2MywgODc5NzAsIDg3OTc3LCAKLSAgICA4Nzk4NCwgODc5OTEsIDg3OTk4LCA4ODAwNSwgODgwMTIsIDg4MDE5LCA4ODAyNiwgODgwMzMsIDg4MDQwLCAwLCAwLCAwLCAKLSAgICA4ODA0NywgODgwNTUsIDg4MDYzLCA4ODA3MSwgODgwNzksIDg4MDg3LCA4ODA5NywgODgxMDcsIDg4MTE1LCA4ODEyMywgCi0gICAgODgxMzEsIDg4MTM5LCA4ODE0NywgODgxNTMsIDg4MTYwLCA4ODE2OSwgODgxNzgsIDg4MTg3LCA4ODE5NiwgODgyMDUsIAotICAgIDg4MjE0LCA4ODIyNCwgODgyMzUsIDg4MjQ1LCA4ODI1NiwgODgyNjUsIDg4Mjc0LCA4ODI4MywgODgyOTMsIDg4MzA0LCAKLSAgICA4ODMxNCwgODgzMjUsIDg4MzM2LCA4ODM0NSwgODgzNTMsIDg4MzU5LCA4ODM2NSwgODgzNzEsIDg4Mzc3LCA4ODM4NSwgCi0gICAgODgzOTMsIDg4Mzk5LCA4ODQwNiwgODg0MTYsIDg4NDIzLCA4ODQzMCwgODg0MzcsIDg4NDQ0LCA4ODQ1MSwgODg0NjEsIAotICAgIDg4NDY4LCA4ODQ3NSwgODg0ODMsIDg4NDkxLCA4ODUwMCwgODg1MDksIDg4NTE4LCA4ODUyNywgODg1MzYsIDg4NTQ0LCAKLSAgICA4ODU1MywgODg1NjIsIDg4NTcxLCA4ODU3NSwgODg1ODIsIDg4NTg3LCA4ODU5MiwgODg1OTYsIDg4NjAwLCA4ODYwNCwgCi0gICAgODg2MDgsIDg4NjEzLCA4ODYxOCwgODg2MjQsIDg4NjMwLCA4ODYzNCwgODg2NDAsIDg4NjQ0LCA4ODY0OCwgODg2NTIsIAotICAgIDg4NjU2LCA4ODY2MCwgODg2NjQsIDg4NjcwLCAwLCAwLCAwLCAwLCAwLCA4ODY3NCwgODg2NzksIDg4Njg0LCA4ODY4OSwgCi0gICAgODg2OTQsIDg4NzAxLCA4ODcwNiwgODg3MTEsIDg4NzE2LCA4ODcyMSwgODg3MjYsIDg4NzMxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODczNiwgCi0gICAgODg3NDMsIDg4NzUyLCA4ODc2MSwgODg3NjgsIDg4Nzc1LCA4ODc4MiwgODg3ODksIDg4Nzk2LCA4ODgwMywgODg4MDksIAotICAgIDg4ODE2LCA4ODgyMywgODg4MzAsIDg4ODM3LCA4ODg0NCwgODg4NTEsIDg4ODU4LCA4ODg2NSwgODg4NzQsIDg4ODgxLCAKLSAgICA4ODg4OCwgODg4OTUsIDg4OTAyLCA4ODkwOSwgODg5MTYsIDg4OTIzLCA4ODkzMCwgODg5MzksIDg4OTQ2LCA4ODk1MywgCi0gICAgODg5NjAsIDg4OTY3LCA4ODk3NCwgODg5ODEsIDg4OTkwLCA4ODk5NywgODkwMDQsIDg5MDExLCA4OTAxOCwgODkwMjcsIAotICAgIDg5MDM0LCA4OTA0MSwgODkwNDgsIDg5MDU2LCA4OTA2NSwgMCwgMCwgODkwNzQsIDg5MDc4LCA4OTA4MiwgODkwODcsIAotICAgIDg5MDkyLCA4OTA5NywgODkxMDIsIDg5MTA2LCA4OTExMSwgODkxMTYsIDg5MTIxLCA4OTEyNiwgODkxMzEsIDg5MTM2LCAKLSAgICA4OTE0MCwgODkxNDQsIDg5MTQ5LCA4OTE1NCwgODkxNTksIDg5MTYzLCA4OTE2OCwgODkxNzMsIDg5MTc3LCA4OTE4MiwgCi0gICAgODkxODcsIDg5MTkyLCA4OTE5NywgODkyMDIsIDg5MjA3LCAwLCAwLCAwLCA4OTIxMiwgODkyMTYsIDg5MjIxLCA4OTIyNiwgCi0gICAgODkyMzAsIDg5MjM1LCA4OTIzOSwgODkyNDQsIDg5MjQ5LCA4OTI1NCwgODkyNTksIDg5MjYzLCA4OTI2NywgODkyNzIsIAotICAgIDg5Mjc3LCA4OTI4MiwgODkyODcsIDg5MjkyLCA4OTI5NywgODkzMDEsIDg5MzA2LCA4OTMxMSwgODkzMTYsIDg5MzIxLCAKLSAgICA4OTMyNiwgODkzMzEsIDg5MzM1LCA4OTMzOSwgODkzNDQsIDg5MzQ5LCA4OTM1NCwgODkzNTksIDg5MzY0LCA4OTM2OSwgCi0gICAgODkzNzQsIDg5Mzc5LCA4OTM4NCwgODkzODksIDg5Mzk0LCA4OTM5OSwgODk0MDQsIDg5NDA5LCA4OTQxNCwgODk0MTksIAotICAgIDg5NDI0LCA4OTQyOSwgODk0MzQsIDg5NDM5LCA4OTQ0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk0NDksIDg5NDUzLCA4OTQ1OCwgODk0NjMsIDg5NDY4LCA4OTQ3MiwgCi0gICAgODk0NzcsIDg5NDgyLCA4OTQ4NywgODk0OTIsIDg5NDk2LCA4OTUwMCwgODk1MDUsIDg5NTEwLCA4OTUxNSwgODk1MjAsIAotICAgIDg5NTI0LCA4OTUyOSwgODk1MzQsIDg5NTM5LCA4OTU0NCwgODk1NDksIDg5NTU0LCA4OTU1OCwgODk1NjMsIDg5NTY4LCAKLSAgICA4OTU3MywgODk1NzgsIDg5NTgzLCA4OTU4OCwgODk1OTMsIDAsIDg5NTk4LCA4OTYwMywgODk2MDgsIDg5NjE0LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTYyMCwgODk2MjUsIDg5NjMwLCA4OTYzNSwgODk2NDAsIDg5NjQ1LCAKLSAgICA4OTY1MCwgODk2NTUsIDg5NjYwLCA4OTY2NSwgODk2NzAsIDg5Njc1LCA4OTY4MCwgODk2ODUsIDg5NjkwLCA4OTY5NSwgCi0gICAgODk3MDAsIDg5NzA1LCA4OTcxMCwgODk3MTUsIDg5NzIwLCA4OTcyNSwgODk3MzAsIDg5NzM1LCA4OTc0MCwgODk3NDUsIAotICAgIDg5NzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTc1NywgODk3NjIsIDg5NzY3LCA4OTc3MiwgODk3NzcsIDg5NzgyLCA4OTc4NywgCi0gICAgODk3OTIsIDg5Nzk3LCA4OTgwMiwgODk4MDcsIDg5ODEyLCA4OTgxNywgODk4MjIsIDg5ODI3LCA4OTgzMiwgODk4MzcsIAotICAgIDg5ODQyLCA4OTg0NywgODk4NTIsIDg5ODU3LCA4OTg2MiwgODk4NjcsIDg5ODcyLCA4OTg3NywgODk4ODIsIDg5ODg3LCAKLSAgICA4OTg5MSwgODk4OTUsIDg5ODk5LCAwLCA4OTkwNCwgODk5MTAsIDg5OTE1LCA4OTkyMCwgODk5MjUsIDg5OTMwLCA4OTkzNiwgCi0gICAgODk5NDIsIDg5OTQ4LCA4OTk1NCwgODk5NjAsIDg5OTY2LCA4OTk3MiwgODk5NzgsIDg5OTg0LCA4OTk5MCwgODk5OTYsIAotICAgIDkwMDAyLCA5MDAwOCwgOTAwMTMsIDkwMDE5LCA5MDAyNSwgOTAwMzAsIDkwMDM2LCA5MDA0MSwgOTAwNDcsIDkwMDUzLCAKLSAgICA5MDA1OCwgOTAwNjQsIDkwMDcwLCA5MDA3NSwgOTAwODEsIDkwMDg3LCA5MDA5MiwgOTAwOTgsIDkwMTA0LCA5MDExMCwgMCwgCi0gICAgMCwgMCwgMCwgOTAxMTUsIDkwMTIxLCA5MDEyNywgOTAxMzMsIDkwMTM5LCA5MDE0NSwgOTAxNTEsIDkwMTU3LCA5MDE2MywgCi0gICAgOTAxNzAsIDkwMTc1LCA5MDE4MCwgOTAxODYsIDkwMTkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5MDE5OCwgOTAyMDMsIDkwMjA4LCA5MDIxMywgOTAyMTksIDkwMjI0LCA5MDIzMCwgOTAyMzYsIAotICAgIDkwMjQyLCA5MDI0OCwgOTAyNTUsIDkwMjYxLCA5MDI2OCwgOTAyNzMsIDkwMjc4LCA5MDI4MywgOTAyODgsIDkwMjkzLCAKLSAgICA5MDI5OCwgOTAzMDMsIDkwMzA4LCA5MDMxMywgOTAzMTgsIDkwMzIzLCA5MDMyOCwgOTAzMzMsIDkwMzM4LCA5MDM0MywgCi0gICAgOTAzNDgsIDkwMzUzLCA5MDM1OCwgOTAzNjMsIDkwMzY4LCA5MDM3MywgOTAzNzgsIDkwMzgzLCA5MDM4OCwgOTAzOTMsIAotICAgIDkwMzk4LCA5MDQwMywgOTA0MDgsIDkwNDEzLCA5MDQxOCwgOTA0MjMsIDkwNDI5LCA5MDQzNCwgOTA0NDAsIDkwNDQ2LCAKLSAgICA5MDQ1MiwgOTA0NTgsIDkwNDY1LCA5MDQ3MSwgOTA0NzgsIDkwNDgzLCA5MDQ4OCwgOTA0OTMsIDkwNDk4LCA5MDUwMywgCi0gICAgOTA1MDgsIDkwNTEzLCA5MDUxOCwgOTA1MjMsIDkwNTI4LCA5MDUzMywgOTA1MzgsIDkwNTQzLCA5MDU0OCwgOTA1NTMsIAotICAgIDkwNTU4LCA5MDU2MywgOTA1NjgsIDkwNTczLCA5MDU3OCwgOTA1ODMsIDkwNTg4LCA5MDU5MywgOTA1OTgsIDkwNjAzLCAKLSAgICA5MDYwOCwgOTA2MTMsIDkwNjE4LCA5MDYyMywgOTA2MjgsIDkwNjMzLCA5MDYzOCwgOTA2NDMsIDkwNjQ4LCA5MDY1MywgCi0gICAgOTA2NTgsIDkwNjYzLCA5MDY2OCwgOTA2NzMsIDkwNjc4LCA5MDY4MywgOTA2ODgsIDkwNjkzLCA5MDY5OCwgOTA3MDMsIAotICAgIDkwNzA4LCA5MDcxMywgOTA3MTgsIDkwNzIzLCA5MDcyOCwgOTA3MzMsIDkwNzM4LCA5MDc0MywgOTA3NDgsIDkwNzUzLCAKLSAgICA5MDc1OCwgOTA3NjMsIDkwNzY4LCA5MDc3MywgOTA3NzgsIDkwNzgzLCA5MDc4OCwgOTA3OTMsIDkwNzk4LCA5MDgwMywgCi0gICAgOTA4MDgsIDkwODEzLCA5MDgxOCwgOTA4MjMsIDkwODI4LCA5MDgzMywgOTA4MzgsIDkwODQzLCA5MDg0OCwgOTA4NTMsIAotICAgIDkwODU4LCA5MDg2MywgOTA4NjgsIDkwODczLCA5MDg3OCwgOTA4ODMsIDkwODg4LCA5MDg5MywgOTA4OTcsIDkwOTAxLCAKLSAgICA5MDkwNiwgOTA5MTEsIDkwOTE2LCA5MDkyMSwgOTA5MjYsIDkwOTMxLCA5MDkzNiwgOTA5NDEsIDkwOTQ2LCA5MDk1MSwgCi0gICAgOTA5NTYsIDkwOTYwLCA5MDk2NCwgOTA5NjgsIDkwOTcyLCA5MDk3NiwgOTA5ODAsIDkwOTg0LCA5MDk4OSwgOTA5OTQsIDAsIAotICAgIDAsIDkwOTk5LCA5MTAwNCwgOTEwMDgsIDkxMDEyLCA5MTAxNiwgOTEwMjAsIDkxMDI0LCA5MTAyOCwgOTEwMzIsIDkxMDM2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTA0MCwgOTEwNDQsIDkxMDQ4LCA5MTA1MiwgCi0gICAgOTEwNTYsIDkxMDYwLCAwLCAwLCA5MTA2NSwgMCwgOTEwNzAsIDkxMDc0LCA5MTA3OSwgOTEwODQsIDkxMDg5LCA5MTA5NCwgCi0gICAgOTEwOTksIDkxMTA0LCA5MTEwOSwgOTExMTQsIDkxMTE5LCA5MTEyMywgOTExMjgsIDkxMTMzLCA5MTEzOCwgOTExNDMsIAotICAgIDkxMTQ3LCA5MTE1MiwgOTExNTcsIDkxMTYyLCA5MTE2NywgOTExNzEsIDkxMTc2LCA5MTE4MSwgOTExODYsIDkxMTkxLCAKLSAgICA5MTE5NSwgOTEyMDAsIDkxMjA1LCA5MTIxMCwgOTEyMTUsIDkxMjE5LCA5MTIyNCwgOTEyMjksIDkxMjM0LCA5MTIzOSwgCi0gICAgOTEyNDQsIDkxMjQ5LCA5MTI1NCwgOTEyNTgsIDkxMjYzLCA5MTI2OCwgOTEyNzMsIDkxMjc4LCAwLCA5MTI4MywgOTEyODgsIAotICAgIDAsIDAsIDAsIDkxMjkzLCAwLCAwLCA5MTI5OCwgOTEzMDMsIDkxMzEwLCA5MTMxNywgOTEzMjQsIDkxMzMxLCA5MTMzOCwgCi0gICAgOTEzNDUsIDkxMzUyLCA5MTM1OSwgOTEzNjYsIDkxMzczLCA5MTM4MCwgOTEzODcsIDkxMzk0LCA5MTQwMSwgOTE0MDgsIAotICAgIDkxNDE1LCA5MTQyMiwgOTE0MjksIDkxNDM2LCA5MTQ0MywgOTE0NTAsIDAsIDkxNDU3LCA5MTQ2NCwgOTE0NzAsIDkxNDc2LCAKLSAgICA5MTQ4MiwgOTE0ODksIDkxNDk2LCA5MTUwNCwgOTE1MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNTIxLCA5MTUyNiwgCi0gICAgOTE1MzEsIDkxNTM2LCA5MTU0MSwgOTE1NDYsIDkxNTUxLCA5MTU1NiwgOTE1NjEsIDkxNTY2LCA5MTU3MSwgOTE1NzYsIAotICAgIDkxNTgxLCA5MTU4NiwgOTE1OTEsIDkxNTk2LCA5MTYwMSwgOTE2MDYsIDkxNjExLCA5MTYxNiwgOTE2MjEsIDkxNjI2LCAKLSAgICA5MTYzMSwgOTE2MzUsIDkxNjQwLCA5MTY0NSwgOTE2NTEsIDkxNjU1LCAwLCAwLCAwLCA5MTY1OSwgOTE2NjUsIDkxNjY5LCAKLSAgICA5MTY3NCwgOTE2NzksIDkxNjg0LCA5MTY4OCwgOTE2OTMsIDkxNjk3LCA5MTcwMiwgOTE3MDcsIDkxNzExLCA5MTcxNSwgCi0gICAgOTE3MjAsIDkxNzI0LCA5MTcyOCwgOTE3MzMsIDkxNzM4LCA5MTc0MiwgOTE3NDcsIDkxNzUyLCA5MTc1NywgOTE3NjIsIAotICAgIDkxNzY3LCA5MTc3MiwgOTE3NzcsIDkxNzgyLCAwLCAwLCAwLCAwLCAwLCA5MTc4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3OTIsIDkxNzk4LCA5MTgwNCwgOTE4MTAsIDkxODE2LCA5MTgyMiwgOTE4MjksIAotICAgIDkxODM2LCA5MTg0MywgOTE4NDksIDkxODU1LCA5MTg2MSwgOTE4NjgsIDkxODc1LCA5MTg4MiwgOTE4ODgsIDkxODk1LCAKLSAgICA5MTkwMiwgOTE5MDksIDkxOTE2LCA5MTkyMiwgOTE5MjksIDkxOTM2LCA5MTk0MiwgOTE5NDksIDkxOTU2LCA5MTk2MywgCi0gICAgOTE5NzAsIDkxOTc3LCA5MTk4MywgOTE5OTAsIDkxOTk3LCA5MjAwNCwgOTIwMTAsIDkyMDE2LCA5MjAyMiwgOTIwMjgsIAotICAgIDkyMDM0LCA5MjA0MSwgOTIwNDgsIDkyMDU0LCA5MjA2MCwgOTIwNjYsIDkyMDczLCA5MjA3OSwgOTIwODYsIDkyMDkzLCAKLSAgICA5MjEwMCwgOTIxMDYsIDkyMTE0LCA5MjEyMSwgOTIxMjcsIDkyMTM0LCA5MjE0MSwgOTIxNDgsIDkyMTU0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5MjE2MSwgOTIxNjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDkyMTc3LCA5MjE4MSwgOTIxODYsIDkyMTkxLCAwLCA5MjE5NywgOTIyMDIsIDAsIDAsIDAsIDAsIDAsIDkyMjA3LCA5MjIxMywgCi0gICAgOTIyMjAsIDkyMjI1LCA5MjIzMCwgOTIyMzQsIDkyMjM5LCA5MjI0NCwgMCwgOTIyNDksIDkyMjU0LCA5MjI1OSwgMCwgCi0gICAgOTIyNjQsIDkyMjY5LCA5MjI3NCwgOTIyNzksIDkyMjg0LCA5MjI4OSwgOTIyOTQsIDkyMjk5LCA5MjMwNCwgOTIzMDksIAotICAgIDkyMzE0LCA5MjMxOCwgOTIzMjIsIDkyMzI3LCA5MjMzMiwgOTIzMzcsIDkyMzQxLCA5MjM0NSwgOTIzNDksIDkyMzU0LCAKLSAgICA5MjM1OSwgOTIzNjQsIDkyMzY5LCA5MjM3MywgOTIzNzgsIDkyMzgyLCA5MjM4NywgMCwgMCwgMCwgMCwgOTIzOTIsIAotICAgIDkyMzk4LCA5MjQwMywgMCwgMCwgMCwgMCwgOTI0MDgsIDkyNDEyLCA5MjQxNiwgOTI0MjAsIDkyNDI0LCA5MjQyOCwgCi0gICAgOTI0MzMsIDkyNDM4LCA5MjQ0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI0NTAsIDkyNDU2LCA5MjQ2MywgOTI0NjksIAotICAgIDkyNDc2LCA5MjQ4MiwgOTI0ODgsIDkyNDk0LCA5MjUwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI1MDcsIDkyNTE1LCAKLSAgICA5MjUyMywgOTI1MzEsIDkyNTM5LCA5MjU0NywgOTI1NTUsIDkyNTYzLCA5MjU3MSwgOTI1NzksIDkyNTg3LCA5MjU5NSwgCi0gICAgOTI2MDMsIDkyNjExLCA5MjYxOSwgOTI2MjcsIDkyNjM1LCA5MjY0MywgOTI2NTEsIDkyNjU5LCA5MjY2NywgOTI2NzUsIAotICAgIDkyNjgzLCA5MjY5MSwgOTI2OTksIDkyNzA3LCA5MjcxNSwgOTI3MjMsIDkyNzMxLCA5MjczOSwgOTI3NDYsIDkyNzU0LCAKLSAgICA5Mjc2MiwgOTI3NjYsIDkyNzcxLCA5Mjc3NiwgOTI3ODEsIDkyNzg2LCA5Mjc5MSwgOTI3OTYsIDkyODAxLCA5MjgwNSwgCi0gICAgOTI4MTAsIDkyODE0LCA5MjgxOSwgOTI4MjMsIDkyODI4LCA5MjgzMiwgOTI4MzcsIDkyODQyLCA5Mjg0NywgOTI4NTIsIAotICAgIDkyODU3LCA5Mjg2MiwgOTI4NjcsIDkyODcyLCA5Mjg3NywgOTI4ODIsIDkyODg3LCA5Mjg5MiwgOTI4OTcsIDkyOTAyLCAKLSAgICA5MjkwNywgOTI5MTIsIDkyOTE3LCA5MjkyMiwgOTI5MjcsIDkyOTMyLCA5MjkzNywgOTI5NDIsIDkyOTQ3LCA5Mjk1MiwgCi0gICAgOTI5NTcsIDkyOTYyLCA5Mjk2NywgOTI5NzIsIDkyOTc3LCA5Mjk4MiwgOTI5ODcsIDkyOTkyLCA5Mjk5NywgOTMwMDIsIAotICAgIDkzMDA3LCA5MzAxMiwgOTMwMTcsIDkzMDIyLCAwLCAwLCAwLCA5MzAyNywgOTMwMzIsIDkzMDQxLCA5MzA0OSwgOTMwNTgsIAotICAgIDkzMDY3LCA5MzA3OCwgOTMwODksIDkzMDk2LCA5MzEwMywgOTMxMTAsIDkzMTE3LCA5MzEyNCwgOTMxMzEsIDkzMTM4LCAKLSAgICA5MzE0NSwgOTMxNTIsIDkzMTU5LCA5MzE2NiwgOTMxNzMsIDkzMTgwLCA5MzE4NywgOTMxOTQsIDkzMjAxLCA5MzIwOCwgCi0gICAgOTMyMTUsIDkzMjIyLCA5MzIyOSwgOTMyMzYsIDAsIDAsIDkzMjQzLCA5MzI0OSwgOTMyNTUsIDkzMjYxLCA5MzI2NywgCi0gICAgOTMyNzQsIDkzMjgxLCA5MzI4OSwgOTMyOTcsIDkzMzA0LCA5MzMxMSwgOTMzMTgsIDkzMzI1LCA5MzMzMiwgOTMzMzksIAotICAgIDkzMzQ2LCA5MzM1MywgOTMzNjAsIDkzMzY3LCA5MzM3NCwgOTMzODEsIDkzMzg4LCA5MzM5NSwgOTM0MDIsIDkzNDA5LCAKLSAgICA5MzQxNiwgOTM0MjMsIDAsIDAsIDAsIDAsIDAsIDkzNDMwLCA5MzQzNiwgOTM0NDIsIDkzNDQ4LCA5MzQ1NCwgOTM0NjEsIAotICAgIDkzNDY4LCA5MzQ3NiwgOTM0ODQsIDkzNDkwLCA5MzQ5NiwgOTM1MDMsIDkzNTA5LCA5MzUxNSwgOTM1MjEsIDkzNTI3LCAKLSAgICA5MzUzNCwgOTM1NDEsIDkzNTQ4LCA5MzU1NSwgOTM1NjIsIDkzNTY5LCA5MzU3NiwgOTM1ODMsIDkzNTkwLCA5MzU5NywgCi0gICAgOTM2MDQsIDkzNjExLCA5MzYxOCwgOTM2MjUsIDkzNjMyLCA5MzYzOSwgOTM2NDYsIDkzNjUzLCA5MzY2MCwgOTM2NjcsIAotICAgIDkzNjc0LCA5MzY4MSwgOTM2ODgsIDkzNjk1LCA5MzcwMiwgOTM3MDksIDkzNzE2LCA5MzcyMywgOTM3MzAsIDkzNzM3LCAKLSAgICA5Mzc0NCwgOTM3NTEsIDkzNzU4LCA5Mzc2NSwgOTM3NzIsIDkzNzc5LCA5Mzc4NiwgOTM3OTMsIDkzODAwLCA5MzgwNywgCi0gICAgOTM4MTQsIDkzODIxLCA5MzgyOCwgOTM4MzUsIDkzODQyLCA5Mzg0OSwgOTM4NTYsIDkzODYzLCA5Mzg3MCwgOTM4NzcsIAotICAgIDkzODg0LCA5Mzg5MSwgOTM4OTgsIDkzOTA1LCA5MzkxMiwgOTM5MTksIDkzOTI2LCA5MzkzMywgOTM5NDAsIDkzOTQ3LCAKLSAgICA5Mzk1NCwgOTM5NjEsIDkzOTY4LCA5Mzk3NSwgOTM5ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDk1Nzk1LCA5NTc5OSwgOTU4MDQsIDk1ODA5LCA5NTgxNCwgOTU4MTksIDk1ODI0LCA5NTgyOSwgOTU4MzQsIDk1ODM4LCAKKyAgICA5NTg0MywgOTU4NDgsIDk1ODUzLCA5NTg1OCwgOTU4NjIsIDk1ODY3LCA5NTg3MiwgOTU4NzcsIDk1ODgyLCA5NTg4NywgCisgICAgOTU4OTIsIDk1ODk3LCA5NTkwMiwgOTU5MDYsIDk1OTExLCA5NTkxNiwgOTU5MjEsIDk1OTI2LCA5NTkzMSwgOTU5MzYsIAorICAgIDk1OTQxLCA5NTk0NiwgOTU5NTAsIDk1OTU1LCA5NTk2MCwgOTU5NjUsIDk1OTcwLCA5NTk3NSwgOTU5ODAsIDk1OTg1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTk5MCwgOTU5OTcsIDk2MDA0LCA5NjAxMSwgOTYwMTgsIDk2MDI1LCA5NjAzMiwgCisgICAgOTYwMzksIDk2MDQ2LCA5NjA1MywgOTYwNjAsIDk2MDY3LCA5NjA3NCwgOTYwODEsIDk2MDg4LCA5NjA5NSwgOTYxMDIsIAorICAgIDk2MTA5LCA5NjExNiwgOTYxMjMsIDk2MTMwLCA5NjEzNywgOTYxNDQsIDk2MTUxLCA5NjE1OCwgOTYxNjUsIDk2MTcyLCAKKyAgICA5NjE3OSwgOTYxODYsIDk2MTkzLCA5NjIwMCwgOTYyMDcsIDk2MjE0LCA5NjIyMSwgOTYyMjgsIDk2MjM1LCA5NjI0MiwgCisgICAgOTYyNDksIDk2MjU2LCA5NjI2MywgOTYyNzAsIDk2Mjc3LCA5NjI4NCwgOTYyOTEsIDk2Mjk4LCA5NjMwNSwgOTYzMTIsIAorICAgIDk2MzE5LCA5NjMyNiwgOTYzMzMsIDk2MzQwLCA5NjM0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgOTYzNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzOTg5LCA5Mzk5MywgCi0gICAgOTM5OTcsIDk0MDAxLCA5NDAwNSwgOTQwMDksIDk0MDEzLCA5NDAxNywgOTQwMjEsIDk0MDI1LCA5NDAzMCwgOTQwMzUsIAotICAgIDk0MDQwLCA5NDA0NSwgOTQwNTAsIDk0MDU1LCA5NDA2MCwgOTQwNjUsIDk0MDcwLCA5NDA3NiwgOTQwODIsIDk0MDg4LCAKLSAgICA5NDA5NSwgOTQxMDIsIDk0MTA5LCA5NDExNiwgOTQxMjMsIDk0MTMwLCA5NDEzNywgOTQxNDQsIDk0MTUxLCAwLCA5NDE1OCwgCi0gICAgOTQxNjIsIDk0MTY2LCA5NDE3MCwgOTQxNzQsIDk0MTc4LCA5NDE4MSwgOTQxODUsIDk0MTg4LCA5NDE5MiwgOTQxOTUsIAotICAgIDk0MTk5LCA5NDIwMywgOTQyMDgsIDk0MjEyLCA5NDIxNywgOTQyMjAsIDk0MjI0LCA5NDIyNywgOTQyMzEsIDk0MjM0LCAKLSAgICA5NDIzOCwgOTQyNDIsIDk0MjQ2LCA5NDI1MCwgOTQyNTQsIDk0MjU4LCA5NDI2MiwgOTQyNjYsIDk0MjcwLCA5NDI3NCwgCi0gICAgOTQyNzgsIDk0MjgyLCA5NDI4NiwgOTQyOTAsIDk0Mjk0LCA5NDI5OCwgOTQzMDIsIDk0MzA2LCA5NDMwOSwgOTQzMTIsIAotICAgIDk0MzE2LCA5NDMyMCwgOTQzMjQsIDk0MzI3LCA5NDMzMCwgOTQzMzMsIDk0MzM3LCA5NDM0MSwgOTQzNDUsIDk0MzQ5LCAKLSAgICA5NDM1MiwgOTQzNTUsIDk0MzU5LCA5NDM2NSwgOTQzNzEsIDk0Mzc3LCA5NDM4MiwgOTQzODksIDk0MzkzLCA5NDM5OCwgCi0gICAgOTQ0MDIsIDk0NDA3LCA5NDQxMiwgOTQ0MTgsIDk0NDIzLCA5NDQyOSwgOTQ0MzMsIDk0NDM4LCA5NDQ0MiwgOTQ0NDcsIAotICAgIDk0NDUwLCA5NDQ1MywgOTQ0NTcsIDk0NDYyLCA5NDQ2OCwgOTQ0NzMsIDk0NDc5LCAwLCAwLCAwLCAwLCA5NDQ4NCwgCi0gICAgOTQ0ODcsIDk0NDkwLCA5NDQ5MywgOTQ0OTYsIDk0NDk5LCA5NDUwMiwgOTQ1MDUsIDk0NTA4LCA5NDUxMSwgOTQ1MTUsIAotICAgIDk0NTE5LCA5NDUyMywgOTQ1MjcsIDk0NTMxLCA5NDUzNSwgOTQ1MzksIDk0NTQzLCA5NDU0NywgOTQ1NTIsIDk0NTU3LCAKLSAgICA5NDU2MSwgOTQ1NjQsIDk0NTY3LCA5NDU3MCwgOTQ1NzMsIDk0NTc2LCA5NDU3OSwgOTQ1ODIsIDk0NTg1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDU4OCwgOTQ1OTMsIDk0NTk4LCA5NDYwMywgOTQ2MDcsIAotICAgIDk0NjEyLCA5NDYxNiwgOTQ2MjEsIDk0NjI1LCA5NDYzMCwgOTQ2MzQsIDk0NjM5LCA5NDY0MywgOTQ2NDgsIDk0NjUyLCAKLSAgICA5NDY1NywgOTQ2NjIsIDk0NjY3LCA5NDY3MiwgOTQ2NzcsIDk0NjgyLCA5NDY4NywgOTQ2OTIsIDk0Njk3LCA5NDcwMiwgCi0gICAgOTQ3MDcsIDk0NzEyLCA5NDcxNywgOTQ3MjIsIDk0NzI3LCA5NDczMiwgOTQ3MzcsIDk0NzQyLCA5NDc0NywgOTQ3NTIsIAotICAgIDk0NzU2LCA5NDc2MCwgOTQ3NjUsIDk0NzcwLCA5NDc3NSwgOTQ3NzksIDk0NzgzLCA5NDc4NywgOTQ3OTIsIDk0Nzk3LCAKLSAgICA5NDgwMiwgOTQ4MDcsIDk0ODExLCA5NDgxNSwgOTQ4MjEsIDk0ODI2LCA5NDgzMiwgOTQ4MzcsIDk0ODQzLCA5NDg0OCwgCi0gICAgOTQ4NTQsIDk0ODU5LCA5NDg2NSwgOTQ4NzAsIDk0ODc1LCA5NDg4MCwgOTQ4ODUsIDk0ODg5LCA5NDg5NCwgOTQ5MDAsIAotICAgIDk0OTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NDkwOSwgOTQ5MTYsIDk0OTIzLCAKLSAgICA5NDkzMCwgOTQ5MzcsIDk0OTQ0LCA5NDk1MSwgOTQ5NTgsIDk0OTY1LCA5NDk3MiwgOTQ5NzksIDk0OTg2LCA5NDk5MywgCi0gICAgOTUwMDAsIDk1MDA3LCA5NTAxNCwgOTUwMjEsIDk1MDI4LCA5NTAzNSwgOTUwNDIsIDk1MDQ5LCA5NTA1NiwgOTUwNjMsIAotICAgIDk1MDcwLCA5NTA3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTUwODQsIDk1MDkxLCA5NTA5NywgOTUxMDMsIDk1MTA5LCAKLSAgICA5NTExNSwgOTUxMjEsIDk1MTI3LCA5NTEzMywgOTUxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDk1MTQ1LCA5NTE1MCwgOTUxNTUsIAotICAgIDk1MTYwLCA5NTE2NSwgOTUxNjksIDk1MTczLCA5NTE3NywgOTUxODIsIDk1MTg3LCA5NTE5MiwgOTUxOTcsIDk1MjAyLCAKLSAgICA5NTIwNywgOTUyMTIsIDk1MjE3LCA5NTIyMiwgOTUyMjcsIDk1MjMyLCA5NTIzNywgOTUyNDIsIDk1MjQ3LCA5NTI1MiwgCi0gICAgOTUyNTcsIDk1MjYyLCA5NTI2NywgOTUyNzIsIDk1Mjc3LCA5NTI4MiwgOTUyODcsIDk1MjkyLCA5NTI5NywgOTUzMDIsIAotICAgIDk1MzA3LCA5NTMxMiwgOTUzMTcsIDk1MzIyLCA5NTMyNywgOTUzMzIsIDk1MzM3LCA5NTM0MiwgOTUzNDcsIDk1MzUzLCAKLSAgICA5NTM1OCwgOTUzNjQsIDk1MzY5LCA5NTM3NSwgOTUzODAsIDk1Mzg2LCA5NTM5MiwgOTUzOTYsIDk1NDAxLCA5NTQwNSwgMCwgCi0gICAgOTU0MDksIDk1NDE0LCA5NTQxOCwgOTU0MjIsIDk1NDI2LCA5NTQzMCwgOTU0MzQsIDk1NDM4LCA5NTQ0MiwgOTU0NDYsIAotICAgIDk1NDUwLCA5NTQ1NSwgOTU0NTksIDk1NDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTQ2OSwgCi0gICAgOTU0NzMsIDk1NDc3LCA5NTQ4MSwgOTU0ODQsIDk1NDg4LCA5NTQ5MSwgOTU0OTUsIDk1NDk4LCA5NTUwMiwgOTU1MDYsIAotICAgIDk1NTExLCA5NTUxNSwgOTU1MjAsIDk1NTIzLCA5NTUyNywgOTU1MzAsIDk1NTM0LCA5NTUzNywgOTU1NDEsIDk1NTQ1LCAKLSAgICA5NTU0OSwgOTU1NTMsIDk1NTU3LCA5NTU2MSwgOTU1NjUsIDk1NTY5LCA5NTU3MywgOTU1NzcsIDk1NTgxLCA5NTU4NSwgCi0gICAgOTU1ODksIDk1NTkzLCA5NTU5NywgOTU2MDEsIDk1NjA1LCA5NTYwOSwgOTU2MTIsIDk1NjE1LCA5NTYxOSwgOTU2MjMsIAotICAgIDk1NjI3LCA5NTYzMCwgOTU2MzMsIDk1NjM2LCA5NTY0MCwgOTU2NDQsIDk1NjQ4LCA5NTY1MiwgOTU2NTYsIDk1NjU5LCAKLSAgICA5NTY2MiwgOTU2NjcsIDk1NjcxLCA5NTY3NiwgOTU2ODAsIDk1Njg1LCA5NTY5MCwgOTU2OTYsIDk1NzAxLCA5NTcwNywgCi0gICAgOTU3MTEsIDk1NzE2LCA5NTcyMCwgOTU3MjUsIDk1NzI5LCA5NTczMywgOTU3MzcsIDk1NzQxLCA5NTc0NCwgOTU3NDcsIAotICAgIDk1NzUxLCA5NTc1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU3NTgsIDk1NzYyLCA5NTc2NSwgOTU3NjgsIDk1NzcxLCAKLSAgICA5NTc3NCwgOTU3NzcsIDk1NzgwLCA5NTc4MywgOTU3ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDk1Nzg5LCA5NTc5MywgOTU3OTgsIDk1ODAyLCA5NTgwNywgOTU4MTEsIDk1ODE2LCA5NTgyMCwgOTU4MjUsIDk1ODI5LCAKLSAgICA5NTgzNCwgOTU4MzgsIDk1ODQzLCA5NTg0OCwgOTU4NTMsIDk1ODU4LCA5NTg2MywgOTU4NjgsIDk1ODczLCA5NTg3OCwgCi0gICAgOTU4ODMsIDk1ODg4LCA5NTg5MywgOTU4OTgsIDk1OTAzLCA5NTkwOCwgOTU5MTMsIDk1OTE4LCA5NTkyMywgOTU5MjgsIAotICAgIDk1OTMyLCA5NTkzNiwgOTU5NDEsIDk1OTQ2LCA5NTk1MSwgOTU5NTUsIDk1OTU5LCA5NTk2MywgOTU5NjgsIDk1OTczLCAKLSAgICA5NTk3OCwgOTU5ODIsIDk1OTg2LCA5NTk5MSwgOTU5OTYsIDk2MDAxLCA5NjAwNywgOTYwMTIsIDk2MDE4LCA5NjAyMywgCi0gICAgOTYwMjksIDk2MDM0LCA5NjA0MCwgOTYwNDUsIDk2MDUxLCA5NjA1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwNjEsIAotICAgIDk2MDY2LCA5NjA3MCwgOTYwNzQsIDk2MDc4LCA5NjA4MiwgOTYwODYsIDk2MDkwLCA5NjA5NCwgOTYwOTgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDk2MTAyLCA5NjEwNSwgOTYxMTAsIDk2MTE2LCA5NjEyNCwgOTYxMjksIDk2MTM1LCA5NjE0MywgOTYxNDksIAotICAgIDk2MTU1LCA5NjE1OSwgOTYxNjMsIDk2MTcwLCA5NjE3OSwgOTYxODYsIDk2MTk1LCA5NjIwMSwgOTYyMTAsIDk2MjE3LCAKLSAgICA5NjIyNCwgOTYyMzEsIDk2MjQxLCA5NjI0NywgOTYyNTEsIDk2MjU4LCA5NjI2NywgOTYyNzcsIDk2Mjg0LCA5NjI5MSwgCi0gICAgOTYyOTUsIDk2Mjk5LCA5NjMwNiwgOTYzMTYsIDk2MzIwLCA5NjMyNywgOTYzMzQsIDk2MzQxLCA5NjM0NywgOTYzNTQsIAotICAgIDk2MzYxLCA5NjM2OCwgOTYzNzUsIDk2Mzc5LCA5NjM4MywgOTYzODcsIDk2Mzk0LCA5NjM5OCwgOTY0MDUsIDk2NDEyLCAKLSAgICA5NjQyNiwgOTY0MzUsIDk2NDM5LCA5NjQ0MywgOTY0NDcsIDk2NDU0LCA5NjQ1OCwgOTY0NjIsIDk2NDY2LCA5NjQ3NCwgCi0gICAgOTY0ODIsIDk2NTAxLCA5NjUxMSwgOTY1MzEsIDk2NTM1LCA5NjUzOSwgOTY1NDMsIDk2NTQ3LCA5NjU1MSwgOTY1NTUsIAotICAgIDk2NTU5LCA5NjU2NiwgOTY1NzAsIDk2NTczLCA5NjU3NywgOTY1ODEsIDk2NTg3LCA5NjU5NCwgOTY2MDMsIDk2NjA3LCAKLSAgICA5NjYxNiwgOTY2MjUsIDk2NjMzLCA5NjYzNywgOTY2NDQsIDk2NjQ4LCA5NjY1MiwgOTY2NTYsIDk2NjYwLCA5NjY3MSwgCi0gICAgOTY2ODAsIDk2Njg5LCA5NjY5OCwgOTY3MDcsIDk2NzE5LCA5NjcyOCwgOTY3MzcsIDk2NzQ2LCA5Njc1NCwgOTY3NjMsIAotICAgIDk2Nzc1LCA5Njc4NCwgOTY3OTMsIDk2ODAyLCA5NjgxNCwgOTY4MjMsIDk2ODMyLCA5Njg0NCwgOTY4NTMsIDk2ODYyLCAKLSAgICA5Njg3NCwgOTY4ODMsIDk2ODg3LCA5Njg5MSwgOTY4OTUsIDk2ODk5LCA5NjkwMywgOTY5MDcsIDk2OTExLCA5NjkxOCwgCi0gICAgOTY5MjIsIDk2OTI2LCA5NjkzNywgOTY5NDEsIDk2OTQ1LCA5Njk1MiwgOTY5NTgsIDk2OTY0LCA5Njk2OCwgOTY5NzUsIAotICAgIDk2OTc5LCA5Njk4MywgOTY5ODcsIDk2OTkxLCA5Njk5NSwgOTY5OTksIDk3MDA1LCA5NzAxMywgOTcwMTcsIDk3MDIxLCAKLSAgICA5NzAyNCwgOTcwMzAsIDk3MDQwLCA5NzA0NCwgOTcwNTYsIDk3MDYzLCA5NzA3MCwgOTcwNzcsIDk3MDg0LCA5NzA5MCwgCi0gICAgOTcwOTQsIDk3MDk4LCA5NzEwMiwgOTcxMDYsIDk3MTEzLCA5NzEyMiwgOTcxMjksIDk3MTM3LCA5NzE0NSwgOTcxNTEsIAotICAgIDk3MTU1LCA5NzE1OSwgOTcxNjMsIDk3MTY3LCA5NzE3MywgOTcxODIsIDk3MTk0LCA5NzIwMSwgOTcyMDgsIDk3MjE3LCAKLSAgICA5NzIyOCwgOTcyMzQsIDk3MjQzLCA5NzI1MiwgOTcyNTksIDk3MjY4LCA5NzI3NSwgOTcyODIsIDk3MjkyLCA5NzI5OSwgCi0gICAgOTczMDYsIDk3MzEzLCA5NzMyMCwgOTczMjQsIDk3MzMwLCA5NzMzNCwgOTczNDUsIDk3MzUzLCA5NzM2MiwgOTczNzQsIAotICAgIDk3MzgxLCA5NzM4OCwgOTczOTgsIDk3NDA1LCA5NzQxNCwgOTc0MjEsIDk3NDMwLCA5NzQzNywgOTc0NDQsIDk3NDU0LCAKLSAgICA5NzQ2MSwgOTc0NjgsIDk3NDc4LCA5NzQ4NSwgOTc0OTcsIDk3NTA2LCA5NzUxMywgOTc1MjAsIDk3NTI3LCA5NzUzNiwgCi0gICAgOTc1NDYsIDk3NTU5LCA5NzU2NiwgOTc1NzYsIDk3NTg2LCA5NzU5MywgOTc2MDIsIDk3NjE1LCA5NzYyMiwgOTc2MjksIAotICAgIDk3NjM2LCA5NzY0NiwgOTc2NTYsIDk3NjYzLCA5NzY3MywgOTc2ODAsIDk3Njg3LCA5NzY5NywgOTc3MDMsIDk3NzEwLCAKLSAgICA5NzcxNywgOTc3MjQsIDk3NzM0LCA5Nzc0MSwgOTc3NDgsIDk3NzU1LCA5Nzc2MSwgOTc3NjgsIDk3Nzc4LCA5Nzc4NSwgCi0gICAgOTc3ODksIDk3Nzk3LCA5NzgwMSwgOTc4MTMsIDk3ODE3LCA5NzgzMSwgOTc4MzUsIDk3ODM5LCA5Nzg0MywgOTc4NDcsIAotICAgIDk3ODUzLCA5Nzg2MCwgOTc4NjgsIDk3ODcyLCA5Nzg3NiwgOTc4ODAsIDk3ODg0LCA5Nzg5MSwgOTc4OTUsIDk3OTAxLCAKLSAgICA5NzkwNywgOTc5MTUsIDk3OTE5LCA5NzkyNiwgOTc5MzQsIDk3OTM4LCA5Nzk0MiwgOTc5NDgsIDk3OTUyLCA5Nzk2MSwgCi0gICAgOTc5NzAsIDk3OTc3LCA5Nzk4NywgOTc5OTMsIDk3OTk3LCA5ODAwMSwgOTgwMDksIDk4MDE2LCA5ODAyMywgOTgwMjksIAotICAgIDk4MDMzLCA5ODA0MSwgOTgwNDUsIDk4MDUyLCA5ODA2NCwgOTgwNzEsIDk4MDgxLCA5ODA4NywgOTgwOTEsIDk4MTAwLCAKLSAgICA5ODEwNywgOTgxMTYsIDk4MTIwLCA5ODEyNCwgOTgxMzEsIDk4MTM1LCA5ODEzOSwgOTgxNDMsIDk4MTQ3LCA5ODE1MCwgCi0gICAgOTgxNTYsIDk4MTYyLCA5ODE2NiwgOTgxNzAsIDk4MTc3LCA5ODE4NCwgOTgxOTEsIDk4MTk4LCA5ODIwNSwgOTgyMTIsIAotICAgIDk4MjE5LCA5ODIyNiwgOTgyMzIsIDk4MjM2LCA5ODI0MCwgOTgyNDcsIDk4MjU0LCA5ODI2MSwgOTgyNjgsIDk4Mjc1LCAKLSAgICA5ODI3OSwgOTgyODIsIDk4Mjg3LCA5ODI5MSwgOTgyOTUsIDk4MzA0LCA5ODMxMywgOTgzMTcsIDk4MzIxLCA5ODMyNywgCi0gICAgOTgzMzMsIDk4MzUwLCA5ODM1NiwgOTgzNjAsIDk4MzY5LCA5ODM3MywgOTgzNzcsIDk4Mzg0LCA5ODM5MiwgOTg0MDAsIAotICAgIDk4NDA2LCA5ODQxMCwgOTg0MTQsIDk4NDE4LCA5ODQyMiwgOTg0MjUsIDk4NDMxLCA5ODQzOCwgOTg0NDgsIDk4NDU1LCAKLSAgICA5ODQ2MiwgOTg0NjksIDk4NDc1LCA5ODQ4MiwgOTg0ODksIDk4NDk2LCA5ODUwMywgOTg1MTAsIDk4NTE5LCA5ODUyNiwgCi0gICAgOTg1MzgsIDk4NTQ1LCA5ODU1MiwgOTg1NjIsIDk4NTczLCA5ODU4MCwgOTg1ODcsIDk4NTk0LCA5ODYwMSwgOTg2MDgsIAotICAgIDk4NjE1LCA5ODYyMiwgOTg2MjksIDk4NjM2LCA5ODY0MywgOTg2NTMsIDk4NjYzLCA5ODY3MywgOTg2ODAsIDk4NjkwLCAKLSAgICA5ODY5NywgOTg3MDQsIDk4NzExLCA5ODcxOCwgOTg3MjQsIDk4NzMxLCA5ODczOCwgOTg3NDUsIDk4NzUyLCA5ODc1OSwgCi0gICAgOTg3NjYsIDk4NzczLCA5ODc4MCwgOTg3ODYsIDk4NzkzLCA5ODgwMCwgOTg4MDksIDk4ODE2LCA5ODgyMywgOTg4MjcsIAotICAgIDk4ODM1LCA5ODgzOSwgOTg4NDMsIDk4ODQ3LCA5ODg1MSwgOTg4NTUsIDk4ODYyLCA5ODg2NiwgOTg4NzUsIDk4ODc5LCAKLSAgICA5ODg4NiwgOTg4OTQsIDk4ODk4LCA5ODkwMiwgOTg5MDYsIDk4OTE5LCA5ODkzNSwgOTg5MzksIDk4OTQzLCA5ODk1MCwgCi0gICAgOTg5NTYsIDk4OTYzLCA5ODk2NywgOTg5NzEsIDk4OTc1LCA5ODk3OSwgOTg5ODMsIDk4OTkwLCA5ODk5NCwgOTkwMTIsIAotICAgIDk5MDE2LCA5OTAyMCwgOTkwMjcsIDk5MDMxLCA5OTAzNSwgOTkwNDEsIDk5MDQ1LCA5OTA0OSwgOTkwNTcsIDk5MDYxLCAKLSAgICA5OTA2NSwgOTkwNjksIDk5MDczLCA5OTA3OSwgOTkwOTAsIDk5MDk5LCA5OTEwOCwgOTkxMTUsIDk5MTIyLCA5OTEzMywgCi0gICAgOTkxNDAsIDk5MTQ3LCA5OTE1NCwgOTkxNjEsIDk5MTY4LCA5OTE3NSwgOTkxODIsIDk5MTkyLCA5OTE5OCwgOTkyMDUsIAotICAgIDk5MjE1LCA5OTIyNCwgOTkyMzEsIDk5MjQwLCA5OTI1MCwgOTkyNTcsIDk5MjY0LCA5OTI3MSwgOTkyNzgsIDk5MjkwLCAKLSAgICA5OTI5NywgOTkzMDQsIDk5MzExLCA5OTMxOCwgOTkzMjUsIDk5MzM1LCA5OTM0MiwgOTkzNDksIDk5MzU5LCA5OTM3MiwgCi0gICAgOTkzODQsIDk5MzkxLCA5OTQwMSwgOTk0MDgsIDk5NDE1LCA5OTQyMiwgOTk0MzYsIDk5NDQyLCA5OTQ1MCwgOTk0NjAsIAotICAgIDk5NDcwLCA5OTQ3NywgOTk0ODQsIDk5NDkwLCA5OTQ5NCwgOTk1MDEsIDk5NTExLCA5OTUxNywgOTk1MzAsIDk5NTM0LCAKLSAgICA5OTUzOCwgOTk1NDUsIDk5NTQ5LCA5OTU1NiwgOTk1NjYsIDk5NTcwLCA5OTU3NCwgOTk1NzgsIDk5NTgyLCA5OTU4NiwgCi0gICAgOTk1OTMsIDk5NTk3LCA5OTYwNCwgOTk2MTEsIDk5NjE4LCA5OTYyNywgOTk2MzYsIDk5NjQ2LCA5OTY1MywgOTk2NjAsIAotICAgIDk5NjY3LCA5OTY3NywgOTk2ODQsIDk5Njk0LCA5OTcwMSwgOTk3MTEsIDk5NzE4LCA5OTcyNSwgOTk3MzUsIDk5NzQ1LCAKLSAgICA5OTc1MiwgOTk3NTgsIDk5NzY2LCA5OTc3NCwgOTk3ODAsIDk5Nzg2LCA5OTc5MCwgOTk3OTQsIDk5ODAxLCA5OTgwOSwgCi0gICAgOTk4MTUsIDk5ODE5LCA5OTgyMywgOTk4MjcsIDk5ODM0LCA5OTg0NiwgOTk4NDksIDk5ODU2LCA5OTg2MiwgOTk4NjYsIAotICAgIDk5ODcwLCA5OTg3NCwgOTk4NzgsIDk5ODgyLCA5OTg4NiwgOTk4OTAsIDk5ODk0LCA5OTg5OCwgOTk5MDIsIDk5OTA5LCAKLSAgICA5OTkxMywgOTk5MTksIDk5OTIzLCA5OTkyNywgOTk5MzEsIDk5OTM3LCA5OTk0NCwgOTk5NTEsIDk5OTU4LCA5OTk2OSwgCi0gICAgOTk5NzcsIDk5OTgxLCA5OTk4NywgOTk5OTYsIDEwMDAwMywgMTAwMDA5LCAxMDAwMTIsIDEwMDAxNiwgMTAwMDIwLCAKLSAgICAxMDAwMjYsIDEwMDAzNSwgMTAwMDQzLCAxMDAwNDcsIDEwMDA1MywgMTAwMDU3LCAxMDAwNjEsIDEwMDA2NSwgMTAwMDcxLCAKLSAgICAxMDAwNzgsIDEwMDA4NCwgMTAwMDg4LCAxMDAwOTQsIDEwMDA5OCwgMTAwMTAyLCAxMDAxMTEsIDEwMDEyMywgMTAwMTI3LCAKLSAgICAxMDAxMzQsIDEwMDE0MSwgMTAwMTUxLCAxMDAxNTgsIDEwMDE3MCwgMTAwMTc3LCAxMDAxODQsIDEwMDE5MSwgMTAwMjAyLCAKLSAgICAxMDAyMTIsIDEwMDIyNSwgMTAwMjM1LCAxMDAyNDIsIDEwMDI0NiwgMTAwMjUwLCAxMDAyNTQsIDEwMDI1OCwgMTAwMjY3LCAKLSAgICAxMDAyNzYsIDEwMDI4NSwgMTAwMzAyLCAxMDAzMTEsIDEwMDMxNywgMTAwMzI0LCAxMDAzMzIsIDEwMDM0NSwgMTAwMzQ5LCAKLSAgICAxMDAzNTgsIDEwMDM2NywgMTAwMzc2LCAxMDAzODUsIDEwMDM5NiwgMTAwNDA1LCAxMDA0MTQsIDEwMDQyMywgMTAwNDMyLCAKLSAgICAxMDA0NDEsIDEwMDQ1MCwgMTAwNDYwLCAxMDA0NjMsIDEwMDQ2NywgMTAwNDcxLCAxMDA0NzUsIDEwMDQ3OSwgMTAwNDgzLCAKLSAgICAxMDA0ODksIDEwMDQ5NiwgMTAwNTAzLCAxMDA1MTAsIDEwMDUxNiwgMTAwNTIyLCAxMDA1MjksIDEwMDUzNSwgMTAwNTQyLCAKLSAgICAxMDA1NTAsIDEwMDU1NCwgMTAwNTYxLCAxMDA1NjgsIDEwMDU3NSwgMTAwNTgzLCAxMDA1ODYsIDEwMDU5MCwgMTAwNTk0LCAKLSAgICAxMDA1OTgsIDEwMDYwMSwgMTAwNjA3LCAxMDA2MTEsIDEwMDYxNywgMTAwNjI0LCAxMDA2MzEsIDEwMDYzNywgMTAwNjQ0LCAKLSAgICAxMDA2NTEsIDEwMDY1OCwgMTAwNjY1LCAxMDA2NzIsIDEwMDY3OSwgMTAwNjg2LCAxMDA2OTMsIDEwMDcwMCwgMTAwNzA3LCAKLSAgICAxMDA3MTQsIDEwMDcyMSwgMTAwNzI4LCAxMDA3MzUsIDEwMDc0MSwgMTAwNzQ1LCAxMDA3NTQsIDEwMDc1OCwgMTAwNzYyLCAKLSAgICAxMDA3NjYsIDEwMDc3MCwgMTAwNzc2LCAxMDA3ODMsIDEwMDc5MCwgMTAwNzk3LCAxMDA4MDQsIDEwMDgxMSwgMTAwODE3LCAKLSAgICAxMDA4MjUsIDEwMDgyOSwgMTAwODMzLCAxMDA4MzcsIDEwMDg0MSwgMTAwODQ3LCAxMDA4NjQsIDEwMDg4MSwgMTAwODg1LCAKLSAgICAxMDA4ODksIDEwMDg5MywgMTAwODk3LCAxMDA5MDEsIDEwMDkwNSwgMTAwOTExLCAxMDA5MTgsIDEwMDkyMiwgMTAwOTI4LCAKLSAgICAxMDA5MzUsIDEwMDk0MiwgMTAwOTQ5LCAxMDA5NTYsIDEwMDk2MywgMTAwOTcyLCAxMDA5NzksIDEwMDk4NiwgMTAwOTkzLCAKLSAgICAxMDEwMDAsIDEwMTAwNCwgMTAxMDA4LCAxMDEwMTQsIDEwMTAyNiwgMTAxMDMwLCAxMDEwMzQsIDEwMTA0MywgMTAxMDQ3LCAKLSAgICAxMDEwNTEsIDEwMTA1NSwgMTAxMDYxLCAxMDEwNjUsIDEwMTA2OSwgMTAxMDc4LCAxMDEwODIsIDEwMTA4NiwgMTAxMDkwLCAKLSAgICAxMDEwOTcsIDEwMTEwMSwgMTAxMTA1LCAxMDExMDksIDEwMTExMywgMTAxMTE3LCAxMDExMjEsIDEwMTEyNSwgMTAxMTI5LCAKLSAgICAxMDExMzUsIDEwMTE0MiwgMTAxMTQ5LCAxMDExNTUsIDEwMTE1OSwgMTAxMTc2LCAxMDExODIsIDEwMTE4NiwgMTAxMTkyLCAKLSAgICAxMDExOTgsIDEwMTIwNCwgMTAxMjEwLCAxMDEyMTYsIDEwMTIyMiwgMTAxMjI2LCAxMDEyMzAsIDEwMTIzNCwgMTAxMjQwLCAKLSAgICAxMDEyNDQsIDEwMTI1MCwgMTAxMjU0LCAxMDEyNTgsIDEwMTI2NSwgMTAxMjcyLCAxMDEyODksIDEwMTI5MywgMTAxMjk3LCAKLSAgICAxMDEzMDEsIDEwMTMwNSwgMTAxMzA5LCAxMDEzMjEsIDEwMTMyNCwgMTAxMzI5LCAxMDEzMzQsIDEwMTM0OSwgMTAxMzU5LCAKLSAgICAxMDEzNzEsIDEwMTM3NSwgMTAxMzc5LCAxMDEzODMsIDEwMTM4OSwgMTAxMzk2LCAxMDE0MDMsIDEwMTQxMywgMTAxNDI1LCAKLSAgICAxMDE0MzEsIDEwMTQzNywgMTAxNDQ2LCAxMDE0NTAsIDEwMTQ1NCwgMTAxNDYxLCAxMDE0NzEsIDEwMTQ3OCwgMTAxNDg0LCAKLSAgICAxMDE0ODgsIDEwMTQ5MiwgMTAxNDk5LCAxMDE1MDUsIDEwMTUwOSwgMTAxNTE1LCAxMDE1MTksIDEwMTUyNywgMTAxNTMzLCAKLSAgICAxMDE1MzcsIDEwMTU0NSwgMTAxNTUzLCAxMDE1NjAsIDEwMTU2NiwgMTAxNTczLCAxMDE1ODAsIDEwMTU5MCwgMTAxNjAwLCAKLSAgICAxMDE2MDQsIDEwMTYwOCwgMTAxNjEyLCAxMDE2MTYsIDEwMTYyMiwgMTAxNjI5LCAxMDE2MzUsIDEwMTY0MiwgMTAxNjQ5LCAKLSAgICAxMDE2NTYsIDEwMTY2NSwgMTAxNjcyLCAxMDE2NzksIDEwMTY4NSwgMTAxNjkyLCAxMDE2OTksIDEwMTcwNiwgMTAxNzEzLCAKLSAgICAxMDE3MjAsIDEwMTcyNywgMTAxNzMzLCAxMDE3NDAsIDEwMTc0NywgMTAxNzU0LCAxMDE3NjMsIDEwMTc3MCwgMTAxNzc3LCAKLSAgICAxMDE3ODEsIDEwMTc4NywgMTAxNzkxLCAxMDE3OTcsIDEwMTgwNCwgMTAxODExLCAxMDE4MTgsIDEwMTgyMiwgMTAxODI2LCAKLSAgICAxMDE4MzAsIDEwMTgzNCwgMTAxODM4LCAxMDE4NDUsIDEwMTg0OSwgMTAxODUzLCAxMDE4NTksIDEwMTg2NywgMTAxODcxLCAKLSAgICAxMDE4NzUsIDEwMTg3OSwgMTAxODgzLCAxMDE4OTAsIDEwMTg5NCwgMTAxODk4LCAxMDE5MDYsIDEwMTkxMCwgMTAxOTE0LCAKLSAgICAxMDE5MTgsIDEwMTkyMiwgMTAxOTI4LCAxMDE5MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEwMTkzNiwgMTAxOTQyLCAxMDE5NDgsIDEwMTk1NSwgMTAxOTYyLCAxMDE5NjksIDEwMTk3NiwgMTAxOTgzLCAKLSAgICAxMDE5OTAsIDEwMTk5NiwgMTAyMDAzLCAxMDIwMTAsIDEwMjAxNywgMTAyMDI0LCAxMDIwMzEsIDEwMjAzOCwgMTAyMDQ0LCAKLSAgICAxMDIwNTAsIDEwMjA1NiwgMTAyMDYyLCAxMDIwNjgsIDEwMjA3NCwgMTAyMDgwLCAxMDIwODYsIDEwMjA5MiwgMTAyMDk5LCAKLSAgICAxMDIxMDYsIDEwMjExMywgMTAyMTIwLCAxMDIxMjcsIDEwMjEzNCwgMTAyMTQwLCAxMDIxNDYsIDEwMjE1MiwgMTAyMTU5LCAKLSAgICAxMDIxNjYsIDEwMjE3MiwgMTAyMTc4LCAxMDIxODcsIDEwMjE5NCwgMTAyMjAxLCAxMDIyMDgsIDEwMjIxNSwgMTAyMjIyLCAKLSAgICAxMDIyMjksIDEwMjIzNSwgMTAyMjQxLCAxMDIyNDcsIDEwMjI1NiwgMTAyMjYzLCAxMDIyNzAsIDEwMjI4MSwgMTAyMjkyLCAKLSAgICAxMDIyOTgsIDEwMjMwNCwgMTAyMzEwLCAxMDIzMTksIDEwMjMyNiwgMTAyMzMzLCAxMDIzNDMsIDEwMjM1MywgMTAyMzY0LCAKLSAgICAxMDIzNzUsIDEwMjM4NywgMTAyNDAwLCAxMDI0MTEsIDEwMjQyMiwgMTAyNDM0LCAxMDI0NDcsIDEwMjQ1OCwgMTAyNDY5LCAKLSAgICAxMDI0ODAsIDEwMjQ5MSwgMTAyNTAyLCAxMDI1MTQsIDEwMjUyMiwgMTAyNTMwLCAxMDI1MzksIDEwMjU0OCwgMTAyNTU3LCAKLSAgICAxMDI1NjMsIDEwMjU2OSwgMTAyNTc1LCAxMDI1ODIsIDEwMjU5MiwgMTAyNTk5LCAxMDI2MDksIDEwMjYxNCwgMTAyNjE5LCAKLSAgICAxMDI2MjUsIDEwMjYzMSwgMTAyNjM5LCAxMDI2NDcsIDEwMjY1NiwgMTAyNjY3LCAxMDI2NzgsIDEwMjY4NiwgMTAyNjk0LCAKLSAgICAxMDI3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjcxMiwgMTAyNzIzLCAxMDI3MzAsIAotICAgIDEwMjczOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyNzQ2LCAxMDI3NTAsIDEwMjc1NCwgCi0gICAgMTAyNzU4LCAxMDI3NjIsIDEwMjc2NiwgMTAyNzcwLCAxMDI3NzQsIDEwMjc3OCwgMTAyNzgyLCAxMDI3ODYsIDEwMjc5MCwgCi0gICAgMTAyNzk0LCAxMDI3OTgsIDEwMjgwMiwgMTAyODA2LCAxMDI4MTAsIDEwMjgxNCwgMTAyODE4LCAxMDI4MjIsIDEwMjgyNiwgCi0gICAgMTAyODMwLCAxMDI4MzQsIDEwMjgzOCwgMTAyODQyLCAxMDI4NDYsIDEwMjg1MCwgMTAyODU0LCAxMDI4NTgsIDEwMjg2MiwgCi0gICAgMTAyODY2LCAxMDI4NzAsIDEwMjg3NCwgMTAyODc4LCAxMDI4ODIsIDEwMjg4NiwgMTAyODkwLCAxMDI4OTQsIDEwMjg5OCwgCi0gICAgMTAyOTAyLCAxMDI5MDYsIDEwMjkxMCwgMTAyOTE0LCAxMDI5MTgsIDEwMjkyMiwgMTAyOTI2LCAxMDI5MzAsIDEwMjkzNCwgCi0gICAgMTAyOTM4LCAxMDI5NDIsIDEwMjk0NiwgMTAyOTUwLCAxMDI5NTQsIDEwMjk1OCwgMTAyOTYyLCAxMDI5NjYsIDEwMjk3MCwgCi0gICAgMTAyOTc0LCAxMDI5NzgsIDEwMjk4MiwgMTAyOTg2LCAxMDI5OTAsIDEwMjk5NCwgMTAyOTk4LCAxMDMwMDIsIDEwMzAwNiwgCi0gICAgMTAzMDEwLCAxMDMwMTQsIDEwMzAxOCwgMTAzMDIyLCAxMDMwMjYsIDEwMzAzMCwgMTAzMDM0LCAxMDMwMzgsIDEwMzA0MiwgCi0gICAgMTAzMDQ2LCAxMDMwNTAsIDEwMzA1NCwgMTAzMDU4LCAxMDMwNjIsIDEwMzA2NiwgMTAzMDcwLCAxMDMwNzQsIDEwMzA3OCwgCi0gICAgMTAzMDgyLCAxMDMwODYsIDEwMzA5MCwgMTAzMDk0LCAxMDMwOTgsIDEwMzEwMiwgMTAzMTA2LCAxMDMxMTAsIDEwMzExNCwgCi0gICAgMTAzMTE4LCAxMDMxMjIsIDEwMzEyNiwgMTAzMTMwLCAxMDMxMzQsIDEwMzEzOCwgMTAzMTQyLCAxMDMxNDYsIDEwMzE1MCwgCi0gICAgMTAzMTU0LCAxMDMxNTgsIDEwMzE2MiwgMTAzMTY2LCAxMDMxNzAsIDEwMzE3NCwgMTAzMTc4LCAxMDMxODIsIDEwMzE4NiwgCi0gICAgMTAzMTkwLCAxMDMxOTQsIDEwMzE5OCwgMTAzMjAyLCAxMDMyMDYsIDEwMzIxMCwgMTAzMjE0LCAxMDMyMTgsIDEwMzIyMiwgCi0gICAgMTAzMjI2LCAxMDMyMzAsIDEwMzIzNCwgMTAzMjM4LCAxMDMyNDIsIDEwMzI0NiwgMTAzMjUwLCAxMDMyNTQsIDEwMzI1OCwgCi0gICAgMTAzMjYyLCAxMDMyNjYsIDEwMzI3MCwgMTAzMjc0LCAxMDMyNzgsIDEwMzI4MiwgMTAzMjg2LCAxMDMyOTAsIDEwMzI5NCwgCi0gICAgMTAzMjk4LCAxMDMzMDIsIDEwMzMwNiwgMTAzMzEwLCAxMDMzMTQsIDEwMzMxOCwgMTAzMzIyLCAxMDMzMjYsIDEwMzMzMCwgCi0gICAgMTAzMzM0LCAxMDMzMzgsIDEwMzM0MiwgMTAzMzQ2LCAxMDMzNTAsIDEwMzM1NCwgMTAzMzU4LCAxMDMzNjIsIDEwMzM2NiwgCi0gICAgMTAzMzcwLCAxMDMzNzQsIDEwMzM3OCwgMTAzMzgyLCAxMDMzODYsIDEwMzM5MCwgMTAzMzk0LCAxMDMzOTgsIDEwMzQwMiwgCi0gICAgMTAzNDA2LCAxMDM0MTAsIDEwMzQxNCwgMTAzNDE4LCAxMDM0MjIsIDEwMzQyNiwgMTAzNDMwLCAxMDM0MzQsIDEwMzQzOCwgCi0gICAgMTAzNDQyLCAxMDM0NDYsIDEwMzQ1MCwgMTAzNDU0LCAxMDM0NTgsIDEwMzQ2MiwgMTAzNDY2LCAxMDM0NzAsIDEwMzQ3NCwgCi0gICAgMTAzNDc4LCAxMDM0ODIsIDEwMzQ4NiwgMTAzNDkwLCAxMDM0OTQsIDEwMzQ5OCwgMTAzNTAyLCAxMDM1MDYsIDEwMzUxMCwgCi0gICAgMTAzNTE0LCAxMDM1MTgsIDEwMzUyMiwgMTAzNTI2LCAxMDM1MzAsIDEwMzUzNCwgMTAzNTM4LCAxMDM1NDIsIDEwMzU0NiwgCi0gICAgMTAzNTUwLCAxMDM1NTQsIDEwMzU1OCwgMTAzNTYyLCAxMDM1NjYsIDEwMzU3MCwgMTAzNTc0LCAxMDM1NzgsIDEwMzU4MiwgCi0gICAgMTAzNTg2LCAxMDM1OTAsIDEwMzU5NCwgMTAzNTk4LCAxMDM2MDIsIDEwMzYwNiwgMTAzNjEwLCAxMDM2MTQsIDEwMzYxOCwgCi0gICAgMTAzNjIyLCAxMDM2MjYsIDEwMzYzMCwgMTAzNjM0LCAxMDM2MzgsIDEwMzY0MiwgMTAzNjQ2LCAxMDM2NTAsIDEwMzY1NCwgCi0gICAgMTAzNjU4LCAxMDM2NjIsIDEwMzY2NiwgMTAzNjcwLCAxMDM2NzQsIDEwMzY3OCwgMTAzNjgyLCAxMDM2ODYsIDEwMzY5MCwgCi0gICAgMTAzNjk0LCAxMDM2OTgsIDEwMzcwMiwgMTAzNzA2LCAxMDM3MTAsIDEwMzcxNCwgMTAzNzE4LCAxMDM3MjIsIDEwMzcyNiwgCi0gICAgMTAzNzMwLCAxMDM3MzQsIDEwMzczOCwgMTAzNzQyLCAxMDM3NDYsIDEwMzc1MCwgMTAzNzU0LCAxMDM3NTgsIDEwMzc2MiwgCi0gICAgMTAzNzY2LCAxMDM3NzAsIDEwMzc3NCwgMTAzNzc4LCAxMDM3ODIsIDEwMzc4NiwgMTAzNzkwLCAxMDM3OTQsIDEwMzc5OCwgCi0gICAgMTAzODAyLCAxMDM4MDYsIDEwMzgxMCwgMTAzODE0LCAxMDM4MTgsIDEwMzgyMiwgMTAzODI2LCAxMDM4MzAsIDEwMzgzNCwgCi0gICAgMTAzODM4LCAxMDM4NDIsIDEwMzg0NiwgMTAzODUwLCAxMDM4NTQsIDEwMzg1OCwgMTAzODYyLCAxMDM4NjYsIDEwMzg3MCwgCi0gICAgMTAzODc0LCAxMDM4NzgsIDEwMzg4MiwgMTAzODg2LCAxMDM4OTAsIDEwMzg5NCwgMTAzODk4LCAxMDM5MDIsIDEwMzkwNiwgCi0gICAgMTAzOTEwLCAxMDM5MTQsIDEwMzkxOCwgMTAzOTIyLCAxMDM5MjYsIDEwMzkzMCwgMTAzOTM0LCAxMDM5MzgsIDEwMzk0MiwgCi0gICAgMTAzOTQ2LCAxMDM5NTAsIDEwMzk1NCwgMTAzOTU4LCAxMDM5NjIsIDEwMzk2NiwgMTAzOTcwLCAxMDM5NzQsIDEwMzk3OCwgCi0gICAgMTAzOTgyLCAxMDM5ODYsIDEwMzk5MCwgMTAzOTk0LCAxMDM5OTgsIDEwNDAwMiwgMTA0MDA2LCAxMDQwMTAsIDEwNDAxNCwgCi0gICAgMTA0MDE4LCAxMDQwMjIsIDEwNDAyNiwgMTA0MDMwLCAxMDQwMzQsIDEwNDAzOCwgMTA0MDQyLCAxMDQwNDYsIDEwNDA1MCwgCi0gICAgMTA0MDU0LCAxMDQwNTgsIDEwNDA2MiwgMTA0MDY2LCAxMDQwNzAsIDEwNDA3NCwgMTA0MDc4LCAxMDQwODIsIDEwNDA4NiwgCi0gICAgMTA0MDkwLCAxMDQwOTQsIDEwNDA5OCwgMTA0MTAyLCAxMDQxMDYsIDEwNDExMCwgMTA0MTE0LCAxMDQxMTgsIDEwNDEyMiwgCi0gICAgMTA0MTI2LCAxMDQxMzAsIDEwNDEzNCwgMTA0MTM4LCAxMDQxNDIsIDEwNDE0NiwgMTA0MTUwLCAxMDQxNTQsIDEwNDE1OCwgCi0gICAgMTA0MTYyLCAxMDQxNjYsIDEwNDE3MCwgMTA0MTc0LCAxMDQxNzgsIDEwNDE4MiwgMTA0MTg2LCAxMDQxOTAsIDEwNDE5NCwgCi0gICAgMTA0MTk4LCAxMDQyMDIsIDEwNDIwNiwgMTA0MjEwLCAxMDQyMTQsIDEwNDIxOCwgMTA0MjIyLCAxMDQyMjYsIDEwNDIzMCwgCi0gICAgMTA0MjM0LCAxMDQyMzgsIDEwNDI0MiwgMTA0MjQ2LCAxMDQyNTAsIDEwNDI1NCwgMTA0MjU4LCAxMDQyNjIsIDEwNDI2NiwgCi0gICAgMTA0MjcwLCAxMDQyNzQsIDEwNDI3OCwgMTA0MjgyLCAxMDQyODYsIDEwNDI5MCwgMTA0Mjk0LCAxMDQyOTgsIDEwNDMwMiwgCi0gICAgMTA0MzA2LCAxMDQzMTAsIDEwNDMxNCwgMTA0MzE4LCAxMDQzMjIsIDEwNDMyNiwgMTA0MzMwLCAxMDQzMzQsIDEwNDMzOCwgCi0gICAgMTA0MzQyLCAxMDQzNDYsIDEwNDM1MCwgMTA0MzU0LCAxMDQzNTgsIDEwNDM2MiwgMTA0MzY2LCAxMDQzNzAsIDEwNDM3NCwgCi0gICAgMTA0Mzc4LCAxMDQzODIsIDEwNDM4NiwgMTA0MzkwLCAxMDQzOTQsIDEwNDM5OCwgMTA0NDAyLCAxMDQ0MDYsIDEwNDQxMCwgCi0gICAgMTA0NDE0LCAxMDQ0MTgsIDEwNDQyMiwgMTA0NDI2LCAxMDQ0MzAsIDEwNDQzNCwgMTA0NDM4LCAxMDQ0NDIsIDEwNDQ0NiwgCi0gICAgMTA0NDUwLCAxMDQ0NTQsIDEwNDQ1OCwgMTA0NDYyLCAxMDQ0NjYsIDEwNDQ3MCwgMTA0NDc0LCAxMDQ0NzgsIDEwNDQ4MiwgCi0gICAgMTA0NDg2LCAxMDQ0OTAsIDEwNDQ5NCwgMTA0NDk4LCAxMDQ1MDIsIDEwNDUwNiwgMTA0NTEwLCAxMDQ1MTQsIDEwNDUxOCwgCi0gICAgMTA0NTIyLCAxMDQ1MjYsIDEwNDUzMCwgMTA0NTM0LCAxMDQ1MzgsIDEwNDU0MiwgMTA0NTQ2LCAxMDQ1NTAsIDEwNDU1NCwgCi0gICAgMTA0NTU4LCAxMDQ1NjIsIDEwNDU2NiwgMTA0NTcwLCAxMDQ1NzQsIDEwNDU3OCwgMTA0NTgyLCAxMDQ1ODYsIDEwNDU5MCwgCi0gICAgMTA0NTk0LCAxMDQ1OTgsIDEwNDYwMiwgMTA0NjA2LCAxMDQ2MTAsIDEwNDYxNCwgMTA0NjE4LCAxMDQ2MjIsIDEwNDYyNiwgCi0gICAgMTA0NjMwLCAxMDQ2MzQsIDEwNDYzOCwgMTA0NjQyLCAxMDQ2NDYsIDEwNDY1MCwgMTA0NjU0LCAxMDQ2NTgsIDEwNDY2MiwgCi0gICAgMTA0NjY2LCAxMDQ2NzAsIDEwNDY3NCwgMTA0Njc4LCAxMDQ2ODIsIDEwNDY4NiwgMTA0NjkwLCAxMDQ2OTQsIDEwNDY5OCwgCi0gICAgMTA0NzAyLCAxMDQ3MDYsIDEwNDcxMCwgMTA0NzE0LCAxMDQ3MTgsIDEwNDcyMiwgMTA0NzI2LCAxMDQ3MzAsIDEwNDczNCwgCi0gICAgMTA0NzM4LCAxMDQ3NDIsIDEwNDc0NiwgMTA0NzUwLCAxMDQ3NTQsIDEwNDc1OCwgMTA0NzYyLCAxMDQ3NjYsIDEwNDc3MCwgCi0gICAgMTA0Nzc0LCAxMDQ3NzgsIDEwNDc4MiwgMTA0Nzg2LCAxMDQ3OTAsIDEwNDc5NCwgMTA0Nzk4LCAxMDQ4MDIsIDEwNDgwNiwgCi0gICAgMTA0ODEwLCAxMDQ4MTQsIDEwNDgxOCwgMTA0ODIyLCAxMDQ4MjYsIDEwNDgzMCwgMTA0ODM0LCAxMDQ4MzgsIDEwNDg0MiwgCi0gICAgMTA0ODQ2LCAxMDQ4NTAsIDEwNDg1NCwgMTA0ODU4LCAxMDQ4NjIsIDEwNDg2NiwgMTA0ODcwLCAxMDQ4NzQsIDEwNDg3OCwgCi0gICAgMTA0ODgyLCAxMDQ4ODYsIDEwNDg5MCwgMTA0ODk0LCAxMDQ4OTgsIDEwNDkwMiwgMTA0OTA2LCAxMDQ5MTAsIDEwNDkxNCwgCi0gICAgMTA0OTE4LCAxMDQ5MjIsIDEwNDkyNiwgMTA0OTMwLCAxMDQ5MzQsIDEwNDkzOCwgMTA0OTQyLCAxMDQ5NDYsIDEwNDk1MCwgCi0gICAgMTA0OTU0LCAxMDQ5NTgsIDEwNDk2MiwgMTA0OTY2LCAxMDQ5NzAsIDEwNDk3NCwgMTA0OTc4LCAxMDQ5ODIsIDEwNDk4NiwgCi0gICAgMTA0OTkwLCAxMDQ5OTQsIDEwNDk5OCwgMTA1MDAyLCAxMDUwMDYsIDEwNTAxMCwgMTA1MDE0LCAxMDUwMTgsIDEwNTAyMiwgCi0gICAgMTA1MDI2LCAxMDUwMzAsIDEwNTAzNCwgMTA1MDM4LCAxMDUwNDIsIDEwNTA0NiwgMTA1MDUwLCAxMDUwNTQsIDEwNTA1OCwgCi0gICAgMTA1MDYyLCAxMDUwNjYsIDEwNTA3MCwgMTA1MDc0LCAxMDUwNzgsIDEwNTA4MiwgMTA1MDg2LCAxMDUwOTAsIDEwNTA5NCwgCi0gICAgMTA1MDk4LCAxMDUxMDIsIDEwNTEwNiwgMTA1MTEwLCAxMDUxMTQsIDEwNTExOCwgMTA1MTIyLCAxMDUxMjYsIDEwNTEzMCwgCi0gICAgMTA1MTM0LCAxMDUxMzgsIDEwNTE0MiwgMTA1MTQ2LCAxMDUxNTAsIDEwNTE1NCwgMTA1MTU4LCAxMDUxNjIsIDEwNTE2NiwgCi0gICAgMTA1MTcwLCAxMDUxNzQsIDEwNTE3OCwgMTA1MTgyLCAxMDUxODYsIDEwNTE5MCwgMTA1MTk0LCAxMDUxOTgsIDEwNTIwMiwgCi0gICAgMTA1MjA2LCAxMDUyMTAsIDEwNTIxNCwgMTA1MjE4LCAxMDUyMjIsIDEwNTIyNiwgMTA1MjMwLCAxMDUyMzQsIDEwNTIzOCwgCi0gICAgMTA1MjQyLCAxMDUyNDYsIDEwNTI1MCwgMTA1MjU0LCAxMDUyNTgsIDEwNTI2MiwgMTA1MjY2LCAxMDUyNzAsIDEwNTI3NCwgCi0gICAgMTA1Mjc4LCAxMDUyODIsIDEwNTI4NiwgMTA1MjkwLCAxMDUyOTQsIDEwNTI5OCwgMTA1MzAyLCAxMDUzMDYsIDEwNTMxMCwgCi0gICAgMTA1MzE0LCAxMDUzMTgsIDEwNTMyMiwgMTA1MzI2LCAxMDUzMzAsIDEwNTMzNCwgMTA1MzM4LCAxMDUzNDIsIDEwNTM0NiwgCi0gICAgMTA1MzUwLCAxMDUzNTQsIDEwNTM1OCwgMTA1MzYyLCAxMDUzNjYsIDEwNTM3MCwgMTA1Mzc0LCAxMDUzNzgsIDEwNTM4MiwgCi0gICAgMTA1Mzg2LCAxMDUzOTAsIDEwNTM5NCwgMTA1Mzk4LCAxMDU0MDIsIDEwNTQwNiwgMTA1NDEwLCAxMDU0MTQsIDEwNTQxOCwgCi0gICAgMTA1NDIyLCAxMDU0MjYsIDEwNTQzMCwgMTA1NDM0LCAxMDU0MzgsIDEwNTQ0MiwgMTA1NDQ2LCAxMDU0NTAsIDEwNTQ1NCwgCi0gICAgMTA1NDU4LCAxMDU0NjIsIDEwNTQ2NiwgMTA1NDcwLCAxMDU0NzQsIDEwNTQ3OCwgMTA1NDgyLCAxMDU0ODYsIDEwNTQ5MCwgCi0gICAgMTA1NDk0LCAxMDU0OTgsIDEwNTUwMiwgMTA1NTA2LCAxMDU1MTAsIDEwNTUxNCwgMTA1NTE4LCAxMDU1MjIsIDEwNTUyNiwgCi0gICAgMTA1NTMwLCAxMDU1MzQsIDEwNTUzOCwgMTA1NTQyLCAxMDU1NDYsIDEwNTU1MCwgMTA1NTU0LCAxMDU1NTgsIDEwNTU2MiwgCi0gICAgMTA1NTY2LCAxMDU1NzAsIDEwNTU3NCwgMTA1NTc4LCAxMDU1ODIsIDEwNTU4NiwgMTA1NTkwLCAxMDU1OTQsIDEwNTU5OCwgCi0gICAgMTA1NjAyLCAxMDU2MDYsIDEwNTYxMCwgMTA1NjE0LCAxMDU2MTgsIDEwNTYyMiwgMTA1NjI2LCAxMDU2MzAsIDEwNTYzNCwgCi0gICAgMTA1NjM4LCAxMDU2NDIsIDEwNTY0NiwgMTA1NjUwLCAxMDU2NTQsIDEwNTY1OCwgMTA1NjYyLCAxMDU2NjYsIDEwNTY3MCwgCi0gICAgMTA1Njc0LCAxMDU2NzgsIDEwNTY4MiwgMTA1Njg2LCAxMDU2OTAsIDEwNTY5NCwgMTA1Njk4LCAxMDU3MDIsIDEwNTcwNiwgCi0gICAgMTA1NzEwLCAxMDU3MTQsIDEwNTcxOCwgMTA1NzIyLCAxMDU3MjYsIDEwNTczMCwgMTA1NzM0LCAxMDU3MzgsIDEwNTc0MiwgCi0gICAgMTA1NzQ2LCAxMDU3NTAsIDEwNTc1NCwgMTA1NzU4LCAxMDU3NjIsIDEwNTc2NiwgMTA1NzcwLCAxMDU3NzQsIDEwNTc3OCwgCi0gICAgMTA1NzgyLCAxMDU3ODYsIDEwNTc5MCwgMTA1Nzk0LCAxMDU3OTgsIDEwNTgwMiwgMTA1ODA2LCAxMDU4MTAsIDEwNTgxNCwgCi0gICAgMTA1ODE4LCAxMDU4MjIsIDEwNTgyNiwgMTA1ODMwLCAxMDU4MzQsIDEwNTgzOCwgMTA1ODQyLCAxMDU4NDYsIDEwNTg1MCwgCi0gICAgMTA1ODU0LCAxMDU4NTgsIDEwNTg2MiwgMTA1ODY2LCAxMDU4NzAsIDEwNTg3NCwgMTA1ODc4LCAxMDU4ODIsIDEwNTg4NiwgCi0gICAgMTA1ODkwLCAxMDU4OTQsIDEwNTg5OCwgMTA1OTAyLCAxMDU5MDYsIDEwNTkxMCwgMTA1OTE0LCAxMDU5MTgsIDEwNTkyMiwgCi0gICAgMTA1OTI2LCAxMDU5MzAsIDEwNTkzNCwgMTA1OTM4LCAxMDU5NDIsIDEwNTk0NiwgMTA1OTUwLCAxMDU5NTQsIDEwNTk1OCwgCi0gICAgMTA1OTYyLCAxMDU5NjYsIDEwNTk3MCwgMTA1OTc0LCAxMDU5NzgsIDEwNTk4MiwgMTA1OTg2LCAxMDU5OTAsIDEwNTk5NCwgCi0gICAgMTA1OTk4LCAxMDYwMDIsIDEwNjAwNiwgMTA2MDEwLCAxMDYwMTQsIDEwNjAxOCwgMTA2MDIyLCAxMDYwMjYsIDEwNjAzMCwgCi0gICAgMTA2MDM0LCAxMDYwMzgsIDEwNjA0MiwgMTA2MDQ2LCAxMDYwNTAsIDEwNjA1NCwgMTA2MDU4LCAxMDYwNjIsIDEwNjA2NiwgCi0gICAgMTA2MDcwLCAxMDYwNzQsIDEwNjA3OCwgMTA2MDgyLCAxMDYwODYsIDEwNjA5MCwgMTA2MDk0LCAxMDYwOTgsIDEwNjEwMiwgCi0gICAgMTA2MTA2LCAxMDYxMTAsIDEwNjExNCwgMTA2MTE4LCAxMDYxMjIsIDEwNjEyNiwgMTA2MTMwLCAxMDYxMzQsIDEwNjEzOCwgCi0gICAgMTA2MTQyLCAxMDYxNDYsIDEwNjE1MCwgMTA2MTU0LCAxMDYxNTgsIDEwNjE2MiwgMTA2MTY2LCAxMDYxNzAsIDEwNjE3NCwgCi0gICAgMTA2MTc4LCAxMDYxODIsIDEwNjE4NiwgMTA2MTkwLCAxMDYxOTQsIDEwNjE5OCwgMTA2MjAyLCAxMDYyMDYsIDEwNjIxMCwgCi0gICAgMTA2MjE0LCAxMDYyMTgsIDEwNjIyMiwgMTA2MjI2LCAxMDYyMzAsIDEwNjIzNCwgMTA2MjM4LCAxMDYyNDIsIDEwNjI0NiwgCi0gICAgMTA2MjUwLCAxMDYyNTQsIDEwNjI1OCwgMTA2MjYyLCAxMDYyNjYsIDEwNjI3MCwgMTA2Mjc0LCAxMDYyNzgsIDEwNjI4MiwgCi0gICAgMTA2Mjg2LCAxMDYyOTAsIDEwNjI5NCwgMTA2Mjk4LCAxMDYzMDIsIDEwNjMwNiwgMTA2MzEwLCAxMDYzMTQsIDEwNjMxOCwgCi0gICAgMTA2MzIyLCAxMDYzMjYsIDEwNjMzMCwgMTA2MzM0LCAxMDYzMzgsIDEwNjM0MiwgMTA2MzQ2LCAxMDYzNTAsIDEwNjM1NCwgCi0gICAgMTA2MzU4LCAxMDYzNjIsIDEwNjM2NiwgMTA2MzcwLCAxMDYzNzQsIDEwNjM3OCwgMTA2MzgyLCAxMDYzODYsIDEwNjM5MCwgCi0gICAgMTA2Mzk0LCAxMDYzOTgsIDEwNjQwMiwgMTA2NDA2LCAxMDY0MTAsIDEwNjQxNCwgMTA2NDE4LCAxMDY0MjIsIDEwNjQyNiwgCi0gICAgMTA2NDMwLCAxMDY0MzQsIDEwNjQzOCwgMTA2NDQyLCAxMDY0NDYsIDEwNjQ1MCwgMTA2NDU0LCAxMDY0NTgsIDEwNjQ2MiwgCi0gICAgMTA2NDY2LCAxMDY0NzAsIDEwNjQ3NCwgMTA2NDc4LCAxMDY0ODIsIDEwNjQ4NiwgMTA2NDkwLCAxMDY0OTQsIDEwNjQ5OCwgCi0gICAgMTA2NTAyLCAxMDY1MDYsIDEwNjUxMCwgMTA2NTE0LCAxMDY1MTgsIDEwNjUyMiwgMTA2NTI2LCAxMDY1MzAsIDEwNjUzNCwgCi0gICAgMTA2NTM4LCAxMDY1NDIsIDEwNjU0NiwgMTA2NTUwLCAxMDY1NTQsIDEwNjU1OCwgMTA2NTYyLCAxMDY1NjYsIDEwNjU3MCwgCi0gICAgMTA2NTc0LCAxMDY1NzgsIDEwNjU4MiwgMTA2NTg2LCAxMDY1OTAsIDEwNjU5NCwgMTA2NTk4LCAxMDY2MDIsIDEwNjYwNiwgCi0gICAgMTA2NjEwLCAxMDY2MTQsIDEwNjYxOCwgMTA2NjIyLCAxMDY2MjYsIDEwNjYzMCwgMTA2NjM0LCAxMDY2MzgsIDEwNjY0MiwgCi0gICAgMTA2NjQ2LCAxMDY2NTAsIDEwNjY1NCwgMTA2NjU4LCAxMDY2NjIsIDEwNjY2NiwgMTA2NjcwLCAxMDY2NzQsIDEwNjY3OCwgCi0gICAgMTA2NjgyLCAxMDY2ODYsIDEwNjY5MCwgMTA2Njk0LCAxMDY2OTgsIDEwNjcwMiwgMTA2NzA2LCAxMDY3MTAsIDEwNjcxNCwgCi0gICAgMTA2NzE4LCAxMDY3MjIsIDEwNjcyNiwgMTA2NzMwLCAxMDY3MzQsIDEwNjczOCwgMTA2NzQyLCAxMDY3NDYsIDEwNjc1MCwgCi0gICAgMTA2NzU0LCAxMDY3NTgsIDEwNjc2MiwgMTA2NzY2LCAxMDY3NzAsIDEwNjc3NCwgMTA2Nzc4LCAxMDY3ODIsIDEwNjc4NiwgCi0gICAgMTA2NzkwLCAxMDY3OTQsIDEwNjc5OCwgMTA2ODAyLCAxMDY4MDYsIDEwNjgxMCwgMTA2ODE0LCAxMDY4MTgsIDEwNjgyMiwgCi0gICAgMTA2ODI2LCAxMDY4MzAsIDEwNjgzNCwgMTA2ODM4LCAxMDY4NDIsIDEwNjg0NiwgMTA2ODUwLCAxMDY4NTQsIDEwNjg1OCwgCi0gICAgMTA2ODYyLCAxMDY4NjYsIDEwNjg3MCwgMTA2ODc0LCAxMDY4NzgsIDEwNjg4MiwgMTA2ODg2LCAxMDY4OTAsIDEwNjg5NCwgCi0gICAgMTA2ODk4LCAxMDY5MDIsIDEwNjkwNiwgMTA2OTEwLCAxMDY5MTQsIDEwNjkxOCwgMTA2OTIyLCAxMDY5MjYsIDEwNjkzMCwgCi0gICAgMTA2OTM0LCAxMDY5MzgsIDEwNjk0MiwgMTA2OTQ2LCAxMDY5NTAsIDEwNjk1NCwgMTA2OTU4LCAxMDY5NjIsIDEwNjk2NiwgCi0gICAgMTA2OTcwLCAxMDY5NzQsIDEwNjk3OCwgMTA2OTgyLCAxMDY5ODYsIDEwNjk5MCwgMTA2OTk0LCAxMDY5OTgsIDEwNzAwMiwgCi0gICAgMTA3MDA2LCAxMDcwMTAsIDEwNzAxNCwgMTA3MDE4LCAxMDcwMjIsIDEwNzAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTA3MDMwLCAxMDcwMzcsIDEwNzA0NCwgMTA3MDUzLCAxMDcwNjIsIDEwNzA2OSwgMTA3MDc0LCAxMDcwODEsIAotICAgIDEwNzA4OCwgMTA3MDk3LCAxMDcxMDgsIDEwNzExOSwgMTA3MTI0LCAxMDcxMzEsIDEwNzEzNiwgMTA3MTQxLCAxMDcxNDYsIAotICAgIDEwNzE1MSwgMTA3MTU2LCAxMDcxNjEsIDEwNzE2NiwgMTA3MTcxLCAxMDcxNzYsIDEwNzE4MSwgMTA3MTg2LCAxMDcxOTMsIAotICAgIDEwNzIwMCwgMTA3MjA1LCAxMDcyMTAsIDEwNzIxNSwgMTA3MjIwLCAxMDcyMjcsIDEwNzIzNCwgMTA3MjQyLCAxMDcyNDcsIAotICAgIDEwNzI1NCwgMTA3MjU5LCAxMDcyNjQsIDEwNzI2OSwgMTA3Mjc0LCAxMDcyNzksIDEwNzI4NiwgMTA3MjkzLCAxMDcyOTgsIAotICAgIDEwNzMwMywgMTA3MzA4LCAxMDczMTMsIDEwNzMxOCwgMTA3MzIzLCAxMDczMjgsIDEwNzMzMywgMTA3MzM4LCAxMDczNDMsIAotICAgIDEwNzM0OCwgMTA3MzUzLCAxMDczNTgsIDEwNzM2MywgMTA3MzY4LCAxMDczNzMsIDEwNzM3OCwgMTA3MzgzLCAxMDczODgsIAotICAgIDEwNzM5NSwgMTA3NDAwLCAxMDc0MDUsIDEwNzQxNCwgMTA3NDIxLCAxMDc0MjYsIDEwNzQzMSwgMTA3NDM2LCAxMDc0NDEsIAotICAgIDEwNzQ0NiwgMTA3NDUxLCAxMDc0NTYsIDEwNzQ2MSwgMTA3NDY2LCAxMDc0NzEsIDEwNzQ3NiwgMTA3NDgxLCAxMDc0ODYsIAotICAgIDEwNzQ5MSwgMTA3NDk2LCAxMDc1MDEsIDEwNzUwNiwgMTA3NTExLCAxMDc1MTYsIDEwNzUyMSwgMTA3NTI2LCAxMDc1MzIsIAotICAgIDEwNzU0MCwgMTA3NTQ2LCAxMDc1NTQsIDEwNzU2MiwgMTA3NTcwLCAxMDc1NzYsIDEwNzU4MiwgMTA3NTg4LCAxMDc1OTQsIAotICAgIDEwNzYwMCwgMTA3NjA4LCAxMDc2MTgsIDEwNzYyNiwgMTA3NjM0LCAxMDc2NDAsIDEwNzY0NiwgMTA3NjU0LCAxMDc2NjIsIAotICAgIDEwNzY2OCwgMTA3Njc2LCAxMDc2ODQsIDEwNzY5MiwgMTA3Njk4LCAxMDc3MDQsIDEwNzcxMCwgMTA3NzE2LCAxMDc3MjIsIAotICAgIDEwNzcyOCwgMTA3NzM2LCAxMDc3NDQsIDEwNzc1MCwgMTA3NzU2LCAxMDc3NjIsIDEwNzc2OCwgMTA3Nzc0LCAxMDc3ODIsIAotICAgIDEwNzc4OCwgMTA3Nzk0LCAxMDc4MDAsIDEwNzgwNiwgMTA3ODEyLCAxMDc4MTgsIDEwNzgyNiwgMTA3ODMyLCAxMDc4MzgsIAotICAgIDEwNzg0NCwgMTA3ODUwLCAxMDc4NTgsIDEwNzg2NiwgMTA3ODcyLCAxMDc4NzgsIDEwNzg4NCwgMTA3ODg5LCAxMDc4OTUsIAotICAgIDEwNzkwMSwgMTA3OTA4LCAxMDc5MTMsIDEwNzkxOCwgMTA3OTIzLCAxMDc5MjgsIDEwNzkzMywgMTA3OTM4LCAxMDc5NDMsIAotICAgIDEwNzk0OCwgMTA3OTUzLCAxMDc5NjIsIDEwNzk2OSwgMTA3OTc0LCAxMDc5NzksIDEwNzk4NCwgMTA3OTkxLCAxMDc5OTYsIAotICAgIDEwODAwMSwgMTA4MDA2LCAxMDgwMTMsIDEwODAxOCwgMTA4MDIzLCAxMDgwMjgsIDEwODAzMywgMTA4MDM4LCAxMDgwNDMsIAotICAgIDEwODA0OCwgMTA4MDUzLCAxMDgwNTgsIDEwODA2MywgMTA4MDY4LCAxMDgwNzUsIDEwODA4MCwgMTA4MDg3LCAxMDgwOTIsIAotICAgIDEwODA5NywgMTA4MTA0LCAxMDgxMDksIDEwODExNCwgMTA4MTE5LCAxMDgxMjQsIDEwODEyOSwgMTA4MTM0LCAxMDgxMzksIAotICAgIDEwODE0NCwgMTA4MTQ5LCAxMDgxNTQsIDEwODE1OSwgMTA4MTY0LCAxMDgxNjksIDEwODE3NCwgMTA4MTc5LCAxMDgxODQsIAotICAgIDEwODE4OSwgMTA4MTk0LCAxMDgxOTksIDEwODIwNiwgMTA4MjExLCAxMDgyMTYsIDEwODIyMSwgMTA4MjI2LCAxMDgyMzEsIAotICAgIDEwODIzNiwgMTA4MjQxLCAxMDgyNDYsIDEwODI1MSwgMTA4MjU2LCAxMDgyNjEsIDEwODI2NiwgMTA4MjcxLCAxMDgyNzgsIAotICAgIDEwODI4MywgMTA4Mjg4LCAxMDgyOTUsIDEwODMwMCwgMTA4MzA1LCAxMDgzMTAsIDEwODMxNSwgMTA4MzIwLCAxMDgzMjUsIAotICAgIDEwODMzMCwgMTA4MzM1LCAxMDgzNDAsIDEwODM0NSwgMTA4MzUyLCAxMDgzNTcsIDEwODM2MiwgMTA4MzY3LCAxMDgzNzIsIAotICAgIDEwODM3NywgMTA4Mzg0LCAxMDgzOTEsIDEwODM5NiwgMTA4NDAxLCAxMDg0MDYsIDEwODQxMSwgMTA4NDE2LCAxMDg0MjEsIAotICAgIDEwODQyNiwgMTA4NDMxLCAxMDg0MzYsIDEwODQ0MSwgMTA4NDQ2LCAxMDg0NTEsIDEwODQ1NiwgMTA4NDYxLCAxMDg0NjYsIAotICAgIDEwODQ3MSwgMTA4NDc2LCAxMDg0ODEsIDEwODQ4NiwgMTA4NDkxLCAxMDg0OTYsIDEwODUwMSwgMTA4NTA2LCAxMDg1MTEsIAotICAgIDEwODUxNiwgMTA4NTIxLCAxMDg1MjYsIDEwODUzMSwgMTA4NTM2LCAxMDg1NDEsIDEwODU0NiwgMTA4NTUxLCAxMDg1NTYsIAotICAgIDEwODU2MSwgMTA4NTY2LCAxMDg1NzEsIDEwODU3OCwgMTA4NTgzLCAxMDg1ODgsIDEwODU5MywgMTA4NTk4LCAxMDg2MDMsIAotICAgIDEwODYwOCwgMTA4NjEzLCAxMDg2MTgsIDEwODYyMywgMTA4NjI4LCAxMDg2MzMsIDEwODYzOCwgMTA4NjQzLCAxMDg2NDgsIAotICAgIDEwODY1MywgMTA4NjU4LCAxMDg2NjMsIDEwODY2OCwgMTA4NjczLCAxMDg2NzgsIDEwODY4MywgMTA4Njg4LCAxMDg2OTMsIAotICAgIDEwODY5OCwgMTA4NzAzLCAxMDg3MDgsIDEwODcxMywgMTA4NzE4LCAxMDg3MjMsIDEwODcyOCwgMTA4NzMzLCAxMDg3MzgsIAotICAgIDEwODc0MywgMTA4NzQ4LCAxMDg3NTMsIDEwODc1OCwgMTA4NzYzLCAxMDg3NjgsIDEwODc3MywgMTA4Nzc4LCAxMDg3ODMsIAotICAgIDEwODc4OCwgMTA4NzkzLCAxMDg3OTgsIDEwODgwMywgMTA4ODA4LCAxMDg4MTMsIDEwODgxOCwgMTA4ODIzLCAxMDg4MjgsIAotICAgIDEwODgzMywgMTA4ODM4LCAxMDg4NDMsIDEwODg0OCwgMTA4ODUzLCAxMDg4NTgsIDEwODg2MywgMTA4ODY4LCAxMDg4NzUsIAotICAgIDEwODg4MCwgMTA4ODg1LCAxMDg4OTAsIDEwODg5NSwgMTA4OTAwLCAxMDg5MDUsIDEwODkwOSwgMTA4OTE0LCAxMDg5MTksIAotICAgIDEwODkyNCwgMTA4OTI5LCAxMDg5MzQsIDEwODkzOSwgMTA4OTQ0LCAxMDg5NDksIDEwODk1NCwgMTA4OTU5LCAxMDg5NjQsIAotICAgIDEwODk2OSwgMTA4OTc0LCAxMDg5NzksIDEwODk4NiwgMTA4OTkxLCAxMDg5OTYsIDEwOTAwMiwgMTA5MDA3LCAxMDkwMTIsIAotICAgIDEwOTAxNywgMTA5MDIyLCAxMDkwMjcsIDEwOTAzMiwgMTA5MDM3LCAxMDkwNDIsIDEwOTA0NywgMTA5MDUyLCAxMDkwNTcsIAotICAgIDEwOTA2MiwgMTA5MDY3LCAxMDkwNzIsIDEwOTA3NywgMTA5MDgyLCAxMDkwODcsIDEwOTA5MiwgMTA5MDk3LCAxMDkxMDIsIAotICAgIDEwOTEwNywgMTA5MTEyLCAxMDkxMTcsIDEwOTEyMiwgMTA5MTI3LCAxMDkxMzIsIDEwOTEzNywgMTA5MTQyLCAxMDkxNDcsIAotICAgIDEwOTE1MiwgMTA5MTU3LCAxMDkxNjIsIDEwOTE2NywgMTA5MTcyLCAxMDkxNzcsIDEwOTE4MiwgMTA5MTg3LCAxMDkxOTIsIAotICAgIDEwOTE5NywgMTA5MjAyLCAxMDkyMDcsIDEwOTIxMiwgMTA5MjE3LCAxMDkyMjQsIDEwOTIyOSwgMTA5MjM0LCAxMDkyNDEsIAotICAgIDEwOTI0OCwgMTA5MjUzLCAxMDkyNTgsIDEwOTI2MywgMTA5MjY4LCAxMDkyNzMsIDEwOTI3OCwgMTA5MjgzLCAxMDkyODgsIAotICAgIDEwOTI5MywgMTA5Mjk4LCAxMDkzMDMsIDEwOTMwOCwgMTA5MzEzLCAxMDkzMTgsIDEwOTMyMywgMTA5MzI4LCAxMDkzMzMsIAotICAgIDEwOTMzOCwgMTA5MzQzLCAxMDkzNDgsIDEwOTM1MywgMTA5MzU4LCAxMDkzNjMsIDEwOTM2OCwgMTA5MzczLCAxMDkzODAsIAotICAgIDEwOTM4NSwgMTA5MzkwLCAxMDkzOTUsIDEwOTQwMCwgMTA5NDA1LCAxMDk0MTAsIDEwOTQxNSwgMTA5NDIwLCAxMDk0MjUsIAotICAgIDEwOTQzMCwgMTA5NDM1LCAxMDk0NDAsIDEwOTQ0NSwgMTA5NDUwLCAxMDk0NTUsIDEwOTQ2MCwgMTA5NDY1LCAxMDk0NzAsIAotICAgIDEwOTQ3NywgMTA5NDgyLCAxMDk0ODcsIDEwOTQ5MiwgMTA5NDk3LCAxMDk1MDIsIDEwOTUwNywgMTA5NTEyLCAxMDk1MTgsIAotICAgIDEwOTUyMywgMTA5NTI4LCAxMDk1MzMsIDEwOTUzOCwgMTA5NTQzLCAxMDk1NDgsIDEwOTU1MywgMTA5NTU4LCAxMDk1NjUsIAotICAgIDEwOTU3MiwgMTA5NTc3LCAxMDk1ODIsIDEwOTU4NiwgMTA5NTkxLCAxMDk1OTUsIDEwOTU5OSwgMTA5NjA0LCAxMDk2MTEsIAotICAgIDEwOTYxNiwgMTA5NjIxLCAxMDk2MzAsIDEwOTYzNSwgMTA5NjQwLCAxMDk2NDUsIDEwOTY1MCwgMTA5NjU3LCAxMDk2NjQsIAotICAgIDEwOTY2OSwgMTA5Njc0LCAxMDk2NzksIDEwOTY4NCwgMTA5NjkxLCAxMDk2OTYsIDEwOTcwMSwgMTA5NzA2LCAxMDk3MTEsIAotICAgIDEwOTcxNiwgMTA5NzIxLCAxMDk3MjYsIDEwOTczMSwgMTA5NzM2LCAxMDk3NDEsIDEwOTc0NiwgMTA5NzUxLCAxMDk3NTgsIAotICAgIDEwOTc2MiwgMTA5NzY3LCAxMDk3NzIsIDEwOTc3NywgMTA5NzgyLCAxMDk3ODYsIDEwOTc5MSwgMTA5Nzk2LCAxMDk4MDEsIAotICAgIDEwOTgwNiwgMTA5ODExLCAxMDk4MTYsIDEwOTgyMSwgMTA5ODI2LCAxMDk4MzEsIDEwOTgzNywgMTA5ODQzLCAxMDk4NDksIAotICAgIDEwOTg1NSwgMTA5ODYxLCAxMDk4NjcsIDEwOTg3MywgMTA5ODc5LCAxMDk4ODUsIDEwOTg5MSwgMTA5ODk3LCAxMDk5MDMsIAotICAgIDEwOTkwOCwgMTA5OTE0LCAxMDk5MjAsIDEwOTkyNiwgMTA5OTMyLCAxMDk5MzgsIDEwOTk0NCwgMTA5OTUwLCAxMDk5NTYsIAotICAgIDEwOTk2MiwgMTA5OTY4LCAxMDk5NzQsIDEwOTk3OSwgMTA5OTg1LCAxMDk5OTEsIDEwOTk5NywgMTEwMDAzLCAxMTAwMDksIAotICAgIDExMDAxNSwgMTEwMDIxLCAxMTAwMjcsIDExMDAzMywgMTEwMDM5LCAxMTAwNDUsIDExMDA1MSwgMTEwMDU3LCAxMTAwNjMsIAotICAgIDExMDA2OSwgMTEwMDc1LCAxMTAwODEsIDExMDA4NywgMTEwMDkzLCAxMTAwOTksIDExMDEwNCwgMTEwMTEwLCAxMTAxMTYsIAotICAgIDExMDEyMiwgMTEwMTI4LCAxMTAxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDE0MCwgMTEwMTQzLCAxMTAxNDcsIDExMDE1MSwgMTEwMTU1LCAxMTAxNTgsIAotICAgIDExMDE2MiwgMTEwMTY3LCAxMTAxNzEsIDExMDE3NSwgMTEwMTc5LCAxMTAxODMsIDExMDE4NywgMTEwMTkyLCAxMTAxOTcsIAotICAgIDExMDIwMSwgMTEwMjA1LCAxMTAyMDgsIDExMDIxMiwgMTEwMjE3LCAxMTAyMjIsIDExMDIyNiwgMTEwMjMwLCAxMTAyMzQsIAotICAgIDExMDIzOCwgMTEwMjQyLCAxMTAyNDYsIDExMDI1MCwgMTEwMjU0LCAxMTAyNTgsIDExMDI2MiwgMTEwMjY1LCAxMTAyNjksIAotICAgIDExMDI3MywgMTEwMjc3LCAxMTAyODEsIDExMDI4NSwgMTEwMjg5LCAxMTAyOTUsIDExMDI5OCwgMTEwMzAyLCAxMTAzMDYsIAotICAgIDExMDMxMCwgMTEwMzE0LCAxMTAzMTgsIDExMDMyMiwgMTEwMzI2LCAxMTAzMzAsIDExMDMzNCwgMTEwMzM5LCAxMTAzNDQsIAotICAgIDExMDM1MCwgMTEwMzU0LCAxMTAzNTgsIDExMDM2MiwgMTEwMzY2LCAxMTAzNzAsIDExMDM3NCwgMTEwMzc5LCAxMTAzODIsIAotICAgIDExMDM4NiwgMTEwMzkwLCAxMTAzOTQsIDExMDM5OCwgMTEwNDA0LCAxMTA0MDgsIDExMDQxMiwgMTEwNDE2LCAxMTA0MjAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDQyNCwgMTEwNDI4LCAxMTA0MzIsIDExMDQzOCwgMTEwNDQ0LCAKLSAgICAxMTA0NDgsIDExMDQ1MywgMTEwNDU4LCAxMTA0NjMsIDExMDQ2OCwgMTEwNDcyLCAxMTA0NzcsIDExMDQ4MiwgMTEwNDg3LCAKLSAgICAxMTA0OTEsIDExMDQ5NiwgMTEwNTAxLCAxMTA1MDYsIDExMDUxMCwgMTEwNTE1LCAxMTA1MjAsIDExMDUyNSwgMTEwNTMwLCAKLSAgICAxMTA1MzUsIDExMDU0MCwgMTEwNTQ1LCAxMTA1NTAsIDExMDU1NCwgMTEwNTU5LCAxMTA1NjQsIDExMDU2OSwgMTEwNTc0LCAKLSAgICAxMTA1NzksIDExMDU4NCwgMTEwNTg5LCAxMTA1OTQsIDExMDU5OSwgMTEwNjA0LCAxMTA2MDksIDExMDYxNiwgMTEwNjIxLCAKLSAgICAxMTA2MjgsIDExMDYzMywgMTEwNjM4LCAxMTA2NDMsIDExMDY0OCwgMTEwNjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2NTgsIDExMDY2MiwgMTEwNjY4LCAxMTA2NzEsIDExMDY3NCwgMTEwNjc4LCAKLSAgICAxMTA2ODIsIDExMDY4NiwgMTEwNjkwLCAxMTA2OTQsIDExMDY5OCwgMTEwNzAyLCAxMTA3MDgsIDExMDcxNCwgMTEwNzIwLCAKLSAgICAxMTA3MjYsIDExMDczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTEwNzM4LCAxMTA3NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDc0OSwgMTEwNzU0LCAxMTA3NTksIAotICAgIDExMDc2NCwgMTEwNzcxLCAxMTA3NzgsIDExMDc4NSwgMTEwNzkyLCAxMTA3OTcsIDExMDgwMiwgMTEwODA3LCAxMTA4MTIsIAotICAgIDExMDgxOSwgMTEwODI0LCAxMTA4MzEsIDExMDgzOCwgMTEwODQzLCAxMTA4NDgsIDExMDg1MywgMTEwODYwLCAxMTA4NjUsIAotICAgIDExMDg3MCwgMTEwODc3LCAxMTA4ODQsIDExMDg4OSwgMTEwODk0LCAxMTA4OTksIDExMDkwNiwgMTEwOTEzLCAxMTA5MjAsIAotICAgIDExMDkyNSwgMTEwOTMwLCAxMTA5MzcsIDExMDk0NCwgMTEwOTUxLCAxMTA5NTgsIDExMDk2MywgMTEwOTY4LCAxMTA5NzMsIAotICAgIDExMDk4MCwgMTEwOTg1LCAxMTA5OTAsIDExMDk5NSwgMTExMDAyLCAxMTEwMTEsIDExMTAxOCwgMTExMDIzLCAxMTEwMjgsIAotICAgIDExMTAzMywgMTExMDM4LCAxMTEwNDMsIDExMTA0OCwgMTExMDU3LCAxMTEwNjQsIDExMTA2OSwgMTExMDc2LCAxMTEwODMsIAotICAgIDExMTA4OCwgMTExMDkzLCAxMTEwOTgsIDExMTEwNSwgMTExMTEwLCAxMTExMTcsIDExMTEyNCwgMTExMTI5LCAxMTExMzQsIAotICAgIDExMTEzOSwgMTExMTQ2LCAxMTExNTMsIDExMTE1OCwgMTExMTYzLCAxMTExNzAsIDExMTE3NywgMTExMTg0LCAxMTExODksIAotICAgIDExMTE5NCwgMTExMTk5LCAxMTEyMDQsIDExMTIxMSwgMTExMjIwLCAxMTEyMjksIDExMTIzNCwgMTExMjQxLCAxMTEyNTAsIAotICAgIDExMTI1NSwgMTExMjYwLCAxMTEyNjUsIDExMTI3MCwgMTExMjc3LCAxMTEyODQsIDExMTI5MSwgMTExMjk4LCAxMTEzMDMsIAotICAgIDExMTMwOCwgMTExMzEzLCAxMTEzMjAsIDExMTMyNywgMTExMzM0LCAxMTEzMzksIDExMTM0NCwgMTExMzUxLCAxMTEzNTYsIAotICAgIDExMTM2MywgMTExMzY4LCAxMTEzNzUsIDExMTM4MCwgMTExMzg3LCAxMTEzOTQsIDExMTM5OSwgMTExNDA0LCAxMTE0MDksIAotICAgIDExMTQxNCwgMTExNDE5LCAxMTE0MjQsIDExMTQyOSwgMTExNDM0LCAxMTE0MzksIDExMTQ0NiwgMTExNDUzLCAxMTE0NjAsIAotICAgIDExMTQ2NywgMTExNDc0LCAxMTE0ODMsIDExMTQ4OCwgMTExNDkzLCAxMTE1MDAsIDExMTUwNywgMTExNTEyLCAxMTE1MTksIAotICAgIDExMTUyNiwgMTExNTMzLCAxMTE1NDAsIDExMTU0NywgMTExNTU0LCAxMTE1NTksIDExMTU2NCwgMTExNTY5LCAxMTE1NzQsIAotICAgIDExMTU3OSwgMTExNTg4LCAxMTE1OTcsIDExMTYwNiwgMTExNjE1LCAxMTE2MjQsIDExMTYzMywgMTExNjQyLCAxMTE2NTEsIAotICAgIDExMTY1NiwgMTExNjY3LCAxMTE2NzgsIDExMTY4NywgMTExNjkyLCAxMTE2OTcsIDExMTcwMiwgMTExNzA3LCAxMTE3MTYsIAotICAgIDExMTcyMywgMTExNzMwLCAxMTE3MzcsIDExMTc0NCwgMTExNzUxLCAxMTE3NTgsIDExMTc2NywgMTExNzc2LCAxMTE3ODcsIAotICAgIDExMTc5NiwgMTExODA3LCAxMTE4MTYsIDExMTgyMywgMTExODMyLCAxMTE4NDMsIDExMTg1MiwgMTExODYxLCAxMTE4NzAsIAotICAgIDExMTg3OSwgMTExODg2LCAxMTE4OTMsIDExMTkwMCwgMTExOTA5LCAxMTE5MTgsIDExMTkyOSwgMTExOTM4LCAxMTE5NDcsIAotICAgIDExMTk1OCwgMTExOTYzLCAxMTE5NjgsIDExMTk3OSwgMTExOTg3LCAxMTE5OTYsIDExMjAwNSwgMTEyMDE0LCAxMTIwMjUsIAotICAgIDExMjAzNCwgMTEyMDQzLCAxMTIwNTQsIDExMjA2NSwgMTEyMDc2LCAxMTIwODcsIDExMjA5OCwgMTEyMTA5LCAxMTIxMTYsIAotICAgIDExMjEyMywgMTEyMTMwLCAxMTIxMzcsIDExMjE0OCwgMTEyMTU3LCAxMTIxNjQsIDExMjE3MSwgMTEyMTc4LCAxMTIxODksIAotICAgIDExMjIwMCwgMTEyMjExLCAxMTIyMjIsIDExMjIzMywgMTEyMjQ0LCAxMTIyNTUsIDExMjI2NiwgMTEyMjczLCAxMTIyODAsIAotICAgIDExMjI4OSwgMTEyMjk4LCAxMTIzMDUsIDExMjMxMiwgMTEyMzE5LCAxMTIzMjgsIDExMjMzNywgMTEyMzQ2LCAxMTIzNTMsIAotICAgIDExMjM2MiwgMTEyMzcxLCAxMTIzODAsIDExMjM4NywgMTEyMzk0LCAxMTIzOTksIDExMjQwNSwgMTEyNDEyLCAxMTI0MTksIAotICAgIDExMjQyNiwgMTEyNDMzLCAxMTI0NDAsIDExMjQ0NywgMTEyNDU2LCAxMTI0NjUsIDExMjQ3NCwgMTEyNDgzLCAxMTI0OTAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQ5OSwgMTEyNTA1LCAxMTI1MTAsIDExMjUxNSwgMTEyNTIyLCAKLSAgICAxMTI1MjgsIDExMjUzNCwgMTEyNTQwLCAxMTI1NDYsIDExMjU1MiwgMTEyNTU4LCAxMTI1NjQsIDExMjU2OCwgMTEyNTcyLCAKLSAgICAxMTI1NzgsIDExMjU4NCwgMTEyNTkwLCAxMTI1OTQsIDExMjU5OSwgMTEyNjA0LCAxMTI2MDgsIDExMjYxMiwgMTEyNjE1LCAKLSAgICAxMTI2MjEsIDExMjYyNywgMTEyNjMzLCAxMTI2MzksIDExMjY0NSwgMTEyNjUxLCAxMTI2NTcsIDExMjY2MywgMTEyNjY5LCAKLSAgICAxMTI2NzksIDExMjY4OSwgMTEyNjk1LCAxMTI3MDEsIDExMjcxMSwgMTEyNzIxLCAxMTI3MjcsIDAsIDAsIDExMjczMywgCi0gICAgMTEyNzQxLCAxMTI3NDYsIDExMjc1MSwgMTEyNzU3LCAxMTI3NjMsIDExMjc2OSwgMTEyNzc1LCAxMTI3ODEsIDExMjc4NywgCi0gICAgMTEyNzk0LCAxMTI4MDEsIDExMjgwNywgMTEyODEzLCAxMTI4MTksIDExMjgyNSwgMTEyODMxLCAxMTI4MzcsIDExMjg0MywgCi0gICAgMTEyODQ5LCAxMTI4NTQsIDExMjg2MCwgMTEyODY2LCAxMTI4NzIsIDExMjg3OCwgMTEyODg0LCAxMTI4OTMsIDExMjg5OSwgCi0gICAgMTEyOTA0LCAxMTI5MTIsIDExMjkxOSwgMTEyOTI2LCAxMTI5MzUsIDExMjk0NCwgMTEyOTUzLCAxMTI5NjIsIDExMjk3MSwgCi0gICAgMTEyOTgwLCAxMTI5ODksIDExMjk5OCwgMTEzMDA4LCAxMTMwMTgsIDExMzAyNiwgMTEzMDM0LCAxMTMwNDMsIDExMzA1MiwgCi0gICAgMTEzMDU4LCAxMTMwNjQsIDExMzA3MCwgMTEzMDc2LCAxMTMwODQsIDExMzA5MiwgMTEzMDk2LCAxMTMxMDIsIDExMzEwNywgCi0gICAgMTEzMTEzLCAxMTMxMTksIDExMzEyNSwgMTEzMTMxLCAxMTMxMzcsIDExMzE0NiwgMTEzMTUxLCAxMTMxNTgsIDExMzE2MywgCi0gICAgMTEzMTY4LCAxMTMxNzMsIDExMzE3OSwgMTEzMTg1LCAxMTMxOTEsIDExMzE5OCwgMTEzMjAzLCAxMTMyMDgsIDExMzIxMywgCi0gICAgMTEzMjE4LCAxMTMyMjMsIDExMzIyOSwgMTEzMjM1LCAxMTMyNDEsIDExMzI0NywgMTEzMjUzLCAxMTMyNTksIDExMzI2NSwgCi0gICAgMTEzMjcxLCAxMTMyNzYsIDExMzI4MSwgMTEzMjg2LCAxMTMyOTEsIDExMzI5NiwgMTEzMzAxLCAxMTMzMDYsIDExMzMxMSwgCi0gICAgMTEzMzE3LCAxMTMzMjMsIDExMzMyOCwgMTEzMzMzLCAxMTMzMzgsIDExMzM0MywgMTEzMzQ4LCAxMTMzNTQsIDExMzM2MSwgCi0gICAgMTEzMzY1LCAxMTMzNjksIDExMzM3MywgMTEzMzc3LCAxMTMzODEsIDExMzM4NSwgMTEzMzg5LCAxMTMzOTMsIDExMzQwMSwgCi0gICAgMTEzNDExLCAxMTM0MTUsIDExMzQxOSwgMTEzNDI1LCAxMTM0MzEsIDExMzQzNywgMTEzNDQzLCAxMTM0NDksIDExMzQ1NSwgCi0gICAgMTEzNDYxLCAxMTM0NjcsIDExMzQ3MywgMTEzNDc5LCAxMTM0ODUsIDExMzQ5MSwgMTEzNDk3LCAxMTM1MDMsIDExMzUwNywgCi0gICAgMTEzNTExLCAxMTM1MTgsIDExMzUyNCwgMTEzNTMwLCAxMTM1MzYsIDExMzU0MSwgMTEzNTQ4LCAxMTM1NTMsIDExMzU1OSwgCi0gICAgMTEzNTY1LCAxMTM1NzEsIDExMzU3NywgMTEzNTgyLCAxMTM1ODYsIDExMzU5MiwgMTEzNTk2LCAxMTM2MDAsIDExMzYwNCwgCi0gICAgMTEzNjEwLCAxMTM2MTYsIDExMzYyMCwgMTEzNjI2LCAxMTM2MzIsIDExMzYzOCwgMTEzNjQ0LCAxMTM2NTAsIDExMzY1OCwgCi0gICAgMTEzNjY2LCAxMTM2NzIsIDExMzY3OCwgMTEzNjg0LCAxMTM2OTAsIDExMzcwMiwgMTEzNzE0LCAxMTM3MjgsIDExMzc0MCwgCi0gICAgMTEzNzUyLCAxMTM3NjYsIDExMzc4MCwgMTEzNzk0LCAxMTM3OTgsIDExMzgwNiwgMTEzODE0LCAxMTM4MTksIDExMzgyMywgCi0gICAgMTEzODI3LCAxMTM4MzEsIDExMzgzNSwgMTEzODM5LCAxMTM4NDMsIDExMzg0NywgMTEzODUzLCAxMTM4NTksIDExMzg2NSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzODcxLCAxMTM4NzcsIDExMzg4MywgMTEzODg5LCAxMTM4OTUsIAotICAgIDExMzkwMSwgMTEzOTA3LCAxMTM5MTMsIDExMzkxOSwgMTEzOTI1LCAxMTM5MzEsIDExMzkzNywgMTEzOTQzLCAxMTM5NDksIAotICAgIDExMzk1NSwgMTEzOTYxLCAxMTM5NjcsIDExMzk3MywgMTEzOTc5LCAxMTM5ODUsIDExMzk5MSwgMTEzOTk3LCAxMTQwMDMsIAotICAgIDExNDAwOSwgMTE0MDE1LCAxMTQwMjEsIDExNDAyNywgMTE0MDMzLCAxMTQwMzksIDExNDA0NSwgMTE0MDUxLCAxMTQwNTcsIAotICAgIDExNDA2MywgMTE0MDY5LCAxMTQwNzUsIDExNDA4MSwgMTE0MDg3LCAxMTQwOTMsIDExNDA5OSwgMTE0MTA1LCAxMTQxMTEsIAotICAgIDExNDExNywgMTE0MTIzLCAxMTQxMjksIDExNDEzNSwgMTE0MTQxLCAxMTQxNDcsIDExNDE1MywgMTE0MTU5LCAxMTQxNjUsIAotICAgIDExNDE3MSwgMTE0MTc3LCAxMTQxODMsIDExNDE4OSwgMTE0MTk1LCAxMTQyMDEsIDExNDIwNywgMTE0MjEzLCAxMTQyMTksIAotICAgIDExNDIyNSwgMTE0MjMxLCAxMTQyMzcsIDExNDI0MywgMTE0MjQ5LCAxMTQyNTUsIDExNDI2MSwgMTE0MjY3LCAxMTQyNzIsIAotICAgIDExNDI3NywgMTE0MjgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQyODYsIDExNDI5MSwgMTE0Mjk4LCAKLSAgICAxMTQzMDUsIDExNDMxMiwgMTE0MzE5LCAxMTQzMjQsIDExNDMyOCwgMTE0MzM0LCAxMTQzMzgsIDExNDM0MiwgMTE0MzQ4LCAKLSAgICAxMTQzNTIsIDExNDM1NiwgMTE0MzYwLCAxMTQzNjYsIDExNDM3MywgMTE0Mzc3LCAxMTQzODEsIDExNDM4NSwgMTE0Mzg5LCAKLSAgICAxMTQzOTMsIDExNDM5NywgMTE0NDAzLCAxMTQ0MDcsIDExNDQxMSwgMTE0NDE1LCAxMTQ0MTksIDExNDQyMywgMTE0NDI3LCAKLSAgICAxMTQ0MzEsIDExNDQzNSwgMTE0NDM5LCAxMTQ0NDMsIDExNDQ0NywgMTE0NDUxLCAxMTQ0NTYsIDExNDQ2MCwgMTE0NDY0LCAKLSAgICAxMTQ0NjgsIDExNDQ3MiwgMTE0NDc2LCAxMTQ0ODAsIDExNDQ4NCwgMTE0NDg4LCAxMTQ0OTIsIDExNDQ5OSwgMTE0NTAzLCAKLSAgICAxMTQ1MTEsIDExNDUxNSwgMTE0NTE5LCAxMTQ1MjMsIDExNDUyNywgMTE0NTMxLCAxMTQ1MzUsIDExNDUzOSwgMTE0NTQ2LCAKLSAgICAxMTQ1NTAsIDExNDU1NCwgMTE0NTU4LCAxMTQ1NjIsIDExNDU2NiwgMTE0NTcyLCAxMTQ1NzYsIDExNDU4MiwgMTE0NTg2LCAKLSAgICAxMTQ1OTAsIDExNDU5NCwgMTE0NTk4LCAxMTQ2MDIsIDExNDYwNiwgMTE0NjEwLCAxMTQ2MTQsIDExNDYxOCwgMTE0NjIyLCAKLSAgICAxMTQ2MjYsIDExNDYzMCwgMTE0NjM0LCAxMTQ2MzgsIDExNDY0MiwgMTE0NjQ2LCAxMTQ2NTAsIDExNDY1NCwgMTE0NjU4LCAKLSAgICAxMTQ2NjYsIDExNDY3MCwgMTE0Njc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ2NzgsIDExNDY4NiwgCi0gICAgMTE0Njk0LCAxMTQ3MDIsIDExNDcxMCwgMTE0NzE4LCAxMTQ3MjYsIDExNDczNCwgMTE0NzQyLCAxMTQ3NTAsIDExNDc1OCwgCi0gICAgMTE0NzY2LCAxMTQ3NzQsIDExNDc4MiwgMTE0NzkwLCAxMTQ3OTgsIDExNDgwNiwgMTE0ODE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ4MjIsIDExNDgyNiwgMTE0ODMxLCAxMTQ4MzYsIDExNDg0MSwgMTE0ODQ1LCAKLSAgICAxMTQ4NTAsIDExNDg1NSwgMTE0ODYwLCAxMTQ4NjQsIDExNDg2OSwgMTE0ODc0LCAxMTQ4NzgsIDExNDg4MiwgMTE0ODg3LCAKLSAgICAxMTQ4OTEsIDExNDg5NiwgMTE0OTAxLCAxMTQ5MDUsIDExNDkxMCwgMTE0OTE1LCAxMTQ5MTksIDExNDkyNCwgMTE0OTI5LCAKLSAgICAxMTQ5MzQsIDExNDkzOSwgMTE0OTQ0LCAxMTQ5NDgsIDExNDk1MywgMTE0OTU4LCAxMTQ5NjMsIDExNDk2NywgMTE0OTcyLCAKLSAgICAxMTQ5NzcsIDExNDk4MiwgMTE0OTg2LCAxMTQ5OTEsIDExNDk5NiwgMTE1MDAwLCAxMTUwMDQsIDExNTAwOSwgMTE1MDEzLCAKLSAgICAxMTUwMTgsIDExNTAyMywgMTE1MDI3LCAxMTUwMzIsIDExNTAzNywgMTE1MDQxLCAxMTUwNDYsIDExNTA1MSwgMTE1MDU2LCAKLSAgICAxMTUwNjEsIDExNTA2NiwgMTE1MDcwLCAxMTUwNzUsIDExNTA4MCwgMTE1MDg1LCAxMTUwODksIDExNTA5NCwgMTE1MDk5LCAKLSAgICAxMTUxMDQsIDExNTEwOCwgMTE1MTEzLCAxMTUxMTgsIDExNTEyMiwgMTE1MTI2LCAxMTUxMzEsIDExNTEzNSwgMTE1MTQwLCAKLSAgICAxMTUxNDUsIDExNTE0OSwgMTE1MTU0LCAxMTUxNTksIDExNTE2MywgMTE1MTY4LCAxMTUxNzMsIDExNTE3OCwgMTE1MTgzLCAKLSAgICAxMTUxODgsIDExNTE5MiwgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjExLCAxMTUyMTYsIDAsIDExNTIyMSwgCi0gICAgMTE1MjI1LCAxMTUyMzAsIDExNTIzNSwgMTE1MjM5LCAxMTUyNDMsIDExNTI0OCwgMTE1MjUyLCAxMTUyNTcsIDExNTI2MiwgCi0gICAgMTE1MjY2LCAxMTUyNzEsIDExNTI3NiwgMTE1MjgwLCAxMTUyODUsIDExNTI5MCwgMTE1Mjk1LCAxMTUzMDAsIDExNTMwNSwgCi0gICAgMTE1MzEwLCAxMTUzMTYsIDExNTMyMiwgMTE1MzI4LCAxMTUzMzMsIDExNTMzOSwgMTE1MzQ1LCAxMTUzNTEsIDExNTM1NiwgCi0gICAgMTE1MzYyLCAxMTUzNjgsIDExNTM3MywgMTE1Mzc4LCAxMTUzODQsIDExNTM4OSwgMTE1Mzk1LCAxMTU0MDEsIDExNTQwNiwgCi0gICAgMTE1NDEyLCAxMTU0MTgsIDExNTQyMywgMTE1NDI5LCAxMTU0MzUsIDExNTQ0MSwgMTE1NDQ3LCAxMTU0NTMsIDExNTQ1OCwgCi0gICAgMTE1NDY0LCAxMTU0NzAsIDExNTQ3NiwgMTE1NDgxLCAxMTU0ODcsIDExNTQ5MywgMTE1NDk5LCAxMTU1MDQsIDExNTUxMCwgCi0gICAgMTE1NTE2LCAxMTU1MjEsIDExNTUyNiwgMTE1NTMyLCAxMTU1MzcsIDExNTU0MywgMTE1NTQ5LCAxMTU1NTQsIDExNTU2MCwgCi0gICAgMTE1NTY2LCAxMTU1NzEsIDExNTU3NywgMTE1NTgzLCAxMTU1ODksIDExNTU5NSwgMTE1NjAxLCAwLCAxMTU2MDUsIAotICAgIDExNTYxMCwgMCwgMCwgMTE1NjE1LCAwLCAwLCAxMTU2MjAsIDExNTYyNSwgMCwgMCwgMTE1NjMwLCAxMTU2MzUsIDExNTYzOSwgCi0gICAgMTE1NjQ0LCAwLCAxMTU2NDksIDExNTY1NCwgMTE1NjU5LCAxMTU2NjMsIDExNTY2OCwgMTE1NjczLCAxMTU2NzgsIAotICAgIDExNTY4MywgMTE1Njg4LCAxMTU2OTIsIDExNTY5NywgMTE1NzAyLCAwLCAxMTU3MDcsIDAsIDExNTcxMiwgMTE1NzE3LCAKLSAgICAxMTU3MjEsIDExNTcyNiwgMTE1NzMxLCAxMTU3MzUsIDExNTczOSwgMCwgMTE1NzQ0LCAxMTU3NDksIDExNTc1NCwgCi0gICAgMTE1NzU4LCAxMTU3NjMsIDExNTc2OCwgMTE1NzcyLCAxMTU3NzcsIDExNTc4MiwgMTE1Nzg3LCAxMTU3OTIsIDExNTc5NywgCi0gICAgMTE1ODAyLCAxMTU4MDgsIDExNTgxNCwgMTE1ODIwLCAxMTU4MjUsIDExNTgzMSwgMTE1ODM3LCAxMTU4NDMsIDExNTg0OCwgCi0gICAgMTE1ODU0LCAxMTU4NjAsIDExNTg2NSwgMTE1ODcwLCAxMTU4NzYsIDExNTg4MSwgMTE1ODg3LCAxMTU4OTMsIDExNTg5OCwgCi0gICAgMTE1OTA0LCAxMTU5MTAsIDExNTkxNSwgMTE1OTIxLCAxMTU5MjcsIDExNTkzMywgMTE1OTM5LCAxMTU5NDUsIDExNTk1MCwgCi0gICAgMTE1OTU2LCAxMTU5NjIsIDExNTk2OCwgMTE1OTczLCAxMTU5NzksIDExNTk4NSwgMTE1OTkxLCAxMTU5OTYsIDExNjAwMiwgCi0gICAgMTE2MDA4LCAxMTYwMTMsIDExNjAxOCwgMTE2MDI0LCAxMTYwMjksIDExNjAzNSwgMTE2MDQxLCAxMTYwNDYsIDExNjA1MiwgCi0gICAgMTE2MDU4LCAxMTYwNjMsIDExNjA2OSwgMTE2MDc1LCAxMTYwODEsIDExNjA4NywgMTE2MDkzLCAxMTYwOTcsIDAsIAotICAgIDExNjEwMiwgMTE2MTA3LCAxMTYxMTEsIDExNjExNiwgMCwgMCwgMTE2MTIxLCAxMTYxMjYsIDExNjEzMSwgMTE2MTM1LCAKLSAgICAxMTYxMzksIDExNjE0NCwgMTE2MTQ4LCAxMTYxNTMsIDAsIDExNjE1OCwgMTE2MTYzLCAxMTYxNjgsIDExNjE3MiwgCi0gICAgMTE2MTc3LCAxMTYxODIsIDExNjE4NywgMCwgMTE2MTkyLCAxMTYxOTYsIDExNjIwMSwgMTE2MjA2LCAxMTYyMTEsIAotICAgIDExNjIxNSwgMTE2MjIwLCAxMTYyMjUsIDExNjIzMCwgMTE2MjM0LCAxMTYyMzksIDExNjI0NCwgMTE2MjQ4LCAxMTYyNTIsIAotICAgIDExNjI1NywgMTE2MjYxLCAxMTYyNjYsIDExNjI3MSwgMTE2Mjc1LCAxMTYyODAsIDExNjI4NSwgMTE2Mjg5LCAxMTYyOTQsIAotICAgIDExNjI5OSwgMTE2MzA0LCAxMTYzMDksIDExNjMxNCwgMTE2MzE4LCAwLCAxMTYzMjMsIDExNjMyOCwgMTE2MzMyLCAKLSAgICAxMTYzMzcsIDAsIDExNjM0MiwgMTE2MzQ2LCAxMTYzNTEsIDExNjM1NiwgMTE2MzYwLCAwLCAxMTYzNjQsIDAsIDAsIDAsIAotICAgIDExNjM2OCwgMTE2MzczLCAxMTYzNzgsIDExNjM4MiwgMTE2Mzg3LCAxMTYzOTIsIDExNjM5NywgMCwgMTE2NDAyLCAKLSAgICAxMTY0MDYsIDExNjQxMSwgMTE2NDE2LCAxMTY0MjEsIDExNjQyNSwgMTE2NDMwLCAxMTY0MzUsIDExNjQ0MCwgMTE2NDQ0LCAKLSAgICAxMTY0NDksIDExNjQ1NCwgMTE2NDU4LCAxMTY0NjIsIDExNjQ2NywgMTE2NDcxLCAxMTY0NzYsIDExNjQ4MSwgMTE2NDg1LCAKLSAgICAxMTY0OTAsIDExNjQ5NSwgMTE2NDk5LCAxMTY1MDQsIDExNjUwOSwgMTE2NTE0LCAxMTY1MTksIDExNjUyNCwgMTE2NTI5LCAKLSAgICAxMTY1MzUsIDExNjU0MSwgMTE2NTQ3LCAxMTY1NTIsIDExNjU1OCwgMTE2NTY0LCAxMTY1NzAsIDExNjU3NSwgMTE2NTgxLCAKLSAgICAxMTY1ODcsIDExNjU5MiwgMTE2NTk3LCAxMTY2MDMsIDExNjYwOCwgMTE2NjE0LCAxMTY2MjAsIDExNjYyNSwgMTE2NjMxLCAKLSAgICAxMTY2MzcsIDExNjY0MiwgMTE2NjQ4LCAxMTY2NTQsIDExNjY2MCwgMTE2NjY2LCAxMTY2NzIsIDExNjY3NywgMTE2NjgzLCAKLSAgICAxMTY2ODksIDExNjY5NSwgMTE2NzAwLCAxMTY3MDYsIDExNjcxMiwgMTE2NzE4LCAxMTY3MjMsIDExNjcyOSwgMTE2NzM1LCAKLSAgICAxMTY3NDAsIDExNjc0NSwgMTE2NzUxLCAxMTY3NTYsIDExNjc2MiwgMTE2NzY4LCAxMTY3NzMsIDExNjc3OSwgMTE2Nzg1LCAKLSAgICAxMTY3OTAsIDExNjc5NiwgMTE2ODAyLCAxMTY4MDgsIDExNjgxNCwgMTE2ODIwLCAxMTY4MjQsIDExNjgyOSwgMTE2ODM0LCAKLSAgICAxMTY4MzksIDExNjg0MywgMTE2ODQ4LCAxMTY4NTMsIDExNjg1OCwgMTE2ODYyLCAxMTY4NjcsIDExNjg3MiwgMTE2ODc2LCAKLSAgICAxMTY4ODAsIDExNjg4NSwgMTE2ODg5LCAxMTY4OTQsIDExNjg5OSwgMTE2OTAzLCAxMTY5MDgsIDExNjkxMywgMTE2OTE3LCAKLSAgICAxMTY5MjIsIDExNjkyNywgMTE2OTMyLCAxMTY5MzcsIDExNjk0MiwgMTE2OTQ2LCAxMTY5NTEsIDExNjk1NiwgMTE2OTYxLCAKLSAgICAxMTY5NjUsIDExNjk3MCwgMTE2OTc1LCAxMTY5ODAsIDExNjk4NCwgMTE2OTg5LCAxMTY5OTQsIDExNjk5OCwgMTE3MDAyLCAKLSAgICAxMTcwMDcsIDExNzAxMSwgMTE3MDE2LCAxMTcwMjEsIDExNzAyNSwgMTE3MDMwLCAxMTcwMzUsIDExNzAzOSwgMTE3MDQ0LCAKLSAgICAxMTcwNDksIDExNzA1NCwgMTE3MDU5LCAxMTcwNjQsIDExNzA2OSwgMTE3MDc1LCAxMTcwODEsIDExNzA4NywgMTE3MDkyLCAKLSAgICAxMTcwOTgsIDExNzEwNCwgMTE3MTEwLCAxMTcxMTUsIDExNzEyMSwgMTE3MTI3LCAxMTcxMzIsIDExNzEzNywgMTE3MTQzLCAKLSAgICAxMTcxNDgsIDExNzE1NCwgMTE3MTYwLCAxMTcxNjUsIDExNzE3MSwgMTE3MTc3LCAxMTcxODIsIDExNzE4OCwgMTE3MTk0LCAKLSAgICAxMTcyMDAsIDExNzIwNiwgMTE3MjEyLCAxMTcyMTcsIDExNzIyMywgMTE3MjI5LCAxMTcyMzUsIDExNzI0MCwgMTE3MjQ2LCAKLSAgICAxMTcyNTIsIDExNzI1OCwgMTE3MjYzLCAxMTcyNjksIDExNzI3NSwgMTE3MjgwLCAxMTcyODUsIDExNzI5MSwgMTE3Mjk2LCAKLSAgICAxMTczMDIsIDExNzMwOCwgMTE3MzEzLCAxMTczMTksIDExNzMyNSwgMTE3MzMwLCAxMTczMzYsIDExNzM0MiwgMTE3MzQ4LCAKLSAgICAxMTczNTQsIDExNzM2MCwgMTE3MzY1LCAxMTczNzEsIDExNzM3NywgMTE3MzgzLCAxMTczODgsIDExNzM5NCwgMTE3NDAwLCAKLSAgICAxMTc0MDYsIDExNzQxMSwgMTE3NDE3LCAxMTc0MjMsIDExNzQyOCwgMTE3NDMzLCAxMTc0MzksIDExNzQ0NCwgMTE3NDUwLCAKLSAgICAxMTc0NTYsIDExNzQ2MSwgMTE3NDY3LCAxMTc0NzMsIDExNzQ3OCwgMTE3NDg0LCAxMTc0OTAsIDExNzQ5NiwgMTE3NTAyLCAKLSAgICAxMTc1MDgsIDExNzUxMywgMTE3NTE5LCAxMTc1MjUsIDExNzUzMSwgMTE3NTM2LCAxMTc1NDIsIDExNzU0OCwgMTE3NTU0LCAKLSAgICAxMTc1NTksIDExNzU2NSwgMTE3NTcxLCAxMTc1NzYsIDExNzU4MSwgMTE3NTg3LCAxMTc1OTIsIDExNzU5OCwgMTE3NjA0LCAKLSAgICAxMTc2MDksIDExNzYxNSwgMTE3NjIxLCAxMTc2MjYsIDExNzYzMiwgMTE3NjM4LCAxMTc2NDQsIDExNzY1MCwgMTE3NjU2LCAKLSAgICAxMTc2NjIsIDExNzY2OSwgMTE3Njc2LCAxMTc2ODMsIDExNzY4OSwgMTE3Njk2LCAxMTc3MDMsIDExNzcxMCwgMTE3NzE2LCAKLSAgICAxMTc3MjMsIDExNzczMCwgMTE3NzM2LCAxMTc3NDIsIDExNzc0OSwgMTE3NzU1LCAxMTc3NjIsIDExNzc2OSwgMTE3Nzc1LCAKLSAgICAxMTc3ODIsIDExNzc4OSwgMTE3Nzk1LCAxMTc4MDIsIDExNzgwOSwgMTE3ODE2LCAxMTc4MjMsIDExNzgzMCwgMTE3ODM2LCAKLSAgICAxMTc4NDMsIDExNzg1MCwgMTE3ODU3LCAxMTc4NjMsIDExNzg3MCwgMTE3ODc3LCAxMTc4ODQsIDExNzg5MCwgMTE3ODk3LCAKLSAgICAxMTc5MDQsIDExNzkxMCwgMTE3OTE2LCAxMTc5MjMsIDExNzkyOSwgMTE3OTM2LCAxMTc5NDMsIDExNzk0OSwgMTE3OTU2LCAKLSAgICAxMTc5NjMsIDExNzk2OSwgMTE3OTc2LCAxMTc5ODMsIDExNzk5MCwgMTE3OTk3LCAxMTgwMDQsIDExODAwOSwgMTE4MDE1LCAKLSAgICAxMTgwMjEsIDExODAyNywgMTE4MDMyLCAxMTgwMzgsIDExODA0NCwgMTE4MDUwLCAxMTgwNTUsIDExODA2MSwgMTE4MDY3LCAKLSAgICAxMTgwNzIsIDExODA3NywgMTE4MDgzLCAxMTgwODgsIDExODA5NCwgMTE4MTAwLCAxMTgxMDUsIDExODExMSwgMTE4MTE3LCAKLSAgICAxMTgxMjIsIDExODEyOCwgMTE4MTM0LCAxMTgxNDAsIDExODE0NiwgMTE4MTUyLCAxMTgxNTcsIDExODE2MywgMTE4MTY5LCAKLSAgICAxMTgxNzUsIDExODE4MCwgMTE4MTg2LCAxMTgxOTIsIDExODE5OCwgMTE4MjAzLCAxMTgyMDksIDExODIxNSwgMTE4MjIwLCAKLSAgICAxMTgyMjUsIDExODIzMSwgMTE4MjM2LCAxMTgyNDIsIDExODI0OCwgMTE4MjUzLCAxMTgyNTksIDExODI2NSwgMTE4MjcwLCAKLSAgICAxMTgyNzYsIDExODI4MiwgMTE4Mjg4LCAxMTgyOTQsIDExODMwMCwgMTE4MzA2LCAwLCAwLCAxMTgzMTMsIDExODMxOCwgCi0gICAgMTE4MzIzLCAxMTgzMjgsIDExODMzMywgMTE4MzM4LCAxMTgzNDMsIDExODM0OCwgMTE4MzUzLCAxMTgzNTgsIDExODM2MywgCi0gICAgMTE4MzY4LCAxMTgzNzMsIDExODM3OCwgMTE4MzgzLCAxMTgzODgsIDExODM5MywgMTE4Mzk4LCAxMTg0MDQsIDExODQwOSwgCi0gICAgMTE4NDE0LCAxMTg0MTksIDExODQyNCwgMTE4NDI5LCAxMTg0MzQsIDExODQzOSwgMTE4NDQzLCAxMTg0NDgsIDExODQ1MywgCi0gICAgMTE4NDU4LCAxMTg0NjMsIDExODQ2OCwgMTE4NDczLCAxMTg0NzgsIDExODQ4MywgMTE4NDg4LCAxMTg0OTMsIDExODQ5OCwgCi0gICAgMTE4NTAzLCAxMTg1MDgsIDExODUxMywgMTE4NTE4LCAxMTg1MjMsIDExODUyOCwgMTE4NTM0LCAxMTg1MzksIDExODU0NCwgCi0gICAgMTE4NTQ5LCAxMTg1NTQsIDExODU1OSwgMTE4NTY0LCAxMTg1NjksIDExODU3NSwgMTE4NTgwLCAxMTg1ODUsIDExODU5MCwgCi0gICAgMTE4NTk1LCAxMTg2MDAsIDExODYwNSwgMTE4NjEwLCAxMTg2MTUsIDExODYyMCwgMTE4NjI1LCAxMTg2MzAsIDExODYzNSwgCi0gICAgMTE4NjQwLCAxMTg2NDUsIDExODY1MCwgMTE4NjU1LCAxMTg2NjAsIDExODY2NSwgMTE4NjcwLCAxMTg2NzUsIDExODY4MCwgCi0gICAgMTE4Njg1LCAxMTg2OTAsIDExODY5NiwgMTE4NzAxLCAxMTg3MDYsIDExODcxMSwgMTE4NzE2LCAxMTg3MjEsIDExODcyNiwgCi0gICAgMTE4NzMxLCAxMTg3MzUsIDExODc0MCwgMTE4NzQ1LCAxMTg3NTAsIDExODc1NSwgMTE4NzYwLCAxMTg3NjUsIDExODc3MCwgCi0gICAgMTE4Nzc1LCAxMTg3ODAsIDExODc4NSwgMTE4NzkwLCAxMTg3OTUsIDExODgwMCwgMTE4ODA1LCAxMTg4MTAsIDExODgxNSwgCi0gICAgMTE4ODIwLCAxMTg4MjYsIDExODgzMSwgMTE4ODM2LCAxMTg4NDEsIDExODg0NiwgMTE4ODUxLCAxMTg4NTYsIDExODg2MSwgCi0gICAgMTE4ODY3LCAxMTg4NzIsIDExODg3NywgMTE4ODgyLCAxMTg4ODcsIDExODg5MiwgMTE4ODk3LCAxMTg5MDMsIDExODkwOSwgCi0gICAgMTE4OTE1LCAxMTg5MjEsIDExODkyNywgMTE4OTMzLCAxMTg5MzksIDExODk0NSwgMTE4OTUxLCAxMTg5NTcsIDExODk2MywgCi0gICAgMTE4OTY5LCAxMTg5NzUsIDExODk4MSwgMTE4OTg3LCAxMTg5OTMsIDExODk5OSwgMTE5MDA2LCAxMTkwMTIsIDExOTAxOCwgCi0gICAgMTE5MDI0LCAxMTkwMzAsIDExOTAzNiwgMTE5MDQyLCAxMTkwNDgsIDExOTA1MywgMTE5MDU5LCAxMTkwNjUsIDExOTA3MSwgCi0gICAgMTE5MDc3LCAxMTkwODMsIDExOTA4OSwgMTE5MDk1LCAxMTkxMDEsIDExOTEwNywgMTE5MTEzLCAxMTkxMTksIDExOTEyNSwgCi0gICAgMTE5MTMxLCAxMTkxMzcsIDExOTE0MywgMTE5MTQ5LCAxMTkxNTUsIDExOTE2MiwgMTE5MTY4LCAxMTkxNzQsIDExOTE4MCwgCi0gICAgMTE5MTg2LCAxMTkxOTIsIDExOTE5OCwgMTE5MjA0LCAxMTkyMTEsIDExOTIxNywgMTE5MjIzLCAxMTkyMjksIDExOTIzNSwgCi0gICAgMTE5MjQxLCAxMTkyNDcsIDExOTI1MywgMTE5MjU5LCAxMTkyNjUsIDExOTI3MSwgMTE5Mjc3LCAxMTkyODMsIDExOTI4OSwgCi0gICAgMTE5Mjk1LCAxMTkzMDEsIDExOTMwNywgMTE5MzEzLCAxMTkzMTksIDExOTMyNSwgMTE5MzMxLCAxMTkzMzcsIDExOTM0MywgCi0gICAgMTE5MzQ5LCAxMTkzNTYsIDExOTM2MiwgMTE5MzY4LCAxMTkzNzQsIDExOTM4MCwgMTE5Mzg2LCAxMTkzOTIsIDExOTM5OCwgCi0gICAgMTE5NDAzLCAxMTk0MDksIDExOTQxNSwgMTE5NDIxLCAxMTk0MjcsIDExOTQzMywgMTE5NDM5LCAxMTk0NDUsIDExOTQ1MSwgCi0gICAgMTE5NDU3LCAxMTk0NjMsIDExOTQ2OSwgMTE5NDc1LCAxMTk0ODEsIDExOTQ4NywgMTE5NDkzLCAxMTk0OTksIDExOTUwNSwgCi0gICAgMTE5NTEyLCAxMTk1MTgsIDExOTUyNCwgMTE5NTMwLCAxMTk1MzYsIDExOTU0MiwgMTE5NTQ4LCAxMTk1NTQsIDExOTU2MSwgCi0gICAgMTE5NTY3LCAxMTk1NzMsIDExOTU3OSwgMTE5NTg1LCAxMTk1OTEsIDExOTU5NywgMTE5NjA0LCAxMTk2MTEsIDExOTYxOCwgCi0gICAgMTE5NjI1LCAxMTk2MzIsIDExOTYzOSwgMTE5NjQ2LCAxMTk2NTMsIDExOTY2MCwgMTE5NjY3LCAxMTk2NzQsIDExOTY4MSwgCi0gICAgMTE5Njg4LCAxMTk2OTUsIDExOTcwMiwgMTE5NzA5LCAxMTk3MTYsIDExOTcyNCwgMTE5NzMxLCAxMTk3MzgsIDExOTc0NSwgCi0gICAgMTE5NzUyLCAxMTk3NTksIDExOTc2NiwgMTE5NzczLCAxMTk3NzksIDExOTc4NiwgMTE5NzkzLCAxMTk4MDAsIDExOTgwNywgCi0gICAgMTE5ODE0LCAxMTk4MjEsIDExOTgyOCwgMTE5ODM1LCAxMTk4NDIsIDExOTg0OSwgMTE5ODU2LCAxMTk4NjMsIDExOTg3MCwgCi0gICAgMTE5ODc3LCAxMTk4ODQsIDExOTg5MSwgMTE5ODk4LCAxMTk5MDYsIDExOTkxMywgMTE5OTIwLCAxMTk5MjcsIDExOTkzNCwgCi0gICAgMTE5OTQxLCAxMTk5NDgsIDExOTk1NSwgMTE5OTYzLCAxMTk5NzAsIDExOTk3NywgMTE5OTg0LCAxMTk5OTEsIDExOTk5OCwgCi0gICAgMTIwMDA1LCAxMjAwMTAsIDAsIDAsIDEyMDAxNSwgMTIwMDIwLCAxMjAwMjQsIDEyMDAyOCwgMTIwMDMyLCAxMjAwMzYsIAotICAgIDEyMDA0MCwgMTIwMDQ0LCAxMjAwNDgsIDEyMDA1MiwgMTIwMDU2LCAxMjAwNjEsIDEyMDA2NSwgMTIwMDY5LCAxMjAwNzMsIAotICAgIDEyMDA3NywgMTIwMDgxLCAxMjAwODUsIDEyMDA4OSwgMTIwMDkzLCAxMjAwOTcsIDEyMDEwMiwgMTIwMTA2LCAxMjAxMTAsIAotICAgIDEyMDExNCwgMTIwMTE4LCAxMjAxMjIsIDEyMDEyNiwgMTIwMTMwLCAxMjAxMzQsIDEyMDEzOCwgMTIwMTQ0LCAxMjAxNDksIAotICAgIDEyMDE1NCwgMTIwMTU5LCAxMjAxNjQsIDEyMDE2OSwgMTIwMTc0LCAxMjAxNzksIDEyMDE4NCwgMTIwMTg5LCAxMjAxOTUsIAotICAgIDEyMDIwMCwgMTIwMjA1LCAxMjAyMTAsIDEyMDIxNSwgMTIwMjIwLCAxMjAyMjUsIDEyMDIzMCwgMTIwMjM1LCAxMjAyNDAsIAotICAgIDEyMDI0NCwgMTIwMjQ4LCAxMjAyNTIsIDAsIDEyMDI1NiwgMTIwMjYwLCAxMjAyNjQsIDEyMDI2OCwgMTIwMjcyLCAKLSAgICAxMjAyNzYsIDEyMDI4MCwgMTIwMjg0LCAxMjAyODgsIDEyMDI5MiwgMTIwMjk2LCAxMjAzMDAsIDEyMDMwNCwgMTIwMzA4LCAKLSAgICAxMjAzMTIsIDEyMDMxNiwgMTIwMzIwLCAxMjAzMjQsIDEyMDMyOCwgMTIwMzMyLCAxMjAzMzYsIDEyMDM0MCwgMTIwMzQ0LCAKLSAgICAxMjAzNDgsIDEyMDM1NCwgMTIwMzYwLCAxMjAzNjYsIDAsIDEyMDM3MiwgMTIwMzc3LCAwLCAxMjAzODIsIDAsIDAsIAotICAgIDEyMDM4NywgMCwgMTIwMzkyLCAxMjAzOTcsIDEyMDQwMiwgMTIwNDA3LCAxMjA0MTIsIDEyMDQxNywgMTIwNDIyLCAKLSAgICAxMjA0MjcsIDEyMDQzMiwgMTIwNDM3LCAwLCAxMjA0NDIsIDEyMDQ0NywgMTIwNDUyLCAxMjA0NTcsIDAsIDEyMDQ2MiwgMCwgCi0gICAgMTIwNDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA0NzIsIDAsIDAsIDAsIDAsIDEyMDQ3OCwgMCwgMTIwNDg0LCAwLCAKLSAgICAxMjA0OTAsIDAsIDEyMDQ5NiwgMTIwNTAyLCAxMjA1MDgsIDAsIDEyMDUxNCwgMTIwNTIwLCAwLCAxMjA1MjYsIDAsIDAsIAotICAgIDEyMDUzMiwgMCwgMTIwNTM4LCAwLCAxMjA1NDQsIDAsIDEyMDU1MCwgMCwgMTIwNTU4LCAwLCAxMjA1NjYsIDEyMDU3MiwgMCwgCi0gICAgMTIwNTc4LCAwLCAwLCAxMjA1ODQsIDEyMDU5MCwgMTIwNTk2LCAxMjA2MDIsIDAsIDEyMDYwOCwgMTIwNjE0LCAxMjA2MjAsIAotICAgIDEyMDYyNiwgMTIwNjMyLCAxMjA2MzgsIDEyMDY0NCwgMCwgMTIwNjUwLCAxMjA2NTYsIDEyMDY2MiwgMTIwNjY4LCAwLCAKLSAgICAxMjA2NzQsIDEyMDY4MCwgMTIwNjg2LCAxMjA2OTIsIDAsIDEyMDcwMCwgMCwgMTIwNzA4LCAxMjA3MTQsIDEyMDcyMCwgCi0gICAgMTIwNzI2LCAxMjA3MzIsIDEyMDczOCwgMTIwNzQ0LCAxMjA3NTAsIDEyMDc1NiwgMTIwNzYyLCAwLCAxMjA3NjgsIAotICAgIDEyMDc3NCwgMTIwNzgwLCAxMjA3ODYsIDEyMDc5MiwgMTIwNzk4LCAxMjA4MDQsIDEyMDgxMCwgMTIwODE2LCAxMjA4MjIsIAotICAgIDEyMDgyOCwgMTIwODM0LCAxMjA4NDAsIDEyMDg0NiwgMTIwODUyLCAxMjA4NTgsIDEyMDg2NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIwODcwLCAxMjA4NzUsIDEyMDg4MCwgMCwgMTIwODg1LCAxMjA4OTAsIDEyMDg5NSwgMTIwOTAwLCAxMjA5MDUsIDAsIAotICAgIDEyMDkxMCwgMTIwOTE1LCAxMjA5MjAsIDEyMDkyNSwgMTIwOTMwLCAxMjA5MzUsIDEyMDk0MCwgMTIwOTQ1LCAxMjA5NTAsIAotICAgIDEyMDk1NSwgMTIwOTYwLCAxMjA5NjUsIDEyMDk3MCwgMTIwOTc1LCAxMjA5ODAsIDEyMDk4NSwgMTIwOTkwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjA5OTUsIDEyMTAwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxMDEzLCAKLSAgICAxMjEwMjAsIDEyMTAyNywgMTIxMDM0LCAxMjEwNDEsIDEyMTA0OCwgMTIxMDU1LCAxMjEwNjEsIDEyMTA2OCwgMTIxMDc1LCAKLSAgICAxMjEwODIsIDEyMTA5MCwgMTIxMDk4LCAxMjExMDYsIDEyMTExNCwgMTIxMTIyLCAxMjExMzAsIDEyMTEzNywgMTIxMTQ0LCAKLSAgICAxMjExNTEsIDEyMTE1OSwgMTIxMTY3LCAxMjExNzUsIDEyMTE4MywgMTIxMTkxLCAxMjExOTksIDEyMTIwNiwgMTIxMjEzLCAKLSAgICAxMjEyMjAsIDEyMTIyOCwgMTIxMjM2LCAxMjEyNDQsIDEyMTI1MiwgMTIxMjYwLCAxMjEyNjgsIDEyMTI3MywgMTIxMjc4LCAKLSAgICAxMjEyODMsIDEyMTI4OCwgMTIxMjkzLCAxMjEyOTgsIDEyMTMwMywgMTIxMzA4LCAxMjEzMTMsIDAsIDAsIDAsIDAsIAotICAgIDEyMTMxOCwgMTIxMzIzLCAxMjEzMjcsIDEyMTMzMSwgMTIxMzM1LCAxMjEzMzksIDEyMTM0MywgMTIxMzQ3LCAxMjEzNTEsIAotICAgIDEyMTM1NSwgMTIxMzU5LCAxMjEzNjMsIDEyMTM2NywgMTIxMzcxLCAxMjEzNzUsIDEyMTM3OSwgMTIxMzgzLCAxMjEzODcsIAotICAgIDEyMTM5MSwgMTIxMzk1LCAxMjEzOTksIDEyMTQwMywgMTIxNDA3LCAxMjE0MTEsIDEyMTQxNSwgMTIxNDE5LCAxMjE0MjMsIAotICAgIDEyMTQyNywgMTIxNDMxLCAxMjE0MzUsIDEyMTQzOSwgMTIxNDQzLCAxMjE0NDcsIDEyMTQ1MSwgMTIxNDU1LCAxMjE0NTksIAotICAgIDEyMTQ2MywgMTIxNDY3LCAxMjE0NzEsIDEyMTQ3NSwgMTIxNDc5LCAxMjE0ODMsIDEyMTQ4NywgMTIxNDkxLCAxMjE0OTUsIAotICAgIDEyMTQ5OSwgMTIxNTAzLCAxMjE1MDcsIDEyMTUxMSwgMTIxNTE1LCAxMjE1MTksIDEyMTUyNCwgMTIxNTI4LCAxMjE1MzIsIAotICAgIDEyMTUzNiwgMTIxNTQwLCAxMjE1NDQsIDEyMTU0OCwgMTIxNTUyLCAxMjE1NTYsIDEyMTU2MCwgMTIxNTY0LCAxMjE1NjgsIAotICAgIDEyMTU3MiwgMTIxNTc2LCAxMjE1ODAsIDEyMTU4NCwgMTIxNTg4LCAxMjE1OTIsIDEyMTU5NiwgMTIxNjAwLCAxMjE2MDQsIAotICAgIDEyMTYwOCwgMTIxNjEyLCAxMjE2MTYsIDEyMTYyMCwgMTIxNjI0LCAxMjE2MjgsIDEyMTYzMiwgMTIxNjM2LCAxMjE2NDAsIAotICAgIDEyMTY0NCwgMTIxNjQ4LCAxMjE2NTIsIDEyMTY1NiwgMTIxNjYwLCAxMjE2NjQsIDEyMTY2OCwgMTIxNjcyLCAxMjE2NzYsIAotICAgIDEyMTY4MCwgMTIxNjg0LCAxMjE2ODgsIDEyMTY5MiwgMTIxNjk2LCAxMjE3MDAsIDEyMTcwNCwgMTIxNzA4LCAxMjE3MTIsIAotICAgIDEyMTcxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNzIwLCAxMjE3MjYsIDEyMTczNSwgCi0gICAgMTIxNzQzLCAxMjE3NTEsIDEyMTc2MCwgMTIxNzY5LCAxMjE3NzgsIDEyMTc4NywgMTIxNzk2LCAxMjE4MDUsIDEyMTgxNCwgCi0gICAgMTIxODIzLCAxMjE4MzIsIDEyMTg0MSwgMCwgMCwgMTIxODUwLCAxMjE4NTksIDEyMTg2NywgMTIxODc1LCAxMjE4ODQsIAotICAgIDEyMTg5MywgMTIxOTAyLCAxMjE5MTEsIDEyMTkyMCwgMTIxOTI5LCAxMjE5MzgsIDEyMTk0NywgMTIxOTU2LCAxMjE5NjUsIAotICAgIDAsIDAsIDEyMTk3NCwgMTIxOTgzLCAxMjE5OTEsIDEyMTk5OSwgMTIyMDA4LCAxMjIwMTcsIDEyMjAyNiwgMTIyMDM1LCAKLSAgICAxMjIwNDQsIDEyMjA1MywgMTIyMDYyLCAxMjIwNzEsIDEyMjA4MCwgMTIyMDg5LCAxMjIwOTgsIDAsIDEyMjEwNSwgCi0gICAgMTIyMTE0LCAxMjIxMjIsIDEyMjEzMCwgMTIyMTM5LCAxMjIxNDgsIDEyMjE1NywgMTIyMTY2LCAxMjIxNzUsIDEyMjE4NCwgCi0gICAgMTIyMTkzLCAxMjIyMDIsIDEyMjIxMSwgMTIyMjIwLCAxMjIyMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjIzNiwgCi0gICAgMTIyMjQzLCAxMjIyNDgsIDEyMjI1MiwgMTIyMjU2LCAxMjIyNjAsIDEyMjI2NSwgMTIyMjcwLCAxMjIyNzUsIDEyMjI4MCwgCi0gICAgMTIyMjg1LCAwLCAwLCAwLCAwLCAwLCAxMjIyOTAsIDEyMjI5NSwgMTIyMzAxLCAxMjIzMDcsIDEyMjMxMywgMTIyMzE4LCAKLSAgICAxMjIzMjQsIDEyMjMzMCwgMTIyMzM2LCAxMjIzNDEsIDEyMjM0NywgMTIyMzUzLCAxMjIzNTgsIDEyMjM2MywgMTIyMzY5LCAKLSAgICAxMjIzNzQsIDEyMjM4MCwgMTIyMzg2LCAxMjIzOTEsIDEyMjM5NywgMTIyNDAzLCAxMjI0MDgsIDEyMjQxNCwgMTIyNDIwLCAKLSAgICAxMjI0MjYsIDEyMjQzMiwgMTIyNDM4LCAxMjI0NDksIDEyMjQ1NiwgMTIyNDYyLCAxMjI0NjUsIDAsIDEyMjQ2OCwgCi0gICAgMTIyNDczLCAxMjI0NzksIDEyMjQ4NSwgMTIyNDkxLCAxMjI0OTYsIDEyMjUwMiwgMTIyNTA4LCAxMjI1MTQsIDEyMjUxOSwgCi0gICAgMTIyNTI1LCAxMjI1MzEsIDEyMjUzNiwgMTIyNTQxLCAxMjI1NDcsIDEyMjU1MiwgMTIyNTU4LCAxMjI1NjQsIDEyMjU2OSwgCi0gICAgMTIyNTc1LCAxMjI1ODEsIDEyMjU4NiwgMTIyNTkyLCAxMjI1OTgsIDEyMjYwNCwgMTIyNjEwLCAxMjI2MTYsIDEyMjYxOSwgCi0gICAgMTIyNjIyLCAxMjI2MjUsIDEyMjYyOCwgMTIyNjMxLCAxMjI2MzQsIDEyMjY0MCwgMTIyNjQ3LCAxMjI2NTQsIDEyMjY2MSwgCi0gICAgMTIyNjY3LCAxMjI2NzQsIDEyMjY4MSwgMTIyNjg4LCAxMjI2OTQsIDEyMjcwMSwgMTIyNzA4LCAxMjI3MTQsIDEyMjcyMCwgCi0gICAgMTIyNzI3LCAxMjI3MzMsIDEyMjc0MCwgMTIyNzQ3LCAxMjI3NTMsIDEyMjc2MCwgMTIyNzY3LCAxMjI3NzMsIDEyMjc4MCwgCi0gICAgMTIyNzg3LCAxMjI3OTQsIDEyMjgwMSwgMTIyODA4LCAxMjI4MTMsIDAsIDAsIDAsIDAsIDEyMjgxOCwgMTIyODI0LCAKLSAgICAxMjI4MzEsIDEyMjgzOCwgMTIyODQ1LCAxMjI4NTEsIDEyMjg1OCwgMTIyODY1LCAxMjI4NzIsIDEyMjg3OCwgMTIyODg1LCAKLSAgICAxMjI4OTIsIDEyMjg5OCwgMTIyOTA0LCAxMjI5MTEsIDEyMjkxNywgMTIyOTI0LCAxMjI5MzEsIDEyMjkzNywgMTIyOTQ0LCAKLSAgICAxMjI5NTEsIDEyMjk1NywgMTIyOTY0LCAxMjI5NzEsIDEyMjk3OCwgMTIyOTg1LCAxMjI5OTIsIDEyMzAwMSwgMTIzMDA1LCAKLSAgICAxMjMwMDgsIDEyMzAxMSwgMTIzMDE1LCAxMjMwMTksIDEyMzAyMiwgMTIzMDI1LCAxMjMwMjgsIDEyMzAzMSwgMTIzMDM0LCAKLSAgICAxMjMwMzcsIDEyMzA0MCwgMTIzMDQzLCAxMjMwNDYsIDEyMzA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMDU1LCAxMjMwNjIsIDEyMzA3MCwgCi0gICAgMTIzMDc4LCAxMjMwODYsIDEyMzA5MywgMTIzMTAxLCAxMjMxMDksIDEyMzExNywgMTIzMTI0LCAxMjMxMzIsIDEyMzE0MCwgCi0gICAgMTIzMTQ3LCAxMjMxNTQsIDEyMzE2MiwgMTIzMTY5LCAxMjMxNzcsIDEyMzE4NSwgMTIzMTkyLCAxMjMyMDAsIDEyMzIwOCwgCi0gICAgMTIzMjE1LCAxMjMyMjMsIDEyMzIzMSwgMTIzMjM5LCAxMjMyNDcsIDEyMzI1NSwgMTIzMjU5LCAxMjMyNjMsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzI2NiwgMTIzMjcyLCAxMjMyNzgsIDEyMzI4NCwgMTIzMjg4LCAKLSAgICAxMjMyOTQsIDEyMzMwMCwgMTIzMzA2LCAxMjMzMTIsIDEyMzMxOCwgMTIzMzI0LCAxMjMzMzAsIDEyMzMzNiwgMTIzMzQyLCAKLSAgICAxMjMzNDgsIDEyMzM1NCwgMTIzMzYwLCAxMjMzNjYsIDEyMzM3MiwgMTIzMzc4LCAxMjMzODQsIDEyMzM5MCwgMTIzMzk2LCAKLSAgICAxMjM0MDIsIDEyMzQwOCwgMTIzNDE0LCAxMjM0MjAsIDEyMzQyNiwgMTIzNDMyLCAxMjM0MzgsIDEyMzQ0NCwgMTIzNDUwLCAKLSAgICAxMjM0NTYsIDEyMzQ2MiwgMTIzNDY4LCAxMjM0NzQsIDEyMzQ4MCwgMTIzNDg2LCAxMjM0OTIsIDEyMzQ5OCwgMTIzNTA0LCAKLSAgICAxMjM1MTAsIDEyMzUxNiwgMCwgMCwgMCwgMCwgMCwgMTIzNTIyLCAxMjM1MzMsIDEyMzU0NCwgMTIzNTU1LCAxMjM1NjYsIAotICAgIDEyMzU3NywgMTIzNTg4LCAxMjM1OTksIDEyMzYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNjIxLCAxMjM2MjUsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzYyOSwgCi0gICAgMTIzNjMxLCAxMjM2MzMsIDEyMzYzNywgMTIzNjQyLCAxMjM2NDcsIDEyMzY0OSwgMTIzNjU1LCAxMjM2NjAsIDEyMzY2MiwgCi0gICAgMTIzNjY4LCAxMjM2NzIsIDEyMzY3NCwgMTIzNjc4LCAxMjM2ODQsIDEyMzY5MCwgMTIzNjk2LCAxMjM3MDEsIDEyMzcwNSwgCi0gICAgMTIzNzEyLCAxMjM3MTksIDEyMzcyNiwgMTIzNzMxLCAxMjM3MzgsIDEyMzc0NSwgMTIzNzUyLCAxMjM3NTYsIDEyMzc2MiwgCi0gICAgMTIzNzcxLCAxMjM3ODAsIDEyMzc4NywgMTIzNzkyLCAxMjM3OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMzgwMCwgMTIzODAyLCAxMjM4MDQsIDEyMzgwOCwgMTIzODEyLCAxMjM4MTYsIDAsIDEyMzgxOCwgCi0gICAgMTIzODIwLCAxMjM4MjQsIDEyMzgyNiwgMTIzODI4LCAxMjM4MzAsIDEyMzgzMiwgMTIzODM3LCAxMjM4NDIsIDEyMzg0NCwgCi0gICAgMTIzODUwLCAxMjM4NTQsIDEyMzg1OCwgMTIzODY2LCAxMjM4NjgsIDEyMzg3MCwgMTIzODcyLCAxMjM4NzQsIDEyMzg3NiwgCi0gICAgMTIzODc4LCAxMjM4ODAsIDEyMzg4MiwgMTIzODg0LCAxMjM4ODYsIDEyMzg5MCwgMTIzODk0LCAxMjM4OTYsIDEyMzg5OCwgCi0gICAgMTIzOTAwLCAxMjM5MDIsIDEyMzkwNCwgMTIzOTA5LCAxMjM5MTUsIDEyMzkxOSwgMTIzOTIzLCAxMjM5MjcsIDEyMzkzMSwgCi0gICAgMTIzOTM2LCAxMjM5NDAsIDEyMzk0MiwgMTIzOTQ0LCAxMjM5NDgsIDEyMzk1NCwgMTIzOTU2LCAxMjM5NTgsIDEyMzk2MCwgCi0gICAgMTIzOTY0LCAxMjM5NzMsIDEyMzk3OSwgMTIzOTgzLCAxMjM5ODcsIDEyMzk4OSwgMTIzOTkxLCAxMjM5OTQsIDEyMzk5NiwgCi0gICAgMTIzOTk4LCAxMjQwMDAsIDEyNDAwNCwgMTI0MDA2LCAxMjQwMTAsIDEyNDAxNSwgMTI0MDE3LCAxMjQwMjIsIDEyNDAyOCwgCi0gICAgMTI0MDM1LCAxMjQwMzksIDEyNDA0MywgMTI0MDQ3LCAxMjQwNTEsIDEyNDA1NywgMCwgMCwgMCwgMTI0MDYxLCAxMjQwNjMsIAotICAgIDEyNDA2NywgMTI0MDcxLCAxMjQwNzMsIDEyNDA3NywgMTI0MDgxLCAxMjQwODMsIDEyNDA4NywgMTI0MDg5LCAxMjQwOTMsIAotICAgIDEyNDA5NywgMTI0MTAxLCAxMjQxMDUsIDEyNDEwOSwgMTI0MTEzLCAxMjQxMTcsIDEyNDEyMSwgMTI0MTI3LCAxMjQxMzEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDEzNSwgMTI0MTM5LCAxMjQxNDMsIDEyNDE0NywgCi0gICAgMTI0MTU0LCAxMjQxNTYsIDEyNDE2MCwgMTI0MTYyLCAxMjQxNjQsIDEyNDE2OCwgMTI0MTcyLCAxMjQxNzYsIDEyNDE3OCwgCi0gICAgMTI0MTgyLCAxMjQxODYsIDEyNDE5MCwgMTI0MTk0LCAxMjQxOTgsIDEyNDIwMCwgMTI0MjA0LCAxMjQyMDYsIDEyNDIxMiwgCi0gICAgMTI0MjE1LCAxMjQyMjAsIDEyNDIyMiwgMTI0MjI0LCAxMjQyMjcsIDEyNDIyOSwgMTI0MjMxLCAxMjQyMzQsIDEyNDI0MSwgCi0gICAgMTI0MjQ4LCAxMjQyNTUsIDEyNDI2MCwgMTI0MjY0LCAxMjQyNjYsIDEyNDI2OCwgMCwgMTI0MjcwLCAxMjQyNzIsIAotICAgIDEyNDI3NiwgMTI0MjgwLCAxMjQyODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEyNDI4NiwgMTI0MjkwLCAxMjQyOTUsIDEyNDI5OSwgMTI0MzA1LCAxMjQzMTEsIDEyNDMxMywgCi0gICAgMTI0MzE1LCAxMjQzMjEsIDEyNDMyMywgMTI0MzI3LCAxMjQzMzEsIDEyNDMzMywgMTI0MzM3LCAxMjQzMzksIDEyNDM0MywgCi0gICAgMTI0MzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQzNTEsIDEyNDM1MywgCi0gICAgMTI0MzU1LCAxMjQzNTcsIDEyNDM2MSwgMTI0MzYzLCAxMjQzNjUsIDEyNDM2NywgMTI0MzY5LCAxMjQzNzEsIDEyNDM3MywgCi0gICAgMTI0Mzc1LCAxMjQzNzcsIDEyNDM3OSwgMTI0MzgxLCAxMjQzODMsIDEyNDM4NSwgMTI0Mzg3LCAxMjQzODksIDEyNDM5MSwgCi0gICAgMTI0MzkzLCAxMjQzOTUsIDEyNDM5NywgMTI0Mzk5LCAxMjQ0MDEsIDEyNDQwMywgMTI0NDA1LCAxMjQ0MDksIDEyNDQxMSwgCi0gICAgMTI0NDEzLCAxMjQ0MTUsIDEyNDQxOSwgMTI0NDIxLCAxMjQ0MjUsIDEyNDQyNywgMTI0NDI5LCAxMjQ0MzMsIDEyNDQzNywgCi0gICAgMTI0NDQzLCAxMjQ0NDUsIDEyNDQ0NywgMTI0NDQ5LCAxMjQ0NTEsIDEyNDQ1NSwgMTI0NDU5LCAxMjQ0NjEsIDEyNDQ2NSwgCi0gICAgMTI0NDY5LCAxMjQ0NzMsIDEyNDQ3NywgMTI0NDgxLCAxMjQ0ODUsIDEyNDQ4OSwgMTI0NDkzLCAxMjQ0OTcsIDEyNDUwMSwgCi0gICAgMTI0NTA1LCAxMjQ1MDksIDEyNDUxMywgMTI0NTE3LCAxMjQ1MjEsIDEyNDUyNSwgMTI0NTI5LCAwLCAxMjQ1MzMsIDAsIAotICAgIDEyNDUzNSwgMTI0NTM3LCAxMjQ1MzksIDEyNDU0MSwgMTI0NTQzLCAxMjQ1NTEsIDEyNDU1OSwgMTI0NTY3LCAxMjQ1NzUsIAotICAgIDEyNDU4MCwgMTI0NTg1LCAxMjQ1OTAsIDEyNDU5NCwgMTI0NTk4LCAxMjQ2MDMsIDEyNDYwNywgMTI0NjA5LCAxMjQ2MTMsIAotICAgIDEyNDYxNSwgMTI0NjE3LCAxMjQ2MTksIDEyNDYyMSwgMTI0NjIzLCAxMjQ2MjUsIDEyNDYyNywgMTI0NjMxLCAxMjQ2MzMsIAotICAgIDEyNDYzNSwgMTI0NjM3LCAxMjQ2NDEsIDEyNDY0NSwgMTI0NjQ5LCAxMjQ2NTMsIDEyNDY1NywgMTI0NjU5LCAxMjQ2NjUsIAotICAgIDEyNDY3MSwgMTI0NjczLCAxMjQ2NzUsIDEyNDY3NywgMTI0Njc5LCAxMjQ2ODEsIDEyNDY5MCwgMTI0Njk3LCAxMjQ3MDQsIAotICAgIDEyNDcwOCwgMTI0NzE1LCAxMjQ3MjAsIDEyNDcyNywgMTI0NzM2LCAxMjQ3NDEsIDEyNDc0NSwgMTI0NzQ5LCAxMjQ3NTEsIAotICAgIDEyNDc1NSwgMTI0NzU3LCAxMjQ3NjEsIDEyNDc2NSwgMTI0NzY3LCAxMjQ3NzEsIDEyNDc3NSwgMTI0Nzc5LCAxMjQ3ODEsIAotICAgIDEyNDc4MywgMTI0Nzg5LCAxMjQ3OTEsIDEyNDc5MywgMTI0Nzk1LCAxMjQ3OTksIDEyNDgwMywgMTI0ODA1LCAxMjQ4MDksIAotICAgIDEyNDgxMSwgMTI0ODEzLCAxMjQ4MTYsIDEyNDgyMCwgMTI0ODIyLCAxMjQ4MjYsIDEyNDgyOCwgMTI0ODMwLCAxMjQ4MzUsIAotICAgIDEyNDgzNywgMTI0ODQxLCAxMjQ4NDUsIDEyNDg0OCwgMTI0ODUyLCAxMjQ4NTYsIDEyNDg2MCwgMTI0ODY0LCAxMjQ4NjgsIAotICAgIDEyNDg3MiwgMTI0ODc2LCAxMjQ4ODEsIDEyNDg4NSwgMTI0ODg5LCAxMjQ4OTgsIDEyNDkwMywgMTI0OTA2LCAxMjQ5MDgsIAotICAgIDEyNDkxMSwgMTI0OTE0LCAxMjQ5MTksIDEyNDkyMSwgMTI0OTI0LCAxMjQ5MjksIDEyNDkzMywgMTI0OTM2LCAxMjQ5NDAsIAotICAgIDEyNDk0NCwgMTI0OTQ3LCAxMjQ5NTIsIDEyNDk1NiwgMTI0OTYwLCAxMjQ5NjQsIDEyNDk2OCwgMTI0OTc0LCAxMjQ5ODAsIAotICAgIDEyNDk4NiwgMTI0OTkyLCAxMjQ5OTcsIDEyNTAwOCwgMTI1MDEwLCAxMjUwMTQsIDEyNTAxNiwgMTI1MDE4LCAxMjUwMjIsIAotICAgIDEyNTAyNiwgMTI1MDI4LCAxMjUwMzIsIDEyNTAzNywgMTI1MDQyLCAxMjUwNDgsIDEyNTA1MCwgMTI1MDU0LCAxMjUwNTgsIAotICAgIDEyNTA2NSwgMTI1MDcyLCAxMjUwNzYsIDEyNTA3OCwgMTI1MDgwLCAxMjUwODQsIDEyNTA4NiwgMTI1MDkwLCAxMjUwOTQsIAotICAgIDEyNTA5OCwgMTI1MTAwLCAxMjUxMDIsIDEyNTEwOSwgMTI1MTEzLCAxMjUxMTYsIDEyNTEyMCwgMTI1MTI0LCAxMjUxMjgsIAotICAgIDEyNTEzMCwgMTI1MTM0LCAxMjUxMzYsIDEyNTEzOCwgMTI1MTQyLCAxMjUxNDQsIDEyNTE0OCwgMTI1MTUyLCAxMjUxNTgsIAotICAgIDEyNTE2MiwgMTI1MTY2LCAxMjUxNzAsIDEyNTE3MiwgMTI1MTc1LCAxMjUxNzksIDEyNTE4NiwgMTI1MTk1LCAxMjUyMDQsIAotICAgIDEyNTIxMiwgMTI1MjIwLCAxMjUyMjIsIDEyNTIyNiwgMTI1MjI4LCAxMjUyMzIsIDEyNTI0MywgMTI1MjQ3LCAxMjUyNTMsIAotICAgIDEyNTI1OSwgMTI1MjY0LCAwLCAxMjUyNjYsIDEyNTI3MCwgMTI1MjcyLCAxMjUyNzQsIDAsIDAsIDAsIDEyNTI3NiwgCi0gICAgMTI1MjgxLCAxMjUyOTEsIDEyNTMwNiwgMTI1MzE4LCAxMjUzMzAsIDEyNTMzNCwgMTI1MzM4LCAxMjUzNDQsIDEyNTM0NiwgCi0gICAgMTI1MzU0LCAxMjUzNjIsIDEyNTM2NCwgMTI1MzY4LCAxMjUzNzQsIDEyNTM4MCwgMTI1Mzg3LCAxMjUzOTQsIDEyNTM5NiwgCi0gICAgMTI1Mzk4LCAxMjU0MDEsIDEyNTQwMywgMTI1NDA5LCAxMjU0MTEsIDEyNTQxNCwgMTI1NDE4LCAxMjU0MjQsIDEyNTQzMCwgCi0gICAgMTI1NDQxLCAxMjU0NDcsIDEyNTQ1NCwgMTI1NDYyLCAxMjU0NjYsIDEyNTQ3NCwgMTI1NDgyLCAxMjU0ODgsIDEyNTQ5NCwgCi0gICAgMTI1NTAxLCAxMjU1MDMsIDEyNTUwNywgMTI1NTA5LCAxMjU1MTEsIDEyNTUxNiwgMTI1NTE4LCAxMjU1MjAsIDEyNTUyMiwgCi0gICAgMTI1NTI0LCAxMjU1MjgsIDEyNTUzOSwgMTI1NTQ1LCAxMjU1NDksIDEyNTU1MywgMTI1NTU3LCAxMjU1NjMsIDEyNTU2OSwgCi0gICAgMTI1NTc1LCAxMjU1ODEsIDEyNTU4NiwgMTI1NTkxLCAxMjU1OTcsIDEyNTYwMywgMTI1NjEwLCAwLCAwLCAxMjU2MTcsIAotICAgIDEyNTYyMiwgMTI1NjMwLCAxMjU2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTY0MywgCi0gICAgMTI1NjUwLCAxMjU2NTcsIDEyNTY2NCwgMTI1NjcyLCAxMjU2ODAsIDEyNTY4OCwgMTI1Njk2LCAxMjU3MDQsIDEyNTcxMiwgCi0gICAgMTI1NzIwLCAxMjU3MjgsIDEyNTczNiwgMTI1NzQyLCAxMjU3NDgsIDEyNTc1NCwgMTI1NzYwLCAxMjU3NjYsIDEyNTc3MiwgCi0gICAgMTI1Nzc4LCAxMjU3ODQsIDEyNTc5MCwgMTI1Nzk2LCAxMjU4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDk2MzYxLCA5NjM2NiwgOTYzNzEsIDk2Mzc2LCA5NjM4MSwgOTYzODYsIDk2MzkxLCA5NjM5NiwgOTY0MDEsIAorICAgIDk2NDA2LCA5NjQxMSwgOTY0MTYsIDk2NDIxLCA5NjQyNiwgOTY0MzEsIDk2NDM2LCA5NjQ0MSwgOTY0NDYsIDk2NDUxLCAKKyAgICA5NjQ1NiwgOTY0NjEsIDk2NDY2LCA5NjQ3MSwgOTY0NzYsIDk2NDgxLCA5NjQ4NiwgOTY0OTEsIDk2NDk2LCA5NjUwMSwgCisgICAgOTY1MDYsIDk2NTExLCA5NjUxNiwgOTY1MjEsIDk2NTI2LCA5NjUzMSwgOTY1MzYsIDk2NTQxLCA5NjU0NiwgOTY1NTEsIAorICAgIDk2NTU2LCA5NjU2MSwgOTY1NjYsIDk2NTcxLCA5NjU3NiwgOTY1ODEsIDk2NTg2LCA5NjU5MSwgOTY1OTYsIDk2NjAxLCAKKyAgICA5NjYwNiwgOTY2MTEsIDk2NjE2LCA5NjYyMSwgOTY2MjYsIDk2NjMxLCA5NjYzNiwgOTY2NDEsIDk2NjQ2LCA5NjY1MSwgCisgICAgOTY2NTYsIDk2NjYxLCA5NjY2NiwgOTY2NzEsIDk2Njc2LCA5NjY4MSwgOTY2ODYsIDk2NjkxLCA5NjY5NiwgOTY3MDEsIAorICAgIDk2NzA2LCA5NjcxMSwgOTY3MTYsIDk2NzIxLCA5NjcyNiwgOTY3MzEsIDk2NzM2LCA5Njc0MSwgOTY3NDYsIDk2NzUxLCAKKyAgICA5Njc1NiwgOTY3NjEsIDk2NzY2LCA5Njc3MSwgOTY3NzYsIDk2NzgxLCA5Njc4NiwgOTY3OTEsIDk2Nzk2LCA5NjgwMSwgCisgICAgOTY4MDYsIDk2ODExLCA5NjgxNiwgOTY4MjEsIDk2ODI2LCA5NjgzMSwgOTY4MzYsIDk2ODQxLCA5Njg0NiwgOTY4NTEsIAorICAgIDk2ODU2LCA5Njg2MSwgOTY4NjYsIDk2ODcxLCA5Njg3NiwgOTY4ODEsIDk2ODg2LCA5Njg5MSwgOTY4OTYsIDk2OTAxLCAKKyAgICA5NjkwNiwgOTY5MTEsIDk2OTE2LCA5NjkyMSwgOTY5MjYsIDk2OTMxLCA5NjkzNiwgOTY5NDEsIDk2OTQ2LCA5Njk1MSwgCisgICAgOTY5NTYsIDk2OTYxLCA5Njk2NiwgOTY5NzEsIDk2OTc2LCA5Njk4MSwgOTY5ODYsIDk2OTkxLCA5Njk5NiwgOTcwMDEsIAorICAgIDk3MDA2LCA5NzAxMSwgOTcwMTYsIDk3MDIxLCA5NzAyNiwgOTcwMzEsIDk3MDM2LCA5NzA0MSwgOTcwNDYsIDk3MDUxLCAKKyAgICA5NzA1NiwgOTcwNjEsIDk3MDY2LCA5NzA3MSwgOTcwNzYsIDk3MDgxLCA5NzA4NiwgOTcwOTEsIDk3MDk2LCA5NzEwMSwgCisgICAgOTcxMDYsIDk3MTExLCA5NzExNiwgOTcxMjEsIDk3MTI2LCA5NzEzMSwgOTcxMzYsIDk3MTQxLCA5NzE0NiwgOTcxNTEsIAorICAgIDk3MTU2LCA5NzE2MSwgOTcxNjYsIDk3MTcxLCA5NzE3NiwgOTcxODEsIDk3MTg2LCA5NzE5MSwgOTcxOTYsIDk3MjAxLCAKKyAgICA5NzIwNiwgOTcyMTEsIDk3MjE2LCA5NzIyMSwgOTcyMjYsIDk3MjMxLCA5NzIzNiwgOTcyNDEsIDk3MjQ2LCA5NzI1MSwgCisgICAgOTcyNTYsIDk3MjYxLCA5NzI2NiwgOTcyNzEsIDk3Mjc2LCA5NzI4MSwgOTcyODYsIDk3MjkxLCA5NzI5NiwgOTczMDEsIAorICAgIDk3MzA2LCA5NzMxMSwgOTczMTYsIDk3MzIxLCA5NzMyNiwgOTczMzEsIDk3MzM2LCA5NzM0MSwgOTczNDYsIDk3MzUxLCAKKyAgICA5NzM1NiwgOTczNjEsIDk3MzY2LCA5NzM3MSwgOTczNzYsIDk3MzgxLCA5NzM4NiwgOTczOTEsIDk3Mzk2LCA5NzQwMSwgCisgICAgOTc0MDYsIDk3NDExLCA5NzQxNiwgOTc0MjEsIDk3NDI2LCA5NzQzMSwgOTc0MzYsIDk3NDQxLCA5NzQ0NiwgOTc0NTEsIAorICAgIDk3NDU2LCA5NzQ2MSwgOTc0NjYsIDk3NDcxLCA5NzQ3NiwgOTc0ODEsIDk3NDg2LCA5NzQ5MSwgOTc0OTYsIDk3NTAxLCAKKyAgICA5NzUwNiwgOTc1MTEsIDk3NTE2LCA5NzUyMSwgOTc1MjYsIDk3NTMxLCA5NzUzNiwgOTc1NDEsIDk3NTQ2LCA5NzU1MSwgCisgICAgOTc1NTYsIDk3NTYxLCA5NzU2NiwgOTc1NzEsIDk3NTc2LCA5NzU4MSwgOTc1ODYsIDk3NTkxLCA5NzU5NiwgOTc2MDEsIAorICAgIDk3NjA2LCA5NzYxMSwgOTc2MTYsIDk3NjIxLCA5NzYyNiwgOTc2MzEsIDk3NjM2LCA5NzY0MSwgOTc2NDYsIDk3NjUxLCAKKyAgICA5NzY1NiwgOTc2NjEsIDk3NjY2LCA5NzY3MSwgOTc2NzYsIDk3NjgxLCA5NzY4NiwgOTc2OTEsIDk3Njk2LCA5NzcwMSwgCisgICAgOTc3MDYsIDk3NzExLCA5NzcxNiwgOTc3MjEsIDk3NzI2LCA5NzczMSwgOTc3MzYsIDk3NzQxLCA5Nzc0NiwgOTc3NTEsIAorICAgIDk3NzU2LCA5Nzc2MSwgOTc3NjYsIDk3NzcxLCA5Nzc3NiwgOTc3ODEsIDk3Nzg2LCA5Nzc5MSwgOTc3OTYsIDk3ODAxLCAKKyAgICA5NzgwNiwgOTc4MTEsIDk3ODE2LCA5NzgyMSwgOTc4MjYsIDk3ODMxLCA5NzgzNiwgOTc4NDEsIDk3ODQ2LCA5Nzg1MSwgCisgICAgOTc4NTYsIDk3ODYxLCA5Nzg2NiwgOTc4NzEsIDk3ODc2LCA5Nzg4MSwgOTc4ODYsIDk3ODkxLCA5Nzg5NiwgOTc5MDEsIAorICAgIDk3OTA2LCA5NzkxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTc5MTYsIDk3OTIyLCA5NzkyOSwgOTc5MzYsIAorICAgIDk3OTQyLCA5Nzk0OSwgOTc5NTYsIDk3OTYzLCA5Nzk3MCwgOTc5NzYsIDk3OTgzLCA5Nzk5MCwgOTc5OTcsIDk4MDA0LCAKKyAgICA5ODAxMSwgOTgwMTgsIDk4MDI1LCA5ODAzMiwgOTgwMzksIDk4MDQ2LCA5ODA1MywgOTgwNjAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDk4MDY3LCA5ODA3MiwgOTgwNzcsIDk4MDgyLCA5ODA4NywgOTgwOTIsIDk4MDk3LCA5ODEwMiwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1ODA4LCAxMjU4MTIsIDEyNTgxNiwgCi0gICAgMTI1ODIxLCAxMjU4MjYsIDEyNTgyOCwgMTI1ODMyLCAxMjU4NDEsIDEyNTg0OSwgMTI1ODU3LCAxMjU4NzAsIDEyNTg4MywgCi0gICAgMTI1ODk2LCAxMjU5MDMsIDEyNTkxMCwgMTI1OTE0LCAxMjU5MjMsIDEyNTkzMSwgMTI1OTM1LCAxMjU5NDQsIDEyNTk1MSwgCi0gICAgMTI1OTU1LCAxMjU5NTksIDEyNTk2MywgMTI1OTY3LCAxMjU5NzQsIDEyNTk3OCwgMTI1OTgyLCAxMjU5ODYsIDEyNTk5MCwgCi0gICAgMTI1OTk3LCAxMjYwMDYsIDEyNjAxNSwgMTI2MDIyLCAxMjYwMzQsIDEyNjA0NiwgMTI2MDUwLCAxMjYwNTQsIDEyNjA1OCwgCi0gICAgMTI2MDYyLCAxMjYwNjYsIDEyNjA3MCwgMTI2MDc4LCAxMjYwODYsIDEyNjA5NCwgMTI2MDk4LCAxMjYxMDIsIDEyNjEwNiwgCi0gICAgMTI2MTEwLCAxMjYxMTQsIDEyNjExOCwgMTI2MTI0LCAxMjYxMzAsIDEyNjEzNCwgMTI2MTQ1LCAxMjYxNTMsIDEyNjE1NywgCi0gICAgMTI2MTYxLCAxMjYxNjUsIDEyNjE2OSwgMTI2MTc1LCAxMjYxODIsIDEyNjE5MywgMTI2MjAzLCAxMjYyMTMsIDEyNjIyNCwgCi0gICAgMTI2MjMzLCAxMjYyNDQsIDEyNjI1MCwgMTI2MjU2LCAwLCAwLCAwLCAwLCAxMjYyNjIsIDEyNjI3MSwgMTI2Mjc4LCAKLSAgICAxMjYyODQsIDEyNjI4OCwgMTI2MjkyLCAxMjYyOTYsIDEyNjMwNSwgMTI2MzE3LCAxMjYzMjEsIDEyNjMyOCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MzM1LCAKLSAgICAxMjYzMzcsIDEyNjMzOSwgMTI2MzQzLCAxMjYzNDcsIDEyNjM1MSwgMTI2MzYwLCAxMjYzNjIsIDEyNjM2NCwgMTI2MzY3LCAKLSAgICAxMjYzNjksIDEyNjM3MSwgMTI2Mzc1LCAxMjYzNzcsIDEyNjM4MSwgMTI2MzgzLCAxMjYzODcsIDEyNjM4OSwgMTI2MzkxLCAKLSAgICAxMjYzOTUsIDEyNjM5OSwgMTI2NDA1LCAxMjY0MDcsIDEyNjQxMSwgMTI2NDEzLCAxMjY0MTcsIDEyNjQyMSwgMTI2NDI1LCAKLSAgICAxMjY0MjksIDEyNjQzMSwgMTI2NDMzLCAxMjY0MzcsIDEyNjQ0MSwgMTI2NDQ1LCAxMjY0NDksIDEyNjQ1MSwgMTI2NDUzLCAKLSAgICAxMjY0NTUsIDEyNjQ2MCwgMTI2NDY1LCAxMjY0NjgsIDEyNjQ3NiwgMTI2NDg0LCAxMjY0ODYsIDEyNjQ5MSwgMTI2NDk0LCAKLSAgICAxMjY0OTksIDEyNjUxMCwgMTI2NTE3LCAxMjY1MjIsIDEyNjUyNywgMTI2NTI5LCAxMjY1MzMsIDEyNjUzNSwgMTI2NTM5LCAKLSAgICAxMjY1NDEsIDEyNjU0NSwgMTI2NTQ5LCAxMjY1NTIsIDEyNjU1NSwgMTI2NTU3LCAxMjY1NjAsIDEyNjU2MiwgMTI2NTY2LCAKLSAgICAxMjY1NjgsIDEyNjU3MCwgMTI2NTcyLCAxMjY1NzYsIDEyNjU3OCwgMTI2NTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA5ODEwNywgOTgxMTEsIDk4MTE1LCA5ODExOSwgOTgxMjMsIDk4MTI3LCAwLCAwLCA5ODEzMiwgCisgICAgMCwgOTgxMzcsIDk4MTQxLCA5ODE0NiwgOTgxNTEsIDk4MTU2LCA5ODE2MSwgOTgxNjYsIDk4MTcxLCA5ODE3NiwgOTgxODEsIAorICAgIDk4MTg2LCA5ODE5MCwgOTgxOTUsIDk4MjAwLCA5ODIwNSwgOTgyMTAsIDk4MjE1LCA5ODIyMCwgOTgyMjUsIDk4MjMwLCAKKyAgICA5ODIzNSwgOTgyMzksIDk4MjQ0LCA5ODI0OSwgOTgyNTQsIDk4MjU5LCA5ODI2NCwgOTgyNjksIDk4Mjc0LCA5ODI3OSwgCisgICAgOTgyODQsIDk4Mjg5LCA5ODI5NCwgOTgyOTksIDk4MzA0LCA5ODMwOSwgOTgzMTQsIDk4MzE5LCA5ODMyNCwgOTgzMjgsIAorICAgIDk4MzMzLCA5ODMzOCwgOTgzNDMsIDk4MzQ4LCAwLCA5ODM1MywgOTgzNTgsIDAsIDAsIDAsIDk4MzYzLCAwLCAwLCA5ODM2OCwgCisgICAgOTgzNzMsIDk4MzgwLCA5ODM4NywgOTgzOTQsIDk4NDAxLCA5ODQwOCwgOTg0MTUsIDk4NDIyLCA5ODQyOSwgOTg0MzYsIAorICAgIDk4NDQzLCA5ODQ1MCwgOTg0NTcsIDk4NDY0LCA5ODQ3MSwgOTg0NzgsIDk4NDg1LCA5ODQ5MiwgOTg0OTksIDk4NTA2LCAKKyAgICA5ODUxMywgOTg1MjAsIDAsIDk4NTI3LCA5ODUzNCwgOTg1NDAsIDk4NTQ2LCA5ODU1MiwgOTg1NTksIDk4NTY2LCA5ODU3NCwgCisgICAgOTg1ODIsIDk4NTkxLCA5ODU5NiwgOTg2MDEsIDk4NjA2LCA5ODYxMSwgOTg2MTYsIDk4NjIxLCA5ODYyNiwgOTg2MzEsIAorICAgIDk4NjM2LCA5ODY0MSwgOTg2NDYsIDk4NjUxLCA5ODY1NiwgOTg2NjIsIDk4NjY3LCA5ODY3MiwgOTg2NzcsIDk4NjgyLCAKKyAgICA5ODY4NywgOTg2OTIsIDk4Njk3LCA5ODcwMiwgOTg3MDcsIDk4NzEzLCA5ODcxOSwgOTg3MjMsIDk4NzI3LCA5ODczMSwgCisgICAgOTg3MzUsIDk4NzM5LCA5ODc0NCwgOTg3NDksIDk4NzU1LCA5ODc2MCwgOTg3NjYsIDk4NzcxLCA5ODc3NiwgOTg3ODEsIAorICAgIDk4Nzg3LCA5ODc5MiwgOTg3OTcsIDk4ODAyLCA5ODgwNywgOTg4MTIsIDk4ODE4LCA5ODgyMywgOTg4MjksIDk4ODM0LCAKKyAgICA5ODg0MCwgOTg4NDUsIDk4ODUxLCA5ODg1NiwgOTg4NjIsIDk4ODY3LCA5ODg3MiwgOTg4NzcsIDk4ODgyLCA5ODg4NywgCisgICAgOTg4OTIsIDk4ODk3LCA5ODkwMywgOTg5MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk4OTEzLCA5ODkxNywgOTg5MjEsIAorICAgIDk4OTI1LCA5ODkyOSwgOTg5MzUsIDk4OTM5LCA5ODk0NCwgOTg5NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk4OTU1LCA5ODk2MCwgOTg5NjUsIDk4OTcwLCAKKyAgICA5ODk3NSwgOTg5ODAsIDk4OTg1LCA5ODk5MCwgOTg5OTUsIDk5MDAwLCA5OTAwNSwgOTkwMTAsIDk5MDE1LCA5OTAyMCwgCisgICAgOTkwMjUsIDk5MDMwLCA5OTAzNSwgOTkwNDAsIDk5MDQ1LCAwLCA5OTA1MCwgOTkwNTUsIDAsIDAsIDAsIDAsIDAsIDk5MDYwLCAKKyAgICA5OTA2NCwgOTkwNjgsIDk5MDczLCA5OTA3OCwgOTkwODQsIDk5MDg5LCA5OTA5NCwgOTkwOTksIDk5MTA0LCA5OTEwOSwgCisgICAgOTkxMTQsIDk5MTE5LCA5OTEyNCwgOTkxMjksIDk5MTM0LCA5OTEzOSwgOTkxNDQsIDk5MTQ5LCA5OTE1NCwgOTkxNTksIAorICAgIDk5MTY0LCA5OTE2OSwgOTkxNzQsIDk5MTc5LCA5OTE4NCwgOTkxODksIDk5MTk0LCA5OTE5OCwgOTkyMDMsIDk5MjA4LCAKKyAgICA5OTIxNCwgOTkyMTgsIDAsIDAsIDAsIDk5MjIyLCA5OTIyOCwgOTkyMzIsIDk5MjM3LCA5OTI0MiwgOTkyNDcsIDk5MjUxLCAKKyAgICA5OTI1NiwgOTkyNjAsIDk5MjY1LCA5OTI3MCwgOTkyNzQsIDk5Mjc5LCA5OTI4NCwgOTkyODgsIDk5MjkyLCA5OTI5NywgCisgICAgOTkzMDIsIDk5MzA2LCA5OTMxMSwgOTkzMTYsIDk5MzIwLCA5OTMyNSwgOTkzMzAsIDk5MzM1LCA5OTM0MCwgOTkzNDUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDk5MzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMjY1ODUsIDEyNjU5MCwgMTI2NTk1LCAxMjY2MDAsIDEyNjYwNSwgMTI2NjEwLCAxMjY2MTUsIDEyNjYyMiwgCi0gICAgMTI2NjI5LCAxMjY2MzYsIDEyNjY0MywgMTI2NjQ4LCAxMjY2NTMsIDEyNjY1OCwgMTI2NjYzLCAxMjY2NzAsIDEyNjY3NiwgCi0gICAgMTI2NjgzLCAxMjY2OTAsIDEyNjY5NywgMTI2NzAyLCAxMjY3MDcsIDEyNjcxMiwgMTI2NzE3LCAxMjY3MjIsIDEyNjcyOSwgCi0gICAgMTI2NzM2LCAxMjY3NDEsIDEyNjc0NiwgMTI2NzUzLCAxMjY3NjAsIDEyNjc2OCwgMTI2Nzc2LCAxMjY3ODMsIDEyNjc5MCwgCi0gICAgMTI2Nzk4LCAxMjY4MDYsIDEyNjgxNCwgMTI2ODIxLCAxMjY4MzEsIDEyNjg0MiwgMTI2ODQ3LCAxMjY4NTQsIDEyNjg2MSwgCi0gICAgMTI2ODY4LCAxMjY4NzYsIDEyNjg4NCwgMTI2ODk1LCAxMjY5MDMsIDEyNjkxMSwgMTI2OTE5LCAxMjY5MjQsIDEyNjkyOSwgCi0gICAgMTI2OTM0LCAxMjY5MzksIDEyNjk0NCwgMTI2OTQ5LCAxMjY5NTQsIDEyNjk1OSwgMTI2OTY0LCAxMjY5NjksIDEyNjk3NCwgCi0gICAgMTI2OTc5LCAxMjY5ODYsIDEyNjk5MSwgMTI2OTk2LCAxMjcwMDMsIDEyNzAwOCwgMTI3MDEzLCAxMjcwMTgsIDEyNzAyMywgCi0gICAgMTI3MDI4LCAxMjcwMzMsIDEyNzAzOCwgMTI3MDQzLCAxMjcwNDgsIDEyNzA1MywgMTI3MDU4LCAxMjcwNjMsIDEyNzA3MCwgCi0gICAgMTI3MDc4LCAxMjcwODMsIDEyNzA4OCwgMTI3MDk1LCAxMjcxMDAsIDEyNzEwNSwgMTI3MTEwLCAxMjcxMTcsIDEyNzEyMiwgCi0gICAgMTI3MTI5LCAxMjcxMzQsIDEyNzE0MSwgMTI3MTQ2LCAxMjcxNTUsIDEyNzE2NCwgMTI3MTY5LCAxMjcxNzQsIDEyNzE3OSwgCi0gICAgMTI3MTg0LCAxMjcxODksIDEyNzE5NCwgMTI3MTk5LCAxMjcyMDQsIDEyNzIwOSwgMTI3MjE0LCAxMjcyMTksIDEyNzIyNCwgCi0gICAgMTI3MjI5LCAxMjcyMzcsIDEyNzI0NSwgMTI3MjUwLCAxMjcyNTUsIDEyNzI2MCwgMTI3MjY1LCAxMjcyNzAsIDEyNzI3NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjgyLCAxMjcyODYsIDEyNzI5MCwgMTI3Mjk0LCAKLSAgICAxMjcyOTgsIDEyNzMwMiwgMTI3MzA2LCAxMjczMTAsIDEyNzMxNCwgMTI3MzE4LCAxMjczMjIsIDEyNzMyNiwgMTI3MzMwLCAKLSAgICAxMjczMzQsIDEyNzMzOCwgMTI3MzQyLCAxMjczNDYsIDEyNzM1MCwgMTI3MzU0LCAxMjczNTgsIDEyNzM2MiwgMTI3MzY2LCAKLSAgICAxMjczNzAsIDEyNzM3NCwgMTI3Mzc4LCAxMjczODIsIDEyNzM4NiwgMTI3MzkwLCAxMjczOTQsIDEyNzM5OCwgMTI3NDAyLCAKLSAgICAxMjc0MDYsIDEyNzQxMCwgMTI3NDE0LCAxMjc0MTgsIDEyNzQyMiwgMTI3NDI2LCAxMjc0MzAsIDEyNzQzNCwgMTI3NDM4LCAKLSAgICAxMjc0NDIsIDEyNzQ0NiwgMTI3NDUwLCAxMjc0NTQsIDEyNzQ1OCwgMTI3NDYyLCAxMjc0NjYsIDEyNzQ3MCwgMTI3NDc0LCAKLSAgICAxMjc0NzgsIDEyNzQ4MiwgMTI3NDg2LCAxMjc0OTAsIDEyNzQ5NCwgMTI3NDk4LCAxMjc1MDIsIDEyNzUwNiwgMTI3NTEwLCAKLSAgICAxMjc1MTQsIDEyNzUxOCwgMTI3NTIyLCAxMjc1MjYsIDEyNzUzMCwgMTI3NTM0LCAxMjc1MzgsIDEyNzU0MiwgMTI3NTQ2LCAKLSAgICAxMjc1NTAsIDEyNzU1NCwgMTI3NTU4LCAxMjc1NjIsIDEyNzU2NiwgMTI3NTcwLCAxMjc1NzQsIDEyNzU3OCwgMTI3NTgyLCAKLSAgICAxMjc1ODYsIDEyNzU5MCwgMTI3NTk0LCAxMjc1OTgsIDEyNzYwMiwgMTI3NjA2LCAxMjc2MTAsIDEyNzYxNCwgMTI3NjE4LCAKLSAgICAxMjc2MjIsIDEyNzYyNiwgMTI3NjMwLCAxMjc2MzQsIDEyNzYzOCwgMTI3NjQyLCAxMjc2NDYsIDEyNzY1MCwgMTI3NjU0LCAKLSAgICAxMjc2NTgsIDEyNzY2MiwgMTI3NjY2LCAxMjc2NzAsIDEyNzY3NCwgMTI3Njc4LCAxMjc2ODIsIDEyNzY4NiwgMTI3NjkwLCAKLSAgICAxMjc2OTQsIDEyNzY5OCwgMTI3NzAyLCAxMjc3MDYsIDEyNzcxMCwgMTI3NzE0LCAxMjc3MTgsIDEyNzcyMiwgMTI3NzI2LCAKLSAgICAxMjc3MzAsIDEyNzczNCwgMTI3NzM4LCAxMjc3NDIsIDEyNzc0NiwgMTI3NzUwLCAxMjc3NTQsIDEyNzc1OCwgMTI3NzYyLCAKLSAgICAxMjc3NjYsIDEyNzc3MCwgMTI3Nzc0LCAxMjc3NzgsIDEyNzc4MiwgMTI3Nzg2LCAxMjc3OTAsIDEyNzc5NCwgMTI3Nzk4LCAKLSAgICAxMjc4MDIsIDEyNzgwNiwgMTI3ODEwLCAxMjc4MTQsIDEyNzgxOCwgMTI3ODIyLCAxMjc4MjYsIDEyNzgzMCwgMTI3ODM0LCAKLSAgICAxMjc4MzgsIDEyNzg0MiwgMTI3ODQ2LCAxMjc4NTAsIDEyNzg1NCwgMTI3ODU4LCAxMjc4NjIsIDEyNzg2NiwgMTI3ODcwLCAKLSAgICAxMjc4NzQsIDEyNzg3OCwgMTI3ODgyLCAxMjc4ODYsIDEyNzg5MCwgMTI3ODk0LCAxMjc4OTgsIDEyNzkwMiwgMTI3OTA2LCAKLSAgICAxMjc5MTAsIDEyNzkxNCwgMTI3OTE4LCAxMjc5MjIsIDEyNzkyNiwgMTI3OTMwLCAxMjc5MzQsIDEyNzkzOCwgMTI3OTQyLCAKLSAgICAxMjc5NDYsIDEyNzk1MCwgMTI3OTU0LCAxMjc5NTgsIDEyNzk2MiwgMTI3OTY2LCAxMjc5NzAsIDEyNzk3NCwgMTI3OTc4LCAKLSAgICAxMjc5ODIsIDEyNzk4NiwgMTI3OTkwLCAxMjc5OTQsIDEyNzk5OCwgMTI4MDAyLCAxMjgwMDYsIDEyODAxMCwgMTI4MDE0LCAKLSAgICAxMjgwMTgsIDEyODAyMiwgMTI4MDI2LCAxMjgwMzAsIDEyODAzNCwgMTI4MDM4LCAxMjgwNDIsIDEyODA0NiwgMTI4MDUwLCAKLSAgICAxMjgwNTQsIDEyODA1OCwgMTI4MDYyLCAxMjgwNjYsIDEyODA3MCwgMTI4MDc0LCAxMjgwNzgsIDEyODA4MiwgMTI4MDg2LCAKLSAgICAxMjgwOTAsIDEyODA5NCwgMTI4MDk4LCAxMjgxMDIsIDEyODEwNiwgMTI4MTEwLCAxMjgxMTQsIDEyODExOCwgMTI4MTIyLCAKLSAgICAxMjgxMjYsIDEyODEzMCwgMTI4MTM0LCAxMjgxMzgsIDEyODE0MiwgMTI4MTQ2LCAxMjgxNTAsIDEyODE1NCwgMTI4MTU4LCAKLSAgICAxMjgxNjIsIDEyODE2NiwgMTI4MTcwLCAxMjgxNzQsIDEyODE3OCwgMTI4MTgyLCAxMjgxODYsIDEyODE5MCwgMTI4MTk0LCAKLSAgICAxMjgxOTgsIDEyODIwMiwgMTI4MjA2LCAxMjgyMTAsIDEyODIxNCwgMTI4MjE4LCAxMjgyMjIsIDEyODIyNiwgMTI4MjMwLCAKLSAgICAxMjgyMzQsIDEyODIzOCwgMTI4MjQyLCAxMjgyNDYsIDEyODI1MCwgMTI4MjU0LCAxMjgyNTgsIDEyODI2MiwgMTI4MjY2LCAKLSAgICAxMjgyNzAsIDEyODI3NCwgMTI4Mjc4LCAxMjgyODIsIDEyODI4NiwgMTI4MjkwLCAxMjgyOTQsIDEyODI5OCwgMTI4MzAyLCAKLSAgICAxMjgzMDYsIDEyODMxMCwgMTI4MzE0LCAxMjgzMTgsIDEyODMyMiwgMTI4MzI2LCAxMjgzMzAsIDEyODMzNCwgMTI4MzM4LCAKLSAgICAxMjgzNDIsIDEyODM0NiwgMTI4MzUwLCAxMjgzNTQsIDEyODM1OCwgMTI4MzYyLCAxMjgzNjYsIDEyODM3MCwgMTI4Mzc0LCAKLSAgICAxMjgzNzgsIDEyODM4MiwgMTI4Mzg2LCAxMjgzOTAsIDEyODM5NCwgMTI4Mzk4LCAxMjg0MDIsIDEyODQwNiwgMTI4NDEwLCAKLSAgICAxMjg0MTQsIDEyODQxOCwgMTI4NDIyLCAxMjg0MjYsIDEyODQzMCwgMTI4NDM0LCAxMjg0MzgsIDEyODQ0MiwgMTI4NDQ2LCAKLSAgICAxMjg0NTAsIDEyODQ1NCwgMTI4NDU4LCAxMjg0NjIsIDEyODQ2NiwgMTI4NDcwLCAxMjg0NzQsIDEyODQ3OCwgMTI4NDgyLCAKLSAgICAxMjg0ODYsIDEyODQ5MCwgMTI4NDk0LCAxMjg0OTgsIDEyODUwMiwgMTI4NTA2LCAxMjg1MTAsIDEyODUxNCwgMTI4NTE4LCAKLSAgICAxMjg1MjIsIDEyODUyNiwgMTI4NTMwLCAxMjg1MzQsIDEyODUzOCwgMTI4NTQyLCAxMjg1NDYsIDEyODU1MCwgMTI4NTU0LCAKLSAgICAxMjg1NTgsIDEyODU2MiwgMTI4NTY2LCAxMjg1NzAsIDEyODU3NCwgMTI4NTc4LCAxMjg1ODIsIDEyODU4NiwgMTI4NTkwLCAKLSAgICAxMjg1OTQsIDEyODU5OCwgMTI4NjAyLCAxMjg2MDYsIDEyODYxMCwgMTI4NjE0LCAxMjg2MTgsIDEyODYyMiwgMTI4NjI2LCAKLSAgICAxMjg2MzAsIDEyODYzNCwgMTI4NjM4LCAxMjg2NDIsIDEyODY0NiwgMTI4NjUwLCAxMjg2NTQsIDEyODY1OCwgMTI4NjYyLCAKLSAgICAxMjg2NjYsIDEyODY3MCwgMTI4Njc0LCAxMjg2NzgsIDEyODY4MiwgMTI4Njg2LCAxMjg2OTAsIDEyODY5NCwgMTI4Njk4LCAKLSAgICAxMjg3MDIsIDEyODcwNiwgMTI4NzEwLCAxMjg3MTQsIDEyODcxOCwgMTI4NzIyLCAxMjg3MjYsIDEyODczMCwgMTI4NzM0LCAKLSAgICAxMjg3MzgsIDEyODc0MiwgMTI4NzQ2LCAxMjg3NTAsIDEyODc1NCwgMTI4NzU4LCAxMjg3NjIsIDEyODc2NiwgMTI4NzcwLCAKLSAgICAxMjg3NzQsIDEyODc3OCwgMTI4NzgyLCAxMjg3ODYsIDEyODc5MCwgMTI4Nzk0LCAxMjg3OTgsIDEyODgwMiwgMTI4ODA2LCAKLSAgICAxMjg4MTAsIDEyODgxNCwgMTI4ODE4LCAxMjg4MjIsIDEyODgyNiwgMTI4ODMwLCAxMjg4MzQsIDEyODgzOCwgMTI4ODQyLCAKLSAgICAxMjg4NDYsIDEyODg1MCwgMTI4ODU0LCAxMjg4NTgsIDEyODg2MiwgMTI4ODY2LCAxMjg4NzAsIDEyODg3NCwgMTI4ODc4LCAKLSAgICAxMjg4ODIsIDEyODg4NiwgMTI4ODkwLCAxMjg4OTQsIDEyODg5OCwgMTI4OTAyLCAxMjg5MDYsIDEyODkxMCwgMTI4OTE0LCAKLSAgICAxMjg5MTgsIDEyODkyMiwgMTI4OTI2LCAxMjg5MzAsIDEyODkzNCwgMTI4OTM4LCAxMjg5NDIsIDEyODk0NiwgMTI4OTUwLCAKLSAgICAxMjg5NTQsIDEyODk1OCwgMTI4OTYyLCAxMjg5NjYsIDEyODk3MCwgMTI4OTc0LCAxMjg5NzgsIDEyODk4MiwgMTI4OTg2LCAKLSAgICAxMjg5OTAsIDEyODk5NCwgMTI4OTk4LCAxMjkwMDIsIDEyOTAwNiwgMTI5MDEwLCAxMjkwMTQsIDEyOTAxOCwgMTI5MDIyLCAKLSAgICAxMjkwMjYsIDEyOTAzMCwgMTI5MDM0LCAxMjkwMzgsIDEyOTA0MiwgMTI5MDQ2LCAxMjkwNTAsIDEyOTA1NCwgMTI5MDU4LCAKLSAgICAxMjkwNjIsIDEyOTA2NiwgMTI5MDcwLCAxMjkwNzQsIDEyOTA3OCwgMTI5MDgyLCAxMjkwODYsIDEyOTA5MCwgMTI5MDk0LCAKLSAgICAxMjkwOTgsIDEyOTEwMiwgMTI5MTA2LCAxMjkxMTAsIDEyOTExNCwgMTI5MTE4LCAxMjkxMjIsIDEyOTEyNiwgMTI5MTMwLCAKLSAgICAxMjkxMzQsIDEyOTEzOCwgMTI5MTQyLCAxMjkxNDYsIDEyOTE1MCwgMTI5MTU0LCAxMjkxNTgsIDEyOTE2MiwgMTI5MTY2LCAKLSAgICAxMjkxNzAsIDEyOTE3NCwgMTI5MTc4LCAxMjkxODIsIDEyOTE4NiwgMTI5MTkwLCAxMjkxOTQsIDEyOTE5OCwgMTI5MjAyLCAKLSAgICAxMjkyMDYsIDEyOTIxMCwgMTI5MjE0LCAxMjkyMTgsIDEyOTIyMiwgMTI5MjI2LCAxMjkyMzAsIDEyOTIzNCwgMTI5MjM4LCAKLSAgICAxMjkyNDIsIDEyOTI0NiwgMTI5MjUwLCAxMjkyNTQsIDEyOTI1OCwgMTI5MjYyLCAxMjkyNjYsIDEyOTI3MCwgMTI5Mjc0LCAKLSAgICAxMjkyNzgsIDEyOTI4MiwgMTI5Mjg2LCAxMjkyOTAsIDEyOTI5NCwgMTI5Mjk4LCAxMjkzMDIsIDEyOTMwNiwgMTI5MzEwLCAKLSAgICAxMjkzMTQsIDEyOTMxOCwgMTI5MzIyLCAxMjkzMjYsIDEyOTMzMCwgMTI5MzM0LCAxMjkzMzgsIDEyOTM0MiwgMTI5MzQ2LCAKLSAgICAxMjkzNTAsIDEyOTM1NCwgMTI5MzU4LCAxMjkzNjIsIDEyOTM2NiwgMTI5MzcwLCAxMjkzNzQsIDEyOTM3OCwgMTI5MzgyLCAKLSAgICAxMjkzODYsIDEyOTM5MCwgMTI5Mzk0LCAxMjkzOTgsIDEyOTQwMiwgMTI5NDA2LCAxMjk0MTAsIDEyOTQxNCwgMTI5NDE4LCAKLSAgICAxMjk0MjIsIDEyOTQyNiwgMTI5NDMwLCAxMjk0MzQsIDEyOTQzOCwgMTI5NDQyLCAxMjk0NDYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk5MzU1LCAKKyAgICA5OTM2MCwgOTkzNjUsIDk5MzcwLCA5OTM3NSwgOTkzODAsIDk5Mzg2LCA5OTM5MiwgOTkzOTgsIDk5NDAzLCA5OTQwOCwgCisgICAgOTk0MTQsIDk5NDIwLCA5OTQyNiwgOTk0MzIsIDk5NDM4LCA5OTQ0NCwgOTk0NTAsIDk5NDU2LCA5OTQ2MiwgOTk0NjgsIAorICAgIDk5NDc0LCA5OTQ4MCwgOTk0ODUsIDk5NDkxLCA5OTQ5NywgOTk1MDMsIDk5NTA5LCA5OTUxNSwgOTk1MjAsIDk5NTI2LCAKKyAgICA5OTUzMiwgOTk1MzgsIDk5NTQyLCA5OTU0NiwgOTk1NTAsIDk5NTU0LCA5OTU1OCwgOTk1NjMsIDk5NTY4LCA5OTU3MiwgCisgICAgOTk1NzYsIDk5NTgxLCA5OTU4NiwgOTk1OTEsIDk5NTk2LCA5OTYwMSwgOTk2MDYsIDk5NjExLCA5OTYxOCwgOTk2MjMsIAorICAgIDk5NjI3LCA5OTYzMiwgOTk2MzcsIDk5NjQyLCA5OTY0NiwgMCwgMCwgMCwgMCwgOTk2NTEsIDk5NjU5LCA5OTY2NiwgCisgICAgOTk2NzIsIDk5Njc4LCA5OTY4MiwgOTk2ODYsIDk5NjkwLCA5OTY5NCwgOTk2OTgsIDk5NzAyLCA5OTcwNywgOTk3MTEsIAorICAgIDk5NzE2LCA5OTcyMSwgOTk3MjYsIDk5NzMxLCA5OTczNiwgOTk3NDEsIDk5NzQ2LCAwLCAwLCA5OTc1MSwgOTk3NTcsIAorICAgIDk5NzYzLCA5OTc2OSwgOTk3NzYsIDk5NzgzLCA5OTc5MCwgOTk3OTcsIDk5ODA0LCA5OTgxMSwgOTk4MTcsIDk5ODIzLCAKKyAgICA5OTgyOSwgOTk4MzYsIDk5ODQzLCA5OTg1MCwgOTk4NTcsIDk5ODY0LCA5OTg3MSwgOTk4NzgsIDk5ODg1LCA5OTg5MiwgCisgICAgOTk4OTksIDk5OTA2LCA5OTkxMywgOTk5MjAsIDk5OTI3LCA5OTkzNCwgOTk5NDIsIDk5OTUwLCA5OTk1OCwgOTk5NjcsIAorICAgIDk5OTc2LCA5OTk4NSwgOTk5OTQsIDEwMDAwMywgMTAwMDEyLCAxMDAwMTksIDEwMDAyNiwgMTAwMDMzLCAxMDAwNDEsIAorICAgIDEwMDA0OSwgMTAwMDU3LCAxMDAwNjUsIDEwMDA3MywgMTAwMDgxLCAxMDAwODksIDEwMDA5MywgMTAwMDk4LCAxMDAxMDMsIAorICAgIDAsIDEwMDEwOSwgMTAwMTE0LCAwLCAwLCAwLCAwLCAwLCAxMDAxMTksIDEwMDEyNSwgMTAwMTMyLCAxMDAxMzcsIDEwMDE0MiwgCisgICAgMTAwMTQ2LCAxMDAxNTEsIDEwMDE1NiwgMCwgMTAwMTYxLCAxMDAxNjYsIDEwMDE3MSwgMCwgMTAwMTc2LCAxMDAxODEsIAorICAgIDEwMDE4NiwgMTAwMTkxLCAxMDAxOTYsIDEwMDIwMSwgMTAwMjA2LCAxMDAyMTEsIDEwMDIxNiwgMTAwMjIxLCAxMDAyMjYsIAorICAgIDEwMDIzMSwgMTAwMjM1LCAxMDAyNDAsIDEwMDI0NSwgMTAwMjUwLCAxMDAyNTQsIDEwMDI1OCwgMTAwMjYzLCAxMDAyNjgsIAorICAgIDEwMDI3MywgMTAwMjc4LCAxMDAyODMsIDEwMDI4OCwgMTAwMjkzLCAxMDAyOTcsIDEwMDMwMiwgMCwgMCwgMCwgMCwgCisgICAgMTAwMzA3LCAxMDAzMTMsIDEwMDMxOCwgMCwgMCwgMCwgMCwgMTAwMzIzLCAxMDAzMjcsIDEwMDMzMSwgMTAwMzM1LCAKKyAgICAxMDAzMzksIDEwMDM0MywgMTAwMzQ4LCAxMDAzNTMsIDEwMDM1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAwMzY1LCAKKyAgICAxMDAzNzEsIDEwMDM3OCwgMTAwMzg0LCAxMDAzOTEsIDEwMDM5NywgMTAwNDAzLCAxMDA0MDksIDEwMDQxNiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTAwNDIyLCAxMDA0MzAsIDEwMDQzOCwgMTAwNDQ2LCAxMDA0NTQsIDEwMDQ2MiwgMTAwNDcwLCAKKyAgICAxMDA0NzgsIDEwMDQ4NiwgMTAwNDk0LCAxMDA1MDIsIDEwMDUxMCwgMTAwNTE4LCAxMDA1MjYsIDEwMDUzNCwgMTAwNTQyLCAKKyAgICAxMDA1NTAsIDEwMDU1OCwgMTAwNTY2LCAxMDA1NzQsIDEwMDU4MiwgMTAwNTkwLCAxMDA1OTgsIDEwMDYwNiwgMTAwNjE0LCAKKyAgICAxMDA2MjIsIDEwMDYzMCwgMTAwNjM4LCAxMDA2NDYsIDEwMDY1NCwgMTAwNjYxLCAxMDA2NjksIDEwMDY3NywgMTAwNjg0LCAKKyAgICAxMDA2OTEsIDEwMDY5OCwgMTAwNzA1LCAxMDA3MTIsIDEwMDcxOSwgMTAwNzI2LCAxMDA3MzMsIDEwMDc0MCwgMTAwNzQ3LCAKKyAgICAxMDA3NTQsIDEwMDc2MSwgMTAwNzY4LCAxMDA3NzUsIDEwMDc4MiwgMTAwNzg5LCAxMDA3OTYsIDEwMDgwMywgMTAwODEwLCAKKyAgICAxMDA4MTcsIDEwMDgyNCwgMTAwODMxLCAxMDA4MzgsIDEwMDg0NSwgMTAwODUyLCAxMDA4NTksIDEwMDg2NiwgMTAwODczLCAKKyAgICAxMDA4ODAsIDEwMDg4NiwgMTAwODkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDA5MDAsIDEwMDkwNSwgMTAwOTEwLCAKKyAgICAxMDA5MTUsIDEwMDkyMCwgMTAwOTI1LCAxMDA5MzAsIDEwMDkzNSwgMTAwOTQwLCAxMDA5NDUsIDEwMDk1MCwgMTAwOTU1LCAKKyAgICAxMDA5NjAsIDEwMDk2NSwgMTAwOTcwLCAxMDA5NzUsIDEwMDk4MCwgMTAwOTg1LCAxMDA5OTAsIDEwMDk5NSwgMTAxMDAwLCAKKyAgICAxMDEwMDUsIDEwMTAxMCwgMTAxMDE1LCAxMDEwMjAsIDEwMTAyNSwgMTAxMDMwLCAxMDEwMzUsIDEwMTA0MCwgMTAxMDQ1LCAKKyAgICAxMDEwNTAsIDEwMTA1NSwgMTAxMDYwLCAxMDEwNjUsIDEwMTA3MCwgMTAxMDc1LCAxMDEwODAsIDEwMTA4NSwgMTAxMDkxLCAKKyAgICAwLCAwLCAwLCAwLCAxMDEwOTcsIDEwMTEwMSwgMTAxMTA1LCAxMDExMTAsIDEwMTExNSwgMTAxMTIxLCAxMDExMjcsIAorICAgIDEwMTEzMywgMTAxMTQzLCAxMDExNTIsIDEwMTE1OCwgMTAxMTY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDExNzMsIDEwMTE3NywgMTAxMTgyLCAxMDExODcsIDEwMTE5MiwgMTAxMTk3LCAxMDEyMDIsIDEwMTIwNywgMTAxMjEyLCAKKyAgICAxMDEyMTYsIDEwMTIyMSwgMTAxMjI1LCAxMDEyMzAsIDEwMTIzNCwgMTAxMjM5LCAxMDEyNDMsIDEwMTI0OCwgMTAxMjUzLCAKKyAgICAxMDEyNTgsIDEwMTI2MywgMTAxMjY4LCAxMDEyNzMsIDEwMTI3OCwgMTAxMjgzLCAxMDEyODgsIDEwMTI5MywgMTAxMjk4LCAKKyAgICAxMDEzMDMsIDEwMTMwOCwgMTAxMzEzLCAxMDEzMTgsIDEwMTMyMywgMTAxMzI4LCAxMDEzMzMsIDEwMTMzOCwgMTAxMzQzLCAKKyAgICAxMDEzNDgsIDEwMTM1MywgMTAxMzU4LCAxMDEzNjMsIDEwMTM2OCwgMTAxMzczLCAxMDEzNzgsIDEwMTM4MywgMTAxMzg4LCAKKyAgICAxMDEzOTMsIDEwMTM5OCwgMTAxNDAzLCAxMDE0MDgsIDEwMTQxMywgMTAxNDE4LCAxMDE0MjMsIDEwMTQyOCwgMTAxNDMzLCAKKyAgICAwLCAwLCAwLCAxMDE0MzgsIDEwMTQ0MywgMTAxNDUyLCAxMDE0NjAsIDEwMTQ2OSwgMTAxNDc4LCAxMDE0ODksIDEwMTUwMCwgCisgICAgMTAxNTA3LCAxMDE1MTQsIDEwMTUyMSwgMTAxNTI4LCAxMDE1MzUsIDEwMTU0MiwgMTAxNTQ5LCAxMDE1NTYsIDEwMTU2MywgCisgICAgMTAxNTcwLCAxMDE1NzcsIDEwMTU4NCwgMTAxNTkxLCAxMDE1OTgsIDEwMTYwNSwgMTAxNjEyLCAxMDE2MTksIDEwMTYyNiwgCisgICAgMTAxNjMzLCAxMDE2NDAsIDEwMTY0NywgMCwgMCwgMTAxNjU0LCAxMDE2NjAsIDEwMTY2NiwgMTAxNjcyLCAxMDE2NzgsIAorICAgIDEwMTY4NSwgMTAxNjkyLCAxMDE3MDAsIDEwMTcwOCwgMTAxNzE1LCAxMDE3MjIsIDEwMTcyOSwgMTAxNzM2LCAxMDE3NDMsIAorICAgIDEwMTc1MCwgMTAxNzU3LCAxMDE3NjQsIDEwMTc3MSwgMTAxNzc4LCAxMDE3ODUsIDEwMTc5MiwgMTAxNzk5LCAxMDE4MDYsIAorICAgIDEwMTgxMywgMTAxODIwLCAxMDE4MjcsIDEwMTgzNCwgMCwgMCwgMCwgMCwgMCwgMTAxODQxLCAxMDE4NDcsIDEwMTg1MywgCisgICAgMTAxODU5LCAxMDE4NjUsIDEwMTg3MiwgMTAxODc5LCAxMDE4ODcsIDEwMTg5NSwgMTAxOTAyLCAxMDE5MDksIDEwMTkxNiwgCisgICAgMTAxOTIzLCAxMDE5MzAsIDEwMTkzNywgMTAxOTQ0LCAxMDE5NTEsIDEwMTk1OCwgMTAxOTY1LCAxMDE5NzIsIDEwMTk3OSwgCisgICAgMTAxOTg2LCAxMDE5OTMsIDEwMjAwMCwgMTAyMDA3LCAxMDIwMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjAyMSwgCisgICAgMTAyMDI4LCAxMDIwMzcsIDEwMjA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyMDU3LCAKKyAgICAxMDIwNjMsIDEwMjA2OSwgMTAyMDc1LCAxMDIwODEsIDEwMjA4OCwgMTAyMDk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk0NTAsIDAsIAorICAgIDEwMjEwMywgMTAyMTEwLCAxMDIxMTcsIDEwMjEyNSwgMTAyMTMyLCAxMDIxMzksIDEwMjE0NiwgMTAyMTUzLCAxMDIxNjEsIAorICAgIDEwMjE2OSwgMTAyMTc3LCAxMDIxODUsIDEwMjE5MywgMTAyMjAxLCAxMDIyMDksIDEwMjIxNywgMTAyMjI1LCAxMDIyMzMsIAorICAgIDEwMjI0MSwgMTAyMjQ5LCAxMDIyNTcsIDEwMjI2NSwgMTAyMjczLCAxMDIyODEsIDEwMjI4OSwgMTAyMjk3LCAxMDIzMDUsIAorICAgIDEwMjMxMywgMTAyMzIxLCAxMDIzMjksIDEwMjMzNywgMTAyMzQ1LCAxMDIzNTMsIDEwMjM2MSwgMTAyMzY5LCAxMDIzNzcsIAorICAgIDEwMjM4NSwgMTAyMzkzLCAxMDI0MDEsIDEwMjQwOSwgMTAyNDE3LCAxMDI0MjUsIDEwMjQzMywgMTAyNDQxLCAxMDI0NDksIAorICAgIDEwMjQ1NywgMTAyNDY1LCAxMDI0NzMsIDEwMjQ4MSwgMTAyNDg5LCAxMDI0OTcsIDEwMjUwNSwgMTAyNTEzLCAxMDI1MjEsIAorICAgIDEwMjUyOSwgMTAyNTM3LCAxMDI1NDUsIDEwMjU1MywgMTAyNTYxLCAxMDI1NjksIDEwMjU3NywgMTAyNTg1LCAxMDI1OTMsIAorICAgIDEwMjYwMSwgMTAyNjA5LCAxMDI2MTcsIDEwMjYyNSwgMTAyNjMzLCAxMDI2NDEsIDEwMjY0OSwgMTAyNjU3LCAxMDI2NjUsIAorICAgIDEwMjY3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTI5NDU0LCAxMjk0NTcsIDEyOTQ2MSwgMTI5NDY1LCAxMjk0NjgsIDEyOTQ3MiwgMTI5NDc2LCAKLSAgICAxMjk0NzksIDEyOTQ4MiwgMTI5NDg2LCAxMjk0OTAsIDEyOTQ5MywgMTI5NDk2LCAxMjk0OTksIDEyOTUwMiwgMTI5NTA3LCAKLSAgICAxMjk1MTAsIDEyOTUxNCwgMTI5NTE3LCAxMjk1MjAsIDEyOTUyMywgMTI5NTI2LCAxMjk1MjksIDEyOTUzMiwgMTI5NTM1LCAKLSAgICAxMjk1MzgsIDEyOTU0MSwgMTI5NTQ0LCAxMjk1NDcsIDEyOTU1MSwgMTI5NTU1LCAxMjk1NTksIDEyOTU2MywgMTI5NTY4LCAKLSAgICAxMjk1NzMsIDEyOTU3OSwgMTI5NTg1LCAxMjk1OTEsIDEyOTU5NiwgMTI5NjAyLCAxMjk2MDgsIDEyOTYxNCwgMTI5NjE5LCAKLSAgICAxMjk2MjUsIDEyOTYzMSwgMTI5NjM2LCAxMjk2NDEsIDEyOTY0NywgMTI5NjUyLCAxMjk2NTgsIDEyOTY2NCwgMTI5NjY5LCAKLSAgICAxMjk2NzUsIDEyOTY4MSwgMTI5Njg2LCAxMjk2OTIsIDEyOTY5OCwgMTI5NzA0LCAxMjk3MTAsIDEyOTcxNiwgMTI5NzIwLCAKLSAgICAxMjk3MjUsIDEyOTcyOSwgMTI5NzM0LCAxMjk3MzgsIDEyOTc0MywgMTI5NzQ4LCAxMjk3NTQsIDEyOTc2MCwgMTI5NzY2LCAKLSAgICAxMjk3NzEsIDEyOTc3NywgMTI5NzgzLCAxMjk3ODksIDEyOTc5NCwgMTI5ODAwLCAxMjk4MDYsIDEyOTgxMSwgMTI5ODE2LCAKLSAgICAxMjk4MjIsIDEyOTgyNywgMTI5ODMzLCAxMjk4MzksIDEyOTg0NCwgMTI5ODUwLCAxMjk4NTYsIDEyOTg2MSwgMTI5ODY3LCAKLSAgICAxMjk4NzMsIDEyOTg3OSwgMTI5ODg1LCAxMjk4OTEsIDEyOTg5NiwgMTI5OTAwLCAxMjk5MDUsIDEyOTkwNywgMTI5OTExLCAKLSAgICAxMjk5MTQsIDEyOTkxNywgMTI5OTIwLCAxMjk5MjMsIDEyOTkyNiwgMTI5OTI5LCAxMjk5MzIsIDEyOTkzNSwgMTI5OTM4LCAKLSAgICAxMjk5NDEsIDEyOTk0NCwgMTI5OTQ3LCAxMjk5NTAsIDEyOTk1MywgMTI5OTU2LCAxMjk5NTksIDEyOTk2MiwgMTI5OTY1LCAKLSAgICAxMjk5NjgsIDEyOTk3MSwgMTI5OTc0LCAxMjk5NzcsIDEyOTk4MCwgMTI5OTgzLCAxMjk5ODYsIDEyOTk4OSwgMTI5OTkyLCAKLSAgICAxMjk5OTUsIDEyOTk5OCwgMTMwMDAxLCAxMzAwMDQsIDEzMDAwNywgMTMwMDEwLCAxMzAwMTMsIDEzMDAxNiwgMTMwMDE5LCAKLSAgICAxMzAwMjIsIDEzMDAyNSwgMTMwMDI4LCAxMzAwMzEsIDEzMDAzNCwgMTMwMDM3LCAxMzAwNDAsIDEzMDA0MywgMTMwMDQ2LCAKLSAgICAxMzAwNDksIDEzMDA1MiwgMTMwMDU1LCAxMzAwNTgsIDEzMDA2MSwgMTMwMDY0LCAxMzAwNjcsIDEzMDA3MCwgMTMwMDczLCAKLSAgICAxMzAwNzYsIDEzMDA3OSwgMTMwMDgyLCAxMzAwODUsIDEzMDA4OCwgMTMwMDkxLCAxMzAwOTQsIDEzMDA5NywgMTMwMTAwLCAKLSAgICAxMzAxMDMsIDEzMDEwNiwgMTMwMTA5LCAxMzAxMTIsIDEzMDExNSwgMTMwMTE4LCAxMzAxMjEsIDEzMDEyNCwgMTMwMTI3LCAKLSAgICAxMzAxMzAsIDEzMDEzMywgMTMwMTM2LCAxMzAxMzksIDEzMDE0MiwgMTMwMTQ1LCAxMzAxNDgsIDEzMDE1MSwgMTMwMTU0LCAKLSAgICAxMzAxNTcsIDEzMDE2MCwgMTMwMTYzLCAxMzAxNjYsIDEzMDE2OSwgMTMwMTcyLCAxMzAxNzUsIDEzMDE3OCwgMTMwMTgxLCAKLSAgICAxMzAxODQsIDEzMDE4NywgMTMwMTkwLCAxMzAxOTMsIDEzMDE5NiwgMTMwMTk5LCAxMzAyMDIsIDEzMDIwNSwgMTMwMjA4LCAKLSAgICAxMzAyMTEsIDEzMDIxNCwgMTMwMjE3LCAxMzAyMjAsIDEzMDIyMywgMTMwMjI2LCAxMzAyMjksIDEzMDIzMiwgMTMwMjM1LCAKLSAgICAxMzAyMzgsIDEzMDI0MSwgMTMwMjQ0LCAxMzAyNDcsIDEzMDI1MCwgMTMwMjUzLCAxMzAyNTYsIDEzMDI1OSwgMTMwMjYyLCAKLSAgICAxMzAyNjUsIDEzMDI2OCwgMTMwMjcxLCAxMzAyNzQsIDEzMDI3NywgMTMwMjgwLCAxMzAyODMsIDEzMDI4NiwgMTMwMjg5LCAKLSAgICAxMzAyOTIsIDEzMDI5NSwgMTMwMjk4LCAxMzAzMDEsIDEzMDMwNCwgMTMwMzA3LCAxMzAzMTAsIDEzMDMxMywgMTMwMzE2LCAKLSAgICAxMzAzMTksIDEzMDMyMiwgMTMwMzI1LCAxMzAzMjgsIDEzMDMzMSwgMTMwMzM0LCAxMzAzMzcsIDEzMDM0MCwgMTMwMzQzLCAKLSAgICAxMzAzNDYsIDEzMDM0OSwgMTMwMzUyLCAxMzAzNTUsIDEzMDM1OCwgMTMwMzYxLCAxMzAzNjQsIDEzMDM2NywgMTMwMzcwLCAKLSAgICAxMzAzNzMsIDEzMDM3NiwgMTMwMzc5LCAxMzAzODIsIDEzMDM4NSwgMTMwMzg4LCAxMzAzOTEsIDEzMDM5NCwgMTMwMzk3LCAKLSAgICAxMzA0MDAsIDEzMDQwMywgMTMwNDA2LCAxMzA0MDksIDEzMDQxMiwgMTMwNDE1LCAxMzA0MTgsIDEzMDQyMSwgMTMwNDI0LCAKLSAgICAxMzA0MjcsIDEzMDQzMCwgMTMwNDMzLCAxMzA0MzYsIDEzMDQzOSwgMTMwNDQyLCAxMzA0NDUsIDEzMDQ0OCwgMTMwNDUxLCAKLSAgICAxMzA0NTQsIDEzMDQ1NywgMTMwNDYwLCAxMzA0NjMsIDEzMDQ2NiwgMTMwNDY5LCAxMzA0NzIsIDEzMDQ3NSwgMTMwNDc4LCAKLSAgICAxMzA0ODEsIDEzMDQ4NCwgMTMwNDg3LCAxMzA0OTAsIDEzMDQ5MywgMTMwNDk2LCAxMzA0OTksIDEzMDUwMiwgMTMwNTA1LCAKLSAgICAxMzA1MDgsIDEzMDUxMSwgMTMwNTE0LCAxMzA1MTcsIDEzMDUyMCwgMTMwNTIzLCAxMzA1MjYsIDEzMDUyOSwgMTMwNTMyLCAKLSAgICAxMzA1MzUsIDEzMDUzOCwgMTMwNTQxLCAxMzA1NDQsIDEzMDU0NywgMTMwNTUwLCAxMzA1NTMsIDEzMDU1NiwgMTMwNTU5LCAKLSAgICAxMzA1NjIsIDEzMDU2NSwgMTMwNTY4LCAxMzA1NzEsIDEzMDU3NCwgMTMwNTc3LCAxMzA1ODAsIDEzMDU4MywgMTMwNTg2LCAKLSAgICAxMzA1ODksIDEzMDU5MiwgMTMwNTk1LCAxMzA1OTgsIDEzMDYwMSwgMTMwNjA0LCAxMzA2MDcsIDEzMDYxMCwgMTMwNjEzLCAKLSAgICAxMzA2MTYsIDEzMDYxOSwgMTMwNjIyLCAxMzA2MjUsIDEzMDYyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTMwNjMxLCAxMzA2MzMsIDEzMDYzNSwgMTMwNjQwLCAxMzA2NDIsIDEzMDY0NywgMTMwNjQ5LCAKLSAgICAxMzA2NTQsIDEzMDY1NiwgMTMwNjYxLCAxMzA2NjMsIDEzMDY2NSwgMTMwNjY3LCAxMzA2NjksIDEzMDY3MSwgMTMwNjczLCAKLSAgICAxMzA2NzUsIDEzMDY3NywgMTMwNjc5LCAxMzA2ODIsIDEzMDY4NSwgMTMwNjg3LCAxMzA2ODksIDEzMDY5MywgMTMwNjk2LCAKLSAgICAxMzA3MDEsIDEzMDcwMywgMTMwNzA1LCAxMzA3MDcsIDEzMDcxMSwgMTMwNzE0LCAxMzA3MTYsIDEzMDcyMCwgMTMwNzIyLCAKLSAgICAxMzA3MjYsIDEzMDcyOCwgMTMwNzMyLCAxMzA3MzUsIDEzMDczNywgMTMwNzQxLCAxMzA3NDUsIDEzMDc0NywgMTMwNzUzLCAKLSAgICAxMzA3NTUsIDEzMDc2MCwgMTMwNzYyLCAxMzA3NjcsIDEzMDc2OSwgMTMwNzc0LCAxMzA3NzYsIDEzMDc4MSwgMTMwNzgzLCAKLSAgICAxMzA3ODYsIDEzMDc4OCwgMTMwNzkyLCAxMzA3OTQsIDEzMDgwMSwgMTMwODAzLCAxMzA4MDUsIDEzMDgwNywgMTMwODEyLCAKLSAgICAxMzA4MTQsIDEzMDgxNiwgMTMwODE4LCAxMzA4MjAsIDEzMDgyMiwgMTMwODI3LCAxMzA4MzEsIDEzMDgzMywgMTMwODM4LCAKLSAgICAxMzA4NDIsIDEzMDg0NCwgMTMwODQ5LCAxMzA4NTMsIDEzMDg1NSwgMTMwODYwLCAxMzA4NjQsIDEzMDg2NiwgMTMwODY4LCAKLSAgICAxMzA4NzAsIDEzMDg3MiwgMTMwODc2LCAxMzA4NzgsIDEzMDg4MywgMTMwODg1LCAxMzA4OTEsIDEzMDg5MywgMTMwODk5LCAKLSAgICAxMzA5MDEsIDEzMDkwMywgMTMwOTA1LCAxMzA5MDksIDEzMDkxMSwgMTMwOTE4LCAxMzA5MjAsIDEzMDkyNywgMTMwOTI5LCAKLSAgICAxMzA5MzQsIDEzMDkzOSwgMTMwOTQxLCAxMzA5NDcsIDEzMDk1MywgMTMwOTU1LCAxMzA5NjEsIDEzMDk2NiwgMTMwOTY4LCAKLSAgICAxMzA5NzQsIDEzMDk4MCwgMTMwOTgyLCAxMzA5ODgsIDEzMDk5NCwgMTMwOTk2LCAxMzEwMDIsIDEzMTAwNiwgMTMxMDA4LCAKLSAgICAxMzEwMTMsIDEzMTAxNSwgMTMxMDE3LCAxMzEwMjIsIDEzMTAyNCwgMTMxMDI2LCAxMzEwMzIsIDEzMTAzNCwgMTMxMDM5LCAKLSAgICAxMzEwNDMsIDEzMTA0NSwgMTMxMDUwLCAxMzEwNTQsIDEzMTA1NiwgMTMxMDYyLCAxMzEwNjQsIDEzMTA2OCwgMTMxMDcwLCAKLSAgICAxMzEwNzQsIDEzMTA3NiwgMTMxMDgzLCAxMzEwOTAsIDEzMTA5MiwgMTMxMDk5LCAxMzExMDYsIDEzMTEwOCwgMTMxMTEzLCAKLSAgICAxMzExMTUsIDEzMTEyMiwgMTMxMTI0LCAxMzExMjksIDEzMTEzMSwgMTMxMTM3LCAxMzExMzksIDEzMTE0MywgMTMxMTQ1LCAKLSAgICAxMzExNTEsIDEzMTE1MywgMTMxMTU3LCAxMzExNTksIDEzMTE2NSwgMTMxMTY3LCAxMzExNjksIDEzMTE3MSwgMTMxMTc2LCAKLSAgICAxMzExODEsIDEzMTE4MywgMTMxMTg1LCAxMzExOTQsIDEzMTE5OCwgMTMxMjA1LCAxMzEyMTIsIDEzMTIxNywgMTMxMjIyLCAKLSAgICAxMzEyMzQsIDEzMTIzNiwgMTMxMjM4LCAxMzEyNDAsIDEzMTI0MiwgMTMxMjQ0LCAxMzEyNDYsIDEzMTI0OCwgMTMxMjUwLCAKLSAgICAxMzEyNTIsIDEzMTI1NCwgMTMxMjU2LCAxMzEyNTgsIDEzMTI2MCwgMTMxMjYyLCAxMzEyNjQsIDEzMTI2NiwgMTMxMjY4LCAKLSAgICAxMzEyNzAsIDEzMTI3MiwgMTMxMjc0LCAxMzEyNzYsIDEzMTI4MiwgMTMxMjg5LCAxMzEyOTQsIDEzMTI5OSwgMTMxMzEwLCAKLSAgICAxMzEzMTIsIDEzMTMxNCwgMTMxMzE2LCAxMzEzMTgsIDEzMTMyMCwgMTMxMzIyLCAxMzEzMjQsIDEzMTMyNiwgMTMxMzI4LCAKLSAgICAxMzEzMzAsIDEzMTMzMiwgMTMxMzM0LCAxMzEzMzYsIDEzMTMzOCwgMTMxMzQwLCAxMzEzNDIsIDEzMTM0NywgMTMxMzQ5LCAKLSAgICAxMzEzNTEsIDEzMTM1NywgMTMxMzY5LCAxMzEzODAsIDEzMTM4MiwgMTMxMzg0LCAxMzEzODYsIDEzMTM4OCwgMTMxMzkwLCAKLSAgICAxMzEzOTIsIDEzMTM5NCwgMTMxMzk2LCAxMzEzOTgsIDEzMTQwMCwgMTMxNDAyLCAxMzE0MDQsIDEzMTQwNiwgMTMxNDA4LCAKLSAgICAxMzE0MTAsIDEzMTQxMiwgMTMxNDE0LCAxMzE0MTYsIDEzMTQxOCwgMTMxNDIwLCAxMzE0MjIsIDEzMTQyNCwgMTMxNDI2LCAKLSAgICAxMzE0MjgsIDEzMTQzMCwgMTMxNDMyLCAxMzE0MzQsIDEzMTQzNiwgMTMxNDM4LCAxMzE0NDAsIDEzMTQ0MiwgMTMxNDQ0LCAKLSAgICAxMzE0NDYsIDEzMTQ0OCwgMTMxNDUwLCAxMzE0NTIsIDEzMTQ1NCwgMTMxNDU2LCAxMzE0NTgsIDEzMTQ2MCwgMTMxNDYyLCAKLSAgICAxMzE0NjQsIDEzMTQ2NiwgMTMxNDY4LCAxMzE0NzAsIDEzMTQ3MiwgMTMxNDc0LCAxMzE0NzYsIDEzMTQ3OCwgMTMxNDgwLCAKLSAgICAxMzE0ODIsIDEzMTQ4NCwgMTMxNDg2LCAxMzE0ODgsIDEzMTQ5MCwgMTMxNDkyLCAxMzE0OTQsIDEzMTQ5NiwgMTMxNDk4LCAKLSAgICAxMzE1MDAsIDEzMTUwMiwgMTMxNTA0LCAxMzE1MDYsIDEzMTUwOCwgMTMxNTEwLCAxMzE1MTIsIDEzMTUxNCwgMTMxNTE2LCAKLSAgICAxMzE1MTgsIDEzMTUyMCwgMTMxNTIyLCAxMzE1MjQsIDEzMTUyNiwgMTMxNTI4LCAxMzE1MzAsIDEzMTUzMiwgMTMxNTM0LCAKLSAgICAxMzE1MzYsIDEzMTUzOCwgMTMxNTQwLCAxMzE1NDIsIDEzMTU0NCwgMTMxNTQ2LCAxMzE1NDgsIDEzMTU1MCwgMTMxNTUyLCAKLSAgICAxMzE1NTQsIDEzMTU1NiwgMTMxNTU4LCAxMzE1NjAsIDEzMTU2MiwgMTMxNTY0LCAxMzE1NjYsIDEzMTU2OCwgMTMxNTcwLCAKLSAgICAxMzE1NzIsIDEzMTU3NCwgMTMxNTc2LCAxMzE1NzgsIDEzMTU4MCwgMTMxNTgyLCAxMzE1ODQsIDEzMTU4NiwgMTMxNTg4LCAKLSAgICAxMzE1OTAsIDEzMTU5MiwgMTMxNTk0LCAxMzE1OTYsIDEzMTU5OCwgMTMxNjAwLCAxMzE2MDIsIDEzMTYwNCwgMTMxNjA2LCAKLSAgICAxMzE2MDgsIDEzMTYxMCwgMTMxNjEyLCAxMzE2MTQsIDEzMTYxNiwgMTMxNjE4LCAxMzE2MjAsIDEzMTYyMiwgMTMxNjI0LCAKLSAgICAxMzE2MjYsIDEzMTYyOCwgMTMxNjMwLCAxMzE2MzIsIDEzMTYzNCwgMTMxNjM2LCAxMzE2MzgsIDEzMTY0MCwgMTMxNjQyLCAKLSAgICAxMzE2NDQsIDEzMTY0NiwgMTMxNjQ4LCAxMzE2NTAsIDEzMTY1MiwgMTMxNjU0LCAxMzE2NTYsIDEzMTY1OCwgMTMxNjYwLCAKLSAgICAxMzE2NjIsIDEzMTY2NCwgMTMxNjY2LCAxMzE2NjgsIDEzMTY3MCwgMTMxNjcyLCAxMzE2NzQsIDEzMTY3NiwgMTMxNjc4LCAKLSAgICAxMzE2ODAsIDEzMTY4MiwgMTMxNjg0LCAxMzE2ODYsIDEzMTY4OCwgMTMxNjkwLCAxMzE2OTIsIDEzMTY5NCwgMTMxNjk2LCAKLSAgICAxMzE2OTgsIDEzMTcwMCwgMTMxNzAyLCAxMzE3MDQsIDEzMTcwNiwgMTMxNzA4LCAxMzE3MTAsIDEzMTcxMiwgMTMxNzE0LCAKLSAgICAxMzE3MTYsIDEzMTcxOCwgMTMxNzIwLCAxMzE3MjIsIDEzMTcyNCwgMTMxNzI2LCAxMzE3MjgsIDEzMTczMCwgMTMxNzMyLCAKLSAgICAxMzE3MzQsIDEzMTczNiwgMTMxNzM4LCAxMzE3NDAsIDEzMTc0MiwgMTMxNzQ0LCAxMzE3NDYsIDEzMTc0OCwgMTMxNzUwLCAKLSAgICAxMzE3NTIsIDEzMTc1NCwgMTMxNzU2LCAxMzE3NTgsIDEzMTc2MCwgMTMxNzYyLCAxMzE3NjQsIDEzMTc2NiwgMTMxNzY4LCAKLSAgICAxMzE3NzAsIDEzMTc3MiwgMTMxNzc0LCAxMzE3NzYsIDEzMTc3OCwgMTMxNzgwLCAxMzE3ODIsIDEzMTc4NCwgMTMxNzg2LCAKLSAgICAxMzE3ODgsIDEzMTc5MCwgMTMxNzkyLCAxMzE3OTQsIDEzMTc5NiwgMTMxNzk4LCAxMzE4MDAsIDEzMTgwMiwgMTMxODA0LCAKLSAgICAxMzE4MDYsIDEzMTgwOCwgMTMxODEwLCAxMzE4MTIsIDEzMTgxNCwgMTMxODE2LCAxMzE4MTgsIDEzMTgyMCwgMTMxODIyLCAKLSAgICAxMzE4MjQsIDEzMTgyNiwgMTMxODI4LCAxMzE4MzAsIDEzMTgzMiwgMTMxODM0LCAxMzE4MzYsIDEzMTgzOCwgMTMxODQwLCAKLSAgICAxMzE4NDIsIDEzMTg0NCwgMTMxODQ2LCAxMzE4NDgsIDEzMTg1MCwgMTMxODUyLCAxMzE4NTQsIDEzMTg1NiwgMTMxODU4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDI2ODEsIDEwMjY4NiwgMTAyNjkyLCAxMDI2OTgsIDEwMjcwNCwgCisgICAgMTAyNzEwLCAxMDI3MTYsIDEwMjcyMiwgMTAyNzI4LCAxMDI3MzQsIDEwMjczOSwgMTAyNzQ2LCAxMDI3NTIsIDEwMjc1OCwgCisgICAgMTAyNzY0LCAxMDI3NzAsIDEwMjc3NiwgMTAyNzgxLCAxMDI3ODcsIDEwMjc5MywgMTAyNzk5LCAxMDI4MDUsIDEwMjgxMSwgCisgICAgMTAyODE3LCAxMDI4MjMsIDEwMjgyOSwgMTAyODM1LCAxMDI4NDEsIDEwMjg0NiwgMTAyODUyLCAxMDI4NjAsIDEwMjg2OCwgCisgICAgMTAyODc0LCAxMDI4ODAsIDEwMjg4NiwgMTAyODkyLCAxMDI5MDAsIDEwMjkwNiwgMTAyOTEyLCAxMDI5MTgsIDEwMjkyNCwgCisgICAgMTAyOTMwLCAxMDI5MzYsIDEwMjk0MSwgMTAyOTQ3LCAxMDI5NTUsIDEwMjk2MywgMTAyOTY5LCAxMDI5NzUsIDEwMjk4MSwgCisgICAgMTAyOTg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDI5OTQsIDEwMjk5OSwgMTAzMDA1LCAKKyAgICAxMDMwMTEsIDEwMzAxNywgMTAzMDIzLCAxMDMwMjksIDEwMzAzNSwgMTAzMDQxLCAxMDMwNDcsIDEwMzA1MiwgMTAzMDU5LCAKKyAgICAxMDMwNjUsIDEwMzA3MSwgMTAzMDc3LCAxMDMwODMsIDEwMzA4OSwgMTAzMDk0LCAxMDMxMDAsIDEwMzEwNiwgMTAzMTEyLCAKKyAgICAxMDMxMTgsIDEwMzEyNCwgMTAzMTMwLCAxMDMxMzYsIDEwMzE0MiwgMTAzMTQ4LCAxMDMxNTQsIDEwMzE1OSwgMTAzMTY1LCAKKyAgICAxMDMxNzMsIDEwMzE4MSwgMTAzMTg3LCAxMDMxOTMsIDEwMzE5OSwgMTAzMjA1LCAxMDMyMTMsIDEwMzIxOSwgMTAzMjI1LCAKKyAgICAxMDMyMzEsIDEwMzIzNywgMTAzMjQzLCAxMDMyNDksIDEwMzI1NCwgMTAzMjYwLCAxMDMyNjgsIDEwMzI3NiwgMTAzMjgyLCAKKyAgICAxMDMyODgsIDEwMzI5NCwgMTAzMzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDMzMDcsIDEwMzMxMSwgMTAzMzE1LCAKKyAgICAxMDMzMjAsIDEwMzMyNSwgMTAzMzMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzE4NjAsIDEzMTg3MCwgMTMxODgwLCAxMzE4ODksIDEzMTg5OCwgMTMxOTExLCAKLSAgICAxMzE5MjQsIDEzMTkzNiwgMTMxOTQ4LCAxMzE5NTgsIDEzMTk2OCwgMTMxOTc4LCAxMzE5ODgsIDEzMTk5OSwgMTMyMDEwLCAKLSAgICAxMzIwMjAsIDEzMjAyOSwgMTMyMDM4LCAxMzIwNDcsIDEzMjA2MCwgMTMyMDczLCAxMzIwODUsIDEzMjA5NywgMTMyMTA3LCAKLSAgICAxMzIxMTcsIDEzMjEyNywgMTMyMTM3LCAxMzIxNDYsIDEzMjE1NSwgMTMyMTY0LCAxMzIxNzMsIDEzMjE4MiwgMTMyMTkxLCAKLSAgICAxMzIyMDAsIDEzMjIwOSwgMTMyMjE4LCAxMzIyMjcsIDEzMjIzNiwgMTMyMjQ1LCAxMzIyNTYsIDEzMjI2NiwgMTMyMjc2LCAKLSAgICAxMzIyODksIDEzMjI5OSwgMTMyMzEyLCAxMzIzMTksIDEzMjMyOSwgMTMyMzM2LCAxMzIzNDMsIDEzMjM1MCwgMTMyMzU3LCAKLSAgICAxMzIzNjQsIDEzMjM3MSwgMTMyMzgwLCAxMzIzODksIDEzMjM5OCwgMTMyNDA3LCAxMzI0MTYsIDEzMjQyNSwgMTMyNDM0LCAKLSAgICAxMzI0NDMsIDEzMjQ1MSwgMTMyNDU5LCAxMzI0NjYsIDEzMjQ3NiwgMTMyNDg1LCAxMzI0OTMsIDEzMjUwMCwgMTMyNTEwLCAKLSAgICAxMzI1MTksIDEzMjUyOSwgMTMyNTM5LCAxMzI1NTAsIDEzMjU2MCwgMTMyNTY5LCAxMzI1NzksIDEzMjU4OCwgMTMyNTk4LCAKLSAgICAxMzI2MDYsIDEzMjYxMCwgMTMyNjE0LCAxMzI2MTgsIDEzMjYyMiwgMTMyNjI2LCAxMzI2MzAsIDEzMjYzNCwgMTMyNjM4LCAKLSAgICAxMzI2NDIsIDEzMjY0NiwgMTMyNjQ5LCAxMzI2NTMsIDEzMjY1NiwgMTMyNjU5LCAxMzI2NjMsIDEzMjY2NywgMTMyNjcxLCAKLSAgICAxMzI2NzUsIDEzMjY3OSwgMTMyNjgzLCAxMzI2ODcsIDEzMjY5MSwgMTMyNjk1LCAxMzI2OTksIDEzMjcwMywgMTMyNzA3LCAKLSAgICAxMzI3MTEsIDEzMjcxNSwgMTMyNzE5LCAxMzI3MjMsIDEzMjcyNywgMTMyNzMxLCAxMzI3MzUsIDEzMjczOSwgMTMyNzQzLCAKLSAgICAxMzI3NDcsIDEzMjc1MSwgMTMyNzU1LCAxMzI3NTksIDEzMjc2MywgMTMyNzY3LCAxMzI3NzEsIDEzMjc3NSwgMTMyNzc5LCAKLSAgICAxMzI3ODMsIDEzMjc4NywgMTMyNzkxLCAxMzI3OTUsIDEzMjc5OSwgMTMyODAzLCAxMzI4MDcsIDEzMjgxMSwgMTMyODE1LCAKLSAgICAxMzI4MTksIDEzMjgyMywgMTMyODI3LCAxMzI4MzEsIDEzMjgzNSwgMTMyODM5LCAxMzI4NDMsIDEzMjg0NywgMTMyODUxLCAKLSAgICAxMzI4NTUsIDEzMjg1OSwgMTMyODYzLCAxMzI4NjcsIDEzMjg3MSwgMTMyODc1LCAxMzI4NzksIDEzMjg4MywgMTMyODg3LCAKLSAgICAxMzI4OTEsIDEzMjg5NSwgMTMyODk5LCAxMzI5MDMsIDEzMjkwNywgMTMyOTExLCAxMzI5MTUsIDEzMjkxOSwgMTMyOTIzLCAKLSAgICAxMzI5MjcsIDEzMjkzMSwgMTMyOTM1LCAxMzI5MzksIDEzMjk0MywgMTMyOTQ3LCAxMzI5NTEsIDEzMjk1NSwgMTMyOTU5LCAKLSAgICAxMzI5NjMsIDEzMjk2NywgMTMyOTcxLCAxMzI5NzUsIDEzMjk3OSwgMTMyOTgzLCAxMzI5ODcsIDEzMjk5MSwgMTMyOTk1LCAKLSAgICAxMzI5OTksIDEzMzAwMiwgMTMzMDA2LCAxMzMwMTAsIDEzMzAxNCwgMTMzMDE4LCAxMzMwMjIsIDEzMzAyNiwgMTMzMDMwLCAKLSAgICAxMzMwMzQsIDEzMzAzOCwgMTMzMDQyLCAxMzMwNDYsIDEzMzA1MCwgMTMzMDU0LCAxMzMwNTgsIDEzMzA2MiwgMTMzMDY2LCAKLSAgICAxMzMwNzAsIDEzMzA3NCwgMTMzMDc4LCAxMzMwODIsIDEzMzA4NiwgMTMzMDkwLCAxMzMwOTQsIDEzMzA5OCwgMTMzMTAyLCAKLSAgICAxMzMxMDYsIDEzMzExMCwgMTMzMTE0LCAxMzMxMTgsIDEzMzEyMiwgMTMzMTI2LCAxMzMxMzAsIDEzMzEzNCwgMTMzMTM4LCAKLSAgICAxMzMxNDIsIDEzMzE0NiwgMTMzMTUwLCAxMzMxNTQsIDEzMzE1OCwgMTMzMTYyLCAxMzMxNjYsIDEzMzE3MCwgMTMzMTc0LCAKLSAgICAxMzMxNzgsIDEzMzE4MiwgMTMzMTg2LCAxMzMxOTAsIDEzMzE5NCwgMTMzMTk4LCAxMzMyMDIsIDEzMzIwNiwgMTMzMjEwLCAKLSAgICAxMzMyMTQsIDEzMzIxOCwgMTMzMjIyLCAxMzMyMjYsIDEzMzIzMCwgMTMzMjM0LCAxMzMyMzgsIDEzMzI0MiwgMTMzMjQ2LCAKLSAgICAxMzMyNTAsIDEzMzI1NCwgMTMzMjU4LCAxMzMyNjIsIDEzMzI2NiwgMTMzMjcwLCAxMzMyNzQsIDEzMzI3OCwgMTMzMjgyLCAKLSAgICAxMzMyODYsIDEzMzI5MCwgMTMzMjk0LCAxMzMyOTgsIDEzMzMwMiwgMTMzMzA2LCAxMzMzMTAsIDEzMzMxNCwgMTMzMzE4LCAKLSAgICAxMzMzMjIsIDEzMzMyNiwgMTMzMzMwLCAxMzMzMzQsIDEzMzMzOCwgMTMzMzQyLCAxMzMzNDYsIDEzMzM1MCwgMTMzMzU0LCAKLSAgICAxMzMzNTgsIDEzMzM2MiwgMTMzMzY2LCAxMzMzNzAsIDEzMzM3NCwgMTMzMzc4LCAxMzMzODIsIDEzMzM4NiwgMTMzMzkwLCAKLSAgICAxMzMzOTQsIDEzMzM5OCwgMTMzNDAyLCAxMzM0MDYsIDEzMzQxMCwgMTMzNDE0LCAxMzM0MTgsIDEzMzQyMiwgMTMzNDI2LCAKLSAgICAxMzM0MzAsIDEzMzQzNCwgMTMzNDM4LCAxMzM0NDIsIDEzMzQ0NiwgMTMzNDUwLCAxMzM0NTQsIDEzMzQ1OCwgMTMzNDYyLCAKLSAgICAxMzM0NjYsIDEzMzQ3MCwgMTMzNDc0LCAxMzM0NzgsIDEzMzQ4MiwgMTMzNDg2LCAxMzM0OTAsIDEzMzQ5NCwgMTMzNDk4LCAKLSAgICAxMzM1MDIsIDEzMzUwNiwgMTMzNTEwLCAxMzM1MTQsIDEzMzUxOCwgMTMzNTIyLCAxMzM1MjYsIDEzMzUzMCwgMTMzNTM0LCAKLSAgICAxMzM1MzgsIDEzMzU0MiwgMTMzNTQ2LCAxMzM1NTAsIDEzMzU1NCwgMTMzNTU4LCAxMzM1NjIsIDEzMzU2NiwgMTMzNTcwLCAKLSAgICAxMzM1NzQsIDEzMzU3OCwgMTMzNTgyLCAxMzM1ODYsIDEzMzU5MCwgMTMzNTk0LCAxMzM1OTgsIDEzMzYwMiwgMTMzNjA2LCAKLSAgICAxMzM2MTAsIDEzMzYxNCwgMTMzNjE4LCAxMzM2MjIsIDEzMzYyNiwgMTMzNjMwLCAxMzM2MzQsIDEzMzYzOCwgMTMzNjQyLCAKLSAgICAxMzM2NDYsIDEzMzY1MCwgMTMzNjU0LCAxMzM2NTgsIDEzMzY2MiwgMTMzNjY2LCAxMzM2NzAsIDEzMzY3NCwgMTMzNjc4LCAKLSAgICAxMzM2ODIsIDEzMzY4NiwgMTMzNjkwLCAxMzM2OTQsIDEzMzY5OCwgMTMzNzAyLCAxMzM3MDYsIDEzMzcxMCwgMTMzNzE0LCAKLSAgICAxMzM3MTgsIDEzMzcyMiwgMTMzNzI2LCAxMzM3MzAsIDEzMzczNCwgMTMzNzM4LCAxMzM3NDIsIDEzMzc0NiwgMTMzNzUwLCAKLSAgICAxMzM3NTQsIDEzMzc1OCwgMTMzNzYyLCAxMzM3NjYsIDEzMzc3MSwgMTMzNzc2LCAxMzM3ODEsIDEzMzc4NSwgMTMzNzkxLCAKLSAgICAxMzM3OTgsIDEzMzgwNSwgMTMzODEyLCAxMzM4MTksIDEzMzgyNiwgMTMzODMzLCAxMzM4NDAsIDEzMzg0NywgMTMzODU0LCAKLSAgICAxMzM4NjEsIDEzMzg2OCwgMTMzODc1LCAxMzM4ODIsIDEzMzg4OCwgMTMzODk1LCAxMzM5MDIsIDEzMzkwOCwgMTMzOTE1LCAKLSAgICAxMzM5MjIsIDEzMzkyOSwgMTMzOTM2LCAxMzM5NDMsIDEzMzk1MCwgMTMzOTU3LCAxMzM5NjQsIDEzMzk3MSwgMTMzOTc4LCAKLSAgICAxMzM5ODUsIDEzMzk5MiwgMTMzOTk5LCAxMzQwMDUsIDEzNDAxMSwgMTM0MDE4LCAxMzQwMjUsIDEzNDAzNCwgMTM0MDQzLCAKLSAgICAxMzQwNTIsIDEzNDA2MSwgMTM0MDY2LCAxMzQwNzEsIDEzNDA3NywgMTM0MDgzLCAxMzQwODksIDEzNDA5NSwgMTM0MTAxLCAKLSAgICAxMzQxMDcsIDEzNDExMywgMTM0MTE5LCAxMzQxMjUsIDEzNDEzMSwgMTM0MTM3LCAxMzQxNDMsIDEzNDE0OCwgMTM0MTU0LCAKLSAgICAxMzQxNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzMzNywgMTAzMzQxLCAxMDMzNDUsIDEwMzM0OSwgMTAzMzUzLCAxMDMzNTcsIAorICAgIDEwMzM2MSwgMTAzMzY2LCAxMDMzNzAsIDEwMzM3NSwgMTAzMzgwLCAxMDMzODUsIDEwMzM5MCwgMTAzMzk1LCAxMDM0MDAsIAorICAgIDEwMzQwNSwgMTAzNDEwLCAxMDM0MTUsIDEwMzQyMCwgMTAzNDI2LCAxMDM0MzIsIDEwMzQzOCwgMTAzNDQ1LCAxMDM0NTIsIAorICAgIDEwMzQ1OSwgMTAzNDY2LCAxMDM0NzMsIDEwMzQ4MCwgMTAzNDg3LCAxMDM0OTQsIDEwMzUwMSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTAzNTA4LCAxMDM1MTIsIDEwMzUxNiwgMTAzNTIwLCAxMDM1MjQsIDEwMzUyOCwgMTAzNTMxLCAxMDM1MzUsIAorICAgIDEwMzUzOCwgMTAzNTQyLCAxMDM1NDUsIDEwMzU0OSwgMTAzNTUzLCAxMDM1NTgsIDEwMzU2MiwgMTAzNTY3LCAxMDM1NzAsIAorICAgIDEwMzU3NCwgMTAzNTc3LCAxMDM1ODEsIDEwMzU4NCwgMTAzNTg4LCAxMDM1OTIsIDEwMzU5NiwgMTAzNjAwLCAxMDM2MDQsIAorICAgIDEwMzYwOCwgMTAzNjEyLCAxMDM2MTYsIDEwMzYyMCwgMTAzNjI0LCAxMDM2MjgsIDEwMzYzMiwgMTAzNjM2LCAxMDM2NDAsIAorICAgIDEwMzY0NCwgMTAzNjQ4LCAxMDM2NTIsIDEwMzY1NiwgMTAzNjYwLCAxMDM2NjMsIDEwMzY2NywgMTAzNjcxLCAxMDM2NzUsIAorICAgIDEwMzY3OCwgMTAzNjgxLCAxMDM2ODUsIDEwMzY4OSwgMTAzNjkzLCAxMDM2OTcsIDEwMzcwMSwgMTAzNzA1LCAxMDM3MDgsIAorICAgIDEwMzcxMiwgMTAzNzE4LCAxMDM3MjQsIDEwMzczMCwgMTAzNzM1LCAxMDM3NDIsIDEwMzc0NiwgMTAzNzUxLCAxMDM3NTUsIAorICAgIDEwMzc2MCwgMTAzNzY1LCAxMDM3NzEsIDEwMzc3NiwgMTAzNzgyLCAxMDM3ODYsIDEwMzc5MSwgMTAzNzk1LCAxMDM4MDAsIAorICAgIDEwMzgwMywgMTAzODA2LCAxMDM4MTAsIDEwMzgxNSwgMTAzODIxLCAxMDM4MjYsIDEwMzgzMiwgMCwgMCwgMCwgMCwgCisgICAgMTAzODM3LCAxMDM4NDAsIDEwMzg0MywgMTAzODQ2LCAxMDM4NDksIDEwMzg1MiwgMTAzODU1LCAxMDM4NTksIDEwMzg2MiwgCisgICAgMTAzODY2LCAxMDM4NzAsIDEwMzg3NCwgMTAzODc4LCAxMDM4ODIsIDEwMzg4NiwgMTAzODkwLCAxMDM4OTQsIDEwMzg5OCwgCisgICAgMTAzOTAyLCAxMDM5MDcsIDEwMzkxMiwgMTAzOTE2LCAxMDM5MTksIDEwMzkyMiwgMTAzOTI1LCAxMDM5MjgsIDEwMzkzMSwgCisgICAgMTAzOTM0LCAxMDM5MzgsIDEwMzk0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTAzOTQ1LCAxMDM5NDksIDEwMzk1NCwgMTAzOTU5LCAxMDM5NjQsIDEwMzk2OCwgMTAzOTczLCAxMDM5NzcsIDEwMzk4MiwgCisgICAgMTAzOTg2LCAxMDM5OTEsIDEwMzk5NSwgMTA0MDAwLCAxMDQwMDQsIDEwNDAwOSwgMTA0MDEzLCAxMDQwMTgsIDEwNDAyMywgCisgICAgMTA0MDI4LCAxMDQwMzMsIDEwNDAzOCwgMTA0MDQzLCAxMDQwNDgsIDEwNDA1MywgMTA0MDU4LCAxMDQwNjMsIDEwNDA2OCwgCisgICAgMTA0MDczLCAxMDQwNzgsIDEwNDA4MywgMTA0MDg4LCAxMDQwOTMsIDEwNDA5OCwgMTA0MTAzLCAxMDQxMDgsIDEwNDExMywgCisgICAgMTA0MTE4LCAxMDQxMjIsIDEwNDEyNywgMTA0MTMyLCAxMDQxMzcsIDEwNDE0MSwgMTA0MTQ1LCAxMDQxNTAsIDEwNDE1NSwgCisgICAgMTA0MTYwLCAxMDQxNjUsIDEwNDE3MCwgMTA0MTc1LCAxMDQxNzksIDEwNDE4NSwgMTA0MTkwLCAxMDQxOTYsIDEwNDIwMSwgCisgICAgMTA0MjA3LCAxMDQyMTIsIDEwNDIxOCwgMTA0MjIzLCAxMDQyMjksIDEwNDIzNCwgMTA0MjM5LCAxMDQyNDQsIDEwNDI0OSwgCisgICAgMTA0MjUzLCAxMDQyNTgsIDEwNDI2NCwgMTA0MjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDQyNzMsIDEwNDI4MCwgMTA0Mjg3LCAxMDQyOTQsIDEwNDMwMSwgMTA0MzA4LCAxMDQzMTUsIDEwNDMyMiwgMTA0MzI5LCAKKyAgICAxMDQzMzYsIDEwNDM0MywgMTA0MzUwLCAxMDQzNTcsIDEwNDM2NCwgMTA0MzcxLCAxMDQzNzgsIDEwNDM4NSwgMTA0MzkyLCAKKyAgICAxMDQzOTksIDEwNDQwNiwgMTA0NDEzLCAxMDQ0MjAsIDEwNDQyNywgMTA0NDM0LCAxMDQ0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEwNDQ0OCwgMTA0NDU1LCAxMDQ0NjEsIDEwNDQ2NywgMTA0NDczLCAxMDQ0NzksIDEwNDQ4NSwgMTA0NDkxLCAKKyAgICAxMDQ0OTgsIDEwNDUwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0NTExLCAxMDQ1MTYsIDEwNDUyMSwgMTA0NTI2LCAxMDQ1MzEsIAorICAgIDEwNDUzNSwgMTA0NTM5LCAxMDQ1NDMsIDEwNDU0OCwgMTA0NTUzLCAxMDQ1NTgsIDEwNDU2MywgMTA0NTY4LCAxMDQ1NzMsIAorICAgIDEwNDU3OCwgMTA0NTgzLCAxMDQ1ODgsIDEwNDU5MywgMTA0NTk4LCAxMDQ2MDMsIDEwNDYwOCwgMTA0NjEzLCAxMDQ2MTgsIAorICAgIDEwNDYyMywgMTA0NjI4LCAxMDQ2MzMsIDEwNDYzOCwgMTA0NjQzLCAxMDQ2NDgsIDEwNDY1MywgMTA0NjU4LCAxMDQ2NjMsIAorICAgIDEwNDY2OCwgMTA0NjczLCAxMDQ2NzgsIDEwNDY4MywgMTA0Njg4LCAxMDQ2OTMsIDEwNDY5OCwgMTA0NzAzLCAxMDQ3MDgsIAorICAgIDEwNDcxMywgMTA0NzE5LCAxMDQ3MjQsIDEwNDczMCwgMTA0NzM1LCAxMDQ3NDEsIDEwNDc0NiwgMTA0NzUyLCAxMDQ3NTgsIAorICAgIDEwNDc2MiwgMTA0NzY3LCAxMDQ3NzEsIDAsIDEwNDc3NSwgMTA0NzgwLCAxMDQ3ODQsIDEwNDc4OCwgMTA0NzkyLCAKKyAgICAxMDQ3OTYsIDEwNDgwMCwgMTA0ODA0LCAxMDQ4MDksIDEwNDgxMywgMTA0ODE4LCAxMDQ4MjMsIDEwNDgyNywgMTA0ODMyLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQ4MzcsIDEwNDg0MSwgMTA0ODQ1LCAxMDQ4NDksIAorICAgIDEwNDg1MywgMTA0ODU3LCAxMDQ4NjEsIDEwNDg2NiwgMTA0ODcxLCAxMDQ4NzYsIDEwNDg4MSwgMTA0ODg2LCAxMDQ4OTEsIAorICAgIDEwNDg5NiwgMTA0OTAxLCAxMDQ5MDYsIDEwNDkxMSwgMTA0OTE2LCAxMDQ5MjEsIDEwNDkyNiwgMTA0OTMxLCAxMDQ5MzYsIAorICAgIDEwNDk0MSwgMTA0OTQ2LCAxMDQ5NTEsIDEwNDk1NSwgMTA0OTYwLCAxMDQ5NjUsIDEwNDk3MCwgMTA0OTc0LCAxMDQ5NzksIAorICAgIDEwNDk4NCwgMTA0OTg5LCAxMDQ5OTQsIDEwNDk5OCwgMTA1MDAzLCAxMDUwMDgsIDEwNTAxMywgMTA1MDE4LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMDUwMjMsIDEwNTAyNywgMTA1MDMxLCAxMDUwMzUsIDEwNTAzOCwgMTA1MDQyLCAxMDUwNDUsIAorICAgIDEwNTA0OSwgMTA1MDUyLCAxMDUwNTYsIDEwNTA2MCwgMTA1MDY1LCAxMDUwNjksIDEwNTA3NCwgMTA1MDc3LCAxMDUwODEsIAorICAgIDEwNTA4NCwgMTA1MDg4LCAxMDUwOTEsIDEwNTA5NSwgMTA1MDk5LCAxMDUxMDMsIDEwNTEwNywgMTA1MTExLCAxMDUxMTUsIAorICAgIDEwNTExOSwgMTA1MTIzLCAxMDUxMjcsIDEwNTEzMSwgMTA1MTM1LCAxMDUxMzksIDEwNTE0MywgMTA1MTQ3LCAxMDUxNTEsIAorICAgIDEwNTE1NSwgMTA1MTU5LCAxMDUxNjMsIDEwNTE2NywgMTA1MTcwLCAxMDUxNzQsIDEwNTE3OCwgMTA1MTgyLCAxMDUxODUsIAorICAgIDEwNTE4OCwgMTA1MTkyLCAxMDUxOTYsIDEwNTIwMCwgMTA1MjA0LCAxMDUyMDgsIDEwNTIxMiwgMTA1MjE2LCAxMDUyMTksIAorICAgIDEwNTIyNCwgMTA1MjI4LCAxMDUyMzMsIDEwNTIzNywgMTA1MjQyLCAxMDUyNDcsIDEwNTI1MywgMTA1MjU4LCAxMDUyNjQsIAorICAgIDEwNTI2OCwgMTA1MjczLCAxMDUyNzcsIDEwNTI4MiwgMTA1Mjg2LCAxMDUyOTAsIDEwNTI5NCwgMTA1Mjk4LCAxMDUzMDEsIAorICAgIDEwNTMwNCwgMTA1MzA4LCAxMDUzMTIsIDEwNTMxNSwgMTA1MzE5LCAxMDUzMjMsIDEwNTMyNywgMTA1MzM0LCAwLCAwLCAKKyAgICAxMDUzMzgsIDEwNTM0MiwgMTA1MzQ1LCAxMDUzNDgsIDEwNTM1MSwgMTA1MzU0LCAxMDUzNTcsIDEwNTM2MCwgMTA1MzY0LCAKKyAgICAxMDUzNjcsIDEwNTM3MSwgMTA1Mzc0LCAxMDUzNzgsIDEwNTM4MSwgMTA1Mzg1LCAxMDUzOTAsIDAsIDEwNTM5NSwgCisgICAgMTA1NDAwLCAxMDU0MDUsIDEwNTQxMCwgMTA1NDE1LCAxMDU0MjAsIDEwNTQyNSwgMTA1NDMxLCAxMDU0MzYsIDEwNTQ0MiwgCisgICAgMTA1NDQ4LCAxMDU0NTQsIDEwNTQ2MCwgMTA1NDY2LCAxMDU0NzIsIDEwNTQ3OCwgMTA1NDg0LCAxMDU0OTAsIDEwNTQ5NiwgCisgICAgMTA1NTAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDU1MTAsIDEwNTUxNCwgMTA1NTE5LCAxMDU1MjMsIAorICAgIDEwNTUyNywgMTA1NTMxLCAxMDU1MzYsIDEwNTU0MCwgMTA1NTQ1LCAxMDU1NDksIDEwNTU1NCwgMTA1NTU5LCAxMDU1NjQsIAorICAgIDEwNTU2OSwgMTA1NTc0LCAxMDU1NzksIDEwNTU4NCwgMTA1NTg5LCAwLCAxMDU1OTQsIDEwNTU5OSwgMTA1NjA0LCAKKyAgICAxMDU2MDksIDEwNTYxNCwgMTA1NjE5LCAxMDU2MjQsIDEwNTYyOSwgMTA1NjM0LCAxMDU2MzksIDEwNTY0NCwgMTA1NjQ5LCAKKyAgICAxMDU2NTQsIDEwNTY1OCwgMTA1NjYzLCAxMDU2NjgsIDEwNTY3MywgMTA1Njc4LCAxMDU2ODIsIDEwNTY4NiwgMTA1NjkxLCAKKyAgICAxMDU2OTYsIDEwNTcwMSwgMTA1NzA2LCAxMDU3MTAsIDEwNTcxNSwgMTA1NzIxLCAxMDU3MjYsIDEwNTczMiwgMTA1NzM3LCAKKyAgICAxMDU3NDIsIDEwNTc0OCwgMTA1NzUzLCAxMDU3NTksIDEwNTc2NCwgMTA1NzY5LCAxMDU3NzQsIDEwNTc3OSwgMTA1NzgzLCAKKyAgICAxMDU3ODgsIDEwNTc5NCwgMTA1Nzk5LCAxMDU4MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEwNTgxMCwgMTA1ODE0LCAxMDU4MTgsIDEwNTgyMiwgMTA1ODI2LCAxMDU4MzAsIDEwNTgzNSwgMCwgCisgICAgMTA1ODQwLCAwLCAxMDU4NDUsIDEwNTg1MCwgMTA1ODU1LCAxMDU4NjAsIDAsIDEwNTg2NSwgMTA1ODcwLCAxMDU4NzUsIAorICAgIDEwNTg4MCwgMTA1ODg1LCAxMDU4OTAsIDEwNTg5NSwgMTA1OTAwLCAxMDU5MDUsIDEwNTkxMCwgMTA1OTE1LCAxMDU5MjAsIAorICAgIDEwNTkyNSwgMTA1OTI5LCAxMDU5MzQsIDAsIDEwNTkzOSwgMTA1OTQ0LCAxMDU5NDgsIDEwNTk1MiwgMTA1OTU3LCAKKyAgICAxMDU5NjIsIDEwNTk2NywgMTA1OTcyLCAxMDU5NzYsIDEwNTk4MSwgMTA1OTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDU5OTEsIAorICAgIDEwNTk5NSwgMTA2MDAwLCAxMDYwMDQsIDEwNjAwOSwgMTA2MDEzLCAxMDYwMTgsIDEwNjAyMiwgMTA2MDI3LCAxMDYwMzEsIAorICAgIDEwNjAzNiwgMTA2MDQwLCAxMDYwNDUsIDEwNjA1MCwgMTA2MDU1LCAxMDYwNjAsIDEwNjA2NSwgMTA2MDcwLCAxMDYwNzUsIAorICAgIDEwNjA4MCwgMTA2MDg1LCAxMDYwOTAsIDEwNjA5NSwgMTA2MTAwLCAxMDYxMDUsIDEwNjExMCwgMTA2MTE1LCAxMDYxMjAsIAorICAgIDEwNjEyNSwgMTA2MTMwLCAxMDYxMzUsIDEwNjE0MCwgMTA2MTQ1LCAxMDYxNTAsIDEwNjE1NSwgMTA2MTU5LCAxMDYxNjQsIAorICAgIDEwNjE2OSwgMTA2MTc0LCAxMDYxNzksIDEwNjE4MywgMTA2MTg3LCAxMDYxOTIsIDEwNjE5NywgMTA2MjAyLCAxMDYyMDcsIAorICAgIDEwNjIxMiwgMTA2MjE2LCAxMDYyMjEsIDEwNjIyNywgMTA2MjMyLCAxMDYyMzgsIDEwNjI0MywgMTA2MjQ5LCAxMDYyNTQsIAorICAgIDEwNjI2MCwgMTA2MjY1LCAxMDYyNzEsIDEwNjI3NiwgMCwgMCwgMCwgMCwgMCwgMTA2MjgxLCAxMDYyODYsIDEwNjI5MCwgCisgICAgMTA2Mjk0LCAxMDYyOTgsIDEwNjMwMiwgMTA2MzA2LCAxMDYzMTAsIDEwNjMxNSwgMTA2MzE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDYzMjQsIDEwNjMzMSwgMTA2MzM2LCAxMDYzNDEsIDAsIDEwNjM0NiwgMTA2MzUwLCAxMDYzNTUsIDEwNjM1OSwgCisgICAgMTA2MzY0LCAxMDYzNjgsIDEwNjM3MywgMTA2Mzc4LCAwLCAwLCAxMDYzODMsIDEwNjM4OCwgMCwgMCwgMTA2MzkzLCAKKyAgICAxMDYzOTgsIDEwNjQwMywgMTA2NDA3LCAxMDY0MTIsIDEwNjQxNywgMTA2NDIyLCAxMDY0MjcsIDEwNjQzMiwgMTA2NDM3LCAKKyAgICAxMDY0NDIsIDEwNjQ0NywgMTA2NDUyLCAxMDY0NTcsIDEwNjQ2MiwgMTA2NDY3LCAxMDY0NzIsIDEwNjQ3NywgMTA2NDgyLCAKKyAgICAxMDY0ODcsIDEwNjQ5MiwgMTA2NDk3LCAwLCAxMDY1MDIsIDEwNjUwNiwgMTA2NTExLCAxMDY1MTYsIDEwNjUyMSwgCisgICAgMTA2NTI1LCAxMDY1MjksIDAsIDEwNjUzNCwgMTA2NTM5LCAwLCAxMDY1NDQsIDEwNjU0OSwgMTA2NTU0LCAxMDY1NTksIAorICAgIDEwNjU2NCwgMCwgMCwgMTA2NTY4LCAxMDY1NzMsIDEwNjU3OCwgMTA2NTg0LCAxMDY1ODksIDEwNjU5NSwgMTA2NjAwLCAKKyAgICAxMDY2MDYsIDEwNjYxMiwgMCwgMCwgMTA2NjE5LCAxMDY2MjUsIDAsIDAsIDEwNjYzMSwgMTA2NjM3LCAxMDY2NDMsIDAsIDAsIAorICAgIDEwNjY0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA2NjUyLCAwLCAwLCAwLCAwLCAwLCAxMDY2NTksIDEwNjY2NCwgMTA2NjcxLCAKKyAgICAxMDY2NzksIDEwNjY4NSwgMTA2NjkxLCAxMDY2OTcsIDAsIDAsIDEwNjcwNCwgMTA2NzEwLCAxMDY3MTUsIDEwNjcyMCwgCisgICAgMTA2NzI1LCAxMDY3MzAsIDEwNjczNSwgMCwgMCwgMCwgMTA2NzQwLCAxMDY3NDUsIDEwNjc1MCwgMTA2NzU2LCAxMDY3NjIsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwNjc2NywgMTA2NzcxLCAxMDY3NzUsIDEwNjc4MCwgMTA2Nzg0LCAxMDY3ODksIDEwNjc5MywgMTA2Nzk4LCAKKyAgICAxMDY4MDMsIDEwNjgwOSwgMTA2ODE0LCAxMDY4MjAsIDEwNjgyNCwgMTA2ODI5LCAxMDY4MzMsIDEwNjgzOCwgMTA2ODQyLCAKKyAgICAxMDY4NDcsIDEwNjg1MiwgMTA2ODU3LCAxMDY4NjIsIDEwNjg2NywgMTA2ODcyLCAxMDY4NzcsIDEwNjg4MiwgMTA2ODg3LCAKKyAgICAxMDY4OTIsIDEwNjg5NywgMTA2OTAyLCAxMDY5MDcsIDEwNjkxMiwgMTA2OTE3LCAxMDY5MjIsIDEwNjkyNywgMTA2OTMyLCAKKyAgICAxMDY5MzcsIDEwNjk0MSwgMTA2OTQ2LCAxMDY5NTEsIDEwNjk1NiwgMTA2OTYwLCAxMDY5NjQsIDEwNjk2OSwgMTA2OTc0LCAKKyAgICAxMDY5NzksIDEwNjk4NCwgMTA2OTg5LCAxMDY5OTQsIDEwNjk5OCwgMTA3MDA0LCAxMDcwMDksIDEwNzAxNSwgMTA3MDIwLCAKKyAgICAxMDcwMjYsIDEwNzAzMiwgMTA3MDM5LCAxMDcwNDUsIDEwNzA1MiwgMTA3MDU3LCAxMDcwNjQsIDEwNzA3MCwgMTA3MDc1LCAKKyAgICAxMDcwODIsIDEwNzA4OCwgMTA3MDkzLCAxMDcwOTgsIDEwNzEwMywgMTA3MTA4LCAxMDcxMTMsIDEwNzExOCwgMTA3MTIyLCAKKyAgICAxMDcxMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNzEzMSwgMTA3MTM2LCAxMDcxNDAsIDEwNzE0NCwgMTA3MTQ4LCAKKyAgICAxMDcxNTIsIDEwNzE1NiwgMTA3MTYwLCAxMDcxNjUsIDEwNzE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3MTc0LCAxMDcxNzcsIDEwNzE4MSwgMTA3MTg0LCAxMDcxODgsIAorICAgIDEwNzE5MSwgMTA3MTk1LCAxMDcxOTksIDEwNzIwNCwgMTA3MjA4LCAxMDcyMTMsIDEwNzIxNiwgMTA3MjIwLCAxMDcyMjMsIAorICAgIDEwNzIyNywgMTA3MjMwLCAxMDcyMzQsIDEwNzIzOCwgMTA3MjQyLCAxMDcyNDYsIDEwNzI1MCwgMTA3MjU0LCAxMDcyNTgsIAorICAgIDEwNzI2MiwgMTA3MjY2LCAxMDcyNzAsIDEwNzI3NCwgMTA3Mjc4LCAxMDcyODIsIDEwNzI4NiwgMTA3MjkwLCAxMDcyOTQsIAorICAgIDEwNzI5OCwgMTA3MzAyLCAxMDczMDYsIDEwNzMwOSwgMTA3MzEzLCAxMDczMTcsIDEwNzMyMSwgMTA3MzI0LCAxMDczMjcsIAorICAgIDEwNzMzMSwgMTA3MzM1LCAxMDczMzksIDEwNzM0MywgMTA3MzQ3LCAxMDczNTEsIDEwNzM1NCwgMTA3MzU5LCAxMDczNjMsIAorICAgIDEwNzM2OCwgMTA3MzcyLCAxMDczNzcsIDEwNzM4MiwgMCwgMCwgMTA3Mzg4LCAxMDczOTIsIDEwNzM5NywgMTA3NDAxLCAKKyAgICAxMDc0MDYsIDEwNzQxMCwgMTA3NDE0LCAxMDc0MTgsIDEwNzQyMiwgMTA3NDI2LCAxMDc0MzAsIDEwNzQzMywgMTA3NDM3LCAKKyAgICAxMDc0NDIsIDEwNzQ0NiwgMTA3NDUxLCAxMDc0NTYsIDEwNzQ2MSwgMTA3NDY4LCAxMDc0ODAsIDEwNzQ5MiwgMTA3NTA0LCAKKyAgICAxMDc1MTcsIDEwNzUzMSwgMTA3NTM4LCAxMDc1NDgsIDEwNzU1NiwgMTA3NTY1LCAxMDc1NzQsIDEwNzU4MywgMTA3NTkzLCAKKyAgICAxMDc2MDQsIDEwNzYxNiwgMTA3NjIzLCAxMDc2MzAsIDEwNzYzOCwgMTA3NjQzLCAxMDc2NDksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEwNzY1NiwgMTA3NjYwLCAxMDc2NjUsIDEwNzY2OSwgMTA3Njc0LCAxMDc2NzgsIDEwNzY4MywgCisgICAgMTA3Njg4LCAxMDc2OTQsIDEwNzY5OSwgMTA3NzA1LCAxMDc3MDksIDEwNzcxNCwgMTA3NzE4LCAxMDc3MjMsIDEwNzcyNywgCisgICAgMTA3NzMyLCAxMDc3MzcsIDEwNzc0MiwgMTA3NzQ3LCAxMDc3NTIsIDEwNzc1NywgMTA3NzYyLCAxMDc3NjcsIDEwNzc3MiwgCisgICAgMTA3Nzc3LCAxMDc3ODIsIDEwNzc4NywgMTA3NzkyLCAxMDc3OTcsIDEwNzgwMiwgMTA3ODA3LCAxMDc4MTIsIDEwNzgxNywgCisgICAgMTA3ODIyLCAxMDc4MjYsIDEwNzgzMSwgMTA3ODM2LCAxMDc4NDEsIDEwNzg0NSwgMTA3ODQ5LCAxMDc4NTQsIDEwNzg1OSwgCisgICAgMTA3ODY0LCAxMDc4NjksIDEwNzg3NCwgMTA3ODc5LCAxMDc4ODMsIDEwNzg4OCwgMTA3ODk0LCAxMDc4OTksIDEwNzkwNSwgCisgICAgMTA3OTEwLCAxMDc5MTYsIDEwNzkyMiwgMTA3OTI5LCAxMDc5MzUsIDEwNzk0MiwgMTA3OTQ3LCAxMDc5NTMsIDEwNzk1OCwgCisgICAgMTA3OTY0LCAxMDc5NjksIDEwNzk3NCwgMTA3OTc5LCAxMDc5ODQsIDEwNzk4OCwgMTA3OTkzLCAxMDc5OTgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwODAwMywgMTA4MDA4LCAxMDgwMTIsIDEwODAxNiwgMTA4MDIwLCAxMDgwMjQsIAorICAgIDEwODAyOCwgMTA4MDMyLCAxMDgwMzcsIDEwODA0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA4MDQ2LCAxMDgwNTAsIDEwODA1NSwgMTA4MDU5LCAxMDgwNjQsIDEwODA2OCwgMTA4MDczLCAxMDgwNzcsIDEwODA4MiwgCisgICAgMTA4MDg2LCAxMDgwOTEsIDEwODA5NSwgMTA4MTAwLCAxMDgxMDUsIDEwODExMCwgMTA4MTE1LCAxMDgxMjAsIDEwODEyNSwgCisgICAgMTA4MTMwLCAxMDgxMzUsIDEwODE0MCwgMTA4MTQ1LCAxMDgxNTAsIDEwODE1NSwgMTA4MTYwLCAxMDgxNjUsIDEwODE3MCwgCisgICAgMTA4MTc1LCAxMDgxODAsIDEwODE4NSwgMTA4MTkwLCAxMDgxOTQsIDEwODE5OSwgMTA4MjA0LCAxMDgyMDksIDEwODIxMywgCisgICAgMTA4MjE3LCAxMDgyMjIsIDEwODIyNywgMTA4MjMyLCAxMDgyMzcsIDEwODI0MiwgMTA4MjQ2LCAxMDgyNTEsIDEwODI1NiwgCisgICAgMTA4MjYxLCAxMDgyNjcsIDEwODI3MiwgMTA4Mjc4LCAxMDgyODMsIDEwODI4OSwgMTA4Mjk0LCAxMDgzMDAsIDEwODMwNSwgCisgICAgMTA4MzExLCAxMDgzMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwODMyMSwgMTA4MzI2LCAxMDgzMzAsIDEwODMzNCwgCisgICAgMTA4MzM4LCAxMDgzNDIsIDEwODM0NiwgMTA4MzUwLCAxMDgzNTUsIDEwODM1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA4MzY0LCAKKyAgICAxMDgzNjgsIDEwODM3MywgMTA4Mzc4LCAxMDgzODMsIDEwODM4OCwgMTA4Mzk1LCAxMDgzOTksIDEwODQwNCwgMTA4NDA5LCAKKyAgICAxMDg0MTMsIDEwODQxOCwgMTA4NDIzLCAxMDg0MjgsIDEwODQzMywgMTA4NDM4LCAxMDg0NDMsIDEwODQ0OCwgMTA4NDUyLCAKKyAgICAxMDg0NTYsIDEwODQ2MSwgMTA4NDY2LCAxMDg0NzEsIDEwODQ3OCwgMTA4NDgzLCAxMDg0ODgsIDAsIDAsIDAsIDEwODQ5MywgCisgICAgMTA4NTAwLCAxMDg1MDcsIDEwODUxNiwgMTA4NTIxLCAxMDg1MjcsIDEwODUzMiwgMTA4NTM4LCAxMDg1NDMsIDEwODU0OSwgCisgICAgMTA4NTU0LCAxMDg1NjAsIDEwODU2NSwgMTA4NTcxLCAxMDg1NzcsIDAsIDAsIDAsIDAsIDEwODU4MiwgMTA4NTg3LCAKKyAgICAxMDg1OTEsIDEwODU5NSwgMTA4NTk5LCAxMDg2MDMsIDEwODYwNywgMTA4NjExLCAxMDg2MTYsIDEwODYyMCwgMTA4NjI1LCAKKyAgICAxMDg2MzAsIDEwODYzNSwgMTA4NjQxLCAxMDg2NDYsIDEwODY1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTA4NjU2LCAxMDg2NjQsIDEwODY3MSwgMTA4Njc5LCAxMDg2ODcsIDEwODY5NCwgMTA4NzAyLCAKKyAgICAxMDg3MTAsIDEwODcxOCwgMTA4NzI1LCAxMDg3MzIsIDEwODc0MCwgMTA4NzQ4LCAxMDg3NTYsIDEwODc2NCwgMTA4NzcyLCAKKyAgICAxMDg3ODAsIDEwODc4OCwgMTA4Nzk2LCAxMDg4MDQsIDEwODgxMiwgMTA4ODIwLCAxMDg4MjgsIDEwODgzNiwgMTA4ODQ0LCAKKyAgICAxMDg4NTIsIDEwODg2MCwgMTA4ODY4LCAxMDg4NzYsIDEwODg4NCwgMTA4ODkyLCAxMDg5MDAsIDEwODkwOCwgMTA4OTE2LCAKKyAgICAxMDg5MjMsIDEwODkzMSwgMTA4OTM5LCAxMDg5NDYsIDEwODk1NCwgMTA4OTYyLCAxMDg5NzAsIDEwODk3NywgMTA4OTg0LCAKKyAgICAxMDg5OTIsIDEwOTAwMCwgMTA5MDA4LCAxMDkwMTYsIDEwOTAyNCwgMTA5MDMyLCAxMDkwNDAsIDEwOTA0OCwgMTA5MDU2LCAKKyAgICAxMDkwNjQsIDEwOTA3MiwgMTA5MDgwLCAxMDkwODgsIDEwOTA5NiwgMTA5MTA0LCAxMDkxMTIsIDEwOTEyMCwgMTA5MTI4LCAKKyAgICAxMDkxMzYsIDEwOTE0NCwgMTA5MTUyLCAxMDkxNjAsIDEwOTE2NywgMTA5MTczLCAxMDkxNzksIDEwOTE4NSwgMTA5MTkxLCAKKyAgICAxMDkxOTcsIDEwOTIwMywgMTA5MjEwLCAxMDkyMTYsIDEwOTIyMywgMTA5MjMwLCAxMDkyMzcsIDEwOTI0NCwgMTA5MjUxLCAKKyAgICAxMDkyNTgsIDEwOTI2NSwgMTA5MjcyLCAxMDkyNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwOTI4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTA5MjkyLCAxMDkzMDAsIDEwOTMwOCwgMTA5MzE3LCAxMDkzMjUsIDEwOTMzNCwgMTA5MzQzLCAxMDkzNTIsIAorICAgIDEwOTM2MSwgMTA5MzY5LCAxMDkzNzgsIDEwOTM4NywgMTA5Mzk2LCAxMDk0MDUsIDEwOTQxNCwgMTA5NDIzLCAxMDk0MzIsIAorICAgIDEwOTQ0MSwgMTA5NDUwLCAxMDk0NTksIDEwOTQ2OCwgMTA5NDc3LCAxMDk0ODUsIDEwOTQ5MywgMTA5NTAxLCAxMDk1MDksIAorICAgIDEwOTUxNywgMTA5NTI2LCAxMDk1MzUsIDEwOTU0NSwgMTA5NTU1LCAxMDk1NjUsIDEwOTU3NSwgMTA5NTg1LCAxMDk1OTQsIAorICAgIDEwOTYwNCwgMTA5NjE0LCAxMDk2MjQsIDEwOTYzNSwgMTA5NjQ1LCAxMDk2NTcsIDEwOTY2OSwgMTA5NjgwLCAxMDk2OTQsIAorICAgIDEwOTcwNSwgMTA5NzE1LCAxMDk3MjcsIDEwOTczOCwgMTA5NzQ4LCAxMDk3NjAsIDEwOTc3MiwgMTA5NzgzLCAxMDk3OTQsIAorICAgIDEwOTgwNCwgMTA5ODE0LCAxMDk4MjYsIDEwOTgzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA5ODQ5LCAxMDk4NTIsIAorICAgIDEwOTg1NywgMTA5ODYzLCAxMDk4NzEsIDEwOTg3NiwgMTA5ODgyLCAxMDk4OTAsIDEwOTg5NiwgMTA5OTAyLCAxMDk5MDYsIAorICAgIDEwOTkxMCwgMTA5OTE3LCAxMDk5MjYsIDEwOTkzMywgMTA5OTQyLCAxMDk5NDgsIDEwOTk1NywgMTA5OTY0LCAxMDk5NzEsIAorICAgIDEwOTk3OCwgMTA5OTg4LCAxMDk5OTQsIDEwOTk5OCwgMTEwMDA1LCAxMTAwMTQsIDExMDAyNCwgMTEwMDMxLCAxMTAwMzgsIAorICAgIDExMDA0MiwgMTEwMDQ2LCAxMTAwNTMsIDExMDA2MywgMTEwMDY3LCAxMTAwNzQsIDExMDA4MSwgMTEwMDg4LCAxMTAwOTQsIAorICAgIDExMDEwMSwgMTEwMTA4LCAxMTAxMTUsIDExMDEyMiwgMTEwMTI2LCAxMTAxMzAsIDExMDEzNCwgMTEwMTQxLCAxMTAxNDUsIAorICAgIDExMDE1MiwgMTEwMTU5LCAxMTAxNzMsIDExMDE4MiwgMTEwMTg2LCAxMTAxOTAsIDExMDE5NCwgMTEwMjAxLCAxMTAyMDUsIAorICAgIDExMDIwOSwgMTEwMjEzLCAxMTAyMjEsIDExMDIyOSwgMTEwMjQ4LCAxMTAyNTgsIDExMDI3OCwgMTEwMjgyLCAxMTAyODYsIAorICAgIDExMDI5MCwgMTEwMjk0LCAxMTAyOTgsIDExMDMwMiwgMTEwMzA2LCAxMTAzMTMsIDExMDMxNywgMTEwMzIwLCAxMTAzMjQsIAorICAgIDExMDMyOCwgMTEwMzM0LCAxMTAzNDEsIDExMDM1MCwgMTEwMzU0LCAxMTAzNjMsIDExMDM3MiwgMTEwMzgwLCAxMTAzODQsIAorICAgIDExMDM5MSwgMTEwMzk1LCAxMTAzOTksIDExMDQwMywgMTEwNDA3LCAxMTA0MTgsIDExMDQyNywgMTEwNDM2LCAxMTA0NDUsIAorICAgIDExMDQ1NCwgMTEwNDY2LCAxMTA0NzUsIDExMDQ4NCwgMTEwNDkzLCAxMTA1MDEsIDExMDUxMCwgMTEwNTIyLCAxMTA1MzEsIAorICAgIDExMDU0MCwgMTEwNTQ5LCAxMTA1NjEsIDExMDU3MCwgMTEwNTc5LCAxMTA1OTEsIDExMDYwMCwgMTEwNjA5LCAxMTA2MjEsIAorICAgIDExMDYzMCwgMTEwNjM0LCAxMTA2MzgsIDExMDY0MiwgMTEwNjQ2LCAxMTA2NTAsIDExMDY1NCwgMTEwNjU4LCAxMTA2NjUsIAorICAgIDExMDY2OSwgMTEwNjczLCAxMTA2ODQsIDExMDY4OCwgMTEwNjkyLCAxMTA2OTksIDExMDcwNSwgMTEwNzExLCAxMTA3MTUsIAorICAgIDExMDcyMiwgMTEwNzI2LCAxMTA3MzAsIDExMDczNCwgMTEwNzM4LCAxMTA3NDIsIDExMDc0NiwgMTEwNzUyLCAxMTA3NjAsIAorICAgIDExMDc2NCwgMTEwNzY4LCAxMTA3NzEsIDExMDc3NywgMTEwNzg3LCAxMTA3OTEsIDExMDgwMywgMTEwODEwLCAxMTA4MTcsIAorICAgIDExMDgyNCwgMTEwODMxLCAxMTA4MzcsIDExMDg0MSwgMTEwODQ1LCAxMTA4NDksIDExMDg1MywgMTEwODYwLCAxMTA4NjksIAorICAgIDExMDg3NiwgMTEwODg0LCAxMTA4OTIsIDExMDg5OCwgMTEwOTAyLCAxMTA5MDYsIDExMDkxMCwgMTEwOTE0LCAxMTA5MjAsIAorICAgIDExMDkyOSwgMTEwOTQxLCAxMTA5NDgsIDExMDk1NSwgMTEwOTY0LCAxMTA5NzUsIDExMDk4MSwgMTEwOTkwLCAxMTA5OTksIAorICAgIDExMTAwNiwgMTExMDE1LCAxMTEwMjIsIDExMTAyOSwgMTExMDM5LCAxMTEwNDYsIDExMTA1MywgMTExMDYwLCAxMTEwNjcsIAorICAgIDExMTA3MSwgMTExMDc3LCAxMTEwODEsIDExMTA5MiwgMTExMTAwLCAxMTExMDksIDExMTEyMSwgMTExMTI4LCAxMTExMzUsIAorICAgIDExMTE0NSwgMTExMTUyLCAxMTExNjIsIDExMTE2OSwgMTExMTc5LCAxMTExODYsIDExMTE5MywgMTExMjAzLCAxMTEyMTAsIAorICAgIDExMTIxNywgMTExMjI3LCAxMTEyMzQsIDExMTI0NiwgMTExMjU1LCAxMTEyNjIsIDExMTI2OSwgMTExMjc2LCAxMTEyODUsIAorICAgIDExMTI5NSwgMTExMzA4LCAxMTEzMTUsIDExMTMyNSwgMTExMzM1LCAxMTEzNDIsIDExMTM1MSwgMTExMzY0LCAxMTEzNzEsIAorICAgIDExMTM3OCwgMTExMzg1LCAxMTEzOTUsIDExMTQwNSwgMTExNDEyLCAxMTE0MjIsIDExMTQyOSwgMTExNDM2LCAxMTE0NDYsIAorICAgIDExMTQ1MiwgMTExNDU5LCAxMTE0NjYsIDExMTQ3MywgMTExNDgzLCAxMTE0OTAsIDExMTQ5NywgMTExNTA0LCAxMTE1MTAsIAorICAgIDExMTUxNywgMTExNTI3LCAxMTE1MzQsIDExMTUzOCwgMTExNTQ2LCAxMTE1NTAsIDExMTU2MiwgMTExNTY2LCAxMTE1ODAsIAorICAgIDExMTU4NCwgMTExNTg4LCAxMTE1OTIsIDExMTU5NiwgMTExNjAyLCAxMTE2MDksIDExMTYxNywgMTExNjIxLCAxMTE2MjUsIAorICAgIDExMTYyOSwgMTExNjMzLCAxMTE2NDAsIDExMTY0NCwgMTExNjUwLCAxMTE2NTYsIDExMTY2NCwgMTExNjY4LCAxMTE2NzUsIAorICAgIDExMTY4MywgMTExNjg3LCAxMTE2OTEsIDExMTY5NywgMTExNzAxLCAxMTE3MTAsIDExMTcxOSwgMTExNzI2LCAxMTE3MzYsIAorICAgIDExMTc0MiwgMTExNzQ2LCAxMTE3NTAsIDExMTc1OCwgMTExNzY1LCAxMTE3NzIsIDExMTc3OCwgMTExNzgyLCAxMTE3OTAsIAorICAgIDExMTc5NCwgMTExODAxLCAxMTE4MTMsIDExMTgyMCwgMTExODMwLCAxMTE4MzYsIDExMTg0MCwgMTExODQ5LCAxMTE4NTYsIAorICAgIDExMTg2NSwgMTExODY5LCAxMTE4NzMsIDExMTg4MCwgMTExODg0LCAxMTE4ODgsIDExMTg5MiwgMTExODk2LCAxMTE4OTksIAorICAgIDExMTkwNSwgMTExOTExLCAxMTE5MTUsIDExMTkxOSwgMTExOTI2LCAxMTE5MzMsIDExMTk0MCwgMTExOTQ3LCAxMTE5NTQsIAorICAgIDExMTk2MSwgMTExOTY4LCAxMTE5NzUsIDExMTk4MSwgMTExOTg1LCAxMTE5ODksIDExMTk5NiwgMTEyMDAzLCAxMTIwMTAsIAorICAgIDExMjAxNywgMTEyMDI0LCAxMTIwMjgsIDExMjAzMSwgMTEyMDM2LCAxMTIwNDAsIDExMjA0NCwgMTEyMDUzLCAxMTIwNjIsIAorICAgIDExMjA2NiwgMTEyMDcwLCAxMTIwNzYsIDExMjA4MiwgMTEyMDk5LCAxMTIxMDUsIDExMjEwOSwgMTEyMTE4LCAxMTIxMjIsIAorICAgIDExMjEyNiwgMTEyMTMzLCAxMTIxNDEsIDExMjE0OSwgMTEyMTU1LCAxMTIxNTksIDExMjE2MywgMTEyMTY3LCAxMTIxNzEsIAorICAgIDExMjE3NCwgMTEyMTgwLCAxMTIxODcsIDExMjE5NywgMTEyMjA0LCAxMTIyMTEsIDExMjIxOCwgMTEyMjI0LCAxMTIyMzEsIAorICAgIDExMjIzOCwgMTEyMjQ1LCAxMTIyNTIsIDExMjI1OSwgMTEyMjY4LCAxMTIyNzUsIDExMjI4NywgMTEyMjk0LCAxMTIzMDEsIAorICAgIDExMjMxMSwgMTEyMzIyLCAxMTIzMjksIDExMjMzNiwgMTEyMzQzLCAxMTIzNTAsIDExMjM1NywgMTEyMzY0LCAxMTIzNzEsIAorICAgIDExMjM3OCwgMTEyMzg1LCAxMTIzOTIsIDExMjQwMiwgMTEyNDEyLCAxMTI0MjIsIDExMjQyOSwgMTEyNDM5LCAxMTI0NDYsIAorICAgIDExMjQ1MywgMTEyNDYwLCAxMTI0NjcsIDExMjQ3NCwgMTEyNDgxLCAxMTI0ODgsIDExMjQ5NSwgMTEyNTAyLCAxMTI1MDksIAorICAgIDExMjUxNiwgMTEyNTIzLCAxMTI1MzAsIDExMjUzNiwgMTEyNTQzLCAxMTI1NTAsIDExMjU1OSwgMTEyNTY2LCAxMTI1NzMsIAorICAgIDExMjU3NywgMTEyNTg1LCAxMTI1ODksIDExMjU5MywgMTEyNTk3LCAxMTI2MDEsIDExMjYwNSwgMTEyNjEyLCAxMTI2MTYsIAorICAgIDExMjYyNSwgMTEyNjI5LCAxMTI2MzYsIDExMjY0NCwgMTEyNjQ4LCAxMTI2NTIsIDExMjY1NiwgMTEyNjY5LCAxMTI2ODUsIAorICAgIDExMjY4OSwgMTEyNjkzLCAxMTI3MDAsIDExMjcwNiwgMTEyNzEzLCAxMTI3MTcsIDExMjcyMSwgMTEyNzI1LCAxMTI3MjksIAorICAgIDExMjczMywgMTEyNzQwLCAxMTI3NDQsIDExMjc2MiwgMTEyNzY2LCAxMTI3NzAsIDExMjc3NywgMTEyNzgxLCAxMTI3ODUsIAorICAgIDExMjc5MSwgMTEyNzk1LCAxMTI3OTksIDExMjgwNywgMTEyODExLCAxMTI4MTUsIDExMjgxOSwgMTEyODIzLCAxMTI4MjksIAorICAgIDExMjg0MCwgMTEyODQ5LCAxMTI4NTgsIDExMjg2NSwgMTEyODcyLCAxMTI4ODMsIDExMjg5MCwgMTEyODk3LCAxMTI5MDQsIAorICAgIDExMjkxMSwgMTEyOTE4LCAxMTI5MjUsIDExMjkzMiwgMTEyOTQyLCAxMTI5NDgsIDExMjk1NSwgMTEyOTY1LCAxMTI5NzQsIAorICAgIDExMjk4MSwgMTEyOTkwLCAxMTMwMDAsIDExMzAwNywgMTEzMDE0LCAxMTMwMjEsIDExMzAyOCwgMTEzMDQwLCAxMTMwNDcsIAorICAgIDExMzA1NCwgMTEzMDYxLCAxMTMwNjgsIDExMzA3NSwgMTEzMDg1LCAxMTMwOTIsIDExMzA5OSwgMTEzMTA5LCAxMTMxMjIsIAorICAgIDExMzEzNCwgMTEzMTQxLCAxMTMxNTEsIDExMzE1OCwgMTEzMTY1LCAxMTMxNzIsIDExMzE4NywgMTEzMTkzLCAxMTMyMDEsIAorICAgIDExMzIxMSwgMTEzMjIxLCAxMTMyMjgsIDExMzIzNSwgMTEzMjQxLCAxMTMyNDUsIDExMzI1MiwgMTEzMjYyLCAxMTMyNjgsIAorICAgIDExMzI4MSwgMTEzMjg1LCAxMTMyODksIDExMzI5NiwgMTEzMzAwLCAxMTMzMDcsIDExMzMxNywgMTEzMzIxLCAxMTMzMjUsIAorICAgIDExMzMyOSwgMTEzMzMzLCAxMTMzMzcsIDExMzM0NCwgMTEzMzQ4LCAxMTMzNTUsIDExMzM2MiwgMTEzMzY5LCAxMTMzNzgsIAorICAgIDExMzM4NywgMTEzMzk3LCAxMTM0MDQsIDExMzQxMSwgMTEzNDE4LCAxMTM0MjgsIDExMzQzNSwgMTEzNDQ1LCAxMTM0NTIsIAorICAgIDExMzQ2MiwgMTEzNDY5LCAxMTM0NzYsIDExMzQ4NiwgMTEzNDk2LCAxMTM1MDMsIDExMzUwOSwgMTEzNTE3LCAxMTM1MjUsIAorICAgIDExMzUzMSwgMTEzNTM3LCAxMTM1NDEsIDExMzU0NSwgMTEzNTUyLCAxMTM1NjAsIDExMzU2NiwgMTEzNTcwLCAxMTM1NzQsIAorICAgIDExMzU3OCwgMTEzNTg1LCAxMTM1OTcsIDExMzYwMCwgMTEzNjA3LCAxMTM2MTMsIDExMzYxNywgMTEzNjIxLCAxMTM2MjUsIAorICAgIDExMzYyOSwgMTEzNjMzLCAxMTM2MzcsIDExMzY0MSwgMTEzNjQ1LCAxMTM2NDksIDExMzY1MywgMTEzNjYwLCAxMTM2NjQsIAorICAgIDExMzY3MCwgMTEzNjc0LCAxMTM2NzgsIDExMzY4MiwgMTEzNjg4LCAxMTM2OTUsIDExMzcwMiwgMTEzNzA5LCAxMTM3MjEsIAorICAgIDExMzcyOSwgMTEzNzMzLCAxMTM3MzksIDExMzc0OCwgMTEzNzU1LCAxMTM3NjEsIDExMzc2NSwgMTEzNzY5LCAxMTM3NzMsIAorICAgIDExMzc3OSwgMTEzNzg4LCAxMTM3OTYsIDExMzgwMCwgMTEzODA2LCAxMTM4MTAsIDExMzgxNCwgMTEzODE4LCAxMTM4MjQsIAorICAgIDExMzgzMSwgMTEzODM3LCAxMTM4NDEsIDExMzg0NywgMTEzODUxLCAxMTM4NTUsIDExMzg2NCwgMTEzODc2LCAxMTM4ODAsIAorICAgIDExMzg4NywgMTEzODk0LCAxMTM5MDQsIDExMzkxMSwgMTEzOTIzLCAxMTM5MzAsIDExMzkzNywgMTEzOTQ0LCAxMTM5NTUsIAorICAgIDExMzk2NSwgMTEzOTc4LCAxMTM5ODgsIDExMzk5NSwgMTEzOTk5LCAxMTQwMDMsIDExNDAwNywgMTE0MDExLCAxMTQwMjAsIAorICAgIDExNDAyOSwgMTE0MDM4LCAxMTQwNTUsIDExNDA2NCwgMTE0MDcwLCAxMTQwNzcsIDExNDA4NSwgMTE0MDk4LCAxMTQxMDIsIAorICAgIDExNDExMSwgMTE0MTIwLCAxMTQxMjksIDExNDEzOCwgMTE0MTQ5LCAxMTQxNTgsIDExNDE2NywgMTE0MTc2LCAxMTQxODUsIAorICAgIDExNDE5NCwgMTE0MjAzLCAxMTQyMTMsIDExNDIxNiwgMTE0MjIwLCAxMTQyMjQsIDExNDIyOCwgMTE0MjMyLCAxMTQyMzYsIAorICAgIDExNDI0MiwgMTE0MjQ5LCAxMTQyNTYsIDExNDI2MywgMTE0MjY5LCAxMTQyNzUsIDExNDI4MiwgMTE0Mjg4LCAxMTQyOTUsIAorICAgIDExNDMwMywgMTE0MzA3LCAxMTQzMTQsIDExNDMyMSwgMTE0MzI4LCAxMTQzMzYsIDExNDM0MCwgMTE0MzQ0LCAxMTQzNDgsIAorICAgIDExNDM1MiwgMTE0MzU2LCAxMTQzNjIsIDExNDM2NiwgMTE0MzcyLCAxMTQzNzksIDExNDM4NiwgMTE0MzkyLCAxMTQzOTksIAorICAgIDExNDQwNiwgMTE0NDEzLCAxMTQ0MjAsIDExNDQyNywgMTE0NDM0LCAxMTQ0NDEsIDExNDQ0OCwgMTE0NDU1LCAxMTQ0NjIsIAorICAgIDExNDQ2OSwgMTE0NDc2LCAxMTQ0ODMsIDExNDQ5MCwgMTE0NDk2LCAxMTQ1MDAsIDExNDUwOSwgMTE0NTEzLCAxMTQ1MTcsIAorICAgIDExNDUyMSwgMTE0NTI1LCAxMTQ1MzEsIDExNDUzOCwgMTE0NTQ1LCAxMTQ1NTIsIDExNDU1OSwgMTE0NTY2LCAxMTQ1NzIsIAorICAgIDExNDU4MCwgMTE0NTg0LCAxMTQ1ODgsIDExNDU5MiwgMTE0NTk2LCAxMTQ2MDIsIDExNDYxOSwgMTE0NjM2LCAxMTQ2NDAsIAorICAgIDExNDY0NCwgMTE0NjQ4LCAxMTQ2NTIsIDExNDY1NiwgMTE0NjYwLCAxMTQ2NjYsIDExNDY3MywgMTE0Njc3LCAxMTQ2ODMsIAorICAgIDExNDY5MCwgMTE0Njk3LCAxMTQ3MDQsIDExNDcxMSwgMTE0NzE4LCAxMTQ3MjcsIDExNDczNCwgMTE0NzQxLCAxMTQ3NDgsIAorICAgIDExNDc1NSwgMTE0NzU5LCAxMTQ3NjMsIDExNDc2OSwgMTE0NzgxLCAxMTQ3ODUsIDExNDc4OSwgMTE0Nzk4LCAxMTQ4MDIsIAorICAgIDExNDgwNiwgMTE0ODEwLCAxMTQ4MTYsIDExNDgyMCwgMTE0ODI0LCAxMTQ4MzMsIDExNDgzNywgMTE0ODQxLCAxMTQ4NDUsIAorICAgIDExNDg1MiwgMTE0ODU2LCAxMTQ4NjAsIDExNDg2NCwgMTE0ODY4LCAxMTQ4NzIsIDExNDg3NiwgMTE0ODgwLCAxMTQ4ODQsIAorICAgIDExNDg5MCwgMTE0ODk3LCAxMTQ5MDQsIDExNDkxMCwgMTE0OTE0LCAxMTQ5MzEsIDExNDkzNywgMTE0OTQxLCAxMTQ5NDcsIAorICAgIDExNDk1MywgMTE0OTU5LCAxMTQ5NjUsIDExNDk3MSwgMTE0OTc3LCAxMTQ5ODEsIDExNDk4NSwgMTE0OTg5LCAxMTQ5OTUsIAorICAgIDExNDk5OSwgMTE1MDA1LCAxMTUwMDksIDExNTAxMywgMTE1MDIwLCAxMTUwMjcsIDExNTA0NCwgMTE1MDQ4LCAxMTUwNTIsIAorICAgIDExNTA1NiwgMTE1MDYwLCAxMTUwNjQsIDExNTA3NiwgMTE1MDc5LCAxMTUwODQsIDExNTA4OSwgMTE1MTA0LCAxMTUxMTQsIAorICAgIDExNTEyNiwgMTE1MTMwLCAxMTUxMzQsIDExNTEzOCwgMTE1MTQ0LCAxMTUxNTEsIDExNTE1OCwgMTE1MTY4LCAxMTUxODAsIAorICAgIDExNTE4NiwgMTE1MTkyLCAxMTUyMDEsIDExNTIwNSwgMTE1MjA5LCAxMTUyMTYsIDExNTIyNiwgMTE1MjMzLCAxMTUyMzksIAorICAgIDExNTI0MywgMTE1MjQ3LCAxMTUyNTQsIDExNTI2MCwgMTE1MjY0LCAxMTUyNzAsIDExNTI3NCwgMTE1MjgyLCAxMTUyODgsIAorICAgIDExNTI5MiwgMTE1MzAwLCAxMTUzMDksIDExNTMxNiwgMTE1MzIyLCAxMTUzMjksIDExNTMzNiwgMTE1MzQ2LCAxMTUzNTYsIAorICAgIDExNTM2MCwgMTE1MzY0LCAxMTUzNjgsIDExNTM3MiwgMTE1Mzc4LCAxMTUzODUsIDExNTM5MSwgMTE1Mzk4LCAxMTU0MDUsIAorICAgIDExNTQxMiwgMTE1NDIxLCAxMTU0MjgsIDExNTQzNSwgMTE1NDQxLCAxMTU0NDgsIDExNTQ1NSwgMTE1NDYyLCAxMTU0NjksIAorICAgIDExNTQ3NiwgMTE1NDgzLCAxMTU0ODksIDExNTQ5NiwgMTE1NTAzLCAxMTU1MTAsIDExNTUxOSwgMTE1NTI2LCAxMTU1MzMsIAorICAgIDExNTUzNywgMTE1NTQzLCAxMTU1NDcsIDExNTU1MywgMTE1NTYwLCAxMTU1NjcsIDExNTU3NCwgMTE1NTc4LCAxMTU1ODIsIAorICAgIDExNTU4NiwgMTE1NTkwLCAxMTU1OTQsIDExNTYwMSwgMTE1NjA1LCAxMTU2MDksIDExNTYxNSwgMTE1NjIzLCAxMTU2MjcsIAorICAgIDExNTYzMSwgMTE1NjM1LCAxMTU2MzksIDExNTY0NiwgMTE1NjUwLCAxMTU2NTQsIDExNTY2MiwgMTE1NjY2LCAxMTU2NzAsIAorICAgIDExNTY3NCwgMTE1Njc4LCAxMTU2ODQsIDExNTY4OCwgMTE1NjkyLCAxMTU2OTgsIDExNTcwNSwgMTE1NzExLCAxMTU3MTgsIAorICAgIDExNTczMCwgMTE1NzM0LCAxMTU3NDEsIDExNTc0OCwgMTE1NzU1LCAxMTU3NjIsIDExNTc3NCwgMTE1NzgxLCAxMTU3ODUsIAorICAgIDExNTc4OSwgMTE1NzkzLCAxMTU4MDAsIDExNTgwNywgMTE1ODE0LCAxMTU4MjEsIDExNTgzMSwgMTE1ODM4LCAxMTU4NDQsIAorICAgIDExNTg1MSwgMTE1ODU4LCAxMTU4NjUsIDExNTg3MiwgMTE1ODgxLCAxMTU4OTEsIDExNTg5OCwgMTE1OTAyLCAxMTU5MDksIAorICAgIDExNTkxMywgMTE1OTE3LCAxMTU5MjEsIDExNTkyOCwgMTE1OTM1LCAxMTU5NDUsIDExNTk1MSwgMTE1OTU1LCAxMTU5NjQsIAorICAgIDExNTk2OCwgMTE1OTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTU5NzksIDExNTk4NSwgMTE1OTkxLCAxMTU5OTgsIDExNjAwNSwgCisgICAgMTE2MDEyLCAxMTYwMTksIDExNjAyNiwgMTE2MDMzLCAxMTYwMzksIDExNjA0NiwgMTE2MDUzLCAxMTYwNjAsIDExNjA2NywgCisgICAgMTE2MDc0LCAxMTYwODEsIDExNjA4NywgMTE2MDkzLCAxMTYwOTksIDExNjEwNSwgMTE2MTExLCAxMTYxMTcsIDExNjEyMywgCisgICAgMTE2MTI5LCAxMTYxMzUsIDExNjE0MiwgMTE2MTQ5LCAxMTYxNTYsIDExNjE2MywgMTE2MTcwLCAxMTYxNzcsIDExNjE4MywgCisgICAgMTE2MTg5LCAxMTYxOTUsIDExNjIwMiwgMTE2MjA5LCAxMTYyMTUsIDExNjIyMSwgMTE2MjMwLCAxMTYyMzcsIDExNjI0NCwgCisgICAgMTE2MjUxLCAxMTYyNTgsIDExNjI2NSwgMTE2MjcyLCAxMTYyNzgsIDExNjI4NCwgMTE2MjkwLCAxMTYyOTksIDExNjMwNiwgCisgICAgMTE2MzEzLCAxMTYzMjQsIDExNjMzNSwgMTE2MzQxLCAxMTYzNDcsIDExNjM1MywgMTE2MzYyLCAxMTYzNjksIDExNjM3NiwgCisgICAgMTE2Mzg2LCAxMTYzOTYsIDExNjQwNywgMTE2NDE4LCAxMTY0MzAsIDExNjQ0MywgMTE2NDU0LCAxMTY0NjUsIDExNjQ3NywgCisgICAgMTE2NDkwLCAxMTY1MDEsIDExNjUxMiwgMTE2NTIzLCAxMTY1MzQsIDExNjU0NSwgMTE2NTU3LCAxMTY1NjUsIDExNjU3MywgCisgICAgMTE2NTgyLCAxMTY1OTEsIDExNjYwMCwgMTE2NjA2LCAxMTY2MTIsIDExNjYxOCwgMTE2NjI1LCAxMTY2MzUsIDExNjY0MiwgCisgICAgMTE2NjUyLCAxMTY2NTcsIDExNjY2MiwgMTE2NjY4LCAxMTY2NzQsIDExNjY4MiwgMTE2NjkwLCAxMTY2OTksIDExNjcxMCwgCisgICAgMTE2NzIxLCAxMTY3MjksIDExNjczNywgMTE2NzQ2LCAxMTY3NTUsIDExNjc2MywgMTE2NzcwLCAxMTY3NzgsIDExNjc4NiwgCisgICAgMTE2NzkzLCAxMTY4MDAsIDExNjgwOSwgMTE2ODE4LCAxMTY4MjcsIDExNjgzNiwgMTE2ODQ1LCAwLCAxMTY4NTQsIAorICAgIDExNjg2NSwgMTE2ODcyLCAxMTY4ODAsIDExNjg4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2ODk2LCAKKyAgICAxMTY5MDUsIDExNjkxMiwgMTE2OTE5LCAxMTY5MjgsIDExNjkzNSwgMTE2OTQyLCAxMTY5NDksIDExNjk1OSwgMTE2OTY2LCAKKyAgICAxMTY5NzMsIDExNjk4MCwgMTE2OTg4LCAxMTY5OTUsIDExNzAwMiwgMTE3MDA5LCAxMTcwMjAsIDExNzAyNywgMTE3MDM0LCAKKyAgICAxMTcwNDEsIDExNzA0OCwgMTE3MDU1LCAxMTcwNjQsIDExNzA3MSwgMTE3MDc3LCAxMTcwODQsIDExNzA5MywgMTE3MTAwLCAKKyAgICAxMTcxMDcsIDExNzExNCwgMTE3MTI0LCAxMTcxMzEsIDExNzEzOCwgMTE3MTQ4LCAxMTcxNTgsIDExNzE2NSwgMTE3MTcyLCAKKyAgICAxMTcxNzksIDExNzE4NiwgMTE3MTkzLCAxMTcyMDAsIDExNzIwOSwgMTE3MjE2LCAxMTcyMjMsIDExNzIyOSwgMTE3MjM3LCAKKyAgICAxMTcyNDYsIDExNzI1NSwgMTE3MjY2LCAxMTcyNzUsIDExNzI4NCwgMTE3MjkzLCAxMTczMDIsIDExNzMxMSwgMTE3MzE4LCAKKyAgICAxMTczMjUsIDExNzMzNCwgMTE3MzQ2LCAxMTczNTYsIDExNzM2MywgMTE3MzcwLCAxMTczODAsIDExNzM5MCwgMTE3Mzk5LCAKKyAgICAxMTc0MDksIDExNzQxNiwgMTE3NDI2LCAxMTc0MzMsIDExNzQ0MCwgMTE3NDQ3LCAxMTc0NTcsIDExNzQ2NywgMTE3NDc0LCAKKyAgICAxMTc0ODEsIDExNzQ5MSwgMTE3NDk3LCAxMTc1MDgsIDExNzUxNywgMTE3NTI3LCAxMTc1MzUsIDExNzU0OCwgMTE3NTU1LCAKKyAgICAxMTc1NjEsIDExNzU2OSwgMTE3NTc2LCAxMTc1ODYsIDExNzU5MCwgMTE3NTk0LCAxMTc1OTgsIDExNzYwMiwgMTE3NjA2LCAKKyAgICAxMTc2MTAsIDExNzYxNCwgMTE3NjIzLCAxMTc2MjcsIDExNzYzNCwgMTE3NjM4LCAxMTc2NDIsIDExNzY0NiwgMTE3NjUwLCAKKyAgICAxMTc2NTQsIDExNzY1OCwgMTE3NjYyLCAxMTc2NjYsIDExNzY3MCwgMTE3Njc0LCAxMTc2NzgsIDExNzY4MiwgMTE3Njg2LCAKKyAgICAxMTc2OTAsIDExNzY5NCwgMTE3Njk4LCAxMTc3MDIsIDExNzcwNiwgMTE3NzEwLCAxMTc3MTcsIDExNzcyNCwgMTE3NzM0LCAKKyAgICAxMTc3NDcsIDExNzc1NywgMTE3NzYxLCAxMTc3NjUsIDExNzc2OSwgMTE3NzczLCAxMTc3NzcsIDExNzc4MSwgMTE3Nzg1LCAKKyAgICAxMTc3ODksIDExNzc5MywgMTE3Nzk3LCAxMTc4MDEsIDExNzgwOCwgMTE3ODE1LCAxMTc4MjYsIDExNzgzMywgMTE3ODQwLCAKKyAgICAxMTc4NDcsIDExNzg1NCwgMTE3ODYxLCAxMTc4NjgsIDExNzg3NSwgMTE3ODc5LCAxMTc4ODMsIDExNzg5MCwgMTE3ODk3LCAKKyAgICAxMTc5MDQsIDExNzkxMywgMTE3OTIwLCAxMTc5MzMsIDExNzk0MywgMTE3OTUwLCAxMTc5NTcsIDExNzk2MSwgMTE3OTY1LCAKKyAgICAxMTc5NzQsIDExNzk4MSwgMTE3OTg4LCAxMTc5OTUsIDExODAwOCwgMTE4MDE1LCAxMTgwMjIsIDExODAzMiwgMTE4MDQyLCAKKyAgICAxMTgwNTEsIDExODA1OCwgMTE4MDY1LCAxMTgwNzIsIDExODA3OSwgMTE4MDg2LCAxMTgwOTMsIDExODEwMywgMTE4MTA5LCAKKyAgICAxMTgxMTcsIDExODEyNCwgMTE4MTMyLCAxMTgxMzksIDExODE1MCwgMTE4MTU3LCAxMTgxNjMsIDExODE3MCwgMTE4MTc3LCAKKyAgICAxMTgxODQsIDExODE5MSwgMTE4MjAxLCAxMTgyMTEsIDExODIxOCwgMTE4MjI1LCAxMTgyMzQsIDExODI0MiwgMTE4MjQ4LCAKKyAgICAxMTgyNTUsIDExODI2MiwgMTE4MjY5LCAxMTgyNzYsIDExODI4MCwgMTE4MjkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTgzMDAsIDExODMwNCwgMTE4MzA4LCAxMTgzMTIsIAorICAgIDExODMxNiwgMTE4MzIwLCAxMTgzMjQsIDExODMyOCwgMTE4MzMyLCAxMTgzMzYsIDExODM0MCwgMTE4MzQ0LCAxMTgzNDgsIAorICAgIDExODM1MiwgMTE4MzU2LCAxMTgzNjAsIDExODM2NCwgMTE4MzY4LCAxMTgzNzIsIDExODM3NiwgMTE4MzgwLCAxMTgzODQsIAorICAgIDExODM4OCwgMTE4MzkyLCAxMTgzOTYsIDExODQwMCwgMTE4NDA0LCAxMTg0MDgsIDExODQxMiwgMTE4NDE2LCAxMTg0MjAsIAorICAgIDExODQyNCwgMTE4NDI4LCAxMTg0MzIsIDExODQzNiwgMTE4NDQwLCAxMTg0NDQsIDExODQ0OCwgMTE4NDUyLCAxMTg0NTYsIAorICAgIDExODQ2MCwgMTE4NDY0LCAxMTg0NjgsIDExODQ3MiwgMTE4NDc2LCAxMTg0ODAsIDExODQ4NCwgMTE4NDg4LCAxMTg0OTIsIAorICAgIDExODQ5NiwgMTE4NTAwLCAxMTg1MDQsIDExODUwOCwgMTE4NTEyLCAxMTg1MTYsIDExODUyMCwgMTE4NTI0LCAxMTg1MjgsIAorICAgIDExODUzMiwgMTE4NTM2LCAxMTg1NDAsIDExODU0NCwgMTE4NTQ4LCAxMTg1NTIsIDExODU1NiwgMTE4NTYwLCAxMTg1NjQsIAorICAgIDExODU2OCwgMTE4NTcyLCAxMTg1NzYsIDExODU4MCwgMTE4NTg0LCAxMTg1ODgsIDExODU5MiwgMTE4NTk2LCAxMTg2MDAsIAorICAgIDExODYwNCwgMTE4NjA4LCAxMTg2MTIsIDExODYxNiwgMTE4NjIwLCAxMTg2MjQsIDExODYyOCwgMTE4NjMyLCAxMTg2MzYsIAorICAgIDExODY0MCwgMTE4NjQ0LCAxMTg2NDgsIDExODY1MiwgMTE4NjU2LCAxMTg2NjAsIDExODY2NCwgMTE4NjY4LCAxMTg2NzIsIAorICAgIDExODY3NiwgMTE4NjgwLCAxMTg2ODQsIDExODY4OCwgMTE4NjkyLCAxMTg2OTYsIDExODcwMCwgMTE4NzA0LCAxMTg3MDgsIAorICAgIDExODcxMiwgMTE4NzE2LCAxMTg3MjAsIDExODcyNCwgMTE4NzI4LCAxMTg3MzIsIDExODczNiwgMTE4NzQwLCAxMTg3NDQsIAorICAgIDExODc0OCwgMTE4NzUyLCAxMTg3NTYsIDExODc2MCwgMTE4NzY0LCAxMTg3NjgsIDExODc3MiwgMTE4Nzc2LCAxMTg3ODAsIAorICAgIDExODc4NCwgMTE4Nzg4LCAxMTg3OTIsIDExODc5NiwgMTE4ODAwLCAxMTg4MDQsIDExODgwOCwgMTE4ODEyLCAxMTg4MTYsIAorICAgIDExODgyMCwgMTE4ODI0LCAxMTg4MjgsIDExODgzMiwgMTE4ODM2LCAxMTg4NDAsIDExODg0NCwgMTE4ODQ4LCAxMTg4NTIsIAorICAgIDExODg1NiwgMTE4ODYwLCAxMTg4NjQsIDExODg2OCwgMTE4ODcyLCAxMTg4NzYsIDExODg4MCwgMTE4ODg0LCAxMTg4ODgsIAorICAgIDExODg5MiwgMTE4ODk2LCAxMTg5MDAsIDExODkwNCwgMTE4OTA4LCAxMTg5MTIsIDExODkxNiwgMTE4OTIwLCAxMTg5MjQsIAorICAgIDExODkyOCwgMTE4OTMyLCAxMTg5MzYsIDExODk0MCwgMTE4OTQ0LCAxMTg5NDgsIDExODk1MiwgMTE4OTU2LCAxMTg5NjAsIAorICAgIDExODk2NCwgMTE4OTY4LCAxMTg5NzIsIDExODk3NiwgMTE4OTgwLCAxMTg5ODQsIDExODk4OCwgMTE4OTkyLCAxMTg5OTYsIAorICAgIDExOTAwMCwgMTE5MDA0LCAxMTkwMDgsIDExOTAxMiwgMTE5MDE2LCAxMTkwMjAsIDExOTAyNCwgMTE5MDI4LCAxMTkwMzIsIAorICAgIDExOTAzNiwgMTE5MDQwLCAxMTkwNDQsIDExOTA0OCwgMTE5MDUyLCAxMTkwNTYsIDExOTA2MCwgMTE5MDY0LCAxMTkwNjgsIAorICAgIDExOTA3MiwgMTE5MDc2LCAxMTkwODAsIDExOTA4NCwgMTE5MDg4LCAxMTkwOTIsIDExOTA5NiwgMTE5MTAwLCAxMTkxMDQsIAorICAgIDExOTEwOCwgMTE5MTEyLCAxMTkxMTYsIDExOTEyMCwgMTE5MTI0LCAxMTkxMjgsIDExOTEzMiwgMTE5MTM2LCAxMTkxNDAsIAorICAgIDExOTE0NCwgMTE5MTQ4LCAxMTkxNTIsIDExOTE1NiwgMTE5MTYwLCAxMTkxNjQsIDExOTE2OCwgMTE5MTcyLCAxMTkxNzYsIAorICAgIDExOTE4MCwgMTE5MTg0LCAxMTkxODgsIDExOTE5MiwgMTE5MTk2LCAxMTkyMDAsIDExOTIwNCwgMTE5MjA4LCAxMTkyMTIsIAorICAgIDExOTIxNiwgMTE5MjIwLCAxMTkyMjQsIDExOTIyOCwgMTE5MjMyLCAxMTkyMzYsIDExOTI0MCwgMTE5MjQ0LCAxMTkyNDgsIAorICAgIDExOTI1MiwgMTE5MjU2LCAxMTkyNjAsIDExOTI2NCwgMTE5MjY4LCAxMTkyNzIsIDExOTI3NiwgMTE5MjgwLCAxMTkyODQsIAorICAgIDExOTI4OCwgMTE5MjkyLCAxMTkyOTYsIDExOTMwMCwgMTE5MzA0LCAxMTkzMDgsIDExOTMxMiwgMTE5MzE2LCAxMTkzMjAsIAorICAgIDExOTMyNCwgMTE5MzI4LCAxMTkzMzIsIDExOTMzNiwgMTE5MzQwLCAxMTkzNDQsIDExOTM0OCwgMTE5MzUyLCAxMTkzNTYsIAorICAgIDExOTM2MCwgMTE5MzY0LCAxMTkzNjgsIDExOTM3MiwgMTE5Mzc2LCAxMTkzODAsIDExOTM4NCwgMTE5Mzg4LCAxMTkzOTIsIAorICAgIDExOTM5NiwgMTE5NDAwLCAxMTk0MDQsIDExOTQwOCwgMTE5NDEyLCAxMTk0MTYsIDExOTQyMCwgMTE5NDI0LCAxMTk0MjgsIAorICAgIDExOTQzMiwgMTE5NDM2LCAxMTk0NDAsIDExOTQ0NCwgMTE5NDQ4LCAxMTk0NTIsIDExOTQ1NiwgMTE5NDYwLCAxMTk0NjQsIAorICAgIDExOTQ2OCwgMTE5NDcyLCAxMTk0NzYsIDExOTQ4MCwgMTE5NDg0LCAxMTk0ODgsIDExOTQ5MiwgMTE5NDk2LCAxMTk1MDAsIAorICAgIDExOTUwNCwgMTE5NTA4LCAxMTk1MTIsIDExOTUxNiwgMTE5NTIwLCAxMTk1MjQsIDExOTUyOCwgMTE5NTMyLCAxMTk1MzYsIAorICAgIDExOTU0MCwgMTE5NTQ0LCAxMTk1NDgsIDExOTU1MiwgMTE5NTU2LCAxMTk1NjAsIDExOTU2NCwgMTE5NTY4LCAxMTk1NzIsIAorICAgIDExOTU3NiwgMTE5NTgwLCAxMTk1ODQsIDExOTU4OCwgMTE5NTkyLCAxMTk1OTYsIDExOTYwMCwgMTE5NjA0LCAxMTk2MDgsIAorICAgIDExOTYxMiwgMTE5NjE2LCAxMTk2MjAsIDExOTYyNCwgMTE5NjI4LCAxMTk2MzIsIDExOTYzNiwgMTE5NjQwLCAxMTk2NDQsIAorICAgIDExOTY0OCwgMTE5NjUyLCAxMTk2NTYsIDExOTY2MCwgMTE5NjY0LCAxMTk2NjgsIDExOTY3MiwgMTE5Njc2LCAxMTk2ODAsIAorICAgIDExOTY4NCwgMTE5Njg4LCAxMTk2OTIsIDExOTY5NiwgMTE5NzAwLCAxMTk3MDQsIDExOTcwOCwgMTE5NzEyLCAxMTk3MTYsIAorICAgIDExOTcyMCwgMTE5NzI0LCAxMTk3MjgsIDExOTczMiwgMTE5NzM2LCAxMTk3NDAsIDExOTc0NCwgMTE5NzQ4LCAxMTk3NTIsIAorICAgIDExOTc1NiwgMTE5NzYwLCAxMTk3NjQsIDExOTc2OCwgMTE5NzcyLCAxMTk3NzYsIDExOTc4MCwgMTE5Nzg0LCAxMTk3ODgsIAorICAgIDExOTc5MiwgMTE5Nzk2LCAxMTk4MDAsIDExOTgwNCwgMTE5ODA4LCAxMTk4MTIsIDExOTgxNiwgMTE5ODIwLCAxMTk4MjQsIAorICAgIDExOTgyOCwgMTE5ODMyLCAxMTk4MzYsIDExOTg0MCwgMTE5ODQ0LCAxMTk4NDgsIDExOTg1MiwgMTE5ODU2LCAxMTk4NjAsIAorICAgIDExOTg2NCwgMTE5ODY4LCAxMTk4NzIsIDExOTg3NiwgMTE5ODgwLCAxMTk4ODQsIDExOTg4OCwgMTE5ODkyLCAxMTk4OTYsIAorICAgIDExOTkwMCwgMTE5OTA0LCAxMTk5MDgsIDExOTkxMiwgMTE5OTE2LCAxMTk5MjAsIDExOTkyNCwgMTE5OTI4LCAxMTk5MzIsIAorICAgIDExOTkzNiwgMTE5OTQwLCAxMTk5NDQsIDExOTk0OCwgMTE5OTUyLCAxMTk5NTYsIDExOTk2MCwgMTE5OTY0LCAxMTk5NjgsIAorICAgIDExOTk3MiwgMTE5OTc2LCAxMTk5ODAsIDExOTk4NCwgMTE5OTg4LCAxMTk5OTIsIDExOTk5NiwgMTIwMDAwLCAxMjAwMDQsIAorICAgIDEyMDAwOCwgMTIwMDEyLCAxMjAwMTYsIDEyMDAyMCwgMTIwMDI0LCAxMjAwMjgsIDEyMDAzMiwgMTIwMDM2LCAxMjAwNDAsIAorICAgIDEyMDA0NCwgMTIwMDQ4LCAxMjAwNTIsIDEyMDA1NiwgMTIwMDYwLCAxMjAwNjQsIDEyMDA2OCwgMTIwMDcyLCAxMjAwNzYsIAorICAgIDEyMDA4MCwgMTIwMDg0LCAxMjAwODgsIDEyMDA5MiwgMTIwMDk2LCAxMjAxMDAsIDEyMDEwNCwgMTIwMTA4LCAxMjAxMTIsIAorICAgIDEyMDExNiwgMTIwMTIwLCAxMjAxMjQsIDEyMDEyOCwgMTIwMTMyLCAxMjAxMzYsIDEyMDE0MCwgMTIwMTQ0LCAxMjAxNDgsIAorICAgIDEyMDE1MiwgMTIwMTU2LCAxMjAxNjAsIDEyMDE2NCwgMTIwMTY4LCAxMjAxNzIsIDEyMDE3NiwgMTIwMTgwLCAxMjAxODQsIAorICAgIDEyMDE4OCwgMTIwMTkyLCAxMjAxOTYsIDEyMDIwMCwgMTIwMjA0LCAxMjAyMDgsIDEyMDIxMiwgMTIwMjE2LCAxMjAyMjAsIAorICAgIDEyMDIyNCwgMTIwMjI4LCAxMjAyMzIsIDEyMDIzNiwgMTIwMjQwLCAxMjAyNDQsIDEyMDI0OCwgMTIwMjUyLCAxMjAyNTYsIAorICAgIDEyMDI2MCwgMTIwMjY0LCAxMjAyNjgsIDEyMDI3MiwgMTIwMjc2LCAxMjAyODAsIDEyMDI4NCwgMTIwMjg4LCAxMjAyOTIsIAorICAgIDEyMDI5NiwgMTIwMzAwLCAxMjAzMDQsIDEyMDMwOCwgMTIwMzEyLCAxMjAzMTYsIDEyMDMyMCwgMTIwMzI0LCAxMjAzMjgsIAorICAgIDEyMDMzMiwgMTIwMzM2LCAxMjAzNDAsIDEyMDM0NCwgMTIwMzQ4LCAxMjAzNTIsIDEyMDM1NiwgMTIwMzYwLCAxMjAzNjQsIAorICAgIDEyMDM2OCwgMTIwMzcyLCAxMjAzNzYsIDEyMDM4MCwgMTIwMzg0LCAxMjAzODgsIDEyMDM5MiwgMTIwMzk2LCAxMjA0MDAsIAorICAgIDEyMDQwNCwgMTIwNDA4LCAxMjA0MTIsIDEyMDQxNiwgMTIwNDIwLCAxMjA0MjQsIDEyMDQyOCwgMTIwNDMyLCAxMjA0MzYsIAorICAgIDEyMDQ0MCwgMTIwNDQ0LCAxMjA0NDgsIDEyMDQ1MiwgMTIwNDU2LCAxMjA0NjAsIDEyMDQ2NCwgMTIwNDY4LCAxMjA0NzIsIAorICAgIDEyMDQ3NiwgMTIwNDgwLCAxMjA0ODQsIDEyMDQ4OCwgMTIwNDkyLCAxMjA0OTYsIDEyMDUwMCwgMTIwNTA0LCAxMjA1MDgsIAorICAgIDEyMDUxMiwgMTIwNTE2LCAxMjA1MjAsIDEyMDUyNCwgMTIwNTI4LCAxMjA1MzIsIDEyMDUzNiwgMTIwNTQwLCAxMjA1NDQsIAorICAgIDEyMDU0OCwgMTIwNTUyLCAxMjA1NTYsIDEyMDU2MCwgMTIwNTY0LCAxMjA1NjgsIDEyMDU3MiwgMTIwNTc2LCAxMjA1ODAsIAorICAgIDEyMDU4NCwgMTIwNTg4LCAxMjA1OTIsIDEyMDU5NiwgMTIwNjAwLCAxMjA2MDQsIDEyMDYwOCwgMTIwNjEyLCAxMjA2MTYsIAorICAgIDEyMDYyMCwgMTIwNjI0LCAxMjA2MjgsIDEyMDYzMiwgMTIwNjM2LCAxMjA2NDAsIDEyMDY0NCwgMTIwNjQ4LCAxMjA2NTIsIAorICAgIDEyMDY1NiwgMTIwNjYwLCAxMjA2NjQsIDEyMDY2OCwgMTIwNjcyLCAxMjA2NzYsIDEyMDY4MCwgMTIwNjg0LCAxMjA2ODgsIAorICAgIDEyMDY5MiwgMTIwNjk2LCAxMjA3MDAsIDEyMDcwNCwgMTIwNzA4LCAxMjA3MTIsIDEyMDcxNiwgMTIwNzIwLCAxMjA3MjQsIAorICAgIDEyMDcyOCwgMTIwNzMyLCAxMjA3MzYsIDEyMDc0MCwgMTIwNzQ0LCAxMjA3NDgsIDEyMDc1MiwgMTIwNzU2LCAxMjA3NjAsIAorICAgIDEyMDc2NCwgMTIwNzY4LCAxMjA3NzIsIDEyMDc3NiwgMTIwNzgwLCAxMjA3ODQsIDEyMDc4OCwgMTIwNzkyLCAxMjA3OTYsIAorICAgIDEyMDgwMCwgMTIwODA0LCAxMjA4MDgsIDEyMDgxMiwgMTIwODE2LCAxMjA4MjAsIDEyMDgyNCwgMTIwODI4LCAxMjA4MzIsIAorICAgIDEyMDgzNiwgMTIwODQwLCAxMjA4NDQsIDEyMDg0OCwgMTIwODUyLCAxMjA4NTYsIDEyMDg2MCwgMTIwODY0LCAxMjA4NjgsIAorICAgIDEyMDg3MiwgMTIwODc2LCAxMjA4ODAsIDEyMDg4NCwgMTIwODg4LCAxMjA4OTIsIDEyMDg5NiwgMTIwOTAwLCAxMjA5MDQsIAorICAgIDEyMDkwOCwgMTIwOTEyLCAxMjA5MTYsIDEyMDkyMCwgMTIwOTI0LCAxMjA5MjgsIDEyMDkzMiwgMTIwOTM2LCAxMjA5NDAsIAorICAgIDEyMDk0NCwgMTIwOTQ4LCAxMjA5NTIsIDEyMDk1NiwgMTIwOTYwLCAxMjA5NjQsIDEyMDk2OCwgMTIwOTcyLCAxMjA5NzYsIAorICAgIDEyMDk4MCwgMTIwOTg0LCAxMjA5ODgsIDEyMDk5MiwgMTIwOTk2LCAxMjEwMDAsIDEyMTAwNCwgMTIxMDA4LCAxMjEwMTIsIAorICAgIDEyMTAxNiwgMTIxMDIwLCAxMjEwMjQsIDEyMTAyOCwgMTIxMDMyLCAxMjEwMzYsIDEyMTA0MCwgMTIxMDQ0LCAxMjEwNDgsIAorICAgIDEyMTA1MiwgMTIxMDU2LCAxMjEwNjAsIDEyMTA2NCwgMTIxMDY4LCAxMjEwNzIsIDEyMTA3NiwgMTIxMDgwLCAxMjEwODQsIAorICAgIDEyMTA4OCwgMTIxMDkyLCAxMjEwOTYsIDEyMTEwMCwgMTIxMTA0LCAxMjExMDgsIDEyMTExMiwgMTIxMTE2LCAxMjExMjAsIAorICAgIDEyMTEyNCwgMTIxMTI4LCAxMjExMzIsIDEyMTEzNiwgMTIxMTQwLCAxMjExNDQsIDEyMTE0OCwgMTIxMTUyLCAxMjExNTYsIAorICAgIDEyMTE2MCwgMTIxMTY0LCAxMjExNjgsIDEyMTE3MiwgMTIxMTc2LCAxMjExODAsIDEyMTE4NCwgMTIxMTg4LCAxMjExOTIsIAorICAgIDEyMTE5NiwgMTIxMjAwLCAxMjEyMDQsIDEyMTIwOCwgMTIxMjEyLCAxMjEyMTYsIDEyMTIyMCwgMTIxMjI0LCAxMjEyMjgsIAorICAgIDEyMTIzMiwgMTIxMjM2LCAxMjEyNDAsIDEyMTI0NCwgMTIxMjQ4LCAxMjEyNTIsIDEyMTI1NiwgMTIxMjYwLCAxMjEyNjQsIAorICAgIDEyMTI2OCwgMTIxMjcyLCAxMjEyNzYsIDEyMTI4MCwgMTIxMjg0LCAxMjEyODgsIDEyMTI5MiwgMTIxMjk2LCAxMjEzMDAsIAorICAgIDEyMTMwNCwgMTIxMzA4LCAxMjEzMTIsIDEyMTMxNiwgMTIxMzIwLCAxMjEzMjQsIDEyMTMyOCwgMTIxMzMyLCAxMjEzMzYsIAorICAgIDEyMTM0MCwgMTIxMzQ0LCAxMjEzNDgsIDEyMTM1MiwgMTIxMzU2LCAxMjEzNjAsIDEyMTM2NCwgMTIxMzY4LCAxMjEzNzIsIAorICAgIDEyMTM3NiwgMTIxMzgwLCAxMjEzODQsIDEyMTM4OCwgMTIxMzkyLCAxMjEzOTYsIDEyMTQwMCwgMTIxNDA0LCAxMjE0MDgsIAorICAgIDEyMTQxMiwgMTIxNDE2LCAxMjE0MjAsIDEyMTQyNCwgMTIxNDI4LCAxMjE0MzIsIDEyMTQzNiwgMTIxNDQwLCAxMjE0NDQsIAorICAgIDEyMTQ0OCwgMTIxNDUyLCAxMjE0NTYsIDEyMTQ2MCwgMTIxNDY0LCAxMjE0NjgsIDEyMTQ3MiwgMTIxNDc2LCAxMjE0ODAsIAorICAgIDEyMTQ4NCwgMTIxNDg4LCAxMjE0OTIsIDEyMTQ5NiwgMTIxNTAwLCAxMjE1MDQsIDEyMTUwOCwgMTIxNTEyLCAxMjE1MTYsIAorICAgIDEyMTUyMCwgMTIxNTI0LCAxMjE1MjgsIDEyMTUzMiwgMTIxNTM2LCAxMjE1NDAsIDEyMTU0NCwgMTIxNTQ4LCAxMjE1NTIsIAorICAgIDEyMTU1NiwgMTIxNTYwLCAxMjE1NjQsIDEyMTU2OCwgMTIxNTcyLCAxMjE1NzYsIDEyMTU4MCwgMTIxNTg0LCAxMjE1ODgsIAorICAgIDEyMTU5MiwgMTIxNTk2LCAxMjE2MDAsIDEyMTYwNCwgMTIxNjA4LCAxMjE2MTIsIDEyMTYxNiwgMTIxNjIwLCAxMjE2MjQsIAorICAgIDEyMTYyOCwgMTIxNjMyLCAxMjE2MzYsIDEyMTY0MCwgMTIxNjQ0LCAxMjE2NDgsIDEyMTY1MiwgMTIxNjU2LCAxMjE2NjAsIAorICAgIDEyMTY2NCwgMTIxNjY4LCAxMjE2NzIsIDEyMTY3NiwgMTIxNjgwLCAxMjE2ODQsIDEyMTY4OCwgMTIxNjkyLCAxMjE2OTYsIAorICAgIDEyMTcwMCwgMTIxNzA0LCAxMjE3MDgsIDEyMTcxMiwgMTIxNzE2LCAxMjE3MjAsIDEyMTcyNCwgMTIxNzI4LCAxMjE3MzIsIAorICAgIDEyMTczNiwgMTIxNzQwLCAxMjE3NDQsIDEyMTc0OCwgMTIxNzUyLCAxMjE3NTYsIDEyMTc2MCwgMTIxNzY0LCAxMjE3NjgsIAorICAgIDEyMTc3MiwgMTIxNzc2LCAxMjE3ODAsIDEyMTc4NCwgMTIxNzg4LCAxMjE3OTIsIDEyMTc5NiwgMTIxODAwLCAxMjE4MDQsIAorICAgIDEyMTgwOCwgMTIxODEyLCAxMjE4MTYsIDEyMTgyMCwgMTIxODI0LCAxMjE4MjgsIDEyMTgzMiwgMTIxODM2LCAxMjE4NDAsIAorICAgIDEyMTg0NCwgMTIxODQ4LCAxMjE4NTIsIDEyMTg1NiwgMTIxODYwLCAxMjE4NjQsIDEyMTg2OCwgMTIxODcyLCAxMjE4NzYsIAorICAgIDEyMTg4MCwgMTIxODg0LCAxMjE4ODgsIDEyMTg5MiwgMTIxODk2LCAxMjE5MDAsIDEyMTkwNCwgMTIxOTA4LCAxMjE5MTIsIAorICAgIDEyMTkxNiwgMTIxOTIwLCAxMjE5MjQsIDEyMTkyOCwgMTIxOTMyLCAxMjE5MzYsIDEyMTk0MCwgMTIxOTQ0LCAxMjE5NDgsIAorICAgIDEyMTk1MiwgMTIxOTU2LCAxMjE5NjAsIDEyMTk2NCwgMTIxOTY4LCAxMjE5NzIsIDEyMTk3NiwgMTIxOTgwLCAxMjE5ODQsIAorICAgIDEyMTk4OCwgMTIxOTkyLCAxMjE5OTYsIDEyMjAwMCwgMTIyMDA0LCAxMjIwMDgsIDEyMjAxMiwgMTIyMDE2LCAxMjIwMjAsIAorICAgIDEyMjAyNCwgMTIyMDI4LCAxMjIwMzIsIDEyMjAzNiwgMTIyMDQwLCAxMjIwNDQsIDEyMjA0OCwgMTIyMDUyLCAxMjIwNTYsIAorICAgIDEyMjA2MCwgMTIyMDY0LCAxMjIwNjgsIDEyMjA3MiwgMTIyMDc2LCAxMjIwODAsIDEyMjA4NCwgMTIyMDg4LCAxMjIwOTIsIAorICAgIDEyMjA5NiwgMTIyMTAwLCAxMjIxMDQsIDEyMjEwOCwgMTIyMTEyLCAxMjIxMTYsIDEyMjEyMCwgMTIyMTI0LCAxMjIxMjgsIAorICAgIDEyMjEzMiwgMTIyMTM2LCAxMjIxNDAsIDEyMjE0NCwgMTIyMTQ4LCAxMjIxNTIsIDEyMjE1NiwgMTIyMTYwLCAxMjIxNjQsIAorICAgIDEyMjE2OCwgMTIyMTcyLCAxMjIxNzYsIDEyMjE4MCwgMTIyMTg0LCAxMjIxODgsIDEyMjE5MiwgMTIyMTk2LCAxMjIyMDAsIAorICAgIDEyMjIwNCwgMTIyMjA4LCAxMjIyMTIsIDEyMjIxNiwgMTIyMjIwLCAxMjIyMjQsIDEyMjIyOCwgMTIyMjMyLCAxMjIyMzYsIAorICAgIDEyMjI0MCwgMTIyMjQ0LCAxMjIyNDgsIDEyMjI1MiwgMTIyMjU2LCAxMjIyNjAsIDEyMjI2NCwgMTIyMjY4LCAxMjIyNzIsIAorICAgIDEyMjI3NiwgMTIyMjgwLCAxMjIyODQsIDEyMjI4OCwgMTIyMjkyLCAxMjIyOTYsIDEyMjMwMCwgMTIyMzA0LCAxMjIzMDgsIAorICAgIDEyMjMxMiwgMTIyMzE2LCAxMjIzMjAsIDEyMjMyNCwgMTIyMzI4LCAxMjIzMzIsIDEyMjMzNiwgMTIyMzQwLCAxMjIzNDQsIAorICAgIDEyMjM0OCwgMTIyMzUyLCAxMjIzNTYsIDEyMjM2MCwgMTIyMzY0LCAxMjIzNjgsIDEyMjM3MiwgMTIyMzc2LCAxMjIzODAsIAorICAgIDEyMjM4NCwgMTIyMzg4LCAxMjIzOTIsIDEyMjM5NiwgMTIyNDAwLCAxMjI0MDQsIDEyMjQwOCwgMTIyNDEyLCAxMjI0MTYsIAorICAgIDEyMjQyMCwgMTIyNDI0LCAxMjI0MjgsIDEyMjQzMiwgMTIyNDM2LCAxMjI0NDAsIDEyMjQ0NCwgMTIyNDQ4LCAxMjI0NTIsIAorICAgIDEyMjQ1NiwgMTIyNDYwLCAxMjI0NjQsIDEyMjQ2OCwgMTIyNDcyLCAxMjI0NzYsIDEyMjQ4MCwgMTIyNDg0LCAxMjI0ODgsIAorICAgIDEyMjQ5MiwgMTIyNDk2LCAxMjI1MDAsIDEyMjUwNCwgMTIyNTA4LCAxMjI1MTIsIDEyMjUxNiwgMTIyNTIwLCAxMjI1MjQsIAorICAgIDEyMjUyOCwgMTIyNTMyLCAxMjI1MzYsIDEyMjU0MCwgMTIyNTQ0LCAxMjI1NDgsIDEyMjU1MiwgMTIyNTU2LCAxMjI1NjAsIAorICAgIDEyMjU2NCwgMTIyNTY4LCAxMjI1NzIsIDEyMjU3NiwgMTIyNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMjI1ODQsIDEyMjU4OCwgMTIyNTkyLCAxMjI1OTYsIDEyMjYwMCwgMTIyNjA0LCAxMjI2MDgsIAorICAgIDEyMjYxMiwgMTIyNjE2LCAxMjI2MjAsIDEyMjYyNCwgMTIyNjI4LCAxMjI2MzIsIDEyMjYzNiwgMTIyNjQwLCAxMjI2NDQsIAorICAgIDEyMjY0OCwgMTIyNjUyLCAxMjI2NTYsIDEyMjY2MCwgMTIyNjY0LCAxMjI2NjgsIDEyMjY3MiwgMTIyNjc2LCAxMjI2ODAsIAorICAgIDEyMjY4NCwgMTIyNjg4LCAxMjI2OTIsIDEyMjY5NiwgMTIyNzAwLCAxMjI3MDQsIDEyMjcwOCwgMTIyNzEyLCAxMjI3MTYsIAorICAgIDEyMjcyMCwgMTIyNzI0LCAxMjI3MjgsIDEyMjczMiwgMTIyNzM2LCAxMjI3NDAsIDEyMjc0NCwgMTIyNzQ4LCAxMjI3NTIsIAorICAgIDEyMjc1NiwgMTIyNzYwLCAxMjI3NjQsIDEyMjc2OCwgMTIyNzcyLCAxMjI3NzYsIDEyMjc4MCwgMTIyNzg0LCAxMjI3ODgsIAorICAgIDEyMjc5MiwgMTIyNzk2LCAxMjI4MDAsIDEyMjgwNCwgMTIyODA4LCAxMjI4MTIsIDEyMjgxNiwgMTIyODIwLCAxMjI4MjQsIAorICAgIDEyMjgyOCwgMTIyODMyLCAxMjI4MzYsIDEyMjg0MCwgMTIyODQ0LCAxMjI4NDgsIDEyMjg1MiwgMTIyODU2LCAxMjI4NjAsIAorICAgIDEyMjg2NCwgMTIyODY4LCAxMjI4NzIsIDEyMjg3NiwgMTIyODgwLCAxMjI4ODQsIDEyMjg4OCwgMTIyODkyLCAxMjI4OTYsIAorICAgIDEyMjkwMCwgMTIyOTA0LCAxMjI5MDgsIDEyMjkxMiwgMTIyOTE2LCAxMjI5MjAsIDEyMjkyNCwgMTIyOTI4LCAxMjI5MzIsIAorICAgIDEyMjkzNiwgMTIyOTQwLCAxMjI5NDQsIDEyMjk0OCwgMTIyOTUyLCAxMjI5NTYsIDEyMjk2MCwgMTIyOTY0LCAxMjI5NjgsIAorICAgIDEyMjk3MiwgMTIyOTc2LCAxMjI5ODAsIDEyMjk4NCwgMTIyOTg4LCAxMjI5OTIsIDEyMjk5NiwgMTIzMDAwLCAxMjMwMDQsIAorICAgIDEyMzAwOCwgMTIzMDEyLCAxMjMwMTYsIDEyMzAyMCwgMTIzMDI0LCAxMjMwMjgsIDEyMzAzMiwgMTIzMDM2LCAxMjMwNDAsIAorICAgIDEyMzA0NCwgMTIzMDQ4LCAxMjMwNTIsIDEyMzA1NiwgMTIzMDYwLCAxMjMwNjQsIDEyMzA2OCwgMTIzMDcyLCAxMjMwNzYsIAorICAgIDEyMzA4MCwgMTIzMDg0LCAxMjMwODgsIDEyMzA5MiwgMTIzMDk2LCAxMjMxMDAsIDEyMzEwNCwgMTIzMTA4LCAxMjMxMTIsIAorICAgIDEyMzExNiwgMTIzMTIwLCAxMjMxMjQsIDEyMzEyOCwgMTIzMTMyLCAxMjMxMzYsIDEyMzE0MCwgMTIzMTQ0LCAxMjMxNDgsIAorICAgIDEyMzE1MiwgMTIzMTU2LCAxMjMxNjAsIDEyMzE2NCwgMTIzMTY4LCAxMjMxNzIsIDEyMzE3NiwgMTIzMTgwLCAxMjMxODQsIAorICAgIDEyMzE4OCwgMTIzMTkyLCAxMjMxOTYsIDEyMzIwMCwgMTIzMjA0LCAxMjMyMDgsIDEyMzIxMiwgMTIzMjE2LCAxMjMyMjAsIAorICAgIDEyMzIyNCwgMTIzMjI4LCAxMjMyMzIsIDEyMzIzNiwgMTIzMjQwLCAxMjMyNDQsIDEyMzI0OCwgMTIzMjUyLCAxMjMyNTYsIAorICAgIDEyMzI2MCwgMTIzMjY0LCAxMjMyNjgsIDEyMzI3MiwgMTIzMjc2LCAxMjMyODAsIDEyMzI4NCwgMTIzMjg4LCAxMjMyOTIsIAorICAgIDEyMzI5NiwgMTIzMzAwLCAxMjMzMDQsIDEyMzMwOCwgMTIzMzEyLCAxMjMzMTYsIDEyMzMyMCwgMTIzMzI0LCAxMjMzMjgsIAorICAgIDEyMzMzMiwgMTIzMzM2LCAxMjMzNDAsIDEyMzM0NCwgMTIzMzQ4LCAxMjMzNTIsIDEyMzM1NiwgMTIzMzYwLCAxMjMzNjQsIAorICAgIDEyMzM2OCwgMTIzMzcyLCAxMjMzNzYsIDEyMzM4MCwgMTIzMzg0LCAxMjMzODgsIDEyMzM5MiwgMTIzMzk2LCAxMjM0MDAsIAorICAgIDEyMzQwNCwgMTIzNDA4LCAxMjM0MTIsIDEyMzQxNiwgMTIzNDIwLCAxMjM0MjQsIDEyMzQyOCwgMTIzNDMyLCAxMjM0MzYsIAorICAgIDEyMzQ0MCwgMTIzNDQ0LCAxMjM0NDgsIDEyMzQ1MiwgMTIzNDU2LCAxMjM0NjAsIDEyMzQ2NCwgMTIzNDY4LCAxMjM0NzIsIAorICAgIDEyMzQ3NiwgMTIzNDgwLCAxMjM0ODQsIDEyMzQ4OCwgMTIzNDkyLCAxMjM0OTYsIDEyMzUwMCwgMTIzNTA0LCAxMjM1MDgsIAorICAgIDEyMzUxMiwgMTIzNTE2LCAxMjM1MjAsIDEyMzUyNCwgMTIzNTI4LCAxMjM1MzIsIDEyMzUzNiwgMTIzNTQwLCAxMjM1NDQsIAorICAgIDEyMzU0OCwgMTIzNTUyLCAxMjM1NTYsIDEyMzU2MCwgMTIzNTY0LCAxMjM1NjgsIDEyMzU3MiwgMTIzNTc2LCAxMjM1ODAsIAorICAgIDEyMzU4NCwgMTIzNTg4LCAxMjM1OTIsIDEyMzU5NiwgMTIzNjAwLCAxMjM2MDQsIDEyMzYwOCwgMTIzNjEyLCAxMjM2MTYsIAorICAgIDEyMzYyMCwgMTIzNjI0LCAxMjM2MjgsIDEyMzYzMiwgMTIzNjM2LCAxMjM2NDAsIDEyMzY0NCwgMTIzNjQ4LCAxMjM2NTIsIAorICAgIDEyMzY1NiwgMTIzNjYwLCAxMjM2NjQsIDEyMzY2OCwgMTIzNjcyLCAxMjM2NzYsIDEyMzY4MCwgMTIzNjg0LCAxMjM2ODgsIAorICAgIDEyMzY5MiwgMTIzNjk2LCAxMjM3MDAsIDEyMzcwNCwgMTIzNzA4LCAxMjM3MTIsIDEyMzcxNiwgMTIzNzIwLCAxMjM3MjQsIAorICAgIDEyMzcyOCwgMTIzNzMyLCAxMjM3MzYsIDEyMzc0MCwgMTIzNzQ0LCAxMjM3NDgsIDEyMzc1MiwgMTIzNzU2LCAxMjM3NjAsIAorICAgIDEyMzc2NCwgMTIzNzY4LCAxMjM3NzIsIDEyMzc3NiwgMTIzNzgwLCAxMjM3ODQsIDEyMzc4OCwgMTIzNzkyLCAxMjM3OTYsIAorICAgIDEyMzgwMCwgMTIzODA0LCAxMjM4MDgsIDEyMzgxMiwgMTIzODE2LCAxMjM4MjAsIDEyMzgyNCwgMTIzODI4LCAxMjM4MzIsIAorICAgIDEyMzgzNiwgMTIzODQwLCAxMjM4NDQsIDEyMzg0OCwgMTIzODUyLCAxMjM4NTYsIDEyMzg2MCwgMTIzODY0LCAxMjM4NjgsIAorICAgIDEyMzg3MiwgMTIzODc2LCAxMjM4ODAsIDEyMzg4NCwgMTIzODg4LCAxMjM4OTIsIDEyMzg5NiwgMTIzOTAwLCAxMjM5MDQsIAorICAgIDEyMzkwOCwgMTIzOTEyLCAxMjM5MTYsIDEyMzkyMCwgMTIzOTI0LCAxMjM5MjgsIDEyMzkzMiwgMTIzOTM2LCAxMjM5NDAsIAorICAgIDEyMzk0NCwgMTIzOTQ4LCAxMjM5NTIsIDEyMzk1NiwgMTIzOTYwLCAxMjM5NjQsIDEyMzk2OCwgMTIzOTcyLCAxMjM5NzYsIAorICAgIDEyMzk4MCwgMTIzOTg0LCAxMjM5ODgsIDEyMzk5MiwgMTIzOTk2LCAxMjQwMDAsIDEyNDAwNCwgMTI0MDA4LCAxMjQwMTIsIAorICAgIDEyNDAxNiwgMTI0MDIwLCAxMjQwMjQsIDEyNDAyOCwgMTI0MDMyLCAxMjQwMzYsIDEyNDA0MCwgMTI0MDQ0LCAxMjQwNDgsIAorICAgIDEyNDA1MiwgMTI0MDU2LCAxMjQwNjAsIDEyNDA2NCwgMTI0MDY4LCAxMjQwNzIsIDEyNDA3NiwgMTI0MDgwLCAxMjQwODQsIAorICAgIDEyNDA4OCwgMTI0MDkyLCAxMjQwOTYsIDEyNDEwMCwgMTI0MTA0LCAxMjQxMDgsIDEyNDExMiwgMTI0MTE2LCAxMjQxMjAsIAorICAgIDEyNDEyNCwgMTI0MTI4LCAxMjQxMzIsIDEyNDEzNiwgMTI0MTQwLCAxMjQxNDQsIDEyNDE0OCwgMTI0MTUyLCAxMjQxNTYsIAorICAgIDEyNDE2MCwgMTI0MTY0LCAxMjQxNjgsIDEyNDE3MiwgMTI0MTc2LCAxMjQxODAsIDEyNDE4NCwgMTI0MTg4LCAxMjQxOTIsIAorICAgIDEyNDE5NiwgMTI0MjAwLCAxMjQyMDQsIDEyNDIwOCwgMTI0MjEyLCAxMjQyMTYsIDEyNDIyMCwgMTI0MjI0LCAxMjQyMjgsIAorICAgIDEyNDIzMiwgMTI0MjM2LCAxMjQyNDAsIDEyNDI0NCwgMTI0MjQ4LCAxMjQyNTIsIDEyNDI1NiwgMTI0MjYwLCAxMjQyNjQsIAorICAgIDEyNDI2OCwgMTI0MjcyLCAxMjQyNzYsIDEyNDI4MCwgMTI0Mjg0LCAxMjQyODgsIDEyNDI5MiwgMTI0Mjk2LCAxMjQzMDAsIAorICAgIDEyNDMwNCwgMTI0MzA4LCAxMjQzMTIsIDEyNDMxNiwgMTI0MzI2LCAxMjQzMzAsIDEyNDMzNCwgMTI0MzM4LCAxMjQzNDIsIAorICAgIDEyNDM0NiwgMTI0MzUwLCAxMjQzNTQsIDEyNDM1OCwgMTI0MzYyLCAxMjQzNjYsIDEyNDM3MCwgMTI0Mzc1LCAxMjQzNzksIAorICAgIDEyNDM4MywgMTI0Mzg3LCAxMjQzOTEsIDEyNDM5NSwgMTI0Mzk5LCAxMjQ0MDMsIDEyNDQwNywgMTI0NDExLCAxMjQ0MTUsIAorICAgIDEyNDQxOSwgMTI0NDIzLCAxMjQ0MjcsIDEyNDQzMSwgMTI0NDM1LCAxMjQ0MzksIDEyNDQ0OCwgMTI0NDU3LCAxMjQ0NjEsIAorICAgIDEyNDQ2NSwgMTI0NDY5LCAxMjQ0NzMsIDEyNDQ3NywgMTI0NDgxLCAxMjQ0ODUsIDEyNDQ4OSwgMTI0NDkzLCAxMjQ0OTcsIAorICAgIDEyNDUwMSwgMTI0NTA1LCAxMjQ1MDksIDEyNDUxMywgMTI0NTE3LCAxMjQ1MjEsIDEyNDUyNSwgMTI0NTI5LCAxMjQ1MzMsIAorICAgIDEyNDUzNywgMTI0NTQxLCAxMjQ1NDUsIDEyNDU0OSwgMTI0NTUzLCAxMjQ1NTcsIDEyNDU2MSwgMTI0NTY1LCAxMjQ1NjksIAorICAgIDEyNDU3MywgMTI0NTc3LCAxMjQ1ODEsIDEyNDU4NSwgMTI0NTg5LCAxMjQ1OTMsIDEyNDU5NywgMTI0NjAxLCAxMjQ2MDUsIAorICAgIDEyNDYwOSwgMTI0NjEzLCAxMjQ2MTcsIDEyNDYyMSwgMTI0NjI1LCAxMjQ2MjksIDEyNDYzMywgMTI0NjM3LCAxMjQ2NDEsIAorICAgIDEyNDY0NSwgMTI0NjQ5LCAxMjQ2NTMsIDEyNDY1NywgMTI0NjYxLCAxMjQ2NjUsIDEyNDY2OSwgMTI0NjczLCAxMjQ2NzcsIAorICAgIDEyNDY4MSwgMTI0Njg1LCAxMjQ2ODksIDEyNDY5MywgMTI0Njk3LCAxMjQ3MDEsIDEyNDcwNSwgMTI0NzA5LCAxMjQ3MTMsIAorICAgIDEyNDcxNywgMTI0NzIxLCAxMjQ3MjUsIDEyNDcyOSwgMTI0NzMzLCAxMjQ3MzcsIDEyNDc0MSwgMTI0NzQ1LCAxMjQ3NDksIAorICAgIDEyNDc1MywgMTI0NzU3LCAxMjQ3NjEsIDEyNDc2NSwgMTI0NzY5LCAxMjQ3NzMsIDEyNDc3NywgMTI0NzgxLCAxMjQ3ODUsIAorICAgIDEyNDc4OSwgMTI0NzkzLCAxMjQ3OTcsIDEyNDgwMSwgMTI0ODA1LCAxMjQ4MDksIDEyNDgxMywgMTI0ODE3LCAxMjQ4MjEsIAorICAgIDEyNDgyNSwgMTI0ODI5LCAxMjQ4MzMsIDEyNDgzNywgMTI0ODQxLCAxMjQ4NDUsIDEyNDg0OSwgMTI0ODUzLCAxMjQ4NTcsIAorICAgIDEyNDg2MSwgMTI0ODY1LCAxMjQ4NjksIDEyNDg3MywgMTI0ODc3LCAxMjQ4ODEsIDEyNDg4NSwgMTI0ODg5LCAxMjQ4OTMsIAorICAgIDEyNDg5NywgMTI0OTAxLCAxMjQ5MDUsIDEyNDkwOSwgMTI0OTEzLCAxMjQ5MTcsIDEyNDkyMSwgMTI0OTI1LCAxMjQ5MjksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDkzMywgMTI0OTQxLCAKKyAgICAxMjQ5NDksIDEyNDk1OSwgMTI0OTY5LCAxMjQ5NzcsIDEyNDk4MywgMTI0OTkxLCAxMjQ5OTksIDEyNTAwOSwgMTI1MDIxLCAKKyAgICAxMjUwMzMsIDEyNTAzOSwgMTI1MDQ3LCAxMjUwNTMsIDEyNTA1OSwgMTI1MDY1LCAxMjUwNzEsIDEyNTA3NywgMTI1MDgzLCAKKyAgICAxMjUwODksIDEyNTA5NSwgMTI1MTAxLCAxMjUxMDcsIDEyNTExMywgMTI1MTIxLCAxMjUxMjksIDEyNTEzNSwgMTI1MTQxLCAKKyAgICAxMjUxNDcsIDEyNTE1MywgMTI1MTYxLCAxMjUxNjksIDEyNTE3OCwgMTI1MTg0LCAxMjUxOTIsIDEyNTE5OCwgMTI1MjA0LCAKKyAgICAxMjUyMTAsIDEyNTIxNiwgMTI1MjIyLCAxMjUyMzAsIDEyNTIzOCwgMTI1MjQ0LCAxMjUyNTAsIDEyNTI1NiwgMTI1MjYyLCAKKyAgICAxMjUyNjgsIDEyNTI3NCwgMTI1MjgwLCAxMjUyODYsIDEyNTI5MiwgMTI1Mjk4LCAxMjUzMDQsIDEyNTMxMCwgMTI1MzE2LCAKKyAgICAxMjUzMjIsIDEyNTMyOCwgMTI1MzM0LCAxMjUzNDAsIDEyNTM0NiwgMTI1MzUyLCAxMjUzNjAsIDEyNTM2NiwgMTI1MzcyLCAKKyAgICAxMjUzODIsIDEyNTM5MCwgMTI1Mzk2LCAxMjU0MDIsIDEyNTQwOCwgMTI1NDE0LCAxMjU0MjAsIDEyNTQyNiwgMTI1NDMyLCAKKyAgICAxMjU0MzgsIDEyNTQ0NCwgMTI1NDUwLCAxMjU0NTYsIDEyNTQ2MiwgMTI1NDY4LCAxMjU0NzQsIDEyNTQ4MCwgMTI1NDg2LCAKKyAgICAxMjU0OTIsIDEyNTQ5OCwgMTI1NTA0LCAxMjU1MTAsIDEyNTUxNiwgMTI1NTIyLCAxMjU1MzAsIDEyNTUzNiwgMTI1NTQ0LCAKKyAgICAxMjU1NTIsIDEyNTU2MCwgMTI1NTY2LCAxMjU1NzIsIDEyNTU3OCwgMTI1NTg0LCAxMjU1OTAsIDEyNTU5OCwgMTI1NjA4LCAKKyAgICAxMjU2MTYsIDEyNTYyNCwgMTI1NjMwLCAxMjU2MzYsIDEyNTY0NCwgMTI1NjUyLCAxMjU2NTgsIDEyNTY2NiwgMTI1Njc0LCAKKyAgICAxMjU2ODIsIDEyNTY4OCwgMTI1Njk0LCAxMjU3MDAsIDEyNTcwNiwgMTI1NzEyLCAxMjU3MTgsIDEyNTcyNiwgMTI1NzM0LCAKKyAgICAxMjU3NDAsIDEyNTc0NiwgMTI1NzUyLCAxMjU3NTgsIDEyNTc2NCwgMTI1NzcyLCAxMjU3NzgsIDEyNTc4NCwgMTI1NzkwLCAKKyAgICAxMjU3OTYsIDEyNTgwMiwgMTI1ODA4LCAxMjU4MTYsIDEyNTgyMiwgMTI1ODI4LCAxMjU4MzQsIDEyNTg0MCwgMTI1ODQ4LCAKKyAgICAxMjU4NTYsIDEyNTg2MiwgMTI1ODY4LCAxMjU4NzQsIDEyNTg3OSwgMTI1ODg1LCAxMjU4OTEsIDEyNTg5OCwgMTI1OTAzLCAKKyAgICAxMjU5MDgsIDEyNTkxMywgMTI1OTE4LCAxMjU5MjMsIDEyNTkyOCwgMTI1OTMzLCAxMjU5MzgsIDEyNTk0MywgMTI1OTUyLCAKKyAgICAxMjU5NTksIDEyNTk2NCwgMTI1OTY5LCAxMjU5NzQsIDEyNTk4MSwgMTI1OTg2LCAxMjU5OTEsIDEyNTk5NiwgMTI2MDAzLCAKKyAgICAxMjYwMDgsIDEyNjAxMywgMTI2MDE4LCAxMjYwMjMsIDEyNjAyOCwgMTI2MDMzLCAxMjYwMzgsIDEyNjA0MywgMTI2MDQ4LCAKKyAgICAxMjYwNTMsIDEyNjA1OCwgMTI2MDY1LCAxMjYwNzAsIDEyNjA3NywgMTI2MDgyLCAxMjYwODcsIDEyNjA5NCwgMTI2MDk5LCAKKyAgICAxMjYxMDQsIDEyNjEwOSwgMTI2MTE0LCAxMjYxMTksIDEyNjEyNCwgMTI2MTI5LCAxMjYxMzQsIDEyNjEzOSwgMTI2MTQ0LCAKKyAgICAxMjYxNDksIDEyNjE1NCwgMTI2MTU5LCAxMjYxNjQsIDEyNjE2OSwgMTI2MTc0LCAxMjYxNzksIDEyNjE4NCwgMTI2MTg5LCAKKyAgICAxMjYxOTYsIDEyNjIwMSwgMTI2MjA2LCAxMjYyMTEsIDEyNjIxNiwgMTI2MjIxLCAxMjYyMjYsIDEyNjIzMSwgMTI2MjM2LCAKKyAgICAxMjYyNDEsIDEyNjI0NiwgMTI2MjUxLCAxMjYyNTYsIDEyNjI2MSwgMTI2MjY4LCAxMjYyNzMsIDEyNjI3OCwgMTI2Mjg1LCAKKyAgICAxMjYyOTAsIDEyNjI5NSwgMTI2MzAwLCAxMjYzMDUsIDEyNjMxMCwgMTI2MzE1LCAxMjYzMjAsIDEyNjMyNSwgMTI2MzMwLCAKKyAgICAxMjYzMzUsIDEyNjM0MiwgMTI2MzQ3LCAxMjYzNTIsIDEyNjM1NywgMTI2MzYyLCAxMjYzNjcsIDEyNjM3NCwgMTI2MzgxLCAKKyAgICAxMjYzODYsIDEyNjM5MSwgMTI2Mzk2LCAxMjY0MDEsIDEyNjQwNiwgMTI2NDExLCAxMjY0MTYsIDEyNjQyMSwgMTI2NDI2LCAKKyAgICAxMjY0MzEsIDEyNjQzNiwgMTI2NDQxLCAxMjY0NDYsIDEyNjQ1MSwgMTI2NDU2LCAxMjY0NjEsIDEyNjQ2NiwgMTI2NDcxLCAKKyAgICAxMjY0NzYsIDEyNjQ4MSwgMTI2NDg2LCAxMjY0OTEsIDEyNjQ5NiwgMTI2NTAxLCAxMjY1MDYsIDEyNjUxMSwgMTI2NTE2LCAKKyAgICAxMjY1MjEsIDEyNjUyNiwgMTI2NTMxLCAxMjY1MzYsIDEyNjU0MSwgMTI2NTQ2LCAxMjY1NTEsIDEyNjU1NiwgMTI2NTYxLCAKKyAgICAxMjY1NjgsIDEyNjU3MywgMTI2NTc4LCAxMjY1ODMsIDEyNjU4OCwgMTI2NTkzLCAxMjY1OTgsIDEyNjYwMywgMTI2NjA4LCAKKyAgICAxMjY2MTMsIDEyNjYxOCwgMTI2NjIzLCAxMjY2MjgsIDEyNjYzMywgMTI2NjM4LCAxMjY2NDMsIDEyNjY0OCwgMTI2NjUzLCAKKyAgICAxMjY2NTgsIDEyNjY2MywgMTI2NjY4LCAxMjY2NzMsIDEyNjY3OCwgMTI2NjgzLCAxMjY2ODgsIDEyNjY5MywgMTI2Njk4LCAKKyAgICAxMjY3MDMsIDEyNjcwOCwgMTI2NzEzLCAxMjY3MTgsIDEyNjcyMywgMTI2NzI4LCAxMjY3MzMsIDEyNjczOCwgMTI2NzQzLCAKKyAgICAxMjY3NDgsIDEyNjc1MywgMTI2NzU4LCAxMjY3NjMsIDEyNjc2OCwgMTI2NzczLCAxMjY3NzgsIDEyNjc4MywgMTI2Nzg4LCAKKyAgICAxMjY3OTMsIDEyNjc5OCwgMTI2ODAzLCAxMjY4MDgsIDEyNjgxMywgMTI2ODE4LCAxMjY4MjMsIDEyNjgyOCwgMTI2ODMzLCAKKyAgICAxMjY4MzgsIDEyNjg0MywgMTI2ODQ4LCAxMjY4NTMsIDEyNjg1OCwgMTI2ODY1LCAxMjY4NzAsIDEyNjg3NSwgMTI2ODgwLCAKKyAgICAxMjY4ODUsIDEyNjg5MCwgMTI2ODk1LCAxMjY5MDAsIDEyNjkwNSwgMTI2OTEwLCAxMjY5MTUsIDEyNjkyMCwgMTI2OTI1LCAKKyAgICAxMjY5MzAsIDEyNjkzNSwgMTI2OTQwLCAxMjY5NDUsIDEyNjk1MCwgMTI2OTU1LCAxMjY5NjAsIDEyNjk2NSwgMTI2OTcwLCAKKyAgICAxMjY5NzcsIDEyNjk4MiwgMTI2OTg3LCAxMjY5OTQsIDEyNjk5OSwgMTI3MDA0LCAxMjcwMDksIDEyNzAxNCwgMTI3MDE5LCAKKyAgICAxMjcwMjQsIDEyNzAyOSwgMTI3MDM0LCAxMjcwMzksIDEyNzA0NCwgMTI3MDQ5LCAxMjcwNTQsIDEyNzA1OSwgMTI3MDY0LCAKKyAgICAxMjcwNjksIDEyNzA3NCwgMTI3MDc5LCAxMjcwODQsIDEyNzA4OSwgMTI3MDk0LCAxMjcwOTksIDEyNzEwNCwgMTI3MTA5LCAKKyAgICAxMjcxMTQsIDEyNzExOSwgMTI3MTI0LCAxMjcxMjksIDEyNzEzNCwgMTI3MTM5LCAxMjcxNDQsIDEyNzE0OSwgMTI3MTU0LCAKKyAgICAxMjcxNTksIDEyNzE2NCwgMTI3MTY5LCAxMjcxNzQsIDEyNzE3OSwgMTI3MTg0LCAxMjcxODksIDEyNzE5NCwgMTI3MTk5LCAKKyAgICAxMjcyMDQsIDEyNzIwOSwgMTI3MjE2LCAxMjcyMjEsIDEyNzIyNiwgMTI3MjMzLCAxMjcyNDAsIDEyNzI0NSwgMTI3MjUwLCAKKyAgICAxMjcyNTUsIDEyNzI2MCwgMTI3MjY1LCAxMjcyNzAsIDEyNzI3NSwgMTI3MjgwLCAxMjcyODUsIDEyNzI5MCwgMTI3Mjk1LCAKKyAgICAxMjczMDAsIDEyNzMwNSwgMTI3MzEwLCAxMjczMTUsIDEyNzMyMCwgMTI3MzI1LCAxMjczMzAsIDEyNzMzNSwgMTI3MzQwLCAKKyAgICAxMjczNDUsIDEyNzM1MCwgMTI3MzU1LCAxMjczNjAsIDEyNzM2NSwgMTI3MzcyLCAxMjczNzcsIDEyNzM4MiwgMTI3Mzg3LCAKKyAgICAxMjczOTIsIDEyNzM5NywgMTI3NDAyLCAxMjc0MDcsIDEyNzQxMiwgMTI3NDE3LCAxMjc0MjIsIDEyNzQyNywgMTI3NDMyLCAKKyAgICAxMjc0MzcsIDEyNzQ0MiwgMTI3NDQ3LCAxMjc0NTIsIDEyNzQ1NywgMTI3NDYyLCAxMjc0NjksIDEyNzQ3NCwgMTI3NDc5LCAKKyAgICAxMjc0ODQsIDEyNzQ4OSwgMTI3NDk0LCAxMjc0OTksIDEyNzUwNCwgMTI3NTEwLCAxMjc1MTUsIDEyNzUyMCwgMTI3NTI1LCAKKyAgICAxMjc1MzAsIDEyNzUzNSwgMTI3NTQwLCAxMjc1NDUsIDEyNzU1MCwgMTI3NTU3LCAxMjc1NjQsIDEyNzU2OSwgMTI3NTc0LCAKKyAgICAxMjc1NzgsIDEyNzU4MywgMTI3NTg3LCAxMjc1OTEsIDEyNzU5NiwgMTI3NjAzLCAxMjc2MDgsIDEyNzYxMywgMTI3NjIyLCAKKyAgICAxMjc2MjcsIDEyNzYzMiwgMTI3NjM3LCAxMjc2NDIsIDEyNzY0OSwgMTI3NjU2LCAxMjc2NjEsIDEyNzY2NiwgMTI3NjcxLCAKKyAgICAxMjc2NzYsIDEyNzY4MywgMTI3Njg4LCAxMjc2OTMsIDEyNzY5OCwgMTI3NzAzLCAxMjc3MDgsIDEyNzcxMywgMTI3NzE4LCAKKyAgICAxMjc3MjMsIDEyNzcyOCwgMTI3NzMzLCAxMjc3MzgsIDEyNzc0MywgMTI3NzUwLCAxMjc3NTUsIDEyNzc2MCwgMTI3NzY1LCAKKyAgICAxMjc3NzAsIDEyNzc3NSwgMTI3Nzc5LCAxMjc3ODQsIDEyNzc4OSwgMTI3Nzk0LCAxMjc3OTksIDEyNzgwNCwgMTI3ODA5LCAKKyAgICAxMjc4MTQsIDEyNzgxOSwgMTI3ODI0LCAxMjc4MzAsIDEyNzgzNiwgMTI3ODQyLCAxMjc4NDgsIDEyNzg1NCwgMTI3ODYwLCAKKyAgICAxMjc4NjYsIDEyNzg3MiwgMTI3ODc4LCAxMjc4ODQsIDEyNzg5MCwgMTI3ODk2LCAxMjc5MDIsIDEyNzkwOCwgMTI3OTE0LCAKKyAgICAxMjc5MjAsIDEyNzkyNiwgMTI3OTMyLCAxMjc5MzgsIDEyNzk0NCwgMTI3OTUwLCAxMjc5NTYsIDEyNzk2MiwgMTI3OTY4LCAKKyAgICAxMjc5NzMsIDEyNzk3OSwgMTI3OTg1LCAxMjc5OTEsIDEyNzk5NywgMTI4MDAzLCAxMjgwMDksIDEyODAxNSwgMTI4MDIxLCAKKyAgICAxMjgwMjcsIDEyODAzMywgMTI4MDM5LCAxMjgwNDUsIDEyODA1MSwgMTI4MDU3LCAxMjgwNjMsIDEyODA2OSwgMTI4MDc1LCAKKyAgICAxMjgwODEsIDEyODA4NywgMTI4MDkzLCAxMjgwOTgsIDEyODEwNCwgMTI4MTEwLCAxMjgxMTYsIDEyODEyMiwgMTI4MTI4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgxMzQsIDEyODEzOSwgMTI4MTQ0LCAxMjgxNDksIDEyODE1NCwgMTI4MTU5LCAKKyAgICAxMjgxNjQsIDEyODE2OCwgMTI4MTczLCAxMjgxNzgsIDEyODE4MywgMTI4MTg4LCAxMjgxOTMsIDEyODE5OCwgMTI4MjAzLCAKKyAgICAxMjgyMDgsIDEyODIxMywgMTI4MjE3LCAxMjgyMjIsIDEyODIyNiwgMTI4MjMxLCAxMjgyMzYsIDEyODI0MSwgMTI4MjQ2LCAKKyAgICAxMjgyNTEsIDEyODI1NSwgMTI4MjYwLCAxMjgyNjUsIDEyODI3MCwgMTI4Mjc1LCAxMjgyODAsIDAsIDEyODI4NSwgCisgICAgMTI4MjkwLCAxMjgyOTQsIDEyODI5OCwgMTI4MzAyLCAxMjgzMDYsIDEyODMxMCwgMTI4MzE0LCAxMjgzMTksIDEyODMyMywgCisgICAgMCwgMCwgMCwgMCwgMTI4MzI4LCAxMjgzMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODMzNywgMTI4MzQ0LCAxMjgzNTAsIDEyODM1NywgMTI4MzY0LCAKKyAgICAxMjgzNzEsIDEyODM3OCwgMTI4Mzg1LCAxMjgzOTIsIDEyODM5OSwgMTI4NDA2LCAxMjg0MTMsIDEyODQyMCwgMTI4NDI3LCAKKyAgICAxMjg0MzQsIDEyODQ0MSwgMTI4NDQ4LCAxMjg0NTUsIDEyODQ2MSwgMTI4NDY4LCAxMjg0NzUsIDEyODQ4MiwgMTI4NDg4LCAKKyAgICAxMjg0OTUsIDEyODUwMSwgMTI4NTA3LCAxMjg1MTQsIDEyODUyMCwgMTI4NTI3LCAxMjg1MzMsIDAsIDAsIDEyODUzOSwgCisgICAgMTI4NTQ3LCAxMjg1NTUsIDEyODU2NCwgMTI4NTczLCAxMjg1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyODU5MCwgMTI4NTk1LCAxMjg2MDAsIDEyODYwNSwgMTI4NjEwLCAxMjg2MTUsIDEyODYyMCwgMTI4NjI1LCAxMjg2MzAsIAorICAgIDEyODYzNSwgMTI4NjQwLCAxMjg2NDUsIDEyODY1MCwgMTI4NjU1LCAxMjg2NjAsIDEyODY2NSwgMTI4NjcwLCAxMjg2NzUsIAorICAgIDEyODY4MCwgMTI4Njg1LCAxMjg2OTAsIDEyODY5NSwgMTI4NzAwLCAxMjg3MDUsIDEyODcxMCwgMTI4NzE1LCAxMjg3MjAsIAorICAgIDEyODcyNSwgMTI4NzMwLCAxMjg3MzUsIDEyODc0MCwgMTI4NzQ1LCAxMjg3NTAsIDEyODc1NSwgMTI4NzYwLCAxMjg3NjUsIAorICAgIDEyODc3MCwgMTI4Nzc1LCAxMjg3ODAsIDEyODc4NSwgMTI4NzkwLCAxMjg3OTUsIDEyODgwMCwgMTI4ODA1LCAxMjg4MTAsIAorICAgIDEyODgxNSwgMTI4ODIwLCAxMjg4MjUsIDEyODgzMCwgMTI4ODM3LCAxMjg4NDQsIDEyODg1MSwgMTI4ODU4LCAxMjg4NjUsIAorICAgIDEyODg3MiwgMTI4ODc5LCAxMjg4ODYsIDEyODg5NSwgMTI4OTAyLCAxMjg5MDksIDEyODkxNiwgMTI4OTIzLCAxMjg5MzAsIAorICAgIDEyODkzNywgMTI4OTQ0LCAxMjg5NTEsIDEyODk1OCwgMTI4OTY1LCAxMjg5NzIsIDEyODk3NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTI4OTg2LCAxMjg5OTEsIDEyODk5NSwgMTI4OTk5LCAxMjkwMDMsIDEyOTAwNywgMTI5MDExLCAKKyAgICAxMjkwMTUsIDEyOTAyMCwgMTI5MDI0LCAwLCAxMjkwMjksIDEyOTAzNCwgMTI5MDM5LCAxMjkwNDYsIDEyOTA1MSwgCisgICAgMTI5MDU4LCAxMjkwNjUsIDAsIDEyOTA3MCwgMTI5MDc3LCAxMjkwODIsIDEyOTA4NywgMTI5MDk0LCAxMjkxMDEsIAorICAgIDEyOTEwNiwgMTI5MTExLCAxMjkxMTYsIDEyOTEyMSwgMTI5MTI2LCAxMjkxMzMsIDEyOTE0MCwgMTI5MTQ1LCAxMjkxNTAsIAorICAgIDEyOTE1NSwgMTI5MTY4LCAxMjkxNzcsIDEyOTE4NCwgMTI5MTkzLCAxMjkyMDIsIDAsIDAsIDAsIDAsIDAsIDEyOTIxMSwgCisgICAgMTI5MjE4LCAxMjkyMjUsIDEyOTIzMiwgMTI5MjM5LCAxMjkyNDYsIDEyOTI1MywgMTI5MjYwLCAxMjkyNjcsIDEyOTI3NCwgCisgICAgMTI5MjgxLCAxMjkyODgsIDEyOTI5NSwgMTI5MzAyLCAxMjkzMDksIDEyOTMxNiwgMTI5MzIzLCAxMjkzMzAsIDEyOTMzNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5MzQ0LCAxMjkzNDcsIDEyOTM1MSwgCisgICAgMTI5MzU1LCAxMjkzNTksIDEyOTM2MiwgMTI5MzY2LCAxMjkzNzEsIDEyOTM3NSwgMTI5Mzc5LCAxMjkzODMsIDEyOTM4NywgCisgICAgMTI5MzkxLCAxMjkzOTYsIDEyOTQwMSwgMTI5NDA1LCAxMjk0MDksIDEyOTQxMywgMTI5NDE3LCAxMjk0MjIsIDEyOTQyOCwgCisgICAgMTI5NDMyLCAxMjk0MzYsIDEyOTQ0MCwgMTI5NDQ0LCAxMjk0NDgsIDEyOTQ1MiwgMTI5NDU2LCAxMjk0NjAsIDEyOTQ2NCwgCisgICAgMTI5NDY4LCAxMjk0NzEsIDEyOTQ3NSwgMTI5NDc5LCAxMjk0ODMsIDEyOTQ4NywgMTI5NDkxLCAxMjk0OTUsIDEyOTUwMSwgCisgICAgMTI5NTA0LCAxMjk1MDgsIDEyOTUxMiwgMTI5NTE2LCAxMjk1MjAsIDEyOTUyNCwgMTI5NTI4LCAxMjk1MzIsIDEyOTUzNiwgCisgICAgMTI5NTQwLCAxMjk1NDUsIDEyOTU1MCwgMTI5NTU2LCAxMjk1NjAsIDEyOTU2NCwgMTI5NTY4LCAxMjk1NzIsIDEyOTU3NiwgCisgICAgMTI5NTgwLCAxMjk1ODUsIDEyOTU4OSwgMTI5NTkzLCAxMjk1OTcsIDEyOTYwMSwgMTI5NjA1LCAxMjk2MTEsIDEyOTYxNSwgCisgICAgMTI5NjE5LCAxMjk2MjMsIDEyOTYyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NjMxLCAxMjk2MzUsIAorICAgIDEyOTYzOSwgMTI5NjQ1LCAxMjk2NTEsIDEyOTY1NSwgMTI5NjYwLCAxMjk2NjUsIDEyOTY3MCwgMTI5Njc1LCAxMjk2NzksIAorICAgIDEyOTY4NCwgMTI5Njg5LCAxMjk2OTQsIDEyOTY5OCwgMTI5NzAzLCAxMjk3MDgsIDEyOTcxMywgMTI5NzE3LCAxMjk3MjIsIAorICAgIDEyOTcyNywgMTI5NzMyLCAxMjk3MzcsIDEyOTc0MiwgMTI5NzQ3LCAxMjk3NTIsIDEyOTc1NywgMTI5NzYxLCAxMjk3NjYsIAorICAgIDEyOTc3MSwgMTI5Nzc2LCAxMjk3ODEsIDEyOTc4NiwgMTI5NzkxLCAxMjk3OTYsIDEyOTgwMSwgMTI5ODA2LCAxMjk4MTEsIAorICAgIDEyOTgxNiwgMTI5ODIzLCAxMjk4MjgsIDEyOTgzNSwgMTI5ODQwLCAxMjk4NDUsIDEyOTg1MCwgMTI5ODU1LCAxMjk4NjAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTg2NSwgMTI5ODY5LCAxMjk4NzUsIAorICAgIDEyOTg3OCwgMTI5ODgxLCAxMjk4ODUsIDEyOTg4OSwgMTI5ODkzLCAxMjk4OTcsIDEyOTkwMSwgMTI5OTA1LCAxMjk5MDksIAorICAgIDEyOTkxNSwgMTI5OTIxLCAxMjk5MjcsIDEyOTkzMywgMTI5OTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk5NDUsIDEyOTk1MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5OTU2LCAxMjk5NjAsIDEyOTk2NCwgMTI5OTY4LCAxMjk5NzIsIDEyOTk3NiwgCisgICAgMTI5OTgwLCAxMjk5ODMsIDEyOTk4NywgMTI5OTkxLCAxMjk5OTUsIDEyOTk5OSwgMTMwMDAyLCAxMzAwMDgsIDEzMDAxMywgCisgICAgMTMwMDE5LCAxMzAwMjUsIDEzMDAzMCwgMTMwMDM0LCAxMzAwNDAsIDEzMDA0NCwgMTMwMDQ4LCAxMzAwNTQsIDEzMDA1OCwgCisgICAgMTMwMDYyLCAxMzAwNjYsIDEzMDA3MCwgMTMwMDc0LCAxMzAwNzgsIDEzMDA4MSwgMTMwMDg3LCAxMzAwOTMsIDEzMDA5OSwgCisgICAgMTMwMTA1LCAxMzAxMTIsIDEzMDExOSwgMTMwMTI2LCAxMzAxMzYsIDEzMDE0MywgMTMwMTUwLCAxMzAxNTUsIDEzMDE2MCwgCisgICAgMTMwMTY1LCAxMzAxNzAsIDEzMDE3NywgMTMwMTg0LCAxMzAxOTEsIDEzMDE5OCwgMTMwMjA3LCAxMzAyMTMsIDEzMDIyMCwgCisgICAgMTMwMjI2LCAxMzAyMzMsIDEzMDIzOSwgMTMwMjQ2LCAxMzAyNTEsIDEzMDI1OCwgMTMwMjYyLCAxMzAyNjYsIDEzMDI3MSwgCisgICAgMTMwMjc3LCAxMzAyODMsIDEzMDI5MCwgMTMwMjk3LCAxMzAzMDMsIDEzMDMxMCwgMTMwMzEzLCAxMzAzMTksIDEzMDMyMywgCisgICAgMTMwMzI2LCAxMzAzMzAsIDEzMDMzMywgMTMwMzM2LCAxMzAzNDAsIDEzMDM0NSwgMTMwMzQ5LCAxMzAzNTMsIDEzMDM1OSwgCisgICAgMTMwMzY0LCAxMzAzNzAsIDEzMDM3NCwgMTMwMzc4LCAxMzAzODEsIDEzMDM4NSwgMTMwMzg5LCAxMzAzOTQsIDEzMDM5OCwgCisgICAgMTMwNDAzLCAxMzA0MDcsIDEzMDQxMiwgMTMwNDE2LCAxMzA0MjAsIDEzMDQyNCwgMTMwNDI4LCAxMzA0MzIsIDEzMDQzNiwgCisgICAgMTMwNDQwLCAxMzA0NDQsIDEzMDQ0OSwgMTMwNDU0LCAxMzA0NTksIDEzMDQ2NCwgMTMwNDcwLCAxMzA0NzYsIDEzMDQ4MiwgCisgICAgMTMwNDg4LCAxMzA0OTQsIDAsIDAsIDAsIDAsIDAsIDEzMDQ5OSwgMTMwNTA3LCAxMzA1MTYsIDEzMDUyNCwgMTMwNTMxLCAKKyAgICAxMzA1MzksIDEzMDU0NiwgMTMwNTUzLCAxMzA1NjIsIDEzMDU2OSwgMTMwNTc2LCAxMzA1ODMsIDEzMDU5MSwgMCwgMCwgMCwgCisgICAgMTMwNTk5LCAxMzA2MDQsIDEzMDYxMSwgMTMwNjE3LCAxMzA2MjQsIDEzMDYzMCwgMTMwNjM2LCAxMzA2NDIsIDEzMDY0OCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwNjU0LCAxMzA2NTksIDEzMDY2NiwgMTMwNjcyLCAxMzA2NzksIDEzMDY4NSwgCisgICAgMTMwNjkxLCAxMzA2OTcsIDEzMDcwMywgMTMwNzA5LCAwLCAwLCAxMzA3MTQsIDEzMDcyMCwgMTMwNzI2LCAxMzA3MjksIAorICAgIDEzMDczOCwgMTMwNzQ1LCAxMzA3NTMsIDEzMDc2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTMwNzY3LCAxMzA3NzIsIDEzMDc3NywgMTMwNzgyLCAxMzA3ODksIDEzMDc5NiwgMTMwODAzLCAKKyAgICAxMzA4MTAsIDEzMDgxNSwgMTMwODIwLCAxMzA4MjUsIDEzMDgzMCwgMTMwODM3LCAxMzA4NDIsIDEzMDg0OSwgMTMwODU2LCAKKyAgICAxMzA4NjEsIDEzMDg2NiwgMTMwODcxLCAxMzA4NzgsIDEzMDg4MywgMTMwODg4LCAxMzA4OTUsIDEzMDkwMiwgMTMwOTA3LCAKKyAgICAxMzA5MTIsIDEzMDkxNywgMTMwOTI0LCAxMzA5MzEsIDEzMDkzOCwgMTMwOTQzLCAxMzA5NDgsIDEzMDk1NSwgMTMwOTYyLCAKKyAgICAxMzA5NjksIDEzMDk3NiwgMTMwOTgxLCAxMzA5ODYsIDEzMDk5MSwgMTMwOTk4LCAxMzEwMDMsIDEzMTAwOCwgMTMxMDEzLCAKKyAgICAxMzEwMjAsIDEzMTAyOSwgMTMxMDM2LCAxMzEwNDEsIDEzMTA0NiwgMTMxMDUxLCAxMzEwNTYsIDEzMTA2MSwgMTMxMDY2LCAKKyAgICAxMzEwNzUsIDEzMTA4MiwgMTMxMDg3LCAxMzEwOTQsIDEzMTEwMSwgMTMxMTA2LCAxMzExMTEsIDEzMTExNiwgMTMxMTIzLCAKKyAgICAxMzExMjgsIDEzMTEzNSwgMTMxMTQyLCAxMzExNDcsIDEzMTE1MiwgMTMxMTU3LCAxMzExNjQsIDEzMTE3MSwgMTMxMTc2LCAKKyAgICAxMzExODEsIDEzMTE4OCwgMTMxMTk1LCAxMzEyMDIsIDEzMTIwNywgMTMxMjEyLCAxMzEyMTcsIDEzMTIyMiwgMTMxMjI5LCAKKyAgICAxMzEyMzgsIDEzMTI0NywgMTMxMjUyLCAxMzEyNTksIDEzMTI2OCwgMTMxMjczLCAxMzEyNzgsIDEzMTI4MywgMTMxMjg4LCAKKyAgICAxMzEyOTUsIDEzMTMwMiwgMTMxMzA5LCAxMzEzMTYsIDEzMTMyMSwgMTMxMzI2LCAxMzEzMzEsIDEzMTMzOCwgMTMxMzQ1LCAKKyAgICAxMzEzNTIsIDEzMTM1NywgMTMxMzYyLCAxMzEzNjksIDEzMTM3NCwgMTMxMzgxLCAxMzEzODYsIDEzMTM5MywgMTMxMzk4LCAKKyAgICAxMzE0MDUsIDEzMTQxMiwgMTMxNDE3LCAxMzE0MjIsIDEzMTQyNywgMTMxNDMyLCAxMzE0MzcsIDEzMTQ0MiwgMTMxNDQ3LCAKKyAgICAxMzE0NTIsIDEzMTQ1NywgMTMxNDY0LCAxMzE0NzEsIDEzMTQ3OCwgMTMxNDg1LCAxMzE0OTIsIDEzMTUwMSwgMTMxNTA2LCAKKyAgICAxMzE1MTEsIDEzMTUxOCwgMTMxNTI1LCAxMzE1MzAsIDEzMTUzNywgMTMxNTQ0LCAxMzE1NTEsIDEzMTU1OCwgMTMxNTY1LCAKKyAgICAxMzE1NzIsIDEzMTU3NywgMTMxNTgyLCAxMzE1ODcsIDEzMTU5MiwgMTMxNTk3LCAxMzE2MDYsIDEzMTYxNSwgMTMxNjI0LCAKKyAgICAxMzE2MzMsIDEzMTY0MiwgMTMxNjUxLCAxMzE2NjAsIDEzMTY2OSwgMTMxNjc0LCAxMzE2ODUsIDEzMTY5NiwgMTMxNzA1LCAKKyAgICAxMzE3MTAsIDEzMTcxNSwgMTMxNzIwLCAxMzE3MjUsIDEzMTczNCwgMTMxNzQxLCAxMzE3NDgsIDEzMTc1NSwgMTMxNzYyLCAKKyAgICAxMzE3NjksIDEzMTc3NiwgMTMxNzg1LCAxMzE3OTQsIDEzMTgwNSwgMTMxODE0LCAxMzE4MjUsIDEzMTgzNCwgMTMxODQxLCAKKyAgICAxMzE4NTAsIDEzMTg2MSwgMTMxODcwLCAxMzE4NzksIDEzMTg4OCwgMTMxODk3LCAxMzE5MDQsIDEzMTkxMSwgMTMxOTE4LCAKKyAgICAxMzE5MjcsIDEzMTkzNiwgMTMxOTQ3LCAxMzE5NTYsIDEzMTk2NSwgMTMxOTc2LCAxMzE5ODEsIDEzMTk4NiwgMTMxOTk3LCAKKyAgICAxMzIwMDUsIDEzMjAxNCwgMTMyMDIzLCAxMzIwMzIsIDEzMjA0MywgMTMyMDUyLCAxMzIwNjEsIDEzMjA3MiwgMTMyMDgzLCAKKyAgICAxMzIwOTQsIDEzMjEwNSwgMTMyMTE2LCAxMzIxMjcsIDEzMjEzNCwgMTMyMTQxLCAxMzIxNDgsIDEzMjE1NSwgMTMyMTY2LCAKKyAgICAxMzIxNzUsIDEzMjE4MiwgMTMyMTg5LCAxMzIxOTYsIDEzMjIwNywgMTMyMjE4LCAxMzIyMjksIDEzMjI0MCwgMTMyMjUxLCAKKyAgICAxMzIyNjIsIDEzMjI3MywgMTMyMjg0LCAxMzIyOTEsIDEzMjI5OCwgMTMyMzA3LCAxMzIzMTYsIDEzMjMyMywgMTMyMzMwLCAKKyAgICAxMzIzMzcsIDEzMjM0NiwgMTMyMzU1LCAxMzIzNjQsIDEzMjM3MSwgMTMyMzgwLCAxMzIzODksIDEzMjM5OCwgMTMyNDA1LCAKKyAgICAxMzI0MTIsIDEzMjQxNywgMTMyNDIzLCAxMzI0MzAsIDEzMjQzNywgMTMyNDQ0LCAxMzI0NTEsIDEzMjQ1OCwgMTMyNDY1LCAKKyAgICAxMzI0NzQsIDEzMjQ4MywgMTMyNDkyLCAxMzI1MDEsIDEzMjUwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTMyNTE3LCAxMzI1MjMsIDEzMjUyOCwgMTMyNTMzLCAxMzI1NDAsIDEzMjU0NiwgMTMyNTUyLCAxMzI1NTgsIDEzMjU2NCwgCisgICAgMTMyNTcwLCAxMzI1NzYsIDEzMjU4MiwgMTMyNTg2LCAxMzI1OTAsIDEzMjU5NiwgMTMyNjAyLCAxMzI2MDgsIDEzMjYxMiwgCisgICAgMTMyNjE3LCAxMzI2MjIsIDEzMjYyNiwgMTMyNjMwLCAxMzI2MzMsIDEzMjYzOSwgMTMyNjQ1LCAxMzI2NTEsIDEzMjY1NywgCisgICAgMTMyNjYzLCAxMzI2NjksIDEzMjY3NSwgMTMyNjgxLCAxMzI2ODcsIDEzMjY5NywgMTMyNzA3LCAxMzI3MTMsIDEzMjcxOSwgCisgICAgMTMyNzI5LCAxMzI3MzksIDEzMjc0NSwgMCwgMCwgMTMyNzUxLCAxMzI3NTksIDEzMjc2NCwgMTMyNzY5LCAxMzI3NzUsIAorICAgIDEzMjc4MSwgMTMyNzg3LCAxMzI3OTMsIDEzMjc5OSwgMTMyODA1LCAxMzI4MTIsIDEzMjgxOSwgMTMyODI1LCAxMzI4MzEsIAorICAgIDEzMjgzNywgMTMyODQzLCAxMzI4NDksIDEzMjg1NSwgMTMyODYxLCAxMzI4NjcsIDEzMjg3MiwgMTMyODc4LCAxMzI4ODQsIAorICAgIDEzMjg5MCwgMTMyODk2LCAxMzI5MDIsIDEzMjkxMSwgMTMyOTE3LCAxMzI5MjIsIDEzMjkzMCwgMTMyOTM3LCAxMzI5NDQsIAorICAgIDEzMjk1MywgMTMyOTYyLCAxMzI5NzEsIDEzMjk4MCwgMTMyOTg5LCAxMzI5OTgsIDEzMzAwNywgMTMzMDE2LCAxMzMwMjYsIAorICAgIDEzMzAzNiwgMTMzMDQ0LCAxMzMwNTIsIDEzMzA2MSwgMTMzMDcwLCAxMzMwNzYsIDEzMzA4MiwgMTMzMDg4LCAxMzMwOTQsIAorICAgIDEzMzEwMiwgMTMzMTEwLCAxMzMxMTQsIDEzMzEyMCwgMTMzMTI1LCAxMzMxMzEsIDEzMzEzNywgMTMzMTQzLCAxMzMxNDksIAorICAgIDEzMzE1NSwgMTMzMTY0LCAxMzMxNjksIDEzMzE3NiwgMTMzMTgxLCAxMzMxODYsIDEzMzE5MSwgMTMzMTk3LCAxMzMyMDMsIAorICAgIDEzMzIwOSwgMTMzMjE2LCAxMzMyMjEsIDEzMzIyNiwgMTMzMjMxLCAxMzMyMzYsIDEzMzI0MSwgMTMzMjQ3LCAxMzMyNTMsIAorICAgIDEzMzI1OSwgMTMzMjY1LCAxMzMyNzEsIDEzMzI3NywgMTMzMjgzLCAxMzMyODksIDEzMzI5NCwgMTMzMjk5LCAxMzMzMDQsIAorICAgIDEzMzMwOSwgMTMzMzE0LCAxMzMzMTksIDEzMzMyNCwgMTMzMzI5LCAxMzMzMzUsIDEzMzM0MSwgMTMzMzQ2LCAxMzMzNTEsIAorICAgIDEzMzM1NiwgMTMzMzYxLCAxMzMzNjYsIDEzMzM3MiwgMTMzMzc5LCAxMzMzODMsIDEzMzM4NywgMTMzMzkxLCAxMzMzOTUsIAorICAgIDEzMzM5OSwgMTMzNDAzLCAxMzM0MDcsIDEzMzQxMSwgMTMzNDE5LCAxMzM0MjksIDEzMzQzMywgMTMzNDM3LCAxMzM0NDMsIAorICAgIDEzMzQ0OSwgMTMzNDU1LCAxMzM0NjEsIDEzMzQ2NywgMTMzNDczLCAxMzM0NzksIDEzMzQ4NSwgMTMzNDkxLCAxMzM0OTcsIAorICAgIDEzMzUwMywgMTMzNTA5LCAxMzM1MTUsIDEzMzUyMSwgMTMzNTI1LCAxMzM1MjksIDEzMzUzNiwgMTMzNTQyLCAxMzM1NDgsIAorICAgIDEzMzU1NCwgMTMzNTU5LCAxMzM1NjYsIDEzMzU3MSwgMTMzNTc3LCAxMzM1ODMsIDEzMzU4OSwgMTMzNTk1LCAxMzM2MDAsIAorICAgIDEzMzYwNCwgMTMzNjEwLCAxMzM2MTQsIDEzMzYxOCwgMTMzNjIyLCAxMzM2MjgsIDEzMzYzNCwgMTMzNjM4LCAxMzM2NDQsIAorICAgIDEzMzY1MCwgMTMzNjU2LCAxMzM2NjIsIDEzMzY2OCwgMTMzNjc2LCAxMzM2ODQsIDEzMzY5MCwgMTMzNjk2LCAxMzM3MDIsIAorICAgIDEzMzcwOCwgMTMzNzIwLCAxMzM3MzIsIDEzMzc0NiwgMTMzNzU4LCAxMzM3NzAsIDEzMzc4NCwgMTMzNzk4LCAxMzM4MTIsIAorICAgIDEzMzgxNiwgMTMzODI0LCAxMzM4MzIsIDEzMzgzNywgMTMzODQxLCAxMzM4NDUsIDEzMzg0OSwgMTMzODUzLCAxMzM4NTcsIAorICAgIDEzMzg2MSwgMTMzODY1LCAxMzM4NzEsIDEzMzg3NywgMTMzODgzLCAxMzM4ODksIDEzMzg5NywgMTMzOTA2LCAxMzM5MTMsIAorICAgIDEzMzkyMCwgMTMzOTI4LCAxMzM5MzUsIDEzMzk0NywgMTMzOTU5LCAxMzM5NzEsIDEzMzk4MywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzOTkwLCAxMzM5OTcsIAorICAgIDEzNDAwNCwgMTM0MDExLCAxMzQwMTgsIDEzNDAyNSwgMTM0MDMyLCAxMzQwMzksIDEzNDA0NiwgMTM0MDUzLCAxMzQwNjAsIAorICAgIDEzNDA2NywgMTM0MDc0LCAxMzQwODEsIDEzNDA4OCwgMTM0MDk1LCAxMzQxMDIsIDEzNDEwOSwgMTM0MTE2LCAxMzQxMjMsIAorICAgIDEzNDEzMCwgMTM0MTM3LCAxMzQxNDQsIDEzNDE1MSwgMTM0MTU4LCAxMzQxNjUsIDEzNDE3MiwgMTM0MTc5LCAxMzQxODYsIAorICAgIDEzNDE5MywgMTM0MjAwLCAxMzQyMDcsIDEzNDIxNCwgMTM0MjIxLCAxMzQyMjgsIDEzNDIzNSwgMTM0MjQyLCAxMzQyNDksIAorICAgIDEzNDI1NiwgMTM0MjYzLCAxMzQyNzAsIDEzNDI3NywgMTM0Mjg0LCAxMzQyOTEsIDEzNDI5OCwgMTM0MzA1LCAxMzQzMTIsIAorICAgIDEzNDMxOSwgMTM0MzI2LCAxMzQzMzMsIDEzNDM0MCwgMTM0MzQ3LCAxMzQzNTQsIDEzNDM2MSwgMTM0MzY4LCAxMzQzNzUsIAorICAgIDEzNDM4MiwgMTM0Mzg5LCAxMzQzOTYsIDEzNDQwMywgMTM0NDEwLCAxMzQ0MTcsIDEzNDQyNCwgMTM0NDMxLCAxMzQ0MzgsIAorICAgIDEzNDQ0NSwgMTM0NDUyLCAxMzQ0NTcsIDEzNDQ2MiwgMTM0NDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ0NzEsIDEzNDQ3NiwgMTM0NDgzLCAxMzQ0OTAsIDEzNDQ5NywgMTM0NTA0LCAKKyAgICAxMzQ1MDksIDEzNDUxNCwgMTM0NTIxLCAxMzQ1MjYsIDEzNDUzMSwgMTM0NTM4LCAxMzQ1NDMsIDEzNDU0OCwgMTM0NTUzLCAKKyAgICAxMzQ1NjAsIDEzNDU2OSwgMTM0NTc0LCAxMzQ1NzksIDEzNDU4NCwgMTM0NTg5LCAxMzQ1OTQsIDEzNDU5OSwgMTM0NjA2LCAKKyAgICAxMzQ2MTEsIDEzNDYxNiwgMTM0NjIxLCAxMzQ2MjYsIDEzNDYzMSwgMTM0NjM2LCAxMzQ2NDEsIDEzNDY0NiwgMTM0NjUxLCAKKyAgICAxMzQ2NTYsIDEzNDY2MSwgMTM0NjY2LCAxMzQ2NzIsIDEzNDY3NywgMTM0NjgyLCAxMzQ2ODcsIDEzNDY5MiwgMTM0Njk3LCAKKyAgICAxMzQ3MDIsIDEzNDcwNywgMTM0NzEyLCAxMzQ3MTcsIDEzNDcyNiwgMTM0NzMxLCAxMzQ3NDAsIDEzNDc0NSwgMTM0NzUwLCAKKyAgICAxMzQ3NTUsIDEzNDc2MCwgMTM0NzY1LCAxMzQ3NzAsIDEzNDc3NSwgMTM0Nzg0LCAxMzQ3ODksIDEzNDc5NCwgMTM0Nzk5LCAKKyAgICAxMzQ4MDQsIDEzNDgwOSwgMTM0ODE2LCAxMzQ4MjEsIDEzNDgyOCwgMTM0ODMzLCAxMzQ4MzgsIDEzNDg0MywgMTM0ODQ4LCAKKyAgICAxMzQ4NTMsIDEzNDg1OCwgMTM0ODYzLCAxMzQ4NjgsIDEzNDg3MywgMTM0ODc4LCAxMzQ4ODMsIDEzNDg4OCwgMTM0ODkzLCAKKyAgICAxMzQ4OTgsIDEzNDkwMywgMTM0OTA4LCAxMzQ5MTMsIDEzNDkxOCwgMTM0OTIzLCAxMzQ5MzIsIDEzNDkzNywgMTM0OTQyLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ5NDcsIDEzNDk1NSwgMTM0OTYzLCAxMzQ5NzEsIDEzNDk3OSwgCisgICAgMTM0OTg3LCAxMzQ5OTUsIDEzNTAwNCwgMTM1MDEyLCAxMzUwMjEsIDEzNTAyOSwgMTM1MDM3LCAxMzUwNDUsIDEzNTA1MywgCisgICAgMTM1MDYxLCAxMzUwNjksIDEzNTA3OCwgMTM1MDg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUwOTUsIDEzNTA5OSwgMTM1MTA0LCAxMzUxMDksIDEzNTExNCwgMTM1MTE4LCAKKyAgICAxMzUxMjMsIDEzNTEyOCwgMTM1MTMzLCAxMzUxMzcsIDEzNTE0MiwgMTM1MTQ3LCAxMzUxNTEsIDEzNTE1NiwgMTM1MTYxLCAKKyAgICAxMzUxNjUsIDEzNTE3MCwgMTM1MTc1LCAxMzUxNzksIDEzNTE4MywgMTM1MTg4LCAxMzUxOTIsIDEzNTE5NywgMTM1MjAyLCAKKyAgICAxMzUyMDcsIDEzNTIxMiwgMTM1MjE3LCAxMzUyMjEsIDEzNTIyNiwgMTM1MjMxLCAxMzUyMzYsIDEzNTI0MCwgMTM1MjQ1LCAKKyAgICAxMzUyNTAsIDEzNTI1NSwgMTM1MjU5LCAxMzUyNjQsIDEzNTI2OSwgMTM1MjczLCAxMzUyNzgsIDEzNTI4MywgMTM1Mjg3LCAKKyAgICAxMzUyOTIsIDEzNTI5NywgMTM1MzAxLCAxMzUzMDUsIDEzNTMxMCwgMTM1MzE0LCAxMzUzMTksIDEzNTMyNCwgMTM1MzI5LCAKKyAgICAxMzUzMzQsIDEzNTMzOSwgMTM1MzQzLCAxMzUzNDgsIDEzNTM1MywgMTM1MzU4LCAxMzUzNjIsIDEzNTM2NywgMTM1MzcyLCAKKyAgICAxMzUzNzcsIDEzNTM4MSwgMTM1Mzg2LCAxMzUzOTEsIDEzNTM5NSwgMTM1NDAwLCAxMzU0MDUsIDEzNTQwOSwgMTM1NDE0LCAKKyAgICAxMzU0MTksIDEzNTQyMywgMTM1NDI3LCAxMzU0MzIsIDEzNTQzNiwgMTM1NDQxLCAxMzU0NDYsIDEzNTQ1MSwgMTM1NDU2LCAKKyAgICAxMzU0NjEsIDEzNTQ2NSwgMTM1NDcwLCAxMzU0NzUsIDEzNTQ4MCwgMTM1NDg0LCAxMzU0ODksIDAsIDEzNTQ5NCwgCisgICAgMTM1NDk4LCAxMzU1MDMsIDEzNTUwOCwgMTM1NTEyLCAxMzU1MTcsIDEzNTUyMiwgMTM1NTI2LCAxMzU1MzEsIDEzNTUzNiwgCisgICAgMTM1NTQwLCAxMzU1NDQsIDEzNTU0OSwgMTM1NTUzLCAxMzU1NTgsIDEzNTU2MywgMTM1NTY4LCAxMzU1NzMsIDEzNTU3OCwgCisgICAgMTM1NTgzLCAxMzU1ODksIDEzNTU5NSwgMTM1NjAxLCAxMzU2MDYsIDEzNTYxMiwgMTM1NjE4LCAxMzU2MjQsIDEzNTYyOSwgCisgICAgMTM1NjM1LCAxMzU2NDEsIDEzNTY0NiwgMTM1NjUyLCAxMzU2NTgsIDEzNTY2MywgMTM1NjY5LCAxMzU2NzUsIDEzNTY4MCwgCisgICAgMTM1Njg1LCAxMzU2OTEsIDEzNTY5NiwgMTM1NzAyLCAxMzU3MDgsIDEzNTcxNCwgMTM1NzIwLCAxMzU3MjYsIDEzNTczMSwgCisgICAgMTM1NzM3LCAxMzU3NDMsIDEzNTc0OSwgMTM1NzU0LCAxMzU3NjAsIDEzNTc2NiwgMTM1NzcyLCAxMzU3NzcsIDEzNTc4MywgCisgICAgMTM1Nzg5LCAxMzU3OTQsIDEzNTgwMCwgMTM1ODA2LCAxMzU4MTEsIDEzNTgxNywgMTM1ODIzLCAxMzU4MjgsIDEzNTgzMywgCisgICAgMTM1ODM5LCAxMzU4NDQsIDEzNTg1MCwgMTM1ODU2LCAxMzU4NjIsIDEzNTg2OCwgMTM1ODc0LCAwLCAxMzU4NzgsIAorICAgIDEzNTg4MywgMCwgMCwgMTM1ODg4LCAwLCAwLCAxMzU4OTMsIDEzNTg5OCwgMCwgMCwgMTM1OTAzLCAxMzU5MDgsIDEzNTkxMiwgCisgICAgMTM1OTE3LCAwLCAxMzU5MjIsIDEzNTkyNiwgMTM1OTMxLCAxMzU5MzUsIDEzNTk0MCwgMTM1OTQ1LCAxMzU5NTAsIAorICAgIDEzNTk1NSwgMTM1OTYwLCAxMzU5NjQsIDEzNTk2OSwgMTM1OTc0LCAwLCAxMzU5NzksIDAsIDEzNTk4NCwgMTM1OTg5LCAKKyAgICAxMzU5OTMsIDEzNTk5OCwgMTM2MDAzLCAxMzYwMDcsIDEzNjAxMiwgMCwgMTM2MDE3LCAxMzYwMjIsIDEzNjAyNywgCisgICAgMTM2MDMxLCAxMzYwMzUsIDEzNjA0MCwgMTM2MDQ0LCAxMzYwNDksIDEzNjA1NCwgMTM2MDU5LCAxMzYwNjQsIDEzNjA2OSwgCisgICAgMTM2MDc0LCAxMzYwODAsIDEzNjA4NiwgMTM2MDkyLCAxMzYwOTcsIDEzNjEwMywgMTM2MTA5LCAxMzYxMTUsIDEzNjEyMCwgCisgICAgMTM2MTI2LCAxMzYxMzIsIDEzNjEzNywgMTM2MTQzLCAxMzYxNDksIDEzNjE1NCwgMTM2MTYwLCAxMzYxNjYsIDEzNjE3MSwgCisgICAgMTM2MTc2LCAxMzYxODIsIDEzNjE4NywgMTM2MTkzLCAxMzYxOTksIDEzNjIwNSwgMTM2MjExLCAxMzYyMTcsIDEzNjIyMiwgCisgICAgMTM2MjI4LCAxMzYyMzQsIDEzNjI0MCwgMTM2MjQ1LCAxMzYyNTEsIDEzNjI1NywgMTM2MjYzLCAxMzYyNjgsIDEzNjI3NCwgCisgICAgMTM2MjgwLCAxMzYyODUsIDEzNjI5MSwgMTM2Mjk3LCAxMzYzMDIsIDEzNjMwOCwgMTM2MzE0LCAxMzYzMTksIDEzNjMyNCwgCisgICAgMTM2MzMwLCAxMzYzMzUsIDEzNjM0MSwgMTM2MzQ3LCAxMzYzNTMsIDEzNjM1OSwgMTM2MzY1LCAxMzYzNjksIDAsIAorICAgIDEzNjM3NCwgMTM2Mzc5LCAxMzYzODMsIDEzNjM4OCwgMCwgMCwgMTM2MzkzLCAxMzYzOTgsIDEzNjQwMywgMTM2NDA3LCAKKyAgICAxMzY0MTIsIDEzNjQxNywgMTM2NDIxLCAxMzY0MjYsIDAsIDEzNjQzMSwgMTM2NDM1LCAxMzY0NDAsIDEzNjQ0NCwgCisgICAgMTM2NDQ5LCAxMzY0NTQsIDEzNjQ1OSwgMCwgMTM2NDY0LCAxMzY0NjgsIDEzNjQ3MywgMTM2NDc4LCAxMzY0ODMsIAorICAgIDEzNjQ4NywgMTM2NDkyLCAxMzY0OTcsIDEzNjUwMiwgMTM2NTA2LCAxMzY1MTEsIDEzNjUxNiwgMTM2NTIwLCAxMzY1MjUsIAorICAgIDEzNjUzMCwgMTM2NTM0LCAxMzY1MzksIDEzNjU0NCwgMTM2NTQ4LCAxMzY1NTIsIDEzNjU1NywgMTM2NTYxLCAxMzY1NjYsIAorICAgIDEzNjU3MSwgMTM2NTc2LCAxMzY1ODEsIDEzNjU4NiwgMTM2NTkwLCAwLCAxMzY1OTUsIDEzNjYwMCwgMTM2NjA0LCAKKyAgICAxMzY2MDksIDAsIDEzNjYxNCwgMTM2NjE4LCAxMzY2MjMsIDEzNjYyOCwgMTM2NjMyLCAwLCAxMzY2MzcsIDAsIDAsIDAsIAorICAgIDEzNjY0MSwgMTM2NjQ1LCAxMzY2NTAsIDEzNjY1NCwgMTM2NjU5LCAxMzY2NjQsIDEzNjY2OSwgMCwgMTM2Njc0LCAKKyAgICAxMzY2NzgsIDEzNjY4MywgMTM2Njg4LCAxMzY2OTMsIDEzNjY5NywgMTM2NzAyLCAxMzY3MDcsIDEzNjcxMiwgMTM2NzE2LCAKKyAgICAxMzY3MjEsIDEzNjcyNiwgMTM2NzMwLCAxMzY3MzUsIDEzNjc0MCwgMTM2NzQ0LCAxMzY3NDksIDEzNjc1NCwgMTM2NzU4LCAKKyAgICAxMzY3NjIsIDEzNjc2NywgMTM2NzcxLCAxMzY3NzYsIDEzNjc4MSwgMTM2Nzg2LCAxMzY3OTEsIDEzNjc5NiwgMTM2ODAxLCAKKyAgICAxMzY4MDcsIDEzNjgxMywgMTM2ODE5LCAxMzY4MjQsIDEzNjgzMCwgMTM2ODM2LCAxMzY4NDIsIDEzNjg0NywgMTM2ODUzLCAKKyAgICAxMzY4NTksIDEzNjg2NCwgMTM2ODcwLCAxMzY4NzYsIDEzNjg4MSwgMTM2ODg3LCAxMzY4OTMsIDEzNjg5OCwgMTM2OTAzLCAKKyAgICAxMzY5MDksIDEzNjkxNCwgMTM2OTIwLCAxMzY5MjYsIDEzNjkzMiwgMTM2OTM4LCAxMzY5NDQsIDEzNjk0OSwgMTM2OTU1LCAKKyAgICAxMzY5NjEsIDEzNjk2NywgMTM2OTcyLCAxMzY5NzgsIDEzNjk4NCwgMTM2OTkwLCAxMzY5OTUsIDEzNzAwMSwgMTM3MDA3LCAKKyAgICAxMzcwMTIsIDEzNzAxOCwgMTM3MDI0LCAxMzcwMjksIDEzNzAzNSwgMTM3MDQxLCAxMzcwNDYsIDEzNzA1MSwgMTM3MDU3LCAKKyAgICAxMzcwNjIsIDEzNzA2OCwgMTM3MDc0LCAxMzcwODAsIDEzNzA4NiwgMTM3MDkyLCAxMzcwOTYsIDEzNzEwMSwgMTM3MTA2LCAKKyAgICAxMzcxMTEsIDEzNzExNSwgMTM3MTIwLCAxMzcxMjUsIDEzNzEzMCwgMTM3MTM0LCAxMzcxMzksIDEzNzE0NCwgMTM3MTQ4LCAKKyAgICAxMzcxNTMsIDEzNzE1OCwgMTM3MTYyLCAxMzcxNjcsIDEzNzE3MiwgMTM3MTc2LCAxMzcxODAsIDEzNzE4NSwgMTM3MTg5LCAKKyAgICAxMzcxOTQsIDEzNzE5OSwgMTM3MjA0LCAxMzcyMDksIDEzNzIxNCwgMTM3MjE4LCAxMzcyMjMsIDEzNzIyOCwgMTM3MjMzLCAKKyAgICAxMzcyMzcsIDEzNzI0MiwgMTM3MjQ3LCAxMzcyNTIsIDEzNzI1NiwgMTM3MjYxLCAxMzcyNjYsIDEzNzI3MCwgMTM3Mjc1LCAKKyAgICAxMzcyODAsIDEzNzI4NCwgMTM3Mjg5LCAxMzcyOTQsIDEzNzI5OCwgMTM3MzAyLCAxMzczMDcsIDEzNzMxMSwgMTM3MzE2LCAKKyAgICAxMzczMjEsIDEzNzMyNiwgMTM3MzMxLCAxMzczMzYsIDEzNzM0MSwgMTM3MzQ3LCAxMzczNTMsIDEzNzM1OSwgMTM3MzY0LCAKKyAgICAxMzczNzAsIDEzNzM3NiwgMTM3MzgyLCAxMzczODcsIDEzNzM5MywgMTM3Mzk5LCAxMzc0MDQsIDEzNzQxMCwgMTM3NDE2LCAKKyAgICAxMzc0MjEsIDEzNzQyNywgMTM3NDMzLCAxMzc0MzgsIDEzNzQ0MywgMTM3NDQ5LCAxMzc0NTQsIDEzNzQ2MCwgMTM3NDY2LCAKKyAgICAxMzc0NzIsIDEzNzQ3OCwgMTM3NDg0LCAxMzc0ODksIDEzNzQ5NSwgMTM3NTAxLCAxMzc1MDcsIDEzNzUxMiwgMTM3NTE4LCAKKyAgICAxMzc1MjQsIDEzNzUzMCwgMTM3NTM1LCAxMzc1NDEsIDEzNzU0NywgMTM3NTUyLCAxMzc1NTgsIDEzNzU2NCwgMTM3NTY5LCAKKyAgICAxMzc1NzUsIDEzNzU4MSwgMTM3NTg2LCAxMzc1OTEsIDEzNzU5NywgMTM3NjAyLCAxMzc2MDgsIDEzNzYxNCwgMTM3NjIwLCAKKyAgICAxMzc2MjYsIDEzNzYzMiwgMTM3NjM3LCAxMzc2NDMsIDEzNzY0OSwgMTM3NjU1LCAxMzc2NjAsIDEzNzY2NiwgMTM3NjcyLCAKKyAgICAxMzc2NzgsIDEzNzY4MywgMTM3Njg5LCAxMzc2OTUsIDEzNzcwMCwgMTM3NzA2LCAxMzc3MTIsIDEzNzcxNywgMTM3NzIzLCAKKyAgICAxMzc3MjksIDEzNzczNCwgMTM3NzM5LCAxMzc3NDUsIDEzNzc1MCwgMTM3NzU2LCAxMzc3NjIsIDEzNzc2OCwgMTM3Nzc0LCAKKyAgICAxMzc3ODAsIDEzNzc4NSwgMTM3NzkxLCAxMzc3OTcsIDEzNzgwMywgMTM3ODA4LCAxMzc4MTQsIDEzNzgyMCwgMTM3ODI2LCAKKyAgICAxMzc4MzEsIDEzNzgzNywgMTM3ODQzLCAxMzc4NDgsIDEzNzg1NCwgMTM3ODYwLCAxMzc4NjUsIDEzNzg3MSwgMTM3ODc3LCAKKyAgICAxMzc4ODIsIDEzNzg4NywgMTM3ODkzLCAxMzc4OTgsIDEzNzkwNCwgMTM3OTEwLCAxMzc5MTYsIDEzNzkyMiwgMTM3OTI4LCAKKyAgICAxMzc5MzQsIDEzNzk0MSwgMTM3OTQ4LCAxMzc5NTUsIDEzNzk2MSwgMTM3OTY4LCAxMzc5NzUsIDEzNzk4MiwgMTM3OTg4LCAKKyAgICAxMzc5OTUsIDEzODAwMiwgMTM4MDA4LCAxMzgwMTUsIDEzODAyMiwgMTM4MDI4LCAxMzgwMzUsIDEzODA0MiwgMTM4MDQ4LCAKKyAgICAxMzgwNTQsIDEzODA2MSwgMTM4MDY3LCAxMzgwNzQsIDEzODA4MSwgMTM4MDg4LCAxMzgwOTUsIDEzODEwMiwgMTM4MTA4LCAKKyAgICAxMzgxMTUsIDEzODEyMiwgMTM4MTI5LCAxMzgxMzUsIDEzODE0MiwgMTM4MTQ5LCAxMzgxNTYsIDEzODE2MiwgMTM4MTY5LCAKKyAgICAxMzgxNzYsIDEzODE4MiwgMTM4MTg5LCAxMzgxOTYsIDEzODIwMiwgMTM4MjA5LCAxMzgyMTYsIDEzODIyMiwgMTM4MjI4LCAKKyAgICAxMzgyMzUsIDEzODI0MSwgMTM4MjQ4LCAxMzgyNTUsIDEzODI2MiwgMTM4MjY5LCAxMzgyNzYsIDEzODI4MSwgMTM4Mjg3LCAKKyAgICAxMzgyOTMsIDEzODI5OSwgMTM4MzA0LCAxMzgzMTAsIDEzODMxNiwgMTM4MzIyLCAxMzgzMjcsIDEzODMzMywgMTM4MzM5LCAKKyAgICAxMzgzNDQsIDEzODM1MCwgMTM4MzU2LCAxMzgzNjEsIDEzODM2NywgMTM4MzczLCAxMzgzNzgsIDEzODM4MywgMTM4Mzg5LCAKKyAgICAxMzgzOTQsIDEzODQwMCwgMTM4NDA2LCAxMzg0MTIsIDEzODQxOCwgMTM4NDI0LCAxMzg0MjksIDEzODQzNSwgMTM4NDQxLCAKKyAgICAxMzg0NDcsIDEzODQ1MiwgMTM4NDU4LCAxMzg0NjQsIDEzODQ3MCwgMTM4NDc1LCAxMzg0ODEsIDEzODQ4NywgMTM4NDkyLCAKKyAgICAxMzg0OTgsIDEzODUwNCwgMTM4NTA5LCAxMzg1MTUsIDEzODUyMSwgMTM4NTI2LCAxMzg1MzEsIDEzODUzNywgMTM4NTQyLCAKKyAgICAxMzg1NDgsIDEzODU1NCwgMTM4NTYwLCAxMzg1NjYsIDEzODU3MiwgMTM4NTc4LCAwLCAwLCAxMzg1ODUsIDEzODU5MCwgCisgICAgMTM4NTk1LCAxMzg2MDAsIDEzODYwNSwgMTM4NjEwLCAxMzg2MTUsIDEzODYyMCwgMTM4NjI1LCAxMzg2MzAsIDEzODYzNSwgCisgICAgMTM4NjQwLCAxMzg2NDUsIDEzODY1MCwgMTM4NjU1LCAxMzg2NjAsIDEzODY2NSwgMTM4NjcwLCAxMzg2NzYsIDEzODY4MSwgCisgICAgMTM4Njg2LCAxMzg2OTEsIDEzODY5NiwgMTM4NzAxLCAxMzg3MDYsIDEzODcxMSwgMTM4NzE1LCAxMzg3MjAsIDEzODcyNSwgCisgICAgMTM4NzMwLCAxMzg3MzUsIDEzODc0MCwgMTM4NzQ1LCAxMzg3NTAsIDEzODc1NSwgMTM4NzYwLCAxMzg3NjUsIDEzODc3MCwgCisgICAgMTM4Nzc1LCAxMzg3ODAsIDEzODc4NSwgMTM4NzkwLCAxMzg3OTUsIDEzODgwMCwgMTM4ODA2LCAxMzg4MTEsIDEzODgxNiwgCisgICAgMTM4ODIxLCAxMzg4MjYsIDEzODgzMSwgMTM4ODM2LCAxMzg4NDEsIDEzODg0NywgMTM4ODUyLCAxMzg4NTcsIDEzODg2MiwgCisgICAgMTM4ODY3LCAxMzg4NzIsIDEzODg3NywgMTM4ODgyLCAxMzg4ODcsIDEzODg5MiwgMTM4ODk3LCAxMzg5MDIsIDEzODkwNywgCisgICAgMTM4OTEyLCAxMzg5MTcsIDEzODkyMiwgMTM4OTI3LCAxMzg5MzIsIDEzODkzNywgMTM4OTQyLCAxMzg5NDcsIDEzODk1MiwgCisgICAgMTM4OTU3LCAxMzg5NjIsIDEzODk2OCwgMTM4OTczLCAxMzg5NzgsIDEzODk4MywgMTM4OTg4LCAxMzg5OTMsIDEzODk5OCwgCisgICAgMTM5MDAzLCAxMzkwMDcsIDEzOTAxMiwgMTM5MDE3LCAxMzkwMjIsIDEzOTAyNywgMTM5MDMyLCAxMzkwMzcsIDEzOTA0MiwgCisgICAgMTM5MDQ3LCAxMzkwNTIsIDEzOTA1NywgMTM5MDYyLCAxMzkwNjcsIDEzOTA3MiwgMTM5MDc3LCAxMzkwODIsIDEzOTA4NywgCisgICAgMTM5MDkyLCAxMzkwOTgsIDEzOTEwMywgMTM5MTA4LCAxMzkxMTMsIDEzOTExOCwgMTM5MTIzLCAxMzkxMjgsIDEzOTEzMywgCisgICAgMTM5MTM5LCAxMzkxNDQsIDEzOTE0OSwgMTM5MTU0LCAxMzkxNTksIDEzOTE2NCwgMTM5MTY5LCAxMzkxNzUsIDEzOTE4MSwgCisgICAgMTM5MTg3LCAxMzkxOTMsIDEzOTE5OSwgMTM5MjA1LCAxMzkyMTEsIDEzOTIxNywgMTM5MjIzLCAxMzkyMjksIDEzOTIzNSwgCisgICAgMTM5MjQxLCAxMzkyNDcsIDEzOTI1MywgMTM5MjU5LCAxMzkyNjUsIDEzOTI3MSwgMTM5Mjc4LCAxMzkyODQsIDEzOTI5MCwgCisgICAgMTM5Mjk2LCAxMzkzMDIsIDEzOTMwOCwgMTM5MzE0LCAxMzkzMjAsIDEzOTMyNSwgMTM5MzMxLCAxMzkzMzcsIDEzOTM0MywgCisgICAgMTM5MzQ5LCAxMzkzNTUsIDEzOTM2MSwgMTM5MzY3LCAxMzkzNzMsIDEzOTM3OSwgMTM5Mzg1LCAxMzkzOTEsIDEzOTM5NywgCisgICAgMTM5NDAzLCAxMzk0MDksIDEzOTQxNSwgMTM5NDIxLCAxMzk0MjcsIDEzOTQzNCwgMTM5NDQwLCAxMzk0NDYsIDEzOTQ1MiwgCisgICAgMTM5NDU4LCAxMzk0NjQsIDEzOTQ3MCwgMTM5NDc2LCAxMzk0ODMsIDEzOTQ4OSwgMTM5NDk1LCAxMzk1MDEsIDEzOTUwNywgCisgICAgMTM5NTEzLCAxMzk1MTksIDEzOTUyNSwgMTM5NTMxLCAxMzk1MzcsIDEzOTU0MywgMTM5NTQ5LCAxMzk1NTUsIDEzOTU2MSwgCisgICAgMTM5NTY3LCAxMzk1NzMsIDEzOTU3OSwgMTM5NTg1LCAxMzk1OTEsIDEzOTU5NywgMTM5NjAzLCAxMzk2MDksIDEzOTYxNSwgCisgICAgMTM5NjIxLCAxMzk2MjgsIDEzOTYzNCwgMTM5NjQwLCAxMzk2NDYsIDEzOTY1MiwgMTM5NjU4LCAxMzk2NjQsIDEzOTY3MCwgCisgICAgMTM5Njc1LCAxMzk2ODEsIDEzOTY4NywgMTM5NjkzLCAxMzk2OTksIDEzOTcwNSwgMTM5NzExLCAxMzk3MTcsIDEzOTcyMywgCisgICAgMTM5NzI5LCAxMzk3MzUsIDEzOTc0MSwgMTM5NzQ3LCAxMzk3NTMsIDEzOTc1OSwgMTM5NzY1LCAxMzk3NzEsIDEzOTc3NywgCisgICAgMTM5Nzg0LCAxMzk3OTAsIDEzOTc5NiwgMTM5ODAyLCAxMzk4MDgsIDEzOTgxNCwgMTM5ODIwLCAxMzk4MjYsIDEzOTgzMywgCisgICAgMTM5ODM5LCAxMzk4NDUsIDEzOTg1MSwgMTM5ODU3LCAxMzk4NjMsIDEzOTg2OSwgMTM5ODc2LCAxMzk4ODMsIDEzOTg5MCwgCisgICAgMTM5ODk3LCAxMzk5MDQsIDEzOTkxMSwgMTM5OTE4LCAxMzk5MjUsIDEzOTkzMiwgMTM5OTM5LCAxMzk5NDYsIDEzOTk1MywgCisgICAgMTM5OTYwLCAxMzk5NjcsIDEzOTk3NCwgMTM5OTgxLCAxMzk5ODgsIDEzOTk5NiwgMTQwMDAzLCAxNDAwMTAsIDE0MDAxNywgCisgICAgMTQwMDI0LCAxNDAwMzEsIDE0MDAzOCwgMTQwMDQ1LCAxNDAwNTEsIDE0MDA1OCwgMTQwMDY1LCAxNDAwNzIsIDE0MDA3OSwgCisgICAgMTQwMDg2LCAxNDAwOTMsIDE0MDEwMCwgMTQwMTA3LCAxNDAxMTQsIDE0MDEyMSwgMTQwMTI4LCAxNDAxMzUsIDE0MDE0MiwgCisgICAgMTQwMTQ5LCAxNDAxNTYsIDE0MDE2MywgMTQwMTcwLCAxNDAxNzgsIDE0MDE4NSwgMTQwMTkyLCAxNDAxOTksIDE0MDIwNiwgCisgICAgMTQwMjEzLCAxNDAyMjAsIDE0MDIyNywgMTQwMjM1LCAxNDAyNDIsIDE0MDI0OSwgMTQwMjU2LCAxNDAyNjMsIDE0MDI3MCwgCisgICAgMTQwMjc3LCAxNDAyODIsIDAsIDAsIDE0MDI4NywgMTQwMjkyLCAxNDAyOTYsIDE0MDMwMCwgMTQwMzA0LCAxNDAzMDgsIAorICAgIDE0MDMxMiwgMTQwMzE2LCAxNDAzMjEsIDE0MDMyNSwgMTQwMzMwLCAxNDAzMzUsIDE0MDMzOSwgMTQwMzQzLCAxNDAzNDcsIAorICAgIDE0MDM1MSwgMTQwMzU1LCAxNDAzNTksIDE0MDM2NCwgMTQwMzY4LCAxNDAzNzMsIDE0MDM3OCwgMTQwMzgyLCAxNDAzODYsIAorICAgIDE0MDM5MCwgMTQwMzk0LCAxNDAzOTgsIDE0MDQwMiwgMTQwNDA3LCAxNDA0MTEsIDE0MDQxNiwgMTQwNDIyLCAxNDA0MjcsIAorICAgIDE0MDQzMiwgMTQwNDM3LCAxNDA0NDIsIDE0MDQ0NywgMTQwNDUyLCAxNDA0NTgsIDE0MDQ2MywgMTQwNDY5LCAxNDA0NzUsIAorICAgIDE0MDQ4MCwgMTQwNDg1LCAxNDA0OTAsIDE0MDQ5NSwgMTQwNTAwLCAxNDA1MDUsIDE0MDUxMSwgMTQwNTE2LCAxNDA1MjIsIAorICAgIDE0MDUyNiwgMTQwNTMxLCAxNDA1MzYsIDE0MDU0MSwgMTQwNTQ2LCAxNDA1NTEsIDE0MDU1NiwgMTQwNTYyLCAxNDA1NzAsIAorICAgIDE0MDU3NywgMTQwNTgyLCAxNDA1ODcsIDE0MDU5NCwgMTQwNjAwLCAxNDA2MDUsIDE0MDYxMSwgMTQwNjE3LCAxNDA2MjUsIAorICAgIDE0MDYzMSwgMTQwNjM4LCAxNDA2NDYsIDE0MDY1MiwgMTQwNjYxLCAxNDA2NzAsIDE0MDY3OCwgMTQwNjg2LCAxNDA2OTIsIAorICAgIDE0MDY5OSwgMTQwNzA3LCAxNDA3MTUsIDE0MDcyMSwgMTQwNzI4LCAxNDA3MzcsIDE0MDc0NiwgMTQwNzUzLCAxNDA3NjQsIAorICAgIDE0MDc3NCwgMTQwNzg0LCAxNDA3OTQsIDE0MDgwNCwgMTQwODExLCAxNDA4MTgsIDE0MDgyNSwgMTQwODMyLCAxNDA4NDEsIAorICAgIDE0MDg1MCwgMTQwODYxLCAxNDA4NzIsIDE0MDg4MSwgMTQwODkwLCAxNDA5MDEsIDE0MDkxMCwgMTQwOTE5LCAxNDA5MzAsIAorICAgIDE0MDkzOSwgMTQwOTQ4LCAxNDA5NTYsIDE0MDk2NCwgMTQwOTc1LCAxNDA5ODYsIDE0MDk5NCwgMTQxMDAzLCAxNDEwMTIsIAorICAgIDE0MTAxOSwgMTQxMDMwLCAxNDEwNDEsIDE0MTA1MCwgMTQxMDU5LCAxNDEwNjYsIDE0MTA3NSwgMTQxMDg0LCAxNDEwOTMsIAorICAgIDE0MTEwNCwgMTQxMTEzLCAxNDExMjMsIDE0MTEzMiwgMTQxMTQxLCAxNDExNTIsIDE0MTE2NSwgMTQxMTgwLCAxNDExOTEsIAorICAgIDE0MTIwNCwgMTQxMjE2LCAxNDEyMjUsIDE0MTIzNiwgMTQxMjQ3LCAxNDEyNTYsIDE0MTI2NywgMTQxMjgxLCAxNDEyOTYsIAorICAgIDE0MTI5OSwgMTQxMzA4LCAxNDEzMTMsIDE0MTMxOSwgMTQxMzI3LCAxNDEzMzMsIDE0MTMzOSwgMTQxMzQ4LCAxNDEzNTUsIAorICAgIDE0MTM2NSwgMTQxMzc3LCAxNDEzODQsIDE0MTM4NywgMTQxMzkzLCAxNDE0MDAsIDE0MTQwNiwgMTQxNDExLCAxNDE0MTQsIAorICAgIDE0MTQxOSwgMTQxNDIyLCAxNDE0MjksIDE0MTQzNSwgMTQxNDQzLCAxNDE0NTAsIDE0MTQ1NywgMTQxNDYzLCAxNDE0NjgsIAorICAgIDE0MTQ3MSwgMTQxNDc0LCAxNDE0NzcsIDE0MTQ4MywgMTQxNDkwLCAxNDE0OTYsIDE0MTUwMSwgMTQxNTA4LCAxNDE1MTEsIAorICAgIDE0MTUxNiwgMTQxNTIzLCAxNDE1MjksIDE0MTUzNywgMTQxNTQ0LCAxNDE1NTQsIDE0MTU2MywgMTQxNTY2LCAxNDE1NzIsIAorICAgIDE0MTU3OSwgMTQxNTg2LCAxNDE1OTMsIDE0MTU5OCwgMTQxNjA2LCAxNDE2MTQsIDE0MTYyMywgMTQxNjI5LCAxNDE2MzgsIAorICAgIDE0MTY0NywgMTQxNjU2LCAxNDE2NjIsIDE0MTY3MSwgMTQxNjc4LCAxNDE2ODUsIDE0MTY5MiwgMTQxNzAwLCAxNDE3MDYsIAorICAgIDE0MTcxNCwgMTQxNzIwLCAxNDE3MjcsIDE0MTczNCwgMTQxNzQyLCAxNDE3NTMsIDE0MTc2MywgMTQxNzY5LCAxNDE3NzYsIAorICAgIDE0MTc4MywgMTQxNzkwLCAxNDE3OTYsIDE0MTgwMywgMTQxODEwLCAxNDE4MTUsIDE0MTgyMiwgMTQxODMwLCAxNDE4MzksIAorICAgIDE0MTg0NSwgMTQxODU3LCAxNDE4NjgsIDE0MTg3NCwgMTQxODgyLCAxNDE4ODgsIDE0MTg5NSwgMTQxOTAyLCAxNDE5MDksIAorICAgIDE0MTkxNSwgMTQxOTIyLCAxNDE5MzEsIDE0MTkzNywgMTQxOTQzLCAxNDE5NTAsIDE0MTk1NywgMTQxOTY1LCAxNDE5NzUsIAorICAgIDE0MTk4NSwgMTQxOTk1LCAxNDIwMDUsIDE0MjAxMywgMTQyMDIxLCAxNDIwMzEsIDE0MjAzOSwgMTQyMDQ0LCAxNDIwNDksIAorICAgIDE0MjA1NCwgMTQyMDYwLCAxNDIwNjcsIDE0MjA3NCwgMTQyMDgwLCAxNDIwODYsIDE0MjA5MSwgMTQyMDk4LCAxNDIxMDYsIAorICAgIDE0MjExNiwgMTQyMTI0LCAxNDIxMzIsIDE0MjE0MiwgMTQyMTUyLCAxNDIxNjAsIDE0MjE3MCwgMTQyMTgwLCAxNDIxOTIsIAorICAgIDE0MjIwNCwgMTQyMjE2LCAxNDIyMjYsIDE0MjIzMiwgMTQyMjM4LCAxNDIyNDUsIDE0MjI1NCwgMTQyMjYzLCAxNDIyNzIsIAorICAgIDE0MjI4MSwgMTQyMjkxLCAxNDIzMDAsIDE0MjMwOSwgMTQyMzE4LCAxNDIzMjMsIDE0MjMyOSwgMTQyMzM4LCAxNDIzNDgsIAorICAgIDE0MjM1NywgMTQyMzYzLCAxNDIzNjksIDE0MjM3NiwgMTQyMzgzLCAxNDIzOTAsIDE0MjM5NiwgMTQyNDAzLCAxNDI0MTAsIAorICAgIDE0MjQxNywgMTQyNDIzLCAxNDI0MjcsIDE0MjQzMiwgMTQyNDM5LCAxNDI0NDYsIDE0MjQ1MywgMTQyNDU4LCAxNDI0NjYsIAorICAgIDE0MjQ3NCwgMTQyNDgzLCAxNDI0OTEsIDE0MjQ5OCwgMTQyNTA2LCAxNDI1MTUsIDE0MjUyNSwgMTQyNTI4LCAxNDI1MzIsIAorICAgIDE0MjUzNywgMTQyNTQyLCAxNDI1NDcsIDE0MjU1MiwgMTQyNTU3LCAxNDI1NjIsIDE0MjU2NywgMTQyNTcyLCAxNDI1NzcsIAorICAgIDE0MjU4MiwgMTQyNTg3LCAxNDI1OTIsIDE0MjU5NywgMTQyNjAyLCAxNDI2MDcsIDE0MjYxMiwgMTQyNjE3LCAxNDI2MjQsIAorICAgIDE0MjYzMCwgMTQyNjM3LCAxNDI2NDMsIDE0MjY0OCwgMTQyNjU1LCAxNDI2NjEsIDE0MjY2OCwgMTQyNjc0LCAxNDI2NzksIAorICAgIDE0MjY4NiwgMTQyNjkzLCAxNDI3MDAsIDE0MjcwNiwgMTQyNzEyLCAxNDI3MjEsIDE0MjczMCwgMTQyNzQxLCAxNDI3NDgsIAorICAgIDE0Mjc1NSwgMTQyNzY0LCAxNDI3NzMsIDE0Mjc4MiwgMTQyNzkxLCAxNDI4MDAsIDE0MjgwNiwgMTQyODE0LCAxNDI4MjAsIAorICAgIDE0MjgzMCwgMTQyODM1LCAxNDI4NDQsIDE0Mjg1MywgMTQyODYwLCAxNDI4NzEsIDE0Mjg3OCwgMTQyODg1LCAxNDI4OTIsIAorICAgIDE0Mjg5OSwgMTQyOTA2LCAxNDI5MTMsIDE0MjkyMCwgMTQyOTI3LCAxNDI5MzQsIDE0Mjk0MSwgMTQyOTQ3LCAxNDI5NTMsIAorICAgIDE0Mjk1OSwgMTQyOTY2LCAxNDI5NzMsIDE0Mjk4MCwgMTQyOTg3LCAxNDI5OTQsIDE0MzAwMSwgMTQzMDA4LCAxNDMwMTUsIAorICAgIDE0MzAyMiwgMTQzMDI5LCAxNDMwMzYsIDE0MzA0MywgMTQzMDQ4LCAxNDMwNTcsIDE0MzA2NiwgMTQzMDc1LCAxNDMwODIsIAorICAgIDE0MzA4OSwgMTQzMDk2LCAxNDMxMDMsIDE0MzExMCwgMTQzMTE3LCAxNDMxMjQsIDE0MzEzMSwgMTQzMTQwLCAxNDMxNDksIAorICAgIDE0MzE1OCwgMTQzMTY3LCAxNDMxNzYsIDE0MzE4NSwgMTQzMTk0LCAxNDMyMDMsIDE0MzIxMiwgMTQzMjIxLCAxNDMyMzAsIAorICAgIDE0MzIzOSwgMTQzMjQ4LCAxNDMyNTQsIDE0MzI2MiwgMTQzMjY4LCAxNDMyNzgsIDE0MzI4MywgMTQzMjkyLCAxNDMzMDEsIAorICAgIDE0MzMxMCwgMTQzMzIxLCAxNDMzMjYsIDE0MzMzMywgMTQzMzQwLCAxNDMzNDcsIDE0MzM1MiwgMTQzMzU4LCAxNDMzNjQsIAorICAgIDE0MzM3MCwgMTQzMzc3LCAxNDMzODQsIDE0MzM5MSwgMTQzMzk4LCAxNDM0MDUsIDE0MzQxMiwgMTQzNDE5LCAxNDM0MjYsIAorICAgIDE0MzQzMywgMTQzNDQwLCAxNDM0NDcsIDE0MzQ1NCwgMTQzNDU5LCAxNDM0NjgsIDE0MzQ3NywgMTQzNDg2LCAxNDM0OTUsIAorICAgIDE0MzUwNCwgMTQzNTEzLCAxNDM1MjIsIDE0MzUzMSwgMTQzNTQyLCAxNDM1NTMsIDE0MzU2MCwgMTQzNTY3LCAxNDM1NzQsIAorICAgIDE0MzU4MSwgMTQzNTg4LCAxNDM1OTUsIDE0MzYwMywgMTQzNjEzLCAxNDM2MjMsIDE0MzYzMywgMTQzNjQ0LCAxNDM2NTUsIAorICAgIDE0MzY2NiwgMTQzNjc1LCAxNDM2ODQsIDE0MzY5MywgMTQzNjk4LCAxNDM3MDMsIDE0MzcwOCwgMTQzNzEzLCAxNDM3MjQsIAorICAgIDE0MzczNSwgMTQzNzQ2LCAxNDM3NTcsIDE0Mzc2OCwgMTQzNzc4LCAxNDM3ODksIDE0Mzc5OCwgMTQzODA3LCAxNDM4MTYsIAorICAgIDE0MzgyNSwgMTQzODM0LCAxNDM4NDIsIDE0Mzg1MSwgMTQzODYyLCAxNDM4NzMsIDE0Mzg4NCwgMTQzODk1LCAxNDM5MDYsIAorICAgIDE0MzkxOCwgMTQzOTMxLCAxNDM5NDMsIDE0Mzk1NiwgMTQzOTY4LCAxNDM5ODEsIDE0Mzk5MywgMTQ0MDA2LCAxNDQwMTcsIAorICAgIDE0NDAyOCwgMTQ0MDM3LCAxNDQwNDUsIDE0NDA1NCwgMTQ0MDY1LCAxNDQwNzYsIDE0NDA4OCwgMTQ0MTAxLCAxNDQxMTUsIAorICAgIDE0NDEzMCwgMTQ0MTQyLCAxNDQxNTUsIDE0NDE2NywgMTQ0MTgwLCAxNDQxOTEsIDE0NDIwMiwgMTQ0MjExLCAxNDQyMTksIAorICAgIDE0NDIyOCwgMTQ0MjM1LCAxNDQyNDIsIDE0NDI0OSwgMTQ0MjU2LCAxNDQyNjMsIDE0NDI3MCwgMTQ0Mjc3LCAxNDQyODQsIAorICAgIDE0NDI5MSwgMTQ0Mjk4LCAxNDQzMDMsIDE0NDMwOCwgMTQ0MzEzLCAxNDQzMjAsIDE0NDMzMCwgMTQ0MzQxLCAxNDQzNTEsIAorICAgIDE0NDM2MiwgMTQ0Mzc2LCAxNDQzOTEsIDE0NDQwNiwgMTQ0NDIwLCAxNDQ0MzUsIDE0NDQ1MCwgMTQ0NDYxLCAxNDQ0NzIsIAorICAgIDE0NDQ4NSwgMTQ0NDk4LCAxNDQ1MDcsIDE0NDUxNiwgMTQ0NTI5LCAxNDQ1NDIsIDE0NDU0OSwgMTQ0NTU2LCAxNDQ1NjEsIAorICAgIDE0NDU2NiwgMTQ0NTcxLCAxNDQ1NzYsIDE0NDU4MSwgMTQ0NTg4LCAxNDQ1OTcsIDE0NDYwMiwgMTQ0NjA1LCAxNDQ2MTAsIAorICAgIDE0NDYxNywgMTQ0NjI0LCAxNDQ2MzEsIDE0NDYzOCwgMTQ0NjQ1LCAxNDQ2NTIsIDE0NDY2NSwgMTQ0Njc5LCAxNDQ2OTQsIAorICAgIDE0NDcwMSwgMTQ0NzA4LCAxNDQ3MTUsIDE0NDcyNCwgMTQ0NzMyLCAxNDQ3NDAsIDE0NDc0OSwgMTQ0NzU0LCAxNDQ3NTksIAorICAgIDE0NDc2NCwgMTQ0NzY5LCAxNDQ3NzQsIDE0NDc3OSwgMTQ0Nzg2LCAxNDQ3OTMsIDE0NDc5OSwgMTQ0ODA2LCAxNDQ4MTIsIAorICAgIDE0NDgxOSwgMTQ0ODI0LCAxNDQ4MjksIDE0NDgzNCwgMTQ0ODM5LCAxNDQ4NDQsIDE0NDg1MSwgMTQ0ODU4LCAxNDQ4NjMsIAorICAgIDE0NDg3MCwgMTQ0ODc3LCAxNDQ4ODIsIDE0NDg4NywgMTQ0ODkyLCAxNDQ4OTcsIDE0NDkwMiwgMTQ0OTA3LCAxNDQ5MTQsIAorICAgIDE0NDkyMSwgMTQ0OTI4LCAxNDQ5MzEsIDE0NDkzNiwgMTQ0OTQxLCAxNDQ5NDYsIDE0NDk1MSwgMTQ0OTU4LCAxNDQ5NjUsIAorICAgIDE0NDk3MywgMTQ0OTgxLCAxNDQ5ODYsIDE0NDk5MSwgMTQ0OTk4LCAxNDUwMDUsIDE0NTAxMiwgMTQ1MDE3LCAxNDUwMjQsIAorICAgIDE0NTAzMSwgMTQ1MDM2LCAxNDUwNDMsIDE0NTA1MCwgMTQ1MDU2LCAxNDUwNjIsIDE0NTA2OCwgMTQ1MDc0LCAxNDUwODIsIAorICAgIDE0NTA5MCwgMTQ1MDk2LCAxNDUxMDQsIDE0NTExMiwgMTQ1MTE3LCAxNDUxMjQsIDE0NTEzMSwgMTQ1MTM2LCAxNDUxNDMsIAorICAgIDE0NTE1MCwgMTQ1MTU3LCAxNDUxNjUsIDE0NTE3MywgMTQ1MTc4LCAxNDUxODUsIDE0NTE5MiwgMTQ1MjAxLCAxNDUyMDgsIAorICAgIDE0NTIxNywgMTQ1MjI4LCAxNDUyMzcsIDE0NTI0NiwgMTQ1MjU1LCAxNDUyNjQsIDE0NTI2NywgMTQ1MjcyLCAxNDUyNzksIAorICAgIDE0NTI4OCwgMTQ1Mjk1LCAxNDUzMDQsIDE0NTMxMSwgMTQ1MzE2LCAxNDUzMjEsIDE0NTMyNCwgMTQ1MzI3LCAxNDUzMzAsIAorICAgIDE0NTMzNywgMTQ1MzQ0LCAxNDUzNTMsIDE0NTM2MiwgMTQ1MzcxLCAxNDUzNzgsIDE0NTM4NSwgMTQ1MzkwLCAxNDU0MDMsIAorICAgIDE0NTQwOCwgMTQ1NDEzLCAxNDU0MTgsIDE0NTQyMywgMTQ1NDI4LCAxNDU0MzMsIDE0NTQzOCwgMTQ1NDQzLCAxNDU0NDYsIAorICAgIDE0NTQ1MSwgMTQ1NDU2LCAxNDU0NjEsIDE0NTQ2NiwgMTQ1NDcxLCAxNDU0NzgsIDE0NTQ4MywgMTQ1NDkwLCAxNDU0OTMsIAorICAgIDE0NTQ5OCwgMTQ1NTAxLCAxNDU1MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDE0NTUwNywgMTQ1NTEyLCAxNDU1MTcsIDE0NTUyMiwgMTQ1NTI3LCAwLCAxNDU1MzIsIDE0NTUzNywgMTQ1NTQyLCAKKyAgICAxNDU1NDcsIDE0NTU1MiwgMTQ1NTU3LCAxNDU1NjIsIDE0NTU2NywgMTQ1NTcyLCAxNDU1NzcsIDE0NTU4MiwgMTQ1NTg3LCAKKyAgICAxNDU1OTIsIDE0NTU5NywgMTQ1NjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDU2MDcsIDE0NTYxNCwgMTQ1NjIwLCAKKyAgICAxNDU2MjcsIDE0NTYzNCwgMTQ1NjQxLCAxNDU2NDgsIDE0NTY1NSwgMTQ1NjYyLCAxNDU2NjksIDE0NTY3NiwgMTQ1NjgzLCAKKyAgICAxNDU2OTAsIDE0NTY5NywgMTQ1NzA0LCAxNDU3MTEsIDE0NTcxOCwgMTQ1NzI1LCAxNDU3MzIsIDE0NTczOSwgMTQ1NzQ2LCAKKyAgICAxNDU3NTMsIDE0NTc2MCwgMTQ1NzY3LCAxNDU3NzQsIDE0NTc4MSwgMTQ1Nzg4LCAxNDU3OTUsIDE0NTgwMiwgMTQ1ODA5LCAKKyAgICAxNDU4MTYsIDE0NTgyMywgMTQ1ODMwLCAxNDU4MzcsIDE0NTg0NCwgMTQ1ODUwLCAxNDU4NTYsIDE0NTg2MiwgMTQ1ODY5LCAKKyAgICAxNDU4NzUsIDE0NTg4MiwgMTQ1ODg4LCAxNDU4OTUsIDE0NTkwMiwgMTQ1OTA5LCAxNDU5MTYsIDE0NTkyMywgMTQ1OTMwLCAKKyAgICAxNDU5MzcsIDE0NTk0NCwgMTQ1OTUxLCAxNDU5NTgsIDE0NTk2NSwgMTQ1OTcyLCAxNDU5NzksIDE0NTk4NiwgMTQ1OTkzLCAKKyAgICAxNDYwMDAsIDE0NjAwNywgMTQ2MDE0LCAxNDYwMjEsIDE0NjAyOCwgMTQ2MDM2LCAxNDYwNDMsIDE0NjA1MCwgMTQ2MDU3LCAKKyAgICAxNDYwNjQsIDE0NjA3MSwgMTQ2MDc4LCAxNDYwODUsIDE0NjA5MiwgMTQ2MDk5LCAxNDYxMDYsIDE0NjExMywgMTQ2MTIwLCAKKyAgICAxNDYxMjYsIDE0NjEzMywgMTQ2MTQwLCAxNDYxNDcsIDE0NjE1NCwgMTQ2MTYxLCAxNDYxNjgsIDE0NjE3NSwgMTQ2MTgzLCAKKyAgICAxNDYxOTAsIDE0NjE5NiwgMTQ2MjAzLCAxNDYyMTAsIDE0NjIxNywgMTQ2MjI0LCAxNDYyMzEsIDE0NjIzOCwgMTQ2MjQ1LCAKKyAgICAxNDYyNTIsIDE0NjI1OSwgMTQ2MjY2LCAxNDYyNzMsIDE0NjI4MCwgMTQ2Mjg3LCAxNDYyOTQsIDE0NjMwMSwgMTQ2MzA4LCAKKyAgICAxNDYzMTUsIDE0NjMyMiwgMTQ2MzI5LCAxNDYzMzYsIDE0NjM0MiwgMTQ2MzQ5LCAxNDYzNTYsIDE0NjM2MywgMTQ2MzcwLCAKKyAgICAxNDYzNzcsIDE0NjM4NCwgMTQ2MzkxLCAxNDYzOTgsIDE0NjQwNSwgMTQ2NDEyLCAxNDY0MTksIDE0NjQyNiwgMTQ2NDMzLCAKKyAgICAxNDY0NDAsIDE0NjQ0NywgMTQ2NDU0LCAxNDY0NjEsIDE0NjQ2OCwgMTQ2NDc1LCAxNDY0ODIsIDE0NjQ4OSwgMTQ2NDk2LCAKKyAgICAxNDY1MDQsIDE0NjUxMiwgMTQ2NTIwLCAxNDY1MjcsIDE0NjUzNCwgMTQ2NTQxLCAxNDY1NDgsIDE0NjU1NSwgMTQ2NTYyLCAKKyAgICAxNDY1NjksIDE0NjU3NiwgMTQ2NTgzLCAxNDY1OTAsIDE0NjU5NiwgMTQ2NjAzLCAxNDY2MTAsIDE0NjYxNywgMTQ2NjI0LCAKKyAgICAxNDY2MzEsIDE0NjYzOCwgMTQ2NjQ1LCAxNDY2NTIsIDE0NjY1OSwgMTQ2NjY2LCAxNDY2NzMsIDE0NjY4MCwgMTQ2Njg3LCAKKyAgICAxNDY2OTQsIDE0NjcwMiwgMTQ2NzEwLCAxNDY3MTgsIDE0NjcyNSwgMTQ2NzMyLCAxNDY3MzksIDE0Njc0NiwgMTQ2NzUzLCAKKyAgICAxNDY3NjAsIDE0Njc2NywgMTQ2Nzc0LCAxNDY3ODEsIDE0Njc4OCwgMTQ2Nzk1LCAxNDY4MDIsIDE0NjgwOSwgMTQ2ODE2LCAKKyAgICAxNDY4MjMsIDE0NjgzMCwgMTQ2ODM3LCAxNDY4NDQsIDE0Njg1MSwgMTQ2ODU4LCAxNDY4NjUsIDE0Njg3MiwgMTQ2ODc5LCAKKyAgICAxNDY4ODYsIDE0Njg5MywgMTQ2OTAwLCAxNDY5MDcsIDE0NjkxNCwgMTQ2OTIxLCAxNDY5MjgsIDE0NjkzNSwgMTQ2OTQyLCAKKyAgICAxNDY5NDksIDE0Njk1NiwgMTQ2OTYzLCAxNDY5NzAsIDE0Njk3NywgMCwgMCwgMTQ2OTg0LCAxNDY5ODgsIDE0Njk5MiwgCisgICAgMTQ2OTk2LCAxNDcwMDAsIDE0NzAwNCwgMTQ3MDA4LCAxNDcwMTMsIDE0NzAxNywgMTQ3MDIyLCAxNDcwMjgsIDE0NzAzNCwgCisgICAgMTQ3MDQwLCAxNDcwNDYsIDE0NzA1NCwgMTQ3MDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNDcwNjgsIDE0NzA3MiwgMTQ3MDc2LCAxNDcwODAsIDAsIDE0NzA4NCwgMTQ3MDg4LCAxNDcwOTIsIAorICAgIDE0NzA5NiwgMTQ3MTAwLCAxNDcxMDQsIDE0NzEwOCwgMTQ3MTEyLCAxNDcxMTYsIDE0NzEyMCwgMTQ3MTI0LCAxNDcxMjgsIAorICAgIDE0NzEzMiwgMTQ3MTM2LCAxNDcxNDAsIDE0NzE0NCwgMTQ3MTQ4LCAxNDcxNTIsIDE0NzE1NiwgMTQ3MTYwLCAxNDcxNjQsIAorICAgIDE0NzE2OCwgMTQ3MTcyLCAxNDcxNzYsIDE0NzE4MiwgMTQ3MTg4LCAxNDcxOTQsIDAsIDE0NzIwMCwgMTQ3MjA1LCAwLCAKKyAgICAxNDcyMTAsIDAsIDAsIDE0NzIxNSwgMCwgMTQ3MjIwLCAxNDcyMjUsIDE0NzIzMCwgMTQ3MjM1LCAxNDcyNDAsIDE0NzI0NSwgCisgICAgMTQ3MjUwLCAxNDcyNTUsIDE0NzI2MCwgMTQ3MjY1LCAwLCAxNDcyNzAsIDE0NzI3NSwgMTQ3MjgwLCAxNDcyODUsIDAsIAorICAgIDE0NzI5MCwgMCwgMTQ3Mjk1LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDczMDAsIDAsIDAsIDAsIDAsIDE0NzMwNiwgMCwgCisgICAgMTQ3MzEyLCAwLCAxNDczMTgsIDAsIDE0NzMyNCwgMTQ3MzMwLCAxNDczMzYsIDAsIDE0NzM0MiwgMTQ3MzQ4LCAwLCAKKyAgICAxNDczNTQsIDAsIDAsIDE0NzM2MCwgMCwgMTQ3MzY2LCAwLCAxNDczNzIsIDAsIDE0NzM3OCwgMCwgMTQ3Mzg2LCAwLCAKKyAgICAxNDczOTQsIDE0NzQwMCwgMCwgMTQ3NDA2LCAwLCAwLCAxNDc0MTIsIDE0NzQxOCwgMTQ3NDI0LCAxNDc0MzAsIDAsIAorICAgIDE0NzQzNiwgMTQ3NDQyLCAxNDc0NDgsIDE0NzQ1NCwgMTQ3NDYwLCAxNDc0NjYsIDE0NzQ3MiwgMCwgMTQ3NDc4LCAKKyAgICAxNDc0ODQsIDE0NzQ5MCwgMTQ3NDk2LCAwLCAxNDc1MDIsIDE0NzUwOCwgMTQ3NTE0LCAxNDc1MjAsIDAsIDE0NzUyOCwgMCwgCisgICAgMTQ3NTM2LCAxNDc1NDIsIDE0NzU0OCwgMTQ3NTU0LCAxNDc1NjAsIDE0NzU2NiwgMTQ3NTcyLCAxNDc1NzgsIDE0NzU4NCwgCisgICAgMTQ3NTkwLCAwLCAxNDc1OTYsIDE0NzYwMiwgMTQ3NjA4LCAxNDc2MTQsIDE0NzYyMCwgMTQ3NjI2LCAxNDc2MzIsIAorICAgIDE0NzYzOCwgMTQ3NjQ0LCAxNDc2NTAsIDE0NzY1NiwgMTQ3NjYyLCAxNDc2NjgsIDE0NzY3NCwgMTQ3NjgwLCAxNDc2ODYsIAorICAgIDE0NzY5MiwgMCwgMCwgMCwgMCwgMCwgMTQ3Njk4LCAxNDc3MDMsIDE0NzcwOCwgMCwgMTQ3NzEzLCAxNDc3MTgsIDE0NzcyMywgCisgICAgMTQ3NzI4LCAxNDc3MzMsIDAsIDE0NzczOCwgMTQ3NzQzLCAxNDc3NDgsIDE0Nzc1MywgMTQ3NzU4LCAxNDc3NjMsIAorICAgIDE0Nzc2OCwgMTQ3NzczLCAxNDc3NzgsIDE0Nzc4MywgMTQ3Nzg4LCAxNDc3OTMsIDE0Nzc5OCwgMTQ3ODAzLCAxNDc4MDgsIAorICAgIDE0NzgxMywgMTQ3ODE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc4MjMsIDE0NzgzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTQ3ODQxLCAxNDc4NDgsIDE0Nzg1NSwgMTQ3ODYyLCAxNDc4NjgsIDE0Nzg3NSwgMTQ3ODgyLCAKKyAgICAxNDc4ODgsIDE0Nzg5NSwgMTQ3OTAyLCAxNDc5MDksIDE0NzkxNywgMTQ3OTI1LCAxNDc5MzMsIDE0Nzk0MSwgMTQ3OTQ5LCAKKyAgICAxNDc5NTcsIDE0Nzk2NCwgMTQ3OTcxLCAxNDc5NzgsIDE0Nzk4NiwgMTQ3OTk0LCAxNDgwMDIsIDE0ODAxMCwgMTQ4MDE4LCAKKyAgICAxNDgwMjYsIDE0ODAzMywgMTQ4MDQwLCAxNDgwNDcsIDE0ODA1NSwgMTQ4MDYzLCAxNDgwNzEsIDE0ODA3OSwgMTQ4MDg3LCAKKyAgICAxNDgwOTUsIDE0ODEwMCwgMTQ4MTA1LCAxNDgxMTAsIDE0ODExNSwgMTQ4MTIwLCAxNDgxMjUsIDE0ODEzMCwgMTQ4MTM1LCAKKyAgICAxNDgxNDAsIDAsIDAsIDAsIDAsIDE0ODE0NSwgMTQ4MTUxLCAxNDgxNTUsIDE0ODE1OSwgMTQ4MTYzLCAxNDgxNjcsIAorICAgIDE0ODE3MSwgMTQ4MTc1LCAxNDgxNzksIDE0ODE4MywgMTQ4MTg3LCAxNDgxOTEsIDE0ODE5NSwgMTQ4MTk5LCAxNDgyMDMsIAorICAgIDE0ODIwNywgMTQ4MjExLCAxNDgyMTUsIDE0ODIxOSwgMTQ4MjIzLCAxNDgyMjcsIDE0ODIzMSwgMTQ4MjM1LCAxNDgyMzksIAorICAgIDE0ODI0MywgMTQ4MjQ3LCAxNDgyNTEsIDE0ODI1NSwgMTQ4MjU5LCAxNDgyNjMsIDE0ODI2NywgMTQ4MjcxLCAxNDgyNzUsIAorICAgIDE0ODI3OSwgMTQ4MjgzLCAxNDgyODcsIDE0ODI5MSwgMTQ4Mjk1LCAxNDgyOTksIDE0ODMwMywgMTQ4MzA3LCAxNDgzMTEsIAorICAgIDE0ODMxNSwgMTQ4MzE5LCAxNDgzMjMsIDE0ODMyNywgMTQ4MzMxLCAxNDgzMzUsIDE0ODMzOSwgMTQ4MzQzLCAxNDgzNDcsIAorICAgIDE0ODM1MiwgMTQ4MzU2LCAxNDgzNjAsIDE0ODM2NCwgMTQ4MzY4LCAxNDgzNzIsIDE0ODM3NiwgMTQ4MzgwLCAxNDgzODQsIAorICAgIDE0ODM4OCwgMTQ4MzkyLCAxNDgzOTYsIDE0ODQwMCwgMTQ4NDA0LCAxNDg0MDgsIDE0ODQxMiwgMTQ4NDE2LCAxNDg0MjAsIAorICAgIDE0ODQyNCwgMTQ4NDI4LCAxNDg0MzIsIDE0ODQzNiwgMTQ4NDQwLCAxNDg0NDQsIDE0ODQ0OCwgMTQ4NDUyLCAxNDg0NTYsIAorICAgIDE0ODQ2MCwgMTQ4NDY0LCAxNDg0NjgsIDE0ODQ3MiwgMTQ4NDc2LCAxNDg0ODAsIDE0ODQ4NCwgMTQ4NDg4LCAxNDg0OTIsIAorICAgIDE0ODQ5NiwgMTQ4NTAwLCAxNDg1MDQsIDE0ODUwOCwgMTQ4NTEyLCAxNDg1MTYsIDE0ODUyMCwgMTQ4NTI0LCAxNDg1MjgsIAorICAgIDE0ODUzMiwgMTQ4NTM2LCAxNDg1NDAsIDE0ODU0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTQ4NTQ4LCAxNDg1NTQsIDE0ODU2MywgMTQ4NTcxLCAxNDg1NzksIDE0ODU4OCwgMTQ4NTk3LCAxNDg2MDYsIDE0ODYxNSwgCisgICAgMTQ4NjI0LCAxNDg2MzMsIDE0ODY0MiwgMTQ4NjUxLCAxNDg2NjAsIDE0ODY2OSwgMCwgMCwgMTQ4Njc4LCAxNDg2ODcsIAorICAgIDE0ODY5NSwgMTQ4NzAzLCAxNDg3MTIsIDE0ODcyMSwgMTQ4NzMwLCAxNDg3MzksIDE0ODc0OCwgMTQ4NzU3LCAxNDg3NjYsIAorICAgIDE0ODc3NSwgMTQ4Nzg0LCAxNDg3OTMsIDE0ODgwMiwgMCwgMTQ4ODEwLCAxNDg4MTksIDE0ODgyNywgMTQ4ODM1LCAKKyAgICAxNDg4NDQsIDE0ODg1MywgMTQ4ODYyLCAxNDg4NzEsIDE0ODg4MCwgMTQ4ODg5LCAxNDg4OTgsIDE0ODkwNywgMTQ4OTE2LCAKKyAgICAxNDg5MjUsIDE0ODkzNCwgMCwgMTQ4OTQxLCAxNDg5NTAsIDE0ODk1OCwgMTQ4OTY2LCAxNDg5NzUsIDE0ODk4NCwgCisgICAgMTQ4OTkzLCAxNDkwMDIsIDE0OTAxMSwgMTQ5MDIwLCAxNDkwMjksIDE0OTAzOCwgMTQ5MDQ3LCAxNDkwNTYsIDE0OTA2NSwgCisgICAgMTQ5MDcyLCAxNDkwNzgsIDE0OTA4NCwgMTQ5MDkwLCAxNDkwOTYsIDE0OTEwMiwgMTQ5MTA4LCAxNDkxMTQsIDE0OTEyMCwgCisgICAgMTQ5MTI2LCAxNDkxMzIsIDE0OTEzOCwgMTQ5MTQ0LCAxNDkxNTAsIDE0OTE1NiwgMTQ5MTYyLCAxNDkxNjgsIDE0OTE3NCwgCisgICAgMTQ5MTgwLCAxNDkxODYsIDE0OTE5MiwgMTQ5MTk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDkyMDQsIAorICAgIDE0OTIxMSwgMTQ5MjE2LCAxNDkyMjAsIDE0OTIyNCwgMTQ5MjI4LCAxNDkyMzMsIDE0OTIzOCwgMTQ5MjQzLCAxNDkyNDgsIAorICAgIDE0OTI1MywgMTQ5MjU4LCAxNDkyNjUsIDAsIDAsIDAsIDE0OTI3MywgMTQ5Mjc4LCAxNDkyODQsIDE0OTI5MCwgMTQ5Mjk2LCAKKyAgICAxNDkzMDEsIDE0OTMwNywgMTQ5MzEzLCAxNDkzMTksIDE0OTMyNCwgMTQ5MzMwLCAxNDkzMzYsIDE0OTM0MSwgMTQ5MzQ3LCAKKyAgICAxNDkzNTMsIDE0OTM1OCwgMTQ5MzY0LCAxNDkzNzAsIDE0OTM3NSwgMTQ5MzgwLCAxNDkzODYsIDE0OTM5MSwgMTQ5Mzk3LCAKKyAgICAxNDk0MDMsIDE0OTQwOSwgMTQ5NDE1LCAxNDk0MjEsIDE0OTQzMSwgMTQ5NDM4LCAxNDk0NDQsIDE0OTQ0NywgMCwgCisgICAgMTQ5NDUwLCAxNDk0NTUsIDE0OTQ2MSwgMTQ5NDY3LCAxNDk0NzMsIDE0OTQ3OCwgMTQ5NDg0LCAxNDk0OTAsIDE0OTQ5NiwgCisgICAgMTQ5NTAxLCAxNDk1MDcsIDE0OTUxMywgMTQ5NTE4LCAxNDk1MjQsIDE0OTUzMCwgMTQ5NTM1LCAxNDk1NDEsIDE0OTU0NywgCisgICAgMTQ5NTUyLCAxNDk1NTcsIDE0OTU2MywgMTQ5NTY4LCAxNDk1NzQsIDE0OTU4MCwgMTQ5NTg2LCAxNDk1OTIsIDE0OTU5OCwgCisgICAgMTQ5NjAxLCAxNDk2MDQsIDE0OTYwNywgMTQ5NjEwLCAxNDk2MTMsIDE0OTYxNiwgMTQ5NjIyLCAxNDk2MjksIDE0OTYzNiwgCisgICAgMTQ5NjQzLCAxNDk2NDksIDE0OTY1NiwgMTQ5NjYzLCAxNDk2NzAsIDE0OTY3NiwgMTQ5NjgzLCAxNDk2OTAsIDE0OTY5NiwgCisgICAgMTQ5NzAzLCAxNDk3MTAsIDE0OTcxNiwgMTQ5NzIzLCAxNDk3MzAsIDE0OTczNiwgMTQ5NzQyLCAxNDk3NDksIDE0OTc1NSwgCisgICAgMTQ5NzYyLCAxNDk3NjksIDE0OTc3NiwgMTQ5NzgzLCAxNDk3OTAsIDE0OTc5NSwgMCwgMCwgMCwgMCwgMTQ5ODAwLCAKKyAgICAxNDk4MDYsIDE0OTgxMywgMTQ5ODIwLCAxNDk4MjcsIDE0OTgzMywgMTQ5ODQwLCAxNDk4NDcsIDE0OTg1NCwgMTQ5ODYwLCAKKyAgICAxNDk4NjcsIDE0OTg3NCwgMTQ5ODgwLCAxNDk4ODcsIDE0OTg5NCwgMTQ5OTAwLCAxNDk5MDcsIDE0OTkxNCwgMTQ5OTIwLCAKKyAgICAxNDk5MjYsIDE0OTkzMywgMTQ5OTM5LCAxNDk5NDYsIDE0OTk1MywgMTQ5OTYwLCAxNDk5NjcsIDE0OTk3NCwgMTQ5OTgzLCAKKyAgICAxNDk5ODcsIDE0OTk5MCwgMTQ5OTk0LCAxNDk5OTgsIDE1MDAwMiwgMTUwMDA1LCAxNTAwMDgsIDE1MDAxMSwgMTUwMDE0LCAKKyAgICAxNTAwMTcsIDE1MDAyMCwgMTUwMDIzLCAxNTAwMjYsIDE1MDAyOSwgMTUwMDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTAwMzgsIDE1MDA0NSwgCisgICAgMTUwMDUzLCAxNTAwNjEsIDE1MDA2OSwgMTUwMDc2LCAxNTAwODQsIDE1MDA5MiwgMTUwMTAwLCAxNTAxMDcsIDE1MDExNSwgCisgICAgMTUwMTIzLCAxNTAxMzAsIDE1MDEzOCwgMTUwMTQ2LCAxNTAxNTMsIDE1MDE2MSwgMTUwMTY5LCAxNTAxNzYsIDE1MDE4MywgCisgICAgMTUwMTkxLCAxNTAxOTgsIDE1MDIwNiwgMTUwMjE0LCAxNTAyMjIsIDE1MDIzMCwgMTUwMjM4LCAxNTAyNDIsIDE1MDI0NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUwMjUwLCAxNTAyNTYsIDE1MDI2MiwgMTUwMjY4LCAKKyAgICAxNTAyNzIsIDE1MDI3OCwgMTUwMjg0LCAxNTAyOTAsIDE1MDI5NiwgMTUwMzAyLCAxNTAzMDgsIDE1MDMxNCwgMTUwMzIwLCAKKyAgICAxNTAzMjYsIDE1MDMzMiwgMTUwMzM4LCAxNTAzNDQsIDE1MDM1MCwgMTUwMzU2LCAxNTAzNjIsIDE1MDM2OCwgMTUwMzc0LCAKKyAgICAxNTAzODAsIDE1MDM4NiwgMTUwMzkyLCAxNTAzOTgsIDE1MDQwNCwgMTUwNDEwLCAxNTA0MTYsIDE1MDQyMiwgMTUwNDI4LCAKKyAgICAxNTA0MzQsIDE1MDQ0MCwgMTUwNDQ2LCAxNTA0NTIsIDE1MDQ1OCwgMTUwNDY0LCAxNTA0NzAsIDE1MDQ3NiwgMTUwNDgyLCAKKyAgICAxNTA0ODgsIDE1MDQ5NCwgMTUwNTAwLCAwLCAwLCAwLCAwLCAwLCAxNTA1MDYsIDE1MDUxNywgMTUwNTI4LCAxNTA1MzksIAorICAgIDE1MDU1MCwgMTUwNTYxLCAxNTA1NzIsIDE1MDU4MywgMTUwNTk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTA2MDUsIAorICAgIDE1MDYwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUwNjEzLCAxNTA2MTUsIDE1MDYxNywgMTUwNjIxLCAxNTA2MjYsIDE1MDYzMSwgCisgICAgMTUwNjMzLCAxNTA2MzksIDE1MDY0NCwgMTUwNjQ2LCAxNTA2NTIsIDE1MDY1NiwgMTUwNjU4LCAxNTA2NjIsIDE1MDY2OCwgCisgICAgMTUwNjc0LCAxNTA2ODAsIDE1MDY4NSwgMTUwNjkwLCAxNTA2OTcsIDE1MDcwNCwgMTUwNzExLCAxNTA3MTYsIDE1MDcyMywgCisgICAgMTUwNzMwLCAxNTA3MzcsIDE1MDc0MSwgMTUwNzQ4LCAxNTA3NTcsIDE1MDc2NiwgMTUwNzczLCAxNTA3NzgsIDE1MDc4MiwgCisgICAgMTUwNzg2LCAxNTA3ODgsIDE1MDc5MSwgMTUwNzk0LCAxNTA4MDEsIDE1MDgwOCwgMTUwODE4LCAxNTA4MjMsIDE1MDgyOCwgCisgICAgMTUwODMzLCAxNTA4MzgsIDE1MDg0MCwgMTUwODQ2LCAxNTA4NTAsIDE1MDg1MiwgMTUwODU0LCAxNTA4NTYsIDE1MDg1OCwgCisgICAgMTUwODYyLCAxNTA4NjYsIDE1MDg3MCwgMTUwODcyLCAxNTA4NzYsIDE1MDg3OCwgMTUwODgyLCAxNTA4ODQsIDE1MDg4NiwgCisgICAgMTUwODg4LCAxNTA4OTAsIDE1MDg5NSwgMTUwOTAwLCAxNTA5MDIsIDE1MDkwOCwgMTUwOTEyLCAxNTA5MTYsIDE1MDkyNCwgCisgICAgMTUwOTI2LCAxNTA5MjgsIDE1MDkzMCwgMTUwOTMyLCAxNTA5MzQsIDE1MDkzNiwgMTUwOTM4LCAxNTA5NDAsIDE1MDk0MiwgCisgICAgMTUwOTQ0LCAxNTA5NDgsIDE1MDk1MiwgMTUwOTU0LCAxNTA5NTYsIDE1MDk1OCwgMTUwOTYwLCAxNTA5NjIsIDE1MDk2NywgCisgICAgMTUwOTczLCAxNTA5NzcsIDE1MDk4MSwgMTUwOTg1LCAxNTA5ODksIDE1MDk5NCwgMTUwOTk4LCAxNTEwMDAsIDE1MTAwMiwgCisgICAgMTUxMDA2LCAxNTEwMTIsIDE1MTAxNCwgMTUxMDE2LCAxNTEwMTgsIDE1MTAyMiwgMTUxMDMxLCAxNTEwMzcsIDE1MTA0MSwgCisgICAgMTUxMDQ1LCAxNTEwNDcsIDE1MTA0OSwgMTUxMDUyLCAxNTEwNTQsIDE1MTA1NiwgMTUxMDU4LCAxNTEwNjIsIDE1MTA2NCwgCisgICAgMTUxMDY4LCAxNTEwNzMsIDE1MTA3NSwgMTUxMDgwLCAxNTEwODYsIDE1MTA5MywgMTUxMDk3LCAxNTExMDEsIDE1MTEwNSwgCisgICAgMTUxMTA5LCAxNTExMTUsIDE1MTExOSwgMTUxMTI3LCAxNTExMzQsIDE1MTEzNiwgMTUxMTM4LCAxNTExNDIsIDE1MTE0NiwgCisgICAgMTUxMTQ4LCAxNTExNTIsIDE1MTE1NiwgMTUxMTU4LCAxNTExNjIsIDE1MTE2NCwgMTUxMTY4LCAxNTExNzIsIDE1MTE3NiwgCisgICAgMTUxMTgwLCAxNTExODQsIDE1MTE4OCwgMTUxMTkyLCAxNTExOTYsIDE1MTIwMiwgMTUxMjA2LCAxNTEyMTAsIDE1MTIyMSwgCisgICAgMTUxMjI2LCAxNTEyMzAsIDE1MTIzNCwgMTUxMjQwLCAxNTEyNDQsIDE1MTI0OCwgMTUxMjUyLCAxNTEyNTksIDE1MTI2NiwgCisgICAgMTUxMjcwLCAxNTEyNzQsIDE1MTI3OCwgMTUxMjgyLCAxNTEyODYsIDE1MTI5MywgMTUxMjk1LCAxNTEyOTksIDE1MTMwMSwgCisgICAgMTUxMzAzLCAxNTEzMDcsIDE1MTMxMSwgMTUxMzE1LCAxNTEzMTcsIDE1MTMyMSwgMTUxMzI1LCAxNTEzMjksIDE1MTMzMywgCisgICAgMTUxMzM3LCAxNTEzMzksIDE1MTM0MywgMTUxMzQ1LCAxNTEzNTEsIDE1MTM1NCwgMTUxMzU5LCAxNTEzNjEsIDE1MTM2MywgCisgICAgMTUxMzY2LCAxNTEzNjgsIDE1MTM3MCwgMTUxMzczLCAxNTEzODAsIDE1MTM4NywgMTUxMzk0LCAxNTEzOTksIDE1MTQwMywgCisgICAgMTUxNDA1LCAxNTE0MDcsIDE1MTQwOSwgMTUxNDEzLCAxNTE0MTUsIDE1MTQxOSwgMTUxNDIzLCAxNTE0MjcsIDE1MTQyOSwgCisgICAgMTUxNDMzLCAxNTE0MzUsIDE1MTQzOSwgMTUxNDQzLCAxNTE0NTAsIDE1MTQ1MiwgMTUxNDYxLCAxNTE0NzAsIDE1MTQ3OSwgCisgICAgMTUxNDg1LCAxNTE0ODcsIDE1MTQ5MiwgMTUxNDk2LCAxNTE1MDAsIDE1MTUwMiwgMTUxNTA4LCAxNTE1MTIsIDE1MTUxNCwgCisgICAgMTUxNTE4LCAxNTE1MjIsIDE1MTUyNCwgMTUxNTI4LCAxNTE1MzMsIDE1MTUzNywgMTUxNTQzLCAxNTE1NDksIDE1MTU1MSwgCisgICAgMTUxNTUzLCAxNTE1NTksIDE1MTU2MSwgMTUxNTY1LCAxNTE1NjksIDE1MTU3MSwgMTUxNTc1LCAxNTE1NzcsIDE1MTU4MSwgCisgICAgMTUxNTg1LCAxNTE1ODksIDE1MTU5MiwgMTUxNTk1LCAxNTE2MDAsIDE1MTYwNSwgMTUxNjA3LCAxNTE2MTAsIDE1MTYxMiwgCisgICAgMTUxNjE5LCAxNTE2MjMsIDE1MTYyNSwgMTUxNjMyLCAxNTE2MzksIDE1MTY0NiwgMTUxNjUzLCAxNTE2NjAsIDE1MTY2MiwgCisgICAgMTUxNjY0LCAxNTE2NjYsIDE1MTY3MCwgMTUxNjcyLCAxNTE2NzQsIDE1MTY3NiwgMTUxNjc4LCAxNTE2ODAsIDE1MTY4MiwgCisgICAgMTUxNjg0LCAxNTE2ODYsIDE1MTY4OCwgMTUxNjkwLCAxNTE2OTIsIDE1MTY5NCwgMTUxNjk2LCAxNTE2OTgsIDE1MTcwMCwgCisgICAgMTUxNzAyLCAxNTE3MDQsIDE1MTcwNiwgMTUxNzA4LCAxNTE3MTAsIDE1MTcxMiwgMTUxNzE0LCAxNTE3MTgsIDE1MTcyMCwgCisgICAgMTUxNzIyLCAxNTE3MjQsIDE1MTcyOCwgMTUxNzMwLCAxNTE3MzQsIDE1MTczNiwgMTUxNzM4LCAxNTE3NDIsIDE1MTc0NiwgCisgICAgMTUxNzUyLCAxNTE3NTQsIDE1MTc1NiwgMTUxNzU4LCAxNTE3NjAsIDE1MTc2NCwgMTUxNzY4LCAxNTE3NzAsIDE1MTc3NCwgCisgICAgMTUxNzc4LCAxNTE3ODIsIDE1MTc4NiwgMTUxNzkwLCAxNTE3OTQsIDE1MTc5OCwgMTUxODAyLCAxNTE4MDYsIDE1MTgxMCwgCisgICAgMTUxODE0LCAxNTE4MTgsIDE1MTgyMiwgMTUxODI2LCAxNTE4MzAsIDE1MTgzNCwgMTUxODM4LCAxNTE4NDIsIDE1MTg0NCwgCisgICAgMTUxODQ2LCAxNTE4NDgsIDE1MTg1MCwgMTUxODUyLCAxNTE4NTQsIDE1MTg1NiwgMTUxODY0LCAxNTE4NzIsIDE1MTg4MCwgCisgICAgMTUxODg4LCAxNTE4OTMsIDE1MTg5OCwgMTUxOTAzLCAxNTE5MDcsIDE1MTkxMSwgMTUxOTE2LCAxNTE5MjAsIDE1MTkyMiwgCisgICAgMTUxOTI2LCAxNTE5MjgsIDE1MTkzMCwgMTUxOTMyLCAxNTE5MzQsIDE1MTkzNiwgMTUxOTM4LCAxNTE5NDAsIDE1MTk0NCwgCisgICAgMTUxOTQ2LCAxNTE5NDgsIDE1MTk1MCwgMTUxOTU0LCAxNTE5NTgsIDE1MTk2MiwgMTUxOTY2LCAxNTE5NzAsIDE1MTk3MiwgCisgICAgMTUxOTc4LCAxNTE5ODQsIDE1MTk4NiwgMTUxOTg4LCAxNTE5OTAsIDE1MTk5MiwgMTUxOTk0LCAxNTIwMDMsIDE1MjAxMCwgCisgICAgMTUyMDE3LCAxNTIwMjEsIDE1MjAyOCwgMTUyMDMzLCAxNTIwNDAsIDE1MjA0OSwgMTUyMDU0LCAxNTIwNTgsIDE1MjA2MiwgCisgICAgMTUyMDY0LCAxNTIwNjgsIDE1MjA3MCwgMTUyMDc0LCAxNTIwNzgsIDE1MjA4MCwgMTUyMDg0LCAxNTIwODgsIDE1MjA5MiwgCisgICAgMTUyMDk0LCAxNTIwOTYsIDE1MjEwMiwgMTUyMTA0LCAxNTIxMDYsIDE1MjEwOCwgMTUyMTEyLCAxNTIxMTYsIDE1MjExOCwgCisgICAgMTUyMTIyLCAxNTIxMjQsIDE1MjEyNiwgMTUyMTI5LCAxNTIxMzMsIDE1MjEzNSwgMTUyMTM5LCAxNTIxNDEsIDE1MjE0MywgCisgICAgMTUyMTQ4LCAxNTIxNTAsIDE1MjE1NCwgMTUyMTU4LCAxNTIxNjEsIDE1MjE2NSwgMTUyMTY5LCAxNTIxNzMsIDE1MjE3NywgCisgICAgMTUyMTgxLCAxNTIxODUsIDE1MjE4OSwgMTUyMTk0LCAxNTIxOTgsIDE1MjIwMiwgMTUyMjExLCAxNTIyMTYsIDE1MjIxOSwgCisgICAgMTUyMjIxLCAxNTIyMjQsIDE1MjIyNywgMTUyMjMyLCAxNTIyMzQsIDE1MjIzNywgMTUyMjQyLCAxNTIyNDYsIDE1MjI0OSwgCisgICAgMTUyMjUzLCAxNTIyNTcsIDE1MjI2MCwgMTUyMjY1LCAxNTIyNjksIDE1MjI3MywgMTUyMjc3LCAxNTIyODEsIDE1MjI4NywgCisgICAgMTUyMjkzLCAxNTIyOTksIDE1MjMwNSwgMTUyMzEwLCAxNTIzMjAsIDE1MjMyMiwgMTUyMzI2LCAxNTIzMjgsIDE1MjMzMCwgCisgICAgMTUyMzM0LCAxNTIzMzgsIDE1MjM0MCwgMTUyMzQ0LCAxNTIzNDksIDE1MjM1NCwgMTUyMzYwLCAxNTIzNjIsIDE1MjM2NiwgCisgICAgMTUyMzcwLCAxNTIzNzYsIDE1MjM4MiwgMTUyMzg2LCAxNTIzODgsIDE1MjM5MCwgMTUyMzk0LCAxNTIzOTYsIDE1MjQwMCwgCisgICAgMTUyNDA0LCAxNTI0MDgsIDE1MjQxMCwgMTUyNDEyLCAxNTI0MTksIDE1MjQyMywgMTUyNDI2LCAxNTI0MzAsIDE1MjQzNCwgCisgICAgMTUyNDM4LCAxNTI0NDAsIDE1MjQ0NCwgMTUyNDQ2LCAxNTI0NDgsIDE1MjQ1MiwgMTUyNDU0LCAxNTI0NTgsIDE1MjQ2MiwgCisgICAgMTUyNDY4LCAxNTI0NzIsIDE1MjQ3NiwgMTUyNDgwLCAxNTI0ODIsIDE1MjQ4NSwgMTUyNDg5LCAxNTI0OTUsIDE1MjUwNCwgCisgICAgMTUyNTEzLCAxNTI1MjEsIDE1MjUyOSwgMTUyNTMxLCAxNTI1MzUsIDE1MjUzNywgMTUyNTQxLCAxNTI1NTIsIDE1MjU1NiwgCisgICAgMTUyNTYyLCAxNTI1NjgsIDE1MjU3MywgMTUyNTc1LCAxNTI1ODAsIDE1MjU4NCwgMTUyNTg2LCAxNTI1ODgsIDE1MjU5MCwgCisgICAgMTUyNTk0LCAxNTI1OTgsIDE1MjYwMiwgMTUyNjA3LCAxNTI2MTcsIDE1MjYzMiwgMTUyNjQyLCAxNTI2NTIsIDE1MjY1NiwgCisgICAgMTUyNjYwLCAxNTI2NjYsIDE1MjY2OCwgMTUyNjc2LCAxNTI2ODQsIDE1MjY4NiwgMTUyNjkwLCAxNTI2OTYsIDE1MjcwMiwgCisgICAgMTUyNzA5LCAxNTI3MTYsIDE1MjcxOCwgMTUyNzIwLCAxNTI3MjMsIDE1MjcyNSwgMTUyNzMxLCAxNTI3MzMsIDE1MjczNiwgCisgICAgMTUyNzQwLCAxNTI3NDYsIDE1Mjc1MiwgMTUyNzYzLCAxNTI3NjksIDE1Mjc3NSwgMTUyNzgzLCAxNTI3ODcsIDE1Mjc5NSwgCisgICAgMTUyODAzLCAxNTI4MDksIDE1MjgxNSwgMTUyODIyLCAxNTI4MjQsIDE1MjgyOCwgMTUyODMwLCAxNTI4MzIsIDE1MjgzNywgCisgICAgMTUyODM5LCAxNTI4NDEsIDE1Mjg0MywgMTUyODQ1LCAxNTI4NDksIDE1Mjg1OSwgMTUyODY1LCAxNTI4NjksIDE1Mjg3MywgCisgICAgMTUyODc3LCAxNTI4ODMsIDE1Mjg4OSwgMTUyODk1LCAxNTI5MDEsIDE1MjkwNiwgMTUyOTExLCAxNTI5MTcsIDE1MjkyMywgCisgICAgMTUyOTMwLCAxNTI5MzcsIDE1Mjk0NSwgMTUyOTUzLCAxNTI5NTgsIDE1Mjk2NiwgMTUyOTcwLCAxNTI5NzksIDE1Mjk4OCwgCisgICAgMTUyOTk0LCAxNTI5OTgsIDE1MzAwMiwgMTUzMDA2LCAxNTMwMDksIDE1MzAxNCwgMTUzMDE2LCAxNTMwMTgsIDE1MzAyMCwgCisgICAgMTUzMDI3LCAxNTMwMzIsIDE1MzAzOSwgMTUzMDQ2LCAxNTMwNTMsIDE1MzA2MSwgMTUzMDY5LCAxNTMwNzcsIDE1MzA4NSwgCisgICAgMTUzMDkzLCAxNTMxMDEsIDE1MzEwOSwgMTUzMTE3LCAxNTMxMjUsIDE1MzEzMSwgMTUzMTM3LCAxNTMxNDMsIDE1MzE0OSwgCisgICAgMTUzMTU1LCAxNTMxNjEsIDE1MzE2NywgMTUzMTczLCAxNTMxNzksIDE1MzE4NSwgMTUzMTkxLCAxNTMxOTcsIDE1MzIwMCwgCisgICAgMTUzMjA5LCAxNTMyMTgsIDE1MzIyMCwgMTUzMjI3LCAxNTMyMzEsIDE1MzIzMywgMTUzMjM1LCAxNTMyMzksIDE1MzI0NSwgCisgICAgMTUzMjQ5LCAxNTMyNTEsIDE1MzI2MSwgMTUzMjY3LCAxNTMyNzEsIDE1MzI3MywgMTUzMjc3LCAwLCAxNTMyNzksIAorICAgIDE1MzI4NiwgMTUzMjkzLCAxNTMzMDAsIDE1MzMwNSwgMTUzMzEwLCAxNTMzMTksIDE1MzMyNSwgMTUzMzMwLCAxNTMzMzQsIAorICAgIDE1MzMzOSwgMTUzMzQzLCAxNTMzNTAsIDE1MzM1NCwgMTUzMzU3LCAxNTMzNjIsIDE1MzM2OSwgMTUzMzc2LCAxNTMzODEsIAorICAgIDE1MzM4NiwgMTUzMzkxLCAxNTMzOTgsIDE1MzQwNywgMTUzNDE4LCAxNTM0MjQsIDE1MzQzMCwgMTUzNDM2LCAxNTM0NDYsIAorICAgIDE1MzQ2MSwgMTUzNDcwLCAxNTM0NzgsIDE1MzQ4NiwgMTUzNDk0LCAxNTM1MDIsIDE1MzUxMCwgMTUzNTE4LCAxNTM1MjYsIAorICAgIDE1MzUzNCwgMTUzNTQyLCAxNTM1NTAsIDE1MzU1OCwgMCwgMTUzNTY2LCAxNTM1NzAsIDE1MzU3NSwgMTUzNTgwLCAKKyAgICAxNTM1ODIsIDE1MzU4NiwgMTUzNTk1LCAxNTM2MDQsIDE1MzYxMiwgMTUzNjE2LCAxNTM2MjAsIDE1MzYyNSwgMTUzNjMwLCAKKyAgICAxNTM2MzUsIDE1MzYzNywgMTUzNjQyLCAxNTM2NDYsIDE1MzY0OCwgMTUzNjUyLCAxNTM2NTYsIDE1MzY2MiwgMTUzNjY3LCAKKyAgICAxNTM2NzUsIDE1MzY4MCwgMTUzNjg1LCAxNTM2OTAsIDE1MzY5NywgMTUzNzAwLCAxNTM3MDIsIDE1MzcwNSwgMTUzNzEwLCAKKyAgICAxNTM3MTYsIDE1MzcyMCwgMTUzNzI0LCAxNTM3MzAsIDE1MzczNiwgMTUzNzM4LCAxNTM3NDIsIDE1Mzc0NiwgMTUzNzUwLCAKKyAgICAxNTM3NTQsIDE1Mzc1OCwgMTUzNzYwLCAxNTM3NjIsIDE1Mzc2NCwgMTUzNzY2LCAxNTM3NzIsIDE1Mzc3OCwgMTUzNzgyLCAKKyAgICAxNTM3ODQsIDE1Mzc4NiwgMTUzNzg4LCAxNTM3OTcsIDE1MzgwMSwgMTUzODA4LCAxNTM4MTUsIDE1MzgxNywgMTUzODIwLCAKKyAgICAxNTM4MjQsIDE1MzgzMCwgMTUzODM0LCAxNTM4MzgsIDE1Mzg0MCwgMTUzODQ4LCAxNTM4NTIsIDE1Mzg1NiwgMTUzODYxLCAKKyAgICAxNTM4NjYsIDE1Mzg3MSwgMTUzODc2LCAxNTM4ODEsIDE1Mzg4NiwgMTUzODkxLCAxNTM4OTYsIDE1MzkwMSwgMTUzOTA2LCAKKyAgICAxNTM5MTAsIDE1MzkxNiwgMTUzOTIwLCAxNTM5MjYsIDE1MzkzMSwgMTUzOTM4LCAxNTM5NDQsIDE1Mzk1MiwgMTUzOTU2LCAKKyAgICAxNTM5NjMsIDE1Mzk2NywgMTUzOTcxLCAxNTM5NzUsIDE1Mzk4MCwgMTUzOTg1LCAxNTM5ODcsIDE1Mzk5MSwgMTU0MDAwLCAKKyAgICAxNTQwMDgsIDE1NDAxNiwgMTU0MDI5LCAxNTQwNDIsIDE1NDA1NSwgMTU0MDYyLCAxNTQwNjksIDE1NDA3MywgMTU0MDgyLCAKKyAgICAxNTQwOTAsIDE1NDA5NCwgMTU0MTAzLCAxNTQxMTAsIDE1NDExNCwgMTU0MTE4LCAxNTQxMjIsIDE1NDEyNiwgMTU0MTMzLCAKKyAgICAxNTQxMzcsIDE1NDE0MSwgMTU0MTQ1LCAxNTQxNDksIDE1NDE1NiwgMTU0MTY1LCAxNTQxNzQsIDE1NDE4MSwgMTU0MTkzLCAKKyAgICAxNTQyMDUsIDE1NDIwOSwgMTU0MjEzLCAxNTQyMTcsIDE1NDIyMSwgMTU0MjI1LCAxNTQyMjksIDE1NDIzNywgMTU0MjQ1LCAKKyAgICAxNTQyNTMsIDE1NDI1NywgMTU0MjYxLCAxNTQyNjUsIDE1NDI2OSwgMTU0MjczLCAxNTQyNzcsIDE1NDI4MywgMTU0Mjg5LCAKKyAgICAxNTQyOTMsIDE1NDMwNCwgMTU0MzEyLCAxNTQzMTYsIDE1NDMyMCwgMTU0MzI0LCAxNTQzMjgsIDE1NDMzNCwgMTU0MzQxLCAKKyAgICAxNTQzNTIsIDE1NDM2MiwgMTU0MzcyLCAxNTQzODMsIDE1NDM5MiwgMTU0NDAzLCAxNTQ0MDksIDE1NDQxNSwgMTU0NDIxLCAKKyAgICAxNTQ0MjcsIDE1NDQzMywgMTU0NDM3LCAxNTQ0NDQsIDE1NDQ1MywgMTU0NDYwLCAxNTQ0NjYsIDE1NDQ3MCwgMTU0NDc0LCAKKyAgICAxNTQ0NzgsIDE1NDQ4NywgMTU0NDk5LCAxNTQ1MDMsIDE1NDUxMCwgMTU0NTE3LCAxNTQ1MjQsIDE1NDUzMiwgMTU0NTM5LCAKKyAgICAxNTQ1NDcsIDE1NDU1NiwgMTU0NTY2LCAxNTQ1NzUsIDE1NDU4NSwgMTU0NTk0LCAxNTQ2MDQsIDE1NDYxMywgMTU0NjIzLCAKKyAgICAxNTQ2MzMsIDE1NDY0NCwgMTU0NjU0LCAxNTQ2NjUsIDE1NDY3MiwgMTU0NjgwLCAxNTQ2ODcsIDE1NDY5NSwgMTU0NzAzLCAKKyAgICAxNTQ3MTIsIDE1NDcyMCwgMTU0NzI5LCAxNTQ3MzYsIDE1NDc0OCwgMTU0NzU1LCAxNTQ3NjcsIDE1NDc3MCwgMTU0NzczLCAKKyAgICAxNTQ3NzYsIDE1NDc3OSwgMTU0Nzg1LCAxNTQ3OTIsIDE1NDc5OCwgMTU0ODA1LCAxNTQ4MTAsIDE1NDgxNiwgMTU0ODI4LCAKKyAgICAxNTQ4MzgsIDE1NDg0OSwgMTU0ODU0LCAxNTQ4NTksIDE1NDg2NSwgMTU0ODcwLCAxNTQ4NzcsIDE1NDg4MSwgMTU0ODg3LCAKKyAgICAxNTQ4ODksIDE1NDg5MSwgMTU0ODk1LCAxNTQ4OTksIDE1NDkwMywgMTU0OTEyLCAxNTQ5MTQsIDE1NDkxNiwgMTU0OTE5LCAKKyAgICAxNTQ5MjEsIDE1NDkyMywgMTU0OTI3LCAxNTQ5MjksIDE1NDkzMywgMTU0OTM1LCAxNTQ5MzksIDE1NDk0MSwgMTU0OTQzLCAKKyAgICAxNTQ5NDcsIDE1NDk1MSwgMTU0OTU3LCAxNTQ5NTksIDE1NDk2MywgMTU0OTY1LCAxNTQ5NjksIDE1NDk3MywgMTU0OTc3LCAKKyAgICAxNTQ5ODEsIDE1NDk4MywgMTU0OTg1LCAxNTQ5ODksIDE1NDk5MywgMTU0OTk3LCAxNTUwMDEsIDE1NTAwMywgMTU1MDA1LCAKKyAgICAxNTUwMDcsIDE1NTAxMywgMTU1MDE4LCAxNTUwMjEsIDE1NTAyOSwgMTU1MDM3LCAxNTUwMzksIDE1NTA0NCwgMTU1MDQ3LCAKKyAgICAxNTUwNTIsIDE1NTA2MywgMTU1MDcwLCAxNTUwNzUsIDE1NTA4MCwgMTU1MDgyLCAxNTUwODYsIDE1NTA4OCwgMTU1MDkyLCAKKyAgICAxNTUwOTQsIDE1NTA5OCwgMTU1MTAyLCAxNTUxMDUsIDE1NTEwOCwgMTU1MTEwLCAxNTUxMTMsIDE1NTExNSwgMTU1MTE5LCAKKyAgICAxNTUxMjEsIDE1NTEyMywgMTU1MTI1LCAxNTUxMjksIDE1NTEzMSwgMTU1MTM1LCAxNTUxMzgsIDE1NTE0NSwgMTU1MTQ4LCAKKyAgICAxNTUxNTMsIDE1NTE1NiwgMTU1MTU5LCAxNTUxNjQsIDE1NTE2OCwgMTU1MTcyLCAxNTUxNzYsIDE1NTE3OCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU1MTgzLCAxNTUxODgsIDE1NTE5MCwgMTU1MTk0LCAKKyAgICAxNTUxOTYsIDE1NTIwMCwgMTU1MjA0LCAxNTUyMTAsIDE1NTIxNCwgMTU1MjE5LCAxNTUyMjIsIDE1NTIyNiwgMTU1MjMwLCAKKyAgICAwLCAwLCAwLCAxNTUyMzQsIDE1NTIzNiwgMTU1MjQyLCAxNTUyNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE1NTI1MCwgMTU1MjU1LCAxNTUyNjAsIDE1NTI2NSwgMTU1MjcwLCAxNTUyNzUsIDE1NTI4MCwgMTU1Mjg3LCAKKyAgICAxNTUyOTQsIDE1NTMwMSwgMTU1MzA4LCAxNTUzMTMsIDE1NTMxOCwgMTU1MzIzLCAxNTUzMjgsIDE1NTMzNSwgMTU1MzQxLCAKKyAgICAxNTUzNDgsIDE1NTM1NSwgMTU1MzYyLCAxNTUzNjcsIDE1NTM3MiwgMTU1Mzc3LCAxNTUzODIsIDE1NTM4NywgMTU1Mzk0LCAKKyAgICAxNTU0MDEsIDE1NTQwNiwgMTU1NDExLCAxNTU0MTgsIDE1NTQyNSwgMTU1NDMzLCAxNTU0NDEsIDE1NTQ0OCwgMTU1NDU1LCAKKyAgICAxNTU0NjMsIDE1NTQ3MSwgMTU1NDc5LCAxNTU0ODYsIDE1NTQ5NiwgMTU1NTA3LCAxNTU1MTIsIDE1NTUxOSwgMTU1NTI2LCAKKyAgICAxNTU1MzMsIDE1NTU0MSwgMTU1NTQ5LCAxNTU1NjAsIDE1NTU2OCwgMTU1NTc2LCAxNTU1ODQsIDE1NTU4OSwgMTU1NTk0LCAKKyAgICAxNTU1OTksIDE1NTYwNCwgMTU1NjA5LCAxNTU2MTQsIDE1NTYxOSwgMTU1NjI0LCAxNTU2MjksIDE1NTYzNCwgMTU1NjM5LCAKKyAgICAxNTU2NDQsIDE1NTY1MSwgMTU1NjU2LCAxNTU2NjEsIDE1NTY2OCwgMTU1NjczLCAxNTU2NzgsIDE1NTY4MywgMTU1Njg4LCAKKyAgICAxNTU2OTMsIDE1NTY5OCwgMTU1NzAzLCAxNTU3MDgsIDE1NTcxMywgMTU1NzE4LCAxNTU3MjMsIDE1NTcyOCwgMTU1NzM1LCAKKyAgICAxNTU3NDMsIDE1NTc0OCwgMTU1NzUzLCAxNTU3NjAsIDE1NTc2NSwgMTU1NzcwLCAxNTU3NzUsIDE1NTc4MiwgMTU1Nzg3LCAKKyAgICAxNTU3OTQsIDE1NTc5OSwgMTU1ODA2LCAxNTU4MTEsIDE1NTgyMCwgMTU1ODI5LCAxNTU4MzQsIDE1NTgzOSwgMTU1ODQ0LCAKKyAgICAxNTU4NDksIDE1NTg1NCwgMTU1ODU5LCAxNTU4NjQsIDE1NTg2OSwgMTU1ODc0LCAxNTU4NzksIDE1NTg4NCwgMTU1ODg5LCAKKyAgICAxNTU4OTQsIDE1NTkwMiwgMTU1OTEwLCAxNTU5MTUsIDE1NTkyMCwgMTU1OTI1LCAxNTU5MzAsIDE1NTkzNSwgMTU1OTQxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU5NDcsIDE1NTk1NSwgMTU1OTYzLCAxNTU5NzEsIAorICAgIDE1NTk3OSwgMTU1OTg1LCAxNTU5OTEsIDE1NTk5NSwgMTU1OTk5LCAxNTYwMDUsIDE1NjAxMSwgMTU2MDIwLCAxNTYwMjQsIAorICAgIDE1NjAyOSwgMTU2MDM1LCAxNTYwMzksIDE1NjA0NCwgMTU2MDQ4LCAxNTYwNTIsIDE1NjA1OCwgMTU2MDY0LCAxNTYwNzQsIAorICAgIDE1NjA4MywgMTU2MDg2LCAxNTYwOTEsIDE1NjA5NywgMTU2MTAzLCAxNTYxMTQsIDE1NjEyNCwgMTU2MTI4LCAxNTYxMzMsIAorICAgIDE1NjEzOSwgMTU2MTQ1LCAxNTYxNTQsIDE1NjE1OSwgMTU2MTYzLCAxNTYxNjgsIDE1NjE3MiwgMTU2MTc4LCAxNTYxODQsIAorICAgIDE1NjE5MCwgMTU2MTk0LCAxNTYxOTcsIDE1NjIwMSwgMTU2MjA0LCAxNTYyMDcsIDE1NjIxMiwgMTU2MjE3LCAxNTYyMjQsIAorICAgIDE1NjIzMiwgMTU2MjM5LCAxNTYyNDYsIDE1NjI1NSwgMTU2MjY0LCAxNTYyNzEsIDE1NjI3OSwgMTU2Mjg2LCAxNTYyOTMsIAorICAgIDE1NjMwMiwgMTU2MzExLCAxNTYzMTgsIDE1NjMyNiwgMTU2MzMzLCAxNTYzNDAsIDE1NjM0OSwgMTU2MzU2LCAxNTYzNjQsIAorICAgIDE1NjM3MCwgMTU2Mzc5LCAxNTYzODcsIDE1NjM5NiwgMTU2NDAzLCAxNTY0MTMsIDE1NjQyNCwgMTU2NDMyLCAxNTY0NDAsIAorICAgIDE1NjQ0OSwgMTU2NDU3LCAxNTY0NjUsIDE1NjQ3NCwgMTU2NDgyLCAxNTY0OTIsIDE1NjUwMSwgMTU2NTA5LCAxNTY1MTcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NjUyNiwgMTU2NTM0LCAKKyAgICAxNTY1NDIsIDE1NjU1MCwgMTU2NTU4LCAxNTY1NjcsIDE1NjU3NiwgMTU2NTg1LCAxNTY1OTQsIDE1NjYwMywgMTU2NjEyLCAKKyAgICAxNTY2MjEsIDAsIDAsIDAsIDAsIDE1NjYzMCwgMTU2NjM4LCAxNTY2NDYsIDE1NjY1NCwgMTU2NjYyLCAxNTY2NjksIAorICAgIDE1NjY3NiwgMTU2NjgzLCAxNTY2OTAsIDE1NjY5OCwgMTU2NzA2LCAxNTY3MTQsIDE1NjcyMiwgMTU2NzMyLCAxNTY3NDIsIAorICAgIDE1Njc1MiwgMTU2NzYyLCAxNTY3NzEsIDE1Njc4MCwgMTU2Nzg5LCAxNTY3OTgsIDE1NjgwNywgMTU2ODE2LCAxNTY4MjUsIAorICAgIDE1NjgzNCwgMTU2ODQyLCAxNTY4NTAsIDE1Njg1OCwgMTU2ODY2LCAxNTY4NzQsIDE1Njg4MiwgMTU2ODkwLCAxNTY4OTgsIAorICAgIDE1NjkwOCwgMTU2OTE4LCAxNTY5MjgsIDE1NjkzOCwgMTU2OTQyLCAxNTY5NDYsIDE1Njk1MCwgMTU2OTU0LCAxNTY5NTcsIAorICAgIDE1Njk2MCwgMTU2OTYzLCAxNTY5NjYsIDE1Njk3MCwgMTU2OTc0LCAxNTY5NzgsIDE1Njk4MiwgMTU2OTg3LCAxNTY5OTIsIAorICAgIDE1Njk5NywgMTU3MDAyLCAxNTcwMDUsIDE1NzAwOCwgMTU3MDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTcwMTQsIAorICAgIDE1NzAxNywgMTU3MDIwLCAxNTcwMjMsIDE1NzAyNiwgMTU3MDMxLCAxNTcwMzYsIDE1NzA0MiwgMTU3MDQ4LCAxNTcwNTIsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE1NzA1NiwgMTU3MDYyLCAxNTcwNjgsIDE1NzA3NCwgMTU3MDgwLCAxNTcwODgsIDE1NzA5NiwgCisgICAgMTU3MTA1LCAxNTcxMTQsIDE1NzExOSwgMTU3MTI0LCAxNTcxMjksIDE1NzEzNCwgMTU3MTQxLCAxNTcxNDgsIDE1NzE1NiwgCisgICAgMTU3MTY0LCAxNTcxNzEsIDE1NzE3OCwgMTU3MTg1LCAxNTcxOTIsIDE1NzIwMSwgMTU3MjEwLCAxNTcyMjAsIDE1NzIzMCwgCisgICAgMTU3MjM2LCAxNTcyNDIsIDE1NzI0OCwgMTU3MjU0LCAxNTcyNjIsIDE1NzI3MCwgMTU3Mjc5LCAxNTcyODgsIDE1NzI5NiwgCisgICAgMTU3MzA0LCAxNTczMTIsIDE1NzMyMCwgMTU3MzMwLCAxNTczNDAsIDE1NzM1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTU3MzYyLCAxNTczNjcsIDE1NzM3MiwgMTU3Mzc3LCAxNTczODIsIDE1NzM5MSwgMTU3NDAwLCAxNTc0MDksIDE1NzQxOCwgCisgICAgMTU3NDI1LCAxNTc0MzIsIDE1NzQzOSwgMTU3NDQ2LCAxNTc0NTMsIDE1NzQ2MiwgMTU3NDcxLCAxNTc0ODAsIDE1NzQ4NSwgCisgICAgMTU3NDkyLCAxNTc0OTksIDE1NzUwNiwgMTU3NTExLCAxNTc1MTYsIDE1NzUyMSwgMTU3NTI2LCAxNTc1MzMsIDE1NzU0MCwgCisgICAgMTU3NTQ3LCAxNTc1NTQsIDE1NzU2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU3NTcwLCAxNTc1NzQsIDE1NzU3OCwgMTU3NTgzLCAxNTc1ODcsIAorICAgIDE1NzU5MSwgMTU3NTk2LCAxNTc2MDAsIDE1NzYwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU3NjEwLCAxNTc2MTIsIAorICAgIDE1NzYxNiwgMTU3NjE4LCAxNTc2MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NzYyNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU3NjI4LCAxNTc2MzIsIDE1NzYzNiwgMTU3NjQwLCAKKyAgICAxNTc2NDQsIDE1NzY0OCwgMTU3NjUyLCAxNTc2NTYsIDE1NzY2MCwgMTU3NjY0LCAxNTc2NjgsIDE1NzY3MiwgMTU3Njc2LCAKKyAgICAxNTc2ODAsIDE1NzY4NCwgMTU3Njg4LCAxNTc2OTIsIDE1NzY5NiwgMTU3NzAwLCAxNTc3MDQsIDE1NzcwOCwgMTU3NzEyLCAKKyAgICAxNTc3MTYsIDE1NzcyMCwgMTU3NzI0LCAxNTc3MjgsIDE1NzczMiwgMTU3NzM2LCAxNTc3NDAsIDE1Nzc0NCwgMTU3NzQ4LCAKKyAgICAxNTc3NTIsIDE1Nzc1NiwgMTU3NzYwLCAxNTc3NjQsIDE1Nzc2OCwgMTU3NzcyLCAxNTc3NzYsIDE1Nzc4MCwgMTU3Nzg0LCAKKyAgICAxNTc3ODgsIDE1Nzc5MiwgMTU3Nzk2LCAxNTc4MDAsIDE1NzgwNCwgMTU3ODA4LCAxNTc4MTIsIDE1NzgxNiwgMTU3ODIwLCAKKyAgICAxNTc4MjQsIDE1NzgyOCwgMTU3ODMyLCAxNTc4MzYsIDE1Nzg0MCwgMTU3ODQ0LCAxNTc4NDgsIDE1Nzg1MiwgMTU3ODU2LCAKKyAgICAxNTc4NjAsIDE1Nzg2NCwgMTU3ODY4LCAxNTc4NzIsIDE1Nzg3NiwgMTU3ODgwLCAxNTc4ODQsIDE1Nzg4OCwgMTU3ODkyLCAKKyAgICAxNTc4OTYsIDE1NzkwMCwgMTU3OTA0LCAxNTc5MDgsIDE1NzkxMiwgMTU3OTE2LCAxNTc5MjAsIDE1NzkyNCwgMTU3OTI4LCAKKyAgICAxNTc5MzIsIDE1NzkzNiwgMTU3OTQwLCAxNTc5NDQsIDE1Nzk0OCwgMTU3OTUyLCAxNTc5NTYsIDE1Nzk2MCwgMTU3OTY0LCAKKyAgICAxNTc5NjgsIDE1Nzk3MiwgMTU3OTc2LCAxNTc5ODAsIDE1Nzk4NCwgMTU3OTg4LCAxNTc5OTIsIDE1Nzk5NiwgMTU4MDAwLCAKKyAgICAxNTgwMDQsIDE1ODAwOCwgMTU4MDEyLCAxNTgwMTYsIDE1ODAyMCwgMTU4MDI0LCAxNTgwMjgsIDE1ODAzMiwgMTU4MDM2LCAKKyAgICAxNTgwNDAsIDE1ODA0NCwgMTU4MDQ4LCAxNTgwNTIsIDE1ODA1NiwgMTU4MDYwLCAxNTgwNjQsIDE1ODA2OCwgMTU4MDcyLCAKKyAgICAxNTgwNzYsIDE1ODA4MCwgMTU4MDg0LCAxNTgwODgsIDE1ODA5MiwgMTU4MDk2LCAxNTgxMDAsIDE1ODEwNCwgMTU4MTA4LCAKKyAgICAxNTgxMTIsIDE1ODExNiwgMTU4MTIwLCAxNTgxMjQsIDE1ODEyOCwgMTU4MTMyLCAxNTgxMzYsIDE1ODE0MCwgMTU4MTQ0LCAKKyAgICAxNTgxNDgsIDE1ODE1MiwgMTU4MTU2LCAxNTgxNjAsIDE1ODE2NCwgMTU4MTY4LCAxNTgxNzIsIDE1ODE3NiwgMTU4MTgwLCAKKyAgICAxNTgxODQsIDE1ODE4OCwgMTU4MTkyLCAxNTgxOTYsIDE1ODIwMCwgMTU4MjA0LCAxNTgyMDgsIDE1ODIxMiwgMTU4MjE2LCAKKyAgICAxNTgyMjAsIDE1ODIyNCwgMTU4MjI4LCAxNTgyMzIsIDE1ODIzNiwgMTU4MjQwLCAxNTgyNDQsIDE1ODI0OCwgMTU4MjUyLCAKKyAgICAxNTgyNTYsIDE1ODI2MCwgMTU4MjY0LCAxNTgyNjgsIDE1ODI3MiwgMTU4Mjc2LCAxNTgyODAsIDE1ODI4NCwgMTU4Mjg4LCAKKyAgICAxNTgyOTIsIDE1ODI5NiwgMTU4MzAwLCAxNTgzMDQsIDE1ODMwOCwgMTU4MzEyLCAxNTgzMTYsIDE1ODMyMCwgMTU4MzI0LCAKKyAgICAxNTgzMjgsIDE1ODMzMiwgMTU4MzM2LCAxNTgzNDAsIDE1ODM0NCwgMTU4MzQ4LCAxNTgzNTIsIDE1ODM1NiwgMTU4MzYwLCAKKyAgICAxNTgzNjQsIDE1ODM2OCwgMTU4MzcyLCAxNTgzNzYsIDE1ODM4MCwgMTU4Mzg0LCAxNTgzODgsIDE1ODM5MiwgMTU4Mzk2LCAKKyAgICAxNTg0MDAsIDE1ODQwNCwgMTU4NDA4LCAxNTg0MTIsIDE1ODQxNiwgMTU4NDIwLCAxNTg0MjQsIDE1ODQyOCwgMTU4NDMyLCAKKyAgICAxNTg0MzYsIDE1ODQ0MCwgMTU4NDQ0LCAxNTg0NDgsIDE1ODQ1MiwgMTU4NDU2LCAxNTg0NjAsIDE1ODQ2NCwgMTU4NDY4LCAKKyAgICAxNTg0NzIsIDE1ODQ3NiwgMTU4NDgwLCAxNTg0ODQsIDE1ODQ4OCwgMTU4NDkyLCAxNTg0OTYsIDE1ODUwMCwgMTU4NTA0LCAKKyAgICAxNTg1MDgsIDE1ODUxMiwgMTU4NTE2LCAxNTg1MjAsIDE1ODUyNCwgMTU4NTI4LCAxNTg1MzIsIDE1ODUzNiwgMTU4NTQwLCAKKyAgICAxNTg1NDQsIDE1ODU0OCwgMTU4NTUyLCAxNTg1NTYsIDE1ODU2MCwgMTU4NTY0LCAxNTg1NjgsIDE1ODU3MiwgMTU4NTc2LCAKKyAgICAxNTg1ODAsIDE1ODU4NCwgMTU4NTg4LCAxNTg1OTIsIDE1ODU5NiwgMTU4NjAwLCAxNTg2MDQsIDE1ODYwOCwgMTU4NjEyLCAKKyAgICAxNTg2MTYsIDE1ODYyMCwgMTU4NjI0LCAxNTg2MjgsIDE1ODYzMiwgMTU4NjM2LCAxNTg2NDAsIDE1ODY0NCwgMTU4NjQ4LCAKKyAgICAxNTg2NTIsIDE1ODY1NiwgMTU4NjYwLCAxNTg2NjQsIDE1ODY2OCwgMTU4NjcyLCAxNTg2NzYsIDE1ODY4MCwgMTU4Njg0LCAKKyAgICAxNTg2ODgsIDE1ODY5MiwgMTU4Njk2LCAxNTg3MDAsIDE1ODcwNCwgMTU4NzA4LCAxNTg3MTIsIDE1ODcxNiwgMTU4NzIwLCAKKyAgICAxNTg3MjQsIDE1ODcyOCwgMTU4NzMyLCAxNTg3MzYsIDE1ODc0MCwgMTU4NzQ0LCAxNTg3NDgsIDE1ODc1MiwgMTU4NzU2LCAKKyAgICAxNTg3NjAsIDE1ODc2NCwgMTU4NzY4LCAxNTg3NzIsIDE1ODc3NiwgMTU4NzgwLCAxNTg3ODQsIDE1ODc4OCwgMTU4NzkyLCAKKyAgICAxNTg3OTYsIDE1ODgwMCwgMTU4ODA0LCAxNTg4MDgsIDE1ODgxMiwgMTU4ODE2LCAxNTg4MjAsIDE1ODgyNCwgMTU4ODI4LCAKKyAgICAxNTg4MzIsIDE1ODgzNiwgMTU4ODQwLCAxNTg4NDQsIDE1ODg0OCwgMTU4ODUyLCAxNTg4NTYsIDE1ODg2MCwgMTU4ODY0LCAKKyAgICAxNTg4NjgsIDE1ODg3MiwgMTU4ODc2LCAxNTg4ODAsIDE1ODg4NCwgMTU4ODg4LCAxNTg4OTIsIDE1ODg5NiwgMTU4OTAwLCAKKyAgICAxNTg5MDQsIDE1ODkwOCwgMTU4OTEyLCAxNTg5MTYsIDE1ODkyMCwgMTU4OTI0LCAxNTg5MjgsIDE1ODkzMiwgMTU4OTM2LCAKKyAgICAxNTg5NDAsIDE1ODk0NCwgMTU4OTQ4LCAxNTg5NTIsIDE1ODk1NiwgMTU4OTYwLCAxNTg5NjQsIDE1ODk2OCwgMTU4OTcyLCAKKyAgICAxNTg5NzYsIDE1ODk4MCwgMTU4OTg0LCAxNTg5ODgsIDE1ODk5MiwgMTU4OTk2LCAxNTkwMDAsIDE1OTAwNCwgMTU5MDA4LCAKKyAgICAxNTkwMTIsIDE1OTAxNiwgMTU5MDIwLCAxNTkwMjQsIDE1OTAyOCwgMTU5MDMyLCAxNTkwMzYsIDE1OTA0MCwgMTU5MDQ0LCAKKyAgICAxNTkwNDgsIDE1OTA1MiwgMTU5MDU2LCAxNTkwNjAsIDE1OTA2NCwgMTU5MDY4LCAxNTkwNzIsIDE1OTA3NiwgMTU5MDgwLCAKKyAgICAxNTkwODQsIDE1OTA4OCwgMTU5MDkyLCAxNTkwOTYsIDE1OTEwMCwgMTU5MTA0LCAxNTkxMDgsIDE1OTExMiwgMTU5MTE2LCAKKyAgICAxNTkxMjAsIDE1OTEyNCwgMTU5MTI4LCAxNTkxMzIsIDE1OTEzNiwgMTU5MTQwLCAxNTkxNDQsIDE1OTE0OCwgMTU5MTUyLCAKKyAgICAxNTkxNTYsIDE1OTE2MCwgMTU5MTY0LCAxNTkxNjgsIDE1OTE3MiwgMTU5MTc2LCAxNTkxODAsIDE1OTE4NCwgMTU5MTg4LCAKKyAgICAxNTkxOTIsIDE1OTE5NiwgMTU5MjAwLCAxNTkyMDQsIDE1OTIwOCwgMTU5MjEyLCAxNTkyMTYsIDE1OTIyMCwgMTU5MjI0LCAKKyAgICAxNTkyMjgsIDE1OTIzMiwgMTU5MjM2LCAxNTkyNDAsIDE1OTI0NCwgMTU5MjQ4LCAxNTkyNTIsIDE1OTI1NiwgMTU5MjYwLCAKKyAgICAxNTkyNjQsIDE1OTI2OCwgMTU5MjcyLCAxNTkyNzYsIDE1OTI4MCwgMTU5Mjg0LCAxNTkyODgsIDE1OTI5MiwgMTU5Mjk2LCAKKyAgICAxNTkzMDAsIDE1OTMwNCwgMTU5MzA4LCAxNTkzMTIsIDE1OTMxNiwgMTU5MzIwLCAxNTkzMjQsIDE1OTMyOCwgMTU5MzMyLCAKKyAgICAxNTkzMzYsIDE1OTM0MCwgMTU5MzQ0LCAxNTkzNDgsIDE1OTM1MiwgMTU5MzU2LCAxNTkzNjAsIDE1OTM2NCwgMTU5MzY4LCAKKyAgICAxNTkzNzIsIDE1OTM3NiwgMTU5MzgwLCAxNTkzODQsIDE1OTM4OCwgMTU5MzkyLCAxNTkzOTYsIDE1OTQwMCwgMTU5NDA0LCAKKyAgICAxNTk0MDgsIDE1OTQxMiwgMTU5NDE2LCAxNTk0MjAsIDE1OTQyNCwgMTU5NDI4LCAxNTk0MzIsIDE1OTQzNiwgMTU5NDQwLCAKKyAgICAxNTk0NDQsIDE1OTQ0OCwgMTU5NDUyLCAxNTk0NTYsIDE1OTQ2MCwgMTU5NDY0LCAxNTk0NjgsIDE1OTQ3MiwgMTU5NDc2LCAKKyAgICAxNTk0ODAsIDE1OTQ4NCwgMTU5NDg4LCAxNTk0OTIsIDE1OTQ5NiwgMTU5NTAwLCAxNTk1MDQsIDE1OTUwOCwgMTU5NTEyLCAKKyAgICAxNTk1MTYsIDE1OTUyMCwgMTU5NTI0LCAxNTk1MjgsIDE1OTUzMiwgMTU5NTM2LCAxNTk1NDAsIDE1OTU0NCwgMTU5NTQ4LCAKKyAgICAxNTk1NTIsIDE1OTU1NiwgMTU5NTYwLCAxNTk1NjQsIDE1OTU2OCwgMTU5NTcyLCAxNTk1NzYsIDE1OTU4MCwgMTU5NTg0LCAKKyAgICAxNTk1ODgsIDE1OTU5MiwgMTU5NTk2LCAxNTk2MDAsIDE1OTYwNCwgMTU5NjA4LCAxNTk2MTIsIDE1OTYxNiwgMTU5NjIwLCAKKyAgICAxNTk2MjQsIDE1OTYyOCwgMTU5NjMyLCAxNTk2MzYsIDE1OTY0MCwgMTU5NjQ0LCAxNTk2NDgsIDE1OTY1MiwgMTU5NjU2LCAKKyAgICAxNTk2NjAsIDE1OTY2NCwgMTU5NjY4LCAxNTk2NzIsIDE1OTY3NiwgMTU5NjgwLCAxNTk2ODQsIDE1OTY4OCwgMTU5NjkyLCAKKyAgICAxNTk2OTYsIDE1OTcwMCwgMTU5NzA0LCAxNTk3MDgsIDE1OTcxMiwgMTU5NzE2LCAxNTk3MjAsIDE1OTcyNCwgMTU5NzI4LCAKKyAgICAxNTk3MzIsIDE1OTczNiwgMTU5NzQwLCAxNTk3NDQsIDE1OTc0OCwgMTU5NzUyLCAxNTk3NTYsIDE1OTc2MCwgMTU5NzY0LCAKKyAgICAxNTk3NjgsIDE1OTc3MiwgMTU5Nzc2LCAxNTk3ODAsIDE1OTc4NCwgMTU5Nzg4LCAxNTk3OTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDE1OTc5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU5ODAwLCAxNTk4MDMsIDE1OTgwNywgMTU5ODExLCAKKyAgICAxNTk4MTQsIDE1OTgxOCwgMTU5ODIyLCAxNTk4MjUsIDE1OTgyOCwgMTU5ODMyLCAxNTk4MzYsIDE1OTgzOSwgMTU5ODQyLCAKKyAgICAxNTk4NDUsIDE1OTg0OCwgMTU5ODUzLCAxNTk4NTYsIDE1OTg2MCwgMTU5ODYzLCAxNTk4NjYsIDE1OTg2OSwgMTU5ODcyLCAKKyAgICAxNTk4NzUsIDE1OTg3OCwgMTU5ODgyLCAxNTk4ODUsIDE1OTg4OSwgMTU5ODkyLCAxNTk4OTUsIDE1OTg5OSwgMTU5OTAzLCAKKyAgICAxNTk5MDcsIDE1OTkxMSwgMTU5OTE2LCAxNTk5MjEsIDE1OTkyNywgMTU5OTMzLCAxNTk5MzksIDE1OTk0NCwgMTU5OTUwLCAKKyAgICAxNTk5NTYsIDE1OTk2MiwgMTU5OTY3LCAxNTk5NzMsIDE1OTk3OSwgMTU5OTg0LCAxNTk5OTAsIDE1OTk5NiwgMTYwMDAxLCAKKyAgICAxNjAwMDcsIDE2MDAxMywgMTYwMDE4LCAxNjAwMjMsIDE2MDAyOSwgMTYwMDM0LCAxNjAwNDAsIDE2MDA0NiwgMTYwMDUyLCAKKyAgICAxNjAwNTgsIDE2MDA2NCwgMTYwMDY4LCAxNjAwNzMsIDE2MDA3NywgMTYwMDgyLCAxNjAwODYsIDE2MDA5MSwgMTYwMDk2LCAKKyAgICAxNjAxMDIsIDE2MDEwOCwgMTYwMTE0LCAxNjAxMTksIDE2MDEyNSwgMTYwMTMxLCAxNjAxMzcsIDE2MDE0MiwgMTYwMTQ4LCAKKyAgICAxNjAxNTQsIDE2MDE1OSwgMTYwMTY1LCAxNjAxNzEsIDE2MDE3NiwgMTYwMTgyLCAxNjAxODgsIDE2MDE5MywgMTYwMTk4LCAKKyAgICAxNjAyMDQsIDE2MDIwOSwgMTYwMjE1LCAxNjAyMjEsIDE2MDIyNywgMTYwMjMzLCAxNjAyMzksIDE2MDI0NCwgMTYwMjQ4LCAKKyAgICAxNjAyNTMsIDE2MDI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYwMjYwLCAxNjAyNjMsIDE2MDI2NiwgMTYwMjY5LCAKKyAgICAxNjAyNzIsIDE2MDI3NSwgMTYwMjc4LCAxNjAyODEsIDE2MDI4NCwgMTYwMjg3LCAxNjAyOTAsIDE2MDI5MywgMTYwMjk2LCAKKyAgICAxNjAyOTksIDE2MDMwMiwgMTYwMzA1LCAxNjAzMDgsIDE2MDMxMSwgMTYwMzE0LCAxNjAzMTcsIDE2MDMyMCwgMTYwMzIzLCAKKyAgICAxNjAzMjYsIDE2MDMyOSwgMTYwMzMyLCAxNjAzMzUsIDE2MDMzOCwgMTYwMzQxLCAxNjAzNDQsIDE2MDM0NywgMTYwMzUwLCAKKyAgICAxNjAzNTMsIDE2MDM1NiwgMTYwMzU5LCAxNjAzNjIsIDE2MDM2NSwgMTYwMzY4LCAxNjAzNzEsIDE2MDM3NCwgMTYwMzc3LCAKKyAgICAxNjAzODAsIDE2MDM4MywgMTYwMzg2LCAxNjAzODksIDE2MDM5MiwgMTYwMzk1LCAxNjAzOTgsIDE2MDQwMSwgMTYwNDA0LCAKKyAgICAxNjA0MDcsIDE2MDQxMCwgMTYwNDEzLCAxNjA0MTYsIDE2MDQxOSwgMTYwNDIyLCAxNjA0MjUsIDE2MDQyOCwgMTYwNDMxLCAKKyAgICAxNjA0MzQsIDE2MDQzNywgMTYwNDQwLCAxNjA0NDMsIDE2MDQ0NiwgMTYwNDQ5LCAxNjA0NTIsIDE2MDQ1NSwgMTYwNDU4LCAKKyAgICAxNjA0NjEsIDE2MDQ2NCwgMTYwNDY3LCAxNjA0NzAsIDE2MDQ3MywgMTYwNDc2LCAxNjA0NzksIDE2MDQ4MiwgMTYwNDg1LCAKKyAgICAxNjA0ODgsIDE2MDQ5MSwgMTYwNDk0LCAxNjA0OTcsIDE2MDUwMCwgMTYwNTAzLCAxNjA1MDYsIDE2MDUwOSwgMTYwNTEyLCAKKyAgICAxNjA1MTUsIDE2MDUxOCwgMTYwNTIxLCAxNjA1MjQsIDE2MDUyNywgMTYwNTMwLCAxNjA1MzMsIDE2MDUzNiwgMTYwNTM5LCAKKyAgICAxNjA1NDIsIDE2MDU0NSwgMTYwNTQ4LCAxNjA1NTEsIDE2MDU1NCwgMTYwNTU3LCAxNjA1NjAsIDE2MDU2MywgMTYwNTY2LCAKKyAgICAxNjA1NjksIDE2MDU3MiwgMTYwNTc1LCAxNjA1NzgsIDE2MDU4MSwgMTYwNTg0LCAxNjA1ODcsIDE2MDU5MCwgMTYwNTkzLCAKKyAgICAxNjA1OTYsIDE2MDU5OSwgMTYwNjAyLCAxNjA2MDUsIDE2MDYwOCwgMTYwNjExLCAxNjA2MTQsIDE2MDYxNywgMTYwNjIwLCAKKyAgICAxNjA2MjMsIDE2MDYyNiwgMTYwNjI5LCAxNjA2MzIsIDE2MDYzNSwgMTYwNjM4LCAxNjA2NDEsIDE2MDY0NCwgMTYwNjQ3LCAKKyAgICAxNjA2NTAsIDE2MDY1MywgMTYwNjU2LCAxNjA2NTksIDE2MDY2MiwgMTYwNjY1LCAxNjA2NjgsIDE2MDY3MSwgMTYwNjc0LCAKKyAgICAxNjA2NzcsIDE2MDY4MCwgMTYwNjgzLCAxNjA2ODYsIDE2MDY4OSwgMTYwNjkyLCAxNjA2OTUsIDE2MDY5OCwgMTYwNzAxLCAKKyAgICAxNjA3MDQsIDE2MDcwNywgMTYwNzEwLCAxNjA3MTMsIDE2MDcxNiwgMTYwNzE5LCAxNjA3MjIsIDE2MDcyNSwgMTYwNzI4LCAKKyAgICAxNjA3MzEsIDE2MDczNCwgMTYwNzM3LCAxNjA3NDAsIDE2MDc0MywgMTYwNzQ2LCAxNjA3NDksIDE2MDc1MiwgMTYwNzU1LCAKKyAgICAxNjA3NTgsIDE2MDc2MSwgMTYwNzY0LCAxNjA3NjcsIDE2MDc3MCwgMTYwNzczLCAxNjA3NzYsIDE2MDc3OSwgMTYwNzgyLCAKKyAgICAxNjA3ODUsIDE2MDc4OCwgMTYwNzkxLCAxNjA3OTQsIDE2MDc5NywgMTYwODAwLCAxNjA4MDMsIDE2MDgwNiwgMTYwODA5LCAKKyAgICAxNjA4MTIsIDE2MDgxNSwgMTYwODE4LCAxNjA4MjEsIDE2MDgyNCwgMTYwODI3LCAxNjA4MzAsIDE2MDgzMywgMTYwODM2LCAKKyAgICAxNjA4MzksIDE2MDg0MiwgMTYwODQ1LCAxNjA4NDgsIDE2MDg1MSwgMTYwODU0LCAxNjA4NTcsIDE2MDg2MCwgMTYwODYzLCAKKyAgICAxNjA4NjYsIDE2MDg2OSwgMTYwODcyLCAxNjA4NzUsIDE2MDg3OCwgMTYwODgxLCAxNjA4ODQsIDE2MDg4NywgMTYwODkwLCAKKyAgICAxNjA4OTMsIDE2MDg5NiwgMTYwODk5LCAxNjA5MDIsIDE2MDkwNSwgMTYwOTA4LCAxNjA5MTEsIDE2MDkxNCwgMTYwOTE3LCAKKyAgICAxNjA5MjAsIDE2MDkyMywgMTYwOTI2LCAxNjA5MjksIDE2MDkzMiwgMTYwOTM1LCAxNjA5MzgsIDE2MDk0MSwgMTYwOTQ0LCAKKyAgICAxNjA5NDcsIDE2MDk1MCwgMTYwOTUzLCAxNjA5NTYsIDE2MDk1OSwgMTYwOTYyLCAxNjA5NjUsIDE2MDk2OCwgMTYwOTcxLCAKKyAgICAxNjA5NzQsIDE2MDk3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYwOTgwLCAKKyAgICAxNjA5ODIsIDE2MDk4NCwgMTYwOTg5LCAxNjA5OTEsIDE2MDk5NiwgMTYwOTk4LCAxNjEwMDMsIDE2MTAwNSwgMTYxMDEwLCAKKyAgICAxNjEwMTIsIDE2MTAxNCwgMTYxMDE2LCAxNjEwMTgsIDE2MTAyMCwgMTYxMDIyLCAxNjEwMjQsIDE2MTAyNiwgMTYxMDI4LCAKKyAgICAxNjEwMzEsIDE2MTAzNSwgMTYxMDM3LCAxNjEwMzksIDE2MTA0MywgMTYxMDQ3LCAxNjEwNTIsIDE2MTA1NCwgMTYxMDU2LCAKKyAgICAxNjEwNTgsIDE2MTA2MiwgMTYxMDY1LCAxNjEwNjcsIDE2MTA3MSwgMTYxMDczLCAxNjEwNzcsIDE2MTA3OSwgMTYxMDgzLCAKKyAgICAxNjEwODYsIDE2MTA4OCwgMTYxMDkyLCAxNjEwOTYsIDE2MTA5OCwgMTYxMTA0LCAxNjExMDYsIDE2MTExMSwgMTYxMTEzLCAKKyAgICAxNjExMTgsIDE2MTEyMCwgMTYxMTI1LCAxNjExMjcsIDE2MTEzMiwgMTYxMTM0LCAxNjExMzcsIDE2MTEzOSwgMTYxMTQzLCAKKyAgICAxNjExNDUsIDE2MTE1MiwgMTYxMTU0LCAxNjExNTYsIDE2MTE1OCwgMTYxMTYzLCAxNjExNjUsIDE2MTE2NywgMTYxMTY5LCAKKyAgICAxNjExNzEsIDE2MTE3MywgMTYxMTc4LCAxNjExODIsIDE2MTE4NCwgMTYxMTg5LCAxNjExOTMsIDE2MTE5NSwgMTYxMjAwLCAKKyAgICAxNjEyMDQsIDE2MTIwNiwgMTYxMjExLCAxNjEyMTUsIDE2MTIxNywgMTYxMjE5LCAxNjEyMjEsIDE2MTIyMywgMTYxMjI3LCAKKyAgICAxNjEyMjksIDE2MTIzNCwgMTYxMjM2LCAxNjEyNDIsIDE2MTI0NCwgMTYxMjUwLCAxNjEyNTIsIDE2MTI1NCwgMTYxMjU2LCAKKyAgICAxNjEyNjAsIDE2MTI2MiwgMTYxMjY5LCAxNjEyNzEsIDE2MTI3OCwgMTYxMjgwLCAxNjEyODUsIDE2MTI5MSwgMTYxMjkzLCAKKyAgICAxNjEyOTksIDE2MTMwNiwgMTYxMzA4LCAxNjEzMTQsIDE2MTMxOSwgMTYxMzIxLCAxNjEzMjcsIDE2MTMzMywgMTYxMzM1LCAKKyAgICAxNjEzNDEsIDE2MTM0NywgMTYxMzQ5LCAxNjEzNTUsIDE2MTM1OSwgMTYxMzYxLCAxNjEzNjYsIDE2MTM2OCwgMTYxMzcwLCAKKyAgICAxNjEzNzUsIDE2MTM3NywgMTYxMzc5LCAxNjEzODUsIDE2MTM4NywgMTYxMzkyLCAxNjEzOTYsIDE2MTM5OCwgMTYxNDAzLCAKKyAgICAxNjE0MDcsIDE2MTQwOSwgMTYxNDE1LCAxNjE0MTcsIDE2MTQyMSwgMTYxNDIzLCAxNjE0MjcsIDE2MTQyOSwgMTYxNDM2LCAKKyAgICAxNjE0NDMsIDE2MTQ0NSwgMTYxNDUyLCAxNjE0NTksIDE2MTQ2MSwgMTYxNDY2LCAxNjE0NjgsIDE2MTQ3NSwgMTYxNDc3LCAKKyAgICAxNjE0ODIsIDE2MTQ4NCwgMTYxNDkwLCAxNjE0OTIsIDE2MTQ5NiwgMTYxNDk4LCAxNjE1MDQsIDE2MTUwNiwgMTYxNTEwLCAKKyAgICAxNjE1MTIsIDE2MTUxOCwgMTYxNTIwLCAxNjE1MjIsIDE2MTUyNCwgMTYxNTI5LCAxNjE1MzQsIDE2MTUzNiwgMTYxNTM4LCAKKyAgICAxNjE1NDgsIDE2MTU1MiwgMTYxNTU5LCAxNjE1NjYsIDE2MTU3MSwgMTYxNTc2LCAxNjE1ODgsIDE2MTU5MCwgMTYxNTkyLCAKKyAgICAxNjE1OTQsIDE2MTU5NiwgMTYxNTk4LCAxNjE2MDAsIDE2MTYwMiwgMTYxNjA0LCAxNjE2MDYsIDE2MTYwOCwgMTYxNjEwLCAKKyAgICAxNjE2MTIsIDE2MTYxNCwgMTYxNjE2LCAxNjE2MTgsIDE2MTYyMCwgMTYxNjIyLCAxNjE2MjQsIDE2MTYyNiwgMTYxNjI4LCAKKyAgICAxNjE2MzAsIDE2MTYzNiwgMTYxNjQzLCAxNjE2NDgsIDE2MTY1NiwgMTYxNjY0LCAxNjE2NjksIDE2MTY4MCwgMTYxNjgyLCAKKyAgICAxNjE2ODQsIDE2MTY4NiwgMTYxNjg4LCAxNjE2OTAsIDE2MTY5MiwgMTYxNjk0LCAxNjE2OTYsIDE2MTY5OCwgMTYxNzAwLCAKKyAgICAxNjE3MDIsIDE2MTcwNCwgMTYxNzA2LCAxNjE3MDgsIDE2MTcxMCwgMTYxNzEyLCAxNjE3MTcsIDE2MTcxOSwgMTYxNzIxLCAKKyAgICAxNjE3MjcsIDE2MTczOSwgMTYxNzUwLCAxNjE3NTIsIDE2MTc1NCwgMTYxNzU2LCAxNjE3NTgsIDE2MTc2MCwgMTYxNzYyLCAKKyAgICAxNjE3NjQsIDE2MTc2NiwgMTYxNzY4LCAxNjE3NzAsIDE2MTc3MiwgMTYxNzc0LCAxNjE3NzYsIDE2MTc3OCwgMTYxNzgwLCAKKyAgICAxNjE3ODIsIDE2MTc4NCwgMTYxNzg2LCAxNjE3ODgsIDE2MTc5MCwgMTYxNzkyLCAxNjE3OTQsIDE2MTc5NiwgMTYxNzk4LCAKKyAgICAxNjE4MDAsIDE2MTgwMiwgMTYxODA0LCAxNjE4MDYsIDE2MTgwOCwgMTYxODEwLCAxNjE4MTIsIDE2MTgxNCwgMTYxODE2LCAKKyAgICAxNjE4MTgsIDE2MTgyMCwgMTYxODIyLCAxNjE4MjQsIDE2MTgyNiwgMTYxODI4LCAxNjE4MzAsIDE2MTgzMiwgMTYxODM0LCAKKyAgICAxNjE4MzYsIDE2MTgzOCwgMTYxODQwLCAxNjE4NDIsIDE2MTg0NCwgMTYxODQ2LCAxNjE4NDgsIDE2MTg1MCwgMTYxODUyLCAKKyAgICAxNjE4NTQsIDE2MTg1NiwgMTYxODU4LCAxNjE4NjAsIDE2MTg2MiwgMTYxODY0LCAxNjE4NjYsIDE2MTg2OCwgMTYxODcwLCAKKyAgICAxNjE4NzIsIDE2MTg3NCwgMTYxODc2LCAxNjE4NzgsIDE2MTg4MCwgMTYxODgyLCAxNjE4ODQsIDE2MTg4NiwgMTYxODg4LCAKKyAgICAxNjE4OTAsIDE2MTg5MiwgMTYxODk0LCAxNjE4OTYsIDE2MTg5OCwgMTYxOTAwLCAxNjE5MDIsIDE2MTkwNCwgMTYxOTA2LCAKKyAgICAxNjE5MDgsIDE2MTkxMCwgMTYxOTEyLCAxNjE5MTQsIDE2MTkxNiwgMTYxOTE4LCAxNjE5MjAsIDE2MTkyMiwgMTYxOTI0LCAKKyAgICAxNjE5MjYsIDE2MTkyOCwgMTYxOTMwLCAxNjE5MzIsIDE2MTkzNCwgMTYxOTM2LCAxNjE5MzgsIDE2MTk0MCwgMTYxOTQyLCAKKyAgICAxNjE5NDQsIDE2MTk0NiwgMTYxOTQ4LCAxNjE5NTAsIDE2MTk1MiwgMTYxOTU0LCAxNjE5NTYsIDE2MTk1OCwgMTYxOTYwLCAKKyAgICAxNjE5NjIsIDE2MTk2NCwgMTYxOTY2LCAxNjE5NjgsIDE2MTk3MCwgMTYxOTcyLCAxNjE5NzQsIDE2MTk3NiwgMTYxOTc4LCAKKyAgICAxNjE5ODAsIDE2MTk4MiwgMTYxOTg0LCAxNjE5ODYsIDE2MTk4OCwgMTYxOTkwLCAxNjE5OTIsIDE2MTk5NCwgMTYxOTk2LCAKKyAgICAxNjE5OTgsIDE2MjAwMCwgMTYyMDAyLCAxNjIwMDQsIDE2MjAwNiwgMTYyMDA4LCAxNjIwMTAsIDE2MjAxMiwgMTYyMDE0LCAKKyAgICAxNjIwMTYsIDE2MjAxOCwgMTYyMDIwLCAxNjIwMjIsIDE2MjAyNCwgMTYyMDI2LCAxNjIwMjgsIDE2MjAzMCwgMTYyMDMyLCAKKyAgICAxNjIwMzQsIDE2MjAzNiwgMTYyMDM4LCAxNjIwNDAsIDE2MjA0MiwgMTYyMDQ0LCAxNjIwNDYsIDE2MjA0OCwgMTYyMDUwLCAKKyAgICAxNjIwNTIsIDE2MjA1NCwgMTYyMDU2LCAxNjIwNTgsIDE2MjA2MCwgMTYyMDYyLCAxNjIwNjQsIDE2MjA2NiwgMTYyMDY4LCAKKyAgICAxNjIwNzAsIDE2MjA3MiwgMTYyMDc0LCAxNjIwNzYsIDE2MjA3OCwgMTYyMDgwLCAxNjIwODIsIDE2MjA4NCwgMTYyMDg2LCAKKyAgICAxNjIwODgsIDE2MjA5MCwgMTYyMDkyLCAxNjIwOTQsIDE2MjA5NiwgMTYyMDk4LCAxNjIxMDAsIDE2MjEwMiwgMTYyMTA0LCAKKyAgICAxNjIxMDYsIDE2MjEwOCwgMTYyMTEwLCAxNjIxMTIsIDE2MjExNCwgMTYyMTE2LCAxNjIxMTgsIDE2MjEyMCwgMTYyMTIyLCAKKyAgICAxNjIxMjQsIDE2MjEyNiwgMTYyMTI4LCAxNjIxMzAsIDE2MjEzMiwgMTYyMTM0LCAxNjIxMzYsIDE2MjEzOCwgMTYyMTQwLCAKKyAgICAxNjIxNDIsIDE2MjE0NCwgMTYyMTQ2LCAxNjIxNDgsIDE2MjE1MCwgMTYyMTUyLCAxNjIxNTQsIDE2MjE1NiwgMTYyMTU4LCAKKyAgICAxNjIxNjAsIDE2MjE2MiwgMTYyMTY0LCAxNjIxNjYsIDE2MjE2OCwgMTYyMTcwLCAxNjIxNzIsIDE2MjE3NCwgMTYyMTc2LCAKKyAgICAxNjIxNzgsIDE2MjE4MCwgMTYyMTgyLCAxNjIxODQsIDE2MjE4NiwgMTYyMTg4LCAxNjIxOTAsIDE2MjE5MiwgMTYyMTk0LCAKKyAgICAxNjIxOTYsIDE2MjE5OCwgMTYyMjAwLCAxNjIyMDIsIDE2MjIwNCwgMTYyMjA2LCAxNjIyMDgsIDE2MjIxMCwgMTYyMjEyLCAKKyAgICAxNjIyMTQsIDE2MjIxNiwgMTYyMjE4LCAxNjIyMjAsIDE2MjIyMiwgMTYyMjI0LCAxNjIyMjYsIDE2MjIyOCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTYyMjMwLCAxNjIyNDAsIDE2MjI1MCwgMTYyMjU5LCAxNjIyNjgsIDE2MjI4MSwgMTYyMjk0LCAxNjIzMDYsIAorICAgIDE2MjMxOCwgMTYyMzI4LCAxNjIzMzgsIDE2MjM0OCwgMTYyMzU4LCAxNjIzNjksIDE2MjM4MCwgMTYyMzkwLCAxNjIzOTksIAorICAgIDE2MjQwOCwgMTYyNDE3LCAxNjI0MzAsIDE2MjQ0MywgMTYyNDU1LCAxNjI0NjcsIDE2MjQ3NywgMTYyNDg3LCAxNjI0OTcsIAorICAgIDE2MjUwNywgMTYyNTE2LCAxNjI1MjUsIDE2MjUzNSwgMTYyNTQ1LCAxNjI1NTQsIDE2MjU2MywgMTYyNTczLCAxNjI1ODMsIAorICAgIDE2MjU5MiwgMTYyNjAxLCAxNjI2MTEsIDE2MjYyMSwgMTYyNjMyLCAxNjI2NDMsIDE2MjY1MywgMTYyNjY2LCAxNjI2NzcsIAorICAgIDE2MjY5MSwgMTYyNjk5LCAxNjI3MTAsIDE2MjcxOCwgMTYyNzI2LCAxNjI3MzQsIDE2Mjc0MiwgMTYyNzUwLCAxNjI3NTgsIAorICAgIDE2Mjc2NywgMTYyNzc2LCAxNjI3ODYsIDE2Mjc5NiwgMTYyODA1LCAxNjI4MTQsIDE2MjgyNCwgMTYyODM0LCAxNjI4NDIsIAorICAgIDE2Mjg1MCwgMTYyODU3LCAxNjI4NjcsIDE2Mjg3NiwgMTYyODg0LCAxNjI4OTEsIDE2MjkwMSwgMTYyOTEwLCAxNjI5MjEsIAorICAgIDE2MjkzMiwgMTYyOTQ0LCAxNjI5NTUsIDE2Mjk2NSwgMTYyOTc2LCAxNjI5ODYsIDE2Mjk5NywgMTYzMDA1LCAxNjMwMDksIAorICAgIDE2MzAxMywgMTYzMDE3LCAxNjMwMjEsIDE2MzAyNSwgMTYzMDI5LCAxNjMwMzMsIDE2MzAzNywgMTYzMDQxLCAxNjMwNDUsIAorICAgIDE2MzA0OSwgMTYzMDUzLCAxNjMwNTYsIDE2MzA1OSwgMTYzMDYzLCAxNjMwNjcsIDE2MzA3MSwgMTYzMDc1LCAxNjMwNzksIAorICAgIDE2MzA4MywgMTYzMDg3LCAxNjMwOTEsIDE2MzA5NCwgMTYzMDk4LCAxNjMxMDIsIDE2MzEwNiwgMTYzMTEwLCAxNjMxMTQsIAorICAgIDE2MzExOCwgMTYzMTIyLCAxNjMxMjYsIDE2MzEzMCwgMTYzMTM0LCAxNjMxMzgsIDE2MzE0MiwgMTYzMTQ2LCAxNjMxNTAsIAorICAgIDE2MzE1NCwgMTYzMTU4LCAxNjMxNjIsIDE2MzE2NiwgMTYzMTcwLCAxNjMxNzQsIDE2MzE3OCwgMTYzMTgyLCAxNjMxODYsIAorICAgIDE2MzE5MCwgMTYzMTk0LCAxNjMxOTgsIDE2MzIwMiwgMTYzMjA2LCAxNjMyMTAsIDE2MzIxNCwgMTYzMjE4LCAxNjMyMjIsIAorICAgIDE2MzIyNiwgMTYzMjMwLCAxNjMyMzQsIDE2MzIzOCwgMTYzMjQyLCAxNjMyNDYsIDE2MzI1MCwgMTYzMjU0LCAxNjMyNTgsIAorICAgIDE2MzI2MiwgMTYzMjY2LCAxNjMyNzAsIDE2MzI3NCwgMTYzMjc4LCAxNjMyODIsIDE2MzI4NiwgMTYzMjkwLCAxNjMyOTQsIAorICAgIDE2MzI5OCwgMTYzMzAyLCAxNjMzMDYsIDE2MzMxMCwgMTYzMzE0LCAxNjMzMTgsIDE2MzMyMiwgMTYzMzI2LCAxNjMzMzAsIAorICAgIDE2MzMzNCwgMTYzMzM4LCAxNjMzNDIsIDE2MzM0NiwgMTYzMzUwLCAxNjMzNTQsIDE2MzM1OCwgMTYzMzYyLCAxNjMzNjYsIAorICAgIDE2MzM3MCwgMTYzMzc0LCAxNjMzNzgsIDE2MzM4MiwgMTYzMzg2LCAxNjMzOTAsIDE2MzM5NCwgMTYzMzk4LCAxNjM0MDEsIAorICAgIDE2MzQwNSwgMTYzNDA5LCAxNjM0MTMsIDE2MzQxNywgMTYzNDIxLCAxNjM0MjUsIDE2MzQyOSwgMTYzNDMzLCAxNjM0MzcsIAorICAgIDE2MzQ0MSwgMTYzNDQ1LCAxNjM0NDksIDE2MzQ1MywgMTYzNDU3LCAxNjM0NjEsIDE2MzQ2NSwgMTYzNDY5LCAxNjM0NzMsIAorICAgIDE2MzQ3NywgMTYzNDgxLCAxNjM0ODUsIDE2MzQ4OSwgMTYzNDkzLCAxNjM0OTcsIDE2MzUwMSwgMTYzNTA1LCAxNjM1MDksIAorICAgIDE2MzUxMywgMTYzNTE3LCAxNjM1MjEsIDE2MzUyNSwgMTYzNTI5LCAxNjM1MzMsIDE2MzUzNywgMTYzNTQxLCAxNjM1NDUsIAorICAgIDE2MzU0OSwgMTYzNTUzLCAxNjM1NTcsIDE2MzU2MSwgMTYzNTY1LCAxNjM1NjksIDE2MzU3MywgMTYzNTc3LCAxNjM1ODEsIAorICAgIDE2MzU4NSwgMTYzNTg5LCAxNjM1OTMsIDE2MzU5NywgMTYzNjAxLCAxNjM2MDUsIDE2MzYwOSwgMTYzNjEzLCAxNjM2MTcsIAorICAgIDE2MzYyMSwgMTYzNjI1LCAxNjM2MjksIDE2MzYzMywgMTYzNjM3LCAxNjM2NDEsIDE2MzY0NSwgMTYzNjQ5LCAxNjM2NTMsIAorICAgIDE2MzY1NywgMTYzNjYxLCAxNjM2NjUsIDE2MzY2OSwgMTYzNjczLCAxNjM2NzcsIDE2MzY4MSwgMTYzNjg1LCAxNjM2ODksIAorICAgIDE2MzY5MywgMTYzNjk3LCAxNjM3MDEsIDE2MzcwNSwgMTYzNzA5LCAxNjM3MTMsIDE2MzcxNywgMTYzNzIxLCAxNjM3MjUsIAorICAgIDE2MzcyOSwgMTYzNzMzLCAxNjM3MzcsIDE2Mzc0MSwgMTYzNzQ1LCAxNjM3NDksIDE2Mzc1MywgMTYzNzU3LCAxNjM3NjEsIAorICAgIDE2Mzc2NSwgMTYzNzY5LCAxNjM3NzMsIDE2Mzc3NywgMTYzNzgxLCAxNjM3ODUsIDE2Mzc4OSwgMTYzNzkzLCAxNjM3OTcsIAorICAgIDE2MzgwMSwgMTYzODA1LCAxNjM4MDksIDE2MzgxMywgMTYzODE3LCAxNjM4MjEsIDE2MzgyNSwgMTYzODI5LCAxNjM4MzMsIAorICAgIDE2MzgzNywgMTYzODQxLCAxNjM4NDUsIDE2Mzg0OSwgMTYzODUzLCAxNjM4NTcsIDE2Mzg2MSwgMTYzODY1LCAxNjM4NjksIAorICAgIDE2Mzg3MywgMTYzODc3LCAxNjM4ODEsIDE2Mzg4NSwgMTYzODg5LCAxNjM4OTMsIDE2Mzg5NywgMTYzOTAxLCAxNjM5MDUsIAorICAgIDE2MzkwOSwgMTYzOTEzLCAxNjM5MTcsIDE2MzkyMSwgMTYzOTI1LCAxNjM5MjksIDE2MzkzMywgMTYzOTM3LCAxNjM5NDEsIAorICAgIDE2Mzk0NSwgMTYzOTQ5LCAxNjM5NTMsIDE2Mzk1NywgMTYzOTYxLCAxNjM5NjUsIDE2Mzk2OSwgMTYzOTczLCAxNjM5NzcsIAorICAgIDE2Mzk4MSwgMTYzOTg1LCAxNjM5ODksIDE2Mzk5MywgMTYzOTk3LCAxNjQwMDEsIDE2NDAwNSwgMTY0MDA5LCAxNjQwMTMsIAorICAgIDE2NDAxNywgMTY0MDIxLCAxNjQwMjUsIDE2NDAyOSwgMTY0MDMzLCAxNjQwMzcsIDE2NDA0MSwgMTY0MDQ1LCAxNjQwNDksIAorICAgIDE2NDA1MywgMTY0MDU3LCAxNjQwNjEsIDE2NDA2NSwgMTY0MDY5LCAxNjQwNzMsIDE2NDA3NywgMTY0MDgxLCAxNjQwODUsIAorICAgIDE2NDA4OSwgMTY0MDkzLCAxNjQwOTcsIDE2NDEwMSwgMTY0MTA1LCAxNjQxMDksIDE2NDExMywgMTY0MTE3LCAxNjQxMjEsIAorICAgIDE2NDEyNSwgMTY0MTI5LCAxNjQxMzMsIDE2NDEzNywgMTY0MTQxLCAxNjQxNDUsIDE2NDE0OSwgMTY0MTUzLCAxNjQxNTcsIAorICAgIDE2NDE2MSwgMTY0MTY1LCAxNjQxNzAsIDE2NDE3NSwgMTY0MTgwLCAxNjQxODQsIDE2NDE5MCwgMTY0MTk3LCAxNjQyMDQsIAorICAgIDE2NDIxMSwgMTY0MjE4LCAxNjQyMjUsIDE2NDIzMiwgMTY0MjM5LCAxNjQyNDYsIDE2NDI1MywgMTY0MjYwLCAxNjQyNjcsIAorICAgIDE2NDI3NCwgMTY0MjgxLCAxNjQyODgsIDE2NDI5NSwgMTY0MzAyLCAxNjQzMDgsIDE2NDMxNSwgMTY0MzIyLCAxNjQzMjksIAorICAgIDE2NDMzNiwgMTY0MzQzLCAxNjQzNTAsIDE2NDM1NywgMTY0MzY0LCAxNjQzNzEsIDE2NDM3OCwgMTY0Mzg1LCAxNjQzOTIsIAorICAgIDE2NDM5OSwgMTY0NDA2LCAxNjQ0MTIsIDE2NDQxOSwgMTY0NDI2LCAxNjQ0MzUsIDE2NDQ0NCwgMTY0NDUzLCAxNjQ0NjIsIAorICAgIDE2NDQ2NywgMTY0NDcyLCAxNjQ0NzgsIDE2NDQ4NCwgMTY0NDkwLCAxNjQ0OTYsIDE2NDUwMiwgMTY0NTA4LCAxNjQ1MTQsIAorICAgIDE2NDUyMCwgMTY0NTI2LCAxNjQ1MzIsIDE2NDUzOCwgMTY0NTQ0LCAxNjQ1NDksIDE2NDU1NSwgMTY0NTY1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKIH07CiAKIC8qIG5hbWUtPmNvZGUgZGljdGlvbmFyeSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBjb2RlX2hhc2hbXSA9IHsKLSAgICA3NDIyNCwgNDg1MSwgMCwgNzgxNTYsIDc4NDk5LCAxMjg2ODUsIDc5MjksIDAsIDE5NDY4MiwgMTI3NzY2LCA3ODUwMCwgCi0gICAgNjY0ODAsIDAsIDQyODMzLCA3NDUyOSwgMTIwNjQsIDAsIDU5NiwgOTgzODIxLCA2OTg1MCwgMTMxOTIsIDg2NTEsIDAsIDAsIAotICAgIDEyMDIxOCwgMTI5OTUsIDY0ODY1LCAxMzczLCAwLCAwLCA1ODE2LCAxMTkwNjcsIDY0ODEwLCA0MjMxLCA2ODI1LCA0Mjg5NywgCi0gICAgNDIzMywgNDIzNCwgNDIzMiwgOTE3ODM2LCA3NDQxNSwgMTIwMjEwLCA2Mzg0LCA5MTc4NDAsIDc4MTA4LCA4ODUxLCAwLCAKLSAgICAxMjg1NTMsIDAsIDQxNjAxLCA4ODc0LCA5ODM3ODMsIDc3NDgsIDAsIDAsIDAsIDEyNzkzOSwgNDE2MDMsIDk3ODQsIDAsIAotICAgIDkxODgsIDQxNjAwLCAwLCAxMjA2MTgsIDEyODM0MywgMTQ1NywgMzUzNSwgMCwgMCwgMCwgMCwgNjUyNDAsIDExOTUxLCAwLCAKLSAgICAzNDA0LCAwLCAwLCAwLCAxNzU5LCAwLCA0MTA3NiwgNjgzODMsIDEyMDU3MiwgMTE5MjA1LCA2NjU3NywgOTQwMTQsIAotICAgIDEyNzc2NCwgNjU4NTksIDAsIDc0MDQsIDAsIDAsIDAsIDAsIDY1OTA4LCA5ODM0LCAzMDU1LCA5ODUyLCA5ODM4NjAsIAotICAgIDY1Mjg4LCAwLCAxMTM5OCwgMCwgOTI0MTcsIDExOTI1NSwgMCwgMCwgNjAzLCA3NDM5OCwgNDM1NDgsIDAsIDAsIDkxNzgyNCwgCi0gICAgMzM1MCwgMTIwODE3LCA2NDMxOCwgOTE3ODI4LCAxMjcwODksIDMzOTAsIDc0NDgzLCA0MzI2NSwgMTIwNTk5LCA5MTc4MzAsIAotICAgIDc4NTczLCAwLCAxOTE5LCAzNDAwLCAxMjA2NTEsIDEyNzk0NCwgMTE2NDcsIDkxNzU0MCwgNjY0NDYsIDY0MTQxLCA4NTYyLCAKLSAgICAyMTIxLCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAxMTI5NywgOTgzNjg4LCA5ODMxNTIsIDExOTY2LCAKLSAgICA2NDEyOCwgMTI4NTg3LCAwLCAwLCA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgOTgzODQ0LCA0MzM3NCwgOTc3OSwgCi0gICAgMjc2NCwgNjYwMDIsIDEwMTY3LCA5NDcxLCAwLCA2NjAyMSwgMCwgMCwgNTQ1NywgNTQ0MCwgODg1NywgOTM5ODEsIDY1MjgyLCAKLSAgICAyODQzLCA1MzU1LCAxMjc5MjgsIDk4Mzk2NSwgMCwgNTE5NCwgMTE2NTcsIDQzOTg0LCAxMjgyOTIsIDAsIDk4MzYyMCwgMCwgCi0gICAgMCwgMTI3MDI3LCAxMDcxNywgNjQ1NzAsIDU2MzAsIDUzOTYsIDY0MTQzLCAxMDY4MiwgMCwgMTA2MDIsIDgwMCwgNDI0OTksIAotICAgIDY2MTg2LCAwLCAwLCA2NDkzMCwgMTE2MzEsIDY0MTQ2LCA2NDE0NSwgNjQxNDQsIDc2MiwgMTMxNzIsIDExODg1OSwgCi0gICAgMTk0NjYxLCA2NDQ2OCwgMTA5MDYsIDEzNTMsIDY5NjAsIDAsIDAsIDU4MjgsIDg3MjQsIDkxNzgwNiwgODkzMywgMTYwMSwgCi0gICAgNDIyNDQsIDg1OCwgNzA4MCwgNjQxMDksIDY0MTA4LCA4MDkwLCAwLCA3NDQwMSwgOTE3ODExLCA1ODcsIDAsIDEyODEzMSwgCi0gICAgMCwgMCwgMCwgNzgyMTQsIDI3NTAsIDc0MjE4LCA1NTYsIDY0MTU4LCA2NDE1NywgOTgzOTQ5LCAxMjIxMywgMTk0Njc4LCAKLSAgICAyNzYwLCAwLCAwLCAwLCAxOTQ3OTQsIDY0MTU2LCA2NDE1NSwgNDI0OTYsIDAsIDY0MTUxLCA2NDE1MCwgMTI2NzksIAotICAgIDEwMDUzLCAxMDQyMSwgMTEwOTMsIDY0MTUzLCA2NDE1MiwgMCwgMCwgNDgzOSwgMCwgMCwgMTg3NCwgMTE5MDE2LCAwLCAKLSAgICA2NTc3LCA2NDEyNSwgNjQxMjQsIDY0MTIzLCAwLCAxMjc1MzEsIDkyNTM0LCA3MDA3LCA3NTkwLCA2NTQ0MywgOTAzNiwgCi0gICAgOTI1NTAsIDY0MTIyLCA3NDQyMiwgNjY2MDksIDAsIDY0MTE3LCA2NDExNiwgNjI4NywgNjQxMTQsIDI3MjUsIDY0MTIwLCAKLSAgICA2NDExOSwgNDM5ODEsIDQyMTI4LCAxMjc4NDIsIDExNzcsIDY1NjAxLCAxMjMyMiwgNjQxMDYsIDY5NjQwLCAxMjczMDYsIAotICAgIDY0MTAyLCA3ODU5LCAxOTQ1LCA2NDA5OSwgMCwgMTA0NTMsIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCA3Mzg5LCA5ODMxNjEsIAotICAgIDg3MDUsIDY0MDk3LCA2NDA5NiwgOTU3MSwgNTI4LCAxMjg2NzEsIDQ0MDE3LCAxMTQyOSwgNzEzNDcsIDAsIDk4MzA3NywgCi0gICAgOTE3OTkwLCA3Mzg0MSwgMCwgMCwgOTA1NiwgNjQzMTMsIDYxODgsIDEyMDAxOSwgNjE1NSwgNjQwNjgsIDE4MjMsIDY0MDY2LCAKLSAgICA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgOTIyMTIsIDAsIDQxOTA0LCA2NjM5LCA2NDA2NCwgOTgzNzc1LCAKLSAgICAxMjgzNDQsIDAsIDExNzYsIDExODk1OSwgMTI3OTMwLCA4MTYyLCAxMjg2NjcsIDk4MzgzMSwgMCwgMTIwNTE5LCA2NjM3NiwgCi0gICAgNjYyNDIsIDExNDE1LCA0MzMzLCA5ODU1LCA2NDExMiwgNjQ2NDIsIDAsIDUzODgsIDAsIDAsIDAsIDc3MTQsIDY2MjIyLCAKLSAgICA2OTkwMiwgNzc2OCwgMCwgNDE5OSwgNjQ3MDgsIDk4MzQyMSwgMCwgMCwgODcwOCwgOTU2MCwgNjQwNzcsIDY0MDc2LCAKLSAgICA4OTk2LCA0OTkyLCA0NDcxLCA0MjYyMiwgNjQwNzksIDY0MDc4LCA5MjE3OSwgMCwgMTI2NTcwLCAwLCA2NDYxNSwgNDE5MTUsIAotICAgIDAsIDEyMDc1LCA3MDA2MiwgMCwgNTE3NCwgOTgzMjE3LCAwLCAxMjc1NTcsIDMxMjMsIDAsIDEyNjg1LCAxMjc5MDQsIAotICAgIDg0MDgsIDY0NzA0LCAwLCAwLCA5MjIzLCAwLCA0MTYxNiwgNjc5OTksIDczNzk3LCAwLCAxMTE2LCAxMjgyMDQsIDQzMDQ5LCAKLSAgICA3MTM2LCA0MzA1MCwgODU0OCwgMTIwNDg1LCAwLCAxMTkwNjEsIDkxNzk5OSwgMCwgMTMxMTUsIDQzNjc1LCA2NDA5MSwgCi0gICAgOTMyMiwgMCwgMTIwNTk1LCA2NDA5NSwgNjQwOTQsIDgxMTEsIDY2MjQ3LCA0MjMzMiwgNjQwODksIDY0MDg4LCA2MTk5LCAwLCAKLSAgICAwLCAxMTQzNCwgNjQwODMsIDY0MDgyLCAxMTMyOSwgNzczNywgNjQwODcsIDY0MDg2LCA2NDA4NSwgNjQwODQsIDE5NDgxNywgCi0gICAgOTkyNywgNDEzMzUsIDQxMTgsIDE3OTcsIDAsIDQxMzM0LCAwLCA0NiwgNDM0NDgsIDEyNzg4MSwgMjk4LCAwLCAxMjgxMTQsIAotICAgIDAsIDQyNjI3LCAwLCAzMiwgNjE4NywgMTE5MDUyLCAxMTQ5NSwgMTE0NTksIDM2NjUsIDk4MzYwMCwgNDI4NzEsIDAsIAotICAgIDE5OTIzLCA3NDMzNSwgMCwgMTI3MTkyLCA2NjIzOSwgNDIyNjQsIDY0NDAzLCA0NDEyLCA3MjQwLCA5MjQ5NSwgMCwgCi0gICAgOTgzNDY2LCA2NTc1OCwgMTI3NTAsIDQxODEsIDg1NDQsIDAsIDEyMDE5OSwgOTE3ODk3LCAxMjAxOTgsIDY5ODA5LCA2MTgxLCAKLSAgICA2NTAxNCwgMCwgMCwgOTgzMTk2LCAzNjM5LCAxMTk1ODgsIDAsIDAsIDExODkwNCwgMTAwNzMsIDEyMDIwNiwgMTI4ODYyLCAKLSAgICAxMjcxODYsIDY4NDA5LCA0Mjg0NCwgNzQ5OCwgMTA5OCwgOTI1NjUsIDEyMDIwNSwgMCwgOTgzMTE4LCAxMDIwNywgODc4OSwgCi0gICAgOTgzMjI1LCAwLCAwLCA5ODM0NzIsIDkyMzQsIDAsIDYxODIsIDk4MzQ3NCwgNjUwNTgsIDAsIDk4MzQ3OCwgOTgzNDc1LCAwLCAKLSAgICA1NDcxLCA5NDYxLCA1NTczLCAxMTg5MzYsIDU0NzMsIDQ0LCAwLCA2NjI0NCwgOTQwNzIsIDAsIDY2MjM4LCAxMjg0NCwgMCwgCi0gICAgMTYyMiwgNzc2NywgMTkwMCwgNDEzMzksIDExNDU4LCAwLCAwLCA2NTgxLCA1NTc2LCAwLCA2NDQwNSwgNDEzMzcsIDAsIAotICAgIDQxNjMxLCA4OTQ3LCA2ODM5MCwgMTI3ODQ0LCA0MTY5NCwgMCwgMCwgNzkwOCwgMCwgMTA0MDgsIDY1NzksIDAsIDY0NjE4LCAKLSAgICAwLCAxMjAxNDcsIDIxMzgsIDY1ODMsIDc3NjEsIDEyNzAxMCwgMTIwNTA0LCAxOTQ4MjgsIDAsIDUwNTgsIDQxMDEwLCAKLSAgICA5OTkyLCAxMjgyOTksIDUwNTcsIDAsIDAsIDc0NTM4LCA1MDU0LCAxMTg5NTEsIDE5NDk3MSwgNzg2MDYsIDAsIDE0MzcsIAotICAgIDQxNjE3LCA2NTgsIDM0OTcsIDEyODUwOSwgNzQ4NiwgNTA2MSwgNTA2MCwgNDIzNSwgMTI3ODc4LCAwLCAxMjg1MjksIAotICAgIDEyMTEzLCA0MjM2LCA0NzI3LCAwLCAwLCA3NjkzLCAxMDc0OSwgMCwgNzQ4OCwgNTc3MywgOTc4LCAxMjgxMzQsIDAsIAotICAgIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDAsIDY2MjA5LCAwLCAxMjg3MDAsIDk3NDgsIDk4Mzk1NiwgMTI3NTI0LCAwLCAwLCAwLCAKLSAgICAwLCAxOTUwODMsIDAsIDk4Mzg0MywgMCwgMCwgMCwgMCwgMCwgOTM0MSwgMTE5NTk2LCAyMzc5LCAxMTMyNSwgMCwgNjQ2NjgsIAotICAgIDY3ODU0LCA4MTI1LCAxMjA1NDUsIDY3NDMsIDExOTE3NSwgOTE3OTQwLCAyMzY5LCAwLCA5ODM5NzIsIDk4Mzk3MywgCi0gICAgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDQzNjYwLCAwLCAwLCAwLCAyMzY3LCAxMjc4MjcsIDk4Mzg1NywgMjY0LCAKLSAgICAyMzc1LCA4MDYwLCA2MTk0LCAxMTk4NTgsIDE4NDQsIDExOTA4NCwgMCwgNjAxOSwgMCwgMCwgNjk2MSwgMCwgMTE4ODM5LCAKLSAgICAwLCA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDkyMzMzLCA3MjUsIAotICAgIDY1MDQyLCAxMTg3OTcsIDEyMDgwMCwgOTgzMDQwLCAxMjg5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjYxLCAxMjA3MDcsIAotICAgIDk4MzEyOCwgMCwgNTA3NCwgNTA3MywgMTI4NzkwLCA4OTgzLCAxMTg5ODEsIDc0NDkzLCA5ODM1NjEsIDUwNzIsIDkzOTc3LCAKLSAgICA2MTk4LCAxMTYxNCwgMCwgMTk2LCAwLCAwLCAwLCA0OTI5LCAxMjAzNDIsIDAsIDAsIDAsIDAsIDQyODQ3LCAwLCAwLCAwLCAKLSAgICA0OTM0LCAwLCA0MTMyMywgOTc1OCwgMCwgOTIyODksIDEyNzkxNywgNDI1ODQsIDAsIDQzMjksIDQxMzIxLCA0OTc5LCAKLSAgICAzMDQ4LCA3NzUyLCA0MTMyMCwgOTgzMDQyLCA3NDQxOCwgMTI4MTksIDAsIDUwNzEsIDAsIDM2NDIsIDAsIDUwNzAsIAotICAgIDEwMDQyLCAxMTg4MzUsIDM5ODcsIDUwNjgsIDAsIDg5MDksIDc4NjUwLCA3ODY0OSwgNjk5MTcsIDEwNjM2LCA3Mzk4MSwgCi0gICAgMTE4MDYsIDQzMTY3LCA0NTMxLCAxMjQ1LCA5MTA1LCA2NjQ2MywgNDkyMSwgMTIwMjE5LCA0OTI2LCA2NTU0NCwgNzM4ODQsIAotICAgIDE5NDYxOSwgMCwgMCwgNjQ3MDksIDAsIDE5NDYyMCwgNzg4ODAsIDQ5MjIsIDMyNSwgOTkyLCAxMTk1NjgsIDQ5MjUsIDAsIAotICAgIDAsIDk1MjYsIDQ5MjAsIDAsIDk0OCwgMCwgMTIwMjA4LCA0OTMwLCAwLCA5MjE3NSwgMTIwMjc1LCA0OTMzLCAxMjAyMTEsIAotICAgIDAsIDExODk4NSwgNDkyOCwgMCwgMCwgNzQ3NzAsIDEyMDE5NCwgMTI2NTQ4LCA3MjIsIDE5NDkzNCwgMTk5MDgsIDEyNjM3LCAKLSAgICAxMjc0ODUsIDExOTg1NSwgODc1MywgMTUwOSwgMCwgNTQ2OCwgOTUxMSwgMTI3NDc0LCAxMjc0NzcsIDE2NzIsIDYyMDUsIAotICAgIDEwODY0LCA3NDU4NiwgMTI3NDgwLCA3MDEwMywgMTI3NDY2LCA3ODU1NSwgMTI3NDY4LCA3Mzg2MywgMTI2NTc3LCAKLSAgICAxMjY1MDMsIDQxNjA3LCAxMjAxMTUsIDE2NzksIDEyMDExNiwgMTIwMTgwLCAxMjAxMTMsIDEyNzQ2MiwgNzAwNSwgNDE2MDksIAotICAgIDk1ODAsIDAsIDQwMSwgNjk5NDksIDQzNzc5LCA2OTY4LCA1NzYxLCAzNDIsIDg1NTMsIDAsIDgxNDMsIDEyNzExNSwgCi0gICAgMTE5ODMsIDkyMjQ5LCA2MjQsIDc0NTA4LCA0MDU3LCA0Mzc4OCwgNTA3OCwgNzQyNTgsIDEyNDc4LCAwLCA1MDc2LCAwLCAKLSAgICAxOTQ2MDksIDAsIDgyOTUsIDY4NSwgOTAyNSwgMTUyNCwgMTI2MTgsIDAsIDU1MzksIDAsIDkyNTIzLCAxMjAxMDIsIDcxMzgsIAotICAgIDEyMDU1MiwgMCwgMTk0NjExLCA3ODc1MiwgMCwgMTI1MjAsIDgwNTgsIDk3MzIsIDAsIDUwODAsIDY0Nzc1LCA1MDM2LCAKLSAgICA1MDM1LCAxMjA1OTAsIDQyNjA0LCA5ODM2NTYsIDAsIDgwNzQsIDI3NSwgMTMyOTEsIDE5MDcsIDc4ODM4LCA0NDMyLCAKLSAgICAxMjcyNzEsIDUwMzMsIDEyNzI3MywgMTI3MjcyLCA0ODM2LCAzODg4LCA3Mzc5MiwgMTA3MjksIDY0NTQ2LCAxMjcyNjIsIAotICAgIDQzNzA0LCAxMjcyNjQsIDEyNzI1MSwgNjc1ODgsIDExOTAwMCwgMTI3MjUyLCAxMjcyNTUsIDg4NTgsIDY0MDksIDEyNzI1NiwgCi0gICAgMTIwMjUyLCAxMjgxMDAsIDAsIDAsIDY2MzIxLCAwLCAxMjgxNCwgMTI3MjQ4LCAzNDMyLCAxMDIxOCwgMCwgNjA5NCwgCi0gICAgNzY0MSwgNDI0NDUsIDAsIDkyNDg3LCA0MjQwNiwgMTY3NiwgNzQzMjAsIDE5NDYwNywgOTgzMTc3LCA1MDMwLCAwLCAwLCAwLCAKLSAgICA3Mzg2OSwgOTYyMiwgMCwgNjk5NDQsIDY3ODcsIDAsIDAsIDAsIDk4MzU4MywgMTA1NDQsIDEyOTE5LCAwLCA5MjIxOCwgMCwgCi0gICAgMCwgNjk5MDYsIDEyMDc4OSwgMCwgOTQ3LCAxMTk4MzUsIDE5NDU4NiwgMTk0NTg1LCAxMDk2OSwgMTE5OTM1LCA3NjEzLCAKKyAgICA3NDIyNCwgNDg1MSwgMTI1MTM4LCA3ODE1NiwgNzg0OTksIDcyMzkxLCA3OTI5LCA2NjkxMCwgMTk0NjgyLCAxMjc3NjYsIAorICAgIDc4NTAwLCA2NjQ4MCwgNjQwMzgsIDQyODMzLCA3NDUyOSwgMTIwNjQsIDcyMzg1LCA1OTYsIDk4MzgyMSwgNjk4NTAsIAorICAgIDEzMTkyLCA4NjUxLCAxMjAyMTcsIDEyNjU0MiwgMTIwMjE4LCAxMjk5NSwgNjQ4NjUsIDEzNzMsIDExOTg1NiwgMTEzNzUyLCAKKyAgICA1ODE2LCAxMTkwNjcsIDY0ODEwLCA0MjMxLCA2ODI1LCA0Mjg5NywgNDIzMywgNDIzNCwgNDIzMiwgMTIwODg5LCA3NDQxNSwgCisgICAgMTIwMjEwLCA2Mzg0LCA3MDM1MSwgNzgxMDgsIDg4NTEsIDY3Njk4LCAxMjg1NTMsIDgyOTU0LCA0MTYwMSwgODg3NCwgCisgICAgNzIzOTIsIDc3NDgsIDEyNTA4MywgMCwgMTI3MDI2LCAxMjc5MzksIDQxNjAzLCA5Nzg0LCAwLCA5MTg4LCA0MTYwMCwgMCwgCisgICAgMTIwNjE4LCAxMjgzNDMsIDE0NTcsIDM1MzUsIDEyODYzNSwgNjM4MSwgMCwgMCwgNjUyNDAsIDExOTUxLCAwLCAzNDA0LCAKKyAgICA5ODMwNzksIDcwNDg3LCA3MjQxMSwgMTc1OSwgMTIwODUzLCA0MTA3NiwgNjgzODMsIDY5OTcyLCAxMTkyMDUsIDY2NTc3LCAKKyAgICA5NDAxNCwgMTI3NzY0LCA2NTg1OSwgMCwgNzQwNCwgMCwgMCwgNjk5NzAsIDEyODM4NywgNjU5MDgsIDk4MzQsIDMwNTUsIAorICAgIDk4NTIsIDEyODM2MCwgNjUyODgsIDEyMTI5MSwgMTEzOTgsIDAsIDkyNDE3LCA5MzAxNiwgMTI4MzgwLCAxMjczMzcsIDYwMywgCisgICAgNzQzOTgsIDQzNTQ4LCAwLCA3MTg2NSwgOTE3ODI0LCAzMzUwLCAxMjA4MTcsIDY0MzE4LCAxOTQ2OTgsIDc4MTIxLCAzMzkwLCAKKyAgICA3NDQ4MywgNDMyNjUsIDkyMzk5LCA5MTc4MzAsIDc4NTczLCAxMTg4MDMsIDE5MTksIDM0MDAsIDEyMDY1MSwgODMyOTYsIAorICAgIDExNjQ3LCA4MzI5OCwgNjY0NDYsIDY0MTQxLCA4NTYyLCAyMTIxLCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAKKyAgICAxMTI5NywgOTgzNjg4LCA5ODMxNTIsIDExOTY2LCA2NDEyOCwgNjYyODYsIDkzMDQyLCAxMjg4MzAsIDY0MTMyLCAxMDg2NywgCisgICAgNjQxMzAsIDY0MTI5LCAxMjEyNTUsIDQzMzc0LCA5Nzc5LCAyNzY0LCA2NjAwMiwgMTAxNjcsIDk0NzEsIDgzNDU4LCAKKyAgICA2NjAyMSwgNzQ1MDksIDAsIDU0NTcsIDU0NDAsIDg4NTcsIDkzOTgxLCA2NTI4MiwgMjg0MywgNTM1NSwgNjg4NTgsIAorICAgIDk4MzM0MiwgNjk5NzEsIDUxOTQsIDExNjU3LCA0Mzk4NCwgMTI4MjkyLCAxMTM3MjQsIDEyODg3MiwgMCwgMCwgNzIzOTMsIAorICAgIDEwNzE3LCA2NDU3MCwgNTYzMCwgNTM5NiwgNjQxNDMsIDEwNjgyLCA4MzMwMCwgMTA2MDIsIDgwMCwgNDI0OTksIDY2MTg2LCAKKyAgICAwLCAwLCA2NDkzMCwgMTE2MzEsIDY0MTQ2LCA2NDE0NSwgNjQxNDQsIDc2MiwgMTMxNzIsIDc1MDA4LCA3NzkyOCwgNDM5MjksIAorICAgIDEwOTA2LCAxMzUzLCA2OTYwLCA4MzAzMiwgMTI4Nzc5LCA1ODI4LCA4NzI0LCA5MTc4MDYsIDg5MzMsIDE2MDEsIDQyMjQ0LCAKKyAgICA4NTgsIDcwODAsIDY0MTA5LCA2NDEwOCwgODA5MCwgNzA0NTUsIDcyMzg4LCA3NDYwNiwgNTg3LCA5MTc5MDcsIDgyOTcxLCAKKyAgICAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgNzQyMTgsIDU1NiwgNjQxNTgsIDY0MTU3LCA3ODcwNywgMTIyMTMsIDgzMjkwLCAKKyAgICAyNzYwLCA4MzI4NCwgODMyODUsIDc4NzA4LCA4MzI4NywgNjQxNTYsIDY0MTU1LCA0MjQ5NiwgODMyODMsIDY0MTUxLCAKKyAgICA2NDE1MCwgMTI2NzksIDEwMDUzLCAxMDQyMSwgMTEwOTMsIDY0MTUzLCA2NDE1MiwgMTI1MDE2LCAwLCA0ODM5LCA2ODUyNywgCisgICAgMCwgMTg3NCwgMTE5MDE2LCAxMjAwOTEsIDY1NzcsIDY0MTI1LCA2NDEyNCwgNjQxMjMsIDAsIDEyNzUzMSwgOTI1MzQsIAorICAgIDcwMDcsIDc1OTAsIDY1NDQzLCA5MDM2LCA3ODg0NywgNjQxMjIsIDY2Mzg5LCA2NjYwOSwgMTIxMzQ3LCA2NDExNywgCisgICAgNjQxMTYsIDYyODcsIDY0MTE0LCAyNzI1LCA2NDEyMCwgNjQxMTksIDQzOTgxLCA0MjEyOCwgMTI3ODQyLCAxMTc3LCAKKyAgICA2NTYwMSwgMTIzMjIsIDY0MTA2LCA2OTY0MCwgOTI4OTUsIDY0MTAyLCA3ODU5LCAxOTQ1LCA2NDA5OSwgMCwgMTA0NTMsIAorICAgIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCA3Mzg5LCA5ODMxNjEsIDg3MDUsIDY0MDk3LCA2NDA5NiwgOTU3MSwgNTI4LCAKKyAgICAxMjg1NDUsIDQ0MDE3LCAxMTQyOSwgNzEzNDcsIDAsIDk4MzA3NywgMTIwODY0LCA3Mzg0MSwgODMzMzksIDgzMzQwLCAKKyAgICA5MDU2LCA2NDMxMywgNjE4OCwgNzQzNjAsIDYxNTUsIDY0MDY4LCAxODIzLCA2NDA2NiwgNjQwNjUsIDY0MDcyLCA2NDA3MSwgCisgICAgNjMsIDcyMzMsIDkyMjEyLCA3MjQxNCwgNDE5MDQsIDY2MzksIDY0MDY0LCA5ODM3NzUsIDEyODM0NCwgMTIxMzg4LCAxMTc2LCAKKyAgICAxMTg5NTksIDEyNzkzMCwgODE2MiwgMTI3MDE5LCAxMjgxOTcsIDkyNzQ3LCAxMjA1MTksIDQyOTMxLCA2NjI0MiwgMTE0MTUsIAorICAgIDQzMzMsIDk4NTUsIDY0MTEyLCA2NDY0MiwgMCwgNTM4OCwgMCwgMTIxMjcxLCA5ODM2NDksIDc3MTQsIDY2MjIyLCA2OTkwMiwgCisgICAgNzc2OCwgNzI0MDMsIDQxOTksIDY0NzA4LCA2NTA2NCwgNzAxMTcsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgCisgICAgODk5NiwgNDk5MiwgNDQ3MSwgNDI2MjIsIDY0MDc5LCA2NDA3OCwgOTIxNzksIDcxODc4LCAxMjY1NzAsIDEyMTI1NiwgCisgICAgNjQ2MTUsIDQxOTE1LCAwLCAxMjA3NSwgNDIwNDEsIDE5NDgyNSwgNTE3NCwgOTgzMjE3LCAwLCAxMjc1NTcsIDMxMjMsIAorICAgIDEyNTEwMCwgMTI2ODUsIDExOTIxNiwgODQwOCwgNjQ3MDQsIDgzMzI4LCAwLCA5MjIzLCAwLCA0MTYxNiwgNjc5OTksIAorICAgIDczNzk3LCA4MzMyNywgMTExNiwgNzUwNjcsIDQzMDQ5LCA3MTM2LCA0MzA1MCwgODU0OCwgMTIwNDg1LCAwLCA3NTAzMSwgCisgICAgOTE3NjIyLCAxMjgxNjgsIDEzMTE1LCA0MzY3NSwgNjQwOTEsIDkzMjIsIDgzMzM4LCA4MzMzMSwgNjQwOTUsIDY0MDk0LCAKKyAgICA4MTExLCA2NjI0NywgNDIzMzIsIDY0MDg5LCA2NDA4OCwgNjE5OSwgNjcyNDksIDY2Mzk4LCAxMTQzNCwgNjQwODMsIAorICAgIDY0MDgyLCAxMTMyOSwgNzczNywgNjQwODcsIDY0MDg2LCA2NDA4NSwgNjQwODQsIDgzMDMzLCA5OTI3LCA0MTMzNSwgNDExOCwgCisgICAgMTc5NywgODMzMTIsIDQxMzM0LCAwLCA0NiwgNDM0NDgsIDgzMzA5LCAyOTgsIDgzMzAzLCA4MzMwNCwgODMzMDUsIDQyNjI3LCAKKyAgICAxMjUwMTEsIDMyLCA2MTg3LCA4MzAzNywgMTE0OTUsIDExNDU5LCAzNjY1LCA4MzAzNiwgNDI4NzEsIDAsIDE5OTIzLCAKKyAgICA3NDMzNSwgMCwgMTI3MTkyLCA2NjIzOSwgNDIyNjQsIDY0NDAzLCA0NDEyLCA3MjQwLCA4MzMxNCwgNzE0NDQsIDk4MzQ2OCwgCisgICAgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCA4MzQ2MSwgNjgwNTMsIDgzNDA3LCAxMjAxOTgsIDY5ODA5LCA2MTgxLCAKKyAgICA2NTAxNCwgOTgzNDIyLCAxMjg0ODQsIDk4MzE5NiwgMzYzOSwgMTE5NTg4LCAxMTg4NTEsIDgzMDM5LCAxMTg5MDQsIAorICAgIDEwMDczLCAxMjAyMDYsIDgzMDM4LCAxMjcxODYsIDY4NDA5LCA0Mjg0NCwgNzQ5OCwgMTA5OCwgOTI1NjUsIDEyMDIwNSwgMCwgCisgICAgMTI4OTE1LCAxMDIwNywgODc4OSwgOTMwNzAsIDEyMDMzOCwgOTI5NzMsIDEyODMyNSwgOTIzNCwgOTE3ODk1LCA2MTgyLCAKKyAgICA5ODM0NzUsIDY1MDU4LCAxMjAzMTksIDk4MzQ4MCwgNjgwNjQsIDkxNzgzMSwgNTQ3MSwgOTQ2MSwgNTU3MywgMTE4OTM2LCAKKyAgICA1NDczLCA0NCwgMCwgNjYyNDQsIDk0MDcyLCAwLCA2NjIzOCwgMTI4NDQsIDY2ODk0LCAxNjIyLCA3NzY3LCAxOTAwLCAKKyAgICA0MTMzOSwgMTE0NTgsIDExOTA2MSwgMCwgNjU4MSwgNTU3NiwgMTI4NjE4LCA0Mzg1NSwgNDEzMzcsIDAsIDQxNjMxLCAKKyAgICA4OTQ3LCA2ODM5MCwgNjk2ODMsIDQxNjk0LCA5ODM4NDgsIDcyMzk2LCA3OTA4LCAwLCAxMDQwOCwgNjU3OSwgOTE3ODcyLCAKKyAgICA2NDYxOCwgMCwgMTIwMTQ3LCAyMTM4LCA2NTgzLCA3NzYxLCA3MDAwNSwgMTIwNTA0LCAxOTQ4MjgsIDEyODk2MSwgNTA1OCwgCisgICAgNDEwMTAsIDk5OTIsIDEyODI5OSwgNTA1NywgOTE3OTQxLCAwLCA3NDUzOCwgNTA1NCwgMTE4OTUxLCAxOTQ5NzEsIDc4NjA2LCAKKyAgICAwLCAxNDM3LCA0MTYxNywgNjU4LCAzNDk3LCAxMjg1MDksIDc0ODYsIDUwNjEsIDUwNjAsIDQyMzUsIDEyNzg3OCwgCisgICAgMTI4MzIyLCAxMjg1MjksIDEyMTEzLCA0MjM2LCA0NzI3LCAxMjg0ODcsIDAsIDc2OTMsIDEwNzQ5LCAxMjAzMzIsIDc0ODgsIAorICAgIDU3NzMsIDk3OCwgMTI4MTM0LCA5ODM2OTksIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDcxODY0LCA2NjIwOSwgMTI3MjMzLCAKKyAgICA3NDEzNSwgOTc0OCwgOTgzOTU2LCAxMjc1MjQsIDAsIDk4MzMxNiwgMTk0Njc2LCAxOTQ2NzUsIDEyODA4MSwgMCwgCisgICAgOTgzMzEzLCA5ODMzMDIsIDAsIDEyNzg2NSwgMCwgOTI3NzYsIDkzNDEsIDc4ODIxLCAyMzc5LCAxMTMyNSwgOTE3OTAyLCAKKyAgICA2NDY2OCwgNjc4NTQsIDgxMjUsIDEyMDU0NSwgNjc0MywgODMxNjQsIDkxNzk0MCwgMjM2OSwgODM0MDYsIDk4MzMyMywgCisgICAgMTI3OTY2LCAxMTkyMzUsIDcxODY4LCA3MzkzNiwgNzAwOCwgNDM2NjAsIDEyMDM0NiwgMCwgNDM4NDEsIDIzNjcsIAorICAgIDEyNzgyNywgOTgzODU3LCAyNjQsIDIzNzUsIDgwNjAsIDYxOTQsIDExOTg1OCwgMTg0NCwgMTE5MDg0LCAxMjkwNDksIAorICAgIDYwMTksIDEyODk3NSwgMCwgNjk2MSwgMCwgNzA0MzUsIDY3MTcxLCA4ODAwLCAxMjczMzIsIDQyODYyLCA0NDYzLCA2NTU4MSwgCisgICAgNjE5MiwgMTE5NjEwLCA0Mjc3MSwgMCwgOTIzMzMsIDcyNSwgNjUwNDIsIDkzMDE0LCAxMjA4MDAsIDc0OTQyLCAxMjg5MiwgCisgICAgMCwgNjcxNDksIDc0ODk5LCA3MzkzMSwgMCwgMTIwNDk1LCAxMjcyNjEsIDEyMjI0LCA5ODMxMjgsIDEyOTA2MSwgNTA3NCwgCisgICAgNTA3MywgMTIxMTY0LCA4OTgzLCAxMTg5ODEsIDc0NDkzLCA3MTIzMSwgNTA3MiwgNzQ1NDcsIDYxOTgsIDExNjE0LCAwLCAKKyAgICAxOTYsIDk4MzE1NCwgMCwgOTgzOTM2LCA0OTI5LCAxMjAzNDIsIDEyOTE0NSwgMCwgMTI3OTg3LCAxMjE0NTUsIDQyODQ3LCAKKyAgICA5Mjk1MywgMCwgNjc3NTQsIDQ5MzQsIDk4Mzk4MSwgNDEzMjMsIDk3NTgsIDAsIDkyMjg5LCA3MDE4MSwgNDI1ODQsIDAsIAorICAgIDQzMjksIDQxMzIxLCA0OTc5LCAzMDQ4LCA3NzUyLCA0MTMyMCwgOTgzMDQyLCA2NDY2NywgMTI4MTksIDk4Mzg3MCwgNTA3MSwgCisgICAgMTI3OTE1LCAzNjQyLCA2NzMzNCwgNTA3MCwgMTAwNDIsIDExMzgxMywgMzk4NywgNTA2OCwgOTgzNDYwLCA4OTA5LCAKKyAgICA3ODY1MCwgNzg2NDksIDY5OTE3LCAxMDYzNiwgNzM5ODEsIDExODA2LCA0MzE2NywgNDUzMSwgMTI0NSwgOTEwNSwgNjY0NjMsIAorICAgIDQ5MjEsIDEyMDIxOSwgNDkyNiwgNjU1NDQsIDczODg0LCAxMjEzNTksIDEyODAyOCwgMCwgNjQ3MDksIDgzMjY5LCAKKyAgICAxMjg4NTQsIDc4ODgwLCA0OTIyLCAzMjUsIDk5MiwgMTE5NTY4LCA0OTI1LCAxMjcyMTgsIDAsIDk1MjYsIDQ5MjAsIAorICAgIDEyODYxNywgOTQ4LCAwLCAxMjAyMDgsIDQ5MzAsIDEyNzg1NywgOTIxNzUsIDEyMDI3NSwgNDkzMywgMTEzNzc5LCAKKyAgICAxMjEwNDksIDExODk4NSwgNDkyOCwgOTgzMTQ5LCA4MzUxNCwgNzQ3NzAsIDEyMDE5NCwgMTI2NTQ4LCA3MjIsIDE5NDkzNCwgCisgICAgMTk5MDgsIDEyNjM3LCAxMjc0ODUsIDgyOTk5LCA4NzUzLCAxNTA5LCAwLCA1NDY4LCA5NTExLCA0MzQ5MywgMTI3NDc3LCAKKyAgICAxNjcyLCA2MjA1LCAxMDg2NCwgNzQ1ODYsIDEyNzQ4MCwgNzAxMDMsIDkyNjk0LCA3ODU1NSwgMTI3NDY4LCA3Mzg2MywgCisgICAgMTI2NTc3LCA2ODMzNiwgNDE2MDcsIDEyMDExNSwgMTY3OSwgMTIwMTE2LCAxMjAxODAsIDkyNzYxLCAxMjc0NjIsIDcwMDUsIAorICAgIDQxNjA5LCA5NTgwLCA3MDQzMSwgNDAxLCA2OTk0OSwgNDM3NzksIDY5NjgsIDU3NjEsIDM0MiwgODU1MywgMTI3OTAwLCAKKyAgICA4MTQzLCAxMjcxMTUsIDExOTgzLCA5MjI0OSwgNjI0LCA3NDUwOCwgNDA1NywgNDM3ODgsIDUwNzgsIDc0MjU4LCAxMjQ3OCwgCisgICAgMCwgNTA3NiwgMTI4NzAyLCA4Mjk5MSwgMCwgODI5NSwgNjg1LCA5MDI1LCAxNTI0LCAxMjYxOCwgMCwgNTUzOSwgMTI5MTgyLCAKKyAgICA5MjUyMywgNzE0MzUsIDcxMzgsIDEyMDU1MiwgNDM1MDQsIDE5NDYxMSwgNjY5MTQsIDY1Nzk0LCAxMjUyMCwgODA1OCwgCisgICAgOTczMiwgOTI0ODAsIDUwODAsIDY0Nzc1LCA1MDM2LCA1MDM1LCAxMjA1OTAsIDQyNjA0LCA5ODM2NTYsIDAsIDgwNzQsIAorICAgIDI3NSwgMTMyOTEsIDE5MDcsIDc4ODM4LCA0NDMyLCAxMjEzMTMsIDUwMzMsIDEyMDM0MSwgMTIwODE4LCA0ODM2LCAzODg4LCAKKyAgICA3Mzc5MiwgMTA3MjksIDY0NTQ2LCAxMjcyNjIsIDQzNzA0LCAxMjcyNjQsIDkyOTU3LCA2NzU4OCwgNjgwNjEsIDEyNDk4MywgCisgICAgNzAzNjAsIDg4NTgsIDY0MDksIDc2NjMsIDEyMDI1MiwgMTI4MTAwLCAxMTkwMDcsIDAsIDY2MzIxLCA5NDA1MiwgMTI4MTQsIAorICAgIDEyNzI0OCwgMzQzMiwgMTAyMTgsIDAsIDYwOTQsIDc2NDEsIDQyNDQ1LCAxMjg3OTIsIDkyNDg3LCA0MjQwNiwgMTY3NiwgCisgICAgNjczNjIsIDc0ODYyLCA2NzM2NSwgNTAzMCwgNjczNjQsIDExODgxMCwgMTk1MDA4LCA3Mzg2OSwgOTYyMiwgMTEzNzYzLCAKKyAgICA2OTk0NCwgNjc4NywgNjczNjEsIDk4MzI3MCwgMCwgNjgzMTksIDEwNTQ0LCAxMjkxOSwgNzE0ODQsIDcyMzk3LCAwLCAwLCAKKyAgICA2OTkwNiwgMTIwNzg5LCA5ODMwNDEsIDk0NywgNjc2OTUsIDY3MzY3LCAxMjg1MjgsIDEwOTY5LCA2NzIyOCwgNzYxMywgCiAgICAgOTI1NjIsIDExOTkzNiwgNDc5NSwgMTE5OTMwLCA3MDE4LCA3Mzc2LCAxMjAxODEsIDEyMDE5MiwgMTIwMjY4LCAwLCAKLSAgICA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMTE4MzMsIDExOTkxOSwgNzIxNiwgNjUyMzIsIDcyMTcsIDI1MSwgNzIxOCwgNzg5NSwgCi0gICAgNDM5NSwgNDM1MzgsIDExOTkyNiwgMTE5OTI5LCAxMTk5MjgsIDcyMTMsIDExOTkyMiwgNzIxNCwgNzIxNSwgOTgzODM2LCAKLSAgICA3NDE0MSwgODg4MCwgNzY4NSwgNjY0NTksIDEyMDE3MywgNjU1NDAsIDExOTYxOCwgNjI1LCA4MTg3LCA0Mjg2MSwgMTExMywgCi0gICAgNzIzNiwgNzkxNSwgMzYzMCwgMTIwMTc2LCA4MTc5LCA3NDI2NCwgNjc4ODYsIDkzMTYsIDEwOTgwLCAyNDg5LCA2NTYyNCwgCi0gICAgODE1MCwgMTM1OSwgNjc2NTIsIDEyNzMyOSwgMTI3MzMwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAKLSAgICAxMjczMjQsIDEyNzMyMSwgOTIyNzksIDEyNzMxOSwgMTI3MzIwLCAxMjczMTcsIDEyNzMxOCwgMTI3MzE1LCAxMjI4MywgCi0gICAgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMCwgMCwgMzIzOSwgCi0gICAgMTI3MzExLCAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCA1MDQwLCAKLSAgICAwLCAwLCA5ODM0NDMsIDc4NDIwLCAwLCA1MDM5LCAwLCA3ODQxOCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIDc0MjkzLCAwLCAKLSAgICA2NDY0OCwgMCwgOTM1OSwgNzg0MTYsIDAsIDEyODc3MCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIDczOTA5LCA0ODM1LCAKLSAgICA1NTI2NiwgNDM0MzIsIDEyNzgyMiwgNDMwOSwgNzEyNywgMTk0NTY5LCAwLCAxOTQ1NjgsIDEzMDEsIDAsIDQyNTg5LCA1NjksIAotICAgIDAsIDczODEzLCA3MTEsIDQzODksIDcxMzMsIDAsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIDE5NDU3MCwgNDEzMzEsIAotICAgIDEwMDYsIDc0MjQwLCAwLCAxNTUwLCA4MjAxLCA3MzczNywgNzYyNywgNTQ5OSwgNTAzMSwgNzc5MDgsIDQyNzM4LCA2NTc4NCwgCi0gICAgNzc5MDcsIDY1MjY3LCAzNzU4LCAwLCA2NTc4MSwgNjQ3MzQsIDcwMDczLCAyNDQwLCA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIAotICAgIDUwMDgsIDk4MzU3MiwgMjExOCwgMCwgMTIxMjEsIDgyNTUsIDU1MTIsIDczODc1LCAyMTI4LCAyMTMwLCAyMTMxLCAyMTI2LCAKLSAgICAyMTMzLCAxMTE5LCAxMjcwNjgsIDIxMTQsIDIxMTYsIDI0NTUsIDAsIDIxMjIsIDIxMjMsIDIxMjQsIDIxMjUsIDEyNzQ4NiwgCi0gICAgODcxNCwgOTgzODIwLCAyMTEzLCAwLCAyMTE1LCAxMjgxNzcsIDEyNzkwNywgNDM3MTMsIDUwNTIsIDY2MjIwLCA1ODIxLCAKLSAgICA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIAotICAgIDY2MzcsIDU5MDcsIDY1MDg4LCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIDk4MzE4MSwgMTIwMDMsIDU1MTMsIDY2NjYsIAotICAgIDUwNTMsIDc0MjMwLCA1NTEwLCA3ODQ1MSwgMCwgNzg0NDcsIDI0NzAsIDc4NDM3LCAwLCAxOTI1LCAwLCA5MjIzNywgCi0gICAgNzQ4MDcsIDAsIDUwNDgsIDUwNDcsIDAsIDAsIDAsIDkyMzEzLCAwLCA3NDQ5NywgOTIzOTUsIDgwODksIDY5MjksIDYzOSwgCi0gICAgOTgzNTYzLCA2ODE3OSwgNjQ0NDIsIDAsIDkyMzQ4LCA0NTk5LCA0MTQwMiwgNjY3NCwgNDMzOTcsIDQzMjk0LCAxNDc2LCAKLSAgICA2NDgsIDAsIDY1ODE5LCAzMjMzLCAwLCA0MTc4MiwgNjk1MSwgOTQwMTcsIDk4Mzk3NiwgMzUzMCwgOTc1MCwgMTI4MzE3LCAKLSAgICAwLCA2NjU2LCA0MjYxOCwgMCwgNTA0NiwgODUxMiwgNjU4NTYsIDc0MjYxLCA4OTY3LCAwLCA1MDQ1LCA0MjAyNiwgMTkxNiwgCi0gICAgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAKLSAgICAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgOTE3NjAwLCA0MTc1MCwgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAKLSAgICAxMTk2MDYsIDY3OTgzLCAxMzI5NiwgNTE3LCAwLCAxMjg1MzQsIDE5NDk0NiwgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIAotICAgIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgCi0gICAgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIAotICAgIDk4MzE3OCwgMTk0ODUxLCA2NjIwMCwgMCwgMCwgMCwgNzg0MjMsIDAsIDAsIDg3MTEsIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgCi0gICAgNzYyMywgMTE4OTI1LCAxMTg4ODksIDkyMzUsIDEyNzYwLCA3NDE3NiwgNjk2NjIsIDY2NDQ1LCA0MzU0MCwgMTAwNjIsIAotICAgIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIDEyNjU5NywgMTIwNDM1LCAwLCA3NzI2LCAwLCAxOTkyMiwgMjY3LCAKLSAgICAzMzkzLCA0MjE5OCwgMTM3MSwgMTk0ODQ5LCA2OTIzMywgMjQ1OCwgMCwgNjIwMSwgMCwgNDEwNzQsIDQyNjYsIDEwNjUyLCAKLSAgICA0MTYxMiwgNDEwNzcsIDM0MDIsIDkwNTAsIDMzOTgsIDAsIDk4MzM0OCwgMCwgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIAotICAgIDEyODAxNywgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgNzg3NDMsIDY0MjYxLCA2NDkzNCwgMTI3NTM3LCAxMzAxNCwgCi0gICAgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCA5ODMzNDIsIDAsIDk4Mzg4MCwgMTI2NjM4LCA5MDUzLCAKLSAgICAxMzAxNSwgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDk4MzgyOCwgNjY2MCwgNzg3NTgsIDkxNzc2MCwgOTE3NzkzLCAKLSAgICA0MjIxMiwgMTI2MjksIDExNDM1LCAwLCA1NTI1NiwgNjU1MzgsIDAsIDEyNzk0MCwgOTgzMzQxLCA3NDU0NywgMTI2NTg1LCAKLSAgICA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgMTE5MjM4LCAxOTUwMDQsIDc4MDk5LCAxMjcwODUsIDAsIAotICAgIDEyODMyMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgNzg0NTgsIDY2NzI4LCAxODE2LCAwLCA0MjUzMywgMTY4LCAKLSAgICA0Mjg0NSwgNDg5OCwgNjQyOTgsIDk4MzE0MSwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAzNjUzLCAwLCA3OTEsIDkxNjIsIAotICAgIDY5NzcsIDAsIDc4ODg5LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAxMTkzMDMsIDk4MzQ0OSwgNzU1NywgCi0gICAgMTE5MzM5LCAxMTkzMDEsIDgyMzQsIDcyNDEsIDAsIDEyMDY3MSwgMTE5MTY3LCAxOTQ5OTYsIDEyODExLCA2NTkyNSwgCi0gICAgMzk0NiwgNzgwNzgsIDEwOTk4LCA3ODA4MCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAxMjgyNzYsIDc0NTk5LCA3ODQ0OSwgCi0gICAgODg5MCwgMTk0OTc3LCAxOTQ5NzYsIDI0NDgsIDc4MDg1LCAxMDI2NywgODQyNCwgMjQ1MiwgNzgwODMsIDEyODgyNCwgCi0gICAgODcyOSwgNzg0NTYsIDAsIDc4NDUsIDkxNzkxNywgNzEzMDIsIDQ0MDgsIDQxMjIsIDY3NzIsIDExMDM5LCA4NzIzLCAKLSAgICAxOTQ5OTAsIDcxMzEwLCAxMTkzMDIsIDczMSwgMTE5MzA0LCA5MjI4NiwgMjQzOCwgNjQ4NTUsIDExOTMwMCwgMTE5Mjk5LCAKLSAgICAxMTc1LCAwLCA0MjEzNSwgMzczLCAxMTkxNzIsIDIxMTksIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgMCwgMCwgNDE5NTIsIDAsIAotICAgIDUyNzMsIDIxMjcsIDUyNjksIDYzMzcsIDUyMDIsIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgMTk5MTUsIDUyNzcsIAotICAgIDEyOTYzLCAxMjc4NjQsIDYxODksIDQxMjUsIDEzMTQsIDEyMTMzLCAxMjAzNDAsIDExODg3MywgMTI3MSwgOTgzNjQwLCAwLCAKLSAgICA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAzODc5LCAwLCAxMjk3OCwgNDE2NiwgNDU3NCwgMCwgNzU2NywgNzQ1OSwgCi0gICAgOTgzMTYwLCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCA5MjU0OCwgNTc1OSwgOTgzOTEyLCAwLCA0MTM4OCwgNjQ0NDYsIAotICAgIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDk4MzE4NywgNzAwLCAwLCA1NTUzLCAwLCA3MDg4LCA1MzU2LCAKLSAgICA3NDk5LCA2ODAwNywgNjY1OTYsIDc0MDY2LCAwLCAxMDI2MywgNTU1NCwgMCwgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgCi0gICAgOTI2MjYsIDAsIDc2MTgsIDg1MTcsIDExNDU1LCA3ODQ0MCwgNjQ2MzIsIDY0NDQ3LCA1NTU1LCA3ODA4OCwgNzgwOTMsIAotICAgIDc4MDkxLCAwLCA0MjgwMywgNjUwMzMsIDkxNDMsIDY2NjgsIDE5NTA2NywgNjc5OTUsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIAotICAgIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgOTgzNjQ5LCA0MjY5LCA3Mzg4NSwgOTE3Nzc1LCA0Mjg0NiwgNjk2NDQsIAotICAgIDk1MCwgMCwgOTIyNzMsIDY2NTgwLCAxMTg4OTUsIDY2NjgzLCAxMDU1NCwgOTE3Nzc4LCAxMTkxMjEsIDAsIDUwOTgsIAotICAgIDkxNzc3MCwgMCwgMTE5MDk5LCA1MDk3LCA0OTM1LCA5ODQ4LCAxMDM4MSwgMCwgMTI4ODcwLCA5ODM3MDEsIDM2NTEsIDAsIAotICAgIDEyMDczMCwgMTI3NTU2LCA1MTAyLCA1MTAxLCAxMDI2OSwgMTI5ODMsIDgxMzgsIDQ1MTcsIDE5MzIsIDUxMDAsIDE0MzksIAotICAgIDEyMDkzLCAxMjQ3LCAxMDAzNCwgMTk1MDY0LCA1MDk5LCA3ODM3MywgMTQ0MSwgNDIwODcsIDMwNjMsIDY1MCwgMCwgNzgzOCwgCi0gICAgMCwgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTIwNzkwLCAxMjg1ODIsIDkwNzgsIDg1NDUsIDY2MzU2LCAKLSAgICAxMjg3OTksIDAsIDkxNTQsIDkxMTgsIDEyNjU0MywgMCwgMjY3NiwgMjI3NywgMCwgNzM4MTIsIDYxOTAsIDg1OTksIAotICAgIDE5NTA1MywgNjk5MTgsIDEwNzk1LCA5ODU3LCA3MDE0LCA5ODU2LCAxOTUwMzMsIDkyNjIwLCAxMjEyOSwgMCwgODQ4MSwgMCwgCi0gICAgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTI4MjM3LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIAotICAgIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIDY2NTcsIDIwNywgMTI4ODA2LCA0Mjc1LCAKLSAgICA3NDgxOSwgODU0LCA2ODE0NywgNzQzODEsIDAsIDc4Nzg2LCA1MTAzLCAxMjc4NjEsIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIAotICAgIDQ4OCwgNjk4MTEsIDAsIDcxMzM5LCAxMDE1NywgMCwgNDMwMzQsIDExNDM4LCA2NDY3NCwgMCwgOTI2OTQsIDY4NDMxLCAKLSAgICA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDY5ODEzLCA0MTM2NywgNTEwNSwgMTI3NTA5LCA2OTcyMCwgNjQ3NiwgCi0gICAgNTEwNCwgOTgzNzQ5LCAzMDQsIDMxNzYsIDExOTAxMCwgMCwgOTMyLCAxMjA2MzMsIDY1NjcsIDIzOCwgNjk2NTYsIAotICAgIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIDc4ODcwLCA0MTA0NCwgNjc2NDAsIDE5NDkwMiwgCi0gICAgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAxMjU1MiwgMTk1MDE5LCA4ODAzLCAzMDksIAotICAgIDY2MjIsIDgxNTEsIDEwODU4LCA3ODcwNiwgNjc2MzYsIDAsIDEyNTY4LCAwLCAxMjU1MywgMTA4MTQsIDQzMjc1LCA2OTUwLCAKLSAgICA5NzEyLCA2ODY4MCwgNDM5NzAsIDk4MzE5OCwgNjUxNjUsIDkyNzI1LCAwLCA2NjQ2NiwgMCwgMCwgMCwgNjY3MjUsIDYxOTEsIAotICAgIDExMzUxLCAxMDQzNywgMTEzMTYsIDY3NjM0LCA0Mzc2MywgMCwgNDE3NTQsIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIAotICAgIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIAotICAgIDk0MDk1LCA5MTc1NDcsIDkyNjgyLCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgCi0gICAgMTIwNzcsIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgMTI4MDM1LCAyNDc5LCAwLCAzNjMyLCAKLSAgICAxMjA3MjgsIDEwNjk4LCA4Mzc2LCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCA2NzYzOSwgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIAotICAgIDY1MjI5LCAxODQzLCA0MjI4MywgNDMyNTAsIDQxNTYyLCA5MTAwLCA3NDU0OCwgOTE3NjMwLCAzNjQwLCAxMjcxOTAsIAotICAgIDQyMzIxLCA3Mjg0LCAxOTQ5NzQsIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIDE5NDk1MiwgMTk0OTUxLCAxMjY2NDksIAotICAgIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxMjA2NzgsIDY4Mzk4LCAxOTQ5NTcsIDY3NjE5LCA2NjM2NywgCi0gICAgMTk0OTU4LCA5NjM0LCA5MjM4MCwgOTk4OCwgMCwgNDEwNjgsIDAsIDQyOTUsIDY1MjY0LCA2ODAwNiwgMCwgOTI1NDUsIDAsIAotICAgIDc4NSwgODIzNiwgMTI4NjQ3LCA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAxMjAyNjUsIDkyNSwgMTI3MTU2LCAwLCAKLSAgICA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIDQxOTg0LCA5MjE3LCAwLCAwLCAwLCA5MTg2LCAyMDY3LCA0MDE2LCA5ODM4MDMsIDAsIAotICAgIDM4MSwgMTI5MzYsIDAsIDQyMDc3LCAwLCA2OTg4MCwgNTE4NCwgNDIwNzgsIDE5NDk0NywgMTA4MTAsIDEyODUzMSwgNDU4NSwgCi0gICAgMTk5NDMsIDU4NjAsIDY3NjMzLCAwLCAwLCA4MTIsIDM2MTUsIDAsIDUxNzgsIDQ0MDAwLCAxMjA1NDgsIDc4ODA3LCA1MTg4LCAKLSAgICA3NDI4NywgNjc2MjksIDM2MDUsIDEwNjkyLCAxMTY2LCA2NDQyOSwgNDI2MzksIDkyNCwgMCwgNjc2MzEsIDQyNjE2LCAKLSAgICAxMjA2NzAsIDI0NDIsIDEwNzAzLCA3ODc4OSwgNjc2MzIsIDkxNzkyNCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgNjY3MDgsIAotICAgIDczOTMzLCA2NzYyNiwgNDI0MDEsIDAsIDY5ODcyLCAxMjczNzMsIDQyMjg4LCAxMjc1MSwgMCwgODU0MiwgMTMxNDUsIAotICAgIDE5NDk2MywgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIDAsIDQxMTE3LCAwLCA5MjU4MCwgCi0gICAgMCwgMCwgNjc2MjQsIDAsIDEyOTAsIDAsIDY1NTg1LCAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgOTE3ODgzLCAxMzE4LCAKLSAgICA2NDczMSwgMTI2NTc4LCAwLCAwLCA2NjMyNSwgMzQ2NSwgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCA5ODM3ODEsIAotICAgIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgNzM5MTIsIDk3OTksIDAsIDQxODg2LCAyNDgwLCAwLCAyMDYyLCAKLSAgICAxMjcyOTMsIDY0OTQsIDU1MzcsIDc4NjU2LCAwLCAxOTQ1ODcsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIAotICAgIDAsIDY4MDA1LCAxMDYyMiwgOTgzNzc5LCAwLCA3ODY1NCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAxMTkxOTYsIDY0ODY0LCAKLSAgICAwLCA3ODY2MCwgMCwgODI4NCwgMTMwODEsIDAsIDM1ODksIDQyMDUxLCA0MDM1LCA2NDkyLCA5MjIzNiwgNDI2NSwgNjY0MiwgCi0gICAgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIDExOTIxNiwgMjQ4OCwgMCwgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCAKLSAgICA5ODMzNzcsIDc1MjgsIDEwNTUwLCAwLCA5MjcwNiwgMCwgMTA5NjEsIDAsIDEzNzQsIDY0ODc4LCAxMTkwMTQsIDAsIAotICAgIDQyMzg5LCA0MTM3NCwgMjI4NiwgMCwgNzg0OTIsIDQxMzc3LCAxMjc5MDksIDAsIDQwMCwgMTI1OTcsIDEyMDU4NiwgMCwgMCwgCi0gICAgNjY2MSwgOTgzMTQ1LCA2NDgyNywgMCwgNzM4MTcsIDM5MCwgMCwgNzEzMDEsIDk4Mzg2MiwgMzQ3MywgNzcxOCwgMCwgMCwgCi0gICAgMCwgNTUyODUsIDAsIDAsIDAsIDExOTY5LCA5ODMzOTAsIDEyNzg0MSwgNjM2NSwgMTg4NywgNjc2MywgOTgzMzcwLCA4MDgwLCAKLSAgICA3MDA2LCAwLCA5ODMzNzEsIDY3NTcsIDY0MzUxLCAxNTQ0LCAwLCA2NzY2LCA2NDY3NywgMTIwNzE2LCA5ODMzNzIsIDYxNDYsIAotICAgIDAsIDc3MSwgOTgzMzczLCAwLCAxMjgxMiwgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAwLCA5NTMsIAotICAgIDEyOTE3LCAxMTk1NjAsIDEyMzAwLCAwLCAxMTQ5MSwgOTcyNCwgMTAzNDEsIDk4Mzc3MywgOTUyNCwgNzQ5MCwgMTEzODksIAotICAgIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIDQ3MSwgNzQ4NCwgNzQ4MiwgNjc1MywgNzQ4MCwgNTc2NCwgNzQ3OCwgNzQ3NywgCi0gICAgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgCi0gICAgMTI3Mjg4LCA5MjM1NywgMTAwNDksIDExODM0LCAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMTI3NDgxLCAxMjAyMTYsIDEzMzA2LCAKLSAgICAxMDUzMywgNzg3MCwgNzM5NDksIDc2MjUsIDAsIDEyMDU0NCwgMCwgMCwgOTI2NjAsIDAsIDAsIDAsIDE5OTYxLCAyNDcyLCAKLSAgICA0MjY2NSwgOTIzNDEsIDAsIDIxMzksIDQyNTYsIDEyMDc3NiwgNzQzODAsIDAsIDQyNjc1LCA0MjY1OCwgMTI4NDUsIDAsIDAsIAotICAgIDY1MTM4LCAxMTkzNTUsIDY3ODYyLCAwLCA2NTY3MSwgNzA4MywgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgCi0gICAgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCA0NDUsIDEyMDU2NiwgMTI4MzA4LCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgCi0gICAgOTgzMTUwLCAxMjAyMTUsIDAsIDM5MDIsIDAsIDE3NzAsIDAsIDEyODg2NiwgMTU2MCwgMTIwMjA5LCAxOTQ5NzIsIDQ1ODQsIAotICAgIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDExODkyOCwgMTExOCwgNzEzMzQsIDAsIDAsIDEwODEsIDc0MzYsIDY4NDIwLCAKLSAgICA3MjUyLCAwLCA1OTk2LCA2OTkyMSwgNDkwMywgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgMTMzMCwgMCwgNzEzOSwgMCwgCi0gICAgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCA2MzI0LCA0MTk3NSwgNjQ3NzcsIDEwNjc0LCAxMjMwOCwgMTIxODYsIAotICAgIDAsIDAsIDk4Mzc0MSwgMTI3MTUsIDY4MDAyLCA5ODM0NzksIDEyNjYzMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgCi0gICAgMTE5MTU3LCA2ODAwMCwgOTI0NjQsIDAsIDEyNjk4NCwgNjgwMDEsIDkzMzQsIDkyNzA1LCA5MjMxNSwgNzAxMDEsIDc5NzUsIAotICAgIDAsIDc3OTU3LCAwLCA2NjYyMSwgNDg4NCwgNjY1OTcsIDY5NzMyLCAwLCAwLCA2MzEzLCA2NTUxMywgNjk4NTcsIDAsIDAsIAotICAgIDAsIDIzNDUsIDQzNjk3LCA0NjMsIDAsIDAsIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgOTgzMzg3LCAwLCA0MjI3OSwgCi0gICAgMTk0NTc3LCAwLCA3ODQxNSwgMCwgMTk1MDA4LCA5ODMzODQsIDEzMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NjYzLCAwLCAwLCAKLSAgICAwLCAwLCAyNDgyLCAxNDcxLCAwLCAwLCA0MjI0NywgMTIzNzgsIDczOTI1LCA2OTY2NCwgMCwgMTIzNzQsIDAsIDAsIDAsIAotICAgIDk4MzY5NCwgMjQ2MCwgMCwgMTE5NDQsIDEyMzc2LCAxMjc4NjgsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCAKLSAgICA1ODcwLCAwLCAyMDI0LCAxMjcxODAsIDAsIDAsIDUzOSwgMCwgMTI3NzY1LCA5NDA1MiwgMzg1MywgNjUxODAsIDEyNzkyMywgCi0gICAgMTIwNzk2LCAxMjAyNDUsIDkyMzI0LCAwLCA4NjU5LCAwLCAxMjQ3NCwgOTI1NzksIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgCi0gICAgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIDY5NjMzLCAxMjAwODksIDEyNDcwLCAwLCA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAKLSAgICAxMDk0NiwgMTI3MzEwLCA1MDAwLCAwLCA5ODM1NzksIDAsIDY5NjcyLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgNjgwMTgsIAotICAgIDY3MDksIDAsIDc4ODg1LCA5ODM3MDgsIDEyNzk3MSwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIDEwMzMzLCAxMDM5NywgMCwgCi0gICAgMCwgNzM3OTEsIDAsIDAsIDAsIDAsIDExOTEyMywgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMTI3MjkwLCA4Mjc1LCAKLSAgICAzODkzLCA5ODMyNjQsIDAsIDEyMjEwLCA3MjIxLCA0MjE0NywgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAKLSAgICAxMjUxNiwgNDQ0NCwgMCwgOTIyNzEsIDc0NTM3LCAxMDg5MiwgODIzMSwgMCwgNjQ3MywgNDE5NjgsIDc4Mzg4LCA0MTk3MywgCi0gICAgMzU5MSwgNDE5NjksIDAsIDI0NTMsIDEyODU0OSwgOTI2NjYsIDY0NzA1LCAwLCAwLCAxMDM0OSwgMTA0MTMsIDQzNTkxLCAKLSAgICA0MTk2MiwgMzIwMiwgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDk0MDYwLCA2ODcsIDAsIDAsIDAsIDE4NDAsIDAsIDY4NjcxLCAKLSAgICAxMTk4MDksIDQ4ODMsIDI4NSwgNDcyMywgNzAwOTksIDkyNjkyLCA0NDU5LCA3NDU3NywgNDI5MjEsIDQxNzIwLCAxMTA4OSwgCi0gICAgMjQwLCAxOTkwNiwgMCwgNDIzMjMsIDAsIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDEyNjUzNSwgMCwgMCwgMCwgMCwgNDI2MzQsIAotICAgIDk4MzM0MywgNDM0MzcsIDMwODEsIDExNDYzLCAxMjAxNTQsIDAsIDAsIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgCi0gICAgMTE5MDIzLCAxNzI5LCAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgNDMzMzQsIDY0ODUyLCAwLCA2NTE5NCwgNjYyMDEsIDAsIAotICAgIDY2NTc4LCA1MDAxLCA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCAKLSAgICA3Mzg4OSwgNzQxODIsIDEyNzkxNSwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCA5MTc5NTIsIDEyMDA4MywgCi0gICAgNjM4NzMsIDg0OTEsIDAsIDAsIDk4MzYyMywgNDUzMCwgNDI0MDksIDcxMjYsIDE5NDU3NSwgMjcyMSwgMTIwMDc0LCAKLSAgICAxMTkwOTYsIDE5OTI5LCAwLCAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIDEyMDA3NywgMTIwNTMwLCA2NjE3OSwgNDI0MTIsIAotICAgIDY1OTQxLCAxMzExNCwgNjQ1MjIsIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAxMjcwNzQsIAotICAgIDk4MzIzOCwgNTUyODAsIDQyMTc0LCAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgNjYwMjYsIDQzMDYsIDQxMzgwLCAKLSAgICA2ODQzMiwgOTI1ODYsIDAsIDY2NjY3LCAxMjczMDksIDAsIDEyNjUyMSwgNDIyMDAsIDQyNTY2LCAwLCAwLCA1MDg4LCAKLSAgICA2OTQ4LCAwLCA4NTI0LCAwLCAwLCAxMjM4NSwgMCwgMCwgNjk2NDYsIDEzODYsIDY0NTgwLCAxMTQ4MCwgNjExNiwgNjUwMzksIAotICAgIDY1MDM4LCAxMjM5MiwgNjUwMzYsIDgwNjQsIDAsIDEyMTAxLCA1ODIyLCAxMTkwMDQsIDIwODAsIDcxMCwgNzc5OTksIAotICAgIDExNjYzLCAxNjY2LCA0MjA5MSwgMTE5NjU3LCAxMjM4MywgNDM2NzEsIDQyMDkyLCA2ODQxOCwgNDI4OSwgMCwgNjM4OTYsIAotICAgIDEyMDYxLCA0MjA5NiwgNDM2MjEsIDMzNjIsIDEyMzc3LCA5ODM4MzIsIDk4MzgzNCwgNjg0NDksIDc0NjEsIDczOTAxLCAKLSAgICAxMjQ0LCAzMzEsIDczNzg2LCAxMjY4MywgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAKLSAgICAxMjA4MTgsIDQxOTY0LCA0MjIwOCwgNjM4NDMsIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIAotICAgIDc4NTQ5LCA0MTIyMCwgMTMwMzIsIDAsIDU4NCwgMTI5MzMsIDQzMTc3LCAxMjM3MywgNjk4NTUsIDEzMDAwLCAxMzUxLCAKLSAgICAyOTM1LCA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgNzgyMjksIDEyNDI3LCA2NjUxNCwgNjk4NTksIDEzMDMxLCAwLCAKLSAgICA2MzkwMSwgMCwgMzY1NywgMTI4NTcyLCA2NTIwMiwgNjAwMCwgMTE5MjA2LCAxMjQyNiwgMTI3MTgxLCAwLCA0MTc0MCwgCi0gICAgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAxMjQyOSwgNjcyNywgMCwgNzU2MiwgMCwgNTE3MCwgMCwgCi0gICAgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgOTIzOTcsIDYxNjIsIDAsIAotICAgIDY5MjI4LCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIDAsIDQyMjA3LCAKLSAgICA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgMCwgNjc4NjQsIAotICAgIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgNjk4MDUsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgNjM4NjEsIDAsIAotICAgIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDAsIDc0NTYwLCAKLSAgICA0MTM3LCA4MDgyLCA3ODUwNiwgMTE5MDYyLCA3ODUwNCwgNjcwNCwgNDU5MSwgMTI4MDI5LCAwLCAwLCA5NjgwLCAwLCAKLSAgICAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgNzg1MDgsIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgNDI2ODcsIDgzNjgsIAotICAgIDAsIDQxNDk5LCAwLCAwLCA0MjI0MiwgNDE0OTgsIDkxNzc5NCwgNDIwMjUsIDc4NTY1LCA2NTgwNSwgNDI0NjMsIDAsIAotICAgIDI5MjQsIDAsIDEyMDUxMCwgMCwgMCwgMTE5MjEzLCA3Mzk0MSwgMCwgNDIzMzAsIDkxNzc4NCwgMzk2OSwgMCwgMCwgNzE2OSwgCi0gICAgMTk5MiwgOTY1MiwgNzM5NzcsIDcyNDYsIDQyMDg2LCAxMjY2MTUsIDIyMTksIDAsIDAsIDEyODgwMSwgMTk0ODM3LCAwLCAKLSAgICAzMjcsIDAsIDkwNDIsIDkxNzc3NywgOTE3Nzc2LCA2NTE0OCwgMTI0MzMsIDkxNzc4MSwgMTI3Mjc2LCA5MTc3NzksIAotICAgIDEyNDMxLCA4NjY4LCAxMjQzNCwgOTgzODM1LCA5MTc3ODIsIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAxMjgyNDMsIDQzNjUzLCAKLSAgICAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAxMjgwMTQsIDQyNDIzLCAxMTkwNjYsIDAsIDEyODEwOCwgNjY3MDksIDAsIDg4MTEsIAotICAgIDkyNywgMCwgMCwgMTI0MzYsIDk4MzI0NSwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgNjUxNDMsIDAsIAotICAgIDE5NTAxNiwgMCwgNzgxOTcsIDExMzQ4LCAwLCA3ODAzNywgOTE5NCwgOTgzMTg0LCAwLCAxOTkxNCwgMTIxNzksIDk4MzgxMiwgCi0gICAgMjI5NiwgMTk0OTIzLCA2MzgzNiwgNjM4MzIsIDkxNzc3MywgMTA5NjcsIDYzODE2LCAyNTk0LCAzNDQ0LCA2MzgxNywgCi0gICAgNjQ2NTEsIDAsIDQxNTAzLCAxMjc0NzgsIDExMjY1LCAwLCAxMjA3NTYsIDE5NDkyMiwgMCwgNTY2NCwgMzk3MiwgMCwgMCwgCi0gICAgMCwgMTI4NTA4LCAxMjQxNiwgOTE3NzY0LCAxMTk2MDgsIDEwODE2LCA5MTc3NjksIDkxNzc2OCwgMTI0MTgsIDc0MTExLCAKLSAgICAzODgyLCA4NTMyLCA5MTc3NzEsIDE1NzMsIDEyODY0OCwgMTE5ODQ3LCA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCAKLSAgICA2NTM0MywgMTI2NDkxLCAxMjQxNCwgODI4NywgNjgyMTksIDE5NTAxNywgNjgxMDgsIDExNDMsIDExOTE2OSwgMTE5ODQ2LCAKLSAgICAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgMTI3MTA0LCAKLSAgICAxMjY2MTksIDAsIDAsIDgwMjcsIDEwOTk3LCA5MTcxLCAxMjc0MSwgMTE0MDAsIDcxMzA1LCAxOTQ3OTksIDAsIDEyODIzOSwgCi0gICAgMCwgMTI4ODgxLCAxMTk2MDQsIDEyNzUyMywgMTIwMTkwLCAxOTQ3NzMsIDY3NjA4LCAxMjgyMTQsIDQyMzY4LCAwLCA3NzE1LCAKLSAgICAzODgxLCA0MTQ4NywgMTIxMTgsIDQyNTE0LCA2ODY1MSwgMCwgOTgzODk1LCAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAKLSAgICAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIDM4ODksIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCAKLSAgICA5ODMyNDEsIDMwMTQsIDUwODEsIDY1ODUzLCAxMjA3MTUsIDAsIDY4MDE0LCA2OTk1MSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCAKLSAgICA0NTk3LCA2NTUzMiwgMTE4MjgsIDEyMDE4NSwgMTIzNzEsIDAsIDg0MDcsIDAsIDEwODA1LCA4NTE4LCAxMDc3OSwgCi0gICAgMTIwMTg4LCA3MTMwMywgOTgzOTMzLCAxMjM2NywgNDIxNzAsIDAsIDkyNTU3LCA2MjksIDE5MjQsIDAsIDEyMDM3LCAKLSAgICA3NDM2NiwgNTk4NywgODQ2MiwgODAwNSwgMTIzNjUsIDYzOTMzLCA2OTczNSwgMTIwODE1LCAxMjM2OSwgMTA2NDksIAotICAgIDY3OTgxLCA1MDc3LCAxMjAxNzQsIDEwODgwLCA2MzkyNywgNTA3NSwgOTE3ODgxLCAwLCA2NTA3NSwgMCwgMTEwMDcsIAotICAgIDk4MzcwNSwgNjY2NTksIDkyNjA3LCAwLCA2NjY4NCwgMCwgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCAKLSAgICA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgNjM5MjMsIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIAotICAgIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDYzMjUsIDUyNzYsIDQzMDIxLCAxMjA0ODgsIDAsIDU1MjM2LCAwLCA2NjQ2MSwgCi0gICAgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCA0MTMyNywgMCwgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgCi0gICAgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIDcxMzExLCAwLCAxMTkxODUsIDQyMjI5LCAxOTQ5MTIsIDAsIAotICAgIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgMTI1ODcsIDk0MTA0LCA3ODU3MSwgMCwgNzEzMjgsIDE5NDU2MiwgNDE1NzYsIAotICAgIDQyMjE1LCA3ODU3MCwgMTE5MjA3LCAwLCA4NTc4LCA1OTk1LCA3NTczLCA0MTU3NSwgNzQ3ODksIDc0NzUyLCA2Mzk0NCwgCi0gICAgNjM5NDksIDY0NzY3LCAyNjcwLCA0MTY3LCAxOTQ3OTYsIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIAotICAgIDczODU0LCAxMTczNywgOTcyMSwgMCwgMCwgMCwgMTE3NDIsIDI0MTksIDAsIDExNDkzLCAxMjMzNCwgMTk0OTEzLCA0MTUzLCAKLSAgICAxMjMwMiwgMTA3OTMsIDUyNTAsIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCAKLSAgICA2NTgwNiwgNDM5OTcsIDAsIDQyMDAyLCAxMjQwNCwgOTgzNTUzLCAwLCA0OTQwLCAxMjQxMCwgNzY4MywgMTE2NywgNzM3MjksIAotICAgIDQ5ODMsIDEyMDUwNywgODYxLCAwLCAwLCAwLCAwLCA0Mzc1NywgNDMzNzAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCAKLSAgICA2NjMxLCAwLCAxMjgxNiwgNDM3NTksIDQyMjE4LCAxMjcxMCwgNjg2NzQsIDEyNzIxLCA0MTAxLCA2NjE4NSwgMCwgNTk5MiwgCi0gICAgNzYxNiwgMTk1MDQ0LCAwLCAxMjU3NywgMCwgOTgzODg0LCA4NTMsIDQyNjkzLCAxOTUwMTQsIDAsIDk4MzY0NywgNTAxNiwgCi0gICAgNDM1MzUsIDYzODkzLCA0MjgzNSwgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA3MTA1LCAxMjc4MDcsIAotICAgIDY1MDYwLCAxMjA3OTcsIDk5MDAsIDc3NTAsIDAsIDE5NDkxOSwgMCwgMTI3ODMwLCAwLCA2NDc3OCwgMTI1ODUsIDEwNTY1LCAKLSAgICAxMjgxNTEsIDEyMTc3LCAwLCAwLCAwLCA3NzgyNCwgMCwgNDkwMCwgMTI3ODc0LCAxMjg3OCwgOTI2MzAsIDg5ODQsIDQxMTksIAotICAgIDc0NzY4LCA4OTcxLCA3ODU5MywgNDMxMTMsIDk3MDIsIDc4NTk0LCAxMTAyNSwgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIAotICAgIDc0MTg1LCA5MjQ4MSwgOTI3MTAsIDEyMzk3LCA3NzgyNywgMCwgMTMwNTQsIDEyMzk0LCAwLCAwLCAwLCAxMzA1MywgMCwgCi0gICAgMzk0OCwgMTA3ODEsIDE1NDYsIDAsIDUwMTAsIDE2ODAsIDEwNTA3LCA3ODU5MCwgNzg1ODMsIDAsIDAsIDAsIDE5NDkxNSwgCi0gICAgNzI2NywgMCwgNzQ4MzMsIDEyODE4MSwgNTk5MywgMjgxOSwgMCwgMTI3MDYsIDc3ODQwLCAxODkzLCA3MjY2LCA2MzkxNSwgCi0gICAgNzI2NCwgNzI2NSwgMCwgMTM2MywgMCwgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgNjk5MjksIAotICAgIDEyNTg5LCA0MTQ3OSwgMTI4MzEzLCAwLCA0MzMzOSwgNzM3NzYsIDk4MzYsIDEyMDcyNywgMCwgNDE0ODEsIDQzMzM1LCAKLSAgICA3ODMyLCA0MjM0MywgMzA5MCwgNDMzMzcsIDgxNywgMTY2NCwgMTg1MCwgMTI4ODQxLCAzMDc5LCAxMTM0MCwgNDI0MDgsIAotICAgIDQyNDQ3LCAxMjcxNDAsIDEyMDAyMCwgNDIzMDcsIDEyMzg2LCA0MjMwNCwgOTE3NTU1LCAwLCAxMjM4OSwgMCwgOTIzNjYsIAotICAgIDQxOTk2LCAxMTUyNiwgNjM5ODUsIDU4NjQsIDExNDcsIDYzOTkyLCA0Mjg4NywgMTk4NywgOTI3MTgsIDU0ODAsIDc4NTgsIAotICAgIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCA0MTY4NiwgNjM5MDUsIDExOTYwMSwgCi0gICAgMTk0Njg4LCA5ODMxOTAsIDAsIDEyNjQ5LCAwLCAwLCA4MjQ3LCA1MDcsIDkxLCAyMDQyLCAxMjA3NzUsIDQzNjQzLCAKLSAgICAxOTQ2ODksIDY2MDI4LCAxMDAzNiwgNDE4NDQsIDExOTgxMywgNzc0LCAxMTk4MjksIDAsIDExOTgxNSwgNTk5NCwgMTI1MzksIAotICAgIDAsIDc4Mzc1LCAxMjA1OTcsIDExOTgzMywgOTgzMTA1LCAxMTk2MDAsIDAsIDAsIDc3MTksIDYwMjYsIDI0ODYsIDEyODMxMiwgCi0gICAgMTE5ODA4LCAxNjIsIDAsIDY1MjE5LCA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDE5NDg4MSwgCi0gICAgNTI2MiwgMCwgNTUyMzMsIDEyNjgxLCA0MjM3OSwgMCwgNzUzNCwgMTIyMTksIDAsIDEyNzUyOCwgNDI4MTAsIDEwNDkyLCAwLCAKLSAgICA5ODM2NjEsIDAsIDQzMTE5LCAwLCAxMjA3NTMsIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDEyNzI5LCAwLCAwLCAKLSAgICA3NDExMywgMjM0MywgNDEwMywgMTk5NDYsIDc0MTEyLCA3Nzg1MSwgMTMxMTIsIDAsIDE5NTAxMiwgMTI4NTksIDcwMDg3LCAKLSAgICAxMjAxNDgsIDY2MzY5LCA1ODYxLCAxMjc3NTgsIDExOTk5LCAxMjQwMCwgMCwgOTgzODM5LCAxMjY0NSwgNTE0NiwgMTEzMjAsIAotICAgIDY4NDEwLCA2NzQ4LCA2NTA0MCwgMCwgNjQxODQsIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgNTE0NywgMCwgMCwgCi0gICAgNzQ1MjQsIDAsIDE5MjgsIDAsIDY3NjQ5LCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIDY3NjEwLCA4MjQxLCAKLSAgICAwLCA3Nzg2OCwgNDIwNiwgMCwgMCwgMCwgMTI4Mjk4LCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMTIwMjM0LCAwLCA4MzU3LCAKLSAgICA0MTI0LCA3Nzg2MiwgNjU4MzYsIDEyMDY0MSwgMTI3OTI2LCA3Nzg1OSwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIAotICAgIDEyNDA1LCAxMjAxNTAsIDkyNjY0LCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAxMjAzMTEsIDc5NDUsIDAsIDQ0MDIsIAotICAgIDk5NzAsIDEyNDAyLCA5ODMxMzYsIDQyMzkyLCAxMzA1LCAxMjQwOCwgMCwgNDQwMDcsIDAsIDAsIDQxNDY0LCAxMjQxMSwgCi0gICAgMTI5NjksIDEyMDgyNCwgNDE0NjUsIDk4MzU2NSwgODUyOCwgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIAotICAgIDExOTE2MywgMCwgOTA5MywgMCwgOTE0NywgMTI4Nzg3LCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDgyOTYsIAotICAgIDY3NTAsIDE5NTAxOCwgMCwgOTU5NCwgMCwgMCwgNDM1MjcsIDAsIDcyNywgMTk0NzAzLCAxOTUwMjMsIDU4MDUsIDAsIAotICAgIDY3MjYsIDAsIDQyMTc2LCAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDIyODAsIDAsIDEyMzcyLCAxMjA2NDIsIAotICAgIDEyMDMwNywgMCwgOTIzNDMsIDAsIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIAotICAgIDE5NDcwMSwgMTA4MDMsIDQxMzIsIDEyMDMwNiwgNjg0NzQsIDkyNDczLCAwLCA5ODMzMTMsIDc0ODM3LCAxMjAxNTUsIAotICAgIDE0OTksIDAsIDgwNTUsIDQyNzQwLCA2Mzk2NSwgMCwgNjM5NjIsIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgCi0gICAgNjM5NjksIDExNzgxLCA0MjcxOCwgODc4OCwgMTM1NywgNjQ4NTEsIDY1NzQzLCAwLCA4Nzc0LCAwLCAxMjcwODYsIDk5NDEsIAotICAgIDEyMDE3MiwgMCwgMTkzMywgNjk2NTUsIDk1NjQsIDAsIDkyNDM1LCA3Mzg2NiwgMCwgMCwgMjQ4NywgNjc2MTQsIDMxMjEsIAotICAgIDE4MDQsIDMzMTEsIDY3NjE1LCA3MDA4MSwgNzgzMDIsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAxMjc0NzUsIDAsIDY4MjAwLCAKLSAgICA2Njc1LCAxMjgxNDQsIDAsIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCAKLSAgICA2NDY2MywgMCwgMCwgNDU2MSwgMjEwMSwgMTM5OCwgMCwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgOTI2ODQsIDExNDA2LCAKLSAgICA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAxMjY1MTgsIDcxMDEsIDY5NjcsIDAsIDE5NDg5OCwgOTc5NiwgMCwgMzMzLCAKLSAgICA2OTg5MSwgMCwgODE0NCwgMjExNywgMCwgOTgzNTk1LCAxMjQwNiwgMCwgMTk5MzEsIDExOTA4OSwgNjY3OCwgNzc2OSwgMCwgCi0gICAgMTI2MjEsIDAsIDEyNzM2NiwgMTAyMjcsIDQ3NjQsIDQzMTAxLCA5OTgxLCAwLCA0MDk4NiwgNDEyNywgNjY0ODcsIDAsIAotICAgIDQyMjAyLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCA5NDA5NywgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgCi0gICAgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDEyOTg1LCA0NTMzLCAxOTUwMjEsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgCi0gICAgMTIwNzA0LCA2NTQ2MSwgOTc5OCwgNjk3MDQsIDAsIDE5NDgsIDY5ODQxLCAwLCA5NTIsIDEyODIzNSwgMCwgMCwgMTIwODAyLCAKLSAgICA2NDQ5LCA5NDk0LCAxMjAzMTMsIDAsIDQzMDk4LCA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIAotICAgIDExOTk3MywgMCwgMTI4MTcsIDY3NTk3LCA2Njc2LCAzOTMwLCA0MjYxNSwgMCwgMCwgNjc1OTgsIDAsIDAsIDAsIDY1NTkxLCAKLSAgICA0MTU4MSwgNjU5MTYsIDE0NTMsIDAsIDAsIDAsIDg1MDAsIDQyMjIyLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIAotICAgIDExNTQzLCA2NzY3NiwgNjQ2NzYsIDAsIDAsIDY3NjA2LCAxMTkwODMsIDAsIDQyMjE3LCAxMzEwMiwgMCwgNjYwMDMsIAotICAgIDY2NzIsIDAsIDAsIDAsIDk4Mzc0NywgNjM4NDEsIDk2MTMsIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIAotICAgIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgMTEyODEsIDAsIDM4MDcsIDE0NjksIDY2NjQwLCAKLSAgICA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCA5MDQsIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIAotICAgIDQxMzQsIDAsIDc0ODQ3LCA2NjU3NiwgMTI3OTE2LCAwLCAxMDUyMCwgODU3NSwgOTk2MCwgMTIwMSwgMTI3Mjg5LCAxMjg0NiwgCi0gICAgMTI3MjkxLCAxMjcyOTIsIDExOTE5LCA2NDk2MiwgMTI3Mjg3LCA0MzczOSwgMTI3MjgxLCA4NTExLCA5NDYwLCA4MjMsIAotICAgIDExNTg3LCAxMjMwNSwgMCwgNjQ2OTUsIDEyNzMwNSwgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgCi0gICAgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIDY1NzYxLCAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCAKLSAgICA5ODIxLCA2NDMwNCwgMCwgNTE1MiwgMTEwNDgsIDc1MzMsIDY4MzY2LCA2NDQxMCwgOTIzMDUsIDAsIDQzMjMsIDEyMDA2MiwgCi0gICAgOTI2NjksIDcxMzMyLCAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgCi0gICAgNTI2MCwgNDMxNDMsIDk0MDM4LCAzMjYsIDEyMDEzMSwgNjg0MjMsIDAsIDEwNzcxLCAyODc2LCA3NDA3NCwgOTI1MzAsIAotICAgIDE5NDkyNCwgNDEzOTgsIDczODIsIDk4MDIsIDEyNzA3NywgMTI3MDc2LCA0NTMsIDQxMzk2LCAxMjA1MjQsIDQyNzIwLCAKLSAgICAxMjE0MCwgOTU3MiwgMCwgNzAwMywgMTk0ODgzLCA0MjMzNCwgNzcwNCwgMTI2NDkwLCAxOTQ4ODUsIDQzMTQ0LCA0MTIzLCAKLSAgICA4NDk0LCA0MzE0NiwgOTk3NywgMCwgMCwgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCAKLSAgICA0MTI2LCAwLCA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDEyNjYwNCwgMTA0NjQsIDAsIDAsIDE5NDg2OSwgNjQ1MTQsIAotICAgIDExNTI4LCA2NDAyNCwgMTI4MDcyLCA2NzksIDY0MDEzLCAwLCA1ODUwLCA3NTgsIDc1MzYsIDAsIDkyMjM0LCA0MTQ0MSwgCi0gICAgMTA2OTMsIDY0MDA2LCA5ODM1NjcsIDY0MDA1LCA0MDU4LCAxMTkwMTksIDEyNjQ4NywgNjQ2NjAsIDAsIDExOTA1MCwgMCwgCi0gICAgOTgzMDY5LCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCA4OTcwLCAwLCA5OTM0LCA5ODMwOTQsIDEwNzc0LCAxMjgwMjAsIAotICAgIDQyMjAxLCAxMjQyMSwgMTI4MjE2LCAwLCAxODUyLCAzMDU3LCA2NDA0NiwgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgMCwgMCwgCi0gICAgMTk0ODk5LCA5MjMyMiwgNzY0NSwgMTI4NTQsIDc0MzM4LCAzNDk2LCAwLCAwLCAwLCA5MTAyLCA2MjcsIDEyNzc5NSwgCi0gICAgNjE1OCwgODMyNywgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgMTMzMDksIDExNTcwLCAxMjc4MTEsIDE5OTYwLCAxMTY5NiwgMCwgCi0gICAgMTAxOCwgMTE4OTcwLCAxOTQ5MDksIDE5NDg5NywgMTY4MiwgMTk0ODk2LCAxOTQ5MTEsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIAotICAgIDAsIDAsIDczODE0LCAxMTQxMiwgNjc2OCwgMTA3MjgsIDE5NDgzMCwgNzEzMTYsIDExODg2MywgNDMzMTEsIDY0OTY2LCAKLSAgICAxMTU3NywgMCwgNDMwNDAsIDE4MzMsIDExNTc2LCAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAKLSAgICAxOTQ4NDgsIDc1MzUsIDgwODUsIDQyNTI1LCAxMjAzODcsIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAKLSAgICAxMjA0ODksIDE5NDcxMSwgNjQ0ODMsIDY1NjkzLCAwLCAwLCAwLCA2OTY5NSwgNDIyNDAsIDAsIDEyNjY1MSwgNDI4NjQsIAotICAgIDEyNjQ5OCwgNjQ2NjcsIDQxODY4LCAxMTg0LCAwLCA4MTUsIDExNDg0LCAxMjc1MzUsIDY3ODQwLCA5ODM2NTEsIDAsIAotICAgIDY2MTk3LCAwLCAxMDk4NiwgNjQ2ODMsIDk4Mzc4NSwgMCwgMzQ1NSwgMCwgMCwgOTg3OSwgMCwgMCwgNDE1OCwgMTI4MDUwLCAKLSAgICA2ODE2NiwgMCwgMCwgMCwgMCwgNjk2NDUsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCA2OTY0MywgNDIxOTksIDAsIAotICAgIDkyNDA0LCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgMCwgOTIzOTAsIDQyODY3LCAxODM0LCAwLCAKLSAgICA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAyNjUyLCAxMjA1MjcsIDcxNjQsIAotICAgIDEwNzg0LCAxOTUwOTMsIDY3Njc0LCAwLCA5MjIzMywgOTI0ODIsIDE5NDc0OSwgNzQ1NjIsIDkxNzUwNSwgMTgyOCwgCi0gICAgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCA2NTIzOCwgNjgzNzQsIAotICAgIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCA2NDQzNiwgMzYwMSwgCi0gICAgMTk1MDk0LCAxMjgwNzMsIDk4MzU2MiwgNjA5LCAxMTU1NSwgOTgzMDk5LCAxMjQ5NiwgMTI3ODM5LCA3NDE4MSwgNDM0MywgCi0gICAgMTI1MDUsIDAsIDEyNzg2MywgMCwgMTEzNzcsIDIzOSwgMCwgNjM3LCAwLCAwLCA0MjY3MSwgMCwgMCwgMCwgNDM1NjUsIAotICAgIDcxMzA2LCAxMjY0OTMsIDEyNjk2LCAxMjgyNTYsIDAsIDk0MDYyLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCA5ODMyMDYsIAotICAgIDQyODE4LCAxMjY2MzIsIDAsIDEyMDQ5MCwgMCwgMTE5MTM3LCAxNTA2LCA0MzU2MiwgMCwgOTI0OTEsIDAsIDEyNjUxLCAwLCAKLSAgICA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgMTE4ODQ0LCAwLCAKLSAgICAxMjcwODgsIDM1NSwgOTcxOSwgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIDEyMDMzLCA0MjE3OCwgMCwgNjk3NjAsIAotICAgIDQyNTcxLCA5MjYzNSwgMCwgMCwgMCwgMCwgMCwgMTI3MTc2LCAzMTc4LCAwLCAwLCA5MjcwNCwgMCwgOTA4MCwgMTI3MDAwLCAKLSAgICAxMjAzNTIsIDAsIDY4MjA5LCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCA2NjAwMCwgOTQ4OCwgNjUxNjYsIDExOTExMiwgCi0gICAgMCwgMCwgMCwgMCwgNzEzMTMsIDAsIDUyNjUsIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgCi0gICAgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIDQzMzQ2LCA4MTE2LCAKLSAgICA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCA5ODM2MDIsIDEyMDgxMSwgCi0gICAgMCwgMTI0NjgsIDg2MDcsIDEwMDgsIDAsIDEwMDkyLCAxOTUwNzgsIDkxNzg0MiwgNjc4NTUsIDU1MjU3LCA3Mzc3MSwgCi0gICAgMTc2NiwgMTEyODIsIDExOTk2LCAxODIwLCA0NTQ3LCAwLCAwLCAwLCAwLCAxMzIyMywgMTI4NjY1LCA2NDU5NSwgMTI3Mjk0LCAKLSAgICAwLCA5MjMxMSwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAwLCAwLCAwLCA1MzgyLCAwLCAwLCAwLCAxMTkwNjAsIAotICAgIDY0OTUzLCA1NDA2LCAxOTkyMCwgNjk4OTcsIDY2NTEwLCAzNTkwLCAxOTQ4NjQsIDExMzAsIDAsIDAsIDQyMDE2LCAxMTgyMywgCi0gICAgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDcxMzIzLCA5MzI2LCA3MzgyNiwgNTMxMCwgNzQ4MTIsIDc4NTg0LCAKLSAgICA5MjIyOSwgODk1OSwgNDM1ODksIDY3NDcsIDY2NzIzLCAwLCA4NTY4LCAwLCAxMjA0OTYsIDczODE2LCAxMjA4MDMsIAotICAgIDk4Mzg0OCwgNDI2NzAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMTIwNjMxLCAwLCA0MzA2MywgNzQ1MTksIDEyNzE4MiwgMCwgCi0gICAgNzM5MTcsIDc4NDMsIDY5NzgzLCAxMTY4OSwgNTQxMCwgNTc4MywgMTA0NjgsIDg0MDMsIDU0MDAsIDExNTk0LCAxMjgyNDcsIAotICAgIDAsIDExODk5MCwgMTA0OTEsIDY5ODQyLCA2NDQxMiwgMCwgMCwgNTU4NywgNDI4NjUsIDY0NDA0LCA4MjY4LCA0OTIzLCAKLSAgICA2NTA4NiwgODk4MSwgMTIzODIsIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDY5NzM4LCAwLCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAKLSAgICAwLCA4NjQyLCAwLCA0Mjc2NiwgOTgzODY2LCAyMjEwLCA5OTgzLCAwLCA5NDAwOSwgMCwgMCwgMCwgNzM5OCwgNDE1MTUsIDAsIAotICAgIDExODAyLCA4MDQxLCAxNDYxLCA5MTAsIDExOTEzMywgMCwgNjc0OSwgMzY1OCwgOTM5NjQsIDEyMDUyNSwgMCwgNzYxNywgCi0gICAgMTk0ODQxLCAxMjg4OCwgMTI3OTgzLCA2NzY2OCwgMTMxNDMsIDAsIDkxOTMsIDExMDk3LCA1NzAzLCAwLCA0MTUxNywgCi0gICAgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAxMDY2MCwgNTc2OSwgNjEzLCAKLSAgICA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIDkyNTIxLCAwLCA1OTIsIDE1NzgsIDEyNDU5LCA0MzQ0OSwgMCwgMCwgODIyNSwgCi0gICAgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIDEyNjQ3MiwgMTI0ODAsIDQzMjQzLCAKLSAgICAwLCAzOSwgMTI0ODcsIDAsIDEyMDUyOSwgNzQxOTksIDEyNDgyLCAwLCAxMjQ4OSwgMCwgMzE5NSwgNTU1MCwgOTgzNTU0LCAKLSAgICA3ODk3LCAwLCAxMjAzLCA3NDM5NiwgMTgxMywgNjQ1NDQsIDQxMzExLCAxMjA5MCwgMCwgMjg3NywgMCwgMCwgMTY3NSwgCi0gICAgNjk4NDAsIDAsIDAsIDAsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAxOTQ3NzcsIDk4MzYxMSwgMCwgMCwgMCwgNDMyNDQsIAotICAgIDAsIDAsIDk4MzkxNiwgMTE5NTYxLCA5ODMwNzgsIDAsIDE5NDkyMSwgMTI4MTYwLCA5OTM5LCAwLCA5ODMxNTEsIDc3ODYwLCAKLSAgICAwLCAwLCAyNzAsIDAsIDEwNzE0LCAwLCAwLCAwLCAwLCAwLCA2NTM3MiwgMCwgNzQwMzgsIDExOTU1OCwgNjI3MywgNjY2NzksIAotICAgIDM2NCwgOTU5NSwgMTk0OTA4LCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIDY2NDg5LCAyMjQsIDAsIDY4NjcwLCA5MzMyLCAKLSAgICA0OTY2LCA2ODY3NywgMCwgNjg2NDQsIDAsIDM4NDEsIDY4NjM0LCAwLCAxMDczMiwgNjg2NDAsIDg1MCwgNDk3MiwgMCwgCi0gICAgMTI4OTAsIDI5MDksIDY4NjE5LCA0NDAwOCwgNjg2MjcsIDk4MzcxOCwgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAKLSAgICAxMTk2MiwgMTk0Njk0LCAxMjUwNywgMTE5NiwgMTI4Njg3LCAxMjgzMTEsIDc3NywgMTIwMTg3LCA0Mzc1LCA2NTI3MSwgCi0gICAgNjc2NzgsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMTE5MzQzLCA5ODMyMzYsIDk0NTQsIDYzNzc4LCA4NjU4LCA0MjUyOCwgCi0gICAgNzgwMDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCA0MjUwMiwgODI4MCwgNzQ1MjAsIDI3MDEsIAotICAgIDAsIDEyNzAwMiwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIDY2NzAxLCA2Mzc3MiwgOTgzODE0LCA2Mzc0NSwgCi0gICAgMTc0OCwgNjM3NzAsIDAsIDAsIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgCi0gICAgNjA5NiwgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIAotICAgIDE1OTEsIDAsIDYzODYsIDYzNzgzLCAwLCAwLCA5MjUzNSwgMCwgMCwgMCwgNzQ1NzUsIDAsIDY1NzE5LCAxMzA4MywgCi0gICAgNjQ1NzQsIDY1MDEyLCAwLCAxNjQwLCAxMjQ5NSwgNjY2OTEsIDc2MjQsIDMxMzgsIDEwOTk2LCA5MjI0NywgMTkyMiwgMCwgCi0gICAgMTI0OTgsIDEwOTg3LCA2OTkzNiwgNjk5MzksIDM4OTQsIDY1NTQzLCAwLCAxOTQ4NDIsIDk4MzU4OCwgNDkzLCAwLCAKLSAgICA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIDkxNzkzMiwgCi0gICAgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA0MjY4MSwgMTAwMiwgMTI0OTEsIDAsIDY0OTExLCAKLSAgICA5MjYxNSwgMjA5NiwgNjUxMjAsIDAsIDc4MjE5LCA5ODMwODEsIDgzNzgsIDExNjMyLCAxMjcwNDEsIDY2MjEzLCA2Mzg2NCwgCisgICAgNDM1NjcsIDc0MDU2LCAxMjAyNjYsIDExODMzLCAxMTk5MTksIDcyMTYsIDY1MjMyLCA3MjE3LCAyNTEsIDcyMTgsIDc4OTUsIAorICAgIDQzOTUsIDQzNTM4LCAxMTk5MjYsIDExOTgzNCwgMTE5OTI4LCA3MjEzLCA2ODQ3NiwgNzIxNCwgNzIxNSwgNTg3OSwgCisgICAgNzQxNDEsIDg4ODAsIDc2ODUsIDY2NDU5LCAxMjAxNzMsIDY1NTQwLCA2NzM1OSwgNjI1LCA4MTg3LCA0Mjg2MSwgMTExMywgCisgICAgNzIzNiwgNzkxNSwgMzYzMCwgMTIwMTc2LCA4MTc5LCA3MDE2MywgNjc4ODYsIDkzMTYsIDEwOTgwLCAyNDg5LCA2NTYyNCwgCisgICAgODE1MCwgMTM1OSwgNjc2NTIsIDcwNDY0LCAxMjczMzAsIDczNzU2LCA1MDQyLCA1MDQxLCA0Mjc2OSwgMTIwODQsIAorICAgIDEyNzMyNCwgMTI3MzIxLCA3NDQxMCwgMTI3MzE5LCAxMjczMjAsIDEyNzMxNywgMTIxMjg0LCAxMjczMTUsIDEyMjgzLCAKKyAgICAxNjE2LCAzNzk1LCA2NzczMiwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMTI4MjgwLCAKKyAgICA2NzcyNCwgMzIzOSwgNjY4OTMsIDEyODgxOCwgMCwgODQzMSwgMCwgNDIxNjQsIDcxMjI5LCAxMTc3OCwgMTI2MjAsIDY4MjYsIAorICAgIDczNzczLCA3MDE2OSwgNTA0MCwgMTI3OTY5LCAwLCA2NzA5NCwgNzg0MjAsIDAsIDUwMzksIDk4MzI0MSwgNzg0MTgsIDAsIAorICAgIDUwMzgsIDAsIDk4Mzg2MiwgMTMxODQsIDQzOTYwLCAxMjA5MzEsIDY0NjQ4LCAwLCA5MzU5LCA3ODQxNiwgOTE3NjIzLCAKKyAgICAxMjg3NzAsIDY1MTU3LCA2NjYyLCAwLCA3MDE4MiwgMzg2MywgNzM5MDksIDQ4MzUsIDU1MjY2LCA0MzQzMiwgMTI3ODIyLCAKKyAgICA0MzA5LCA3MTI3LCAxOTQ1NjksIDAsIDE5NDU2OCwgMTMwMSwgMCwgNDI1ODksIDU2OSwgMTI4ODA0LCA3MzgxMywgNzExLCAKKyAgICA0Mzg5LCA3MTMzLCAxMjA2NDMsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIDE5NDU3MCwgNDEzMzEsIDEwMDYsIDc0MjQwLCAKKyAgICA2NzIyNCwgMTU1MCwgODIwMSwgNzA0NTMsIDc2MjcsIDU0OTksIDUwMzEsIDc3OTA4LCA0MjczOCwgNjU3ODQsIDQzOTU3LCAKKyAgICA2NTI2NywgMzc1OCwgMCwgNjU3ODEsIDY0NzM0LCA2NzIyMiwgMjQ0MCwgNDM5NTUsIDcwNzg3LCA4NDQ5LCAwLCA1MDA4LCAKKyAgICA5ODM1NzIsIDIxMTgsIDEyNjUwOCwgMTIxMjEsIDgyNTUsIDU1MTIsIDczODc1LCAyMTI4LCAyMTMwLCAyMTMxLCAyMTI2LCAKKyAgICAyMTMzLCAxMTE5LCAxMjEyNTAsIDIxMTQsIDIxMTYsIDI0NTUsIDExMzc5OCwgMjEyMiwgMjEyMywgMjEyNCwgMjEyNSwgCisgICAgMTI3NDg2LCA4NzE0LCA5ODM4MjAsIDIxMTMsIDE5NTA0OSwgMjExNSwgMTI4MTc3LCAxMjc5MDcsIDQzNzEzLCA1MDUyLCAKKyAgICA2NjIyMCwgNTgyMSwgNjE4NiwgNjU3NzgsIDY1Nzc1LCA1MDUxLCA2NTc3MywgMTQyOSwgNDI2NDcsIDUwNTAsIDMwMiwgCisgICAgMzg4LCA0MTExNSwgNzM1LCA2NjM3LCA1OTA3LCA2NTA4OCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCA5ODMxODEsIDEyMDAzLCAKKyAgICA1NTEzLCA1MTA5LCA1MDUzLCA3NDIzMCwgNTUxMCwgNzg0NTEsIDAsIDc4NDQ3LCAyNDcwLCA3ODQzNywgMCwgMTkyNSwgCisgICAgNzEyNTEsIDkyMjM3LCA3NDgwNywgOTgzMDYyLCA1MDQ4LCA1MDQ3LCAxOTQ4MzcsIDk4MzM4MCwgNzQyMDEsIDkyMzEzLCAKKyAgICAxOTQ4MDIsIDc0NDk3LCA4Mjk4MiwgODA4OSwgNjkyOSwgNjM5LCA4Mjk4MSwgNjgxNzksIDY0NDQyLCA3MDE4MCwgODI5ODQsIAorICAgIDQ1OTksIDQxNDAyLCA2Njc0LCA0MzM5NywgNDMyOTQsIDE0NzYsIDY0OCwgMCwgNjU4MTksIDMyMzMsIDAsIDQxNzgyLCAKKyAgICA2OTUxLCA5NDAxNywgMTI5MTk3LCAzNTMwLCA5NzUwLCAxMjgzMTcsIDEyMDk5MSwgNjY1NiwgNDI2MTgsIDcwMTc1LCAKKyAgICA1MDQ2LCA4NTEyLCA2NTg1NiwgNzQyNjEsIDg5NjcsIDAsIDUwNDUsIDQyMDI2LCAxOTE2LCA3OTg2LCA1MDQ0LCAxMjA1NTYsIAorICAgIDkwMDYsIDEzMTI4LCA1MDQzLCAxMjEzMzUsIDc4NTMsIDY3ODA4LCA3NDAwNCwgOTY2OSwgMTIzNDEsIDEyNzAzLCA4NDAyLCAKKyAgICAxMjg4ODMsIDExOTA3MCwgNzAxNzQsIDQxNzUwLCAzNTg2LCA2NDUwOCwgNDMxNDgsIDAsIDEyNzk3MSwgMTE5NjA2LCAKKyAgICA2Nzk4MywgMTMyOTYsIDUxNywgMCwgMTI4NDY3LCAxOTQ5NDYsIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAxMjEzMjYsIAorICAgIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgMTEyNiwgNzM4OTUsIDE5NDg1NywgCisgICAgMTk0NTkxLCAwLCAzOTI1LCA0MjUxLCA4MDY5LCAxMDUxNywgNzExMTIsIDQ4OSwgNzExMTAsIDQyNTAsIDkyMjY2LCAKKyAgICAxMjA0NTIsIDQzMTUxLCA5ODMxNzgsIDkyNzM4LCA2NjIwMCwgMCwgMCwgMTI1MDI2LCA3NDI5OCwgMTI4ODc5LCA5ODM0NzYsIAorICAgIDg3MTEsIDYxODMsIDgzNDQ4LCA5ODM5NTIsIDcyNDAyLCAxMjA0NDgsIDc2MjMsIDExODkyNSwgNjYzNzYsIDkyMzUsIAorICAgIDEyNzYwLCA3NDE3NiwgNjk2NjIsIDY2NDQ1LCA0MzU0MCwgMTAwNjIsIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIAorICAgIDAsIDEyNjU5NywgMTIwNDM0LCAxOTQ4NTAsIDc3MjYsIDE5NTA5NSwgMTk5MjIsIDI2NywgMzM5MywgNDIxOTgsIDEzNzEsIAorICAgIDE5NDg0OSwgNjkyMzMsIDI0NTgsIDAsIDYyMDEsIDAsIDQxMDc0LCA0MjY2LCAxMDY1MiwgNDE2MTIsIDQxMDc3LCAzNDAyLCAKKyAgICA5MDUwLCAzMzk4LCAxMjg0MjQsIDk4MzM1MCwgMCwgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIDEyODAxNywgMCwgMTA2MjUsIAorICAgIDEyOTEwNiwgMTI3NjcsIDEzMDE3LCA3ODc0MywgNjQyNjEsIDY0OTM0LCA3MDE1MiwgMTMwMTQsIDEzMDEzLCAxMjExOTgsIAorICAgIDY2NzMsIDAsIDAsIDEyMTMyNCwgMTI0MzgsIDAsIDk4MzM0NCwgODMxMDYsIDcxMTI4LCAxMjAwNjIsIDkwNTMsIDEzMDE1LCAKKyAgICA3NDUyMywgMCwgNzA0LCA2NjIxNSwgNjE5NSwgNzQ5NDksIDY2NjAsIDc4NzU4LCA5MTc3NjAsIDc0ODYxLCA0MjIxMiwgCisgICAgMTI2MjksIDExNDM1LCAwLCA1NTI1NiwgNjU1MzgsIDY3MzQzLCAxMjE0MzcsIDEyOTA4NiwgNDM4NzYsIDkyOTQxLCAKKyAgICA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDEyODU5NSwgNDM5NDksIDEyMDA0OCwgNzgwOTksIDEyNzA4NSwgMCwgCisgICAgMTI4MzIwLCA0Mjg3LCA4Mjc2LCA0OTAyLCAxMTMxLCA5ODM2MDYsIDc4NDU4LCA2NjcyOCwgMTgxNiwgNDM5NTIsIDQyNTMzLCAKKyAgICAxNjgsIDQyODQ1LCA0ODk4LCA2NDI5OCwgNDM5NTAsIDc4MTA1LCA0OTAxLCAxODIxLCA0Mzk1MSwgNTc4LCAzNjUzLCAKKyAgICAxMjg5NDYsIDc5MSwgOTE2MiwgNjk3NywgNzQxOTYsIDc4ODg5LCA3MDE2MCwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAKKyAgICAxMTkzMDMsIDk4MzQ1MSwgNzU1NywgMTE5MTA4LCA2NzM3OCwgODIzNCwgNzI0MSwgMTI4NjA4LCAxMTM3MzUsIDExOTE2NywgCisgICAgMTk0OTk2LCAxMjgxMSwgNjU5MjUsIDM5NDYsIDc4MDc4LCAxMDk5OCwgNzgwODAsIDY3MywgMTk0ODY3LCA2NDM5NywgCisgICAgMTI4Mjc2LCA3NDU5OSwgNzg0NDksIDg4OTAsIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIAorICAgIDI0NTIsIDc4MDgzLCA2NzIxNywgODcyOSwgNzg0NTYsIDAsIDc4NDUsIDEyNjU2NCwgNzEzMDIsIDQ0MDgsIDQxMjIsIAorICAgIDY3NzIsIDExMDM5LCA4NzIzLCA2NTg5NiwgNzEzMTAsIDExOTMwMiwgNzMxLCAxMTkzMDQsIDcxOTA0LCAyNDM4LCA2NDg1NSwgCisgICAgMTE5MzAwLCAxMTkyOTksIDExNzUsIDAsIDQyMTM1LCAzNzMsIDExOTE3MiwgMjExOSwgMTE0NTcsIDExNTIxLCA3NzIzLCAKKyAgICAxMjg2MzksIDAsIDAsIDQxOTUyLCA5MzAyMywgNTI3MywgMjEyNywgNTI2OSwgNjMzNywgNTIwMiwgMjQwNCwgNTI2NywgCisgICAgNDI4MjMsIDExMjkxLCAxOTkxNSwgNTI3NywgMTI5NjMsIDcwMzIwLCA2MTg5LCA0MTI1LCAxMzE0LCAxMjEzMywgMTIwMzQwLCAKKyAgICAxMTg4NzMsIDEyNzEsIDk4MzY0MCwgMTI5MTEyLCA2NjAyNCwgNDE0ODIsIDM4NjQsIDkyMDQsIDAsIDM4NzksIDAsIAorICAgIDEyOTc4LCA0MTY2LCA0NTc0LCAxMjgxMTEsIDc1NjcsIDc0NTksIDc4MTI4LCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCAKKyAgICA3MDE1NCwgNTc1OSwgMTk0ODY5LCAxMjE0MTMsIDQxMzg4LCA2NDQ0NiwgNDEzOTIsIDY0Mjg4LCA0MTM4NywgNjcyMDEsIAorICAgIDg3MDYsIDU1NTIsIDY4ODM3LCA3MDAsIDAsIDU1NTMsIDAsIDcwODgsIDUzNTYsIDc0OTksIDY4MDA3LCA2NjU5NiwgCisgICAgNzQwNjYsIDY3MjUxLCAxMDI2MywgNTU1NCwgMCwgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgMTExMTUsIDEyMTAzNSwgCisgICAgNzYxOCwgODUxNywgMTE0NTUsIDc4NDQwLCA2NDYzMiwgNjQ0NDcsIDU1NTUsIDc4MDg4LCA3ODA5MywgNzgwOTEsIDAsIAorICAgIDQyODAzLCA2NTAzMywgOTE0MywgNjY2OCwgNjcyODgsIDY3OTk1LCAxOTUwNjksIDY1NiwgMTk1MDcxLCA2NTAzNywgNDU3NywgCisgICAgNjQ2MjQsIDAsIDAsIDcxOTEyLCAxOTQ5MDgsIDQyNjksIDczODg1LCA5MTc3NzUsIDQyODQ2LCA2OTY0NCwgOTUwLCAwLCAKKyAgICA5MjI3MywgNjY1ODAsIDc3OTkyLCA2NjY4MywgMTA1NTQsIDExOTAwOCwgMTE5MTIxLCA2ODMyLCA1MDk4LCA5MTc3NjgsIAorICAgIDE5NDY2OCwgNzA0MDMsIDUwOTcsIDQ5MzUsIDk4NDgsIDEwMzgxLCAwLCA2NzI5NiwgOTI4OTYsIDM2NTEsIDAsIDY3Mjk0LCAKKyAgICA3MDg0OCwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAxMjA5MywgCisgICAgMTI0NywgMTAwMzQsIDEyMTM0MCwgNTA5OSwgNzgzNzMsIDE0NDEsIDQyMDg3LCAzMDYzLCA2NTAsIDExOTk1MywgNzgzOCwgCisgICAgMCwgMTI4NjU1LCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgNzA4MjksIDc4NDI3LCA5MDc4LCA4NTQ1LCA2NjM1NiwgMTI4Nzk5LCAKKyAgICAxOTQ5MjMsIDkxNTQsIDkxMTgsIDEyNjU0MywgMTE5NTg2LCAyNjc2LCAyMjc3LCAxMjg0MjIsIDY4MjM3LCA2MTkwLCAKKyAgICA4NTk5LCAxMjUxMTgsIDY5OTE4LCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCA3MTkwMywgMTIxMjksIAorICAgIDEyNjY1MSwgODQ4MSwgODMwNjgsIDYyMDIsIDY3NzExLCAxMDkyMCwgMTEzNzI2LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgCisgICAgNTEwOCwgNTEwNywgNjU4MTgsIDY2MDE5LCA5NzYyLCAxMTIwNSwgNTU0MSwgNzQ3NzIsIDAsIDEyNjEzLCA1Mjg0LCA2NjU3LCAKKyAgICAyMDcsIDEyMTIwNiwgNDI3NSwgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCA2NjgxNiwgNzg3ODYsIDUxMDMsIDEyNzg2MSwgCisgICAgNjQzNDgsIDQxMzY4LCA0Mzk3NCwgNDg4LCA2OTgxMSwgMCwgNzEzMzksIDEwMTU3LCAxOTQ2MTIsIDQzMDM0LCAxMTQzOCwgCisgICAgNjQ2NzQsIDAsIDcwMTU4LCA2ODQzMSwgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgNDEzNjcsIAorICAgIDUxMDUsIDY1MjY2LCA2OTcyMCwgNjQ3NiwgNTEwNCwgOTgzNzQ5LCAzMDQsIDMxNzYsIDc4ODcxLCA3MDE0OSwgOTMyLCAKKyAgICAxMTM2ODMsIDY1NjcsIDIzOCwgNjk2NTYsIDc4NDMyLCAxOTQ1OTUsIDE5OTA1LCA0Mzg1MCwgMTk1MDE1LCA3ODg3MCwgCisgICAgNDEwNDQsIDY3NjQwLCA2NzMwMiwgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAxMjU1MiwgCisgICAgOTMwMzksIDg4MDMsIDMwOSwgNjYyMiwgODE1MSwgMTA4NTgsIDc4NzA2LCA2NzYzNiwgNzAxNzEsIDEyNTY4LCAxMjc5MTcsIAorICAgIDEyNTUzLCAxMDgxNCwgNDMyNzUsIDY5NTAsIDk3MTIsIDY4NjgwLCA0Mzk3MCwgMTI2NTM1LCA2NTE2NSwgOTI3MjUsIDAsIAorICAgIDY2NDY2LCAxMjQ5ODYsIDEyNzc4NCwgMCwgNjY3MjUsIDYxOTEsIDExMzUxLCAxMDQzNywgMTEzMTYsIDY3NjM0LCA0Mzc2MywgCisgICAgMCwgNDE3NTQsIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ2MDAsIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDEyMTA1NiwgMzIyMiwgCisgICAgMTIxNDM5LCAxMjExMzcsIDAsIDY2NjYzLCA5ODMwNDcsIDkzMDY3LCAxMDgzNCwgOTgzMTI3LCAwLCA2NTczMiwgOTQwOTUsIAorICAgIDkxNzU0NywgOTI2ODIsIDY3Njc5LCAxMjA3MzQsIDY3MzA5LCA3NzgxLCA0MTM4MywgNjQ1NjgsIDY3MzExLCAxMjA3MzgsIAorICAgIDEyMDc3LCA3NDQzMywgNjQ1ODYsIDkxNzYyMCwgNDIzOTYsIDU1MjU1LCAzNDc1LCA2NzI2MCwgMjQ3OSwgNjczMDYsIAorICAgIDM2MzIsIDEyMDcyOCwgMTA2OTgsIDgzNzYsIDM2NDgsIDY3MjYzLCA3NDg0NCwgNjc2MzksIDM2MzYsIDY3ODk0LCAzNjUwLCAKKyAgICA4ODM3LCA2NTIyOSwgMTg0MywgNDIyODMsIDQzMjUwLCA0MTU2MiwgOTEwMCwgNzQ1NDgsIDY4ODI2LCAzNjQwLCAxMjcxOTAsIAorICAgIDQyMzIxLCA3Mjg0LCA5Mjg4MCwgMTE4OTg3LCAxOTQ5NTAsIDE5NDk0OSwgNzQxMTUsIDE5NDk1MSwgMTI2NjQ5LCAKKyAgICAxOTQ5NTMsIDQyMDgwLCAyNTI5LCAwLCA5ODM3ODQsIDY2MDEwLCA0MjA4MywgNzQ5NTIsIDY4Mzk4LCAxOTQ5NTcsIAorICAgIDY3NjE5LCA2NjM2NywgMTk0OTU4LCA5NjM0LCA5MjM4MCwgOTk4OCwgMCwgNDEwNjgsIDAsIDQyOTUsIDY1MjY0LCA2ODAwNiwgCisgICAgMCwgNjc4MzUsIDAsIDc4NSwgODIzNiwgMTI4NjQ3LCA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAxMjAyNjUsIDkyNSwgCisgICAgMTI3MTU2LCAwLCA0MTk4NSwgNDEwNzEsIDk1ODYsIDEyMDk4OCwgNDE5ODQsIDkyMTcsIDEyODM3MiwgOTI1MTAsIDkyMjE4LCAKKyAgICA5MTg2LCAyMDY3LCA0MDE2LCA5ODM4MDMsIDAsIDM4MSwgMTI5MzYsIDAsIDQyMDc3LCA5Mjk4NSwgNjk4ODAsIDUxODQsIAorICAgIDQyMDc4LCAxOTQ2MDcsIDEwODEwLCAxMjg1MzEsIDQ1ODUsIDE5OTQzLCA1ODYwLCA2NzYzMywgMTIxMzM0LCAxMjcxMDQsIAorICAgIDgxMiwgMzYxNSwgNzI0MDEsIDUxNzgsIDQ0MDAwLCA5MjQzNiwgNzg4MDcsIDUxODgsIDc0Mjg3LCA2NzYyOSwgMzYwNSwgCisgICAgMTA2OTIsIDExNjYsIDY0NDI5LCA0MjYzOSwgOTI0LCAxMjc3OTMsIDY3NjMxLCA0MjYxNiwgMTIwNjcwLCAyNDQyLCAKKyAgICAxMDcwMywgNjczMTcsIDY3NjMyLCA2NzMxNiwgMTI3NzEsIDEyNzM2LCAxMjc1MywgNjY3MDgsIDczOTMzLCA2NzYyNiwgCisgICAgNDI0MDEsIDE5NDg2NSwgNjk4NzIsIDEyNzM3MywgNDIyODgsIDEyNzUxLCA3NDkwNiwgODU0MiwgMTMxNDUsIDE5NDk2MywgCisgICAgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIDcxMjIwLCA0MTExNywgMCwgOTI1ODAsIAorICAgIDEyODYyNCwgNzQ5MzksIDY3NjI0LCAxMjc5NzYsIDEyOTAsIDAsIDY1NTg1LCAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgCisgICAgOTE3ODgzLCAxMzE4LCA2NDczMSwgNzgwMDQsIDAsIDAsIDY2MzI1LCAzNDY1LCAyNDA1LCA5MjQwLCA5ODM4NTgsIDEyNzU2LCAKKyAgICA2NTI1OSwgMCwgOTgzNzgxLCAxMjc1MiwgNTgzMywgMTQzMiwgMTEyNDYsIDQxODgzLCA3MzkxMiwgOTc5OSwgOTE3ODkzLCAKKyAgICA0MTg4NiwgMjQ4MCwgMTI3OTA2LCAyMDYyLCA2NzMyNiwgNjQ5NCwgNTUzNywgNzg2NTYsIDAsIDE5NDU4NywgMTI0OTY5LCAKKyAgICAxMjExLCAwLCAxMjA5NzEsIDY3MjY5LCAxMTg4MzIsIDEyMzE4LCAxMjkwMjQsIDExMzc5NiwgNjgwMDUsIDEwNjIyLCAKKyAgICA5ODM3NzksIDAsIDY4ODIxLCA2NTY2LCA3MTE5NSwgMCwgNzM3ODAsIDExOTE5NiwgNjQ4NjQsIDAsIDc4NjYwLCAwLCAKKyAgICA4Mjg0LCAxMzA4MSwgMTE5MjA2LCAzNTg5LCA0MjA1MSwgNDAzNSwgNjQ5MiwgODMwMDMsIDQyNjUsIDY2NDIsIDM5NzcsIAorICAgIDc0MTg2LCA0MTc3OCwgODM2LCA5Mjk0NywgMjQ4OCwgMTI1MDk2LCA0NTgyLCAwLCA3MTQyNiwgNDE3NzcsIDEyOTI2LCAKKyAgICA5ODMzNzksIDc1MjgsIDEwNTUwLCAxMTM3NjEsIDkyNzA2LCA5ODM5NTUsIDEwOTYxLCA5Mzk3NywgMTM3NCwgNjQ4NzgsIAorICAgIDExOTAxNCwgNjc3MjAsIDQyMzg5LCA0MTM3NCwgMjI4NiwgOTE3NjA0LCA3ODQ5MiwgNDEzNzcsIDEyNzkwOSwgMTk1MDQ3LCAKKyAgICA0MDAsIDEyNTk3LCAxMjA1ODYsIDEyODA5NywgMTI5MDcxLCA2NjYxLCA5MTc5NjEsIDY0ODI3LCAwLCA3MzgxNywgMzkwLCAKKyAgICAwLCA3MTMwMSwgMTI3MjkyLCAzNDczLCA3NzE4LCAxMTM3NTUsIDY4ODE0LCAwLCA1NTI4NSwgNzM3ODQsIDY2Mzk0LCAwLCAKKyAgICAxMTk2OSwgMTIwNDYxLCAxMjc4NDEsIDYzNjUsIDE4ODcsIDY3NjMsIDkyNTUxLCA4MDgwLCA3MDA2LCAwLCAxMTg5MDIsIAorICAgIDY3NTcsIDY0MzUxLCAxNTQ0LCA2NzE1NiwgNjc2NiwgNjQ2NzcsIDEyMDcxNiwgNjcwODgsIDYxNDYsIDc0MDMxLCA3NzEsIAorICAgIDEyMDY4MiwgMCwgMTI4MTIsIDEzMTY4LCA0MjI3MiwgMTIyMDAsIDY2NDIzLCA3OTA0LCAwLCA5NTMsIDEyOTE3LCAKKyAgICAxMTk1NjAsIDEyMzAwLCA2NzA4OSwgMTE0OTEsIDk3MjQsIDEwMzQxLCA5ODM3NzMsIDk1MjQsIDc0OTAsIDExMzg5LCAKKyAgICA3NDg5LCAzMzc5LCAwLCA3NDg3LCAxOTQ2MjQsIDQ3MSwgNzQ4NCwgNzQ4MiwgNjc1MywgNzQ4MCwgNTc2NCwgNzQ3OCwgCisgICAgNzQ3NywgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAKKyAgICAxMDIxMywgMTI3Mjg4LCA5MjM1NywgMTAwNDksIDExODM0LCAzNTQ0LCA5ODM3ODUsIDYwMTcsIDY1MzExLCA3NDkzNSwgCisgICAgMTIwMjE2LCAxMzMwNiwgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAxOTQ4ODIsIDEyMDU0NCwgMCwgMTI3OTUwLCAKKyAgICA5MjY2MCwgOTgzMzU2LCA3Nzg4OSwgMCwgMTk5NjEsIDI0NzIsIDQyNjY1LCA5MjM0MSwgMTIxMTMzLCAyMTM5LCA0MjU2LCAKKyAgICAxMjA3NzYsIDc0MzgwLCA0MzgzNiwgNDI2NzUsIDQyNjU4LCAxMjg0NSwgNjY2NiwgNzA1MDgsIDY1MTM4LCAxMTkzNTUsIAorICAgIDY3ODYyLCAwLCA2NTY3MSwgNzA4MywgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMTI1MTM0LCAxMjAzMjEsIDEyNzI4MywgCisgICAgOTgzMzk2LCA3MTg2LCAwLCAxMjA1NTUsIDAsIDQ0NSwgMTIwNTY2LCA2Njg0OSwgMTI1MTQxLCAwLCA4MzMwLCAwLCAwLCAKKyAgICA0Mjc5NywgMTEzNzM2LCAxMjAyMTUsIDgzMDAxLCAzOTAyLCAwLCAxNzcwLCA0Mzk1OSwgMTI1MDY3LCAxNTYwLCA0Mzk1OCwgCisgICAgOTIxNjcsIDQ1ODQsIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDY3MDkyLCAxMTE4LCA3MTMzNCwgNzQ4ODgsIDAsIDEwODEsIAorICAgIDc0MzYsIDExMTQ3LCA3MjUyLCA3MDA5MywgNTk5NiwgNjk5MjEsIDQ5MDMsIDY4MTQyLCA0MTM4NiwgNTE2MiwgMTE5MTg5LCAKKyAgICAxMzMwLCAxMjg2MTMsIDcxMzksIDAsIDEyMDQ3LCA0MTM4NCwgMCwgMCwgMTg0OCwgNDMzNCwgNjMyNCwgNDE5NzUsIAorICAgIDY0Nzc3LCAxMDY3NCwgMTIzMDgsIDEyMTg2LCAwLCAwLCA5ODM3NDEsIDEyNzE1LCA2ODAwMiwgMTk0NTc2LCA4MzI1NiwgCisgICAgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgMTE5MTU3LCA2ODAwMCwgNzg0OTAsIDAsIDEyNjk4NCwgNjgwMDEsIDkzMzQsIAorICAgIDkyNzA1LCA3MDgwMCwgNzAxMDEsIDc5NzUsIDAsIDc3OTU3LCAwLCA0MzQ5NCwgNDg4NCwgNjY1OTcsIDY5NzMyLCAwLCAKKyAgICAxMjEwMTAsIDYzMTMsIDY1NTEzLCA2OTg1NywgMCwgMCwgMCwgMjM0NSwgNDM2OTcsIDQ2MywgMCwgMTI3ODkwLCA2ODE3OCwgCisgICAgMzExNywgNTQ2MCwgMTIxNDIzLCAxMjg3MTcsIDk4MzM4OSwgMCwgNDIyNzksIDEyNzE0MiwgMTI2NTAzLCA3ODQxNSwgCisgICAgOTgzMjI4LCA2ODUyNCwgOTgzMzg2LCAxMzI0OCwgMTI1MDI3LCA5ODM4NDMsIDQzOTU2LCAxMjg0MTUsIDk4MzE1MywgCisgICAgMTIxMDA5LCA1NjYzLCA3MTEyMCwgMTI4NDcyLCAxMjg5NTgsIDAsIDI0ODIsIDE0NzEsIDE5NDU4MywgMTEzNzQ3LCAKKyAgICA0MjI0NywgMTIzNzgsIDczOTI1LCA2OTY2NCwgNzE0MjcsIDEyMzc0LCAxMjEzNTcsIDEyNzA2NywgMCwgMTE4ODI4LCAKKyAgICAyNDYwLCA3MTg4MiwgMTE5NDQsIDEyMzc2LCA5MjM0MiwgNjQ2NzksIDkyODkzLCAxMjM4MCwgMTA1NTcsIDY0NDczLCAKKyAgICA1ODcwLCAxMTEyMiwgMjAyNCwgMTI3MTgwLCA5ODMzOTEsIDcxODc5LCA1MzksIDAsIDEyMDMwMiwgNzAxMjAsIDM4NTMsIAorICAgIDY1MTgwLCAxMjc5MjMsIDEyMDc5NiwgMTIwMjQ1LCA5MjMyNCwgMCwgODY1OSwgMCwgMTI0NzQsIDY3MjQxLCA5NTAzLCAKKyAgICAxOTQ5NjksIDI0NzgsIDEyMDI0OCwgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIDY5NjMzLCA4Mjk2NiwgMTI0NzAsIDkyNjQwLCAKKyAgICA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAxMDk0NiwgMTI3MzEwLCA1MDAwLCAxMTM2ODcsIDk4MzU3OSwgMTI4MTkwLCAKKyAgICA2OTY3MiwgODIxMywgNDM4MjQsIDc3NzEsIDYxNjEsIDY4MDE4LCA2NzA5LCAxOTQ5NjcsIDc4ODg1LCAxMTkyNDMsIAorICAgIDY4MjM1LCAxMjA1ODIsIDc4NTQ3LCAxMTM3MDksIDEwMzAxLCAxMDMzMywgMTAzOTcsIDExOTA0NCwgMCwgNzM3OTEsIDAsIAorICAgIDgzMDMwLCAwLCAxMjE0ODIsIDExOTEyMywgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMTI3MjkwLCA4Mjc1LCAzODkzLCAKKyAgICA3NDkwMywgMTIwOTI3LCAxMjIxMCwgNzIyMSwgNDIxNDcsIDc0ODY4LCA3NDU1MCwgNzEyMTUsIDY0NzQ3LCAxMTg4NDEsIAorICAgIDEyODA4NiwgMTI1MTYsIDQ0NDQsIDAsIDkyMjcxLCA3NDUzNywgMTA4OTIsIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCA3ODM4OCwgCisgICAgNDE5NzMsIDM1OTEsIDQxOTY5LCA4MzAwOCwgMjQ1MywgMTE4ODk5LCA5MjY2NiwgNjQ3MDUsIDcxMDY4LCAwLCAxMDM0OSwgCisgICAgMTA0MTMsIDQzNTkxLCA0MTk2MiwgMzIwMiwgNzQzNTMsIDEyOTE3NSwgODMxNiwgMTI5MTc0LCAwLCA5NDA2MCwgNjg3LCAKKyAgICA5MzA1NSwgMTI5MDc0LCAwLCAxODQwLCAxMjc4MDksIDY4NjcxLCAxMTEyMSwgNDg4MywgMjg1LCA0NzIzLCAxMTE3NSwgCisgICAgOTI2OTIsIDQ0NTksIDc0NTc3LCA0MjkyMSwgNDE3MjAsIDExMDg5LCAyNDAsIDE5OTA2LCAwLCA0MjMyMywgNzQ2NDAsIAorICAgIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDkzMDY1LCAxMjg5NTYsIDY1OTMxLCA5MjU3OSwgMTI4MzI5LCA0MjYzNCwgOTgzMzQ1LCAKKyAgICA0MzQzNywgMzA4MSwgMTE0NjMsIDEyMDE1NCwgMCwgMTk1MDEzLCAxMDQ0NSwgMTIxMzIyLCA5Mjk2OSwgNjY3MTcsIDI2MTQsIAorICAgIDkxMjUsIDcxMTI1LCAxNzI5LCAxMjkwMzQsIDcyNDIwLCA2NTIyMSwgNjM4ODMsIDQzMzM0LCA2NDg1MiwgMTI0OTI5LCAKKyAgICA2NTE5NCwgNjYyMDEsIDAsIDY2NTc4LCA1MDAxLCA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIAorICAgIDYzODc5LCA0OTQzLCA1MTUwLCA3Mzg4OSwgNzM3NjQsIDQwMzksIDY0MywgMzA4NiwgOTI1MzMsIDQyNDQ4LCA0MjI5OSwgCisgICAgNTgsIDEyMDA4NCwgOTE3OTUyLCAxMjAwODMsIDYzODczLCA4NDkxLCAwLCAwLCA5ODM2MjMsIDQ1MzAsIDQyNDA5LCA3MTI2LCAKKyAgICAxOTQ1NzUsIDI3MjEsIDEyMDA3MywgMTE5MDk2LCAxOTkyOSwgMTE4OTQxLCAxMjg3OTcsIDkyOTc1LCA0MjQyLCA0MjY0LCAKKyAgICAxMjAwNzcsIDEyMDUzMCwgNjYxNzksIDQyNDEyLCA2NTk0MSwgMTMxMTQsIDY0NTIyLCAxMDc0MCwgMzA5NCwgOTgzMTk5LCAKKyAgICA5NzU0LCAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAxMjcwNzQsIDk4MzI0MCwgNTUyODAsIDQyMTc0LCAxMjc5NTQsIDQyNDMwLCAKKyAgICAwLCA5ODM0NTIsIDQyMzU1LCA2NjAyNiwgNDMwNiwgNDEzODAsIDY4NDMyLCA5MjU4NiwgNjgzMTQsIDY2NjY3LCAxMTkzNTEsIAorICAgIDE5NDk4MiwgMTIxMTcyLCA0MjIwMCwgNDI1NjYsIDcwMDAwLCAxMjg5MjgsIDUwODgsIDY5NDgsIDAsIDg1MjQsIDEyNTA0MCwgCisgICAgMCwgMTIzODUsIDAsIDc0OTI2LCA2OTY0NiwgMTM4NiwgNjQ1ODAsIDExNDgwLCA2MTE2LCA2NTAzOSwgNjUwMzgsIDEyMzkyLCAKKyAgICA2NTAzNiwgODA2NCwgMTI3NTU4LCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAyMDgwLCA3MTAsIDc3OTk5LCAxMTY2MywgMTY2NiwgCisgICAgNDIwOTEsIDExOTY1NywgMTIzODMsIDQzNjcxLCA0MjA5MiwgNjg0MTgsIDQyODksIDEyNzg5NywgNjM4OTYsIDEyMDYxLCAKKyAgICA0MjA5NiwgNDM2MjEsIDMzNjIsIDEyMzc3LCAxMTk5MzQsIDk4MzgzNCwgNjg0NDksIDc0NjEsIDczOTAxLCAxMjQ0LCAzMzEsIAorICAgIDczNzg2LCAxMjY4MywgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCA3NDYyOSwgMTIzNzksIDEyNzEwNywgOTI5MzAsIAorICAgIDQxOTY0LCA0MjIwOCwgNjM4NDMsIDIwODQsIDQxOTY1LCA3MDA4OSwgNjU4NjYsIDQzMjcsIDAsIDYzODQwLCA2NjQxMywgCisgICAgNDEyMjAsIDEzMDMyLCA5Mjk4MCwgNTg0LCAxMjkzMywgNDMxNzcsIDEyMzczLCA2OTg1NSwgMTMwMDAsIDEzNTEsIDI5MzUsIAorICAgIDg2OTgsIDEyNjY1LCAwLCAxOTMwLCAwLCA3ODIyOSwgMTI0MjcsIDY2NTE0LCA2OTg1OSwgMTMwMzEsIDAsIDYzOTAxLCAwLCAKKyAgICAzNjU3LCAxMTk2MTEsIDY1MjAyLCA2MDAwLCAxMTM3ODYsIDEyNDI2LCAxMjEwNTgsIDExOTkzNSwgNDE3NDAsIDEyNDI4LCAKKyAgICA0MTI4MywgNDE5MTYsIDExOTIxMCwgMTI4MzE4LCAwLCAxMjQyOSwgNjcyNywgOTgzOTQ4LCA3NTYyLCAxMjUxMjksIDUxNzAsIAorICAgIDk4MzkxNSwgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgOTIzOTcsIAorICAgIDYxNjIsIDc4MzIwLCA2OTIyOCwgMTAxMTMsIDQxODI5LCA2NTg4NiwgNTE1OSwgMTI0MjIsIDQxODMyLCA0MzksIDMwNzIsIAorICAgIDkxNzgyOCwgNDIyMDcsIDc0NTQ5LCAxMTc5NiwgNDA5NzAsIDQxODMwLCAxMjUwMjEsIDcwMTUxLCA4MzA4LCA5MTc3OTcsIAorICAgIDcwODA3LCAxMTkyNTgsIDY3ODY0LCAxMTM2OTYsIDkxNzgwMCwgMTIzMzYsIDQxMzUsIDY3MjMxLCAzNDEsIDI3MjcsIAorICAgIDQxMjksIDM1MzksIDAsIDYzODYxLCAwLCA3OTEzLCAwLCA2Mzg1OSwgNDEzMSwgNjM4NjgsIDEyOTA4NSwgNjM4NjcsIAorICAgIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDk4Mzg5NywgNzQ1NjAsIDQxMzcsIDgwODIsIDc4NTA2LCAxMTkwNjIsIDc4NTA0LCAKKyAgICA2NzA0LCA0NTkxLCAxMjgwMjksIDQzODczLCAxMjA3NTMsIDk2ODAsIDEyOTM3LCAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgCisgICAgNjgzMjEsIDQxNTAxLCAxOTQ1ODEsIDQyMDMxLCA1NzE5LCA3MTcyLCA0MjY4NywgODM2OCwgMTI4MzA2LCA0MTQ5OSwgCisgICAgOTMwNjgsIDcxMDQ3LCA0MjI0MiwgNDE0OTgsIDkxNzc5NCwgNDIwMjUsIDc4NTY1LCA2NTgwNSwgNDI0NjMsIDY3MTgyLCAKKyAgICAyOTI0LCA2NzE4MywgMTIwNTEwLCAwLCA5ODM5NzIsIDkyNzY2LCA3Mzk0MSwgNjcxODYsIDQyMzMwLCA2NzE4NywgMzk2OSwgCisgICAgMTIxNDA1LCAwLCA3MTY5LCAxOTkyLCA5NjUyLCA3Mzk3NywgNzI0NiwgNDIwODYsIDEyNjYxNSwgMjIxOSwgMTIxMzQ5LCAwLCAKKyAgICAxMjg4MDEsIDY3MTgwLCAxMjc1NjksIDMyNywgMTIxMjc3LCA5MDQyLCA5MTc3NzcsIDkxNzc3NiwgNjUxNDgsIDEyNDMzLCAKKyAgICA5MTc3ODEsIDEyMDIyMiwgODMxMjksIDEyNDMxLCA4NjY4LCAxMjQzNCwgNjcxOTQsIDExMzgxMiwgNTk5OSwgNzUwMTMsIAorICAgIDc3MTIsIDEyNDMyLCAxMjgyNDMsIDQzNjUzLCAxNzI2LCAxMDE1LCA3NDA3OSwgODIxMiwgMTI4MDY1LCAxMTM3NTQsIAorICAgIDQyNDIzLCAxMTkwNjYsIDE5NDYxMywgNzIzOTgsIDY2NzA5LCAxMjEwNjEsIDg4MTEsIDkyNywgOTI1MzIsIDAsIDEyNDM2LCAKKyAgICAxMjAwODcsIDQyMDIxLCAwLCA2NzY0NCwgMTI5OSwgMTIyNDAsIDQyMzUwLCA2NTE0MywgMCwgMTk1MDE2LCAxMjc5NzIsIAorICAgIDc4MTk3LCAxMTM0OCwgMCwgNzgwMzcsIDkxOTQsIDk4MzE4NCwgMCwgMTk5MTQsIDEyMTc5LCAxMjg3NDAsIDIyOTYsIAorICAgIDEyODkzMiwgNjM4MzYsIDYzODMyLCA5MTc3NzMsIDEwOTY3LCA2MzgxNiwgMjU5NCwgMzQ0NCwgNjM4MTcsIDExMTc4LCAKKyAgICA5MTc1ODQsIDQxNTAzLCAxMjc0NzgsIDExMjY1LCA2ODI5NSwgMTIwNzU2LCAxOTQ5MjIsIDY3Mjg1LCA1NjY0LCAzOTcyLCAKKyAgICAxMjA4OTEsIDEyODU4MywgMTI5NDA4LCA2NzI4NCwgMTI0MTYsIDkxNzc2NCwgMTE5NjA4LCAxMDgxNiwgOTE3NzY5LCAKKyAgICAxMTIxMCwgMTI0MTgsIDg1ODYsIDM4ODIsIDg1MzIsIDkxNzc3MSwgMTU3MywgNjgwODEsIDExOTg0NywgNDU5NiwgNjYzMzksIAorICAgIDEyNDE3LCA2NjAwMSwgNjUzNDMsIDEyNjQ5MSwgMTI0MTQsIDgyODcsIDY4MjE5LCAxOTUwMTcsIDY4MTA4LCAxMTQzLCAKKyAgICAxMTkxNjksIDExOTg0NiwgMTI0MTUsIDY2MjYsIDQyNzYzLCA5MTc1OTQsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAxMTk5MzEsIAorICAgIDExNzI0LCAxMjc3ODcsIDAsIDcxMTIyLCAxMjY2MTksIDAsIDk4MzY2MSwgODAyNywgMTA5OTcsIDkxNzEsIDEyNzQxLCAKKyAgICAxMTQwMCwgNDM5NDMsIDE5NDc5OSwgNjY4MzMsIDEyODIzOSwgOTgzNzA3LCA5MjU1NywgOTM5NzYsIDEyNzUyMywgCisgICAgMTIwMTkwLCAxMzI0LCA2NzYwOCwgMTI4MjE0LCA0MjM2OCwgOTgzODczLCA3NzE1LCAzODgxLCA0MTQ4NywgMTIxMTgsIAorICAgIDQyNTE0LCA2ODY1MSwgMTI4MjEwLCAxMjg1OTQsIDMwMDksIDQxNDc2LCA0MTQ4OSwgNjk4MjUsIDMwMDcsIDE0NDgsIAorICAgIDMwMTgsIDE5NDgwOSwgMzg4OSwgODUyMSwgNTA4MywgNTA4MiwgMTE5ODU5LCA3ODI1NSwgODUxOSwgMTIxMjI2LCAzMDE0LCAKKyAgICA1MDgxLCA2NTg1MywgMTIwNzE1LCAxOTQ5OTIsIDY4MDE0LCA2OTk1MSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCA0NTk3LCAKKyAgICA2NTUzMiwgMTE4MjgsIDEyMDE4NSwgMTIzNzEsIDExMTA1LCA4NDA3LCA2NzE2MywgMTA4MDUsIDg1MTgsIDEwNzc5LCAKKyAgICAxMjAxODgsIDcxMzAzLCAxMjEyNDAsIDEyMzY3LCA0MjE3MCwgMCwgNjcyOTAsIDYyOSwgMTkyNCwgMTI3MDk4LCAxMjAzNywgCisgICAgNjcxNTgsIDU5ODcsIDg0NjIsIDgwMDUsIDEyMzY1LCA2MzkzMywgNjk3MzUsIDEyMDgxNSwgMTIzNjksIDEwNjQ5LCAKKyAgICA2Nzk4MSwgNTA3NywgMTIwMTc0LCAxMDg4MCwgNjM5MjcsIDUwNzUsIDEyMTEwOSwgMTI3MzAwLCA2NTA3NSwgMCwgMTEwMDcsIAorICAgIDcwODUxLCA2NjY1OSwgOTI2MDcsIDkxNzkzMywgNjY2ODQsIDEyODA2MywgMzQzNCwgNDk1NCwgMTkwNCwgOTI2NzksIAorICAgIDUyNjYsIDEyNjk4MCwgNTI3MiwgMTA0OTksIDQ1MDcsIDk1NzgsIDYzOTIzLCAxMjAxNzcsIDc5NzksIDAsIDk4MzEsIDAsIAorICAgIDE5NDkyNiwgNDYxLCA5ODAzLCA0MjI4MiwgNDUwNCwgMTUwNSwgMTI3ODkzLCA2MzI1LCA1Mjc2LCA0MzAyMSwgMTIwNDg4LCAKKyAgICAwLCA1NTIzNiwgOTI2NTksIDY2NDYxLCA1MTc3LCA0MTMyNCwgMTIwNTUsIDg3MjIsIDEyMDgwNSwgNDEzMjcsIDk4MzczMiwgCisgICAgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgODk0OCwgNDEzMjUsIDc0OTMwLCA3MjEsIDEwMTgyLCA5MTA4LCAKKyAgICA3MTMxMSwgMCwgMTE5MTg1LCA0MjIyOSwgNzQ5NjMsIDEyMTAxNCwgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgCisgICAgOTQxMDQsIDc4NTcxLCA3NDg4OSwgNzEzMjgsIDEyODk1NSwgNDE1NzYsIDQyMjE1LCA3ODU3MCwgNzQwMzcsIDAsIDg1NzgsIAorICAgIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgNjQ3NjcsIDI2NzAsIDQxNjcsIDE5NDc5NiwgCisgICAgMTE3MjMsIDAsIDc0MTIwLCAxMjY2NDIsIDY1MDc2LCA5MzgsIDQzNDE0LCA3Mzg1NCwgMTE3MzcsIDk3MjEsIDAsIDY3MTc5LCAKKyAgICA2NzE2OCwgMTE3NDIsIDI0MTksIDY3MTc3LCAxMTQ5MywgMTIzMzQsIDkyNDk0LCA0MTUzLCAxMjMwMiwgMTA3OTMsIDUyNTAsIAorICAgIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCA2NTgwNiwgNDM5OTcsIDAsIAorICAgIDQyMDAyLCAxMjQwNCwgNjgwOTIsIDc0OTI4LCA0OTQwLCAxMjQxMCwgNzY4MywgMTE2NywgNzM3MjksIDQ5ODMsIDEyMDUwNywgCisgICAgODYxLCA2NzY5OSwgNzQ4ODAsIDY4Mjk3LCA5ODM4MDcsIDQzNzU3LCA0MzM3MCwgMTI5Mjk4LCAwLCAxMTk1NiwgMTI0OTY3LCAKKyAgICAxMjEyNjMsIDcwODE1LCA5NjE2LCA2NjMxLCA5MjMzOCwgMTI4MTYsIDQzNzU5LCA0MjIxOCwgMTI3MTAsIDY4Njc0LCAKKyAgICAxMjcyMSwgNDEwMSwgNjYxODUsIDAsIDU5OTIsIDc2MTYsIDE5NTA0NCwgMCwgMTI1NzcsIDkzMDE3LCAxMjgyODksIDg1MywgCisgICAgNDI2OTMsIDE5NDY0NywgMTE5MDI3LCA5ODMyODQsIDUwMTYsIDQzNTM1LCA2Mzg5MywgNDI4MzUsIDk0OTEsIDkxNzkxMywgCisgICAgMCwgOTE3OTE0LCAwLCAxMjcxMiwgNzEwNSwgMTI3ODA3LCA2NTA2MCwgNjY4NzUsIDk5MDAsIDc3NTAsIDkxNzk0NiwgCisgICAgMTI3ODk2LCA3NDYxOSwgMTE5MjY1LCA5ODM1ODcsIDY0Nzc4LCAxMjU4NSwgMTA1NjUsIDEyODE1MSwgMTIxNzcsIAorICAgIDExOTg0MywgOTgzMjYwLCAwLCA3NzgyNCwgMCwgNDkwMCwgMTI3ODc0LCAxMjg3OCwgOTI2MzAsIDg5ODQsIDQxMTksIAorICAgIDc0NzY4LCA4OTcxLCA3ODU5MywgNDMxMTMsIDk3MDIsIDY2ODUyLCAxMTAyNSwgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIAorICAgIDc0MTg1LCA5MjQ4MSwgOTI3MTAsIDEyMzk3LCA3NzgyNywgMTE5MDQwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIDE5NDk1NCwgCisgICAgMTMwNTMsIDExODk3NCwgMzk0OCwgMTA3ODEsIDE1NDYsIDAsIDUwMTAsIDE2ODAsIDEwNTA3LCA3ODU5MCwgNzg1ODMsIAorICAgIDkyNDMxLCAxMjEwMzcsIDEyNjY0NCwgMTk0OTE1LCA3MjY3LCAxMjc0NzksIDc0ODMzLCAxMjgxODEsIDU5OTMsIDI4MTksIAorICAgIDEyODc4OCwgMTI3MDYsIDcxMDYzLCAxODkzLCA3MjY2LCA2MzkxNSwgNzI2NCwgNzI2NSwgMCwgMTM2MywgOTgzNTgwLCAKKyAgICA0MjkyMywgNjM5MTAsIDYzOTk2LCAzMDc3LCAxMjAwMTgsIDAsIDE1MTIsIDY5OTI5LCAxMjU4OSwgNDE0NzksIDEyODMxMywgCisgICAgNzEwNDgsIDQzMzM5LCA3Mzc3NiwgOTgzNiwgMTIwNzI3LCA5ODM5MDksIDQxNDgxLCA0MzMzNSwgNzgzMiwgNDIzNDMsIAorICAgIDMwOTAsIDQzMzM3LCA4MTcsIDE2NjQsIDE4NTAsIDgzMTc3LCAzMDc5LCAxMTM0MCwgNDI0MDgsIDQyNDQ3LCA3NDkzMiwgCisgICAgNzQwNDQsIDQyMzA3LCAxMjM4NiwgNDIzMDQsIDkxNzU1NSwgODM0MjgsIDEyMzg5LCAxMjEwNzksIDkyMzY2LCA0MTk5NiwgCisgICAgMTE1MjYsIDYzOTg1LCA1ODY0LCAxMTQ3LCA0Mzg0OSwgNDI4ODcsIDE5ODcsIDkyNzE4LCA1NDgwLCA3ODU4LCAxMTY1MywgCisgICAgNDExNiwgMTIzOTEsIDY2MTkzLCAxMjEzODMsIDQ5MzksIDEyMzg0LCAwLCAxMjc3NzgsIDQxNjg2LCA2MzkwNSwgMTE5NjAxLCAKKyAgICA3MDI4NSwgNjczOTgsIDEyODgyMCwgMTI2NDksIDEyMDAyMiwgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCAKKyAgICA0MzY0MywgMTIxNDQ1LCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAxMTk4MTMsIDc3NCwgMTE5ODI5LCA3Nzg0MCwgMTE5ODE1LCAKKyAgICA1OTk0LCAxMjUzOSwgMCwgNzgzNzUsIDEyMDU5NywgMTE5ODMzLCA5ODMxMDUsIDc4Mzc3LCA5ODMyMzcsIDkxNzYyOCwgCisgICAgNzcxOSwgNjAyNiwgMjQ4NiwgMTI4MzEyLCAxMTk4MDgsIDE2MiwgMCwgNjUyMTksIDQxMDczLCA5Njg3LCA0MTY4MSwgCisgICAgNjMwNCwgMTE5ODEyLCA2NjE5NiwgMTk0ODgxLCA1MjYyLCAwLCA1NTIzMywgMTI2ODEsIDQyMzc5LCAwLCA3NTM0LCAKKyAgICAxMjIxOSwgMjIyNiwgNzA0OTksIDQyODEwLCAxMDQ5MiwgMTIxNTEwLCAxMjExNDgsIDEyMTUwOSwgNDMxMTksIDAsIAorICAgIDc4NTM3LCAxMjQwMywgMjUwMCwgNzAxNDUsIDgzMjQ2LCA0ODk5LCAxMjcyOSwgOTgzMzk5LCAxOTQ2MTksIDc0MTEzLCAKKyAgICAyMzQzLCA0MTAzLCAxOTk0NiwgNzQxMTIsIDc3ODUxLCAxMzExMiwgMTI5MDQ2LCA3NDgzNCwgMTI4NTksIDcwMDg3LCAKKyAgICAxMjAxNDgsIDY2MzY5LCA1ODYxLCAxMjc3NTgsIDExOTk5LCAxMjQwMCwgNDM2NDEsIDEyODE4MywgMTI2NDUsIDUxNDYsIAorICAgIDExMzIwLCA2ODQxMCwgNjc0OCwgNjUwNDAsIDE5NDc4NiwgNjQxODQsIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgCisgICAgNTE0NywgMTI1MDE5LCAwLCA3NDUyNCwgMTI4MzU2LCAxOTI4LCAwLCA2NzY0OSwgNTk5MSwgMzQ0NSwgNjc2MDksIDQ5NzYsIAorICAgIDY0MTc2LCAwLCA2NzYxMCwgODI0MSwgMCwgNzc4NjgsIDQyMDYsIDAsIDc4NjYyLCAxMjkwMjksIDEyODI5OCwgNjcyNzcsIAorICAgIDEwMTM4LCA2NzIzOCwgMTI4Nzg1LCA4ODk3LCAxMjAyMzQsIDE0MjIsIDgzNTcsIDQxMjQsIDc3ODYyLCA2NTgzNiwgCisgICAgMTIwNjQxLCAxMjc5MjYsIDc3ODU5LCAwLCAxMjA5MzAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAxMjQwNSwgMTIwMTUwLCAKKyAgICA5MjY2NCwgMzk4LCAxMzI3OCwgOTcyMywgNjM2NiwgMTIwMzExLCA3OTQ1LCAxMjkxMjYsIDQ0MDIsIDk5NzAsIDEyNDAyLCAKKyAgICA5MzA2MiwgNDIzOTIsIDEzMDUsIDEyNDA4LCA5MjM4NCwgNDQwMDcsIDEyODU2MywgMTI3MjE2LCA0MTQ2NCwgMTI0MTEsIAorICAgIDEyOTY5LCA2NzI2OCwgNDE0NjUsIDEyMTA5MiwgODUyOCwgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIAorICAgIDExOTE2MywgNzAxMTksIDkwOTMsIDEyODUzNSwgNjgzMywgOTI1NzQsIDYzOTU4LCAwLCA5MTQ4LCA5NjkyLCA0MDk2LCA1MywgCisgICAgODI5NiwgNjc1MCwgNjY4NTUsIDEyODQxMCwgOTU5NCwgMTIwMzA4LCAxMjA5MzgsIDQzNTI3LCAxMjExOTIsIDcyNywgCisgICAgNzQxOTIsIDkzMDYwLCA1ODA1LCAwLCA2NzI2LCAwLCA0MjE3NiwgMTIzNzAsIDExNjU1LCAxMTkwOTUsIDEwNTkxLCAyMjgwLCAKKyAgICA5ODMyMzQsIDEyMzcyLCAxMjA2NDIsIDEyMDMwNywgNzEyMDksIDkyMzQzLCA5ODM4NzIsIDEyMzY2LCAxMDk2MywgNjA2NiwgCisgICAgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMTIxMDQ1LCA2NDQ3OCwgMTk0NzAxLCAxMDgwMywgNDEzMiwgMTIwMzA2LCA2ODQ3NCwgCisgICAgOTI0NzMsIDk4MzI0NywgMTIwNzEyLCA3NDgzNywgMTIwMTU1LCAxNDk5LCAwLCA4MDU1LCA0Mjc0MCwgNjM5NjUsIAorICAgIDEyMDMwNSwgNjM5NjIsIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgNjM5NjksIDExNzgxLCA0MjcxOCwgODc4OCwgCisgICAgMTM1NywgNjQ4NTEsIDY1NzQzLCA5Mjg5NCwgODc3NCwgNzAzMzcsIDEyNzA4NiwgOTk0MSwgMTIwMTcyLCA5Mjc0OCwgCisgICAgMTkzMywgNjk2NTUsIDk1NjQsIDEyMDAxNiwgOTI0MzUsIDczODY2LCAwLCAxMjEyNDEsIDI0ODcsIDY3NjE0LCAzMTIxLCAKKyAgICAxODA0LCAzMzExLCA2NzYxNSwgNzAwODEsIDc4MzAyLCAxMjIyMCwgNjc2MTYsIDkyNzY5LCAxMjAwMjAsIDE5NDU5NCwgCisgICAgNjgyMDAsIDY2NzUsIDEyODE0NCwgMCwgNjc1OTIsIDEyMDY4NSwgMCwgNjQ3NzEsIDExOTgsIDkxMzIsIDAsIDY0NjE5LCAKKyAgICA1MTAsIDY0NjYzLCAwLCAxMjE1MDAsIDQ1NjEsIDIxMDEsIDEzOTgsIDkxNzk3MiwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgCisgICAgOTI2ODQsIDExNDA2LCA4MTY3LCAxMjEyNywgMTIwNTA1LCA4NDAsIDk4MzI4MywgNjk5OTIsIDcxMDEsIDY5NjcsIDAsIAorICAgIDE5NDg5OCwgOTc5NiwgMTI3MDAwLCAzMzMsIDY5ODkxLCAwLCA4MTQ0LCAyMTE3LCAwLCAxMjExNTUsIDEyNDA2LCAKKyAgICA5MTc5NzAsIDE5OTMxLCA2NjM4OCwgNjY3OCwgNzc2OSwgOTgzMTI0LCAxMjYyMSwgMCwgMTI3MzY2LCAxMDIyNywgNDc2NCwgCisgICAgNDMxMDEsIDk5ODEsIDAsIDQwOTg2LCA0MTI3LCA2NjQ4NywgOTgzNTc2LCA0MjIwMiwgMTI3NTQsIDE5NTAyMSwgOTgzMTkxLCAKKyAgICAwLCA5NDA5NywgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDExMTg0LCAKKyAgICA0NTMzLCAxMjcyMTIsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgNjgyMjUsIDY1NDYxLCA5Nzk4LCA2OTcwNCwgCisgICAgMTI4OTEyLCAxOTQ4LCA2OTg0MSwgMCwgOTUyLCAxMjgyMzUsIDEyNTEwNywgOTgzMzU0LCA3MDI5NiwgNjQ0OSwgOTQ5NCwgCisgICAgMTIwMzEzLCAwLCA0MzA5OCwgNDg0MywgODE0MiwgNjQxNjAsIDQwOTgsIDY0MTcwLCA5ODMzNDEsIDAsIDM0MzYsIAorICAgIDExOTk3MywgMCwgMTI4MTcsIDY3NTk3LCA2Njc2LCAzOTMwLCA0MjYxNSwgNjY0MDcsIDY5OTkxLCA2NzU5OCwgMCwgMCwgMCwgCisgICAgNjU1OTEsIDQxNTgxLCA2NTkxNiwgMTQ1MywgMTk0OTkzLCAxMjE0NTgsIDEyNzg1OSwgODUwMCwgNDIyMjIsIDEyMDE0MiwgCisgICAgNzM3NDMsIDEyMDQwMCwgNDMxNywgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMTI3ODMzLCA2NzYwNiwgMTE5MDgzLCAKKyAgICAxMjEwODMsIDQyMjE3LCAxMzEwMiwgMCwgNjYwMDMsIDY2NzIsIDAsIDAsIDY2ODgwLCA3NzkxMiwgNjM4NDEsIDk2MTMsIAorICAgIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgCisgICAgMTEyODEsIDAsIDM4MDcsIDE0NjksIDY2NjQwLCA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCA5MDQsIAorICAgIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIDQxMzQsIDgzNDg1LCA2NzIyMywgNjY1NzYsIDEyNzkxNiwgMTI3ODMxLCAKKyAgICAxMDUyMCwgODU3NSwgOTk2MCwgMTIwMSwgMTI3Mjg5LCAxMjg0NiwgMTI3MjkxLCA2ODA0MCwgMTE5MTksIDY0OTYyLCAKKyAgICAxMjcwODEsIDQzNzM5LCAxMjcyODEsIDg1MTEsIDk0NjAsIDgyMywgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgMTI3MzA1LCAKKyAgICAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgNjU3NjEsIAorICAgIDcwMzM0LCAxMTYwNiwgNjQ3ODQsIDExNzAyLCA2NjQ5OCwgOTgyMSwgNjQzMDQsIDEyNzM2OSwgNTE1MiwgMTEwNDgsIAorICAgIDc1MzMsIDY4MzY2LCA2NDQxMCwgOTIzMDUsIDAsIDQzMjMsIDcwMjc2LCA5MjY2OSwgNzEzMzIsIDEyMDE1OCwgNDI1ODcsIAorICAgIDQyMjE0LCA0MTM5NCwgMTExODgsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgNTI2MCwgNDMxNDMsIDk0MDM4LCAzMjYsIAorICAgIDEyMDEzMSwgNjg0MjMsIDExOTIxOCwgMTA3NzEsIDI4NzYsIDc0MDc0LCA5MjUzMCwgMTI4NDYwLCA0MTM5OCwgNzM4MiwgCisgICAgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIDQ1MywgNDEzOTYsIDEyMDUyNCwgMTMxNTksIDEyMTQwLCA5NTcyLCA5ODMxMzIsIAorICAgIDcwMDMsIDE5NDg4MywgNDIzMzQsIDc3MDQsIDEyNTA2OSwgMTI1MDIwLCA0MzE0NCwgNDEyMywgODQ5NCwgNDMxNDYsIAorICAgIDk5NzcsIDAsIDEyMTI4MywgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCA0MTI2LCAwLCAKKyAgICA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDEyNjYwNCwgMTA0NjQsIDAsIDkyOTY4LCAxOTQ2MTAsIDY0NTE0LCAKKyAgICAxMTUyOCwgNjQwMjQsIDEyODA3MiwgNjc5LCA2NDAxMywgOTgzNTU1LCA1ODUwLCA3NTgsIDc1MzYsIDEyMDUzOCwgOTIyMzQsIAorICAgIDQxNDQxLCAxMDY5MywgNjQwMDYsIDc1MDQ0LCA2NDAwNSwgNDA1OCwgMTE5MDE5LCAxMjY0ODcsIDY0NjYwLCAxMjgxNzYsIAorICAgIDExOTA1MCwgMCwgOTgzMDY5LCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCA4OTcwLCAwLCA5OTM0LCAxMjg2ODUsIAorICAgIDEwNzc0LCA2NzEwNCwgNDIyMDEsIDEyNDIxLCAxMjgyMTYsIDEyNzAwNiwgMTg1MiwgMzA1NywgNjQwNDYsIDczNzQ0LCAKKyAgICA2NDAzNCwgNjQwMzksIDY4MDY1LCAwLCA5ODM2OTAsIDkyOTEzLCA5MjMyMiwgNzY0NSwgMTI4NTQsIDc0MzM4LCAzNDk2LCAKKyAgICAwLCAxMjEzMjMsIDExMzcxMCwgOTEwMiwgNjI3LCAxMjc3OTUsIDYxNTgsIDgzMjcsIDc0NTUzLCA2NjYzMiwgMTI0MTksIAorICAgIDEzMzA5LCAxMTU3MCwgMTI3ODExLCAxOTk2MCwgMTE2OTYsIDAsIDEwMTgsIDExODk3MCwgMTI5MDc1LCAxOTQ4OTcsIAorICAgIDE2ODIsIDQzODYzLCAxOTQ4OTYsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIDY3NzE3LCA3NDM1OCwgNzM4MTQsIDExNDEyLCAKKyAgICA2NzY4LCAxMDcyOCwgMTE5OTgyLCA3MTMxNiwgNzEwOTksIDQzMzExLCA2NDk2NiwgMTE1NzcsIDEyNzgzMiwgNDMwNDAsIAorICAgIDE4MzMsIDExNTc2LCA3MDA1NCwgNzQ3NzksIDAsIDE4NSwgNjUwODUsIDc0NTMzLCA2NDc1NCwgMTE5MzM0LCA3NTM1LCAKKyAgICA4MDg1LCA0MjUyNSwgMTE5OTQ0LCA5NzQ5LCA0MTcwMSwgNjEzMSwgMTk0OSwgNDExNywgNzg0NywgMTIwNDg5LCAxMjA5OTcsIAorICAgIDY0NDgzLCA2NTY5MywgOTgzNzExLCA5ODM0OTUsIDEyODYxNSwgNjk2OTUsIDQyMjQwLCAxMjg1ODcsIDEyMTM1MiwgCisgICAgNDI4NjQsIDEyNjQ5OCwgNDMxNjgsIDQxODY4LCAxMTg0LCAwLCA4MTUsIDExNDg0LCAxMjc1MzUsIDY3ODQwLCA5ODM2NTEsIAorICAgIDAsIDY2MTk3LCA5ODM0NzQsIDEwOTg2LCA2NDY4MywgMTI4NTQ5LCAxMjg0NTQsIDM0NTUsIDEyNjUzMCwgMCwgOTg3OSwgMCwgCisgICAgMCwgNDE1OCwgNzAzMDcsIDY4MTY2LCAwLCAxMjgwOTEsIDAsIDAsIDY5NjQ1LCAzMzIsIDExODgwOCwgODMzNjgsIDUxNDIsIAorICAgIDI0MDcsIDY5NjQzLCA0MjE5OSwgMCwgOTI0MDQsIDc0MzczLCA4MzM3MiwgNTUyMTcsIDcxNDU3LCA2Mzg3MCwgNDMxNjMsIAorICAgIDAsIDAsIDEyOTg1LCA0Mjg2NywgMTgzNCwgMTIwMzg3LCA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgNzAzODUsIAorICAgIDg2NjIsIDEyMDMyNCwgMCwgMjY1MiwgMTIwNTI3LCA3MTY0LCAxMDc4NCwgMTk1MDkzLCA2NzY3NCwgMCwgODMzNTksIAorICAgIDkyNDgyLCAxOTQ3NDksIDc0NTYyLCA5MTc1MDUsIDE4MjgsIDc0NDc0LCAxMjAwMTksIDY4MDc4LCA4NTMxLCAxMjQ5OSwgCisgICAgNjI4MCwgMTIzMjQsIDcyNDM0LCA2NTIzOCwgNjgzNzQsIDQ4MzIsIDY1NTczLCA0Mzg1MSwgNjI3OSwgMTI1MDgsIDEyOTA0LCAKKyAgICAxMjUwMiwgOTE2MSwgMTI4NTU1LCAxNjIwLCAxMTI0NywgMzYwMSwgMTIxMzAxLCA4MzM1MywgNjcyNDYsIDYwOSwgMTE1NTUsIAorICAgIDgzNDU2LCAxMjQ5NiwgMTE5ODAsIDc0MTgxLCA0MzQzLCAxMjUwNSwgODI5NjAsIDEyNzg2MywgMCwgMTEzNzcsIDIzOSwgCisgICAgMTI4MTE0LCA2MzcsIDAsIDEyODY3OCwgNDI2NzEsIDAsIDkzMDMyLCA4MzA5NSwgNDM1NjUsIDcxMzA2LCAxMjY0OTMsIAorICAgIDEyNjk2LCAxMjgyNTYsIDkxNzYwMCwgOTQwNjIsIDEyOTI5LCAwLCA3MTIsIDAsIDQxOTcsIDk4MzIwNiwgNDI4MTgsIAorICAgIDEyNjYzMiwgNzAzMDYsIDEyMDQ5MCwgNzAzMzMsIDExOTEzNywgMTUwNiwgNDM1NjIsIDExOTkxMywgOTI0OTEsIDY4MDc2LCAKKyAgICAxMjY1MSwgMTIwOTE3LCA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgMTk0NjMzLCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgCisgICAgMTE4ODQ0LCAxOTQ4MjMsIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMTIxMDc3LCA5ODMyOTcsIAorICAgIDEyMDMzLCA0MjE3OCwgMTk0NzU0LCA2OTc2MCwgNDI1NzEsIDkyNjM1LCAxMTQzMCwgMCwgNzAyOTksIDEyMTUwOCwgCisgICAgMTI0OTUxLCA2ODMyNCwgMzE3OCwgMTI2NDg4LCAxMjg2MzMsIDkyNzA0LCA5MTc1NjYsIDkwODAsIDEyMDk0MywgNjc2OTcsIAorICAgIDE5NTEwMSwgNjgyMDksIDcyNDE4LCAxMTA4MiwgNzE0ODUsIDU2OTksIDgzMzczLCA2NjAwMCwgOTQ4OCwgNjUxNjYsIAorICAgIDExOTExMiwgNzA0NzcsIDExMTcwLCA2ODY2MiwgMTI4MTIwLCA3MTMxMywgMCwgNTI2NSwgNjkyMzUsIDgzMzg0LCAxMTQ4NywgCisgICAgNjc4NTgsIDEyNDY0LCA5ODMzNjUsIDQzMDQ1LCA5ODM4MzEsIDcwMzQ1LCA0MzM0NSwgOTgzMjc2LCAxMDc3MCwgMTE4OTk0LCAKKyAgICA2ODA3LCA0NjUsIDk4MjksIDY5OTk3LCA3NDM0OCwgMCwgNDMzNDYsIDgxMTYsIDc5NSwgMTIwMzUyLCA3MjQxMiwgMTI0NjIsIAorICAgIDEwOTMwLCAxMDgzMSwgMTIxMzIwLCAxMTg5NTIsIDY0MzYyLCA3NDMzNCwgOTMwNTYsIDgzMDQ3LCA5ODM5MzMsIDEyNDY4LCAKKyAgICA4NjA3LCAxMDA4LCAxMTg5NDgsIDEwMDkyLCAxMjUxMjIsIDEyODg1MSwgNjc4NTUsIDU1MjU3LCA3Mzc3MSwgMTc2NiwgCisgICAgMTEyODIsIDExOTk2LCAxODIwLCA0NTQ3LCAwLCAxMTIwMiwgMTIwMjQzLCAxMjgzNDUsIDEzMjIzLCA3NDkzNCwgNjQ1OTUsIAorICAgIDEyNzI5NCwgODMzNzQsIDY4NDg5LCA0MzQ1LCAxMjYxNiwgOTE3Nzg0LCAxMjg5NDcsIDk4MzE1NSwgNzQ0NjcsIDAsIAorICAgIDk4MzgxOSwgMTI4MjkxLCA1MzgyLCAxMjc3NzksIDAsIDY3MjMzLCAxMTkwNjAsIDY0OTUzLCA1NDA2LCAxOTkyMCwgCisgICAgNjk4OTcsIDY2NTEwLCAzNTkwLCAxOTQ4MzUsIDExMzAsIDkxNzc2NiwgMTIwOTc3LCA0MjAxNiwgMTE4MjMsIDQzMDIzLCAKKyAgICAxMjEwMDIsIDExODg5NiwgNzc0MiwgMTI3Mzc0LCAxMzI4MCwgNzEzMjMsIDkzMjYsIDczODI2LCA1MzEwLCA0MzUwOSwgCisgICAgNzg1ODQsIDkyMjI5LCA4OTU5LCA0MzU4OSwgNjc0NywgNjY3MjMsIDY0NzU3LCA4NTY4LCAxOTQ2ODQsIDEyMDQ5NiwgCisgICAgNzM4MTYsIDgzMDYwLCAxMjg0MTgsIDQyNjcwLCAwLCAxMTYyMSwgMTI0NjAsIDEzMjYsIDEyMDYzMSwgODMzOTMsIDQzMDYzLCAKKyAgICA0MzIzOSwgNjU2NzgsIDE5NDg0MCwgNzM5MTcsIDc4NDMsIDY5NzgzLCAxMTY4OSwgNTQxMCwgNTc4MywgMTA0NjgsIDg0MDMsIAorICAgIDU0MDAsIDExNTk0LCAxMjA0MDUsIDY4MzMzLCA4MzM5MCwgMTA0OTEsIDY5ODQyLCA2NDQxMiwgMCwgMTI4MDEyLCA1NTg3LCAKKyAgICA0Mjg2NSwgNjQ0MDQsIDgyNjgsIDQ5MjMsIDY1MDg2LCA4OTgxLCAxMjM4MiwgNDIxMzMsIDEyMDc1NSwgOTcwNiwgNjk3MzgsIAorICAgIDcwMjk0LCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAwLCA4NjQyLCA4MzM4OCwgNDI3NjYsIDgzMzg3LCAyMjEwLCA5OTgzLCAKKyAgICAxMjg2ODksIDk0MDA5LCAwLCAwLCAwLCA3Mzk4LCA0MTUxNSwgMCwgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAKKyAgICAwLCA2NzQ5LCAzNjU4LCA5Mzk2NCwgMTIwNTI1LCAwLCA3NjE3LCAxOTQ4NDEsIDEyODg4LCAxMjc5ODMsIDY3NjY4LCAKKyAgICAxMzE0MywgMCwgOTE5MywgMTEwOTcsIDU3MDMsIDEyODI0NywgNDE1MTcsIDQxNTA0LCA0MTUxOSwgMTAwMTYsIDY0MzA1LCAKKyAgICAwLCA2NTg2NCwgNjIzLCA3ODEsIDY3MCwgMTA2NjAsIDU3NjksIDYxMywgNzU0MywgMTIwMjc5LCA0NzcsIDQxMDgzLCAKKyAgICA5MjUyMSwgMCwgNTkyLCAxNTc4LCAxMjQ1OSwgNDM0NDksIDAsIDAsIDgyMjUsIDEyMTE5MSwgNjU0LCAxMTM0NSwgNjUzLCAKKyAgICA2NTIsIDAsIDY0NywgODMyNjYsIDYzMywgMTIwNzQ0LCA5ODM4MDksIDEyNjQ3MiwgMTI0ODAsIDQzMjQzLCAxOTQ5MDksIAorICAgIDM5LCAxMjQ4NywgMTIxMjQ3LCAxMjA1MjksIDc0MTk5LCAxMjQ4MiwgMCwgMTI0ODksIDExOTYwNywgMzE5NSwgNTU1MCwgCisgICAgMTI5MTIxLCA3ODk3LCAxMjcwODksIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCA5ODM2MzQsIAorICAgIDI4NzcsIDEyMTUxOCwgNzA0OTYsIDE2NzUsIDY5ODQwLCAwLCAwLCAxMTkwNzgsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAKKyAgICAxOTQ3NzcsIDEyMTE2MiwgNjcxNzAsIDEyMDc5MCwgMTE4Nzg3LCA0MzI0NCwgOTIyMzMsIDkxNzgzNSwgOTgzOTE2LCAKKyAgICAxMTk1NjEsIDk4MzA3OCwgMTk0OTE0LCAxOTQ5MjEsIDEyODE2MCwgOTkzOSwgMCwgOTgzMTUxLCA3Nzg2MCwgMTI4OTQ4LCAKKyAgICA4MzQ0MCwgMjcwLCAwLCAxMDcxNCwgMTE4OTgzLCA3MjQzNywgMCwgMTE5OTQyLCAxMTkzMzgsIDY1MzcyLCA3MzgwMywgCisgICAgNzQwMzgsIDY4MjUxLCA2MjczLCA2NjY3OSwgMzY0LCA5NTk1LCA3MTQ0MCwgMCwgMCwgNzA3LCAxOTQ4MzksIDEyODQwOSwgCisgICAgOTI4MiwgMTExNjMsIDIyNCwgMTI4NTg4LCA2ODY3MCwgOTMzMiwgNDk2NiwgNjg2NzcsIDE5NDU4NiwgNjg2NDQsIAorICAgIDk4MzEzMSwgMzg0MSwgNjczNTcsIDY3MzQxLCAxMDczMiwgNjg2NDAsIDg1MCwgNDk3MiwgMTI3MTgxLCAxMjg5MCwgMjkwOSwgCisgICAgNjg2MTksIDQ0MDA4LCA2ODYyNywgMTIwNjk5LCAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDkxNzk0MywgMTE5NjIsIAorICAgIDEyMTM5NywgMTI1MDcsIDExOTYsIDY3Njg0LCA2NzEwMCwgNzc3LCAxMjAxODcsIDQzNzUsIDY1MjcxLCA2NzY3OCwgMCwgCisgICAgMTIxOTgsIDkxNzg4NywgNjQ4MjQsIDExOTM0MywgMTI3MjQzLCA5NDU0LCA2Mzc3OCwgODY1OCwgNDI1MjgsIDcwMDczLCAKKyAgICAyNzA1LCAxMjg2ODAsIDQxNTIwLCAxOTUwOTgsIDEyMDM3OSwgMTE5ODYsIDc3NjUsIDQyNTAyLCA4MjgwLCA3NDUyMCwgCisgICAgMjcwMSwgMCwgMTIwMjQwLCA1NzY3LCAwLCAxOTUwMTgsIDk4MDksIDgzNTMsIDYzNzQ3LCA2NjcwMSwgNjM3NzIsIAorICAgIDEyMTIzMywgNjM3NDUsIDE3NDgsIDYzNzcwLCAxMjE0MTksIDEyMTA3OCwgMCwgNjU1NDIsIDYzNzY2LCA1NTI0NCwgMzA2MSwgCisgICAgNzg2MDksIDYzNzY0LCA2Mzc4NywgOTA2NywgNjA5NiwgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAKKyAgICAxMjc3ODEsIDEyNzUyMiwgMTIwNjI4LCA2MzgwNywgMTU5MSwgMCwgNjM4NiwgNjM3ODMsIDEyMDk5MCwgMTI1MDQxLCAKKyAgICA5MjUzNSwgMCwgMCwgNjgyNDksIDc0NTc1LCAxMjcwMTAsIDY1NzE5LCAxMzA4MywgNjQ1NzQsIDY1MDEyLCAxMjE0NTIsIAorICAgIDE2NDAsIDEyNDk1LCA2NjY5MSwgNzYyNCwgMzEzOCwgMTA5OTYsIDExMTcxLCAxOTIyLCAxMjcyNzUsIDEyNDk4LCAxMDk4NywgCisgICAgNjk5MzYsIDY5OTM5LCAzODk0LCA2NTU0MywgMTI5MTgzLCAxOTQ4NDIsIDEyODExMiwgNDkzLCAwLCA0MzE5NywgMTcxNywgCisgICAgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIDkxNzkzMiwgMTI0OTAsIDY0MzE1LCAKKyAgICA5MjE3MCwgMTI3MDM5LCAxMjQ5MywgNjIzMywgNDI2ODEsIDEwMDIsIDEyNDkxLCA4MzUxOSwgNjQ5MTEsIDgzNTIxLCAKKyAgICAyMDk2LCA2NTEyMCwgODM1MTYsIDc4MjE5LCA4MzI3MCwgODM3OCwgMTE2MzIsIDY4ODM4LCA2NjIxMywgNjM4NjQsIAogICAgIDY2MjIxLCA2NjIyNiwgNjYyMjksIDEzMjE4LCA2NjIzMSwgNjYyMTYsIDg1MDcsIDY2MjM2LCA2NjIxMSwgNjYyMTgsIAogICAgIDkyNjcyLCA2NjI0MCwgNzgwNDEsIDY2MjMzLCA4OTI4LCA5ODM1NTIsIDc5MDksIDY2MjM0LCAxMTYwNSwgNjM3NTksIAotICAgIDk4MzY1NCwgNjYyMDgsIDczOTk5LCA2Mzc5OSwgNjM4MDMsIDI0NCwgMTE1NDIsIDEyODk4LCAxMjQ5NCwgNzM3NjEsIAotICAgIDEyNDkyLCAxMjY2OSwgMCwgMCwgNzQxNTMsIDAsIDEyODI3OCwgMTIwNjgwLCA0ODgyLCAxMzA0MCwgMCwgODYxMiwgNDg4NSwgCi0gICAgNzQwNTMsIDAsIDEzMDQyLCA0ODgwLCA2NDY2MiwgMjQyOSwgMTM2MCwgMjQ4LCAwLCA2Mzc5NywgOTIzOTQsIDQyMzU4LCAwLCAKLSAgICA3MjkyLCAwLCA2Mzc1NiwgNDI3ODYsIDY2NjkzLCAwLCAxODcwLCA3ODA0MCwgNDcwLCA3ODAzOCwgNzgwMzUsIDc4MDM2LCAKLSAgICA3MDAyOCwgNzgwMzQsIDQ1NzksIDEyODA5MCwgMCwgMTI1MTEsIDc0NDUzLCAxMjUxNCwgMCwgNzQ1NzksIDcyMzksIDcwMDEsIAotICAgIDg2MjMsIDk0MDExLCAxMjgwNTIsIDEyODA0OCwgNzM3OCwgMTI1MTIsIDExNjE1LCA2MTA0LCAwLCAwLCA2NTksIDYwOTgsIAotICAgIDAsIDEyMjM0LCAxMjczMDcsIDEyNzA2NywgODMxMSwgMTI1MTAsIDQxODAzLCAxMzAzOSwgMTI3MDcyLCAxMjUxMywgCi0gICAgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCA5ODM5MjAsIDAsIDAsIDIzMjMsIDAsIDIzMTksIDc3OTE3LCAxMjQ3NywgNzc5MTYsIAotICAgIDIzMTEsIDAsIDQ0MTUsIDIzNywgNjI4MSwgMTI3MjgwLCAwLCAwLCAyMzA5LCAxMzEyLCA4MTczLCAxMjg4NzEsIDEyNDY5LCAKLSAgICAwLCA3ODUwNSwgNjQzMzUsIDEwNjA5LCAwLCAxMjgxMTEsIDkzOTcsIDExNTI0LCA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCAKLSAgICA5MzkxLCA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCA5Mzg4LCA0OTMyLCA5Mzg2LCA5MzgzLCA5Mzg0LCA2NzQwLCAwLCAKLSAgICA2NTQ1MSwgODE4NSwgMCwgOTE3ODMyLCA0MzAyNCwgNDMzMzYsIDY3NjU5LCAyMzEzLCAxMjgxNjcsIDc5NDgsIDkyMzYsIAotICAgIDkyNTcxLCAwLCAwLCAxMDU3MCwgNDM0NzMsIDYyODksIDEwNDg0LCAwLCAwLCAxMTk5OCwgMTIwODIsIDEwOTI0LCAzMTQ3LCAKLSAgICAwLCAxMjA2ODQsIDEyNTI0LCAxMTkwODEsIDIzMTAsIDExODE4LCA5MzgxLCA5MzgyLCA5Mzc5LCA5MzgwLCA5Mzc3LCAKLSAgICA5Mzc4LCA5Mzc1LCA5Mzc2LCAxNjgzLCA5Mzc0LCA5ODM3NzgsIDkzNzIsIDEyNDQ0LCAwLCAwLCAxMzAxNiwgODIxMCwgCi0gICAgOTgzOTU4LCA0MjAyOSwgMTEwNzksIDEyMzMxLCA0MzQ1MSwgNDIwMzIsIDg3NDQsIDcyNiwgMCwgOTgzODM3LCA0MTU1LCAwLCAKLSAgICAwLCA0MjAzMCwgNTAwNywgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAxMjc4MDUsIDEyNzI0MCwgMCwgOTkyMiwgNDMzMDksIAotICAgIDk4Mzg0MSwgMTI1MjUsIDk4MzQ3MSwgMTIwMTYsIDY1NzcwLCA5NTQ4LCA2NzY2NSwgNDAzLCA3ODIzMCwgMTI1MDMsIDAsIAotICAgIDAsIDExMDMwLCAwLCA5MjU2NywgNjU2OTEsIDYzOTk4LCAxODE5LCAxMDQ5NiwgMCwgMCwgMTE5OTIwLCAwLCAxOTQ2NjgsIAotICAgIDAsIDEyNTA2LCAwLCAxMjIzMSwgMCwgMTI1MDAsIDQ0MDIzLCAxMjUwOSwgNjQzOTMsIDc4ODMwLCAzMzg5LCAxMDU4OSwgCi0gICAgNjYwOCwgNDEwNDcsIDEyMDMyMSwgNzgzOTUsIDc4Mzk0LCA3NDA2OSwgNzc5OTUsIDc4MzkxLCAzNjA4LCA4MjgxLCAKLSAgICAxMjAzMjAsIDExMDcsIDAsIDkwNzYsIDg4NjIsIDY5NzQzLCA0MTA1MiwgMTMwODQsIDY0NzY2LCA0MzIxNywgNzgwMywgCi0gICAgMTMyMjIsIDc0MTY1LCA3NDc4MiwgMTI2NTE0LCA4NTQ2LCAxMTU1MywgNjM5OTUsIDEzMTc3LCA5MDQzLCA2MzAzLCAKLSAgICA5ODM5NDcsIDQ5OCwgNjQ0NzEsIDEyMDMyNCwgMTI4NTY3LCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgMTI1MjgsIDgwMzEsIAotICAgIDI0MTQsIDAsIDY5NzE5LCAzMjMxLCAwLCA2NDIyLCA2NjUxMiwgNjk2NTMsIDEyNTMwLCAyNTM3LCA3ODQwNSwgNDE0MjksIAotICAgIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDc4NzM4LCA0MTQzMywgNDcxOSwgNDY5LCAwLCA0MzYzLCAzMzEzLCA0MTQyOCwgCi0gICAgNzg0MDcsIDIwMjMsIDE3NzIsIDc4MjI0LCA3ODIyNSwgNjU3MDYsIDEwMDUxLCA2NDgxMiwgNzgyMjAsIDAsIDk5MjAsIAotICAgIDEyMjE1LCAwLCA0OTMxLCAxOTUxLCAxMjQ5NywgMTE5MzYzLCA5NjA3LCAwLCA5NjYzLCA5ODMyMjgsIDExOTYzNCwgNjUwMywgCi0gICAgNDExMTAsIDAsIDE0OTEsIDAsIDAsIDEyNzMwNCwgNDEwNjEsIDAsIDE5NDgzOCwgMTI3MTg3LCA2NTAyNiwgNDE5OTMsIAotICAgIDQxNTA5LCAxMTA0NSwgNjUwMjgsIDc4NjAyLCA2NjQ3NiwgNDExMDgsIDk3MzgsIDQxOTk1LCAxMDc1LCAxOTU4LCAxMjUzNSwgCi0gICAgNDE5OTIsIDQxNTA2LCAwLCA0MTY4NywgMCwgMTIwNzE3LCAxMjc3NzYsIDk5NDAsIDEyNzI5OSwgNzY5MiwgOTgzODMzLCAKLSAgICA4MDA4LCA0MTEzMSwgMzMwLCA4NTY2LCA2NTA4MywgNDExMzMsIDk4MTYsIDEyNjUxNywgMTI1MzIsIDc4NTUwLCA3ODU0NiwgCi0gICAgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgMTI3Mjk4LCA2NDEzOSwgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIAotICAgIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgMCwgNjQxMzYsIDEyNTM2LCAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDk4MzEwMywgCi0gICAgMTMwMzAsIDY3MDIsIDQ1MjcsIDAsIDEyNTM4LCAxMjg4MTAsIDk4MzY0NSwgNjU1OTksIDY1NzE3LCA5OTY2LCAwLCA0OTQ4LCAKLSAgICAxMjQ4NCwgNDAzMiwgMTI4MTQ5LCAxMjYyMywgMCwgNjIwNywgMCwgNjExNywgNjU5MzAsIDg0MTIsIDAsIDc0MzgsIDEyOTYsIAotICAgIDIzMjUsIDQxNTExLCAxMjY2MjUsIDEwMTQ5LCA3NDExOCwgMCwgMTI3Mjg2LCAxMjQ4MSwgMCwgMTI0ODgsIDY2NzEzLCAwLCAKLSAgICA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgNDI2MTksIDczNzY2LCAwLCA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCAKLSAgICA2NTAzMiwgNDE1MTMsIDk4MzE2NiwgMTE5MjcsIDY2NTg0LCA3ODU1OSwgNzg1NjAsIDc4NTU3LCA3ODU1OCwgMCwgNzg1NTYsIAotICAgIDg0OCwgOTg2OCwgMCwgNjQyNCwgNzg1NjgsIDExOTMzOCwgNjk5MjIsIDc0MDMxLCA3ODU2MywgNzg1NjQsIDIzNTIsIAotICAgIDc4NTcyLCA4OTMsIDY0NTc2LCAxMTI4OSwgMTQwNywgNjc5NzMsIDAsIDEzMDI2LCA2NzYyLCA3ODU3OSwgNzg1ODAsIAotICAgIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgMTM0MywgOTgzODIzLCAwLCA5MzI1LCA2ODE4LCAKLSAgICA2MjgzLCAxMTczOCwgMCwgOTgzOTM0LCAwLCAxMTc0MSwgMCwgMCwgOTIxNiwgODI2MywgMTEyNzksIDE5NDc1MiwgCi0gICAgOTgzODI1LCAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCAKLSAgICA5OTU2LCAwLCAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIDEzMDIwLCAxMDAyNCwgMTk0NzY0LCA3NDU4MywgCi0gICAgNzQzNDAsIDY5NjgxLCAwLCA0MzAwMSwgODAyOSwgMCwgMCwgOTgzNzgwLCAzMzM1LCAwLCAwLCA5Nzc2LCAxMjA1MjYsIAorICAgIDEyNzMwOCwgNjYyMDgsIDY3MzM5LCAxMzAwMiwgNjM4MDMsIDI0NCwgMTE1NDIsIDEyODk4LCAxMjQ5NCwgNzM3NjEsIAorICAgIDEyNDkyLCAxMjY2OSwgOTQwNzAsIDAsIDc0MTUzLCAxMjAzMTAsIDEyODI3OCwgMTIwNjgwLCA0ODgyLCAxMzA0MCwgCisgICAgOTgzMzYyLCA4NjEyLCA0ODg1LCA3NDA1MywgMTI3ODMwLCAxMzA0MiwgNDg4MCwgNjQ2NjIsIDI0MjksIDEzNjAsIDI0OCwgCisgICAgMTI5MDY2LCA2Mzc5NywgOTIzOTQsIDQyMzU4LCAwLCA3MjkyLCAwLCA2Mzc1NiwgNDI3ODYsIDY2NjkzLCAwLCAxODcwLCAKKyAgICA3ODA0MCwgNDcwLCA3ODAzOCwgNzgwMzUsIDc4MDM2LCA3MDAyOCwgNzgwMzQsIDQ1NzksIDY5MjMyLCAwLCAxMjUxMSwgCisgICAgNzQ0NTMsIDEyNTE0LCAwLCA3MTEzMCwgNzIzOSwgNzAwMSwgODYyMywgOTQwMTEsIDEyNTEzNywgMTI4MDQ4LCA3Mzc4LCAKKyAgICAxMjUxMiwgMTE2MTUsIDYxMDQsIDAsIDEyMDkwMCwgNjU5LCA2MDk4LCAwLCAxMjIzNCwgODM1MTEsIDY3MzU4LCA4MzExLCAKKyAgICAxMjUxMCwgNzY2OSwgMTMwMzksIDgzNTA5LCAxMjUxMywgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCAxMjEzODUsIDcwMTkzLCAKKyAgICAxMjgzNTQsIDIzMjMsIDAsIDIzMTksIDc3OTE3LCAxMjQ3NywgNzc5MTYsIDIzMTEsIDc2NjYsIDQ0MTUsIDIzNywgNjI4MSwgCisgICAgMTI3MjgwLCA5ODMzMTEsIDgzMDIwLCAyMzA5LCAxMzEyLCA4MTczLCA4MzAxMywgMTI0NjksIDgzMDE1LCA3ODUwNSwgCisgICAgNjQzMzUsIDEwNjA5LCA4MzAxMSwgNzgwMDYsIDkzOTcsIDExNTI0LCA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCA5MzkxLCAKKyAgICA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCA5Mzg4LCA0OTMyLCA5Mzg2LCA5MzgzLCA5Mzg0LCA2NzQwLCAxMjc5OTAsIAorICAgIDY1NDUxLCA4MTg1LCAxMjg5MzEsIDE5NDg0MywgNDMwMjQsIDQzMzM2LCA2NzY1OSwgMjMxMywgMTI4MTY3LCA3OTQ4LCAKKyAgICA5MjM2LCA3Nzk0MiwgMCwgMCwgMTA1NzAsIDQzNDczLCA2Mjg5LCAxMDQ4NCwgODMwMDYsIDgzMDA3LCAxMTk5OCwgMTIwODIsIAorICAgIDEwOTI0LCAzMTQ3LCA4MzAwNCwgNjY0MDYsIDEyNTI0LCAxMTkwODEsIDIzMTAsIDExODE4LCA5MzgxLCA5MzgyLCA5Mzc5LCAKKyAgICA5MzgwLCA5Mzc3LCA5Mzc4LCA5Mzc1LCA5Mzc2LCAxNjgzLCA5Mzc0LCA5ODM3NzgsIDkzNzIsIDEyNDQ0LCA3NDI1NiwgMCwgCisgICAgMTMwMTYsIDgyMTAsIDEyMTA2MiwgNDIwMjksIDExMDc5LCAxMjMzMSwgNDM0NTEsIDQyMDMyLCA4NzQ0LCA3MjYsIDAsIAorICAgIDEyMDYzMCwgNDE1NSwgMTIxMDkwLCAxMjA3MDQsIDQyMDMwLCA1MDA3LCAxMjUyMiwgNDMwODgsIDAsIDQ5NTEsIDExMzgyNiwgCisgICAgMTI3MjE3LCA5ODMyMDIsIDk5MjIsIDQzMzA5LCAxMTIxMSwgMTI1MjUsIDk4MzQ3MywgMTIwMTYsIDY1NzcwLCA5NTQ4LCAKKyAgICA2NzY2NSwgNDAzLCA3ODIzMCwgMTI1MDMsIDE5NDY4OSwgMTI3MTkxLCAxMTAzMCwgNDM5MTYsIDkyNTY3LCA2NTY5MSwgCisgICAgNjM5OTgsIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDEyOTE0MywgMTIxMDcyLCAxMjUwNiwgOTgzODM4LCAKKyAgICAxMTE0NiwgNzE0NzcsIDEyNTAwLCA0NDAyMywgMTI1MDksIDY0MzkzLCA3ODgzMCwgMzM4OSwgMTA1ODksIDY2MDgsIAorICAgIDExMjA4LCAxMjAyMzYsIDc4Mzk1LCA3ODM5NCwgNzQwNjksIDcxNDQ2LCA3ODM5MSwgMzYwOCwgODI4MSwgMTEzNzMyLCAKKyAgICAxMTA3LCAxMTM3NDUsIDkwNzYsIDg4NjIsIDY5NzQzLCA0MTA1MiwgMTMwODQsIDY0NzY2LCA0MzIxNywgNzgwMywgMTMyMjIsIAorICAgIDc0MTY1LCA3NDc4MiwgNDM0OTksIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIDExMzY2NCwgNDk4LCAKKyAgICA2NDQ3MSwgNzc5ODcsIDkyOTc0LCAxMjUyOSwgODA0MiwgNDM4OTksIDIzNDQsIDEyNTI4LCA4MDMxLCAyNDE0LCA3NDUwNiwgCisgICAgNjk3MTksIDMyMzEsIDkxNzgzNiwgNjQyMiwgNjY1MTIsIDY5NjUzLCAxMjUzMCwgMjUzNywgNzg0MDUsIDQxNDI5LCAKKyAgICAxMjY1OCwgMTMwMzYsIDY1NzcyLCAwLCA3ODczOCwgNDE0MzMsIDQ3MTksIDQ2OSwgOTE3ODEwLCA0MzYzLCAzMzEzLCAKKyAgICA0MTQyOCwgNzg0MDcsIDIwMjMsIDE3NzIsIDc4MjI0LCA3ODIyNSwgNjU3MDYsIDEwMDUxLCA2NDgxMiwgNzgyMjAsIAorICAgIDc0MjM3LCA5OTIwLCAxMjIxNSwgODI5NzgsIDQ5MzEsIDE5NTEsIDEyNDk3LCAxMTkzNjMsIDk2MDcsIDcwMzY4LCA5NjYzLCAKKyAgICA2NjgzOCwgMTE5NjM0LCA2NTAzLCA0MTExMCwgOTgzNDY3LCAxNDkxLCA2Njg0NywgMTI5MTY5LCAxMjczMDQsIDQxMDYxLCAKKyAgICA3MDQ1NCwgMTk0ODM4LCAxMjcxODcsIDY1MDI2LCA0MTk5MywgNDE1MDksIDExMDQ1LCA2NTAyOCwgNzExODEsIDY2NDc2LCAKKyAgICA0MTEwOCwgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCA0MTk5MiwgNDE1MDYsIDEyNzAwMiwgNDE2ODcsIDAsIAorICAgIDEyMDcxNywgMTI3Nzc2LCA5OTQwLCAxMjcyOTksIDc2OTIsIDk4MzgzMywgODAwOCwgNDExMzEsIDMzMCwgODU2NiwgCisgICAgNjUwODMsIDY4MzksIDk4MTYsIDEyNjUxNywgMTI1MzIsIDc4NTUwLCA3ODU0NiwgMzUwOCwgMTI3MDU4LCA0MzIzNSwgCisgICAgMTIwMzUxLCAxMjcyOTgsIDY0MTM5LCA3ODIzMSwgNjQxMSwgMTI5MTAsIDY3NzEwLCA2NjY0NCwgMTMwMjgsIDY3MzcsIAorICAgIDEyNTM3LCAwLCA0MzUwNiwgNjQxMzYsIDEyNTM2LCAyMzUwLCAxMzAyOSwgNzgyMzMsIDEyMDkxNCwgNDM4OTcsIDEzMDMwLCAKKyAgICA2NzAyLCA0NTI3LCA3MTI1MCwgMTI1MzgsIDEyODgxMCwgOTgzNjQ1LCA2NTU5OSwgNjU3MTcsIDk5NjYsIDkzMDQ2LCAKKyAgICA0OTQ4LCAxMjQ4NCwgNDAzMiwgMTIxMTc3LCAxMjYyMywgMCwgNjIwNywgOTgzMjI1LCA2MTE3LCA2NTkzMCwgODQxMiwgCisgICAgMTI3MTgzLCA3NDM4LCAxMjk2LCAyMzI1LCA0MTUxMSwgMTIxMDIwLCAxMDE0OSwgNzQxMTgsIDAsIDEyMDIzMywgMTI0ODEsIAorICAgIDEyMTI4MCwgMTI0ODgsIDY2NzEzLCAwLCA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgNDI2MTksIDczNzY2LCAKKyAgICAxMTkyNDQsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIDY1MDMyLCA0MTUxMywgMTIwMjA5LCAxMTkyNywgNjY1ODQsIAorICAgIDc4NTU5LCA3ODU2MCwgNzg1NTcsIDcxNDU5LCA4MzAzNCwgNjc2MDMsIDg0OCwgOTg2OCwgNjcyMjAsIDY0MjQsIDc4NTY4LCAKKyAgICA2NzIyNiwgNjk5MjIsIDcwMTkwLCA3ODU2MywgNzg1NjQsIDIzNTIsIDY3MjE5LCA4OTMsIDY0NTc2LCAxMTI4OSwgMTQwNywgCisgICAgNjc5NzMsIDk4MzE5MywgMTMwMjYsIDY3NjIsIDc4NTc5LCA3MDE5MiwgMTMwMjMsIDg5MDMsIDk3NzcsIDY2NzE1LCAxODcxLCAKKyAgICA4MDk5LCAxMjc5ODQsIDAsIDEzNDMsIDkxNzk5OSwgMTIwNzg0LCA5MzI1LCA2ODE4LCA2MjgzLCAxMTczOCwgMCwgNzI0MzYsIAorICAgIDExMzcxMywgMTE3NDEsIDkxNzk4NiwgNzUwNDMsIDkyMTYsIDgyNjMsIDExMjc5LCA4MzAyMywgODMwMjQsIDgzMDI1LCAKKyAgICAxMzAyMSwgNjQ0OTQsIDMxMzYsIDE5NDc1OCwgMTk0NzU3LCAxOTQ3NjAsIDEzMDIyLCA0MjczNywgOTk1NiwgMCwgNDM5NTQsIAorICAgIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgMTMwMjAsIDEwMDI0LCAxOTQ3NjQsIDc0NTgzLCA3NDM0MCwgCisgICAgNjk2ODEsIDAsIDQzMDAxLCA4MDI5LCAwLCAwLCA5ODM3ODAsIDMzMzUsIDExOTM0MSwgOTIwOSwgOTc3NiwgMTIwNTI2LCAKICAgICAxOTQ3NDgsIDUyMTUsIDQyNjQ0LCAzMzMzLCAxNjMyLCAxOTQ3NTEsIDY0ODQ5LCAzMzQyLCA3ODU4MiwgNTM2MywgMTI5NTcsIAotICAgIDc4NTgxLCA0MTU2LCAwLCAwLCA2NDIxLCA3ODU5MSwgMTYxMSwgNzg1ODksIDEzMDE4LCA3NDI1NywgNzg1ODgsIDc0NTQyLCAKLSAgICAzMzM3LCA0NTM3LCA2Nzg5NSwgMTE3MzYsIDAsIDY4NjA4LCA2NDgyLCA0MjE0LCA3Mzc5MCwgMTE5NDUsIDAsIDEzMDQ2LCAKLSAgICA4ODM4LCA0MjUsIDQwMjUsIDEwNzA5LCA3ODU5NSwgMjEwOCwgMjM5MiwgMTMwNDcsIDAsIDAsIDY4MTksIDEzMDQ5LCAKLSAgICA2NDk5LCA5MjI0MywgMTI0MjQsIDY4NjE0LCA3Mzk0NCwgMTMwNTAsIDk5MjQsIDE5NDc0NSwgNjUwNywgMTI3OTE5LCAKLSAgICA5NDA3MywgMTI4MDY5LCAzMjc3LCA4OTI5LCA0OTQ3LCA0MTA1NSwgMCwgMTk0NzIyLCAxOTQ3MjEsIDE5NDcyNCwgMTMwNDUsIAotICAgIDY0NjI2LCA2NjAzNCwgNzc1MSwgMTk0NzI3LCA4MzcxLCAxOTQ3MjksIDM5OTcsIDEyODA2LCA4NzY4LCAxMzA0NCwgMCwgCi0gICAgMTI0MjAsIDQwMjQsIDE5NDczMCwgNDEwNTQsIDEwNzgsIDk3NTcsIDY5NzM2LCA0MTA1NywgMCwgMCwgMCwgMCwgOTgzNzkxLCAKLSAgICA5MjIxMCwgOTI0MTEsIDAsIDQxNDk2LCAwLCA5MTY1LCAxNTcyLCAxMTkxMSwgMCwgMTE4ODQyLCAyMzQ2LCAxMzI3MCwgCi0gICAgODk1OCwgMCwgOTY0NiwgMzc3MywgNDMxODMsIDY0MDEsIDU4MzEsIDAsIDAsIDEzMDQzLCA4MDU2LCA5MjQ5NCwgNjU2ODEsIAotICAgIDIwOCwgMTI3MzgyLCA0MTUxNCwgMCwgMCwgMCwgMTA2OTksIDY0MDgsIDkyMjI3LCA3ODI1LCA1NjYxLCAwLCAxMjA2MzAsIAotICAgIDM2MDMsIDQxMTA5LCAyMzk4LCAzNTQ4LCAxMjY1OTYsIDAsIDExOTkzMywgMCwgMzExNSwgOTkxOCwgMCwgODI5NCwgCi0gICAgNDI5MTIsIDAsIDAsIDE5NDcyNiwgNDg3NiwgNjU4MDQsIDAsIDAsIDQzNDY4LCA5ODMyNzQsIDQxNTU4LCA0MTQ3MSwgCisgICAgNzg1ODEsIDQxNTYsIDAsIDEyNzMyOSwgNjQyMSwgNzgwMzksIDE2MTEsIDc4NTg5LCAxMzAxOCwgNzQyNTcsIDc4NTg4LCAKKyAgICA3NDU0MiwgMzMzNywgNDUzNywgNjc4OTUsIDExNzM2LCAwLCA2ODYwOCwgNjQ4MiwgNDIxNCwgNzM3OTAsIDExOTQ1LCAKKyAgICA0MzkyNSwgMTMwNDYsIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDc4NTk1LCAyMTA4LCAyMzkyLCAxMzA0NywgOTI3NDUsIDAsIAorICAgIDY4MTksIDEzMDQ5LCA2NDk5LCA5MjI0MywgMTI0MjQsIDY4NjE0LCA2NTgyNywgMTMwNTAsIDk5MjQsIDE5NDc0NSwgNjUwNywgCisgICAgMTI3OTE5LCA5NDA3MywgMTI4MDY5LCAzMjc3LCA4OTI5LCA0OTQ3LCA0MTA1NSwgMCwgMTk0NzIyLCAxOTQ3MjEsIAorICAgIDE5NDcyNCwgMTMwNDUsIDY0NjI2LCA2NjAzNCwgNzc1MSwgMTk0NzI3LCA4MzcxLCAxMjEwMzYsIDM5OTcsIDEyODA2LCAKKyAgICA4NzY4LCAxMzA0NCwgMCwgMTI0MjAsIDQwMjQsIDEyODAwMCwgNDEwNTQsIDEwNzgsIDk3NTcsIDY5NzM2LCA0MTA1NywgCisgICAgNjgzMDcsIDkxNzg0MiwgMCwgMCwgOTgzNzkxLCA5MjIxMCwgOTI0MTEsIDEyOTMwMywgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIAorICAgIDExOTExLCAxMjQ5OTAsIDExODg0MiwgMjM0NiwgMTMyNzAsIDg5NTgsIDAsIDk2NDYsIDM3NzMsIDQzMTgzLCA2NDAxLCAKKyAgICA1ODMxLCAwLCAxMjA4NjUsIDEzMDQzLCA4MDU2LCA3MDEwOCwgNjU2ODEsIDIwOCwgMTI3MzgyLCA0MTUxNCwgMCwgCisgICAgMTIxMDQ4LCA5ODM4ODQsIDEwNjk5LCA2NDA4LCA5MjIyNywgNzgyNSwgNTY2MSwgODI5NzIsIDgyOTczLCAzNjAzLCAKKyAgICA0MTEwOSwgMjM5OCwgMzU0OCwgODI5NjksIDgyOTcwLCAxMTk5MzMsIDgyOTY0LCAzMTE1LCA5OTE4LCAxMjc4MjMsIDgyOTQsIAorICAgIDQyOTEyLCAwLCAxMjcyODcsIDE5NDcyNiwgNDg3NiwgNjU4MDQsIDAsIDAsIDQzNDY4LCAxMjEyMjEsIDQxNTU4LCA0MTQ3MSwgCiAgICAgNzM5NTAsIDgxNTgsIDk5NDQsIDQxNDcyLCAxMjAyOTgsIDEzMDUxLCA3ODY4OSwgMzE0MywgMTk0Njc0LCA2NzAxLCAKLSAgICA0MTU1OSwgMTg5NiwgNjYyNTYsIDEzMDUyLCAxOTQ2ODAsIDU2NjUsIDAsIDExOTA3MSwgNzAyNSwgNjM5NzQsIDAsIAorICAgIDQxNTU5LCAxODk2LCA2NTIxNSwgMTMwNTIsIDE5NDY4MCwgNTY2NSwgNzg1OTQsIDExOTA3MSwgNzAyNSwgNjM5NzQsIDAsIAogICAgIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCA1NjYyLCA0MjM4MiwgMTU2NCwgNzM5MjQsIDExMjEsIAotICAgIDc4MzE5LCA2Mzk1OSwgMCwgOTk0MiwgMTMyMzEsIDAsIDY0NzUyLCA0NzMyLCAxOTQ2NjYsIDExNTk2LCAxMTk5MzEsIAotICAgIDY1MTg3LCAxNjI2LCA2Mzk4MywgMTAxMTAsIDY0NzcyLCA0MjAyNCwgNjQyMCwgNDIwMjgsIDAsIDEwNTA5LCAyNzk1LCAKLSAgICA0OTEwLCAxOTQ3MjgsIDY5MjMxLCA2NDc1MywgNjI3NSwgOTM5NTcsIDExODgzMCwgNjM5NzgsIDExMDQ0LCAzMjI5LCAKLSAgICA2NDIzLCA0Mjc3NCwgMCwgMCwgMCwgMTI4MjMsIDIzMzEsIDkxNzgxMCwgNzA4NSwgNjEzNywgMCwgNzUyNCwgMCwgCi0gICAgOTE3ODA5LCA4MzQ2LCAwLCA4MzM4LCAxMjgzMTUsIDY1MDQzLCAwLCA4MjIsIDEyNzk4NCwgOTkwMywgNjQ3MjEsIDQyNzIyLCAKLSAgICA2OTg3NywgMTk0NjU5LCA3ODY1NSwgNzg2NjEsIDE5NDY2MCwgNzg2NjIsIDQxMjY1LCA1MzExLCAxNzk1LCA5NjUsIAotICAgIDExODc5MSwgMTA1ODcsIDc4MDU1LCAxMTI3OCwgNzg2MzIsIDE5NDY0MCwgMCwgMTI5NDYsIDE5NDY0MSwgMTE5MzQxLCAKLSAgICAxMjAzNDksIDYyOTQsIDMxNDQsIDE5NDY0OCwgMTk0NjQ3LCA2NTAxOSwgMTk0NjQ5LCA3Mzk5MCwgMCwgOTgzOTYwLCA3NDgsIAotICAgIDQxMDY3LCAyMzMwLCA1MzUsIDMxNDgsIDEyMzc1LCA3ODc5OSwgMTk0NjI5LCAxMDU1NiwgMjQ3NSwgMTIzODgsIDQ4ODksIAotICAgIDg5NjgsIDY3ODYzLCAzNTkzLCAwLCAwLCAyMzQyLCAwLCAxOTQ2MzQsIDY1MjA2LCA0ODk0LCAxOTQ2MzUsIDQ4OTAsIAotICAgIDE5NDYzNywgOTE3ODA0LCA1ODEsIDQ4OTMsIDk4MzYxNiwgNjU3MSwgNjU1NDUsIDQ4ODgsIDQxNTcsIDc4MDQ4LCA3ODA0OSwgCi0gICAgNzgwNDYsIDc4MDQ3LCAwLCAxMDExOSwgNjQxNSwgNDI4OTMsIDAsIDY5NzAyLCAwLCAwLCAxMTM3NSwgNjQ3NDYsIDIzMzIsIAotICAgIDc4MDYzLCA0MTIsIDc4MDYxLCA2NDkzMiwgNDI4ODAsIDQzNTg3LCAwLCAwLCAwLCAwLCA2NTE5NywgNzgwNjYsIDEyMjAzLCAKLSAgICA3ODA2NCwgNzgwNjUsIDg5MTMsIDY1ODU0LCA0ODc1LCA2NTgxMSwgMTIwMzgxLCAxMjAzODksIDExODg4OCwgOTM0NCwgCi0gICAgODgyNiwgMTIwMzg2LCAxMjAzOTUsIDEzMTA0LCA3NDc4MSwgMTE5OTcsIDEyMDM5MywgNzgwNzUsIDAsIDMxMzQsIDAsIAotICAgIDY1Njk2LCA5MjMzMSwgMCwgNjYyMTcsIDAsIDgzMzQsIDExOTM0NCwgMCwgMzQ0OSwgMCwgMCwgNzg0MTQsIDc4NDEzLCAKLSAgICAxMTg5NTAsIDc0MDExLCAwLCAwLCAwLCAwLCAxOTA4LCAxMjAxNjcsIDQzMjgsIDEwNzM0LCAxMjcwMTQsIDAsIDEyNzkxNCwgCi0gICAgNzgwNCwgNzgyNzIsIDEwODExLCA2MjUwLCAxMTMzOSwgNDkxNCwgMTEzNjcsIDAsIDc4MDU0LCA0OTE3LCA3NDUxNiwgCi0gICAgNzQyMDgsIDY0Mjg1LCA0OTEyLCA1NDY0LCAxMjc4MzYsIDExODg5MywgMjM2MSwgNzk3MSwgNzgwNzIsIDc4MDczLCAKLSAgICA1NTI0MywgNzgwNzEsIDAsIDgwODYsIDc0MzE3LCA2NzA3LCA4MzE5LCAyMzEyLCA0MDk3NywgMTA5NjAsIDQwOTYyLCAKLSAgICA4MzA1LCAxMjU3MywgOTgzNjA4LCA0MDk4MCwgOTgzOTY0LCAxMzIwMiwgMCwgMTI1ODIsIDc4MjgyLCA5ODMwNDgsIAotICAgIDY5ODU2LCA0MjQzOCwgNTUyMjEsIDYyODgsIDc4MjgwLCAxMjc5NDYsIDU2NTMsIDQyNDAwLCAxMDg5MSwgNzY5OCwgNTY1OCwgCi0gICAgNzQwNDUsIDcwMDM5LCAwLCAwLCA0OTEzLCAwLCA5ODM5NTksIDcxMzMzLCA0MjMyNiwgMTI4MTk0LCAxMjcyOCwgOTI2ODUsIAotICAgIDQyNDc4LCAyMzI3LCAwLCAxMjU2MywgNDIyODcsIDEyNzA1LCAwLCAwLCAxMjU4OCwgODgyMSwgNjE1MywgMjg2NywgCi0gICAgMTk0NzA4LCA2NjMxMiwgNjk4LCAxMjgwMDcsIDE5NDYwNiwgMTAzNTYsIDcwMDE3LCAxOTQ3MTMsIDY1MSwgMTI2NDEsIDAsIAotICAgIDAsIDAsIDAsIDQxNTUyLCA2NTExNSwgNzg0NjUsIDc4NDY3LCA3ODQ2MywgNzg0NjQsIDEyODg1MSwgNzg0NjEsIDE5NDY5NywgCi0gICAgNzQzNTYsIDY0OTQ1LCA0NzE2LCA0MzI3NywgMCwgNzg0NzQsIDEyMzQwLCAxMjA1NjgsIDAsIDE5NDcwMCwgNTUyNjQsIAotICAgIDQxMjExLCAxMjA2NzYsIDg3MDMsIDU0NjIsIDkxNzYyOSwgOTgzNDk1LCAxMDEwMSwgMCwgNzAwNDksIDg0NzksIDQxNTEsIAotICAgIDQxOTMzLCAwLCAwLCA2NjI1NCwgMTIwODIxLCAwLCAwLCAxMjg2NTQsIDAsIDExOTE5NCwgNzQwNTAsIDkyNzAxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjI3OCwgMCwgMCwgMCwgMjcwMCwgMTI1NzYsIDc4NDIsIDEyODk5LCAwLCAwLCAyNjk5LCAwLCA3Mzg0NSwgCi0gICAgMjk4NSwgOTI1NjgsIDEyNjQ3NSwgOTE3ODQ1LCAxMjE5MiwgMTE5MzE0LCAwLCAxMTkzMTIsIDk4MjcsIDExOTMxMCwgCi0gICAgMTE5MzExLCAxMTkzMDgsIDExOTMwOSwgMTE5MzA2LCAxMTQ4MSwgNDEyMTAsIDExOTMwNSwgMCwgMzUsIDc4NDgxLCAKLSAgICA3ODQ4MiwgNjY2OTQsIDY4NDc5LCA3ODQ3NywgNzg0NzgsIDQzNTk2LCA2MDkwLCA2NDI1NywgNzgxMiwgMTA1MzQsIDAsIAotICAgIDc4NDg1LCA3Mzg0OCwgNjc5NzUsIDQyNzIsIDAsIDQwOTY3LCA0MDk2NCwgOTE3ODI1LCAxMjcwNCwgNzg0ODcsIDQzMzA2LCAKLSAgICAwLCA2NDQ5NywgMTIxMzgsIDc5MzAsIDAsIDIyOTIsIDY4MjE2LCAwLCA5MTc4MjYsIDUyNDQsIDQxODksIDk0MTA4LCAKLSAgICA2NzU5NiwgMTI3NTA0LCA0MTg4LCAxODc5LCAwLCA5NjgsIDAsIDQzNzQzLCAwLCA4ODczLCAyMjc5LCAwLCA5MTc4MjcsIAotICAgIDY1NTU1LCAxMjU3NCwgMCwgMCwgMCwgNzQ0OTAsIDEyNzA5OSwgNDM2NTcsIDAsIDAsIDAsIDQyNjgyLCAxMjU3OCwgCi0gICAgMTI3MjAsIDAsIDQxMjI3LCAwLCAxMjM0NiwgMTI3MTAxLCA2NDg0OCwgMCwgMCwgNzI1MSwgMCwgMCwgMTE4ODUwLCAKLSAgICAxMTkxNDEsIDEyODU0NiwgNjYwMTUsIDAsIDk1OSwgODg4NSwgMTI1NjQsIDY2NDU3LCA3ODgwOCwgOTQ2OSwgOTYzMiwgCi0gICAgOTIzMjMsIDc0NzYxLCA2NDMyMywgMTI3MzM1LCAwLCAwLCAwLCAzMTAsIDAsIDQxMjgxLCAxMDk3NiwgMCwgNzEzMjUsIDAsIAotICAgIDc0MjY2LCAxMDA1NCwgNjQ5NywgODU3NCwgMCwgOTAxMiwgMTk5NTgsIDc0NDIwLCA2NTA4OSwgMTMyMTUsIDEyNzMwLCAKLSAgICA2NTE2MywgNzQwNDQsIDM3NCwgNDMxOTUsIDgxNiwgMTIwMTYxLCAwLCAwLCA0MTkzNCwgNzQ2NSwgMCwgMTI4MTY4LCAKLSAgICA5ODMyNjgsIDQ3MTUsIDYxMDEsIDk0MTA2LCA0MTkzNiwgMCwgNDg3OSwgMCwgNjU0NDYsIDAsIDMwNywgMTI3MTQ3LCAKLSAgICA5NTg1LCA1Mzc0LCA5ODMyNjcsIDEyODA1OSwgMCwgMCwgMTI2NjE4LCAxMjAzOTAsIDAsIDY1NTY3LCAxMjA2MTQsIDE5MjksIAotICAgIDAsIDEyMTQyLCAwLCAxMjIzNiwgNDE0MTksIDE5NDYxOCwgMTIwNjEwLCAxMjk4MiwgMTk0NjIzLCA1Mzc4LCA3ODc5MSwgCi0gICAgMTI4Njc5LCA0MTQyMSwgMCwgNDQ2MiwgMCwgMTI2NTk5LCAxMjgwOTIsIDgyMSwgMCwgMjQ5OCwgNTgwMCwgMTIwMTU3LCAKLSAgICA5ODMxMTUsIDE3NjAsIDI0MjEsIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgNzg0MDAsIDc1NywgMTE4NSwgMCwgNzg3NzAsIAotICAgIDQzNTk3LCAxMDYyOCwgNzQ4MDgsIDE5NDU3MiwgNzk5OSwgNDM5NzEsIDAsIDAsIDEwNjM0LCAxMDk0MiwgNzcxMywgMjM0OCwgCi0gICAgMCwgNjQzNzQsIDQzODAsIDE5NDYwOCwgMTE5MDQ0LCA5OTgyLCA2NDMyNCwgNDEyNDAsIDg2MiwgNjU2MjYsIDc4NDYyLCAKLSAgICAxODEwLCAzNjczLCA1MTM3LCAxOTQ2MTcsIDAsIDcyNzcsIDY1NjIyLCAwLCA3NTY2LCA2NDY4OCwgMTk0NTkzLCAxOTQ1OTIsIAotICAgIDc4MDkyLCA3NDM1NywgMTk0NTk3LCA0NzQ4LCA5MjIyOCwgMTk0NTk4LCAxOTQ2MDEsIDQyMjYwLCA1ODcxLCAxMTkwNzUsIAotICAgIDAsIDc0NTc2LCA0NDAxOSwgMCwgMTI4MTg5LCAzOTY3LCAxOTQ2MDQsIDEzMTM3LCA4Nzc1LCAxMjc5NDUsIDAsIDI5NjMsIAotICAgIDAsIDg0MTAsIDQ0NTQsIDcyMywgMTI3ODgyLCA5NjYsIDQ0NDksIDkyMzMwLCA5MjIzOCwgMCwgNzgxOSwgMjMyMCwgCi0gICAgMTk0NTg5LCAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCA1NTI3NiwgMCwgODA0NywgMCwgNzg4MjcsIDEyNjM0LCAKLSAgICA0MTU0MiwgNzg3ODAsIDc0NjYsIDY3MDUsIDEyMTc0LCA0MjYxMCwgMCwgNzQ0NTIsIDk4Mzc2MywgMTU4NCwgNjY2NDUsIAotICAgIDYwNDUsIDY3MjksIDEyMDY0MCwgNjUyMTgsIDExNTU5LCAwLCA3ODA2MiwgNzUzNywgMCwgMTEzNzAsIDAsIDEwMzMwLCAwLCAKLSAgICAxMDM5NCwgMCwgNzQxOTQsIDAsIDEyNzkyOSwgOTc4MCwgMCwgMTMwOTIsIDE5NDU3NiwgNzc5NTAsIDE5NDU3OCwgNzA3NCwgCi0gICAgOTI2NDgsIDE5NDU3OSwgMTk0NTgyLCAxMTQxNCwgMTI4ODY4LCAyNTMxLCAxMzAzNCwgMCwgMCwgNDIxMSwgMTI1OSwgCi0gICAgNzUxNywgMCwgMCwgMTk0NTYxLCA0MDk5NiwgMTMwMzcsIDcwOTIsIDY0MSwgNTIxOSwgOTQwMzQsIDE5NDU2NiwgMTEwNjQsIAotICAgIDQxMTI5LCAwLCA0Mjg1MCwgMTMwMzUsIDkwNzUsIDkyMzg3LCA1NDY2LCAxMjgxNTMsIDAsIDY0MDk4LCA2NTc5MywgNDUzNSwgCi0gICAgMTk0NTczLCA0MjcxLCA3ODQxNywgMTI4MzU3LCA2NzY5LCA0MTQxMCwgOTgzNDUyLCA2NDI2MiwgNjc2NywgNDE0MDcsIDAsIAotICAgIDAsIDY3NTUsIDExODg2NCwgOTA0NiwgMTI3OTM0LCAxMjY2MDgsIDAsIDAsIDAsIDAsIDY3Njc1LCAwLCAwLCAwLCA2NDMzOCwgCi0gICAgMjU2MywgMTMwMzMsIDI0NywgMTE4OTE1LCAwLCAxMjMzOCwgNDY1MSwgNjk4OTUsIDExMjcwLCAwLCAwLCAxMTkzMywgMCwgCi0gICAgMCwgNDE5MDMsIDQzNDQ3LCAxMTAwMSwgMCwgNDIyNTUsIDAsIDkyNjYxLCA2OTgyMSwgNDE5MDUsIDAsIDAsIDEwNzc1LCAKLSAgICA5NzkzLCA1MDA5LCAwLCA0MjI2OSwgNjQ1ODcsIDk4MzA2MywgNDI1MzUsIDY5ODEyLCA2NDUyOSwgNDE0MDgsIDQyODUzLCAKLSAgICAzODc3LCAxMjA3OTUsIDQyNjc0LCA4MTQ3LCA0MzU2NiwgMTE5MDIxLCA5ODM3NzYsIDEwMjM2LCA2NTkxOCwgNDM3ODIsIDAsIAotICAgIDAsIDY0NTA2LCA2OTY1MiwgMTE4OTIxLCA0NzQ3LCAxMjgwNTgsIDY5ODQ0LCA0MzIwMCwgNTgzMiwgMCwgMCwgNTE0MSwgCi0gICAgNDI2MDAsIDAsIDQzMjAzLCAwLCA5ODM3OTksIDQzMjg2LCAwLCAxMjgyMTEsIDQzNzc4LCAwLCA0MTMwNSwgNzg3NzYsIAotICAgIDQzNzgxLCAxMTMwMywgNjU1NDcsIDAsIDcwMzEsIDg1OSwgMCwgMCwgMCwgNjA1OSwgMTI2OTg1LCA1NTIzNSwgMCwgODUzNSwgCi0gICAgMCwgNjUxOTYsIDE5NDc4NywgNjYwMzIsIDExNDg4LCAxMjA0ODEsIDEyMDc4NiwgNDIyMzMsIDY0MTQwLCA5OTQ2LCAKLSAgICA2Mzg4NSwgMTk0NzkyLCAxMTgyMiwgMCwgNDMxODksIDk4Mzg5OCwgMCwgMTc4OCwgMTU3OSwgMTIwNDgyLCA3MTI5OCwgMCwgCi0gICAgMCwgMCwgOTAyOCwgMTE5NTcxLCA2OTIzNCwgOTQwNTUsIDAsIDEyODUsIDY0ODgyLCA0MTI0MiwgNzAwODYsIDAsIDEyNjQwLCAKLSAgICAwLCA3NDAxLCAwLCAxMjYyNSwgNjgxOTgsIDAsIDcwMDgyLCAzOTQwLCA0MTU5NywgNDM3NTQsIDMzOTYsIDEyNjQyLCAKLSAgICA4NjY1LCAwLCAwLCAxMjYzMCwgMTY1MywgOTE3ODE1LCAxMDE1MywgMCwgNjE2NiwgMTIwNTE2LCAxMTg5ODksIDAsIDg4MTUsIAotICAgIDY2NjczLCA2NTA0NiwgOTI4NSwgOTEzLCA0MjI1OSwgMTE5MzE3LCAxMTkzMTgsIDIxNDIsIDY4NDU0LCA0MjQ4NSwgCi0gICAgOTQwMTIsIDc4NzgsIDgyMTEsIDQyMjkzLCA2NDM3NywgMCwgOTI2NDMsIDAsIDE5NDY3MywgMTIwMzIsIDAsIDk3MjUsIDAsIAotICAgIDc4NDMxLCA1MjYzLCAxMjgxOCwgNzg0MzAsIDQxOTM5LCAxMDAyMiwgNjUzODcsIDc4NDE5LCA0Mjc3NywgMTAxMzksIDk4MCwgCi0gICAgNDM2OTgsIDY1Mzg2LCAyMjA4LCAwLCA0MzcwMSwgNDMxOTgsIDcxODQsIDEyMDY3MywgMTk0Nzk3LCA5MTc4MTksIDEwMDg1LCAKLSAgICAxMTk5OTIsIDAsIDExOTk5MywgNjYzNCwgOTIzNzMsIDAsIDExOTMyMywgODA3MiwgMTE5MzIxLCA0MzcwMCwgMCwgODg3MiwgCi0gICAgNzc4MywgOTE3OTkyLCAxMjM5OCwgODIzNywgMCwgMCwgMTIzOTUsIDAsIDEyNjk3NywgMTIwNTY1LCA5OTE0LCAyMjE3LCAKLSAgICA5MTc4NTQsIDczOTc1LCA2MzY3LCA2MzUxLCA2NjY4OCwgMCwgNzgxMDcsIDAsIDY0NzM1LCA0MTI0MywgOTIxOTksIDc4MDgsIAotICAgIDE4MjksIDAsIDQxOTM3LCA0MzU4LCA0MzI3MiwgNjM1MywgMCwgMCwgMTIwNDIyLCAwLCAxNzEwLCAwLCAwLCA2NTYwNywgMCwgCi0gICAgNDksIDY2MjcsIDAsIDYyNTgsIDEwNjgzLCA3ODY3MiwgOTc0MSwgNzgzMjksIDU2NDksIDc4NDQxLCA0MzQ0MywgNjQ0MTgsIAotICAgIDE2NDMsIDY1MjEzLCA4NDA1LCAzNDcwLCAxMjgyMjUsIDEzMjEzLCA0MjQ1MiwgNzgzMzEsIDEyMDY2NCwgNzg0NDUsIDAsIAotICAgIDEwNzIsIDc4NDU3LCA3ODQ1MiwgNzg0NTQsIDY1NzYsIDQxOTg4LCA0MTEzMiwgNjU2NzUsIDEwODAsIDEyMDAwMiwgOTg4NiwgCi0gICAgNTUyMjUsIDExMDEsIDY4NDA0LCAxMjMwOSwgNTUyMjcsIDAsIDEyNjMyLCAxMDg2LCAxODY5LCA3ODY4NSwgNzY4MCwgMCwgCi0gICAgNjU0NTgsIDEyMDcxNCwgMTI2MzksIDMzODAsIDgxMjMsIDEwOTEsIDEyNjM4LCA3OTc3LCA0NTAxLCA0MTA5OSwgMCwgCi0gICAgNjYzMDksIDAsIDAsIDE0OTQsIDk4MzE0NiwgMTI2NjEzLCAwLCAxMTY5MywgMTI2NTEzLCAxMDQ5NCwgOTI2NTUsIDY1ODcyLCAKLSAgICAxMjM2MywgMTEzODYsIDAsIDAsIDAsIDAsIDY0NTgyLCAwLCA3Mzc5NCwgMCwgODAyMiwgMCwgMTIwNDYyLCA3NDEwNiwgCi0gICAgMTI0MTMsIDk0MDY5LCA5MTc5OTQsIDkxNzk5MywgOTE3OTk1LCA1NTcwLCAxODgxLCA3MjEwLCAwLCAxMDEyLCA0Mzc1MiwgCi0gICAgMCwgMTIwNzA5LCA3MjA4LCA2NjQ0MiwgNTU2OSwgOTgzMjQyLCA0MjMzOSwgMCwgNjA2MywgMCwgNzgzODMsIDExOTU5NCwgCi0gICAgNjA1MywgNjU2MDIsIDAsIDkyMjAxLCA2NDcyNywgOTE2MCwgMTk0ODI3LCAwLCAwLCA5MjE4MCwgMTA1MDMsIDExODgxMCwgCi0gICAgNjA1NSwgMzg3MCwgNDI3OSwgODQ5MCwgMTIwMTE0LCA0MzE5LCA2NDc4NiwgODYwMiwgMTIwMTEwLCAxMTMyNiwgOTIyMDQsIAotICAgIDk4MzExNiwgMCwgMTIwMTE5LCA3ODMzMywgMTIwMTE3LCAxMjAxMTgsIDEyMDA5OSwgMTIwMTAwLCA2NTA4NywgNTU3MSwgCi0gICAgMzY3NCwgOTc0MCwgOTEyMSwgNTU2OCwgMTIwMTA3LCAxMjAxMDgsIDQyMDg1LCAxMDEwNywgNDIxNTksIDQyODcwLCAKLSAgICAxMjAxMDEsIDU4OSwgNzA1MCwgOTgzODAwLCA0MzI4MSwgMTAyMzMsIDQxMjYzLCA2NjI1MSwgNjU3MjksIDY2MjUzLCAKLSAgICAxMjY0OTcsIDc0MDk5LCA0MjY0NSwgMCwgMTk0ODE1LCA4NTgzLCAwLCA1ODQ3LCA2OTI4LCAxMjgwNzQsIDAsIDAsIDAsIDAsIAotICAgIDY2NTkyLCAxMjIwNCwgOTE3OTYyLCAxOTk2NiwgNzc4NTYsIDQyNTYxLCAxMjA2MjYsIDk4MzI1MSwgMCwgODEyMCwgCi0gICAgMTIwNzAxLCAwLCAwLCAxMjgwMTIsIDQxMDYzLCAwLCAxMDY2NCwgMCwgODM2OSwgMCwgNDU1MSwgMTk0OTY0LCAzMzY5LCAwLCAKLSAgICAwLCA5NjczLCA2NjMzNCwgNjU1ODAsIDEwNDc4LCAxMTg5NjAsIDEyNTE3LCA1NTcsIDk0NTcsIDEyMDM0LCA5ODM2NzEsIAotICAgIDYzNTUsIDEyNTE5LCA0MTAwNCwgMCwgMTk1MDI1LCA3NDA5NCwgMCwgMCwgNzc5NzAsIDk4MzU2MCwgMCwgMTI4MTc1LCAKLSAgICAxMjExMSwgMzkyNywgMCwgMTI1MTUsIDE0NzQsIDY3ODkzLCA1NDkyLCA2OTIzLCA5MjI4MSwgMTA0NDEsIDczODM2LCAwLCAKLSAgICA0Mzk5MCwgNTQ5MywgMCwgNzQzMTksIDAsIDY2NjM1LCAxMjAxOSwgMCwgMTYxOCwgMCwgMTIwNDc0LCA5NjQ1LCAxMDQzMCwgCi0gICAgOTE3OTU5LCA1ODUzLCAxMzA2MywgMTAzNjMsIDAsIDEyOTU2LCAxMjgxNjksIDEyMDcyOSwgMTEzMTQsIDkxNzU4MiwgCi0gICAgMTIwNjAsIDAsIDc4MzkyLCAxMjgyNiwgNjMyOSwgMCwgMTA1MTQsIDY1NTE3LCA3NDM5NSwgMjcwNywgODMwOSwgMCwgCi0gICAgMTI3MDU0LCA3ODM5OCwgNDM1NzAsIDI2OTcsIDQzNDIwLCA3ODM5NiwgMTI3MDU3LCAyNjk1LCA0MjE3MSwgMCwgMCwgMCwgCi0gICAgNjc2MTcsIDExODk3MSwgMCwgMjY5MywgMTIxMjUsIDEyNzY2LCAwLCAxMTY0LCAxMjg4MTcsIDAsIDQxOTE4LCA5ODMxNjgsIAotICAgIDEyNzU0MiwgODY4NywgNjYwMDksIDEyMTc4LCA3MDUzLCAxMjgwMDEsIDc0NjksIDAsIDUyNDgsIDEyMjE4LCAxMjA1MzgsIAotICAgIDY0MjcsIDQyODg0LCA0MTEyMywgMCwgMCwgNDI4NzMsIDQxMTI2LCA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgMCwgCi0gICAgOTg3MywgMCwgNDI4NzcsIDc5OTQsIDY0NzYyLCAyMDUzLCA0Mjg0MywgNjU5MSwgOTM0MCwgMCwgMTU4OSwgMCwgMjk2LCAKLSAgICA3NDQzOCwgNzg4NTIsIDAsIDY3ODQxLCA3NDM3MCwgMCwgODkyMiwgMTI4MDY4LCA3NDYwMCwgMTI3MDAsIDc0ODM2LCAwLCAKLSAgICAxMjU3OSwgMCwgMTI1NzUsIDY0MTYsIDU2NTYsIDI4OTEsIDEzMjYyLCA2NTU5MCwgNTI5OSwgMCwgMTE0NzMsIDU0NDksIAotICAgIDEyNTIsIDAsIDc4NDA0LCA0MTQzMSwgNzQzNjksIDY1MzczLCA1Mjk1LCA5MTc1NjksIDc0MTE0LCAxMjIzLCAxNjQyLCAKLSAgICAxNzQsIDc4Mzk5LCA4ODMsIDQxNjEsIDEyNjkxLCA0MjYwMywgNDE0MTMsIDMyMTIsIDQxNDU5LCAzMjExLCA3NDgxMCwgCi0gICAgNDE0MjUsIDEyNzAyOSwgNzg0MTIsIDc0NDUwLCA5NzI4LCAzODQ2LCA4MDcwLCA2MTUwLCA2NjM2LCA0MzcwLCAwLCAwLCAKLSAgICA3NDE3OCwgNzQ1ODcsIDc0MTE3LCAwLCAwLCAwLCA0OTg2LCAxMjE4OSwgMCwgNjc2NDgsIDEyMDQ5OSwgOTQwMDEsIDQyNTcsIAotICAgIDEyMTA0LCA3Nzk0MiwgNjIyMCwgOTAwNCwgNjU1NjEsIDAsIDc3OTQ5LCAwLCA2ODEzNSwgOTE3NTc2LCA3Nzk0NiwgMCwgCi0gICAgNjk2NzksIDY5Njg0LCA5ODkwLCA3ODU2MSwgMTI5NzEsIDc4NDUzLCA5MjU1NiwgNzM4OTgsIDExOTc5LCA3MDA1MSwgCi0gICAgMTE4OTAwLCA5MTc4OTQsIDAsIDk2MzUsIDEyNjAwLCA4ODcxLCAwLCAwLCAwLCA2NDY5LCA3NDIyNywgMCwgNjUzMDQsIAotICAgIDQ2NzksIDEwMjMwLCA2NDMwMCwgNjQ4NjcsIDM0MjcsIDQyNDAsIDAsIDAsIDAsIDAsIDQyOTE2LCAwLCAwLCAwLCA3MjgyLCAKLSAgICA3ODcyOCwgNjU3MzMsIDQ0NDUsIDEyNzEzOCwgMTI4MDgyLCAzNDk0LCA3NDYwNiwgNjU1NSwgMCwgNzc5NzYsIDAsIDAsIAotICAgIDc4NTY2LCAwLCA5ODMxODksIDY1ODk4LCA5ODMyNDQsIDY1MzEyLCA1NDQ3LCAwLCAxMjg5NSwgNjU1OTMsIDQwMTAsIDAsIAotICAgIDQxMTA2LCAwLCA2NDQ0OCwgMCwgNDExMDUsIDAsIDY1ODIwLCA2MjMyLCAwLCAxMjgyODAsIDAsIDQzNjA4LCAxMTkwOTEsIAotICAgIDAsIDY1MzgsIDQzMzUsIDc4MzY0LCAzOTQxLCA0MTEyMiwgMTEwNjEsIDc4MzYzLCA2NDg5MiwgOTExMywgMTk1NCwgCi0gICAgMTIxNTUsIDk4MzY3NCwgNDI4NzgsIDExNTAwLCAwLCAwLCA3NDU3OCwgMCwgNjU4MzIsIDAsIDAsIDAsIDc3OTc1LCAKLSAgICAxMTkyMzAsIDQ1ODYsIDAsIDM1MCwgMTA5NTEsIDAsIDUwOSwgMCwgMCwgOTIzMDcsIDAsIDAsIDUxMzMsIDAsIDAsIDk1MDAsIAotICAgIDAsIDQ5NTcsIDY0NzQxLCAyNDIyLCAyMjEyLCA5ODMwODAsIDAsIDAsIDI0OTYsIDExNTE2LCA5NDQsIDExODg1MSwgMzg5MCwgCi0gICAgMTIxNjgsIDE0MzgsIDAsIDk4MzExNywgMCwgNDE5NDcsIDEyMjAsIDEyMDgyOCwgMTI4NTU1LCAwLCAwLCAxNTcxLCAKLSAgICA0MjYzMCwgNDE5NDksIDQyODA1LCA4MjcwLCA5NDMsIDU2NCwgMCwgMzEyLCA0MTk4MCwgOTgzOTQ0LCAwLCA3ODEyMCwgCi0gICAgODg3NywgMjY5LCA0NDI5LCA2MjcyLCA5NjE3LCAxNDYwLCA2OTU0LCA3ODY1NywgNDExMjAsIDY1MTIxLCAxMDg2MiwgCi0gICAgNjA2MCwgNDExMTksIDQxNDE2LCA3NDM1NSwgNDE3MywgMCwgMCwgMCwgMTkwNiwgOTE3OTg2LCAxMTUzMiwgNzQwNzMsIAotICAgIDEyNzMzOCwgMCwgMTk4NSwgNjI5NiwgOTU4MiwgOTE3ODk1LCA2NDI4NywgMCwgNzgxMTUsIDExNDI4LCAxNzMwLCAyNDU3LCAKLSAgICA5MTc4MDgsIDE5OTE4LCAxMDQ2OSwgMCwgMCwgNzcwMywgODg0MCwgODAzNSwgMCwgMCwgOTIyMzAsIDAsIDYxMjksIDAsIAotICAgIDEyODUyOCwgMTI4MjY4LCAwLCA3ODc0LCA4NjgxLCAxMTkwOTIsIDAsIDEzMTM2LCAwLCAwLCA3MDEwMiwgNjM4ODYsIAotICAgIDExODg4MSwgOTYwNSwgNzEzMDgsIDEzMjIwLCAxMjg3NzYsIDEyMDI3NCwgNTUxNCwgMCwgOTIyOCwgMCwgMCwgMCwgNTI0MCwgCi0gICAgOTgxMSwgMTAwMTIsIDMwOTYsIDAsIDAsIDk4MzM1MSwgNjY2NzYsIDY1ODczLCAwLCAwLCAwLCA5NTAxLCAwLCAxMjcyLCAKLSAgICA2NDUzNiwgNjU0NjUsIDY0NjU0LCA3NDY3LCAwLCAxNDY3LCAxMDE1OCwgMTAwNDAsIDAsIDk1MTksIDAsIDkxNzgxMiwgMCwgCi0gICAgMTE4ODk5LCAxMjE5MywgMCwgMCwgMCwgMCwgOTgzMzUzLCAxOTkzNSwgMCwgOTIxNjIsIDY5Njc2LCAwLCAwLCAwLCA1Mjc1LCAKLSAgICAwLCAwLCA4NjM3LCAwLCAwLCAzNzg5LCA2Mzg4MCwgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIDY2MzMyLCA2NjYwMywgCi0gICAgMTI4MTM4LCAyNDI2LCAxMjA0MiwgOTIxOTQsIDk4MzkxMSwgOTUzNywgMzk2MSwgMTIxMTUsIDc3OTUzLCAyNjA1LCA0NTAwLCAKLSAgICA2NDU2MSwgNTUyMjQsIDQ5ODEsIDAsIDAsIDYzODc2LCAxMTY2NywgNDI2ODYsIDc3OTczLCA0MjM2MiwgNjQ2ODYsIDQ0OTksIAotICAgIDQxNjQ5LCA3NTg5LCAwLCAwLCAzMjM3LCAwLCA2ODIxNSwgOTE3OTA0LCA4NTQxLCA3ODI5OCwgNzAwMzQsIDQxODY2LCAwLCAKLSAgICAwLCAwLCAwLCA2OTkyNCwgNDM1NTUsIDI4MjMsIDk1NTksIDEwMDYwLCA0MTk0MCwgODI5OSwgNDE5NDUsIDcxMzIsIAotICAgIDQxOTQxLCAzMzA4LCA3MTkwLCA2NDg4MCwgODYxNCwgNjUyMjAsIDQxNDkzLCAwLCA0MTY5OSwgMTA3NjIsIDQzNzgwLCAKLSAgICAxMjk5OSwgMCwgMCwgODEwNiwgNDEyOCwgMCwgNjI3NCwgNDQ5NCwgMCwgNDAxMiwgMTAzOTUsIDk4MzU5MSwgNDM2MzMsIAotICAgIDY1NDQ3LCAxMjY1MTEsIDAsIDExMDA0LCA2OTUsIDczOSwgNjk2LCA3NjExLCAwLCA0Mjc1NSwgNzQ4MDIsIDkyMjcsIAotICAgIDc1MDYsIDc1MTAsIDY5OTM3LCA2OTEsIDczOCwgNzUxMSwgNzUxMiwgNzUxNSwgMzg2OCwgNjg4LCA0MTg0NywgNjkwLCAKLSAgICAyNTQ4LCA3MzcsIDk3NCwgODAwMywgNzQwNiwgOTE3OTExLCAwLCAxMjg2ODgsIDM5ODUsIDkxNzkxMiwgNjU4NjAsIAotICAgIDYzOTIxLCA3MDUxLCA2OTc3NywgNDY4MiwgOTE3ODA1LCAxMjgwOSwgNjQwNiwgNDY4NSwgOTI1MDUsIDEwODc5LCAxMDM0NywgCi0gICAgNDY4MCwgNjM0MSwgMCwgMzg1MSwgODEzMiwgNzQzMjUsIDAsIDkxNzkwNywgMCwgNDE5NTgsIDExOTE3NiwgOTE3OTA4LCAwLCAKLSAgICAwLCA0MjY1NywgOTI0NjgsIDc2NDMsIDQyMzczLCAxMTcxNCwgNjc1ODcsIDQzNTY4LCA5ODMxNzUsIDExNzE3LCA3NjUwLCAKLSAgICAxMDU5NCwgNjQ5NTEsIDc2NDcsIDc2NDksIDEyODE1NSwgNzY0NiwgMCwgNzgwODIsIDk2NTEsIDAsIDM4OTEsIDAsIDAsIAotICAgIDIzMzcsIDE3MzUsIDc0MzI0LCA2Nzg2MCwgMjM2MywgOTgzMTM1LCAwLCA0MzU2MSwgMCwgMCwgNzQxNDYsIDE4NjAsIAotICAgIDc0OTUsIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDExOTE0MCwgMTI3ODUzLCAwLCAxMjAzNDcsIDc3MjcsIDAsIDg0OTgsIAotICAgIDY5ODE4LCA4OTQ5LCAzMDY1LCA0MjcxOSwgNzEzNSwgMTU2OSwgOTIzNzUsIDEyNTM0LCAxMjEyNCwgNzY5MCwgMCwgCi0gICAgMTI1MzMsIDk4Mzg3OSwgNjQxOCwgNDU0MywgNzgwODYsIDY5NjksIDAsIDc0ODAwLCAwLCA2Nzk3NCwgMTE5ODAsIAotICAgIDEyODY1MCwgOTgzODAxLCA2Mzg5NCwgMTIwNzYwLCAxMjI4MiwgNjYxOTIsIDAsIDc0NTkyLCA4ODUwLCA3NDI3NSwgOTIzOCwgCi0gICAgMTA2MTcsIDkxNzU0NSwgMCwgOTI2MjUsIDAsIDEyNzkxLCAwLCAwLCAxMjc4NDMsIDQ0NDcsIDczNzMyLCAxMjc5MywgCi0gICAgMTI5MDAsIDkyMzc3LCAxMDk1MCwgMCwgNzgwODcsIDEyNzkwLCA0MTQwMCwgMTE5MTI4LCA2NjYwNywgMTI3OTIsIDQyMjMyLCAKLSAgICAxOTQ5MzgsIDE3NDQsIDEyNzg5LCAxMDM2NiwgMTIzMTcsIDQxMzEwLCA5ODM4NjksIDQxMzk5LCAwLCAwLCA1NTI1OCwgMCwgCi0gICAgMTI2OTAsIDAsIDAsIDQzNjcyLCAxMjc4NDAsIDQxNjUyLCAyOTc0LCA5MDEwLCAxMTMxNSwgMCwgMjc4LCAwLCA0MTQwNSwgCi0gICAgMTE5MjU0LCAwLCAxMDA3NywgNjM4NTMsIDc0NTU3LCA0MjU4NiwgMCwgMCwgNjAwMiwgMCwgNDM1NTMsIDAsIDY3OTAzLCAwLCAKLSAgICAxMjc4NywgNDEzMDgsIDc5MzQsIDY1MzA2LCAwLCAwLCAwLCA4NjQ2LCA5ODMxODYsIDc3ODI5LCA3MTM2MCwgMCwgNjQxMywgCi0gICAgNjU1MCwgMCwgMTk0MCwgMCwgNDM2MzcsIDIyMCwgNjUxOTMsIDQzNTUxLCAxMDY3OCwgMTAwNDQsIDEyODMyMiwgMCwgMCwgCi0gICAgNjg2NTksIDY0MDMsIDU3MDcsIDEwMzkzLCAxMjc1MzIsIDAsIDY2NjE0LCAwLCAwLCAwLCAxMDI5NywgMCwgMzc0MiwgMCwgCi0gICAgMzk1OSwgMCwgMCwgMCwgMjQ2NywgMCwgNjAwMywgNjM4NDQsIDY2NjMsIDgwNDAsIDAsIDQzNzU4LCA0MTgyLCA3ODE3MSwgCi0gICAgNDY3NiwgMTIwNTAxLCAwLCAwLCAyNTEwLCAwLCAxMDIwOCwgNzgxNjgsIDkyMzYxLCAxMTU0MCwgNDM1NDYsIDY2OTIsIDAsIAotICAgIDQxMDYwLCAwLCA0NjY4LCA5MDgzLCAwLCAwLCA3ODE0NCwgMTU1OSwgNjM4MzEsIDk2NzcsIDEyMDI2MCwgMCwgNjUyNTYsIAotICAgIDAsIDc0MDcwLCAwLCAwLCAzNjUsIDEyMDU2LCA0MzAyNywgMTIwNDIzLCA0MTcxNiwgMTI4MjM2LCAwLCAxMjA0NzIsIAotICAgIDU1MTYsIDI4NDUsIDc3MTcsIDgwMzYsIDQxNzE3LCA3MzgyNywgNTQ0LCAxMjA0NSwgNjI3OCwgMCwgNTUxNSwgMCwgMCwgCi0gICAgOTgzMDUxLCA2NTMzOSwgNDMyMjEsIDIyMTEsIDAsIDU1MTcsIDAsIDAsIDc0ODQxLCA2Nzg4NCwgMCwgNjc4OTAsIDY3ODg1LCAKLSAgICA2Nzg4MCwgNjc4ODEsIDY3ODgyLCA2Nzg4MywgMCwgMCwgNjc4NzksIDEyNzE4OCwgMTkwMiwgNjc4ODcsIDk2MzgsIAotICAgIDEyOTc2LCAxMjY1NDYsIDEyNDgzLCAxMjM2OCwgNDE3NjksIDQyNzI2LCA0MTc2NSwgNzM2MSwgNjY2NywgNjc4NzQsIAotICAgIDc1NTYsIDY3ODc4LCA3NDM1MSwgMTEyNjQsIDk4OSwgNDI2NzcsIDY3ODg5LCAwLCAxMzExLCA5MTc5NjYsIDQzMjYsIAotICAgIDExMDAwLCA2MzgyNCwgMTMwNjgsIDEwOTMyLCAxMjg4ODAsIDY5MTcsIDc4MTU1LCAwLCA5NDksIDc4MTYyLCAwLCA2MTQ4LCAKLSAgICA4NjA1LCA0MjI1MywgNzgxNzcsIDAsIDAsIDQyNzE1LCAwLCAwLCAwLCA2Mzg3MSwgMCwgNDE3OTYsIDEyNjksIDY1MzAsIDAsIAotICAgIDY1MDU3LCAwLCA1MTQ0LCAxMjIyMSwgNDI3MTYsIDAsIDQ0MzEsIDQzMzEsIDk4MzcyOSwgMTI4Njc1LCA0MTgzNCwgNTI3OSwgCi0gICAgMCwgMTAzMzYsIDgzMTIsIDAsIDQyNzAxLCAxMjg4MjUsIDAsIDc4MTY1LCA2NjAzNiwgMCwgMCwgNjQyOCwgNDIyNzAsIDAsIAotICAgIDk4MzU5NiwgNDMwNTksIDQyNjY2LCA1MjU2LCAxMDY3LCAyNTUsIDEyMTMxLCA5ODM3MjIsIDk0OTMsIDk4Mzk2OCwgCi0gICAgNDEwMTQsIDExNzkzLCAxOTQ5MjAsIDAsIDc0Mzk0LCA0MzQ2MCwgMTA2NTMsIDQyNzIzLCA5ODM4NTQsIDExOTYzMiwgMCwgCi0gICAgNjU2MCwgNzAxNiwgNzQyNzQsIDk4MzYxNSwgNDM1NTYsIDM5MjksIDY3OTc3LCA2NjE0LCAyNzY4LCA5MjUwNCwgOTc0NiwgCi0gICAgNTEzNSwgMTE4MTEsIDEyNzk2LCAxMTk1MywgMCwgNjk3NjEsIDUxMzksIDM0NiwgNzQzMDMsIDYzMDUsIDEyNzk1LCA0Njc1LCAKLSAgICA1MTY4LCA3ODU1MiwgMTI3NzUzLCA3NDMxNSwgNzQzNjEsIDgyNTMsIDg4MTcsIDExMzYsIDAsIDQzNTYzLCA5MjIzMiwgMCwgCi0gICAgMTk0NzUwLCA3MzkyLCA4MjMwLCA5MzY1LCAwLCAwLCA5ODM2MDcsIDAsIDAsIDQwNDEsIDAsIDIzNTcsIDQzMjQwLCAKLSAgICAxMjc4NiwgMjI5LCAxMTk4ODUsIDExOTg4NCwgNDQwMDQsIDcxNDIsIDExOTg4MSwgMTIzNTAsIDY1NTU0LCAxMTk4ODIsIAotICAgIDExOTg3NywgMTE5ODc2LCAxMjc4NSwgNjM4NjMsIDQzNzk1LCA3NzcwLCAxMDcxMiwgNjQ4NTMsIDEyNjg2LCAxMTg5MTYsIAotICAgIDQyMzc1LCAwLCAxMjcyMzgsIDY2MzUyLCAxMDQ3MCwgMCwgMTEwNTksIDEwNzkxLCA5MTc5NDQsIDQ1MCwgMTE5MzI4LCAwLCAKLSAgICAxMDQzMiwgMTIwOTcsIDU0NTAsIDY0NjkxLCAxMjMzLCAwLCA0NDAwOSwgNzgyODQsIDY2MzM4LCAwLCAwLCAxODM5LCAKLSAgICAxMTg3OTksIDk4MzIxOSwgMTA5MjcsIDE3MDEsIDk4MzY2NCwgMjM4OCwgNDE3NDksIDQxNzYxLCA1NDUzLCA4MzYxLCAKLSAgICAxMTk4NjUsIDQxNzU4LCA1NDQ0LCA0MTc2MywgNjQ4ODksIDcxNDMsIDkyNDkzLCA3ODY3NywgMCwgOTI0MjksIDc4MTc0LCAKLSAgICA2NjQzMiwgODgwMSwgMzA1MywgNDM0MCwgOTgzMDQ0LCAwLCA2NTgxMiwgOTE3ODMxLCAwLCA0MTgyNCwgNjc5ODUsIAotICAgIDEyMDIwMywgMTk0ODAwLCAxOTQ4MDMsIDQyNzAwLCAxOTQ4MDUsIDEyNzk4MCwgMTk0ODA3LCA3ODY3NiwgOTIzNTYsIAotICAgIDE5NDgwOCwgMCwgMCwgNDQ5MywgNDMzNiwgMCwgMjMxNCwgNDM2MDIsIDc4ODI2LCAxMTkzMjUsIDE5NDgxMSwgNDI0MzksIAotICAgIDY0NjM4LCA0MjMyNywgNDM1MjgsIDQ0ODksIDcxMzMxLCAwLCAxOTQ3OTMsIDE5MTIsIDQyMzg1LCAxMDMwNiwgMTAzNzAsIAotICAgIDAsIDAsIDg4NjcsIDEwMjUwLCAxMDI1OCwgMjcxMiwgMTYzNSwgNzg4MjEsIDE0MTAsIDkyNjcxLCA5ODMyNTAsIDExODg3OCwgCi0gICAgMCwgMCwgOTkxOSwgMTIwNTI4LCA1NTksIDEyODE1NywgNDE4MjUsIDEyNzk3NSwgNzgxODgsIDQ4OTIsIDc0MDE2LCAKLSAgICAxOTQ3ODEsIDY1NDIsIDQxOTU3LCAxMjg4NjUsIDU3NzcsIDAsIDc1OSwgNjU3NDksIDIwNzksIDY1MjQ4LCAxMjc4OCwgCi0gICAgNjQ0ODcsIDY0NTUyLCAwLCAxMDIyMywgNDIwNjIsIDAsIDAsIDEyNjU3MywgMzY2OCwgNjU3NTQsIDQzNTYwLCAxMjIyNiwgCi0gICAgNjc5OTEsIDY1MTQ5LCAyMzQwLCA0MTk1OSwgMTk0Nzg2LCAxOTQ3ODUsIDE5NDc4OCwgNDM2MTgsIDY1NzQ3LCAxMDkzNywgCi0gICAgMjk2MiwgMCwgMjMyMSwgMzU4NywgNjU3NDUsIDkyNDM2LCA4OTIxLCA5OTUyLCAwLCAwLCA0MjcxNCwgOTk1MSwgNDM0MDksIAotICAgIDE5NDc3MCwgMjk0OSwgNjYwMTIsIDE5NDc3NSwgMTk0Nzc0LCAyOTU4LCA2ODM1OSwgNDE4MjAsIDIzMDAsIDIzOTUsIAotICAgIDEyODU2MywgOTk3NiwgMTIwMDQzLCAxMjAwNTAsIDEyMDA1OCwgNjgyMjAsIDEyODE0MywgNDI4MDksIDQyODA3LCAwLCAKLSAgICAxMjAwNDYsIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDY3OTc2LCA0MTg5OCwgMjM2MCwgNDE3OTQsIAotICAgIDkxNzk0MiwgNzEzMTQsIDEyNzgxOCwgMCwgMCwgMjQxOCwgOTgzMDk4LCAyNDExLCAxMTMzNiwgNzk5LCA2MzgyMywgCi0gICAgMTAyNzYsIDEwMzA4LCAxMDM3MiwgOTE3NTQxLCA0MTc3MiwgNDI4MTMsIDIzMTcsIDEwMjYwLCAxMTg5ODAsIDU1Mjg0LCAKLSAgICA5MjIwMywgMCwgMTAzODQsIDk4MzIyMCwgMCwgMCwgNzc1MywgMjM1MSwgNjY1NSwgNjQ0ODksIDY5OTMxLCAwLCA3Nzg3MiwgCi0gICAgNDQ0MywgNDI3NzksIDIzMCwgMCwgMCwgNDM1NDksIDQ4NTUsIDQyMTUwLCA2NTczOSwgNTQ0MSwgNDE4OTYsIDEwMjg4LCAKLSAgICAxMDMyMCwgMCwgODU1LCA3MDQ2LCA2MTA5LCA2NTA0NSwgNjM4MzksIDc4MTk4LCAyMDQ5LCAxMDA5OCwgMCwgNzQxNDUsIAotICAgIDEyNzk0MywgMTAyNjQsIDEwMjgwLCA5MTg0LCAxMDM3NiwgNzAxMywgNDQ2NywgMCwgMCwgMCwgNDE4ODcsIDAsIDQ4NjIsIAotICAgIDk3MzUsIDY1MzcsIDEyMDU5MSwgNzQyODYsIDM5MTQsIDkyMTc4LCA5Mzk3NiwgOTA2NSwgMTI5NjEsIDAsIDAsIDkyMjUzLCAKLSAgICAwLCAyODksIDAsIDQ2OTQsIDExNDIwLCA0NjkwLCAwLCAxMjA1MTQsIDkxNzk3OCwgNDY5MywgNzM4OTMsIDQyNzI0LCAwLCAKLSAgICA0Njg4LCAxMjA0NTQsIDAsIDAsIDY3OTk0LCA4MjM4LCAzMTEwLCAxMjAxNjIsIDk4MzkwOCwgMTIwMTYzLCA2NTI4LCAKLSAgICAxMjc1NTMsIDQzMDM1LCA2OTg5OCwgMjE4LCAwLCAxNTIwLCAwLCA0Nzg2LCAwLCA0MzIyNSwgNDYwMiwgMCwgNzgxNjcsIAotICAgIDEwMDg4LCA2NTQ4LCAwLCAxMjAxNTYsIDQzOTc4LCA4OTg4LCA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgNzM5MDIsIAotICAgIDY5NzQwLCAwLCAwLCA5OTc1LCAxMjgwMzksIDExOTkwMiwgNDY4OSwgODkzMiwgMCwgNjU1NjAsIDExOTIwOSwgNzQ0NDEsIAotICAgIDc4ODEwLCAwLCAwLCA2Nzk4NywgMCwgMCwgMCwgNjc5ODksIDAsIDEwMDY1LCA4MjA3LCAwLCA5MjYxMywgMTI4MDExLCAwLCAKLSAgICA2NjIsIDAsIDkyNDQsIDE5NDg2MywgMCwgMTE5MjYxLCA5ODM0MjgsIDAsIDAsIDAsIDQxOTI5LCAwLCAwLCA2NjY3NCwgCi0gICAgNDE5MjYsIDEyMDQwOCwgMTIwNDQzLCAxMDUxMywgNjQ2MzcsIDE5NDg2MiwgNjgwMTMsIDUyLCAxMzExOCwgNjQ3NSwgMCwgCi0gICAgMTIwMzQxLCAxMjA5NSwgMTAyMjUsIDQ4MTIsIDkyNTc4LCAwLCA2Nzk5MiwgNzQwODUsIDAsIDM5NzgsIDAsIDkxNzk0NSwgCi0gICAgMTI3ODIzLCAxMTU4MiwgMTIwNzYxLCAxMjI4MSwgMCwgNjU0NCwgMTMyNDEsIDkzOTYxLCA2OTc4MiwgMTI4NTU3LCAKLSAgICAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIDcxOTIsIDEwMjQ5LCA0MjIsIDE1MDAsIDIwMzYsIDk4NiwgCi0gICAgMTk0ODU5LCA2NDM5NCwgNTc4MSwgNTU5OSwgNjQyOTQsIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIDY0MzM0LCAKLSAgICA3ODIwMywgMTI3ODA4LCAwLCA5MjI2NiwgNjUxMDIsIDg5NjEsIDY1ODQyLCAxMDI0MywgMTAyNDUsIDc0MTkxLCAxMjA0MTAsIAotICAgIDAsIDEyMDQ1MywgNjQ4MjEsIDk0NzgsIDI1MDgsIDkyNjgzLCAwLCAyMDIsIDEyODI0NiwgNzQxMzEsIDEyNDIsIDY1NTE0LCAKLSAgICAwLCA2Mzk0MCwgMTI4NzA2LCA2NDUzMywgMTIwMTI5LCAwLCA2Nzg0MiwgMTE5OTAsIDkyNDMwLCA2MzkzOSwgNDMzNzUsIAotICAgIDY1NDQwLCAyNTA0LCAwLCA3ODY3MSwgNjQ4MjksIDk4MzkxMCwgNjk0MywgOTE3OTM0LCA1ODU5LCAwLCAyODU4LCAKLSAgICA5ODMzNjEsIDc0Mjk0LCA5ODM5MTQsIDY5MjM5LCAwLCAxMTkwMjcsIDEyOTkyLCAyNzUzLCAxOTM2LCA3MDA3OCwgOTI1NzQsIAotICAgIDI3NTEsIDEyNjYyLCAyNzYzLCA4OTUzLCA2NDcwMSwgMTA3MzEsIDEyOTIyLCA3MDUyLCA5MTc4MzksIDAsIDAsIDAsIAotICAgIDYzOTIwLCA3NDEyOCwgMjg1NiwgMTE5OTEwLCA0NywgNjk5MDgsIDEyNjk4NiwgNjU4NTgsIDAsIDAsIDAsIDc4OTksIDAsIAotICAgIDg0MTcsIDQzNzk4LCA3MDcyLCAwLCAwLCA0MDMzLCAxMjgxNjQsIDQzOTkyLCAwLCAwLCAyMTIsIDY0NjAwLCAxOTAzLCAKLSAgICAxMjMyMCwgMCwgMCwgMTk0NTYzLCAwLCA4OTE1LCAyNzU5LCA5NDUsIDY2ODksIDAsIDAsIDAsIDAsIDEyOTEsIDc0ODI4LCAKLSAgICAwLCAwLCA5NTMxLCAxMzE1NSwgODUwNSwgNjgzNzksIDEyMDYyLCAwLCAwLCA2NTQ4NywgOTIxODksIDQxODM3LCAxMjA2MTEsIAotICAgIDEyMDQzMiwgMCwgMCwgMCwgMTIwNDMzLCAwLCA2MzkzNSwgNzM5NjIsIDEyMDgwNiwgNjQ3ODcsIDQzNTI0LCAwLCA2NDQyNiwgCi0gICAgMCwgMTk0OTQ4LCAwLCAwLCA2NTY2NCwgNjY5MywgOTg0MywgMCwgODY3NCwgMTE5ODg3LCAxMjg4MTIsIDkyNzE1LCAwLCAKLSAgICAxMjYyNCwgMCwgMTY3MywgNDgxMSwgOTIzODMsIDU5ODYsIDkzMzgsIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIAotICAgIDExOTU5OCwgOTgyMCwgMCwgMTIxODcsIDAsIDAsIDU5ODQsIDAsIDQzMzA4LCA0MzkzLCA2NzY1MCwgMCwgMCwgMCwgMCwgCi0gICAgNzQ4MjYsIDY0NzMzLCAwLCAwLCAzNDkxLCAwLCAwLCAxMjgyMTksIDM1MTQsIDY1NDg1LCAwLCA3NDkyLCAwLCA3NDYwNSwgCi0gICAgOTI0ODMsIDc1MTQsIDk4MzM2NywgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIAotICAgIDIxOSwgMCwgMCwgNjkyLCA0MzU4OCwgNzQ0MzMsIDQxNjM1LCA0MzI0MSwgOTY4OCwgNzE0NywgOTUzNSwgMCwgOTM5OTEsIAotICAgIDAsIDY0NTMwLCAwLCA2NDYxMCwgMTE4MDQsIDAsIDcxNDksIDc0NTMsIDAsIDgwMTMsIDAsIDkyMzAxLCAwLCA4ODk1LCAKLSAgICA1MjUzLCA3MDAyNSwgNTQ1OCwgMCwgMjg2NiwgMCwgMTI3ODYwLCA2NTExMSwgNjg0MzMsIDY3MDAsIDEyMDQ4NCwgMCwgCi0gICAgMTIwNTgzLCAwLCA4OTYyLCA3Nzk2MCwgOTY0MSwgNDM2OTQsIDcwNTksIDk4MzY3NywgMCwgOTYwNCwgNzg3MDAsIDc0NDEsIAotICAgIDYzODI2LCA2Nzk3MCwgMTE4OTQxLCA2NDM5MiwgMTk0NzM1LCA5ODM2ODcsIDI4NDQsIDk4Mzk0MSwgNDE5NzQsIDAsIAotICAgIDEyMTM5LCA2Nzk3MSwgMCwgMCwgMzM1OCwgNjUyOTUsIDAsIDMxMDQsIDE5NDczNCwgMCwgMTk0NzY1LCA5ODMyMzMsIAotICAgIDUzMDgsIDAsIDI5MCwgMCwgMCwgMjg2MiwgMjc5MiwgMTk1MDg4LCA5ODMwNzAsIDAsIDMyNjgsIDY2NTkxLCAwLCA2NTUyLCAKLSAgICA0MjM2NywgNzAzNSwgMTIwNTU4LCAwLCAwLCAxODE0LCAwLCAxMDI0MCwgOTIzMzgsIDc0MzA1LCAwLCA3NDUyOCwgNjU5MDMsIAotICAgIDAsIDQyNjQ2LCA3NjA2LCAyNTkxLCAyODM3LCA0MzQxLCA3Nzk1NiwgNjQ0ODIsIDEyNzMzNywgODE2MywgNjUyNzAsIDAsIAotICAgIDc3OTMyLCAwLCA5MTEyLCA3NDQzMSwgODYzLCA5NDkwLCAxMTk4OTgsIDEyODM0OSwgNDMzMjMsIDEyMDUxMywgMTE5ODk3LCAKLSAgICA5MDcxLCAxMjczMzMsIDAsIDM2NTQsIDc3ODksIDk2MzcsIDAsIDI1MzUsIDY1NTA0LCA3NjUzLCA0MDk5MywgMTE5ODk5LCAKLSAgICA2NjU4NywgMTk1MDk4LCAwLCA5MjQwMSwgOTgzODk0LCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAwLCAKLSAgICA3NDA4OCwgMzA1NiwgMTA4MjMsIDEyODc5NywgMTI3MzI3LCA4NzYyLCAxMDUwOCwgNjk2ODksIDczNzcwLCA0Mzk2OSwgCi0gICAgNDMxOTMsIDEwNzM3LCAzNDYzLCA5ODMwNjUsIDAsIDY2NjMzLCA4Njk1LCA0ODE1LCAxMTMyMiwgNTgxMSwgMTIzNDUsIAotICAgIDcwNDksIDExOTkxMSwgNTE5NSwgMTk1MDgxLCAwLCA2NjYzOSwgMCwgMCwgMCwgMTI4MDQxLCAwLCA5MjM4NSwgMTI2MiwgMCwgCi0gICAgNjU2MSwgMTk5MzksIDAsIDAsIDEyODUzNSwgMTE5OTA2LCAwLCAwLCA5ODMwOTcsIDAsIDk4MzY2NywgMTE5OTA3LCAKLSAgICA2NDYxMiwgMTE5OTEsIDAsIDAsIDAsIDE1MDIsIDkxNzU2OCwgMCwgOTEwNywgMTI3MzE2LCA1NzAyLCAzNjU1LCA2NzY2MSwgCi0gICAgODQzMCwgMCwgNzQxMzIsIDEyMDc1OCwgMCwgNzQwNTcsIDk2MDMsIDAsIDUyNTQsIDEyMDc0MiwgNzcyNCwgNzQzODgsIAotICAgIDY4Mzc1LCAxMDc5NiwgNTEyOSwgMCwgMCwgNTkwLCA3NTc5LCA1NjE0LCA1ODkzLCA5MjI4MCwgMTE3MjAsIDkyNDk2LCAKLSAgICAxMTcyMSwgMCwgNDc5OCwgMCwgMTE5MzE2LCA2NjAzOCwgNDc5MywgNjc4NTEsIDExNzI2LCAxMjc1NDEsIDc0MjA0LCAKLSAgICA2ODYxMCwgMCwgNjg2MjYsIDg5NCwgMzAwLCA5MTc4MTMsIDEyMzA2LCA2NjIzNSwgODAwNCwgMCwgMCwgMjU2MiwgCi0gICAgMTI2NTU1LCAwLCA0MjUwMywgMCwgMTE2NTIsIDAsIDAsIDExOTI0MSwgNjQ2OTksIDEyNjU2OSwgNTA5NiwgNTA5NSwgCi0gICAgMjg2MywgMzQyNCwgOTIyNDQsIDEwNDU0LCA0MjUzMCwgNTA5NCwgMTE5NjM4LCAwLCAxMzE1NiwgMCwgMTA4MzIsIDUwOTMsIAotICAgIDAsIDY5ODUyLCAwLCA1MDkyLCAxMDcwOCwgMTEzMjcsIDAsIDUwOTEsIDE3NiwgMCwgOTE1MywgNDEwNCwgNzg1OTksIAotICAgIDc4NjAxLCAxMjE1LCA0MjcxMiwgNTc0NCwgMTIyNzIsIDk4MzIsIDExNzc3LCA3MTI5OSwgMTI3MzcxLCA0Mjg4MSwgMCwgCi0gICAgODk4MCwgMTE4OTg4LCA2Nzg2MSwgODg0NCwgNzIwOSwgMCwgMCwgNDI3OCwgMCwgMCwgMTk0Nzg5LCAwLCA5MDc0LCA0MzQ4LCAKLSAgICAwLCA2NTU1OCwgNjU5NDYsIDgxMTMsIDcwODcsIDUyNTUsIDE3ODYsIDY2MSwgMCwgMCwgMCwgNzQ0MjMsIDcxMzQ1LCA1ODYsIAotICAgIDc0NDE0LCA2NDM1OSwgMTI2NywgMTI4MjY5LCA2NTQ2OCwgMCwgNjU3MzEsIDAsIDEyNzE3OSwgMzYyMSwgMTIwNDczLCAKLSAgICA2NjY2NiwgNjQyMTEsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgMTEzODMsIDAsIDAsIDAsIDE3MTQsIAotICAgIDc0NDA2LCAxMjc4MzEsIDAsIDk4MzkyMSwgMCwgNjYyMjUsIDAsIDAsIDQyNjYwLCAxMTQzNiwgMjA3MCwgNjQsIDEyMDY5NCwgCi0gICAgMCwgMTAyOTEsIDEwMzIzLCAyODI2LCAwLCAwLCAwLCA0MjAwOCwgOTcwOCwgNDI3MTAsIDAsIDQyMDExLCA0MTk5OSwgCi0gICAgOTIxNjQsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgOTgzOTY5LCA2NTgzMywgNzc4NDgsIDAsIAotICAgIDE3NjUsIDAsIDAsIDY1NTg4LCAwLCAwLCAwLCA4NDAxLCAwLCA0MjAxNCwgMCwgNzAzMCwgMTk0NzA0LCAxMDQ3OSwgCi0gICAgNjQ5NTksIDI4NTIsIDAsIDAsIDAsIDAsIDEyODU4NiwgOTE3OTUxLCA2OTYzLCAwLCAxMjY2NywgNjQ1NDAsIDc0Nzg2LCAKLSAgICAxMDE0NywgMTI5MzUsIDEyNzU2OCwgMTI2NDgzLCAwLCAwLCAwLCA3ODc1NywgMCwgMCwgMCwgMCwgOTk5NCwgMTI0NjcsIAotICAgIDI4NjQsIDY0NzE5LCAxMTQ4LCAxMDQzNSwgMTE0NjIsIDQxNjc1LCA3MDg0LCAyNzY1LCAwLCA0MzM4MiwgMCwgMTIwNzE5LCAKLSAgICAxMjgxODgsIDkyNTE2LCA2NjY2MiwgMCwgNzgxMzMsIDkzNjQsIDE5NDY4NSwgNzQ0MTYsIDAsIDAsIDc3OTg4LCAyNjMsIAotICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDc4Mzg3LCA5ODM3NDIsIDc3OTg2LCAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIAotICAgIDcxNzcsIDcwMTA1LCAwLCAwLCAwLCA0MjYyLCAxMDI4NSwgMTA3MjIsIDQyMDIwLCAxMjY1NzUsIDY4MDYsIDY5OTIsIAotICAgIDQyMDE5LCAwLCA0MTI5MCwgOTgzNzE2LCA3NTAsIDAsIDcxMzA0LCAxMDE2MywgNjM5MTMsIDcxMzAwLCA3MDMyLCA1OTU0LCAKLSAgICA2NDkzMSwgNDMxNCwgMCwgMTk4LCA2ODQ1MywgNzMwLCAxMjAwOTQsIDYzOTA3LCA3Nzk5MywgNzg4OTEsIDEzMTY1LCAKLSAgICA3MTA3LCA3NDE3MSwgNDI4MDQsIDY3OCwgODI0MCwgNzgwMTUsIDEyODc4NCwgNDEzNzgsIDExMDA4LCA2OTM4LCA3MDAyNiwgCi0gICAgOTI2MzcsIDIwOTcsIDY2MjQ2LCAxMjA1NjAsIDAsIDAsIDAsIDM4OTIsIDY4NjMyLCA2OTY0MiwgNjcxMiwgNjYwNDUsIAotICAgIDQxNDcwLCA2NDgwNSwgMCwgMCwgMTI4MjE1LCA2NDgwMSwgMCwgNDk3LCAxMjEwMCwgNTk1MywgOTI2NjcsIDc3OTYsIAotICAgIDY5NjY5LCA0MzI1NCwgNzM4MzEsIDAsIDEwMjkzLCA1OTUyLCAxMjgxLCA0Mzc0NywgMCwgMCwgMTA2NzcsIDYwNCwgCi0gICAgNDEwOTcsIDkxODIsIDE4NTksIDAsIDkyNjAzLCAzNDI1LCAxMjc0ODgsIDAsIDI4MzYsIDAsIDAsIDk3MDcsIDAsIDQzMjAyLCAKLSAgICAwLCAwLCA2NTE5OSwgMTczOCwgOTE3ODE4LCAxMjgxNTgsIDI4MzIsIDkyNzAyLCA5NjcwLCAxMjkzNywgMCwgNjYzNzQsIAotICAgIDkxNzk1NiwgMCwgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODM3MjMsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIAotICAgIDEzMzEsIDAsIDAsIDAsIDEyNzA4LCAwLCA1MDkwLCA1MDg5LCAxMjc5NzcsIDAsIDExOTEwOSwgMCwgMTI4NjgxLCAzMTksIAotICAgIDExODg0NywgNDM0NzksIDk0NzcsIDAsIDAsIDUwODcsIDkyMzI1LCA3NjQwLCA5NiwgNTA4NiwgMCwgOTIzNzksIDAsIAotICAgIDUwODUsIDY0Mjg2LCA5MjY2NSwgMCwgNDE0MjIsIDAsIDExOTkwMSwgNDIzNTYsIDM3NzIsIDAsIDAsIDUwMTEsIDAsIDAsIAotICAgIDEyNjU4NywgMCwgMTI3MTY1LCAxMjcyNDEsIDY2NzcsIDc2MDEsIDAsIDU5MSwgNjQ0MTksIDExODk1MywgOTIyNjIsIDAsIAotICAgIDExODkyMywgNzAwODQsIDAsIDEwOTM5LCA2MTA2LCA2OTMzLCA0MTI3MSwgNjc2MCwgNzEzNDMsIDQ1MzQsIDQxMjcwLCAKLSAgICAxMjg4NzYsIDAsIDY1NTc0LCAwLCA5MjI0LCA2OTg1MywgMzY3MSwgODk3NiwgMTI2NDc0LCAwLCA0MTI3NSwgNjM3MiwgCi0gICAgMTI4MDg0LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCA0MTI3MywgOTgzNzMwLCAwLCA2NzI4LCAwLCA5NzE1LCAwLCAKLSAgICA4MjU4LCAxMTc1MywgNzQ4MjAsIDAsIDk2MDIsIDExODkxOSwgNDIsIDAsIDQzNjg4LCAwLCAwLCA3NDU4LCAwLCAwLCAKLSAgICA2NTM4NSwgMTE5OTAwLCAwLCAxMTk1OCwgMCwgOTE3ODIyLCAwLCA2MjU0LCA0MjcyMSwgNjYzMzYsIDgwNDUsIDExNTUwLCAKLSAgICAwLCAwLCA5ODM1OTcsIDQyODU4LCAxMTc4OSwgNjU4NjgsIDU1NTcsIDEwMTMzLCA5NzM3LCAxMzEwOSwgMCwgOTQ2NywgCi0gICAgNTU1OCwgODg3OCwgMTI4MTM2LCAxOTUwMzYsIDc0NTEsIDY3MDYsIDEwMTQ2LCAwLCA5MDg2LCA2NDU2NiwgMCwgNjQ1ODQsIAotICAgIDc0MzcsIDc0NTQsIDEyNTk0LCAxMjg2OTAsIDY4MzYyLCA0NTQ2LCA3NzMxLCAwLCA3MDA0OCwgNzQyNDMsIDAsIDM4MDUsIAotICAgIDAsIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgOTgzNzkwLCA3NTQ0LCA5ODMwNDUsIDQzNDY5LCAwLCAKLSAgICAwLCAxMDE1MiwgNjQ0MjIsIDY1MDkxLCAxMTkxMTMsIDc2MDIsIDY0NzI5LCAwLCA0MzUyMSwgMCwgNDIzMDIsIDQzNzExLCAKLSAgICA0MzUyMywgNDE0NDcsIDU1NTksIDAsIDg3MDQsIDIzOTcsIDU1NTYsIDAsIDAsIDAsIDkwMTEsIDk2MzAsIDkyNjMzLCAwLCAKLSAgICA5Mzk5OCwgNTUwNiwgMCwgMTkxMSwgNjY2NTIsIDAsIDk5NjEsIDg4NDUsIDY2Njk4LCAwLCAxMDc5MiwgODg4OSwgMCwgCi0gICAgMjA5OCwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgMCwgOTgzODA1LCA3NDM2NSwgNzU1MiwgMCwgMCwgCi0gICAgNjUzODQsIDcyMjMsIDQ1NTksIDAsIDE5NTYsIDQzMTM4LCA3MDI0LCA2NTcyOCwgNjQ1MDEsIDEyMTAsIDE5NTA3NywgCi0gICAgNjUxNzUsIDEwMTg0LCA0MzE0MCwgNDM2NTQsIDAsIDAsIDAsIDM4LCA4NTMzLCA2NjY2OSwgMTE5MTI0LCA5ODMyOTMsIAotICAgIDk4Mzc5MiwgMCwgNDM1NywgMCwgMTE5ODM3LCA5MTc4NjMsIDc0MjMzLCA5OTY3LCA3ODg4NCwgNDI4NjAsIDExOTgzOCwgCi0gICAgMTA5NDEsIDY1NzIxLCA2OTYyLCAwLCAwLCAxMTkzMjQsIDAsIDExMDE0LCAxMjc5NzIsIDg5NDIsIDEyMDAwLCA2OTIyNCwgCi0gICAgOTIyNjcsIDEyODUzNiwgMTE5NzQsIDkyMjEzLCA0Mjc3MiwgMTI3NTE4LCAxMTY1MCwgNTAxMywgOTI2NjMsIDEyNjU4MywgCi0gICAgNjYyMTAsIDExODkxNCwgNjYxMywgOTI0NzYsIDAsIDQzODE5LCA5ODM3NzAsIDAsIDY0NzE0LCAwLCAwLCAxMjE2MiwgCi0gICAgMTIxMjAsIDQzNDc2LCA5ODM3NjYsIDExMDI0LCA3NDgxMSwgNjYyMjgsIDEwNTYzLCAwLCAxMjcxOTYsIDQzNTIyLCAyNDYyLCAKLSAgICAwLCAxODM3LCAwLCA2Mzk3MiwgNjk1NywgMCwgMTIwNTU5LCA0OTUyLCA2NTcxOCwgNjU4MjcsIDU1MDQsIDY1NzIwLCAKLSAgICA2NTcxNCwgNjU3MTUsIDY1NzE2LCAwLCAxMjcwMDUsIDEyNzExOSwgMzEwOSwgNjM5NzUsIDc0MDI4LCAwLCA4MTA3LCAKLSAgICAxMTkyMzQsIDExMjcsIDQ1NSwgMCwgNjM5NjgsIDEyNzkyNCwgMzQ4MywgMTE5NTkzLCAxOTg5LCAwLCA2OTY3OCwgOTEwNCwgCi0gICAgMzUwMywgNjUzNzUsIDkyNTA5LCA2Njk0LCA0MjYzMywgMTg2NCwgMCwgNzQzMDYsIDQxNDQ2LCAyNTQwLCA3NzM2LCAwLCAKLSAgICA3NDA2NCwgMCwgMTA1MjEsIDAsIDQyMTczLCA5NzA1LCA3NDEyNCwgODYwNCwgNjk1NSwgMTA5MTYsIDQzNjg0LCA2MTQ5LCAKLSAgICAzODg3LCAxOTk1NiwgMTQxMSwgMjgyNCwgMCwgMTAxMDYsIDEyNzg2MiwgMTQwMywgMTI4ODM5LCAxMzQ3LCA5NjMxLCAKLSAgICA3NDQ0NCwgMCwgMCwgMCwgMCwgODY0MCwgMCwgMjU4LCAxNjU0LCAwLCAwLCAwLCA0MzMxNCwgMCwgMCwgNDA0MiwgMTE0NzgsIAotICAgIDI4NzMsIDYzOTc3LCAxMTUyMiwgNDE2NjgsIDg1NDksIDEwODYxLCAwLCA2Mzk3NiwgMCwgNjg2MjMsIDAsIDc0NTg1LCAKLSAgICA0MTM5MSwgMCwgOTE3OTAzLCAzNzYsIDY5ODcsIDkyMjEsIDAsIDAsIDg4MjMsIDEyODY5NywgMTI5NDMsIDY1MTg1LCAKLSAgICA0MTg2OSwgMTI2MTksIDAsIDEwMTU0LCA5ODMwNDMsIDc0NDM5LCAyMDM5LCAwLCA3NDQ2LCAxNjg0LCA2Mzk3OSwgMTA5NzQsIAotICAgIDQ1OCwgMTIwNjIwLCAwLCA2OTc5MSwgMTI3MTYxLCAxMTkxNiwgNjUwMTYsIDAsIDY5NjcxLCA0MjExNSwgOTgzMTMzLCAKLSAgICAxMjI4OCwgNzgwNTcsIDAsIDE0OTMsIDQyMTExLCA3NTUzLCA0MDk3LCAxMjgxOTksIDEzMDgwLCAwLCA2NTgwOCwgNjYxMCwgCi0gICAgNjAzMCwgODA1OSwgNzUwOCwgMTMxMzEsIDAsIDk4MzQzMSwgMCwgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMTI4MTkyLCAKLSAgICA0MTI3NywgNjQ2NTgsIDAsIDY0MzgwLCA2NjI1LCA3NDM1NCwgMTk5MDQsIDAsIDAsIDAsIDY1MzcxLCA3MDc4LCAwLCA4MzMsIAotICAgIDAsIDYzNjksIDAsIDEwOTc5LCA0MTk1MywgMCwgNDE0MzQsIDYwNjIsIDAsIDAsIDE5OTE2LCA2OTEzLCA5MzMsIDEzNDEsIAotICAgIDk4NDIsIDY3MjAsIDY1NzQ0LCAwLCA5ODM1OTIsIDEyODI5NSwgMCwgNzQwNSwgMTAxMDUsIDY1ODEwLCAwLCA0MTYzMiwgCi0gICAgNzQ5MywgNTUyOTAsIDAsIDQxNjIyLCAwLCAwLCAxMTk1NTYsIDc0NTg0LCA3NjMyLCA5NzE2LCAxOTk1NCwgOTgwNSwgCi0gICAgNTk5MCwgOTAwLCAwLCA2Mzk1NywgMCwgMCwgMzYxMiwgMCwgNjQzNzYsIDkzOTg3LCA1Mzg5LCA5MjU5NywgMCwgNjU5MzgsIAotICAgIDI4MzksIDk2MjEsIDU4MiwgMCwgNzQzNjgsIDM3NDksIDY5NDksIDc1NjksIDc0MDYxLCAwLCAwLCA2OTU2LCA0NDAzLCAKLSAgICAxOTk2MiwgNjU1NTksIDMyOTksIDAsIDkxNzU2NiwgMTE5MTI3LCA5MDAyLCAwLCA3NDM3MiwgNzQyMzYsIDg0NzgsIDc1OTgsIAotICAgIDU0NiwgNDI0NjksIDY1NTY5LCAxOTE4LCA5NTQyLCA0NzIsIDc3MTYsIDEwMzE5LCAxMDM4MywgNjk5NiwgMCwgNjM5NTIsIAotICAgIDg0MjUsIDM2MDIsIDgzMjgsIDExNzY0LCAxMTg4OTQsIDAsIDY5Nzk2LCA0MTE4MywgMTI5MDcsIDEwMjcxLCAxMDI4NywgCi0gICAgNjg0LCA0MzUyNSwgMCwgMjg1NCwgMTE5NTg2LCA0NTkyLCA2NTc1NSwgMCwgOTIyNTYsIDExOTYzLCA0MzYyMCwgMCwgCi0gICAgNzgyNDksIDAsIDEyODU1MSwgMTI4ODA5LCA5ODgxLCA0MzExNSwgNjU3NTcsIDM0MTUsIDExOTEzMSwgMCwgODY0OCwgMCwgCi0gICAgNjc0MSwgNDMwNDcsIDAsIDEzMTgwLCAxMjg1MTcsIDQxOCwgOTE3OTcyLCA2NDQ5NSwgMTAyOTUsIDEwMzI3LCAxMDM5MSwgCi0gICAgNDE3NTIsIDc0MzM5LCA4NjQxLCA0MTQ0OSwgMCwgNzQxMDAsIDAsIDEwOTExLCA2OTQyLCAwLCAxMDI0LCA0Mjg0OSwgCi0gICAgNDE3NTEsIDY5Nzc2LCA4OTQxLCA5ODM1NTYsIDQ1NTQsIDAsIDkwMjMsIDExNjg1LCAwLCA5OTI4LCA3ODYxNywgMCwgCi0gICAgMTE0MzcsIDQzNzQxLCA5MjE2MywgMTIwNzAwLCA2Mzk2NywgOTgzNDgzLCA0MTIwNiwgMTIwNzI0LCA5MDQ5LCA0MTE4NSwgCi0gICAgNDMxNjYsIDAsIDExNjgwLCA5MjYxOSwgMTE2ODYsIDc4NTQ0LCA2NTIyNCwgNDU2NSwgNDY1NSwgMTE5NTUzLCAwLCAKLSAgICA5MjE4MywgNjQ1MjMsIDEwMzQzLCAxMDQwNywgMCwgNjY2NzEsIDExNDY2LCAwLCAxMjgwMDMsIDQyODkwLCA3NDAxMywgCi0gICAgMTIwNTAsIDY4MjAxLCAyODYwLCAwLCAwLCAwLCA0Mjc5MiwgNTc0MywgMTA0MjQsIDEyMDY1LCA0Mjg3MiwgMCwgOTIzNDIsIAotICAgIDAsIDg4NzUsIDAsIDAsIDkxNzk5MSwgNzUzMSwgMTI4NDcsIDI0MTMsIDAsIDc4NjM1LCA5NjIsIDAsIDEyODU1LCA0MTE5NiwgCi0gICAgNDI1NjQsIDAsIDE1ODIsIDk4MzcxNSwgNTUwOCwgMCwgMCwgMCwgMTA4MDEsIDY5ODc2LCA5MjM1NCwgMCwgNzE3MywgNDk2LCAKLSAgICAxMDQzOSwgNDMxMywgNjQ2MDcsIDY5NjM4LCA3ODYwLCAwLCA5MDYsIDQyNzkzLCAyODQyLCA2NDA1LCA2NDcyMiwgMTMxMzIsIAotICAgIDc5OCwgNjQ2OTQsIDEyODAxLCA4NDA2LCAxMTUzLCA5MjE3MywgNjQ3ODgsIDAsIDgwNTQsIDkxNzQsIDEyODY1MiwgCi0gICAgOTE3OTc2LCA5OTY0LCA3NDQwOSwgNDE2MTEsIDQ2NDIsIDY2NTc0LCAxMTU1NiwgOTE3OTgyLCAwLCA3ODg1NywgNDIwODksIAotICAgIDc4ODU1LCA5MDA4LCAwLCAxMjY1OTIsIDE5NTA5NiwgNDIwNzksIDkxNzk4MSwgNzc5MjQsIDQyNTEzLCA3NzkyNywgCi0gICAgNDI4NDIsIDczOTg1LCA2NTI4NSwgMTE4OTc0LCAxMjcwMDMsIDk4MzcwMiwgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCAKLSAgICA0MjA5MywgMzkyMCwgMCwgMCwgMCwgMCwgNDU4MCwgNDE5NjcsIDk4MzczMiwgNjQzODQsIDkyMTY3LCA5Mzk4NCwgMzAyMSwgCi0gICAgNDIwMDQsIDAsIDAsIDQyMzE3LCA0MTk5OCwgMCwgNjk0NiwgMCwgMCwgMCwgMTI4MTkzLCA2NTIwNCwgMCwgNjgxMTMsIAotICAgIDQyNjkwLCA5ODgwLCA0MjAxMCwgNzQ4MjQsIDY0NTg5LCAxMDExMSwgNjQ4NzUsIDEyNzg4MCwgNjgzOTksIDQzOTk4LCAKLSAgICAxMTM2MCwgMCwgMCwgMCwgMTE4ODI2LCA0MjE0OSwgMCwgMCwgMCwgNjQ5NDEsIDc3OTE5LCAxMjA0MjEsIDEyODA3NywgMCwgCi0gICAgNTUyNDcsIDQxMTAsIDY2MDA1LCA2OTU5LCAxMDkyOSwgMTE5MTEwLCAwLCA2NjcwMywgNzc5MjEsIDg2MTcsIDQxOTgyLCAKLSAgICA2MDI1LCA2OTI0MiwgOTgzMTc2LCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIDk4MzM3NiwgMTAxMTcsIDk4MzE2OSwgCi0gICAgOTIyOTcsIDQxNjM2LCAwLCAwLCAxMjA2ODEsIDgzMDEsIDAsIDAsIDE4NywgMCwgNjU2NjksIDEyODMzOSwgNDk2MywgMCwgCi0gICAgMTI3NTE3LCAwLCA4OTY0LCA2NTY3NiwgNzc3NSwgMCwgNDE5NDgsIDAsIDAsIDAsIDQxOTQyLCA2NTQ0OSwgMzE2MCwgCi0gICAgMTAwODEsIDEzMjI2LCA0MjEyMSwgNDI0NzUsIDQyNjYzLCAxMjgyMTAsIDQxNzY2LCAxMTkxMTQsIDY1ODgyLCA3ODg0OSwgCi0gICAgNDE3NjAsIDExODksIDkwNSwgNDgwLCAxMDk4NSwgNDE3MzMsIDY3ODU5LCA5NjI5LCA2NzQyLCAxNzQ1LCA0MzYyNSwgCi0gICAgNzM4MzUsIDc4ODgsIDAsIDM5ODAsIDAsIDQyNjU2LCA0MTUwNywgODgwNiwgNzAyMywgMCwgNzQyNzksIDk0NDcsIDc4NjUxLCAKLSAgICA3ODY3LCA2OTIxOCwgNjIzNiwgOTgzMTM0LCAwLCAxMDUwNSwgMCwgMTI4NTEsIDExODk0OCwgMzQ4LCA1NDc0LCAxMjg4NDMsIAotICAgIDMxMDMsIDAsIDQxNzUzLCAxMjg1NDAsIDAsIDAsIDc4ODQ0LCA3ODg0NSwgNDE3MzksIDc4ODQzLCA0MjUxNSwgMTA5MzEsIAotICAgIDQxNzU2LCA0MzM0NywgNDI1NjAsIDUzOTEsIDQxNzQ2LCAxMTkxNDcsIDkyNTkxLCA0MTI1OSwgNTU2MSwgNjk5MzAsIAotICAgIDI2OTEsIDAsIDY1NTUzLCA3OTMzLCA1NTYyLCA2OTgwMCwgMTI4MjY1LCA0MTI2MiwgMTI4MTQ2LCA2NDQyMSwgNzQ4NDYsIAotICAgIDQxMjUxLCAwLCAwLCAzOTc5LCAwLCAwLCA3NDgxMywgOTgzNzM5LCAwLCAwLCAwLCA5MjUyNCwgNDEyNjYsIDAsIDY2NTY2LCAKLSAgICAxMjg4MzYsIDEwNTg1LCA2NTc0MSwgNDE3MzcsIDk1NzQsIDI2NjYsIDAsIDQxNzM4LCA4MzEsIDQxOSwgMTMxMjYsIAotICAgIDEwNzE2LCAwLCA0MjgyMiwgMCwgNjQzNCwgMCwgNjkzOSwgNzc2NiwgNjQzMiwgMTI4MTA2LCA2OTkzMiwgOTE2LCA3NjksIAotICAgIDQxNzQyLCAxMTk2OCwgNzQ4MDUsIDY0MzMsIDU1NjMsIDU0NywgMTk0MywgNjQzOSwgNTU2MCwgNDk5NCwgNDg3LCAKLSAgICAxMjY1MzcsIDQ0OTcsIDM3NTQsIDEyNzA1NiwgMTIwNDI0LCA5MDM5LCAwLCA0MTc3NiwgMCwgODcxNiwgMTU5NSwgNDE2MTUsIAotICAgIDAsIDAsIDc0MjYwLCAwLCA0Mjg1NCwgNDMyMTksIDEyODcwOSwgOTgzNDYwLCAxMjE4NSwgMTI4ODc5LCA3MDA3MiwgCi0gICAgNjgzNTUsIDY4MzU3LCAwLCA0Mjg1NiwgODYzNCwgMCwgOTgzMzk3LCA0MjA5LCAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgCi0gICAgNjU2MTIsIDEyNzU0MywgNjY5LCA1Njc5LCAwLCA2OTc4NiwgOTI1NDAsIDAsIDk4MzQ2NCwgNTY3OCwgMTE4MjEsIDAsIAotICAgIDY3MTEsIDQ2MCwgMCwgMCwgOTgzNDYxLCAwLCAxMjA3NDcsIDAsIDAsIDc4MDUwLCAxMTkwMjIsIDAsIDk4MzQ2MiwgMCwgCi0gICAgNzc4MiwgOTA0NCwgNDk3NCwgMTE3NjAsIDc4NDk0LCA3NTc3LCA2NTcxMSwgNDE5MTIsIDEyMTYsIDAsIDEyODA3OSwgCi0gICAgNTc5MiwgMCwgMCwgNzg1MDEsIDAsIDI5MzMsIDEyMjQ0LCAwLCA1NjgzLCA5ODMzOTIsIDAsIDc4MTE5LCAxNTQ5LCAwLCAwLCAKLSAgICAxMjAzOTgsIDU2ODIsIDYyMDYsIDg2NzAsIDEwMjU2LCA1NjgwLCA2OTkzNSwgMTAwMDEsIDEyODUxMiwgNjk3NjgsIDE0NDksIAotICAgIDEwMjQxLCA3ODI5MCwgMTI4MjI4LCAwLCAxMDU1MiwgNjQzNDIsIDQxOTIyLCAxMjg1NDgsIDg1ODQsIDY4MDMwLCA1NTY3LCAKLSAgICAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCA5ODMyNTYsIDEyODAyNiwgMCwgNjU3MDgsIAotICAgIDY1NzA5LCA1NTY2LCA2OTgwMywgNjU3MDQsIDY1NzA1LCAxMTkwNCwgNDI4NzUsIDQzMzczLCA0MjUzOSwgNTk0MiwgODQ2OCwgCi0gICAgMTIwNTYxLCAxMDM2MSwgMTA0MjUsIDY1Njk3LCA2NTY5OCwgNjU2OTksIDAsIDY2NTk4LCAwLCA2NDY2NCwgMTA2NDcsIAotICAgIDc4NzAyLCA3ODcwMywgNzg2OTAsIDQ1NywgNzg1MDIsIDY1NzAxLCAxOTM0LCA0MzAwNiwgMTE5OTAzLCA4ODAyLCA3ODcxMCwgCi0gICAgNjUxMzAsIDExNzQ3LCA3ODcwOSwgNjA4NywgNzg3MDUsIDc4NzE2LCA0MTc1NywgNzg3MTEsIDgwNDMsIDg5NTAsIDY1Njk0LCAKLSAgICA2NDQ4NSwgNDM1MzQsIDEwNDU3LCAwLCAxMTk2MSwgNzg3MjUsIDc4NzIyLCA3ODcyMywgNzg3MjAsIDc4NzIxLCAwLCAKLSAgICA2NTUxNSwgOTQ5OSwgMTAwMzUsIDEzMDY5LCA3MTMwOSwgMCwgOTg4OSwgNjgxODQsIDQyODA2LCAwLCA3MjU2LCAwLCAwLCAKLSAgICAxNjY3LCA0MjE2MSwgMCwgNDI0MjgsIDAsIDY5MzQsIDAsIDEwODAyLCA2NDg2MSwgNjU1NiwgNzgzOTAsIDAsIDgxMDEsIAotICAgIDM2MTAsIDk4MzE5OSwgNDE3NDgsIDQ5OTUsIDk1NSwgNjU5MDcsIDExOTIwOCwgNTM1MCwgNjQzMzksIDc4MzA2LCA2NDU0OSwgCi0gICAgMTA4NzUsIDEyODY2MiwgNTQ3NywgNjU2OTIsIDAsIDEyODUzMiwgMTIwMzk3LCAxMjg5NiwgMTA0NTYsIDkxNzk1NCwgMCwgCi0gICAgMzg3NCwgMCwgMCwgOTgzNjE5LCAxMjAzMzEsIDAsIDAsIDY1NjAzLCAwLCA2NTY4NywgMCwgNDEwMzgsIDc0MDA5LCAKLSAgICAxMTk1NzAsIDQyMjM5LCA4NTM2LCA3ODc0MCwgNzgzMjQsIDc4NzI2LCA3NDQzMiwgNzI0LCAwLCAxNDU1LCA3ODc0OSwgCi0gICAgNzE4MywgNjQ1ODMsIDc4NzQ3LCA2ODQ0MywgNDE3NSwgNzg3NDEsIDQzNjE0LCA2OTgwMSwgOTM5LCAwLCA0MzUyMCwgCi0gICAgNjg2MTMsIDc0NTY5LCA5MTc5NTgsIDAsIDc4NzYzLCA3ODc2NCwgNzg3NjAsIDEwNzg4LCA2MDg4LCA3ODc1OSwgNzg3NTUsIAotICAgIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCA5ODMyMTMsIDkyMjYxLCA2MzcwLCAwLCA3ODI3LCAKLSAgICA2ODQ0MSwgNjk2NSwgMCwgMCwgMTMyMDEsIDEyODIwNSwgNjk4OTYsIDAsIDc0MzgyLCA3Mzc4MSwgNzkxOCwgNzM5ODgsIDAsIAotICAgIDAsIDkxNzg4NCwgMTcyOCwgMCwgNDM3NjQsIDE3OCwgMTI5NzIsIDkyNjc5LCAwLCA5MTc4ODcsIDkyNTYzLCA5ODMzODEsIAotICAgIDAsIDc4MzI3LCAxMjA0MDUsIDY1NjkwLCAwLCAwLCAxMTkwNTQsIDAsIDkyNTIsIDkxNzg4OSwgNDY1MiwgNjgzNzEsIDAsIAotICAgIDAsIDAsIDEzMDY1LCA5OTIzLCAxMDgwNiwgMCwgMTE3NjMsIDcwMDE2LCAxMjA2ODgsIDY3MjMsIDc4MTg3LCAwLCA2OTkzLCAKLSAgICAwLCAwLCA4MzMzLCAwLCAwLCAxMTM5MCwgMCwgNzQ0NjQsIDAsIDkyMzIwLCA3NDA4MCwgOTgzMzE1LCA2OTkxMSwgMTE5MTAsIAotICAgIDkyNTU5LCA4Mjc4LCA4OTYzLCA0MDM0LCAxMjg1NjAsIDAsIDY1MzQ0LCAxMjA1MTcsIDQxNzQ3LCAwLCAwLCA4Njc3LCAwLCAKLSAgICAxMjcwNywgOTM1MCwgNjYwMzcsIDEyODE4MCwgODgzNiwgMTIzMTUsIDEyNzQ3LCA4MzAwLCA5ODM3NTAsIDAsIDc0OTEsIAotICAgIDg4NTYsIDcxMzYxLCAwLCA0MzE1MCwgMTI3NzY4LCAxMjA0MDQsIDY1Mzg5LCAxMjA0MDIsIDEyMDQwMywgMTA4MTMsIAotICAgIDI1OTIsIDEyODUzLCA0MzI2OSwgNzI2MywgMTIwMjQ0LCA2NTM2LCAxMjAyMzgsIDEyMDIzOSwgNjU1MTYsIDEyMzIxLCAKLSAgICAxMjAzOTEsIDEyMDM4OCwgNTUyODcsIDEwMDA3LCAxMjAyNDYsIDk1ODgsIDEyMDI0OCwgMTU5NiwgMTIwMzgzLCA0MTk5NCwgCi0gICAgNjU4MDEsIDEyODgwOCwgMCwgNjY1NzIsIDAsIDAsIDEwNjEzLCA2Njk3LCAxMjgwNSwgNDE5MjgsIDQwOTgxLCA3ODQwMywgCi0gICAgNzg0MDksIDUwMDYsIDY0MzI4LCAwLCA5OTMxLCAwLCA4ODI1LCA3NDU1NSwgNjU5NDAsIDQzMjU5LCAwLCA2MTA3LCAwLCAKLSAgICAxMTkxNzcsIDAsIDc4NDAxLCAxMjg2NDEsIDExNzgzLCAzMzUsIDEyMDIyNywgNjQ2ODksIDQzOCwgNDUxMCwgNTc2NSwgCi0gICAgODcyMSwgMTIwMjMzLCAxMTkyMjcsIDYwOTIsIDEyODQwLCA0MzExMiwgODg3NiwgMTIwMjMxLCA4MDk2LCAxMDI4NCwgCi0gICAgMTI4NTE1LCAwLCAwLCAxMDM4MCwgODczMywgOTgzMDcyLCAxMjgyNDAsIDQxNjAyLCAwLCA5MjMwOCwgNzQ4MzEsIAotICAgIDkxNzkwMSwgMCwgNzM3NDcsIDY1Mzk5LCAwLCA2NDU5MSwgNDI0MDUsIDAsIDEyMDgyMCwgODQzLCAxMTU0MSwgMCwgCi0gICAgOTE3ODk4LCAyMDY1LCA0MTkzNSwgNzQ0OTYsIDQxOTAyLCAwLCAwLCAyMTUsIDQxMjU4LCA3Nzg3NSwgNDMxNTksIDE5NTMsIAotICAgIDk1NzksIDQxOTM4LCAxMjU2LCAzOTEwLCA5NDA3LCA2MjQyLCAwLCA5ODMxMDAsIDQxMjU3LCA0MTkwMCwgODY3NSwgCi0gICAgMTA3MDAsIDg4MDUsIDE3NDIsIDAsIDkzMzMsIDgyMDIsIDEyNzc1MCwgMCwgOTgzMTk3LCAwLCAwLCA3Mzg4MiwgNDk5LCAKLSAgICA5ODMwNDksIDQzNDY3LCAwLCA0MzgxOCwgMCwgMTcxMiwgNTkzMiwgNzc4NDUsIDQxNzYyLCA5ODMxMDQsIDAsIDExOTY3LCAKLSAgICAxNzc1LCAwLCAwLCAwLCAwLCAxMjgwMDksIDk0NTgsIDAsIDY0NzAsIDkxODAsIDEyMDM4MCwgNDMxNzYsIDAsIDAsIAotICAgIDQyNzgyLCAwLCAwLCAwLCAxMjgzMDksIDc0Nzc3LCAxMjA2NjksIDk0MTQsIDEyMDM4MiwgNzM3ODIsIDczOTY5LCA1NjUsIAotICAgIDQyNDg0LCA1Nzk0LCAyMDEsIDI2NjIsIDQyMjkyLCAwLCA4MjU0LCAwLCAxMDk3NSwgMCwgMTIwNjI1LCA3NDc2MywgMTAyMiwgCi0gICAgNDEwOCwgMzg4MCwgNzQyNDcsIDAsIDAsIDkyMjYzLCA5MTc5ODAsIDc1MDcsIDAsIDQzMTQ5LCAwLCA2NTAzMSwgNzk2MSwgCi0gICAgMTYzNiwgMCwgNjUwMjksIDY1MDI0LCAwLCAxMjQ3MywgNjUzNCwgMCwgOTksIDk4LCA5NywgMTIwNTcxLCA2NzU4NCwgCi0gICAgNDA0OSwgNzQxNjMsIDEyNzA2NSwgNzA5MCwgMCwgNzg5MiwgOTE3OTY5LCAxMDc3NywgOTE3ODAzLCA2NTMxMCwgNjU1NjIsIAotICAgIDY2NTk5LCA2NjcyMiwgMCwgODAzOSwgMzM2MywgNjY1OTQsIDQzNDM0LCAwLCAwLCAxMjU5NiwgNjY1OTUsIDQyMjU4LCAKLSAgICA0MjU3MCwgNTU5MywgMTE5MTQ4LCAxMjA3MTEsIDkyNDI1LCAxMDEwMCwgNjA2MSwgNjQ4NTQsIDExOSwgMTE4LCAxMTcsIAotICAgIDExNiwgMTI5OTgsIDEyMiwgMTIxLCAxMjAsIDExMSwgMTEwLCAxMDksIDEwOCwgMTE1LCAxMTQsIDExMywgMTEyLCAxMDMsIAotICAgIDEwMiwgMTAxLCAxMDAsIDEwNywgMTA2LCAxMDUsIDEwNCwgNjQzNiwgNzM5NzQsIDUzNCwgNDEyMTIsIDc3OTMxLCAxNTM2LCAKLSAgICA2NDA5MywgNzM5NzAsIDc3OTMwLCAxMjcxNTcsIDAsIDYwMjAsIDEyNzE2LCAxMjcxMTIsIDEyNzQ0LCA0NzUsIDEyMDM5NCwgCi0gICAgMTMyNjYsIDEyNzgxMywgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDk4MzMwNywgODEzNCwgCi0gICAgMTI4MDI4LCAyOTEzLCA3Mzg3MCwgMTI3MTEzLCAxODY2LCA5ODMyMjksIDE5NTA5NSwgMCwgODkyMywgMTY0NSwgMTIwNTksIAotICAgIDY2NTg1LCA3MTI5NywgMzE5NiwgMCwgMCwgNTkzNSwgMTI1MCwgMTI3MDY2LCA4MTc0LCA5Nzg3LCA2NzMzLCA5ODU5LCAKLSAgICA3OTE2LCA5ODYxLCA5ODYwLCA1MjU4LCAxODgyLCAxODkyLCA2NzMxLCAxMDg4MiwgNDA1LCAxMTQ1NCwgNzM5MTEsIDAsIAotICAgIDEyODc4MSwgNDExNjksIDg5MzksIDQxMjQ1LCAwLCA0MTE3MCwgMTQ1NCwgMTEzNjksIDY0NzcsIDEyMTU3LCAwLCAwLCAwLCAKLSAgICA0MTE3MiwgNzg1NSwgMCwgMCwgMTA0ODAsIDAsIDAsIDc3OTM2LCA4MjY0LCAxMjYxMCwgOTgzMzA4LCA2NDUsIDEyNjYxNiwgCisgICAgNzgzMTksIDYzOTU5LCAwLCA5OTQyLCAxMzIzMSwgOTgzNTc4LCA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgNzgxNDIsIAorICAgIDY1MTg3LCAxNjI2LCA2Mzk4MywgMTAxMTAsIDY0NzcyLCA0MjAyNCwgNjQyMCwgNDIwMjgsIDkyMjk0LCAxMDUwOSwgMjc5NSwgCisgICAgNDkxMCwgMTI5MTkzLCA2OTIzMSwgNjQ3NTMsIDYyNzUsIDkzOTU3LCAxMTg4MzAsIDYzOTc4LCAxMTA0NCwgMzIyOSwgCisgICAgNjQyMywgNDI3NzQsIDAsIDAsIDY4NTI2LCAxMjgyMywgMjMzMSwgMTI3Nzg4LCA3MDg1LCA2MTM3LCAwLCA3NTI0LCAKKyAgICAxMjA3MjEsIDkxNzgwOSwgODM0NiwgMTI4NDM4LCA4MzM4LCAxMjgzMTUsIDY1MDQzLCA3Nzk4MiwgODIyLCA3MDQxMiwgCisgICAgOTkwMywgNjQ3MjEsIDQyNzIyLCA2OTg3NywgODI5NTYsIDc4NjU1LCA2Njg4MiwgODI5NTksIDc4NDg0LCA0MTI2NSwgCisgICAgNTMxMSwgMTc5NSwgOTY1LCAxMTg3OTEsIDEwNTg3LCA0Mzk2MiwgMTEyNzgsIDc4NjMyLCA3NDExMSwgMTI4MDk1LCAKKyAgICAxMjk0NiwgMTIxMDc2LCA3MTkyMSwgMTIwMzQ5LCA2Mjk0LCAzMTQ0LCAxMTM3MDYsIDEyNzk2NywgNjUwMTksIDc0MDc4LCAKKyAgICA3Mzk5MCwgNjUxMTEsIDk4Mzk2MCwgNzQ4LCA0MTA2NywgMjMzMCwgNTM1LCAzMTQ4LCAxMjM3NSwgNzg3OTksIDE5NDYyOSwgCisgICAgMTA1NTYsIDI0NzUsIDEyMzg4LCA0ODg5LCA4OTY4LCA2Nzg2MywgMzU5MywgNzQwNzYsIDgyOTQ5LCAyMzQyLCA4Mjk1MSwgCisgICAgODI5NDQsIDY1MjA2LCA0ODk0LCA4Mjk0NywgNDg5MCwgMTIxMDU5LCA2NDQzMywgNTgxLCA0ODkzLCA0MjkyOSwgNjU3MSwgCisgICAgNjU1NDUsIDQ4ODgsIDQxNTcsIDc4MDQ4LCA3ODA0OSwgNjQ2NTEsIDc4MDQ3LCAwLCAxMDExOSwgNjQxNSwgNDI4OTMsIDAsIAorICAgIDY5NzAyLCA5ODM5MzcsIDAsIDExMzc1LCA2NDc0NiwgMjMzMiwgNzgwNjMsIDQxMiwgNzgwNjEsIDQyOTI4LCA0Mjg4MCwgCisgICAgNDM1ODcsIDEyMTA5OCwgMCwgMCwgNzA0NjEsIDY1MTk3LCA3ODA2NiwgMTIyMDMsIDc4MDY0LCA3ODA2NSwgODkxMywgCisgICAgNjU4NTQsIDQ4NzUsIDY1ODExLCA3NTAyNCwgMTIwMzg5LCA3MTg1NCwgOTM0NCwgODgyNiwgOTI5MTYsIDEyMDM5NSwgCisgICAgMTMxMDQsIDY3ODI4LCAxMTk5NywgMTIwMzkzLCA3ODA3NSwgMCwgMzEzNCwgODMwOTYsIDY1Njk2LCA3MjQzMiwgMTIxNDEyLCAKKyAgICA2NjIxNywgMTIxMTkwLCA4MzM0LCA5Mjc1NSwgODMyMDcsIDM0NDksIDEyMTI2NCwgMTMxMDAsIDc4NDE0LCA3ODQxMywgCisgICAgODMyMTYsIDY2NDA1LCA3MDQzMCwgODMwODksIDgzMjAzLCAxMjcyNTAsIDE5MDgsIDEyMDE2NywgNDMyOCwgMTA3MzQsIAorICAgIDEyNzAxNCwgODMxOTgsIDY3ODI1LCA3ODA0LCA3ODI3MiwgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgCisgICAgODM1MTAsIDc4MDU0LCA0OTE3LCA3NDUxNiwgNzQyMDgsIDY0Mjg1LCA0OTEyLCA1NDY0LCAxMjc4MzYsIDgzMTAwLCAyMzYxLCAKKyAgICA3OTcxLCA3ODA3MiwgNzgwNzMsIDU1MjQzLCA3ODA3MSwgOTgzNTc1LCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgCisgICAgNDA5NzcsIDEwOTYwLCA0MDk2MiwgODMwNSwgMTI1NzMsIDcxMTMxLCA0MDk4MCwgOTgzOTY0LCAxMzIwMiwgMTI3ODE2LCAKKyAgICAxMjU4MiwgNzgyODIsIDk4MzA0OCwgNjk4NTYsIDQyNDM4LCA1NTIyMSwgNjI4OCwgNzgyODAsIDEyNzk0NiwgNTY1MywgCisgICAgNDI0MDAsIDEwODkxLCA3Njk4LCA1NjU4LCA3MDQwMSwgNzAwMzksIDAsIDcwNDYwLCA0OTEzLCA3MTA2MCwgMTI4NTYyLCAKKyAgICA3MTMzMywgNDIzMjYsIDEyMTExOSwgMTI3MjgsIDkyNjg1LCA0MjQ3OCwgMjMyNywgMCwgMTI1NjMsIDQyMjg3LCAxMjcwNSwgCisgICAgMTIwODI5LCA4MzA4MSwgMTI1ODgsIDg4MjEsIDYxNTMsIDI4NjcsIDgzMDg1LCA2NjMxMiwgNjk4LCA4MzA3NiwgODMwODcsIAorICAgIDEwMzU2LCA3MDAxNywgMTI4NTcwLCA2NTEsIDEyNjQxLCA4MzEzOCwgMTI1MDk4LCAxMjA3MTAsIDEyOTA2NCwgNDE1NTIsIAorICAgIDY1MTE1LCA3ODQ2NSwgNzg0NjcsIDc4NDYzLCA3NDkwNSwgMTI3NTE2LCA3ODQ2MSwgOTI5NjAsIDY2OTI3LCA2NDk0NSwgCisgICAgNDcxNiwgNDMyNzcsIDEyMDkzMiwgNzg0NzQsIDEyMzQwLCAxMjA1NjgsIDEyMDkyOCwgMTk0NzAwLCA1NTI2NCwgNDEyMTEsIAorICAgIDEyMDY3NiwgODcwMywgNTQ2MiwgODMxOTUsIDgzMTg1LCAxMDEwMSwgMCwgNzAwNDksIDg0NzksIDQxNTEsIDQxOTMzLCAKKyAgICA4MzE4OSwgMCwgNjYyNTQsIDEyMDgyMSwgNjg0OTcsIDAsIDEyODY1NCwgMTEzNzk5LCA4MzE1OSwgNzQwNTAsIDQyNjUxLCAKKyAgICAxMjczNzEsIDAsIDAsIDgzMjI1LCA4MzIxOCwgMTIyNzgsIDc1MDExLCAxMjg0MDUsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAKKyAgICAxMjg5OSwgODMxNTUsIDAsIDI2OTksIDEyOTMwNCwgNzM4NDUsIDI5ODUsIDgzMTQ5LCA2ODY0OCwgODMxNDYsIDEyMTkyLCAKKyAgICAxMTkzMTQsIDAsIDY2NDg5LCA5ODI3LCAxMTkzMTAsIDg2MDksIDExOTMwOCwgNjc0MjYsIDExOTMwNiwgMTE0ODEsIAorICAgIDQxMjEwLCAxMTkzMDUsIDAsIDM1LCA3MDgzOCwgNjc0MzEsIDY2Njk0LCA2ODQ3OSwgNzg0NzcsIDY3NDI4LCA0MzU5NiwgCisgICAgNjA5MCwgNjQyNTcsIDc4MTIsIDEwNTM0LCAwLCA3ODQ4NSwgNzM4NDgsIDY3OTc1LCA0MjcyLCA3ODMyMSwgNDA5NjcsIAorICAgIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCA3ODQ4NywgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgMjI5MiwgCisgICAgNjgyMTYsIDE5NDg3MSwgMTIxMzkwLCA1MjQ0LCA0MTg5LCA5MjY5NywgNjc1OTYsIDEyNzUwNCwgNDE4OCwgMTg3OSwgCisgICAgNzA0NjMsIDk2OCwgMCwgNDM3NDMsIDAsIDg4NzMsIDIyNzksIDEyNzEwMCwgOTE3ODI3LCA2NTU1NSwgMTI1NzQsIDAsIAorICAgIDkyNzQ5LCA5Mjc1MywgNzQ0OTAsIDEyNzA5OSwgMTE4MzgsIDc1MDAxLCAwLCAwLCA0MjY4MiwgMTI1NzgsIDEyNzIwLCAwLCAKKyAgICA0MTIyNywgMCwgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDY5OTUwLCA5MTc5NTAsIDcyNTEsIDAsIDEyMDM4MiwgMTE4ODUwLCAKKyAgICAxMTkxNDEsIDEyODQ2MSwgNjYwMTUsIDY3MzMyLCA5NTksIDg4ODUsIDEyNTY0LCA2NjQ1NywgNzg4MDgsIDk0NjksIDk2MzIsIAorICAgIDkyMjMxLCA3NDc2MSwgNjQzMjMsIDEyNzMzNSwgMTI4ODQyLCAwLCAxMTEzMiwgMzEwLCAxMjA5MjQsIDQxMjgxLCAxMDk3NiwgCisgICAgMCwgNzEzMjUsIDEyODM2NCwgNzQyNjYsIDEwMDU0LCA2NDk3LCA4NTc0LCA5MTc4MjMsIDkwMTIsIDE5OTU4LCA3NDQyMCwgCisgICAgNjUwODksIDEzMjE1LCAxMjczMCwgNjUxNjMsIDY0MjYwLCAzNzQsIDQzMTk1LCA4MTYsIDkyNzgzLCAwLCA4MzE5MSwgCisgICAgNDE5MzQsIDc0NjUsIDc0NjE1LCA5Mjc1MiwgMTI3ODk1LCA0NzE1LCA2MTAxLCA3MTA4OSwgNDE5MzYsIDgyOTY3LCA0ODc5LCAKKyAgICA0Mzk2NSwgNjU0NDYsIDAsIDMwNywgMTI3MTQ3LCA5NTg1LCA1Mzc0LCAxMjc5NjIsIDEyODA1OSwgMCwgMTI5MTg5LCAKKyAgICAxMjY2MTgsIDEyMDM5MCwgNzQ5NTMsIDY1NTY3LCAxMjA2MTQsIDE5MjksIDEyMDk4NCwgMTIxNDIsIDE5NDY5NiwgMTIyMzYsIAorICAgIDQxNDE5LCAxOTQ2MTgsIDEyMDYxMCwgMTI5ODIsIDc1MDAzLCA1Mzc4LCA3NTAwNCwgMTIwOTU3LCA0MTQyMSwgNzUwMDUsIAorICAgIDQ0NjIsIDAsIDEyNjU5OSwgMTI4MDkyLCA4MjEsIDAsIDI0OTgsIDU4MDAsIDEyMDE1NywgNjc3NTgsIDE3NjAsIDI0MjEsIAorICAgIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgNzg0MDAsIDc1NywgMTE4NSwgMCwgNzg3NzAsIDQzNTk3LCAxMDYyOCwgNzQ4MDgsIAorICAgIDY4ODQ5LCA3OTk5LCA0Mzk3MSwgMTEyMTcsIDEyMTIyNCwgMTA2MzQsIDEwOTQyLCA3NzEzLCAyMzQ4LCAwLCA2NDM3NCwgCisgICAgNDM4MCwgMTI4Mjg0LCA4MzA2MSwgOTk4MiwgNjQzMjQsIDQxMjQwLCA4NjIsIDY0NDY4LCA3ODQ2MiwgMTgxMCwgMzY3MywgCisgICAgNTEzNywgMTk0NjE3LCAwLCA3Mjc3LCA2NTYyMiwgNjUwNjksIDc1NjYsIDY0Njg4LCA2NzE0MywgMTk0NTkyLCA3NDk1NywgCisgICAgNDM5MTIsIDEyODM4NSwgNDc0OCwgOTIyMjgsIDEyOTE4NSwgMTk0NjAxLCA0MjI2MCwgNTg3MSwgMTE5MDc1LCAxMjEyNzgsIAorICAgIDc0NTc2LCA0NDAxOSwgMTk0NzIwLCAxMjgxODksIDM5NjcsIDcxMDk4LCAxMzEzNywgODc3NSwgMTI3OTQ1LCAwLCAyOTYzLCAKKyAgICA5MTc3ODUsIDg0MTAsIDQ0NTQsIDcyMywgODMwODQsIDk2NiwgNDQ0OSwgOTIzMzAsIDkyMjM4LCA3NTAyMiwgNzgxOSwgCisgICAgMjMyMCwgMTk0NTg5LCAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCA1NTI3NiwgODMwNTcsIDgwNDcsIDAsIAorICAgIDc4ODI3LCAxMjYzNCwgNDE1NDIsIDc4NzgwLCA3NDY2LCA2NzA1LCAxMjE3NCwgNDI2MTAsIDEyNDkzNCwgNzQ0NTIsIAorICAgIDk4Mzc2MywgMTU4NCwgNjY2NDUsIDYwNDUsIDY3MjksIDEyMDY0MCwgNjUyMTgsIDExNTU5LCAxOTQ5ODMsIDc4MDYyLCAKKyAgICA3NTM3LCAxMjQ5OTEsIDExMzcwLCAxMjUwOTMsIDEwMzMwLCA3ODc5OCwgMTAzOTQsIDkyMjM2LCA3NDE5NCwgMCwgCisgICAgMTI3OTI5LCA5NzgwLCAwLCAxMTExNywgNzQ5OTMsIDc3OTUwLCA2NzA5MSwgNzA3NCwgOTI2NDgsIDE5NDU3OSwgMTk0NTgyLCAKKyAgICAxMTQxNCwgNjg3ODEsIDI1MzEsIDEzMDM0LCAxMjkxNTksIDAsIDQyMTEsIDEyNTksIDc1MTcsIDcwODY2LCA3MDE5OCwgCisgICAgODMxMjIsIDQwOTk2LCAxMzAzNywgNzA5MiwgNjQxLCA1MjE5LCA4MzEyNSwgMTk0NTY2LCAxMTA2NCwgNDExMjksIAorICAgIDEyMTI1MywgNDI4NTAsIDEzMDM1LCA5MDc1LCA5MjM4NywgNTQ2NiwgNzQyOTMsIDc0NTMwLCA2NDA5OCwgNjU3OTMsIAorICAgIDQ1MzUsIDEyMTI2NywgNDI3MSwgNzg0MTcsIDEyNzA1OSwgNjc2OSwgNDE0MTAsIDEyNzI1NywgNjQyNjIsIDY3NjcsIAorICAgIDQxNDA3LCA2NjI3MywgOTE3ODE2LCA2NzU1LCAxMTg4NjQsIDkwNDYsIDEyMDg4NiwgMTI2NjA4LCA3MDgzMCwgMCwgCisgICAgODMyMzIsIDAsIDY3Njc1LCA5ODM2OTQsIDgzMjM0LCAxMjEyNTQsIDY0MzM4LCAyNTYzLCAxMzAzMywgMjQ3LCA4MzIyOSwgCisgICAgMCwgMTIzMzgsIDQ2NTEsIDY3MzU1LCAxMTI3MCwgMCwgNzQ2MzAsIDExOTMzLCA3MDEwNywgMCwgNDE5MDMsIDQzNDQ3LCAKKyAgICAxMTAwMSwgNzM4MjcsIDQyMjU1LCA4MzI0MywgODMyMzgsIDY5ODIxLCA0MTkwNSwgNjczNTAsIDAsIDEwNzc1LCA5NzkzLCAKKyAgICA1MDA5LCAxMjg3NzQsIDQyMjY5LCA2NDU4NywgOTgzMDYzLCA0MjUzNSwgNjk4MTIsIDY0NTI5LCA0MTQwOCwgNDI4NTMsIAorICAgIDM4NzcsIDEyMDc5NSwgNDI2NzQsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDY3MzQyLCAxMDIzNiwgNjU5MTgsIDQzNzgyLCAKKyAgICA3ODc2OSwgNzgwNjAsIDY0NTA2LCA2OTY1MiwgMTE4OTIxLCA0NzQ3LCA4MzI1MSwgNjk4NDQsIDQzMjAwLCA1ODMyLCAKKyAgICA3MTIwOCwgODMyNTAsIDUxNDEsIDQyNjAwLCA3MTg2NiwgNDMyMDMsIDEyNzIwOCwgMTIwMTI5LCA0MzI4NiwgMCwgCisgICAgMTI4MjExLCA0Mzc3OCwgNzY1NywgNDEzMDUsIDcxMTMyLCA0Mzc4MSwgMTEzMDMsIDY1NTQ3LCAxMjg2MDksIDcwMzEsIAorICAgIDg1OSwgMTI4NDg4LCA4MzI2MiwgODMyMzcsIDYwNTksIDEyNjk4NSwgNTUyMzUsIDE5NDgxNywgODUzNSwgMTI4NjM4LCAKKyAgICA2NTE5NiwgMTI1MDg0LCA2NjAzMiwgMTE0ODgsIDEyMDQ4MSwgMTIwNzg2LCA0MjIzMywgNjQxNDAsIDk5NDYsIDc2NjcsIAorICAgIDE5NDc5MiwgMTE4MjIsIDEyODU5MSwgMTExMzUsIDk4MzYwMCwgMCwgMTc4OCwgMTU3OSwgMTIwNDgyLCA3MTI5OCwgMCwgCisgICAgOTgzNDYxLCAwLCA5MDI4LCAxMTk1NzEsIDY5MjM0LCA3MTA2MSwgOTI1NDUsIDEyODUsIDY0ODgyLCA0MTI0MiwgNzAwODYsIAorICAgIDgzMTExLCAxMjY0MCwgODMxMTIsIDc0MDEsIDAsIDEyNjI1LCA2ODE5OCwgMCwgNzAwODIsIDM5NDAsIDQxNTk3LCA0Mzc1NCwgCisgICAgMzM5NiwgMTI2NDIsIDg2NjUsIDk4MzYxMCwgOTgzNjA5LCAxMjYzMCwgMTY1MywgOTE3ODE1LCAxMDE1MywgMCwgNjE2NiwgCisgICAgNzA4MjUsIDExODk4OSwgMTI5NDA5LCA4ODE1LCA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIDExMTgwLCAKKyAgICAxMTkzMTgsIDIxNDIsIDY4NDU0LCA0MjQ4NSwgOTQwMTIsIDc4NzgsIDgyMTEsIDQyMjkzLCA2NDM3NywgMTIwNDc4LCAKKyAgICA5MjY0MywgMTIxMTE4LCAxOTQ2NzMsIDEyMDMyLCAwLCA5NzI1LCA5ODM0OTEsIDc4NDMxLCA1MjYzLCAxMjgxOCwgNzg0MzAsIAorICAgIDQxOTM5LCAxMDAyMiwgNjUzODcsIDc4NDE5LCA0Mjc3NywgMTAxMzksIDk4MCwgNDM2OTgsIDY1Mzg2LCAyMjA4LCA2ODg0OCwgCisgICAgNDM3MDEsIDQzMTk4LCA3MTg0LCA5MjU0MiwgMTI4NDIzLCAxMjg4NzUsIDEwMDg1LCA3NDk3OSwgMCwgNjczOTQsIDY2MzQsIAorICAgIDkyMzczLCAxMjUwODUsIDgzNDEzLCA4MDcyLCAxMTkzMjEsIDQzNzAwLCAwLCA4ODcyLCA3NzgzLCA5MTc5OTEsIDEyMzk4LCAKKyAgICA4MjM3LCAwLCAwLCAxMjM5NSwgMCwgMTI2OTc3LCA3NDg5MSwgOTkxNCwgMjIxNywgOTIzMjMsIDczOTc1LCA2MzY3LCAKKyAgICA2MzUxLCA2NjY4OCwgOTI3NDAsIDY4NzY2LCAwLCA2NDczNSwgNDEyNDMsIDkyMTk5LCA3ODA4LCAxODI5LCAxMjY1NDEsIAorICAgIDQxOTM3LCA0MzU4LCA0MzI3MiwgNjM1MywgMCwgMCwgMTIwNDIyLCA5MzA0NSwgMTcxMCwgMTIwMTQwLCAwLCA2NTYwNywgCisgICAgNjcyMzQsIDQ5LCA2NjI3LCAwLCA2MjU4LCAxMDY4MywgNzg2NzIsIDk3NDEsIDc4MzI5LCA1NjQ5LCA3ODQ0MSwgNDM0NDMsIAorICAgIDY0NDE4LCAxNjQzLCA2NTIxMywgODQwNSwgMzQ3MCwgNjcyNDQsIDEzMjEzLCA0MjQ1MiwgNzgzMzEsIDc4MDEzLCA3ODQ0NSwgCisgICAgMTI1MTI0LCAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgNDExMzIsIDY1Njc1LCAxMDgwLCAKKyAgICA3MDgyNCwgOTg4NiwgNTUyMjUsIDExMDEsIDY4NDA0LCAxMjMwOSwgNTUyMjcsIDcxMDgyLCAxMjYzMiwgMTA4NiwgMTg2OSwgCisgICAgNzg2ODUsIDc2ODAsIDAsIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAxMDkxLCAxMjYzOCwgNzk3NywgCisgICAgNDUwMSwgNDEwOTksIDAsIDY2MzA5LCAxMjAxNDEsIDkyNzU4LCAxNDk0LCAxMTM3MTYsIDEyNjYxMywgMCwgMTE2OTMsIAorICAgIDcxMjU1LCAxMDQ5NCwgOTI2NTUsIDY1ODcyLCAxMjM2MywgMTEzODYsIDExMzcyNywgMCwgMCwgNzg3NzEsIDY0NTgyLCAwLCAKKyAgICA3Mzc5NCwgNjczOTUsIDgwMjIsIDEyMDk4OSwgMTIwNDYyLCA3NDEwNiwgMTI0MTMsIDY2ODgzLCA5MTc5OTQsIDkzMDM1LCAKKyAgICA3NTAwNywgNTU3MCwgMTg4MSwgNzIxMCwgMTIwNDI1LCAxMDEyLCA0Mzc1MiwgMCwgMTIwNzA5LCA3MjA4LCA2NjQ0MiwgCisgICAgNTU2OSwgMTk1MDA3LCA0MjMzOSwgOTI5OTcsIDYwNjMsIDY3ODg4LCA2OTk4MSwgMTE5NTk0LCA2MDUzLCA2NTYwMiwgMCwgCisgICAgOTIyMDEsIDY0NzI3LCA5MTYwLCA3MDMwMSwgMCwgOTI5MDUsIDkyMTgwLCAxMDUwMywgNzAzODcsIDM0MjMsIDM4NzAsIAorICAgIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDkyMjA0LCA5ODMxMTYsIDAsIAorICAgIDc0OTYxLCA3ODMzMywgMTIwMTE3LCAxMjAxMTgsIDEyMDA5OSwgOTIzODUsIDY1MDg3LCA1NTcxLCAzNjc0LCA5NzQwLCAKKyAgICA5MTIxLCA1NTY4LCA3MTQ2NCwgMTIwMTA4LCA0MjA4NSwgMTAxMDcsIDQyMTU5LCA0Mjg3MCwgMTEzNzAwLCA1ODksIDcwNTAsIAorICAgIDk4MzgwMCwgNDMyODEsIDEwMjMzLCA0MTI2MywgNjYyNTEsIDY1NzI5LCA2NjI1MywgMTI2NDk3LCA3NDA5OSwgNDI2NDUsIAorICAgIDkyMzMxLCAxMjEzNTgsIDg1ODMsIDEyMTEyMywgNTg0NywgNjkyOCwgMTI4MDc0LCAwLCAwLCAwLCAwLCA2NjU5MiwgCisgICAgMTIyMDQsIDkxNzk2MiwgMTk5NjYsIDc3ODU2LCA0MjU2MSwgMTIwNjI2LCAxMjkxNzAsIDY2ODU0LCA4MTIwLCA3MDMxMSwgCisgICAgMTk0NTg1LCAwLCA3MDMwOCwgNDEwNjMsIDEyMDQxNywgMTA2NjQsIDAsIDgzNjksIDAsIDQ1NTEsIDE5NDk2NCwgMzM2OSwgCisgICAgNzQ5NzEsIDEyMTA5NCwgOTY3MywgNjYzMzQsIDY1NTgwLCAxMDQ3OCwgMTE4OTYwLCAxMjUxNywgNTU3LCA5NDU3LCAKKyAgICAxMjAzNCwgNjg0OTYsIDYzNTUsIDEyNTE5LCA0MTAwNCwgMCwgNzQ5MzcsIDc0MDk0LCA5MTc4ODgsIDEyNTA2MCwgNzc5NzAsIAorICAgIDkyMTcxLCAxMjcyMTksIDEyODE3NSwgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgNjkyMywgCisgICAgOTIyODEsIDEwNDQxLCA3MzgzNiwgMCwgNDM5OTAsIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIDE2MTgsIAorICAgIDAsIDEyMDQ3NCwgOTY0NSwgMTA0MzAsIDEyNjYzNiwgNTg1MywgMTMwNjMsIDEwMzYzLCA5ODM4OTgsIDEyOTU2LCAKKyAgICAxMTM2NjYsIDEyMDcyOSwgMTEzMTQsIDkxNzU4MiwgMTIwNjAsIDEyODY0OCwgNzgzOTIsIDEyODI2LCA2MzI5LCAwLCAKKyAgICAxMDUxNCwgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDc4Mzk4LCA0MzU3MCwgMjY5NywgNDM0MjAsIAorICAgIDc4Mzk2LCA2ODI0NywgMjY5NSwgNDIxNzEsIDcwODA5LCA2ODMzNCwgMCwgNjc2MTcsIDExODk3MSwgMCwgMjY5MywgCisgICAgMTIxMjUsIDEyNzY2LCAxMjA0MDksIDExNjQsIDExMzcyOSwgNzAyODMsIDQxOTE4LCA3Nzg0OSwgNjcxNTAsIDg2ODcsIAorICAgIDY2MDA5LCAxMjE3OCwgNzA1MywgOTI1NDAsIDc0NjksIDAsIDUyNDgsIDEyMjE4LCA2OTk4OCwgNjQyNywgNDI4ODQsIAorICAgIDQxMTIzLCAxMTE3NiwgMCwgNDI4NzMsIDQxMTI2LCA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgOTgzOTMyLCA5ODczLCAKKyAgICAwLCA0Mjg3NywgNzk5NCwgNjQ3NjIsIDIwNTMsIDQyODQzLCA2NTkxLCA5MzQwLCAxMjg4NDEsIDE1ODksIDEyODY5MSwgCisgICAgMjk2LCA2NzcxMiwgNzg4NTIsIDEyMTQwOSwgNjc4NDEsIDc0MzcwLCAxMjg1MDQsIDg5MjIsIDEyODA2OCwgNDM4MjksIAorICAgIDEyNzAwLCA3NDgzNiwgMCwgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAxMzI2MiwgNjU1OTAsIDUyOTksIAorICAgIDc4ODM3LCAxMTQ3MywgNTQ0OSwgMTI1MiwgMTI3MzI4LCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgNTI5NSwgCisgICAgOTE3NTY5LCA2ODMyMCwgMTIyMywgMTY0MiwgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIDQxNDEzLCAKKyAgICAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIDQxNDI1LCA3NDU5OCwgNzg0MTIsIDc0NDUwLCA5NzI4LCAzODQ2LCA4MDcwLCAKKyAgICA2MTUwLCA2NjM2LCA0MzcwLCAxMjg2MTksIDEyOTE1OCwgNzQxNzgsIDc0NTg3LCA3NDExNywgMTk1MDk0LCAwLCAxMTM3NDgsIAorICAgIDQ5ODYsIDEyMTg5LCAxMjc1MTIsIDY3NjQ4LCAxMjA0OTksIDk0MDAxLCA0MjU3LCAxMjEwNCwgNzExNzYsIDYyMjAsIAorICAgIDkwMDQsIDY1NTYxLCA5ODM4ODEsIDc3OTQ5LCAwLCA2ODEzNSwgOTE3NTc2LCA3Nzk0NiwgODM0NTMsIDY5Njc5LCA2OTY4NCwgCisgICAgOTg5MCwgNzg1NjEsIDEyOTcxLCA3ODQ1MywgOTI1NTYsIDczODk4LCAxMTk3OSwgNzAwNTEsIDcxODk3LCA4MzQ1MSwgMCwgCisgICAgOTYzNSwgMTI2MDAsIDg4NzEsIDY3MzY2LCA2ODQ5MSwgMCwgNjQ2OSwgNzQyMjcsIDExODkwMCwgNjUzMDQsIDQ2NzksIAorICAgIDEwMjMwLCA2NDMwMCwgNjQ4NjcsIDM0MjcsIDQyNDAsIDY3Mzc2LCA2NzM3NSwgNjczNzQsIDY3MzczLCA0MjkxNiwgCisgICAgMTI5MTU1LCAxMjgyNzksIDY3Mzc3LCA3MjgyLCA3ODcyOCwgNjU3MzMsIDQ0NDUsIDY3MzcyLCA2NzM3MSwgMzQ5NCwgCisgICAgNjczNjksIDY1NTUsIDEyOTE0OCwgNzc5NzYsIDAsIDAsIDc4NTY2LCAwLCA5ODMxODksIDY1ODk4LCA5ODMyNDYsIDY1MzEyLCAKKyAgICA1NDQ3LCAwLCAxMjg5NSwgNjU1OTMsIDQwMTAsIDgzMTU0LCA0MTEwNiwgNzQzNTcsIDY0NDQ4LCA5Mzk5NCwgNDExMDUsIAorICAgIDc0MTE0LCA2NTgyMCwgNjIzMiwgNjgyMzMsIDEyNjYyNSwgMCwgNDM2MDgsIDExOTA5MSwgNzgxMTgsIDY1MzgsIDQzMzUsIAorICAgIDc4MzY0LCAzOTQxLCA0MTEyMiwgMTEwNjEsIDc4MzYzLCA2NDg5MiwgOTExMywgMTk1NCwgMTIxNTUsIDk4MzY3NCwgCisgICAgNDI4NzgsIDExNTAwLCA2NzQwNSwgMTI4MTUyLCA3NDU3OCwgMCwgNjU4MzIsIDEyODY2NywgMCwgNzA3ODksIDY3MzMzLCAKKyAgICAxMTkyMzAsIDQ1ODYsIDAsIDM1MCwgMTA5NTEsIDAsIDUwOSwgNjczMzYsIDk4Mzg3OSwgOTIzMDcsIDAsIDAsIDUxMzMsIAorICAgIDY3MzgyLCAwLCA5NTAwLCAwLCA0OTU3LCA2NDc0MSwgMjQyMiwgMjIxMiwgOTgzMDgwLCA2NzM4MSwgNjczODAsIDI0OTYsIAorICAgIDExNTE2LCA5NDQsIDY3ODE3LCAzODkwLCAxMjE2OCwgMTQzOCwgNjc4MTMsIDY4MzM1LCA3MDAwMywgNDE5NDcsIDEyMjAsIAorICAgIDEyMDgyOCwgNzQ5NDYsIDcwODU0LCA3NDA1OCwgMTU3MSwgNDI2MzAsIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIAorICAgIDAsIDMxMiwgNDE5ODAsIDk4Mzk0NCwgMTI4Mjk1LCA3MDc5NywgODg3NywgMjY5LCA0NDI5LCA2MjcyLCA5NjE3LCAxNDYwLCAKKyAgICA2OTU0LCA3ODY1NywgNDExMjAsIDY1MTIxLCAxMDg2MiwgNjA2MCwgNDExMTksIDQxNDE2LCA3NDM1NSwgNDE3MywgMCwgCisgICAgODI5NDgsIDAsIDE5MDYsIDEyMTE2OSwgMTE1MzIsIDc0MDczLCAxMjczMzgsIDAsIDE5ODUsIDYyOTYsIDk1ODIsIDc1MDcxLCAKKyAgICA2NDI4NywgMTI4NDA2LCA3ODExNSwgMTE0MjgsIDE3MzAsIDI0NTcsIDkxNzgwOCwgMTk5MTgsIDEwNDY5LCAwLCA2ODA4OCwgCisgICAgNzcwMywgODg0MCwgODAzNSwgMTIwNzExLCAwLCA5MjIzMCwgOTgzMzU3LCA2MTI5LCAxMjg0MzcsIDc4NTg2LCAxMjgyNjgsIAorICAgIDAsIDc4NzQsIDg2ODEsIDExOTA5MiwgMTEyMDYsIDEzMTM2LCAwLCAwLCA3MDEwMiwgNjM4ODYsIDcwNDUwLCA5NjA1LCAKKyAgICA3MTMwOCwgMTMyMjAsIDY3MzQ4LCA2NzM1NCwgNTUxNCwgNzQ5NjAsIDkyMjgsIDY3MzQ5LCA2NzM1NiwgNjczNDYsIDUyNDAsIAorICAgIDk4MTEsIDEwMDEyLCAzMDk2LCAwLCAwLCA3NDUyNiwgNjY2NzYsIDY1ODczLCAwLCAxMjgxNzksIDAsIDk1MDEsIDEyMDgzMiwgCisgICAgMTI3MiwgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCA2ODc1OSwgCisgICAgNzAzMTIsIDE5NTA4NSwgNjg4MjAsIDEyMTkzLCA3MDQwMCwgMTI3MjQwLCAxMjEzNzMsIDAsIDk4MzM1NSwgMTk5MzUsIAorICAgIDEyMDczMywgOTIxNjIsIDY4ODAxLCAxMjc5NTUsIDgzMTMzLCA5MzA1NywgNTI3NSwgMTIwMTk1LCAxMjg2MzIsIDg2MzcsIAorICAgIDQzNjgyLCAwLCAzNzg5LCA2Mzg4MCwgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIDY2MzMyLCA2NjYwMywgNjg3ODQsIAorICAgIDI0MjYsIDEyMDQyLCA5MjE5NCwgOTgzOTExLCA5NTM3LCAzOTYxLCAxMjExNSwgNzc5NTMsIDI2MDUsIDQ1MDAsIDY0NTYxLCAKKyAgICA1NTIyNCwgNDk4MSwgNzQ2NDQsIDAsIDQxNjQ2LCAxMTY2NywgNDI2ODYsIDc0OTkxLCA0MjM2MiwgNjQ2ODYsIDQ0OTksIAorICAgIDQxNjQ5LCA3NTg5LCAxMjg3NzYsIDAsIDMyMzcsIDAsIDY2ODk1LCA2ODI5NiwgODU0MSwgNzgyOTgsIDcwMDM0LCA0MTg2NiwgCisgICAgMCwgOTgzODE0LCA5NDA1NiwgMTExNzQsIDY5OTI0LCA0MzU1NSwgMjgyMywgOTU1OSwgMTAwNjAsIDQxOTQwLCA4Mjk5LCAKKyAgICA0MTk0NSwgNzEzMiwgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDEyODY3OSwgNDE2OTksIAorICAgIDEwNzYyLCA0Mzc4MCwgMTI5OTksIDExOTI0NSwgMTI4NDk0LCA4MTA2LCA0MTI4LCAwLCA2Mjc0LCA0NDk0LCA5ODMwODIsIAorICAgIDQwMTIsIDEwMzk1LCA5ODM1OTEsIDQzNjMzLCA2NTQ0NywgNzgyNjAsIDEyMDk3MywgMTEwMDQsIDY5NSwgNzM5LCA2OTYsIAorICAgIDc2MTEsIDEyMTA3MywgNDI3NTUsIDc0ODAyLCA5MjI3LCA3NTA2LCA3NTEwLCA2OTkzNywgNjkxLCA3MzgsIDc1MTEsIAorICAgIDc1MTIsIDc1MTUsIDM4NjgsIDY4OCwgNDE4NDcsIDY5MCwgMjU0OCwgNzM3LCA5NzQsIDgwMDMsIDc0MDYsIDEyNzM1MywgCisgICAgMTIwMTY2LCAxMjg2ODgsIDM5ODUsIDY2NDI1LCA2NTg2MCwgNDE4NTEsIDcwNTEsIDY5Nzc3LCA0NjgyLCA3MTg3MywgCisgICAgMTI4MDksIDY0MDYsIDQ2ODUsIDkyNTA1LCAxMDg3OSwgMTAzNDcsIDQ2ODAsIDYzNDEsIDAsIDM4NTEsIDgxMzIsIDc0MzI1LCAKKyAgICAxMTkyNjMsIDEyMDg1NSwgMTI3OTQ4LCA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDE5NDg1NSwgMCwgNDI2NTcsIDcxMDc1LCAKKyAgICA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCA0MzU2OCwgOTgzMTc1LCAxMTcxNywgNzY1MCwgMTA1OTQsIDY0OTUxLCAKKyAgICA3NjQ3LCA3NjQ5LCAxMjgxNTUsIDc2NDYsIDAsIDc4MDgyLCA5NjUxLCAxMjY0NzUsIDM4OTEsIDEyNzIwNSwgMCwgMjMzNywgCisgICAgMTczNSwgNzQzMjQsIDExMTM0LCAyMzYzLCAxMjEwMDgsIDkyNDQzLCA0MzU2MSwgNjc3MDYsIDEyODAzMiwgNzQxNDYsIAorICAgIDE4NjAsIDc0OTUsIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDExOTE0MCwgMTI3ODUzLCA3ODc1MywgMTIwMzQ3LCA3NzI3LCAKKyAgICAwLCA4NDk4LCA2OTgxOCwgODk0OSwgMzA2NSwgNDI3MTksIDcxMzUsIDE1NjksIDkyMzc1LCAxMjUzNCwgMTIxMjQsIDc2OTAsIAorICAgIDAsIDEyNTMzLCA5ODM3OTYsIDY0MTgsIDQ1NDMsIDc4MDg2LCA2OTY5LCAxMjg0NDQsIDc0ODAwLCA3MTA1MSwgNjc5NzQsIAorICAgIDEwODU5LCAxMjg2NTAsIDk4MzgwMSwgNjM4OTQsIDEyMDc2MCwgMTIyODIsIDY2MTkyLCA5ODM1ODMsIDc0NTkyLCA4ODUwLCAKKyAgICA3NDI3NSwgOTIzOCwgMTA2MTcsIDY4MDYzLCA5MTc5MDksIDkyNjI1LCA5MTc4MDEsIDEyNzkxLCAwLCA5NDA2OSwgCisgICAgMTI3ODQzLCA0NDQ3LCA3MTA2NSwgMTI3OTMsIDEyOTAwLCA5MjM3NywgMTA5NTAsIDk4MzQ0OSwgNzQ2MzksIDEyNzkwLCAKKyAgICA0MTQwMCwgMTE5MTI4LCA2NjYwNywgMTI3OTIsIDQyMjMyLCAxMTkyMzksIDE3NDQsIDEyNzg5LCAxMDM2NiwgMTIzMTcsIAorICAgIDQxMzEwLCAxMjA3MzAsIDQxMzk5LCAwLCAwLCA1NTI1OCwgMCwgMTI2OTAsIDEyNzc2MywgMCwgNDM2NzIsIDEyNzg0MCwgCisgICAgNDE2NTIsIDI5NzQsIDkwMTAsIDExMzE1LCA5ODM4MDgsIDI3OCwgMTIxMjA0LCA0MTQwNSwgNDM4NzEsIDAsIDEwMDc3LCAKKyAgICA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAwLCA2MDAyLCA2NzMzNSwgNDM1NTMsIDExMTg5LCA2NzMzOCwgNjczMzcsIAorICAgIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDEyMDI2MywgMTIwOTQwLCA5NDA0MiwgODY0NiwgMTI4MjU3LCA3NzgyOSwgCisgICAgNzEzNjAsIDAsIDY0MTMsIDY1NTAsIDExMzc1OSwgMTk0MCwgMjgwOSwgNDM2MzcsIDIyMCwgNjUxOTMsIDQzNTUxLCAKKyAgICAxMDY3OCwgMTAwNDQsIDY4ODQxLCAxMjgxMjEsIDk4MzgxNiwgNjgyOTAsIDY0MDMsIDU3MDcsIDEwMzkzLCAxMjc1MzIsIDAsIAorICAgIDY2NjE0LCAwLCAwLCAwLCAxMDI5NywgMCwgMzc0MiwgNjczMzEsIDM5NTksIDAsIDEyMDQ2NiwgMCwgMjQ2NywgNjg4MDYsIAorICAgIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCA5ODMyMjAsIDQzNzU4LCA0MTgyLCA3ODE3MSwgNDY3NiwgMTIwNTAxLCA5MjEwLCAKKyAgICAwLCAyNTEwLCAwLCAxMDIwOCwgNzgxNjgsIDkyMzYxLCAxMTU0MCwgNDM1NDYsIDY2OTIsIDY4MzcsIDQxMDYwLCAxMjgwMTgsIAorICAgIDQ2NjgsIDkwODMsIDAsIDAsIDc4MTQ0LCAxNTU5LCA2MzgzMSwgOTY3NywgNjczNDAsIDY3MzQ3LCA2NTI1NiwgNjczNDUsIAorICAgIDY3MzQ0LCA5ODMzNTIsIDk4MzI2NiwgMzY1LCAxMjA1NiwgNDMwMjcsIDEyMDQyMywgNDE3MTYsIDEyODIzNiwgNjczNTIsIAorICAgIDY3MzUxLCA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNjczNTMsIDU0NCwgMTIwNDUsIDYyNzgsIDc0NjMyLCAKKyAgICA1NTE1LCAxMjkxODYsIDEyMDg4NCwgOTgzMDUxLCA2NTMzOSwgNDMyMjEsIDIyMTEsIDAsIDU1MTcsIDcwMTE2LCA3NDIyNSwgCisgICAgNzQ4NDEsIDY3ODg0LCAxMjg0MTQsIDY3ODkwLCA2Nzg4NSwgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDEyMDE5OSwgCisgICAgMTE4ODgzLCA2Nzg3OSwgMTI3MTg4LCAxOTAyLCA2Nzg4NywgOTYzOCwgMTI5NzYsIDEyNjU0NiwgMTI0ODMsIDEyMzY4LCAKKyAgICA0MTc2OSwgNDI3MjYsIDQxNzY1LCA3MzYxLCA2NjY3LCA2Nzg3NCwgNzU1NiwgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCAKKyAgICA0MjY3NywgNjc4ODksIDkzMDQwLCAxMzExLCAxMjg5NDksIDQzMjYsIDExMDAwLCA2MzgyNCwgMTMwNjgsIDEwOTMyLCAKKyAgICAxMjg4ODAsIDY5MTcsIDc4MTU1LCAxMjA4MzcsIDk0OSwgNzc4ODIsIDkxNzk2OCwgNjE0OCwgODYwNSwgNDIyNTMsIAorICAgIDc4MTc3LCA2NjkwNiwgMCwgNDI3MTUsIDcxNDMyLCA3MDI4MiwgOTgzMzczLCA2Mzg3MSwgMCwgNDE3OTYsIDEyNjksIAorICAgIDY1MzAsIDEyMTQxNCwgNjUwNTcsIDcwNDkzLCA1MTQ0LCAxMjIyMSwgNDI3MTYsIDY4Mjk5LCA0NDMxLCA0MzMxLCAKKyAgICA5ODM3MjksIDEyODY3NSwgNDE4MzQsIDUyNzksIDEyMTM2MiwgMTAzMzYsIDgzMTIsIDAsIDQyNzAxLCA5Mjk1OSwgMCwgCisgICAgNzgxNjUsIDY2MDM2LCA3MDE2NiwgMTIwOTM3LCA2NDI4LCA0MjI3MCwgOTgzNzI2LCA5ODM1OTYsIDQzMDU5LCA0MjY2NiwgCisgICAgNTI1NiwgMTA2NywgMjU1LCAxMjEzMSwgMTI4NzQyLCA5NDkzLCA3NDk5MCwgNDEwMTQsIDExNzkzLCAxOTQ5MjAsIAorICAgIDEyMTE5NSwgNzQzOTQsIDQzNDYwLCAxMDY1MywgNDI3MjMsIDk4Mzg1NCwgMTE5NjMyLCA3MDQyNywgNjU2MCwgNzAxNiwgCisgICAgNzQyNzQsIDY5OTg2LCA0MzU1NiwgMzkyOSwgNjc5NzcsIDY2MTQsIDI3NjgsIDkyNTA0LCA5NzQ2LCA1MTM1LCAxMTgxMSwgCisgICAgMTI3OTYsIDExOTUzLCAwLCA2OTc2MSwgNTEzOSwgMzQ2LCA3NDMwMywgNjMwNSwgMTI3OTUsIDQ2NzUsIDUxNjgsIDc4NTUyLCAKKyAgICA0Mzg0NSwgNzQzMTUsIDc0MzYxLCA4MjUzLCA4ODE3LCAxMTM2LCA5MTc5MzEsIDQzNTYzLCA5MjIzMiwgMTI4OTE0LCAKKyAgICA2NjQxMCwgNzM5MiwgODIzMCwgOTM2NSwgNzExOTQsIDEyNzEwOSwgOTgzNjA3LCA2NjkxNSwgMTI4NDAyLCA0MDQxLCAwLCAKKyAgICAyMzU3LCA0MzI0MCwgMTI3ODYsIDIyOSwgNDM4MzQsIDExOTg4NCwgNDQwMDQsIDcxNDIsIDExOTg4MSwgMTIzNTAsIAorICAgIDY1NTU0LCAxMTk4ODIsIDcxMzA1LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgNDM3OTUsIDc3NzAsIDEwNzEyLCA2NDg1MywgCisgICAgMTI2ODYsIDQzODMxLCA0MjM3NSwgNjU3ODAsIDEyNDk0NCwgNjYzNTIsIDEwNDcwLCA3MTExOSwgMTEwNTksIDEwNzkxLCAKKyAgICA5MTc5NDQsIDQ1MCwgMTE5MzI4LCAxMjcyNTQsIDEwNDMyLCAxMjA5NywgNTQ1MCwgNjQ2OTEsIDEyMzMsIDAsIDQ0MDA5LCAKKyAgICA3ODI4NCwgNjYzMzgsIDY2Mzk1LCA5MTc4MzIsIDE4MzksIDExODc5OSwgOTgzMjE5LCAxMDkyNywgMTcwMSwgOTgzNjY0LCAKKyAgICAyMzg4LCA0MTc0OSwgNDE3NjEsIDU0NTMsIDgzNjEsIDExOTg2NSwgODk1LCA1NDQ0LCA0MTc2MywgNjQ4ODksIDcxNDMsIAorICAgIDkyNDkzLCA3ODY3NywgOTgzMTM3LCA5MjQyOSwgNjk5ODMsIDY2NDMyLCA4ODAxLCAzMDUzLCA0MzQwLCA5ODMwNDQsIAorICAgIDEyODAxMywgNjU4MTIsIDEyMDY3NSwgNzAwMDEsIDQxODI0LCA2Nzk4NSwgMTIwMjAzLCA5MjYwMCwgMTI3MDUzLCA0MjcwMCwgCisgICAgMTk0ODA1LCAxMjc5ODAsIDE5NDgwNywgNzg2NzYsIDkyMzU2LCAxOTQ4MDgsIDEyNzg0NCwgMCwgNDQ5MywgNDMzNiwgCisgICAgMTI5MTcxLCAyMzE0LCA0MzYwMiwgNzg4MjYsIDExOTMyNSwgMTk0ODExLCA0MjQzOSwgNjQ2MzgsIDQyMzI3LCA0MzUyOCwgCisgICAgNDQ4OSwgNjg3NTAsIDEyNTExNiwgMTk0NzkzLCAxOTEyLCA0MjM4NSwgMTAzMDYsIDEwMzcwLCAwLCAxOTQ3NjEsIDg4NjcsIAorICAgIDEwMjUwLCAxMDI1OCwgMjcxMiwgMTYzNSwgNzEwNjQsIDE0MTAsIDc4NzYzLCA5ODMyNTIsIDExODg3OCwgOTgzNTY3LCAKKyAgICAxMjg3MTUsIDk5MTksIDEyMDUyOCwgNTU5LCAxMjgxNTcsIDQxODI1LCAxMjEyNzQsIDc0NjQxLCA0ODkyLCA3NDAxNiwgCisgICAgMTIxNTAyLCA2NTQyLCA0MTk1NywgMTI4ODY1LCA1Nzc3LCAxMjcxNjcsIDc1OSwgNjU3NDksIDIwNzksIDY1MjQ4LCAKKyAgICAxMjc4OCwgNjQ0ODcsIDY0NTUyLCA5MzA2MywgMTAyMjMsIDQyMDYyLCAxMjEyNzksIDAsIDc0MjQ2LCAzNjY4LCA2NTc1NCwgCisgICAgNDM1NjAsIDEyMjI2LCA2Nzk5MSwgNjUxNDksIDIzNDAsIDQxOTU5LCA3MTQ2MywgMTk0Nzg1LCAxOTQ3ODgsIDQzNjE4LCAKKyAgICA2NTc0NywgMTA5MzcsIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCA2NzIzNiwgODkyMSwgOTk1MiwgMTI4OTQxLCAwLCAKKyAgICA0MjcxNCwgOTk1MSwgNDM0MDksIDE5NDc3MCwgMjk0OSwgNjYwMTIsIDE5NDc3NSwgMTk0Nzc0LCAyOTU4LCA2ODM1OSwgCisgICAgNDE4MjAsIDIzMDAsIDIzOTUsIDEyMDA2MSwgOTk3NiwgMTIwMDQzLCAxMjAwNTAsIDcxODk2LCA2ODIyMCwgMTI4MTQzLCAKKyAgICA0MjgwOSwgNDI4MDcsIDcwNzk4LCA2NjI5MCwgMTAxOTgsIDQxNTAsIDY0MzcxLCA4MzE4LCA0MTc5MCwgNjc5NzYsIAorICAgIDQxODk4LCAyMzYwLCA0MTc5NCwgOTE3OTQyLCA3MDc5NiwgOTIxNjMsIDkzMDMzLCAwLCAyNDE4LCA5ODMwOTgsIDI0MTEsIAorICAgIDExMzM2LCA3OTksIDYzODIzLCAxMDI3NiwgMTAzMDgsIDEwMzcyLCA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgCisgICAgMTAyNjAsIDExODk4MCwgNTUyODQsIDc4Njg2LCAxMjcxNzcsIDEwMzg0LCAxOTQ3OTQsIDEyMTE0NywgMTI5MTExLCA3NzUzLCAKKyAgICAyMzUxLCA2NjU1LCA2NDQ4OSwgNjk5MzEsIDcwMTk5LCA3Nzg3MiwgNDQ0MywgNDI3NzksIDIzMCwgMCwgNjgwNjcsIAorICAgIDQzNTQ5LCA0ODU1LCA0MjE1MCwgNjU3MzksIDU0NDEsIDQxODk2LCAxMDI4OCwgMTAzMjAsIDAsIDg1NSwgNzA0NiwgNjEwOSwgCisgICAgNjUwNDUsIDYzODM5LCA3ODE5OCwgMjA0OSwgMTAwOTgsIDkxNzc3OSwgNzQxNDUsIDEyNzk0MywgMTAyNjQsIDEwMjgwLCAKKyAgICA5MTg0LCAxMDM3NiwgNzAxMywgNDQ2NywgNzg2ODQsIDkxNzU1NCwgOTIyNjAsIDQxODg3LCAwLCA0ODYyLCA5NzM1LCAKKyAgICA2NTM3LCAxMjA1OTEsIDc0Mjg2LCAzOTE0LCA5MjE3OCwgNjg4MjMsIDkwNjUsIDEyOTYxLCAwLCAxMjA0NTYsIDkyMjUzLCAKKyAgICAxMjgyMDQsIDI4OSwgMTI4NzE0LCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDczODkzLCAKKyAgICA0MjcyNCwgNjk5NzcsIDQ2ODgsIDEyMDQ1NCwgMTI4NTA3LCAwLCA2Nzk5NCwgODIzOCwgMzExMCwgMTIwMTYyLCAzNTY1LCAKKyAgICAxMjAxNjMsIDY1MjgsIDc4Mzg3LCA0MzAzNSwgNjk4OTgsIDIxOCwgOTgzODUwLCAxNTIwLCAwLCA0Nzg2LCA5ODMxNjgsIAorICAgIDQzMjI1LCA0NjAyLCA5MjQwMCwgNzgxNjcsIDEwMDg4LCA2NTQ4LCAxMjExNTcsIDEyMDE1NiwgNDM5NzgsIDg5ODgsIAorICAgIDg4ODgsIDkyNzI0LCA3NDgxMiwgNjk3MDksIDk4Mzk2NywgMTA2NjYsIDAsIDczOTAyLCA2OTc0MCwgMTIxNDM2LCAwLCAKKyAgICA5OTc1LCAxMTM3MDQsIDExOTkwMiwgNDY4OSwgODkzMiwgMCwgNjU1NjAsIDExOTIwOSwgNzQ0NDEsIDc4ODEwLCAwLCAwLCAKKyAgICA2Nzk4NywgMCwgMTI4ODI4LCAwLCA2Nzk4OSwgMTE5MDI5LCAxMDA2NSwgODIwNywgNzE5MDAsIDkyNjEzLCAxMjgwMTEsIAorICAgIDEyMTAyOCwgNjYyLCAxMjg3MjAsIDkyNDQsIDE5NDg2MywgODMxODMsIDExOTI2MSwgOTgzNDMwLCAwLCAxMjA5MDEsIAorICAgIDkxNzgzOCwgNDE5MjksIDAsIDcxMDg0LCA2NjY3NCwgNDE5MjYsIDY5OTk0LCAxMjA0NDMsIDEwNTEzLCA2NDYzNywgCisgICAgMTk0ODYyLCA2ODAxMywgNTIsIDEzMTE4LCA2NDc1LCAxOTUwMDQsIDgzNDc5LCAxMjA5NSwgMTAyMjUsIDQ4MTIsIDkyNTc4LCAKKyAgICAxMjg0ODYsIDY3OTkyLCA3NDA4NSwgMCwgMzk3OCwgMTI4NDI1LCA5MTc5NDUsIDc0MDE1LCAxMTU4MiwgOTI3NjgsIAorICAgIDEyMjgxLCAxMjcwNDMsIDY1NDQsIDEzMjQxLCA5Mzk2MSwgNjk3ODIsIDEyNTAxNCwgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIAorICAgIDEwMzY5LCAwLCAxNTg1LCA3MTkyLCAxMDI0OSwgNDIyLCAxNTAwLCAyMDM2LCA5ODYsIDE5NDg1OSwgNjQzOTQsIDU3ODEsIAorICAgIDU1OTksIDY0Mjk0LCAyNDk0LCAxMjA0NTAsIDQ4NjEsIDc0MDIxLCA2NDMzNCwgNzgyMDMsIDEyNzgwOCwgMCwgODM0NDQsIAorICAgIDY1MTAyLCA4OTYxLCA2NTg0MiwgMTAyNDMsIDEwMjQ1LCA3MTkwNywgMTIwNDEwLCAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAKKyAgICAyNTA4LCA5MjY4MywgMCwgMjAyLCAxMjgyNDYsIDc0MTMxLCAxMjQyLCA2NTUxNCwgMTIxMTcwLCA2Mzk0MCwgMTIxMzYzLCAKKyAgICA2NDUzMywgNzE4ODMsIDEyMDQ0NiwgNjc4NDIsIDExOTkwLCA5MjQwNSwgNjM5MzksIDQzMzc1LCA2NTQ0MCwgMjUwNCwgMCwgCisgICAgNzg2NzEsIDY0ODI5LCA5MzAyMCwgNjk0MywgOTE3OTM0LCA1ODU5LCAwLCAyODU4LCA5ODMzNjMsIDc0Mjk0LCA5ODM5MTQsIAorICAgIDY5MjM5LCAwLCA2Nzg3MSwgMTI5OTIsIDI3NTMsIDE5MzYsIDcwMDc4LCA2NzcwMSwgMjc1MSwgMTI2NjIsIDI3NjMsIAorICAgIDg5NTMsIDY0NzAxLCAxMDczMSwgMTI5MjIsIDcwNTIsIDkxNzgzOSwgNjY0MjQsIDYzOTkyLCAwLCA2MzkyMCwgNzQxMjgsIAorICAgIDI4NTYsIDExOTkxMCwgNDcsIDY5OTA4LCA3MTA1MywgNjU4NTgsIDE5NDgwNiwgMCwgNjc4MjksIDc4OTksIDAsIDg0MTcsIAorICAgIDQzNzk4LCA3MDcyLCA3NDE5NSwgMCwgNDAzMywgMTIxMjg5LCA0Mzk5MiwgMTIxMDgxLCAwLCAyMTIsIDY0NjAwLCAxOTAzLCAKKyAgICAxMjMyMCwgODM0ODQsIDEyMDg5NCwgMTk0NTYzLCAwLCA4OTE1LCAyNzU5LCA5NDUsIDY2ODksIDkzMDY0LCAwLCAwLCAKKyAgICAxMTg3OTgsIDEyOTEsIDc0ODI4LCAwLCAxMjA0MzUsIDk1MzEsIDEzMTU1LCA4NTA1LCA2ODM3OSwgMTIwNjIsIDEyODE5OCwgCisgICAgMTIxMjE2LCA2NTQ4NywgOTIxODksIDQxODM3LCAxMjA2MTEsIDgyNDYsIDEyODg3NCwgOTMwNjYsIDAsIDEyMDQzMywgMCwgCisgICAgNjM5MzUsIDczOTYyLCAxMjA4MDYsIDY0Nzg3LCA0MzUyNCwgMCwgNjQ0MjYsIDk4MzA5MiwgMTk0OTQ4LCA5MTc4NjYsIAorICAgIDkxNzc4OCwgNjU2NjQsIDY2OTMsIDk4NDMsIDAsIDg2NzQsIDExOTg4NywgMTI4ODEyLCA5MjcxNSwgNzA3ODgsIDEzMjAsIAorICAgIDEyMTQ2MSwgMTY3MywgNDgxMSwgOTIzODMsIDU5ODYsIDkzMzgsIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIDExOTU5OCwgCisgICAgOTgyMCwgMTE5ODkyLCAxMjE4NywgOTgzODQxLCA3MTA0MSwgNTk4NCwgMCwgNDMzMDgsIDQzOTMsIDY3NjUwLCA5ODMyMjcsIAorICAgIDAsIDc0ODIyLCAwLCA3NDgyNiwgNjQ3MzMsIDk4MzIxNCwgMTI3ODk4LCAzNDkxLCA2NzE0NiwgMTIxMTQyLCAxMjgyMTksIAorICAgIDM1MTQsIDY1NDg1LCA3MjQyOCwgNzQ5MiwgMTI4ODYwLCA3NDYwNSwgOTI0ODMsIDc1MTQsIDk4MzM2OSwgMTI2NTg1LCAKKyAgICAxOTQ3MzEsIDc1MDIsIDc1ODcsIDY4MzUzLCA2MzkyMSwgMTIxMTc4LCA2MzkyNSwgMTIwMTYxLCA3NjEwLCAyMTksIAorICAgIDEyODE1OCwgNzg3MjIsIDY5MiwgNDM1ODgsIDY4NDg1LCA0MTYzNSwgNDMyNDEsIDk2ODgsIDcxNDcsIDk1MzUsIDAsIAorICAgIDkzOTkxLCAwLCA2NDUzMCwgMCwgNjQ2MTAsIDExODA0LCAwLCA3MTQ5LCA3NDUzLCAwLCA4MDEzLCA2NjM5NiwgOTIzMDEsIAorICAgIDAsIDg4OTUsIDUyNTMsIDcwMDI1LCA1NDU4LCA5MTc2MjksIDI4NjYsIDEyOTA0NSwgMTI3ODYwLCAxMTA5OCwgNjg0MzMsIAorICAgIDY3MDAsIDEyMDQ4NCwgMCwgMTIwNTgzLCAxOTQ4MjQsIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgNzA1OSwgOTgzNjc3LCAKKyAgICA2Mzk5NywgOTYwNCwgNzg3MDAsIDc0NDEsIDYzODI2LCA2Nzk3MCwgODM0MzUsIDY0MzkyLCA5MjYyNiwgOTgzNjg3LCAKKyAgICAyODQ0LCA3NDYxMCwgNDE5NzQsIDY3Mzk3LCAxMjEzOSwgNjc5NzEsIDAsIDAsIDMzNTgsIDY1Mjk1LCA5ODM4OTksIDMxMDQsIAorICAgIDE5NDczNCwgMCwgMTIxMzA0LCA5ODMyMzUsIDUzMDgsIDgzNDM0LCAyOTAsIDAsIDEyMTMzOCwgMjg2MiwgMjc5MiwgCisgICAgMTk1MDg4LCA5Mjk2MywgNzc5ODQsIDMyNjgsIDY2NTkxLCAwLCA2NTUyLCA0MjM2NywgNzAzNSwgMTIwNTU4LCAwLCAwLCAKKyAgICAxODE0LCA3ODQ2NCwgMTAyNDAsIDY2Mjg1LCA3NDMwNSwgMTI4MzgyLCA3NDUyOCwgNjU5MDMsIDcxNDU0LCA0MjY0NiwgCisgICAgNzYwNiwgMjU5MSwgMjgzNywgNDM0MSwgNDM1MTMsIDY0NDgyLCA5MjUyNCwgODE2MywgNjUyNzAsIDAsIDc3OTMyLCAwLCAKKyAgICA5MTEyLCA3NDQzMSwgODYzLCA5NDkwLCA3NTAzNywgMTI4MzQ5LCA0MzMyMywgMTIwNTEzLCAxMTk4OTcsIDkwNzEsIAorICAgIDY4MDU0LCAwLCAzNjU0LCA3Nzg5LCA5NjM3LCAxMjExMzYsIDI1MzUsIDY1NTA0LCA3NjUzLCA0MDk5MywgOTI0MTUsIAorICAgIDY2NTg3LCAxMjQ5ODcsIDAsIDkyNDAxLCA0MzkyNywgMTEwMDYsIDEyOTI3LCA3ODA3LCA4MDczLCAxMjA5ODAsIDEwNjI5LCAKKyAgICAxMjc4NjksIDc0MDg4LCAzMDU2LCAxMDgyMywgMTI3MjY3LCA5MjM5MSwgODc2MiwgMTA1MDgsIDY5Njg5LCA3Mzc3MCwgCisgICAgNDM5NjksIDQzMTkzLCAxMDczNywgMzQ2MywgMTIwOTc1LCA5ODMzNTEsIDY2NjMzLCA4Njk1LCA0ODE1LCAxMTMyMiwgCisgICAgNTgxMSwgMTIzNDUsIDcwNDksIDExODgxMSwgNTE5NSwgMTk1MDgxLCAwLCA2NjYzOSwgOTI5MzksIDAsIDAsIDEyODA0MSwgCisgICAgNjc5MDMsIDY3NzM5LCAxMjYyLCAxMjAxNjUsIDY1NjEsIDE5OTM5LCAxMjg2NzMsIDAsIDEyNzMxOCwgMTE5OTA2LCAKKyAgICA3MDMwMCwgMCwgOTgzMDk3LCAwLCA5ODM2NjcsIDExOTkwNywgNjQ2MTIsIDExOTkxLCAxMjA2NTQsIDAsIDkyOTQzLCAKKyAgICAxNTAyLCA5MTc1NjgsIDEyNzk4OCwgOTEwNywgMTI3MzE2LCA1NzAyLCAzNjU1LCA2NzY2MSwgODQzMCwgMCwgNzEyMjMsIAorICAgIDEyMDc1OCwgMCwgNzQwNTcsIDk2MDMsIDEyODA3OSwgNTI1NCwgMTIwNzQyLCA3NzI0LCA3NDM4OCwgNjgzNzUsIDEwNzk2LCAKKyAgICA1MTI5LCAwLCA3MDgxNiwgNTkwLCA3NTc5LCA1NjE0LCA1ODkzLCA5MjI4MCwgMTE3MjAsIDkyNDk2LCAxMTcyMSwgNzA4MDQsIAorICAgIDQ3OTgsIDEyMTQ2OCwgMTE5MzE2LCA2NjAzOCwgNDc5MywgNjc4NTEsIDExNzI2LCAxMjc1NDEsIDc0MjA0LCA2ODYxMCwgCisgICAgNjg4MjQsIDY4NjI2LCA4OTQsIDMwMCwgMTIwODc1LCAxMjMwNiwgNjYyMzUsIDgwMDQsIDAsIDExOTU3NCwgMjU2MiwgCisgICAgNzAxNTYsIDEyMDg1NiwgNDI1MDMsIDkyOTAwLCAxMTY1MiwgOTE3ODEzLCA5MTc3OTksIDExOTI0MSwgNjQ2OTksIAorICAgIDEyNjU2OSwgNTA5NiwgNTA5NSwgMjg2MywgMzQyNCwgOTIyNDQsIDEwNDU0LCA0MjUzMCwgNTA5NCwgNzA4NzMsIDAsIAorICAgIDEzMTU2LCAxMjkwNTcsIDEwODMyLCA1MDkzLCAwLCA2OTg1MiwgNzI0MzAsIDUwOTIsIDEwNzA4LCAxMTMyNywgMCwgNTA5MSwgCisgICAgMTc2LCAwLCA5MTUzLCA0MTA0LCA3ODU5OSwgNzg2MDEsIDEyMTUsIDQyNzEyLCA1NzQ0LCAxMjI3MiwgOTgzMiwgMTE3NzcsIAorICAgIDcxMjk5LCA2NjgxNywgNDI4ODEsIDAsIDg5ODAsIDExODk4OCwgNjc4NjEsIDg4NDQsIDcyMDksIDAsIDAsIDQyNzgsIAorICAgIDEyODgwOSwgMCwgMTE5MTYwLCA3MDgyMSwgOTA3NCwgNDM0OCwgMCwgNjU1NTgsIDY1OTQ2LCA4MTEzLCA3MDg3LCA1MjU1LCAKKyAgICAxNzg2LCA2NjEsIDEyODExNiwgMCwgOTE3OTI1LCA3NDQyMywgNzEzNDUsIDU4NiwgNzQ0MTQsIDY0MzU5LCAxMjY3LCAKKyAgICAxMjgyNjksIDY1NDY4LCAxOTQ5NjYsIDY1NzMxLCAwLCA3MjQwNSwgMzYyMSwgOTI5MzIsIDY2NjY2LCA2NDIxMSwgMCwgCisgICAgNjU2MiwgMTI5MjgsIDE5NDkwNCwgMTIyOCwgNjU0OTAsIDExMzgzLCAwLCAxMjc5NTMsIDcwMzQzLCAxNzE0LCA3NDQwNiwgCisgICAgMTIwNzUxLCAwLCAxMjExMTMsIDk4Mzk3NiwgNjYyMjUsIDcwMTEwLCA3MDg2NywgNDI2NjAsIDExNDM2LCAyMDcwLCA2NCwgCisgICAgMTIwNjk0LCAxMjEwMjUsIDEwMjkxLCAxMDMyMywgMjgyNiwgMTEzODA5LCAxMjY1MTAsIDAsIDQyMDA4LCA5NzA4LCAKKyAgICA0MjcxMCwgMCwgNDIwMTEsIDQxOTk5LCA5MjE2NCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAKKyAgICA5Njg5LCA5ODM5NjksIDY1ODMzLCA3Nzg0OCwgMCwgMTc2NSwgMCwgMTI4NjIyLCA2NTU4OCwgOTIzNTAsIDk4MzI4MSwgMCwgCisgICAgODQwMSwgOTgzOTI0LCA0MjAxNCwgMTI3MzA3LCA3MDMwLCAxMjA5NjksIDEwNDc5LCA2NDk1OSwgMjg1MiwgMCwgMTIxMjI1LCAKKyAgICAwLCA3MDgxOSwgMTI4NTg2LCA5MTc5NTEsIDY5NjMsIDEyNjcwNCwgMTI2NjcsIDY0NTQwLCA3NDc4NiwgMTAxNDcsIAorICAgIDEyOTM1LCAxMjc1NjgsIDEyNjQ4MywgMTIxMjgxLCAwLCAwLCA3ODc1NywgMCwgMTEzODE1LCAxMjEzMDIsIDAsIDk5OTQsIAorICAgIDEyNDY3LCAyODY0LCA2NDcxOSwgMTE0OCwgMTA0MzUsIDExNDYyLCA0MTY3NSwgNzA4NCwgMjc2NSwgNzg0NjYsIDQzMzgyLCAKKyAgICAwLCAxMjA3MTksIDEyODE4OCwgOTI1MTYsIDY2NjYyLCAwLCA3ODEzMywgOTM2NCwgMTk0Njg1LCA3NDQxNiwgMTI3Nzk3LCAKKyAgICAwLCA3Nzk4OCwgMjYzLCAxMDQ0OSwgNDEyODgsIDAsIDQxODM5LCA3ODM4NSwgOTgzNzQyLCA3MDMxMywgMTI5MTQwLCAKKyAgICA2OTMxLCA2OTcyMiwgNDMyNjEsIDcxNzcsIDcwMTA1LCA5MjY1MiwgMCwgMCwgNDI2MiwgMTAyODUsIDEwNzIyLCA0MjAyMCwgCisgICAgMTI2NTc1LCA2ODA2LCA2OTkyLCA0MjAxOSwgMCwgNDEyOTAsIDk4MzcxNiwgNzUwLCAwLCA3MTMwNCwgMTAxNjMsIDYzOTEzLCAKKyAgICA3MTMwMCwgNzAzMiwgNTk1NCwgNjQ5MzEsIDQzMTQsIDEyODYwMCwgMTk4LCA2ODQ1MywgNzMwLCAxMjAwOTQsIDYzOTA3LCAKKyAgICA3Nzk5MywgNzA4MTgsIDEzMTY1LCA3MTA3LCA3NDE3MSwgNDI4MDQsIDY3OCwgODI0MCwgNzgwMTUsIDEyNTAwNSwgNDEzNzgsIAorICAgIDExMDA4LCA2OTM4LCA3MDAyNiwgOTI2MzcsIDIwOTcsIDY2MjQ2LCAxMjA1NjAsIDcwODIzLCAxOTQ5OTAsIDk4MzYwNCwgCisgICAgMzg5MiwgNjg2MzIsIDY5NjQyLCA2NzEyLCA2NjA0NSwgNDE0NzAsIDY0ODA1LCAwLCA5ODMyMTMsIDEyNjUxMSwgNjQ4MDEsIAorICAgIDEyNzgxOCwgNDk3LCAxMjEwMCwgNTk1MywgOTI2NjcsIDc3OTYsIDY5NjY5LCA0MzI1NCwgNzM4MzEsIDAsIDEwMjkzLCAKKyAgICA1OTUyLCAxMjgxLCA0Mzc0NywgMCwgMTIxMzk5LCAxMDY3NywgNjA0LCA0MTA5NywgOTE4MiwgMTg1OSwgMCwgOTI2MDMsIAorICAgIDM0MjUsIDEyNzQ4OCwgMTI2NTIzLCAyODM2LCA5ODM3MzgsIDAsIDk3MDcsIDExMzcxOCwgNDMyMDIsIDAsIDAsIDY1MTk5LCAKKyAgICAxNzM4LCAxMjgzMTEsIDY3NzA3LCAyODMyLCA5MjcwMiwgOTY3MCwgMTExMDEsIDAsIDY2Mzc0LCA5MTc5NTYsIDExOTU1MiwgCisgICAgMjgyMiwgNjgxMjIsIDQ0MzYsIDkyNTE5LCA5ODMwODEsIDczNzUyLCA3MDMwNSwgNjQ4NzIsIDkyMzQwLCAxMzMxLCAwLCAwLCAKKyAgICAxMjEzNzcsIDEyNzA4LCA5MTc5NTQsIDUwOTAsIDUwODksIDEyNzk3NywgOTE3OTUzLCAxMTkxMDksIDAsIDcwODI2LCAzMTksIAorICAgIDExODg0NywgNDM0NzksIDk0NzcsIDAsIDAsIDUwODcsIDc0ODg2LCA3NjQwLCA5NiwgNTA4NiwgOTgzNTk3LCA5MjM3OSwgMCwgCisgICAgNTA4NSwgNjQyODYsIDkyNjY1LCAxMTM3MTcsIDQxNDIyLCAxMTk2MTcsIDExOTkwMSwgNDIzNTYsIDM3NzIsIDExOTA0MiwgCisgICAgMCwgNTAxMSwgMCwgOTgzMzI5LCAxMjY1ODcsIDAsIDEyMDY5OCwgMTE4ODc0LCA2Njc3LCA3NjAxLCAwLCA1OTEsIDY0NDE5LCAKKyAgICAxMTg5NTMsIDkyMjYyLCAxMTg4OTUsIDcwNzk5LCA3MDA4NCwgMCwgMTA5MzksIDYxMDYsIDY5MzMsIDQxMjcxLCA2NzYwLCAKKyAgICA3MTM0MywgNDUzNCwgNDEyNzAsIDEyODg3NiwgNjcxMzgsIDY1NTc0LCAxOTQ5NDcsIDkyMjQsIDY3MTQwLCAzNjcxLCAKKyAgICA4OTc2LCA2NzEzOSwgMCwgNDEyNzUsIDYzNzIsIDgyOTk3LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCA5MjM2OCwgCisgICAgNDEyNzMsIDEyMTQ0OCwgNzQ1MzEsIDY3MjgsIDAsIDk3MTUsIDEyOTI5NywgODI1OCwgMTE3NTMsIDc0ODIwLCAwLCA5NjAyLCAKKyAgICAxMTg5MTksIDQyLCAxMTE5MSwgNDM2ODgsIDY4MjQzLCAwLCA3NDU4LCAwLCAwLCA2NTM4NSwgNjcxMzUsIDY3MTM0LCAKKyAgICAxMTk1OCwgMTExNjUsIDkxNzgyMiwgMTI1MDg3LCA2MjU0LCA0MjcyMSwgNjYzMzYsIDgwNDUsIDExNTUwLCAxOTUwNjQsIAorICAgIDY3MTMyLCA2NzEzMSwgNDI4NTgsIDExNzg5LCA2NTg2OCwgNTU1NywgMTAxMzMsIDk3MzcsIDEzMTA5LCAwLCA5NDY3LCAKKyAgICA1NTU4LCA4ODc4LCA0Mzg0NCwgMTk1MDM2LCA3NDUxLCA2NzA2LCAxMDE0NiwgMCwgOTA4NiwgNjQ1NjYsIDk4MzE4NSwgCisgICAgNjQ1ODQsIDc0MzcsIDc0NTQsIDEyNTk0LCA3Mzc0OSwgNjgzNjIsIDQ1NDYsIDc3MzEsIDAsIDcwMDQ4LCA3NDI0MywgCisgICAgMTI1MDkyLCAzODA1LCAwLCA2NzEyOCwgNDQwMDEsIDQxMDA4LCAxMjgwNTIsIDYzMDcsIDE5OTQ5LCA2NzEyOSwgNzU0NCwgCisgICAgMTI0OTg5LCA0MzQ2OSwgMTIxMDk1LCA5ODM3MzUsIDEwMTUyLCA2NDQyMiwgNjUwOTEsIDY3MTI0LCA3NjAyLCA2NDcyOSwgCisgICAgMCwgNDM1MjEsIDAsIDQyMzAyLCA0MzcxMSwgNDM1MjMsIDQxNDQ3LCA1NTU5LCA2ODQ4MywgODcwNCwgMjM5NywgNTU1NiwgCisgICAgMCwgMCwgMCwgOTAxMSwgOTYzMCwgMTExNjYsIDAsIDkzOTk4LCA1NTA2LCA5MjQ5OCwgMTkxMSwgNjY2NTIsIDY3Njg2LCAKKyAgICA5OTYxLCA4ODQ1LCA2NjY5OCwgNjgzMjUsIDEwNzkyLCA4ODg5LCAxMjE0MDIsIDIwOTgsIDAsIDY0NzUxLCA3MDMwOSwgCisgICAgNjY2MjIsIDEyNjYyNiwgMCwgNzQzNjQsIDY4ODE2LCAxMjkxNTIsIDk4MzgwNSwgNDI5MDksIDc1NTIsIDcwMDkyLCAKKyAgICAxOTQ1NjcsIDY1Mzg0LCA3MjIzLCA0NTU5LCA5MzAxNSwgMTk1NiwgNDMxMzgsIDcwMjQsIDY1NzI4LCA0MzQ5MCwgMTIxMCwgCisgICAgMTk1MDc3LCA2NTE3NSwgMTAxODQsIDQzMTQwLCA0MzY1NCwgMCwgOTgzMjMzLCAxMjUwNDUsIDM4LCA4NTMzLCA2NjY2OSwgCisgICAgMTE5MTI0LCA5ODMyOTUsIDk4Mzc5MiwgMCwgNDM1NywgMCwgNzAyODksIDkxNzg2MywgNzQyMzMsIDk5NjcsIDc4ODg0LCAKKyAgICA0Mjg2MCwgMTE5ODM4LCAxMDk0MSwgNjU3MjEsIDY5NjIsIDAsIDgzMjc5LCAxMTM4MDgsIDAsIDExMDE0LCAxMjAxMjYsIAorICAgIDg5NDIsIDEyMDAwLCA2OTIyNCwgOTIyNjcsIDEyODUzNiwgMTE5NzQsIDY3MzYzLCA0Mjc3MiwgNDI2NTAsIDExNjUwLCAKKyAgICA1MDEzLCA5MjY2MywgNjg4MTAsIDY2MjEwLCAxMTg5MTQsIDY2MTMsIDkyNDc2LCAwLCAxMTE5MywgOTgzNzcwLCAwLCAKKyAgICA2NDcxNCwgNzE0NzksIDcwODAyLCAxMjE2MiwgMTIxMjAsIDQzNDc2LCA5ODM3NjYsIDExMDI0LCA3NDgxMSwgNjYyMjgsIAorICAgIDEwNTYzLCA5Mjk1NCwgMTI3MTk2LCA0MzUyMiwgMjQ2MiwgOTI5NTUsIDE4MzcsIDEyNTA4NiwgNjM5NzIsIDY5NTcsIDAsIAorICAgIDExMzgyMCwgNDk1MiwgNjU3MTgsIDY0NDA1LCA1NTA0LCA2NTcyMCwgNjU3MTQsIDY1NzE1LCA2NTcxNiwgMTI4MDI2LCAKKyAgICA3NTAxNiwgMTI3MTE5LCAzMTA5LCA2Mzk3NSwgNzQwMjgsIDEyNzIxMywgODEwNywgNjcxNTQsIDExMjcsIDQ1NSwgMCwgCisgICAgNjM5NjgsIDEyNzgzNSwgMzQ4MywgMTE5NTkzLCAxOTg5LCA5ODMxNzYsIDY5Njc4LCA5MTA0LCAzNTAzLCA2NTM3NSwgCisgICAgNjgzMDAsIDY2OTQsIDQyNjMzLCAxODY0LCAwLCA3NDMwNiwgNDE0NDYsIDI1NDAsIDc3MzYsIDEyMTQzNCwgNzQwNjQsIAorICAgIDEyODYwMSwgMTA1MjEsIDcwNzg2LCA0MjE3MywgOTcwNSwgNzQxMjQsIDg2MDQsIDY5NTUsIDEwOTE2LCA0MzY4NCwgNjE0OSwgCisgICAgMzg4NywgMTk5NTYsIDE0MTEsIDI4MjQsIDAsIDEwMTA2LCAxMjc4NjIsIDE0MDMsIDEyNTA1MywgMTM0NywgOTYzMSwgCisgICAgNzQ0NDQsIDk4Mzc1MywgMTI3OTk3LCA5Mjk1MSwgNzQ4OTcsIDg2NDAsIDAsIDI1OCwgMTY1NCwgMCwgMCwgOTgzNDc5LCAKKyAgICA0MzMxNCwgMCwgMCwgNDA0MiwgMTE0NzgsIDI4NzMsIDYzOTc3LCAxMTUyMiwgNDE2NjgsIDg1NDksIDEwODYxLCAxMjEwNTMsIAorICAgIDYzOTc2LCA3MDM3NywgNjg2MjMsIDY3MDgyLCA2NzA4MSwgNDEzOTEsIDY3MDg0LCA4MzQ2NSwgMzc2LCA2OTg3LCA5MjIxLCAKKyAgICAwLCAwLCA4ODIzLCAxMjg2OTcsIDEyOTQzLCA2NTE4NSwgNDE4NjksIDEyNjE5LCAxMjgwNjcsIDEwMTU0LCA5ODMwNDMsIAorICAgIDc0NDM5LCAyMDM5LCAwLCA3NDQ2LCAxNjg0LCA2Mzk3OSwgMTA5NzQsIDQ1OCwgMTIwNjIwLCA4Mjk1MCwgNjk3OTEsIAorICAgIDEyNzE2MSwgMTE5MTYsIDY1MDE2LCAwLCA2OTY3MSwgNDIxMTUsIDEyMTA1NywgMTIyODgsIDc4MDU3LCA2NzA4MCwgMTQ5MywgCisgICAgNDIxMTEsIDc1NTMsIDQwOTcsIDEyODE5OSwgMTMwODAsIDAsIDY1ODA4LCA2NjEwLCA2MDMwLCA4MDU5LCA3NTA4LCAKKyAgICAxMzEzMSwgNjcwNzQsIDY3MDczLCAxMjg1MDYsIDg3OTQsIDQxMjc4LCA0MTYyOSwgMTIxNTQsIDc1MDczLCA0MTI3NywgCisgICAgNjQ2NTgsIDk4MzQ1NiwgNjQzODAsIDY2MjUsIDQyOTExLCAxOTkwNCwgMCwgMTIxMzA1LCA3MTE5MywgNjUzNzEsIDcwNzgsIAorICAgIDEyODY5OSwgODMzLCAxMjgyMjgsIDYzNjksIDE5NDgxNSwgMTA5NzksIDQxOTUzLCA5ODMzNzAsIDQxNDM0LCA2MDYyLCAwLCAKKyAgICAwLCAxOTkxNiwgNjkxMywgOTMzLCAxMzQxLCA5ODQyLCA2NzIwLCA2NTc0NCwgNzEyMDAsIDk4MzU5MiwgMTIxMjIzLCAKKyAgICAxMjY1NjcsIDc0MDUsIDEwMTA1LCA2NTgxMCwgMCwgNDE2MzIsIDc0OTMsIDU1MjkwLCA5Mjg5MCwgNDE2MjIsIDAsIDAsIAorICAgIDExOTU1NiwgNzQ1ODQsIDc2MzIsIDk3MTYsIDE5OTU0LCA5ODA1LCA1OTkwLCA5MDAsIDAsIDYzOTU3LCAxMTk2MzgsIDAsIAorICAgIDM2MTIsIDAsIDY0Mzc2LCA5Mzk4NywgNTM4OSwgOTI1OTcsIDAsIDY1OTM4LCAyODM5LCA5NjIxLCA1ODIsIDAsIDc0MzY4LCAKKyAgICAzNzQ5LCA2OTQ5LCA3NTY5LCA3NDA2MSwgODMyMjIsIDgzMjIzLCA2OTU2LCA0NDAzLCAxOTk2MiwgNjU1NTksIDMyOTksIAorICAgIDEyMTAwNSwgMTk0OTM5LCAxMTkxMjcsIDkwMDIsIDAsIDc0MzcyLCA3NDIzNiwgODQ3OCwgNzU5OCwgNTQ2LCA0MjQ2OSwgCisgICAgNjU1NjksIDE5MTgsIDk1NDIsIDQ3MiwgNzcxNiwgMTAzMTksIDEwMzgzLCA2OTk2LCA0MzA3NywgNjM5NTIsIDg0MjUsIAorICAgIDM2MDIsIDgzMjgsIDExNzY0LCA4MzE5OSwgODMyMDAsIDY1MDY1LCA0MTE4MywgMTI5MDcsIDEwMjcxLCAxMDI4NywgNjg0LCAKKyAgICA0MzUyNSwgMTI3OTk2LCAyODU0LCA4MzIxNCwgNDU5MiwgNjU3NTUsIDgzMjE3LCA2NzEyMCwgMTE5NjMsIDQzNjIwLCAKKyAgICA2NzExNywgNzgyNDksIDY3MTIzLCA2NzEyMiwgNjcxMjEsIDk4ODEsIDQzMTE1LCA2NTc1NywgMzQxNSwgNjk2NzcsIAorICAgIDY3MTE2LCA4NjQ4LCAxMjgzNzcsIDY3NDEsIDQzMDQ3LCAxMTk5MDAsIDEzMTgwLCA3ODA3NywgNDE4LCAxMjA2NTMsIAorICAgIDY0NDk1LCAxMDI5NSwgMTAzMjcsIDEwMzkxLCA0MTc1MiwgNjY4NDYsIDg2NDEsIDQxNDQ5LCA4MzE5NCwgNzQxMDAsIAorICAgIDgzMTg2LCAxMDkxMSwgNjk0MiwgMTIwODc5LCAxMDI0LCA0Mjg0OSwgNDE3NTEsIDY5Nzc2LCA4OTQxLCA5ODM1NTYsIAorICAgIDQ1NTQsIDY2ODkyLCA5MDIzLCAxMTY4NSwgMTIxNDc2LCA5OTI4LCA2NzEwOSwgNjY4NjUsIDExNDM3LCA0Mzc0MSwgCisgICAgNjcxMTMsIDY3MTEyLCA2Mzk2NywgMTI5MDU2LCA0MTIwNiwgMTI2MjQsIDkwNDksIDQxMTg1LCA0MzE2NiwgMTIxMjc1LCAKKyAgICA4MTU5LCA5MjYxOSwgMTE2ODYsIDcxNDc4LCA2NTIyNCwgNDU2NSwgNDY1NSwgMTE5NTUzLCAxMjkwOTAsIDkyMTgzLCAKKyAgICA2NDUyMywgMTAzNDMsIDEwNDA3LCA5Mjc2NCwgNjY2NzEsIDExNDY2LCAwLCAxMjgwMDMsIDQyODkwLCA3NDAxMywgMTIwNTAsIAorICAgIDY4MjAxLCAyODYwLCAwLCAxMjc5MzQsIDcwODI4LCA0Mjc5MiwgNTc0MywgMTA0MjQsIDEyMDY1LCA0Mjg3MiwgMTIxNDAxLCAKKyAgICA0Mzg3NSwgNjcxMDMsIDg4NzUsIDAsIDY3MTAyLCA2NzEwNSwgNzUzMSwgMTI4NDcsIDI0MTMsIDExODkxNywgNjc0MDQsIAorICAgIDk2MiwgMCwgMTI4NTUsIDQxMTk2LCA0MjU2NCwgMTI3OTc1LCAxNTgyLCA5ODM3MTUsIDU1MDgsIDAsIDEyMDkwNCwgCisgICAgNzQ1ODgsIDEwODAxLCA2OTg3NiwgOTIzNTQsIDExOTIwNywgNzE3MywgNDk2LCAxMDQzOSwgNDMxMywgNjQ2MDcsIDY5NjM4LCAKKyAgICA3ODYwLCAxMjgwNDksIDkwNiwgNDI3OTMsIDI4NDIsIDY0MDUsIDY0NzIyLCAxMzEzMiwgNzk4LCA2NDY5NCwgMTI4MDEsIAorICAgIDg0MDYsIDExNTMsIDgzMjYzLCA2NDc4OCwgODMyNjUsIDgwNTQsIDkxNzQsIDY3MDg3LCA2NzA4NiwgOTk2NCwgNjcwOTYsIAorICAgIDQxNjExLCA0NjQyLCA2NjU3NCwgMTE1NTYsIDQyNTEyLCAwLCA3ODg1NywgNDIwODksIDc0NjEzLCA5MDA4LCAwLCAKKyAgICAxMjY1OTIsIDE5NTA5NiwgNDIwNzksIDgzMjQ4LCA3NzkyNCwgNDI1MTMsIDc3OTI3LCA0Mjg0MiwgNzM5ODUsIDY1Mjg1LCAKKyAgICA2ODMzOCwgODMyMzksIDgzMjQwLCA4MzI0MSwgODMyNDIsIDk4MzU5MCwgMTEzMzUsIDY0MDY5LCA0MjA5MywgMzkyMCwgCisgICAgOTE3ODY5LCAwLCAxMTExMCwgODMyNTUsIDQ1ODAsIDQxOTY3LCA4MzI1OCwgNjQzODQsIDgzMjUyLCA4MzI1MywgMzAyMSwgCisgICAgNDIwMDQsIDk4MzA5NiwgODMyNDksIDQyMzE3LCA0MTk5OCwgMCwgNjk0NiwgMTk0NzU1LCA5Mjk2NywgMTI4NDU1LCAKKyAgICAxMjgxOTMsIDY1MjA0LCAwLCA2ODExMywgNDI2OTAsIDk4ODAsIDQyMDEwLCA3NDgyNCwgNjQ1ODksIDEwMTExLCA2NDg3NSwgCisgICAgMTI3ODgwLCA2ODAzNSwgNDM5OTgsIDExMzYwLCA4MzIzMywgNzQxODIsIDgzMjM1LCA4MzIyOCwgNDIxNDksIDgzMjMwLCAKKyAgICA2ODUwOCwgOTE3OTkzLCA2NDk0MSwgNzc5MTksIDEyMDQyMSwgMTI4MDc3LCA3NDg4NSwgNTUyNDcsIDQxMTAsIDY2MDA1LCAKKyAgICA2OTU5LCAxMDkyOSwgNDI5MDcsIDEyODA4MCwgNjY3MDMsIDc3OTIxLCA4NjE3LCA0MTk4MiwgNjAyNSwgNjkyNDIsIAorICAgIDEyMTA2OCwgMTk0ODU0LCAxMjUxMzksIDAsIDk1OTcsIDQyMDk5LCA0MzE3MiwgOTgzMzc4LCAxMDExNywgOTgzMTY5LCAKKyAgICA5MjI5NywgNDE2MzYsIDE5NDg4OSwgNzM3MzgsIDEyMDY4MSwgODMwMSwgMCwgMCwgMTg3LCAxMjgyMzcsIDY1NjY5LCAKKyAgICAxMjgzMzksIDQ5NjMsIDAsIDY4NzY1LCAwLCA4OTY0LCA2NTY3NiwgNzc3NSwgOTgzODQ5LCA0MTk0OCwgMTI1MDAzLCAwLCAKKyAgICA4MzIzNiwgNDE5NDIsIDY1NDQ5LCAzMTYwLCAxMDA4MSwgMTMyMjYsIDQyMTIxLCA0MjQ3NSwgNDI2NjMsIDEyMDYxNiwgCisgICAgNDE3NjYsIDc0OTQ4LCA2NTg4MiwgNzg4NDksIDQxNzYwLCAxMTg5LCA5MDUsIDQ4MCwgMTA5ODUsIDQxNzMzLCA2Nzg1OSwgCisgICAgOTYyOSwgNjc0MiwgMTc0NSwgNDM2MjUsIDczODM1LCA3ODg4LCA4MzQwNSwgMzk4MCwgNzAzNzMsIDQyNjU2LCA0MTUwNywgCisgICAgODgwNiwgNzAyMywgMCwgNzQyNzksIDk0NDcsIDc4NjUxLCA3ODY3LCA2OTIxOCwgNjIzNiwgMTI3MTYyLCAwLCAxMDUwNSwgCisgICAgMTI2NjM4LCAxMjg1MSwgODM0ODksIDM0OCwgNTQ3NCwgMTIxMzgyLCAzMTAzLCAwLCA0MTc1MywgNzExMDksIDEyODYwNCwgCisgICAgMCwgNzg4NDQsIDc4ODQ1LCA0MTczOSwgNzg4NDMsIDQyNTE1LCAxMDkzMSwgNDE3NTYsIDQzMzQ3LCA0MjU2MCwgNTM5MSwgCisgICAgNDE3NDYsIDExOTE0NywgOTI1OTEsIDQxMjU5LCA1NTYxLCA2OTkzMCwgMjY5MSwgNjg3NTIsIDY1NTUzLCA3OTMzLCA1NTYyLCAKKyAgICA2OTgwMCwgMTI4MjY1LCA0MTI2MiwgMTI4MTQ2LCA2NDQyMSwgNzQ4NDYsIDQxMjUxLCAxMjcyNDIsIDAsIDM5NzksIAorICAgIDcxMjQ4LCAxOTQ4OTksIDY4MzMxLCA5MTc5MTIsIDY4ODQ3LCA5ODM2OTcsIDgzMzgyLCA3NDYzMywgNDEyNjYsIDY4ODM2LCAKKyAgICA2NjU2NiwgMTI4ODM2LCAxMDU4NSwgNjU3NDEsIDQxNzM3LCAyMjc1LCAyNjY2LCAxMjEyMzIsIDQxNzM4LCA4MzEsIDQxOSwgCisgICAgMTMxMjYsIDEwNzE2LCA4MzQwMCwgNDI4MjIsIDAsIDY0MzQsIDc0ODU3LCA2OTM5LCA3NzY2LCA2NDMyLCAxMjgxMDYsIAorICAgIDY5OTMyLCA5MTYsIDc2OSwgNDE3NDIsIDExOTY4LCA3NDgwNSwgNjQzMywgNTU2MywgNTQ3LCAxOTQzLCA2NDM5LCA1NTYwLCAKKyAgICA0OTk0LCA0ODcsIDEyNjUzNywgNDQ5NywgMzc1NCwgODMwNzIsIDgzMTA1LCA5MDM5LCAwLCA0MTc3NiwgMCwgODcxNiwgCisgICAgMTU5NSwgNDE2MTUsIDEyMTAwMSwgMCwgNzQyNjAsIDc0ODYwLCA0Mjg1NCwgNDMyMTksIDgzMzExLCAxMjExMDcsIDEyMTg1LCAKKyAgICAxMTM4MTAsIDcwMDcyLCA2ODM1NSwgNjgzNTcsIDY4NDIxLCA0Mjg1NiwgODYzNCwgMCwgMTE5OTg4LCA0MjA5LCA3NTA1NywgCisgICAgNjg4MzIsIDY1ODc5LCA0MTUzOCwgNjU2MTIsIDY4ODIyLCA2NjksIDU2NzksIDY4ODEzLCA2ODgxNSwgNjg4MTEsIDY4ODEyLCAKKyAgICA2ODgwNCwgNTY3OCwgMTE4MjEsIDY4ODAyLCA2NzExLCA0NjAsIDEyMTUxMywgMCwgOTgzNDYzLCA3MDExNCwgMTIwNzQ3LCAKKyAgICAxOTQ3MTgsIDEyMTUxOSwgNzgwNTAsIDExOTAyMiwgMCwgMTIxNTE1LCAxMjE1MTQsIDc3ODIsIDkwNDQsIDQ5NzQsIAorICAgIDExNzYwLCA3ODQ5NCwgNzU3NywgNjU3MTEsIDQxOTEyLCAxMjE2LCAwLCAxMjcwMTcsIDU3OTIsIDEyNjY0MywgMTI4MzE5LCAKKyAgICA3ODUwMSwgMCwgMjkzMywgMTIyNDQsIDk4MzcwMiwgNTY4MywgOTE3ODk2LCAxMjA4OTUsIDc4MTE5LCAxNTQ5LCAwLCAKKyAgICA5ODMyMjMsIDEyMDM5OCwgNTY4MiwgNjIwNiwgODY3MCwgMTAyNTYsIDU2ODAsIDY5OTM1LCAxMDAwMSwgNjcyMzcsIAorICAgIDY5NzY4LCAxNDQ5LCAxMDI0MSwgNzgyOTAsIDExOTU4NywgMTk0ODkxLCAxMDU1MiwgNjQzNDIsIDQxOTIyLCA3MDMzMCwgCisgICAgODU4NCwgNjgwMzAsIDU1NjcsIDI3MTcsIDgzMTc5LCA3MTQ0OCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgCisgICAgOTE3NjExLCAxMjA4ODEsIDAsIDY1NzA4LCA2NTcwOSwgNTU2NiwgNjk4MDMsIDY1NzA0LCA2NTcwNSwgMTE5MDQsIDQyODc1LCAKKyAgICA0MzM3MywgNDI1MzksIDU5NDIsIDg0NjgsIDEyMDU2MSwgMTAzNjEsIDEwNDI1LCA2NTY5NywgNjU2OTgsIDY1Njk5LCAKKyAgICA2ODA1MiwgNjY1OTgsIDExMDU5MiwgNjQ2NjQsIDEwNjQ3LCA3ODcwMiwgNzg3MDMsIDc4NjkwLCA0NTcsIDc4NTAyLCAKKyAgICA2NTcwMSwgMTkzNCwgNDMwMDYsIDgzMjgwLCA4ODAyLCA3ODcxMCwgNjUxMzAsIDExNzQ3LCA3ODcwOSwgNjA4NywgNzg3MDUsIAorICAgIDc4NzE2LCA0MTc1NywgNzg3MTEsIDgwNDMsIDg5NTAsIDY1Njk0LCA2NDQ4NSwgNDM1MzQsIDEwNDU3LCAwLCAxMTk2MSwgCisgICAgNzg3MjUsIDY2ODUwLCA3ODcyMywgNzg3MjAsIDc4NzIxLCAxMjc4OTksIDY1NTE1LCA5NDk5LCAxMDAzNSwgMTMwNjksIAorICAgIDcxMzA5LCAwLCA5ODg5LCA2ODE4NCwgNDI4MDYsIDEyNTA2MSwgNzI1NiwgMCwgNjgwOTQsIDE2NjcsIDQyMTYxLCAKKyAgICAxMjA5ODEsIDQyNDI4LCAwLCA2OTM0LCAwLCAxMDgwMiwgNjQ4NjEsIDY1NTYsIDc4MzkwLCAwLCA4MTAxLCAzNjEwLCAKKyAgICA2ODQyMCwgNDE3NDgsIDQ5OTUsIDk1NSwgNjU5MDcsIDExOTIwOCwgNTM1MCwgNjQzMzksIDc4MzA2LCA2NDU0OSwgMTA4NzUsIAorICAgIDEyNTA1MiwgNTQ3NywgNjU2OTIsIDAsIDEyODUzMiwgMTIwMzk3LCAxMjg5NiwgMTA0NTYsIDY4Mjk4LCAwLCAzODc0LCAwLCAKKyAgICAwLCA5ODM2MTksIDEyMDMzMSwgMTI4NzczLCAxMTM2NjUsIDY1NjAzLCA4MzI3MiwgNjU2ODcsIDAsIDQxMDM4LCA3NDAwOSwgCisgICAgOTIwNywgNDIyMzksIDg1MzYsIDc4NzQwLCA3ODMyNCwgNzg3MjYsIDc0NDMyLCA3MjQsIDgzMDU4LCAxNDU1LCA3ODc0OSwgCisgICAgNzE4MywgNjQ1ODMsIDc4NzQ3LCA2ODQ0MywgNDE3NSwgNzg3NDEsIDQzNjE0LCA2OTgwMSwgOTM5LCA3NTAyMSwgNDM1MjAsIAorICAgIDY4NjEzLCA3NDU2OSwgOTE3OTU4LCAwLCA3MDE2OCwgNzg3NjQsIDc4NzYwLCAxMDc4OCwgNjA4OCwgNzg3NTksIDc4NzU1LCAKKyAgICAxOTAsIDExOTg5OSwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCAxMjEzMDMsIDkyMjYxLCA2MzcwLCAxMjUxMjgsIAorICAgIDc4MjcsIDY4NDQxLCA2OTY1LCAxMjg1ODEsIDEyODg2OCwgMTMyMDEsIDEyODIwNSwgNjk4OTYsIDc4ODY4LCA3NDM4MiwgCisgICAgMTE4NDEsIDc5MTgsIDczOTg4LCAwLCAxMTM2NjgsIDkxNzg4NCwgMTcyOCwgOTgzNzA1LCA0Mzc2NCwgMTc4LCAxMjk3MiwgCisgICAgNzQ2MjAsIDExMzY3MSwgNzExMDMsIDExMTY4LCA5ODMzODMsIDExMzY3MiwgNzgzMjcsIDc1MDQyLCA2NTY5MCwgODM4MiwgCisgICAgNzExMDcsIDExOTA1NCwgMTk0OTY4LCA5MjUyLCA5MTc4ODksIDQ2NTIsIDY4MzcxLCAwLCAxMjEzMjcsIDc0MDcwLCAKKyAgICAxMzA2NSwgOTkyMywgMTA4MDYsIDE5NDU5NiwgMTE3NjMsIDcwMDE2LCAxMjA2ODgsIDY3MjMsIDc4MTg3LCAwLCA2OTkzLCAKKyAgICA3MTA0NCwgMTIxMzEyLCA4MzMzLCAxMjEzMjksIDAsIDExMzkwLCAwLCA3NDQ2NCwgMCwgOTIzMjAsIDc0MDgwLCA5ODMzMTcsIAorICAgIDY5OTExLCAxMTkxMCwgOTI1NTksIDgyNzgsIDg5NjMsIDQwMzQsIDEyODU2MCwgOTgzMTEzLCA2NTM0NCwgMTIwNTE3LCAKKyAgICA0MTc0NywgMCwgMTI4MTEwLCA4Njc3LCAwLCAxMjcwNywgOTM1MCwgNjYwMzcsIDEyODE4MCwgODgzNiwgMTIzMTUsIAorICAgIDEyNzQ3LCA4MzAwLCAxOTQ1NjIsIDEyNDk4NCwgNzQ5MSwgODg1NiwgNzEzNjEsIDAsIDQzMTUwLCAxMjc3NjgsIDEyMDQwNCwgCisgICAgNjUzODksIDEyMDQwMiwgMTIwNDAzLCAxMDgxMywgMjU5MiwgMTI4NTMsIDQzMjY5LCA3MjYzLCA4MzMwOCwgNjUzNiwgCisgICAgMTIwMjM4LCA3MTg5MSwgNjU1MTYsIDEyMzIxLCAxMjAzOTEsIDEyMDM4OCwgNTUyODcsIDEwMDA3LCAxMjAyNDYsIDk1ODgsIAorICAgIDY4NDk0LCAxNTk2LCAxMjAzODMsIDQxOTk0LCA2NTgwMSwgMTI4ODA4LCA2ODM4LCAzNTYxLCAxMTk4NjcsIDAsIDEwNjEzLCAKKyAgICA2Njk3LCAxMjgwNSwgNDE5MjgsIDQwOTgxLCAxMDgwNCwgNzg0MDksIDUwMDYsIDY0MzI4LCAwLCA5OTMxLCAwLCA4ODI1LCAKKyAgICA3NDU1NSwgNjU5NDAsIDQzMjU5LCAxMjY1ODYsIDYxMDcsIDgzNDU1LCAxMTkxNzcsIDc3OTQxLCA3ODQwMSwgMTE5MjcwLCAKKyAgICAxMTc4MywgMzM1LCAxMjAyMjcsIDY0Njg5LCA0MzgsIDQ1MTAsIDU3NjUsIDg3MjEsIDExOTU3MCwgMTE5MjI3LCA2MDkyLCAKKyAgICAxMjg0MCwgNDMxMTIsIDg4NzYsIDEyMDIzMSwgODA5NiwgMTAyODQsIDEyMDkzNSwgMCwgMCwgMTAzODAsIDg3MzMsIAorICAgIDEwMzE2LCA3MDEyMSwgNDE2MDIsIDkxNzU3NSwgOTIzMDgsIDc0ODMxLCA5Mzk4NCwgMCwgNjg0ODIsIDY1Mzk5LCAKKyAgICA5MTc4MjAsIDY0NTkxLCA0MjQwNSwgODM0NjYsIDEyMDgyMCwgODQzLCAxMTU0MSwgMTI4MzI2LCA3MDMyMSwgMjA2NSwgCisgICAgNDE5MzUsIDc0NDk2LCA0MTkwMiwgMCwgOTgzMzA2LCAyMTUsIDQxMjU4LCA3Nzg3NSwgNDMxNTksIDE5NTMsIDk1NzksIAorICAgIDQxOTM4LCAxMjU2LCAzOTEwLCA5NDA3LCA2MjQyLCAwLCA4MzQ2NCwgNDEyNTcsIDQxOTAwLCA4Njc1LCAxMDcwMCwgODgwNSwgCisgICAgMTc0MiwgMTEzNzIyLCA5MzMzLCA4MjAyLCA3MjM5OSwgMCwgOTgzMTk3LCAxMjcyNTIsIDAsIDczODgyLCA0OTksIAorICAgIDk4MzA0OSwgNDM0NjcsIDAsIDQzODE4LCA4MzQ4MiwgMTcxMiwgNTkzMiwgNzc4NDUsIDQxNzYyLCA5ODMxMDMsIDAsIAorICAgIDExOTY3LCAxNzc1LCAxMjUwMDYsIDc1MDA5LCAxMTExOCwgMTIxMzkxLCAxMjgwMDksIDk0NTgsIDkyOTM1LCA2NDcwLCAKKyAgICA5MTgwLCAxMjAzODAsIDQzMTc2LCAxMjgzMDcsIDAsIDQyNzgyLCAwLCAxMjQ5OTksIDk4MzEzNSwgMTI4MzA5LCA3Mzg0OSwgCisgICAgMTIwNjY5LCA5NDE0LCA3NDY0NywgNzM3ODIsIDczOTY5LCA1NjUsIDQyNDg0LCA1Nzk0LCAyMDEsIDI2NjIsIDQyMjkyLCAKKyAgICAxOTQ4NzAsIDgyNTQsIDAsIDEwOTc1LCA0MzUxOCwgMTIwNjI1LCA3NDc2MywgMTAyMiwgNDEwOCwgMzg4MCwgNzQyNDcsIAorICAgIDEyNzE1MywgMCwgOTIyNjMsIDkxNzk4MCwgNzUwNywgOTgzMTE4LCA0MzE0OSwgNzEwNTksIDY1MDMxLCA3OTYxLCAxNjM2LCAKKyAgICAwLCA2NTAyOSwgNjUwMjQsIDExOTA5OSwgMTI0NzMsIDY1MzQsIDEyMDYzMywgOTksIDk4LCA5NywgNjgyMjYsIDY3NTg0LCAKKyAgICA0MDQ5LCA3NDE2MywgMTI3MDY1LCA3MDkwLCA4MzI3NCwgNzg5MiwgMTI3MDY0LCAxMDc3NywgOTE3ODAzLCA2NTMxMCwgCisgICAgNjU1NjIsIDY2NTk5LCA2NjcyMiwgMTk0OTU1LCA4MDM5LCAzMzYzLCA2NjU5NCwgNDM0MzQsIDEyNzA2MiwgNzExOTEsIAorICAgIDEyNTk2LCA2NjU5NSwgNDIyNTgsIDQyNTcwLCA1NTkzLCAxMTkxNDgsIDEyMDUzNCwgOTI0MjUsIDEwMTAwLCA2MDYxLCAKKyAgICA2NDg1NCwgMTE5LCAxMTgsIDExNywgMTE2LCAxMjk5OCwgMTIyLCAxMjEsIDEyMCwgMTExLCAxMTAsIDEwOSwgMTA4LCAxMTUsIAorICAgIDExNCwgMTEzLCAxMTIsIDEwMywgMTAyLCAxMDEsIDEwMCwgMTA3LCAxMDYsIDEwNSwgMTA0LCA2NDM2LCA3Mzk3NCwgNTM0LCAKKyAgICA0MTIxMiwgNjc3MTMsIDE1MzYsIDY0MDkzLCA3Mzk3MCwgNzc5MzAsIDEyMTA5MywgMCwgNjAyMCwgMTI3MTYsIDEyNzExMiwgCisgICAgMTI3NDQsIDQ3NSwgMTIwMzk0LCAxMzI2NiwgMTI3ODEzLCAxMjcxMTEsIDc4ODQyLCA3MzkyNiwgNjYyOTEsIDEwNjQ1LCAKKyAgICAxMjEyLCA2NTQzLCA5ODMzMDksIDgxMzQsIDQyOTM1LCAyOTEzLCA3Mzg3MCwgMTI3MTEzLCAxODY2LCA5ODMyMjksIAorICAgIDcxODkyLCAxMjA5OTYsIDg5MjMsIDE2NDUsIDEyMDU5LCA2NjU4NSwgNzEyOTcsIDMxOTYsIDcyNDA0LCAxOTQ4MjcsIAorICAgIDU5MzUsIDEyNTAsIDEyNzA2NiwgODE3NCwgOTc4NywgNjczMywgOTg1OSwgNzkxNiwgOTg2MSwgOTg2MCwgNTI1OCwgMTg4MiwgCisgICAgMTg5MiwgNjczMSwgMTA4ODIsIDQwNSwgMTE0NTQsIDczOTExLCAxMTM3ODcsIDczODE5LCA0MTE2OSwgODkzOSwgNDEyNDUsIAorICAgIDEyODc3NSwgNDExNzAsIDE0NTQsIDExMzY5LCA2NDc3LCAxMjE1NywgMTIwODYxLCAwLCAwLCA0MTE3MiwgNzg1NSwgMCwgCisgICAgNzE0NzIsIDEwNDgwLCA0MzI1OCwgMTI2NTk2LCA3NzkzNiwgODI2NCwgMTI2MTAsIDk4MzMxMCwgNjQ1LCAxMjY2MTYsIAogICAgIDc2MDksIDQwOTczLCA2OTk0MywgNzM4MzMsIDY5OTQ4LCA1ODI0LCA5ODQsIDc3OTE4LCAxMDY4OCwgNTg1MSwgMCwgNzcyOSwgCi0gICAgNzM5ODIsIDEyMDUxOCwgMCwgMTk1MDg2LCA0MzM2OSwgMCwgMTI4MTQwLCA2ODQxNSwgOTgzMDkzLCA0NTM4LCAxMjA0MDYsIAotICAgIDQzMTQxLCAwLCA5ODMyMTAsIDc0MjE0LCA3Mzg4NiwgMCwgMCwgMTE4OTAyLCA0MzAwNSwgNzg0NDgsIDk1NTIsIDAsIDAsIAotICAgIDk4MzE1OSwgMTI5OTcsIDAsIDAsIDAsIDAsIDIzODEsIDEyODgzLCAxMDk5NCwgMTA1MjksIDQxOTA2LCAwLCAwLCAwLCAKLSAgICAxMjQyNSwgMTA2NjEsIDEwODU2LCA5NjE0LCAyNDI4LCA0MTQ3OCwgODU4MiwgMTAwNjQsIDczOTMwLCAwLCAwLCAwLCAKLSAgICA2NDg5NiwgMTE5MTYyLCAxOTUyLCA5MjE4MSwgODQ1NSwgMTAwODIsIDExNTc1LCA5ODM0OTAsIDExOTU2NiwgMCwgMTI4MDgsIAotICAgIDEyMTgzLCA2MTQ1LCAxMTg5NTUsIDY0OTI5LCA5MjQzMywgMCwgOTgzMTkzLCA0MzE4NiwgNDI1MDksIDAsIDM5MjIsIAotICAgIDkxODcsIDk4MzYxNCwgMCwgMTAxOTEsIDExOTA1NywgMTE3NTIsIDMzNTMsIDkzNTgsIDAsIDcxMzY2LCA2NjY4MCwgCi0gICAgMTIwMDkwLCA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgOTgzMjk3LCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCAKLSAgICA0MTAyNywgMTIwMDg2LCAwLCAxMjAwODgsIDczNjYsIDcwMTksIDEyMDA3MywgMCwgMTE3NTEsIDEyMDA3OCwgNzgyOTQsIAotICAgIDY0NjU3LCA4NjU3LCAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIDEyMDA3MSwgMCwgMCwgCi0gICAgNDMxNTQsIDQxMDI5LCAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDk0MDc3LCAxMTI5NCwgMCwgNjY2NjUsIDc4NTEsIDAsIAotICAgIDgzNzUsIDg2OTksIDAsIDQyNTI0LCAwLCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgMTI4MDk1LCA5ODM4NjQsIAotICAgIDAsIDgwODgsIDAsIDc0MDEyLCA5MjUwMCwgMCwgNDQzOSwgNjkyNiwgOTgzMDQ3LCAxMjkyNCwgMTI4MjI3LCA0MjM2OSwgCi0gICAgNDM1MCwgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgOTgzMjgzLCAwLCAwLCAKLSAgICA2NTgyNSwgOTU3NywgNjgxOTksIDAsIDY0NjcwLCA5ODMxMjEsIDc4MDU2LCA2NzkzLCAxMTI5NSwgMCwgNzgwNTMsIAotICAgIDczODcyLCAwLCAwLCAxMDkwMiwgMCwgMCwgNzgwNzAsIDc4MDY4LCAxMDQ3MiwgMjk5NSwgMCwgMCwgNjQ2ODIsIDIzNzEsIAotICAgIDc4MDY5LCAxMjA4MDgsIDI1OSwgMTAwOSwgOTIxNzEsIDI0MDIsIDIzMzMsIDY0NDAsIDE5NDc0MSwgMCwgNjUxMjUsIAotICAgIDQxMjQ0LCAwLCAxMzI3MSwgOTEwMywgMjI3OCwgMCwgMCwgMCwgMCwgMTAyMTksIDAsIDAsIDAsIDAsIDQzMTc4LCAKLSAgICAxMjcwNzAsIDQxMjYxLCAxMTkzNjIsIDQzNjQwLCA4NjEzLCAwLCA5NDA0OSwgNjczNiwgMTk1MDkyLCA0MTQ5MiwgMTIwMDUsIAotICAgIDY5OTI3LCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCA3ODA3NiwgMTk0NzM4LCAKLSAgICA3ODA3NywgNjk5MjgsIDAsIDc4ODAwLCA5MjY1MywgNjQ0NDUsIDQyNjY4LCA2NjM1LCAwLCA2MTY0LCA2NTE3MCwgMCwgMCwgCi0gICAgNzY3NiwgMTE2NjQsIDAsIDk4MzY1OCwgNjk3MDcsIDAsIDExODgxMiwgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgCi0gICAgNzgwNDUsIDkwODgsIDAsIDY0NTQ1LCAxMzk2LCAwLCA3NTQ2LCAzODQ3LCAxMjcxNzcsIDEyNzgzNSwgNDk4NSwgMTMyODgsIAotICAgIDY3MiwgODA5OCwgNDMxOTYsIDE5NDc0NiwgOTgzMDk2LCAxMjgxMjYsIDQyNjU1LCA3NDA0MywgNjUwNzIsIDE1NzcsIAotICAgIDExNzcyLCAxMzA0MSwgNTkyOCwgNDUyNSwgMTA2NTgsIDY1OTExLCAxMjY2LCAxMDE4MCwgMCwgMTI4NTg0LCAxMjYyMiwgMCwgCi0gICAgMCwgMCwgMTk0NzE0LCAxMjcxMzksIDEzMzEwLCA3NzMsIDE5OTMzLCAxNTM5LCAwLCAxMjY5ODMsIDQyNzMxLCA2Nzk3MiwgCi0gICAgMCwgMCwgMCwgMzA1MSwgNTg2MiwgNzgyMywgOTI0NzgsIDAsIDEyMDQxMSwgMzI1MCwgNDM5OTEsIDY5Njg3LCA2NjY0OSwgCi0gICAgOTUxMCwgNjYyMzcsIDk4MzMwMiwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgMzUwNSwgODcwNywgCi0gICAgOTE3OTY4LCA2NzI1LCAxMjgwMTMsIDkxNzk3MSwgOTIzMTQsIDM0NzEsIDkxNzk3MCwgNTQ3OSwgODgyLCA2Njg2LCAKLSAgICAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCA5ODMzMDYsIDkyNjk2LCAwLCAwLCAwLCAxMjg1MjMsIDMyMjUsIAotICAgIDkxNzk5NiwgNDQzMywgNDExNTYsIDQzOTczLCA0MzE3MywgMTQ0MywgNDM4MSwgMCwgMCwgMTA5MjYsIDExNzU2LCAxMTc1NywgCi0gICAgNjQ4NzksIDkxNzk0OSwgOTE3OTUwLCAxMjc4NDgsIDEzMjI3LCAwLCAxMDAyMSwgNTE2MCwgMTM4NywgMCwgOTE3OTUzLCAKLSAgICA0MTQxOCwgMCwgNjU5MTQsIDY3MjEsIDIxNywgOTE3OTU1LCA5MTc5NjAsIDkxNzk2MSwgMTA0NDMsIDEwNzg5LCA0MTE1OCwgCi0gICAgMTE5MjU3LCA0Mjc0LCA5ODMzMDAsIDQxNDgzLCAwLCA0MTI1MCwgMCwgNDIxNzksIDAsIDU5MzEsIDExNzQ0LCA2OTIzMiwgCi0gICAgMCwgNDEyNTIsIDY2NjgyLCAwLCAxMTk2MzcsIDQxMjQ5LCAxMzY2LCA2NDYzNSwgNjUwNDcsIDEyNDY2LCAwLCAwLCA0Mzk3LCAKLSAgICAxMjgwMzcsIDEyODMzNiwgNDEyOTYsIDk1NDUsIDQxMjkxLCAxMjgwNDksIDAsIDQxNDg1LCAzNTExLCA0MTI4MiwgNTkyMywgCi0gICAgMTA0MDAsIDAsIDEyODgxOCwgNzYwLCAwLCAxMjA4OCwgNTc4NiwgMCwgNDIyNTYsIDExOTg2OSwgMTE5ODYwLCA0MTcsIAotICAgIDQxNDc0LCAxMTk1NjIsIDQxNTY1LCAwLCA1OTM0LCAxMTk4NjcsIDY2NTgzLCAxMTkyMzEsIDY0ODc3LCAyMjg0LCA2NDQ4MSwgCi0gICAgNzg2MTQsIDY2MDEzLCA0MTk1NiwgNDM0NTUsIDEyNjk5NSwgMCwgMCwgMCwgNDIyNzMsIDU4MTksIDAsIDkxNzU1NiwgMCwgCi0gICAgMTI2NjQzLCAwLCA2NTkxMCwgMTI3NzQ3LCAxMDI0NiwgMTIwODE2LCA2NTc4NSwgMTIzNywgMTAyNzQsIDQ1NTIsIAotICAgIDExOTU3NiwgMCwgMCwgMTM3NSwgNjY3MDUsIDQzNTczLCA2NTI2MCwgNDIwNjMsIDAsIDQyODExLCAxMDMxMiwgNjk4NDUsIAotICAgIDEyMDc5NCwgNzg0MCwgMCwgNDM2MzAsIDEwMjUyLCAwLCAxMjgxMDQsIDQzMTg1LCAwLCA0Mzk2LCAwLCAxMTk4ODAsIAotICAgIDEwNzY5LCA5Njc2LCAxMTkwNDEsIDAsIDk3NTMsIDAsIDg5NDQsIDAsIDAsIDEwNDczLCAwLCAwLCA2MDcyLCA0MzAyNSwgCi0gICAgMTAyOTksIDAsIDAsIDEyMDYwOCwgNjYzMjYsIDk4MzQ0NywgMTI3Nzk0LCAwLCA0MzgxMSwgOTMzMCwgMTIwNTk2LCA3MjIyLCAKLSAgICAxMDI4MywgMTAzMTUsIDEwMzc5LCA0OTk2LCA5ODM3ODIsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCAKLSAgICA3ODM0NywgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCA2NDgwNiwgNDMxODAsIDc3OTI4LCA3NDE0LCA3NzkyOSwgNDM5ODIsIAotICAgIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDQzNDA1LCAxNjAyLCAwLCAwLCA4NTIsIDAsIDEyMTYwLCAwLCAxMDIxMiwgCi0gICAgNjU0MzUsIDAsIDEyMDcxLCA5NjA5LCAxMjE1NiwgOTE3OTgzLCA5MTc5ODQsIDQzNTg2LCAxMTAzNSwgMTA0MTEsIAotICAgIDkxNzk4OCwgMTAyNTUsIDY3MTAsIDEwMjc5LCA0MTk0LCAxMDM3NSwgNzM5MDAsIDAsIDQzMTUsIDEyNjQ0LCAxMjc1MTYsIAotICAgIDc3OTM3LCA0MzYzOSwgNDMzNDMsIDc4Nzc3LCA5MTc5OTgsIDExNTAxLCA0MTE3NywgMTI4Njg5LCAwLCA5MTc3OTIsIDAsIAotICAgIDkyNDEzLCA4NzE1LCAwLCA0MTE3OSwgMCwgNDMzMTMsIDAsIDQxMTc2LCAwLCA5OTQsIDAsIDg0NTIsIDEyNzEwMywgCi0gICAgNzM5NjYsIDAsIDAsIDU5MjEsIDAsIDI1OTcsIDAsIDU5MjIsIDExODkwMywgNzc5NDMsIDQxODYsIDkyNTMxLCAxMTk5NjcsIAotICAgIDEyNzEwNSwgNjcxOCwgMCwgNDQwNiwgNzQ2MDEsIDg0ODAsIDkxOTIsIDk3NDcsIDEyNjUzMCwgNDQxMywgOTIxOTYsIAotICAgIDQyMjY4LCAzMTk4LCA1OTI0LCA1OTIwLCA5MjQ2OSwgNjkyMSwgNzgwODEsIDc0MDA3LCA0Mjg2OSwgODQxOCwgMTE2ODEsIAotICAgIDQzMTY5LCAxMDE3NiwgMCwgNzQyLCAwLCAyODkzLCAxMDc3MiwgNjUyNzYsIDU5MzcsIDE5MTQsIDI1NTMsIDExNjgyLCAKLSAgICA2NzU2LCAxMjg1OTAsIDEyODY0NiwgODM2MywgMCwgMjk5MywgNzc3MiwgMzkxNiwgNDMwMSwgMTIwNDk0LCAxMTQxLCAKLSAgICA0MjQwNywgODE1OSwgNzE4LCA3NTcyLCA5NzMsIDAsIDEyMDcxOCwgMzIzNSwgMjQxNSwgNDMxNjQsIDAsIDgwMTgsIAotICAgIDQyMzMzLCA3NDc1NiwgMTA2NzUsIDY5MzcsIDQyNDg2LCA0MzM4MSwgNjUzOTAsIDEwMDY3LCAwLCAxMjAyLCAwLCAwLCAKLSAgICA2NTg2MywgMCwgMCwgOTQwMTMsIDc4MTgyLCA2NDU0MiwgMzI2MCwgNzM4MjksIDY1Mzg4LCA5OTQ1LCA4NDE5LCA3ODA0MiwgCi0gICAgNjczOCwgMCwgNDM2ODEsIDY5NzI4LCAyMDU5LCAwLCAwLCA1NTIzNywgMTQzMSwgMCwgNjY1NjUsIDEwODIxLCAwLCAKLSAgICAxMjgwNCwgMTI4MDc2LCA4MjI5LCAxMjM1LCAzMzA3LCAxMTQ3MiwgNzgwODksIDc4MTg0LCA0NTQ0LCAwLCAwLCAwLCAKLSAgICAxNzQwLCA3ODA5NywgODc1OCwgOTg1LCAxMjg3MiwgNjQ1MTEsIDc4MDk0LCAxMjA2OCwgNzgxMDIsIDAsIDEwMTQxLCAwLCAKLSAgICA2Mzc2MSwgODc4NSwgNDQ3NiwgNzgxMDksIDYzNzYzLCAxMjY1NSwgODkwNywgNzgxMDUsIDc4MTA2LCA3ODEwMywgNzgxMDQsIAotICAgIDAsIDExOTU3MiwgMTA2NjUsIDY0NjE2LCA0MTU3MiwgMCwgMTI3MTYwLCAwLCA0MTU3MywgMCwgMzkzMSwgMTIwMjk1LCAKLSAgICA3NDE0MywgMCwgMCwgMCwgNzg0NjAsIDExOTgyLCAwLCAwLCAwLCAxMjgwMTYsIDY0NDg0LCAwLCA0MTE2NywgMCwgNDE3MzUsIAotICAgIDk0MDE5LCA3MTcsIDEwNzU0LCAwLCAwLCAxMjc5NzksIDAsIDYzNzY3LCAwLCAxNzgwLCA2OTM2LCAwLCA5MjI1NCwgODE5LCAKLSAgICAxMDYxMSwgOTY5NCwgMTI2OTc4LCAwLCAwLCAwLCAwLCA4MzQzLCA4MzQyLCA4MzQ1LCA4MzQ0LCA2NTc4LCA3MDA5LCAKLSAgICA3NTIzLCA2OTIyLCA4MzQ4LCA4MzQ3LCA3NTI1LCAzMzQ2LCA4MzM5LCAxMjgxNjUsIDEyODMzOCwgNTc1LCAyNjgsIAotICAgIDc4MTExLCA4NTYzLCA1NzU0LCAxMjAzNDMsIDQxNTQxLCA2NTU2NSwgODMzNiwgNTkzNiwgNzI5MCwgNzgxMTcsIDgzMzcsIAotICAgIDgzNDEsIDMwOCwgMTEzODgsIDc1MjIsIDEyMDcyMSwgNzgxMjMsIDY1NDY2LCAxMTA5MCwgNjk1MywgMCwgMTIwMzQ2LCAwLCAKLSAgICA3ODEzMiwgNTkyNiwgNzgxMjgsIDc4MTMwLCA3ODEyNiwgNzgxMjcsIDc4MTI0LCA3ODEyNSwgOTAzOCwgNzg4NywgNDM0NTYsIAotICAgIDc4MzAsIDExNjUxLCAxMzA5MywgNjQwMDIsIDAsIDY1NzQyLCAxMjg3NCwgMTE5NTk3LCAxMTU5MCwgMCwgNzQwNDgsIAotICAgIDEyODM1MCwgODU5NSwgMCwgOTE3OTQ3LCA0MzcwMywgMTMwOTcsIDAsIDY0NjQzLCAxMzI4MywgMTI2OTcsIDAsIDEyMzgxLCAKLSAgICAzNDg4LCA1OTMzLCAxMDAzMywgNzM3MzgsIDY2MjQxLCA2NTU3MCwgMCwgMTIyOTcsIDExOTE1MywgMTk1NSwgMCwgNTM0OSwgCi0gICAgNDI1MzgsIDAsIDAsIDc0MTEsIDk0NjIsIDkxNzU1NCwgMCwgMCwgMCwgNDI3MzYsIDAsIDU3NTYsIDk4MzIyMSwgNzYzOCwgCi0gICAgNDE2NDIsIDQyNzY0LCAwLCA0MzEwOSwgNzYzNywgNTc1MiwgNzQwMzcsIDAsIDczODMyLCAxMjg4MjcsIDEyMDYzNSwgCi0gICAgMTI4MjMxLCA3ODMzNCwgMCwgNzYzNiwgNjUxNzEsIDkxMjQsIDAsIDc4ODkyLCAxMjA3OTgsIDI5MSwgMCwgMCwgMjAyNywgCi0gICAgNjYyMzAsIDEwMDgwLCA3ODEzNiwgMTA0MDMsIDAsIDQ2NDAsIDY0NzEzLCAxMDIyNCwgMTIwNDI5LCA0MjUxMiwgMTIwNDMxLCAKLSAgICAxMjA0MzAsIDAsIDEyODM1MSwgMTI3NDg5LCAxMjcxNDgsIDAsIDkyNDk5LCAwLCAxMTkwOTQsIDc0MjEzLCA3ODI0LCAwLCAKLSAgICAwLCA0MTI3NCwgNTc3OCwgNjMwMiwgMCwgMCwgMTI2ODAsIDExOTEzMCwgMTQxNywgNzc4ODksIDE5NDkxNCwgOTQ1MiwgMCwgCi0gICAgNzQzOTMsIDExNTUyLCAwLCAxMjc4NTUsIDEyODIxNywgNjUzOTEsIDAsIDEwMTcyLCA2NTQ1MywgNjM3ODksIDQxMjY0LCAKLSAgICA3ODY1OCwgNjQyNiwgNDY0MSwgOTE3OSwgNjQ4MTksIDU1Mjc4LCA0MTI1NSwgNDIwMzYsIDQxNDY5LCA0MTI2OSwgCi0gICAgMTIwNDEyLCA0MTI2NywgNDY0NiwgMTIwNDI1LCA4NjUsIDQyMDM0LCA3ODI3NCwgNzgyNzMsIDQ2NDUsIDQyMDMzLCAKLSAgICA3ODI3MCwgMTI3OTgyLCA5ODMxNzIsIDY0NzI4LCAwLCA3ODY3MywgNzg2NzQsIDE2NTksIDkxOSwgNDI3ODQsIDE2NzEsIAotICAgIDE5NTA4OSwgNjA2OSwgOTIxOSwgMTI4NTU4LCAxNjYxLCAxMzEyMCwgNjM3ODQsIDY5ODE5LCAxMDE0MCwgOTcxMywgCi0gICAgMTE5MTQzLCAwLCAwLCA5NDA1MCwgMjMwNiwgMTA0ODUsIDExODk0MywgNjA2OCwgMTA2MTIsIDE5NTA5OSwgMTE5NTY3LCAKLSAgICAxOTUxMDEsIDkyNTYxLCA0MTQ2MiwgMTIwNDcwLCAxOTUwNzksIDU0MjIsIDEyODIzNCwgOTgzNjI5LCAwLCAwLCAxMDIyOSwgCi0gICAgMTA2MzUsIDgyNiwgMTI4MDgxLCAxOTUwODIsIDE5NTA4NSwgMTk1MDg0LCAxOTUwODcsIDY0ODMsIDkyMjExLCAxODA4LCAKLSAgICA3ODQ4LCAwLCA4MTAwLCA3ODIyNywgNzg2NjksIDc4NjcwLCAxMzMwMSwgNzg2NjcsIDk2NjcsIDc4NjY1LCA3ODg3MiwgMCwgCi0gICAgMTEwMDMsIDk5MDQsIDAsIDAsIDEyMDY5MCwgOTE0NCwgMTA5MjEsIDAsIDc4NjgwLCA5ODQwLCA2NTEzMSwgNzg2NzgsIAotICAgIDc3ODQxLCAxMDMxMywgMCwgMCwgNjQzMjAsIDEwMjY1LCA3ODY4NiwgMTA5NjIsIDc4Njg0LCA0MzAwOCwgODk0NSwgCi0gICAgNzg2ODMsIDAsIDQxLCAxOTUwNzIsIDE3OTIsIDEyMDUxNSwgMTk1MDczLCA4NjU1LCAxOTUwNzUsIDkyNTQ0LCA3Nzk1MSwgCi0gICAgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMTI3ODA0LCAxMTkwNjgsIDMxMjYsIDAsIDc0MTM2LCAxMDk1NywgOTgzNzAzLCAKLSAgICA0MzI1OCwgMTE5MTE2LCAxMjc4NzMsIDEzMTU3LCAwLCA5MTc1NDQsIDM1NzAsIDAsIDc0NDMsIDAsIDQ0MDA2LCA2OTk3LCAKLSAgICA2ODAwNCwgMTI2NjMxLCA3ODc5LCA4NzM5LCAxMTA3NSwgMCwgNjUyMTYsIDAsIDY5Nzk1LCAyNTkzLCA4NDYzLCA3ODEwLCAKLSAgICA5MTc4NjIsIDc4MzksIDExOTkxMywgNzg4MDYsIDExOTkxMiwgOTY5MSwgNDQxMSwgNzg4MDIsIDAsIDAsIDQzNDQyLCAKLSAgICA2OTg1MSwgNjUyNTQsIDEwMDY2LCA5ODM4ODksIDAsIDAsIDAsIDEzMDYxLCA4MDE2LCA3ODY4NywgMTk5MzIsIDY0ODMxLCAKLSAgICAwLCAxMTk5MjMsIDEyMzkwLCAxMTkxNzEsIDE2MzQsIDY4MTE1LCAwLCAxMTA1NiwgOTgzNTc0LCAxMTk5MjUsIDAsIAotICAgIDQxMTY1LCAxMTMyOCwgMTI0NTAsIDAsIDQxMTY2LCAwLCAxMjQ1NiwgMTE5OTE0LCAxNzEsIDU5NDEsIDEyNDUyLCAKLSAgICAxOTQ3MDksIDEyNDU4LCAxMjUzMSwgNzg3NzksIDQzMDEzLCA2MzgwMCwgNzQxNjIsIDEyNzU2OSwgMTIwNDgzLCA5OTY5LCAKLSAgICAxMjA3NjcsIDEyNDU0LCA2MzgwNiwgNDIxMzIsIDEyMDYzLCA3ODQyNSwgNzg0MjQsIDMyMzAsIDAsIDAsIDAsIDUyMDksIAotICAgIDI5NywgNTgxMCwgODUyMiwgODQxNSwgMTE5OTM3LCA3ODQyOSwgNzg0MjgsIDcwNzcsIDI0OTcsIDEyODY1MSwgOTYwLCAKLSAgICA3NDE1NiwgNjk4MSwgOTIzNzQsIDEyOTM4LCA0MjkyLCAwLCA3NDgxNSwgMTA1MTIsIDAsIDc0ODE0LCA3ODg3NSwgCi0gICAgMTI3NTA1LCA3ODg3NiwgMjUwMywgNzM3NzgsIDE3NjIsIDY5Nzk0LCAyNDk1LCA3ODg3MywgNTg0NCwgNjgwMzEsIAotICAgIDExODgzOCwgMCwgMTI2NTQsIDQ2NjMsIDE4OTksIDc4ODc3LCAyNTA3LCA2NDEyMSwgODcyNiwgNjU1OTQsIDAsIDAsIDAsIAotICAgIDg4OTIsIDAsIDkyMzM5LCAwLCA5ODMwNzMsIDU3ODIsIDQyMCwgMCwgMCwgNDM3OTYsIDEwNzk3LCA2Mzc5NCwgMCwgMCwgCi0gICAgNjQ4MTQsIDYzNzk2LCA3Nzk2NSwgMCwgNjY1ODEsIDExOTIwNCwgNDE2MDgsIDAsIDAsIDYzNzkyLCA0NjU5LCAxMjA3ODgsIAotICAgIDAsIDQzNjc2LCAwLCA2OTY3MywgMCwgMCwgMCwgMzI5LCA3Nzk2OCwgOTI3MDcsIDkxNzU0OCwgNzM5OSwgMCwgNDExODgsIAotICAgIDEzMjQ0LCAxMjA0NjYsIDQyMTY3LCA3NDM1LCA3ODE5MywgNTM4MCwgMTE5MDg2LCA2OTIyNSwgMTE1NSwgMTEzNjUsIAotICAgIDQzMTI2LCA3Nzk3MiwgMCwgNjU2ODQsIDAsIDU2MDEsIDY1MTkyLCA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDEyODU0MywgCi0gICAgMTE3MiwgNjk3OTksIDY3ODYsIDQzNjAxLCAxMjA0NzYsIDc0MTI2LCA1NjAzLCAwLCA0NDczLCAwLCAxOTQ4MjMsIDAsIAotICAgIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDEyNzM4NCwgNTM0NywgNjk4MDIsIDk4MzYzMiwgNzM4NjgsIDExODk0NCwgCi0gICAgMTA1ODgsIDAsIDAsIDYzNzU1LCAwLCA1MzQzLCA3ODQyMiwgMTIwNjYxLCA0NTU1LCA1MzQxLCAwLCA3MDA3MSwgMTI4NjcwLCAKLSAgICA1MzUxLCA3ODY3NSwgNDMxMDQsIDY1MjQ0LCA5MTc4OTIsIDY0NTQxLCA0MjUxOSwgNzQ0NzIsIDAsIDAsIDc0NzY1LCAKLSAgICA5MTc4ODgsIDEyNzUxMCwgNjYzOCwgMCwgNjUxMTMsIDI3MSwgNzQxODAsIDY1MzcwLCA4ODM1LCA2NTM2OCwgMTI2NTMsIAotICAgIDY1MzY2LCA0MjE3MiwgNDEwODYsIDY1MzYzLCA2NTM2MiwgNjUzNjEsIDExOTEyLCA0MzQxMCwgMTEzMjMsIDY1MzU3LCAKLSAgICAxMTgwMCwgNjUzNTUsIDUzNDUsIDY1MzUzLCA2NTM1MiwgNjUzNTEsIDc2MSwgNjUzNDksIDE5OTU5LCA2OTcxOCwgNjM4NTYsIAotICAgIDEyNjYzNSwgMjQyMywgNzc5NTgsIDY0NjQ3LCA3Nzk1OSwgMTE5NTcsIDQ2OTksIDAsIDAsIDAsIDAsIDY0NjA1LCAwLCAwLCAKLSAgICAwLCA0OTE2LCAwLCAzODAsIDEwOTU4LCA2NjU2MywgNzc5NTUsIDY5NzczLCA5NzczLCAxMzE2NywgMTI5MTgsIDQxMDk2LCAKLSAgICA3Mzk4MCwgNjkyNDUsIDc4MjU0LCA5MTc4OTMsIDEwNjg0LCAwLCA5MTc4OTYsIDAsIDc5NDYsIDEyNTQxLCA4MTgyLCAKLSAgICA2NzU4NiwgNjk3ODAsIDAsIDAsIDAsIDAsIDkwMDUsIDEyMjUsIDY2MzAsIDAsIDAsIDAsIDY4MDExLCA4ODQ3LCAwLCAKLSAgICA2NTg3NiwgNTUzNSwgODMyOSwgNzQ1OTAsIDk4MzIwOCwgOTI2MDksIDAsIDAsIDMxMjcsIDI1OTUsIDY1NzEzLCA0MjAxMywgCi0gICAgOTgzODU4LCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCA0Mzc1MSwgNzQyMDAsIDQ5NzAsIDg3NjQsIAotICAgIDEyMDQ1OSwgODkzNCwgOTI3MjYsIDQxNTY2LCA0NDkyLCAwLCA2NTAxMSwgNDEwOTAsIDAsIDAsIDExODgsIDcyNTQsIAotICAgIDExMDAsIDAsIDEyODMwMSwgNDEwODEsIDI5MTIsIDExNzQ5LCA2OTc5MiwgMCwgNjgwMTksIDM1NzIsIDEwMDIzLCA0OTU5LCAKLSAgICAxMzA3OSwgMCwgOTgzMjc2LCA5NzI5LCAwLCAwLCAwLCA0MzM2MSwgMCwgMCwgMTE4MDMsIDc5OTYsIDk5MDcsIDQxNDUwLCAKLSAgICAxMzMwNCwgMTI4MjkwLCAxMjcyNjAsIDQxNDUxLCAwLCAxMTA5NSwgODI3MywgMTI3NTMzLCAzNDUxLCA5ODMzMDksIDk3MiwgCi0gICAgNDE0NTMsIDk4MzQ0MiwgMCwgNzM4ODMsIDY4MDIyLCA3Mzk0NSwgOTgzNzM1LCAyMjg4LCAxOTk1NSwgOTUzOCwgMCwgCi0gICAgNjk4MDcsIDAsIDAsIDAsIDAsIDExMzk2LCA5ODM0NDAsIDExMDE5LCAwLCAwLCAwLCA2ODAyMCwgNDEwNzgsIDcxMzY1LCAKLSAgICAyNjEsIDU5MjcsIDc3OTEsIDAsIDczNjIsIDAsIDEwNjk2LCAwLCA2MDczLCA5ODM4LCAxMTg5MjAsIDAsIDYwNzUsIAotICAgIDkzOTk1LCAyODIsIDEyNjUxMCwgNjQzNywgNzQwNzgsIDEyODAwMCwgOTgwMSwgMCwgNzQxNzcsIDAsIDAsIDM0NzQsIAotICAgIDExODc4NywgMCwgMTIwNjU1LCA2MDgxLCAwLCA3ODg3NCwgNzQwNzYsIDc4ODc5LCAwLCAwLCAwLCAwLCAwLCA4NzUxLCAKLSAgICAxMTQ5OSwgMTIwMjczLCA3ODE2LCAxMjYzNiwgNDY2NSwgMTI2MjgsIDQ2NzAsIDkyNjA4LCAxMjAyNzIsIDY4MDE3LCAKLSAgICA5NjQyLCAxMDkxMiwgOTU4LCAwLCAxMTM4NywgNzg4NzgsIDQ2NjYsIDAsIDQ5MTUsIDAsIDQ2NjksIDAsIDY4MDk5LCAKLSAgICAxMzI4NywgNDY2NCwgMTA4MzYsIDEyMDU1MCwgMCwgNjk3NzUsIDAsIDQzNTk1LCA3NDUwLCAwLCA5MTc4NzUsIDg2NjQsIAotICAgIDk2OTcsIDM2MDYsIDkxNzg3MywgMCwgMCwgNjQ4MTUsIDEwNjMsIDEyMDI1MCwgMTIwMjUxLCA5NzcyLCA3MjU1LCA4ODg2LCAKLSAgICAxMzg5LCAxMjc5MzIsIDEyMDI1NywgMTIwMjU4LCAxMjAyNTksIDEyOTQxLCA0MjY2MSwgOTIzODEsIDEyMDI1NSwgCi0gICAgMTIwMjU2LCAxMjMwMSwgMTIwMjY2LCA2OTgyMCwgNDExMDIsIDY0NDI4LCAxMjAyNjIsIDEyMDI2MywgMTIwMjY0LCAxMDE3LCAKLSAgICA2NjYwMCwgNTIzLCA1MDUsIDE0NDcsIDc0NDM2LCAwLCAwLCAwLCA4NjA4LCA0Mjc4OSwgMTIwNjEzLCAxMjg3MDQsIDAsIAotICAgIDczODU1LCAxMTMwNywgNjY3MDcsIDkxNzg3MSwgMTI3NzUxLCAxMTc0NSwgNzkxOSwgMCwgMTY0MSwgMCwgMCwgODk2NiwgMCwgCi0gICAgMCwgNTkwOCwgMCwgMCwgNjc0NCwgMTI4MzU1LCAxNjk5LCA2OTg2MSwgNzQ4NDMsIDkxNzkzMywgMCwgNjMwNiwgMTAxNjksIAotICAgIDcxMzI0LCAxMTkyNTEsIDEwMDY4LCAzNzY2LCAyMzg5LCAxMjA0NTYsIDEyMDQ1NSwgNjYxMSwgMjU3LCA0MzE3MCwgCi0gICAgMTMxNTMsIDAsIDQyMzg2LCAwLCA5NDM2LCAyNTk5LCAwLCA2NDk2LCA5NDQ5LCA1OTMwLCAxMTQ3NiwgMTEwMzMsIDExNDQ3LCAKLSAgICAxMDU0MSwgNTYyMiwgMTIwNDM2LCA4NDc3LCAzNzYwLCAxNzE4LCA5NDQyLCA2NjQzMywgMzc3NiwgMCwgNDE0MzUsIDQzNTIsIAotICAgIDk4MzYxMCwgMjQzNSwgMTIwODA5LCA1NjIxLCAxMjAzODUsIDQyMDEsIDM3NzgsIDQyMDMsIDQyMDIsIDQyMDUsIDQyMDQsIAotICAgIDEyMDQ0NywgMzc2OCwgNjgxNDIsIDc2NSwgNDE0NDAsIDM3NjQsIDg0NzMsIDYzNzMsIDg0NjksIDEyMDQzOCwgMTI5NDcsIAotICAgIDQ1NjQsIDAsIDAsIDc0MjcxLCA3Mzc1MywgODM3NCwgOTgzMTU2LCAwLCA2ODI5LCA1MjI1LCAxMjg4MDcsIDEyNzM4NSwgMCwgCi0gICAgMCwgMTE5NjE1LCAwLCA3NDc5MywgNTYyNiwgNzM4MDcsIDExNzcxLCA3NDA3NSwgMTI3MjM2LCAxMjgwMTksIDQyNjE0LCAKLSAgICA1MzUzLCA1NjI1LCA3NDE3OSwgMCwgMCwgMTAxMCwgNjQ1NzIsIDQxNzgwLCA0MjYyMywgNjQyNzcsIDY5OTQyLCA2OTUyLCAKLSAgICA5ODMyNzIsIDEyMDc1MiwgNzg3NjIsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIAotICAgIDEyMDAzOCwgMTIwMDI3LCAxMjAwMjgsIDEyMDAyNSwgNTYyOCwgMTIwMDMxLCA5NzAsIDEyMDAyOSwgNDc3MiwgMjQwMCwgCi0gICAgNTYyNywgMTIwMDE3LCAxMjAwMTgsIDEyMDAyMywgNjQyNzUsIDEyMDAyMSwgODc4NiwgMCwgMjAzLCAwLCAwLCAwLCAwLCAKLSAgICA3ODM1MCwgMCwgNjQzNzgsIDQyMDU0LCAwLCAwLCA1NTQsIDExOTY0OSwgMTEzNTgsIDAsIDEyMTgyLCA0MjA0OCwgMTEwNjUsIAotICAgIDEyNjQ2NCwgNzM4OTEsIDAsIDAsIDU2OTQsIDc2ODksIDY5Nzk4LCA5MzIzLCA0MzI1LCAzMDQ3LCAxMDMxNywgMTc1LCAwLCAKLSAgICAwLCA2OTc2NCwgMCwgMCwgMTI0MywgNDIxNTQsIDU0MzEsIDY2NTIsIDAsIDY5NzcwLCA0MzY1MSwgMCwgNjgxMTgsIAotICAgIDEyODAyNCwgMTEyOSwgMTI2NTc0LCAwLCA2NTkwMCwgMTk4NiwgNzg0NiwgNzg4MDQsIDg2NjEsIDkxNzc3MiwgNjUyNTUsIAotICAgIDAsIDM4NDUsIDQ0OTAsIDExODk2OSwgNjY0OSwgNzQ0MDAsIDE0NTYsIDc1MzAsIDExOTc3LCA3MjQ5LCA4MzY2LCAwLCAKLSAgICA3NzU2LCAxMjM0MiwgMTI4NTY4LCA1MSwgNDE1MTYsIDAsIDg1NzAsIDk1NjgsIDcxMzE4LCA0NTYsIDcwMjYsIDgxNDUsIAotICAgIDExNjgsIDkyNTEsIDkwODIsIDExOTk2NCwgNjQwNTUsIDQyNzgxLCAzODY2LCAxMjMyMywgNDE1MTIsIDczODA1LCA2ODEyMSwgCi0gICAgMCwgNDE0OTQsIDkyMzE2LCA0NjYwLCAwLCAxMDQwNSwgMCwgNzg4MDMsIDAsIDAsIDQyMDQwLCA3MzkxOCwgMTE5NjI3LCAKLSAgICA3OTQ0LCA0MTQ1NCwgMTI2MDUsIDAsIDQyMjA1LCA0MTQ1NSwgMjM2LCA2NDA1MSwgNzg4NjcsIDgyMTQsIDAsIDAsIDAsIAotICAgIDQxNDU3LCA5ODM5NzAsIDExOTU4OSwgMTk2OSwgMjM4NCwgODA5NywgOTE3ODY0LCA3NDEzLCA2ODAxMiwgNzgwMjksIAotICAgIDg3NjYsIDAsIDc4MDc5LCA1ODU0LCAxMjc5NzQsIDEwNTgzLCAwLCAxMTk5ODksIDAsIDEwNDE2LCA5MTc4NjksIDM4NzIsIAotICAgIDkxNzg2OCwgMCwgODQyOSwgMCwgMTE4ODA2LCAyODM4LCAxMjg4MDIsIDAsIDkxNzg2NiwgMCwgMCwgMCwgOTgzOTY3LCAKLSAgICA5NDAwNSwgMTEwOTYsIDEyMDgxMywgMTA1NTMsIDE2NjIsIDg0ODMsIDEyMDM5NiwgNDM2MDUsIDU4OTIsIDQzNDE4LCAwLCAKLSAgICA3Mzc0MiwgNjYsIDY1LCA2OCwgNjcsIDcwLCA2OSwgNzIsIDcxLCA3NCwgNzMsIDc2LCA3NSwgNzgsIDc3LCA4MCwgNzksIAotICAgIDgyLCA4MSwgODQsIDgzLCA4NiwgODUsIDg4LCA4NywgOTAsIDg5LCAxMTk4NjIsIDEwMzU3LCA3Mzg1LCA4MTcwLCAxNzA0LCAKLSAgICA4NTU2LCAwLCA5NjU5LCAwLCAwLCAwLCA5NTU2LCAwLCA0NTAzLCAxMTM1MywgOTY0NywgMCwgNzgxODUsIDAsIDAsIAotICAgIDkyNzEzLCA3ODg4NiwgMCwgMCwgNzQyMjksIDY2NTkzLCA2NDM4LCA5MTc5NzksIDkxMDksIDc4ODgyLCAxMjg5LCA2NDU5OSwgCi0gICAgMCwgNjgwMDksIDAsIDY1NTA3LCAyNDQ3LCAwLCAwLCAxMjgwNDIsIDEyNjU0NSwgOTgzMTM3LCAwLCA2MzM0LCAwLCAwLCAKLSAgICAxOTkzNywgMCwgOTIzNjgsIDAsIDU2NzUsIDI1NCwgMCwgMCwgNjk2ODYsIDQyNDI1LCA4OTE4LCA2NDAwMywgNTcxNiwgCi0gICAgNDIzMTIsIDAsIDAsIDY5NzIsIDQyODI2LCAwLCA0MjQ2NCwgMTIwNTY3LCAwLCA5MjY0NSwgNzQ3OTYsIDY0NDAwLCAKLSAgICA2NDY5MywgMCwgNzc4NjEsIDY1NDI5LCA5NTE1LCA0NDM1LCAwLCA0MjUyMiwgMCwgNjgwMDgsIDExNzg1LCA3NDEyLCAKLSAgICA2NDY3MSwgNDE5NzgsIDE0MTIsIDQ1OTQsIDEzOTEsIDEwNTM2LCA4MDY3LCA5OTAxLCA3MTAzLCAxMjgyOTMsIDcxMDIsIAotICAgIDc0NTg4LCAxMjA3NDgsIDMxNDAsIDEyODg1NCwgNzk2MCwgNDMyNzEsIDAsIDEyNTE4LCAxMDkwOSwgMTI3NTA4LCAxNDI4LCAKLSAgICAxMjQ3MiwgMCwgNjk4NjQsIDc2OTksIDEyMzkzLCAwLCAwLCAwLCA3NDUxOCwgODIyMywgMCwgNDI2MSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTI4MzAyLCAwLCAxMjgwNDYsIDQzNDE5LCAwLCA2NDU1NCwgMTA1NzQsIDM4NzgsIDAsIDQyMzUyLCAxNzUyLCAKLSAgICA3Mzc4NSwgMCwgNDI1MDYsIDEyODU0MSwgMTAxOTksIDAsIDAsIDY4MDIxLCA2NTkxOSwgMCwgNjY5NSwgNzIwLCAzMjQsIDAsIAotICAgIDAsIDQzNDA2LCA5ODM3MzYsIDE0NjQsIDQwOTg1LCAwLCA3OTc0LCAwLCA0MzQ3NCwgMCwgNjQ0ODgsIDAsIDAsIDY0MDQxLCAKLSAgICA3NDc4NywgMCwgNzg4NjUsIDkyMjU4LCA2NTU5NywgMCwgNzg4NjMsIDAsIDEzMDIsIDAsIDc4ODYxLCAxMTkxMzQsIDAsIDAsIAotICAgIDUyMDQsIDc0Nzc0LCA0MzQwNCwgMTE4MzUsIDAsIDM5OTUsIDY4MzYwLCA2NTYwOCwgMzcxNCwgOTIxOTAsIDAsIDAsIAotICAgIDEwOTk5LCAxMTc1MCwgMCwgNDMyNTEsIDY4NjYwLCA0MzMwMSwgMCwgMTIwNTU3LCA4MTMwLCA4NjcyLCAxMDg0NSwgCi0gICAgMTE5NjQsIDAsIDk4MzE4NSwgMCwgMCwgNjg0NTUsIDQyODYzLCA3MzgzOSwgMCwgMCwgMCwgMCwgMTI2NjI5LCAwLCA0NjgsIAotICAgIDYxMiwgMCwgNjQ0MDEsIDY2NDQ4LCA2ODM3NiwgMCwgMTY3NCwgMCwgNTgyMywgOTgzMTYzLCAxMjI4MCwgMCwgNTQwLCAKLSAgICA3NDU2NCwgMTE5MDE3LCAwLCA4NDMyLCAwLCAxMTA3MywgMCwgNjQzMTYsIDAsIDAsIDgyMCwgNDE3NDEsIDAsIDEyMDY2NywgCi0gICAgMCwgNjQ2ODQsIDEyNjk5MiwgMzM1OSwgNzgwMCwgNjk5MzQsIDY1MTc3LCA2MjI2LCAzNTMsIDEyMzk2LCAwLCAxMTk2MTIsIAotICAgIDY0NzQyLCAxMjg2ODIsIDEyMDI4MiwgMCwgOTgzNDUwLCAxMjQxMiwgMTk5NDEsIDAsIDEyMDI3NywgNzg4NDcsIDE4ODQsIAotICAgIDk0ODEsIDQyNDE4LCA3MDA1OSwgNDExNTcsIDAsIDExOTUsIDY0ODk4LCA3OTI0LCAwLCA0MTE1MSwgMjAxMCwgMCwgCi0gICAgNDEzMjgsIDQyMzQ0LCAwLCAxMjQwOSwgMCwgNDM2MCwgMTI3MDA5LCA5NzM5LCAxMjg1NTAsIDY5OTMzLCA3MzkyMSwgMCwgCi0gICAgNDI1MjEsIDg1MzksIDk4MzcyNSwgMCwgMTE4OTg2LCAwLCA0Nzg4LCAwLCA2ODAyMywgNjU3MzQsIDk4MzQ1NSwgNDM3OTAsIAotICAgIDAsIDEzMDc1LCA3NDQyOSwgOTQwNjMsIDY0NTY5LCA0MzUzMiwgMTA4MzcsIDI0OTIsIDEyNzE5NywgMTE4OTAxLCA2ODYzNywgCi0gICAgNDExMzYsIDQzNzg1LCAxMTgxMywgOTY0OSwgNDExNTQsIDExOTYxNywgNTEyOCwgNDAzOCwgNDExNDMsIDY1NjA0LCAKLSAgICA2NDg1OSwgNDE1OTIsIDY3NzEsIDE2NDgsIDU0MzUsIDkxNzgzNywgNjczNCwgNDEzNDMsIDExOTg0OCwgNjU0MzksIAotICAgIDEyNzA5LCA2OTg2LCA5MjM2NCwgNjgwMTUsIDAsIDQxMzQ5LCA3MDAyMSwgMTI1ODEsIDEwMzc0LCA1MTc1LCAwLCA3MzgwNiwgCi0gICAgMTAyNTQsIDAsIDEwMjc4LCAxMDI2MiwgNjk4NTgsIDQxMzQ2LCAwLCA2MDcsIDAsIDExOTg1MiwgMTI4ODQ2LCAxMjkyMywgCi0gICAgMTAzMTQsIDEwMjgyLCA2NTQ3NywgMTAzNzgsIDEyMDI5NywgNDA5NzYsIDgyNjUsIDAsIDExOTgzNCwgNDA5NzUsIDU4NDAsIAotICAgIDQyODM4LCAwLCA0MDk3OCwgOTgzODk3LCAxMTk4NDAsIDAsIDk4MzA3MSwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAKLSAgICAxMTk4MzYsIDY3NzksIDAsIDAsIDM1MjUsIDY4MjQsIDExODg4NiwgMCwgMCwgNTYxOSwgNjU4MjIsIDEyNjU2NywgCi0gICAgMTk0ODgyLCA3NDU1LCAwLCA1NjE2LCAxMTQ4NiwgOTY1NiwgMCwgMCwgMTA3MjcsIDU2MTUsIDAsIDEyMDU1MSwgNDIzODAsIAotICAgIDY0ODk1LCA0MzY5MywgNjY0NTEsIDgwOCwgNTQ1NSwgMTEzNDcsIDAsIDEwMjYsIDU2MjAsIDE5NDg4NywgMCwgMTEzNTAsIAotICAgIDU2MTcsIDAsIDkyMjUsIDY0NjM5LCAxMjcwNzMsIDkxNDUsIDEyODA2MCwgMTMzOCwgMTIwNTgxLCA5ODMxNTgsIDEyNzM5LCAKLSAgICA0NjAzLCAzMDg0LCA5ODMxNTUsIDkyNDg0LCA5ODU4LCA2MDM3LCAwLCAzOTc0LCA3ODIxMywgMTAyOTAsIDk4MzcwNCwgCi0gICAgMzA4MywgMTAzMjIsIDAsIDAsIDAsIDQxMDM2LCAwLCAwLCA0MzMyMSwgNjU2MDYsIDAsIDQxMDMyLCA0MjM4OCwgMCwgCi0gICAgNjQ3MDAsIDEwMDExLCAxNDQ1LCA0MDk2MSwgMCwgMTE5MTA1LCAwLCA0MDk2MCwgMCwgMTk0ODkxLCAwLCA0MDk2MywgCi0gICAgNjQ5NTIsIDEwNDAyLCAwLCAwLCA5MjMwNCwgMTA2MDMsIDAsIDAsIDk4MzExMywgMCwgNjcxNCwgMTAwODMsIDEyNzA2OSwgCi0gICAgMTk0ODk1LCA3ODM2NywgMTI3Mzc3LCAwLCA5Mzk2MywgOTA3MywgNDI1ODUsIDY0MzAyLCAxMDcwNCwgNjUwMzAsIDQ3ODcsIAotICAgIDAsIDc0ODI5LCAwLCA2NTQyMywgMCwgMTI4MTE4LCA5NTcwLCA1NTI2MCwgOTUyNSwgMjY4OSwgOTE3NjI2LCA2NTQyNiwgMCwgCi0gICAgOTE3NjI0LCA0Mzc0MCwgMCwgNDA5NjYsIDkxNzYyMiwgMTMyODYsIDM5OTgsIDQyNTk4LCA0MjU5NiwgNTAzLCA3NDIzNywgCi0gICAgODczNSwgMjY5MCwgNjY0ODgsIDQyODM2LCAxMjcxNTAsIDQxOTU0LCA5MTc2MTcsIDE2NTIsIDc3MiwgNjY4OCwgODMxMCwgCi0gICAgNjU0MjgsIDM0ODcsIDQzNDE2LCAzNTg1LCAxMDE5NCwgNDMzMjAsIDExOTE1OSwgMTI4MTgzLCAxOTQ4NzQsIDY0NjgsIAotICAgIDQxOTc2LCA5NzIwLCA5MTc2MDYsIDExNzY3LCA0MTk3MCwgMTk0NTk2LCA1ODM2LCAxMjM1OCwgMCwgNDM1NSwgOTA0OCwgCi0gICAgMTIxODAsIDY1MDI3LCA2NDY4MCwgMTMwMzgsIDQzNjk5LCAwLCA0MTQ4OCwgMTI4MDg3LCA4NTI3LCAxOTQ5MTcsIDEyMzYyLCAKLSAgICAxMjQzNSwgMTIzNjAsIDQxMDUzLCAzMjY2LCAwLCAxMjM1NiwgODYxNiwgNDE0NjYsIDAsIDkyNTg4LCAxMTQ1MCwgMCwgCi0gICAgMzYzOCwgMTIzNTQsIDAsIDMyMTYsIDAsIDIzNTgsIDkyNjA2LCA4NjMzLCAwLCA5ODM3NDUsIDExOTE4MiwgNjkyNDQsIDAsIAotICAgIDAsIDExNzU5LCAxOTQ5MDMsIDYzNjgsIDc0ODIzLCAwLCA0MTQyMywgODA3OCwgMTA1MDQsIDEyNzU1OCwgNDE2OTgsIAotICAgIDQyMjM3LCAwLCA3MDAyLCA5ODM2NzgsIDQxNDMwLCA0MjI2NywgNDEwNTEsIDQxNDg0LCAwLCAwLCA0MTA1MCwgNDE0NzMsIAotICAgIDEwNDY2LCAxMzA5OSwgMCwgMCwgMCwgNjQzNSwgMCwgMTEzNjIsIDAsIDAsIDY1MzgyLCAwLCA0MTQyMCwgMCwgMzYyNSwgCi0gICAgNzgxNTcsIDQxNDA5LCAwLCA2OTYzOSwgMjA0MSwgOTE3OCwgOTY3MiwgNDE0MjcsIDQzNTQxLCA0MzMxNywgMCwgMCwgMCwgCi0gICAgNDE0MjQsIDkxNzU5OCwgMTIwNTQ2LCAwLCAxMjgyMTIsIDAsIDQxNDE3LCAxMjYxLCAwLCAwLCAxMjEwMiwgMTE5NjYyLCAKLSAgICA0MTQwMSwgMCwgMTI3NTM4LCAwLCA3ODI1MSwgMCwgNDIyOTAsIDMyNzUsIDkyNDcyLCA0MjMyOSwgNzQ3NTksIDAsIDAsIDAsIAotICAgIDkyMzg4LCA2OTY0OSwgMTA5ODksIDc0MjM0LCA5ODMxNDAsIDEwNTk4LCA3NDEwLCAyNjY5LCA5MDMsIDAsIDI5MjAsIDAsIAotICAgIDEyNzIzMiwgNzQ2MDMsIDY0NTA0LCAxOTkyOCwgMCwgMCwgMzkxNywgMCwgMTE3MzIsIDAsIDk4MzE4MCwgNDE0NDgsIAotICAgIDQxNDYxLCAxMjg4MjMsIDAsIDEyNzkxMiwgMCwgODgxOSwgMTI2NjMsIDAsIDQxMTg0LCA3NDAxNCwgMjMyLCA3NDgzNSwgCi0gICAgMTIwNjQ2LCA5MTY4LCA2NTc4NiwgMCwgMCwgMCwgOTA5NCwgMCwgMTE3NTgsIDY4NDI1LCAwLCAxMDY0LCA0MjQ2NywgCi0gICAgMTI4MDQ0LCAxMDExNSwgMTk5MjQsIDkyNzExLCAwLCA3ODYyLCA2NDU1MSwgMTMyMjQsIDg1MTYsIDQxODYyLCA2NjY1MCwgCi0gICAgNzU2MSwgNzg2MTgsIDY5NzkzLCAxODc4LCAwLCA5ODMyNjksIDI5MTEsIDAsIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgCi0gICAgMzc4NywgNDExNzQsIDAsIDQxNDU4LCAwLCA0MTQ2MywgNDI0MTMsIDExMjkyLCAyNDA2LCA3NzUsIDAsIDY1NTg0LCAKLSAgICA2OTkyMywgNjA3NCwgOTYxOCwgMTI4NjY4LCA5ODM5NTIsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCAwLCAKLSAgICAxMjA2MDAsIDQxNDU2LCAwLCAxNTk5LCAxMTMzMywgMCwgNjcwMywgODUxMywgMCwgMTYxMywgMCwgNjg0NTYsIDEyNTk4LCAKLSAgICA5ODMxOTEsIDEyMDczNCwgNzg3NDUsIDc0NTAwLCA0MTQ2MCwgMTAxNDUsIDEwNTQyLCA5OTM3LCA3ODc0NiwgNzAwMjksIAotICAgIDk5MDUsIDAsIDY1NzMwLCAwLCAxMjAzNzQsIDg0MjcsIDEyMDM3NSwgNTUyNDYsIDEyMDM3NiwgMCwgMTE0OTcsIDY0Njg3LCAKLSAgICA3NDAwOCwgNDI1OTIsIDM4NzEsIDAsIDEyODMwNSwgOTExMSwgNTc0MSwgMCwgMTk0ODQ2LCAxMjAzNjYsIDExOTExMSwgCi0gICAgMTIwNzQ1LCAwLCAxMjAzNjgsIDAsIDExNjQ4LCAwLCAxOTQ4NzMsIDEyMDM2NCwgNDE1ODcsIDEyMDM2NSwgMCwgNzQzMjIsIAotICAgIDQyMTEzLCAwLCAxMjcxNTUsIDEyMTcyLCAwLCA3NDUzMCwgNjUyOTgsIDY1NzIzLCAxOTQ4NDAsIDczODcxLCA2NTcyNCwgCi0gICAgNzkyOCwgMTIwMzU0LCA5ODMwOTUsIDQxNTk1LCA3MzczMCwgMCwgNDIxMTgsIDczODMwLCA2NjA0MiwgMTAzNTUsIAotICAgIDk4MzExMCwgNzg3NSwgMCwgNDE1OTgsIDM5OTMsIDAsIDE1NDUsIDQwOTcxLCA1MzYsIDEyODUyMSwgNDMwMjksIDAsIDAsIAotICAgIDY1MTczLCA2NTI4NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDEzNzUsIDU0MDIsIDAsIDAsIDE2ODcsIDEyMDUwMywgOTE3ODE3LCAKLSAgICAwLCA3ODE5NCwgNjQzMjYsIDQwOTY5LCAxMDUyNiwgNzg3NTMsIDgzMjMsIDQwOTY4LCAxMzM5LCAxMTczMSwgNzg3NTYsIDAsIAotICAgIDY1NDYwLCAxMjI0MiwgMTI4NTEzLCA4MDIwLCAxMDg0MywgMTE1NTQsIDAsIDAsIDgyNjYsIDQxMDA2LCA2NTcyMiwgMCwgCi0gICAgMTA3MTAsIDAsIDExODk0MiwgNjc2NjcsIDY0NTY3LCAxMTkxNTUsIDE5NTA5MSwgMCwgMTE5NjM2LCA2Nzg1NywgMTIwNjg3LCAKLSAgICAwLCA5ODMwNjYsIDExNzU1LCA2NjMwNSwgMCwgMCwgMTA5MTcsIDkzOTc5LCAwLCAxMTI3MiwgMjA0MCwgNDEyNDcsIAotICAgIDQxMzI2LCAxOTUwNjAsIDE3NDEsIDQyMzcwLCAxMjI3LCAwLCAwLCAxMTQxMywgMCwgMCwgNTI4MywgMTU4NiwgNDk3OCwgMCwgCi0gICAgMTk4NCwgMTE4MzAsIDAsIDkyMjkzLCA0MDk4NCwgMTI4MzA2LCA5MzczLCAwLCAxMjkxNiwgNjI4NCwgMCwgNDE2NjMsIDAsIAotICAgIDAsIDAsIDkyMzcsIDkzODUsIDQxNjQ4LCAwLCAxOTQ1ODAsIDIyOTksIDQxNjY2LCAxODMwLCA3Mzc4MywgMjA1NiwgCi0gICAgNDEyODcsIDkyNjEwLCAwLCAwLCA0MjIxOSwgMTI4MjU3LCAwLCA0MTk4NywgNDE2NzYsIDk4MzA1OSwgMTIwODIzLCAKLSAgICA5ODMxNDQsIDQxNjcwLCAwLCA5MjU5MCwgMjc5NiwgNTUyOTEsIDExNjgzLCA5OTAyLCA3NDUyMSwgNjc5ODgsIDExNDUxLCAKLSAgICA5ODMxMTEsIDEyODgyMiwgNDI2MzEsIDIzNTksIDAsIDY3ODQ0LCA3NDE2NCwgNDEyMzgsIDU0OCwgMTE0MDUsIDEzMTMzLCAKLSAgICA2NDM2OCwgOTgzMjM5LCAxMjg3OTUsIDAsIDM5NywgNDM2MjIsIDQyMTM5LCA5NTQ3LCA5NTkwLCAxMjgyMzgsIDE2MTQsIAotICAgIDQzNjYxLCA2NDM1NiwgNjYzMDcsIDY2NTEsIDEzNTgsIDAsIDQyOCwgOTYyMCwgMTQ2NiwgNzgxMTIsIDEwOTgyLCAKLSAgICAxMTg4MzEsIDEzMzMsIDcxMDQsIDQwNywgNjQyNSwgMTI4ODM0LCA3NDI1MywgMCwgMCwgMCwgNTgwNCwgMTE5NzYsIDg1NTQsIAotICAgIDkyNzIxLCAwLCAwLCA5MDU3LCA0MjI5NCwgNDEyMTgsIDAsIDAsIDc4MTM3LCAxODgzLCAxMDk1MiwgODA0OCwgNzgxNDIsIAotICAgIDQxMjI1LCA5MjYyMSwgNDI5MTUsIDk4MzY3NiwgMTI4Njg0LCAwLCA0NDA3LCAwLCA2NTgwOSwgMTE5MDc0LCAxOTQ4MjEsIAotICAgIDg0NDgsIDcxNDEsIDc0MTgzLCAwLCAxMjY3NSwgMTI2NTksIDAsIDQyMzYzLCAxMjA2MjQsIDE5NDgyNCwgNTUyNzMsIAotICAgIDEwNzY2LCAxMjAxMiwgMjM4NiwgNjQ3MzIsIDkxNzAsIDkxNzgyMSwgOTEyMywgNjQ1ODUsIDEyMDUwMCwgMTE5MTU4LCAKLSAgICA3MTQwLCAxMDk3NywgMTI3Mzc4LCA0MTY0LCA5MDgxLCAwLCAxMjA1NjksIDQyMDQ5LCA0MjA0MiwgODcwOSwgMTI4MjgzLCAKLSAgICAxMjY0NzcsIDEyMDYzNywgNDI0MTksIDY0Nzk5LCA0MjA0NywgMCwgMCwgODQ3MCwgMTE4MDcsIDY1ODk3LCA1NzcsIDAsIAotICAgIDk4Mzc2MCwgNzQzMDAsIDAsIDEyNzMwOCwgNzQ4NDAsIDAsIDAsIDEyODc5MSwgOTIyMjQsIDg3MzYsIDE0MTQsIDQyNjQzLCAKLSAgICA5NjgzLCA0MzQ4NiwgNzQzNDQsIDAsIDI1MzYsIDAsIDY2MzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjMxNywgNjk5NDUsIAotICAgIDY2MzE1LCAyMTA2LCAxMjAyMjIsIDExMjczLCAwLCA0MzAwNCwgNzU0MSwgMCwgMCwgOTYxLCA2NDMwNywgNjYzMjQsIAotICAgIDY0OTA2LCAxMjg1OTEsIDMxMDYsIDY1OTE3LCA0MTI4NCwgMTY5NiwgMCwgODkxLCAxMjEwNSwgMCwgNDI2MjQsIDEyODAyLCAKLSAgICAzMjY0LCA4ODI0LCAxMzI2OCwgNDMwMDMsIDEwOTM2LCAwLCAwLCAwLCAxOTQ4MjYsIDkyNjg4LCAwLCAyMzIyLCAxMjAzNzEsIAotICAgIDk4MzU4NCwgMTE0NDksIDEyODE4NywgNDI4NjgsIDQxMjg1LCAzNTQ3LCAwLCAwLCAxMjg3OTMsIDk4MzM5OCwgNDMyMTYsIAotICAgIDYwODksIDc4NjgyLCAwLCAxMjA1NzgsIDQxNzAsIDEwMjksIDEyNzc2MSwgMTI3MDM2LCAxMTkyMjQsIDQyMzc0LCAwLCAKLSAgICA3NDQsIDAsIDAsIDAsIDY1ODIzLCAxMjc4MjYsIDAsIDM1NTEsIDAsIDAsIDQ2MjMsIDU1MjY4LCAwLCA0NTk4LCA5ODMxNjIsIAotICAgIDY1MTM2LCAxMjcxMzYsIDAsIDAsIDEwODUxLCAwLCA2MTc5LCA5MjYwMiwgNjE4MCwgMCwgMTE5NTIsIDEyMDc3OCwgCi0gICAgNzg2NDgsIDExOTcyLCA3ODY0NiwgNzg2NDcsIDc4NjQ0LCA3ODY0NSwgMTc3LCA3ODY0MywgNjE3NiwgMTIwNTgwLCAwLCAwLCAKLSAgICA2MTc3LCA5MDIwLCA3ODY1MiwgNzg2NTMsIDYxNzgsIDEyMDI0OSwgMTIwMjQyLCAxMjgwMjcsIDY3NjczLCAyMjE0LCAKLSAgICA4NzU0LCAwLCAxMjAyMzcsIDIxMzcsIDQzMDgxLCAwLCAwLCA5MTM2LCAxMjAyNDAsIDQ0MDEsIDQxMjgwLCAwLCA4OTc0LCAKLSAgICAyMzA4LCAwLCA3NDE0OSwgMCwgMjMxOCwgOTgzMTgzLCA2NjM2MSwgODE5OCwgMCwgNjQzNjAsIDEyNjAxLCA0MjUzNiwgCi0gICAgNjUyNjYsIDEyMDgyNywgNzQzMDcsIDkyNDYyLCA2OTcwLCA1NDA0LCA0MzMzMiwgMzY2NywgNzkzNiwgMTI5MjUsIAotICAgIDEyNjk4OSwgNjM4NSwgMCwgMCwgMTE4OTQ5LCAxMDg3NCwgNjU1MDUsIDEyODA4MywgMCwgNDIwNTMsIDIwNzUsIDQyMDU3LCAKLSAgICAxMTA4MywgNDIwNTIsIDAsIDAsIDY3NjUxLCAwLCA5NjY1LCA5MjMwMCwgOTgzNjY2LCAxMzE4MSwgMCwgMCwgMCwgNzAwODgsIAotICAgIDc0MTQ4LCAwLCAwLCAxMjAyMjUsIDEyMDIyOSwgMTIwMjI0LCA3NDE3MiwgNDExNDUsIDAsIDk0MDk2LCA5ODM5NDYsIAotICAgIDQxMTQ4LCA4NjgzLCA3NTk0LCAxMjc1MTksIDAsIDExOTA5MCwgMTA4NjksIDQzNDU4LCA0MTE0NiwgOTI0MDcsIDExNDQxLCAKLSAgICAwLCAzNTEyLCAxMTk2MzMsIDk4MzcwOSwgODEwMywgMCwgMCwgNjUxODQsIDExNzgwLCA0MTU2MywgNDI3OTYsIDAsIAotICAgIDY5NzQyLCA0MTU0NCwgNjUxNDYsIDAsIDAsIDAsIDAsIDE5OTQyLCAwLCAxMTg5MDgsIDc5ODgsIDEwNDM2LCA3NDI3MywgCi0gICAgMzI3MSwgNzM4MDQsIDY0NzExLCAwLCA5NDA2NCwgMCwgMCwgMzgwNCwgMTMwNzAsIDExNTU3LCA0MjA0NCwgMCwgMTA5NSwgCi0gICAgMCwgMzU5OSwgMTI3Nzc0LCAwLCAxMjg4NjEsIDg1MTQsIDAsIDAsIDAsIDc0MzQ2LCA2NjY5NywgMCwgMTE2ODQsIDAsIAotICAgIDkyNDg2LCA5MTc2MDMsIDAsIDQyMDQzLCA0MzIzMiwgNjY2NzcsIDAsIDQyMDQ2LCA3ODI0MSwgNDAzNiwgMTI2NDgxLCAwLCAKLSAgICAxMjgyMTMsIDE5NDg2MSwgMCwgMTE5NTQsIDkzOTc4LCAxNDUwLCAxMjk4NiwgMTM0MCwgMCwgNjU0NDEsIDkyNzIyLCAwLCAKLSAgICAwLCAxMjc3NzIsIDAsIDkxNzU0MiwgMCwgMCwgNjUzOSwgMCwgMCwgMCwgMTk0ODU2LCAwLCAxMjA0OTIsIDQxMTkwLCAKLSAgICAzOTczLCAxMTkzNjUsIDQ1NzUsIDQxMTkzLCA3OTgyLCA0MjksIDAsIDEyNzE5NCwgMCwgMTk0ODU0LCA2NTc5MiwgMCwgCi0gICAgMTE4OTY4LCA2NDE3LCAxMTg5MTgsIDc4MTc4LCAwLCAxOTQ4NTAsIDAsIDAsIDQ5MTksIDEwNTkwLCAxMjg1NTYsIDc3NTUsIAotICAgIDAsIDAsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgOTgzNjY4LCAKLSAgICAxNjE3LCA4MDUwLCAwLCA1MDE1LCAwLCAxMTkxNzQsIDQyNTkwLCAxOTQ4NzEsIDE3NTYsIDc4MTgxLCAwLCA2NTc2OCwgCi0gICAgNjM1MiwgNDE4OTIsIDAsIDc1NTUsIDEzMTAzLCA1NDA4LCAyODE3LCAxMjE0LCA2OTkxOSwgOTIzMzUsIDk4MzEyNSwgMCwgCi0gICAgMCwgMCwgMTI3MTk1LCA3OTU3LCA4Njg5LCA2NDcyMywgMTA1NiwgNDI4OTYsIDc0MTQ3LCAxOTQ4MTMsIDAsIDU1Mjg2LCAKLSAgICA3MDczLCA2NTg1MCwgMTIzMjcsIDk4Mzk0OCwgMTE5MDI4LCAwLCAwLCAwLCAyMzQxLCA4NDUwLCA4NDg0LCA4NDc0LCAKLSAgICA5ODMyNjAsIDAsIDcwMDc5LCA4NDYxLCAxMjgxMDIsIDEyMTUzLCAxMjc5OSwgMCwgNDM3MDksIDQzNzA4LCA5NDUxLCAKLSAgICA3NTcxLCAxMzA3MywgMCwgMCwgNjgxLCA5ODMyNTIsIDcwMywgMCwgMzI3MiwgODc4MSwgMTI4OTQsIDcwMDc3LCAxMTcwOSwgCi0gICAgOTIyODgsIDc0NDQ2LCAwLCA5MjUzMiwgMCwgMTEzMzgsIDEyMDc2OCwgMzI3NiwgMCwgMCwgNjU5MjgsIDAsIDAsIDY1MDIxLCAKLSAgICA2NDc5NSwgNzQ1NzQsIDAsIDEwMDQ3LCA3ODgxNCwgMzI2MiwgNzg4MTEsIDQyNzExLCAwLCAwLCA2ODQ3OCwgMTYzLCA1NzYsIAotICAgIDk4OTUsIDE2NTUsIDc4ODE3LCA3NDU5MSwgNzg4MTUsIDc4ODE2LCA5ODMxMjIsIDAsIDAsIDAsIDEwMDM5LCAwLCAKLSAgICA5ODM5NDUsIDU2MjMsIDU3MTcsIDU3NzYsIDAsIDAsIDAsIDQxNTkxLCAxMTAzNiwgNjUyNTIsIDkyMzgyLCAwLCAwLCAwLCAKLSAgICA2Nzg0OCwgMCwgMCwgMCwgODg4NywgMTI3NTIxLCA3Mjk1LCAxMTAzMSwgMCwgNDMxNTcsIDAsIDg5NDYsIDEwMzQ4LCAKLSAgICAxMDQxMiwgODc1NSwgMCwgMCwgNTcxOCwgMTMyMjEsIDAsIDAsIDc4MTM1LCAwLCA5ODM3MTEsIDg4MTAsIDc0NDk5LCA2ODYsIAotICAgIDAsIDcxMzYyLCA0NjE5LCAxMTg5NTQsIDY2NTQsIDczNzY5LCA3NDQyNiwgMCwgMTIwNDAsIDY1Njg5LCAxMDEyOCwgCi0gICAgNjUxMTgsIDAsIDExOTE1MSwgNzQyMDUsIDkyNjUxLCAwLCAyNDAxLCA2ODE0NCwgODc5MiwgOTgzNjQ4LCAwLCA2NTQ1NSwgCi0gICAgMCwgOTIyNDYsIDAsIDExOTEyOSwgMCwgMTI4ODYsIDEyNzkyMCwgNjY2MjQsIDAsIDQzNTU3LCAxMDMwMCwgMTAxNjEsIAotICAgIDEwMzk2LCA3NDEzNSwgOTgzNDUzLCAxMTg5NDUsIDc4MTE4LCA3Mzg1MSwgMzAxMCwgNjQ0MSwgNzgxMjIsIDE0NTgsIAotICAgIDQxNDc1LCAxMjg2NzIsIDkzOTc1LCAwLCAxMTQ3OSwgMCwgMTIwMzU2LCA2MzUwLCAxMjg2NCwgNjk2NzQsIDc4MTE0LCAKLSAgICAxMDYxLCA2NDc4MCwgMjAwMSwgNDMxMTEsIDU1MjMwLCAxMjg2ODYsIDQwNTIsIDAsIDc2MjYsIDAsIDAsIDEwNDUsIDAsIAotICAgIDU2MzEsIDQxMTEzLCAwLCAwLCA0MzcwNywgNzQxMjcsIDAsIDAsIDg0ODYsIDAsIDczNzU4LCAyMzM1LCA0MzYyLCAKLSAgICA5ODMxOTUsIDEyNjU2MSwgNjkyMjEsIDEwMjUsIDAsIDQyNjI1LCA5MTc2MjcsIDc4MDg0LCA0MTQ0MywgMCwgMTI4MjA2LCAKLSAgICAwLCAxNzc0LCAxNTIzLCAwLCAwLCA0MTQ0NSwgNzgyMzYsIDAsIDg1NjcsIDQxNDQyLCAzOTg4LCAwLCA3ODIzNywgCi0gICAgMTE4OTEwLCAwLCA2NTI3NCwgODU2NCwgNzgxOTksIDc4MjM4LCAxMjc1MTUsIDAsIDAsIDQzNDQ2LCAwLCA2NjUxMywgCi0gICAgNjI1NiwgMCwgNTc5LCA1NTIxOCwgMTAyMDYsIDk4MzA3NSwgNjM3NSwgMjY3MywgMCwgMTE4MTQsIDAsIDQ0ODgsIDAsIAotICAgIDEyNzMzNiwgNjg0NTEsIDEwNDQ0LCAxMTg4NDYsIDEyNzMzNCwgMTE3OTksIDc0NDA3LCA2ODQ2NiwgNDQ4NywgMTI3ODQ5LCAKLSAgICA0MjgzMiwgMTAzMiwgMTIwMjY3LCA0MzQ1MCwgNzgyNTcsIDcyMDMsIDAsIDYxNCwgNzgxOTEsIDEyNzMyNSwgMTIwNjE1LCAKLSAgICAwLCA3ODI2MiwgMTI4NjY5LCAxMjczMjMsIDAsIDQzMTIxLCAwLCAwLCA5MjUxMywgMTA1MCwgNzU0OSwgMCwgMCwgOTMxNCwgCi0gICAgMCwgMCwgMTIwNjE2LCAwLCAxMDA1NywgMCwgMTI3MzEzLCAwLCA2NjUwNCwgOTgzMTcxLCAwLCAyMzA3LCAwLCA2NDMzMywgCi0gICAgMTI3MzEyLCAxMjg1NDcsIDczODczLCAwLCA5NDAzNSwgMCwgMTI3OTczLCAxMjg3MDgsIDAsIDEwMzYwLCA2NzQ2LCAwLCAKLSAgICA5MjI0NSwgNDQwLCAwLCAxMzA4NSwgOTIzMywgNzQyMTYsIDAsIDAsIDk5NTcsIDEyODI4NSwgNjY0NDcsIDgwNDYsIAotICAgIDY0OTYzLCA2NTc3NywgMTAxMjUsIDc0MjEyLCA0MjgxOSwgMTA5MTAsIDAsIDE1MjEsIDk4OTYsIDkzOTY1LCAxMDQ4NywgCi0gICAgNjk4NzgsIDEyNTI3LCAwLCA3OTcwLCAwLCAxMjg2NjAsIDAsIDY1NzY5LCA1MjQzLCA5ODQ5LCA1MjM5LCA2NTc3MSwgCi0gICAgOTgzMjM1LCAwLCA1MjM3LCA2OTcxNCwgMCwgMTAxMDMsIDUyNDcsIDQ3NjksIDAsIDExODk3NywgMTI4NzMsIDIyODMsIAotICAgIDk4MzIzNywgMCwgMzAwOCwgNDg5NiwgMCwgMTIwODcsIDAsIDU1MjMxLCA0MTEwMywgMCwgNjQ1NjUsIDQ3NzMsIDAsIAotICAgIDkyNzE3LCA3MDA3NCwgNDc3MCwgMCwgOTE3NTY3LCA4NzMxLCA2NTM3OCwgMTI3MzYyLCAxMjA2MTksIDkxMjIsIDEyODAzMywgCi0gICAgMTI2NjAwLCA0Nzc0LCAzMDE5LCA5OTk3LCAxMjgzNCwgMCwgOTQ1NiwgMTAyMTUsIDEyMDU0NywgMCwgMCwgMCwgMCwgCi0gICAgNzQ3NzYsIDQyODEsIDQ3NjgsIDAsIDQxNTM1LCA0MDk5LCA5MDE3LCAwLCAwLCA3ODA5NSwgMCwgNzgwOTYsIDAsIDAsIDAsIAotICAgIDc4MDk4LCAwLCA0MjgxNCwgODgwLCAwLCAwLCAxMjgwMjEsIDIxMzQsIDAsIDEwMTE2LCA5ODc3LCA5MjMyOSwgMCwgMCwgCi0gICAgNzA5NSwgMCwgNzQxMTYsIDY3NzgsIDAsIDc4MDkwLCA4MjQzLCAyNDI3LCAxMjgxNDEsIDcwOTMsIDAsIDExNTg1LCAKLSAgICAxOTUwMDMsIDk5NjIsIDAsIDEyMjIzLCAwLCAwLCAxNDM0LCAxMjAyNTQsIDU2MzcsIDExNTczLCAwLCAwLCAwLCAxOTk1MSwgCi0gICAgMCwgNzgxMjEsIDAsIDAsIDU1MjgzLCAwLCAwLCA3NDQzNywgMTE1NiwgODc0MCwgOTI0MTUsIDM3ODIsIDY0MzMxLCAwLCAKLSAgICA0MTM3MCwgMTAxNCwgODI2MSwgMCwgMCwgMTA4MzUsIDAsIDY1NTM2LCAwLCAxMjA0NjMsIDAsIDc3MDIsIDExODgyNCwgMCwgCi0gICAgNDMwMTAsIDY1Nzc5LCA2NTc4MywgMTE1MCwgMTA1NDcsIDU3MDAsIDAsIDEyMDYwMywgNjUzODMsIDIzMzksIDQyNTk0LCAKLSAgICA1Njk3LCAxMTg3ODgsIDAsIDEyODU3NiwgMCwgNDIyNTcsIDU2OTYsIDkyNjc3LCAxMjA0NjUsIDM4NjIsIDk2NDMsIDAsIDAsIAotICAgIDc2MzQsIDY1MTY3LCA5ODQ1LCAwLCAwLCA1NzAxLCA5NzIyLCA0MTQ5MCwgOTgzMTUzLCAxNDI2LCA2ODIxNywgMCwgCi0gICAgNjg0NDcsIDQyMjA0LCA1NTI3MCwgODU3MSwgMTk0OTkxLCA3ODA2NywgMCwgNzg4MTgsIDkyNzE5LCA0MzE4MiwgMTIxODQsIAotICAgIDAsIDQyMDIyLCAwLCAxMDI4MSwgMCwgNTY1MCwgNDMxOTQsIDY0NzEyLCAxMDc0NCwgMCwgOTkwLCA1NjQ3LCAwLCA3Mzg3LCAKLSAgICA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDk4MzkzMCwgMzk0NSwgOTI1ODksIDAsIDAsIDAsIDAsIAotICAgIDc4MjEyLCAxMjc3NDYsIDEwMjAsIDczNzYzLCAwLCA3ODczMSwgNTY0OCwgNjQ3NDgsIDE5NDkxMCwgNzg3MzMsIDEwMjA1LCAKLSAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDAsIDc0MDUxLCA5ODM2NTUsIDQzMjQyLCAxMjA0NTgsIDI2NjcsIDAsIDAsIDAsIDk5MTEsIAotICAgIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY2MiwgMTE4ODM2LCA5ODM3NDgsIDc4NDI3LCAxMTQwLCAKLSAgICA3ODQyNiwgMCwgMTAxNTksIDAsIDAsIDgxMjgsIDAsIDAsIDkxNzk2NSwgMTgxNSwgMTk5MTAsIDg5MCwgMCwgMzI2NywgCi0gICAgOTIyOTEsIDAsIDEwMTIzLCAwLCA0NDEwLCAxMDQxLCAxMDU3NiwgNjM1NCwgOTI1ODEsIDU4MCwgNzQyMzIsIDAsIAotICAgIDEyODM0NywgMCwgMCwgMCwgMTk5MzgsIDY1OTA2LCAxMjc4MTksIDAsIDAsIDMyOTgsIDUzNzUsIDEwMTQyLCAwLCA4MjE1LCAKLSAgICAwLCA2MTM0LCA0MTI0NiwgNjQ0MDIsIDAsIDY5ODk5LCAwLCAwLCAwLCA0MTM4MiwgMCwgMTI4NjUzLCA1MTczLCA2NTM0OCwgCi0gICAgNTI3LCAwLCAwLCA5MjYxMiwgMTI4MjUwLCA3ODc5NywgMTE5MTUsIDAsIDAsIDEwMDcyLCAwLCA0MjY5NSwgMjMyOSwgCi0gICAgNDIyNTAsIDAsIDEyODg2NCwgNjk2NjcsIDEyMjQ1LCAxNTY4LCA5NDAzMywgMCwgMCwgMTI4MTIwLCAwLCA3NDMyOCwgCi0gICAgOTI3MDgsIDc0NzY5LCAwLCAxMTkwODcsIDkwNjksIDYxNDQsIDAsIDAsIDczODIyLCAwLCAxMjgwMTAsIDY0OTE3LCAKLSAgICA0MTUyMSwgMTE4OTM0LCA0OTQsIDEzMjUwLCAwLCA2NTA5OCwgNjM2NCwgOTU2LCAwLCAxMjgzMCwgMTA0NjIsIDczNzQwLCAKLSAgICA3MzczNCwgMCwgMCwgMCwgNjY0NDksIDEzMjYzLCA3NDI4MSwgNjkyMTcsIDEzMTcxLCAxMjc3OTYsIDAsIDAsIDkyMjk0LCAKLSAgICAwLCAxMDQ0LCA0MTI3NiwgMCwgMCwgMCwgNDIwNjgsIDExNzk1LCAwLCAwLCAwLCAwLCA0MjQ1MCwgMzkwNywgMCwgNjQ1MjYsIAotICAgIDExODI5LCA2ODE5NywgMTIyOTUsIDAsIDExNDc1LCAwLCAzMDIwLCAxMTUzNywgMCwgNjY0NDEsIDk4MzQ1NCwgNzA5OCwgMCwgCi0gICAgMCwgMTA1NywgNTY2LCA0MjY5NiwgMCwgMzAxNiwgNDIyNzQsIDQzNDY0LCA2NjQ5MCwgMTI5MjEsIDY2NTcxLCA3ODQ3MiwgCi0gICAgOTI1MTAsIDMwMDYsIDQ2MjAsIDEyNzIzNywgOTgzNTc4LCAwLCAwLCA2NDY1OSwgMCwgMTI3NzQ5LCA1NTI1MywgNjM1NywgCi0gICAgNjM2MiwgODYyNiwgNzEzMzcsIDIyMTYsIDkwOTAsIDY1Mzc3LCA0MTU5NiwgMCwgNDI5MjAsIDE2OTgsIDAsIDY0NDc3LCAwLCAKLSAgICA0MzgxMywgMTA1MywgMCwgNzgyNjksIDAsIDEyNjU4NiwgMTA1MiwgMTA1MSwgNDU5LCAxMDYwLCA3NDM0OSwgNjY0NzksIDAsIAotICAgIDAsIDAsIDAsIDQyNDkwLCA2ODksIDY1MDgsIDQxNjMsIDQyMjk4LCA4NjM5LCA2NjY0MSwgNDI0NiwgMCwgMCwgMTIxMzAsIAotICAgIDAsIDQyMzM3LCA2NDU5NiwgNjQzNzUsIDY2NDgxLCAxMjc4NTAsIDAsIDAsIDYzNTksIDAsIDQzNDcxLCA5ODM3NjgsIDAsIAotICAgIDAsIDEyNzI3NCwgMCwgNjM1OCwgNjM2MSwgMTkyNiwgNjM1NiwgOTI2MjcsIDc4OTgsIDgxMTAsIDEwOTM1LCAwLCAxMDA2OSwgCi0gICAgNTgzMCwgMCwgNDM2ODUsIDAsIDAsIDAsIDAsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDk4MzgwOCwgMTIwNDEzLCAwLCAKLSAgICAxMjcyNTcsIDY1ODk0LCAwLCAwLCAwLCA5ODM5MjMsIDAsIDAsIDExOTE4NywgMjEzNSwgNzg4NjgsIDAsIDAsIDc4ODY5LCAKLSAgICA0MjMxMywgNTU3OSwgOTI0MTIsIDAsIDk4MzA4MiwgOTQwMDIsIDAsIDU1NzgsIDQxNzc0LCAxMjgxMTUsIDQyMDIzLCAKLSAgICA2MjM0LCA1NjY5LCA5MjI3NSwgMCwgMCwgMCwgMTI3NTA2LCA2ODIwMiwgNTU4MywgMCwgMCwgNDI0MjYsIDU1ODAsIAotICAgIDQyMjc2LCAyOTIzLCA4OTIsIDIyMjAsIDQyNDY1LCA0MTMzMCwgMTk0OTg3LCA1Nzk1LCA2NTUxMiwgMTE5MDA2LCA2NTcwMiwgCi0gICAgMCwgMTIwODAxLCA2NTI1MSwgMCwgNjU3MTAsIDAsIDAsIDY3NjcyLCAwLCA1MzcwLCAwLCAyOTMxLCAxNjM4LCAxMDk2NiwgCi0gICAgMTAxODgsIDY1ODc4LCAxMTg4NDgsIDAsIDY5Njk0LCA2OTg3OSwgMTI4ODMwLCA4MTcyLCA0MjAxNywgMCwgMTA4NDQsIDAsIAotICAgIDEyODE5NSwgOTI0MjQsIDYzNzQsIDAsIDAsIDI4NiwgNzgwMjMsIDEwNjIsIDAsIDExOTk5OSwgMCwgNzM5NSwgMCwgMTA3MCwgCi0gICAgNjQ5MDAsIDcxNTMsIDYwOTUsIDQxODY1LCAwLCAzMDE1LCAxMjgwMjMsIDEyNjQ2NSwgNTIxMSwgOTgzMDgzLCA2NDAwLCAwLCAKLSAgICAxOTQ5ODMsIDcwMDU0LCA4MTg5LCAxMTI3NiwgMCwgMCwgMzcyLCAxMjg4MjksIDAsIDExODg3NCwgNDIxMDIsIDQxNTg1LCAKLSAgICAxMjgyMDIsIDAsIDQyMTAxLCAyNzYsIDc4NDAyLCAwLCAzMywgNzQyMjYsIDEyNzMwMywgOTAwNywgMTE4Nzk2LCA0MTU4OCwgCi0gICAgNjYwMzMsIDQyNywgMTA3NjMsIDExODgxOSwgMCwgMTI3ODg0LCAwLCAxMDMxLCA2MjU3LCAwLCA0MjEwNCwgMCwgOTgzOTgwLCAKLSAgICAyMzI4LCA5MjQwOSwgMTA3MSwgNDI4OTksIDAsIDc0ODQ4LCAwLCA5ODM1ODAsIDAsIDEwNDcsIDAsIDAsIDY0NzkwLCAwLCAKLSAgICA2OTcyMywgMTA2NTEsIDAsIDAsIDAsIDAsIDkyMjA2LCAxMTkxODEsIDU3MTEsIDQxNjMzLCAxMjA5OCwgNjU1NzEsIDkxNjYsIAotICAgIDAsIDU3MTAsIDAsIDY3OTAsIDY1MTY4LCAxMzIxNiwgMCwgNjk3MTYsIDY5NzI2LCAwLCA2NDYxMSwgNDE2MjMsIDE5NTAwMSwgCi0gICAgNTcxNSwgNjk2NTQsIDAsIDAsIDU3MTIsIDI3NjEsIDQxNjIwLCA2ODEyNCwgMzA3NCwgNTcyMiwgMCwgODY0MywgNzM3NjgsIAotICAgIDAsIDExODkwNiwgMjc1NywgMTEwNjcsIDk3MTgsIDc0NDk4LCA4OTEwLCAxMDY4OSwgNjQ3OSwgMCwgMCwgMCwgNzg2MDcsIAotICAgIDkxOTYsIDY5NjcwLCAwLCAwLCAwLCAwLCAxMTg5MTEsIDAsIDAsIDAsIDAsIDAsIDEyMDAxMCwgMCwgODcwMSwgNjgxMzAsIAotICAgIDExOTYxNiwgMTIwNTIyLCAwLCA0MjQ3NywgMTk0OTk0LCAxMjEyMywgNDQ5NSwgNDM1NjksIDAsIDAsIDAsIDY0OTQ2LCAKLSAgICAxMDk5MiwgMCwgMTIwMDA5LCAwLCAwLCA5MzE4LCA5Mzk4NiwgMTMyNDksIDY1Njc5LCA3MzgwOCwgMCwgNjU0NTcsIAotICAgIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIDEyMDAwNSwgMCwgOTgzOTY2LCAKLSAgICA1MDg0LCAwLCAwLCAxMTg4NjEsIDAsIDczMywgOTE3ODc2LCA3ODAxNCwgNzg0MzYsIDc4NDM1LCA0MTY3NywgMCwgOTIxOCwgCi0gICAgMTczMSwgMCwgOTgzNzQ2LCAwLCA2Nzk5MCwgMCwgMCwgMCwgMTIwMDAxLCAxMjcwMTgsIDkyNDkyLCA1MTU1LCAxMjAwMDAsIAotICAgIDUzNTgsIDk4Mzc0NCwgMCwgOTE3NzY3LCA2NDQyNCwgOTgzMjMxLCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDc4MzE1LCAKLSAgICA2ODQzMCwgNjc5ODAsIDQzMjUzLCA2NTk0MywgMCwgMzM3MSwgMTA5ODgsIDAsIDg3NzEsIDE0NzksIDAsIDAsIDExMDksIAotICAgIDExNTgwLCAwLCA2NDYwMSwgMTIyMDUsIDAsIDAsIDY0NTA3LCA4ODY4LCAzOTksIDY3OTc4LCA3NDg0MiwgOTgzMjg0LCAKLSAgICA5ODM3MjEsIDEyMTQ5LCAxMzA4OCwgNTUxLCAwLCAxMDE1NiwgMTIxMTksIDkyNTcyLCAwLCAyNTQ0LCA2NTA3NCwgCi0gICAgMTE5MjExLCAwLCAwLCA3ODAxMSwgMzUxLCAxMTkxNDksIDAsIDAsIDU1MjI5LCAwLCA3NDI2OCwgMCwgMCwgMCwgNDIzNzcsIAotICAgIDAsIDAsIDAsIDk4MzkyNCwgMCwgOTAxMywgNDA1NCwgMCwgOTgzNTcwLCA5ODM2MjgsIDAsIDczOTYwLCA1NTg1LCA2NTg4MSwgCi0gICAgMjU0OSwgNzQ0NjksIDAsIDAsIDU1ODQsIDgzNTgsIDAsIDY0MjE1LCA5MjIxOSwgMTA5MTksIDAsIDc5ODAsIDEyNjYwMSwgCi0gICAgOTgzNzg0LCAyMjE4LCA0MTgwMCwgNTU4OSwgMCwgMjY2NCwgNDE2MTMsIDU1ODYsIDExODg5MCwgMCwgMTEzNTYsIDAsIDAsIAotICAgIDQzNDUyLCA3ODYwOSwgMCwgNDI1NzMsIDY3ODU2LCAwLCA3ODEyOSwgMCwgMCwgNzQzOTIsIDgxMzUsIDY0NTAsIDEwMDU1LCAKLSAgICA3Nzk5NiwgMCwgMCwgMTE5MjI1LCA1NjU3LCAwLCA5NjI2LCAwLCA3Nzk5NCwgMTAxNzksIDU2NTQsIDEyOTM5LCA5MjU3MywgCi0gICAgMTIwNzk5LCAwLCAwLCA1NjUyLCAxMDk0NSwgMCwgNjY0ODYsIDAsIDM2NjEsIDc4NjMsIDAsIDAsIDAsIDc0NTA5LCAKLSAgICA5ODM4NTIsIDU2NTksIDAsIDc4NjkyLCA2NjcyOSwgNTY1NSwgOTgzNjI2LCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAKLSAgICAxMjc3OTIsIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIAotICAgIDEwMzA0LCAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCA5ODM4ODcsIDY0ODcwLCAwLCAzNDY3LCAKLSAgICA5ODM4OTEsIDAsIDMzMzEsIDk0NiwgMTAyMzEsIDE0OTUsIDgxMzEsIDc0MzMwLCAwLCA5NTYyLCA2OTIyMiwgNjU5MjcsIDAsIAotICAgIDcwMDM2LCA2OTY5NiwgNjk3NjksIDY0NjU2LCA5ODM3MjYsIDAsIDk0MDIwLCA3MDA1NiwgNTY2NiwgNjUyMjcsIDUzMTgsIAotICAgIDYzOTk0LCAwLCA5MDkxLCAxMDc5OCwgMCwgMTI4MTY2LCAxMDE4NiwgMCwgNzczMiwgOTgzNzI0LCA2NDU1NiwgMCwgMCwgCi0gICAgNTY2OCwgNzQ0NDUsIDAsIDEyODY2MywgNTY3MCwgMTI2NjEwLCAxMjcyOTcsIDExODIwLCAyOTkyLCA3ODI2LCA1NjY3LCAKLSAgICAxOTk1MiwgMTIwODA3LCAwLCAxMjc0OSwgNzQ1NTEsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIAotICAgIDE0OTcsIDEyODI4NiwgOTQwMDQsIDAsIDAsIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgNjg0MzUsIDc4Mjc4LCAKLSAgICA2Nzg5NiwgNDMxOTIsIDAsIDc4MjY1LCA1NTMsIDEyMDY1MywgMCwgMTI4NTU0LCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgCi0gICAgNjU5MTIsIDAsIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgOTQxMDEsIDk0MTAyLCA5NDA5OSwgNjQ5MDUsIAotICAgIDk0MTA1LCA5NTEyLCA5NDEwMywgMTI3NDIsIDY0NDMsIDk4MzgwNiwgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAKLSAgICAxMjg4MzIsIDk4Mzg1MSwgMCwgMTIxNDgsIDAsIDc4Mjk3LCAwLCA2NDI1NiwgMCwgMTE2NjksIDAsIDU2MzQsIDQ1MjQsIDAsIAotICAgIDEyNzI3MCwgMCwgMTE4ODgwLCAyNDI1LCA2NTE4MiwgMTI4NzY5LCA0MzYzNiwgNTIyMSwgNzg0MTAsIDMyOCwgMCwgCi0gICAgOTgzODA5LCA2OTgxNSwgNTYzNiwgMCwgNTMyOSwgMCwgNTYzOCwgMTE5OTE4LCA3OTQwLCA2NDkzOCwgNDMyMjMsIDQzNzYwLCAKLSAgICA1NjM1LCAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDc4MjkxLCA2MjAzLCA0MjQ3LCAwLCAxMTkyMCwgODI3NCwgCi0gICAgMCwgMCwgMTY1NywgNDE1NjEsIDc4Mjk5LCA3ODI5NSwgNTYzOSwgMjk1NCwgNTY2MCwgNTY0MCwgNzgzMDMsIDk4MzY4NSwgCi0gICAgNzgzMDAsIDQyMjI3LCAwLCAwLCA0MTYzNywgNjc4NzIsIDAsIDc4MzEwLCA0MTYyNSwgNDMzNjIsIDc4MzA5LCAxMjA3MTMsIAotICAgIDExNzA1LCA1NjQyLCAwLCA1NDg2LCAwLCA0MzU2LCAxMTcxMCwgMCwgMTIwNTEsIDY5OTM4LCAwLCA1NjQxLCA4MjU5LCAwLCAKLSAgICAxMDU4LCAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgNzg3NTAsIDAsIDQyMjI4LCAwLCA3Mzg5MCwgMTE4OTcyLCAwLCAyODAwLCAKLSAgICAwLCA1NjQ1LCA2NDk2NCwgODY1MiwgMjU0NywgNjY0ODQsIDQzNjM0LCAwLCA1NjA4LCA2NTg5MCwgNDM4MDgsIDAsIAotICAgIDY3NjIxLCAxMTk5MzQsIDkwMDAsIDAsIDAsIDkyNjczLCAxODY1LCAwLCA1NjEzLCA2OTk1MCwgMCwgMCwgNTYxMCwgMCwgMCwgCi0gICAgNjU4MjYsIDIwNjksIDAsIDEwNzg3LCA0Mzk5OSwgMjk5NywgMCwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIAotICAgIDY1Mzc2LCAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgOTI1NDcsIDEzMTMwLCA2NTg3NCwgMCwgNTgwNywgMCwgCi0gICAgMTAwMzAsIDUzMDYsIDEyMzY0LCAxMjgwNjQsIDAsIDExNzA0LCAwLCA5MjU4MywgMTAyMTEsIDAsIDAsIDAsIDAsIDExNzA2LCAKLSAgICA5NzEwLCAwLCAwLCAwLCA0MTMsIDY1NjIzLCA3MTE4LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIAotICAgIDEyMTcxLCAxMTkyNDAsIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDk4Mzg5OSwgCi0gICAgMTMwOCwgMCwgMjUzNCwgODEwLCAwLCAwLCAwLCAwLCAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCAKLSAgICA3NDQ3MCwgNjY2MTgsIDY1NjgwLCAxMjA3NzksIDEwMDI3LCAwLCAxMjgxNTQsIDEyMzM3LCAxMjA3MjIsIDEyNzM2OCwgCi0gICAgOTgzMTY3LCAyOTgwLCA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODE4MiwgNjM2MywgMjc0OCwgMCwgMCwgNjUwNDEsIAotICAgIDkyMjc2LCA0NDAxMSwgODczMCwgOTgzMDY3LCAxMjc4NTQsIDc4MzEyLCA3Mjc0LCAxMTkyNTAsIDAsIDcyNzUsIDc4MzA0LCAKLSAgICA5MzUsIDAsIDY1ODQwLCAzNzcsIDQyMzI1LCAxMTY0OSwgMTI3MzYzLCA2NTI1MywgNjQzMDEsIDEyODgzNSwgNzgzMDgsIAotICAgIDQyMzQxLCA2NTI4NCwgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgCi0gICAgMTE5MjE3LCA3MjQ4LCAwLCAxMjgzNDYsIDE3ODEsIDU0OTYsIDM2MjcsIDYyLCAxNjQ5LCAwLCA5NjQsIDAsIDEyNzg3NiwgCi0gICAgNzgyMjYsIDEyODc3NSwgMTI3NTEyLCAwLCAwLCAwLCAwLCA0MzY4OSwgMTI3OTExLCAxMzE0MiwgNzg4MTIsIDQyNDE1LCAKLSAgICA2NjU3NSwgNDU0MiwgNjk5MDksIDQzNTQ3LCAwLCAwLCA3Njc3LCAyOTkxLCA0OTQ2LCA0MjQ1NCwgMTE1NjUsIDc5NDksIDAsIAotICAgIDk4MzkxOCwgMTEzNDEsIDQyNDk0LCAzMDczLCA2NTYyNSwgOTcxNCwgMTE2OTIsIDQ2NTcsIDAsIDkyNzI0LCA2NDc4LCAKLSAgICA5ODk4LCA0MzY3MywgNjUyMzcsIDYyNDEsIDcxMDYsIDQ4NzcsIDk4Mzc5NSwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgCi0gICAgNDQwOSwgMCwgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDk0MDQ3LCA2MjM3LCA0ODc0LCAwLCA5MTc2LCAwLCAxMjY1NTMsIAotICAgIDY1MjMxLCA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDAsIAotICAgIDAsIDU2ODUsIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAwLCA2ODE2MywgNTM0MCwgMCwgMTI3ODIwLCAKLSAgICA0MzYzNSwgNzM5MjgsIDEyNzUyOSwgMCwgMCwgMCwgMTI4NTEwLCA2NTQ4MiwgMCwgOTE0MiwgMCwgMTI2NDcwLCAwLCAKLSAgICAxMDkzOCwgMCwgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIAotICAgIDEwNzkwLCAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDk4MzkzOCwgCi0gICAgMTEzNzYsIDc0Mzc5LCAxMDcyMSwgNjc2NjQsIDM0MzgsIDQyMDk3LCAxMjcyNjcsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCAKLSAgICA3ODMwNSwgMTIwMTgzLCA0MTg3MywgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODQ0LCAKLSAgICA0MTg3MSwgNDEzMzgsIDM3MzQsIDc3MzQsIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgCi0gICAgMTI3OTM3LCAwLCA1MTYxLCAxMDU3MiwgMCwgMCwgMCwgNjQzNDksIDcyODcsIDQyMTYyLCAxMjc1NTIsIDAsIDEyNjYwNSwgCi0gICAgMTE5NDgsIDY5MjIwLCAxMjM1OSwgNDM0MjksIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgNjg2MzMsIDcyODYsIDAsIDY4NjM1LCAKLSAgICAxMDAzMSwgMCwgOTg3MCwgNjg2NDUsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCA0MjY3OCwgCi0gICAgMCwgNDM2NzcsIDQxNTgzLCAwLCA2NTc5OSwgOTI2MjMsIDAsIDAsIDk4MzkzNiwgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCAKLSAgICA2ODYyNCwgMCwgODMyLCAxMjA2OTMsIDEyMDc3MCwgNzg0NzMsIDY2MDA3LCA3ODQ3MSwgNjU3MDMsIDAsIDAsIDQyNzMyLCAKLSAgICA1MTgwLCA5MjY5OSwgNDEzOTUsIDQxNTMwLCAxMTY5MSwgNjQ3NzMsIDkyMjE0LCA3NDAwMiwgMCwgMCwgMTI4NjQ1LCAKLSAgICA2MzQ4LCAyNDMsIDEzMjAwLCA5ODM4MTMsIDYwMjQsIDkyMzA5LCA5OTc5LCAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAKLSAgICA0MzY4NywgMCwgMCwgNDI4NSwgNjYxOTUsIDAsIDQyMzAsIDAsIDczNjcsIDQzMjU2LCA5MjM1MywgNzU2MywgNDIzNzYsIDAsIAotICAgIDY4NDQyLCAxMjA1MTIsIDAsIDAsIDIxNCwgMCwgMCwgNzg0NjYsIDY1ODkzLCAxMjIwOCwgOTk3MywgMCwgNjYzMTEsIAotICAgIDY1NTg5LCAxMjgyNzcsIDI2MDMsIDAsIDAsIDAsIDcwMDQ3LCAwLCA2MDIyLCAwLCAyODg0LCAwLCAxMTYyMCwgMCwgNDMsIAotICAgIDAsIDY2NDUzLCAxMDE2LCA0MTEwNywgMCwgNDExMjEsIDM4ODUsIDkyLCA2NTQ1NiwgNjQ2MDgsIDAsIDc0ODAxLCAwLCAKLSAgICAyMDc0LCAwLCA3ODI4MywgMCwgMTI0NTMsIDEyODEyOCwgOTgzODI2LCA3NDI0MSwgMTI2NTY4LCA2NzkxLCAxMjQ1NywgCi0gICAgNzgyNjgsIDAsIDAsIDAsIDc4Mjc5LCAwLCAwLCA5MjM1OCwgNjY2MzcsIDc5OTUsIDg3NTksIDQzNDIxLCA3ODI3NywgCi0gICAgMTI0NDksIDEyODU1MiwgMCwgMCwgODc1MiwgMzE5NywgNDcyMCwgMTAxNjUsIDAsIDExOTI0OSwgMCwgMTE1OTUsIDY0ODkzLCAKLSAgICAwLCA0MzQzNSwgMCwgMCwgNDk5MywgMCwgNjE2OCwgMTA5MzQsIDE5NDYsIDc0MSwgMCwgNTQ5NCwgNDYzOSwgOTgzMTQ3LCAKLSAgICAxOTkwLCA2NjU4OSwgNDQ5OCwgNzg2NjQsIDExOTE4MywgMCwgMCwgNjk3MzQsIDI5NjAsIDczNzc5LCAwLCA4OTY5LCAKLSAgICAxMjgxMTcsIDQzNDI0LCAxMjcwNTksIDAsIDI5NTAsIDExOTU3OSwgNjIxMCwgNjU3NTMsIDM3MCwgMCwgMCwgMCwgNDk1MywgCi0gICAgOTgzNjgyLCAwLCAwLCAwLCA2OTIzMCwgMCwgMCwgNjU2ODgsIDk4MzI0NiwgNTA2MywgMzUxNywgMjk2NCwgNDM2NjMsIAotICAgIDkxNzc2MiwgNjM0NCwgNzQ3OTEsIDEwNTY2LCAxMDE0NCwgNjYzMzMsIDgyNTIsIDcyOSwgNjYwMTYsIDc4MjUzLCAwLCAKLSAgICA3MTMxNywgNjQ5MjMsIDEyODA0MCwgNDM2NjksIDkwMzIsIDc4MjYzLCA3ODI2NCwgMCwgNDEyMTUsIDAsIDY1ODgzLCAwLCAKLSAgICA5MTc3NzQsIDEyMDYwMiwgMzc2MSwgMCwgMCwgNzAwNjgsIDAsIDEyOTEyLCAxMTkwMTIsIDM4NTAsIDEyODE5MSwgMCwgMCwgCi0gICAgMCwgMCwgOTA4LCAwLCA4NjExLCAwLCAwLCAxMjc1NTUsIDQzNjkxLCA0MTE5NywgMCwgODk3OCwgMTIwNTQwLCAxMTkxMzUsIAotICAgIDQxNTg2LCAxMDUyNywgMCwgOTE3ODQ4LCAzODQ4LCA3ODczOSwgMTk0OTM3LCAxMjc1MzYsIDY1MjQxLCA1MzM2LCAKLSAgICA5ODMyNTksIDEyODc4NiwgNjYzLCAwLCAxMDc4MCwgMCwgMCwgNzg3NjcsIDk4MzI1NywgMTI3MTYzLCA2ODE5MywgMzQ3LCAKLSAgICAwLCAwLCA3ODc3NSwgNjQ2NzUsIDQxNTgyLCA3ODc3NCwgNzg3NDQsIDY1NTc5LCAxMjk4MCwgNzg3NjksIDEyMTQzLCAKLSAgICA2OTY1NywgNzg1MTIsIDAsIDQzNDQxLCA0MTgwNCwgNzg1MjMsIDAsIDc4NTI1LCAwLCAxMjg4NTksIDQxNTg0LCAxMDY4MSwgCi0gICAgMCwgOTgzNjk1LCA3MzkzOCwgMCwgMTI4MDIyLCA0ODAwLCA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCA3ODUzNCwgOTUxOCwgCi0gICAgNjYwOSwgMTA0MzQsIDAsIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIDQxNzMwLCA5ODMyMTQsIDAsIDczODQ3LCA3ODc2MSwgCi0gICAgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMCwgMCwgMCwgNDEyMDMsIDkxNzYxMiwgMTMxMTAsIDQxNzI2LCA5ODM4NTUsIDAsIAotICAgIDEwMDAsIDY5NjUxLCAwLCA0MTE0MCwgMTIwOSwgNzM5NzgsIDAsIDczNzUwLCAxMDczLCA2MzIxLCA3Nzg3OCwgNDExMzgsIAotICAgIDAsIDY4MjEzLCAwLCAxMjE2NywgMTExNSwgNDE2MDUsIDk3OTQsIDEyNzA2MiwgNjc2NzEsIDU1MjQ4LCAxMjIzNywgCi0gICAgNzg3ODcsIDY2MzE0LCA2NTg3LCA5MjkwLCA3ODc4MiwgNzg3ODMsIDkyMzEsIDc4NzgxLCAyOTU5LCA3OTI2LCAwLCAwLCAwLCAKLSAgICA2NDM5OCwgMCwgMTE5OTcwLCAxMjMxMSwgOTgzNzI3LCA3ODc5NiwgNzg3OTgsIDc4Nzk0LCA3ODc5NSwgNjg0MzQsIAotICAgIDc4NzkzLCA2NjY3MCwgMCwgMCwgMTIyOTAsIDEyMDE2OSwgMCwgMTE5ODczLCA0MjE0MiwgOTk2OCwgODIwNSwgMCwgNTEzMSwgCi0gICAgMCwgOTYyNywgNzg1MzYsIDc4NTQyLCA3ODUzNSwgOTgzMjEyLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIAotICAgIDExOTk5MSwgMTI3MDEsIDc4Mzc2LCAxMTMwOCwgMTE5OTk1LCAwLCAxMTk5OTcsIDExOTk5OCwgNjUzMDUsIDY1MTAwLCAKLSAgICA0MDMxLCA0Mjc5NCwgMTIwMDAzLCA3MDc1LCA4MTU0LCAxMTk5ODUsIDEyMDAwNywgNDE4MTcsIDczOTM0LCA0MjI3NSwgCi0gICAgMTIwMDExLCAxMjAwMTIsIDc4NTI2LCAxMjAwMTQsIDEyMDAxNSwgNjA0MSwgMCwgNDE4OTksIDAsIDgwMDIsIDAsIDQzNjQsIAotICAgIDAsIDAsIDY0MzMyLCAwLCA3ODEzLCA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCA3ODQ1NSwgNzI3OSwgCi0gICAgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgOTgzMjgwLCAxMzAxMiwgNDU3MSwgMCwgMCwgMTIwMTY0LCAKLSAgICAxMjA3OCwgMjk3MCwgMCwgMTA5MzMsIDAsIDc3ODcwLCAwLCAxMjcwMTUsIDAsIDQxNTk5LCAwLCAxMjg4MzEsIDAsIAotICAgIDEyOTUwLCA5MjE2MCwgMzQ4NiwgMCwgNzgzMTEsIDQyMzksIDAsIDEyNzc5OSwgNjY1MTEsIDAsIDI2MzcsIDY0NjI5LCAKLSAgICA4NDYwLCAxMjcwNTMsIDg0NzYsIDk4Mzk3NSwgMCwgMCwgMCwgNjU2NzMsIDEwMTksIDc4NDk1LCA0MTQ4LCAwLCAxMjI4OSwgCi0gICAgMCwgNDMxNiwgMCwgMTMxMTksIDg0ODgsIDU0MTIsIDY2MjQzLCA5OTM1LCAwLCA3Mzg2NCwgOTgzMjAzLCA0MTczNCwgCi0gICAgODIwNiwgNzQwODEsIDkxNjMsIDMyODYsIDkwNzIsIDU4NjcsIDEzMzAyLCA3NjIyLCA3MTIwLCA0MTczNiwgOTI1NDYsIAotICAgIDQxNzMxLCAwLCA3NDAwLCA1NDE2LCA2ODY2MywgMTE4OTI0LCAxMDgxNywgMCwgNDE1MzksIDEyNzI4NCwgMCwgNzM5NjMsIAotICAgIDQxODU1LCA0MTg2NywgNjU1NjQsIDExMjc3LCA2NTg5MiwgMTE1MzYsIDEwNjIwLCA5MjI3MiwgNzExNSwgNjYwMzAsIAotICAgIDczOTMyLCA1NDk4LCA3Mzk0MiwgNDE1MzYsIDAsIDY4MjA0LCA5MjU4NywgMzQ1OSwgODk5NywgMCwgMCwgMCwgMCwgCi0gICAgOTI1MTIsIDAsIDY2Mzc3LCA2OTc4MSwgMCwgOTgzNjk5LCA3ODUxMSwgMzE2MSwgMjk1LCAxMjAyMDcsIDAsIDkyMjIzLCAKLSAgICAxMjc4NTYsIDc4NzQyLCA5MDE2LCA0MzQ1NCwgNjM5MDMsIDYzOTAyLCA0MzY0MSwgMCwgMzk3MSwgMCwgNzAwNjMsIDI5NTIsIAotICAgIDc4NzY1LCAxMTAzOCwgMTA5MDEsIDYzOTAwLCA2Mzg5OSwgNjM4OTgsIDk0MDQzLCA2NjcsIDEyMzMyLCA2Mzg4NywgNjA4NiwgCi0gICAgNDE3MjIsIDAsIDUxNzIsIDAsIDk4MzI3OCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgNDExOTgsIAotICAgIDg1NTUsIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCi0gICAgNjM4NzUsIDYzODc0LCAxMTQ2MCwgNzQzMiwgMTkxMywgNDE5MTMsIDYzODUyLCAxMjY2MzYsIDAsIDQyMzQ4LCA3Mzg5MiwgCi0gICAgNjc1MiwgNDQ2LCA0MTkxMSwgMTI3OTA2LCA2Mzg1MSwgNjM4NTAsIDQxOTEwLCAwLCA2Mzg0NiwgMjk3MiwgMTI5MzIsIAotICAgIDcyNjIsIDAsIDYzODQ5LCA2Mzg0OCwgNjM4NDcsIDEyODA3MCwgNjU3MCwgODMwMiwgNzI1OSwgNjM4NDIsIDQxNzgsIAotICAgIDEwNzQ2LCA3MjUwLCAxMzIxNCwgMTAwNDEsIDgxMDUsIDYzODkyLCAwLCAxMTg5ODMsIDExMDUsIDQxODAsIDAsIDEyMDk0LCAKLSAgICA5NDk3LCAwLCA2Mzg5MSwgNjM4OTAsIDYzODg5LCA2Mzg4OCwgNTUzOCwgOTk4NywgMCwgMTE4OTMyLCAxNjc4LCAxMzI3NCwgCi0gICAgNTUyLCAxMjA2NTQsIDQ0MDEwLCAxMDc4NSwgMCwgMTE5MTcwLCA0NTU3LCA3NDQ1OSwgOTE1OSwgMTAxNzEsIDEzMTI1LCAKLSAgICA2Mzg2MCwgNTU0MCwgNjM4NTgsIDYzODY1LCAyODEsIDEzMjQyLCA2Mzg2MiwgNzQxNTQsIDAsIDU1MzYsIDY1NTY4LCAKLSAgICA2Mzg1NywgMTM4OCwgNzQxNjksIDAsIDEwNzcsIDk4MzU3NywgNjUwOTksIDExNTMxLCA1ODM0LCAwLCAwLCAwLCAwLCAKLSAgICA0Mjc3MywgMCwgMCwgMCwgMTE5MjIwLCAwLCAzNjYzLCAwLCAxMTEyLCAxMTkxMjIsIDg2ODYsIDAsIDUzMzQsIDY1MDgxLCAKLSAgICA0MzI0OSwgNzQ3NzgsIDEyNzk2OCwgMTEwNzcsIDAsIDY1MDksIDAsIDUzMjcsIDAsIDE5OTA3LCA2Mzg2OSwgMzQ3OCwgCi0gICAgNzU4MywgNzY3OSwgMjkwMywgMCwgMzAwMSwgMTE1OCwgODc0NSwgNDM3NDYsIDczNzQ4LCA2Mzg2NiwgNzg2MjYsIDE5MTUsIAotICAgIDQ4NDYsIDAsIDY2MzcxLCAxMTg5ODQsIDQyMTA1LCAyOTkwLCAxMjAxMjgsIDgwNSwgNjkyMzgsIDY0NDM4LCAxMjA3MCwgCi0gICAgODc2MCwgMTExNywgMTE4OTg3LCAxMjIxMiwgMTIwMTIzLCA2NTE3NCwgNDIzNTcsIDYzODM1LCA2MzgzNCwgMCwgNzgyNDAsIAotICAgIDEyMjI1LCA2MzgzOCwgNjM4MzcsIDk4Mzg1MywgOTgzODA0LCA2MzgzMywgNjA0MiwgNjYzNjAsIDgwODMsIDAsIDAsIAotICAgIDYzODIxLCA2MzgyMCwgNjM4MTksIDYzODE4LCA5ODM5MDQsIDUyMjcsIDkwNDcsIDYzODIyLCAxMjcxNjIsIDYwOTEsIDAsIAotICAgIDEwNjkxLCA1NjAsIDU2NDMsIDgyMjYsIDExOTU3OCwgNjM4MTIsIDYzODExLCA2MzgxMCwgNjM4MDksIDIyODksIDYzODE1LCAKLSAgICA2MzgxNCwgNjM4MTMsIDYwNDcsIDE1OTcsIDEyMDE0MywgNzgwLCAyMDYsIDc3OTI1LCA0OTM2LCA2NTE0NywgODE2OCwgCi0gICAgNjM5MzAsIDIwNzYsIDEwOTMsIDk4ODIsIDYzOTM0LCAyMDgyLCA2MzkzMiwgMTI4MTUwLCA2MzkyOSwgMzU0NiwgMTYwNSwgCi0gICAgNzc5MzQsIDk4MDYsIDQzNDcyLCA3NzkzMywgODQwMCwgMTEzNDMsIDIwODYsIDAsIDYzOTI2LCAyOTg0LCA1OTY4LCA5Mjg3LCAKLSAgICAwLCA0NjE4LCA0MjIwOSwgNDM0MzEsIDEzMTY5LCA1MjkwLCAyMDg5LCAxNjk1LCAxMDc0MywgMTA4OCwgNjM4MjUsIDcyNjgsIAotICAgIDEwODQsIDEwODUsIDYzODI5LCAxMDgzLCAxMDEzMSwgNzI4MywgMCwgNjM5NzAsIDEyODM1OCwgMTA5MiwgNDc1NCwgNzI3MywgCi0gICAgNTI1MiwgNDQwMTYsIDQzNjI3LCAxMjc5MjEsIDAsIDc0MDgsIDExODA5LCA5MTc2MTgsIDAsIDAsIDI5NjUsIDcyNTgsIAotICAgIDg4MDgsIDAsIDEwODksIDQxODcsIDYzOTM3LCA0MjExOSwgNDIxMjAsIDAsIDk0MCwgNTc4NywgMTAwOTksIDYzOTM4LCAwLCAKLSAgICA3NDQ5NCwgMTI0NjMsIDI5OTQsIDAsIDExODgyNywgMCwgOTY2NCwgNzc5MzksIDc3OTQwLCA2Nzg5MiwgNzc5MzgsIAotICAgIDc0MzQzLCAwLCAwLCA2NjAsIDEwMTI3LCA2NjYsIDkwMjIsIDU1MzIsIDQzNjY3LCA1NTMzLCA3Nzk0MSwgNzg1MDcsIAotICAgIDYxMTgsIDIyMiwgOTc5LCAzODg0LCAwLCA3NDE1MSwgOTI2NTIsIDY1MDIsIDAsIDEyNzExOCwgMTI4Njk1LCA2Mzk1MSwgCi0gICAgMTI0NjUsIDAsIDAsIDEyODc4MiwgNjM5NDYsIDE3MDcsIDYzOTI0LCAxMjQ2MSwgNjM5NTAsIDYzODk3LCA2Mzk0OCwgCi0gICAgNjM5NDcsIDYzOTQ1LCA2MDM4LCA2Mzk0MywgNjM5NDIsIDY0Njg1LCA2Mzg5NSwgNjU4MzgsIDIyNzYsIDc3NzYsIDk0MDc2LCAKLSAgICAwLCAxMjc3NzMsIDEyMDQ0NCwgNjk3MzAsIDgwMSwgNDMxNjUsIDE2OTAsIDYzOTE5LCA2MzkxOCwgNjM5MTcsIDEzMjc3LCAKLSAgICA0MzY1OSwgMTI5NTEsIDEyMDYzOCwgOTkwNiwgMjA1NCwgMjMzNCwgNzg1MTUsIDYzOTE2LCA1NDgzLCA2MzkxNCwgNjk3MzcsIAotICAgIDYzOTExLCA1NDg0LCA2MzkwOSwgNjM5MDgsIDI1MzksIDAsIDQzOTgwLCA1NDg1LCAwLCA0MjY5NywgOTA2MSwgNTUzNCwgCi0gICAgMTA2NzIsIDQ1MDIsIDAsIDI1MywgMCwgNjgyMDgsIDAsIDkyMDMsIDc0MjMxLCAwLCAxMTUzMCwgOTI1NDIsIDY4NjY4LCAwLCAKLSAgICAxMTg5MDcsIDAsIDEwNDc0LCA0MzQyNiwgMTMyNTcsIDQyMzU0LCAxMjgwOTksIDk4MzY5OCwgNzAwNDQsIDE5NTA2NSwgMCwgCi0gICAgODQxMywgOTgzODE2LCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCA3NDM1MCwgMTk1MDYzLCAwLCAwLCAKLSAgICAwLCAxMjY2MzksIDEyMDA5NywgMCwgOTQwNzgsIDEyODEzMywgMTI3NzY3LCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIAotICAgIDQyOTEzLCA5MjE4NywgNzI3MCwgMCwgNjY2MDYsIDY2MjgsIDEwNzYsIDc0MzMsIDE0MzYsIDczODQ0LCA1NTIyNiwgCi0gICAgMTI4MzUzLCA2Mzk4MiwgNzM5MywgMTI4MDcsIDQzNDEzLCA2MzkwNiwgMTU5OCwgNjM5MDQsIDAsIDAsIDQxNzI5LCA0NDIzLCAKLSAgICAxMzA3LCAwLCAxMDUxNSwgNDE1ODksIDEyODY5OCwgMCwgNjIxOCwgMCwgMTQzMCwgMCwgMCwgMTIwNjA2LCA3ODc1NCwgCi0gICAgNTQxMywgNzYxOSwgMzI1NSwgMzQ5MywgNzQwMzIsIDExNTQ5LCAxMDczNSwgNDE3NDMsIDczOTM3LCA2ODAxLCA5ODM2MzMsIAotICAgIDQ1MTgsIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgMTIwMTU4LCAyNzEwLCAwLCA2OTI0MywgNDE3MjQsIDAsIAotICAgIDQzMDczLCA0MTY5MCwgMTI0NzksIDk4MzYzNSwgMCwgMCwgOTgzODE4LCA3MDA0NiwgMTYyOCwgMTI3MTQ5LCA5ODM0ODcsIAotICAgIDk4MzczMSwgNjUyNjIsIDYzMzMsIDEwNzgzLCA0MjMxNSwgMCwgNjM4NTUsIDk0MDU2LCAwLCAwLCA1MzM5LCA3NDMyMywgMCwgCi0gICAgMTMwMDQsIDAsIDQ0NTcsIDAsIDAsIDE5NDgxOCwgMCwgNTY4NCwgODY3OCwgMTA5MTQsIDAsIDU2ODksIDY1ODA3LCAwLCAKLSAgICA2ODQ2NCwgMTI2MzMsIDEyODcwLCA2OTcwNSwgNjUxODMsIDU2ODgsIDExOTI2LCA2MDMzLCA2MzEwLCA1Njg2LCAwLCAKLSAgICA3NDI1MSwgMCwgMTIwNjQ3LCAwLCA1MCwgMTA1NTgsIDk4NzEsIDQyNjEyLCA0MzY1NSwgMCwgMCwgMCwgNjY0NjgsIDAsIAotICAgIDEzMjU5LCA0NDQ4LCAwLCA5ODM4NDUsIDAsIDcwMDQzLCA2Nzg1MywgMCwgMTA2NDAsIDExNTM5LCAxMTUxLCAwLCAKLSAgICA5MTc2MDcsIDEyNzU0NCwgMTI3MDc5LCAxOTUwNTAsIDEyNzg1MiwgMCwgMCwgMCwgMTI1MDEsIDY0NjA0LCAwLCAxMTUyNywgCi0gICAgMTE4ODcwLCA4ODEyLCAwLCAxMTUzOCwgODY3MywgMTI2NTAsIDExMDIwLCAwLCA2NjQ2NywgMjEwNSwgODA4NywgNzgxNjMsIAotICAgIDY5NjMyLCA5ODk0LCAwLCAwLCAwLCA0NjM2LCA1NTI2MiwgNzg1MTMsIDQ1MTUsIDIzODIsIDAsIDEyNzA1NSwgMCwgCi0gICAgMTIwNDk1LCAwLCAxMjgyODQsIDEyMjc3LCAxOTQ2MjcsIDExOTk1LCA5MjU1MywgMCwgMTIxNTgsIDAsIDg3NDEsIDEwMTk3LCAKLSAgICAwLCA5MjQyNiwgMCwgNjUzMSwgMCwgMTI3ODQ2LCA0NzMsIDQzNDE1LCAwLCA5ODM2NTAsIDE4NzMsIDEwODcsIDAsIDAsIDAsIAotICAgIDc4NTI3LCA2NjQzOSwgNDMyMTgsIDk4MzEyMywgMTk0NzE2LCA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIDk4MzU3MSwgMCwgCi0gICAgOTQ4OSwgMCwgMCwgNDM4NCwgNzQyMjAsIDYzODQ1LCAyMDU4LCAxMjg4NjMsIDEzMjk1LCA0MzE5MSwgMTI4MDMwLCAwLCAKLSAgICAxMTU0LCAzODU3LCAxMjA1LCAwLCAwLCAxMzEwMCwgMTI5NTgsIDEyMDcwNiwgNzQxNjgsIDAsIDAsIDQ0MjEsIDEwNTkyLCAKLSAgICAwLCA0OTUsIDExOTAwNywgNDE3MTIsIDc5ODMsIDAsIDkzOTk3LCAwLCA2MzQ3LCAxMjAxNjUsIDc2NTQsIDQxNzEwLCAKLSAgICA0MTk2LCAwLCA0MzcsIDQxNzA5LCA3Mzc3MiwgMCwgMCwgOTQ2NSwgMTMyOTAsIDExOTE4MCwgNDk5NywgNjQzMDYsIDAsIDAsIAotICAgIDQ5OTksIDE5NDY0MiwgMCwgMTI2NTgyLCA0NzExLCAxMjA3NjksIDAsIDI3MzksIDAsIDgwNDQsIDc0ODM0LCAxOTQ2NDMsIAotICAgIDQxNzg5LCAxMjgxNDIsIDEwODA5LCAwLCAwLCAwLCAxNzc5LCA2NjAwLCA2NjAxLCA0MTU0MywgNTMyNSwgNjQyLCA2NDE4NywgCi0gICAgMTMwNTgsIDEyMDQ0OSwgMTI4NzUsIDAsIDkyMTg2LCAxMzIyOSwgMCwgMTA1NzUsIDQzMzk5LCAwLCAwLCA0MTc5MSwgCi0gICAgMTEwNCwgMCwgMCwgMTA2NTUsIDAsIDAsIDAsIDAsIDEwODIsIDE5NTA0OSwgODQyOCwgNjU2OSwgMCwgMCwgMCwgNjk4NDksIAotICAgIDY3ODMsIDAsIDEyOTkzLCA4MDQ5LCA0MTU0OCwgNDQwMjEsIDY0NTgsIDk4MzgwNywgMTI4ODgyLCA0NzYxLCA2MzgyOCwgCi0gICAgNDc2NiwgNjQ2MjMsIDEyNzMsIDQzNDA3LCAwLCAxMTg4NzYsIDE5NTA0NSwgNjkxMiwgMTMxMywgNjMyMiwgMTA0ODMsIAotICAgIDk4MzYwMywgNDE1NDUsIDAsIDkyNDQ5LCAwLCAwLCAwLCAwLCA3ODYyNCwgMzQ4NCwgNzQzMzcsIDAsIDAsIDg1MDMsIAotICAgIDUxMjIsIDQxNTI3LCAwLCA2NjMyMCwgOTgzODExLCAwLCAwLCAwLCA0MTUzNywgNjk2ODMsIDgzMDMsIDgyODIsIDExODE3LCAKLSAgICA3Mzg1NywgMTAwMDMsIDczODU5LCA2NTkwNCwgNzM2MywgMTY4NiwgMCwgNzg0MDYsIDExNDY3LCAzNjY0LCA2NTkyMSwgCi0gICAgNjQyOTksIDE5NDY2NCwgMCwgMCwgNDMyNCwgMTI2LCA0MjI0NiwgMTE5MTUyLCAwLCA3NDM3OCwgNjU5MjYsIDc3NDQsIAotICAgIDE5NDYzNiwgNzQyNzcsIDc0MzAyLCA3ODA1MiwgNDM4MTcsIDY5NjYsIDQzODIyLCA4MTM2LCAwLCA2NTYwMCwgMTYzMywgMCwgCi0gICAgMCwgNDc2MiwgMTEwMywgMCwgMCwgNDc2NSwgOTgzNDkyLCAxMzA3OCwgMCwgNDc2MCwgNjM4MjcsIDIwNTAsIDEwODcxLCAKLSAgICA0MzE5OSwgMTEwMiwgMCwgNDIyMzYsIDEyODg2NywgMTk0NjY3LCAxMTU0NiwgNzQ3OTQsIDMzNywgMCwgNDI1OTEsIDg2MjcsIAotICAgIDEyMjc5LCAxMTExLCAwLCA5MjE2MSwgNDcwNywgNjgyMDYsIDEwMTQzLCA3ODgzLCAxMjcwODEsIDc4ODAsIDQ1MjIsIAotICAgIDg2NDUsIDU3MDQsIDEzMDEwLCAwLCA4MzA0LCA5MTc1NjEsIDAsIDExOTU3NSwgMjI5MywgMCwgNjY2NTQsIDAsIDkyNjc2LCAKLSAgICAwLCAxMzAwOCwgMCwgNDM4NSwgMCwgMTMwMTEsIDAsIDkyNTY5LCAxMTkxNjEsIDEzMDA5LCAxNjAsIDI2NzcsIDAsIDAsIAotICAgIDQxNzkzLCA2NTc2MywgNzQyMjEsIDEyMDE0MSwgNDE3OTIsIDQyNzcwLCA5NDA1NCwgNjU3NjIsIDExODgyOSwgNDM4MjEsIAotICAgIDU3MDksIDAsIDk0MDUzLCA0MzgxNiwgMCwgMCwgMTA3OSwgMzg2NywgNTcwOCwgMCwgMCwgNDM3OTcsIDU3MDYsIDY0NzY4LCAKLSAgICA1NzA1LCA4NzkxLCA0MDA1LCAwLCAxMDIzNywgMTA5OTEsIDEyODgxNiwgNDM0NTksIDkxNzMsIDkxNzU4MSwgOTE3NTgwLCAKLSAgICAxMzE3MCwgMTI1NDAsIDkxNzU3NywgNDI2MDUsIDEyMDc2NSwgMTI2NjE3LCA2ODY0NywgOTE3NTcyLCAxMDA1OCwgMCwgCi0gICAgNzQ4NjcsIDE5NDY1NCwgMTI3MDc4LCAzMzM5LCAxMTQ0OCwgMTEwNiwgOTE3NTkxLCA5MTc1OTAsIDkxNzU5MywgMzM0MCwgCi0gICAgOTE3NTg3LCA5MTc1ODYsIDkxNzU4OSwgOTE3NTg4LCAxMjA1NDEsIDEwNjA1LCAxMzA5LCA2Mzk2NiwgMTIwNzQzLCAxNzU0LCAKLSAgICA5MjIyNiwgMTMyNDYsIDg2NCwgMCwgMTE4OTI2LCA4OTcyLCAwLCA3ODQ5LCAxMjAwOTIsIDkyNTMzLCAxMzI0MCwgCi0gICAgMTk1MDY4LCA1MTkyLCA0MzM4LCA2Nzk4MiwgMTA5NDgsIDkxNzYwMSwgMTMxOTksIDkyNTc1LCAxMjM2LCAxMzIwOCwgCi0gICAgMTMyNjEsIDEzMTg5LCAxMzE4OCwgOTM5OTMsIDAsIDc0NDAsIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAKLSAgICAxMzE3OCwgNjM3ODIsIDYzNzgxLCA2Mzc4MCwgNjM3NzksIDE1ODMsIDAsIDEzMjYwLCA0NTUwLCAwLCA2NDIwNSwgMCwgMCwgCi0gICAgNDE1MjIsIDk4MzkxNSwgOTIxNjgsIDk4Mzc3MiwgOTE3ODU4LCAxMTM1NCwgOTQwNzEsIDAsIDQyNzk1LCAwLCAxMTkxOTUsIAorICAgIDczOTgyLCAxMjA1MTgsIDgzNDczLCAxOTUwODYsIDQzMzY5LCA5ODMxNzcsIDEyODE0MCwgNjg0MTUsIDc3ODYxLCA0NTM4LCAKKyAgICA5Mzk3OCwgNDMxNDEsIDk4Mzc2OSwgODI5NzYsIDc0MjE0LCA3Mzg4NiwgNjc3MDksIDkxNzU5OSwgNzE5MTgsIDQzMDA1LCAKKyAgICA3MTExNCwgOTU1MiwgMCwgNzAxMjksIDEyOTE3MywgMTI5OTcsIDgzNDc3LCAwLCAxMjg4OTcsIDE5NTAzMCwgMjM4MSwgCisgICAgMTI4ODMsIDEwOTk0LCAxMDUyOSwgNDE5MDYsIDAsIDc0NjE4LCAwLCAxMjQyNSwgMTA2NjEsIDEwODU2LCA5NjE0LCAyNDI4LCAKKyAgICA0MTQ3OCwgODU4MiwgMTAwNjQsIDczOTMwLCA4Mjk3NywgNzA0MzcsIDEyMTI1MSwgNjQ4OTYsIDExOTE2MiwgMTk1MiwgCisgICAgOTIxODEsIDg0NTUsIDEwMDgyLCAxMTU3NSwgMTI4NDUwLCAxMTk1NjYsIDEyODA5MywgMTI4MDgsIDEyMTgzLCA2MTQ1LCAKKyAgICA3NTAyMCwgNjQ5MjksIDc0OTg1LCA3MTkxNiwgNzQ5ODQsIDQzMTg2LCA0MjUwOSwgMCwgMzkyMiwgOTE4NywgODMyNzcsIAorICAgIDgzMjc4LCAxMDE5MSwgODMyNzEsIDExNzUyLCAzMzUzLCA5MzU4LCA5ODM0NjIsIDcxMzY2LCA2NjY4MCwgMTIwMDkwLCAKKyAgICA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgMTIwMDQ3LCA5ODMwNTYsIDgzNDcwLCAxMjAwODEsIDExOTA1MiwgCisgICAgNDEwMjcsIDEyMDA4NiwgNzE0NDksIDEyMDA4OCwgNzM2NiwgNzAxOSwgNzAzNzgsIDAsIDExNzUxLCAxMjAwNzgsIDc4Mjk0LCAKKyAgICA2NDY1NywgODY1NywgODM0NzIsIDg1OTQsIDEyMDA2OCwgMCwgOTgzNzg5LCAxMjAwNjksIDEyMDA3MiwgMTIwMDcxLCAwLCAKKyAgICAxMTM3MTEsIDQzMTU0LCA0MTAyOSwgMTE5OTU2LCAxMTMzMiwgNjUzODAsIDc3MjgsIDk0MDc3LCAxMTI5NCwgMCwgNjY2NjUsIAorICAgIDc4NTEsIDAsIDgzNzUsIDg2OTksIDEyNzk0OSwgNDI1MjQsIDY4NDE5LCA5MDg1LCA5NDA0MSwgNzUwNCwgOTMyNywgNjE2MCwgCisgICAgNzM4NDIsIDk4Mzg2NCwgMTk0OTI5LCA4MDg4LCAxMjg5MzcsIDc0MDEyLCA2NjU2MiwgMCwgNDQzOSwgNjkyNiwgNzI0MjMsIAorICAgIDEyOTI0LCAxMjgyMjcsIDQyMzY5LCA0MzUwLCA2NTQ5MSwgNjUxNDUsIDkwNDEsIDQzNTU5LCA2NDU3NywgMTA4MjYsIAorICAgIDEyNzQ3NiwgMTEyOTYsIDk4MzI4NSwgOTgzNDA5LCAwLCA2NTgyNSwgOTU3NywgNjgxOTksIDk4MzM5MywgNjQ2NzAsIAorICAgIDk4MzEyMSwgNzgwNTYsIDY3OTMsIDExMjk1LCA3MDQwOSwgNzgwNTMsIDczODcyLCA3ODA1NSwgMTE5OTkzLCAxMDkwMiwgMCwgCisgICAgMCwgNzgwNzAsIDExMjAwLCAxMDQ3MiwgMjk5NSwgMTIxNDM4LCAxMjAxMzgsIDY0NjgyLCAyMzcxLCA3ODA2OSwgMTE4ODkzLCAKKyAgICAyNTksIDEwMDksIDcwNDA1LCAyNDAyLCAyMzMzLCA2NDQwLCAxOTQ3NDEsIDExMzc1NywgNjUxMjUsIDQxMjQ0LCA3MDQwNywgCisgICAgMTMyNzEsIDkxMDMsIDIyNzgsIDk4MzE0NiwgMTk0NzI4LCAxMjkxMjAsIDAsIDEwMjE5LCA3NDk2OCwgMTk0NzQwLCAwLCAKKyAgICA2NzcxOCwgNDMxNzgsIDEyNzA3MCwgNDEyNjEsIDExOTM2MiwgNDM2NDAsIDg2MTMsIDAsIDk0MDQ5LCA2NzM2LCA4MzQzOSwgCisgICAgNDE0OTIsIDEyMDA1LCA2OTkyNywgMTI3MDY4LCAxODkwLCAxMjAwNTYsIDAsIDgzNDQzLCAwLCA3MjkzLCA3OTkxLCAKKyAgICA3NDA1MiwgMTA1NzgsIDEyMTE0MSwgNzgwNzYsIDEyODYyMCwgNjczNjgsIDY5OTI4LCA3MTg1MCwgNzg4MDAsIDkyNjUzLCAKKyAgICA2NDQ0NSwgNDI2NjgsIDY2MzUsIDEyODMwOCwgNjE2NCwgNjUxNzAsIDc0OTM2LCAxMjExODIsIDc2NzYsIDExNjY0LCAwLCAKKyAgICA5MzAyNSwgNjk3MDcsIDkzMDIyLCAxMTg4MTIsIDAsIDcxMDk2LCAxMjgwNDUsIDkxNzUsIDExOTI1LCA3ODA0NSwgOTA4OCwgCisgICAgMTE5MTQ1LCA2NDU0NSwgMTM5NiwgMTIwNjY0LCA3NTQ2LCAzODQ3LCA3MTA4OCwgOTMwMzcsIDQ5ODUsIDEzMjg4LCA2NzIsIAorICAgIDgwOTgsIDQzMTk2LCAxOTQ3NDYsIDEyMDcyMywgMTI4MTI2LCA0MjY1NSwgNzQwNDMsIDY1MDcyLCAxNTc3LCAxMTc3MiwgCisgICAgMTMwNDEsIDU5MjgsIDQ1MjUsIDEwNjU4LCA2NTkxMSwgMTI2NiwgMTAxODAsIDE5NDcxMSwgMTI4MzcxLCAxMjYyMiwgCisgICAgMTI3MjM0LCAxMjQ5NDgsIDAsIDEyMTIxNCwgMTI3MTM5LCAxMzMxMCwgNzczLCAxOTkzMywgMTUzOSwgMCwgNzQ5NjksIAorICAgIDQyNzMxLCA2Nzk3MiwgNzQ5NzAsIDcxMDY2LCA5ODMyMDAsIDMwNTEsIDU4NjIsIDc4MjMsIDkyNDc4LCA5Mjc0NiwgCisgICAgMTIwNDExLCAzMjUwLCA0Mzk5MSwgNjk2ODcsIDY2NjQ5LCA5NTEwLCA2NjIzNywgOTgzMzA0LCAwLCA0MTA2NiwgNjQ2NzMsIAorICAgIDkxNzk2MywgOTIzODEsIDEyODYzNiwgMzUwNSwgODcwNywgNzQ5MjUsIDY3MjUsIDEyMDgwMiwgMTIxMjk2LCA3NTA0MSwgCisgICAgMzQ3MSwgNjYzOTEsIDU0NzksIDg4MiwgNjY4NiwgMTE5NTg0LCAxMTYxMywgMTIwNzcyLCA0Mjc1NCwgNzQ2MDgsIAorICAgIDEyNTAyOSwgODM0MzMsIDEyMTIzNywgMTIwODQ1LCAwLCA4MzQzMSwgMzIyNSwgOTE3OTk2LCA0NDMzLCA0MTE1NiwgCisgICAgNDM5NzMsIDQzMTczLCAxNDQzLCA0MzgxLCAwLCA5ODM2NDIsIDEwOTI2LCAxMTc1NiwgMTE3NTcsIDY0ODc5LCAxMjExMDYsIAorICAgIDQyNjU0LCAxMjc4NDgsIDEzMjI3LCAxMjAzMjAsIDEwMDIxLCA1MTYwLCAxMzg3LCAwLCA5MjY0NCwgNDE0MTgsIDEyODkzMywgCisgICAgNjU5MTQsIDY3MjEsIDIxNywgOTE3OTU1LCA5MTc5NjAsIDEyMTA4MiwgMTA0NDMsIDEwNzg5LCA0MTE1OCwgMTE5MjU3LCAKKyAgICA0Mjc0LCAxMTE0MywgNDE0ODMsIDAsIDQxMjUwLCAxMjg5MDQsIDQyMTc5LCAxMjgzNzUsIDU5MzEsIDExNzQ0LCAxMTIxNSwgCisgICAgNzQ0NDYsIDQxMjUyLCA2NjY4MiwgMCwgMTE5NjM3LCA0MTI0OSwgMTM2NiwgNjQ2MzUsIDY1MDQ3LCAxMjQ2NiwgOTgzNDU4LCAKKyAgICAxMjA4MTMsIDQzOTcsIDEyODAzNywgMTI4MzM2LCA0MTI5NiwgOTU0NSwgNDEyOTEsIDEyMDg5MywgMCwgNDE0ODUsIDM1MTEsIAorICAgIDQxMjgyLCA1OTIzLCAxMDQwMCwgMCwgMTIwNDkzLCA3NjAsIDAsIDEyMDg4LCA1Nzg2LCA2ODI1MiwgNDIyNTYsIDExOTg2OSwgCisgICAgNjcxNDUsIDQxNywgNDE0NzQsIDExOTU2MiwgNDE1NjUsIDc0OTY1LCA1OTM0LCA3NDU3MiwgNjY1ODMsIDc0OTA0LCAKKyAgICA2NDg3NywgMjI4NCwgNjQ0ODEsIDc4NjE0LCA2NjAxMywgNDE5NTYsIDQzNDU1LCA2NzI0MCwgMTk0NjU2LCAwLCAwLCAKKyAgICA0MjI3MywgNTgxOSwgMCwgMTI4MDU2LCAwLCAxMTkxMjksIDk4MzEwMCwgNjU5MTAsIDEyNzc0NywgMTAyNDYsIDEyMDgxNiwgCisgICAgNjU3ODUsIDEyMzcsIDEwMjc0LCA0NTUyLCAxMTk1NzYsIDEyODI4NywgMCwgMTM3NSwgNjY3MDUsIDQzNTczLCA2NTI2MCwgCisgICAgMzMyOSwgMCwgNDI4MTEsIDEwMzEyLCA2OTg0NSwgMTIwNzk0LCA3ODQwLCAwLCA0MzYzMCwgMTAyNTIsIDExOTI0MiwgCisgICAgMTI4MTA0LCA0MzE4NSwgMCwgNDM5NiwgMTk1MDUxLCAxMTk4ODAsIDEwNzY5LCA5Njc2LCAxMTkwNDEsIDAsIDk3NTMsIAorICAgIDkyNzYyLCA4OTQ0LCA5ODMxNjQsIDAsIDEwNDczLCA5ODM4MjMsIDEyMDQ3MiwgNjA3MiwgNDMwMjUsIDEwMjk5LCAKKyAgICAxMjg0MzYsIDY4ODQ1LCAxMjA2MDgsIDY2MzI2LCA2NzQxMiwgOTI5NTIsIDAsIDQzODExLCA5MzMwLCAxMjA1OTYsIDcyMjIsIAorICAgIDEwMjgzLCAxMDMxNSwgMTAzNzksIDQ5OTYsIDEyNzkwMiwgMTMyODEsIDY2NTE3LCA3ODY1LCAxMDA4NywgNzgzNDMsIAorICAgIDc0OTM4LCA0MzMyNCwgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCA2NDgwNiwgNDMxODAsIDc0OTY3LCA3NDE0LCA3NzkyOSwgCisgICAgNDM5ODIsIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDQzNDA1LCAxNjAyLCAwLCA5ODM3MzEsIDg1MiwgMCwgMTIxNjAsIAorICAgIDgzNDkxLCAxMDIxMiwgNjU0MzUsIDEyOTA5MiwgMTIwNzEsIDk2MDksIDEyMTU2LCA5MTc5ODMsIDkxNzk4NCwgNDM1ODYsIAorICAgIDExMDM1LCAxMDQxMSwgOTE3OTg4LCAxMDI1NSwgNjcxMCwgMTAyNzksIDQxOTQsIDEwMzc1LCA0Mzg1MywgMTI4NTk5LCAKKyAgICA0MzE1LCAxMjY0NCwgODM0OTAsIDc3OTM3LCA0MzYzOSwgNDMzNDMsIDY3NDA4LCAxMjg5NDUsIDExNTAxLCA0MTE3NywgCisgICAgMTIxMTgwLCAxMjg4NjYsIDQzNDMxLCAxMjcwOTcsIDkyNDEzLCA4NzE1LCAwLCA0MTE3OSwgOTgzMzU4LCA0MzMxMywgCisgICAgMTIwMjMwLCA0MTE3NiwgMTI4NzgwLCA5OTQsIDk4MzA0NSwgODQ1MiwgNzc5NzMsIDczOTY2LCA2Njg5MCwgNzA4MTIsIAorICAgIDU5MjEsIDAsIDI1OTcsIDkyNDIzLCA1OTIyLCAxMTg5MDMsIDY2ODczLCA0MTg2LCA5MjUzMSwgMTE5OTY3LCAxMjcxMDUsIAorICAgIDY3MTgsIDEyNzAyOSwgNDQwNiwgNzQ2MDEsIDg0ODAsIDkxOTIsIDk3NDcsIDEyMTA0MCwgNDQxMywgOTIxOTYsIDQyMjY4LCAKKyAgICAzMTk4LCA1OTI0LCA1OTIwLCA5MjQ2OSwgNjkyMSwgNzgwODEsIDc0MDA3LCA0Mjg2OSwgODQxOCwgMTE2ODEsIDQzMTY5LCAKKyAgICAxMDE3NiwgMCwgNzQyLCA3NDg4MSwgMjg5MywgMTA3NzIsIDY1Mjc2LCA1OTM3LCAxOTE0LCAyNTUzLCAxMTY4MiwgNjc1NiwgCisgICAgMTI1MTA0LCAxMjExMjYsIDgzNjMsIDAsIDI5OTMsIDc3NzIsIDM5MTYsIDQzMDEsIDEyMDQ5NCwgMTE0MSwgNDI0MDcsIAorICAgIDc0MTcsIDcxOCwgNzU3MiwgOTczLCAxMTk1OTksIDEyMDcxOCwgMzIzNSwgMjQxNSwgNDMxNjQsIDAsIDgwMTgsIDQyMzMzLCAKKyAgICA3NDc1NiwgMTA2NzUsIDY5MzcsIDQyNDg2LCA0MzM4MSwgNjUzOTAsIDEwMDY3LCAxMjA4NDksIDEyMDIsIDAsIDk4MzkxMCwgCisgICAgNjU4NjMsIDAsIDY4NDg0LCA5NDAxMywgNzgxODIsIDY0NTQyLCAzMjYwLCA3MzgyOSwgNjUzODgsIDk5NDUsIDg0MTksIAorICAgIDc4MDQyLCA2NzM4LCAwLCA0MzY4MSwgNjk3MjgsIDIwNTksIDkyNDIyLCAwLCA1NTIzNywgMTQzMSwgMTE5MTk0LCA2NjU2NSwgCisgICAgMTA4MjEsIDAsIDEyODA0LCAxMjgwNzYsIDgyMjksIDEyMzUsIDMzMDcsIDExNDcyLCA3ODA4OSwgNzgxODQsIDQ1NDQsIAorICAgIDcxMjI4LCA5MTc5ODIsIDEyOTE4OCwgMTc0MCwgNzgwOTcsIDg3NTgsIDk4NSwgMTI4NzIsIDY0NTExLCA3ODA5NCwgCisgICAgMTIwNjgsIDc4MTAyLCA3MTIyNiwgMTAxNDEsIDc0OTIyLCA2Mzc2MSwgODc4NSwgNDQ3NiwgNjUwNzEsIDYzNzYzLCAKKyAgICAxMjY1NSwgODkwNywgOTE0NywgNzgxMDYsIDc4MTAzLCA3ODEwNCwgMTIwODk4LCAxMTk1NzIsIDEwNjY1LCA2NDYxNiwgCisgICAgNDE1NzIsIDEyNzk3OSwgMTI3MTYwLCA5ODM1NTQsIDQxNTczLCA4MzE2MCwgMzkzMSwgMTIwMjk1LCA3NDE0MywgODMxNTYsIAorICAgIDgzMTU3LCA4MzE1OCwgNzg0NjAsIDExOTgyLCAwLCA4MzA2NywgMTI4MzgxLCA5MjcxMiwgNjQ0ODQsIDExOTI2NiwgCisgICAgNDExNjcsIDAsIDQxNzM1LCA5NDAxOSwgNzE3LCAxMDc1NCwgODMxNjgsIDgzMTY5LCA3MjQxMywgODMxNjMsIDYzNzY3LCAKKyAgICA4MzE2NSwgMTc4MCwgNjkzNiwgMCwgODMxNjEsIDgxOSwgMTA2MTEsIDk2OTQsIDEyNjk3OCwgNzE0NzQsIDAsIDEyNzg3MSwgCisgICAgMTI5MDY5LCA4MzQzLCA4MzQyLCA4MzQ1LCA4MzQ0LCA2NTc4LCA3MDA5LCA3NTIzLCA2OTIyLCA4MzQ4LCA4MzQ3LCA3NTI1LCAKKyAgICAzMzQ2LCA4MzM5LCAxMjgxNjUsIDEyODIwOCwgNTc1LCAyNjgsIDc4MTExLCA4NTYzLCA1NzU0LCAxMjAzNDMsIDQxNTQxLCAKKyAgICA2NTU2NSwgODMzNiwgNTkzNiwgNzI5MCwgNzgxMTcsIDgzMzcsIDgzNDEsIDMwOCwgMTEzODgsIDc1MjIsIDgzMTUxLCAKKyAgICA3ODEyMywgNjU0NjYsIDExMDkwLCA2OTUzLCAwLCA4MzM3NSwgNzQ5NzMsIDc4MTMyLCA1OTI2LCA2ODI1MCwgNzgxMzAsIAorICAgIDc4MTI2LCA3ODEyNywgNzgxMjQsIDc4MTI1LCA5MDM4LCA3ODg3LCA0MzQ1NiwgNzgzMCwgMTE2NTEsIDEzMDkzLCA2NDAwMiwgCisgICAgOTgzNTU5LCA2NTc0MiwgMTI4NzQsIDExOTU5NywgMTE1OTAsIDAsIDc0MDQ4LCA2NzM3OSwgODU5NSwgOTgzNSwgOTE3OTQ3LCAKKyAgICA0MzcwMywgMTMwOTcsIDAsIDY0NjQzLCAxMzI4MywgMTI2OTcsIDc0OTc1LCAxMjM4MSwgMzQ4OCwgNTkzMywgMTAwMzMsIAorICAgIDcxMTAxLCA2NjI0MSwgNjU1NzAsIDExOTE1NCwgMTIyOTcsIDcxMjEyLCAxOTU1LCAxMjc5NzAsIDUzNDksIDQyNTM4LCAwLCAKKyAgICAxMjQ5MzIsIDc0MTEsIDk0NjIsIDEyODE1MCwgMCwgMTI4NDY1LCA0MzkyMCwgNDI3MzYsIDEyMTAxNywgNTc1NiwgCisgICAgMTI4MzI0LCA3NjM4LCA0MTY0MiwgNDI3NjQsIDk4MzcxNywgNDMxMDksIDc2MzcsIDU3NTIsIDExMjEzLCA4MzQ4MSwgCisgICAgNzM4MzIsIDEyODgyNywgODM0ODYsIDEyODIzMSwgNzgzMzQsIDkxNzk1NywgNzYzNiwgNjUxNzEsIDkxMjQsIDk4MzIxMCwgCisgICAgNzg4OTIsIDEyMDc5OCwgMjkxLCAwLCA5ODMyMjEsIDIwMjcsIDY2MjMwLCAxMDA4MCwgNzgxMzYsIDEwNDAzLCA3MDg2OSwgCisgICAgNDY0MCwgNjQ3MTMsIDEwMjI0LCAxMjA0MjksIDExMTgzLCAxMjA0MzEsIDEyMDQzMCwgMCwgMTI4MzUxLCAxMjc0ODksIAorICAgIDEyNzEzOCwgMCwgOTI0OTksIDAsIDExOTA5NCwgNzQyMTMsIDc4MjQsIDAsIDE5NDY0OCwgNDEyNzQsIDU3NzgsIDYzMDIsIAorICAgIDEyMTQzMiwgMCwgMTI2ODAsIDExOTEzMCwgMTQxNywgNjcyNDIsIDkzMDQxLCA5NDUyLCAxMjgxNTMsIDc0MzkzLCAxMTU1MiwgCisgICAgMCwgMTI3ODU1LCAxMjgyMTcsIDY1MzkxLCAxMjg2MTQsIDEwMTcyLCA2NTQ1MywgNjM3ODksIDQxMjY0LCA3ODY1OCwgCisgICAgNjQyNiwgNDY0MSwgOTE3OSwgNjQ4MTksIDU1Mjc4LCA0MTI1NSwgNDIwMzYsIDQxNDY5LCA0MTI2OSwgMTIwNDEyLCAKKyAgICA0MTI2NywgNDY0NiwgNjc3NTksIDg2NSwgNDIwMzQsIDc4Mjc0LCA3ODI3MywgNDY0NSwgNDIwMzMsIDc4MjcwLCAxMjc5ODIsIAorICAgIDk4MzE3MiwgNDM5NDgsIDE5NTEwMCwgNjg4NDAsIDc4Njc0LCAxNjU5LCA5MTksIDQyNzg0LCAxNjcxLCAxMjc4OTIsIAorICAgIDYwNjksIDkyMTksIDEyODU1OCwgMTY2MSwgMTMxMjAsIDYzNzg0LCA2OTgxOSwgMTAxNDAsIDk3MTMsIDExOTE0MywgMCwgCisgICAgNzE0NjIsIDk0MDUwLCAyMzA2LCAxMDQ4NSwgMTE4OTQzLCA2MDY4LCAxMDYxMiwgMTk1MDk5LCAxMTk1NjcsIDY3NzA1LCAKKyAgICA5MjU2MSwgNDE0NjIsIDEyMDQ3MCwgMTk1MDc5LCA1NDIyLCAxMjgyMzQsIDk4MzYyOSwgMTI4NjExLCA4MzQ3NCwgMTAyMjksIAorICAgIDEwNjM1LCA4MjYsIDgzNDc1LCAxOTUwODIsIDEyNzAwMywgMTk1MDg0LCA3MTQ1NSwgNjQ4MywgOTIyMTEsIDE4MDgsIAorICAgIDc4NDgsIDExMzc4OCwgODEwMCwgNzgyMjcsIDcxMTk4LCA3ODY3MCwgMTMzMDEsIDc4NjY3LCA5NjY3LCA3ODY2NSwgCisgICAgNjc3MDQsIDk4MzkyMSwgMTEwMDMsIDk5MDQsIDgzNDEwLCA5ODM5MTksIDEyMDY5MCwgOTE0NCwgMTA5MjEsIDkyOTkyLCAKKyAgICA3ODY4MCwgOTg0MCwgNjUxMzEsIDc4Njc4LCA3MTA5MiwgMTAzMTMsIDgzNDA4LCA4MzUwMCwgNjQzMjAsIDEwMjY1LCAKKyAgICA2NzI1MiwgMTA5NjIsIDY2OTA0LCA0MzAwOCwgODk0NSwgNzg2ODMsIDEyMDk5NSwgNDEsIDE5NTA3MiwgMTc5MiwgCisgICAgMTIwNTE1LCAxOTUwNzMsIDg2NTUsIDY4MjU0LCA5MjU0NCwgNzc5NTEsIDEyMDY2LCA2NzI1OCwgMzg1LCA0MTUyLCAyNTg1LCAKKyAgICAxMjc4MDQsIDExOTA2OCwgMzEyNiwgOTE3ODUyLCA3Mzk4MywgMTA5NTcsIDEyNzAzNywgMTExNjAsIDExOTExNiwgCisgICAgMTI3ODczLCAxMzE1NywgMCwgMTI4MDI0LCAzNTcwLCAxMjkxODcsIDc0NDMsIDExODgwNCwgNDQwMDYsIDY5OTcsIDY4MDA0LCAKKyAgICAxMjY2MzEsIDc4NzksIDg3MzksIDExMDc1LCA5MTc5NzEsIDY1MjE2LCA3MDE5NiwgNjk3OTUsIDI1OTMsIDg0NjMsIDc4MTAsIAorICAgIDEyODU0MywgNzgzOSwgOTI2MTIsIDc4ODA2LCA3NTA2NCwgOTY5MSwgNDQxMSwgNzg4MDIsIDEyMTIxOSwgMTIwODU0LCAKKyAgICA0MzQ0MiwgNjk4NTEsIDY1MjU0LCAxMDA2NiwgOTgzODg5LCA3MjQxOSwgMCwgMCwgMTMwNjEsIDgwMTYsIDc4Njg3LCAKKyAgICAxOTkzMiwgNjQ4MzEsIDAsIDExMzY4NCwgMTIzOTAsIDExOTE3MSwgMTYzNCwgNjgxMTUsIDY1MDcwLCAxMTA1NiwgCisgICAgOTgzNTc0LCAxMTk5MjUsIDk4MzA5OSwgNDExNjUsIDExMzI4LCAxMjQ1MCwgOTgzODExLCA0MTE2NiwgMCwgMTI0NTYsIAorICAgIDExOTkxNCwgMTcxLCA1OTQxLCAxMjQ1MiwgMTk0NzA5LCAxMjQ1OCwgMTI1MzEsIDc4Nzc5LCA0MzAxMywgNjM4MDAsIAorICAgIDc0MTYyLCAxMTkzMjAsIDEyMDQ4MywgOTk2OSwgMTIwNzY3LCAxMjQ1NCwgNjM4MDYsIDQyMTMyLCAxMjA2MywgNzg0MjUsIAorICAgIDc4NDI0LCAzMjMwLCA2ODc3MywgOTgzNDk3LCA3NTAyNSwgNTIwOSwgMjk3LCA1ODEwLCA4NTIyLCA4NDE1LCAxMTk5MzcsIAorICAgIDc4NDI5LCA3ODQyOCwgNzA3NywgMjQ5NywgMTI4NjUxLCA5NjAsIDc0MTU2LCA2OTgxLCA5MjM3NCwgMTI5MzgsIDQyOTIsIAorICAgIDc4ODkzLCA3NDgxNSwgMTA1MTIsIDAsIDc0ODE0LCA3ODg3NSwgMTI3NTA1LCA3ODg3NiwgMjUwMywgNzM3NzgsIDE3NjIsIAorICAgIDY5Nzk0LCAyNDk1LCA3NDkxMSwgNTg0NCwgNjgwMzEsIDExODgzOCwgMTI3OTQ3LCAxMjY1NCwgNDY2MywgMTg5OSwgCisgICAgNzg4NzcsIDI1MDcsIDY0MTIxLCA4NzI2LCA2NTU5NCwgOTI5NzIsIDAsIDExOTAwMCwgODg5MiwgNzg4NzIsIDkyMzM5LCAKKyAgICA3MTIzMiwgOTgzMDczLCA1NzgyLCA0MjAsIDEyNzM0OCwgOTE3ODcxLCA0Mzc5NiwgMTA3OTcsIDYzNzk0LCAwLCAxMjg1MzMsIAorICAgIDY0ODE0LCA2Mzc5NiwgNDM4NjEsIDAsIDY2NTgxLCAxMTkyMDQsIDQxNjA4LCAxMjg0NzksIDEyMTE0NCwgNjM3OTIsIAorICAgIDQ2NTksIDEyMDc4OCwgNzc5NzEsIDQzNjc2LCA3NDk0NCwgNjk2NzMsIDEyMTAyOSwgMTExMjksIDkyOTI5LCAzMjksIAorICAgIDc3OTY4LCA5MjcwNywgODM0OTYsIDczOTksIDAsIDQxMTg4LCAxMzI0NCwgNjc2OTIsIDQyMTY3LCA3NDM1LCA3ODE5MywgCisgICAgNTM4MCwgMTE5MDg2LCA2OTIyNSwgMTE1NSwgMTEzNjUsIDQzMTI2LCA3Nzk3MiwgMCwgNjU2ODQsIDAsIDU2MDEsIDY1MTkyLCAKKyAgICA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDY5Njc2LCAxMTcyLCA2OTc5OSwgNjc4NiwgNDM2MDEsIDEyMDQ3NiwgNzQxMjYsIAorICAgIDU2MDMsIDAsIDQ0NzMsIDEyMTA4NSwgNzI0MjYsIDEyNDk0NywgNjUzNDcsIDY1MzQ2LCA2NTM0NSwgMTI4NTQ4LCAKKyAgICAxMTkyMTMsIDUzNDcsIDY5ODAyLCA5MTc5NzMsIDczODY4LCA3MDg1MiwgMTA1ODgsIDAsIDAsIDYzNzU1LCAxMjgyNzEsIAorICAgIDUzNDMsIDc4NDIyLCAxMjA2NjEsIDQ1NTUsIDUzNDEsIDgzNDU5LCA3MDA3MSwgNzQ5MTYsIDUzNTEsIDc4Njc1LCA0MzEwNCwgCisgICAgNjUyNDQsIDEyMTM2NSwgNjQ1NDEsIDQyNTE5LCA2ODEzNCwgMTI4OTE2LCAxMjY5ODYsIDc0NzY1LCAxMjg5NzksIAorICAgIDEyNzUxMCwgNjYzOCwgMCwgNjUxMTMsIDI3MSwgNzQxODAsIDY1MzcwLCA4ODM1LCA2NTM2OCwgMTI2NTMsIDY1MzY2LCAKKyAgICA0MjE3MiwgNDEwODYsIDY1MzYzLCA2NTM2MiwgNjUzNjEsIDExOTEyLCA0MzQxMCwgMTEzMjMsIDY1MzU3LCAxMTgwMCwgCisgICAgNjUzNTUsIDUzNDUsIDExMTAzLCA2NTM1MiwgNjUzNTEsIDc2MSwgNjUzNDksIDE5OTU5LCA2OTcxOCwgNjM4NTYsIAorICAgIDEyNjYzNSwgMjQyMywgNzQ1MTgsIDY0NjQ3LCA3Nzk1OSwgMTE5NTcsIDQ2OTksIDEyNjU3MywgMTI4NjcwLCA5ODM3ODcsIAorICAgIDAsIDY0NjA1LCAwLCA2ODA3NCwgOTgzOTc3LCA0OTE2LCAxMjg1NjgsIDM4MCwgMTA5NTgsIDY2NTYzLCA3Nzk1NSwgCisgICAgNjk3NzMsIDk3NzMsIDEzMTY3LCAxMjkxOCwgNDEwOTYsIDczOTgwLCA2OTI0NSwgNzgyNTQsIDgzNDUwLCAxMDY4NCwgMCwgCisgICAgMTI1MDYzLCA5MjkwNiwgNzk0NiwgMTI1NDEsIDgxODIsIDY3NTg2LCA2OTc4MCwgMCwgMTI4MjA3LCAwLCA5ODM2NTQsIAorICAgIDkwMDUsIDEyMjUsIDY2MzAsIDAsIDAsIDExODg1NCwgNjgwMTEsIDg4NDcsIDkyMzcxLCA2NTg3NiwgNTUzNSwgODMyOSwgCisgICAgNzQ1OTAsIDEyNTAzNiwgOTI2MDksIDAsIDY2ODc0LCAzMTI3LCAyNTk1LCA2NTcxMywgNDIwMTMsIDEyMTIxMSwgNTYwNywgCisgICAgNDEwODksIDEyODYyNiwgMCwgNzAyOTIsIDI2NjUsIDExMzA0LCA0Mzc1MSwgNzQyMDAsIDQ5NzAsIDg3NjQsIDEyMDQ1OSwgCisgICAgODkzNCwgOTI3MjYsIDQxNTY2LCA0NDkyLCA2NzI3MSwgNjUwMTEsIDQxMDkwLCAwLCA4MzQxNywgMTE4OCwgNzI1NCwgCisgICAgMTEwMCwgMCwgNjcyNzAsIDQxMDgxLCAyOTEyLCAxMTc0OSwgNjcyODIsIDY3MjgxLCA2NzI4MCwgMzU3MiwgMTAwMjMsIAorICAgIDQ5NTksIDEzMDc5LCAwLCA2NzI3NSwgOTcyOSwgMTI1MTEwLCAxMjEwNDIsIDY3Mjc4LCA0MzM2MSwgMTI3MzU1LCA2NzI3NiwgCisgICAgMTE4MDMsIDc5OTYsIDk5MDcsIDQxNDUwLCAxMzMwNCwgODMzOTIsIDgzMzY5LCA0MTQ1MSwgODMzNzAsIDExMDk1LCA4MjczLCAKKyAgICA3NDMyMiwgMzQ1MSwgNzAyOTEsIDk3MiwgNDE0NTMsIDY4MTY0LCAxMTkzMjcsIDczODgzLCA2ODAyMiwgNzM5NDUsIAorICAgIDgzMzYzLCAyMjg4LCAxOTk1NSwgOTUzOCwgODMzNjYsIDY5ODA3LCAwLCAxMjkwOTUsIDAsIDgzMzgxLCAxMTM5NiwgCisgICAgODMzODUsIDExMDE5LCAwLCAxMjg0MTYsIDEyMTIwNSwgNjgwMjAsIDQxMDc4LCA3MTM2NSwgMjYxLCA1OTI3LCA3NzkxLCAKKyAgICAxMjg2ODEsIDczNjIsIDAsIDEwNjk2LCA3MDEyNCwgNjA3MywgOTgzOCwgMTE4OTIwLCAwLCA2MDc1LCA5Mzk5NSwgMjgyLCAKKyAgICAxMTkxNzgsIDY0MzcsIDY4ODMwLCAxMjE0NTksIDk4MDEsIDY2Mzk5LCA3NDE3NywgMCwgOTE3OTU5LCAzNDc0LCA2NzI4NywgCisgICAgMCwgNjcyODYsIDYwODEsIDgzNDY5LCA3ODg3NCwgNjcyODksIDY3MjgzLCA4MzQ3MSwgNzAwMDIsIDQyOTMwLCAwLCAKKyAgICA5MzAxMywgODc1MSwgMTE0OTksIDY3Mjk3LCA3ODE2LCAxMjYzNiwgNDY2NSwgMTI2MjgsIDQ2NzAsIDY3Mjk4LCAxMjAyNzIsIAorICAgIDY4MDE3LCA5NjQyLCAxMDkxMiwgOTU4LCA2NzI5MywgMTEzODcsIDY3MjkxLCA0NjY2LCA3MDc5MiwgNDkxNSwgNjc3MTUsIAorICAgIDQ2NjksIDAsIDY4MDk5LCAxMzI4NywgNDY2NCwgMTA4MzYsIDEyMDU1MCwgNzUwNTMsIDY5Nzc1LCAwLCA0MzU5NSwgNzQ1MCwgCisgICAgMCwgOTE3ODc1LCA4NjY0LCA5Njk3LCAzNjA2LCA4MzQ0NiwgOTgzOTc4LCA5MTc4NzQsIDY0ODE1LCAxMDYzLCAxMjAyNTAsIAorICAgIDY3MzEyLCA5NzcyLCA3MjU1LCA4ODg2LCAxMzg5LCAxMjc5MzIsIDEyMDI1NywgMTIwMjU4LCAxMjAyNTksIDEyOTQxLCAKKyAgICA0MjY2MSwgODM0MzgsIDEyMDI1NSwgMTIwMjU2LCAxMjMwMSwgNjc4MzYsIDY5ODIwLCA0MTEwMiwgNjQ0MjgsIDEyMDI2MiwgCisgICAgNjY2MDIsIDEyMDI2NCwgMTAxNywgNjY2MDAsIDUyMywgNTA1LCAxNDQ3LCA3NDQzNiwgMCwgNzAzNDAsIDgzNDM3LCA4NjA4LCAKKyAgICA0Mjc4OSwgMTIwNjEzLCA4MzQzNiwgMCwgNzE5MDYsIDExMzA3LCA2NjcwNywgNjczMDEsIDY3MzAwLCAxMTc0NSwgNzkxOSwgCisgICAgNjczMDQsIDE2NDEsIDAsIDAsIDg5NjYsIDEyODkwMCwgNzQ5MTksIDU5MDgsIDcxODcwLCA2Nzg1MywgNjc0NCwgNjczMTAsIAorICAgIDE2OTksIDY3MzA4LCA2NzMwNywgNjczMTQsIDY3MzEzLCA2MzA2LCAxMDE2OSwgNzEzMjQsIDExOTI1MSwgMTAwNjgsIAorICAgIDM3NjYsIDIzODksIDY3MzA1LCAxMjA0NTUsIDY2MTEsIDI1NywgNDMxNzAsIDEzMTUzLCAwLCA0MjM4NiwgOTgzODE1LCAKKyAgICA5NDM2LCAyNTk5LCAwLCA2NDk2LCA5NDQ5LCA1OTMwLCAxMTQ3NiwgMTEwMzMsIDExNDQ3LCAxMDU0MSwgNTYyMiwgCisgICAgMTIwNDM2LCA4NDc3LCAzNzYwLCAxNzE4LCA5NDQyLCA2NjQzMywgMzc3NiwgOTE3ODM3LCA0MTQzNSwgNDM1MiwgNjczMjQsIAorICAgIDI0MzUsIDcxMjExLCA1NjIxLCAxMjAzODUsIDQyMDEsIDM3NzgsIDQyMDMsIDQyMDIsIDQyMDUsIDQyMDQsIDEyMDQ0NywgCisgICAgMzc2OCwgNDE3NzQsIDc2NSwgNDE0NDAsIDM3NjQsIDg0NzMsIDYzNzMsIDg0NjksIDEyMDQzOCwgMTI5NDcsIDQ1NjQsIAorICAgIDExOTA0OSwgNzQ2MjMsIDc0MjcxLCA3Mzc1MywgODM3NCwgMTI3MjAxLCAwLCA2ODI5LCA1MjI1LCA2NjkwMSwgMTI3Mzg1LCAKKyAgICAwLCAwLCAxMTk2MTUsIDY3MzE5LCA2NzMxOCwgMzE2MiwgNDM1MDcsIDExNzcxLCA2NzMyMiwgNjczMjEsIDY3MzIwLCAKKyAgICA0MjYxNCwgNTM1MywgNTYyNSwgNzQxNzksIDY3MzE1LCAwLCAxMDEwLCA2NDU3MiwgNDE3ODAsIDQyNjIzLCA2NDI3NywgCisgICAgNjk5NDIsIDY5NTIsIDY3MzI5LCA2NzMyOCwgNjczMjcsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgCisgICAgMTA0NzEsIDEyMDAzOCwgMTIwMDI3LCAxMjAwMjgsIDEyMDAyNSwgNTYyOCwgMTIwMDMxLCA5NzAsIDEyMDAyOSwgNDc3MiwgCisgICAgMjQwMCwgNTYyNywgMTIwMDE3LCA2NzMzMCwgMTIwMDIzLCA2NDI3NSwgMTIwMDIxLCA4Nzg2LCAxMTM2OTMsIDIwMywgCisgICAgNzQzNjUsIDAsIDAsIDY5OTg1LCA3ODM1MCwgMTEzNzAzLCA2NDM3OCwgNDIwNTQsIDEyODU3NSwgMCwgNTU0LCAxMTk2NDksIAorICAgIDExMzU4LCA3MTE3MiwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgMTI1MTE0LCA3Mzg5MSwgODM0MjMsIDgzMDE5LCA1Njk0LCAKKyAgICA3Njg5LCA2OTc5OCwgOTMyMywgNDMyNSwgMzA0NywgMTAzMTcsIDE3NSwgMTIwOTYyLCA5MzAyOSwgNjk3NjQsIDAsIDAsIAorICAgIDEyNDMsIDQyMTU0LCA1NDMxLCA2NjUyLCA5MTc1NjEsIDY3NzUzLCA0MzY1MSwgMTI5MTI5LCA2ODExOCwgNjgwOTMsIAorICAgIDExMjksIDEyNjU3NCwgMCwgNjU5MDAsIDE5ODYsIDc4NDYsIDc4ODA0LCA4NjYxLCA3NTA1OCwgNjUyNTUsIDkzOTkyLCAKKyAgICAzODQ1LCA0NDkwLCAxMTg5NjksIDY2NDksIDc0MTM2LCAxNDU2LCA3NTMwLCAxMTk3NywgNzI0OSwgODM2NiwgMCwgNzc1NiwgCisgICAgMTIzNDIsIDEyMDY5NywgNTEsIDQxNTE2LCAwLCA4NTcwLCA5NTY4LCA3MTMxOCwgNDU2LCA3MDI2LCA4MTQ1LCAxMTY4LCAKKyAgICA5MjUxLCA5MDgyLCAxMTk5NjQsIDY0MDU1LCA0Mjc4MSwgMzg2NiwgMTIzMjMsIDQxNTEyLCA3MzgwNSwgNjgxMjEsIAorICAgIDkxNzg1MCwgNDE0OTQsIDkyMzE2LCA0NjYwLCA2NzExNCwgMTA0MDUsIDEyNzE5NSwgNzg4MDMsIDAsIDEyOTE3NiwgCisgICAgNDIwNDAsIDczOTE4LCAxMTk2MjcsIDc5NDQsIDQxNDU0LCAxMjYwNSwgMCwgNDIyMDUsIDQxNDU1LCAyMzYsIDY0MDUxLCAKKyAgICA3ODg2NywgODIxNCwgODM0MjEsIDExMzc4NCwgMTIwMDM3LCA0MTQ1NywgOTgzOTcwLCAxMTk1ODksIDE5NjksIDIzODQsIAorICAgIDgwOTcsIDEyODAxOSwgNzQxMywgNjgwMTIsIDc4MDI5LCA4NzY2LCA0Mzg2NCwgNzgwNzksIDU4NTQsIDEyNTAwMCwgCisgICAgMTA1ODMsIDAsIDExOTk4OSwgMTI3NTU2LCAxMDQxNiwgNjgwNzAsIDM4NzIsIDgzNDI0LCA5ODM4MzksIDg0MjksIAorICAgIDEyMTIzMCwgMTE4ODA2LCAyODM4LCA2NDI5LCAwLCA4MzQyNiwgMCwgMTI4NDc4LCAwLCAxOTQ2MjAsIDk0MDA1LCAxMTA5NiwgCisgICAgODM0MjIsIDEwNTUzLCAxNjYyLCA4NDgzLCAxMjAzOTYsIDQzNjA1LCA1ODkyLCA0MzQxOCwgNjc4MTksIDczNzQyLCA2NiwgCisgICAgNjUsIDY4LCA2NywgNzAsIDY5LCA3MiwgNzEsIDc0LCA3MywgNzYsIDc1LCA3OCwgNzcsIDgwLCA3OSwgODIsIDgxLCA4NCwgCisgICAgODMsIDg2LCA4NSwgODgsIDg3LCA5MCwgODksIDExOTg2MiwgMTAzNTcsIDczODUsIDgxNzAsIDE3MDQsIDg1NTYsIAorICAgIDkxNzk3NSwgOTY1OSwgMCwgMCwgMCwgOTU1NiwgMCwgNDUwMywgMTEzNTMsIDk2NDcsIDEyNTAxNSwgNzgxODUsIDEyODk1OSwgCisgICAgMCwgNzE0MzcsIDc4ODg2LCAwLCAwLCA3NDIyOSwgNjY1OTMsIDY0MzgsIDgzMzY0LCA5MTA5LCA3ODg4MiwgMTI4OSwgCisgICAgNjQ1OTksIDExODkxNSwgNjgwMDksIDEyODMwMiwgNjU1MDcsIDI0NDcsIDExOTkxMSwgMTI4Njk0LCAxMjgwNDIsIAorICAgIDEyNjU0NSwgNjY1ODksIDAsIDYzMzQsIDEyODM2OSwgMCwgMTk5MzcsIDkxNzc5MywgMTMyMiwgOTIzNTksIDU2NzUsIDI1NCwgCisgICAgMCwgMCwgNjk2ODYsIDQyNDI1LCA4OTE4LCA2NDAwMywgNTcxNiwgNDIzMTIsIDAsIDE5NDY5MiwgNjk3MiwgNDI4MjYsIAorICAgIDc0NDA5LCA0MjQ2NCwgMTIwNTY3LCA2Njg5OSwgNjcxNTUsIDc0Nzk2LCA2NDQwMCwgNjQ2OTMsIDEyODgwNSwgNjc2ODcsIAorICAgIDY1NDI5LCA5NTE1LCA0NDM1LCAwLCA0MjUyMiwgMCwgNjgwMDgsIDExNzg1LCA3NDEyLCA0Mzg2NywgNDE5NzgsIDE0MTIsIAorICAgIDQ1OTQsIDEzOTEsIDEwNTM2LCA4MDY3LCA5OTAxLCA3MTAzLCAxMjgyOTMsIDcxMDIsIDcxNDI4LCAxMjA3NDgsIDMxNDAsIAorICAgIDEyNzI3NiwgNzk2MCwgNDMyNzEsIDEyMTA5OSwgMTI1MTgsIDEwOTA5LCAxMjc1MDgsIDE0MjgsIDEyNDcyLCA2NzI1NCwgCisgICAgNjcyNTMsIDc2OTksIDEyMzkzLCA2NzI1NywgMCwgNjcyNTYsIDY3MjU1LCA4MjIzLCAwLCA0MjYxLCAxMjE0NjAsIAorICAgIDEyMDkxMCwgNzQzMDgsIDk4MzgyNywgMTEzNzEyLCA2NzE1MywgOTgzNTcxLCAxMjgwNDYsIDQzNDE5LCA5ODM0NzEsIAorICAgIDY0NTU0LCAxMDU3NCwgMzg3OCwgNjc2OTEsIDQyMzUyLCAxNzUyLCA3Mzc4NSwgMTI4MTcxLCA0MjUwNiwgMTI4NTQxLCAKKyAgICAxMDE5OSwgOTE3ODY1LCAxMjUxNDIsIDY4MDIxLCA2NTkxOSwgMCwgNjY5NSwgNzIwLCAzMjQsIDAsIDEyOTAzNSwgNDM0MDYsIAorICAgIDk4MzczNiwgMTQ2NCwgNDA5ODUsIDAsIDc5NzQsIDAsIDQzNDc0LCA2ODA4MiwgNjQ0ODgsIDEyODk3NywgMTIwOTUxLCAKKyAgICA2NDA0MSwgNzQ3ODcsIDAsIDc4ODY1LCA5MjI1OCwgNjU1OTcsIDEyMTQxNiwgNzg4NjMsIDAsIDEzMDIsIDY2Mjg4LCAKKyAgICA3ODg2MSwgMTE5MTM0LCAwLCA2NzE1MiwgNTIwNCwgNzQ3NzQsIDQzNDA0LCAxMTgzNSwgMTIwOTIzLCAzOTk1LCA2ODM2MCwgCisgICAgNjU2MDgsIDM3MTQsIDkyMTkwLCAxMjAwMjYsIDY3MjYyLCAxMDk5OSwgMTE3NTAsIDY3MjU5LCA0MzI1MSwgNjcyNjQsIAorICAgIDQzMzAxLCAwLCAxMjA1NTcsIDgxMzAsIDg2NzIsIDEwODQ1LCAxMTk2NCwgMTIxMjY4LCAxMjgwMTQsIDkyMTczLCAwLCAKKyAgICA2ODQ1NSwgNDI4NjMsIDczODM5LCAxMjc1MjksIDAsIDY3NzAwLCA5MTc4MTIsIDExMzcwMSwgNDM2NDUsIDQ2OCwgNjEyLCAKKyAgICAwLCA2NDQwMSwgNjY0NDgsIDY4Mzc2LCAwLCAxNjc0LCAwLCA1ODIzLCAxMjg2MjUsIDEyMjgwLCA3MDM2NywgNTQwLCAKKyAgICA3NDU2NCwgMTE5MDE3LCA2NjQyMiwgODQzMiwgNzg4NzMsIDExMDczLCAwLCA2NDMxNiwgMCwgMTIxMDcwLCA4MjAsIAorICAgIDQxNzQxLCA5ODM0NzcsIDEyMDY2NywgMTI0OTgxLCA2NDY4NCwgMTI2OTkyLCAzMzU5LCA3ODAwLCA2OTkzNCwgNjUxNzcsIAorICAgIDYyMjYsIDM1MywgMTIzOTYsIDEyMTE3NiwgMTE5NjEyLCA2NDc0MiwgMTI4NjgyLCA3ODg3OSwgOTgzNDc4LCAxMjc5MzgsIAorICAgIDEyNDEyLCAxOTk0MSwgMCwgMTIwMjc3LCA3MDM1MiwgMTg4NCwgOTQ4MSwgNDI0MTgsIDcwMDU5LCA0MTE1NywgOTgzMTQyLCAKKyAgICAxMTk1LCA2NDg5OCwgNzkyNCwgMTE5ODcwLCA0MTE1MSwgMjAxMCwgNzE0MzAsIDQxMzI4LCA0MjM0NCwgMCwgMTI0MDksIDAsIAorICAgIDQzNjAsIDEyMTAyMywgOTczOSwgMTI4NTUwLCA2OTkzMywgNzM5MjEsIDkxNzYzMSwgNDI1MjEsIDg1MzksIDEyODYwNiwgMCwgCisgICAgMTE4OTg2LCAxMjcxNDgsIDQ3ODgsIDEyMTM0NSwgNjgwMjMsIDY1NzM0LCA5ODM0NTcsIDQzNzkwLCAxMjAyNzQsIDEzMDc1LCAKKyAgICA3NDQyOSwgOTQwNjMsIDY0NTY5LCA0MzUzMiwgMTA4MzcsIDI0OTIsIDEyNzE5NywgMTE4OTAxLCA2ODYzNywgNDExMzYsIAorICAgIDQzNzg1LCAxMTgxMywgOTY0OSwgNDExNTQsIDExMzczMSwgNTEyOCwgNDAzOCwgNDExNDMsIDY1NjA0LCA2NDg1OSwgCisgICAgNDE1OTIsIDY3NzEsIDE2NDgsIDU0MzUsIDY3Mjk1LCA2NzM0LCA0MTM0MywgMTE5ODQ4LCA2NTQzOSwgMTI3MDksIDY5ODYsIAorICAgIDkyMzY0LCA2ODAxNSwgMTIwNTMzLCA0MTM0OSwgNzAwMjEsIDEyNTgxLCAxMDM3NCwgNTE3NSwgMCwgNzM4MDYsIDEwMjU0LCAKKyAgICAxMTM2ODEsIDEwMjc4LCAxMDI2MiwgNjk4NTgsIDQxMzQ2LCAxMjA4NzAsIDYwNywgMCwgNjgxODIsIDEyODg0NiwgMTI5MjMsIAorICAgIDEwMzE0LCAxMDI4MiwgNjU0NzcsIDEwMzc4LCAxMjAyOTcsIDQwOTc2LCA4MjY1LCAxMjkxNDksIDc4NjM5LCA0MDk3NSwgCisgICAgNTg0MCwgNDI4MzgsIDc0OTg3LCA0MDk3OCwgMTIxMzg2LCA5Mjk0NSwgMTI4MDIwLCAxMTk4MDksIDAsIDY2NDQ0LCAKKyAgICAxMDUzOCwgMTIwODEwLCAyNTUwLCAxMTk4MzYsIDY3NzksIDEyOTEzMCwgMCwgMzUyNSwgNjgyNCwgMTE4ODg2LCA5ODM1ODIsIAorICAgIDAsIDU2MTksIDY1ODIyLCAxMTM3NTEsIDExMzczOCwgNzQ1NSwgNzE0MjQsIDU2MTYsIDExNDg2LCA5NjU2LCAwLCAwLCAKKyAgICAxMDcyNywgNTYxNSwgMTIwODczLCAxMjA1NTEsIDQyMzgwLCA2NDg5NSwgNDM2OTMsIDY2NDUxLCA4MDgsIDU0NTUsIAorICAgIDExMzQ3LCAwLCAxMDI2LCA1NjIwLCAxOTQ4ODcsIDAsIDExMzUwLCA1NjE3LCAwLCA5MjI1LCA2NDYzOSwgMTI3MDczLCAKKyAgICA5MTQ1LCAxMjgwNjAsIDEzMzgsIDEyMDU4MSwgOTgzMTU4LCAxMjczOSwgNDYwMywgMzA4NCwgNzA0MDgsIDkyNDg0LCAKKyAgICA5ODU4LCA2MDM3LCA5ODM0NjUsIDM5NzQsIDc4MjEzLCAxMDI5MCwgOTgzNzA0LCAzMDgzLCAxMDMyMiwgMTI5MDQ4LCAKKyAgICAxMjkwMzAsIDc1MDM4LCA0MTAzNiwgNjY4OTcsIDAsIDQzMzIxLCA2NTYwNiwgMTI3MDcxLCA0MTAzMiwgNDIzODgsIDAsIAorICAgIDY0NzAwLCAxMDAxMSwgMTQ0NSwgNDA5NjEsIDAsIDExOTEwNSwgMCwgNDA5NjAsIDE5NDkwNywgNjc3MjcsIDEyNTEwNiwgCisgICAgMjIyMywgNjQ5NTIsIDEwNDAyLCAxMjgzNTgsIDEyNTA0OSwgOTIzMDQsIDEwNjAzLCAwLCA5ODM0MDMsIDcxNDM4LCAwLCAKKyAgICA2NzE0LCAxMDA4MywgMTI3MDY5LCAxMjEwMTksIDc4MzY3LCA2OTk3NiwgMCwgNDM4NzIsIDkwNzMsIDQyNTg1LCA2NDMwMiwgCisgICAgMTA3MDQsIDY1MDMwLCA0Nzg3LCAxMjkwMzEsIDc0ODI5LCAwLCA2NTQyMywgMTIxMzA2LCAxMjgxMTgsIDk1NzAsIDU1MjYwLCAKKyAgICA5NTI1LCAyNjg5LCA5MTc2MjYsIDY1NDI2LCAxOTQ4NzIsIDkxNzYyNCwgNDM3NDAsIDEyMTE2MywgNDA5NjYsIDEyMDAwOSwgCisgICAgMTMyODYsIDM5OTgsIDQyNTk4LCA0MjU5NiwgNTAzLCA3MTQzMywgODczNSwgMjY5MCwgNjY0ODgsIDQyODM2LCAxMjcxNTAsIAorICAgIDQxOTU0LCA5MTc2MTUsIDE2NTIsIDc3MiwgNjY4OCwgODMxMCwgNjU0MjgsIDM0ODcsIDQzNDE2LCAzNTg1LCAxMDE5NCwgCisgICAgNDMzMjAsIDExOTE1OSwgNzM5NTUsIDkyMzE1LCA2NDY4LCA0MTk3NiwgOTcyMCwgNzQ5NjQsIDExMTc5LCA0MTk3MCwgCisgICAgNjYyNTUsIDU4MzYsIDEyMzU4LCAwLCA0MzU1LCA5MDQ4LCAxMjE4MCwgNjUwMjcsIDY0NjgwLCAxMzAzOCwgNDM2OTksIDAsIAorICAgIDQxNDg4LCAxMjgwODcsIDg1MjcsIDE5NDkxNywgMTIzNjIsIDEyNDM1LCAxMjM2MCwgNDEwNTMsIDMyNjYsIDAsIDEyMzU2LCAKKyAgICA4NjE2LCA0MTQ2NiwgNDI5MjQsIDIyMjcsIDExNDUwLCA5ODM2OTEsIDM2MzgsIDEyMzU0LCA2NzI5OSwgMzIxNiwgODMwOTksIAorICAgIDIzNTgsIDgzMDkyLCA4NjMzLCA3MTIwMSwgOTgzNzQ1LCAxMTkxODIsIDY5MjQ0LCA4MzA5MCwgNzAzNzUsIDExNzU5LCAKKyAgICAxOTQ5MDMsIDYzNjgsIDc0ODIzLCA2NzMwMywgNDE0MjMsIDgwNzgsIDEwNTA0LCA4MzEwNCwgNDE2OTgsIDQyMjM3LCAKKyAgICA5ODM0NTQsIDcwMDIsIDgzMTAxLCA0MTQzMCwgNDIyNjcsIDQxMDUxLCA0MTQ4NCwgMCwgNzE0NjcsIDQxMDUwLCA0MTQ3MywgCisgICAgMTA0NjYsIDEzMDk5LCA3MTQ0NSwgNzAzNzEsIDEyMDg5NywgNjQzNSwgNzQzMzEsIDExMzYyLCAxMjg5NzMsIDgzMDg4LCAKKyAgICA2NTM4MiwgOTI3NzAsIDQxNDIwLCA4MzA4MywgMzYyNSwgNzQ5MTUsIDQxNDA5LCA3MTQ0MSwgNjk2MzksIDIwNDEsIDkxNzgsIAorICAgIDk2NzIsIDQxNDI3LCA0MzU0MSwgNDMzMTcsIDc0OTI0LCAwLCAxMjg1NTcsIDQxNDI0LCA5MTc1OTgsIDEyMDU0NiwgMCwgCisgICAgMTI4MjEyLCAwLCA0MTQxNywgMTI2MSwgMCwgMCwgMTIxMDIsIDExOTY2MiwgNDE0MDEsIDAsIDEyNzUzOCwgMCwgNzgyNTEsIAorICAgIDEyNDk0MywgNDIyOTAsIDMyNzUsIDkyNDcyLCA0MjMyOSwgNjg4NTAsIDc0OTAxLCAwLCAxMjc5NTEsIDkyMzg4LCA2OTY0OSwgCisgICAgMTA5ODksIDc0MjM0LCAxMTM3ODEsIDEwNTk4LCA3NDEwLCAyNjY5LCA5MDMsIDAsIDI5MjAsIDAsIDEyNzIzMiwgNzQ2MDMsIAorICAgIDY0NTA0LCAxOTkyOCwgMCwgMTI4NDExLCAzOTE3LCA5ODMxMTksIDExNzMyLCAwLCA5ODMxODAsIDQxNDQ4LCA0MTQ2MSwgCisgICAgMTI4ODIzLCAwLCAxMTM3MjEsIDExMzc1OCwgODgxOSwgMTI2NjMsIDAsIDQxMTg0LCA3NDAxNCwgMjMyLCA3NDgzNSwgCisgICAgMTIwNjQ2LCA5MTY4LCA2NTc4NiwgMCwgODMyOTMsIDEyMTAwNywgOTA5NCwgOTgzOTI2LCAxMTc1OCwgNjg0MjUsIDcxODg2LCAKKyAgICAxMDY0LCA0MjQ2NywgMTI4MDQ0LCAxMDExNSwgMTk5MjQsIDkyNzExLCAxMTM2ODIsIDc4NjIsIDY0NTUxLCAxMzIyNCwgCisgICAgODUxNiwgNDE4NjIsIDY2NjUwLCA3NTYxLCA3ODYxOCwgNjk3OTMsIDE4NzgsIDAsIDcxNDM0LCAyOTExLCA4MzA3NCwgCisgICAgNDExNzgsIDU0MjcsIDY0ODIzLCA4MzA2MiwgODMwNjYsIDM3ODcsIDQxMTc0LCA4MzA1NSwgNDE0NTgsIDY3MTQ3LCAKKyAgICA0MTQ2MywgNDI0MTMsIDExMjkyLCAyNDA2LCA3NzUsIDAsIDY1NTg0LCA2OTkyMywgNjA3NCwgOTYxOCwgNjgwNTYsIAorICAgIDEyMTQ4MCwgNDM0NDAsIDc0NTM5LCAxOTQ5MDEsIDQxNDM2LCAzNjU2LCA5MTc4MDUsIDEyMDYwMCwgNDE0NTYsIDY3Njk0LCAKKyAgICAxNTk5LCAxMTMzMywgODMxMzksIDY3MDMsIDg1MTMsIDgzMTM0LCAxNjEzLCA4MzEzNiwgNjg0NTYsIDEyNTk4LCA4MzEzMSwgCisgICAgODMxMzIsIDc4NzQ1LCA3NDUwMCwgNDE0NjAsIDEwMTQ1LCAxMDU0MiwgOTkzNywgNzg3NDYsIDY3MTQ0LCA5OTA1LCAKKyAgICA4MzE0NSwgNjU3MzAsIDgzMTQ3LCAxMjAzNzQsIDg0MjcsIDgzMTQyLCA1NTI0NiwgMTIwMzc2LCA0Mjg5NSwgMTE0OTcsIAorICAgIDY0Njg3LCA3NDAwOCwgNDI1OTIsIDM4NzEsIDk4MzU4NCwgMTI4MzA1LCA5MTExLCA1NzQxLCA4MzMyNSwgMTIwOTg3LCAKKyAgICAxMjAzNjYsIDExOTExMSwgMTExNTAsIDAsIDEyMDM2OCwgMTI4ODU1LCAxMTY0OCwgODMxMjYsIDgzMTI3LCA4MzEyOCwgCisgICAgNDE1ODcsIDcwMzkxLCA4MzEyMywgNzExMDgsIDQyMTEzLCA5ODM1ODgsIDEyNzE1NSwgMTIxNzIsIDgzMTIxLCA3MTQ0MywgCisgICAgNjUyOTgsIDY1NzIzLCA2ODI4OSwgNzM4NzEsIDY1NzI0LCA3OTI4LCAxMjAzNTQsIDk4MzA5NSwgNDE1OTUsIDczNzMwLCAKKyAgICA2NDY3MSwgNDIxMTgsIDczODMwLCA2NjA0MiwgMTAzNTUsIDk4MzExMCwgNzg3NSwgOTgzNjY5LCA0MTU5OCwgMzk5MywgCisgICAgMTIxMjY5LCAxNTQ1LCA0MDk3MSwgNTM2LCAxMjcwNzUsIDQzMDI5LCAwLCAxMjEwMDAsIDY1MTczLCA2NTI4NiwgMCwgCisgICAgNzAzMzEsIDE5NTAxMiwgMCwgOTQwNjUsIDAsIDQxMzc1LCA1NDAyLCA4MzAzNSwgMTI4MTkyLCAxNjg3LCAxMjA1MDMsIAorICAgIDkxNzgxNywgMCwgNzgxOTQsIDY0MzI2LCA0MDk2OSwgMTA1MjYsIDczNzQ3LCA4MzIzLCA0MDk2OCwgMTMzOSwgMTE3MzEsIAorICAgIDc4NzU2LCAxMjcxMDgsIDY1NDYwLCAxMjI0MiwgMTI4NTEzLCA4MDIwLCAxMDg0MywgMTE1NTQsIDkxNzg2NywgMCwgODI2NiwgCisgICAgNDEwMDYsIDY1NzIyLCA4MzA0MSwgMTA3MTAsIDc0MDQ1LCAxMTg5NDIsIDY3NjY3LCA2NDU2NywgMTE5MTU1LCA4MzMxMywgCisgICAgMTI4Nzc4LCA3MTg4OSwgNjc4NTcsIDEyMDY4NywgMCwgOTI5NTgsIDExNzU1LCA2NjMwNSwgNjgzMzIsIDAsIDEwOTE3LCAKKyAgICA5Mzk3OSwgMCwgMTEyNzIsIDIwNDAsIDQxMjQ3LCA0MTMyNiwgMTk1MDYwLCAxNzQxLCA0MjM3MCwgMTIyNywgODMxMTksIAorICAgIDgzMTIwLCAxMTQxMywgMTI2NTgzLCA4MzExNSwgNTI4MywgMTU4NiwgNDk3OCwgNjgwNTAsIDE5ODQsIDExODMwLCA0MzgxOSwgCisgICAgOTIyOTMsIDQwOTg0LCA0MjkwNCwgOTM3MywgMCwgMTI5MTYsIDYyODQsIDE5NDg4OCwgNDE2NjMsIDk4MzA5MywgMCwgCisgICAgNjgzMTMsIDkyMzcsIDkzODUsIDQxNjQ4LCAwLCAxMjg5NTMsIDIyOTksIDQxNjY2LCAxODMwLCA3Mzc4MywgMjA1NiwgCisgICAgNDEyODcsIDkyNjEwLCAwLCA3MTkxNywgNDIyMTksIDY4MDg2LCAxMjAzMjcsIDQxOTg3LCA0MTY3NiwgOTgzMDU5LCAKKyAgICAxMjA4MjMsIDEyNjU1MywgNDE2NzAsIDAsIDkyNTkwLCAyNzk2LCA1NTI5MSwgMTE2ODMsIDk5MDIsIDc0NTIxLCA2Nzk4OCwgCisgICAgMTE0NTEsIDgyOTk1LCA3ODg1NSwgNDI2MzEsIDIzNTksIDcxODkwLCA2Nzg0NCwgNzQxNjQsIDQxMjM4LCA1NDgsIDExNDA1LCAKKyAgICAxMzEzMywgNjQzNjgsIDEyNzI3MCwgMTIwOTI1LCA2NjI3MiwgMzk3LCA0MzYyMiwgNDIxMzksIDk1NDcsIDk1OTAsIAorICAgIDEyODIzOCwgMTYxNCwgNDM2NjEsIDY0MzU2LCA2NjMwNywgNjY1MSwgMTM1OCwgMTIwODcxLCA0MjgsIDk2MjAsIDE0NjYsIAorICAgIDc4MTEyLCAxMDk4MiwgMTEzNzg1LCAxMzMzLCA3MTA0LCA0MDcsIDY0MjUsIDEyODgzNCwgNzQyNTMsIDEyNzk5MywgMCwgMCwgCisgICAgNTgwNCwgMTE5NzYsIDg1NTQsIDkyNzIxLCAwLCA3MDE2NywgOTA1NywgNDIyOTQsIDQxMjE4LCAxMjUwOTcsIDEyMTI5MCwgCisgICAgNzgxMzcsIDE4ODMsIDEwOTUyLCA4MDQ4LCA3MDQ0MywgNDEyMjUsIDkyNjIxLCA0MjkxNSwgMTI4NjE2LCAxMjg1MTIsIAorICAgIDEyODYyOSwgNDQwNywgNzQ2NDgsIDY1ODA5LCAxMTgzNywgMTk0ODIxLCA4NDQ4LCA3MTQxLCA3NDE4MywgMTIwMzM0LCAKKyAgICAxMjY3NSwgMTI2NTksIDc0NjM0LCA0MjM2MywgMTIwNjI0LCA2ODA3NywgNTUyNzMsIDEwNzY2LCAxMjAxMiwgMjM4NiwgCisgICAgNjQ3MzIsIDkxNzAsIDkxNzgyMSwgOTEyMywgNjQ1ODUsIDEwMjk2LCAxMTkxNTgsIDcxNDAsIDEwOTc3LCAxMjczNzgsIAorICAgIDQxNjQsIDkwODEsIDAsIDEyMDU2OSwgNDIwNDksIDQyMDQyLCA4NzA5LCAxMjgyODMsIDEyNjQ3NywgMTIwNjM3LCA0MjQxOSwgCisgICAgNjQ3OTksIDQyMDQ3LCAwLCAxOTQ4MjAsIDg0NzAsIDExODA3LCA2NTg5NywgNTc3LCAwLCA5ODM3NjAsIDc0MzAwLCAwLCAKKyAgICA2ODA4NywgNzQ4NDAsIDEyNjQ3NCwgMCwgMTI4NzkxLCA5MjIyNCwgODczNiwgMTQxNCwgNDI2NDMsIDk2ODMsIDQzNDg2LCAKKyAgICA3NDM0NCwgMCwgMjUzNiwgOTgzOTQxLCA2NjMzMCwgMTIxMjM4LCAwLCAwLCAwLCAwLCAwLCAxOTQ4MzAsIDY2MzE3LCAKKyAgICA2OTk0NSwgNjYzMTUsIDIxMDYsIDY3ODA5LCAxMTI3MywgMTIwOTg2LCA0MzAwNCwgNzU0MSwgODI5ODgsIDAsIDk2MSwgCisgICAgNjQzMDcsIDY2MzI0LCA2NDkwNiwgMTI1MDgwLCAzMTA2LCA2NTkxNywgNDEyODQsIDE2OTYsIDk4MzEzMCwgODkxLCAKKyAgICAxMjEwNSwgMCwgNDI2MjQsIDEyODAyLCAzMjY0LCA4ODI0LCAxMzI2OCwgNDMwMDMsIDEwOTM2LCAxMjA4NzgsIDAsIDAsIAorICAgIDE5NDgyNiwgOTI2ODgsIDM1NjYsIDIzMjIsIDEyMDM3MSwgNzA4MzEsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgCisgICAgMzU0NywgMCwgMCwgMTEzNzQ2LCA5ODM0MDAsIDQzMjE2LCA2MDg5LCA3ODY4MiwgNjg0OTAsIDEyMDU3OCwgNDE3MCwgCisgICAgMTAyOSwgMTI3NzYxLCAxMjcwMzYsIDExOTIyNCwgNDIzNzQsIDAsIDc0NCwgOTI4ODMsIDExMzczOSwgMCwgNjU4MjMsIAorICAgIDEyNzgyNiwgMTExODIsIDM1NTEsIDkyOTM4LCA5ODM4OTEsIDQ2MjMsIDU1MjY4LCAxMjg3MzgsIDQ1OTgsIDk4MzE2MiwgCisgICAgNjUxMzYsIDEyNzEzNiwgMCwgMTI4MTY5LCAxMDg1MSwgMTIwODc2LCA2MTc5LCA5MjYwMiwgNjE4MCwgMCwgMTE5NTIsIAorICAgIDc0NTc5LCA3ODY0OCwgMTE5NzIsIDc4NjQ2LCA3ODY0NywgNzg2NDQsIDc4NjQ1LCAxNzcsIDc4NjQzLCA2MTc2LCAKKyAgICAxMjA1ODAsIDk4MzY5NiwgMTI1MTM1LCA2MTc3LCA5MDIwLCA3ODY1MiwgNzg2NTMsIDYxNzgsIDEyMDI0OSwgMTIwMjQyLCAKKyAgICAxMjgwMjcsIDY3NjczLCAyMjE0LCA4NzU0LCAxMjcwNTEsIDEyMDIzNywgMjEzNywgNDMwODEsIDE5NDY2MywgMTE5MTE0LCAKKyAgICA5MTM2LCA2Njg4OSwgNDQwMSwgNDEyODAsIDcwODAxLCA4OTc0LCAyMzA4LCAxOTQ3NTAsIDc0MTQ5LCAxMjgzMjcsIDIzMTgsIAorICAgIDk4MzE4MywgNjYzNjEsIDgxOTgsIDY1NjI2LCA2NDM2MCwgMTI2MDEsIDQyNTM2LCA0MzkzMSwgMTIwODI3LCA0MzkzMCwgCisgICAgOTI0NjIsIDY5NzAsIDU0MDQsIDQzMzMyLCAzNjY3LCA3OTM2LCAxMjkyNSwgMTI2OTg5LCA2Mzg1LCAxMjg0ODIsIAorICAgIDEyODQwMywgMTE4OTQ5LCAxMDg3NCwgNjU1MDUsIDEyMDAwMiwgMTI5MTUxLCA0MjA1MywgMjA3NSwgNDIwNTcsIDExMDgzLCAKKyAgICA0MjA1MiwgMCwgNjcyNjYsIDY3NjUxLCAxMjExMDQsIDk2NjUsIDkyMzAwLCA5ODM2NjYsIDEzMTgxLCA5MTc2MTcsIDAsIDAsIAorICAgIDcwMDg4LCA3NDE0OCwgMCwgNzA0MTksIDEyMDIyNSwgMTIwMjI5LCAxMjAyMjQsIDc0MTcyLCA0MTE0NSwgNjY0MDQsIAorICAgIDk0MDk2LCA3NDQyMiwgNDExNDgsIDg2ODMsIDc1OTQsIDExMzY4NiwgNzUwMzMsIDExOTA5MCwgMTA4NjksIDQzNDU4LCAKKyAgICA0MTE0NiwgOTI0MDcsIDExNDQxLCAxMjE0NTYsIDM1MTIsIDExOTYzMywgOTI5NjUsIDgxMDMsIDc4MTQwLCAxMjA4NDcsIAorICAgIDY1MTg0LCAxMTc4MCwgNDE1NjMsIDQyNzk2LCAxMjkwNTUsIDY5NzQyLCA0MTU0NCwgNjUxNDYsIDcxMzE0LCAwLCA3ODEwOSwgCisgICAgMTI5MTc3LCAxOTk0MiwgOTgzMjQ0LCAxMTg5MDgsIDc5ODgsIDEwNDM2LCA3NDI3MywgMzI3MSwgNzM4MDQsIDY0NzExLCAwLCAKKyAgICA5NDA2NCwgOTgzMDcxLCAxMjg2NTIsIDM4MDQsIDEzMDcwLCAxMTU1NywgNDIwNDQsIDAsIDEwOTUsIDAsIDM1OTksIAorICAgIDEyNzc3NCwgMCwgMTI4ODYxLCA4NTE0LCAwLCAwLCAwLCA3NDM0NiwgNjY2OTcsIDAsIDExNjg0LCAwLCA5MjQ4NiwgCisgICAgOTE3NjAzLCAwLCA0MjA0MywgNDMyMzIsIDY2Njc3LCA3NDkyNywgNDIwNDYsIDc0MTU3LCA0MDM2LCAxMjY0ODEsIDAsIAorICAgIDEyODIxMywgMTk0ODYxLCA4MzM1NSwgMTE5NTQsIDcwMzQ4LCAxNDUwLCAxMjk4NiwgMTM0MCwgMCwgNjU0NDEsIDkyNzIyLCAKKyAgICAwLCAwLCAxMjUxMTcsIDAsIDkxNzU0MiwgNzM4MTIsIDgzMDUzLCA2NTM5LCA5Mjk0OCwgMTI2NjA3LCAxMjA3MDIsIAorICAgIDkyMzkwLCAwLCAxMjA0OTIsIDQxMTkwLCAzOTczLCAxMTkzNjUsIDQ1NzUsIDQxMTkzLCA3OTgyLCA0MjksIDkxNzk3OSwgCisgICAgNzg4OTEsIDAsIDE5NDg0OCwgNjU3OTIsIDEyODQwOCwgODMyODIsIDY0MTcsIDExODkxOCwgNzgxNzgsIDAsIDEyODk3MCwgCisgICAgMCwgMCwgNDkxOSwgMTA1OTAsIDEyODU1NiwgNzc1NSwgMCwgOTI5NDIsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCAKKyAgICA2NTEyNiwgNjgyNTMsIDEyNzAwNCwgOTgzNjE2LCAxMjE4OCwgOTgzNjY4LCAxNjE3LCA4MDUwLCAwLCA1MDE1LCAwLCAKKyAgICAxMTkxNzQsIDQyNTkwLCA3MDM1NCwgMTc1NiwgNzgxODEsIDAsIDY1NzY4LCA2MzUyLCA0MTg5MiwgMCwgNzU1NSwgMTMxMDMsIAorICAgIDU0MDgsIDI4MTcsIDEyMTQsIDY5OTE5LCA5MjMzNSwgMTIxMjA4LCAwLCA2ODIyNCwgMTIwODcyLCA0MTc2NCwgNzk1NywgCisgICAgODY4OSwgNjQ3MjMsIDEwNTYsIDQyODk2LCA3NDE0NywgMzU1OSwgOTgzOTE4LCA1NTI4NiwgNzA3MywgNjU4NTAsIDEyMzI3LCAKKyAgICA3MDg1MywgMTE5MDI4LCAwLCAxMjgxMjIsIDEyODQ0MiwgMjM0MSwgODQ1MCwgODQ4NCwgODQ3NCwgMTk0ODg0LCA2ODMyMiwgCisgICAgNzAwNzksIDg0NjEsIDY3NzIxLCAxMjE1MywgMTI3OTksIDAsIDQzNzA5LCA0MzcwOCwgOTQ1MSwgNzU3MSwgMTMwNzMsIAorICAgIDQzODQ3LCAwLCA2ODEsIDk4MzI1NCwgNzAzLCAxMjc1MTgsIDMyNzIsIDg3ODEsIDEyODk0LCA3MDA3NywgMTE3MDksIAorICAgIDkyMjg4LCA3MDUxNCwgOTgzOTAwLCA4MzE3NSwgNzE0MzYsIDExMzM4LCAxMjA3NjgsIDMyNzYsIDEyODk2OCwgOTE3OTg5LCAKKyAgICA2NTkyOCwgMCwgMTIxMzY3LCA2NTAyMSwgNjQ3OTUsIDc0NTc0LCAwLCAxMDA0NywgNzg4MTQsIDMyNjIsIDc4ODExLCAKKyAgICA0MjcxMSwgMCwgMCwgNjg0NzgsIDE2MywgNTc2LCA5ODk1LCAxNjU1LCA3MDEzMSwgNzQ1OTEsIDc4ODE1LCA3ODgxNiwgCisgICAgNjY4ODgsIDAsIDAsIDcwNTEzLCAxMDAzOSwgMTIwNDI2LCA1NjI2LCA1NjIzLCA1NzE3LCA1Nzc2LCA0MzQ4OCwgODM0OTcsIAorICAgIDY2ODg1LCA0MTU5MSwgMTEwMzYsIDY1MjUyLCA5MjM4MiwgMCwgMCwgMTIwMTExLCA2Nzg0OCwgMTI4MTI4LCA5ODM1OTUsIAorICAgIDk4MzQ3MiwgODg4NywgMTI3NTIxLCA3Mjk1LCAxMTAzMSwgOTgzMzM2LCA0MzE1NywgMCwgODk0NiwgMTAzNDgsIDEwNDEyLCAKKyAgICA4NzU1LCAxMTkxNTIsIDAsIDU3MTgsIDEzMjIxLCAwLCAwLCA3ODEzNSwgNzA1MTUsIDkxNzYxNiwgODgxMCwgNzQ0OTksIAorICAgIDY4NiwgMCwgNzEzNjIsIDQ2MTksIDExODk1NCwgNjY1NCwgNzM3NjksIDc0NDI2LCAwLCAxMjA0MCwgNjU2ODksIDEwMTI4LCAKKyAgICA2NTExOCwgNjgwMjksIDExOTE1MSwgNzQyMDUsIDkyNjUxLCAxMjg5MDIsIDI0MDEsIDY4MTQ0LCA4NzkyLCA5ODM2NDgsIAorICAgIDY4MDQ0LCA2NTQ1NSwgMCwgNzQzMjgsIDAsIDc0NTYxLCAxMjA3NjMsIDEyODg2LCAxMjA5NTIsIDY2NjI0LCAxMjY1NzgsIAorICAgIDQzNTU3LCAxMDMwMCwgMTAxNjEsIDEwMzk2LCA3MTIxMCwgNzg2MDIsIDExODk0NSwgOTk4NCwgNzM4NTEsIDMwMTAsIAorICAgIDY0NDEsIDcwMzQ5LCAxNDU4LCA0MTQ3NSwgNzI0MjksIDkzOTc1LCAxMjc5MTAsIDExNDc5LCAxMjEzNTUsIDEyMDM1NiwgCisgICAgNjM1MCwgMTI4NjQsIDY5Njc0LCA3MTQ3MywgMTA2MSwgNjQ3ODAsIDIwMDEsIDQzMTExLCA1NTIzMCwgMTI0OTQ2LCA0MDUyLCAKKyAgICAxMTM2NzMsIDc2MjYsIDAsIDEyMDkwNywgMTA0NSwgMCwgNTYzMSwgNDExMTMsIDEyNzU0NCwgMCwgNDM3MDcsIDc0MTI3LCAKKyAgICAwLCA5ODM3MTgsIDg0ODYsIDAsIDczNzU4LCAyMzM1LCA0MzYyLCA5ODMxOTUsIDEyNjU2MSwgNjkyMjEsIDEwMjUsIAorICAgIDEyNzI3NywgNDI2MjUsIDcwMzI1LCA3ODA4NCwgNDE0NDMsIDAsIDEyODIwNiwgMCwgMTc3NCwgMTUyMywgMTIxMzMwLCAKKyAgICA2ODA1OSwgNDE0NDUsIDc4MjM2LCAxMTIwNywgODU2NywgNDE0NDIsIDM5ODgsIDc0ODQzLCA3ODIzNywgMTE4OTEwLCAwLCAKKyAgICA2NTI3NCwgODU2NCwgNzgxOTksIDc4MjM4LCAxMjc1MTUsIDEyMTI3MiwgMCwgNDM0NDYsIDAsIDY2NTEzLCA2MjU2LCAKKyAgICA5MTc4MDcsIDU3OSwgNTUyMTgsIDEwMjA2LCA3ODE5NSwgNjM3NSwgMjY3MywgOTgzODg2LCAxMTgxNCwgMCwgNDQ4OCwgCisgICAgMTI4NzE2LCAxMjA1NTQsIDY4NDUxLCAxMDQ0NCwgMTE4ODQ2LCAxMjczMzQsIDExNzk5LCA3NDQwNywgNjg0NjYsIDQ0ODcsIAorICAgIDEyNzg0OSwgNDI4MzIsIDEwMzIsIDEyMDI2NywgNDM0NTAsIDc4MjU3LCA3MjAzLCAxMjQ5OTgsIDYxNCwgNzAzNjEsIAorICAgIDEyNzIxNSwgMTIwNjE1LCAxMTk2MjIsIDc4MjYyLCAxMjcyNzEsIDEyNzMyMywgMCwgNDMxMjEsIDEyNzIxMSwgMTI4MzY2LCAKKyAgICA5MjUxMywgMTA1MCwgNzU0OSwgMTIxMjYwLCA4Mjk5NCwgOTMxNCwgNzAzNjUsIDkyODk4LCA2ODAzOSwgMTI3MDYxLCAKKyAgICAxMDA1NywgNzA0MzQsIDEyNzMxMywgMTI4NTc3LCA2NjUwNCwgMTIwOTYzLCA4Mjk5MiwgMjMwNywgMTI4NDU2LCA2NDMzMywgCisgICAgMTI3MzEyLCAxMjgyMzAsIDczODczLCA5ODM3MTAsIDk0MDM1LCAwLCAxMjc5NzMsIDEyODcwOCwgNzA0NDYsIDEwMzYwLCAKKyAgICA2NzQ2LCAxMjA0NzMsIDkyMjQ1LCA0NDAsIDAsIDEzMDg1LCA5MjMzLCA3NDIxNiwgMCwgMTI3Nzg1LCA5OTU3LCAxMjgyODUsIAorICAgIDY2NDQ3LCA4MDQ2LCA2NDk2MywgNjU3NzcsIDEwMTI1LCA3NDIxMiwgNDI4MTksIDEwOTEwLCAxMjA0MjQsIDE1MjEsIAorICAgIDk4OTYsIDkzOTY1LCAxMDQ4NywgNjk4NzgsIDEyNTI3LCA2ODczNywgNzk3MCwgMTI1MDczLCAxMjg2NjAsIDAsIDY1NzY5LCAKKyAgICA1MjQzLCA5ODQ5LCA1MjM5LCA2NTc3MSwgMTIxNDI5LCAwLCA1MjM3LCA2OTcxNCwgNjg3NTYsIDEwMTAzLCA1MjQ3LCAKKyAgICA0NzY5LCAxMjkzMDIsIDExODk3NywgMTI4NzMsIDIyODMsIDkyOTMxLCAwLCAzMDA4LCA0ODk2LCAxMjgxMDIsIDEyMDg3LCAKKyAgICAwLCA1NTIzMSwgNDExMDMsIDkyMjU2LCA2NDU2NSwgNDc3MywgMTIwODQ2LCA3ODU0OSwgNzAwNzQsIDQ3NzAsIDY2ODkxLCAKKyAgICA5MTc1NjcsIDg3MzEsIDY1Mzc4LCA2NjkxMSwgMTIwNjE5LCA5MTIyLCAxMjgwMzMsIDEyNjYwMCwgNDc3NCwgMzAxOSwgCisgICAgOTk5NywgMTI4MzQsIDAsIDk0NTYsIDEwMjE1LCAxMjA1NDcsIDAsIDc4NTU2LCAwLCAxMjEzMzIsIDc0Nzc2LCA0MjgxLCAKKyAgICA0NzY4LCAxMjA1NzIsIDQxNTM1LCA0MDk5LCA5MDE3LCA2OTk5MywgOTgzNjkyLCA3ODA5NSwgMjIyNSwgNzgwOTYsIAorICAgIDExODk0NiwgMTIxMDk3LCAwLCA3ODA5OCwgMCwgNDI4MTQsIDg4MCwgMCwgMTEzNzY0LCA2Njg3MCwgMjEzNCwgMCwgCisgICAgMTAxMTYsIDk4NzcsIDkyMzI5LCAxMjg5NjAsIDAsIDcwOTUsIDgzNzksIDc0MTE2LCA2Nzc4LCAwLCA3ODA5MCwgODI0MywgCisgICAgMjQyNywgMTI4MTQxLCA3MDkzLCAwLCAxMTU4NSwgMTk1MDAzLCA5OTYyLCA4Mjk5MCwgMTIyMjMsIDEyODQ4NSwgOTI0MzAsIAorICAgIDE0MzQsIDEyMDI1NCwgNTYzNywgMTE1NzMsIDAsIDAsIDAsIDE5OTUxLCA4MzM4OSwgNzQ0MTksIDAsIDE5NDY4NiwgCisgICAgNTUyODMsIDAsIDcwMzYzLCA3NDQzNywgMTE1NiwgODc0MCwgODMyOTUsIDM3ODIsIDY0MzMxLCAwLCA0MTM3MCwgMTAxNCwgCisgICAgODI2MSwgMTIwOTU2LCA5MTc1OTYsIDEwODM1LCA5MTc5NjYsIDY1NTM2LCA4MzI5NCwgMTIwNDYzLCAxMjUwNTEsIDc3MDIsIAorICAgIDExODgyNCwgMTI4OTc2LCA0MzAxMCwgNjU3NzksIDY1NzgzLCAxMTUwLCAxMDU0NywgNTcwMCwgMCwgMTIwNjAzLCA2NTM4MywgCisgICAgMjMzOSwgNDI1OTQsIDU2OTcsIDExODc4OCwgNzUwMTgsIDEyODU3NiwgNzQ5MjMsIDQyMjU3LCA1Njk2LCA5MjY3NywgCisgICAgMTIwNDY1LCAzODYyLCA5NjQzLCAwLCA3MDE4MywgNzYzNCwgNjUxNjcsIDk4NDUsIDAsIDAsIDU3MDEsIDk3MjIsIDQxNDkwLCAKKyAgICAxMjg3MTksIDE0MjYsIDY4MjE3LCA5ODM2MTQsIDY4NDQ3LCA0MjIwNCwgNTUyNzAsIDg1NzEsIDY3NDAzLCA3ODA2NywgCisgICAgNDM4NTksIDc4ODE4LCA5MjcxOSwgNDMxODIsIDEyMTg0LCAwLCA0MjAyMiwgMCwgMTAyODEsIDAsIDU2NTAsIDQzMTk0LCAKKyAgICA2NDcxMiwgMTA3NDQsIDc4ODg3LCA5OTAsIDU2NDcsIDAsIDczODcsIDc4NzM0LCA0MTExNCwgMTE0NzcsIDU2NDYsIAorICAgIDEyODc5LCAxMTAxOCwgMTI4MzYyLCAzOTQ1LCA5MjU4OSwgOTgzNDY2LCAxOTQ5ODksIDc4ODgzLCAwLCA3ODIxMiwgCisgICAgMTI3NzQ2LCAxMDIwLCA3Mzc2MywgOTgzODM1LCA3ODczMSwgNTY0OCwgNjQ3NDgsIDEyMDkyMCwgNzg3MzMsIDEwMjA1LCAKKyAgICAzNTQ1LCA5ODM1ODUsIDY5ODQsIDEyODAwOCwgNzQwNTEsIDEyODkwMSwgNDMyNDIsIDEyMDQ1OCwgMjY2NywgMTI4MTczLCAKKyAgICAxMjUwMzcsIDAsIDk5MTEsIDAsIDY1MDIwLCAxMDA5NywgMTE5MTY2LCAxMjcxNDUsIDk4MzY2MiwgMTE4ODM2LCA5ODM3NDgsIAorICAgIDc4MjA4LCAxMTQwLCA3ODQyNiwgMCwgMTAxNTksIDAsIDAsIDgxMjgsIDEyODY0NCwgNjgzMjYsIDE5NDkxMSwgMTgxNSwgCisgICAgMTk5MTAsIDg5MCwgMTI0OTM1LCAzMjY3LCA5MjI5MSwgMCwgMTAxMjMsIDEyMTM5OCwgNDQxMCwgMTA0MSwgMTA1NzYsIAorICAgIDYzNTQsIDkyNTgxLCA1ODAsIDc0MjMyLCA5ODM3NDYsIDEyODM0NywgMCwgMCwgMTI4MDk4LCAxOTkzOCwgNjU5MDYsIAorICAgIDEyNzgxOSwgOTE3ODExLCAwLCAzMjk4LCA1Mzc1LCAxMDE0MiwgMCwgODIxNSwgOTI2MzMsIDYxMzQsIDQxMjQ2LCA2NDQwMiwgCisgICAgOTgzMTQ3LCA2OTg5OSwgMTk0OTM4LCAwLCAxMjE0MjYsIDQxMzgyLCA5MTc5MjcsIDEyODY1MywgNTE3MywgNjUzNDgsIAorICAgIDUyNywgMTIxMTc0LCAxMTM3ODIsIDc4NDY5LCAxMjgyNTAsIDc4Nzk3LCAxMTkxNSwgMCwgMCwgMTAwNzIsIDAsIDQyNjk1LCAKKyAgICAyMzI5LCA0MjI1MCwgMCwgMTExODcsIDY5NjY3LCAxMjI0NSwgMTU2OCwgOTQwMzMsIDgzNDYwLCAwLCAxMTM3MDUsIAorICAgIDkxNzkxMCwgMTEyMDEsIDkyNzA4LCA3NDc2OSwgMTI2NDcwLCA2NzY4MCwgOTA2OSwgNjE0NCwgMCwgMTE5ODQwLCA3MzgyMiwgCisgICAgMCwgMTI4MDEwLCA2NDkxNywgNDE1MjEsIDExODkzNCwgNDk0LCAxMzI1MCwgOTIyNTAsIDY1MDk4LCA2MzY0LCA5NTYsIAorICAgIDExMzc5MiwgMTI4MzAsIDEwNDYyLCA3Mzc0MCwgNzM3MzQsIDAsIDAsIDk4MzczOSwgNjY0NDksIDEzMjYzLCA3NDI4MSwgCisgICAgNjkyMTcsIDEzMTcxLCAxMjc3OTYsIDEyMDU2NCwgMCwgNjM4ODUsIDEyNzI1MSwgMTA0NCwgNDEyNzYsIDEyODM2MywgMCwgCisgICAgMCwgNDIwNjgsIDExNzk1LCAxMjQ5ODUsIDAsIDEyNzIwMiwgMCwgNDI0NTAsIDM5MDcsIDAsIDY0NTI2LCAxMTgyOSwgCisgICAgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgNzAzMjksIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgMTIwNzYxLCA3MDk4LCAKKyAgICAxMjUwNzEsIDAsIDEwNTcsIDU2NiwgNDI2OTYsIDEyNzIzOSwgMzAxNiwgNDIyNzQsIDQzNDY0LCA2NjQ5MCwgMTI5MjEsIAorICAgIDY2NTcxLCA3ODQ3MiwgNzEyMDcsIDMwMDYsIDQ2MjAsIDEyNzIzNywgOTgzMzMwLCAwLCAwLCA2NDY1OSwgMCwgMTI3NzQ5LCAKKyAgICA1NTI1MywgNjM1NywgNjM2MiwgODYyNiwgNzEzMzcsIDIyMTYsIDkwOTAsIDY1Mzc3LCA0MTU5NiwgMCwgNDI5MjAsIDE2OTgsIAorICAgIDAsIDY0NDc3LCA5MTc4NTMsIDQzODEzLCAxMDUzLCAwLCA3ODI2OSwgMCwgOTI5NzcsIDEwNTIsIDEwNTEsIDQ1OSwgMTA2MCwgCisgICAgNzQzNDksIDY2NDc5LCA2NzY4OSwgNjY4NzEsIDkxNzg0NSwgNzAzMjcsIDQyNDkwLCA2ODksIDY1MDgsIDQxNjMsIDQyMjk4LCAKKyAgICA4NjM5LCA2NjY0MSwgNDI0NiwgMCwgNDM1MTQsIDEyMTMwLCA5ODMzMDgsIDQyMzM3LCA2NDU5NiwgNjQzNzUsIDY2NDgxLCAKKyAgICAxMjc4NTAsIDk4MzE0NCwgMTI3ODI4LCA2MzU5LCAwLCA0MzQ3MSwgOTgzNzY4LCAwLCA4MzM0NSwgNzUwNjUsIDAsIDYzNTgsIAorICAgIDYzNjEsIDE5MjYsIDYzNTYsIDkyNjI3LCA3ODk4LCA4MTEwLCAxMDkzNSwgMCwgMTAwNjksIDU4MzAsIDEyNzc3MywgCisgICAgNDM2ODUsIDc0MzA3LCAwLCA0MjkxMCwgODMzMDEsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDEyODYyMSwgMTIwNDEzLCAKKyAgICA5MjE5MiwgMTIxNDU0LCA2NTg5NCwgMTk0Njk0LCAwLCA2NDI5NiwgOTgzNjgxLCA5ODM2NDQsIDE5NDk1OSwgMTE5MTg3LCAKKyAgICAyMTM1LCAxMTgzNiwgMCwgMCwgNzg4NjksIDQyMzEzLCA1NTc5LCA5MjQxMiwgNzAzODQsIDEyOTExMywgNDM4NTQsIAorICAgIDcxOTEzLCA1NTc4LCAxMTg0MCwgMTI4MTE1LCA0MjAyMywgNjIzNCwgNTY2OSwgOTIyNzUsIDc4NjIwLCAxMjExNzEsIAorICAgIDY4ODMzLCA5MjI1NCwgNjgyMDIsIDU1ODMsIDAsIDAsIDQyNDI2LCA1NTgwLCA0MjI3NiwgMjkyMywgODkyLCAyMjIwLCAKKyAgICA0MjQ2NSwgNDEzMzAsIDE5NDk4NywgNTc5NSwgNjU1MTIsIDY4Nzc0LCA2NTcwMiwgNjg3NzAsIDEyMDgwMSwgNjUyNTEsIAorICAgIDY4MjI4LCA2NTcxMCwgMTI4Mzk5LCAxMjg0MjksIDY3NjcyLCA2ODc4MywgNTM3MCwgNzA0NjUsIDI5MzEsIDE2MzgsIAorICAgIDEwOTY2LCAxMDE4OCwgNjU4NzgsIDExODg0OCwgMCwgNjk2OTQsIDY5ODc5LCA3NDU4NSwgODE3MiwgNDIwMTcsIDkyNzU2LCAKKyAgICAxMDg0NCwgMTIxMDE2LCAxMjgxOTUsIDkyNDI0LCA2Mzc0LCAxMTk5OTgsIDEyMTA3NSwgMjg2LCA3ODAyMywgMTA2MiwgMCwgCisgICAgMTE5OTk5LCAwLCA3Mzk1LCAxMjc3ODMsIDEwNzAsIDY0OTAwLCA3MTUzLCA2MDk1LCA0MTg2NSwgMTk0NjQwLCAzMDE1LCAKKyAgICA2ODc0MywgNjg3NDAsIDUyMTEsIDY4ODA1LCA2NDAwLCA2ODc0OSwgNjg3NDgsIDY4NzYwLCA4MTg5LCAxMTI3NiwgNjg3NTQsIAorICAgIDcwMjg0LCAzNzIsIDEyODgyOSwgNjg3NjEsIDExMzc4MywgNDIxMDIsIDQxNTg1LCAxMjc3NTEsIDAsIDQyMTAxLCAyNzYsIAorICAgIDc4NDAyLCA2NzQyNywgMzMsIDY3NDI1LCA2NzQyNCwgOTAwNywgNjc0MzAsIDQxNTg4LCA2NjAzMywgNDI3LCAxMDc2MywgCisgICAgMTE4ODE5LCA3MDg3MiwgMTI3ODg0LCA5ODM5NDMsIDEwMzEsIDYyNTcsIDkyNDg5LCA0MjEwNCwgMCwgOTgzOTgwLCAyMzI4LCAKKyAgICA2NjgzNywgMTA3MSwgNDI4OTksIDEyNTA4OCwgNzQ4NDgsIDEyMDg1NywgMTEzNzkzLCAxOTQ5ODEsIDEwNDcsIDAsIAorICAgIDE5NDk0MywgNDI5MDgsIDEyODQ4MCwgNjk3MjMsIDEwNjUxLCA3MDM1NiwgMCwgMTI1MTEzLCA3MjQzMywgNjY4MjksIAorICAgIDcwODE3LCA1NzExLCA0MTYzMywgMTIwOTgsIDY1NTcxLCA5MTY2LCAwLCA1NzEwLCAxMjg1NTEsIDY3OTAsIDY1MTY4LCAKKyAgICAxMzIxNiwgOTgzMTUwLCA2OTcxNiwgNjk3MjYsIDAsIDY0NjExLCA0MTYyMywgMTk1MDAxLCA1NzE1LCA2OTY1NCwgNzE5MTUsIAorICAgIDAsIDU3MTIsIDI3NjEsIDQxNjIwLCA2ODEyNCwgMzA3NCwgNTcyMiwgMCwgODY0MywgNjg1MjUsIDAsIDExODkwNiwgMjc1NywgCisgICAgMTEwNjcsIDk3MTgsIDY2NDE5LCA4OTEwLCAxMDY4OSwgNjQ3OSwgMCwgMCwgNzExNzMsIDc4NjA3LCA5MTk2LCA2OTY3MCwgCisgICAgMTI1MDcwLCAwLCAxMjgzMzgsIDEyMDMzNSwgMTE4OTExLCAwLCA5NDA0MywgMTI5MTk0LCAwLCAwLCAxMjAwMTAsIDczNzk1LCAKKyAgICA4NzAxLCA2ODEzMCwgMTE5NjE2LCAxMjA1MjIsIDAsIDQyNDc3LCAxOTQ5OTQsIDEyMTIzLCA0NDk1LCA0MzU2OSwgMCwgCisgICAgMTI5Mjk2LCAwLCA2NDk0NiwgMTA5OTIsIDAsIDc0NTY2LCA3MDMzNiwgMTEzNjg4LCA5MzE4LCA5Mzk4NiwgMTMyNDksIAorICAgIDQyOTAyLCA3MzgwOCwgMCwgNjU0NTcsIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAKKyAgICA3MDM2NiwgMTIwMDA1LCAxMTk1ODUsIDEyMTIxMiwgNTA4NCwgMTIxMTg5LCAxMjExMzQsIDc1MDYyLCAwLCA3MzMsIAorICAgIDc0NjQ2LCA3ODAxNCwgNjg3NjcsIDc4NDM1LCAxMTIwNCwgMCwgOTIxOCwgMTczMSwgMCwgOTI5MzcsIDcxMDcwLCA2Nzk5MCwgCisgICAgOTgzMTI1LCAwLCAwLCA3MDMyMywgMTIxMzcxLCA5MjQ5MiwgNTE1NSwgMTIwMDAwLCA1MzU4LCA5ODM3NDQsIDAsIAorICAgIDkxNzc2NywgNjQ0MjQsIDcxMjM2LCAzODQwLCA2NDMxNCwgNDE0MzIsIDEyMTMxNiwgNzgzMTUsIDY4NDMwLCA2Nzk4MCwgCisgICAgNDMyNTMsIDY1OTQzLCAwLCAzMzcxLCAxMDk4OCwgMTI3OTYwLCA4NzcxLCAxNDc5LCAwLCAwLCAxMTA5LCAxMTU4MCwgCisgICAgNDM2NTcsIDY0NjAxLCAxMjIwNSwgOTI3ODIsIDAsIDY0NTA3LCA4ODY4LCAzOTksIDY3OTc4LCA3NDg0MiwgOTgzMjg2LCAKKyAgICAxMjEzMzYsIDEyMTQ5LCAxMzA4OCwgNTUxLCAwLCAxMDE1NiwgMTIxMTksIDkyNTcyLCAxMTg5MTYsIDI1NDQsIDY1MDc0LCAKKyAgICAxMTkyMTEsIDk4MzI5OCwgMCwgNzgwMTEsIDM1MSwgNjg3NjQsIDAsIDEyODcxMywgNTUyMjksIDAsIDc0MjY4LCA3ODAwOCwgCisgICAgMTI4MDk0LCAwLCA0MjM3NywgMCwgMCwgMCwgMTEzNzY3LCA3NDMyMCwgOTAxMywgNDA1NCwgMCwgMTk0NTgwLCAxMTM3NDAsIAorICAgIDAsIDczOTYwLCA1NTg1LCA2NTg4MSwgMjU0OSwgNzQ0NjksIDc0NDU3LCAxMTEwNCwgNTU4NCwgODM1OCwgMTI2NDczLCAKKyAgICA2NDIxNSwgNjY4NjQsIDEwOTE5LCA3MDQ4MCwgNzk4MCwgMTI2NjAxLCAxMTM2OTgsIDIyMTgsIDQxODAwLCA1NTg5LCAKKyAgICA4Mjk4MywgMjY2NCwgNDE2MTMsIDU1ODYsIDExODg5MCwgMCwgMTEzNTYsIDEyMTEyMCwgMTk0ODMzLCA0MzQ1MiwgNjcyNDUsIAorICAgIDkyOTkzLCA0MjU3MywgNjY4NzksIDgzMzI5LCA2NzgxMCwgNjk3NjcsIDc4NzUyLCA3NDM5MiwgODEzNSwgNjQ1MCwgCisgICAgMTAwNTUsIDc3OTk2LCAxMTk5NDgsIDk4MzE3MywgMTE5MjI1LCA1NjU3LCAwLCA5NjI2LCAxMjE0NTMsIDc3OTk0LCAKKyAgICAxMDE3OSwgNTY1NCwgMTI5MzksIDkyNTczLCAxMjA3OTksIDcxODYwLCAwLCA1NjUyLCAxMDk0NSwgMTk0NTk5LCA2NjQ4NiwgCisgICAgMCwgMzY2MSwgNzg2MywgMCwgNjgwNjksIDk4MzY3NSwgNzAzMzIsIDEyNzE5NCwgNTY1OSwgMTk0NjA2LCA3ODY5MiwgCisgICAgNjY3MjksIDU2NTUsIDk4MzYyNiwgNDIxNjgsIDEyMTEzMSwgMTA1NSwgNzExNzEsIDcxODg4LCA2NjMxMCwgNzQwMzAsIAorICAgIDcwNTE2LCAxMjE0NiwgNzAzNjIsIDczOTU2LCAxMTYxOCwgMCwgNDI3MjAsIDkyOTQ5LCAxMDI3MiwgMTAzMDQsIDEwMzY4LCAKKyAgICA0MjUxOCwgNTk0LCAxMDI0NCwgMTAyNDgsIDc0MDcsIDc0OTc4LCA2NDg3MCwgNzQxOTEsIDM0NjcsIDcxMDczLCA3ODgxLCAKKyAgICAzMzMxLCA5NDYsIDEwMjMxLCAxNDk1LCA4MTMxLCA3NDMzMCwgMCwgOTU2MiwgNjkyMjIsIDY1OTI3LCAwLCA3MDAzNiwgCisgICAgNjk2OTYsIDY5NzY5LCA2NDY1NiwgOTE3OTk1LCAwLCA5MjQwOSwgNzAwNTYsIDU2NjYsIDY1MjI3LCA1MzE4LCA2Mzk5NCwgCisgICAgMTE5NTk2LCA5MDkxLCAxMDc5OCwgNzg2NjQsIDc4NTA4LCAxMDE4NiwgOTgzMjY1LCA3NzMyLCA5ODM3MjQsIDY0NTU2LCAwLCAKKyAgICA5ODM5NzksIDU2NjgsIDc0NDQ1LCA3NDk4MiwgNzQ2NDUsIDU2NzAsIDExMzc5NSwgMTI3Mjk3LCAxMTgyMCwgMjk5MiwgCisgICAgNzgyNiwgNTY2NywgMTk5NTIsIDEyMDgwNywgNzQ5ODEsIDEyNzQ5LCA3NDU1MSwgNjc3NTcsIDAsIDY2NDk2LCA0MzYxLCAKKyAgICAxMTkyNjAsIDEzMDYsIDkyODYsIDE0OTcsIDEyODI4NiwgOTQwMDQsIDcwMzU5LCAwLCAzNTcxLCAxMzI0NywgNTg3NCwgCisgICAgNzk3MywgNjYzNTMsIDY4NDM1LCA3ODI3OCwgNjc4OTYsIDQzMTkyLCA3NDYyMSwgNzgyNjUsIDU1MywgMTEzNzY4LCAKKyAgICAxMjcwMTIsIDkzMDUzLCA1ODI5LCAwLCA0NTg3LCA3ODI4NSwgNjU5MTIsIDE5NDkxOSwgMTI3NDYsIDEyODY3MSwgNzAzMzgsIAorICAgIDExOTkyNCwgNTYzMywgMTE5OTI3LCA3NDI1OSwgOTQxMDIsIDk0MDk5LCA2NDkwNSwgOTQxMDUsIDk1MTIsIDk0MTAzLCAKKyAgICAxMjc0MiwgNjQ0MywgOTgzODA2LCAwLCA5MTM1LCAxMjg4NjMsIDQxNTY0LCAxMjE1MTcsIDU1MjE5LCAxMjg4MzIsIAorICAgIDk4Mzg1MSwgMTk0ODc3LCAxMjE0OCwgMCwgNzgyOTcsIDAsIDY0MjU2LCAwLCAxMTY2OSwgMCwgNTYzNCwgNDUyNCwgCisgICAgMTI4OTAzLCAxMjQ5MzYsIDEyODM5MCwgODMyMTUsIDI0MjUsIDY1MTgyLCAxMjg3NjksIDQzNjM2LCA1MjIxLCA3ODQxMCwgCisgICAgMzI4LCAxMjEwMzEsIDY4NzM2LCA2OTgxNSwgNTYzNiwgMTE5OTE3LCA1MzI5LCAxMjEyOTMsIDU2MzgsIDgzMTY2LCA3OTQwLCAKKyAgICA2NDkzOCwgNDMyMjMsIDQzNzYwLCA1NjM1LCAzMzczLCAyOTg2LCA3ODI5MiwgNzQyMjMsIDM0MzcsIDY4NzYzLCA2MjAzLCAKKyAgICA0MjQ3LCA3MTE2OSwgMTE5MjAsIDgyNzQsIDY4MjQwLCA5ODM2NTgsIDE2NTcsIDQxNTYxLCA2ODc3OCwgNzgyOTUsIDU2MzksIAorICAgIDI5NTQsIDU2NjAsIDU2NDAsIDc4MzAzLCA5ODM2ODUsIDcxMTc5LCA0MjIyNywgNjgzMDEsIDgzMzIyLCA0MTYzNywgCisgICAgNjc4NzIsIDEyMTEwNSwgNzgzMTAsIDQxNjI1LCA0MzM2MiwgNzgzMDksIDEyMDcxMywgMTE3MDUsIDU2NDIsIDAsIDU0ODYsIAorICAgIDAsIDQzNTYsIDExNzEwLCAwLCAxMjA1MSwgNjk5MzgsIDAsIDU2NDEsIDgyNTksIDEyNjk5NCwgMTA1OCwgMCwgNjc2MzAsIAorICAgIDAsIDEyODkyNywgMTE0NCwgNzg3NTAsIDEyNzI5MywgNDIyMjgsIDk4MzcxNCwgNzM4OTAsIDExODk3MiwgMTI3MzUyLCAKKyAgICAyODAwLCA4MzIwOSwgNTY0NSwgNjQ5NjQsIDg2NTIsIDI1NDcsIDY2NDg0LCA0MzYzNCwgMTIxMzU2LCA1NjA4LCA2NTg5MCwgCisgICAgNDM4MDgsIDE5NDk3MiwgNjc2MjEsIDY0OTMyLCA5MDAwLCA3MTIwNCwgNjcyMzUsIDkyNjczLCAxODY1LCAxMjg3MDYsIAorICAgIDU2MTMsIDY2NDAxLCAxMjExNDUsIDAsIDU2MTAsIDk4MzIyNiwgNzExOTksIDY1ODI2LCAyMDY5LCAwLCAxMDc4NywgCisgICAgNDM5OTksIDI5OTcsIDExOTkzMiwgNTYwOSwgNzgzMTYsIDY1MzE5LCA3ODMxMywgMTIzMTYsIDU4NzUsIDI0MTIsIDgzMjA2LCAKKyAgICA4MTg2LCA5ODA3LCA3NDI2OSwgNjYyOTQsIDEzMTMwLCA2NTg3NCwgNzE4NTUsIDU4MDcsIDExMzY3OCwgMTAwMzAsIDUzMDYsIAorICAgIDEyMzY0LCAxMTg4NjMsIDkyOTcwLCAxMTcwNCwgODMyMDIsIDkyNTgzLCAxMDIxMSwgMCwgMTIwNTc5LCAwLCAxMjEwNjMsIAorICAgIDExNzA2LCA5NzEwLCAxMjUwMjIsIDgyOTg1LCAxMjA2NTUsIDQxMywgNjU2MjMsIDcxMTgsIDgzMTY3LCA5MTMzLCA3NDI2MiwgCisgICAgOTE3OTY0LCAxMDQyLCAxMjUwNjgsIDY0Nzc5LCAxMjE3MSwgMTE5MjQwLCA2MTg1LCA2NDc3NiwgNDk4NCwgMTIxMjY2LCAKKyAgICA3MDgsIDExMzkxLCAwLCAxMjI0MSwgOTI3MjAsIDgzMzk5LCAxMzA4LCAxMjEyNTgsIDI1MzQsIDgxMCwgMTI1MDg5LCAKKyAgICAxMjA5MzMsIDEyODAxNiwgNzE4NDksIDcxODY5LCAxOTE3LCAzMDAwLCAxMjUxNDAsIDEyMDE4NCwgMTIwNzM5LCAyMzY0LCAKKyAgICA2NjM4NywgNzQ0NzAsIDY2NjE4LCA2NTY4MCwgNjY0MTEsIDEwMDI3LCA3MTg0MSwgMTI4MTU0LCAxMjMzNywgNzQyODMsIAorICAgIDEyNzM2OCwgOTgzMTY3LCAyOTgwLCA3NTUsIDY5Nzc0LCA5MzEsIDEzMTI0LCA2ODA2OCwgNjM2MywgMjc0OCwgMTIxMDIyLCAKKyAgICAwLCA2NTA0MSwgOTIyNzYsIDQ0MDExLCA4NzMwLCAxOTQ5OTcsIDEyNzg1NCwgNzgzMTIsIDcyNzQsIDExOTI1MCwgOTI5ODgsIAorICAgIDcyNzUsIDc4MzA0LCA5MzUsIDEyNzA1MiwgNjU4NDAsIDM3NywgNDIzMjUsIDExNjQ5LCAxMjczNjMsIDY1MjUzLCA2NDMwMSwgCisgICAgMTI4ODM1LCA3ODMwOCwgNDIzNDEsIDY1Mjg0LCAyNDE3LCAwLCAxMjg4NCwgMTk5MTIsIDc5MDcsIDEwNzY4LCA3ODMwMCwgCisgICAgMTk0OTk4LCAxOTQ5MTIsIDEwNjczLCA2ODc3OSwgNzI0OCwgNjg3ODYsIDQzNTE1LCAxNzgxLCA1NDk2LCAzNjI3LCA2MiwgCisgICAgMTY0OSwgNjc4NzYsIDk2NCwgMTIxMDM0LCA2NjQwMywgNzgyMjYsIDY2MzkzLCA5Mjg5NywgNzAzNTUsIDY2NDA5LCAwLCAKKyAgICA4MzM5OCwgNDM2ODksIDEyNzkxMSwgMTMxNDIsIDc4ODEyLCA0MjQxNSwgNjY1NzUsIDQ1NDIsIDY5OTA5LCA0MzU0NywgCisgICAgODMwMjgsIDAsIDc2NzcsIDI5OTEsIDQ5NDYsIDQyNDU0LCAxMTU2NSwgNzk0OSwgMCwgNjk3NTksIDExMzQxLCA0MjQ5NCwgCisgICAgMzA3MywgNjU2MjUsIDk3MTQsIDExNjkyLCA0NjU3LCAwLCA3MDgxMCwgNjQ3OCwgOTg5OCwgNDM2NzMsIDY1MjM3LCA2MjQxLCAKKyAgICA3MTA2LCA0ODc3LCAxMjkxMDgsIDYyMzgsIDAsIDEwNTQ4LCAxMjcwNDksIDQ0MDksIDAsIDAsIDY0Nzk4LCA3MDgwNSwgCisgICAgNTM0NiwgMTI4MjQwLCA5NDA0NywgNjIzNywgNDg3NCwgNjY4NTEsIDkxNzYsIDkyODgyLCAxMjExNTMsIDY1MjMxLCAKKyAgICA2NTg4NCwgMTI2NzgsIDc4NzQ4LCAxMTg5MTIsIDExMzc4LCA0NDAxOCwgNDI3ODUsIDI0MDgsIDMyNTEsIDExMjAzLCAKKyAgICA5ODMxNTksIDU2ODUsIDAsIDI0NjEsIDExMDUyLCA3MDkxLCA1MzQyLCA4MzE3LCAxMjE0NDYsIDY4MTYzLCA1MzQwLCAKKyAgICAxMjA1NTksIDEyNzgyMCwgNDM2MzUsIDczOTI4LCAxMjUwMDEsIDcxMDY5LCA4MzMxOCwgMCwgODMzMTcsIDY1NDgyLCAKKyAgICAxMjEzOTQsIDkxNDIsIDAsIDY4NTA2LCAwLCAxMDkzOCwgMCwgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAxMjY2NDgsIAorICAgIDcyNDM4LCA1MjksIDg1ODAsIDEyNzQ5MCwgMCwgMTA1ODYsIDEwNzkwLCAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgCisgICAgNjg3NDQsIDk4MzgyNSwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDY3ODIxLCAxMjEyMDAsIDExMzc2LCA3NDM3OSwgMTA3MjEsIAorICAgIDY3NjY0LCAzNDM4LCA0MjA5NywgNjg4NjIsIDExMDg0LCAzMTk0LCA0MTg3MCwgMjY2LCA3ODMwNSwgMTIwMTgzLCA0MTg3MywgCisgICAgMTIwNTc1LCAxMTMyNCwgMTIwNTMxLCAwLCA4NDIwLCA2NDkxOCwgMTI4ODM5LCA0MTg3MSwgNDEzMzgsIDM3MzQsIDc3MzQsIAorICAgIDQzNjgzLCA4NzUwLCA2NjYwNSwgNjYwMTEsIDkyNTE0LCA0MDk2NSwgMTI3OTM3LCA5ODMyMTYsIDUxNjEsIDEwNTcyLCAKKyAgICA5MTc1NTgsIDQyOTA2LCAwLCA2NDM0OSwgNzI4NywgNDIxNjIsIDEyMDQwNiwgOTgzNjQzLCAxMjY2MDUsIDExMTY3LCAKKyAgICA2OTIyMCwgMTIzNTksIDQzNDI5LCA0MTM2OSwgMTY5NywgMTIxOTEsIDAsIDY4NjMzLCA3Mjg2LCAwLCA2ODYzNSwgMTAwMzEsIAorICAgIDExMzc2NiwgOTg3MCwgNjc3MjYsIDg2MjAsIDY1ODI0LCA5MTc4NTUsIDExOTM4LCAxMjEzMDgsIDcyODUsIDk4MzU1NywgCisgICAgMTE5NTc3LCA0MjY3OCwgNjY4NDIsIDQzNjc3LCA0MTU4MywgMCwgNjU3OTksIDkyNjIzLCAwLCAxMjkxNjgsIDEyODI2NywgCisgICAgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCA2ODYyNCwgNzAyODAsIDgzMiwgMTIwNjkzLCAxMjA3NzAsIDc4NDczLCA2NjAwNywgCisgICAgNzg0NzEsIDY1NzAzLCA3MTI1NiwgMTI4NTE3LCA0MjczMiwgNTE4MCwgOTI2OTksIDQxMzk1LCA0MTUzMCwgMTE2OTEsIAorICAgIDY0NzczLCA5MjIxNCwgNzQwMDIsIDEyNzc5MCwgMTIwNTQ4LCAxMjg2NDUsIDYzNDgsIDI0MywgMTMyMDAsIDEyMDE2MCwgCisgICAgNjAyNCwgOTIzMDksIDk5NzksIDEwMDM3LCA0MTUyOSwgMTA2NDgsIDg1MzgsIDQzNjg3LCAwLCA5MTc4NDQsIDQyODUsIAorICAgIDY2MTk1LCAxMjEzNzAsIDQyMzAsIDkyODg2LCA3MzY3LCA0MzI1NiwgOTIzNTMsIDc1NjMsIDQyMzc2LCA5ODMyNzEsIAorICAgIDY4NDQyLCAxMjA1MTIsIDAsIDAsIDIxNCwgMTI4NTc4LCAwLCA3NDg1NiwgNjU4OTMsIDEyMjA4LCA5OTczLCAxMjgzODYsIAorICAgIDY2MzExLCA2NTU4OSwgMTI4Mjc3LCAyNjAzLCAwLCA3MDE1NSwgNzg2MjIsIDcwMDQ3LCAxMjcyNzMsIDYwMjIsIDE5NTAyMywgCisgICAgMjg4NCwgMCwgMTE2MjAsIDAsIDQzLCAxOTUwMjAsIDEyNjgyLCAxMDE2LCA0MTEwNywgMCwgNDExMjEsIDM4ODUsIDkyLCAKKyAgICA2NTQ1NiwgNjQ2MDgsIDAsIDc0ODAxLCA3MDg1NSwgMjA3NCwgMTEzNzQyLCA3ODI4MywgMCwgMTI0NTMsIDcwODQ3LCAKKyAgICA5ODM4MjYsIDc0MjQxLCAxMjY1NjgsIDY3OTEsIDEyNDU3LCA3ODI2OCwgMCwgNjYyNzgsIDAsIDc4Mjc5LCAwLCAwLCAKKyAgICA5MjM1OCwgNjY2MzcsIDc5OTUsIDg3NTksIDQzNDIxLCA3ODI3NywgMTI0NDksIDEyODU1MiwgNzEyMjQsIDQzODY4LCAKKyAgICA4NzUyLCAzMTk3LCA0NzIwLCAxMDE2NSwgMTEzNzY1LCAxMTkyNDksIDExMzcxNSwgMTE1OTUsIDY0ODkzLCAxMTg5MDUsIAorICAgIDQzNDM1LCAxMjQ5NjQsIDEyNTAzMCwgNDk5MywgMCwgNjE2OCwgMTA5MzQsIDE5NDYsIDc0MSwgMTIwNjUwLCA1NDk0LCAKKyAgICA0NjM5LCAxMjc1NTksIDE5OTAsIDExMTA3LCA0NDk4LCA3NDE2OSwgNjc3MzYsIDgzMjczLCAxMjcyNzIsIDY5NzM0LCAKKyAgICAyOTYwLCA3Mzc3OSwgMCwgODk2OSwgMTI4MTE3LCA0MzQyNCwgNzM5NTksIDEyNjQ2NCwgMjk1MCwgMTE5NTc5LCA2MjEwLCAKKyAgICA2NTc1MywgMzcwLCAxMjEzNjAsIDAsIDAsIDQ5NTMsIDE5NTAwOSwgMTIxMDU0LCAxMTM3MDgsIDAsIDY5MjMwLCAwLCAKKyAgICAxOTUwMTAsIDY1Njg4LCA3NDk1MSwgNTA2MywgMzUxNywgMjk2NCwgNDM2NjMsIDkxNzc2MiwgNjM0NCwgNzQ3OTEsIAorICAgIDEwNTY2LCAxMDE0NCwgNjYzMzMsIDgyNTIsIDcyOSwgNjYwMTYsIDc4MjUzLCAwLCA3MTMxNywgNjQ5MjMsIDEyMDU3MSwgCisgICAgNDM2NjksIDkwMzIsIDc4MjYzLCA3ODI2NCwgMCwgNDEyMTUsIDAsIDY1ODgzLCAwLCA5MTc3NzQsIDc0OTE0LCAzNzYxLCAwLCAKKyAgICAwLCA3MDA2OCwgMTIwNDA4LCAxMjkxMiwgMTE5MDEyLCAzODUwLCAxMjgxOTEsIDk4MzI1NiwgMTI4Mzg5LCAwLCAwLCA5MDgsIAorICAgIDAsIDg2MTEsIDEyMTM4NCwgMCwgNzQ2NDIsIDQzNjkxLCA0MTE5NywgMCwgODk3OCwgMTIwNTQwLCAxMTkxMzUsIDQxNTg2LCAKKyAgICAxMDUyNywgNzA0MjYsIDkxNzg0OCwgMzg0OCwgNzg3MzksIDc0OTE3LCAxMjc1MzYsIDY1MjQxLCA1MzM2LCA3NDg4MywgCisgICAgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgOTgzMjU5LCAxMjcxNjMsIDY4MTkzLCAzNDcsIDAsIAorICAgIDkxNzU0NCwgNzg3NzUsIDY0Njc1LCA0MTU4MiwgNzg3NzQsIDc4NzQ0LCA2NTU3OSwgMTI5ODAsIDY4MDQ2LCAxMjE0MywgCisgICAgNjk2NTcsIDc4NTEyLCAxMjg0OTMsIDExMTUzLCA0MTgwNCwgNzg1MjMsIDAsIDc4NTI1LCAwLCAxMjg4NTksIDQxNTg0LCAKKyAgICAxMDY4MSwgMCwgMTIwOTc5LCA3MzkzOCwgNzM3ODEsIDEyODAyMiwgNDgwMCwgNjY2NjEsIDAsIDY2MzA2LCA2NDcxNSwgCisgICAgNjYzODQsIDk1MTgsIDY2MDksIDEwNDM0LCA3MDg0NSwgMTEzMTksIDEwOTcsIDEyODk2NCwgOTE3NTY0LCA0MTczMCwgCisgICAgMTI5MTgxLCAxMjE1MDEsIDczODQ3LCA3NDg0NSwgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMTk0NzgwLCAxOTQ3NjksIAorICAgIDEyMTQ5OSwgNDEyMDMsIDEyNzA1NiwgMTMxMTAsIDQxNzI2LCAxOTQ4NTYsIDY3MDc3LCAxMDAwLCA2OTY1MSwgMTI3NTA5LCAKKyAgICA0MTE0MCwgMTIwOSwgNzM5NzgsIDEyNTA1OSwgNzM3NTAsIDEwNzMsIDYzMjEsIDc3ODc4LCA0MTEzOCwgOTgzOTY4LCAKKyAgICA2ODIxMywgNzgwMDAsIDEyMTY3LCAxMTE1LCA0MTYwNSwgOTc5NCwgMTE5OTA0LCA2NzY3MSwgNTUyNDgsIDEyMjM3LCAKKyAgICA3ODc4NywgNjYzMTQsIDY1ODcsIDkyOTAsIDc4NzgyLCA3ODc4MywgOTIzMSwgNzg3ODEsIDI5NTksIDc5MjYsIDAsIAorICAgIDkxNzYwMSwgMTI4ODMzLCA2NDM5OCwgNzExMjQsIDExOTk3MCwgMTIzMTEsIDExOTE4MSwgNzg3OTYsIDY4NzY4LCA3ODc5NCwgCisgICAgNzg3OTUsIDY4NDM0LCA3ODc5MywgNjY2NzAsIDExMzc5NywgMTI4NTc5LCAxMjI5MCwgMTIwMTY5LCAxMjkwOTMsIAorICAgIDExOTg3MywgNDIxNDIsIDk5NjgsIDgyMDUsIDAsIDUxMzEsIDExMzY5NCwgOTYyNywgNDM2NDYsIDc4NTQyLCA3ODUzNSwgCisgICAgOTgzMjEyLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIDExOTk5MSwgMTI3MDEsIDc4Mzc2LCAxMTMwOCwgCisgICAgMTE5OTk1LCA5ODM0OTMsIDExMzcwMiwgNjY4MzYsIDY1MzA1LCA2NTEwMCwgNDAzMSwgNDI3OTQsIDEyMDAwMywgNzA3NSwgCisgICAgODE1NCwgMTE5OTg1LCAxMjAwMDcsIDQxODE3LCA3MzkzNCwgNDIyNzUsIDEyMDAxMSwgMTIwMDEyLCA3ODUyNiwgMTIwMDE0LCAKKyAgICAxMjAwMTUsIDYwNDEsIDEyMDUyMCwgNDE4OTksIDk4MzI4OCwgODAwMiwgMTI4MzY3LCA0MzY0LCA3MzczMiwgOTgzNTcwLCAKKyAgICA2NDMzMiwgMTIwOTc2LCA3ODEzLCA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCA2ODI0NiwgNzI3OSwgCisgICAgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMTIxMTUyLCAxMjEzODEsIDk2NjAsIDkxNzkyOSwgMTMwMTIsIDQ1NzEsIAorICAgIDkxNzU4OCwgMCwgMTE4OTQwLCAxMjA3OCwgMjk3MCwgMTI5MTIyLCAxMDkzMywgMCwgNzc4NzAsIDEyMTI0MywgNzc4NDEsIAorICAgIDAsIDQxNTk5LCA3MDE1OSwgMTIxMzQyLCAxMjA4ODUsIDEyOTUwLCA5MjE2MCwgMzQ4NiwgOTgzOTczLCA3ODMxMSwgNDIzOSwgCisgICAgMTI4MDczLCAxMjc3OTksIDY2NTExLCA2ODA2NiwgMjYzNywgNjQ2MjksIDg0NjAsIDY2ODM0LCA4NDc2LCA5ODM5NzUsIDAsIAorICAgIDY4MzEyLCA3ODQ4OSwgNjU2NzMsIDEwMTksIDc4NDk1LCA0MTQ4LCAwLCAxMjI4OSwgMCwgNDMxNiwgMCwgMTMxMTksIAorICAgIDg0ODgsIDU0MTIsIDY2MjQzLCA5OTM1LCA5Mjc3NywgNzM4NjQsIDk4MzIwMywgNDE3MzQsIDgyMDYsIDc0MDgxLCA5MTYzLCAKKyAgICAzMjg2LCA5MDcyLCA1ODY3LCAxMzMwMiwgNzYyMiwgNzEyMCwgNDE3MzYsIDkyNTQ2LCA0MTczMSwgMCwgNzQwMCwgNTQxNiwgCisgICAgNjg2NjMsIDExODkyNCwgMTA4MTcsIDAsIDQxNTM5LCAxMjcyODQsIDY2ODUzLCA3Mzk2MywgNDE4NTUsIDQxODY3LCAKKyAgICA2NTU2NCwgMTEyNzcsIDY1ODkyLCAxMTUzNiwgMTA2MjAsIDkyMjcyLCA3MTE1LCA2NjAzMCwgNzM5MzIsIDU0OTgsIAorICAgIDYzODc2LCA0MTUzNiwgMCwgNjgyMDQsIDkyNTg3LCAzNDU5LCA4OTk3LCAxOTQ3MTksIDkyNzE0LCAwLCAxMjc3ODIsIAorICAgIDkyNTEyLCAwLCA2NjM3NywgNjk3ODEsIDAsIDEyNDk3MiwgNzg1MTEsIDMxNjEsIDI5NSwgNzEyNTcsIDAsIDkyMjIzLCAKKyAgICAxMjEzMjgsIDc4NzQyLCA5MDE2LCA0MzQ1NCwgNjM5MDMsIDYzOTAyLCA0MzUwMSwgNjgyMTAsIDM5NzEsIDk4Mzk1OSwgCisgICAgNzAwNjMsIDI5NTIsIDc4NzY1LCAxMTAzOCwgMTA5MDEsIDYzOTAwLCA2Mzg5OSwgNjM4OTgsIDY4MDk1LCA2NjcsIDEyMzMyLCAKKyAgICA2Mzg4NywgNjA4NiwgNDE3MjIsIDAsIDUxNzIsIDAsIDk4MzI4MCwgNDE1OSwgOTgzNTYyLCAwLCA5ODE1LCA2Mzg4NCwgCisgICAgMTk5MzQsIDYzODgyLCA0MTE5OCwgODU1NSwgNjM4NzgsIDYzODc3LCA0MjQ2MCwgNjA1MCwgNDI3MDgsIDYzODgxLCAKKyAgICA2Mzg3MiwgMTIwOTQxLCA0MjQyMSwgMTk1MDM1LCA0MTcyMywgNjM4NzUsIDYzODc0LCAxMTQ2MCwgNzQzMiwgMTkxMywgCisgICAgNDE5MTMsIDYzODUyLCA2Njg2OSwgMTI4OTcxLCA0MjM0OCwgNzM4OTIsIDY3NTIsIDQ0NiwgNDE5MTEsIDEyNzkwMSwgCisgICAgNjM4NTEsIDYzODUwLCA0MTkxMCwgMTI4NjM3LCA2Mzg0NiwgMjk3MiwgMTI5MzIsIDcyNjIsIDY5OTY4LCA2Mzg0OSwgCisgICAgNjM4NDgsIDYzODQ3LCAxMTM3NDksIDY1NzAsIDgzMDIsIDcyNTksIDYzODQyLCA0MTc4LCAxMDc0NiwgNzI1MCwgMTMyMTQsIAorICAgIDEwMDQxLCA4MTA1LCA2Mzg5MiwgMTI3NzgwLCA2OTk2OSwgMTEwNSwgNDE4MCwgMTI3Nzg2LCAxMjA5NCwgOTQ5NywgMCwgCisgICAgNjM4OTEsIDYzODkwLCA2Mzg4OSwgNjM4ODgsIDU1MzgsIDk5ODcsIDAsIDkyNzM5LCAxNjc4LCAxMzI3NCwgNTUyLCAKKyAgICAxMTg4MzQsIDQ0MDEwLCAxMDc4NSwgMCwgMTExOTIsIDQ1NTcsIDc0NDU5LCA5MTU5LCAxMDE3MSwgMTMxMjUsIDYzODYwLCAKKyAgICA1NTQwLCA2Mzg1OCwgNjM4NjUsIDI4MSwgMTMyNDIsIDYzODYyLCA3NDE1NCwgMCwgNTUzNiwgNjU1NjgsIDk1NzQsIDEzODgsIAorICAgIDcxOTAyLCAwLCAxMDc3LCAxOTUwMDAsIDY1MDk5LCAxMTUzMSwgNTgzNCwgMCwgMCwgOTE3Nzg5LCAwLCA0Mjc3MywgCisgICAgMTIxMzMxLCAwLCAwLCAxMTkyMjAsIDEyMDkxMiwgMzY2MywgMTI3MDI3LCAxMTEyLCA3MDMzNSwgODY4NiwgMTI2NjExLCAKKyAgICA1MzM0LCA2NTA4MSwgNDMyNDksIDc0Nzc4LCAxMjc5NjgsIDExMDc3LCAxMjUwMTcsIDY1MDksIDAsIDUzMjcsIDc4Nzc2LCAKKyAgICAxOTkwNywgNjM4NjksIDM0NzgsIDc1ODMsIDc2NzksIDI5MDMsIDAsIDMwMDEsIDExNTgsIDg3NDUsIDQzNzQ2LCA3Mzc0OCwgCisgICAgNjM4NjYsIDc4NjI2LCAxOTE1LCA0ODQ2LCA2Nzc1NSwgNjYzNzEsIDExODk4NCwgNDIxMDUsIDI5OTAsIDEyMDEyOCwgODA1LCAKKyAgICA2OTIzOCwgNjQ0MzgsIDEyMDcwLCA4NzYwLCAxMTE3LCAxMTM3NTAsIDEyMjEyLCAxMjAxMjMsIDY1MTc0LCA0MjM1NywgCisgICAgNjM4MzUsIDYzODM0LCA5ODM5NDcsIDc4MjQwLCAxMjIyNSwgNjM4MzgsIDYzODM3LCA5ODM4NTMsIDcwMTczLCA2MzgzMywgCisgICAgNjA0MiwgNjYzNjAsIDgwODMsIDEyODE2NiwgOTgzNzMzLCA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgOTgzOTA0LCAKKyAgICA1MjI3LCA5MDQ3LCA2MzgyMiwgNzQ3OTcsIDYwOTEsIDAsIDEwNjkxLCA1NjAsIDU2NDMsIDgyMjYsIDExOTU3OCwgNjM4MTIsIAorICAgIDYzODExLCA2MzgxMCwgNjM4MDksIDIyODksIDYzODE1LCA2MzgxNCwgNjM4MTMsIDYwNDcsIDE1OTcsIDEyMDE0MywgNzgwLCAKKyAgICAyMDYsIDcwMTI2LCA0OTM2LCA2NTE0NywgODE2OCwgNjM5MzAsIDIwNzYsIDEwOTMsIDk4ODIsIDYzOTM0LCAyMDgyLCAKKyAgICA2MzkzMiwgNzUwNTAsIDYzOTI5LCAzNTQ2LCAxNjA1LCA3NzkzNCwgOTgwNiwgNDM0NzIsIDc3OTMzLCA4NDAwLCAxMTM0MywgCisgICAgMjA4NiwgMCwgNjM5MjYsIDI5ODQsIDU5NjgsIDkyODcsIDAsIDQ2MTgsIDQyMjA5LCAxMTEzNywgMTMxNjksIDUyOTAsIAorICAgIDIwODksIDE2OTUsIDEwNzQzLCAxMDg4LCA2MzgyNSwgNzI2OCwgMTA4NCwgMTA4NSwgNjM4MjksIDEwODMsIDEwMTMxLCAKKyAgICA3MjgzLCAwLCA2Mzk3MCwgMTIxMTY1LCAxMDkyLCA0NzU0LCA3MjczLCA1MjUyLCA0NDAxNiwgNDM2MjcsIDEyNzkyMSwgCisgICAgMTI4OTIwLCA3NDA4LCAxMTgwOSwgODMyMjAsIDEyMTE4MSwgMCwgMjk2NSwgNzI1OCwgODgwOCwgNjY1NzIsIDEwODksIAorICAgIDQxODcsIDYzOTM3LCA0MjExOSwgNDIxMjAsIDExMTA2LCA5NDAsIDU3ODcsIDEwMDk5LCA2MzkzOCwgMCwgNzQ0OTQsIAorICAgIDEyNDYzLCAyOTk0LCAxMjUxMzYsIDExODgyNywgNjg1MjIsIDk2NjQsIDcwODM0LCA3Nzk0MCwgNjc4OTIsIDc3OTM4LCAKKyAgICA3NDM0MywgNjczNzAsIDAsIDY2MCwgMTAxMjcsIDY2NiwgOTAyMiwgNTUzMiwgNDM2NjcsIDU1MzMsIDEyNTgwLCA3ODUwNywgCisgICAgNjExOCwgMjIyLCA5NzksIDM4ODQsIDk4MzM5NCwgNzQxNTEsIDgzMjI3LCA2NTAyLCA5ODM4NTUsIDExMDg1LCAxMjEyNjEsIAorICAgIDYzOTUxLCAxMjQ2NSwgOTE3ODYyLCAwLCAxMjg3ODIsIDYzOTQ2LCAxNzA3LCA2MzkyNCwgMTI0NjEsIDYzOTUwLCA2Mzg5NywgCisgICAgNjM5NDgsIDYzOTQ3LCA2Mzk0NSwgNjAzOCwgNjM5NDMsIDYzOTQyLCA2NDY4NSwgNjM4OTUsIDY1ODM4LCAyMjc2LCA3Nzc2LCAKKyAgICA5NDA3NiwgMTIxMDg2LCA5MjQ2NCwgMTIwNDQ0LCA2OTczMCwgODAxLCA0MzE2NSwgMTY5MCwgNjM5MTksIDYzOTE4LCAKKyAgICA2MzkxNywgMTMyNzcsIDQzNjU5LCAxMjk1MSwgMTIwNjM4LCA5OTA2LCAyMDU0LCAyMzM0LCA3ODUxNSwgNjM5MTYsIDU0ODMsIAorICAgIDYzOTE0LCA2OTczNywgNjM5MTEsIDU0ODQsIDYzOTA5LCA2MzkwOCwgMjUzOSwgMTIwMTAyLCA0Mzk4MCwgNTQ4NSwgMCwgCisgICAgNDI2OTcsIDkwNjEsIDU1MzQsIDEwNjcyLCA0NTAyLCA2ODA1NywgMjUzLCAwLCA2ODIwOCwgMTIwNDM5LCA5MjAzLCAKKyAgICA3NDIzMSwgMCwgMTE1MzAsIDY4NjM0LCA2ODY2OCwgMTIxMjQyLCAxMTEyNywgMCwgMTA0NzQsIDQzNDI2LCAxMzI1NywgCisgICAgNDIzNTQsIDEyODA5OSwgOTgzNjk4LCA3MDA0NCwgMTk1MDY1LCAwLCA4NDEzLCA2Njg0MSwgMCwgNTY5MywgNzI3MiwgMCwgCisgICAgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzQzNTAsIDE5NTA2MywgMCwgMCwgMCwgMTI2NjM5LCAxMjAwOTcsIDAsIDk0MDc4LCAKKyAgICA2Njg0MCwgMTI3MTY1LCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIDQyOTEzLCA3ODM0NywgNzI3MCwgMCwgNjY2MDYsIAorICAgIDY2MjgsIDEwNzYsIDc0MzMsIDE0MzYsIDczODQ0LCA1NTIyNiwgMTI4MzUzLCA2Mzk4MiwgNzM5MywgMTI4MDcsIDQzNDEzLCAKKyAgICA2MzkwNiwgMTU5OCwgNjM5MDQsIDcxMTg3LCA3MDM5MywgNDE3MjksIDQ0MjMsIDEzMDcsIDExMzY5MiwgMTA1MTUsIAorICAgIDQxNTg5LCAxMjg2OTgsIDEyODkxOCwgNjIxOCwgOTI5MTcsIDE0MzAsIDAsIDEyNjUxMywgMTIwNjA2LCA3ODc1NCwgNTQxMywgCisgICAgNzYxOSwgMzI1NSwgMzQ5MywgNzQwMzIsIDExNTQ5LCAxMDczNSwgNDE3NDMsIDczOTM3LCA2ODAxLCA5ODM2MzMsIDQ1MTgsIAorICAgIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgNjcwOTMsIDI3MTAsIDk4MzU5MywgNjYyNzcsIDQxNzI0LCA2NzcxNiwgCisgICAgNDMwNzMsIDQxNjkwLCAxMjQ3OSwgOTgzNjM1LCA4MzgwLCAxMjEwNzEsIDcxODUyLCA3MDA0NiwgMTYyOCwgMTIxMjI5LCAKKyAgICAxMjg4MTcsIDEyOTA2NywgNjUyNjIsIDYzMzMsIDEwNzgzLCAxMTE3MiwgMTIxNDczLCA2Mzg1NSwgNzA4NDAsIDExMzY3OSwgCisgICAgMCwgNTMzOSwgNzQzMjMsIDEyMDk0NiwgMTMwMDQsIDY2ODQzLCA0NDU3LCAwLCAxMjc3NTYsIDE5NDgxOCwgMTI3MTE2LCAKKyAgICA1Njg0LCA4Njc4LCAxMDkxNCwgNDM2MzIsIDU2ODksIDY1ODA3LCA3MDgxNCwgNjg0NjQsIDEyNjMzLCAxMjg3MCwgNjk3MDUsIAorICAgIDY1MTgzLCA1Njg4LCAxMTkyNiwgNjAzMywgNjMxMCwgNTY4NiwgMTE5MDc2LCA3NDI1MSwgMCwgMTIwNjQ3LCAxMjg5MzAsIAorICAgIDUwLCAxMDU1OCwgOTg3MSwgNDI2MTIsIDQzNjU1LCA3NDQwMywgOTgzODE4LCA3NDI4NCwgNjY0NjgsIDY2OTA1LCAxMzI1OSwgCisgICAgNDQ0OCwgMTE5MTUwLCAxMjE0MDYsIDgzMzQ5LCA3MDA0MywgMTMyMSwgMCwgMTA2NDAsIDExNTM5LCAxMTUxLCAxMjExODYsIAorICAgIDkxNzYwNywgMTI0OTU4LCAxMjcwNzksIDcxMTA2LCAxMjc4NTIsIDAsIDAsIDk4MzA3NSwgMTI1MDEsIDY0NjA0LCAKKyAgICAxMjg2NTcsIDExNTI3LCAxMTg4NzAsIDg4MTIsIDk4MzcwNiwgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIAorICAgIDIxMDUsIDgwODcsIDc4MTYzLCA2OTYzMiwgOTg5NCwgMTI3MTM3LCAxMjc4NTYsIDY5OTk1LCA0NjM2LCA1NTI2MiwgCisgICAgNzg1MTMsIDQ1MTUsIDIzODIsIDAsIDEyNzA1NSwgOTgzNjk1LCAxMTM3ODAsIDAsIDExODk2OCwgMTIyNzcsIDEyMTIzOSwgCisgICAgMTE5OTUsIDkyNTUzLCAxMjEwMDYsIDEyMTU4LCA3MDE3MCwgODc0MSwgMTAxOTcsIDY4NzgwLCA5MjQyNiwgMTIxMjg1LCAKKyAgICA2NTMxLCA4MzA1MSwgMTI3ODQ2LCA0NzMsIDQzNDE1LCA5MjkzNiwgOTgzNjUwLCAxODczLCAxMDg3LCAxMjQ5NjYsIDAsIAorICAgIDc0MjgwLCA3ODUyNywgNjY0MzksIDQzMjE4LCA5ODMxMjMsIDE5NDcxNiwgNzIzNywgMTI1MDQsIDcxMTEzLCAxMjY1NTksIAorICAgIDEyODc0OCwgMTIwODg3LCA5NDg5LCAwLCA3MDg0MywgNDM4NCwgNzQyMjAsIDYzODQ1LCAyMDU4LCA2OTc0MSwgMTMyOTUsIAorICAgIDQzMTkxLCAxMjgwMzAsIDEyODU3MSwgMTE1NCwgMzg1NywgMTIwNSwgMCwgMCwgNjA1NSwgMTI5NTgsIDEyMDcwNiwgCisgICAgNzQxNjgsIDEyODM4OCwgNzA4NDYsIDQ0MjEsIDEwNTkyLCAwLCA0OTUsIDY2NDAwLCA0MTcxMiwgNzk4MywgNzA4MzMsIAorICAgIDkzOTk3LCA5ODMzMzIsIDYzNDcsIDc4NzE1LCA3NjU0LCA0MTcxMCwgNDE5NiwgMCwgNDM3LCA0MTcwOSwgNzM3NzIsIAorICAgIDcwODMyLCAwLCA5NDY1LCAxMzI5MCwgMTE5MTgwLCA0OTk3LCA2NDMwNiwgMTIxMzA5LCAwLCA0OTk5LCAxOTQ2NDIsIAorICAgIDY3NDAxLCAxMjY1ODIsIDQ3MTEsIDEyMDc2OSwgMTIwNjAyLCAyNzM5LCAwLCA4MDQ0LCA3NDMxMywgMTk0NjQzLCA0MTc4OSwgCisgICAgMTI4MTQyLCAxMDgwOSwgNjYyNzksIDAsIDAsIDE3NzksIDY2MDAsIDY2MDEsIDQxNTQzLCA1MzI1LCA2NDIsIDY0MTg3LCAKKyAgICAxMzA1OCwgMTIwNDQ5LCAxMjg3NSwgOTgzODA0LCA5MjE4NiwgMTMyMjksIDcxODQ1LCAxMDU3NSwgNDMzOTksIDE5NDU3NywgCisgICAgMCwgNDE3OTEsIDExMDQsIDAsIDk4MzcyNSwgMTA2NTUsIDk4MzMzNCwgOTgzNTYxLCAxMjAxNjQsIDAsIDEwODIsIAorICAgIDEyMTAyNCwgODQyOCwgNjU2OSwgMCwgMCwgNzg1MzQsIDY5ODQ5LCA2NzgzLCAxOTQ2NzEsIDEyOTkzLCA4MDQ5LCA0MTU0OCwgCisgICAgNDQwMjEsIDY0NTgsIDY0NzI4LCAxMjg4ODIsIDQ3NjEsIDYzODI4LCA0NzY2LCA2NDYyMywgMTI3MywgNDM0MDcsIAorICAgIDEyMDY3NywgMTE4ODc2LCAxOTUwNDUsIDY5MTIsIDEzMTMsIDYzMjIsIDEwNDgzLCAxMjg2MjcsIDQxNTQ1LCAxMjY0NjUsIAorICAgIDkyNDQ5LCAwLCAxMTIxNiwgMTIxMzA3LCAwLCA3ODYyNCwgMzQ4NCwgNzQzMzcsIDAsIDAsIDg1MDMsIDUxMjIsIDQxNTI3LCAKKyAgICA3MTkxMCwgNjYzMjAsIDcwMTYxLCA3NDkwNywgMCwgMCwgNDE1MzcsIDY2NDUzLCA4MzAzLCA4MjgyLCAxMTgxNywgNzM4NTcsIAorICAgIDEwMDAzLCA3Mzg1OSwgNjU5MDQsIDczNjMsIDE2ODYsIDAsIDcwMTE1LCAxMTQ2NywgMzY2NCwgNjU5MjEsIDY0Mjk5LCAKKyAgICAxMjQ5MzksIDEyODQ2MiwgMTI4MDAxLCA0MzI0LCAxMjYsIDQyMjQ2LCA3NTAzMCwgNjk5ODQsIDY3NzI1LCA2NTkyNiwgCisgICAgNzc0NCwgNjg4NTksIDc0Mjc3LCA2NjI4MywgNzgwNTIsIDQzODE3LCA2OTY2LCA0MzgyMiwgODEzNiwgMCwgNjU2MDAsIAorICAgIDE2MzMsIDAsIDEyNjYxNCwgNDc2MiwgMTEwMywgNzA4MjcsIDcwMTU3LCA0NzY1LCA5ODM0OTQsIDEzMDc4LCAwLCA0NzYwLCAKKyAgICA2MzgyNywgMjA1MCwgMTA4NzEsIDQzMTk5LCAxMTAyLCAxOTQ2NTIsIDQyMjM2LCAxMjg4NjcsIDEyNzA3MiwgMTE1NDYsIAorICAgIDc0Nzk0LCAzMzcsIDEyMTE5NiwgNDI1OTEsIDg2MjcsIDEyMjc5LCAxMTExLCAwLCA3NTA0NywgNDcwNywgNjgyMDYsIAorICAgIDEwMTQzLCA3ODgzLCAxMjE0NDQsIDc4ODAsIDQ1MjIsIDg2NDUsIDU3MDQsIDEzMDEwLCA2OTc5NiwgODMwNCwgOTI5ODIsIAorICAgIDE5NDY4OCwgMTE5NTc1LCAyMjkzLCA3MDE5NSwgNjY2NTQsIDEyOTA3NywgOTI2NzYsIDAsIDEzMDA4LCAxMjExOTQsIAorICAgIDQzODUsIDEyODczNiwgMTMwMTEsIDEyNTAwNCwgOTI1NjksIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgNzAzODgsIAorICAgIDk4MzI4MiwgNDE3OTMsIDY1NzYzLCA3NDIyMSwgNzA3OTAsIDQxNzkyLCA0Mjc3MCwgOTQwNTQsIDY1NzYyLCAxMTg4MjksIAorICAgIDQzODIxLCA1NzA5LCAxMjgyOTYsIDcxMDc2LCA0MzgxNiwgOTgzMDg3LCA5ODM4OTYsIDEwNzksIDM4NjcsIDU3MDgsIDAsIAorICAgIDAsIDQzNzk3LCA1NzA2LCA2NDc2OCwgNTcwNSwgODc5MSwgNDAwNSwgMTIxMDkxLCAxMDIzNywgMTA5OTEsIDEyODgxNiwgCisgICAgNDM0NTksIDkxNzMsIDkxNzU4MSwgOTE3NTgwLCAxMzE3MCwgMTI1NDAsIDEyOTE3OCwgNDI2MDUsIDEyMDc2NSwgMTI2NjE3LCAKKyAgICA2ODY0NywgOTE3NTcyLCAxMDA1OCwgNjgwNTgsIDc0ODY3LCA2NzczMCwgMTI3MDc4LCAzMzM5LCAxMTQ0OCwgMTEwNiwgCisgICAgOTE3NTkxLCA5MTc1NDAsIDkxNzU5MywgMzM0MCwgNzQwMTcsIDkxNzU4NiwgMTIwOTk0LCAxMjkxNDEsIDEyMDU0MSwgCisgICAgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIDkyMjI2LCAxMzI0NiwgODY0LCA5ODMxNzEsIDExODkyNiwgCisgICAgODk3MiwgMTE5OTE4LCA3ODQ5LCAxMjAwOTIsIDgzMTMwLCAxMzI0MCwgMTk1MDY4LCA1MTkyLCA0MzM4LCA2Nzk4MiwgCisgICAgMTA5NDgsIDY2ODI1LCAxMzE5OSwgOTI1NzUsIDEyMzYsIDEzMjA4LCAxMzI2MSwgMTMxODksIDEzMTg4LCA5Mzk5MywgCisgICAgNzE4NDcsIDc0NDAsIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAxMzE3OCwgNjM3ODIsIDYzNzgxLCAKKyAgICA2Mzc4MCwgNjM3NzksIDE1ODMsIDExOTkyMywgMTMyNjAsIDQ1NTAsIDEyMDU5OCwgNjQyMDUsIDEyOTEwNywgNzEwNzEsIAorICAgIDQxNTIyLCA0MTUyMywgNjg1MjMsIDk4Mzc3MiwgMTE4OTIzLCAxMTM1NCwgOTQwNzEsIDAsIDQyNzk1LCAwLCAxMTkxOTUsIAogICAgIDExMzk0LCAxOTQ2NDYsIDEzMjM2LCAxMzI3MiwgMTMxOTQsIDEzMzQsIDY5OTI2LCA0NDc5LCAxMTc4LCA2NTU4NiwgCi0gICAgMTIwNjYzLCA2NjY4MSwgMTE5MTkzLCA0NjAxLCAwLCAwLCA5ODM3NjUsIDAsIDAsIDE5NDY1OCwgMCwgNjgwOSwgNjM3ODYsIAotICAgIDYwMzEsIDAsIDYzNzkxLCA2Mzc5MCwgMTE0NSwgNjM3ODgsIDc5MTAsIDYzNzg1LCA0MzE1MywgNzU0LCAxMDE5MiwgCi0gICAgMTMxMDUsIDgxODMsIDEyMDc0MSwgMjAzNywgMCwgMCwgMTA3NDcsIDEyNSwgMCwgNjQ4OTAsIDAsIDk4MzEzMSwgMCwgCi0gICAgNDE3MTksIDYzNzU4LCAzNTIzLCAxMDc0LCAxMzI1OCwgOTUzNiwgNzQwNzcsIDAsIDQ0MjcsIDc0MjQyLCA2Mzc1NywgCi0gICAgNDMxNDUsIDEyMjE3LCA2Mzc1NCwgNDE1MzIsIDEzNDksIDYzNzUwLCA2Mzc0OSwgMCwgMCwgMCwgNjM3NTMsIDYzODAyLCAKLSAgICA0MTA4NCwgMTIwNjIyLCA2ODEzMywgNDE5MzAsIDYzODA1LCA2MzgwNCwgNDM2MzIsIDYzODAxLCA0MTA4MiwgODE0MCwgCi0gICAgNjM3OTgsIDYyNjAsIDAsIDAsIDk0MDc0LCA2Mzc5MywgMTE5ODgsIDM4OTgsIDEyODI0MSwgMTAyMDEsIDEyMjM4LCAKLSAgICA2Mzc5NSwgNDIxOTQsIDEwMzY3LCAxMjUyMSwgMTA0MzEsIDQyMTE0LCA0MTkzMiwgMTA2OCwgMCwgMTI1MjMsIDEyOTQ1LCAKLSAgICA5ODMzMjksIDQyMjAzLCA3OTUwLCAxMDgwNCwgNjM3NzEsIDQyNzg3LCA0Mzg2LCAxMjIyNCwgNjk3MywgMjc5MywgMTI0NzUsIAotICAgIDAsIDAsIDYzNzY5LCA5NTMwLCA5ODMxMTksIDEyMjMyLCAxMzEzNSwgODU5NiwgNTY4MSwgNjM3NjIsIDQ1OTUsIDYzNzYwLCAKLSAgICA3OTIsIDAsIDY0ODAzLCAwLCA4NzQyLCAwLCAxMTA1MywgMTI4Nzk2LCA2Mzc0NCwgMTI4MTA3LCAwLCA3NTg4LCA2Mzc0OCwgCi0gICAgMTY5MywgNjM3NDYsIDQzMjA0LCA1MDU1LCA2ODQyNiwgOTE3ODUzLCAxMDkwLCAxMjA2NzksIDEyODM1NiwgMTE2NjUsIAotICAgIDc0MTMzLCA0NTU4LCA2NTY4NSwgOTUyMywgMCwgMCwgNzg2ODEsIDExNTEzLCAwLCA2MTU3LCA2Mzc3NSwgNjM3NzQsIAotICAgIDYzNzczLCAxMzE5MSwgMTIxNzAsIDM1MDAsIDMxMzksIDAsIDMxNzAsIDEyNDg1LCAwLCAxMDg3MiwgNzgyNzEsIDEzMDA2LCAKLSAgICA2NDQzMywgMCwgMCwgOTQxLCAwLCAwLCAwLCA2NTU0MSwgMTEwNjMsIDAsIDgyMjgsIDAsIDQyMDY1LCAwLCAwLCA5NDAzOSwgCi0gICAgMCwgOTI0NTUsIDczODYsIDAsIDY0NDQ0LCAwLCAxMTk4NjMsIDQzNjAzLCA5NDA3NSwgNjUzOTcsIDI4OCwgMCwgMCwgMCwgCi0gICAgMTAwMjUsIDY5OTE1LCAyOTE4LCAwLCA2NTMwMCwgMTE5ODcxLCA5ODgzLCA2NDcyNiwgMjc5MCwgNjUzOTUsIDM3OTMsIDAsIAotICAgIDEyNzgyOSwgNjUzOTMsIDAsIDc0MTM4LCAwLCAwLCAwLCA3NDEzOSwgOTI3MTIsIDY1Mzk0LCAxMTU0OCwgNTI3MCwgMCwgCi0gICAgNjUzOTYsIDAsIDY1ODEzLCAxMzI1NiwgMTI4MiwgMTIwNzcxLCAwLCAwLCAxMDg4OCwgOTgzNjA0LCA2NTI0MiwgMCwgCi0gICAgMzMzMCwgMCwgMCwgOTgzOTc0LCAwLCAwLCA3NDI1OSwgMzMwNCwgNDI3NTMsIDAsIDAsIDAsIDE2MjcsIDAsIDAsIDAsIAotICAgIDUzNzEsIDEzMTE2LCAwLCAxODI2LCAxMTg3OTQsIDAsIDQzMDk0LCA3MDAyMywgNDM2NTAsIDk0MDM3LCAwLCA5MDM1LCAwLCAKLSAgICAwLCAxMjgwMDUsIDAsIDkyMjA3LCA2ODEyNSwgMCwgMTY0LCAwLCA5NDA2NywgOTQwMDAsIDY5NTgsIDAsIDQzMTE2LCAwLCAKLSAgICA3MDAxOSwgMTMyNDUsIDAsIDAsIDEyNzM3NiwgMCwgNzAwMzEsIDEyNzc1NiwgMTI2NjYsIDEzMTc1LCAxMzIwNywgCi0gICAgMTIwNDE0LCA2NjAxNCwgMTIwNDI4LCA3NDQ3LCA1OTI5LCAwLCA2NTUwOSwgMCwgNzQ0OSwgMTEzMDYsIDAsIDczOTIwLCAKLSAgICAzMTgwLCAwLCA2MzgwOCwgOTA1NCwgOTcxLCAxMzA2MiwgMCwgMCwgNjUxOTUsIDEwMTY0LCA5MjI1MiwgNzQ0MjgsIDAsIAotICAgIDc4MTQ2LCA5MjYxMSwgMCwgMCwgMCwgMTAwNDUsIDEyODgyLCAxMzI3NSwgMTI4MTYxLCAxMTA1NywgMCwgMTMyNzYsIDAsIAotICAgIDQxNTI1LCA3ODE1MCwgNzI3MSwgMTE0NDQsIDAsIDAsIDAsIDEyMjI5LCA0MTUyMywgMCwgNDM0MTEsIDczNzUxLCAwLCAKLSAgICA2NDgxMywgMCwgMCwgMTA0NzYsIDM4NTgsIDAsIDM5MzIsIDY0OTU4LCAwLCAwLCA3Mzk4OSwgNjgxOTIsIDAsIDY5ODQ3LCAKLSAgICAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgNjU0NzQsIDQ3OTYsIDEyMjkyLCAxMjY1OTUsIDY1NDc5LCAwLCAKLSAgICA0MTc4MSwgMTA0ODYsIDQxNDgwLCA0MzAwMiwgOTg5OSwgMCwgMCwgNDA0LCAxMjgyMSwgMzc0MSwgMCwgNTc4OCwgODA5MiwgCi0gICAgNjgyMTIsIDQxMjIyLCAxODMxLCA2NjAyMCwgMzk4MiwgMCwgNDM4OCwgMCwgNzQ2LCAxMjA3ODQsIDAsIDAsIDEyMDE4LCAKLSAgICA2NTI5NCwgMCwgMCwgMCwgMCwgNDQyMiwgNDcwOCwgMzc5OSwgNzQyOTIsIDExOTM1NywgMCwgNzQ0MzAsIDAsIDExNzAwLCAKLSAgICA0Mzc0LCAwLCAxMjgxNzksIDEzNjQsIDAsIDgwMzgsIDAsIDkxNzU5NywgMTI4NjgsIDY5ODE0LCAwLCA2NzM1LCA3Mzk3OSwgCi0gICAgMTMxNzQsIDczOTY4LCAxMzIyNSwgMCwgNjk4MDgsIDY1ODM1LCAwLCAyMzY1LCA3ODQxLCAwLCA0Mjg1NSwgMTE4ODU2LCAKLSAgICA0Mjg2NiwgMCwgMCwgMCwgNjY0MzgsIDQxNzg1LCAxMjYxNywgNjQxNzIsIDEzMTczLCA0MzcyLCAxMTkzNTQsIDAsIAotICAgIDk4MzU2OCwgMCwgMCwgOTI0MDIsIDEyODA2MiwgMTI5NjUsIDM4NCwgNjQ1MTIsIDEwNDA0LCAxMDM0MCwgMTE5MzUyLCAKLSAgICAxNTU2LCA1Mjc0LCAxMzIxMCwgMTIwMTI1LCAxMDAxNywgOTczMywgNDE3ODcsIDk4MzI0MywgMTI2OTk0LCA0MTM3MywgCi0gICAgNzgwMzksIDEyMzAzLCAwLCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgNDEzNzEsIDExNjU2LCAwLCAxMjA3MDMsIAotICAgIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCAxMjgwMTgsIDEwOTYsIDAsIDAsIDQyNjg4LCAxMjQ0MSwgCi0gICAgMTIzNTUsIDExOTM0OCwgMTE5MzQ3LCA0MzE4LCAxMDQ1MiwgMCwgODAzMiwgMTMyNDMsIDEzMjM3LCAxMjcxOSwgMTI2NjQ2LCAKLSAgICAxMTkxMDEsIDAsIDY0ODg0LCAxMTk4NzIsIDExOTM0NSwgODU5NywgMCwgMCwgOTg2NCwgMCwgMTIwNzg1LCAxMTk4NzQsIAotICAgIDk0MTA3LCAxMzE5NSwgNDE0NTIsIDY0OTYxLCA3NzIyLCAwLCAxMDQ1OSwgMTE5ODc4LCAwLCAxMTk4NzksIDY2NTkwLCAKLSAgICAxMjgxMjMsIDQxNTMzLCA2NjMzNywgMCwgOTIxODQsIDAsIDQ5NjUsIDQzNDQ1LCA5MTc1MzYsIDczODQ5LCAwLCA0MzYzOCwgCi0gICAgNzg1MzcsIDEyODI4NywgNjI2MSwgMTE5MzQyLCA0MzE0NywgNjY1NzAsIDE5NTcsIDEwNDIwLCA5ODIsIDI3NTYsIDEzMjkyLCAKLSAgICAxMzIwNiwgMTI4ODI4LCAwLCAyOTI1LCA3MzgwOSwgMTMwNTYsIDEyNzU1OSwgMTMyMTIsIDQzMjM4LCAwLCAxMzE5MCwgCi0gICAgMTMxODcsIDkyNTQxLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIDY0NDc2LCAxNjk0LCA4MjE2LCA3MTM2OSwgCisgICAgNjgzMTEsIDY2NjgxLCAxMTkxOTMsIDQ2MDEsIDAsIDEyNzg4NSwgOTgzNzY1LCA2NjgyOCwgMTI4OTcyLCAxMjc4MzksIAorICAgIDc0NTgwLCA2ODA5LCA2Mzc4NiwgNjAzMSwgNjc0MDIsIDYzNzkxLCA2Mzc5MCwgMTE0NSwgNjM3ODgsIDc5MTAsIDYzNzg1LCAKKyAgICA0MzE1MywgNzU0LCAxMDE5MiwgMTMxMDUsIDgxODMsIDEyMDc0MSwgMjAzNywgMCwgNjQ3MTAsIDEwNzQ3LCAxMjUsIAorICAgIDEyMDgwMywgNjQ4OTAsIDk4MzA2NCwgMTI3Mzc2LCAwLCA0MTcxOSwgNjM3NTgsIDM1MjMsIDEwNzQsIDEzMjU4LCA5NTM2LCAKKyAgICA3MTA1NiwgMCwgNDQyNywgNzQyNDIsIDYzNzU3LCA0MzE0NSwgMTIyMTcsIDYzNzU0LCA0MTUzMiwgMTM0OSwgNjM3NTAsIAorICAgIDYzNzQ5LCAxMjkwMjUsIDAsIDEyNzkyOCwgNjM3NTMsIDYzODAyLCA0MTA4NCwgMTIwNjIyLCA2ODEzMywgNDE5MzAsIAorICAgIDYzODA1LCA2MzgwNCwgMTExNDAsIDYzODAxLCA0MTA4MiwgODE0MCwgNjM3OTgsIDYyNjAsIDAsIDEyODM5MSwgOTQwNzQsIAorICAgIDYzNzkzLCAxMTk4OCwgMzg5OCwgOTIyNDYsIDEwMjAxLCAxMjIzOCwgNjM3OTUsIDQyMTk0LCAxMDM2NywgMTI1MjEsIAorICAgIDEwNDMxLCA0MjExNCwgNDE5MzIsIDEwNjgsIDAsIDEyNTIzLCAxMjk0NSwgOTgzMzMxLCA0MjIwMywgNzk1MCwgMzEyNCwgCisgICAgNjM3NzEsIDQyNzg3LCA0Mzg2LCAxMTE0OCwgNjk3MywgMjc5MywgMTI0NzUsIDEyOTE4MCwgNzUwNTYsIDYzNzY5LCA5NTMwLCAKKyAgICAxMjEyNDgsIDEyMjMyLCAxMzEzNSwgODU5NiwgNTY4MSwgNjM3NjIsIDQ1OTUsIDYzNzYwLCA3OTIsIDExMzY3NCwgNjQ4MDMsIAorICAgIDAsIDg3NDIsIDE5NTAyOSwgMTEwNTMsIDEyODc5NiwgNjM3NDQsIDEyODEwNywgMTI4OTQyLCA3NTg4LCA2Mzc0OCwgMTY5MywgCisgICAgNjM3NDYsIDQzMjA0LCA1MDU1LCA2ODQyNiwgNDIwNjMsIDEwOTAsIDY4ODAzLCAxMjA3NzgsIDExNjY1LCA3NDEzMywgCisgICAgNDU1OCwgNjU2ODUsIDk1MjMsIDk4MzQ1MywgNjM4NTcsIDcxMjE2LCAxMTUxMywgMCwgNjE1NywgNjM3NzUsIDYzNzc0LCAKKyAgICA2Mzc3MywgMTMxOTEsIDEyMTcwLCAzNTAwLCAzMTM5LCA2ODA3MSwgMzE3MCwgMTI0ODUsIDQzODkxLCAxMDg3MiwgNDM4OTIsIAorICAgIDEzMDA2LCA0MzkzMywgMTIwMDc0LCAwLCA5NDEsIDAsIDEyOTA3OSwgMTIwOTY3LCA2NTU0MSwgMTEwNjMsIDAsIDgyMjgsIAorICAgIDAsIDQyMDY1LCAxMjgzNjgsIDQzODg5LCA5NDAzOSwgMTI5Mjk5LCA5MjQ1NSwgNzM4NiwgMCwgNjQ0NDQsIDcwMjk1LCAKKyAgICAxMTk4NjMsIDQzNjAzLCA5NDA3NSwgNjUzOTcsIDI4OCwgODM0MDksIDAsIDAsIDEwMDI1LCA2OTkxNSwgMjkxOCwgNjY4MjAsIAorICAgIDY1MzAwLCAxMTk4NzEsIDk4ODMsIDY0NzI2LCAyNzkwLCA2NTM5NSwgMzc5MywgOTgzNjIwLCAxMjc4MjksIDY1MzkzLCAKKyAgICAxMjA1OTIsIDc0MTM4LCA4MzUwNSwgOTI3NTEsIDc1MDE5LCA3NDEzOSwgNzg3NzcsIDY1Mzk0LCAxMTU0OCwgNTI3MCwgCisgICAgOTgzMjM4LCA2NTM5NiwgNzQ5OTgsIDY1ODEzLCAxMzI1NiwgMTI4MiwgMTIwNzcxLCA3NTAxMiwgMCwgMTA4ODgsIAorICAgIDEyMDkzNCwgNjUyNDIsIDAsIDMzMzAsIDAsIDAsIDY4MzQwLCAwLCAwLCA3MTIwMiwgMzMwNCwgNDI3NTMsIDkyNTg4LCAKKyAgICA3MDI5OCwgNzQ2NDMsIDE2MjcsIDAsIDEyNzc2NSwgMTk0NzM1LCA1MzcxLCAxMzExNiwgMCwgMTgyNiwgMTE4Nzk0LCAwLCAKKyAgICA0MzA5NCwgNzAwMjMsIDQzNjUwLCA5NDAzNywgNjgzMTcsIDkwMzUsIDExMTQxLCA5MTc5NzcsIDEyODAwNSwgMCwgOTIyMDcsIAorICAgIDY4MTI1LCA3NDg5OCwgMTY0LCA2ODMwOSwgOTQwNjcsIDk0MDAwLCA2OTU4LCAwLCA0MzExNiwgNjc3MTksIDcwMDE5LCAKKyAgICAxMzI0NSwgMCwgNjg4MDgsIDY2ODE4LCAwLCA3MDAzMSwgMTEwOTksIDEyNjY2LCAxMzE3NSwgMTMyMDcsIDEyMDQxNCwgCisgICAgNjYwMTQsIDEyMDQyOCwgNzQ0NywgNTkyOSwgMCwgNjU1MDksIDEyOTE5MiwgNzQ0OSwgMTEzMDYsIDAsIDczOTIwLCAzMTgwLCAKKyAgICAxMjUxMDIsIDYzODA4LCA5MDU0LCA5NzEsIDEzMDYyLCA3MTA5MCwgMCwgNjUxOTUsIDEwMTY0LCA5MjI1MiwgNzQ0MjgsIAorICAgIDk4MzMyMSwgNzgxNDYsIDkyNjExLCAwLCA3MDIwNCwgMCwgMTAwNDUsIDEyODgyLCAxMzI3NSwgMjMwMywgMTEwNTcsIAorICAgIDkxNzk3NiwgMTMyNzYsIDEyNTEzMywgNDE1MjUsIDc4MTUwLCA3MjcxLCAxMTQ0NCwgMTI2NDc5LCAxMjc5MDQsIDEyMTIwMywgCisgICAgMTIyMjksIDExNjgwLCA5Mjk1NiwgNDM0MTEsIDczNzUxLCAwLCA2NDgxMywgMTk1MDg5LCAwLCAxMDQ3NiwgMzg1OCwgCisgICAgNjQxNzUsIDM5MzIsIDY0OTU4LCAxMjA0MzIsIDk4MzY3OCwgNzM5ODksIDY4MTkyLCAwLCA2OTg0NywgMzY5LCA3NDkwOCwgCisgICAgNDE3ODQsIDExOTE3NSwgNjQxNjMsIDc3OTk3LCAwLCA5MjY0NSwgNjU0NzQsIDQ3OTYsIDEyMjkyLCAxMjY1OTUsIDY1NDc5LCAKKyAgICAxMjg2MzEsIDQxNzgxLCAxMDQ4NiwgNDE0ODAsIDQzMDAyLCA5ODk5LCA5MjYwOCwgMCwgNDA0LCAxMjgyMSwgMzc0MSwgMCwgCisgICAgNTc4OCwgODA5MiwgNjgyMTIsIDQxMjIyLCAxODMxLCA2NjAyMCwgMzk4MiwgMCwgNDM4OCwgMTk0OTEzLCA3NDYsIAorICAgIDExODgyNiwgNzQ3ODMsIDAsIDEyMDE4LCA2NTI5NCwgMTI3NTQ1LCAxOTQ5MjUsIDY4ODM1LCA5ODM0ODgsIDQ0MjIsIAorICAgIDQ3MDgsIDM3OTksIDc0MjkyLCAxMTkzNTcsIDEyMTE0NiwgNzQ0MzAsIDAsIDExNzAwLCA0Mzc0LCAxMjAzNzcsIDEyMTE1MSwgCisgICAgMTM2NCwgMCwgODAzOCwgMTIwODgzLCA5MTc1OTcsIDEyODY4LCA2OTgxNCwgNzA0MjUsIDY3MzUsIDczOTc5LCAxMzE3NCwgCisgICAgNzM5NjgsIDEzMjI1LCAxOTQ5MDIsIDY5ODA4LCA2NTgzNSwgMCwgMjM2NSwgNzg0MSwgNzE0NzYsIDQyODU1LCAxMTg4NTYsIAorICAgIDQyODY2LCAwLCAwLCAxMjc5ODYsIDY2NDM4LCA0MTc4NSwgMTI2MTcsIDY0MTcyLCAxMzE3MywgNDM3MiwgMTE5MzU0LCAKKyAgICA5ODM5MjAsIDk4MzU2OCwgMTI4ODcxLCAxMjc4MjEsIDY3Njg1LCAxMjgwNjIsIDEyOTY1LCAzODQsIDY0NTEyLCAxMDQwNCwgCisgICAgMTAzNDAsIDExOTM1MiwgMTU1NiwgNTI3NCwgMTMyMTAsIDEyMDEyNSwgMTAwMTcsIDk3MzMsIDQxNzg3LCA5ODMyNDUsIAorICAgIDEyMTE0OSwgNDEzNzMsIDY4NDg2LCAxMjMwMywgMTI4NDc2LCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgNDEzNzEsIAorICAgIDExNjU2LCAwLCAxMjA3MDMsIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCA5MjczNywgMTA5NiwgNDM4NTIsIAorICAgIDEyMTQzMywgNDI2ODgsIDEyNDQxLCAxMjM1NSwgMTE5MzQ4LCAxMTkzNDcsIDQzMTgsIDEwNDUyLCA5MjkwMiwgODAzMiwgCisgICAgMTMyNDMsIDEzMjM3LCAxMjcxOSwgMTI2NjQ2LCAxMTkxMDEsIDEyMTE1NiwgNjQ4ODQsIDkyOTA5LCAxMTkzNDUsIDg1OTcsIAorICAgIDcxMTAwLCAxMjkwNjIsIDk4NjQsIDAsIDEyMDc4NSwgMTE5ODc0LCA5NDEwNywgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgCisgICAgMCwgMTA0NTksIDExOTg3OCwgMTI0OTQ5LCAxMTk4NzksIDY2NTkwLCAxMjgxMjMsIDQxNTMzLCA2NjMzNywgMTI4NjYzLCAKKyAgICA5MjE4NCwgMCwgNDk2NSwgNDM0NDUsIDkxNzUzNiwgNjc4NTYsIDAsIDQzNjM4LCA3ODUzNiwgMTIxMTg3LCA2MjYxLCAKKyAgICAxMTkzNDIsIDQzMTQ3LCA2NjU3MCwgMTk1NywgMTA0MjAsIDk4MiwgMjc1NiwgMTMyOTIsIDEzMjA2LCAxMjUwNjQsIAorICAgIDkxNzc5NSwgMjkyNSwgNzM4MDksIDEzMDU2LCA5MjkxNCwgMTMyMTIsIDQzMjM4LCAxMjEzOTYsIDEzMTkwLCAxMzE4NywgCisgICAgOTI1NDEsIDEzMTk4LCAxMTg3OTMsIDEyMTA4OSwgNTI0MiwgMTE5MTc5LCA2NDQ3NiwgMTY5NCwgODIxNiwgNzEzNjksIAogICAgIDY3NzAsIDQzMzMxLCAwLCA2NTYyMCwgOTgzNzI4LCA0MzU0NCwgMTI2NDY2LCAwLCA0MTQ0NCwgNjU2MjEsIDY5OTU1LCAKICAgICA5MTk3LCA1MjQ2LCAxMTkxMDYsIDEzMTg1LCA5NzA5LCAxMjAzMjMsIDEyMDMyMiwgMTIzMTQsIDY1NjE2LCA1MjM4LCAKLSAgICAxMTkzMzMsIDAsIDExOTMzNywgNTIzNiwgNDA5NzksIDAsIDc0MjAxLCA4Mjg2LCAxMjg1MzcsIDM5MzYsIDExOTMzMSwgCi0gICAgMTE2OTksIDQxMzQ3LCAxMjcyNDksIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgMTMyMzksIDEyNjkyLCA3OTY5LCAKLSAgICAxMjcyNjYsIDcyMTksIDEyNzI1MCwgMTI4MjUxLCAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIDI5NzksIDEyMDMwMywgNjU2MTksIAotICAgIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgCi0gICAgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgNTM3OSwgMTIwMzE4LCA0MTE2MywgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAxMTUwNiwgCi0gICAgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCA0MTc3NSwgMCwgNzEzMCwgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCA2MTUxLCAKLSAgICAxMjExMCwgNDI2NzMsIDY1NTcyLCA2NTI5MywgNjUyNTAsIDEzMjY1LCAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDAsIAotICAgIDkyNjQ3LCA1ODA4LCA2NTkyMiwgMCwgMTI5NjcsIDY2MDQxLCA1NjEyLCA0NTgzLCAwLCAwLCA2ODA5NywgNjQ1NzUsIAotICAgIDEyNjYzNywgMTE5NjUsIDAsIDY4MzU4LCAwLCA2OTc4OSwgMCwgOTIyNjAsIDY4MTAyLCA5Njk4LCA3ODE0LCA3NDQ3NiwgCi0gICAgMTE5NjUxLCAxMjg1MTQsIDAsIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIDExOTI1OCwgNzg0OTAsIDc0MjE5LCAwLCAwLCAKLSAgICAxMTg5OTcsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgNTU4OCwgMCwgNDE5MjUsIDEyODEyNCwgNDE5MjAsIAotICAgIDU2NzMsIDEyMDUzNCwgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIDU2NzIsIDEyOTQsIDAsIDc4MDU5LCAwLCA0MjUxMSwgCi0gICAgMTcyNywgMTIwNzI1LCA0MjQzNiwgMCwgMCwgMCwgNzQyMjIsIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDEwMzE2LCAKLSAgICA3NDA5MCwgNTgyNiwgNTUyMzIsIDU4MTMsIDAsIDEyMDcxMiwgNTg0MSwgNTgzNywgNTUyMzQsIDAsIDMxMDUsIDEyODI5LCAKLSAgICA1ODM4LCA1Nzk2LCAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIAotICAgIDU5OCwgMCwgNjQ2NDksIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCA1NjcxLCAxMjAwNDEsIDk4MzI1NSwgMCwgMCwgMTI4ODU1LCAKLSAgICAwLCA4NDcsIDEyODI0MiwgOTUyOSwgMCwgNjY2NTcsIDY5ODAsIDc4NDgzLCAxMjAwMzUsIDc4NDg0LCA5ODM0OTEsIDAsIAotICAgIDEyMDAzMywgNzg0ODYsIDAsIDAsIDEyMDAzOSwgNDI2ODMsIDAsIDk4MzA1NSwgNzExNCwgMCwgMCwgNDMxOTAsIDY1NDYzLCAKLSAgICAxNTU0LCAwLCA0MjYxMSwgNDI1NjMsIDAsIDU2NTEsIDI5MjksIDY3OTIsIDQzMjAxLCAwLCAxOTk2MywgNTY5OCwgMCwgMCwgCi0gICAgMCwgMCwgNTY0NCwgMTAyOTIsIDY1NTQ2LCA2OTcyNywgNjgxNDEsIDgzNzIsIDAsIDY1MTE2LCAwLCAxMjAwMjIsIDEwMTc1LCAKLSAgICAxMDM4OCwgNDI3OTksIDk0MTAwLCA0MTAxMywgMTA1NjgsIDAsIDk4MzYxOCwgMjg2OSwgMCwgNDEwMTUsIDE5NDY5MiwgCi0gICAgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCA0MjYwOCwgNzg0NjksIDk4ODQsIDQ3NTksIDAsIDAsIDEwMjY2LCAKLSAgICA0MTM1OSwgMTE3MCwgNDMzNjUsIDY5ODEwLCA3MzkwOCwgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMTI4ODc1LCAxMTY2MSwgCi0gICAgODEyMiwgNTgxOCwgMCwgMCwgMzg2MSwgOTU0MCwgMTEwMjgsIDI1NTQsIDUxNTgsIDU3MTQsIDIyMTMsIDAsIDAsIDgwNywgCi0gICAgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAwLCA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIAotICAgIDEyNjYxNCwgMCwgODY3NiwgOTgzMjkxLCAwLCA1NTgyLCA0NTEsIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMTI3ODU4LCAKLSAgICAwLCAwLCA0MzYwOSwgNTkwNiwgMTIwNTUzLCAxNDQwLCAwLCAxMjg4NTMsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCAKLSAgICA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgCi0gICAgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgCi0gICAgMzgzLCA3MTU0LCA0MTY1NiwgOTI2MzQsIDk0MDQwLCAwLCA1MTg3LCA3MTI5NiwgMTI3Mjc3LCAxMTI4NiwgNjg2MjAsIAotICAgIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIDk4MzgyNywgODI5MiwgMTk1MDc0LCA0OTgwLCAKLSAgICA4ODYwLCA3Mzk0NywgMTAwMjgsIDY1MjkxLCA3MDc2LCAxMzE4MiwgMTk0NzA1LCAwLCAwLCAxMDYzMSwgNjYwMzEsIDc5NzIsIAotICAgIDAsIDc4Nzg1LCAwLCA3OTAwLCAwLCAxMTMwOSwgMzgwNiwgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCA5MjU1MiwgCi0gICAgMCwgMTI5MzEsIDAsIDQyNjg0LCA3NDI4NSwgMjA4OCwgNjQyMTMsIDY0MzY2LCA2NTE1NiwgODgxNCwgNDIyMzgsIDc0NzcxLCAKLSAgICAwLCAwLCAxMjgzNiwgMCwgMCwgNzQzNDIsIDg1OTMsIDAsIDAsIDY4NDQ1LCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIAotICAgIDAsIDE5NDY1MCwgMTI3MTQ0LCAwLCA5MzQyLCAxMjA0NjQsIDAsIDY0NTE2LCAwLCA3ODc5MiwgMTAxMjksIDQxMDA3LCAKLSAgICA3NDM3NSwgMCwgNDA5OTUsIDEyMjA5LCA0MTAxMiwgMTE5MTM2LCAwLCAwLCA2OTcyNCwgNDA5OTIsIDkyMjY0LCAxMjcxNTMsIAotICAgIDY4NjUzLCA0MzU1OCwgNTUyMiwgMCwgNjEsIDAsIDc0MTA1LCAzNjMzLCA5ODM5MDAsIDY1MTYyLCA0MTIzNCwgMTIwODksIAotICAgIDc4MjgxLCA5NzcxLCA5ODM5MDUsIDEzMjUxLCAxMjg3MDEsIDAsIDYyNjIsIDI3ODQsIDQyNzQzLCAwLCA4MTI2LCA2NjQ4MywgCi0gICAgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCA3MTA4LCAxOTQ3NzksIDEwODkwLCAKLSAgICA3NDQ4MSwgNjU4MzQsIDgzMjQsIDExOTEwMywgNjQ0MTcsIDc0ODE3LCAxMjc0NjUsIDY0NzM3LCAwLCA5ODM2NTksIDg5MzAsIAotICAgIDY2Njc4LCA3NDI0OSwgMTE5MywgMTAwNTYsIDE4MDAsIDEzMjUzLCAxMzI1MiwgNzgyOSwgMCwgMCwgNzc0MywgMCwgMCwgCi0gICAgNzc5MDQsIDkyNjQwLCA3NzkwNSwgOTAzNCwgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgMTAzMzgsIDY2NDY5LCAKLSAgICAwLCAwLCAwLCA0MjgxNSwgMCwgNDE5NjYsIDAsIDEyNzQ3MSwgMCwgMTE3OTIsIDQzMDY0LCA0MTAyNSwgOTExLCA3NTM5LCAKLSAgICAwLCAwLCAxMjAzMzksIDY1MTU5LCA2NDM5MCwgMCwgMCwgNTUyMCwgMTE2NjIsIDAsIDY1MzMwLCA0MjgxMiwgMCwgMCwgCi0gICAgMTIzMjYsIDk4Mzg1NiwgMCwgNDI4MDgsIDEyODMzNywgOTM0OCwgNjQ5MDEsIDk4Mzg2MSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTE3NTg0LCA0MzcwMiwgOTgzNTc2LCA1ODU3LCA2NTM0MiwgOTI3MjcsIDExOTEyMCwgMTIwMDc5LCA4NjQ0LCAwLCAwLCAwLCAKLSAgICA3NDI5NiwgNDE5MDksIDAsIDEyMDMzMiwgMjc5MSwgNjk2NjMsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIAotICAgIDExODkzOSwgODc2MSwgMTI5NDIsIDU3NDgsIDAsIDEwNzczLCAwLCAwLCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgODUyMCwgCi0gICAgMTMxNDYsIDEyNzE4NSwgNjM5MzEsIDAsIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCA5MjQ1OSwgCi0gICAgMCwgOTgzNjYwLCAwLCA3Mzg2MCwgMCwgMCwgNjQzNDUsIDAsIDkyMDEsIDEyODMxNCwgMTk0OTQwLCAwLCAwLCA0MzY3OSwgCi0gICAgOTE3NTg1LCA2NTExNywgOTIyNzAsIDAsIDEwNDI3LCAwLCAzODQ0LCAxMjA2NzUsIDk3NTUsIDExMTAsIDY2MTIsIDEyMjIyLCAKLSAgICAwLCAxMjg3ODksIDAsIDAsIDc4MywgMTk0OTM1LCAwLCAwLCA5ODMwNjQsIDE5NDcyMCwgNjUwNTYsIDM2MjAsIDQxMTgwLCAKLSAgICA2ODM3OCwgNDU1NiwgMCwgMCwgMTk0OTMzLCA3NDI1MCwgMCwgNjc2NTcsIDEwNTEwLCA0MzgyLCA2NjQ4MiwgMCwgMCwgCi0gICAgMTI3NTI3LCA5MTc3LCA4OTAyLCA5Mzk1OCwgOTgzOSwgMCwgMTI4OTEsIDk4Mzc1NSwgOTgzNjM2LCA2Mzk5OSwgMjAxNiwgCi0gICAgNDE5MTcsIDk3ODgsIDYzOTI4LCAwLCAxODYyLCA2NTgwMCwgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgCi0gICAgODU3OSwgNDE5MTQsIDc5ODEsIDAsIDY2MDE3LCA0NTA4LCA2NDg4MywgOTI0NTYsIDkyNTIyLCAxMjc4MTQsIDAsIDY0NTkyLCAKLSAgICA3NDI3NiwgMTIwMDgwLCA2Nzg0LCA3ODc4OCwgNjgxODEsIDAsIDAsIDAsIDEyNzUzNCwgMTIxNDcsIDkwMjQsIDY2Mzc4LCAKLSAgICA2NjQ3MiwgOTgzOTI5LCA2NDI4OSwgNjUyODksIDc4MTUxLCA2NjY1OCwgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIAotICAgIDEyNjUwNSwgMTEwNTEsIDk4MzI5NiwgMCwgMTEzNTUsIDY1ODg1LCAwLCAxMjgzMTAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgCi0gICAgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgOTk2MywgNjg2NDksIDEyNjYwOSwgNDA0MCwgMTIwNTcwLCA2MTY3LCAwLCAKLSAgICA2MzkyMiwgNjU5NCwgOTgzNzQwLCAwLCAwLCAzNjI0LCA0MzAzNiwgMCwgNjM4NywgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgCi0gICAgNDE5NTUsIDAsIDYzOTkzLCAxMDQ0MCwgOTYxMSwgNjU2MDUsIDY4MDMsIDAsIDc3MzgsIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIAotICAgIDkyNjQxLCAzNDM1LCA3ODE2NCwgNDM4MTQsIDQzODEwLCA3MDI5LCA2NDI1OCwgNDEyOTIsIDExODg5OCwgMTI3NDgsIAotICAgIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIDAsIDY3OTkzLCA2Mzk1NiwgNDI0NTgsIDYzOTU0LCA2Mzk1MywgCi0gICAgNjM5NjAsIDk1OTEsIDQ1MTYsIDEwMjE3LCA2ODM3MCwgMTE0NjksIDY5Njk3LCA0MjMwNiwgMjcyMywgMTE4OTQ3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCA0MjcwLCAwLCAKLSAgICA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIDEyMDEzLCAwLCAKLSAgICAwLCAxMjY0NzksIDQxNSwgNjM5NjQsIDYzOTYzLCA0MjM0NSwgOTIzMTAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAKLSAgICAwLCA2Mzk2MSwgNDQ3MiwgMCwgMCwgNzgxNTksIDY5Njk5LCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAxMjgwNzgsIDcwODEsIAotICAgIDEwNzMwLCA3NjkxLCAxMDMzMSwgNjM4MzAsIDExOTYyNSwgNDI5MjIsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgCi0gICAgMTYwNCwgOTU2NSwgMTA1MzksIDY5NzAxLCA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIAotICAgIDY0ODczLCAxMTk5MiwgMCwgMCwgNjM5ODAsIDExODAxLCAzNjIyLCA5ODMxMjQsIDY0MzM2LCAxMjAxNywgMTA0NjMsIAotICAgIDYzOTgxLCA0OTY3LCA2NDE4OSwgMTk2NiwgNDM2MjgsIDAsIDk4MzI5MiwgMCwgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIAotICAgIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCA0MDIsIDAsIDEzMTQ3LCAxMjg2OTIsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIAotICAgIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIDAsIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCAKLSAgICA5MjM1MSwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCA5MjM1OSwgNjQ5NDIsIDk4MzU1OSwgMTk0NzMzLCA5ODM2ODYsIAotICAgIDE5NDczMiwgMCwgNzQzMDEsIDAsIDExMjgwLCAwLCA2OTc4NCwgNzQwNjAsIDAsIDAsIDExOTY2NCwgNTE0NSwgMTI0ODYsIAotICAgIDY1MDE4LCA2NjUxNiwgNTQwOSwgMTI3Mzc5LCAxOTQ2NjksIDc0MDIsIDUzOTksIDk2ODUsIDc0MDg5LCA3OTUyLCA1NDAxLCAKLSAgICAwLCA2NjYxNiwgNjg0MjEsIDk4MzkxOSwgMCwgNTQwNSwgMTI3ODc1LCA2NDg2NiwgMCwgMTE5NTgzLCAxMjgzNDUsIAotICAgIDc4Nzg0LCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgNjQ2OTAsIDMyNTQsIDAsIDAsIDEyODIwNywgNDIzOTAsIDQzNjc4LCAKLSAgICAxOTQ3MjUsIDk4MzkwOSwgNjUwNzcsIDAsIDYzODgsIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAwLCAKLSAgICAzMzc3LCAwLCAwLCAwLCAwLCA3ODIyOCwgMCwgOTgzNzYyLCA0MjY5MSwgOTE3ODg2LCAxMjcxOTgsIDc0NzY3LCAwLCAKLSAgICAxMjcwNzUsIDEzNzksIDI0NiwgMCwgOTgzNzYxLCAzNzg4LCA5ODMxMDYsIDExMDQxLCA5MjU0OSwgNjYzMDQsIDAsIDAsIAotICAgIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDAsIDAsIDAsIDAsIDk4MzY5NywgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCAKLSAgICA5MjIxNywgMTMxNjMsIDk4MzIwNCwgMTIwODMxLCA3NDU5NywgMzE4MiwgMCwgMCwgMCwgNjUwMzQsIDY1ODg5LCA0MjE2OSwgCi0gICAgNDc1NSwgNzQyNDQsIDE5NDYyMSwgMTE0NDMsIDAsIDY2MzE5LCA3NDU5OCwgNjA4LCA2MDAsIDAsIDEyMTksIDM5MzQsIAotICAgIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCA0MjQ0MiwgNjU0NzAsIDk4MzkwNywgNjQyMDIsIDEzMTYwLCA3NzU5LCAKLSAgICA0MjQ4MiwgNDg1LCAxMjgwMDYsIDAsIDk4MjgsIDAsIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgCi0gICAgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCAKLSAgICA3MDA0NSwgNDM1MzksIDU0MTEsIDQyMTk2LCAwLCAwLCAwLCA5MTUwLCAwLCA0MjM5MywgMTMwODYsIDEzMTAsIDE5NDY4NywgCi0gICAgOTMzNywgMTIwNTIsIDEwNjQzLCA1NTI3MSwgOTgzMTc5LCAxMjE2NiwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgCi0gICAgNjU2MTEsIDAsIDAsIDE5NDc1NiwgNzQzMTAsIDY1NTQsIDAsIDExOTE0LCA1NDUyLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIAotICAgIDkyNTYwLCAyNzEzLCAwLCA5NjUwLCA0MzMzMCwgMCwgMTk0Njc1LCAxNDA2LCAwLCAwLCA5MjY1OSwgMCwgNjgyMjMsIAotICAgIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIDQxNDEsIDk2ODIsIDY1Mjg3LCAxNTA4LCAxMjcwMTMsIDg3NzksIDEwNTY5LCAKLSAgICA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgNDE0NSwgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIAotICAgIDU1MjUwLCA5MTg1LCA5NTUwLCAwLCA0MzQwMywgMCwgMCwgMCwgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDk4MzIwNSwgCi0gICAgMTI5NTUsIDEwNTk2LCAyODg4LCAxOTQ2NDUsIDAsIDAsIDk2NTcsIDkwMTksIDE5NDc2NiwgMCwgMjg3OCwgNTM5MCwgMCwgCi0gICAgMTk0OTYxLCAwLCA2ODY3OSwgNDM1NTIsIDc1MDEsIDYzMjgsIDAsIDEwNDI5LCAxMDM2NSwgMCwgMCwgNDE5NDYsIDc1MDMsIAotICAgIDUyMzUsIDgwMywgNjgzODEsIDAsIDAsIDg5ODYsIDEyNjU0MiwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMCwgCi0gICAgMTI2NjQ3LCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIDkyODgsIDY0ODIyLCAyODkyLCAwLCA0MzM5NCwgNTU1LCAwLCAwLCAKLSAgICA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIDcyODksIDc0MDU1LCA2NDE2MSwgODg1NCwgNjQxNjIsIDU4NTgsIAotICAgIDQxOTI3LCAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMTI4ODEzLCAxMzE1OCwgCi0gICAgOTIxNjYsIDcyMTEsIDAsIDkzNzEsIDczOTczLCA5MTc1NTMsIDY4MjgsIDE2MjUsIDkyMzAyLCAwLCAxMzQyLCA2ODQ0MCwgCi0gICAgNjQxNzEsIDEyNjcwNCwgMTA5MDMsIDk4MzQ5NCwgMCwgMCwgMCwgMCwgNDQ4MiwgNDE2MDYsIDAsIDEyODU2OSwgOTgzMTEyLCAKLSAgICAwLCA2NDM4MSwgMCwgMCwgMTk1MDkwLCA0MjI0NSwgMTI2NDY3LCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCA2NjY4NywgCi0gICAgNjY2MTksIDEyNjQ4OSwgNzgwMjUsIDAsIDExMzQ5LCA0MDk5MSwgOTE3NTcwLCAwLCAxMTk1OTksIDEyMDgzMCwgMCwgCi0gICAgMTE5NywgMTI4MjgyLCAxMTQ5LCAxOTQ5NzAsIDAsIDAsIDQwOTkwLCA0Mzc2NSwgMCwgMzQ5MiwgMCwgMTI3OTQyLCAwLCAwLCAKLSAgICAwLCAxMjgzOCwgOTgzOTc4LCAxOTk0OCwgMCwgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIAotICAgIDQxMzA5LCAwLCAwLCA4MTUyLCAwLCA0MTU1MCwgMTIyMjcsIDk4MzYxMywgMCwgMTI4MjgsIDEyNzUxMSwgMCwgMCwgCi0gICAgMTIwNzA4LCAwLCAwLCAxMDM4NiwgMTE5NTc0LCAwLCAwLCA5MjY4MCwgOTgzNzg5LCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgCi0gICAgOTIyMzksIDY1MTg2LCA5MTc1NzEsIDAsIDk2MDYsIDAsIDAsIDY0NDM5LCAwLCAwLCA5MjY4NiwgMCwgMCwgMTk0OTY3LCAwLCAKLSAgICAwLCAzMzk1LCA5MzYyLCAxMDg3OCwgMCwgMCwgNzgzNjIsIDY0ODMwLCAwLCAxMjY1NTcsIDQxMDkxLCAzNDI2LCAxMzQ0LCAKLSAgICA4ODcwLCAwLCAwLCA0NzM1LCAxMjcwMTcsIDYxMTksIDEyODIyLCA0MjY5OSwgMCwgOTgzODI0LCA3NDgxOCwgMTQyMywgMCwgCi0gICAgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgMTA1NTksIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgMTE5MjksIDAsIDcxNzAsIAotICAgIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCA3ODcxMywgMCwgMTk0NzQwLCAxMjg2OTEsIDkyMTg1LCA2NjY5OSwgCi0gICAgNjQ0NDAsIDEwMDQsIDkyNTg0LCAxOTQ3MzcsIDQzMjM0LCA2NjAwOCwgMTI2MjcsIDAsIDY4NDE0LCAwLCA0MzYxOSwgCi0gICAgNDMzMDMsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgMTE3NzYsIDc1NTgsIDEyNzE1OCwgNjU2MjcsIDAsIDEwNzE4LCAKLSAgICAxMzE1NCwgMzQ2MSwgOTEzOSwgMCwgMCwgMCwgMCwgNjUzNjUsIDczODc3LCA2NTYyOCwgNzgwMTksIDEyMDMxOSwgMCwgCi0gICAgNDE3MDgsIDEyODYwLCAyNjQxLCAxMjA2OSwgMTA4MzgsIDU0MDMsIDEwMzUyLCA3MDA4NSwgMTAwNjEsIDQzMjM3LCAwLCAKLSAgICA1MTQwLCAyMDksIDEyODg0NywgNDE3MDQsIDQxMDU2LCA0MzA3OCwgMTI4MTI1LCAxMTg4MDksIDAsIDEwODk5LCA2NTQ2OSwgCi0gICAgOTIzNjIsIDAsIDAsIDI0MTAsIDk5MywgMCwgMTIwNTg5LCAxMjA2ODksIDc4NjkzLCAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIAotICAgIDAsIDcxMTAsIDc0NDYyLCAyMDY2LCAxMDQ4OSwgNDIxNjYsIDQzNDYzLCAxMDY1OSwgMzYwMCwgMCwgNDIyNCwgMTMzNiwgCi0gICAgNDE1MTgsIDAsIDAsIDAsIDAsIDQxMTM5LCA2NDgyMCwgOTI1MzgsIDEyOTY2LCA0MTEzNCwgMCwgMCwgMCwgMCwgMjcyLCAKLSAgICA0MjYzLCA4NzkzLCAwLCAwLCA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCAKLSAgICA1ODg4LCA0MTM1OCwgNjQ4NjMsIDk1NDQsIDQzNDgxLCAwLCAxOTQ4MDYsIDcwMDI3LCAyMDk5LCA1MTIwLCAyNDA5LCAKLSAgICA3Nzk5LCAwLCA3NDQyNCwgMCwgMCwgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIDAsIDk5MTMsIDAsIAotICAgIDAsIDY0OTE0LCA5MTc3ODcsIDY1MTAxLCAwLCAxMTY5NCwgOTI0NzUsIDExNjkwLCA1ODM1LCAxMjcxNjQsIDY2NjI1LCAKLSAgICAxMDg0MiwgNDEzNTQsIDQyMTIzLCA0MzA5NywgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAKLSAgICAwLCA5OTcyLCA3Mzg2NSwgNDUxOSwgNjExNCwgMTA4OTgsIDQzMDcyLCAwLCAwLCA5Mzk2MCwgOTgzMzIyLCAxMjY1ODEsIAotICAgIDEwNjk1LCAwLCA3NTQwLCAwLCA4ODEsIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAxMzMxMSwgNjg0MDMsIDQxODU3LCAKLSAgICA2NDMyMSwgODM1OSwgMCwgMTI2ODksIDAsIDE5NDU5NCwgMCwgOTgzMzEyLCA5ODM4ODEsIDY4MTgzLCAwLCA5ODMzMTQsIAotICAgIDEyODcsIDU0MzYsIDAsIDk4MzMxNywgNzQxNDIsIDkyMzI4LCA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgNjk2NjgsIAotICAgIDg5ODUsIDEyMTA5LCA5ODMzMjMsIDAsIDEyNzI0MiwgMCwgMCwgMzY1MiwgMTA1MzcsIDAsIDEyNzYsIDEyMDQ0MCwgNjU0OSwgCi0gICAgMjc5LCA3Mzc0NSwgMCwgMCwgMCwgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgNDIxMjQsIDk4MzU1NywgNDIxMjIsIAotICAgIDkyMzM3LCA5MjM2NywgMCwgMTE5ODUsIDEzNDUsIDc4NjAwLCAwLCAwLCA4OTU2LCA0MzA4MywgOTQwNTcsIDQyMTM4LCAKLSAgICA3ODYxMCwgMCwgMTIxNTEsIDc4NjA4LCA3ODYwNCwgNzg2MDUsIDYyODUsIDc4NjAzLCA3ODYxMiwgNzg2MTMsIDY1OTQyLCAKLSAgICA0OTIsIDg2ODUsIDAsIDk4Mzc1OSwgMCwgNzg2MjIsIDQzNzEyLCAyNTgyLCAxMTQ3MCwgNjQ1MzgsIDc0NDQsIDc4NjE1LCAKLSAgICA3ODYxNiwgMjI5NywgMCwgNzM4MzcsIDExOTgyMywgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDkyNTk0LCA0MTk0NCwgCi0gICAgMTIwMjc2LCA5OTMzLCAwLCA2NjUxNSwgNzY3LCA1NTI0LCA3MDI4LCAwLCAwLCAxMTk4MjcsIDExOTgxNywgMTE5ODI4LCAKLSAgICA3ODYzMywgMTA4OTYsIDAsIDE3OTksIDEyMDQ5NywgNjk3MSwgNzQzMzYsIDEyODM0MiwgMCwgNjUzNDAsIDExODk3OSwgCi0gICAgNDE1NTEsIDI0MzQsIDk0MDE4LCAwLCAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIDAsIDYzMzgsIDQzMjE0LCAwLCAKLSAgICA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAwLCA5Mzk4MywgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDkzOTU5LCAzMTcxLCAKLSAgICA2NjIzLCA0OTYxLCA2ODM5NiwgODg2LCA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgNzAwNjYsIAotICAgIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAxMDk0NCwgCi0gICAgNDEyMDgsIDk4MzcxMywgNDExNjgsIDgxNzgsIDAsIDMzNjcsIDkyMzM0LCA0MjUxMCwgNzg2NDEsIDc4NjM2LCA2ODA0LCAKLSAgICA3ODYzNCwgMTk0NywgMCwgMCwgOTI2ODEsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgNzQ3OTgsIDkxODEsIAotICAgIDY1MzU5LCAwLCA4MDE3LCAxMTk4MzEsIDY1MDk2LCA2NjcyMCwgMCwgNDM0NzUsIDAsIDQ5MDksIDEyMTI2LCAxMjg2NzMsIAotICAgIDEyMDY5NiwgNDkwNCwgOTgzMzMzLCA2OTY1MCwgMTM2NSwgOTI1MywgNDI3NTcsIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAKLSAgICAxMTk1ODcsIDY0NDE1LCAwLCAwLCA1Mzk4LCAwLCAxMjczODYsIDkzOTUzLCAwLCAwLCAxMTkwMTUsIDAsIDAsIDk0NzYsIDAsIAotICAgIDk4Mzc3NywgMTI3NjMsIDEyNjYwMywgMzYyOSwgMCwgMTMwMDUsIDAsIDM2MjgsIDAsIDAsIDkyNTAyLCAzNDY5LCA0MjEwNywgCi0gICAgNDIxMTYsIDkxNzU3OCwgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIDQzMDg2LCA5MTE0LCAKLSAgICAwLCA0MjU4MywgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgMTE5ODIxLCAzMjM2LCAxMTMxNywgMTI1MSwgNzc3NywgCi0gICAgNDE4NTIsIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIDEwMjU5LCA5ODY1LCA2NTgyMSwgMCwgCi0gICAgNjAxOCwgOTIyOTAsIDAsIDEyMjc2LCAwLCA2ODM3MiwgMCwgOTIyNTksIDExOTI0NCwgMCwgOTgzMjMwLCAxMDQ2NywgMCwgCi0gICAgMjQ0MywgMTA5MTgsIDc4MjE3LCAxMTk4MjUsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAxMjc4ODUsIDAsIDAsIAotICAgIDExODgyOCwgMTIwMjcxLCA2NTY3OCwgMTI4NjcsIDAsIDgyNjAsIDc3OTQ1LCA3NTE5LCAxMTUwNSwgMTIyNzQsIDg5MDQsIAotICAgIDUxOCwgNjU4NTcsIDAsIDEyODY3NCwgMTMyMDQsIDQzODcsIDg1NywgMCwgNjUzNjksIDAsIDkyMzM2LCA0MzEyNSwgCi0gICAgMTIwNTkyLCAwLCAwLCAwLCAwLCA1MTM2LCAxOTY4LCA5ODMwNDEsIDEyNjYyNywgMTMzNywgNjQ5NjcsIDE2MjksIDAsIAotICAgIDc5NiwgNjY1MDYsIDAsIDc0MTIzLCAxMjg3NywgMTIwNjQ5LCA0MjMxNCwgNDMzODgsIDAsIDc0NDAzLCA2MTIwLCA0NzgsIAotICAgIDY1MTUxLCA2ODEyOCwgMTI4MTQ3LCA0MzA4MiwgNjAxNiwgMCwgNDIyODQsIDEyODUwNywgNDI3NiwgMTIwNiwgMzYxOSwgCi0gICAgNDE2MzgsIDY5NjkxLCAzODQzLCAxMjAxMSwgODg1MywgMzM2MSwgMCwgNDkwLCAxMDcxNSwgNzU3OCwgNjgzODQsIDAsIAotICAgIDY1MzUwLCAxMDUzMCwgMTIzNDgsIDg2NTMsIDc0MzE0LCA0MjQzNSwgNjE1NCwgOTU1MSwgNjUzNTQsIDc4NTIyLCA3ODQsIAotICAgIDQyMzk3LCAzMzQsIDAsIDQyNDE2LCA2NTM1NiwgNjUyNzMsIDc3OTg3LCA2OTY2NiwgNDQ0MiwgMTAzNjQsIDAsIDc3OCwgCi0gICAgNDE2MjYsIDQyNDU1LCA3OTg5LCA3NDA2MywgMzIyNywgNjk5MDcsIDEyNzI3NSwgNzM5ODMsIDI5MTUsIDExNTAyLCAKLSAgICA0MTAyMiwgNDE3MDIsIDEwMzA5LCAxMjcwMzUsIDc4MzIwLCAwLCA2OTc1LCAwLCA1NDE1LCAxMjE3NiwgMCwgNzQxOTMsIAotICAgIDM0NjIsIDY1MjE1LCA0MjYyOSwgNzg2OTEsIDczNzg0LCAwLCAwLCA5NzU5LCAwLCA3MDA1NywgMTI3MjU0LCA4MTE0LCAKLSAgICA3ODY5OCwgNzg2OTcsIDc4Njk2LCA3ODY5NSwgODcxMCwgNDI0OTUsIDExODk1NiwgMCwgNDA1MSwgMTA0NjAsIDQzMzY0LCAKLSAgICAxMTg5MTcsIDEzNTYsIDEyMTYxLCA0MjcxMywgMTI4ODU3LCAxMjcyNjgsIDE2MTksIDk3MDMsIDQzMTUyLCA0MjQ4OSwgCi0gICAgNDIxMTIsIDEyNzk3OCwgMTg3NSwgMTA4MDgsIDQyMTA5LCAxMjAyODQsIDQxODYwLCA2NDg2MiwgMTMzMDUsIDY0OTA3LCAKLSAgICA1Mjg5LCAxMzE0NCwgMTI4NjU4LCAwLCA1NTc1LCA5Njc1LCAwLCA1OTQwLCAyMjYsIDI2NDksIDYzMzYsIDk4MzI3NywgCi0gICAgMTE5ODMwLCA0MzIzNiwgMzM4MiwgNDI0NDksIDY0OTgsIDE2NTgsIDExOTM2LCA3ODIzMiwgMCwgMTEyNjksIDEwMTUxLCAKLSAgICA3Mzc1OSwgNDMxMDAsIDY5ODg4LCA2NTUwOCwgMCwgMCwgMCwgODkzNSwgOTE3OTg1LCAwLCAwLCAwLCA2MTYsIDc0NzUzLCAKLSAgICA2NTE3OCwgNDY4NCwgNzg3MDEsIDExOTY1MywgMCwgMTI2NTUxLCAwLCA2MDQ4LCA3NDQ2MCwgNDIxMTAsIDczOTY1LCAKLSAgICAxMDg3MCwgODU1NywgMTEwNTQsIDY4NjY0LCAxMTkwNDksIDk2ODEsIDQ0NzUsIDAsIDQxMTQyLCAyMTAwLCAwLCAxMjA3MzEsIAotICAgIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCA2NDQ0MywgMCwgOTgzMjk1LCA5MTc5ODcsIDAsIDExODk2NiwgNzQxNDQsIDQwOTk3LCAKLSAgICAwLCAxMDM5MiwgMTAzMjgsIDQwOTk4LCA0MzQ2MiwgNzQ0ODgsIDAsIDk4MDAsIDg5NzksIDAsIDEzMzA3LCA0MTAwMCwgMCwgCi0gICAgMTE5MjM5LCA2NDg3LCAzMzg2LCAwLCAxMDM0NCwgMCwgNjUyOTksIDUzOTQsIDQzMjQ2LCA3ODI0MywgMTAyMjAsIDY2NTA1LCAKLSAgICA0MTIwMCwgMTI4NTgzLCA0NDI1LCAwLCAwLCAwLCA0MzA3NCwgNzM3OTksIDk4MzIwMCwgNzgxNDcsIDAsIDEyMTczLCAKLSAgICA3ODU0NSwgMCwgMTI3MDExLCA2NTMzOCwgMCwgMCwgMTE5NTgyLCA0NDc0LCAwLCA0MzA5MywgMTI4NjQ0LCAxNTg3LCAwLCAKLSAgICAxMjczNzIsIDY0NDc1LCAxMjgwOTgsIDEzNjksIDk4MzY3MiwgOTk1OSwgNzkyNywgMCwgNDU2MCwgMCwgMCwgOTIyNzcsIAotICAgIDk4MzYyMSwgNjQ5NDgsIDQ0MzAsIDc0MzQ3LCA0MjYwMSwgNDUxNCwgNjY0MzQsIDkzOTU1LCA4MTk0LCA2NTQ2MiwgCi0gICAgMTA2MjYsIDEwOTY1LCAwLCA4ODkzLCA5ODMzMDEsIDEyNTQyLCAwLCA2NTM0MSwgMCwgNjU4MjksIDc5MjUsIDExOTgyMiwgCi0gICAgMTA0NzUsIDAsIDAsIDEzNTIsIDExMDY5LCA3NzA3LCAxMjc1NjAsIDEyNjQ4NiwgNjUyNzksIDEyNzEwMiwgNjgyMDcsIAotICAgIDEyNzEwMCwgNzA5OSwgNjA0MCwgMTI3MDk3LCAxMDA3MSwgMCwgOTMzNiwgNDM3NTAsIDAsIDg4OTksIDc3OTgsIDY0NDc0LCAKLSAgICA2NDI1OSwgNjk4NzMsIDY1MTg4LCA3ODIwLCA0MzAxOCwgMTI3MDgyLCAwLCA3NzQ2LCAxNDkyLCA3ODU1MSwgMTA4ODQsIAotICAgIDc3OTgyLCAwLCA1MTI3LCAxMTI4NSwgNDI1MDEsIDU0OTUsIDQyNzMsIDQzMDk1LCA0MTQyNiwgMTA4NDksIDU3MzAsIAotICAgIDI5OTksIDYzNDIsIDY4NjM2LCA3NDMwNCwgMzcxLCA2NDM3MywgNjAyMywgMTY5LCA1NDk3LCAxMTcwOCwgMCwgMCwgNjMyMywgCi0gICAgMTk0Njg0LCA4MjI0LCAwLCA4OTM4LCA2MDQzLCAxMjczOCwgMCwgOTgzMDc2LCA1MzIxLCAwLCAxOTQ3OTgsIDAsIDI1ODksIAotICAgIDc0MzMyLCAxNjg5LCA3ODAyLCA0NjgzLCA3NDMxOCwgNDI3MDQsIDEyMDI5NiwgMTE5MDUsIDAsIDAsIDEyODUxNiwgCi0gICAgMTI4MTYzLCA3NDUxMywgNjA0OSwgMCwgNDAyNywgODM0LCAxMTg5NjIsIDE4MDMsIDAsIDE1MDMsIDAsIDAsIDcxMzEyLCAKLSAgICA1NzMxLCAxMzgxLCAyMzg3LCAwLCAwLCA4Mjg5LCA2NDUyNSwgNjU4MTcsIDI4ODEsIDQzMTQyLCAwLCA5NjAxLCAyODc5LCAKLSAgICA5NjY4LCA5NzY2LCAwLCA1NzI5LCA5MTc4MzMsIDc0NDEwLCA2MDM2LCA2NDg4MSwgNDAyNiwgOTM2MSwgMTI3MDkxLCAKLSAgICAyODg3LCAwLCAzNTI2LCA2Mjk4LCAwLCA3Nzg5NywgMTIwMDk1LCA3ODUxOSwgMCwgODU3MiwgNjAyMSwgNzc4OTYsIAotICAgIDEyODI4OCwgNzc4OTUsIDQzMTU1LCAwLCAxMTk4NDksIDMxNDYsIDEwOTU5LCA5NDgzLCAwLCA3Nzg5MywgMTA5ODEsIDE2NiwgCi0gICAgOTE3ODQxLCA4NjM1LCA5ODM2MDYsIDEwNjIzLCA0MDgsIDExOTA1OCwgMTI3NTA3LCAxMzI5OCwgMCwgNzQyNiwgNDE2NDEsIAotICAgIDEyNzE3LCAwLCA3NjA3LCAxMDYzOSwgNDMzOTYsIDAsIDAsIDQxNjQzLCA3NDEzNCwgOTgzMDU0LCA4NzEzLCA0MTY0MCwgCi0gICAgMTAyMjEsIDQxNjQ1LCA2NjcxMiwgNjY0NSwgNjQ2LCA2NjcyNiwgNjY3MTEsIDQyMTI5LCA5Mzk5NCwgNzc5MDEsIDM0NzIsIAotICAgIDg2OTcsIDAsIDAsIDk4MzgxNSwgMCwgMCwgMCwgNTgwOSwgMTk1MCwgMTE5MzU2LCA5MjQzMiwgNzQ1NzIsIDAsIDQyMTM2LCAKLSAgICAwLCAwLCAwLCAwLCAzMjQ3LCAxMTk4NTQsIDY1MDE3LCA5ODM5NTMsIDY4NDI4LCA2NjY2OCwgMCwgMCwgMTA5ODMsIDAsIDAsIAotICAgIDAsIDQxNTY3LCAwLCAwLCAwLCAxOTQ2MjQsIDExOTg1MywgMCwgMCwgODI4NSwgMCwgNDUwOSwgMCwgNjY0NzEsIDEyMjE2LCAKLSAgICAwLCA0MDk4OCwgOTI1OTIsIDc0ODA5LCA0MTcyNywgMCwgNDI4NDgsIDIzOTYsIDkxNzc2NiwgMCwgNzQwMTgsIDkxNzUzOCwgCi0gICAgNjQ5NDAsIDcwMjcsIDM4ODYsIDAsIDQyNDU3LCAxMTkwMDgsIDAsIDk5NiwgNjgxMjMsIDk0MDU4LCA0MjQ5LCAwLCAKLSAgICA5MTc1OTQsIDExNzA3LCA4MjIyLCAwLCA3OTM5LCA5MjQ1NCwgOTI0NjAsIDEyNzgwMSwgOTE3NTkyLCAxMjgzNTksIDg1MzQsIAotICAgIDEyNzE1NCwgNDA5ODMsIDAsIDk4MzI0MCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMTU0MCwgOTE3NTQ5LCAKLSAgICAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIDAsIDAsIDkxNzU1OSwgMCwgMCwgMTU2MywgMTI4MDM0LCA5NjE5LCAKLSAgICA5ODM5NDAsIDAsIDAsIDEyNzg3MiwgNzEzNjMsIDU4MDMsIDc3OTcsIDYwNzAsIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCAKLSAgICA2NTAwOSwgOTgzOTQyLCAxMjU2NywgMTI4NzAzLCAwLCA0MTQxMiwgMCwgMCwgMzYwNywgOTIwMCwgMTAwNDYsIDk2MTIsIAotICAgIDQyMTUzLCA4MjE4LCA5NDg1LCAwLCAyMDMyLCA3ODM1NCwgMCwgMCwgMCwgMCwgMCwgNDMwODUsIDYwNTcsIDUwOCwgCi0gICAgOTM5NjgsIDEyODAxNSwgNjc5NjgsIDAsIDkyNDA1LCAwLCAwLCA2MzgsIDYwODMsIDExOTA3MiwgMCwgMCwgMjMwNSwgCi0gICAgNzgzNDgsIDY4MDk2LCAwLCA2MDU2LCA2NjU5LCA2Nzk2OSwgMCwgNjA4NSwgMCwgMCwgMzkxNSwgNDE2MzQsIDAsIDQxNjM5LCAKLSAgICA2MzkxMiwgMTE5NDEsIDAsIDQwMjgsIDE3ODcsIDQyMTgwLCA0MzA5NiwgNDM3NTMsIDMyNDksIDE3NjgsIDkzOTgyLCAKLSAgICAxMjMyOCwgNTAxLCA5Mzk4NSwgMTA2MDEsIDAsIDU4MywgMCwgNDE5NzcsIDAsIDY2MDA0LCAxMTkzNTAsIDY1MDUsIAotICAgIDc0MDEwLCAwLCAxMzA2NCwgNTUyNjcsIDEyMDgxMCwgNjUwMCwgNTUyNiwgNjUwNDksIDAsIDczNzY0LCAwLCA5MjM3NiwgCi0gICAgMTI3NDUsIDk2NzgsIDAsIDEyMDU4NywgOTg2OSwgMTI4ODE1LCAxNzcxLCAwLCA4OTM2LCAwLCAwLCA0MjA4LCA3ODM0MSwgCi0gICAgNzg1NjcsIDc4MzQyLCAwLCA5ODM0NTYsIDc0MTAxLCAwLCAxMTc2MiwgMCwgOTI0MjIsIDc3OTk3LCA2ODAxMCwgNjY0NzUsIAotICAgIDAsIDUwMjcsIDc4MTcyLCAxMjg4NzgsIDAsIDUwNjksIDczODYyLCA1MDI4LCA5ODk3LCAwLCA3MzczOSwgNTAyNiwgCi0gICAgOTgzMjUzLCA2ODYzOSwgNjMzMSwgMTAwNzksIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgNzgxMzgsIAotICAgIDExOTM2MSwgOTgzNTY0LCA0MzEwNiwgNTAyOSwgNjUzMDksIDE1ODAsIDM1OTgsIDY4NDI0LCA0MTA3MCwgNzc5MDMsIDAsIAotICAgIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCA5ODM2NzksIDEwNjAwLCA5MTc4NjcsIAotICAgIDYyMCwgNDEwMDEsIDYwMjgsIDAsIDQyODkyLCAwLCA3NDgyMiwgNTAyNCwgMTIwODI5LCA0MTAwMywgMCwgNTAyNSwgCi0gICAgNjk4OTIsIDk4MzIwOSwgMCwgMTE4ODg1LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDk4MzU4NywgMTE1OTksIDEyODIwOSwgCi0gICAgMTE2MDIsIDYyNDMsIDExNTc0LCAxMTU4MSwgMTE1OTcsIDExNTk4LCA2MjUzLCA2MTA1LCAxMTU4NCwgNzQxOTUsIDExNTY5LCAKLSAgICA2NTI3NSwgODkwNiwgMTI3MDk2LCA1NzU1LCAyNjM2LCA5ODMyMjcsIDEwODE1LCAxMTYxOSwgMjMwMSwgNDE1NDAsIDc4MTUsIAotICAgIDExNjE2LCA2OTc5LCAxMjA4MCwgNzcyMSwgMTE2MDQsIDc4NjksIDE1OTIsIDAsIDQyMTUyLCA3ODQ5OCwgNDEwNDgsIAotICAgIDkxNzc2MywgODI5LCAwLCA5MjQwNiwgMTk5NTAsIDAsIDEyNjQ4MiwgNjYxNiwgMCwgMTE4ODc1LCAxMDk1MywgMzkxLCAwLCAKLSAgICA2OTc4NSwgNDgyLCA0MjI5NiwgMTE1ODgsIDAsIDQzNjA2LCAwLCA2ODM5NywgNjYzNzAsIDc0NTA2LCA0MjMzNSwgCi0gICAgOTgzMTg4LCAwLCAwLCA3NTM4LCA1MzE1LCAxMjA2NDQsIDQyNDkxLCAwLCA0MjA2MSwgMTI4MDg4LCA0NTc2LCAwLCAKLSAgICA2ODQxNywgNDM4MDksIDQyNzcsIDAsIDQwMzksIDY0NDcyLCA0MjMzOCwgMzY4LCA0MjA1OCwgMzk2MCwgMTEwNDMsIAotICAgIDExMzM3LCA3ODIwOSwgOTE3ODIwLCA2Mzk4OSwgMzk1OCwgMTIxMzIsIDE4NDksIDAsIDk5MjEsIDQyNDUxLCA0MjUzLCAKLSAgICA0MTE0NywgNDIwNjQsIDExOTU5LCA0MjQwNCwgNDExNjAsIDAsIDM2MTgsIDc4MzM4LCAwLCA0MzMwMCwgNTE1NiwgOTI2MjksIAotICAgIDAsIDkyOSwgNjgyNywgNDIwMzUsIDQyNDM3LCAxNTU1LCAwLCA4NjkxLCA2NjQzNSwgMjIxNSwgNDE2NjIsIDk0MDEwLCAwLCAKLSAgICAwLCAwLCA5Mzk1MiwgNDU3OCwgNjQ1MTMsIDQxNjY0LCA5ODM3MzQsIDQyNTc4LCAxMjg3OTQsIDQxNjYxLCA3ODcxNSwgCi0gICAgNDMyNjcsIDkzNTYsIDAsIDAsIDAsIDEyODYsIDEwMTY2LCAwLCAwLCA2NDcwNywgOTgzMTI3LCA0MjQ3NiwgNzczMCwgCi0gICAgOTgzODU5LCAxMjg1MjIsIDQyNDgzLCAwLCAwLCA0MjMyNCwgNDIyOTEsIDEwMDIwLCA0MzM1OSwgMCwgNjY0MSwgNTI1LCAKLSAgICA0MTYyNywgOTE3OTIzLCA4NzYzLCAxMjgzMDQsIDQxNjI4LCA1MzMsIDExOTMxLCA2NTIyNSwgODMyMSwgNDI1MDQsIAotICAgIDQyNTgxLCAwLCA2OTE1LCA0MjMxMCwgNDM3NywgODU1OSwgMCwgNzQzNjAsIDAsIDEzMTkzLCA2NDM1MCwgMTE2NjYsIAotICAgIDg2NzksIDQxOTI0LCAxNTc2LCA3NzM1LCA5MjM5OCwgMCwgNzM4NDAsIDk4MzA5MiwgMTEzNzQsIDc4MDQzLCAxMDg4OSwgCi0gICAgNDM0NjEsIDc3NTcsIDQyNDYyLCAxMjAyMjYsIDEwMDI5LCA2NjQ5MywgMjcxOCwgNDE2OCwgNzM4NDIsIDEzMzA4LCAKLSAgICAxMjAxMTIsIDAsIDExNzksIDQ0NDAsIDAsIDc3OTQ4LCAzNjMsIDExMDE1LCA3Nzk0NywgNzc5NDQsIDY0Mjk2LCAxMjcwOTAsIAotICAgIDY2NjkyLCAxMjA4MjYsIDAsIDY2NDkyLCA2NTkzLCA2NDYyNSwgNDE5NjMsIDkyMTc3LCAxMTkzMjksIDAsIDEwMDEzLCAKLSAgICA2NDQzNCwgOTI1MjAsIDEyNzA5NSwgOTQ5MiwgMTE3ODIsIDY0MzgyLCAxMjgzMywgNzc4MzAsIDAsIDEyOTcsIDQxNjMwLCAKLSAgICA2MzAsIDEyNzA5NCwgMCwgMTIwNzc0LCA5MjQ2NSwgMTA0MywgNDM2NTIsIDY2MjIzLCAxMDA5MCwgMCwgMTI4NjY0LCAzMTMsIAotICAgIDkxNzU2MywgNDE4ODEsIDAsIDQyMzExLCA3NDQ1LCAwLCA1NzUwLCAxMDc1OSwgOTQxOSwgNTUyMjIsIDk0MDUsIDExMjY4LCAKLSAgICA0MjkxOSwgOTM5OCwgODUyNiwgOTM5OSwgOTQyMiwgMCwgNjY0OTUsIDAsIDAsIDEyNzIzOSwgNDE3MTgsIDEwNzA3LCAKLSAgICAxNjAzLCAwLCAxMTkwMDMsIDAsIDYzMSwgNzc5NTIsIDY5NzAzLCAxMzE2MSwgNjUyNzIsIDAsIDEwNTQ2LCA3NDIxMCwgCi0gICAgNzgxMDEsIDExNjAwLCA3Nzk2MSwgMjc5NywgNzM4MjEsIDQyNDI3LCAzMDYsIDcxNCwgMzA1OCwgNDIzODEsIDc3OTYyLCAKLSAgICAxMjcwODAsIDEyMzUxLCA0MjM5NSwgMCwgMTE2MDcsIDAsIDQyMjgyLCA3Nzk3MSwgNzc5NjcsIDkxNTcsIDczNzY1LCAKLSAgICA2NjM2NCwgNDI0MzMsIDc3OTY0LCA3NjAzLCAxMjgwMywgMTgwLCA0MjE0MSwgMCwgMTIwNjEyLCA2NjQ5NCwgMTI2NzQsIAotICAgIDgyNDQsIDM2MiwgOTI0MzksIDAsIDgwMzcsIDQzNzc3LCAxMTUzNSwgMCwgNzQ4NDUsIDUxODUsIDcxNjUsIDU1MjEsIAotICAgIDEwMzM0LCAyMDkzLCA3MTMyOSwgMTAzMDIsIDEyODExMiwgMTAxMDQsIDEwMjcsIDUxODEsIDAsIDAsIDEwNTIzLCAxNDQ2LCAKLSAgICA0MjMyMCwgNDE2NDYsIDk5MSwgNTE4OSwgNDI0NzIsIDQxNjQ3LCAxMjAxMDUsIDE3MjIsIDU1ODEsIDQyODk4LCAzNDA1LCAKLSAgICAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCA5MjQ0NywgOTgzODE5LCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIAotICAgIDQzNjgyLCAwLCA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgNzc5MTEsIDAsIDQxOTkxLCA5ODM4OTMsIDAsIDc2MzAsIAotICAgIDk4NDYsIDc2ODQsIDEwMzUwLCAwLCAxMTc0LCA3Nzk4MSwgNDI3MzMsIDc3OTc4LCA3Nzk4MCwgNjY0ODUsIDc3OTc3LCAKLSAgICA0MjI3NywgNzc5NzQsIDQyNDU2LCA2NTY2NywgMTI3MDM3LCAxMjMzMCwgMTI4MjcyLCAwLCA0MjQxNywgNDIzODMsIAotICAgIDY2NjMwLCA0MTM0NCwgNjI5MywgMCwgNjYyNTIsIDc3OTg0LCA3NDQ0MywgMCwgMTAyMDksIDgzMTMsIDQxOTUsIDc0NDM1LCAKLSAgICAxMzE2LCA2NjY5MCwgMTIwMDMyLCA2MzMyLCA2NDg5NCwgMCwgNjU4NzEsIDc4MDYwLCAxNzM2LCA5ODM2ODQsIDM5MDEsIAotICAgIDEyMjI4LCAxMjAxNTEsIDY1MjAwLCAzMzgzLCAxMDQ0NiwgNzg4NDEsIDY5MywgOTEzMCwgMzE0LCA2NDE0OSwgNDI0MjAsIAotICAgIDExOTQ5LCA5ODM2NjksIDEyMDE1MiwgMTEwMjYsIDEyODc4OCwgNTMzMiwgNjk0MCwgNjQxNTQsIDEyNjM1LCAxMjcwMDcsIAotICAgIDQyNzA2LCAxNzUxLCAyNzMsIDgxNjUsIDEzMTY2LCAxMjA3NjMsIDc4ODQwLCA3MTM2OCwgMTI4MjQsIDAsIDQ1MjgsIAotICAgIDUzMjAsIDYzMDEsIDQzNjYyLCA2MTMzLCA5MzM5LCA5NDYzLCA0MjM0NiwgMTA5MjIsIDY0NTYwLCAzNzU3LCAwLCAwLCAwLCAKLSAgICA2NTg2OSwgNzM3NjAsIDI1NjksIDAsIDIzMjYsIDY1NzQwLCAyNTY1LCA0MjQ1OSwgNzU5NiwgNzkyMSwgOTgzODY4LCAKLSAgICA3NDA5NSwgMTI3OTgxLCA0MTg0OCwgMjU2NywgNjYwMDYsIDAsIDQwNDQsIDkyNjQ2LCAwLCAxMjIzMywgOTgzODcxLCAKLSAgICAxMDIzLCA0NzQsIDAsIDExOTgxOCwgMCwgMCwgNDI0ODcsIDY1NTU2LCAwLCAxMjc4NjYsIDQyMjk1LCAwLCAwLCA3MTMyMiwgCi0gICAgOTI1MTgsIDk4MzUsIDY2NDk5LCAwLCA1NDE3LCAxMjI3NSwgMTA4OTUsIDAsIDI3NCwgMCwgMTg1OCwgMCwgMCwgNTUyNTEsIAotICAgIDEwMTE4LCAzMTMzLCAxMjgwMDgsIDczNzk1LCAwLCA5NjEwLCA4MDY4LCA4MTk3LCAwLCA2OTksIDAsIDQxNjY1LCA1ODY4LCAKLSAgICAwLCA5MjY5NSwgNDIxODIsIDc1ODEsIDE5OTQwLCA0MzY2OCwgNDE2NjcsIDEyODA1NywgMCwgMTkyMywgNjU1ODMsIAotICAgIDY1ODAyLCA5Mzk3MCwgNjQ1OTcsIDQzNDQ0LCAxMTkxODQsIDkyMTk3LCAwLCA2NDY0LCA3MDM2LCAyOTk2LCAxOTM3LCAKLSAgICA5ODM3NTEsIDAsIDQxODM1LCA0MDQ3LCA0MTg0MiwgMCwgNjQxMDcsIDAsIDAsIDExMDE3LCAxMjA2MDEsIDAsIDI5MywgCi0gICAgNzc5NjYsIDkyMTY5LCA2NDc5MSwgNDE4MjcsIDQyNDY2LCA0MzQyMiwgMTA1NzksIDg1NjAsIDcxMzUwLCA2NTQxMywgCi0gICAgNzc5NjMsIDQ4MDMsIDEyOTY0LCAxNzM5LCAxOTQxLCAzOTAwLCAwLCAxNzEzLCA3Nzk2OSwgMCwgNzM5NTcsIDExNDA3LCAKLSAgICA0MjQ0MSwgNDE5NzEsIDYyOTcsIDEyMDA5OCwgNjQxMDUsIDEyODA4MCwgNDI0ODEsIDExNzE2LCA2NjQ3MywgNzE3OSwgCi0gICAgNDIyODksIDAsIDY0MTAzLCA5NjksIDAsIDkzNTIsIDAsIDYxNjUsIDY0MTAwLCAwLCA2NjMyLCA3Mzg2MSwgNDI0MDIsIAotICAgIDc0MzI3LCA3ODA2LCAwLCA4OTE0LCAwLCAwLCAzMTgzLCAxNDM1LCA2NDg3NiwgMjk2OSwgNjA0NiwgNjQ0NDEsIDYyMDgsIAotICAgIDY3ODQ5LCA1NzQ2LCA3Mzc0OSwgMCwgNjQ0MTYsIDQyNDIyLCAwLCA5ODMwNDYsIDcwODIsIDczNzc1LCAzMzgsIDUwNTksIAotICAgIDE5NDcxOSwgMCwgNDIzMjgsIDEwNzY3LCAwLCA4MTE1LCAwLCA3NDc1OCwgMCwgODIyNywgMjA3MywgMTIxOCwgOTE3NzkwLCAKLSAgICAwLCA2NTg0OCwgMCwgMCwgNjk4NjMsIDAsIDEyNjk4NywgNDQ4NiwgMCwgMCwgMCwgMTA5MjUsIDAsIDAsIDAsIDk4MzU4NiwgCi0gICAgNDIzMDksIDEwMjU3LCA2NTE5MSwgMTAyNzMsIDAsIDEwMzA1LCA0MjQ2MSwgMCwgNDIzNDksIDg4MzIsIDc4MDUxLCAKLSAgICA2NDEyNywgMTA2NDQsIDQyNjYyLCA3ODgyOCwgNDIyNzgsIDc0NDUxLCAxMjY5ODgsIDY5ODc0LCA3Nzk0LCAwLCA0MjQyOSwgCi0gICAgNjM3NywgNDIzMTYsIDExOTAyNiwgMzY2OSwgMzk2OCwgNDI0NjgsIDcxMzE5LCA2OTY1OCwgMCwgNjU0MDIsIDExOTU4MSwgCi0gICAgMCwgMCwgNjQ5MzMsIDAsIDQxOTYwLCA2Njk5LCAwLCAwLCAxMjgzNTQsIDY4MjMsIDQyMzkxLCAxNTg4LCA2NTQwMCwgCi0gICAgODQwOSwgNzgyMjMsIDE5OTY3LCA2NTM5OCwgNzg3LCA3MTMxNSwgOTE3OTM5LCAxMjc3NDQsIDYxMTUsIDIwNzgsIDQxNjU0LCAKLSAgICA0MjQ4MCwgMCwgOTI2NTAsIDQxNjU1LCA2NTQwMSwgNDM5NzUsIDAsIDAsIDAsIDY0NCwgNjU1MDAsIDQxNjU3LCAxMDc3OCwgCi0gICAgMzY1OSwgOTUzMywgMTg0LCAxNTUzLCAxMzEwNywgNjU0ODQsIDY5NjQ4LCAxMDUwMiwgNzQ0NTcsIDAsIDAsIDQxNTU0LCAwLCAKLSAgICA4MjIwLCA5MTc5NDMsIDQxNTU3LCAwLCAwLCAxMTA3MCwgMTE5MjIxLCA1MTU3LCA0MDIwLCA3Mzg1OCwgNDE1NTUsIDk1MTQsIAotICAgIDY0ODE4LCA2NTEwMywgNjQ2NDEsIDY0MzAzLCA3ODEzMSwgNzUyMCwgMCwgNzQzNzcsIDExMDI5LCA2NjY1MSwgOTgzMDY4LCAKLSAgICAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgOTgzNzk4LCAxMjczNDgsIDEyMDA5NiwgNzQ2MDIsIDk5NTUsIAotICAgIDExOTU1NywgNDA1NSwgNDI4MTcsIDAsIDY1MjEyLCAxMTcxNSwgMTIxOTAsIDEyMzE5LCA3ODYzMCwgMCwgNzg2MzEsIAotICAgIDk1MDIsIDY1NDI3LCAwLCA2NTQyNCwgMTI2MDcsIDAsIDk3MzQsIDY1NDI1LCAwLCAwLCAxMjczNTcsIDc4ODM1LCA5MjQxMCwgCi0gICAgMTAxMTIsIDEwODI3LCAwLCA5ODY2LCA3NDUyNywgNjY2NzUsIDAsIDg2MjUsIDY0MzQ2LCAxMTI5MCwgMTA0NzcsIDAsIAotICAgIDg2MzYsIDk4MzkyNywgODMxNSwgNjU0NDQsIDk4Mzc5MywgMCwgNzQ1OTUsIDYxNTIsIDAsIDAsIDY2MjksIDEyNzEwOCwgCi0gICAgMTIwMTcxLCAwLCA3NDU4OSwgNDM5OTMsIDAsIDY5NzkwLCA2NDQzNSwgMCwgNDM2OTAsIDExMDQ2LCAxMTQ5MCwgNDI3MzAsIAotICAgIDQ0ODUsIDEyNzEwNywgMCwgNjQ5MjYsIDAsIDAsIDAsIDU4NjksIDEyNDM3LCA0MjcyOCwgMCwgNzA0MCwgMzU4OCwgMCwgCi0gICAgMTI4MjUsIDAsIDAsIDEyNzI1LCAwLCAxMjcxMDYsIDc4NjQyLCAyMjMsIDAsIDY5Njc1LCAxMjAxNjYsIDQyNDQ0LCAwLCAKLSAgICA2NDQ5OSwgNjUyNDUsIDAsIDExNzEsIDAsIDY5NzE3LCAwLCAxODA1LCA4NzcyLCA0MzgyMCwgMCwgOTkzMCwgNjUyNDcsIAotICAgIDc4NjE5LCAxMjAxMTEsIDIzMzgsIDAsIDExODg1MywgMCwgNDI2NzYsIDAsIDY0ODAwLCA2NTIzNiwgNjc2NDQsIDY4MTI2LCAKLSAgICAxMjEzLCAwLCA2NDA3NSwgNzk3LCA2NDA3NCwgODczNCwgNDIxMiwgMTI3MzY5LCA2NDM4NywgNDExNSwgMCwgNTAwNSwgCi0gICAgNjQwNzAsIDY0MDczLCAxMDY3OSwgMCwgNzc5NTQsIDk0MDIsIDY0Mjc2LCA0MjYsIDAsIDAsIDgyNTEsIDEwMTM2LCAKLSAgICA2NTQzNiwgMCwgMjEyMCwgNDMzMDIsIDEyMjQsIDAsIDY1NTc2LCA3NDE5MiwgMTA3MDEsIDE3NjQsIDMxMDEsIDEyNzgxNSwgCi0gICAgMTI4NTgsIDEyMDE1OSwgMCwgMTEzNzMsIDYzNzgsIDEyNzg1OSwgMTIwMTAzLCA4NjYzLCA5MzEyLCA0MTY0NCwgNDUzOSwgCi0gICAgMjEyOSwgMCwgOTIyMiwgOTgzNzM4LCAwLCA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIDAsIDEyNzI0LCA2NjM1NywgCi0gICAgNDIzMzEsIDY0OTM1LCAwLCAwLCAxMjkzLCA3OTQ3LCAyMTMyLCA5ODM3NjcsIDc0NTkzLCAxMjAzMDgsIDI0NTQsIDQyNzE3LCAKLSAgICAzNjEzLCAxMjg4MzcsIDAsIDAsIDY1ODg4LCA4ODE2LCAxMDk3OCwgMTA4NDAsIDAsIDEwNjY4LCAwLCA0MzA4NywgMTI1OTUsIAotICAgIDEyMDMwNCwgOTgzMTE0LCA4ODIyLCAwLCAxMTU3LCA2NDkwMywgODYzOCwgMCwgMCwgMCwgMCwgNjk4NDgsIDgyMzUsIAotICAgIDEyMDMxNiwgNDQwNSwgMTAwODYsIDEyMDI0NywgMCwgNjkyMTYsIDAsIDY1NDMwLCA3MTMyMSwgNjA3OSwgNjgxNywgCi0gICAgMTA3NjQsIDEyNzkxMCwgNjQyOTEsIDEyODA1MSwgOTk4LCAxMjAzMTIsIDExMDYyLCAxMzE3LCA2NDMyNywgMTU1OCwgMCwgCi0gICAgMTk5MSwgNzg4MiwgNDIyNTQsIDAsIDQxNzAwLCA1MzAsIDAsIDEwNDI4LCAxMTkzMzUsIDEyMDAyLCAxMTkzMzYsIDU3NDIsIAotICAgIDQzMDc2LCA0NjkyLCA2NDYzMCwgNDE4MjMsIDQwMDcsIDUwMDQsIDExOTMzNCwgNzg5NiwgNzUxLCA2NTk1LCA2NTk2LCAKLSAgICAxMjAzMjUsIDY2MzczLCAwLCAwLCA2NDkwOCwgOTI2OTEsIDYzMTEsIDAsIDEyMDA0LCAxMTkxOTIsIDEyMDQ5LCA0MzEwOCwgCi0gICAgMTIwMzI2LCAwLCA0MTcwNSwgOTIxODgsIDY1OTgsIDAsIDY1OTksIDEyMDMzNCwgMCwgNDIxNDgsIDExODgyNSwgNjYwMjcsIAotICAgIDAsIDY1OTcsIDk0MTIsIDgzNDAsIDExODI0LCA2NDc0NSwgMjI4MSwgNjk5MDQsIDAsIDE5ODgsIDU0MDcsIDY3ODY1LCAKLSAgICAyNDMwLCA0MTY3OCwgMCwgMTIwMjQzLCAyMzM2LCA5ODM5MDMsIDAsIDc4ODcxLCAxMjA0NDIsIDk4Mzc2OSwgMTkyMSwgCi0gICAgMTA5NDcsIDE5OTI3LCAwLCA2NTQwNiwgMCwgMTk5MTMsIDQyODQsIDEzMjE3LCAwLCA0Mzc4OSwgMTI4NDEsIDkyMjksIAotICAgIDEwOTU2LCA0MjI4NSwgNDE2NzQsIDE5OTY0LCA0MTY3OSwgNjUwODQsIDM1MjEsIDAsIDU3NzQsIDgzMjUsIDAsIDY1NDAzLCAKLSAgICA5ODMwODksIDE4NTQsIDEwNzk0LCAwLCA2NzY2MCwgNjk4NDYsIDAsIDc4MzU5LCA1MjgwLCAwLCA0MzQ0LCAxMjkwNSwgCisgICAgNDM4MjUsIDcxMDg1LCAxMTkzMzcsIDUyMzYsIDQwOTc5LCA5ODMxNDAsIDcxODc0LCA4Mjg2LCAxMjg1MzcsIDM5MzYsIAorICAgIDExOTMzMSwgMTE2OTksIDQxMzQ3LCA2OTczOSwgMTMyMzUsIDg4NDIsIDQxMjQ4LCAwLCA0Mzc5LCAxMzIzOSwgMTI2OTIsIAorICAgIDc5NjksIDEyNzI2NiwgNzIxOSwgNzE4NzUsIDEyODI1MSwgMTIwNTA5LCA5MjkwNywgNjYyMjQsIDczNCwgMjk3OSwgCisgICAgMTIwMzAzLCA2NTYxOSwgOTg3MiwgOTU3LCA2NDkyMSwgMTg0NiwgNjY2MzEsIDQxNDc3LCAxMTkyNTYsIDcxMTkyLCAKKyAgICA3NDUxMSwgNDE3NzAsIDE2NzAsIDY0NDIsIDEyMDMxNywgNDI0NDYsIDUzNzksIDEyMDMxOCwgNDExNjMsIDc0ODMyLCAKKyAgICAxMTEzNiwgNzE4NzYsIDExNTA2LCAxMjgzOTUsIDQyODQxLCAxMzI2NywgMTI4NDIxLCAwLCA0MTc3NSwgMCwgNzEzMCwgCisgICAgNDE3NzMsIDAsIDEwNjYzLCA3MDEzMCwgMCwgOTgzOTc0LCA2MTUxLCAxMjExMCwgNDI2NzMsIDY1NTcyLCA2NTI5MywgCisgICAgNjUyNTAsIDEzMjY1LCAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDEyNzk2NCwgOTI2NDcsIDU4MDgsIDY1OTIyLCA2NzgxNCwgCisgICAgMTI5NjcsIDY2MDQxLCA1NjEyLCA0NTgzLCA3MDAwNCwgNDMzODYsIDY4MDk3LCA2NDU3NSwgMTI2NjM3LCAxMTk2NSwgCisgICAgMTk0OTMwLCA2ODM1OCwgNzE0ODMsIDY5Nzg5LCA0MjY1MywgODMxODEsIDY4MTAyLCA5Njk4LCA3ODE0LCA3MTA0NSwgCisgICAgMTE5NjUxLCAxMjg1MTQsIDAsIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIDY2NDE4LCA2NjYyMSwgNzQyMTksIDY2NDEyLCAKKyAgICAxMjg4MjIsIDExODk5NywgODAxMiwgNTY3NCwgMTIzNTMsIDY2NDIxLCAxMjM2MSwgNTY3NywgNTU4OCwgOTIzNDgsIAorICAgIDQxOTI1LCAxMjgxMjQsIDQxOTIwLCA1NjczLCA4MzExMywgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIDU2NzIsIAorICAgIDEyOTQsIDAsIDc4MDU5LCA5ODM5NjIsIDQyNTExLCAxNzI3LCAxMjA3MjUsIDQyNDM2LCAxMjE0MDAsIDEyMTE4MywgMCwgCisgICAgNzQyMjIsIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDU4NzMsIDc0MDkwLCA1ODI2LCA1NTIzMiwgNTgxMywgCisgICAgMTI5MDMyLCA5Mjg4OSwgNTg0MSwgNTgzNywgNTUyMzQsIDE5NDg2NCwgMzEwNSwgMTI4MjksIDU4MzgsIDU3OTYsIDAsIAorICAgIDExOTU5MiwgNTc5MywgMCwgNTg2NiwgNTc5NywgNDEwMTEsIDU4NjUsIDkzMDA5LCA3OTU2LCA1OTgsIDAsIDY0NjQ5LCAKKyAgICA1ODA2LCA0MjM5OCwgMCwgOTAzNywgNTY3MSwgMTIwMDQxLCA5ODMyNTcsIDgzNDc4LCA5ODM5MjksIDgzMTg0LCAwLCA4NDcsIAorICAgIDEyODI0MiwgOTUyOSwgODMwMTgsIDY2NjU3LCA2OTgwLCA3ODQ4MywgNDM1MTAsIDc4MTIyLCA5MjIxOSwgMCwgNjc0MTEsIAorICAgIDc4NDg2LCA4MzAxNywgMTI3MjYwLCAxMjAwMzksIDQyNjgzLCA3MTg0OCwgOTgzMDU1LCA3MTE0LCAxMjY1MjEsIDAsIAorICAgIDQzMTkwLCA2NTQ2MywgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCA1NjUxLCAyOTI5LCA2NzkyLCA0MzIwMSwgNzUwNTksIAorICAgIDE5OTYzLCA1Njk4LCAxOTQ3NjgsIDk4MzI3MiwgOTI5MzMsIDcxODg3LCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDY5NzI3LCAKKyAgICA2ODE0MSwgODM3MiwgMCwgNjUxMTYsIDAsIDcwMzA0LCAxMDE3NSwgMTAzODgsIDQyNzk5LCA5NDEwMCwgNDEwMTMsIAorICAgIDEwNTY4LCAwLCA5ODM2MTgsIDI4NjksIDkxNzg0MywgNDEwMTUsIDc0NDczLCAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgCisgICAgNDE4MDIsIDk4MzY1MiwgNDI2MDgsIDc4NDY4LCA5ODg0LCA0NzU5LCA3Mzc2OCwgMTIwMjk2LCAxMDI2NiwgNDEzNTksIAorICAgIDExNzAsIDQzMzY1LCA2OTgxMCwgNzM5MDgsIDE2MDksIDkwMiwgOTI3NzMsIDYzOTM2LCA4MzI0NywgMTE2NjEsIDgxMjIsIAorICAgIDU4MTgsIDgzMjQ1LCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgMjU1NCwgNTE1OCwgNTcxNCwgMjIxMywgOTgzOTY2LCAwLCAKKyAgICA4MDcsIDQzMDc5LCA3ODA5MiwgNzg0NzUsIDk3NiwgNTUxMSwgNjQ1NTMsIDEyMDg2MywgNDIxNTUsIDk4MzMxOSwgNDEzNTYsIAorICAgIDc0MTEwLCAxMTg4MDEsIDcxMDQzLCAxMjAwODAsIDg2NzYsIDk4MzI5MywgOTQwMDIsIDU1ODIsIDQ1MSwgNjM5NDEsIAorICAgIDU3OTgsIDkzNDksIDQyMDE4LCAxMjc4NTgsIDEyODUyMSwgNzg2ODEsIDQzNjA5LCA1OTA2LCAxMjA1NTMsIDE0NDAsIDAsIAorICAgIDEyODg1MywgNzQ5MzMsIDcwMzQyLCAxMTAwNSwgMTk0Njk5LCA2NjY1NiwgNjYwNDQsIDE5NDYzNiwgMTIwMDc5LCAKKyAgICAxMjg3OTMsIDAsIDQzMzkzLCAxMDA5NCwgNzAxNjQsIDExNTI5LCAxMDg1NywgOTI5NDQsIDY2NDM2LCA2NTQ2LCA5MywgCisgICAgODEwMiwgNjczMjMsIDY4NDA1LCAwLCAxOTQ3MTQsIDgxNzEsIDExODg4OCwgMTE5MDk3LCA4Mjk5NiwgOTE3NTQzLCAzODMsIAorICAgIDcxNTQsIDQxNjU2LCA0MzQ5NSwgOTQwNDAsIDY3MTYyLCA1MTg3LCA3MTI5NiwgNzEwODYsIDExMjg2LCA2ODYyMCwgCisgICAgNjQyMTcsIDAsIDUyMzIsIDAsIDQxMDA5LCAxMjczNzcsIDQxMDA1LCA5ODM4MTAsIDAsIDEyODQ3MSwgODI5MiwgMTI1MTA4LCAKKyAgICA0OTgwLCA4ODYwLCA3MTA1NCwgMTAwMjgsIDY1MjkxLCA3MDc2LCAxMzE4MiwgMTk0NzA1LCA3NDkxMiwgMTI3OTc0LCAKKyAgICAxMDYzMSwgMTEyNDQsIDc5NzIsIDY4MDQyLCA3ODc4NSwgMCwgNzkwMCwgMTI4NTkwLCAxMTMwOSwgMzgwNiwgNDE5OCwgCisgICAgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCA5MjU1MiwgMCwgMTI5MzEsIDEyMTExMCwgNDI2ODQsIDc0Mjg1LCAyMDg4LCAKKyAgICA2NDIxMywgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgNzQ3NzEsIDEyNzkyMCwgMTk0NzEzLCAxMjgzNiwgMCwgCisgICAgMTEzODAwLCA3NDM0MiwgODU5MywgMCwgMCwgNjg0NDUsIDEzMjU1LCAxMjEzMzMsIDEyODg0MywgNzQ2NCwgMCwgNjU4NjUsIAorICAgIDAsIDE5NDY1MCwgMTI3MTQ0LCA5MjM5NSwgOTM0MiwgMTIwNDY0LCA3MDM3NiwgNjQ1MTYsIDAsIDc4NzkyLCAxMDEyOSwgCisgICAgNDEwMDcsIDc0Mzc1LCA5ODM3MDEsIDQwOTk1LCAxMjIwOSwgNDEwMTIsIDgzNTAxLCAwLCA4MzI1NywgNjk3MjQsIDQwOTkyLCAKKyAgICA5MjI2NCwgMTE5MTM2LCA2ODY1MywgNDM1NTgsIDU1MjIsIDc1MDI2LCA2MSwgMTIwOTU5LCA3NDEwNSwgMzYzMywgCisgICAgMTIwMDgyLCA2NTE2MiwgNDEyMzQsIDEyMDg5LCA3ODI4MSwgOTc3MSwgODMyODEsIDEzMjUxLCAxMjg3MDEsIDAsIDYyNjIsIAorICAgIDI3ODQsIDQyNzQzLCA3MTA3OCwgODEyNiwgNjY0ODMsIDAsIDAsIDQ0MSwgNDI2MjEsIDAsIDAsIDQxMDAyLCA0MDk5OSwgCisgICAgMTE5NjIzLCA0MzI2NiwgNzEwOCwgMTk0Nzc5LCAxMDg5MCwgNzQ0ODEsIDY1ODM0LCA4MzI0LCAxMTg5NDQsIDY0NDE3LCAKKyAgICA3NDgxNywgMTI3NDY1LCA2NDczNywgNzQ4NTMsIDk4MzY1OSwgODkzMCwgNjY2NzgsIDY3MjE2LCAxMTkzLCAxMDA1NiwgCisgICAgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAxMjA5OTIsIDEyMTE3NSwgNzc0MywgODM1MDIsIDEyNDk5NiwgNzc5MDQsIAorICAgIDc3OTEzLCA3NzkwNSwgOTAzNCwgNjAzOSwgMTI5MTM5LCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIAorICAgIDAsIDAsIDE5NDYzNywgNDI4MTUsIDkyOTg0LCA0MTk2NiwgMCwgMTI3NDcxLCAwLCAxMTc5MiwgNDMwNjQsIDQxMDI1LCAKKyAgICA5MTEsIDc1MzksIDAsIDQwOTYzLCAxMjAzMzksIDY1MTU5LCA2NDM5MCwgMCwgOTgzMTYwLCA1NTIwLCAxMTY2MiwgCisgICAgMTI3NDczLCA2NTMzMCwgNDI4MTIsIDk4MzIxNSwgMCwgMTIzMjYsIDcxMDgxLCAxOTQ2MzgsIDQyODA4LCAxMjgzMzcsIAorICAgIDkzNDgsIDY0OTAxLCA5ODM4NjEsIDk4Mzg5MiwgMTIxMDUwLCA2NjgzOSwgMCwgMCwgMTIxMDA0LCA0MzcwMiwgOTgzMTQ4LCAKKyAgICA1ODU3LCA2NTM0MiwgOTI3MjcsIDExOTEyMCwgODM1MDMsIDg2NDQsIDEyMTIyNywgODMzMzIsIDExMTg2LCA3NDI5NiwgCisgICAgNDE5MDksIDAsIDY2OTAwLCAyNzkxLCA2OTY2MywgMTg5MSwgNjk4MjQsIDY2Mzk3LCA0MTkwNywgNjY2NDcsIDExODkzOSwgCisgICAgODc2MSwgMTI5NDIsIDU3NDgsIDkyNzEzLCAxMDc3MywgNzA4NjgsIDgzMTc0LCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgCisgICAgODUyMCwgMTMxNDYsIDEyNzA5NiwgNjM5MzEsIDgzMjc1LCA2NTkwMiwgMjg4MiwgODMzMzQsIDAsIDEyODQzLCA0NTIwLCAKKyAgICAxMjAzNDUsIDkyNDU5LCAwLCA5ODM2NjAsIDAsIDczODYwLCA4MzMzNSwgMCwgNjQzNDUsIDAsIDkyMDEsIDEyODMxNCwgCisgICAgNzA4NzEsIDAsIDkxNzg2NCwgNDM2NzksIDEyMTAyNiwgNjUxMTcsIDkyMjcwLCAwLCAxMDQyNywgMTIxNTA2LCAzODQ0LCAKKyAgICA2ODQyLCA5NzU1LCAxMTEwLCA2NjEyLCAxMjIyMiwgOTMwMzAsIDEyODc4OSwgOTgzNjM4LCA5MjkyOCwgNzgzLCAxOTQ5MzUsIAorICAgIDkyMTg1LCAxMjcyMjEsIDczODU1LCA2ODAzMiwgNjUwNTYsIDM2MjAsIDQxMTgwLCA2ODM3OCwgNDU1NiwgNjc4MzksIAorICAgIDY4NDgwLCAxOTQ5MzMsIDc0MjUwLCAwLCA2NzY1NywgMTA1MTAsIDQzODIsIDY2NDgyLCA2NzgyMywgMCwgMTI3NTI3LCAKKyAgICA5MTc3LCA4OTAyLCA5Mzk1OCwgOTgzOSwgMTIwNzAwLCAxMjg5MSwgOTgzNzU1LCA5ODM2MzYsIDYzOTk5LCAyMDE2LCAKKyAgICA0MTkxNywgOTc4OCwgNjM5MjgsIDY3Njk2LCAxODYyLCA2NTgwMCwgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgCisgICAgODU3OSwgNDE5MTQsIDc5ODEsIDAsIDY2MDE3LCA0NTA4LCA2NDg4MywgOTI0NTYsIDkyNTIyLCAxMjc4MTQsIDEyMDgzNCwgCisgICAgNjQ1OTIsIDc0Mjc2LCA2NzY4OCwgNjc4NCwgNzg3ODgsIDY4MTgxLCAwLCA3MTIxOCwgMTEzODIxLCA2NjM2NiwgMTIxNDcsIAorICAgIDkwMjQsIDY2Mzc4LCA2NjQ3MiwgMTI0OTc2LCA2NDI4OSwgNjUyODksIDc4MTUxLCA2NjY1OCwgNzE5MzUsIDY0NTA5LCAKKyAgICA3ODE1MiwgMTEzNjk3LCAxMjY1MDUsIDExMDUxLCAxOTQ5MjgsIDAsIDExMzU1LCA2NTg4NSwgMTIxMzE5LCAxMjc5NDEsIAorICAgIDQxMjE0LCAwLCAxMjI5OSwgMCwgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgOTk2MywgNjg2NDksIDEyNjYwOSwgNDA0MCwgCisgICAgMTIwNTcwLCA2MTY3LCA3NDUxOSwgNjM5MjIsIDY1OTQsIDk4Mzc0MCwgMCwgMCwgMzYyNCwgNDMwMzYsIDEyOTQ3MiwgCisgICAgNjM4NywgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgNDE5NTUsIDEyNjk5MCwgNjM5OTMsIDEwNDQwLCA5NjExLCA2NTYwNSwgCisgICAgNjgwMywgMTIwOTY4LCA3NzM4LCA2Mzk4NiwgMTE0NDYsIDYzOTg0LCA5MjY0MSwgMzQzNSwgNzgxNjQsIDQzODE0LCAKKyAgICA0MzgxMCwgNzAyOSwgNjQyNTgsIDQxMjkyLCAxMTg4OTgsIDEyNzQ4LCA0Mjc0MiwgOTUxNywgMTE1MTgsIDgzMjkyLCAKKyAgICA3ODc5MCwgOTgzMzgxLCA2Nzk5MywgNjM5NTYsIDQyNDU4LCA2Mzk1NCwgNjM5NTMsIDYzOTYwLCA5NTkxLCA0NTE2LCAKKyAgICAxMDIxNywgNjgzNzAsIDExNDY5LCA2OTY5NywgNDIzMDYsIDI3MjMsIDExODk0NywgMCwgOTIzMjUsIDAsIDY4MDc5LCAKKyAgICAxMjEzNDQsIDExMzk3LCAyODgwLCA3MDgwNiwgOTE3ODI5LCAyODcyLCAwLCA4MzMyMSwgMzQ5OCwgNDM3OCwgOTE3NTM5LCAKKyAgICA0MjcwLCAwLCA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCA1MjMwLCAxOTQ5OTEsIDAsIDk4MzA0MCwgMTk0OTEwLCAKKyAgICAxMjEzOTIsIDgxNjEsIDM5MywgMTIwMTMsIDAsIDk4MzE5OCwgMTE5MTAzLCA0MTUsIDYzOTY0LCA2Mzk2MywgNDIzNDUsIAorICAgIDkyMzEwLCA1MTgzLCAxODc3LCA0MjQ5OCwgMCwgMjkyNywgNzEwNTgsIDYzOTYxLCA0NDcyLCA5ODMyOTksIDAsIDc4MTU5LCAKKyAgICA2OTY5OSwgMTI3MzAxLCA0MjM0MCwgNDc1NiwgMTI4MDc4LCA3MDgxLCAxMDczMCwgNzY5MSwgMTAzMzEsIDYzODMwLCAKKyAgICAxMTk2MjUsIDQyOTIyLCA0MjEwMywgODYyOCwgOTgxMywgNzg2NTQsIDQyNDUzLCAxNjA0LCA5NTY1LCAxMDUzOSwgNjk3MDEsIAorICAgIDY1NzY0LCA0MTQxNSwgNjU3NjcsIDEyOTE5NiwgODQ1NywgNDIzMDEsIDExMzcyLCA2NDg3MywgMTE5OTIsIDAsIDAsIAorICAgIDYzOTgwLCAxMTgwMSwgMzYyMiwgMTk1MDkyLCA2NDMzNiwgMTIwMTcsIDEwNDYzLCA2Mzk4MSwgNDk2NywgNjQxODksIAorICAgIDE5NjYsIDQzNjI4LCA5ODM5MDgsIDk4MzI5NCwgODMyNjcsIDEyMTA1MiwgNjM5NzEsIDQzNDcsIDQ0MTYsIDQyMDk4LCAKKyAgICAxMTAwOSwgMTA2OTQsIDYzOTczLCA0MDIsIDkyMjEzLCAxMzE0NywgMTI4NjkyLCA0MjEwMCwgNjQ2NDYsIDEzMjI4LCAwLCAKKyAgICA0MTg3NSwgMzUxNSwgNzQyNTIsIDExODA1LCA5ODMxNTcsIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgODMzMjMsIDE5NDY3MCwgCisgICAgMTIwODM2LCA5MjM1MSwgNzQ4MTMsIDc0NDI1LCAxMTI5OSwgMTU2MSwgMTE4ODgxLCA5MjMxOCwgNjQ5NDIsIDkzMDIxLCAKKyAgICAxOTQ3MzMsIDcwNDExLCA3ODcxOCwgMTIxMTQwLCA3NDMwMSwgNjg4MjUsIDExMjgwLCAxMjg0ODksIDY5Nzg0LCA3NDA2MCwgCisgICAgMTI4MzkyLCAwLCAxMTk2NjQsIDUxNDUsIDEyNDg2LCA2NTAxOCwgNjY1MTYsIDU0MDksIDEyNzM3OSwgMTI0OTg4LCA3NDAyLCAKKyAgICA1Mzk5LCA5Njg1LCA3NDA4OSwgNzk1MiwgNTQwMSwgMCwgNjY2MTYsIDY2ODMyLCA5Mjk2NiwgMTIwODUyLCA1NDA1LCAKKyAgICAxMjc4NzUsIDY0ODY2LCAxMjA5NjUsIDExOTU4MywgMTE5MTIyLCA3ODc4NCwgNzQyNDgsIDExMzMwLCAxOTQ3MjMsIAorICAgIDY0NjkwLCAzMjU0LCA5ODMxNjYsIDEyODk0NCwgOTI2OTYsIDQyMzkwLCA0MzY3OCwgMTk0NzI1LCAxMjkxMjcsIDY1MDc3LCAKKyAgICAxMjkwNTksIDYzODgsIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCA4MzAyMSwgMzM3NywgMCwgMCwgCisgICAgNzQzNTQsIDE5NDU3OCwgNzgyMjgsIDk4MzcyMiwgOTgzNzYyLCA0MjY5MSwgMTI3ODg2LCAxMjA5NDgsIDY4MDkxLCAKKyAgICAxMjg0MDQsIDc1MDIzLCAxMzc5LCAyNDYsIDc0NjQ5LCA5ODM3NjEsIDM3ODgsIDkyNTIwLCAxMTA0MSwgNjcyMDIsIAorICAgIDY2MzA0LCAwLCAxMjEyMTMsIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDEyODUwMCwgMTI3MDQ2LCAwLCAwLCAxMTM4MjIsIAorICAgIDEwNjU2LCAxMjUwNDIsIDY1MjE0LCA5Mjk4NywgNDI1NjcsIDkyMjE3LCAxMzE2MywgOTgzMjA0LCAxMjA4MzEsIDc0NTk3LCAKKyAgICAzMTgyLCAwLCAwLCAwLCA2NTAzNCwgNjU4ODksIDQyMTY5LCA0NzU1LCA3NDI0NCwgMTk0NTc0LCAxMTQ0MywgOTgzNjAzLCAKKyAgICA2NjMxOSwgNjg0MSwgNjA4LCA2MDAsIDAsIDEyMTksIDM5MzQsIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDExOTExNywgNzQ0ODUsIAorICAgIDQyNDQyLCA2NTQ3MCwgOTgzOTA3LCA2NDIwMiwgMTMxNjAsIDc3NTksIDQyNDgyLCA0ODUsIDY5OTgyLCA3MDUwNSwgOTgyOCwgCisgICAgMCwgNDM1MDUsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIAorICAgIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCA2ODMxNSwgMCwgMCwgNzQwNDEsIDgzMTQ0LCA3MDA0NSwgNDM1MzksIDU0MTEsIAorICAgIDQyMTk2LCAwLCAwLCAwLCA5MTUwLCA2NjgzMSwgNDIzOTMsIDEzMDg2LCAxMzEwLCA2Njg0OCwgOTMzNywgMTIwNTIsIAorICAgIDEwNjQzLCA1NTI3MSwgMTI4OTUxLCAxMjE2NiwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgNjU2MTEsIDgzMzE2LCAKKyAgICAxOTQ4MjIsIDE5NDc1NiwgNzQzMTAsIDY1NTQsIDk0MDU5LCAxMTkxNCwgNTQ1MiwgMCwgMCwgOTI3NzIsIDAsIDkxNzg4MCwgCisgICAgMTk0NjgxLCA5MjU2MCwgMjcxMywgMTE5NTY0LCA5NjUwLCA0MzMzMCwgMTIxMDMzLCAxMjg1MDUsIDE0MDYsIDEyNTAwNywgCisgICAgNDI5MjUsIDc0NjM4LCAxOTQ1OTMsIDY2MjU2LCA0MTQzLCAxMjgxMzYsIDE5NDc2MiwgNjU3NDgsIDQxNDEsIDk2ODIsIAorICAgIDY1Mjg3LCAxNTA4LCAxMjcwMTMsIDg3NzksIDEwNTY5LCA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgNDE0NSwgCisgICAgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIDU1MjUwLCA5MTg1LCA5NTUwLCA0MjkzMiwgNDM0MDMsIDAsIDAsIAorICAgIDE5NDc4MywgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDk4MzIwNSwgMTI5NTUsIDEwNTk2LCAyODg4LCA4MzE5MCwgMCwgCisgICAgMTIxMzU0LCA5NjU3LCA5MDE5LCAxMjExNTQsIDAsIDI4NzgsIDUzOTAsIDAsIDE5NDk2MSwgNjczMjUsIDY4Njc5LCAKKyAgICA0MzU1MiwgNzUwMSwgNjMyOCwgMTk0OTYwLCAxMDQyOSwgMTAzNjUsIDAsIDAsIDQxOTQ2LCA3NTAzLCA1MjM1LCA4MDMsIAorICAgIDY4MzgxLCAwLCAwLCA4OTg2LCA0MzgzOCwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMTk0OTcwLCAxMjY2NDcsIAorICAgIDAsIDExODg4NywgMTc5MSwgNTE5MSwgOTI4OCwgNjQ4MjIsIDI4OTIsIDgzMTkyLCA0MzM5NCwgNTU1LCAwLCAwLCA2NjY0NiwgCisgICAgMTI4OTgwLCAxMTkwMDIsIDEzMTUxLCA3NDUxMiwgNzI4OSwgNzQwNTUsIDY0MTYxLCA4ODU0LCA2NDE2MiwgNTg1OCwgCisgICAgNDE5MjcsIDEwNTgyLCAxMjA0NTcsIDE3ODQsIDEzNjEsIDEyMDkyMSwgMTIxNTE2LCA3OTA1LCAwLCA2NDg2OCwgMTI4ODEzLCAKKyAgICAxMzE1OCwgOTIxNjYsIDcyMTEsIDcxODg0LCA5MzcxLCA3Mzk3MywgMTI4NDQxLCA2ODI4LCAxNjI1LCA3NjY0LCAxMjg3NjgsIAorICAgIDEzNDIsIDY4NDQwLCA2NDE3MSwgOTI2NDIsIDEwOTAzLCA5ODM0OTYsIDAsIDkyNTI3LCAwLCA3MDQzOCwgNDQ4MiwgCisgICAgNDE2MDYsIDEyODkzNCwgMTI1MDMzLCAxMjE0NzUsIDAsIDY0MzgxLCA5ODM5NDAsIDE5NDk3NCwgMTk1MDkwLCA0MjI0NSwgCisgICAgMTI2NDY3LCA0MTk3MiwgMCwgNDQ0LCA5ODM0MzksIDkxMjcsIDY2Njg3LCA2NjYxOSwgMTI2NDg5LCA3ODAyNSwgMCwgCisgICAgMTEzNDksIDQwOTkxLCA5MTc1NzAsIDAsIDcwMTc3LCAxMjA4MzAsIDAsIDExOTcsIDEyODI4MiwgMTE0OSwgNjgzMTYsIDAsIAorICAgIDk4MzI1OCwgNDA5OTAsIDQzNzY1LCAxMjEyNjIsIDM0OTIsIDkxNzkwNiwgMTE4Nzg0LCAxMjkwMjYsIDAsIDk4MzU2NiwgCisgICAgMTI4MzgsIDY3MjA4LCAxOTk0OCwgNDE2NzcsIDMwOTksIDAsIDAsIDQxMDg3LCAwLCAwLCA5ODMyNjEsIDExOTA1OSwgCisgICAgMTIwMzYsIDQxMzA5LCAxMjgxNjEsIDAsIDgxNTIsIDAsIDQxNTUwLCAxMjIyNywgOTgzNjEzLCAwLCAxMjgyOCwgMTI3NTExLCAKKyAgICA3NTAxNSwgMTIwOTY0LCAxMjA3MDgsIDAsIDAsIDEwMzg2LCA3NTA2OCwgMTE5OTU1LCAxMjczMDMsIDkyNjgwLCA5ODMxMzQsIAorICAgIDY4MTU0LCAxMjc4NzYsIDE3NDMsIDAsIDAsIDkyMjM5LCA2NTE4NiwgOTE3NTcxLCAwLCA5NjA2LCAwLCA3MDA1MiwgCisgICAgNjQ0MzksIDEyODg2NCwgNjgwNjIsIDkyNjg2LCA5ODM4NzUsIDAsIDQzODY2LCAxMjg4ODEsIDAsIDMzOTUsIDkzNjIsIAorICAgIDEwODc4LCA0MzI2MCwgMCwgNzgzNjIsIDY0ODMwLCAwLCAxMjUwNDYsIDQxMDkxLCAzNDI2LCAxMzQ0LCA4ODcwLCAKKyAgICAxMjExMDAsIDcxMzQ0LCA0NzM1LCAxMTExMSwgNjExOSwgMTI4MjIsIDQyNjk5LCAwLCA5ODM4MjQsIDc0ODE4LCAxNDIzLCAKKyAgICAxMjg5MjMsIDQyNjM3LCA0MTA4MCwgMCwgMTIwMzksIDEwNTU5LCAxMjg2MzQsIDExODg5MiwgMCwgOTQ3MiwgNjc3MzQsIAorICAgIDExOTI5LCAxMjY1NTcsIDcxNzAsIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCA3MTQ3NSwgMCwgOTI1MDEsIAorICAgIDEyNTA4MSwgNzgwNDYsIDY2Njk5LCA2NDQ0MCwgMTAwNCwgOTI1ODQsIDE5NDczNiwgNDMyMzQsIDY2MDA4LCAxMjYyNywgMCwgCisgICAgNjg0MTQsIDc0NjE0LCA0MzYxOSwgNDMzMDMsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgMTE3NzYsIDc1NTgsIDcwMTA5LCAKKyAgICA2NTYyNywgMCwgMTA3MTgsIDEzMTU0LCAzNDYxLCA5MTM5LCAwLCA5ODMwOTQsIDAsIDExOTAyMywgNjUzNjUsIDczODc3LCAKKyAgICA2NTYyOCwgNzgwMTksIDExOTI3MiwgODMxMTgsIDQxNzA4LCAxMjg2MCwgMjY0MSwgMTIwNjksIDEwODM4LCA1NDAzLCAKKyAgICAxMDM1MiwgNzAwODUsIDEwMDYxLCA0MzIzNywgMTI1MDU3LCA1MTQwLCAyMDksIDEyODg0NywgNDE3MDQsIDQxMDU2LCAKKyAgICA0MzA3OCwgMTI3Nzg5LCAxMTg4MDksIDY3MjMyLCAxMDg5OSwgNjU0NjksIDcwMTI1LCAwLCAwLCAyNDEwLCA5OTMsIAorICAgIDgzMTE3LCAxMjA1ODksIDEyMDY4OSwgNzg2OTMsIDAsIDAsIDcyMzIsIDAsIDExOTI1MywgMTI0OTYzLCA3MTEwLCA3NDQ2MiwgCisgICAgMjA2NiwgMTA0ODksIDQyMTY2LCA0MzQ2MywgMTA2NTksIDM2MDAsIDY4ODYzLCA0MjI0LCAxMzM2LCA0MTUxOCwgMTIxMzExLCAKKyAgICAwLCAwLCAwLCA0MTEzOSwgNjQ4MjAsIDkyNTM4LCAxMjk2NiwgNDExMzQsIDAsIDAsIDExOTE1MywgMTIwNDQxLCAyNzIsIAorICAgIDQyNjMsIDg3OTMsIDk4Mzg1NiwgMCwgNDE1MDIsIDEyODEzMywgOTgzLCAxMjU0OSwgMTI0OTQwLCAwLCAxMTkwLCA0MTA5LCAKKyAgICAxMzM1LCA4NDEsIDU4ODgsIDQxMzU4LCA2NDg2MywgOTU0NCwgNDM0ODEsIDAsIDEyMDkyNiwgNzAwMjcsIDIwOTksIDUxMjAsIAorICAgIDI0MDksIDc3OTksIDAsIDc0NDI0LCAwLCAxMjEwNDEsIDQ3MzEsIDkyMjc5LCA2NjYyOSwgMTI4MTI3LCA5MjUyNSwgMTI1NSwgCisgICAgNDE0OSwgOTI0NywgNzQ5NzcsIDk5MTMsIDk4MzgyOCwgMTIxMTAxLCA2NDkxNCwgOTE3Nzg3LCA2NTEwMSwgMTEzNzE0LCAKKyAgICAxMTY5NCwgOTI0NzUsIDExNjkwLCA1ODM1LCAxMjcxNjQsIDY2NjI1LCAxMDg0MiwgNDEzNTQsIDQyMTIzLCA0MzA5NywgCisgICAgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCA5MTc5MDAsIDgxODAsIDEyNTA1NSwgMCwgOTk3MiwgNzM4NjUsIAorICAgIDQ1MTksIDYxMTQsIDEwODk4LCA0MzA3MiwgOTI0NjUsIDAsIDkzOTYwLCA5ODMzMjQsIDEyNjU4MSwgMTA2OTUsIDAsIAorICAgIDc1NDAsIDAsIDg4MSwgNzg1NywgNjA2NywgNjUxNjQsIDAsIDkxNzg5NywgMTI5MTM0LCAxMzMxMSwgNjg0MDMsIDQxODU3LCAKKyAgICA2NDMyMSwgODM1OSwgODMyODYsIDEyNjg5LCA5ODMzMTIsIDExMjQ1LCAxMjgxMDUsIDk4MzMxNCwgNzE4NTksIDY4MTgzLCAKKyAgICA5ODM0MTUsIDE5NDgyOSwgMTI4NywgNTQzNiwgMCwgNzEwOTcsIDc0MTQyLCA5MjMyOCwgNzQxNTIsIDcwMjA1LCA2MDUxLCAKKyAgICAxMDQ5NywgNjk2NjgsIDg5ODUsIDEyMTA5LCA4Mjk2MiwgMTI4OTA4LCA5MzA0MywgMTIxMDEzLCAwLCAzNjUyLCAxMDUzNywgCisgICAgMTIwMjgyLCAxMjc2LCAxMjA0NDAsIDY1NDksIDI3OSwgNzM3NDUsIDAsIDEyODY2NCwgODMyNDQsIDE0ODksIDAsIDAsIDAsIAorICAgIDM4OTksIDEwMDcsIDQyMTI0LCA0MzgyOCwgNDIxMjIsIDkyMzM3LCA5MjM2NywgMCwgMTE5ODUsIDEzNDUsIDc4NjAwLCAKKyAgICAxMTk4MzIsIDkxNzU2MywgODk1NiwgNDMwODMsIDk0MDU3LCA0MjEzOCwgNzg2MTAsIDEyOTEzMSwgNjQzMCwgNzg2MDgsIAorICAgIDc4NjA0LCA3ODYwNSwgNjI4NSwgNzg2MDMsIDc4NjEyLCA3ODYxMywgNjU5NDIsIDQ5MiwgODY4NSwgMTI4NDgxLCAKKyAgICAxMjEyNzAsIDAsIDc1MDI3LCA0MzcxMiwgMjU4MiwgMTE0NzAsIDY0NTM4LCA3NDQ0LCA3ODYxNSwgNzg2MTYsIDIyOTcsIDAsIAorICAgIDczODM3LCAxMTk4MjMsIDI1MjcsIDExOTgyNCwgMTk3LCAyNzk5LCA5MjU5NCwgNDE5NDQsIDgzMTUyLCA5OTMzLCA3NDAxMSwgCisgICAgNjY1MTUsIDc2NywgNTUyNCwgNzAyOCwgMCwgOTIxNjgsIDExOTgyNywgMTE5ODE3LCA5Mjk1MCwgNzg2MzMsIDEwODk2LCAwLCAKKyAgICAxNzk5LCAxMjA0OTcsIDY5NzEsIDc0MzM2LCAxMjgzNDIsIDAsIDY1MzQwLCAxMTg5NzksIDQxNTUxLCAyNDM0LCA5NDAxOCwgCisgICAgMTE4ODIzLCA2NTM1MywgMCwgNDYzMSwgMTE4OTk2LCAwLCA2NDA3LCAxMTM3MzcsIDYzMzgsIDQzMjE0LCAwLCA3NTcwLCAwLCAKKyAgICAzMTkyLCAxMjAzMzAsIDg0MTQsIDk4MzM5MiwgOTM5ODMsIDE5NTA0MywgMCwgMCwgOTE2NCwgNjY2MTIsIDkzOTU5LCAKKyAgICAzMTcxLCA2NjIzLCA0OTYxLCA2ODM5NiwgODg2LCA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgCisgICAgNzAwNjYsIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAKKyAgICAxMDk0NCwgNDEyMDgsIDk4MzcxMywgNDExNjgsIDgxNzgsIDc0ODU5LCAzMzY3LCA5MjMzNCwgNDI1MTAsIDc4NjQxLCAKKyAgICA3ODYzNiwgNjgwNCwgNzA0NzUsIDE5NDcsIDkxNzU3OSwgMCwgOTI2ODEsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgCisgICAgNzQ3OTgsIDkxODEsIDY1MzU5LCAxMjUwNjUsIDgwMTcsIDExOTgzMSwgNjUwOTYsIDY2NzIwLCA2ODIyMywgNDM0NzUsIAorICAgIDkxNzU0OCwgNDkwOSwgMTIxMjYsIDEyNzU0MCwgMTIwNjk2LCA0OTA0LCA5Mjk2MSwgNDM1MDMsIDEzNjUsIDkyNTMsIAorICAgIDQyNzU3LCA0MzQzNiwgNzQ2MiwgMTI3NzcyLCAwLCAwLCA4MzE3MywgNjY4NDUsIDY0NDE1LCAxMjA1MDAsIDgzMTcyLCAKKyAgICA1Mzk4LCAxMjUwMzUsIDEyNzM4NiwgOTM5NTMsIDEyNzM2MiwgOTgzNzgyLCAxMTkwMTUsIDgzMTcxLCAxMjcwMDcsIDk0NzYsIAorICAgIDk4Mzg4NywgMTIwNjk1LCAxMjc2MywgMTI2NjAzLCAzNjI5LCAxMjA4NDQsIDEzMDA1LCAxMTE4MSwgMzYyOCwgMCwgMCwgCisgICAgOTI1MDIsIDM0NjksIDQyMTA3LCA0MjExNiwgOTE3NTc4LCA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgODUxLCA5MDQwLCAKKyAgICAxMjAzNzIsIDY0NjY1LCA0MzA4NiwgOTExNCwgNDM4NzAsIDQyNTgzLCA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAKKyAgICAxMTk4MjEsIDMyMzYsIDExMzE3LCAxMjUxLCA3Nzc3LCA0MTg1MiwgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIAorICAgIDEyMDI2OSwgMTAyNTksIDk4NjUsIDY1ODIxLCA3NTA0NiwgNjAxOCwgNjgyOTMsIDEyNTAxMCwgMTIyNzYsIDExOTExMCwgCisgICAgNjgzNzIsIDEyODI1NSwgOTIyNTksIDcxODkzLCAwLCAxMTk4MjgsIDEwNDY3LCAwLCAyNDQzLCAxMDkxOCwgNzgyMTcsIAorICAgIDc3OTQ3LCAxMDAxLCA5MjQxLCAxOTI3LCAwLCAxMjQ5NDIsIDczOTg3LCAxMjc4ODIsIDcxODk1LCA5MzAxMiwgNzk5MiwgCisgICAgNzc5NDMsIDQzOTM5LCAxMjg2NywgMTI4NjQ5LCA4MjYwLCA3Nzk0NSwgNzUxOSwgMTE1MDUsIDEyMjc0LCA4OTA0LCA1MTgsIAorICAgIDY1ODU3LCAxMjgzNjEsIDEyODY3NCwgMTMyMDQsIDQzODcsIDg1NywgMTIxMjUyLCA2NTM2OSwgMCwgOTIzMzYsIDQzMTI1LCAKKyAgICAxMTg0MiwgMCwgNzEwNzIsIDEyMTQ2MiwgMCwgNTEzNiwgMTk2OCwgMTI4OTA2LCAxMjY2MjcsIDEzMzcsIDY0OTY3LCAKKyAgICAxNjI5LCAwLCA3OTYsIDY2NTA2LCAwLCA3NDEyMywgMTI4NzcsIDEyMDY0OSwgNDIzMTQsIDQzMzg4LCA0MzgyNiwgNDM5NDQsIAorICAgIDYxMjAsIDQ3OCwgNjUxNTEsIDY4MTI4LCAxMjgxNDcsIDQzMDgyLCA2MDE2LCAwLCA0MjI4NCwgNzE4OTQsIDQyNzYsIAorICAgIDEyMDYsIDM2MTksIDQxNjM4LCA2OTY5MSwgMzg0MywgMTIwMTEsIDg4NTMsIDMzNjEsIDAsIDQ5MCwgMTA3MTUsIDc1NzgsIAorICAgIDY4Mzg0LCA5Mjc1NCwgNjUzNTAsIDEwNTMwLCAxMjM0OCwgODY1MywgNjgyNDUsIDQyNDM1LCA2MTU0LCA5NTUxLCA2NTM1NCwgCisgICAgNzg1MjIsIDc4NCwgNDIzOTcsIDMzNCwgMTIxMDg0LCA0MjQxNiwgNjUzNTYsIDY1MjczLCA0MzkzNywgNjk2NjYsIDQ0NDIsIAorICAgIDEwMzY0LCA0MzkzNSwgNzc4LCA0MTYyNiwgNDI0NTUsIDc5ODksIDc0MDYzLCAzMjI3LCA2OTkwNywgNDM5MzIsIDExMTAyLCAKKyAgICAyOTE1LCAxMTUwMiwgNDEwMjIsIDQxNzAyLCAxMDMwOSwgMTI3MDM1LCA3NTAzMiwgMTIwMjczLCA2OTc1LCAwLCA1NDE1LCAKKyAgICAxMjE3NiwgOTgzNzA5LCA3NDE5MywgMzQ2MiwgNDM5NDAsIDQyNjI5LCA3ODY5MSwgNzExNzUsIDQzOTQyLCAxMjcyNTYsIAorICAgIDk3NTksIDEyNzI1NSwgNzAwNTcsIDEyMTQ0MiwgODExNCwgNzg2OTgsIDc4Njk3LCA3ODY5NiwgNzg2OTUsIDg3MTAsIAorICAgIDQyNDk1LCAxMTg5NTYsIDcwMTg5LCA0MDUxLCAxMDQ2MCwgNDMzNjQsIDcxMjA2LCAxMzU2LCAxMjE2MSwgNDI3MTMsIAorICAgIDEyODg1NywgMTI3MjY4LCAxNjE5LCA5NzAzLCA0MzE1MiwgNDI0ODksIDQyMTEyLCA2NDQzNiwgMTg3NSwgMTA4MDgsIAorICAgIDQyMTA5LCAxMjAyODQsIDQxODYwLCA2NDg2MiwgMTMzMDUsIDY0OTA3LCA1Mjg5LCAxMzE0NCwgMTI4NjU4LCA5ODMyMjQsIAorICAgIDU1NzUsIDk2NzUsIDcxMTI5LCA1OTQwLCAyMjYsIDI2NDksIDYzMzYsIDk4MzI3OSwgOTI5NzksIDQzMjM2LCAzMzgyLCAKKyAgICA0MjQ0OSwgNjQ5OCwgMTY1OCwgMTE5MzYsIDc4MjMyLCAxMTM4MTQsIDExMjY5LCAxMDE1MSwgNzM3NTksIDQzMTAwLCAKKyAgICA2OTg4OCwgNjU1MDgsIDk4MzE0MywgMCwgMTIxNDUxLCA4OTM1LCA3ODIzNCwgMCwgOTgzNzU3LCAwLCA2MTYsIDc0NzUzLCAKKyAgICA2NTE3OCwgNDY4NCwgNzg3MDEsIDExOTY1MywgNzQ2MzEsIDEyNjU1MSwgMTI0OTkyLCA2MDQ4LCA3NDQ2MCwgNDIxMTAsIAorICAgIDczOTY1LCAxMDg3MCwgODU1NywgMTEwNTQsIDY4NjY0LCA3NTA1MSwgOTY4MSwgNDQ3NSwgNjc0MjksIDQxMTQyLCAyMTAwLCAKKyAgICAxMjUwMjQsIDEyMDczMSwgNjAzNSwgNzM3OTYsIDc2NTEsIDY4NDYsIDY0NDQzLCA5ODM5NTcsIDk4MzI5NiwgOTE3OTg3LCAKKyAgICAwLCAxMTg5NjYsIDc0MTQ0LCA0MDk5NywgNjg0ODgsIDEwMzkyLCAxMDMyOCwgNDA5OTgsIDQzNDYyLCA3NDQ4OCwgNzExODIsIAorICAgIDk4MDAsIDg5NzksIDAsIDEzMzA3LCA0MTAwMCwgMCwgNTExNCwgNjQ4NywgMzM4NiwgMTI5MDk0LCAxMDM0NCwgMCwgNTExNSwgCisgICAgNTM5NCwgNDMyNDYsIDc4MjQzLCA1MTEzLCA2NjUwNSwgNDEyMDAsIDEyODU4MiwgNDQyNSwgMTk0NjY5LCAwLCAwLCAKKyAgICA0MzA3NCwgNzM3OTksIDEyOTA3NiwgNzgxNDcsIDUxMTIsIDEyMTczLCA3ODU0NSwgMTI4NzcxLCA2NjgyNCwgNjUzMzgsIAorICAgIDk4MzY3NiwgMCwgMTE5NTgyLCA0NDc0LCAxMjg5MzYsIDQzMDkzLCA0Mzk2NCwgMTU4NywgMCwgMTI3MzcyLCA2NDQ3NSwgCisgICAgMTE5MjE3LCAxMzY5LCA5ODM2NzIsIDk5NTksIDc5MjcsIDQzOTYzLCA0NTYwLCAxMjA3OTMsIDY3ODExLCA5MjI3NywgCisgICAgOTgzNjIxLCA2NDk0OCwgNDQzMCwgNDM5NjEsIDQyNjAxLCA0NTE0LCA2NjQzNCwgOTM5NTUsIDgxOTQsIDY1NDYyLCAKKyAgICAxMDYyNiwgMTA5NjUsIDEyMDkwNSwgODg5MywgOTgzMzAzLCAxMjU0MiwgMCwgNjUzNDEsIDY3NzAzLCA2NTgyOSwgNzkyNSwgCisgICAgMTE5ODIyLCAxMDQ3NSwgMTEzODI1LCAxMjcwMTEsIDEzNTIsIDExMDY5LCA3NzA3LCAxMjc1NjAsIDEyNjQ4NiwgNjUyNzksIAorICAgIDEyNzEwMiwgNjgyMDcsIDc0OTU2LCA3MDk5LCA2MDQwLCA2NzY4MSwgMTAwNzEsIDc4NTU0LCA5MzM2LCA0Mzc1MCwgCisgICAgMTIxMDc0LCA4ODk5LCA3Nzk4LCA2NDQ3NCwgNjQyNTksIDY5ODczLCA2NTE4OCwgNzgyMCwgNDMwMTgsIDEyNzA4MiwgCisgICAgMTI4ODk4LCA3NzQ2LCAxNDkyLCA3ODU1MSwgMTA4ODQsIDc1MDc1LCA2Njg2NiwgNTEyNywgMTEyODUsIDQyNTAxLCA1NDk1LCAKKyAgICA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAyOTk5LCA2MzQyLCA2ODYzNiwgNzQzMDQsIDM3MSwgNjQzNzMsIAorICAgIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDc1MDI4LCAxMjg2MDMsIDYzMjMsIDEyOTA2NSwgODIyNCwgMTI4NDE3LCA4OTM4LCAKKyAgICA2MDQzLCAxMjczOCwgMTIwNjcxLCA5ODMwNzYsIDUzMjEsIDY4NjQ1LCAxOTQ3OTgsIDEyMDI1MSwgMjU4OSwgNzQzMzIsIAorICAgIDE2ODksIDc4MDIsIDQ2ODMsIDc0MzE4LCA0MjcwNCwgOTI5NDAsIDExOTA1LCA5ODM2MTUsIDAsIDEyODUxNiwgMTI4MTYzLCAKKyAgICA3NDUxMywgNjA0OSwgMCwgNDAyNywgODM0LCAxMTg5NjIsIDE4MDMsIDk4MzgyMiwgMTUwMywgNzgzMzYsIDEyNzE3MywgCisgICAgNzEzMTIsIDU3MzEsIDEzODEsIDIzODcsIDEyNjYxMCwgNzA4MDgsIDgyODksIDY0NTI1LCA2NTgxNywgMjg4MSwgNDMxNDIsIAorICAgIDAsIDk2MDEsIDI4NzksIDk2NjgsIDk3NjYsIDAsIDU3MjksIDEyOTExMCwgNzEyMzAsIDYwMzYsIDY0ODgxLCA0MDI2LCAKKyAgICA5MzYxLCAxMjcwOTEsIDI4ODcsIDcwMzg5LCAzNTI2LCA2Mjk4LCAxMTk4NTEsIDc3ODk3LCAxMjAwOTUsIDc4NTE5LCAKKyAgICAxMTg5NjQsIDg1NzIsIDYwMjEsIDc3ODk2LCAxMjgyODgsIDcxMTc0LCA0MzE1NSwgMCwgNzExOTcsIDMxNDYsIDEwOTU5LCAKKyAgICA5NDgzLCA4MzIxOSwgNzc4OTMsIDEwOTgxLCAxNjYsIDkxNzg0MSwgODYzNSwgOTE3ODQwLCAxMDYyMywgNDA4LCAxMTkwNTgsIAorICAgIDEyNzUwNywgMTMyOTgsIDEyNzI1MywgNzQyNiwgNDE2NDEsIDEyNzE3LCA5ODM3OTUsIDc2MDcsIDEwNjM5LCA0MzM5NiwgCisgICAgMTI5MzAwLCAxMTkwODksIDQxNjQzLCA3NDEzNCwgOTgzMDU0LCA4NzEzLCA0MTY0MCwgMTAyMjEsIDQxNjQ1LCA2NjI5MywgCisgICAgNjY0NSwgNjQ2LCA2NjcyNiwgNjY3MTEsIDQyMTI5LCA2ODI1NSwgNzc5MDEsIDM0NzIsIDg2OTcsIDAsIDEyMDkzNiwgCisgICAgMTIxMDY5LCAwLCAxMTg4NTksIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgOTI0MzIsIDY4MzM5LCAxMjg5NDMsIDQyMTM2LCAKKyAgICAxMjE0NDAsIDAsIDAsIDAsIDMyNDcsIDkyNDAyLCA2NTAxNywgMTI4Nzk0LCA2ODQyOCwgNjY2NjgsIDAsIDEyMTExMiwgCisgICAgMTA5ODMsIDAsIDEyODc4NywgMCwgNDE1NjcsIDExOTg1MiwgMCwgMCwgNzg0NDYsIDExOTg1MywgMTI3OTIyLCAwLCA4Mjg1LCAKKyAgICAxMjY1MTYsIDQ1MDksIDEyMTA0MywgNjY0NzEsIDEyMjE2LCAxMjg4MDYsIDQwOTg4LCA4MzIyMSwgNzQ4MDksIDQxNzI3LCAKKyAgICAwLCA0Mjg0OCwgMjM5NiwgMTI4MDgzLCAxOTQ4OTIsIDc0MDE4LCA5MTc1MzgsIDY0OTQwLCA3MDI3LCAzODg2LCAwLCAKKyAgICA0MjQ1NywgOTI4ODgsIDgzMjk5LCA5OTYsIDY4MTIzLCA5NDA1OCwgNDI0OSwgOTI0MTAsIDY5NjUwLCAxMTcwNywgODIyMiwgCisgICAgNzM4MjUsIDc5MzksIDcxMjEzLCA5MjQ2MCwgMTI3ODAxLCAxMjE0MDgsIDEyODM1OSwgODUzNCwgNjk4NTMsIDQwOTgzLCAwLCAKKyAgICAxMjE0MjEsIDAsIDcyMDEsIDEyNTYxLCAxMjA4NjYsIDQyMzcxLCAxMjU1OCwgMTU0MCwgOTE3NTQ5LCAxMDA1MiwgNDA5ODIsIAorICAgIDExOTg0MSwgMCwgMTQ4OCwgNzExNzcsIDAsIDE5NDgzMSwgOTE3NTU5LCAxMjg0MDEsIDAsIDE1NjMsIDEyODAzNCwgOTYxOSwgCisgICAgMTIwODQwLCA5MTc5MDUsIDEyMDk1NCwgMTI3ODcyLCA3MTM2MywgMzU2MCwgNzc5NywgNjA3MCwgMTAwMDYsIDEyODkyMiwgCisgICAgMjkyMiwgNjA4MiwgNzAxNDcsIDY1MDA5LCA5ODM5NDIsIDEyNTY3LCA2NjcxMiwgMCwgNDE0MTIsIDEyODEzMSwgMTE5NTkxLCAKKyAgICAzNjA3LCA5MjAwLCAxMDA0NiwgOTYxMiwgNDIxNTMsIDgyMTgsIDk0ODUsIDAsIDIwMzIsIDc4MzU0LCA4MzQ2MiwgCisgICAgMTE5MTMxLCAwLCAwLCA2NzgyNiwgNDMwODUsIDYwNTcsIDUwOCwgOTM5NjgsIDkyOTg5LCA2Nzk2OCwgMCwgOTIxOTgsIDAsIAorICAgIDEyODgzMSwgNjM4LCA2MDgzLCAxMTkwNzIsIDEyNDk1MCwgMCwgMjMwNSwgNzgzNDgsIDY4MDk2LCA5MTc3NzIsIDYwNTYsIAorICAgIDY2NTksIDY3OTY5LCA5ODMyOTAsIDYwODUsIDAsIDAsIDM5MTUsIDQxNjM0LCAwLCA0MTYzOSwgNjM5MTIsIDExOTQxLCAKKyAgICA5ODM3ODMsIDQwMjgsIDE3ODcsIDQyMTgwLCA0MzA5NiwgNDM3NTMsIDMyNDksIDE3NjgsIDkzOTgyLCAxMjMyOCwgNTAxLCAKKyAgICA5Mzk4NSwgMTA2MDEsIDAsIDU4MywgMCwgNDE5NzcsIDAsIDY2MDA0LCA2NjQxNiwgNjUwNSwgNzQwMTAsIDk4MzI1MCwgCisgICAgMTMwNjQsIDU1MjY3LCAxMTkxMTMsIDY1MDAsIDU1MjYsIDY1MDQ5LCAwLCAxMjk5MCwgMCwgOTIzNzYsIDEyNzQ1LCA5Njc4LCAKKyAgICAxMjExMDgsIDEyMDU4NywgOTg2OSwgODMxNTAsIDE3NzEsIDEyODk2NSwgODkzNiwgOTI5NjQsIDAsIDQyMDgsIDc4MzQxLCAKKyAgICA3ODU2NywgNzgzNDIsIDY3NzQyLCA5ODMyMDgsIDc0MTAxLCAxMjg2MDUsIDExNzYyLCAwLCA3MDA5NiwgNjgzNSwgNjgwMTAsIAorICAgIDY2NDc1LCAxMjAyNjAsIDUwMjcsIDc4MTcyLCAxMjg4NzgsIDExOTgzMCwgNTA2OSwgNzM3MzYsIDUwMjgsIDk4OTcsIAorICAgIDkyNzc0LCA3MzczOSwgNTAyNiwgOTgzMjU1LCA2ODYzOSwgNjMzMSwgMTAwNzksIDg5MzEsIDAsIDE0MTUsIDg4NjYsIAorICAgIDQxOTAxLCA3NDc5MCwgNzgxMzgsIDExOTM2MSwgOTgzNTY0LCA0MzEwNiwgNTAyOSwgNjUzMDksIDE1ODAsIDM1OTgsIAorICAgIDY4NDI0LCA0MTA3MCwgNzc5MDMsIDc2NTgsIDM0NDAsIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAKKyAgICAxNzE2LCA5ODM2NzksIDEwNjAwLCA3ODU1OCwgNjIwLCA0MTAwMSwgNjAyOCwgNzA0NDUsIDQyODkyLCAwLCA3MTExNiwgCisgICAgNTAyNCwgNzQ5NDUsIDQxMDAzLCA2ODEzNywgNTAyNSwgNjk4OTIsIDk4MzIwOSwgNzUwMzksIDExODg4NSwgMTI3OTU2LCAKKyAgICA2NTU1NywgMCwgNzQ1NDEsIDEyODkyNCwgMTE1OTksIDEyODIwOSwgMTE2MDIsIDYyNDMsIDExNTc0LCAxMTU4MSwgMTE1OTcsIAorICAgIDExNTk4LCA2MjUzLCA2MTA1LCAxMTU4NCwgNzAyNzMsIDExNTY5LCA2NTI3NSwgODkwNiwgNDM5NDUsIDU3NTUsIDI2MzYsIAorICAgIDcxMjAzLCAxMDgxNSwgMTE2MTksIDIzMDEsIDQxNTQwLCA3ODE1LCAxMTYxNiwgNjk3OSwgMTIwODAsIDc3MjEsIDExNjA0LCAKKyAgICA3ODY5LCAxNTkyLCAwLCA0MjE1MiwgNzg0OTgsIDQxMDQ4LCA5MTc3NjMsIDgyOSwgMCwgOTI0MDYsIDE5OTUwLCA2Njg4NiwgCisgICAgNjQxMzEsIDY2MTYsIDAsIDExODg3NSwgMTA5NTMsIDM5MSwgMCwgNjk3ODUsIDQ4MiwgNDIyOTYsIDExNTg4LCAwLCAKKyAgICA0MzYwNiwgNzExODUsIDY4Mzk3LCA2NjM3MCwgNzQyODIsIDQyMzM1LCA2OTc4NiwgNzI0MjEsIDgyOTk4LCA3NTM4LCAKKyAgICA1MzE1LCA4MzM2NywgNDI0OTEsIDkyOTAxLCA0MjA2MSwgMTI4MDAyLCA0NTc2LCAwLCA2ODQxNywgNDM4MDksIDQyNzcsIDAsIAorICAgIDM1NjMsIDY0NDcyLCA0MjMzOCwgMzY4LCA0MjA1OCwgMzk2MCwgMTEwNDMsIDExMzM3LCA3ODIwOSwgMTIwMjQ0LCA2Mzk4OSwgCisgICAgMzk1OCwgMTIxMzIsIDE4NDksIDAsIDk5MjEsIDQyNDUxLCA0MjUzLCA0MTE0NywgNDIwNjQsIDExOTU5LCA0MjQwNCwgCisgICAgNDExNjAsIDEyMTQ4MSwgMzYxOCwgNzgzMzgsIDE5NDkyNCwgNDMzMDAsIDUxNTYsIDkyNjI5LCA3MDM1MCwgOTI5LCA2ODI3LCAKKyAgICA0MjAzNSwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIDY2NDM1LCAyMjE1LCA0MTY2MiwgOTQwMTAsIDExOTI2MiwgMCwgCisgICAgMTI4ODI0LCA5Mzk1MiwgNDU3OCwgNjQ1MTMsIDQxNjY0LCA5ODM3MzQsIDQyNTc4LCA3MTA0OSwgNDE2NjEsIDc4MzUxLCAKKyAgICA0MzI2NywgOTM1NiwgMCwgMTk0ODgwLCA5ODM0MDEsIDEyODYsIDEwMTY2LCA5ODMxMTcsIDAsIDY0NzA3LCAxMjg5MjUsIAorICAgIDQyNDc2LCA3NzMwLCAxMTE1NiwgMTI4NTIyLCA0MjQ4MywgMTI5MDgzLCA3NDk0MCwgNDIzMjQsIDQyMjkxLCAxMDAyMCwgCisgICAgNDMzNTksIDAsIDY2NDEsIDUyNSwgNDE2MjcsIDkxNzkyMywgODc2MywgMTI4MzA0LCA0MTYyOCwgNTMzLCAxMTkzMSwgCisgICAgNjUyMjUsIDgzMjEsIDQyNTA0LCA0MjU4MSwgMCwgNjkxNSwgNDIzMTAsIDQzNzcsIDg1NTksIDEyODMyMSwgODU4NywgCisgICAgMTIxMzE4LCAxMzE5MywgNjQzNTAsIDExNjY2LCA4Njc5LCA0MTkyNCwgMTU3NiwgNzczNSwgOTIzOTgsIDAsIDczODQwLCAKKyAgICA4MzE1MywgMTEzNzQsIDc4MDQzLCAxMDg4OSwgNDM0NjEsIDc3NTcsIDQyNDYyLCAxMjAyMjYsIDEwMDI5LCA2NjQ5MywgCisgICAgMjcxOCwgNDE2OCwgNDM5MDQsIDEzMzA4LCAxMjAxMTIsIDAsIDExNzksIDQ0NDAsIDQzOTAyLCA3Nzk0OCwgMzYzLCAKKyAgICAxMTAxNSwgNDM5MDMsIDc3OTQ0LCA0Mzg1NywgODMwNDksIDY2NjkyLCAxMjA4MjYsIDAsIDY2NDkyLCA2NTkzLCA2NDYyNSwgCisgICAgNDE5NjMsIDkyMTc3LCAxMTkzMjksIDAsIDEwMDEzLCA2NDQzNCwgNzUwMTAsIDEyNzA5NSwgOTQ5MiwgMTE3ODIsIDY0MzgyLCAKKyAgICAxMjgzMywgNzc4MzAsIDAsIDEyOTcsIDQxNjMwLCA2MzAsIDEyMDk2MCwgOTgzOTIzLCAxMjA3NzQsIDcwMTY1LCAxMDQzLCAKKyAgICA0MzY1MiwgNjYyMjMsIDEwMDkwLCAwLCAxMjQ5NDUsIDMxMywgMTIxNDgzLCA0MTg4MSwgMTk0NjU4LCA0MjMxMSwgNzQ0NSwgCisgICAgNDM5MDYsIDU3NTAsIDEwNzU5LCA5NDE5LCA1NTIyMiwgOTQwNSwgMTEyNjgsIDQyOTE5LCA5Mzk4LCA4NTI2LCA5Mzk5LCAKKyAgICA5NDIyLCA0Mzg5NCwgNjY0OTUsIDY5OTkwLCA5ODM4ODUsIDkyOTkwLCA0MTcxOCwgMTA3MDcsIDE2MDMsIDk4MzcwMywgCisgICAgMTE5MDAzLCAwLCA2MzEsIDc3OTUyLCA2OTcwMywgMTMxNjEsIDY1MjcyLCA3MTA2NywgMTA1NDYsIDc0MjEwLCA3ODEwMSwgCisgICAgMTE2MDAsIDc3OTYxLCAyNzk3LCA0MzkyNCwgNDI0MjcsIDMwNiwgNzE0LCAzMDU4LCA0MjM4MSwgNzc5NjIsIDEyNzA4MCwgCisgICAgMTIzNTEsIDQyMzk1LCAwLCAxMTYwNywgMTI3NTI4LCAxMTE5OCwgNjY4MjEsIDc3OTY3LCA5MTU3LCA3Mzc2NSwgNjYzNjQsIAorICAgIDQyNDMzLCA3Nzk2NCwgNzYwMywgMTI4MDMsIDE4MCwgNDIxNDEsIDAsIDEyMDYxMiwgNjY0OTQsIDEyNjc0LCA4MjQ0LCAKKyAgICAzNjIsIDkyNDM5LCA0Mzg5MCwgODAzNywgNDM3NzcsIDExNTM1LCAxMjY1MzksIDQzODkzLCA1MTg1LCA3MTY1LCA1NTIxLCAKKyAgICAxMDMzNCwgMjA5MywgNzEzMjksIDEwMzAyLCAxMjUxMzEsIDEwMTA0LCAxMDI3LCA1MTgxLCAxMjg0MzUsIDUxMTcsIAorICAgIDEwNTIzLCAxNDQ2LCA0MjMyMCwgNjg0NSwgOTkxLCA1MTg5LCA0MjQ3MiwgNDE2NDcsIDEyMDEwNSwgMTcyMiwgNTU4MSwgCisgICAgNDI4OTgsIDM0MDUsIDAsIDE5NDY0NCwgNTUyMywgNDM5MTUsIDQyNjIwLCA5MjQ0NywgNzQ5NDMsIDk1NDksIDAsIDEwNTQ5LCAKKyAgICA0MzkyMywgOTY2MSwgNDI5MzMsIDc0ODg0LCA3NzkxMCwgNzgwNjgsIDQzOTIxLCAwLCA3MTE4NCwgOTgzMDcwLCA0MTk5MSwgCisgICAgOTgzODkzLCAwLCA3NjMwLCA5ODQ2LCA3Njg0LCAxMDM1MCwgMTI4NDUzLCAxMTc0LCA3Nzk4MSwgNDI3MzMsIDc3OTc4LCAKKyAgICA3Nzk4MCwgNjY0ODUsIDc3OTc3LCA0MjI3NywgNzc5NzQsIDQyNDU2LCA0MzkwOSwgNzQ0MzgsIDEyMzMwLCAxMjgyNzIsIDAsIAorICAgIDQyNDE3LCA0MjM4MywgNjY2MzAsIDQxMzQ0LCA2MjkzLCAwLCA2NjI1MiwgNDM5MDgsIDc0NDQzLCAxMjc4OTQsIDEwMjA5LCAKKyAgICA4MzEzLCA0MTk1LCA3NDQzNSwgMTMxNiwgNjY2OTAsIDc1MDcyLCA2MzMyLCA2NDg5NCwgOTgzMTU2LCA2NTg3MSwgNjcyNTAsIAorICAgIDE3MzYsIDk4MzY4NCwgMzkwMSwgMTIyMjgsIDEyMDE1MSwgNjUyMDAsIDMzODMsIDEwNDQ2LCA3ODI0MSwgNjkzLCA5MTMwLCAKKyAgICAzMTQsIDY0MTQ5LCA0MjQyMCwgMTE5NDksIDEyNzIwMCwgMTIwMTUyLCAxMTAyNiwgMTIwNTE2LCA1MzMyLCA2OTQwLCAKKyAgICA2NDE1NCwgMTI2MzUsIDEyNDk4MCwgNDI3MDYsIDE3NTEsIDI3MywgODE2NSwgMTMxNjYsIDgzMzA3LCA3ODg0MCwgNzEzNjgsIAorICAgIDEyODI0LCA0MzkxMSwgNDUyOCwgNTMyMCwgNjMwMSwgNDM2NjIsIDYxMzMsIDkzMzksIDk0NjMsIDQyMzQ2LCAxMDkyMiwgCisgICAgNjQ1NjAsIDM3NTcsIDAsIDAsIDc0MzAyLCA2NTg2OSwgNzM3NjAsIDI1NjksIDc0OTc2LCAyMzI2LCA2NTc0MCwgMjU2NSwgCisgICAgNDI0NTksIDc1OTYsIDc5MjEsIDk4Mzg2OCwgNzM4NjIsIDEyNzk4MSwgNDE4NDgsIDI1NjcsIDY2MDA2LCA5MjYyMiwgCisgICAgNDA0NCwgOTI2NDYsIDQzOTUzLCAxMjIzMywgOTgzODcxLCAxMDIzLCA0NzQsIDE5NDk0MCwgMTE5ODE4LCAwLCAwLCAKKyAgICA0MjQ4NywgNjU1NTYsIDEyMTE2OCwgMTI3ODY2LCA0MjI5NSwgMTI4MjAzLCAxMjE0NzQsIDcxMzIyLCA5MjUxOCwgMjIyMiwgCisgICAgNjY0OTksIDAsIDU0MTcsIDEyMjc1LCAxMDg5NSwgMCwgMjc0LCAwLCAxODU4LCA5ODM0NTUsIDAsIDU1MjUxLCAxMDExOCwgCisgICAgMzEzMywgMTI3NzcxLCA3MTg1NywgMTIxMjAxLCA5NjEwLCA4MDY4LCA4MTk3LCA5MTc1NDUsIDY5OSwgMCwgNDE2NjUsIAorICAgIDU4NjgsIDEyODcxMCwgOTI2OTUsIDQyMTgyLCA3NTgxLCAxOTk0MCwgNDM2NjgsIDQxNjY3LCAxMjgwNTcsIDAsIDE5MjMsIAorICAgIDY1NTgzLCA2NTgwMiwgOTM5NzAsIDY0NTk3LCA0MzQ0NCwgNzgxMjksIDY4NzUxLCAwLCA2NDY0LCA3MDM2LCAyOTk2LCAKKyAgICAxOTM3LCA5ODM3NTEsIDY4NDgxLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCA3Nzk2NSwgMTE5ODM3LCAxMTAxNywgCisgICAgMTIwNjAxLCAwLCAyOTMsIDc3OTY2LCA5MjE2OSwgNjQ3OTEsIDQxODI3LCA0MjQ2NiwgNDM0MjIsIDEwNTc5LCA4NTYwLCAKKyAgICA3MTM1MCwgNjU0MTMsIDc3OTYzLCA0ODAzLCAxMjk2NCwgMTczOSwgMTk0MSwgMzkwMCwgMTI4OTY3LCAxNzEzLCA3Nzk2OSwgCisgICAgMTIxMjkyLCA3Mzk1NywgMTE0MDcsIDQyNDQxLCA0MTk3MSwgNjI5NywgMTIwMDk4LCA2NDEwNSwgMTIwNTY1LCA0MjQ4MSwgCisgICAgMTE3MTYsIDY2NDczLCA3MTc5LCA0MjI4OSwgMTI1MDk1LCA2NDEwMywgOTY5LCAwLCA5MzUyLCA3MTQ4MSwgNjE2NSwgCisgICAgNjQxMDAsIDkxNzgxOSwgNjYzMiwgNzM4NjEsIDQyNDAyLCA3NDMyNywgNzgwNiwgMTEzNzYyLCA4OTE0LCA2NjkwOCwgCisgICAgMTI0OTU0LCAzMTgzLCAxNDM1LCA2NDg3NiwgMjk2OSwgNjA0NiwgNjQ0NDEsIDYyMDgsIDY3ODQ5LCA1NzQ2LCA2NjQwOCwgCisgICAgMCwgNjQ0MTYsIDQyNDIyLCA4MzUwNiwgOTgzMDQ2LCA3MDgyLCA3Mzc3NSwgMzM4LCA1MDU5LCAxMjEzNjksIDgzNTI0LCAKKyAgICA0MjMyOCwgMTA3NjcsIDEyODg2MiwgODExNSwgODM0NTQsIDc0NzU4LCAwLCA4MjI3LCAyMDczLCAxMjE4LCA5MTc3OTAsIAorICAgIDk4MzIzMCwgNjU4NDgsIDkyODg0LCA4MzUxNywgNjk4NjMsIDEyODMyOCwgMTI2OTg3LCA0NDg2LCAxMjgwODIsIDkxNzc5NiwgCisgICAgMCwgMTA5MjUsIDAsIDgzNTE1LCA4MzUwNywgMTI0OTUyLCA0MjMwOSwgMTAyNTcsIDY1MTkxLCAxMDI3MywgNzY2OCwgCisgICAgMTAzMDUsIDQyNDYxLCA3NDg4MiwgNDIzNDksIDg4MzIsIDc4MDUxLCA2NDEyNywgMTA2NDQsIDQyNjYyLCA3ODgyOCwgCisgICAgNDIyNzgsIDc0NDUxLCAxMjY5ODgsIDY5ODc0LCA3Nzk0LCAxMTkyMTQsIDQyNDI5LCA2Mzc3LCA0MjMxNiwgMTE5MDI2LCAKKyAgICAzNjY5LCAzOTY4LCA0MjQ2OCwgNzEzMTksIDY5NjU4LCAwLCA2NTQwMiwgMTE5NTgxLCAxOTQ5NzMsIDEyODc0NywgNjQ5MzMsIAorICAgIDE5NDYyNywgNDE5NjAsIDY2OTksIDQyOTAzLCAxMjg3NTUsIDEyNTAxMywgNjgyMywgNDIzOTEsIDE1ODgsIDQzNTAyLCAKKyAgICA4NDA5LCA3ODIyMywgMTk5NjcsIDY1Mzk4LCA3ODcsIDcxMzE1LCAxMjgzMzUsIDEyNzc0NCwgNjExNSwgMjA3OCwgNDE2NTQsIAorICAgIDQyNDgwLCA5MTc5NDksIDkyNjUwLCA0MTY1NSwgNjU0MDEsIDQzOTc1LCA3MjQyNywgMCwgMTEzODE2LCA2NDQsIDY1NTAwLCAKKyAgICA0MTY1NywgMTA3NzgsIDM2NTksIDk1MzMsIDE4NCwgMTU1MywgMTMxMDcsIDY1NDg0LCA2OTY0OCwgMTA1MDIsIDY2Mjk2LCAKKyAgICAwLCAwLCA0MTU1NCwgMCwgODIyMCwgMTI4NDMyLCA0MTU1NywgMCwgMTI4OTM4LCAxMTA3MCwgMTE5MjIxLCA1MTU3LCAKKyAgICA0MDIwLCA3Mzg1OCwgNDE1NTUsIDk1MTQsIDY0ODE4LCA2NTEwMywgNjQ2NDEsIDY0MzAzLCA3ODEzMSwgNzUyMCwgNzM4ODgsIAorICAgIDc0Mzc3LCAxMTAyOSwgNjY2NTEsIDk4MzA2OCwgMTI4NDkyLCAxMTg5MzAsIDY0NTI3LCAxMjEzOTUsIDc4NzcsIDEyNzIzLCAKKyAgICA5ODM3OTgsIDY4Nzc2LCAxMjAwOTYsIDc0NjAyLCA5OTU1LCAxMTk1NTcsIDQwNTUsIDQyODE3LCAwLCA2NTIxMiwgMTE3MTUsIAorICAgIDEyMTkwLCAxMjMxOSwgNzg2MzAsIDAsIDc4NjMxLCA5NTAyLCA2NTQyNywgMTI1MDQ4LCA2NTQyNCwgMTI2MDcsIDEyMDk2NiwgCisgICAgOTczNCwgNjU0MjUsIDAsIDEyMTQzMSwgMTI3MzU3LCA3NDg5MCwgNzg4MzYsIDEwMTEyLCAxMDgyNywgMTk0NjM1LCA5ODY2LCAKKyAgICA3NDUyNywgNjY2NzUsIDExODg2NywgODYyNSwgNjQzNDYsIDExMjkwLCAxMDQ3NywgNjc3MzgsIDg2MzYsIDk4MzkyNywgCisgICAgODMxNSwgNjU0NDQsIDk4Mzc5MywgMTk1MDExLCA3NDU5NSwgNjE1MiwgNzg4MjAsIDczOTQ3LCA2NjI5LCAxMjUwNTYsIAorICAgIDEyMDE3MSwgMCwgNzQ1ODksIDQzOTkzLCAxMjgzNDYsIDY5NzkwLCA2NDQzNSwgNjQ5NTUsIDQzNjkwLCAxMTA0NiwgCisgICAgMTE0OTAsIDQyNzMwLCA0NDg1LCA3MTEyNiwgMTI4MTk0LCA2NDkyNiwgMCwgOTgzMTMzLCA0MzgzMCwgNTg2OSwgMTI0MzcsIAorICAgIDQyNzI4LCAwLCA3MDQwLCAzNTg4LCAwLCAxMjgyNSwgMTIxMTU4LCAwLCAxMjcyNSwgNzQwOTIsIDEyNzEwNiwgNzg2MzQsIAorICAgIDIyMywgNzg2MzUsIDY5Njc1LCAxMjAxMTksIDQyNDQ0LCAxMjg0NDksIDY0NDk5LCA2NTI0NSwgMTI5MTA0LCAxMTcxLCAKKyAgICAxMjg4MDIsIDY5NzE3LCAxMjAxMTMsIDE4MDUsIDg3NzIsIDQzODIwLCAwLCA5OTMwLCA2NTI0NywgNzg2MTksIDc0OTU0LCAKKyAgICAyMzM4LCAxMjAwMzIsIDExODg1MywgMCwgNDI2NzYsIDAsIDY0ODAwLCAxMzA5MiwgMTExODUsIDY4MTI2LCAxMjEzLCAKKyAgICAxMjg0MTksIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCA4MzAwNSwgNjQzODcsIDQxMTUsIDcxMzMxLCA1MDA1LCAKKyAgICA2NDA3MCwgNjQwNzMsIDEwNjc5LCA4MzAwMCwgNzc5NTQsIDk0MDIsIDY0Mjc2LCA0MjYsIDgzMzU4LCA4MzAxMCwgODI1MSwgCisgICAgMTAxMzYsIDY1NDM2LCAwLCAyMTIwLCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDcwNzk1LCAxMDcwMSwgMTc2NCwgMzEwMSwgCisgICAgMTI3ODE1LCAxMjg1OCwgMTIwMTU5LCAxMjAxMDEsIDExMzczLCA2Mzc4LCA3MTA5MywgMTIwMTAzLCA4NjYzLCA5MzEyLCAKKyAgICA0MTY0NCwgNDUzOSwgMjEyOSwgNzA3ODUsIDkyMjIsIDEyMTQ3OSwgMTE4OTA3LCA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIAorICAgIDEyODUxNSwgMTI3MjQsIDY2MzU3LCA0MjMzMSwgNjQ5MzUsIDAsIDAsIDEyOTMsIDc5NDcsIDIxMzIsIDk4Mzc2NywgCisgICAgNzE4NTgsIDcyNDQwLCAyNDU0LCA0MjcxNywgMzYxMywgMTI4ODM3LCA3MTExNywgMCwgNjU4ODgsIDg4MTYsIDEwOTc4LCAKKyAgICAxMDg0MCwgMCwgMTA2NjgsIDExMzcyMywgNDMwODcsIDEyNTk1LCAxMjAzMDQsIDk4MzExNCwgODgyMiwgMCwgMTE1NywgCisgICAgNjQ5MDMsIDg2MzgsIDEyNzI2NSwgOTE3ODg2LCAxMjc5MDUsIDAsIDY5ODQ4LCA4MjM1LCAxMjAzMTYsIDQ0MDUsIDEwMDg2LCAKKyAgICAxMjAyNDcsIDExMTI4LCA2OTIxNiwgMTIxMDY1LCA2NTQzMCwgNzEzMjEsIDYwNzksIDY4MTcsIDEwNzY0LCAxMjAzMTQsIAorICAgIDY0MjkxLCAxMjAzMTUsIDk5OCwgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDE5NDU3MiwgMTk5MSwgNzg4MiwgCisgICAgNDIyNTQsIDEyODk1NCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIDExOTMzNiwgNTc0MiwgNDMwNzYsIAorICAgIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgNzQwMzMsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgMTIwMzI1LCAKKyAgICA2NjM3MywgOTgzMjQ5LCAxMjg3NDYsIDY0OTA4LCA5MjY5MSwgNjMxMSwgOTMwMTksIDEyMDA0LCAxMTkxOTIsIDEyMDQ5LCAKKyAgICA0MzEwOCwgMTIwMzI2LCA3MTA4MywgNDE3MDUsIDkyMTg4LCA2NTk4LCAxMjEyOTgsIDY1OTksIDY2ODIyLCA5MzAzMSwgCisgICAgNDIxNDgsIDExODgyNSwgNjYwMjcsIDEyMTA1NSwgNjU5NywgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAyMjgxLCAKKyAgICA2OTkwNCwgMTI4NDk1LCAxOTg4LCA1NDA3LCA2Nzg2NSwgMjQzMCwgNDE2NzgsIDkzMDU5LCA4MzExNCwgMjMzNiwgCisgICAgOTgzOTAzLCAwLCA2NzE2OSwgMTIwNDQyLCAxMjcwOTIsIDE5MjEsIDEwOTQ3LCAxOTkyNywgNzAzOTAsIDY1NDA2LCAKKyAgICA5ODM0NjQsIDE5OTEzLCA0Mjg0LCAxMzIxNywgMCwgNDM3ODksIDEyODQxLCA5MjI5LCAxMDk1NiwgNDIyODUsIDQxNjc0LCAKKyAgICAxOTk2NCwgNDE2NzksIDY1MDg0LCAzNTIxLCAxMjQ5NTcsIDU3NzQsIDgzMjUsIDY5ODY0LCA2NTQwMywgOTgzMDg5LCAKKyAgICAxODU0LCAxMDc5NCwgOTMwNTQsIDY3NjYwLCA2OTg0NiwgMTk0NzY1LCA3ODM1OSwgNTI4MCwgMCwgNDM0NCwgMTI5MDUsIAogICAgIDY1NDMzLCA2MDc2LCA2NDc5MywgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAxMjkzNCwgCiAgICAgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgNjA3MSwgNjU0MzQsIDEyNzQ2NywgNDgwNCwgNDA1MywgMCwgMTI3NDY5LCAKLSAgICAxOTQ2NTMsIDQxNjk2LCA0NjcsIDY5ODIzLCAxMjc0NjMsIDY5Nzk3LCAxOTQ2NTIsIDEyNzQ3MywgODQyMSwgMTI3NDcyLCAKLSAgICA2OTY4MiwgNDM3MDUsIDUwMiwgMCwgNjU0MzEsIDExOTA1NiwgNjk5NTQsIDEyMDQzLCAxMzAzLCAzMTYsIDczNjQsIDIwMjksIAotICAgIDIxMzYsIDExOTI0NiwgMTE1MzMsIDY0MzY1LCA0MzQ4MCwgOTI2MzksIDQ4NjAsIDEyNjY0OCwgMTI3ODc3LCA0MjQ4OCwgMCwgCi0gICAgOTU4MywgMTI4ODQ5LCA1NTQ2LCA4MDE5LCA3Mzg1NiwgMCwgMCwgMCwgNTU0NCwgMjM1NSwgMTIxNTAsIDY1NzI1LCA1NTQzLCAKLSAgICA3Nzk4OSwgNjM3NTEsIDEyMTM3LCA1NTQ4LCA3Nzk4NSwgMCwgNjU3MjcsIDY4Mzg4LCA2NTcyNiwgNjA3NywgMTI4MzUyLCAKLSAgICA2NTQ1MiwgMCwgMTEzMDEsIDc4MDEzLCA3ODAwOCwgNzgwMTAsIDk4NzQsIDc4MDA3LCAwLCAxMzE5LCAzMDUwLCA2NTQxMCwgCi0gICAgMCwgMCwgNzgwMTYsIDc4MDE3LCA0MjgzMCwgNDM5OTYsIDY2NzE2LCAxMjgxMzcsIDQ2OTEsIDkyMjQyLCA5MzQ1LCA2MjEsIAotICAgIDkyNzA5LCAxMjgyMjIsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgNzgwMjQsIDk0NzQsIAotICAgIDEwNTQ1LCAxMTkxMTgsIDEwODg3LCAzNzg2LCA2NTQwOSwgODg5NCwgNDMxNzksIDExOTYxMSwgNzkyMywgMzcxNiwgCi0gICAgOTIzNjMsIDk5OTYsIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDEyNzgzNCwgOTU2NiwgMCwgMzcyMiwgMCwgNDE3MDcsIDg0OTMsIAotICAgIDU0NSwgOTU3NSwgNDEzNzksIDEwMDUwLCAxMjcxOCwgNjk4NTQsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAKLSAgICAwLCAwLCA5MTE5LCAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIAotICAgIDc4MDIyLCA0MTAsIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIAotICAgIDEwMTI2LCAxMjExNiwgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIAotICAgIDQxMzQ1LCAxMjAzNjIsIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCAKLSAgICA2NDg1OCwgMzYxLCAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDkxNzkxOSwgCi0gICAgNDU2OSwgNzQxMzAsIDAsIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIDY1NjI5LCAwLCAKLSAgICAxOTQ4NTgsIDAsIDAsIDEyNzU0NSwgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgCi0gICAgMCwgOTgzNTgxLCA3NDA1NCwgMTI3NzU0LCAxOTUwMjksIDAsIDgzOSwgOTgzMzE5LCA3Njk1LCA4NzY5LCA2NTI0NiwgCi0gICAgNDgyOSwgMTk0NjYzLCA0ODU5LCA2NDQ2NywgMCwgOTgzOTYzLCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDQzOTg2LCAwLCAKLSAgICA2OTc2NiwgMCwgNjQ3NjQsIDQyMTAsIDk4Mzg2MywgMTI3OTM2LCA4MDQsIDAsIDAsIDEyMjk4LCAwLCA2NjY1MywgMCwgCi0gICAgNjQ5MjQsIDEwMDkxLCA3MzkzMSwgOTQ2OCwgNzQyNDUsIDAsIDAsIDc0MjQ2LCA5MjUwMywgMTI4MzksIDY0NjY5LCAKLSAgICA5MjIwMiwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgMTE5MjI5LCAxMTA0OSwgMCwgOTI2OTcsIDQzMjM5LCA4NDgyLCA5MjQ0MCwgCi0gICAgMCwgNTAzMiwgNjk2NzcsIDExOTQwLCA2Nzg4OCwgNjY0LCAxMjA0MzcsIDUwMzQsIDAsIDAsIDEyNzUyNSwgNDI3MDIsIAotICAgIDczODg4LCA5ODMxNDksIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgCisgICAgMTk0NjUzLCA0MTY5NiwgNDY3LCA2OTgyMywgMTI3NDYzLCA2OTc5NywgMTIxNDAzLCAxMjEyOTQsIDg0MjEsIDEyNzQ3MiwgCisgICAgNjk2ODIsIDQzNzA1LCA1MDIsIDc1MDI5LCA2NTQzMSwgMTE5MDU2LCA2OTk1NCwgMTIwNDMsIDEzMDMsIDMxNiwgNzM2NCwgCisgICAgMjAyOSwgMjEzNiwgMTE5MjQ2LCAxMTUzMywgNjQzNjUsIDQzNDgwLCA5MjYzOSwgNDg2MCwgNzAzNzIsIDEyNzg3NywgCisgICAgNDI0ODgsIDcwMzM5LCA5NTgzLCAxMjg4NDksIDU1NDYsIDgwMTksIDczODU2LCA5ODM4NDAsIDEyNDk2MCwgMTIwODM5LCAKKyAgICA1NTQ0LCAyMzU1LCAxMjE1MCwgNjU3MjUsIDU1NDMsIDc1MDM0LCA2Mzc1MSwgMTIxMzcsIDU1NDgsIDc3OTg1LCAwLCAKKyAgICA2NTcyNywgNjgzODgsIDY1NzI2LCA2MDc3LCAxMjgzNTIsIDY1NDUyLCAwLCAxMTMwMSwgMTEyMTQsIDY1OTUyLCA3ODAxMCwgCisgICAgOTg3NCwgNzgwMDcsIDk4MzExNSwgMTMxOSwgMzA1MCwgNjU0MTAsIDY3Mzk5LCA5MjYwNiwgNzgwMTYsIDc4MDE3LCAKKyAgICA0MjgzMCwgNDM5OTYsIDY2NzE2LCA4MzA1MCwgNDY5MSwgOTIyNDIsIDkzNDUsIDYyMSwgODM1MTIsIDEyODIyMiwgMCwgCisgICAgNjU0MTEsIDAsIDQxMTgyLCA3Mzg4MSwgNjU0MDgsIDczODk5LCA3ODAyNCwgOTQ3NCwgMTA1NDUsIDExOTExOCwgMTA4ODcsIAorICAgIDM3ODYsIDY1NDA5LCA4ODk0LCA0MzE3OSwgNzEwNDIsIDc5MjMsIDM3MTYsIDkyMzYzLCA5OTk2LCA4NTA4LCAxMjc3OTQsIAorICAgIDcwMTIsIDgxOTUsIDEyNzgzNCwgOTU2NiwgMCwgMzcyMiwgOTgzMzc0LCA0MTcwNywgODQ5MywgNTQ1LCA5NTc1LCA0MTM3OSwgCisgICAgMTAwNTAsIDEyNzE4LCA2OTg1NCwgODg1OSwgNjgyMCwgNzQzNDUsIDY1MTEwLCAxMjA3NDAsIDEyODk3OCwgNTUyODIsIAorICAgIDkxMTksIDI3ODcsIDc5MjAsIDcwMDkxLCA0MDIxLCAyMDEyLCA3OTg1LCAwLCAxMTk2NjMsIDkxNzc5MiwgMCwgNzgwMjEsIAorICAgIDc4MDIyLCA0MTAsIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDc0ODk1LCA0MTY1OSwgNDE2NzEsIDE4MjcsIDAsIAorICAgIDY0Mzk2LCAxMDEyNiwgMTIxMTYsIDQxNjczLCAxMjAzNzAsIDExNDIyLCA3MTg0NiwgMTIwMzczLCAzODYwLCAxMjAzNjcsIAorICAgIDY4NDEyLCA0MTM0NSwgMTIwMzYyLCAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgCisgICAgMjEwNCwgNjQ4NTgsIDM2MSwgMTIwMzU3LCA4NDUsIDkyMTc0LCA0MTU2MCwgMTE5NzAsIDQ1NjIsIDEyODQ3MywgMjkyNiwgCisgICAgNjg0OTUsIDQ1NjksIDc0MTMwLCAxMjg2NTksIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIAorICAgIDY1NjI5LCAwLCAxOTQ4NTgsIDc0ODU0LCAwLCA3MDQ2NiwgNjczOTIsIDY2Mzg1LCA3MTQzOSwgNjI5MSwgMCwgNjg0ODcsIAorICAgIDQxNjY5LCA3MDk0LCAxMjEwNTEsIDAsIDEyMDk5OSwgNzQwNTQsIDEyNzc1NCwgMTI4OTE3LCAwLCA4MzksIDEyMTMxNSwgCisgICAgNzY5NSwgODc2OSwgNjUyNDYsIDQ4MjksIDY3NzU2LCA0ODU5LCA2NDQ2NywgMCwgODM1MjUsIDExODk5OCwgNzIwNiwgCisgICAgMTE5NjM2LCA2NjQ3LCA0Mzk4NiwgODM1MTgsIDY5NzY2LCAxOTQ2NjQsIDY0NzY0LCA0MjEwLCAxMjgzMDAsIDEyNzkzNiwgCisgICAgODA0LCA4MzUyMCwgMCwgMTIyOTgsIDcwMzQ0LCA2NjY1MywgMTI2OTgzLCA2NDkyNCwgMTAwOTEsIDY3MjAwLCA5NDY4LCAKKyAgICA2NzIwNiwgNjcyMDUsIDY3MjA0LCA2NzIwMywgOTI1MDMsIDEyODM5LCA2NDY2OSwgOTIyMDIsIDcxODUxLCAxMjc5LCAKKyAgICAxNDI1LCA2MjI0LCAxMTkyMjksIDExMDQ5LCAxMjcxMjMsIDcxNDgwLCA0MjY0OSwgODQ4MiwgOTI0NDAsIDAsIDUwMzIsIAorICAgIDY3MjA5LCAxMTk0MCwgNjcyMDcsIDY2NCwgMTIwNDM3LCA1MDM0LCA5MjQ5NSwgNzAyMDAsIDEyNzUyNSwgNDI3MDIsIAorICAgIDcwMTk0LCA5MzA2MSwgMTMyOTQsIDY3ODczLCA2NDg2OSwgNjAzMiwgNjcyMTgsIDkxMTUsIDc0MzAsIDc3ODM3LCA3MDE5MSwgCiAgICAgMTIwODE5LCA2ODM4NywgMTIwMTY4LCA3MzkxMywgMTIwMTcwLCA0MTE2MSwgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAKLSAgICAxMjAxNjAsIDY0NTI4LCAxMTY5LCA0MzQsIDQxNDM3LCAxOTA1LCA2MDM0LCA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgCi0gICAgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAxOTQ2MzgsIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgCi0gICAgNDI2MzYsIDAsIDY5NzI1LCAwLCAxMjA2NTYsIDAsIDY3ODc2LCAwLCAwLCAwLCA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAKLSAgICAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgMCwgMTA4NTUsIDU0NDUsIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAKLSAgICAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCA0OTYyLCA2OTc3MiwgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgCi0gICAgMTA1NTUsIDAsIDQzMzMzLCA5MjI5OSwgMCwgMTIwNDI3LCAxMDQ1MSwgMCwgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgCi0gICAgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgODM2NywgMCwgMTIwMTQ2LCA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAKLSAgICAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgNjIxNywgNTg5NiwgMCwgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgNzQ0MDIsIDExODg2MCwgMCwgMTIwNDE5LCA5MjQ5NywgNzQwNTIsIDAsIAotICAgIDkyMzc4LCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIDEyMDQxOCwgMCwgNjQ3NjUsIDczOTIzLCAxMjA0MTcsIDEyMDY2MiwgCi0gICAgNjk5MjAsIDE5NDcwMiwgNjIxNiwgMCwgMTA3NTUsIDk0NTUsIDAsIDgxMjQsIDEyNzA0MiwgOTQ3MCwgNjk0NCwgMTI3NTQwLCAKLSAgICAwLCA2OTY4MCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgMCwgMCwgMCwgNDM0MjgsIDgyMDQsIDM2MTQsIDI4MjcsIDk2OTYsIDAsIAotICAgIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMCwgNDI1OTksIDQyNTk3LCA0MjcwOSwgCi0gICAgMTIwNDA5LCAxMjcwNDQsIDAsIDg1MzcsIDAsIDAsIDkzNTQsIDk4MzE2NCwgMTI4ODMzLCA0MTE5OSwgMTAxMjEsIDIwMjgsIAotICAgIDAsIDk4MzE5NCwgNjk3MTUsIDAsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCAKLSAgICA5MjIwNSwgMTIwNzc3LCAxMjA1MDIsIDQxMTU1LCAwLCA3NDA3MSwgMCwgOTgzNDU3LCAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIAotICAgIDAsIDE3MzQsIDAsIDAsIDEyNzA0MCwgNjQ1OTQsIDI0NTYsIDIzMSwgMCwgNzQxNjcsIDU0MiwgMCwgMTE4Nzg2LCAwLCAKLSAgICA5ODM5NzksIDEyMzAsIDAsIDAsIDM1OTcsIDQ0NDYsIDEwNTg0LCA3NDIzNSwgOTIyMTUsIDQwMzcsIDEyNzkzOCwgODM1MiwgCi0gICAgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIDE5NDgwMSwgNTUyNjUsIDY3ODQ2LCA3ODQzNCwgOTcwNCwgMCwgMCwgNzAwODAsIAotICAgIDcxMzM4LCAwLCA4NjYwLCAxMjY0OTUsIDAsIDAsIDc4NzczLCA3NDQ4MiwgNDQ4MywgMTcwOSwgNjk3MjEsIDk5MDksIAotICAgIDYwODAsIDAsIDEyMDM1OCwgMTc0NiwgMTMxNSwgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgCi0gICAgMTEyNjYsIDEyODE1MiwgMTIyNiwgNjkzMCwgNjc5NzksIDk4MzY5MCwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIAotICAgIDc0Nzg1LCA2OTg3NSwgMCwgMCwgNDE1MDAsIDAsIDMxMSwgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNzQyODAsIAotICAgIDEwODc3LCAxMTg4NjgsIDY0ODg1LCA3NDI3MiwgMCwgMCwgMTI4NTU5LCAxMjA3MzYsIDc0MzEyLCAzNDUsIDAsIDc0NDU2LCAKLSAgICA2NDYwNiwgOTkxNywgMCwgOTIyMzEsIDUwMzcsIDAsIDE3NzYsIDg0MjIsIDAsIDExODgxNCwgNDE1MDgsIDQxMjAxLCAzMjMsIAotICAgIDQzMzI4LCAwLCA0MjY5OCwgMTI5NSwgMTk0ODUzLCA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMTI4NzcyLCA2NTEyMywgCi0gICAgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgNjU2NjYsIDI1MTksIDkyMzY5LCA2NTQyMCwgOTI0NzksIDAsIDQyNTIsIAotICAgIDUwNDksIDQyNjU5LCAxMTkwMTEsIDcwNiwgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAKLSAgICAwLCA2NjcwMiwgMCwgMTI2NzAsIDEwMTMsIDAsIDY0OTE5LCA3MDUsIDAsIDY1NDIyLCAxMjc4MDMsIDExODMsIDEyNjUxOSwgCi0gICAgNzAxNywgNDI4NTIsIDAsIDgxNTcsIDk3MzYsIDY0NTAzLCA2NTQxOCwgMCwgOTgzODc4LCA3NDAzNSwgMCwgMTE5MTMsIAotICAgIDczODc0LCA2Njk2LCAwLCA4OTIwLCAxMTkyOTgsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgCi0gICAgMCwgMCwgMTAxNzcsIDczNzc3LCAxODU3LCAxOTQ2NTcsIDQ2MjYsIDg0NjQsIDg0NzIsIDAsIDQ2MjksIDg0OTksIDc4MzIxLCAKLSAgICA3ODMyMiwgNDYyNCwgNzgxOCwgMTE5MTczLCAwLCAwLCA3ODA1LCAwLCA5NDAwNywgNjkzNSwgOTIyOTIsIDc4MzI1LCAKLSAgICA3ODMyNiwgNzgzMjMsIDQzMzI3LCA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAKLSAgICAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIDc4MzM1LCA3ODMzMiwgNzc4MzIsIDY1ODQ5LCA3NzgzMSwgOTgzOTYxLCAwLCAKLSAgICAxMjQ1MSwgMCwgODY4NCwgMCwgNjEwMiwgMCwgNTI5OCwgMCwgNTI5NCwgMCwgMCwgOTgzNDU5LCAxOTUwNjIsIDk5NDksIAotICAgIDExOTgyNiwgNDM2MTcsIDExOTIxNSwgMCwgMTIwNzMsIDAsIDAsIDc3ODYzLCAxMzEwOCwgMTIwNjE3LCAxMTQzOSwgCi0gICAgNDE0NjgsIDk4Mzc1NywgMCwgNTI5MiwgNTUyNzIsIDk4Mzg4MywgMTkzOSwgNTMwMiwgMzk3MCwgOTE3ODc5LCAxMjQ1NSwgCi0gICAgMTc5MywgMCwgMCwgMCwgNjY0MywgOTI0NzcsIDY1MjYzLCAwLCA3ODMzMCwgNDEyOTMsIDc4MzI4LCA2NTkyMywgMCwgCi0gICAgMTMyMTksIDk1NjksIDAsIDc0MzgzLCAwLCA3NDE5NywgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIAotICAgIDc4MzQwLCA0MzYzMSwgNTMyNCwgNjY0NDMsIDM3ODQsIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgCi0gICAgMzM2MCwgNzgzNDQsIDExNTIzLCAwLCA5MjQ4OCwgOTkyNiwgNzE5NywgMCwgNjg0MjksIDQyODk0LCA0MTgyMSwgMTI0OSwgCi0gICAgNzgzNjAsIDc4MzYxLCA3ODM1NiwgNzgzNTgsIDc4MzUzLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIAotICAgIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAwLCAwLCA3ODA3NCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgCi0gICAgNzg1MTAsIDQxOTkwLCA3ODUwOSwgNDE4MTEsIDc0NDY2LCA5Mzk2NiwgNjY3MCwgNzc4ODIsIDAsIDAsIDQzMDkyLCAKLSAgICA0MzMyNSwgMCwgMTAxNjgsIDAsIDk3ODEsIDEyODY1NSwgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAKLSAgICAxMzAxOSwgMTE2NzAsIDY5ODYwLCAzMTUsIDEyODEzLCA5ODM0NTgsIDc4NDMyLCA3ODI1NiwgNzgzNTEsIDc4MzUyLCAwLCAKLSAgICA5ODM2NTcsIDAsIDAsIDEzNzgsIDk1MDksIDAsIDAsIDc0NDc1LCAzMDY2LCA5MjIyMCwgNjc4NDcsIDAsIDkyMzU1LCAwLCAKLSAgICA3ODM2NSwgODc4NywgMTIwMzc5LCAxOTQ2MTYsIDQxNjE4LCAxOTQ2MTUsIDc4MjYxLCAxOTQ2MTQsIDAsIDY0NjUyLCAwLCAKLSAgICAxOTQ2MTIsIDAsIDc4MzY2LCA0MjA4OCwgMCwgMTk1MDYxLCA3MTc2LCA0Mzc1NiwgMTAxMzcsIDYxMjEsIDEwOTk1LCAKLSAgICA3ODI1OSwgNzQ1MzQsIDgxMTksIDY0ODc0LCA5MTc4MTYsIDEyNzE5OSwgMTk0OTM5LCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIAotICAgIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgCi0gICAgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCA0MTIzNiwgOTIyMzUsIDQyMDA1LCA0MjAwMywgNDEyMzcsIDU4NDgsIDAsIDAsIAotICAgIDM2NzAsIDEyODY1NywgMTk0NjAwLCAwLCAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIAotICAgIDYxOSwgNDYzNSwgNjUwODAsIDAsIDEyODAwMiwgNDEyMCwgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgCi0gICAgOTM2NiwgNDI3OTAsIDQyMDA2LCAxMTkxMTUsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAxNTA3LCA0MjIxNiwgCi0gICAgNjUzMjEsIDY1MzIwLCA2NTMzNSwgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCA2NTMyOSwgNDI2ODksIAotICAgIDkyNDI3LCA5MTI4LCA5NDA0NSwgNDIwNzMsIDY3ODUsIDY0NTkwLCA5ODM4MzAsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCAKLSAgICA2NTMxNiwgNDEwNiwgNjUzMTQsIDY1MzEzLCA0MjA3NCwgMTI3ODQ3LCA0MTIyOCwgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCAKLSAgICA0MTIzOSwgNDM1MzMsIDc4NDU5LCA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCAKLSAgICA0NjE1LCAxMjY5NSwgMTI3NzUyLCAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDAsIDU2MiwgMTIxNjksIDY1OTAsIAotICAgIDY5NzYyLCA2NjQ1NSwgNjQ3MzgsIDMyMTksIDY4NjU0LCA5ODM3ODcsIDAsIDEwMzcsIDAsIDIwMjUsIDEyODI2MywgCi0gICAgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgNDM2MjMsIDExMDcyLCAKLSAgICAxMjcxOTEsIDAsIDAsIDEyNjA2LCA3ODQzMywgMjgyNSwgMCwgMTA4MjUsIDgwNzksIDI4MjEsIDQxMDQ2LCA5MjMyNywgCi0gICAgNzM2NSwgOTgzNzUzLCAxMjA1OTMsIDEzMDcxLCAwLCA0NTIsIDQxMDQ5LCA0Mjg0MCwgNjM0NiwgMjgzMSwgNTQ2MSwgCi0gICAgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgNDEzMzIsIDAsIDEyMzMzLCAwLCAKLSAgICAxNjY4LCAwLCAwLCAwLCAxMTg3LCA5ODMzODUsIDQyNjI4LCA3ODU3NSwgMCwgMTI4Nzc3LCAwLCAzMjQwLCAxMjg1MTgsIAotICAgIDEyMTk0LCAwLCAxMTU5MSwgNDEwNjUsIDUzMjMsIDgxNjYsIDAsIDAsIDAsIDc0NTM1LCAxNjIzLCA2NTI5NywgMTI4ODU2LCAKLSAgICA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCAKLSAgICA5MjUwOCwgMTE1NzEsIDc2MTUsIDEyNzMwMCwgOTIyOTYsIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgCi0gICAgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAxMTQwMywgMCwgMCwgMTI3MTQ2LCAzNzk2LCA2ODAwLCAwLCAzOTk0LCAKLSAgICAxMTQyMSwgMCwgMTk1MDc2LCAwLCA5ODM5MjIsIDAsIDAsIDY0ODU3LCAxMjgxMDUsIDI4NTUsIDEyNzgyOCwgNjYzMDgsIAotICAgIDQxNjIxLCA2ODIxNCwgMTI3MjgzLCAxMjc4MTcsIDEwNjU0LCAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCA0Mzk3MiwgCi0gICAgNjU4NDcsIDcxODIsIDAsIDEzMDI0LCAxOTQ4MjIsIDc0MjcwLCAxMjgyODksIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAKLSAgICAyMzc4LCA0MzEzNiwgMTI3OTA1LCA4NDY2LCA5ODM1NzUsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAKLSAgICAxMTQwOSwgNjgzNzMsIDYzODIsIDAsIDY0NjM0LCAxMjgyNzksIDAsIDExNjEyLCAwLCA2NzYwMCwgMjM3NCwgOTQwNjYsIAotICAgIDg0NzUsIDExNjA5LCA2NjMxMywgMCwgMCwgNTI4NiwgMTE5Mjk3LCAwLCAwLCA2NDkyNSwgMTIwMjgzLCAxOTQ1ODQsIAotICAgIDExODk4MiwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgMTEzMDUsIDE5NDU4MSwgMzMwOSwgMCwgMCwgMCwgMCwgNjgwMiwgMCwgCi0gICAgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAwLCA2NjYxNSwgNDI1NjUsIDQxNjUxLCAwLCAwLCAwLCA0MTY1MCwgCi0gICAgNjY1MDcsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDk5NTQsIDAsIDE0NzUsIAotICAgIDExOTI0NywgOTkzOCwgNjA4NCwgOTE3NTQ2LCA0MTA2NCwgNDEwNjIsIDAsIDAsIDMyNTYsIDEwMTg5LCA0MjA3NiwgCi0gICAgNDMyNTIsIDc4ODIzLCA5MTc5MDYsIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAxMjc3NjIsIDEwNTYyLCA3NDIxNSwgNDMwNjUsIAotICAgIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCA3MTM1MSwgMCwgMzYzNSwgNjQzMzcsIDk4MzI4MSwgMCwgMCwgNzE5NSwgCi0gICAgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgNjU2MTMsIDc3OTA5LCA5MjQyMCwgNzM5OTcsIDAsIDAsIAotICAgIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgNDE3NiwgNzAwNTAsIDIwMzQsIDkyNTUxLCAxMjA4MDUsIAotICAgIDY1ODkxLCAxMjcwMzgsIDAsIDMxOCwgMjAzOCwgMTI4ODYwLCA3ODU5NiwgMCwgMzY0OSwgMTMxNDksIDQyMTQ1LCA0Mjc5OCwgCi0gICAgMzYzNCwgMTIwMjkxLCAxMTg5MjcsIDY3Njc3LCAxMjAxMjQsIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgOTQwMzIsIDc0MjM4LCAKLSAgICA0MjY2NCwgMjg0OSwgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgMTc2MSwgMTE4MTIsIDY1Mzc5LCA2ODM4NiwgMTI4MTg1LCAKLSAgICAxMTU5LCAwLCA2OTcyOSwgMCwgMCwgNzE3OCwgMTk0NjMyLCAwLCA0MTY4MCwgMCwgMTI4MjAzLCAxMTUzNCwgMTUxNCwgCi0gICAgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgMTk0NTY3LCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAKLSAgICAxNjI0LCA0MzI3MCwgMCwgNzQyNzgsIDEwODE4LCAxMjY2NDQsIDk5NTMsIDAsIDc4NDIxLCAxMTk0LCAzMjQyLCA5NzYxLCAKLSAgICA5NTU1LCA4NTk4LCAxMjAyOTksIDYxNjksIDEyODcxLCAxNTUxLCAyNzk4LCA2NTE3NiwgNDk1OCwgNDI3NTIsIDExOTAyNSwgCi0gICAgMCwgNjc4NzUsIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDE5NDc2OCwgMCwgNjgzNjQsIDk4MzIyNCwgNDg5MSwgMCwgMTA2NDEsIAotICAgIDAsIDczNzQ2LCAwLCA2ODM1MiwgMCwgNzM3ODcsIDE5NDgyOSwgMTk0NjMzLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDI2ODUsIDQyNjc5LCAxOTMsIDAsIDAsIDAsIDQyNjY3LCAwLCA1MjcxLCA5MjMxOCwgOTI1MTcsIDExODg4MiwgMTM2MiwgCi0gICAgMTMyOTcsIDAsIDEyODA5NCwgMCwgOTgzMzMxLCA3Mzc4OSwgMCwgNjY1OCwgNDQyNiwgMCwgOTI2MjgsIDk4Mzg0MiwgCi0gICAgOTIzMTksIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCA5ODMzMzAsIDI0MTYsIDMzMTAsIDQyNzAzLCAwLCAzNzksIDAsIAotICAgIDQzNzU1LCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCA0NTQ5LCAwLCAwLCA5ODMxNTQsIDEyNzc2MywgCi0gICAgMTA4MDcsIDk1NTgsIDE5NDYxMywgMCwgODUxNSwgODY4OCwgMTI4NjYsIDY1MzA4LCAzMjk0LCA5ODMzMzIsIDg1MjksIAotICAgIDEyODEwMSwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAwLCA5MjQ1OCwgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgCi0gICAgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCA5MjE5OCwgMzIxNSwgMCwgNzcxMCwgMTYxMCwgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAKLSAgICAxMjA1MzcsIDY1OTI0LCA5OTc0LCAyMjgsIDY2MzU0LCAxNTAxLCAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgNjIyNSwgMCwgCi0gICAgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgMCwgNzE1MiwgODUwMiwgNTc2MiwgMTk2NywgCi0gICAgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgNzc5NzksIDAsIDEyNjUwNywgMTA0MTQsIDEzMDAxLCA4MTQxLCAwLCAKLSAgICA0MjUzNywgMTU1NywgNDM1OTQsIDEyODY0MiwgNjMzMCwgNjgwNSwgODYzMSwgMjU0NSwgNzAwNTIsIDEyNzE2NiwgMCwgCi0gICAgNzQxOTAsIDAsIDAsIDk4Mzc4NiwgNDI3NjIsIDAsIDQyOTE0LCAxNjUwLCAyNjIsIDE2MzcsIDAsIDc5MDEsIDMyMzgsIAotICAgIDEyODE3MywgNDE4NjEsIDAsIDEyODU4NSwgNjUxNTgsIDEwODYwLCA5NDA1OSwgNDM2NTgsIDc1MjcsIDAsIDQzMzE5LCAKLSAgICA2NDE5LCAwLCA0NSwgMCwgNjQ1ODgsIDkzOTg5LCAwLCAxMTk4MTAsIDcxOTQsIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMCwgCi0gICAgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIDEyOTA2LCA5NjM5LCA3OTEyLCAyNjIwLCAwLCAwLCAwLCA5ODM4NzUsIAotICAgIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCA5ODM4OTAsIDExODk5NiwgMTE5MDA5LCAyODUwLCAKLSAgICA4MDg0LCA5ODMwODUsIDczODUwLCAyODAxLCA5MjI4NCwgNDIwNjksIDExOTgzOSwgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIAotICAgIDExOTg0MywgMTE5ODQyLCAxMDM5OCwgOTgzMDU2LCAwLCA4Mzc3LCAxMjcxMTYsIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgCi0gICAgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCAKLSAgICA5MjQ2MywgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgCi0gICAgNDM1NDIsIDAsIDY0NTc4LCA5ODM2NzUsIDMyMjgsIDY5NjM2LCA4NzgzLCAwLCAxMTk2MTQsIDI3MzEsIDAsIDAsIDc4NTg1LCAKLSAgICA0MTAyLCA3Njk2LCA3Mzg3OCwgMCwgMCwgNzg1ODYsIDQzMzE2LCA0MTc3LCAxMTI4MywgOTA4OSwgMCwgNzM5OTYsIAotICAgIDk4MzE3MywgNjQ1MDAsIDQzNjc0LCAwLCA2NDk0NywgMTg1NiwgMCwgMCwgNjM3OSwgMCwgMCwgMCwgMzIwOCwgMTI5NzUsIAotICAgIDc0Nzc1LCAxMjczODAsIDk4MzkzMSwgOTIzODksIDc0MDcyLCA1NTI2OSwgMCwgMCwgOTgzNjgzLCAyMDMzLCA3ODU3NywgCi0gICAgNzg1NzYsIDE5NTAyNiwgNTUyNTQsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCA5Mzk4OCwgNjc2MTIsIDY1Njc0LCAKLSAgICAxMjgyNDQsIDk0MTEwLCA0MTY4OSwgMCwgNzQwMDYsIDY0OTA5LCA2NjQ2LCAxMTc5MCwgNzQwMTksIDAsIDEyODA2NiwgCi0gICAgMTI4MDMxLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAxMjA2MDUsIDcyMzAsIDgyNTcsIDAsIDg3NzgsIDQxNjg4LCAwLCAKLSAgICA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgNjUwOTIsIDczOTAzLCA2NjcyMSwgMTEzNDIsIDEyODU2MSwgMCwgCi0gICAgMCwgMTI4MjI2LCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIDk2NywgOTgzOTUxLCAxMjY0NjksIDExOTQ2LCAwLCAKLSAgICAzMjU3LCAwLCAxMjMwNywgMTg0NSwgOTgzMTU3LCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIDEwMDg5LCA4NzAsIDc2NDgsIAotICAgIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgNDM2OTIsIDQ1NjMsIDAsIDAsIAotICAgIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMTI2NjA3LCA4NjgsIDg3MywgNzY0MiwgMCwgODY5LCA4NzQsIDc2NDQsIAotICAgIDEyMDY3NCwgODc1LCA3OTAsIDEyODMwMywgMCwgMCwgMCwgNjYxODIsIDk4MzI1OCwgNTQyOSwgMTk1MDU1LCA2NjE4MCwgCi0gICAgMTI2NDgwLCA2NjE4MSwgNjg0NTIsIDk4MzI4OSwgOTgzMjQ4LCA0MjA2NywgMCwgNTQzMywgMTA2NTcsIDc5MTEsIAotICAgIDE5NDYyMiwgMTU0NywgNjYxNzYsIDQyMDEyLCAxMjA1NzYsIDU0MjUsIDQ5NzcsIDk5OTksIDUzMTcsIDU0MjMsIDQ2MTEsIAotICAgIDAsIDY3NjM3LCAwLCA5Njc5LCA3NDEyMiwgMCwgMCwgMCwgNjYxOTQsIDQ0MTgsIDY2MTg0LCA0NjI4LCA0MjQ1LCAKLSAgICAxMTk2NDgsIDAsIDAsIDE4NTEsIDAsIDEyNzE4OSwgMTE5MDgsIDAsIDkzNjAsIDExODg5NywgOTgzMjAyLCA0Mjc3NiwgCi0gICAgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCA5MjcxNCwgMCwgOTIzMjEsIDQzMzE4LCAwLCA4ODA5LCA2OTg4MSwgMCwgCi0gICAgOTgzMTQyLCAxMjA2MDQsIDk4MzA1MiwgOTgzODgyLCAwLCA5ODMyNzAsIDAsIDAsIDc0MjcsIDk5NTgsIDQ1ODgsIDQzNjgwLCAKLSAgICAwLCA3NDQ4NCwgMTk0OTY4LCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCA5ODM4ODUsIDAsIDc5MywgNzQ0MDQsIDAsIAotICAgIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAxMjg1MTksIDgyMDgsIDAsIDQxNjk1LCAxNjQ3LCAxMTg4NzcsIDAsIDc4MzcsIAotICAgIDkxNzYyNSwgODE4LCA1MzM3LCAxOTQ2MjgsIDkxNzYyMSwgNDEzNzYsIDExOTk3OCwgMTI2NTc2LCAxMjA1OTQsIDc0MDg2LCAKLSAgICA5MTc2MTUsIDkxNzYxNCwgOTE3NjEzLCAxMDk3MywgNjYzNTksIDEzNzIsIDEyNzE3MiwgOTE3NjA4LCA0OTY5LCAxMjU0LCAKLSAgICA5MTc2MDUsIDkxNzYwNCwgOTM5NjcsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAxMjY2MTIsIDAsIDI4NDAsIDAsIDExOTk4MiwgCi0gICAgOTgzOTM5LCAwLCAzMjQ1LCA5MDY4LCA2ODE5NCwgNjQ3MjUsIDAsIDAsIDEyOTkxLCAwLCAyNjUxLCA2ODAxNiwgOTgzMjY1LCAKLSAgICA5MTc2MTEsIDEyNzAyNiwgMTI4ODgzLCAwLCAwLCA0MzY0OCwgMTIwODEyLCAwLCA0MzMyMiwgOTI2NjIsIDAsIDAsIAotICAgIDY0MzcyLCA5MjY5OCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIDc0NTIsIDMyODUsIDEyODc3OSwgMTI3ODIxLCAKLSAgICAxMTk5ODgsIDY1NjEwLCAyMzkxLCAwLCA5MjI0OCwgNjcxLCAyNTAsIDc0MzQsIDYxOCwgNjY4LCA2MTAsIDQyODAwLCAKLSAgICA3NDMxLCAxMTUyLCA0MjgwMSwgNjQwLCAxMjA2NjYsIDc0NDgsIDc0MzksIDYyOCwgMzkwNSwgNzM4MTAsIDAsIDEyODI2NiwgCi0gICAgNjQ3NDksIDY3ODUwLCAyMTA3LCAwLCAwLCA0NjA1LCAxMjgxNzQsIDk4MzE5MiwgNDMzNzIsIDY1OTQ1LCAxMjg4MzgsIDAsIAotICAgIDExOTU5MCwgMCwgMCwgMCwgOTg3LCA2OTI3LCAxMTU3MiwgNDIyNjEsIDExNDY0LCAzMzY1LCA5OTcxLCAwLCAwLCAKLSAgICAxMjgyOTcsIDAsIDAsIDAsIDAsIDExMzM0LCA0MzMyNiwgMTI2MDksIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgCi0gICAgNDYyNywgOTgzODkyLCA1MjA4LCAwLCAxMjg4NDIsIDEwMzMyLCA1MjE4LCA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCAKLSAgICA2OTY0NywgNzM4OTQsIDEyODg1MiwgNTQzMiwgNjQ5NjUsIDU1MjcsIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgCi0gICAgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgCi0gICAgMTIwMjc4LCA3ODg0LCAwLCAxMjg1NjYsIDkxNzk4OSwgMTI4NjY2LCAyMTEsIDI1MDksIDEyODg1OCwgMTIwNTczLCAKLSAgICA2ODY3MiwgMzIyMCwgNDIyMzUsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgCi0gICAgMTI3MjU4LCA1ODUyLCAwLCAwLCAxMjcyNTksIDE3MDgsIDAsIDk4MzE2NSwgMjYyMywgMTE5NDMsIDAsIDY5MjI2LCAwLCAKLSAgICA0Njk4LCA2NjUwOSwgMTA2NiwgMTE5OTIxLCA0NzAxLCA5ODM4NzYsIDEyMDI4NSwgNzQyMjUsIDk0MTExLCA4MjY3LCAwLCAKLSAgICAxMjcyNjUsIDAsIDc1MTYsIDAsIDI2MjUsIDk4Mzk3NywgODAzNCwgNzQzMDksIDAsIDM2MzEsIDEwOTU1LCA3ODUwLCAKLSAgICAxMjAyOTMsIDg0MTYsIDAsIDAsIDAsIDQzMzg0LCAxMjY2MCwgMCwgMCwgMCwgNzQ4NTAsIDQxMDY5LCAwLCAxMjgxNTYsIAotICAgIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgNzEzLCA3OTkwLCAwLCAzOTkwLCAwLCA5ODMyNjIsIDY2MzY4LCA1MDE3LCAKLSAgICA2NDk1NiwgNzA3MSwgMCwgMTE5MTQ0LCAxMDMwLCAxMTg4MDAsIDk4MzEyMCwgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIAotICAgIDAsIDEyMDM1MCwgMCwgNjMzOSwgNzc0NSwgOTg0NCwgMCwgNjQ2NTAsIDk0LCAxODgwLCA3NDc2NiwgOTgzODM4LCA4OTA4LCAKLSAgICAwLCAxMjg3MDcsIDY1OTEzLCA3ODQ3MCwgMTA3NTIsIDEzMDAzLCAwLCAxMjY1NzIsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIAotICAgIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDEyMDMzNSwgNjQ3ODUsIDczOTQsIDM2NDEsIDU0MTksIDEyODA1NSwgMCwgMTI3ODgzLCAKLSAgICAwLCAxMjAzNDQsIDQzOTg4LCAwLCA4NjEwLCA0MzA2MiwgNzU5MiwgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgNjk4OTQsIAotICAgIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgNzg2MzgsIDE5OTUzLCAwLCAxNTA0LCA3MDA2NCwgMCwgMTI5MTMsIDc0MjA2LCAKLSAgICA3NTI5LCAwLCAxMjg2OTksIDk4Mzk1NywgMTIwNzgyLCA0MTEzLCAwLCAyMzcyLCAzMzYsIDAsIDc1MDksIDEyMTUyLCAwLCAKLSAgICA2ODIsIDY2NDU4LCA0MTUwNSwgMCwgNjQ3NDMsIDEwNTkzLCAxNzAzLCAwLCA5ODM5NTUsIDgwMzMsIDY5OTUzLCAwLCAKLSAgICA5ODEwLCAxMjcyNjksIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIDkxNzYyMywgMCwgMTk0NjkzLCAwLCA5MjY5MCwgMCwgCi0gICAgMCwgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAKLSAgICAwLCAwLCA3NDIzOSwgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgMjA5MCwgMCwgOTM1MywgNzExNywgMjA3NywgNzc4ODYsIAotICAgIDAsIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgMTE5MjM2LCA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCAKLSAgICA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgOTgzNzE5LCAwLCAxMjgxMzUsIDQxMDM3LCA0MjY5MiwgNzc4NiwgMTI5NTksIAotICAgIDQxMDM5LCAxMjc0ODMsIDAsIDY4MCwgMjMwMiwgMTI4MjAwLCAxMTgxLCA3MDU2LCAzMTc0LCAxMjY1MTYsIDAsIDkyNjY4LCAKLSAgICA2NTY2NSwgMTI3Mzc1LCAxMjY1MDYsIDY5MjAsIDAsIDkyMjk1LCAwLCAxMTg5NjUsIDAsIDY0NjQ0LCAxMjY5ODEsIAotICAgIDc0MTE5LCAwLCA0MTAyOCwgMCwgNjIzMSwgMjYxMywgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCAKLSAgICA5ODM1NjYsIDAsIDQwOTg3LCA0NjY3LCAwLCA5ODM5MzIsIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCAKLSAgICA0NzQ5LCA5MjY3NSwgMCwgOTIxLCA0NzQ0LCAwLCAxMjcwMiwgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgNzgzODYsIAotICAgIDEyODEyMSwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgOTUxLCAwLCAwLCA5ODM4NjcsIDc2MDQsIDk4MzI5MCwgNDAwOSwgCi0gICAgMTI3ODE2LCA5ODM3MTAsIDEyMDU2MiwgMCwgOTgzNzIwLCA2NDg2MCwgMTE5MTM4LCAxMTkwNjksIDAsIDEyNzM3MCwgCi0gICAgNDA0OCwgOTgzNTk4LCAwLCA3MDAyNCwgMTY0NiwgNzc4OTAsIDY0NTM0LCA3Mzk5NSwgMTIwNzA1LCAwLCAxMTk4OTAsIAotICAgIDI1NzksIDExOTkwNSwgMzE3NywgMTEzNTcsIDkwOTksIDQxMDcsIDM0NDEsIDExOTg5NCwgMjk3NSwgNzQ0NDIsIDk4MjIsIAotICAgIDk4MzkzNSwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCA5MTc1NjIsIDE5NDYxMCwgMzM5OSwgOTg1MSwgCi0gICAgOTgzNzE3LCAxMTkwOSwgOTA1OSwgMCwgNzY4NywgMCwgNjc4OSwgMCwgMCwgMCwgNzEzNjcsIDAsIDAsIDE3NzcsIDkxNTEsIAotICAgIDExMzcsIDY5NzY3LCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAxMjg1NzQsIDEyODIxOCwgMCwgMCwgNTk4OSwgMCwgMCwgCi0gICAgMTI4MDkxLCAwLCA0MTY4NSwgNjkyMjMsIDAsIDk3NjksIDQxNjg0LCA5ODMyMTYsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIDAsIAotICAgIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCAKLSAgICA2OTY4OCwgNjk3NzEsIDc0NDc5LCAwLCA2NTU4LCAwLCAwLCA2OTc2NSwgMTIwNzUwLCAyNTIsIDAsIDQxMzAyLCAwLCAwLCAKLSAgICAwLCA2OTc2MywgMCwgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIAotICAgIDk4MzIyMywgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIDI0MDMsIDY0ODA4LCA1NTI3NSwgMCwgMTE3MjgsIDQzNTcyLCAwLCAwLCAKLSAgICA3NzY0LCA5ODM3MTQsIDExMDk0LCAxMjA4MjUsIDAsIDk4MzIyNiwgNDI4MiwgODI5OCwgMCwgMCwgMCwgMCwgMCwgNjQ0NDksIAotICAgIDAsIDEyNjY1MCwgNjM4NTQsIDg0NTYsIDAsIDc0NzgzLCA2NTY3MCwgMCwgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAKLSAgICAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgMzQ1OCwgNDM2NSwgNzAwNTMsIDk4MzcxMiwgMzY0NywgCi0gICAgMCwgMjYwMiwgMTI4MzQxLCAwLCAxOTQ3MDcsIDQxMTM1LCAwLCAwLCAwLCA2NDYzMSwgMTcyLCA0OTcxLCA0MTIxOSwgCi0gICAgNDExMzcsIDE4ODksIDcyMzgsIDY1NDUsIDEyNjQ3NiwgOTIxOTMsIDc1OTcsIDEwNTI4LCAwLCAwLCAzNzMyLCA3MzkxMCwgCi0gICAgMTk0NTg4LCA1MzQ0LCAwLCA0MzM2NiwgNDMzNjMsIDkwNjIsIDExOTI1MiwgMCwgMCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCAKLSAgICAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgCi0gICAgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMTI3MzU0LCAxMjczNDUsIDI5OSwgOTE3OTU3LCA4NTI1LCAxMjczNDcsIDM1MjQsIAotICAgIDkxNzU2NSwgODgzMSwgMTI3MzQ5LCA5MjU2NCwgMzA3NSwgNjc4NjcsIDEyNzM1MiwgMCwgNjYzNjIsIDAsIDY0MzUzLCAwLCAKLSAgICAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgNjg0NjAsIDAsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIAotICAgIDk4MzIwMSwgNjM0MCwgMTE4ODU1LCAwLCA3ODEzNCwgODY4MCwgNzIwNCwgNzAwNjUsIDI1ODgsIDI5MTQsIDcwMTEsIAotICAgIDU1MjgxLCAwLCAyNDcxLCAxOTQ2MzEsIDI4ODMsIDI3NDksIDExOTU2MywgNzM3NzQsIDEwOTEzLCAwLCAwLCA4NjY2LCAKLSAgICA2NzUsIDQyNDkzLCAwLCA0MzU3MSwgMCwgNjIxOSwgMCwgOTk4MCwgNDEyMzIsIDEwOTI4LCAwLCA0MTE1MywgNDEyMjksIAotICAgIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDAsIDEyNzExLCAzMTgxLCA2NjIxMiwgNzQyODksIDY4NDcyLCA0Mjg1NywgODI2MiwgCi0gICAgOTgzMzc5LCAwLCA5ODMyMjIsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgNzIzNCwgNzQwNDcsIDk4MzA4OCwgMCwgNDM3NDQsIAotICAgIDAsIDAsIDczODQ2LCAyOTM0LCAxMjcyMiwgMTIwNzYyLCA5MjIsIDQzOTgzLCA3NDUwNywgOTgzMTI2LCA3NDQ2MSwgMzIxOCwgCi0gICAgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAzMjE0LCAKLSAgICAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCA3ODcyOSwgMTkwMSwgNzg3MjcsIDEyNzMyNiwgMTIwNDYwLCAKLSAgICA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCA3ODczNSwgNDMzODMsIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIAotICAgIDczODk3LCAwLCAxMTQ5NiwgMTE3MywgMCwgNDEyNzIsIDExOTY2MSwgMCwgMCwgOTgzMzIxLCAxMjA3MzcsIDAsIDk4Mzk3MSwgCi0gICAgOTgzMzIwLCAzNzgsIDI2MTAsIDAsIDY1MDc5LCA5ODMzMjUsIDY1Njk1LCAxMjY1NTksIDM3LCA3MDY4LCAwLCAxMjA0ODAsIAotICAgIDEyMDQ3OSwgMzIwOSwgMTIwNDc3LCAwLCAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgOTgzMzk5LCAwLCAwLCAwLCAwLCAKLSAgICA2NTUxMCwgMCwgMCwgNTIzMywgOTgzMzM1LCA2NDc5MiwgOTgzMzM0LCAwLCAxMjY2MzMsIDAsIDcwNjAsIDk4NDcsIAotICAgIDEyMDE0NCwgMTY4NSwgNTk1LCAwLCA3Mzk3MSwgMTI5MiwgODk0MCwgNzM4MCwgMTEwODgsIDAsIDEwMDA0LCAxMjY5OTcsIAotICAgIDAsIDY1NDEsIDAsIDAsIDAsIDMyNDMsIDkwMTQsIDU2MDYsIDAsIDUzOCwgNjQ2MjAsIDU2MDIsIDg0NjcsIDc0MzkxLCAKLSAgICA2NTQ3LCAxMjgxMzIsIDgyMDMsIDc4NDg4LCA5ODMwOTAsIDg0NTgsIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgCi0gICAgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIDY5OTAxLCA4MTkzLCA1NTI3OSwgOTczMCwgOTI4MCwgMCwgNzA2NSwgNzQxNTUsIAotICAgIDQzNDYsIDAsIDczNzk4LCA1MDQsIDAsIDkyNDE0LCA4OTgyLCAwLCAwLCAwLCA3ODIsIDAsIDEwODgzLCAwLCAxOTQ4NTIsIAotICAgIDczMiwgMzczNywgMTI3MjUzLCAxNTQ4LCA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIAotICAgIDQzNzYsIDAsIDExNzg3LCAzNzQ1LCAwLCAwLCA0Mjg4OCwgNjU3MTIsIDk4MzMwNCwgMzg2OSwgMTE5MzcsIDU3MjUsIAotICAgIDEyNzUzOSwgMTc4MywgNjg2NDgsIDU3MjgsIDAsIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgNzg1MjEsIAotICAgIDAsIDAsIDc2NCwgMCwgMTI4MTE2LCA0MzUzMSwgMCwgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAxMjA3NDksIAotICAgIDExNDIzLCAwLCAxMTk4NjEsIDcxMzQ0LCA0MzQ2NSwgMCwgMTI4MjY3LCA2NTU5LCA2NDU1NywgNzEzNDgsIDkyNjQ5LCAKLSAgICAxMjA2NDgsIDQzMDE5LCA0MzQ3NywgMTAyMzgsIDc0NDkxLCAwLCA0MzM3NywgOTIyODIsIDcxMzQ2LCAxNDc4LCA5NzgzLCAKLSAgICAxMTgyNSwgMjYwNywgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgNzAwNTgsIAotICAgIDQxMTQ0LCAwLCA5MjQzOCwgNDM1MzcsIDY3NjEsIDEwMDkzLCA0MzY5LCA5MTc3OTEsIDAsIDk4MzE0OCwgODgyMCwgMzk0NywgCi0gICAgMCwgMCwgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgMTk0NjAzLCA5MTc3ODUsIDE5NDkzMiwgMCwgNzY4OCwgOTE3Nzg2LCAKLSAgICA3Njg2LCA4Mjg4LCAxMTgxNSwgMCwgMCwgOTgzMzgyLCAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIAotICAgIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCA0MjA4MiwgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIAotICAgIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIDAsIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA2NzgwLCAwLCAwLCAKLSAgICAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgNDEyMTcsIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIAotICAgIDMxMzcsIDAsIDQxNDcsIDk4MzE3MCwgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCA5ODMyOTQsIAotICAgIDEzMDc2LCAzMTM1LCA5ODMyODcsIDc4MTQzLCAxMTkxMzksIDMxNDIsIDkyNDUxLCA5NDA2OCwgMTA4MTksIDExOTU4MCwgCi0gICAgMTAxODMsIDAsIDI2MDgsIDE0NzAsIDczOTY3LCA5NDAwOCwgNjIyNywgMCwgMTI3MTczLCA2OTc0MSwgOTgzNTgyLCA2MTYzLCAKLSAgICA5ODM1NTgsIDAsIDEyNzMxNCwgMCwgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAxMDg3NiwgNDMzOTIsIDExOTU3MywgCi0gICAgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAwLCAxMjA4NiwgNzQwMywgMTYwMCwgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgCi0gICAgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgCi0gICAgNjk3NCwgMCwgMCwgOTgzMjExLCA1MDAyLCAwLCA0MTI4NiwgNjk5NDYsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIAotICAgIDk4Mzk2MiwgMTI4MjI5LCAwLCA0MTI4OSwgMCwgMTk0NjAyLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgMCwgMTI4Nzc4LCAKLSAgICAxMjg2NjEsIDAsIDk4MzM3NSwgNDEyNzksIDAsIDAsIDAsIDExMDgxLCA0MzYxNSwgMCwgMCwgMCwgOTgzNjEyLCAxMjcyNywgCi0gICAgMCwgMCwgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDk4MzgyOSwgCi0gICAgMTk0NTcxLCAwLCA3MzkxNSwgODA3NiwgNDMwNDgsIDgyOTAsIDgyOTEsIDQzMDUxLCA5MjU3MCwgMCwgMjU5NiwgNDM1ODQsIAotICAgIDAsIDEzMTEzLCAwLCAxMjc3NTcsIDIzOTMsIDcwNTgsIDkwODcsIDc0MDY3LCA2ODY3MywgNDE1NzQsIDc4MzM3LCAwLCAKLSAgICA3NDA1OCwgNjM3NiwgMCwgMCwgMCwgMCwgOTg1NCwgMTI3NzQ4LCA2NDY5NiwgMCwgMTI4MjIwLCAwLCA2OTk0LCAwLCAKLSAgICAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCA5ODMxODIsIDM3NTEsIDkxMjAsIDk4MzQ4NSwgMCwgMTc5OCwgNzA5LCAwLCAKLSAgICAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIDgxMzcsIDk0MDk4LCA5MjY0MiwgMCwgMCwgMjQ1LCAxMjgwOTcsIAotICAgIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIDYxMzYsIDkxNzYwOSwgNjU2NzcsIDg2ODIsIDQxMjM1LCA5MjU5NSwgCi0gICAgNDIwNDUsIDk4MDQsIDExODk2MywgNDMyLCAzNTk1LCAxOTQ5NDUsIDY1NDM3LCAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIAotICAgIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCAKLSAgICA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgMCwgOTQxMDksIDAsIDc0MTM3LCA3MDAzNSwgMTAwNjMsIAotICAgIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCA5ODM3MzcsIDAsIDEwNjUsIDAsIDAsIDQzNDAwLCAyNTc2LCAKLSAgICA2NjY5NiwgOTM5OTksIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgNTE0LCA3NDUwMiwgNzAwMzIsIDI5MjEsIDQzMjE1LCAKLSAgICA2NDQ5MywgNTc3MiwgMTI5NjgsIDcwMDU1LCAxOTQ5NDQsIDc0NTgwLCA0MzM5OCwgMjU4MCwgOTgzODEwLCA0MTM0MSwgCi0gICAgNDEyMjMsIDY1NjQsIDE0NjMsIDQxMzQyLCAwLCA1MjkzLCA3MDAyMCwgMCwgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCAKLSAgICA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCA5MTc5MTUsIDAsIDEyNzAyNSwgMCwgNzQ4MjEsIDAsIDk4MzczMywgCi0gICAgMTE5MDQyLCAwLCAxMjc4NjUsIDEzMDkwLCA2NjY0MywgMCwgMTI3MCwgMTEzMiwgNDIzNjAsIDAsIDc0MDk2LCA2NjY1NSwgCi0gICAgNDI1NjksIDEyNzgyNCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCA0MjQzMiwgMCwgMCwgMTk0NzgyLCAwLCA2NDQ5NiwgCi0gICAgNzQxMDksIDcwMDMwLCA5OTE1LCAwLCA5ODMyMTgsIDcwNjEsIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCAKLSAgICA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCA2ODIyMSwgMCwgMTI3MzgzLCAxMjcxNzEsIDAsIDAsIDEyNzc5NywgCi0gICAgOTAyOSwgNDM1NDMsIDExOTMxNSwgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgNDM2NjQsIAotICAgIDkyMzk5LCA2NjYyNywgMCwgNDQ4NCwgODUwOSwgMTE4OTc2LCAxMTA2NiwgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgCi0gICAgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAxMjEwNywgNzEwMCwgMTA5MDUsIDY1MDEwLCAxOTQ5ODYsIAotICAgIDY5NywgNjYwMTgsIDkyODQsIDQyNDQsIDAsIDAsIDkyNjQ0LCAxMzEyMSwgMTIwMDM2LCAwLCAxMjAxMCwgMTI4NTczLCAKLSAgICAxMjgyMjEsIDAsIDAsIDAsIDEyNzE5MywgNjU4MTYsIDY4MTExLCAwLCAxMjc5MzMsIDY1NjY4LCA5MjI1NywgNjYxOCwgCi0gICAgMTE4Nzg0LCA2NjM2NSwgMCwgNDIyMzQsIDEyNjQ4LCA3ODExMCwgNzEyMywgNzAwMzgsIDU3ODUsIDkxOTgsIDk3NjQsIAotICAgIDQxMzE2LCA2NTg3NywgNzM4MywgMTMyMzAsIDQxMjk5LCAwLCAwLCA2ODM2NSwgMTI4MjU4LCAwLCAwLCAwLCAxMzEyMiwgMCwgCi0gICAgMTkxLCA3MDA2MCwgODU4NSwgODAwMCwgNjQ0MTEsIDEyMDY1MiwgNDI4ODksIDY0ODUwLCA0MTA3MiwgNDE1NzgsIDAsIAotICAgIDQxNTc3LCAwLCAxMDAwMiwgMCwgNjUzMywgNzM4MDIsIDQxNTcwLCAwLCA2ODMsIDM5NiwgNDE1ODAsIDY4MTQ2LCAwLCAKLSAgICAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCA3ODE1NCwgMCwgNDc0MywgMCwgMCwgNzQwNDAsIAotICAgIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIDAsIDM3MzksIDYyNjMsIDcxMzQ5LCAwLCAzOTY0LCA2NTkyLCAwLCAKLSAgICAxMjg2OTMsIDY2MDQwLCAwLCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMCwgNDIwNzAsIDY1NjMsIAotICAgIDQzMDc1LCA5MDE4LCA5NDAwNiwgOTgzMzk2LCAxMjA2NywgNDEzMTIsIDAsIDU1NDcsIDc0NTMxLCAxMjc5NjksIDAsIAotICAgIDgxNzUsIDAsIDI4NCwgODEwOCwgOTM0LCAwLCA3NDAwMSwgMTczLCA2NjQ2MCwgNzE3NCwgOTI3MDMsIDExODgyMiwgMTc1MCwgCi0gICAgMCwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg4OCwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIDExOTE0NSwgMCwgCi0gICAgOTE3NTU4LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgNDUxMiwgMTE5MzYwLCAKLSAgICA2NTIzMCwgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIDM5NzUsIDAsIAotICAgIDc0MDg3LCAwLCAxMjY3MiwgMzc5OCwgMjcwMywgOTgzNTk5LCAwLCAyMTA5LCA5Nzc0LCAxMjc1LCAwLCAwLCA0MTA5NSwgCi0gICAgMzk2MiwgMCwgMjkzMiwgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgMCwgMCwgCi0gICAgNDE4NTEsIDEyODIzMCwgNDE4NDYsIDAsIDU1MjM4LCA3NjMzLCA0MTg0OSwgNjgzODUsIDQzMjAsIDMyMjQsIDAsIAotICAgIDEyODAzMiwgMCwgNDI1MzEsIDExOTEwOCwgMTUxMCwgMCwgODI1NiwgMCwgMTEzOTMsIDAsIDg4NzksIDEyODA3NSwgCi0gICAgOTI0NzQsIDg3NzAsIDAsIDAsIDc4Mzc3LCAxOTEwLCA4NjcxLCA3ODM3NCwgNDI4MywgMCwgMTI3MTE3LCA2ODM2MSwgCi0gICAgNzgzMTgsIDI2NTQsIDc4OTMsIDE5NTAwNywgMCwgMCwgMCwgNjUxMDYsIDQyNzYxLCAxMjg1NywgNDU4MSwgODQxMSwgCi0gICAgNzgzNzIsIDc4MzcxLCA3ODM3MCwgNzgzNjksIDc4MzY4LCAwLCAwLCAwLCAxNzMzLCA0MzkyLCAyNTY4LCAxMDc4NiwgCi0gICAgNjk2NjEsIDAsIDgxODQsIDQxNDg2LCAwLCA3Mzk2LCA3MTE2LCAwLCA2OTc4OCwgMCwgNzE4NSwgNzk2NSwgMCwgMCwgCi0gICAgOTIzNDcsIDk4MzA4NywgNDEzNTAsIDkxMjksIDAsIDAsIDIyOTQsIDAsIDkyNDg5LCAwLCAxMDQ4MSwgMCwgNzAwMjIsIAotICAgIDcxNzEsIDAsIDM0MCwgOTI0OTgsIDkzOTcyLCAwLCAwLCA5MjIwMCwgMCwgMCwgNjc2NCwgMTI3NDg3LCAwLCAwLCAwLCAwLCAKLSAgICA2NTIwMywgMTEzOTIsIDExOTA5OCwgMTE5MzU5LCAwLCAzMjEwLCAwLCAwLCAxMTg3OTUsIDAsIDAsIDEyNzk3MCwgCi0gICAgOTE3NjE5LCAwLCAwLCAxMDA0MywgMCwgMTE4NiwgNDE1NzEsIDY5OTksIDYxNywgOTQ2NCwgMTI2NjQyLCAzNjc1LCA1MjA3LCAKLSAgICA2NTA2MiwgNTIxMywgMTk0NzY5LCAyNjE3LCA0MTM0OCwgNDE1NjgsIDEyODgwMywgMzI1MywgMTIwNTM1LCAwLCA4NjMwLCAKLSAgICAxMjg1NDQsIDAsIDU1OTYsIDU1NDUsIDcyODgsIDI1ODYsIDY0ODg3LCAwLCA1MjE3LCA3MTMzNiwgMCwgMCwgMCwgNjQyOTMsIAotICAgIDY4MDk4LCAyNjM1LCAwLCAwLCA5ODM4NDYsIDAsIDk4MzY0MSwgNzgzNSwgNzAwNDAsIDAsIDE5NDk4OCwgOTIyODUsIAotICAgIDY0NTU4LCAxMjcxMjIsIDAsIDEyNzEyMSwgMCwgMTI3OTEzLCAwLCA1Nzg0LCA5ODMxMDIsIDAsIDAsIDcwMDMzLCA0MDExLCAKLSAgICA5MTc2MTYsIDY4MTAxLCAwLCA3ODY0LCA0MjU0LCA2NTA5NSwgOTgzNDk2LCA1NjAwLCAzOTAzLCAxMjcwODMsIDEwNDQ3LCAKLSAgICA1NTk4LCAxMjA3LCAxMjA1MjEsIDY2Njg5LCAzNTAxLCA0MjU4MiwgNDM2MDAsIDE5NDc4MCwgMCwgMTEyNCwgNTU5NywgCi0gICAgMTk0Nzc4LCAxOTQ3NzIsIDkzMjEsIDk4MzQ4NCwgOTgzNDgxLCA5ODM0ODIsIDAsIDE3MTksIDY4MzU2LCA2ODM1NCwgCi0gICAgOTY3MSwgMTEyNSwgNDM5OSwgMTI3NDc5LCA5MTc2MTAsIDk4MzQ4OCwgNzYzMSwgNTQ4OCwgNzEyOCwgMTIwNTMyLCAwLCAKLSAgICA1NDkxLCAwLCA4OTM3LCA0MzA0NCwgMjYwNCwgNzQxODcsIDU0OTAsIDQzMDQ2LCA1NDg5LCA3MjEyLCAxMTc2OCwgNDMwNDMsIAotICAgIDYzMDAsIDAsIDcxMjIsIDAsIDQzOTAsIDQ1NCwgNDEzOTcsIDAsIDk4NzUsIDc1OTMsIDE5NDc5MSwgOTIyNzQsIDExODkxMywgCi0gICAgNzIwNywgMCwgNjU5MDEsIDIzOTQsIDI1NzUsIDAsIDM3NDYsIDExMDE2LCA2NTc1MiwgMTIwMDM3LCAwLCA0MzQyMywgCi0gICAgMTI4NjgzLCAxMTk4OSwgMCwgMCwgMCwgMCwgMCwgODI0OSwgMTI4MTcyLCAwLCA3ODUzMSwgNjY0MCwgNzQ4MDYsIDI1OTgsIAotICAgIDUxMywgMCwgNjU4NiwgODY1NiwgMCwgMTIwNzEwLCA2NTAwOCwgMCwgMTk0Nzg0LCAxOTQ5ODksIDE5NDc5NSwgOTgzNDczLCAKLSAgICA5MjUxNSwgNjg0NzUsIDkzOTczLCAwLCAwLCA3ODYzNywgMTI2NDcsIDAsIDEyODA0MywgNjk4OTMsIDEwMzYsIDk4MzQ3NywgCi0gICAgOTI0MTksIDE3MjMsIDEyODA1NiwgNzQyMTcsIDAsIDQxNTc5LCAyNDQ0LCAwLCAxMDcwNSwgNzM4NzYsIDk4MzQ2OSwgCi0gICAgNzQ0ODYsIDk4MzQ2NywgNzQwLCAxMTkyMjIsIDE5NDk3OCwgMTk0OTg0LCAwLCA0MjM4LCAxMTA3MSwgOTQ1OSwgNjg0MzcsIAotICAgIDc4MTQwLCA3ODEzOSwgMTk0OTg1LCA4MTIxLCAxMDQzOCwgNzQ0ODcsIDQyNTc0LCAxMzI4NSwgNTUyNjMsIDExOTA3LCAKLSAgICAxOTUwMDAsIDU2OTAsIDkyMjU1LCA5Mzk5MiwgMCwgNDMxODEsIDEzMDk1LCAwLCAxMjc4NTcsIDY0NDk4LCAwLCA5NTA2LCAKLSAgICA2OTc4LCAxOTQ5OTMsIDc3OTkyLCAwLCAwLCAxOTQ5OTIsIDAsIDEyNzg0NSwgMTEyMiwgMzE3LCAwLCAwLCAwLCAwLCAKLSAgICAxOTIwLCAwLCAxMDE3MywgODI3LCAwLCAwLCA3ODM3OCwgMTIwMTI2LCA1MjIzLCAxMzA0LCAwLCAxMTk1NjQsIDUyMjYsIAotICAgIDEyNjAyLCA5NDA0NCwgMCwgOTMyOSwgNzc1OCwgOTIzOSwgNDExNzMsIDUyMjQsIDU0ODcsIDEyMjIsIDU2OTIsIDQxNzI1LCAKLSAgICA2OTIyOSwgOTY3NCwgNTY5NSwgNDE3MTEsIDY0NjI3LCAxOTkwOSwgMCwgNzQ2MDQsIDU2OTEsIDI4NywgODY2LCAyMzMsIAotICAgIDEyNzQ5MCwgOTgzNDQxLCA0MjgxNiwgOTQwMzYsIDY1MTQwLCA3NDc5NywgMCwgODgzMCwgNjU2OCwgNDIzMDAsIDEwNTI0LCAKLSAgICA0MTE3NSwgOTgzNDQ4LCA5ODM0NDUsIDk4MzQ0NiwgNTI5NiwgOTgzNDQ0LCA0MjQ5MiwgNDM0MDIsIDkyNDY2LCAzMzAyLCAKLSAgICAwLCAwLCA2NTE2LCA2NTE1LCA2NTE0LCA2NTEzLCA2NTEyLCAwLCA3ODU2LCA4NjkwLCAwLCAwLCAxMjEyMiwgMTE5NjAyLCAKLSAgICA0Mzk3NiwgMCwgMTc4NSwgNjk5MjUsIDY4NjIyLCA2NTE1MywgMTk0ODEwLCA1MTM4LCAwLCAwLCAxMTg4NjksIDAsIDQ1NDAsIAotICAgIDQxMTgxLCAwLCA2MjAwLCAwLCA1MTM0LCAwLCAzMjIsIDQ2NDMsIDUxMzIsIDAsIDYzODksIDEyODUzMywgNTE0MywgMCwgCi0gICAgODc5MCwgMTI4Njk0LCAwLCAxOTQ4MDIsIDAsIDg4NjksIDY5OTE2LCAwLCA0MjA2MCwgNzEzMjYsIDk2NDgsIDE5NDgwNCwgCi0gICAgMTI3MDEyLCAxMDI3MCwgMTAyODYsIDEwMzE4LCAxMDM4MiwgNDM1MjksIDY2NDc3LCAwLCAwLCA3NDE3MCwgMCwgMzIzNCwgCi0gICAgMCwgMCwgNzQzNzYsIDQzMTM5LCAxMTg4MTUsIDEyNzA4NCwgMTIwNjI3LCA4NzY3LCAwLCA3NDQ4OSwgOTY5NSwgMTIwNzQ2LCAKLSAgICA1MjAxLCAwLCA2MjE1LCAxMjcxNCwgNjIxNCwgMTMxMDEsIDAsIDE5NDk5OSwgNjUyNjgsIDAsIDAsIDAsIDExMDI3LCAwLCAKLSAgICAxMDA1OSwgMTA1MTEsIDQyMDc1LCA5NzY3LCA3ODksIDE3NDksIDc4ODkwLCAxMjcwNzEsIDk4MzY3MCwgMzIwLCAwLCAKLSAgICA4NjQ3LCAwLCAzMDQ5LCAwLCA2NDcxLCA0MjA3MSwgNDMxNTYsIDk5MjUsIDEyNzM1NiwgMTI3MzU1LCA2NjQ3OCwgNDk2MCwgCi0gICAgNTU0OSwgMTI3MzU5LCAxMjczNDYsIDg0ODUsIDQ2NzEsIDU0MTgsIDEyNzM1MCwgMzM1MSwgMTI3MDA2LCAxMjczNTEsIAotICAgIDEwNjEwLCA1NDE0LCAzMDY0LCA2MjEyLCA0Mjg2LCA1NDIxLCAxMjczNDQsIDk1NTQsIDAsIDk0MDQ4LCAxMjcxMDksIAotICAgIDY2NTMsIDEyODgxMSwgMCwgNjQ1MTAsIDYyMTMsIDEyODg1LCAwLCAxMTkwNDUsIDY0NzIwLCAwLCAxMjA3NTksIDczNzQxLCAKLSAgICAxMjYwMywgNzEzMSwgMTE0MzAsIDQ1NjYsIDc1MTgsIDkzMTcsIDM4MDEsIDEwMzQyLCAxMDQwNiwgMCwgMTE5MjU5LCAKLSAgICA0MjU3NiwgMCwgNTIwMCwgMTI2NjExLCA5MTc5NDgsIDAsIDkxODMsIDEyNzM2MSwgNzQ0NTgsIDczODI1LCAzOTUsIDU0ODIsIAotICAgIDUxOTgsIDQzNDksIDEwMzkwLCA3NDIwMiwgNTE5NiwgNDMyMjQsIDYxMTMsIDQyMDA5LCA1MjA1LCAwLCA0MzMwNywgMCwgCi0gICAgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgMTE4ODQzLCA5MTI2LCA0MzUsIDk4MzYyNCwgMTIwMTQsIDEwMzc3LCA4MDkzLCAKLSAgICA5MDc5LCAzMjAzLCAxOTIsIDY1MTA5LCAzMzg1LCAwLCA2NDQzMCwgNTM4MywgMTAyOTQsIDEwMzI2LCAxMjgxNzgsIDU3MzgsIAotICAgIDk4MzIxNSwgMzMzNiwgNzgzNTUsIDUzNjEsIDM2MjMsIDQxMTU5LCAwLCA2ODExMiwgNzg3MiwgODU4MSwgMCwgMTI2MCwgCi0gICAgMzE0OSwgNTM1OSwgMTIwMTM0LCAwLCA3OTE0LCA1MzU3LCA5MjE3MCwgMTI4NjU5LCAyNjI0LCA1MzY0LCAwLCAxMTQzMSwgCi0gICAgMTIwMDMwLCA5MTAxLCAxMTA1OCwgNzgyODgsIDAsIDc4MjkzLCA0MjI3MSwgNzgyODksIDQyOTE3LCAxMjA3OTMsIDAsIAotICAgIDY1NTY2LCA2NzE3LCAxMDYxOSwgNDMzNjAsIDc4Mzg1LCA3ODM4NCwgMTE4MzIsIDc4MzgyLCA3ODM4MSwgNzgzODAsIAotICAgIDc4Mzc5LCA5MzE5LCA3MDk3LCAxMTkwNTUsIDc3OTA2LCAzMjMyLCA3MzgyNCwgNzQ1ODEsIDEyMDYzMiwgMCwgMCwgCi0gICAgNDE4ODksIDkyNDUzLCAwLCAxMTYxLCA0MTg5NSwgNzQxMDMsIDk3MDEsIDg2MjIsIDAsIDAsIDczODE5LCAxMjA1ODgsIAotICAgIDUwMTIsIDc3OTEyLCA0MTM2MiwgNjk4NjIsIDc4Mjk2LCAxMTkyMSwgMCwgMTE3NjksIDAsIDY4NjA5LCA0MTM2NCwgMCwgCi0gICAgNzQyMjgsIDQxMzUyLCA0MTM2MSwgMCwgNDEzNjYsIDAsIDMzNTYsIDExNjExLCA5MTcsIDY4NDIyLCAxMTk5MTUsIDcxMzQsIAotICAgIDgxOTksIDc4Mzg5LCAxMTk5MTcsIDY3NywgMTE5OTE2LCAwLCAxMTk5MzIsIDEyNzE2OSwgMCwgMCwgMCwgMzM0OSwgCi0gICAgNzQxMjUsIDcwMjIsIDg5MjcsIDQ3MzksIDAsIDU4MDIsIDAsIDg2MTUsIDAsIDAsIDQ5MSwgMTI4ODE5LCAxMDE5MCwgCi0gICAgMTIwNjk4LCA2NTgzNywgMTI4ODIwLCA4NDI2LCAxMTA5MiwgOTg5MSwgMCwgNDI0OTcsIDcxMTMsIDc1ODYsIDQyMzA1LCAKLSAgICAxMDg1MiwgMCwgMCwgNDYwNiwgNjg0NDgsIDkwOTUsIDc3NDEsIDEyNjg0LCA0MTg4NSwgMTA0NiwgNzEyNCwgMCwgMCwgCi0gICAgNTgxNSwgNTE3MSwgNjU1MzksIDY4NjEyLCA2OTMyLCA3NDI2NywgNDIzOTQsIDQxODc4LCA3NDg0OSwgMTIwNjIxLCAwLCAKLSAgICA1MTY5LCAxMTkzNSwgMCwgMCwgMzE3NSwgMTIwODIyLCAxNTM3LCAxMjA4MDQsIDUxNzYsIDg5MDUsIDQxMzYsIDQ4NzEsIAotICAgIDc4Mjg3LCAwLCA5ODMzLCAwLCAwLCAxMTI4LCA2NTkyMCwgMCwgOTcxMSwgNzA1NywgOTQwOCwgOTQwOSwgOTQxMCwgOTQxMSwgCi0gICAgMzY2MiwgOTQxMywgMzM3OCwgOTQxNSwgOTQxNiwgOTQxNywgOTQxOCwgNjMyMCwgOTQyMCwgOTQyMSwgNTg5NywgOTQyMywgCi0gICAgNTE2NSwgNTEyNiwgNDEzODUsIDAsIDQxMzg5LCA5MTc5MzgsIDg5NTUsIDMzNzQsIDk0MDAsIDk0MDEsIDcxMTksIDk0MDMsIAotICAgIDk0MDQsIDM1MDcsIDk0MDYsIDc2MjksIDk4MzYxNywgMTk5MjUsIDQyNjY5LCA2ODQ2MywgMTgzLCA0Mzk4NSwgMjYzMSwgMCwgCi0gICAgMTA2MjcsIDQxMTMwLCA3ODI2MCwgMzk5NiwgMCwgNzg3NzEsIDAsIDExOTMxMywgMTE5MzA3LCA3ODc2OCwgNjU4MCwgCi0gICAgNDMzMiwgNjQ4MjUsIDY2MzI5LCAxMDcyNiwgNjY2ODYsIDQxMTI1LCA1ODk5LCA0MTM2NSwgOTE3OTE4LCAxMjA4NSwgMCwgCi0gICAgNTc0LCA5MTc5MjIsIDc3ODI1LCA3MzgyOCwgNTQ0OCwgNDEwNTgsIDU0NDYsIDY5NzA5LCA0MTMyMiwgNDIyMTEsIDU0NDIsIAotICAgIDQxOTAsIDc3ODM0LCA3NzgzNSwgNTQ1MSwgNzc4MzMsIDM2MTYsIDc3ODI4LCA3NzgzNywgNzc4MzgsIDc3MDgsIDc3ODM2LCAKLSAgICAxMDg1OSwgNjU4NjcsIDEwMzQ1LCAxMDQwOSwgNDE5MSwgMCwgNzc4NDQsIDczODAwLCA0MjE4MSwgNzc4NDMsIDc3ODM5LCAKLSAgICAyMDYwLCAwLCA3MTExLCAxMTc4OCwgNjU1ODcsIDY4MTI5LCAxMDQxNSwgNzQxMDIsIDAsIDIwNSwgMCwgMTAzNTEsIAotICAgIDExOTA3NiwgMCwgOTg2MiwgNjU4OCwgNDMyNTcsIDY0Njk3LCA3Mzk5OCwgNDEzNTUsIDU1MDUsIDExOTE1NCwgNTUwMywgCi0gICAgODAyMSwgMCwgNzEyNSwgOTgxOSwgNDEzNTcsIDgwMTEsIDQyODg1LCA1NTA3LCAxMjA0NCwgOTI2MzYsIDAsIDEwMDI2LCAKLSAgICA1NDcyLCA3MTA5LCAxMTkxLCAxMzEwNiwgNTQ3MCwgMTAzMjksIDU0NzYsIDg5OTEsIDY2MzIyLCA2OTc3OCwgNzgyNjcsIAotICAgIDQyODc0LCA4NTUwLCA0Mjg3NiwgNTU5MiwgMjkxOSwgMCwgMjY3NSwgNTU5NSwgNzg0MTEsIDQzNzYyLCA0MzY3LCAwLCAwLCAKLSAgICA1NDc4LCA1OTA0LCA1NTk0LCAwLCA3NDE1MCwgNzI5MSwgNTU5MCwgNDM3NjEsIDEzMDY3LCAxMTg5MDksIDEyMDM3MiwgCi0gICAgOTgzMTA4LCA5NzMxLCA2OTczMSwgNjQ2MzMsIDc3ODU3LCA3Nzg1NCwgNzc4NTUsIDc3ODUyLCA3Nzg1MywgNzc4NTAsIAotICAgIDEwNzUwLCA0MzcxNCwgNzc4NTgsIDcxMzcsIDAsIDEyODI5NiwgMTI4ODcsIDEwNTUxLCAxOTQ1NjQsIDc3ODY2LCA3Nzg2NywgCi0gICAgNzc4NjQsIDc3ODY1LCA5OTI5LCA1MTk5LCA5OTM2LCAxMTIwLCA0MjM4NywgMCwgMTQ0NCwgOTQ4NiwgNzU1NCwgNjU4MzksIAotICAgIDU1MjUyLCA3Mzk3MiwgMTQ0MiwgMCwgNTg5NCwgNzAwNjksIDAsIDQxMTcxLCA5MjUxMSwgNzQzMTMsIDAsIDEzMTYyLCAwLCAKLSAgICAzMzM0LCAxOTUwMTAsIDExODgwMywgNzc4ODEsIDY2MDIyLCAwLCAwLCAxNjUxLCAxMjg3NzEsIDg4NjEsIDAsIDAsIDExNDIsIAotICAgIDAsIDgyNzEsIDAsIDk4MzA1OCwgMTI2NjQ1LCAxMjkwMywgMCwgNDAwMiwgNDM2MjYsIDEwNDQyLCAxMDY3NiwgMzM0NCwgMCwgCi0gICAgMCwgMTI5MjAsIDE5NDU2MCwgMCwgMCwgNjY2NDIsIDEyNzcsIDAsIDc4NzEsIDAsIDE5NDY4NiwgNzg4NTMsIDAsIDc4ODU0LCAKLSAgICAxMjAzNjAsIDAsIDExNzg0LCAwLCA3ODAxMiwgNDcwMCwgNjYzNjYsIDc4ODU4LCAxMjAzNTksIDExMDEyLCAwLCA3ODg1NiwgCi0gICAgOTI0MDAsIDc3ODc5LCA0OTczLCA4Nzg0LCA3Nzg3NywgNzQ4MDQsIDc3ODc0LCA3Nzg2OSwgNzc4NzEsIDQyNDQwLCAwLCAKLSAgICA0MzExOCwgMCwgNDIzNjQsIDY3NzQsIDY3NzMsIDkxNzU2MCwgMTIwMzY5LCAxMDM0NiwgMTA0MTAsIDc4ODU5LCA5MjQzLCAKLSAgICAyNDY0LCA3NDI2MywgNjEwOCwgMzM3MiwgMCwgNjI0NywgNDMxMTcsIDc0NTI2LCA3MTIxLCA3NDE2NiwgMCwgMTIwMzU1LCAKLSAgICA5MjUzNywgMCwgMCwgMTk1MDM0LCAwLCAwLCAwLCA3MDA4MywgMzM1NCwgMTk1MDM3LCA0MTkyLCA5Mjg5LCAxMTg5OTksIAotICAgIDQxMTkxLCAzODc2LCAwLCA3MDA2NywgMTIwNjYwLCA0MzY5NiwgNDMzODAsIDAsIDk4MzA5MSwgMCwgMCwgMTE2MDMsIAotICAgIDk4Mzk1NCwgMCwgNjU4OSwgMTI4NTg4LCAxOTQ2NzksIDAsIDAsIDk4MzcwMCwgMCwgMCwgNDI1NzIsIDEyODI2NCwgCi0gICAgMTA2MzAsIDc0ODI3LCAxOTYzLCAxMTYyMiwgMTI3MDk4LCAxMTY1NCwgMCwgNzU1MCwgMTA2ODYsIDU5MDMsIDAsIDc4MDA5LCAKLSAgICA0MTMyOSwgOTY2MiwgOTE3OTM3LCA2NDY5OCwgMzM2NiwgMTAzOTksIDAsIDU1NDIsIDExMDEzLCAxMjc5MjcsIDEyODMwMCwgCi0gICAgMCwgNzg2MjEsIDE5NDY3MiwgNjkyNSwgMCwgMCwgOTE3OTI5LCAwLCAxMTU2OCwgOTgzNjczLCA0MzM2NywgNjQ1NzksIAotICAgIDkxNzkzMCwgNzg1MiwgMCwgMCwgNjc1NCwgNjMxMiwgMCwgNjQ2NzIsIDY1Mjk2LCAwLCAxMTg5NTcsIDAsIDQxNiwgCi0gICAgMTIyOTYsIDY4NDU3LCA3MzgzNCwgNjgxNzcsIDExMDUwLCAxMDk4NCwgOTIyMDgsIDAsIDAsIDkyMTgyLCAwLCA5ODM2MDUsIAotICAgIDk1MzIsIDY2MzU1LCAwLCA5ODMyMzQsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMTI4MjgxLCAxOTUwMzEsIDAsIDE5NTAzMCwgCi0gICAgMTk1MDU3LCAxMTQ0NSwgMCwgMjExMiwgMTk1MDU2LCAxMjg4MTQsIDEwMTg1LCAxMDIxLCAxMjgxMzAsIDk1MDcsIDEwMjEwLCAKLSAgICA3NDU0NCwgODAyMywgMTIwMCwgMTIyNDMsIDc4MDAxLCA1MjgyLCA3ODAwMywgOTYyNCwgMTE1NDUsIDAsIDEyMDQ5MywgCi0gICAgMzM0MywgNDQyNCwgMTEwNDcsIDE4ODUsIDQzMjY4LCAzODk2LCA3ODQ0NCwgNjY0OTcsIDI5NDcsIDM5MiwgNzg5NCwgCi0gICAgNDM5MSwgNjgxMzksIDk4MzA2MiwgMTMwNTksIDc0ODE2LCA3Nzk5OCwgMzM4MSwgNzk0MiwgMCwgNjkyMTksIDAsIDY0NzU3LCAKLSAgICAwLCAzOTEzLCAwLCAwLCA3ODIzNSwgNzA0NCwgMTI2NSwgMCwgNjMwOSwgNzA0NSwgNzE3NSwgNzA0NywgNzgyMzksIAotICAgIDExNzkxLCAwLCAwLCA4MjIxLCA3ODMwNywgNDE4NjQsIDAsIDAsIDAsIDAsIDE2NywgOTgzOTA2LCA3ODMwMSwgOTgzNjUzLCAKLSAgICA3NDIxMSwgNDE4OTcsIDY4NDc3LCAwLCA5MTc1ODMsIDk4MzYzNCwgOTQwNjUsIDI0OTMsIDAsIDExODgxMSwgMCwgMCwgCi0gICAgNjQzNTQsIDAsIDg3NzcsIDAsIDQwNiwgODg4NCwgMjM4NSwgMCwgOTI0NTAsIDAsIDkxNzU3MywgNDMwMzAsIDQyMDI3LCAKLSAgICAxMjExNCwgMCwgOTE3NTc5LCA2NDkzNiwgMTk0Njk1LCAwLCAxMjA2MjksIDEwNTYxLCAwLCA4MzY1LCAxMjA1MzksIAotICAgIDk4Mzc3NCwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAKLSAgICA5MTc1NzQsIDEwMjk4LCA2NjI0LCA0OTA4LCA5MTc1OTYsIDE2MzksIDAsIDAsIDc0MTU3LCA2MzI3LCA2NzI0LCAwLCAKLSAgICAxMjgwODYsIDkyNTY2LCA2OTkxMCwgNDgxNywgNzg0NDYsIDE5NDc1OSwgOTI1MzYsIDcwNDMsIDk2MDAsIDExMDIyLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3NTQ4LCA2NDc5NCwgNDIwNTAsIDEyMjkxLCA1NTI4OSwgMTk0NzYxLCAxMjM0MywgNjU3LCAKLSAgICAxOTUwNTQsIDQyNzA1LCA0NDYxLCAxMTM0LCAxODM4LCA3ODQzOCwgMjA1NywgMCwgNDQ2OCwgMCwgMCwgMCwgNDQ1NiwgCi0gICAgNTIwNiwgMTA3MjAsIDAsIDQyNTIzLCAxMjc1MjAsIDAsIDAsIDkxNzU5NSwgNjU1NTAsIDI2MCwgNDgxNiwgNjc2NTgsIAotICAgIDEwNjg3LCAwLCA0ODIxLCA0NDY2LCAwLCAxOTUwNDMsIDQ4MTgsIDE5NTA0OCwgNDE0MDMsIDExOTk3NywgMCwgMCwgCi0gICAgNDE0MDYsIDQzMjczLCA3NDE2MCwgMTE5OTgzLCA3MzkzOSwgOTI2MzgsIDExOTk4NCwgMTE5OTc5LCA0MTQwNCwgMTE2NSwgCi0gICAgMTE5OTgwLCA0NDUxLCAxMzA4NywgMCwgMTEyODQsIDExOTk4NywgNzAwOTcsIDY1MTU1LCA0MzAxNCwgNTQzOSwgOTM2MywgCi0gICAgNzAwNzAsIDMzNzUsIDEyODg2OSwgNTkwMCwgOTM5OTAsIDc4ODksIDI3MjIsIDQyMjYyLCAwLCAwLCAxMjg3NzQsIDAsIAotICAgIDIyODIsIDAsIDEyNzgxMCwgMTE0MDEsIDk4MzgyMiwgMCwgNjg0NTksIDAsIDAsIDAsIDAsIDY1NDM4LCAwLCA3MjgwLCAKLSAgICAxMjc4ODcsIDAsIDEyNzM4MSwgNDg2OCwgODI5NywgMTE5OTY2LCAxMTg3OTgsIDAsIDAsIDQzMTYxLCAwLCA5MjM2MCwgMCwgCi0gICAgNTE4MiwgMCwgMTIwNTQyLCAwLCAwLCA0MjI2LCAxMTkyNDMsIDEyMTM1LCA1NzMyLCA0NDY0LCAwLCA3MTMzMCwgOTc3LCAKLSAgICA0NDU4LCAwLCAwLCA2NDc3MCwgNzQ4MzgsIDAsIDM0NCwgMCwgMTk0NzkwLCAxMzk1LCA2NDI3OSwgMCwgOTIyNDAsIDAsIAotICAgIDc4NiwgMCwgNDMxNzQsIDY0MzQwLCAwLCAxOTQ3NjcsIDEyMDcyMywgNDMwMjYsIDc2MTIsIDEwMTMyLCA2NDQxMywgCi0gICAgNjUwMjUsIDAsIDAsIDAsIDkzOTU2LCAwLCA2ODQ0NCwgMCwgOTI0MzcsIDAsIDExOTE2MCwgMTAyMDQsIDkyNjU2LCAwLCAKLSAgICAxMjc4MDksIDk4MzY0NCwgMTM5OSwgOTgzNjUyLCA2NTIxNywgMCwgODg1MiwgMTI4NTcxLCAyNDEsIDEyODc4MCwgNDkwNywgCi0gICAgMCwgOTgzNjM5LCA3OTMyLCA5NzI3LCAxMjg4NzMsIDc0MjU1LCA4NzQ4LCAwLCAwLCA5ODM2NDMsIDAsIDQyNzgwLCAwLCAwLCAKLSAgICAwLCA0MjE3LCAwLCA4NjUwLCAwLCAwLCAwLCA2OTkwMCwgMTE4ODcyLCA0MzA5OSwgMzk2NSwgMTE5MTE5LCA2NzE5LCAwLCAKLSAgICAxMzMwMCwgNzg0MzksIDkzOTcxLCA0MzA1NywgNjY1ODgsIDExODk5MSwgMCwgMCwgNzM4MTUsIDQ0MjAsIDAsIDY0MTAsIAotICAgIDc3NjAsIDAsIDAsIDAsIDAsIDAsIDcyOTQsIDAsIDAsIDAsIDkwNjYsIDAsIDExOTkzLCA0MzE4OCwgMjYyNiwgNzc2MiwgMCwgCi0gICAgMCwgMCwgOTI2MDEsIDQyODI1LCA0MTg1NCwgNTMwNCwgMCwgNzg1MTYsIDY5MTksIDg2MTksIDExOTY1NSwgMTAwMzgsIAotICAgIDY2NDU0LCA5NTkyLCA0Mjg1MSwgMTI2OTkzLCAxNTQyLCA5MjMwMywgMCwgMCwgMCwgMCwgNzQzMTEsIDc4NDk3LCAwLCAKLSAgICAxMDE4MSwgMCwgNDM2MjQsIDAsIDc3NzksIDAsIDEwMTk1LCA5NDc5LCA2MDI5LCAwLCA5MjI2OCwgOTY4OSwgMCwgNjU1NzcsIAotICAgIDg5OTMsIDY2MzU4LCAwLCA0MjM3OCwgMzM2OCwgNjA2LCAxMjcwMzAsIDc2OTcsIDY5MjM3LCA2OTc4NywgMjAzMCwgMCwgCi0gICAgNjAyNywgODM3MCwgNDMyMiwgMCwgNjUyMDcsIDAsIDk4MzMzOSwgOTgzMzM4LCA5ODMzMzcsIDk4MzMzNiwgMjczNSwgCi0gICAgNDI4MzEsIDc3OTM1LCAxMjcxMjAsIDc0ODY2LCA4ODgxLCAxMTkwNDcsIDAsIDAsIDczOTQ2LCAwLCAwLCAwLCA2ODE0MCwgCi0gICAgOTgzOTI4LCA5NTc2LCAxMjg4NzIsIDMzNDcsIDQxNjAsIDUxNTQsIDU1Mjg4LCAzNzk0LCA2NjU2NCwgODUzMCwgMTI3MDYzLCAKLSAgICA3NzA5LCA0MTExMiwgOTgzMTMyLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDEyODc2LCA2NjU2MSwgOTgzNzU4LCA2NzU4LCAKLSAgICA5ODM5MjYsIDE2MTUsIDU4NTUsIDgwOSwgMCwgOTIyODMsIDEyODMxNiwgMTI4MDA0LCA1Nzk5LCA5ODMzMjgsIDcwMTAwLCAKLSAgICA5ODMzMjYsIDcyNjAsIDk4MzMyNCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgNzg4MTksIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIAotICAgIDEyMDYwNywgOTM0NywgMTI4MDY3LCA2NTMyLCAwLCAwLCAwLCAxMjcwNjAsIDY1ODI4LCAwLCAyODMsIDY4NjY1LCA3ODgxMywgCi0gICAgNTMyLCA3ODY2MywgMCwgOTgzNzk2LCAxMjA2MDksIDAsIDMzNzAsIDAsIDExMzYxLCA1NDQzLCA3ODc3OCwgODE1MywgCi0gICAgNzM3NjcsIDAsIDEwNzQxLCAwLCAyMjk4LCAwLCA5ODM5MTcsIDY1NDk1LCA2NDcwNiwgOTgzMzE4LCA0MzM0NCwgOTgzMzE2LCAKLSAgICA3MTQ0LCA5NDY2LCA3ODg2NiwgOTgyNCwgOTgzMzExLCA5ODMzMTAsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIAotICAgIDEyNzE3OCwgNDMyNjQsIDcwMDk2LCAwLCAwLCA0MzAzOCwgNzg4NjQsIDY3MzAsIDc4ODYyLCA2ODE2MSwgNjQ1NTAsIAotICAgIDUxODYsIDczNjAsIDEyNzgzNywgMCwgMTIxMDgsIDAsIDY1MTI0LCA0MzEyNywgNjYwNDMsIDAsIDYzMjYsIDQzMTA3LCAKLSAgICA3NzgyNiwgMCwgNDI1NjIsIDAsIDEyODgyMSwgMCwgMTI4NTIwLCAxMTQ4NSwgNjEwMywgMTI3MTIzLCA5ODMzMDUsIAotICAgIDExNzE4LCA5ODMzMDMsIDEyODg5LCA5MjY1NywgMTI3MTM3LCAwLCAwLCAwLCA1NTI0NSwgMCwgMTYzMCwgMTI4MjMyLCAKLSAgICA2NTQ4MywgMCwgMTI1NjUsIDAsIDY1NDc2LCAxMjAwMTMsIDAsIDExOTU1NCwgOTI4MywgNzcwMCwgOTE3NTM3LCA5NjkwLCAKLSAgICA2NTQ5OSwgMCwgNjQ1OTMsIDUxMiwgMzM3NiwgNjgyMTAsIDAsIDEyODY3NywgNzc4OTIsIDYzMiwgMTI5NDAsIDc3ODkxLCAKLSAgICA0MjUyOSwgNzg1ODcsIDAsIDU5NTcsIDExMDU5MywgODkyNiwgOTgzMjk5LCA5ODMyOTgsIDEyODI3MywgMTA3NDUsIAotICAgIDEwMTc0LCA3Mzc5LCA2NDU4MSwgNTM4NiwgMTIwNjg2LCAxMTcxMywgMTA2MzMsIDY5NzA4LCA1MDU2LCAwLCAwLCAwLCAKLSAgICAxMjA3NzMsIDAsIDk4MTIsIDAsIDQ0NjAsIDAsIDAsIDcxMzA3LCAxMjgwMzgsIDAsIDAsIDEyNzE3NCwgNjQyNzgsIAotICAgIDkyMzcwLCA0MzQ2NiwgMCwgMCwgNjQzODksIDI5NTMsIDczODc5LCAxODAxLCAxMjgzNSwgMTE5MDI5LCAwLCA3MzgyMywgMCwgCi0gICAgNjYzNzUsIDIwODUsIDcwMiwgNDI1NzksIDc3ODg0LCA3Nzg4NSwgMTMwNzQsIDc3ODgzLCA5ODMyODYsIDk4MzI4NSwgCi0gICAgMTI4NTcwLCAxMjEwNiwgOTgzMjgyLCA3NDIwNywgMTc1NSwgMTA0ODIsIDEyODYzLCA3Nzg5OCwgMTE2MywgMjk1MSwgCi0gICAgOTUyMiwgNzQwNzksIDc4MjY2LCA2NjYwNCwgMCwgMzM4NCwgNjkyMjcsIDEwNzAyLCA4MzAsIDc3OTAyLCA3Nzg5OSwgCi0gICAgNzc5MDAsIDg0NTEsIDAsIDAsIDAsIDY5NzM5LCAwLCAwLCAwLCAwLCAyOTA4LCAwLCA0MzM4NiwgNjQ5MDIsIDQyNDMsIDAsIAotICAgIDEyMjM5LCAwLCAwLCA0NDQxLCAwLCA5ODMyNzksIDczOTQwLCA2NDM1MiwgMTI3NTEzLCA5ODMyNzUsIDQxMSwgOTgzMjczLCAKLSAgICA5MTk5LCA5ODMyNzEsIDQwNTYsIDExODk5MiwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCA5ODM5MzcsIDU0MjgsIDE5NDc0MywgCi0gICAgMzM2NCwgNDIyNjUsIDY0NDM3LCAxMjc5MzUsIDExODgxNiwgMTk0NzQyLCA5Njg0LCAyMTYsIDAsIDE0MDEsIDEyODA1MywgCi0gICAgNDQwMTIsIDAsIDAsIDkyNTg1LCA5MTU4LCA3Nzg0MiwgNjk5MDUsIDU3NjgsIDAsIDAsIDAsIDQ4NCwgMTk0NzM5LCAwLCAwLCAKLSAgICA2NTg5NSwgMCwgMCwgMzMzOCwgNzM5MzUsIDU3MiwgNzA0MSwgMjczNiwgNjc2MDUsIDk4MzI2MywgOTM5NjIsIDI3OTQsIAotICAgIDg4MDcsIDY0NDkxLCA3Nzg0NywgNTQzOCwgNTIyMiwgNTM4MSwgNDMxMTQsIDAsIDUxOTMsIDUxMjUsIDU0NTYsIDU1MDksIAotICAgIDc3ODQ2LCAxOTQ3NDcsIDk1MzQsIDAsIDAsIDAsIDM0MzAsIDAsIDAsIDc4NzE3LCAwLCA5ODEsIDAsIDQzMzAsIDczOTI5LCAKLSAgICAxMjA1MzYsIDE4MjQsIDEwOTA4LCAwLCA3MDM0LCA0MTY4MywgNjQ2MTcsIDAsIDczNzU0LCAzOTU3LCA2NDM1OCwgNjQ1NDcsIAotICAgIDEyODI1OSwgNjc0LCA2Mzk5MSwgOTgzMjQ5LCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAzNzU5LCAxMTQxMSwgCi0gICAgODM2NCwgNTEyMywgMTE5NjI4LCA1MjgxLCA1NDY5LCA1MTIxLCAxMTkyNDUsIDExODk5MywgMCwgNTEzMCwgMCwgMCwgCi0gICAgNzc5OTAsIDAsIDEyMDcyNiwgMTIyMSwgMjczMywgMTE3NDYsIDc3OTkxLCA1MjE2LCAwLCAwLCAwLCAwLCAzNDY4LCA3MDMzLCAKLSAgICA5MjMwLCA1OTM5LCAxOTUwNTIsIDAsIDAsIDEyMDY3NywgNjg0MDAsIDcyNzgsIDEwMzIxLCAxMDI4OSwgNjQ2MTMsIAotICAgIDEwMzg1LCA0MTcwNiwgMCwgMCwgOTgzNDEzLCAwLCAxMTczOSwgOTgzNDI2LCA0MTk4MSwgMCwgNTkzOCwgMCwgNDM3NjYsIAotICAgIDEyNDQ4LCA3NTc2LCAxMDQwMSwgMTAzMzcsIDczODUyLCAwLCAxMzA1NywgMCwgMTI2OTc2LCAwLCAxMDAwOSwgMCwgCi0gICAgNDE3MDMsIDk4MzYzOCwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIDEyNzkwOCwgMCwgMCwgMCwgOTI0NTcsIDAsIAotICAgIDQyMjAsIDEwNzI1LCAxMDQzMywgMCwgNjgzOTUsIDQ5ODcsIDY0NTE5LCAwLCAxMjgzNDAsIDAsIDAsIDAsIDEwOTcwLCAKLSAgICAxMTczMywgMCwgMTIwNzkyLCAwLCAxOTk0NCwgMCwgOTAwOSwgODU1MSwgOTIzNDUsIDExNDY4LCA2NDYzNiwgNzU3NSwgMCwgCi0gICAgMjcyNCwgMCwgMCwgMTIzMTMsIDExMDU5MiwgNTE1LCAxMTk5NDcsIDQyNzkxLCA2Mzk4NywgNzgyODYsIDExOTk0MywgCi0gICAgMTE5OTQwLCAxMTk5NDEsIDExOTkzOCwgOTc3NSwgNDA0NiwgNDU4OSwgNDUyMSwgNjg2MjksIDkxNDEsIDAsIDc4ODUwLCAKLSAgICAyNzQxLCA2NDM5OSwgNjE5NywgMTM3MCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE4NCwgODYwNiwgMzMwMywgNDEzNzIsIAotICAgIDExNzg2LCA5NDczLCA2NjIwMywgNjYxNzcsIDkyNDQ2LCAxMTU5MywgNDMwMDcsIDQ0NzgsIDY2MTc4LCAwLCAwLCAyNzQ0LCAKLSAgICAwLCA0NDc3LCAxMTg5NjQsIDgxNCwgNDIwNjYsIDY2MTgzLCA2NjIwNCwgNDM3ODYsIDExOTk2MSwgNjYxOTgsIDQxODgwLCAKLSAgICA2NjE4OCwgMTE2MjMsIDc4MTQ4LCAxMTk1NSwgNjYxOTAsIDY2MTkxLCA0MTExMSwgNjYxODksIDczNzg4LCA3Nzg4LCAKLSAgICA0ODQ3LCAwLCAxMjc3NTksIDAsIDAsIDAsIDE1ODEsIDY1MzUsIDc4MTYxLCAxMjk1NCwgNDMwLCA3ODE2MCwgNTUyNTksIAotICAgIDc4MTU4LCAxMjgwMzYsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCA5ODM0MzgsIDY4NjI1LCA5ODM0MzYsIDcyNjksIDAsIAotICAgIDU5NjQsIDEyOTA4LCA5ODM1NTUsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDk4MzQyOSwgNDQzLCAKLSAgICA5ODM0MjcsIDQ5NDQsIDU0NjcsIDExOTYwMywgOTgzMjU0LCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIAotICAgIDQxMzAzLCAwLCAxOTQ5MzEsIDExOTk2MiwgNDEzMDYsIDczOTg0LCAyNjk4LCAxMjcxNTksIDAsIDEyMDcyLCAzMTkzLCAwLCAKLSAgICA0MTMwNCwgODI0LCAxMjg2NzYsIDEyMDkxLCA3ODg5MywgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIAotICAgIDExOTgyMCwgMTE5ODE5LCA2NTA1OSwgMCwgNjczOSwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCA2OTk0NywgCi0gICAgMTE5ODMyLCA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgNDY3MiwgNzgxNzMsIDc4MTc1LCA1NTMxLCA2ODM2NywgNDI1NzUsIAotICAgIDc4MTcwLCA3ODE2NiwgNDY3NCwgNDU0OCwgNDQwMDUsIDExOTk0OSwgNjg2NTgsIDExOTk0NiwgODAyNSwgNjg2MzAsIAotICAgIDEyNzAyNCwgMTg1NSwgOTgzNDEyLCA2ODY2OSwgOTgzNDEwLCA5MjQ0NSwgMTI3NTU0LCAwLCAxMjczMzksIDExOTY1MiwgCi0gICAgMjc0NSwgMTE3OTcsIDk4MzQxOCwgMTI4MTU5LCA5MjAyLCA0NjU0LCA5ODM0MTQsIDk4MzQxNiwgNjg2MzgsIDczOTkzLCAKLSAgICAxMDUyNSwgNDY0OSwgNjUyMDksIDk4MzQxNywgMCwgNDY0OCwgNDMwODAsIDk4MzQwNiwgOTgzNDA3LCA5ODM0MDQsIDYyNDYsIAotICAgIDY0OTUwLCA3ODI4LCA0NjUwLCA2Nzc3LCA2Nzc2LCA2Nzc1LCA0NjUzLCA3ODIyLCA3ODAwNSwgOTIzODQsIDQzMTg3LCAKLSAgICA4NjY5LCA5ODM0MTUsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgMjcxNiwgMCwgOTgzMDYwLCA5ODM0MTksIDAsIDY4MzY5LCAKLSAgICAxMjAwNTQsIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgNzgwMjcsIDc4MDI2LCA3OTkyLCAwLCAwLCA0NjYyLCA3ODAzMywgCi0gICAgNzgwMzIsIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIDQ2NTYsIDEwMTMwLCA2ODQ1MCwgCi0gICAgNzgxMSwgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgNTgxNCwgNDY2MSwgNDI0MzQsIAotICAgIDk4MzQxMSwgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgMTAwMDgsIDEwMjIyLCAKLSAgICAzMDU0LCAxOTQ5NTYsIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDk4MzM5NSwgOTQwNzAsIDk4MzM5MywgCi0gICAgOTgzMzk0LCA5ODMzOTEsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgCi0gICAgNzg4ODMsIDk4MzM4NiwgNDE3MzIsIDQ2MTYsIDEwNTE4LCAxMDQyMywgMTAzNTksIDk4MzM4MCwgNTk1OCwgMCwgOTgzNDMzLCAKLSAgICA0MjE1LCA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDk4MzM4OSwgNDEzMTMsIDUyMiwgNTM2OCwgMCwgNjU4MDMsIDAsIAotICAgIDUzNjYsIDEyMjAxLCA1MzcyLCAwLCA5ODM0MDksIDAsIDc3MjAsIDczOTAsIDI2OTYsIDk4MzQwMCwgMCwgNDYzOCwgCi0gICAgOTgzNDA1LCAxNzkwLCA3ODI0MiwgNTk2NSwgNjQzNjMsIDY2NTY5LCA2ODY0NiwgMTI3ODMzLCA1Mzc2LCAxODM1LCA1MzM1LCAKLSAgICAxOTQ5NjYsIDEyODA4OSwgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDEyODA5MywgNTM4NywgNTMzMywgMCwgMCwgCi0gICAgNDIwOTQsIDUzMzEsIDQ2MzQsIDExOTI4LCA5ODM1OTQsIDUzMzgsIDQ2MzcsIDEyODE3MCwgNTk3MSwgNDI0MTQsIDAsIAotICAgIDEyNjgsIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgCi0gICAgNDc1OCwgOTgzMzc0LCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCAKLSAgICA3NDM4NCwgOTgzMzc4LCA2ODM3NywgNjI0OCwgOTgzMzYyLCA5ODMzNjMsIDk4MzM2MCwgNDIzMTgsIDkyNTgyLCA1MjI5LCAKLSAgICA0NzU3LCAwLCAwLCAyNzI4LCA0NzUyLCA2NDU2MywgNjUyMzUsIDUyMzQsIDAsIDEyODE0NSwgMCwgMTA3MTMsIDcxNjYsIDAsIAotICAgIDI2MjIsIDc0NjAsIDEyNzMwMiwgMCwgMCwgODk1NCwgNzQ3NjAsIDY1MTg5LCAyNjMyLCA0MjYxNywgMTAxMDgsIDEwMTEsIAotICAgIDU1NzQsIDE4NTMsIDI3MDksIDY1MTM5LCA1NTc3LCAwLCAwLCAxMTg4NzEsIDY4NjQxLCA4OTY1LCA3NjM1LCA0MjE3NywgCi0gICAgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDk4MzQyMCwgCi0gICAgOTgzODcyLCAxOTQ5MDcsIDQ0MDAzLCAwLCA5ODM0ODAsIDk4MzQyMywgMTIwNDk4LCAxMjc4NTEsIDE5NTAwOSwgOTgzODY1LCAKLSAgICA3NDAyMiwgOTgzNDIyLCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgOTgzNDg5LCA1NzIxLCA5ODM0MDEsIDU1MTksIDg2MzIsIAotICAgIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA5ODMzNTIsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAotICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDk4MzM1NSwgNTI4NywgNTMwOSwgNTI4NSwgNjgzODksIDU5NjEsIDQ2NDcsIAotICAgIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIDYwMSwgNDYxMywgOTgzMzQ5LCA5ODMzNDYsIDc3ODQ5LCA0NjA4LCA2NDI2MCwgCi0gICAgNDExMjQsIDUxOTAsIDY3NjI4LCAwLCA2ODE0NSwgNzA4NiwgMCwgNjc5OTgsIDY3NjIwLCAwLCAyNzM0LCAxMTA3NCwgMCwgCi0gICAgNjc2MjcsIDQzNTkzLCAwLCA2NzYyNSwgNTk2MCwgMCwgODk5MiwgNDI1OTMsIDEyODI2MCwgMTc4MiwgNjc2MjIsIDY4MTE0LCAKLSAgICAxMTk5MzksIDAsIDY4MTgwLCA1NTAxLCAxMTk5NTIsIDQyNTA4LCA3NDQyLCA0MzY2NSwgMzU5LCA0MTI1MywgNjgzOTIsIAotICAgIDYyMzksIDExOTk1NiwgNDEyNTYsIDAsIDY4MTM0LCAwLCA3NDIwOSwgOTE3NTUwLCA5MzQ2LCA2OTY2MCwgNDEyNTQsIAotICAgIDEyODA0NywgNDMyOTEsIDM3NjcsIDU3MzcsIDAsIDQ4NjUsIDAsIDU3NDAsIDkxNzk5NywgNTczNiwgNDM2OCwgNjQ3MjQsIAotICAgIDcxOTMsIDY4MTM3LCAwLCA1NzM5LCA0MTAyNCwgNDg2NiwgMCwgNzM5MDQsIDk4Mzg0MCwgNDg2OSwgMTIwNTYzLCAwLCAKLSAgICA0MjIzLCAxMjgyMDEsIDY2NTAsIDEyNjUwOSwgMCwgOTgzNDYzLCAxMjc4OTAsIDQ4NzAsIDEyMDQ0NSwgNjg2NjEsIDY3MTYsIAotICAgIDc4MTc2LCA2ODY2NywgNjgzODIsIDY4Njc2LCAxMjc5MjUsIDEwMTIyLCA0ODY0LCA2NjU2OCwgNDE0NCwgNzkzNywgMCwgCi0gICAgNjI0NSwgNjg2NTIsIDI3MzIsIDQyNzM0LCA3NDUsIDAsIDE5NTA5NywgOTIxOTUsIDQ3NzcsIDc4MjEsIDAsIDY4NjMxLCAKLSAgICA0Mjc3NSwgMCwgMTk0OTU0LCAwLCAzMDk3LCAwLCA1OTY2LCA5ODM0ODYsIDQ3NzgsIDAsIDEwODYzLCAwLCA0NzgxLCAwLCAKLSAgICA2NDQwNywgMCwgMTI4MzIzLCA4NTc3LCAxMjg1NjIsIDY4MTk2LCA0MzI4NSwgMTAyMTYsIDQ3ODIsIDAsIDAsIDEyMDc1NywgCi0gICAgNjg2MTgsIDEyMzI1LCA0MzA1NiwgODcxNywgMCwgMCwgNDc3NiwgNzM4MTgsIDExNDkyLCA4NzAwLCAwLCAxMzE3NiwgCi0gICAgNjgzNjMsIDEwNDI2LCAwLCA5MTc1OTksIDEwMzYyLCAxOTQ3MDYsIDE3MTUsIDQ4NDksIDgyNDIsIDk1NjEsIDczOTIyLCAKLSAgICA0MzI3OCwgNDI2MzUsIDAsIDAsIDU5NjMsIDkxNzkyNiwgMCwgMCwgNDg1MCwgMCwgMTYwNywgNDY2LCA0ODUzLCAxMTg5OTUsIAotICAgIDQ4NTQsIDEyNzkxOCwgNTE2NCwgOTgzODcwLCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgCi0gICAgOTI0NzEsIDEyNDQ1LCAzNzg1LCAyMzQsIDMxOTksIDAsIDQxMjY4LCA0ODQ4LCAyNTMwLCA5MTc5MDksIDIwNjgsIDE5NjQsIAotICAgIDAsIDczNzYyLCAxMDQ1OCwgMCwgODU3NiwgNzg1NDMsIDAsIDI3MDQsIDQ3OTQsIDAsIDY4MjExLCA4MzIyLCA0Nzk3LCAKLSAgICA1NzUzLCAwLCAyNjk0LCA0NzkyLCAwLCAyNDM5LCA2NTEwNCwgNjk4MDQsIDk4MzQyNCwgMzAzLCA5ODMxMDEsIDkyNjIyLCAKLSAgICA5ODM0MjUsIDI0MzcsIDAsIDQyMjEsIDQ4NDQsIDkyMjE2LCAwLCAwLCAwLCA3MDA0MiwgMCwgNDMyOTIsIDAsIDI0NDEsIAotICAgIDEwNzM5LCA2NTA5MCwgMCwgMTE5MzI3LCAxMjY1NDEsIDI0NTEsIDI3MTQsIDExOTMyNiwgMCwgNDMzNzksIDQ5MzcsIAotICAgIDQzMzc2LCA3NTMsIDU4NDksIDEwNTk3LCA0MzA4OSwgMTE3MjIsIDkyNDgsIDkyNTU1LCA0Mjg3OSwgMTE3MjUsIDAsIDAsIAotICAgIDI3MjYsIDMxMDcsIDczOTU4LCA0OTQxLCA2NDkzNywgMTE5MjMzLCA5MTQwLCAxNDA4LCA1MjYxLCA0NjA3LCAwLCAxODEsIAotICAgIDk4MzQzMCwgNDk0MiwgOTUzOSwgNDkzOCwgMCwgNjUyMDEsIDUyNTksIDkzNjksIDY0MTg1LCA0MTQyLCA1MjU3LCAKLSAgICA5ODM2MDEsIDAsIDQ5NjQsIDUyNjQsIDY0MTc4LCA2NDE3NywgMTI5NzksIDQxNDExLCA2NDE4MiwgNjQxODEsIDY0MTgwLCAKLSAgICA2NDE3OSwgOTQ4MiwgNDg3MywgNDEyMzEsIDE4MjIsIDQyNTI2LCAxMjg1ODEsIDEyNzU4LCAzODY1LCAwLCAwLCAxMDUwMCwgCi0gICAgMCwgMTE5MDI0LCA3ODAyOCwgOTI0MDgsIDk4MzAsIDQzNjQyLCAzODksIDEwODkzLCA3NTIxLCAxMjc4NzksIDQ4NzIsIAotICAgIDU0NjMsIDAsIDMxMjUsIDk1NjcsIDAsIDQ4NzgsIDU0NTksIDQ2MDQsIDkxNzkzMSwgOTU1NywgNTQ2NSwgNjg2MTcsIDAsIAotICAgIDExNDk0LCAxMjY0OTIsIDk1NjMsIDEwODY1LCA3NDU3MCwgNDMyNzksIDY0MTg2LCA5ODM0MzksIDc4NzE0LCA2NDE5MSwgCi0gICAgNjQxOTAsIDg4OTgsIDY0MTg4LCAwLCA0MTAzMCwgNzg4MzYsIDAsIDkxNzgzNSwgNzg4MjAsIDkxNzgzNCwgMCwgNzg4MDUsIAotICAgIDQxMDMxLCA3ODgwMSwgMTE5NjAsIDY3NDUsIDMwODIsIDk4MzQzNywgNzg1MzksIDczOTE5LCAxMDU3MywgNDE3NDQsIAotICAgIDcwNzksIDU4NTYsIDEyNzA0MywgNTE2MywgNzg4MDksIDEyODE2MiwgMTgxNywgNjY3MjQsIDc4NTM4LCAwLCAxMDU2NCwgCi0gICAgNzc2MywgMTMwNzcsIDQxODEzLCA0NDAwLCA0MTc0NSwgNjQyMDcsIDEwMjc1LCA4OTI1LCAxMDM3MSwgMTAzMDcsIDQxODE0LCAKLSAgICA0MjQ4LCAwLCAwLCA0NTQxLCA2Mjk5LCA2NDIwNCwgNjQyMDMsIDY0MjAxLCA2NDIwMCwgNjQxOTksIDY0MTk4LCAxMjY0NzEsIAorICAgIDc3ODM2LCA2NDUyOCwgMTE2OSwgNDM0LCA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCA2Nzc0MSwgCisgICAgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAxOTQ2NjcsIDcxODgxLCAwLCAxNjYzLCAxMDQxOSwgNDI5MDEsIAorICAgIDQyNjM2LCA2NzIxMSwgNjcyMTAsIDEyOTE0NywgMTIwNjU2LCA2NzIxNSwgNjcyMTQsIDY3MjEzLCA2NzIxMiwgMCwgCisgICAgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgMCwgMTE5MTA3LCA0MzYxMiwgNjQzNDQsIDE5NDczMiwgMCwgMTA4NTUsIAorICAgIDU0NDUsIDkzNTUsIDY3MjIxLCA2NTE5OCwgNzM5MSwgODk4OSwgMjIxLCA2NTY4NiwgOTgzODc0LCAxMTkyMzgsIDgwMTAsIAorICAgIDcxOTEsIDQ5NjIsIDY5NzcyLCA4ODU1LCA3NDYxMiwgNzA4MjAsIDY0NDY5LCA5MjU5MiwgMTA1NTUsIDY3MjI3LCA0MzMzMywgCisgICAgNjcyMjUsIDEyODQ4MywgMTIwNDI3LCAxMDQ1MSwgNjcyMjksIDY3NjUzLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIDk5NDcsIAorICAgIDEyMDE0OSwgNzgzMTcsIDM4NzMsIDgzNjcsIDc3ODQyLCAxMjAxNDYsIDQzNDMzLCA0MzY0OSwgMTE5ODcsIDgzMzQzLCAKKyAgICA5ODM1ODEsIDExMDEwLCAxMTE2NCwgNzQwNTksIDc0MDYyLCA2MjE3LCA1ODk2LCA0Mzg0NiwgNzY4MiwgNzQwNDksIDE0NjIsIAorICAgIDEwMjM1LCAwLCAwLCA5ODMzMjUsIDQzNDQxLCAxMjc5MjQsIDEyNzc3NywgNDI1OTUsIDEyNjY0MSwgNzQ0MDIsIDExODg2MCwgCisgICAgNzg2NjEsIDEyMDQxOSwgOTI0OTcsIDY2Mjg3LCAxMjA0MjAsIDkyMzc4LCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIAorICAgIDEyMDQxOCwgMCwgNjQ3NjUsIDczOTIzLCA4MzIxMCwgMTIwNjYyLCA2OTkyMCwgMTk0NzAyLCA2MjE2LCA2NzIzMCwgCisgICAgMTA3NTUsIDk0NTUsIDExMTU1LCA4MTI0LCAxMjcwNDIsIDk0NzAsIDY5NDQsIDEyMTEyNSwgMCwgNjk2ODAsIDI4MjgsIDAsIAorICAgIDUzMSwgNDI2MzgsIDE5NDgwNCwgOTE3ODU2LCAxMjA5NjEsIDQzNDI4LCA4MjA0LCAzNjE0LCAyODI3LCA5Njk2LCAKKyAgICAxMjAzNjUsIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMTIwODUwLCA0MjU5OSwgCisgICAgNDI1OTcsIDQyNzA5LCA2ODgyOSwgMTI1MDEyLCAwLCA4NTM3LCAxMjczMDYsIDAsIDkzNTQsIDEyMTI0NCwgMTIxMzQ4LCAKKyAgICA0MTE5OSwgMTAxMjEsIDIwMjgsIDc0OTUwLCAxMjAyNTMsIDY5NzE1LCAxMjg1MjUsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgCisgICAgOTgzNjU3LCA2NjQ0MCwgNzU0NSwgOTcwMCwgMTE5NDgsIDkyMjA1LCAxMjA3NzcsIDEyMDUwMiwgNDExNTUsIDY4MzA2LCAKKyAgICA3NDA3MSwgMCwgOTgzNDU5LCAxMjcxMywgMTI3NTE5LCA3MDQwMiwgMCwgNzg3NzIsIDExMzc3MCwgMTczNCwgMCwgNzgxNDEsIAorICAgIDEyNzA0MCwgNjQ1OTQsIDI0NTYsIDIzMSwgNjgyMjcsIDc0MTY3LCA1NDIsIDkxNzk4MSwgMTE4Nzg2LCA5ODM4NTksIAorICAgIDE5NDc5NywgMTIzMCwgMTI1MDE4LCAxMjEzNDMsIDM1OTcsIDQ0NDYsIDEwNTg0LCA3NDIzNSwgOTIyMTUsIDQwMzcsIAorICAgIDY3NzM3LCA4MzUyLCA3ODQzNiwgNTY4NywgMTI3MDE4LCA2NDUxNSwgMTIxMzc4LCAxOTQ4MDEsIDU1MjY1LCA2Nzg0NiwgCisgICAgNzg0MzQsIDk3MDQsIDAsIDE5NDU3MywgNzAwODAsIDcxMzM4LCAwLCA4NjYwLCAxMjY0NzgsIDAsIDEyODU2OSwgNzg3NzMsIAorICAgIDc0NDgyLCA0NDgzLCAxNzA5LCA2OTcyMSwgOTkwOSwgNjA4MCwgMTk0ODUxLCAxMjAzNTgsIDE3NDYsIDEzMTUsIDg2NjcsIAorICAgIDk4MzEwMSwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgMTEyNjYsIDEyMTExNCwgMTIyNiwgNjkzMCwgCisgICAgNjc5NzksIDE5NTAxOSwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDY4MzAyLCA3NDc4NSwgNjk4NzUsIDAsIDEyMTQ3OCwgCisgICAgNDE1MDAsIDAsIDMxMSwgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNjc2ODIsIDEwODc3LCAxMTg4NjgsIDY0ODg1LCAKKyAgICA3NDI3MiwgMCwgMTk0NjcyLCAxMjg1NTksIDEyMDczNiwgNzQzMTIsIDM0NSwgMTI0OTMzLCA3NDQ1NiwgNjQ2MDYsIDk5MTcsIAorICAgIDAsIDc0ODU1LCA1MDM3LCAxMTk5MTIsIDE3NzYsIDg0MjIsIDEyODkzNSwgMTE4ODE0LCA0MTUwOCwgNDEyMDEsIDMyMywgCisgICAgNDMzMjgsIDAsIDQyNjk4LCAxMjk1LCAxOTQ4NTMsIDQ2MjUsIDc3ODU1LCA0NjMwLCAxMzExNywgODMwMDIsIDEyODc3MiwgCisgICAgNjUxMjMsIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIDY1NjY2LCAyNTE5LCA5MjM2OSwgNjU0MjAsIDkyNDc5LCAwLCAKKyAgICA0MjUyLCA1MDQ5LCA0MjY1OSwgMTE5MDExLCA3MDYsIDc3NTQsIDEwODU0LCA4NzM4LCA5ODM5NDksIDY1NDE5LCAwLCAKKyAgICAxMjg0OTYsIDY0OSwgNjU0MjEsIDAsIDY2NzAyLCA5ODM3MjEsIDEyNjcwLCAxMDEzLCAwLCA2NDkxOSwgNzA1LCAwLCAKKyAgICA2NTQyMiwgMTI3ODAzLCAxMTgzLCAxMjY1MTksIDcwMTcsIDQyODUyLCA5MTc4MjYsIDgxNTcsIDk3MzYsIDY0NTAzLCAKKyAgICA2NTQxOCwgMTI5MDUwLCA5ODM4NzgsIDc0MDM1LCAxOTQ5MTgsIDExOTEzLCA3Mzg3NCwgNjY5NiwgMTIwOTE2LCA4OTIwLCAKKyAgICAxMTkyOTgsIDEyODQyNiwgNzk2MiwgMTIyMTEsIDk4MzcsIDIwNTEsIDY2MjI3LCAwLCA0MTg0LCAxMTk4MjUsIDEyODU5OCwgCisgICAgMTAxNzcsIDczNzc3LCAxODU3LCAxOTQ2NTcsIDQ2MjYsIDg0NjQsIDg0NzIsIDY4ODQ0LCA0NjI5LCA4NDk5LCA3NDYyNywgCisgICAgNzgzMjIsIDQ2MjQsIDc4MTgsIDExODg2MSwgMTI4MTA4LCAwLCA3ODA1LCAxMjg3NTQsIDk0MDA3LCA2OTM1LCA5MjI5MiwgCisgICAgNzgzMjUsIDc4MzI2LCA3ODMyMywgNDMzMjcsIDQzOTg5LCAxMTkwNDYsIDg0OTIsIDgyNTAsIDg0NTksIDAsIDg0OTcsIAorICAgIDg0OTYsIDgzNDk5LCA3NDU4MiwgNzUwNTIsIDc4MzM5LCA5NTQzLCA2Nzg2MCwgNzgzMzIsIDc3ODMyLCA2NTg0OSwgCisgICAgNzc4MzEsIDk4Mzk2MSwgMTk0NjQ5LCAxMjQ1MSwgNzQzNzYsIDg2ODQsIDEyODMwMSwgNjEwMiwgMCwgNTI5OCwgOTE3ODQ3LCAKKyAgICA1Mjk0LCAwLCA4MzAxNiwgNjgwNDMsIDE5NTA2MiwgOTk0OSwgODMwMTQsIDQzNjE3LCAxMTkyMTUsIDAsIDEyMDczLCAwLCAKKyAgICAxMjg2NDYsIDc3ODYzLCAxMzEwOCwgMTIwNjE3LCAxMTQzOSwgNDE0NjgsIDgzMDEyLCAwLCA1MjkyLCA1NTI3MiwgCisgICAgOTgzODgzLCAxOTM5LCA1MzAyLCAzOTcwLCA5MTc4NzcsIDEyNDU1LCAxNzkzLCAxMjQ5ODIsIDAsIDc1MDM2LCA2NjQzLCAKKyAgICA5MjQ3NywgNjUyNjMsIDAsIDc4MzMwLCA0MTI5MywgNzgzMjgsIDY1OTIzLCA3ODgzNSwgMTMyMTksIDk1NjksIDEyOTA0MSwgCisgICAgNzQzODMsIDAsIDc0MTk3LCAxMjkwODksIDU1MDAsIDg4MTMsIDAsIDEyODYxMiwgNjg4NjAsIDUzMjIsIDEyMDk0NCwgCisgICAgNzgzNDAsIDQzNjMxLCA1MzI0LCA2NjQ0MywgMzc4NCwgNDE2MTQsIDY1MjY5LCA2MjMwLCA3ODM0OSwgNzgzNDUsIDEzMjgyLCAKKyAgICAzMzYwLCA3ODM0NCwgMTE1MjMsIDAsIDkyNDg4LCA5OTI2LCA3MTk3LCAxMjgyNDgsIDY4NDI5LCA0Mjg5NCwgNDE4MjEsIAorICAgIDEyNDksIDc4MzYwLCA3ODM2MSwgNzgzNTYsIDc4MzU4LCA3ODM1MywgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIAorICAgIDQzMTYyLCA0MTgxNSwgNDExNTAsIDEyODkxMSwgMTA1NzEsIDEwMDk2LCA2NzE2MSwgNjcxNjAsIDY3MTU5LCA2OTQ3LCAKKyAgICA0MTE1MiwgODg3LCA5MjQ5LCA2NTY1LCA3ODUxMCwgNDE5OTAsIDc4NTA5LCA0MTgxMSwgNjcxNTcsIDkzOTY2LCA2NjcwLCAKKyAgICA2NzE3NSwgNjcxNzQsIDAsIDQzMDkyLCA0MzMyNSwgNjcxNzgsIDEwMTY4LCA2NzE3NiwgOTc4MSwgNjgyNDgsIDkxOTAsIAorICAgIDEyODQ5NywgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAxMzAxOSwgMTE2NzAsIDY5ODYwLCAzMTUsIDEyODEzLCAKKyAgICAxMjkxMzIsIDcyNDA5LCA3ODI1NiwgNzI0MDgsIDc4MzUyLCAwLCA3NTA2MywgMCwgMCwgMTM3OCwgOTUwOSwgMTk0NjM0LCAKKyAgICA5Mjk5NiwgNzI0MDcsIDMwNjYsIDkyMjIwLCA2Nzg0NywgNzI0MDYsIDkyMzU1LCA5MTc4OTAsIDc4MzY1LCA4Nzg3LCAKKyAgICA2NzE4OSwgMTk0NjE2LCA0MTYxOCwgMTk0NjE1LCA3ODI2MSwgMTI3Mzg0LCAwLCA2NDY1MiwgMTIxMjIyLCAxMjEwMTIsIDAsIAorICAgIDc4MzY2LCA0MjA4OCwgNzEwNDAsIDE5NTA2MSwgNzE3NiwgNDM3NTYsIDEwMTM3LCA2MTIxLCAxMDk5NSwgNzgyNTksIAorICAgIDcxMDUwLCA4MTE5LCA2NDg3NCwgNzEwNTIsIDc4MTc0LCAxMjg2OTAsIDEyODYzMCwgNzQ1MjUsIDAsIDAsIDEyOTMwLCAKKyAgICAxMzk0LCA3NDUxNCwgMTI4NDEzLCA3NDUxNSwgOTgzNzI3LCA2NzE4NCwgMjk5OCwgOTUyNywgNjcxODEsIDY1MTkwLCAKKyAgICAxMjk3NywgNDIwOTAsIDY3MTg1LCA5ODM2NDcsIDExOTEwMCwgNDEyMzYsIDkyMjM1LCA0MjAwNSwgNDIwMDMsIDQxMjM3LCAKKyAgICA1ODQ4LCA2NzE5MywgNjcxOTIsIDM2NzAsIDY3MTkwLCA2NzE5NywgNjcxOTYsIDY3MTk1LCA3ODkwLCAxMjgwNzAsIAorICAgIDExMjk4LCA0MzMxNSwgOTgzMzE1LCA2MjI5LCAxNTkzLCAwLCAxMjUxMjAsIDYxOSwgNDYzNSwgNjUwODAsIDEyNzE1OCwgCisgICAgMTIxOTQsIDQxMjAsIDY1MzM3LCA2NTMzNiwgMTI4NDA3LCAxMTgwOCwgNjcxOTksIDY3MTk4LCA5MzY2LCA0Mjc5MCwgCisgICAgNDIwMDYsIDExOTExNSwgNjUzMjcsIDY1MzI2LCA2NTMyNSwgMTA3NTcsIDE1MDcsIDQyMjE2LCA2NTMyMSwgNjUzMjAsIAorICAgIDQzOTQ3LCA2NTMzNCwgNDM5NDYsIDY1MzMyLCA2NTMzMSwgNDIwNTksIDY1MzI5LCA0MjY4OSwgOTI0MjcsIDkxMjgsIAorICAgIDk0MDQ1LCA0MjA3MywgNjc4NSwgNjQ1OTAsIDk4MzgzMCwgNDM3MSwgNzE5NiwgNjUzMTgsIDIwMzUsIDY1MzE2LCA0MTA2LCAKKyAgICA2NTMxNCwgNjUzMTMsIDQyMDc0LCAxMjc4NDcsIDQxMjI4LCAxMjA4NjIsIDY1NjA5LCA0MTI0MSwgNzkwMywgNDEyMzksIAorICAgIDQzNTMzLCA3ODQ1OSwgNzE4OSwgMCwgMCwgNDM5NDEsIDEyMzU3LCA0MjgwMiwgNzg0NTAsIDg0ODcsIDkxMzEsIDY2MjkyLCAKKyAgICA0NjE1LCAxMjY5NSwgMTI3NzUyLCAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDEyMTM1MSwgNTYyLCAxMjE2OSwgCisgICAgNjU5MCwgNjk3NjIsIDY2NDU1LCA2NDczOCwgMzIxOSwgNjg2NTQsIDEyMTA5NiwgMTI4MjgxLCAxMDM3LCAxMjg2NzcsIAorICAgIDIwMjUsIDEyODI2MywgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgNTQ5LCAxNTcwLCA0MzgzOSwgMjgzNSwgODMwNTIsIAorICAgIDEwNjI0LCA0MzYyMywgMTEwNzIsIDgzMDQ1LCAxMjg1MjMsIDgzMDQ2LCAxMjYwNiwgNzg0MzMsIDI4MjUsIDgzMDQ4LCAKKyAgICAxMDgyNSwgODA3OSwgMjgyMSwgNDEwNDYsIDkyMzI3LCA3MzY1LCA4MzA0MywgMTIwNTkzLCAxMzA3MSwgMTIxMjg4LCA0NTIsIAorICAgIDQxMDQ5LCA0Mjg0MCwgNjM0NiwgMjgzMSwgNTQ2MSwgNzQ1OTYsIDExNDY1LCA1MjEyLCA5MTc5MTcsIDY0NzAzLCAKKyAgICAxMTkxOTEsIDQyMzA4LCA3MTgxLCAwLCA0MTMzMiwgMCwgMTIzMzMsIDQxMDQ3LCAxNjY4LCAxMTk4NDksIDEyMTE1MCwgCisgICAgMTI4Mjc1LCAxMTg3LCA5ODMzODcsIDQyNjI4LCA3ODU3NSwgODI5NTMsIDcxODYzLCA4Mjk1NSwgMzI0MCwgMTI4NTE4LCAKKyAgICAxMjE1MSwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCA4MTY2LCAwLCAxMTg5MzIsIDAsIDY2ODI3LCAxNjIzLCA2NTI5NywgCisgICAgMTI4ODU2LCA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgMTU0MSwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDY2NDAyLCAKKyAgICAxMDczNiwgOTI1MDgsIDExNTcxLCA3NjE1LCA3MDQ3NiwgOTIyOTYsIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgNjgwODMsIAorICAgIDM1NjcsIDcwMSwgNjU5MzYsIDM0ODksIDEyMDg5OSwgNzA0NjIsIDcwMTcyLCAxMTQwMywgMCwgMCwgODI5ODYsIDM3OTYsIAorICAgIDY4MDAsIDcwNDcyLCAzOTk0LCAxMTQyMSwgNzQ2MTEsIDE5NTA3NiwgMTk1MDc4LCA2ODAzNiwgMCwgMCwgNjQ4NTcsIAorICAgIDgzNTA4LCAyODU1LCA3NDQxOCwgNjYzMDgsIDQxNjIxLCA2ODIxNCwgODM1MTMsIDEyNzgxNywgMTA2NTQsIDgyOTQ1LCAKKyAgICAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCA0Mzk3MiwgNjU4NDcsIDcxODIsIDAsIDEzMDI0LCA2NjI3NiwgNzQyNzAsIAorICAgIDgzMDY5LCAxMjUwOTAsIDEyMTExNSwgMCwgMTQ5NiwgNzQ3LCAwLCA5NDIsIDIzNzgsIDQzMTM2LCA4MzAzMSwgODQ2NiwgCisgICAgODMwNzUsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCA3NDYzNywgMCwgMTE0MDksIDY4MzczLCA2MzgyLCAKKyAgICAxMjY1MDAsIDY0NjM0LCA5MjM2MiwgNzAyMDIsIDExNjEyLCA5MzAwOCwgNjc2MDAsIDIzNzQsIDk0MDY2LCA4NDc1LCAKKyAgICAxMTYwOSwgNjYzMTMsIDkyNTY4LCAwLCA1Mjg2LCAxMTkyOTcsIDgzMDU5LCA5ODMyNTMsIDY0OTI1LCAxMjAyODMsIAorICAgIDEyNzIwNCwgMTE4OTgyLCA3MTkwNSwgNzcwNSwgMTE5NDIsIDExMzA1LCAxMjcyMDMsIDMzMDksIDgyOTc5LCA5MjA2LCAKKyAgICA4Mjk4MCwgMTEzODI0LCA2ODAyLCA3MDM1MywgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAwLCA2NjYxNSwgCisgICAgNDI1NjUsIDQxNjUxLCAwLCA5MTc2MjcsIDgzMDQyLCA0MTY1MCwgNjY1MDcsIDY2NDcwLCA3NDQ3MiwgMTI5MTQsIDQxNDkxLCAKKyAgICA0MzkwMSwgOTQxMDYsIDYwNzgsIDk5NTQsIDc4ODIyLCAxNDc1LCAxMTkyNDcsIDk5MzgsIDYwODQsIDkxNzU0NiwgNDEwNjQsIAorICAgIDQxMDYyLCAwLCAxMTM2ODAsIDMyNTYsIDEwMTg5LCA0MjA3NiwgNDMyNTIsIDc4ODIzLCA2ODA4OSwgODcyNywgMTIwOTIyLCAKKyAgICA2NTg3NSwgMCwgMCwgMTI3NzYyLCAxMDU2MiwgNzQyMTUsIDQzMDY1LCAxMjA5MDYsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCAKKyAgICA5MDE1LCA3MTM1MSwgMCwgMzYzNSwgNjQzMzcsIDkyNzU5LCAxMjUwNTQsIDAsIDcxOTUsIDgzMzQ2LCAyMDA3LCA2NDQzMSwgCisgICAgMTk1MDc1LCAwLCA5MjE5NywgMTI3MDkwLCA2MzUsIDAsIDEyOTA4MiwgNjU2MTMsIDc3OTA5LCA5MjQyMCwgNzM5OTcsIAorICAgIDEyODUxMCwgMTIxNDU3LCA0MzkwNSwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgNDE3NiwgNzAwNTAsIDIwMzQsIAorICAgIDc4NDIzLCAxMTE1NCwgNjU4OTEsIDEyNzAzOCwgMCwgMzE4LCAyMDM4LCAxMjg1NDQsIDc4NTk2LCAxOTQ2MDIsIDM2NDksIAorICAgIDEzMTQ5LCA0MjE0NSwgNDI3OTgsIDM2MzQsIDEyMDI5MSwgNzE4ODUsIDY3Njc3LCAxMjAxMjQsIDc4NjYsIDc1MDQ1LCAKKyAgICAxMTQwMiwgNDIxNDYsIDk0MDMyLCA3NDIzOCwgNDI2NjQsIDI4NDksIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIDE3NjEsIAorICAgIDExODEyLCA2NTM3OSwgNjgzODYsIDEyODE4NSwgMTE1OSwgNzExODMsIDY5NzI5LCAwLCAxMjA3OTcsIDcxNzgsIDEyMDg1MSwgCisgICAgOTgzODM2LCA0MTY4MCwgMTI4NDY5LCA4MzA5OCwgMTE1MzQsIDE1MTQsIDExNjY4LCA2Nzg5MSwgOTMxMywgNzAxNSwgCisgICAgMTI4NDkwLCA2Nzg3NywgMTk0NTYxLCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAxNjI0LCA0MzI3MCwgMCwgNzQyNzgsIAorICAgIDEwODE4LCA4MzA5MSwgOTk1MywgMTk0ODk1LCA3ODQyMSwgMTE5NCwgMzI0MiwgOTc2MSwgOTU1NSwgODU5OCwgMTIwMjk5LCAKKyAgICA2MTY5LCAxMjg3MSwgMTU1MSwgMjc5OCwgNjUxNzYsIDQ5NTgsIDQyNzUyLCAxMTkwMjUsIDkxNzkyNCwgNjc4NzUsIAorICAgIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDEyNTA3OSwgODMzNTQsIDY4MzY0LCAxMjA3NzksIDQ4OTEsIDAsIDEwNjQxLCAwLCAKKyAgICA3Mzc0NiwgMTIwOTQ1LCA2ODM1MiwgMCwgNzM3ODcsIDEyODg1OCwgMTI3MDk0LCA3MTk5LCAxMTEzMSwgMCwgMCwgMCwgCisgICAgOTgzODUyLCAxMjY5NzksIDQyNjg1LCA0MjY3OSwgMTkzLCA3ODc4OSwgMCwgMCwgNDI2NjcsIDAsIDUyNzEsIDY4MzIzLCAKKyAgICA5MjUxNywgODMzNTYsIDEzNjIsIDEzMjk3LCAwLCA3MTg4MCwgMCwgOTgzMzMzLCA3Mzc4OSwgMCwgNjY1OCwgNDQyNiwgMCwgCisgICAgNjY4MzAsIDk4Mzg0MiwgODMxMDMsIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCA3ODYyMSwgNjc4MjIsIDI0MTYsIDMzMTAsIAorICAgIDQyNzAzLCA4MzEwNywgMzc5LCAwLCA0Mzc1NSwgNzA1MDQsIDQzNjQ3LCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCAKKyAgICA0NTQ5LCAxOTQ3MzgsIDAsIDcxMjUzLCA3MDc4NCwgMTA4MDcsIDk1NTgsIDkzMDI3LCAwLCA4NTE1LCA4Njg4LCAxMjg2NiwgCisgICAgNjUzMDgsIDMyOTQsIDgzMTQzLCA4NTI5LCAxMjgxMDEsIDQzMzg1LCA3NTY0LCAwLCA0MzMyOSwgODMxNDgsIDkyNDU4LCAKKyAgICA3Mzc1NywgNjY0NTYsIDQyMzU5LCAxMjg0MzksIDIwMzEsIDk4Mzg5MCwgNzIwMiwgMTI4MjMyLCAxMjY3NiwgNDI3MjksIAorICAgIDc0Nzc3LCAzMjE1LCAxMjA5ODIsIDc3MTAsIDE2MTAsIDczODAxLCAxMjg4MDcsIDAsIDY1NjgyLCAwLCA0MzkxNywgCisgICAgNjU5MjQsIDk5NzQsIDIyOCwgNDM5MjIsIDE1MDEsIDEyNzk5NCwgNjQzOTUsIDUxNzksIDcyMDAsIDYyMjUsIDExODkyNywgCisgICAgNDI5OTksIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgNjY4NjgsIDcxNTIsIDg1MDIsIDU3NjIsIDE5NjcsIAorICAgIDc0ODMsIDQzODk4LCAwLCA4MTA0LCA3MDEyOCwgNzQ3NCwgNDM5MTQsIDgzMDgwLCAxMjY1MDcsIDEwNDE0LCAxMzAwMSwgCisgICAgODE0MSwgOTgzMjM5LCA0MjUzNywgMTU1NywgNDM1OTQsIDEyODY0MiwgNjMzMCwgNjgwNSwgODYzMSwgMjU0NSwgNDI5MzQsIAorICAgIDEyNzE2NiwgMCwgNzQxOTAsIDEyODQ3NywgNzA0MTAsIDk4Mzc4NiwgNDI3NjIsIDE5NDcwOCwgNDI5MTQsIDE2NTAsIDI2MiwgCisgICAgMTYzNywgMTI4NTAyLCA3OTAxLCAzMjM4LCA4MzAyNiwgNDE4NjEsIDAsIDEyMDIxMSwgNjUxNTgsIDEwODYwLCA3NDk1OSwgCisgICAgNDM2NTgsIDc1MjcsIDgzMDg2LCA0MzMxOSwgNjQxOSwgMCwgNDUsIDAsIDY0NTg4LCA5Mzk4OSwgMTI3NzUzLCAxMTk4MTAsIAorICAgIDcxOTQsIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMTI4Njg0LCA5MDg0LCAxMjEwMzksIDg3MzcsIDk4MzE2NSwgMTI4ODEsIAorICAgIDc1MDY2LCAxMjkwNiwgOTYzOSwgNzkxMiwgMjYyMCwgOTgzODgyLCAzNTY0LCAwLCA2OTk3OCwgMTc5LCA0MzY0NCwgCisgICAgNzUwNDksIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCAxMjkwNDIsIDcwMzQ3LCAxMTkwMDksIDI4NTAsIDgwODQsIAorICAgIDk4MzA4NSwgNzM4NTAsIDI4MDEsIDkyMjg0LCA0MjA2OSwgMTE5ODM5LCA3NDc1NCwgODM1MjIsIDQyMDcyLCA5MjczNiwgCisgICAgMTE5ODQyLCAxMDM5OCwgODMzODYsIDgzNTIzLCA4Mzc3LCAxMTkzMTIsIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgCisgICAgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCA5MjQ3MCwgMjkyLCAxMTExOSwgMTE5ODQ1LCAxMTk4NDQsIDMyMjEsIDE3NjMsIAorICAgIDkyNDYzLCA0NjEyLCA2NzcyOSwgMTE5ODUwLCA3MjUzLCA3MDQ1NiwgNjgzOTEsIDc1MDAyLCAxMDc4MiwgMzYzNywgCisgICAgMTI5OTYsIDQzNTQyLCAxMTM2NzYsIDY0NTc4LCA4MzQ0OSwgMzIyOCwgNjk2MzYsIDg3ODMsIDk4MzYzMiwgMTE5NjE0LCAKKyAgICAyNzMxLCAwLCAxMjA4MzMsIDc4NTg1LCA0MTAyLCA3Njk2LCA3Mzg3OCwgMTIxNDE3LCAxMjgxMzIsIDcwODEzLCA0MzMxNiwgCisgICAgNDE3NywgMTEyODMsIDkwODksIDEyMDkxOCwgNzM5OTYsIDEyMTExMSwgNjQ1MDAsIDQzNjc0LCAwLCA2NDk0NywgMTg1NiwgCisgICAgMCwgMCwgNjM3OSwgOTE3ODA0LCAxMTE0MiwgMTI3MTc2LCAzMjA4LCAxMjk3NSwgNzQ3NzUsIDEyNzM4MCwgOTgzOTMxLCAKKyAgICA5MjM4OSwgNzQwNzIsIDU1MjY5LCAwLCAxMjQ5NjIsIDk4MzY4MywgMjAzMywgNzg1NzcsIDc4NTc2LCA4Mjk2NSwgNTUyNTQsIAorICAgIDc3NDAsIDgyOTc0LCA3MDQ0OCwgMTI2NTU1LCA3Mzk2NCwgNjg1MDUsIDkzOTg4LCA2NzYxMiwgNjU2NzQsIDEyODI0NCwgCisgICAgOTQxMTAsIDQxNjg5LCAwLCA3NDAwNiwgNjQ5MDksIDY2NDYsIDExNzkwLCA3NDAxOSwgMTI4NTIwLCAxMjgwNjYsIAorICAgIDEyODAzMSwgODU2MSwgNDU3MywgMTIxMzc1LCA1MzI2LCA5MjU3MSwgMTIwNjA1LCA3MjMwLCA4MjU3LCAxMjE0MTUsIAorICAgIDg3NzgsIDQxNjg4LCAwLCA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgNDM1MTEsIDc2MjgsIDY1MDkyLCA3MzkwMywgCisgICAgNjQzNTUsIDExMzQyLCAxMjg1NjEsIDAsIDk4MzQzNCwgMTI4MjI2LCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIAorICAgIDk2NywgOTgzMzM1LCAxMjA5ODUsIDExOTQ2LCA5ODM2MDIsIDMyNTcsIDEyNzIwOSwgMTIzMDcsIDE4NDUsIDEyOTA3MiwgCisgICAgNDM1MjYsIDAsIDExOTU3MywgMTg4NiwgNDIzNDIsIDEwMDg5LCA4NzAsIDc2NDgsIDM0OTksIDc2NjIsIDc2NTIsIDg3NiwgCisgICAgODcxLCA4NzcsIDc2NjUsIDg3OCwgNDIwMTUsIDg3OSwgNDM2OTIsIDQ1NjMsIDAsIDkxNzg5MiwgNzU5MSwgNjU4ODcsIAorICAgIDg2NywgOTUyMCwgODcyLCA3NjU2LCA4NjgsIDg3MywgNzY0MiwgNzY1OSwgODY5LCA4NzQsIDc2NDQsIDEyMDY3NCwgODc1LCAKKyAgICA3OTAsIDEyODMwMywgMTE4OTM4LCAxOTUwNTMsIDkzMDM4LCA2NjE4MiwgMTk0NjIzLCA1NDI5LCAxOTUwNTUsIDY2MTgwLCAKKyAgICAxMjY0ODAsIDY2MTgxLCA2ODQ1MiwgOTgzMjkxLCAxMjcyMTQsIDQyMDY3LCAwLCA1NDMzLCAxMDY1NywgNzkxMSwgCisgICAgMTI1MTE5LCAxNTQ3LCA2NjE3NiwgNDIwMTIsIDEyMDU3NiwgNTQyNSwgNDk3NywgOTk5OSwgNTMxNywgNTQyMywgNDYxMSwgCisgICAgMTI1MDk0LCA2NzYzNywgMTI3Mjg2LCA5Njc5LCA3NDEyMiwgOTI5NzgsIDkxNzU4NSwgMCwgNjYxOTQsIDQ0MTgsIDY2MTg0LCAKKyAgICA0NjI4LCA0MjQ1LCAxMTk2NDgsIDAsIDEyNzI2MywgMTg1MSwgMTI0OTk1LCA4MzMyMCwgMTE5MDgsIDAsIDkzNjAsIAorICAgIDExODg5NywgMTIwODc0LCA0Mjc3NiwgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCAxMTExMiwgMCwgOTIzMjEsIDQzMzE4LCAKKyAgICA5MjMwMiwgODgwOSwgNjk4ODEsIDAsIDEyNjUxOCwgMTIwNjA0LCA5ODMwNTIsIDk4MzI3NywgOTgzNDMzLCAxMjg0MTIsIDAsIAorICAgIDEyMDU3NywgNzQyNywgOTk1OCwgNDU4OCwgNDM2ODAsIDAsIDc0NDg0LCAxMjcxODUsIDI0MzMsIDEyODYwMiwgNjk5NzMsIAorICAgIDMzNTIsIDc0MzYzLCAxMjg2NjgsIDEyMTM0MSwgNzkzLCA3NDQwNCwgMTExOTcsIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAKKyAgICA2OTk3OSwgODIwOCwgNjgzMDgsIDQxNjk1LCAxNjQ3LCAxMTg4NzcsIDcwODQxLCA3ODM3LCA5MTc2MjUsIDgxOCwgNTMzNywgCisgICAgMTk0NjI4LCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIDY4NzQyLCAxMjA1OTQsIDc0MDg2LCA2ODc3NywgNzAxNzksIAorICAgIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCAxMjcxNzIsIDkxNzYwOCwgNDk2OSwgMTI1NCwgOTE3NjA1LCAxOTQ2NTQsIAorICAgIDkzOTY3LCA5MTc2MDIsIDY1MjI4LCA3ODIyMSwgMTI2NjEyLCA2NzcyMywgMjg0MCwgOTgzOTA1LCA3ODgyOSwgOTgzOTM5LCAKKyAgICA2Njg4NywgMzI0NSwgOTA2OCwgNjgxOTQsIDY0NzI1LCAxMjExNjEsIDEyODA1MSwgMTI5OTEsIDEyNDk3MSwgMjY1MSwgCisgICAgNjgwMTYsIDk4MzI2NywgMTI3MzI2LCAxMjUwMzgsIDcwODM1LCAwLCA3MDg0NCwgNDM2NDgsIDEyMDgxMiwgOTE3ODMzLCAKKyAgICA0MzMyMiwgOTI2NjIsIDAsIDAsIDY0MzcyLCA5MjY5OCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIDc0NTIsIDMyODUsIAorICAgIDc0ODk0LCAxMTE1MiwgOTI5MDMsIDY1NjEwLCAyMzkxLCA5MjkwOCwgOTIyNDgsIDY3MSwgMjUwLCA3NDM0LCA2MTgsIDY2OCwgCisgICAgNjEwLCA0MjgwMCwgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCA2MjgsIDM5MDUsIDczODEwLCAKKyAgICAxMjgzNDAsIDEyODI2NiwgNjQ3NDksIDY3ODUwLCAyMTA3LCAxMjgyOTAsIDc0MjQ5LCA0NjA1LCAxMjgxNzQsIDk4MzE5MiwgCisgICAgNDMzNzIsIDY1OTQ1LCAxMjcyNDksIDExMTEzLCAxMTk1OTAsIDAsIDAsIDcwNDk1LCA5ODcsIDY5MjcsIDExNTcyLCAKKyAgICA0MjI2MSwgMTE0NjQsIDMzNjUsIDk5NzEsIDAsIDk4Mzk1MSwgMTI4Mjk3LCAwLCA3ODc2MiwgMTI3ODY3LCAxMjEzNjgsIAorICAgIDExMzM0LCA0MzMyNiwgMTI2MDksIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgNDYyNywgMTE5MjY5LCA1MjA4LCAwLCAKKyAgICA3MDA5MCwgMTAzMzIsIDI0MjQsIDc5NzYsIDkxNTYsIDAsIDMyNDQsIDU1MjksIDY5NjQ3LCA3Mzg5NCwgMTI4ODUyLCAKKyAgICA1NDMyLCA2NDk2NSwgNTUyNywgNDIzMTUsIDEwNTE2LCA3NzkwLCA1NTI4LCAxMjg4MzgsIDQyMTQwLCAxMjAyODEsIDAsIAorICAgIDk4Mzc3NywgNDM1NDUsIDk4ODcsIDEyMTQ3NywgNDAwMCwgNzQyOSwgNzQyOCwgNjY1LCA3NDI0LCAzMjA2LCAxMjAyNzgsIAorICAgIDc4ODQsIDAsIDEyODU2NiwgNzQ5MTAsIDEyODY2NiwgMjExLCAyNTA5LCA5MjkwNCwgNzA4MjIsIDY4NjcyLCAzMjIwLCAKKyAgICA0MjIzNSwgNzg0ODAsIDEwNjkwLCA4OTUxLCA1MjE0LCA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgMTI3MjU4LCAKKyAgICA1ODUyLCAwLCA3ODQ4MiwgMTI3MjU5LCAxNzA4LCAwLCA3ODQ4MSwgMjYyMywgMTE5NDMsIDEyODcwMCwgNjkyMjYsIAorICAgIDY5OTc0LCA0Njk4LCA2NjUwOSwgMTA2NiwgMTE5OTIxLCA0NzAxLCA5ODM4NzYsIDEyMDI4NSwgNzA0NDcsIDk0MTExLCAKKyAgICA4MjY3LCAwLCAxNDIxLCA2NjQyNiwgNzUxNiwgMTI3NTUyLCAyNjI1LCA5ODM2NDEsIDgwMzQsIDc0MzA5LCAwLCAzNjMxLCAKKyAgICAxMDk1NSwgNzg1MCwgMTIwMjkzLCA4NDE2LCAwLCA5ODMwNjUsIDAsIDQzMzg0LCAxMjY2MCwgMTI4NjkzLCAxMjgyNzAsIDAsIAorICAgIDc0ODUwLCA0MTA2OSwgNzAxODUsIDEyODE1NiwgMTIwOTksIDQzMTAsIDEwMDMyLCA2MjUyLCA3MTMsIDc5OTAsIDk4MzQ4OSwgCisgICAgMzk5MCwgMTI1MDUwLCA5ODMyNjQsIDY2MzY4LCA1MDE3LCA2NDk1NiwgNzA3MSwgMCwgNzA0NTcsIDEwMzAsIDExODgwMCwgCisgICAgOTI1NjMsIDk1MTMsIDQxMDU5LCA5MzU3LCA3NDk4OCwgMTc3MywgNzc5MzksIDEyMDM1MCwgMTI0OTYxLCA2MzM5LCA3NzQ1LCAKKyAgICA5ODQ0LCAxMjcyMjAsIDY0NjUwLCA5NCwgMTg4MCwgNzQ3NjYsIDExMzcxOSwgODkwOCwgOTgzMjIyLCAxMjg3MDcsIAorICAgIDY1OTEzLCA3ODQ3MCwgMTA3NTIsIDEzMDAzLCA2ODc2OSwgMTI2NTcyLCA0MTMwNywgODczMiwgMTIwMzM2LCAwLCAxNzU3LCAKKyAgICA2OTY0LCA0Njk2LCAwLCAxMjAzMzMsIDY0Nzg1LCA3Mzk0LCAzNjQxLCA1NDE5LCAxMjgwNTUsIDAsIDEyNzg4MywgCisgICAgMTk0NzA3LCAxMjAzNDQsIDQzOTg4LCA3MDQyMywgODYxMCwgNDMwNjIsIDc1OTIsIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIAorICAgIDY5ODk0LCA0MzE3MSwgMTQ1OSwgMTI4MjI0LCA2NTI0MywgNzg2MzgsIDE5OTUzLCAxMjkwNzgsIDE1MDQsIDcwMDY0LCAwLCAKKyAgICAxMjkxMywgNzQyMDYsIDc1MjksIDEyODc0NSwgMTI3ODY4LCA3MDIwMywgMTIwNzgyLCA0MTEzLCAxMjA5MjksIDIzNzIsIAorICAgIDMzNiwgMCwgNzUwOSwgMTIxNTIsIDE5NDg4NSwgNjgyLCA3NjU1LCA0MTUwNSwgMCwgNjQ3NDMsIDEwNTkzLCAxNzAzLCAKKyAgICA5MjQ2NywgNzc5MTEsIDgwMzMsIDY5OTUzLCAwLCA5ODEwLCAxMjcyNjksIDEyMDAxMywgMTI5NzAsIDAsIDQyMzUxLCAKKyAgICAxMDEwOSwgNzQ1MzUsIDc0MDY4LCA3NDkyMSwgMCwgOTI2OTAsIDAsIDY1MDY4LCA3NDI5MSwgMTk2NSwgNzA2OSwgNDMzMTIsIAorICAgIDAsIDczODg3LCAxMTEzMCwgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAxMTE0NSwgMTIxMTE3LCA3NDIzOSwgCisgICAgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgMjA5MCwgNjk5MTIsIDkzNTMsIDcxMTcsIDIwNzcsIDc3ODg2LCAxMTE2MSwgCisgICAgMTA0OTgsIDIwODMsIDc3ODg4LCA3MTE5NiwgMCwgMTE5MjM2LCA2MzQsIDEyNDk3MCwgOTIyOTAsIDE5NDg4NiwgNjk3NzksIAorICAgIDQxNjUsIDg3NDYsIDE5NTA0OCwgOTY1NCwgMTI4NTYsIDY5MjQsIDc2NjAsIDcwNjYsIDE5NDY5MywgNzA0MTUsIDEyODEzNSwgCisgICAgNDEwMzcsIDQyNjkyLCA3Nzg2LCAxMjk1OSwgNDEwMzksIDEyNzQ4MywgMTI0OTY1LCA2ODAsIDIzMDIsIDEyODIwMCwgCisgICAgMTE4MSwgNzA1NiwgMzE3NCwgNjcyNDgsIDAsIDkyNjY4LCA2NTY2NSwgMTI3Mzc1LCAxMTM3NzYsIDY5MjAsIDAsIDkyMjk1LCAKKyAgICAxMjY2MDYsIDExODk2NSwgNjgzMTgsIDY0NjQ0LCAxMjY5ODEsIDc0MTE5LCA2ODIzOCwgNDEwMjgsIDc0MDI1LCA2MjMxLCAKKyAgICAyNjEzLCA2NTMwMiwgNDA5ODksIDY4MjM5LCA2ODIzMCwgNjgyMzQsIDQyNzYwLCAwLCA0Mzg5NiwgMCwgNDA5ODcsIDQ2NjcsIAorICAgIDAsIDcxODQzLCA4ODI4LCA3Nzk5NSwgNzA1MDYsIDEyNDYsIDQ3NDYsIDEyODUwMSwgMTI4NTA4LCAxMTAyMSwgNDc0OSwgCisgICAgOTI2NzUsIDkxNzg4MiwgOTIxLCA0NzQ0LCAwLCAxMjcwMiwgMjQyLCAwLCAxNTY2LCA4MjE3LCAxMjcyMTAsIDY0NjUzLCAKKyAgICA3ODM4NiwgNzQ2MTcsIDc0MDM2LCA3NDUwNSwgNDMyNzQsIDUzMTMsIDk1MSwgNzQ1NjgsIDkyOTgzLCA5ODM4NjcsIDc2MDQsIAorICAgIDk4MzI5MiwgNDAwOSwgNzAyNzcsIDcxODQ0LCAxMjA1NjIsIDAsIDk4MzcyMCwgNjQ4NjAsIDExOTEzOCwgMTE5MDY5LCAwLCAKKyAgICAxMjczNzAsIDQwNDgsIDk4MzU5OCwgODMwMDksIDcwMDI0LCAxNjQ2LCA3Nzg5MCwgNjQ1MzQsIDczOTk1LCAxMjA3MDUsIAorICAgIDEyOTA0NywgMTE5ODkwLCAyNTc5LCAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAzNDQxLCAxMTk4OTQsIAorICAgIDI5NzUsIDc0NDQyLCA5ODIyLCA5ODM5MzUsIDU1MjIwLCAxMDA4NCwgNzM5NDMsIDExODg0MCwgMCwgOTE3NTYyLCA3ODI5OSwgCisgICAgMzM5OSwgOTg1MSwgOTE3NjA5LCAxMTkwOSwgOTA1OSwgMCwgNzY4NywgMCwgNjc4OSwgMTI3NzY3LCAwLCA3MTg0MiwgCisgICAgNzAxNzgsIDkyMzE0LCAwLCAxNzc3LCA5MTUxLCAxMTM3LCA2Njg2NywgNzQ5LCA0MjM2NiwgNzA0NDQsIDUzODUsIDcwNzkxLCAKKyAgICA3MjQzNSwgNzAxMjcsIDgzMzc3LCA1OTg5LCAxMjg5MDUsIDc0NjM2LCAxMjA4NDgsIDAsIDQxNjg1LCA2OTIyMywgMCwgCisgICAgOTc2OSwgNDE2ODQsIDE5NDczNywgNTE5LCAxMTkyMzEsIDExNzQwLCA1NzY2LCAwLCAwLCAyNjAwLCA4ODQ4LCA3MDQxNiwgCisgICAgNDEyOTcsIDAsIDM2NjYsIDcwNDIwLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCA2OTY4OCwgNjk3NzEsIDc0NDc5LCAwLCAKKyAgICA2NTU4LCAxMjcxNDksIDEyODA2NCwgNjk3NjUsIDkyNzc1LCAyNTIsIDAsIDQxMzAyLCAxMTkzNTAsIDgzNTA0LCAxMTg4MzksIAorICAgIDY5NzYzLCA2ODc2MiwgMTE3MjksIDg3MTksIDkwNjAsIDEyOTA5MSwgMTIwMTM5LCAxMDc2MSwgMCwgMCwgMTI5NDEwLCAKKyAgICAxMTg3OTIsIDExNzM0LCA5MzAxMSwgMTE3MzAsIDExMzc0MSwgOTU5MywgNTc1NywgMjQwMywgNjQ4MDgsIDU1Mjc1LCAwLCAKKyAgICAxMTcyOCwgNDM1NzIsIDk4MzEzOSwgMCwgNzc2NCwgNjg3NDEsIDExMDk0LCAxMjA4MjUsIDAsIDQzNDg5LCA0MjgyLCAKKyAgICA4Mjk4LCAwLCAwLCA3MDMyOCwgMTk0OTg2LCA3MDMyNCwgNjQ0NDksIDAsIDEyNjY1MCwgNjM4NTQsIDg0NTYsIDY1NTg3LCAKKyAgICA3MDQ0MiwgNjU2NzAsIDk4Mzk2MywgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCA5ODM4NjksIDcwMzI2LCAwLCAKKyAgICA3MTQ2MCwgMTIwNzY0LCA3MDMyMiwgMTAwMTksIDc0NzYyLCAwLCAzNDU4LCA0MzY1LCA3MDA1MywgOTgzNzEyLCAzNjQ3LCAKKyAgICAxMjAyMDcsIDI2MDIsIDEyODM0MSwgMTIxMTAzLCAxMjUwNDMsIDQxMTM1LCA4MzQ5OCwgMCwgMTIxMzI1LCA2NDYzMSwgCisgICAgMTcyLCA0OTcxLCA0MTIxOSwgNDExMzcsIDE4ODksIDcyMzgsIDY1NDUsIDEyNjQ3NiwgNzc5MjYsIDc1OTcsIDEwNTI4LCAKKyAgICA3NTA1NCwgMCwgMzczMiwgNzM5MTAsIDE5NDU4OCwgNTM0NCwgOTgzOTcxLCA0MzM2NiwgNDMzNjMsIDkwNjIsIDExOTI1MiwgCisgICAgMTIxNDQxLCA5MjUyOCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCA4MzMzMCwgMTEzNzA3LCAxOTQ3MTIsIDEwOTAwLCAKKyAgICA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIDc0MDc1LCA2NDI5MiwgNDE1MjQsIDcyMjcsIDExOTYzNSwgNjA5OSwgNDE1MzQsIAorICAgIDAsIDEyNzM1NCwgMTI3MzQ1LCAyOTksIDgzMDIyLCA4NTI1LCAxMjczNDcsIDM1MjQsIDkxNzU2NSwgODgzMSwgMTI3MzQ5LCAKKyAgICA5MjU2NCwgMzA3NSwgNjc4NjcsIDk0MDUzLCAwLCA2NjM2MiwgMCwgNjQzNTMsIDcwNDQwLCAwLCA1ODQ1LCAxMjEzMTAsIDAsIAorICAgIDEyMTE4NSwgMjU4MSwgODIwMCwgNjUxMTQsIDY4NDYwLCA5ODM2OTMsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIDk4MzIwMSwgCisgICAgNjM0MCwgMTE4ODU1LCAxMjEwMjcsIDc4MTM0LCA4NjgwLCA3MjA0LCA3MDA2NSwgMjU4OCwgMjkxNCwgNzAxMSwgNTUyODEsIAorICAgIDAsIDI0NzEsIDE5NDYzMSwgMjg4MywgMjc0OSwgMTE5NTYzLCA3Mzc3NCwgMTA5MTMsIDgzMTE2LCA5ODMwODYsIDg2NjYsIAorICAgIDY3NSwgNDI0OTMsIDEyMTI5NywgNDM1NzEsIDAsIDYyMTksIDEyODU4NCwgOTk4MCwgNDEyMzIsIDEwOTI4LCAwLCA0MTE1MywgCisgICAgNDEyMjksIDExODk2NywgMCwgMzczOCwgOTQwMTYsIDk4MzI0MywgMTI3MTEsIDMxODEsIDY2MjEyLCA3NDI4OSwgNjg0NzIsIAorICAgIDQyODU3LCA4MjYyLCA5MzAzNiwgMCwgNzQ0NzYsIDAsIDQyMzQ3LCAxMjA5MiwgOTYxNSwgNzIzNCwgNzQwNDcsIDk4MzA4OCwgCisgICAgMTI4MTM3LCA0Mzc0NCwgMCwgMCwgNzM4NDYsIDI5MzQsIDEyNzIyLCAxMjA3NjIsIDkyMiwgNDM5ODMsIDc0NTA3LCAKKyAgICA5ODMxMjYsIDc0NDYxLCAzMjE4LCAxMjA0NzEsIDc0MjkwLCAxMjA0NjksIDY0NTYyLCAxMjA0NzUsIDg1NjksIDExNDA0LCAKKyAgICAxMTkzMiwgNzM3MjgsIDMyMTQsIDExMjEyLCAxMjA0NjgsIDEyMTI4LCAzMjA3LCA2NTQ4NiwgNzg3MjksIDE5MDEsIAorICAgIDc4NzI3LCA2NTY2NywgMTIwNDYwLCA3NDI1LCAzMjA1LCA2ODAwMywgNzg3MzcsIDc4NzM2LCA3ODczNSwgNDMzODMsIAorICAgIDY5OTQwLCA2NTQ1OSwgMjYwNiwgNzg3MzAsIDczODk3LCAxMjkwNDMsIDExNDk2LCAxMTczLCAwLCA0MTI3MiwgMTE5NjYxLCAKKyAgICAwLCAwLCA4MzE3OCwgMTIwNzM3LCAxMjA5NTMsIDE5NDc3MywgOTgzMzIyLCAzNzgsIDI2MTAsIDk4MzMyOCwgNjUwNzksIAorICAgIDk4MzMyNywgNjU2OTUsIDEyMTIyMCwgMzcsIDcwNjgsIDAsIDEyMDQ4MCwgNjgyMzYsIDMyMDksIDEyMDQ3NywgMTIwODM1LCAKKyAgICAxMDYzOCwgOTc2OCwgNjk5NTIsIDExOTkwOSwgNzE0ODYsIDkyMjI1LCA5ODM5NTMsIDk4MzM0MCwgMCwgNDM4NDAsIDAsIDAsIAorICAgIDUyMzMsIDk4MzMzNywgNjQ3OTIsIDcxMjMzLCAxMjgyMjMsIDEyNjYzMywgMTI4OTE5LCA3MDYwLCA5ODQ3LCAxMjAxNDQsIAorICAgIDE2ODUsIDU5NSwgODMxOTcsIDcwNDI4LCAxMjkyLCA4OTQwLCA3MzgwLCAxMTA4OCwgMCwgMTAwMDQsIDEyNjk5NywgMCwgCisgICAgNjU0MSwgNDM4MzcsIDcxNDY1LCAxMjEwMzAsIDMyNDMsIDkwMTQsIDU2MDYsIDEyNTAzMiwgNTM4LCA2NDYyMCwgNTYwMiwgCisgICAgODQ2NywgNzQzOTEsIDY1NDcsIDcxNDY2LCA4MjAzLCA2NjQyMCwgNjgyNDEsIDg0NTgsIDY1MjExLCA4NDk1LCA5MjMxMSwgCisgICAgMTI3NDgxLCA5MTc1NTIsIDc3OSwgNzgzMTQsIDY0MzY3LCAyNDY1LCA2OTkwMSwgODE5MywgNTUyNzksIDk3MzAsIDkyODAsIAorICAgIDEyMDkxMywgNzA2NSwgNzQxNTUsIDQzNDYsIDExMzY5MCwgNzM3OTgsIDUwNCwgMTI1MTE1LCA5MjQxNCwgODk4MiwgMCwgCisgICAgMTIxNDcxLCAxMTkxNzAsIDc4MiwgMTI5MDI4LCAxMDg4MywgMTI4NDQ2LCAxOTQ4NTIsIDczMiwgMzczNywgMTIxMTg4LCAKKyAgICAxNTQ4LCA2ODY1MCwgOTI1MDcsIDE4MzIsIDU2MDQsIDU3MzUsIDQxMTQxLCAxMTkwMjAsIDQzNzYsIDk4MzM3MiwgMTE3ODcsIAorICAgIDM3NDUsIDkxNzg2OCwgMTE5ODg1LCA0Mjg4OCwgNjU3MTIsIDEyNzkxMywgMzg2OSwgMTE5MzcsIDU3MjUsIDEyNzUzOSwgCisgICAgMTc4MywgNzQxNiwgNTcyOCwgMCwgMTI4NDU3LCAxMTk1NTQsIDExOTE4LCA2NjU2NywgNTcyNCwgMTI3OTY1LCA1NzI3LCAKKyAgICA3ODUyMSwgMTIxMTIxLCAwLCA3NjQsIDAsIDEyMTAxMSwgNDM1MzEsIDExMzY3MCwgOTAzMywgMTI3MTgyLCA0MjUzMiwgCisgICAgNjIyMywgMTEwNDIsIDEyMDc0OSwgMTE0MjMsIDc0ODUyLCAxMTk4NjEsIDY4MzAzLCA0MzQ2NSwgMCwgNzQ3NjcsIDY1NTksIAorICAgIDY0NTU3LCA3MTM0OCwgOTI2NDksIDEyMDY0OCwgNDMwMTksIDQzNDc3LCAxMDIzOCwgNzQ0OTEsIDEyODcxMSwgNDMzNzcsIAorICAgIDkyMjgyLCA3MTM0NiwgMTQ3OCwgOTc4MywgMTE4MjUsIDI2MDcsIDY0NzQwLCAxMTM2ODksIDc3MzksIDc0NTQzLCAKKyAgICA5MTc3NjUsIDY3MzkzLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMTI4Mzk2LCA3MDA1OCwgNDExNDQsIDcxODk5LCA5MjQzOCwgCisgICAgNDM1MzcsIDY3NjEsIDEwMDkzLCA0MzY5LCA5MTc3OTEsIDEyODM5NCwgMTk0Nzc2LCA4ODIwLCAzOTQ3LCAwLCA2NTI5OSwgCisgICAgMTE1MTUsIDUyNiwgMTI4MTAzLCA0MTI5NSwgMTk0NjAzLCAxMjUwMDIsIDE5NDkzMiwgMTEzNjkxLCA3Njg4LCA5MTc3ODYsIAorICAgIDc2ODYsIDgyODgsIDExODE1LCA5ODMxODgsIDEyMTQxMSwgOTgzMzg0LCAxNTQzLCAzNzEzLCA0MTIyMSwgMTI0MjMsIAorICAgIDQyMjgxLCA3ODU0NCwgNzQwMjQsIDEyMjkzLCA5ODM2ODAsIDY0MzU3LCAxMTc5NCwgNDIwODIsIDEyODEyNSwgMTczNywgCisgICAgODk4NywgNDIwODEsIDAsIDcyMDUsIDgzMjY0LCA5MzM1LCAxMjg1MCwgMTE5MTczLCA2NTUzLCA3MDU1LCA2ODA0MSwgCisgICAgODI3NywgMCwgNjc3NTEsIDU0NzUsIDc0Nzk1LCA2NzgwLCA2NTA2NywgMCwgMTMyNywgMTE2MCwgNDIwODQsIDkzOTYzLCAKKyAgICA0MTIxNywgMTE5NjYwLCAxMDAxOCwgMzYwLCAxMjkwNzAsIDk4Mzg2NSwgNjgxNzYsIDU4NjMsIDMxMzcsIDAsIDQxNDcsIAorICAgIDk4MzE3MCwgNDEyMTYsIDc4NDQsIDI2MTYsIDcwMTk3LCA2ODQ2MSwgNjUyMzQsIDY4MzQxLCAxMzA3NiwgMzEzNSwgCisgICAgOTgzMjg5LCA3ODE0MywgMTE5MTM5LCAzMTQyLCA5MjQ1MSwgOTQwNjgsIDEwODE5LCAxMTk1ODAsIDEwMTgzLCA3NDYzNSwgCisgICAgMjYwOCwgMTQ3MCwgNzM5NjcsIDk0MDA4LCA2MjI3LCAxMjEyNTcsIDgzMjY4LCA2NTIzNiwgOTE3ODc4LCA2MTYzLCAKKyAgICA5ODM1NTgsIDExMzcyOCwgMTI3MzE0LCAxMjgxMzgsIDk4MzIzNiwgODYwMywgMTI3OTU5LCAxMTk4NjYsIDMzMDYsIAorICAgIDEwODc2LCA0MzM5MiwgODMxODcsIDEyNzkzMSwgNTc1MSwgMTI3NTE3LCA2MjIyLCAwLCAxMjc0NjYsIDEyMDg2LCA3NDAzLCAKKyAgICAxNjAwLCA2NDMwOSwgNjQ5MzksIDAsIDY0NzgzLCA5MjY1OCwgMTEzMTAsIDAsIDg4ODIsIDExOTkwMywgMCwgMjU3MCwgCisgICAgNzAyMSwgNzQ5MDIsIDE5NDc0MiwgNDMxMTAsIDAsIDEyMzQsIDY1NDAsIDY5NzQsIDkyNzUwLCAwLCA5ODMyMTEsIDUwMDIsIAorICAgIDk4MzU2MywgNDEyODYsIDY5OTQ2LCA3NDQ2NSwgNzEwNzQsIDQzNTg1LCAxMTM3MjAsIDY1NTEsIDk4MzM3NSwgMTI4MjI5LCAKKyAgICA5ODMyNzQsIDQxMjg5LCAxMjUxMzAsIDcxMDgwLCAxMjc5NTgsIDg5NzcsIDYwMiwgMTIwODE0LCAwLCAxMjgzNTAsIAorICAgIDEyODY2MSwgMTk0ODkwLCA5ODMzNzcsIDQxMjc5LCAwLCAwLCA5NDEwOCwgMTEwODEsIDQzNjE1LCAwLCAwLCAxMjc4ODgsIAorICAgIDk4MzYxMiwgMTI3MjcsIDQzODk1LCAwLCA3ODM5NywgOTQ3NSwgNzExMiwgNjUxMDUsIDAsIDk2MzMsIDEwODg2LCA0MzU5MiwgCisgICAgNzgzMSwgOTgzODI5LCAxOTQ1NzEsIDAsIDczOTE1LCA4MDc2LCA0MzA0OCwgODI5MCwgODI5MSwgNDMwNTEsIDkyNTcwLCAwLCAKKyAgICAyNTk2LCA0MzU4NCwgMTIwOTgzLCAxMzExMywgMCwgMTI3NzU3LCAyMzkzLCA3MDU4LCA5MDg3LCA3NDA2NywgNjg2NzMsIAorICAgIDQxNTc0LCA3ODMzNywgNzA0OTgsIDQyOTAwLCA2Mzc2LCAwLCAwLCAwLCAwLCA5ODU0LCAxMjc3NDgsIDY0Njk2LCA3Mzg3OSwgCisgICAgMTI4MjIwLCAxMjA3NTIsIDY5OTQsIDAsIDE3MjAsIDAsIDAsIDAsIDY1MjksIDcwNjMsIDk4MzE3OSwgMzc1MSwgOTEyMCwgCisgICAgOTgzNDg3LCA2ODAzOCwgMTc5OCwgNzA5LCAwLCAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgMTI0MzAsIDgxMzcsIDk0MDk4LCAKKyAgICA2Nzc1MiwgNzA4NTAsIDExOTA1NywgMjQ1LCAxMjEwNjYsIDExNDU2LCA0MTIzMywgNzA3MCwgMCwgOTQwNDYsIDYxMzYsIAorICAgIDY4MzA0LCA2NTY3NywgODY4MiwgNDEyMzUsIDkyNTk1LCA0MjA0NSwgOTgwNCwgMTE4OTYzLCA0MzIsIDM1OTUsIDEyNzAxNSwgCisgICAgNjU0MzcsIDAsIDc0NDU1LCA0MjM5OSwgOTgzMTM2LCAwLCAxMjgyNzQsIDAsIDExOTY1OCwgMTI4MTg0LCAwLCAwLCAKKyAgICA3Nzg5NCwgODc5NywgMCwgOTA1MiwgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAKKyAgICA3MTEyMywgNjQ2NDAsIDY5OTk5LCA5NDEwOSwgMTIwODc3LCA3NDEzNywgNzAwMzUsIDEwMDYzLCAxMjY1MiwgMTIxOTksIAorICAgIDc0NjIyLCA0MzQ5MiwgMjU2NiwgMTE5NzEsIDk4MzczNywgMTIwODgyLCAxMDY1LCAwLCAxMjcwMDUsIDQzNDAwLCAyNTc2LCAKKyAgICA2NjY5NiwgNjY4MTksIDgzMzMzLCA0MzYwNCwgMTI3ODkxLCAwLCAzMjAxLCA1MTQsIDc0NTAyLCA3MDAzMiwgMjkyMSwgCisgICAgNDMyMTUsIDY0NDkzLCA1NzcyLCAxMjk2OCwgNzAwNTUsIDE5NDk0NCwgNzAzMTAsIDQzMzk4LCAyNTgwLCAxOTUwMjUsIAorICAgIDQxMzQxLCA0MTIyMywgNjU2NCwgMTQ2MywgNDEzNDIsIDAsIDUyOTMsIDcwMDIwLCAxMjc4NzAsIDM3MzMsIDExMzQ2LCAwLCAKKyAgICAxMjA1NCwgMCwgNzQwOTgsIDQyODI3LCAxOTUwNzQsIDEzMDkxLCAwLCAxMjg1ODAsIDAsIDkxNzkxNSwgMTI3OTYxLCAKKyAgICAxMjcwMjUsIDEyODMzNCwgNzQ4MjEsIDcxMTA0LCA2NjI5NSwgNjgwMzcsIDAsIDEyMTExNiwgMTMwOTAsIDY2NjQzLCAwLCAKKyAgICAxMjcwLCAxMTMyLCA0MjM2MCwgMCwgNzQwOTYsIDY2NjU1LCA0MjU2OSwgMTI3ODI0LCA2Njg5OCwgNjQ3NjEsIDAsIAorICAgIDQxMDIxLCA4NTEwLCA0MjQzMiwgMTE5ODk4LCAxMTkzMTcsIDE5NDc4MiwgMTk0NjQxLCA2NDQ5NiwgNzQxMDksIDcwMDMwLCAKKyAgICA5OTE1LCA5ODMwODMsIDk4MzIxOCwgNzA2MSwgNDEzMzYsIDM4NTQsIDY5NzAwLCAxMzE0MSwgNjg0MTMsIDQzNDAxLCAKKyAgICA0MjMxOSwgMTMwODIsIDc4MTE0LCA3MDY3LCA2ODIyMSwgMTI3ODgxLCAxMjczODMsIDEyNzE3MSwgMCwgMTIwNzQ1LCAKKyAgICA3NDIwOSwgOTAyOSwgNDM1NDMsIDcwODM2LCAyMzUzLCA2MzA4LCAxMjkxNTQsIDc0NzkyLCAyNjExLCAxMTkxODYsIAorICAgIDY2ODgxLCAxMjcyNDEsIDY1MDYzLCA0MzY2NCwgOTIzMTksIDY2NjI3LCA5MjkxMiwgNDQ4NCwgODUwOSwgMTE4OTc2LCAKKyAgICAxMTA2NiwgNjUyMzMsIDEyNzE0NiwgNDEyMjQsIDQxMDE3LCAxMjgxNDksIDM3NDcsIDEwNTIyLCAwLCAxOTQ4NzYsIDE2OTEsIAorICAgIDQxMjI2LCA3NDk2MiwgMTIxMDcsIDcxMDAsIDEwOTA1LCA2NTAxMCwgMTIxMjk5LCA2OTcsIDY2MDE4LCA5Mjg0LCA0MjQ0LCAKKyAgICA5ODMzNDMsIDkzMDU4LCA3NDc4MSwgMTMxMjEsIDEyMDAzNiwgMCwgMTIwMTAsIDEyODU3MywgMTI4MjIxLCAxMjA5NDksIAorICAgIDEyMTAzMiwgMCwgMTI3MTkzLCA2NTgxNiwgNjgxMTEsIDExODk1MCwgMTI3OTMzLCA2NTY2OCwgOTIyNTcsIDY2MTgsIAorICAgIDM1NjIsIDY2MzY1LCAwLCA0MjIzNCwgMTI2NDgsIDc4MTEwLCA3MTIzLCA3MDAzOCwgNTc4NSwgOTE5OCwgOTc2NCwgCisgICAgNDEzMTYsIDY1ODc3LCA3MzgzLCAxMzIzMCwgNDEyOTksIDAsIDAsIDY4MzY1LCAxMjgyNTgsIDE5NTAyNywgMCwgMCwgCisgICAgMTMxMjIsIDAsIDE5MSwgNzAwNjAsIDg1ODUsIDgwMDAsIDY0NDExLCAxMjA2NTIsIDQyODg5LCA2NDg1MCwgNDEwNzIsIAorICAgIDQxNTc4LCA5ODMxMDQsIDQxNTc3LCAwLCAxMDAwMiwgMTIxMzY0LCA2NTMzLCA3MzgwMiwgNDE1NzAsIDkxNzkxOSwgNjgzLCAKKyAgICAzOTYsIDQxNTgwLCA2ODE0NiwgOTgzMDY3LCAxMjkwMSwgNDMwNTgsIDAsIDM0MywgNzEyOSwgNDI2ODAsIDQxMzYwLCAKKyAgICA3ODE1NCwgOTgzMzk3LCA0NzQzLCA2OTk4NywgMCwgNzQwNDAsIDc0MTA4LCA4NzQzLCAxNzI0LCAxNDMzLCAxMTkzMjIsIAorICAgIDEyODY2NSwgMzczOSwgNjI2MywgNzEzNDksIDEyODgxMSwgMzk2NCwgNjU5MiwgMTIxNDI0LCA2ODI4OCwgNjYwNDAsIAorICAgIDgyOTQ2LCA0MjU2OCwgNjk4MDYsIDEyODExMywgMTc3OCwgMzk1NiwgMTI4NDQzLCA0MjA3MCwgNjU2MywgNDMwNzUsIAorICAgIDkwMTgsIDk0MDA2LCA5ODMzOTgsIDEyMDY3LCA0MTMxMiwgOTI3NjMsIDU1NDcsIDg5MTYsIDEyMDg2OSwgMTI4OTUwLCAKKyAgICA4MTc1LCA5NDAzNCwgMjg0LCA4MTA4LCA5MzQsIDEyODAzOSwgNzQwMDEsIDE3MywgNjY0NjAsIDcxNzQsIDkyNzAzLCAKKyAgICAxMTg4MjIsIDE3NTAsIDEyODY4NiwgNDM5NCwgNjgzNjgsIDE4MDcsIDk4Mzg4OCwgOTIyOTgsIDAsIDU4ODksIDEyODc5NSwgCisgICAgNzE4MCwgMCwgNjcxMjcsIDAsIDY3MTI2LCA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgCisgICAgMjU4MywgNDUxMiwgMTE5MzYwLCA2NTIzMCwgMTI4MTA5LCAwLCA5MTc2MzAsIDM4NTUsIDE5NDgxMCwgMTE3NjcsIAorICAgIDEyNzk5OCwgMCwgNzQyOTUsIDE5NDY1MSwgMCwgOTI0MTYsIDM5NzUsIDY3MTI1LCA3NDA4NywgNzQ5ODksIDEyNjcyLCAKKyAgICAzNzk4LCAyNzAzLCAxOTQ2MDgsIDAsIDIxMDksIDk3NzQsIDEyNzUsIDAsIDk4Mzc1MCwgNDEwOTUsIDM5NjIsIDY4MjQyLCAKKyAgICAyOTMyLCA0MTEwMSwgMzk1NCwgNjQ1NywgNDUxMywgNzQ1MzYsIDEyNzE4OSwgNzM5OTQsIDczOTkyLCAxNDY4LCAxMjAwMzMsIAorICAgIDk4MzA1NywgNDE4MDMsIDEyNzk5OSwgNDE4NDYsIDEyNzI0NCwgNTUyMzgsIDc2MzMsIDQxODQ5LCA2ODM4NSwgNDMyMCwgCisgICAgMzIyNCwgMTEzNzM0LCA5Mjc0MSwgNjYyODEsIDQyNTMxLCA3NDU5MywgMTUxMCwgMTI4Mzg0LCA4MjU2LCAwLCAxMTM5MywgCisgICAgMCwgODg3OSwgMTI4MDc1LCA5MjQ3NCwgODc3MCwgNzI0MTYsIDEyMDgxMSwgNzI0MTUsIDE5MTAsIDg2NzEsIDc4Mzc0LCAKKyAgICA0MjgzLCA2ODg0MiwgMTIwODI0LCA2ODM2MSwgNzgzMTgsIDI2NTQsIDc4OTMsIDE5NTAwNiwgMTI4MjQxLCAwLCA3MjM5NCwgCisgICAgNjUxMDYsIDQyNzYxLCAxMjg1NywgNDU4MSwgODQxMSwgNzgzNzIsIDc4MzcxLCA3ODM3MCwgNzgzNjksIDc4MzY4LCAKKyAgICA3NDQ3NSwgOTgzNDQ0LCAwLCAxNzMzLCA0MzkyLCAyNTY4LCAxMDc4NiwgNjk2NjEsIDAsIDgxODQsIDQxNDg2LCAwLCAKKyAgICA3Mzk2LCA3MTE2LCAwLCA2OTc4OCwgMCwgNzE4NSwgNzk2NSwgMTE5MTQ0LCAxMjg0NDcsIDkyMzQ3LCAxOTUwNjYsIAorICAgIDQxMzUwLCA5MTI5LCA5ODM0NDgsIDAsIDIyOTQsIDY0NTAxLCA2ODAzNCwgODMzMjYsIDEwNDgxLCAwLCA3MDAyMiwgNzE3MSwgCisgICAgMCwgMzQwLCA3MTEwNSwgOTM5NzIsIDY3MzYwLCAwLCA5MjIwMCwgMTI4MjQ5LCAxMjQ5NzksIDY3NjQsIDEyNzQ4NywgCisgICAgMTI4MzkzLCAwLCA5MjUwOSwgMTI4OTYyLCA2NTIwMywgMTEzOTIsIDExOTA5OCwgMTE5MzU5LCAxMTkwNzMsIDMyMTAsIDAsIAorICAgIDAsIDExODc5NSwgODI5NTgsIDk0MTAxLCAxMjc0ODQsIDkxNzYxOSwgMTE5MTQ5LCAwLCAxMDA0MywgMTIxMjE1LCAxMTg2LCAKKyAgICA0MTU3MSwgNjk5OSwgNjE3LCA5NDY0LCAxMjUxMjMsIDM2NzUsIDUyMDcsIDY1MDYyLCA1MjEzLCA3NDYxNiwgMjYxNywgCisgICAgNDEzNDgsIDQxNTY4LCAxMjg4MDMsIDMyNTMsIDEyMDUzNSwgMCwgODYzMCwgMTIxMjA5LCAwLCA1NTk2LCA1NTQ1LCA3Mjg4LCAKKyAgICAyNTg2LCA2NDg4NywgMTE5ODI2LCA1MjE3LCA3MTMzNiwgMTI4Njg3LCA5MTc2MTQsIDEyMTAzOCwgNjQyOTMsIDY4MDk4LCAKKyAgICAyNjM1LCA5Mjc2MCwgODMxMzcsIDk4Mzg0NiwgMCwgOTI3NDIsIDc4MzUsIDcwMDQwLCAxMjA3MDcsIDE5NDk4OCwgOTIyODUsIAorICAgIDY0NTU4LCAxMjcxMjIsIDEyMTQyNSwgNjcwODMsIDY3MDg1LCA3MDA5OSwgNzExMTgsIDU3ODQsIDk4MzEwMiwgMTk1MDUwLCAKKyAgICA5ODM4MTIsIDcwMDMzLCA0MDExLCAxOTQ1NjUsIDY4MTAxLCAxMjQ5NzgsIDc4NjQsIDQyNTQsIDY1MDk1LCA5ODM0OTgsIAorICAgIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIDU1OTgsIDEyMDcsIDEyMDUyMSwgNjY2ODksIDM1MDEsIDQyNTgyLCA0MzYwMCwgCisgICAgMTI5MDU0LCAxMjcxMDMsIDExMjQsIDU1OTcsIDE5NDc3OCwgMTk0NzcyLCA5MzIxLCA5ODM0ODYsIDc1MDQwLCA5ODM0ODQsIAorICAgIDY3NDAwLCAxNzE5LCA2ODM1NiwgNjgzNTQsIDk2NzEsIDExMjUsIDQzOTksIDY4Nzc1LCA2NjI3NCwgOTgzNDkwLCA3NjMxLCAKKyAgICA1NDg4LCA3MTI4LCAxMjA1MzIsIDAsIDU0OTEsIDExODc5NywgODkzNywgNDMwNDQsIDI2MDQsIDc0MTg3LCA1NDkwLCAKKyAgICA0MzA0NiwgNTQ4OSwgNzIxMiwgMTE3NjgsIDQzMDQzLCA2MzAwLCAxMjcxMjEsIDcxMjIsIDk4MzA5MCwgNDM5MCwgNDU0LCAKKyAgICA0MTM5NywgMCwgOTg3NSwgNzU5MywgMTk0NzkxLCA5MjI3NCwgMTE4OTEzLCA3MjA3LCAwLCA2NTkwMSwgMjM5NCwgMjU3NSwgCisgICAgMTE5MTg0LCAzNzQ2LCAxMTAxNiwgNjU3NTIsIDkyNzU3LCAwLCA0MzQyMywgMTI4NjgzLCAxMTk4OSwgMTE4ODg5LCAKKyAgICAxMjc3OTEsIDEyNzk5NSwgNzgyOTYsIDAsIDgyNDksIDEyODE3MiwgMTExMDksIDc4NTMxLCA2NjQwLCA3NDgwNiwgMjU5OCwgCisgICAgNTEzLCAxMjcxMTgsIDY1ODYsIDg2NTYsIDEyOTMwMSwgNjk3OTIsIDY1MDA4LCAxOTQ1OTcsIDcxMTExLCA3ODM4MywgCisgICAgMTk0Nzk1LCAxMjc0NzQsIDkyNTE1LCA2ODQ3NSwgOTM5NzMsIDE5NDU4NCwgNjM3OTksIDc4NjM3LCAxMjY0NywgOTE3NjA2LCAKKyAgICAxMjgwNDMsIDY5ODkzLCAxMDM2LCA2ODA5MCwgOTI0MTksIDE3MjMsIDY4MjE1LCA3NDIxNywgMCwgNDE1NzksIDI0NDQsIAorICAgIDEyMDcyMiwgMTA3MDUsIDczODc2LCAxOTUwNTQsIDc0NDg2LCA5ODM0NjksIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgCisgICAgMCwgNDIzOCwgMTEwNzEsIDk0NTksIDQzOTM2LCA0MzkzOCwgNzgxMzksIDE5NDk4NSwgODEyMSwgMTA0MzgsIDc0NDg3LCAKKyAgICA0MjU3NCwgMTMyODUsIDQzOTY3LCAxMTkwNywgNDM5MjgsIDU2OTAsIDkyMjU1LCA1MTE2LCAwLCA0MzE4MSwgMTMwOTUsIAorICAgIDc3OTI1LCA0MzkyNiwgNjQ0OTgsIDAsIDk1MDYsIDY5NzgsIDcwMTc2LCA3NDkzMSwgMCwgMTEzNzQzLCA3ODM3OSwgCisgICAgNDM5MzQsIDEyNzg0NSwgMTEyMiwgMzE3LCAwLCA3MTA1NSwgMTIwNjIxLCAwLCAxOTIwLCAwLCAxMDE3MywgODI3LCAwLCAwLCAKKyAgICA3ODM3OCwgMTE5NjAwLCA1MjIzLCAxMzA0LCAwLCA4MzUyNiwgNTIyNiwgMTI2MDIsIDk0MDQ0LCA1ODgwLCA5MzI5LCAKKyAgICA3NzU4LCA5MjM5LCA0MTE3MywgNTIyNCwgNTQ4NywgMTIyMiwgNTY5MiwgNDE3MjUsIDY5MjI5LCA5Njc0LCA1Njk1LCAKKyAgICA0MTcxMSwgNjQ2MjcsIDE5OTA5LCA3MTA3NywgNzQ2MDQsIDU2OTEsIDI4NywgODY2LCAyMzMsIDY4MTM4LCA5ODM0NDMsIAorICAgIDQyODE2LCA5NDAzNiwgNjUxNDAsIDY4MDI4LCA4MzA5MywgODgzMCwgNjU2OCwgNDIzMDAsIDEwNTI0LCA0MTE3NSwgCisgICAgODMwOTQsIDk4MzQ0NywgNjg4MjcsIDUyOTYsIDk4MzQ0NiwgNDI0OTIsIDQzNDAyLCA5MjQ2NiwgMzMwMiwgMCwgNzQ4NTgsIAorICAgIDY1MTYsIDY1MTUsIDY1MTQsIDY1MTMsIDY1MTIsIDAsIDc4NTYsIDg2OTAsIDk4MzY4NiwgNzA4NzAsIDEyMTIyLCAKKyAgICAxMTk2MDIsIDQzOTc2LCAxOTQ5MzcsIDE3ODUsIDY5OTI1LCA2ODYyMiwgNjUxNTMsIDY4ODA5LCA1MTM4LCA5ODM2MzcsIAorICAgIDcxOTIyLCAxMTg4NjksIDAsIDQ1NDAsIDQxMTgxLCA5MTc5MjAsIDYyMDAsIDAsIDUxMzQsIDY5OTgwLCAzMjIsIDQ2NDMsIAorICAgIDUxMzIsIDEyMTE4NCwgNjM4OSwgMTIwOTk4LCA1MTQzLCA4MzIwNSwgODc5MCwgMTIwOTExLCAxMjAxMjEsIDEyODY5NSwgCisgICAgNzExNjgsIDg4NjksIDY5OTE2LCA5MzA2OSwgNDIwNjAsIDcxMzI2LCA5NjQ4LCA4MzEwOSwgNzExNzAsIDEwMjcwLCAKKyAgICAxMDI4NiwgMTAzMTgsIDEwMzgyLCA0MzUyOSwgNjY0NzcsIDE5NDgwMCwgMTI4NTM0LCA3NDE3MCwgMCwgMzIzNCwgNDM4MzUsIAorICAgIDkxNzgxOCwgNzAxMTEsIDQzMTM5LCAxMTg4MTUsIDEyNzA4NCwgMTIwNjI3LCA4NzY3LCA2ODIzMSwgNzQ0ODksIDk2OTUsIAorICAgIDcyNDM5LCA1MjAxLCA3NTA2MSwgNjIxNSwgMTI3MTQsIDYyMTQsIDEzMTAxLCAwLCAxOTQ5OTksIDY1MjY4LCA3NjYxLCAwLCAKKyAgICAxMjA5MDksIDExMDI3LCAxMjg1OTYsIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgNzg4OTAsIAorICAgIDY3MTE1LCA5ODM2NzAsIDMyMCwgMCwgODY0NywgODMwNTQsIDMwNDksIDAsIDY0NzEsIDQyMDcxLCA0MzE1NiwgOTkyNSwgCisgICAgMTI3MzU2LCAxMTg4OTQsIDY2NDc4LCA0OTYwLCA1NTQ5LCAxMjczNTksIDEyNzM0NiwgODQ4NSwgNDY3MSwgNTQxOCwgCisgICAgMTI3MzUwLCAzMzUxLCAxMjA4OTIsIDEyNzM1MSwgMTA2MTAsIDU0MTQsIDMwNjQsIDYyMTIsIDQyODYsIDU0MjEsIAorICAgIDEyNzM0NCwgOTU1NCwgNjgwNTEsIDk0MDQ4LCA2Njg5NiwgNjY1MywgODMwNDQsIDgzMTAyLCA2NDUxMCwgNjIxMywgCisgICAgMTI4ODUsIDAsIDExOTA0NSwgNjQ3MjAsIDkxNzg3MywgMTIwNzU5LCA3Mzc0MSwgMTI2MDMsIDcxMzEsIDExMTA4LCA0NTY2LCAKKyAgICA3NTE4LCA5MzE3LCAzODAxLCAxMDM0MiwgMTA0MDYsIDEyNDkzOCwgMTE5MjU5LCA0MjU3NiwgMCwgNTIwMCwgOTI5NDYsIAorICAgIDEyMTQzNSwgOTgzODk1LCA5MTgzLCAxMjczNjEsIDc0NDU4LCA2NjI4MiwgMzk1LCA1NDgyLCA1MTk4LCA0MzQ5LCAxMDM5MCwgCisgICAgNzQyMDIsIDUxOTYsIDQzMjI0LCA2MTEzLCA0MjAwOSwgNTIwNSwgMTI4MzgzLCA0MzMwNywgNzAyOTcsIDExODk3MywgCisgICAgNzA0NjcsIDEyMTM0LCAxMjExNjcsIDAsIDExODg0MywgOTEyNiwgNDM1LCA5ODM2MjQsIDEyMDE0LCAxMDM3NywgODA5MywgCisgICAgOTA3OSwgMzIwMywgMTkyLCA2NTEwOSwgMzM4NSwgMTI1MDc1LCA2NDQzMCwgNTM4MywgMTAyOTQsIDEwMzI2LCAxMjczMDksIAorICAgIDU3MzgsIDEyMDA4OSwgMzMzNiwgNzgzNTUsIDUzNjEsIDM2MjMsIDQxMTU5LCA4MzM3OCwgNjgxMTIsIDc4NzIsIDg1ODEsIAorICAgIDAsIDEyNjAsIDMxNDksIDUzNTksIDEyMDEzNCwgNzQ5NTUsIDc5MTQsIDUzNTcsIDcxMTkwLCA3NDMzOSwgMjYyNCwgNTM2NCwgCisgICAgOTgzNjA4LCAxMTQzMSwgMTIwMDMwLCA5MTAxLCAxMTA1OCwgNzgyODgsIDY3MTA3LCA3ODI5MywgNDIyNzEsIDc4Mjg5LCAKKyAgICA0MjkxNywgNjcxMTEsIDEyOTE3OSwgNjU1NjYsIDY3MTcsIDEwNjE5LCA0MzM2MCwgNzgyOTEsIDc4Mzg0LCAxMTgzMiwgCisgICAgNzgzODIsIDc4MzgxLCA3ODM4MCwgNjk4NjEsIDkzMTksIDcwOTcsIDExOTA1NSwgNzc5MDYsIDMyMzIsIDczODI0LCAKKyAgICA3NDU4MSwgNzgwODcsIDAsIDcxMjA1LCA0MTg4OSwgOTI0NTMsIDEyOTE0NCwgMTE2MSwgNDE4OTUsIDc0MTAzLCA5NzAxLCAKKyAgICA4NjIyLCAxMjUwMjUsIDAsIDY4NzcyLCAxMjA1ODgsIDUwMTIsIDcxNDUzLCA0MTM2MiwgNjk4NjIsIDY4NTA3LCAxMTkyMSwgCisgICAgMCwgMTE3NjksIDY4NzgyLCA2ODYwOSwgNDEzNjQsIDEyMDk0NywgNzQyMjgsIDQxMzUyLCA0MTM2MSwgOTE3OTAzLCAKKyAgICA0MTM2NiwgMCwgMzM1NiwgMTE2MTEsIDkxNywgNjg0MjIsIDExOTkxNSwgNzEzNCwgODE5OSwgNzgzODksIDExOTYxOCwgCisgICAgNjc3LCAxMTk5MTYsIDkxNzg3NiwgNzE0ODIsIDEyNzE2OSwgNjg3NDcsIDAsIDY4NzM4LCAzMzQ5LCA3NDEyNSwgNzAyMiwgCisgICAgODkyNywgNDczOSwgOTI1OTksIDU4MDIsIDE5NDg3NCwgODYxNSwgMCwgMTI4MDU4LCA0OTEsIDc0NDAxLCAxMDE5MCwgCisgICAgNjg3NTUsIDY1ODM3LCA2ODgwMCwgODQyNiwgMTEwOTIsIDk4OTEsIDAsIDQyNDk3LCA3MTEzLCA3NTg2LCA0MjMwNSwgCisgICAgMTA4NTIsIDAsIDQyNjQ4LCA0NjA2LCA2ODQ0OCwgOTA5NSwgNzc0MSwgMTI2ODQsIDQxODg1LCAxMDQ2LCA3MTI0LCAKKyAgICAxMjg2MTAsIDY4NzUzLCA1ODE1LCA1MTcxLCA2NTUzOSwgNjg2MTIsIDY5MzIsIDc0MjY3LCA0MjM5NCwgNDE4NzgsIAorICAgIDc0ODQ5LCA3NDk0NywgNzI0MjQsIDUxNjksIDExOTM1LCAwLCAwLCAzMTc1LCAxMjA4MjIsIDE1MzcsIDEyMDgwNCwgNTE3NiwgCisgICAgODkwNSwgNDEzNiwgNDg3MSwgNzgyODcsIDEyMDY2MywgOTgzMywgMCwgMTEzNzMwLCAxMTI4LCA2NTkyMCwgOTE3ODc5LCAKKyAgICA5NzExLCA3MDU3LCA5NDA4LCA5NDA5LCA5NDEwLCA5NDExLCAzNjYyLCA5NDEzLCAzMzc4LCA5NDE1LCA5NDE2LCA5NDE3LCAKKyAgICA5NDE4LCA2MzIwLCA5NDIwLCA5NDIxLCA1ODk3LCA5NDIzLCA1MTY1LCA1MTI2LCA0MTM4NSwgOTgzOTM4LCA0MTM4OSwgCisgICAgMTI3OTYzLCA4OTU1LCAzMzc0LCA5NDAwLCA5NDAxLCA3MTE5LCA5NDAzLCA5NDA0LCAzNTA3LCA5NDA2LCA3NjI5LCAKKyAgICA5ODM2MTcsIDE5OTI1LCA0MjY2OSwgNjg0NjMsIDE4MywgNDM5ODUsIDI2MzEsIDcwODExLCAxMDYyNywgNDExMzAsIAorICAgIDcxMDc5LCAzOTk2LCAwLCA3MTQ0MiwgMTI4OTEzLCAxMTkzMTMsIDExOTMwNywgNzg3NjgsIDY1ODAsIDQzMzIsIDY0ODI1LCAKKyAgICA2NjMyOSwgMTA3MjYsIDY2Njg2LCA0MTEyNSwgNTg5OSwgNDEzNjUsIDEyNzIwNiwgMTIwODUsIDY2OTAyLCA1NzQsIAorICAgIDEyNjcwNSwgNzc4MjUsIDczODI4LCA1NDQ4LCA0MTA1OCwgNTQ0NiwgNjU5MzIsIDQxMzIyLCA0MjIxMSwgNTQ0MiwgNDE5MCwgCisgICAgNzc4MzQsIDc3ODM1LCA1NDUxLCA3NzgzMywgMzYxNiwgNzc4MjgsIDY4ODE3LCA3NzgzOCwgNzcwOCwgNzQ3NTksIDIyMjgsIAorICAgIDY1ODY3LCAxMDM0NSwgMTA0MDksIDQxOTEsIDEyMDM3OCwgNzc4NDQsIDczODAwLCA0MjE4MSwgNzc4NDMsIDc3ODM5LCAKKyAgICAyMDYwLCAxMjExOTMsIDcxMTEsIDExNzg4LCA2NTM3NiwgNjgxMjksIDEwNDE1LCA3NDEwMiwgOTgzNjI1LCAyMDUsIAorICAgIDgzMDQwLCAxMDM1MSwgNjcxNTEsIDAsIDk4NjIsIDY1ODgsIDQzMjU3LCA2NDY5NywgNzM5OTgsIDQxMzU1LCA1NTA1LCAKKyAgICA3NDk2NiwgNTUwMywgODAyMSwgMTI4MDM1LCA3MTI1LCA5ODE5LCA0MTM1NywgODAxMSwgNDI4ODUsIDU1MDcsIDEyMDQ0LCAKKyAgICA5MjYzNiwgMCwgMTAwMjYsIDU0NzIsIDcxMDksIDExOTEsIDEzMTA2LCA1NDcwLCAxMDMyOSwgNTQ3NiwgODk5MSwgNjYzMjIsIAorICAgIDY5Nzc4LCAxMTEzMywgNDI4NzQsIDg1NTAsIDQyODc2LCA1NTkyLCAyOTE5LCAxMjkwNTIsIDI2NzUsIDU1OTUsIDc4NDExLCAKKyAgICA0Mzc2MiwgNDM2NywgMTI3OTEyLCA5MTc3ODIsIDU0NzgsIDU5MDQsIDU1OTQsIDAsIDc0MTUwLCA3MjkxLCA1NTkwLCAKKyAgICA0Mzc2MSwgMTMwNjcsIDExODkwOSwgNzUwNjksIDk4MzEwOCwgOTczMSwgNjk3MzEsIDY0NjMzLCA3Nzg1NywgNzc4NTQsIAorICAgIDcxMjE3LCA3Nzg1MiwgNzEyMjcsIDc3ODUwLCAxMDc1MCwgNDM3MTQsIDc3ODU4LCA3MTM3LCAwLCA2NjkwOSwgMTI4ODcsIAorICAgIDEwNTUxLCAxOTQ1NjQsIDc3ODY2LCA3Nzg2NywgNzc4NjQsIDc3ODY1LCA5OTI5LCA1MTk5LCA5OTM2LCAxMTIwLCA0MjM4NywgCisgICAgMCwgMTQ0NCwgOTQ4NiwgNzU1NCwgNjU4MzksIDU1MjUyLCA3Mzk3MiwgMTQ0MiwgMTI5MDgwLCA1ODk0LCA3MDA2OSwgCisgICAgMTI4NjcyLCA0MTE3MSwgOTI1MTEsIDcwMzU4LCAxMzIzLCAxMzE2MiwgMTIwNTk5LCAzMzM0LCAxMjg3MDQsIDkyNzA5LCAKKyAgICA3Nzg4MSwgNjYwMjIsIDAsIDY5NzcwLCAxNjUxLCAxMjAzNjQsIDg4NjEsIDAsIDAsIDExNDIsIDk4MzExMiwgODI3MSwgMCwgCisgICAgOTgzMDU4LCAxMjY2NDUsIDEyOTAzLCA3ODQwNiwgNDAwMiwgNDM2MjYsIDEwNDQyLCAxMDY3NiwgMzM0NCwgMTI4OTEwLCAKKyAgICAxOTQ3ODcsIDEyOTIwLCAxOTQ1NjAsIDcwNDk3LCAxOTQ2ODcsIDY2NjQyLCAxMjc3LCA2Njg3NiwgNzg3MSwgNjcxMDYsIAorICAgIDcxNDg3LCA3ODg1MywgMTI5MDY4LCA3ODg1NCwgMTIwMzYwLCA5ODM0OTIsIDExNzg0LCAwLCA3ODAxMiwgNDcwMCwgCisgICAgNDM4NTYsIDc4ODU4LCAxMjAzNTksIDExMDEyLCA5ODM2MjcsIDc4ODU2LCA3ODQ0OCwgNzc4NzksIDQ5NzMsIDg3ODQsIAorICAgIDc3ODc3LCA3NDgwNCwgNzc4NzQsIDc3ODY5LCA3Nzg3MSwgNDI0NDAsIDcxMjI1LCA0MzExOCwgMTE5ODc1LCA0MjM2NCwgCisgICAgNjc3NCwgNjc3MywgOTE3NTYwLCAxMjAzNjksIDEwMzQ2LCAxMDQxMCwgNzg4NTksIDkyNDMsIDI0NjQsIDc0MjYzLCA2MTA4LCAKKyAgICAzMzcyLCAwLCA2MjQ3LCA0MzExNywgNzAzNjQsIDcxMjEsIDc0MTY2LCAxMjQ5NzMsIDEyMDM1NSwgOTI1MzcsIDE5NDg0NiwgCisgICAgMTE5ODc3LCAxOTUwMzQsIDcwMzU3LCAxMTk5MjIsIDAsIDY3MTE5LCAzMzU0LCAxOTUwMzcsIDQxOTIsIDkyODksIAorICAgIDExODk5OSwgNDExOTEsIDM4NzYsIDAsIDcwMDY3LCAxMjA2NjAsIDQzNjk2LCA0MzM4MCwgMCwgOTgzMDkxLCA5ODM5NjUsIAorICAgIDk4Mzc1OCwgMTE2MDMsIDk4Mzk1NCwgNzUwNzQsIDY1ODksIDEyODU2NCwgODI5NzUsIDEyMDk5MywgNjc4MTIsIDk4MzcwMCwgCisgICAgMCwgMTI5MDg3LCA0MjU3MiwgMTI4MjY0LCAxMDYzMCwgNzQ4MjcsIDE5NjMsIDExNjIyLCAxMTg4ODIsIDExNjU0LCAKKyAgICAxMjEyODcsIDc1NTAsIDEwNjg2LCA1OTAzLCA2NzA5OCwgNzgwMDksIDQxMzI5LCA5NjYyLCA5MTc5MzcsIDY0Njk4LCAKKyAgICAzMzY2LCAxMDM5OSwgOTE3OTM4LCA1NTQyLCAxMTAxMywgMTI3OTI3LCA3MTA2MiwgMTk0Njc3LCA3MTQ2MSwgNjcwOTAsIAorICAgIDY5MjUsIDAsIDAsIDkyODkyLCA3MTg1NiwgMTE1NjgsIDk4MzY3MywgNDMzNjcsIDY0NTc5LCA5MTc5MzAsIDc4NTIsIAorICAgIDExMTM4LCAwLCA2NzU0LCA2MzEyLCA3Nzk1NiwgNjQ2NzIsIDY1Mjk2LCAwLCAxMTg5NTcsIDAsIDQxNiwgMTIyOTYsIAorICAgIDY4NDU3LCA3MzgzNCwgNjgxNzcsIDExMDUwLCAxMDk4NCwgOTIyMDgsIDAsIDAsIDkyMTgyLCAxMjkxNDYsIDk4MzYwNSwgCisgICAgOTUzMiwgNjYzNTUsIDExOTI2NCwgNjgwNzMsIDExMzY5NSwgNjQzNDMsIDE5NTAzMiwgOTI3NDQsIDE5NTAzMSwgMCwgCisgICAgMTk0ODQ3LCAxOTUwNTcsIDExNDQ1LCA2ODI5NCwgMjExMiwgMTI4NzQxLCAxMjg4MTQsIDEwMTg1LCAxMDIxLCAxMjgxMzAsIAorICAgIDk1MDcsIDEwMjEwLCA3NDU0NCwgODAyMywgMTIwMCwgMTIyNDMsIDc4MDAxLCA1MjgyLCA3ODAwMywgOTYyNCwgMTE1NDUsIAorICAgIDAsIDEyMDI3NiwgMzM0MywgNDQyNCwgMTEwNDcsIDE4ODUsIDQzMjY4LCAzODk2LCA3ODQ0NCwgNjY0OTcsIDI5NDcsIDM5MiwgCisgICAgNzg5NCwgNDM5MSwgNjgxMzksIDEyMTA2NCwgMTMwNTksIDc0ODE2LCA3Nzk5OCwgMzM4MSwgNzk0MiwgMCwgNjkyMTksIAorICAgIDkyNDMzLCAzNTU4LCAxMjkxOTAsIDM5MTMsIDcwNDI5LCAxMjEzNzYsIDc4MjM1LCA3MDQ0LCAxMjY1LCAwLCA2MzA5LCAKKyAgICA3MDQ1LCA3MTc1LCA3MDQ3LCA3ODIzOSwgMTE3OTEsIDk4MzEyMiwgOTE3NTg3LCA4MjIxLCA3ODMwNywgNDE4NjQsIDAsIDAsIAorICAgIDY3MDc1LCA3MTIxOSwgMTY3LCA5ODM5MDYsIDc4MzAxLCA5ODM2NTMsIDc0MjExLCA0MTg5NywgNjcwNzIsIDAsIDkxNzU4MywgCisgICAgMTI3MTQwLCA2NzA3NiwgMjQ5MywgMCwgMTEzNzc4LCAxMjEyNDUsIDc4MTA3LCA2NDM1NCwgMCwgODc3NywgMTI3OTQwLCAKKyAgICA0MDYsIDg4ODQsIDIzODUsIDc4MjEwLCA5MjQ1MCwgOTE3NTkwLCA5MTc1NzMsIDQzMDMwLCA0MjAyNywgMTIxMTQsIDAsIAorICAgIDEyODU5NywgNjQ5MzYsIDE5NDY5NSwgMTE5MjY3LCAxMjA2MjksIDEwNTYxLCAxMjg5NDAsIDgzNjUsIDEyMDUzOSwgCisgICAgOTgzNzc0LCA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgNzQxMjEsIDEyODg5NiwgODMxNzYsIDc4MzQsIDc0MTU5LCAwLCAKKyAgICA5MTc1NzQsIDEwMjk4LCA2NjI0LCA0OTA4LCA5MTc1NzcsIDE2MzksIDEyMDg0MiwgMCwgNzA4MDMsIDYzMjcsIDY3MjQsIAorICAgIDEyNDk1MywgNjYzNTQsIDkyNTY2LCA2OTkxMCwgNDgxNywgMTEwODcsIDE5NDc1OSwgOTI1MzYsIDcwNDMsIDk2MDAsIAorICAgIDExMDIyLCAwLCAwLCAwLCA5ODM1OTksIDAsIDczOTU0LCA3NTQ4LCA2NDc5NCwgNDIwNTAsIDEyMjkxLCA1NTI4OSwgCisgICAgMTI4NzgxLCAxMjM0MywgNjU3LCA2NzExMCwgNDI3MDUsIDQ0NjEsIDExMzQsIDE4MzgsIDc4NDM4LCAyMDU3LCAwLCA0NDY4LCAKKyAgICA5Mjg5MSwgMTk0OTQ1LCA4MzA1NiwgNDQ1NiwgNTIwNiwgMTA3MjAsIDAsIDQyNTIzLCAxMjc1MjAsIDAsIDkzMDQ0LCAKKyAgICAxMjk0MTEsIDY1NTUwLCAyNjAsIDQ4MTYsIDY3NjU4LCAxMDY4NywgMCwgNDgyMSwgNDQ2NiwgMCwgODMxODIsIDQ4MTgsIAorICAgIDEyOTA1OCwgNDE0MDMsIDExOTk3NywgNzI0MjIsIDEyODQ1OCwgNDE0MDYsIDQzMjczLCA3NDE2MCwgNjk4MDUsIDczOTM5LCAKKyAgICA5MjYzOCwgMTE5OTg0LCAxMTk5NzksIDQxNDA0LCAxMTY1LCAxMTk5ODAsIDQ0NTEsIDEzMDg3LCAwLCAxMTI4NCwgCisgICAgMTE5OTg3LCA3MDA5NywgNjUxNTUsIDQzMDE0LCA1NDM5LCA5MzYzLCA3MDA3MCwgMzM3NSwgMTI4NDQ4LCA1OTAwLCAKKyAgICA5Mzk5MCwgNzg4OSwgMjcyMiwgNDIyNjIsIDk4MzQ4MSwgMCwgNjcwNzgsIDEyODQ1MSwgMjI4MiwgMTIxNDIyLCAxMjc4MTAsIAorICAgIDExNDAxLCA2NzA3OSwgMCwgNjg0NTksIDEyNTAyOCwgOTgzMTQxLCAwLCA3MDE1MCwgNjU0MzgsIDAsIDcyODAsIDEyNzg4NywgCisgICAgNjgwNTUsIDcwMTQ2LCA0ODY4LCA4Mjk3LCAxMTk5NjYsIDcwMTQ4LCAxMjUwMDgsIDEyODc0NCwgNDMxNjEsIDcwMTQ0LCAKKyAgICA5MjM2MCwgMCwgNTE4MiwgMCwgMTIwNTQyLCAwLCAwLCA0MjI2LCA3MDE4NiwgMTIxMzUsIDU3MzIsIDQ0NjQsIDE5NTA4MywgCisgICAgNzEzMzAsIDk3NywgNDQ1OCwgNDM4MjcsIDkyOTcxLCA2NDc3MCwgNzQ4MzgsIDAsIDM0NCwgMCwgMTIxMjI4LCAxMzk1LCAKKyAgICA2NDI3OSwgMCwgOTIyNDAsIDEyMTE3OSwgNzg2LCAxMjY5OTUsIDQzMTc0LCA2NDM0MCwgODMwNzcsIDE5NDc2NywgNzM5NzEsIAorICAgIDQzMDI2LCA3NjEyLCAxMDEzMiwgNjQ0MTMsIDY1MDI1LCAwLCAwLCAwLCA5Mzk1NiwgOTgzOTE3LCA2ODQ0NCwgMCwgCisgICAgOTI0MzcsIDEyNDkyOCwgOTI1NDksIDEwMjA0LCA5MjY1NiwgODMwNzgsIDExOTI3MSwgMTI4NDMxLCAxMzk5LCAxMjE0NjMsIAorICAgIDY1MjE3LCAxMjE0NjUsIDg4NTIsIDEyMDgwOCwgMjQxLCAxMjE0NjksIDQ5MDcsIDEyODQyNywgOTgzNjM5LCA3OTMyLCAKKyAgICA5NzI3LCAxMjg0NjMsIDc0MjU1LCA4NzQ4LCAwLCAxMjg0MjgsIDk4MzYzMSwgMCwgNDI3ODAsIDU1MjYzLCAxMTM2NzcsIAorICAgIDk4MzU2MCwgNDIxNywgOTMwMzQsIDg2NTAsIDEyNzk5MSwgMTIwNjczLCAxMjgyMTUsIDY5OTAwLCAxMTg4NzIsIDQzMDk5LCAKKyAgICAzOTY1LCAxMTkxMTksIDY3MTksIDEyODAwNywgMTMzMDAsIDc4NDM5LCA5Mzk3MSwgNDMwNTcsIDY2NTg4LCAxMTg5OTEsIAorICAgIDY2Mjg5LCAxMjA5MDIsIDczODE1LCA0NDIwLCA5ODMxMjAsIDY0MTAsIDc3NjAsIDAsIDcwNDY4LCAxMjg3NTIsIDEyMDY4NCwgCisgICAgMTIxMjQ2LCA3Mjk0LCAxMjgyMTgsIDQzODY5LCAxMjA4NTksIDkwNjYsIDEyMTMyMSwgMTE5OTMsIDQzMTg4LCAyNjI2LCAKKyAgICA3NzYyLCA5ODM4NjYsIDExODgzMSwgOTI4OTksIDkyNjAxLCA0MjgyNSwgNDE4NTQsIDUzMDQsIDcwMjkwLCA3ODUxNiwgCisgICAgNjkxOSwgODYxOSwgMTE5NjU1LCAxMDAzOCwgNjY0NTQsIDk1OTIsIDQyODUxLCAxMjA1MzcsIDE1NDIsIDkyMzAzLCAKKyAgICAxMjg4MTksIDAsIDEyNzMyNywgMTIxMTk5LCA3NDMxMSwgNzg0OTcsIDAsIDEwMTgxLCAxMjQ5MzcsIDQzNjI0LCAxMjkwNjAsIAorICAgIDc3NzksIDkxNzU1MSwgMTAxOTUsIDk0NzksIDYwMjksIDEyODM3NCwgOTIyNjgsIDIyMjQsIDAsIDY1NTc3LCA4OTkzLCAKKyAgICA2NjM1OCwgMCwgNDIzNzgsIDMzNjgsIDYwNiwgMTI3MDMwLCA3Njk3LCA2OTIzNywgNjk3ODcsIDIwMzAsIDcwMTA2LCAKKyAgICA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgNzAzODYsIDEyNzkwMywgOTgzMzM5LCA5ODMzMzgsIDI3MzUsIAorICAgIDQyODMxLCA3NzkzNSwgNzA0MzksIDc0ODY2LCA4ODgxLCAxMTkwNDcsIDAsIDcwNDMzLCA3Mzk0NiwgMCwgMTk0NzAzLCAwLCAKKyAgICA2ODE0MCwgOTgzOTI4LCA5NTc2LCA3MDI4OCwgMzM0NywgNDE2MCwgNTE1NCwgNTUyODgsIDM3OTQsIDY2NTY0LCA4NTMwLCAKKyAgICAxMjcwNjMsIDc3MDksIDQxMTEyLCAxMTk4NjgsIDY2NTYwLCA4MzgxLCA0NTcyLCAxMjg3NiwgNjY1NjEsIDEyODkyMSwgCisgICAgNjc1OCwgNjYwMzEsIDE2MTUsIDU4NTUsIDgwOSwgMTI3MTE3LCA5MjI4MywgMTI4MzE2LCAxMjgwMDQsIDU3OTksIAorICAgIDEyODkyOSwgNzAxMDAsIDEyODYwNywgNzI2MCwgOTgzMzI2LCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCA3ODgxOSwgNjQzODYsIAorICAgIDY1MjU3LCA3NDkwOSwgNjg2MTYsIDEyMDYwNywgOTM0NywgODMzNjAsIDY1MzIsIDAsIDkxNzkxOCwgMTIwODYwLCAKKyAgICAxMjcwNjAsIDY1ODI4LCAxMjAwMDYsIDI4MywgNjg2NjUsIDc4ODEzLCA1MzIsIDc4NjYzLCA3ODgxNywgMTI4MDIxLCAKKyAgICAxMjA2MDksIDAsIDMzNzAsIDkxNzg4MSwgMTEzNjEsIDU0NDMsIDcxNDMxLCA4MTUzLCA3Mzc2NywgMCwgMTA3NDEsIAorICAgIDEyMTUwMywgMjI5OCwgMCwgMTI1MDM5LCA2NTQ5NSwgNjQ3MDYsIDk4MzMyMCwgNDMzNDQsIDk4MzMxOCwgNzE0NCwgOTQ2NiwgCisgICAgNzg4NjYsIDk4MjQsIDY3MTQyLCAxMjg5NjMsIDY3MTMzLCA2NzEzMCwgOTE1LCA0MzQyNSwgNjcyOTIsIDQzODY1LCAKKyAgICA2ODIzMiwgOTgzMTExLCAxMjA4ODgsIDQzMjY0LCA2NzEzNiwgNjcxMzcsIDAsIDQzMDM4LCA3ODg2NCwgNjczMCwgNzg4NjIsIAorICAgIDY4MTYxLCA2NDU1MCwgNTE4NiwgNzM2MCwgMTI3ODM3LCA3MDQ1MSwgMTIxMDgsIDEyMDY0NCwgNjUxMjQsIDQzMTI3LCAKKyAgICA2NjA0MywgMCwgNjMyNiwgNDMxMDcsIDc3ODI2LCAwLCA0MjU2MiwgMCwgMTI4ODIxLCAxMjgxNzgsIDEyMDkxOSwgMTE0ODUsIAorICAgIDYxMDMsIDkyNDY4LCA5ODMzMDcsIDExNzE4LCA5ODMzMDUsIDEyODg5LCA5MjY1NywgMTI1MDM0LCAxMjA2MzUsIDEyNzE1NywgCisgICAgMTIxMTI4LCA1NTI0NSwgMTI4NzA5LCAxNjMwLCA4MzAyNywgNjU0ODMsIDEyMDYzNCwgMTI1NjUsIDAsIDY1NDc2LCAKKyAgICA3MDM2OSwgOTgzMDcyLCA4MzAyOSwgOTI4MywgNzcwMCwgOTE3NTM3LCA5NjkwLCA2NTQ5OSwgMCwgNjQ1OTMsIDUxMiwgCisgICAgMzM3NiwgNjgwODAsIDAsIDEyODI1MywgNzc4OTIsIDYzMiwgMTI5NDAsIDc3ODkxLCA0MjUyOSwgNzg1ODcsIDE5NDYwNCwgCisgICAgNTk1NywgMTEwNTkzLCA4OTI2LCA5ODMzMDEsIDk4MzMwMCwgMTI4MjczLCAxMDc0NSwgMTAxNzQsIDczNzksIDY0NTgxLCAKKyAgICA1Mzg2LCAxMjA2ODYsIDExNzEzLCAxMDYzMywgNjk3MDgsIDUwNTYsIDAsIDAsIDAsIDEyMDc3MywgOTQwNTUsIDk4MTIsIDAsIAorICAgIDQ0NjAsIDc4NzkxLCAxMjQ5NTYsIDcxMzA3LCAxMjgwMzgsIDAsIDEyMTEzNSwgMTI3MTc0LCA2NDI3OCwgOTIzNzAsIAorICAgIDQzNDY2LCAwLCAwLCA2NDM4OSwgMjk1MywgNzAxMjIsIDE4MDEsIDEyODM1LCA3NDg0NywgMTIwODY3LCA3MzgyMywgCisgICAgODMxMTAsIDY2Mzc1LCAyMDg1LCA3MDIsIDQyNTc5LCA3Nzg4NCwgNzc4ODUsIDEzMDc0LCA3Nzg4MywgNjYyOTksIAorICAgIDk4MzI4NywgNzE0NDcsIDEyMTA2LCAxMjA5NzIsIDc0MjA3LCAxNzU1LCAxMDQ4MiwgMTI4NjMsIDc3ODk4LCAxMTYzLCAKKyAgICAyOTUxLCA5NTIyLCA2NzgxNiwgNzgyNjYsIDY2NjA0LCA5ODM4NjAsIDMzODQsIDY5MjI3LCAxMDcwMiwgODMwLCA3NzkwMiwgCisgICAgNzc4OTksIDc3OTAwLCA4NDUxLCA4MzMyNCwgMCwgMCwgNjY0NTgsIDEyODk1NywgMTI4ODcwLCA3NDg5NiwgMCwgMjkwOCwgCisgICAgMCwgMTExNzcsIDY0OTAyLCA0MjQzLCA5MjQ1NCwgMTIyMzksIDEyMTAwMywgMTI0OTU5LCA0NDQxLCAwLCA4Mjk2OCwgCisgICAgNzM5NDAsIDY0MzUyLCAxMjc1MTMsIDEyNTAzMSwgNDExLCA5ODMyNzUsIDkxOTksIDk4MzI3MywgNDA1NiwgMTE4OTkyLCAKKyAgICA0MTg5MCwgMTI4NTkyLCAyNzMwLCA0MTYwNCwgMTI4MzU1LCA1NDI4LCAxOTQ3NDMsIDMzNjQsIDQyMjY1LCA2NDQzNywgCisgICAgMTI3OTM1LCAxMTg4MTYsIDcxNDU4LCA5Njg0LCAyMTYsIDcxMzY3LCAxNDAxLCAxMjgwNTMsIDQ0MDEyLCA5MjYyOCwgCisgICAgNzE0NTYsIDkyNTg1LCA5MTU4LCA2Njg3OCwgMTExMjYsIDU3NjgsIDAsIDk4Mzc1OSwgMCwgNDg0LCAxOTQ3MzksIDAsIDAsIAorICAgIDY1ODk1LCAxMjUwNzYsIDEyMTM4MCwgMzMzOCwgNzM5MzUsIDU3MiwgNzA0MSwgMjczNiwgNjc2MDUsIDEyNzU0MywgCisgICAgOTM5NjIsIDI3OTQsIDg4MDcsIDY0NDkxLCA3Nzg0NywgNTQzOCwgNTIyMiwgNTM4MSwgNDMxMTQsIDAsIDUxOTMsIDUxMjUsIAorICAgIDU0NTYsIDU1MDksIDc3ODQ2LCAxOTQ3NDcsIDk1MzQsIDEyOTEwOSwgMTI5MDQwLCAwLCAzNDMwLCAwLCA0MjkwNSwgCisgICAgNzg3MTcsIDc0OTI5LCA5ODEsIDEyOTE4NCwgNDMzMCwgNzM5MjksIDEyMDUzNiwgMTgyNCwgMTA5MDgsIDEyNjUwNiwgCisgICAgNzAzNCwgNDE2ODMsIDY0NjE3LCAwLCA3Mzc1NCwgMzk1NywgNjQzNTgsIDY0NTQ3LCAxMjgyNTksIDY3NCwgNjM5OTEsIAorICAgIDk4MzI1MSwgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgMzc1OSwgMTE0MTEsIDgzNjQsIDUxMjMsIDExOTYyOCwgCisgICAgNTI4MSwgNTQ2OSwgNTEyMSwgNzc5ODksIDExODk5MywgMCwgNTEzMCwgODMxODAsIDEyODM1NywgNzc5OTAsIDAsIAorICAgIDEyMDcyNiwgMTIyMSwgMjczMywgMTE3NDYsIDc3OTkxLCA1MjE2LCAxMTkyNjgsIDAsIDEyODQ3NSwgOTIxODcsIDM0NjgsIAorICAgIDcwMzMsIDkyMzAsIDU5MzksIDEyODM5NywgMCwgNTgwMywgNzE4NjcsIDY4NDAwLCA3Mjc4LCAxMDMyMSwgMTAyODksIAorICAgIDY0NjEzLCAxMDM4NSwgNDE3MDYsIDAsIDAsIDkxNzkzOSwgMCwgMTE3MzksIDc3OTg2LCA0MTk4MSwgOTI3NDMsIDU5MzgsIAorICAgIDAsIDQzNzY2LCAxMjQ0OCwgNzU3NiwgMTA0MDEsIDEwMzM3LCA3Mzg1MiwgMTI0OTk0LCAxMzA1NywgMCwgMTI2OTc2LCAKKyAgICAxMjkwODEsIDEwMDA5LCAwLCA0MTcwMywgMTIwOTUwLCAxMjE2NSwgMTI5MTkxLCAwLCA5ODg1LCAwLCA4MDc3LCA5MjYyMCwgCisgICAgMTI3OTA4LCAxMjEwNDQsIDE5NDk5NSwgMCwgOTI0NTcsIDEyOTEzOCwgNDIyMCwgMTA3MjUsIDEwNDMzLCAwLCA2ODM5NSwgCisgICAgNDk4NywgNjQ1MTksIDEyMTI2NSwgMTI1MDc4LCAwLCAxOTQ4MTMsIDEyODU3NCwgMTA5NzAsIDExNzMzLCAwLCAxMjA3OTIsIAorICAgIDEyNjQ5MCwgMTk5NDQsIDc0MzU2LCA5MDA5LCA4NTUxLCA5MjM0NSwgMTE0NjgsIDY0NjM2LCA3NTc1LCAwLCAyNzI0LCAKKyAgICAxMjg4OTksIDAsIDEyMzEzLCAxMTE1MSwgNTE1LCAxMTk5NDcsIDQyNzkxLCA2Mzk4NywgNzgyODYsIDExOTk0MywgCisgICAgMTE5OTQwLCAxMTk5NDEsIDExOTkzOCwgOTc3NSwgNDA0NiwgNDU4OSwgNDUyMSwgNjg2MjksIDkxNDEsIDkxNzkwNCwgCisgICAgNzg4NTAsIDI3NDEsIDY0Mzk5LCA2MTk3LCAxMzcwLCAwLCAxMjA4NDEsIDAsIDEyNTA2MiwgOTgzNDQxLCAxMjA4NDMsIAorICAgIDYxODQsIDg2MDYsIDMzMDMsIDQxMzcyLCAxMTc4NiwgOTQ3MywgNjYyMDMsIDY2MTc3LCA5MjQ0NiwgMTE1OTMsIDQzMDA3LCAKKyAgICA0NDc4LCA2NjE3OCwgMCwgMCwgMjc0NCwgMCwgNDQ3NywgNzgyNjcsIDgxNCwgNDIwNjYsIDY2MTgzLCA2NjIwNCwgNDM3ODYsIAorICAgIDExOTk2MSwgNjYxOTgsIDQxODgwLCA2NjE4OCwgMTE2MjMsIDc4MTQ4LCAxMTk1NSwgNjYxOTAsIDY2MTkxLCA0MTExMSwgCisgICAgNjYxODksIDczNzg4LCA3Nzg4LCA0ODQ3LCA5ODM0MjgsIDEyNzc1OSwgMCwgMTI4NDMzLCAyMjIxLCAxNTgxLCA2NTM1LCAKKyAgICA3ODE2MSwgMTI5NTQsIDQzMCwgNzgxNjAsIDU1MjU5LCA3Mzk0NCwgMTI4MDM2LCA1Mjc4LCA0OTQ1LCA0Mjg4MywgNDk1MCwgCisgICAgOTgzNDQwLCA2ODYyNSwgOTgzNDM4LCA3MjY5LCAxMjg0OTksIDU5NjQsIDEyOTA4LCAxMjQ5OTcsIDAsIDc0NzY0LCAKKyAgICA0MzUxMiwgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDk4MzQzMSwgNDQzLCA5ODM0MjksIDQ5NDQsIDU0NjcsIDExOTYwMywgCisgICAgNzA4NjUsIDY1MTM3LCA2MDQ0LCA2NTM5MiwgMCwgNDIxMywgMCwgNDEzMDMsIDkxNzU1NiwgMTk0OTMxLCAxMTk5NjIsIAorICAgIDQxMzA2LCA3Mzk4NCwgMjY5OCwgMTI3MTU5LCAwLCAxMjA3MiwgMzE5MywgMCwgNDEzMDQsIDgyNCwgMTI4Njc2LCAxMjA5MSwgCisgICAgNjcxMTgsIDc4ODk0LCAxMTk4MTYsIDQ2NzMsIDY0ODA0LCA0Njc4LCAxMTk4MjAsIDExOTgxOSwgNjUwNTksIDQzODYwLCAKKyAgICA2NzM5LCA2Njg0NCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCA2OTk0NywgNjc3MDIsIDQ2NzcsIDEyNjg4LCAKKyAgICAzMTAyLCAwLCA0NjcyLCA3ODE3MywgNzgxNzUsIDU1MzEsIDY4MzY3LCA0MjU3NSwgNzgxNzAsIDc4MTY2LCA0Njc0LCAKKyAgICA0NTQ4LCA0NDAwNSwgNzEwODcsIDY4NjU4LCAxMTk5NDYsIDgwMjUsIDY4NjMwLCAxMjcwMjQsIDE4NTUsIDEyNzQ3NSwgCisgICAgNjg2NjksIDExODk5MCwgOTI0NDUsIDEyNzU1NCwgMTI2NjMwLCAxMjczMzksIDExOTY1MiwgMjc0NSwgMTE3OTcsIAorICAgIDk4MzQxOSwgMTI4MTU5LCA5MjAyLCA0NjU0LCA2ODQwLCA5ODM0MTYsIDY4NjM4LCA3Mzk5MywgMTA1MjUsIDQ2NDksIAorICAgIDY1MjA5LCAxMjE1MTIsIDEyMTUxMSwgNDY0OCwgNDMwODAsIDc1MDcwLCAxMjE1MDcsIDk4MzQwNiwgNjI0NiwgNjQ5NTAsIAorICAgIDc4MjgsIDQ2NTAsIDY3NzcsIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDcwMjg3LCA3NDYyNCwgNDMxODcsIDg2NjksIAorICAgIDEyMDY1OSwgNjgyMSwgNjUwOTMsIDk4MzU2NSwgNzg4ODEsIDI3MTYsIDk4MzQxMiwgOTgzMDYwLCA3MDUwMywgMTk0OTUyLCAKKyAgICA2ODM2OSwgMTIwMDU0LCAxMTA2MCwgODU0NywgMjcxMSwgNDIxNjUsIDc4MDI3LCA3ODAyNiwgNjgzNiwgOTgzNDIzLCAwLCAKKyAgICA0NjYyLCA3ODAzMywgNzgwMzIsIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIDQ2NTYsIAorICAgIDEwMTMwLCA2ODQ1MCwgNzgxMSwgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgNTgxNCwgCisgICAgNDY2MSwgNDI0MzQsIDk4MzQxMywgMTI4NzM3LCAxMTE5MCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgCisgICAgNDg2NywgMTExMDAsIDEwMDA4LCAxMDIyMiwgMzA1NCwgMTk0OTU2LCA5NzQ0LCA3ODg2MCwgNzYwNSwgNDYyMiwgMTE5NjU2LCAKKyAgICA0Mzg4OCwgNzAzMDMsIDk4MzM5NSwgNjk5MDUsIDY3MTg4LCA5MDQ1LCA3ODg4OCwgNDIyNSwgMTk5MjYsIDY4ODMxLCAKKyAgICAxMjg4MCwgNjUzMDcsIDQ2MTcsIDY4NzU3LCA5ODMzODgsIDQxNzMyLCA0NjE2LCAxMDUxOCwgMTA0MjMsIDEwMzU5LCAKKyAgICA5ODMzODIsIDU5NTgsIDAsIDk4MzQzNSwgNDIxNSwgOTc4OSwgMTE5NjE5LCA0MzIxLCA0NjIxLCAxOTUwMjgsIDQxMzEzLCAKKyAgICA1MjIsIDUzNjgsIDExMTM5LCA2NTgwMywgMTI4NTQ2LCA1MzY2LCAxMjIwMSwgNTM3MiwgMTIxMDYwLCAxMTk5NDksIAorICAgIDE5NDk3NSwgNzcyMCwgNzM5MCwgMjY5NiwgOTgzNDAyLCAwLCA0NjM4LCA5ODM0MDcsIDE3OTAsIDc4MjQyLCA1OTY1LCAKKyAgICA2NDM2MywgNjY1NjksIDY4NjQ2LCA2ODQ3NywgNTM3NiwgMTgzNSwgNTMzNSwgMTIxNTA1LCAxMjgwODksIDQ2MzMsIDAsIAorICAgIDY4MTE5LCAxMTgwLCA0NjMyLCA2NzE5MSwgNTM4NywgNTMzMywgMCwgMTI1MTMyLCA0MjA5NCwgNTMzMSwgNDYzNCwgCisgICAgMTE5MjgsIDk4MzU5NCwgNTMzOCwgNDYzNywgMTI4MTcwLCA1OTcxLCA0MjQxNCwgNDM1MDAsIDEyNjgsIDY1MDk3LCAKKyAgICA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDEyODQ0MCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCA0NzU4LCAKKyAgICA5ODMzNzYsIDE2MDgsIDI3MzgsIDEyNTA2NiwgMTA0NTUsIDQ3NTMsIDc0MDI2LCAxMTM0NCwgNDIyMiwgNjI0MCwgNTIzMSwgCisgICAgNzQzODQsIDY2NjExLCA2ODM3NywgNjI0OCwgOTgzMzY0LCA2NzgxNSwgNzg4NzgsIDQyMzE4LCA5MjU4MiwgNTIyOSwgCisgICAgNDc1NywgMCwgMTI2NTc2LCAyNzI4LCA0NzUyLCA2NDU2MywgNjUyMzUsIDUyMzQsIDAsIDEyODE0NSwgMTI4OTI2LCAKKyAgICAxMDcxMywgNzE2NiwgMCwgMjYyMiwgNzQ2MCwgODMxMjQsIDY3MTAxLCAxMjY0OTUsIDg5NTQsIDc0NzYwLCA2NTE4OSwgCisgICAgMjYzMiwgNDI2MTcsIDEwMTA4LCAxMDExLCA1NTc0LCAxODUzLCAyNzA5LCA2NTEzOSwgNTU3NywgMTI4OTY2LCAwLCAKKyAgICAxMTg4NzEsIDY4NjQxLCA4OTY1LCA3NjM1LCA0MjE3NywgNTMxNiwgMCwgNTMxNCwgNjQ1MSwgNTU3MiwgNjY0NjQsIDUzMTIsIAorICAgIDAsIDU1MjUsIDUzMzAsIDUzMTksIDY4MjkyLCAxMjczMTEsIDY1MDY2LCA0NDAwMywgNjg0MzcsIDk4MzQ4MiwgNDM4NDMsIAorICAgIDEyMDQ5OCwgMTI3ODUxLCA0MzkxOCwgNzQ4NTEsIDc0MDIyLCA5ODM0MjQsIDY0NjA5LCA2ODY0MywgNjc0MTAsIDEyODU5MywgCisgICAgNTcyMSwgNzQ4OTIsIDU1MTksIDg2MzIsIDY2NDY1LCAxMTI2NywgNzM5NjEsIDkyMjc4LCA1NzIwLCA3ODc3OCwgMTY5MiwgCisgICAgNDIxOSwgNDYxMCwgODY5NiwgNDMwNSwgMCwgNDYwOSwgNDM0NzgsIDQ2MTQsIDU0MSwgOTgzMjQyLCA1Mjg3LCA1MzA5LCAKKyAgICA1Mjg1LCA2ODM4OSwgNTk2MSwgNDY0NywgNTYsIDQyMTYsIDEwNTc3LCA0MTM4MSwgNjAxLCA0NjEzLCAxMjA0NzksIAorICAgIDk4MzM0OCwgOTIwOCwgNDYwOCwgNDM5NjYsIDQxMTI0LCA1MTkwLCA2NzYyOCwgNjY4MjYsIDY4MTQ1LCA3MDg2LCAwLCAKKyAgICA2Nzk5OCwgNjc2MjAsIDkzMDQ3LCAyNzM0LCAxMTA3NCwgMCwgNjc2MjcsIDQzNTkzLCAwLCA2NzYyNSwgNTk2MCwgNjc3MjIsIAorICAgIDg5OTIsIDQyNTkzLCAxMjgyNjAsIDE3ODIsIDY3NjIyLCA2ODExNCwgMTE5OTM5LCAwLCA2ODE4MCwgNTUwMSwgMTE5OTUyLCAKKyAgICA0MjUwOCwgNzQ0MiwgNDM2NjUsIDM1OSwgNDEyNTMsIDY4MzkyLCA2MjM5LCA0MzkwMCwgNDEyNTYsIDc0MTMyLCA2Nzc0MCwgCisgICAgMCwgNzExNzgsIDkxNzU1MCwgOTM0NiwgNjk2NjAsIDQxMjU0LCAxMjgwNDcsIDQzMjkxLCAzNzY3LCA1NzM3LCAwLCA0ODY1LCAKKyAgICAwLCA1NzQwLCA5MTc5OTcsIDU3MzYsIDQzNjgsIDY0NzI0LCA3MTkzLCA2NzA5NywgMTI4ODQ0LCA1NzM5LCA0MTAyNCwgCisgICAgNDg2NiwgOTgzODgwLCA3MzkwNCwgMTIxNDIwLCA0ODY5LCAxMjA1NjMsIDEyOTE3MiwgNDIyMywgMTI4MjAxLCA2NjUwLCAKKyAgICAxMjY1MDksIDAsIDEyMDIxMiwgMTE5ODcyLCA0ODcwLCAxMjA0NDUsIDY4NjYxLCA2NzE2LCA3ODE3NiwgNjg2NjcsIAorICAgIDY4MzgyLCA2ODY3NiwgMTI3OTI1LCAxMDEyMiwgNDg2NCwgNjY1NjgsIDQxNDQsIDc5MzcsIDgzMTkzLCA2MjQ1LCA2ODY1MiwgCisgICAgMjczMiwgNDI3MzQsIDc0NSwgNjgwNDUsIDE5NTA5NywgOTIxOTUsIDQ3NzcsIDc4MjEsIDEyOTEzNiwgNjg2MzEsIDQyNzc1LCAKKyAgICAxOTQ2NjEsIDEyODQ0NSwgMTIwNjc5LCAzMDk3LCAxMjA5MDgsIDU5NjYsIDEyMTE5NywgNDc3OCwgMTI2NDY5LCAxMDg2MywgCisgICAgMTI3NTA2LCA0NzgxLCA5Mjk4NiwgNjQ0MDcsIDEyODUwMywgMTI4MzIzLCA4NTc3LCA3MTIyMSwgNjgxOTYsIDQzMjg1LCAKKyAgICAxMDIxNiwgNDc4MiwgOTgzNDg1LCA5ODM0MTEsIDEyMDc1NywgNjg2MTgsIDEyMzI1LCA0MzA1NiwgODcxNywgMCwgMCwgCisgICAgNDc3NiwgNzM4MTgsIDExNDkyLCA4NzAwLCAxMjkxMjgsIDEzMTc2LCA2ODM2MywgMTA0MjYsIDY3MjQ3LCA3MTA5MSwgCisgICAgMTAzNjIsIDE5NDcwNiwgMTcxNSwgNDg0OSwgODI0MiwgOTU2MSwgNzM5MjIsIDQzMjc4LCA0MjYzNSwgMCwgMTI3MjA3LCAKKyAgICA1OTYzLCA5MTc5MjYsIDk4MzQ4MywgMCwgNDg1MCwgNzM5MDAsIDE2MDcsIDQ2NiwgNDg1MywgMTE4OTk1LCA0ODU0LCAKKyAgICAxMjc5MTgsIDUxNjQsIDczODA3LCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgOTI0NzEsIAorICAgIDEyNDQ1LCAzNzg1LCAyMzQsIDMxOTksIDEyMTI3MywgNDEyNjgsIDQ4NDgsIDI1MzAsIDc0OTQxLCAyMDY4LCAxOTY0LCAwLCAKKyAgICA3Mzc2MiwgMTA0NTgsIDk4MzQxNywgODU3NiwgNzg1NDMsIDAsIDI3MDQsIDQ3OTQsIDEyMTEwMiwgNjgyMTEsIDgzMjIsIAorICAgIDQ3OTcsIDU3NTMsIDAsIDI2OTQsIDQ3OTIsIDAsIDI0MzksIDY1MTA0LCA2OTgwNCwgOTgzNDI2LCAzMDMsIDc0NjI1LCAKKyAgICA2ODIyOSwgOTgzNDI3LCAyNDM3LCA3ODY1OSwgNDIyMSwgNDg0NCwgOTIyMTYsIDAsIDAsIDAsIDcwMDQyLCA3NDA5NSwgCisgICAgNDMyOTIsIDAsIDI0NDEsIDEwNzM5LCA2NTA5MCwgMTk0NjIyLCA3MDQzNiwgMTE4OTI5LCAyNDUxLCAyNzE0LCAxMTkzMjYsIAorICAgIDAsIDQzMzc5LCA0OTM3LCA0MzM3NiwgNzUzLCA1ODQ5LCAxMDU5NywgNDMwODksIDExNzIyLCA5MjQ4LCA5MjU1NSwgCisgICAgNDI4NzksIDExNzI1LCA5MTc5NjksIDAsIDI3MjYsIDMxMDcsIDczOTU4LCA0OTQxLCA2NDkzNywgMTE5MjMzLCA5MTQwLCAKKyAgICAxNDA4LCA1MjYxLCA0NjA3LCAxOTQ3MTUsIDE4MSwgOTgzNDMyLCA0OTQyLCA5NTM5LCA0OTM4LCAwLCA2NTIwMSwgNTI1OSwgCisgICAgOTM2OSwgNjQxODUsIDQxNDIsIDUyNTcsIDk4MzYwMSwgNjg0NCwgNDk2NCwgNTI2NCwgNjQxNzgsIDY0MTc3LCAxMjk3OSwgCisgICAgNDE0MTEsIDY0MTgyLCA2NDE4MSwgNjQxODAsIDY0MTc5LCA5NDgyLCA0ODczLCA0MTIzMSwgMTgyMiwgNDI1MjYsIAorICAgIDEyNzk4OSwgMTI3NTgsIDM4NjUsIDE5NDY2MCwgMTIxMTI5LCAxMDUwMCwgMCwgMTE5MDI0LCA3ODAyOCwgOTI0MDgsIAorICAgIDk4MzAsIDQzNjQyLCAzODksIDEwODkzLCA3NTIxLCAxMjc4NzksIDQ4NzIsIDU0NjMsIDEyODExOSwgMzEyNSwgOTU2NywgMCwgCisgICAgNDg3OCwgNTQ1OSwgNDYwNCwgMTE5NjUwLCA5NTU3LCA1NDY1LCA2ODYxNywgMCwgMTE0OTQsIDEyNjQ5MiwgOTU2MywgCisgICAgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDY4NTIxLCA3ODcxNCwgNjQxOTEsIDY0MTkwLCA4ODk4LCA2NDE4OCwgCisgICAgMTI5MTUzLCA0MTAzMCwgNzQyMjYsIDc4NzEzLCA3NDYwMCwgNzQ5OTQsIDkxNzgzNCwgMCwgNzg4MDUsIDQxMDMxLCAKKyAgICA3ODgwMSwgMTE5NjAsIDY3NDUsIDMwODIsIDk4MzI2OSwgNzg1MzksIDczOTE5LCAxMDU3MywgNDE3NDQsIDcwNzksIDU4NTYsIAorICAgIDY3ODM4LCA1MTYzLCA3ODgwOSwgMTI4MTYyLCAxODE3LCA2NjcyNCwgNzg1MzgsIDExOTAxMCwgMTA1NjQsIDc3NjMsIAorICAgIDEzMDc3LCA0MTgxMywgNDQwMCwgNDE3NDUsIDY0MjA3LCAxMDI3NSwgODkyNSwgMTAzNzEsIDEwMzA3LCA0MTgxNCwgNDI0OCwgCisgICAgNzc5NzksIDAsIDQ1NDEsIDYyOTksIDY0MjA0LCA2NDIwMywgNjQyMDEsIDY0MjAwLCA2NDE5OSwgNjQxOTgsIDEyNjQ3MSwgCiAgICAgNDIxNTYsIDc4Njg4LCAwLCA2NDE5MywgNjQxOTIsIDY1MjIzLCA5OTQzLCA2NDE5NywgNjQxOTYsIDY0MTk1LCA2NDE5NCwgCi0gICAgMTMyODIsIDY0MTc1LCA2NDE3NCwgNjQxNzMsIDc4MTg5LCA4NDYsIDc4MTg2LCA5OTY1LCAwLCAwLCAwLCAwLCAyNTQzLCAKLSAgICAxMjE2MywgMzEwOCwgOTc0NSwgNjQxNjcsIDY0MTY2LCA2NDE2NSwgNjQxNjQsIDIxMTAsIDkyMTc2LCA2NDE2OSwgNjQxNjgsIAotICAgIDY0OTQ5LCAxMDk3MiwgMTAyNTEsIDEwMjQ3LCA0Mjc2OCwgNzE1LCAyMjk1LCA0MzI5OSwgOTQ1MywgNTM0OCwgMTA5NDMsIAotICAgIDEyMDM3OCwgMCwgMTEzNTIsIDU1MCwgOTkxMCwgMTI2NzA1LCAwLCA2NjU3OSwgMTE1NTEsIDAsIDE5NTA4MCwgOTUwNCwgCi0gICAgNzE4NywgMCwgMTAzNzMsIDAsIDEyMDc5MSwgMTAyNjEsIDEwMjUzLCA2NDA0LCAxMDI3NywgNzgxODMsIDExOTg0LCAxNTUyLCAKLSAgICA2NTIyMiwgNjk5OCwgNzgxODAsIDAsIDMxMjgsIDQ3ODksIDUwNjcsIDUwNjYsIDExODg0OSwgNDc4NCwgMCwgODgyNywgCi0gICAgMTE0NiwgNTA2NSwgNjk4OTAsIDc4MTkyLCA2ODEzNiwgNzgxOTAsIDQzNDEyLCA1MDY0LCAyNDMxLCAwLCA5NDUwLCAxODA5LCAKLSAgICAwLCA3ODIwMCwgNzgyMDEsIDUwNjIsIDEyNjQsIDY0ODE3LCAxMzI1NCwgMTE2OTcsIDEyNjU5OCwgOTc4NSwgNjQ3MTYsIDAsIAotICAgIDM5MzMsIDc0NTU5LCA0NzQwLCA3OTU0LCAwLCAwLCA0MjYwOSwgMCwgNzQxNzUsIDAsIDEyNzAxNiwgMCwgOTgzODczLCAKLSAgICA0MjEzMCwgMCwgNTE1MSwgOTE3ODI5LCA5MTc4MjMsIDAsIDkzOTgwLCAwLCA3NjIwLCAzODAwLCA2NTEyMiwgMCwgMCwgCi0gICAgODM1NSwgNzg1NCwgMCwgOTU0LCA2NDkyNywgNDE4NSwgNDEwNDUsIDEyNzE0MSwgNDE0MzgsIDQxNDM5LCA2ODY2NiwgCi0gICAgMTA3MTEsIDQ1OTMsIDEyNzc0NSwgMTIwNTg0LCA5ODM0MDgsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDAsIDAsIDAsIAotICAgIDY0NzU5LCA2MzgxLCA1MTY2LCA5ODg4LCAxMjc4MDAsIDUxNDgsIDQyODM0LCAwLCA3ODIwNSwgNzgyMDYsIDQzNzg3LCAKLSAgICA3ODIwNCwgNjQxMzEsIDMxMTksIDkxNzgxNCwgMCwgMzA2MCwgNjQxMzUsIDk5ODYsIDAsIDc3ODc2LCA2MzYsIDExNjk4LCAKLSAgICAwLCA5ODM0NTEsIDk5MTYsIDExNzAxLCA3ODM2LCA0Mjc0MSwgNjQxMzcsIDgzMjAsIDc4NjQwLCA4ODYzLCA5MjQzMSwgCi0gICAgMTE5OTYwLCAxNDc3LCA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDk4MzQwMiwgOTkwOCwgOTgzOTgxLCAwLCAwLCAzOTM3LCAKLSAgICAxMjMxMiwgMCwgOTgzNDAzLCAwLCA2NDc4MSwgOTEyLCA2MzQ5LCA0NTM2LCA5Mzk1NCwgNzQ1MzIsIDEyNjU5NCwgNjI0NCwgCi0gICAgOTIyMDksIDcxMzQxLCAzOTM1LCAxMjA2NjUsIDk4MzQ3NiwgMCwgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgNjg2NTYsIAotICAgIDUzOTcsIDAsIDEyMDQ2LCAxMjU5OSwgMCwgMTI4MjYxLCA1Mzk1LCAwLCA1MzkzLCAzNTQsIDY4NjE1LCAxMTk5NDgsIAotICAgIDc4NTAzLCAwLCAwLCA0MjAzOSwgMCwgMCwgNjQxNDIsIDYyNiwgMCwgNTg5NSwgMCwgMCwgNTc4MCwgMCwgMCwgMTI4ODc0LCAKLSAgICAwLCAwLCA0MzI5NywgOTgzMDc5LCA0MzExLCA0NjQ0LCA4ODE4LCAwLCAxMjgxODYsIDAsIDcxNDUsIDM5MTgsIDY2NDUyLCAKLSAgICAzNzk3LCAxNjQ0LCA5MjM0NiwgOTY1OCwgNDE0MCwgMTEzODUsIDY1OTQ3LCA2NDU1LCA5MDMwLCA4MTMsIDExOTk0NSwgCi0gICAgNjgxMzEsIDQxNDYsIDExOTk1NywgNTM2MCwgMjQ2NiwgMCwgNjc2NjksIDExOTk0MiwgNjI0OSwgNDIxMTcsIDkyMjg3LCAKLSAgICAxMjgyMjQsIDAsIDAsIDc0MDQ2LCA0Mzc0NSwgNDkxMSwgOTg4LCA5MTc4MDcsIDAsIDk4MzQ2OCwgNDMwNjEsIDcwNTQsIAotICAgIDY0MTQ3LCAwLCA2NDkyMCwgNjgxOTUsIDY2OTgsIDExODkzMywgOTI1MDYsIDAsIDEyMDAwNiwgMTE5ODEsIDEyMjAyLCAwLCAKLSAgICAxMTAzMiwgNjc2NTQsIDYwOTMsIDExNjA4LCA5NzUsIDY4NjYyLCA2NTg0MywgMTcwLCAwLCAwLCA0MTY5LCAwLCA0MTg1OSwgCi0gICAgNjA1OCwgMTIwNDAxLCAxMzIwMywgMTIwNjU3LCAwLCAwLCA2ODY1NywgOTgxOCwgMTAxNzgsIDEwMzI0LCA0MjEwNiwgCi0gICAgNTg5OCwgNzQ1NDAsIDQ3MzgsIDQxODU2LCA3MDYyLCA5MTc4NjUsIDQ3MzcsIDExNzc5LCA0NzQyLCAxMjA1NjQsIDkyMzkxLCAKLSAgICA3MzczNiwgOTgzMzY0LCA5ODI1LCA2NDQ4LCA2NzE1LCAxMjcwMDgsIDQ4MzEsIDAsIDkyNTI1LCAwLCA1MzAwLCA0NzQxLCAKLSAgICA0MjEwOCwgOTgzMzU0LCA2NDE1OSwgNDczNiwgNjQxNDgsIDAsIDg0OSwgOTIxOTEsIDc4NDkxLCA0MzI4OCwgMCwgNjY2MjAsIAotICAgIDkxNzkxNiwgMTI3MzMxLCA2NTU0OSwgOTQ5NiwgNjQ1OTgsIDExODg2NiwgOTgzMzY2LCA3ODc2LCA2ODEzMiwgOTE3ODcyLCAKLSAgICAzOTI4LCA5MTc4NzAsIDQzMzc4LCAxMDcwNiwgNzE5OCwgMCwgNDg0MiwgMTIwNTMsIDEyODEyOSwgMCwgNDg0MSwgMCwgCi0gICAgNDE3MSwgMTIwMDgsIDYyNTEsIDM5MjMsIDE0OTAsIDAsIDExOTU5MSwgMTI2NTEyLCA0MDk3MiwgNTI0NSwgMCwgMTAxMTQsIAotICAgIDQyMDAxLCA0MTg4OCwgNDg0NSwgODMzMiwgNDA5NzQsIDY0MzQ3LCA0ODQwLCA5MDc3LCA3ODM0NiwgMTc0NywgOTE3ODQ5LCAKLSAgICA0ODI1LCA2OTI0MCwgOTE3ODUyLCA2ODY1NSwgMCwgOTgzMzg4LCAwLCAwLCA2ODYyOCwgOTgzMzQ3LCA5ODUwLCAxMTg5MzcsIAotICAgIDM2NywgMTQ3MiwgOTE3ODU5LCA2Njg3LCAxMjc0LCAwLCA1OTA1LCAxMjMzOSwgODkxOSwgNzM5NTMsIDEwOTA3LCA2NTI2MSwgCi0gICAgMTEwMjMsIDExOTU1OSwgNDgzMCwgOTEzNCwgNzg2NjYsIDY0MTI2LCA0MzAxMSwgMCwgMTI2NjI2LCA2NDEwMSwgMCwgMCwgCi0gICAgNDgyNCwgMTA2MTQsIDExOTY1OSwgMCwgMTg4OCwgMTk2MCwgNzg2MSwgOTE3ODU2LCA3ODUyNCwgNDE4MzYsIDQzMDEyLCAKLSAgICA2MDUyLCA2MDY0LCA1NCwgNDMwMDksIDEyMjE0LCAwLCA2MjExLCAwLCAzNTgsIDQxOTk3LCA0MTgzMywgMTE0NDIsIAotICAgIDEwNzU4LCA2NTc3NCwgMCwgMTIwMzg0LCA2NDExNSwgOTIyMjEsIDcwMDE4LCAwLCAwLCAxMTkwNTMsIDAsIDEyNzY1LCAKLSAgICA2NDExOCwgMTI2OTk4LCAxMjk2MiwgMCwgMTI2NTgwLCA0MDE3LCAxMjgyNywgNTI0MSwgMTIwMzkyLCAwLCA0MTExOCwgCi0gICAgMzkyNCwgMCwgMTEzNjYsIDkxNzg0MywgMCwgMCwgOTE3ODQ2LCA0MTExNiwgOTE3ODQ0LCA5MTc1NjQsIDAsIDExMzYzLCAKLSAgICAxMjA1NywgMTE5MTcsIDE1NjcsIDc0MDAwLCA0NzIxLCAxMjY2NDEsIDY2MjAyLCA4OTU3LCA0MTM5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjc0MCwgMTI4NzAyLCA0NzIyLCA2ODE2LCAxMjc3OTMsIDEyNzU5LCA0NzI1LCA5ODMzODMsIDQ3MjYsIDAsIAotICAgIDE5NDg5MiwgOTgzNjIyLCAxMjgzMjEsIDkxNzkwNSwgMCwgMTI3NTUsIDEyNzYyLCA0MDE1LCAwLCA4MDUyLCA0NzYsIDAsIAotICAgIDAsIDEyODI5NCwgNjQyMTIsIDQxMDIwLCAxMzgyLCA2NDIwOSwgNjQyMTYsIDQ0MDAyLCA2NDIxNCwgMTY1NiwgNDE4MzEsIAotICAgIDAsIDAsIDQxODQzLCA4NzIwLCAzOTA4LCAxNDUyLCAxMzExMSwgMCwgNjQwNjcsIDEyNzMyOCwgODU1MiwgNjQxMTMsIAotICAgIDQxODQ1LCAzODQ5LCA3ODczMiwgNjYyMzIsIDk3NzgsIDEyMDA2NiwgNTg5MSwgNzA2NCwgNTUsIDk5NDgsIDExOTA4NSwgMCwgCi0gICAgMCwgNzkzNSwgMjQyMCwgMCwgMTExNCwgOTI1OTksIDY3NTg1LCA3MDEwNCwgMTIwMDUzLCA5MjM1MCwgMTIwMDUxLCAzOTM4LCAKLSAgICAxMjAwNTcsIDY1NDE3LCA2NDcxNywgMTIwMDYwLCAxMjAwNjEsIDY1NDE1LCAxMjAwNTksIDYyOTIsIDY1MzAzLCA3OTU1LCAKLSAgICA2NDUyLCA0NzEzLCAxMjgxOTYsIDY2MjQ5LCA5MTc4ODUsIDkxNzg5MCwgOTE3ODkxLCA2NTE1MiwgNzE5LCAxMjAwNDQsIAotICAgIDc4NjIzLCAxMjAwNDIsIDY3MTMsIDQ1MzIsIDY1NDEyLCA2OTgyMiwgMTA4NjgsIDQ3MTcsIDIzNDksIDU5MDIsIDY2NDUwLCAKLSAgICA0NzEyLCA5MTc5MDIsIDkxNzg5OSwgOTE3OTAwLCA2NTQxNiwgODE1NSwgNDcxOCwgMzk0MiwgNDcxNCwgOTYyNSwgMCwgCi0gICAgNjM4MywgMTk0NzQ0LCAxMjAwNiwgMTI4NTY1LCAwLCAwLCAwLCAwLCA2NTQxNCwgNjQ1NCwgMTIyOSwgMTI2NjA2LCAKLSAgICA2NjQzNywgNjYwMjUsIDc4Njk5LCAwLCA0MjUwMCwgMTIwNTA4LCA0ODA5LCA5NjIzLCA5MTc4NzQsIDc4Njk0LCA5MTc4ODAsIAotICAgIDkxNzg3NywgOTE3ODc4LCA2NTQwNSwgNjgxNTksIDEyODkzLCA5MTc4ODIsIDUzNjUsIDQ1NDUsIDg5MDEsIDkyNDIxLCAKLSAgICAxMTk1NTUsIDQ4MTMsIDEyODI2MiwgMCwgNTkyNSwgNDgwOCwgNjQzMzAsIDAsIDY1NDc1LCAxMTg5NDAsIDE5NTAyOCwgCi0gICAgNDgxNCwgMCwgNDgxMCwgMCwgMCwgNjQ5MjgsIDEwNTQzLCAwLCAzNTIyLCA3MTMzNSwgNDE0LCA2NTQwNCwgMCwgMTk1MDI3LCAKLSAgICA2NDU2LCA3MzgyMCwgMCwgNjY5MSwgNDIxOTMsIDkyMjI1LCAxMjgxNzEsIDAsIDc0NDk1LCAwLCAwLCAwLCAxMTg4MjAsIAotICAgIDk3NTEsIDY1NDA3LCAxMjgwODUsIDExNzcwLCAzOTE5LCAwLCAwLCA2NTA2MSwgMCwgMCwgMCwgMTIyMzUsIDAsIDAsIAotICAgIDEyNzIzMywgNjQwOTIsIDk4MzQ3MCwgNjQwODAsIDAsIDY0MDkwLCAwLCA2OTkxMywgMTAxNjIsIDEwMzEwLCAwLCA4NDU0LCAKLSAgICAxMjc4ODgsIDQyMDM4LCAzODcsIDQxMzYzLCAxMjczNywgMCwgNDc4MCwgNDMzNjgsIDAsIDY0MzEwLCA2NDYyMSwgNjczMiwgCi0gICAgNzgxMTYsIDAsIDk4MzEzOSwgMCwgOTgzMDc0LCA4ODk2LCAwLCAzNzUsIDY5NzYsIDY2NTgyLCAxMTkwMDUsIDk4Mzg3NCwgCi0gICAgMCwgOTgzNDM0LCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIAotICAgIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgNjk2OTIsIDk4MzQzMiwgNjk2OTgsIDEzMTUwLCA2NDQ5MiwgMCwgMCwgCi0gICAgMjI5MSwgMTI5MDIsIDAsIDQyODkxLCA2NjMyNywgNzQyOTgsIDkxNzg1NywgMTA3OTksIDY5NjkwLCAyNTg3LCA2NjM3MiwgCi0gICAgMCwgNDE5MywgOTIyNTAsIDQyNDEsIDk4MzA1NywgNzk5OCwgMCwgMCwgMCwgMTI2NjQwLCAyMzE2LCAxMTg4MjEsIDAsIDAsIAotICAgIDAsIDY0Mjk3LCA3NDc5OSwgOTI0NDIsIDc0MTQwLCAwLCA1MzczLCAwLCA5ODM4ODYsIDM3NjIsIDEwMDE1LCAxMjA2NzIsIAotICAgIDExOTIzMiwgMCwgNDE1OTAsIDAsIDcwMDk4LCAzNzgwLCA3NDg1LCA1Nzc5LCAwLCA0MjAzNywgMCwgMzkwNiwgMTIzNDksIAotICAgIDAsIDgzMjYsIDAsIDY1NDk4LCAzNzYzLCA2OTgzLCA1NjE4LCAwLCAzNzc5LCAwLCA0MzYxMywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjgwLCA3NDU1OCwgMTI3MzMyLCA2ODEzOCwgMTMwNzIsIDE4OTQsIDAsIDAsIDY1NDc4LCA0MzMxMCwgNzIzMSwgMCwgCi0gICAgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIDY0NTMsIDEwMjAwLCA2MjM1LCA5ODM3NTIsIDExOTIzNywgMCwgMTI4ODA1LCAKLSAgICA0NDcwLCAxMTgyNiwgOTE3NTU3LCA3NzgwLCA1MzY5LCAxMTg5NTgsIDUyNDksIDAsIDUzNjcsIDg3NTYsIDEyNzE0MywgMCwgCi0gICAgNTM3NywgMTIwNTg1LCA2ODE0MywgMTY4OCwgNzgyNDUsIDk4MzM1NiwgNjk2ODUsIDk4Mzc1NiwgMCwgMCwgNDQwMjAsIAotICAgIDY4MDgsIDQxMzE5LCAxMzAwLCAxMDY1MCwgNDE2OTIsIDY0NTA1LCAyMjkwLCAwLCAxMTk2MjQsIDE0NjUsIDEwODUwLCAKLSAgICAzOTQzLCAwLCA0MTIwNSwgNDEzMTUsIDExODk2MSwgMCwgMCwgNTM1MiwgMCwgMCwgODgzOSwgNDEzMTQsIDczODQsIDc3ODUsIAotICAgIDQxMjA0LCAxMjczMjIsIDQxMjA5LCA2OTYzNywgOTIyNDEsIDQzNjA3LCAwLCAwLCA1NDIwLCAzODk3LCAxMDEzNCwgMCwgCi0gICAgNzQ0MTcsIDQwMTgsIDcxNTAsIDY4MTI3LCAwLCAwLCAwLCAwLCAxMjc1MjYsIDI1NjEsIDY4NjIxLCAzNTQyLCA3MTQ4LCAKLSAgICAxMjA3NiwgNzk1MSwgNjgxNTIsIDExODg1NywgNTMwMywgNjI3NiwgMTcwNiwgMCwgNzg3NTEsIDcxNDYsIDAsIDY1MTUwLCAKLSAgICA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgOTgzNDM1LCA2OTY0MSwgMTA3NTMsIAotICAgIDEwODMwLCAwLCA2MTUsIDY0NDkwLCA3NTc0LCA5MjYxNywgNzc5MjIsIDAsIDEyOTA5LCA0MzAxNiwgNjQ1NTksIDEyNzAyOCwgCi0gICAgMCwgMCwgNjc5OTYsIDIwMjAsIDAsIDQwMjIsIDEyODc4MywgMCwgNzc5MjMsIDEyNjU5MywgNDE2OTEsIDAsIDAsIDc0MzI5LCAKLSAgICAwLCA2NDYyMiwgOTA3MCwgMCwgNjg0MTEsIDM5MTEsIDQyODI5LCA0MzEyMiwgMTAzMywgNzQ0NDAsIDAsIDcwMDAsIDM5MDQsIAotICAgIDAsIDEyODE5OCwgMCwgMTE4OTMxLCAxMTk2MzAsIDEzMTIzLCAxMDg0NiwgMzQ1MCwgMTI3MzYwLCA3Mzk3LCAxMTg4MDcsIAotICAgIDAsIDQyNzc4LCAxMDAwMCwgNDEwODgsIDQ0OSwgMCwgMzc3NywgNjg0NTgsIDAsIDk2MzYsIDAsIDEwNzM4LCA2OTYzNCwgCi0gICAgOTM2NywgNTkzLCA0MTA4NSwgMzk5OSwgNjUyMjYsIDQxNzEzLCAxMjc2NCwgMCwgNjQ0MDksIDM1OTYsIDAsIDAsIDk3NjMsIAotICAgIDEyMDI4MCwgOTIxOTIsIDEyMzQ3LCAxMjQsIDEyOTgxLCA0MTEyNywgMjA5MiwgOTI2ODcsIDAsIDAsIDAsIDEwODIwLCAKLSAgICA0Mzk4NywgMCwgMCwgMTc2OSwgNDE3MTUsIDI0NjMsIDc4NDg5LCAwLCAxMjc3MCwgMTI2NTAwLCAxNTM4LCAwLCA0MzEyNCwgCi0gICAgMCwgMTk1MDU4LCA3Nzk1LCAxMjAzMDAsIDAsIDQ4MjgsIDEyNTgsIDEyNzgwMiwgMjAwNiwgMCwgMCwgOTQ5OCwgMTI3MDMyLCAKKyAgICAxMjIzMSwgNDI2NTIsIDY0MTc0LCA2NDE3MywgNzgxODksIDg0NiwgNzgxODYsIDk5NjUsIDc0NDk1LCA4MzQ5MiwgODM0OTMsIAorICAgIDgzNDk0LCAyNTQzLCAxMjE2MywgMzEwOCwgOTc0NSwgNjQxNjcsIDY0MTY2LCA2NDE2NSwgNjQxNjQsIDIxMTAsIDkyMTc2LCAKKyAgICA2NDE2OSwgNjQxNjgsIDY0OTQ5LCAxMDk3MiwgMTAyNTEsIDEwMjQ3LCA0Mjc2OCwgNzE1LCAyMjk1LCA0MzI5OSwgOTQ1MywgCisgICAgNTM0OCwgMTA5NDMsIDY2MzkwLCAwLCAxMTM1MiwgNTUwLCA5OTEwLCAxMjUxMjcsIDAsIDY2NTc5LCAxMTU1MSwgMTI4NDY0LCAKKyAgICAxOTUwODAsIDk1MDQsIDcxODcsIDgyOTU3LCAxMDM3MywgOTgzNDE4LCAxMjAzNzUsIDEwMjYxLCAxMDI1MywgNjQwNCwgCisgICAgMTAyNzcsIDc4MTgzLCAxMTk4NCwgMTU1MiwgNjUyMjIsIDY5OTgsIDc4MTgwLCA3MTQyOSwgMzEyOCwgNDc4OSwgNTA2NywgCisgICAgNTA2NiwgMTE4ODQ5LCA0Nzg0LCAwLCA4ODI3LCAxMTQ2LCA1MDY1LCA2OTg5MCwgNzgxOTIsIDY4MTM2LCA3ODE5MCwgCisgICAgNDM0MTIsIDUwNjQsIDI0MzEsIDAsIDk0NTAsIDE4MDksIDAsIDc4MjAwLCA3ODIwMSwgNTA2MiwgMTI2NCwgNjQ4MTcsIAorICAgIDEzMjU0LCAxMTY5NywgMTI2NTk4LCA5Nzg1LCA2NDcxNiwgMCwgMzkzMywgNzQ1NTksIDQ3NDAsIDc5NTQsIDAsIDEyNTAyMywgCisgICAgNDI2MDksIDExOTg1NSwgNzQxNzUsIDY2OTEyLCAxMjcwMTYsIDAsIDEyMTMwMCwgNDIxMzAsIDEyMTA0NiwgNTE1MSwgCisgICAgMTIxMzQ2LCA4MzQ4OCwgMCwgOTM5ODAsIDkxNzgwMiwgNzYyMCwgMzgwMCwgNjUxMjIsIDgzNDg3LCA4MzQ4MCwgODM1NSwgCisgICAgNzg1NCwgODM0ODMsIDk1NCwgNjQ5MjcsIDQxODUsIDQxMDQ1LCAxMjcxNDEsIDQxNDM4LCA0MTQzOSwgNjg2NjYsIDEwNzExLCAKKyAgICA0NTkzLCA4Mjk5MywgMTIwNTg0LCA5ODM0MTAsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDk4MzQxNCwgMCwgNzg2NDIsIAorICAgIDY0NzU5LCAxMzI1LCA1MTY2LCA5ODg4LCAxMjc4MDAsIDUxNDgsIDQyODM0LCAwLCA3ODIwNSwgNzgyMDYsIDQzNzg3LCAKKyAgICA3ODIwNCwgNDM5MTMsIDMxMTksIDkxNzgxNCwgMCwgMzA2MCwgNjQxMzUsIDk5ODYsIDc0OTk2LCA3Nzg3NiwgNjM2LCAKKyAgICAxMTY5OCwgODM0NzYsIDgyOTYxLCA5OTE2LCAxMTcwMSwgNzgzNiwgNDI3NDEsIDY0MTM3LCA4MzIwLCA3ODY0MCwgODg2MywgCisgICAgNzAyMDEsIDExOTk2MCwgMTQ3NywgNDMyODksIDY4NDkyLCA2NzE2NCwgODYxOCwgOTgzNDA0LCA5OTA4LCA3NDk3MiwgMCwgCisgICAgMCwgMzkzNywgMTIzMTIsIDAsIDk4MzQwNSwgMCwgNjQ3ODEsIDkxMiwgNjM0OSwgNDUzNiwgOTM5NTQsIDc0NTMyLCAKKyAgICAxMjY1OTQsIDYyNDQsIDkyMjA5LCA3MTM0MSwgMzkzNSwgMTIwNjY1LCAxMjg5NjksIDAsIDExOTUwLCA1MzkyLCA0MjI0OCwgCisgICAgNjUxMjksIDY4NjU2LCA1Mzk3LCAxMjgzMTAsIDEyMDQ2LCAxMjU5OSwgNjc0MDcsIDEyODI2MSwgNTM5NSwgMCwgNTM5MywgCisgICAgMzU0LCA2ODYxNSwgNzc4NTMsIDc0MzY2LCAxMjE0MDQsIDAsIDQyMDM5LCAxMTM4MTcsIDAsIDY0MTQyLCA2MjYsIDAsIAorICAgIDU4OTUsIDAsIDQzOTEwLCA1NzgwLCAwLCAxMDIyMCwgMTIxMzM3LCA0MzkwNywgNzExMjEsIDQzMjk3LCA3MDE4OCwgNDMxMSwgCisgICAgNDY0NCwgODgxOCwgNzgxNTgsIDEyODE4NiwgMTI4ODY5LCA3MTQ1LCAzOTE4LCA2NjQ1MiwgMzc5NywgMTY0NCwgOTIzNDYsIAorICAgIDk2NTgsIDQxNDAsIDExMzg1LCA2NTk0NywgNjQ1NSwgOTAzMCwgODEzLCAxMTk5NDUsIDY4MTMxLCA0MTQ2LCAxMTk5NTcsIAorICAgIDUzNjAsIDI0NjYsIDAsIDY3NjY5LCA5NDAyMCwgNjI0OSwgNDIxMTcsIDY4ODI4LCA5MjIwNiwgMTI4MDIzLCAxMTkyNTUsIAorICAgIDc0MDQ2LCA0Mzc0NSwgNDkxMSwgOTg4LCA3MTE4MCwgMCwgOTgzNDcwLCA0MzA2MSwgNzA1NCwgNjQxNDcsIDk4Mzg0NywgCisgICAgNjQ5MjAsIDY4MTk1LCA2Njk4LCAxMTg5MzMsIDkyNTA2LCAwLCA3MDg0OSwgMTE5ODEsIDEyMjAyLCAxOTUwODcsIDExMDMyLCAKKyAgICA2NzY1NCwgNjA5MywgMTE2MDgsIDk3NSwgNjY0MTUsIDY1ODQzLCAxNzAsIDAsIDY3MjM5LCA0MTY5LCAwLCA0MTg1OSwgCisgICAgNjA1OCwgMTIwNDAxLCAxMzIwMywgMTIwNjU3LCA3MDUwNywgMTI1MDkxLCA2ODY1NywgOTgxOCwgMTAxNzgsIDEwMzI0LCAKKyAgICA0MjEwNiwgNTg5OCwgNzQ1NDAsIDQ3MzgsIDQxODU2LCA3MDYyLCAxMjcxMjAsIDQ3MzcsIDExNzc5LCA0NzQyLCA4MzQyNSwgCisgICAgNjg3NTgsIDY4MzQyLCA4MzQyMCwgOTgyNSwgNjQ0OCwgNjcxNSwgMTI3MDA4LCA0ODMxLCA4MzQxOCwgODM0MTksIDY3NzMxLCAKKyAgICA1MzAwLCA0NzQxLCA0MjEwOCwgMTI3MDU3LCA2NDE1OSwgNDczNiwgNjQxNDgsIDkyNjM0LCA4NDksIDkyMTkxLCA3ODQ5MSwgCisgICAgNDMyODgsIDAsIDY2NjIwLCAxMjc1MzMsIDEyNzMzMSwgNjU1NDksIDk0OTYsIDY0NTk4LCAxMTg4NjYsIDk4MzM2OCwgCisgICAgNzg3NiwgNjgxMzIsIDY2MjgwLCAzOTI4LCA5MTc4NzAsIDQzMzc4LCAxMDcwNiwgNzE5OCwgMTIwODkwLCA0ODQyLCAKKyAgICAxMjA1MywgMTI4MTI5LCA2ODc0NiwgNDg0MSwgMCwgNDE3MSwgMTIwMDgsIDYyNTEsIDM5MjMsIDE0OTAsIDgzNDExLCAKKyAgICA4MzQxMiwgMTI2NTEyLCA0MDk3MiwgNTI0NSwgNzA3OTQsIDEwMTE0LCA0MjAwMSwgNDE4ODgsIDQ4NDUsIDgzMzIsIAorICAgIDQwOTc0LCA2NDM0NywgNDg0MCwgOTA3NywgNzgzNDYsIDE3NDcsIDkxNzg0OSwgNDgyNSwgNjkyNDAsIDEyMTQ0MywgCisgICAgNjg2NTUsIDAsIDk4MzM5MCwgMCwgMCwgNjg2MjgsIDk4MzM0OSwgOTg1MCwgMTE4OTM3LCAzNjcsIDE0NzIsIDkxNzg1OSwgCisgICAgNjY4NywgMTI3NCwgMTk1MDIyLCA1OTA1LCAxMjMzOSwgODkxOSwgNzM5NTMsIDEwOTA3LCA2NTI2MSwgMTEwMjMsIAorICAgIDExOTU1OSwgNDgzMCwgOTEzNCwgNzg2NjYsIDY0MTI2LCA0MzAxMSwgODMyOTcsIDc4NjY5LCA2NDEwMSwgMCwgMTI4NDM0LCAKKyAgICA0ODI0LCAxMDYxNCwgMTE5NjU5LCAxMjY5OTMsIDE4ODgsIDE5NjAsIDc4NjEsIDgzNDE2LCA3ODUyNCwgNDE4MzYsIAorICAgIDQzMDEyLCA2MDUyLCA2MDY0LCA1NCwgNDMwMDksIDEyMjE0LCA4MzI2MCwgNjIxMSwgMTIwMzg2LCAzNTgsIDQxOTk3LCAKKyAgICA0MTgzMywgMTE0NDIsIDEwNzU4LCA2NTc3NCwgMTEzODIzLCAxMjAzODQsIDY0MTE1LCA5MjIyMSwgNzAwMTgsIDk4MzYxMSwgCisgICAgOTgzNzA4LCAxMTkwNTMsIDAsIDEyNzY1LCA2NDExOCwgMTI2OTk4LCAxMjk2MiwgMCwgMTI2NTgwLCA0MDE3LCAxMjgyNywgCisgICAgNTI0MSwgMTIwMzkyLCAwLCA0MTExOCwgMzkyNCwgOTgzODk0LCAxMTM2NiwgMTI5MDg0LCAwLCAwLCA4MzQwMSwgNDExMTYsIAorICAgIDgzNDAzLCA4MzQwNCwgODMzOTcsIDExMzYzLCAxMjA1NywgMTE5MTcsIDE1NjcsIDc0MDAwLCA0NzIxLCA4MzM5NiwgCisgICAgNjYyMDIsIDg5NTcsIDQxMzksIDcwNTEyLCAwLCA5ODMwNzQsIDAsIDAsIDEyNzQwLCAxMjE0NzAsIDQ3MjIsIDY4MTYsIAorICAgIDEyNDk3NCwgMTI3NTksIDQ3MjUsIDY3MDk5LCA0NzI2LCA4MzQ2NywgODM0NjgsIDk4MzYyMiwgNzAwMjksIDgzNDYzLCAKKyAgICA3NDkxMywgMTI3NTUsIDEyNzYyLCA0MDE1LCA2NzY5MCwgODA1MiwgNDc2LCAwLCA3NDg5MywgMTI4Mjk0LCA2NDIxMiwgCisgICAgNDEwMjAsIDEzODIsIDY0MjA5LCA2NDIxNiwgNDQwMDIsIDY0MjE0LCAxNjU2LCA0MTgzMSwgMTI3NTUzLCAxMjUxMjEsIAorICAgIDQxODQzLCA4NzIwLCAzOTA4LCAxNDUyLCAxMzExMSwgOTgzNDIxLCA2NDA2NywgOTIyODcsIDg1NTIsIDY0MTEzLCA0MTg0NSwgCisgICAgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDgzMzAyLCAKKyAgICA5MTc2MTAsIDc5MzUsIDI0MjAsIDAsIDExMTQsIDc4MTIwLCA2NzU4NSwgNzAxMDQsIDcwNDMyLCA4MzQ0NywgNzQ5MjAsIAorICAgIDM5MzgsIDEyMDA1NywgNjU0MTcsIDY0NzE3LCAxMjAwNjAsIDcxOTIwLCA2NTQxNSwgNjY4ODQsIDYyOTIsIDY1MzAzLCAKKyAgICA3OTU1LCA2NDUyLCA0NzEzLCAxMjgxOTYsIDY2MjQ5LCA5MTc4ODUsIDE5NDc2NiwgMTI5MDczLCA2NTE1MiwgNzE5LCAKKyAgICAxMjAwNDQsIDc4NjIzLCAxMjAwNDIsIDY3MTMsIDQ1MzIsIDY1NDEyLCA2OTgyMiwgMTA4NjgsIDQ3MTcsIDIzNDksIDU5MDIsIAorICAgIDY2NDUwLCA0NzEyLCA3NTA1NSwgOTE3ODk5LCA2NTQwMCwgNjU0MTYsIDgxNTUsIDQ3MTgsIDM5NDIsIDQ3MTQsIDk2MjUsIAorICAgIDAsIDYzODMsIDE5NDc0NCwgMTIwMDYsIDEyODU2NSwgMTk0Nzg5LCAwLCAxMTM3NTYsIDAsIDY1NDE0LCA2NDU0LCAxMjI5LCAKKyAgICA4MzQ1NywgNjY0MzcsIDY2MDI1LCA3ODY5OSwgODM0NTIsIDQyNTAwLCAxMjA1MDgsIDQ4MDksIDk2MjMsIDEyOTEzNywgCisgICAgNzg2OTQsIDEyMTE3MywgMTI4Nzc3LCA5MTc4NTgsIDY1NDA1LCA2ODE1OSwgMTI4OTMsIDc4NjE3LCA1MzY1LCA0NTQ1LCAKKyAgICA4OTAxLCA5MjQyMSwgMTE5NTU1LCA0ODEzLCAxMjgyNjIsIDE5NDcyOSwgNTkyNSwgNDgwOCwgNjQzMzAsIDEyODQwMCwgCisgICAgNjU0NzUsIDgzNDMyLCA2ODI0NCwgNDgxNCwgODM0MjcsIDQ4MTAsIDgzNDI5LCA4MzQzMCwgNjQ5MjgsIDEwNTQzLCAKKyAgICA3MTI0OSwgMzUyMiwgNzEzMzUsIDQxNCwgNjU0MDQsIDAsIDgzNDQyLCA2NDU2LCA3MzgyMCwgODM0NDUsIDY2OTEsIAorICAgIDQyMTkzLCA2NjI4NCwgODM0NDEsIDAsIDY4MzM3LCAwLCA0Mzg1OCwgNDM4MzIsIDExODgyMCwgOTc1MSwgNjU0MDcsIAorICAgIDEyODA4NSwgMTE3NzAsIDM5MTksIDEyMDcyNCwgMCwgNjUwNjEsIDk4Mzk0NSwgOTE3ODk0LCAxMjkxNDIsIDEyMjM1LCAKKyAgICAxMjg1NzIsIDkyNzAxLCAxMjEwODcsIDY0MDkyLCA2ODczOSwgNjQwODAsIDEyOTA2MywgNjQwOTAsIDk4MzU4NiwgNjk5MTMsIAorICAgIDEwMTYyLCAxMDMxMCwgMTIxMjEwLCA4NDU0LCAxMjEzODcsIDQyMDM4LCAzODcsIDQxMzYzLCAxMjczNywgMCwgNDc4MCwgCisgICAgNDMzNjgsIDAsIDY0MzEwLCA2NDYyMSwgNjczMiwgNzgxMTYsIDAsIDEyMTI5NSwgMTk1MDI0LCA5MjE5MywgODg5NiwgMCwgCisgICAgMzc1LCA2OTc2LCA2NjU4MiwgMTE5MDA1LCA3NDk5NywgMTI3MzI1LCA5ODM0MzYsIDExOTIwMiwgMTE5MjAzLCAxMjUyNiwgCisgICAgNDMxMjAsIDIzMTUsIDAsIDE5MzgsIDExOTE5NywgMTI4NDUyLCA0NTI5LCAxMTkyMDAsIDExOTIwMSwgMTE5MTk4LCAKKyAgICAxMTkxOTksIDY5NjkyLCAxMjkxMjQsIDY5Njk4LCAxMzE1MCwgNjQ0OTIsIDEyODk3NCwgNzg3NjEsIDIyOTEsIDEyOTAyLCAKKyAgICAwLCA0Mjg5MSwgNjYzMjcsIDcwNTAyLCA5MTc4NTcsIDEwNzk5LCA2OTY5MCwgMjU4NywgNjYzNzIsIDEyODYyOCwgNDE5MywgCisgICAgNjY4MjMsIDQyNDEsIDEyOTE5NSwgNzk5OCwgODMyNzYsIDAsIDEyNzAwOSwgMTI2NjQwLCAyMzE2LCAxMTg4MjEsIDAsIAorICAgIDk4MzkzNCwgMCwgNjQyOTcsIDc0Nzk5LCA5MjQ0MiwgNzQxNDAsIDEyODE0OCwgNTM3MywgMTI4Nzk4LCA3MDM3MCwgMzc2MiwgCisgICAgMTAwMTUsIDEyMDY3MiwgMTE5MjMyLCAxMjUxMDksIDQxNTkwLCAwLCA3MDA5OCwgMzc4MCwgNzQ4NSwgNTc3OSwgOTE3ODk4LCAKKyAgICA0MjAzNywgMCwgMzkwNiwgMTIzNDksIDc0NzkzLCA4MzI2LCAxMjczMzMsIDY1NDk4LCAzNzYzLCA2OTgzLCA1NjE4LCAwLCAKKyAgICAzNzc5LCA5ODMxOTQsIDQzNjEzLCA3MDEzMiwgMCwgODMyODgsIDc4MzM1LCA4MzI4OSwgMCwgMjgwLCA3NDU1OCwgCisgICAgMTIxMzUzLCA2NzM5NiwgMTMwNzIsIDE4OTQsIDgzMjkxLCA2NzczNSwgNjU0NzgsIDQzMzEwLCA3MjMxLCAwLCAxMTc3MywgCisgICAgMCwgMTE5MTY1LCAxMTE0NCwgOTE3Nzc4LCAyNTUxLCAwLCA2NDUzLCAxMDIwMCwgNjIzNSwgOTgzNzUyLCAxMTkyMzcsIAorICAgIDcxODc3LCAxMjg2NjksIDQ0NzAsIDExODI2LCA5MTc1NTcsIDc3ODAsIDUzNjksIDExODk1OCwgNTI0OSwgOTgzMDY2LCAKKyAgICA1MzY3LCA4NzU2LCAxMjcxNDMsIDExOTE4MywgNTM3NywgMTIwNTg1LCA2ODE0MywgMTY4OCwgNzgyNDUsIDUyMTgsIAorICAgIDY5Njg1LCA5ODM3NTYsIDAsIDExMzc5NCwgNDQwMjAsIDY4MDgsIDQxMzE5LCAxMzAwLCAxMDY1MCwgNDE2OTIsIDY0NTA1LCAKKyAgICAyMjkwLCA3MTA1NywgMTE5NjI0LCAxNDY1LCAxMDg1MCwgMzk0MywgMCwgNDEyMDUsIDQxMzE1LCAxMTg5NjEsIDExOTMzMywgCisgICAgNjcxNDgsIDUzNTIsIDExMzc1MywgMCwgODgzOSwgNDEzMTQsIDczODQsIDc3ODUsIDQxMjA0LCAxMjczMjIsIDQxMjA5LCAKKyAgICA2OTYzNywgOTIyNDEsIDQzNjA3LCA3MTI1NCwgMCwgNTQyMCwgMzg5NywgMTAxMzQsIDEyMDM4MSwgNzQ0MTcsIDQwMTgsIAorICAgIDcxNTAsIDY4MTI3LCA3MTQyNSwgMCwgMTIxNDI3LCAxMjc4NjQsIDEyNzUyNiwgMjU2MSwgNjg2MjEsIDM1NDIsIDcxNDgsIAorICAgIDEyMDc2LCA3OTUxLCA2ODE1MiwgMTE4ODU3LCA1MzAzLCA2Mjc2LCAxNzA2LCAxMjA3NTAsIDc4NzUxLCA3MTQ2LCAKKyAgICA5ODM2ODIsIDY1MTUwLCA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgCisgICAgOTgzNDM3LCA2OTY0MSwgMTA3NTMsIDEwODMwLCAxMTkzMzksIDYxNSwgNjQ0OTAsIDc1NzQsIDc0MDgyLCA3NzkyMiwgMCwgCisgICAgMTI5MDksIDQzMDE2LCA2NDU1OSwgMTI3MDI4LCAwLCAxMjEyMzEsIDY3OTk2LCAyMDIwLCAxMjg3OTAsIDQwMjIsIAorICAgIDEyODc4MywgMTIwNzAxLCA3NzkyMywgMTI2NTkzLCA0MTY5MSwgMCwgNzUwNjAsIDc0MzI5LCAwLCA2NDYyMiwgOTA3MCwgMCwgCisgICAgNjg0MTEsIDM5MTEsIDQyODI5LCA0MzEyMiwgMTAzMywgNzQ0NDAsIDk4MzgxMywgNzAwMCwgMzkwNCwgOTgzNjI4LCAKKyAgICA3MzczNywgMTI1MTA1LCAxMTg5MzEsIDExOTYzMCwgMTMxMjMsIDEwODQ2LCAzNDUwLCAxMjczNjAsIDczOTcsIDExODgwNywgCisgICAgOTE3ODkxLCA0Mjc3OCwgMTAwMDAsIDQxMDg4LCA0NDksIDAsIDM3NzcsIDY4NDU4LCAxMTM3MjUsIDk2MzYsIDAsIDEwNzM4LCAKKyAgICA2OTYzNCwgOTM2NywgNTkzLCA0MTA4NSwgMzk5OSwgNjUyMjYsIDQxNzEzLCAxMjc2NCwgOTgzNzIzLCA2NDQwOSwgMzU5NiwgCisgICAgMTI5MDQ0LCAxMjgwOTAsIDk3NjMsIDEyMDI4MCwgNzQ2MDksIDEyMzQ3LCAxMjQsIDEyOTgxLCA0MTEyNywgMjA5MiwgCisgICAgOTI2ODcsIDAsIDEyNzU1NSwgMTk0NjMyLCAxMDgyMCwgNDM5ODcsIDAsIDEyODkwNywgMTc2OSwgNDE3MTUsIDI0NjMsIAorICAgIDcxMjE0LCA4MzA3MCwgMTI3NzAsIDcxMjIyLCAxNTM4LCA5MjYxNywgNDMxMjQsIDE5NDYxNCwgMTk1MDU4LCA3Nzk1LCAKKyAgICAxMjAzMDAsIDEyOTA1MywgNDgyOCwgMTI1OCwgMTI3ODAyLCAyMDA2LCAwLCAxMjExMzAsIDk0OTgsIDEyNzAzMiwgCiAgICAgMTI3MDMzLCAxMjAyODksIDEyMDI4OCwgMzkzOSwgMTIwMjkwLCA4ODQ2LCA4OTQzLCAxMjAyODcsIDEyMDI4NiwgMjY1MCwgCi0gICAgNDQ5MSwgMTk2MSwgNDI2MDIsIDExNTI1LCAxMjAyOTIsIDE5NTksIDEyMDI5NCwgNTUyMjgsIDExNzc0LCA0MTAxNiwgMCwgCi0gICAgNjg2NzUsIDEyODA1NCwgMTUxMSwgOTMyNCwgNzgyMTEsIDEwNTE5LCA2NjMzMSwgMzQ1NCwgMTk5MzAsIDAsIDQxMDE5LCAwLCAKLSAgICAwLCA2NTI5MiwgNjgyMiwgMTI4NjIsIDAsIDAsIDQyMTQzLCA0MTgyOCwgNzgyMDcsIDY1NTMxLCA3ODIwOCwgMTE4ODc5LCAKLSAgICA1NTIyMywgMCwgMTI4MDcxLCA0MTgyNiwgODg2NSwgNjQwMiwgMCwgMTMyNzksIDc5MTcsIDc0NzU1LCAwLCA3NzMzLCAwLCAKLSAgICA0OTk4LCA5ODM4OTYsIDkyMzMyLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgNzAwNjEsIDQwMTMsIDAsIDEwODgxLCAwLCAwLCAKLSAgICAwLCA3NDc4OCwgMjAxNCwgMCwgMCwgOTc2NSwgMCwgMCwgMCwgMTk1MDU5LCA3ODM1NywgNjUyODEsIDEyNzgyNSwgMTA5NDksIAotICAgIDAsIDAsIDAsIDIwMTUsIDAsIDAsIDAsIDY2MzE4LCA0MzIzMywgMCwgNDI1MTcsIDAsIDAsIDAsIDEyNjk4LCA4MDk0LCAKLSAgICAxMDEzNSwgNjU5MDksIDY0NzQsIDc5NCwgMCwgMTI2NTYsIDEyODEyMiwgMTE5MzUzLCAxMjgyNzAsIDE2NjUsIDAsIDQ4MzMsIAotICAgIDk4MzA1MywgMTE5MzUxLCAxMjczNjcsIDAsIDE4OSwgMTI2MTEsIDAsIDAsIDI4NTksIDQ4MzgsIDAsIDQ4MzQsIDY1MDc4LCAKLSAgICAwLCAwLCA0ODM3LCAxMjcwNjEsIDc3MCwgMCwgODExLCAwLCA0MTA0MiwgOTE3NTUxLCA0MTMxOCwgNjQ0MjcsIDAsIAotICAgIDEyODIwOCwgNzg4NDgsIDM4OTUsIDAsIDc0MzQxLCAzOTc2LCAwLCA0Mjg1OSwgMTAxOTMsIDMxMTYsIDc3NDcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQzNjg2LCA3ODg0NiwgNDE4NzcsIDAsIDI4NzEsIDY0NjE0LCAxMjg3ODUsIDk5OSwgMCwgNjM0NSwgCi0gICAgNDE4NzYsIDI2NjMsIDIwMTcsIDAsIDAsIDExMDQwLCAxMDE1MCwgMCwgNjQzMDgsIDE1MjIsIDU5NywgNDc3NSwgMTI1NTUsIAotICAgIDEyNTcxLCAxMjU1MCwgMTI1ODMsIDEyNTYwLCAyMDE5LCAxMjU1NiwgMTI1ODQsIDMwOTIsIDAsIDEyNTYyLCA0NzgzLCAKLSAgICAxMjU2NiwgMTI1NjksIDEyNTU0LCAwLCAxMDgxMiwgNzg4NTEsIDAsIDAsIDMwNzgsIDE0MDIsIDAsIDEyODI3NSwgMCwgMCwgCi0gICAgMTE5MjQ4LCAzOTQsIDMwODgsIDAsIDkyMTcyLCAwLCAzOTkxLCA2NDM5MSwgMCwgMTI4NTI0LCA0MjQsIDY2MzI4LCAxOTk5LCAKLSAgICA2OTY1OSwgNzM5MTQsIDAsIDAsIDAsIDAsIDQyMjMxLCA4MjQ2LCAwLCAwLCAwLCA0MTg0MCwgOTgzNjA5LCAyMzc3LCAKKyAgICA0NDkxLCAxOTYxLCA0MjYwMiwgMTE1MjUsIDEyMDI5MiwgMTk1OSwgMTIwMjk0LCA1NTIyOCwgMTE3NzQsIDQxMDE2LCAKKyAgICA5ODMyNjIsIDY4Njc1LCAxMjgwNTQsIDE1MTEsIDkzMjQsIDc4MjExLCAxMDUxOSwgNjYzMzEsIDM0NTQsIDE5OTMwLCAwLCAKKyAgICA0MTAxOSwgMTI3OTQ0LCAwLCA2NTI5MiwgNjgyMiwgMTI4NjIsIDAsIDAsIDQyMTQzLCA0MTgyOCwgNzgyMDcsIDY1NTMxLCAKKyAgICA3MDg2NCwgMTE4ODc5LCA1NTIyMywgMCwgMTI4MDcxLCA0MTgyNiwgODg2NSwgNjQwMiwgMTEzODI3LCAxMzI3OSwgNzkxNywgCisgICAgNzQ3NTUsIDkxNzk0OCwgNzczMywgOTgzNDA4LCA0OTk4LCA2ODQ5MywgOTIzMzIsIDQxOTUwLCAwLCA0MjY4LCAxOTQ3OTAsIAorICAgIDE5NTA1NiwgNzAwNjEsIDQwMTMsIDEyODcxOCwgMTA4ODEsIDAsIDk4MzE2MywgMCwgNzQ3ODgsIDIwMTQsIDI0MzIsIAorICAgIDcxOTAxLCA5NzY1LCAxOTUwNTIsIDAsIDkxNzg1NCwgMTk1MDU5LCA3ODM1NywgNjUyODEsIDEyNzgyNSwgMTA5NDksIDAsIAorICAgIDAsIDExOTMxNSwgMjAxNSwgMTIxMDg4LCA5Mjc2NSwgNzE4NDAsIDY2MzE4LCA0MzIzMywgOTE3OTkyLCA0MjUxNywgCisgICAgNjgwNjAsIDAsIDAsIDEyNjk4LCA4MDk0LCAxMDEzNSwgNjU5MDksIDY0NzQsIDc5NCwgNDM0OTcsIDEyNjU2LCA2NjMzNSwgCisgICAgMTE5MzUzLCA2NzI3OSwgMTY2NSwgNzE4NTMsIDQ4MzMsIDkxNzk4NSwgNzExODgsIDEyNzM2NywgMTIxNDY0LCAxODksIAorICAgIDEyNjExLCAwLCA5ODM0MjAsIDI4NTksIDQ4MzgsIDk4MzkzMCwgNDgzNCwgNjUwNzgsIDAsIDkyOTkxLCA0ODM3LCA2NzQxMywgCisgICAgNzcwLCA5MjY3MSwgODExLCA3MDA2MiwgNDEwNDIsIDgzMDczLCA0MTMxOCwgNjQ0MjcsIDczOTk5LCA2NzY5MywgNzg4NDgsIAorICAgIDM4OTUsIDkyNjE1LCA3NDM0MSwgMzk3NiwgMTI4NDY2LCA0Mjg1OSwgMTAxOTMsIDMxMTYsIDc3NDcsIDc4NDg4LCAwLCAKKyAgICA0MzQ5NiwgMCwgMTIxMDE1LCA0MzY4NiwgNzg4NDYsIDQxODc3LCA5ODM3NDMsIDI4NzEsIDY0NjE0LCA2ODg0MywgOTk5LCAKKyAgICA5ODM4NDQsIDYzNDUsIDQxODc2LCAyNjYzLCAyMDE3LCAxMjEyMzQsIDY3ODI0LCAxMTA0MCwgMTAxNTAsIDEyMDY3OCwgCisgICAgNjQzMDgsIDE1MjIsIDU5NywgNDc3NSwgMTI1NTUsIDEyNTcxLCAxMjU1MCwgMTI1ODMsIDEyNTYwLCAyMDE5LCAxMjU1NiwgCisgICAgMTI1ODQsIDMwOTIsIDAsIDEyNTYyLCA0NzgzLCAxMjU2NiwgMTI1NjksIDEyNTU0LCA4MzM0NCwgMTA4MTIsIDc4ODUxLCAwLCAKKyAgICA4MzM0MiwgMzA3OCwgMTQwMiwgMCwgODMzNDgsIDAsIDEyNTA3MiwgMTE5MjQ4LCAzOTQsIDMwODgsIDgzMzQ3LCA5MjE3MiwgCisgICAgOTE3OTY1LCAzOTkxLCA2NDM5MSwgODMzNDEsIDEyODUyNCwgNDI0LCA2NjMyOCwgMTk5OSwgNjk2NTksIDczOTE0LCAwLCAKKyAgICAxMjc1MzQsIDY2OTAzLCAxMjg0NjgsIDQyMjMxLCAyMjA5LCAxMjUxMDMsIDAsIDAsIDQxODQwLCA2NjkxMywgMjM3NywgCiAgICAgMTI5OCwgNjQwMTEsIDEyNTcyLCAxMTMxOCwgMTI1NTcsIDEyNTU5LCAxMjU3MCwgNzQ3OSwgMTAwMywgMjM3MywgOTQ0NiwgCi0gICAgNzQ4MSwgOTQ0OCwgNDgsIDAsIDk0ODAsIDQ4MSwgMCwgOTQzOCwgOTQzOSwgOTQ0MCwgOTQ0MSwgODQ2NSwgOTQ0MywgCi0gICAgOTQ0NCwgOTQ0NSwgOTQzMCwgOTQzMSwgOTQzMiwgOTQzMywgOTQzNCwgOTQzNSwgMzk4NCwgOTQzNywgMCwgMCwgOTQyNCwgCi0gICAgOTQyNSwgOTQyNiwgOTQyNywgOTQyOCwgOTQyOSwgNjQ3NTgsIDIzNjIsIDk2NTUsIDAsIDIwMDQsIDkwOTYsIDk3ODIsIAotICAgIDEyODg0OCwgOTE3MiwgMTI4NTQ1LCAxOTk2NSwgMCwgNTk1NSwgNjc2NjYsIDExMDgsIDAsIDc0NzczLCAwLCAwLCA2NDc4MiwgCi0gICAgMzkyNiwgOTI0NDgsIDY1MjEwLCA4Nzk4LCAwLCA5MjE2NSwgMTM5MiwgMCwgMCwgMTI3MzY0LCAxMDYwNiwgODA2NSwgCi0gICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCA5MjQxOCwgNDAxOSwgMCwgOTgzMjg4LCA0MzI4MCwgODIxOSwgCi0gICAgNjg0MDIsIDE4MTIsIDExOTk2MywgOTgzNjkyLCAwLCAxMjY0ODgsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCA2MDU0LCAKLSAgICAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgMzkwOSwgOTk1MCwgMCwgMTI4MTM5LCA5ODMyNjEsIDY4Njc4LCAKLSAgICAwLCAwLCAxMDQ5LCAwLCA2NTcwNywgMjMwNCwgNDE4MDYsIDkyMzI2LCA0MjMzNiwgMzkyMSwgMCwgMTE3NzUsIDY0NzYwLCAKKyAgICA3NDgxLCA5NDQ4LCA0OCwgOTgzMDg0LCA5NDgwLCA0ODEsIDAsIDk0MzgsIDk0MzksIDk0NDAsIDk0NDEsIDg0NjUsIDk0NDMsIAorICAgIDk0NDQsIDk0NDUsIDk0MzAsIDk0MzEsIDk0MzIsIDk0MzMsIDk0MzQsIDk0MzUsIDM5ODQsIDk0MzcsIDEyOTEzNSwgCisgICAgOTI5MzQsIDk0MjQsIDk0MjUsIDk0MjYsIDk0MjcsIDk0MjgsIDk0MjksIDY0NzU4LCAyMzYyLCA5NjU1LCAxMjgwNTAsIAorICAgIDIwMDQsIDkwOTYsIDk3ODIsIDcwODQyLCA5MTcyLCA4MzA3MSwgMTk5NjUsIDAsIDU5NTUsIDY3NjY2LCAxMTA4LCAwLCAKKyAgICA3NDc3MywgNzgyNzEsIDEyODkwOSwgNjQ3ODIsIDM5MjYsIDkyNDQ4LCA2NTIxMCwgODc5OCwgMCwgOTIxNjUsIDEzOTIsIAorICAgIDk4MzgxNywgMTIwODM4LCAxMjczNjQsIDEwNjA2LCA4MDY1LCAxMTg4MDUsIDEwMzUzLCAxMDQxNywgMTI3MjM4LCAKKyAgICAxMjg3MzksIDY0NTI0LCA5MjQxOCwgNDAxOSwgMCwgMTI1MDgyLCA0MzI4MCwgODIxOSwgNjg0MDIsIDE4MTIsIDExOTk2MywgCisgICAgMTIxMDY3LCAxMjg0MzAsIDEyMDkzOSwgNDI0MTAsIDc0NDQ4LCAxMTkxMzIsIDYwNTQsIDEwNjk3LCAzMTY5LCA0MjI5NywgCisgICAgNDIzMjIsIDEwNjQyLCAzOTA5LCA5OTUwLCAxMjg4NDgsIDEyODEzOSwgOTgzMjYzLCA2ODY3OCwgNzQ5ODYsIDk4Mzc5MCwgCisgICAgMTA0OSwgNDM1MTcsIDY1NzA3LCAyMzA0LCA0MTgwNiwgOTIzMjYsIDQyMzM2LCAzOTIxLCAwLCAxMTc3NSwgNjQ3NjAsIAogICAgIDExNzY2LCAxMDM4LCA0MjMwMywgOTgyMywgMTI3Mjc4LCA2OTIzNiwgNDAwOCwgNjQwMDQsIDg3NzMsIDEwNzMzLCAzNiwgMCwgCi0gICAgNTE1MywgNDE4MDUsIDAsIDczNzM1LCA3NjMsIDQxODA4LCA2NDkxMCwgOTgzMTMwLCAyMDA5LCAwLCAwLCAxMjcxNDIsIAotICAgIDk2NDAsIDExOTk1MSwgMCwgMTIwNjk1LCA4NjIxLCAxMjA1MjMsIDEyODUyLCAzMDMxLCA5ODMwNTAsIDY0MzYxLCAwLCAKLSAgICAxODIsIDE5NDcxOCwgOTI3MTYsIDkyNTk4LCAxMTk5NTAsIDQyNjEzLCA5MDU4LCAzNjYsIDAsIDk4OTIsIDU5NjksIAotICAgIDExNzU0LCAxMDg0OCwgNDU3MCwgNjUzMDEsIDQ0MDEzLCA0MjU1LCAxMjc4ODksIDEwMTAyLCA0MTE4OSwgNDAwMywgCi0gICAgNDEwMjYsIDY4MTA5LCAxMzI5MywgNDExOTIsIDY5NjM1LCAwLCA0MjI1MSwgMCwgNDI1MzQsIDY1MTc5LCAxMTI4NywgCi0gICAgNjEyOCwgMCwgMTEwMzQsIDEwOTIzLCA2NDQyMywgMCwgNjU1MDYsIDAsIDY1ODYxLCA3NDA4MywgOTI2MDAsIDk5MzIsIDAsIAotICAgIDkyNDIzLCAxMTk5NTUsIDAsIDk4MTcsIDAsIDEyMDE0MCwgMCwgMTIxMTcsIDY2NTg2LCA0MTgzLCAxMDU0MCwgNjYyNTAsIAotICAgIDkwNjMsIDEyNzA0NSwgMCwgMTE5OTU0LCAwLCAxMjg5NywgMzc5MiwgMjAxMSwgMCwgNjA2NSwgNDMxNjAsIDAsIDE5NDcxNSwgCi0gICAgODY5MiwgNDExODYsIDQxODE2LCA0MTAyMywgNDE4MTgsIDQxMTg3LCAxMTY1OSwgNzkyMiwgMTI2MTQsIDIwMDUsIDg1MjMsIAotICAgIDc4MDAyLCAwLCA3NTEzLCAxODYzLCA0NzEwLCAwLCA1OTU2LCA3NjIxLCA3ODAwNiwgOTI2MjQsIDQ3MDUsIDcxNiwgCi0gICAgNzgwMDQsIDAsIDQ3MDQsIDEyMDA0MCwgMTIwMjcwLCA0MjI0MSwgMTYxLCA0Mzk3NywgNzQ1NDYsIDY2MjE0LCA0NzA2LCAwLCAKLSAgICA2OTkxNCwgNDI2NzIsIDQ3MDksIDEwNjgwLCAxMTkwNjUsIDQzMjkzLCAxMTk5NDQsIDAsIDExOTE2NCwgMTIwMzI4LCAKLSAgICA5MjQ2NywgMTAxODcsIDE3MDAsIDExOTIyMywgMCwgMCwgMTI4MTE5LCA0MDA0LCAwLCAxMDk2OCwgNDMyOTYsIDk4MzY0MiwgCi0gICAgODUwNiwgMCwgMCwgMTI2OTk2LCAxMDA1LCA5MzcsIDc4MjE2LCA0NzM0LCAyODcwLCAwLCA3ODIxOCwgOTgzMTA5LCA3NDYzLCAKLSAgICA0NzI5LCAwLCAyMzUsIDEzODQsIDQ3MjgsIDAsIDEyMDQyMCwgOTI0OTAsIDc0NDQ5LCA4MTA5LCA0MzEwNSwgOTgzMTc0LCAKLSAgICA0NzMwLCA0NDcsIDEzMTg2LCAxNTEzLCA0NzMzLCAxMjA0MTUsIDAsIDAsIDQyNTI3LCAxMjkxMSwgNDM0MjcsIDEzODMsIAotICAgIDg1NjUsIDI0NjksIDEyMDAyNCwgNjY5MCwgNjE1NiwgNjgxMTcsIDQzNDM5LCA3OTkzLCA0Mjg4LCAxMjA0MTYsIDI2NzQsIAotICAgIDEzMjM4LCAxMTkyMiwgMCwgMTIwMzMwLCAzNTEwLCAxMzIzNCwgMCwgMTIwNDA3LCA1NjA1LCA0MjA5NSwgMTEzNjQsIDAsIAotICAgIDEzODAsIDY1NjE3LCAxMjAyNTMsIDEyMDI2MSwgMTMxOTYsIDEzMTk3LCAxMjAzMDksIDEyMDY4MiwgOTQ5NSwgMTE5MzQ2LCAKLSAgICAwLCA1OTU5LCA2Nzk4NCwgNzM5NzYsIDEyMDMwNSwgNDMzNzEsIDY5NDEsIDExOTM0OSwgMTMyMDUsIDEzMjExLCA1ODAxLCAKLSAgICAxMjc2OSwgNjU5MDUsIDQxNjk3LCAxMjgzLCAxMjAzMDIsIDQ3NzksIDAsIDM3MTksIDQwMDYsIDk4MzU2OSwgMTk5NTcsIAotICAgIDEyODc3MywgMjAyMSwgMTE5MzMyLCAxMjA2OTksIDExOTE1MCwgNDMwMjgsIDY1NDkzLCA0MTgzOCwgMzg3NSwgNTk2MiwgCi0gICAgNjQzNDEsIDkyNjE2LCA5ODE0LCA0MzQ1NywgNTgyNywgMzMxNCwgNzc4NywgNzgyMzQsIDY1NDk0LCA2ODE1MywgMCwgMCwgCi0gICAgMTIwNjM2LCA2NDUzMSwgMTIwNjkyLCAxOTQ2MjYsIDAsIDAsIDY2MzE2LCA2NTQ2NywgNTc3MSwgNDEyOTgsIDk4Mzc5NCwgCi0gICAgOTc0MiwgNTIxLCAwLCAxMDgwMCwgOTIyMjIsIDg0MDQsIDE5NDYyNSwgNDgzLCA3MDk2LCA3MDg5LCA2NjMyMywgOTI4LCAwLCAKLSAgICAwLCAxMTkwMTgsIDEwNTk5LCAxMTU4NiwgMzk4OSwgMTA5NzEsIDQzNzQ4LCA2NTc4MiwgOTg0MSwgODg0MywgMTIxNDUsIAotICAgIDkyNDcwLCAxMDA3NCwgNzg1NDgsIDAsIDM3NjksIDAsIDAsIDAsIDk4MzEwNywgOTU3MywgMCwgNjUyOTAsIDg4NDksIDAsIAotICAgIDY1ODU1LCA2NTExMiwgMTc5NiwgMTIwNTA1LCAwLCA2OTY2NSwgODE2NCwgNDEzMDEsIDM1MDIsIDAsIDczODgsIDEwNjIxLCAKLSAgICA3MzgzOCwgNzg1NTMsIDU4MjUsIDEzMDA3LCA2ODE2NSwgMCwgMTIwNDU3LCAxMjY2MSwgNzYwOCwgMTAzNTQsIDEwNDE4LCAKLSAgICA0MjQxMSwgMjAyMiwgMCwgMTQwOSwgMTIxOTUsIDQwMDEsIDMxMTIsIDEwODI0LCAxMjA2MzksIDEzOTAsIDAsIDAsIDQyMSwgCi0gICAgNDM1MzYsIDU4NDYsIDEyMDEyMCwgNDEzMCwgMTI3Nzc1LCA3NTk1LCA0MjU4OCwgNzYwMCwgMTIwMTIxLCA2NjAzNSwgCi0gICAgOTgzOTEzLCAwLCA2NTg1MSwgNDI2MDcsIDEyODE5MCwgOTI0MDMsIDMxNjgsIDAsIDQyMTM0LCAxMTgzMSwgMjM3MCwgCi0gICAgMjg0NiwgOTI2MDUsIDAsIDAsIDEyMDEzMiwgMCwgMTgzNiwgMCwgMCwgOTI1NTgsIDM3NDAsIDY5ODQzLCA2MjkwLCAKLSAgICA2NTM3NCwgMTIwNDUxLCAyMzkwLCAzOTQ0LCA2NjYyOCwgMTIwNDM0LCAwLCA2MTM1LCAzMTE4LCA3NDI2NSwgMTE5MDkzLCAKLSAgICAxMjA0NDYsIDAsIDAsIDgxMjcsIDg5NzUsIDY0NzM5LCA3OTQzLCA5ODM3NDMsIDAsIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCAKLSAgICA5OTk4LCAxMjg1NjQsIDAsIDAsIDAsIDAsIDYyMDQsIDAsIDAsIDgyNzksIDg3NzYsIDY0OTU0LCA0OTc1LCA3MDA3NSwgCi0gICAgMTIwMTMwLCA0MjY3LCAxNjMxLCA0MjIwNiwgNzc5ODMsIDAsIDE5NTA0NiwgNjU3MDAsIDY2NTYyLCAwLCA2NDY0NSwgMCwgCi0gICAgMCwgMTI2NTg4LCAxMjU4NiwgMCwgOTI0MiwgMTI3OTIyLCAwLCA0NTIzLCA1ODQyLCAxMDQ5NSwgMzEyMiwgOTgzNzk3LCAKLSAgICA3NzkzLCA3ODI3NSwgOTMyOCwgMTE5MTA0LCA3ODM5MywgMTI2MDQsIDAsIDY2MTUsIDIyODUsIDkyMzQ0LCAzOTg2LCAKLSAgICA0NDAyNSwgMCwgODkxMiwgNjQ1NTUsIDc0MDksIDAsIDk4MzM1OCwgOTU0MSwgNzgyNzYsIDAsIDExMjc1LCA4NTQwLCAKLSAgICAxMTQ5OCwgMCwgOTgzMzU3LCA0MTA0MCwgMjQ1OSwgMCwgMTMwNjAsIDQxMDQxLCA3NDQxMywgOTgzMTM4LCAwLCAwLCAKLSAgICA2ODQyNywgMTA0NTAsIDEyNTUxLCA0MTA0MywgNzAyMCwgMTIwMzUzLCAzNzY1LCA5ODMzNTAsIDAsIDE2MDYsIDEyMDM0OCwgCi0gICAgMTIwMzUxLCAzMDkzLCA2ODQzNiwgMCwgOTgzMDYxLCAxMTk2MTMsIDAsIDAsIDQzMTIsIDc0MDkxLCAxMjAzMzcsIAotICAgIDEyMDMzNiwgMTE5MjMsIDQwMjMsIDEyMDMzMywgNTc2MywgOTQwMTUsIDQ4MjcsIDEwODk0LCAxMjgxMCwgNjQ0MDYsIAotICAgIDExODc4NSwgNDQ1NSwgNzQzMjEsIDQzMywgMTE5NjIwLCA2NjY2MCwgMjQ5OSwgMCwgMCwgMTE4ODM3LCAxMTk3MywgCi0gICAgMTMwODksIDQyOTMsIDEyMDMyOSwgNDIyMjQsIDQyNzU4LCAxMjE5NiwgNDI4MzcsIDQyMjI2LCAxMTkzMTksIDAsIAotICAgIDExOTEyNiwgNTgxNywgMTI3ODA2LCA1NTI3NywgMzEyMCwgOTc5NywgMCwgMCwgMCwgMTAzODksIDEyNjQ4NSwgMCwgNDg5NSwgCi0gICAgNjUzNTgsIDAsIDQzNTksIDU4NSwgMjM4MywgMzUwOSwgNzAwMzcsIDQ4NiwgNDI5MCwgNTc1OCwgMTI3NTQ2LCAwLCAwLCAKLSAgICA3MDA0LCAwLCA2NTg4MCwgMTI3ODg2LCAxMTkwNDgsIDIzODAsIDExMzgwLCAwLCA5Mzk5NiwgMjM3NiwgMCwgMTE5MzIwLCAKLSAgICAwLCA1MTk3LCAxMjcwNDYsIDEyNzA0NywgMTI3MDQ4LCAyMzY2LCAxMjcwNTAsIDEyNzA1MSwgMTIwNTU0LCAxMjAwNDUsIDAsIAotICAgIDAsIDAsIDk4MzA4NCwgMCwgMCwgMCwgNzQxODgsIDcxMzQyLCA5ODMwODYsIDk4MzU3MywgMTIwMDQ3LCAxMjg1NzUsIDAsIAotICAgIDAsIDEyMDA0OSwgMCwgMTg0NywgMCwgMTAzMzksIDk4MzM2NSwgNDIzODQsIDAsIDQyMjcsIDc0MTU4LCAwLCA5MjUwMSwgCi0gICAgNDMwMzIsIDAsIDQyMzY1LCAwLCAxMjY3MSwgMTEzODQsIDAsIDk4MzQ2NSwgMCwgNjQ3OTcsIDk4MzM0NSwgNTgyMCwgCi0gICAgOTgzMzQ0LCAxMjAwNTIsIDEyMDA2NSwgMCwgMTIwMDY0LCAxMjA2NTAsIDQyMTM3LCA5ODkzLCAyNzU0LCAxMjY2NCwgCi0gICAgMTIwMDYzLCAwLCA3Mzc3LCAxMjc4NjcsIDQxNzk5LCA2NTUzMCwgMTcxMSwgMTI5ODQsIDQzMDM5LCAzMTE0LCA2MjU1LCAKLSAgICA5ODMzNDAsIDExODkzOCwgMCwgMTA4NTMsIDkyNiwgOTgzMzY5LCA3NDE4NCwgOTgzMzY4LCAxMjAwNTUsIDAsIDQzMTc1LCAKLSAgICAwLCA0MzAzNywgNDE3OTgsIDQxMDM1LCAxMTU4MywgMTI3NzY5LCA0MTgwMSwgMTE5MDg4LCAxMTk2MDUsIDUyMCwgNDIwMCwgCi0gICAgMTI2OTksIDgzMzEsIDAsIDMwOTEsIDQxMDM0LCAxMjczNTMsIDk4MzY4MSwgODM2MCwgMCwgNzgwNDQsIDMyMSwgNDIyOSwgCi0gICAgNjQ1NDMsIDkxNzk0NiwgNjU1NjMsIDAsIDkxNzk3NCwgMjg2MSwgNDM3OTMsIDEwMDk1LCAwLCA5MTk1LCA5MjM4NiwgCi0gICAgMTg2MSwgMCwgNzM3MzMsIDAsIDAsIDQzMDQxLCAwLCA0Mzc5NCwgMTI4NTMwLCAzODU5LCAxMjE4MSwgNDE2NjAsIDgyMDksIAotICAgIDAsIDczODY3LCAxMjk3MywgMCwgNzQ3NTcsIDEyNzUxNCwgNDE2NTgsIDAsIDAsIDU3NjAsIDAsIDc0MywgNDQxNCwgCi0gICAgMTIwNzY2LCAwLCA0MjYzMiwgOTE3OTczLCA2NTE2MSwgNzM4OTYsIDEyODU4OSwgMCwgMTQwNSwgMTE5MDYzLCA0MzIyMCwgCi0gICAgNDMzNDEsIDAsIDE5OTE5LCAwLCA2NDUzMiwgNjUzNjcsIDQzNzEwLCAwLCAwLCAzNTEzLCAwLCAxMTg4ODMsIDQzMzQyLCAKLSAgICAxMTkwNjQsIDY1NTI5LCA2NTM2NCwgMTI4MTk3LCAwLCA2NDg1LCAxMzk3LCAwLCA0MTk4NiwgOTI2NzgsIDAsIDAsIAotICAgIDc0MDk3LCAwLCA3NDcxLCAxMjA3OSwgNjc5OTcsIDEyNjgyLCA0MzI4NywgOTIzMTcsIDAsIDk4MzE0MywgOTgzNzA3LCAwLCAKLSAgICAwLCAxMDk5LCAxMDQ5MCwgMCwgMTA1MDEsIDY1MTgxLCA3NDQ2MywgMCwgNDY0LCA0MTYyNCwgNjUyODMsIDY3NjYzLCAKLSAgICA3ODIyMiwgMTM0NiwgMCwgOTE3NjMxLCA2NDU3MywgNjQ4OTcsIDQyMywgMTgxOCwgNjUxNDQsIDAsIDgyNzIsIDEyNzgxMiwgCi0gICAgMTk5MTEsIDQyMTgsIDMwODcsIDY0OTYwLCAxMjcyMzQsIDQzNTY0LCAwLCAwLCA5NTg0LCAxMDQ2NSwgOTgzOTAyLCAKLSAgICA3NDM1OSwgMTI2MjYsIDkxMDYsIDAsIDQyNjQyLCAxMjAyMzAsIDY0NzUwLCA5MzkwLCAwLCA0MTc5NywgMCwgMCwgMjY1LCAKLSAgICA0MTc5NSwgNjQ2NjYsIDEyNjUwOCwgNDM1MzAsIDI3NTIsIDAsIDAsIDk4MzQ5MywgNTksIDAsIDk4MzU5MywgMCwgOTIzNzEsIAotICAgIDc3ODczLCA0MTgxMCwgMCwgNzAxMCwgMCwgNDE4MDksIDQxNDk1LCAxMTkzNjQsIDAsIDQyMjUyLCA0MjIxMywgODAwOSwgCi0gICAgMzMwNSwgNDMwMzMsIDUxMSwgOTI3MDAsIDY2MjU1LCAxMzEyNywgMTIwMDY3LCAwLCA3NDM5NywgMTIwMjM1LCA5MTc5NzcsIAotICAgIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDE5NDg3MCwgMjEwMywgMTAzODcsIDQ0NTMsIDQzMjc2LCA5MTc3ODMsIAotICAgIDEzMTU5LCAwLCA2NDgxLCA0MTIxMywgMCwgMCwgMCwgMCwgNDE5ODMsIDc0MTk4LCA2NjE3LCA5MTE2LCAxMTk2NTQsIDAsIAotICAgIDQ2MiwgNjgxMTAsIDEwNDkzLCAwLCA4MTI5LCAwLCAwLCA3NDQ3MSwgNjY0NCwgMTE2NTgsIDAsIDEyODI0NSwgMzQ1MiwgCi0gICAgMTE5MDYsIDk1ODEsIDEzODUsIDMwOTgsIDAsIDExOTAxMywgNDMzNDAsIDAsIDQxMDMzLCA2NDkzLCA0MjYyNiwgMCwgMCwgCi0gICAgMTE0MjYsIDc3ODg3LCAxNjgxLCAxMTg3ODksIDEyMDQsIDM3NTUsIDY0NjYxLCA3MjM1LCAxMDE3MCwgMzk2NiwgODkxMSwgCi0gICAgMCwgNDE4NDEsIDQzMzM4LCAwLCAwLCA1NzI2LCA2NDkxNSwgNDIxNzUsIDAsIDAsIDQxNDk3LCA2NTA0NCwgMTIwMTA5LCAKLSAgICAyODUxLCA0MzAxNywgOTgzNTg5LCAwLCA0MzczLCA3ODA1OCwgMCwgOTU4NywgMTc4OSwgNjY3MSwgMTI4ODQwLCAzMTAwLCAKLSAgICAwLCA2NTM2MCwgMCwgOTIzNjUsIDkxNzc4OSwgNjQ5MjIsIDAsIDgxOTAsIDEyMDgzLCAwLCAwLCA2NTA2LCA2NDMxMiwgCi0gICAgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDk4Mzg0NywgMTE5MTI1LCAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIAotICAgIDMwODAsIDEyMDIyOCwgMjM0NywgNTQzMCwgMCwgODk5MCwgMjg0OCwgMCwgMTI4MjIzLCA5MjUyOCwgMjQ5LCAwLCAwLCAwLCAKLSAgICAxMjA2NTgsIDAsIDAsIDg4ODMsIDkxNzgwMiwgNzI4LCA2ODE3OCwgOTk1LCAwLCAwLCA2NDgyNiwgMCwgOTE3Nzk4LCAKLSAgICAxMjgzNDgsIDAsIDE5OTQ1LCA4MDkxLCA1NTgsIDAsIDEyMjczLCAxOTQ4MTQsIDk4Mzg1MCwgMTIxMTIsIDY5OTEyLCAwLCAKLSAgICAwLCA3NDQxOSwgMTIzMzUsIDEyMDEwNCwgOTE3Nzk1LCAzNDQzLCAzMTI5LCAwLCAyMTAyLCA2NTQ0NSwgNzgyNTgsIAotICAgIDY0ODkxLCAwLCA3NzI1LCA2NTEwOCwgNzgyNTUsIDAsIDg2MjQsIDY5MjQ2LCAxMjQ0NiwgNDMyOTUsIDAsIDQxODk0LCAwLCAKLSAgICA2Mjc3LCA0MTY3MiwgNDE4OTMsIDEwMDEwLCAxMjg2NzgsIDM1NDAsIDEyODY0OSwgODM1LCA3MTM0MCwgNjk4MTYsIAotICAgIDExOTg2OCwgNzQ0MDgsIDAsIDczOTU5LCA1NDI2LCA0MjU4LCAwLCAwLCA1NDI0LCAxMjgxMjcsIDgyODMsIDAsIDU0MzQsIAotICAgIDk4MzU5MCwgMCwgMTk5MTcsIDExNDA4LCAwLCAxMTk0NywgMCwgMTQwNCwgMzA5NSwgMTE0MzIsIDEyODMwNywgMzQ2NCwgCi0gICAgNjQ4NiwgNDgxOSwgMTI4MjMzLCAwLCA1NzAsIDgwOTUsIDM2NzIsIDExOTg2NCwgMTQ5OCwgNjc4NjYsIDAsIDEyODUzOSwgCi0gICAgNDMxLCAwLCAwLCAxMjgxODIsIDEyODA5NiwgNjgxNjcsIDk4MzY2MywgMTMwOTYsIDEyODY0MywgMCwgNDM0MDgsIDk1MTYsIAotICAgIDEyODUzOCwgNTI2OCwgNDIyMzAsIDQyMjIwLCAwLCA0NDUwLCAxMjA1MTEsIDExNTQ3LCA0MzQxNywgMTI4NTQyLCAzNTYsIAotICAgIDM0NzcsIDIyNywgMTA0ODgsIDY4MjAzLCAzODIsIDExNDE4LCAwLCAxOTUwNjYsIDAsIDAsIDAsIDAsIDY0ODQsIDI1NDEsIAotICAgIDY2MDM5LCAwLCA3ODcxOCwgOTI3MjMsIDM1NDksIDAsIDkxMTAsIDExOTY2NSwgMjc0MywgMCwgNDMyOTAsIDE5NDgxMiwgCi0gICAgOTA5NywgMCwgNDMwMTUsIDg3ODIsIDAsIDc3NiwgMjUyNCwgNDI3MDcsIDg1NzMsIDAsIDEyNjQ5NCwgMCwgMCwgNDI2OTQsIAotICAgIDY0OTQ0LCA4OTUyLCAzODU2LCAxMTg4MTgsIDAsIDU4NzIsIDY0OTUsIDAsIDAsIDAsIDkyNTQzLCAwLCAxMjA3MzMsIAotICAgIDEyODQ5LCAzOTUzLCAxODk3LCAwLCA2NTA5NCwgMTE5OTQsIDQzMzksIDc0NTU2LCA5MjY1NCwgNjc4NDMsIDAsIDAsIDAsIAotICAgIDY4NDczLCA3NDEwNCwgNTIyOCwgMTI4ODA0LCA3ODY4LCA0MzE4NCwgMCwgMCwgNzM5ODYsIDQzNDM4LCAwLCA0MzAyMiwgMCwgCi0gICAgMTE2MiwgOTE3ODQ3LCAyNjcxLCAwLCAwLCA5MjYzMiwgOTI2MzEsIDExODg2NSwgNDU1MywgNzM4MTEsIDAsIDE5NTAwNSwgCi0gICAgMCwgMCwgMTk5MjEsIDc0MzMxLCAxMTQyNCwgMTk1MDA2LCA0NTY3LCA0MTg5MSwgMCwgOTgzNzg4LCA1NTI0OSwgNDgyMCwgCi0gICAgNjUyMzksIDE5NDY2MiwgMCwgMTk0NjY1LCA0MzA0MiwgMTE5MjEyLCAxMzc3LCAxMjg2OSwgNDg5NywgNDI4MjEsIDkyNTAsIAotICAgIDAsIDQ0MzgsIDY0Mzg1LCAwLCAxNzUzLCAxMTMzMSwgNjE0NywgMTk0OTQxLCA0MzI4MiwgODgzMywgMCwgMCwgNjUwNCwgCi0gICAgNzg0MDgsIDEyNjk3OSwgMTA3MTksIDAsIDE4OTgsIDE0MTMsIDQyNDQzLCAwLCA4MDIsIDEyMTQxLCAwLCAxOTQ2NzEsIAotICAgIDY2NDgsIDEwNjcxLCAyNTI4LCAwLCA2NDc4OSwgOTE2OSwgODM4LCAxMjAwODcsIDEyMDY5NywgODQ0LCA1MDE0LCAwLCAKLSAgICAyNTYsIDAsIDk5OTAsIDAsIDQyNzM5LCA5MTc4NTEsIDc1NDIsIDY1NDY0LCA5NzI2LCAwLCA2NDg5LCAxMDA0OCwgNzQzMjYsIAotICAgIDc4NzE5LCA2NjU3MywgMCwgNzg3MjQsIDc4NzEyLCAxMTc2MSwgMTk0NjU1LCAwLCA0MTA5NCwgMCwgMCwgMTk0ODkzLCAwLCAKLSAgICA5MjY4OSwgNjE5NiwgNjk0NSwgOTM5NjksIDE5NDg5MCwgMTI4MTg0LCAxMjA0OTEsIDExODE2LCAxOTQ5NDMsIDU3MzMsIAotICAgIDI5MzAsIDAsIDAsIDQxMDk4LCAwLCA0MTA5MywgMCwgNjY2MjYsIDU4OCwgOTc2MCwgMCwgMTk0NzE3LCAxMjM4LCAyMDAsIAotICAgIDk4MzIwNywgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIDAsIDkyNDg1LCAxOTQ2NTEsIDAsIDk4MzcwNiwgMzM5NCwgCi0gICAgMTk0ODk0LCAxMjA2NjgsIDAsIDAsIDEyNzM1OCwgNjYyMTksIDEyNzE4MywgNDMyODQsIDE5NDY1NiwgNzgxNywgMTg0MSwgCi0gICAgMTEwNTUsIDEyMDUzMywgMTk0OTc5LCAxOTQ5ODIsIDE2NjksIDEwNzc2LCAxOTQ5ODEsIDc3MDEsIDE5NDk4MCwgMCwgCi0gICAgMTk0OTk1LCAxNzMyLCA0MDMwLCAwLCAzOTYzLCA2NjYxMSwgMTI3NTMwLCA0MTc2OCwgNjQ5MSwgMCwgNjUzMjQsIDkxNCwgCi0gICAgNjUzMjMsIDgwNzEsIDM1MzgsIDAsIDIyODcsIDY1MzI4LCA5MjQ0MSwgNzQzNjcsIDc2MTQsIDAsIDExODE5LCAwLCAKLSAgICAxMjAwOSwgMTIzOTksIDAsIDY3ODUyLCA2NTUzNywgMCwgMTA4NDEsIDQzNDMwLCA1MzAxLCAwLCA5MjYxOCwgNTczNCwgCi0gICAgODk2MCwgMCwgOTI1MjcsIDY1MzE3LCA3Nzg4MCwgMCwgMCwgMCwgMTIzMDQsIDAsIDAsIDY1MzE1LCA5MjY3MCwgMTI4NTExLCAKLSAgICAwLCAwLCAwLCAxMTk2MjEsIDkyNTI5LCA3NDUzNiwgMTI0NDcsIDY0NDg2LCAxMjczNzQsIDEyNjU2MiwgOTgzMTI5LCAwLCAKLSAgICAwLCA5ODM4MDIsIDQyNzY3LCAxMDkxNSwgMCwgMTIwMDcsIDQzNjk1LCAxMjA1MjAsIDExOTc1LCAxOTQ4NzgsIDAsIAotICAgIDkyNjA0LCAyNTU1LCA4NjI5LCAxMjg2NDAsIDQzMTY4LCA0MTg3MiwgNDM3MDYsIDQ0OTYsIDE5NDg3OSwgMTI4MTQ4LCAKLSAgICAxMjAyNDEsIDAsIDAsIDAsIDAsIDY0NzMwLCA3MDA0MSwgNjY3MTQsIDY4MjIyLCAwLCA3MDA3NiwgNjU1OTYsIDkyMzA2LCAKLSAgICAxMTQxNiwgNDI4MCwgNjc2NTUsIDg3NjUsIDEyNzg0LCA3NzkyLCAxMzkzLCAxMjY0NzMsIDY3ODcxLCA3NDM4NiwgMCwgCi0gICAgODIzMywgMTI4MjAsIDAsIDY2ODMsIDE5NDg3NiwgMzQ0MiwgMTIxNDQsIDI4NDEsIDEyNTQzLCAwLCAxNDczLCA0MjgyMCwgCi0gICAgNjQzMjksIDEyNzgzMiwgMCwgNjg2NDIsIDY0ODgsIDM1NywgMTA0OCwgNDExMDAsIDAsIDQxMTA0LCA5NDAwMywgMzQwNiwgCi0gICAgMTA1NCwgNzEzMjAsIDEwNDAsIDY1NDUwLCAwLCA0NDM0LCAxMDY5LCAwLCAxMTg4NjIsIDY1NzM3LCA5MTc3NjUsIAotICAgIDEyODcwNSwgMCwgOTgzNjkzLCA5NjkzLCA0MTk0MywgMTI2NTY0LCA0MTkzMSwgNDE3NTksIDEyNzU3LCA0MzUzLCAwLCAKLSAgICAxMDU5LCA5NzkwLCA4OTk1LCAxMTk5NzQsIDk4MzY5NiwgNjU5MzcsIDAsIDQxNzY0LCAxMDY0NiwgMCwgMTE4ODMzLCAKLSAgICA5MjM3MiwgMCwgNzQ4MzAsIDc4NTY5LCAxMjc0MywgOTgzNjg5LCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIAotICAgIDEyMjA3LCAxMTk2MTksIDYzMzUsIDY2NjAyLCAxMTMxMiwgNjQ4MDcsIDAsIDAsIDQxNzY3LCAxMTk2MjksIDk4Mzc2NCwgCi0gICAgNDMwMjAsIDEyODI3MSwgMzk1NSwgNzQyNTQsIDAsIDk4Mzc1NCwgOTE3ODYxLCAwLCA3NzkyNiwgOTc3MCwgOTI0NiwgCi0gICAgMTIyMzAsIDAsIDAsIDAsIDEwNDQ4LCA0MTc4MywgNDE3ODYsIDEyNzA5MywgMTI3OTcsIDI3NTUsIDY0NTcxLCA3ODU3OCwgCi0gICAgMTk0OTI3LCA0ODU3LCAwLCA0NDI4LCAxMjc5NCwgNzM3NTUsIDEyODA2MSwgNzg1NzQsIDAsIDc0Mjg0LCAwLCA1NzQ3LCAKLSAgICA3ODgyNSwgMCwgNzk3OCwgNDEwOTIsIDc0NTcxLCAwLCAxMTkyNCwgNDM4MTIsIDQyMTQ0LCA2NTAxNSwgMCwgNTYzLCAwLCAKLSAgICA5ODM2OTEsIDEyNzk4LCAxMTI3MSwgNTcsIDAsIDAsIDkxNzg2MCwgMTE5MDQzLCAwLCA5NDA1MSwgNDMxMzcsIDY5NCwgMCwgCi0gICAgOTg3NiwgMCwgMTE5MTY4LCAwLCA3ODgyMiwgNjQ1MzcsIDAsIDI3NywgNzQzODUsIDcyMjksIDEyNzYxLCAwLCAwLCAKLSAgICAxMzAyNSwgNjQ4MTEsIDg3NTcsIDc4ODI0LCAxMjY0NzgsIDE1NzQsIDczODEsIDAsIDI1MjUsIDQ4NTIsIDU3NDksIAotICAgIDY4NDY1LCAxMzAyNywgNDI4MjQsIDEyMDU3NCwgMTAzOSwgNzE1MSwgMTAxNTUsIDU3NDUsIDE4OCwgNDE4NTgsIDExNTkyLCAKLSAgICAwLCA3NDAxNSwgOTA1NSwgNDE4NTMsIDQ4NTgsIDkxNzc4MCwgMCwgNDM2LCA0NzcxLCAwLCAyNzg2LCAwLCA0ODU2LCAKLSAgICA4MDUxLCAwLCAxMTk2MDksIDcxMzI3LCA5NjQ0LCAwLCAwLCAwLCAxOTQ5MTYsIDEyMDczMiwgNjY3MTAsIDExODgzNCwgCi0gICAgOTgzMzU5LCA3MzkwNiwgMTI4NjgwLCAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIAotICAgIDE5NDkxOCwgNjgzOTMsIDAsIDM1MDQsIDExOTE3OCwgMCwgMTA4MjIsIDUxNDksIDY2MDI5LCAxMDIyNiwgNjUxNDIsIAotICAgIDEyODAyNSwgMzU5NCwgNDI0MjQsIDE5NDk1OSwgNDAsIDEyNjU3LCA5ODM2NjUsIDAsIDM4NiwgMCwgODgzNCwgMCwgCi0gICAgMTI4MTUsIDQzNTc0LCAwLCA3MzkwNywgMCwgNzQxOTYsIDcyMjAsIDc0NTA0LCAwLCA3NDMxNiwgMCwgNjUzMjIsIDQzMDQsIAotICAgIDc0NTAzLCA4MTYwLCA3ODcwNywgMTk0NzUzLCAwLCAwLCAxMjg1MjYsIDEzNDgsIDkyMzQ5LCA3ODU5NywgMTI2NTM5LCAKLSAgICAxMzMwMywgMCwgOTIzOTIsIDE5NDc1NSwgNzU5OSwgMTI3OCwgNDM2MTYsIDEzMjY5LCAwLCAwLCA3NDM4NywgNzgxNzksIAotICAgIDc4NTk4LCA3NDQ5MiwgNjA5NywgNzU2OCwgODc4MCwgNDk4MiwgMTI3NDY0LCA3NDUwMSwgMTk0NzYzLCA3ODU5MiwgCi0gICAgMTk0NzYyLCAyNjcyLCAzNzM1LCAxMjc0NzAsIDEzMTM4LCA0MjI2NiwgOTQ4NCwgMTA3MjQsIDQxMjAyLCA3MTM2NCwgMCwgCi0gICAgNDM3NDIsIDAsIDk0ODcsIDExOTk1OSwgMTE5MTE3LCAzODQyLCAxMjg3NjgsIDc4NjY4LCAxMjQ0MiwgNjE5MywgOTc5MSwgCi0gICAgMTI3OTc2LCAwLCA0MjUxNiwgNzIyOCwgNzU1OSwgNzQ4MDMsIDc4NDY4LCA3ODczLCAxMTM5OSwgMTE5MjE5LCAxOTQ2OTEsIAotICAgIDE5NDg1NSwgMTk0NjkwLCAxOTQ4NTcsIDM2MDQsIDEyMDY4MywgMTE5MTg4LCAxMjg4NzcsIDc4NTQwLCA3ODU0MSwgCi0gICAgNDI1MDcsIDE5NjIsIDQzMzA1LCA3ODQ3NiwgNDI1MDUsIDExNjYwLCAwLCAyMDcyLCA5MjMxMiwgNjk5NSwgNzQxNzMsIAotICAgIDU0MzcsIDc0MTc0LCAxMDY2OSwgODcwMiwgNzk2NCwgOTIzNTIsIDAsIDE5OSwgMTk0ODQzLCA0MTA1LCAxOTQ4NDUsIAotICAgIDE5NDY5OSwgMTk0ODQ3LCAxOTQ3MTAsIDExOTg3NSwgMTMxNDgsIDc1NjAsIDc4NDc5LCA5MjI2LCA3ODQ4MCwgMTk1MDcwLCAKLSAgICA2NDcyLCA2NTgxNCwgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCA5ODM4MTcsIDk4MzI0NywgCi0gICAgMTk1MDI0LCAxMDE5NiwgNzg4NiwgMCwgNjU4NSwgMCwgNjY4MCwgMTk1MDQyLCAwLCAxOTUwNTEsIDY2NzksIDc0NDEyLCAKLSAgICA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDk4MzYzMSwgOTgzNjM3LCAxMjc4OTEsIDEyNzQ4NCwgMTk0ODMzLCAKLSAgICAxOTQ4MzIsIDY2ODEsIDEyNzQ4MiwgMTI2OTMsIDE5NDgzNiwgNDI3MjcsIDc4MTk2LCAxMjgyNTIsIDc4MTk1LCA2NTQ0MiwgCi0gICAgMTE5NjEwLCA2OTczMywgOTk4OSwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDExMzIxLCAxMjg4NDUsIDE5NDgyMCwgCi0gICAgMTk0ODE5LCA1Mjk3LCA3MDQyLCAxMzI4NCwgNjExMiwgNzk2OCwgMTk0ODI1LCA3MzkyNywgOTI0NDQsIDE5NDczNiwgCi0gICAgNjU3NDYsIDEyNzQ3NiwgNjk4ODksIDc0Mzg5LCAxMjg2OTYsIDQzNDIsIDQyODM5LCAxOTQ4MzEsIDE2NzcsIDAsIDAsIAotICAgIDEyNjU5MCwgOTE3ODU1LCAxMTA5MSwgMTEwMTEsIDI3MTksIDAsIDAsIDExOTU5NSwgMTAxNjAsIDAsIDAsIDc1ODUsIAotICAgIDY1MTY5LCAyMDUyLCA0MzA4LCA5MjE3NCwgNDMwMDAsIDc1MDUsIDU0MywgNjQ5MTYsIDY0NzM2LCAwLCAwLCA2NDY1NSwgMCwgCi0gICAgMTE4OTIyLCAyMDY0LCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMTI3MTcwLCAwLCA5ODM2MjUsIDAsIAotICAgIDAsIDEyOTk0LCA5MjcyOCwgMTA4MjgsIDk4Mzk0MywgNjIyOCwgNDMwNywgMzQ4MiwgMTI4NTI3LCAwLCAwLCAwLCA1MDYsIAotICAgIDc0NTczLCA0MTE5NCwgNjU3MzUsIDIwNTUsIDQzMjU1LCA0MTE5NSwgMCwgODE2OSwgOTgzNjgwLCA4ODQxLCAwLCA1MTYsIAotICAgIDkzOTc0LCAyMDYzLCAxMTkwNTEsIDM0LCAxMjg4NTAsIDEyMDE4NiwgMTE1MDQsIDE2MTIsIDc0MzMzLCAxMjAxODIsIAotICAgIDExODI3LCA3NDMwOCwgMTIwMDEsIDEyMDE3OCwgMTAyNDIsIDY0NTY0LCAxMjAxNzksIDY3OTg2LCA2NTg0LCA3NzQ5LCAKLSAgICAxMTAzNywgMCwgMTc1OCwgMTI3MDkyLCAxMDY2NywgMTA1NjAsIDEyMDE5NywgOTI1OTMsIDE5MzUsIDExNTE3LCAxMjAxOTMsIAotICAgIDEyMDE5NiwgMTIwMTk1LCAxOTMxLCAxMjAxODksIDc0ODM5LCAxMjAxOTEsIDEyMTcsIDY0NzAyLCAxMjY0MywgODI1LCAKLSAgICAxMjc4MzgsIDE5NDkwNSwgMTIyOTQsIDkyNDI4LCA3ODgzNCwgOTEzOCwgNzg4MzEsIDc4ODMzLCAxMjYzMSwgNzg4MjksIAotICAgIDExMDgwLCA3NDU1NCwgNjQwMDAsIDU1OTEsIDEyMzksIDAsIDExMzEzLCAwLCAzNDAzLCAwLCAwLCA2NDM2NCwgOTIyNjksIAotICAgIDAsIDc0NTgyLCA4OTk4LCAxMjk4OCwgMCwgOTE1MiwgOTgzODQ5LCAwLCAxMjY0ODQsIDY3NTg5LCA0MTg1MCwgNjQyOTAsIAotICAgIDM0MzMsIDkyMzkzLCAxMjYxNSwgMTU5NCwgNDIxOTIsIDY5MTQsIDY3NjAzLCAwLCAxMTk1NjksIDc0NTY1LCA0MTM1MywgCi0gICAgNjc2MDIsIDY3NjExLCA0MzM3LCAwLCAxMjcyOTYsIDkxOCwgNjUwMzUsIDQxMzUxLCA3NjgxLCAxOTQ5MDAsIDQyNTc3LCAKLSAgICA0MTM5MywgMTI2NjgsIDE5NDkwNCwgMjQ3NywgMTI3Mjg1LCAwLCAxMjczMDEsIDAsIDY3NjA0LCAxOTQ4ODAsIDEyNzIzNSwgCi0gICAgNTczLCAxMjcyODIsIDE5NDg4NCwgMTE0MTcsIDE5NDg4NiwgMTE5ODE0LCAxOTQ4ODgsIDY3NTk5LCAwLCAxOTQ4ODksIAotICAgIDY3NjA3LCAxMTQ4MiwgMCwgMzk4MSwgMzM1NywgMCwgNDIyMjMsIDQyMDcsIDEyODgsIDc4ODQyLCA3ODgzOSwgNjg0MTksIAotICAgIDc4ODM3LCAxMTU4OSwgNDIxOTUsIDE5NDg3MiwgMTk0NTk5LCAxMjcyNjMsIDY0NjAyLCA2NzYxOCwgOTI1MzksIDAsIAotICAgIDQyNzg4LCA2ODQxNiwgNjQ0ODAsIDE5NDg3NSwgODQyMywgMzM0OCwgNDQ4LCA2ODQ3NiwgOTcxNywgMCwgMCwgOTk3LCAwLCAKLSAgICAwLCA5MjU3NywgMCwgMTE0NDAsIDExMzc5LCA0MjAwMCwgMTMxMzksIDQyMjIxLCA2NTAxMywgMTI2OTk5LCAxMjc3NjAsIAotICAgIDczNzk2LCAwLCAxMTkyMjgsIDEyMDM1LCAwLCAyODE4LCAwLCA3NDQxMSwgNzM3OTMsIDAsIDQxNzIsIDAsIDAsIDgzNzMsIAotICAgIDEwODczLCAxMjE5NywgMCwgMCwgOTIyNjUsIDY5NzA2LCAwLCA3ODIxMCwgMCwgMTI4MTEwLCAxOTQ4NjUsIDEyNjk4MiwgCi0gICAgNzQ1NjMsIDY0ODI4LCAxMTQxOSwgMTk0ODY4LCA3NjYsIDEyNTcsIDAsIDExODg0NSwgMTEzODEsIDMyNjUsIDY2NjE3LCAKLSAgICAzMjc0LCAxMjczNjUsIDEyNjUyMywgOTQwNDIsIDk4Mzk1MCwgNzQ1MjIsIDQxOTg5LCAwLCAwLCAxMjg3OTgsIDMyNjMsIDAsIAotICAgIDY1NjcyLCAwLCAzMjcwLCA2NDUzOSwgMTE0ODksIDAsIDAsIDAsIDAsIDk1MDUsIDY1NTE4LCAxOTQ3NzYsIDc1NiwgCi0gICAgMTk0NjA1LCAwLCAwLCAwLCA3MjYxLCAwLCAxODYsIDAsIDExOTE1NiwgNTc3MCwgMTMxNzksIDY1ODMwLCAxMjYxMiwgCi0gICAgMTI5NDksIDY0ODU2LCAxMjgwMCwgOTgzOTAxLCA3NDIwMywgNjQ3MTgsIDExNTA3LCAwLCA5MjQzNCwgMTE4OTI5LCAwLCAKLSAgICAxMTU3OCwgMCwgMTE5Mjk2LCAwLCAwLCAwLCAwLCA3NDU2OCwgOTI1NCwgMCwgMTc5NCwgMTIwMjE3LCA2NDUyMSwgNTYyNCwgCi0gICAgMTIwMjIwLCAxMjAyMjEsIDExOTk1OCwgMTIwMjIzLCAzNjE3LCA2NjYzNiwgNjQ4ODYsIDk0MDYxLCAxMjAyMTIsIAotICAgIDEyMDIxMywgMTIwMjE0LCAxODcyLCA2NjUwOCwgMTIwNDY3LCA0MTA3OSwgMTA3NDgsIDU1MDIsIDExOTMzMCwgNDQ1MiwgMCwgCi0gICAgOTgzNzcxLCA5MjUyNiwgNDUxMSwgMCwgOTgzODc3LCA2NDY3OCwgMTE0MjUsIDAsIDQzMjQ1LCAxMjMxLCAxOTQ3ODMsIAotICAgIDY5OTAzLCAwLCA5MDAzLCA4MTkyLCAwLCA1MzA1LCA5NjUzLCAxMDYxNiwgODY5NCwgOTU0NiwgMCwgMCwgMTIwNDc4LCAKLSAgICAxMjAyMDAsIDY1MjA1LCAxMjAyMDIsIDY0MDYzLCA5ODc4LCA3NDc4MCwgMTE5NjI2LCA3ODIwMiwgNjQwNTgsIDg3OTksIAotICAgIDQyMTMxLCAwLCA2NDA2MiwgMTAyOCwgNjQwNjAsIDY0MDU5LCA4MzcsIDEwNTY3LCAwLCA0MzEwMywgMCwgMTIwNzU0LCAKLSAgICAxMTQyNywgMjkwMiwgNjQwNDMsIDY0MDQyLCA0Mzc0OSwgMTA3NTYsIDY0MDQ3LCA0MjYwNiwgNjQwNDUsIDY0MDQ0LCAKLSAgICA0Mzk3OSwgMTAwNzYsIDY0MDQwLCA0MzA2MCwgMTk0OTQyLCAxMDM0LCAzMzkyLCAxMjc3NzEsIDQzMDkxLCA2NDAzMywgCi0gICAgNjQwMzIsIDQyNzM1LCA2NDAzOCwgNjQwMzcsIDY0MDM2LCA2NDAzNSwgNDI5MSwgMTk0OTI4LCA2NDAxNSwgNjQwMTQsIAotICAgIDY0NjgxLCAxOTQ5MzAsIDAsIDc4MTQ1LCAwLCA0MzA5MCwgMCwgMzQ3NiwgODk3MywgNjQwMTIsIDQyNDczLCA2NDAxMCwgCi0gICAgNjQwMDgsIDY0MDA3LCAyMDAzLCA3NzA2LCA2NDUxNywgNzgxNTMsIDI1MzgsIDY0MDA5LCAyMDQsIDAsIDQ4MDIsIDQxMTEsIAotICAgIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDk4MzI2NiwgMCwgNDc2NywgOTM0MywgCi0gICAgNjQwNDksIDY0MDQ4LCAxMjAwMzQsIDExMzMsIDY0MDUzLCA2NDA1MiwgNDM0NTMsIDY0MDUwLCA0MTM0MCwgMTE4OTc1LCAKLSAgICAxOTQ4MzUsIDEwMDA1LCAxMjMyOSwgNDEzMzMsIDAsIDg0ODksIDE5NDIsIDAsIDE5NDgzNCwgNDI1MjAsIDEyODI0OSwgMCwgCi0gICAgMCwgMTA3NjAsIDY0MDIzLCA2NDAyMiwgNjQwMjEsIDY1ODIsIDQzNjcwLCAwLCA2NDAyNSwgOTE2NywgNDIxNTEsIDc4MjQ0LCAKLSAgICA5ODMyMzIsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMCwgNzU4MiwgNzgyNTIsIDc4MjQ4LCAKLSAgICA3NzkxNCwgNzgyNDYsIDc4MjQ3LCAwLCA3NzkxNSwgNzg3NjYsIDY3ODgsIDEzMDk0LCA3NzkyMCwgNzUzMiwgNDE0MTQsIAotICAgIDc4NTIwLCAzMTc5LCA3ODUxOCwgNjQ3NjksIDc4NTE0LCA3ODUxNywgMTE0NjEsIDc0NDU0LCAxMDc1MSwgOTA1MSwgCi0gICAgMTIwNzIwLCA2NzA4LCAxMDUzNSwgOTgzNjI3LCA2ODIxOCwgNTUyNzQsIDIwMDgsIDY0MDMxLCA2NDAzMCwgMjk0LCAKLSAgICA0MTg3NCwgMCwgMTI2OTkxLCA2NTkyOSwgMCwgMCwgMCwgMCwgNjQwMjgsIDgxNDYsIDY0MDI2LCA0MTc4OCwgMTk0ODQ0LCAKLSAgICAwLCA0MzUxLCA2MzQzLCA0MzI0NywgMTE5ODg4LCAwLCAxMTk4ODYsIDExOTg5MSwgMTE5ODkyLCAxMTk4ODksIDExNDMzLCAKLSAgICAxMTk4OTUsIDExOTg5NiwgMCwgNzgwMSwgNjU1NzgsIDE5NDgzOSwgMTI5MTUsIDQzOTY4LCAzMjk3LCA5Njk5LCAxOTQ5NTUsIAotICAgIDExMzUsIDAsIDAsIDEyODUyNSwgMTk5NSwgNjcyMiwgOTgzOTI1LCAwLCAyNTUyLCA0MTU0NiwgNjAsIDY4Mzk0LCA4NjQ5LCAKLSAgICA0MTU0OSwgNzg0OTYsIDk4MzMyNywgMCwgNjY4MiwgMCwgNzg2NzksIDY0NzEwLCA0MTU0NywgOTgzNjMwLCAyMDEzLCAKLSAgICAxMjgyOTEsIDc4NTMwLCA3ODUzMiwgNzg1MjgsIDc4NTI5LCAxMjgzMiwgNzg0OTMsIDgwODEsIDgzNjIsIDM1MzcsIAotICAgIDExOTkwOCwgOTEzNywgNzE1NSwgODk5OSwgMCwgNzg1MzMsIDM0NjYsIDAsIDAsIDE5OTYsIDAsIDM0NTMsIDYyODIsIDAsIAotICAgIDIwMDIsIDIwMDAsIDEyMDE3NSwgNTM3LCAwLCA0MTc5LCA2NTExOSwgMTk5OCwgMCwgMTg0MiwgMCwgOTI2NzQsIDk2MjgsIAotICAgIDY4NDQ2LCAxMjA4MSwgOTgyNiwgNjQ1MDIsIDE3NjcsIDAsIDAsIDAsIDEyMDIwMSwgOTgzNjQ2LCAwLCAwLCAzMDU5LCAKLSAgICA0NDAyNCwgMTIwMjA0LCAxMTk5NTMsIDkyNjkzLCAwLCAwLCA5MjQ1MiwgNDEwMCwgOTIwLCAxODExLCAxMzU1LCAwLCAwLCAKLSAgICAzNTkyLCAxMDA3OCwgMCwgMCwgMCwgODU5MiwgNjU4NzAsIDY4MTY0LCAxMjg3OTIsIDEwNzQyLCAwLCA0MjkxOCwgMTk5NCwgCi0gICAgOTI4MSwgMzI5NiwgMTI4NjUsIDE5OTcsIDE4OTUsIAorICAgIDUxNTMsIDQxODA1LCAwLCA3MzczNSwgNzYzLCA0MTgwOCwgNjQ5MTAsIDEyMTM4OSwgMjAwOSwgMCwgMTI3OTg1LCA3NDI0NSwgCisgICAgOTY0MCwgMTE5OTUxLCAwLCA2OTg5NSwgODYyMSwgMTIwNTIzLCAxMjg1MiwgMzAzMSwgOTgzMDUwLCA2NDM2MSwgMTI5MDg4LCAKKyAgICAxODIsIDY2NDE0LCA5MjcxNiwgOTI1OTgsIDExOTk1MCwgNDI2MTMsIDkwNTgsIDM2NiwgMCwgOTg5MiwgNTk2OSwgMTE3NTQsIAorICAgIDEwODQ4LCA0NTcwLCA2NTMwMSwgNDQwMTMsIDQyNTUsIDEyNzg4OSwgMTAxMDIsIDQxMTg5LCA0MDAzLCA0MTAyNiwgCisgICAgNjgxMDksIDEzMjkzLCA0MTE5MiwgNjk2MzUsIDEyNDk3NywgNDIyNTEsIDAsIDQyNTM0LCA2NTE3OSwgMTEyODcsIDYxMjgsIAorICAgIDExMzgxMSwgMTEwMzQsIDEwOTIzLCA2NDQyMywgMTI1MDU4LCA2NTUwNiwgOTgzOTEyLCA2NTg2MSwgNzQwODMsIDY2ODcyLCAKKyAgICA5OTMyLCA0MzUxNiwgODMwNjMsIDgzMDY1LCA4MzA2NCwgOTgxNywgMCwgNzEyMzQsIDAsIDEyMTE3LCA2NjU4NiwgNDE4MywgCisgICAgMTA1NDAsIDY2MjUwLCA5MDYzLCAxMjcwNDUsIDEyODU0NywgMTE5OTU0LCAxMTM2ODUsIDEyODk3LCAzNzkyLCAyMDExLCAKKyAgICAxMjE0MTgsIDYwNjUsIDQzMTYwLCAxMjgzNzksIDEyMDU5NSwgODY5MiwgNDExODYsIDQxODE2LCA0MTAyMywgNDE4MTgsIAorICAgIDQxMTg3LCAxMTY1OSwgNzkyMiwgMTI2MTQsIDIwMDUsIDg1MjMsIDc4MDAyLCAxMjAwMzUsIDc1MTMsIDE4NjMsIDQ3MTAsIAorICAgIDAsIDU5NTYsIDc2MjEsIDc4MDA1LCA5MjYyNCwgNDcwNSwgNzE2LCA3NDkxOCwgMCwgNDcwNCwgMTIwMDQwLCA5MzAyNCwgCisgICAgNDIyNDEsIDE2MSwgNDM5NzcsIDc0NTQ2LCA2NjIxNCwgNDcwNiwgNzQwNzcsIDY5OTE0LCA0MjY3MiwgNDcwOSwgMTA2ODAsIAorICAgIDExOTA2NSwgNDMyOTMsIDY4NzcxLCA5ODMxOTAsIDExOTE2NCwgMTIwMzI4LCA4MzMxOSwgMTAxODcsIDE3MDAsIDExOTIyMywgCisgICAgODMzMTUsIDAsIDc0OTgwLCA0MDA0LCA5MTc1OTUsIDEwOTY4LCA0MzI5NiwgMTI4MzMxLCA4NTA2LCAxMTM3NDQsIAorICAgIDE5NDgxMiwgMTI2OTk2LCAxMDA1LCA5MzcsIDc4MjE2LCA0NzM0LCAyODcwLCAxMjEzNTAsIDc4MjE4LCA5ODMxMDksIAorICAgIDc0NjMsIDQ3MjksIDAsIDIzNSwgMTM4NCwgNDcyOCwgNzQ4ODcsIDcwNDk0LCA5MjQ5MCwgNzQ0NDksIDgxMDksIDQzMTA1LCAKKyAgICAxMjg2MjMsIDQ3MzAsIDQ0NywgMTMxODYsIDE1MTMsIDQ3MzMsIDEyMDQxNSwgOTI1NDgsIDAsIDQyNTI3LCAxMjkxMSwgCisgICAgNDM0MjcsIDEzODMsIDg1NjUsIDI0NjksIDEyMDAyNCwgNjY5MCwgNjE1NiwgNjgxMTcsIDQzNDM5LCA3OTkzLCA0Mjg4LCAKKyAgICAxMjA0MTYsIDI2NzQsIDEzMjM4LCAxMTkyMiwgMCwgOTI1MjksIDM1MTAsIDEzMjM0LCA5ODM4MzIsIDEyMDQwNywgNTYwNSwgCisgICAgNDIwOTUsIDExMzY0LCA5MjI4NiwgMTM4MCwgNjU2MTcsIDExMTYyLCAxMjAyNjEsIDEzMTk2LCAxMzE5NywgMTIwMzA5LCAKKyAgICA2NzcwOCwgOTQ5NSwgMTE5MzQ2LCAxMjcxNTQsIDU5NTksIDY3OTg0LCA3Mzk3NiwgNjYyNzUsIDQzMzcxLCA2OTQxLCAKKyAgICAxMTkzNDksIDEzMjA1LCAxMzIxMSwgNTgwMSwgMTI3NjksIDY1OTA1LCA0MTY5NywgMTI4MywgODI5NTIsIDQ3NzksIAorICAgIDk4MzkyMiwgMzcxOSwgNDAwNiwgOTgzNTY5LCAxOTk1NywgNzExODYsIDIwMjEsIDExOTMzMiwgNDM4NzcsIDgzMTQwLCAKKyAgICA0MzAyOCwgNjU0OTMsIDQxODM4LCAzODc1LCA1OTYyLCA2NDM0MSwgOTI2MTYsIDk4MTQsIDQzNDU3LCA1ODI3LCAzMzE0LCAKKyAgICA3Nzg3LCA3MTE4OSwgNjU0OTQsIDY4MTUzLCAxMjY5OTEsIDE5NDY5NywgMTIwNjM2LCA2NDUzMSwgMTIwNjkyLCAxOTQ2MjYsIAorICAgIDEyODc1MywgOTgzOTU4LCA2NjMxNiwgNjU0NjcsIDU3NzEsIDQxMjk4LCA5ODM3OTQsIDk3NDIsIDUyMSwgMCwgMTA4MDAsIAorICAgIDkyMjIyLCA4NDA0LCAxOTQ2MjUsIDQ4MywgNzA5NiwgNzA4OSwgNjYzMjMsIDkyOCwgMCwgMCwgMTE5MDE4LCAxMDU5OSwgCisgICAgMTE1ODYsIDM5ODksIDEwOTcxLCA0Mzc0OCwgNjU3ODIsIDk4NDEsIDg4NDMsIDEyMTQ1LCA2NzI2MSwgMTAwNzQsIDc4NTQ4LCAKKyAgICA5Mzk5OSwgMzc2OSwgMCwgMCwgMTI4NzAzLCA5ODMxMDcsIDk1NzMsIDkxNzk5OCwgNjUyOTAsIDg4NDksIDExOTI1NCwgCisgICAgNjU4NTUsIDY1MTEyLCAxNzk2LCA3MTA0NiwgMCwgNjk2NjUsIDgxNjQsIDQxMzAxLCAzNTAyLCA4MzEzNSwgNzM4OCwgCisgICAgMTA2MjEsIDczODM4LCA3ODU1MywgNTgyNSwgMTMwMDcsIDY4MTY1LCA5MjIwMywgOTI5MTUsIDEyNjYxLCA3NjA4LCAKKyAgICAxMDM1NCwgMTA0MTgsIDQyNDExLCAyMDIyLCAwLCAxNDA5LCAxMjE5NSwgNDAwMSwgMzExMiwgMTA4MjQsIDEyMDYzOSwgCisgICAgMTM5MCwgNzAxODQsIDE5NDcwNCwgNDIxLCA0MzUzNiwgNTg0NiwgMTIwMTIwLCA0MTMwLCAxMjc3NzUsIDc1OTUsIDQyNTg4LCAKKyAgICA3NjAwLCA3NDQwMCwgNjYwMzUsIDE5NTA5MSwgMCwgNjU4NTEsIDQyNjA3LCAxMjQ5NTUsIDkyNDAzLCAzMTY4LCA2NzczMywgCisgICAgNDIxMzQsIDExODMxLCAyMzcwLCAyODQ2LCA5MjYwNSwgMTI4MDg0LCAwLCAxMjAxMzIsIDEyNzc0NSwgMTgzNiwgMCwgCisgICAgMTIxMjA3LCA5MjU1OCwgMzc0MCwgNjk4NDMsIDYyOTAsIDY1Mzc0LCAxMjA0NTEsIDIzOTAsIDM5NDQsIDY2NjI4LCAKKyAgICAxMTkwMDYsIDAsIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIDgzMzEwLCA3Nzk3NSwgMCwgODEyNywgODk3NSwgNjQ3MzksIAorICAgIDc5NDMsIDEyNDk2OCwgMTE5MjM0LCAxMDYxOCwgMjU4NCwgMCwgMCwgMTI4MjI1LCA5OTk4LCAxMjA1NzMsIDgzMzA2LCAwLCAKKyAgICAxMjc3NTAsIDQzNTA4LCA2MjA0LCAxMjcwNDQsIDEyMTM3NCwgODI3OSwgODc3NiwgNjQ5NTQsIDQ5NzUsIDcwMDc1LCAKKyAgICAxMjAxMzAsIDQyNjcsIDE2MzEsIDQyMjA2LCA3Nzk4MywgMTI4MDE1LCAxOTUwNDYsIDY1NzAwLCA2NjM4NiwgMCwgNjQ2NDUsIAorICAgIDAsIDkyODg3LCAxMjY1ODgsIDEyNTg2LCAwLCA5MjQyLCAxMjAxMDAsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCAKKyAgICA5ODM3OTcsIDc3OTMsIDc4Mjc1LCA5MzI4LCAxMTkxMDQsIDc4MzkzLCAxMjYwNCwgOTI4ODUsIDY2MTUsIDIyODUsIAorICAgIDkyMzQ0LCAzOTg2LCA0NDAyNSwgMCwgODkxMiwgNjQ1NTUsIDc0MDksIDkyMjQ3LCA5ODMzNjAsIDk1NDEsIDc4Mjc2LCAKKyAgICAxMTM2NjksIDExMjc1LCA4NTQwLCAxMTQ5OCwgMTIwODY4LCA5ODMzNTksIDQxMDQwLCAyNDU5LCAxMjczMDIsIDEzMDYwLCAKKyAgICA0MTA0MSwgNzQ0MTMsIDk4MzEzOCwgMCwgNzc5MzEsIDY4NDI3LCAxMDQ1MCwgMTI1NTEsIDQxMDQzLCA3MDIwLCAxMjAzNTMsIAorICAgIDM3NjUsIDkyODgxLCA5MTc2MTIsIDE2MDYsIDEyMDM0OCwgOTIyOTksIDMwOTMsIDY4NDM2LCAxMjgwNDAsIDk4MzA2MSwgCisgICAgMTE5NjEzLCAwLCAwLCA0MzEyLCA3NDA5MSwgMTIwMzM3LCA3NDk4MywgMTE5MjMsIDQwMjMsIDY4Mzk5LCA1NzYzLCAKKyAgICA5NDAxNSwgNDgyNywgMTA4OTQsIDEyODEwLCA2NDQwNiwgMTE4Nzg1LCA0NDU1LCA3NDMyMSwgNDMzLCAxMTk2MjAsIAorICAgIDY2NjYwLCAyNDk5LCA2NzE2NywgNjcxNjYsIDExODgzNywgMTE5NzMsIDEzMDg5LCA0MjkzLCAxMjAzMjksIDQyMjI0LCAKKyAgICA0Mjc1OCwgMTIxOTYsIDQyODM3LCA0MjIyNiwgMTE5MzE5LCAxMjc5OTIsIDExOTEyNiwgNTgxNywgMTI3ODA2LCA1NTI3NywgCisgICAgMzEyMCwgOTc5NywgMCwgMCwgMTEwODYsIDEwMzg5LCAxMjY0ODUsIDEyODc4NCwgNDg5NSwgNjUzNTgsIDEyNDk0MSwgCisgICAgNDM1OSwgNTg1LCAyMzgzLCAzNTA5LCA3MDAzNywgNDg2LCA0MjkwLCA1NzU4LCAxMjc1NDYsIDEyMTE2MCwgOTgzMTA2LCAKKyAgICA3MDA0LCAxMTM2NjcsIDY1ODgwLCAxMjY1MTQsIDExOTA0OCwgMjM4MCwgMTEzODAsIDk4Mzg2MywgOTM5OTYsIDIzNzYsIAorICAgIDc4ODQxLCA4MzQwMiwgMCwgNTE5NywgNzA4MzksIDEyNzA0NywgMTI3MDQ4LCAyMzY2LCAxMjcwNTAsIDExOTYwNCwgCisgICAgNzA4MzcsIDEyMDA0NSwgMCwgMTI4NTU0LCAwLCA5MTc4NDYsIDAsIDAsIDAsIDc0MTg4LCA3MTM0MiwgNzg0NTUsIDc1MDQ4LCAKKyAgICAxMTM2NzUsIDc0OTAwLCAxMjAwNDYsIDEyNzU0MiwgMTIwMDQ5LCA5ODMzNjYsIDE4NDcsIDEyMDk3OCwgMTAzMzksIAorICAgIDk4MzM2NywgNDIzODQsIDEyMTM3OSwgNDIyNywgNzQxNTgsIDAsIDc0NDk4LCA0MzAzMiwgMTIxMTI0LCA0MjM2NSwgMCwgCisgICAgMTI2NzEsIDExMzg0LCAxMjAwNTksIDc0MjY0LCAxMjAwNTgsIDY0Nzk3LCA5ODMzNDcsIDU4MjAsIDk4MzM0NiwgMTIwMDUyLCAKKyAgICAxMjAwNjUsIDEyODgyNSwgMTIwMDY0LCAxMjAwNTMsIDQyMTM3LCA5ODkzLCAyNzU0LCAxMjY2NCwgMTIwMDYzLCAxMjEyODYsIAorICAgIDczNzcsIDEyMDA1MSwgNDE3OTksIDY1NTMwLCAxNzExLCAxMjk4NCwgNDMwMzksIDMxMTQsIDYyNTUsIDEyMTEzMiwgCisgICAgNjg2NjAsIDAsIDEwODUzLCA5MjYsIDk4MzM3MSwgNzQxODQsIDEyMDkxNSwgMTIwMDU1LCAxMTkzMDEsIDQzMTc1LCAwLCAKKyAgICA0MzAzNywgNDE3OTgsIDQxMDM1LCAxMTU4MywgMTI3NzY5LCA0MTgwMSwgMTE5MDg4LCAxMTk2MDUsIDUyMCwgNDIwMCwgCisgICAgMTI2OTksIDgzMzEsIDcwMTE4LCAzMDkxLCA0MTAzNCwgNjYyOTgsIDcwMjkzLCA4MzYwLCA5ODM0NDUsIDc4MDQ0LCAzMjEsIAorICAgIDQyMjksIDY0NTQzLCAxMjg0NzAsIDY1NTYzLCAxOTQ4NzMsIDkxNzk3NCwgMjg2MSwgNDM3OTMsIDEwMDk1LCAxMjE0MjgsIAorICAgIDkxOTUsIDkyMzg2LCAxODYxLCAwLCA3MzczMywgOTE3NzgwLCA2ODgzOSwgNDMwNDEsIDAsIDQzNzk0LCAxMjg1MzAsIAorICAgIDM4NTksIDEyMTgxLCA0MTY2MCwgODIwOSwgNzA3OTMsIDczODY3LCAxMjk3MywgNzUwMTQsIDc0NzU3LCAxMjc1MTQsIAorICAgIDQxNjU4LCAxMjgzNzYsIDEyMTIzNSwgNTc2MCwgMTEzNjk5LCA3NDMsIDQ0MTQsIDEyMDc2NiwgMCwgNDI2MzIsIDEyNzIzNiwgCisgICAgNjUxNjEsIDczODk2LCAxMjg1ODksIDAsIDE0MDUsIDExOTA2MywgNDMyMjAsIDQzMzQxLCAwLCAxOTkxOSwgNzAyNzgsIAorICAgIDY0NTMyLCA2NTM2NywgNDM3MTAsIDExMTk5LCAxMjUwNzcsIDM1MTMsIDcxMTE1LCA3MDM0MSwgNDMzNDIsIDExOTA2NCwgCisgICAgNjU1MjksIDY1MzY0LCA4MzIwOCwgODMxNzAsIDY0ODUsIDEzOTcsIDE5NDc4MSwgNDE5ODYsIDkyNjc4LCA4MzIwNCwgCisgICAgODMyMTIsIDc0MDk3LCA4MzIxMywgNzQ3MSwgMTIwNzksIDY3OTk3LCA2ODQzLCA0MzI4NywgOTIzMTcsIDAsIDY3NDA2LCAKKyAgICAxMjAyMzksIDE5NDY3OCwgNzE5MTQsIDEwOTksIDEwNDkwLCA4MzIwMSwgMTA1MDEsIDY1MTgxLCA3NDQ2MywgMTI4OTUyLCAKKyAgICA0NjQsIDQxNjI0LCA2NTI4MywgNjc2NjMsIDc4MjIyLCAxMzQ2LCAxOTQ2MDksIDY1Njc5LCA2NDU3MywgNjQ4OTcsIDQyMywgCisgICAgMTgxOCwgNjUxNDQsIDgyOTYzLCA4MjcyLCAxMjc4MTIsIDE5OTExLCA0MjE4LCAzMDg3LCA2NDk2MCwgMTIxNDQ3LCAKKyAgICA0MzU2NCwgMCwgOTgzMTgyLCA5NTg0LCAxMDQ2NSwgOTgzOTAyLCA3NDM1OSwgMTI2MjYsIDkxMDYsIDAsIDQyNjQyLCAKKyAgICA3MTIzNSwgNjQ3NTAsIDkzOTAsIDAsIDQxNzk3LCAxOTQ3MzAsIDEyODMzMywgMjY1LCA0MTc5NSwgNjQ2NjYsIDc0NjI4LCAKKyAgICA0MzUzMCwgMjc1MiwgMTI3MzY1LCAxMjg0NTksIDEyNjQ4MiwgNTksIDk4MzY3MSwgMTIxNDEwLCAxMTE0OSwgNzgwNzQsIAorICAgIDc3ODczLCA0MTgxMCwgODMxNjIsIDcwMTAsIDAsIDQxODA5LCA0MTQ5NSwgMTE5MzY0LCA1ODc3LCA0MjI1MiwgNDIyMTMsIAorICAgIDgwMDksIDMzMDUsIDQzMDMzLCA1MTEsIDkyNzAwLCA0Mzg0OCwgMTMxMjcsIDEyMDA2NywgOTgzOTQ2LCA3NDM5NywgCisgICAgMTIwMjM1LCAxMjg2NDEsIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDc1MDE3LCAyMTAzLCAxMDM4NywgNDQ1MywgCisgICAgNDMyNzYsIDkxNzc4MywgMTExNjksIDEyODkzOSwgNjQ4MSwgNDEyMTMsIDAsIDAsIDEyOTEzMywgMTE5OTI5LCA0MTk4MywgCisgICAgNzQxOTgsIDY2MTcsIDkxMTYsIDExOTY1NCwgOTI5OTUsIDQ2MiwgNjgxMTAsIDEwNDkzLCAxMjE0NDksIDgxMjksIDkyOTk0LCAKKyAgICAxMjgzNjUsIDc0NDcxLCA2NjQ0LCAxMTY1OCwgMCwgMTI4MjQ1LCAzNDUyLCAxMTkwNiwgOTU4MSwgMTM4NSwgMzA5OCwgMCwgCisgICAgMTE5MDEzLCA0MzM0MCwgMTExMjMsIDQxMDMzLCA2NDkzLCA0MjYyNiwgMCwgMTI5MDUxLCAxMTQyNiwgNzc4ODcsIDE2ODEsIAorICAgIDExODc4OSwgMTIwNCwgMzc1NSwgNjQ2NjEsIDcyMzUsIDEwMTcwLCAzOTY2LCA4OTExLCAwLCA0MTg0MSwgNDMzMzgsIDAsIAorICAgIDExOTMyMywgNTcyNiwgNjQ5MTUsIDQyMTc1LCA5ODM5MTMsIDAsIDQxNDk3LCA2NTA0NCwgMTIwMTA5LCAyODUxLCA0MzAxNywgCisgICAgOTgzNTg5LCAxMjA4OTYsIDQzNzMsIDc4MDU4LCAwLCA5NTg3LCAxNzg5LCA2NjcxLCAxMjg4NDAsIDMxMDAsIDAsIDY1MzYwLCAKKyAgICA5MTc1ODksIDkyMzY1LCAxMjgyMDIsIDY0OTIyLCAwLCA4MTkwLCAxMjA4MywgMCwgODMxNDEsIDY1MDYsIDY0MzEyLCAKKyAgICA3NDM3NCwgMjM2OCwgOTgzMTg3LCA0NDE5LCAxMjEyNTksIDExOTEyNSwgMzQzOSwgMTgyNSwgMTE5MiwgMTIwMTA2LCAKKyAgICA4ODkxLCAzMDgwLCAxMjAyMjgsIDIzNDcsIDU0MzAsIDEyMDEwNywgODk5MCwgMjg0OCwgOTI5ODEsIDEyMTM3MiwgNzM5NDIsIAorICAgIDI0OSwgMCwgMCwgMCwgMTIwNjU4LCAxMTkzMjQsIDEyODcxMiwgODg4MywgMTE5ODYwLCA3MjgsIDExMTczLCA5OTUsIDAsIAorICAgIDEyMTA0NywgNjQ4MjYsIDEyNDkzMSwgOTE3Nzk4LCAxMjgzNDgsIDAsIDE5OTQ1LCA4MDkxLCA1NTgsIDAsIDEyMjczLCAKKyAgICAxOTQ4MTQsIDY3NzE0LCAxMjExMiwgNjcyNzIsIDY3MjY1LCA2NzI3MywgNjcyNzQsIDEyMzM1LCAxMjAxMDQsIDY4MDE5LCAKKyAgICAzNDQzLCAzMTI5LCA2NzI2NywgMjEwMiwgNjU0NDUsIDc4MjU4LCA2NDg5MSwgMCwgNzcyNSwgNjUxMDgsIDExMTIwLCAKKyAgICA5MjA1LCA4NjI0LCA2OTI0NiwgMTI0NDYsIDQzMjk1LCAxMjg1MTksIDQxODk0LCAwLCA2Mjc3LCA0MTY3MiwgNDE4OTMsIAorICAgIDEwMDEwLCAxMjczODEsIDM1NDAsIDEyMTQ1MCwgODM1LCA3MTM0MCwgNjk4MTYsIDExOTg1NCwgNzQ0MDgsIDAsIDY3MTA4LCAKKyAgICA1NDI2LCA0MjU4LCA4MzE4OCwgMTIwODU4LCA1NDI0LCA5MjMwNiwgODI4MywgMTI3OTc4LCA1NDM0LCA4MzE5NiwgCisgICAgMTI5MDI3LCAxOTkxNywgMTE0MDgsIDAsIDExOTQ3LCAxMjgzMzAsIDE0MDQsIDMwOTUsIDExNDMyLCAxMjExMjIsIDM0NjQsIAorICAgIDY0ODYsIDQ4MTksIDEyODIzMywgMTI5MTIzLCA1NzAsIDgwOTUsIDM2NzIsIDExOTg2NCwgMTQ5OCwgNjc4NjYsIDAsIAorICAgIDEyODUzOSwgNDMxLCA2NzgyMCwgMCwgMTI4MTgyLCAxMjgwOTYsIDY4MTY3LCA5ODM2NjMsIDEzMDk2LCAxMjg2NDMsIAorICAgIDEyMTAxOCwgNDM0MDgsIDk1MTYsIDEyODUzOCwgNTI2OCwgNDIyMzAsIDQyMjIwLCAwLCA0NDUwLCAxMjA1MTEsIDExNTQ3LCAKKyAgICA0MzQxNywgMTI4NTQyLCAzNTYsIDM0NzcsIDIyNywgMTA0ODgsIDY4MjAzLCAzODIsIDExNDE4LCAwLCA1ODc4LCA5ODM3OTksIAorICAgIDAsIDAsIDAsIDY0ODQsIDI1NDEsIDY2MDM5LCAxMTM3NzcsIDc4MTU3LCA5MjcyMywgMzU0OSwgMTk1MDY3LCA5MTEwLCAKKyAgICAxMTk2NjUsIDI3NDMsIDAsIDQzMjkwLCAxMjg1ODUsIDkwOTcsIDE5NTAyNiwgNDMwMTUsIDg3ODIsIDAsIDc3NiwgMjUyNCwgCisgICAgNDI3MDcsIDg1NzMsIDEyMDkwMywgMTI2NDk0LCAwLCA3MTEwMiwgNDI2OTQsIDY0OTQ0LCA4OTUyLCAzODU2LCAxMTg4MTgsIAorICAgIDEyNTExMSwgNTg3MiwgNjQ5NSwgMTI5MTI1LCAwLCAwLCA5MjU0MywgNjcxNzMsIDY3MTcyLCAxMjg0OSwgMzk1MywgMTg5NywgCisgICAgOTMwNzEsIDY1MDk0LCAxMTk5NCwgNDMzOSwgNzQ1NTYsIDkyNjU0LCA2Nzg0MywgMCwgMCwgMTE5MDg3LCA2ODQ3MywgCisgICAgNzQxMDQsIDUyMjgsIDExOTgzNSwgNzg2OCwgNDMxODQsIDAsIDEyMDk1NSwgNzM5ODYsIDQzNDM4LCAwLCA0MzAyMiwgCisgICAgOTE3NTUzLCAxMTYyLCA3NDk5NSwgMjY3MSwgMTI4NTY3LCAxMjcxOTgsIDkyNjMyLCA5MjYzMSwgMTE4ODY1LCA0NTUzLCAKKyAgICA3MzgxMSwgOTgzNTczLCAxOTUwMDUsIDExODkyOCwgNjgwODUsIDE5OTIxLCA3MzgyMSwgMTE0MjQsIDE5NTAwMiwgNDU2NywgCisgICAgNDE4OTEsIDAsIDk4Mzc4OCwgNTUyNDksIDQ4MjAsIDY1MjM5LCAxOTQ2NjIsIDAsIDE5NDY2NSwgNDMwNDIsIDExOTIxMiwgCisgICAgMTM3NywgMTI4NjksIDQ4OTcsIDQyODIxLCA5MjUwLCA3MDI3MiwgNDQzOCwgNjQzODUsIDAsIDE3NTMsIDExMzMxLCA2MTQ3LCAKKyAgICAxOTQ5NDEsIDQzMjgyLCA4ODMzLCA2OTk5OCwgMCwgNjUwNCwgNzg0MDgsIDEyMTE2NiwgMTA3MTksIDcwMjc1LCAxODk4LCAKKyAgICAxNDEzLCA0MjQ0MywgMCwgODAyLCAxMjE0MSwgMTIxMTM4LCA4MzA5NywgNjY0OCwgMTA2NzEsIDI1MjgsIDAsIDY0Nzg5LCAKKyAgICA5MTY5LCA4MzgsIDY4ODE5LCA2ODgwNywgODQ0LCA1MDE0LCA2NjI5NywgMjU2LCA2ODgxOCwgOTk5MCwgMTI4Mzk4LCAKKyAgICA0MjczOSwgOTE3ODUxLCA3NTQyLCA2NTQ2NCwgOTcyNiwgODMyMjQsIDY0ODksIDEwMDQ4LCA3NDMyNiwgNzg3MTksIAorICAgIDY2NTczLCAwLCA3ODcyNCwgNzg3MTIsIDExNzYxLCAxMjEzMTQsIDgzMjI2LCA0MTA5NCwgMCwgNzc5NTgsIDE5NDg5MywgCisgICAgNzg0MDMsIDkyNjg5LCA2MTk2LCA2OTQ1LCA5Mzk2OSwgMTIwOTQyLCA2NzA5NSwgMTIwNDkxLCAxMTgxNiwgNjg4NDYsIAorICAgIDU3MzMsIDI5MzAsIDcwMjc0LCAxMjcxNzksIDQxMDk4LCA5Mjc3MSwgNDEwOTMsIDY4ODM0LCA2NjYyNiwgNTg4LCA5NzYwLCAKKyAgICAxMjUwOTksIDE5NDcxNywgMTIzOCwgMjAwLCA5ODMyMDcsIDE2NjAsIDczOTE2LCAwLCA2NzE0MSwgNzQzNjIsIDAsIAorICAgIDkyNDg1LCAxMjQ5MzAsIDAsIDc0OTk5LCAzMzk0LCAxOTQ4OTQsIDEyMDY2OCwgMCwgNjk5OTYsIDEyNzM1OCwgNjYyMTksIAorICAgIDcyNDI1LCA0MzI4NCwgNjgwNzIsIDc4MTcsIDE4NDEsIDExMDU1LCA2NjgzNSwgMTk0OTc5LCA3NDYwNywgMTY2OSwgCisgICAgMTA3NzYsIDc0NTM0LCA3NzAxLCAxOTQ5ODAsIDk4MzQ1MCwgNzQ5OTIsIDE3MzIsIDQwMzAsIDk4MzQ0MiwgMzk2MywgCisgICAgNjUzMzUsIDEyNzUzMCwgNDE3NjgsIDY0OTEsIDY1MzMzLCA2NTMyNCwgOTE0LCA2NTMyMywgODA3MSwgMzUzOCwgOTgzODQ1LCAKKyAgICAyMjg3LCA2NTMyOCwgOTI0NDEsIDc0MzY3LCA3NjE0LCAwLCAxMTgxOSwgNzE5MDgsIDEyMDA5LCAxMjM5OSwgMTIxMjE3LCAKKyAgICA2Nzg1MiwgNjU1MzcsIDAsIDEwODQxLCA0MzQzMCwgNTMwMSwgMCwgOTI2MTgsIDU3MzQsIDg5NjAsIDAsIDcwMTIzLCAKKyAgICA2NTMxNywgNzc4ODAsIDAsIDU4NzYsIDcwMzc0LCAxMjMwNCwgMCwgMCwgNjUzMTUsIDkyNjcwLCAxMjg1MTEsIDcxODYyLCAKKyAgICAwLCAxMjc5NTcsIDExOTYyMSwgMTExMTQsIDcxOTA5LCAxMjQ0NywgNjQ0ODYsIDEyMTIzNiwgMTI2NTYyLCA5ODMxMjksIDAsIAorICAgIDEyMTM5MywgOTgzODAyLCA0Mjc2NywgMTA5MTUsIDk4MzE3NCwgMTIwMDcsIDQzNjk1LCA2ODAzMywgMTE5NzUsIDE5NDg3OCwgCisgICAgMCwgOTI2MDQsIDI1NTUsIDg2MjksIDEyODY0MCwgNDExMzMsIDQxODcyLCA0MzcwNiwgNDQ5NiwgMTk0ODc5LCA4MzEwOCwgCisgICAgMTIwMjQxLCAxMjgxNjQsIDAsIDAsIDk4MzU1MywgNjQ3MzAsIDcwMDQxLCA2NjcxNCwgNjgyMjIsIDAsIDcwMDc2LCAKKyAgICA2NTU5NiwgNjc4MzcsIDExNDE2LCA0MjgwLCA2NzY1NSwgODc2NSwgMTI3ODQsIDc3OTIsIDEzOTMsIDc4MTkxLCAxMTE1NywgCisgICAgNzQzODYsIDEyNzI3NCwgODIzMywgMTI4MjAsIDk4MzczMCwgNjY4MywgMTI1MTEyLCAzNDQyLCAxMjE0NCwgMjg0MSwgCisgICAgMTI1NDMsIDAsIDE0NzMsIDQyODIwLCA2NDMyOSwgMTIwODgwLCA2NzI0MywgNjg2NDIsIDY0ODgsIDM1NywgMTA0OCwgCisgICAgNDExMDAsIDcyNDE3LCA0MTEwNCwgOTQwMDMsIDM0MDYsIDEwNTQsIDcxMzIwLCAxMDQwLCA2NTQ1MCwgOTgzMzg1LCA0NDM0LCAKKyAgICAxMDY5LCAxOTQ3ODQsIDExODg2MiwgNjU3MzcsIDEyMTIwMiwgMTI4NzA1LCAwLCA4MzIxMSwgOTY5MywgNDE5NDMsIAorICAgIDY4MzA1LCA0MTkzMSwgNDE3NTksIDEyNzU3LCA0MzUzLCA5ODMzNTMsIDEwNTksIDk3OTAsIDg5OTUsIDExOTk3NCwgCisgICAgOTE3NzcwLCA2NTkzNywgNzg1NzIsIDQxNzU4LCAxMDY0NiwgMTIxMTU5LCAxMTg4MzMsIDkyMzcyLCA3MDQyNCwgNzQ4MzAsIAorICAgIDc4NTY5LCAxMjc0MywgOTgzNjg5LCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIDEyMjA3LCA3Nzg5NSwgCisgICAgNjMzNSwgNDM5MTksIDExMzEyLCA2NDgwNywgOTI5NjIsIDY5OTg5LCA0MTc2NywgMTE5NjI5LCA5ODM3NjQsIDQzMDIwLCAKKyAgICA3NDk3NCwgMzk1NSwgNzQyNTQsIDEyMDYzMiwgOTgzNzU0LCA5MTc4NjEsIDcwMTg3LCA2OTk3NSwgOTc3MCwgOTI0NiwgCisgICAgMTIyMzAsIDEyNTA0NywgMTI5MTA1LCA3ODU4MCwgMTA0NDgsIDQxNzgzLCA0MTc4NiwgMTI3MDkzLCAxMjc5NywgMjc1NSwgCisgICAgNjQ1NzEsIDc4NTc4LCAxOTQ5MjcsIDQ4NTcsIDk4MzU3NywgNDQyOCwgMTI3OTQsIDczNzU1LCAxMjgwNjEsIDc4NTc0LCAwLCAKKyAgICAxMTExNiwgNDM4NDIsIDU3NDcsIDc4ODI1LCA3MDQ3MSwgNzk3OCwgNDEwOTIsIDc0NTcxLCAwLCAxMTkyNCwgNDM4MTIsIAorICAgIDQyMTQ0LCA2NTAxNSwgMCwgNTYzLCAwLCAxMjk0MTIsIDEyNzk4LCAxMTI3MSwgNTcsIDkyNzE3LCA4MzQ5NSwgOTE3ODYwLCAKKyAgICAxMTkwNDMsIDkxNzYxOCwgOTQwNTEsIDQzMTM3LCA2OTQsIDk4MzcxOSwgOTg3NiwgMCwgMTE5MTY4LCAwLCA3MDM5MiwgCisgICAgNjQ1MzcsIDEyNzkxNCwgMjc3LCA3NDM4NSwgNzIyOSwgMTI3NjEsIDk4MzE0NSwgNzQ0NjYsIDEzMDI1LCA2NDgxMSwgCisgICAgODc1NywgNzg4MjQsIDc4MTg4LCAxNTc0LCA3MzgxLCAwLCAyNTI1LCA0ODUyLCA1NzQ5LCA2ODQ2NSwgMTMwMjcsIDQyODI0LCAKKyAgICAxMjA1NzQsIDEwMzksIDcxNTEsIDEwMTU1LCA1NzQ1LCAxODgsIDQxODU4LCAxMTU5MiwgMTI5MTU2LCA2OTcyNSwgOTA1NSwgCisgICAgNDE4NTMsIDQ4NTgsIDc1MDAwLCA5MTc5OTAsIDQzNiwgNDc3MSwgOTE3OTM2LCAyNzg2LCA5MzAyOCwgNDg1NiwgODA1MSwgCisgICAgOTI1MDAsIDExOTYwOSwgNzEzMjcsIDk2NDQsIDcxMTMzLCAxMjUwMDksIDEyODg3MywgMTk0OTE2LCAxMjA3MzIsIDY2NzEwLCAKKyAgICA2ODA4NCwgOTgzMzYxLCA3MzkwNiwgNjc0MDksIDEyNzExNCwgOTE3OTE2LCAxMDIzNCwgNTg0MywgMTE5MzksIDcwMzQ2LCAKKyAgICA0MjE1NywgMCwgMzE1NywgMTk0NjU5LCA2ODM5MywgNzUwMzUsIDM1MDQsIDcwNDIyLCAwLCAxMDgyMiwgNTE0OSwgNjYwMjksIAorICAgIDEwMjI2LCA2NTE0MiwgMTI4MDI1LCAzNTk0LCA0MjQyNCwgMTI0OTkzLCA0MCwgMTI2NTcsIDk4MzY2NSwgMCwgMzg2LCAKKyAgICAxMjE0NjcsIDg4MzQsIDEyMDk3NCwgMTI4MTUsIDQzNTc0LCAxMjE0MzAsIDczOTA3LCAxMjc3OTIsIDcwMTEzLCA3MjIwLCAKKyAgICAxMTgzOSwgMTIxMTQzLCA3NDMxNiwgMTk0NzUyLCA2NTMyMiwgNDMwNCwgNzQ1MDMsIDgxNjAsIDc0MzE0LCAxOTQ3NTMsIAorICAgIDEyMTI3NiwgMCwgMTI4NTI2LCAxMzQ4LCA5MjM0OSwgNzg1OTcsIDEyMTEzOSwgMTMzMDMsIDcwNDA2LCA5MjM5MiwgCisgICAgMTI4NDc0LCA3NTk5LCAxMjc4LCA0MzYxNiwgMTMyNjksIDEyNzgwNSwgMTI3MTEwLCA3NDM4NywgNzgxNzksIDc4NTk4LCAKKyAgICA3NDQ5MiwgNjA5NywgNzU2OCwgODc4MCwgNDk4MiwgMTI3NDY0LCA3NDUwMSwgMTk0NzYzLCA3ODU5MiwgNjg3NDUsIDI2NzIsIAorICAgIDM3MzUsIDEyNzQ3MCwgMTMxMzgsIDQyMjY2LCA5NDg0LCAxMDcyNCwgNDEyMDIsIDcxMzY0LCAxMjgzNzAsIDQzNzQyLCAKKyAgICAxMjgzNzMsIDk0ODcsIDExOTk1OSwgNjg3ODUsIDM4NDIsIDcxOTExLCA3ODY2OCwgMTI0NDIsIDYxOTMsIDk3OTEsIAorICAgIDExOTM0NCwgMCwgNDI1MTYsIDcyMjgsIDc1NTksIDc0ODAzLCA2NjcyMSwgNzg3MywgMTEzOTksIDExOTIxOSwgMTk0NjkxLCAKKyAgICA3MDAwNiwgMTk0NjkwLCAxMjc1MzcsIDM2MDQsIDEyMDY4MywgMTE5MTg4LCAxMjg4NzcsIDc4NTQwLCA3ODU0MSwgNDI1MDcsIAorICAgIDE5NjIsIDQzMzA1LCA3ODQ3NiwgNDI1MDUsIDExNjYwLCAxMjEwMjEsIDIwNzIsIDkyMzEyLCA2OTk1LCA3NDE3MywgNTQzNywgCisgICAgNzQxNzQsIDEwNjY5LCA4NzAyLCA3OTY0LCA5MjM1MiwgOTgzNzc2LCAxOTksIDY4MDc1LCA0MTA1LCAxOTQ4NDUsIAorICAgIDEyNzk0MiwgNzUwMDYsIDE5NDcxMCwgNjc4MTgsIDEzMTQ4LCA3NTYwLCA3ODQ3OSwgOTIyNiwgNzg0NzgsIDE5NTA3MCwgCisgICAgNjQ3MiwgNjU4MTQsIDcxOTE5LCAxMjEyMTgsIDQ3MjQsIDEyODQ5MSwgMTk1MDQxLCA5MTkxLCAxOTQ2NDUsIDY0NDMyLCAKKyAgICAxMjAyNzAsIDgyOTg3LCAxMTkxOTAsIDEwMTk2LCA3ODg2LCAwLCA2NTg1LCAwLCA2NjgwLCAxOTUwNDIsIDk4MzQyNSwgCisgICAgNzE4NzIsIDY2NzksIDc0NDEyLCA5MjI1MSwgMTk0ODY2LCA3NDQyMSwgMTEzODIsIDEyODI1NCwgNDM4NjIsIDc4NTkxLCAKKyAgICAxMTM3MzMsIDE5NDY3OSwgMTk0ODMyLCA2NjgxLCAxMjc0ODIsIDEyNjkzLCAxOTQ4MzYsIDQyNzI3LCA3ODE5NiwgCisgICAgMTI4MjUyLCA0Mzg3NCwgNjU0NDIsIDY4MDQ3LCA2OTczMywgOTk4OSwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDExMzIxLCAKKyAgICAxMjg4NDUsIDEyMDgwOSwgMTk0ODE5LCA1Mjk3LCA3MDQyLCAxMzI4NCwgNjExMiwgNzk2OCwgOTMwMTAsIDczOTI3LCAKKyAgICA5MjQ0NCwgMTI3MzM2LCA2NTc0NiwgMTE4Nzk2LCA2OTg4OSwgNzQzODksIDEyODY5NiwgNDM0MiwgNDI4MzksIDEyMTMzOSwgCisgICAgMTY3NywgOTE3NTkyLCA4Mjk4OSwgMTI2NTkwLCA4MzQxNSwgMTEwOTEsIDExMDExLCAyNzE5LCAwLCAwLCAxMTk1OTUsIAorICAgIDEwMTYwLCAwLCAxMjkxNTAsIDc1ODUsIDY1MTY5LCAyMDUyLCA0MzA4LCA4MzQxNCwgNDMwMDAsIDc1MDUsIDU0MywgCisgICAgNjQ5MTYsIDY0NzM2LCAxMTg4MzUsIDAsIDY0NjU1LCA5ODMwNTMsIDExODkyMiwgMjA2NCwgMCwgNDMxNTgsIDc5MDIsIAorICAgIDk4MzIzMSwgNjUyNjUsIDE5NDYzOSwgMTIxMDgwLCAxMjcxNzAsIDEyNzA0MSwgMTI4MDA2LCA5MjU1MCwgOTgzMTg2LCAKKyAgICAxMjk5NCwgOTI3MjgsIDEwODI4LCA3NDM3OCwgNjIyOCwgNDMwNywgMzQ4MiwgMTI4NTI3LCA4MzIzMSwgNzIzODksIAorICAgIDgzMDc5LCA1MDYsIDc0NTczLCA0MTE5NCwgNjU3MzUsIDIwNTUsIDQzMjU1LCA0MTE5NSwgMCwgODE2OSwgMTIxNDA3LCAKKyAgICA4ODQxLCA5ODM3NDcsIDUxNiwgOTM5NzQsIDIwNjMsIDExOTA1MSwgMzQsIDEyODg1MCwgMTIwMTg2LCAxMTUwNCwgMTYxMiwgCisgICAgNzQzMzMsIDEyMDE4MiwgMTE4MjcsIDY3MTY1LCAxMjAwMSwgMTIwMTc4LCAxMDI0MiwgNjQ1NjQsIDEyMDE3OSwgNjc5ODYsIAorICAgIDY1ODQsIDc3NDksIDExMDM3LCAxMjg3NDMsIDE3NTgsIDExOTA3NCwgMTA2NjcsIDEwNTYwLCAxMjAxOTcsIDkyNTkzLCAKKyAgICAxOTM1LCAxMTUxNywgMTIwMTkzLCAxMjAxOTYsIDgzMDgyLCAxOTMxLCAxMjAxODksIDc0ODM5LCAxMjAxOTEsIDEyMTcsIAorICAgIDY0NzAyLCAxMjY0MywgODI1LCAxMjc4MzgsIDE5NDkwNSwgMTIyOTQsIDkyNDI4LCA3ODgzNCwgOTEzOCwgNzg4MzEsIAorICAgIDc4ODMzLCAxMjYzMSwgNzE4NzEsIDExMDgwLCA3NDU1NCwgNjQwMDAsIDU1OTEsIDEyMzksIDEyNzE5OSwgMTEzMTMsIAorICAgIDE5NDgwMywgMzQwMywgOTgzNjU1LCAxMjAyNzEsIDY0MzY0LCA5MjI2OSwgMTIxMjgyLCA3MjQzMSwgODk5OCwgMTI5ODgsIAorICAgIDExOTk4MywgOTE1MiwgOTIxNjEsIDAsIDEyNjQ4NCwgNjc1ODksIDQxODUwLCA2NDI5MCwgMzQzMywgOTIzOTMsIDEyNjE1LCAKKyAgICAxNTk0LCA0MjE5MiwgNjkxNCwgNjYzOTIsIDAsIDExOTU2OSwgNzQ1NjUsIDQxMzUzLCA2NzYwMiwgNjc2MTEsIDQzMzcsIDAsIAorICAgIDEyNzI5NiwgOTE4LCA2NTAzNSwgNDEzNTEsIDc2ODEsIDE5NDkwMCwgNDI1NzcsIDQxMzkzLCAxMjY2OCwgNzIzOTUsIAorICAgIDI0NzcsIDEyNzI4NSwgMTIxMjQ5LCAxMTg4ODAsIDAsIDY3NjA0LCA2NzY4MywgMTI3MjM1LCA1NzMsIDEyNzI4MiwgCisgICAgMTIwNTQzLCAxMTQxNywgOTI2NjEsIDExOTgxNCwgMTE5MzA5LCA2NzU5OSwgMCwgNzI0MTAsIDY3NjA3LCAxMTQ4MiwgMCwgCisgICAgMzk4MSwgMzM1NywgMCwgNDIyMjMsIDQyMDcsIDEyODgsIDc4NTAzLCA3ODgzOSwgNjc3MjgsIDc3OTA3LCAxMTU4OSwgCisgICAgNDIxOTUsIDc0NDc3LCAxMTk5OTcsIDEyNzE3OCwgNjQ2MDIsIDY3NjE4LCA5MjUzOSwgMTIxMzY2LCA0Mjc4OCwgNjg0MTYsIAorICAgIDY0NDgwLCAxOTQ4NzUsIDg0MjMsIDMzNDgsIDQ0OCwgNjY5MDcsIDk3MTcsIDExOTMxMSwgMCwgOTk3LCAwLCAwLCA5MjU3NywgCisgICAgMCwgMTE0NDAsIDExMzc5LCA0MjAwMCwgMTMxMzksIDQyMjIxLCA2NTAxMywgMTI2OTk5LCAxMjc3NjAsIDcyMzkwLCAwLCAKKyAgICAxMTkyMjgsIDEyMDM1LCAwLCAyODE4LCAwLCA3NDQxMSwgNzM3OTMsIDk4MzI3OCwgNDE3MiwgNzEyNTIsIDExOTk5MiwgCisgICAgODM3MywgMTA4NzMsIDEyMTk3LCAxMjUwNzQsIDE5NTAxNCwgOTIyNjUsIDY5NzA2LCAxMjg1NDAsIDY4MzQsIDc0MzQ3LCAKKyAgICA3NDk1OCwgMTI5MDMzLCAxMjY5ODIsIDc0NTYzLCA2NDgyOCwgMTE0MTksIDE5NDg2OCwgNzY2LCAxMjU3LCAxOTQ1OTgsIAorICAgIDExODg0NSwgMTEzODEsIDMyNjUsIDY2NjE3LCAzMjc0LCAxMjY2MjksIDgzMjU0LCA3MTg2MSwgOTgzOTUwLCA3NDUyMiwgCisgICAgNDE5ODksIDEyMTMxNywgMCwgMTEzNzY5LCAzMjYzLCA5MTc5MjIsIDY1NjcyLCA2OTI0MywgMzI3MCwgNjQ1MzksIDExNDg5LCAKKyAgICA5MTc5MTEsIDAsIDAsIDcxMTI3LCA5NTA1LCA2NTUxOCwgMTI4NDk4LCA3NTYsIDE5NDYwNSwgMCwgMCwgMTk0NjIxLCAKKyAgICA3MjYxLCA5MjU0NywgMTg2LCAwLCAxMTkxNTYsIDU3NzAsIDEzMTc5LCA2NTgzMCwgMTI2MTIsIDEyOTQ5LCA2NDg1NiwgCisgICAgMTI4MDAsIDk4MzkwMSwgNzQyMDMsIDY0NzE4LCAxMTUwNywgNzg2NzMsIDkyNDM0LCA3NDYyNiwgMTEzNzYwLCAxMTU3OCwgCisgICAgOTgzODM3LCAxMTkyOTYsIDEyMDk3MCwgMTIxMTI3LCAxMjUxMDEsIDAsIDcwMDgzLCA5MjU0LCA2Njg3NywgMTc5NCwgCisgICAgNjgzMTAsIDY0NTIxLCA1NjI0LCAxMjAyMjAsIDEyMDIyMSwgMTE5OTU4LCAxMjAyMjMsIDM2MTcsIDY2NjM2LCA2NDg4NiwgCisgICAgOTQwNjEsIDY4NjU5LCAxMjAyMTMsIDEyMDIxNCwgMTg3MiwgNjY1MDgsIDEyMDQ2NywgNDEwNzksIDEwNzQ4LCA1NTAyLCAKKyAgICAxMTkzMzAsIDQ0NTIsIDEyODA4OCwgOTgzNzcxLCA5MjUyNiwgNDUxMSwgMTIwOTU4LCA5ODM4NzcsIDY0Njc4LCAxMTQyNSwgCisgICAgMCwgNDMyNDUsIDEyMzEsIDY4ODYxLCA2OTkwMywgMCwgOTAwMywgODE5MiwgMCwgNTMwNSwgOTY1MywgMTA2MTYsIDg2OTQsIAorICAgIDk1NDYsIDAsIDEyODMzMiwgNzA0MjEsIDEyMDIwMCwgNjUyMDUsIDEyMDIwMiwgNjQwNjMsIDk4NzgsIDc0NzgwLCAKKyAgICAxMTk2MjYsIDc4MjAyLCA2NDA1OCwgODc5OSwgNDIxMzEsIDEyODY2MiwgNjQwNjIsIDEwMjgsIDY0MDYwLCA2NDA1OSwgCisgICAgODM3LCAxMDU2NywgNzIzODQsIDQzMTAzLCAwLCAxMjA3NTQsIDExNDI3LCAyOTAyLCA2NDA0MywgNjQwNDIsIDQzNzQ5LCAKKyAgICAxMDc1NiwgNjQwNDcsIDQyNjA2LCA2NDA0NSwgNjQwNDQsIDQzOTc5LCAxMDA3NiwgNjQwNDAsIDQzMDYwLCAxOTQ5NDIsIAorICAgIDEwMzQsIDMzOTIsIDgzMzM2LCA0MzA5MSwgNjQwMzMsIDY0MDMyLCA0MjczNSwgNDM0OTgsIDY0MDM3LCA2NDAzNiwgCisgICAgNjQwMzUsIDQyOTEsIDEyOTE1NywgNjQwMTUsIDY0MDE0LCA2NDY4MSwgODMzOTQsIDgzMzk1LCA3ODE0NSwgNzE4OTgsIAorICAgIDQzMDkwLCA4MzM5MSwgMzQ3NiwgODk3MywgNjQwMTIsIDQyNDczLCA2NDAxMCwgNjQwMDgsIDY0MDA3LCAyMDAzLCA3NzA2LCAKKyAgICA2NDUxNywgNzgxNTMsIDI1MzgsIDY0MDA5LCAyMDQsIDAsIDQ4MDIsIDQxMTEsIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCAKKyAgICA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDk4MzI2OCwgMCwgNDc2NywgOTM0MywgNjQwNDksIDY0MDQ4LCAxMjAwMzQsIAorICAgIDExMzMsIDY0MDUzLCA2NDA1MiwgNDM0NTMsIDY0MDUwLCA0MTM0MCwgMTE4OTc1LCA4MzI2MSwgMTAwMDUsIDEyMzI5LCAKKyAgICA0MTMzMywgODMyNTksIDg0ODksIDE5NDIsIDkxNzkyMSwgMTk0ODM0LCA0MjUyMCwgNjU1MTAsIDEyNTA0NCwgNjgyOTEsIAorICAgIDEwNzYwLCA2NDAyMywgNjQwMjIsIDY0MDIxLCA2NTgyLCA0MzY3MCwgMTI3Nzk4LCA2NDAyNSwgOTE2NywgNDIxNTEsIAorICAgIDc4MjQ0LCA5ODMyMzIsIDIwMjYsIDY0MDE5LCA2NDAxOCwgNjQwMTcsIDY0MDE2LCAxMjc2OCwgMTIxMzYxLCA3NTgyLCAKKyAgICA3ODI1MiwgNzgyNDgsIDc3OTE0LCA3ODI0NiwgNzgyNDcsIDEyMDc5MSwgNzc5MTUsIDc4NzY2LCA2Nzg4LCAxMzA5NCwgCisgICAgNzc5MjAsIDc1MzIsIDQxNDE0LCA3ODUyMCwgMzE3OSwgNzg1MTgsIDY0NzY5LCA3ODUxNCwgNzg1MTcsIDExNDYxLCAKKyAgICA3NDQ1NCwgMTA3NTEsIDkwNTEsIDEyMDcyMCwgNjcwOCwgMTA1MzUsIDExODk1NSwgNjgyMTgsIDU1Mjc0LCAyMDA4LCAKKyAgICA2NDAzMSwgNjQwMzAsIDI5NCwgNDE4NzQsIDgzMzgzLCA2NDc5MCwgNjU5MjksIDgzMzc2LCA4MzMzNywgODMzNzksIAorICAgIDgzMzgwLCA2NDAyOCwgODE0NiwgNjQwMjYsIDQxNzg4LCAxOTQ4NDQsIDAsIDQzNTEsIDYzNDMsIDQzMjQ3LCAxMTk4ODgsIAorICAgIDcwMTUzLCAxMTk4ODYsIDExOTg5MSwgNzIzODcsIDExOTg4OSwgMTE0MzMsIDExOTg5NSwgMTE5ODk2LCAxOTQ2NTUsIAorICAgIDc4MDEsIDY1NTc4LCA4MzM2MSwgMTI5MTUsIDQzOTY4LCAzMjk3LCA5Njk5LCA4MzM1NywgMTEzNSwgODMzNTAsIDgzMzUxLCAKKyAgICA4MzM1MiwgMTk5NSwgNjcyMiwgOTgzOTI1LCAxMjg4MTUsIDI1NTIsIDQxNTQ2LCA2MCwgNjgzOTQsIDg2NDksIDQxNTQ5LCAKKyAgICA3ODQ5NiwgNzIzODYsIDgzMzcxLCA2NjgyLCA4MzM2NSwgNzg2NzksIDQzODMzLCA0MTU0NywgOTgzNjMwLCAyMDEzLCAKKyAgICA4MzM2MiwgNzg1MzAsIDc4NTMyLCA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgCisgICAgMTE5OTA4LCA5MTM3LCA3MTU1LCA4OTk5LCA5MTc5MDEsIDc4NTMzLCAzNDY2LCAwLCAxMjE0NjYsIDE5OTYsIDAsIDM0NTMsIAorICAgIDYyODIsIDAsIDIwMDIsIDIwMDAsIDEyMDE3NSwgNTM3LCA5Mjk3NiwgNDE3OSwgNjUxMTksIDE5OTgsIDEyMDc0NiwgMTg0MiwgCisgICAgMCwgOTI2NzQsIDk2MjgsIDY4NDQ2LCAxMjA4MSwgOTgyNiwgNjQ1MDIsIDE3NjcsIDAsIDk4MzI0OCwgMTIwMDAxLCAKKyAgICAxMjAyMDEsIDk4MzY0NiwgMTI0OTc1LCAxMjc5NTIsIDMwNTksIDQ0MDI0LCAxMjAyMDQsIDQzNDkxLCA5MjY5MywgMCwgCisgICAgMTIxNDcyLCA5MjQ1MiwgNDEwMCwgOTIwLCAxODExLCAxMzU1LCA0MzE4OSwgMCwgMzU5MiwgMTAwNzgsIDAsIDc4MTYyLCAKKyAgICAxMTk1NTgsIDg1OTIsIDY1ODcwLCA2NjQxNywgNzQ1MDQsIDEwNzQyLCA3MjQwMCwgNDI5MTgsIDE5OTQsIDkyODEsIDMyOTYsIAorICAgIDEyODY1LCAxOTk3LCAxODk1LCAKIH07CiAKICNkZWZpbmUgY29kZV9tYWdpYyA0NwpAQCAtMTk4MzksNyArMjMyNjUsNyBAQAogI2RlZmluZSBjb2RlX3BvbHkgMzI3NzEKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbGlhc2VzX3N0YXJ0ID0gMHhmMDAwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19lbmQgPSAweGYwMWM5Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbGlhc2VzX2VuZCA9IDB4ZjAxY2I7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVfYWxpYXNlc1tdID0gewogICAgIDB4MDAwMCwKICAgICAweDAwMDAsCkBAIC0yMDAzNCw2ICsyMzQ2MCw4IEBACiAgICAgMHgyMTE4LAogICAgIDB4MjQ0OCwKICAgICAweDI0NDksCisgICAgMHgyQjdBLAorICAgIDB4MkI3QywKICAgICAweEEwMTUsCiAgICAgMHhGRTE4LAogICAgIDB4RkUwMCwKZGlmZiAtLWdpdCBhL01vZHVsZXMvd2lucmVwYXJzZS5oIGIvTW9kdWxlcy93aW5yZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmNzc3NQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvd2lucmVwYXJzZS5oCkBAIC0wLDAgKzEsNTMgQEAKKyNpZm5kZWYgUHlfV0lOUkVQQVJTRV9ICisjZGVmaW5lIFB5X1dJTlJFUEFSU0VfSAorCisjaWZkZWYgTVNfV0lORE9XUworI2luY2x1ZGUgPFdpbmRvd3MuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSB3YXMgY29waWVkIGZyb20KKyAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9mZjU1MjAxMi5hc3B4IGFzIHRoZSByZXF1aXJlZAorICAgaW5jbHVkZSBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudCBpbiB0aGUgV2luZG93cyBTREsgKGF0IGxlYXN0IGFzIGluY2x1ZGVkCisgICB3aXRoIFZpc3VhbCBTdHVkaW8gRXhwcmVzcykuICovCit0eXBlZGVmIHN0cnVjdCBfUkVQQVJTRV9EQVRBX0JVRkZFUiB7CisgICAgVUxPTkcgUmVwYXJzZVRhZzsKKyAgICBVU0hPUlQgUmVwYXJzZURhdGFMZW5ndGg7CisgICAgVVNIT1JUIFJlc2VydmVkOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFVTSE9SVCBTdWJzdGl0dXRlTmFtZU9mZnNldDsKKyAgICAgICAgICAgIFVTSE9SVCBTdWJzdGl0dXRlTmFtZUxlbmd0aDsKKyAgICAgICAgICAgIFVTSE9SVCBQcmludE5hbWVPZmZzZXQ7CisgICAgICAgICAgICBVU0hPUlQgUHJpbnROYW1lTGVuZ3RoOworICAgICAgICAgICAgVUxPTkcgRmxhZ3M7CisgICAgICAgICAgICBXQ0hBUiBQYXRoQnVmZmVyWzFdOworICAgICAgICB9IFN5bWJvbGljTGlua1JlcGFyc2VCdWZmZXI7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFVTSE9SVCBTdWJzdGl0dXRlTmFtZU9mZnNldDsKKyAgICAgICAgICAgIFVTSE9SVCAgU3Vic3RpdHV0ZU5hbWVMZW5ndGg7CisgICAgICAgICAgICBVU0hPUlQgIFByaW50TmFtZU9mZnNldDsKKyAgICAgICAgICAgIFVTSE9SVCAgUHJpbnROYW1lTGVuZ3RoOworICAgICAgICAgICAgV0NIQVIgIFBhdGhCdWZmZXJbMV07CisgICAgICAgIH0gTW91bnRQb2ludFJlcGFyc2VCdWZmZXI7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFVDSEFSICBEYXRhQnVmZmVyWzFdOworICAgICAgICB9IEdlbmVyaWNSZXBhcnNlQnVmZmVyOworICAgIH07Cit9IFJFUEFSU0VfREFUQV9CVUZGRVIsICpQUkVQQVJTRV9EQVRBX0JVRkZFUjsKKworI2RlZmluZSBSRVBBUlNFX0RBVEFfQlVGRkVSX0hFQURFUl9TSVpFICBGSUVMRF9PRkZTRVQoUkVQQVJTRV9EQVRBX0JVRkZFUixcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmljUmVwYXJzZUJ1ZmZlcikKKyNkZWZpbmUgTUFYSU1VTV9SRVBBUlNFX0RBVEFfQlVGRkVSX1NJWkUgICggMTYgKiAxMDI0ICkKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KKworI2VuZGlmIC8qICFQeV9XSU5SRVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMveHhsaW1pdGVkLmMgYi9Nb2R1bGVzL3h4bGltaXRlZC5jCmluZGV4IGVlY2RhYjkuLjQwYzE3NjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMveHhsaW1pdGVkLmMKKysrIGIvTW9kdWxlcy94eGxpbWl0ZWQuYwpAQCAtNDAsMTEgKzQwLDE4IEBACiAKIC8qIFh4byBtZXRob2RzICovCiAKLXN0YXRpYyB2b2lkCi1YeG9fZGVhbGxvYyhYeG9PYmplY3QgKnNlbGYpCitzdGF0aWMgaW50CitYeG9fdHJhdmVyc2UoWHhvT2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKLSAgICBQeV9YREVDUkVGKHNlbGYtPnhfYXR0cik7Ci0gICAgKChmcmVlZnVuYylQeVR5cGVfR2V0U2xvdChQeV9UWVBFKHNlbGYpLCBQeV90cF9mcmVlKSkoc2VsZik7CisgICAgUHlfVklTSVQoc2VsZi0+eF9hdHRyKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorWHhvX2ZpbmFsaXplKFh4b09iamVjdCAqc2VsZikKK3sKKyAgICBQeV9DTEVBUihzZWxmLT54X2F0dHIpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTAyLDcgKzEwOSw4IEBACiAKIHN0YXRpYyBQeVR5cGVfU2xvdCBYeG9fVHlwZV9zbG90c1tdID0gewogICAgIHtQeV90cF9kb2MsICJUaGUgWHhvIHR5cGUifSwKLSAgICB7UHlfdHBfZGVhbGxvYywgWHhvX2RlYWxsb2N9LAorICAgIHtQeV90cF90cmF2ZXJzZSwgWHhvX3RyYXZlcnNlfSwKKyAgICB7UHlfdHBfZmluYWxpemUsIFh4b19maW5hbGl6ZX0sCiAgICAge1B5X3RwX2dldGF0dHJvLCBYeG9fZ2V0YXR0cm99LAogICAgIHtQeV90cF9zZXRhdHRyLCBYeG9fc2V0YXR0cn0sCiAgICAge1B5X3RwX21ldGhvZHMsIFh4b19tZXRob2RzfSwKQEAgLTExMyw3ICsxMjEsNyBAQAogICAgICJ4eGxpbWl0ZWQuWHhvIiwKICAgICBzaXplb2YoWHhvT2JqZWN0KSwKICAgICAwLAotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsCiAgICAgWHhvX1R5cGVfc2xvdHMKIH07CiAKQEAgLTE2OSw3ICsxNzcsNyBAQAogCiAvKiAtLS0tLS0tLS0tICovCiAKLXN0YXRpYyBQeVR5cGVfU2xvdCBTdHJfVHlwZV9zbG90c1tdID0geyAgICAKK3N0YXRpYyBQeVR5cGVfU2xvdCBTdHJfVHlwZV9zbG90c1tdID0gewogICAgIHtQeV90cF9iYXNlLCBOVUxMfSwgLyogZmlsbGVkIG91dCBpbiBtb2R1bGUgaW5pdCBmdW5jdGlvbiAqLwogICAgIHswLCAwfSwKIH07CkBAIC0yMjIsMjUgKzIzMCw5IEBACiBQeURvY19TVFJWQVIobW9kdWxlX2RvYywKICJUaGlzIGlzIGEgdGVtcGxhdGUgbW9kdWxlIGp1c3QgZm9yIGluc3RydWN0aW9uLiIpOwogCi0vKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBQeUluaXRfeHgpICovCi0KLQotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiB4eG1vZHVsZSA9IHsKLSAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgInh4bGltaXRlZCIsCi0gICAgbW9kdWxlX2RvYywKLSAgICAtMSwKLSAgICB4eF9tZXRob2RzLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKLX07Ci0KLVB5TU9ESU5JVF9GVU5DCi1QeUluaXRfeHhsaW1pdGVkKHZvaWQpCitzdGF0aWMgaW50Cit4eF9tb2RleGVjKFB5T2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICptID0gTlVMTDsKICAgICBQeU9iamVjdCAqbzsKIAogICAgIC8qIER1ZSB0byBjcm9zcyBwbGF0Zm9ybSBjb21waWxlciBpc3N1ZXMgdGhlIHNsb3RzIG11c3QgYmUgZmlsbGVkCkBAIC0yNTQsMTEgKzI0Niw2IEBACiAgICAgaWYgKFh4b19UeXBlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKIAotICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyAqLwotICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnh4bW9kdWxlKTsKLSAgICBpZiAobSA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0KICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwogICAgIGlmIChFcnJvck9iamVjdCA9PSBOVUxMKSB7CiAgICAgICAgIEVycm9yT2JqZWN0ID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJ4eGxpbWl0ZWQuZXJyb3IiLCBOVUxMLCBOVUxMKTsKQEAgLTI2OCw2ICsyNTUsMTIgQEAKICAgICBQeV9JTkNSRUYoRXJyb3JPYmplY3QpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXJyb3IiLCBFcnJvck9iamVjdCk7CiAKKyAgICAvKiBBZGQgWHhvICovCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmWHhvX1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiWHhvIiwgbyk7CisKICAgICAvKiBBZGQgU3RyICovCiAgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmU3RyX1R5cGVfc3BlYyk7CiAgICAgaWYgKG8gPT0gTlVMTCkKQEAgLTI3OSw4ICsyNzIsMzQgQEAKICAgICBpZiAobyA9PSBOVUxMKQogICAgICAgICBnb3RvIGZhaWw7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJOdWxsIiwgbyk7Ci0gICAgcmV0dXJuIG07CisgICAgcmV0dXJuIDA7CiAgZmFpbDoKICAgICBQeV9YREVDUkVGKG0pOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiAtMTsKK30KKworCitzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCB4eF9zbG90c1tdID0geworICAgIHtQeV9tb2RfZXhlYywgeHhfbW9kZXhlY30sCisgICAgezAsIE5VTEx9Cit9OworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIHh4bW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAieHhsaW1pdGVkIiwKKyAgICBtb2R1bGVfZG9jLAorICAgIDAsCisgICAgeHhfbWV0aG9kcywKKyAgICB4eF9zbG90cywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworLyogRXhwb3J0IGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF94eCkgKi8KKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF94eGxpbWl0ZWQodm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmeHhtb2R1bGUpOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy94eG1vZHVsZS5jIGIvTW9kdWxlcy94eG1vZHVsZS5jCmluZGV4IDBmZWZmNjYuLjg1MjMwZDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMveHhtb2R1bGUuYworKysgYi9Nb2R1bGVzL3h4bW9kdWxlLmMKQEAgLTMzNCwyNiArMzM0LDEwIEBACiBQeURvY19TVFJWQVIobW9kdWxlX2RvYywKICJUaGlzIGlzIGEgdGVtcGxhdGUgbW9kdWxlIGp1c3QgZm9yIGluc3RydWN0aW9uLiIpOwogCi0vKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBQeUluaXRfeHgpICovCiAKLQotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiB4eG1vZHVsZSA9IHsKLSAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgInh4IiwKLSAgICBtb2R1bGVfZG9jLAotICAgIC0xLAotICAgIHh4X21ldGhvZHMsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAotfTsKLQotUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF94eCh2b2lkKQorc3RhdGljIGludAoreHhfZXhlYyhQeU9iamVjdCAqbSkKIHsKLSAgICBQeU9iamVjdCAqbSA9IE5VTEw7Ci0KICAgICAvKiBEdWUgdG8gY3Jvc3MgcGxhdGZvcm0gY29tcGlsZXIgaXNzdWVzIHRoZSBzbG90cyBtdXN0IGJlIGZpbGxlZAogICAgICAqIGhlcmUuIEl0J3MgcmVxdWlyZWQgZm9yIHBvcnRhYmlsaXR5IHRvIFdpbmRvd3Mgd2l0aG91dCByZXF1aXJpbmcKICAgICAgKiBDKysuICovCkBAIC0zNjYsMTEgKzM1MCw2IEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmWHhvX1R5cGUpIDwgMCkKICAgICAgICAgZ290byBmYWlsOwogCi0gICAgLyogQ3JlYXRlIHRoZSBtb2R1bGUgYW5kIGFkZCB0aGUgZnVuY3Rpb25zICovCi0gICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmeHhtb2R1bGUpOwotICAgIGlmIChtID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLQogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCiAgICAgaWYgKEVycm9yT2JqZWN0ID09IE5VTEwpIHsKICAgICAgICAgRXJyb3JPYmplY3QgPSBQeUVycl9OZXdFeGNlcHRpb24oInh4LmVycm9yIiwgTlVMTCwgTlVMTCk7CkBAIC0zODksOCArMzY4LDMzIEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmTnVsbF9UeXBlKSA8IDApCiAgICAgICAgIGdvdG8gZmFpbDsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIk51bGwiLCAoUHlPYmplY3QgKikmTnVsbF9UeXBlKTsKLSAgICByZXR1cm4gbTsKKyAgICByZXR1cm4gMDsKICBmYWlsOgogICAgIFB5X1hERUNSRUYobSk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmX1Nsb3QgeHhfc2xvdHNbXSA9IHsKKyAgICB7UHlfbW9kX2V4ZWMsIHh4X2V4ZWN9LAorICAgIHswLCBOVUxMfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgeHhtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJ4eCIsCisgICAgbW9kdWxlX2RvYywKKyAgICAwLAorICAgIHh4X21ldGhvZHMsCisgICAgeHhfc2xvdHMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKKy8qIEV4cG9ydCBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBQeUluaXRfeHgpICovCisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfeHgodm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVEZWZfSW5pdCgmeHhtb2R1bGUpOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy94eHN1YnR5cGUuYyBiL01vZHVsZXMveHhzdWJ0eXBlLmMKaW5kZXggNjk0NGUzNy4uOGQwZDZhZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy94eHN1YnR5cGUuYworKysgYi9Nb2R1bGVzL3h4c3VidHlwZS5jCkBAIC0yNTcsMTMgKzI1Nyw1MCBAQAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCitzdGF0aWMgaW50Cit4eHN1YnR5cGVfZXhlYyhQeU9iamVjdCogbSkKK3sKKyAgICAvKiBGaWxsIGluIGRlZmVycmVkIGRhdGEgYWRkcmVzc2VzLiAgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlCisgICAgICAgUHlUeXBlX1JlYWR5KCkgaXMgY2FsbGVkLiAgTm90ZSB0aGF0IFB5VHlwZV9SZWFkeSgpIGF1dG9tYXRpY2FsbHkKKyAgICAgICBpbml0aWFsaXplcyB0aGUgb2Iub2JfdHlwZSBmaWVsZCB0byAmUHlUeXBlX1R5cGUgaWYgaXQncyBOVUxMLAorICAgICAgIHNvIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBmaWxsIGluIG9iX3R5cGUgZmlyc3QuICovCisgICAgc3BhbWRpY3RfdHlwZS50cF9iYXNlID0gJlB5RGljdF9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJnNwYW1kaWN0X3R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc3BhbWxpc3RfdHlwZS50cF9iYXNlID0gJlB5TGlzdF9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJnNwYW1saXN0X3R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmc3BhbWxpc3RfdHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmc3BhbWRpY3RfdHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBQeV9JTkNSRUYoJnNwYW1saXN0X3R5cGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgInNwYW1saXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSAmc3BhbWxpc3RfdHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBQeV9JTkNSRUYoJnNwYW1kaWN0X3R5cGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgInNwYW1kaWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSAmc3BhbWRpY3RfdHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWZfU2xvdCB4eHN1YnR5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfbW9kX2V4ZWMsIHh4c3VidHlwZV9leGVjfSwKKyAgICB7MCwgTlVMTH0sCit9OworCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIHh4c3VidHlwZW1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgInh4c3VidHlwZSIsCiAgICAgeHhzdWJ0eXBlX19kb2NfXywKLSAgICAtMSwKKyAgICAwLAogICAgIHh4c3VidHlwZV9mdW5jdGlvbnMsCi0gICAgTlVMTCwKKyAgICB4eHN1YnR5cGVfc2xvdHMsCiAgICAgTlVMTCwKICAgICBOVUxMLAogICAgIE5VTEwKQEAgLTI3MywzNyArMzEwLDUgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfeHhzdWJ0eXBlKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm07Ci0KLSAgICAvKiBGaWxsIGluIGRlZmVycmVkIGRhdGEgYWRkcmVzc2VzLiAgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlCi0gICAgICAgUHlUeXBlX1JlYWR5KCkgaXMgY2FsbGVkLiAgTm90ZSB0aGF0IFB5VHlwZV9SZWFkeSgpIGF1dG9tYXRpY2FsbHkKLSAgICAgICBpbml0aWFsaXplcyB0aGUgb2Iub2JfdHlwZSBmaWVsZCB0byAmUHlUeXBlX1R5cGUgaWYgaXQncyBOVUxMLAotICAgICAgIHNvIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBmaWxsIGluIG9iX3R5cGUgZmlyc3QuICovCi0gICAgc3BhbWRpY3RfdHlwZS50cF9iYXNlID0gJlB5RGljdF9UeXBlOwotICAgIGlmIChQeVR5cGVfUmVhZHkoJnNwYW1kaWN0X3R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBzcGFtbGlzdF90eXBlLnRwX2Jhc2UgPSAmUHlMaXN0X1R5cGU7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmc3BhbWxpc3RfdHlwZSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnh4c3VidHlwZW1vZHVsZSk7Ci0gICAgaWYgKG0gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZzcGFtbGlzdF90eXBlKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVR5cGVfUmVhZHkoJnNwYW1kaWN0X3R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBQeV9JTkNSRUYoJnNwYW1saXN0X3R5cGUpOwotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgInNwYW1saXN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSAmc3BhbWxpc3RfdHlwZSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIFB5X0lOQ1JFRigmc3BhbWRpY3RfdHlwZSk7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3BhbWRpY3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopICZzcGFtZGljdF90eXBlKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBtOworICAgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZ4eHN1YnR5cGVtb2R1bGUpOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96aXBpbXBvcnQuYyBiL01vZHVsZXMvemlwaW1wb3J0LmMKaW5kZXggNDU5NGRkNC4uZTg0MDI3MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96aXBpbXBvcnQuYworKysgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCkBAIC0yMCwxNSArMjAsMTMgQEAKIAogLyogemlwX3NlYXJjaG9yZGVyIGRlZmluZXMgaG93IHdlIHNlYXJjaCBmb3IgYSBtb2R1bGUgaW4gdGhlIFppcAogICAgYXJjaGl2ZTogd2UgZmlyc3Qgc2VhcmNoIGZvciBhIHBhY2thZ2UgX19pbml0X18sIHRoZW4gZm9yCi0gICBub24tcGFja2FnZSAucHljLCAucHlvIGFuZCAucHkgZW50cmllcy4gVGhlIC5weWMgYW5kIC5weW8gZW50cmllcworICAgbm9uLXBhY2thZ2UgLnB5YywgYW5kIC5weSBlbnRyaWVzLiBUaGUgLnB5YyBlbnRyaWVzCiAgICBhcmUgc3dhcHBlZCBieSBpbml0emlwaW1wb3J0KCkgaWYgd2UgcnVuIGluIG9wdGltaXplZCBtb2RlLiBBbHNvLAogICAgJy8nIGlzIHJlcGxhY2VkIGJ5IFNFUCB0aGVyZS4gKi8KIHN0YXRpYyBzdHJ1Y3Qgc3RfemlwX3NlYXJjaG9yZGVyIHppcF9zZWFyY2hvcmRlcltdID0gewogICAgIHsiL19faW5pdF9fLnB5YyIsIElTX1BBQ0tBR0UgfCBJU19CWVRFQ09ERX0sCi0gICAgeyIvX19pbml0X18ucHlvIiwgSVNfUEFDS0FHRSB8IElTX0JZVEVDT0RFfSwKICAgICB7Ii9fX2luaXRfXy5weSIsIElTX1BBQ0tBR0UgfCBJU19TT1VSQ0V9LAogICAgIHsiLnB5YyIsIElTX0JZVEVDT0RFfSwKLSAgICB7Ii5weW8iLCBJU19CWVRFQ09ERX0sCiAgICAgeyIucHkiLCBJU19TT1VSQ0V9LAogICAgIHsiIiwgMH0KIH07CkBAIC0xNTcsOCArMTU1LDcgQEAKICAgICAgICAgICAgIHRtcCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlVSVjIiwgc2VsZi0+cHJlZml4LCBTRVApOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VsZi0+cHJlZml4KTsKLSAgICAgICAgICAgIHNlbGYtPnByZWZpeCA9IHRtcDsKKyAgICAgICAgICAgIFB5X1NFVFJFRihzZWxmLT5wcmVmaXgsIHRtcCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQpAQCAtMzI3LDE3ICszMjQsMTQgQEAKIH0KIAogdHlwZWRlZiBlbnVtIHsKLSAgICBGTF9FUlJPUiwKLSAgICBGTF9OT1RfRk9VTkQsCi0gICAgRkxfTU9EVUxFX0ZPVU5ELAotICAgIEZMX05TX0ZPVU5ECisgICAgRkxfRVJST1IgPSAtMSwgICAgICAgLyogZXJyb3IgKi8KKyAgICBGTF9OT1RfRk9VTkQsICAgICAgICAvKiBubyBsb2FkZXIgb3IgbmFtZXNwYWNlIHBvcnRpb25zIGZvdW5kICovCisgICAgRkxfTU9EVUxFX0ZPVU5ELCAgICAgLyogbW9kdWxlL3BhY2thZ2UgZm91bmQgKi8KKyAgICBGTF9OU19GT1VORCAgICAgICAgICAvKiBuYW1lc3BhY2UgcG9ydGlvbiBmb3VuZDogKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAqbmFtZXNwYWNlX3BvcnRpb24gd2lsbCBwb2ludCB0byB0aGUgbmFtZSAqLwogfSBmaW5kX2xvYWRlcl9yZXN1bHQ7CiAKLS8qIFRoZSBndXRzIG9mICJmaW5kX2xvYWRlciIgYW5kICJmaW5kX21vZHVsZSIuIFJldHVybiB2YWx1ZXM6Ci0gICAtMTogZXJyb3IKLSAgICAwOiBubyBsb2FkZXIgb3IgbmFtZXNwYWNlIHBvcnRpb25zIGZvdW5kCi0gICAgMTogbW9kdWxlL3BhY2thZ2UgZm91bmQKLSAgICAyOiBuYW1lc3BhY2UgcG9ydGlvbiBmb3VuZDogKm5hbWVzcGFjZV9wb3J0aW9uIHdpbGwgcG9pbnQgdG8gdGhlIG5hbWUKKy8qIFRoZSBndXRzIG9mICJmaW5kX2xvYWRlciIgYW5kICJmaW5kX21vZHVsZSIuCiAqLwogc3RhdGljIGZpbmRfbG9hZGVyX3Jlc3VsdAogZmluZF9sb2FkZXIoWmlwSW1wb3J0ZXIgKnNlbGYsIFB5T2JqZWN0ICpmdWxsbmFtZSwgUHlPYmplY3QgKipuYW1lc3BhY2VfcG9ydGlvbikKQEAgLTM1MiwyMSArMzQ2LDM0IEBACiAgICAgaWYgKG1pID09IE1JX05PVF9GT1VORCkgewogICAgICAgICAvKiBOb3QgYSBtb2R1bGUgb3IgcmVndWxhciBwYWNrYWdlLiBTZWUgaWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgYW5kCiAgICAgICAgICAgIHRoZXJlZm9yZSBwb3NzaWJseSBhIHBvcnRpb24gb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4gKi8KLSAgICAgICAgaW50IGlzX2RpciA9IGNoZWNrX2lzX2RpcmVjdG9yeShzZWxmLCBzZWxmLT5wcmVmaXgsIGZ1bGxuYW1lKTsKKyAgICAgICAgZmluZF9sb2FkZXJfcmVzdWx0IHJlc3VsdCA9IEZMX05PVF9GT1VORDsKKyAgICAgICAgUHlPYmplY3QgKnN1Ym5hbWU7CisgICAgICAgIGludCBpc19kaXI7CisKKyAgICAgICAgLyogV2UncmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBsYXN0IHBhdGggY29tcG9uZW50IG9mIGZ1bGxuYW1lOworICAgICAgICAgICBlYXJsaWVyIGNvbXBvbmVudHMgYXJlIHJlY29yZGVkIGluIHNlbGYtPnByZWZpeC4gKi8KKyAgICAgICAgc3VibmFtZSA9IGdldF9zdWJuYW1lKGZ1bGxuYW1lKTsKKyAgICAgICAgaWYgKHN1Ym5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZMX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaXNfZGlyID0gY2hlY2tfaXNfZGlyZWN0b3J5KHNlbGYsIHNlbGYtPnByZWZpeCwgc3VibmFtZSk7CiAgICAgICAgIGlmIChpc19kaXIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoaXNfZGlyKSB7CisgICAgICAgICAgICByZXN1bHQgPSBGTF9FUlJPUjsKKyAgICAgICAgZWxzZSBpZiAoaXNfZGlyKSB7CiAgICAgICAgICAgICAvKiBUaGlzIGlzIHBvc3NpYmx5IGEgcG9ydGlvbiBvZiBhIG5hbWVzcGFjZQogICAgICAgICAgICAgICAgcGFja2FnZS4gUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIGl0cyBwYXRoLAogICAgICAgICAgICAgICAgd2l0aG91dCBhIHRyYWlsaW5nIHNlcGFyYXRvci4gKi8KICAgICAgICAgICAgICpuYW1lc3BhY2VfcG9ydGlvbiA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlVSVjJVUlVSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5hcmNoaXZlLCBTRVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5wcmVmaXgsIGZ1bGxuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnByZWZpeCwgc3VibmFtZSk7CiAgICAgICAgICAgICBpZiAoKm5hbWVzcGFjZV9wb3J0aW9uID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZMX0VSUk9SOwotICAgICAgICAgICAgcmV0dXJuIEZMX05TX0ZPVU5EOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZMX0VSUk9SOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZMX05TX0ZPVU5EOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBGTF9OT1RfRk9VTkQ7CisgICAgICAgIFB5X0RFQ1JFRihzdWJuYW1lKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgLyogVGhpcyBpcyBhIG1vZHVsZSBvciBwYWNrYWdlLiAqLwogICAgIHJldHVybiBGTF9NT0RVTEVfRk9VTkQ7CkBAIC00MDAsNiArNDA3LDkgQEAKICAgICBjYXNlIEZMX01PRFVMRV9GT1VORDoKICAgICAgICAgcmVzdWx0ID0gKFB5T2JqZWN0ICopc2VsZjsKICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDM2LDYgKzQ0Niw5IEBACiAgICAgICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIk9bT10iLCBQeV9Ob25lLCBuYW1lc3BhY2VfcG9ydGlvbik7CiAgICAgICAgIFB5X0RFQ1JFRihuYW1lc3BhY2VfcG9ydGlvbik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtODE0LDIzICs4MjcsNDMgQEAKIAogLyogaW1wbGVtZW50YXRpb24gKi8KIAotLyogR2l2ZW4gYSBidWZmZXIsIHJldHVybiB0aGUgbG9uZyB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBmaXJzdAorLyogR2l2ZW4gYSBidWZmZXIsIHJldHVybiB0aGUgdW5zaWduZWQgaW50IHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIGZpcnN0CiAgICA0IGJ5dGVzLCBlbmNvZGVkIGFzIGxpdHRsZSBlbmRpYW4uIFRoaXMgcGFydGlhbGx5IHJlaW1wbGVtZW50cwogICAgbWFyc2hhbC5jOnJfbG9uZygpICovCi1zdGF0aWMgbG9uZwotZ2V0X2xvbmcodW5zaWduZWQgY2hhciAqYnVmKSB7Ci0gICAgbG9uZyB4Oworc3RhdGljIHVuc2lnbmVkIGludAorZ2V0X3VpbnQzMihjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisgICAgdW5zaWduZWQgaW50IHg7CiAgICAgeCA9ICBidWZbMF07Ci0gICAgeCB8PSAobG9uZylidWZbMV0gPDwgIDg7Ci0gICAgeCB8PSAobG9uZylidWZbMl0gPDwgMTY7Ci0gICAgeCB8PSAobG9uZylidWZbM10gPDwgMjQ7Ci0jaWYgU0laRU9GX0xPTkcgPiA0Ci0gICAgLyogU2lnbiBleHRlbnNpb24gZm9yIDY0LWJpdCBtYWNoaW5lcyAqLwotICAgIHggfD0gLSh4ICYgMHg4MDAwMDAwMEwpOwotI2VuZGlmCisgICAgeCB8PSAodW5zaWduZWQgaW50KWJ1ZlsxXSA8PCAgODsKKyAgICB4IHw9ICh1bnNpZ25lZCBpbnQpYnVmWzJdIDw8IDE2OworICAgIHggfD0gKHVuc2lnbmVkIGludClidWZbM10gPDwgMjQ7CiAgICAgcmV0dXJuIHg7CiB9CiAKKy8qIEdpdmVuIGEgYnVmZmVyLCByZXR1cm4gdGhlIHVuc2lnbmVkIGludCB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBmaXJzdAorICAgMiBieXRlcywgZW5jb2RlZCBhcyBsaXR0bGUgZW5kaWFuLiBUaGlzIHBhcnRpYWxseSByZWltcGxlbWVudHMKKyAgIG1hcnNoYWwuYzpyX3Nob3J0KCkgKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydAorZ2V0X3VpbnQxNihjb25zdCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisgICAgdW5zaWduZWQgc2hvcnQgeDsKKyAgICB4ID0gIGJ1ZlswXTsKKyAgICB4IHw9ICh1bnNpZ25lZCBzaG9ydClidWZbMV0gPDwgIDg7CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfZmlsZV9lcnJvcihQeU9iamVjdCAqYXJjaGl2ZSwgaW50IGVvZikKK3sKKyAgICBpZiAoZW9mKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkVPRiByZWFkIHdoZXJlIG5vdCBleHBlY3RlZCIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIGFyY2hpdmUpOworICAgIH0KK30KKwogLyoKICAgIHJlYWRfZGlyZWN0b3J5KGFyY2hpdmUpIC0+IGZpbGVzIGRpY3QgKG5ldyByZWZlcmVuY2UpCiAKQEAgLTg1OCwxMTEgKzg5MSwxMzcgQEAKIHsKICAgICBQeU9iamVjdCAqZmlsZXMgPSBOVUxMOwogICAgIEZJTEUgKmZwOwotICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzOwotICAgIHNob3J0IGNvbXByZXNzLCB0aW1lLCBkYXRlLCBuYW1lX3NpemU7Ci0gICAgbG9uZyBjcmMsIGRhdGFfc2l6ZSwgZmlsZV9zaXplLCBoZWFkZXJfc2l6ZTsKLSAgICBQeV9zc2l6ZV90IGZpbGVfb2Zmc2V0LCBoZWFkZXJfcG9zaXRpb24sIGhlYWRlcl9vZmZzZXQ7Ci0gICAgbG9uZyBsLCBjb3VudDsKLSAgICBQeV9zc2l6ZV90IGk7CisgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNvbXByZXNzLCB0aW1lLCBkYXRlLCBuYW1lX3NpemU7CisgICAgdW5zaWduZWQgaW50IGNyYywgZGF0YV9zaXplLCBmaWxlX3NpemUsIGhlYWRlcl9zaXplLCBoZWFkZXJfb2Zmc2V0OworICAgIHVuc2lnbmVkIGxvbmcgZmlsZV9vZmZzZXQsIGhlYWRlcl9wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBsb25nIGFyY19vZmZzZXQ7ICAvKiBBYnNvbHV0ZSBvZmZzZXQgdG8gc3RhcnQgb2YgdGhlIHppcC1hcmNoaXZlLiAqLworICAgIHVuc2lnbmVkIGludCBjb3VudCwgaTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0Nl07CiAgICAgY2hhciBuYW1lW01BWFBBVEhMRU4gKyA1XTsKLSAgICBjaGFyIGR1bW15WzhdOyAvKiBCdWZmZXIgdG8gcmVhZCB1bnVzZWQgaGVhZGVyIHZhbHVlcyBpbnRvICovCiAgICAgUHlPYmplY3QgKm5hbWVvYmogPSBOVUxMOwotICAgIGNoYXIgKnAsIGVuZG9mX2NlbnRyYWxfZGlyWzIyXTsKLSAgICBQeV9zc2l6ZV90IGFyY19vZmZzZXQ7ICAvKiBBYnNvbHV0ZSBvZmZzZXQgdG8gc3RhcnQgb2YgdGhlIHppcC1hcmNoaXZlLiAqLwogICAgIFB5T2JqZWN0ICpwYXRoOwogICAgIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CiAgICAgaW50IGJvb3RzdHJhcDsKKyAgICBjb25zdCBjaGFyICplcnJtc2cgPSBOVUxMOwogCiAgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGFyY2hpdmUsICJyYiIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT1NFcnJvcikpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGMsICp2YWwsICp0YjsKKyAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJjYW4ndCBvcGVuIFppcCBmaWxlOiAlUiIsIGFyY2hpdmUpOworICAgICAgICAgICAgX1B5RXJyX0NoYWluRXhjZXB0aW9ucyhleGMsIHZhbCwgdGIpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChmc2VlayhmcCwgLTIyLCBTRUVLX0VORCkgPT0gLTEpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3QgcmVhZCBaaXAgZmlsZTogJVIiLCBhcmNoaXZlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKICAgICB9Ci0gICAgaGVhZGVyX3Bvc2l0aW9uID0gZnRlbGwoZnApOwotICAgIGlmIChmcmVhZChlbmRvZl9jZW50cmFsX2RpciwgMSwgMjIsIGZwKSAhPSAyMikgewotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJjYW4ndCByZWFkIFppcCBmaWxlOiAlUiIsIGFyY2hpdmUpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBoZWFkZXJfcG9zaXRpb24gPSAodW5zaWduZWQgbG9uZylmdGVsbChmcCk7CisgICAgaWYgKGhlYWRlcl9wb3NpdGlvbiA9PSAodW5zaWduZWQgbG9uZyktMSkgeworICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAgICAgfQotICAgIGlmIChnZXRfbG9uZygodW5zaWduZWQgY2hhciAqKWVuZG9mX2NlbnRyYWxfZGlyKSAhPSAweDA2MDU0QjUwKSB7CisgICAgYXNzZXJ0KGhlYWRlcl9wb3NpdGlvbiA8PSAodW5zaWduZWQgbG9uZylMT05HX01BWCk7CisgICAgaWYgKGZyZWFkKGJ1ZmZlciwgMSwgMjIsIGZwKSAhPSAyMikgeworICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CisgICAgfQorICAgIGlmIChnZXRfdWludDMyKGJ1ZmZlcikgIT0gMHgwNjA1NEI1MHUpIHsKICAgICAgICAgLyogQmFkOiBFbmQgb2YgQ2VudHJhbCBEaXIgc2lnbmF0dXJlICovCi0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgIm5vdCBhIFppcCBmaWxlOiAlUiIsIGFyY2hpdmUpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZXJybXNnID0gIm5vdCBhIFppcCBmaWxlIjsKKyAgICAgICAgZ290byBpbnZhbGlkX2hlYWRlcjsKICAgICB9CiAKLSAgICBoZWFkZXJfc2l6ZSA9IGdldF9sb25nKCh1bnNpZ25lZCBjaGFyICopZW5kb2ZfY2VudHJhbF9kaXIgKyAxMik7Ci0gICAgaGVhZGVyX29mZnNldCA9IGdldF9sb25nKCh1bnNpZ25lZCBjaGFyICopZW5kb2ZfY2VudHJhbF9kaXIgKyAxNik7Ci0gICAgYXJjX29mZnNldCA9IGhlYWRlcl9wb3NpdGlvbiAtIGhlYWRlcl9vZmZzZXQgLSBoZWFkZXJfc2l6ZTsKLSAgICBoZWFkZXJfb2Zmc2V0ICs9IGFyY19vZmZzZXQ7CisgICAgaGVhZGVyX3NpemUgPSBnZXRfdWludDMyKGJ1ZmZlciArIDEyKTsKKyAgICBoZWFkZXJfb2Zmc2V0ID0gZ2V0X3VpbnQzMihidWZmZXIgKyAxNik7CisgICAgaWYgKGhlYWRlcl9wb3NpdGlvbiA8IGhlYWRlcl9zaXplKSB7CisgICAgICAgIGVycm1zZyA9ICJiYWQgY2VudHJhbCBkaXJlY3Rvcnkgc2l6ZSI7CisgICAgICAgIGdvdG8gaW52YWxpZF9oZWFkZXI7CisgICAgfQorICAgIGlmIChoZWFkZXJfcG9zaXRpb24gPCBoZWFkZXJfb2Zmc2V0KSB7CisgICAgICAgIGVycm1zZyA9ICJiYWQgY2VudHJhbCBkaXJlY3Rvcnkgb2Zmc2V0IjsKKyAgICAgICAgZ290byBpbnZhbGlkX2hlYWRlcjsKKyAgICB9CisgICAgaWYgKGhlYWRlcl9wb3NpdGlvbiAtIGhlYWRlcl9zaXplIDwgaGVhZGVyX29mZnNldCkgeworICAgICAgICBlcnJtc2cgPSAiYmFkIGNlbnRyYWwgZGlyZWN0b3J5IHNpemUgb3Igb2Zmc2V0IjsKKyAgICAgICAgZ290byBpbnZhbGlkX2hlYWRlcjsKKyAgICB9CisgICAgaGVhZGVyX3Bvc2l0aW9uIC09IGhlYWRlcl9zaXplOworICAgIGFyY19vZmZzZXQgPSBoZWFkZXJfcG9zaXRpb24gLSBoZWFkZXJfb2Zmc2V0OwogCiAgICAgZmlsZXMgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKGZpbGVzID09IE5VTEwpCisgICAgaWYgKGZpbGVzID09IE5VTEwpIHsKICAgICAgICAgZ290byBlcnJvcjsKLQorICAgIH0KICAgICAvKiBTdGFydCBvZiBDZW50cmFsIERpcmVjdG9yeSAqLwogICAgIGNvdW50ID0gMDsKLSAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQsIDApID09IC0xKQorICAgIGlmIChmc2VlayhmcCwgKGxvbmcpaGVhZGVyX3Bvc2l0aW9uLCAwKSA9PSAtMSkgewogICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CisgICAgfQogICAgIGZvciAoOzspIHsKICAgICAgICAgUHlPYmplY3QgKnQ7CisgICAgICAgIHNpemVfdCBuOwogICAgICAgICBpbnQgZXJyOwogCi0gICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgaGVhZGVyICovCi0gICAgICAgIGwgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7Ci0gICAgICAgIGlmIChsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAobCAhPSAweDAyMDE0QjUwKQotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBCYWQ6IENlbnRyYWwgRGlyIEZpbGUgSGVhZGVyICovCi0KLSAgICAgICAgLyogT24gV2luZG93cywgY2FsbGluZyBmc2VlayB0byBza2lwIG92ZXIgdGhlIGZpZWxkcyB3ZSBkb24ndCB1c2UgaXMKLSAgICAgICAgc2xvd2VyIHRoYW4gcmVhZGluZyB0aGUgZGF0YSBpbnRvIGEgZHVtbXkgYnVmZmVyIGJlY2F1c2UgZnNlZWsgZmx1c2hlcwotICAgICAgICBzdGRpbydzIGludGVybmFsIGJ1ZmZlcnMuIFNlZSBpc3N1ZSAjODc0NS4gKi8KLSAgICAgICAgaWYgKGZyZWFkKGR1bW15LCAxLCA0LCBmcCkgIT0gNCkgLyogU2tpcCB1bnVzZWQgZmllbGRzLCBhdm9pZCBmc2VlayAqLwotICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOwotCi0gICAgICAgIGZsYWdzID0gKHVuc2lnbmVkIHNob3J0KVB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7Ci0gICAgICAgIGNvbXByZXNzID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKLSAgICAgICAgdGltZSA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7Ci0gICAgICAgIGRhdGUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwotICAgICAgICBjcmMgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7Ci0gICAgICAgIGRhdGFfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKLSAgICAgICAgZmlsZV9zaXplID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwotICAgICAgICBuYW1lX3NpemUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwotICAgICAgICBoZWFkZXJfc2l6ZSA9IG5hbWVfc2l6ZSArCi0gICAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCkgKwotICAgICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwotICAgICAgICBpZiAoZnJlYWQoZHVtbXksIDEsIDgsIGZwKSAhPSA4KSAvKiBTa2lwIHVudXNlZCBmaWVsZHMsIGF2b2lkIGZzZWVrICovCi0gICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7Ci0gICAgICAgIGZpbGVfb2Zmc2V0ID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApICsgYXJjX29mZnNldDsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAgIGlmIChuYW1lX3NpemUgPiBNQVhQQVRITEVOKQotICAgICAgICAgICAgbmFtZV9zaXplID0gTUFYUEFUSExFTjsKLQotICAgICAgICBwID0gbmFtZTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IChQeV9zc2l6ZV90KW5hbWVfc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAqcCA9IChjaGFyKWdldGMoZnApOwotICAgICAgICAgICAgaWYgKCpwID09ICcvJykKLSAgICAgICAgICAgICAgICAqcCA9IFNFUDsKLSAgICAgICAgICAgIHArKzsKKyAgICAgICAgbiA9IGZyZWFkKGJ1ZmZlciwgMSwgNDYsIGZwKTsKKyAgICAgICAgaWYgKG4gPCA0KSB7CisgICAgICAgICAgICBnb3RvIGVvZl9lcnJvcjsKICAgICAgICAgfQotICAgICAgICAqcCA9IDA7ICAgICAgICAgLyogQWRkIHRlcm1pbmF0aW5nIG51bGwgYnl0ZSAqLwotICAgICAgICBmb3IgKDsgaSA8IGhlYWRlcl9zaXplOyBpKyspIC8qIFNraXAgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciAqLwotICAgICAgICAgICAgaWYoZ2V0YyhmcCkgPT0gRU9GKSAvKiBBdm9pZCBmc2VlayAqLworICAgICAgICAvKiBTdGFydCBvZiBmaWxlIGhlYWRlciAqLworICAgICAgICBpZiAoZ2V0X3VpbnQzMihidWZmZXIpICE9IDB4MDIwMTRCNTB1KSB7CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIEJhZDogQ2VudHJhbCBEaXIgRmlsZSBIZWFkZXIgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAobiAhPSA0NikgeworICAgICAgICAgICAgZ290byBlb2ZfZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZmxhZ3MgPSBnZXRfdWludDE2KGJ1ZmZlciArIDgpOworICAgICAgICBjb21wcmVzcyA9IGdldF91aW50MTYoYnVmZmVyICsgMTApOworICAgICAgICB0aW1lID0gZ2V0X3VpbnQxNihidWZmZXIgKyAxMik7CisgICAgICAgIGRhdGUgPSBnZXRfdWludDE2KGJ1ZmZlciArIDE0KTsKKyAgICAgICAgY3JjID0gZ2V0X3VpbnQzMihidWZmZXIgKyAxNik7CisgICAgICAgIGRhdGFfc2l6ZSA9IGdldF91aW50MzIoYnVmZmVyICsgMjApOworICAgICAgICBmaWxlX3NpemUgPSBnZXRfdWludDMyKGJ1ZmZlciArIDI0KTsKKyAgICAgICAgbmFtZV9zaXplID0gZ2V0X3VpbnQxNihidWZmZXIgKyAyOCk7CisgICAgICAgIGhlYWRlcl9zaXplID0gKHVuc2lnbmVkIGludCluYW1lX3NpemUgKworICAgICAgICAgICBnZXRfdWludDE2KGJ1ZmZlciArIDMwKSAvKiBleHRyYSBmaWVsZCAqLyArCisgICAgICAgICAgIGdldF91aW50MTYoYnVmZmVyICsgMzIpIC8qIGNvbW1lbnQgKi87CisKKyAgICAgICAgZmlsZV9vZmZzZXQgPSBnZXRfdWludDMyKGJ1ZmZlciArIDQyKTsKKyAgICAgICAgaWYgKGZpbGVfb2Zmc2V0ID4gaGVhZGVyX29mZnNldCkgeworICAgICAgICAgICAgZXJybXNnID0gImJhZCBsb2NhbCBoZWFkZXIgb2Zmc2V0IjsKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZF9oZWFkZXI7CisgICAgICAgIH0KKyAgICAgICAgZmlsZV9vZmZzZXQgKz0gYXJjX29mZnNldDsKKworICAgICAgICBpZiAobmFtZV9zaXplID4gTUFYUEFUSExFTikgeworICAgICAgICAgICAgbmFtZV9zaXplID0gTUFYUEFUSExFTjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnJlYWQobmFtZSwgMSwgbmFtZV9zaXplLCBmcCkgIT0gbmFtZV9zaXplKSB7CisgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgbmFtZVtuYW1lX3NpemVdID0gJ1wwJzsgIC8qIEFkZCB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgKi8KKyAgICAgICAgaWYgKFNFUCAhPSAnLycpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYW1lX3NpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChuYW1lW2ldID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICBuYW1lW2ldID0gU0VQOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBTa2lwIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIuCisgICAgICAgICAqIE9uIFdpbmRvd3MsIGNhbGxpbmcgZnNlZWsgdG8gc2tpcCBvdmVyIHRoZSBmaWVsZHMgd2UgZG9uJ3QgdXNlIGlzCisgICAgICAgICAqIHNsb3dlciB0aGFuIHJlYWRpbmcgdGhlIGRhdGEgYmVjYXVzZSBmc2VlayBmbHVzaGVzIHN0ZGlvJ3MKKyAgICAgICAgICogaW50ZXJuYWwgYnVmZmVycy4gIFNlZSBpc3N1ZSAjODc0NS4gKi8KKyAgICAgICAgYXNzZXJ0KGhlYWRlcl9zaXplIDw9IDMqMHhGRkZGdSk7CisgICAgICAgIGZvciAoaSA9IG5hbWVfc2l6ZTsgaSA8IGhlYWRlcl9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChnZXRjKGZwKSA9PSBFT0YpIHsKICAgICAgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICBib290c3RyYXAgPSAwOwotICAgICAgICBpZiAoZmxhZ3MgJiAweDA4MDApCisgICAgICAgIGlmIChmbGFncyAmIDB4MDgwMCkgewogICAgICAgICAgICAgY2hhcnNldCA9ICJ1dGYtOCI7CisgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIVB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycC0+Y29kZWNzX2luaXRpYWxpemVkKSB7CiAgICAgICAgICAgICAvKiBEdXJpbmcgYm9vdHN0cmFwLCB3ZSBtYXkgbmVlZCB0byBsb2FkIHRoZSBlbmNvZGluZ3MKICAgICAgICAgICAgICAgIHBhY2thZ2UgZnJvbSBhIFpJUCBmaWxlLiBCdXQgdGhlIGNwNDM3IGVuY29kaW5nIGlzIGltcGxlbWVudGVkCkBAIC05NzMsNDQgKzEwMzIsNTkgQEAKICAgICAgICAgICAgIGNoYXJzZXQgPSAiYXNjaWkiOwogICAgICAgICAgICAgYm9vdHN0cmFwID0gMTsKICAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY2hhcnNldCA9ICJjcDQzNyI7CisgICAgICAgIH0KICAgICAgICAgbmFtZW9iaiA9IFB5VW5pY29kZV9EZWNvZGUobmFtZSwgbmFtZV9zaXplLCBjaGFyc2V0LCBOVUxMKTsKICAgICAgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKGJvb3RzdHJhcCkKKyAgICAgICAgICAgIGlmIChib290c3RyYXApIHsKICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKICAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcCBpc3N1ZTogcHl0aG9uJWklaS56aXAgY29udGFpbnMgbm9uLUFTQ0lJICIKICAgICAgICAgICAgICAgICAgICAgImZpbGVuYW1lcyB3aXRob3V0IHRoZSB1bmljb2RlIGZsYWciLAogICAgICAgICAgICAgICAgICAgICBQWV9NQUpPUl9WRVJTSU9OLCBQWV9NSU5PUl9WRVJTSU9OKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShuYW1lb2JqKSA9PSAtMSkKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShuYW1lb2JqKSA9PSAtMSkgewogICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogICAgICAgICBwYXRoID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVJWMlVSIsIGFyY2hpdmUsIFNFUCwgbmFtZW9iaik7Ci0gICAgICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIGlmIChwYXRoID09IE5VTEwpIHsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIHQgPSBQeV9CdWlsZFZhbHVlKCJOaGxsbmhobCIsIHBhdGgsIGNvbXByZXNzLCBkYXRhX3NpemUsCisgICAgICAgIH0KKyAgICAgICAgdCA9IFB5X0J1aWxkVmFsdWUoIk5ISUlrSEhJIiwgcGF0aCwgY29tcHJlc3MsIGRhdGFfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplLCBmaWxlX29mZnNldCwgdGltZSwgZGF0ZSwgY3JjKTsKLSAgICAgICAgaWYgKHQgPT0gTlVMTCkKKyAgICAgICAgaWYgKHQgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShmaWxlcywgbmFtZW9iaiwgdCk7CiAgICAgICAgIFB5X0NMRUFSKG5hbWVvYmopOwogICAgICAgICBQeV9ERUNSRUYodCk7Ci0gICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAgICAgICAgIGNvdW50Kys7CiAgICAgfQogICAgIGZjbG9zZShmcCk7Ci0gICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgemlwaW1wb3J0OiBmb3VuZCAlbGQgbmFtZXMgaW4gJVJcbiIsCisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKSB7CisgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyB6aXBpbXBvcnQ6IGZvdW5kICV1IG5hbWVzIGluICVSXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIGFyY2hpdmUpOworICAgIH0KICAgICByZXR1cm4gZmlsZXM7CisKK2VvZl9lcnJvcjoKKyAgICBzZXRfZmlsZV9lcnJvcihhcmNoaXZlLCAhZmVycm9yKGZwKSk7CisgICAgZ290byBlcnJvcjsKKwogZmlsZV9lcnJvcjoKLSAgICBmY2xvc2UoZnApOwotICAgIFB5X1hERUNSRUYoZmlsZXMpOwotICAgIFB5X1hERUNSRUYobmFtZW9iaik7CiAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3QgcmVhZCBaaXAgZmlsZTogJVIiLCBhcmNoaXZlKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICBnb3RvIGVycm9yOworCitpbnZhbGlkX2hlYWRlcjoKKyAgICBhc3NlcnQoZXJybXNnICE9IE5VTEwpOworICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgIiVzOiAlUiIsIGVycm1zZywgYXJjaGl2ZSk7CisgICAgZ290byBlcnJvcjsKKwogZXJyb3I6CiAgICAgZmNsb3NlKGZwKTsKICAgICBQeV9YREVDUkVGKGZpbGVzKTsKQEAgLTEwNTYsMTcgKzExMzAsMTggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZGF0YShQeU9iamVjdCAqYXJjaGl2ZSwgUHlPYmplY3QgKnRvY19lbnRyeSkKIHsKLSAgICBQeU9iamVjdCAqcmF3X2RhdGEsICpkYXRhID0gTlVMTCwgKmRlY29tcHJlc3M7CisgICAgUHlPYmplY3QgKnJhd19kYXRhID0gTlVMTCwgKmRhdGEsICpkZWNvbXByZXNzOwogICAgIGNoYXIgKmJ1ZjsKICAgICBGSUxFICpmcDsKLSAgICBpbnQgZXJyOwotICAgIFB5X3NzaXplX3QgYnl0ZXNfcmVhZCA9IDA7Ci0gICAgbG9uZyBsOwogICAgIFB5T2JqZWN0ICpkYXRhcGF0aDsKLSAgICBsb25nIGNvbXByZXNzLCBkYXRhX3NpemUsIGZpbGVfc2l6ZSwgZmlsZV9vZmZzZXQsIGJ5dGVzX3NpemU7Ci0gICAgbG9uZyB0aW1lLCBkYXRlLCBjcmM7CisgICAgdW5zaWduZWQgc2hvcnQgY29tcHJlc3MsIHRpbWUsIGRhdGU7CisgICAgdW5zaWduZWQgaW50IGNyYzsKKyAgICBQeV9zc2l6ZV90IGRhdGFfc2l6ZSwgZmlsZV9zaXplLCBieXRlc19zaXplOworICAgIGxvbmcgZmlsZV9vZmZzZXQsIGhlYWRlcl9zaXplOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzMwXTsKKyAgICBjb25zdCBjaGFyICplcnJtc2cgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHRvY19lbnRyeSwgIk9sbGxsbGxsIiwgJmRhdGFwYXRoLCAmY29tcHJlc3MsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHRvY19lbnRyeSwgIk9Ibm5sSEhJIiwgJmRhdGFwYXRoLCAmY29tcHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX3NpemUsICZmaWxlX3NpemUsICZmaWxlX29mZnNldCwgJnRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRlLCAmY3JjKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEwNzgsNDIgKzExNTMsMjkgQEAKIAogICAgIGZwID0gX1B5X2ZvcGVuX29iaihhcmNoaXZlLCAicmIiKTsKICAgICBpZiAoIWZwKSB7Ci0gICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAotICAgICAgICAgICAgICAgInppcGltcG9ydDogY2FuIG5vdCBvcGVuIGZpbGUgJVUiLCBhcmNoaXZlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCiAgICAgLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBsb2NhbCBmaWxlIGhlYWRlciBpcyBjb3JyZWN0ICovCiAgICAgaWYgKGZzZWVrKGZwLCBmaWxlX29mZnNldCwgMCkgPT0gLTEpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3QgcmVhZCBaaXAgZmlsZTogJVIiLCBhcmNoaXZlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKICAgICB9Ci0KLSAgICBsID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwotICAgIGlmIChsICE9IDB4MDQwMzRCNTApIHsKKyAgICBpZiAoZnJlYWQoYnVmZmVyLCAxLCAzMCwgZnApICE9IDMwKSB7CisgICAgICAgIGdvdG8gZW9mX2Vycm9yOworICAgIH0KKyAgICBpZiAoZ2V0X3VpbnQzMihidWZmZXIpICE9IDB4MDQwMzRCNTB1KSB7CiAgICAgICAgIC8qIEJhZDogTG9jYWwgRmlsZSBIZWFkZXIgKi8KLSAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbG9jYWwgZmlsZSBoZWFkZXIgaW4gJVUiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUpOwotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGZzZWVrKGZwLCBmaWxlX29mZnNldCArIDI2LCAwKSA9PSAtMSkgewotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJjYW4ndCByZWFkIFppcCBmaWxlOiAlUiIsIGFyY2hpdmUpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZXJybXNnID0gImJhZCBsb2NhbCBmaWxlIGhlYWRlciI7CisgICAgICAgIGdvdG8gaW52YWxpZF9oZWFkZXI7CiAgICAgfQogCi0gICAgbCA9IDMwICsgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKSArCi0gICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7ICAgICAgICAvKiBsb2NhbCBoZWFkZXIgc2l6ZSAqLwotICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgIGhlYWRlcl9zaXplID0gKHVuc2lnbmVkIGludCkzMCArCisgICAgICAgIGdldF91aW50MTYoYnVmZmVyICsgMjYpIC8qIGZpbGUgbmFtZSAqLyArCisgICAgICAgIGdldF91aW50MTYoYnVmZmVyICsgMjgpIC8qIGV4dHJhIGZpZWxkICovOworICAgIGlmIChmaWxlX29mZnNldCA+IExPTkdfTUFYIC0gaGVhZGVyX3NpemUpIHsKKyAgICAgICAgZXJybXNnID0gImJhZCBsb2NhbCBmaWxlIGhlYWRlciBzaXplIjsKKyAgICAgICAgZ290byBpbnZhbGlkX2hlYWRlcjsKICAgICB9Ci0gICAgZmlsZV9vZmZzZXQgKz0gbDsgICAgICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgZGF0YSAqLworICAgIGZpbGVfb2Zmc2V0ICs9IGhlYWRlcl9zaXplOyAgLyogU3RhcnQgb2YgZmlsZSBkYXRhICovCiAKICAgICBpZiAoZGF0YV9zaXplID4gTE9OR19NQVggLSAxKSB7CiAgICAgICAgIGZjbG9zZShmcCk7CkBAIC0xMTIxLDMzICsxMTgzLDI3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBieXRlc19zaXplID0gY29tcHJlc3MgPT0gMCA/IGRhdGFfc2l6ZSA6IGRhdGFfc2l6ZSArIDE7Ci0gICAgaWYgKGJ5dGVzX3NpemUgPT0gMCkKKyAgICBpZiAoYnl0ZXNfc2l6ZSA9PSAwKSB7CiAgICAgICAgIGJ5dGVzX3NpemUrKzsKKyAgICB9CiAgICAgcmF3X2RhdGEgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgYnl0ZXNfc2l6ZSk7Ci0KICAgICBpZiAocmF3X2RhdGEgPT0gTlVMTCkgewotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgYnVmID0gUHlCeXRlc19Bc1N0cmluZyhyYXdfZGF0YSk7CiAKLSAgICBlcnIgPSBmc2VlayhmcCwgZmlsZV9vZmZzZXQsIDApOwotICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICBieXRlc19yZWFkID0gZnJlYWQoYnVmLCAxLCBkYXRhX3NpemUsIGZwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICBQeV9ERUNSRUYocmF3X2RhdGEpOwotICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJjYW4ndCByZWFkIFppcCBmaWxlOiAlUiIsIGFyY2hpdmUpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZnNlZWsoZnAsIGZpbGVfb2Zmc2V0LCAwKSA9PSAtMSkgeworICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAgICAgfQotICAgIGZjbG9zZShmcCk7Ci0gICAgaWYgKGVyciB8fCBieXRlc19yZWFkICE9IGRhdGFfc2l6ZSkgeworICAgIGlmIChmcmVhZChidWYsIDEsIGRhdGFfc2l6ZSwgZnApICE9IChzaXplX3QpZGF0YV9zaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInppcGltcG9ydDogY2FuJ3QgcmVhZCBkYXRhIik7Ci0gICAgICAgIFB5X0RFQ1JFRihyYXdfZGF0YSk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAorICAgIGZjbG9zZShmcCk7CisgICAgZnAgPSBOVUxMOworCiAgICAgaWYgKGNvbXByZXNzICE9IDApIHsKICAgICAgICAgYnVmW2RhdGFfc2l6ZV0gPSAnWic7ICAvKiBzYXcgdGhpcyBpbiB6aXBmaWxlLnB5ICovCiAgICAgICAgIGRhdGFfc2l6ZSsrOwpAQCAtMTE3MCw5ICsxMjI2LDI4IEBACiAgICAgfQogICAgIGRhdGEgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZGVjb21wcmVzcywgIk9pIiwgcmF3X2RhdGEsIC0xNSk7CiAgICAgUHlfREVDUkVGKGRlY29tcHJlc3MpOwotZXJyb3I6CiAgICAgUHlfREVDUkVGKHJhd19kYXRhKTsKICAgICByZXR1cm4gZGF0YTsKKworZW9mX2Vycm9yOgorICAgIHNldF9maWxlX2Vycm9yKGFyY2hpdmUsICFmZXJyb3IoZnApKTsKKyAgICBnb3RvIGVycm9yOworCitmaWxlX2Vycm9yOgorICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgImNhbid0IHJlYWQgWmlwIGZpbGU6ICVSIiwgYXJjaGl2ZSk7CisgICAgZ290byBlcnJvcjsKKworaW52YWxpZF9oZWFkZXI6CisgICAgYXNzZXJ0KGVycm1zZyAhPSBOVUxMKTsKKyAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICIlczogJVIiLCBlcnJtc2csIGFyY2hpdmUpOworICAgIGdvdG8gZXJyb3I7CisKK2Vycm9yOgorICAgIGlmIChmcCAhPSBOVUxMKSB7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgfQorICAgIFB5X1hERUNSRUYocmF3X2RhdGEpOworICAgIHJldHVybiBOVUxMOwogfQogCiAvKiBMZW5pZW50IGRhdGUvdGltZSBjb21wYXJpc29uIGZ1bmN0aW9uLiBUaGUgcHJlY2lzaW9uIG9mIHRoZSBtdGltZQpAQCAtMTE5NywzNyArMTI3MiwzOSBAQAogdW5tYXJzaGFsX2NvZGUoUHlPYmplY3QgKnBhdGhuYW1lLCBQeU9iamVjdCAqZGF0YSwgdGltZV90IG10aW1lKQogewogICAgIFB5T2JqZWN0ICpjb2RlOwotICAgIGNoYXIgKmJ1ZiA9IFB5Qnl0ZXNfQXNTdHJpbmcoZGF0YSk7CisgICAgdW5zaWduZWQgY2hhciAqYnVmID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKGRhdGEpOwogICAgIFB5X3NzaXplX3Qgc2l6ZSA9IFB5Qnl0ZXNfU2l6ZShkYXRhKTsKIAotICAgIGlmIChzaXplIDw9IDkpIHsKKyAgICBpZiAoc2l6ZSA8IDEyKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhaaXBJbXBvcnRFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcHljIGRhdGEiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGdldF9sb25nKCh1bnNpZ25lZCBjaGFyICopYnVmKSAhPSBQeUltcG9ydF9HZXRNYWdpY051bWJlcigpKSB7Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKKyAgICBpZiAoZ2V0X3VpbnQzMihidWYpICE9ICh1bnNpZ25lZCBpbnQpUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIoKSkgeworICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpIHsKICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyAlUiBoYXMgYmFkIG1hZ2ljXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lKTsKKyAgICAgICAgfQogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiBQeV9Ob25lOyAgLyogc2lnbmFsIGNhbGxlciB0byB0cnkgYWx0ZXJuYXRpdmUgKi8KICAgICB9CiAKLSAgICBpZiAobXRpbWUgIT0gMCAmJiAhZXFfbXRpbWUoZ2V0X2xvbmcoKHVuc2lnbmVkIGNoYXIgKilidWYgKyA0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWUpKSB7Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKKyAgICBpZiAobXRpbWUgIT0gMCAmJiAhZXFfbXRpbWUoZ2V0X3VpbnQzMihidWYgKyA0KSwgbXRpbWUpKSB7CisgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykgewogICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjICVSIGhhcyBiYWQgbXRpbWVcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUpOworICAgICAgICB9CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7ICAvKiBzaWduYWwgY2FsbGVyIHRvIHRyeSBhbHRlcm5hdGl2ZSAqLwogICAgIH0KIAogICAgIC8qIFhYWCB0aGUgcHljJ3Mgc2l6ZSBmaWVsZCBpcyBpZ25vcmVkOyB0aW1lc3RhbXAgY29sbGlzaW9ucyBhcmUgcHJvYmFibHkKICAgICAgICB1bmltcG9ydGFudCB3aXRoIHppcCBmaWxlcy4gKi8KLSAgICBjb2RlID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGJ1ZiArIDEyLCBzaXplIC0gMTIpOwotICAgIGlmIChjb2RlID09IE5VTEwpCisgICAgY29kZSA9IFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY2hhciAqKWJ1ZiArIDEyLCBzaXplIC0gMTIpOworICAgIGlmIChjb2RlID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGlmICghUHlDb2RlX0NoZWNrKGNvZGUpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihjb2RlKTsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTEzMjUsNyArMTQwMiw3IEBACiAgICAgcmV0dXJuIG1rdGltZSgmc3RtKTsKIH0KIAotLyogR2l2ZW4gYSBwYXRoIHRvIGEgLnB5YyBvciAucHlvIGZpbGUgaW4gdGhlIGFyY2hpdmUsIHJldHVybiB0aGUKKy8qIEdpdmVuIGEgcGF0aCB0byBhIC5weWMgZmlsZSBpbiB0aGUgYXJjaGl2ZSwgcmV0dXJuIHRoZQogICAgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIG1hdGNoaW5nIC5weSBmaWxlLCBvciAwIGlmIG5vIHNvdXJjZQogICAgaXMgYXZhaWxhYmxlLiAqLwogc3RhdGljIHRpbWVfdApAQCAtMTQ4OCwxNyArMTU2NSw2IEBACiAgICAgLyogQ29ycmVjdCBkaXJlY3Rvcnkgc2VwYXJhdG9yICovCiAgICAgemlwX3NlYXJjaG9yZGVyWzBdLnN1ZmZpeFswXSA9IFNFUDsKICAgICB6aXBfc2VhcmNob3JkZXJbMV0uc3VmZml4WzBdID0gU0VQOwotICAgIHppcF9zZWFyY2hvcmRlclsyXS5zdWZmaXhbMF0gPSBTRVA7Ci0gICAgaWYgKFB5X09wdGltaXplRmxhZykgewotICAgICAgICAvKiBSZXZlcnNlICoucHljIGFuZCAqLnB5byAqLwotICAgICAgICBzdHJ1Y3Qgc3RfemlwX3NlYXJjaG9yZGVyIHRtcDsKLSAgICAgICAgdG1wID0gemlwX3NlYXJjaG9yZGVyWzBdOwotICAgICAgICB6aXBfc2VhcmNob3JkZXJbMF0gPSB6aXBfc2VhcmNob3JkZXJbMV07Ci0gICAgICAgIHppcF9zZWFyY2hvcmRlclsxXSA9IHRtcDsKLSAgICAgICAgdG1wID0gemlwX3NlYXJjaG9yZGVyWzNdOwotICAgICAgICB6aXBfc2VhcmNob3JkZXJbM10gPSB6aXBfc2VhcmNob3JkZXJbNF07Ci0gICAgICAgIHppcF9zZWFyY2hvcmRlcls0XSA9IHRtcDsKLSAgICB9CiAKICAgICBtb2QgPSBQeU1vZHVsZV9DcmVhdGUoJnppcGltcG9ydG1vZHVsZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGlibW9kdWxlLmMgYi9Nb2R1bGVzL3psaWJtb2R1bGUuYwppbmRleCAwZDJlMTg4Li5mY2NiNjE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3psaWJtb2R1bGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHpsaWJtb2R1bGUuYyAtLSBnemlwLWNvbXBhdGlibGUgZGF0YSBjb21wcmVzc2lvbiAqLwotLyogU2VlIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8gKi8KKy8qIFNlZSBodHRwOi8vemxpYi5uZXQvICovCiAKIC8qIFdpbmRvd3MgdXNlcnM6ICByZWFkIFB5dGhvbidzIFBDYnVpbGRccmVhZG1lLnR4dCAqLwogCkBAIC0yMiw2ICsyMiwxMCBAQAogICAgICNkZWZpbmUgTEVBVkVfWkxJQihvYmopCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoWkxJQl9WRVJOVU0pICYmIFpMSUJfVkVSTlVNID49IDB4MTIyMQorIyAgZGVmaW5lIEFUX0xFQVNUX1pMSUJfMV8yXzJfMQorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgY29waWVkIGZyb20genV0aWwuaCwgdmVyc2lvbiAwLjk1ICovCiAjZGVmaW5lIERFRkxBVEVEICAgOAogI2lmIE1BWF9NRU1fTEVWRUwgPj0gOApAQCAtODIsMTIgKzg2LDExIEBACiB9CiAKIC8qW2NsaW5pYyBpbnB1dF0KLW91dHB1dCBwcmVzZXQgZmlsZQogbW9kdWxlIHpsaWIKIGNsYXNzIHpsaWIuQ29tcHJlc3MgImNvbXBvYmplY3QgKiIgIiZDb21wdHlwZSIKIGNsYXNzIHpsaWIuRGVjb21wcmVzcyAiY29tcG9iamVjdCAqIiAiJkRlY29tcHR5cGUiCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1iZmQ0YzM0MDU3M2JhOTFkXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0wOTM5MzUxMTVjM2UzMTU4XSovCiAKIHN0YXRpYyBjb21wb2JqZWN0ICoKIG5ld2NvbXBvYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlKQpAQCAtMTEyLDYgKzExNSw3IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsICJVbmFibGUgdG8gYWxsb2NhdGUgbG9jayIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMzUsNiArMTM5LDYzIEBACiAgICAgUHlNZW1fUmF3RnJlZShwdHIpOwogfQogCitzdGF0aWMgdm9pZAorYXJyYW5nZV9pbnB1dF9idWZmZXIoel9zdHJlYW0gKnpzdCwgUHlfc3NpemVfdCAqcmVtYWlucykKK3sKKyAgICB6c3QtPmF2YWlsX2luID0gUHlfTUlOKChzaXplX3QpKnJlbWFpbnMsIFVJTlRfTUFYKTsKKyAgICAqcmVtYWlucyAtPSB6c3QtPmF2YWlsX2luOworfQorCitzdGF0aWMgUHlfc3NpemVfdAorYXJyYW5nZV9vdXRwdXRfYnVmZmVyX3dpdGhfbWF4aW11bSh6X3N0cmVhbSAqenN0LCBQeU9iamVjdCAqKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4X2xlbmd0aCkKK3sKKyAgICBQeV9zc2l6ZV90IG9jY3VwaWVkOworCisgICAgaWYgKCpidWZmZXIgPT0gTlVMTCkgeworICAgICAgICBpZiAoISgqYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgb2NjdXBpZWQgPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgb2NjdXBpZWQgPSB6c3QtPm5leHRfb3V0IC0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORygqYnVmZmVyKTsKKworICAgICAgICBpZiAobGVuZ3RoID09IG9jY3VwaWVkKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG5ld19sZW5ndGg7CisgICAgICAgICAgICBhc3NlcnQobGVuZ3RoIDw9IG1heF9sZW5ndGgpOworICAgICAgICAgICAgLyogY2FuIG5vdCBzY2FsZSB0aGUgYnVmZmVyIG92ZXIgbWF4X2xlbmd0aCAqLworICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSBtYXhfbGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgICAgIGlmIChsZW5ndGggPD0gKG1heF9sZW5ndGggPj4gMSkpCisgICAgICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5ld19sZW5ndGggPSBtYXhfbGVuZ3RoOworICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZShidWZmZXIsIG5ld19sZW5ndGgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBsZW5ndGggPSBuZXdfbGVuZ3RoOworICAgICAgICB9CisgICAgfQorCisgICAgenN0LT5hdmFpbF9vdXQgPSBQeV9NSU4oKHNpemVfdCkobGVuZ3RoIC0gb2NjdXBpZWQpLCBVSU5UX01BWCk7CisgICAgenN0LT5uZXh0X291dCA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcoKmJ1ZmZlcikgKyBvY2N1cGllZDsKKworICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyBQeV9zc2l6ZV90CithcnJhbmdlX291dHB1dF9idWZmZXIoel9zdHJlYW0gKnpzdCwgUHlPYmplY3QgKipidWZmZXIsIFB5X3NzaXplX3QgbGVuZ3RoKQoreworICAgIFB5X3NzaXplX3QgcmV0OworCisgICAgcmV0ID0gYXJyYW5nZV9vdXRwdXRfYnVmZmVyX3dpdGhfbWF4aW11bSh6c3QsIGJ1ZmZlciwgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOworICAgIGlmIChyZXQgPT0gLTIpCisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCiAvKltjbGluaWMgaW5wdXRdCiB6bGliLmNvbXByZXNzCiAKQEAgLTE0OCw1MyArMjA5LDMzIEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2NvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpieXRlcywgaW50IGxldmVsKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVkN2RkNDU4ODc4OGVmZDMgaW5wdXQ9YmUzYWJlOTkzNGJkYTRiM10qLworemxpYl9jb21wcmVzc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2J1ZmZlciAqYnl0ZXMsIGludCBsZXZlbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hZTY0YzJjMzA3NjMyMWEwIGlucHV0PWJlM2FiZTk5MzRiZGE0YjNdKi8KIHsKLSAgICBQeU9iamVjdCAqUmV0dXJuVmFsID0gTlVMTDsKLSAgICBCeXRlICppbnB1dCwgKm91dHB1dCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IGxlbmd0aDsKLSAgICBpbnQgZXJyOworICAgIFB5T2JqZWN0ICpSZXRWYWwgPSBOVUxMOworICAgIEJ5dGUgKmlidWY7CisgICAgUHlfc3NpemVfdCBpYnVmbGVuLCBvYnVmbGVuID0gREVGX0JVRl9TSVpFOworICAgIGludCBlcnIsIGZsdXNoOwogICAgIHpfc3RyZWFtIHpzdDsKIAotICAgIGlmICgoc2l6ZV90KWJ5dGVzLT5sZW4gPiBVSU5UX01BWCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgaW5wdXQgPSBieXRlcy0+YnVmOwotICAgIGxlbmd0aCA9ICh1bnNpZ25lZCBpbnQpYnl0ZXMtPmxlbjsKLQotICAgIHpzdC5hdmFpbF9vdXQgPSBsZW5ndGggKyBsZW5ndGgvMTAwMCArIDEyICsgMTsKLQotICAgIG91dHB1dCA9IChCeXRlKilQeU1lbV9NYWxsb2MoenN0LmF2YWlsX291dCk7Ci0gICAgaWYgKG91dHB1dCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gY29tcHJlc3MgZGF0YSIpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQotICAgIC8qIFBhc3QgdGhlIHBvaW50IG9mIG5vIHJldHVybi4gIEZyb20gaGVyZSBvbiBvdXQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCi0gICAgICAgd2UgY2xlYW4gdXAgbWFsbG9jcyAmIElOQ1JFRnMuICovCisgICAgaWJ1ZiA9IGJ5dGVzLT5idWY7CisgICAgaWJ1ZmxlbiA9IGJ5dGVzLT5sZW47CiAKICAgICB6c3Qub3BhcXVlID0gTlVMTDsKICAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKICAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKLSAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKW91dHB1dDsKLSAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7Ci0gICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOworICAgIHpzdC5uZXh0X2luID0gaWJ1ZjsKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmenN0LCBsZXZlbCk7CiAKLSAgICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZShaX09LKToKKyAgICBzd2l0Y2ggKGVycikgeworICAgIGNhc2UgWl9PSzoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZShaX01FTV9FUlJPUik6CisgICAgY2FzZSBaX01FTV9FUlJPUjoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIk91dCBvZiBtZW1vcnkgd2hpbGUgY29tcHJlc3NpbmcgZGF0YSIpOwogICAgICAgICBnb3RvIGVycm9yOwotICAgIGNhc2UoWl9TVFJFQU1fRVJST1IpOgotICAgICAgICBQeUVycl9TZXRTdHJpbmcoWmxpYkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBjb21wcmVzc2lvbiBsZXZlbCIpOworICAgIGNhc2UgWl9TVFJFQU1fRVJST1I6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhabGliRXJyb3IsICJCYWQgY29tcHJlc3Npb24gbGV2ZWwiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICBkZWZhdWx0OgogICAgICAgICBkZWZsYXRlRW5kKCZ6c3QpOwpAQCAtMjAyLDY3ICsyNDMsNzMgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTOwotICAgIGVyciA9IGRlZmxhdGUoJnpzdCwgWl9GSU5JU0gpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTOworICAgIGRvIHsKKyAgICAgICAgYXJyYW5nZV9pbnB1dF9idWZmZXIoJnpzdCwgJmlidWZsZW4pOworICAgICAgICBmbHVzaCA9IGlidWZsZW4gPT0gMCA/IFpfRklOSVNIIDogWl9OT19GTFVTSDsKIAotICAgIGlmIChlcnIgIT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgIHpsaWJfZXJyb3IoenN0LCBlcnIsICJ3aGlsZSBjb21wcmVzc2luZyBkYXRhIik7Ci0gICAgICAgIGRlZmxhdGVFbmQoJnpzdCk7Ci0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG9idWZsZW4gPSBhcnJhbmdlX291dHB1dF9idWZmZXIoJnpzdCwgJlJldFZhbCwgb2J1Zmxlbik7CisgICAgICAgICAgICBpZiAob2J1ZmxlbiA8IDApIHsKKyAgICAgICAgICAgICAgICBkZWZsYXRlRW5kKCZ6c3QpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIGVyciA9IGRlZmxhdGUoJnpzdCwgZmx1c2gpOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICAgICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FUlJPUikgeworICAgICAgICAgICAgICAgIGRlZmxhdGVFbmQoJnpzdCk7CisgICAgICAgICAgICAgICAgemxpYl9lcnJvcih6c3QsIGVyciwgIndoaWxlIGNvbXByZXNzaW5nIGRhdGEiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gd2hpbGUgKHpzdC5hdmFpbF9vdXQgPT0gMCk7CisgICAgICAgIGFzc2VydCh6c3QuYXZhaWxfaW4gPT0gMCk7CisKKyAgICB9IHdoaWxlIChmbHVzaCAhPSBaX0ZJTklTSCk7CisgICAgYXNzZXJ0KGVyciA9PSBaX1NUUkVBTV9FTkQpOworCisgICAgZXJyID0gZGVmbGF0ZUVuZCgmenN0KTsKKyAgICBpZiAoZXJyID09IFpfT0spIHsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCB6c3QubmV4dF9vdXQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCeXRlICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmV0dXJuIFJldFZhbDsKICAgICB9Ci0KLSAgICBlcnI9ZGVmbGF0ZUVuZCgmenN0KTsKLSAgICBpZiAoZXJyID09IFpfT0spCi0gICAgICAgIFJldHVyblZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenN0LnRvdGFsX291dCk7CiAgICAgZWxzZQogICAgICAgICB6bGliX2Vycm9yKHpzdCwgZXJyLCAid2hpbGUgZmluaXNoaW5nIGNvbXByZXNzaW9uIik7Ci0KICBlcnJvcjoKLSAgICBQeU1lbV9GcmVlKG91dHB1dCk7Ci0KLSAgICByZXR1cm4gUmV0dXJuVmFsOworICAgIFB5X1hERUNSRUYoUmV0VmFsKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogLypbcHl0aG9uIGlucHV0XQogCi1jbGFzcyB1aW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKLSAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKLSAgICBjb252ZXJ0ZXIgPSAndWludF9jb252ZXJ0ZXInCitjbGFzcyBzc2l6ZV90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X3NzaXplX3QnCisgICAgY29udmVydGVyID0gJ3NzaXplX3RfY29udmVydGVyJwogICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCiAKIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KLS8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTIyMjYzODU1ZjdhM2ViZmRdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTVmMzRiYTFiMzk0Y2I4ZTddKi8KIAogc3RhdGljIGludAotdWludF9jb252ZXJ0ZXIoUHlPYmplY3QgKm9iaiwgdm9pZCAqcHRyKQorc3NpemVfdF9jb252ZXJ0ZXIoUHlPYmplY3QgKm9iaiwgdm9pZCAqcHRyKQogewotICAgIGxvbmcgdmFsOwotICAgIHVuc2lnbmVkIGxvbmcgdXZhbDsKKyAgICBQeU9iamVjdCAqbG9uZ19vYmo7CisgICAgUHlfc3NpemVfdCB2YWw7CiAKLSAgICB2YWwgPSBQeUxvbmdfQXNMb25nKG9iaik7Ci0gICAgaWYgKHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIHV2YWwgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKLSAgICAgICAgaWYgKHV2YWwgPT0gKHVuc2lnbmVkIGxvbmcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHZhbCA8IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICB1dmFsID0gKHVuc2lnbmVkIGxvbmcpdmFsOwotICAgIH0KLQotICAgIGlmICh1dmFsID4gVUlOVF9NQVgpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIGludCB0b28gbGFyZ2UgZm9yIEMgdW5zaWduZWQgaW50Iik7CisgICAgbG9uZ19vYmogPSAoUHlPYmplY3QgKilfUHlMb25nX0Zyb21OYkludChvYmopOworICAgIGlmIChsb25nX29iaiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgICoodW5zaWduZWQgaW50ICopcHRyID0gUHlfU0FGRV9ET1dOQ0FTVCh1dmFsLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOworICAgIHZhbCA9IFB5TG9uZ19Bc1NzaXplX3QobG9uZ19vYmopOworICAgIFB5X0RFQ1JFRihsb25nX29iaik7CisgICAgaWYgKHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAqKFB5X3NzaXplX3QgKilwdHIgPSB2YWw7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTI3Miw4ICszMTksOCBAQAogICAgIGRhdGE6IFB5X2J1ZmZlcgogICAgICAgICBDb21wcmVzc2VkIGRhdGEuCiAgICAgd2JpdHM6IGludChjX2RlZmF1bHQ9Ik1BWF9XQklUUyIpID0gTUFYX1dCSVRTCi0gICAgICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUuCi0gICAgYnVmc2l6ZTogdWludChjX2RlZmF1bHQ9IkRFRl9CVUZfU0laRSIpID0gREVGX0JVRl9TSVpFCisgICAgICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUgYW5kIGNvbnRhaW5lciBmb3JtYXQuCisgICAgYnVmc2l6ZTogc3NpemVfdChjX2RlZmF1bHQ9IkRFRl9CVUZfU0laRSIpID0gREVGX0JVRl9TSVpFCiAgICAgICAgIFRoZSBpbml0aWFsIG91dHB1dCBidWZmZXIgc2l6ZS4KICAgICAvCiAKQEAgLTI4MSw0NCArMzI4LDM3IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2RlY29tcHJlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCB3Yml0cywgdW5zaWduZWQgaW50IGJ1ZnNpemUpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWU1NDY0ZTcyZGY5Y2I1ZiBpbnB1dD0wZjRiOWFiYjcxMDNmNTBlXSovCit6bGliX2RlY29tcHJlc3NfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCB3Yml0cywKKyAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgYnVmc2l6ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03N2M3ZTM1MTExZGM4YzQyIGlucHV0PWMxM2RkMmM1Njk2Y2QxN2ZdKi8KIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0X3N0ciA9IE5VTEw7Ci0gICAgQnl0ZSAqaW5wdXQ7Ci0gICAgdW5zaWduZWQgaW50IGxlbmd0aDsKLSAgICBpbnQgZXJyOwotICAgIHVuc2lnbmVkIGludCBuZXdfYnVmc2l6ZTsKKyAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKKyAgICBCeXRlICppYnVmOworICAgIFB5X3NzaXplX3QgaWJ1ZmxlbjsKKyAgICBpbnQgZXJyLCBmbHVzaDsKICAgICB6X3N0cmVhbSB6c3Q7CiAKLSAgICBpZiAoKHNpemVfdClkYXRhLT5sZW4gPiBVSU5UX01BWCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgaW5wdXQgPSBkYXRhLT5idWY7Ci0gICAgbGVuZ3RoID0gKHVuc2lnbmVkIGludClkYXRhLT5sZW47Ci0KLSAgICBpZiAoYnVmc2l6ZSA9PSAwKQorICAgIGlmIChidWZzaXplIDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZnNpemUgbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIGlmIChidWZzaXplID09IDApIHsKICAgICAgICAgYnVmc2l6ZSA9IDE7CisgICAgfQogCi0gICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOwotICAgIHpzdC5hdmFpbF9vdXQgPSBidWZzaXplOwotCi0gICAgaWYgKCEocmVzdWx0X3N0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmc2l6ZSkpKQotICAgICAgICBnb3RvIGVycm9yOworICAgIGlidWYgPSBkYXRhLT5idWY7CisgICAgaWJ1ZmxlbiA9IGRhdGEtPmxlbjsKIAogICAgIHpzdC5vcGFxdWUgPSBOVUxMOwogICAgIHpzdC56YWxsb2MgPSBQeVpsaWJfTWFsbG9jOwogICAgIHpzdC56ZnJlZSA9IFB5WmxpYl9GcmVlOwotICAgIHpzdC5uZXh0X291dCA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcocmVzdWx0X3N0cik7Ci0gICAgenN0Lm5leHRfaW4gPSAoQnl0ZSAqKWlucHV0OworICAgIHpzdC5hdmFpbF9pbiA9IDA7CisgICAgenN0Lm5leHRfaW4gPSBpYnVmOwogICAgIGVyciA9IGluZmxhdGVJbml0MigmenN0LCB3Yml0cyk7CiAKLSAgICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZShaX09LKToKKyAgICBzd2l0Y2ggKGVycikgeworICAgIGNhc2UgWl9PSzoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZShaX01FTV9FUlJPUik6CisgICAgY2FzZSBaX01FTV9FUlJPUjoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIk91dCBvZiBtZW1vcnkgd2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zMjksNDYgKzM2OSw0NiBAQAogICAgIH0KIAogICAgIGRvIHsKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBlcnI9aW5mbGF0ZSgmenN0LCBaX0ZJTklTSCk7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGFycmFuZ2VfaW5wdXRfYnVmZmVyKCZ6c3QsICZpYnVmbGVuKTsKKyAgICAgICAgZmx1c2ggPSBpYnVmbGVuID09IDAgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0g7CiAKLSAgICAgICAgc3dpdGNoKGVycikgewotICAgICAgICBjYXNlKFpfU1RSRUFNX0VORCk6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZShaX0JVRl9FUlJPUik6Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogSWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBieXRlIG9mIHJvb20gYWNjb3JkaW5nIHRvIHpzdC5hdmFpbF9vdXQKLSAgICAgICAgICAgICAqIGFuZCB3ZSBnZXQgdGhpcyBlcnJvciwgYXNzdW1lIHRoYXQgaXQgbWVhbnMgemxpYiBjYW5ub3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgdGhlIGluZmxhdGUgY2FsbCgpIGR1ZSB0byBhbiBlcnJvciBpbiB0aGUgZGF0YS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHpzdC5hdmFpbF9vdXQgPiAwKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBhcnJhbmdlX291dHB1dF9idWZmZXIoJnpzdCwgJlJldFZhbCwgYnVmc2l6ZSk7CisgICAgICAgICAgICBpZiAoYnVmc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgICBpbmZsYXRlRW5kKCZ6c3QpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIGVyciA9IGluZmxhdGUoJnpzdCwgZmx1c2gpOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICAgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgICAgIGNhc2UgWl9PSzogICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgWl9CVUZfRVJST1I6ICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgWl9TVFJFQU1fRU5EOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBaX01FTV9FUlJPUjoKKyAgICAgICAgICAgICAgICBpbmZsYXRlRW5kKCZ6c3QpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk91dCBvZiBtZW1vcnkgd2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKICAgICAgICAgICAgICAgICB6bGliX2Vycm9yKHpzdCwgZXJyLCAid2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7Ci0gICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgIGNhc2UoWl9PSyk6Ci0gICAgICAgICAgICAvKiBuZWVkIG1vcmUgbWVtb3J5ICovCi0gICAgICAgICAgICBpZiAoYnVmc2l6ZSA8PSAoVUlOVF9NQVggPj4gMSkpCi0gICAgICAgICAgICAgICAgbmV3X2J1ZnNpemUgPSBidWZzaXplIDw8IDE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV3X2J1ZnNpemUgPSBVSU5UX01BWDsKLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdF9zdHIsIG5ld19idWZzaXplKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpbmZsYXRlRW5kKCZ6c3QpOwotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB6c3QubmV4dF9vdXQgPQotICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocmVzdWx0X3N0cikgKyBidWZzaXplOwotICAgICAgICAgICAgenN0LmF2YWlsX291dCA9IGJ1ZnNpemU7Ci0gICAgICAgICAgICBidWZzaXplID0gbmV3X2J1ZnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGluZmxhdGVFbmQoJnpzdCk7Ci0gICAgICAgICAgICB6bGliX2Vycm9yKHpzdCwgZXJyLCAid2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoZXJyICE9IFpfU1RSRUFNX0VORCk7CisKKyAgICAgICAgfSB3aGlsZSAoenN0LmF2YWlsX291dCA9PSAwKTsKKworICAgIH0gd2hpbGUgKGVyciAhPSBaX1NUUkVBTV9FTkQgJiYgaWJ1ZmxlbiAhPSAwKTsKKworCisgICAgaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpIHsKKyAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKKyAgICAgICAgemxpYl9lcnJvcih6c3QsIGVyciwgIndoaWxlIGRlY29tcHJlc3NpbmcgZGF0YSIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIGVyciA9IGluZmxhdGVFbmQoJnpzdCk7CiAgICAgaWYgKGVyciAhPSBaX09LKSB7CkBAIC0zNzYsMTMgKzQxNiwxNCBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdF9zdHIsIHpzdC50b3RhbF9vdXQpIDwgMCkKKyAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHpzdC5uZXh0X291dCAtCisgICAgICAgICAgICAgICAgICAgICAgICAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCkpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHJldHVybiByZXN1bHRfc3RyOworICAgIHJldHVybiBSZXRWYWw7CiAKICBlcnJvcjoKLSAgICBQeV9YREVDUkVGKHJlc3VsdF9zdHIpOworICAgIFB5X1hERUNSRUYoUmV0VmFsKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMzkwLDEyICs0MzEsMTYgQEAKIHpsaWIuY29tcHJlc3NvYmoKIAogICAgIGxldmVsOiBpbnQoY19kZWZhdWx0PSJaX0RFRkFVTFRfQ09NUFJFU1NJT04iKSA9IFpfREVGQVVMVF9DT01QUkVTU0lPTgotICAgICAgICBUaGUgY29tcHJlc3Npb24gbGV2ZWwgKGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAtOTsgZGVmYXVsdCBpcyA2KS4KLSAgICAgICAgSGlnaGVyIGNvbXByZXNzaW9uIGxldmVscyBhcmUgc2xvd2VyLCBidXQgcHJvZHVjZSBzbWFsbGVyIHJlc3VsdHMuCisgICAgICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCAoYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05IG9yIC0xOyBkZWZhdWx0IGlzCisgICAgICAgIGN1cnJlbnRseSBlcXVpdmFsZW50IHRvIDYpLiAgSGlnaGVyIGNvbXByZXNzaW9uIGxldmVscyBhcmUgc2xvd2VyLAorICAgICAgICBidXQgcHJvZHVjZSBzbWFsbGVyIHJlc3VsdHMuCiAgICAgbWV0aG9kOiBpbnQoY19kZWZhdWx0PSJERUZMQVRFRCIpID0gREVGTEFURUQKICAgICAgICAgVGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gIElmIGdpdmVuLCB0aGlzIG11c3QgYmUgREVGTEFURUQuCiAgICAgd2JpdHM6IGludChjX2RlZmF1bHQ9Ik1BWF9XQklUUyIpID0gTUFYX1dCSVRTCi0gICAgICAgIFRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplIChyYW5nZTogOC4uMTUpLgorICAgICAgICArOSB0byArMTU6IFRoZSBiYXNlLXR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplLiAgSW5jbHVkZSBhIHpsaWIKKyAgICAgICAgICAgIGNvbnRhaW5lci4KKyAgICAgICAgLTkgdG8gLTE1OiBHZW5lcmF0ZSBhIHJhdyBzdHJlYW0uCisgICAgICAgICsyNSB0byArMzE6IEluY2x1ZGUgYSBnemlwIGNvbnRhaW5lci4KICAgICBtZW1MZXZlbDogaW50KGNfZGVmYXVsdD0iREVGX01FTV9MRVZFTCIpID0gREVGX01FTV9MRVZFTAogICAgICAgICBDb250cm9scyB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGZvciBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4KICAgICAgICAgVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMSB0byA5LiAgSGlnaGVyIHZhbHVlcyByZXN1bHQgaW4gaGlnaGVyIG1lbW9yeQpAQCAtNDExLDggKzQ1Niw5IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2NvbXByZXNzb2JqX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGxldmVsLCBpbnQgbWV0aG9kLCBpbnQgd2JpdHMsIGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LCBQeV9idWZmZXIgKnpkaWN0KQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg5ZTVhNmMxNDQ5Y2FhOWUgaW5wdXQ9YjAzNDg0N2Y4ODIxZjZhZl0qLworemxpYl9jb21wcmVzc29ial9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBsZXZlbCwgaW50IG1ldGhvZCwgaW50IHdiaXRzLAorICAgICAgICAgICAgICAgICAgICAgIGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LCBQeV9idWZmZXIgKnpkaWN0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThiNWJlZDljOGZjMzgxNGQgaW5wdXQ9MmZhM2QwMjZmOTBhYjhkNV0qLwogewogICAgIGNvbXBvYmplY3QgKnNlbGYgPSBOVUxMOwogICAgIGludCBlcnI7CkBAIC00MjQsNyArNDcwLDcgQEAKICAgICB9CiAKICAgICBzZWxmID0gbmV3Y29tcG9iamVjdCgmQ29tcHR5cGUpOwotICAgIGlmIChzZWxmPT1OVUxMKQorICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CiAgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CkBAIC00MzIsOCArNDc4LDggQEAKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IE5VTEw7CiAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKICAgICBlcnIgPSBkZWZsYXRlSW5pdDIoJnNlbGYtPnpzdCwgbGV2ZWwsIG1ldGhvZCwgd2JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSk7Ci0gICAgc3dpdGNoKGVycikgewotICAgIGNhc2UgKFpfT0spOgorICAgIHN3aXRjaCAoZXJyKSB7CisgICAgY2FzZSBaX09LOgogICAgICAgICBzZWxmLT5pc19pbml0aWFsaXNlZCA9IDE7CiAgICAgICAgIGlmICh6ZGljdC0+YnVmID09IE5VTEwpIHsKICAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKQEAgLTQ0MSw5ICs0ODcsOSBAQAogICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0LT5idWYsICh1bnNpZ25lZCBpbnQpemRpY3QtPmxlbik7CiAgICAgICAgICAgICBzd2l0Y2ggKGVycikgewotICAgICAgICAgICAgY2FzZSAoWl9PSyk6CisgICAgICAgICAgICBjYXNlIFpfT0s6CiAgICAgICAgICAgICAgICAgZ290byBzdWNjZXNzOwotICAgICAgICAgICAgY2FzZSAoWl9TVFJFQU1fRVJST1IpOgorICAgICAgICAgICAgY2FzZSBaX1NUUkVBTV9FUlJPUjoKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgZGljdGlvbmFyeSIpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDUxLDExICs0OTcsMTEgQEAKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgIH0KLSAgICBjYXNlIChaX01FTV9FUlJPUik6CisgICAgY2FzZSBaX01FTV9FUlJPUjoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgY29tcHJlc3Npb24gb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgY2FzZShaX1NUUkVBTV9FUlJPUik6CisgICAgY2FzZSBaX1NUUkVBTV9FUlJPUjoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJbnZhbGlkIGluaXRpYWxpemF0aW9uIG9wdGlvbiIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIGRlZmF1bHQ6CkBAIC00NjYsMTQgKzUxMiwzOSBAQAogIGVycm9yOgogICAgIFB5X0NMRUFSKHNlbGYpOwogIHN1Y2Nlc3M6Ci0gICAgcmV0dXJuIChQeU9iamVjdCopc2VsZjsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKK30KKworc3RhdGljIGludAorc2V0X2luZmxhdGVfemRpY3QoY29tcG9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9idWZmZXIgemRpY3RfYnVmOworICAgIGludCBlcnI7CisKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHNlbGYtPnpkaWN0LCAmemRpY3RfYnVmLCBQeUJVRl9TSU1QTEUpID09IC0xKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKChzaXplX3QpemRpY3RfYnVmLmxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInpkaWN0IGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0X2J1Zik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZXJyID0gaW5mbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZGljdF9idWYuYnVmLCAodW5zaWduZWQgaW50KXpkaWN0X2J1Zi5sZW4pOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0X2J1Zik7CisgICAgaWYgKGVyciAhPSBaX09LKSB7CisgICAgICAgIHpsaWJfZXJyb3Ioc2VsZi0+enN0LCBlcnIsICJ3aGlsZSBzZXR0aW5nIHpkaWN0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qW2NsaW5pYyBpbnB1dF0KIHpsaWIuZGVjb21wcmVzc29iagogCiAgICAgd2JpdHM6IGludChjX2RlZmF1bHQ9Ik1BWF9XQklUUyIpID0gTUFYX1dCSVRTCi0gICAgICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUuCisgICAgICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUgYW5kIGNvbnRhaW5lciBmb3JtYXQuCiAgICAgemRpY3Q6IG9iamVjdChjX2RlZmF1bHQ9Ik5VTEwiKSA9IGInJwogICAgICAgICBUaGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LiAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lCiAgICAgICAgIGRpY3Rpb25hcnkgYXMgdXNlZCBieSB0aGUgY29tcHJlc3NvciB0aGF0IHByb2R1Y2VkIHRoZSBpbnB1dCBkYXRhLgpAQCAtNDgyLDggKzU1Myw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2RlY29tcHJlc3NvYmpfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgd2JpdHMsIFB5T2JqZWN0ICp6ZGljdCkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04Y2NkNTgzZmJkNjMxNzk4IGlucHV0PTY3ZjA1MTQ1YTY5MjAxMjddKi8KK3psaWJfZGVjb21wcmVzc29ial9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCB3Yml0cywgUHlPYmplY3QgKnpkaWN0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTMwNjliOTk5OTRmMzY5MDYgaW5wdXQ9ZDM4MzJiODUxMWZjOTc3Yl0qLwogewogICAgIGludCBlcnI7CiAgICAgY29tcG9iamVjdCAqc2VsZjsKQEAgLTQ5Niw3ICs1NjcsNyBAQAogCiAgICAgc2VsZiA9IG5ld2NvbXBvYmplY3QoJkRlY29tcHR5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCi0gICAgICAgIHJldHVybihOVUxMKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CiAgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CiAgICAgc2VsZi0+enN0LnpmcmVlID0gUHlabGliX0ZyZWU7CkBAIC01MDcsMTUgKzU3OCwyOSBAQAogICAgICAgICBzZWxmLT56ZGljdCA9IHpkaWN0OwogICAgIH0KICAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJnNlbGYtPnpzdCwgd2JpdHMpOwotICAgIHN3aXRjaChlcnIpIHsKLSAgICBjYXNlIChaX09LKToKKyAgICBzd2l0Y2ggKGVycikgeworICAgIGNhc2UgWl9PSzoKICAgICAgICAgc2VsZi0+aXNfaW5pdGlhbGlzZWQgPSAxOwotICAgICAgICByZXR1cm4gKFB5T2JqZWN0KilzZWxmOwotICAgIGNhc2UoWl9TVFJFQU1fRVJST1IpOgorICAgICAgICBpZiAoc2VsZi0+emRpY3QgIT0gTlVMTCAmJiB3Yml0cyA8IDApIHsKKyNpZmRlZiBBVF9MRUFTVF9aTElCXzFfMl8yXzEKKyAgICAgICAgICAgIGlmIChzZXRfaW5mbGF0ZV96ZGljdChzZWxmKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFpsaWJFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiemxpYiB2ZXJzaW9uICVzIGRvZXMgbm90IGFsbG93IHJhdyBpbmZsYXRlIHdpdGggZGljdGlvbmFyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CisgICAgY2FzZSBaX1NUUkVBTV9FUlJPUjoKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgaW5pdGlhbGl6YXRpb24gb3B0aW9uIik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGNhc2UgKFpfTUVNX0VSUk9SKToKKyAgICBjYXNlIFpfTUVNX0VSUk9SOgogICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRlY29tcHJlc3Npb24gb2JqZWN0Iik7CkBAIC01NzMsMTE1ICs2NTgsOTAgQEAKIHpsaWJfQ29tcHJlc3NfY29tcHJlc3NfaW1wbChjb21wb2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpCiAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWQ1Y2Q3OTFjYmM2YTdmNCBpbnB1dD0wZDk1OTA4ZDZlNjRmYWI4XSovCiB7CisgICAgUHlPYmplY3QgKlJldFZhbCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpYnVmbGVuLCBvYnVmbGVuID0gREVGX0JVRl9TSVpFOwogICAgIGludCBlcnI7Ci0gICAgdW5zaWduZWQgaW50IGlucGxlbjsKLSAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGX0JVRl9TSVpFLCBuZXdfbGVuZ3RoOwotICAgIFB5T2JqZWN0ICpSZXRWYWw7Ci0gICAgQnl0ZSAqaW5wdXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CiAKLSAgICBpZiAoKHNpemVfdClkYXRhLT5sZW4gPiBVSU5UX01BWCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlucHV0ID0gZGF0YS0+YnVmOwotICAgIGlucGxlbiA9ICh1bnNpZ25lZCBpbnQpZGF0YS0+bGVuOwotCi0gICAgaWYgKCEoUmV0VmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBkYXRhLT5idWY7CisgICAgaWJ1ZmxlbiA9IGRhdGEtPmxlbjsKIAogICAgIEVOVEVSX1pMSUIoc2VsZik7CiAKLSAgICBzdGFydF90b3RhbF9vdXQgPSBzZWxmLT56c3QudG90YWxfb3V0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IGlucGxlbjsKLSAgICBzZWxmLT56c3QubmV4dF9pbiA9IGlucHV0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7Ci0gICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpOworICAgIGRvIHsKKyAgICAgICAgYXJyYW5nZV9pbnB1dF9idWZmZXIoJnNlbGYtPnpzdCwgJmlidWZsZW4pOwogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGVyciA9IGRlZmxhdGUoJihzZWxmLT56c3QpLCBaX05PX0ZMVVNIKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBkbyB7CisgICAgICAgICAgICBvYnVmbGVuID0gYXJyYW5nZV9vdXRwdXRfYnVmZmVyKCZzZWxmLT56c3QsICZSZXRWYWwsIG9idWZsZW4pOworICAgICAgICAgICAgaWYgKG9idWZsZW4gPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAvKiB3aGlsZSBaX09LIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCwKLSAgICAgICBzbyBleHRlbmQgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwotICAgIHdoaWxlIChlcnIgPT0gWl9PSyAmJiBzZWxmLT56c3QuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgaWYgKGxlbmd0aCA8PSAoVUlOVF9NQVggPj4gMSkpCi0gICAgICAgICAgICBuZXdfbGVuZ3RoID0gbGVuZ3RoIDw8IDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld19sZW5ndGggPSBVSU5UX01BWDsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBuZXdfbGVuZ3RoKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7Ci0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSArIGxlbmd0aDsKLSAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIGVyciA9IGRlZmxhdGUoJnNlbGYtPnpzdCwgWl9OT19GTFVTSCk7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCi0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIFpfTk9fRkxVU0gpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIH0KLSAgICAvKiBXZSB3aWxsIG9ubHkgZ2V0IFpfQlVGX0VSUk9SIGlmIHRoZSBvdXRwdXQgYnVmZmVyIHdhcyBmdWxsIGJ1dAotICAgICAgIHRoZXJlIHdhc24ndCBtb3JlIG91dHB1dCB3aGVuIHdlIHRyaWVkIGFnYWluLCBzbyBpdCBpcyBub3QgYW4gZXJyb3IKLSAgICAgICBjb25kaXRpb24uCi0gICAgKi8KKyAgICAgICAgICAgIGlmIChlcnIgPT0gWl9TVFJFQU1fRVJST1IpIHsKKyAgICAgICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgY29tcHJlc3NpbmcgZGF0YSIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAKLSAgICBpZiAoZXJyICE9IFpfT0sgJiYgZXJyICE9IFpfQlVGX0VSUk9SKSB7Ci0gICAgICAgIHpsaWJfZXJyb3Ioc2VsZi0+enN0LCBlcnIsICJ3aGlsZSBjb21wcmVzc2luZyBkYXRhIik7Ci0gICAgICAgIFB5X0NMRUFSKFJldFZhbCk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0gICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKLSAgICB9CisgICAgICAgIH0gd2hpbGUgKHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCk7CisgICAgICAgIGFzc2VydChzZWxmLT56c3QuYXZhaWxfaW4gPT0gMCk7CiAKLSBkb25lOgorICAgIH0gd2hpbGUgKGlidWZsZW4gIT0gMCk7CisKKyAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC5uZXh0X291dCAtCisgICAgICAgICAgICAgICAgICAgICAgICAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCkpID09IDApCisgICAgICAgIGdvdG8gc3VjY2VzczsKKworIGVycm9yOgorICAgIFB5X0NMRUFSKFJldFZhbCk7Cisgc3VjY2VzczoKICAgICBMRUFWRV9aTElCKHNlbGYpOwogICAgIHJldHVybiBSZXRWYWw7CiB9CiAKLS8qIEhlbHBlciBmb3Igb2JqZGVjb21wcmVzcygpIGFuZCB1bmZsdXNoKCkuIFNhdmVzIGFueSB1bmNvbnN1bWVkIGlucHV0IGRhdGEgaW4KKy8qIEhlbHBlciBmb3Igb2JqZGVjb21wcmVzcygpIGFuZCBmbHVzaCgpLiBTYXZlcyBhbnkgdW5jb25zdW1lZCBpbnB1dCBkYXRhIGluCiAgICBzZWxmLT51bnVzZWRfZGF0YSBvciBzZWxmLT51bmNvbnN1bWVkX3RhaWwsIGFzIGFwcHJvcHJpYXRlLiAqLwogc3RhdGljIGludAotc2F2ZV91bmNvbnN1bWVkX2lucHV0KGNvbXBvYmplY3QgKnNlbGYsIGludCBlcnIpCitzYXZlX3VuY29uc3VtZWRfaW5wdXQoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhLCBpbnQgZXJyKQogewogICAgIGlmIChlcnIgPT0gWl9TVFJFQU1fRU5EKSB7CiAgICAgICAgIC8qIFRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBoYXMgYmVlbiByZWFjaGVkLiBTdG9yZSB0aGUgbGVmdG92ZXIKICAgICAgICAgICAgaW5wdXQgZGF0YSBpbiBzZWxmLT51bnVzZWRfZGF0YS4gKi8KICAgICAgICAgaWYgKHNlbGYtPnpzdC5hdmFpbF9pbiA+IDApIHsKICAgICAgICAgICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVudXNlZF9kYXRhKTsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgbmV3X3NpemU7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG5ld19zaXplLCBsZWZ0X3NpemU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3X2RhdGE7Ci0gICAgICAgICAgICBpZiAoKHNpemVfdClzZWxmLT56c3QuYXZhaWxfaW4gPiAoc2l6ZV90KVVJTlRfTUFYIC0gKHNpemVfdClvbGRfc2l6ZSkgeworICAgICAgICAgICAgbGVmdF9zaXplID0gKEJ5dGUgKilkYXRhLT5idWYgKyBkYXRhLT5sZW4gLSBzZWxmLT56c3QubmV4dF9pbjsKKyAgICAgICAgICAgIGlmIChsZWZ0X3NpemUgPiAoUFlfU1NJWkVfVF9NQVggLSBvbGRfc2l6ZSkpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld19zaXplID0gb2xkX3NpemUgKyBzZWxmLT56c3QuYXZhaWxfaW47CisgICAgICAgICAgICBuZXdfc2l6ZSA9IG9sZF9zaXplICsgbGVmdF9zaXplOwogICAgICAgICAgICAgbmV3X2RhdGEgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG5ld19zaXplKTsKICAgICAgICAgICAgIGlmIChuZXdfZGF0YSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIFB5X01FTUNQWShQeUJ5dGVzX0FTX1NUUklORyhuZXdfZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+dW51c2VkX2RhdGEpLCBvbGRfc2l6ZSk7CiAgICAgICAgICAgICBQeV9NRU1DUFkoUHlCeXRlc19BU19TVFJJTkcobmV3X2RhdGEpICsgb2xkX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi0+enN0Lm5leHRfaW4sIHNlbGYtPnpzdC5hdmFpbF9pbik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VsZi0+dW51c2VkX2RhdGEpOwotICAgICAgICAgICAgc2VsZi0+dW51c2VkX2RhdGEgPSBuZXdfZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLT56c3QubmV4dF9pbiwgbGVmdF9zaXplKTsKKyAgICAgICAgICAgIFB5X1NFVFJFRihzZWxmLT51bnVzZWRfZGF0YSwgbmV3X2RhdGEpOwogICAgICAgICAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKICAgICAgICAgfQogICAgIH0KKwogICAgIGlmIChzZWxmLT56c3QuYXZhaWxfaW4gPiAwIHx8IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+dW5jb25zdW1lZF90YWlsKSkgewogICAgICAgICAvKiBUaGlzIGNvZGUgaGFuZGxlcyB0d28gZGlzdGluY3QgY2FzZXM6CiAgICAgICAgICAgIDEuIE91dHB1dCBsaW1pdCB3YXMgcmVhY2hlZC4gU2F2ZSBsZWZ0b3ZlciBpbnB1dCBpbiB1bmNvbnN1bWVkX3RhaWwuCiAgICAgICAgICAgIDIuIEFsbCBpbnB1dCBkYXRhIHdhcyBjb25zdW1lZC4gQ2xlYXIgdW5jb25zdW1lZF90YWlsLiAqLworICAgICAgICBQeV9zc2l6ZV90IGxlZnRfc2l6ZSA9IChCeXRlICopZGF0YS0+YnVmICsgZGF0YS0+bGVuIC0gc2VsZi0+enN0Lm5leHRfaW47CiAgICAgICAgIFB5T2JqZWN0ICpuZXdfZGF0YSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoCi0gICAgICAgICAgICAgICAgKGNoYXIgKilzZWxmLT56c3QubmV4dF9pbiwgc2VsZi0+enN0LmF2YWlsX2luKTsKKyAgICAgICAgICAgICAgICAoY2hhciAqKXNlbGYtPnpzdC5uZXh0X2luLCBsZWZ0X3NpemUpOwogICAgICAgICBpZiAobmV3X2RhdGEgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7Ci0gICAgICAgIHNlbGYtPnVuY29uc3VtZWRfdGFpbCA9IG5ld19kYXRhOworICAgICAgICBQeV9TRVRSRUYoc2VsZi0+dW5jb25zdW1lZF90YWlsLCBuZXdfZGF0YSk7CiAgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTY5MCw3ICs3NTAsNyBAQAogCiAgICAgZGF0YTogUHlfYnVmZmVyCiAgICAgICAgIFRoZSBiaW5hcnkgZGF0YSB0byBkZWNvbXByZXNzLgotICAgIG1heF9sZW5ndGg6IHVpbnQgPSAwCisgICAgbWF4X2xlbmd0aDogc3NpemVfdCA9IDAKICAgICAgICAgVGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEuCiAgICAgICAgIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbgogICAgICAgICB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS4KQEAgLTcwNCwxMDIgKzc2NCw3MyBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbChjb21wb2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTc1NWNjY2M5MDg3YmZlNTUgaW5wdXQ9MDJjZmMwNDczNzdjZWM4Nl0qLworemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbChjb21wb2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4X2xlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02ZTUxNzNjNzRlNzEwMzUyIGlucHV0PWQ2ZGU5YjUzYzQ1NjZiOGFdKi8KIHsKLSAgICBpbnQgZXJyOwotICAgIHVuc2lnbmVkIGludCBvbGRfbGVuZ3RoLCBsZW5ndGggPSBERUZfQlVGX1NJWkU7CisgICAgaW50IGVyciA9IFpfT0s7CisgICAgUHlfc3NpemVfdCBpYnVmbGVuLCBvYnVmbGVuID0gREVGX0JVRl9TSVpFLCBoYXJkX2xpbWl0OwogICAgIFB5T2JqZWN0ICpSZXRWYWwgPSBOVUxMOwotICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OwogCi0gICAgaWYgKChzaXplX3QpZGF0YS0+bGVuID4gVUlOVF9NQVgpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiU2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CisgICAgaWYgKG1heF9sZW5ndGggPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF4X2xlbmd0aCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgfSBlbHNlIGlmIChtYXhfbGVuZ3RoID09IDApCisgICAgICAgIGhhcmRfbGltaXQgPSBQWV9TU0laRV9UX01BWDsKKyAgICBlbHNlCisgICAgICAgIGhhcmRfbGltaXQgPSBtYXhfbGVuZ3RoOworCisgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBkYXRhLT5idWY7CisgICAgaWJ1ZmxlbiA9IGRhdGEtPmxlbjsKIAogICAgIC8qIGxpbWl0IGFtb3VudCBvZiBkYXRhIGFsbG9jYXRlZCB0byBtYXhfbGVuZ3RoICovCi0gICAgaWYgKG1heF9sZW5ndGggJiYgbGVuZ3RoID4gbWF4X2xlbmd0aCkKLSAgICAgICAgbGVuZ3RoID0gbWF4X2xlbmd0aDsKLSAgICBpZiAoIShSZXRWYWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWF4X2xlbmd0aCAmJiBvYnVmbGVuID4gbWF4X2xlbmd0aCkKKyAgICAgICAgb2J1ZmxlbiA9IG1heF9sZW5ndGg7CiAKICAgICBFTlRFUl9aTElCKHNlbGYpOwogCi0gICAgc3RhcnRfdG90YWxfb3V0ID0gc2VsZi0+enN0LnRvdGFsX291dDsKLSAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KWRhdGEtPmxlbjsKLSAgICBzZWxmLT56c3QubmV4dF9pbiA9IGRhdGEtPmJ1ZjsKLSAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgIHNlbGYtPnpzdC5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKTsKKyAgICBkbyB7CisgICAgICAgIGFycmFuZ2VfaW5wdXRfYnVmZmVyKCZzZWxmLT56c3QsICZpYnVmbGVuKTsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9TWU5DX0ZMVVNIKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBkbyB7CisgICAgICAgICAgICBvYnVmbGVuID0gYXJyYW5nZV9vdXRwdXRfYnVmZmVyX3dpdGhfbWF4aW11bSgmc2VsZi0+enN0LCAmUmV0VmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2J1ZmxlbiwgaGFyZF9saW1pdCk7CisgICAgICAgICAgICBpZiAob2J1ZmxlbiA9PSAtMikgeworICAgICAgICAgICAgICAgIGlmIChtYXhfbGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICBnb3RvIHNhdmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob2J1ZmxlbiA8IDApIHsKKyAgICAgICAgICAgICAgICBnb3RvIGFib3J0OworICAgICAgICAgICAgfQogCi0gICAgaWYgKGVyciA9PSBaX05FRURfRElDVCAmJiBzZWxmLT56ZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgIFB5X2J1ZmZlciB6ZGljdF9idWY7Ci0gICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc2VsZi0+emRpY3QsICZ6ZGljdF9idWYsIFB5QlVGX1NJTVBMRSkgPT0gLTEpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIGVyciA9IGluZmxhdGUoJnNlbGYtPnpzdCwgWl9TWU5DX0ZMVVNIKTsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICAgICAgaWYgKChzaXplX3QpemRpY3RfYnVmLmxlbiA+IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgInpkaWN0IGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ6ZGljdF9idWYpOwotICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgICAgICBjYXNlIFpfT0s6ICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIFpfQlVGX0VSUk9SOiAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIFpfU1RSRUFNX0VORDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBaX05FRURfRElDVCAmJiBzZWxmLT56ZGljdCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRfaW5mbGF0ZV96ZGljdChzZWxmKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGFib3J0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byBzYXZlOworICAgICAgICAgICAgfQogCi0gICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCYoc2VsZi0+enN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemRpY3RfYnVmLmJ1ZiwgKHVuc2lnbmVkIGludCl6ZGljdF9idWYubGVuKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3RfYnVmKTsKLSAgICAgICAgaWYgKGVyciAhPSBaX09LKSB7Ci0gICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7Ci0gICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICAvKiBSZXBlYXQgdGhlIGNhbGwgdG8gaW5mbGF0ZS4gKi8KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9TWU5DX0ZMVVNIKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICB9CisgICAgICAgIH0gd2hpbGUgKHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCB8fCBlcnIgPT0gWl9ORUVEX0RJQ1QpOwogCi0gICAgLyogV2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQuCi0gICAgICAgU28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4uCi0gICAgKi8KLSAgICB3aGlsZSAoZXJyID09IFpfT0sgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIC8qIElmIG1heF9sZW5ndGggc2V0LCBkb24ndCBjb250aW51ZSBkZWNvbXByZXNzaW5nIGlmIHdlJ3ZlIGFscmVhZHkKLSAgICAgICAgICAgcmVhY2hlZCB0aGUgbGltaXQuCi0gICAgICAgICovCi0gICAgICAgIGlmIChtYXhfbGVuZ3RoICYmIGxlbmd0aCA+PSBtYXhfbGVuZ3RoKQotICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGlsZSAoZXJyICE9IFpfU1RSRUFNX0VORCAmJiBpYnVmbGVuICE9IDApOwogCi0gICAgICAgIC8qIG90aGVyd2lzZSwgLi4uICovCi0gICAgICAgIG9sZF9sZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgIGxlbmd0aCA9IGxlbmd0aCA8PCAxOwotICAgICAgICBpZiAobWF4X2xlbmd0aCAmJiBsZW5ndGggPiBtYXhfbGVuZ3RoKQotICAgICAgICAgICAgbGVuZ3RoID0gbWF4X2xlbmd0aDsKLQotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIGxlbmd0aCkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpICsgb2xkX2xlbmd0aDsKLSAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aCAtIG9sZF9sZW5ndGg7Ci0KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9TWU5DX0ZMVVNIKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICB9Ci0KLSAgICBpZiAoc2F2ZV91bmNvbnN1bWVkX2lucHV0KHNlbGYsIGVycikgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICBSZXRWYWwgPSBOVUxMOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KKyBzYXZlOgorICAgIGlmIChzYXZlX3VuY29uc3VtZWRfaW5wdXQoc2VsZiwgZGF0YSwgZXJyKSA8IDApCisgICAgICAgIGdvdG8gYWJvcnQ7CiAKICAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCkgewogICAgICAgICAvKiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGNhbGwgaW5mbGF0ZUVuZCwgYnV0IHRoZSBvbGQgYmVoYXZpb3VyCkBAIC04MTEsMTYgKzg0MiwxNiBAQAogICAgICAgICAgICBub3QgYW4gZXJyb3IgY29uZGl0aW9uLgogICAgICAgICAqLwogICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZGVjb21wcmVzc2luZyBkYXRhIik7Ci0gICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICBSZXRWYWwgPSBOVUxMOwotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBnb3RvIGFib3J0OwogICAgIH0KIAotICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0NMRUFSKFJldFZhbCk7Ci0gICAgfQorICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0Lm5leHRfb3V0IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIChCeXRlICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSkgPT0gMCkKKyAgICAgICAgZ290byBzdWNjZXNzOwogCi0gZXJyb3I6CisgYWJvcnQ6CisgICAgUHlfQ0xFQVIoUmV0VmFsKTsKKyBzdWNjZXNzOgogICAgIExFQVZFX1pMSUIoc2VsZik7CiAgICAgcmV0dXJuIFJldFZhbDsKIH0KQEAgLTg0Myw5ICs4NzQsOCBAQAogLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWEyMDNmNGNlZmM5ZGU3MjcgaW5wdXQ9NzNlZDA2Njc5NGJkMTViY10qLwogewogICAgIGludCBlcnI7Ci0gICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IERFRl9CVUZfU0laRSwgbmV3X2xlbmd0aDsKLSAgICBQeU9iamVjdCAqUmV0VmFsOwotICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OworICAgIFB5X3NzaXplX3QgbGVuZ3RoID0gREVGX0JVRl9TSVpFOworICAgIFB5T2JqZWN0ICpSZXRWYWwgPSBOVUxMOwogCiAgICAgLyogRmx1c2hpbmcgd2l0aCBaX05PX0ZMVVNIIGlzIGEgbm8tb3AsIHNvIHRoZXJlJ3Mgbm8gcG9pbnQgaW4KICAgICAgICBkb2luZyBhbnkgd29yayBhdCBhbGw7IGp1c3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gKi8KQEAgLTg1Myw1MCArODgzLDM3IEBACiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwogICAgIH0KIAotICAgIGlmICghKFJldFZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuZ3RoKSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgRU5URVJfWkxJQihzZWxmKTsKIAotICAgIHN0YXJ0X3RvdGFsX291dCA9IHNlbGYtPnpzdC50b3RhbF9vdXQ7CiAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKLSAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgIHNlbGYtPnpzdC5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKTsKIAotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgbW9kZSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIC8qIHdoaWxlIFpfT0sgYW5kIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0LAotICAgICAgIHNvIGV4dGVuZCB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdHJ5IGFnYWluICovCi0gICAgd2hpbGUgKGVyciA9PSBaX09LICYmIHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCkgewotICAgICAgICBpZiAobGVuZ3RoIDw9IChVSU5UX01BWCA+PiAxKSkKLSAgICAgICAgICAgIG5ld19sZW5ndGggPSBsZW5ndGggPDwgMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3X2xlbmd0aCA9IFVJTlRfTUFYOwotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIG5ld19sZW5ndGgpIDwgMCkgeworICAgIGRvIHsKKyAgICAgICAgbGVuZ3RoID0gYXJyYW5nZV9vdXRwdXRfYnVmZmVyKCZzZWxmLT56c3QsICZSZXRWYWwsIGxlbmd0aCk7CisgICAgICAgIGlmIChsZW5ndGggPCAwKSB7CiAgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQotICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpICsgbGVuZ3RoOwotICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBuZXdfbGVuZ3RoOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIG1vZGUpOworICAgICAgICBlcnIgPSBkZWZsYXRlKCZzZWxmLT56c3QsIG1vZGUpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIH0KKworICAgICAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VSUk9SKSB7CisgICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZmx1c2hpbmciKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKTsKKyAgICBhc3NlcnQoc2VsZi0+enN0LmF2YWlsX2luID09IDApOwogCiAgICAgLyogSWYgbW9kZSBpcyBaX0ZJTklTSCwgd2UgYWxzbyBoYXZlIHRvIGNhbGwgZGVmbGF0ZUVuZCgpIHRvIGZyZWUKICAgICAgICB2YXJpb3VzIGRhdGEgc3RydWN0dXJlcy4gTm90ZSB3ZSBzaG91bGQgb25seSBnZXQgWl9TVFJFQU1fRU5EIHdoZW4KICAgICAgICBtb2RlIGlzIFpfRklOSVNILCBidXQgY2hlY2tpbmcgYm90aCBmb3Igc2FmZXR5Ki8KICAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCAmJiBtb2RlID09IFpfRklOSVNIKSB7Ci0gICAgICAgIGVyciA9IGRlZmxhdGVFbmQoJihzZWxmLT56c3QpKTsKKyAgICAgICAgZXJyID0gZGVmbGF0ZUVuZCgmc2VsZi0+enN0KTsKICAgICAgICAgaWYgKGVyciAhPSBaX09LKSB7CiAgICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZmluaXNoaW5nIGNvbXByZXNzaW9uIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC05MDYsMjAgKzkyMywxOCBAQAogICAgICAgICAgICBidXQgdGhlcmUgd2Fzbid0IG1vcmUgb3V0cHV0IHdoZW4gd2UgdHJpZWQgYWdhaW4sIHNvIGl0IGlzCiAgICAgICAgICAgIG5vdCBhbiBlcnJvciBjb25kaXRpb24uCiAgICAgICAgICovCi0gICAgfSBlbHNlIGlmIChlcnIhPVpfT0sgJiYgZXJyIT1aX0JVRl9FUlJPUikgeworICAgIH0gZWxzZSBpZiAoZXJyICE9IFpfT0sgJiYgZXJyICE9IFpfQlVGX0VSUk9SKSB7CiAgICAgICAgIHpsaWJfZXJyb3Ioc2VsZi0+enN0LCBlcnIsICJ3aGlsZSBmbHVzaGluZyIpOwotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgeworICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0Lm5leHRfb3V0IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIChCeXRlICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSkgPCAwKQogICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwotICAgIH0KIAogIGVycm9yOgogICAgIExFQVZFX1pMSUIoc2VsZik7Ci0KICAgICByZXR1cm4gUmV0VmFsOwogfQogCkBAIC05NDYsMTMgKzk2MSwxMyBAQAogICAgICAqLwogICAgIEVOVEVSX1pMSUIoc2VsZik7CiAgICAgZXJyID0gZGVmbGF0ZUNvcHkoJnJldHZhbC0+enN0LCAmc2VsZi0+enN0KTsKLSAgICBzd2l0Y2goZXJyKSB7Ci0gICAgY2FzZShaX09LKToKKyAgICBzd2l0Y2ggKGVycikgeworICAgIGNhc2UgWl9PSzoKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZShaX1NUUkVBTV9FUlJPUik6CisgICAgY2FzZSBaX1NUUkVBTV9FUlJPUjoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJbmNvbnNpc3RlbnQgc3RyZWFtIHN0YXRlIik7CiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgY2FzZShaX01FTV9FUlJPUik6CisgICAgY2FzZSBaX01FTV9FUlJPUjoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgY29tcHJlc3Npb24gb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC05NjEsMTQgKzk3NiwxMSBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBQeV9JTkNSRUYoc2VsZi0+dW51c2VkX2RhdGEpOworICAgIFB5X1hTRVRSRUYocmV0dmFsLT51bnVzZWRfZGF0YSwgc2VsZi0+dW51c2VkX2RhdGEpOwogICAgIFB5X0lOQ1JFRihzZWxmLT51bmNvbnN1bWVkX3RhaWwpOworICAgIFB5X1hTRVRSRUYocmV0dmFsLT51bmNvbnN1bWVkX3RhaWwsIHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CiAgICAgUHlfWElOQ1JFRihzZWxmLT56ZGljdCk7Ci0gICAgUHlfWERFQ1JFRihyZXR2YWwtPnVudXNlZF9kYXRhKTsKLSAgICBQeV9YREVDUkVGKHJldHZhbC0+dW5jb25zdW1lZF90YWlsKTsKLSAgICBQeV9YREVDUkVGKHJldHZhbC0+emRpY3QpOwotICAgIHJldHZhbC0+dW51c2VkX2RhdGEgPSBzZWxmLT51bnVzZWRfZGF0YTsKLSAgICByZXR2YWwtPnVuY29uc3VtZWRfdGFpbCA9IHNlbGYtPnVuY29uc3VtZWRfdGFpbDsKLSAgICByZXR2YWwtPnpkaWN0ID0gc2VsZi0+emRpY3Q7CisgICAgUHlfWFNFVFJFRihyZXR2YWwtPnpkaWN0LCBzZWxmLT56ZGljdCk7CiAgICAgcmV0dmFsLT5lb2YgPSBzZWxmLT5lb2Y7CiAKICAgICAvKiBNYXJrIGl0IGFzIGJlaW5nIGluaXRpYWxpemVkICovCkBAIC0xMDA0LDEzICsxMDE2LDEzIEBACiAgICAgICovCiAgICAgRU5URVJfWkxJQihzZWxmKTsKICAgICBlcnIgPSBpbmZsYXRlQ29weSgmcmV0dmFsLT56c3QsICZzZWxmLT56c3QpOwotICAgIHN3aXRjaChlcnIpIHsKLSAgICBjYXNlKFpfT0spOgorICAgIHN3aXRjaCAoZXJyKSB7CisgICAgY2FzZSBaX09LOgogICAgICAgICBicmVhazsKLSAgICBjYXNlKFpfU1RSRUFNX0VSUk9SKToKKyAgICBjYXNlIFpfU1RSRUFNX0VSUk9SOgogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkluY29uc2lzdGVudCBzdHJlYW0gc3RhdGUiKTsKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBjYXNlKFpfTUVNX0VSUk9SKToKKyAgICBjYXNlIFpfTUVNX0VSUk9SOgogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZWNvbXByZXNzaW9uIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTAyMCwxNCArMTAzMiwxMSBAQAogICAgIH0KIAogICAgIFB5X0lOQ1JFRihzZWxmLT51bnVzZWRfZGF0YSk7CisgICAgUHlfWFNFVFJFRihyZXR2YWwtPnVudXNlZF9kYXRhLCBzZWxmLT51bnVzZWRfZGF0YSk7CiAgICAgUHlfSU5DUkVGKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CisgICAgUHlfWFNFVFJFRihyZXR2YWwtPnVuY29uc3VtZWRfdGFpbCwgc2VsZi0+dW5jb25zdW1lZF90YWlsKTsKICAgICBQeV9YSU5DUkVGKHNlbGYtPnpkaWN0KTsKLSAgICBQeV9YREVDUkVGKHJldHZhbC0+dW51c2VkX2RhdGEpOwotICAgIFB5X1hERUNSRUYocmV0dmFsLT51bmNvbnN1bWVkX3RhaWwpOwotICAgIFB5X1hERUNSRUYocmV0dmFsLT56ZGljdCk7Ci0gICAgcmV0dmFsLT51bnVzZWRfZGF0YSA9IHNlbGYtPnVudXNlZF9kYXRhOwotICAgIHJldHZhbC0+dW5jb25zdW1lZF90YWlsID0gc2VsZi0+dW5jb25zdW1lZF90YWlsOwotICAgIHJldHZhbC0+emRpY3QgPSBzZWxmLT56ZGljdDsKKyAgICBQeV9YU0VUUkVGKHJldHZhbC0+emRpY3QsIHNlbGYtPnpkaWN0KTsKICAgICByZXR2YWwtPmVvZiA9IHNlbGYtPmVvZjsKIAogICAgIC8qIE1hcmsgaXQgYXMgYmVpbmcgaW5pdGlhbGl6ZWQgKi8KQEAgLTEwNDYsNyArMTA1NSw3IEBACiAvKltjbGluaWMgaW5wdXRdCiB6bGliLkRlY29tcHJlc3MuZmx1c2gKIAotICAgIGxlbmd0aDogdWludChjX2RlZmF1bHQ9IkRFRl9CVUZfU0laRSIpID0gemxpYi5ERUZfQlVGX1NJWkUKKyAgICBsZW5ndGg6IHNzaXplX3QoY19kZWZhdWx0PSJERUZfQlVGX1NJWkUiKSA9IHpsaWIuREVGX0JVRl9TSVpFCiAgICAgICAgIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuCiAgICAgLwogCkBAIC0xMDU0LDg4ICsxMDYzLDg0IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX0RlY29tcHJlc3NfZmx1c2hfaW1wbChjb21wb2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRiNmZiNzUzYWI2OThlMjIgaW5wdXQ9MTU4MDk1NjUwNTk3ODk5M10qLworemxpYl9EZWNvbXByZXNzX2ZsdXNoX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsZW5ndGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjhjNzVlYTEyN2NiZTY1NCBpbnB1dD1hYTRlYzM3ZjNhZWY0ZGEwXSovCiB7Ci0gICAgaW50IGVycjsKLSAgICB1bnNpZ25lZCBpbnQgbmV3X2xlbmd0aDsKLSAgICBQeU9iamVjdCAqIHJldHZhbCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7Ci0gICAgUHlfc3NpemVfdCBzaXplOworICAgIGludCBlcnIsIGZsdXNoOworICAgIFB5X2J1ZmZlciBkYXRhOworICAgIFB5T2JqZWN0ICpSZXRWYWwgPSBOVUxMOworICAgIFB5X3NzaXplX3QgaWJ1ZmxlbjsKIAotICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgIGlmIChsZW5ndGggPD0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICghKHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuZ3RoKSkpCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzZWxmLT51bmNvbnN1bWVkX3RhaWwsICZkYXRhLCBQeUJVRl9TSU1QTEUpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotCiAgICAgRU5URVJfWkxJQihzZWxmKTsKIAotICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CisgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBkYXRhLmJ1ZjsKKyAgICBpYnVmbGVuID0gZGF0YS5sZW47CiAKLSAgICBzdGFydF90b3RhbF9vdXQgPSBzZWxmLT56c3QudG90YWxfb3V0OwotICAgIC8qIHNhdmVfdW5jb25zdW1lZF9pbnB1dCgpIGVuc3VyZXMgdGhhdCB1bmNvbnN1bWVkX3RhaWwgbGVuZ3RoIGlzIGxlc3NlcgotICAgICAgIG9yIGVxdWFsIHRoYW4gVUlOVF9NQVggKi8KLSAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSBQeV9TQUZFX0RPV05DQVNUKHNpemUsIFB5X3NzaXplX3QsIHVuc2lnbmVkIGludCk7Ci0gICAgc2VsZi0+enN0Lm5leHRfaW4gPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7Ci0gICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJldHZhbCk7CisgICAgZG8geworICAgICAgICBhcnJhbmdlX2lucHV0X2J1ZmZlcigmc2VsZi0+enN0LCAmaWJ1Zmxlbik7CisgICAgICAgIGZsdXNoID0gaWJ1ZmxlbiA9PSAwID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIOwogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGVyciA9IGluZmxhdGUoJihzZWxmLT56c3QpLCBaX0ZJTklTSCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGVuZ3RoID0gYXJyYW5nZV9vdXRwdXRfYnVmZmVyKCZzZWxmLT56c3QsICZSZXRWYWwsIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGFib3J0OwogCi0gICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCi0gICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KLSAgICB3aGlsZSAoKGVyciA9PSBaX09LIHx8IGVyciA9PSBaX0JVRl9FUlJPUikgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChsZW5ndGggPD0gKFVJTlRfTUFYID4+IDEpKQotICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdfbGVuZ3RoID0gVUlOVF9NQVg7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgbmV3X2xlbmd0aCkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJldHZhbCkgKyBsZW5ndGg7Ci0gICAgICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7Ci0gICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICBlcnIgPSBpbmZsYXRlKCZzZWxmLT56c3QsIGZsdXNoKTsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9GSU5JU0gpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgICAgICBjYXNlIFpfT0s6ICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIFpfQlVGX0VSUk9SOiAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIFpfU1RSRUFNX0VORDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBaX05FRURfRElDVCAmJiBzZWxmLT56ZGljdCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRfaW5mbGF0ZV96ZGljdChzZWxmKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGFib3J0OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byBzYXZlOworICAgICAgICAgICAgfQogCi0gICAgaWYgKHNhdmVfdW5jb25zdW1lZF9pbnB1dChzZWxmLCBlcnIpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9CisgICAgICAgIH0gd2hpbGUgKHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCB8fCBlcnIgPT0gWl9ORUVEX0RJQ1QpOworCisgICAgfSB3aGlsZSAoZXJyICE9IFpfU1RSRUFNX0VORCAmJiBpYnVmbGVuICE9IDApOworCisgc2F2ZToKKyAgICBpZiAoc2F2ZV91bmNvbnN1bWVkX2lucHV0KHNlbGYsICZkYXRhLCBlcnIpIDwgMCkKKyAgICAgICAgZ290byBhYm9ydDsKIAogICAgIC8qIElmIGF0IGVuZCBvZiBzdHJlYW0sIGNsZWFuIHVwIGFueSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHpsaWIuICovCiAgICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FTkQpIHsKICAgICAgICAgc2VsZi0+ZW9mID0gMTsKICAgICAgICAgc2VsZi0+aXNfaW5pdGlhbGlzZWQgPSAwOwotICAgICAgICBlcnIgPSBpbmZsYXRlRW5kKCYoc2VsZi0+enN0KSk7CisgICAgICAgIGVyciA9IGluZmxhdGVFbmQoJnNlbGYtPnpzdCk7CiAgICAgICAgIGlmIChlcnIgIT0gWl9PSykgewogICAgICAgICAgICAgemxpYl9lcnJvcihzZWxmLT56c3QsIGVyciwgIndoaWxlIGZpbmlzaGluZyBkZWNvbXByZXNzaW9uIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgZ290byBhYm9ydDsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0NMRUFSKHJldHZhbCk7Ci0gICAgfQorICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0Lm5leHRfb3V0IC0KKyAgICAgICAgICAgICAgICAgICAgICAgIChCeXRlICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSkgPT0gMCkKKyAgICAgICAgZ290byBzdWNjZXNzOwogCi1lcnJvcjoKLQorIGFib3J0OgorICAgIFB5X0NMRUFSKFJldFZhbCk7Cisgc3VjY2VzczoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKICAgICBMRUFWRV9aTElCKHNlbGYpOwotCi0gICAgcmV0dXJuIHJldHZhbDsKKyAgICByZXR1cm4gUmV0VmFsOwogfQogCiAjaW5jbHVkZSAiY2xpbmljL3psaWJtb2R1bGUuYy5oIgpAQCAtMTE4Miw4ICsxMTg3LDggQEAKIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXpsaWJfYWRsZXIzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IHZhbHVlKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUxZDZkNzVlZTY1NWM3OGEgaW5wdXQ9NmZmNDU1Nzg3MjE2MGU4OF0qLworemxpYl9hZGxlcjMyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDIyMTA2ZjVjYThjOTJjMCBpbnB1dD02ZmY0NTU3ODcyMTYwZTg4XSovCiB7CiAgICAgLyogUmVsZWFzaW5nIHRoZSBHSUwgZm9yIHZlcnkgc21hbGwgYnVmZmVycyBpcyBpbmVmZmljaWVudAogICAgICAgIGFuZCBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgKi8KQEAgLTEyMjEsOCArMTIyNiw4IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi16bGliX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzFlOTg2ZTc0ZmU3YjYyMyBpbnB1dD0yNmMzZWQ0MzBmYTAwYjRjXSovCit6bGliX2NyYzMyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjM0OTlmYTIwYWY3ZWEyNSBpbnB1dD0yNmMzZWQ0MzBmYTAwYjRjXSovCiB7CiAgICAgaW50IHNpZ25lZF92YWw7CiAKQEAgLTEzMzQsNyArMTMzOSw3IEBACiAiZGVjb21wcmVzcyhzdHJpbmcsW3diaXRzXSxbYnVmc2l6ZV0pIC0tIERlY29tcHJlc3NlcyBhIGNvbXByZXNzZWQgc3RyaW5nLlxuIgogImRlY29tcHJlc3NvYmooW3diaXRzWywgemRpY3RdXV0pIC0tIFJldHVybiBhIGRlY29tcHJlc3NvciBvYmplY3QuXG4iCiAiXG4iCi0iJ3diaXRzJyBpcyB3aW5kb3cgYnVmZmVyIHNpemUuXG4iCisiJ3diaXRzJyBpcyB3aW5kb3cgYnVmZmVyIHNpemUgYW5kIGNvbnRhaW5lciBmb3JtYXQuXG4iCiAiQ29tcHJlc3NvciBvYmplY3RzIHN1cHBvcnQgY29tcHJlc3MoKSBhbmQgZmx1c2goKSBtZXRob2RzOyBkZWNvbXByZXNzb3JcbiIKICJvYmplY3RzIHN1cHBvcnQgZGVjb21wcmVzcygpIGFuZCBmbHVzaCgpLiIpOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL1JFQURNRSBiL09iamVjdHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NGIxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL1JFQURNRQpAQCAtMCwwICsxIEBACitTb3VyY2UgZmlsZXMgZm9yIHZhcmlvdXMgYnVpbHRpbiBvYmplY3RzCmRpZmYgLS1naXQgYS9PYmplY3RzL2Fic3RyYWN0LmMgYi9PYmplY3RzL2Fic3RyYWN0LmMKaW5kZXggNWU5NjEzOC4uODgyMDViZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9hYnN0cmFjdC5jCisrKyBiL09iamVjdHMvYWJzdHJhY3QuYwpAQCAtMzA1LDcgKzMwNSw3IEBACiAgICAgICAgIHBiLT5iZl9nZXRidWZmZXIgPT0gTlVMTCB8fAogICAgICAgICAoKCpwYi0+YmZfZ2V0YnVmZmVyKShvYmosICZ2aWV3LCBQeUJVRl9XUklUQUJMRSkgIT0gMCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHdyaXRhYmxlIGJ1ZmZlciBpbnRlcmZhY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhIHdyaXRhYmxlIGJ5dGVzLWxpa2Ugb2JqZWN0Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTMyNCw3ICszMjQsNyBAQAogCiAgICAgaWYgKHBiID09IE5VTEwgfHwgcGItPmJmX2dldGJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJyUuMTAwcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICAiYSBieXRlcy1saWtlIG9iamVjdCBpcyByZXF1aXJlZCwgbm90ICclLjEwMHMnIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0zMzcsMTYgKzMzNywzNSBAQAogICAgIFB5X3NzaXplX3Qgc2QsIGRpbTsKICAgICBpbnQgaTsKIAotICAgIGlmICh2aWV3LT5uZGltID09IDApIHJldHVybiAxOwotICAgIGlmICh2aWV3LT5zdHJpZGVzID09IE5VTEwpIHJldHVybiAodmlldy0+bmRpbSA9PSAxKTsKKyAgICAvKiAxKSBsZW4gPSBwcm9kdWN0KHNoYXBlKSAqIGl0ZW1zaXplCisgICAgICAgMikgaXRlbXNpemUgPiAwCisgICAgICAgMykgbGVuID0gMCA8PT0+IGV4aXN0cyBpOiBzaGFwZVtpXSA9IDAgKi8KKyAgICBpZiAodmlldy0+bGVuID09IDApIHJldHVybiAxOworICAgIGlmICh2aWV3LT5zdHJpZGVzID09IE5VTEwpIHsgIC8qIEMtY29udGlndW91cyBieSBkZWZpbml0aW9uICovCisgICAgICAgIC8qIFRyaXZpYWxseSBGLWNvbnRpZ3VvdXMgKi8KKyAgICAgICAgaWYgKHZpZXctPm5kaW0gPD0gMSkgcmV0dXJuIDE7CisKKyAgICAgICAgLyogbmRpbSA+IDEgaW1wbGllcyBzaGFwZSAhPSBOVUxMICovCisgICAgICAgIGFzc2VydCh2aWV3LT5zaGFwZSAhPSBOVUxMKTsKKworICAgICAgICAvKiBFZmZlY3RpdmVseSAxLWQgKi8KKyAgICAgICAgc2QgPSAwOworICAgICAgICBmb3IgKGk9MDsgaTx2aWV3LT5uZGltOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh2aWV3LT5zaGFwZVtpXSA+IDEpIHNkICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNkIDw9IDE7CisgICAgfQorCisgICAgLyogc3RyaWRlcyAhPSBOVUxMIGltcGxpZXMgYm90aCBvZiB0aGVzZSAqLworICAgIGFzc2VydCh2aWV3LT5uZGltID4gMCk7CisgICAgYXNzZXJ0KHZpZXctPnNoYXBlICE9IE5VTEwpOwogCiAgICAgc2QgPSB2aWV3LT5pdGVtc2l6ZTsKLSAgICBpZiAodmlldy0+bmRpbSA9PSAxKSByZXR1cm4gKHZpZXctPnNoYXBlWzBdID09IDEgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZCA9PSB2aWV3LT5zdHJpZGVzWzBdKTsKICAgICBmb3IgKGk9MDsgaTx2aWV3LT5uZGltOyBpKyspIHsKICAgICAgICAgZGltID0gdmlldy0+c2hhcGVbaV07Ci0gICAgICAgIGlmIChkaW0gPT0gMCkgcmV0dXJuIDE7Ci0gICAgICAgIGlmICh2aWV3LT5zdHJpZGVzW2ldICE9IHNkKSByZXR1cm4gMDsKKyAgICAgICAgaWYgKGRpbSA+IDEgJiYgdmlldy0+c3RyaWRlc1tpXSAhPSBzZCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgc2QgKj0gZGltOwogICAgIH0KICAgICByZXR1cm4gMTsKQEAgLTM1OCwxNiArMzc3LDIyIEBACiAgICAgUHlfc3NpemVfdCBzZCwgZGltOwogICAgIGludCBpOwogCi0gICAgaWYgKHZpZXctPm5kaW0gPT0gMCkgcmV0dXJuIDE7Ci0gICAgaWYgKHZpZXctPnN0cmlkZXMgPT0gTlVMTCkgcmV0dXJuIDE7CisgICAgLyogMSkgbGVuID0gcHJvZHVjdChzaGFwZSkgKiBpdGVtc2l6ZQorICAgICAgIDIpIGl0ZW1zaXplID4gMAorICAgICAgIDMpIGxlbiA9IDAgPD09PiBleGlzdHMgaTogc2hhcGVbaV0gPSAwICovCisgICAgaWYgKHZpZXctPmxlbiA9PSAwKSByZXR1cm4gMTsKKyAgICBpZiAodmlldy0+c3RyaWRlcyA9PSBOVUxMKSByZXR1cm4gMTsgLyogQy1jb250aWd1b3VzIGJ5IGRlZmluaXRpb24gKi8KKworICAgIC8qIHN0cmlkZXMgIT0gTlVMTCBpbXBsaWVzIGJvdGggb2YgdGhlc2UgKi8KKyAgICBhc3NlcnQodmlldy0+bmRpbSA+IDApOworICAgIGFzc2VydCh2aWV3LT5zaGFwZSAhPSBOVUxMKTsKIAogICAgIHNkID0gdmlldy0+aXRlbXNpemU7Ci0gICAgaWYgKHZpZXctPm5kaW0gPT0gMSkgcmV0dXJuICh2aWV3LT5zaGFwZVswXSA9PSAxIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QgPT0gdmlldy0+c3RyaWRlc1swXSk7CiAgICAgZm9yIChpPXZpZXctPm5kaW0tMTsgaT49MDsgaS0tKSB7CiAgICAgICAgIGRpbSA9IHZpZXctPnNoYXBlW2ldOwotICAgICAgICBpZiAoZGltID09IDApIHJldHVybiAxOwotICAgICAgICBpZiAodmlldy0+c3RyaWRlc1tpXSAhPSBzZCkgcmV0dXJuIDA7CisgICAgICAgIGlmIChkaW0gPiAxICYmIHZpZXctPnN0cmlkZXNbaV0gIT0gc2QpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIHNkICo9IGRpbTsKICAgICB9CiAgICAgcmV0dXJuIDE7CkBAIC00OTksOCArNTI0LDggQEAKICAgICBpZiAoIVB5T2JqZWN0X0NoZWNrQnVmZmVyKGRlc3QpIHx8CiAgICAgICAgICFQeU9iamVjdF9DaGVja0J1ZmZlcihzcmMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYm90aCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIG11c3QgaGF2ZSB0aGUgIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXIgaW50ZXJmYWNlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiYm90aCBkZXN0aW5hdGlvbiBhbmQgc291cmNlIG11c3QgYmUgIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcy1saWtlIG9iamVjdHMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNTg3LDcgKzYxMiwxMiBAQAogUHlCdWZmZXJfRmlsbEluZm8oUHlfYnVmZmVyICp2aWV3LCBQeU9iamVjdCAqb2JqLCB2b2lkICpidWYsIFB5X3NzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgaW50IHJlYWRvbmx5LCBpbnQgZmxhZ3MpCiB7Ci0gICAgaWYgKHZpZXcgPT0gTlVMTCkgcmV0dXJuIDA7IC8qIFhYWCB3aHkgbm90IC0xPyAqLworICAgIGlmICh2aWV3ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0J1ZmZlckVycm9yLAorICAgICAgICAgICAgIlB5QnVmZmVyX0ZpbGxJbmZvOiB2aWV3PT1OVUxMIGFyZ3VtZW50IGlzIG9ic29sZXRlIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICBpZiAoKChmbGFncyAmIFB5QlVGX1dSSVRBQkxFKSA9PSBQeUJVRl9XUklUQUJMRSkgJiYKICAgICAgICAgKHJlYWRvbmx5ID09IDEpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19CdWZmZXJFcnJvciwKQEAgLTY2MCw4ICs2OTAsOSBAQAogICAgIFB5X0RFQ1JFRihtZXRoKTsKIAogICAgIGlmIChyZXN1bHQgJiYgIVB5VW5pY29kZV9DaGVjayhyZXN1bHQpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiX19mb3JtYXRfXyBtZXRob2QgZGlkIG5vdCByZXR1cm4gc3RyaW5nIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgIl9fZm9ybWF0X18gbXVzdCByZXR1cm4gYSBzdHIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgIFB5X1RZUEUocmVzdWx0KS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXN1bHQgPSBOVUxMOwogICAgICAgICBnb3RvIGRvbmU7CkBAIC05MDUsNiArOTM2LDEyIEBACiB9CiAKIFB5T2JqZWN0ICoKK1B5TnVtYmVyX01hdHJpeE11bHRpcGx5KFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKK3sKKyAgICByZXR1cm4gYmluYXJ5X29wKHYsIHcsIE5CX1NMT1QobmJfbWF0cml4X211bHRpcGx5KSwgIkAiKTsKK30KKworUHlPYmplY3QgKgogUHlOdW1iZXJfRmxvb3JEaXZpZGUoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQogewogICAgIHJldHVybiBiaW5hcnlfb3AodiwgdywgTkJfU0xPVChuYl9mbG9vcl9kaXZpZGUpLCAiLy8iKTsKQEAgLTk4NSw2ICsxMDIyLDcgQEAKIElOUExBQ0VfQklOT1AoUHlOdW1iZXJfSW5QbGFjZUxzaGlmdCwgbmJfaW5wbGFjZV9sc2hpZnQsIG5iX2xzaGlmdCwgIjw8PSIpCiBJTlBMQUNFX0JJTk9QKFB5TnVtYmVyX0luUGxhY2VSc2hpZnQsIG5iX2lucGxhY2VfcnNoaWZ0LCBuYl9yc2hpZnQsICI+Pj0iKQogSU5QTEFDRV9CSU5PUChQeU51bWJlcl9JblBsYWNlU3VidHJhY3QsIG5iX2lucGxhY2Vfc3VidHJhY3QsIG5iX3N1YnRyYWN0LCAiLT0iKQorSU5QTEFDRV9CSU5PUChQeU51bWJlcl9Jbk1hdHJpeE11bHRpcGx5LCBuYl9pbnBsYWNlX21hdHJpeF9tdWx0aXBseSwgbmJfbWF0cml4X211bHRpcGx5LCAiQD0iKQogCiBQeU9iamVjdCAqCiBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQpAQCAtMTA1MSw2ICsxMDg5LDEzIEBACiB9CiAKIFB5T2JqZWN0ICoKK1B5TnVtYmVyX0luUGxhY2VNYXRyaXhNdWx0aXBseShQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCit7CisgICAgcmV0dXJuIGJpbmFyeV9pb3AodiwgdywgTkJfU0xPVChuYl9pbnBsYWNlX21hdHJpeF9tdWx0aXBseSksCisgICAgICAgICAgICAgICAgICAgICAgTkJfU0xPVChuYl9tYXRyaXhfbXVsdGlwbHkpLCAiQD0iKTsKK30KKworUHlPYmplY3QgKgogUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcihQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgcmV0dXJuIGJpbmFyeV9pb3AodiwgdywgTkJfU0xPVChuYl9pbnBsYWNlX3JlbWFpbmRlciksCkBAIC0xNjc5LDIxICsxNzI0LDIyIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoaiA+PSBuKSB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IG9sZG4gPSBuOworICAgICAgICAgICAgc2l6ZV90IG5ld24gPSAoc2l6ZV90KW47CiAgICAgICAgICAgICAvKiBUaGUgb3Zlci1hbGxvY2F0aW9uIHN0cmF0ZWd5IGNhbiBncm93IGEgYml0IGZhc3RlcgogICAgICAgICAgICAgICAgdGhhbiBmb3IgbGlzdHMgYmVjYXVzZSB1bmxpa2UgbGlzdHMgdGhlCiAgICAgICAgICAgICAgICBvdmVyLWFsbG9jYXRpb24gaXNuJ3QgcGVybWFuZW50IC0tIHdlIHJlY2xhaW0KICAgICAgICAgICAgICAgIHRoZSBleGNlc3MgYmVmb3JlIHRoZSBlbmQgb2YgdGhpcyByb3V0aW5lLgogICAgICAgICAgICAgICAgU28sIGdyb3cgYnkgdGVuIGFuZCB0aGVuIGFkZCAyNSUuCiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbiArPSAxMDsKLSAgICAgICAgICAgIG4gKz0gbiA+PiAyOwotICAgICAgICAgICAgaWYgKG4gPCBvbGRuKSB7CisgICAgICAgICAgICBuZXduICs9IDEwdTsKKyAgICAgICAgICAgIG5ld24gKz0gbmV3biA+PiAyOworICAgICAgICAgICAgaWYgKG5ld24gPiBQWV9TU0laRV9UX01BWCkgewogICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBvdmVyZmxvdyAqLwogICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICAgICAgICAgIGdvdG8gRmFpbDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG4gPSAoUHlfc3NpemVfdCluZXduOwogICAgICAgICAgICAgaWYgKF9QeVR1cGxlX1Jlc2l6ZSgmcmVzdWx0LCBuKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICAgICAgICAgIGdvdG8gRmFpbDsKQEAgLTIwNDYsMzIgKzIwOTIsODIgQEAKICAgICByZXR1cm4gUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMobywgYSwgTlVMTCk7CiB9CiAKK1B5T2JqZWN0KgorX1B5X0NoZWNrRnVuY3Rpb25SZXN1bHQoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpyZXN1bHQsIGNvbnN0IGNoYXIgKndoZXJlKQoreworICAgIGludCBlcnJfb2NjdXJyZWQgPSAoUHlFcnJfT2NjdXJyZWQoKSAhPSBOVUxMKTsKKworICAgIGFzc2VydCgoZnVuYyAhPSBOVUxMKSBeICh3aGVyZSAhPSBOVUxMKSk7CisKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCFlcnJfb2NjdXJyZWQpIHsKKyAgICAgICAgICAgIGlmIChmdW5jKQorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVSIHJldHVybmVkIE5VTEwgd2l0aG91dCBzZXR0aW5nIGFuIGVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgcmV0dXJuZWQgTlVMTCB3aXRob3V0IHNldHRpbmcgYW4gZXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSk7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBidWcgaXMgY2F1Z2h0IGluIGRlYnVnIG1vZGUgKi8KKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImEgZnVuY3Rpb24gcmV0dXJuZWQgTlVMTCB3aXRob3V0IHNldHRpbmcgYW4gZXJyb3IiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChlcnJfb2NjdXJyZWQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGMsICp2YWwsICp0YjsKKyAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CisKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworCisgICAgICAgICAgICBpZiAoZnVuYykKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlUiByZXR1cm5lZCBhIHJlc3VsdCB3aXRoIGFuIGVycm9yIHNldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHJldHVybmVkIGEgcmVzdWx0IHdpdGggYW4gZXJyb3Igc2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUpOworICAgICAgICAgICAgX1B5RXJyX0NoYWluRXhjZXB0aW9ucyhleGMsIHZhbCwgdGIpOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCB0aGUgYnVnIGlzIGNhdWdodCBpbiBkZWJ1ZyBtb2RlICovCisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJhIGZ1bmN0aW9uIHJldHVybmVkIGEgcmVzdWx0IHdpdGggYW4gZXJyb3Igc2V0Iik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFB5T2JqZWN0ICoKIFB5T2JqZWN0X0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykKIHsKICAgICB0ZXJuYXJ5ZnVuYyBjYWxsOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKLSAgICBpZiAoKGNhbGwgPSBmdW5jLT5vYl90eXBlLT50cF9jYWxsKSAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBjYWxsaW5nIGEgUHl0aG9uIG9iamVjdCIpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJlc3VsdCA9ICgqY2FsbCkoZnVuYywgYXJnLCBrdyk7Ci0gICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotI2lmZGVmIE5ERUJVRwotICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAiTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgfHwgKHJlc3VsdCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIC8qIFB5T2JqZWN0X0NhbGwoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworCisgICAgY2FsbCA9IGZ1bmMtPm9iX3R5cGUtPnRwX2NhbGw7CisgICAgaWYgKGNhbGwgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJyUuMjAwcycgb2JqZWN0IGlzIG5vdCBjYWxsYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICBmdW5jLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICInJS4yMDBzJyBvYmplY3QgaXMgbm90IGNhbGxhYmxlIiwKLSAgICAgICAgICAgICAgICAgZnVuYy0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgY2FsbGluZyBhIFB5dGhvbiBvYmplY3QiKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXN1bHQgPSAoKmNhbGwpKGZ1bmMsIGFyZywga3cpOworCisgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisKKyAgICByZXR1cm4gX1B5X0NoZWNrRnVuY3Rpb25SZXN1bHQoZnVuYywgcmVzdWx0LCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMjUxMCw2ICsyNjA2LDExIEBACiAgICAgaWYgKFB5X1RZUEUoaW5zdCkgPT0gKFB5VHlwZU9iamVjdCAqKWNscykKICAgICAgICAgcmV0dXJuIDE7CiAKKyAgICAvKiBXZSBrbm93IHdoYXQgdHlwZSdzIF9faW5zdGFuY2VjaGVja19fIGRvZXMuICovCisgICAgaWYgKFB5VHlwZV9DaGVja0V4YWN0KGNscykpIHsKKyAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZV9pc2luc3RhbmNlKGluc3QsIGNscyk7CisgICAgfQorCiAgICAgaWYgKFB5VHVwbGVfQ2hlY2soY2xzKSkgewogICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgIFB5X3NzaXplX3QgbjsKQEAgLTI1NDgsNiArMjY0OSw3IEBACiAgICAgfQogICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiBQcm9iYWJseSBuZXZlciByZWFjaGVkIGFueW1vcmUuICovCiAgICAgcmV0dXJuIHJlY3Vyc2l2ZV9pc2luc3RhbmNlKGluc3QsIGNscyk7CiB9CiAKQEAgLTI1NzUsNiArMjY3NywxNCBAQAogICAgIF9QeV9JREVOVElGSUVSKF9fc3ViY2xhc3NjaGVja19fKTsKICAgICBQeU9iamVjdCAqY2hlY2tlcjsKIAorICAgIC8qIFdlIGtub3cgd2hhdCB0eXBlJ3MgX19zdWJjbGFzc2NoZWNrX18gZG9lcy4gKi8KKyAgICBpZiAoUHlUeXBlX0NoZWNrRXhhY3QoY2xzKSkgeworICAgICAgICAvKiBRdWljayB0ZXN0IGZvciBhbiBleGFjdCBtYXRjaCAqLworICAgICAgICBpZiAoZGVyaXZlZCA9PSBjbHMpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZV9pc3N1YmNsYXNzKGRlcml2ZWQsIGNscyk7CisgICAgfQorCiAgICAgaWYgKFB5VHVwbGVfQ2hlY2soY2xzKSkgewogICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgIFB5X3NzaXplX3QgbjsKQEAgLTI2MTMsNiArMjcyMyw3IEBACiAgICAgfQogICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiBQcm9iYWJseSBuZXZlciByZWFjaGVkIGFueW1vcmUuICovCiAgICAgcmV0dXJuIHJlY3Vyc2l2ZV9pc3N1YmNsYXNzKGRlcml2ZWQsIGNscyk7CiB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCmluZGV4IDE1YzUyNWMuLjE0NTg2MzUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYwpAQCAtNCw2ICs0LDEzIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiYnl0ZXNfbWV0aG9kcy5oIgorI2luY2x1ZGUgImJ5dGVzb2JqZWN0LmgiCisjaW5jbHVkZSAicHlzdHJoZXguaCIKKworLypbY2xpbmljIGlucHV0XQorY2xhc3MgYnl0ZWFycmF5ICJQeUJ5dGVBcnJheU9iamVjdCAqIiAiJlB5Qnl0ZUFycmF5X1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD01NTM1Yjc3YzM3YTExOWUwXSovCiAKIGNoYXIgX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZ1tdID0gIiI7CiAKQEAgLTU0LDE4ICs2MSwxNyBAQAogc3RhdGljIGludAogYnl0ZWFycmF5X2dldGJ1ZmZlcihQeUJ5dGVBcnJheU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcsIGludCBmbGFncykKIHsKLSAgICBpbnQgcmV0OwogICAgIHZvaWQgKnB0cjsKICAgICBpZiAodmlldyA9PSBOVUxMKSB7Ci0gICAgICAgIG9iai0+b2JfZXhwb3J0cysrOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0J1ZmZlckVycm9yLAorICAgICAgICAgICAgImJ5dGVhcnJheV9nZXRidWZmZXI6IHZpZXc9PU5VTEwgYXJndW1lbnQgaXMgb2Jzb2xldGUiKTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBwdHIgPSAodm9pZCAqKSBQeUJ5dGVBcnJheV9BU19TVFJJTkcob2JqKTsKLSAgICByZXQgPSBQeUJ1ZmZlcl9GaWxsSW5mbyh2aWV3LCAoUHlPYmplY3QqKW9iaiwgcHRyLCBQeV9TSVpFKG9iaiksIDAsIGZsYWdzKTsKLSAgICBpZiAocmV0ID49IDApIHsKLSAgICAgICAgb2JqLT5vYl9leHBvcnRzKys7Ci0gICAgfQotICAgIHJldHVybiByZXQ7CisgICAgLyogY2Fubm90IGZhaWwgaWYgdmlldyAhPSBOVUxMIGFuZCByZWFkb25seSA9PSAwICovCisgICAgKHZvaWQpUHlCdWZmZXJfRmlsbEluZm8odmlldywgKFB5T2JqZWN0KilvYmosIHB0ciwgUHlfU0laRShvYmopLCAwLCBmbGFncyk7CisgICAgb2JqLT5vYl9leHBvcnRzKys7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC04NSw2ICs5MSw4IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKKyNpbmNsdWRlICJjbGluaWMvYnl0ZWFycmF5b2JqZWN0LmMuaCIKKwogLyogRGlyZWN0IEFQSSBmdW5jdGlvbnMgKi8KIAogUHlPYmplY3QgKgpAQCAtMjM4LDcgKzI0Niw2IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVBcnJheV9Db25jYXQoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiKQogewotICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBQeV9idWZmZXIgdmEsIHZiOwogICAgIFB5Qnl0ZUFycmF5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCkBAIC0yNTEsMTMgKzI1OCwxMyBAQAogICAgICAgICAgICAgZ290byBkb25lOwogICAgIH0KIAotICAgIHNpemUgPSB2YS5sZW4gKyB2Yi5sZW47Ci0gICAgaWYgKHNpemUgPCAwKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgZ290byBkb25lOworICAgIGlmICh2YS5sZW4gPiBQWV9TU0laRV9UX01BWCAtIHZiLmxlbikgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gKFB5Qnl0ZUFycmF5T2JqZWN0ICopIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpOworICAgIHJlc3VsdCA9IChQeUJ5dGVBcnJheU9iamVjdCAqKSBcCisgICAgICAgIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZhLmxlbiArIHZiLmxlbik7CiAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CiAgICAgICAgIG1lbWNweShyZXN1bHQtPm9iX2J5dGVzLCB2YS5idWYsIHZhLmxlbik7CiAgICAgICAgIG1lbWNweShyZXN1bHQtPm9iX2J5dGVzICsgdmEubGVuLCB2Yi5idWYsIHZiLmxlbik7CkBAIC0yNzEsNiArMjc4LDMxIEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXJlc3VsdDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9mb3JtYXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpieXRlc19pbiwgKmJ5dGVzX291dCwgKnJlczsKKyAgICBjaGFyICpieXRlc3RyaW5nOworCisgICAgaWYgKHNlbGYgPT0gTlVMTCB8fCAhUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikgfHwgYXJncyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgYnl0ZXN0cmluZyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICBieXRlc19pbiA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhieXRlc3RyaW5nKTsKKyAgICBpZiAoYnl0ZXNfaW4gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnl0ZXNfb3V0ID0gX1B5Qnl0ZXNfRm9ybWF0KGJ5dGVzX2luLCBhcmdzKTsKKyAgICBQeV9ERUNSRUYoYnl0ZXNfaW4pOworICAgIGlmIChieXRlc19vdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzID0gUHlCeXRlQXJyYXlfRnJvbU9iamVjdChieXRlc19vdXQpOworICAgIFB5X0RFQ1JFRihieXRlc19vdXQpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHJlczsKK30KKwogLyogRnVuY3Rpb25zIHN0dWZmZWQgaW50byB0aGUgdHlwZSBvYmplY3QgKi8KIAogc3RhdGljIFB5X3NzaXplX3QKQEAgLTI4Miw3ICszMTQsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVhcnJheV9pY29uY2F0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIpCiB7Ci0gICAgUHlfc3NpemVfdCBteXNpemU7CiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIFB5X2J1ZmZlciB2bzsKIApAQCAtMjkyLDE3ICszMjMsMTYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKLSAgICBzaXplID0gbXlzaXplICsgdm8ubGVuOwotICAgIGlmIChzaXplIDwgMCkgeworICAgIHNpemUgPSBQeV9TSVpFKHNlbGYpOworICAgIGlmIChzaXplID4gUFlfU1NJWkVfVF9NQVggLSB2by5sZW4pIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdm8pOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9Ci0gICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApIHsKKyAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUgKyB2by5sZW4pIDwgMCkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBtZW1jcHkoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpICsgbXlzaXplLCB2by5idWYsIHZvLmxlbik7CisgICAgbWVtY3B5KFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIHNpemUsIHZvLmJ1Ziwgdm8ubGVuKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwpAQCAtNDI1LDcgKzQ1NSw5IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJieXRlYXJyYXkgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiYnl0ZWFycmF5IGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciBzbGljZXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpbmRleCktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiB9CkBAIC02MzAsNyArNjYyLDkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ5dGVhcnJheSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlciIpOworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImJ5dGVhcnJheSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3Igc2xpY2VzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGluZGV4KS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTExMTAsNyArMTE0NCw3IEBACiAgICAgY2hhciBieXRlOwogICAgIFB5X2J1ZmZlciBzdWJidWY7CiAgICAgY29uc3QgY2hhciAqc3ViOwotICAgIFB5X3NzaXplX3Qgc3ViX2xlbjsKKyAgICBQeV9zc2l6ZV90IGxlbiwgc3ViX2xlbjsKICAgICBQeV9zc2l6ZV90IHN0YXJ0PTAsIGVuZD1QWV9TU0laRV9UX01BWDsKICAgICBQeV9zc2l6ZV90IHJlczsKIApAQCAtMTEyOSwxNSArMTE2MywzNCBAQAogICAgICAgICBzdWIgPSAmYnl0ZTsKICAgICAgICAgc3ViX2xlbiA9IDE7CiAgICAgfQorICAgIGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpOwogCi0gICAgaWYgKGRpciA+IDApCi0gICAgICAgIHJlcyA9IHN0cmluZ2xpYl9maW5kX3NsaWNlKAotICAgICAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSwKLSAgICAgICAgICAgIHN1Yiwgc3ViX2xlbiwgc3RhcnQsIGVuZCk7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBzdHJpbmdsaWJfcmZpbmRfc2xpY2UoCi0gICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpLAotICAgICAgICAgICAgc3ViLCBzdWJfbGVuLCBzdGFydCwgZW5kKTsKKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4pOworICAgIGlmIChlbmQgLSBzdGFydCA8IHN1Yl9sZW4pCisgICAgICAgIHJlcyA9IC0xOworICAgIGVsc2UgaWYgKHN1Yl9sZW4gPT0gMQorI2lmbmRlZiBIQVZFX01FTVJDSFIKKyAgICAgICAgICAgICYmIGRpciA+IDAKKyNlbmRpZgorICAgICkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIG5lZWRsZSA9ICpzdWI7CisgICAgICAgIGludCBtb2RlID0gKGRpciA+IDApID8gRkFTVF9TRUFSQ0ggOiBGQVNUX1JTRUFSQ0g7CisgICAgICAgIHJlcyA9IHN0cmluZ2xpYl9mYXN0c2VhcmNoX21lbWNocl8xY2hhcigKKyAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIHN0YXJ0LCBlbmQgLSBzdGFydCwKKyAgICAgICAgICAgIG5lZWRsZSwgbmVlZGxlLCBtb2RlKTsKKyAgICAgICAgaWYgKHJlcyA+PSAwKQorICAgICAgICAgICAgcmVzICs9IHN0YXJ0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKGRpciA+IDApCisgICAgICAgICAgICByZXMgPSBzdHJpbmdsaWJfZmluZF9zbGljZSgKKyAgICAgICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksIGxlbiwKKyAgICAgICAgICAgICAgICBzdWIsIHN1Yl9sZW4sIHN0YXJ0LCBlbmQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXMgPSBzdHJpbmdsaWJfcmZpbmRfc2xpY2UoCisgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCBsZW4sCisgICAgICAgICAgICAgICAgc3ViLCBzdWJfbGVuLCBzdGFydCwgZW5kKTsKKyAgICB9CiAKICAgICBpZiAoc3Vib2JqKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzdWJidWYpOwpAQCAtMTIxMCwyNiArMTI2MywzNCBAQAogICAgIHJldHVybiBjb3VudF9vYmo7CiB9CiAKLVB5RG9jX1NUUlZBUihjbGVhcl9fZG9jX18sCi0iQi5jbGVhcigpIC0+IE5vbmVcblwKLVxuXAotUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIEIuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkuY2xlYXIKKworICAgIHNlbGY6IHNlbGYodHlwZT0iUHlCeXRlQXJyYXlPYmplY3QgKiIpCisKK1JlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgYnl0ZWFycmF5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X2NsZWFyKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQorYnl0ZWFycmF5X2NsZWFyX2ltcGwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODVjMmZlNmFlZGUwOTU2YyBpbnB1dD1lNTI0ZmQzMzBhYmNkYzE4XSovCiB7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCAwKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIoY29weV9fZG9jX18sCi0iQi5jb3B5KCkgLT4gYnl0ZWFycmF5XG5cCi1cblwKLVJldHVybiBhIGNvcHkgb2YgQi4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVhcnJheS5jb3B5CisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlB5Qnl0ZUFycmF5T2JqZWN0ICoiKQorCitSZXR1cm4gYSBjb3B5IG9mIEIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfY29weShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKK2J5dGVhcnJheV9jb3B5X2ltcGwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjhjZmJjZmVkNDg0YzEzMiBpbnB1dD02ZDVkMjk3NWFhMGYzM2YzXSovCiB7CiAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKFB5Qnl0ZUFycmF5X0FTX1NUUklORygoUHlPYmplY3QgKilzZWxmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikpOwpAQCAtMTQ0OCwzNiArMTUwOSw0MiBAQAogfQogCiAKLVB5RG9jX1NUUlZBUih0cmFuc2xhdGVfX2RvY19fLAotIkIudHJhbnNsYXRlKHRhYmxlWywgZGVsZXRlY2hhcnNdKSAtPiBieXRlYXJyYXlcblwKLVxuXAotUmV0dXJuIGEgY29weSBvZiBCLCB3aGVyZSBhbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcgaW4gdGhlXG5cCi1vcHRpb25hbCBhcmd1bWVudCBkZWxldGVjaGFycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZSByZW1haW5pbmdcblwKLWNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvblxuXAotdGFibGUsIHdoaWNoIG11c3QgYmUgYSBieXRlcyBvYmplY3Qgb2YgbGVuZ3RoIDI1Ni4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVhcnJheS50cmFuc2xhdGUKKworICAgIHNlbGY6IHNlbGYodHlwZT0iUHlCeXRlQXJyYXlPYmplY3QgKiIpCisgICAgdGFibGU6IG9iamVjdAorICAgICAgICBUcmFuc2xhdGlvbiB0YWJsZSwgd2hpY2ggbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCBvZiBsZW5ndGggMjU2LgorICAgIFsKKyAgICBkZWxldGVjaGFyczogb2JqZWN0CisgICAgXQorICAgIC8KKworUmV0dXJuIGEgY29weSB3aXRoIGVhY2ggY2hhcmFjdGVyIG1hcHBlZCBieSB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUuCisKK0FsbCBjaGFyYWN0ZXJzIG9jY3VycmluZyBpbiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgZGVsZXRlY2hhcnMgYXJlIHJlbW92ZWQuCitUaGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV90cmFuc2xhdGUoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3RyYW5zbGF0ZV9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdyb3VwX3JpZ2h0XzEsIFB5T2JqZWN0ICpkZWxldGVjaGFycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yYmViYzg2YTlhMWZmMDgzIGlucHV0PWI3NDlhZDg1ZjQ4NjA4MjRdKi8KIHsKICAgICBjaGFyICppbnB1dCwgKm91dHB1dDsKLSAgICBjb25zdCBjaGFyICp0YWJsZTsKKyAgICBjb25zdCBjaGFyICp0YWJsZV9jaGFyczsKICAgICBQeV9zc2l6ZV90IGksIGM7CiAgICAgUHlPYmplY3QgKmlucHV0X29iaiA9IChQeU9iamVjdCopc2VsZjsKICAgICBjb25zdCBjaGFyICpvdXRwdXRfc3RhcnQ7CiAgICAgUHlfc3NpemVfdCBpbmxlbjsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBpbnQgdHJhbnNfdGFibGVbMjU2XTsKLSAgICBQeU9iamVjdCAqdGFibGVvYmogPSBOVUxMLCAqZGVsb2JqID0gTlVMTDsKICAgICBQeV9idWZmZXIgdnRhYmxlLCB2ZGVsOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAidHJhbnNsYXRlIiwgMSwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWJsZW9iaiwgJmRlbG9iaikpCi0gICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAodGFibGVvYmogPT0gUHlfTm9uZSkgeworICAgIGlmICh0YWJsZSA9PSBQeV9Ob25lKSB7CisgICAgICAgIHRhYmxlX2NoYXJzID0gTlVMTDsKICAgICAgICAgdGFibGUgPSBOVUxMOwotICAgICAgICB0YWJsZW9iaiA9IE5VTEw7Ci0gICAgfSBlbHNlIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodGFibGVvYmosICZ2dGFibGUsIFB5QlVGX1NJTVBMRSkgIT0gMCkgeworICAgIH0gZWxzZSBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHRhYmxlLCAmdnRhYmxlLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHZ0YWJsZS5sZW4gIT0gMjU2KSB7CkBAIC0xNDg2LDEyICsxNTUzLDEyIEBACiAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2dGFibGUpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgdGFibGUgPSAoY29uc3QgY2hhciopdnRhYmxlLmJ1ZjsKKyAgICAgICAgdGFibGVfY2hhcnMgPSAoY29uc3QgY2hhciopdnRhYmxlLmJ1ZjsKICAgICB9CiAKLSAgICBpZiAoZGVsb2JqICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihkZWxvYmosICZ2ZGVsLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKLSAgICAgICAgICAgIGlmICh0YWJsZW9iaiAhPSBOVUxMKQorICAgIGlmIChkZWxldGVjaGFycyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoZGVsZXRlY2hhcnMsICZ2ZGVsLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKKyAgICAgICAgICAgIGlmICh0YWJsZSAhPSBOVUxMKQogICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTUwOCwyMSArMTU3NSwyMSBAQAogICAgIG91dHB1dF9zdGFydCA9IG91dHB1dCA9IFB5Qnl0ZUFycmF5X0FzU3RyaW5nKHJlc3VsdCk7CiAgICAgaW5wdXQgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoaW5wdXRfb2JqKTsKIAotICAgIGlmICh2ZGVsLmxlbiA9PSAwICYmIHRhYmxlICE9IE5VTEwpIHsKKyAgICBpZiAodmRlbC5sZW4gPT0gMCAmJiB0YWJsZV9jaGFycyAhPSBOVUxMKSB7CiAgICAgICAgIC8qIElmIG5vIGRlbGV0aW9ucyBhcmUgcmVxdWlyZWQsIHVzZSBmYXN0ZXIgY29kZSAqLwogICAgICAgICBmb3IgKGkgPSBpbmxlbjsgLS1pID49IDA7ICkgewogICAgICAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCppbnB1dCsrKTsKLSAgICAgICAgICAgICpvdXRwdXQrKyA9IHRhYmxlW2NdOworICAgICAgICAgICAgKm91dHB1dCsrID0gdGFibGVfY2hhcnNbY107CiAgICAgICAgIH0KICAgICAgICAgZ290byBkb25lOwogICAgIH0KIAotICAgIGlmICh0YWJsZSA9PSBOVUxMKSB7CisgICAgaWYgKHRhYmxlX2NoYXJzID09IE5VTEwpIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICAgICAgdHJhbnNfdGFibGVbaV0gPSBQeV9DSEFSTUFTSyhpKTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgICAgICAgICB0cmFuc190YWJsZVtpXSA9IFB5X0NIQVJNQVNLKHRhYmxlW2ldKTsKKyAgICAgICAgICAgIHRyYW5zX3RhYmxlW2ldID0gUHlfQ0hBUk1BU0sodGFibGVfY2hhcnNbaV0pOwogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCB2ZGVsLmxlbjsgaSsrKQpAQCAtMTU0MiwxOCArMTYwOSwzNiBAQAogICAgICAgICB9CiAKIGRvbmU6Ci0gICAgaWYgKHRhYmxlb2JqICE9IE5VTEwpCisgICAgaWYgKHRhYmxlICE9IE5VTEwpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ0YWJsZSk7Ci0gICAgaWYgKGRlbG9iaiAhPSBOVUxMKQorICAgIGlmIChkZWxldGVjaGFycyAhPSBOVUxMKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2ZGVsKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KKworQHN0YXRpY21ldGhvZAorYnl0ZWFycmF5Lm1ha2V0cmFucworCisgICAgZnJtOiBQeV9idWZmZXIKKyAgICB0bzogUHlfYnVmZmVyCisgICAgLworCitSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2VhYmxlIGZvciB0aGUgYnl0ZXMgb3IgYnl0ZWFycmF5IHRyYW5zbGF0ZSBtZXRob2QuCisKK1RoZSByZXR1cm5lZCB0YWJsZSB3aWxsIGJlIG9uZSB3aGVyZSBlYWNoIGJ5dGUgaW4gZnJtIGlzIG1hcHBlZCB0byB0aGUgYnl0ZSBhdAordGhlIHNhbWUgcG9zaXRpb24gaW4gdG8uCisKK1RoZSBieXRlcyBvYmplY3RzIGZybSBhbmQgdG8gbXVzdCBiZSBvZiB0aGUgc2FtZSBsZW5ndGguCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfbWFrZXRyYW5zKFB5T2JqZWN0ICpudWxsLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9tYWtldHJhbnNfaW1wbChQeV9idWZmZXIgKmZybSwgUHlfYnVmZmVyICp0bykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xZGYyNjdkOTlmNTZiMTVlIGlucHV0PTU5MjVhODFkMmZiYmYxNTFdKi8KIHsKLSAgICAgICAgcmV0dXJuIF9QeV9ieXRlc19tYWtldHJhbnMoYXJncyk7CisgICAgcmV0dXJuIF9QeV9ieXRlc19tYWtldHJhbnMoZnJtLCB0byk7CiB9CiAKIApAQCAtMjA0NCw2MSArMjEyOSw2MyBAQAogfQogCiAKLVB5RG9jX1NUUlZBUihyZXBsYWNlX19kb2NfXywKLSJCLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pIC0+IGJ5dGVhcnJheVxuXAotXG5cCi1SZXR1cm4gYSBjb3B5IG9mIEIgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic2VjdGlvblxuXAotb2xkIHJlcGxhY2VkIGJ5IG5ldy4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCBjb3VudCBpc1xuXAotZ2l2ZW4sIG9ubHkgdGhlIGZpcnN0IGNvdW50IG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVhcnJheS5yZXBsYWNlCisKKyAgICBvbGQ6IFB5X2J1ZmZlcgorICAgIG5ldzogUHlfYnVmZmVyCisgICAgY291bnQ6IFB5X3NzaXplX3QgPSAtMQorICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBvY2N1cnJlbmNlcyB0byByZXBsYWNlLgorICAgICAgICAtMSAodGhlIGRlZmF1bHQgdmFsdWUpIG1lYW5zIHJlcGxhY2UgYWxsIG9jY3VycmVuY2VzLgorICAgIC8KKworUmV0dXJuIGEgY29weSB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgb2xkIHJlcGxhY2VkIGJ5IG5ldy4KKworSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGNvdW50IGlzIGdpdmVuLCBvbmx5IHRoZSBmaXJzdCBjb3VudCBvY2N1cnJlbmNlcyBhcmUKK3JlcGxhY2VkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X3JlcGxhY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3JlcGxhY2VfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpvbGQsCisgICAgICAgICAgICAgICAgICAgICAgIFB5X2J1ZmZlciAqbmV3LCBQeV9zc2l6ZV90IGNvdW50KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQzOTg4NGM0ZGM1OTQxMmEgaW5wdXQ9YWEzNzlkOTg4NjM3YzdmYl0qLwogewotICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgUHlfYnVmZmVyIG9sZCA9IHtOVUxMLCBOVUxMfTsKLSAgICBQeV9idWZmZXIgbmV3ID0ge05VTEwsIE5VTEx9OwotICAgIFB5X3NzaXplX3QgY291bnQgPSAtMTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp5KnxuOnJlcGxhY2UiLCAmb2xkLCAmbmV3LCAmY291bnQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJlcyA9IChQeU9iamVjdCAqKXJlcGxhY2UoKFB5Qnl0ZUFycmF5T2JqZWN0ICopIHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKW9sZC5idWYsIG9sZC5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKW5ldy5idWYsIG5ldy5sZW4sIGNvdW50KTsKLQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJm9sZCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmbmV3KTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiAoUHlPYmplY3QgKilyZXBsYWNlKChQeUJ5dGVBcnJheU9iamVjdCAqKSBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZC0+YnVmLCBvbGQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXctPmJ1ZiwgbmV3LT5sZW4sIGNvdW50KTsKIH0KIAotUHlEb2NfU1RSVkFSKHNwbGl0X19kb2NfXywKLSJCLnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSkgLT4gbGlzdCBvZiBieXRlYXJyYXlzXG5cCi1cblwKLVJldHVybiBhIGxpc3Qgb2YgdGhlIHNlY3Rpb25zIGluIEIsIHVzaW5nIHNlcCBhcyB0aGUgZGVsaW1pdGVyLlxuXAotSWYgc2VwIGlzIG5vdCBnaXZlbiwgQiBpcyBzcGxpdCBvbiBBU0NJSSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblwKLShzcGFjZSwgdGFiLCByZXR1cm4sIG5ld2xpbmUsIGZvcm1mZWVkLCB2ZXJ0aWNhbCB0YWIpLlxuXAotSWYgbWF4c3BsaXQgaXMgZ2l2ZW4sIGF0IG1vc3QgbWF4c3BsaXQgc3BsaXRzIGFyZSBkb25lLiIpOworLypbY2xpbmljIGlucHV0XQorYnl0ZWFycmF5LnNwbGl0CisKKyAgICBzZXA6IG9iamVjdCA9IE5vbmUKKyAgICAgICAgVGhlIGRlbGltaXRlciBhY2NvcmRpbmcgd2hpY2ggdG8gc3BsaXQgdGhlIGJ5dGVhcnJheS4KKyAgICAgICAgTm9uZSAodGhlIGRlZmF1bHQgdmFsdWUpIG1lYW5zIHNwbGl0IG9uIEFTQ0lJIHdoaXRlc3BhY2UgY2hhcmFjdGVycworICAgICAgICAoc3BhY2UsIHRhYiwgcmV0dXJuLCBuZXdsaW5lLCBmb3JtZmVlZCwgdmVydGljYWwgdGFiKS4KKyAgICBtYXhzcGxpdDogUHlfc3NpemVfdCA9IC0xCisgICAgICAgIE1heGltdW0gbnVtYmVyIG9mIHNwbGl0cyB0byBkby4KKyAgICAgICAgLTEgKHRoZSBkZWZhdWx0IHZhbHVlKSBtZWFucyBubyBsaW1pdC4KKworUmV0dXJuIGEgbGlzdCBvZiB0aGUgc2VjdGlvbnMgaW4gdGhlIGJ5dGVhcnJheSwgdXNpbmcgc2VwIGFzIHRoZSBkZWxpbWl0ZXIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfc3BsaXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK2J5dGVhcnJheV9zcGxpdF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwLAorICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhzcGxpdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04MzNlMmNmMzg1ZDlhMDRkIGlucHV0PTI0ZjgyNjY5ZjQxYmY1MjNdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InNlcCIsICJtYXhzcGxpdCIsIDB9OwogICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksIG47Ci0gICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOwogICAgIGNvbnN0IGNoYXIgKnMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksICpzdWI7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpzdWJvYmogPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpsaXN0OwogICAgIFB5X2J1ZmZlciB2c3ViOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxPbjpzcGxpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc3Vib2JqLCAmbWF4c3BsaXQpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobWF4c3BsaXQgPCAwKQogICAgICAgICBtYXhzcGxpdCA9IFBZX1NTSVpFX1RfTUFYOwogCi0gICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQorICAgIGlmIChzZXAgPT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogCi0gICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdWJvYmosICZ2c3ViLCBQeUJVRl9TSU1QTEUpICE9IDApCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzZXAsICZ2c3ViLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN1YiA9IHZzdWIuYnVmOwogICAgIG4gPSB2c3ViLmxlbjsKQEAgLTIxMTAsMTkgKzIxOTcsMzAgQEAKICAgICByZXR1cm4gbGlzdDsKIH0KIAotUHlEb2NfU1RSVkFSKHBhcnRpdGlvbl9fZG9jX18sCi0iQi5wYXJ0aXRpb24oc2VwKSAtPiAoaGVhZCwgc2VwLCB0YWlsKVxuXAotXG5cCi1TZWFyY2ggZm9yIHRoZSBzZXBhcmF0b3Igc2VwIGluIEIsIGFuZCByZXR1cm4gdGhlIHBhcnQgYmVmb3JlIGl0LFxuXAotdGhlIHNlcGFyYXRvciBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciBpdC4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG5cCi1mb3VuZCwgcmV0dXJucyBCIGFuZCB0d28gZW1wdHkgYnl0ZWFycmF5IG9iamVjdHMuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkucGFydGl0aW9uCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlB5Qnl0ZUFycmF5T2JqZWN0ICoiKQorICAgIHNlcDogb2JqZWN0CisgICAgLworCitQYXJ0aXRpb24gdGhlIGJ5dGVhcnJheSBpbnRvIHRocmVlIHBhcnRzIHVzaW5nIHRoZSBnaXZlbiBzZXBhcmF0b3IuCisKK1RoaXMgd2lsbCBzZWFyY2ggZm9yIHRoZSBzZXBhcmF0b3Igc2VwIGluIHRoZSBieXRlYXJyYXkuIElmIHRoZSBzZXBhcmF0b3IgaXMKK2ZvdW5kLCByZXR1cm5zIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUKK3NlcGFyYXRvciBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciBpdC4KKworSWYgdGhlIHNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybnMgYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsCitieXRlYXJyYXkgb2JqZWN0IGFuZCB0d28gZW1wdHkgYnl0ZWFycmF5IG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfcGFydGl0aW9uKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwX29iaikKK2J5dGVhcnJheV9wYXJ0aXRpb24oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZXApCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDVkMjUyNWRkZDM1Zjk1NyBpbnB1dD03ZDdmZTM3YjE2OTZkNTA2XSovCiB7CiAgICAgUHlPYmplY3QgKmJ5dGVzZXAsICpyZXN1bHQ7CiAKLSAgICBieXRlc2VwID0gUHlCeXRlQXJyYXlfRnJvbU9iamVjdChzZXBfb2JqKTsKKyAgICBieXRlc2VwID0gUHlCeXRlQXJyYXlfRnJvbU9iamVjdChzZXApOwogICAgIGlmICghIGJ5dGVzZXApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMTM3LDIwICsyMjM1LDMwIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUHlEb2NfU1RSVkFSKHJwYXJ0aXRpb25fX2RvY19fLAotIkIucnBhcnRpdGlvbihzZXApIC0+IChoZWFkLCBzZXAsIHRhaWwpXG5cCi1cblwKLVNlYXJjaCBmb3IgdGhlIHNlcGFyYXRvciBzZXAgaW4gQiwgc3RhcnRpbmcgYXQgdGhlIGVuZCBvZiBCLFxuXAotYW5kIHJldHVybiB0aGUgcGFydCBiZWZvcmUgaXQsIHRoZSBzZXBhcmF0b3IgaXRzZWxmLCBhbmQgdGhlXG5cCi1wYXJ0IGFmdGVyIGl0LiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybnMgdHdvIGVtcHR5XG5cCi1ieXRlYXJyYXkgb2JqZWN0cyBhbmQgQi4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVhcnJheS5ycGFydGl0aW9uCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlB5Qnl0ZUFycmF5T2JqZWN0ICoiKQorICAgIHNlcDogb2JqZWN0CisgICAgLworCitQYXJ0aXRpb24gdGhlIGJ5dGVzIGludG8gdGhyZWUgcGFydHMgdXNpbmcgdGhlIGdpdmVuIHNlcGFyYXRvci4KKworVGhpcyB3aWxsIHNlYXJjaCBmb3IgdGhlIHNlcGFyYXRvciBzZXAgaW4gdGhlIGJ5dGVhcnJheSwgc3RhcnRpbmcgYW5kIHRoZSBlbmQuCitJZiB0aGUgc2VwYXJhdG9yIGlzIGZvdW5kLCByZXR1cm5zIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUKK3NlcGFyYXRvciwgdGhlIHNlcGFyYXRvciBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciBpdC4KKworSWYgdGhlIHNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybnMgYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IGJ5dGVhcnJheQorb2JqZWN0cyBhbmQgdGhlIG9yaWdpbmFsIGJ5dGVhcnJheSBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfcnBhcnRpdGlvbihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNlcF9vYmopCitieXRlYXJyYXlfcnBhcnRpdGlvbihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNlcCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00NDBkZTNjOTQyNjExNWU4IGlucHV0PTliOGNkNTQwYzFiNzU4NTNdKi8KIHsKICAgICBQeU9iamVjdCAqYnl0ZXNlcCwgKnJlc3VsdDsKIAotICAgIGJ5dGVzZXAgPSBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0KHNlcF9vYmopOworICAgIGJ5dGVzZXAgPSBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0KHNlcCk7CiAgICAgaWYgKCEgYnl0ZXNlcCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIxNjUsMzUgKzIyNzMsMzEgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QeURvY19TVFJWQVIocnNwbGl0X19kb2NfXywKLSJCLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpIC0+IGxpc3Qgb2YgYnl0ZWFycmF5c1xuXAotXG5cCi1SZXR1cm4gYSBsaXN0IG9mIHRoZSBzZWN0aW9ucyBpbiBCLCB1c2luZyBzZXAgYXMgdGhlIGRlbGltaXRlcixcblwKLXN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgQiBhbmQgd29ya2luZyB0byB0aGUgZnJvbnQuXG5cCi1JZiBzZXAgaXMgbm90IGdpdmVuLCBCIGlzIHNwbGl0IG9uIEFTQ0lJIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXAotKHNwYWNlLCB0YWIsIHJldHVybiwgbmV3bGluZSwgZm9ybWZlZWQsIHZlcnRpY2FsIHRhYikuXG5cCi1JZiBtYXhzcGxpdCBpcyBnaXZlbiwgYXQgbW9zdCBtYXhzcGxpdCBzcGxpdHMgYXJlIGRvbmUuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkucnNwbGl0ID0gYnl0ZWFycmF5LnNwbGl0CisKK1JldHVybiBhIGxpc3Qgb2YgdGhlIHNlY3Rpb25zIGluIHRoZSBieXRlYXJyYXksIHVzaW5nIHNlcCBhcyB0aGUgZGVsaW1pdGVyLgorCitTcGxpdHRpbmcgaXMgZG9uZSBzdGFydGluZyBhdCB0aGUgZW5kIG9mIHRoZSBieXRlYXJyYXkgYW5kIHdvcmtpbmcgdG8gdGhlIGZyb250LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X3JzcGxpdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorYnl0ZWFycmF5X3JzcGxpdF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwLAorICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4c3BsaXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTU1ZTBiNWEwM2NiNjE5MCBpbnB1dD1hNjgyODZlNGRkNjkyZmZlXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzZXAiLCAibWF4c3BsaXQiLCAwfTsKICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpLCBuOwotICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMTsKICAgICBjb25zdCBjaGFyICpzID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCAqc3ViOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqc3Vib2JqID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqbGlzdDsKICAgICBQeV9idWZmZXIgdnN1YjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8T246cnNwbGl0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZzdWJvYmosICZtYXhzcGxpdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChtYXhzcGxpdCA8IDApCiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7CiAKLSAgICBpZiAoc3Vib2JqID09IFB5X05vbmUpCisgICAgaWYgKHNlcCA9PSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogCi0gICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdWJvYmosICZ2c3ViLCBQeUJVRl9TSU1QTEUpICE9IDApCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzZXAsICZ2c3ViLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN1YiA9IHZzdWIuYnVmOwogICAgIG4gPSB2c3ViLmxlbjsKQEAgLTIyMDUsMTIgKzIzMDksMTcgQEAKICAgICByZXR1cm4gbGlzdDsKIH0KIAotUHlEb2NfU1RSVkFSKHJldmVyc2VfX2RvY19fLAotIkIucmV2ZXJzZSgpIC0+IE5vbmVcblwKLVxuXAotUmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHZhbHVlcyBpbiBCIGluIHBsYWNlLiIpOworLypbY2xpbmljIGlucHV0XQorYnl0ZWFycmF5LnJldmVyc2UKKworICAgIHNlbGY6IHNlbGYodHlwZT0iUHlCeXRlQXJyYXlPYmplY3QgKiIpCisKK1JldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSB2YWx1ZXMgaW4gQiBpbiBwbGFjZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9yZXZlcnNlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorYnl0ZWFycmF5X3JldmVyc2VfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05Zjc2MTZmMjlhYjMwOWQzIGlucHV0PTc5MzNhNDk5Yjg1OTdiZDFdKi8KIHsKICAgICBjaGFyIHN3YXAsICpoZWFkLCAqdGFpbDsKICAgICBQeV9zc2l6ZV90IGksIGosIG4gPSBQeV9TSVpFKHNlbGYpOwpAQCAtMjIyNyw1NyArMjMzNiw3NCBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIoaW5zZXJ0X19kb2NfXywKLSJCLmluc2VydChpbmRleCwgaW50KSAtPiBOb25lXG5cCi1cblwKLUluc2VydCBhIHNpbmdsZSBpdGVtIGludG8gdGhlIGJ5dGVhcnJheSBiZWZvcmUgdGhlIGdpdmVuIGluZGV4LiIpOwotc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9pbnNlcnQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICp2YWx1ZTsKLSAgICBpbnQgaXZhbDsKLSAgICBQeV9zc2l6ZV90IHdoZXJlLCBuID0gUHlfU0laRShzZWxmKTsKLSAgICBjaGFyICpidWY7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIm5POmluc2VydCIsICZ3aGVyZSwgJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisvKltweXRob24gaW5wdXRdCitjbGFzcyBieXRlc3ZhbHVlX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBjb252ZXJ0ZXIgPSAnX2dldGJ5dGV2YWx1ZScKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTI5YzJlN2MyNmMyMTI4MTJdKi8KKworCisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkuaW5zZXJ0CisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlB5Qnl0ZUFycmF5T2JqZWN0ICoiKQorICAgIGluZGV4OiBQeV9zc2l6ZV90CisgICAgICAgIFRoZSBpbmRleCB3aGVyZSB0aGUgdmFsdWUgaXMgdG8gYmUgaW5zZXJ0ZWQuCisgICAgaXRlbTogYnl0ZXN2YWx1ZQorICAgICAgICBUaGUgaXRlbSB0byBiZSBpbnNlcnRlZC4KKyAgICAvCisKK0luc2VydCBhIHNpbmdsZSBpdGVtIGludG8gdGhlIGJ5dGVhcnJheSBiZWZvcmUgdGhlIGdpdmVuIGluZGV4LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X2luc2VydF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBpbnQgaXRlbSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NmM3NzVhNzBlN2IwN2I3IGlucHV0PTgzMzc2NjgzNmJhMzBlMWVdKi8KK3sKKyAgICBQeV9zc2l6ZV90IG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmIChuID09IFBZX1NTSVpFX1RfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBhZGQgbW9yZSBvYmplY3RzIHRvIGJ5dGVhcnJheSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKCFfZ2V0Ynl0ZXZhbHVlKHZhbHVlLCAmaXZhbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiArIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCi0gICAgaWYgKHdoZXJlIDwgMCkgewotICAgICAgICB3aGVyZSArPSBuOwotICAgICAgICBpZiAod2hlcmUgPCAwKQotICAgICAgICAgICAgd2hlcmUgPSAwOworICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgaW5kZXggKz0gbjsKKyAgICAgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgICAgIGluZGV4ID0gMDsKICAgICB9Ci0gICAgaWYgKHdoZXJlID4gbikKLSAgICAgICAgd2hlcmUgPSBuOwotICAgIG1lbW1vdmUoYnVmICsgd2hlcmUgKyAxLCBidWYgKyB3aGVyZSwgbiAtIHdoZXJlKTsKLSAgICBidWZbd2hlcmVdID0gaXZhbDsKKyAgICBpZiAoaW5kZXggPiBuKQorICAgICAgICBpbmRleCA9IG47CisgICAgbWVtbW92ZShidWYgKyBpbmRleCArIDEsIGJ1ZiArIGluZGV4LCBuIC0gaW5kZXgpOworICAgIGJ1ZltpbmRleF0gPSBpdGVtOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihhcHBlbmRfX2RvY19fLAotIkIuYXBwZW5kKGludCkgLT4gTm9uZVxuXAotXG5cCi1BcHBlbmQgYSBzaW5nbGUgaXRlbSB0byB0aGUgZW5kIG9mIEIuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkuYXBwZW5kCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlB5Qnl0ZUFycmF5T2JqZWN0ICoiKQorICAgIGl0ZW06IGJ5dGVzdmFsdWUKKyAgICAgICAgVGhlIGl0ZW0gdG8gYmUgYXBwZW5kZWQuCisgICAgLworCitBcHBlbmQgYSBzaW5nbGUgaXRlbSB0byB0aGUgZW5kIG9mIHRoZSBieXRlYXJyYXkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfYXBwZW5kKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQorYnl0ZWFycmF5X2FwcGVuZF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBpbnQgaXRlbSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hMTU0ZTE5ZWQxODg2Y2I2IGlucHV0PWFlNTZlYTg3MzgwNDA3Y2NdKi8KIHsKLSAgICBpbnQgdmFsdWU7CiAgICAgUHlfc3NpemVfdCBuID0gUHlfU0laRShzZWxmKTsKIAotICAgIGlmICghIF9nZXRieXRldmFsdWUoYXJnLCAmdmFsdWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobiA9PSBQWV9TU0laRV9UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYWRkIG1vcmUgb2JqZWN0cyB0byBieXRlYXJyYXkiKTsKQEAgLTIyODYsMTggKzI0MTIsMjUgQEAKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gKyAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW25dID0gdmFsdWU7CisgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW25dID0gaXRlbTsKIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIoZXh0ZW5kX19kb2NfXywKLSJCLmV4dGVuZChpdGVyYWJsZV9vZl9pbnRzKSAtPiBOb25lXG5cCi1cblwKLUFwcGVuZCBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhdG9yIG9yIHNlcXVlbmNlIHRvIHRoZVxuXAotZW5kIG9mIEIuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkuZXh0ZW5kCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlB5Qnl0ZUFycmF5T2JqZWN0ICoiKQorICAgIGl0ZXJhYmxlX29mX2ludHM6IG9iamVjdAorICAgICAgICBUaGUgaXRlcmFibGUgb2YgaXRlbXMgdG8gYXBwZW5kLgorICAgIC8KKworQXBwZW5kIGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUgaXRlcmF0b3Igb3Igc2VxdWVuY2UgdG8gdGhlIGVuZCBvZiB0aGUgYnl0ZWFycmF5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X2V4dGVuZChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK2J5dGVhcnJheV9leHRlbmQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdGVyYWJsZV9vZl9pbnRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk4MTU1ZGJlMjQ5MTcwYjEgaW5wdXQ9Y2U4M2E1ZDc1YjcwZDg1MF0qLwogewogICAgIFB5T2JqZWN0ICppdCwgKml0ZW0sICpieXRlYXJyYXlfb2JqOwogICAgIFB5X3NzaXplX3QgYnVmX3NpemUgPSAwLCBsZW4gPSAwOwpAQCAtMjMwNSwxOSArMjQzOCwxOSBAQAogICAgIGNoYXIgKmJ1ZjsKIAogICAgIC8qIGJ5dGVhcnJheV9zZXRzbGljZSBjb2RlIG9ubHkgYWNjZXB0cyBzb21ldGhpbmcgc3VwcG9ydGluZyBQRVAgMzExOC4gKi8KLSAgICBpZiAoUHlPYmplY3RfQ2hlY2tCdWZmZXIoYXJnKSkgewotICAgICAgICBpZiAoYnl0ZWFycmF5X3NldHNsaWNlKHNlbGYsIFB5X1NJWkUoc2VsZiksIFB5X1NJWkUoc2VsZiksIGFyZykgPT0gLTEpCisgICAgaWYgKFB5T2JqZWN0X0NoZWNrQnVmZmVyKGl0ZXJhYmxlX29mX2ludHMpKSB7CisgICAgICAgIGlmIChieXRlYXJyYXlfc2V0c2xpY2Uoc2VsZiwgUHlfU0laRShzZWxmKSwgUHlfU0laRShzZWxmKSwgaXRlcmFibGVfb2ZfaW50cykgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKLSAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoYXJnKTsKKyAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGVfb2ZfaW50cyk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogVHJ5IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudC4gMzIgaXMgYXJiaXRyYXJ5LiAqLwotICAgIGJ1Zl9zaXplID0gUHlPYmplY3RfTGVuZ3RoSGludChhcmcsIDMyKTsKKyAgICBidWZfc2l6ZSA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoaXRlcmFibGVfb2ZfaW50cywgMzIpOwogICAgIGlmIChidWZfc2l6ZSA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNDEsNyArMjQ3NCwxNyBAQAogICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAKICAgICAgICAgaWYgKGxlbiA+PSBidWZfc2l6ZSkgewotICAgICAgICAgICAgYnVmX3NpemUgPSBsZW4gKyAobGVuID4+IDEpICsgMTsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgYWRkaXRpb247CisgICAgICAgICAgICBpZiAobGVuID09IFBZX1NTSVpFX1RfTUFYKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZWFycmF5X29iaik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhZGRpdGlvbiA9IGxlbiA+PiAxOworICAgICAgICAgICAgaWYgKGFkZGl0aW9uID4gUFlfU1NJWkVfVF9NQVggLSBsZW4gLSAxKQorICAgICAgICAgICAgICAgIGJ1Zl9zaXplID0gUFlfU1NJWkVfVF9NQVg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnVmX3NpemUgPSBsZW4gKyBhZGRpdGlvbiArIDE7CiAgICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKWJ5dGVhcnJheV9vYmosIGJ1Zl9zaXplKSA8IDApIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlYXJyYXlfb2JqKTsKQEAgLTIzNjksMjkgKzI1MTIsMzYgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvcF9fZG9jX18sCi0iQi5wb3AoW2luZGV4XSkgLT4gaW50XG5cCi1cblwKLVJlbW92ZSBhbmQgcmV0dXJuIGEgc2luZ2xlIGl0ZW0gZnJvbSBCLiBJZiBubyBpbmRleFxuXAotYXJndW1lbnQgaXMgZ2l2ZW4sIHdpbGwgcG9wIHRoZSBsYXN0IHZhbHVlLiIpOworLypbY2xpbmljIGlucHV0XQorYnl0ZWFycmF5LnBvcAorCisgICAgc2VsZjogc2VsZih0eXBlPSJQeUJ5dGVBcnJheU9iamVjdCAqIikKKyAgICBpbmRleDogUHlfc3NpemVfdCA9IC0xCisgICAgICAgIFRoZSBpbmRleCBmcm9tIHdoZXJlIHRvIHJlbW92ZSB0aGUgaXRlbS4KKyAgICAgICAgLTEgKHRoZSBkZWZhdWx0IHZhbHVlKSBtZWFucyByZW1vdmUgdGhlIGxhc3QgaXRlbS4KKyAgICAvCisKK1JlbW92ZSBhbmQgcmV0dXJuIGEgc2luZ2xlIGl0ZW0gZnJvbSBCLgorCitJZiBubyBpbmRleCBhcmd1bWVudCBpcyBnaXZlbiwgd2lsbCBwb3AgdGhlIGxhc3QgaXRlbS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9wb3AoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3BvcF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWUwY2NkNDAxZjgwMjFkYTggaW5wdXQ9MDc5N2U2YzBjYTlkNWE4NV0qLwogewogICAgIGludCB2YWx1ZTsKLSAgICBQeV9zc2l6ZV90IHdoZXJlID0gLTEsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIFB5X3NzaXplX3QgbiA9IFB5X1NJWkUoc2VsZik7CiAgICAgY2hhciAqYnVmOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwb3AiLCAmd2hlcmUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChuID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAicG9wIGZyb20gZW1wdHkgYnl0ZWFycmF5Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAod2hlcmUgPCAwKQotICAgICAgICB3aGVyZSArPSBQeV9TSVpFKHNlbGYpOwotICAgIGlmICh3aGVyZSA8IDAgfHwgd2hlcmUgPj0gUHlfU0laRShzZWxmKSkgeworICAgIGlmIChpbmRleCA8IDApCisgICAgICAgIGluZGV4ICs9IFB5X1NJWkUoc2VsZik7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBQeV9TSVpFKHNlbGYpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAicG9wIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yMzk5LDQwICsyNTQ5LDQxIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwotICAgIHZhbHVlID0gYnVmW3doZXJlXTsKLSAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlLCBidWYgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CisgICAgdmFsdWUgPSBidWZbaW5kZXhdOworICAgIG1lbW1vdmUoYnVmICsgaW5kZXgsIGJ1ZiArIGluZGV4ICsgMSwgbiAtIGluZGV4KTsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gLSAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcil2YWx1ZSk7CiB9CiAKLVB5RG9jX1NUUlZBUihyZW1vdmVfX2RvY19fLAotIkIucmVtb3ZlKGludCkgLT4gTm9uZVxuXAotXG5cCi1SZW1vdmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSB2YWx1ZSBpbiBCLiIpOworLypbY2xpbmljIGlucHV0XQorYnl0ZWFycmF5LnJlbW92ZQorCisgICAgc2VsZjogc2VsZih0eXBlPSJQeUJ5dGVBcnJheU9iamVjdCAqIikKKyAgICB2YWx1ZTogYnl0ZXN2YWx1ZQorICAgICAgICBUaGUgdmFsdWUgdG8gcmVtb3ZlLgorICAgIC8KKworUmVtb3ZlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgdmFsdWUgaW4gdGhlIGJ5dGVhcnJheS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9yZW1vdmUoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitieXRlYXJyYXlfcmVtb3ZlX2ltcGwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIGludCB2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNjU5ZTM3ODY2NzA5YzEzIGlucHV0PTQ3NTYwYjExZmQ4NTZjMjRdKi8KIHsKLSAgICBpbnQgdmFsdWU7Ci0gICAgUHlfc3NpemVfdCB3aGVyZSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgUHlfc3NpemVfdCBuID0gUHlfU0laRShzZWxmKTsKICAgICBjaGFyICpidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgY2hhciAqd2hlcmUgPSBtZW1jaHIoYnVmLCB2YWx1ZSwgbik7CiAKLSAgICBpZiAoISBfZ2V0Ynl0ZXZhbHVlKGFyZywgJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBmb3IgKHdoZXJlID0gMDsgd2hlcmUgPCBuOyB3aGVyZSsrKSB7Ci0gICAgICAgIGlmIChidWZbd2hlcmVdID09IHZhbHVlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICh3aGVyZSA9PSBuKSB7CisgICAgaWYgKCF3aGVyZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInZhbHVlIG5vdCBmb3VuZCBpbiBieXRlYXJyYXkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlLCBidWYgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CisgICAgbWVtbW92ZSh3aGVyZSwgd2hlcmUgKyAxLCBidWYgKyBuIC0gd2hlcmUpOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiAtIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI0NjEsMTMyICsyNjEyLDE0NSBAQAogICAgIHJldHVybiBpICsgMTsKIH0KIAotUHlEb2NfU1RSVkFSKHN0cmlwX19kb2NfXywKLSJCLnN0cmlwKFtieXRlc10pIC0+IGJ5dGVhcnJheVxuXAotXG5cCi1TdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50XG5cCi1hbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBuZXcgYnl0ZWFycmF5LlxuXAotSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHN0cmlwIEFTQ0lJIHdoaXRlc3BhY2UuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkuc3RyaXAKKworICAgIGJ5dGVzOiBvYmplY3QgPSBOb25lCisgICAgLworCitTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LgorCitJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCBvciBOb25lLCBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X3N0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9zdHJpcF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYnl0ZXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzYwNDEyNjYxYTM0YWQ1YSBpbnB1dD1lZjdiYjU5YjA5YzIxZDYyXSovCiB7Ci0gICAgUHlfc3NpemVfdCBsZWZ0LCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwotICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwotICAgIFB5X2J1ZmZlciB2YXJnOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86c3RyaXAiLCAmYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGFyZyA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGFyZ3B0ciA9ICJcdFxuXHJcZlx2ICI7Ci0gICAgICAgIGFyZ3NpemUgPSA2OworICAgIFB5X3NzaXplX3QgbGVmdCwgcmlnaHQsIG15c2l6ZSwgYnl0ZXNsZW47CisgICAgY2hhciAqbXlwdHIsICpieXRlc3B0cjsKKyAgICBQeV9idWZmZXIgdmJ5dGVzOworCisgICAgaWYgKGJ5dGVzID09IFB5X05vbmUpIHsKKyAgICAgICAgYnl0ZXNwdHIgPSAiXHRcblxyXGZcdiAiOworICAgICAgICBieXRlc2xlbiA9IDY7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgJnZhcmcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihieXRlcywgJnZieXRlcywgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwotICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CisgICAgICAgIGJ5dGVzcHRyID0gKGNoYXIgKikgdmJ5dGVzLmJ1ZjsKKyAgICAgICAgYnl0ZXNsZW4gPSB2Ynl0ZXMubGVuOwogICAgIH0KICAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwotICAgIGxlZnQgPSBsc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CisgICAgbGVmdCA9IGxzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYnl0ZXNwdHIsIGJ5dGVzbGVuKTsKICAgICBpZiAobGVmdCA9PSBteXNpemUpCiAgICAgICAgIHJpZ2h0ID0gbGVmdDsKICAgICBlbHNlCi0gICAgICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwotICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7CisgICAgICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBieXRlc3B0ciwgYnl0ZXNsZW4pOworICAgIGlmIChieXRlcyAhPSBQeV9Ob25lKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2Ynl0ZXMpOwogICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CiB9CiAKLVB5RG9jX1NUUlZBUihsc3RyaXBfX2RvY19fLAotIkIubHN0cmlwKFtieXRlc10pIC0+IGJ5dGVhcnJheVxuXAotXG5cCi1TdHJpcCBsZWFkaW5nIGJ5dGVzIGNvbnRhaW5lZCBpbiB0aGUgYXJndW1lbnRcblwKLWFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIG5ldyBieXRlYXJyYXkuXG5cCi1JZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgc3RyaXAgbGVhZGluZyBBU0NJSSB3aGl0ZXNwYWNlLiIpOworLypbY2xpbmljIGlucHV0XQorYnl0ZWFycmF5LmxzdHJpcAorCisgICAgYnl0ZXM6IG9iamVjdCA9IE5vbmUKKyAgICAvCisKK1N0cmlwIGxlYWRpbmcgYnl0ZXMgY29udGFpbmVkIGluIHRoZSBhcmd1bWVudC4KKworSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQgb3IgTm9uZSwgc3RyaXAgbGVhZGluZyBBU0NJSSB3aGl0ZXNwYWNlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X2xzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfbHN0cmlwX2ltcGwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpieXRlcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMDA1YzlkMGFiOTA5ZTY2IGlucHV0PTgwODQzZjk3NWRkN2M0ODBdKi8KIHsKLSAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgY2hhciAqbXlwdHIsICphcmdwdHI7Ci0gICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7Ci0gICAgUHlfYnVmZmVyIHZhcmc7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzpsc3RyaXAiLCAmYXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGFyZyA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGFyZ3B0ciA9ICJcdFxuXHJcZlx2ICI7Ci0gICAgICAgIGFyZ3NpemUgPSA2OworICAgIFB5X3NzaXplX3QgbGVmdCwgcmlnaHQsIG15c2l6ZSwgYnl0ZXNsZW47CisgICAgY2hhciAqbXlwdHIsICpieXRlc3B0cjsKKyAgICBQeV9idWZmZXIgdmJ5dGVzOworCisgICAgaWYgKGJ5dGVzID09IFB5X05vbmUpIHsKKyAgICAgICAgYnl0ZXNwdHIgPSAiXHRcblxyXGZcdiAiOworICAgICAgICBieXRlc2xlbiA9IDY7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgJnZhcmcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihieXRlcywgJnZieXRlcywgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwotICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CisgICAgICAgIGJ5dGVzcHRyID0gKGNoYXIgKikgdmJ5dGVzLmJ1ZjsKKyAgICAgICAgYnl0ZXNsZW4gPSB2Ynl0ZXMubGVuOwogICAgIH0KICAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwotICAgIGxlZnQgPSBsc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CisgICAgbGVmdCA9IGxzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYnl0ZXNwdHIsIGJ5dGVzbGVuKTsKICAgICByaWdodCA9IG15c2l6ZTsKLSAgICBpZiAoYXJnICE9IFB5X05vbmUpCi0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOworICAgIGlmIChieXRlcyAhPSBQeV9Ob25lKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2Ynl0ZXMpOwogICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CiB9CiAKLVB5RG9jX1NUUlZBUihyc3RyaXBfX2RvY19fLAotIkIucnN0cmlwKFtieXRlc10pIC0+IGJ5dGVhcnJheVxuXAotXG5cCi1TdHJpcCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50XG5cCi1hbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBuZXcgYnl0ZWFycmF5LlxuXAotSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHN0cmlwIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkucnN0cmlwCisKKyAgICBieXRlczogb2JqZWN0ID0gTm9uZQorICAgIC8KKworU3RyaXAgdHJhaWxpbmcgYnl0ZXMgY29udGFpbmVkIGluIHRoZSBhcmd1bWVudC4KKworSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQgb3IgTm9uZSwgc3RyaXAgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9yc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZWFycmF5X3JzdHJpcF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYnl0ZXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDMwZTJmYmQyZjcyNzZiZCBpbnB1dD1lNzI4Yjk5NDk1NGNmZDkxXSovCiB7Ci0gICAgUHlfc3NpemVfdCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwotICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwotICAgIFB5X2J1ZmZlciB2YXJnOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cnN0cmlwIiwgJmFyZykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChhcmcgPT0gUHlfTm9uZSkgewotICAgICAgICBhcmdwdHIgPSAiXHRcblxyXGZcdiAiOwotICAgICAgICBhcmdzaXplID0gNjsKKyAgICBQeV9zc2l6ZV90IHJpZ2h0LCBteXNpemUsIGJ5dGVzbGVuOworICAgIGNoYXIgKm15cHRyLCAqYnl0ZXNwdHI7CisgICAgUHlfYnVmZmVyIHZieXRlczsKKworICAgIGlmIChieXRlcyA9PSBQeV9Ob25lKSB7CisgICAgICAgIGJ5dGVzcHRyID0gIlx0XG5cclxmXHYgIjsKKyAgICAgICAgYnl0ZXNsZW4gPSA2OwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsICZ2YXJnLCBQeUJVRl9TSU1QTEUpICE9IDApCisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYnl0ZXMsICZ2Ynl0ZXMsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKLSAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOworICAgICAgICBieXRlc3B0ciA9IChjaGFyICopIHZieXRlcy5idWY7CisgICAgICAgIGJ5dGVzbGVuID0gdmJ5dGVzLmxlbjsKICAgICB9CiAgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKLSAgICByaWdodCA9IHJzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKLSAgICBpZiAoYXJnICE9IFB5X05vbmUpCi0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOworICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBieXRlc3B0ciwgYnl0ZXNsZW4pOworICAgIGlmIChieXRlcyAhPSBQeV9Ob25lKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2Ynl0ZXMpOwogICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciwgcmlnaHQpOwogfQogCi1QeURvY19TVFJWQVIoZGVjb2RlX2RvYywKLSJCLmRlY29kZShlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3N0cmljdCcpIC0+IHN0clxuXAotXG5cCi1EZWNvZGUgQiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgZW5jb2RpbmcuIERlZmF1bHQgZW5jb2RpbmdcblwKLWlzICd1dGYtOCcuIGVycm9ycyBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50IGVycm9yXG5cCi1oYW5kbGluZyBzY2hlbWUuICBEZWZhdWx0IGlzICdzdHJpY3QnIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2VcblwKLWEgVW5pY29kZURlY29kZUVycm9yLiAgT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlJyBhbmQgJ3JlcGxhY2UnXG5cCi1hcyB3ZWxsIGFzIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgd2l0aCBjb2RlY3MucmVnaXN0ZXJfZXJyb3IgdGhhdCBpc1xuXAotYWJsZSB0byBoYW5kbGUgVW5pY29kZURlY29kZUVycm9ycy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVhcnJheS5kZWNvZGUKKworICAgIGVuY29kaW5nOiBzdHIoY19kZWZhdWx0PSJOVUxMIikgPSAndXRmLTgnCisgICAgICAgIFRoZSBlbmNvZGluZyB3aXRoIHdoaWNoIHRvIGRlY29kZSB0aGUgYnl0ZWFycmF5LgorICAgIGVycm9yczogc3RyKGNfZGVmYXVsdD0iTlVMTCIpID0gJ3N0cmljdCcKKyAgICAgICAgVGhlIGVycm9yIGhhbmRsaW5nIHNjaGVtZSB0byB1c2UgZm9yIHRoZSBoYW5kbGluZyBvZiBkZWNvZGluZyBlcnJvcnMuCisgICAgICAgIFRoZSBkZWZhdWx0IGlzICdzdHJpY3QnIG1lYW5pbmcgdGhhdCBkZWNvZGluZyBlcnJvcnMgcmFpc2UgYQorICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IuIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZScgYW5kICdyZXBsYWNlJworICAgICAgICBhcyB3ZWxsIGFzIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgd2l0aCBjb2RlY3MucmVnaXN0ZXJfZXJyb3IgdGhhdAorICAgICAgICBjYW4gaGFuZGxlIFVuaWNvZGVEZWNvZGVFcnJvcnMuCisKK0RlY29kZSB0aGUgYnl0ZWFycmF5IHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciBlbmNvZGluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9kZWNvZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorYnl0ZWFycmF5X2RlY29kZV9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjU3ZDQzZjRhMDBiNDJjNSBpbnB1dD1mMjhkOGY5MDMwMjAyNTdiXSovCiB7Ci0gICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxzczpkZWNvZGUiLCBrd2xpc3QsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKQogICAgICAgICBlbmNvZGluZyA9IFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2RpbmcoKTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoKFB5T2JqZWN0KilzZWxmLCBlbmNvZGluZywgZXJyb3JzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGFsbG9jX2RvYywKQEAgLTI2MDAsNDggKzI3NjQsNDcgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPm9iX2FsbG9jKTsKIH0KIAotUHlEb2NfU1RSVkFSKGpvaW5fZG9jLAotIkIuam9pbihpdGVyYWJsZV9vZl9ieXRlcykgLT4gYnl0ZWFycmF5XG5cCi1cblwKLUNvbmNhdGVuYXRlIGFueSBudW1iZXIgb2YgYnl0ZXMvYnl0ZWFycmF5IG9iamVjdHMsIHdpdGggQlxuXAotaW4gYmV0d2VlbiBlYWNoIHBhaXIsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIG5ldyBieXRlYXJyYXkuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkuam9pbgorCisgICAgaXRlcmFibGVfb2ZfYnl0ZXM6IG9iamVjdAorICAgIC8KKworQ29uY2F0ZW5hdGUgYW55IG51bWJlciBvZiBieXRlcy9ieXRlYXJyYXkgb2JqZWN0cy4KKworVGhlIGJ5dGVhcnJheSB3aG9zZSBtZXRob2QgaXMgY2FsbGVkIGlzIGluc2VydGVkIGluIGJldHdlZW4gZWFjaCBwYWlyLgorCitUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgbmV3IGJ5dGVhcnJheSBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQorYnl0ZWFycmF5X2pvaW4oUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdGVyYWJsZV9vZl9ieXRlcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hODUxNjM3MGJmNjhhZTA4IGlucHV0PWFiYTZiMWY5YjMwZmNiOGVdKi8KIHsKLSAgICByZXR1cm4gc3RyaW5nbGliX2J5dGVzX2pvaW4oc2VsZiwgaXRlcmFibGUpOworICAgIHJldHVybiBzdHJpbmdsaWJfYnl0ZXNfam9pbigoUHlPYmplY3QqKXNlbGYsIGl0ZXJhYmxlX29mX2J5dGVzKTsKIH0KIAotUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLAotIkIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKSAtPiBsaXN0IG9mIGxpbmVzXG5cCi1cblwKLVJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIEIsIGJyZWFraW5nIGF0IGxpbmUgYm91bmRhcmllcy5cblwKLUxpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyBrZWVwZW5kc1xuXAotaXMgZ2l2ZW4gYW5kIHRydWUuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkuc3BsaXRsaW5lcwogCi1zdGF0aWMgUHlPYmplY3QqCi1ieXRlYXJyYXlfc3BsaXRsaW5lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorICAgIGtlZXBlbmRzOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorCitSZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiB0aGUgYnl0ZWFycmF5LCBicmVha2luZyBhdCBsaW5lIGJvdW5kYXJpZXMuCisKK0xpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyBrZWVwZW5kcyBpcyBnaXZlbiBhbmQKK3RydWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfc3BsaXRsaW5lc19pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBpbnQga2VlcGVuZHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDIyM2M5NGI4OTVmNmFkOSBpbnB1dD04Y2NhZGU5NDFlNWVhMGJkXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJrZWVwZW5kcyIsIDB9OwotICAgIGludCBrZWVwZW5kcyA9IDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGk6c3BsaXRsaW5lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAma2VlcGVuZHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHJldHVybiBzdHJpbmdsaWJfc3BsaXRsaW5lcygKICAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLAogICAgICAgICBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSwga2VlcGVuZHMKICAgICAgICAgKTsKIH0KIAotUHlEb2NfU1RSVkFSKGZyb21oZXhfZG9jLAotImJ5dGVhcnJheS5mcm9taGV4KHN0cmluZykgLT4gYnl0ZWFycmF5IChzdGF0aWMgbWV0aG9kKVxuXAotXG5cCi1DcmVhdGUgYSBieXRlYXJyYXkgb2JqZWN0IGZyb20gYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgbnVtYmVycy5cblwKLVNwYWNlcyBiZXR3ZWVuIHR3byBudW1iZXJzIGFyZSBhY2NlcHRlZC5cblwKLUV4YW1wbGU6IGJ5dGVhcnJheS5mcm9taGV4KCdCOSAwMUVGJykgLT4gYnl0ZWFycmF5KGInXFx4YjlcXHgwMVxceGVmJykuIik7Ci0KIHN0YXRpYyBpbnQKIGhleF9kaWdpdF90b19pbnQoUHlfVUNTNCBjKQogewpAQCAtMjY1OCwyNCArMjgyMSwzNyBAQAogICAgIHJldHVybiAtMTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorQGNsYXNzbWV0aG9kCitieXRlYXJyYXkuZnJvbWhleAorCisgICAgY2xzOiBzZWxmKHR5cGU9IlB5T2JqZWN0KiIpCisgICAgc3RyaW5nOiB1bmljb2RlCisgICAgLworCitDcmVhdGUgYSBieXRlYXJyYXkgb2JqZWN0IGZyb20gYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgbnVtYmVycy4KKworU3BhY2VzIGJldHdlZW4gdHdvIG51bWJlcnMgYXJlIGFjY2VwdGVkLgorRXhhbXBsZTogYnl0ZWFycmF5LmZyb21oZXgoJ0I5IDAxRUYnKSAtPiBieXRlYXJyYXkoYidcXHhiOVxceDAxXFx4ZWYnKQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X2Zyb21oZXgoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfZnJvbWhleF9pbXBsKFB5T2JqZWN0KmNscywgUHlPYmplY3QgKnN0cmluZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kZjNkYTYwMTI5YjM3MDBjIGlucHV0PTkwN2JiZDJkMzRkOTM2N2FdKi8KIHsKLSAgICBQeU9iamVjdCAqbmV3Ynl0ZXMsICpoZXhvYmo7CisgICAgUHlPYmplY3QgKm5ld2J5dGVzOwogICAgIGNoYXIgKmJ1ZjsKICAgICBQeV9zc2l6ZV90IGhleGxlbiwgYnl0ZXNsZW4sIGksIGo7CiAgICAgaW50IHRvcCwgYm90OwogICAgIHZvaWQgKmRhdGE7CiAgICAgdW5zaWduZWQgaW50IGtpbmQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6ZnJvbWhleCIsICZoZXhvYmopKQorICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2soc3RyaW5nKSk7CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHJpbmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKGhleG9iaikpOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaGV4b2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2luZCA9IFB5VW5pY29kZV9LSU5EKGhleG9iaik7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKGhleG9iaik7Ci0gICAgaGV4bGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaGV4b2JqKTsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKKyAgICBoZXhsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpOwogCiAgICAgYnl0ZXNsZW4gPSBoZXhsZW4vMjsgLyogVGhpcyBvdmVyZXN0aW1hdGVzIGlmIHRoZXJlIGFyZSBzcGFjZXMgKi8KICAgICBuZXdieXRlcyA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVzbGVuKTsKQEAgLTI3MDcsNiArMjg4MywxOSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitQeURvY19TVFJWQVIoaGV4X19kb2NfXywKKyJCLmhleCgpIC0+IHN0cmluZ1xuXAorXG5cCitDcmVhdGUgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgbnVtYmVycyBmcm9tIGEgYnl0ZWFycmF5IG9iamVjdC5cblwKK0V4YW1wbGU6IGJ5dGVhcnJheShbMHhiOSwgMHgwMSwgMHhlZl0pLmhleCgpIC0+ICdiOTAxZWYnLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X2hleChQeUJ5dGVzT2JqZWN0ICpzZWxmKQoreworICAgIGNoYXIqIGFyZ2J1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICBQeV9zc2l6ZV90IGFyZ2xlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpOworICAgIHJldHVybiBfUHlfc3RyaGV4KGFyZ2J1ZiwgYXJnbGVuKTsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIF9jb21tb25fcmVkdWNlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBpbnQgcHJvdG8pCkBAIC0yNzQzLDM3ICsyOTMyLDUzIEBACiAgICAgfQogfQogCi1QeURvY19TVFJWQVIocmVkdWNlX2RvYywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlYXJyYXkuX19yZWR1Y2VfXyBhcyBieXRlYXJyYXlfcmVkdWNlCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IlB5Qnl0ZUFycmF5T2JqZWN0ICoiKQorCitSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X3JlZHVjZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKK2J5dGVhcnJheV9yZWR1Y2VfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MmJmMzA0MDg2NDY0Y2FiIGlucHV0PWZiYjA3ZGU0ZDEwMmEwM2FdKi8KIHsKICAgICByZXR1cm4gX2NvbW1vbl9yZWR1Y2Uoc2VsZiwgMik7CiB9CiAKLVB5RG9jX1NUUlZBUihyZWR1Y2VfZXhfZG9jLCAiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVhcnJheS5fX3JlZHVjZV9leF9fIGFzIGJ5dGVhcnJheV9yZWR1Y2VfZXgKKworICAgIHNlbGY6IHNlbGYodHlwZT0iUHlCeXRlQXJyYXlPYmplY3QgKiIpCisgICAgcHJvdG86IGludCA9IDAKKyAgICAvCisKK1JldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfcmVkdWNlX2V4KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVhcnJheV9yZWR1Y2VfZXhfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgaW50IHByb3RvKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUyZWFjMzMzNzcxOTc1MjAgaW5wdXQ9MGUwOTFhNDJjYTZkYmQ5MV0qLwogewotICAgIGludCBwcm90byA9IDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOl9fcmVkdWNlX2V4X18iLCAmcHJvdG8pKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHJldHVybiBfY29tbW9uX3JlZHVjZShzZWxmLCBwcm90byk7CiB9CiAKLVB5RG9jX1NUUlZBUihzaXplb2ZfZG9jLAotIkIuX19zaXplb2ZfXygpIC0+IGludFxuXAotIFxuXAotUmV0dXJucyB0aGUgc2l6ZSBvZiBCIGluIG1lbW9yeSwgaW4gYnl0ZXMiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVhcnJheS5fX3NpemVvZl9fIGFzIGJ5dGVhcnJheV9zaXplb2YKKworICAgIHNlbGY6IHNlbGYodHlwZT0iUHlCeXRlQXJyYXlPYmplY3QgKiIpCisKK1JldHVybnMgdGhlIHNpemUgb2YgdGhlIGJ5dGVhcnJheSBvYmplY3QgaW4gbWVtb3J5LCBpbiBieXRlcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9zaXplb2YoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCitieXRlYXJyYXlfc2l6ZW9mX2ltcGwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzM4YWJkZDE3OTUxYzQyNyBpbnB1dD02YjIzZDMwNTM2MmI0NjJiXSovCiB7CiAgICAgUHlfc3NpemVfdCByZXM7CiAKLSAgICByZXMgPSBzaXplb2YoUHlCeXRlQXJyYXlPYmplY3QpICsgc2VsZi0+b2JfYWxsb2MgKiBzaXplb2YoY2hhcik7CisgICAgcmVzID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRShzZWxmKSkgKyBzZWxmLT5vYl9hbGxvYyAqIHNpemVvZihjaGFyKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7CiB9CiAKQEAgLTI4MDQsMjYgKzMwMDksMjYgQEAKIHN0YXRpYyBQeU1ldGhvZERlZgogYnl0ZWFycmF5X21ldGhvZHNbXSA9IHsKICAgICB7Il9fYWxsb2NfXyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfYWxsb2MsIE1FVEhfTk9BUkdTLCBhbGxvY19kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmVkdWNlLCBNRVRIX05PQVJHUywgcmVkdWNlX2RvY30sCi0gICAgeyJfX3JlZHVjZV9leF9fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yZWR1Y2VfZXgsIE1FVEhfVkFSQVJHUywgcmVkdWNlX2V4X2RvY30sCi0gICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9zaXplb2YsIE1FVEhfTk9BUkdTLCBzaXplb2ZfZG9jfSwKLSAgICB7ImFwcGVuZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfYXBwZW5kLCBNRVRIX08sIGFwcGVuZF9fZG9jX199LAorICAgIEJZVEVBUlJBWV9SRURVQ0VfTUVUSE9EREVGCisgICAgQllURUFSUkFZX1JFRFVDRV9FWF9NRVRIT0RERUYKKyAgICBCWVRFQVJSQVlfU0laRU9GX01FVEhPRERFRgorICAgIEJZVEVBUlJBWV9BUFBFTkRfTUVUSE9EREVGCiAgICAgeyJjYXBpdGFsaXplIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9jYXBpdGFsaXplLCBNRVRIX05PQVJHUywKICAgICAgX1B5X2NhcGl0YWxpemVfX2RvY19ffSwKICAgICB7ImNlbnRlciIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfY2VudGVyLCBNRVRIX1ZBUkFSR1MsIGNlbnRlcl9fZG9jX199LAotICAgIHsiY2xlYXIiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2NsZWFyLCBNRVRIX05PQVJHUywgY2xlYXJfX2RvY19ffSwKLSAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2NvcHksIE1FVEhfTk9BUkdTLCBjb3B5X19kb2NfX30sCisgICAgQllURUFSUkFZX0NMRUFSX01FVEhPRERFRgorICAgIEJZVEVBUlJBWV9DT1BZX01FVEhPRERFRgogICAgIHsiY291bnQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCi0gICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX2RvY30sCisgICAgQllURUFSUkFZX0RFQ09ERV9NRVRIT0RERUYKICAgICB7ImVuZHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9lbmRzd2l0aCwgTUVUSF9WQVJBUkdTLCBlbmRzd2l0aF9fZG9jX199LAogICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgZXhwYW5kdGFic19fZG9jX199LAotICAgIHsiZXh0ZW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9leHRlbmQsIE1FVEhfTywgZXh0ZW5kX19kb2NfX30sCisgICAgQllURUFSUkFZX0VYVEVORF9NRVRIT0RERUYKICAgICB7ImZpbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LAotICAgIHsiZnJvbWhleCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZnJvbWhleCwgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsCi0gICAgIGZyb21oZXhfZG9jfSwKKyAgICBCWVRFQVJSQVlfRlJPTUhFWF9NRVRIT0RERUYKKyAgICB7ImhleCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfaGV4LCBNRVRIX05PQVJHUywgaGV4X19kb2NfX30sCiAgICAgeyJpbmRleCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfaW5kZXgsIE1FVEhfVkFSQVJHUywgaW5kZXhfX2RvY19ffSwKLSAgICB7Imluc2VydCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfaW5zZXJ0LCBNRVRIX1ZBUkFSR1MsIGluc2VydF9fZG9jX199LAorICAgIEJZVEVBUlJBWV9JTlNFUlRfTUVUSE9EREVGCiAgICAgeyJpc2FsbnVtIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9pc2FsbnVtLCBNRVRIX05PQVJHUywKICAgICAgX1B5X2lzYWxudW1fX2RvY19ffSwKICAgICB7ImlzYWxwaGEiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2lzYWxwaGEsIE1FVEhfTk9BUkdTLApAQCAtMjgzOCwzOSArMzA0Myw1MSBAQAogICAgICBfUHlfaXN0aXRsZV9fZG9jX199LAogICAgIHsiaXN1cHBlciIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfaXN1cHBlciwgTUVUSF9OT0FSR1MsCiAgICAgIF9QeV9pc3VwcGVyX19kb2NfX30sCi0gICAgeyJqb2luIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9qb2luLCBNRVRIX08sIGpvaW5fZG9jfSwKKyAgICBCWVRFQVJSQVlfSk9JTl9NRVRIT0RERUYKICAgICB7ImxqdXN0IiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9sanVzdCwgTUVUSF9WQVJBUkdTLCBsanVzdF9fZG9jX199LAogICAgIHsibG93ZXIiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2xvd2VyLCBNRVRIX05PQVJHUywgX1B5X2xvd2VyX19kb2NfX30sCi0gICAgeyJsc3RyaXAiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2xzdHJpcCwgTUVUSF9WQVJBUkdTLCBsc3RyaXBfX2RvY19ffSwKLSAgICB7Im1ha2V0cmFucyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfbWFrZXRyYW5zLCBNRVRIX1ZBUkFSR1N8TUVUSF9TVEFUSUMsCi0gICAgIF9QeV9tYWtldHJhbnNfX2RvY19ffSwKLSAgICB7InBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcGFydGl0aW9uLCBNRVRIX08sIHBhcnRpdGlvbl9fZG9jX199LAotICAgIHsicG9wIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9wb3AsIE1FVEhfVkFSQVJHUywgcG9wX19kb2NfX30sCi0gICAgeyJyZW1vdmUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JlbW92ZSwgTUVUSF9PLCByZW1vdmVfX2RvY19ffSwKLSAgICB7InJlcGxhY2UiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JlcGxhY2UsIE1FVEhfVkFSQVJHUywgcmVwbGFjZV9fZG9jX199LAotICAgIHsicmV2ZXJzZSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmV2ZXJzZSwgTUVUSF9OT0FSR1MsIHJldmVyc2VfX2RvY19ffSwKKyAgICBCWVRFQVJSQVlfTFNUUklQX01FVEhPRERFRgorICAgIEJZVEVBUlJBWV9NQUtFVFJBTlNfTUVUSE9EREVGCisgICAgQllURUFSUkFZX1BBUlRJVElPTl9NRVRIT0RERUYKKyAgICBCWVRFQVJSQVlfUE9QX01FVEhPRERFRgorICAgIEJZVEVBUlJBWV9SRU1PVkVfTUVUSE9EREVGCisgICAgQllURUFSUkFZX1JFUExBQ0VfTUVUSE9EREVGCisgICAgQllURUFSUkFZX1JFVkVSU0VfTUVUSE9EREVGCiAgICAgeyJyZmluZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmZpbmQsIE1FVEhfVkFSQVJHUywgcmZpbmRfX2RvY19ffSwKICAgICB7InJpbmRleCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmluZGV4LCBNRVRIX1ZBUkFSR1MsIHJpbmRleF9fZG9jX199LAogICAgIHsicmp1c3QiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3JqdXN0LCBNRVRIX1ZBUkFSR1MsIHJqdXN0X19kb2NfX30sCi0gICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9ycGFydGl0aW9uLCBNRVRIX08sIHJwYXJ0aXRpb25fX2RvY19ffSwKLSAgICB7InJzcGxpdCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcnNwbGl0LCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCByc3BsaXRfX2RvY19ffSwKLSAgICB7InJzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcnN0cmlwLCBNRVRIX1ZBUkFSR1MsIHJzdHJpcF9fZG9jX199LAotICAgIHsic3BsaXQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3NwbGl0LCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBzcGxpdF9fZG9jX199LAotICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfc3BsaXRsaW5lcywKLSAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgc3BsaXRsaW5lc19fZG9jX199LAorICAgIEJZVEVBUlJBWV9SUEFSVElUSU9OX01FVEhPRERFRgorICAgIEJZVEVBUlJBWV9SU1BMSVRfTUVUSE9EREVGCisgICAgQllURUFSUkFZX1JTVFJJUF9NRVRIT0RERUYKKyAgICBCWVRFQVJSQVlfU1BMSVRfTUVUSE9EREVGCisgICAgQllURUFSUkFZX1NQTElUTElORVNfTUVUSE9EREVGCiAgICAgeyJzdGFydHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9zdGFydHN3aXRoLCBNRVRIX1ZBUkFSR1MgLAogICAgICBzdGFydHN3aXRoX19kb2NfX30sCi0gICAgeyJzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfc3RyaXAsIE1FVEhfVkFSQVJHUywgc3RyaXBfX2RvY19ffSwKKyAgICBCWVRFQVJSQVlfU1RSSVBfTUVUSE9EREVGCiAgICAgeyJzd2FwY2FzZSIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfc3dhcGNhc2UsIE1FVEhfTk9BUkdTLAogICAgICBfUHlfc3dhcGNhc2VfX2RvY19ffSwKICAgICB7InRpdGxlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl90aXRsZSwgTUVUSF9OT0FSR1MsIF9QeV90aXRsZV9fZG9jX199LAotICAgIHsidHJhbnNsYXRlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV90cmFuc2xhdGUsIE1FVEhfVkFSQVJHUywKLSAgICAgdHJhbnNsYXRlX19kb2NfX30sCisgICAgQllURUFSUkFZX1RSQU5TTEFURV9NRVRIT0RERUYKICAgICB7InVwcGVyIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl91cHBlciwgTUVUSF9OT0FSR1MsIF9QeV91cHBlcl9fZG9jX199LAogICAgIHsiemZpbGwiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3pmaWxsLCBNRVRIX1ZBUkFSR1MsIHpmaWxsX19kb2NfX30sCiAgICAge05VTEx9CiB9OwogCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X21vZChQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCit7CisgICAgaWYgKCFQeUJ5dGVBcnJheV9DaGVjayh2KSkKKyAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworICAgIHJldHVybiBieXRlYXJyYXlfZm9ybWF0KChQeUJ5dGVBcnJheU9iamVjdCAqKXYsIHcpOworfQorCitzdGF0aWMgUHlOdW1iZXJNZXRob2RzIGJ5dGVhcnJheV9hc19udW1iZXIgPSB7CisgICAgMCwgICAgICAgICAgICAgIC8qbmJfYWRkKi8KKyAgICAwLCAgICAgICAgICAgICAgLypuYl9zdWJ0cmFjdCovCisgICAgMCwgICAgICAgICAgICAgIC8qbmJfbXVsdGlwbHkqLworICAgIGJ5dGVhcnJheV9tb2QsICAvKm5iX3JlbWFpbmRlciovCit9OworCiBQeURvY19TVFJWQVIoYnl0ZWFycmF5X2RvYywKICJieXRlYXJyYXkoaXRlcmFibGVfb2ZfaW50cykgLT4gYnl0ZWFycmF5XG5cCiBieXRlYXJyYXkoc3RyaW5nLCBlbmNvZGluZ1ssIGVycm9yc10pIC0+IGJ5dGVhcnJheVxuXApAQCAtMjg3OCw3ICszMDk1LDcgQEAKIGJ5dGVhcnJheShpbnQpIC0+IGJ5dGVzIGFycmF5IG9mIHNpemUgZ2l2ZW4gYnkgdGhlIHBhcmFtZXRlciBpbml0aWFsaXplZCB3aXRoIG51bGwgYnl0ZXNcblwKIGJ5dGVhcnJheSgpIC0+IGVtcHR5IGJ5dGVzIGFycmF5XG5cCiBcblwKLUNvbnN0cnVjdCBhbiBtdXRhYmxlIGJ5dGVhcnJheSBvYmplY3QgZnJvbTpcblwKK0NvbnN0cnVjdCBhIG11dGFibGUgYnl0ZWFycmF5IG9iamVjdCBmcm9tOlxuXAogICAtIGFuIGl0ZXJhYmxlIHlpZWxkaW5nIGludGVnZXJzIGluIHJhbmdlKDI1NilcblwKICAgLSBhIHRleHQgc3RyaW5nIGVuY29kZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZ1xuXAogICAtIGEgYnl0ZXMgb3IgYSBidWZmZXIgb2JqZWN0XG5cCkBAIC0yODk5LDcgKzMxMTYsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwogICAgIChyZXByZnVuYylieXRlYXJyYXlfcmVwciwgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAmYnl0ZWFycmF5X2FzX251bWJlciwgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAmYnl0ZWFycmF5X2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwogICAgICZieXRlYXJyYXlfYXNfbWFwcGluZywgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCkBAIC0yOTczLDggKzMxOTAsOCBAQAogICAgICAgICByZXR1cm4gaXRlbTsKICAgICB9CiAKLSAgICBQeV9ERUNSRUYoc2VxKTsKICAgICBpdC0+aXRfc2VxID0gTlVMTDsKKyAgICBQeV9ERUNSRUYoc2VxKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjk4Miw4ICszMTk5LDEyIEBACiBieXRlYXJyYXlpdGVyX2xlbmd0aF9oaW50KGJ5dGVzaXRlcm9iamVjdCAqaXQpCiB7CiAgICAgUHlfc3NpemVfdCBsZW4gPSAwOwotICAgIGlmIChpdC0+aXRfc2VxKQorICAgIGlmIChpdC0+aXRfc2VxKSB7CiAgICAgICAgIGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKGl0LT5pdF9zZXEpIC0gaXQtPml0X2luZGV4OworICAgICAgICBpZiAobGVuIDwgMCkgeworICAgICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGxlbik7CiB9CiAKQEAgLTMwMjYsNyArMzI0Nyw3IEBACiAgICAgeyJfX2xlbmd0aF9oaW50X18iLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5aXRlcl9sZW5ndGhfaGludCwgTUVUSF9OT0FSR1MsCiAgICAgIGxlbmd0aF9oaW50X2RvY30sCiAgICAgIHsiX19yZWR1Y2VfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheWl0ZXJfcmVkdWNlLCBNRVRIX05PQVJHUywKLSAgICAgcmVkdWNlX2RvY30sCisgICAgIGJ5dGVhcnJheV9yZWR1Y2VfX2RvY19ffSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbilieXRlYXJyYXlpdGVyX3NldHN0YXRlLCBNRVRIX08sCiAgICAgIHNldHN0YXRlX2RvY30sCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVzX21ldGhvZHMuYyBiL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCmluZGV4IDlmZjdhY2UuLmEyOTk5MTUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCisrKyBiL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCkBAIC0zNjQsMzkgKzM2NCwyNiBAQAogVGhlIGJ5dGVzIG9iamVjdHMgZnJtIGFuZCB0byBtdXN0IGJlIG9mIHRoZSBzYW1lIGxlbmd0aC4iKTsKIAogUHlPYmplY3QgKgotX1B5X2J5dGVzX21ha2V0cmFucyhQeU9iamVjdCAqYXJncykKK19QeV9ieXRlc19tYWtldHJhbnMoUHlfYnVmZmVyICpmcm0sIFB5X2J1ZmZlciAqdG8pCiB7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIGJmcm0gPSB7TlVMTCwgTlVMTH07Ci0gICAgUHlfYnVmZmVyIGJ0byA9IHtOVUxMLCBOVUxMfTsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgY2hhciAqcDsKIAotICAgIGJmcm0ubGVuID0gLTE7Ci0gICAgYnRvLmxlbiA9IC0xOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqOm1ha2V0cmFucyIsICZiZnJtLCAmYnRvKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGJmcm0ubGVuICE9IGJ0by5sZW4pIHsKKyAgICBpZiAoZnJtLT5sZW4gIT0gdG8tPmxlbikgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJtYWtldHJhbnMgYXJndW1lbnRzIG11c3QgaGF2ZSBzYW1lIGxlbmd0aCIpOwotICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDI1Nik7Ci0gICAgaWYgKCFyZXMpIHsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KKyAgICBpZiAoIXJlcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcyk7CiAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICBwW2ldID0gKGNoYXIpIGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGJmcm0ubGVuOyBpKyspIHsKLSAgICAgICAgcFsoKHVuc2lnbmVkIGNoYXIgKiliZnJtLmJ1ZilbaV1dID0gKChjaGFyICopYnRvLmJ1ZilbaV07CisgICAgZm9yIChpID0gMDsgaSA8IGZybS0+bGVuOyBpKyspIHsKKyAgICAgICAgcFsoKHVuc2lnbmVkIGNoYXIgKilmcm0tPmJ1ZilbaV1dID0gKChjaGFyICopdG8tPmJ1ZilbaV07CiAgICAgfQogCi1kb25lOgotICAgIGlmIChiZnJtLm9iaiAhPSBOVUxMKQotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZiZnJtKTsKLSAgICBpZiAoYmZybS5vYmogIT0gTlVMTCkKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnRvKTsKICAgICByZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlc29iamVjdC5jIGIvT2JqZWN0cy9ieXRlc29iamVjdC5jCmluZGV4IDI3ZjQwNjkuLjU5MzQzMzYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZXNvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVzb2JqZWN0LmMKQEAgLTUsOCArNSwxNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCiAjaW5jbHVkZSAiYnl0ZXNfbWV0aG9kcy5oIgorI2luY2x1ZGUgInB5c3RyaGV4LmgiCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NsYXNzIGJ5dGVzICJQeUJ5dGVzT2JqZWN0KiIgIiZQeUJ5dGVzX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0xYTFkOTEwMmFmYzFiMDBjXSovCisKKyNpbmNsdWRlICJjbGluaWMvYnl0ZXNvYmplY3QuYy5oIgorCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiBQeV9zc2l6ZV90IG51bGxfc3RyaW5ncywgb25lX3N0cmluZ3M7CiAjZW5kaWYKQEAgLTI2LDcgKzM0LDcgQEAKICAgIEZvciBQeUJ5dGVzX0Zyb21TdHJpbmcoKSwgdGhlIHBhcmFtZXRlciBgc3RyJyBwb2ludHMgdG8gYSBudWxsLXRlcm1pbmF0ZWQKICAgIHN0cmluZyBjb250YWluaW5nIGV4YWN0bHkgYHNpemUnIGJ5dGVzLgogCi0gICBGb3IgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgpLCB0aGUgcGFyYW1ldGVyIHRoZSBwYXJhbWV0ZXIgYHN0cicgaXMKKyAgIEZvciBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCksIHRoZSBwYXJhbWV0ZXIgYHN0cicgaXMKICAgIGVpdGhlciBOVUxMIG9yIGVsc2UgcG9pbnRzIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgYXQgbGVhc3QgYHNpemUnIGJ5dGVzLgogICAgRm9yIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKSwgdGhlIHN0cmluZyBpbiB0aGUgYHN0cicgcGFyYW1ldGVyIGRvZXMKICAgIG5vdCBoYXZlIHRvIGJlIG51bGwtdGVybWluYXRlZC4gIChUaGVyZWZvcmUgaXQgaXMgc2FmZSB0byBjb25zdHJ1Y3QgYQpAQCAtNDQsNiArNTIsNDUgQEAKICAgIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKSkgb3IgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGluIHRoZSBgc3RyJwogICAgcGFyYW1ldGVyIChmb3IgUHlCeXRlc19Gcm9tU3RyaW5nKCkpLgogKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfUHlCeXRlc19Gcm9tU2l6ZShQeV9zc2l6ZV90IHNpemUsIGludCB1c2VfY2FsbG9jKQoreworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIGFzc2VydChzaXplID49IDApOworCisgICAgaWYgKHNpemUgPT0gMCAmJiAob3AgPSBudWxsc3RyaW5nKSAhPSBOVUxMKSB7CisjaWZkZWYgQ09VTlRfQUxMT0NTCisgICAgICAgIG51bGxfc3RyaW5ncysrOworI2VuZGlmCisgICAgICAgIFB5X0lOQ1JFRihvcCk7CisgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilvcDsKKyAgICB9CisKKyAgICBpZiAoKHNpemVfdClzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAtIFB5Qnl0ZXNPYmplY3RfU0laRSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJieXRlIHN0cmluZyBpcyB0b28gbGFyZ2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogSW5saW5lIFB5T2JqZWN0X05ld1ZhciAqLworICAgIGlmICh1c2VfY2FsbG9jKQorICAgICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfQ2FsbG9jKDEsIFB5Qnl0ZXNPYmplY3RfU0laRSArIHNpemUpOworICAgIGVsc2UKKyAgICAgICAgb3AgPSAoUHlCeXRlc09iamVjdCAqKVB5T2JqZWN0X01hbGxvYyhQeUJ5dGVzT2JqZWN0X1NJWkUgKyBzaXplKTsKKyAgICBpZiAob3AgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOworICAgIG9wLT5vYl9zaGFzaCA9IC0xOworICAgIGlmICghdXNlX2NhbGxvYykKKyAgICAgICAgb3AtPm9iX3N2YWxbc2l6ZV0gPSAnXDAnOworICAgIC8qIGVtcHR5IGJ5dGUgc3RyaW5nIHNpbmdsZXRvbiAqLworICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgbnVsbHN0cmluZyA9IG9wOworICAgICAgICBQeV9JTkNSRUYob3ApOworICAgIH0KKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9wOworfQorCiBQeU9iamVjdCAqCiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBzaXplKQogewpAQCAtNTMsMTMgKzEwMCw2IEBACiAgICAgICAgICAgICAiTmVnYXRpdmUgc2l6ZSBwYXNzZWQgdG8gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKHNpemUgPT0gMCAmJiAob3AgPSBudWxsc3RyaW5nKSAhPSBOVUxMKSB7Ci0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgICAgIG51bGxfc3RyaW5ncysrOwotI2VuZGlmCi0gICAgICAgIFB5X0lOQ1JFRihvcCk7Ci0gICAgICAgIHJldHVybiAoUHlPYmplY3QgKilvcDsKLSAgICB9CiAgICAgaWYgKHNpemUgPT0gMSAmJiBzdHIgIT0gTlVMTCAmJgogICAgICAgICAob3AgPSBjaGFyYWN0ZXJzWypzdHIgJiBVQ0hBUl9NQVhdKSAhPSBOVUxMKQogICAgIHsKQEAgLTcwLDI2ICsxMTAsMTUgQEAKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKW9wOwogICAgIH0KIAotICAgIGlmIChzaXplID4gUFlfU1NJWkVfVF9NQVggLSBQeUJ5dGVzT2JqZWN0X1NJWkUpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZSBzdHJpbmcgaXMgdG9vIGxhcmdlIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIElubGluZSBQeU9iamVjdF9OZXdWYXIgKi8KLSAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIHNpemUpOworICAgIG9wID0gKFB5Qnl0ZXNPYmplY3QgKilfUHlCeXRlc19Gcm9tU2l6ZShzaXplLCAwKTsKICAgICBpZiAob3AgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgKHZvaWQpUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOwotICAgIG9wLT5vYl9zaGFzaCA9IC0xOwotICAgIGlmIChzdHIgIT0gTlVMTCkKLSAgICAgICAgUHlfTUVNQ1BZKG9wLT5vYl9zdmFsLCBzdHIsIHNpemUpOwotICAgIG9wLT5vYl9zdmFsW3NpemVdID0gJ1wwJzsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9wOworCisgICAgUHlfTUVNQ1BZKG9wLT5vYl9zdmFsLCBzdHIsIHNpemUpOwogICAgIC8qIHNoYXJlIHNob3J0IHN0cmluZ3MgKi8KLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIG51bGxzdHJpbmcgPSBvcDsKLSAgICAgICAgUHlfSU5DUkVGKG9wKTsKLSAgICB9IGVsc2UgaWYgKHNpemUgPT0gMSAmJiBzdHIgIT0gTlVMTCkgeworICAgIGlmIChzaXplID09IDEpIHsKICAgICAgICAgY2hhcmFjdGVyc1sqc3RyICYgVUNIQVJfTUFYXSA9IG9wOwogICAgICAgICBQeV9JTkNSRUYob3ApOwogICAgIH0KQEAgLTM0Nyw2ICszNzYsNTgwIEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAorLyogSGVscGVycyBmb3IgZm9ybWF0c3RyaW5nICovCisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorZ2V0bmV4dGFyZyhQeU9iamVjdCAqYXJncywgUHlfc3NpemVfdCBhcmdsZW4sIFB5X3NzaXplX3QgKnBfYXJnaWR4KQoreworICAgIFB5X3NzaXplX3QgYXJnaWR4ID0gKnBfYXJnaWR4OworICAgIGlmIChhcmdpZHggPCBhcmdsZW4pIHsKKyAgICAgICAgKCpwX2FyZ2lkeCkrKzsKKyAgICAgICAgaWYgKGFyZ2xlbiA8IDApCisgICAgICAgICAgICByZXR1cm4gYXJnczsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFB5VHVwbGVfR2V0SXRlbShhcmdzLCBhcmdpZHgpOworICAgIH0KKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGZvcm1hdCBzdHJpbmciKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogRm9ybWF0IGNvZGVzCisgKiBGX0xKVVNUICAgICAgJy0nCisgKiBGX1NJR04gICAgICAgJysnCisgKiBGX0JMQU5LICAgICAgJyAnCisgKiBGX0FMVCAgICAgICAgJyMnCisgKiBGX1pFUk8gICAgICAgJzAnCisgKi8KKyNkZWZpbmUgRl9MSlVTVCAoMTw8MCkKKyNkZWZpbmUgRl9TSUdOICAoMTw8MSkKKyNkZWZpbmUgRl9CTEFOSyAoMTw8MikKKyNkZWZpbmUgRl9BTFQgICAoMTw8MykKKyNkZWZpbmUgRl9aRVJPICAoMTw8NCkKKworLyogUmV0dXJucyBhIG5ldyByZWZlcmVuY2UgdG8gYSBQeUJ5dGVzIG9iamVjdCwgb3IgTlVMTCBvbiBmYWlsdXJlLiAqLworCitzdGF0aWMgUHlPYmplY3QgKgorZm9ybWF0ZmxvYXQoUHlPYmplY3QgKnYsIGludCBmbGFncywgaW50IHByZWMsIGludCB0eXBlKQoreworICAgIGNoYXIgKnA7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBkb3VibGUgeDsKKworICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHYpOworICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiZmxvYXQgYXJndW1lbnQgcmVxdWlyZWQsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChwcmVjIDwgMCkKKyAgICAgICAgcHJlYyA9IDY7CisKKyAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIHR5cGUsIHByZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBGX0FMVCkgPyBQeV9EVFNGX0FMVCA6IDAsIE5VTEwpOworCisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShwLCBzdHJsZW4ocCkpOworICAgIFB5TWVtX0ZyZWUocCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2Zvcm1hdGxvbmcoUHlPYmplY3QgKnYsIGludCBmbGFncywgaW50IHByZWMsIGludCB0eXBlKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQsICppb2JqOworICAgIGlmICh0eXBlID09ICdpJykKKyAgICAgICAgdHlwZSA9ICdkJzsKKyAgICBpZiAoUHlMb25nX0NoZWNrKHYpKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Gb3JtYXRMb25nKHYsIGZsYWdzICYgRl9BTFQsIHByZWMsIHR5cGUpOworICAgIGlmIChQeU51bWJlcl9DaGVjayh2KSkgeworICAgICAgICAvKiBtYWtlIHN1cmUgbnVtYmVyIGlzIGEgdHlwZSBvZiBpbnRlZ2VyIGZvciBvLCB4LCBhbmQgWCAqLworICAgICAgICBpZiAodHlwZSA9PSAnbycgfHwgdHlwZSA9PSAneCcgfHwgdHlwZSA9PSAnWCcpCisgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfSW5kZXgodik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9Mb25nKHYpOworICAgICAgICBpZiAoaW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghUHlMb25nX0NoZWNrKGlvYmopKQorICAgICAgICAgICAgUHlfQ0xFQVIoaW9iaik7CisgICAgICAgIGlmIChpb2JqICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9QeVVuaWNvZGVfRm9ybWF0TG9uZyhpb2JqLCBmbGFncyAmIEZfQUxULCBwcmVjLCB0eXBlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgIiUlJWMgZm9ybWF0OiAlcyBpcyByZXF1aXJlZCwgbm90ICUuMjAwcyIsIHR5cGUsCisgICAgICAgICh0eXBlID09ICdvJyB8fCB0eXBlID09ICd4JyB8fCB0eXBlID09ICdYJykgPyAiYW4gaW50ZWdlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJhIG51bWJlciIsCisgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitieXRlX2NvbnZlcnRlcihQeU9iamVjdCAqYXJnLCBjaGFyICpwKQoreworICAgIGlmIChQeUJ5dGVzX0NoZWNrKGFyZykgJiYgUHlCeXRlc19TaXplKGFyZykgPT0gMSkgeworICAgICAgICAqcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGFyZylbMF07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9DaGVjayhhcmcpICYmIFB5Qnl0ZUFycmF5X1NpemUoYXJnKSA9PSAxKSB7CisgICAgICAgICpwID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGFyZylbMF07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmlvYmo7CisgICAgICAgIGxvbmcgaXZhbDsKKyAgICAgICAgaW50IG92ZXJmbG93OworICAgICAgICAvKiBtYWtlIHN1cmUgbnVtYmVyIGlzIGEgdHlwZSBvZiBpbnRlZ2VyICovCisgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soYXJnKSkgeworICAgICAgICAgICAgaXZhbCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhhcmcsICZvdmVyZmxvdyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfSW5kZXgoYXJnKTsKKyAgICAgICAgICAgIGlmIChpb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXZhbCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpb2JqLCAmb3ZlcmZsb3cpOworICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOworICAgICAgICB9CisgICAgICAgIGlmICghb3ZlcmZsb3cgJiYgaXZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICBpZiAob3ZlcmZsb3cgfHwgISgwIDw9IGl2YWwgJiYgaXZhbCA8PSAyNTUpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWMgYXJnIG5vdCBpbiByYW5nZSgyNTYpIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAqcCA9IChjaGFyKWl2YWw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgb25FcnJvcjoKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAiJWMgcmVxdWlyZXMgYW4gaW50ZWdlciBpbiByYW5nZSgyNTYpIG9yIGEgc2luZ2xlIGJ5dGUiKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2Zvcm1hdF9vYmooUHlPYmplY3QgKnYsIGNvbnN0IGNoYXIgKipwYnVmLCBQeV9zc2l6ZV90ICpwbGVuKQoreworICAgIFB5T2JqZWN0ICpmdW5jLCAqcmVzdWx0OworICAgIF9QeV9JREVOVElGSUVSKF9fYnl0ZXNfXyk7CisgICAgLyogaXMgaXQgYSBieXRlcyBvYmplY3Q/ICovCisgICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodikpIHsKKyAgICAgICAgKnBidWYgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgKnBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOworICAgICAgICBQeV9JTkNSRUYodik7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKyAgICBpZiAoUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKKyAgICAgICAgKnBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7CisgICAgICAgICpwbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7CisgICAgICAgIFB5X0lOQ1JFRih2KTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorICAgIC8qIGRvZXMgaXQgc3VwcG9ydCBfX2J5dGVzX18/ICovCisgICAgZnVuYyA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKHYsICZQeUlkX19fYnl0ZXNfXyk7CisgICAgaWYgKGZ1bmMgIT0gTlVMTCkgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGZ1bmMsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2socmVzdWx0KSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19ieXRlc19fIHJldHVybmVkIG5vbi1ieXRlcyAodHlwZSAlLjIwMHMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHJlc3VsdCktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAqcGJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCk7CisgICAgICAgICpwbGVuID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAiJSViIHJlcXVpcmVzIGJ5dGVzLCBvciBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIF9fYnl0ZXNfXywgbm90ICclLjEwMHMnIiwKKyAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIGZtdCUodjEsdjIsLi4uKSBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gc3ByaW50ZihmbXQsIHYxLCB2MiwgLi4uKQorCisgICBGT1JNQVRCVUZMRU4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIGluIHdoaWNoIHRoZSBpbnRzICYKKyAgIGNoYXJzIGFyZSBmb3JtYXR0ZWQuIFhYWCBUaGlzIGlzIGEgbWFnaWMgbnVtYmVyLiBFYWNoIGZvcm1hdHRpbmcKKyAgIHJvdXRpbmUgZG9lcyBib3VuZHMgY2hlY2tpbmcgdG8gZW5zdXJlIG5vIG92ZXJmbG93LCBidXQgYSBiZXR0ZXIKKyAgIHNvbHV0aW9uIG1heSBiZSB0byBtYWxsb2MgYSBidWZmZXIgb2YgYXBwcm9wcmlhdGUgc2l6ZSBmb3IgZWFjaAorICAgZm9ybWF0LiBGb3Igbm93LCB0aGUgY3VycmVudCBzb2x1dGlvbiBpcyBzdWZmaWNpZW50LgorKi8KKyNkZWZpbmUgRk9STUFUQlVGTEVOIChzaXplX3QpMTIwCisKK1B5T2JqZWN0ICoKK19QeUJ5dGVzX0Zvcm1hdChQeU9iamVjdCAqZm9ybWF0LCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpmbXQsICpyZXM7CisgICAgUHlfc3NpemVfdCBhcmdsZW4sIGFyZ2lkeDsKKyAgICBQeV9zc2l6ZV90IHJlc2xlbiwgcmVzY250LCBmbXRjbnQ7CisgICAgaW50IGFyZ3Nfb3duZWQgPSAwOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKmRpY3QgPSBOVUxMOworICAgIGlmIChmb3JtYXQgPT0gTlVMTCB8fCAhUHlCeXRlc19DaGVjayhmb3JtYXQpIHx8IGFyZ3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZtdCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGZvcm1hdCk7CisgICAgZm10Y250ID0gUHlCeXRlc19HRVRfU0laRShmb3JtYXQpOworICAgIHJlc2xlbiA9IHJlc2NudCA9IGZtdGNudCArIDEwMDsKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgcmVzbGVuKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcyA9IFB5Qnl0ZXNfQXNTdHJpbmcocmVzdWx0KTsKKyAgICBpZiAoUHlUdXBsZV9DaGVjayhhcmdzKSkgeworICAgICAgICBhcmdsZW4gPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOworICAgICAgICBhcmdpZHggPSAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYXJnbGVuID0gLTE7CisgICAgICAgIGFyZ2lkeCA9IC0yOworICAgIH0KKyAgICBpZiAoUHlfVFlQRShhcmdzKS0+dHBfYXNfbWFwcGluZyAmJiBQeV9UWVBFKGFyZ3MpLT50cF9hc19tYXBwaW5nLT5tcF9zdWJzY3JpcHQgJiYKKyAgICAgICAgIVB5VHVwbGVfQ2hlY2soYXJncykgJiYgIVB5Qnl0ZXNfQ2hlY2soYXJncykgJiYgIVB5VW5pY29kZV9DaGVjayhhcmdzKSAmJgorICAgICAgICAhUHlCeXRlQXJyYXlfQ2hlY2soYXJncykpIHsKKyAgICAgICAgICAgIGRpY3QgPSBhcmdzOworICAgIH0KKyAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgeworICAgICAgICBpZiAoKmZtdCAhPSAnJScpIHsKKyAgICAgICAgICAgIGlmICgtLXJlc2NudCA8IDApIHsKKyAgICAgICAgICAgICAgICByZXNjbnQgPSBmbXRjbnQgKyAxMDA7CisgICAgICAgICAgICAgICAgcmVzbGVuICs9IHJlc2NudDsKKyAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIHJlc2xlbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIHJlcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgKyByZXNsZW4gLSByZXNjbnQ7CisgICAgICAgICAgICAgICAgLS1yZXNjbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcmVzKysgPSAqZm10Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBHb3QgYSBmb3JtYXQgc3BlY2lmaWVyICovCisgICAgICAgICAgICBpbnQgZmxhZ3MgPSAwOworICAgICAgICAgICAgUHlfc3NpemVfdCB3aWR0aCA9IC0xOworICAgICAgICAgICAgaW50IHByZWMgPSAtMTsKKyAgICAgICAgICAgIGludCBjID0gJ1wwJzsKKyAgICAgICAgICAgIGludCBmaWxsOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBOVUxMOworICAgICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBOVUxMOworICAgICAgICAgICAgY29uc3QgY2hhciAqcGJ1ZiA9IE5VTEw7CisgICAgICAgICAgICBpbnQgc2lnbjsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuID0gMDsKKyAgICAgICAgICAgIGNoYXIgb25lY2hhcjsgLyogRm9yIGJ5dGVfY29udmVydGVyKCkgKi8KKworICAgICAgICAgICAgZm10Kys7CisgICAgICAgICAgICBpZiAoKmZtdCA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICBjaGFyICprZXlzdGFydDsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGtleWxlbjsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqa2V5OworICAgICAgICAgICAgICAgIGludCBwY291bnQgPSAxOworCisgICAgICAgICAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IHJlcXVpcmVzIGEgbWFwcGluZyIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2ZtdDsKKyAgICAgICAgICAgICAgICAtLWZtdGNudDsKKyAgICAgICAgICAgICAgICBrZXlzdGFydCA9IGZtdDsKKyAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgYmFsYW5jZWQgcGFyZW50aGVzZXMgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAocGNvdW50ID4gMCAmJiAtLWZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqZm10ID09ICcpJykKKyAgICAgICAgICAgICAgICAgICAgICAgIC0tcGNvdW50OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqZm10ID09ICcoJykKKyAgICAgICAgICAgICAgICAgICAgICAgICsrcGNvdW50OworICAgICAgICAgICAgICAgICAgICBmbXQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAga2V5bGVuID0gZm10IC0ga2V5c3RhcnQgLSAxOworICAgICAgICAgICAgICAgIGlmIChmbXRjbnQgPCAwIHx8IHBjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0IGtleSIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBrZXkgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGtleXN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWxlbik7CisgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIGlmIChhcmdzX293bmVkKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgYXJnc19vd25lZCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFyZ3MgPSBQeU9iamVjdF9HZXRJdGVtKGRpY3QsIGtleSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcmdzX293bmVkID0gMTsKKyAgICAgICAgICAgICAgICBhcmdsZW4gPSAtMTsKKyAgICAgICAgICAgICAgICBhcmdpZHggPSAtMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjID0gKmZtdCsrKSB7CisgICAgICAgICAgICAgICAgY2FzZSAnLSc6IGZsYWdzIHw9IEZfTEpVU1Q7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2UgJysnOiBmbGFncyB8PSBGX1NJR047IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2UgJyAnOiBmbGFncyB8PSBGX0JMQU5LOyBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjYXNlICcjJzogZmxhZ3MgfD0gRl9BTFQ7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhc2UgJzAnOiBmbGFncyB8PSBGX1pFUk87IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjID09ICcqJykgeworICAgICAgICAgICAgICAgIHYgPSBnZXRuZXh0YXJnKGFyZ3MsIGFyZ2xlbiwgJmFyZ2lkeCk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiogd2FudHMgaW50Iik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdpZHRoID0gUHlMb25nX0FzU3NpemVfdCh2KTsKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZfTEpVU1Q7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgYyA9ICpmbXQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMCAmJiBpc2RpZ2l0KGMpKSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSBjIC0gJzAnOworICAgICAgICAgICAgICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGMgPSBQeV9DSEFSTUFTSygqZm10KyspOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzZGlnaXQoYykpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpYyAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGgqMTAgKyAoYyAtICcwJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMgPT0gJy4nKSB7CisgICAgICAgICAgICAgICAgcHJlYyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCisgICAgICAgICAgICAgICAgICAgIGMgPSAqZm10Kys7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgIHYgPSBnZXRuZXh0YXJnKGFyZ3MsIGFyZ2xlbiwgJmFyZ2lkeCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJlYyA9IF9QeUxvbmdfQXNJbnQodik7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjID0gKmZtdCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjID49IDAgJiYgaXNkaWdpdChjKSkgeworICAgICAgICAgICAgICAgICAgICBwcmVjID0gYyAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tZm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeV9DSEFSTUFTSygqZm10KyspOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KGMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPiAoSU5UX01BWCAtICgoaW50KWMgLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlYyB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWMgPSBwcmVjKjEwICsgKGMgLSAnMCcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAvKiBwcmVjICovCisgICAgICAgICAgICBpZiAoZm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnaCcgfHwgYyA9PSAnbCcgfHwgYyA9PSAnTCcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjID0gKmZtdCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbXRjbnQgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyAhPSAnJScpIHsKKyAgICAgICAgICAgICAgICB2ID0gZ2V0bmV4dGFyZyhhcmdzLCBhcmdsZW4sICZhcmdpZHgpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaWduID0gMDsKKyAgICAgICAgICAgIGZpbGwgPSAnICc7CisgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgICAgIHBidWYgPSAiJSI7CisgICAgICAgICAgICAgICAgbGVuID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgICAgIC8vICVyIGlzIG9ubHkgZm9yIDIvMyBjb2RlOyAzIG9ubHkgY29kZSBzaG91bGQgdXNlICVhCisgICAgICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfQVNDSUkodik7CisgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0lTX0FTQ0lJKHRlbXApKTsKKyAgICAgICAgICAgICAgICBwYnVmID0gKGNvbnN0IGNoYXIgKilQeVVuaWNvZGVfMUJZVEVfREFUQSh0ZW1wKTsKKyAgICAgICAgICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh0ZW1wKTsKKyAgICAgICAgICAgICAgICBpZiAocHJlYyA+PSAwICYmIGxlbiA+IHByZWMpCisgICAgICAgICAgICAgICAgICAgIGxlbiA9IHByZWM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgICAgICAvLyAlcyBpcyBvbmx5IGZvciAyLzMgY29kZTsgMyBvbmx5IGNvZGUgc2hvdWxkIHVzZSAlYgorICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgdGVtcCA9IGZvcm1hdF9vYmoodiwgJnBidWYsICZsZW4pOworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgaWYgKHByZWMgPj0gMCAmJiBsZW4gPiBwcmVjKQorICAgICAgICAgICAgICAgICAgICBsZW4gPSBwcmVjOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgY2FzZSAnbyc6CisgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgIGNhc2UgJ1gnOgorICAgICAgICAgICAgICAgIHRlbXAgPSBmb3JtYXRsb25nKHYsIGZsYWdzLCBwcmVjLCBjKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRlbXApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19BU0NJSSh0ZW1wKSk7CisgICAgICAgICAgICAgICAgcGJ1ZiA9IChjb25zdCBjaGFyICopUHlVbmljb2RlXzFCWVRFX0RBVEEodGVtcCk7CisgICAgICAgICAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodGVtcCk7CisgICAgICAgICAgICAgICAgc2lnbiA9IDE7CisgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRl9aRVJPKQorICAgICAgICAgICAgICAgICAgICBmaWxsID0gJzAnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZSc6CisgICAgICAgICAgICBjYXNlICdFJzoKKyAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgY2FzZSAnRic6CisgICAgICAgICAgICBjYXNlICdnJzoKKyAgICAgICAgICAgIGNhc2UgJ0cnOgorICAgICAgICAgICAgICAgIHRlbXAgPSBmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYyk7CisgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBwYnVmID0gUHlCeXRlc19BU19TVFJJTkcodGVtcCk7CisgICAgICAgICAgICAgICAgbGVuID0gUHlCeXRlc19HRVRfU0laRSh0ZW1wKTsKKyAgICAgICAgICAgICAgICBzaWduID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGX1pFUk8pCisgICAgICAgICAgICAgICAgICAgIGZpbGwgPSAnMCc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBwYnVmID0gJm9uZWNoYXI7CisgICAgICAgICAgICAgICAgbGVuID0gYnl0ZV9jb252ZXJ0ZXIodiwgJm9uZWNoYXIpOworICAgICAgICAgICAgICAgIGlmICghbGVuKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICclYycgKDB4JXgpICIKKyAgICAgICAgICAgICAgICAgICJhdCBpbmRleCAlemQiLAorICAgICAgICAgICAgICAgICAgYywgYywKKyAgICAgICAgICAgICAgICAgIChQeV9zc2l6ZV90KShmbXQgLSAxIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FzU3RyaW5nKGZvcm1hdCkpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgICAgICAgICBpZiAoKnBidWYgPT0gJy0nIHx8ICpwYnVmID09ICcrJykgeworICAgICAgICAgICAgICAgICAgICBzaWduID0gKnBidWYrKzsKKyAgICAgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgRl9TSUdOKQorICAgICAgICAgICAgICAgICAgICBzaWduID0gJysnOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgRl9CTEFOSykKKyAgICAgICAgICAgICAgICAgICAgc2lnbiA9ICcgJzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdpZHRoIDwgbGVuKQorICAgICAgICAgICAgICAgIHdpZHRoID0gbGVuOworICAgICAgICAgICAgaWYgKHJlc2NudCAtIChzaWduICE9IDApIDwgd2lkdGgpIHsKKyAgICAgICAgICAgICAgICByZXNsZW4gLT0gcmVzY250OworICAgICAgICAgICAgICAgIHJlc2NudCA9IHdpZHRoICsgZm10Y250ICsgMTAwOworICAgICAgICAgICAgICAgIHJlc2xlbiArPSByZXNjbnQ7CisgICAgICAgICAgICAgICAgaWYgKHJlc2xlbiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodGVtcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIHJlc2xlbikpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgKyByZXNsZW4gLSByZXNjbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAgIGlmIChmaWxsICE9ICcgJykKKyAgICAgICAgICAgICAgICAgICAgKnJlcysrID0gc2lnbjsKKyAgICAgICAgICAgICAgICByZXNjbnQtLTsKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBsZW4pCisgICAgICAgICAgICAgICAgICAgIHdpZHRoLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGZsYWdzICYgRl9BTFQpICYmIChjID09ICd4JyB8fCBjID09ICdYJykpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQocGJ1ZlswXSA9PSAnMCcpOworICAgICAgICAgICAgICAgIGFzc2VydChwYnVmWzFdID09IGMpOworICAgICAgICAgICAgICAgIGlmIChmaWxsICE9ICcgJykgeworICAgICAgICAgICAgICAgICAgICAqcmVzKysgPSAqcGJ1ZisrOworICAgICAgICAgICAgICAgICAgICAqcmVzKysgPSAqcGJ1ZisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXNjbnQgLT0gMjsKKyAgICAgICAgICAgICAgICB3aWR0aCAtPSAyOworICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IDApCisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBsZW4gLT0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbiAmJiAhKGZsYWdzICYgRl9MSlVTVCkpIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIC0tcmVzY250OworICAgICAgICAgICAgICAgICAgICAqcmVzKysgPSBmaWxsOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0td2lkdGggPiBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpbGwgPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgaWYgKHNpZ24pCisgICAgICAgICAgICAgICAgICAgICpyZXMrKyA9IHNpZ247CisgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZfQUxUKSAmJgorICAgICAgICAgICAgICAgICAgICAoYyA9PSAneCcgfHwgYyA9PSAnWCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChwYnVmWzBdID09ICcwJyk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChwYnVmWzFdID09IGMpOworICAgICAgICAgICAgICAgICAgICAqcmVzKysgPSAqcGJ1ZisrOworICAgICAgICAgICAgICAgICAgICAqcmVzKysgPSAqcGJ1ZisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X01FTUNQWShyZXMsIHBidWYsIGxlbik7CisgICAgICAgICAgICByZXMgKz0gbGVuOworICAgICAgICAgICAgcmVzY250IC09IGxlbjsKKyAgICAgICAgICAgIHdoaWxlICgtLXdpZHRoID49IGxlbikgeworICAgICAgICAgICAgICAgIC0tcmVzY250OworICAgICAgICAgICAgICAgICpyZXMrKyA9ICcgJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaWN0ICYmIChhcmdpZHggPCBhcmdsZW4pICYmIGMgIT0gJyUnKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIGJ5dGVzIGZvcm1hdHRpbmciKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRlbXApOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9YREVDUkVGKHRlbXApOworICAgICAgICB9IC8qICclJyAqLworICAgIH0gLyogdW50aWwgZW5kICovCisgICAgaWYgKGFyZ2lkeCA8IGFyZ2xlbiAmJiAhZGljdCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgYnl0ZXMgZm9ybWF0dGluZyIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBpZiAoYXJnc19vd25lZCkgeworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgfQorICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgcmVzbGVuIC0gcmVzY250KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHJlc3VsdDsKKworIGVycm9yOgorICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChhcmdzX293bmVkKSB7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qID0tPSAqLworCiBzdGF0aWMgdm9pZAogYnl0ZXNfZGVhbGxvYyhQeU9iamVjdCAqb3ApCiB7CkBAIC01NDAsOCArMTE0Myw4IEBACiAgICAgaWYgKGxlbiAhPSBOVUxMKQogICAgICAgICAqbGVuID0gUHlCeXRlc19HRVRfU0laRShvYmopOwogICAgIGVsc2UgaWYgKHN0cmxlbigqcykgIT0gKHNpemVfdClQeUJ5dGVzX0dFVF9TSVpFKG9iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBieXRlcyB3aXRoIG5vIG51bGwiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZW1iZWRkZWQgbnVsbCBieXRlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC02NjIsNyArMTI2NSw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNfY29uY2F0KFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYikKIHsKLSAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlfYnVmZmVyIHZhLCB2YjsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIApAQCAtNjg3LDEzICsxMjg5LDEyIEBACiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICBzaXplID0gdmEubGVuICsgdmIubGVuOwotICAgIGlmIChzaXplIDwgMCkgeworICAgIGlmICh2YS5sZW4gPiBQWV9TU0laRV9UX01BWCAtIHZiLmxlbikgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKTsKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZhLmxlbiArIHZiLmxlbik7CiAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CiAgICAgICAgIG1lbWNweShQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpLCB2YS5idWYsIHZhLmxlbik7CiAgICAgICAgIG1lbWNweShQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdmEubGVuLCB2Yi5idWYsIHZiLmxlbik7CkBAIC04MzMsNiArMTQzNCwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmlzb24gYmV0d2VlbiBieXRlcyBhbmQgc3RyaW5nIiwgMSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9Jc0luc3RhbmNlKChQeU9iamVjdCopYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0KikmUHlMb25nX1R5cGUpOworICAgICAgICAgICAgICAgIGlmICghcmMpCisgICAgICAgICAgICAgICAgICAgIHJjID0gUHlPYmplY3RfSXNJbnN0YW5jZSgoUHlPYmplY3QqKWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QqKSZQeUxvbmdfVHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfQnl0ZXNXYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpc29uIGJldHdlZW4gYnl0ZXMgYW5kIGludCIsIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJlc3VsdCA9IFB5X05vdEltcGxlbWVudGVkOwogICAgIH0KQEAgLTk1Nyw3ICsxNTcyLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiYnl0ZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgImJ5dGUgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yIHNsaWNlcywgbm90ICUuMjAwcyIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTk3LDM3ICsxNjEyLDM0IEBACiAjZGVmaW5lIFJJR0hUU1RSSVAgMQogI2RlZmluZSBCT1RIU1RSSVAgMgogCi0vKiBBcnJheXMgaW5kZXhlZCBieSBhYm92ZSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnN0cmlwZm9ybWF0W10gPSB7InxPOmxzdHJpcCIsICJ8Tzpyc3RyaXAiLCAifE86c3RyaXAifTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVzLnNwbGl0CiAKLSNkZWZpbmUgU1RSSVBOQU1FKGkpIChzdHJpcGZvcm1hdFtpXSszKQorICAgIHNlcDogb2JqZWN0ID0gTm9uZQorICAgICAgICBUaGUgZGVsaW1pdGVyIGFjY29yZGluZyB3aGljaCB0byBzcGxpdCB0aGUgYnl0ZXMuCisgICAgICAgIE5vbmUgKHRoZSBkZWZhdWx0IHZhbHVlKSBtZWFucyBzcGxpdCBvbiBBU0NJSSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMKKyAgICAgICAgKHNwYWNlLCB0YWIsIHJldHVybiwgbmV3bGluZSwgZm9ybWZlZWQsIHZlcnRpY2FsIHRhYikuCisgICAgbWF4c3BsaXQ6IFB5X3NzaXplX3QgPSAtMQorICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBzcGxpdHMgdG8gZG8uCisgICAgICAgIC0xICh0aGUgZGVmYXVsdCB2YWx1ZSkgbWVhbnMgbm8gbGltaXQuCiAKLVB5RG9jX1NUUlZBUihzcGxpdF9fZG9jX18sCi0iQi5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpIC0+IGxpc3Qgb2YgYnl0ZXNcblwKLVxuXAotUmV0dXJuIGEgbGlzdCBvZiB0aGUgc2VjdGlvbnMgaW4gQiwgdXNpbmcgc2VwIGFzIHRoZSBkZWxpbWl0ZXIuXG5cCi1JZiBzZXAgaXMgbm90IHNwZWNpZmllZCBvciBpcyBOb25lLCBCIGlzIHNwbGl0IG9uIEFTQ0lJIHdoaXRlc3BhY2VcblwKLWNoYXJhY3RlcnMgKHNwYWNlLCB0YWIsIHJldHVybiwgbmV3bGluZSwgZm9ybWZlZWQsIHZlcnRpY2FsIHRhYikuXG5cCi1JZiBtYXhzcGxpdCBpcyBnaXZlbiwgYXQgbW9zdCBtYXhzcGxpdCBzcGxpdHMgYXJlIGRvbmUuIik7CitSZXR1cm4gYSBsaXN0IG9mIHRoZSBzZWN0aW9ucyBpbiB0aGUgYnl0ZXMsIHVzaW5nIHNlcCBhcyB0aGUgZGVsaW1pdGVyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfc3BsaXQoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorYnl0ZXNfc3BsaXRfaW1wbChQeUJ5dGVzT2JqZWN0KnNlbGYsIFB5T2JqZWN0ICpzZXAsIFB5X3NzaXplX3QgbWF4c3BsaXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OGJkZTQ0ZGFjYjM2ZWYyZSBpbnB1dD04YjgwOWIzOTA3NGFiYmZhXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzZXAiLCAibWF4c3BsaXQiLCAwfTsKICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZiksIG47Ci0gICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOwogICAgIGNvbnN0IGNoYXIgKnMgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKSwgKnN1YjsKICAgICBQeV9idWZmZXIgdnN1YjsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnN1Ym9iaiA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKmxpc3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifE9uOnNwbGl0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZzdWJvYmosICZtYXhzcGxpdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChtYXhzcGxpdCA8IDApCiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7Ci0gICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQorICAgIGlmIChzZXAgPT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwotICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3Vib2JqLCAmdnN1YiwgUHlCVUZfU0lNUExFKSAhPSAwKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc2VwLCAmdnN1YiwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdWIgPSB2c3ViLmJ1ZjsKICAgICBuID0gdnN1Yi5sZW47CkBAIC0xMDM3LDg1ICsxNjQ5LDg0IEBACiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKLVB5RG9jX1NUUlZBUihwYXJ0aXRpb25fX2RvY19fLAotIkIucGFydGl0aW9uKHNlcCkgLT4gKGhlYWQsIHNlcCwgdGFpbClcblwKLVxuXAotU2VhcmNoIGZvciB0aGUgc2VwYXJhdG9yIHNlcCBpbiBCLCBhbmQgcmV0dXJuIHRoZSBwYXJ0IGJlZm9yZSBpdCxcblwKLXRoZSBzZXBhcmF0b3IgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuXAotZm91bmQsIHJldHVybnMgQiBhbmQgdHdvIGVtcHR5IGJ5dGVzIG9iamVjdHMuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlcy5wYXJ0aXRpb24KKworICAgIHNlbGY6IHNlbGYodHlwZT0iUHlCeXRlc09iamVjdCAqIikKKyAgICBzZXA6IFB5X2J1ZmZlcgorICAgIC8KKworUGFydGl0aW9uIHRoZSBieXRlcyBpbnRvIHRocmVlIHBhcnRzIHVzaW5nIHRoZSBnaXZlbiBzZXBhcmF0b3IuCisKK1RoaXMgd2lsbCBzZWFyY2ggZm9yIHRoZSBzZXBhcmF0b3Igc2VwIGluIHRoZSBieXRlcy4gSWYgdGhlIHNlcGFyYXRvciBpcyBmb3VuZCwKK3JldHVybnMgYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3IKK2l0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIGl0LgorCitJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgYnl0ZXMKK29iamVjdCBhbmQgdHdvIGVtcHR5IGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19wYXJ0aXRpb24oUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNlcF9vYmopCitieXRlc19wYXJ0aXRpb25faW1wbChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKnNlcCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mNTMyYjM5MmExN2ZmNjk1IGlucHV0PWJjODU1ZGM2M2NhOTQ5ZGVdKi8KIHsKLSAgICBQeV9idWZmZXIgc2VwID0ge05VTEwsIE5VTEx9OwotICAgIFB5T2JqZWN0ICpyZXM7Ci0KLSAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHNlcF9vYmosICZzZXAsIFB5QlVGX1NJTVBMRSkgIT0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXMgPSBzdHJpbmdsaWJfcGFydGl0aW9uKAorICAgIHJldHVybiBzdHJpbmdsaWJfcGFydGl0aW9uKAogICAgICAgICAoUHlPYmplY3QqKSBzZWxmLAogICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKSwgUHlCeXRlc19HRVRfU0laRShzZWxmKSwKLSAgICAgICAgc2VwX29iaiwgc2VwLmJ1Ziwgc2VwLmxlbgorICAgICAgICBzZXAtPm9iaiwgKGNvbnN0IGNoYXIgKilzZXAtPmJ1Ziwgc2VwLT5sZW4KICAgICAgICAgKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZXApOwotICAgIHJldHVybiByZXM7CiB9CiAKLVB5RG9jX1NUUlZBUihycGFydGl0aW9uX19kb2NfXywKLSJCLnJwYXJ0aXRpb24oc2VwKSAtPiAoaGVhZCwgc2VwLCB0YWlsKVxuXAotXG5cCi1TZWFyY2ggZm9yIHRoZSBzZXBhcmF0b3Igc2VwIGluIEIsIHN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgQixcblwKLWFuZCByZXR1cm4gdGhlIHBhcnQgYmVmb3JlIGl0LCB0aGUgc2VwYXJhdG9yIGl0c2VsZiwgYW5kIHRoZVxuXAotcGFydCBhZnRlciBpdC4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90IGZvdW5kLCByZXR1cm5zIHR3byBlbXB0eVxuXAotYnl0ZXMgb2JqZWN0cyBhbmQgQi4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVzLnJwYXJ0aXRpb24KKworICAgIHNlbGY6IHNlbGYodHlwZT0iUHlCeXRlc09iamVjdCAqIikKKyAgICBzZXA6IFB5X2J1ZmZlcgorICAgIC8KKworUGFydGl0aW9uIHRoZSBieXRlcyBpbnRvIHRocmVlIHBhcnRzIHVzaW5nIHRoZSBnaXZlbiBzZXBhcmF0b3IuCisKK1RoaXMgd2lsbCBzZWFyY2ggZm9yIHRoZSBzZXBhcmF0b3Igc2VwIGluIHRoZSBieXRlcywgc3RhcnRpbmcgYW5kIHRoZSBlbmQuIElmCit0aGUgc2VwYXJhdG9yIGlzIGZvdW5kLCByZXR1cm5zIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUKK3NlcGFyYXRvciwgdGhlIHNlcGFyYXRvciBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciBpdC4KKworSWYgdGhlIHNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybnMgYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IGJ5dGVzCitvYmplY3RzIGFuZCB0aGUgb3JpZ2luYWwgYnl0ZXMgb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcnBhcnRpdGlvbihQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwX29iaikKK2J5dGVzX3JwYXJ0aXRpb25faW1wbChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKnNlcCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xOTFiMTE0Y2JiMDI4ZTUwIGlucHV0PTY1ODhmZmYyNjJhOTE3MGVdKi8KIHsKLSAgICBQeV9idWZmZXIgc2VwID0ge05VTEwsIE5VTEx9OwotICAgIFB5T2JqZWN0ICpyZXM7Ci0KLSAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHNlcF9vYmosICZzZXAsIFB5QlVGX1NJTVBMRSkgIT0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXMgPSBzdHJpbmdsaWJfcnBhcnRpdGlvbigKKyAgICByZXR1cm4gc3RyaW5nbGliX3JwYXJ0aXRpb24oCiAgICAgICAgIChQeU9iamVjdCopIHNlbGYsCiAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpLCBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpLAotICAgICAgICBzZXBfb2JqLCBzZXAuYnVmLCBzZXAubGVuCisgICAgICAgIHNlcC0+b2JqLCAoY29uc3QgY2hhciAqKXNlcC0+YnVmLCBzZXAtPmxlbgogICAgICAgICApOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlcCk7Ci0gICAgcmV0dXJuIHJlczsKIH0KIAotUHlEb2NfU1RSVkFSKHJzcGxpdF9fZG9jX18sCi0iQi5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKSAtPiBsaXN0IG9mIGJ5dGVzXG5cCi1cblwKLVJldHVybiBhIGxpc3Qgb2YgdGhlIHNlY3Rpb25zIGluIEIsIHVzaW5nIHNlcCBhcyB0aGUgZGVsaW1pdGVyLFxuXAotc3RhcnRpbmcgYXQgdGhlIGVuZCBvZiBCIGFuZCB3b3JraW5nIHRvIHRoZSBmcm9udC5cblwKLUlmIHNlcCBpcyBub3QgZ2l2ZW4sIEIgaXMgc3BsaXQgb24gQVNDSUkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cCi0oc3BhY2UsIHRhYiwgcmV0dXJuLCBuZXdsaW5lLCBmb3JtZmVlZCwgdmVydGljYWwgdGFiKS5cblwKLUlmIG1heHNwbGl0IGlzIGdpdmVuLCBhdCBtb3N0IG1heHNwbGl0IHNwbGl0cyBhcmUgZG9uZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVzLnJzcGxpdCA9IGJ5dGVzLnNwbGl0CiAKK1JldHVybiBhIGxpc3Qgb2YgdGhlIHNlY3Rpb25zIGluIHRoZSBieXRlcywgdXNpbmcgc2VwIGFzIHRoZSBkZWxpbWl0ZXIuCisKK1NwbGl0dGluZyBpcyBkb25lIHN0YXJ0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJ5dGVzIGFuZCB3b3JraW5nIHRvIHRoZSBmcm9udC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JzcGxpdChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitieXRlc19yc3BsaXRfaW1wbChQeUJ5dGVzT2JqZWN0KnNlbGYsIFB5T2JqZWN0ICpzZXAsIFB5X3NzaXplX3QgbWF4c3BsaXQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGI2NTcwYjk3NzkxMWQ4OCBpbnB1dD0wZjg2YzlmMjhmN2Q3YjdiXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJzZXAiLCAibWF4c3BsaXQiLCAwfTsKICAgICBQeV9zc2l6ZV90IGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZiksIG47Ci0gICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOwogICAgIGNvbnN0IGNoYXIgKnMgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKSwgKnN1YjsKICAgICBQeV9idWZmZXIgdnN1YjsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnN1Ym9iaiA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKmxpc3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifE9uOnJzcGxpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc3Vib2JqLCAmbWF4c3BsaXQpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobWF4c3BsaXQgPCAwKQogICAgICAgICBtYXhzcGxpdCA9IFBZX1NTSVpFX1RfTUFYOwotICAgIGlmIChzdWJvYmogPT0gUHlfTm9uZSkKKyAgICBpZiAoc2VwID09IFB5X05vbmUpCiAgICAgICAgIHJldHVybiBzdHJpbmdsaWJfcnNwbGl0X3doaXRlc3BhY2UoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBtYXhzcGxpdCk7Ci0gICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdWJvYmosICZ2c3ViLCBQeUJVRl9TSU1QTEUpICE9IDApCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzZXAsICZ2c3ViLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN1YiA9IHZzdWIuYnVmOwogICAgIG4gPSB2c3ViLmxlbjsKQEAgLTExMjYsMTYgKzE3MzcsMjYgQEAKIH0KIAogCi1QeURvY19TVFJWQVIoam9pbl9fZG9jX18sCi0iQi5qb2luKGl0ZXJhYmxlX29mX2J5dGVzKSAtPiBieXRlc1xuXAotXG5cCi1Db25jYXRlbmF0ZSBhbnkgbnVtYmVyIG9mIGJ5dGVzIG9iamVjdHMsIHdpdGggQiBpbiBiZXR3ZWVuIGVhY2ggcGFpci5cblwKLUV4YW1wbGU6IGInLicuam9pbihbYidhYicsIGIncHEnLCBiJ3JzJ10pIC0+IGInYWIucHEucnMnLiIpOworLypbY2xpbmljIGlucHV0XQorYnl0ZXMuam9pbgorCisgICAgaXRlcmFibGVfb2ZfYnl0ZXM6IG9iamVjdAorICAgIC8KKworQ29uY2F0ZW5hdGUgYW55IG51bWJlciBvZiBieXRlcyBvYmplY3RzLgorCitUaGUgYnl0ZXMgd2hvc2UgbWV0aG9kIGlzIGNhbGxlZCBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIGVhY2ggcGFpci4KKworVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhIG5ldyBieXRlcyBvYmplY3QuCisKK0V4YW1wbGU6IGInLicuam9pbihbYidhYicsIGIncHEnLCBiJ3JzJ10pIC0+IGInYWIucHEucnMnLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQorYnl0ZXNfam9pbihQeUJ5dGVzT2JqZWN0KnNlbGYsIFB5T2JqZWN0ICppdGVyYWJsZV9vZl9ieXRlcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MzRhZmYxNDc2NGZmOTk3IGlucHV0PTdmZTM3N2I5NWJkNTQ5ZDJdKi8KIHsKLSAgICByZXR1cm4gc3RyaW5nbGliX2J5dGVzX2pvaW4oc2VsZiwgaXRlcmFibGUpOworICAgIHJldHVybiBzdHJpbmdsaWJfYnl0ZXNfam9pbigoUHlPYmplY3QqKXNlbGYsIGl0ZXJhYmxlX29mX2J5dGVzKTsKIH0KIAogUHlPYmplY3QgKgpAQCAtMTE0Myw3ICsxNzY0LDcgQEAKIHsKICAgICBhc3NlcnQoc2VwICE9IE5VTEwgJiYgUHlCeXRlc19DaGVjayhzZXApKTsKICAgICBhc3NlcnQoeCAhPSBOVUxMKTsKLSAgICByZXR1cm4gYnl0ZXNfam9pbihzZXAsIHgpOworICAgIHJldHVybiBieXRlc19qb2luKChQeUJ5dGVzT2JqZWN0KilzZXAsIHgpOwogfQogCiAvKiBoZWxwZXIgbWFjcm8gdG8gZml4dXAgc3RhcnQvZW5kIHNsaWNlIHZhbHVlcyAqLwpAQCAtMTE2OCw3ICsxNzg5LDcgQEAKICAgICBjaGFyIGJ5dGU7CiAgICAgUHlfYnVmZmVyIHN1YmJ1ZjsKICAgICBjb25zdCBjaGFyICpzdWI7Ci0gICAgUHlfc3NpemVfdCBzdWJfbGVuOworICAgIFB5X3NzaXplX3QgbGVuLCBzdWJfbGVuOwogICAgIFB5X3NzaXplX3Qgc3RhcnQ9MCwgZW5kPVBZX1NTSVpFX1RfTUFYOwogICAgIFB5X3NzaXplX3QgcmVzOwogCkBAIC0xMTg3LDE1ICsxODA4LDM0IEBACiAgICAgICAgIHN1YiA9ICZieXRlOwogICAgICAgICBzdWJfbGVuID0gMTsKICAgICB9CisgICAgbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKTsKIAotICAgIGlmIChkaXIgPiAwKQotICAgICAgICByZXMgPSBzdHJpbmdsaWJfZmluZF9zbGljZSgKLSAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpLCBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpLAotICAgICAgICAgICAgc3ViLCBzdWJfbGVuLCBzdGFydCwgZW5kKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcyA9IHN0cmluZ2xpYl9yZmluZF9zbGljZSgKLSAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpLCBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpLAotICAgICAgICAgICAgc3ViLCBzdWJfbGVuLCBzdGFydCwgZW5kKTsKKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4pOworICAgIGlmIChlbmQgLSBzdGFydCA8IHN1Yl9sZW4pCisgICAgICAgIHJlcyA9IC0xOworICAgIGVsc2UgaWYgKHN1Yl9sZW4gPT0gMQorI2lmbmRlZiBIQVZFX01FTVJDSFIKKyAgICAgICAgICAgICYmIGRpciA+IDAKKyNlbmRpZgorICAgICkgeworICAgICAgICB1bnNpZ25lZCBjaGFyIG5lZWRsZSA9ICpzdWI7CisgICAgICAgIGludCBtb2RlID0gKGRpciA+IDApID8gRkFTVF9TRUFSQ0ggOiBGQVNUX1JTRUFSQ0g7CisgICAgICAgIHJlcyA9IHN0cmluZ2xpYl9mYXN0c2VhcmNoX21lbWNocl8xY2hhcigKKyAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpICsgc3RhcnQsIGVuZCAtIHN0YXJ0LAorICAgICAgICAgICAgbmVlZGxlLCBuZWVkbGUsIG1vZGUpOworICAgICAgICBpZiAocmVzID49IDApCisgICAgICAgICAgICByZXMgKz0gc3RhcnQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoZGlyID4gMCkKKyAgICAgICAgICAgIHJlcyA9IHN0cmluZ2xpYl9maW5kX3NsaWNlKAorICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpLCBsZW4sCisgICAgICAgICAgICAgICAgc3ViLCBzdWJfbGVuLCBzdGFydCwgZW5kKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzID0gc3RyaW5nbGliX3JmaW5kX3NsaWNlKAorICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpLCBsZW4sCisgICAgICAgICAgICAgICAgc3ViLCBzdWJfbGVuLCBzdGFydCwgZW5kKTsKKyAgICB9CiAKICAgICBpZiAoc3Vib2JqKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzdWJidWYpOwpAQCAtMTM1NCw2MiArMTk5NCw2OSBAQAogCiAKIFB5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQotZG9fYXJnc3RyaXAoUHlCeXRlc09iamVjdCAqc2VsZiwgaW50IHN0cmlwdHlwZSwgUHlPYmplY3QgKmFyZ3MpCitkb19hcmdzdHJpcChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBpbnQgc3RyaXB0eXBlLCBQeU9iamVjdCAqYnl0ZXMpCiB7Ci0gICAgUHlPYmplY3QgKnNlcCA9IE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHNlcCAhPSBOVUxMICYmIHNlcCAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIHJldHVybiBkb194c3RyaXAoc2VsZiwgc3RyaXB0eXBlLCBzZXApOworICAgIGlmIChieXRlcyAhPSBOVUxMICYmIGJ5dGVzICE9IFB5X05vbmUpIHsKKyAgICAgICAgcmV0dXJuIGRvX3hzdHJpcChzZWxmLCBzdHJpcHR5cGUsIGJ5dGVzKTsKICAgICB9CiAgICAgcmV0dXJuIGRvX3N0cmlwKHNlbGYsIHN0cmlwdHlwZSk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVzLnN0cmlwCiAKLVB5RG9jX1NUUlZBUihzdHJpcF9fZG9jX18sCi0iQi5zdHJpcChbYnl0ZXNdKSAtPiBieXRlc1xuXAotXG5cCi1TdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LlxuXAotSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UuIik7CisgICAgc2VsZjogc2VsZih0eXBlPSJQeUJ5dGVzT2JqZWN0ICoiKQorICAgIGJ5dGVzOiBvYmplY3QgPSBOb25lCisgICAgLworCitTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LgorCitJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCBvciBOb25lLCBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfc3RyaXAoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlc19zdHJpcF9pbXBsKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpieXRlcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jN2MyMjhkM2JkMTA0YTFiIGlucHV0PTM3ZGFhNWZhZDEzOTVkOTVdKi8KIHsKLSAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSA9PSAwKQotICAgICAgICByZXR1cm4gZG9fc3RyaXAoc2VsZiwgQk9USFNUUklQKTsgLyogQ29tbW9uIGNhc2UgKi8KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBkb19hcmdzdHJpcChzZWxmLCBCT1RIU1RSSVAsIGFyZ3MpOworICAgIHJldHVybiBkb19hcmdzdHJpcChzZWxmLCBCT1RIU1RSSVAsIGJ5dGVzKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYnl0ZXMubHN0cmlwCiAKLVB5RG9jX1NUUlZBUihsc3RyaXBfX2RvY19fLAotIkIubHN0cmlwKFtieXRlc10pIC0+IGJ5dGVzXG5cCi1cblwKLVN0cmlwIGxlYWRpbmcgYnl0ZXMgY29udGFpbmVkIGluIHRoZSBhcmd1bWVudC5cblwKLUlmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBzdHJpcCBsZWFkaW5nIEFTQ0lJIHdoaXRlc3BhY2UuIik7CisgICAgc2VsZjogc2VsZih0eXBlPSJQeUJ5dGVzT2JqZWN0ICoiKQorICAgIGJ5dGVzOiBvYmplY3QgPSBOb25lCisgICAgLworCitTdHJpcCBsZWFkaW5nIGJ5dGVzIGNvbnRhaW5lZCBpbiB0aGUgYXJndW1lbnQuCisKK0lmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkIG9yIE5vbmUsIHN0cmlwIGxlYWRpbmcgIEFTQ0lJIHdoaXRlc3BhY2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19sc3RyaXAoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlc19sc3RyaXBfaW1wbChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYnl0ZXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Mjg2MDJlNTg2ZjUyNGU4MiBpbnB1dD04ODgxMWIwOWRmYmMyOTg4XSovCiB7Ci0gICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPT0gMCkKLSAgICAgICAgcmV0dXJuIGRvX3N0cmlwKHNlbGYsIExFRlRTVFJJUCk7IC8qIENvbW1vbiBjYXNlICovCi0gICAgZWxzZQotICAgICAgICByZXR1cm4gZG9fYXJnc3RyaXAoc2VsZiwgTEVGVFNUUklQLCBhcmdzKTsKKyAgICByZXR1cm4gZG9fYXJnc3RyaXAoc2VsZiwgTEVGVFNUUklQLCBieXRlcyk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVzLnJzdHJpcAogCi1QeURvY19TVFJWQVIocnN0cmlwX19kb2NfXywKLSJCLnJzdHJpcChbYnl0ZXNdKSAtPiBieXRlc1xuXAotXG5cCi1TdHJpcCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LlxuXAotSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHN0cmlwIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UuIik7CisgICAgc2VsZjogc2VsZih0eXBlPSJQeUJ5dGVzT2JqZWN0ICoiKQorICAgIGJ5dGVzOiBvYmplY3QgPSBOb25lCisgICAgLworCitTdHJpcCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LgorCitJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCBvciBOb25lLCBzdHJpcCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcnN0cmlwKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnl0ZXNfcnN0cmlwX2ltcGwoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmJ5dGVzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU0N2UzODE1Yzk1NDQ3ZGEgaW5wdXQ9OGY5M2M5Y2QzNjFmMDE0MF0qLwogewotICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpID09IDApCi0gICAgICAgIHJldHVybiBkb19zdHJpcChzZWxmLCBSSUdIVFNUUklQKTsgLyogQ29tbW9uIGNhc2UgKi8KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBkb19hcmdzdHJpcChzZWxmLCBSSUdIVFNUUklQLCBhcmdzKTsKKyAgICByZXR1cm4gZG9fYXJnc3RyaXAoc2VsZiwgUklHSFRTVFJJUCwgYnl0ZXMpOwogfQogCiAKQEAgLTE0NjEsNDUgKzIxMDgsNTEgQEAKIH0KIAogCi1QeURvY19TVFJWQVIodHJhbnNsYXRlX19kb2NfXywKLSJCLnRyYW5zbGF0ZSh0YWJsZVssIGRlbGV0ZWNoYXJzXSkgLT4gYnl0ZXNcblwKLVxuXAotUmV0dXJuIGEgY29weSBvZiBCLCB3aGVyZSBhbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcgaW4gdGhlXG5cCi1vcHRpb25hbCBhcmd1bWVudCBkZWxldGVjaGFycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZSByZW1haW5pbmdcblwKLWNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvblxuXAotdGFibGUsIHdoaWNoIG11c3QgYmUgYSBieXRlcyBvYmplY3Qgb2YgbGVuZ3RoIDI1Ni4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2J5dGVzLnRyYW5zbGF0ZQorCisgICAgc2VsZjogc2VsZih0eXBlPSJQeUJ5dGVzT2JqZWN0ICoiKQorICAgIHRhYmxlOiBvYmplY3QKKyAgICAgICAgVHJhbnNsYXRpb24gdGFibGUsIHdoaWNoIG11c3QgYmUgYSBieXRlcyBvYmplY3Qgb2YgbGVuZ3RoIDI1Ni4KKyAgICBbCisgICAgZGVsZXRlY2hhcnM6IG9iamVjdAorICAgIF0KKyAgICAvCisKK1JldHVybiBhIGNvcHkgd2l0aCBlYWNoIGNoYXJhY3RlciBtYXBwZWQgYnkgdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLgorCitBbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcgaW4gdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGRlbGV0ZWNoYXJzIGFyZSByZW1vdmVkLgorVGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBtYXBwZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc190cmFuc2xhdGUoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlc190cmFuc2xhdGVfaW1wbChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdGFibGUsIGludCBncm91cF9yaWdodF8xLAorICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlbGV0ZWNoYXJzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIzM2RmODUwZWI1MGJmOGQgaW5wdXQ9ZDhmYTU1MTlkN2NjNGJlN10qLwogewogICAgIGNoYXIgKmlucHV0LCAqb3V0cHV0OwogICAgIFB5X2J1ZmZlciB0YWJsZV92aWV3ID0ge05VTEwsIE5VTEx9OwogICAgIFB5X2J1ZmZlciBkZWxfdGFibGVfdmlldyA9IHtOVUxMLCBOVUxMfTsKLSAgICBjb25zdCBjaGFyICp0YWJsZTsKKyAgICBjb25zdCBjaGFyICp0YWJsZV9jaGFyczsKICAgICBQeV9zc2l6ZV90IGksIGMsIGNoYW5nZWQgPSAwOwogICAgIFB5T2JqZWN0ICppbnB1dF9vYmogPSAoUHlPYmplY3QqKXNlbGY7Ci0gICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0LCAqZGVsX3RhYmxlPU5VTEw7CisgICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0LCAqZGVsX3RhYmxlX2NoYXJzPU5VTEw7CiAgICAgUHlfc3NpemVfdCBpbmxlbiwgdGFibGVuLCBkZWxsZW4gPSAwOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgaW50IHRyYW5zX3RhYmxlWzI1Nl07Ci0gICAgUHlPYmplY3QgKnRhYmxlb2JqLCAqZGVsb2JqID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInRyYW5zbGF0ZSIsIDEsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWJsZW9iaiwgJmRlbG9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodGFibGVvYmopKSB7Ci0gICAgICAgIHRhYmxlID0gUHlCeXRlc19BU19TVFJJTkcodGFibGVvYmopOwotICAgICAgICB0YWJsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHRhYmxlb2JqKTsKKyAgICBpZiAoUHlCeXRlc19DaGVjayh0YWJsZSkpIHsKKyAgICAgICAgdGFibGVfY2hhcnMgPSBQeUJ5dGVzX0FTX1NUUklORyh0YWJsZSk7CisgICAgICAgIHRhYmxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodGFibGUpOwogICAgIH0KLSAgICBlbHNlIGlmICh0YWJsZW9iaiA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIHRhYmxlID0gTlVMTDsKKyAgICBlbHNlIGlmICh0YWJsZSA9PSBQeV9Ob25lKSB7CisgICAgICAgIHRhYmxlX2NoYXJzID0gTlVMTDsKICAgICAgICAgdGFibGVuID0gMjU2OwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcih0YWJsZW9iaiwgJnRhYmxlX3ZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcih0YWJsZSwgJnRhYmxlX3ZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB0YWJsZSA9IHRhYmxlX3ZpZXcuYnVmOworICAgICAgICB0YWJsZV9jaGFycyA9IHRhYmxlX3ZpZXcuYnVmOwogICAgICAgICB0YWJsZW4gPSB0YWJsZV92aWV3LmxlbjsKICAgICB9CiAKQEAgLTE1MTAsMjIgKzIxNjMsMjIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGRlbG9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKGRlbG9iaikpIHsKLSAgICAgICAgICAgIGRlbF90YWJsZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGRlbG9iaik7Ci0gICAgICAgICAgICBkZWxsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGRlbG9iaik7CisgICAgaWYgKGRlbGV0ZWNoYXJzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2soZGVsZXRlY2hhcnMpKSB7CisgICAgICAgICAgICBkZWxfdGFibGVfY2hhcnMgPSBQeUJ5dGVzX0FTX1NUUklORyhkZWxldGVjaGFycyk7CisgICAgICAgICAgICBkZWxsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGRlbGV0ZWNoYXJzKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoZGVsb2JqLCAmZGVsX3RhYmxlX3ZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkgeworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihkZWxldGVjaGFycywgJmRlbF90YWJsZV92aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ0YWJsZV92aWV3KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlbF90YWJsZSA9IGRlbF90YWJsZV92aWV3LmJ1ZjsKKyAgICAgICAgICAgIGRlbF90YWJsZV9jaGFycyA9IGRlbF90YWJsZV92aWV3LmJ1ZjsKICAgICAgICAgICAgIGRlbGxlbiA9IGRlbF90YWJsZV92aWV3LmxlbjsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZGVsX3RhYmxlID0gTlVMTDsKKyAgICAgICAgZGVsX3RhYmxlX2NoYXJzID0gTlVMTDsKICAgICAgICAgZGVsbGVuID0gMDsKICAgICB9CiAKQEAgLTE1MzksMTEgKzIxOTIsMTEgQEAKICAgICBvdXRwdXRfc3RhcnQgPSBvdXRwdXQgPSBQeUJ5dGVzX0FzU3RyaW5nKHJlc3VsdCk7CiAgICAgaW5wdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhpbnB1dF9vYmopOwogCi0gICAgaWYgKGRlbGxlbiA9PSAwICYmIHRhYmxlICE9IE5VTEwpIHsKKyAgICBpZiAoZGVsbGVuID09IDAgJiYgdGFibGVfY2hhcnMgIT0gTlVMTCkgewogICAgICAgICAvKiBJZiBubyBkZWxldGlvbnMgYXJlIHJlcXVpcmVkLCB1c2UgZmFzdGVyIGNvZGUgKi8KICAgICAgICAgZm9yIChpID0gaW5sZW47IC0taSA+PSAwOyApIHsKICAgICAgICAgICAgIGMgPSBQeV9DSEFSTUFTSygqaW5wdXQrKyk7Ci0gICAgICAgICAgICBpZiAoUHlfQ0hBUk1BU0soKCpvdXRwdXQrKyA9IHRhYmxlW2NdKSkgIT0gYykKKyAgICAgICAgICAgIGlmIChQeV9DSEFSTUFTSygoKm91dHB1dCsrID0gdGFibGVfY2hhcnNbY10pKSAhPSBjKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwogICAgICAgICB9CiAgICAgICAgIGlmICghY2hhbmdlZCAmJiBQeUJ5dGVzX0NoZWNrRXhhY3QoaW5wdXRfb2JqKSkgewpAQCAtMTU1NiwxNyArMjIwOSwxNyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlmICh0YWJsZSA9PSBOVUxMKSB7CisgICAgaWYgKHRhYmxlX2NoYXJzID09IE5VTEwpIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICAgICAgdHJhbnNfdGFibGVbaV0gPSBQeV9DSEFSTUFTSyhpKTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgICAgICAgICB0cmFuc190YWJsZVtpXSA9IFB5X0NIQVJNQVNLKHRhYmxlW2ldKTsKKyAgICAgICAgICAgIHRyYW5zX3RhYmxlW2ldID0gUHlfQ0hBUk1BU0sodGFibGVfY2hhcnNbaV0pOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ0YWJsZV92aWV3KTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBkZWxsZW47IGkrKykKLSAgICAgICAgdHJhbnNfdGFibGVbKGludCkgUHlfQ0hBUk1BU0soZGVsX3RhYmxlW2ldKV0gPSAtMTsKKyAgICAgICAgdHJhbnNfdGFibGVbKGludCkgUHlfQ0hBUk1BU0soZGVsX3RhYmxlX2NoYXJzW2ldKV0gPSAtMTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkZWxfdGFibGVfdmlldyk7CiAKICAgICBmb3IgKGkgPSBpbmxlbjsgLS1pID49IDA7ICkgewpAQCAtMTU4OCwxMCArMjI0MSwyOCBAQAogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KKworQHN0YXRpY21ldGhvZAorYnl0ZXMubWFrZXRyYW5zCisKKyAgICBmcm06IFB5X2J1ZmZlcgorICAgIHRvOiBQeV9idWZmZXIKKyAgICAvCisKK1JldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzZWFibGUgZm9yIHRoZSBieXRlcyBvciBieXRlYXJyYXkgdHJhbnNsYXRlIG1ldGhvZC4KKworVGhlIHJldHVybmVkIHRhYmxlIHdpbGwgYmUgb25lIHdoZXJlIGVhY2ggYnl0ZSBpbiBmcm0gaXMgbWFwcGVkIHRvIHRoZSBieXRlIGF0Cit0aGUgc2FtZSBwb3NpdGlvbiBpbiB0by4KKworVGhlIGJ5dGVzIG9iamVjdHMgZnJtIGFuZCB0byBtdXN0IGJlIG9mIHRoZSBzYW1lIGxlbmd0aC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX21ha2V0cmFucyhQeU9iamVjdCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCitieXRlc19tYWtldHJhbnNfaW1wbChQeV9idWZmZXIgKmZybSwgUHlfYnVmZmVyICp0bykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hMzZmNjM5OWQ0Yjc3ZjZmIGlucHV0PWRlN2E4ZmM1NjMyYmI4ZjFdKi8KIHsKLSAgICByZXR1cm4gX1B5X2J5dGVzX21ha2V0cmFucyhhcmdzKTsKKyAgICByZXR1cm4gX1B5X2J5dGVzX21ha2V0cmFucyhmcm0sIHRvKTsKIH0KIAogLyogZmluZCBhbmQgY291bnQgY2hhcmFjdGVycyBhbmQgc3Vic3RyaW5ncyAqLwpAQCAtMjA4NiwzMSArMjc1NywzMSBAQAogICAgIH0KIH0KIAotUHlEb2NfU1RSVkFSKHJlcGxhY2VfX2RvY19fLAotIkIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSkgLT4gYnl0ZXNcblwKLVxuXAotUmV0dXJuIGEgY29weSBvZiBCIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnNlY3Rpb25cblwKLW9sZCByZXBsYWNlZCBieSBuZXcuICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgY291bnQgaXNcblwKLWdpdmVuLCBvbmx5IGZpcnN0IGNvdW50IG9jY3VyYW5jZXMgYXJlIHJlcGxhY2VkLiIpOworCisvKltjbGluaWMgaW5wdXRdCitieXRlcy5yZXBsYWNlCisKKyAgICBvbGQ6IFB5X2J1ZmZlcgorICAgIG5ldzogUHlfYnVmZmVyCisgICAgY291bnQ6IFB5X3NzaXplX3QgPSAtMQorICAgICAgICBNYXhpbXVtIG51bWJlciBvZiBvY2N1cnJlbmNlcyB0byByZXBsYWNlLgorICAgICAgICAtMSAodGhlIGRlZmF1bHQgdmFsdWUpIG1lYW5zIHJlcGxhY2UgYWxsIG9jY3VycmVuY2VzLgorICAgIC8KKworUmV0dXJuIGEgY29weSB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgb2xkIHJlcGxhY2VkIGJ5IG5ldy4KKworSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGNvdW50IGlzIGdpdmVuLCBvbmx5IHRoZSBmaXJzdCBjb3VudCBvY2N1cnJlbmNlcyBhcmUKK3JlcGxhY2VkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmVwbGFjZShQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVzX3JlcGxhY2VfaW1wbChQeUJ5dGVzT2JqZWN0KnNlbGYsIFB5X2J1ZmZlciAqb2xkLCBQeV9idWZmZXIgKm5ldywKKyAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQwM2RjOWQ3YTgzYzVhMWQgaW5wdXQ9YjJmYmJmMGJmMDRkZThlNV0qLwogewotICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgUHlfYnVmZmVyIG9sZCA9IHtOVUxMLCBOVUxMfTsKLSAgICBQeV9idWZmZXIgbmV3ID0ge05VTEwsIE5VTEx9OwotICAgIFB5X3NzaXplX3QgY291bnQgPSAtMTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp5KnxuOnJlcGxhY2UiLCAmb2xkLCAmbmV3LCAmY291bnQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJlcyA9IChQeU9iamVjdCAqKXJlcGxhY2UoKFB5Qnl0ZXNPYmplY3QgKikgc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopb2xkLmJ1Ziwgb2xkLmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopbmV3LmJ1ZiwgbmV3LmxlbiwgY291bnQpOwotCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmb2xkKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZuZXcpOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXJlcGxhY2UoKFB5Qnl0ZXNPYmplY3QgKikgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKW9sZC0+YnVmLCBvbGQtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKW5ldy0+YnVmLCBuZXctPmxlbiwgY291bnQpOwogfQogCiAvKiogRW5kIERBTEtFICoqLwpAQCAtMjI1Nyw2MCArMjkyOCw1MSBAQAogfQogCiAKLVB5RG9jX1NUUlZBUihkZWNvZGVfX2RvY19fLAotIkIuZGVjb2RlKGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0nc3RyaWN0JykgLT4gc3RyXG5cCi1cblwKLURlY29kZSBCIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciBlbmNvZGluZy4gRGVmYXVsdCBlbmNvZGluZ1xuXAotaXMgJ3V0Zi04Jy4gZXJyb3JzIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3JcblwKLWhhbmRsaW5nIHNjaGVtZS4gIERlZmF1bHQgaXMgJ3N0cmljdCcgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZVxuXAotYSBVbmljb2RlRGVjb2RlRXJyb3IuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUnIGFuZCAncmVwbGFjZSdcblwKLWFzIHdlbGwgYXMgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJkIHdpdGggY29kZWNzLnJlZ2lzdGVyX2Vycm9yIHRoYXQgaXNcblwKLWFibGUgdG8gaGFuZGxlIFVuaWNvZGVEZWNvZGVFcnJvcnMuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlcy5kZWNvZGUKKworICAgIGVuY29kaW5nOiBzdHIoY19kZWZhdWx0PSJOVUxMIikgPSAndXRmLTgnCisgICAgICAgIFRoZSBlbmNvZGluZyB3aXRoIHdoaWNoIHRvIGRlY29kZSB0aGUgYnl0ZXMuCisgICAgZXJyb3JzOiBzdHIoY19kZWZhdWx0PSJOVUxMIikgPSAnc3RyaWN0JworICAgICAgICBUaGUgZXJyb3IgaGFuZGxpbmcgc2NoZW1lIHRvIHVzZSBmb3IgdGhlIGhhbmRsaW5nIG9mIGRlY29kaW5nIGVycm9ycy4KKyAgICAgICAgVGhlIGRlZmF1bHQgaXMgJ3N0cmljdCcgbWVhbmluZyB0aGF0IGRlY29kaW5nIGVycm9ycyByYWlzZSBhCisgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvci4gT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlJyBhbmQgJ3JlcGxhY2UnCisgICAgICAgIGFzIHdlbGwgYXMgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB3aXRoIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0CisgICAgICAgIGNhbiBoYW5kbGUgVW5pY29kZURlY29kZUVycm9ycy4KKworRGVjb2RlIHRoZSBieXRlcyB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgZW5jb2RpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19kZWNvZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorYnl0ZXNfZGVjb2RlX2ltcGwoUHlCeXRlc09iamVjdCpzZWxmLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yZDIwMTZmZjhlMGJiMTc2IGlucHV0PTk1ODE3NDc2OWQyYTQwY2FdKi8KIHsKLSAgICBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChzZWxmLCBlbmNvZGluZywgZXJyb3JzKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KChQeU9iamVjdCopc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiB9CiAKIAotUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLAotIkIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKSAtPiBsaXN0IG9mIGxpbmVzXG5cCi1cblwKLVJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIEIsIGJyZWFraW5nIGF0IGxpbmUgYm91bmRhcmllcy5cblwKLUxpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyBrZWVwZW5kc1xuXAotaXMgZ2l2ZW4gYW5kIHRydWUuIik7CisvKltjbGluaWMgaW5wdXRdCitieXRlcy5zcGxpdGxpbmVzCiAKLXN0YXRpYyBQeU9iamVjdCoKLWJ5dGVzX3NwbGl0bGluZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKKyAgICBrZWVwZW5kczogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKKworUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIGJ5dGVzLCBicmVha2luZyBhdCBsaW5lIGJvdW5kYXJpZXMuCisKK0xpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyBrZWVwZW5kcyBpcyBnaXZlbiBhbmQKK3RydWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19zcGxpdGxpbmVzX2ltcGwoUHlCeXRlc09iamVjdCpzZWxmLCBpbnQga2VlcGVuZHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTk1YzM1OThmNzgzM2NhZCBpbnB1dD03ZjRhYWM2NzE0NGY5OTQ0XSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJrZWVwZW5kcyIsIDB9OwotICAgIGludCBrZWVwZW5kcyA9IDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGk6c3BsaXRsaW5lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAma2VlcGVuZHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHJldHVybiBzdHJpbmdsaWJfc3BsaXRsaW5lcygKICAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoc2VsZiksCiAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZiksIGtlZXBlbmRzCiAgICAgICAgICk7CiB9CiAKLQotUHlEb2NfU1RSVkFSKGZyb21oZXhfZG9jLAotImJ5dGVzLmZyb21oZXgoc3RyaW5nKSAtPiBieXRlc1xuXAotXG5cCi1DcmVhdGUgYSBieXRlcyBvYmplY3QgZnJvbSBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBudW1iZXJzLlxuXAotU3BhY2VzIGJldHdlZW4gdHdvIG51bWJlcnMgYXJlIGFjY2VwdGVkLlxuXAotRXhhbXBsZTogYnl0ZXMuZnJvbWhleCgnQjkgMDFFRicpIC0+IGInXFx4YjlcXHgwMVxceGVmJy4iKTsKLQogc3RhdGljIGludAogaGV4X2RpZ2l0X3RvX2ludChQeV9VQ1M0IGMpCiB7CkBAIC0yMzI3LDI0ICsyOTg5LDM2IEBACiAgICAgcmV0dXJuIC0xOwogfQogCisvKltjbGluaWMgaW5wdXRdCitAY2xhc3NtZXRob2QKK2J5dGVzLmZyb21oZXgKKworICAgIHN0cmluZzogdW5pY29kZQorICAgIC8KKworQ3JlYXRlIGEgYnl0ZXMgb2JqZWN0IGZyb20gYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgbnVtYmVycy4KKworU3BhY2VzIGJldHdlZW4gdHdvIG51bWJlcnMgYXJlIGFjY2VwdGVkLgorRXhhbXBsZTogYnl0ZXMuZnJvbWhleCgnQjkgMDFFRicpIC0+IGInXFx4YjlcXHgwMVxceGVmJy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2Zyb21oZXgoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MpCitieXRlc19mcm9taGV4X2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqc3RyaW5nKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA5NzNhY2M2MzY2MWJiMmUgaW5wdXQ9YmY0ZDFjMzYxNjcwYWNkM10qLwogewotICAgIFB5T2JqZWN0ICpuZXdzdHJpbmcsICpoZXhvYmo7CisgICAgUHlPYmplY3QgKm5ld3N0cmluZzsKICAgICBjaGFyICpidWY7CiAgICAgUHlfc3NpemVfdCBoZXhsZW4sIGJ5dGVzbGVuLCBpLCBqOwogICAgIGludCB0b3AsIGJvdDsKICAgICB2b2lkICpkYXRhOwogICAgIHVuc2lnbmVkIGludCBraW5kOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmZyb21oZXgiLCAmaGV4b2JqKSkKKyAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHN0cmluZykpOworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyaW5nKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhoZXhvYmopKTsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKGhleG9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChoZXhvYmopOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShoZXhvYmopOwotICAgIGhleGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGhleG9iaik7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHN0cmluZyk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHN0cmluZyk7CisgICAgaGV4bGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKTsKIAogICAgIGJ5dGVzbGVuID0gaGV4bGVuLzI7IC8qIFRoaXMgb3ZlcmVzdGltYXRlcyBpZiB0aGVyZSBhcmUgc3BhY2VzICovCiAgICAgbmV3c3RyaW5nID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBieXRlc2xlbik7CkBAIC0yMzc2LDYgKzMwNTAsMjAgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorUHlEb2NfU1RSVkFSKGhleF9fZG9jX18sCisiQi5oZXgoKSAtPiBzdHJpbmdcblwKK1xuXAorQ3JlYXRlIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIG51bWJlcnMgZnJvbSBhIGJ5dGVzIG9iamVjdC5cblwKK0V4YW1wbGU6IGInXFx4YjlcXHgwMVxceGVmJy5oZXgoKSAtPiAnYjkwMWVmJy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX2hleChQeUJ5dGVzT2JqZWN0ICpzZWxmKQoreworICAgIGNoYXIqIGFyZ2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOworICAgIFB5X3NzaXplX3QgYXJnbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKTsKKyAgICByZXR1cm4gX1B5X3N0cmhleChhcmdidWYsIGFyZ2xlbik7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc19nZXRuZXdhcmdzKFB5Qnl0ZXNPYmplY3QgKnYpCiB7CkBAIC0yMzkwLDE0ICszMDc4LDE0IEBACiAgICAgIF9QeV9jYXBpdGFsaXplX19kb2NfX30sCiAgICAgeyJjZW50ZXIiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2NlbnRlciwgTUVUSF9WQVJBUkdTLCBjZW50ZXJfX2RvY19ffSwKICAgICB7ImNvdW50IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCi0gICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZGVjb2RlLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBkZWNvZGVfX2RvY19ffSwKKyAgICBCWVRFU19ERUNPREVfTUVUSE9EREVGCiAgICAgeyJlbmRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlc19lbmRzd2l0aCwgTUVUSF9WQVJBUkdTLAogICAgICBlbmRzd2l0aF9fZG9jX199LAogICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlc19maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKLSAgICB7ImZyb21oZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZnJvbWhleCwgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsCi0gICAgIGZyb21oZXhfZG9jfSwKKyAgICBCWVRFU19GUk9NSEVYX01FVEhPRERFRgorICAgIHsiaGV4IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2hleCwgTUVUSF9OT0FSR1MsIGhleF9fZG9jX199LAogICAgIHsiaW5kZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfaW5kZXgsIE1FVEhfVkFSQVJHUywgaW5kZXhfX2RvY19ffSwKICAgICB7ImlzYWxudW0iLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2lzYWxudW0sIE1FVEhfTk9BUkdTLAogICAgICBfUHlfaXNhbG51bV9fZG9jX199LApAQCAtMjQxMywzOCArMzEwMSw0OSBAQAogICAgICBfUHlfaXN0aXRsZV9fZG9jX199LAogICAgIHsiaXN1cHBlciIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfaXN1cHBlciwgTUVUSF9OT0FSR1MsCiAgICAgIF9QeV9pc3VwcGVyX19kb2NfX30sCi0gICAgeyJqb2luIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2pvaW4sIE1FVEhfTywgam9pbl9fZG9jX199LAorICAgIEJZVEVTX0pPSU5fTUVUSE9EREVGCiAgICAgeyJsanVzdCIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfbGp1c3QsIE1FVEhfVkFSQVJHUywgbGp1c3RfX2RvY19ffSwKICAgICB7Imxvd2VyIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9sb3dlciwgTUVUSF9OT0FSR1MsIF9QeV9sb3dlcl9fZG9jX199LAotICAgIHsibHN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2xzdHJpcCwgTUVUSF9WQVJBUkdTLCBsc3RyaXBfX2RvY19ffSwKLSAgICB7Im1ha2V0cmFucyIsIChQeUNGdW5jdGlvbilieXRlc19tYWtldHJhbnMsIE1FVEhfVkFSQVJHU3xNRVRIX1NUQVRJQywKLSAgICAgX1B5X21ha2V0cmFuc19fZG9jX199LAotICAgIHsicGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3BhcnRpdGlvbiwgTUVUSF9PLCBwYXJ0aXRpb25fX2RvY19ffSwKLSAgICB7InJlcGxhY2UiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcmVwbGFjZSwgTUVUSF9WQVJBUkdTLCByZXBsYWNlX19kb2NfX30sCisgICAgQllURVNfTFNUUklQX01FVEhPRERFRgorICAgIEJZVEVTX01BS0VUUkFOU19NRVRIT0RERUYKKyAgICBCWVRFU19QQVJUSVRJT05fTUVUSE9EREVGCisgICAgQllURVNfUkVQTEFDRV9NRVRIT0RERUYKICAgICB7InJmaW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JmaW5kLCBNRVRIX1ZBUkFSR1MsIHJmaW5kX19kb2NfX30sCiAgICAgeyJyaW5kZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcmluZGV4LCBNRVRIX1ZBUkFSR1MsIHJpbmRleF9fZG9jX199LAogICAgIHsicmp1c3QiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3JqdXN0LCBNRVRIX1ZBUkFSR1MsIHJqdXN0X19kb2NfX30sCi0gICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JwYXJ0aXRpb24sIE1FVEhfTywKLSAgICAgcnBhcnRpdGlvbl9fZG9jX199LAotICAgIHsicnNwbGl0IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JzcGxpdCwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgcnNwbGl0X19kb2NfX30sCi0gICAgeyJyc3RyaXAiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcnN0cmlwLCBNRVRIX1ZBUkFSR1MsIHJzdHJpcF9fZG9jX199LAotICAgIHsic3BsaXQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfc3BsaXQsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHNwbGl0X19kb2NfX30sCi0gICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3NwbGl0bGluZXMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgIHNwbGl0bGluZXNfX2RvY19ffSwKKyAgICBCWVRFU19SUEFSVElUSU9OX01FVEhPRERFRgorICAgIEJZVEVTX1JTUExJVF9NRVRIT0RERUYKKyAgICBCWVRFU19SU1RSSVBfTUVUSE9EREVGCisgICAgQllURVNfU1BMSVRfTUVUSE9EREVGCisgICAgQllURVNfU1BMSVRMSU5FU19NRVRIT0RERUYKICAgICB7InN0YXJ0c3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfc3RhcnRzd2l0aCwgTUVUSF9WQVJBUkdTLAogICAgICBzdGFydHN3aXRoX19kb2NfX30sCi0gICAgeyJzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlc19zdHJpcCwgTUVUSF9WQVJBUkdTLCBzdHJpcF9fZG9jX199LAorICAgIEJZVEVTX1NUUklQX01FVEhPRERFRgogICAgIHsic3dhcGNhc2UiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3N3YXBjYXNlLCBNRVRIX05PQVJHUywKICAgICAgX1B5X3N3YXBjYXNlX19kb2NfX30sCiAgICAgeyJ0aXRsZSIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfdGl0bGUsIE1FVEhfTk9BUkdTLCBfUHlfdGl0bGVfX2RvY19ffSwKLSAgICB7InRyYW5zbGF0ZSIsIChQeUNGdW5jdGlvbilieXRlc190cmFuc2xhdGUsIE1FVEhfVkFSQVJHUywKLSAgICAgdHJhbnNsYXRlX19kb2NfX30sCisgICAgQllURVNfVFJBTlNMQVRFX01FVEhPRERFRgogICAgIHsidXBwZXIiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3VwcGVyLCBNRVRIX05PQVJHUywgX1B5X3VwcGVyX19kb2NfX30sCiAgICAgeyJ6ZmlsbCIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfemZpbGwsIE1FVEhfVkFSQVJHUywgemZpbGxfX2RvY19ffSwKICAgICB7TlVMTCwgICAgIE5VTEx9ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfbW9kKFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKK3sKKyAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sodikpCisgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKyAgICByZXR1cm4gX1B5Qnl0ZXNfRm9ybWF0KHYsIHcpOworfQorCitzdGF0aWMgUHlOdW1iZXJNZXRob2RzIGJ5dGVzX2FzX251bWJlciA9IHsKKyAgICAwLCAgICAgICAgICAgICAgLypuYl9hZGQqLworICAgIDAsICAgICAgICAgICAgICAvKm5iX3N1YnRyYWN0Ki8KKyAgICAwLCAgICAgICAgICAgICAgLypuYl9tdWx0aXBseSovCisgICAgYnl0ZXNfbW9kLCAgICAgIC8qbmJfcmVtYWluZGVyKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCiBieXRlc19zdWJ0eXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDcxLDE0ICszMTcwLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50Iik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKCIiKTsKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CiAgICAgfQogCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayh4KSkgeworICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7CiAgICAgICAgIC8qIEVuY29kZSB2aWEgdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCi0gICAgICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHgpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgYXJndW1lbnQgd2l0aG91dCBhbiBlbmNvZGluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmNvZGluZyB3aXRob3V0IGEgc3RyaW5nIGFyZ3VtZW50Iik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBuZXcgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHgsIGVuY29kaW5nLCBlcnJvcnMpOwpAQCAtMjQ4OCwxMCArMzE4NywxMSBAQAogICAgICAgICByZXR1cm4gbmV3OwogICAgIH0KIAotICAgIC8qIElmIGl0J3Mgbm90IHVuaWNvZGUsIHRoZXJlIGNhbid0IGJlIGVuY29kaW5nIG9yIGVycm9ycyAqLwotICAgIGlmIChlbmNvZGluZyAhPSBOVUxMIHx8IGVycm9ycyAhPSBOVUxMKSB7CisgICAgaWYgKGVycm9ycyAhPSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiZW5jb2Rpbmcgb3IgZXJyb3JzIHdpdGhvdXQgYSBzdHJpbmcgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVjayh4KSA/CisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIGFyZ3VtZW50IHdpdGhvdXQgYW4gZW5jb2RpbmciIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcnMgd2l0aG91dCBhIHN0cmluZyBhcmd1bWVudCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTI1MTYsNiArMzIxNiwxMSBAQAogICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKFB5VW5pY29kZV9DaGVjayh4KSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyBhcmd1bWVudCB3aXRob3V0IGFuIGVuY29kaW5nIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICAvKiBJcyBpdCBhbiBpbnRlZ2VyPyAqLwogICAgIHNpemUgPSBQeU51bWJlcl9Bc1NzaXplX3QoeCwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CiAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewpAQCAtMjUyOCwxMSArMzIzMyw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbmV3ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKTsKKyAgICAgICAgbmV3ID0gX1B5Qnl0ZXNfRnJvbVNpemUoc2l6ZSwgMSk7CiAgICAgICAgIGlmIChuZXcgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBpZiAoc2l6ZSA+IDApCi0gICAgICAgICAgICBtZW1zZXQoKChQeUJ5dGVzT2JqZWN0KiluZXcpLT5vYl9zdmFsLCAwLCBzaXplKTsKICAgICAgICAgcmV0dXJuIG5ldzsKICAgICB9CiAKQEAgLTI2MzAsMTAgKzMzMzMsMTIgQEAKICAgICAgICByZXR1cm5pbmcgYSBzaGFyZWQgZW1wdHkgYnl0ZXMgc3RyaW5nLiBUaGlzIHJlcXVpcmVkIGJlY2F1c2Ugd2UKICAgICAgICB3YW50IHRvIGNhbGwgX1B5Qnl0ZXNfUmVzaXplKCkgdGhlIHJldHVybmVkIG9iamVjdCwgd2hpY2ggd2UgY2FuCiAgICAgICAgb25seSBkbyBvbiBieXRlcyBvYmplY3RzIHdpdGggcmVmY291bnQgPT0gMS4gKi8KLSAgICBzaXplICs9IDE7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgc2l6ZSA9IDE7CiAgICAgbmV3ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKTsKICAgICBpZiAobmV3ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzc2VydChQeV9SRUZDTlQobmV3KSA9PSAxKTsKIAogICAgIC8qIEdldCB0aGUgaXRlcmF0b3IgKi8KICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoeCk7CkBAIC0yNzM1LDcgKzM0NDAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KICAgICAocmVwcmZ1bmMpYnl0ZXNfcmVwciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgICZieXRlc19hc19udW1iZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgJmJ5dGVzX2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwogICAgICZieXRlc19hc19tYXBwaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwogICAgIChoYXNoZnVuYylieXRlc19oYXNoLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLwpAQCAtMjc3MCw3ICszNDc1LDYgQEAKIHZvaWQKIFB5Qnl0ZXNfQ29uY2F0KFB5T2JqZWN0ICoqcHYsIFB5T2JqZWN0ICp3KQogewotICAgIFB5T2JqZWN0ICp2OwogICAgIGFzc2VydChwdiAhPSBOVUxMKTsKICAgICBpZiAoKnB2ID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKQEAgLTI3NzgsOSArMzQ4Miw0NCBAQAogICAgICAgICBQeV9DTEVBUigqcHYpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHYgPSBieXRlc19jb25jYXQoKnB2LCB3KTsKLSAgICBQeV9ERUNSRUYoKnB2KTsKLSAgICAqcHYgPSB2OworCisgICAgaWYgKFB5X1JFRkNOVCgqcHYpID09IDEgJiYgUHlCeXRlc19DaGVja0V4YWN0KCpwdikpIHsKKyAgICAgICAgLyogT25seSBvbmUgcmVmZXJlbmNlLCBzbyB3ZSBjYW4gcmVzaXplIGluIHBsYWNlICovCisgICAgICAgIFB5X3NzaXplX3Qgb2xkc2l6ZTsKKyAgICAgICAgUHlfYnVmZmVyIHdiOworCisgICAgICAgIHdiLmxlbiA9IC0xOworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHcsICZ3YiwgUHlCVUZfU0lNUExFKSAhPSAwKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiY2FuJ3QgY29uY2F0ICUuMTAwcyB0byAlLjEwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodyktPnRwX25hbWUsIFB5X1RZUEUoKnB2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9DTEVBUigqcHYpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgb2xkc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoKnB2KTsKKyAgICAgICAgaWYgKG9sZHNpemUgPiBQWV9TU0laRV9UX01BWCAtIHdiLmxlbikgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZShwdiwgb2xkc2l6ZSArIHdiLmxlbikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBtZW1jcHkoUHlCeXRlc19BU19TVFJJTkcoKnB2KSArIG9sZHNpemUsIHdiLmJ1Ziwgd2IubGVuKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmd2IpOworICAgICAgICByZXR1cm47CisKKyAgICAgIGVycm9yOgorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ3Yik7CisgICAgICAgIFB5X0NMRUFSKCpwdik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbHNlIHsKKyAgICAgICAgLyogTXVsdGlwbGUgcmVmZXJlbmNlcywgbmVlZCB0byBjcmVhdGUgbmV3IG9iamVjdCAqLworICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgdiA9IGJ5dGVzX2NvbmNhdCgqcHYsIHcpOworICAgICAgICBQeV9TRVRSRUYoKnB2LCB2KTsKKyAgICB9CiB9CiAKIHZvaWQKQEAgLTI3OTEsMTQgKzM1MzAsMTQgQEAKIH0KIAogCi0vKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGJyZWFrcyB0aGUgbm90aW9uIHRoYXQgc3RyaW5ncyBhcmUgaW1tdXRhYmxlOgotICAgaXQgY2hhbmdlcyB0aGUgc2l6ZSBvZiBhIHN0cmluZy4gIFdlIGdldCBhd2F5IHdpdGggdGhpcyBvbmx5IGlmIHRoZXJlCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGJyZWFrcyB0aGUgbm90aW9uIHRoYXQgYnl0ZXMgYXJlIGltbXV0YWJsZToKKyAgIGl0IGNoYW5nZXMgdGhlIHNpemUgb2YgYSBieXRlcyBvYmplY3QuICBXZSBnZXQgYXdheSB3aXRoIHRoaXMgb25seSBpZiB0aGVyZQogICAgaXMgb25seSBvbmUgbW9kdWxlIHJlZmVyZW5jaW5nIHRoZSBvYmplY3QuICBZb3UgY2FuIGFsc28gdGhpbmsgb2YgaXQKLSAgIGFzIGNyZWF0aW5nIGEgbmV3IHN0cmluZyBvYmplY3QgYW5kIGRlc3Ryb3lpbmcgdGhlIG9sZCBvbmUsIG9ubHkKLSAgIG1vcmUgZWZmaWNpZW50bHkuICBJbiBhbnkgY2FzZSwgZG9uJ3QgdXNlIHRoaXMgaWYgdGhlIHN0cmluZyBtYXkKKyAgIGFzIGNyZWF0aW5nIGEgbmV3IGJ5dGVzIG9iamVjdCBhbmQgZGVzdHJveWluZyB0aGUgb2xkIG9uZSwgb25seQorICAgbW9yZSBlZmZpY2llbnRseS4gIEluIGFueSBjYXNlLCBkb24ndCB1c2UgdGhpcyBpZiB0aGUgYnl0ZXMgb2JqZWN0IG1heQogICAgYWxyZWFkeSBiZSBrbm93biB0byBzb21lIG90aGVyIHBhcnQgb2YgdGhlIGNvZGUuLi4KLSAgIE5vdGUgdGhhdCBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlc2l6ZSB0aGUgc3RyaW5nLCB0aGUgb3JpZ2luYWwKLSAgIHN0cmluZyBvYmplY3QgYXQgKnB2IGlzIGRlYWxsb2NhdGVkLCAqcHYgaXMgc2V0IHRvIE5VTEwsIGFuICJvdXQgb2YKKyAgIE5vdGUgdGhhdCBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlc2l6ZSB0aGUgYnl0ZXMgb2JqZWN0LCB0aGUKKyAgIG9yaWdpbmFsIGJ5dGVzIG9iamVjdCBhdCAqcHYgaXMgZGVhbGxvY2F0ZWQsICpwdiBpcyBzZXQgdG8gTlVMTCwgYW4gIm91dCBvZgogICAgbWVtb3J5IiBleGNlcHRpb24gaXMgc2V0LCBhbmQgLTEgaXMgcmV0dXJuZWQuICBFbHNlIChvbiBzdWNjZXNzKSAwIGlzCiAgICByZXR1cm5lZCwgYW5kIHRoZSB2YWx1ZSBpbiAqcHYgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgb24gaW5wdXQuCiAgICBBcyBhbHdheXMsIGFuIGV4dHJhIGJ5dGUgaXMgYWxsb2NhdGVkIGZvciBhIHRyYWlsaW5nIFwwIGJ5dGUgKG5ld3NpemUKQEAgLTI4MjEsNyArMzU2MCw3IEBACiAgICAgX1B5X0RFQ19SRUZUT1RBTDsKICAgICBfUHlfRm9yZ2V0UmVmZXJlbmNlKHYpOwogICAgICpwdiA9IChQeU9iamVjdCAqKQotICAgICAgICBQeU9iamVjdF9SRUFMTE9DKChjaGFyICopdiwgUHlCeXRlc09iamVjdF9TSVpFICsgbmV3c2l6ZSk7CisgICAgICAgIFB5T2JqZWN0X1JFQUxMT0ModiwgUHlCeXRlc09iamVjdF9TSVpFICsgbmV3c2l6ZSk7CiAgICAgaWYgKCpwdiA9PSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0X0RlbCh2KTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTI4ODcsOCArMzYyNiw4IEBACiAgICAgICAgIHJldHVybiBpdGVtOwogICAgIH0KIAotICAgIFB5X0RFQ1JFRihzZXEpOwogICAgIGl0LT5pdF9zZXEgPSBOVUxMOworICAgIFB5X0RFQ1JFRihzZXEpOwogICAgIHJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9PYmplY3RzL2NlbGxvYmplY3QuYyBiL09iamVjdHMvY2VsbG9iamVjdC5jCmluZGV4IGViNWFkOTguLjlmNGVkZGIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY2VsbG9iamVjdC5jCisrKyBiL09iamVjdHMvY2VsbG9iamVjdC5jCkBAIC0xNTAsOCArMTUwLDggQEAKICAgICAiY2VsbCIsCiAgICAgc2l6ZW9mKFB5Q2VsbE9iamVjdCksCiAgICAgMCwKLSAgICAoZGVzdHJ1Y3RvciljZWxsX2RlYWxsb2MsICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIChkZXN0cnVjdG9yKWNlbGxfZGVhbGxvYywgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgICAvKiB0cF9mbGFncyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYyljZWxsX3RyYXZlcnNlLCAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWNlbGxfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvY2xhc3NvYmplY3QuYyBiL09iamVjdHMvY2xhc3NvYmplY3QuYwppbmRleCAwYzBiZDQ3Li41ZThhYzU5IDEwMDY0NAotLS0gYS9PYmplY3RzL2NsYXNzb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjZW5kaWYKIAogX1B5X0lERU5USUZJRVIoX19uYW1lX18pOworX1B5X0lERU5USUZJRVIoX19xdWFsbmFtZV9fKTsKIAogUHlPYmplY3QgKgogUHlNZXRob2RfRnVuY3Rpb24oUHlPYmplY3QgKmltKQpAQCAtMjQzLDUxICsyNDQsMzMgQEAKIHsKICAgICBQeU9iamVjdCAqc2VsZiA9IGEtPmltX3NlbGY7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSBhLT5pbV9mdW5jOwotICAgIFB5T2JqZWN0ICprbGFzczsKLSAgICBQeU9iamVjdCAqZnVuY25hbWUgPSBOVUxMICwqa2xhc3NuYW1lID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7Ci0gICAgY2hhciAqZGVmbmFtZSA9ICI/IjsKKyAgICBQeU9iamVjdCAqZnVuY25hbWUgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpkZWZuYW1lID0gIj8iOwogCi0gICAgaWYgKHNlbGYgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGtsYXNzID0gKFB5T2JqZWN0KilQeV9UWVBFKHNlbGYpOwotCi0gICAgZnVuY25hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZ1bmMsICZQeUlkX19fbmFtZV9fKTsKKyAgICBmdW5jbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZnVuYywgJlB5SWRfX19xdWFsbmFtZV9fKTsKICAgICBpZiAoZnVuY25hbWUgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKKyAgICAgICAgZnVuY25hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZ1bmMsICZQeUlkX19fbmFtZV9fKTsKKyAgICAgICAgaWYgKGZ1bmNuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZnVuY25hbWUpKSB7CisKKyAgICBpZiAoZnVuY25hbWUgIT0gTlVMTCAmJiAhUHlVbmljb2RlX0NoZWNrKGZ1bmNuYW1lKSkgewogICAgICAgICBQeV9ERUNSRUYoZnVuY25hbWUpOwogICAgICAgICBmdW5jbmFtZSA9IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGtsYXNzID09IE5VTEwpCi0gICAgICAgIGtsYXNzbmFtZSA9IE5VTEw7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGtsYXNzbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoa2xhc3MsICZQeUlkX19fbmFtZV9fKTsKLSAgICAgICAgaWYgKGtsYXNzbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgUHlfWERFQ1JFRihmdW5jbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2soa2xhc3NuYW1lKSkgewotICAgICAgICAgICAgUHlfREVDUkVGKGtsYXNzbmFtZSk7Ci0gICAgICAgICAgICBrbGFzc25hbWUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLyogWFhYIFNob3VsZG4ndCB1c2UgcmVwcigpLyVSIGhlcmUhICovCi0gICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxib3VuZCBtZXRob2QgJVYuJVYgb2YgJVI+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbGFzc25hbWUsIGRlZm5hbWUsCisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxib3VuZCBtZXRob2QgJVYgb2YgJVI+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jbmFtZSwgZGVmbmFtZSwgc2VsZik7CiAKICAgICBQeV9YREVDUkVGKGZ1bmNuYW1lKTsKLSAgICBQeV9YREVDUkVGKGtsYXNzbmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGluaWMvYnl0ZWFycmF5b2JqZWN0LmMuaCBiL09iamVjdHMvY2xpbmljL2J5dGVhcnJheW9iamVjdC5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3YTIyMQotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvY2xpbmljL2J5dGVhcnJheW9iamVjdC5jLmgKQEAgLTAsMCArMSw2OTggQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfY2xlYXJfX2RvY19fLAorImNsZWFyKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBieXRlYXJyYXkuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX0NMRUFSX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhciIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfY2xlYXIsIE1FVEhfTk9BUkdTLCBieXRlYXJyYXlfY2xlYXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9jbGVhcl9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9jbGVhcihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gYnl0ZWFycmF5X2NsZWFyX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfY29weV9fZG9jX18sCisiY29weSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGNvcHkgb2YgQi4iKTsKKworI2RlZmluZSBCWVRFQVJSQVlfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfY29weSwgTUVUSF9OT0FSR1MsIGJ5dGVhcnJheV9jb3B5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfY29weV9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9jb3B5KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBieXRlYXJyYXlfY29weV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoYnl0ZWFycmF5X3RyYW5zbGF0ZV9fZG9jX18sCisidHJhbnNsYXRlKHRhYmxlLCBbZGVsZXRlY2hhcnNdKVxuIgorIlJldHVybiBhIGNvcHkgd2l0aCBlYWNoIGNoYXJhY3RlciBtYXBwZWQgYnkgdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLlxuIgorIlxuIgorIiAgdGFibGVcbiIKKyIgICAgVHJhbnNsYXRpb24gdGFibGUsIHdoaWNoIG11c3QgYmUgYSBieXRlcyBvYmplY3Qgb2YgbGVuZ3RoIDI1Ni5cbiIKKyJcbiIKKyJBbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcgaW4gdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGRlbGV0ZWNoYXJzIGFyZSByZW1vdmVkLlxuIgorIlRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLiIpOworCisjZGVmaW5lIEJZVEVBUlJBWV9UUkFOU0xBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7InRyYW5zbGF0ZSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfdHJhbnNsYXRlLCBNRVRIX1ZBUkFSR1MsIGJ5dGVhcnJheV90cmFuc2xhdGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV90cmFuc2xhdGVfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBncm91cF9yaWdodF8xLCBQeU9iamVjdCAqZGVsZXRlY2hhcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3RyYW5zbGF0ZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnRhYmxlOworICAgIGludCBncm91cF9yaWdodF8xID0gMDsKKyAgICBQeU9iamVjdCAqZGVsZXRlY2hhcnMgPSBOVUxMOworCisgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp0cmFuc2xhdGUiLCAmdGFibGUpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POnRyYW5zbGF0ZSIsICZ0YWJsZSwgJmRlbGV0ZWNoYXJzKSkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ5dGVhcnJheS50cmFuc2xhdGUgcmVxdWlyZXMgMSB0byAyIGFyZ3VtZW50cyIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZXR1cm5fdmFsdWUgPSBieXRlYXJyYXlfdHJhbnNsYXRlX2ltcGwoc2VsZiwgdGFibGUsIGdyb3VwX3JpZ2h0XzEsIGRlbGV0ZWNoYXJzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnl0ZWFycmF5X21ha2V0cmFuc19fZG9jX18sCisibWFrZXRyYW5zKGZybSwgdG8sIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2VhYmxlIGZvciB0aGUgYnl0ZXMgb3IgYnl0ZWFycmF5IHRyYW5zbGF0ZSBtZXRob2QuXG4iCisiXG4iCisiVGhlIHJldHVybmVkIHRhYmxlIHdpbGwgYmUgb25lIHdoZXJlIGVhY2ggYnl0ZSBpbiBmcm0gaXMgbWFwcGVkIHRvIHRoZSBieXRlIGF0XG4iCisidGhlIHNhbWUgcG9zaXRpb24gaW4gdG8uXG4iCisiXG4iCisiVGhlIGJ5dGVzIG9iamVjdHMgZnJtIGFuZCB0byBtdXN0IGJlIG9mIHRoZSBzYW1lIGxlbmd0aC4iKTsKKworI2RlZmluZSBCWVRFQVJSQVlfTUFLRVRSQU5TX01FVEhPRERFRiAgICBcCisgICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X21ha2V0cmFucywgTUVUSF9WQVJBUkdTfE1FVEhfU1RBVElDLCBieXRlYXJyYXlfbWFrZXRyYW5zX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfbWFrZXRyYW5zX2ltcGwoUHlfYnVmZmVyICpmcm0sIFB5X2J1ZmZlciAqdG8pOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X21ha2V0cmFucyh2b2lkICpudWxsLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJtID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciB0byA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp5KjptYWtldHJhbnMiLAorICAgICAgICAmZnJtLCAmdG8pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZWFycmF5X21ha2V0cmFuc19pbXBsKCZmcm0sICZ0byk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJtICovCisgICAgaWYgKGZybS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJtKTsKKyAgICAvKiBDbGVhbnVwIGZvciB0byAqLworICAgIGlmICh0by5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdG8pOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJ5dGVhcnJheV9yZXBsYWNlX19kb2NfXywKKyJyZXBsYWNlKCRzZWxmLCBvbGQsIG5ldywgY291bnQ9LTEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBjb3B5IHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyBvbGQgcmVwbGFjZWQgYnkgbmV3LlxuIgorIlxuIgorIiAgY291bnRcbiIKKyIgICAgTWF4aW11bSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgdG8gcmVwbGFjZS5cbiIKKyIgICAgLTEgKHRoZSBkZWZhdWx0IHZhbHVlKSBtZWFucyByZXBsYWNlIGFsbCBvY2N1cnJlbmNlcy5cbiIKKyJcbiIKKyJJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgY291bnQgaXMgZ2l2ZW4sIG9ubHkgdGhlIGZpcnN0IGNvdW50IG9jY3VycmVuY2VzIGFyZVxuIgorInJlcGxhY2VkLiIpOworCisjZGVmaW5lIEJZVEVBUlJBWV9SRVBMQUNFX01FVEhPRERFRiAgICBcCisgICAgeyJyZXBsYWNlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yZXBsYWNlLCBNRVRIX1ZBUkFSR1MsIGJ5dGVhcnJheV9yZXBsYWNlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfcmVwbGFjZV9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKm9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlfYnVmZmVyICpuZXcsIFB5X3NzaXplX3QgY291bnQpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3JlcGxhY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBvbGQgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIG5ldyA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9zc2l6ZV90IGNvdW50ID0gLTE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqeSp8bjpyZXBsYWNlIiwKKyAgICAgICAgJm9sZCwgJm5ldywgJmNvdW50KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ5dGVhcnJheV9yZXBsYWNlX2ltcGwoc2VsZiwgJm9sZCwgJm5ldywgY291bnQpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIG9sZCAqLworICAgIGlmIChvbGQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJm9sZCk7CisgICAgLyogQ2xlYW51cCBmb3IgbmV3ICovCisgICAgaWYgKG5ldy5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmbmV3KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfc3BsaXRfX2RvY19fLAorInNwbGl0KCRzZWxmLCAvLCBzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBsaXN0IG9mIHRoZSBzZWN0aW9ucyBpbiB0aGUgYnl0ZWFycmF5LCB1c2luZyBzZXAgYXMgdGhlIGRlbGltaXRlci5cbiIKKyJcbiIKKyIgIHNlcFxuIgorIiAgICBUaGUgZGVsaW1pdGVyIGFjY29yZGluZyB3aGljaCB0byBzcGxpdCB0aGUgYnl0ZWFycmF5LlxuIgorIiAgICBOb25lICh0aGUgZGVmYXVsdCB2YWx1ZSkgbWVhbnMgc3BsaXQgb24gQVNDSUkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG4iCisiICAgIChzcGFjZSwgdGFiLCByZXR1cm4sIG5ld2xpbmUsIGZvcm1mZWVkLCB2ZXJ0aWNhbCB0YWIpLlxuIgorIiAgbWF4c3BsaXRcbiIKKyIgICAgTWF4aW11bSBudW1iZXIgb2Ygc3BsaXRzIHRvIGRvLlxuIgorIiAgICAtMSAodGhlIGRlZmF1bHQgdmFsdWUpIG1lYW5zIG5vIGxpbWl0LiIpOworCisjZGVmaW5lIEJZVEVBUlJBWV9TUExJVF9NRVRIT0RERUYgICAgXAorICAgIHsic3BsaXQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3NwbGl0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgYnl0ZWFycmF5X3NwbGl0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfc3BsaXRfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNlcCwKKyAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4c3BsaXQpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3NwbGl0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InNlcCIsICJtYXhzcGxpdCIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpzZXAgPSBQeV9Ob25lOworICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPbjpzcGxpdCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnNlcCwgJm1heHNwbGl0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ5dGVhcnJheV9zcGxpdF9pbXBsKHNlbGYsIHNlcCwgbWF4c3BsaXQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfcGFydGl0aW9uX19kb2NfXywKKyJwYXJ0aXRpb24oJHNlbGYsIHNlcCwgLylcbiIKKyItLVxuIgorIlxuIgorIlBhcnRpdGlvbiB0aGUgYnl0ZWFycmF5IGludG8gdGhyZWUgcGFydHMgdXNpbmcgdGhlIGdpdmVuIHNlcGFyYXRvci5cbiIKKyJcbiIKKyJUaGlzIHdpbGwgc2VhcmNoIGZvciB0aGUgc2VwYXJhdG9yIHNlcCBpbiB0aGUgYnl0ZWFycmF5LiBJZiB0aGUgc2VwYXJhdG9yIGlzXG4iCisiZm91bmQsIHJldHVybnMgYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZVxuIgorInNlcGFyYXRvciBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciBpdC5cbiIKKyJcbiIKKyJJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgb3JpZ2luYWxcbiIKKyJieXRlYXJyYXkgb2JqZWN0IGFuZCB0d28gZW1wdHkgYnl0ZWFycmF5IG9iamVjdHMuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX1BBUlRJVElPTl9NRVRIT0RERUYgICAgXAorICAgIHsicGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9wYXJ0aXRpb24sIE1FVEhfTywgYnl0ZWFycmF5X3BhcnRpdGlvbl9fZG9jX199LAorCitQeURvY19TVFJWQVIoYnl0ZWFycmF5X3JwYXJ0aXRpb25fX2RvY19fLAorInJwYXJ0aXRpb24oJHNlbGYsIHNlcCwgLylcbiIKKyItLVxuIgorIlxuIgorIlBhcnRpdGlvbiB0aGUgYnl0ZXMgaW50byB0aHJlZSBwYXJ0cyB1c2luZyB0aGUgZ2l2ZW4gc2VwYXJhdG9yLlxuIgorIlxuIgorIlRoaXMgd2lsbCBzZWFyY2ggZm9yIHRoZSBzZXBhcmF0b3Igc2VwIGluIHRoZSBieXRlYXJyYXksIHN0YXJ0aW5nIGFuZCB0aGUgZW5kLlxuIgorIklmIHRoZSBzZXBhcmF0b3IgaXMgZm91bmQsIHJldHVybnMgYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZVxuIgorInNlcGFyYXRvciwgdGhlIHNlcGFyYXRvciBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciBpdC5cbiIKKyJcbiIKKyJJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgYnl0ZWFycmF5XG4iCisib2JqZWN0cyBhbmQgdGhlIG9yaWdpbmFsIGJ5dGVhcnJheSBvYmplY3QuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX1JQQVJUSVRJT05fTUVUSE9EREVGICAgIFwKKyAgICB7InJwYXJ0aXRpb24iLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JwYXJ0aXRpb24sIE1FVEhfTywgYnl0ZWFycmF5X3JwYXJ0aXRpb25fX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGJ5dGVhcnJheV9yc3BsaXRfX2RvY19fLAorInJzcGxpdCgkc2VsZiwgLywgc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgbGlzdCBvZiB0aGUgc2VjdGlvbnMgaW4gdGhlIGJ5dGVhcnJheSwgdXNpbmcgc2VwIGFzIHRoZSBkZWxpbWl0ZXIuXG4iCisiXG4iCisiICBzZXBcbiIKKyIgICAgVGhlIGRlbGltaXRlciBhY2NvcmRpbmcgd2hpY2ggdG8gc3BsaXQgdGhlIGJ5dGVhcnJheS5cbiIKKyIgICAgTm9uZSAodGhlIGRlZmF1bHQgdmFsdWUpIG1lYW5zIHNwbGl0IG9uIEFTQ0lJIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuIgorIiAgICAoc3BhY2UsIHRhYiwgcmV0dXJuLCBuZXdsaW5lLCBmb3JtZmVlZCwgdmVydGljYWwgdGFiKS5cbiIKKyIgIG1heHNwbGl0XG4iCisiICAgIE1heGltdW0gbnVtYmVyIG9mIHNwbGl0cyB0byBkby5cbiIKKyIgICAgLTEgKHRoZSBkZWZhdWx0IHZhbHVlKSBtZWFucyBubyBsaW1pdC5cbiIKKyJcbiIKKyJTcGxpdHRpbmcgaXMgZG9uZSBzdGFydGluZyBhdCB0aGUgZW5kIG9mIHRoZSBieXRlYXJyYXkgYW5kIHdvcmtpbmcgdG8gdGhlIGZyb250LiIpOworCisjZGVmaW5lIEJZVEVBUlJBWV9SU1BMSVRfTUVUSE9EREVGICAgIFwKKyAgICB7InJzcGxpdCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcnNwbGl0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgYnl0ZWFycmF5X3JzcGxpdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3JzcGxpdF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwLAorICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4c3BsaXQpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3JzcGxpdChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzZXAiLCAibWF4c3BsaXQiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc2VwID0gUHlfTm9uZTsKKyAgICBQeV9zc2l6ZV90IG1heHNwbGl0ID0gLTE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8T246cnNwbGl0IiwgX2tleXdvcmRzLAorICAgICAgICAmc2VwLCAmbWF4c3BsaXQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZWFycmF5X3JzcGxpdF9pbXBsKHNlbGYsIHNlcCwgbWF4c3BsaXQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfcmV2ZXJzZV9fZG9jX18sCisicmV2ZXJzZSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSB2YWx1ZXMgaW4gQiBpbiBwbGFjZS4iKTsKKworI2RlZmluZSBCWVRFQVJSQVlfUkVWRVJTRV9NRVRIT0RERUYgICAgXAorICAgIHsicmV2ZXJzZSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmV2ZXJzZSwgTUVUSF9OT0FSR1MsIGJ5dGVhcnJheV9yZXZlcnNlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfcmV2ZXJzZV9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9yZXZlcnNlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBieXRlYXJyYXlfcmV2ZXJzZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoYnl0ZWFycmF5X2luc2VydF9fZG9jX18sCisiaW5zZXJ0KCRzZWxmLCBpbmRleCwgaXRlbSwgLylcbiIKKyItLVxuIgorIlxuIgorIkluc2VydCBhIHNpbmdsZSBpdGVtIGludG8gdGhlIGJ5dGVhcnJheSBiZWZvcmUgdGhlIGdpdmVuIGluZGV4LlxuIgorIlxuIgorIiAgaW5kZXhcbiIKKyIgICAgVGhlIGluZGV4IHdoZXJlIHRoZSB2YWx1ZSBpcyB0byBiZSBpbnNlcnRlZC5cbiIKKyIgIGl0ZW1cbiIKKyIgICAgVGhlIGl0ZW0gdG8gYmUgaW5zZXJ0ZWQuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX0lOU0VSVF9NRVRIT0RERUYgICAgXAorICAgIHsiaW5zZXJ0IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9pbnNlcnQsIE1FVEhfVkFSQVJHUywgYnl0ZWFycmF5X2luc2VydF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X2luc2VydF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGluZGV4LCBpbnQgaXRlbSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfaW5zZXJ0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGluZGV4OworICAgIGludCBpdGVtOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJuTyY6aW5zZXJ0IiwKKyAgICAgICAgJmluZGV4LCBfZ2V0Ynl0ZXZhbHVlLCAmaXRlbSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlYXJyYXlfaW5zZXJ0X2ltcGwoc2VsZiwgaW5kZXgsIGl0ZW0pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfYXBwZW5kX19kb2NfXywKKyJhcHBlbmQoJHNlbGYsIGl0ZW0sIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJBcHBlbmQgYSBzaW5nbGUgaXRlbSB0byB0aGUgZW5kIG9mIHRoZSBieXRlYXJyYXkuXG4iCisiXG4iCisiICBpdGVtXG4iCisiICAgIFRoZSBpdGVtIHRvIGJlIGFwcGVuZGVkLiIpOworCisjZGVmaW5lIEJZVEVBUlJBWV9BUFBFTkRfTUVUSE9EREVGICAgIFwKKyAgICB7ImFwcGVuZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfYXBwZW5kLCBNRVRIX08sIGJ5dGVhcnJheV9hcHBlbmRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9hcHBlbmRfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgaW50IGl0ZW0pOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X2FwcGVuZChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgaXRlbTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyY6YXBwZW5kIiwgX2dldGJ5dGV2YWx1ZSwgJml0ZW0pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZWFycmF5X2FwcGVuZF9pbXBsKHNlbGYsIGl0ZW0pOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfZXh0ZW5kX19kb2NfXywKKyJleHRlbmQoJHNlbGYsIGl0ZXJhYmxlX29mX2ludHMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJBcHBlbmQgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZSBpdGVyYXRvciBvciBzZXF1ZW5jZSB0byB0aGUgZW5kIG9mIHRoZSBieXRlYXJyYXkuXG4iCisiXG4iCisiICBpdGVyYWJsZV9vZl9pbnRzXG4iCisiICAgIFRoZSBpdGVyYWJsZSBvZiBpdGVtcyB0byBhcHBlbmQuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX0VYVEVORF9NRVRIT0RERUYgICAgXAorICAgIHsiZXh0ZW5kIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9leHRlbmQsIE1FVEhfTywgYnl0ZWFycmF5X2V4dGVuZF9fZG9jX199LAorCitQeURvY19TVFJWQVIoYnl0ZWFycmF5X3BvcF9fZG9jX18sCisicG9wKCRzZWxmLCBpbmRleD0tMSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlbW92ZSBhbmQgcmV0dXJuIGEgc2luZ2xlIGl0ZW0gZnJvbSBCLlxuIgorIlxuIgorIiAgaW5kZXhcbiIKKyIgICAgVGhlIGluZGV4IGZyb20gd2hlcmUgdG8gcmVtb3ZlIHRoZSBpdGVtLlxuIgorIiAgICAtMSAodGhlIGRlZmF1bHQgdmFsdWUpIG1lYW5zIHJlbW92ZSB0aGUgbGFzdCBpdGVtLlxuIgorIlxuIgorIklmIG5vIGluZGV4IGFyZ3VtZW50IGlzIGdpdmVuLCB3aWxsIHBvcCB0aGUgbGFzdCBpdGVtLiIpOworCisjZGVmaW5lIEJZVEVBUlJBWV9QT1BfTUVUSE9EREVGICAgIFwKKyAgICB7InBvcCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcG9wLCBNRVRIX1ZBUkFSR1MsIGJ5dGVhcnJheV9wb3BfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9wb3BfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpbmRleCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfcG9wKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gLTE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnBvcCIsCisgICAgICAgICZpbmRleCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlYXJyYXlfcG9wX2ltcGwoc2VsZiwgaW5kZXgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfcmVtb3ZlX19kb2NfXywKKyJyZW1vdmUoJHNlbGYsIHZhbHVlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVtb3ZlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgdmFsdWUgaW4gdGhlIGJ5dGVhcnJheS5cbiIKKyJcbiIKKyIgIHZhbHVlXG4iCisiICAgIFRoZSB2YWx1ZSB0byByZW1vdmUuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX1JFTU9WRV9NRVRIT0RERUYgICAgXAorICAgIHsicmVtb3ZlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yZW1vdmUsIE1FVEhfTywgYnl0ZWFycmF5X3JlbW92ZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3JlbW92ZV9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBpbnQgdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3JlbW92ZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOnJlbW92ZSIsIF9nZXRieXRldmFsdWUsICZ2YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlYXJyYXlfcmVtb3ZlX2ltcGwoc2VsZiwgdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfc3RyaXBfX2RvY19fLAorInN0cmlwKCRzZWxmLCBieXRlcz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgYnl0ZXMgY29udGFpbmVkIGluIHRoZSBhcmd1bWVudC5cbiIKKyJcbiIKKyJJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCBvciBOb25lLCBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlLiIpOworCisjZGVmaW5lIEJZVEVBUlJBWV9TVFJJUF9NRVRIT0RERUYgICAgXAorICAgIHsic3RyaXAiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3N0cmlwLCBNRVRIX1ZBUkFSR1MsIGJ5dGVhcnJheV9zdHJpcF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3N0cmlwX2ltcGwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpieXRlcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpieXRlcyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzdHJpcCIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZieXRlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlYXJyYXlfc3RyaXBfaW1wbChzZWxmLCBieXRlcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJ5dGVhcnJheV9sc3RyaXBfX2RvY19fLAorImxzdHJpcCgkc2VsZiwgYnl0ZXM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlN0cmlwIGxlYWRpbmcgYnl0ZXMgY29udGFpbmVkIGluIHRoZSBhcmd1bWVudC5cbiIKKyJcbiIKKyJJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCBvciBOb25lLCBzdHJpcCBsZWFkaW5nIEFTQ0lJIHdoaXRlc3BhY2UuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX0xTVFJJUF9NRVRIT0RERUYgICAgXAorICAgIHsibHN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9sc3RyaXAsIE1FVEhfVkFSQVJHUywgYnl0ZWFycmF5X2xzdHJpcF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X2xzdHJpcF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYnl0ZXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X2xzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmJ5dGVzID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImxzdHJpcCIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZieXRlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlYXJyYXlfbHN0cmlwX2ltcGwoc2VsZiwgYnl0ZXMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfcnN0cmlwX19kb2NfXywKKyJyc3RyaXAoJHNlbGYsIGJ5dGVzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTdHJpcCB0cmFpbGluZyBieXRlcyBjb250YWluZWQgaW4gdGhlIGFyZ3VtZW50LlxuIgorIlxuIgorIklmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkIG9yIE5vbmUsIHN0cmlwIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX1JTVFJJUF9NRVRIT0RERUYgICAgXAorICAgIHsicnN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yc3RyaXAsIE1FVEhfVkFSQVJHUywgYnl0ZWFycmF5X3JzdHJpcF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3JzdHJpcF9pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYnl0ZXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3JzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmJ5dGVzID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInJzdHJpcCIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZieXRlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlYXJyYXlfcnN0cmlwX2ltcGwoc2VsZiwgYnl0ZXMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfZGVjb2RlX19kb2NfXywKKyJkZWNvZGUoJHNlbGYsIC8sIGVuY29kaW5nPVwndXRmLThcJywgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCisiLS1cbiIKKyJcbiIKKyJEZWNvZGUgdGhlIGJ5dGVhcnJheSB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgZW5jb2RpbmcuXG4iCisiXG4iCisiICBlbmNvZGluZ1xuIgorIiAgICBUaGUgZW5jb2Rpbmcgd2l0aCB3aGljaCB0byBkZWNvZGUgdGhlIGJ5dGVhcnJheS5cbiIKKyIgIGVycm9yc1xuIgorIiAgICBUaGUgZXJyb3IgaGFuZGxpbmcgc2NoZW1lIHRvIHVzZSBmb3IgdGhlIGhhbmRsaW5nIG9mIGRlY29kaW5nIGVycm9ycy5cbiIKKyIgICAgVGhlIGRlZmF1bHQgaXMgXCdzdHJpY3RcJyBtZWFuaW5nIHRoYXQgZGVjb2RpbmcgZXJyb3JzIHJhaXNlIGFcbiIKKyIgICAgVW5pY29kZURlY29kZUVycm9yLiBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIFwnaWdub3JlXCcgYW5kIFwncmVwbGFjZVwnXG4iCisiICAgIGFzIHdlbGwgYXMgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB3aXRoIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0XG4iCisiICAgIGNhbiBoYW5kbGUgVW5pY29kZURlY29kZUVycm9ycy4iKTsKKworI2RlZmluZSBCWVRFQVJSQVlfREVDT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2RlY29kZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIGJ5dGVhcnJheV9kZWNvZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9kZWNvZGVfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9kZWNvZGUoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZW5jb2RpbmciLCAiZXJyb3JzIiwgTlVMTH07CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZGVjb2RlIiwgX2tleXdvcmRzLAorICAgICAgICAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZWFycmF5X2RlY29kZV9pbXBsKHNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfam9pbl9fZG9jX18sCisiam9pbigkc2VsZiwgaXRlcmFibGVfb2ZfYnl0ZXMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb25jYXRlbmF0ZSBhbnkgbnVtYmVyIG9mIGJ5dGVzL2J5dGVhcnJheSBvYmplY3RzLlxuIgorIlxuIgorIlRoZSBieXRlYXJyYXkgd2hvc2UgbWV0aG9kIGlzIGNhbGxlZCBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIGVhY2ggcGFpci5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgbmV3IGJ5dGVhcnJheSBvYmplY3QuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX0pPSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImpvaW4iLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2pvaW4sIE1FVEhfTywgYnl0ZWFycmF5X2pvaW5fX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGJ5dGVhcnJheV9zcGxpdGxpbmVzX19kb2NfXywKKyJzcGxpdGxpbmVzKCRzZWxmLCAvLCBrZWVwZW5kcz1GYWxzZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBieXRlYXJyYXksIGJyZWFraW5nIGF0IGxpbmUgYm91bmRhcmllcy5cbiIKKyJcbiIKKyJMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdCB1bmxlc3Mga2VlcGVuZHMgaXMgZ2l2ZW4gYW5kXG4iCisidHJ1ZS4iKTsKKworI2RlZmluZSBCWVRFQVJSQVlfU1BMSVRMSU5FU19NRVRIT0RERUYgICAgXAorICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfc3BsaXRsaW5lcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIGJ5dGVhcnJheV9zcGxpdGxpbmVzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfc3BsaXRsaW5lc19pbXBsKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBpbnQga2VlcGVuZHMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3NwbGl0bGluZXMoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsia2VlcGVuZHMiLCBOVUxMfTsKKyAgICBpbnQga2VlcGVuZHMgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGk6c3BsaXRsaW5lcyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmtlZXBlbmRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ5dGVhcnJheV9zcGxpdGxpbmVzX2ltcGwoc2VsZiwga2VlcGVuZHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfZnJvbWhleF9fZG9jX18sCisiZnJvbWhleCgkdHlwZSwgc3RyaW5nLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgYnl0ZWFycmF5IG9iamVjdCBmcm9tIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIG51bWJlcnMuXG4iCisiXG4iCisiU3BhY2VzIGJldHdlZW4gdHdvIG51bWJlcnMgYXJlIGFjY2VwdGVkLlxuIgorIkV4YW1wbGU6IGJ5dGVhcnJheS5mcm9taGV4KFwnQjkgMDFFRlwnKSAtPiBieXRlYXJyYXkoYlwnXFxcXHhiOVxcXFx4MDFcXFxceGVmXCcpIik7CisKKyNkZWZpbmUgQllURUFSUkFZX0ZST01IRVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImZyb21oZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2Zyb21oZXgsIE1FVEhfT3xNRVRIX0NMQVNTLCBieXRlYXJyYXlfZnJvbWhleF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X2Zyb21oZXhfaW1wbChQeU9iamVjdCpjbHMsIFB5T2JqZWN0ICpzdHJpbmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X2Zyb21oZXgoUHlUeXBlT2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN0cmluZzsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiVTpmcm9taGV4IiwgJnN0cmluZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlYXJyYXlfZnJvbWhleF9pbXBsKChQeU9iamVjdCopY2xzLCBzdHJpbmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlYXJyYXlfcmVkdWNlX19kb2NfXywKKyJfX3JlZHVjZV9fKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4iKTsKKworI2RlZmluZSBCWVRFQVJSQVlfUkVEVUNFX01FVEhPRERFRiAgICBcCisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBieXRlYXJyYXlfcmVkdWNlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfcmVkdWNlX2ltcGwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3JlZHVjZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gYnl0ZWFycmF5X3JlZHVjZV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoYnl0ZWFycmF5X3JlZHVjZV9leF9fZG9jX18sCisiX19yZWR1Y2VfZXhfXygkc2VsZiwgcHJvdG89MCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcuIik7CisKKyNkZWZpbmUgQllURUFSUkFZX1JFRFVDRV9FWF9NRVRIT0RERUYgICAgXAorICAgIHsiX19yZWR1Y2VfZXhfXyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfcmVkdWNlX2V4LCBNRVRIX1ZBUkFSR1MsIGJ5dGVhcnJheV9yZWR1Y2VfZXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9yZWR1Y2VfZXhfaW1wbChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgaW50IHByb3RvKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVhcnJheV9yZWR1Y2VfZXgoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBwcm90byA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOl9fcmVkdWNlX2V4X18iLAorICAgICAgICAmcHJvdG8pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZWFycmF5X3JlZHVjZV9leF9pbXBsKHNlbGYsIHByb3RvKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnl0ZWFycmF5X3NpemVvZl9fZG9jX18sCisiX19zaXplb2ZfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgdGhlIHNpemUgb2YgdGhlIGJ5dGVhcnJheSBvYmplY3QgaW4gbWVtb3J5LCBpbiBieXRlcy4iKTsKKworI2RlZmluZSBCWVRFQVJSQVlfU0laRU9GX01FVEhPRERFRiAgICBcCisgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9zaXplb2YsIE1FVEhfTk9BUkdTLCBieXRlYXJyYXlfc2l6ZW9mX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlYXJyYXlfc2l6ZW9mX2ltcGwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZWFycmF5X3NpemVvZihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gYnl0ZWFycmF5X3NpemVvZl9pbXBsKHNlbGYpOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk2NmMxNWZmMjJjNWUyNDMgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGluaWMvYnl0ZXNvYmplY3QuYy5oIGIvT2JqZWN0cy9jbGluaWMvYnl0ZXNvYmplY3QuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWE1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL2NsaW5pYy9ieXRlc29iamVjdC5jLmgKQEAgLTAsMCArMSw0ODcgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihieXRlc19zcGxpdF9fZG9jX18sCisic3BsaXQoJHNlbGYsIC8sIHNlcD1Ob25lLCBtYXhzcGxpdD0tMSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGxpc3Qgb2YgdGhlIHNlY3Rpb25zIGluIHRoZSBieXRlcywgdXNpbmcgc2VwIGFzIHRoZSBkZWxpbWl0ZXIuXG4iCisiXG4iCisiICBzZXBcbiIKKyIgICAgVGhlIGRlbGltaXRlciBhY2NvcmRpbmcgd2hpY2ggdG8gc3BsaXQgdGhlIGJ5dGVzLlxuIgorIiAgICBOb25lICh0aGUgZGVmYXVsdCB2YWx1ZSkgbWVhbnMgc3BsaXQgb24gQVNDSUkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG4iCisiICAgIChzcGFjZSwgdGFiLCByZXR1cm4sIG5ld2xpbmUsIGZvcm1mZWVkLCB2ZXJ0aWNhbCB0YWIpLlxuIgorIiAgbWF4c3BsaXRcbiIKKyIgICAgTWF4aW11bSBudW1iZXIgb2Ygc3BsaXRzIHRvIGRvLlxuIgorIiAgICAtMSAodGhlIGRlZmF1bHQgdmFsdWUpIG1lYW5zIG5vIGxpbWl0LiIpOworCisjZGVmaW5lIEJZVEVTX1NQTElUX01FVEhPRERFRiAgICBcCisgICAgeyJzcGxpdCIsIChQeUNGdW5jdGlvbilieXRlc19zcGxpdCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIGJ5dGVzX3NwbGl0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19zcGxpdF9pbXBsKFB5Qnl0ZXNPYmplY3Qqc2VsZiwgUHlPYmplY3QgKnNlcCwgUHlfc3NpemVfdCBtYXhzcGxpdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19zcGxpdChQeUJ5dGVzT2JqZWN0KnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic2VwIiwgIm1heHNwbGl0IiwgTlVMTH07CisgICAgUHlPYmplY3QgKnNlcCA9IFB5X05vbmU7CisgICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE9uOnNwbGl0IiwgX2tleXdvcmRzLAorICAgICAgICAmc2VwLCAmbWF4c3BsaXQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZXNfc3BsaXRfaW1wbChzZWxmLCBzZXAsIG1heHNwbGl0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnl0ZXNfcGFydGl0aW9uX19kb2NfXywKKyJwYXJ0aXRpb24oJHNlbGYsIHNlcCwgLylcbiIKKyItLVxuIgorIlxuIgorIlBhcnRpdGlvbiB0aGUgYnl0ZXMgaW50byB0aHJlZSBwYXJ0cyB1c2luZyB0aGUgZ2l2ZW4gc2VwYXJhdG9yLlxuIgorIlxuIgorIlRoaXMgd2lsbCBzZWFyY2ggZm9yIHRoZSBzZXBhcmF0b3Igc2VwIGluIHRoZSBieXRlcy4gSWYgdGhlIHNlcGFyYXRvciBpcyBmb3VuZCxcbiIKKyJyZXR1cm5zIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4iCisiaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuXG4iCisiXG4iCisiSWYgdGhlIHNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybnMgYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGJ5dGVzXG4iCisib2JqZWN0IGFuZCB0d28gZW1wdHkgYnl0ZXMgb2JqZWN0cy4iKTsKKworI2RlZmluZSBCWVRFU19QQVJUSVRJT05fTUVUSE9EREVGICAgIFwKKyAgICB7InBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbilieXRlc19wYXJ0aXRpb24sIE1FVEhfTywgYnl0ZXNfcGFydGl0aW9uX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19wYXJ0aXRpb25faW1wbChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKnNlcCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19wYXJ0aXRpb24oUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgc2VwID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ5KjpwYXJ0aXRpb24iLCAmc2VwKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ5dGVzX3BhcnRpdGlvbl9pbXBsKHNlbGYsICZzZXApOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHNlcCAqLworICAgIGlmIChzZXAub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlcCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnl0ZXNfcnBhcnRpdGlvbl9fZG9jX18sCisicnBhcnRpdGlvbigkc2VsZiwgc2VwLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUGFydGl0aW9uIHRoZSBieXRlcyBpbnRvIHRocmVlIHBhcnRzIHVzaW5nIHRoZSBnaXZlbiBzZXBhcmF0b3IuXG4iCisiXG4iCisiVGhpcyB3aWxsIHNlYXJjaCBmb3IgdGhlIHNlcGFyYXRvciBzZXAgaW4gdGhlIGJ5dGVzLCBzdGFydGluZyBhbmQgdGhlIGVuZC4gSWZcbiIKKyJ0aGUgc2VwYXJhdG9yIGlzIGZvdW5kLCByZXR1cm5zIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGVcbiIKKyJzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3IgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuXG4iCisiXG4iCisiSWYgdGhlIHNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybnMgYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IGJ5dGVzXG4iCisib2JqZWN0cyBhbmQgdGhlIG9yaWdpbmFsIGJ5dGVzIG9iamVjdC4iKTsKKworI2RlZmluZSBCWVRFU19SUEFSVElUSU9OX01FVEhPRERFRiAgICBcCisgICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JwYXJ0aXRpb24sIE1FVEhfTywgYnl0ZXNfcnBhcnRpdGlvbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfcnBhcnRpdGlvbl9pbXBsKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqc2VwKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX3JwYXJ0aXRpb24oUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgc2VwID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ5KjpycGFydGl0aW9uIiwgJnNlcCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlc19ycGFydGl0aW9uX2ltcGwoc2VsZiwgJnNlcCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3Igc2VwICovCisgICAgaWYgKHNlcC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VwKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlc19yc3BsaXRfX2RvY19fLAorInJzcGxpdCgkc2VsZiwgLywgc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgbGlzdCBvZiB0aGUgc2VjdGlvbnMgaW4gdGhlIGJ5dGVzLCB1c2luZyBzZXAgYXMgdGhlIGRlbGltaXRlci5cbiIKKyJcbiIKKyIgIHNlcFxuIgorIiAgICBUaGUgZGVsaW1pdGVyIGFjY29yZGluZyB3aGljaCB0byBzcGxpdCB0aGUgYnl0ZXMuXG4iCisiICAgIE5vbmUgKHRoZSBkZWZhdWx0IHZhbHVlKSBtZWFucyBzcGxpdCBvbiBBU0NJSSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcbiIKKyIgICAgKHNwYWNlLCB0YWIsIHJldHVybiwgbmV3bGluZSwgZm9ybWZlZWQsIHZlcnRpY2FsIHRhYikuXG4iCisiICBtYXhzcGxpdFxuIgorIiAgICBNYXhpbXVtIG51bWJlciBvZiBzcGxpdHMgdG8gZG8uXG4iCisiICAgIC0xICh0aGUgZGVmYXVsdCB2YWx1ZSkgbWVhbnMgbm8gbGltaXQuXG4iCisiXG4iCisiU3BsaXR0aW5nIGlzIGRvbmUgc3RhcnRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgYnl0ZXMgYW5kIHdvcmtpbmcgdG8gdGhlIGZyb250LiIpOworCisjZGVmaW5lIEJZVEVTX1JTUExJVF9NRVRIT0RERUYgICAgXAorICAgIHsicnNwbGl0IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JzcGxpdCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIGJ5dGVzX3JzcGxpdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfcnNwbGl0X2ltcGwoUHlCeXRlc09iamVjdCpzZWxmLCBQeU9iamVjdCAqc2VwLCBQeV9zc2l6ZV90IG1heHNwbGl0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX3JzcGxpdChQeUJ5dGVzT2JqZWN0KnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsic2VwIiwgIm1heHNwbGl0IiwgTlVMTH07CisgICAgUHlPYmplY3QgKnNlcCA9IFB5X05vbmU7CisgICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE9uOnJzcGxpdCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnNlcCwgJm1heHNwbGl0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ5dGVzX3JzcGxpdF9pbXBsKHNlbGYsIHNlcCwgbWF4c3BsaXQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlc19qb2luX19kb2NfXywKKyJqb2luKCRzZWxmLCBpdGVyYWJsZV9vZl9ieXRlcywgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbmNhdGVuYXRlIGFueSBudW1iZXIgb2YgYnl0ZXMgb2JqZWN0cy5cbiIKKyJcbiIKKyJUaGUgYnl0ZXMgd2hvc2UgbWV0aG9kIGlzIGNhbGxlZCBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIGVhY2ggcGFpci5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgbmV3IGJ5dGVzIG9iamVjdC5cbiIKKyJcbiIKKyJFeGFtcGxlOiBiXCcuXCcuam9pbihbYlwnYWJcJywgYlwncHFcJywgYlwncnNcJ10pIC0+IGJcJ2FiLnBxLnJzXCcuIik7CisKKyNkZWZpbmUgQllURVNfSk9JTl9NRVRIT0RERUYgICAgXAorICAgIHsiam9pbiIsIChQeUNGdW5jdGlvbilieXRlc19qb2luLCBNRVRIX08sIGJ5dGVzX2pvaW5fX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGJ5dGVzX3N0cmlwX19kb2NfXywKKyJzdHJpcCgkc2VsZiwgYnl0ZXM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGJ5dGVzIGNvbnRhaW5lZCBpbiB0aGUgYXJndW1lbnQuXG4iCisiXG4iCisiSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQgb3IgTm9uZSwgc3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZS4iKTsKKworI2RlZmluZSBCWVRFU19TVFJJUF9NRVRIT0RERUYgICAgXAorICAgIHsic3RyaXAiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfc3RyaXAsIE1FVEhfVkFSQVJHUywgYnl0ZXNfc3RyaXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX3N0cmlwX2ltcGwoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmJ5dGVzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX3N0cmlwKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpieXRlcyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzdHJpcCIsCisgICAgICAgIDAsIDEsCisgICAgICAgICZieXRlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBieXRlc19zdHJpcF9pbXBsKHNlbGYsIGJ5dGVzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnl0ZXNfbHN0cmlwX19kb2NfXywKKyJsc3RyaXAoJHNlbGYsIGJ5dGVzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTdHJpcCBsZWFkaW5nIGJ5dGVzIGNvbnRhaW5lZCBpbiB0aGUgYXJndW1lbnQuXG4iCisiXG4iCisiSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQgb3IgTm9uZSwgc3RyaXAgbGVhZGluZyAgQVNDSUkgd2hpdGVzcGFjZS4iKTsKKworI2RlZmluZSBCWVRFU19MU1RSSVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImxzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlc19sc3RyaXAsIE1FVEhfVkFSQVJHUywgYnl0ZXNfbHN0cmlwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19sc3RyaXBfaW1wbChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYnl0ZXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfbHN0cmlwKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpieXRlcyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJsc3RyaXAiLAorICAgICAgICAwLCAxLAorICAgICAgICAmYnl0ZXMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZXNfbHN0cmlwX2ltcGwoc2VsZiwgYnl0ZXMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlc19yc3RyaXBfX2RvY19fLAorInJzdHJpcCgkc2VsZiwgYnl0ZXM9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlN0cmlwIHRyYWlsaW5nIGJ5dGVzIGNvbnRhaW5lZCBpbiB0aGUgYXJndW1lbnQuXG4iCisiXG4iCisiSWYgdGhlIGFyZ3VtZW50IGlzIG9taXR0ZWQgb3IgTm9uZSwgc3RyaXAgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZS4iKTsKKworI2RlZmluZSBCWVRFU19SU1RSSVBfTUVUSE9EREVGICAgIFwKKyAgICB7InJzdHJpcCIsIChQeUNGdW5jdGlvbilieXRlc19yc3RyaXAsIE1FVEhfVkFSQVJHUywgYnl0ZXNfcnN0cmlwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19yc3RyaXBfaW1wbChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYnl0ZXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfcnN0cmlwKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpieXRlcyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJyc3RyaXAiLAorICAgICAgICAwLCAxLAorICAgICAgICAmYnl0ZXMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZXNfcnN0cmlwX2ltcGwoc2VsZiwgYnl0ZXMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlc190cmFuc2xhdGVfX2RvY19fLAorInRyYW5zbGF0ZSh0YWJsZSwgW2RlbGV0ZWNoYXJzXSlcbiIKKyJSZXR1cm4gYSBjb3B5IHdpdGggZWFjaCBjaGFyYWN0ZXIgbWFwcGVkIGJ5IHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZS5cbiIKKyJcbiIKKyIgIHRhYmxlXG4iCisiICAgIFRyYW5zbGF0aW9uIHRhYmxlLCB3aGljaCBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0IG9mIGxlbmd0aCAyNTYuXG4iCisiXG4iCisiQWxsIGNoYXJhY3RlcnMgb2NjdXJyaW5nIGluIHRoZSBvcHRpb25hbCBhcmd1bWVudCBkZWxldGVjaGFycyBhcmUgcmVtb3ZlZC5cbiIKKyJUaGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZS4iKTsKKworI2RlZmluZSBCWVRFU19UUkFOU0xBVEVfTUVUSE9EREVGICAgIFwKKyAgICB7InRyYW5zbGF0ZSIsIChQeUNGdW5jdGlvbilieXRlc190cmFuc2xhdGUsIE1FVEhfVkFSQVJHUywgYnl0ZXNfdHJhbnNsYXRlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc190cmFuc2xhdGVfaW1wbChQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdGFibGUsIGludCBncm91cF9yaWdodF8xLAorICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlbGV0ZWNoYXJzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX3RyYW5zbGF0ZShQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdGFibGU7CisgICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOworICAgIFB5T2JqZWN0ICpkZWxldGVjaGFycyA9IE5VTEw7CisKKyAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOnRyYW5zbGF0ZSIsICZ0YWJsZSkpCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086dHJhbnNsYXRlIiwgJnRhYmxlLCAmZGVsZXRlY2hhcnMpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnl0ZXMudHJhbnNsYXRlIHJlcXVpcmVzIDEgdG8gMiBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZXNfdHJhbnNsYXRlX2ltcGwoc2VsZiwgdGFibGUsIGdyb3VwX3JpZ2h0XzEsIGRlbGV0ZWNoYXJzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnl0ZXNfbWFrZXRyYW5zX19kb2NfXywKKyJtYWtldHJhbnMoZnJtLCB0bywgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzZWFibGUgZm9yIHRoZSBieXRlcyBvciBieXRlYXJyYXkgdHJhbnNsYXRlIG1ldGhvZC5cbiIKKyJcbiIKKyJUaGUgcmV0dXJuZWQgdGFibGUgd2lsbCBiZSBvbmUgd2hlcmUgZWFjaCBieXRlIGluIGZybSBpcyBtYXBwZWQgdG8gdGhlIGJ5dGUgYXRcbiIKKyJ0aGUgc2FtZSBwb3NpdGlvbiBpbiB0by5cbiIKKyJcbiIKKyJUaGUgYnl0ZXMgb2JqZWN0cyBmcm0gYW5kIHRvIG11c3QgYmUgb2YgdGhlIHNhbWUgbGVuZ3RoLiIpOworCisjZGVmaW5lIEJZVEVTX01BS0VUUkFOU19NRVRIT0RERUYgICAgXAorICAgIHsibWFrZXRyYW5zIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX21ha2V0cmFucywgTUVUSF9WQVJBUkdTfE1FVEhfU1RBVElDLCBieXRlc19tYWtldHJhbnNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX21ha2V0cmFuc19pbXBsKFB5X2J1ZmZlciAqZnJtLCBQeV9idWZmZXIgKnRvKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX21ha2V0cmFucyh2b2lkICpudWxsLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJtID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciB0byA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp5KjptYWtldHJhbnMiLAorICAgICAgICAmZnJtLCAmdG8pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZXNfbWFrZXRyYW5zX2ltcGwoJmZybSwgJnRvKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcm0gKi8KKyAgICBpZiAoZnJtLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcm0pOworICAgIC8qIENsZWFudXAgZm9yIHRvICovCisgICAgaWYgKHRvLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ0byk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnl0ZXNfcmVwbGFjZV9fZG9jX18sCisicmVwbGFjZSgkc2VsZiwgb2xkLCBuZXcsIGNvdW50PS0xLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgY29weSB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgb2xkIHJlcGxhY2VkIGJ5IG5ldy5cbiIKKyJcbiIKKyIgIGNvdW50XG4iCisiICAgIE1heGltdW0gbnVtYmVyIG9mIG9jY3VycmVuY2VzIHRvIHJlcGxhY2UuXG4iCisiICAgIC0xICh0aGUgZGVmYXVsdCB2YWx1ZSkgbWVhbnMgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMuXG4iCisiXG4iCisiSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGNvdW50IGlzIGdpdmVuLCBvbmx5IHRoZSBmaXJzdCBjb3VudCBvY2N1cnJlbmNlcyBhcmVcbiIKKyJyZXBsYWNlZC4iKTsKKworI2RlZmluZSBCWVRFU19SRVBMQUNFX01FVEhPRERFRiAgICBcCisgICAgeyJyZXBsYWNlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JlcGxhY2UsIE1FVEhfVkFSQVJHUywgYnl0ZXNfcmVwbGFjZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfcmVwbGFjZV9pbXBsKFB5Qnl0ZXNPYmplY3Qqc2VsZiwgUHlfYnVmZmVyICpvbGQsIFB5X2J1ZmZlciAqbmV3LAorICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgY291bnQpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfcmVwbGFjZShQeUJ5dGVzT2JqZWN0KnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBvbGQgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIG5ldyA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9zc2l6ZV90IGNvdW50ID0gLTE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqeSp8bjpyZXBsYWNlIiwKKyAgICAgICAgJm9sZCwgJm5ldywgJmNvdW50KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ5dGVzX3JlcGxhY2VfaW1wbChzZWxmLCAmb2xkLCAmbmV3LCBjb3VudCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3Igb2xkICovCisgICAgaWYgKG9sZC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmb2xkKTsKKyAgICAvKiBDbGVhbnVwIGZvciBuZXcgKi8KKyAgICBpZiAobmV3Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZuZXcpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJ5dGVzX2RlY29kZV9fZG9jX18sCisiZGVjb2RlKCRzZWxmLCAvLCBlbmNvZGluZz1cJ3V0Zi04XCcsIGVycm9ycz1cJ3N0cmljdFwnKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIHRoZSBieXRlcyB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgZW5jb2RpbmcuXG4iCisiXG4iCisiICBlbmNvZGluZ1xuIgorIiAgICBUaGUgZW5jb2Rpbmcgd2l0aCB3aGljaCB0byBkZWNvZGUgdGhlIGJ5dGVzLlxuIgorIiAgZXJyb3JzXG4iCisiICAgIFRoZSBlcnJvciBoYW5kbGluZyBzY2hlbWUgdG8gdXNlIGZvciB0aGUgaGFuZGxpbmcgb2YgZGVjb2RpbmcgZXJyb3JzLlxuIgorIiAgICBUaGUgZGVmYXVsdCBpcyBcJ3N0cmljdFwnIG1lYW5pbmcgdGhhdCBkZWNvZGluZyBlcnJvcnMgcmFpc2UgYVxuIgorIiAgICBVbmljb2RlRGVjb2RlRXJyb3IuIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgXCdpZ25vcmVcJyBhbmQgXCdyZXBsYWNlXCdcbiIKKyIgICAgYXMgd2VsbCBhcyBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHdpdGggY29kZWNzLnJlZ2lzdGVyX2Vycm9yIHRoYXRcbiIKKyIgICAgY2FuIGhhbmRsZSBVbmljb2RlRGVjb2RlRXJyb3JzLiIpOworCisjZGVmaW5lIEJZVEVTX0RFQ09ERV9NRVRIT0RERUYgICAgXAorICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2RlY29kZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIGJ5dGVzX2RlY29kZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfZGVjb2RlX2ltcGwoUHlCeXRlc09iamVjdCpzZWxmLCBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19kZWNvZGUoUHlCeXRlc09iamVjdCpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsIF9rZXl3b3JkcywKKyAgICAgICAgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ5dGVzX2RlY29kZV9pbXBsKHNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihieXRlc19zcGxpdGxpbmVzX19kb2NfXywKKyJzcGxpdGxpbmVzKCRzZWxmLCAvLCBrZWVwZW5kcz1GYWxzZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBieXRlcywgYnJlYWtpbmcgYXQgbGluZSBib3VuZGFyaWVzLlxuIgorIlxuIgorIkxpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyBrZWVwZW5kcyBpcyBnaXZlbiBhbmRcbiIKKyJ0cnVlLiIpOworCisjZGVmaW5lIEJZVEVTX1NQTElUTElORVNfTUVUSE9EREVGICAgIFwKKyAgICB7InNwbGl0bGluZXMiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfc3BsaXRsaW5lcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIGJ5dGVzX3NwbGl0bGluZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzX3NwbGl0bGluZXNfaW1wbChQeUJ5dGVzT2JqZWN0KnNlbGYsIGludCBrZWVwZW5kcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19zcGxpdGxpbmVzKFB5Qnl0ZXNPYmplY3Qqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJrZWVwZW5kcyIsIE5VTEx9OworICAgIGludCBrZWVwZW5kcyA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aTpzcGxpdGxpbmVzIiwgX2tleXdvcmRzLAorICAgICAgICAma2VlcGVuZHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnl0ZXNfc3BsaXRsaW5lc19pbXBsKHNlbGYsIGtlZXBlbmRzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnl0ZXNfZnJvbWhleF9fZG9jX18sCisiZnJvbWhleCgkdHlwZSwgc3RyaW5nLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgYnl0ZXMgb2JqZWN0IGZyb20gYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgbnVtYmVycy5cbiIKKyJcbiIKKyJTcGFjZXMgYmV0d2VlbiB0d28gbnVtYmVycyBhcmUgYWNjZXB0ZWQuXG4iCisiRXhhbXBsZTogYnl0ZXMuZnJvbWhleChcJ0I5IDAxRUZcJykgLT4gYlwnXFxcXHhiOVxcXFx4MDFcXFxceGVmXCcuIik7CisKKyNkZWZpbmUgQllURVNfRlJPTUhFWF9NRVRIT0RERUYgICAgXAorICAgIHsiZnJvbWhleCIsIChQeUNGdW5jdGlvbilieXRlc19mcm9taGV4LCBNRVRIX098TUVUSF9DTEFTUywgYnl0ZXNfZnJvbWhleF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNfZnJvbWhleF9pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnN0cmluZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc19mcm9taGV4KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RyaW5nOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJVOmZyb21oZXgiLCAmc3RyaW5nKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ5dGVzX2Zyb21oZXhfaW1wbCh0eXBlLCBzdHJpbmcpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmQwY2U4ZjI1ZDdlMThmNCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9PYmplY3RzL2NsaW5pYy9kaWN0b2JqZWN0LmMuaCBiL09iamVjdHMvY2xpbmljL2RpY3RvYmplY3QuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODhiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL2NsaW5pYy9kaWN0b2JqZWN0LmMuaApAQCAtMCwwICsxLDQyIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoZGljdF9mcm9ta2V5c19fZG9jX18sCisiZnJvbWtleXMoJHR5cGUsIGl0ZXJhYmxlLCB2YWx1ZT1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBhIG5ldyBkaWN0IHdpdGgga2V5cyBmcm9tIGl0ZXJhYmxlIGFuZCB2YWx1ZXMgZXF1YWwgdG8gdmFsdWUuIik7CisKKyNkZWZpbmUgRElDVF9GUk9NS0VZU19NRVRIT0RERUYgICAgXAorICAgIHsiZnJvbWtleXMiLCAoUHlDRnVuY3Rpb24pZGljdF9mcm9ta2V5cywgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsIGRpY3RfZnJvbWtleXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2RpY3RfZnJvbWtleXNfaW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICppdGVyYWJsZSwgUHlPYmplY3QgKnZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RpY3RfZnJvbWtleXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqaXRlcmFibGU7CisgICAgUHlPYmplY3QgKnZhbHVlID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZyb21rZXlzIiwKKyAgICAgICAgMSwgMiwKKyAgICAgICAgJml0ZXJhYmxlLCAmdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGljdF9mcm9ta2V5c19pbXBsKHR5cGUsIGl0ZXJhYmxlLCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGRpY3RfX19jb250YWluc19fX19kb2NfXywKKyJfX2NvbnRhaW5zX18oJHNlbGYsIGtleSwgLylcbiIKKyItLVxuIgorIlxuIgorIlRydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZS4iKTsKKworI2RlZmluZSBESUNUX19fQ09OVEFJTlNfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19jb250YWluc19fIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfX19jb250YWluc19fLCBNRVRIX098TUVUSF9DT0VYSVNULCBkaWN0X19fY29udGFpbnNfX19fZG9jX199LAorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZlNzRkNjc2MzMyZmRiYTYgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGluaWMvdW5pY29kZW9iamVjdC5jLmggYi9PYmplY3RzL2NsaW5pYy91bmljb2Rlb2JqZWN0LmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDJhNzAwCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy9jbGluaWMvdW5pY29kZW9iamVjdC5jLmgKQEAgLTAsMCArMSw0MSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfXywKKyJtYWtldHJhbnMoeCwgeT1Ob25lLCB6PU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS5cbiIKKyJcbiIKKyJJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlXG4iCisib3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS5cbiIKKyJDaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLlxuIgorIklmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZFxuIgorImluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGVcbiIKKyJjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXRcbiIKKyJtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4iKTsKKworI2RlZmluZSBVTklDT0RFX01BS0VUUkFOU19NRVRIT0RERUYgICAgXAorICAgIHsibWFrZXRyYW5zIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVfbWFrZXRyYW5zLCBNRVRIX1ZBUkFSR1N8TUVUSF9TVEFUSUMsIHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlX21ha2V0cmFuc19pbXBsKFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSwgUHlPYmplY3QgKnopOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnModm9pZCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKng7CisgICAgUHlPYmplY3QgKnkgPSBOVUxMOworICAgIFB5T2JqZWN0ICp6ID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xVVTptYWtldHJhbnMiLAorICAgICAgICAmeCwgJnksICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVfbWFrZXRyYW5zX2ltcGwoeCwgeSwgeik7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05NGFmZmRmZjViMmRhZmY1IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvY29kZW9iamVjdC5jIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKaW5kZXggMzUzZjQxNC4uOTY0YWU2MiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKQEAgLTM4NCw3ICszODQsNyBAQAogewogICAgIFB5X3NzaXplX3QgcmVzOwogCi0gICAgcmVzID0gc2l6ZW9mKFB5Q29kZU9iamVjdCk7CisgICAgcmVzID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRShjbykpOwogICAgIGlmIChjby0+Y29fY2VsbDJhcmcgIT0gTlVMTCAmJiBjby0+Y29fY2VsbHZhcnMgIT0gTlVMTCkKICAgICAgICAgcmVzICs9IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKSAqIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7CkBAIC00MDksMTEgKzQwOSwxMzUgQEAKICAgICB9CiB9CiAKK1B5T2JqZWN0KgorX1B5Q29kZV9Db25zdGFudEtleShQeU9iamVjdCAqb3ApCit7CisgICAgUHlPYmplY3QgKmtleTsKKworICAgIC8qIFB5X05vbmUgYW5kIFB5X0VsbGlwc2lzIGFyZSBzaW5nbGV0b24gKi8KKyAgICBpZiAob3AgPT0gUHlfTm9uZSB8fCBvcCA9PSBQeV9FbGxpcHNpcworICAgICAgIHx8IFB5TG9uZ19DaGVja0V4YWN0KG9wKQorICAgICAgIHx8IFB5Qm9vbF9DaGVjayhvcCkKKyAgICAgICB8fCBQeUJ5dGVzX0NoZWNrRXhhY3Qob3ApCisgICAgICAgfHwgUHlVbmljb2RlX0NoZWNrRXhhY3Qob3ApCisgICAgICAgICAgLyogY29kZV9yaWNoY29tcGFyZSgpIHVzZXMgX1B5Q29kZV9Db25zdGFudEtleSgpIGludGVybmFsbHkgKi8KKyAgICAgICB8fCBQeUNvZGVfQ2hlY2sob3ApKSB7CisgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBQeV9UWVBFKG9wKSwgb3ApOworICAgIH0KKyAgICBlbHNlIGlmIChQeUZsb2F0X0NoZWNrRXhhY3Qob3ApKSB7CisgICAgICAgIGRvdWJsZSBkID0gUHlGbG9hdF9BU19ET1VCTEUob3ApOworICAgICAgICAvKiBhbGwgd2UgbmVlZCBpcyB0byBtYWtlIHRoZSB0dXBsZSBkaWZmZXJlbnQgaW4gZWl0aGVyIHRoZSAwLjAKKyAgICAgICAgICogb3IgLTAuMCBjYXNlIGZyb20gYWxsIG90aGVycywganVzdCB0byBhdm9pZCB0aGUgImNvZXJjaW9uIi4KKyAgICAgICAgICovCisgICAgICAgIGlmIChkID09IDAuMCAmJiBjb3B5c2lnbigxLjAsIGQpIDwgMC4wKQorICAgICAgICAgICAga2V5ID0gUHlUdXBsZV9QYWNrKDMsIFB5X1RZUEUob3ApLCBvcCwgUHlfTm9uZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBQeV9UWVBFKG9wKSwgb3ApOworICAgIH0KKyAgICBlbHNlIGlmIChQeUNvbXBsZXhfQ2hlY2tFeGFjdChvcCkpIHsKKyAgICAgICAgUHlfY29tcGxleCB6OworICAgICAgICBpbnQgcmVhbF9uZWd6ZXJvLCBpbWFnX25lZ3plcm87CisgICAgICAgIC8qIEZvciB0aGUgY29tcGxleCBjYXNlIHdlIG11c3QgbWFrZSBjb21wbGV4KHgsIDAuKQorICAgICAgICAgICBkaWZmZXJlbnQgZnJvbSBjb21wbGV4KHgsIC0wLikgYW5kIGNvbXBsZXgoMC4sIHkpCisgICAgICAgICAgIGRpZmZlcmVudCBmcm9tIGNvbXBsZXgoLTAuLCB5KSwgZm9yIGFueSB4IGFuZCB5LgorICAgICAgICAgICBBbGwgZm91ciBjb21wbGV4IHplcm9zIG11c3QgYmUgZGlzdGluZ3Vpc2hlZC4qLworICAgICAgICB6ID0gUHlDb21wbGV4X0FzQ0NvbXBsZXgob3ApOworICAgICAgICByZWFsX25lZ3plcm8gPSB6LnJlYWwgPT0gMC4wICYmIGNvcHlzaWduKDEuMCwgei5yZWFsKSA8IDAuMDsKKyAgICAgICAgaW1hZ19uZWd6ZXJvID0gei5pbWFnID09IDAuMCAmJiBjb3B5c2lnbigxLjAsIHouaW1hZykgPCAwLjA7CisgICAgICAgIC8qIHVzZSBUcnVlLCBGYWxzZSBhbmQgTm9uZSBzaW5nbGV0b24gYXMgdGFncyBmb3IgdGhlIHJlYWwgYW5kIGltYWcKKyAgICAgICAgICogc2lnbiwgdG8gbWFrZSB0dXBsZXMgZGlmZmVyZW50ICovCisgICAgICAgIGlmIChyZWFsX25lZ3plcm8gJiYgaW1hZ19uZWd6ZXJvKSB7CisgICAgICAgICAgICBrZXkgPSBQeVR1cGxlX1BhY2soMywgUHlfVFlQRShvcCksIG9wLCBQeV9UcnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpbWFnX25lZ3plcm8pIHsKKyAgICAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygzLCBQeV9UWVBFKG9wKSwgb3AsIFB5X0ZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyZWFsX25lZ3plcm8pIHsKKyAgICAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygzLCBQeV9UWVBFKG9wKSwgb3AsIFB5X05vbmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIFB5X1RZUEUob3ApLCBvcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KG9wKSkgeworICAgICAgICBQeV9zc2l6ZV90IGksIGxlbjsKKyAgICAgICAgUHlPYmplY3QgKnR1cGxlOworCisgICAgICAgIGxlbiA9IFB5VHVwbGVfR0VUX1NJWkUob3ApOworICAgICAgICB0dXBsZSA9IFB5VHVwbGVfTmV3KGxlbik7CisgICAgICAgIGlmICh0dXBsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgZm9yIChpPTA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0sICppdGVtX2tleTsKKworICAgICAgICAgICAgaXRlbSA9IFB5VHVwbGVfR0VUX0lURU0ob3AsIGkpOworICAgICAgICAgICAgaXRlbV9rZXkgPSBfUHlDb2RlX0NvbnN0YW50S2V5KGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW1fa2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cGxlLCBpLCBpdGVtX2tleSk7CisgICAgICAgIH0KKworICAgICAgICBrZXkgPSBQeVR1cGxlX1BhY2soMywgUHlfVFlQRShvcCksIG9wLCB0dXBsZSk7CisgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5RnJvemVuU2V0X0NoZWNrRXhhY3Qob3ApKSB7CisgICAgICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKyAgICAgICAgUHlPYmplY3QgKml0ZW07CisgICAgICAgIFB5X2hhc2hfdCBoYXNoOworICAgICAgICBQeV9zc2l6ZV90IGksIGxlbjsKKyAgICAgICAgUHlPYmplY3QgKnR1cGxlLCAqc2V0OworCisgICAgICAgIGxlbiA9IFB5U2V0X0dFVF9TSVpFKG9wKTsKKyAgICAgICAgdHVwbGUgPSBQeVR1cGxlX05ldyhsZW4pOworICAgICAgICBpZiAodHVwbGUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoX1B5U2V0X05leHRFbnRyeShvcCwgJnBvcywgJml0ZW0sICZoYXNoKSkgeworICAgICAgICAgICAgUHlPYmplY3QgKml0ZW1fa2V5OworCisgICAgICAgICAgICBpdGVtX2tleSA9IF9QeUNvZGVfQ29uc3RhbnRLZXkoaXRlbSk7CisgICAgICAgICAgICBpZiAoaXRlbV9rZXkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFzc2VydChpIDwgbGVuKTsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwbGUsIGksIGl0ZW1fa2V5KTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAgICBzZXQgPSBQeUZyb3plblNldF9OZXcodHVwbGUpOworICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICBpZiAoc2V0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBrZXkgPSBQeVR1cGxlX1BhY2soMywgUHlfVFlQRShvcCksIG9wLCBzZXQpOworICAgICAgICBQeV9ERUNSRUYoc2V0KTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIGZvciBvdGhlciB0eXBlcywgdXNlIHRoZSBvYmplY3QgaWRlbnRpZmllciBhcyBhIHVuaXF1ZSBpZGVudGlmaWVyCisgICAgICAgICAqIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHNlZW4gYXMgdW5lcXVhbC4gKi8KKyAgICAgICAgUHlPYmplY3QgKm9ial9pZCA9IFB5TG9uZ19Gcm9tVm9pZFB0cihvcCk7CisgICAgICAgIGlmIChvYmpfaWQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygzLCBQeV9UWVBFKG9wKSwgb3AsIG9ial9pZCk7CisgICAgICAgIFB5X0RFQ1JFRihvYmpfaWQpOworICAgIH0KKyAgICByZXR1cm4ga2V5OworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogY29kZV9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbywgKmNwOwogICAgIGludCBlcTsKKyAgICBQeU9iamVjdCAqY29uc3RzMSwgKmNvbnN0czI7CiAgICAgUHlPYmplY3QgKnJlczsKIAogICAgIGlmICgob3AgIT0gUHlfRVEgJiYgb3AgIT0gUHlfTkUpIHx8CkBAIC00MzksOCArNTYzLDIxIEBACiAgICAgaWYgKCFlcSkgZ290byB1bmVxdWFsOwogICAgIGVxID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNvLT5jb19jb2RlLCBjcC0+Y29fY29kZSwgUHlfRVEpOwogICAgIGlmIChlcSA8PSAwKSBnb3RvIHVuZXF1YWw7Ci0gICAgZXEgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY28tPmNvX2NvbnN0cywgY3AtPmNvX2NvbnN0cywgUHlfRVEpOworCisgICAgLyogY29tcGFyZSBjb25zdGFudHMgKi8KKyAgICBjb25zdHMxID0gX1B5Q29kZV9Db25zdGFudEtleShjby0+Y29fY29uc3RzKTsKKyAgICBpZiAoIWNvbnN0czEpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGNvbnN0czIgPSBfUHlDb2RlX0NvbnN0YW50S2V5KGNwLT5jb19jb25zdHMpOworICAgIGlmICghY29uc3RzMikgeworICAgICAgICBQeV9ERUNSRUYoY29uc3RzMSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlcSA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjb25zdHMxLCBjb25zdHMyLCBQeV9FUSk7CisgICAgUHlfREVDUkVGKGNvbnN0czEpOworICAgIFB5X0RFQ1JFRihjb25zdHMyKTsKICAgICBpZiAoZXEgPD0gMCkgZ290byB1bmVxdWFsOworCiAgICAgZXEgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY28tPmNvX25hbWVzLCBjcC0+Y29fbmFtZXMsIFB5X0VRKTsKICAgICBpZiAoZXEgPD0gMCkgZ290byB1bmVxdWFsOwogICAgIGVxID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNvLT5jb192YXJuYW1lcywgY3AtPmNvX3Zhcm5hbWVzLCBQeV9FUSk7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCmluZGV4IDdhYWFlYWIuLmE1YmZiNjYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY29tcGxleG9iamVjdC5jCisrKyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCkBAIC0xMyw3ICsxMyw3IEBACiBzdGF0aWMgUHlfY29tcGxleCBjXzEgPSB7MS4sIDAufTsKIAogUHlfY29tcGxleAotY19zdW0oUHlfY29tcGxleCBhLCBQeV9jb21wbGV4IGIpCitfUHlfY19zdW0oUHlfY29tcGxleCBhLCBQeV9jb21wbGV4IGIpCiB7CiAgICAgUHlfY29tcGxleCByOwogICAgIHIucmVhbCA9IGEucmVhbCArIGIucmVhbDsKQEAgLTIyLDcgKzIyLDcgQEAKIH0KIAogUHlfY29tcGxleAotY19kaWZmKFB5X2NvbXBsZXggYSwgUHlfY29tcGxleCBiKQorX1B5X2NfZGlmZihQeV9jb21wbGV4IGEsIFB5X2NvbXBsZXggYikKIHsKICAgICBQeV9jb21wbGV4IHI7CiAgICAgci5yZWFsID0gYS5yZWFsIC0gYi5yZWFsOwpAQCAtMzEsNyArMzEsNyBAQAogfQogCiBQeV9jb21wbGV4Ci1jX25lZyhQeV9jb21wbGV4IGEpCitfUHlfY19uZWcoUHlfY29tcGxleCBhKQogewogICAgIFB5X2NvbXBsZXggcjsKICAgICByLnJlYWwgPSAtYS5yZWFsOwpAQCAtNDAsNyArNDAsNyBAQAogfQogCiBQeV9jb21wbGV4Ci1jX3Byb2QoUHlfY29tcGxleCBhLCBQeV9jb21wbGV4IGIpCitfUHlfY19wcm9kKFB5X2NvbXBsZXggYSwgUHlfY29tcGxleCBiKQogewogICAgIFB5X2NvbXBsZXggcjsKICAgICByLnJlYWwgPSBhLnJlYWwqYi5yZWFsIC0gYS5pbWFnKmIuaW1hZzsKQEAgLTQ5LDcgKzQ5LDcgQEAKIH0KIAogUHlfY29tcGxleAotY19xdW90KFB5X2NvbXBsZXggYSwgUHlfY29tcGxleCBiKQorX1B5X2NfcXVvdChQeV9jb21wbGV4IGEsIFB5X2NvbXBsZXggYikKIHsKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgVGhpcyB3YXMgdGhlIG9yaWdpbmFsIGFsZ29yaXRobS4gIEl0J3MgZ3Jvc3NseSBwcm9uZSB0byBzcHVyaW91cwpAQCAtMTA3LDcgKzEwNyw3IEBACiB9CiAKIFB5X2NvbXBsZXgKLWNfcG93KFB5X2NvbXBsZXggYSwgUHlfY29tcGxleCBiKQorX1B5X2NfcG93KFB5X2NvbXBsZXggYSwgUHlfY29tcGxleCBiKQogewogICAgIFB5X2NvbXBsZXggcjsKICAgICBkb3VibGUgdmFicyxsZW4sYXQscGhhc2U7CkBAIC0xNDUsOSArMTQ1LDkgQEAKICAgICBwID0geDsKICAgICB3aGlsZSAobWFzayA+IDAgJiYgbiA+PSBtYXNrKSB7CiAgICAgICAgIGlmIChuICYgbWFzaykKLSAgICAgICAgICAgIHIgPSBjX3Byb2QocixwKTsKKyAgICAgICAgICAgIHIgPSBfUHlfY19wcm9kKHIscCk7CiAgICAgICAgIG1hc2sgPDw9IDE7Ci0gICAgICAgIHAgPSBjX3Byb2QocCxwKTsKKyAgICAgICAgcCA9IF9QeV9jX3Byb2QocCxwKTsKICAgICB9CiAgICAgcmV0dXJuIHI7CiB9CkBAIC0xNjAsMTcgKzE2MCwxNyBAQAogICAgIGlmIChuID4gMTAwIHx8IG4gPCAtMTAwKSB7CiAgICAgICAgIGNuLnJlYWwgPSAoZG91YmxlKSBuOwogICAgICAgICBjbi5pbWFnID0gMC47Ci0gICAgICAgIHJldHVybiBjX3Bvdyh4LGNuKTsKKyAgICAgICAgcmV0dXJuIF9QeV9jX3Bvdyh4LGNuKTsKICAgICB9CiAgICAgZWxzZSBpZiAobiA+IDApCiAgICAgICAgIHJldHVybiBjX3Bvd3UoeCxuKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBjX3F1b3QoY18xLGNfcG93dSh4LC1uKSk7CisgICAgICAgIHJldHVybiBfUHlfY19xdW90KGNfMSwgY19wb3d1KHgsLW4pKTsKIAogfQogCiBkb3VibGUKLWNfYWJzKFB5X2NvbXBsZXggeikKK19QeV9jX2FicyhQeV9jb21wbGV4IHopCiB7CiAgICAgLyogc2V0cyBlcnJubyA9IEVSQU5HRSBvbiBvdmVyZmxvdzsgIG90aGVyd2lzZSBlcnJubyA9IDAgKi8KICAgICBkb3VibGUgcmVzdWx0OwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAgICAgVE9fQ09NUExFWCh2LCBhKTsKICAgICBUT19DT01QTEVYKHcsIGIpOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXhfYWRkIiwgcmV0dXJuIDApCi0gICAgcmVzdWx0ID0gY19zdW0oYSwgYik7CisgICAgcmVzdWx0ID0gX1B5X2Nfc3VtKGEsIGIpOwogICAgIFB5RlBFX0VORF9QUk9URUNUKHJlc3VsdCkKICAgICByZXR1cm4gUHlDb21wbGV4X0Zyb21DQ29tcGxleChyZXN1bHQpOwogfQpAQCAtNDU4LDcgKzQ1OCw3IEBACiAgICAgVE9fQ09NUExFWCh2LCBhKTsKICAgICBUT19DT01QTEVYKHcsIGIpOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImNvbXBsZXhfc3ViIiwgcmV0dXJuIDApCi0gICAgcmVzdWx0ID0gY19kaWZmKGEsIGIpOworICAgIHJlc3VsdCA9IF9QeV9jX2RpZmYoYSwgYik7CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QocmVzdWx0KQogICAgIHJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KHJlc3VsdCk7CiB9CkBAIC00NzEsNyArNDcxLDcgQEAKICAgICBUT19DT01QTEVYKHYsIGEpOwogICAgIFRPX0NPTVBMRVgodywgYik7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleF9tdWwiLCByZXR1cm4gMCkKLSAgICByZXN1bHQgPSBjX3Byb2QoYSwgYik7CisgICAgcmVzdWx0ID0gX1B5X2NfcHJvZChhLCBiKTsKICAgICBQeUZQRV9FTkRfUFJPVEVDVChyZXN1bHQpCiAgICAgcmV0dXJuIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgocmVzdWx0KTsKIH0KQEAgLTQ4NSw3ICs0ODUsNyBAQAogICAgIFRPX0NPTVBMRVgodywgYik7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleF9kaXYiLCByZXR1cm4gMCkKICAgICBlcnJubyA9IDA7Ci0gICAgcXVvdCA9IGNfcXVvdChhLCBiKTsKKyAgICBxdW90ID0gX1B5X2NfcXVvdChhLCBiKTsKICAgICBQeUZQRV9FTkRfUFJPVEVDVChxdW90KQogICAgIGlmIChlcnJubyA9PSBFRE9NKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwgImNvbXBsZXggZGl2aXNpb24gYnkgemVybyIpOwpAQCAtNTMyLDcgKzUzMiw3IEBACiAgICAgaWYgKGV4cG9uZW50LmltYWcgPT0gMC4gJiYgZXhwb25lbnQucmVhbCA9PSBpbnRfZXhwb25lbnQpCiAgICAgICAgIHAgPSBjX3Bvd2koYSwgaW50X2V4cG9uZW50KTsKICAgICBlbHNlCi0gICAgICAgIHAgPSBjX3BvdyhhLCBleHBvbmVudCk7CisgICAgICAgIHAgPSBfUHlfY19wb3coYSwgZXhwb25lbnQpOwogCiAgICAgUHlGUEVfRU5EX1BST1RFQ1QocCkKICAgICBQeV9BREpVU1RfRVJBTkdFMihwLnJlYWwsIHAuaW1hZyk7CkBAIC01ODMsNyArNTgzLDcgQEAKICAgICBkb3VibGUgcmVzdWx0OwogCiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiY29tcGxleF9hYnMiLCByZXR1cm4gMCkKLSAgICByZXN1bHQgPSBjX2Ficyh2LT5jdmFsKTsKKyAgICByZXN1bHQgPSBfUHlfY19hYnModi0+Y3ZhbCk7CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QocmVzdWx0KQogCiAgICAgaWYgKGVycm5vID09IEVSQU5HRSkgewpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9kZXNjcm9iamVjdC5jIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCmluZGV4IDYxNWY0OTkuLmRhNjhlM2IgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGVzY3JvYmplY3QuYworKysgYi9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKQEAgLTEzMTMsNyArMTMxMyw3IEBACiAgICAgeyJmZ2V0IiwgVF9PQkpFQ1QsIG9mZnNldG9mKHByb3BlcnR5b2JqZWN0LCBwcm9wX2dldCksIFJFQURPTkxZfSwKICAgICB7ImZzZXQiLCBUX09CSkVDVCwgb2Zmc2V0b2YocHJvcGVydHlvYmplY3QsIHByb3Bfc2V0KSwgUkVBRE9OTFl9LAogICAgIHsiZmRlbCIsIFRfT0JKRUNULCBvZmZzZXRvZihwcm9wZXJ0eW9iamVjdCwgcHJvcF9kZWwpLCBSRUFET05MWX0sCi0gICAgeyJfX2RvY19fIiwgIFRfT0JKRUNULCBvZmZzZXRvZihwcm9wZXJ0eW9iamVjdCwgcHJvcF9kb2MpLCBSRUFET05MWX0sCisgICAgeyJfX2RvY19fIiwgIFRfT0JKRUNULCBvZmZzZXRvZihwcm9wZXJ0eW9iamVjdCwgcHJvcF9kb2MpLCAwfSwKICAgICB7MH0KIH07CiAKQEAgLTEzNzIsNiArMTM3Miw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcHJvcGVydHlfZGVzY3JfZ2V0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqdHlwZSkKIHsKKyAgICBzdGF0aWMgUHlPYmplY3QgKiB2b2xhdGlsZSBjYWNoZWRfYXJncyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmFyZ3M7CisgICAgUHlPYmplY3QgKnJldDsKICAgICBwcm9wZXJ0eW9iamVjdCAqZ3MgPSAocHJvcGVydHlvYmplY3QgKilzZWxmOwogCiAgICAgaWYgKG9iaiA9PSBOVUxMIHx8IG9iaiA9PSBQeV9Ob25lKSB7CkBAIC0xMzgyLDcgKzEzODUsMjkgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAidW5yZWFkYWJsZSBhdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGdzLT5wcm9wX2dldCwgb2JqLCBOVUxMKTsKKyAgICBhcmdzID0gY2FjaGVkX2FyZ3M7CisgICAgY2FjaGVkX2FyZ3MgPSBOVUxMOworICAgIGlmICghYXJncykgeworICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7CisgICAgICAgIGlmICghYXJncykKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhhcmdzKTsKKyAgICB9CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBvYmopOworICAgIHJldCA9IFB5T2JqZWN0X0NhbGwoZ3MtPnByb3BfZ2V0LCBhcmdzLCBOVUxMKTsKKyAgICBpZiAoY2FjaGVkX2FyZ3MgPT0gTlVMTCAmJiBQeV9SRUZDTlQoYXJncykgPT0gMSkgeworICAgICAgICBhc3NlcnQoUHlfU0laRShhcmdzKSA9PSAxKTsKKyAgICAgICAgYXNzZXJ0KFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCkgPT0gb2JqKTsKKyAgICAgICAgY2FjaGVkX2FyZ3MgPSBhcmdzOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChQeV9SRUZDTlQoYXJncykgPj0gMSk7CisgICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIH0KKyAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CkBAIC0xNDg0LDggKzE1MDksNyBAQAogICAgICAgICBQeU9iamVjdCAqZ2V0X2RvYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoZ2V0LCAmUHlJZF9fX2RvY19fKTsKICAgICAgICAgaWYgKGdldF9kb2MpIHsKICAgICAgICAgICAgIGlmIChQeV9UWVBFKHNlbGYpID09ICZQeVByb3BlcnR5X1R5cGUpIHsKLSAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHByb3AtPnByb3BfZG9jKTsKLSAgICAgICAgICAgICAgICBwcm9wLT5wcm9wX2RvYyA9IGdldF9kb2M7CisgICAgICAgICAgICAgICAgUHlfWFNFVFJFRihwcm9wLT5wcm9wX2RvYywgZ2V0X2RvYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiBJZiB0aGlzIGlzIGEgcHJvcGVydHkgc3ViY2xhc3MsIHB1dCBfX2RvY19fCkBAIC0xNTg0LDYgKzE2MDgsMTQgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorcHJvcGVydHlfY2xlYXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcHJvcGVydHlvYmplY3QgKnBwID0gKHByb3BlcnR5b2JqZWN0ICopc2VsZjsKKyAgICBQeV9DTEVBUihwcC0+cHJvcF9kb2MpOworICAgIHJldHVybiAwOworfQorCiBQeVR5cGVPYmplY3QgUHlQcm9wZXJ0eV9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgInByb3BlcnR5IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCkBAIC0xNjA5LDcgKzE2NDEsNyBAQAogICAgICAgICBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICBwcm9wZXJ0eV9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIHByb3BlcnR5X3RyYXZlcnNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgKGlucXVpcnkpcHJvcGVydHlfY2xlYXIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCmRpZmYgLS1naXQgYS9PYmplY3RzL2RpY3QtY29tbW9uLmggYi9PYmplY3RzL2RpY3QtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkxMmViOQotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvZGljdC1jb21tb24uaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIFB5X0RJQ1RfQ09NTU9OX0gKKyNkZWZpbmUgUHlfRElDVF9DT01NT05fSAorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogQ2FjaGVkIGhhc2ggY29kZSBvZiBtZV9rZXkuICovCisgICAgUHlfaGFzaF90IG1lX2hhc2g7CisgICAgUHlPYmplY3QgKm1lX2tleTsKKyAgICBQeU9iamVjdCAqbWVfdmFsdWU7IC8qIFRoaXMgZmllbGQgaXMgb25seSBtZWFuaW5nZnVsIGZvciBjb21iaW5lZCB0YWJsZXMgKi8KK30gUHlEaWN0S2V5RW50cnk7CisKK3R5cGVkZWYgUHlEaWN0S2V5RW50cnkgKigqZGljdF9sb29rdXBfZnVuYykKKyhQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcik7CisKK3N0cnVjdCBfZGljdGtleXNvYmplY3QgeworICAgIFB5X3NzaXplX3QgZGtfcmVmY250OworICAgIFB5X3NzaXplX3QgZGtfc2l6ZTsKKyAgICBkaWN0X2xvb2t1cF9mdW5jIGRrX2xvb2t1cDsKKyAgICBQeV9zc2l6ZV90IGRrX3VzYWJsZTsKKyAgICBQeURpY3RLZXlFbnRyeSBka19lbnRyaWVzWzFdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9PYmplY3RzL2RpY3RvYmplY3QuYyBiL09iamVjdHMvZGljdG9iamVjdC5jCmluZGV4IDI1NjE5YzEuLmUwNGFiMmIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGljdG9iamVjdC5jCisrKyBiL09iamVjdHMvZGljdG9iamVjdC5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjZGVmaW5lIFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEIDgKIAogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgImRpY3QtY29tbW9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2VxLmgiCiAKIC8qW2NsaW5pYyBpbnB1dF0KQEAgLTc0LDI0ICs3NSw2IEBACiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1mMTU3YTVhMGNlOTU4OWQ2XSovCiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICAvKiBDYWNoZWQgaGFzaCBjb2RlIG9mIG1lX2tleS4gKi8KLSAgICBQeV9oYXNoX3QgbWVfaGFzaDsKLSAgICBQeU9iamVjdCAqbWVfa2V5OwotICAgIFB5T2JqZWN0ICptZV92YWx1ZTsgLyogVGhpcyBmaWVsZCBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIGNvbWJpbmVkIHRhYmxlcyAqLwotfSBQeURpY3RLZXlFbnRyeTsKLQotdHlwZWRlZiBQeURpY3RLZXlFbnRyeSAqKCpkaWN0X2xvb2t1cF9mdW5jKQotKFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKTsKLQotc3RydWN0IF9kaWN0a2V5c29iamVjdCB7Ci0gICAgUHlfc3NpemVfdCBka19yZWZjbnQ7Ci0gICAgUHlfc3NpemVfdCBka19zaXplOwotICAgIGRpY3RfbG9va3VwX2Z1bmMgZGtfbG9va3VwOwotICAgIFB5X3NzaXplX3QgZGtfdXNhYmxlOwotICAgIFB5RGljdEtleUVudHJ5IGRrX2VudHJpZXNbMV07Ci19OwotCiAKIC8qCiBUbyBlbnN1cmUgdGhlIGxvb2t1cCBhbGdvcml0aG0gdGVybWluYXRlcywgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgVW51c2VkCkBAIC0xMDUsMjAgKzg4LDE3IEBACiAvKgogTWFqb3Igc3VidGxldGllcyBhaGVhZDogIE1vc3QgaGFzaCBzY2hlbWVzIGRlcGVuZCBvbiBoYXZpbmcgYSAiZ29vZCIgaGFzaAogZnVuY3Rpb24sIGluIHRoZSBzZW5zZSBvZiBzaW11bGF0aW5nIHJhbmRvbW5lc3MuICBQeXRob24gZG9lc24ndDogIGl0cyBtb3N0Ci1pbXBvcnRhbnQgaGFzaCBmdW5jdGlvbnMgKGZvciBzdHJpbmdzIGFuZCBpbnRzKSBhcmUgdmVyeSByZWd1bGFyIGluIGNvbW1vbgoraW1wb3J0YW50IGhhc2ggZnVuY3Rpb25zIChmb3IgaW50cykgYXJlIHZlcnkgcmVndWxhciBpbiBjb21tb24KIGNhc2VzOgogCi0gID4+PiBtYXAoaGFzaCwgKDAsIDEsIDIsIDMpKQorICA+Pj5baGFzaChpKSBmb3IgaSBpbiByYW5nZSg0KV0KICAgWzAsIDEsIDIsIDNdCi0gID4+PiBtYXAoaGFzaCwgKCJuYW1lYSIsICJuYW1lYiIsICJuYW1lYyIsICJuYW1lZCIpKQotICBbLTE2NTgzOTg0NTcsIC0xNjU4Mzk4NDYwLCAtMTY1ODM5ODQ1OSwgLTE2NTgzOTg0NjJdCi0gID4+PgogCiBUaGlzIGlzbid0IG5lY2Vzc2FyaWx5IGJhZCEgIFRvIHRoZSBjb250cmFyeSwgaW4gYSB0YWJsZSBvZiBzaXplIDIqKmksIHRha2luZwogdGhlIGxvdy1vcmRlciBpIGJpdHMgYXMgdGhlIGluaXRpYWwgdGFibGUgaW5kZXggaXMgZXh0cmVtZWx5IGZhc3QsIGFuZCB0aGVyZQotYXJlIG5vIGNvbGxpc2lvbnMgYXQgYWxsIGZvciBkaWN0cyBpbmRleGVkIGJ5IGEgY29udGlndW91cyByYW5nZSBvZiBpbnRzLgotVGhlIHNhbWUgaXMgYXBwcm94aW1hdGVseSB0cnVlIHdoZW4ga2V5cyBhcmUgImNvbnNlY3V0aXZlIiBzdHJpbmdzLiAgU28gdGhpcwotZ2l2ZXMgYmV0dGVyLXRoYW4tcmFuZG9tIGJlaGF2aW9yIGluIGNvbW1vbiBjYXNlcywgYW5kIHRoYXQncyB2ZXJ5IGRlc2lyYWJsZS4KK2FyZSBubyBjb2xsaXNpb25zIGF0IGFsbCBmb3IgZGljdHMgaW5kZXhlZCBieSBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgaW50cy4gU28KK3RoaXMgZ2l2ZXMgYmV0dGVyLXRoYW4tcmFuZG9tIGJlaGF2aW9yIGluIGNvbW1vbiBjYXNlcywgYW5kIHRoYXQncyB2ZXJ5CitkZXNpcmFibGUuCiAKIE9UT0gsIHdoZW4gY29sbGlzaW9ucyBvY2N1ciwgdGhlIHRlbmRlbmN5IHRvIGZpbGwgY29udGlndW91cyBzbGljZXMgb2YgdGhlCiBoYXNoIHRhYmxlIG1ha2VzIGEgZ29vZCBjb2xsaXNpb24gcmVzb2x1dGlvbiBzdHJhdGVneSBjcnVjaWFsLiAgVGFraW5nIG9ubHkKQEAgLTIzMyw2ICsyMTMsOCBAQAogc3RhdGljIFB5RGljdE9iamVjdCAqZnJlZV9saXN0W1B5RGljdF9NQVhGUkVFTElTVF07CiBzdGF0aWMgaW50IG51bWZyZWUgPSAwOwogCisjaW5jbHVkZSAiY2xpbmljL2RpY3RvYmplY3QuYy5oIgorCiBpbnQKIFB5RGljdF9DbGVhckZyZWVMaXN0KHZvaWQpCiB7CkBAIC0xMDc5LDggKzEwNjEsNDQgQEAKICAgICAgICBMZXQncyBqdXN0IGhvcGUgdGhhdCBubyBleGNlcHRpb24gb2NjdXJzIHRoZW4uLi4gIFRoaXMgbXVzdCBiZQogICAgICAgIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgYW5kIG5vdCBQeVRocmVhZFN0YXRlX0dFVCgpIGJlY2F1c2UgaW4gZGVidWcKICAgICAgICBtb2RlLCB0aGUgbGF0dGVyIGNvbXBsYWlucyBpZiB0c3RhdGUgaXMgTlVMTC4gKi8KLSAgICB0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSopX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoCi0gICAgICAgICZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKKyAgICB0c3RhdGUgPSBfUHlUaHJlYWRTdGF0ZV9VbmNoZWNrZWRHZXQoKTsKKyAgICBpZiAodHN0YXRlICE9IE5VTEwgJiYgdHN0YXRlLT5jdXJleGNfdHlwZSAhPSBOVUxMKSB7CisgICAgICAgIC8qIHByZXNlcnZlIHRoZSBleGlzdGluZyBleGNlcHRpb24gKi8KKyAgICAgICAgUHlPYmplY3QgKmVycl90eXBlLCAqZXJyX3ZhbHVlLCAqZXJyX3RiOworICAgICAgICBQeUVycl9GZXRjaCgmZXJyX3R5cGUsICZlcnJfdmFsdWUsICZlcnJfdGIpOworICAgICAgICBlcCA9IChtcC0+bWFfa2V5cy0+ZGtfbG9va3VwKShtcCwga2V5LCBoYXNoLCAmdmFsdWVfYWRkcik7CisgICAgICAgIC8qIGlnbm9yZSBlcnJvcnMgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShlcnJfdHlwZSwgZXJyX3ZhbHVlLCBlcnJfdGIpOworICAgICAgICBpZiAoZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZXAgPSAobXAtPm1hX2tleXMtPmRrX2xvb2t1cCkobXAsIGtleSwgaGFzaCwgJnZhbHVlX2FkZHIpOworICAgICAgICBpZiAoZXAgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAqdmFsdWVfYWRkcjsKK30KKworUHlPYmplY3QgKgorX1B5RGljdF9HZXRJdGVtX0tub3duSGFzaChQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQoreworICAgIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopb3A7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKKyAgICBQeU9iamVjdCAqKnZhbHVlX2FkZHI7CisKKyAgICBpZiAoIVB5RGljdF9DaGVjayhvcCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogV2UgY2FuIGFycml2ZSBoZXJlIHdpdGggYSBOVUxMIHRzdGF0ZSBkdXJpbmcgaW5pdGlhbGl6YXRpb246IHRyeQorICAgICAgIHJ1bm5pbmcgInB5dGhvbiAtV2kiIGZvciBhbiBleGFtcGxlIHJlbGF0ZWQgdG8gc3RyaW5nIGludGVybmluZy4KKyAgICAgICBMZXQncyBqdXN0IGhvcGUgdGhhdCBubyBleGNlcHRpb24gb2NjdXJzIHRoZW4uLi4gIFRoaXMgbXVzdCBiZQorICAgICAgIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgYW5kIG5vdCBQeVRocmVhZFN0YXRlX0dFVCgpIGJlY2F1c2UgaW4gZGVidWcKKyAgICAgICBtb2RlLCB0aGUgbGF0dGVyIGNvbXBsYWlucyBpZiB0c3RhdGUgaXMgTlVMTC4gKi8KKyAgICB0c3RhdGUgPSBfUHlUaHJlYWRTdGF0ZV9VbmNoZWNrZWRHZXQoKTsKICAgICBpZiAodHN0YXRlICE9IE5VTEwgJiYgdHN0YXRlLT5jdXJleGNfdHlwZSAhPSBOVUxMKSB7CiAgICAgICAgIC8qIHByZXNlcnZlIHRoZSBleGlzdGluZyBleGNlcHRpb24gKi8KICAgICAgICAgUHlPYmplY3QgKmVycl90eXBlLCAqZXJyX3ZhbHVlLCAqZXJyX3RiOwpAQCAtMTIwOCw2ICsxMjI2LDI1IEBACiB9CiAKIGludAorX1B5RGljdF9TZXRJdGVtX0tub3duSGFzaChQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCkKK3sKKyAgICBQeURpY3RPYmplY3QgKm1wOworCisgICAgaWYgKCFQeURpY3RfQ2hlY2sob3ApKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGFzc2VydChrZXkpOworICAgIGFzc2VydCh2YWx1ZSk7CisgICAgYXNzZXJ0KGhhc2ggIT0gLTEpOworICAgIG1wID0gKFB5RGljdE9iamVjdCAqKW9wOworCisgICAgLyogaW5zZXJ0ZGljdCgpIGhhbmRsZXMgYW55IHJlc2l6aW5nIHRoYXQgbWlnaHQgYmUgbmVjZXNzYXJ5ICovCisgICAgcmV0dXJuIGluc2VydGRpY3QobXAsIGtleSwgaGFzaCwgdmFsdWUpOworfQorCitpbnQKIFB5RGljdF9EZWxJdGVtKFB5T2JqZWN0ICpvcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBQeURpY3RPYmplY3QgKm1wOwpAQCAtMTI0OSw2ICsxMjg2LDQyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludAorX1B5RGljdF9EZWxJdGVtX0tub3duSGFzaChQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQoreworICAgIFB5RGljdE9iamVjdCAqbXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5T2JqZWN0ICpvbGRfa2V5LCAqb2xkX3ZhbHVlOworICAgIFB5T2JqZWN0ICoqdmFsdWVfYWRkcjsKKworICAgIGlmICghUHlEaWN0X0NoZWNrKG9wKSkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBhc3NlcnQoa2V5KTsKKyAgICBhc3NlcnQoaGFzaCAhPSAtMSk7CisgICAgbXAgPSAoUHlEaWN0T2JqZWN0ICopb3A7CisgICAgZXAgPSAobXAtPm1hX2tleXMtPmRrX2xvb2t1cCkobXAsIGtleSwgaGFzaCwgJnZhbHVlX2FkZHIpOworICAgIGlmIChlcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCp2YWx1ZV9hZGRyID09IE5VTEwpIHsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgb2xkX3ZhbHVlID0gKnZhbHVlX2FkZHI7CisgICAgKnZhbHVlX2FkZHIgPSBOVUxMOworICAgIG1wLT5tYV91c2VkLS07CisgICAgaWYgKCFfUHlEaWN0X0hhc1NwbGl0VGFibGUobXApKSB7CisgICAgICAgIEVOU1VSRV9BTExPV1NfREVMRVRJT05TKG1wKTsKKyAgICAgICAgb2xkX2tleSA9IGVwLT5tZV9rZXk7CisgICAgICAgIFB5X0lOQ1JFRihkdW1teSk7CisgICAgICAgIGVwLT5tZV9rZXkgPSBkdW1teTsKKyAgICAgICAgUHlfREVDUkVGKG9sZF9rZXkpOworICAgIH0KKyAgICBQeV9ERUNSRUYob2xkX3ZhbHVlKTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZAogUHlEaWN0X0NsZWFyKFB5T2JqZWN0ICpvcCkKIHsKQEAgLTEzNjcsNiArMTQ0MCwxNDEgQEAKICAgICByZXR1cm4gMTsKIH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBkaWN0LnBvcCgpLiAqLworUHlPYmplY3QgKgorX1B5RGljdF9Qb3AoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKmRlZmx0KQoreworICAgIFB5X2hhc2hfdCBoYXNoOworICAgIFB5T2JqZWN0ICpvbGRfdmFsdWUsICpvbGRfa2V5OworICAgIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBQeU9iamVjdCAqKnZhbHVlX2FkZHI7CisKKyAgICBpZiAobXAtPm1hX3VzZWQgPT0gMCkgeworICAgICAgICBpZiAoZGVmbHQpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZsdCk7CisgICAgICAgICAgICByZXR1cm4gZGVmbHQ7CisgICAgICAgIH0KKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKKyAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKKyAgICAgICAgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKKyAgICAgICAgaWYgKGhhc2ggPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZXAgPSAobXAtPm1hX2tleXMtPmRrX2xvb2t1cCkobXAsIGtleSwgaGFzaCwgJnZhbHVlX2FkZHIpOworICAgIGlmIChlcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvbGRfdmFsdWUgPSAqdmFsdWVfYWRkcjsKKyAgICBpZiAob2xkX3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGRlZmx0KSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOworICAgICAgICAgICAgcmV0dXJuIGRlZmx0OworICAgICAgICB9CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgKnZhbHVlX2FkZHIgPSBOVUxMOworICAgIG1wLT5tYV91c2VkLS07CisgICAgaWYgKCFfUHlEaWN0X0hhc1NwbGl0VGFibGUobXApKSB7CisgICAgICAgIEVOU1VSRV9BTExPV1NfREVMRVRJT05TKG1wKTsKKyAgICAgICAgb2xkX2tleSA9IGVwLT5tZV9rZXk7CisgICAgICAgIFB5X0lOQ1JFRihkdW1teSk7CisgICAgICAgIGVwLT5tZV9rZXkgPSBkdW1teTsKKyAgICAgICAgUHlfREVDUkVGKG9sZF9rZXkpOworICAgIH0KKyAgICByZXR1cm4gb2xkX3ZhbHVlOworfQorCisvKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIGRpY3QuZnJvbV9rZXlzKCkuICBJdCBpcyBzdWJjbGFzcy1mcmllbmRseS4gKi8KK1B5T2JqZWN0ICoKK19QeURpY3RfRnJvbUtleXMoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKml0ZXJhYmxlLCBQeU9iamVjdCAqdmFsdWUpCit7CisgICAgUHlPYmplY3QgKml0OyAgICAgICAvKiBpdGVyKGl0ZXJhYmxlKSAqLworICAgIFB5T2JqZWN0ICprZXk7CisgICAgUHlPYmplY3QgKmQ7CisgICAgaW50IHN0YXR1czsKKworICAgIGQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGNscywgTlVMTCk7CisgICAgaWYgKGQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZCkgJiYgKChQeURpY3RPYmplY3QgKilkKS0+bWFfdXNlZCA9PSAwKSB7CisgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChpdGVyYWJsZSkpIHsKKyAgICAgICAgICAgIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopZDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvbGR2YWx1ZTsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICprZXk7CisgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaDsKKworICAgICAgICAgICAgaWYgKGRpY3RyZXNpemUobXAsIFB5X1NJWkUoaXRlcmFibGUpKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKF9QeURpY3RfTmV4dChpdGVyYWJsZSwgJnBvcywgJmtleSwgJm9sZHZhbHVlLCAmaGFzaCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0ZGljdChtcCwga2V5LCBoYXNoLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlBbnlTZXRfQ2hlY2tFeGFjdChpdGVyYWJsZSkpIHsKKyAgICAgICAgICAgIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopZDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICprZXk7CisgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaDsKKworICAgICAgICAgICAgaWYgKGRpY3RyZXNpemUobXAsIFB5U2V0X0dFVF9TSVpFKGl0ZXJhYmxlKSkpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChfUHlTZXRfTmV4dEVudHJ5KGl0ZXJhYmxlLCAmcG9zLCAma2V5LCAmaGFzaCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0ZGljdChtcCwga2V5LCBoYXNoLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CisgICAgaWYgKGl0ID09IE5VTEwpeworICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChkKSkgeworICAgICAgICB3aGlsZSAoKGtleSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgeworICAgICAgICAgICAgc3RhdHVzID0gUHlEaWN0X1NldEl0ZW0oZCwga2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHdoaWxlICgoa2V5ID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBzdGF0dXMgPSBQeU9iamVjdF9TZXRJdGVtKGQsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBpZiAoc3RhdHVzIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBGYWlsOworICAgIFB5X0RFQ1JFRihpdCk7CisgICAgcmV0dXJuIGQ7CisKK0ZhaWw6CisgICAgUHlfREVDUkVGKGl0KTsKKyAgICBQeV9ERUNSRUYoZCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIC8qIE1ldGhvZHMgKi8KIAogc3RhdGljIHZvaWQKQEAgLTE3MDEsMTIxICsxOTA5LDExIEBACiBSZXR1cm5zIGEgbmV3IGRpY3Qgd2l0aCBrZXlzIGZyb20gaXRlcmFibGUgYW5kIHZhbHVlcyBlcXVhbCB0byB2YWx1ZS4KIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotUHlEb2NfU1RSVkFSKGRpY3RfZnJvbWtleXNfX2RvY19fLAotImZyb21rZXlzKCR0eXBlLCBpdGVyYWJsZSwgdmFsdWU9Tm9uZSwgLylcbiIKLSItLVxuIgotIlxuIgotIlJldHVybnMgYSBuZXcgZGljdCB3aXRoIGtleXMgZnJvbSBpdGVyYWJsZSBhbmQgdmFsdWVzIGVxdWFsIHRvIHZhbHVlLiIpOwotCi0jZGVmaW5lIERJQ1RfRlJPTUtFWVNfTUVUSE9EREVGICAgIFwKLSAgICB7ImZyb21rZXlzIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfZnJvbWtleXMsIE1FVEhfVkFSQVJHU3xNRVRIX0NMQVNTLCBkaWN0X2Zyb21rZXlzX19kb2NfX30sCi0KLXN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2Zyb21rZXlzX2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUsIFB5T2JqZWN0ICp2YWx1ZSk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2Zyb21rZXlzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKml0ZXJhYmxlOwotICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5X05vbmU7Ci0KLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJmcm9ta2V5cyIsCi0gICAgICAgIDEsIDIsCi0gICAgICAgICZpdGVyYWJsZSwgJnZhbHVlKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IGRpY3RfZnJvbWtleXNfaW1wbCh0eXBlLCBpdGVyYWJsZSwgdmFsdWUpOwotCi1leGl0OgotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KIHN0YXRpYyBQeU9iamVjdCAqCiBkaWN0X2Zyb21rZXlzX2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUsIFB5T2JqZWN0ICp2YWx1ZSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NWY4ZGMwZmZhODc0MDZmIGlucHV0PWI4NWE2NjdmOWJmNDY2OWRdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04ZmI5OGU0YjEwMzg0OTk5IGlucHV0PWI4NWE2NjdmOWJmNDY2OWRdKi8KIHsKLSAgICBQeU9iamVjdCAqaXQ7ICAgICAgIC8qIGl0ZXIoc2VxKSAqLwotICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgUHlPYmplY3QgKmQ7Ci0gICAgaW50IHN0YXR1czsKLQotICAgIGQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwotICAgIGlmIChkID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGQpICYmICgoUHlEaWN0T2JqZWN0ICopZCktPm1hX3VzZWQgPT0gMCkgewotICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoaXRlcmFibGUpKSB7Ci0gICAgICAgICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7Ci0gICAgICAgICAgICBQeU9iamVjdCAqb2xkdmFsdWU7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7Ci0gICAgICAgICAgICBQeU9iamVjdCAqa2V5OwotICAgICAgICAgICAgUHlfaGFzaF90IGhhc2g7Ci0KLSAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeV9TSVpFKGl0ZXJhYmxlKSkpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdoaWxlIChfUHlEaWN0X05leHQoaXRlcmFibGUsICZwb3MsICZrZXksICZvbGR2YWx1ZSwgJmhhc2gpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGluc2VydGRpY3QobXAsIGtleSwgaGFzaCwgdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFB5QW55U2V0X0NoZWNrRXhhY3QoaXRlcmFibGUpKSB7Ci0gICAgICAgICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7Ci0gICAgICAgICAgICBQeU9iamVjdCAqa2V5OwotICAgICAgICAgICAgUHlfaGFzaF90IGhhc2g7Ci0KLSAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeVNldF9HRVRfU0laRShpdGVyYWJsZSkpKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAoX1B5U2V0X05leHRFbnRyeShpdGVyYWJsZSwgJnBvcywgJmtleSwgJmhhc2gpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGluc2VydGRpY3QobXAsIGtleSwgaGFzaCwgdmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOwotICAgIGlmIChpdCA9PSBOVUxMKXsKLSAgICAgICAgUHlfREVDUkVGKGQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZCkpIHsKLSAgICAgICAgd2hpbGUgKChrZXkgPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IFB5RGljdF9TZXRJdGVtKGQsIGtleSwgdmFsdWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAoKGtleSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewotICAgICAgICAgICAgc3RhdHVzID0gUHlPYmplY3RfU2V0SXRlbShkLCBrZXksIHZhbHVlKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyA8IDApCi0gICAgICAgICAgICAgICAgZ290byBGYWlsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gRmFpbDsKLSAgICBQeV9ERUNSRUYoaXQpOwotICAgIHJldHVybiBkOwotCi1GYWlsOgotICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfREVDUkVGKGQpOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlEaWN0X0Zyb21LZXlzKChQeU9iamVjdCAqKXR5cGUsIGl0ZXJhYmxlLCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTIyMjIsMTggKzIzMjAsOSBAQAogVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlLgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi1QeURvY19TVFJWQVIoZGljdF9fX2NvbnRhaW5zX19fX2RvY19fLAotIl9fY29udGFpbnNfXygkc2VsZiwga2V5LCAvKVxuIgotIi0tXG4iCi0iXG4iCi0iVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlLiIpOwotCi0jZGVmaW5lIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRiAgICBcCi0gICAgeyJfX2NvbnRhaW5zX18iLCAoUHlDRnVuY3Rpb24pZGljdF9fX2NvbnRhaW5zX18sIE1FVEhfT3xNRVRIX0NPRVhJU1QsIGRpY3RfX19jb250YWluc19fX19kb2NfX30sCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBkaWN0X19fY29udGFpbnNfXyhQeURpY3RPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXkpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2NmM2Y4YWFmMmNjNWNjMyBpbnB1dD1iODUyYjJhMTliNTFhYjI0XSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTNkMDNkYjcwOWVkNmU2YiBpbnB1dD1iODUyYjJhMTliNTFhYjI0XSovCiB7CiAgICAgcmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCA9IHNlbGY7CiAgICAgUHlfaGFzaF90IGhhc2g7CkBAIC0yMzQ4LDUwICsyNDM3LDEyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGljdF9wb3AoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlfaGFzaF90IGhhc2g7Ci0gICAgUHlPYmplY3QgKm9sZF92YWx1ZSwgKm9sZF9rZXk7CiAgICAgUHlPYmplY3QgKmtleSwgKmRlZmx0ID0gTlVMTDsKLSAgICBQeURpY3RLZXlFbnRyeSAqZXA7Ci0gICAgUHlPYmplY3QgKip2YWx1ZV9hZGRyOwogCiAgICAgaWYoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJwb3AiLCAxLCAyLCAma2V5LCAmZGVmbHQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobXAtPm1hX3VzZWQgPT0gMCkgewotICAgICAgICBpZiAoZGVmbHQpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZGVmbHQ7Ci0gICAgICAgIH0KLSAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKLSAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKLSAgICAgICAgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKLSAgICAgICAgaWYgKGhhc2ggPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZXAgPSAobXAtPm1hX2tleXMtPmRrX2xvb2t1cCkobXAsIGtleSwgaGFzaCwgJnZhbHVlX2FkZHIpOwotICAgIGlmIChlcCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBvbGRfdmFsdWUgPSAqdmFsdWVfYWRkcjsKLSAgICBpZiAob2xkX3ZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGRlZmx0KSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOwotICAgICAgICAgICAgcmV0dXJuIGRlZmx0OwotICAgICAgICB9Ci0gICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgKnZhbHVlX2FkZHIgPSBOVUxMOwotICAgIG1wLT5tYV91c2VkLS07Ci0gICAgaWYgKCFfUHlEaWN0X0hhc1NwbGl0VGFibGUobXApKSB7Ci0gICAgICAgIEVOU1VSRV9BTExPV1NfREVMRVRJT05TKG1wKTsKLSAgICAgICAgb2xkX2tleSA9IGVwLT5tZV9rZXk7Ci0gICAgICAgIFB5X0lOQ1JFRihkdW1teSk7Ci0gICAgICAgIGVwLT5tZV9rZXkgPSBkdW1teTsKLSAgICAgICAgUHlfREVDUkVGKG9sZF9rZXkpOwotICAgIH0KLSAgICByZXR1cm4gb2xkX3ZhbHVlOworCisgICAgcmV0dXJuIF9QeURpY3RfUG9wKG1wLCBrZXksIGRlZmx0KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI0OTgsMjAgKzI1NDksMjAgQEAKIAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9uZXcoUHlEaWN0T2JqZWN0ICosIFB5VHlwZU9iamVjdCAqKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfc2l6ZW9mKFB5RGljdE9iamVjdCAqbXApCitQeV9zc2l6ZV90CitfUHlEaWN0X1NpemVPZihQeURpY3RPYmplY3QgKm1wKQogewogICAgIFB5X3NzaXplX3Qgc2l6ZSwgcmVzOwogCiAgICAgc2l6ZSA9IERLX1NJWkUobXAtPm1hX2tleXMpOwotICAgIHJlcyA9IHNpemVvZihQeURpY3RPYmplY3QpOworICAgIHJlcyA9IF9QeU9iamVjdF9TSVpFKFB5X1RZUEUobXApKTsKICAgICBpZiAobXAtPm1hX3ZhbHVlcykKICAgICAgICAgcmVzICs9IHNpemUgKiBzaXplb2YoUHlPYmplY3QqKTsKICAgICAvKiBJZiB0aGUgZGljdGlvbmFyeSBpcyBzcGxpdCwgdGhlIGtleXMgcG9ydGlvbiBpcyBhY2NvdW50ZWQtZm9yCiAgICAgICAgaW4gdGhlIHR5cGUgb2JqZWN0LiAqLwogICAgIGlmIChtcC0+bWFfa2V5cy0+ZGtfcmVmY250ID09IDEpCiAgICAgICAgIHJlcyArPSBzaXplb2YoUHlEaWN0S2V5c09iamVjdCkgKyAoc2l6ZS0xKSAqIHNpemVvZihQeURpY3RLZXlFbnRyeSk7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworICAgIHJldHVybiByZXM7CiB9CiAKIFB5X3NzaXplX3QKQEAgLTI1MjAsNiArMjU3MSwxMiBAQAogICAgIHJldHVybiBzaXplb2YoUHlEaWN0S2V5c09iamVjdCkgKyAoREtfU0laRShrZXlzKS0xKSAqIHNpemVvZihQeURpY3RLZXlFbnRyeSk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0X3NpemVvZihQeURpY3RPYmplY3QgKm1wKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoX1B5RGljdF9TaXplT2YobXApKTsKK30KKwogUHlEb2NfU1RSVkFSKGdldGl0ZW1fX2RvY19fLCAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKTsKIAogUHlEb2NfU1RSVkFSKHNpemVvZl9fZG9jX18sCkBAIC0yOTI1LDggKzI5ODIsOCBAQAogICAgIHJldHVybiBrZXk7CiAKIGZhaWw6Ci0gICAgUHlfREVDUkVGKGQpOwogICAgIGRpLT5kaV9kaWN0ID0gTlVMTDsKKyAgICBQeV9ERUNSRUYoZCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTMwMDYsOCArMzA2Myw4IEBACiAgICAgcmV0dXJuIHZhbHVlOwogCiBmYWlsOgotICAgIFB5X0RFQ1JFRihkKTsKICAgICBkaS0+ZGlfZGljdCA9IE5VTEw7CisgICAgUHlfREVDUkVGKGQpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0zMDk2LDEzICszMTUzLDEzIEBACiAgICAgdmFsdWUgPSAqdmFsdWVfcHRyOwogICAgIFB5X0lOQ1JFRihrZXkpOwogICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIDAsIGtleSk7Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIDEsIHZhbHVlKTsKKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgMCwga2V5KTsgIC8qIHN0ZWFscyByZWZlcmVuY2UgKi8KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgMSwgdmFsdWUpOyAgLyogc3RlYWxzIHJlZmVyZW5jZSAqLwogICAgIHJldHVybiByZXN1bHQ7CiAKIGZhaWw6Ci0gICAgUHlfREVDUkVGKGQpOwogICAgIGRpLT5kaV9kaWN0ID0gTlVMTDsKKyAgICBQeV9ERUNSRUYoZCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTMxOTIsMjggKzMyNDksMjIgQEAKIAogLyogVGhlIGluc3RhbmNlIGxheS1vdXQgaXMgdGhlIHNhbWUgZm9yIGFsbCB0aHJlZTsgYnV0IHRoZSB0eXBlIGRpZmZlcnMuICovCiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECi0gICAgUHlEaWN0T2JqZWN0ICpkdl9kaWN0OwotfSBkaWN0dmlld29iamVjdDsKLQotCiBzdGF0aWMgdm9pZAotZGljdHZpZXdfZGVhbGxvYyhkaWN0dmlld29iamVjdCAqZHYpCitkaWN0dmlld19kZWFsbG9jKF9QeURpY3RWaWV3T2JqZWN0ICpkdikKIHsKICAgICBQeV9YREVDUkVGKGR2LT5kdl9kaWN0KTsKICAgICBQeU9iamVjdF9HQ19EZWwoZHYpOwogfQogCiBzdGF0aWMgaW50Ci1kaWN0dmlld190cmF2ZXJzZShkaWN0dmlld29iamVjdCAqZHYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQorZGljdHZpZXdfdHJhdmVyc2UoX1B5RGljdFZpZXdPYmplY3QgKmR2LCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKICAgICBQeV9WSVNJVChkdi0+ZHZfZGljdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1kaWN0dmlld19sZW4oZGljdHZpZXdvYmplY3QgKmR2KQorZGljdHZpZXdfbGVuKF9QeURpY3RWaWV3T2JqZWN0ICpkdikKIHsKICAgICBQeV9zc2l6ZV90IGxlbiA9IDA7CiAgICAgaWYgKGR2LT5kdl9kaWN0ICE9IE5VTEwpCkBAIC0zMjIxLDEwICszMjcyLDEwIEBACiAgICAgcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWRpY3R2aWV3X25ldyhQeU9iamVjdCAqZGljdCwgUHlUeXBlT2JqZWN0ICp0eXBlKQorUHlPYmplY3QgKgorX1B5RGljdFZpZXdfTmV3KFB5T2JqZWN0ICpkaWN0LCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgZGljdHZpZXdvYmplY3QgKmR2OworICAgIF9QeURpY3RWaWV3T2JqZWN0ICpkdjsKICAgICBpZiAoZGljdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMyMzYsNyArMzI4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCBkaWN0LT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGR2ID0gUHlPYmplY3RfR0NfTmV3KGRpY3R2aWV3b2JqZWN0LCB0eXBlKTsKKyAgICBkdiA9IFB5T2JqZWN0X0dDX05ldyhfUHlEaWN0Vmlld09iamVjdCwgdHlwZSk7CiAgICAgaWYgKGR2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0lOQ1JFRihkaWN0KTsKQEAgLTMzNDAsNyArMzM5MSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0dmlld19yZXByKGRpY3R2aWV3b2JqZWN0ICpkdikKK2RpY3R2aWV3X3JlcHIoX1B5RGljdFZpZXdPYmplY3QgKmR2KQogewogICAgIFB5T2JqZWN0ICpzZXE7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKQEAgLTMzNTcsNyArMzQwOCw3IEBACiAvKioqIGRpY3Rfa2V5cyAqKiovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0a2V5c19pdGVyKGRpY3R2aWV3b2JqZWN0ICpkdikKK2RpY3RrZXlzX2l0ZXIoX1B5RGljdFZpZXdPYmplY3QgKmR2KQogewogICAgIGlmIChkdi0+ZHZfZGljdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMzM2Niw3ICszNDE3LDcgQEAKIH0KIAogc3RhdGljIGludAotZGljdGtleXNfY29udGFpbnMoZGljdHZpZXdvYmplY3QgKmR2LCBQeU9iamVjdCAqb2JqKQorZGljdGtleXNfY29udGFpbnMoX1B5RGljdFZpZXdPYmplY3QgKmR2LCBQeU9iamVjdCAqb2JqKQogewogICAgIGlmIChkdi0+ZHZfZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM0MDQsOCArMzQ1NSw4IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotZGljdHZpZXdzX2FuZChQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKm90aGVyKQorUHlPYmplY3QqCitfUHlEaWN0Vmlld19JbnRlcnNlY3QoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICpvdGhlcikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlTZXRfTmV3KHNlbGYpOwogICAgIFB5T2JqZWN0ICp0bXA7CkBAIC0zNDc4LDcgKzM1MjksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfaW52ZXJ0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX2xzaGlmdCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9yc2hpZnQqLwotICAgIChiaW5hcnlmdW5jKWRpY3R2aWV3c19hbmQsICAgICAgICAgIC8qbmJfYW5kKi8KKyAgICAoYmluYXJ5ZnVuYylfUHlEaWN0Vmlld19JbnRlcnNlY3QsICAvKm5iX2FuZCovCiAgICAgKGJpbmFyeWZ1bmMpZGljdHZpZXdzX3hvciwgICAgICAgICAgLypuYl94b3IqLwogICAgIChiaW5hcnlmdW5jKWRpY3R2aWV3c19vciwgICAgICAgICAgIC8qbmJfb3IqLwogfTsKQEAgLTM0OTAsNyArMzU0MSw3IEBACiAgICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOwogCiAgICAgaWYgKHNlbGYgPT0gb3RoZXIpIHsKLSAgICAgICAgaWYgKGRpY3R2aWV3X2xlbigoZGljdHZpZXdvYmplY3QgKilzZWxmKSA9PSAwKQorICAgICAgICBpZiAoZGljdHZpZXdfbGVuKChfUHlEaWN0Vmlld09iamVjdCAqKXNlbGYpID09IDApCiAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwpAQCAtMzQ5OSw3ICszNTUwLDcgQEAKICAgICAvKiBJdGVyYXRlIG92ZXIgdGhlIHNob3J0ZXIgb2JqZWN0IChvbmx5IGlmIG90aGVyIGlzIGEgc2V0LAogICAgICAqIGJlY2F1c2UgUHlTZXF1ZW5jZV9Db250YWlucyBtYXkgYmUgZXhwZW5zaXZlIG90aGVyd2lzZSk6ICovCiAgICAgaWYgKFB5QW55U2V0X0NoZWNrKG90aGVyKSB8fCBQeURpY3RWaWV3U2V0X0NoZWNrKG90aGVyKSkgewotICAgICAgICBQeV9zc2l6ZV90IGxlbl9zZWxmID0gZGljdHZpZXdfbGVuKChkaWN0dmlld29iamVjdCAqKXNlbGYpOworICAgICAgICBQeV9zc2l6ZV90IGxlbl9zZWxmID0gZGljdHZpZXdfbGVuKChfUHlEaWN0Vmlld09iamVjdCAqKXNlbGYpOwogICAgICAgICBQeV9zc2l6ZV90IGxlbl9vdGhlciA9IFB5T2JqZWN0X1NpemUob3RoZXIpOwogICAgICAgICBpZiAobGVuX290aGVyID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTQ2LDcgKzM1OTcsNyBAQAogUHlUeXBlT2JqZWN0IFB5RGljdEtleXNfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJkaWN0X2tleXMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwotICAgIHNpemVvZihkaWN0dmlld29iamVjdCksICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgc2l6ZW9mKF9QeURpY3RWaWV3T2JqZWN0KSwgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgLyogbWV0aG9kcyAqLwogICAgIChkZXN0cnVjdG9yKWRpY3R2aWV3X2RlYWxsb2MsICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwpAQCAtMzU3OSwxMyArMzYzMCwxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRpY3RrZXlzX25ldyhQeU9iamVjdCAqZGljdCkKIHsKLSAgICByZXR1cm4gZGljdHZpZXdfbmV3KGRpY3QsICZQeURpY3RLZXlzX1R5cGUpOworICAgIHJldHVybiBfUHlEaWN0Vmlld19OZXcoZGljdCwgJlB5RGljdEtleXNfVHlwZSk7CiB9CiAKIC8qKiogZGljdF9pdGVtcyAqKiovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0aXRlbXNfaXRlcihkaWN0dmlld29iamVjdCAqZHYpCitkaWN0aXRlbXNfaXRlcihfUHlEaWN0Vmlld09iamVjdCAqZHYpCiB7CiAgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpIHsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0zNTk0LDcgKzM2NDUsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1kaWN0aXRlbXNfY29udGFpbnMoZGljdHZpZXdvYmplY3QgKmR2LCBQeU9iamVjdCAqb2JqKQorZGljdGl0ZW1zX2NvbnRhaW5zKF9QeURpY3RWaWV3T2JqZWN0ICpkdiwgUHlPYmplY3QgKm9iaikKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpmb3VuZDsKICAgICBpZiAoZHYtPmR2X2RpY3QgPT0gTlVMTCkKQEAgLTM2MzIsNyArMzY4Myw3IEBACiBQeVR5cGVPYmplY3QgUHlEaWN0SXRlbXNfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJkaWN0X2l0ZW1zIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwotICAgIHNpemVvZihkaWN0dmlld29iamVjdCksICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgc2l6ZW9mKF9QeURpY3RWaWV3T2JqZWN0KSwgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgLyogbWV0aG9kcyAqLwogICAgIChkZXN0cnVjdG9yKWRpY3R2aWV3X2RlYWxsb2MsICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLwpAQCAtMzY2NSwxMyArMzcxNiwxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRpY3RpdGVtc19uZXcoUHlPYmplY3QgKmRpY3QpCiB7Ci0gICAgcmV0dXJuIGRpY3R2aWV3X25ldyhkaWN0LCAmUHlEaWN0SXRlbXNfVHlwZSk7CisgICAgcmV0dXJuIF9QeURpY3RWaWV3X05ldyhkaWN0LCAmUHlEaWN0SXRlbXNfVHlwZSk7CiB9CiAKIC8qKiogZGljdF92YWx1ZXMgKioqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdHZhbHVlc19pdGVyKGRpY3R2aWV3b2JqZWN0ICpkdikKK2RpY3R2YWx1ZXNfaXRlcihfUHlEaWN0Vmlld09iamVjdCAqZHYpCiB7CiAgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpIHsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0zNjk3LDcgKzM3NDgsNyBAQAogUHlUeXBlT2JqZWN0IFB5RGljdFZhbHVlc19UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgImRpY3RfdmFsdWVzIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCi0gICAgc2l6ZW9mKGRpY3R2aWV3b2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICBzaXplb2YoX1B5RGljdFZpZXdPYmplY3QpLCAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAvKiBtZXRob2RzICovCiAgICAgKGRlc3RydWN0b3IpZGljdHZpZXdfZGVhbGxvYywgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCkBAIC0zNzMwLDcgKzM3ODEsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRpY3R2YWx1ZXNfbmV3KFB5T2JqZWN0ICpkaWN0KQogewotICAgIHJldHVybiBkaWN0dmlld19uZXcoZGljdCwgJlB5RGljdFZhbHVlc19UeXBlKTsKKyAgICByZXR1cm4gX1B5RGljdFZpZXdfTmV3KGRpY3QsICZQeURpY3RWYWx1ZXNfVHlwZSk7CiB9CiAKIC8qIFJldHVybnMgTlVMTCBpZiBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgUHlEaWN0S2V5c09iamVjdCwKZGlmZiAtLWdpdCBhL09iamVjdHMvZXhjZXB0aW9ucy5jIGIvT2JqZWN0cy9leGNlcHRpb25zLmMKaW5kZXggMWEyMThjMS4uYzdjYWUyZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9leGNlcHRpb25zLmMKKysrIGIvT2JqZWN0cy9leGNlcHRpb25zLmMKQEAgLTIwNiw4ICsyMDYsNyBAQAogICAgIHNlcSA9IFB5U2VxdWVuY2VfVHVwbGUodmFsKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIFB5X0NMRUFSKHNlbGYtPmFyZ3MpOwotICAgIHNlbGYtPmFyZ3MgPSBzZXE7CisgICAgUHlfWFNFVFJFRihzZWxmLT5hcmdzLCBzZXEpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yMzYsOCArMjM1LDcgQEAKICAgICB9CiAKICAgICBQeV9YSU5DUkVGKHRiKTsKLSAgICBQeV9YREVDUkVGKHNlbGYtPnRyYWNlYmFjayk7Ci0gICAgc2VsZi0+dHJhY2ViYWNrID0gdGI7CisgICAgUHlfWFNFVFJFRihzZWxmLT50cmFjZWJhY2ssIHRiKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDczLDYgKzQ3MSwxMyBAQAogCiAKIC8qCisgKiAgICBTdG9wQXN5bmNJdGVyYXRpb24gZXh0ZW5kcyBFeGNlcHRpb24KKyAqLworU2ltcGxlRXh0ZW5kc0V4Y2VwdGlvbihQeUV4Y19FeGNlcHRpb24sIFN0b3BBc3luY0l0ZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIlNpZ25hbCB0aGUgZW5kIGZyb20gaXRlcmF0b3IuX19hbmV4dF9fKCkuIik7CisKKworLyoKICAqICAgIFN0b3BJdGVyYXRpb24gZXh0ZW5kcyBFeGNlcHRpb24KICAqLwogCkBAIC01NTYsMTIgKzU2MSwxNCBAQAogCiAgICAgaWYgKHNpemUgPT0gMCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUHlfQ0xFQVIoc2VsZi0+Y29kZSk7Ci0gICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgc2VsZi0+Y29kZSA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7Ci0gICAgZWxzZSAvKiBzaXplID4gMSAqLwotICAgICAgICBzZWxmLT5jb2RlID0gYXJnczsKLSAgICBQeV9JTkNSRUYoc2VsZi0+Y29kZSk7CisgICAgaWYgKHNpemUgPT0gMSkgeworICAgICAgICBQeV9JTkNSRUYoUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSk7CisgICAgICAgIFB5X1hTRVRSRUYoc2VsZi0+Y29kZSwgUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSk7CisgICAgfQorICAgIGVsc2UgeyAvKiBzaXplID4gMSAqLworICAgICAgICBQeV9JTkNSRUYoYXJncyk7CisgICAgICAgIFB5X1hTRVRSRUYoc2VsZi0+Y29kZSwgYXJncyk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC02MjAsOSArNjI3LDggQEAKICNkZWZpbmUgR0VUX0tXRChrd2QpIHsgXAogICAgIGt3ZCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGt3ZHMsICNrd2QpOyBcCiAgICAgaWYgKGt3ZCkgeyBcCi0gICAgICAgIFB5X0NMRUFSKHNlbGYtPmt3ZCk7IFwKLSAgICAgICAgc2VsZi0+a3dkID0ga3dkOyAgIFwKLSAgICAgICAgUHlfSU5DUkVGKHNlbGYtPmt3ZCk7XAorICAgICAgICBQeV9JTkNSRUYoa3dkKTsgXAorICAgICAgICBQeV9YU0VUUkVGKHNlbGYtPmt3ZCwga3dkKTsgXAogICAgICAgICBpZiAoUHlEaWN0X0RlbEl0ZW1TdHJpbmcoa3dkcywgI2t3ZCkpIFwKICAgICAgICAgICAgIHJldHVybiAtMTsgXAogICAgIH0gXApAQCAtNjQwLDkgKzY0Niw4IEBACiAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiSW1wb3J0RXJyb3IiLCAxLCAxLCAmbXNnKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgUHlfQ0xFQVIoc2VsZi0+bXNnKTsgICAgICAgICAgLyogcmVwbGFjaW5nICovCi0gICAgc2VsZi0+bXNnID0gbXNnOwotICAgIFB5X0lOQ1JFRihzZWxmLT5tc2cpOworICAgIFB5X0lOQ1JFRihtc2cpOworICAgIFB5X1hTRVRSRUYoc2VsZi0+bXNnLCBtc2cpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC04NTIsOCArODU3LDcgQEAKICNlbmRpZgogCiAgICAgLyogU3RlYWxzIHRoZSByZWZlcmVuY2UgdG8gYXJncyAqLwotICAgIFB5X0NMRUFSKHNlbGYtPmFyZ3MpOwotICAgIHNlbGYtPmFyZ3MgPSBhcmdzOworICAgIFB5X1hTRVRSRUYoc2VsZi0+YXJncywgYXJncyk7CiAgICAgKnBfYXJncyA9IGFyZ3MgPSBOVUxMOwogCiAgICAgcmV0dXJuIDA7CkBAIC04NzIsNyArODc2LDcgQEAKICAgICAgICBzb2x1dGlvbiwgZ2l2ZW4gX19uZXdfXyB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsCiAgICAgICAgaXMgdG8gZGVmZXIgYXJnIHBhcnNpbmcgYW5kIGluaXRpYWxpemF0aW9uIHRvIF9faW5pdF9fLgogCi0gICAgICAgQnV0IHdoZW4gX19uZXdfXyBpcyBvdmVycmlkZW4gYXMgd2VsbCwgaXQgc2hvdWxkIGNhbGwgb3VyIF9fbmV3X18KKyAgICAgICBCdXQgd2hlbiBfX25ld19fIGlzIG92ZXJyaWRkZW4gYXMgd2VsbCwgaXQgc2hvdWxkIGNhbGwgb3VyIF9fbmV3X18KICAgICAgICB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuCiAKICAgICAgICAoc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMjU1NSNtc2cxNDg4MjkgKQpAQCAtMTIyNCw2ICsxMjI4LDExIEBACiBTaW1wbGVFeHRlbmRzRXhjZXB0aW9uKFB5RXhjX0V4Y2VwdGlvbiwgUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAiVW5zcGVjaWZpZWQgcnVuLXRpbWUgZXJyb3IuIik7CiAKKy8qCisgKiAgICBSZWN1cnNpb25FcnJvciBleHRlbmRzIFJ1bnRpbWVFcnJvcgorICovCitTaW1wbGVFeHRlbmRzRXhjZXB0aW9uKFB5RXhjX1J1bnRpbWVFcnJvciwgUmVjdXJzaW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICJSZWN1cnNpb24gbGltaXQgZXhjZWVkZWQuIik7CiAKIC8qCiAgKiAgICBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgUnVudGltZUVycm9yCkBAIC0xMjY3LDkgKzEyNzYsOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAobGVuYXJncyA+PSAxKSB7Ci0gICAgICAgIFB5X0NMRUFSKHNlbGYtPm1zZyk7Ci0gICAgICAgIHNlbGYtPm1zZyA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7Ci0gICAgICAgIFB5X0lOQ1JFRihzZWxmLT5tc2cpOworICAgICAgICBQeV9JTkNSRUYoUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSk7CisgICAgICAgIFB5X1hTRVRSRUYoc2VsZi0+bXNnLCBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApKTsKICAgICB9CiAgICAgaWYgKGxlbmFyZ3MgPT0gMikgewogICAgICAgICBpbmZvID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAxKTsKQEAgLTEyODQsMjEgKzEyOTIsMTcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogCi0gICAgICAgIFB5X0NMRUFSKHNlbGYtPmZpbGVuYW1lKTsKLSAgICAgICAgc2VsZi0+ZmlsZW5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGluZm8sIDApOwotICAgICAgICBQeV9JTkNSRUYoc2VsZi0+ZmlsZW5hbWUpOworICAgICAgICBQeV9JTkNSRUYoUHlUdXBsZV9HRVRfSVRFTShpbmZvLCAwKSk7CisgICAgICAgIFB5X1hTRVRSRUYoc2VsZi0+ZmlsZW5hbWUsIFB5VHVwbGVfR0VUX0lURU0oaW5mbywgMCkpOwogCi0gICAgICAgIFB5X0NMRUFSKHNlbGYtPmxpbmVubyk7Ci0gICAgICAgIHNlbGYtPmxpbmVubyA9IFB5VHVwbGVfR0VUX0lURU0oaW5mbywgMSk7Ci0gICAgICAgIFB5X0lOQ1JFRihzZWxmLT5saW5lbm8pOworICAgICAgICBQeV9JTkNSRUYoUHlUdXBsZV9HRVRfSVRFTShpbmZvLCAxKSk7CisgICAgICAgIFB5X1hTRVRSRUYoc2VsZi0+bGluZW5vLCBQeVR1cGxlX0dFVF9JVEVNKGluZm8sIDEpKTsKIAotICAgICAgICBQeV9DTEVBUihzZWxmLT5vZmZzZXQpOwotICAgICAgICBzZWxmLT5vZmZzZXQgPSBQeVR1cGxlX0dFVF9JVEVNKGluZm8sIDIpOwotICAgICAgICBQeV9JTkNSRUYoc2VsZi0+b2Zmc2V0KTsKKyAgICAgICAgUHlfSU5DUkVGKFB5VHVwbGVfR0VUX0lURU0oaW5mbywgMikpOworICAgICAgICBQeV9YU0VUUkVGKHNlbGYtPm9mZnNldCwgUHlUdXBsZV9HRVRfSVRFTShpbmZvLCAyKSk7CiAKLSAgICAgICAgUHlfQ0xFQVIoc2VsZi0+dGV4dCk7Ci0gICAgICAgIHNlbGYtPnRleHQgPSBQeVR1cGxlX0dFVF9JVEVNKGluZm8sIDMpOwotICAgICAgICBQeV9JTkNSRUYoc2VsZi0+dGV4dCk7CisgICAgICAgIFB5X0lOQ1JFRihQeVR1cGxlX0dFVF9JVEVNKGluZm8sIDMpKTsKKyAgICAgICAgUHlfWFNFVFJFRihzZWxmLT50ZXh0LCBQeVR1cGxlX0dFVF9JVEVNKGluZm8sIDMpKTsKIAogICAgICAgICBQeV9ERUNSRUYoaW5mbyk7CiAKQEAgLTE1NDMsOCArMTU0Nyw3IEBACiAgICAgUHlPYmplY3QgKm9iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHZhbHVlKTsKICAgICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuIC0xOwotICAgIFB5X0NMRUFSKCphdHRyKTsKLSAgICAqYXR0ciA9IG9iajsKKyAgICBQeV9YU0VUUkVGKCphdHRyLCBvYmopOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xODUyLDcgKzE4NTUsNyBAQAogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOwogCiAgICAgLyogR2V0IHJlYXNvbiBhbmQgZW5jb2RpbmcgYXMgc3RyaW5ncywgd2hpY2ggdGhleSBtaWdodCBub3QgYmUgaWYKLSAgICAgICB0aGV5J3ZlIGJlZW4gbW9kaWZpZWQgYWZ0ZXIgd2Ugd2VyZSBjb250cnVjdGVkLiAqLworICAgICAgIHRoZXkndmUgYmVlbiBtb2RpZmllZCBhZnRlciB3ZSB3ZXJlIGNvbnN0cnVjdGVkLiAqLwogICAgIHJlYXNvbl9zdHIgPSBQeU9iamVjdF9TdHIodXNlbGYtPnJlYXNvbik7CiAgICAgaWYgKHJlYXNvbl9zdHIgPT0gTlVMTCkKICAgICAgICAgZ290byBkb25lOwpAQCAtMTk1MCw4ICsxOTUzLDcgQEAKICAgICAgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodWRlLT5vYmplY3QsICZ2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBQeV9DTEVBUih1ZGUtPm9iamVjdCk7Ci0gICAgICAgIHVkZS0+b2JqZWN0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2aWV3LmJ1Ziwgdmlldy5sZW4pOworICAgICAgICBQeV9YU0VUUkVGKHVkZS0+b2JqZWN0LCBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZpZXcuYnVmLCB2aWV3LmxlbikpOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgaWYgKCF1ZGUtPm9iamVjdCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xOTc4LDcgKzE5ODAsNyBAQAogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOwogCiAgICAgLyogR2V0IHJlYXNvbiBhbmQgZW5jb2RpbmcgYXMgc3RyaW5ncywgd2hpY2ggdGhleSBtaWdodCBub3QgYmUgaWYKLSAgICAgICB0aGV5J3ZlIGJlZW4gbW9kaWZpZWQgYWZ0ZXIgd2Ugd2VyZSBjb250cnVjdGVkLiAqLworICAgICAgIHRoZXkndmUgYmVlbiBtb2RpZmllZCBhZnRlciB3ZSB3ZXJlIGNvbnN0cnVjdGVkLiAqLwogICAgIHJlYXNvbl9zdHIgPSBQeU9iamVjdF9TdHIodXNlbGYtPnJlYXNvbik7CiAgICAgaWYgKHJlYXNvbl9zdHIgPT0gTlVMTCkKICAgICAgICAgZ290byBkb25lOwpAQCAtMjA3Niw3ICsyMDc4LDcgQEAKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKIAogICAgIC8qIEdldCByZWFzb24gYXMgYSBzdHJpbmcsIHdoaWNoIGl0IG1pZ2h0IG5vdCBiZSBpZiBpdCdzIGJlZW4KLSAgICAgICBtb2RpZmllZCBhZnRlciB3ZSB3ZXJlIGNvbnRydWN0ZWQuICovCisgICAgICAgbW9kaWZpZWQgYWZ0ZXIgd2Ugd2VyZSBjb25zdHJ1Y3RlZC4gKi8KICAgICByZWFzb25fc3RyID0gUHlPYmplY3RfU3RyKHVzZWxmLT5yZWFzb24pOwogICAgIGlmIChyZWFzb25fc3RyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTIzNzMsNyArMjM3NSw3IEBACiAKIAogCi0vKiBQcmUtY29tcHV0ZWQgUnVudGltZUVycm9yIGluc3RhbmNlIGZvciB3aGVuIHJlY3Vyc2lvbiBkZXB0aCBpcyByZWFjaGVkLgorLyogUHJlLWNvbXB1dGVkIFJlY3Vyc2lvbkVycm9yIGluc3RhbmNlIGZvciB3aGVuIHJlY3Vyc2lvbiBkZXB0aCBpcyByZWFjaGVkLgogICAgTWVhbnQgdG8gYmUgdXNlZCB3aGVuIG5vcm1hbGl6aW5nIHRoZSBleGNlcHRpb24gZm9yIGV4Y2VlZGluZyB0aGUgcmVjdXJzaW9uCiAgICBkZXB0aCB3aWxsIGNhdXNlIGl0cyBvd24gaW5maW5pdGUgcmVjdXJzaW9uLgogKi8KQEAgLTI0NjgsNiArMjQ3MCw3IEBACiAgICAgUFJFX0lOSVQoQmFzZUV4Y2VwdGlvbikKICAgICBQUkVfSU5JVChFeGNlcHRpb24pCiAgICAgUFJFX0lOSVQoVHlwZUVycm9yKQorICAgIFBSRV9JTklUKFN0b3BBc3luY0l0ZXJhdGlvbikKICAgICBQUkVfSU5JVChTdG9wSXRlcmF0aW9uKQogICAgIFBSRV9JTklUKEdlbmVyYXRvckV4aXQpCiAgICAgUFJFX0lOSVQoU3lzdGVtRXhpdCkKQEAgLTI0NzYsNiArMjQ3OSw3IEBACiAgICAgUFJFX0lOSVQoT1NFcnJvcikKICAgICBQUkVfSU5JVChFT0ZFcnJvcikKICAgICBQUkVfSU5JVChSdW50aW1lRXJyb3IpCisgICAgUFJFX0lOSVQoUmVjdXJzaW9uRXJyb3IpCiAgICAgUFJFX0lOSVQoTm90SW1wbGVtZW50ZWRFcnJvcikKICAgICBQUkVfSU5JVChOYW1lRXJyb3IpCiAgICAgUFJFX0lOSVQoVW5ib3VuZExvY2FsRXJyb3IpCkBAIC0yNTM4LDYgKzI1NDIsNyBAQAogICAgIFBPU1RfSU5JVChCYXNlRXhjZXB0aW9uKQogICAgIFBPU1RfSU5JVChFeGNlcHRpb24pCiAgICAgUE9TVF9JTklUKFR5cGVFcnJvcikKKyAgICBQT1NUX0lOSVQoU3RvcEFzeW5jSXRlcmF0aW9uKQogICAgIFBPU1RfSU5JVChTdG9wSXRlcmF0aW9uKQogICAgIFBPU1RfSU5JVChHZW5lcmF0b3JFeGl0KQogICAgIFBPU1RfSU5JVChTeXN0ZW1FeGl0KQpAQCAtMjU1MSw2ICsyNTU2LDcgQEAKICNlbmRpZgogICAgIFBPU1RfSU5JVChFT0ZFcnJvcikKICAgICBQT1NUX0lOSVQoUnVudGltZUVycm9yKQorICAgIFBPU1RfSU5JVChSZWN1cnNpb25FcnJvcikKICAgICBQT1NUX0lOSVQoTm90SW1wbGVtZW50ZWRFcnJvcikKICAgICBQT1NUX0lOSVQoTmFtZUVycm9yKQogICAgIFBPU1RfSU5JVChVbmJvdW5kTG9jYWxFcnJvcikKQEAgLTI2MzQsOSArMjY0MCw5IEBACiAgICAgcHJlYWxsb2NhdGVfbWVtZXJyb3JzKCk7CiAKICAgICBpZiAoIVB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCkgewotICAgICAgICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3QgPSBCYXNlRXhjZXB0aW9uX25ldygmX1B5RXhjX1J1bnRpbWVFcnJvciwgTlVMTCwgTlVMTCk7CisgICAgICAgIFB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCA9IEJhc2VFeGNlcHRpb25fbmV3KCZfUHlFeGNfUmVjdXJzaW9uRXJyb3IsIE5VTEwsIE5VTEwpOwogICAgICAgICBpZiAoIVB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbm5vdCBwcmUtYWxsb2NhdGUgUnVudGltZUVycm9yIGluc3RhbmNlIGZvciAiCisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW5ub3QgcHJlLWFsbG9jYXRlIFJlY3Vyc2lvbkVycm9yIGluc3RhbmNlIGZvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY3Vyc2lvbiBlcnJvcnMiKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeUJhc2VFeGNlcHRpb25PYmplY3QgKmVycl9pbnN0ID0KQEAgLTI2NDUsMTUgKzI2NTEsMTUgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpleGNfbWVzc2FnZTsKICAgICAgICAgICAgIGV4Y19tZXNzYWdlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIik7CiAgICAgICAgICAgICBpZiAoIWV4Y19tZXNzYWdlKQotICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbm5vdCBhbGxvY2F0ZSBhcmd1bWVudCBmb3IgUnVudGltZUVycm9yICIKKyAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW5ub3QgYWxsb2NhdGUgYXJndW1lbnQgZm9yIFJlY3Vyc2lvbkVycm9yICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZS1hbGxvY2F0aW9uIik7CiAgICAgICAgICAgICBhcmdzX3R1cGxlID0gUHlUdXBsZV9QYWNrKDEsIGV4Y19tZXNzYWdlKTsKICAgICAgICAgICAgIGlmICghYXJnc190dXBsZSkKLSAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW5ub3QgYWxsb2NhdGUgdHVwbGUgZm9yIFJ1bnRpbWVFcnJvciAiCisgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2Fubm90IGFsbG9jYXRlIHR1cGxlIGZvciBSZWN1cnNpb25FcnJvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmUtYWxsb2NhdGlvbiIpOwogICAgICAgICAgICAgUHlfREVDUkVGKGV4Y19tZXNzYWdlKTsKICAgICAgICAgICAgIGlmIChCYXNlRXhjZXB0aW9uX2luaXQoZXJyX2luc3QsIGFyZ3NfdHVwbGUsIE5VTEwpKQotICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImluaXQgb2YgcHJlLWFsbG9jYXRlZCBSdW50aW1lRXJyb3IgZmFpbGVkIik7CisgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiaW5pdCBvZiBwcmUtYWxsb2NhdGVkIFJlY3Vyc2lvbkVycm9yIGZhaWxlZCIpOwogICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3NfdHVwbGUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjcxOCw3ICsyNzI0LDcgQEAKICAgICBzYW1lX2Jhc2ljX3NpemUgPSAoCiAgICAgICAgIGNhdWdodF90eXBlX3NpemUgPT0gYmFzZV9leGNfc2l6ZSB8fAogICAgICAgICAoUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKGNhdWdodF90eXBlKSAmJgotICAgICAgICAgICAgKGNhdWdodF90eXBlX3NpemUgPT0gYmFzZV9leGNfc2l6ZSArIHNpemVvZihQeU9iamVjdCAqKSkKKyAgICAgICAgICAgIChjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgKyAoUHlfc3NpemVfdClzaXplb2YoUHlPYmplY3QgKikpCiAgICAgICAgICkKICAgICApOwogICAgIGlmIChjYXVnaHRfdHlwZS0+dHBfaW5pdCAhPSAoaW5pdHByb2MpQmFzZUV4Y2VwdGlvbl9pbml0IHx8CkBAIC0yODU2LDkgKzI4NjIsOCBAQAogICAgIH0KICAgICBpZiAoUHlVbmljb2RlX1RhaWxtYXRjaChzZWxmLT50ZXh0LCBwcmludF9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHRleHRfbGVuLCAtMSkpIHsKLSAgICAgICAgUHlfQ0xFQVIoc2VsZi0+bXNnKTsKLSAgICAgICAgc2VsZi0+bXNnID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIk1pc3NpbmcgcGFyZW50aGVzZXMgaW4gY2FsbCB0byAncHJpbnQnIik7CisgICAgICAgIFB5X1hTRVRSRUYoc2VsZi0+bXNnLAorICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoIk1pc3NpbmcgcGFyZW50aGVzZXMgaW4gY2FsbCB0byAncHJpbnQnIikpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKQEAgLTI4NzEsOSArMjg3Niw4IEBACiAgICAgfQogICAgIGlmIChQeVVuaWNvZGVfVGFpbG1hdGNoKHNlbGYtPnRleHQsIGV4ZWNfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCB0ZXh0X2xlbiwgLTEpKSB7Ci0gICAgICAgIFB5X0NMRUFSKHNlbGYtPm1zZyk7Ci0gICAgICAgIHNlbGYtPm1zZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBwYXJlbnRoZXNlcyBpbiBjYWxsIHRvICdleGVjJyIpOworICAgICAgICBQeV9YU0VUUkVGKHNlbGYtPm1zZywKKyAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJNaXNzaW5nIHBhcmVudGhlc2VzIGluIGNhbGwgdG8gJ2V4ZWMnIikpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgLyogRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGVycm9yIG1lc3NhZ2UgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZmlsZW9iamVjdC5jIGIvT2JqZWN0cy9maWxlb2JqZWN0LmMKaW5kZXggMWE5M2E2ZC4uMjM0ZDA3ZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9maWxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9maWxlb2JqZWN0LmMKQEAgLTQwMiwyNiArNDAyLDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZXJybm8gPSAwOwotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAobiA+IElOVF9NQVgpCi0gICAgICAgIG4gPSBJTlRfTUFYOwotICAgIG4gPSB3cml0ZShzZWxmLT5mZCwgc3RyLCAoaW50KW4pOwotI2Vsc2UKLSAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHN0ciwgbik7Ci0jZW5kaWYKKyAgICBuID0gX1B5X3dyaXRlKHNlbGYtPmZkLCBzdHIsIG4pOwogICAgIC8qIHNhdmUgZXJybm8sIGl0IGNhbiBiZSBtb2RpZmllZCBpbmRpcmVjdGx5IGJ5IFB5X1hERUNSRUYoKSAqLwogICAgIGVyciA9IGVycm5vOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBQeV9YREVDUkVGKGJ5dGVzKTsKIAotICAgIGlmIChuIDwgMCkgewotICAgICAgICBpZiAoZXJyID09IEVBR0FJTikKKyAgICBpZiAobiA9PSAtMSkgeworICAgICAgICBpZiAoZXJyID09IEVBR0FJTikgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwotICAgICAgICBlcnJubyA9IGVycjsKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCmluZGV4IGFjZDg4ZDYuLmQ5MmJlYzMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmxvYXRvYmplY3QuYworKysgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKQEAgLTEwMDEsOCArMTAwMSw5IEBACiAgICAgeCA9IFB5RmxvYXRfQXNEb3VibGUodik7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyIsICZvX25kaWdpdHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAob19uZGlnaXRzID09IE5VTEwpIHsKLSAgICAgICAgLyogc2luZ2xlLWFyZ3VtZW50IHJvdW5kOiByb3VuZCB0byBuZWFyZXN0IGludGVnZXIgKi8KKyAgICBpZiAob19uZGlnaXRzID09IE5VTEwgfHwgb19uZGlnaXRzID09IFB5X05vbmUpIHsKKyAgICAgICAgLyogc2luZ2xlLWFyZ3VtZW50IHJvdW5kIG9yIHdpdGggTm9uZSBuZGlnaXRzOgorICAgICAgICAgKiByb3VuZCB0byBuZWFyZXN0IGludGVnZXIgKi8KICAgICAgICAgcm91bmRlZCA9IHJvdW5kKHgpOwogICAgICAgICBpZiAoZmFicyh4LXJvdW5kZWQpID09IDAuNSkKICAgICAgICAgICAgIC8qIGhhbGZ3YXkgY2FzZTogcm91bmQgdG8gZXZlbiAqLwpAQCAtMjA0OCw3ICsyMDQ5LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGZsb2F0IHkgPSAoZmxvYXQpeDsKLSAgICAgICAgY29uc3QgY2hhciAqcyA9IChjaGFyKikmeTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyKikmeTsKICAgICAgICAgaW50IGksIGluY3IgPSAxOwogCiAgICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh5KSAmJiAhUHlfSVNfSU5GSU5JVFkoeCkpCkBAIC0yMTg0LDcgKzIxODUsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBjb25zdCBjaGFyICpzID0gKGNoYXIqKSZ4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIqKSZ4OwogICAgICAgICBpbnQgaSwgaW5jciA9IDE7CiAKICAgICAgICAgaWYgKChkb3VibGVfZm9ybWF0ID09IGllZWVfbGl0dGxlX2VuZGlhbl9mb3JtYXQgJiYgIWxlKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jIGIvT2JqZWN0cy9mcmFtZW9iamVjdC5jCmluZGV4IDU1ZWU1NjMuLjlhYWRkNjEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZnJhbWVvYmplY3QuYworKysgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKQEAgLTE5Niw2ICsxOTYsNyBAQAogICAgICAgICBjYXNlIFNFVFVQX0VYQ0VQVDoKICAgICAgICAgY2FzZSBTRVRVUF9GSU5BTExZOgogICAgICAgICBjYXNlIFNFVFVQX1dJVEg6CisgICAgICAgIGNhc2UgU0VUVVBfQVNZTkNfV0lUSDoKICAgICAgICAgICAgIGJsb2Nrc3RhY2tbYmxvY2tzdGFja190b3ArK10gPSBhZGRyOwogICAgICAgICAgICAgaW5fZmluYWxseVtibG9ja3N0YWNrX3RvcC0xXSA9IDA7CiAgICAgICAgICAgICBicmVhazsKQEAgLTIwMyw3ICsyMDQsOCBAQAogICAgICAgICBjYXNlIFBPUF9CTE9DSzoKICAgICAgICAgICAgIGFzc2VydChibG9ja3N0YWNrX3RvcCA+IDApOwogICAgICAgICAgICAgc2V0dXBfb3AgPSBjb2RlW2Jsb2Nrc3RhY2tbYmxvY2tzdGFja190b3AtMV1dOwotICAgICAgICAgICAgaWYgKHNldHVwX29wID09IFNFVFVQX0ZJTkFMTFkgfHwgc2V0dXBfb3AgPT0gU0VUVVBfV0lUSCkgeworICAgICAgICAgICAgaWYgKHNldHVwX29wID09IFNFVFVQX0ZJTkFMTFkgfHwgc2V0dXBfb3AgPT0gU0VUVVBfV0lUSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgc2V0dXBfb3AgPT0gU0VUVVBfQVNZTkNfV0lUSCkgewogICAgICAgICAgICAgICAgIGluX2ZpbmFsbHlbYmxvY2tzdGFja190b3AtMV0gPSAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CkBAIC0yMTgsNyArMjIwLDggQEAKICAgICAgICAgICAgICAqIGJlIHNlZWluZyBzdWNoIGFuIEVORF9GSU5BTExZLikgKi8KICAgICAgICAgICAgIGlmIChibG9ja3N0YWNrX3RvcCA+IDApIHsKICAgICAgICAgICAgICAgICBzZXR1cF9vcCA9IGNvZGVbYmxvY2tzdGFja1tibG9ja3N0YWNrX3RvcC0xXV07Ci0gICAgICAgICAgICAgICAgaWYgKHNldHVwX29wID09IFNFVFVQX0ZJTkFMTFkgfHwgc2V0dXBfb3AgPT0gU0VUVVBfV0lUSCkgeworICAgICAgICAgICAgICAgIGlmIChzZXR1cF9vcCA9PSBTRVRVUF9GSU5BTExZIHx8IHNldHVwX29wID09IFNFVFVQX1dJVEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHNldHVwX29wID09IFNFVFVQX0FTWU5DX1dJVEgpIHsKICAgICAgICAgICAgICAgICAgICAgYmxvY2tzdGFja190b3AtLTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yODEsNiArMjg0LDcgQEAKICAgICAgICAgY2FzZSBTRVRVUF9FWENFUFQ6CiAgICAgICAgIGNhc2UgU0VUVVBfRklOQUxMWToKICAgICAgICAgY2FzZSBTRVRVUF9XSVRIOgorICAgICAgICBjYXNlIFNFVFVQX0FTWU5DX1dJVEg6CiAgICAgICAgICAgICBkZWx0YV9pYmxvY2srKzsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zNDUsMTUgKzM0OSwxMyBAQAogc3RhdGljIGludAogZnJhbWVfc2V0dHJhY2UoUHlGcmFtZU9iamVjdCAqZiwgUHlPYmplY3QqIHYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgUHlPYmplY3QqIG9sZF92YWx1ZTsKLQogICAgIC8qIFdlIHJlbHkgb24gZl9saW5lbm8gYmVpbmcgYWNjdXJhdGUgd2hlbiBmX3RyYWNlIGlzIHNldC4gKi8KICAgICBmLT5mX2xpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihmKTsKIAotICAgIG9sZF92YWx1ZSA9IGYtPmZfdHJhY2U7CisgICAgaWYgKHYgPT0gUHlfTm9uZSkKKyAgICAgICAgdiA9IE5VTEw7CiAgICAgUHlfWElOQ1JFRih2KTsKLSAgICBmLT5mX3RyYWNlID0gdjsKLSAgICBQeV9YREVDUkVGKG9sZF92YWx1ZSk7CisgICAgUHlfWFNFVFJFRihmLT5mX3RyYWNlLCB2KTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtODUzLDggKzg1NSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVzW2pdICE9IHZhbHVlKSB7CiAgICAgICAgICAgICBQeV9YSU5DUkVGKHZhbHVlKTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodmFsdWVzW2pdKTsKLSAgICAgICAgICAgIHZhbHVlc1tqXSA9IHZhbHVlOworICAgICAgICAgICAgUHlfWFNFVFJFRih2YWx1ZXNbal0sIHZhbHVlKTsKICAgICAgICAgfQogICAgICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2Z1bmNvYmplY3QuYyBiL09iamVjdHMvZnVuY29iamVjdC5jCmluZGV4IGIwNDM5MzQuLmU2YzMyN2QgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZnVuY29iamVjdC5jCisrKyBiL09iamVjdHMvZnVuY29iamVjdC5jCkBAIC0xMjcsOCArMTI3LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAibm9uLXR1cGxlIGRlZmF1bHQgYXJncyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFB5X1hERUNSRUYoKChQeUZ1bmN0aW9uT2JqZWN0ICopIG9wKSAtPiBmdW5jX2RlZmF1bHRzKTsKLSAgICAoKFB5RnVuY3Rpb25PYmplY3QgKikgb3ApIC0+IGZ1bmNfZGVmYXVsdHMgPSBkZWZhdWx0czsKKyAgICBQeV9YU0VUUkVGKCgoUHlGdW5jdGlvbk9iamVjdCAqKW9wKS0+ZnVuY19kZWZhdWx0cywgZGVmYXVsdHMpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNTksOCArMTU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJub24tZGljdCBrZXl3b3JkIG9ubHkgZGVmYXVsdCBhcmdzIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgUHlfWERFQ1JFRigoKFB5RnVuY3Rpb25PYmplY3QgKilvcCkgLT4gZnVuY19rd2RlZmF1bHRzKTsKLSAgICAoKFB5RnVuY3Rpb25PYmplY3QgKikgb3ApIC0+IGZ1bmNfa3dkZWZhdWx0cyA9IGRlZmF1bHRzOworICAgIFB5X1hTRVRSRUYoKChQeUZ1bmN0aW9uT2JqZWN0ICopb3ApLT5mdW5jX2t3ZGVmYXVsdHMsIGRlZmF1bHRzKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTkyLDggKzE5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBjbG9zdXJlLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBQeV9YREVDUkVGKCgoUHlGdW5jdGlvbk9iamVjdCAqKSBvcCkgLT4gZnVuY19jbG9zdXJlKTsKLSAgICAoKFB5RnVuY3Rpb25PYmplY3QgKikgb3ApIC0+IGZ1bmNfY2xvc3VyZSA9IGNsb3N1cmU7CisgICAgUHlfWFNFVFJFRigoKFB5RnVuY3Rpb25PYmplY3QgKilvcCktPmZ1bmNfY2xvc3VyZSwgY2xvc3VyZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIyNCw4ICsyMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1kaWN0IGFubm90YXRpb25zIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgUHlfWERFQ1JFRigoKFB5RnVuY3Rpb25PYmplY3QgKilvcCkgLT4gZnVuY19hbm5vdGF0aW9ucyk7Ci0gICAgKChQeUZ1bmN0aW9uT2JqZWN0ICopIG9wKSAtPiBmdW5jX2Fubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CisgICAgUHlfWFNFVFJFRigoKFB5RnVuY3Rpb25PYmplY3QgKilvcCktPmZ1bmNfYW5ub3RhdGlvbnMsIGFubm90YXRpb25zKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNTMxLDggKzUyNyw3IEBACiAKICAgICBpZiAobmFtZSAhPSBQeV9Ob25lKSB7CiAgICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKLSAgICAgICAgUHlfREVDUkVGKG5ld2Z1bmMtPmZ1bmNfbmFtZSk7Ci0gICAgICAgIG5ld2Z1bmMtPmZ1bmNfbmFtZSA9IG5hbWU7CisgICAgICAgIFB5X1NFVFJFRihuZXdmdW5jLT5mdW5jX25hbWUsIG5hbWUpOwogICAgIH0KICAgICBpZiAoZGVmYXVsdHMgIT0gUHlfTm9uZSkgewogICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdHMpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9nZW5vYmplY3QuYyBiL09iamVjdHMvZ2Vub2JqZWN0LmMKaW5kZXggNjdlNmVmOS4uYjNlMGE0NiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9nZW5vYmplY3QuYworKysgYi9PYmplY3RzL2dlbm9iamVjdC5jCkBAIC0xMiw2ICsxMiw4IEBACiB7CiAgICAgUHlfVklTSVQoKFB5T2JqZWN0ICopZ2VuLT5naV9mcmFtZSk7CiAgICAgUHlfVklTSVQoZ2VuLT5naV9jb2RlKTsKKyAgICBQeV9WSVNJVChnZW4tPmdpX25hbWUpOworICAgIFB5X1ZJU0lUKGdlbi0+Z2lfcXVhbG5hbWUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yMiw2ICsyNCwxOCBAQAogICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKIAorICAgIC8qIElmIGBnZW5gIGlzIGEgY29yb3V0aW5lLCBhbmQgaWYgaXQgd2FzIG5ldmVyIGF3YWl0ZWQgb24sCisgICAgICAgaXNzdWUgYSBSdW50aW1lV2FybmluZy4gKi8KKyAgICBpZiAoZ2VuLT5naV9jb2RlICE9IE5VTEwKKyAgICAgICAgICAgICYmICgoUHlDb2RlT2JqZWN0ICopZ2VuLT5naV9jb2RlKS0+Y29fZmxhZ3MgJiBDT19DT1JPVVRJTkUKKyAgICAgICAgICAgICYmIGdlbi0+Z2lfZnJhbWUgIT0gTlVMTAorICAgICAgICAgICAgJiYgZ2VuLT5naV9mcmFtZS0+Zl9sYXN0aSA9PSAtMQorICAgICAgICAgICAgJiYgIVB5RXJyX09jY3VycmVkKCkKKyAgICAgICAgICAgICYmIFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfUnVudGltZVdhcm5pbmcsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JvdXRpbmUgJyUuNTBTJyB3YXMgbmV2ZXIgYXdhaXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbi0+Z2lfcXVhbG5hbWUpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoZ2VuLT5naV9mcmFtZSA9PSBOVUxMIHx8IGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgPT0gTlVMTCkKICAgICAgICAgLyogR2VuZXJhdG9yIGlzbid0IHBhdXNlZCwgc28gbm8gbmVlZCB0byBjbG9zZSAqLwogICAgICAgICByZXR1cm47CkBAIC01OCwzMyArNzIsNDkgQEAKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBQeV9DTEVBUihnZW4tPmdpX2ZyYW1lKTsKICAgICBQeV9DTEVBUihnZW4tPmdpX2NvZGUpOworICAgIFB5X0NMRUFSKGdlbi0+Z2lfbmFtZSk7CisgICAgUHlfQ0xFQVIoZ2VuLT5naV9xdWFsbmFtZSk7CiAgICAgUHlPYmplY3RfR0NfRGVsKGdlbik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1nZW5fc2VuZF9leChQeUdlbk9iamVjdCAqZ2VuLCBQeU9iamVjdCAqYXJnLCBpbnQgZXhjKQorZ2VuX3NlbmRfZXgoUHlHZW5PYmplY3QgKmdlbiwgUHlPYmplY3QgKmFyZywgaW50IGV4YywgaW50IGNsb3NpbmcpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBQeUZyYW1lT2JqZWN0ICpmID0gZ2VuLT5naV9mcmFtZTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgaWYgKGdlbi0+Z2lfcnVubmluZykgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJnZW5lcmF0b3IgYWxyZWFkeSBleGVjdXRpbmciKTsKKyAgICAgICAgY2hhciAqbXNnID0gImdlbmVyYXRvciBhbHJlYWR5IGV4ZWN1dGluZyI7CisgICAgICAgIGlmIChQeUNvcm9fQ2hlY2tFeGFjdChnZW4pKQorICAgICAgICAgICAgbXNnID0gImNvcm91dGluZSBhbHJlYWR5IGV4ZWN1dGluZyI7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBtc2cpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGYgPT0gTlVMTCB8fCBmLT5mX3N0YWNrdG9wID09IE5VTEwpIHsKLSAgICAgICAgLyogT25seSBzZXQgZXhjZXB0aW9uIGlmIGNhbGxlZCBmcm9tIHNlbmQoKSAqLwotICAgICAgICBpZiAoYXJnICYmICFleGMpCisgICAgICAgIGlmIChQeUNvcm9fQ2hlY2tFeGFjdChnZW4pICYmICFjbG9zaW5nKSB7CisgICAgICAgICAgICAvKiBgZ2VuYCBpcyBhbiBleGhhdXN0ZWQgY29yb3V0aW5lOiByYWlzZSBhbiBlcnJvciwKKyAgICAgICAgICAgICAgIGV4Y2VwdCB3aGVuIGNhbGxlZCBmcm9tIGdlbl9jbG9zZSgpLCB3aGljaCBzaG91bGQKKyAgICAgICAgICAgICAgIGFsd2F5cyBiZSBhIHNpbGVudCBtZXRob2QuICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICJjYW5ub3QgcmV1c2UgYWxyZWFkeSBhd2FpdGVkIGNvcm91dGluZSIpOworICAgICAgICB9IGVsc2UgaWYgKGFyZyAmJiAhZXhjKSB7CisgICAgICAgICAgICAvKiBgZ2VuYCBpcyBhbiBleGhhdXN0ZWQgZ2VuZXJhdG9yOgorICAgICAgICAgICAgICAgb25seSBzZXQgZXhjZXB0aW9uIGlmIGNhbGxlZCBmcm9tIHNlbmQoKS4gKi8KICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKGYtPmZfbGFzdGkgPT0gLTEpIHsKICAgICAgICAgaWYgKGFyZyAmJiBhcmcgIT0gUHlfTm9uZSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3Qgc2VuZCBub24tTm9uZSB2YWx1ZSB0byBhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAianVzdC1zdGFydGVkIGdlbmVyYXRvciIpOworICAgICAgICAgICAgY2hhciAqbXNnID0gImNhbid0IHNlbmQgbm9uLU5vbmUgdmFsdWUgdG8gYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAianVzdC1zdGFydGVkIGdlbmVyYXRvciI7CisgICAgICAgICAgICBpZiAoUHlDb3JvX0NoZWNrRXhhY3QoZ2VuKSkKKyAgICAgICAgICAgICAgICBtc2cgPSAiY2FuJ3Qgc2VuZCBub24tTm9uZSB2YWx1ZSB0byBhICIKKyAgICAgICAgICAgICAgICAgICAgICAianVzdC1zdGFydGVkIGNvcm91dGluZSI7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCBtc2cpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTI2LDYgKzE1Niw1MCBAQAogICAgICAgICB9CiAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CiAgICAgfQorICAgIGVsc2UgaWYgKCFyZXN1bHQgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkgeworICAgICAgICAvKiBDaGVjayBmb3IgX19mdXR1cmVfXyBnZW5lcmF0b3Jfc3RvcCBhbmQgY29uZGl0aW9uYWxseSB0dXJuCisgICAgICAgICAqIGEgbGVha2luZyBTdG9wSXRlcmF0aW9uIGludG8gUnVudGltZUVycm9yICh3aXRoIGl0cyBjYXVzZQorICAgICAgICAgKiBzZXQgYXBwcm9wcmlhdGVseSkuICovCisgICAgICAgIGlmICgoKFB5Q29kZU9iamVjdCAqKWdlbi0+Z2lfY29kZSktPmNvX2ZsYWdzICYKKyAgICAgICAgICAgICAgKENPX0ZVVFVSRV9HRU5FUkFUT1JfU1RPUCB8IENPX0NPUk9VVElORSB8IENPX0lURVJBQkxFX0NPUk9VVElORSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGMsICp2YWwsICp2YWwyLCAqdGI7CisgICAgICAgICAgICBjaGFyICptc2cgPSAiZ2VuZXJhdG9yIHJhaXNlZCBTdG9wSXRlcmF0aW9uIjsKKyAgICAgICAgICAgIGlmIChQeUNvcm9fQ2hlY2tFeGFjdChnZW4pKQorICAgICAgICAgICAgICAgIG1zZyA9ICJjb3JvdXRpbmUgcmFpc2VkIFN0b3BJdGVyYXRpb24iOworICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKKyAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsLCAmdGIpOworICAgICAgICAgICAgaWYgKHRiICE9IE5VTEwpCisgICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgdGIpOworICAgICAgICAgICAgUHlfREVDUkVGKGV4Yyk7CisgICAgICAgICAgICBQeV9YREVDUkVGKHRiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIG1zZyk7CisgICAgICAgICAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsMiwgJnRiKTsKKyAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsMiwgJnRiKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWwpOworICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0Q2F1c2UodmFsMiwgdmFsKTsKKyAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldENvbnRleHQodmFsMiwgdmFsKTsKKyAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwyLCB0Yik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CisKKyAgICAgICAgICAgIC8qIFBvcCB0aGUgZXhjZXB0aW9uIGJlZm9yZSBpc3N1aW5nIGEgd2FybmluZy4gKi8KKyAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CisKKyAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRm9ybWF0KFB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdG9yICclLjUwUycgcmFpc2VkIFN0b3BJdGVyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuLT5naV9xdWFsbmFtZSkpIHsKKyAgICAgICAgICAgICAgICAvKiBXYXJuaW5nIHdhcyBjb252ZXJ0ZWQgdG8gYW4gZXJyb3IuICovCisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihleGMpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodmFsKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAogICAgIGlmICghcmVzdWx0IHx8IGYtPmZfc3RhY2t0b3AgPT0gTlVMTCkgewogICAgICAgICAvKiBnZW5lcmF0b3IgY2FuJ3QgYmUgcmVydW4sIHNvIHJlbGVhc2UgdGhlIGZyYW1lICovCkBAIC0xNTUsNyArMjI5LDcgQEAKIFB5T2JqZWN0ICoKIF9QeUdlbl9TZW5kKFB5R2VuT2JqZWN0ICpnZW4sIFB5T2JqZWN0ICphcmcpCiB7Ci0gICAgcmV0dXJuIGdlbl9zZW5kX2V4KGdlbiwgYXJnLCAwKTsKKyAgICByZXR1cm4gZ2VuX3NlbmRfZXgoZ2VuLCBhcmcsIDAsIDApOwogfQogCiBQeURvY19TVFJWQVIoY2xvc2VfZG9jLApAQCAtMTkzLDggKzI2Nyw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1nZW5feWYoUHlHZW5PYmplY3QgKmdlbikKK1B5T2JqZWN0ICoKK19QeUdlbl95ZihQeUdlbk9iamVjdCAqZ2VuKQogewogICAgIFB5T2JqZWN0ICp5ZiA9IE5VTEw7CiAgICAgUHlGcmFtZU9iamVjdCAqZiA9IGdlbi0+Z2lfZnJhbWU7CkBAIC0yMTYsNyArMjkwLDcgQEAKIGdlbl9jbG9zZShQeUdlbk9iamVjdCAqZ2VuLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmV0dmFsOwotICAgIFB5T2JqZWN0ICp5ZiA9IGdlbl95ZihnZW4pOworICAgIFB5T2JqZWN0ICp5ZiA9IF9QeUdlbl95ZihnZW4pOwogICAgIGludCBlcnIgPSAwOwogCiAgICAgaWYgKHlmKSB7CkBAIC0yMjcsMTEgKzMwMSwxMyBAQAogICAgIH0KICAgICBpZiAoZXJyID09IDApCiAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfR2VuZXJhdG9yRXhpdCk7Ci0gICAgcmV0dmFsID0gZ2VuX3NlbmRfZXgoZ2VuLCBQeV9Ob25lLCAxKTsKKyAgICByZXR2YWwgPSBnZW5fc2VuZF9leChnZW4sIFB5X05vbmUsIDEsIDEpOwogICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgY2hhciAqbXNnID0gImdlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQiOworICAgICAgICBpZiAoUHlDb3JvX0NoZWNrRXhhY3QoZ2VuKSkKKyAgICAgICAgICAgIG1zZyA9ICJjb3JvdXRpbmUgaWdub3JlZCBHZW5lcmF0b3JFeGl0IjsKICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdG9yIGlnbm9yZWQgR2VuZXJhdG9yRXhpdCIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCBtc2cpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikKQEAgLTI1NCw3ICszMzAsNyBAQAogICAgIFB5T2JqZWN0ICp0eXA7CiAgICAgUHlPYmplY3QgKnRiID0gTlVMTDsKICAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKLSAgICBQeU9iamVjdCAqeWYgPSBnZW5feWYoZ2VuKTsKKyAgICBQeU9iamVjdCAqeWYgPSBfUHlHZW5feWYoZ2VuKTsKICAgICBfUHlfSURFTlRJRklFUih0aHJvdyk7CiAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJ0aHJvdyIsIDEsIDMsICZ0eXAsICZ2YWwsICZ0YikpCkBAIC0yNjksNyArMzQ1LDcgQEAKICAgICAgICAgICAgIGdlbi0+Z2lfcnVubmluZyA9IDA7CiAgICAgICAgICAgICBQeV9ERUNSRUYoeWYpOwogICAgICAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdlbl9zZW5kX2V4KGdlbiwgUHlfTm9uZSwgMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdlbl9zZW5kX2V4KGdlbiwgUHlfTm9uZSwgMSwgMCk7CiAgICAgICAgICAgICBnb3RvIHRocm93X2hlcmU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFB5R2VuX0NoZWNrRXhhY3QoeWYpKSB7CkBAIC0zMDIsMTAgKzM3OCwxMCBAQAogICAgICAgICAgICAgLyogVGVybWluYXRpb24gcmVwZXRpdGlvbiBvZiBZSUVMRF9GUk9NICovCiAgICAgICAgICAgICBnZW4tPmdpX2ZyYW1lLT5mX2xhc3RpKys7CiAgICAgICAgICAgICBpZiAoX1B5R2VuX0ZldGNoU3RvcEl0ZXJhdGlvblZhbHVlKCZ2YWwpID09IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSBnZW5fc2VuZF9leChnZW4sIHZhbCwgMCk7CisgICAgICAgICAgICAgICAgcmV0ID0gZ2VuX3NlbmRfZXgoZ2VuLCB2YWwsIDAsIDApOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWwpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSBnZW5fc2VuZF9leChnZW4sIFB5X05vbmUsIDEpOworICAgICAgICAgICAgICAgIHJldCA9IGdlbl9zZW5kX2V4KGdlbiwgUHlfTm9uZSwgMSwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJldDsKQEAgLTM1OSw3ICs0MzUsNyBAQAogICAgIH0KIAogICAgIFB5RXJyX1Jlc3RvcmUodHlwLCB2YWwsIHRiKTsKLSAgICByZXR1cm4gZ2VuX3NlbmRfZXgoZ2VuLCBQeV9Ob25lLCAxKTsKKyAgICByZXR1cm4gZ2VuX3NlbmRfZXgoZ2VuLCBQeV9Ob25lLCAxLCAwKTsKIAogZmFpbGVkX3Rocm93OgogICAgIC8qIERpZG4ndCB1c2Ugb3VyIGFyZ3VtZW50cywgc28gcmVzdG9yZSB0aGVpciBvcmlnaW5hbCByZWZjb3VudHMgKi8KQEAgLTM3MywxMSArNDQ5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZW5faXRlcm5leHQoUHlHZW5PYmplY3QgKmdlbikKIHsKLSAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKLSAgICBQeU9iamVjdCAqcmV0OwotICAgIHJldCA9IGdlbl9zZW5kX2V4KGdlbiwgdmFsLCAwKTsKLSAgICBQeV9YREVDUkVGKHZhbCk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gZ2VuX3NlbmRfZXgoZ2VuLCBOVUxMLCAwLCAwKTsKIH0KIAogLyoKQEAgLTQzNCwzMyArNTA2LDg0IEBACiBnZW5fcmVwcihQeUdlbk9iamVjdCAqZ2VuKQogewogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGdlbmVyYXRvciBvYmplY3QgJVMgYXQgJXA+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQeUNvZGVPYmplY3QgKilnZW4tPmdpX2NvZGUpLT5jb19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW4tPmdpX3F1YWxuYW1lLCBnZW4pOwogfQogCi0KIHN0YXRpYyBQeU9iamVjdCAqCi1nZW5fZ2V0X25hbWUoUHlHZW5PYmplY3QgKmdlbikKK2dlbl9nZXRfbmFtZShQeUdlbk9iamVjdCAqb3ApCiB7Ci0gICAgUHlPYmplY3QgKm5hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWdlbi0+Z2lfY29kZSktPmNvX25hbWU7Ci0gICAgUHlfSU5DUkVGKG5hbWUpOwotICAgIHJldHVybiBuYW1lOworICAgIFB5X0lOQ1JFRihvcC0+Z2lfbmFtZSk7CisgICAgcmV0dXJuIG9wLT5naV9uYW1lOwogfQogCitzdGF0aWMgaW50CitnZW5fc2V0X25hbWUoUHlHZW5PYmplY3QgKm9wLCBQeU9iamVjdCAqdmFsdWUpCit7CisgICAgUHlPYmplY3QgKnRtcDsKIAotUHlEb2NfU1RSVkFSKGdlbl9fbmFtZV9fZG9jX18sCi0iUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0b3IncyBhc3NvY2lhdGVkIGNvZGUgb2JqZWN0LiIpOworICAgIC8qIE5vdCBsZWdhbCB0byBkZWwgZ2VuLmdpX25hbWUgb3IgdG8gc2V0IGl0IHRvIGFueXRoaW5nCisgICAgICogb3RoZXIgdGhhbiBhIHN0cmluZyBvYmplY3QuICovCisgICAgaWYgKHZhbHVlID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX25hbWVfXyBtdXN0IGJlIHNldCB0byBhIHN0cmluZyBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB0bXAgPSBvcC0+Z2lfbmFtZTsKKyAgICBQeV9JTkNSRUYodmFsdWUpOworICAgIG9wLT5naV9uYW1lID0gdmFsdWU7CisgICAgUHlfREVDUkVGKHRtcCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZW5fZ2V0X3F1YWxuYW1lKFB5R2VuT2JqZWN0ICpvcCkKK3sKKyAgICBQeV9JTkNSRUYob3AtPmdpX3F1YWxuYW1lKTsKKyAgICByZXR1cm4gb3AtPmdpX3F1YWxuYW1lOworfQorCitzdGF0aWMgaW50CitnZW5fc2V0X3F1YWxuYW1lKFB5R2VuT2JqZWN0ICpvcCwgUHlPYmplY3QgKnZhbHVlKQoreworICAgIFB5T2JqZWN0ICp0bXA7CisKKyAgICAvKiBOb3QgbGVnYWwgdG8gZGVsIGdlbi5fX3F1YWxuYW1lX18gb3IgdG8gc2V0IGl0IHRvIGFueXRoaW5nCisgICAgICogb3RoZXIgdGhhbiBhIHN0cmluZyBvYmplY3QuICovCisgICAgaWYgKHZhbHVlID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX3F1YWxuYW1lX18gbXVzdCBiZSBzZXQgdG8gYSBzdHJpbmcgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdG1wID0gb3AtPmdpX3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgb3AtPmdpX3F1YWxuYW1lID0gdmFsdWU7CisgICAgUHlfREVDUkVGKHRtcCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZW5fZ2V0eWllbGRmcm9tKFB5R2VuT2JqZWN0ICpnZW4pCit7CisgICAgUHlPYmplY3QgKnlmID0gX1B5R2VuX3lmKGdlbik7CisgICAgaWYgKHlmID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiB5ZjsKK30KIAogc3RhdGljIFB5R2V0U2V0RGVmIGdlbl9nZXRzZXRsaXN0W10gPSB7Ci0gICAgeyJfX25hbWVfXyIsIChnZXR0ZXIpZ2VuX2dldF9uYW1lLCBOVUxMLCBnZW5fX25hbWVfX2RvY19ffSwKLSAgICB7TlVMTH0KKyAgICB7Il9fbmFtZV9fIiwgKGdldHRlcilnZW5fZ2V0X25hbWUsIChzZXR0ZXIpZ2VuX3NldF9uYW1lLAorICAgICBQeURvY19TVFIoIm5hbWUgb2YgdGhlIGdlbmVyYXRvciIpfSwKKyAgICB7Il9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpZ2VuX2dldF9xdWFsbmFtZSwgKHNldHRlcilnZW5fc2V0X3F1YWxuYW1lLAorICAgICBQeURvY19TVFIoInF1YWxpZmllZCBuYW1lIG9mIHRoZSBnZW5lcmF0b3IiKX0sCisgICAgeyJnaV95aWVsZGZyb20iLCAoZ2V0dGVyKWdlbl9nZXR5aWVsZGZyb20sIE5VTEwsCisgICAgIFB5RG9jX1NUUigib2JqZWN0IGJlaW5nIGl0ZXJhdGVkIGJ5IHlpZWxkIGZyb20sIG9yIE5vbmUiKX0sCisgICAge05VTEx9IC8qIFNlbnRpbmVsICovCiB9OwogCi0KIHN0YXRpYyBQeU1lbWJlckRlZiBnZW5fbWVtYmVybGlzdFtdID0gewotICAgIHsiZ2lfZnJhbWUiLCAgICAgICAgVF9PQkpFQ1QsIG9mZnNldG9mKFB5R2VuT2JqZWN0LCBnaV9mcmFtZSksICAgICAgUkVBRE9OTFl9LAotICAgIHsiZ2lfcnVubmluZyIsICAgICAgVF9CT09MLCAgICBvZmZzZXRvZihQeUdlbk9iamVjdCwgZ2lfcnVubmluZyksICAgIFJFQURPTkxZfSwKLSAgICB7ImdpX2NvZGUiLCAgICAgVF9PQkpFQ1QsIG9mZnNldG9mKFB5R2VuT2JqZWN0LCBnaV9jb2RlKSwgIFJFQURPTkxZfSwKKyAgICB7ImdpX2ZyYW1lIiwgICAgIFRfT0JKRUNULCBvZmZzZXRvZihQeUdlbk9iamVjdCwgZ2lfZnJhbWUpLCAgICBSRUFET05MWX0sCisgICAgeyJnaV9ydW5uaW5nIiwgICBUX0JPT0wsICAgb2Zmc2V0b2YoUHlHZW5PYmplY3QsIGdpX3J1bm5pbmcpLCAgUkVBRE9OTFl9LAorICAgIHsiZ2lfY29kZSIsICAgICAgVF9PQkpFQ1QsIG9mZnNldG9mKFB5R2VuT2JqZWN0LCBnaV9jb2RlKSwgICAgIFJFQURPTkxZfSwKICAgICB7TlVMTH0gICAgICAvKiBTZW50aW5lbCAqLwogfTsKIApAQCAtNDgxLDcgKzYwNCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2FzeW5jICovCiAgICAgKHJlcHJmdW5jKWdlbl9yZXByLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCkBAIC01MjUsMTAgKzY0OCwxMSBAQAogICAgIF9QeUdlbl9GaW5hbGl6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAKLVB5T2JqZWN0ICoKLVB5R2VuX05ldyhQeUZyYW1lT2JqZWN0ICpmKQorc3RhdGljIFB5T2JqZWN0ICoKK2dlbl9uZXdfd2l0aF9xdWFsbmFtZShQeVR5cGVPYmplY3QgKnR5cGUsIFB5RnJhbWVPYmplY3QgKmYsCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpxdWFsbmFtZSkKIHsKLSAgICBQeUdlbk9iamVjdCAqZ2VuID0gUHlPYmplY3RfR0NfTmV3KFB5R2VuT2JqZWN0LCAmUHlHZW5fVHlwZSk7CisgICAgUHlHZW5PYmplY3QgKmdlbiA9IFB5T2JqZWN0X0dDX05ldyhQeUdlbk9iamVjdCwgdHlwZSk7CiAgICAgaWYgKGdlbiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC01MzksMTAgKzY2MywzMiBAQAogICAgIGdlbi0+Z2lfY29kZSA9IChQeU9iamVjdCAqKShmLT5mX2NvZGUpOwogICAgIGdlbi0+Z2lfcnVubmluZyA9IDA7CiAgICAgZ2VuLT5naV93ZWFrcmVmbGlzdCA9IE5VTEw7CisgICAgaWYgKG5hbWUgIT0gTlVMTCkKKyAgICAgICAgZ2VuLT5naV9uYW1lID0gbmFtZTsKKyAgICBlbHNlCisgICAgICAgIGdlbi0+Z2lfbmFtZSA9ICgoUHlDb2RlT2JqZWN0ICopZ2VuLT5naV9jb2RlKS0+Y29fbmFtZTsKKyAgICBQeV9JTkNSRUYoZ2VuLT5naV9uYW1lKTsKKyAgICBpZiAocXVhbG5hbWUgIT0gTlVMTCkKKyAgICAgICAgZ2VuLT5naV9xdWFsbmFtZSA9IHF1YWxuYW1lOworICAgIGVsc2UKKyAgICAgICAgZ2VuLT5naV9xdWFsbmFtZSA9IGdlbi0+Z2lfbmFtZTsKKyAgICBQeV9JTkNSRUYoZ2VuLT5naV9xdWFsbmFtZSk7CiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKGdlbik7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWdlbjsKIH0KIAorUHlPYmplY3QgKgorUHlHZW5fTmV3V2l0aFF1YWxOYW1lKFB5RnJhbWVPYmplY3QgKmYsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqcXVhbG5hbWUpCit7CisgICAgcmV0dXJuIGdlbl9uZXdfd2l0aF9xdWFsbmFtZSgmUHlHZW5fVHlwZSwgZiwgbmFtZSwgcXVhbG5hbWUpOworfQorCitQeU9iamVjdCAqCitQeUdlbl9OZXcoUHlGcmFtZU9iamVjdCAqZikKK3sKKyAgICByZXR1cm4gZ2VuX25ld193aXRoX3F1YWxuYW1lKCZQeUdlbl9UeXBlLCBmLCBOVUxMLCBOVUxMKTsKK30KKwogaW50CiBQeUdlbl9OZWVkc0ZpbmFsaXppbmcoUHlHZW5PYmplY3QgKmdlbikKIHsKQEAgLTU2MCwzICs3MDYsMzgzIEBACiAgICAgLyogTm8gYmxvY2tzIGV4Y2VwdCBsb29wcywgaXQncyBzYWZlIHRvIHNraXAgZmluYWxpemF0aW9uLiAqLwogICAgIHJldHVybiAwOwogfQorCisvKiBDb3JvdXRpbmUgT2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlDb3JvT2JqZWN0ICpjd19jb3JvdXRpbmU7Cit9IFB5Q29yb1dyYXBwZXI7CisKK3N0YXRpYyBpbnQKK2dlbl9pc19jb3JvdXRpbmUoUHlPYmplY3QgKm8pCit7CisgICAgaWYgKFB5R2VuX0NoZWNrRXhhY3QobykpIHsKKyAgICAgICAgUHlDb2RlT2JqZWN0ICpjb2RlID0gKFB5Q29kZU9iamVjdCAqKSgoUHlHZW5PYmplY3QqKW8pLT5naV9jb2RlOworICAgICAgICBpZiAoY29kZS0+Y29fZmxhZ3MgJiBDT19JVEVSQUJMRV9DT1JPVVRJTkUpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKgorICogICBUaGlzIGhlbHBlciBmdW5jdGlvbiByZXR1cm5zIGFuIGF3YWl0YWJsZSBmb3IgYG9gOgorICogICAgIC0gYG9gIGlmIGBvYCBpcyBhIGNvcm91dGluZS1vYmplY3Q7CisgKiAgICAgLSBgdHlwZShvKS0+dHBfYXNfYXN5bmMtPmFtX2F3YWl0KG8pYAorICoKKyAqICAgUmFpc2VzIGEgVHlwZUVycm9yIGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJldHVybgorICogICBhbiBhd2FpdGFibGUgYW5kIHJldHVybnMgTlVMTC4KKyAqLworUHlPYmplY3QgKgorX1B5Q29yb19HZXRBd2FpdGFibGVJdGVyKFB5T2JqZWN0ICpvKQoreworICAgIHVuYXJ5ZnVuYyBnZXR0ZXIgPSBOVUxMOworICAgIFB5VHlwZU9iamVjdCAqb3Q7CisKKyAgICBpZiAoUHlDb3JvX0NoZWNrRXhhY3QobykgfHwgZ2VuX2lzX2Nvcm91dGluZShvKSkgeworICAgICAgICAvKiAnbycgaXMgYSBjb3JvdXRpbmUuICovCisgICAgICAgIFB5X0lOQ1JFRihvKTsKKyAgICAgICAgcmV0dXJuIG87CisgICAgfQorCisgICAgb3QgPSBQeV9UWVBFKG8pOworICAgIGlmIChvdC0+dHBfYXNfYXN5bmMgIT0gTlVMTCkgeworICAgICAgICBnZXR0ZXIgPSBvdC0+dHBfYXNfYXN5bmMtPmFtX2F3YWl0OworICAgIH0KKyAgICBpZiAoZ2V0dGVyICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKnJlcyA9ICgqZ2V0dGVyKShvKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlDb3JvX0NoZWNrRXhhY3QocmVzKSB8fCBnZW5faXNfY29yb3V0aW5lKHJlcykpIHsKKyAgICAgICAgICAgICAgICAvKiBfX2F3YWl0X18gbXVzdCByZXR1cm4gYW4gKml0ZXJhdG9yKiwgbm90CisgICAgICAgICAgICAgICAgICAgYSBjb3JvdXRpbmUgb3IgYW5vdGhlciBhd2FpdGFibGUgKHNlZSBQRVAgNDkyKSAqLworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2F3YWl0X18oKSByZXR1cm5lZCBhIGNvcm91dGluZSIpOworICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFQeUl0ZXJfQ2hlY2socmVzKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2F3YWl0X18oKSByZXR1cm5lZCBub24taXRlcmF0b3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgdHlwZSAnJS4xMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocmVzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJvYmplY3QgJS4xMDBzIGNhbid0IGJlIHVzZWQgaW4gJ2F3YWl0JyBleHByZXNzaW9uIiwKKyAgICAgICAgICAgICAgICAgb3QtPnRwX25hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorY29yb19yZXByKFB5Q29yb09iamVjdCAqY29ybykKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjb3JvdXRpbmUgb2JqZWN0ICVTIGF0ICVwPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcm8tPmNyX3F1YWxuYW1lLCBjb3JvKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2Nvcm9fYXdhaXQoUHlDb3JvT2JqZWN0ICpjb3JvKQoreworICAgIFB5Q29yb1dyYXBwZXIgKmN3ID0gUHlPYmplY3RfR0NfTmV3KFB5Q29yb1dyYXBwZXIsICZfUHlDb3JvV3JhcHBlcl9UeXBlKTsKKyAgICBpZiAoY3cgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKGNvcm8pOworICAgIGN3LT5jd19jb3JvdXRpbmUgPSBjb3JvOworICAgIF9QeU9iamVjdF9HQ19UUkFDSyhjdyk7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKWN3OworfQorCitzdGF0aWMgUHlPYmplY3QgKgorY29yb19nZXRfY3JfYXdhaXQoUHlDb3JvT2JqZWN0ICpjb3JvKQoreworICAgIFB5T2JqZWN0ICp5ZiA9IF9QeUdlbl95ZigoUHlHZW5PYmplY3QgKikgY29ybyk7CisgICAgaWYgKHlmID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiB5ZjsKK30KKworc3RhdGljIFB5R2V0U2V0RGVmIGNvcm9fZ2V0c2V0bGlzdFtdID0geworICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKWdlbl9nZXRfbmFtZSwgKHNldHRlcilnZW5fc2V0X25hbWUsCisgICAgIFB5RG9jX1NUUigibmFtZSBvZiB0aGUgY29yb3V0aW5lIil9LAorICAgIHsiX19xdWFsbmFtZV9fIiwgKGdldHRlcilnZW5fZ2V0X3F1YWxuYW1lLCAoc2V0dGVyKWdlbl9zZXRfcXVhbG5hbWUsCisgICAgIFB5RG9jX1NUUigicXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNvcm91dGluZSIpfSwKKyAgICB7ImNyX2F3YWl0IiwgKGdldHRlciljb3JvX2dldF9jcl9hd2FpdCwgTlVMTCwKKyAgICAgUHlEb2NfU1RSKCJvYmplY3QgYmVpbmcgYXdhaXRlZCBvbiwgb3IgTm9uZSIpfSwKKyAgICB7TlVMTH0gLyogU2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeU1lbWJlckRlZiBjb3JvX21lbWJlcmxpc3RbXSA9IHsKKyAgICB7ImNyX2ZyYW1lIiwgICAgIFRfT0JKRUNULCBvZmZzZXRvZihQeUNvcm9PYmplY3QsIGNyX2ZyYW1lKSwgICAgUkVBRE9OTFl9LAorICAgIHsiY3JfcnVubmluZyIsICAgVF9CT09MLCAgIG9mZnNldG9mKFB5Q29yb09iamVjdCwgY3JfcnVubmluZyksICBSRUFET05MWX0sCisgICAgeyJjcl9jb2RlIiwgICAgICBUX09CSkVDVCwgb2Zmc2V0b2YoUHlDb3JvT2JqZWN0LCBjcl9jb2RlKSwgICAgIFJFQURPTkxZfSwKKyAgICB7TlVMTH0gICAgICAvKiBTZW50aW5lbCAqLworfTsKKworUHlEb2NfU1RSVkFSKGNvcm9fc2VuZF9kb2MsCisic2VuZChhcmcpIC0+IHNlbmQgJ2FyZycgaW50byBjb3JvdXRpbmUsXG5cCityZXR1cm4gbmV4dCBpdGVyYXRlZCB2YWx1ZSBvciByYWlzZSBTdG9wSXRlcmF0aW9uLiIpOworCitQeURvY19TVFJWQVIoY29yb190aHJvd19kb2MsCisidGhyb3codHlwWyx2YWxbLHRiXV0pIC0+IHJhaXNlIGV4Y2VwdGlvbiBpbiBjb3JvdXRpbmUsXG5cCityZXR1cm4gbmV4dCBpdGVyYXRlZCB2YWx1ZSBvciByYWlzZSBTdG9wSXRlcmF0aW9uLiIpOworCitQeURvY19TVFJWQVIoY29yb19jbG9zZV9kb2MsCisiY2xvc2UoKSAtPiByYWlzZSBHZW5lcmF0b3JFeGl0IGluc2lkZSBjb3JvdXRpbmUuIik7CisKK3N0YXRpYyBQeU1ldGhvZERlZiBjb3JvX21ldGhvZHNbXSA9IHsKKyAgICB7InNlbmQiLChQeUNGdW5jdGlvbilfUHlHZW5fU2VuZCwgTUVUSF9PLCBjb3JvX3NlbmRfZG9jfSwKKyAgICB7InRocm93IiwoUHlDRnVuY3Rpb24pZ2VuX3Rocm93LCBNRVRIX1ZBUkFSR1MsIGNvcm9fdGhyb3dfZG9jfSwKKyAgICB7ImNsb3NlIiwoUHlDRnVuY3Rpb24pZ2VuX2Nsb3NlLCBNRVRIX05PQVJHUywgY29yb19jbG9zZV9kb2N9LAorICAgIHtOVUxMLCBOVUxMfSAgICAgICAgLyogU2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeUFzeW5jTWV0aG9kcyBjb3JvX2FzX2FzeW5jID0geworICAgICh1bmFyeWZ1bmMpY29yb19hd2FpdCwgICAgICAgICAgICAgICAgICAgICAgLyogYW1fYXdhaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFtX2FpdGVyICovCisgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbV9hbmV4dCAqLworfTsKKworUHlUeXBlT2JqZWN0IFB5Q29yb19UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgImNvcm91dGluZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgc2l6ZW9mKFB5Q29yb09iamVjdCksICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgLyogbWV0aG9kcyAqLworICAgIChkZXN0cnVjdG9yKWdlbl9kZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAmY29yb19hc19hc3luYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2FzeW5jICovCisgICAgKHJlcHJmdW5jKWNvcm9fcmVwciwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwKKyAgICAgICAgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKWdlbl90cmF2ZXJzZSwgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBvZmZzZXRvZihQeUNvcm9PYmplY3QsIGNyX3dlYWtyZWZsaXN0KSwgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIGNvcm9fbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGNvcm9fbWVtYmVybGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGNvcm9fZ2V0c2V0bGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIF9QeUdlbl9GaW5hbGl6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KK307CisKK3N0YXRpYyB2b2lkCitjb3JvX3dyYXBwZXJfZGVhbGxvYyhQeUNvcm9XcmFwcGVyICpjdykKK3sKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSygoUHlPYmplY3QgKiljdyk7CisgICAgUHlfQ0xFQVIoY3ctPmN3X2Nvcm91dGluZSk7CisgICAgUHlPYmplY3RfR0NfRGVsKGN3KTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2Nvcm9fd3JhcHBlcl9pdGVybmV4dChQeUNvcm9XcmFwcGVyICpjdykKK3sKKyAgICByZXR1cm4gZ2VuX3NlbmRfZXgoKFB5R2VuT2JqZWN0ICopY3ctPmN3X2Nvcm91dGluZSwgTlVMTCwgMCwgMCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitjb3JvX3dyYXBwZXJfc2VuZChQeUNvcm9XcmFwcGVyICpjdywgUHlPYmplY3QgKmFyZykKK3sKKyAgICByZXR1cm4gZ2VuX3NlbmRfZXgoKFB5R2VuT2JqZWN0ICopY3ctPmN3X2Nvcm91dGluZSwgYXJnLCAwLCAwKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2Nvcm9fd3JhcHBlcl90aHJvdyhQeUNvcm9XcmFwcGVyICpjdywgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIGdlbl90aHJvdygoUHlHZW5PYmplY3QgKiljdy0+Y3dfY29yb3V0aW5lLCBhcmdzKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2Nvcm9fd3JhcHBlcl9jbG9zZShQeUNvcm9XcmFwcGVyICpjdywgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIGdlbl9jbG9zZSgoUHlHZW5PYmplY3QgKiljdy0+Y3dfY29yb3V0aW5lLCBhcmdzKTsKK30KKworc3RhdGljIGludAorY29yb193cmFwcGVyX3RyYXZlcnNlKFB5Q29yb1dyYXBwZXIgKmN3LCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVCgoUHlPYmplY3QgKiljdy0+Y3dfY29yb3V0aW5lKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGNvcm9fd3JhcHBlcl9tZXRob2RzW10gPSB7CisgICAgeyJzZW5kIiwoUHlDRnVuY3Rpb24pY29yb193cmFwcGVyX3NlbmQsIE1FVEhfTywgY29yb19zZW5kX2RvY30sCisgICAgeyJ0aHJvdyIsKFB5Q0Z1bmN0aW9uKWNvcm9fd3JhcHBlcl90aHJvdywgTUVUSF9WQVJBUkdTLCBjb3JvX3Rocm93X2RvY30sCisgICAgeyJjbG9zZSIsKFB5Q0Z1bmN0aW9uKWNvcm9fd3JhcHBlcl9jbG9zZSwgTUVUSF9OT0FSR1MsIGNvcm9fY2xvc2VfZG9jfSwKKyAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIFNlbnRpbmVsICovCit9OworCitQeVR5cGVPYmplY3QgX1B5Q29yb1dyYXBwZXJfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICJjb3JvdXRpbmVfd3JhcHBlciIsCisgICAgc2l6ZW9mKFB5Q29yb1dyYXBwZXIpLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgKGRlc3RydWN0b3IpY29yb193cmFwcGVyX2RlYWxsb2MsICAgICAgICAgICAvKiBkZXN0cnVjdG9yIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19hc3luYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAiQSB3cmFwcGVyIG9iamVjdCBpbXBsZW1lbnRpbmcgX19hd2FpdF9fIGZvciBjb3JvdXRpbmVzLiIsCisgICAgKHRyYXZlcnNlcHJvYyljb3JvX3dyYXBwZXJfdHJhdmVyc2UsICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIFB5T2JqZWN0X1NlbGZJdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIChpdGVybmV4dGZ1bmMpY29yb193cmFwcGVyX2l0ZXJuZXh0LCAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBjb3JvX3dyYXBwZXJfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeU9iamVjdF9EZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KK307CisKK1B5T2JqZWN0ICoKK1B5Q29yb19OZXcoUHlGcmFtZU9iamVjdCAqZiwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpxdWFsbmFtZSkKK3sKKyAgICByZXR1cm4gZ2VuX25ld193aXRoX3F1YWxuYW1lKCZQeUNvcm9fVHlwZSwgZiwgbmFtZSwgcXVhbG5hbWUpOworfQorCisKKy8qIF9fYWl0ZXJfXyB3cmFwcGVyOyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI3MjQzIGZvciBkZXRhaWxzLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICphd19haXRlcjsKK30gUHlBSXRlcldyYXBwZXI7CisKKworc3RhdGljIFB5T2JqZWN0ICoKK2FpdGVyX3dyYXBwZXJfaXRlcm5leHQoUHlBSXRlcldyYXBwZXIgKmF3KQoreworICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19TdG9wSXRlcmF0aW9uLCBhdy0+YXdfYWl0ZXIpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CithaXRlcl93cmFwcGVyX3RyYXZlcnNlKFB5QUl0ZXJXcmFwcGVyICphdywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUHlfVklTSVQoKFB5T2JqZWN0ICopYXctPmF3X2FpdGVyKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2FpdGVyX3dyYXBwZXJfZGVhbGxvYyhQeUFJdGVyV3JhcHBlciAqYXcpCit7CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soKFB5T2JqZWN0ICopYXcpOworICAgIFB5X0NMRUFSKGF3LT5hd19haXRlcik7CisgICAgUHlPYmplY3RfR0NfRGVsKGF3KTsKK30KKworc3RhdGljIFB5QXN5bmNNZXRob2RzIGFpdGVyX3dyYXBwZXJfYXNfYXN5bmMgPSB7CisgICAgUHlPYmplY3RfU2VsZkl0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbV9hd2FpdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW1fYWl0ZXIgKi8KKyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFtX2FuZXh0ICovCit9OworCitQeVR5cGVPYmplY3QgX1B5QUl0ZXJXcmFwcGVyX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAiYWl0ZXJfd3JhcHBlciIsCisgICAgc2l6ZW9mKFB5QUl0ZXJXcmFwcGVyKSwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgKGRlc3RydWN0b3IpYWl0ZXJfd3JhcHBlcl9kZWFsbG9jLCAgICAgICAgICAvKiBkZXN0cnVjdG9yIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgJmFpdGVyX3dyYXBwZXJfYXNfYXN5bmMsICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19hc3luYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAiQSB3cmFwcGVyIG9iamVjdCBmb3IgX19haXRlcl9fIGJha3dhcmRzIGNvbXBhdGliaWxpdHkuIiwKKyAgICAodHJhdmVyc2Vwcm9jKWFpdGVyX3dyYXBwZXJfdHJhdmVyc2UsICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgUHlPYmplY3RfU2VsZkl0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgKGl0ZXJuZXh0ZnVuYylhaXRlcl93cmFwcGVyX2l0ZXJuZXh0LCAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIFB5T2JqZWN0X0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworfTsKKworCitQeU9iamVjdCAqCitfUHlBSXRlcldyYXBwZXJfTmV3KFB5T2JqZWN0ICphaXRlcikKK3sKKyAgICBQeUFJdGVyV3JhcHBlciAqYXcgPSBQeU9iamVjdF9HQ19OZXcoUHlBSXRlcldyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlBSXRlcldyYXBwZXJfVHlwZSk7CisgICAgaWYgKGF3ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihhaXRlcik7CisgICAgYXctPmF3X2FpdGVyID0gYWl0ZXI7CisgICAgX1B5T2JqZWN0X0dDX1RSQUNLKGF3KTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopYXc7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL2l0ZXJvYmplY3QuYyBiL09iamVjdHMvaXRlcm9iamVjdC5jCmluZGV4IDMwNDdkNmIuLmFiMjlmZjggMTAwNjQ0Ci0tLSBhL09iamVjdHMvaXRlcm9iamVjdC5jCisrKyBiL09iamVjdHMvaXRlcm9iamVjdC5jCkBAIC02OSw4ICs2OSw4IEBACiAgICAgICAgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpCiAgICAgewogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBQeV9ERUNSRUYoc2VxKTsKICAgICAgICAgaXQtPml0X3NlcSA9IE5VTEw7CisgICAgICAgIFB5X0RFQ1JFRihzZXEpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgICAgICBQeV9ERUNSRUYoYXJncyk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewogICAgICAgICAgICAgaW50IG9rOwotICAgICAgICAgICAgb2sgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXQtPml0X3NlbnRpbmVsLCByZXN1bHQsIFB5X0VRKTsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG9rID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0LT5pdF9zZW50aW5lbCwgcmVzdWx0LCBQeV9FUSk7CiAgICAgICAgICAgICBpZiAob2sgPT0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OyAvKiBDb21tb24gY2FzZSwgZmFzdCBwYXRoICovCiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKZGlmZiAtLWdpdCBhL09iamVjdHMvbGlzdG9iamVjdC5jIGIvT2JqZWN0cy9saXN0b2JqZWN0LmMKaW5kZXggMTk5NjdjYS4uZDY4ODE3OSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9saXN0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9saXN0b2JqZWN0LmMKQEAgLTIzMjQsNyArMjMyNCw3IEBACiB7CiAgICAgUHlfc3NpemVfdCByZXM7CiAKLSAgICByZXMgPSBzaXplb2YoUHlMaXN0T2JqZWN0KSArIHNlbGYtPmFsbG9jYXRlZCAqIHNpemVvZih2b2lkKik7CisgICAgcmVzID0gX1B5T2JqZWN0X1NJWkUoUHlfVFlQRShzZWxmKSkgKyBzZWxmLT5hbGxvY2F0ZWQgKiBzaXplb2Yodm9pZCopOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKIH0KIApAQCAtMjQ0Nyw3ICsyNDQ3LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAibGlzdCBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgImxpc3QgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yIHNsaWNlcywgbm90ICUuMjAwcyIsCiAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMjYxMSw3ICsyNjExLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAibGlzdCBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgImxpc3QgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yIHNsaWNlcywgbm90ICUuMjAwcyIsCiAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTI3ODIsOCArMjc4Miw4IEBACiAgICAgICAgIHJldHVybiBpdGVtOwogICAgIH0KIAotICAgIFB5X0RFQ1JFRihzZXEpOwogICAgIGl0LT5pdF9zZXEgPSBOVUxMOworICAgIFB5X0RFQ1JFRihzZXEpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yOTEyLDkgKzI5MTIsMTcgQEAKIGxpc3RyZXZpdGVyX25leHQobGlzdHJldml0ZXJvYmplY3QgKml0KQogewogICAgIFB5T2JqZWN0ICppdGVtOwotICAgIFB5X3NzaXplX3QgaW5kZXggPSBpdC0+aXRfaW5kZXg7Ci0gICAgUHlMaXN0T2JqZWN0ICpzZXEgPSBpdC0+aXRfc2VxOworICAgIFB5X3NzaXplX3QgaW5kZXg7CisgICAgUHlMaXN0T2JqZWN0ICpzZXE7CiAKKyAgICBhc3NlcnQoaXQgIT0gTlVMTCk7CisgICAgc2VxID0gaXQtPml0X3NlcTsKKyAgICBpZiAoc2VxID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFzc2VydChQeUxpc3RfQ2hlY2soc2VxKSk7CisKKyAgICBpbmRleCA9IGl0LT5pdF9pbmRleDsKICAgICBpZiAoaW5kZXg+PTAgJiYgaW5kZXggPCBQeUxpc3RfR0VUX1NJWkUoc2VxKSkgewogICAgICAgICBpdGVtID0gUHlMaXN0X0dFVF9JVEVNKHNlcSwgaW5kZXgpOwogICAgICAgICBpdC0+aXRfaW5kZXgtLTsKQEAgLTI5MjIsMTAgKzI5MzAsOCBAQAogICAgICAgICByZXR1cm4gaXRlbTsKICAgICB9CiAgICAgaXQtPml0X2luZGV4ID0gLTE7Ci0gICAgaWYgKHNlcSAhPSBOVUxMKSB7Ci0gICAgICAgIGl0LT5pdF9zZXEgPSBOVUxMOwotICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICB9CisgICAgaXQtPml0X3NlcSA9IE5VTEw7CisgICAgUHlfREVDUkVGKHNlcSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvbG9uZ29iamVjdC5jIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKaW5kZXggM2E2NGI1My4uY2QwNGUzNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9sb25nb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9sb25nb2JqZWN0LmMKQEAgLTIxLDcgKzIxLDYgQEAKICAgICAgICAgIFB5X1NJWkUoeCkgPCAwID8gLShzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSA6ICAgXAogICAgICAgICAgICAgIChQeV9TSVpFKHgpID09IDAgPyAoc2RpZ2l0KTAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAoc2RpZ2l0KSh4KS0+b2JfZGlnaXRbMF0pKQotI2RlZmluZSBBQlMoeCkgKCh4KSA8IDAgPyAtKHgpIDogKHgpKQogCiAjaWYgTlNNQUxMTkVHSU5UUyArIE5TTUFMTFBPU0lOVFMgPiAwCiAvKiBTbWFsbCBpbnRlZ2VycyBhcmUgcHJlYWxsb2NhdGVkIGluIHRoaXMgYXJyYXkgc28gdGhhdCB0aGV5CkBAIC01Nyw3ICs1Niw3IEBACiBzdGF0aWMgUHlMb25nT2JqZWN0ICoKIG1heWJlX3NtYWxsX2xvbmcoUHlMb25nT2JqZWN0ICp2KQogewotICAgIGlmICh2ICYmIEFCUyhQeV9TSVpFKHYpKSA8PSAxKSB7CisgICAgaWYgKHYgJiYgUHlfQUJTKFB5X1NJWkUodikpIDw9IDEpIHsKICAgICAgICAgc2RpZ2l0IGl2YWwgPSBNRURJVU1fVkFMVUUodik7CiAgICAgICAgIGlmICgtTlNNQUxMTkVHSU5UUyA8PSBpdmFsICYmIGl2YWwgPCBOU01BTExQT1NJTlRTKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC0xMTQsNyArMTEzLDcgQEAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgogbG9uZ19ub3JtYWxpemUoUHlMb25nT2JqZWN0ICp2KQogewotICAgIFB5X3NzaXplX3QgaiA9IEFCUyhQeV9TSVpFKHYpKTsKKyAgICBQeV9zc2l6ZV90IGogPSBQeV9BQlMoUHlfU0laRSh2KSk7CiAgICAgUHlfc3NpemVfdCBpID0gajsKIAogICAgIHdoaWxlIChpID4gMCAmJiB2LT5vYl9kaWdpdFtpLTFdID09IDApCkBAIC03MTgsNyArNzE3LDcgQEAKIAogICAgIGFzc2VydCh2ICE9IE5VTEwpOwogICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodikpOwotICAgIG5kaWdpdHMgPSBBQlMoUHlfU0laRSh2KSk7CisgICAgbmRpZ2l0cyA9IFB5X0FCUyhQeV9TSVpFKHYpKTsKICAgICBhc3NlcnQobmRpZ2l0cyA9PSAwIHx8IHYtPm9iX2RpZ2l0W25kaWdpdHMgLSAxXSAhPSAwKTsKICAgICBpZiAobmRpZ2l0cyA+IDApIHsKICAgICAgICAgZGlnaXQgbXNkID0gdi0+b2JfZGlnaXRbbmRpZ2l0cyAtIDFdOwpAQCAtNzc2LDEwICs3NzUsMTAgQEAKICAgICAgICAgc2l6ZV90IGk7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHAgPSBwZW5kYnl0ZTsKICAgICAgICAgY29uc3QgaW50IHBpbmNyID0gLWluY3I7ICAvKiBzZWFyY2ggTVNCIHRvIExTQiAqLwotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGluc2lnbmZpY2FudCA9IGlzX3NpZ25lZCA/IDB4ZmYgOiAweDAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGluc2lnbmlmaWNhbnQgPSBpc19zaWduZWQgPyAweGZmIDogMHgwMDsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpLCBwICs9IHBpbmNyKSB7Ci0gICAgICAgICAgICBpZiAoKnAgIT0gaW5zaWduZmljYW50KQorICAgICAgICAgICAgaWYgKCpwICE9IGluc2lnbmlmaWNhbnQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgbnVtc2lnbmlmaWNhbnRieXRlcyA9IG4gLSBpOwpAQCAtMTU2NSw3ICsxNTY0LDcgQEAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgogZGl2cmVtMShQeUxvbmdPYmplY3QgKmEsIGRpZ2l0IG4sIGRpZ2l0ICpwcmVtKQogewotICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZSA9IEFCUyhQeV9TSVpFKGEpKTsKKyAgICBjb25zdCBQeV9zc2l6ZV90IHNpemUgPSBQeV9BQlMoUHlfU0laRShhKSk7CiAgICAgUHlMb25nT2JqZWN0ICp6OwogCiAgICAgYXNzZXJ0KG4gPiAwICYmIG4gPD0gUHlMb25nX01BU0spOwpAQCAtMTU5Nyw3ICsxNTk2LDcgQEAKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgc2l6ZV9hID0gQUJTKFB5X1NJWkUoYSkpOworICAgIHNpemVfYSA9IFB5X0FCUyhQeV9TSVpFKGEpKTsKICAgICBuZWdhdGl2ZSA9IFB5X1NJWkUoYSkgPCAwOwogCiAgICAgLyogcXVpY2sgYW5kIGRpcnR5IHVwcGVyIGJvdW5kIGZvciB0aGUgbnVtYmVyIG9mIGRpZ2l0cwpAQCAtMTc2Niw3ICsxNzY1LDcgQEAKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgc2l6ZV9hID0gQUJTKFB5X1NJWkUoYSkpOworICAgIHNpemVfYSA9IFB5X0FCUyhQeV9TSVpFKGEpKTsKICAgICBuZWdhdGl2ZSA9IFB5X1NJWkUoYSkgPCAwOwogCiAgICAgLyogQ29tcHV0ZSBhIHJvdWdoIHVwcGVyIGJvdW5kIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgKi8KQEAgLTIzMTMsNyArMjMxMiw3IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKnN0cm9iajsKICAgICBjaGFyICplbmQgPSBOVUxMOwogCi0gICAgcmVzdWx0ID0gUHlMb25nX0Zyb21TdHJpbmcoKGNoYXIqKXMsICZlbmQsIGJhc2UpOworICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tU3RyaW5nKHMsICZlbmQsIGJhc2UpOwogICAgIGlmIChlbmQgPT0gTlVMTCB8fCAocmVzdWx0ICE9IE5VTEwgJiYgZW5kID09IHMgKyBsZW4pKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIFB5X1hERUNSRUYocmVzdWx0KTsKQEAgLTIzODAsNyArMjM3OSw3IEBACiBsb25nX2RpdnJlbShQeUxvbmdPYmplY3QgKmEsIFB5TG9uZ09iamVjdCAqYiwKICAgICAgICAgICAgIFB5TG9uZ09iamVjdCAqKnBkaXYsIFB5TG9uZ09iamVjdCAqKnByZW0pCiB7Ci0gICAgUHlfc3NpemVfdCBzaXplX2EgPSBBQlMoUHlfU0laRShhKSksIHNpemVfYiA9IEFCUyhQeV9TSVpFKGIpKTsKKyAgICBQeV9zc2l6ZV90IHNpemVfYSA9IFB5X0FCUyhQeV9TSVpFKGEpKSwgc2l6ZV9iID0gUHlfQUJTKFB5X1NJWkUoYikpOwogICAgIFB5TG9uZ09iamVjdCAqejsKIAogICAgIGlmIChzaXplX2IgPT0gMCkgewpAQCAtMjQzOSw3ICsyNDM4LDcgQEAKIH0KIAogLyogVW5zaWduZWQgaW50IGRpdmlzaW9uIHdpdGggcmVtYWluZGVyIC0tIHRoZSBhbGdvcml0aG0uICBUaGUgYXJndW1lbnRzIHYxCi0gICBhbmQgdzEgc2hvdWxkIHNhdGlzZnkgMiA8PSBBQlMoUHlfU0laRSh3MSkpIDw9IEFCUyhQeV9TSVpFKHYxKSkuICovCisgICBhbmQgdzEgc2hvdWxkIHNhdGlzZnkgMiA8PSBQeV9BQlMoUHlfU0laRSh3MSkpIDw9IFB5X0FCUyhQeV9TSVpFKHYxKSkuICovCiAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgogeF9kaXZyZW0oUHlMb25nT2JqZWN0ICp2MSwgUHlMb25nT2JqZWN0ICp3MSwgUHlMb25nT2JqZWN0ICoqcHJlbSkKQEAgLTI0NTksOCArMjQ1OCw4IEBACiAgICAgICAgdGhhdCB3b24ndCBvdmVyZmxvdyBhIGRpZ2l0LiAqLwogCiAgICAgLyogYWxsb2NhdGUgc3BhY2U7IHcgd2lsbCBhbHNvIGJlIHVzZWQgdG8gaG9sZCB0aGUgZmluYWwgcmVtYWluZGVyICovCi0gICAgc2l6ZV92ID0gQUJTKFB5X1NJWkUodjEpKTsKLSAgICBzaXplX3cgPSBBQlMoUHlfU0laRSh3MSkpOworICAgIHNpemVfdiA9IFB5X0FCUyhQeV9TSVpFKHYxKSk7CisgICAgc2l6ZV93ID0gUHlfQUJTKFB5X1NJWkUodzEpKTsKICAgICBhc3NlcnQoc2l6ZV92ID49IHNpemVfdyAmJiBzaXplX3cgPj0gMik7IC8qIEFzc2VydCBjaGVja3MgYnkgZGl2KCkgKi8KICAgICB2ID0gX1B5TG9uZ19OZXcoc2l6ZV92KzEpOwogICAgIGlmICh2ID09IE5VTEwpIHsKQEAgLTI1OTEsNyArMjU5MCw3IEBACiAgICAgICAgbXVsdGlwbGUgb2YgNCwgcm91bmRpbmcgdGllcyB0byBhIG11bHRpcGxlIG9mIDguICovCiAgICAgc3RhdGljIGNvbnN0IGludCBoYWxmX2V2ZW5fY29ycmVjdGlvbls4XSA9IHswLCAtMSwgLTIsIDEsIDAsIC0xLCAyLCAxfTsKIAotICAgIGFfc2l6ZSA9IEFCUyhQeV9TSVpFKGEpKTsKKyAgICBhX3NpemUgPSBQeV9BQlMoUHlfU0laRShhKSk7CiAgICAgaWYgKGFfc2l6ZSA9PSAwKSB7CiAgICAgICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgMDogc2lnbmlmaWNhbmQgMC4wLCBleHBvbmVudCAwLiAqLwogICAgICAgICAqZSA9IDA7CkBAIC0yNzMyLDcgKzI3MzEsNyBAQAogICAgICAgICBzaWduID0gUHlfU0laRShhKSAtIFB5X1NJWkUoYik7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBQeV9zc2l6ZV90IGkgPSBBQlMoUHlfU0laRShhKSk7CisgICAgICAgIFB5X3NzaXplX3QgaSA9IFB5X0FCUyhQeV9TSVpFKGEpKTsKICAgICAgICAgd2hpbGUgKC0taSA+PSAwICYmIGEtPm9iX2RpZ2l0W2ldID09IGItPm9iX2RpZ2l0W2ldKQogICAgICAgICAgICAgOwogICAgICAgICBpZiAoaSA8IDApCkBAIC0yODUwLDcgKzI4NDksNyBAQAogc3RhdGljIFB5TG9uZ09iamVjdCAqCiB4X2FkZChQeUxvbmdPYmplY3QgKmEsIFB5TG9uZ09iamVjdCAqYikKIHsKLSAgICBQeV9zc2l6ZV90IHNpemVfYSA9IEFCUyhQeV9TSVpFKGEpKSwgc2l6ZV9iID0gQUJTKFB5X1NJWkUoYikpOworICAgIFB5X3NzaXplX3Qgc2l6ZV9hID0gUHlfQUJTKFB5X1NJWkUoYSkpLCBzaXplX2IgPSBQeV9BQlMoUHlfU0laRShiKSk7CiAgICAgUHlMb25nT2JqZWN0ICp6OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBkaWdpdCBjYXJyeSA9IDA7CkBAIC0yODg0LDcgKzI4ODMsNyBAQAogc3RhdGljIFB5TG9uZ09iamVjdCAqCiB4X3N1YihQeUxvbmdPYmplY3QgKmEsIFB5TG9uZ09iamVjdCAqYikKIHsKLSAgICBQeV9zc2l6ZV90IHNpemVfYSA9IEFCUyhQeV9TSVpFKGEpKSwgc2l6ZV9iID0gQUJTKFB5X1NJWkUoYikpOworICAgIFB5X3NzaXplX3Qgc2l6ZV9hID0gUHlfQUJTKFB5X1NJWkUoYSkpLCBzaXplX2IgPSBQeV9BQlMoUHlfU0laRShiKSk7CiAgICAgUHlMb25nT2JqZWN0ICp6OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbiA9IDE7CkBAIC0yOTQ0LDcgKzI5NDMsNyBAQAogCiAgICAgQ0hFQ0tfQklOT1AoYSwgYik7CiAKLSAgICBpZiAoQUJTKFB5X1NJWkUoYSkpIDw9IDEgJiYgQUJTKFB5X1NJWkUoYikpIDw9IDEpIHsKKyAgICBpZiAoUHlfQUJTKFB5X1NJWkUoYSkpIDw9IDEgJiYgUHlfQUJTKFB5X1NJWkUoYikpIDw9IDEpIHsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZyhNRURJVU1fVkFMVUUoYSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVESVVNX1ZBTFVFKGIpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI5NzQsNyArMjk3Myw3IEBACiAKICAgICBDSEVDS19CSU5PUChhLCBiKTsKIAotICAgIGlmIChBQlMoUHlfU0laRShhKSkgPD0gMSAmJiBBQlMoUHlfU0laRShiKSkgPD0gMSkgeworICAgIGlmIChQeV9BQlMoUHlfU0laRShhKSkgPD0gMSAmJiBQeV9BQlMoUHlfU0laRShiKSkgPD0gMSkgewogICAgICAgICBQeU9iamVjdCogcjsKICAgICAgICAgciA9IFB5TG9uZ19Gcm9tTG9uZyhNRURJVU1fVkFMVUUoYSktTUVESVVNX1ZBTFVFKGIpKTsKICAgICAgICAgcmV0dXJuIHI7CkBAIC0zMDAzLDggKzMwMDIsOCBAQAogeF9tdWwoUHlMb25nT2JqZWN0ICphLCBQeUxvbmdPYmplY3QgKmIpCiB7CiAgICAgUHlMb25nT2JqZWN0ICp6OwotICAgIFB5X3NzaXplX3Qgc2l6ZV9hID0gQUJTKFB5X1NJWkUoYSkpOwotICAgIFB5X3NzaXplX3Qgc2l6ZV9iID0gQUJTKFB5X1NJWkUoYikpOworICAgIFB5X3NzaXplX3Qgc2l6ZV9hID0gUHlfQUJTKFB5X1NJWkUoYSkpOworICAgIFB5X3NzaXplX3Qgc2l6ZV9iID0gUHlfQUJTKFB5X1NJWkUoYikpOwogICAgIFB5X3NzaXplX3QgaTsKIAogICAgIHogPSBfUHlMb25nX05ldyhzaXplX2EgKyBzaXplX2IpOwpAQCAtMzA5OCw3ICszMDk3LDcgQEAKIHsKICAgICBQeUxvbmdPYmplY3QgKmhpLCAqbG87CiAgICAgUHlfc3NpemVfdCBzaXplX2xvLCBzaXplX2hpOwotICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZV9uID0gQUJTKFB5X1NJWkUobikpOworICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZV9uID0gUHlfQUJTKFB5X1NJWkUobikpOwogCiAgICAgc2l6ZV9sbyA9IFB5X01JTihzaXplX24sIHNpemUpOwogICAgIHNpemVfaGkgPSBzaXplX24gLSBzaXplX2xvOwpAQCAtMzEyNyw4ICszMTI2LDggQEAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgoga19tdWwoUHlMb25nT2JqZWN0ICphLCBQeUxvbmdPYmplY3QgKmIpCiB7Ci0gICAgUHlfc3NpemVfdCBhc2l6ZSA9IEFCUyhQeV9TSVpFKGEpKTsKLSAgICBQeV9zc2l6ZV90IGJzaXplID0gQUJTKFB5X1NJWkUoYikpOworICAgIFB5X3NzaXplX3QgYXNpemUgPSBQeV9BQlMoUHlfU0laRShhKSk7CisgICAgUHlfc3NpemVfdCBic2l6ZSA9IFB5X0FCUyhQeV9TSVpFKGIpKTsKICAgICBQeUxvbmdPYmplY3QgKmFoID0gTlVMTDsKICAgICBQeUxvbmdPYmplY3QgKmFsID0gTlVMTDsKICAgICBQeUxvbmdPYmplY3QgKmJoID0gTlVMTDsKQEAgLTMzNDgsOCArMzM0Nyw4IEBACiBzdGF0aWMgUHlMb25nT2JqZWN0ICoKIGtfbG9wc2lkZWRfbXVsKFB5TG9uZ09iamVjdCAqYSwgUHlMb25nT2JqZWN0ICpiKQogewotICAgIGNvbnN0IFB5X3NzaXplX3QgYXNpemUgPSBBQlMoUHlfU0laRShhKSk7Ci0gICAgUHlfc3NpemVfdCBic2l6ZSA9IEFCUyhQeV9TSVpFKGIpKTsKKyAgICBjb25zdCBQeV9zc2l6ZV90IGFzaXplID0gUHlfQUJTKFB5X1NJWkUoYSkpOworICAgIFB5X3NzaXplX3QgYnNpemUgPSBQeV9BQlMoUHlfU0laRShiKSk7CiAgICAgUHlfc3NpemVfdCBuYmRvbmU7ICAgICAgICAgIC8qICMgb2YgYiBkaWdpdHMgYWxyZWFkeSBtdWx0aXBsaWVkICovCiAgICAgUHlMb25nT2JqZWN0ICpyZXQ7CiAgICAgUHlMb25nT2JqZWN0ICpic2xpY2UgPSBOVUxMOwpAQCAtMzQwNyw3ICszNDA2LDcgQEAKICAgICBDSEVDS19CSU5PUChhLCBiKTsKIAogICAgIC8qIGZhc3QgcGF0aCBmb3Igc2luZ2xlLWRpZ2l0IG11bHRpcGxpY2F0aW9uICovCi0gICAgaWYgKEFCUyhQeV9TSVpFKGEpKSA8PSAxICYmIEFCUyhQeV9TSVpFKGIpKSA8PSAxKSB7CisgICAgaWYgKFB5X0FCUyhQeV9TSVpFKGEpKSA8PSAxICYmIFB5X0FCUyhQeV9TSVpFKGIpKSA8PSAxKSB7CiAgICAgICAgIHN0d29kaWdpdHMgdiA9IChzdHdvZGlnaXRzKShNRURJVU1fVkFMVUUoYSkpICogTUVESVVNX1ZBTFVFKGIpOwogI2lmZGVmIEhBVkVfTE9OR19MT05HCiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpdik7CkBAIC0zNjE0LDggKzM2MTMsOCBAQAogICAgICovCiAKICAgICAvKiBSZWR1Y2UgdG8gY2FzZSB3aGVyZSBhIGFuZCBiIGFyZSBib3RoIHBvc2l0aXZlLiAqLwotICAgIGFfc2l6ZSA9IEFCUyhQeV9TSVpFKGEpKTsKLSAgICBiX3NpemUgPSBBQlMoUHlfU0laRShiKSk7CisgICAgYV9zaXplID0gUHlfQUJTKFB5X1NJWkUoYSkpOworICAgIGJfc2l6ZSA9IFB5X0FCUyhQeV9TSVpFKGIpKTsKICAgICBuZWdhdGUgPSAoUHlfU0laRShhKSA8IDApIF4gKFB5X1NJWkUoYikgPCAwKTsKICAgICBpZiAoYl9zaXplID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLApAQCAtMzczMSw3ICszNzMwLDcgQEAKICAgICAgICAgICAgIGluZXhhY3QgPSAxOwogICAgICAgICBQeV9ERUNSRUYocmVtKTsKICAgICB9Ci0gICAgeF9zaXplID0gQUJTKFB5X1NJWkUoeCkpOworICAgIHhfc2l6ZSA9IFB5X0FCUyhQeV9TSVpFKHgpKTsKICAgICBhc3NlcnQoeF9zaXplID4gMCk7IC8qIHJlc3VsdCBvZiBkaXZpc2lvbiBpcyBuZXZlciB6ZXJvICovCiAgICAgeF9iaXRzID0gKHhfc2l6ZS0xKSpQeUxvbmdfU0hJRlQrYml0c19pbl9kaWdpdCh4LT5vYl9kaWdpdFt4X3NpemUtMV0pOwogCkBAIC0zODQxLDcgKzM4NDAsNyBAQAogCiAgICAgaWYgKFB5X1NJWkUoYikgPCAwKSB7ICAvKiBpZiBleHBvbmVudCBpcyBuZWdhdGl2ZSAqLwogICAgICAgICBpZiAoYykgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInBvdygpIDJuZCBhcmd1bWVudCAiCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInBvdygpIDJuZCBhcmd1bWVudCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBiZSBuZWdhdGl2ZSB3aGVuIDNyZCBhcmd1bWVudCBzcGVjaWZpZWQiKTsKICAgICAgICAgICAgIGdvdG8gRXJyb3I7CiAgICAgICAgIH0KQEAgLTQwMDMsNyArNDAwMiw3IEBACiAgICAgLyogSW1wbGVtZW50IH54IGFzIC0oeCsxKSAqLwogICAgIFB5TG9uZ09iamVjdCAqeDsKICAgICBQeUxvbmdPYmplY3QgKnc7Ci0gICAgaWYgKEFCUyhQeV9TSVpFKHYpKSA8PTEpCisgICAgaWYgKFB5X0FCUyhQeV9TSVpFKHYpKSA8PTEpCiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoLShNRURJVU1fVkFMVUUodikrMSkpOwogICAgIHcgPSAoUHlMb25nT2JqZWN0ICopUHlMb25nX0Zyb21Mb25nKDFMKTsKICAgICBpZiAodyA9PSBOVUxMKQpAQCAtNDAyMCw3ICs0MDE5LDcgQEAKIGxvbmdfbmVnKFB5TG9uZ09iamVjdCAqdikKIHsKICAgICBQeUxvbmdPYmplY3QgKno7Ci0gICAgaWYgKEFCUyhQeV9TSVpFKHYpKSA8PSAxKQorICAgIGlmIChQeV9BQlMoUHlfU0laRSh2KSkgPD0gMSkKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygtTUVESVVNX1ZBTFVFKHYpKTsKICAgICB6ID0gKFB5TG9uZ09iamVjdCAqKV9QeUxvbmdfQ29weSh2KTsKICAgICBpZiAoeiAhPSBOVUxMKQpAQCAtNDA3NSw3ICs0MDc0LDcgQEAKICAgICAgICAgICAgIGdvdG8gcnNoaWZ0X2Vycm9yOwogICAgICAgICB9CiAgICAgICAgIHdvcmRzaGlmdCA9IHNoaWZ0YnkgLyBQeUxvbmdfU0hJRlQ7Ci0gICAgICAgIG5ld3NpemUgPSBBQlMoUHlfU0laRShhKSkgLSB3b3Jkc2hpZnQ7CisgICAgICAgIG5ld3NpemUgPSBQeV9BQlMoUHlfU0laRShhKSkgLSB3b3Jkc2hpZnQ7CiAgICAgICAgIGlmIChuZXdzaXplIDw9IDApCiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwogICAgICAgICBsb3NoaWZ0ID0gc2hpZnRieSAlIFB5TG9uZ19TSElGVDsKQEAgLTQxMjIsNyArNDEyMSw3IEBACiAgICAgd29yZHNoaWZ0ID0gc2hpZnRieSAvIFB5TG9uZ19TSElGVDsKICAgICByZW1zaGlmdCAgPSBzaGlmdGJ5IC0gd29yZHNoaWZ0ICogUHlMb25nX1NISUZUOwogCi0gICAgb2xkc2l6ZSA9IEFCUyhQeV9TSVpFKGEpKTsKKyAgICBvbGRzaXplID0gUHlfQUJTKFB5X1NJWkUoYSkpOwogICAgIG5ld3NpemUgPSBvbGRzaXplICsgd29yZHNoaWZ0OwogICAgIGlmIChyZW1zaGlmdCkKICAgICAgICAgKytuZXdzaXplOwpAQCAtNDE4Myw3ICs0MTgyLDcgQEAKICAgICAgICByZXN1bHQgYmFjayB0byBzaWduLW1hZ25pdHVkZSBhdCB0aGUgZW5kLiAqLwogCiAgICAgLyogSWYgYSBpcyBuZWdhdGl2ZSwgcmVwbGFjZSBpdCBieSBpdHMgdHdvJ3MgY29tcGxlbWVudC4gKi8KLSAgICBzaXplX2EgPSBBQlMoUHlfU0laRShhKSk7CisgICAgc2l6ZV9hID0gUHlfQUJTKFB5X1NJWkUoYSkpOwogICAgIG5lZ2EgPSBQeV9TSVpFKGEpIDwgMDsKICAgICBpZiAobmVnYSkgewogICAgICAgICB6ID0gX1B5TG9uZ19OZXcoc2l6ZV9hKTsKQEAgLTQxOTcsNyArNDE5Niw3IEBACiAgICAgICAgIFB5X0lOQ1JFRihhKTsKIAogICAgIC8qIFNhbWUgZm9yIGIuICovCi0gICAgc2l6ZV9iID0gQUJTKFB5X1NJWkUoYikpOworICAgIHNpemVfYiA9IFB5X0FCUyhQeV9TSVpFKGIpKTsKICAgICBuZWdiID0gUHlfU0laRShiKSA8IDA7CiAgICAgaWYgKG5lZ2IpIHsKICAgICAgICAgeiA9IF9QeUxvbmdfTmV3KHNpemVfYik7CkBAIC00MzI4LDYgKzQzMjcsMjEzIEBACiAgICAgcmV0dXJuIHY7CiB9CiAKK1B5T2JqZWN0ICoKK19QeUxvbmdfR0NEKFB5T2JqZWN0ICphYXJnLCBQeU9iamVjdCAqYmFyZykKK3sKKyAgICBQeUxvbmdPYmplY3QgKmEsICpiLCAqYyA9IE5VTEwsICpkID0gTlVMTCwgKnI7CisgICAgc3R3b2RpZ2l0cyB4LCB5LCBxLCBzLCB0LCBjX2NhcnJ5LCBkX2NhcnJ5OworICAgIHN0d29kaWdpdHMgQSwgQiwgQywgRCwgVDsKKyAgICBpbnQgbmJpdHMsIGs7CisgICAgUHlfc3NpemVfdCBzaXplX2EsIHNpemVfYiwgYWxsb2NfYSwgYWxsb2NfYjsKKyAgICBkaWdpdCAqYV9kaWdpdCwgKmJfZGlnaXQsICpjX2RpZ2l0LCAqZF9kaWdpdCwgKmFfZW5kLCAqYl9lbmQ7CisKKyAgICBhID0gKFB5TG9uZ09iamVjdCAqKWFhcmc7CisgICAgYiA9IChQeUxvbmdPYmplY3QgKiliYXJnOworICAgIHNpemVfYSA9IFB5X1NJWkUoYSk7CisgICAgc2l6ZV9iID0gUHlfU0laRShiKTsKKyAgICBpZiAoLTIgPD0gc2l6ZV9hICYmIHNpemVfYSA8PSAyICYmIC0yIDw9IHNpemVfYiAmJiBzaXplX2IgPD0gMikgeworICAgICAgICBQeV9JTkNSRUYoYSk7CisgICAgICAgIFB5X0lOQ1JFRihiKTsKKyAgICAgICAgZ290byBzaW1wbGU7CisgICAgfQorCisgICAgLyogSW5pdGlhbCByZWR1Y3Rpb246IG1ha2Ugc3VyZSB0aGF0IDAgPD0gYiA8PSBhLiAqLworICAgIGEgPSAoUHlMb25nT2JqZWN0ICopbG9uZ19hYnMoYSk7CisgICAgaWYgKGEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYiA9IChQeUxvbmdPYmplY3QgKilsb25nX2FicyhiKTsKKyAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihhKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChsb25nX2NvbXBhcmUoYSwgYikgPCAwKSB7CisgICAgICAgIHIgPSBhOworICAgICAgICBhID0gYjsKKyAgICAgICAgYiA9IHI7CisgICAgfQorICAgIC8qIFdlIG5vdyBvd24gcmVmZXJlbmNlcyB0byBhIGFuZCBiICovCisKKyAgICBhbGxvY19hID0gUHlfU0laRShhKTsKKyAgICBhbGxvY19iID0gUHlfU0laRShiKTsKKyAgICAvKiByZWR1Y2UgdW50aWwgYSBmaXRzIGludG8gMiBkaWdpdHMgKi8KKyAgICB3aGlsZSAoKHNpemVfYSA9IFB5X1NJWkUoYSkpID4gMikgeworICAgICAgICBuYml0cyA9IGJpdHNfaW5fZGlnaXQoYS0+b2JfZGlnaXRbc2l6ZV9hLTFdKTsKKyAgICAgICAgLyogZXh0cmFjdCB0b3AgMipQeUxvbmdfU0hJRlQgYml0cyBvZiBhIGludG8geCwgYWxvbmcgd2l0aAorICAgICAgICAgICBjb3JyZXNwb25kaW5nIGJpdHMgb2YgYiBpbnRvIHkgKi8KKyAgICAgICAgc2l6ZV9iID0gUHlfU0laRShiKTsKKyAgICAgICAgYXNzZXJ0KHNpemVfYiA8PSBzaXplX2EpOworICAgICAgICBpZiAoc2l6ZV9iID09IDApIHsKKyAgICAgICAgICAgIGlmIChzaXplX2EgPCBhbGxvY19hKSB7CisgICAgICAgICAgICAgICAgciA9IChQeUxvbmdPYmplY3QgKilfUHlMb25nX0NvcHkoYSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHIgPSBhOworICAgICAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICAgICAgUHlfWERFQ1JFRihjKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoZCk7CisgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopcjsKKyAgICAgICAgfQorICAgICAgICB4ID0gKCgodHdvZGlnaXRzKWEtPm9iX2RpZ2l0W3NpemVfYS0xXSA8PCAoMipQeUxvbmdfU0hJRlQtbmJpdHMpKSB8CisgICAgICAgICAgICAgKCh0d29kaWdpdHMpYS0+b2JfZGlnaXRbc2l6ZV9hLTJdIDw8IChQeUxvbmdfU0hJRlQtbmJpdHMpKSB8CisgICAgICAgICAgICAgKGEtPm9iX2RpZ2l0W3NpemVfYS0zXSA+PiBuYml0cykpOworCisgICAgICAgIHkgPSAoKHNpemVfYiA+PSBzaXplX2EgLSAyID8gYi0+b2JfZGlnaXRbc2l6ZV9hLTNdID4+IG5iaXRzIDogMCkgfAorICAgICAgICAgICAgIChzaXplX2IgPj0gc2l6ZV9hIC0gMSA/ICh0d29kaWdpdHMpYi0+b2JfZGlnaXRbc2l6ZV9hLTJdIDw8IChQeUxvbmdfU0hJRlQtbmJpdHMpIDogMCkgfAorICAgICAgICAgICAgIChzaXplX2IgPj0gc2l6ZV9hID8gKHR3b2RpZ2l0cyliLT5vYl9kaWdpdFtzaXplX2EtMV0gPDwgKDIqUHlMb25nX1NISUZULW5iaXRzKSA6IDApKTsKKworICAgICAgICAvKiBpbm5lciBsb29wIG9mIExlaG1lcidzIGFsZ29yaXRobTsgQSwgQiwgQywgRCBuZXZlciBncm93CisgICAgICAgICAgIGxhcmdlciB0aGFuIFB5TG9uZ19NQVNLIGR1cmluZyB0aGUgYWxnb3JpdGhtLiAqLworICAgICAgICBBID0gMTsgQiA9IDA7IEMgPSAwOyBEID0gMTsKKyAgICAgICAgZm9yIChrPTA7OyBrKyspIHsKKyAgICAgICAgICAgIGlmICh5LUMgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHEgPSAoeCsoQS0xKSkvKHktQyk7CisgICAgICAgICAgICBzID0gQitxKkQ7CisgICAgICAgICAgICB0ID0geC1xKnk7CisgICAgICAgICAgICBpZiAocyA+IHQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB4ID0geTsgeSA9IHQ7CisgICAgICAgICAgICB0ID0gQStxKkM7IEEgPSBEOyBCID0gQzsgQyA9IHM7IEQgPSB0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGsgPT0gMCkgeworICAgICAgICAgICAgLyogbm8gcHJvZ3Jlc3M7IGRvIGEgRXVjbGlkZWFuIHN0ZXAgKi8KKyAgICAgICAgICAgIGlmIChsX2Rpdm1vZChhLCBiLCBOVUxMLCAmcikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQeV9ERUNSRUYoYSk7CisgICAgICAgICAgICBhID0gYjsKKyAgICAgICAgICAgIGIgPSByOworICAgICAgICAgICAgYWxsb2NfYSA9IGFsbG9jX2I7CisgICAgICAgICAgICBhbGxvY19iID0gUHlfU0laRShiKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICBhLCBiID0gQSpiLUIqYSwgRCphLUMqYiBpZiBrIGlzIG9kZAorICAgICAgICAgIGEsIGIgPSBBKmEtQipiLCBEKmItQyphIGlmIGsgaXMgZXZlbgorICAgICAgICAqLworICAgICAgICBpZiAoayYxKSB7CisgICAgICAgICAgICBUID0gLUE7IEEgPSAtQjsgQiA9IFQ7CisgICAgICAgICAgICBUID0gLUM7IEMgPSAtRDsgRCA9IFQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMgIT0gTlVMTCkKKyAgICAgICAgICAgIFB5X1NJWkUoYykgPSBzaXplX2E7CisgICAgICAgIGVsc2UgaWYgKFB5X1JFRkNOVChhKSA9PSAxKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoYSk7CisgICAgICAgICAgICBjID0gYTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFsbG9jX2EgPSBzaXplX2E7CisgICAgICAgICAgICBjID0gX1B5TG9uZ19OZXcoc2l6ZV9hKTsKKyAgICAgICAgICAgIGlmIChjID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkICE9IE5VTEwpCisgICAgICAgICAgICBQeV9TSVpFKGQpID0gc2l6ZV9hOworICAgICAgICBlbHNlIGlmIChQeV9SRUZDTlQoYikgPT0gMSAmJiBzaXplX2EgPD0gYWxsb2NfYikgeworICAgICAgICAgICAgUHlfSU5DUkVGKGIpOworICAgICAgICAgICAgZCA9IGI7CisgICAgICAgICAgICBQeV9TSVpFKGQpID0gc2l6ZV9hOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYWxsb2NfYiA9IHNpemVfYTsKKyAgICAgICAgICAgIGQgPSBfUHlMb25nX05ldyhzaXplX2EpOworICAgICAgICAgICAgaWYgKGQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGFfZW5kID0gYS0+b2JfZGlnaXQgKyBzaXplX2E7CisgICAgICAgIGJfZW5kID0gYi0+b2JfZGlnaXQgKyBzaXplX2I7CisKKyAgICAgICAgLyogY29tcHV0ZSBuZXcgYSBhbmQgbmV3IGIgaW4gcGFyYWxsZWwgKi8KKyAgICAgICAgYV9kaWdpdCA9IGEtPm9iX2RpZ2l0OworICAgICAgICBiX2RpZ2l0ID0gYi0+b2JfZGlnaXQ7CisgICAgICAgIGNfZGlnaXQgPSBjLT5vYl9kaWdpdDsKKyAgICAgICAgZF9kaWdpdCA9IGQtPm9iX2RpZ2l0OworICAgICAgICBjX2NhcnJ5ID0gMDsKKyAgICAgICAgZF9jYXJyeSA9IDA7CisgICAgICAgIHdoaWxlIChiX2RpZ2l0IDwgYl9lbmQpIHsKKyAgICAgICAgICAgIGNfY2FycnkgKz0gKEEgKiAqYV9kaWdpdCkgLSAoQiAqICpiX2RpZ2l0KTsKKyAgICAgICAgICAgIGRfY2FycnkgKz0gKEQgKiAqYl9kaWdpdCsrKSAtIChDICogKmFfZGlnaXQrKyk7CisgICAgICAgICAgICAqY19kaWdpdCsrID0gKGRpZ2l0KShjX2NhcnJ5ICYgUHlMb25nX01BU0spOworICAgICAgICAgICAgKmRfZGlnaXQrKyA9IChkaWdpdCkoZF9jYXJyeSAmIFB5TG9uZ19NQVNLKTsKKyAgICAgICAgICAgIGNfY2FycnkgPj49IFB5TG9uZ19TSElGVDsKKyAgICAgICAgICAgIGRfY2FycnkgPj49IFB5TG9uZ19TSElGVDsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoYV9kaWdpdCA8IGFfZW5kKSB7CisgICAgICAgICAgICBjX2NhcnJ5ICs9IEEgKiAqYV9kaWdpdDsKKyAgICAgICAgICAgIGRfY2FycnkgLT0gQyAqICphX2RpZ2l0Kys7CisgICAgICAgICAgICAqY19kaWdpdCsrID0gKGRpZ2l0KShjX2NhcnJ5ICYgUHlMb25nX01BU0spOworICAgICAgICAgICAgKmRfZGlnaXQrKyA9IChkaWdpdCkoZF9jYXJyeSAmIFB5TG9uZ19NQVNLKTsKKyAgICAgICAgICAgIGNfY2FycnkgPj49IFB5TG9uZ19TSElGVDsKKyAgICAgICAgICAgIGRfY2FycnkgPj49IFB5TG9uZ19TSElGVDsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoY19jYXJyeSA9PSAwKTsKKyAgICAgICAgYXNzZXJ0KGRfY2FycnkgPT0gMCk7CisKKyAgICAgICAgUHlfSU5DUkVGKGMpOworICAgICAgICBQeV9JTkNSRUYoZCk7CisgICAgICAgIFB5X0RFQ1JFRihhKTsKKyAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICBhID0gbG9uZ19ub3JtYWxpemUoYyk7CisgICAgICAgIGIgPSBsb25nX25vcm1hbGl6ZShkKTsKKyAgICB9CisgICAgUHlfWERFQ1JFRihjKTsKKyAgICBQeV9YREVDUkVGKGQpOworCitzaW1wbGU6CisgICAgYXNzZXJ0KFB5X1JFRkNOVChhKSA+IDApOworICAgIGFzc2VydChQeV9SRUZDTlQoYikgPiAwKTsKKy8qIElzc3VlICMyNDk5OTogdXNlIHR3byBzaGlmdHMgaW5zdGVhZCBvZiAiPj4gMipQeUxvbmdfU0hJRlQiIHRvIGF2b2lkCisgICB1bmRlZmluZWQgYmVoYXZpb3VyIHdoZW4gTE9OR19NQVggdHlwZSBpcyBzbWFsbGVyIHRoYW4gNjAgYml0cyAqLworI2lmIExPTkdfTUFYID4+IFB5TG9uZ19TSElGVCA+PiBQeUxvbmdfU0hJRlQKKyAgICAvKiBhIGZpdHMgaW50byBhIGxvbmcsIHNvIGIgbXVzdCB0b28gKi8KKyAgICB4ID0gUHlMb25nX0FzTG9uZygoUHlPYmplY3QgKilhKTsKKyAgICB5ID0gUHlMb25nX0FzTG9uZygoUHlPYmplY3QgKiliKTsKKyNlbGlmIGRlZmluZWQoUFlfTE9OR19MT05HKSAmJiBQWV9MTE9OR19NQVggPj4gUHlMb25nX1NISUZUID4+IFB5TG9uZ19TSElGVAorICAgIHggPSBQeUxvbmdfQXNMb25nTG9uZygoUHlPYmplY3QgKilhKTsKKyAgICB5ID0gUHlMb25nX0FzTG9uZ0xvbmcoKFB5T2JqZWN0ICopYik7CisjZWxzZQorIyBlcnJvciAiX1B5TG9uZ19HQ0QiCisjZW5kaWYKKyAgICB4ID0gUHlfQUJTKHgpOworICAgIHkgPSBQeV9BQlMoeSk7CisgICAgUHlfREVDUkVGKGEpOworICAgIFB5X0RFQ1JFRihiKTsKKworICAgIC8qIHVzdWFsIEV1Y2xpZGVhbiBhbGdvcml0aG0gZm9yIGxvbmdzICovCisgICAgd2hpbGUgKHkgIT0gMCkgeworICAgICAgICB0ID0geTsKKyAgICAgICAgeSA9IHggJSB5OworICAgICAgICB4ID0gdDsKKyAgICB9CisjaWYgTE9OR19NQVggPj4gUHlMb25nX1NISUZUID4+IFB5TG9uZ19TSElGVAorICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoeCk7CisjZWxpZiBkZWZpbmVkKFBZX0xPTkdfTE9ORykgJiYgUFlfTExPTkdfTUFYID4+IFB5TG9uZ19TSElGVCA+PiBQeUxvbmdfU0hJRlQKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZyh4KTsKKyNlbHNlCisjIGVycm9yICJfUHlMb25nX0dDRCIKKyNlbmRpZgorCitlcnJvcjoKKyAgICBQeV9ERUNSRUYoYSk7CisgICAgUHlfREVDUkVGKGIpOworICAgIFB5X1hERUNSRUYoYyk7CisgICAgUHlfWERFQ1JFRihkKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIGxvbmdfZmxvYXQoUHlPYmplY3QgKnYpCiB7CkBAIC00NjMwLDcgKzQ4MzYsNyBAQAogewogICAgIFB5X3NzaXplX3QgcmVzOwogCi0gICAgcmVzID0gb2Zmc2V0b2YoUHlMb25nT2JqZWN0LCBvYl9kaWdpdCkgKyBBQlMoUHlfU0laRSh2KSkqc2l6ZW9mKGRpZ2l0KTsKKyAgICByZXMgPSBvZmZzZXRvZihQeUxvbmdPYmplY3QsIG9iX2RpZ2l0KSArIFB5X0FCUyhQeV9TSVpFKHYpKSpzaXplb2YoZGlnaXQpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKIH0KIApAQCAtNDY0NCw3ICs0ODUwLDcgQEAKICAgICBhc3NlcnQodiAhPSBOVUxMKTsKICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHYpKTsKIAotICAgIG5kaWdpdHMgPSBBQlMoUHlfU0laRSh2KSk7CisgICAgbmRpZ2l0cyA9IFB5X0FCUyhQeV9TSVpFKHYpKTsKICAgICBpZiAobmRpZ2l0cyA9PSAwKQogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwogCkBAIC00ODQzLDI3ICs1MDQ5LDkgQEAKICAgICAgICAgbGl0dGxlX2VuZGlhbiwgaXNfc2lnbmVkKTsKICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogCi0gICAgLyogSWYgZnJvbV9ieXRlcygpIHdhcyB1c2VkIG9uIHN1YmNsYXNzLCBhbGxvY2F0ZSBuZXcgc3ViY2xhc3MKLSAgICAgKiBpbnN0YW5jZSwgaW5pdGlhbGl6ZSBpdCB3aXRoIGRlY29kZWQgaW50IHZhbHVlIGFuZCByZXR1cm4gaXQuCi0gICAgICovCi0gICAgaWYgKHR5cGUgIT0gJlB5TG9uZ19UeXBlICYmIFB5VHlwZV9Jc1N1YnR5cGUodHlwZSwgJlB5TG9uZ19UeXBlKSkgewotICAgICAgICBQeUxvbmdPYmplY3QgKm5ld29iajsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIFB5X3NzaXplX3QgbiA9IEFCUyhQeV9TSVpFKGxvbmdfb2JqKSk7Ci0KLSAgICAgICAgbmV3b2JqID0gKFB5TG9uZ09iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIG4pOwotICAgICAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsb25nX29iaik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKG5ld29iaikpOwotICAgICAgICBQeV9TSVpFKG5ld29iaikgPSBQeV9TSVpFKGxvbmdfb2JqKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgbmV3b2JqLT5vYl9kaWdpdFtpXSA9Ci0gICAgICAgICAgICAgICAgKChQeUxvbmdPYmplY3QgKilsb25nX29iaiktPm9iX2RpZ2l0W2ldOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihsb25nX29iaik7Ci0gICAgICAgIHJldHVybiAoUHlPYmplY3QgKiluZXdvYmo7CisgICAgaWYgKHR5cGUgIT0gJlB5TG9uZ19UeXBlKSB7CisgICAgICAgIFB5X1NFVFJFRihsb25nX29iaiwgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncygoUHlPYmplY3QgKil0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ19vYmosIE5VTEwpKTsKICAgICB9CiAKICAgICByZXR1cm4gbG9uZ19vYmo7CkBAIC00ODc0LDkgKzUwNjIsNyBAQAogXG5cCiBSZXR1cm4gdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIGJ5dGVzLlxuXAogXG5cCi1UaGUgYnl0ZXMgYXJndW1lbnQgbXVzdCBlaXRoZXIgc3VwcG9ydCB0aGUgYnVmZmVyIHByb3RvY29sIG9yIGJlIGFuXG5cCi1pdGVyYWJsZSBvYmplY3QgcHJvZHVjaW5nIGJ5dGVzLiAgQnl0ZXMgYW5kIGJ5dGVhcnJheSBhcmUgZXhhbXBsZXMgb2ZcblwKLWJ1aWx0LWluIG9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBidWZmZXIgcHJvdG9jb2wuXG5cCitUaGUgYnl0ZXMgYXJndW1lbnQgbXVzdCBiZSBhIGJ5dGVzLWxpa2Ugb2JqZWN0IChlLmcuIGJ5dGVzIG9yIGJ5dGVhcnJheSkuXG5cCiBcblwKIFRoZSBieXRlb3JkZXIgYXJndW1lbnQgZGV0ZXJtaW5lcyB0aGUgYnl0ZSBvcmRlciB1c2VkIHRvIHJlcHJlc2VudCB0aGVcblwKIGludGVnZXIuICBJZiBieXRlb3JkZXIgaXMgJ2JpZycsIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgaXMgYXQgdGhlXG5cCkBAIC01MDk1LDEzICs1MjgxLDEzIEBACiAgICAgICAgICAgICAgKiB0byB0aGUgb3JpZ2luYWwgcmVmY250ICsgMSAqLwogICAgICAgICAgICAgUHlfUkVGQ05UKG9wKSA9IHJlZmNudCArIDE7CiAgICAgICAgICAgICBhc3NlcnQoUHlfU0laRShvcCkgPT0gc2l6ZSk7Ci0gICAgICAgICAgICBhc3NlcnQodi0+b2JfZGlnaXRbMF0gPT0gYWJzKGl2YWwpKTsKKyAgICAgICAgICAgIGFzc2VydCh2LT5vYl9kaWdpdFswXSA9PSAoZGlnaXQpYWJzKGl2YWwpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICh2b2lkKVB5T2JqZWN0X0lOSVQodiwgJlB5TG9uZ19UeXBlKTsKICAgICAgICAgfQogICAgICAgICBQeV9TSVpFKHYpID0gc2l6ZTsKLSAgICAgICAgdi0+b2JfZGlnaXRbMF0gPSBhYnMoaXZhbCk7CisgICAgICAgIHYtPm9iX2RpZ2l0WzBdID0gKGRpZ2l0KWFicyhpdmFsKTsKICAgICB9CiAjZW5kaWYKICAgICAvKiBpbml0aWFsaXplIGludF9pbmZvICovCmRpZmYgLS1naXQgYS9PYmplY3RzL21lbW9yeW9iamVjdC5jIGIvT2JqZWN0cy9tZW1vcnlvYmplY3QuYwppbmRleCAwYmU4NDkzLi4xMDE2MmNiIDEwMDY0NAotLS0gYS9PYmplY3RzL21lbW9yeW9iamVjdC5jCisrKyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKQEAgLTEsNiArMSw3IEBACiAvKiBNZW1vcnl2aWV3IG9iamVjdCBpbXBsZW1lbnRhdGlvbiAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAicHlzdHJoZXguaCIKICNpbmNsdWRlIDxzdGRkZWYuaD4KIAogCkBAIC00OCw5ICs0OSw2IEBACiAqLwogCiAKLSNkZWZpbmUgWFNUUklOR0laRSh2KSAjdgotI2RlZmluZSBTVFJJTkdJWkUodikgWFNUUklOR0laRSh2KQotCiAjZGVmaW5lIENIRUNLX01CVUZfUkVMRUFTRUQobWJ1ZikgXAogICAgIGlmICgoKF9QeU1hbmFnZWRCdWZmZXJPYmplY3QgKiltYnVmKS0+ZmxhZ3MmX1B5X01BTkFHRURfQlVGRkVSX1JFTEVBU0VEKSB7IFwKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xOTUsMTAgKzE5MywxMCBAQAogI2RlZmluZSBWSUVXX0FERFIobXYpICgmKChQeU1lbW9yeVZpZXdPYmplY3QgKiltdiktPnZpZXcpCiAKIC8qIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2Ygc3Vib2Zmc2V0cyBpbiB0aGUgZmlyc3QgZGltZW5zaW9uLiAqLwotI2RlZmluZSBIQVZFX1BUUihzdWJvZmZzZXRzKSAoc3Vib2Zmc2V0cyAmJiBzdWJvZmZzZXRzWzBdID49IDApCisjZGVmaW5lIEhBVkVfUFRSKHN1Ym9mZnNldHMsIGRpbSkgKHN1Ym9mZnNldHMgJiYgc3Vib2Zmc2V0c1tkaW1dID49IDApCiAvKiBBZGp1c3QgcHRyIGlmIHN1Ym9mZnNldHMgYXJlIHByZXNlbnQuICovCi0jZGVmaW5lIEFESlVTVF9QVFIocHRyLCBzdWJvZmZzZXRzKSBcCi0gICAgKEhBVkVfUFRSKHN1Ym9mZnNldHMpID8gKigoY2hhcioqKXB0cikgKyBzdWJvZmZzZXRzWzBdIDogcHRyKQorI2RlZmluZSBBREpVU1RfUFRSKHB0ciwgc3Vib2Zmc2V0cywgZGltKSBcCisgICAgKEhBVkVfUFRSKHN1Ym9mZnNldHMsIGRpbSkgPyAqKChjaGFyKiopcHRyKSArIHN1Ym9mZnNldHNbZGltXSA6IHB0cikKIAogLyogTWVtb3J5dmlldyBidWZmZXIgcHJvcGVydGllcyAqLwogI2RlZmluZSBNVl9DX0NPTlRJR1VPVVMoZmxhZ3MpIChmbGFncyYoX1B5X01FTU9SWVZJRVdfU0NBTEFSfF9QeV9NRU1PUllWSUVXX0MpKQpAQCAtMjIzLDcgKzIyMSw3IEBACiAKIAogUHlEb2NfU1RSVkFSKG1lbW9yeV9kb2MsCi0ibWVtb3J5dmlldyhvYmplY3QpXG5cCisibWVtb3J5dmlldygkbW9kdWxlLCBvYmplY3QpXG4tLVxuXAogXG5cCiBDcmVhdGUgYSBuZXcgbWVtb3J5dmlldyBvYmplY3Qgd2hpY2ggcmVmZXJlbmNlcyB0aGUgZ2l2ZW4gb2JqZWN0LiIpOwogCkBAIC0zMzUsMTEgKzMzMywxMSBAQAogICAgICAgICBjaGFyICpwOwogICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgIGZvciAoaT0wLCBwPW1lbTsgaSA8IHNoYXBlWzBdOyBwKz1pdGVtc2l6ZSwgc3B0cis9c3N0cmlkZXNbMF0sIGkrKykgewotICAgICAgICAgICAgY2hhciAqeHNwdHIgPSBBREpVU1RfUFRSKHNwdHIsIHNzdWJvZmZzZXRzKTsKKyAgICAgICAgICAgIGNoYXIgKnhzcHRyID0gQURKVVNUX1BUUihzcHRyLCBzc3Vib2Zmc2V0cywgMCk7CiAgICAgICAgICAgICBtZW1jcHkocCwgeHNwdHIsIGl0ZW1zaXplKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKGk9MCwgcD1tZW07IGkgPCBzaGFwZVswXTsgcCs9aXRlbXNpemUsIGRwdHIrPWRzdHJpZGVzWzBdLCBpKyspIHsKLSAgICAgICAgICAgIGNoYXIgKnhkcHRyID0gQURKVVNUX1BUUihkcHRyLCBkc3Vib2Zmc2V0cyk7CisgICAgICAgICAgICBjaGFyICp4ZHB0ciA9IEFESlVTVF9QVFIoZHB0ciwgZHN1Ym9mZnNldHMsIDApOwogICAgICAgICAgICAgbWVtY3B5KHhkcHRyLCBwLCBpdGVtc2l6ZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNjcsOCArMzY1LDggQEAKICAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2hhcGVbMF07IGRwdHIrPWRzdHJpZGVzWzBdLCBzcHRyKz1zc3RyaWRlc1swXSwgaSsrKSB7Ci0gICAgICAgIGNoYXIgKnhkcHRyID0gQURKVVNUX1BUUihkcHRyLCBkc3Vib2Zmc2V0cyk7Ci0gICAgICAgIGNoYXIgKnhzcHRyID0gQURKVVNUX1BUUihzcHRyLCBzc3Vib2Zmc2V0cyk7CisgICAgICAgIGNoYXIgKnhkcHRyID0gQURKVVNUX1BUUihkcHRyLCBkc3Vib2Zmc2V0cywgMCk7CisgICAgICAgIGNoYXIgKnhzcHRyID0gQURKVVNUX1BUUihzcHRyLCBzc3Vib2Zmc2V0cywgMCk7CiAKICAgICAgICAgY29weV9yZWMoc2hhcGUrMSwgbmRpbS0xLCBpdGVtc2l6ZSwKICAgICAgICAgICAgICAgICAgeGRwdHIsIGRzdHJpZGVzKzEsIGRzdWJvZmZzZXRzID8gZHN1Ym9mZnNldHMrMSA6IE5VTEwsCkBAIC02NjAsNyArNjU4LDcgQEAKICAgICBpZiAoc3JjLT5uZGltID4gUHlCVUZfTUFYX05ESU0pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAibWVtb3J5dmlldzogbnVtYmVyIG9mIGRpbWVuc2lvbnMgbXVzdCBub3QgZXhjZWVkICIKLSAgICAgICAgICAgIFNUUklOR0laRShQeUJVRl9NQVhfTkRJTSkpOworICAgICAgICAgICAgUHlfU1RSSU5HSUZZKFB5QlVGX01BWF9ORElNKSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNzk1LDcgKzc5Myw3IEBACiAgICAgfQogCiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgIm1lbW9yeXZpZXc6ICUuMjAwcyBvYmplY3QgZG9lcyBub3QgaGF2ZSB0aGUgYnVmZmVyIGludGVyZmFjZSIsCisgICAgICAgICJtZW1vcnl2aWV3OiBhIGJ5dGVzLWxpa2Ugb2JqZWN0IGlzIHJlcXVpcmVkLCBub3QgJyUuMjAwcyciLAogICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTg5NSw3ICs4OTMsNyBAQAogICAgVGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgaXMgdGhlIHNhbWUKICAgIChpLmUuIHRvbGlzdChpbnB1dCkgPT0gdG9saXN0KG91dHB1dCkpLCBidXQgdGhlIHBoeXNpY2FsIGxheW91dCBpbgogICAgbWVtb3J5IGNhbiBiZSBleHBsaWNpdGx5IGNob3Nlbi4KLSAKKwogICAgQXMgdXN1YWwsIGlmIGJ1ZmZlcnR5cGU9UHlCVUZfV1JJVEUsIHRoZSBleHBvcnRlcidzIGJ1ZmZlciBtdXN0IGJlIHdyaXRhYmxlLAogICAgb3RoZXJ3aXNlIGl0IG1heSBiZSB3cml0YWJsZSBvciByZWFkLW9ubHkuCiAKQEAgLTExOTksMTMgKzExOTcsNiBAQAogICAgIGFzc2VydCh2aWV3LT5zdHJpZGVzID09IG12LT5vYl9hcnJheSArIHZpZXctPm5kaW0pOwogICAgIGFzc2VydCh2aWV3LT5zdWJvZmZzZXRzID09IG12LT5vYl9hcnJheSArIDIqdmlldy0+bmRpbSk7CiAKLSAgICBpZiAoZ2V0X25hdGl2ZV9mbXRjaGFyKCZzcmNjaGFyLCB2aWV3LT5mb3JtYXQpIDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICJtZW1vcnl2aWV3OiBzb3VyY2UgZm9ybWF0IG11c3QgYmUgYSBuYXRpdmUgc2luZ2xlIGNoYXJhY3RlciAiCi0gICAgICAgICAgICAiZm9ybWF0IHByZWZpeGVkIHdpdGggYW4gb3B0aW9uYWwgJ0AnIik7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCiAgICAgYXNjaWlmbXQgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZyhmb3JtYXQpOwogICAgIGlmIChhc2NpaWZtdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gcmV0OwpAQCAtMTIxOCw3ICsxMjA5LDggQEAKICAgICAgICAgZ290byBvdXQ7CiAgICAgfQogCi0gICAgaWYgKCFJU19CWVRFX0ZPUk1BVChzcmNjaGFyKSAmJiAhSVNfQllURV9GT1JNQVQoZGVzdGNoYXIpKSB7CisgICAgaWYgKChnZXRfbmF0aXZlX2ZtdGNoYXIoJnNyY2NoYXIsIHZpZXctPmZvcm1hdCkgPCAwIHx8CisgICAgICAgICAhSVNfQllURV9GT1JNQVQoc3JjY2hhcikpICYmICFJU19CWVRFX0ZPUk1BVChkZXN0Y2hhcikpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICJtZW1vcnl2aWV3OiBjYW5ub3QgY2FzdCBiZXR3ZWVuIHR3byBub24tYnl0ZSBmb3JtYXRzIik7CiAgICAgICAgIGdvdG8gb3V0OwpAQCAtMTI0NCw3ICsxMjM2LDcgQEAKICAgICB2aWV3LT5zdWJvZmZzZXRzID0gTlVMTDsKIAogICAgIGluaXRfZmxhZ3MobXYpOwotIAorCiAgICAgcmV0ID0gMDsKIAogb3V0OgpAQCAtMTM4OSw3ICsxMzgxLDcgQEAKICAgICAgICAgaWYgKG5kaW0gPiBQeUJVRl9NQVhfTkRJTSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgIm1lbW9yeXZpZXc6IG51bWJlciBvZiBkaW1lbnNpb25zIG11c3Qgbm90IGV4Y2VlZCAiCi0gICAgICAgICAgICAgICAgU1RSSU5HSVpFKFB5QlVGX01BWF9ORElNKSk7CisgICAgICAgICAgICAgICAgUHlfU1RSSU5HSUZZKFB5QlVGX01BWF9ORElNKSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoc2VsZi0+dmlldy5uZGltICE9IDEgJiYgbmRpbSAhPSAxKSB7CkBAIC0yMDYwLDcgKzIwNTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzaGFwZVswXTsgcHRyKz1zdHJpZGVzWzBdLCBpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciAqeHB0ciA9IEFESlVTVF9QVFIocHRyLCBzdWJvZmZzZXRzKTsKKyAgICAgICAgY29uc3QgY2hhciAqeHB0ciA9IEFESlVTVF9QVFIocHRyLCBzdWJvZmZzZXRzLCAwKTsKICAgICAgICAgaXRlbSA9IHVucGFja19zaW5nbGUoeHB0ciwgZm10KTsKICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGxzdCk7CkBAIC0yMDk0LDcgKzIwODYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBzaGFwZVswXTsgcHRyKz1zdHJpZGVzWzBdLCBpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciAqeHB0ciA9IEFESlVTVF9QVFIocHRyLCBzdWJvZmZzZXRzKTsKKyAgICAgICAgY29uc3QgY2hhciAqeHB0ciA9IEFESlVTVF9QVFIocHRyLCBzdWJvZmZzZXRzLCAwKTsKICAgICAgICAgaXRlbSA9IHRvbGlzdF9yZWMoeHB0ciwgbmRpbS0xLCBzaGFwZSsxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpZGVzKzEsIHN1Ym9mZnNldHMgPyBzdWJvZmZzZXRzKzEgOiBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQpOwpAQCAtMjE2MSw2ICsyMTUzLDI5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfaGV4KFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmR1bW15KQoreworICAgIFB5X2J1ZmZlciAqc3JjID0gVklFV19BRERSKHNlbGYpOworICAgIFB5T2JqZWN0ICpieXRlczsKKyAgICBQeU9iamVjdCAqcmV0OworCisgICAgQ0hFQ0tfUkVMRUFTRUQoc2VsZik7CisKKyAgICBpZiAoTVZfQ19DT05USUdVT1VTKHNlbGYtPmZsYWdzKSkgeworICAgICAgICByZXR1cm4gX1B5X3N0cmhleChzcmMtPmJ1Ziwgc3JjLT5sZW4pOworICAgIH0KKworICAgIGJ5dGVzID0gbWVtb3J5X3RvYnl0ZXMoc2VsZiwgZHVtbXkpOworICAgIGlmIChieXRlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldCA9IF9QeV9zdHJoZXgoUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpLCBQeV9TSVpFKGJ5dGVzKSk7CisgICAgUHlfREVDUkVGKGJ5dGVzKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBtZW1vcnlfcmVwcihQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPmZsYWdzICYgX1B5X01FTU9SWVZJRVdfUkVMRUFTRUQpCkBAIC0yMTc0LDMzICsyMTg5LDY2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhpbmcgYW5kIHNsaWNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgaXRlbSBhdCBpbmRleC4gKi8KIHN0YXRpYyBjaGFyICoKLXB0cl9mcm9tX2luZGV4KFB5X2J1ZmZlciAqdmlldywgUHlfc3NpemVfdCBpbmRleCkKK2xvb2t1cF9kaW1lbnNpb24oUHlfYnVmZmVyICp2aWV3LCBjaGFyICpwdHIsIGludCBkaW0sIFB5X3NzaXplX3QgaW5kZXgpCiB7Ci0gICAgY2hhciAqcHRyOwotICAgIFB5X3NzaXplX3Qgbml0ZW1zOyAvKiBpdGVtcyBpbiB0aGUgZmlyc3QgZGltZW5zaW9uICovCisgICAgUHlfc3NpemVfdCBuaXRlbXM7IC8qIGl0ZW1zIGluIHRoZSBnaXZlbiBkaW1lbnNpb24gKi8KIAogICAgIGFzc2VydCh2aWV3LT5zaGFwZSk7CiAgICAgYXNzZXJ0KHZpZXctPnN0cmlkZXMpOwogCi0gICAgbml0ZW1zID0gdmlldy0+c2hhcGVbMF07CisgICAgbml0ZW1zID0gdmlldy0+c2hhcGVbZGltXTsKICAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgICAgIGluZGV4ICs9IG5pdGVtczsKICAgICB9CiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBuaXRlbXMpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJpbmRleCBvdXQgb2YgYm91bmRzIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbmRleEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImluZGV4IG91dCBvZiBib3VuZHMgb24gZGltZW5zaW9uICVkIiwgZGltICsgMSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHB0ciA9IChjaGFyICopdmlldy0+YnVmOwotICAgIHB0ciArPSB2aWV3LT5zdHJpZGVzWzBdICogaW5kZXg7CisgICAgcHRyICs9IHZpZXctPnN0cmlkZXNbZGltXSAqIGluZGV4OwogCi0gICAgcHRyID0gQURKVVNUX1BUUihwdHIsIHZpZXctPnN1Ym9mZnNldHMpOworICAgIHB0ciA9IEFESlVTVF9QVFIocHRyLCB2aWV3LT5zdWJvZmZzZXRzLCBkaW0pOwogCiAgICAgcmV0dXJuIHB0cjsKIH0KIAorLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBpdGVtIGF0IGluZGV4LiAqLworc3RhdGljIGNoYXIgKgorcHRyX2Zyb21faW5kZXgoUHlfYnVmZmVyICp2aWV3LCBQeV9zc2l6ZV90IGluZGV4KQoreworICAgIGNoYXIgKnB0ciA9IChjaGFyICopdmlldy0+YnVmOworICAgIHJldHVybiBsb29rdXBfZGltZW5zaW9uKHZpZXcsIHB0ciwgMCwgaW5kZXgpOworfQorCisvKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIGl0ZW0gYXQgdHVwbGUuICovCitzdGF0aWMgY2hhciAqCitwdHJfZnJvbV90dXBsZShQeV9idWZmZXIgKnZpZXcsIFB5T2JqZWN0ICp0dXApCit7CisgICAgY2hhciAqcHRyID0gKGNoYXIgKil2aWV3LT5idWY7CisgICAgUHlfc3NpemVfdCBkaW0sIG5pbmRpY2VzID0gUHlUdXBsZV9HRVRfU0laRSh0dXApOworCisgICAgaWYgKG5pbmRpY2VzID4gdmlldy0+bmRpbSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBpbmRleCAlemQtZGltZW5zaW9uIHZpZXcgd2l0aCAlemQtZWxlbWVudCB0dXBsZSIsCisgICAgICAgICAgICAgICAgICAgICB2aWV3LT5uZGltLCBuaW5kaWNlcyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvciAoZGltID0gMDsgZGltIDwgbmluZGljZXM7IGRpbSsrKSB7CisgICAgICAgIFB5X3NzaXplX3QgaW5kZXg7CisgICAgICAgIGluZGV4ID0gUHlOdW1iZXJfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0odHVwLCBkaW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19JbmRleEVycm9yKTsKKyAgICAgICAgaWYgKGluZGV4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcHRyID0gbG9va3VwX2RpbWVuc2lvbih2aWV3LCBwdHIsIChpbnQpZGltLCBpbmRleCk7CisgICAgICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcHRyOworfQorCiAvKiBSZXR1cm4gdGhlIGl0ZW0gYXQgaW5kZXguIEluIGEgb25lLWRpbWVuc2lvbmFsIHZpZXcsIHRoaXMgaXMgYW4gb2JqZWN0CiAgICB3aXRoIHRoZSB0eXBlIHNwZWNpZmllZCBieSB2aWV3LT5mb3JtYXQuIE90aGVyd2lzZSwgdGhlIGl0ZW0gaXMgYSBzdWItdmlldy4KICAgIFRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIG1lbW9yeV9zdWJzY3JpcHQoKSBhbmQgbWVtb3J5X2FzX3NlcXVlbmNlLiAqLwpAQCAtMjIzMiw2ICsyMjgwLDMyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIFJldHVybiB0aGUgaXRlbSBhdCBwb3NpdGlvbiAqa2V5KiAoYSB0dXBsZSBvZiBpbmRpY2VzKS4gKi8KK3N0YXRpYyBQeU9iamVjdCAqCittZW1vcnlfaXRlbV9tdWx0aShQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0dXApCit7CisgICAgUHlfYnVmZmVyICp2aWV3ID0gJihzZWxmLT52aWV3KTsKKyAgICBjb25zdCBjaGFyICpmbXQ7CisgICAgUHlfc3NpemVfdCBuaW5kaWNlcyA9IFB5VHVwbGVfR0VUX1NJWkUodHVwKTsKKyAgICBjaGFyICpwdHI7CisKKyAgICBDSEVDS19SRUxFQVNFRChzZWxmKTsKKworICAgIGZtdCA9IGFkanVzdF9mbXQodmlldyk7CisgICAgaWYgKGZtdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChuaW5kaWNlcyA8IHZpZXctPm5kaW0pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAic3ViLXZpZXdzIGFyZSBub3QgaW1wbGVtZW50ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHB0ciA9IHB0cl9mcm9tX3R1cGxlKHZpZXcsIHR1cCk7CisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gdW5wYWNrX3NpbmdsZShwdHIsIGZtdCk7Cit9CisKIFB5X0xPQ0FMX0lOTElORShpbnQpCiBpbml0X3NsaWNlKFB5X2J1ZmZlciAqYmFzZSwgUHlPYmplY3QgKmtleSwgaW50IGRpbSkKIHsKQEAgLTIyODAsNiArMjM1NCwyMiBAQAogICAgIHJldHVybiAxOwogfQogCitzdGF0aWMgUHlfc3NpemVfdAoraXNfbXVsdGlpbmRleChQeU9iamVjdCAqa2V5KQoreworICAgIFB5X3NzaXplX3Qgc2l6ZSwgaTsKKworICAgIGlmICghUHlUdXBsZV9DaGVjayhrZXkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShrZXkpOworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKnggPSBQeVR1cGxlX0dFVF9JVEVNKGtleSwgaSk7CisgICAgICAgIGlmICghUHlJbmRleF9DaGVjayh4KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKwogLyogbXZbb2JqXSByZXR1cm5zIGFuIG9iamVjdCBob2xkaW5nIHRoZSBkYXRhIGZvciBvbmUgZWxlbWVudCBpZiBvYmoKICAgIGZ1bGx5IGluZGV4ZXMgdGhlIG1lbW9yeXZpZXcgb3IgYW5vdGhlciBtZW1vcnl2aWV3IG9iamVjdCBpZiBpdAogICAgZG9lcyBub3QuCkBAIC0yMjkxLDcgKzIzODEsNyBAQAogewogICAgIFB5X2J1ZmZlciAqdmlldzsKICAgICB2aWV3ID0gJihzZWxmLT52aWV3KTsKLSAgICAKKwogICAgIENIRUNLX1JFTEVBU0VEKHNlbGYpOwogCiAgICAgaWYgKHZpZXctPm5kaW0gPT0gMCkgewpAQCAtMjMzNSw2ICsyNDI1LDkgQEAKIAogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2xpY2VkOwogICAgIH0KKyAgICBlbHNlIGlmIChpc19tdWx0aWluZGV4KGtleSkpIHsKKyAgICAgICAgcmV0dXJuIG1lbW9yeV9pdGVtX211bHRpKHNlbGYsIGtleSk7CisgICAgfQogICAgIGVsc2UgaWYgKGlzX211bHRpc2xpY2Uoa2V5KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKICAgICAgICAgICAgICJtdWx0aS1kaW1lbnNpb25hbCBzbGljaW5nIGlzIG5vdCBpbXBsZW1lbnRlZCIpOwpAQCAtMjM3OSwxNCArMjQ3MiwxNSBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICh2aWV3LT5uZGltICE9IDEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCi0gICAgICAgICAgICAibWVtb3J5dmlldyBhc3NpZ25tZW50cyBhcmUgY3VycmVudGx5IHJlc3RyaWN0ZWQgdG8gbmRpbSA9IDEiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KIAogICAgIGlmIChQeUluZGV4X0NoZWNrKGtleSkpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TnVtYmVyX0FzU3NpemVfdChrZXksIFB5RXhjX0luZGV4RXJyb3IpOworICAgICAgICBQeV9zc2l6ZV90IGluZGV4OworICAgICAgICBpZiAoMSA8IHZpZXctPm5kaW0pIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWItdmlld3MgYXJlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGluZGV4ID0gUHlOdW1iZXJfQXNTc2l6ZV90KGtleSwgUHlFeGNfSW5kZXhFcnJvcik7CiAgICAgICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBwdHIgPSBwdHJfZnJvbV9pbmRleCh2aWV3LCBpbmRleCk7CkBAIC0yNDIxLDcgKzI1MTUsMTkgQEAKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc3JjKTsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhrZXkpIHx8IGlzX211bHRpc2xpY2Uoa2V5KSkgeworICAgIGlmIChpc19tdWx0aWluZGV4KGtleSkpIHsKKyAgICAgICAgY2hhciAqcHRyOworICAgICAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShrZXkpIDwgdmlldy0+bmRpbSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Yi12aWV3cyBhcmUgbm90IGltcGxlbWVudGVkIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcHRyID0gcHRyX2Zyb21fdHVwbGUodmlldywga2V5KTsKKyAgICAgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gcGFja19zaW5nbGUocHRyLCB2YWx1ZSwgZm10KTsKKyAgICB9CisgICAgaWYgKFB5U2xpY2VfQ2hlY2soa2V5KSB8fCBpc19tdWx0aXNsaWNlKGtleSkpIHsKICAgICAgICAgLyogQ2FsbCBtZW1vcnlfc3Vic2NyaXB0KCkgdG8gcHJvZHVjZSBhIHNsaWNlZCBsdmFsdWUsIHRoZW4gY29weQogICAgICAgICAgICBydmFsdWUgaW50byBsdmFsdWUuIFRoaXMgaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCBpbiBfdGVzdGJ1ZmZlci5jLiAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKQEAgLTI1OTQsOCArMjcwMCw4IEBACiAgICAgaW50IGVxdWFsOwogCiAgICAgZm9yIChpID0gMDsgaSA8IHNoYXBlWzBdOyBwKz1wc3RyaWRlc1swXSwgcSs9cXN0cmlkZXNbMF0sIGkrKykgewotICAgICAgICBjb25zdCBjaGFyICp4cCA9IEFESlVTVF9QVFIocCwgcHN1Ym9mZnNldHMpOwotICAgICAgICBjb25zdCBjaGFyICp4cSA9IEFESlVTVF9QVFIocSwgcXN1Ym9mZnNldHMpOworICAgICAgICBjb25zdCBjaGFyICp4cCA9IEFESlVTVF9QVFIocCwgcHN1Ym9mZnNldHMsIDApOworICAgICAgICBjb25zdCBjaGFyICp4cSA9IEFESlVTVF9QVFIocSwgcXN1Ym9mZnNldHMsIDApOwogICAgICAgICBlcXVhbCA9IHVucGFja19jbXAoeHAsIHhxLCBmbXQsIHVucGFja19wLCB1bnBhY2tfcSk7CiAgICAgICAgIGlmIChlcXVhbCA8PSAwKQogICAgICAgICAgICAgcmV0dXJuIGVxdWFsOwpAQCAtMjYyOSw4ICsyNzM1LDggQEAKICAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2hhcGVbMF07IHArPXBzdHJpZGVzWzBdLCBxKz1xc3RyaWRlc1swXSwgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnhwID0gQURKVVNUX1BUUihwLCBwc3Vib2Zmc2V0cyk7Ci0gICAgICAgIGNvbnN0IGNoYXIgKnhxID0gQURKVVNUX1BUUihxLCBxc3Vib2Zmc2V0cyk7CisgICAgICAgIGNvbnN0IGNoYXIgKnhwID0gQURKVVNUX1BUUihwLCBwc3Vib2Zmc2V0cywgMCk7CisgICAgICAgIGNvbnN0IGNoYXIgKnhxID0gQURKVVNUX1BUUihxLCBxc3Vib2Zmc2V0cywgMCk7CiAgICAgICAgIGVxdWFsID0gY21wX3JlYyh4cCwgeHEsIG5kaW0tMSwgc2hhcGUrMSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBzdHJpZGVzKzEsIHBzdWJvZmZzZXRzID8gcHN1Ym9mZnNldHMrMSA6IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICBxc3RyaWRlcysxLCBxc3Vib2Zmc2V0cyA/IHFzdWJvZmZzZXRzKzEgOiBOVUxMLApAQCAtMjk0OCw2ICszMDU0LDcgQEAKIFB5RG9jX1NUUlZBUihtZW1vcnlfY29udGlndW91c19kb2MsCiAgICAgICAgICAgICAgIkEgYm9vbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1lbW9yeSBpcyBjb250aWd1b3VzLiIpOwogCisKIHN0YXRpYyBQeUdldFNldERlZiBtZW1vcnlfZ2V0c2V0bGlzdFtdID0gewogICAgIHsib2JqIiwgICAgICAgICAgICAgKGdldHRlciltZW1vcnlfb2JqX2dldCwgICAgICAgIE5VTEwsIG1lbW9yeV9vYmpfZG9jfSwKICAgICB7Im5ieXRlcyIsICAgICAgICAgIChnZXR0ZXIpbWVtb3J5X25ieXRlc19nZXQsICAgICBOVUxMLCBtZW1vcnlfbmJ5dGVzX2RvY30sCkBAIC0yOTY1LDI1ICszMDcyLDMwIEBACiB9OwogCiBQeURvY19TVFJWQVIobWVtb3J5X3JlbGVhc2VfZG9jLAotIk0ucmVsZWFzZSgpIC0+IE5vbmVcblwKKyJyZWxlYXNlKCRzZWxmLCAvKVxuLS1cblwKIFxuXAogUmVsZWFzZSB0aGUgdW5kZXJseWluZyBidWZmZXIgZXhwb3NlZCBieSB0aGUgbWVtb3J5dmlldyBvYmplY3QuIik7CiBQeURvY19TVFJWQVIobWVtb3J5X3RvYnl0ZXNfZG9jLAotIk0udG9ieXRlcygpIC0+IGJ5dGVzXG5cCisidG9ieXRlcygkc2VsZiwgLylcbi0tXG5cCiBcblwKIFJldHVybiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIGFzIGEgYnl0ZSBzdHJpbmcuIik7CitQeURvY19TVFJWQVIobWVtb3J5X2hleF9kb2MsCisiaGV4KCRzZWxmLCAvKVxuLS1cblwKK1xuXAorUmV0dXJuIHRoZSBkYXRhIGluIHRoZSBidWZmZXIgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgbnVtYmVycy4iKTsKIFB5RG9jX1NUUlZBUihtZW1vcnlfdG9saXN0X2RvYywKLSJNLnRvbGlzdCgpIC0+IGxpc3RcblwKKyJ0b2xpc3QoJHNlbGYsIC8pXG4tLVxuXAogXG5cCiBSZXR1cm4gdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciBhcyBhIGxpc3Qgb2YgZWxlbWVudHMuIik7CiBQeURvY19TVFJWQVIobWVtb3J5X2Nhc3RfZG9jLAotIk0uY2FzdChmb3JtYXRbLCBzaGFwZV0pIC0+IG1lbW9yeXZpZXdcblwKKyJjYXN0KCRzZWxmLCAvLCBmb3JtYXQsICosIHNoYXBlKVxuLS1cblwKIFxuXAogQ2FzdCBhIG1lbW9yeXZpZXcgdG8gYSBuZXcgZm9ybWF0IG9yIHNoYXBlLiIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgbWVtb3J5X21ldGhvZHNbXSA9IHsKICAgICB7InJlbGVhc2UiLCAgICAgKFB5Q0Z1bmN0aW9uKW1lbW9yeV9yZWxlYXNlLCBNRVRIX05PQVJHUywgbWVtb3J5X3JlbGVhc2VfZG9jfSwKICAgICB7InRvYnl0ZXMiLCAgICAgKFB5Q0Z1bmN0aW9uKW1lbW9yeV90b2J5dGVzLCBNRVRIX05PQVJHUywgbWVtb3J5X3RvYnl0ZXNfZG9jfSwKKyAgICB7ImhleCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKW1lbW9yeV9oZXgsIE1FVEhfTk9BUkdTLCBtZW1vcnlfaGV4X2RvY30sCiAgICAgeyJ0b2xpc3QiLCAgICAgIChQeUNGdW5jdGlvbiltZW1vcnlfdG9saXN0LCBNRVRIX05PQVJHUywgbWVtb3J5X3RvbGlzdF9kb2N9LAogICAgIHsiY2FzdCIsICAgICAgICAoUHlDRnVuY3Rpb24pbWVtb3J5X2Nhc3QsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBtZW1vcnlfY2FzdF9kb2N9LAogICAgIHsiX19lbnRlcl9fIiwgICBtZW1vcnlfZW50ZXIsIE1FVEhfTk9BUkdTLCBOVUxMfSwKZGlmZiAtLWdpdCBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMgYi9PYmplY3RzL21ldGhvZG9iamVjdC5jCmluZGV4IDliNmU1ZTQuLjk0NjM1N2YgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tZXRob2RvYmplY3QuYwpAQCAtMzcsNiArMzcsNyBAQAogICAgICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBvcC0+bV93ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgb3AtPm1fbWwgPSBtbDsKICAgICBQeV9YSU5DUkVGKHNlbGYpOwogICAgIG9wLT5tX3NlbGYgPSBzZWxmOwpAQCAtNzcsNjggKzc4LDcxIEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5Q0Z1bmN0aW9uX0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykKK1B5Q0Z1bmN0aW9uX0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSNkZWZpbmUgQ0hFQ0tfUkVTVUxUKHJlcykgYXNzZXJ0KHJlcyAhPSBOVUxMIHx8IFB5RXJyX09jY3VycmVkKCkpCi0KICAgICBQeUNGdW5jdGlvbk9iamVjdCogZiA9IChQeUNGdW5jdGlvbk9iamVjdCopZnVuYzsKICAgICBQeUNGdW5jdGlvbiBtZXRoID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOwogICAgIFB5T2JqZWN0ICpzZWxmID0gUHlDRnVuY3Rpb25fR0VUX1NFTEYoZnVuYyk7Ci0gICAgUHlPYmplY3QgKnJlczsKKyAgICBQeU9iamVjdCAqYXJnLCAqcmVzOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBpbnQgZmxhZ3M7CiAKLSAgICBzd2l0Y2ggKFB5Q0Z1bmN0aW9uX0dFVF9GTEFHUyhmdW5jKSAmIH4oTUVUSF9DTEFTUyB8IE1FVEhfU1RBVElDIHwgTUVUSF9DT0VYSVNUKSkgewotICAgIGNhc2UgTUVUSF9WQVJBUkdTOgotICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgewotICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBhcmcpOwotICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUzoKLSAgICAgICAgcmVzID0gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpbWV0aCkoc2VsZiwgYXJnLCBrdyk7Ci0gICAgICAgIENIRUNLX1JFU1VMVChyZXMpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIGNhc2UgTUVUSF9OT0FSR1M6Ci0gICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7Ci0gICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIG5vIGFyZ3VtZW50cyAoJXpkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSwgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1FVEhfTzoKLSAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApIHsKLSAgICAgICAgICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCkpOwotICAgICAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCAoJXpkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSwgc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJCYWQgY2FsbCBmbGFncyBpbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHlDRnVuY3Rpb25fQ2FsbC4gTUVUSF9PTERBUkdTIGlzIG5vICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nZXIgc3VwcG9ydGVkISIpOworICAgIC8qIFB5Q0Z1bmN0aW9uX0NhbGwoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOwogCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGZsYWdzID0gUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMpICYgfihNRVRIX0NMQVNTIHwgTUVUSF9TVEFUSUMgfCBNRVRIX0NPRVhJU1QpOworCisgICAgaWYgKGZsYWdzID09IChNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTKSkgeworICAgICAgICByZXMgPSAoKihQeUNGdW5jdGlvbldpdGhLZXl3b3JkcyltZXRoKShzZWxmLCBhcmdzLCBrd2RzKTsKICAgICB9Ci0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiUuMjAwcygpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzIiwKLSAgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChrd2RzICE9IE5VTEwgJiYgUHlEaWN0X1NpemUoa3dkcykgIT0gMCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiUuMjAwcygpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAKLSN1bmRlZiBDSEVDS19SRVNVTFQKKyAgICAgICAgc3dpdGNoIChmbGFncykgeworICAgICAgICBjYXNlIE1FVEhfVkFSQVJHUzoKKyAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgYXJncyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1FVEhfTk9BUkdTOgorICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VUX1NJWkUoYXJncyk7CisgICAgICAgICAgICBpZiAoc2l6ZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIG5vIGFyZ3VtZW50cyAoJXpkIGdpdmVuKSIsCisgICAgICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNRVRIX086CisgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKKyAgICAgICAgICAgIGlmIChzaXplICE9IDEpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQgKCV6ZCBnaXZlbikiLAorICAgICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXJnID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKTsKKyAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgYXJnKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBjYWxsIGZsYWdzIGluIFB5Q0Z1bmN0aW9uX0NhbGwuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUVUSF9PTERBUkdTIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQhIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBfUHlfQ2hlY2tGdW5jdGlvblJlc3VsdChmdW5jLCByZXMsIE5VTEwpOwogfQogCiAvKiBNZXRob2RzICh0aGUgc3RhbmRhcmQgYnVpbHQtaW4gbWV0aG9kcywgdGhhdCBpcykgKi8KQEAgLTE0Nyw2ICsxNTEsOSBAQAogbWV0aF9kZWFsbG9jKFB5Q0Z1bmN0aW9uT2JqZWN0ICptKQogewogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKG0pOworICAgIGlmIChtLT5tX3dlYWtyZWZsaXN0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QqKSBtKTsKKyAgICB9CiAgICAgUHlfWERFQ1JFRihtLT5tX3NlbGYpOwogICAgIFB5X1hERUNSRUYobS0+bV9tb2R1bGUpOwogICAgIGlmIChudW1mcmVlIDwgUHlDRnVuY3Rpb25fTUFYRlJFRUxJU1QpIHsKQEAgLTM1Miw3ICszNTksNyBAQAogICAgICh0cmF2ZXJzZXByb2MpbWV0aF90cmF2ZXJzZSwgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgbWV0aF9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBvZmZzZXRvZihQeUNGdW5jdGlvbk9iamVjdCwgbV93ZWFrcmVmbGlzdCksIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIG1ldGhfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9tb2R1bGVvYmplY3QuYyBiL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKaW5kZXggZjUwOTkzMi4uYTRjZGMyMCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9tb2R1bGVvYmplY3QuYworKysgYi9PYmplY3RzL21vZHVsZW9iamVjdC5jCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgezB9CiB9OwogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IG1vZHVsZWRlZl90eXBlID0geworUHlUeXBlT2JqZWN0IFB5TW9kdWxlRGVmX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAibW9kdWxlZGVmIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KICAgICBzaXplb2Yoc3RydWN0IFB5TW9kdWxlRGVmKSwgICAgICAgICAgICAgICAgIC8qIHRwX3NpemUgKi8KQEAgLTI4LDI5ICsyOCw0OCBAQAogfTsKIAogCitQeU9iamVjdCoKK1B5TW9kdWxlRGVmX0luaXQoc3RydWN0IFB5TW9kdWxlRGVmKiBkZWYpCit7CisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlNb2R1bGVEZWZfVHlwZSkgPCAwKQorICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGRlZi0+bV9iYXNlLm1faW5kZXggPT0gMCkgeworICAgICAgICBtYXhfbW9kdWxlX251bWJlcisrOworICAgICAgICBQeV9SRUZDTlQoZGVmKSA9IDE7CisgICAgICAgIFB5X1RZUEUoZGVmKSA9ICZQeU1vZHVsZURlZl9UeXBlOworICAgICAgICBkZWYtPm1fYmFzZS5tX2luZGV4ID0gbWF4X21vZHVsZV9udW1iZXI7CisgICAgfQorICAgIHJldHVybiAoUHlPYmplY3QqKWRlZjsKK30KKwogc3RhdGljIGludAogbW9kdWxlX2luaXRfZGljdChQeU1vZHVsZU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbWRfZGljdCwKICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpkb2MpCiB7CisgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOworICAgIF9QeV9JREVOVElGSUVSKF9fZG9jX18pOworICAgIF9QeV9JREVOVElGSUVSKF9fcGFja2FnZV9fKTsKKyAgICBfUHlfSURFTlRJRklFUihfX2xvYWRlcl9fKTsKKyAgICBfUHlfSURFTlRJRklFUihfX3NwZWNfXyk7CisKICAgICBpZiAobWRfZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKGRvYyA9PSBOVUxMKQogICAgICAgICBkb2MgPSBQeV9Ob25lOwogCi0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX25hbWVfXyIsIG5hbWUpICE9IDApCisgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKG1kX2RpY3QsICZQeUlkX19fbmFtZV9fLCBuYW1lKSAhPSAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX2RvY19fIiwgZG9jKSAhPSAwKQorICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChtZF9kaWN0LCAmUHlJZF9fX2RvY19fLCBkb2MpICE9IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fcGFja2FnZV9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQobWRfZGljdCwgJlB5SWRfX19wYWNrYWdlX18sIFB5X05vbmUpICE9IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fbG9hZGVyX18iLCBQeV9Ob25lKSAhPSAwKQorICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChtZF9kaWN0LCAmUHlJZF9fX2xvYWRlcl9fLCBQeV9Ob25lKSAhPSAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3NwZWNfXyIsIFB5X05vbmUpICE9IDApCisgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKG1kX2RpY3QsICZQeUlkX19fc3BlY19fLCBQeV9Ob25lKSAhPSAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KG5hbWUpKSB7CiAgICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKLSAgICAgICAgUHlfWERFQ1JFRihtb2QtPm1kX25hbWUpOwotICAgICAgICBtb2QtPm1kX25hbWUgPSBuYW1lOworICAgICAgICBQeV9YU0VUUkVGKG1vZC0+bWRfbmFtZSwgbmFtZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC05MSwyNiArMTEwLDEzIEBACiAgICAgcmV0dXJuIG1vZHVsZTsKIH0KIAotCi1QeU9iamVjdCAqCi1QeU1vZHVsZV9DcmVhdGUyKHN0cnVjdCBQeU1vZHVsZURlZiogbW9kdWxlLCBpbnQgbW9kdWxlX2FwaV92ZXJzaW9uKQorLyogQ2hlY2sgQVBJL0FCSSB2ZXJzaW9uCisgKiBJc3N1ZXMgYSB3YXJuaW5nIG9uIG1pc21hdGNoLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBmYXRhbC4KKyAqIFJldHVybnMgMCBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkLgorICovCitzdGF0aWMgaW50CitjaGVja19hcGlfdmVyc2lvbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kdWxlX2FwaV92ZXJzaW9uKQogewotICAgIFB5T2JqZWN0ICpkLCAqdiwgKm47Ci0gICAgUHlNZXRob2REZWYgKm1sOwotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgUHlNb2R1bGVPYmplY3QgKm07Ci0gICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnA7Ci0gICAgaWYgKGludGVycC0+bW9kdWxlcyA9PSBOVUxMKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJQeXRob24gaW1wb3J0IG1hY2hpbmVyeSBub3QgaW5pdGlhbGl6ZWQiKTsKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZtb2R1bGVkZWZfdHlwZSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobW9kdWxlLT5tX2Jhc2UubV9pbmRleCA9PSAwKSB7Ci0gICAgICAgIG1heF9tb2R1bGVfbnVtYmVyKys7Ci0gICAgICAgIFB5X1JFRkNOVChtb2R1bGUpID0gMTsKLSAgICAgICAgUHlfVFlQRShtb2R1bGUpID0gJm1vZHVsZWRlZl90eXBlOwotICAgICAgICBtb2R1bGUtPm1fYmFzZS5tX2luZGV4ID0gbWF4X21vZHVsZV9udW1iZXI7Ci0gICAgfQotICAgIG5hbWUgPSBtb2R1bGUtPm1fbmFtZTsKICAgICBpZiAobW9kdWxlX2FwaV92ZXJzaW9uICE9IFBZVEhPTl9BUElfVkVSU0lPTiAmJiBtb2R1bGVfYXBpX3ZlcnNpb24gIT0gUFlUSE9OX0FCSV9WRVJTSU9OKSB7CiAgICAgICAgIGludCBlcnI7CiAgICAgICAgIGVyciA9IFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfUnVudGltZVdhcm5pbmcsIDEsCkBAIC0xMTksNyArMTI1LDMwIEBACiAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICBQWVRIT05fQVBJX1ZFUlNJT04sIG5hbWUsIG1vZHVsZV9hcGlfdmVyc2lvbik7CiAgICAgICAgIGlmIChlcnIpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworUHlPYmplY3QgKgorUHlNb2R1bGVfQ3JlYXRlMihzdHJ1Y3QgUHlNb2R1bGVEZWYqIG1vZHVsZSwgaW50IG1vZHVsZV9hcGlfdmVyc2lvbikKK3sKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIFB5TW9kdWxlT2JqZWN0ICptOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HZXQoKS0+aW50ZXJwOworICAgIGlmIChpbnRlcnAtPm1vZHVsZXMgPT0gTlVMTCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHl0aG9uIGltcG9ydCBtYWNoaW5lcnkgbm90IGluaXRpYWxpemVkIik7CisgICAgaWYgKCFQeU1vZHVsZURlZl9Jbml0KG1vZHVsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG5hbWUgPSBtb2R1bGUtPm1fbmFtZTsKKyAgICBpZiAoIWNoZWNrX2FwaV92ZXJzaW9uKG5hbWUsIG1vZHVsZV9hcGlfdmVyc2lvbikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChtb2R1bGUtPm1fc2xvdHMpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAibW9kdWxlICVzOiBQeU1vZHVsZV9DcmVhdGUgaXMgaW5jb21wYXRpYmxlIHdpdGggbV9zbG90cyIsIG5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogTWFrZSBzdXJlIG5hbWUgaXMgZnVsbHkgcXVhbGlmaWVkLgogCkBAIC0xNTAsNTIgKzE3OSwyNjEgQEAKICAgICAgICAgbWVtc2V0KG0tPm1kX3N0YXRlLCAwLCBtb2R1bGUtPm1fc2l6ZSk7CiAgICAgfQogCi0gICAgZCA9IFB5TW9kdWxlX0dldERpY3QoKFB5T2JqZWN0KiltKTsKICAgICBpZiAobW9kdWxlLT5tX21ldGhvZHMgIT0gTlVMTCkgewotICAgICAgICBuID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobmFtZSk7Ci0gICAgICAgIGlmIChuID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5TW9kdWxlX0FkZEZ1bmN0aW9ucygoUHlPYmplY3QgKikgbSwgbW9kdWxlLT5tX21ldGhvZHMpICE9IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGZvciAobWwgPSBtb2R1bGUtPm1fbWV0aG9kczsgbWwtPm1sX25hbWUgIT0gTlVMTDsgbWwrKykgewotICAgICAgICAgICAgaWYgKChtbC0+bWxfZmxhZ3MgJiBNRVRIX0NMQVNTKSB8fAotICAgICAgICAgICAgICAgIChtbC0+bWxfZmxhZ3MgJiBNRVRIX1NUQVRJQykpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZSBmdW5jdGlvbnMgY2Fubm90IHNldCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBNRVRIX0NMQVNTIG9yIE1FVEhfU1RBVElDIik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG4pOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHYgPSBQeUNGdW5jdGlvbl9OZXdFeChtbCwgKFB5T2JqZWN0KiltLCBuKTsKLSAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG0pOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIG1sLT5tbF9uYW1lLCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKG4pOwogICAgIH0KICAgICBpZiAobW9kdWxlLT5tX2RvYyAhPSBOVUxMKSB7Ci0gICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGUtPm1fZG9jKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCB8fCBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19kb2NfXyIsIHYpICE9IDApIHsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodik7CisgICAgICAgIGlmIChQeU1vZHVsZV9TZXREb2NTdHJpbmcoKFB5T2JqZWN0ICopIG0sIG1vZHVsZS0+bV9kb2MpICE9IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICB9CiAgICAgbS0+bWRfZGVmID0gbW9kdWxlOwogICAgIHJldHVybiAoUHlPYmplY3QqKW07CiB9CiAKK1B5T2JqZWN0ICoKK1B5TW9kdWxlX0Zyb21EZWZBbmRTcGVjMihzdHJ1Y3QgUHlNb2R1bGVEZWYqIGRlZiwgUHlPYmplY3QgKnNwZWMsIGludCBtb2R1bGVfYXBpX3ZlcnNpb24pCit7CisgICAgUHlNb2R1bGVEZWZfU2xvdCogY3VyX3Nsb3Q7CisgICAgUHlPYmplY3QgKigqY3JlYXRlKShQeU9iamVjdCAqLCBQeU1vZHVsZURlZiopID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZW9iajsKKyAgICBQeU9iamVjdCAqbSA9IE5VTEw7CisgICAgaW50IGhhc19leGVjdXRpb25fc2xvdHMgPSAwOworICAgIGNoYXIgKm5hbWU7CisgICAgaW50IHJldDsKKworICAgIFB5TW9kdWxlRGVmX0luaXQoZGVmKTsKKworICAgIG5hbWVvYmogPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNwZWMsICJuYW1lIik7CisgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmFtZSA9IFB5VW5pY29kZV9Bc1VURjgobmFtZW9iaik7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmICghY2hlY2tfYXBpX3ZlcnNpb24obmFtZSwgbW9kdWxlX2FwaV92ZXJzaW9uKSkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChkZWYtPm1fc2l6ZSA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAibW9kdWxlICVzOiBtX3NpemUgbWF5IG5vdCBiZSBuZWdhdGl2ZSBmb3IgbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24iLAorICAgICAgICAgICAgbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgZm9yIChjdXJfc2xvdCA9IGRlZi0+bV9zbG90czsgY3VyX3Nsb3QgJiYgY3VyX3Nsb3QtPnNsb3Q7IGN1cl9zbG90KyspIHsKKyAgICAgICAgaWYgKGN1cl9zbG90LT5zbG90ID09IFB5X21vZF9jcmVhdGUpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGUpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAibW9kdWxlICVzIGhhcyBtdWx0aXBsZSBjcmVhdGUgc2xvdHMiLAorICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3JlYXRlID0gY3VyX3Nsb3QtPnZhbHVlOworICAgICAgICB9IGVsc2UgaWYgKGN1cl9zbG90LT5zbG90IDwgMCB8fCBjdXJfc2xvdC0+c2xvdCA+IF9QeV9tb2RfTEFTVF9TTE9UKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgIm1vZHVsZSAlcyB1c2VzIHVua25vd24gc2xvdCBJRCAlaSIsCisgICAgICAgICAgICAgICAgbmFtZSwgY3VyX3Nsb3QtPnNsb3QpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhhc19leGVjdXRpb25fc2xvdHMgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNyZWF0ZSkgeworICAgICAgICBtID0gY3JlYXRlKHNwZWMsIGRlZik7CisgICAgICAgIGlmIChtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJjcmVhdGlvbiBvZiBtb2R1bGUgJXMgZmFpbGVkIHdpdGhvdXQgc2V0dGluZyBhbiBleGNlcHRpb24iLAorICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRpb24gb2YgbW9kdWxlICVzIHJhaXNlZCB1bnJlcG9ydGVkIGV4Y2VwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG0gPSBQeU1vZHVsZV9OZXcobmFtZSk7CisgICAgICAgIGlmIChtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoUHlNb2R1bGVfQ2hlY2sobSkpIHsKKyAgICAgICAgKChQeU1vZHVsZU9iamVjdCopbSktPm1kX3N0YXRlID0gTlVMTDsKKyAgICAgICAgKChQeU1vZHVsZU9iamVjdCopbSktPm1kX2RlZiA9IGRlZjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZGVmLT5tX3NpemUgPiAwIHx8IGRlZi0+bV90cmF2ZXJzZSB8fCBkZWYtPm1fY2xlYXIgfHwgZGVmLT5tX2ZyZWUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAibW9kdWxlICVzIGlzIG5vdCBhIG1vZHVsZSBvYmplY3QsIGJ1dCByZXF1ZXN0cyBtb2R1bGUgc3RhdGUiLAorICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzX2V4ZWN1dGlvbl9zbG90cykgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICJtb2R1bGUgJXMgc3BlY2lmaWVzIGV4ZWN1dGlvbiBzbG90cywgYnV0IGRpZCBub3QgY3JlYXRlICIKKyAgICAgICAgICAgICAgICAgICAgImEgTW9kdWxlVHlwZSBpbnN0YW5jZSIsCisgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlZi0+bV9tZXRob2RzICE9IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gUHlNb2R1bGVfQWRkRnVuY3Rpb25zKG0sIGRlZi0+bV9tZXRob2RzKTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlZi0+bV9kb2MgIT0gTlVMTCkgeworICAgICAgICByZXQgPSBQeU1vZHVsZV9TZXREb2NTdHJpbmcobSwgZGVmLT5tX2RvYyk7CisgICAgICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFB5X0RFQ1JFRihuYW1lb2JqKTsKKyAgICByZXR1cm4gbTsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKG5hbWVvYmopOworICAgIFB5X1hERUNSRUYobSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludAorUHlNb2R1bGVfRXhlY0RlZihQeU9iamVjdCAqbW9kdWxlLCBQeU1vZHVsZURlZiAqZGVmKQoreworICAgIFB5TW9kdWxlRGVmX1Nsb3QgKmN1cl9zbG90OworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgaW50IHJldDsKKworICAgIG5hbWUgPSBQeU1vZHVsZV9HZXROYW1lKG1vZHVsZSk7CisgICAgaWYgKG5hbWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKFB5TW9kdWxlX0NoZWNrKG1vZHVsZSkgJiYgZGVmLT5tX3NpemUgPj0gMCkgeworICAgICAgICBQeU1vZHVsZU9iamVjdCAqbWQgPSAoUHlNb2R1bGVPYmplY3QqKW1vZHVsZTsKKyAgICAgICAgaWYgKG1kLT5tZF9zdGF0ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBBbHdheXMgc2V0IGEgc3RhdGUgcG9pbnRlcjsgdGhpcyBzZXJ2ZXMgYXMgYSBtYXJrZXIgdG8gc2tpcAorICAgICAgICAgICAgICogbXVsdGlwbGUgaW5pdGlhbGl6YXRpb24gKGltcG9ydGxpYi5yZWxvYWQoKSBpcyBuby1vcCkgKi8KKyAgICAgICAgICAgIG1kLT5tZF9zdGF0ZSA9IFB5TWVtX01BTExPQyhkZWYtPm1fc2l6ZSk7CisgICAgICAgICAgICBpZiAoIW1kLT5tZF9zdGF0ZSkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtc2V0KG1kLT5tZF9zdGF0ZSwgMCwgZGVmLT5tX3NpemUpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlZi0+bV9zbG90cyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGZvciAoY3VyX3Nsb3QgPSBkZWYtPm1fc2xvdHM7IGN1cl9zbG90ICYmIGN1cl9zbG90LT5zbG90OyBjdXJfc2xvdCsrKSB7CisgICAgICAgIHN3aXRjaCAoY3VyX3Nsb3QtPnNsb3QpIHsKKyAgICAgICAgICAgIGNhc2UgUHlfbW9kX2NyZWF0ZToKKyAgICAgICAgICAgICAgICAvKiBoYW5kbGVkIGluIFB5TW9kdWxlX0NyZWF0ZUZyb21TbG90cyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQeV9tb2RfZXhlYzoKKyAgICAgICAgICAgICAgICByZXQgPSAoKGludCAoKikoUHlPYmplY3QgKikpY3VyX3Nsb3QtPnZhbHVlKShtb2R1bGUpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhlY3V0aW9uIG9mIG1vZHVsZSAlcyBmYWlsZWQgd2l0aG91dCBzZXR0aW5nIGFuIGV4Y2VwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGVjdXRpb24gb2YgbW9kdWxlICVzIHJhaXNlZCB1bnJlcG9ydGVkIGV4Y2VwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIm1vZHVsZSAlcyBpbml0aWFsaXplZCB3aXRoIHVua25vd24gc2xvdCAlaSIsCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIGN1cl9zbG90LT5zbG90KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorUHlNb2R1bGVfQWRkRnVuY3Rpb25zKFB5T2JqZWN0ICptLCBQeU1ldGhvZERlZiAqZnVuY3Rpb25zKQoreworICAgIFB5T2JqZWN0ICpuYW1lLCAqZnVuYzsKKyAgICBQeU1ldGhvZERlZiAqZmRlZjsKKworICAgIG5hbWUgPSBQeU1vZHVsZV9HZXROYW1lT2JqZWN0KG0pOworICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAoZmRlZiA9IGZ1bmN0aW9uczsgZmRlZi0+bWxfbmFtZSAhPSBOVUxMOyBmZGVmKyspIHsKKyAgICAgICAgaWYgKChmZGVmLT5tbF9mbGFncyAmIE1FVEhfQ0xBU1MpIHx8CisgICAgICAgICAgICAoZmRlZi0+bWxfZmxhZ3MgJiBNRVRIX1NUQVRJQykpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2R1bGUgZnVuY3Rpb25zIGNhbm5vdCBzZXQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBNRVRIX0NMQVNTIG9yIE1FVEhfU1RBVElDIik7CisgICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KGZkZWYsIChQeU9iamVjdCopbSwgbmFtZSk7CisgICAgICAgIGlmIChmdW5jID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhtLCBmZGVmLT5tbF9uYW1lLCBmdW5jKSAhPSAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgIH0KKyAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorUHlNb2R1bGVfU2V0RG9jU3RyaW5nKFB5T2JqZWN0ICptLCBjb25zdCBjaGFyICpkb2MpCit7CisgICAgUHlPYmplY3QgKnY7CisgICAgX1B5X0lERU5USUZJRVIoX19kb2NfXyk7CisKKyAgICB2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZG9jKTsKKyAgICBpZiAodiA9PSBOVUxMIHx8IF9QeU9iamVjdF9TZXRBdHRySWQobSwgJlB5SWRfX19kb2NfXywgdikgIT0gMCkgeworICAgICAgICBQeV9YREVDUkVGKHYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFB5X0RFQ1JFRih2KTsKKyAgICByZXR1cm4gMDsKK30KIAogUHlPYmplY3QgKgogUHlNb2R1bGVfR2V0RGljdChQeU9iamVjdCAqbSkKQEAgLTIxNCw2ICs0NTIsNyBAQAogUHlPYmplY3QqCiBQeU1vZHVsZV9HZXROYW1lT2JqZWN0KFB5T2JqZWN0ICptKQogeworICAgIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKICAgICBQeU9iamVjdCAqZDsKICAgICBQeU9iamVjdCAqbmFtZTsKICAgICBpZiAoIVB5TW9kdWxlX0NoZWNrKG0pKSB7CkBAIC0yMjIsNyArNDYxLDcgQEAKICAgICB9CiAgICAgZCA9ICgoUHlNb2R1bGVPYmplY3QgKiltKS0+bWRfZGljdDsKICAgICBpZiAoZCA9PSBOVUxMIHx8Ci0gICAgICAgIChuYW1lID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZCwgIl9fbmFtZV9fIikpID09IE5VTEwgfHwKKyAgICAgICAgKG5hbWUgPSBfUHlEaWN0X0dldEl0ZW1JZChkLCAmUHlJZF9fX25hbWVfXykpID09IE5VTEwgfHwKICAgICAgICAgIVB5VW5pY29kZV9DaGVjayhuYW1lKSkKICAgICB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgIm5hbWVsZXNzIG1vZHVsZSIpOwpAQCAtMjQ1LDYgKzQ4NCw3IEBACiBQeU9iamVjdCoKIFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KFB5T2JqZWN0ICptKQogeworICAgIF9QeV9JREVOVElGSUVSKF9fZmlsZV9fKTsKICAgICBQeU9iamVjdCAqZDsKICAgICBQeU9iamVjdCAqZmlsZW9iajsKICAgICBpZiAoIVB5TW9kdWxlX0NoZWNrKG0pKSB7CkBAIC0yNTMsNyArNDkzLDcgQEAKICAgICB9CiAgICAgZCA9ICgoUHlNb2R1bGVPYmplY3QgKiltKS0+bWRfZGljdDsKICAgICBpZiAoZCA9PSBOVUxMIHx8Ci0gICAgICAgIChmaWxlb2JqID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZCwgIl9fZmlsZV9fIikpID09IE5VTEwgfHwKKyAgICAgICAgKGZpbGVvYmogPSBfUHlEaWN0X0dldEl0ZW1JZChkLCAmUHlJZF9fX2ZpbGVfXykpID09IE5VTEwgfHwKICAgICAgICAgIVB5VW5pY29kZV9DaGVjayhmaWxlb2JqKSkKICAgICB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgIm1vZHVsZSBmaWxlbmFtZSBtaXNzaW5nIik7CkBAIC00MTEsNiArNjUxLDMxIEBACiAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QoaW50ZXJwLT5pbXBvcnRsaWIsICJfbW9kdWxlX3JlcHIiLCAiTyIsIG0pOwogfQogCitzdGF0aWMgUHlPYmplY3QqCittb2R1bGVfZ2V0YXR0cm8oUHlNb2R1bGVPYmplY3QgKm0sIFB5T2JqZWN0ICpuYW1lKQoreworICAgIFB5T2JqZWN0ICphdHRyLCAqbW9kX25hbWU7CisgICAgYXR0ciA9IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKChQeU9iamVjdCAqKW0sIG5hbWUpOworICAgIGlmIChhdHRyIHx8ICFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgcmV0dXJuIGF0dHI7CisgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBpZiAobS0+bWRfZGljdCkgeworICAgICAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CisgICAgICAgIG1vZF9uYW1lID0gX1B5RGljdF9HZXRJdGVtSWQobS0+bWRfZGljdCwgJlB5SWRfX19uYW1lX18pOworICAgICAgICBpZiAobW9kX25hbWUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb2R1bGUgJyVVJyBoYXMgbm8gYXR0cmlidXRlICclVSciLCBtb2RfbmFtZSwgbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgfQorICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAibW9kdWxlIGhhcyBubyBhdHRyaWJ1dGUgJyVVJyIsIG5hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW50CiBtb2R1bGVfdHJhdmVyc2UoUHlNb2R1bGVPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewpAQCAtNDY0LDcgKzcyOSw2IEBACiAgICAgezB9CiB9OwogCi0KIFB5RG9jX1NUUlZBUihtb2R1bGVfZG9jLAogIm1vZHVsZShuYW1lWywgZG9jXSlcblwKIFxuXApAQCAtNDg4LDcgKzc1Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KLSAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgKGdldGF0dHJvZnVuYyltb2R1bGVfZ2V0YXR0cm8sICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8CmRpZmYgLS1naXQgYS9PYmplY3RzL29iamVjdC5jIGIvT2JqZWN0cy9vYmplY3QuYwppbmRleCAzMDdlM2FjLi44MDI0ODg5IDEwMDY0NAotLS0gYS9PYmplY3RzL29iamVjdC5jCisrKyBiL09iamVjdHMvb2JqZWN0LmMKQEAgLTMzLDYgKzMzLDIyIEBACiAgICAgICAgIHRvdGFsIC09IG8tPm9iX3JlZmNudDsKICAgICByZXR1cm4gdG90YWw7CiB9CisKK3ZvaWQKK19QeURlYnVnX1ByaW50VG90YWxSZWZzKHZvaWQpIHsKKyAgICBQeU9iamVjdCAqeG9wdGlvbnMsICp2YWx1ZTsKKyAgICBfUHlfSURFTlRJRklFUihzaG93cmVmY291bnQpOworCisgICAgeG9wdGlvbnMgPSBQeVN5c19HZXRYT3B0aW9ucygpOworICAgIGlmICh4b3B0aW9ucyA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgdmFsdWUgPSBfUHlEaWN0X0dldEl0ZW1JZCh4b3B0aW9ucywgJlB5SWRfc2hvd3JlZmNvdW50KTsKKyAgICBpZiAodmFsdWUgPT0gUHlfVHJ1ZSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIlslIiBQWV9GT1JNQVRfU0laRV9UICJkIHJlZnMsICIKKyAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBibG9ja3NdXG4iLAorICAgICAgICAgICAgICAgIF9QeV9HZXRSZWZUb3RhbCgpLCBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKCkpOworfQogI2VuZGlmIC8qIFB5X1JFRl9ERUJVRyAqLwogCiAvKiBPYmplY3QgYWxsb2NhdGlvbiByb3V0aW5lcyB1c2VkIGJ5IE5FV09CSiBhbmQgTkVXVkFST0JKIG1hY3Jvcy4KQEAgLTE1NDMsNiArMTU1OSw5IEBACiB2b2lkCiBfUHlfUmVhZHlUeXBlcyh2b2lkKQogeworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5QmFzZU9iamVjdF9UeXBlKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgb2JqZWN0IHR5cGUiKTsKKwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5VHlwZV9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgdHlwZSB0eXBlIik7CiAKQEAgLTE1NTUsNiArMTU3NCw5IEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5V2Vha3JlZl9Qcm94eVR5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSB3ZWFrcmVmIHByb3h5IHR5cGUiKTsKIAorICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5TG9uZ19UeXBlKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgaW50IHR5cGUiKTsKKwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Qm9vbF9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgYm9vbCB0eXBlIik7CiAKQEAgLTE1NzksMTUgKzE2MDEsMjcgQEAKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVN1cGVyX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBzdXBlciB0eXBlIik7CiAKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUJhc2VPYmplY3RfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG9iamVjdCB0eXBlIik7Ci0KICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVJhbmdlX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSByYW5nZSB0eXBlIik7CiAKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeURpY3RfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGRpY3QgdHlwZSIpOwogCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlPRGljdF9UeXBlKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgT3JkZXJlZERpY3QgdHlwZSIpOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlPRGljdEtleXNfVHlwZSkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG9kaWN0X2tleXMgdHlwZSIpOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlPRGljdEl0ZW1zX1R5cGUpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBvZGljdF9pdGVtcyB0eXBlIik7CisKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeU9EaWN0VmFsdWVzX1R5cGUpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBvZGljdF92YWx1ZXMgdHlwZSIpOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlPRGljdEl0ZXJfVHlwZSkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG9kaWN0X2tleWl0ZXJhdG9yIHR5cGUiKTsKKwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5U2V0X1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBzZXQgdHlwZSIpOwogCkBAIC0xNjA2LDkgKzE2NDAsNiBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RmxvYXRfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGZsb2F0IHR5cGUiKTsKIAotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5TG9uZ19UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgaW50IHR5cGUiKTsKLQogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RnJvemVuU2V0X1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBmcm96ZW5zZXQgdHlwZSIpOwogCkBAIC0xNjk1LDYgKzE3MjYsMTIgQEAKIAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5U2VxSXRlcl9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgc2VxdWVuY2UgaXRlcmF0b3IgdHlwZSIpOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDb3JvX1R5cGUpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBjb3JvdXRpbmUgdHlwZSIpOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5Q29yb1dyYXBwZXJfVHlwZSkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGNvcm91dGluZSB3cmFwcGVyIHR5cGUiKTsKIH0KIAogCkBAIC0xODA5LDkgKzE4NDYsNiBAQAogCiAjZW5kaWYKIAotLyogSGFjayB0byBmb3JjZSBsb2FkaW5nIG9mIHB5Y2Fwc3VsZS5vICovCi1QeVR5cGVPYmplY3QgKl9QeUNhcHN1bGVfaGFjayA9ICZQeUNhcHN1bGVfVHlwZTsKLQogCiAvKiBIYWNrIHRvIGZvcmNlIGxvYWRpbmcgb2YgYWJzdHJhY3QubyAqLwogUHlfc3NpemVfdCAoKl9QeV9hYnN0cmFjdF9oYWNrKShQeU9iamVjdCAqKSA9IFB5T2JqZWN0X1NpemU7CkBAIC0xODMxLDcgKzE4NjUsNyBAQAogCiAvKiBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIGNvbnRyb2wgaW5maW5pdGUgcmVjdXJzaW9uIGluIHJlcHIsIHN0ciwgcHJpbnQsCiAgICBldGMuICBDb250YWluZXIgb2JqZWN0cyB0aGF0IG1heSByZWN1cnNpdmVseSBjb250YWluIHRoZW1zZWx2ZXMsCi0gICBlLmcuIGJ1aWx0aW4gZGljdGlvbmFyaWVzIGFuZCBsaXN0cywgc2hvdWxkIHVzZWQgUHlfUmVwckVudGVyKCkgYW5kCisgICBlLmcuIGJ1aWx0aW4gZGljdGlvbmFyaWVzIGFuZCBsaXN0cywgc2hvdWxkIHVzZSBQeV9SZXByRW50ZXIoKSBhbmQKICAgIFB5X1JlcHJMZWF2ZSgpIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbi4KIAogICAgUHlfUmVwckVudGVyKCkgcmV0dXJucyAwIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGNhbGxlZCBmb3IgYSBwYXJ0aWN1bGFyCmRpZmYgLS1naXQgYS9PYmplY3RzL29ibWFsbG9jLmMgYi9PYmplY3RzL29ibWFsbG9jLmMKaW5kZXggM2MzMzI1NS4uN2NjODg5ZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYm1hbGxvYy5jCisrKyBiL09iamVjdHMvb2JtYWxsb2MuYwpAQCAtNSw2ICs1LDcgQEAKICNpZmRlZiBQWU1BTExPQ19ERUJVRyAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgUFlNQUxMT0NfREVCVUcgKi8KIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KIHN0YXRpYyB2b2lkKiBfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCogX1B5TWVtX0RlYnVnQ2FsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKTsKIHN0YXRpYyB2b2lkIF9QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKTsKIHN0YXRpYyB2b2lkKiBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiAKQEAgLTQzLDYgKzQ0LDcgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogc3RhdGljIHZvaWQqIF9QeU9iamVjdF9NYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCogX1B5T2JqZWN0X0NhbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSk7CiBzdGF0aWMgdm9pZCBfUHlPYmplY3RfRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApOwogc3RhdGljIHZvaWQqIF9QeU9iamVjdF9SZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiAjZW5kaWYKQEAgLTUxLDcgKzUzLDcgQEAKIHN0YXRpYyB2b2lkICoKIF9QeU1lbV9SYXdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICAvKiBQeU1lbV9NYWxsb2MoMCkgbWVhbnMgbWFsbG9jKDEpLiBTb21lIHN5c3RlbXMgd291bGQgcmV0dXJuIE5VTEwKKyAgICAvKiBQeU1lbV9SYXdNYWxsb2MoMCkgbWVhbnMgbWFsbG9jKDEpLiBTb21lIHN5c3RlbXMgd291bGQgcmV0dXJuIE5VTEwKICAgICAgICBmb3IgbWFsbG9jKDApLCB3aGljaCB3b3VsZCBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiBTb21lIHBsYXRmb3JtcyB3b3VsZAogICAgICAgIHJldHVybiBhIHBvaW50ZXIgd2l0aCBubyBtZW1vcnkgYmVoaW5kIGl0LCB3aGljaCB3b3VsZCBicmVhayBweW1hbGxvYy4KICAgICAgICBUbyBzb2x2ZSB0aGVzZSBwcm9ibGVtcywgYWxsb2NhdGUgYW4gZXh0cmEgYnl0ZS4gKi8KQEAgLTYxLDYgKzYzLDIwIEBACiB9CiAKIHN0YXRpYyB2b2lkICoKK19QeU1lbV9SYXdDYWxsb2Modm9pZCAqY3R4LCBzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpCit7CisgICAgLyogUHlNZW1fUmF3Q2FsbG9jKDAsIDApIG1lYW5zIGNhbGxvYygxLCAxKS4gU29tZSBzeXN0ZW1zIHdvdWxkIHJldHVybiBOVUxMCisgICAgICAgZm9yIGNhbGxvYygwLCAwKSwgd2hpY2ggd291bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gU29tZSBwbGF0Zm9ybXMKKyAgICAgICB3b3VsZCByZXR1cm4gYSBwb2ludGVyIHdpdGggbm8gbWVtb3J5IGJlaGluZCBpdCwgd2hpY2ggd291bGQgYnJlYWsKKyAgICAgICBweW1hbGxvYy4gIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLworICAgIGlmIChuZWxlbSA9PSAwIHx8IGVsc2l6ZSA9PSAwKSB7CisgICAgICAgIG5lbGVtID0gMTsKKyAgICAgICAgZWxzaXplID0gMTsKKyAgICB9CisgICAgcmV0dXJuIGNhbGxvYyhuZWxlbSwgZWxzaXplKTsKK30KKworc3RhdGljIHZvaWQgKgogX1B5TWVtX1Jhd1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQogewogICAgIGlmIChzaXplID09IDApCkBAIC0xMjMsOSArMTM5LDkgQEAKICNlbmRpZgogCiAKLSNkZWZpbmUgUFlSQVdfRlVOQ1MgX1B5TWVtX1Jhd01hbGxvYywgX1B5TWVtX1Jhd1JlYWxsb2MsIF9QeU1lbV9SYXdGcmVlCisjZGVmaW5lIFBZUkFXX0ZVTkNTIF9QeU1lbV9SYXdNYWxsb2MsIF9QeU1lbV9SYXdDYWxsb2MsIF9QeU1lbV9SYXdSZWFsbG9jLCBfUHlNZW1fUmF3RnJlZQogI2lmZGVmIFdJVEhfUFlNQUxMT0MKLSMgIGRlZmluZSBQWU9CSl9GVU5DUyBfUHlPYmplY3RfTWFsbG9jLCBfUHlPYmplY3RfUmVhbGxvYywgX1B5T2JqZWN0X0ZyZWUKKyMgIGRlZmluZSBQWU9CSl9GVU5DUyBfUHlPYmplY3RfTWFsbG9jLCBfUHlPYmplY3RfQ2FsbG9jLCBfUHlPYmplY3RfUmVhbGxvYywgX1B5T2JqZWN0X0ZyZWUKICNlbHNlCiAjICBkZWZpbmUgUFlPQkpfRlVOQ1MgUFlSQVdfRlVOQ1MKICNlbmRpZgpAQCAtMTM1LDcgKzE1MSw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyogV2UgdGFnIGVhY2ggYmxvY2sgd2l0aCBhbiBBUEkgSUQgaW4gb3JkZXIgdG8gdGFnIEFQSSB2aW9sYXRpb25zICovCiAgICAgY2hhciBhcGlfaWQ7Ci0gICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisgICAgUHlNZW1BbGxvY2F0b3JFeCBhbGxvYzsKIH0gZGVidWdfYWxsb2NfYXBpX3Q7CiBzdGF0aWMgc3RydWN0IHsKICAgICBkZWJ1Z19hbGxvY19hcGlfdCByYXc7CkBAIC0xNDcsMTAgKzE2MywxMCBAQAogICAgIHsnbycsIHtOVUxMLCBQWU9CSl9GVU5DU319CiAgICAgfTsKIAotI2RlZmluZSBQWURCR19GVU5DUyBfUHlNZW1fRGVidWdNYWxsb2MsIF9QeU1lbV9EZWJ1Z1JlYWxsb2MsIF9QeU1lbV9EZWJ1Z0ZyZWUKKyNkZWZpbmUgUFlEQkdfRlVOQ1MgX1B5TWVtX0RlYnVnTWFsbG9jLCBfUHlNZW1fRGVidWdDYWxsb2MsIF9QeU1lbV9EZWJ1Z1JlYWxsb2MsIF9QeU1lbV9EZWJ1Z0ZyZWUKICNlbmRpZgogCi1zdGF0aWMgUHlNZW1BbGxvY2F0b3IgX1B5TWVtX1JhdyA9IHsKK3N0YXRpYyBQeU1lbUFsbG9jYXRvckV4IF9QeU1lbV9SYXcgPSB7CiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKICAgICAmX1B5TWVtX0RlYnVnLnJhdywgUFlEQkdfRlVOQ1MKICNlbHNlCkBAIC0xNTgsNyArMTc0LDcgQEAKICNlbmRpZgogICAgIH07CiAKLXN0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlNZW0gPSB7CitzdGF0aWMgUHlNZW1BbGxvY2F0b3JFeCBfUHlNZW0gPSB7CiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKICAgICAmX1B5TWVtX0RlYnVnLm1lbSwgUFlEQkdfRlVOQ1MKICNlbHNlCkBAIC0xNjYsNyArMTgyLDcgQEAKICNlbmRpZgogICAgIH07CiAKLXN0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlPYmplY3QgPSB7CitzdGF0aWMgUHlNZW1BbGxvY2F0b3JFeCBfUHlPYmplY3QgPSB7CiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKICAgICAmX1B5TWVtX0RlYnVnLm9iaiwgUFlEQkdfRlVOQ1MKICNlbHNlCkBAIC0xOTMsOSArMjA5LDEwIEBACiBQeU1lbV9TZXR1cERlYnVnSG9va3Modm9pZCkKIHsKICNpZmRlZiBQWU1BTExPQ19ERUJVRwotICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIFB5TWVtQWxsb2NhdG9yRXggYWxsb2M7CiAKICAgICBhbGxvYy5tYWxsb2MgPSBfUHlNZW1fRGVidWdNYWxsb2M7CisgICAgYWxsb2MuY2FsbG9jID0gX1B5TWVtX0RlYnVnQ2FsbG9jOwogICAgIGFsbG9jLnJlYWxsb2MgPSBfUHlNZW1fRGVidWdSZWFsbG9jOwogICAgIGFsbG9jLmZyZWUgPSBfUHlNZW1fRGVidWdGcmVlOwogCkBAIC0yMjAsNyArMjM3LDcgQEAKIH0KIAogdm9pZAotUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK1B5TWVtX0dldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yRXggKmFsbG9jYXRvcikKIHsKICAgICBzd2l0Y2goZG9tYWluKQogICAgIHsKQEAgLTIyOCwxNiArMjQ1LDE3IEBACiAgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiAqYWxsb2NhdG9yID0gX1B5TWVtOyBicmVhazsKICAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6ICphbGxvY2F0b3IgPSBfUHlPYmplY3Q7IGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIHVua25vd24gZG9tYWluICovCisgICAgICAgIC8qIHVua25vd24gZG9tYWluOiBzZXQgYWxsIGF0dHJpYnV0ZXMgdG8gTlVMTCAqLwogICAgICAgICBhbGxvY2F0b3ItPmN0eCA9IE5VTEw7CiAgICAgICAgIGFsbG9jYXRvci0+bWFsbG9jID0gTlVMTDsKKyAgICAgICAgYWxsb2NhdG9yLT5jYWxsb2MgPSBOVUxMOwogICAgICAgICBhbGxvY2F0b3ItPnJlYWxsb2MgPSBOVUxMOwogICAgICAgICBhbGxvY2F0b3ItPmZyZWUgPSBOVUxMOwogICAgIH0KIH0KIAogdm9pZAotUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK1B5TWVtX1NldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yRXggKmFsbG9jYXRvcikKIHsKICAgICBzd2l0Y2goZG9tYWluKQogICAgIHsKQEAgLTI3MiwxMCArMjkwLDE4IEBACiAgICAgICovCiAgICAgaWYgKHNpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQogICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIHJldHVybiBfUHlNZW1fUmF3Lm1hbGxvYyhfUHlNZW1fUmF3LmN0eCwgc2l6ZSk7CiB9CiAKK3ZvaWQgKgorUHlNZW1fUmF3Q2FsbG9jKHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoZWxzaXplICE9IDAgJiYgbmVsZW0gPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC8gZWxzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5jYWxsb2MoX1B5TWVtX1Jhdy5jdHgsIG5lbGVtLCBlbHNpemUpOworfQorCiB2b2lkKgogUHlNZW1fUmF3UmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKIHsKQEAgLTMwMCw2ICszMjYsMTUgQEAKIH0KIAogdm9pZCAqCitQeU1lbV9DYWxsb2Moc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChlbHNpemUgIT0gMCAmJiBuZWxlbSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBlbHNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlNZW0uY2FsbG9jKF9QeU1lbS5jdHgsIG5lbGVtLCBlbHNpemUpOworfQorCit2b2lkICoKIFB5TWVtX1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCiB7CiAgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCkBAIC0zNTIsNiArMzg3LDE1IEBACiB9CiAKIHZvaWQgKgorUHlPYmplY3RfQ2FsbG9jKHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoZWxzaXplICE9IDAgJiYgbmVsZW0gPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC8gZWxzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5T2JqZWN0LmNhbGxvYyhfUHlPYmplY3QuY3R4LCBuZWxlbSwgZWxzaXplKTsKK30KKwordm9pZCAqCiBQeU9iamVjdF9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQogewogICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLwpAQCAtMTEyMiw4ICsxMTY2LDkgQEAKICAqLwogCiBzdGF0aWMgdm9pZCAqCi1fUHlPYmplY3RfTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5ieXRlcykKK19QeU9iamVjdF9BbGxvYyhpbnQgdXNlX2NhbGxvYywgdm9pZCAqY3R4LCBzaXplX3QgbmVsZW0sIHNpemVfdCBlbHNpemUpCiB7CisgICAgc2l6ZV90IG5ieXRlczsKICAgICBibG9jayAqYnA7CiAgICAgcG9vbHAgcG9vbDsKICAgICBwb29scCBuZXh0OwpAQCAtMTEzMSw2ICsxMTc2LDkgQEAKIAogICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MrKzsKIAorICAgIGFzc2VydChuZWxlbSA8PSBQWV9TU0laRV9UX01BWCAvIGVsc2l6ZSk7CisgICAgbmJ5dGVzID0gbmVsZW0gKiBlbHNpemU7CisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgaWYgKFVOTElLRUxZKHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEpKQogICAgICAgICBydW5uaW5nX29uX3ZhbGdyaW5kID0gUlVOTklOR19PTl9WQUxHUklORDsKQEAgLTExMzgsOSArMTE4Niw5IEBACiAgICAgICAgIGdvdG8gcmVkaXJlY3Q7CiAjZW5kaWYKIAotICAgIC8qCi0gICAgICogVGhpcyBpbXBsaWNpdGx5IHJlZGlyZWN0cyBtYWxsb2MoMCkuCi0gICAgICovCisgICAgaWYgKG5lbGVtID09IDAgfHwgZWxzaXplID09IDApCisgICAgICAgIGdvdG8gcmVkaXJlY3Q7CisKICAgICBpZiAoKG5ieXRlcyAtIDEpIDwgU01BTExfUkVRVUVTVF9USFJFU0hPTEQpIHsKICAgICAgICAgTE9DSygpOwogICAgICAgICAvKgpAQCAtMTE1OCw2ICsxMjA2LDggQEAKICAgICAgICAgICAgIGFzc2VydChicCAhPSBOVUxMKTsKICAgICAgICAgICAgIGlmICgocG9vbC0+ZnJlZWJsb2NrID0gKihibG9jayAqKilicCkgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFVOTE9DSygpOworICAgICAgICAgICAgICAgIGlmICh1c2VfY2FsbG9jKQorICAgICAgICAgICAgICAgICAgICBtZW1zZXQoYnAsIDAsIG5ieXRlcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkICopYnA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKgpAQCAtMTE3MCw2ICsxMjIwLDggQEAKICAgICAgICAgICAgICAgICBwb29sLT5uZXh0b2Zmc2V0ICs9IElOREVYMlNJWkUoc2l6ZSk7CiAgICAgICAgICAgICAgICAgKihibG9jayAqKikocG9vbC0+ZnJlZWJsb2NrKSA9IE5VTEw7CiAgICAgICAgICAgICAgICAgVU5MT0NLKCk7CisgICAgICAgICAgICAgICAgaWYgKHVzZV9jYWxsb2MpCisgICAgICAgICAgICAgICAgICAgIG1lbXNldChicCwgMCwgbmJ5dGVzKTsKICAgICAgICAgICAgICAgICByZXR1cm4gKHZvaWQgKilicDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIFBvb2wgaXMgZnVsbCwgdW5saW5rIGZyb20gdXNlZCBwb29scy4gKi8KQEAgLTExNzgsNiArMTIzMCw4IEBACiAgICAgICAgICAgICBuZXh0LT5wcmV2cG9vbCA9IHBvb2w7CiAgICAgICAgICAgICBwb29sLT5uZXh0cG9vbCA9IG5leHQ7CiAgICAgICAgICAgICBVTkxPQ0soKTsKKyAgICAgICAgICAgIGlmICh1c2VfY2FsbG9jKQorICAgICAgICAgICAgICAgIG1lbXNldChicCwgMCwgbmJ5dGVzKTsKICAgICAgICAgICAgIHJldHVybiAodm9pZCAqKWJwOwogICAgICAgICB9CiAKQEAgLTEyNTcsNiArMTMxMSw4IEBACiAgICAgICAgICAgICAgICAgYXNzZXJ0KGJwICE9IE5VTEwpOwogICAgICAgICAgICAgICAgIHBvb2wtPmZyZWVibG9jayA9ICooYmxvY2sgKiopYnA7CiAgICAgICAgICAgICAgICAgVU5MT0NLKCk7CisgICAgICAgICAgICAgICAgaWYgKHVzZV9jYWxsb2MpCisgICAgICAgICAgICAgICAgICAgIG1lbXNldChicCwgMCwgbmJ5dGVzKTsKICAgICAgICAgICAgICAgICByZXR1cm4gKHZvaWQgKilicDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qCkBAIC0xMjcyLDYgKzEzMjgsOCBAQAogICAgICAgICAgICAgcG9vbC0+ZnJlZWJsb2NrID0gYnAgKyBzaXplOwogICAgICAgICAgICAgKihibG9jayAqKikocG9vbC0+ZnJlZWJsb2NrKSA9IE5VTEw7CiAgICAgICAgICAgICBVTkxPQ0soKTsKKyAgICAgICAgICAgIGlmICh1c2VfY2FsbG9jKQorICAgICAgICAgICAgICAgIG1lbXNldChicCwgMCwgbmJ5dGVzKTsKICAgICAgICAgICAgIHJldHVybiAodm9pZCAqKWJwOwogICAgICAgICB9CiAKQEAgLTEyODEsNyArMTMzOSw3IEBACiAgICAgICAgIHBvb2wgPSAocG9vbHApdXNhYmxlX2FyZW5hcy0+cG9vbF9hZGRyZXNzOwogICAgICAgICBhc3NlcnQoKGJsb2NrKilwb29sIDw9IChibG9jayopdXNhYmxlX2FyZW5hcy0+YWRkcmVzcyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJFTkFfU0laRSAtIFBPT0xfU0laRSk7Ci0gICAgICAgIHBvb2wtPmFyZW5haW5kZXggPSB1c2FibGVfYXJlbmFzIC0gYXJlbmFzOworICAgICAgICBwb29sLT5hcmVuYWluZGV4ID0gKHVpbnQpKHVzYWJsZV9hcmVuYXMgLSBhcmVuYXMpOwogICAgICAgICBhc3NlcnQoJmFyZW5hc1twb29sLT5hcmVuYWluZGV4XSA9PSB1c2FibGVfYXJlbmFzKTsKICAgICAgICAgcG9vbC0+c3ppZHggPSBEVU1NWV9TSVpFX0lEWDsKICAgICAgICAgdXNhYmxlX2FyZW5hcy0+cG9vbF9hZGRyZXNzICs9IFBPT0xfU0laRTsKQEAgLTEzMTEsMTMgKzEzNjksMjkgQEAKICAgICAgKiBoYXMgYmVlbiByZWFjaGVkLgogICAgICAqLwogICAgIHsKLSAgICAgICAgdm9pZCAqcmVzdWx0ID0gUHlNZW1fUmF3TWFsbG9jKG5ieXRlcyk7CisgICAgICAgIHZvaWQgKnJlc3VsdDsKKyAgICAgICAgaWYgKHVzZV9jYWxsb2MpCisgICAgICAgICAgICByZXN1bHQgPSBQeU1lbV9SYXdDYWxsb2MobmVsZW0sIGVsc2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IFB5TWVtX1Jhd01hbGxvYyhuYnl0ZXMpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MtLTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9NYWxsb2Modm9pZCAqY3R4LCBzaXplX3QgbmJ5dGVzKQoreworICAgIHJldHVybiBfUHlPYmplY3RfQWxsb2MoMCwgY3R4LCAxLCBuYnl0ZXMpOworfQorCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQ2FsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKQoreworICAgIHJldHVybiBfUHlPYmplY3RfQWxsb2MoMSwgY3R4LCBuZWxlbSwgZWxzaXplKTsKK30KKwogLyogZnJlZSAqLwogCiBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKQEAgLTE1NjEsNyArMTYzNSw3IEBACiAjZW5kaWYKIAogICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBfUHlPYmplY3RfTWFsbG9jKGN0eCwgbmJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9BbGxvYygwLCBjdHgsIDEsIG5ieXRlcyk7CiAKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAgICAgLyogVHJlYXQgcnVubmluZ19vbl92YWxncmluZCA9PSAtMSB0aGUgc2FtZSBhcyAwICovCkBAIC0xNTg5LDcgKzE2NjMsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2l6ZSA9IG5ieXRlczsKICAgICAgICAgfQotICAgICAgICBicCA9IF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOworICAgICAgICBicCA9IF9QeU9iamVjdF9BbGxvYygwLCBjdHgsIDEsIG5ieXRlcyk7CiAgICAgICAgIGlmIChicCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBtZW1jcHkoYnAsIHAsIHNpemUpOwogICAgICAgICAgICAgX1B5T2JqZWN0X0ZyZWUoY3R4LCBwKTsKQEAgLTE3NDUsNyArMTgxOSw3IEBACiAqLwogCiBzdGF0aWMgdm9pZCAqCi1fUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3QgbmJ5dGVzKQorX1B5TWVtX0RlYnVnQWxsb2MoaW50IHVzZV9jYWxsb2MsIHZvaWQgKmN0eCwgc2l6ZV90IG5ieXRlcykKIHsKICAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OwogICAgIHVjaGFyICpwOyAgICAgICAgICAgLyogYmFzZSBhZGRyZXNzIG9mIG1hbGxvYydlZCBibG9jayAqLwpAQCAtMTc1OCw3ICsxODMyLDEwIEBACiAgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgUHlfc3NpemVfdCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHAgPSAodWNoYXIgKilhcGktPmFsbG9jLm1hbGxvYyhhcGktPmFsbG9jLmN0eCwgdG90YWwpOworICAgIGlmICh1c2VfY2FsbG9jKQorICAgICAgICBwID0gKHVjaGFyICopYXBpLT5hbGxvYy5jYWxsb2MoYXBpLT5hbGxvYy5jdHgsIDEsIHRvdGFsKTsKKyAgICBlbHNlCisgICAgICAgIHAgPSAodWNoYXIgKilhcGktPmFsbG9jLm1hbGxvYyhhcGktPmFsbG9jLmN0eCwgdG90YWwpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNzY3LDcgKzE4NDQsNyBAQAogICAgIHBbU1NUXSA9ICh1Y2hhcilhcGktPmFwaV9pZDsKICAgICBtZW1zZXQocCArIFNTVCArIDEsIEZPUkJJRERFTkJZVEUsIFNTVC0xKTsKIAotICAgIGlmIChuYnl0ZXMgPiAwKQorICAgIGlmIChuYnl0ZXMgPiAwICYmICF1c2VfY2FsbG9jKQogICAgICAgICBtZW1zZXQocCArIDIqU1NULCBDTEVBTkJZVEUsIG5ieXRlcyk7CiAKICAgICAvKiBhdCB0YWlsLCB3cml0ZSBwYWQgKFNTVCBieXRlcykgYW5kIHNlcmlhbG5vIChTU1QgYnl0ZXMpICovCkBAIC0xNzc4LDYgKzE4NTUsMjEgQEAKICAgICByZXR1cm4gcCArIDIqU1NUOwogfQogCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3QgbmJ5dGVzKQoreworICAgIHJldHVybiBfUHlNZW1fRGVidWdBbGxvYygwLCBjdHgsIG5ieXRlcyk7Cit9CisKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z0NhbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuZWxlbSwgc2l6ZV90IGVsc2l6ZSkKK3sKKyAgICBzaXplX3QgbmJ5dGVzOworICAgIGFzc2VydChlbHNpemUgPT0gMCB8fCBuZWxlbSA8PSBQWV9TU0laRV9UX01BWCAvIGVsc2l6ZSk7CisgICAgbmJ5dGVzID0gbmVsZW0gKiBlbHNpemU7CisgICAgcmV0dXJuIF9QeU1lbV9EZWJ1Z0FsbG9jKDEsIGN0eCwgbmJ5dGVzKTsKK30KKwogLyogVGhlIGRlYnVnIGZyZWUgZmlyc3QgY2hlY2tzIHRoZSAyKlNTVCBieXRlcyBvbiBlYWNoIGVuZCBmb3Igc2FuaXR5IChpbgogICAgcGFydGljdWxhciwgdGhhdCB0aGUgRk9SQklEREVOQllURXMgd2l0aCB0aGUgYXBpIElEIGFyZSBzdGlsbCBpbnRhY3QpLgogICAgVGhlbiBmaWxscyB0aGUgb3JpZ2luYWwgYnl0ZXMgd2l0aCBERUFEQllURS4KQEAgLTE4MTEsNyArMTkwMyw3IEBACiAgICAgaW50IGk7CiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gX1B5TWVtX0RlYnVnTWFsbG9jKGN0eCwgbmJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIF9QeU1lbV9EZWJ1Z0FsbG9jKDAsIGN0eCwgbmJ5dGVzKTsKIAogICAgIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhhcGktPmFwaV9pZCwgcCk7CiAgICAgYnVtcHNlcmlhbG5vKCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL29kaWN0b2JqZWN0LmMgYi9PYmplY3RzL29kaWN0b2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiZGQwMgotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvb2RpY3RvYmplY3QuYwpAQCAtMCwwICsxLDI0MzEgQEAKKy8qIE9yZGVyZWQgRGljdGlvbmFyeSBvYmplY3QgaW1wbGVtZW50YXRpb24uCisKK1RoaXMgaW1wbGVtZW50YXRpb24gaXMgbmVjZXNzYXJpbHkgZXhwbGljaXRseSBlcXVpdmFsZW50IHRvIHRoZSBwdXJlIFB5dGhvbgorT3JkZXJlZERpY3QgY2xhc3MgaW4gTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5LiAgVGhlIHN0cmF0ZWd5IHRoZXJlCitpbnZvbHZlcyB1c2luZyBhIGRvdWJseS1saW5rZWQtbGlzdCB0byBjYXB0dXJlIHRoZSBvcmRlci4gIFdlIGtlZXAgdG8gdGhhdAorc3RyYXRlZ3ksIHVzaW5nIGEgbG93ZXItbGV2ZWwgbGlua2VkLWxpc3QuCisKK0Fib3V0IHRoZSBMaW5rZWQtTGlzdAorPT09PT09PT09PT09PT09PT09PT09CisKK0ZvciB0aGUgbGlua2VkIGxpc3Qgd2UgdXNlIGEgYmFzaWMgZG91Ymx5LWxpbmtlZC1saXN0LiAgVXNpbmcgYSBjaXJjdWxhcmx5LQorbGlua2VkLWxpc3QgZG9lcyBoYXZlIHNvbWUgYmVuZWZpdHMsIGJ1dCB0aGV5IGRvbid0IGFwcGx5IHNvIG11Y2ggaGVyZQorc2luY2UgT3JkZXJlZERpY3QgaXMgZm9jdXNlZCBvbiB0aGUgZW5kcyBvZiB0aGUgbGlzdCAoZm9yIHRoZSBtb3N0IHBhcnQpLgorRnVydGhlcm1vcmUsIHRoZXJlIGFyZSBzb21lIGZlYXR1cmVzIG9mIGdlbmVyaWMgbGlua2VkLWxpc3RzIHRoYXQgd2Ugc2ltcGx5Citkb24ndCBuZWVkIGZvciBPcmRlcmVkRGljdC4gIFRodXMgYSBzaW1wbGUgY3VzdG9tIGltcGxlbWVudGF0aW9uIG1lZXRzIG91cgorbmVlZHMuICBBbHRlcm5hdGl2ZXMgdG8gb3VyIHNpbXBsZSBhcHByb2FjaCBpbmNsdWRlIHRoZSBRQ0lSQ0xFXyoKK21hY3JvcyBmcm9tIEJTRCdzIHF1ZXVlLmgsIGFuZCB0aGUgbGludXgncyBsaXN0LmguCisKK0dldHRpbmcgTygxKSBOb2RlIExvb2t1cAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uZSBpbnZhcmlhbnQgb2YgUHl0aG9uJ3MgT3JkZXJlZERpY3QgaXMgdGhhdCBpdCBwcmVzZXJ2ZXMgdGltZSBjb21wbGV4aXR5CitvZiBkaWN0J3MgbWV0aG9kcywgcGFydGljdWxhcmx5IHRoZSBPKDEpIG9wZXJhdGlvbnMuICBTaW1wbHkgYWRkaW5nIGEKK2xpbmtlZC1saXN0IG9uIHRvcCBvZiBkaWN0IGlzIG5vdCBzdWZmaWNpZW50IGhlcmU7IG9wZXJhdGlvbnMgZm9yIG5vZGVzIGluCit0aGUgbWlkZGxlIG9mIHRoZSBsaW5rZWQtbGlzdCBpbXBsaWNpdGx5IHJlcXVpcmUgZmluZGluZyB0aGUgbm9kZSBmaXJzdC4KK1dpdGggYSBzaW1wbGUgbGlua2VkLWxpc3QgbGlrZSB3ZSdyZSB1c2luZywgdGhhdCBpcyBhbiBPKG4pIG9wZXJhdGlvbi4KK0NvbnNlcXVlbnRseSwgbWV0aG9kcyBsaWtlIF9fZGVsaXRlbV9fKCkgd291bGQgY2hhbmdlIGZyb20gTygxKSB0byBPKG4pLAord2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorCitJbiBvcmRlciB0byBwcmVzZXJ2ZSBPKDEpIHBlcmZvcm1hbmNlIGZvciBub2RlIHJlbW92YWwgKGZpbmRpbmcgbm9kZXMpLCB3ZQorbXVzdCBkbyBiZXR0ZXIgdGhhbiBqdXN0IGxvb3BpbmcgdGhyb3VnaCB0aGUgbGlua2VkLWxpc3QuICBIZXJlIGFyZSBvcHRpb25zCit3ZSd2ZSBjb25zaWRlcmVkOgorCisxLiB1c2UgYSBzZWNvbmQgZGljdCB0byBtYXAga2V5cyB0byBub2RlcyAoYSBsYSB0aGUgcHVyZSBQeXRob24gdmVyc2lvbikuCisyLiBrZWVwIGEgc2ltcGxlIGhhc2ggdGFibGUgbWlycm9yaW5nIHRoZSBvcmRlciBvZiBkaWN0J3MsIG1hcHBpbmcgZWFjaCBrZXkKKyAgIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaW4gdGhlIGxpbmtlZC1saXN0LgorMy4gdXNlIGEgdmVyc2lvbiBvZiBzaGFyZWQga2V5cyAoc3BsaXQgZGljdCkgdGhhdCBhbGxvd3Mgbm9uLXVuaWNvZGUga2V5cy4KKzQuIGhhdmUgdGhlIHZhbHVlIHN0b3JlZCBmb3IgZWFjaCBrZXkgYmUgYSAodmFsdWUsIG5vZGUpIHBhaXIsIGFuZCBhZGp1c3QKKyAgIF9fZ2V0aXRlbV9fKCksIGdldCgpLCBldGMuIGFjY29yZGluZ2x5LgorCitUaGUgYXBwcm9hY2ggd2l0aCB0aGUgbGVhc3QgcGVyZm9ybWFuY2UgaW1wYWN0ICh0aW1lIGFuZCBzcGFjZSkgaXMgIzIsCittaXJyb3JpbmcgdGhlIGtleSBvcmRlciBvZiBkaWN0J3MgZGtfZW50aWVzIHdpdGggYW4gYXJyYXkgb2Ygbm9kZSBwb2ludGVycy4KK1doaWxlIGxvb2tkaWN0KCkgYW5kIGZyaWVuZHMgKGRrX2xvb2t1cCkgZG9uJ3QgZ2l2ZSB1cyB0aGUgaW5kZXggaW50byB0aGUKK2FycmF5LCB3ZSBtYWtlIHVzZSBvZiBwb2ludGVyIGFyaXRobWV0aWMgdG8gZ2V0IHRoYXQgaW5kZXguICBBbiBhbHRlcm5hdGl2ZQord291bGQgYmUgdG8gcmVmYWN0b3IgbG9va2RpY3QoKSB0byBwcm92aWRlIHRoZSBpbmRleCwgZXhwbGljaXRseSBleHBvc2luZwordGhlIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIFdlIGNvdWxkIGV2ZW4ganVzdCB1c2UgYSBjdXN0b20gbG9va3VwIGZ1bmN0aW9uCitmb3IgT3JkZXJlZERpY3QgdGhhdCBmYWNpbGl0YXRlcyBvdXIgbmVlZC4gIEhvd2V2ZXIsIGJvdGggYXBwcm9hY2hlcyBhcmUKK3NpZ25pZmljYW50bHkgbW9yZSBjb21wbGljYXRlZCB0aGFuIGp1c3QgdXNpbmcgcG9pbnRlciBhcml0aG1ldGljLgorCitUaGUgY2F0Y2ggd2l0aCBtaXJyb3JpbmcgdGhlIGhhc2ggdGFibGUgb3JkZXJpbmcgaXMgdGhhdCB3ZSBoYXZlIHRvIGtlZXAKK3RoZSBvcmRlcmluZyBpbiBzeW5jIHRocm91Z2ggYW55IGRpY3QgcmVzaXplcy4gIEhvd2V2ZXIsIHRoYXQgb3JkZXIgb25seQorbWF0dGVycyBkdXJpbmcgbm9kZSBsb29rdXAuICBXZSBjYW4gc2ltcGx5IGRlZmVyIGFueSBwb3RlbnRpYWwgcmVzaXppbmcKK3VudGlsIHdlIG5lZWQgdG8gZG8gYSBsb29rdXAuCisKK0xpbmtlZC1MaXN0IE5vZGVzCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBhc3NvY2lhdGVkIGtleSBvbmx5LgorT25lIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgUHlEaWN0S2V5RW50cnkgaW5zdGVhZC4KK1RoaXMgd291bGQgc2F2ZSBvbmUgcG9pbnRlciBkZS1yZWZlcmVuY2UgcGVyIGl0ZW0sIHdoaWNoIGlzIG5pY2UgZHVyaW5nCitjYWxscyB0byB2YWx1ZXMoKSBhbmQgaXRlbXMoKS4gIEhvd2V2ZXIsIGl0IGFkZHMgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQKK290aGVyd2lzZSwgc28gd2Ugc3RpY2sgd2l0aCBqdXN0IHRoZSBrZXkuCisKK0xpbmtlZC1MaXN0IEFQSQorLS0tLS0tLS0tLS0tLS0tCisKK0FzIG5vdGVkLCB0aGUgbGlua2VkLWxpc3QgaW1wbGVtZW50ZWQgaGVyZSBkb2VzIG5vdCBoYXZlIGFsbCB0aGUgYmVsbHMgYW5kCit3aGlzdGxlcy4gIEhvd2V2ZXIsIHdlIHJlY29nbml6ZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgbmVlZCB0bworY2hhbmdlIHRvIGFjY29tbW9kYXRlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvciBleHRyYSBmdW5jdGlvbmFsaXR5LiAgVG8KK3RoYXQgZW5kLCBXZSB1c2UgYSBzaW1wbGUgQVBJIHRvIGludGVyYWN0IHdpdGggdGhlIGxpbmtlZC1saXN0LiAgSGVyZSdzIGEKK3N1bW1hcnkgb2YgdGhlIG1ldGhvZHMvbWFjcm9zOgorCitOb2RlIGluZm86CisKKyogX29kaWN0bm9kZV9LRVkobm9kZSkKKyogX29kaWN0bm9kZV9WQUxVRShvZCwgbm9kZSkKKyogX29kaWN0bm9kZV9QUkVWKG5vZGUpCisqIF9vZGljdG5vZGVfTkVYVChub2RlKQorCitMaW5rZWQtTGlzdCBpbmZvOgorCisqIF9vZGljdF9GSVJTVChvZCkKKyogX29kaWN0X0xBU1Qob2QpCisqIF9vZGljdF9FTVBUWShvZCkKKyogX29kaWN0X0ZPUkVBQ0gob2QsIG5vZGUpIC0gdXNlZCBpbiBwbGFjZSBvZiBgZm9yIChub2RlPS4uLilgCisKK0ZvciBhZGRpbmcgbm9kZXM6CisKKyogX29kaWN0X2FkZF9oZWFkKG9kLCBub2RlKQorKiBfb2RpY3RfYWRkX3RhaWwob2QsIG5vZGUpCisqIF9vZGljdF9hZGRfbmV3X25vZGUob2QsIGtleSwgaGFzaCkKKworRm9yIHJlbW92aW5nIG5vZGVzOgorCisqIF9vZGljdF9jbGVhcl9ub2RlKG9kLCBub2RlLCBrZXksIGhhc2gpCisqIF9vZGljdF9jbGVhcl9ub2RlcyhvZCwgY2xlYXJfZWFjaCkKKworT3RoZXJzOgorCisqIF9vZGljdF9maW5kX25vZGVfaGFzaChvZCwga2V5LCBoYXNoKQorKiBfb2RpY3RfZmluZF9ub2RlKG9kLCBrZXkpCisqIF9vZGljdF9rZXlzX2VxdWFsKG9kMSwgb2QyKQorCitVc2VkLCBidXQgc3BlY2lmaWMgdG8gdGhlIGxpbmtlZC1saXN0IGltcGxlbWVudGF0aW9uOgorCisqIF9vZGljdF9mcmVlX2Zhc3Rfbm9kZXMob2QpCisKK0FuZCBoZXJlJ3MgYSBsb29rIGF0IGhvdyB0aGUgbGlua2VkLWxpc3QgcmVsYXRlcyB0byB0aGUgT3JkZXJlZERpY3QgQVBJOgorCis9PT09PT09PT09PT0gPT09ID09PSA9PT09ID09PT0gPT09PSA9PT0gPT09PSA9PT09PSA9PT09ID09PT0gPT09ID09PT0gPT09ID09PQorbWV0aG9kICAgICAgIGtleSB2YWwgcHJldiBuZXh0IG1lbSAgMXN0IGxhc3QgZW1wdHkgaXRlciBmaW5kIGFkZCBybXYgIGNsciBrZXEKKz09PT09PT09PT09PSA9PT0gPT09ID09PT0gPT09PSA9PT09ID09PSA9PT09ID09PT09ID09PT0gPT09PSA9PT0gPT09PSA9PT0gPT09CitfX2RlbF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+ICAgICAgICAgICAgICAgICAgICAgICAgWAorX19kZWxpdGVtX18gICAgICAgICAgICAgICAgICAgIGZyZWUgICAgICAgICAgICAgICAgICAgICB+ICAgICAgICBub2RlCitfX2VxX18gICAgICAgfiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgKK19faXRlcl9fICAgICBYICAgICAgICAgICAgWAorX19uZXdfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCAgIFgKK19fcmVkdWNlX18gICBYICAgfiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgKK19fcmVwcl9fICAgICBYICAgWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgKK19fcmV2ZXJzZWRfXyBYICAgICAgIFgKK19fc2V0aXRlbV9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkKK19fc2l6ZW9mX18gICAgICAgICAgICAgICAgICAgICBzaXplICAgICAgICAgIFgKK2NsZWFyICAgICAgICAgICAgICAgICAgICAgICAgICB+ICAgICAgICAgICAgIH4gICAgICAgICAgICAgICAgICAgICAgICBYCitjb3B5ICAgICAgICAgWCAgIFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYCitpdGVtcyAgICAgICAgWCAgIFggICAgICAgIFgKK2tleXMgICAgICAgICBYICAgICAgICAgICAgWAorbW92ZV90b19lbmQgIFggICAgICAgICAgICAgICAgICAgICAgWCAgIFggICAgICAgICAgICAgICB+ICAgIGgvdCBrZXkKK3BvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Citwb3BpdGVtICAgICAgWCAgIFggICAgICAgICAgICAgZnJlZSBYICAgWCAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUKK3NldGRlZmF1bHQgICAgICAgfiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAgICB+Cit2YWx1ZXMgICAgICAgICAgIFggICAgICAgIFgKKz09PT09PT09PT09PSA9PT0gPT09ID09PT0gPT09PSA9PT09ID09PSA9PT09ID09PT09ID09PT0gPT09PSA9PT0gPT09PSA9PT0gPT09CisKK19fZGVsaXRlbV9fIGlzIHRoZSBvbmx5IG1ldGhvZCB0aGF0IGRpcmVjdGx5IHJlbGllcyBvbiBmaW5kaW5nIGFuIGFyYml0cmFyeQorbm9kZSBpbiB0aGUgbGlua2VkLWxpc3QuICBFdmVyeXRoaW5nIGVsc2UgaXMgaXRlcmF0aW9uIG9yIHJlbGF0ZXMgdG8gdGhlCitlbmRzIG9mIHRoZSBsaW5rZWQtbGlzdC4KKworU2l0dWF0aW9uIHRoYXQgRW5kYW5nZXJzIENvbnNpc3RlbmN5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1VzaW5nIGEgcmF3IGxpbmtlZC1saXN0IGZvciBPcmRlcmVkRGljdCBleHBvc2VzIGEga2V5IHNpdHVhdGlvbiB0aGF0IGNhbgorY2F1c2UgcHJvYmxlbXMuICBJZiBhIG5vZGUgaXMgc3RvcmVkIGluIGEgdmFyaWFibGUsIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQKK3RoZSBub2RlIG1heSBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQgYmVmb3JlIHRoZSB2YXJpYWJsZSBnZXRzIHVzZWQsIHRodXMKK3BvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBzZWdtZW50YXRpb24gZmF1bHQuICBBIGtleSBwbGFjZSB3aGVyZSB0aGlzIHNob3dzCit1cCBpcyBkdXJpbmcgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGxpbmtlZCBsaXN0ICh2aWEgX29kaWN0X0ZPUkVBQ0ggb3IKK290aGVyd2lzZSkuCisKK0EgbnVtYmVyIG9mIHNvbHV0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIHJlc29sdmUgdGhpcyBzaXR1YXRpb246CisKKyogZGVmZXIgbG9va2luZyB1cCB0aGUgbm9kZSB1bnRpbCBhcyBsYXRlIGFzIHBvc3NpYmxlIGFuZCBjZXJ0YWlubHkgYWZ0ZXIKKyAgYW55IGNvZGUgdGhhdCBjb3VsZCBwb3NzaWJseSByZXN1bHQgaW4gYSBkZWxldGlvbjsKKyogaWYgdGhlIG5vZGUgaXMgbmVlZGVkIGJvdGggYmVmb3JlIGFuZCBhZnRlciBhIHBvaW50IHdoZXJlIHRoZSBub2RlIG1pZ2h0CisgIGJlIHJlbW92ZWQsIGRvIGEgY2hlY2sgYmVmb3JlIHVzaW5nIHRoZSBub2RlIGF0IHRoZSAiYWZ0ZXIiIGxvY2F0aW9uIHRvCisgIHNlZSBpZiB0aGUgbm9kZSBpcyBzdGlsbCB2YWxpZDsKKyogbGlrZSB0aGUgbGFzdCBvbmUsIGJ1dCBzaW1wbHkgcHVsbCB0aGUgbm9kZSBhZ2FpbiB0byBlbnN1cmUgaXQncyByaWdodDsKKyoga2VlcCB0aGUga2V5IGluIHRoZSB2YXJpYWJsZSBpbnN0ZWFkIG9mIHRoZSBub2RlIGFuZCB0aGVuIGxvb2sgdXAgdGhlCisgIG5vZGUgdXNpbmcgdGhlIGtleSBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIG5vZGUgaXMgbmVlZGVkICh0aGlzIGlzIHdoYXQKKyAgd2UgZG8gZm9yIHRoZSBpdGVyYXRvcnMpLgorCitBbm90aGVyIHJlbGF0ZWQgcHJvYmxlbSwgcHJlc2VydmluZyBjb25zaXN0ZW50IG9yZGVyaW5nIGR1cmluZyBpdGVyYXRpb24sCitpcyBkZXNjcmliZWQgYmVsb3cuICBUaGF0IG9uZSBpcyBub3QgZXhjbHVzaXZlIHRvIHVzaW5nIGxpbmtlZC1saXN0cy4KKworCitDaGFsbGVuZ2VzIGZyb20gU3ViY2xhc3NpbmcgZGljdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT3JkZXJlZERpY3Qgc3ViY2xhc3NlcyBkaWN0LCB3aGljaCBpcyBhbiB1bnVzdWFsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3bworYnVpbHRpbiB0eXBlcyAob3RoZXIgdGhhbiB0aGUgYmFzZSBvYmplY3QgdHlwZSkuICBEb2luZyBzbyByZXN1bHRzIGluCitzb21lIGNvbXBsaWNhdGlvbiBhbmQgZGVzZXJ2ZXMgZnVydGhlciBleHBsYW5hdGlvbi4gIFRoZXJlIGFyZSB0d28gdGhpbmdzCit0byBjb25zaWRlciBoZXJlLiAgRmlyc3QsIGluIHdoYXQgY2lyY3Vtc3RhbmNlcyBvciB3aXRoIHdoYXQgYWRqdXN0bWVudHMKK2NhbiBPcmRlcmVkRGljdCBiZSB1c2VkIGFzIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgZGljdCAoYXQgdGhlIEMgbGV2ZWwpPworU2Vjb25kLCBob3cgY2FuIHRoZSBPcmRlcmVkRGljdCBpbXBsZW1lbnRhdGlvbiBsZXZlcmFnZSB0aGUgZGljdAoraW1wbGVtZW50YXRpb24gZWZmZWN0aXZlbHkgd2l0aG91dCBpbnRyb2R1Y2luZyB1bm5lY2Vzc2FyeSBjb3VwbGluZyBvcgoraW5lZmZpY2llbmNpZXM/CisKK1RoaXMgc2Vjb25kIHBvaW50IGlzIHJlZmxlY3RlZCBoZXJlIGFuZCBpbiB0aGUgaW1wbGVtZW50YXRpb24sIHNvIHRoZQorZnVydGhlciBmb2N1cyBpcyBvbiB0aGUgZmlyc3QgcG9pbnQuICBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCBmb3IKK292ZXJyaWRkZW4gbWV0aG9kcywgdGhlIGRpY3QgaW1wbGVtZW50YXRpb24gaXMgZGVmZXJyZWQgdG8gYXMgbXVjaCBhcworcG9zc2libGUuICBGdXJ0aGVybW9yZSwgY291cGxpbmcgaXMgbGltaXRlZCB0byBhcyBsaXR0bGUgYXMgaXMgcmVhc29uYWJsZS4KKworQ29uY3JldGUgQVBJIENvbXBhdGliaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzZSBvZiB0aGUgY29uY3JldGUgQy1BUEkgZm9yIGRpY3QgKFB5RGljdF8qKSB3aXRoIE9yZGVyZWREaWN0IGlzCitwcm9ibGVtYXRpYy4gIChTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEwOTc3LikgIFRoZSBjb25jcmV0ZSBBUEkKK2hhcyBhIG51bWJlciBvZiBoYXJkLWNvZGVkIGFzc3VtcHRpb25zIHRpZWQgdG8gdGhlIGRpY3QgaW1wbGVtZW50YXRpb24uCitUaGlzIGlzLCBpbiBwYXJ0LCBkdWUgdG8gcGVyZm9ybWFuY2UgcmVhc29ucywgd2hpY2ggaXMgdW5kZXJzdGFuZGFibGUKK2dpdmVuIHRoZSBwYXJ0IGRpY3QgcGxheXMgaW4gUHl0aG9uLgorCitBbnkgYXR0ZW1wdCB0byByZXBsYWNlIGRpY3Qgd2l0aCBPcmRlcmVkRGljdCBmb3IgYW55IHJvbGUgaW4gdGhlCitpbnRlcnByZXRlciAoZS5nLiAqKmt3ZHMpIGZhY2VzIGEgY2hhbGxlbmdlLiAgU3VjaCBhbnkgZWZmb3J0IG11c3QKK3JlY29nbml6ZSB0aGF0IHRoZSBpbnN0YW5jZXMgaW4gYWZmZWN0ZWQgbG9jYXRpb25zIGN1cnJlbnRseSBpbnRlcmFjdCB3aXRoCit0aGUgY29uY3JldGUgQVBJLgorCitIZXJlIGFyZSBzb21lIHdheXMgdG8gYWRkcmVzcyB0aGlzIGNoYWxsZW5nZToKKworMS4gQ2hhbmdlIHRoZSByZWxldmFudCB1c2FnZSBvZiB0aGUgY29uY3JldGUgQVBJIGluIENQeXRob24gYW5kIGFkZAorICAgUHlEaWN0X0NoZWNrRXhhY3QoKSBjYWxscyB0byBlYWNoIG9mIHRoZSBjb25jcmV0ZSBBUEkgZnVuY2lvbnMuCisyLiBBZGp1c3QgdGhlIHJlbGV2YW50IGNvbmNyZXRlIEFQSSBmdW5jdGlvbnMgdG8gZXhwbGljaXRseSBhY2NvbW1vZGF0ZQorICAgT3JkZXJlZERpY3QuCiszLiBBcyB3aXRoICMxLCBhZGQgdGhlIGNoZWNrcywgYnV0IGltcHJvdmUgdGhlIGFic3RyYWN0IEFQSSB3aXRoIHNtYXJ0IGZhc3QKKyAgIHBhdGhzIGZvciBkaWN0IGFuZCBPcmRlcmVkRGljdCwgYW5kIHJlZmFjdG9yIENQeXRob24gdG8gdXNlIHRoZSBhYnN0cmFjdAorICAgQVBJLiAgSW1wcm92ZW1lbnRzIHRvIHRoZSBhYnN0cmFjdCBBUEkgd291bGQgYmUgdmFsdWFibGUgcmVnYXJkbGVzcy4KKworQWRkaW5nIHRoZSBjaGVja3MgdG8gdGhlIGNvbmNyZXRlIEFQSSB3b3VsZCBoZWxwIG1ha2UgYW55IGludGVycHJldGVyCitzd2l0Y2ggdG8gT3JkZXJlZERpY3QgbGVzcyBwYWluZnVsIGZvciBleHRlbnNpb24gbW9kdWxlcy4gIEhvd2V2ZXIsIHRoaXMKK3dvbid0IHdvcmsuICBUaGUgZXF1aXZhbGVudCBDIEFQSSBjYWxsIHRvIGBkaWN0Ll9fc2V0aXRlbV9fKG9iaiwgaywgdilgCitpcyAnUHlEaWN0X1NldEl0ZW0ob2JqLCBrLCB2KWAuICBUaGlzIGlsbHVzdHJhdGVzIGhvdyBzdWJjbGFzc2VzIGluIEMgY2FsbAordGhlIGJhc2UgY2xhc3MncyBtZXRob2RzLCBzaW5jZSB0aGVyZSBpcyBubyBlcXVpdmFsZW50IG9mIHN1cGVyKCkgaW4gdGhlCitDIEFQSS4gIENhbGxpbmcgaW50byBQeXRob24gZm9yIHBhcmVudCBjbGFzcyBBUEkgd291bGQgd29yaywgYnV0IHNvbWUKK2V4dGVuc2lvbiBtb2R1bGVzIGFscmVhZHkgcmVseSBvbiB0aGlzIGZlYXR1cmUgb2YgdGhlIGNvbmNyZXRlIEFQSS4KKworRm9yIHJlZmVyZW5jZSwgaGVyZSBpcyBhIGJyZWFrZG93biBvZiBzb21lIG9mIHRoZSBkaWN0IGNvbmNyZXRlIEFQSToKKworPT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PQorY29uY3JldGUgQVBJICAgICAgICAgICAgICAgdXNlcyAgICAgICAgICBhYnN0cmFjdCBBUEkKKz09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT0KK1B5RGljdF9DaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX0NoZWNrCisoUHlEaWN0X0NoZWNrRXhhY3QpICAgICAgICAgICAgICAgICAgICAgIC0KKyhQeURpY3RfTmV3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQorKFB5RGljdFByb3h5X05ldykgICAgICAgICAgICAgICAgICAgICAgICAtCitQeURpY3RfQ2xlYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK1B5RGljdF9Db250YWlucyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db250YWlucworUHlEaWN0X0NvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCitQeURpY3RfU2V0SXRlbSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1NldEl0ZW0KK1B5RGljdF9TZXRJdGVtU3RyaW5nICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKK1B5RGljdF9EZWxJdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX0RlbEl0ZW0KK1B5RGljdF9EZWxJdGVtU3RyaW5nICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcKK1B5RGljdF9HZXRJdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgLQorUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IgICAgICAgICAgICAgICAgICBQeU9iamVjdF9HZXRJdGVtCitfUHlEaWN0X0dldEl0ZW1JZFdpdGhFcnJvciAgICAgICAgICAgICAgIC0KK1B5RGljdF9HZXRJdGVtU3RyaW5nICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKK1B5RGljdF9JdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX0l0ZW1zCitQeURpY3RfS2V5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWFwcGluZ19LZXlzCitQeURpY3RfVmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWFwcGluZ19WYWx1ZXMKK1B5RGljdF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX1NpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX0xlbmd0aAorUHlEaWN0X05leHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUl0ZXJfTmV4dAorX1B5RGljdF9OZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCitQeURpY3RfTWVyZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK1B5RGljdF9VcGRhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQorUHlEaWN0X01lcmdlRnJvbVNlcTIgICAgICAgICAgICAgICAgICAgICAtCitQeURpY3RfQ2xlYXJGcmVlTGlzdCAgICAgICAgICAgICAgICAgICAgIC0KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNYXBwaW5nX0hhc0tleVN0cmluZworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09CisKKworVGhlIGRpY3QgSW50ZXJmYWNlIFJlbGF0aXZlIHRvIE9yZGVyZWREaWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2luY2UgT3JkZXJlZERpY3Qgc3ViY2xhc3NlcyBkaWN0LCB1bmRlcnN0YW5kaW5nIHRoZSB2YXJpb3VzIG1ldGhvZHMgYW5kCithdHRyaWJ1dGVzIG9mIGRpY3QgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgT3JkZXJlZERpY3QuCisKK1JlbGV2YW50IFR5cGUgU2xvdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT0KK3Nsb3QgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgICAgICAgb2JqZWN0ICAgICAgICAgICAgICBkaWN0Cis9PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PQordHBfZGVhbGxvYyAgICAgICAgLSAgICAgICAgICAgICAgICBvYmplY3RfZGVhbGxvYyAgICAgIGRpY3RfZGVhbGxvYwordHBfcmVwciAgICAgICAgICAgX19yZXByX18gICAgICAgICBvYmplY3RfcmVwciAgICAgICAgIGRpY3RfcmVwcgorc3FfY29udGFpbnMgICAgICAgX19jb250YWluc19fICAgICAtICAgICAgICAgICAgICAgICAgIGRpY3RfY29udGFpbnMKK21wX2xlbmd0aCAgICAgICAgIF9fbGVuX18gICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBkaWN0X2xlbmd0aAorbXBfc3Vic2NyaXB0ICAgICAgX19nZXRpdGVtX18gICAgICAtICAgICAgICAgICAgICAgICAgIGRpY3Rfc3Vic2NyaXB0CittcF9hc3Nfc3Vic2NyaXB0ICBfX3NldGl0ZW1fXyAgICAgIC0gICAgICAgICAgICAgICAgICAgZGljdF9hc3Nfc3ViCisgICAgICAgICAgICAgICAgICBfX2RlbGl0ZW1fXwordHBfaGFzaCAgICAgICAgICAgX19oYXNoX18gICAgICAgICBfUHlfSGFzaFBvaW50ZXIgICAgIC4uLl9IYXNoTm90SW1wbAordHBfc3RyICAgICAgICAgICAgX19zdHJfXyAgICAgICAgICBvYmplY3Rfc3RyICAgICAgICAgIC0KK3RwX2dldGF0dHJvICAgICAgIF9fZ2V0YXR0cmlidXRlX18gLi4uX0dlbmVyaWNHZXRBdHRyICAocmVwZWF0ZWQpCisgICAgICAgICAgICAgICAgICBfX2dldGF0dHJfXwordHBfc2V0YXR0cm8gICAgICAgX19zZXRhdHRyX18gICAgICAuLi5fR2VuZXJpY1NldEF0dHIgIChkaXNhYmxlZCkKK3RwX2RvYyAgICAgICAgICAgIF9fZG9jX18gICAgICAgICAgKGxpdGVyYWwpICAgICAgICAgICBkaWN0aW9uYXJ5X2RvYwordHBfdHJhdmVyc2UgICAgICAgLSAgICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGRpY3RfdHJhdmVyc2UKK3RwX2NsZWFyICAgICAgICAgIC0gICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBkaWN0X3RwX2NsZWFyCit0cF9yaWNoY29tcGFyZSAgICBfX2VxX18gICAgICAgICAgIG9iamVjdF9yaWNoY29tcGFyZSAgZGljdF9yaWNoY29tcGFyZQorICAgICAgICAgICAgICAgICAgX19uZV9fCit0cF93ZWFrbGlzdG9mZnNldCAoX193ZWFrcmVmX18pICAgIC0gICAgICAgICAgICAgICAgICAgLQordHBfaXRlciAgICAgICAgICAgX19pdGVyX18gICAgICAgICAtICAgICAgICAgICAgICAgICAgIGRpY3RfaXRlcgordHBfZGljdG9mZnNldCAgICAgKF9fZGljdF9fKSAgICAgICAtICAgICAgICAgICAgICAgICAgIC0KK3RwX2luaXQgICAgICAgICAgIF9faW5pdF9fICAgICAgICAgb2JqZWN0X2luaXQgICAgICAgICBkaWN0X2luaXQKK3RwX2FsbG9jICAgICAgICAgIC0gICAgICAgICAgICAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYyAocmVwZWF0ZWQpCit0cF9uZXcgICAgICAgICAgICBfX25ld19fICAgICAgICAgIG9iamVjdF9uZXcgICAgICAgICAgZGljdF9uZXcKK3RwX2ZyZWUgICAgICAgICAgIC0gICAgICAgICAgICAgICAgUHlPYmplY3RfRGVsICAgICAgICBQeU9iamVjdF9HQ19EZWwKKz09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09CisKK1JlbGV2YW50IE1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PQorbWV0aG9kICAgICAgICAgICBvYmplY3QgICAgICAgICAgICAgIGRpY3QKKz09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT0KK19fcmVkdWNlX18gICAgICAgb2JqZWN0X3JlZHVjZSAgICAgICAtCitfX3NpemVvZl9fICAgICAgIG9iamVjdF9zaXplb2YgICAgICAgZGljdF9zaXplb2YKK2NsZWFyICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBkaWN0X2NsZWFyCitjb3B5ICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgZGljdF9jb3B5Citmcm9ta2V5cyAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgZGljdF9mcm9ta2V5cworZ2V0ICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGRpY3RfZ2V0CitpdGVtcyAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgZGljdGl0ZW1zX25ldwora2V5cyAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGRpY3RrZXlzX25ldworcG9wICAgICAgICAgICAgICAtICAgICAgICAgICAgICAgICAgIGRpY3RfcG9wCitwb3BpdGVtICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgZGljdF9wb3BpdGVtCitzZXRkZWZhdWx0ICAgICAgIC0gICAgICAgICAgICAgICAgICAgZGljdF9zZXRkZWZhdWx0Cit1cGRhdGUgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgZGljdF91cGRhdGUKK3ZhbHVlcyAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgICBkaWN0dmFsdWVzX25ldworPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PQorCisKK1B1cmUgUHl0aG9uIE9yZGVyZWREaWN0Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitBcyBhbHJlYWR5IG5vdGVkLCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIHB1cmUgUHl0aG9uIE9yZGVyZWREaWN0CitpbXBsZW1lbnRhdGlvbiBpcyBhIGtleSBnb2FsIG9mIHRoaXMgQyBpbXBsZW1lbnRhdGlvbi4gIFRvIGZ1cnRoZXIgdGhhdAorZ29hbCwgaGVyZSdzIGEgc3VtbWFyeSBvZiBob3cgT3JkZXJlZERpY3Qtc3BlY2lmaWMgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQKK2luIGNvbGxlY3Rpb25zL19faW5pdF9fLnB5LiAgQWxzbyBwcm92aWRlZCBpcyBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoCittZXRob2RzIGRpcmVjdGx5IG11dGF0ZSBvciBpdGVyYXRlIHRoZSBvYmplY3QsIGFzIHdlbGwgYXMgYW55IHJlbGF0aW9uc2hpcAord2l0aCB0aGUgdW5kZXJseWluZyBsaW5rZWQtbGlzdC4KKworPT09PT09PT09PT09PSA9PT09PT09PT09PT09PSA9PSA9PT09PT09PT09PT09PT09ID09PSA9PT0gPT09PQorbWV0aG9kICAgICAgICBpbXBsIHVzZWQgICAgICBsbCB1c2VzICAgICAgICAgICAgIGlucSBtdXQgaXRlcgorPT09PT09PT09PT09PSA9PT09PT09PT09PT09PSA9PSA9PT09PT09PT09PT09PT09ID09PSA9PT0gPT09PQorX19jb250YWluc19fICBkaWN0ICAgICAgICAgICAtICAtICAgICAgICAgICAgICAgIFgKK19fZGVsaXRlbV9fICAgT3JkZXJlZERpY3QgICAgWSAgZGljdC5fX2RlbGl0ZW1fXyAgICAgWAorX19lcV9fICAgICAgICBPcmRlcmVkRGljdCAgICBOICBPcmRlcmVkRGljdCAgICAgIH4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5fX2VxX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyX18KK19fZ2V0aXRlbV9fICAgZGljdCAgICAgICAgICAgLSAgLSAgICAgICAgICAgICAgICBYCitfX2l0ZXJfXyAgICAgIE9yZGVyZWREaWN0ICAgIFkgIC0gICAgICAgICAgICAgICAgICAgICAgICBYCitfX2luaXRfXyAgICAgIE9yZGVyZWREaWN0ICAgIE4gIHVwZGF0ZQorX19sZW5fXyAgICAgICBkaWN0ICAgICAgICAgICAtICAtICAgICAgICAgICAgICAgIFgKK19fbmVfXyAgICAgICAgTXV0YWJsZU1hcHBpbmcgLSAgX19lcV9fICAgICAgICAgICB+CitfX3JlZHVjZV9fICAgIE9yZGVyZWREaWN0ICAgIE4gIE9yZGVyZWREaWN0ICAgICAgfgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dldGl0ZW1fXworX19yZXByX18gICAgICBPcmRlcmVkRGljdCAgICBOICBfX2NsYXNzX18gICAgICAgIH4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMKK19fcmV2ZXJzZWRfXyAgT3JkZXJlZERpY3QgICAgWSAgLSAgICAgICAgICAgICAgICAgICAgICAgIFgKK19fc2V0aXRlbV9fICAgT3JkZXJlZERpY3QgICAgWSAgX19jb250YWluc19fICAgICAgICAgWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fCitfX3NpemVvZl9fICAgIE9yZGVyZWREaWN0ICAgIFkgIF9fbGVuX18gICAgICAgICAgfgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RpY3RfXworY2xlYXIgICAgICAgICBPcmRlcmVkRGljdCAgICBZICBkaWN0LmNsZWFyICAgICAgICAgICBYCitjb3B5ICAgICAgICAgIE9yZGVyZWREaWN0ICAgIE4gIF9fY2xhc3NfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luaXRfXworZnJvbWtleXMgICAgICBPcmRlcmVkRGljdCAgICBOICBfX3NldGl0ZW1fXworZ2V0ICAgICAgICAgICBkaWN0ICAgICAgICAgICAtICAtICAgICAgICAgICAgICAgIH4KK2l0ZW1zICAgICAgICAgTXV0YWJsZU1hcHBpbmcgLSAgSXRlbXNWaWV3ICAgICAgICAgICAgICAgIFgKK2tleXMgICAgICAgICAgTXV0YWJsZU1hcHBpbmcgLSAgS2V5c1ZpZXcgICAgICAgICAgICAgICAgIFgKK21vdmVfdG9fZW5kICAgT3JkZXJlZERpY3QgICAgWSAgLSAgICAgICAgICAgICAgICAgICAgWAorcG9wICAgICAgICAgICBPcmRlcmVkRGljdCAgICBOICBfX2NvbnRhaW5zX18gICAgICAgICBYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2V0aXRlbV9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVsaXRlbV9fCitwb3BpdGVtICAgICAgIE9yZGVyZWREaWN0ICAgIFkgIGRpY3QucG9wICAgICAgICAgICAgIFgKK3NldGRlZmF1bHQgICAgT3JkZXJlZERpY3QgICAgTiAgX19jb250YWluc19fICAgICAgICAgfgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dldGl0ZW1fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NldGl0ZW1fXwordXBkYXRlICAgICAgICBNdXRhYmxlTWFwcGluZyAtICBfX3NldGl0ZW1fXyAgICAgICAgICB+Cit2YWx1ZXMgICAgICAgIE11dGFibGVNYXBwaW5nIC0gIFZhbHVlc1ZpZXcgICAgICAgICAgICAgICBYCis9PT09PT09PT09PT09ID09PT09PT09PT09PT09ID09ID09PT09PT09PT09PT09PT0gPT09ID09PSA9PT09CisKK19fcmV2ZXJzZWRfXyBhbmQgbW92ZV90b19lbmQgYXJlIGJvdGggZXhjbHVzaXZlIHRvIE9yZGVyZWREaWN0LgorCisKK0MgT3JkZXJlZERpY3QgSW1wbGVtZW50YXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworPT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PQorc2xvdCAgICAgICAgICAgICAgaW1wbAorPT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PQordHBfZGVhbGxvYyAgICAgICAgb2RpY3RfZGVhbGxvYwordHBfcmVwciAgICAgICAgICAgb2RpY3RfcmVwcgorbXBfYXNzX3N1YnNjcmlwdCAgb2RpY3RfYXNzX3N1YgordHBfZG9jICAgICAgICAgICAgb2RpY3RfZG9jCit0cF90cmF2ZXJzZSAgICAgICBvZGljdF90cmF2ZXJzZQordHBfY2xlYXIgICAgICAgICAgb2RpY3RfdHBfY2xlYXIKK3RwX3JpY2hjb21wYXJlICAgIG9kaWN0X3JpY2hjb21wYXJlCit0cF93ZWFrbGlzdG9mZnNldCAob2Zmc2V0KQordHBfaXRlciAgICAgICAgICAgb2RpY3RfaXRlcgordHBfZGljdG9mZnNldCAgICAgKG9mZnNldCkKK3RwX2luaXQgICAgICAgICAgIG9kaWN0X2luaXQKK3RwX2FsbG9jICAgICAgICAgIChyZXBlYXRlZCkKK3RwX25ldyAgICAgICAgICAgIG9kaWN0X25ldworPT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PQorCis9PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09CittZXRob2QgICAgICAgICAgICBpbXBsCis9PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09CitfX3JlZHVjZV9fICAgICAgICBvZGljdF9yZWR1Y2UKK19fc2l6ZW9mX18gICAgICAgIG9kaWN0X3NpemVvZgorY2xlYXIgICAgICAgICAgICAgb2RpY3RfY2xlYXIKK2NvcHkgICAgICAgICAgICAgIG9kaWN0X2NvcHkKK2Zyb21rZXlzICAgICAgICAgIG9kaWN0X2Zyb21rZXlzCitpdGVtcyAgICAgICAgICAgICBvZGljdGl0ZW1zX25ldwora2V5cyAgICAgICAgICAgICAgb2RpY3RrZXlzX25ldworcG9wICAgICAgICAgICAgICAgb2RpY3RfcG9wCitwb3BpdGVtICAgICAgICAgICBvZGljdF9wb3BpdGVtCitzZXRkZWZhdWx0ICAgICAgICBvZGljdF9zZXRkZWZhdWx0Cit1cGRhdGUgICAgICAgICAgICBvZGljdF91cGRhdGUKK3ZhbHVlcyAgICAgICAgICAgIG9kaWN0dmFsdWVzX25ldworPT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PQorCitJbmhlcml0ZWQgdW5jaGFuZ2VkIGZyb20gb2JqZWN0L2RpY3Q6CisKKz09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT0KK21ldGhvZCAgICAgICAgICAgdHlwZSBmaWVsZAorPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PQorLSAgICAgICAgICAgICAgICB0cF9mcmVlCitfX2NvbnRhaW5zX18gICAgIHRwX2FzX3NlcXVlbmNlLnNxX2NvbnRhaW5zCitfX2dldGF0dHJfXyAgICAgIHRwX2dldGF0dHJvCitfX2dldGF0dHJpYnV0ZV9fIHRwX2dldGF0dHJvCitfX2dldGl0ZW1fXyAgICAgIHRwX2FzX21hcHBpbmcubXBfc3Vic2NyaXB0CitfX2hhc2hfXyAgICAgICAgIHRwX2hhc2gKK19fbGVuX18gICAgICAgICAgdHBfYXNfbWFwcGluZy5tcF9sZW5ndGgKK19fc2V0YXR0cl9fICAgICAgdHBfc2V0YXR0cm8KK19fc3RyX18gICAgICAgICAgdHBfc3RyCitnZXQgICAgICAgICAgICAgIC0KKz09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitPdGhlciBDaGFsbGVuZ2VzCis9PT09PT09PT09PT09PT09CisKK1ByZXNlcnZpbmcgT3JkZXJpbmcgRHVyaW5nIEl0ZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEdXJpbmcgaXRlcmF0aW9uIHRocm91Z2ggYW4gT3JkZXJlZERpY3QsIGl0IGlzIHBvc3NpYmxlIHRoYXQgaXRlbXMgY291bGQKK2dldCBhZGRlZCwgcmVtb3ZlZCwgb3IgcmVvcmRlcmVkLiAgRm9yIGEgbGlua2VkLWxpc3QgaW1wbGVtZW50YXRpb24sIGFzCit3aXRoIHNvbWUgb3RoZXIgaW1wbGVtZW50YXRpb25zLCB0aGF0IHNpdHVhdGlvbiBtYXkgbGVhZCB0byB1bmRlZmluZWQKK2JlaGF2aW9yLiAgVGhlIGRvY3VtZW50YXRpb24gZm9yIGRpY3QgbWVudGlvbnMgdGhpcyBpbiB0aGUgYGl0ZXIoKWAgc2VjdGlvbgorb2YgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvbGlicmFyeS9zdGR0eXBlcy5odG1sI2RpY3Rpb25hcnktdmlldy1vYmplY3RzLgorSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB3ZSBmb2xsb3cgZGljdCdzIGxlYWQgKGFzIGRvZXMgdGhlIHB1cmUgUHl0aG9uCitpbXBsZW1lbnRhdGlvbikgZm9yIF9faXRlcl9fKCksIGtleXMoKSwgdmFsdWVzKCksIGFuZCBpdGVtcygpLgorCitGb3IgaW50ZXJuYWwgaXRlcmF0aW9uICh1c2luZyBfb2RpY3RfRk9SRUFDSCBvciBub3QpLCB0aGVyZSBpcyBzdGlsbCB0aGUKK3Jpc2sgdGhhdCBub3QgYWxsIG5vZGVzIHRoYXQgd2UgZXhwZWN0IHRvIGJlIHNlZW4gaW4gdGhlIGxvb3AgYWN0dWFsbHkgZ2V0CitzZWVuLiAgVGh1cywgd2UgYXJlIGNhcmVmdWwgaW4gZWFjaCBvZiB0aG9zZSBwbGFjZXMgdG8gZW5zdXJlIHRoYXQgdGhleQorYXJlLiAgVGhpcyBjb21lcywgb2YgY291cnNlLCBhdCBhIHNtYWxsIHByaWNlIGF0IGVhY2ggbG9jYXRpb24uICBUaGUKK3NvbHV0aW9ucyBhcmUgbXVjaCB0aGUgc2FtZSBhcyB0aG9zZSBkZXRhaWxlZCBpbiB0aGUgYFNpdHVhdGlvbiB0aGF0CitFbmRhbmdlcnMgQ29uc2lzdGVuY3lgIHNlY3Rpb24gYWJvdmUuCisKKworUG90ZW50aWFsIE9wdGltaXphdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09CisKKyogQWxsb2NhdGUgdGhlIG5vZGVzIGFzIGEgYmxvY2sgdmlhIG9kX2Zhc3Rfbm9kZXMgaW5zdGVhZCBvZiBpbmRpdmlkdWFsbHkuCisgIC0gU2V0IG5vZGUtPmtleSB0byBOVUxMIHRvIGluZGljYXRlIHRoZSBub2RlIGlzIG5vdC1pbi11c2UuCisgIC0gQWRkIF9vZGljdF9FWElTVFMoKT8KKyAgLSBIb3cgdG8gbWFpbnRhaW4gY29uc2lzdGVuY3kgYWNyb3NzIHJlc2l6ZXM/ICBFeGlzdGluZyBub2RlIHBvaW50ZXJzCisgICAgd291bGQgYmUgaW52YWxpZGF0ZSBhZnRlciBhIHJlc2l6ZSwgd2hpY2ggaXMgcGFydGljdWxhcmx5IHByb2JsZW1hdGljCisgICAgZm9yIHRoZSBpdGVyYXRvcnMuCisqIFVzZSBhIG1vcmUgc3RyZWFtLWxpbmVkIGltcGxlbWVudGF0aW9uIG9mIHVwZGF0ZSgpIGFuZCwgbGlrZWx5IGluZGlyZWN0bHksCisgIF9faW5pdF9fKCkuCisKKyovCisKKy8qIFRPRE8KKworc29vbmVyOgorLSByZWVudHJhbmN5IChtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBhdCBhIHRocmVhZC1zYWZlIHN0YXRlIHdoZW4gY2FsbGluZworICBpbnRvIFB5dGhvbikuICBJJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGlzIG11bHRpcGxlIHRpbWVzLCBidXQgd2FudCB0bworICBtYWtlIG9uZSBtb3JlIHBhc3MuCistIGFkZCB1bml0IHRlc3RzIGZvciByZWVudHJhbmN5PworCitsYXRlcjoKKy0gbWFrZSB0aGUgZGljdCB2aWV3cyBzdXBwb3J0IHRoZSBmdWxsIHNldCBBUEkgKHRoZSBwdXJlIFB5dGhvbiBpbXBsIGRvZXMpCistIGltcGxlbWVudCBhIGZ1bGxlciBNdXRhYmxlTWFwcGluZyBBUEkgaW4gQz8KKy0gbW92ZSB0aGUgTXV0YWJsZU1hcHBpbmcgaW1wbGVtZW50YXRpb24gdG8gYWJzdHJhY3QuYz8KKy0gb3B0aW1pemUgbXV0YWJsZW1hcHBpbmdfdXBkYXRlCistIHVzZSBQeU9iamVjdF9NQUxMT0MgKHNtYWxsIG9iamVjdCBhbGxvY2F0b3IpIGZvciBvZGljdCBub2Rlcz8KKy0gc3VwcG9ydCBzdWJjbGFzc2VzIGJldHRlciAoZS5nLiBpbiBvZGljdF9yaWNoY29tcGFyZSkKKworKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorI2luY2x1ZGUgImRpY3QtY29tbW9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKwordHlwZWRlZiBzdHJ1Y3QgX29kaWN0bm9kZSBfT0RpY3ROb2RlOworCisvKiBQeU9EaWN0T2JqZWN0ICovCitzdHJ1Y3QgX29kaWN0b2JqZWN0IHsKKyAgICBQeURpY3RPYmplY3Qgb2RfZGljdDsgICAgICAgIC8qIHRoZSB1bmRlcmx5aW5nIGRpY3QgKi8KKyAgICBfT0RpY3ROb2RlICpvZF9maXJzdDsgICAgICAgIC8qIGZpcnN0IG5vZGUgaW4gdGhlIGxpbmtlZCBsaXN0LCBpZiBhbnkgKi8KKyAgICBfT0RpY3ROb2RlICpvZF9sYXN0OyAgICAgICAgIC8qIGxhc3Qgbm9kZSBpbiB0aGUgbGlua2VkIGxpc3QsIGlmIGFueSAqLworICAgIC8qIG9kX2Zhc3Rfbm9kZXMsIG9kX2Zhc3Rfbm9kZXNfc2l6ZSBhbmQgb2RfcmVzaXplX3NlbnRpbmVsIGFyZSBtYW5hZ2VkCisgICAgICogYnkgX29kaWN0X3Jlc2l6ZSgpLgorICAgICAqIE5vdGUgdGhhdCB3ZSByZWx5IG9uIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgZGljdCBmb3IgYm90aC4gKi8KKyAgICBfT0RpY3ROb2RlICoqb2RfZmFzdF9ub2RlczsgIC8qIGhhc2ggdGFibGUgdGhhdCBtaXJyb3JzIHRoZSBkaWN0IHRhYmxlICovCisgICAgUHlfc3NpemVfdCBvZF9mYXN0X25vZGVzX3NpemU7CisgICAgdm9pZCAqb2RfcmVzaXplX3NlbnRpbmVsOyAgICAvKiBjaGFuZ2VzIGlmIG9kaWN0IHNob3VsZCBiZSByZXNpemVkICovCisKKyAgICBzaXplX3Qgb2Rfc3RhdGU7ICAgICAgICAgICAgIC8qIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBMTCBjaGFuZ2VzICovCisgICAgUHlPYmplY3QgKm9kX2luc3RfZGljdDsgICAgICAvKiBPcmRlcmVkRGljdCgpLl9fZGljdF9fICovCisgICAgUHlPYmplY3QgKm9kX3dlYWtyZWZsaXN0OyAgICAvKiBob2xkcyB3ZWFrcmVmcyB0byB0aGUgb2RpY3QgKi8KK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogb2RpY3Qga2V5cyAoYSBzaW1wbGUgZG91Ymx5LWxpbmtlZCBsaXN0KQorICovCisKK3N0cnVjdCBfb2RpY3Rub2RlIHsKKyAgICBQeU9iamVjdCAqa2V5OworICAgIFB5X2hhc2hfdCBoYXNoOworICAgIF9PRGljdE5vZGUgKm5leHQ7CisgICAgX09EaWN0Tm9kZSAqcHJldjsKK307CisKKyNkZWZpbmUgX29kaWN0bm9kZV9LRVkobm9kZSkgXAorICAgIChub2RlLT5rZXkpCisjZGVmaW5lIF9vZGljdG5vZGVfSEFTSChub2RlKSBcCisgICAgKG5vZGUtPmhhc2gpCisvKiBib3Jyb3dlZCByZWZlcmVuY2UgKi8KKyNkZWZpbmUgX29kaWN0bm9kZV9WQUxVRShub2RlLCBvZCkgXAorICAgIFB5T0RpY3RfR2V0SXRlbVdpdGhFcnJvcigoUHlPYmplY3QgKilvZCwgX29kaWN0bm9kZV9LRVkobm9kZSkpCisjZGVmaW5lIF9vZGljdG5vZGVfUFJFVihub2RlKSAobm9kZS0+cHJldikKKyNkZWZpbmUgX29kaWN0bm9kZV9ORVhUKG5vZGUpIChub2RlLT5uZXh0KQorCisjZGVmaW5lIF9vZGljdF9GSVJTVChvZCkgKCgoUHlPRGljdE9iamVjdCAqKW9kKS0+b2RfZmlyc3QpCisjZGVmaW5lIF9vZGljdF9MQVNUKG9kKSAoKChQeU9EaWN0T2JqZWN0ICopb2QpLT5vZF9sYXN0KQorI2RlZmluZSBfb2RpY3RfRU1QVFkob2QpIChfb2RpY3RfRklSU1Qob2QpID09IE5VTEwpCisjZGVmaW5lIF9vZGljdF9GT1JFQUNIKG9kLCBub2RlKSBcCisgICAgZm9yIChub2RlID0gX29kaWN0X0ZJUlNUKG9kKTsgbm9kZSAhPSBOVUxMOyBub2RlID0gX29kaWN0bm9kZV9ORVhUKG5vZGUpKQorCisjZGVmaW5lIF9vZGljdF9GQVNUX1NJWkUob2QpICgoUHlEaWN0T2JqZWN0ICopb2QpLT5tYV9rZXlzLT5ka19zaXplCisKK3N0YXRpYyB2b2lkCitfb2RpY3RfZnJlZV9mYXN0X25vZGVzKFB5T0RpY3RPYmplY3QgKm9kKSB7CisgICAgaWYgKG9kLT5vZF9mYXN0X25vZGVzKSB7CisgICAgICAgIFB5TWVtX0ZSRUUob2QtPm9kX2Zhc3Rfbm9kZXMpOworICAgIH0KK30KKworLyogUmV0dXJuIHRoZSBpbmRleCBpbnRvIHRoZSBoYXNoIHRhYmxlLCByZWdhcmRsZXNzIG9mIGEgdmFsaWQgbm9kZS4gKi8KK3N0YXRpYyBQeV9zc2l6ZV90Citfb2RpY3RfZ2V0X2luZGV4X3JhdyhQeU9EaWN0T2JqZWN0ICpvZCwgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCit7CisgICAgUHlPYmplY3QgKip2YWx1ZV9hZGRyID0gTlVMTDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5c09iamVjdCAqa2V5cyA9ICgoUHlEaWN0T2JqZWN0ICopb2QpLT5tYV9rZXlzOworCisgICAgZXAgPSAoa2V5cy0+ZGtfbG9va3VwKSgoUHlEaWN0T2JqZWN0ICopb2QsIGtleSwgaGFzaCwgJnZhbHVlX2FkZHIpOworICAgIGlmIChlcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyogV2UgdXNlIHBvaW50ZXIgYXJpdGhtZXRpYyB0byBnZXQgdGhlIGVudHJ5J3MgaW5kZXggaW50byB0aGUgdGFibGUuICovCisgICAgcmV0dXJuIGVwIC0ga2V5cy0+ZGtfZW50cmllczsKK30KKworLyogUmVwbGFjZSBvZC0+b2RfZmFzdF9ub2RlcyB3aXRoIGEgbmV3IHRhYmxlIG1hdGNoaW5nIHRoZSBzaXplIG9mIGRpY3Qncy4gKi8KK3N0YXRpYyBpbnQKK19vZGljdF9yZXNpemUoUHlPRGljdE9iamVjdCAqb2QpIHsKKyAgICBQeV9zc2l6ZV90IHNpemUsIGk7CisgICAgX09EaWN0Tm9kZSAqKmZhc3Rfbm9kZXMsICpub2RlOworCisgICAgLyogSW5pdGlhbGl6ZSBhIG5ldyAiZmFzdCBub2RlcyIgdGFibGUuICovCisgICAgc2l6ZSA9ICgoUHlEaWN0T2JqZWN0ICopb2QpLT5tYV9rZXlzLT5ka19zaXplOworICAgIGZhc3Rfbm9kZXMgPSBQeU1lbV9ORVcoX09EaWN0Tm9kZSAqLCBzaXplKTsKKyAgICBpZiAoZmFzdF9ub2RlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgZmFzdF9ub2Rlc1tpXSA9IE5VTEw7CisKKyAgICAvKiBDb3B5IHRoZSBjdXJyZW50IG5vZGVzIGludG8gdGhlIHRhYmxlLiAqLworICAgIF9vZGljdF9GT1JFQUNIKG9kLCBub2RlKSB7CisgICAgICAgIGkgPSBfb2RpY3RfZ2V0X2luZGV4X3JhdyhvZCwgX29kaWN0bm9kZV9LRVkobm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29kaWN0bm9kZV9IQVNIKG5vZGUpKTsKKyAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICBQeU1lbV9GUkVFKGZhc3Rfbm9kZXMpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGZhc3Rfbm9kZXNbaV0gPSBub2RlOworICAgIH0KKworICAgIC8qIFJlcGxhY2UgdGhlIG9sZCBmYXN0IG5vZGVzIHRhYmxlLiAqLworICAgIF9vZGljdF9mcmVlX2Zhc3Rfbm9kZXMob2QpOworICAgIG9kLT5vZF9mYXN0X25vZGVzID0gZmFzdF9ub2RlczsKKyAgICBvZC0+b2RfZmFzdF9ub2Rlc19zaXplID0gc2l6ZTsKKyAgICBvZC0+b2RfcmVzaXplX3NlbnRpbmVsID0gKChQeURpY3RPYmplY3QgKilvZCktPm1hX2tleXM7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybiB0aGUgaW5kZXggaW50byB0aGUgaGFzaCB0YWJsZSwgcmVnYXJkbGVzcyBvZiBhIHZhbGlkIG5vZGUuICovCitzdGF0aWMgUHlfc3NpemVfdAorX29kaWN0X2dldF9pbmRleChQeU9EaWN0T2JqZWN0ICpvZCwgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCit7CisgICAgUHlEaWN0S2V5c09iamVjdCAqa2V5czsKKworICAgIGFzc2VydChrZXkgIT0gTlVMTCk7CisgICAga2V5cyA9ICgoUHlEaWN0T2JqZWN0ICopb2QpLT5tYV9rZXlzOworCisgICAgLyogRW5zdXJlIG9kX2Zhc3Rfbm9kZXMgYW5kIGRrX2VudHJpZXMgYXJlIGluIHN5bmMuICovCisgICAgaWYgKG9kLT5vZF9yZXNpemVfc2VudGluZWwgIT0ga2V5cyB8fAorICAgICAgICBvZC0+b2RfZmFzdF9ub2Rlc19zaXplICE9IGtleXMtPmRrX3NpemUpIHsKKyAgICAgICAgaW50IHJlc2l6ZV9yZXMgPSBfb2RpY3RfcmVzaXplKG9kKTsKKyAgICAgICAgaWYgKHJlc2l6ZV9yZXMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiBfb2RpY3RfZ2V0X2luZGV4X3JhdyhvZCwga2V5LCBoYXNoKTsKK30KKworLyogUmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBzb21lIGVycm9yIG9yIHRoZSBrZXkgd2FzIG5vdCBmb3VuZC4gKi8KK3N0YXRpYyBfT0RpY3ROb2RlICoKK19vZGljdF9maW5kX25vZGVfaGFzaChQeU9EaWN0T2JqZWN0ICpvZCwgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCit7CisgICAgUHlfc3NpemVfdCBpbmRleDsKKworICAgIGlmIChfb2RpY3RfRU1QVFkob2QpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpbmRleCA9IF9vZGljdF9nZXRfaW5kZXgob2QsIGtleSwgaGFzaCk7CisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG9kLT5vZF9mYXN0X25vZGVzW2luZGV4XTsKK30KKworc3RhdGljIF9PRGljdE5vZGUgKgorX29kaWN0X2ZpbmRfbm9kZShQeU9EaWN0T2JqZWN0ICpvZCwgUHlPYmplY3QgKmtleSkKK3sKKyAgICBQeV9zc2l6ZV90IGluZGV4OworICAgIFB5X2hhc2hfdCBoYXNoOworCisgICAgaWYgKF9vZGljdF9FTVBUWShvZCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGhhc2ggPSBQeU9iamVjdF9IYXNoKGtleSk7CisgICAgaWYgKGhhc2ggPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGluZGV4ID0gX29kaWN0X2dldF9pbmRleChvZCwga2V5LCBoYXNoKTsKKyAgICBpZiAoaW5kZXggPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gb2QtPm9kX2Zhc3Rfbm9kZXNbaW5kZXhdOworfQorCitzdGF0aWMgdm9pZAorX29kaWN0X2FkZF9oZWFkKFB5T0RpY3RPYmplY3QgKm9kLCBfT0RpY3ROb2RlICpub2RlKQoreworICAgIF9vZGljdG5vZGVfUFJFVihub2RlKSA9IE5VTEw7CisgICAgX29kaWN0bm9kZV9ORVhUKG5vZGUpID0gX29kaWN0X0ZJUlNUKG9kKTsKKyAgICBpZiAoX29kaWN0X0ZJUlNUKG9kKSA9PSBOVUxMKQorICAgICAgICBfb2RpY3RfTEFTVChvZCkgPSBub2RlOworICAgIGVsc2UKKyAgICAgICAgX29kaWN0bm9kZV9QUkVWKF9vZGljdF9GSVJTVChvZCkpID0gbm9kZTsKKyAgICBfb2RpY3RfRklSU1Qob2QpID0gbm9kZTsKKyAgICBvZC0+b2Rfc3RhdGUrKzsKK30KKworc3RhdGljIHZvaWQKK19vZGljdF9hZGRfdGFpbChQeU9EaWN0T2JqZWN0ICpvZCwgX09EaWN0Tm9kZSAqbm9kZSkKK3sKKyAgICBfb2RpY3Rub2RlX1BSRVYobm9kZSkgPSBfb2RpY3RfTEFTVChvZCk7CisgICAgX29kaWN0bm9kZV9ORVhUKG5vZGUpID0gTlVMTDsKKyAgICBpZiAoX29kaWN0X0xBU1Qob2QpID09IE5VTEwpCisgICAgICAgIF9vZGljdF9GSVJTVChvZCkgPSBub2RlOworICAgIGVsc2UKKyAgICAgICAgX29kaWN0bm9kZV9ORVhUKF9vZGljdF9MQVNUKG9kKSkgPSBub2RlOworICAgIF9vZGljdF9MQVNUKG9kKSA9IG5vZGU7CisgICAgb2QtPm9kX3N0YXRlKys7Cit9CisKKy8qIGFkZHMgdGhlIG5vZGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCAqLworc3RhdGljIGludAorX29kaWN0X2FkZF9uZXdfbm9kZShQeU9EaWN0T2JqZWN0ICpvZCwgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCit7CisgICAgUHlfc3NpemVfdCBpOworICAgIF9PRGljdE5vZGUgKm5vZGU7CisKKyAgICBQeV9JTkNSRUYoa2V5KTsKKyAgICBpID0gX29kaWN0X2dldF9pbmRleChvZCwga2V5LCBoYXNoKTsKKyAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCBrZXkpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIGlmIChvZC0+b2RfZmFzdF9ub2Rlc1tpXSAhPSBOVUxMKSB7CisgICAgICAgIC8qIFdlIGFscmVhZHkgaGF2ZSBhIG5vZGUgZm9yIHRoZSBrZXkgc28gdGhlcmUncyBubyBuZWVkIHRvIGFkZCBvbmUuICovCisgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBtdXN0IG5vdCBiZSBhZGRlZCB5ZXQgKi8KKyAgICBub2RlID0gKF9PRGljdE5vZGUgKilQeU1lbV9NQUxMT0Moc2l6ZW9mKF9PRGljdE5vZGUpKTsKKyAgICBpZiAobm9kZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgX29kaWN0bm9kZV9LRVkobm9kZSkgPSBrZXk7CisgICAgX29kaWN0bm9kZV9IQVNIKG5vZGUpID0gaGFzaDsKKyAgICBfb2RpY3RfYWRkX3RhaWwob2QsIG5vZGUpOworICAgIG9kLT5vZF9mYXN0X25vZGVzW2ldID0gbm9kZTsKKyAgICByZXR1cm4gMDsKK30KKworLyogUHV0dGluZyB0aGUgZGVjcmVmIGFmdGVyIHRoZSBmcmVlIGNhdXNlcyBwcm9ibGVtcy4gKi8KKyNkZWZpbmUgX29kaWN0bm9kZV9ERUFMTE9DKG5vZGUpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgUHlfREVDUkVGKF9vZGljdG5vZGVfS0VZKG5vZGUpKTsgXAorICAgICAgICBQeU1lbV9GUkVFKCh2b2lkICopbm9kZSk7IFwKKyAgICB9IHdoaWxlICgwKQorCisvKiBSZXBlYXRlZCBjYWxscyBvbiB0aGUgc2FtZSBub2RlIGFyZSBuby1vcHMuICovCitzdGF0aWMgdm9pZAorX29kaWN0X3JlbW92ZV9ub2RlKFB5T0RpY3RPYmplY3QgKm9kLCBfT0RpY3ROb2RlICpub2RlKQoreworICAgIGlmIChfb2RpY3RfRklSU1Qob2QpID09IG5vZGUpCisgICAgICAgIF9vZGljdF9GSVJTVChvZCkgPSBfb2RpY3Rub2RlX05FWFQobm9kZSk7CisgICAgZWxzZSBpZiAoX29kaWN0bm9kZV9QUkVWKG5vZGUpICE9IE5VTEwpCisgICAgICAgIF9vZGljdG5vZGVfTkVYVChfb2RpY3Rub2RlX1BSRVYobm9kZSkpID0gX29kaWN0bm9kZV9ORVhUKG5vZGUpOworCisgICAgaWYgKF9vZGljdF9MQVNUKG9kKSA9PSBub2RlKQorICAgICAgICBfb2RpY3RfTEFTVChvZCkgPSBfb2RpY3Rub2RlX1BSRVYobm9kZSk7CisgICAgZWxzZSBpZiAoX29kaWN0bm9kZV9ORVhUKG5vZGUpICE9IE5VTEwpCisgICAgICAgIF9vZGljdG5vZGVfUFJFVihfb2RpY3Rub2RlX05FWFQobm9kZSkpID0gX29kaWN0bm9kZV9QUkVWKG5vZGUpOworCisgICAgX29kaWN0bm9kZV9QUkVWKG5vZGUpID0gTlVMTDsKKyAgICBfb2RpY3Rub2RlX05FWFQobm9kZSkgPSBOVUxMOworICAgIG9kLT5vZF9zdGF0ZSsrOworfQorCisvKiBJZiBzb21lb25lIGNhbGxzIFB5RGljdF9EZWxJdGVtKCkgZGlyZWN0bHkgb24gYW4gT3JkZXJlZERpY3QsIHdlJ2xsCisgICBnZXQgYWxsIHNvcnRzIG9mIHByb2JsZW1zIGhlcmUuICBJbiBQeU9EaWN0X0RlbEl0ZW0gd2UgbWFrZSBzdXJlIHRvCisgICBjYWxsIF9vZGljdF9jbGVhcl9ub2RlIGZpcnN0LgorCisgICBUaGlzIG1hdHRlcnMgaW4gdGhlIGNhc2Ugb2YgY29sbGlkaW5nIGtleXMuICBTdXBwb3NlIHdlIGFkZCAzIGtleXM6CisgICBbQSwgQiwgQ10sIHdoZXJlIHRoZSBoYXNoIG9mIEMgY29sbGlkZXMgd2l0aCBBIGFuZCB0aGUgbmV4dCBwb3NzaWJsZQorICAgaW5kZXggaW4gdGhlIGhhc2ggdGFibGUgaXMgb2NjdXBpZWQgYnkgQi4gIElmIHdlIHJlbW92ZSBCIHRoZW4gZm9yIEMKKyAgIHRoZSBkaWN0J3MgbG9va25vZGUgZnVuYyB3aWxsIGdpdmUgdXMgdGhlIG9sZCBpbmRleCBvZiBCIGluc3RlYWQgb2YKKyAgIHRoZSBpbmRleCB3ZSBnb3QgYmVmb3JlIGRlbGV0aW5nIEIuICBIb3dldmVyLCB0aGUgbm9kZSBmb3IgQyBpbgorICAgb2RfZmFzdF9ub2RlcyBpcyBzdGlsbCBhdCB0aGUgb2xkIGRpY3QgaW5kZXggb2YgQy4gIFRodXMgdG8gYmUgc3VyZQorICAgdGhpbmdzIGRvbid0IGdldCBvdXQgb2Ygc3luYywgd2UgY2xlYXIgdGhlIG5vZGUgaW4gb2RfZmFzdF9ub2RlcworICAgKmJlZm9yZSogY2FsbGluZyBQeURpY3RfRGVsSXRlbS4KKworICAgVGhlIHNhbWUgbXVzdCBiZSBkb25lIGZvciBhbnkgb3RoZXIgT3JkZXJlZERpY3Qgb3BlcmF0aW9ucyB3aGVyZQorICAgd2UgbW9kaWZ5IG9kX2Zhc3Rfbm9kZXMuCisqLworc3RhdGljIGludAorX29kaWN0X2NsZWFyX25vZGUoUHlPRGljdE9iamVjdCAqb2QsIF9PRGljdE5vZGUgKm5vZGUsIFB5T2JqZWN0ICprZXksCisgICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCkKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICBhc3NlcnQoa2V5ICE9IE5VTEwpOworICAgIGlmIChfb2RpY3RfRU1QVFkob2QpKSB7CisgICAgICAgIC8qIExldCBsYXRlciBjb2RlIGRlY2lkZSBpZiB0aGlzIGlzIGEgS2V5RXJyb3IuICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGkgPSBfb2RpY3RfZ2V0X2luZGV4KG9kLCBrZXksIGhhc2gpOworICAgIGlmIChpIDwgMCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX09jY3VycmVkKCkgPyAtMSA6IDA7CisKKyAgICBpZiAobm9kZSA9PSBOVUxMKQorICAgICAgICBub2RlID0gb2QtPm9kX2Zhc3Rfbm9kZXNbaV07CisgICAgYXNzZXJ0KG5vZGUgPT0gb2QtPm9kX2Zhc3Rfbm9kZXNbaV0pOworICAgIGlmIChub2RlID09IE5VTEwpIHsKKyAgICAgICAgLyogTGV0IGxhdGVyIGNvZGUgZGVjaWRlIGlmIHRoaXMgaXMgYSBLZXlFcnJvci4gKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gTm93IGNsZWFyIHRoZSBub2RlLgorICAgIG9kLT5vZF9mYXN0X25vZGVzW2ldID0gTlVMTDsKKyAgICBfb2RpY3RfcmVtb3ZlX25vZGUob2QsIG5vZGUpOworICAgIF9vZGljdG5vZGVfREVBTExPQyhub2RlKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK19vZGljdF9jbGVhcl9ub2RlcyhQeU9EaWN0T2JqZWN0ICpvZCkKK3sKKyAgICBfT0RpY3ROb2RlICpub2RlLCAqbmV4dDsKKworICAgIF9vZGljdF9mcmVlX2Zhc3Rfbm9kZXMob2QpOworICAgIG9kLT5vZF9mYXN0X25vZGVzID0gTlVMTDsKKworICAgIG5vZGUgPSBfb2RpY3RfRklSU1Qob2QpOworICAgIF9vZGljdF9GSVJTVChvZCkgPSBOVUxMOworICAgIF9vZGljdF9MQVNUKG9kKSA9IE5VTEw7CisgICAgd2hpbGUgKG5vZGUgIT0gTlVMTCkgeworICAgICAgICBuZXh0ID0gX29kaWN0bm9kZV9ORVhUKG5vZGUpOworICAgICAgICBfb2RpY3Rub2RlX0RFQUxMT0Mobm9kZSk7CisgICAgICAgIG5vZGUgPSBuZXh0OworICAgIH0KK30KKworLyogVGhlcmUgaXNuJ3QgYW55IG1lbW9yeSBtYW5hZ2VtZW50IG9mIG5vZGVzIHBhc3QgdGhpcyBwb2ludC4gKi8KKyN1bmRlZiBfb2RpY3Rub2RlX0RFQUxMT0MKKworc3RhdGljIGludAorX29kaWN0X2tleXNfZXF1YWwoUHlPRGljdE9iamVjdCAqYSwgUHlPRGljdE9iamVjdCAqYikKK3sKKyAgICBfT0RpY3ROb2RlICpub2RlX2EsICpub2RlX2I7CisKKyAgICBub2RlX2EgPSBfb2RpY3RfRklSU1QoYSk7CisgICAgbm9kZV9iID0gX29kaWN0X0ZJUlNUKGIpOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChub2RlX2EgPT0gTlVMTCAmJiBub2RlX2IgPT0gTlVMTCkKKyAgICAgICAgICAgIC8qIHN1Y2Nlc3M6IGhpdCB0aGUgZW5kIG9mIGVhY2ggYXQgdGhlIHNhbWUgdGltZSAqLworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UgaWYgKG5vZGVfYSA9PSBOVUxMIHx8IG5vZGVfYiA9PSBOVUxMKQorICAgICAgICAgICAgLyogdW5lcXVhbCBsZW5ndGggKi8KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCByZXMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKV9vZGljdG5vZGVfS0VZKG5vZGVfYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKV9vZGljdG5vZGVfS0VZKG5vZGVfYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0VRKTsKKyAgICAgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICBlbHNlIGlmIChyZXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgLyogb3RoZXJ3aXNlIGl0IG11c3QgbWF0Y2gsIHNvIG1vdmUgb24gdG8gdGhlIG5leHQgb25lICovCisgICAgICAgICAgICBub2RlX2EgPSBfb2RpY3Rub2RlX05FWFQobm9kZV9hKTsKKyAgICAgICAgICAgIG5vZGVfYiA9IF9vZGljdG5vZGVfTkVYVChub2RlX2IpOworICAgICAgICB9CisgICAgfQorfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9yZGVyZWREaWN0IG1hcHBpbmcgbWV0aG9kcworICovCisKKy8qIG1wX2Fzc19zdWJzY3JpcHQ6IF9fc2V0aXRlbV9fKCkgYW5kIF9fZGVsaXRlbV9fKCkgKi8KKworc3RhdGljIGludAorb2RpY3RfbXBfYXNzX3N1YihQeU9EaWN0T2JqZWN0ICpvZCwgUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3KQoreworICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeU9EaWN0X0RlbEl0ZW0oKFB5T2JqZWN0ICopb2QsIHYpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFB5T0RpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilvZCwgdiwgdyk7Cit9CisKKy8qIHRwX2FzX21hcHBpbmcgKi8KKworc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgb2RpY3RfYXNfbWFwcGluZyA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm1wX2xlbmd0aCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyptcF9zdWJzY3JpcHQqLworICAgIChvYmpvYmphcmdwcm9jKW9kaWN0X21wX2Fzc19zdWIsICAgIC8qbXBfYXNzX3N1YnNjcmlwdCovCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9yZGVyZWREaWN0IG1ldGhvZHMKKyAqLworCisvKiBfX2RlbGl0ZW1fXygpICovCisKK1B5RG9jX1NUUlZBUihvZGljdF9kZWxpdGVtX19kb2NfXywgIm9kLl9fZGVsaXRlbV9fKHkpIDw9PT4gZGVsIG9kW3ldIik7CisKKy8qIF9fZXFfXygpICovCisKK1B5RG9jX1NUUlZBUihvZGljdF9lcV9fZG9jX18sCisib2QuX19lcV9fKHkpIDw9PT4gb2Q9PXkuICBDb21wYXJpc29uIHRvIGFub3RoZXIgT0QgaXMgb3JkZXItc2Vuc2l0aXZlIFxuXAorICAgICAgICB3aGlsZSBjb21wYXJpc29uIHRvIGEgcmVndWxhciBtYXBwaW5nIGlzIG9yZGVyLWluc2Vuc2l0aXZlLlxuXAorICAgICAgICAiKTsKKworLyogZm9yd2FyZCAqLworc3RhdGljIFB5T2JqZWN0ICogb2RpY3RfcmljaGNvbXBhcmUoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3LCBpbnQgb3ApOworCitzdGF0aWMgUHlPYmplY3QgKgorb2RpY3RfZXEoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiKQoreworICAgIHJldHVybiBvZGljdF9yaWNoY29tcGFyZShhLCBiLCBQeV9FUSk7Cit9CisKKy8qIF9faW5pdF9fKCkgKi8KKworUHlEb2NfU1RSVkFSKG9kaWN0X2luaXRfX2RvY19fLAorIkluaXRpYWxpemUgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5LiAgVGhlIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhc1xuXAorICAgICAgICByZWd1bGFyIGRpY3Rpb25hcmllcywgYnV0IGtleXdvcmQgYXJndW1lbnRzIGFyZSBub3QgcmVjb21tZW5kZWQgYmVjYXVzZVxuXAorICAgICAgICB0aGVpciBpbnNlcnRpb24gb3JkZXIgaXMgYXJiaXRyYXJ5LlxuXAorXG5cCisgICAgICAgICIpOworCisvKiBmb3J3YXJkICovCitzdGF0aWMgaW50IG9kaWN0X2luaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CisKKy8qIF9faXRlcl9fKCkgKi8KKworUHlEb2NfU1RSVkFSKG9kaWN0X2l0ZXJfX2RvY19fLCAib2QuX19pdGVyX18oKSA8PT0+IGl0ZXIob2QpIik7CisKK3N0YXRpYyBQeU9iamVjdCAqIG9kaWN0X2l0ZXIoUHlPRGljdE9iamVjdCAqc2VsZik7ICAvKiBmb3J3YXJkICovCisKKy8qIF9fbmVfXygpICovCisKKy8qIE1hcHBpbmcuX19uZV9fKCkgZG9lcyBub3QgaGF2ZSBhIGRvY3N0cmluZy4gKi8KK1B5RG9jX1NUUlZBUihvZGljdF9uZV9fZG9jX18sICIiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0X25lKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYikKK3sKKyAgICByZXR1cm4gb2RpY3RfcmljaGNvbXBhcmUoYSwgYiwgUHlfTkUpOworfQorCisvKiBfX3JlcHJfXygpICovCisKK1B5RG9jX1NUUlZBUihvZGljdF9yZXByX19kb2NfXywgIm9kLl9fcmVwcl9fKCkgPD09PiByZXByKG9kKSIpOworCitzdGF0aWMgUHlPYmplY3QgKiBvZGljdF9yZXByKFB5T0RpY3RPYmplY3QgKnNlbGYpOyAgLyogZm9yd2FyZCAqLworCisvKiBfX3NldGl0ZW1fXygpICovCisKK1B5RG9jX1NUUlZBUihvZGljdF9zZXRpdGVtX19kb2NfXywgIm9kLl9fc2V0aXRlbV9fKGksIHkpIDw9PT4gb2RbaV09eSIpOworCisvKiBmcm9ta2V5cygpICovCisKK1B5RG9jX1NUUlZBUihvZGljdF9mcm9ta2V5c19fZG9jX18sCisiT0QuZnJvbWtleXMoU1ssIHZdKSAtPiBOZXcgb3JkZXJlZCBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tIFMuXG5cCisgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byBOb25lLlxuXAorXG5cCisgICAgICAgICIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb2RpY3RfZnJvbWtleXMoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJpdGVyYWJsZSIsICJ2YWx1ZSIsIDB9OworICAgIFB5T2JqZWN0ICpzZXE7CisgICAgUHlPYmplY3QgKnZhbHVlID0gUHlfTm9uZTsKKworICAgIC8qIGJvdGggYm9ycm93ZWQgKi8KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfE86ZnJvbWtleXMiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlcSwgJnZhbHVlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIF9QeURpY3RfRnJvbUtleXMoY2xzLCBzZXEsIHZhbHVlKTsKK30KKworLyogX19zaXplb2ZfXygpICovCisKKy8qIE9yZGVyZWREaWN0Ll9fc2l6ZW9mX18oKSBkb2VzIG5vdCBoYXZlIGEgZG9jc3RyaW5nLiAqLworUHlEb2NfU1RSVkFSKG9kaWN0X3NpemVvZl9fZG9jX18sICIiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0X3NpemVvZihQeU9EaWN0T2JqZWN0ICpvZCkKK3sKKyAgICBQeV9zc2l6ZV90IHJlcyA9IF9QeURpY3RfU2l6ZU9mKChQeURpY3RPYmplY3QgKilvZCk7CisgICAgcmVzICs9IHNpemVvZihfT0RpY3ROb2RlICopICogX29kaWN0X0ZBU1RfU0laRShvZCk7ICAvKiBvZF9mYXN0X25vZGVzICovCisgICAgaWYgKCFfb2RpY3RfRU1QVFkob2QpKSB7CisgICAgICAgIHJlcyArPSBzaXplb2YoX09EaWN0Tm9kZSkgKiBQeU9EaWN0X1NJWkUob2QpOyAgLyogbGlua2VkLWxpc3QgKi8KKyAgICB9CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorCisvKiBfX3JlZHVjZV9fKCkgKi8KKworUHlEb2NfU1RSVkFSKG9kaWN0X3JlZHVjZV9fZG9jX18sICJSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdF9yZWR1Y2UocmVnaXN0ZXIgUHlPRGljdE9iamVjdCAqb2QpCit7CisgICAgX1B5X0lERU5USUZJRVIoX19kaWN0X18pOworICAgIF9QeV9JREVOVElGSUVSKGl0ZW1zKTsKKyAgICBQeU9iamVjdCAqZGljdCA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICppdGVtc19pdGVyLCAqaXRlbXMsICphcmdzID0gTlVMTDsKKworICAgIC8qIGNhcHR1cmUgYW55IGluc3RhbmNlIHN0YXRlICovCisgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopb2QsICZQeUlkX19fZGljdF9fKTsKKyAgICBpZiAoZGljdCA9PSBOVUxMKQorICAgICAgICBnb3RvIERvbmU7CisgICAgZWxzZSB7CisgICAgICAgIC8qIG9kLl9fZGljdF9fIGlzbid0IG5lY2Vzc2FyaWx5IGEgZGljdC4uLiAqLworICAgICAgICBQeV9zc2l6ZV90IGRpY3RfbGVuID0gUHlPYmplY3RfTGVuZ3RoKGRpY3QpOworICAgICAgICBpZiAoZGljdF9sZW4gPT0gLTEpCisgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgIGlmICghZGljdF9sZW4pIHsKKyAgICAgICAgICAgIC8qIG5vdGhpbmcgdG8gcGlja2xlIGluIG9kLl9fZGljdF9fICovCisgICAgICAgICAgICBQeV9DTEVBUihkaWN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGJ1aWxkIHRoZSByZXN1bHQgKi8KKyAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CisgICAgaWYgKGFyZ3MgPT0gTlVMTCkKKyAgICAgICAgZ290byBEb25lOworCisgICAgaXRlbXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncygoUHlPYmplY3QgKilvZCwgJlB5SWRfaXRlbXMsIE5VTEwpOworICAgIGlmIChpdGVtcyA9PSBOVUxMKQorICAgICAgICBnb3RvIERvbmU7CisKKyAgICBpdGVtc19pdGVyID0gUHlPYmplY3RfR2V0SXRlcihpdGVtcyk7CisgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICBpZiAoaXRlbXNfaXRlciA9PSBOVUxMKQorICAgICAgICBnb3RvIERvbmU7CisKKyAgICByZXN1bHQgPSBQeVR1cGxlX1BhY2soNSwgUHlfVFlQRShvZCksIGFyZ3MsIGRpY3QgPyBkaWN0IDogUHlfTm9uZSwgUHlfTm9uZSwgaXRlbXNfaXRlcik7CisgICAgUHlfREVDUkVGKGl0ZW1zX2l0ZXIpOworCitEb25lOgorICAgIFB5X1hERUNSRUYoZGljdCk7CisgICAgUHlfWERFQ1JFRihhcmdzKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHNldGRlZmF1bHQoKSAqLworCitQeURvY19TVFJWQVIob2RpY3Rfc2V0ZGVmYXVsdF9fZG9jX18sCisgICAgICAgICJvZC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBvZC5nZXQoayxkKSwgYWxzbyBzZXQgb2Rba109ZCBpZiBrIG5vdCBpbiBvZCIpOworCisvKiBTa2lwcyBfX21pc3NpbmdfXygpIGNhbGxzLiAqLworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0X3NldGRlZmF1bHQocmVnaXN0ZXIgUHlPRGljdE9iamVjdCAqb2QsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2V5IiwgImRlZmF1bHQiLCAwfTsKKyAgICBQeU9iamVjdCAqa2V5LCAqcmVzdWx0ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmFpbG9iaiA9IFB5X05vbmU7CisKKyAgICAvKiBib3RoIGJvcnJvd2VkICovCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xPOnNldGRlZmF1bHQiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSwgJmZhaWxvYmopKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChQeU9EaWN0X0NoZWNrRXhhY3Qob2QpKSB7CisgICAgICAgIHJlc3VsdCA9IFB5T0RpY3RfR2V0SXRlbVdpdGhFcnJvcihvZCwga2V5KTsgIC8qIGJvcnJvd2VkICovCisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBhc3NlcnQoX29kaWN0X2ZpbmRfbm9kZShvZCwga2V5KSA9PSBOVUxMKTsKKyAgICAgICAgICAgIGlmIChQeU9EaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopb2QsIGtleSwgZmFpbG9iaikgPj0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhaWxvYmo7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGZhaWxvYmopOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlfSU5DUkVGKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBleGlzdHMgPSBQeVNlcXVlbmNlX0NvbnRhaW5zKChQeU9iamVjdCAqKW9kLCBrZXkpOworICAgICAgICBpZiAoZXhpc3RzIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXhpc3RzKSB7CisgICAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9HZXRJdGVtKChQeU9iamVjdCAqKW9kLCBrZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5T2JqZWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopb2QsIGtleSwgZmFpbG9iaikgPj0gMCkgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFpbG9iajsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihmYWlsb2JqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIHBvcCgpICovCisKK1B5RG9jX1NUUlZBUihvZGljdF9wb3BfX2RvY19fLAorIm9kLnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuXAorICAgICAgICB2YWx1ZS4gIElmIGtleSBpcyBub3QgZm91bmQsIGQgaXMgcmV0dXJuZWQgaWYgZ2l2ZW4sIG90aGVyd2lzZSBLZXlFcnJvclxuXAorICAgICAgICBpcyByYWlzZWQuXG5cCitcblwKKyAgICAgICAgIik7CisKKy8qIGZvcndhcmQgKi8KK3N0YXRpYyBQeU9iamVjdCAqIF9vZGljdF9wb3BrZXkoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisKKy8qIFNraXBzIF9fbWlzc2luZ19fKCkgY2FsbHMuICovCitzdGF0aWMgUHlPYmplY3QgKgorb2RpY3RfcG9wKFB5T2JqZWN0ICpvZCwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJrZXkiLCAiZGVmYXVsdCIsIDB9OworICAgIFB5T2JqZWN0ICprZXksICpmYWlsb2JqID0gTlVMTDsKKworICAgIC8qIGJvcnJvd2VkICovCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT3xPOnBvcCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LCAmZmFpbG9iaikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIF9vZGljdF9wb3BrZXkob2QsIGtleSwgZmFpbG9iaik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfb2RpY3RfcG9wa2V5X2hhc2goUHlPYmplY3QgKm9kLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZmFpbG9iaiwKKyAgICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCkKK3sKKyAgICBfT0RpY3ROb2RlICpub2RlOworICAgIFB5T2JqZWN0ICp2YWx1ZSA9IE5VTEw7CisKKyAgICAvKiBQb3AgdGhlIG5vZGUgZmlyc3QgdG8gYXZvaWQgYSBwb3NzaWJsZSBkaWN0IHJlc2l6ZSAoZHVlIHRvCisgICAgICAgZXZhbCBsb29wIHJlZW50cmFuY3kpIGFuZCBjb21wbGljYXRpb25zIGR1ZSB0byBoYXNoIGNvbGxpc2lvbgorICAgICAgIHJlc29sdXRpb24uICovCisgICAgbm9kZSA9IF9vZGljdF9maW5kX25vZGVfaGFzaCgoUHlPRGljdE9iamVjdCAqKW9kLCBrZXksIGhhc2gpOworICAgIGlmIChub2RlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCByZXMgPSBfb2RpY3RfY2xlYXJfbm9kZSgoUHlPRGljdE9iamVjdCAqKW9kLCBub2RlLCBrZXksIGhhc2gpOworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBOb3cgZGVsZXRlIHRoZSB2YWx1ZSBmcm9tIHRoZSBkaWN0LiAqLworICAgIGlmIChQeU9EaWN0X0NoZWNrRXhhY3Qob2QpKSB7CisgICAgICAgIGlmIChub2RlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gX1B5RGljdF9HZXRJdGVtX0tub3duSGFzaChvZCwga2V5LCBoYXNoKTsgIC8qIGJvcnJvd2VkICovCisgICAgICAgICAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKF9QeURpY3RfRGVsSXRlbV9Lbm93bkhhc2gob2QsIGtleSwgaGFzaCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaW50IGV4aXN0cyA9IFB5U2VxdWVuY2VfQ29udGFpbnMob2QsIGtleSk7CisgICAgICAgIGlmIChleGlzdHMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChleGlzdHMpIHsKKyAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0SXRlbShvZCwga2V5KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0ob2QsIGtleSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfQ0xFQVIodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFwcGx5IHRoZSBmYWxsYmFjayB2YWx1ZSwgaWYgbmVjZXNzYXJ5LiAqLworICAgIGlmICh2YWx1ZSA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChmYWlsb2JqKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGZhaWxvYmo7CisgICAgICAgICAgICBQeV9JTkNSRUYoZmFpbG9iaik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGtleSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfb2RpY3RfcG9wa2V5KFB5T2JqZWN0ICpvZCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKmZhaWxvYmopCit7CisgICAgUHlfaGFzaF90IGhhc2ggPSBQeU9iamVjdF9IYXNoKGtleSk7CisgICAgaWYgKGhhc2ggPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9vZGljdF9wb3BrZXlfaGFzaChvZCwga2V5LCBmYWlsb2JqLCBoYXNoKTsKK30KKworLyogcG9waXRlbSgpICovCisKK1B5RG9jX1NUUlZBUihvZGljdF9wb3BpdGVtX19kb2NfXywKKyJvZC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZXR1cm4gYW5kIHJlbW92ZSBhIChrZXksIHZhbHVlKSBwYWlyLlxuXAorICAgICAgICBQYWlycyBhcmUgcmV0dXJuZWQgaW4gTElGTyBvcmRlciBpZiBsYXN0IGlzIHRydWUgb3IgRklGTyBvcmRlciBpZiBmYWxzZS5cblwKK1xuXAorICAgICAgICAiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0X3BvcGl0ZW0oUHlPYmplY3QgKm9kLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Imxhc3QiLCAwfTsKKyAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICppdGVtID0gTlVMTDsKKyAgICBfT0RpY3ROb2RlICpub2RlOworICAgIGludCBsYXN0ID0gMTsKKworICAgIC8qIHB1bGwgdGhlIGl0ZW0gKi8KKworICAgIC8qIGJvcnJvd2VkICovCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHA6cG9waXRlbSIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGFzdCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKF9vZGljdF9FTVBUWShvZCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0tleUVycm9yLCAiZGljdGlvbmFyeSBpcyBlbXB0eSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBub2RlID0gbGFzdCA/IF9vZGljdF9MQVNUKG9kKSA6IF9vZGljdF9GSVJTVChvZCk7CisgICAga2V5ID0gX29kaWN0bm9kZV9LRVkobm9kZSk7CisgICAgUHlfSU5DUkVGKGtleSk7CisgICAgdmFsdWUgPSBfb2RpY3RfcG9wa2V5X2hhc2gob2QsIGtleSwgTlVMTCwgX29kaWN0bm9kZV9IQVNIKG5vZGUpKTsKKyAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaXRlbSA9IFB5VHVwbGVfUGFjaygyLCBrZXksIHZhbHVlKTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIHJldHVybiBpdGVtOworfQorCisvKiBrZXlzKCkgKi8KKworLyogTXV0YWJsZU1hcHBpbmcua2V5cygpIGRvZXMgbm90IGhhdmUgYSBkb2NzdHJpbmcuICovCitQeURvY19TVFJWQVIob2RpY3Rfa2V5c19fZG9jX18sICIiKTsKKworc3RhdGljIFB5T2JqZWN0ICogb2RpY3RrZXlzX25ldyhQeU9iamVjdCAqb2QpOyAgLyogZm9yd2FyZCAqLworCisvKiB2YWx1ZXMoKSAqLworCisvKiBNdXRhYmxlTWFwcGluZy52YWx1ZXMoKSBkb2VzIG5vdCBoYXZlIGEgZG9jc3RyaW5nLiAqLworUHlEb2NfU1RSVkFSKG9kaWN0X3ZhbHVlc19fZG9jX18sICIiKTsKKworc3RhdGljIFB5T2JqZWN0ICogb2RpY3R2YWx1ZXNfbmV3KFB5T2JqZWN0ICpvZCk7ICAvKiBmb3J3YXJkICovCisKKy8qIGl0ZW1zKCkgKi8KKworLyogTXV0YWJsZU1hcHBpbmcuaXRlbXMoKSBkb2VzIG5vdCBoYXZlIGEgZG9jc3RyaW5nLiAqLworUHlEb2NfU1RSVkFSKG9kaWN0X2l0ZW1zX19kb2NfXywgIiIpOworCitzdGF0aWMgUHlPYmplY3QgKiBvZGljdGl0ZW1zX25ldyhQeU9iamVjdCAqb2QpOyAgLyogZm9yd2FyZCAqLworCisvKiB1cGRhdGUoKSAqLworCisvKiBNdXRhYmxlTWFwcGluZy51cGRhdGUoKSBkb2VzIG5vdCBoYXZlIGEgZG9jc3RyaW5nLiAqLworUHlEb2NfU1RSVkFSKG9kaWN0X3VwZGF0ZV9fZG9jX18sICIiKTsKKworLyogZm9yd2FyZCAqLworc3RhdGljIFB5T2JqZWN0ICogbXV0YWJsZW1hcHBpbmdfdXBkYXRlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworCisjZGVmaW5lIG9kaWN0X3VwZGF0ZSBtdXRhYmxlbWFwcGluZ191cGRhdGUKKworLyogY2xlYXIoKSAqLworCitQeURvY19TVFJWQVIob2RpY3RfY2xlYXJfX2RvY19fLAorICAgICAgICAgICAgICJvZC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gb2QuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdF9jbGVhcihyZWdpc3RlciBQeU9EaWN0T2JqZWN0ICpvZCkKK3sKKyAgICBQeURpY3RfQ2xlYXIoKFB5T2JqZWN0ICopb2QpOworICAgIF9vZGljdF9jbGVhcl9ub2RlcyhvZCk7CisgICAgaWYgKF9vZGljdF9yZXNpemUob2QpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qIGNvcHkoKSAqLworCisvKiBmb3J3YXJkICovCitzdGF0aWMgaW50IF9QeU9EaWN0X1NldEl0ZW1fS25vd25IYXNoKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2hhc2hfdCk7CisKK1B5RG9jX1NUUlZBUihvZGljdF9jb3B5X19kb2NfXywgIm9kLmNvcHkoKSAtPiBhIHNoYWxsb3cgY29weSBvZiBvZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb2RpY3RfY29weShyZWdpc3RlciBQeU9EaWN0T2JqZWN0ICpvZCkKK3sKKyAgICBfT0RpY3ROb2RlICpub2RlOworICAgIFB5T2JqZWN0ICpvZF9jb3B5OworCisgICAgaWYgKFB5T0RpY3RfQ2hlY2tFeGFjdChvZCkpCisgICAgICAgIG9kX2NvcHkgPSBQeU9EaWN0X05ldygpOworICAgIGVsc2UKKyAgICAgICAgb2RfY29weSA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoKFB5T2JqZWN0ICopUHlfVFlQRShvZCksIE5VTEwpOworICAgIGlmIChvZF9jb3B5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5T0RpY3RfQ2hlY2tFeGFjdChvZCkpIHsKKyAgICAgICAgX29kaWN0X0ZPUkVBQ0gob2QsIG5vZGUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBfb2RpY3Rub2RlX0tFWShub2RlKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IF9vZGljdG5vZGVfVkFMVUUobm9kZSwgb2QpOworICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5T0RpY3RfU2V0SXRlbV9Lbm93bkhhc2goKFB5T2JqZWN0ICopb2RfY29weSwga2V5LCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb2RpY3Rub2RlX0hBU0gobm9kZSkpICE9IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBfb2RpY3RfRk9SRUFDSChvZCwgbm9kZSkgeworICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5T2JqZWN0X0dldEl0ZW0oKFB5T2JqZWN0ICopb2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vZGljdG5vZGVfS0VZKG5vZGUpKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopb2RfY29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29kaWN0bm9kZV9LRVkobm9kZSksIHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBvZF9jb3B5OworCitmYWlsOgorICAgIFB5X0RFQ1JFRihvZF9jb3B5KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogX19yZXZlcnNlZF9fKCkgKi8KKworUHlEb2NfU1RSVkFSKG9kaWN0X3JldmVyc2VkX19kb2NfXywgIm9kLl9fcmV2ZXJzZWRfXygpIDw9PT4gcmV2ZXJzZWQob2QpIik7CisKKyNkZWZpbmUgX29kaWN0X0lURVJfUkVWRVJTRUQgMQorI2RlZmluZSBfb2RpY3RfSVRFUl9LRVlTIDIKKyNkZWZpbmUgX29kaWN0X0lURVJfVkFMVUVTIDQKKworLyogZm9yd2FyZCAqLworc3RhdGljIFB5T2JqZWN0ICogb2RpY3RpdGVyX25ldyhQeU9EaWN0T2JqZWN0ICosIGludCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdF9yZXZlcnNlZChQeU9EaWN0T2JqZWN0ICpvZCkKK3sKKyAgICByZXR1cm4gb2RpY3RpdGVyX25ldyhvZCwgX29kaWN0X0lURVJfS0VZU3xfb2RpY3RfSVRFUl9SRVZFUlNFRCk7Cit9CisKKy8qIG1vdmVfdG9fZW5kKCkgKi8KKworUHlEb2NfU1RSVkFSKG9kaWN0X21vdmVfdG9fZW5kX19kb2NfXywKKyJNb3ZlIGFuIGV4aXN0aW5nIGVsZW1lbnQgdG8gdGhlIGVuZCAob3IgYmVnaW5uaW5nIGlmIGxhc3Q9PUZhbHNlKS5cblwKK1xuXAorICAgICAgICBSYWlzZXMgS2V5RXJyb3IgaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuXG5cCisgICAgICAgIFdoZW4gbGFzdD1UcnVlLCBhY3RzIGxpa2UgYSBmYXN0IHZlcnNpb24gb2Ygc2VsZltrZXldPXNlbGYucG9wKGtleSkuXG5cCitcblwKKyAgICAgICAgIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdF9tb3ZlX3RvX2VuZChQeU9EaWN0T2JqZWN0ICpvZCwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJrZXkiLCAibGFzdCIsIDB9OworICAgIFB5T2JqZWN0ICprZXk7CisgICAgaW50IGxhc3QgPSAxOworICAgIF9PRGljdE5vZGUgKm5vZGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPfHA6bW92ZV90b19lbmQiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSwgJmxhc3QpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChfb2RpY3RfRU1QVFkob2QpKSB7CisgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5vZGUgPSBsYXN0ID8gX29kaWN0X0xBU1Qob2QpIDogX29kaWN0X0ZJUlNUKG9kKTsKKyAgICBpZiAoa2V5ICE9IF9vZGljdG5vZGVfS0VZKG5vZGUpKSB7CisgICAgICAgIG5vZGUgPSBfb2RpY3RfZmluZF9ub2RlKG9kLCBrZXkpOworICAgICAgICBpZiAobm9kZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCBrZXkpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxhc3QpIHsKKyAgICAgICAgICAgIC8qIE9ubHkgbW92ZSBpZiBub3QgYWxyZWFkeSB0aGUgbGFzdCBvbmUuICovCisgICAgICAgICAgICBpZiAobm9kZSAhPSBfb2RpY3RfTEFTVChvZCkpIHsKKyAgICAgICAgICAgICAgICBfb2RpY3RfcmVtb3ZlX25vZGUob2QsIG5vZGUpOworICAgICAgICAgICAgICAgIF9vZGljdF9hZGRfdGFpbChvZCwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBPbmx5IG1vdmUgaWYgbm90IGFscmVhZHkgdGhlIGZpcnN0IG9uZS4gKi8KKyAgICAgICAgICAgIGlmIChub2RlICE9IF9vZGljdF9GSVJTVChvZCkpIHsKKyAgICAgICAgICAgICAgICBfb2RpY3RfcmVtb3ZlX25vZGUob2QsIG5vZGUpOworICAgICAgICAgICAgICAgIF9vZGljdF9hZGRfaGVhZChvZCwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKworLyogdHBfbWV0aG9kcyAqLworCitzdGF0aWMgUHlNZXRob2REZWYgb2RpY3RfbWV0aG9kc1tdID0geworCisgICAgLyogZXhwbGljaXRseSBkZWZpbmVkIHNvIHdlIGNhbiBhbGlnbiBkb2NzdHJpbmdzIHdpdGgKKyAgICAgKiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCAqLworICAgIHsiX19kZWxpdGVtX18iLCAgICAgKFB5Q0Z1bmN0aW9uKW9kaWN0X21wX2Fzc19zdWIsICBNRVRIX05PQVJHUywKKyAgICAgb2RpY3RfZGVsaXRlbV9fZG9jX199LAorICAgIHsiX19lcV9fIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9kaWN0X2VxLCAgICAgICAgICBNRVRIX05PQVJHUywKKyAgICAgb2RpY3RfZXFfX2RvY19ffSwKKyAgICB7Il9faW5pdF9fIiwgICAgICAgIChQeUNGdW5jdGlvbilvZGljdF9pbml0LCAgICAgICAgTUVUSF9OT0FSR1MsCisgICAgIG9kaWN0X2luaXRfX2RvY19ffSwKKyAgICB7Il9faXRlcl9fIiwgICAgICAgIChQeUNGdW5jdGlvbilvZGljdF9pdGVyLCAgICAgICAgTUVUSF9OT0FSR1MsCisgICAgIG9kaWN0X2l0ZXJfX2RvY19ffSwKKyAgICB7Il9fbmVfXyIsICAgICAgICAgIChQeUNGdW5jdGlvbilvZGljdF9uZSwgICAgICAgICAgTUVUSF9OT0FSR1MsCisgICAgIG9kaWN0X25lX19kb2NfX30sCisgICAgeyJfX3JlcHJfXyIsICAgICAgICAoUHlDRnVuY3Rpb24pb2RpY3RfcmVwciwgICAgICAgIE1FVEhfTk9BUkdTLAorICAgICBvZGljdF9yZXByX19kb2NfX30sCisgICAgeyJfX3NldGl0ZW1fXyIsICAgICAoUHlDRnVuY3Rpb24pb2RpY3RfbXBfYXNzX3N1YiwgIE1FVEhfTk9BUkdTLAorICAgICBvZGljdF9zZXRpdGVtX19kb2NfX30sCisgICAgeyJmcm9ta2V5cyIsICAgICAgICAoUHlDRnVuY3Rpb24pb2RpY3RfZnJvbWtleXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMgfCBNRVRIX0NMQVNTLCBvZGljdF9mcm9ta2V5c19fZG9jX199LAorCisgICAgLyogb3ZlcnJpZGRlbiBkaWN0IG1ldGhvZHMgKi8KKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilvZGljdF9zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCisgICAgIG9kaWN0X3NpemVvZl9fZG9jX199LAorICAgIHsiX19yZWR1Y2VfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKW9kaWN0X3JlZHVjZSwgICAgICBNRVRIX05PQVJHUywKKyAgICAgb2RpY3RfcmVkdWNlX19kb2NfX30sCisgICAgeyJzZXRkZWZhdWx0IiwgICAgICAoUHlDRnVuY3Rpb24pb2RpY3Rfc2V0ZGVmYXVsdCwKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgb2RpY3Rfc2V0ZGVmYXVsdF9fZG9jX199LAorICAgIHsicG9wIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9kaWN0X3BvcCwKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgb2RpY3RfcG9wX19kb2NfX30sCisgICAgeyJwb3BpdGVtIiwgICAgICAgICAoUHlDRnVuY3Rpb24pb2RpY3RfcG9waXRlbSwKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgb2RpY3RfcG9waXRlbV9fZG9jX199LAorICAgIHsia2V5cyIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9kaWN0a2V5c19uZXcsICAgICBNRVRIX05PQVJHUywKKyAgICAgb2RpY3Rfa2V5c19fZG9jX199LAorICAgIHsidmFsdWVzIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9kaWN0dmFsdWVzX25ldywgICBNRVRIX05PQVJHUywKKyAgICAgb2RpY3RfdmFsdWVzX19kb2NfX30sCisgICAgeyJpdGVtcyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pb2RpY3RpdGVtc19uZXcsICAgIE1FVEhfTk9BUkdTLAorICAgICBvZGljdF9pdGVtc19fZG9jX199LAorICAgIHsidXBkYXRlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9kaWN0X3VwZGF0ZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKKyAgICAgb2RpY3RfdXBkYXRlX19kb2NfX30sCisgICAgeyJjbGVhciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pb2RpY3RfY2xlYXIsICAgICAgIE1FVEhfTk9BUkdTLAorICAgICBvZGljdF9jbGVhcl9fZG9jX199LAorICAgIHsiY29weSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9kaWN0X2NvcHksICAgICAgICBNRVRIX05PQVJHUywKKyAgICAgb2RpY3RfY29weV9fZG9jX199LAorCisgICAgLyogbmV3IG1ldGhvZHMgKi8KKyAgICB7Il9fcmV2ZXJzZWRfXyIsICAgIChQeUNGdW5jdGlvbilvZGljdF9yZXZlcnNlZCwgICAgTUVUSF9OT0FSR1MsCisgICAgIG9kaWN0X3JldmVyc2VkX19kb2NfX30sCisgICAgeyJtb3ZlX3RvX2VuZCIsICAgICAoUHlDRnVuY3Rpb24pb2RpY3RfbW92ZV90b19lbmQsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIG9kaWN0X21vdmVfdG9fZW5kX19kb2NfX30sCisKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT3JkZXJlZERpY3QgbWVtYmVycworICovCisKKy8qIHRwX21lbWJlcnMgKi8KKworc3RhdGljIFB5TWVtYmVyRGVmIG9kaWN0X21lbWJlcnNbXSA9IHsKKyAgICB7Il9fZGljdF9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5T0RpY3RPYmplY3QsIG9kX2luc3RfZGljdCksIFJFQURPTkxZfSwKKyAgICB7MH0KK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT3JkZXJlZERpY3QgdHlwZSBzbG90IG1ldGhvZHMKKyAqLworCisvKiB0cF9kZWFsbG9jICovCisKK3N0YXRpYyB2b2lkCitvZGljdF9kZWFsbG9jKFB5T0RpY3RPYmplY3QgKnNlbGYpCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKworICAgIFB5T2JqZWN0X0dDX1VuVHJhY2soc2VsZik7CisgICAgUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihzZWxmKQorCisgICAgUHlfWERFQ1JFRihzZWxmLT5vZF9pbnN0X2RpY3QpOworICAgIGlmIChzZWxmLT5vZF93ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKXNlbGYpOworCisgICAgX29kaWN0X2NsZWFyX25vZGVzKHNlbGYpOworCisgICAgLyogQ2FsbCB0aGUgYmFzZSB0cF9kZWFsbG9jKCkuICBTaW5jZSBpdCB0b28gdXNlcyB0aGUgdHJhc2hjYW4gbWVjaGFuaXNtLAorICAgICAqIHRlbXBvcmFyaWx5IGRlY3JlbWVudCB0cmFzaF9kZWxldGVfbmVzdGluZyB0byBwcmV2ZW50IHRyaWdnZXJpbmcgaXQKKyAgICAgKiBhbmQgcHV0dGluZyB0aGUgcGFydGlhbGx5IGRlYWxsb2NhdGVkIG9iamVjdCBvbiB0aGUgdHJhc2hjYW4ncworICAgICAqIHRvLWJlLWRlbGV0ZWQtbGF0ZXIgbGlzdC4KKyAgICAgKi8KKyAgICAtLXRzdGF0ZS0+dHJhc2hfZGVsZXRlX25lc3Rpbmc7CisgICAgYXNzZXJ0KF90c3RhdGUtPnRyYXNoX2RlbGV0ZV9uZXN0aW5nIDwgUHlUcmFzaF9VTldJTkRfTEVWRUwpOworICAgIFB5RGljdF9UeXBlLnRwX2RlYWxsb2MoKFB5T2JqZWN0ICopc2VsZik7CisgICAgKyt0c3RhdGUtPnRyYXNoX2RlbGV0ZV9uZXN0aW5nOworCisgICAgUHlfVFJBU0hDQU5fU0FGRV9FTkQoc2VsZikKK307CisKKy8qIHRwX3JlcHIgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0X3JlcHIoUHlPRGljdE9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgaTsKKyAgICBfUHlfSURFTlRJRklFUihpdGVtcyk7CisgICAgUHlPYmplY3QgKnBpZWNlcyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmNsYXNzbmFtZTsKKworICAgIGNsYXNzbmFtZSA9IHN0cnJjaHIoUHlfVFlQRShzZWxmKS0+dHBfbmFtZSwgJy4nKTsKKyAgICBpZiAoY2xhc3NuYW1lID09IE5VTEwpCisgICAgICAgIGNsYXNzbmFtZSA9IFB5X1RZUEUoc2VsZiktPnRwX25hbWU7CisgICAgZWxzZQorICAgICAgICBjbGFzc25hbWUrKzsKKworICAgIGlmIChQeU9EaWN0X1NJWkUoc2VsZikgPT0gMCkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcygpIiwgY2xhc3NuYW1lKTsKKworICAgIGkgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0ICopc2VsZik7CisgICAgaWYgKGkgIT0gMCkgeworICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygiLi4uIikgOiBOVUxMOworICAgIH0KKworICAgIGlmIChQeU9EaWN0X0NoZWNrRXhhY3Qoc2VsZikpIHsKKyAgICAgICAgUHlfc3NpemVfdCBjb3VudCA9IDA7CisgICAgICAgIF9PRGljdE5vZGUgKm5vZGU7CisgICAgICAgIHBpZWNlcyA9IFB5TGlzdF9OZXcoUHlPRGljdF9TSVpFKHNlbGYpKTsKKyAgICAgICAgaWYgKHBpZWNlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBEb25lOworCisgICAgICAgIF9vZGljdF9GT1JFQUNIKHNlbGYsIG5vZGUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpwYWlyOworICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IF9vZGljdG5vZGVfS0VZKG5vZGUpOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gX29kaWN0bm9kZV9WQUxVRShub2RlLCBzZWxmKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGtleSk7CisgICAgICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFpciA9IFB5VHVwbGVfUGFjaygyLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChwYWlyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBEb25lOworCisgICAgICAgICAgICBpZiAoY291bnQgPCBQeUxpc3RfR0VUX1NJWkUocGllY2VzKSkKKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0ocGllY2VzLCBjb3VudCwgcGFpcik7ICAvKiBzdGVhbHMgcmVmZXJlbmNlICovCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChwaWVjZXMsIHBhaXIpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocGFpcik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHBhaXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY291bnQgPCBQeUxpc3RfR0VUX1NJWkUocGllY2VzKSkKKyAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShwaWVjZXMpID0gY291bnQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqaXRlbXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncygoUHlPYmplY3QgKilzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9pdGVtcywgTlVMTCk7CisgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICBwaWVjZXMgPSBQeVNlcXVlbmNlX0xpc3QoaXRlbXMpOworICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgICAgICBpZiAocGllY2VzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVSKSIsIGNsYXNzbmFtZSwgcGllY2VzKTsKKworRG9uZToKKyAgICBQeV9YREVDUkVGKHBpZWNlcyk7CisgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXNlbGYpOworICAgIHJldHVybiByZXN1bHQ7Cit9OworCisvKiB0cF9kb2MgKi8KKworUHlEb2NfU1RSVkFSKG9kaWN0X2RvYywKKyAgICAgICAgIkRpY3Rpb25hcnkgdGhhdCByZW1lbWJlcnMgaW5zZXJ0aW9uIG9yZGVyIik7CisKKy8qIHRwX3RyYXZlcnNlICovCisKK3N0YXRpYyBpbnQKK29kaWN0X3RyYXZlcnNlKFB5T0RpY3RPYmplY3QgKm9kLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBfT0RpY3ROb2RlICpub2RlOworCisgICAgUHlfVklTSVQob2QtPm9kX2luc3RfZGljdCk7CisgICAgUHlfVklTSVQob2QtPm9kX3dlYWtyZWZsaXN0KTsKKyAgICBfb2RpY3RfRk9SRUFDSChvZCwgbm9kZSkgeworICAgICAgICBQeV9WSVNJVChfb2RpY3Rub2RlX0tFWShub2RlKSk7CisgICAgfQorICAgIHJldHVybiBQeURpY3RfVHlwZS50cF90cmF2ZXJzZSgoUHlPYmplY3QgKilvZCwgdmlzaXQsIGFyZyk7Cit9CisKKy8qIHRwX2NsZWFyICovCisKK3N0YXRpYyBpbnQKK29kaWN0X3RwX2NsZWFyKFB5T0RpY3RPYmplY3QgKm9kKQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgUHlfQ0xFQVIob2QtPm9kX2luc3RfZGljdCk7CisgICAgUHlfQ0xFQVIob2QtPm9kX3dlYWtyZWZsaXN0KTsKKyAgICByZXMgPSBvZGljdF9jbGVhcihvZCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHRwX3JpY2hjb21wYXJlICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdF9yaWNoY29tcGFyZShQeU9iamVjdCAqdiwgUHlPYmplY3QgKncsIGludCBvcCkKK3sKKyAgICBpZiAoIVB5T0RpY3RfQ2hlY2sodikgfHwgIVB5RGljdF9DaGVjayh3KSkgeworICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisgICAgfQorCisgICAgaWYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXMsICpjbXA7CisgICAgICAgIGludCBlcTsKKworICAgICAgICBjbXAgPSBQeURpY3RfVHlwZS50cF9yaWNoY29tcGFyZSh2LCB3LCBvcCk7CisgICAgICAgIGlmIChjbXAgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoIVB5T0RpY3RfQ2hlY2sodykpCisgICAgICAgICAgICByZXR1cm4gY21wOworICAgICAgICBpZiAob3AgPT0gUHlfRVEgJiYgY21wID09IFB5X0ZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIGNtcDsKKyAgICAgICAgaWYgKG9wID09IFB5X05FICYmIGNtcCA9PSBQeV9UcnVlKQorICAgICAgICAgICAgcmV0dXJuIGNtcDsKKyAgICAgICAgUHlfREVDUkVGKGNtcCk7CisKKyAgICAgICAgLyogVHJ5IGNvbXBhcmluZyBvZGljdCBrZXlzLiAqLworICAgICAgICBlcSA9IF9vZGljdF9rZXlzX2VxdWFsKChQeU9EaWN0T2JqZWN0ICopdiwgKFB5T0RpY3RPYmplY3QgKil3KTsKKyAgICAgICAgaWYgKGVxIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIHJlcyA9IChlcSA9PSAob3AgPT0gUHlfRVEpKSA/IFB5X1RydWUgOiBQeV9GYWxzZTsKKyAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworICAgIH0KK307CisKKy8qIHRwX2l0ZXIgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0X2l0ZXIoUHlPRGljdE9iamVjdCAqb2QpCit7CisgICAgcmV0dXJuIG9kaWN0aXRlcl9uZXcob2QsIF9vZGljdF9JVEVSX0tFWVMpOworfTsKKworLyogdHBfaW5pdCAqLworCitzdGF0aWMgaW50CitvZGljdF9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5T2JqZWN0X0xlbmd0aChhcmdzKTsKKworICAgIGlmIChsZW4gPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobGVuID4gMSkgeworICAgICAgICBjaGFyICptc2cgPSAiZXhwZWN0ZWQgYXQgbW9zdCAxIGFyZ3VtZW50cywgZ290ICVkIjsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgbXNnLCBsZW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogX19pbml0X18oKSB0cmlnZ2VyaW5nIHVwZGF0ZSgpIGlzIGp1c3QgdGhlIHdheSB0aGluZ3MgYXJlISAqLworICAgIHJlcyA9IG9kaWN0X3VwZGF0ZShzZWxmLCBhcmdzLCBrd2RzKTsKKyAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9OworCisvKiB0cF9uZXcgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9EaWN0T2JqZWN0ICpvZDsKKworICAgIGRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBvZCA9IChQeU9EaWN0T2JqZWN0ICopUHlEaWN0X1R5cGUudHBfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOworICAgIGlmIChvZCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgb2QtPm9kX2luc3RfZGljdCA9IGRpY3Q7CisgICAgLyogdHlwZSBjb25zdHJ1Y3RvciBmaWxscyB0aGUgbWVtb3J5IHdpdGggemVyb3MgKHNlZQorICAgICAgIFB5VHlwZV9HZW5lcmljQWxsb2MoKSksIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHRoZW0gdG8gemVybyBhZ2FpbiAqLworICAgIGlmIChfb2RpY3RfcmVzaXplKG9kKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKG9kKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIChQeU9iamVjdCopb2Q7Cit9CisKKy8qIFB5T0RpY3RfVHlwZSAqLworCitQeVR5cGVPYmplY3QgUHlPRGljdF9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgImNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IiwgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgc2l6ZW9mKFB5T0RpY3RPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgKGRlc3RydWN0b3Ipb2RpY3RfZGVhbGxvYywgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAocmVwcmZ1bmMpb2RpY3RfcmVwciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAmb2RpY3RfYXNfbWFwcGluZywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCisgICAgb2RpY3RfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAodHJhdmVyc2Vwcm9jKW9kaWN0X3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgKGlucXVpcnkpb2RpY3RfdHBfY2xlYXIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIChyaWNoY21wZnVuYylvZGljdF9yaWNoY29tcGFyZSwgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBvZmZzZXRvZihQeU9EaWN0T2JqZWN0LCBvZF93ZWFrcmVmbGlzdCksICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgKGdldGl0ZXJmdW5jKW9kaWN0X2l0ZXIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIG9kaWN0X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIG9kaWN0X21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgJlB5RGljdF9UeXBlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIG9mZnNldG9mKFB5T0RpY3RPYmplY3QsIG9kX2luc3RfZGljdCksICAgICAgLyogdHBfZGljdG9mZnNldCAqLworICAgIChpbml0cHJvYylvZGljdF9pbml0LCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICAobmV3ZnVuYylvZGljdF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB0aGUgcHVibGljIE9yZGVyZWREaWN0IEFQSQorICovCisKK1B5T2JqZWN0ICoKK1B5T0RpY3RfTmV3KHZvaWQpIHsKKyAgICByZXR1cm4gb2RpY3RfbmV3KCZQeU9EaWN0X1R5cGUsIE5VTEwsIE5VTEwpOworfTsKKworc3RhdGljIGludAorX1B5T0RpY3RfU2V0SXRlbV9Lbm93bkhhc2goUHlPYmplY3QgKm9kLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCkKK3sKKyAgICBpbnQgcmVzID0gX1B5RGljdF9TZXRJdGVtX0tub3duSGFzaChvZCwga2V5LCB2YWx1ZSwgaGFzaCk7CisgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgIHJlcyA9IF9vZGljdF9hZGRfbmV3X25vZGUoKFB5T0RpY3RPYmplY3QgKilvZCwga2V5LCBoYXNoKTsKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIC8qIFJldmVydCBzZXR0aW5nIHRoZSB2YWx1ZSBvbiB0aGUgZGljdCAqLworICAgICAgICAgICAgUHlPYmplY3QgKmV4YywgKnZhbCwgKnRiOworICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKKyAgICAgICAgICAgICh2b2lkKSBfUHlEaWN0X0RlbEl0ZW1fS25vd25IYXNoKG9kLCBrZXksIGhhc2gpOworICAgICAgICAgICAgX1B5RXJyX0NoYWluRXhjZXB0aW9ucyhleGMsIHZhbCwgdGIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXM7Cit9OworCitpbnQKK1B5T0RpY3RfU2V0SXRlbShQeU9iamVjdCAqb2QsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBQeV9oYXNoX3QgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKKyAgICBpZiAoaGFzaCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBfUHlPRGljdF9TZXRJdGVtX0tub3duSGFzaChvZCwga2V5LCB2YWx1ZSwgaGFzaCk7Cit9OworCitpbnQKK1B5T0RpY3RfRGVsSXRlbShQeU9iamVjdCAqb2QsIFB5T2JqZWN0ICprZXkpCit7CisgICAgaW50IHJlczsKKyAgICBQeV9oYXNoX3QgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKKyAgICBpZiAoaGFzaCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJlcyA9IF9vZGljdF9jbGVhcl9ub2RlKChQeU9EaWN0T2JqZWN0ICopb2QsIE5VTEwsIGtleSwgaGFzaCk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gX1B5RGljdF9EZWxJdGVtX0tub3duSGFzaChvZCwga2V5LCBoYXNoKTsKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhlIE9yZGVyZWREaWN0IHZpZXdzIChrZXlzL3ZhbHVlcy9pdGVtcykKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIGludCBraW5kOworICAgIFB5T0RpY3RPYmplY3QgKmRpX29kaWN0OworICAgIFB5X3NzaXplX3QgZGlfc2l6ZTsKKyAgICBzaXplX3QgZGlfc3RhdGU7CisgICAgUHlPYmplY3QgKmRpX2N1cnJlbnQ7CisgICAgUHlPYmplY3QgKmRpX3Jlc3VsdDsgLyogcmV1c2FibGUgcmVzdWx0IHR1cGxlIGZvciBpdGVyaXRlbXMgKi8KK30gb2RpY3RpdGVyb2JqZWN0OworCitzdGF0aWMgdm9pZAorb2RpY3RpdGVyX2RlYWxsb2Mob2RpY3RpdGVyb2JqZWN0ICpkaSkKK3sKKyAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhkaSk7CisgICAgUHlfWERFQ1JFRihkaS0+ZGlfb2RpY3QpOworICAgIFB5X1hERUNSRUYoZGktPmRpX2N1cnJlbnQpOworICAgIGlmIChkaS0+a2luZCAmIChfb2RpY3RfSVRFUl9LRVlTIHwgX29kaWN0X0lURVJfVkFMVUVTKSkgeworICAgICAgICBQeV9ERUNSRUYoZGktPmRpX3Jlc3VsdCk7CisgICAgfQorICAgIFB5T2JqZWN0X0dDX0RlbChkaSk7Cit9CisKK3N0YXRpYyBpbnQKK29kaWN0aXRlcl90cmF2ZXJzZShvZGljdGl0ZXJvYmplY3QgKmRpLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChkaS0+ZGlfb2RpY3QpOworICAgIFB5X1ZJU0lUKGRpLT5kaV9jdXJyZW50KTsgIC8qIEEga2V5IGNvdWxkIGJlIGFueSB0eXBlLCBub3QganVzdCBzdHIuICovCisgICAgUHlfVklTSVQoZGktPmRpX3Jlc3VsdCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEluIG9yZGVyIHRvIHByb3RlY3QgYWdhaW5zdCBtb2RpZmljYXRpb25zIGR1cmluZyBpdGVyYXRpb24sIHdlIHRyYWNrCisgKiB0aGUgY3VycmVudCBrZXkgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBub2RlLiAqLworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0aXRlcl9uZXh0a2V5KG9kaWN0aXRlcm9iamVjdCAqZGkpCit7CisgICAgUHlPYmplY3QgKmtleSA9IE5VTEw7CisgICAgX09EaWN0Tm9kZSAqbm9kZTsKKyAgICBpbnQgcmV2ZXJzZWQgPSBkaS0+a2luZCAmIF9vZGljdF9JVEVSX1JFVkVSU0VEOworCisgICAgaWYgKGRpLT5kaV9vZGljdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZGktPmRpX2N1cnJlbnQgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOyAgLyogV2UncmUgYWxyZWFkeSBkb25lLiAqLworCisgICAgLyogQ2hlY2sgZm9yIHVuc3VwcG9ydGVkIGNoYW5nZXMuICovCisgICAgaWYgKGRpLT5kaV9vZGljdC0+b2Rfc3RhdGUgIT0gZGktPmRpX3N0YXRlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiT3JkZXJlZERpY3QgbXV0YXRlZCBkdXJpbmcgaXRlcmF0aW9uIik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgaWYgKGRpLT5kaV9zaXplICE9IFB5T0RpY3RfU0laRShkaS0+ZGlfb2RpY3QpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiT3JkZXJlZERpY3QgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgZGktPmRpX3NpemUgPSAtMTsgLyogTWFrZSB0aGlzIHN0YXRlIHN0aWNreSAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIGtleS4gKi8KKyAgICBub2RlID0gX29kaWN0X2ZpbmRfbm9kZShkaS0+ZGlfb2RpY3QsIGRpLT5kaV9jdXJyZW50KTsKKyAgICBpZiAobm9kZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgZGktPmRpX2N1cnJlbnQpOworICAgICAgICAvKiBNdXN0IGhhdmUgYmVlbiBkZWxldGVkLiAqLworICAgICAgICBQeV9DTEVBUihkaS0+ZGlfY3VycmVudCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBrZXkgPSBkaS0+ZGlfY3VycmVudDsKKworICAgIC8qIEFkdmFuY2UgdG8gdGhlIG5leHQga2V5LiAqLworICAgIG5vZGUgPSByZXZlcnNlZCA/IF9vZGljdG5vZGVfUFJFVihub2RlKSA6IF9vZGljdG5vZGVfTkVYVChub2RlKTsKKyAgICBpZiAobm9kZSA9PSBOVUxMKSB7CisgICAgICAgIC8qIFJlYWNoZWQgdGhlIGVuZC4gKi8KKyAgICAgICAgZGktPmRpX2N1cnJlbnQgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZGktPmRpX2N1cnJlbnQgPSBfb2RpY3Rub2RlX0tFWShub2RlKTsKKyAgICAgICAgUHlfSU5DUkVGKGRpLT5kaV9jdXJyZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4ga2V5OworCitkb25lOgorICAgIFB5X0NMRUFSKGRpLT5kaV9vZGljdCk7CisgICAgcmV0dXJuIGtleTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0aXRlcl9pdGVybmV4dChvZGljdGl0ZXJvYmplY3QgKmRpKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQsICp2YWx1ZTsKKyAgICBQeU9iamVjdCAqa2V5ID0gb2RpY3RpdGVyX25leHRrZXkoZGkpOyAgLyogbmV3IHJlZmVyZW5jZSAqLworCisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIEhhbmRsZSB0aGUga2V5cyBjYXNlLiAqLworICAgIGlmICghIChkaS0+a2luZCAmIF9vZGljdF9JVEVSX1ZBTFVFUykpIHsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9CisKKyAgICB2YWx1ZSA9IFB5T0RpY3RfR2V0SXRlbSgoUHlPYmplY3QgKilkaS0+ZGlfb2RpY3QsIGtleSk7ICAvKiBib3Jyb3dlZCAqLworICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgUHlfSU5DUkVGKHZhbHVlKTsKKworICAgIC8qIEhhbmRsZSB0aGUgdmFsdWVzIGNhc2UuICovCisgICAgaWYgKCEoZGktPmtpbmQgJiBfb2RpY3RfSVRFUl9LRVlTKSkgeworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIC8qIEhhbmRsZSB0aGUgaXRlbXMgY2FzZS4gKi8KKyAgICByZXN1bHQgPSBkaS0+ZGlfcmVzdWx0OworCisgICAgaWYgKFB5X1JFRkNOVChyZXN1bHQpID09IDEpIHsKKyAgICAgICAgLyogbm90IGluIHVzZSBzbyB3ZSBjYW4gcmV1c2UgaXQKKyAgICAgICAgICogKHRoZSBjb21tb24gY2FzZSBkdXJpbmcgaXRlcmF0aW9uKSAqLworICAgICAgICBQeV9JTkNSRUYocmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKFB5VHVwbGVfR0VUX0lURU0ocmVzdWx0LCAwKSk7ICAvKiBib3Jyb3dlZCAqLworICAgICAgICBQeV9ERUNSRUYoUHlUdXBsZV9HRVRfSVRFTShyZXN1bHQsIDEpKTsgIC8qIGJvcnJvd2VkICovCisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeVR1cGxlX05ldygyKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgMCwga2V5KTsgIC8qIHN0ZWFscyByZWZlcmVuY2UgKi8KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgMSwgdmFsdWUpOyAgLyogc3RlYWxzIHJlZmVyZW5jZSAqLworICAgIHJldHVybiByZXN1bHQ7CisKK2RvbmU6CisgICAgUHlfQ0xFQVIoZGktPmRpX2N1cnJlbnQpOworICAgIFB5X0NMRUFSKGRpLT5kaV9vZGljdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIE5vIG5lZWQgZm9yIHRwX2NsZWFyIGJlY2F1c2Ugb2RpY3RpdGVyb2JqZWN0IGlzIG5vdCBtdXRhYmxlLiAqLworCitQeURvY19TVFJWQVIocmVkdWNlX2RvYywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmciKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0aXRlcl9yZWR1Y2Uob2RpY3RpdGVyb2JqZWN0ICpkaSkKK3sKKyAgICBQeU9iamVjdCAqbGlzdCwgKml0ZXI7CisKKyAgICBsaXN0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoIWxpc3QpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogaXRlcmF0ZSB0aGUgdGVtcG9yYXJ5IGludG8gYSBsaXN0ICovCisgICAgZm9yKDs7KSB7CisgICAgICAgIFB5T2JqZWN0ICplbGVtZW50ID0gb2RpY3RpdGVyX2l0ZXJuZXh0KGRpKTsKKyAgICAgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIGVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIGRvbmUgaXRlcmF0aW5nPyAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaXRlciA9IF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIik7CisgICAgaWYgKGl0ZXIgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihOKSIsIGl0ZXIsIGxpc3QpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgb2RpY3RpdGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pb2RpY3RpdGVyX3JlZHVjZSwgTUVUSF9OT0FSR1MsIHJlZHVjZV9kb2N9LAorICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitQeVR5cGVPYmplY3QgUHlPRGljdEl0ZXJfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICJvZGljdF9pdGVyYXRvciIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2Yob2RpY3RpdGVyb2JqZWN0KSwgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3RvcilvZGljdGl0ZXJfZGVhbGxvYywgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYylvZGljdGl0ZXJfdHJhdmVyc2UsICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBQeU9iamVjdF9TZWxmSXRlciwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgKGl0ZXJuZXh0ZnVuYylvZGljdGl0ZXJfaXRlcm5leHQsICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBvZGljdGl0ZXJfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwKK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdGl0ZXJfbmV3KFB5T0RpY3RPYmplY3QgKm9kLCBpbnQga2luZCkKK3sKKyAgICBvZGljdGl0ZXJvYmplY3QgKmRpOworICAgIF9PRGljdE5vZGUgKm5vZGU7CisgICAgaW50IHJldmVyc2VkID0ga2luZCAmIF9vZGljdF9JVEVSX1JFVkVSU0VEOworCisgICAgZGkgPSBQeU9iamVjdF9HQ19OZXcob2RpY3RpdGVyb2JqZWN0LCAmUHlPRGljdEl0ZXJfVHlwZSk7CisgICAgaWYgKGRpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGtpbmQgJiAoX29kaWN0X0lURVJfS0VZUyB8IF9vZGljdF9JVEVSX1ZBTFVFUykpeworICAgICAgICBkaS0+ZGlfcmVzdWx0ID0gUHlUdXBsZV9QYWNrKDIsIFB5X05vbmUsIFB5X05vbmUpOworICAgICAgICBpZiAoZGktPmRpX3Jlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGkpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICBkaS0+ZGlfcmVzdWx0ID0gTlVMTDsKKworICAgIGRpLT5raW5kID0ga2luZDsKKyAgICBub2RlID0gcmV2ZXJzZWQgPyBfb2RpY3RfTEFTVChvZCkgOiBfb2RpY3RfRklSU1Qob2QpOworICAgIGRpLT5kaV9jdXJyZW50ID0gbm9kZSA/IF9vZGljdG5vZGVfS0VZKG5vZGUpIDogTlVMTDsKKyAgICBQeV9YSU5DUkVGKGRpLT5kaV9jdXJyZW50KTsKKyAgICBkaS0+ZGlfc2l6ZSA9IFB5T0RpY3RfU0laRShvZCk7CisgICAgZGktPmRpX3N0YXRlID0gb2QtPm9kX3N0YXRlOworICAgIGRpLT5kaV9vZGljdCA9IG9kOworICAgIFB5X0lOQ1JFRihvZCk7CisKKyAgICBfUHlPYmplY3RfR0NfVFJBQ0soZGkpOworICAgIHJldHVybiAoUHlPYmplY3QgKilkaTsKK30KKworLyoga2V5cygpICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdGtleXNfaXRlcihfUHlEaWN0Vmlld09iamVjdCAqZHYpCit7CisgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfQorICAgIHJldHVybiBvZGljdGl0ZXJfbmV3KChQeU9EaWN0T2JqZWN0ICopZHYtPmR2X2RpY3QsCisgICAgICAgICAgICBfb2RpY3RfSVRFUl9LRVlTKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0a2V5c19yZXZlcnNlZChfUHlEaWN0Vmlld09iamVjdCAqZHYpCit7CisgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfQorICAgIHJldHVybiBvZGljdGl0ZXJfbmV3KChQeU9EaWN0T2JqZWN0ICopZHYtPmR2X2RpY3QsCisgICAgICAgICAgICBfb2RpY3RfSVRFUl9LRVlTfF9vZGljdF9JVEVSX1JFVkVSU0VEKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG9kaWN0a2V5c19tZXRob2RzW10gPSB7CisgICAgeyJfX3JldmVyc2VkX18iLCAoUHlDRnVuY3Rpb24pb2RpY3RrZXlzX3JldmVyc2VkLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworUHlUeXBlT2JqZWN0IFB5T0RpY3RLZXlzX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAib2RpY3Rfa2V5cyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAoZ2V0aXRlcmZ1bmMpb2RpY3RrZXlzX2l0ZXIsICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBvZGljdGtleXNfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgICZQeURpY3RLZXlzX1R5cGUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdGtleXNfbmV3KFB5T2JqZWN0ICpvZCkKK3sKKyAgICByZXR1cm4gX1B5RGljdFZpZXdfTmV3KG9kLCAmUHlPRGljdEtleXNfVHlwZSk7Cit9CisKKy8qIGl0ZW1zKCkgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0aXRlbXNfaXRlcihfUHlEaWN0Vmlld09iamVjdCAqZHYpCit7CisgICAgaWYgKGR2LT5kdl9kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfQorICAgIHJldHVybiBvZGljdGl0ZXJfbmV3KChQeU9EaWN0T2JqZWN0ICopZHYtPmR2X2RpY3QsCisgICAgICAgICAgICBfb2RpY3RfSVRFUl9LRVlTfF9vZGljdF9JVEVSX1ZBTFVFUyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdGl0ZW1zX3JldmVyc2VkKF9QeURpY3RWaWV3T2JqZWN0ICpkdikKK3sKKyAgICBpZiAoZHYtPmR2X2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICB9CisgICAgcmV0dXJuIG9kaWN0aXRlcl9uZXcoKFB5T0RpY3RPYmplY3QgKilkdi0+ZHZfZGljdCwKKyAgICAgICAgICAgIF9vZGljdF9JVEVSX0tFWVN8X29kaWN0X0lURVJfVkFMVUVTfF9vZGljdF9JVEVSX1JFVkVSU0VEKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG9kaWN0aXRlbXNfbWV0aG9kc1tdID0geworICAgIHsiX19yZXZlcnNlZF9fIiwgKFB5Q0Z1bmN0aW9uKW9kaWN0aXRlbXNfcmV2ZXJzZWQsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitQeVR5cGVPYmplY3QgUHlPRGljdEl0ZW1zX1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAib2RpY3RfaXRlbXMiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAoZ2V0aXRlcmZ1bmMpb2RpY3RpdGVtc19pdGVyLCAgICAgICAgICAgICAvKiB0cF9pdGVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBvZGljdGl0ZW1zX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgICZQeURpY3RJdGVtc19UeXBlLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitvZGljdGl0ZW1zX25ldyhQeU9iamVjdCAqb2QpCit7CisgICAgcmV0dXJuIF9QeURpY3RWaWV3X05ldyhvZCwgJlB5T0RpY3RJdGVtc19UeXBlKTsKK30KKworLyogdmFsdWVzKCkgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0dmFsdWVzX2l0ZXIoX1B5RGljdFZpZXdPYmplY3QgKmR2KQoreworICAgIGlmIChkdi0+ZHZfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIH0KKyAgICByZXR1cm4gb2RpY3RpdGVyX25ldygoUHlPRGljdE9iamVjdCAqKWR2LT5kdl9kaWN0LAorICAgICAgICAgICAgX29kaWN0X0lURVJfVkFMVUVTKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK29kaWN0dmFsdWVzX3JldmVyc2VkKF9QeURpY3RWaWV3T2JqZWN0ICpkdikKK3sKKyAgICBpZiAoZHYtPmR2X2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICB9CisgICAgcmV0dXJuIG9kaWN0aXRlcl9uZXcoKFB5T0RpY3RPYmplY3QgKilkdi0+ZHZfZGljdCwKKyAgICAgICAgICAgIF9vZGljdF9JVEVSX1ZBTFVFU3xfb2RpY3RfSVRFUl9SRVZFUlNFRCk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBvZGljdHZhbHVlc19tZXRob2RzW10gPSB7CisgICAgeyJfX3JldmVyc2VkX18iLCAoUHlDRnVuY3Rpb24pb2RpY3R2YWx1ZXNfcmV2ZXJzZWQsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitQeVR5cGVPYmplY3QgUHlPRGljdFZhbHVlc19UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgIm9kaWN0X3ZhbHVlcyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgKGdldGl0ZXJmdW5jKW9kaWN0dmFsdWVzX2l0ZXIsICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgb2RpY3R2YWx1ZXNfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAmUHlEaWN0VmFsdWVzX1R5cGUsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCit9OworCitzdGF0aWMgUHlPYmplY3QgKgorb2RpY3R2YWx1ZXNfbmV3KFB5T2JqZWN0ICpvZCkKK3sKKyAgICByZXR1cm4gX1B5RGljdFZpZXdfTmV3KG9kLCAmUHlPRGljdFZhbHVlc19UeXBlKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBNdXRhYmxlTWFwcHBpbmcgaW1wbGVtZW50YXRpb25zCisKK01hcHBpbmc6CisKKz09PT09PT09PT09PSA9PT09PT09PT09PQorbWV0aG9kICAgICAgIHVzZXMKKz09PT09PT09PT09PSA9PT09PT09PT09PQorX19jb250YWluc19fIF9fZ2V0aXRlbV9fCitfX2VxX18gICAgICAgaXRlbXMKK19fZ2V0aXRlbV9fICArCitfX2l0ZXJfXyAgICAgKworX19sZW5fXyAgICAgICsKK19fbmVfXyAgICAgICBfX2VxX18KK2dldCAgICAgICAgICBfX2dldGl0ZW1fXworaXRlbXMgICAgICAgIEl0ZW1zVmlldwora2V5cyAgICAgICAgIEtleXNWaWV3Cit2YWx1ZXMgICAgICAgVmFsdWVzVmlldworPT09PT09PT09PT09ID09PT09PT09PT09CisKK0l0ZW1zVmlldyB1c2VzIF9fbGVuX18sIF9faXRlcl9fLCBhbmQgX19nZXRpdGVtX18uCitLZXlzVmlldyB1c2VzIF9fbGVuX18sIF9faXRlcl9fLCBhbmQgX19jb250YWluc19fLgorVmFsdWVzVmlldyB1c2VzIF9fbGVuX18sIF9faXRlcl9fLCBhbmQgX19nZXRpdGVtX18uCisKK011dGFibGVNYXBwaW5nOgorCis9PT09PT09PT09PT0gPT09PT09PT09PT0KK21ldGhvZCAgICAgICB1c2VzCis9PT09PT09PT09PT0gPT09PT09PT09PT0KK19fZGVsaXRlbV9fICArCitfX3NldGl0ZW1fXyAgKworY2xlYXIgICAgICAgIHBvcGl0ZW0KK3BvcCAgICAgICAgICBfX2dldGl0ZW1fXworICAgICAgICAgICAgIF9fZGVsaXRlbV9fCitwb3BpdGVtICAgICAgX19pdGVyX18KKyAgICAgICAgICAgICBfZ2V0aXRlbV9fCisgICAgICAgICAgICAgX19kZWxpdGVtX18KK3NldGRlZmF1bHQgICBfX2dldGl0ZW1fXworICAgICAgICAgICAgIF9fc2V0aXRlbV9fCit1cGRhdGUgICAgICAgX19zZXRpdGVtX18KKz09PT09PT09PT09PSA9PT09PT09PT09PQorKi8KKworc3RhdGljIGludAorbXV0YWJsZW1hcHBpbmdfYWRkX3BhaXJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcGFpcnMpCit7CisgICAgUHlPYmplY3QgKnBhaXIsICppdGVyYXRvciwgKnVuZXhwZWN0ZWQ7CisgICAgaW50IHJlcyA9IDA7CisKKyAgICBpdGVyYXRvciA9IFB5T2JqZWN0X0dldEl0ZXIocGFpcnMpOworICAgIGlmIChpdGVyYXRvciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlFcnJfQ2xlYXIoKTsKKworICAgIHdoaWxlICgocGFpciA9IFB5SXRlcl9OZXh0KGl0ZXJhdG9yKSkgIT0gTlVMTCkgeworICAgICAgICAvKiBjb3VsZCBiZSBtb3JlIGVmZmljaWVudCAoc2VlIFVOUEFDS19TRVFVRU5DRSBpbiBjZXZhbC5jKSAqLworICAgICAgICBQeU9iamVjdCAqa2V5ID0gTlVMTCwgKnZhbHVlID0gTlVMTDsKKyAgICAgICAgUHlPYmplY3QgKnBhaXJfaXRlcmF0b3IgPSBQeU9iamVjdF9HZXRJdGVyKHBhaXIpOworICAgICAgICBpZiAocGFpcl9pdGVyYXRvciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBEb25lOworCisgICAgICAgIGtleSA9IFB5SXRlcl9OZXh0KHBhaXJfaXRlcmF0b3IpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWQgbW9yZSB0aGFuIDAgdmFsdWVzIHRvIHVucGFjayIpOworICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICB9CisKKyAgICAgICAgdmFsdWUgPSBQeUl0ZXJfTmV4dChwYWlyX2l0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWQgbW9yZSB0aGFuIDEgdmFsdWUgdG8gdW5wYWNrIik7CisgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgIH0KKworICAgICAgICB1bmV4cGVjdGVkID0gUHlJdGVyX05leHQocGFpcl9pdGVyYXRvcik7CisgICAgICAgIGlmICh1bmV4cGVjdGVkICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1bmV4cGVjdGVkKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrIChleHBlY3RlZCAyKSIpOworICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBnb3RvIERvbmU7CisKKyAgICAgICAgcmVzID0gUHlPYmplY3RfU2V0SXRlbShzZWxmLCBrZXksIHZhbHVlKTsKKworRG9uZToKKyAgICAgICAgUHlfREVDUkVGKHBhaXIpOworICAgICAgICBQeV9YREVDUkVGKHBhaXJfaXRlcmF0b3IpOworICAgICAgICBQeV9YREVDUkVGKGtleSk7CisgICAgICAgIFB5X1hERUNSRUYodmFsdWUpOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBQeV9ERUNSRUYoaXRlcmF0b3IpOworCisgICAgaWYgKHJlcyA8IDAgfHwgUHlFcnJfT2NjdXJyZWQoKSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK211dGFibGVtYXBwaW5nX3VwZGF0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJlcyA9IDA7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgX1B5X0lERU5USUZJRVIoaXRlbXMpOworICAgIF9QeV9JREVOVElGSUVSKGtleXMpOworCisgICAgLyogZmlyc3QgaGFuZGxlIGFyZ3MsIGlmIGFueSAqLworICAgIGFzc2VydChhcmdzID09IE5VTEwgfHwgUHlUdXBsZV9DaGVjayhhcmdzKSk7CisgICAgbGVuID0gKGFyZ3MgIT0gTlVMTCkgPyBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIDogMDsKKyAgICBpZiAobGVuID4gMSkgeworICAgICAgICBjaGFyICptc2cgPSAidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAxIHBvc2l0aW9uYWwgYXJndW1lbnQgKCVkIGdpdmVuKSI7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsIG1zZywgbGVuKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGxlbikgeworICAgICAgICBQeU9iamVjdCAqb3RoZXIgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApOyAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgICAgIGFzc2VydChvdGhlciAhPSBOVUxMKTsKKyAgICAgICAgUHlfSU5DUkVGKG90aGVyKTsKKyAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KG90aGVyKSB8fAorICAgICAgICAgICAgX1B5T2JqZWN0X0hhc0F0dHJJZChvdGhlciwgJlB5SWRfaXRlbXMpKSB7ICAvKiBuZXZlciBmYWlscyAqLworICAgICAgICAgICAgUHlPYmplY3QgKml0ZW1zOworICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KG90aGVyKSkKKyAgICAgICAgICAgICAgICBpdGVtcyA9IFB5RGljdF9JdGVtcyhvdGhlcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKG90aGVyLCAmUHlJZF9pdGVtcywgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3RoZXIpOworICAgICAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXMgPSBtdXRhYmxlbWFwcGluZ19hZGRfcGFpcnMoc2VsZiwgaXRlbXMpOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvdGhlciwgJlB5SWRfa2V5cykpIHsgIC8qIG5ldmVyIGZhaWxzICovCisgICAgICAgICAgICBQeU9iamVjdCAqa2V5cywgKml0ZXJhdG9yLCAqa2V5OworICAgICAgICAgICAga2V5cyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKG90aGVyLCAmUHlJZF9rZXlzLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChrZXlzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob3RoZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaXRlcmF0b3IgPSBQeU9iamVjdF9HZXRJdGVyKGtleXMpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleXMpOworICAgICAgICAgICAgaWYgKGl0ZXJhdG9yID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob3RoZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKHJlcyA9PSAwICYmIChrZXkgPSBQeUl0ZXJfTmV4dChpdGVyYXRvcikpKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlPYmplY3RfR2V0SXRlbShvdGhlciwga2V5KTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9TZXRJdGVtKHNlbGYsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKG90aGVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyYXRvcik7CisgICAgICAgICAgICBpZiAocmVzICE9IDAgfHwgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IG11dGFibGVtYXBwaW5nX2FkZF9wYWlycyhzZWxmLCBvdGhlcik7CisgICAgICAgICAgICBQeV9ERUNSRUYob3RoZXIpOworICAgICAgICAgICAgaWYgKHJlcyAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLyogbm93IGhhbmRsZSBrd2FyZ3MgKi8KKyAgICBhc3NlcnQoa3dhcmdzID09IE5VTEwgfHwgUHlEaWN0X0NoZWNrKGt3YXJncykpOworICAgIGxlbiA9IChrd2FyZ3MgIT0gTlVMTCkgPyBQeURpY3RfU2l6ZShrd2FyZ3MpIDogMDsKKyAgICBpZiAobGVuID4gMCkgeworICAgICAgICBQeU9iamVjdCAqaXRlbXMgPSBQeURpY3RfSXRlbXMoa3dhcmdzKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmVzID0gbXV0YWJsZW1hcHBpbmdfYWRkX3BhaXJzKHNlbGYsIGl0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgaWYgKHJlcyA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X1JFVFVSTl9OT05FOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9yYW5nZW9iamVjdC5jIGIvT2JqZWN0cy9yYW5nZW9iamVjdC5jCmluZGV4IGM0YmE3MTUuLjBlOWViMjAgMTAwNjQ0Ci0tLSBhL09iamVjdHMvcmFuZ2VvYmplY3QuYworKysgYi9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKQEAgLTUsNyArNSw3IEBACiAKIC8qIFN1cHBvcnQgb2JqZWN0cyB3aG9zZSBsZW5ndGggaXMgPiBQWV9TU0laRV9UX01BWC4KIAotICAgVGhpcyBjb3VsZCBiZSBzcGVkIHVwIGZvciBzbWFsbCBQeUxvbmdzIGlmIHRoZXkgZml0IGluIGFuIFB5X3NzaXplX3QuCisgICBUaGlzIGNvdWxkIGJlIHNwZWQgdXAgZm9yIHNtYWxsIFB5TG9uZ3MgaWYgdGhleSBmaXQgaW4gYSBQeV9zc2l6ZV90LgogICAgVGhpcyBvbmx5IG1hdHRlcnMgb24gV2luNjQuICBUaG91Z2ggd2UgY291bGQgdXNlIFBZX0xPTkdfTE9ORyB3aGljaAogICAgd291bGQgcHJlc3VtYWJseSBoZWxwIHBlcmYuCiAqLwpAQCAtOTk0LDE1ICs5OTQsMTQgQEAKIGxvbmdyYW5nZWl0ZXJfc2V0c3RhdGUobG9uZ3JhbmdlaXRlcm9iamVjdCAqciwgUHlPYmplY3QgKnN0YXRlKQogewogICAgIGludCBjbXA7Ci0gICAKKwogICAgIC8qIGNsaXAgdGhlIHZhbHVlICovCiAgICAgUHlPYmplY3QgKnplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgaWYgKHplcm8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXRlLCB6ZXJvLCBQeV9MVCk7CiAgICAgaWYgKGNtcCA+IDApIHsKLSAgICAgICAgUHlfQ0xFQVIoci0+aW5kZXgpOwotICAgICAgICByLT5pbmRleCA9IHplcm87CisgICAgICAgIFB5X1hTRVRSRUYoci0+aW5kZXgsIHplcm8pOwogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAgICAgUHlfREVDUkVGKHplcm8pOwpAQCAtMTAxNCwxMCArMTAxMyw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChjbXAgPiAwKQogICAgICAgICBzdGF0ZSA9IHItPmxlbjsKLSAgICAKLSAgICBQeV9DTEVBUihyLT5pbmRleCk7Ci0gICAgci0+aW5kZXggPSBzdGF0ZTsKLSAgICBQeV9JTkNSRUYoci0+aW5kZXgpOworCisgICAgUHlfSU5DUkVGKHN0YXRlKTsKKyAgICBQeV9YU0VUUkVGKHItPmluZGV4LCBzdGF0ZSk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTEwNjYsOCArMTA2NCw3IEBACiAgICAgcmVzdWx0ID0gUHlOdW1iZXJfQWRkKHItPnN0YXJ0LCBwcm9kdWN0KTsKICAgICBQeV9ERUNSRUYocHJvZHVjdCk7CiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICBQeV9ERUNSRUYoci0+aW5kZXgpOwotICAgICAgICByLT5pbmRleCA9IG5ld19pbmRleDsKKyAgICAgICAgUHlfU0VUUkVGKHItPmluZGV4LCBuZXdfaW5kZXgpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfREVDUkVGKG5ld19pbmRleCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL3NldG9iamVjdC5jIGIvT2JqZWN0cy9zZXRvYmplY3QuYwppbmRleCA2MWYxZDk0Li40ZWY2OTJkIDEwMDY0NAotLS0gYS9PYmplY3RzL3NldG9iamVjdC5jCisrKyBiL09iamVjdHMvc2V0b2JqZWN0LmMKQEAgLTIwLDcgKzIwLDcgQEAKIAogICAgQWxsIGFyaXRobWV0aWMgb24gaGFzaCBzaG91bGQgaWdub3JlIG92ZXJmbG93LgogCi0gICBVbmxpa2UgdGhlIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb24sIHRoZSBsb29ra2V5IGZ1bmN0aW9ucyBjYW4gcmV0dXJuCisgICBVbmxpa2UgdGhlIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb24sIHRoZSBsb29ra2V5IGZ1bmN0aW9uIGNhbiByZXR1cm4KICAgIE5VTEwgaWYgdGhlIHJpY2ggY29tcGFyaXNvbiByZXR1cm5zIGFuIGVycm9yLgogKi8KIApAQCAtNTMsMTIwICs1Myw3MyBAQAogICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CiAgICAgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKLSAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCisgICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOyAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvciAqLwogICAgIHNpemVfdCBqOwogICAgIGludCBjbXA7CiAKLSAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgZW50cnkgPSAmdGFibGVbaV07CiAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIGVudHJ5OwogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CisgICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRrZXkgPSBlbnRyeS0+a2V5OworICAgICAgICAgICAgLyogc3RhcnRrZXkgY2Fubm90IGJlIGEgZHVtbXkgYmVjYXVzZSB0aGUgZHVtbXkgaGFzaCBmaWVsZCBpcyAtMSAqLworICAgICAgICAgICAgYXNzZXJ0KHN0YXJ0a2V5ICE9IGR1bW15KTsKKyAgICAgICAgICAgIGlmIChzdGFydGtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHN0YXJ0a2V5KQorICAgICAgICAgICAgICAgICYmIFB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkKKyAgICAgICAgICAgICAgICAmJiB1bmljb2RlX2VxKHN0YXJ0a2V5LCBrZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgICAgICAgIFB5X0lOQ1JFRihzdGFydGtleSk7CiAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKLSAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgaWYgKGNtcCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5saWtlbHkgKi8KICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkKKyAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkgICAgIC8qIHVubGlrZWx5ICovCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICBpZiAoY21wID4gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaWtlbHkgKi8KICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICBtYXNrID0gc28tPm1hc2s7ICAgICAgICAgICAgICAgICAvKiBoZWxwIGF2b2lkIGEgcmVnaXN0ZXIgc3BpbGwgKi8KICAgICAgICAgfQotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gLTEgJiYgZnJlZXNsb3QgPT0gTlVMTCkKICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CiAKLSAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgewotICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOwotICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7Ci0gICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydGtleSA9IGVudHJ5LT5rZXk7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKLSAgICAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydGtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNtcCA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgICAgICAgICAgICAgIGlmIChjbXAgPiAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIGlmIChpICsgTElORUFSX1BST0JFUyA8PSBtYXNrKSB7CisgICAgICAgICAgICBmb3IgKGogPSAwIDsgaiA8IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKKyAgICAgICAgICAgICAgICBlbnRyeSsrOworICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCkgeworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRrZXkgPSBlbnRyeS0+a2V5OworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhcnRrZXkgIT0gZHVtbXkpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRrZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3Qoc3RhcnRrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiB1bmljb2RlX2VxKHN0YXJ0a2V5LCBrZXkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoc3RhcnRrZXkpOworICAgICAgICAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICBpZiAodGFibGUgIT0gc28tPnRhYmxlIHx8IGVudHJ5LT5rZXkgIT0gc3RhcnRrZXkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgICAgICAgICBtYXNrID0gc28tPm1hc2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSAtMSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwogICAgICAgICB9CiAKICAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKLSAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisgICAgICAgIGkgPSAoaSAqIDUgKyAxICsgcGVydHVyYikgJiBtYXNrOwogCi0gICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKLSAgICB9Ci0gIGZvdW5kX251bGw6Ci0gICAgcmV0dXJuIGZyZWVzbG90ID09IE5VTEwgPyBlbnRyeSA6IGZyZWVzbG90OwotfQotCi0vKgotICogSGFja2VkIHVwIHZlcnNpb24gb2Ygc2V0X2xvb2trZXkgd2hpY2ggY2FuIGFzc3VtZSBrZXlzIGFyZSBhbHdheXMgdW5pY29kZTsKLSAqIFRoaXMgbWVhbnMgd2UgY2FuIGFsd2F5cyB1c2UgdW5pY29kZV9lcSBkaXJlY3RseSBhbmQgbm90IGhhdmUgdG8gY2hlY2sgdG8KLSAqIHNlZSBpZiB0aGUgY29tcGFyaXNvbiBhbHRlcmVkIHRoZSB0YWJsZS4KLSAqLwotc3RhdGljIHNldGVudHJ5ICoKLXNldF9sb29ra2V5X3VuaWNvZGUoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKLXsKLSAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgc2V0ZW50cnkgKmZyZWVzbG90ID0gTlVMTDsKLSAgICBzZXRlbnRyeSAqZW50cnk7Ci0gICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOwotICAgIHNpemVfdCBtYXNrID0gc28tPm1hc2s7Ci0gICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2g7Ci0gICAgc2l6ZV90IGo7Ci0KLSAgICAvKiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gaGFuZGxlIG5vbi11bmljb2RlIGtleXMsCi0gICAgICAgaW5jbHVkaW5nIHN1YmNsYXNzZXMgb2Ygc3RyOyBlLmcuLCBvbmUgcmVhc29uIHRvIHN1YmNsYXNzCi0gICAgICAgc3RyaW5ncyBpcyB0byBvdmVycmlkZSBfX2VxX18sIGFuZCBmb3Igc3BlZWQgd2UgZG9uJ3QgY2F0ZXIgdG8KLSAgICAgICB0aGF0IGhlcmUuICovCi0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpKSB7Ci0gICAgICAgIHNvLT5sb29rdXAgPSBzZXRfbG9va2tleTsKLSAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwotICAgIH0KLQotICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gZW50cnk7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkKLSAgICAgICAgICAgIHx8IChlbnRyeS0+aGFzaCA9PSBoYXNoCi0gICAgICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQotICAgICAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCi0gICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCi0gICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwotCi0gICAgICAgIGZvciAoaiA9IDEgOyBqIDw9IExJTkVBUl9QUk9CRVMgOyBqKyspIHsKLSAgICAgICAgICAgIGVudHJ5ID0gJnRhYmxlWyhpICsgaikgJiBtYXNrXTsKLSAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOwotICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5Ci0gICAgICAgICAgICAgICAgfHwgKGVudHJ5LT5oYXNoID09IGhhc2gKLSAgICAgICAgICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQotICAgICAgICAgICAgICAgICAgICAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKLSAgICAgICAgfQotCi0gICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7Ci0gICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOwotCi0gICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICAgICAgZW50cnkgPSAmdGFibGVbaV07CiAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CiAgICAgfQpAQCAtMTg5LDIwICsxNDIsMjIgQEAKICAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOwogICAgIHNpemVfdCBtYXNrID0gKHNpemVfdClzby0+bWFzazsKLSAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7CiAgICAgc2l6ZV90IGo7CiAKICAgICB3aGlsZSAoMSkgewotICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgICAgIGVudHJ5ID0gJnRhYmxlW2ldOwogICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOwotICAgICAgICBmb3IgKGogPSAxIDsgaiA8PSBMSU5FQVJfUFJPQkVTIDsgaisrKSB7Ci0gICAgICAgICAgICBlbnRyeSA9ICZ0YWJsZVsoaSArIGopICYgbWFza107Ci0gICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgaWYgKGkgKyBMSU5FQVJfUFJPQkVTIDw9IG1hc2spIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBMSU5FQVJfUFJPQkVTOyBqKyspIHsKKyAgICAgICAgICAgICAgICBlbnRyeSsrOworICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUOwotICAgICAgICBpID0gaSAqIDUgKyAxICsgcGVydHVyYjsKKyAgICAgICAgaSA9IChpICogNSArIDEgKyBwZXJ0dXJiKSAmIG1hc2s7CiAgICAgfQogICBmb3VuZF9udWxsOgogICAgIGVudHJ5LT5rZXkgPSBrZXk7CkBAIC0yMjUsMTUgKzE4MCwxNCBAQAogewogICAgIHNldGVudHJ5ICplbnRyeTsKIAotICAgIGFzc2VydChzby0+bG9va3VwICE9IE5VTEwpOwotICAgIGVudHJ5ID0gc28tPmxvb2t1cChzbywga2V5LCBoYXNoKTsKKyAgICBlbnRyeSA9IHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwogICAgIGlmIChlbnRyeSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkgewogICAgICAgICAvKiBVTlVTRUQgKi8KLSAgICAgICAgc28tPmZpbGwrKzsKICAgICAgICAgZW50cnktPmtleSA9IGtleTsKICAgICAgICAgZW50cnktPmhhc2ggPSBoYXNoOworICAgICAgICBzby0+ZmlsbCsrOwogICAgICAgICBzby0+dXNlZCsrOwogICAgIH0gZWxzZSBpZiAoZW50cnktPmtleSA9PSBkdW1teSkgewogICAgICAgICAvKiBEVU1NWSAqLwpAQCAtMjU3LDEzICsyMTEsMTUgQEAKIHsKICAgICBQeV9zc2l6ZV90IG5ld3NpemU7CiAgICAgc2V0ZW50cnkgKm9sZHRhYmxlLCAqbmV3dGFibGUsICplbnRyeTsKLSAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBvbGRmaWxsID0gc28tPmZpbGw7CisgICAgUHlfc3NpemVfdCBvbGR1c2VkID0gc28tPnVzZWQ7CiAgICAgaW50IGlzX29sZHRhYmxlX21hbGxvY2VkOwogICAgIHNldGVudHJ5IHNtYWxsX2NvcHlbUHlTZXRfTUlOU0laRV07CiAKICAgICBhc3NlcnQobWludXNlZCA+PSAwKTsKIAogICAgIC8qIEZpbmQgdGhlIHNtYWxsZXN0IHRhYmxlIHNpemUgPiBtaW51c2VkLiAqLworICAgIC8qIFhYWCBzcGVlZC11cCB3aXRoIGludHJpbnNpY3MgKi8KICAgICBmb3IgKG5ld3NpemUgPSBQeVNldF9NSU5TSVpFOwogICAgICAgICAgbmV3c2l6ZSA8PSBtaW51c2VkICYmIG5ld3NpemUgPiAwOwogICAgICAgICAgbmV3c2l6ZSA8PD0gMSkKQEAgLTMwNywxOSArMjYzLDI3IEBACiAKICAgICAvKiBNYWtlIHRoZSBzZXQgZW1wdHksIHVzaW5nIHRoZSBuZXcgdGFibGUuICovCiAgICAgYXNzZXJ0KG5ld3RhYmxlICE9IG9sZHRhYmxlKTsKLSAgICBzby0+dGFibGUgPSBuZXd0YWJsZTsKLSAgICBzby0+bWFzayA9IG5ld3NpemUgLSAxOwogICAgIG1lbXNldChuZXd0YWJsZSwgMCwgc2l6ZW9mKHNldGVudHJ5KSAqIG5ld3NpemUpOwotICAgIGkgPSBzby0+dXNlZDsKLSAgICBzby0+dXNlZCA9IDA7CiAgICAgc28tPmZpbGwgPSAwOworICAgIHNvLT51c2VkID0gMDsKKyAgICBzby0+bWFzayA9IG5ld3NpemUgLSAxOworICAgIHNvLT50YWJsZSA9IG5ld3RhYmxlOwogCiAgICAgLyogQ29weSB0aGUgZGF0YSBvdmVyOyB0aGlzIGlzIHJlZmNvdW50LW5ldXRyYWwgZm9yIGFjdGl2ZSBlbnRyaWVzOwogICAgICAgIGR1bW15IGVudHJpZXMgYXJlbid0IGNvcGllZCBvdmVyLCBvZiBjb3Vyc2UgKi8KLSAgICBmb3IgKGVudHJ5ID0gb2xkdGFibGU7IGkgPiAwOyBlbnRyeSsrKSB7Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IE5VTEwgJiYgZW50cnktPmtleSAhPSBkdW1teSkgewotICAgICAgICAgICAgLS1pOwotICAgICAgICAgICAgc2V0X2luc2VydF9jbGVhbihzbywgZW50cnktPmtleSwgZW50cnktPmhhc2gpOworICAgIGlmIChvbGRmaWxsID09IG9sZHVzZWQpIHsKKyAgICAgICAgZm9yIChlbnRyeSA9IG9sZHRhYmxlOyBvbGR1c2VkID4gMDsgZW50cnkrKykgeworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG9sZHVzZWQtLTsKKyAgICAgICAgICAgICAgICBzZXRfaW5zZXJ0X2NsZWFuKHNvLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGVudHJ5ID0gb2xkdGFibGU7IG9sZHVzZWQgPiAwOyBlbnRyeSsrKSB7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBOVUxMICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKKyAgICAgICAgICAgICAgICBvbGR1c2VkLS07CisgICAgICAgICAgICAgICAgc2V0X2luc2VydF9jbGVhbihzbywgZW50cnktPmtleSwgZW50cnktPmhhc2gpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDAsNyArMzA0LDcgQEAKICAgICBhc3NlcnQoc28tPmZpbGwgPD0gc28tPm1hc2spOyAgLyogYXQgbGVhc3Qgb25lIGVtcHR5IHNsb3QgKi8KICAgICBuX3VzZWQgPSBzby0+dXNlZDsKICAgICBQeV9JTkNSRUYoa2V5KTsKLSAgICBpZiAoc2V0X2luc2VydF9rZXkoc28sIGtleSwgaGFzaCkgPT0gLTEpIHsKKyAgICBpZiAoc2V0X2luc2VydF9rZXkoc28sIGtleSwgaGFzaCkpIHsKICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0zNTIsOCArMzE2LDggQEAKIHN0YXRpYyBpbnQKIHNldF9hZGRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKKyAgICBzZXRlbnRyeSBlbnRyeTsKICAgICBQeV9oYXNoX3QgaGFzaDsKLSAgICBQeV9zc2l6ZV90IG5fdXNlZDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fAogICAgICAgICAoaGFzaCA9ICgoUHlBU0NJSU9iamVjdCAqKSBrZXkpLT5oYXNoKSA9PSAtMSkgewpAQCAtMzYxLDE2ICszMjUsOSBAQAogICAgICAgICBpZiAoaGFzaCA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgYXNzZXJ0KHNvLT5maWxsIDw9IHNvLT5tYXNrKTsgIC8qIGF0IGxlYXN0IG9uZSBlbXB0eSBzbG90ICovCi0gICAgbl91c2VkID0gc28tPnVzZWQ7Ci0gICAgUHlfSU5DUkVGKGtleSk7Ci0gICAgaWYgKHNldF9pbnNlcnRfa2V5KHNvLCBrZXksIGhhc2gpID09IC0xKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmICghKHNvLT51c2VkID4gbl91c2VkICYmIHNvLT5maWxsKjMgPj0gKHNvLT5tYXNrKzEpKjIpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc2V0X3RhYmxlX3Jlc2l6ZShzbywgc28tPnVzZWQ+NTAwMDAgPyBzby0+dXNlZCoyIDogc28tPnVzZWQqNCk7CisgICAgZW50cnkua2V5ID0ga2V5OworICAgIGVudHJ5Lmhhc2ggPSBoYXNoOworICAgIHJldHVybiBzZXRfYWRkX2VudHJ5KHNvLCAmZW50cnkpOwogfQogCiAjZGVmaW5lIERJU0NBUkRfTk9URk9VTkQgMApAQCAtMzc4LDE2ICszMzUsMTggQEAKIAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfZW50cnkoUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqb2xkZW50cnkpCi17ICAgICAgIHNldGVudHJ5ICplbnRyeTsKK3sKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKm9sZF9rZXk7CiAKLSAgICBlbnRyeSA9IChzby0+bG9va3VwKShzbywgb2xkZW50cnktPmtleSwgb2xkZW50cnktPmhhc2gpOworICAgIGVudHJ5ID0gc2V0X2xvb2trZXkoc28sIG9sZGVudHJ5LT5rZXksIG9sZGVudHJ5LT5oYXNoKTsKICAgICBpZiAoZW50cnkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgIHx8ICBlbnRyeS0+a2V5ID09IGR1bW15KQogICAgICAgICByZXR1cm4gRElTQ0FSRF9OT1RGT1VORDsKICAgICBvbGRfa2V5ID0gZW50cnktPmtleTsKICAgICBlbnRyeS0+a2V5ID0gZHVtbXk7CisgICAgZW50cnktPmhhc2ggPSAtMTsKICAgICBzby0+dXNlZC0tOwogICAgIFB5X0RFQ1JFRihvbGRfa2V5KTsKICAgICByZXR1cm4gRElTQ0FSRF9GT1VORDsKQEAgLTM5Niw5ICszNTUsOCBAQAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKKyAgICBzZXRlbnRyeSBlbnRyeTsKICAgICBQeV9oYXNoX3QgaGFzaDsKLSAgICBzZXRlbnRyeSAqZW50cnk7Ci0gICAgUHlPYmplY3QgKm9sZF9rZXk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAKQEAgLTQwOCwxNiArMzY2LDkgQEAKICAgICAgICAgaWYgKGhhc2ggPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGVudHJ5ID0gKHNvLT5sb29rdXApKHNvLCBrZXksIGhhc2gpOwotICAgIGlmIChlbnRyeSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCAgfHwgIGVudHJ5LT5rZXkgPT0gZHVtbXkpCi0gICAgICAgIHJldHVybiBESVNDQVJEX05PVEZPVU5EOwotICAgIG9sZF9rZXkgPSBlbnRyeS0+a2V5OwotICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKLSAgICBzby0+dXNlZC0tOwotICAgIFB5X0RFQ1JFRihvbGRfa2V5KTsKLSAgICByZXR1cm4gRElTQ0FSRF9GT1VORDsKKyAgICBlbnRyeS5rZXkgPSBrZXk7CisgICAgZW50cnkuaGFzaCA9IGhhc2g7CisgICAgcmV0dXJuIHNldF9kaXNjYXJkX2VudHJ5KHNvLCAmZW50cnkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDM0LDIwICszODUsMTUgQEAKIHN0YXRpYyBpbnQKIHNldF9jbGVhcl9pbnRlcm5hbChQeVNldE9iamVjdCAqc28pCiB7Ci0gICAgc2V0ZW50cnkgKmVudHJ5LCAqdGFibGU7Ci0gICAgaW50IHRhYmxlX2lzX21hbGxvY2VkOwotICAgIFB5X3NzaXplX3QgZmlsbDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CisgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOworICAgIFB5X3NzaXplX3QgZmlsbCA9IHNvLT5maWxsOworICAgIFB5X3NzaXplX3QgdXNlZCA9IHNvLT51c2VkOworICAgIGludCB0YWJsZV9pc19tYWxsb2NlZCA9IHRhYmxlICE9IHNvLT5zbWFsbHRhYmxlOwogICAgIHNldGVudHJ5IHNtYWxsX2NvcHlbUHlTZXRfTUlOU0laRV07CiAKLSNpZmRlZiBQeV9ERUJVRwotICAgIFB5X3NzaXplX3QgaSA9IDA7Ci0gICAgUHlfc3NpemVfdCBuID0gc28tPm1hc2sgKyAxOwotI2VuZGlmCi0KICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7Ci0gICAgdGFibGUgPSBzby0+dGFibGU7CiAgICAgYXNzZXJ0KHRhYmxlICE9IE5VTEwpOwotICAgIHRhYmxlX2lzX21hbGxvY2VkID0gdGFibGUgIT0gc28tPnNtYWxsdGFibGU7CiAKICAgICAvKiBUaGlzIGlzIGRlbGljYXRlLiAgRHVyaW5nIHRoZSBwcm9jZXNzIG9mIGNsZWFyaW5nIHRoZSBzZXQsCiAgICAgICogZGVjcmVmcyBjYW4gY2F1c2UgdGhlIHNldCB0byBtdXRhdGUuICBUbyBhdm9pZCBmYXRhbCBjb25mdXNpb24KQEAgLTQ1NSw3ICs0MDEsNiBAQAogICAgICAqIGNsZWFyaW5nIHRoZSBzbG90cywgYW5kIG5ldmVyIHJlZmVyIHRvIGFueXRoaW5nIHZpYSBzby0+cmVmIHdoaWxlCiAgICAgICogY2xlYXJpbmcuCiAgICAgICovCi0gICAgZmlsbCA9IHNvLT5maWxsOwogICAgIGlmICh0YWJsZV9pc19tYWxsb2NlZCkKICAgICAgICAgc2V0X2VtcHR5X3RvX21pbnNpemUoc28pOwogCkBAIC00NzQsMjAgKzQxOSwxMSBAQAogICAgICAqIGFzc2VydCB0aGF0IHRoZSByZWZjb3VudCBvbiB0YWJsZSBpcyAxIG5vdywgaS5lLiB0aGF0IHRoaXMgZnVuY3Rpb24KICAgICAgKiBoYXMgdW5pcXVlIGFjY2VzcyB0byBpdCwgc28gZGVjcmVmIHNpZGUtZWZmZWN0cyBjYW4ndCBhbHRlciBpdC4KICAgICAgKi8KLSAgICBmb3IgKGVudHJ5ID0gdGFibGU7IGZpbGwgPiAwOyArK2VudHJ5KSB7Ci0jaWZkZWYgUHlfREVCVUcKLSAgICAgICAgYXNzZXJ0KGkgPCBuKTsKLSAgICAgICAgKytpOwotI2VuZGlmCi0gICAgICAgIGlmIChlbnRyeS0+a2V5KSB7Ci0gICAgICAgICAgICAtLWZpbGw7Ci0gICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBkdW1teSkKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CisgICAgZm9yIChlbnRyeSA9IHRhYmxlOyB1c2VkID4gMDsgZW50cnkrKykgeworICAgICAgICBpZiAoZW50cnktPmtleSAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CisgICAgICAgICAgICB1c2VkLS07CisgICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CiAgICAgICAgIH0KLSNpZmRlZiBQeV9ERUJVRwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhc3NlcnQoZW50cnktPmtleSA9PSBOVUxMKTsKLSNlbmRpZgogICAgIH0KIAogICAgIGlmICh0YWJsZV9pc19tYWxsb2NlZCkKQEAgLTUzNCwxNiArNDcwLDE2IEBACiBzZXRfZGVhbGxvYyhQeVNldE9iamVjdCAqc28pCiB7CiAgICAgc2V0ZW50cnkgKmVudHJ5OwotICAgIFB5X3NzaXplX3QgZmlsbCA9IHNvLT5maWxsOworICAgIFB5X3NzaXplX3QgdXNlZCA9IHNvLT51c2VkOworCiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhzbyk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihzbykKICAgICBpZiAoc28tPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNvKTsKIAotICAgIGZvciAoZW50cnkgPSBzby0+dGFibGU7IGZpbGwgPiAwOyBlbnRyeSsrKSB7Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5KSB7Ci0gICAgICAgICAgICAtLWZpbGw7Ci0gICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBkdW1teSkKKyAgICBmb3IgKGVudHJ5ID0gc28tPnRhYmxlOyB1c2VkID4gMDsgZW50cnkrKykgeworICAgICAgICBpZiAoZW50cnktPmtleSAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CisgICAgICAgICAgICAgICAgdXNlZC0tOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTYwOSwxNiArNTQ1LDE2IEBACiB7CiAgICAgUHlTZXRPYmplY3QgKm90aGVyOwogICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqc29fZW50cnk7CisgICAgc2V0ZW50cnkgKm90aGVyX2VudHJ5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2sob3RoZXJzZXQpKTsKIAogICAgIG90aGVyID0gKFB5U2V0T2JqZWN0KilvdGhlcnNldDsKICAgICBpZiAob3RoZXIgPT0gc28gfHwgb3RoZXItPnVzZWQgPT0gMCkKLSAgICAgICAgLyogYS51cGRhdGUoYSkgb3IgYS51cGRhdGUoe30pOyBub3RoaW5nIHRvIGRvICovCisgICAgICAgIC8qIGEudXBkYXRlKGEpIG9yIGEudXBkYXRlKHNldCgpKTsgbm90aGluZyB0byBkbyAqLwogICAgICAgICByZXR1cm4gMDsKICAgICAvKiBEbyBvbmUgYmlnIHJlc2l6ZSBhdCB0aGUgc3RhcnQsIHJhdGhlciB0aGFuCiAgICAgICogaW5jcmVtZW50YWxseSByZXNpemluZyBhcyB3ZSBpbnNlcnQgbmV3IGtleXMuICBFeHBlY3QKQEAgLTYyOCwxNCArNTY0LDQ1IEBACiAgICAgICAgaWYgKHNldF90YWJsZV9yZXNpemUoc28sIChzby0+dXNlZCArIG90aGVyLT51c2VkKSoyKSAhPSAwKQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIHNvX2VudHJ5ID0gc28tPnRhYmxlOworICAgIG90aGVyX2VudHJ5ID0gb3RoZXItPnRhYmxlOworCisgICAgLyogSWYgb3VyIHRhYmxlIGlzIGVtcHR5LCBhbmQgYm90aCB0YWJsZXMgaGF2ZSB0aGUgc2FtZSBzaXplLCBhbmQKKyAgICAgICB0aGVyZSBhcmUgbm8gZHVtbWllcyB0byBlbGltaW5hdGUsIHRoZW4ganVzdCBjb3B5IHRoZSBwb2ludGVycy4gKi8KKyAgICBpZiAoc28tPmZpbGwgPT0gMCAmJiBzby0+bWFzayA9PSBvdGhlci0+bWFzayAmJiBvdGhlci0+ZmlsbCA9PSBvdGhlci0+dXNlZCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG90aGVyLT5tYXNrOyBpKyssIHNvX2VudHJ5KyssIG90aGVyX2VudHJ5KyspIHsKKyAgICAgICAgICAgIGtleSA9IG90aGVyX2VudHJ5LT5rZXk7CisgICAgICAgICAgICBpZiAoa2V5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoc29fZW50cnktPmtleSA9PSBOVUxMKTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICBzb19lbnRyeS0+a2V5ID0ga2V5OworICAgICAgICAgICAgICAgIHNvX2VudHJ5LT5oYXNoID0gb3RoZXJfZW50cnktPmhhc2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc28tPmZpbGwgPSBvdGhlci0+ZmlsbDsKKyAgICAgICAgc28tPnVzZWQgPSBvdGhlci0+dXNlZDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogSWYgb3VyIHRhYmxlIGlzIGVtcHR5LCB3ZSBjYW4gdXNlIHNldF9pbnNlcnRfY2xlYW4oKSAqLworICAgIGlmIChzby0+ZmlsbCA9PSAwKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gb3RoZXItPm1hc2s7IGkrKywgb3RoZXJfZW50cnkrKykgeworICAgICAgICAgICAga2V5ID0gb3RoZXJfZW50cnktPmtleTsKKyAgICAgICAgICAgIGlmIChrZXkgIT0gTlVMTCAmJiBrZXkgIT0gZHVtbXkpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICBzZXRfaW5zZXJ0X2NsZWFuKHNvLCBrZXksIG90aGVyX2VudHJ5LT5oYXNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBXZSBjYW4ndCBhc3N1cmUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZXMsIHNvIGRvIG5vcm1hbCBpbnNlcnRpb25zICovCiAgICAgZm9yIChpID0gMDsgaSA8PSBvdGhlci0+bWFzazsgaSsrKSB7Ci0gICAgICAgIGVudHJ5ID0gJm90aGVyLT50YWJsZVtpXTsKLSAgICAgICAga2V5ID0gZW50cnktPmtleTsKLSAgICAgICAgaGFzaCA9IGVudHJ5LT5oYXNoOwotICAgICAgICBpZiAoa2V5ICE9IE5VTEwgJiYKLSAgICAgICAgICAgIGtleSAhPSBkdW1teSkgeworICAgICAgICBvdGhlcl9lbnRyeSA9ICZvdGhlci0+dGFibGVbaV07CisgICAgICAgIGtleSA9IG90aGVyX2VudHJ5LT5rZXk7CisgICAgICAgIGlmIChrZXkgIT0gTlVMTCAmJiBrZXkgIT0gZHVtbXkpIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRihrZXkpOwotICAgICAgICAgICAgaWYgKHNldF9pbnNlcnRfa2V5KHNvLCBrZXksIGhhc2gpID09IC0xKSB7CisgICAgICAgICAgICBpZiAoc2V0X2luc2VydF9rZXkoc28sIGtleSwgb3RoZXJfZW50cnktPmhhc2gpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQpAQCAtNjQ1LDEwICs2MTIsMjMgQEAKIH0KIAogc3RhdGljIGludAorc2V0X2NvbnRhaW5zX2VudHJ5KFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKmVudHJ5KQoreworICAgIFB5T2JqZWN0ICprZXk7CisgICAgc2V0ZW50cnkgKmx1X2VudHJ5OworCisgICAgbHVfZW50cnkgPSBzZXRfbG9va2tleShzbywgZW50cnktPmtleSwgZW50cnktPmhhc2gpOworICAgIGlmIChsdV9lbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAga2V5ID0gbHVfZW50cnktPmtleTsKKyAgICByZXR1cm4ga2V5ICE9IE5VTEwgJiYga2V5ICE9IGR1bW15OworfQorCitzdGF0aWMgaW50CiBzZXRfY29udGFpbnNfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKKyAgICBzZXRlbnRyeSBlbnRyeTsKICAgICBQeV9oYXNoX3QgaGFzaDsKLSAgICBzZXRlbnRyeSAqZW50cnk7CiAKICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKICAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKQEAgLTY1NiwzMCArNjM2LDE2IEBACiAgICAgICAgIGlmIChoYXNoID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBlbnRyeSA9IChzby0+bG9va3VwKShzbywga2V5LCBoYXNoKTsKLSAgICBpZiAoZW50cnkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGtleSA9IGVudHJ5LT5rZXk7Ci0gICAgcmV0dXJuIGtleSAhPSBOVUxMICYmIGtleSAhPSBkdW1teTsKLX0KLQotc3RhdGljIGludAotc2V0X2NvbnRhaW5zX2VudHJ5KFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKmVudHJ5KQotewotICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgc2V0ZW50cnkgKmx1X2VudHJ5OwotCi0gICAgbHVfZW50cnkgPSAoc28tPmxvb2t1cCkoc28sIGVudHJ5LT5rZXksIGVudHJ5LT5oYXNoKTsKLSAgICBpZiAobHVfZW50cnkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGtleSA9IGx1X2VudHJ5LT5rZXk7Ci0gICAgcmV0dXJuIGtleSAhPSBOVUxMICYmIGtleSAhPSBkdW1teTsKKyAgICBlbnRyeS5rZXkgPSBrZXk7CisgICAgZW50cnkuaGFzaCA9IGhhc2g7CisgICAgcmV0dXJuIHNldF9jb250YWluc19lbnRyeShzbywgJmVudHJ5KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9wb3AoUHlTZXRPYmplY3QgKnNvKQogewotICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgLyogTWFrZSBzdXJlIHRoZSBzZWFyY2ggZmluZ2VyIGlzIGluIGJvdW5kcyAqLworICAgIFB5X3NzaXplX3QgaSA9IHNvLT5maW5nZXIgJiBzby0+bWFzazsKICAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKmtleTsKIApAQCAtNjg5LDMyICs2NTUsMTYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgLyogU2V0IGVudHJ5IHRvICJ0aGUgZmlyc3QiIHVudXNlZCBvciBkdW1teSBzZXQgZW50cnkuICBXZSBhYnVzZQotICAgICAqIHRoZSBoYXNoIGZpZWxkIG9mIHNsb3QgMCB0byBob2xkIGEgc2VhcmNoIGZpbmdlcjoKLSAgICAgKiBJZiBzbG90IDAgaGFzIGEgdmFsdWUsIHVzZSBzbG90IDAuCi0gICAgICogRWxzZSBzbG90IDAgaXMgYmVpbmcgdXNlZCB0byBob2xkIGEgc2VhcmNoIGZpbmdlciwKLSAgICAgKiBhbmQgd2UgdXNlIGl0cyBoYXNoIHZhbHVlIGFzIHRoZSBmaXJzdCBpbmRleCB0byBsb29rLgotICAgICAqLwotICAgIGVudHJ5ID0gJnNvLT50YWJsZVswXTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMIHx8IGVudHJ5LT5rZXkgPT0gZHVtbXkpIHsKLSAgICAgICAgaSA9IGVudHJ5LT5oYXNoOwotICAgICAgICAvKiBUaGUgaGFzaCBmaWVsZCBtYXkgYmUgYSByZWFsIGhhc2ggdmFsdWUsIG9yIGl0IG1heSBiZSBhCi0gICAgICAgICAqIGxlZ2l0IHNlYXJjaCBmaW5nZXIsIG9yIGl0IG1heSBiZSBhIG9uY2UtbGVnaXQgc2VhcmNoCi0gICAgICAgICAqIGZpbmdlciB0aGF0J3Mgb3V0IG9mIGJvdW5kcyBub3cgYmVjYXVzZSBpdCB3cmFwcGVkIGFyb3VuZAotICAgICAgICAgKiBvciB0aGUgdGFibGUgc2hydW5rIC0tIHNpbXBseSBtYWtlIHN1cmUgaXQncyBpbiBib3VuZHMgbm93LgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGkgPiBzby0+bWFzayB8fCBpIDwgMSkKLSAgICAgICAgICAgIGkgPSAxOyAgICAgICAgICAgICAgLyogc2tpcCBzbG90IDAgKi8KLSAgICAgICAgd2hpbGUgKChlbnRyeSA9ICZzby0+dGFibGVbaV0pLT5rZXkgPT0gTlVMTCB8fCBlbnRyeS0+a2V5PT1kdW1teSkgewotICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgaWYgKGkgPiBzby0+bWFzaykKLSAgICAgICAgICAgICAgICBpID0gMTsKLSAgICAgICAgfQorICAgIHdoaWxlICgoZW50cnkgPSAmc28tPnRhYmxlW2ldKS0+a2V5ID09IE5VTEwgfHwgZW50cnktPmtleT09ZHVtbXkpIHsKKyAgICAgICAgaSsrOworICAgICAgICBpZiAoaSA+IHNvLT5tYXNrKQorICAgICAgICAgICAgaSA9IDA7CiAgICAgfQogICAgIGtleSA9IGVudHJ5LT5rZXk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OworICAgIGVudHJ5LT5oYXNoID0gLTE7CiAgICAgc28tPnVzZWQtLTsKLSAgICBzby0+dGFibGVbMF0uaGFzaCA9IGkgKyAxOyAgLyogbmV4dCBwbGFjZSB0byBzdGFydCAqLworICAgIHNvLT5maW5nZXIgPSBpICsgMTsgICAgICAgICAvKiBuZXh0IHBsYWNlIHRvIHN0YXJ0ICovCiAgICAgcmV0dXJuIGtleTsKIH0KIApAQCAtNzU3LDcgKzcwNyw3IEBACiAgICAgaGFzaCAqPSAoUHlfdWhhc2hfdClQeVNldF9HRVRfU0laRShzZWxmKSArIDE7CiAgICAgd2hpbGUgKHNldF9uZXh0KHNvLCAmcG9zLCAmZW50cnkpKSB7CiAgICAgICAgIC8qIFdvcmsgdG8gaW5jcmVhc2UgdGhlIGJpdCBkaXNwZXJzaW9uIGZvciBjbG9zZWx5IHNwYWNlZCBoYXNoCi0gICAgICAgICAgIHZhbHVlcy4gIFRoZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHVzZSBjYXNlcyBoYXZlIG1hbnkKKyAgICAgICAgICAgdmFsdWVzLiAgVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHVzZSBjYXNlcyBoYXZlIG1hbnkKICAgICAgICAgICAgY29tYmluYXRpb25zIG9mIGEgc21hbGwgbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggbmVhcmJ5CiAgICAgICAgICAgIGhhc2hlcyBzbyB0aGF0IG1hbnkgZGlzdGluY3QgY29tYmluYXRpb25zIGNvbGxhcHNlIHRvIG9ubHkKICAgICAgICAgICAgYSBoYW5kZnVsIG9mIGRpc3RpbmN0IGhhc2ggdmFsdWVzLiAqLwpAQCAtNzY3LDcgKzcxNyw3IEBACiAgICAgLyogTWFrZSB0aGUgZmluYWwgcmVzdWx0IHNwcmVhZC1vdXQgaW4gYSBkaWZmZXJlbnQgcGF0dGVybgogICAgICAgIHRoYW4gdGhlIGFsZ29yaXRobSBmb3IgdHVwbGVzIG9yIG90aGVyIHB5dGhvbiBvYmplY3RzLiAqLwogICAgIGhhc2ggPSBoYXNoICogNjkwNjlVICsgOTA3MTMzOTIzVUw7Ci0gICAgaWYgKGhhc2ggPT0gLTEpCisgICAgaWYgKGhhc2ggPT0gKFB5X3VoYXNoX3QpLTEpCiAgICAgICAgIGhhc2ggPSA1OTA5MjM3MTNVTDsKICAgICBzby0+aGFzaCA9IGhhc2g7CiAgICAgcmV0dXJuIGhhc2g7CkBAIC04ODksOCArODM5LDggQEAKICAgICByZXR1cm4ga2V5OwogCiBmYWlsOgotICAgIFB5X0RFQ1JFRihzbyk7CiAgICAgc2ktPnNpX3NldCA9IE5VTEw7CisgICAgUHlfREVDUkVGKHNvKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtOTcxLDcgKzkyMSw3IEBACiAKICAgICAgICAgICAgIGFuX2VudHJ5Lmhhc2ggPSBoYXNoOwogICAgICAgICAgICAgYW5fZW50cnkua2V5ID0ga2V5OwotICAgICAgICAgICAgaWYgKHNldF9hZGRfZW50cnkoc28sICZhbl9lbnRyeSkgPT0gLTEpCisgICAgICAgICAgICBpZiAoc2V0X2FkZF9lbnRyeShzbywgJmFuX2VudHJ5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CkBAIC05ODIsNyArOTMyLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgd2hpbGUgKChrZXkgPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHNldF9hZGRfa2V5KHNvLCBrZXkpID09IC0xKSB7CisgICAgICAgIGlmIChzZXRfYWRkX2tleShzbywga2V5KSkgewogICAgICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTAwMiw3ICs5NTIsNyBAQAogCiAgICAgZm9yIChpPTAgOyBpPFB5VHVwbGVfR0VUX1NJWkUoYXJncykgOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKm90aGVyID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCBpKTsKLSAgICAgICAgaWYgKHNldF91cGRhdGVfaW50ZXJuYWwoc28sIG90aGVyKSA9PSAtMSkKKyAgICAgICAgaWYgKHNldF91cGRhdGVfaW50ZXJuYWwoc28sIG90aGVyKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTEwMTEsNiArOTYxLDEyIEBACiBQeURvY19TVFJWQVIodXBkYXRlX2RvYywKICJVcGRhdGUgYSBzZXQgd2l0aCB0aGUgdW5pb24gb2YgaXRzZWxmIGFuZCBvdGhlcnMuIik7CiAKKy8qIFhYWCBUb2RvOgorICAgSWYgYWxpZ25lZCBtZW1vcnkgYWxsb2NhdGlvbnMgYmVjb21lIGF2YWlsYWJsZSwgbWFrZSB0aGUKKyAgIHNldCBvYmplY3QgNjQgYnl0ZSBhbGlnbmVkIHNvIHRoYXQgbW9zdCBvZiB0aGUgZmllbGRzCisgICBjYW4gYmUgcmV0cmlldmVkIG9yIHVwZGF0ZWQgaW4gYSBzaW5nbGUgY2FjaGUgbGluZS4KKyovCisKIHN0YXRpYyBQeU9iamVjdCAqCiBtYWtlX25ld19zZXQoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7CkBAIC0xMDI1LDEyICs5ODEsMTIgQEAKICAgICBzby0+dXNlZCA9IDA7CiAgICAgc28tPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsKICAgICBzby0+dGFibGUgPSBzby0+c21hbGx0YWJsZTsKLSAgICBzby0+bG9va3VwID0gc2V0X2xvb2trZXlfdW5pY29kZTsKICAgICBzby0+aGFzaCA9IC0xOworICAgIHNvLT5maW5nZXIgPSAwOwogICAgIHNvLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAKICAgICBpZiAoaXRlcmFibGUgIT0gTlVMTCkgewotICAgICAgICBpZiAoc2V0X3VwZGF0ZV9pbnRlcm5hbChzbywgaXRlcmFibGUpID09IC0xKSB7CisgICAgICAgIGlmIChzZXRfdXBkYXRlX2ludGVybmFsKHNvLCBpdGVyYWJsZSkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzbyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTExNCwxMCArMTA3MCw4IEBACiAgICAgIHQ9c2V0KGEpOyBhLmNsZWFyKCk7IGEudXBkYXRlKGIpOyBiLmNsZWFyKCk7IGIudXBkYXRlKHQpOyBkZWwgdAogCiAgICBUaGUgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzIGFuZCBpdCBsZWF2ZXMgYm90aCBvYmplY3RzIGluIGEgc3RhYmxlIHN0YXRlLgotICAgVXNlZnVsIGZvciBjcmVhdGluZyB0ZW1wb3JhcnkgZnJvemVuc2V0cyBmcm9tIHNldHMgZm9yIG1lbWJlcnNoaXAgdGVzdGluZwotICAgaW4gX19jb250YWluc19fKCksIGRpc2NhcmQoKSwgYW5kIHJlbW92ZSgpLiAgQWxzbyB1c2VmdWwgZm9yIG9wZXJhdGlvbnMKLSAgIHRoYXQgdXBkYXRlIGluLXBsYWNlIChieSBhbGxvd2luZyBhbiBpbnRlcm1lZGlhdGUgcmVzdWx0IHRvIGJlIHN3YXBwZWQKLSAgIGludG8gb25lIG9mIHRoZSBvcmlnaW5hbCBpbnB1dHMpLgorICAgVXNlZnVsIGZvciBvcGVyYXRpb25zIHRoYXQgdXBkYXRlIGluLXBsYWNlIChieSBhbGxvd2luZyBhbiBpbnRlcm1lZGlhdGUKKyAgIHJlc3VsdCB0byBiZSBzd2FwcGVkIGludG8gb25lIG9mIHRoZSBvcmlnaW5hbCBpbnB1dHMpLgogKi8KIAogc3RhdGljIHZvaWQKQEAgLTExMjUsNyArMTA3OSw2IEBACiB7CiAgICAgUHlfc3NpemVfdCB0OwogICAgIHNldGVudHJ5ICp1OwotICAgIHNldGVudHJ5ICooKmYpKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfc3NpemVfdCBoYXNoKTsKICAgICBzZXRlbnRyeSB0YWJbUHlTZXRfTUlOU0laRV07CiAgICAgUHlfaGFzaF90IGg7CiAKQEAgLTExNDEsOCArMTA5NCw2IEBACiAgICAgICAgIGEtPnRhYmxlID0gYS0+c21hbGx0YWJsZTsKICAgICBiLT50YWJsZSA9IHU7CiAKLSAgICBmID0gYS0+bG9va3VwOyAgIGEtPmxvb2t1cCA9IGItPmxvb2t1cDsgICAgICBiLT5sb29rdXAgPSBmOwotCiAgICAgaWYgKGEtPnRhYmxlID09IGEtPnNtYWxsdGFibGUgfHwgYi0+dGFibGUgPT0gYi0+c21hbGx0YWJsZSkgewogICAgICAgICBtZW1jcHkodGFiLCBhLT5zbWFsbHRhYmxlLCBzaXplb2YodGFiKSk7CiAgICAgICAgIG1lbWNweShhLT5zbWFsbHRhYmxlLCBiLT5zbWFsbHRhYmxlLCBzaXplb2YodGFiKSk7CkBAIC0xMjAwLDcgKzExNTEsNyBAQAogICAgICAgICBvdGhlciA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSk7CiAgICAgICAgIGlmICgoUHlPYmplY3QgKilzbyA9PSBvdGhlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2V0X3VwZGF0ZV9pbnRlcm5hbChyZXN1bHQsIG90aGVyKSA9PSAtMSkgeworICAgICAgICBpZiAoc2V0X3VwZGF0ZV9pbnRlcm5hbChyZXN1bHQsIG90aGVyKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTIyNiw3ICsxMTc3LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKChQeU9iamVjdCAqKXNvID09IG90aGVyKQogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopcmVzdWx0OwotICAgIGlmIChzZXRfdXBkYXRlX2ludGVybmFsKHJlc3VsdCwgb3RoZXIpID09IC0xKSB7CisgICAgaWYgKHNldF91cGRhdGVfaW50ZXJuYWwocmVzdWx0LCBvdGhlcikpIHsKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEyMzksNyArMTE5MCw3IEBACiAgICAgaWYgKCFQeUFueVNldF9DaGVjayhvdGhlcikpCiAgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKIAotICAgIGlmIChzZXRfdXBkYXRlX2ludGVybmFsKHNvLCBvdGhlcikgPT0gLTEpCisgICAgaWYgKHNldF91cGRhdGVfaW50ZXJuYWwoc28sIG90aGVyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfSU5DUkVGKHNvKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc287CkBAIC0xMjc1LDcgKzEyMjYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJ2KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNldF9hZGRfZW50cnkocmVzdWx0LCBlbnRyeSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0X2FkZF9lbnRyeShyZXN1bHQsIGVudHJ5KSkgewogICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTMxMSw3ICsxMjYyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmIChydikgewotICAgICAgICAgICAgaWYgKHNldF9hZGRfZW50cnkocmVzdWx0LCAmZW50cnkpID09IC0xKSB7CisgICAgICAgICAgICBpZiAoc2V0X2FkZF9lbnRyeShyZXN1bHQsICZlbnRyeSkpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwpAQCAtMTUxOSw3ICsxNDcwLDcgQEAKIAogICAgIGZvciAoaT0wIDsgaTxQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIDsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICpvdGhlciA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSk7Ci0gICAgICAgIGlmIChzZXRfZGlmZmVyZW5jZV91cGRhdGVfaW50ZXJuYWwoc28sIG90aGVyKSA9PSAtMSkKKyAgICAgICAgaWYgKHNldF9kaWZmZXJlbmNlX3VwZGF0ZV9pbnRlcm5hbChzbywgb3RoZXIpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMTU3NSw3ICsxNTI2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghcnYpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0X2FkZF9lbnRyeSgoUHlTZXRPYmplY3QgKilyZXN1bHQsICZlbnRyeWNvcHkpID09IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldF9hZGRfZW50cnkoKFB5U2V0T2JqZWN0ICopcmVzdWx0LCAmZW50cnljb3B5KSkgewogICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTU5Miw3ICsxNTQzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmICghcnYpIHsKLSAgICAgICAgICAgIGlmIChzZXRfYWRkX2VudHJ5KChQeVNldE9iamVjdCAqKXJlc3VsdCwgZW50cnkpID09IC0xKSB7CisgICAgICAgICAgICBpZiAoc2V0X2FkZF9lbnRyeSgoUHlTZXRPYmplY3QgKilyZXN1bHQsIGVudHJ5KSkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQpAQCAtMTYxNyw3ICsxNTY4LDcgQEAKIAogICAgIGZvciAoaT0xIDsgaTxQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIDsgaSsrKSB7CiAgICAgICAgIG90aGVyID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCBpKTsKLSAgICAgICAgaWYgKHNldF9kaWZmZXJlbmNlX3VwZGF0ZV9pbnRlcm5hbCgoUHlTZXRPYmplY3QgKilyZXN1bHQsIG90aGVyKSA9PSAtMSkgeworICAgICAgICBpZiAoc2V0X2RpZmZlcmVuY2VfdXBkYXRlX2ludGVybmFsKChQeVNldE9iamVjdCAqKXJlc3VsdCwgb3RoZXIpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0xNjQyLDcgKzE1OTMsNyBAQAogewogICAgIGlmICghUHlBbnlTZXRfQ2hlY2sob3RoZXIpKQogICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7Ci0gICAgaWYgKHNldF9kaWZmZXJlbmNlX3VwZGF0ZV9pbnRlcm5hbChzbywgb3RoZXIpID09IC0xKQorICAgIGlmIChzZXRfZGlmZmVyZW5jZV91cGRhdGVfaW50ZXJuYWwoc28sIG90aGVyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfSU5DUkVGKHNvKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc287CkBAIC0xNjc2LDcgKzE2MjcsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJ2ID09IERJU0NBUkRfTk9URk9VTkQpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0X2FkZF9lbnRyeShzbywgJmFuX2VudHJ5KSA9PSAtMSkgeworICAgICAgICAgICAgICAgIGlmIChzZXRfYWRkX2VudHJ5KHNvLCAmYW5fZW50cnkpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzAyLDcgKzE2NTMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJ2ID09IERJU0NBUkRfTk9URk9VTkQpIHsKLSAgICAgICAgICAgIGlmIChzZXRfYWRkX2VudHJ5KHNvLCBlbnRyeSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChzZXRfYWRkX2VudHJ5KHNvLCBlbnRyeSkpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYob3RoZXJzZXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQpAQCAtMTg1Myw3ICsxODA0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfYWRkKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKLSAgICBpZiAoc2V0X2FkZF9rZXkoc28sIGtleSkgPT0gLTEpCisgICAgaWYgKHNldF9hZGRfa2V5KHNvLCBrZXkpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTE5ODYsNyArMTkzNyw3IEBACiB7CiAgICAgUHlfc3NpemVfdCByZXM7CiAKLSAgICByZXMgPSBzaXplb2YoUHlTZXRPYmplY3QpOworICAgIHJlcyA9IF9QeU9iamVjdF9TSVpFKFB5X1RZUEUoc28pKTsKICAgICBpZiAoc28tPnRhYmxlICE9IHNvLT5zbWFsbHRhYmxlKQogICAgICAgICByZXMgPSByZXMgKyAoc28tPm1hc2sgKyAxKSAqIHNpemVvZihzZXRlbnRyeSk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwpAQCAtMjM5Nyw3ICsyMzQ4LDcgQEAKICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNldF9jbGVhcl9pbnRlcm5hbChzbyk7Ci0gICAgaWYgKHNldF91cGRhdGVfaW50ZXJuYWwoc28sIHN0cikgPT0gLTEpIHsKKyAgICBpZiAoc2V0X3VwZGF0ZV9pbnRlcm5hbChzbywgc3RyKSkgewogICAgICAgICBQeV9ERUNSRUYoc3RyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zbGljZW9iamVjdC5jIGIvT2JqZWN0cy9zbGljZW9iamVjdC5jCmluZGV4IDEwNDk1MjMuLjJmMzIzNTUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2xpY2VvYmplY3QuYworKysgYi9PYmplY3RzL3NsaWNlb2JqZWN0LmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgIFB5U2xpY2VPYmplY3QgKm9iaiA9IHNsaWNlX2NhY2hlOwogICAgIGlmIChvYmogIT0gTlVMTCkgewogICAgICAgICBzbGljZV9jYWNoZSA9IE5VTEw7Ci0gICAgICAgIFB5T2JqZWN0X0RlbChvYmopOworICAgICAgICBQeU9iamVjdF9HQ19EZWwob2JqKTsKICAgICB9CiB9CiAKQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICBzbGljZV9jYWNoZSA9IE5VTEw7CiAgICAgICAgIF9QeV9OZXdSZWZlcmVuY2UoKFB5T2JqZWN0ICopb2JqKTsKICAgICB9IGVsc2UgewotICAgICAgICBvYmogPSBQeU9iamVjdF9OZXcoUHlTbGljZU9iamVjdCwgJlB5U2xpY2VfVHlwZSk7CisgICAgICAgIG9iaiA9IFB5T2JqZWN0X0dDX05ldyhQeVNsaWNlT2JqZWN0LCAmUHlTbGljZV9UeXBlKTsKICAgICAgICAgaWYgKG9iaiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTM1LDYgKzEzNSw3IEBACiAgICAgb2JqLT5zdGFydCA9IHN0YXJ0OwogICAgIG9iai0+c3RvcCA9IHN0b3A7CiAKKyAgICBfUHlPYmplY3RfR0NfVFJBQ0sob2JqKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9iajsKIH0KIApAQCAtMjg4LDEzICsyODksMTQgQEAKIHN0YXRpYyB2b2lkCiBzbGljZV9kZWFsbG9jKFB5U2xpY2VPYmplY3QgKnIpCiB7CisgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0socik7CiAgICAgUHlfREVDUkVGKHItPnN0ZXApOwogICAgIFB5X0RFQ1JFRihyLT5zdGFydCk7CiAgICAgUHlfREVDUkVGKHItPnN0b3ApOwogICAgIGlmIChzbGljZV9jYWNoZSA9PSBOVUxMKQogICAgICAgICBzbGljZV9jYWNoZSA9IHI7CiAgICAgZWxzZQotICAgICAgICBQeU9iamVjdF9EZWwocik7CisgICAgICAgIFB5T2JqZWN0X0dDX0RlbChyKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTU4Niw2ICs1ODgsMTUgQEAKICAgICByZXR1cm4gcmVzOwogfQogCitzdGF0aWMgaW50CitzbGljZV90cmF2ZXJzZShQeVNsaWNlT2JqZWN0ICp2LCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVCh2LT5zdGFydCk7CisgICAgUHlfVklTSVQodi0+c3RvcCk7CisgICAgUHlfVklTSVQodi0+c3RlcCk7CisgICAgcmV0dXJuIDA7Cit9CisKIFB5VHlwZU9iamVjdCBQeVNsaWNlX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAic2xpY2UiLCAgICAgICAgICAgICAgICAgICAgLyogTmFtZSBvZiB0aGlzIHR5cGUgKi8KQEAgLTYwNiw5ICs2MTcsOSBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgICAvKiB0cF9mbGFncyAqLwogICAgIHNsaWNlX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgICh0cmF2ZXJzZXByb2Mpc2xpY2VfdHJhdmVyc2UsICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgc2xpY2VfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKaW5kZXggZWUxYmYyYi4uMGZjNmI1OCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKQEAgLTcxOCw2ICs3MTgsOTMgQEAKICAgICByZXR1cm4gbGVuIC0gKGVuZCAtIGluICsgMSk7CiAjZW5kaWYKIH0KKworI2lmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA9PSAxCisjIGRlZmluZSBTV0FCNChDSCwgdG1wKSAgKChDSCkgPDwgMjQpIC8qIGhpZ2ggYnl0ZXMgYXJlIHplcm8gKi8KKyNlbGlmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA9PSAyCisjIGRlZmluZSBTV0FCNChDSCwgdG1wKSAgKHRtcCA9IChDSCksIFwKKyAgICAgICAgICAgICgodG1wICYgMHgwMEZGdSkgPDwgMjQpICsgKCh0bXAgJiAweEZGMDB1KSA8PCA4KSkKKyAgICAgICAgICAgIC8qIGhpZ2ggYnl0ZXMgYXJlIHplcm8gKi8KKyNlbHNlCisjIGRlZmluZSBTV0FCNChDSCwgdG1wKSAgKHRtcCA9IChDSCksIFwKKyAgICAgICAgICAgIHRtcCA9ICgodG1wICYgMHgwMEZGMDBGRnUpIDw8IDgpICsgKCh0bXAgPj4gOCkgJiAweDAwRkYwMEZGdSksIFwKKyAgICAgICAgICAgICgodG1wICYgMHgwMDAwRkZGRnUpIDw8IDE2KSArICgodG1wID4+IDE2KSAmIDB4MDAwMEZGRkZ1KSkKKyNlbmRpZgorUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCitTVFJJTkdMSUIodXRmMzJfZW5jb2RlKShjb25zdCBTVFJJTkdMSUJfQ0hBUiAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBZX1VJTlQzMl9UICoqb3V0cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hdGl2ZV9vcmRlcmluZykKK3sKKyAgICBQWV9VSU5UMzJfVCAqb3V0ID0gKm91dHB0cjsKKyAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqZW5kID0gaW4gKyBsZW47CisgICAgaWYgKG5hdGl2ZV9vcmRlcmluZykgeworICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworI2lmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA+IDEKKyAgICAgICAgICAgIC8qIGNoZWNrIGlmIGFueSBjaGFyYWN0ZXIgaXMgYSBzdXJyb2dhdGUgY2hhcmFjdGVyICovCisgICAgICAgICAgICBpZiAoKChpblswXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMV0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzJdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblszXSBeIDB4ZDgwMCkgJiAweGY4MDApID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIG91dFswXSA9IGluWzBdOworICAgICAgICAgICAgb3V0WzFdID0gaW5bMV07CisgICAgICAgICAgICBvdXRbMl0gPSBpblsyXTsKKyAgICAgICAgICAgIG91dFszXSA9IGluWzNdOworICAgICAgICAgICAgaW4gKz0gNDsgb3V0ICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7CisgICAgICAgICAgICBQeV9VQ1M0IGNoOworICAgICAgICAgICAgY2ggPSAqaW4rKzsKKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPiAxCisgICAgICAgICAgICBpZiAoUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7CisgICAgICAgICAgICAgICAgLyogcmVqZWN0IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIChVK0Q4MDAtVStERkZGKSAqLworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgKm91dCsrID0gY2g7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworI2lmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA+IDEKKyAgICAgICAgICAgIFB5X1VDUzQgY2gxLCBjaDIsIGNoMywgY2g0OworICAgICAgICAgICAgLyogY2hlY2sgaWYgYW55IGNoYXJhY3RlciBpcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGlmICgoKGluWzBdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsxXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMl0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzNdIF4gMHhkODAwKSAmIDB4ZjgwMCkgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgb3V0WzBdID0gU1dBQjQoaW5bMF0sIGNoMSk7CisgICAgICAgICAgICBvdXRbMV0gPSBTV0FCNChpblsxXSwgY2gyKTsKKyAgICAgICAgICAgIG91dFsyXSA9IFNXQUI0KGluWzJdLCBjaDMpOworICAgICAgICAgICAgb3V0WzNdID0gU1dBQjQoaW5bM10sIGNoNCk7CisgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaW4gPCBlbmQpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqaW4rKzsKKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPiAxCisgICAgICAgICAgICBpZiAoUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7CisgICAgICAgICAgICAgICAgLyogcmVqZWN0IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIChVK0Q4MDAtVStERkZGKSAqLworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgKm91dCsrID0gU1dBQjQoY2gsIGNoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW47CisjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID4gMQorICBmYWlsOgorICAgICpvdXRwdHIgPSBvdXQ7CisgICAgcmV0dXJuIGxlbiAtIChlbmQgLSBpbiArIDEpOworI2VuZGlmCit9CisjdW5kZWYgU1dBQjQKKwogI2VuZGlmCiAKICNlbmRpZiAvKiBTVFJJTkdMSUJfSVNfVU5JQ09ERSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCmluZGV4IGNkN2NhYzQuLmNkYTY4ZTcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKQEAgLTM2LDcgKzM2LDcgQEAKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQogU1RSSU5HTElCKGZhc3RzZWFyY2hfbWVtY2hyXzFjaGFyKShjb25zdCBTVFJJTkdMSUJfQ0hBUiogcywgUHlfc3NpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiBjaCwgdW5zaWduZWQgY2hhciBuZWVkbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQsIGludCBtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBGQVNUX1NFQVJDSCkgewogICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqcHRyID0gczsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAgICAgaWYgKG5lZWRsZSAhPSAwKQogI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNUUklOR0xJQihmYXN0c2VhcmNoX21lbWNocl8xY2hhcikKLSAgICAgICAgICAgICAgICAgICAgICAgKHMsIG4sIHBbMF0sIG5lZWRsZSwgbWF4Y291bnQsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAocywgbiwgcFswXSwgbmVlZGxlLCBtb2RlKTsKICAgICAgICAgfQogICAgICAgICBpZiAobW9kZSA9PSBGQVNUX0NPVU5UKSB7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oCmluZGV4IDUxOGUwMTIuLjE0ODE1ZjYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmgKQEAgLTExLDggKzExLDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHBvczsKIAotICAgIGlmIChzdHJfbGVuIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGFzc2VydChzdHJfbGVuID49IDApOwogICAgIGlmIChzdWJfbGVuID09IDApCiAgICAgICAgIHJldHVybiBvZmZzZXQ7CiAKQEAgLTMxLDggKzMwLDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHBvczsKIAotICAgIGlmIChzdHJfbGVuIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGFzc2VydChzdHJfbGVuID49IDApOwogICAgIGlmIChzdWJfbGVuID09IDApCiAgICAgICAgIHJldHVybiBzdHJfbGVuICsgb2Zmc2V0OwogCkBAIC00NCwyNyArNDIsMTEgQEAKICAgICByZXR1cm4gcG9zOwogfQogCi0vKiBoZWxwZXIgbWFjcm8gdG8gZml4dXAgc3RhcnQvZW5kIHNsaWNlIHZhbHVlcyAqLwotI2RlZmluZSBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4pICAgICAgICAgXAotICAgIGlmIChlbmQgPiBsZW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbmQgPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKGVuZCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbmQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZW5kIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZW5kID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChzdGFydCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdGFydCArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoc3RhcnQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3RhcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQogUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCiBTVFJJTkdMSUIoZmluZF9zbGljZSkoY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN1YiwgUHlfc3NpemVfdCBzdWJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCiB7Ci0gICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgc3RyX2xlbik7CiAgICAgcmV0dXJuIFNUUklOR0xJQihmaW5kKShzdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHN1Yiwgc3ViX2xlbiwgc3RhcnQpOwogfQogCkBAIC03Myw3ICs1NSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN1YiwgUHlfc3NpemVfdCBzdWJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQogewotICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIHN0cl9sZW4pOwogICAgIHJldHVybiBTVFJJTkdMSUIocmZpbmQpKHN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwgc3ViLCBzdWJfbGVuLCBzdGFydCk7CiB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKaW5kZXggY2FlNmVhMS4uYjU1OWI1MyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKQEAgLTU5LDcgKzU5LDcgQEAKIAogICAgIGogPSAwOwogICAgIHEgPSBTVFJJTkdMSUJfU1RSKHUpOwotICAgIAorCiAgICAgZm9yIChwID0gU1RSSU5HTElCX1NUUihzZWxmKTsgcCA8IGU7IHArKykgewogICAgICAgICBpZiAoKnAgPT0gJ1x0JykgewogICAgICAgICAgICAgaWYgKHRhYnNpemUgPiAwKSB7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaAppbmRleCBhZWMyMjFhLi5iZTA5YjVmIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKQEAgLTEyMjYsNyArMTIyNiw3IEBACiAgICAgMH07CiAKIC8qIHVuaWNvZGVfZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQgaXMgdXNlZCB0byBpbXBsZW1lbnQKLSAgIHN0cmluZy5Gb3JtYXR0ZXIudmZvcm1hdC4gIGl0IHRha2VzIGFuIFBFUCAzMTAxICJmaWVsZCBuYW1lIiwgYW5kCisgICBzdHJpbmcuRm9ybWF0dGVyLnZmb3JtYXQuICBpdCB0YWtlcyBhIFBFUCAzMTAxICJmaWVsZCBuYW1lIiwgYW5kCiAgICByZXR1cm5zIGEgdHVwbGUgb2YgKGZpcnN0LCByZXN0KTogImZpcnN0IiwgdGhlIHBhcnQgYmVmb3JlIHRoZQogICAgZmlyc3QgJy4nIG9yICdbJzsgYW5kICJyZXN0IiwgYW4gaXRlcmF0b3IgZm9yIHRoZSByZXN0IG9mIHRoZSBmaWVsZAogICAgbmFtZS4gIGl0J3MgYSB3cmFwcGVyIGFyb3VuZCBzdHJpbmdsaWIvc3RyaW5nX2Zvcm1hdC5oJ3MKZGlmZiAtLWdpdCBhL09iamVjdHMvdHVwbGVvYmplY3QuYyBiL09iamVjdHMvdHVwbGVvYmplY3QuYwppbmRleCA4YzAwMjEwLi43OTIwZmVjIDEwMDY0NAotLS0gYS9PYmplY3RzL3R1cGxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCkBAIC05Nyw3ICs5Nyw3IEBACiAjZW5kaWYKICAgICB7CiAgICAgICAgIC8qIENoZWNrIGZvciBvdmVyZmxvdyAqLwotICAgICAgICBpZiAoc2l6ZSA+IChQWV9TU0laRV9UX01BWCAtIHNpemVvZihQeVR1cGxlT2JqZWN0KSAtCisgICAgICAgIGlmICgoc2l6ZV90KXNpemUgPiAoKHNpemVfdClQWV9TU0laRV9UX01BWCAtIHNpemVvZihQeVR1cGxlT2JqZWN0KSAtCiAgICAgICAgICAgICAgICAgICAgIHNpemVvZihQeU9iamVjdCAqKSkgLyBzaXplb2YoUHlPYmplY3QgKikpIHsKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICB9CkBAIC03NDYsNyArNzQ2LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAidHVwbGUgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICJ0dXBsZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3Igc2xpY2VzLCBub3QgJS4yMDBzIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC05NjQsOCArOTY0LDggQEAKICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgfQogCi0gICAgUHlfREVDUkVGKHNlcSk7CiAgICAgaXQtPml0X3NlcSA9IE5VTEw7CisgICAgUHlfREVDUkVGKHNlcSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvdHlwZW9iamVjdC5jIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKaW5kZXggY2E1MzU1YS4uOGM1Yzc3ZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy90eXBlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKQEAgLTE0LDEwICsxNCwxMSBAQAogICAgTUNBQ0hFX01BWF9BVFRSX1NJWkUsIHNpbmNlIGl0IG1pZ2h0IGJlIGEgcHJvYmxlbSBpZiB2ZXJ5IGxhcmdlCiAgICBzdHJpbmdzIGFyZSB1c2VkIGFzIGF0dHJpYnV0ZSBuYW1lcy4gKi8KICNkZWZpbmUgTUNBQ0hFX01BWF9BVFRSX1NJWkUgICAgMTAwCi0jZGVmaW5lIE1DQUNIRV9TSVpFX0VYUCAgICAgICAgIDkKKyNkZWZpbmUgTUNBQ0hFX1NJWkVfRVhQICAgICAgICAgMTIKICNkZWZpbmUgTUNBQ0hFX0hBU0godmVyc2lvbiwgbmFtZV9oYXNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKCgodW5zaWduZWQgaW50KSh2ZXJzaW9uKSAqICh1bnNpZ25lZCBpbnQpKG5hbWVfaGFzaCkpICAgICAgICAgIFwKLSAgICAgICAgID4+ICg4KnNpemVvZih1bnNpZ25lZCBpbnQpIC0gTUNBQ0hFX1NJWkVfRVhQKSkKKyAgICAgICAgKCgodW5zaWduZWQgaW50KSh2ZXJzaW9uKSBeICh1bnNpZ25lZCBpbnQpKG5hbWVfaGFzaCkpICAgICAgICAgIFwKKyAgICAgICAgICYgKCgxIDw8IE1DQUNIRV9TSVpFX0VYUCkgLSAxKSkKKwogI2RlZmluZSBNQ0FDSEVfSEFTSF9NRVRIT0QodHlwZSwgbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBNQ0FDSEVfSEFTSCgodHlwZSktPnRwX3ZlcnNpb25fdGFnLCAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgKChQeUFTQ0lJT2JqZWN0ICopKG5hbWUpKS0+aGFzaCkKQEAgLTM1LDYgKzM2LDE0IEBACiBzdGF0aWMgc3RydWN0IG1ldGhvZF9jYWNoZV9lbnRyeSBtZXRob2RfY2FjaGVbMSA8PCBNQ0FDSEVfU0laRV9FWFBdOwogc3RhdGljIHVuc2lnbmVkIGludCBuZXh0X3ZlcnNpb25fdGFnID0gMDsKIAorI2RlZmluZSBNQ0FDSEVfU1RBVFMgMAorCisjaWYgTUNBQ0hFX1NUQVRTCitzdGF0aWMgc2l6ZV90IG1ldGhvZF9jYWNoZV9oaXRzID0gMDsKK3N0YXRpYyBzaXplX3QgbWV0aG9kX2NhY2hlX21pc3NlcyA9IDA7CitzdGF0aWMgc2l6ZV90IG1ldGhvZF9jYWNoZV9jb2xsaXNpb25zID0gMDsKKyNlbmRpZgorCiAvKiBhbHBoYWJldGljYWwgb3JkZXIgKi8KIF9QeV9JREVOVElGSUVSKF9fYWJzdHJhY3RtZXRob2RzX18pOwogX1B5X0lERU5USUZJRVIoX19jbGFzc19fKTsKQEAgLTU0LDYgKzYzLDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzbG90X3RwX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CiAKK3N0YXRpYyB2b2lkCitjbGVhcl9zbG90ZGVmcyh2b2lkKTsKKwogLyoKICAqIGZpbmRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3N0cmluZydzIGludHJvc3BlY3Rpb24gc2lnbmF0dXJlLgogICogaWYgcHJlc2VudCwgcmV0dXJucyBhIHBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlIGZpcnN0ICcoJy4KQEAgLTEyNSw3ICsxMzcsNyBAQAogewogICAgIGNvbnN0IGNoYXIgKmRvYyA9IF9QeVR5cGVfRG9jV2l0aG91dFNpZ25hdHVyZShuYW1lLCBpbnRlcm5hbF9kb2MpOwogCi0gICAgaWYgKCFkb2MpIHsKKyAgICBpZiAoIWRvYyB8fCAqZG9jID09ICdcMCcpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9CkBAIC0xNjIsNiArMTc0LDE4IEBACiAgICAgUHlfc3NpemVfdCBpOwogICAgIHVuc2lnbmVkIGludCBjdXJfdmVyc2lvbl90YWcgPSBuZXh0X3ZlcnNpb25fdGFnIC0gMTsKIAorI2lmIE1DQUNIRV9TVEFUUworICAgIHNpemVfdCB0b3RhbCA9IG1ldGhvZF9jYWNoZV9oaXRzICsgbWV0aG9kX2NhY2hlX2NvbGxpc2lvbnMgKyBtZXRob2RfY2FjaGVfbWlzc2VzOworICAgIGZwcmludGYoc3RkZXJyLCAiLS0gTWV0aG9kIGNhY2hlIGhpdHMgICAgICAgID0gJXpkICglZCUlKVxuIiwKKyAgICAgICAgICAgIG1ldGhvZF9jYWNoZV9oaXRzLCAoaW50KSAoMTAwLjAgKiBtZXRob2RfY2FjaGVfaGl0cyAvIHRvdGFsKSk7CisgICAgZnByaW50ZihzdGRlcnIsICItLSBNZXRob2QgY2FjaGUgdHJ1ZSBtaXNzZXMgPSAlemQgKCVkJSUpXG4iLAorICAgICAgICAgICAgbWV0aG9kX2NhY2hlX21pc3NlcywgKGludCkgKDEwMC4wICogbWV0aG9kX2NhY2hlX21pc3NlcyAvIHRvdGFsKSk7CisgICAgZnByaW50ZihzdGRlcnIsICItLSBNZXRob2QgY2FjaGUgY29sbGlzaW9ucyAgPSAlemQgKCVkJSUpXG4iLAorICAgICAgICAgICAgbWV0aG9kX2NhY2hlX2NvbGxpc2lvbnMsIChpbnQpICgxMDAuMCAqIG1ldGhvZF9jYWNoZV9jb2xsaXNpb25zIC8gdG90YWwpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0tIE1ldGhvZCBjYWNoZSBzaXplICAgICAgICA9ICV6ZCBLQlxuIiwKKyAgICAgICAgICAgIHNpemVvZihtZXRob2RfY2FjaGUpIC8gMTAyNCk7CisjZW5kaWYKKwogICAgIGZvciAoaSA9IDA7IGkgPCAoMSA8PCBNQ0FDSEVfU0laRV9FWFApOyBpKyspIHsKICAgICAgICAgbWV0aG9kX2NhY2hlW2ldLnZlcnNpb24gPSAwOwogICAgICAgICBQeV9DTEVBUihtZXRob2RfY2FjaGVbaV0ubmFtZSk7CkBAIC0xNzcsNiArMjAxLDcgQEAKIF9QeVR5cGVfRmluaSh2b2lkKQogewogICAgIFB5VHlwZV9DbGVhckNhY2hlKCk7CisgICAgY2xlYXJfc2xvdGRlZnMoKTsKIH0KIAogdm9pZApAQCAtMjkwLDkgKzMxNSw4IEBACiAgICAgICAgICAgIGFyZSBib3Jyb3dlZCByZWZlcmVuY2UgKi8KICAgICAgICAgZm9yIChpID0gMDsgaSA8ICgxIDw8IE1DQUNIRV9TSVpFX0VYUCk7IGkrKykgewogICAgICAgICAgICAgbWV0aG9kX2NhY2hlW2ldLnZhbHVlID0gTlVMTDsKLSAgICAgICAgICAgIFB5X1hERUNSRUYobWV0aG9kX2NhY2hlW2ldLm5hbWUpOwotICAgICAgICAgICAgbWV0aG9kX2NhY2hlW2ldLm5hbWUgPSBQeV9Ob25lOwogICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICAgICAgUHlfWFNFVFJFRihtZXRob2RfY2FjaGVbaV0ubmFtZSwgUHlfTm9uZSk7CiAgICAgICAgIH0KICAgICAgICAgLyogbWFyayBhbGwgdmVyc2lvbiB0YWdzIGFzIGludmFsaWQgKi8KICAgICAgICAgUHlUeXBlX01vZGlmaWVkKCZQeUJhc2VPYmplY3RfVHlwZSk7CkBAIC0zNzcsOSArNDAxLDggQEAKIHN0YXRpYyBpbnQKIHR5cGVfc2V0X25hbWUoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIHZvaWQgKmNvbnRleHQpCiB7Ci0gICAgUHlIZWFwVHlwZU9iamVjdCogZXQ7Ci0gICAgY2hhciAqdHBfbmFtZTsKLSAgICBQeU9iamVjdCAqdG1wOworICAgIGNvbnN0IGNoYXIgKnRwX25hbWU7CisgICAgUHlfc3NpemVfdCBuYW1lX3NpemU7CiAKICAgICBpZiAoIWNoZWNrX3NldF9zcGVjaWFsX3R5cGVfYXR0cih0eXBlLCB2YWx1ZSwgIl9fbmFtZV9fIikpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTM5MCwzMyArNDEzLDE4IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICAvKiBDaGVjayBhYnNlbmNlIG9mIG51bGwgY2hhcmFjdGVycyAqLwotICAgIHRtcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiXDAiLCAxKTsKLSAgICBpZiAodG1wID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUHlVbmljb2RlX0NvbnRhaW5zKHZhbHVlLCB0bXApICE9IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9fbmFtZV9fIG11c3Qgbm90IGNvbnRhaW4gbnVsbCBieXRlcyIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIFB5X0RFQ1JFRih0bXApOwotCi0gICAgdHBfbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodmFsdWUpOworICAgIHRwX25hbWUgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZSh2YWx1ZSwgJm5hbWVfc2l6ZSk7CiAgICAgaWYgKHRwX25hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgZXQgPSAoUHlIZWFwVHlwZU9iamVjdCopdHlwZTsKLQotICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0KLSAgICAvKiBXYWl0IHVudGlsIGV0IGlzIGEgc2FuZSBzdGF0ZSBiZWZvcmUgUHlfREVDUkVGJ2luZyB0aGUgb2xkIGV0LT5odF9uYW1lCi0gICAgICAgdmFsdWUuICAoQnVnICMxNjQ0Ny4pICAqLwotICAgIHRtcCA9IGV0LT5odF9uYW1lOwotICAgIGV0LT5odF9uYW1lID0gdmFsdWU7CisgICAgaWYgKHN0cmxlbih0cF9uYW1lKSAhPSAoc2l6ZV90KW5hbWVfc2l6ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIG5hbWUgbXVzdCBub3QgY29udGFpbiBudWxsIGNoYXJhY3RlcnMiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIHR5cGUtPnRwX25hbWUgPSB0cF9uYW1lOwotICAgIFB5X0RFQ1JFRih0bXApOworICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgUHlfU0VUUkVGKCgoUHlIZWFwVHlwZU9iamVjdCopdHlwZSktPmh0X25hbWUsIHZhbHVlKTsKIAogICAgIHJldHVybiAwOwogfQpAQCAtNDM3LDggKzQ0NSw3IEBACiAKICAgICBldCA9IChQeUhlYXBUeXBlT2JqZWN0Kil0eXBlOwogICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0gICAgUHlfREVDUkVGKGV0LT5odF9xdWFsbmFtZSk7Ci0gICAgZXQtPmh0X3F1YWxuYW1lID0gdmFsdWU7CisgICAgUHlfU0VUUkVGKGV0LT5odF9xdWFsbmFtZSwgdmFsdWUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMjAwLDggKzEyMDcsMTEgQEAKICAgICBhc3NlcnQoYmFzZWRlYWxsb2MpOwogICAgIGJhc2VkZWFsbG9jKHNlbGYpOwogCi0gICAgLyogQ2FuJ3QgcmVmZXJlbmNlIHNlbGYgYmV5b25kIHRoaXMgcG9pbnQgKi8KLSAgICBQeV9ERUNSRUYodHlwZSk7CisgICAgLyogQ2FuJ3QgcmVmZXJlbmNlIHNlbGYgYmV5b25kIHRoaXMgcG9pbnQuIEl0J3MgcG9zc2libGUgdHBfZGVsIHN3aXRjaGVkCisgICAgICAgb3VyIHR5cGUgZnJvbSBhIEhFQVBUWVBFIHRvIGEgbm9uLUhFQVBUWVBFLCBzbyBiZSBjYXJlZnVsIGFib3V0CisgICAgICAgcmVmZXJlbmNlIGNvdW50aW5nLiAqLworICAgIGlmICh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpCisgICAgICBQeV9ERUNSRUYodHlwZSk7CiAKICAgZW5kbGFiZWw6CiAgICAgKytfUHlUcmFzaF9kZWxldGVfbmVzdGluZzsKQEAgLTIyNTksOCArMjI2OSw4IEBACiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlID0gTlVMTCwgKmJhc2UsICp0bXB0eXBlLCAqd2lubmVyOwogICAgIFB5SGVhcFR5cGVPYmplY3QgKmV0OwogICAgIFB5TWVtYmVyRGVmICptcDsKLSAgICBQeV9zc2l6ZV90IGksIG5iYXNlcywgbnNsb3RzLCBzbG90b2Zmc2V0LCBhZGRfZGljdCwgYWRkX3dlYWs7Ci0gICAgaW50IGosIG1heV9hZGRfZGljdCwgbWF5X2FkZF93ZWFrOworICAgIFB5X3NzaXplX3QgaSwgbmJhc2VzLCBuc2xvdHMsIHNsb3RvZmZzZXQsIG5hbWVfc2l6ZTsKKyAgICBpbnQgaiwgbWF5X2FkZF9kaWN0LCBtYXlfYWRkX3dlYWssIGFkZF9kaWN0LCBhZGRfd2VhazsKICAgICBfUHlfSURFTlRJRklFUihfX3F1YWxuYW1lX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9fc2xvdHNfXyk7CiAKQEAgLTI0NzgsMTMgKzI0ODgsMTkgQEAKICAgICAgICAgdHlwZS0+dHBfZmxhZ3MgfD0gUHlfVFBGTEFHU19IQVZFX0dDOwogCiAgICAgLyogSW5pdGlhbGl6ZSBlc3NlbnRpYWwgZmllbGRzICovCisgICAgdHlwZS0+dHBfYXNfYXN5bmMgPSAmZXQtPmFzX2FzeW5jOwogICAgIHR5cGUtPnRwX2FzX251bWJlciA9ICZldC0+YXNfbnVtYmVyOwogICAgIHR5cGUtPnRwX2FzX3NlcXVlbmNlID0gJmV0LT5hc19zZXF1ZW5jZTsKICAgICB0eXBlLT50cF9hc19tYXBwaW5nID0gJmV0LT5hc19tYXBwaW5nOwogICAgIHR5cGUtPnRwX2FzX2J1ZmZlciA9ICZldC0+YXNfYnVmZmVyOwotICAgIHR5cGUtPnRwX25hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpOworICAgIHR5cGUtPnRwX25hbWUgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShuYW1lLCAmbmFtZV9zaXplKTsKICAgICBpZiAoIXR5cGUtPnRwX25hbWUpCiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKHN0cmxlbih0eXBlLT50cF9uYW1lKSAhPSAoc2l6ZV90KW5hbWVfc2l6ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIG5hbWUgbXVzdCBub3QgY29udGFpbiBudWxsIGNoYXJhY3RlcnMiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICAvKiBTZXQgdHBfYmFzZSBhbmQgdHBfYmFzZXMgKi8KICAgICB0eXBlLT50cF9iYXNlcyA9IGJhc2VzOwpAQCAtMjU1OSw4ICsyNTc1LDEwIEBACiAgICAgICAgIHRtcCA9IFB5U3RhdGljTWV0aG9kX05ldyh0bXApOwogICAgICAgICBpZiAodG1wID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQoZGljdCwgJlB5SWRfX19uZXdfXywgdG1wKSA8IDApCisgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChkaWN0LCAmUHlJZF9fX25ld19fLCB0bXApIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRih0bXApOwogICAgIH0KIApAQCAtMjYxNyw5ICsyNjM1LDEwIEBACiAgICAgfQogICAgIHR5cGUtPnRwX2RlYWxsb2MgPSBzdWJ0eXBlX2RlYWxsb2M7CiAKLSAgICAvKiBFbmFibGUgR0MgdW5sZXNzIHRoZXJlIGFyZSByZWFsbHkgbm8gaW5zdGFuY2UgdmFyaWFibGVzIHBvc3NpYmxlICovCi0gICAgaWYgKCEodHlwZS0+dHBfYmFzaWNzaXplID09IHNpemVvZihQeU9iamVjdCkgJiYKLSAgICAgICAgICB0eXBlLT50cF9pdGVtc2l6ZSA9PSAwKSkKKyAgICAvKiBFbmFibGUgR0MgdW5sZXNzIHRoaXMgY2xhc3MgaXMgbm90IGFkZGluZyBuZXcgaW5zdGFuY2UgdmFyaWFibGVzIGFuZAorICAgICAgIHRoZSBiYXNlIGNsYXNzIGRpZCBub3QgdXNlIEdDLiAqLworICAgIGlmICgoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpIHx8CisgICAgICAgIHR5cGUtPnRwX2Jhc2ljc2l6ZSA+IGJhc2UtPnRwX2Jhc2ljc2l6ZSkKICAgICAgICAgdHlwZS0+dHBfZmxhZ3MgfD0gUHlfVFBGTEFHU19IQVZFX0dDOwogCiAgICAgLyogQWx3YXlzIG92ZXJyaWRlIGFsbG9jYXRpb24gc3RyYXRlZ3kgdG8gdXNlIHJlZ3VsYXIgaGVhcCAqLwpAQCAtMjY2NCw2ICsyNjgzLDcgQEAKIHsKICAgICBQeUhlYXBUeXBlT2JqZWN0ICpyZXMgPSAoUHlIZWFwVHlwZU9iamVjdCopUHlUeXBlX0dlbmVyaWNBbGxvYygmUHlUeXBlX1R5cGUsIDApOwogICAgIFB5VHlwZU9iamVjdCAqdHlwZSwgKmJhc2U7CisgICAgUHlPYmplY3QgKm1vZG5hbWU7CiAgICAgY2hhciAqczsKICAgICBjaGFyICpyZXNfc3RhcnQgPSAoY2hhciopcmVzOwogICAgIFB5VHlwZV9TbG90ICpzbG90OwpAQCAtMjcyMiw2ICsyNzQyLDcgQEAKICAgICB9CiAKICAgICAvKiBJbml0aWFsaXplIGVzc2VudGlhbCBmaWVsZHMgKi8KKyAgICB0eXBlLT50cF9hc19hc3luYyA9ICZyZXMtPmFzX2FzeW5jOwogICAgIHR5cGUtPnRwX2FzX251bWJlciA9ICZyZXMtPmFzX251bWJlcjsKICAgICB0eXBlLT50cF9hc19zZXF1ZW5jZSA9ICZyZXMtPmFzX3NlcXVlbmNlOwogICAgIHR5cGUtPnRwX2FzX21hcHBpbmcgPSAmcmVzLT5hc19tYXBwaW5nOwpAQCAtMjczNiw3ICsyNzU3LDggQEAKICAgICB0eXBlLT50cF9pdGVtc2l6ZSA9IHNwZWMtPml0ZW1zaXplOwogCiAgICAgZm9yIChzbG90ID0gc3BlYy0+c2xvdHM7IHNsb3QtPnNsb3Q7IHNsb3QrKykgewotICAgICAgICBpZiAoc2xvdC0+c2xvdCA+PSBQeV9BUlJBWV9MRU5HVEgoc2xvdG9mZnNldHMpKSB7CisgICAgICAgIGlmIChzbG90LT5zbG90IDwgMAorICAgICAgICAgICAgfHwgKHNpemVfdClzbG90LT5zbG90ID49IFB5X0FSUkFZX0xFTkdUSChzbG90b2Zmc2V0cykpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJpbnZhbGlkIHNsb3Qgb2Zmc2V0Iik7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KQEAgLTI3NzUsMTAgKzI3OTcsMjAgQEAKIAogICAgIC8qIFNldCB0eXBlLl9fbW9kdWxlX18gKi8KICAgICBzID0gc3RycmNocihzcGVjLT5uYW1lLCAnLicpOwotICAgIGlmIChzICE9IE5VTEwpCi0gICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18sCi0gICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoCi0gICAgICAgICAgICAgICAgc3BlYy0+bmFtZSwgKFB5X3NzaXplX3QpKHMgLSBzcGVjLT5uYW1lKSkpOworICAgIGlmIChzICE9IE5VTEwpIHsKKyAgICAgICAgbW9kbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgKKyAgICAgICAgICAgICAgICBzcGVjLT5uYW1lLCAoUHlfc3NpemVfdCkocyAtIHNwZWMtPm5hbWUpKTsKKyAgICAgICAgaWYgKG1vZG5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18sIG1vZG5hbWUpOworICAgICAgICBQeV9ERUNSRUYobW9kbmFtZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAxLAorICAgICAgICAgICAgICAgICJidWlsdGluIHR5cGUgJS4yMDBzIGhhcyBubyBfX21vZHVsZV9fIGF0dHJpYnV0ZSIsCisgICAgICAgICAgICAgICAgc3BlYy0+bmFtZSkpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQogCiAgICAgcmV0dXJuIChQeU9iamVjdCopcmVzOwogCkBAIC0yNzk2LDExICsyODI4LDExIEBACiB2b2lkICoKIFB5VHlwZV9HZXRTbG90KFB5VHlwZU9iamVjdCAqdHlwZSwgaW50IHNsb3QpCiB7Ci0gICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0eXBlLCBQeV9UUEZMQUdTX0hFQVBUWVBFKSkgeworICAgIGlmICghUHlUeXBlX0hhc0ZlYXR1cmUodHlwZSwgUHlfVFBGTEFHU19IRUFQVFlQRSkgfHwgc2xvdCA8IDApIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoc2xvdCA+PSBQeV9BUlJBWV9MRU5HVEgoc2xvdG9mZnNldHMpKSB7CisgICAgaWYgKChzaXplX3Qpc2xvdCA+PSBQeV9BUlJBWV9MRU5HVEgoc2xvdG9mZnNldHMpKSB7CiAgICAgICAgIC8qIEV4dGVuc2lvbiBtb2R1bGUgcmVxdWVzdGluZyBzbG90IGZyb20gYSBmdXR1cmUgdmVyc2lvbiAqLwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yODIxLDggKzI4NTMsMTIgQEAKICAgICAgICAgLyogZmFzdCBwYXRoICovCiAgICAgICAgIGggPSBNQ0FDSEVfSEFTSF9NRVRIT0QodHlwZSwgbmFtZSk7CiAgICAgICAgIGlmIChtZXRob2RfY2FjaGVbaF0udmVyc2lvbiA9PSB0eXBlLT50cF92ZXJzaW9uX3RhZyAmJgotICAgICAgICAgICAgbWV0aG9kX2NhY2hlW2hdLm5hbWUgPT0gbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZF9jYWNoZVtoXS5uYW1lID09IG5hbWUpIHsKKyNpZiBNQ0FDSEVfU1RBVFMKKyAgICAgICAgICAgIG1ldGhvZF9jYWNoZV9oaXRzKys7CisjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBtZXRob2RfY2FjaGVbaF0udmFsdWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBMb29rIGluIHRwX2RpY3Qgb2YgdHlwZXMgaW4gTVJPICovCkBAIC0yODU2LDggKzI4OTIsMTQgQEAKICAgICAgICAgbWV0aG9kX2NhY2hlW2hdLnZlcnNpb24gPSB0eXBlLT50cF92ZXJzaW9uX3RhZzsKICAgICAgICAgbWV0aG9kX2NhY2hlW2hdLnZhbHVlID0gcmVzOyAgLyogYm9ycm93ZWQgKi8KICAgICAgICAgUHlfSU5DUkVGKG5hbWUpOwotICAgICAgICBQeV9ERUNSRUYobWV0aG9kX2NhY2hlW2hdLm5hbWUpOwotICAgICAgICBtZXRob2RfY2FjaGVbaF0ubmFtZSA9IG5hbWU7CisgICAgICAgIGFzc2VydCgoKFB5QVNDSUlPYmplY3QgKikobmFtZSkpLT5oYXNoICE9IC0xKTsKKyNpZiBNQ0FDSEVfU1RBVFMKKyAgICAgICAgaWYgKG1ldGhvZF9jYWNoZVtoXS5uYW1lICE9IFB5X05vbmUgJiYgbWV0aG9kX2NhY2hlW2hdLm5hbWUgIT0gbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZF9jYWNoZV9jb2xsaXNpb25zKys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1ldGhvZF9jYWNoZV9taXNzZXMrKzsKKyNlbmRpZgorICAgICAgICBQeV9TRVRSRUYobWV0aG9kX2NhY2hlW2hdLm5hbWUsIG5hbWUpOwogICAgIH0KICAgICByZXR1cm4gcmVzOwogfQpAQCAtMzUwNiwxNyArMzU0OCwxOCBAQAogfQogCiBzdGF0aWMgaW50Ci1lcXVpdl9zdHJ1Y3RzKFB5VHlwZU9iamVjdCAqYSwgUHlUeXBlT2JqZWN0ICpiKQorY29tcGF0aWJsZV93aXRoX3RwX2Jhc2UoUHlUeXBlT2JqZWN0ICpjaGlsZCkKIHsKLSAgICByZXR1cm4gYSA9PSBiIHx8Ci0gICAgICAgICAgIChhICE9IE5VTEwgJiYKLSAgICAgICAgYiAhPSBOVUxMICYmCi0gICAgICAgIGEtPnRwX2Jhc2ljc2l6ZSA9PSBiLT50cF9iYXNpY3NpemUgJiYKLSAgICAgICAgYS0+dHBfaXRlbXNpemUgPT0gYi0+dHBfaXRlbXNpemUgJiYKLSAgICAgICAgYS0+dHBfZGljdG9mZnNldCA9PSBiLT50cF9kaWN0b2Zmc2V0ICYmCi0gICAgICAgIGEtPnRwX3dlYWtsaXN0b2Zmc2V0ID09IGItPnRwX3dlYWtsaXN0b2Zmc2V0ICYmCi0gICAgICAgICgoYS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpID09Ci0gICAgICAgICAoYi0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpKSk7CisgICAgUHlUeXBlT2JqZWN0ICpwYXJlbnQgPSBjaGlsZC0+dHBfYmFzZTsKKyAgICByZXR1cm4gKHBhcmVudCAhPSBOVUxMICYmCisgICAgICAgICAgICBjaGlsZC0+dHBfYmFzaWNzaXplID09IHBhcmVudC0+dHBfYmFzaWNzaXplICYmCisgICAgICAgICAgICBjaGlsZC0+dHBfaXRlbXNpemUgPT0gcGFyZW50LT50cF9pdGVtc2l6ZSAmJgorICAgICAgICAgICAgY2hpbGQtPnRwX2RpY3RvZmZzZXQgPT0gcGFyZW50LT50cF9kaWN0b2Zmc2V0ICYmCisgICAgICAgICAgICBjaGlsZC0+dHBfd2Vha2xpc3RvZmZzZXQgPT0gcGFyZW50LT50cF93ZWFrbGlzdG9mZnNldCAmJgorICAgICAgICAgICAgKChjaGlsZC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpID09CisgICAgICAgICAgICAgKHBhcmVudC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpKSAmJgorICAgICAgICAgICAgKGNoaWxkLT50cF9kZWFsbG9jID09IHN1YnR5cGVfZGVhbGxvYyB8fAorICAgICAgICAgICAgIGNoaWxkLT50cF9kZWFsbG9jID09IHBhcmVudC0+dHBfZGVhbGxvYykpOwogfQogCiBzdGF0aWMgaW50CkBAIC0zNTM0LDYgKzM1NzcsMTAgQEAKICAgICAgICAgc2l6ZSArPSBzaXplb2YoUHlPYmplY3QgKik7CiAKICAgICAvKiBDaGVjayBzbG90cyBjb21wbGlhbmNlICovCisgICAgaWYgKCEoYS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKSB8fAorICAgICAgICAhKGItPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIHNsb3RzX2EgPSAoKFB5SGVhcFR5cGVPYmplY3QgKilhKS0+aHRfc2xvdHM7CiAgICAgc2xvdHNfYiA9ICgoUHlIZWFwVHlwZU9iamVjdCAqKWIpLT5odF9zbG90czsKICAgICBpZiAoc2xvdHNfYSAmJiBzbG90c19iKSB7CkBAIC0zNTQ5LDkgKzM1OTYsNyBAQAogewogICAgIFB5VHlwZU9iamVjdCAqbmV3YmFzZSwgKm9sZGJhc2U7CiAKLSAgICBpZiAobmV3dG8tPnRwX2RlYWxsb2MgIT0gb2xkdG8tPnRwX2RlYWxsb2MgfHwKLSAgICAgICAgbmV3dG8tPnRwX2ZyZWUgIT0gb2xkdG8tPnRwX2ZyZWUpCi0gICAgeworICAgIGlmIChuZXd0by0+dHBfZnJlZSAhPSBvbGR0by0+dHBfZnJlZSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIiVzIGFzc2lnbm1lbnQ6ICIKICAgICAgICAgICAgICAgICAgICAgICInJXMnIGRlYWxsb2NhdG9yIGRpZmZlcnMgZnJvbSAnJXMnIiwKQEAgLTM1NjAsMTEgKzM2MDUsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgIG9sZHRvLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIC8qCisgICAgIEl0J3MgdHJpY2t5IHRvIHRlbGwgaWYgdHdvIGFyYml0cmFyeSB0eXBlcyBhcmUgc3VmZmljaWVudGx5IGNvbXBhdGlibGUgYXMKKyAgICAgdG8gYmUgaW50ZXJjaGFuZ2VhYmxlOyBlLmcuLCBldmVuIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB0cF9iYXNpY3NpemUsIHRoZXkKKyAgICAgbWlnaHQgaGF2ZSB0b3RhbGx5IGRpZmZlcmVudCBzdHJ1Y3QgZmllbGRzLiBJdCdzIG11Y2ggZWFzaWVyIHRvIHRlbGwgaWYgYQorICAgICB0eXBlIGFuZCBpdHMgc3VwZXJ0eXBlIGFyZSBjb21wYXRpYmxlOyBlLmcuLCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUKKyAgICAgdHBfYmFzaWNzaXplLCB0aGVuIHRoYXQgbWVhbnMgdGhleSBoYXZlIGlkZW50aWNhbCBmaWVsZHMuIFNvIHRvIGNoZWNrCisgICAgIHdoZXRoZXIgdHdvIGFyYml0cmFyeSB0eXBlcyBhcmUgY29tcGF0aWJsZSwgd2UgZmlyc3QgZmluZCB0aGUgaGlnaGVzdAorICAgICBzdXBlcnR5cGUgdGhhdCBlYWNoIGlzIGNvbXBhdGlibGUgd2l0aCwgYW5kIHRoZW4gaWYgdGhvc2Ugc3VwZXJ0eXBlcyBhcmUKKyAgICAgY29tcGF0aWJsZSB0aGVuIHRoZSBvcmlnaW5hbCB0eXBlcyBtdXN0IGFsc28gYmUgY29tcGF0aWJsZS4KKyAgICAqLwogICAgIG5ld2Jhc2UgPSBuZXd0bzsKICAgICBvbGRiYXNlID0gb2xkdG87Ci0gICAgd2hpbGUgKGVxdWl2X3N0cnVjdHMobmV3YmFzZSwgbmV3YmFzZS0+dHBfYmFzZSkpCisgICAgd2hpbGUgKGNvbXBhdGlibGVfd2l0aF90cF9iYXNlKG5ld2Jhc2UpKQogICAgICAgICBuZXdiYXNlID0gbmV3YmFzZS0+dHBfYmFzZTsKLSAgICB3aGlsZSAoZXF1aXZfc3RydWN0cyhvbGRiYXNlLCBvbGRiYXNlLT50cF9iYXNlKSkKKyAgICB3aGlsZSAoY29tcGF0aWJsZV93aXRoX3RwX2Jhc2Uob2xkYmFzZSkpCiAgICAgICAgIG9sZGJhc2UgPSBvbGRiYXNlLT50cF9iYXNlOwogICAgIGlmIChuZXdiYXNlICE9IG9sZGJhc2UgJiYKICAgICAgICAgKG5ld2Jhc2UtPnRwX2Jhc2UgIT0gb2xkYmFzZS0+dHBfYmFzZSB8fApAQCAtMzU5OSwxNyArMzY1NCw3MSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIG5ld3RvID0gKFB5VHlwZU9iamVjdCAqKXZhbHVlOwotICAgIGlmICghKG5ld3RvLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpIHx8Ci0gICAgICAgICEob2xkdG8tPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkpCi0gICAgeworICAgIC8qIEluIHZlcnNpb25zIG9mIENQeXRob24gcHJpb3IgdG8gMy41LCB0aGUgY29kZSBpbgorICAgICAgIGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQgd2FzIG5vdCBzZXQgdXAgdG8gY29ycmVjdGx5IGNoZWNrIGZvciBtZW1vcnkKKyAgICAgICBsYXlvdXQgLyBzbG90IC8gZXRjLiBjb21wYXRpYmlsaXR5IGZvciBub24tSEVBUFRZUEUgY2xhc3Nlcywgc28gd2UganVzdAorICAgICAgIGRpc2FsbG93ZWQgX19jbGFzc19fIGFzc2lnbm1lbnQgaW4gYW55IGNhc2UgdGhhdCB3YXNuJ3QgSEVBUFRZUEUgLT4KKyAgICAgICBIRUFQVFlQRS4KKworICAgICAgIER1cmluZyB0aGUgMy41IGRldmVsb3BtZW50IGN5Y2xlLCB3ZSBmaXhlZCB0aGUgY29kZSBpbgorICAgICAgIGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQgdG8gY29ycmVjdGx5IGNoZWNrIGNvbXBhdGliaWxpdHkgYmV0d2VlbgorICAgICAgIGFyYml0cmFyeSB0eXBlcywgYW5kIHN0YXJ0ZWQgYWxsb3dpbmcgX19jbGFzc19fIGFzc2lnbm1lbnQgaW4gYWxsIGNhc2VzCisgICAgICAgd2hlcmUgdGhlIG9sZCBhbmQgbmV3IHR5cGVzIGRpZCBpbiBmYWN0IGhhdmUgY29tcGF0aWJsZSBzbG90cyBhbmQKKyAgICAgICBtZW1vcnkgbGF5b3V0IChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSB3ZXJlIGltcGxlbWVudGVkIGFzIEhFQVBUWVBFcworICAgICAgIG9yIG5vdCkuCisKKyAgICAgICBKdXN0IGJlZm9yZSAzLjUgd2FzIHJlbGVhc2VkLCB0aG91Z2gsIHdlIGRpc2NvdmVyZWQgdGhhdCB0aGlzIGxlZCB0bworICAgICAgIHByb2JsZW1zIHdpdGggaW1tdXRhYmxlIHR5cGVzIGxpa2UgaW50LCB3aGVyZSB0aGUgaW50ZXJwcmV0ZXIgYXNzdW1lcworICAgICAgIHRoZXkgYXJlIGltbXV0YWJsZSBhbmQgaW50ZXJucyBzb21lIHZhbHVlcy4gRm9ybWVybHkgdGhpcyB3YXNuJ3QgYQorICAgICAgIHByb2JsZW0sIGJlY2F1c2UgdGhleSByZWFsbHkgd2VyZSBpbW11dGFibGUgLS0gaW4gcGFydGljdWxhciwgYWxsIHRoZQorICAgICAgIHR5cGVzIHdoZXJlIHRoZSBpbnRlcnByZXRlciBhcHBsaWVkIHRoaXMgaW50ZXJuaW5nIHRyaWNrIGhhcHBlbmVkIHRvCisgICAgICAgYWxzbyBiZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCwgc28gdGhlIG9sZCBIRUFQVFlQRSBydWxlcyB3ZXJlCisgICAgICAgImFjY2lkZW50YWxseSIgc3RvcHBpbmcgdGhlbSBmcm9tIGFsbG93aW5nIF9fY2xhc3NfXyBhc3NpZ25tZW50LiBCdXQKKyAgICAgICB3aXRoIHRoZSBjaGFuZ2VzIHRvIF9fY2xhc3NfXyBhc3NpZ25tZW50LCB3ZSBzdGFydGVkIGFsbG93aW5nIGNvZGUgbGlrZQorCisgICAgICAgICBjbGFzcyBNeUludChpbnQpOgorICAgICAgICAgICAgIC4uLgorICAgICAgICAgIyBNb2RpZmllcyB0aGUgdHlwZSBvZiAqYWxsKiBpbnN0YW5jZXMgb2YgMSBpbiB0aGUgd2hvbGUgcHJvZ3JhbSwKKyAgICAgICAgICMgaW5jbHVkaW5nIGZ1dHVyZSBpbnN0YW5jZXMgKCEpLCBiZWNhdXNlIHRoZSAxIG9iamVjdCBpcyBpbnRlcm5lZC4KKyAgICAgICAgICgxKS5fX2NsYXNzX18gPSBNeUludAorCisgICAgICAgKHNlZSBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI0OTEyKS4KKworICAgICAgIEluIHRoZW9yeSB0aGUgcHJvcGVyIGZpeCB3b3VsZCBiZSB0byBpZGVudGlmeSB3aGljaCBjbGFzc2VzIHJlbHkgb24KKyAgICAgICB0aGlzIGludmFyaWFudCBhbmQgc29tZWhvdyBkaXNhbGxvdyBfX2NsYXNzX18gYXNzaWdubWVudCBvbmx5IGZvciB0aGVtLAorICAgICAgIHBlcmhhcHMgdmlhIHNvbWUgbWVjaGFuaXNtIGxpa2UgYSBuZXcgUHlfVFBGTEFHU19JTU1VVEFCTEUgZmxhZyAoYQorICAgICAgICJibGFja2xpc3RpbmciIGFwcHJvYWNoKS4gQnV0IGluIHByYWN0aWNlLCBzaW5jZSB0aGlzIHByb2JsZW0gd2Fzbid0CisgICAgICAgbm90aWNlZCBsYXRlIGluIHRoZSAzLjUgUkMgY3ljbGUsIHdlJ3JlIHRha2luZyB0aGUgY29uc2VydmF0aXZlCisgICAgICAgYXBwcm9hY2ggYW5kIHJlaW5zdGF0aW5nIHRoZSBzYW1lIEhFQVBUWVBFLT5IRUFQVFlQRSBjaGVjayB0aGF0IHdlIHVzZWQKKyAgICAgICB0byBoYXZlLCBwbHVzIGEgIndoaXRlbGlzdCIuIEZvciBub3csIHRoZSB3aGl0ZWxpc3QgY29uc2lzdHMgb25seSBvZgorICAgICAgIE1vZHVsZVR5cGUgc3VidHlwZXMsIHNpbmNlIHRob3NlIGFyZSB0aGUgY2FzZXMgdGhhdCBtb3RpdmF0ZWQgdGhlIHBhdGNoCisgICAgICAgaW4gdGhlIGZpcnN0IHBsYWNlIC0tIHNlZSBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIyOTg2IC0tIGFuZAorICAgICAgIHNpbmNlIG1vZHVsZSBvYmplY3RzIGFyZSBtdXRhYmxlIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhleSBhcmUKKyAgICAgICBkZWZpbml0ZWx5IG5vdCBiZWluZyBpbnRlcm5lZC4gU28gbm93IHdlIGFsbG93IEhFQVBUWVBFLT5IRUFQVFlQRSAqb3IqCisgICAgICAgTW9kdWxlVHlwZSBzdWJ0eXBlIC0+IE1vZHVsZVR5cGUgc3VidHlwZS4KKworICAgICAgIFNvIGZhciBhcyB3ZSBrbm93LCBhbGwgdGhlIGNvZGUgYmV5b25kIHRoZSBmb2xsb3dpbmcgJ2lmJyBzdGF0ZW1lbnQKKyAgICAgICB3aWxsIGNvcnJlY3RseSBoYW5kbGUgbm9uLUhFQVBUWVBFIGNsYXNzZXMsIGFuZCB0aGUgSEVBUFRZUEUgY2hlY2sgaXMKKyAgICAgICBuZWVkZWQgb25seSB0byBwcm90ZWN0IHRoYXQgc3Vic2V0IG9mIG5vbi1IRUFQVFlQRSBjbGFzc2VzIGZvciB3aGljaAorICAgICAgIHRoZSBpbnRlcnByZXRlciBoYXMgYmFrZWQgaW4gdGhlIGFzc3VtcHRpb24gdGhhdCBhbGwgaW5zdGFuY2VzIGFyZQorICAgICAgIHRydWx5IGltbXV0YWJsZS4KKyAgICAqLworICAgIGlmICghKFB5VHlwZV9Jc1N1YnR5cGUobmV3dG8sICZQeU1vZHVsZV9UeXBlKSAmJgorICAgICAgICAgIFB5VHlwZV9Jc1N1YnR5cGUob2xkdG8sICZQeU1vZHVsZV9UeXBlKSkgJiYKKyAgICAgICAgKCEobmV3dG8tPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkgfHwKKyAgICAgICAgICEob2xkdG8tPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiX19jbGFzc19fIGFzc2lnbm1lbnQ6IG9ubHkgZm9yIGhlYXAgdHlwZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18gYXNzaWdubWVudCBvbmx5IHN1cHBvcnRlZCBmb3IgaGVhcCB0eXBlcyAiCisgICAgICAgICAgICAgICAgICAgICAib3IgTW9kdWxlVHlwZSBzdWJjbGFzc2VzIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisKICAgICBpZiAoY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChvbGR0bywgbmV3dG8sICJfX2NsYXNzX18iKSkgewotICAgICAgICBQeV9JTkNSRUYobmV3dG8pOworICAgICAgICBpZiAobmV3dG8tPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkKKyAgICAgICAgICAgIFB5X0lOQ1JFRihuZXd0byk7CiAgICAgICAgIFB5X1RZUEUoc2VsZikgPSBuZXd0bzsKLSAgICAgICAgUHlfREVDUkVGKG9sZHRvKTsKKyAgICAgICAgaWYgKG9sZHRvLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpCisgICAgICAgICAgICBQeV9ERUNSRUYob2xkdG8pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0zNzEzLDcgKzM4MjIsNyBAQAogfQogCiBQeV9MT0NBTChQeU9iamVjdCAqKQotX1B5T2JqZWN0X0dldFN0YXRlKFB5T2JqZWN0ICpvYmopCitfUHlPYmplY3RfR2V0U3RhdGUoUHlPYmplY3QgKm9iaiwgaW50IHJlcXVpcmVkKQogewogICAgIFB5T2JqZWN0ICpzdGF0ZTsKICAgICBQeU9iamVjdCAqZ2V0c3RhdGU7CkBAIC0zNzI4LDYgKzM4MzcsMTMgQEAKICAgICAgICAgfQogICAgICAgICBQeUVycl9DbGVhcigpOwogCisgICAgICAgIGlmIChyZXF1aXJlZCAmJiBvYmotPm9iX3R5cGUtPnRwX2l0ZW1zaXplKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgJS4yMDBzIG9iamVjdHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCiAgICAgICAgIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICoqZGljdDsKICAgICAgICAgICAgIGRpY3QgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOwpAQCAtMzc4Nyw3ICszOTAzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8qIFRoZSBsaXN0IGlzIHN0b3JlZCBvbiB0aGUgY2xhc3Mgc28gaXQgbWF5IG11dGF0ZXMgd2hpbGUgd2UKKyAgICAgICAgICAgICAgICAvKiBUaGUgbGlzdCBpcyBzdG9yZWQgb24gdGhlIGNsYXNzIHNvIGl0IG1heSBtdXRhdGUgd2hpbGUgd2UKICAgICAgICAgICAgICAgICAgICBpdGVyYXRlIG92ZXIgaXQgKi8KICAgICAgICAgICAgICAgICBpZiAoc2xvdG5hbWVzX3NpemUgIT0gUHlfU0laRShzbG90bmFtZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0zOTIxLDcgKzQwMzcsNyBAQAogICAgIH0KIAogICAgIC8qIFRoZSBvYmplY3QgZG9lcyBub3QgaGF2ZSBfX2dldG5ld2FyZ3NfZXhfXyBhbmQgX19nZXRuZXdhcmdzX18uIFRoaXMgbWF5Ci0gICAgICAgbWVhbnMgX19uZXdfXyBkb2VzIG5vdCB0YWtlcyBhbnkgYXJndW1lbnRzIG9uIHRoaXMgb2JqZWN0LCBvciB0aGF0IHRoZQorICAgICAgIG1lYW4gX19uZXdfXyBkb2VzIG5vdCB0YWtlcyBhbnkgYXJndW1lbnRzIG9uIHRoaXMgb2JqZWN0LCBvciB0aGF0IHRoZQogICAgICAgIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHJlZHVjZSBwcm90b2NvbCBmb3IgcGlja2xpbmcgb3IKICAgICAgICBjb3B5aW5nLiAqLwogICAgICphcmdzID0gTlVMTDsKQEAgLTM5NzUsNTUgKzQwOTEsOTAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXJlZHVjZV80KFB5T2JqZWN0ICpvYmopCityZWR1Y2VfbmV3b2JqKFB5T2JqZWN0ICpvYmosIGludCBwcm90bykKIHsKICAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICprd2FyZ3MgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpjb3B5cmVnOwogICAgIFB5T2JqZWN0ICpuZXdvYmosICpuZXdhcmdzLCAqc3RhdGUsICpsaXN0aXRlbXMsICpkaWN0aXRlbXM7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9leF9fKTsKKyAgICBpbnQgaGFzYXJnczsKIAogICAgIGlmIChQeV9UWVBFKG9iaiktPnRwX25ldyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlICVzIG9iamVjdHMiLAorICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSAlLjIwMHMgb2JqZWN0cyIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9HZXROZXdBcmd1bWVudHMob2JqLCAmYXJncywgJmt3YXJncykgPCAwKSB7CisgICAgaWYgKF9QeU9iamVjdF9HZXROZXdBcmd1bWVudHMob2JqLCAmYXJncywgJmt3YXJncykgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGFyZ3MgPT0gTlVMTCkgewotICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7Ci0gICAgICAgIGlmIChhcmdzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGt3YXJncyA9PSBOVUxMKSB7Ci0gICAgICAgIGt3YXJncyA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgaWYgKGt3YXJncyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CiAgICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkgeworICAgICAgICBQeV9YREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9YREVDUkVGKGt3YXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoYXNhcmdzID0gKGFyZ3MgIT0gTlVMTCk7CisgICAgaWYgKGt3YXJncyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3YXJncykgPT0gMCkgeworICAgICAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9fKTsKKyAgICAgICAgUHlPYmplY3QgKmNsczsKKyAgICAgICAgUHlfc3NpemVfdCBpLCBuOworCisgICAgICAgIFB5X1hERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgbmV3b2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZChjb3B5cmVnLCAmUHlJZF9fX25ld29ial9fKTsKKyAgICAgICAgUHlfREVDUkVGKGNvcHlyZWcpOworICAgICAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoYXJncyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBuID0gYXJncyA/IFB5VHVwbGVfR0VUX1NJWkUoYXJncykgOiAwOworICAgICAgICBuZXdhcmdzID0gUHlUdXBsZV9OZXcobisxKTsKKyAgICAgICAgaWYgKG5ld2FyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfWERFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY2xzID0gKFB5T2JqZWN0ICopIFB5X1RZUEUob2JqKTsKKyAgICAgICAgUHlfSU5DUkVGKGNscyk7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0obmV3YXJncywgMCwgY2xzKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIGkpOworICAgICAgICAgICAgUHlfSU5DUkVGKHYpOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShuZXdhcmdzLCBpKzEsIHYpOworICAgICAgICB9CisgICAgICAgIFB5X1hERUNSRUYoYXJncyk7CisgICAgfQorICAgIGVsc2UgaWYgKHByb3RvID49IDQpIHsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfZXhfXyk7CisKKyAgICAgICAgbmV3b2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZChjb3B5cmVnLCAmUHlJZF9fX25ld29ial9leF9fKTsKKyAgICAgICAgUHlfREVDUkVGKGNvcHlyZWcpOworICAgICAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbmV3YXJncyA9IFB5VHVwbGVfUGFjaygzLCBQeV9UWVBFKG9iaiksIGFyZ3MsIGt3YXJncyk7CiAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAobmV3YXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQotICAgIG5ld29iaiA9IF9QeU9iamVjdF9HZXRBdHRySWQoY29weXJlZywgJlB5SWRfX19uZXdvYmpfZXhfXyk7Ci0gICAgUHlfREVDUkVGKGNvcHlyZWcpOwotICAgIGlmIChuZXdvYmogPT0gTlVMTCkgeworICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IHVzZSBwcm90b2NvbCA0IG9yIGdyZWF0ZXIgdG8gY29weSB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3Q7IHNpbmNlIF9fZ2V0bmV3YXJnc19leF9fIHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50cy4iKTsKICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOwogICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGNvcHlyZWcpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbmV3YXJncyA9IFB5VHVwbGVfUGFjaygzLCBQeV9UWVBFKG9iaiksIGFyZ3MsIGt3YXJncyk7Ci0gICAgUHlfREVDUkVGKGFyZ3MpOwotICAgIFB5X0RFQ1JFRihrd2FyZ3MpOwotICAgIGlmIChuZXdhcmdzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKG5ld29iaik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBzdGF0ZSA9IF9QeU9iamVjdF9HZXRTdGF0ZShvYmopOworCisgICAgc3RhdGUgPSBfUHlPYmplY3RfR2V0U3RhdGUob2JqLAorICAgICAgICAgICAgICAgICFoYXNhcmdzICYmICFQeUxpc3RfQ2hlY2sob2JqKSAmJiAhUHlEaWN0X0NoZWNrKG9iaikpOwogICAgIGlmIChzdGF0ZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOwogICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CkBAIC00MDQ1LDkxICs0MTk2LDEyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXJlZHVjZV8yKFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKmNsczsKLSAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICphcmdzMiA9IE5VTEwsICprd2FyZ3MgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpzdGF0ZSA9IE5VTEwsICpsaXN0aXRlbXMgPSBOVUxMLCAqZGljdGl0ZW1zID0gTlVMTDsKLSAgICBQeU9iamVjdCAqY29weXJlZyA9IE5VTEwsICpuZXdvYmogPSBOVUxMLCAqcmVzID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfXyk7Ci0KLSAgICBpZiAoUHlfVFlQRShvYmopLT50cF9uZXcgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSAlcyBvYmplY3RzIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0dldE5ld0FyZ3VtZW50cyhvYmosICZhcmdzLCAma3dhcmdzKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChhcmdzID09IE5VTEwpIHsKLSAgICAgICAgYXNzZXJ0KGt3YXJncyA9PSBOVUxMKTsKLSAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOwotICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChrd2FyZ3MgIT0gTlVMTCkgewotICAgICAgICBpZiAoUHlEaWN0X1NpemUoa3dhcmdzKSA+IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IHVzZSBwcm90b2NvbCA0IG9yIGdyZWF0ZXIgdG8gY29weSB0aGlzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0OyBzaW5jZSBfX2dldG5ld2FyZ3NfZXhfXyByZXR1cm5lZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmQgYXJndW1lbnRzLiIpOwotICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOwotICAgICAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9DTEVBUihrd2FyZ3MpOwotICAgIH0KLQotICAgIHN0YXRlID0gX1B5T2JqZWN0X0dldFN0YXRlKG9iaik7Ci0gICAgaWYgKHN0YXRlID09IE5VTEwpCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgaWYgKF9QeU9iamVjdF9HZXRJdGVtc0l0ZXIob2JqLCAmbGlzdGl0ZW1zLCAmZGljdGl0ZW1zKSA8IDApCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7Ci0gICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkKLSAgICAgICAgZ290byBlbmQ7Ci0gICAgbmV3b2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZChjb3B5cmVnLCAmUHlJZF9fX25ld29ial9fKTsKLSAgICBpZiAobmV3b2JqID09IE5VTEwpCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgbiA9IFB5VHVwbGVfR0VUX1NJWkUoYXJncyk7Ci0gICAgYXJnczIgPSBQeVR1cGxlX05ldyhuKzEpOwotICAgIGlmIChhcmdzMiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVuZDsKLSAgICBjbHMgPSAoUHlPYmplY3QgKikgUHlfVFlQRShvYmopOwotICAgIFB5X0lOQ1JFRihjbHMpOwotICAgIFB5VHVwbGVfU0VUX0lURU0oYXJnczIsIDAsIGNscyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSk7Ci0gICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzMiwgaSsxLCB2KTsKLSAgICB9Ci0KLSAgICByZXMgPSBQeVR1cGxlX1BhY2soNSwgbmV3b2JqLCBhcmdzMiwgc3RhdGUsIGxpc3RpdGVtcywgZGljdGl0ZW1zKTsKLQotICBlbmQ6Ci0gICAgUHlfWERFQ1JFRihhcmdzKTsKLSAgICBQeV9YREVDUkVGKGFyZ3MyKTsKLSAgICBQeV9YREVDUkVGKHN0YXRlKTsKLSAgICBQeV9YREVDUkVGKGxpc3RpdGVtcyk7Ci0gICAgUHlfWERFQ1JFRihkaWN0aXRlbXMpOwotICAgIFB5X1hERUNSRUYoY29weXJlZyk7Ci0gICAgUHlfWERFQ1JFRihuZXdvYmopOwotICAgIHJldHVybiByZXM7Ci19Ci0KIC8qCiAgKiBUaGVyZSB3ZXJlIHR3byBwcm9ibGVtcyB3aGVuIG9iamVjdC5fX3JlZHVjZV9fIGFuZCBvYmplY3QuX19yZWR1Y2VfZXhfXwogICogd2VyZSBpbXBsZW1lbnRlZCBpbiB0aGUgc2FtZSBmdW5jdGlvbjoKICAqICAtIHRyeWluZyB0byBwaWNrbGUgYW4gb2JqZWN0IHdpdGggYSBjdXN0b20gX19yZWR1Y2VfXyBtZXRob2QgdGhhdAogICogICAgZmVsbCBiYWNrIHRvIG9iamVjdC5fX3JlZHVjZV9fIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBsZWQgdG8KLSAqICAgIGluZmluaXRlIHJlY3Vyc2lvbiBhdCBQeXRob24gbGV2ZWwgYW5kIGV2ZW50dWFsIFJ1bnRpbWVFcnJvci4KKyAqICAgIGluZmluaXRlIHJlY3Vyc2lvbiBhdCBQeXRob24gbGV2ZWwgYW5kIGV2ZW50dWFsIFJlY3Vyc2lvbkVycm9yLgogICogIC0gUGlja2xpbmcgb2JqZWN0cyB0aGF0IGxpZWQgYWJvdXQgdGhlaXIgdHlwZSBieSBvdmVyd3JpdGluZyB0aGUKICAqICAgIF9fY2xhc3NfXyBkZXNjcmlwdG9yIGNvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uIGF0IEMgbGV2ZWwKICAqICAgIGFuZCBldmVudHVhbCBzZWdmYXVsdC4KQEAgLTQxNDQsMTAgKzQyMTYsOCBAQAogewogICAgIFB5T2JqZWN0ICpjb3B5cmVnLCAqcmVzOwogCi0gICAgaWYgKHByb3RvID49IDQpCi0gICAgICAgIHJldHVybiByZWR1Y2VfNChzZWxmKTsKLSAgICBlbHNlIGlmIChwcm90byA+PSAyKQotICAgICAgICByZXR1cm4gcmVkdWNlXzIoc2VsZik7CisgICAgaWYgKHByb3RvID49IDIpCisgICAgICAgIHJldHVybiByZWR1Y2VfbmV3b2JqKHNlbGYsIHByb3RvKTsKIAogICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOwogICAgIGlmICghY29weXJlZykKQEAgLTQ0MzksOCArNDUwOSwxMCBAQAogICAgICAgICBkZXNjciA9IFB5RGVzY3JfTmV3TWVtYmVyKHR5cGUsIG1lbWIpOwogICAgICAgICBpZiAoZGVzY3IgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG1lbWItPm5hbWUsIGRlc2NyKSA8IDApCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBtZW1iLT5uYW1lLCBkZXNjcikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGVzY3IpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtNDQ1OSw4ICs0NTMxLDEwIEBACiAKICAgICAgICAgaWYgKGRlc2NyID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBnc3AtPm5hbWUsIGRlc2NyKSA8IDApCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBnc3AtPm5hbWUsIGRlc2NyKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC00NTYyLDYgKzQ2MzYsNyBAQAogI2RlZmluZSBDT1BZU0xPVChTTE9UKSBcCiAgICAgaWYgKCF0eXBlLT5TTE9UICYmIFNMT1RERUZJTkVEKFNMT1QpKSB0eXBlLT5TTE9UID0gYmFzZS0+U0xPVAogCisjZGVmaW5lIENPUFlBU1lOQyhTTE9UKSBDT1BZU0xPVCh0cF9hc19hc3luYy0+U0xPVCkKICNkZWZpbmUgQ09QWU5VTShTTE9UKSBDT1BZU0xPVCh0cF9hc19udW1iZXItPlNMT1QpCiAjZGVmaW5lIENPUFlTRVEoU0xPVCkgQ09QWVNMT1QodHBfYXNfc2VxdWVuY2UtPlNMT1QpCiAjZGVmaW5lIENPUFlNQVAoU0xPVCkgQ09QWVNMT1QodHBfYXNfbWFwcGluZy0+U0xPVCkKQEAgLTQ2MDcsNiArNDY4MiwxNyBAQAogICAgICAgICBDT1BZTlVNKG5iX2lucGxhY2VfdHJ1ZV9kaXZpZGUpOwogICAgICAgICBDT1BZTlVNKG5iX2lucGxhY2VfZmxvb3JfZGl2aWRlKTsKICAgICAgICAgQ09QWU5VTShuYl9pbmRleCk7CisgICAgICAgIENPUFlOVU0obmJfbWF0cml4X211bHRpcGx5KTsKKyAgICAgICAgQ09QWU5VTShuYl9pbnBsYWNlX21hdHJpeF9tdWx0aXBseSk7CisgICAgfQorCisgICAgaWYgKHR5cGUtPnRwX2FzX2FzeW5jICE9IE5VTEwgJiYgYmFzZS0+dHBfYXNfYXN5bmMgIT0gTlVMTCkgeworICAgICAgICBiYXNlYmFzZSA9IGJhc2UtPnRwX2Jhc2U7CisgICAgICAgIGlmIChiYXNlYmFzZS0+dHBfYXNfYXN5bmMgPT0gTlVMTCkKKyAgICAgICAgICAgIGJhc2ViYXNlID0gTlVMTDsKKyAgICAgICAgQ09QWUFTWU5DKGFtX2F3YWl0KTsKKyAgICAgICAgQ09QWUFTWU5DKGFtX2FpdGVyKTsKKyAgICAgICAgQ09QWUFTWU5DKGFtX2FuZXh0KTsKICAgICB9CiAKICAgICBpZiAodHlwZS0+dHBfYXNfc2VxdWVuY2UgIT0gTlVMTCAmJiBiYXNlLT50cF9hc19zZXF1ZW5jZSAhPSBOVUxMKSB7CkBAIC00ODE4LDE0ICs0OTA0LDExIEBACiAgICAgICAgICAgICBQeU9iamVjdCAqYiA9IFB5VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOwogICAgICAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhiKSAmJgogICAgICAgICAgICAgICAgICgoKFB5VHlwZU9iamVjdCAqKWIpLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpKSB7Ci0gICAgICAgICAgICAgICAgY2hhciBidWZbMzAwXTsKLSAgICAgICAgICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAnJS4xMDBzJyBpcyBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1dCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRzIGJhc2UgdHlwZSAnJS4xMDBzJyBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgKChQeVR5cGVPYmplY3QgKiliKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCBidWYpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAnJS4xMDBzJyBpcyBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1dCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdHMgYmFzZSB0eXBlICclLjEwMHMnIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsICgoUHlUeXBlT2JqZWN0ICopYiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNDg4MSw2ICs0OTY0LDggQEAKICAgICAvKiBTb21lIG1vcmUgc3BlY2lhbCBzdHVmZiAqLwogICAgIGJhc2UgPSB0eXBlLT50cF9iYXNlOwogICAgIGlmIChiYXNlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHR5cGUtPnRwX2FzX2FzeW5jID09IE5VTEwpCisgICAgICAgICAgICB0eXBlLT50cF9hc19hc3luYyA9IGJhc2UtPnRwX2FzX2FzeW5jOwogICAgICAgICBpZiAodHlwZS0+dHBfYXNfbnVtYmVyID09IE5VTEwpCiAgICAgICAgICAgICB0eXBlLT50cF9hc19udW1iZXIgPSBiYXNlLT50cF9hc19udW1iZXI7CiAgICAgICAgIGlmICh0eXBlLT50cF9hc19zZXF1ZW5jZSA9PSBOVUxMKQpAQCAtNDkwMSwxNiArNDk4Niw2IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIC8qIFdhcm4gZm9yIGEgdHlwZSB0aGF0IGltcGxlbWVudHMgdHBfY29tcGFyZSAobm93IGtub3duIGFzCi0gICAgICAgdHBfcmVzZXJ2ZWQpIGJ1dCBub3QgdHBfcmljaGNvbXBhcmUuICovCi0gICAgaWYgKHR5cGUtPnRwX3Jlc2VydmVkICYmICF0eXBlLT50cF9yaWNoY29tcGFyZSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRlZmluZXMgdHBfcmVzZXJ2ZWQgKGZvcm1lcmx5IHRwX2NvbXBhcmUpICIKLSAgICAgICAgICAgICJidXQgbm90IHRwX3JpY2hjb21wYXJlLiBDb21wYXJpc29ucyBtYXkgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZC4iLAotICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotCiAgICAgLyogQWxsIGRvbmUgLS0gc2V0IHRoZSByZWFkeSBmbGFnICovCiAgICAgYXNzZXJ0KHR5cGUtPnRwX2RpY3QgIT0gTlVMTCk7CiAgICAgdHlwZS0+dHBfZmxhZ3MgPQpAQCAtNTc3Nyw2ICs1ODUyLDcgQEAKIFNMT1QxQklOKHNsb3RfbmJfYWRkLCBuYl9hZGQsICJfX2FkZF9fIiwgIl9fcmFkZF9fIikKIFNMT1QxQklOKHNsb3RfbmJfc3VidHJhY3QsIG5iX3N1YnRyYWN0LCAiX19zdWJfXyIsICJfX3JzdWJfXyIpCiBTTE9UMUJJTihzbG90X25iX211bHRpcGx5LCBuYl9tdWx0aXBseSwgIl9fbXVsX18iLCAiX19ybXVsX18iKQorU0xPVDFCSU4oc2xvdF9uYl9tYXRyaXhfbXVsdGlwbHksIG5iX21hdHJpeF9tdWx0aXBseSwgIl9fbWF0bXVsX18iLCAiX19ybWF0bXVsX18iKQogU0xPVDFCSU4oc2xvdF9uYl9yZW1haW5kZXIsIG5iX3JlbWFpbmRlciwgIl9fbW9kX18iLCAiX19ybW9kX18iKQogU0xPVDFCSU4oc2xvdF9uYl9kaXZtb2QsIG5iX2Rpdm1vZCwgIl9fZGl2bW9kX18iLCAiX19yZGl2bW9kX18iKQogCkBAIC01ODcwLDYgKzU5NDYsNyBAQAogU0xPVDEoc2xvdF9uYl9pbnBsYWNlX2FkZCwgIl9faWFkZF9fIiwgUHlPYmplY3QgKiwgIk8iKQogU0xPVDEoc2xvdF9uYl9pbnBsYWNlX3N1YnRyYWN0LCAiX19pc3ViX18iLCBQeU9iamVjdCAqLCAiTyIpCiBTTE9UMShzbG90X25iX2lucGxhY2VfbXVsdGlwbHksICJfX2ltdWxfXyIsIFB5T2JqZWN0ICosICJPIikKK1NMT1QxKHNsb3RfbmJfaW5wbGFjZV9tYXRyaXhfbXVsdGlwbHksICJfX2ltYXRtdWxfXyIsIFB5T2JqZWN0ICosICJPIikKIFNMT1QxKHNsb3RfbmJfaW5wbGFjZV9yZW1haW5kZXIsICJfX2ltb2RfXyIsIFB5T2JqZWN0ICosICJPIikKIC8qIENhbid0IHVzZSBTTE9UMSBoZXJlLCBiZWNhdXNlIG5iX2lucGxhY2VfcG93ZXIgaXMgdGVybmFyeSAqLwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTYyNjAsNiArNjMzNyw1OSBAQAogICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitzbG90X2FtX2F3YWl0KFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpmdW5jLCAqcmVzOworICAgIF9QeV9JREVOVElGSUVSKF9fYXdhaXRfXyk7CisKKyAgICBmdW5jID0gbG9va3VwX21ldGhvZChzZWxmLCAmUHlJZF9fX2F3YWl0X18pOworICAgIGlmIChmdW5jICE9IE5VTEwpIHsKKyAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAib2JqZWN0ICUuNTBzIGRvZXMgbm90IGhhdmUgX19hd2FpdF9fIG1ldGhvZCIsCisgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc2xvdF9hbV9haXRlcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqZnVuYywgKnJlczsKKyAgICBfUHlfSURFTlRJRklFUihfX2FpdGVyX18pOworCisgICAgZnVuYyA9IGxvb2t1cF9tZXRob2Qoc2VsZiwgJlB5SWRfX19haXRlcl9fKTsKKyAgICBpZiAoZnVuYyAhPSBOVUxMKSB7CisgICAgICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgIm9iamVjdCAlLjUwcyBkb2VzIG5vdCBoYXZlIF9fYWl0ZXJfXyBtZXRob2QiLAorICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Nsb3RfYW1fYW5leHQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmZ1bmMsICpyZXM7CisgICAgX1B5X0lERU5USUZJRVIoX19hbmV4dF9fKTsKKworICAgIGZ1bmMgPSBsb29rdXBfbWV0aG9kKHNlbGYsICZQeUlkX19fYW5leHRfXyk7CisgICAgaWYgKGZ1bmMgIT0gTlVMTCkgeworICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICJvYmplY3QgJS41MHMgZG9lcyBub3QgaGF2ZSBfX2FuZXh0X18gbWV0aG9kIiwKKyAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CiAKIC8qCiBUYWJsZSBtYXBwaW5nIF9fZm9vX18gbmFtZXMgdG8gdHBfZm9vIG9mZnNldHMgYW5kIHNsb3RfdHBfZm9vIHdyYXBwZXIgZnVuY3Rpb25zLgpAQCAtNjI3Niw2ICs2NDA2LDcgQEAKIAogI3VuZGVmIFRQU0xPVAogI3VuZGVmIEZMU0xPVAorI3VuZGVmIEFNU0xPVAogI3VuZGVmIEVUU0xPVAogI3VuZGVmIFNRU0xPVAogI3VuZGVmIE1QU0xPVApAQCAtNjI5NCw2ICs2NDI1LDggQEAKICNkZWZpbmUgRVRTTE9UKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBET0MpIFwKICAgICB7TkFNRSwgb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgU0xPVCksICh2b2lkICopKEZVTkNUSU9OKSwgV1JBUFBFUiwgXAogICAgICBQeURvY19TVFIoRE9DKX0KKyNkZWZpbmUgQU1TTE9UKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBET0MpIFwKKyAgICBFVFNMT1QoTkFNRSwgYXNfYXN5bmMuU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIERPQykKICNkZWZpbmUgU1FTTE9UKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBET0MpIFwKICAgICBFVFNMT1QoTkFNRSwgYXNfc2VxdWVuY2UuU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIERPQykKICNkZWZpbmUgTVBTTE9UKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBET0MpIFwKQEAgLTYzNzMsNiArNjUwNiwxMyBAQAogICAgICAgICAgICAiQ3JlYXRlIGFuZCByZXR1cm4gbmV3IG9iamVjdC4gIFNlZSBoZWxwKHR5cGUpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuIiksCiAgICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZmluYWxpemUsIHNsb3RfdHBfZmluYWxpemUsICh3cmFwcGVyZnVuYyl3cmFwX2RlbCwgIiIpLAogCisgICAgQU1TTE9UKCJfX2F3YWl0X18iLCBhbV9hd2FpdCwgc2xvdF9hbV9hd2FpdCwgd3JhcF91bmFyeWZ1bmMsCisgICAgICAgICAgICJfX2F3YWl0X18oJHNlbGYsIC8pXG4tLVxuXG5SZXR1cm4gYW4gaXRlcmF0b3IgdG8gYmUgdXNlZCBpbiBhd2FpdCBleHByZXNzaW9uLiIpLAorICAgIEFNU0xPVCgiX19haXRlcl9fIiwgYW1fYWl0ZXIsIHNsb3RfYW1fYWl0ZXIsIHdyYXBfdW5hcnlmdW5jLAorICAgICAgICAgICAiX19haXRlcl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIGFuIGF3YWl0YWJsZSwgdGhhdCByZXNvbHZlcyBpbiBhc3luY2hyb25vdXMgaXRlcmF0b3IuIiksCisgICAgQU1TTE9UKCJfX2FuZXh0X18iLCBhbV9hbmV4dCwgc2xvdF9hbV9hbmV4dCwgd3JhcF91bmFyeWZ1bmMsCisgICAgICAgICAgICJfX2FuZXh0X18oJHNlbGYsIC8pXG4tLVxuXG5SZXR1cm4gYSB2YWx1ZSBvciByYWlzZSBTdG9wQXN5bmNJdGVyYXRpb24uIiksCisKICAgICBCSU5TTE9UKCJfX2FkZF9fIiwgbmJfYWRkLCBzbG90X25iX2FkZCwKICAgICAgICAgICAgIisiKSwKICAgICBSQklOU0xPVCgiX19yYWRkX18iLCBuYl9hZGQsIHNsb3RfbmJfYWRkLApAQCAtNjQ1MCw2ICs2NTkwLDEyIEBACiAgICAgICAgICAgICJfX2luZGV4X18oJHNlbGYsIC8pXG4tLVxuXG4iCiAgICAgICAgICAgICJSZXR1cm4gc2VsZiBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciwgaWYgc2VsZiBpcyBzdWl0YWJsZSAiCiAgICAgICAgICAgICJmb3IgdXNlIGFzIGFuIGluZGV4IGludG8gYSBsaXN0LiIpLAorICAgIEJJTlNMT1QoIl9fbWF0bXVsX18iLCBuYl9tYXRyaXhfbXVsdGlwbHksIHNsb3RfbmJfbWF0cml4X211bHRpcGx5LAorICAgICAgICAgICAgIkAiKSwKKyAgICBSQklOU0xPVCgiX19ybWF0bXVsX18iLCBuYl9tYXRyaXhfbXVsdGlwbHksIHNsb3RfbmJfbWF0cml4X211bHRpcGx5LAorICAgICAgICAgICAgICJAIiksCisgICAgSUJTTE9UKCJfX2ltYXRtdWxfXyIsIG5iX2lucGxhY2VfbWF0cml4X211bHRpcGx5LCBzbG90X25iX2lucGxhY2VfbWF0cml4X211bHRpcGx5LAorICAgICAgICAgICB3cmFwX2JpbmFyeWZ1bmMsICJAPSIpLAogICAgIE1QU0xPVCgiX19sZW5fXyIsIG1wX2xlbmd0aCwgc2xvdF9tcF9sZW5ndGgsIHdyYXBfbGVuZnVuYywKICAgICAgICAgICAgIl9fbGVuX18oJHNlbGYsIC8pXG4tLVxuXG5SZXR1cm4gbGVuKHNlbGYpLiIpLAogICAgIE1QU0xPVCgiX19nZXRpdGVtX18iLCBtcF9zdWJzY3JpcHQsIHNsb3RfbXBfc3Vic2NyaXB0LApAQCAtNjUxOSw2ICs2NjY1LDEwIEBACiAgICAgICAgIHB0ciA9IChjaGFyICopdHlwZS0+dHBfYXNfbnVtYmVyOwogICAgICAgICBvZmZzZXQgLT0gb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyKTsKICAgICB9CisgICAgZWxzZSBpZiAoKHNpemVfdClvZmZzZXQgPj0gb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfYXN5bmMpKSB7CisgICAgICAgIHB0ciA9IChjaGFyICopdHlwZS0+dHBfYXNfYXN5bmM7CisgICAgICAgIG9mZnNldCAtPSBvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19hc3luYyk7CisgICAgfQogICAgIGVsc2UgewogICAgICAgICBwdHIgPSAoY2hhciAqKXR5cGU7CiAgICAgfQpAQCAtNjY3MCwxNSArNjgyMCwxNSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNsb3RkZWZzX2luaXRpYWxpemVkID0gMDsKIC8qIEluaXRpYWxpemUgdGhlIHNsb3RkZWZzIHRhYmxlIGJ5IGFkZGluZyBpbnRlcm5lZCBzdHJpbmcgb2JqZWN0cyBmb3IgdGhlCi0gICBuYW1lcyBhbmQgc29ydGluZyB0aGUgZW50cmllcy4gKi8KKyAgIG5hbWVzLiAqLwogc3RhdGljIHZvaWQKIGluaXRfc2xvdGRlZnModm9pZCkKIHsKICAgICBzbG90ZGVmICpwOwotICAgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOwogCi0gICAgaWYgKGluaXRpYWxpemVkKQorICAgIGlmIChzbG90ZGVmc19pbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAocCA9IHNsb3RkZWZzOyBwLT5uYW1lOyBwKyspIHsKICAgICAgICAgLyogU2xvdHMgbXVzdCBiZSBvcmRlcmVkIGJ5IHRoZWlyIG9mZnNldCBpbiB0aGUgUHlIZWFwVHlwZU9iamVjdC4gKi8KQEAgLTY2ODcsNyArNjgzNywxNyBAQAogICAgICAgICBpZiAoIXAtPm5hbWVfc3Ryb2JqKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiT3V0IG9mIG1lbW9yeSBpbnRlcm5pbmcgc2xvdGRlZiBuYW1lcyIpOwogICAgIH0KLSAgICBpbml0aWFsaXplZCA9IDE7CisgICAgc2xvdGRlZnNfaW5pdGlhbGl6ZWQgPSAxOworfQorCisvKiBVbmRvIGluaXRfc2xvdGRlZnMsIHJlbGVhc2luZyB0aGUgaW50ZXJuZWQgc3RyaW5ncy4gKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3Nsb3RkZWZzKHZvaWQpCit7CisgICAgc2xvdGRlZiAqcDsKKyAgICBmb3IgKHAgPSBzbG90ZGVmczsgcC0+bmFtZTsgcCsrKSB7CisgICAgICAgIFB5X0NMRUFSKHAtPm5hbWVfc3Ryb2JqKTsKKyAgICB9CisgICAgc2xvdGRlZnNfaW5pdGlhbGl6ZWQgPSAwOwogfQogCiAvKiBVcGRhdGUgdGhlIHNsb3RzIGFmdGVyIGFzc2lnbm1lbnQgdG8gYSBjbGFzcyAodHlwZSkgYXR0cmlidXRlLiAqLwpAQCAtNjg1NCw4ICs3MDE0LDEwIEBACiAgICAgICAgICAgICBkZXNjciA9IFB5RGVzY3JfTmV3V3JhcHBlcih0eXBlLCBwLCAqcHRyKTsKICAgICAgICAgICAgIGlmIChkZXNjciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShkaWN0LCBwLT5uYW1lX3N0cm9iaiwgZGVzY3IpIDwgMCkKKyAgICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShkaWN0LCBwLT5uYW1lX3N0cm9iaiwgZGVzY3IpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTcxODIsOSArNzM0NCw5IEBACiAgICAgICAgIFB5X0lOQ1JFRihvYmopOwogICAgIH0KICAgICBQeV9JTkNSRUYodHlwZSk7Ci0gICAgc3UtPnR5cGUgPSB0eXBlOwotICAgIHN1LT5vYmogPSBvYmo7Ci0gICAgc3UtPm9ial90eXBlID0gb2JqX3R5cGU7CisgICAgUHlfWFNFVFJFRihzdS0+dHlwZSwgdHlwZSk7CisgICAgUHlfWFNFVFJFRihzdS0+b2JqLCBvYmopOworICAgIFB5X1hTRVRSRUYoc3UtPm9ial90eXBlLCBvYmpfdHlwZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvdHlwZXNsb3RzLmluYyBiL09iamVjdHMvdHlwZXNsb3RzLmluYwppbmRleCBjYWExZTAzLi5kYzc1MGNjIDEwMDY0NAotLS0gYS9PYmplY3RzL3R5cGVzbG90cy5pbmMKKysrIGIvT2JqZWN0cy90eXBlc2xvdHMuaW5jCkBAIC03MywzICs3Myw5IEBACiBvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX21lbWJlcnMpLAogb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9nZXRzZXQpLAogb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9mcmVlKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9tYXRyaXhfbXVsdGlwbHkpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2lucGxhY2VfbWF0cml4X211bHRpcGx5KSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX2FzeW5jLmFtX2F3YWl0KSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX2FzeW5jLmFtX2FpdGVyKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX2FzeW5jLmFtX2FuZXh0KSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGh0X3R5cGUudHBfZmluYWxpemUpLApkaWZmIC0tZ2l0IGEvT2JqZWN0cy90eXBlc2xvdHMucHkgYi9PYmplY3RzL3R5cGVzbG90cy5weQppbmRleCBiMjRjN2Y0Li45YjZkNGFkIDEwMDc1NQotLS0gYS9PYmplY3RzL3R5cGVzbG90cy5weQorKysgYi9PYmplY3RzL3R5cGVzbG90cy5weQpAQCAtMSwzMCArMSw0MyBAQAogIyEvdXNyL2Jpbi9weXRob24KLSMgVXNhZ2U6IHR5cGVzbG90cy5weSA8IEluY2x1ZGUvdHlwZXNsb3RzLmggPiB0eXBlc2xvdHMuaW5jCisjIFVzYWdlOiB0eXBlc2xvdHMucHkgPCBJbmNsdWRlL3R5cGVzbG90cy5oIHR5cGVzbG90cy5pbmMKIAogaW1wb3J0IHN5cywgcmUKIAotcHJpbnQoIi8qIEdlbmVyYXRlZCBieSB0eXBlc2xvdHMucHkgKi8iKQotcmVzID0ge30KLWZvciBsaW5lIGluIHN5cy5zdGRpbjoKLSAgICBtID0gcmUubWF0Y2goIiNkZWZpbmUgUHlfKFthLXpfXSspIChbMC05XSspIiwgbGluZSkKLSAgICBpZiBub3QgbToKLSAgICAgICAgY29udGludWUKLSAgICBtZW1iZXIgPSBtLmdyb3VwKDEpCi0gICAgaWYgbWVtYmVyLnN0YXJ0c3dpdGgoInRwXyIpOgotICAgICAgICBtZW1iZXIgPSAiaHRfdHlwZS4iK21lbWJlcgotICAgIGVsaWYgbWVtYmVyLnN0YXJ0c3dpdGgoIm5iXyIpOgotICAgICAgICBtZW1iZXIgPSAiYXNfbnVtYmVyLiIrbWVtYmVyCi0gICAgZWxpZiBtZW1iZXIuc3RhcnRzd2l0aCgibXBfIik6Ci0gICAgICAgIG1lbWJlciA9ICJhc19tYXBwaW5nLiIrbWVtYmVyCi0gICAgZWxpZiBtZW1iZXIuc3RhcnRzd2l0aCgic3FfIik6Ci0gICAgICAgIG1lbWJlciA9ICJhc19zZXF1ZW5jZS4iK21lbWJlcgotICAgIGVsaWYgbWVtYmVyLnN0YXJ0c3dpdGgoImJmXyIpOgotICAgICAgICBtZW1iZXIgPSAiYXNfYnVmZmVyLiIrbWVtYmVyCi0gICAgcmVzW2ludChtLmdyb3VwKDIpKV0gPSBtZW1iZXIKK2RlZiBnZW5lcmF0ZV90eXBlc2xvdHMob3V0PXN5cy5zdGRvdXQpOgorICAgIG91dC53cml0ZSgiLyogR2VuZXJhdGVkIGJ5IHR5cGVzbG90cy5weSAqL1xuIikKKyAgICByZXMgPSB7fQorICAgIGZvciBsaW5lIGluIHN5cy5zdGRpbjoKKyAgICAgICAgbSA9IHJlLm1hdGNoKCIjZGVmaW5lIFB5XyhbYS16X10rKSAoWzAtOV0rKSIsIGxpbmUpCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbWVtYmVyID0gbS5ncm91cCgxKQorICAgICAgICBpZiBtZW1iZXIuc3RhcnRzd2l0aCgidHBfIik6CisgICAgICAgICAgICBtZW1iZXIgPSAiaHRfdHlwZS4iK21lbWJlcgorICAgICAgICBlbGlmIG1lbWJlci5zdGFydHN3aXRoKCJhbV8iKToKKyAgICAgICAgICAgIG1lbWJlciA9ICJhc19hc3luYy4iK21lbWJlcgorICAgICAgICBlbGlmIG1lbWJlci5zdGFydHN3aXRoKCJuYl8iKToKKyAgICAgICAgICAgIG1lbWJlciA9ICJhc19udW1iZXIuIittZW1iZXIKKyAgICAgICAgZWxpZiBtZW1iZXIuc3RhcnRzd2l0aCgibXBfIik6CisgICAgICAgICAgICBtZW1iZXIgPSAiYXNfbWFwcGluZy4iK21lbWJlcgorICAgICAgICBlbGlmIG1lbWJlci5zdGFydHN3aXRoKCJzcV8iKToKKyAgICAgICAgICAgIG1lbWJlciA9ICJhc19zZXF1ZW5jZS4iK21lbWJlcgorICAgICAgICBlbGlmIG1lbWJlci5zdGFydHN3aXRoKCJiZl8iKToKKyAgICAgICAgICAgIG1lbWJlciA9ICJhc19idWZmZXIuIittZW1iZXIKKyAgICAgICAgcmVzW2ludChtLmdyb3VwKDIpKV0gPSBtZW1iZXIKIAotTSA9IG1heChyZXMua2V5cygpKSsxCi1mb3IgaSBpbiByYW5nZSgxLE0pOgotICAgIGlmIGkgaW4gcmVzOgotICAgICAgICBwcmludCgib2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgJXMpLCIgJSByZXNbaV0pCisgICAgTSA9IG1heChyZXMua2V5cygpKSsxCisgICAgZm9yIGkgaW4gcmFuZ2UoMSxNKToKKyAgICAgICAgaWYgaSBpbiByZXM6CisgICAgICAgICAgICBvdXQud3JpdGUoIm9mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsICVzKSxcbiIgJSByZXNbaV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXQud3JpdGUoIjAsXG4iKQorCitkZWYgbWFpbigpOgorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMjoKKyAgICAgICAgd2l0aCBvcGVuKHN5cy5hcmd2WzFdLCAidyIpIGFzIGY6CisgICAgICAgICAgICBnZW5lcmF0ZV90eXBlc2xvdHMoZikKICAgICBlbHNlOgotICAgICAgICBwcmludCgiMCwiKQorICAgICAgICBnZW5lcmF0ZV90eXBlc2xvdHMoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYyBiL09iamVjdHMvdW5pY29kZWN0eXBlLmMKaW5kZXggZWE1NDBkNi4uZDhjOTVjOCAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYworKysgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEVYVEVOREVEX0NBU0VfTUFTSyAweDQwMDAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIC8qIAorICAgIC8qCiAgICAgICAgVGhlc2UgYXJlIGVpdGhlciBkZWx0YXMgdG8gdGhlIGNoYXJhY3RlciBvciBvZmZzZXRzIGluCiAgICAgICAgX1B5VW5pY29kZV9FeHRlbmRlZENhc2UuCiAgICAgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jIGIvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKaW5kZXggMTkzZDg5OC4uMWZjYzgzZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMKQEAgLTI5MCw2ICsyOTAsOCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKIH07CiAKKyNpbmNsdWRlICJjbGluaWMvdW5pY29kZW9iamVjdC5jLmgiCisKIC8qIFRoZSBtYXggdW5pY29kZSB2YWx1ZSBpcyBhbHdheXMgMHgxMEZGRkYgd2hpbGUgdXNpbmcgdGhlIFBFUC0zOTMgQVBJLgogICAgVGhpcyBmdW5jdGlvbiBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZCBBUEkuICovCiBQeV9VTklDT0RFCkBAIC01MTksMTAgKzUyMSw2IEBACiAgICAgICAgIHJldHVybiBfUHlVbmljb2RlX0NvcHkodW5pY29kZSk7CiB9CiAKLSNpZmRlZiBIQVZFX01CQ1MKLXN0YXRpYyBPU1ZFUlNJT05JTkZPRVggd2ludmVyOwotI2VuZGlmCi0KIC8qIC0tLSBCbG9vbSBGaWx0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIHN0dWZmIHRvIGltcGxlbWVudCBzaW1wbGUgImJsb29tIGZpbHRlcnMiIGZvciBVbmljb2RlIGNoYXJhY3RlcnMuCkBAIC02NDUsNyArNjQzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBmaXh1cChQeU9iamVjdCAqc2VsZiwgUHlfVUNTNCAoKmZpeGZjdCkoUHlPYmplY3QgKnMpKTsKIAotUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpIGZpbmRjaGFyKHZvaWQgKnMsIGludCBraW5kLAorUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpIGZpbmRjaGFyKGNvbnN0IHZvaWQgKnMsIGludCBraW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwgUHlfVUNTNCBjaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyZWN0aW9uKQogewpAQCAtNjc3LDcgKzY3NSw3IEBACiB9CiAKICNpZmRlZiBQeV9ERUJVRwotLyogRmlsbCB0aGUgZGF0YSBvZiBhbiBVbmljb2RlIHN0cmluZyB3aXRoIGludmFsaWQgY2hhcmFjdGVycyB0byBkZXRlY3QgYnVncworLyogRmlsbCB0aGUgZGF0YSBvZiBhIFVuaWNvZGUgc3RyaW5nIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzCiAgICBlYXJsaWVyLgogCiAgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywgYXQgbGVhc3QgZm9yCkBAIC03MzIsNyArNzMwLDcgQEAKICAgICBfUHlfREVDX1JFRlRPVEFMOwogICAgIF9QeV9Gb3JnZXRSZWZlcmVuY2UodW5pY29kZSk7CiAKLSAgICBuZXdfdW5pY29kZSA9IChQeU9iamVjdCAqKVB5T2JqZWN0X1JFQUxMT0MoKGNoYXIgKil1bmljb2RlLCBuZXdfc2l6ZSk7CisgICAgbmV3X3VuaWNvZGUgPSAoUHlPYmplY3QgKilQeU9iamVjdF9SRUFMTE9DKHVuaWNvZGUsIG5ld19zaXplKTsKICAgICBpZiAobmV3X3VuaWNvZGUgPT0gTlVMTCkgewogICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHVuaWNvZGUpOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtNzUwLDYgKzc0OCw4IEBACiAgICAgZWxzZSBpZiAoX1B5VW5pY29kZV9IQVNfV1NUUl9NRU1PUlkodW5pY29kZSkpIHsKICAgICAgICAgUHlPYmplY3RfREVMKF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSk7CiAgICAgICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSA9IE5VTEw7CisgICAgICAgIGlmICghUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKQorICAgICAgICAgICAgX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSA9IDA7CiAgICAgfQogI2lmZGVmIFB5X0RFQlVHCiAgICAgdW5pY29kZV9maWxsX2ludmFsaWQodW5pY29kZSwgb2xkX2xlbmd0aCk7CkBAIC04MjEsNyArODIxLDcgQEAKICAgICBhc3NlcnQoX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpICE9IE5VTEwpOwogCiAgICAgLyogY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cgKi8KLSAgICBpZiAobGVuZ3RoID4gUFlfU1NJWkVfVF9NQVggLyBzaXplb2Yod2NoYXJfdCkgLSAxKSB7CisgICAgaWYgKGxlbmd0aCA+IFBZX1NTSVpFX1RfTUFYIC8gKFB5X3NzaXplX3Qpc2l6ZW9mKHdjaGFyX3QpIC0gMSkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtODkzLDcgKzg5Myw3IEBACiAgICAgfQogCiAgICAgLyogRW5zdXJlIHdlIHdvbid0IG92ZXJmbG93IHRoZSBzaXplLiAqLwotICAgIGlmIChsZW5ndGggPiAoKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKFB5X1VOSUNPREUpKSAtIDEpKSB7CisgICAgaWYgKGxlbmd0aCA+ICgoUFlfU1NJWkVfVF9NQVggLyAoUHlfc3NpemVfdClzaXplb2YoUHlfVU5JQ09ERSkpIC0gMSkpIHsKICAgICAgICAgcmV0dXJuIChQeVVuaWNvZGVPYmplY3QgKilQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICAgICBpZiAobGVuZ3RoIDwgMCkgewpAQCAtMTY2Nyw4ICsxNjY3LDcgQEAKICAgICAgICAgX1B5X0lOQ1JFRl9VTklDT0RFX0VNUFRZKCk7CiAgICAgICAgIGlmICghdW5pY29kZV9lbXB0eSkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlfREVDUkVGKCpwX3VuaWNvZGUpOwotICAgICAgICAqcF91bmljb2RlID0gdW5pY29kZV9lbXB0eTsKKyAgICAgICAgUHlfU0VUUkVGKCpwX3VuaWNvZGUsIHVuaWNvZGVfZW1wdHkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE2NzYsOCArMTY3NSw3IEBACiAgICAgICAgIFB5T2JqZWN0ICpjb3B5ID0gcmVzaXplX2NvcHkodW5pY29kZSwgbGVuZ3RoKTsKICAgICAgICAgaWYgKGNvcHkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlfREVDUkVGKCpwX3VuaWNvZGUpOwotICAgICAgICAqcF91bmljb2RlID0gY29weTsKKyAgICAgICAgUHlfU0VUUkVGKCpwX3VuaWNvZGUsIGNvcHkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTIzMTgsMzUgKzIzMTYsNiBAQAogCiAjZW5kaWYgLyogSEFWRV9XQ0hBUl9IICovCiAKLXN0YXRpYyB2b2lkCi1tYWtlZm10KGNoYXIgKmZtdCwgaW50IGxvbmdmbGFnLCBpbnQgbG9uZ2xvbmdmbGFnLCBpbnQgc2l6ZV90ZmxhZywKLSAgICAgICAgY2hhciBjKQotewotICAgICpmbXQrKyA9ICclJzsKLSAgICBpZiAobG9uZ2ZsYWcpCi0gICAgICAgICpmbXQrKyA9ICdsJzsKLSAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpIHsKLSAgICAgICAgLyogbG9uZ2xvbmdmbGFnIHNob3VsZCBvbmx5IGV2ZXIgYmUgbm9uemVybyBvbiBtYWNoaW5lcyB3aXRoCi0gICAgICAgICAgIEhBVkVfTE9OR19MT05HIGRlZmluZWQgKi8KLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICBjaGFyICpmID0gUFlfRk9STUFUX0xPTkdfTE9ORzsKLSAgICAgICAgd2hpbGUgKCpmKQotICAgICAgICAgICAgKmZtdCsrID0gKmYrKzsKLSNlbHNlCi0gICAgICAgIC8qIHdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJlICovCi0gICAgICAgIGFzc2VydCgwKTsKLSAgICAgICAgKmZtdCsrID0gJ2wnOwotI2VuZGlmCi0gICAgfQotICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpIHsKLSAgICAgICAgY2hhciAqZiA9IFBZX0ZPUk1BVF9TSVpFX1Q7Ci0gICAgICAgIHdoaWxlICgqZikKLSAgICAgICAgICAgICpmbXQrKyA9ICpmKys7Ci0gICAgfQotICAgICpmbXQrKyA9IGM7Ci0gICAgKmZtdCA9ICdcMCc7Ci19Ci0KIC8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGxkIG9yICVwLgogICAgV2UgbmVlZCBhdCBtb3N0IGNlaWwobG9nMTAoMjU2KSpTSVpFT0ZfTE9OR19MT05HKSBkaWdpdHMsCiAgICBwbHVzIDEgZm9yIHRoZSBzaWduLiAgNTMvMjIgaXMgYW4gdXBwZXIgYm91bmQgZm9yIGxvZzEwKDI1NikuICovCkBAIC0yNTIyLDQ4ICsyNDkxLDQyIEBACiAgICAgY2FzZSAneCc6CiAgICAgewogICAgICAgICAvKiB1c2VkIGJ5IHNwcmludGYgKi8KLSAgICAgICAgY2hhciBmbXRbMTBdOyAvKiBzaG91bGQgYmUgZW5vdWdoIGZvciAiJTBsbGRcMCIgKi8KICAgICAgICAgY2hhciBidWZmZXJbTUFYX0xPTkdfTE9OR19DSEFSU107CiAgICAgICAgIFB5X3NzaXplX3QgYXJnbGVuOwogCiAgICAgICAgIGlmICgqZiA9PSAndScpIHsKLSAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCAqZik7Ci0KICAgICAgICAgICAgIGlmIChsb25nZmxhZykKLSAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCAiJWx1IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIGxvbmcpKTsKICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQotICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsICIlIiBQWV9GT1JNQVRfTE9OR19MT05HICJ1IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpOwogI2VuZGlmCiAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQotICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsICIlIiBQWV9GT1JNQVRfU0laRV9UICJ1IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHNpemVfdCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsICIldSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBpbnQpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICgqZiA9PSAneCcpIHsKLSAgICAgICAgICAgIG1ha2VmbXQoZm10LCAwLCAwLCAwLCAneCcpOwotICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwgdmFfYXJnKCp2YXJncywgaW50KSk7CisgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV4IiwgdmFfYXJnKCp2YXJncywgaW50KSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgKmYpOwotCiAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiVsaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBsb25nKSk7CiAjaWZkZWYgSEFWRV9MT05HX0xPTkcKICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKLSAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCAiJSIgUFlfRk9STUFUX0xPTkdfTE9ORyAiaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBQWV9MT05HX0xPTkcpKTsKICNlbmRpZgogICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKLSAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCAiJSIgUFlfRk9STUFUX1NJWkVfVCAiaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBQeV9zc2l6ZV90KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiVpIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIGludCkpOwogICAgICAgICB9CiAgICAgICAgIGFzc2VydChsZW4gPj0gMCk7CkBAIC0zMjQ2LDcgKzMyMDksNyBAQAogICAgIHdsZW4yID0gd2NzbGVuKHdzdHIpOwogICAgIGlmICh3bGVuMiAhPSB3bGVuKSB7CiAgICAgICAgIFB5TWVtX0ZyZWUod3N0cik7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJlbWJlZGRlZCBudWxsIGNoYXJhY3RlciIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtYmVkZGVkIG51bGwgY2hhcmFjdGVyIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMzI1NCw3ICszMjE3LDcgQEAKICAgICAgICAgLyogInN1cnJvZ2F0ZWVzY2FwZSIgZXJyb3IgaGFuZGxlciAqLwogICAgICAgICBjaGFyICpzdHI7CiAKLSAgICAgICAgc3RyID0gX1B5X3djaGFyMmNoYXIod3N0ciwgJmVycm9yX3Bvcyk7CisgICAgICAgIHN0ciA9IFB5X0VuY29kZUxvY2FsZSh3c3RyLCAmZXJyb3JfcG9zKTsKICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoZXJyb3JfcG9zID09IChzaXplX3QpLTEpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMzMwNyw3ICszMjcwLDcgQEAKIAogICAgIGlmIChlcnJtc2cgIT0gTlVMTCkgewogICAgICAgICBzaXplX3QgZXJybGVuOwotICAgICAgICB3c3RyID0gX1B5X2NoYXIyd2NoYXIoZXJybXNnLCAmZXJybGVuKTsKKyAgICAgICAgd3N0ciA9IFB5X0RlY29kZUxvY2FsZShlcnJtc2csICZlcnJsZW4pOwogICAgICAgICBpZiAod3N0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFzb24gPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIGVycmxlbik7CiAgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdzdHIpOwpAQCAtMzQ4Miw3ICszNDQ1LDcgQEAKICAgICBtZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7CiAgICAgd2hpbGUgKGxlbikKICAgICB7Ci0gICAgICAgIGNvbnZlcnRlZCA9IG1icnRvd2MoJmNoLCAoY2hhciopc3RyLCBsZW4sICZtYnMpOworICAgICAgICBjb252ZXJ0ZWQgPSBtYnJ0b3djKCZjaCwgc3RyLCBsZW4sICZtYnMpOwogICAgICAgICBpZiAoY29udmVydGVkID09IDApCiAgICAgICAgICAgICAvKiBSZWFjaGVkIGVuZCBvZiBzdHJpbmcgKi8KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzUxMywxOSArMzQ3NiwyMCBAQAogICAgIGludCBzdXJyb2dhdGVlc2NhcGU7CiAgICAgc2l6ZV90IGVycm9yX3BvczsKICAgICBjaGFyICplcnJtc2c7Ci0gICAgUHlPYmplY3QgKnJlYXNvbiwgKmV4YzsKKyAgICBQeU9iamVjdCAqcmVhc29uID0gTlVMTDsgICAvKiBpbml0aWFsaXplIHRvIHByZXZlbnQgZ2NjIHdhcm5pbmcgKi8KKyAgICBQeU9iamVjdCAqZXhjOwogCiAgICAgaWYgKGxvY2FsZV9lcnJvcl9oYW5kbGVyKGVycm9ycywgJnN1cnJvZ2F0ZWVzY2FwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChzdHJbbGVuXSAhPSAnXDAnIHx8IGxlbiAhPSBzdHJsZW4oc3RyKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXIiKTsKKyAgICBpZiAoc3RyW2xlbl0gIT0gJ1wwJyB8fCAoc2l6ZV90KWxlbiAhPSBzdHJsZW4oc3RyKSkgIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbWJlZGRlZCBudWxsIGJ5dGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkgewogICAgICAgICAvKiAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyICovCi0gICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihzdHIsICZ3bGVuKTsKKyAgICAgICAgd3N0ciA9IFB5X0RlY29kZUxvY2FsZShzdHIsICZ3bGVuKTsKICAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHdsZW4gPT0gKHNpemVfdCktMSkKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMzU3OCw3ICszNTQyLDcgQEAKICAgICBlcnJvcl9wb3MgPSBtYnN0b3djc19lcnJvcnBvcyhzdHIsIGxlbik7CiAgICAgaWYgKGVycm1zZyAhPSBOVUxMKSB7CiAgICAgICAgIHNpemVfdCBlcnJsZW47Ci0gICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihlcnJtc2csICZlcnJsZW4pOworICAgICAgICB3c3RyID0gUHlfRGVjb2RlTG9jYWxlKGVycm1zZywgJmVycmxlbik7CiAgICAgICAgIGlmICh3c3RyICE9IE5VTEwpIHsKICAgICAgICAgICAgIHJlYXNvbiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgZXJybGVuKTsKICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CkBAIC0zNjQ4LDIxICszNjEyLDYgQEAKIAogCiBpbnQKLV9QeVVuaWNvZGVfSGFzTlVMQ2hhcnMoUHlPYmplY3QqIHN0cikKLXsKLSAgICBQeV9zc2l6ZV90IHBvczsKLQotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHBvcyA9IGZpbmRjaGFyKFB5VW5pY29kZV9EQVRBKHN0ciksIFB5VW5pY29kZV9LSU5EKHN0ciksCi0gICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSwgJ1wwJywgMSk7Ci0gICAgaWYgKHBvcyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMTsKLX0KLQotaW50CiBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoUHlPYmplY3QqIGFyZywgdm9pZCogYWRkcikKIHsKICAgICBQeU9iamVjdCAqb3V0cHV0ID0gTlVMTDsKQEAgLTM2NzAsNiArMzYxOSw3IEBACiAgICAgdm9pZCAqZGF0YTsKICAgICBpZiAoYXJnID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKCooUHlPYmplY3QqKilhZGRyKTsKKyAgICAgICAgKihQeU9iamVjdCoqKWFkZHIgPSBOVUxMOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2soYXJnKSkgewpAQCAtMzY5Miw4ICszNjQyLDggQEAKICAgICB9CiAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUob3V0cHV0KTsKICAgICBkYXRhID0gUHlCeXRlc19BU19TVFJJTkcob3V0cHV0KTsKLSAgICBpZiAoc2l6ZSAhPSBzdHJsZW4oZGF0YSkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImVtYmVkZGVkIE5VTCBjaGFyYWN0ZXIiKTsKKyAgICBpZiAoKHNpemVfdClzaXplICE9IHN0cmxlbihkYXRhKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtYmVkZGVkIG51bGwgYnl0ZSIpOwogICAgICAgICBQeV9ERUNSRUYob3V0cHV0KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMzcxNiw3ICszNjY2LDcgQEAKICAgICAgICAgb3V0cHV0ID0gYXJnOwogICAgICAgICBQeV9JTkNSRUYob3V0cHV0KTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZSBpZiAoUHlPYmplY3RfQ2hlY2tCdWZmZXIoYXJnKSkgewogICAgICAgICBhcmcgPSBQeUJ5dGVzX0Zyb21PYmplY3QoYXJnKTsKICAgICAgICAgaWYgKCFhcmcpCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTM3MzEsMTMgKzM2ODEsMTkgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInBhdGggc2hvdWxkIGJlIHN0cmluZyBvciBieXRlcywgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGFyZyktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvdXRwdXQpID09IC0xKSB7CiAgICAgICAgIFB5X0RFQ1JFRihvdXRwdXQpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKGZpbmRjaGFyKFB5VW5pY29kZV9EQVRBKG91dHB1dCksIFB5VW5pY29kZV9LSU5EKG91dHB1dCksCiAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG91dHB1dCksIDAsIDEpID49IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImVtYmVkZGVkIE5VTCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbWJlZGRlZCBudWxsIGNoYXJhY3RlciIpOwogICAgICAgICBQeV9ERUNSRUYob3V0cHV0KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNDg0NCw3ICs0ODAwLDcgQEAKIAogICAgIC8qIE5vdGU6IHNpemUgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZyBVbmljb2RlCiAgICAgICAgY2hhcmFjdGVyIGNvdW50ICovCi0gICAgaWYgKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpIDwgKHNpemUgKyAxKSkKKyAgICBpZiAoUFlfU1NJWkVfVF9NQVggLyAoUHlfc3NpemVfdClzaXplb2Yod2NoYXJfdCkgPCAoc2l6ZSArIDEpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB1bmljb2RlID0gUHlNZW1fUmF3TWFsbG9jKChzaXplICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghdW5pY29kZSkKQEAgLTUxMDksMzIgKzUwNjUsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZW9yZGVyKQogewotICAgIGludCBraW5kOwotICAgIHZvaWQgKmRhdGE7CisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kOworICAgIGNvbnN0IHZvaWQgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgdW5zaWduZWQgY2hhciAqcDsKLSAgICBQeV9zc2l6ZV90IG5zaXplLCBpOwotICAgIC8qIE9mZnNldHMgZnJvbSBwIGZvciBzdG9yaW5nIGJ5dGUgcGFpcnMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLworICAgIFBZX1VJTlQzMl9UICpvdXQ7CiAjaWYgUFlfTElUVExFX0VORElBTgotICAgIGludCBpb3JkZXJbXSA9IHswLCAxLCAyLCAzfTsKKyAgICBpbnQgbmF0aXZlX29yZGVyaW5nID0gYnl0ZW9yZGVyIDw9IDA7CiAjZWxzZQotICAgIGludCBpb3JkZXJbXSA9IHszLCAyLCAxLCAwfTsKKyAgICBpbnQgbmF0aXZlX29yZGVyaW5nID0gYnl0ZW9yZGVyID49IDA7CiAjZW5kaWYKICAgICBjb25zdCBjaGFyICplbmNvZGluZzsKKyAgICBQeV9zc2l6ZV90IG5zaXplLCBwb3M7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlcCA9IE5VTEw7CiAKLSNkZWZpbmUgU1RPUkVDSEFSKENIKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcFtpb3JkZXJbM11dID0gKChDSCkgPj4gMjQpICYgMHhmZjsgICAgIFwKLSAgICAgICAgcFtpb3JkZXJbMl1dID0gKChDSCkgPj4gMTYpICYgMHhmZjsgICAgIFwKLSAgICAgICAgcFtpb3JkZXJbMV1dID0gKChDSCkgPj4gOCkgJiAweGZmOyAgICAgIFwKLSAgICAgICAgcFtpb3JkZXJbMF1dID0gKENIKSAmIDB4ZmY7ICAgICAgICAgICAgIFwKLSAgICAgICAgcCArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0KICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhzdHIpKSB7CiAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNTE0NSw1OSArNTA5MSw1MyBAQAogICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzdHIpOwogICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7CiAKLSAgICBuc2l6ZSA9IGxlbiArIChieXRlb3JkZXIgPT0gMCk7Ci0gICAgaWYgKG5zaXplID4gUFlfU1NJWkVfVF9NQVggLyA0KQorICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDQgLSAoYnl0ZW9yZGVyID09IDApKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICBuc2l6ZSA9IGxlbiArIChieXRlb3JkZXIgPT0gMCk7CiAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbnNpemUgKiA0KTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHAgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgIC8qIG91dHB1dCBidWZmZXIgaXMgNC1ieXRlcyBhbGlnbmVkICovCisgICAgYXNzZXJ0KF9QeV9JU19BTElHTkVEKFB5Qnl0ZXNfQVNfU1RSSU5HKHYpLCA0KSk7CisgICAgb3V0ID0gKFBZX1VJTlQzMl9UICopUHlCeXRlc19BU19TVFJJTkcodik7CiAgICAgaWYgKGJ5dGVvcmRlciA9PSAwKQotICAgICAgICBTVE9SRUNIQVIoMHhGRUZGKTsKKyAgICAgICAgKm91dCsrID0gMHhGRUZGOwogICAgIGlmIChsZW4gPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7CisgICAgICAgIGdvdG8gZG9uZTsKIAotICAgIGlmIChieXRlb3JkZXIgPT0gLTEpIHsKLSAgICAgICAgLyogZm9yY2UgTEUgKi8KLSAgICAgICAgaW9yZGVyWzBdID0gMDsKLSAgICAgICAgaW9yZGVyWzFdID0gMTsKLSAgICAgICAgaW9yZGVyWzJdID0gMjsKLSAgICAgICAgaW9yZGVyWzNdID0gMzsKKyAgICBpZiAoYnl0ZW9yZGVyID09IC0xKQogICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiOwotICAgIH0KLSAgICBlbHNlIGlmIChieXRlb3JkZXIgPT0gMSkgewotICAgICAgICAvKiBmb3JjZSBCRSAqLwotICAgICAgICBpb3JkZXJbMF0gPSAzOwotICAgICAgICBpb3JkZXJbMV0gPSAyOwotICAgICAgICBpb3JkZXJbMl0gPSAxOwotICAgICAgICBpb3JkZXJbM10gPSAwOworICAgIGVsc2UgaWYgKGJ5dGVvcmRlciA9PSAxKQogICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzItYmUiOwotICAgIH0KICAgICBlbHNlCiAgICAgICAgIGVuY29kaW5nID0gInV0Zi0zMiI7CiAKICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgICAgICBTVE9SRUNIQVIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpOwotICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgdWNzMWxpYl91dGYzMl9lbmNvZGUoKGNvbnN0IFB5X1VDUzEgKilkYXRhLCBsZW4sICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOykgeworICAgIHBvcyA9IDA7CisgICAgd2hpbGUgKHBvcyA8IGxlbikgewogICAgICAgICBQeV9zc2l6ZV90IHJlcHNpemUsIG1vcmV1bml0czsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOwotICAgICAgICBpKys7Ci0gICAgICAgIGFzc2VydChjaCA8PSBNQVhfVU5JQ09ERSk7Ci0gICAgICAgIGlmICghUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7Ci0gICAgICAgICAgICBTVE9SRUNIQVIoY2gpOwotICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgIHBvcyArPSB1Y3MybGliX3V0ZjMyX2VuY29kZSgoY29uc3QgUHlfVUNTMiAqKWRhdGEgKyBwb3MsIGxlbiAtIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICAgICAgcG9zICs9IHVjczRsaWJfdXRmMzJfZW5jb2RlKChjb25zdCBQeV9VQ1M0ICopZGF0YSArIHBvcywgbGVuIC0gcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvcyA9PSBsZW4pCisgICAgICAgICAgICBicmVhazsKIAogICAgICAgICByZXAgPSB1bmljb2RlX2VuY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgZW5jb2RpbmcsICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIiwKLSAgICAgICAgICAgICAgICBzdHIsICZleGMsIGktMSwgaSwgJmkpOwotCisgICAgICAgICAgICAgICAgc3RyLCAmZXhjLCBwb3MsIHBvcyArIDEsICZwb3MpOwogICAgICAgICBpZiAoIXJlcCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTUyMDUsNyArNTE0NSw3IEBACiAgICAgICAgICAgICByZXBzaXplID0gUHlCeXRlc19HRVRfU0laRShyZXApOwogICAgICAgICAgICAgaWYgKHJlcHNpemUgJiAzKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgaSAtIDEsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIHBvcyAtIDEsIHBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIik7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KQEAgLTUyMTgsNyArNTE1OCw3IEBACiAgICAgICAgICAgICBtb3JldW5pdHMgPSByZXBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwKTsKICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0lTX0FTQ0lJKHJlcCkpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpIC0gMSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQpAQCAtNTIyNiw3ICs1MTY2LDcgQEAKIAogICAgICAgICAvKiBmb3VyIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3IgZWFjaCBzdXJyb2dhdGUgKi8KICAgICAgICAgaWYgKG1vcmV1bml0cyA+IDEpIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0cG9zID0gcCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG91dHBvcyA9IG91dCAtIChQWV9VSU5UMzJfVCopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOwogICAgICAgICAgICAgUHlfc3NpemVfdCBtb3JlYnl0ZXMgPSA0ICogKG1vcmV1bml0cyAtIDEpOwogICAgICAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodikgPiBQWV9TU0laRV9UX01BWCAtIG1vcmVieXRlcykgewogICAgICAgICAgICAgICAgIC8qIGludGVnZXIgb3ZlcmZsb3cgKi8KQEAgLTUyMzUsMjAgKzUxNzUsMTYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnYsIFB5Qnl0ZXNfR0VUX1NJWkUodikgKyBtb3JlYnl0ZXMpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgcCA9ICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodikgKyBvdXRwb3M7CisgICAgICAgICAgICBvdXQgPSAoUFlfVUlOVDMyX1QqKSBQeUJ5dGVzX0FTX1NUUklORyh2KSArIG91dHBvczsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKLSAgICAgICAgICAgIFB5X01FTUNQWShwLCBQeUJ5dGVzX0FTX1NUUklORyhyZXApLCByZXBzaXplKTsKLSAgICAgICAgICAgIHAgKz0gcmVwc2l6ZTsKKyAgICAgICAgICAgIFB5X01FTUNQWShvdXQsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcCksIHJlcHNpemUpOworICAgICAgICAgICAgb3V0ICs9IG1vcmV1bml0czsKICAgICAgICAgfSBlbHNlIC8qIHJlcCBpcyB1bmljb2RlICovIHsKLSAgICAgICAgICAgIGNvbnN0IFB5X1VDUzEgKnJlcGRhdGE7CiAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQocmVwKSA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7Ci0gICAgICAgICAgICByZXBkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVwKTsKLSAgICAgICAgICAgIHdoaWxlIChyZXBzaXplLS0pIHsKLSAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKnJlcGRhdGErKzsKLSAgICAgICAgICAgICAgICBTVE9SRUNIQVIoY2gpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdWNzMWxpYl91dGYzMl9lbmNvZGUoUHlVbmljb2RlXzFCWVRFX0RBVEEocmVwKSwgcmVwc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgIH0KIAogICAgICAgICBQeV9DTEVBUihyZXApOwpAQCAtNTI1NywxMSArNTE5MywxMiBAQAogICAgIC8qIEN1dCBiYWNrIHRvIHNpemUgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IsIGZvciBleGFtcGxlLAogICAgICAgIGVuY29kaW5nIG9mIGEgc3RyaW5nIGNvbnRhaW5pbmcgaXNvbGF0ZWQgc3Vycm9nYXRlcyBhbmQgdGhlICdpZ25vcmUnCiAgICAgICAgaGFuZGxlciBpcyB1c2VkLiAqLwotICAgIG5zaXplID0gcCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgbnNpemUgPSAodW5zaWduZWQgY2hhciopIG91dCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CiAgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCiAgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOworICBkb25lOgogICAgIHJldHVybiB2OwogICBlcnJvcjoKICAgICBQeV9YREVDUkVGKHJlcCk7CkBAIC01MjY5LDcgKzUyMDYsNiBAQAogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIHJldHVybiBOVUxMOwotI3VuZGVmIFNUT1JFQ0hBUgogfQogCiBQeU9iamVjdCAqCkBAIC02ODU2LDI4ICs2NzkyLDYgQEAKICAgICByZXR1cm4gUHlCeXRlc19BU19TVFJJTkcoKm9iaik7CiB9CiAKLXN0YXRpYyBpbnQKLWlzX2RiY3NfbGVhZF9ieXRlKFVJTlQgY29kZV9wYWdlLCBjb25zdCBjaGFyICpzLCBpbnQgb2Zmc2V0KQotewotICAgIGNvbnN0IGNoYXIgKmN1cnIgPSBzICsgb2Zmc2V0OwotICAgIGNvbnN0IGNoYXIgKnByZXY7Ci0KLSAgICBpZiAoIUlzREJDU0xlYWRCeXRlRXgoY29kZV9wYWdlLCAqY3VycikpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcHJldiA9IENoYXJQcmV2RXhBKGNvZGVfcGFnZSwgcywgY3VyciwgMCk7Ci0gICAgaWYgKHByZXYgPT0gY3VycikKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgLyogRklYTUU6IFRoaXMgY29kZSBpcyBsaW1pdGVkIHRvICJ0cnVlIiBkb3VibGUtYnl0ZSBlbmNvZGluZ3MsCi0gICAgICAgYXMgaXQgYXNzdW1lcyBhbiBpbmNvbXBsZXRlIGNoYXJhY3RlciBjb25zaXN0cyBvZiBhIHNpbmdsZQotICAgICAgIGJ5dGUuICovCi0gICAgaWYgKGN1cnIgLSBwcmV2ID09IDIpCi0gICAgICAgIHJldHVybiAxOwotICAgIGlmICghSXNEQkNTTGVhZEJ5dGVFeChjb2RlX3BhZ2UsICpwcmV2KSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBEV09SRAogZGVjb2RlX2NvZGVfcGFnZV9mbGFncyhVSU5UIGNvZGVfcGFnZSkKIHsKQEAgLTY5NTIsNyArNjg2Niw3IEBACiBkZWNvZGVfY29kZV9wYWdlX2Vycm9ycyhVSU5UIGNvZGVfcGFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqdiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluLCBjb25zdCBpbnQgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgaW50IGZpbmFsKQogewogICAgIGNvbnN0IGNoYXIgKnN0YXJ0aW4gPSBpbjsKICAgICBjb25zdCBjaGFyICplbmRpbiA9IGluICsgc2l6ZTsKQEAgLTY5NzksNyArNjg5Myw3IEBACiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmIChlcnJvcnMgPT0gTlVMTCB8fCBzdHJjbXAoZXJyb3JzLCAic3RyaWN0IikgPT0gMCkgeworICAgIGlmICgoZXJyb3JzID09IE5VTEwgfHwgc3RyY21wKGVycm9ycywgInN0cmljdCIpID09IDApICYmIGZpbmFsKSB7CiAgICAgICAgIC8qIFRoZSBsYXN0IGVycm9yIHdhcyBFUlJPUl9OT19VTklDT0RFX1RSQU5TTEFUSU9OLCB0aGVuIHdlIHJhaXNlIGEKICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yLiAqLwogICAgICAgICBtYWtlX2RlY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsIGluLCBzaXplLCAwLCAwLCByZWFzb24pOwpAQCAtNzA0Miw2ICs2OTU2LDEwIEBACiAgICAgICAgIGlmIChvdXRzaXplIDw9IDApIHsKICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvcywgZW5kaW5wb3MsIG91dHBvczsKIAorICAgICAgICAgICAgLyogbGFzdCBjaGFyYWN0ZXIgaW4gcGFydGlhbCBkZWNvZGU/ICovCisgICAgICAgICAgICBpZiAoaW4gKyBpbnNpemUgPj0gZW5kaW4gJiYgIWZpbmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBzdGFydGlucG9zID0gaW4gLSBzdGFydGluOwogICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgMTsKICAgICAgICAgICAgIG91dHBvcyA9IG91dCAtIFB5VW5pY29kZV9BU19VTklDT0RFKCp2KTsKQEAgLTcwNzAsNyArNjk4OCw4IEBACiAgICAgYXNzZXJ0KG91dHNpemUgPD0gUHlVbmljb2RlX1dTVFJfTEVOR1RIKCp2KSk7CiAgICAgaWYgKHVuaWNvZGVfcmVzaXplKHYsIG91dHNpemUpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICByZXQgPSBzaXplOworICAgIC8qIChpbiAtIHN0YXJ0aW4pIDw9IHNpemUgYW5kIHNpemUgaXMgYW4gaW50ICovCisgICAgcmV0ID0gUHlfU0FGRV9ET1dOQ0FTVChpbiAtIHN0YXJ0aW4sIFB5X3NzaXplX3QsIGludCk7CiAKIGVycm9yOgogICAgIFB5X1hERUNSRUYoZW5jb2Rpbmdfb2JqKTsKQEAgLTcxMTEsMjQgKzcwMzAsMTkgQEAKICAgICAgICAgICAgIGRvbmUgPSAxOwogICAgICAgICB9CiAKLSAgICAgICAgLyogU2tpcCB0cmFpbGluZyBsZWFkLWJ5dGUgdW5sZXNzICdmaW5hbCcgaXMgc2V0ICovCi0gICAgICAgIGlmICghZmluYWwgJiYgaXNfZGJjc19sZWFkX2J5dGUoY29kZV9wYWdlLCBzLCBjaHVua19zaXplIC0gMSkpCi0gICAgICAgICAgICAtLWNodW5rX3NpemU7Ci0KICAgICAgICAgaWYgKGNodW5rX3NpemUgPT0gMCAmJiBkb25lKSB7CiAgICAgICAgICAgICBpZiAodiAhPSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgICAgIH0KIAotCiAgICAgICAgIGNvbnZlcnRlZCA9IGRlY29kZV9jb2RlX3BhZ2Vfc3RyaWN0KGNvZGVfcGFnZSwgJnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsIGNodW5rX3NpemUpOwogICAgICAgICBpZiAoY29udmVydGVkID09IC0yKQogICAgICAgICAgICAgY29udmVydGVkID0gZGVjb2RlX2NvZGVfcGFnZV9lcnJvcnMoY29kZV9wYWdlLCAmdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsIGNodW5rX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMpOwotICAgICAgICBhc3NlcnQoY29udmVydGVkICE9IDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCBmaW5hbCk7CisgICAgICAgIGFzc2VydChjb252ZXJ0ZWQgIT0gMCB8fCBkb25lKTsKIAogICAgICAgICBpZiAoY29udmVydGVkIDwgMCkgewogICAgICAgICAgICAgUHlfWERFQ1JFRih2KTsKQEAgLTcxNzYsMTMgKzcwOTAsNyBAQAogZW5jb2RlX2NvZGVfcGFnZV9mbGFncyhVSU5UIGNvZGVfcGFnZSwgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIGlmIChjb2RlX3BhZ2UgPT0gQ1BfVVRGOCkgewotICAgICAgICBpZiAod2ludmVyLmR3TWFqb3JWZXJzaW9uID49IDYpCi0gICAgICAgICAgICAvKiBDUF9VVEY4IHN1cHBvcnRzIFdDX0VSUl9JTlZBTElEX0NIQVJTIG9uIFdpbmRvd3MgVmlzdGEKLSAgICAgICAgICAgICAgIGFuZCBsYXRlciAqLwotICAgICAgICAgICAgcmV0dXJuIFdDX0VSUl9JTlZBTElEX0NIQVJTOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAvKiBDUF9VVEY4IG9ubHkgc3VwcG9ydHMgZmxhZ3M9MCBvbiBXaW5kb3dzIG9sZGVyIHRoYW4gVmlzdGEgKi8KLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gV0NfRVJSX0lOVkFMSURfQ0hBUlM7CiAgICAgfQogICAgIGVsc2UgaWYgKGNvZGVfcGFnZSA9PSBDUF9VVEY3KSB7CiAgICAgICAgIC8qIENQX1VURjcgb25seSBzdXBwb3J0cyBmbGFncz0wICovCkBAIC03NDkyLDYgKzc0MDAsMTEgQEAKICAgICBQeV9zc2l6ZV90IG9mZnNldDsKICAgICBpbnQgY2h1bmtfbGVuLCByZXQsIGRvbmU7CiAKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh1bmljb2RlKSkgeworICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmljb2RlKTsKQEAgLTc1NjUsMTAgKzc0NzgsNiBAQAogUHlPYmplY3QgKgogUHlVbmljb2RlX0FzTUJDU1N0cmluZyhQeU9iamVjdCAqdW5pY29kZSkKIHsKLSAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh1bmljb2RlKSkgewotICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVDb2RlUGFnZShDUF9BQ1AsIHVuaWNvZGUsIE5VTEwpOwogfQogCkBAIC04NTM1LDEwICs4NDQ0LDEwIEBACiAgICAgfQogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayh4KSkgewogICAgICAgICBsb25nIHZhbHVlID0gUHlMb25nX0FTX0xPTkcoeCk7Ci0gICAgICAgIGxvbmcgbWF4ID0gUHlVbmljb2RlX0dldE1heCgpOwotICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gbWF4KSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JXgpIiwgbWF4KzEpOworICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gTUFYX1VOSUNPREUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JXgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfVU5JQ09ERSsxKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtODU1Nyw3NiArODQ2NiwxNjYgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIH0KLS8qIGVuc3VyZSB0aGF0ICpvdXRvYmogaXMgYXQgbGVhc3QgcmVxdWlyZWRzaXplIGNoYXJhY3RlcnMgbG9uZywKLSAgIGlmIG5vdCByZWFsbG9jYXRlIGFuZCBhZGp1c3QgdmFyaW91cyBzdGF0ZSB2YXJpYWJsZXMuCi0gICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvciAqLworCisvKiBsb29rdXAgdGhlIGNoYXJhY3Rlciwgd3JpdGUgdGhlIHJlc3VsdCBpbnRvIHRoZSB3cml0ZXIuCisgICBSZXR1cm4gMSBpZiB0aGUgcmVzdWx0IHdhcyB3cml0dGVuIGludG8gdGhlIHdyaXRlciwgcmV0dXJuIDAgaWYgdGhlIG1hcHBpbmcKKyAgIHdhcyB1bmRlZmluZWQsIHJhaXNlIGFuIGV4Y2VwdGlvbiByZXR1cm4gLTEgb24gZXJyb3IuICovCiBzdGF0aWMgaW50Ci1jaGFybWFwdHJhbnNsYXRlX21ha2VzcGFjZShQeV9VQ1M0ICoqb3V0b2JqLCBQeV9zc2l6ZV90ICpwc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHJlcXVpcmVkc2l6ZSkKK2NoYXJtYXB0cmFuc2xhdGVfb3V0cHV0KFB5X1VDUzQgY2gsIFB5T2JqZWN0ICptYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewotICAgIFB5X3NzaXplX3Qgb2xkc2l6ZSA9ICpwc2l6ZTsKLSAgICBQeV9VQ1M0ICpuZXdfb3V0b2JqOwotICAgIGlmIChyZXF1aXJlZHNpemUgPiBvbGRzaXplKSB7Ci0gICAgICAgIC8qIGV4cG9uZW50aWFsbHkgb3ZlcmFsbG9jYXRlIHRvIG1pbmltaXplIHJlYWxsb2NhdGlvbnMgKi8KLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA8IDIgKiBvbGRzaXplKQotICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMiAqIG9sZHNpemU7Ci0gICAgICAgIG5ld19vdXRvYmogPSBQeU1lbV9SZWFsbG9jKCpvdXRvYmosIHJlcXVpcmVkc2l6ZSAqIHNpemVvZihQeV9VQ1M0KSk7Ci0gICAgICAgIGlmIChuZXdfb3V0b2JqID09IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICpvdXRvYmogPSBuZXdfb3V0b2JqOwotICAgICAgICAqcHNpemUgPSByZXF1aXJlZHNpemU7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotLyogbG9va3VwIHRoZSBjaGFyYWN0ZXIsIHB1dCB0aGUgcmVzdWx0IGluIHRoZSBvdXRwdXQgc3RyaW5nIGFuZCBhZGp1c3QKLSAgIHZhcmlvdXMgc3RhdGUgdmFyaWFibGVzLiBSZXR1cm4gYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhhdAotICAgd2FzIHB1dCBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBpbiAqcmVzdWx0LCBvciBQeV9Ob25lLCBpZiB0aGUgbWFwcGluZyB3YXMKLSAgIHVuZGVmaW5lZCAoaW4gd2hpY2ggY2FzZSBubyBjaGFyYWN0ZXIgd2FzIHdyaXR0ZW4pLgotICAgVGhlIGNhbGxlZCBtdXN0IGRlY3JlZiByZXN1bHQuCi0gICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4gKi8KLXN0YXRpYyBpbnQKLWNoYXJtYXB0cmFuc2xhdGVfb3V0cHV0KFB5T2JqZWN0ICppbnB1dCwgUHlfc3NpemVfdCBpcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsIFB5X1VDUzQgKipvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpvc2l6ZSwgUHlfc3NpemVfdCAqb3BvcywKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcmVzKQotewotICAgIFB5X1VDUzQgY3VyaW5wID0gUHlVbmljb2RlX1JFQURfQ0hBUihpbnB1dCwgaXBvcyk7Ci0gICAgaWYgKGNoYXJtYXB0cmFuc2xhdGVfbG9va3VwKGN1cmlucCwgbWFwcGluZywgcmVzKSkKKyAgICBQeU9iamVjdCAqaXRlbTsKKworICAgIGlmIChjaGFybWFwdHJhbnNsYXRlX2xvb2t1cChjaCwgbWFwcGluZywgJml0ZW0pKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCpyZXM9PU5VTEwpIHsKKworICAgIGlmIChpdGVtID09IE5VTEwpIHsKICAgICAgICAgLyogbm90IGZvdW5kID0+IGRlZmF1bHQgdG8gMToxIG1hcHBpbmcgKi8KLSAgICAgICAgKCpvdXRwdXQpWygqb3BvcykrK10gPSBjdXJpbnA7Ci0gICAgfQotICAgIGVsc2UgaWYgKCpyZXM9PVB5X05vbmUpCi0gICAgICAgIDsKLSAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2soKnJlcykpIHsKLSAgICAgICAgLyogbm8gb3ZlcmZsb3cgY2hlY2ssIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBzcGFjZSBpcyBlbm91Z2ggKi8KLSAgICAgICAgKCpvdXRwdXQpWygqb3BvcykrK10gPSAoUHlfVUNTNClQeUxvbmdfQVNfTE9ORygqcmVzKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKCpyZXMpKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgcmVwc2l6ZTsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSgqcmVzKSA9PSAtMSkKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgY2gpIDwgMCkgewogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKnJlcyk7Ci0gICAgICAgIGlmIChyZXBzaXplPT0xKSB7Ci0gICAgICAgICAgICAvKiBubyBvdmVyZmxvdyBjaGVjaywgYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIHNwYWNlIGlzIGVub3VnaCAqLwotICAgICAgICAgICAgKCpvdXRwdXQpWygqb3BvcykrK10gPSBQeVVuaWNvZGVfUkVBRF9DSEFSKCpyZXMsIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHJlcHNpemUhPTApIHsKLSAgICAgICAgICAgIC8qIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyICovCi0gICAgICAgICAgICBQeV9zc2l6ZV90IHJlcXVpcmVkc2l6ZSA9ICpvcG9zICsKLSAgICAgICAgICAgICAgICAoUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQpIC0gaXBvcykgKwotICAgICAgICAgICAgICAgIHJlcHNpemUgLSAxOwotICAgICAgICAgICAgUHlfc3NpemVfdCBpOwotICAgICAgICAgICAgaWYgKGNoYXJtYXB0cmFuc2xhdGVfbWFrZXNwYWNlKG91dHB1dCwgb3NpemUsIHJlcXVpcmVkc2l6ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgcmVwc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICgqb3V0cHV0KVsoKm9wb3MpKytdID0gUHlVbmljb2RlX1JFQURfQ0hBUigqcmVzLCBpKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgZWxzZQorCisgICAgaWYgKGl0ZW0gPT0gUHlfTm9uZSkgeworICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChQeUxvbmdfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgbG9uZyBjaCA9IChQeV9VQ1M0KVB5TG9uZ19BU19MT05HKGl0ZW0pOworICAgICAgICAvKiBQeUxvbmdfQVNfTE9ORygpIGNhbm5vdCBmYWlsLCBjaGFybWFwdHJhbnNsYXRlX2xvb2t1cCgpIGFscmVhZHkKKyAgICAgICAgICAgdXNlZCBpdCAqLworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCBjaCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhpdGVtKSkgeworICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIGl0ZW0pIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZmFzdF90cmFuc2xhdGVfbG9va3VwKFB5T2JqZWN0ICptYXBwaW5nLCBQeV9VQ1MxIGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTMSAqdHJhbnNsYXRlKQoreworICAgIFB5T2JqZWN0ICppdGVtID0gTlVMTDsKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIGlmIChjaGFybWFwdHJhbnNsYXRlX2xvb2t1cChjaCwgbWFwcGluZywgJml0ZW0pKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoaXRlbSA9PSBQeV9Ob25lKSB7CisgICAgICAgIC8qIGRlbGV0aW9uICovCisgICAgICAgIHRyYW5zbGF0ZVtjaF0gPSAweGZlOworICAgIH0KKyAgICBlbHNlIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgLyogbm90IGZvdW5kID0+IGRlZmF1bHQgdG8gMToxIG1hcHBpbmcgKi8KKyAgICAgICAgdHJhbnNsYXRlW2NoXSA9IGNoOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgIGxvbmcgcmVwbGFjZSA9IFB5TG9uZ19BU19MT05HKGl0ZW0pOworICAgICAgICAvKiBQeUxvbmdfQVNfTE9ORygpIGNhbm5vdCBmYWlsLCBjaGFybWFwdHJhbnNsYXRlX2xvb2t1cCgpIGFscmVhZHkKKyAgICAgICAgICAgdXNlZCBpdCAqLworICAgICAgICBpZiAoMTI3IDwgcmVwbGFjZSkgeworICAgICAgICAgICAgLyogaW52YWxpZCBjaGFyYWN0ZXIgb3IgY2hhcmFjdGVyIG91dHNpZGUgQVNDSUk6CisgICAgICAgICAgICAgICBza2lwIHRoZSBmYXN0IHRyYW5zbGF0ZSAqLworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIHRyYW5zbGF0ZVtjaF0gPSAoUHlfVUNTMSlyZXBsYWNlOworICAgIH0KKyAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgUHlfVUNTNCByZXBsYWNlOworCisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaXRlbSkgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSkgIT0gMSkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICByZXBsYWNlID0gUHlVbmljb2RlX1JFQURfQ0hBUihpdGVtLCAwKTsKKyAgICAgICAgaWYgKHJlcGxhY2UgPiAxMjcpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIHRyYW5zbGF0ZVtjaF0gPSAoUHlfVUNTMSlyZXBsYWNlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogbm90IE5vbmUsIE5VTEwsIGxvbmcgb3IgdW5pY29kZSAqLworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHJldCA9IDE7CisKKyAgZXhpdDoKKyAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogRmFzdCBwYXRoIGZvciBhc2NpaSA9PiBhc2NpaSB0cmFuc2xhdGlvbi4gUmV0dXJuIDEgaWYgdGhlIHdob2xlIHN0cmluZworICAgd2FzIHRyYW5zbGF0ZWQgaW50byB3cml0ZXIsIHJldHVybiAwIGlmIHRoZSBpbnB1dCBzdHJpbmcgd2FzIHBhcnRpYWxseQorICAgdHJhbnNsYXRlZCBpbnRvIHdyaXRlciwgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zhc3RfdHJhbnNsYXRlKFB5T2JqZWN0ICppbnB1dCwgUHlPYmplY3QgKm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgaW50IGlnbm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqaW5wdXRfcG9zKQoreworICAgIFB5X1VDUzEgYXNjaWlfdGFibGVbMTI4XSwgY2gsIGNoMjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBQeV9VQ1MxICppbiwgKmVuZCwgKm91dDsKKyAgICBpbnQgcmVzID0gMDsKKworICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGlucHV0KTsKKworICAgIG1lbXNldChhc2NpaV90YWJsZSwgMHhmZiwgMTI4KTsKKworICAgIGluID0gUHlVbmljb2RlXzFCWVRFX0RBVEEoaW5wdXQpOworICAgIGVuZCA9IGluICsgbGVuOworCisgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXItPmJ1ZmZlcikpOworICAgIGFzc2VydChQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcikgPT0gbGVuKTsKKyAgICBvdXQgPSBQeVVuaWNvZGVfMUJZVEVfREFUQSh3cml0ZXItPmJ1ZmZlcik7CisKKyAgICBmb3IgKDsgaW4gPCBlbmQ7IGluKyspIHsKKyAgICAgICAgY2ggPSAqaW47CisgICAgICAgIGNoMiA9IGFzY2lpX3RhYmxlW2NoXTsKKyAgICAgICAgaWYgKGNoMiA9PSAweGZmKSB7CisgICAgICAgICAgICBpbnQgdHJhbnNsYXRlID0gdW5pY29kZV9mYXN0X3RyYW5zbGF0ZV9sb29rdXAobWFwcGluZywgY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjaWlfdGFibGUpOworICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZSA9PSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGNoMiA9IGFzY2lpX3RhYmxlW2NoXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2gyID09IDB4ZmUpIHsKKyAgICAgICAgICAgIGlmIChpZ25vcmUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KGNoMiA8IDEyOCk7CisgICAgICAgICpvdXQgPSBjaDI7CisgICAgICAgIG91dCsrOworICAgIH0KKyAgICByZXMgPSAxOworCitleGl0OgorICAgIHdyaXRlci0+cG9zID0gb3V0IC0gUHlVbmljb2RlXzFCWVRFX0RBVEEod3JpdGVyLT5idWZmZXIpOworICAgICppbnB1dF9wb3MgPSBpbiAtIFB5VW5pY29kZV8xQllURV9EQVRBKGlucHV0KTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBQeU9iamVjdCAqCkBAIC04NjM1LDIyICs4NjM0LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIC8qIGlucHV0IG9iamVjdCAqLwotICAgIGNoYXIgKmlkYXRhOworICAgIGNoYXIgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBzaXplLCBpOwogICAgIGludCBraW5kOwogICAgIC8qIG91dHB1dCBidWZmZXIgKi8KLSAgICBQeV9VQ1M0ICpvdXRwdXQgPSBOVUxMOwotICAgIFB5X3NzaXplX3Qgb3NpemU7Ci0gICAgUHlPYmplY3QgKnJlczsKLSAgICAvKiBjdXJyZW50IG91dHB1dCBwb3NpdGlvbiAqLwotICAgIFB5X3NzaXplX3Qgb3BvczsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKKyAgICAvKiBlcnJvciBoYW5kbGVyICovCiAgICAgY2hhciAqcmVhc29uID0gImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IjsKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKLSAgICAvKiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIGlzIHVzZWQgZm9yIGNhY2hpbmcgc3RyaW5nIGNvbXBhcmlzb25zCi0gICAgICogLTE9bm90IGluaXRpYWxpemVkLCAwPXVua25vd24sIDE9c3RyaWN0LCAyPXJlcGxhY2UsCi0gICAgICogMz1pZ25vcmUsIDQ9eG1sY2hhcnJlZnJlcGxhY2UgKi8KLSAgICBpbnQga25vd25fZXJyb3JIYW5kbGVyID0gLTE7CisgICAgaW50IGlnbm9yZTsKKyAgICBpbnQgcmVzOwogCiAgICAgaWYgKG1hcHBpbmcgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwpAQCAtODY1OSwxMCArODY1Myw5IEBACiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGlucHV0KSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWRhdGEgPSAoY2hhciopUHlVbmljb2RlX0RBVEEoaW5wdXQpOworICAgIGRhdGEgPSAoY2hhciopUHlVbmljb2RlX0RBVEEoaW5wdXQpOwogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChpbnB1dCk7CiAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGlucHV0KTsKLSAgICBpID0gMDsKIAogICAgIGlmIChzaXplID09IDApIHsKICAgICAgICAgUHlfSU5DUkVGKGlucHV0KTsKQEAgLTg2NzEsMTIxICs4NjY0LDg3IEBACiAKICAgICAvKiBhbGxvY2F0ZSBlbm91Z2ggZm9yIGEgc2ltcGxlIDE6MSB0cmFuc2xhdGlvbiB3aXRob3V0CiAgICAgICAgcmVwbGFjZW1lbnRzLCBpZiB3ZSBuZWVkIG1vcmUsIHdlJ2xsIHJlc2l6ZSAqLwotICAgIG9zaXplID0gc2l6ZTsKLSAgICBvdXRwdXQgPSBQeU1lbV9ORVcoUHlfVUNTNCwgb3NpemUpOwotICAgIG9wb3MgPSAwOwotICAgIGlmIChvdXRwdXQgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHNpemUsIDEyNykgPT0gLTEpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgIGlnbm9yZSA9IChlcnJvcnMgIT0gTlVMTCAmJiBzdHJjbXAoZXJyb3JzLCAiaWdub3JlIikgPT0gMCk7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGlucHV0KSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSShpbnB1dCkpIHsKKyAgICAgICAgcmVzID0gdW5pY29kZV9mYXN0X3RyYW5zbGF0ZShpbnB1dCwgbWFwcGluZywgJndyaXRlciwgaWdub3JlLCAmaSk7CisgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzID09IDEpCisgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpID0gMDsKICAgICB9CiAKICAgICB3aGlsZSAoaTxzaXplKSB7CiAgICAgICAgIC8qIHRyeSB0byBlbmNvZGUgaXQgKi8KLSAgICAgICAgUHlPYmplY3QgKnggPSBOVUxMOwotICAgICAgICBpZiAoY2hhcm1hcHRyYW5zbGF0ZV9vdXRwdXQoaW5wdXQsIGksIG1hcHBpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHV0LCAmb3NpemUsICZvcG9zLCAmeCkpIHsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoeCk7Ci0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfWERFQ1JFRih4KTsKLSAgICAgICAgaWYgKHghPVB5X05vbmUpIC8qIGl0IHdvcmtlZCA9PiBhZGp1c3QgaW5wdXQgcG9pbnRlciAqLwotICAgICAgICAgICAgKytpOwotICAgICAgICBlbHNlIHsgLyogdW50cmFuc2xhdGFibGUgY2hhcmFjdGVyICovCi0gICAgICAgICAgICBQeU9iamVjdCAqcmVwdW5pY29kZSA9IE5VTEw7IC8qIGluaXRpYWxpemUgdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLwotICAgICAgICAgICAgUHlfc3NpemVfdCByZXBzaXplOwotICAgICAgICAgICAgUHlfc3NpemVfdCBuZXdwb3M7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHVuaTI7Ci0gICAgICAgICAgICAvKiBzdGFydHBvcyBmb3IgY29sbGVjdGluZyB1bnRyYW5zbGF0YWJsZSBjaGFycyAqLwotICAgICAgICAgICAgUHlfc3NpemVfdCBjb2xsc3RhcnQgPSBpOwotICAgICAgICAgICAgUHlfc3NpemVfdCBjb2xsZW5kID0gaSsxOwotICAgICAgICAgICAgUHlfc3NpemVfdCBjb2xsOworICAgICAgICBpbnQgdHJhbnNsYXRlOworICAgICAgICBQeU9iamVjdCAqcmVwdW5pY29kZSA9IE5VTEw7IC8qIGluaXRpYWxpemUgdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLworICAgICAgICBQeV9zc2l6ZV90IG5ld3BvczsKKyAgICAgICAgLyogc3RhcnRwb3MgZm9yIGNvbGxlY3RpbmcgdW50cmFuc2xhdGFibGUgY2hhcnMgKi8KKyAgICAgICAgUHlfc3NpemVfdCBjb2xsc3RhcnQ7CisgICAgICAgIFB5X3NzaXplX3QgY29sbGVuZDsKKyAgICAgICAgUHlfVUNTNCBjaDsKIAotICAgICAgICAgICAgLyogZmluZCBhbGwgdW50cmFuc2xhdGFibGUgY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgd2hpbGUgKGNvbGxlbmQgPCBzaXplKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYXJtYXB0cmFuc2xhdGVfbG9va3VwKFB5VW5pY29kZV9SRUFEKGtpbmQsaWRhdGEsIGNvbGxlbmQpLCBtYXBwaW5nLCAmeCkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIGlmICh4IT1QeV9Ob25lKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICArK2NvbGxlbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBjYWNoZSBjYWxsYmFjayBuYW1lIGxvb2t1cAotICAgICAgICAgICAgICogKGlmIG5vdCBkb25lIHlldCwgaS5lLiBpdCdzIHRoZSBmaXJzdCBlcnJvcikgKi8KLSAgICAgICAgICAgIGlmIChrbm93bl9lcnJvckhhbmRsZXI9PS0xKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChlcnJvcnM9PU5VTEwpIHx8ICghc3RyY21wKGVycm9ycywgInN0cmljdCIpKSkKLSAgICAgICAgICAgICAgICAgICAga25vd25fZXJyb3JIYW5kbGVyID0gMTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGVycm9ycywgInJlcGxhY2UiKSkKLSAgICAgICAgICAgICAgICAgICAga25vd25fZXJyb3JIYW5kbGVyID0gMjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKGVycm9ycywgImlnbm9yZSIpKQotICAgICAgICAgICAgICAgICAgICBrbm93bl9lcnJvckhhbmRsZXIgPSAzOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoZXJyb3JzLCAieG1sY2hhcnJlZnJlcGxhY2UiKSkKLSAgICAgICAgICAgICAgICAgICAga25vd25fZXJyb3JIYW5kbGVyID0gNDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGtub3duX2Vycm9ySGFuZGxlciA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzd2l0Y2ggKGtub3duX2Vycm9ySGFuZGxlcikgewotICAgICAgICAgICAgY2FzZSAxOiAvKiBzdHJpY3QgKi8KLSAgICAgICAgICAgICAgICBtYWtlX3RyYW5zbGF0ZV9leGNlcHRpb24oJmV4YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsIGNvbGxzdGFydCwgY29sbGVuZCwgcmVhc29uKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhjICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIFB5Q29kZWNfU3RyaWN0RXJyb3JzKGV4Yyk7CisgICAgICAgIGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgIHRyYW5zbGF0ZSA9IGNoYXJtYXB0cmFuc2xhdGVfb3V0cHV0KGNoLCBtYXBwaW5nLCAmd3JpdGVyKTsKKyAgICAgICAgaWYgKHRyYW5zbGF0ZSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICAgICAgaWYgKHRyYW5zbGF0ZSAhPSAwKSB7CisgICAgICAgICAgICAvKiBpdCB3b3JrZWQgPT4gYWRqdXN0IGlucHV0IHBvaW50ZXIgKi8KKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyogdW50cmFuc2xhdGFibGUgY2hhcmFjdGVyICovCisgICAgICAgIGNvbGxzdGFydCA9IGk7CisgICAgICAgIGNvbGxlbmQgPSBpKzE7CisKKyAgICAgICAgLyogZmluZCBhbGwgdW50cmFuc2xhdGFibGUgY2hhcmFjdGVycyAqLworICAgICAgICB3aGlsZSAoY29sbGVuZCA8IHNpemUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp4OworICAgICAgICAgICAgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBjb2xsZW5kKTsKKyAgICAgICAgICAgIGlmIChjaGFybWFwdHJhbnNsYXRlX2xvb2t1cChjaCwgbWFwcGluZywgJngpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIGNhc2UgMjogLyogcmVwbGFjZSAqLwotICAgICAgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHNwYWNlLCB0aGlzIGlzIGEgMToxIHJlcGxhY2VtZW50ICovCi0gICAgICAgICAgICAgICAgZm9yIChjb2xsID0gY29sbHN0YXJ0OyBjb2xsPGNvbGxlbmQ7IGNvbGwrKykKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0W29wb3MrK10gPSAnPyc7Ci0gICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBjYXNlIDM6IC8qIGlnbm9yZSAqLwotICAgICAgICAgICAgICAgIGkgPSBjb2xsZW5kOworICAgICAgICAgICAgUHlfWERFQ1JFRih4KTsKKyAgICAgICAgICAgIGlmICh4ICE9IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDQ6IC8qIHhtbGNoYXJyZWZyZXBsYWNlICovCi0gICAgICAgICAgICAgICAgLyogZ2VuZXJhdGUgcmVwbGFjZW1lbnQgKHRlbXBvcmFyaWx5IChtaXMpdXNlcyBpKSAqLwotICAgICAgICAgICAgICAgIGZvciAoaSA9IGNvbGxzdGFydDsgaSA8IGNvbGxlbmQ7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZmZlclsyKzI5KzErMV07Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwOwotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiYjJWQ7IiwgUHlVbmljb2RlX1JFQUQoa2luZCwgaWRhdGEsIGkpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJtYXB0cmFuc2xhdGVfbWFrZXNwYWNlKCZvdXRwdXQsICZvc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wb3Mrc3RybGVuKGJ1ZmZlcikrKHNpemUtY29sbGVuZCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGNwID0gYnVmZmVyOyAqY3A7ICsrY3ApCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbb3BvcysrXSA9ICpjcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaSA9IGNvbGxlbmQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlcHVuaWNvZGUgPSB1bmljb2RlX3RyYW5zbGF0ZV9jYWxsX2Vycm9yaGFuZGxlcihlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiwgaW5wdXQsICZleGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxzdGFydCwgY29sbGVuZCwgJm5ld3Bvcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcHVuaWNvZGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcHVuaWNvZGUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIGdlbmVyYXRlIHJlcGxhY2VtZW50ICAqLwotICAgICAgICAgICAgICAgIHJlcHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXB1bmljb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY2hhcm1hcHRyYW5zbGF0ZV9tYWtlc3BhY2UoJm91dHB1dCwgJm9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcG9zK3JlcHNpemUrKHNpemUtY29sbGVuZCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXB1bmljb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKHVuaTIgPSAwOyByZXBzaXplLS0+MDsgKyt1bmkyKQotICAgICAgICAgICAgICAgICAgICBvdXRwdXRbb3BvcysrXSA9IFB5VW5pY29kZV9SRUFEX0NIQVIocmVwdW5pY29kZSwgdW5pMik7Ci0gICAgICAgICAgICAgICAgaSA9IG5ld3BvczsKKyAgICAgICAgICAgICsrY29sbGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpZ25vcmUpIHsKKyAgICAgICAgICAgIGkgPSBjb2xsZW5kOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVwdW5pY29kZSA9IHVuaWNvZGVfdHJhbnNsYXRlX2NhbGxfZXJyb3JoYW5kbGVyKGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24sIGlucHV0LCAmZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxzdGFydCwgY29sbGVuZCwgJm5ld3Bvcyk7CisgICAgICAgICAgICBpZiAocmVwdW5pY29kZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHJlcHVuaWNvZGUpIDwgMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXB1bmljb2RlKTsKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmVwdW5pY29kZSk7CisgICAgICAgICAgICBpID0gbmV3cG9zOwogICAgICAgICB9CiAgICAgfQotICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tS2luZEFuZERhdGEoUHlVbmljb2RlXzRCWVRFX0tJTkQsIG91dHB1dCwgb3Bvcyk7Ci0gICAgaWYgKCFyZXMpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBQeU1lbV9GcmVlKG91dHB1dCk7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5TWVtX0ZyZWUob3V0cHV0KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTg4ODcsNyArODg0Niw3IEBACiAKICAgICBtYXhjaGFyID0gMTI3OwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBQeV9VTklDT0RFIGNoID0gc1tpXTsKKyAgICAgICAgUHlfVUNTNCBjaCA9IHNbaV07CiAgICAgICAgIGlmIChjaCA+IDEyNykgewogICAgICAgICAgICAgaW50IGRlY2ltYWwgPSBQeV9VTklDT0RFX1RPREVDSU1BTChjaCk7CiAgICAgICAgICAgICBpZiAoZGVjaW1hbCA+PSAwKQpAQCAtODkwNCw3ICs4ODYzLDcgQEAKICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoZGVjaW1hbCk7CiAgICAgLyogSXRlcmF0ZSBvdmVyIGNvZGUgcG9pbnRzICovCiAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgY2ggPSBzW2ldOworICAgICAgICBQeV9VQ1M0IGNoID0gc1tpXTsKICAgICAgICAgaWYgKGNoID4gMTI3KSB7CiAgICAgICAgICAgICBpbnQgZGVjaW1hbCA9IFB5X1VOSUNPREVfVE9ERUNJTUFMKGNoKTsKICAgICAgICAgICAgIGlmIChkZWNpbWFsID49IDApCkBAIC04OTg1LDM1ICs4OTQ0LDYxIEBACiAKIC8qIC0tLSBIZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKiBoZWxwZXIgbWFjcm8gdG8gZml4dXAgc3RhcnQvZW5kIHNsaWNlIHZhbHVlcyAqLworI2RlZmluZSBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4pICAgICAgICAgXAorICAgIGlmIChlbmQgPiBsZW4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbmQgPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKGVuZCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbmQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZW5kIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZW5kID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChzdGFydCA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGFydCArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoc3RhcnQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RhcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwogc3RhdGljIFB5X3NzaXplX3QKIGFueV9maW5kX3NsaWNlKGludCBkaXJlY3Rpb24sIFB5T2JqZWN0KiBzMSwgUHlPYmplY3QqIHMyLAogICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwKICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZW5kKQogewotICAgIGludCBraW5kMSwga2luZDIsIGtpbmQ7CisgICAgaW50IGtpbmQxLCBraW5kMjsKICAgICB2b2lkICpidWYxLCAqYnVmMjsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIHJlc3VsdDsKIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoczEpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoczIpOwotICAgIGtpbmQgPSBraW5kMSA+IGtpbmQyID8ga2luZDEgOiBraW5kMjsKLSAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoczEpOwotICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzMik7Ci0gICAgaWYgKGtpbmQxICE9IGtpbmQpCi0gICAgICAgIGJ1ZjEgPSBfUHlVbmljb2RlX0FzS2luZChzMSwga2luZCk7Ci0gICAgaWYgKCFidWYxKQotICAgICAgICByZXR1cm4gLTI7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpCi0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzMiwga2luZCk7Ci0gICAgaWYgKCFidWYyKSB7Ci0gICAgICAgIGlmIChraW5kMSAhPSBraW5kKSBQeU1lbV9GcmVlKGJ1ZjEpOwotICAgICAgICByZXR1cm4gLTI7Ci0gICAgfQorICAgIGlmIChraW5kMSA8IGtpbmQyKQorICAgICAgICByZXR1cm4gLTE7CisKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoczEpOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzMik7CisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuMSk7CisgICAgaWYgKGVuZCAtIHN0YXJ0IDwgbGVuMikKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHMxKTsKKyAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoczIpOworICAgIGlmIChsZW4yID09IDEpIHsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQyLCBidWYyLCAwKTsKKyAgICAgICAgcmVzdWx0ID0gZmluZGNoYXIoKGNvbnN0IGNoYXIgKilidWYxICsga2luZDEqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQxLCBlbmQgLSBzdGFydCwgY2gsIGRpcmVjdGlvbik7CisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGFydCArIHJlc3VsdDsKKyAgICB9CisKKyAgICBpZiAoa2luZDIgIT0ga2luZDEpIHsKKyAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHMyLCBraW5kMSk7CisgICAgICAgIGlmICghYnVmMikKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICB9CiAKICAgICBpZiAoZGlyZWN0aW9uID4gMCkgewotICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgc3dpdGNoIChraW5kMSkgewogICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgogICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSShzMSkgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHMyKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBhc2NpaWxpYl9maW5kX3NsaWNlKGJ1ZjEsIGxlbjEsIGJ1ZjIsIGxlbjIsIHN0YXJ0LCBlbmQpOwpAQCAtOTAzMSw3ICs5MDE2LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIHN3aXRjaCAoa2luZDEpIHsKICAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoczEpICYmIFB5VW5pY29kZV9JU19BU0NJSShzMikpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXNjaWlsaWJfcmZpbmRfc2xpY2UoYnVmMSwgbGVuMSwgYnVmMiwgbGVuMiwgc3RhcnQsIGVuZCk7CkBAIC05MDQ5LDkgKzkwMzQsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGtpbmQxICE9IGtpbmQpCi0gICAgICAgIFB5TWVtX0ZyZWUoYnVmMSk7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpCisgICAgaWYgKGtpbmQyICE9IGtpbmQxKQogICAgICAgICBQeU1lbV9GcmVlKGJ1ZjIpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTkxNDEsMjEgKzkxMjQsNiBAQAogfQogCiAKLS8qIGhlbHBlciBtYWNybyB0byBmaXh1cCBzdGFydC9lbmQgc2xpY2UgdmFsdWVzICovCi0jZGVmaW5lIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbikgICAgICAgICBcCi0gICAgaWYgKGVuZCA+IGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVuZCA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoZW5kIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVuZCArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChlbmQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHN0YXJ0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0YXJ0ICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChzdGFydCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotCiBQeV9zc2l6ZV90CiBQeVVuaWNvZGVfQ291bnQoUHlPYmplY3QgKnN0ciwKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3Vic3RyLApAQCAtOTE2NSw3ICs5MTMzLDcgQEAKICAgICBQeV9zc2l6ZV90IHJlc3VsdDsKICAgICBQeU9iamVjdCogc3RyX29iajsKICAgICBQeU9iamVjdCogc3ViX29iajsKLSAgICBpbnQga2luZDEsIGtpbmQyLCBraW5kOworICAgIGludCBraW5kMSwga2luZDI7CiAgICAgdm9pZCAqYnVmMSA9IE5VTEwsICpidWYyID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAKQEAgLTkxODUsMjQgKzkxNTMsMzAgQEAKIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc3RyX29iaik7CiAgICAga2luZDIgPSBQeVVuaWNvZGVfS0lORChzdWJfb2JqKTsKLSAgICBraW5kID0ga2luZDE7Ci0gICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHN0cl9vYmopOwotICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzdWJfb2JqKTsKLSAgICBpZiAoa2luZDIgIT0ga2luZCkgewotICAgICAgICBpZiAoa2luZDIgPiBraW5kKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc3ViX29iaik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc3RyX29iaik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3ViX29iaiwga2luZCk7CisgICAgaWYgKGtpbmQxIDwga2luZDIpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1Yl9vYmopOworICAgICAgICBQeV9ERUNSRUYoc3RyX29iaik7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIWJ1ZjIpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKKwogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJfb2JqKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3ViX29iaik7Ci0KICAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4xKTsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBpZiAoZW5kIC0gc3RhcnQgPCBsZW4yKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJfb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKHN0cl9vYmopOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc3RyX29iaik7CisgICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1Yl9vYmopOworICAgIGlmIChraW5kMiAhPSBraW5kMSkgeworICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3ViX29iaiwga2luZDEpOworICAgICAgICBpZiAoIWJ1ZjIpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgc3dpdGNoIChraW5kMSkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoc3RyX29iaikgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHN1Yl9vYmopKQogICAgICAgICAgICAgcmVzdWx0ID0gYXNjaWlsaWJfY291bnQoCkBAIC05MjM0LDE0ICs5MjA4LDE0IEBACiAgICAgUHlfREVDUkVGKHN1Yl9vYmopOwogICAgIFB5X0RFQ1JFRihzdHJfb2JqKTsKIAotICAgIGlmIChraW5kMiAhPSBraW5kKQorICAgIGlmIChraW5kMiAhPSBraW5kMSkKICAgICAgICAgUHlNZW1fRnJlZShidWYyKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiAgIG9uRXJyb3I6CiAgICAgUHlfREVDUkVGKHN1Yl9vYmopOwogICAgIFB5X0RFQ1JFRihzdHJfb2JqKTsKLSAgICBpZiAoa2luZDIgIT0ga2luZCAmJiBidWYyKQorICAgIGlmIChraW5kMiAhPSBraW5kMSAmJiBidWYyKQogICAgICAgICBQeU1lbV9GcmVlKGJ1ZjIpOwogICAgIHJldHVybiAtMTsKIH0KQEAgLTkyOTQsNiArOTI2OCw4IEBACiAgICAgfQogICAgIGlmIChlbmQgPiBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpKQogICAgICAgICBlbmQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOworICAgIGlmIChzdGFydCA+PSBlbmQpCisgICAgICAgIHJldHVybiAtMTsKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyKTsKICAgICByZXN1bHQgPSBmaW5kY2hhcihQeVVuaWNvZGVfMUJZVEVfREFUQShzdHIpICsga2luZCpzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICBraW5kLCBlbmQtc3RhcnQsIGNoLCBkaXJlY3Rpb24pOwpAQCAtOTMyMiwxNCArOTI5OCwxNCBAQAogICAgICAgICBQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHN1YnN0cmluZykgPT0gMCkKLSAgICAgICAgcmV0dXJuIDE7Ci0KICAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKSk7CiAgICAgZW5kIC09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN1YnN0cmluZyk7CiAgICAgaWYgKGVuZCA8IHN0YXJ0KQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdWJzdHJpbmcpID09IDApCisgICAgICAgIHJldHVybiAxOworCiAgICAga2luZF9zZWxmID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CiAgICAgZGF0YV9zZWxmID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAga2luZF9zdWIgPSBQeVVuaWNvZGVfS0lORChzdWJzdHJpbmcpOwpAQCAtOTM1Myw3ICs5MzI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdWJzdHJpbmcpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQoc3Vic3RyaW5nKSk7CiAgICAgICAgIH0KLSAgICAgICAgLyogb3RoZXJ3aXNlIHdlIGhhdmUgdG8gY29tcGFyZSBlYWNoIGNoYXJhY3RlciBieSBmaXJzdCBhY2Nlc2luZyBpdCAqLworICAgICAgICAvKiBvdGhlcndpc2Ugd2UgaGF2ZSB0byBjb21wYXJlIGVhY2ggY2hhcmFjdGVyIGJ5IGZpcnN0IGFjY2Vzc2luZyBpdCAqLwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIFdlIGRvIG5vdCBuZWVkIHRvIGNvbXBhcmUgMCBhbmQgbGVuKHN1YnN0cmluZyktMSBiZWNhdXNlCiAgICAgICAgICAgICAgICB0aGUgaWYgc3RhdGVtZW50IGFib3ZlIGVuc3VyZWQgYWxyZWFkeSB0aGF0IHRoZXkgYXJlIGVxdWFsCkBAIC05NDgxLDcgKzk0NTcsNyBAQAogewogICAgIFB5X3NzaXplX3QgajsKICAgICBpbnQgZmluYWxfc2lnbWE7Ci0gICAgUHlfVUNTNCBjID0gMDsKKyAgICBQeV9VQ1M0IGMgPSAwOyAgIC8qIGluaXRpYWxpemUgdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLwogICAgIC8qIFUrMDNBMyBpcyBpbiB0aGUgRmluYWxfU2lnbWEgY29udGV4dCB3aGVuLCBpdCBpcyBmb3VuZCBsaWtlIHRoaXM6CiAKICAgICAgXHB7Y2FzZWR9XHB7Y2FzZS1pZ25vcmFibGV9KlUrMDNBMyEoXHB7Y2FzZS1pZ25vcmFibGV9Klxwe2Nhc2VkfSkKQEAgLTEwMDQwLDcgKzEwMDE2LDcgQEAKICAgICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcsCiAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQogewotICAgIGludCBraW5kMSwga2luZDIsIGtpbmQ7CisgICAgaW50IGtpbmQxLCBraW5kMjsKICAgICB2b2lkICpidWYxLCAqYnVmMjsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAgICAgUHlPYmplY3QqIG91dDsKQEAgLTEwMDg0LDIzICsxMDA2MCwyNSBAQAogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN1YnN0cmluZyk7Ci0gICAga2luZCA9IGtpbmQxID4ga2luZDIgPyBraW5kMSA6IGtpbmQyOwotICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKLSAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3Vic3RyaW5nKTsKLSAgICBpZiAoa2luZDEgIT0ga2luZCkKLSAgICAgICAgYnVmMSA9IF9QeVVuaWNvZGVfQXNLaW5kKHNlbGYsIGtpbmQpOwotICAgIGlmICghYnVmMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpCi0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWJzdHJpbmcsIGtpbmQpOwotICAgIGlmICghYnVmMikgewotICAgICAgICBpZiAoa2luZDEgIT0ga2luZCkgUHlNZW1fRnJlZShidWYxKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3Vic3RyaW5nKTsKKyAgICBpZiAoa2luZDEgPCBraW5kMiB8fCBsZW4xIDwgbGVuMikgeworICAgICAgICBvdXQgPSBQeUxpc3RfTmV3KDEpOworICAgICAgICBpZiAob3V0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlfSU5DUkVGKHNlbGYpOworICAgICAgICBQeUxpc3RfU0VUX0lURU0ob3V0LCAwLCBzZWxmKTsKKyAgICAgICAgcmV0dXJuIG91dDsKKyAgICB9CisgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOworICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzdWJzdHJpbmcpOworICAgIGlmIChraW5kMiAhPSBraW5kMSkgeworICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3Vic3RyaW5nLCBraW5kMSk7CisgICAgICAgIGlmICghYnVmMikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIHN3aXRjaCAoa2luZCkgeworICAgIHN3aXRjaCAoa2luZDEpIHsKICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgogICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHNlbGYpICYmIFB5VW5pY29kZV9JU19BU0NJSShzdWJzdHJpbmcpKQogICAgICAgICAgICAgb3V0ID0gYXNjaWlsaWJfc3BsaXQoCkBAIC0xMDEyMCw5ICsxMDA5OCw3IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgb3V0ID0gTlVMTDsKICAgICB9Ci0gICAgaWYgKGtpbmQxICE9IGtpbmQpCi0gICAgICAgIFB5TWVtX0ZyZWUoYnVmMSk7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpCisgICAgaWYgKGtpbmQyICE9IGtpbmQxKQogICAgICAgICBQeU1lbV9GcmVlKGJ1ZjIpOwogICAgIHJldHVybiBvdXQ7CiB9CkBAIC0xMDEzMiw3ICsxMDEwOCw3IEBACiAgICAgICAgUHlPYmplY3QgKnN1YnN0cmluZywKICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQogewotICAgIGludCBraW5kMSwga2luZDIsIGtpbmQ7CisgICAgaW50IGtpbmQxLCBraW5kMjsKICAgICB2b2lkICpidWYxLCAqYnVmMjsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAgICAgUHlPYmplY3QqIG91dDsKQEAgLTEwMTc2LDIzICsxMDE1MiwyNSBAQAogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN1YnN0cmluZyk7Ci0gICAga2luZCA9IGtpbmQxID4ga2luZDIgPyBraW5kMSA6IGtpbmQyOwotICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKLSAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3Vic3RyaW5nKTsKLSAgICBpZiAoa2luZDEgIT0ga2luZCkKLSAgICAgICAgYnVmMSA9IF9QeVVuaWNvZGVfQXNLaW5kKHNlbGYsIGtpbmQpOwotICAgIGlmICghYnVmMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpCi0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWJzdHJpbmcsIGtpbmQpOwotICAgIGlmICghYnVmMikgewotICAgICAgICBpZiAoa2luZDEgIT0ga2luZCkgUHlNZW1fRnJlZShidWYxKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3Vic3RyaW5nKTsKKyAgICBpZiAoa2luZDEgPCBraW5kMiB8fCBsZW4xIDwgbGVuMikgeworICAgICAgICBvdXQgPSBQeUxpc3RfTmV3KDEpOworICAgICAgICBpZiAob3V0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlfSU5DUkVGKHNlbGYpOworICAgICAgICBQeUxpc3RfU0VUX0lURU0ob3V0LCAwLCBzZWxmKTsKKyAgICAgICAgcmV0dXJuIG91dDsKKyAgICB9CisgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOworICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzdWJzdHJpbmcpOworICAgIGlmIChraW5kMiAhPSBraW5kMSkgeworICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3Vic3RyaW5nLCBraW5kMSk7CisgICAgICAgIGlmICghYnVmMikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIHN3aXRjaCAoa2luZCkgeworICAgIHN3aXRjaCAoa2luZDEpIHsKICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgogICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHNlbGYpICYmIFB5VW5pY29kZV9JU19BU0NJSShzdWJzdHJpbmcpKQogICAgICAgICAgICAgb3V0ID0gYXNjaWlsaWJfcnNwbGl0KApAQCAtMTAyMTIsOSArMTAxOTAsNyBAQAogICAgIGRlZmF1bHQ6CiAgICAgICAgIG91dCA9IE5VTEw7CiAgICAgfQotICAgIGlmIChraW5kMSAhPSBraW5kKQotICAgICAgICBQeU1lbV9GcmVlKGJ1ZjEpOwotICAgIGlmIChraW5kMiAhPSBraW5kKQorICAgIGlmIChraW5kMiAhPSBraW5kMSkKICAgICAgICAgUHlNZW1fRnJlZShidWYyKTsKICAgICByZXR1cm4gb3V0OwogfQpAQCAtMTA0MzMsNyArMTA0MDksNyBAQAogICAgICAgICB9CiAgICAgICAgIC8qIG5ld19zaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZikgKyBuICogKFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpIC0KICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSkpKTsgKi8KLSAgICAgICAgaWYgKGxlbjIgPiBsZW4xICYmIGxlbjIgLSBsZW4xID4gKFBZX1NTSVpFX1RfTUFYIC0gc2xlbikgLyBuKSB7CisgICAgICAgIGlmIChsZW4xIDwgbGVuMiAmJiBsZW4yIC0gbGVuMSA+IChQWV9TU0laRV9UX01BWCAtIHNsZW4pIC8gbikgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVwbGFjZSBzdHJpbmcgaXMgdG9vIGxvbmciKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTA4NDIsNyArMTA4MTgsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChsZW4xID4gbGVuMikKICAgICAgICAgICAgIHJldHVybiAxOyAvKiB1bmkgaXMgbG9uZ2VyICovCi0gICAgICAgIGlmIChsZW4yID4gbGVuMSkKKyAgICAgICAgaWYgKGxlbjEgPCBsZW4yKQogICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBzdHIgaXMgbG9uZ2VyICovCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTEwODUwLDcgKzEwODI2LDcgQEAKICAgICAgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaSk7CiAgICAgICAgIC8qIENvbXBhcmUgVW5pY29kZSBzdHJpbmcgYW5kIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IHN0cmluZyAqLwogICAgICAgICBmb3IgKGkgPSAwOyAoY2hyID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpICYmIHN0cltpXTsgaSsrKQotICAgICAgICAgICAgaWYgKGNociAhPSBzdHJbaV0pCisgICAgICAgICAgICBpZiAoY2hyICE9ICh1bnNpZ25lZCBjaGFyKXN0cltpXSkKICAgICAgICAgICAgICAgICByZXR1cm4gKGNociA8ICh1bnNpZ25lZCBjaGFyKShzdHJbaV0pKSA/IC0xIDogMTsKICAgICAgICAgLyogVGhpcyBjaGVjayBrZWVwcyBQeXRob24gc3RyaW5ncyB0aGF0IGVuZCBpbiAnXDAnIGZyb20gY29tcGFyaW5nIGVxdWFsCiAgICAgICAgICB0byBDIHN0cmluZ3MgaWRlbnRpY2FsIHVwIHRvIHRoYXQgcG9pbnQuICovCkBAIC0xMDk1NCwyMyArMTA5MzAsMzUgQEAKIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc3RyKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN1Yik7Ci0gICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHN0cik7Ci0gICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1Yik7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQxKSB7Ci0gICAgICAgIGlmIChraW5kMiA+IGtpbmQxKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHN1Yiwga2luZDEpOwotICAgIH0KLSAgICBpZiAoIWJ1ZjIpIHsKKyAgICBpZiAoa2luZDEgPCBraW5kMikgewogICAgICAgICBQeV9ERUNSRUYoc3ViKTsKICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdWIpOworICAgIGlmIChsZW4xIDwgbGVuMikgeworICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKyAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc3RyKTsKKyAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3ViKTsKKyAgICBpZiAobGVuMiA9PSAxKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kMiwgYnVmMiwgMCk7CisgICAgICAgIHJlc3VsdCA9IGZpbmRjaGFyKChjb25zdCBjaGFyICopYnVmMSwga2luZDEsIGxlbjEsIGNoLCAxKSAhPSAtMTsKKyAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBpZiAoa2luZDIgIT0ga2luZDEpIHsKKyAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHN1Yiwga2luZDEpOworICAgICAgICBpZiAoIWJ1ZjIpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBzd2l0Y2ggKGtpbmQxKSB7CiAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKQEAgLTExMTUxLDExICsxMTEzOSwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfY291bnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOyAgIC8qIGluaXRpYWxpemUgdG8gZml4IGEgY29tcGlsZXIgd2FybmluZyAqLwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBpbnQga2luZDEsIGtpbmQyLCBraW5kOworICAgIGludCBraW5kMSwga2luZDI7CiAgICAgdm9pZCAqYnVmMSwgKmJ1ZjI7CiAgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBpcmVzdWx0OwogCkBAIC0xMTE2NSwyNCArMTExNTMsMjcgQEAKIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CiAgICAga2luZDIgPSBQeVVuaWNvZGVfS0lORChzdWJzdHJpbmcpOwotICAgIGlmIChraW5kMiA+IGtpbmQxKSB7CisgICAgaWYgKGtpbmQxIDwga2luZDIpIHsKICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgfQotICAgIGtpbmQgPSBraW5kMTsKLSAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc2VsZik7Ci0gICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1YnN0cmluZyk7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpCi0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWJzdHJpbmcsIGtpbmQpOwotICAgIGlmICghYnVmMikgewotICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3Vic3RyaW5nKTsKLQogICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbjEpOwotICAgIHN3aXRjaCAoa2luZCkgeworICAgIGlmIChlbmQgLSBzdGFydCA8IGxlbjIpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgfQorICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKKyAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3Vic3RyaW5nKTsKKyAgICBpZiAoa2luZDIgIT0ga2luZDEpIHsKKyAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHN1YnN0cmluZywga2luZDEpOworICAgICAgICBpZiAoIWJ1ZjIpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoIChraW5kMSkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIGlyZXN1bHQgPSB1Y3MxbGliX2NvdW50KAogICAgICAgICAgICAgKChQeV9VQ1MxKilidWYxKSArIHN0YXJ0LCBlbmQgLSBzdGFydCwKQEAgLTExMjA3LDcgKzExMTk4LDcgQEAKIAogICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tU3NpemVfdChpcmVzdWx0KTsKIAotICAgIGlmIChraW5kMiAhPSBraW5kKQorICAgIGlmIChraW5kMiAhPSBraW5kMSkKICAgICAgICAgUHlNZW1fRnJlZShidWYyKTsKIAogICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwpAQCAtMTEzMzksNiArMTEzMzAsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfZmluZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgLyogaW5pdGlhbGl6ZSB2YXJpYWJsZXMgdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLwogICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gMDsKQEAgLTExNDI2LDYgKzExNDE4LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB1bmljb2RlX2luZGV4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICAvKiBpbml0aWFsaXplIHZhcmlhYmxlcyB0byBwcmV2ZW50IGdjYyB3YXJuaW5nICovCiAgICAgUHlfc3NpemVfdCByZXN1bHQ7CiAgICAgUHlPYmplY3QgKnN1YnN0cmluZyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBzdGFydCA9IDA7CkBAIC0xMjUwNCw2ICsxMjQ5Nyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogdW5pY29kZV9yZmluZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgLyogaW5pdGlhbGl6ZSB2YXJpYWJsZXMgdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLwogICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gMDsKQEAgLTEyNTQwLDYgKzEyNTM0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB1bmljb2RlX3JpbmRleChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgLyogaW5pdGlhbGl6ZSB2YXJpYWJsZXMgdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLwogICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gMDsKQEAgLTEyNjU0LDggKzEyNjQ5LDggQEAKICAgICBQeU9iamVjdCogc3RyX29iajsKICAgICBQeU9iamVjdCogc2VwX29iajsKICAgICBQeU9iamVjdCogb3V0OwotICAgIGludCBraW5kMSwga2luZDIsIGtpbmQ7Ci0gICAgdm9pZCAqYnVmMSA9IE5VTEwsICpidWYyID0gTlVMTDsKKyAgICBpbnQga2luZDEsIGtpbmQyOworICAgIHZvaWQgKmJ1ZjEsICpidWYyOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKIAogICAgIHN0cl9vYmogPSBQeVVuaWNvZGVfRnJvbU9iamVjdChzdHJfaW4pOwpAQCAtMTI2NzQsMjEgKzEyNjY5LDI5IEBACiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHN0cl9vYmopOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc2VwX29iaik7Ci0gICAga2luZCA9IFB5X01BWChraW5kMSwga2luZDIpOwotICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzdHJfb2JqKTsKLSAgICBpZiAoa2luZDEgIT0ga2luZCkKLSAgICAgICAgYnVmMSA9IF9QeVVuaWNvZGVfQXNLaW5kKHN0cl9vYmosIGtpbmQpOwotICAgIGlmICghYnVmMSkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzZXBfb2JqKTsKLSAgICBpZiAoa2luZDIgIT0ga2luZCkKLSAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHNlcF9vYmosIGtpbmQpOwotICAgIGlmICghYnVmMikKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJfb2JqKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VwX29iaik7CisgICAgaWYgKGtpbmQxIDwga2luZDIgfHwgbGVuMSA8IGxlbjIpIHsKKyAgICAgICAgX1B5X0lOQ1JFRl9VTklDT0RFX0VNUFRZKCk7CisgICAgICAgIGlmICghdW5pY29kZV9lbXB0eSkKKyAgICAgICAgICAgIG91dCA9IE5VTEw7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgb3V0ID0gUHlUdXBsZV9QYWNrKDMsIHN0cl9vYmosIHVuaWNvZGVfZW1wdHksIHVuaWNvZGVfZW1wdHkpOworICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGVfZW1wdHkpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzZXBfb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKHN0cl9vYmopOworICAgICAgICByZXR1cm4gb3V0OworICAgIH0KKyAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc3RyX29iaik7CisgICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHNlcF9vYmopOworICAgIGlmIChraW5kMiAhPSBraW5kMSkgeworICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc2VwX29iaiwga2luZDEpOworICAgICAgICBpZiAoIWJ1ZjIpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQogCi0gICAgc3dpdGNoIChraW5kKSB7CisgICAgc3dpdGNoIChraW5kMSkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoc3RyX29iaikgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHNlcF9vYmopKQogICAgICAgICAgICAgb3V0ID0gYXNjaWlsaWJfcGFydGl0aW9uKHN0cl9vYmosIGJ1ZjEsIGxlbjEsIHNlcF9vYmosIGJ1ZjIsIGxlbjIpOwpAQCAtMTI3MDgsMTggKzEyNzExLDE0IEBACiAKICAgICBQeV9ERUNSRUYoc2VwX29iaik7CiAgICAgUHlfREVDUkVGKHN0cl9vYmopOwotICAgIGlmIChraW5kMSAhPSBraW5kKQotICAgICAgICBQeU1lbV9GcmVlKGJ1ZjEpOwotICAgIGlmIChraW5kMiAhPSBraW5kKQorICAgIGlmIChraW5kMiAhPSBraW5kMSkKICAgICAgICAgUHlNZW1fRnJlZShidWYyKTsKIAogICAgIHJldHVybiBvdXQ7CiAgIG9uRXJyb3I6CiAgICAgUHlfREVDUkVGKHNlcF9vYmopOwogICAgIFB5X0RFQ1JFRihzdHJfb2JqKTsKLSAgICBpZiAoa2luZDEgIT0ga2luZCAmJiBidWYxKQotICAgICAgICBQeU1lbV9GcmVlKGJ1ZjEpOwotICAgIGlmIChraW5kMiAhPSBraW5kICYmIGJ1ZjIpCisgICAgaWYgKGtpbmQyICE9IGtpbmQxICYmIGJ1ZjIpCiAgICAgICAgIFB5TWVtX0ZyZWUoYnVmMik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0xMjczMSw4ICsxMjczMCw4IEBACiAgICAgUHlPYmplY3QqIHN0cl9vYmo7CiAgICAgUHlPYmplY3QqIHNlcF9vYmo7CiAgICAgUHlPYmplY3QqIG91dDsKLSAgICBpbnQga2luZDEsIGtpbmQyLCBraW5kOwotICAgIHZvaWQgKmJ1ZjEgPSBOVUxMLCAqYnVmMiA9IE5VTEw7CisgICAgaW50IGtpbmQxLCBraW5kMjsKKyAgICB2b2lkICpidWYxLCAqYnVmMjsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAKICAgICBzdHJfb2JqID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyX2luKTsKQEAgLTEyNzQ2LDIxICsxMjc0NSwyOSBAQAogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHJfb2JqKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHNlcF9vYmopOwotICAgIGtpbmQgPSBQeV9NQVgoa2luZDEsIGtpbmQyKTsKLSAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc3RyX29iaik7Ci0gICAgaWYgKGtpbmQxICE9IGtpbmQpCi0gICAgICAgIGJ1ZjEgPSBfUHlVbmljb2RlX0FzS2luZChzdHJfb2JqLCBraW5kKTsKLSAgICBpZiAoIWJ1ZjEpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc2VwX29iaik7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpCi0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzZXBfb2JqLCBraW5kKTsKLSAgICBpZiAoIWJ1ZjIpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyX29iaik7CiAgICAgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlcF9vYmopOworICAgIGlmIChraW5kMSA8IGtpbmQyIHx8IGxlbjEgPCBsZW4yKSB7CisgICAgICAgIF9QeV9JTkNSRUZfVU5JQ09ERV9FTVBUWSgpOworICAgICAgICBpZiAoIXVuaWNvZGVfZW1wdHkpCisgICAgICAgICAgICBvdXQgPSBOVUxMOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG91dCA9IFB5VHVwbGVfUGFjaygzLCB1bmljb2RlX2VtcHR5LCB1bmljb2RlX2VtcHR5LCBzdHJfb2JqKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlX2VtcHR5KTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc2VwX29iaik7CisgICAgICAgIFB5X0RFQ1JFRihzdHJfb2JqKTsKKyAgICAgICAgcmV0dXJuIG91dDsKKyAgICB9CisgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHN0cl9vYmopOworICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzZXBfb2JqKTsKKyAgICBpZiAoa2luZDIgIT0ga2luZDEpIHsKKyAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHNlcF9vYmosIGtpbmQxKTsKKyAgICAgICAgaWYgKCFidWYyKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KIAotICAgIHN3aXRjaCAoa2luZCkgeworICAgIHN3aXRjaCAoa2luZDEpIHsKICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgogICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHN0cl9vYmopICYmIFB5VW5pY29kZV9JU19BU0NJSShzZXBfb2JqKSkKICAgICAgICAgICAgIG91dCA9IGFzY2lpbGliX3JwYXJ0aXRpb24oc3RyX29iaiwgYnVmMSwgbGVuMSwgc2VwX29iaiwgYnVmMiwgbGVuMik7CkBAIC0xMjc4MCwxOCArMTI3ODcsMTQgQEAKIAogICAgIFB5X0RFQ1JFRihzZXBfb2JqKTsKICAgICBQeV9ERUNSRUYoc3RyX29iaik7Ci0gICAgaWYgKGtpbmQxICE9IGtpbmQpCi0gICAgICAgIFB5TWVtX0ZyZWUoYnVmMSk7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpCisgICAgaWYgKGtpbmQyICE9IGtpbmQxKQogICAgICAgICBQeU1lbV9GcmVlKGJ1ZjIpOwogCiAgICAgcmV0dXJuIG91dDsKICAgb25FcnJvcjoKICAgICBQeV9ERUNSRUYoc2VwX29iaik7CiAgICAgUHlfREVDUkVGKHN0cl9vYmopOwotICAgIGlmIChraW5kMSAhPSBraW5kICYmIGJ1ZjEpCi0gICAgICAgIFB5TWVtX0ZyZWUoYnVmMSk7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQgJiYgYnVmMikKKyAgICBpZiAoa2luZDIgIT0ga2luZDEgJiYgYnVmMikKICAgICAgICAgUHlNZW1fRnJlZShidWYyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTEyOTM3LDQ3ICsxMjk0MCw5IEBACiBtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4KIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfXywKLSJtYWtldHJhbnMoeCwgeT1Ob25lLCB6PU5vbmUsIC8pXG4iCi0iLS1cbiIKLSJcbiIKLSJSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS5cbiIKLSJcbiIKLSJJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlXG4iCi0ib3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS5cbiIKLSJDaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLlxuIgotIklmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZFxuIgotImluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGVcbiIKLSJjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXRcbiIKLSJtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4iKTsKLQotI2RlZmluZSBVTklDT0RFX01BS0VUUkFOU19NRVRIT0RERUYgICAgXAotICAgIHsibWFrZXRyYW5zIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVfbWFrZXRyYW5zLCBNRVRIX1ZBUkFSR1N8TUVUSF9TVEFUSUMsIHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfX30sCi0KLXN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlX21ha2V0cmFuc19pbXBsKFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSwgUHlPYmplY3QgKnopOwotCi1zdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZV9tYWtldHJhbnModm9pZCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKng7Ci0gICAgUHlPYmplY3QgKnkgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp6ID0gTlVMTDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAiT3xVVTptYWtldHJhbnMiLAotICAgICAgICAmeCwgJnksICZ6KSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IHVuaWNvZGVfbWFrZXRyYW5zX2ltcGwoeCwgeSwgeik7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfbWFrZXRyYW5zX2ltcGwoUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5LCBQeU9iamVjdCAqeikKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NjZlZGY2MzBmNzc0MzZhIGlucHV0PTdiZmJmNTI5YTI5M2M2YzVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hOTI1Yzg5NDUyYmQ1ODgxIGlucHV0PTdiZmJmNTI5YTI5M2M2YzVdKi8KIHsKICAgICBQeU9iamVjdCAqbmV3ID0gTlVMTCwgKmtleSwgKnZhbHVlOwogICAgIFB5X3NzaXplX3QgaSA9IDA7CkBAIC0xMzM2Nyw4ICsxMzMzMiw3IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKG5ld2J1ZmZlciwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5idWZmZXIsIDAsIHdyaXRlci0+cG9zKTsKLSAgICAgICAgUHlfREVDUkVGKHdyaXRlci0+YnVmZmVyKTsKLSAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7CisgICAgICAgIFB5X1NFVFJFRih3cml0ZXItPmJ1ZmZlciwgbmV3YnVmZmVyKTsKICAgICB9CiAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICByZXR1cm4gMDsKQEAgLTEzNDA2LDYgKzEzMzcwLDcgQEAKICAgICBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cik7CiAgICAgaWYgKG1heGNoYXIgPiB3cml0ZXItPm1heGNoYXIgfHwgbGVuID4gd3JpdGVyLT5zaXplIC0gd3JpdGVyLT5wb3MpIHsKICAgICAgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwgJiYgIXdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7CisgICAgICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkpOwogICAgICAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7CiAgICAgICAgICAgICBQeV9JTkNSRUYoc3RyKTsKICAgICAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gc3RyOwpAQCAtMTM5MTQsOCArMTM4NzksOCBAQAogICogQ0FVVElPTjogIG8sIHggYW5kIFggY29udmVyc2lvbnMgb24gcmVndWxhciBpbnRzIGNhbiBuZXZlcgogICogcHJvZHVjZSBhICctJyBzaWduLCBidXQgY2FuIGZvciBQeXRob24ncyB1bmJvdW5kZWQgaW50cy4KICAqLwotc3RhdGljIFB5T2JqZWN0KgotZm9ybWF0bG9uZyhQeU9iamVjdCAqdmFsLCBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZykKK1B5T2JqZWN0ICoKK19QeVVuaWNvZGVfRm9ybWF0TG9uZyhQeU9iamVjdCAqdmFsLCBpbnQgYWx0LCBpbnQgcHJlYywgaW50IHR5cGUpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgY2hhciAqYnVmOwpAQCAtMTM5MjUsOCArMTM4OTAsNiBAQAogICAgIFB5X3NzaXplX3QgbGxlbjsKICAgICBpbnQgbnVtZGlnaXRzOyAgICAgIC8qIGxlbiA9PSBudW1ub25kaWdpdHMgKyBudW1kaWdpdHMgKi8KICAgICBpbnQgbnVtbm9uZGlnaXRzID0gMDsKLSAgICBpbnQgcHJlYyA9IGFyZy0+cHJlYzsKLSAgICBpbnQgdHlwZSA9IGFyZy0+Y2g7CiAKICAgICAvKiBBdm9pZCBleGNlZWRpbmcgU1NJWkVfVF9NQVggKi8KICAgICBpZiAocHJlYyA+IElOVF9NQVgtMykgewpAQCAtMTM5NzUsNyArMTM5MzgsNyBAQAogICAgIGlmIChsbGVuID4gSU5UX01BWCkgewogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsYXJnZSBpbiBfUHlCeXRlc19Gb3JtYXRMb25nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsYXJnZSBpbiBfUHlVbmljb2RlX0Zvcm1hdExvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGxlbiA9IChpbnQpbGxlbjsKQEAgLTEzOTg1LDcgKzEzOTQ4LDcgQEAKICAgICBhc3NlcnQobnVtZGlnaXRzID4gMCk7CiAKICAgICAvKiBHZXQgcmlkIG9mIGJhc2UgbWFya2VyIHVubGVzcyBGX0FMVCAqLwotICAgIGlmICgoKGFyZy0+ZmxhZ3MgJiBGX0FMVCkgPT0gMCAmJgorICAgIGlmICgoKGFsdCkgPT0gMCAmJgogICAgICAgICAodHlwZSA9PSAnbycgfHwgdHlwZSA9PSAneCcgfHwgdHlwZSA9PSAnWCcpKSkgewogICAgICAgICBhc3NlcnQoYnVmW3NpZ25dID09ICcwJyk7CiAgICAgICAgIGFzc2VydChidWZbc2lnbisxXSA9PSAneCcgfHwgYnVmW3NpZ24rMV0gPT0gJ1gnIHx8CkBAIC0xNDA2MCwyNCArMTQwMjMsMTQgQEAKICAgICBpZiAoIVB5TnVtYmVyX0NoZWNrKHYpKQogICAgICAgICBnb3RvIHdyb25ndHlwZTsKIAotICAgIC8qIG1ha2Ugc3VyZSBudW1iZXIgaXMgYSB0eXBlIG9mIGludGVnZXIgKi8KLSAgICAvKiBpZiBub3QsIGlzc3VlIGRlcHJlY2F0aW9uIHdhcm5pbmcgZm9yIG5vdyAqLworICAgIC8qIG1ha2Ugc3VyZSBudW1iZXIgaXMgYSB0eXBlIG9mIGludGVnZXIgZm9yIG8sIHgsIGFuZCBYICovCiAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKICAgICAgICAgaWYgKHR5cGUgPT0gJ28nIHx8IHR5cGUgPT0gJ3gnIHx8IHR5cGUgPT0gJ1gnKSB7CiAgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfSW5kZXgodik7CiAgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMgaW50IGNvbnZlcnNpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7Ci0gICAgICAgICAgICAgICAgaWYgKGlvYmogPT0gTlVMTCApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTE0MTMwLDcgKzE0MDgzLDcgQEAKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgcmVzID0gZm9ybWF0bG9uZyhpb2JqLCBhcmcpOworICAgIHJlcyA9IF9QeVVuaWNvZGVfRm9ybWF0TG9uZyhpb2JqLCBhcmctPmZsYWdzICYgRl9BTFQsIGFyZy0+cHJlYywgdHlwZSk7CiAgICAgUHlfREVDUkVGKGlvYmopOwogICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTQxMzgsMTAgKzE0MDkxLDIzIEBACiAgICAgcmV0dXJuIDA7CiAKIHdyb25ndHlwZToKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgIgotICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAotICAgICAgICAgICAgdHlwZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgc3dpdGNoKHR5cGUpCisgICAgeworICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgY2FzZSAneCc6CisgICAgICAgIGNhc2UgJ1gnOgorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkLCAiCisgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgdHlwZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICIlJSVjIGZvcm1hdDogYSBudW1iZXIgaXMgcmVxdWlyZWQsICIKKyAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICB0eXBlLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTE0MTU5LDIyICsxNDEyNSwxMCBAQAogICAgICAgICBQeU9iamVjdCAqaW9iajsKICAgICAgICAgbG9uZyB4OwogICAgICAgICAvKiBtYWtlIHN1cmUgbnVtYmVyIGlzIGEgdHlwZSBvZiBpbnRlZ2VyICovCi0gICAgICAgIC8qIGlmIG5vdCwgaXNzdWUgZGVwcmVjYXRpb24gd2FybmluZyBmb3Igbm93ICovCiAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7CiAgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfSW5kZXgodik7CiAgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMgaW50IGNvbnZlcnNpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7Ci0gICAgICAgICAgICAgICAgaWYgKGlvYmogPT0gTlVMTCApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2ID0gaW9iajsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKQEAgLTE0MjQ5LDggKzE0MjAzLDggQEAKICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoY3R4LT5hcmdzX293bmVkKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoY3R4LT5hcmdzKTsKICAgICAgICAgICAgIGN0eC0+YXJnc19vd25lZCA9IDA7CisgICAgICAgICAgICBQeV9ERUNSRUYoY3R4LT5hcmdzKTsKICAgICAgICAgfQogICAgICAgICBjdHgtPmFyZ3MgPSBQeU9iamVjdF9HZXRJdGVtKGN0eC0+ZGljdCwga2V5KTsKICAgICAgICAgUHlfREVDUkVGKGtleSk7CkBAIC0xNTAwNiwxMyArMTQ5NjAsNiBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Rm9ybWF0dGVySXRlcl9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgZm9ybWF0dGVyIGl0ZXIgdHlwZSIpOwogCi0jaWZkZWYgSEFWRV9NQkNTCi0gICAgd2ludmVyLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2Yod2ludmVyKTsKLSAgICBpZiAoIUdldFZlcnNpb25FeCgoT1NWRVJTSU9OSU5GTyopJndpbnZlcikpIHsKLSAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTUwNzEsOCArMTUwMTgsNyBAQAogCiAgICAgaWYgKHQpIHsKICAgICAgICAgUHlfSU5DUkVGKHQpOwotICAgICAgICBQeV9ERUNSRUYoKnApOwotICAgICAgICAqcCA9IHQ7CisgICAgICAgIFB5X1NFVFJFRigqcCwgdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE1MjA5LDggKzE1MTU1LDggQEAKICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgfQogCi0gICAgUHlfREVDUkVGKHNlcSk7CiAgICAgaXQtPml0X3NlcSA9IE5VTEw7CisgICAgUHlfREVDUkVGKHNlcSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE1NDI4LDcgKzE1Mzc0LDcgQEAKICAgICBpZiAodSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBFbnN1cmUgd2Ugd29uJ3Qgb3ZlcmZsb3cgdGhlIHNpemUuICovCi0gICAgaWYgKGxlbiA+ICgoUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoUHlfVU5JQ09ERSkpIC0gMSkpIHsKKyAgICBpZiAobGVuID4gKChQWV9TU0laRV9UX01BWCAvIChQeV9zc2l6ZV90KXNpemVvZihQeV9VTklDT0RFKSkgLSAxKSkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmggYi9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKaW5kZXggMWZkYzA5Mi4uN2M3ODBiNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCisrKyBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaApAQCAtODIsMjUgKzgyLDMyIEBACiAgICAgey0yMDUsIDAsIC0yMDUsIDAsIDAsIDk5OTN9LAogICAgIHstMjAyLCAwLCAtMjAyLCAwLCAwLCA5OTkzfSwKICAgICB7LTIwMywgMCwgLTIwMywgMCwgMCwgOTk5M30sCisgICAgezQyMzE5LCAwLCA0MjMxOSwgMCwgMCwgOTk5M30sCisgICAgezQyMzE1LCAwLCA0MjMxNSwgMCwgMCwgOTk5M30sCiAgICAgey0yMDcsIDAsIC0yMDcsIDAsIDAsIDk5OTN9LAogICAgIHs0MjI4MCwgMCwgNDIyODAsIDAsIDAsIDk5OTN9LAogICAgIHs0MjMwOCwgMCwgNDIzMDgsIDAsIDAsIDk5OTN9LAogICAgIHstMjA5LCAwLCAtMjA5LCAwLCAwLCA5OTkzfSwKICAgICB7LTIxMSwgMCwgLTIxMSwgMCwgMCwgOTk5M30sCiAgICAgezEwNzQzLCAwLCAxMDc0MywgMCwgMCwgOTk5M30sCisgICAgezQyMzA1LCAwLCA0MjMwNSwgMCwgMCwgOTk5M30sCiAgICAgezEwNzQ5LCAwLCAxMDc0OSwgMCwgMCwgOTk5M30sCiAgICAgey0yMTMsIDAsIC0yMTMsIDAsIDAsIDk5OTN9LAogICAgIHstMjE0LCAwLCAtMjE0LCAwLCAwLCA5OTkzfSwKICAgICB7MTA3MjcsIDAsIDEwNzI3LCAwLCAwLCA5OTkzfSwKICAgICB7LTIxOCwgMCwgLTIxOCwgMCwgMCwgOTk5M30sCisgICAgezQyMjgyLCAwLCA0MjI4MiwgMCwgMCwgOTk5M30sCiAgICAgey02OSwgMCwgLTY5LCAwLCAwLCA5OTkzfSwKICAgICB7LTIxNywgMCwgLTIxNywgMCwgMCwgOTk5M30sCiAgICAgey03MSwgMCwgLTcxLCAwLCAwLCA5OTkzfSwKICAgICB7LTIxOSwgMCwgLTIxOSwgMCwgMCwgOTk5M30sCisgICAgezQyMjYxLCAwLCA0MjI2MSwgMCwgMCwgOTk5M30sCisgICAgezQyMjU4LCAwLCA0MjI1OCwgMCwgMCwgOTk5M30sCiAgICAgezAsIDAsIDAsIDAsIDAsIDE0MDg5fSwKICAgICB7MCwgMCwgMCwgMCwgMCwgNTg4OX0sCiAgICAgezE2Nzc3MjQ0LCAxNzgyNTgxOCwgMTY3NzcyNDQsIDAsIDAsIDMwMjE2fSwKICAgICB7MCwgMCwgMCwgMCwgMCwgMTMzMjF9LAorICAgIHswLCAxMTYsIDAsIDAsIDAsIDEwMTEzfSwKICAgICB7MCwgMzgsIDAsIDAsIDAsIDEwMTEzfSwKICAgICB7MCwgMzcsIDAsIDAsIDAsIDEwMTEzfSwKICAgICB7MCwgNjQsIDAsIDAsIDAsIDEwMTEzfSwKQEAgLTEyMiw2ICsxMjksNyBAQAogICAgIHsxNjc3NzI3NiwgMTc4MjU4NTAsIDE2Nzc3Mjc2LCAwLCAwLCAyNjM3N30sCiAgICAgezE2Nzc3Mjc5LCAxNzgyNTg1MywgMTY3NzcyNzksIDAsIDAsIDI2Mzc3fSwKICAgICB7NywgMCwgNywgMCwgMCwgOTk5M30sCisgICAgey0xMTYsIDAsIC0xMTYsIDAsIDAsIDk5OTN9LAogICAgIHswLCAtNjAsIDAsIDAsIDAsIDEwMTEzfSwKICAgICB7MTY3NzcyODIsIDE3ODI1ODU2LCAxNjc3NzI4MiwgMCwgMCwgMjYzNzd9LAogICAgIHswLCAtNywgMCwgMCwgMCwgMTAxMTN9LApAQCAtMTQzLDExMCArMTUxLDIwMiBAQAogICAgIHswLCAwLCAwLCAwLCA3LCAzNTg4fSwKICAgICB7MCwgMCwgMCwgMCwgOCwgMzU4OH0sCiAgICAgezAsIDAsIDAsIDAsIDksIDM1ODh9LAorICAgIHsxNjc3NzI5MiwgMTc4MjU4NjYsIDE2Nzc3MjkyLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3Mjk1LCAxNzgyNTg2OSwgMTY3NzcyOTUsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzcyOTgsIDE3ODI1ODcyLCAxNjc3NzI5OCwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzMwMSwgMTc4MjU4NzUsIDE2Nzc3MzAxLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3MzA0LCAxNzgyNTg3OCwgMTY3NzczMDQsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczMDcsIDE3ODI1ODgxLCAxNjc3NzMwNywgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzMxMCwgMTc4MjU4ODQsIDE2Nzc3MzEwLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3MzEzLCAxNzgyNTg4NywgMTY3NzczMTMsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczMTYsIDE3ODI1ODkwLCAxNjc3NzMxNiwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzMxOSwgMTc4MjU4OTMsIDE2Nzc3MzE5LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3MzIyLCAxNzgyNTg5NiwgMTY3NzczMjIsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczMjUsIDE3ODI1ODk5LCAxNjc3NzMyNSwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzMyOCwgMTc4MjU5MDIsIDE2Nzc3MzI4LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3MzMxLCAxNzgyNTkwNSwgMTY3NzczMzEsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczMzQsIDE3ODI1OTA4LCAxNjc3NzMzNCwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzMzNywgMTc4MjU5MTEsIDE2Nzc3MzM3LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3MzQwLCAxNzgyNTkxNCwgMTY3NzczNDAsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczNDMsIDE3ODI1OTE3LCAxNjc3NzM0MywgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzM0NiwgMTc4MjU5MjAsIDE2Nzc3MzQ2LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3MzQ5LCAxNzgyNTkyMywgMTY3NzczNDksIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczNTIsIDE3ODI1OTI2LCAxNjc3NzM1MiwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzM1NSwgMTc4MjU5MjksIDE2Nzc3MzU1LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3MzU4LCAxNzgyNTkzMiwgMTY3NzczNTgsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczNjEsIDE3ODI1OTM1LCAxNjc3NzM2MSwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzM2NCwgMTc4MjU5MzgsIDE2Nzc3MzY0LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3MzY3LCAxNzgyNTk0MSwgMTY3NzczNjcsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczNzAsIDE3ODI1OTQ0LCAxNjc3NzM3MCwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzM3MywgMTc4MjU5NDcsIDE2Nzc3MzczLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3Mzc2LCAxNzgyNTk1MCwgMTY3NzczNzYsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczNzksIDE3ODI1OTUzLCAxNjc3NzM3OSwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzM4MiwgMTc4MjU5NTYsIDE2Nzc3MzgyLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3Mzg1LCAxNzgyNTk1OSwgMTY3NzczODUsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczODgsIDE3ODI1OTYyLCAxNjc3NzM4OCwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzM5MSwgMTc4MjU5NjUsIDE2Nzc3MzkxLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3Mzk0LCAxNzgyNTk2OCwgMTY3NzczOTQsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3NzczOTcsIDE3ODI1OTcxLCAxNjc3NzM5NywgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQwMCwgMTc4MjU5NzQsIDE2Nzc3NDAwLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDAzLCAxNzgyNTk3NywgMTY3Nzc0MDMsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0MDYsIDE3ODI1OTgwLCAxNjc3NzQwNiwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQwOSwgMTc4MjU5ODMsIDE2Nzc3NDA5LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDEyLCAxNzgyNTk4NiwgMTY3Nzc0MTIsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0MTUsIDE3ODI1OTg5LCAxNjc3NzQxNSwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQxOCwgMTc4MjU5OTIsIDE2Nzc3NDE4LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDIxLCAxNzgyNTk5NSwgMTY3Nzc0MjEsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0MjQsIDE3ODI1OTk4LCAxNjc3NzQyNCwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQyNywgMTc4MjYwMDEsIDE2Nzc3NDI3LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDMwLCAxNzgyNjAwNCwgMTY3Nzc0MzAsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0MzMsIDE3ODI2MDA3LCAxNjc3NzQzMywgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQzNiwgMTc4MjYwMTAsIDE2Nzc3NDM2LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDM5LCAxNzgyNjAxMywgMTY3Nzc0MzksIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0NDIsIDE3ODI2MDE2LCAxNjc3NzQ0MiwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQ0NSwgMTc4MjYwMTksIDE2Nzc3NDQ1LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDQ4LCAxNzgyNjAyMiwgMTY3Nzc0NDgsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0NTEsIDE3ODI2MDI1LCAxNjc3NzQ1MSwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQ1NCwgMTc4MjYwMjgsIDE2Nzc3NDU0LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDU3LCAxNzgyNjAzMSwgMTY3Nzc0NTcsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0NjAsIDE3ODI2MDM0LCAxNjc3NzQ2MCwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQ2MywgMTc4MjYwMzcsIDE2Nzc3NDYzLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDY2LCAxNzgyNjA0MCwgMTY3Nzc0NjYsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0NjksIDE3ODI2MDQzLCAxNjc3NzQ2OSwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQ3MiwgMTc4MjYwNDYsIDE2Nzc3NDcyLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDc1LCAxNzgyNjA0OSwgMTY3Nzc0NzUsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0NzgsIDE3ODI2MDUyLCAxNjc3NzQ3OCwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQ4MSwgMTc4MjYwNTUsIDE2Nzc3NDgxLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDg0LCAxNzgyNjA1OCwgMTY3Nzc0ODQsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0ODcsIDE3ODI2MDYxLCAxNjc3NzQ4NywgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQ5MCwgMTc4MjYwNjQsIDE2Nzc3NDkwLCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NDkzLCAxNzgyNjA2NywgMTY3Nzc0OTMsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc0OTYsIDE3ODI2MDcwLCAxNjc3NzQ5NiwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzQ5OSwgMTc4MjYwNzMsIDE2Nzc3NDk5LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NTAyLCAxNzgyNjA3NiwgMTY3Nzc1MDIsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc1MDUsIDE3ODI2MDc5LCAxNjc3NzUwNSwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzUwOCwgMTc4MjYwODIsIDE2Nzc3NTA4LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NTExLCAxNzgyNjA4NSwgMTY3Nzc1MTEsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc1MTQsIDE3ODI2MDg4LCAxNjc3NzUxNCwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzUxNywgMTc4MjYwOTEsIDE2Nzc3NTE3LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NTIwLCAxNzgyNjA5NCwgMTY3Nzc1MjAsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc1MjMsIDE3ODI2MDk3LCAxNjc3NzUyMywgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzUyNiwgMTc4MjYxMDAsIDE2Nzc3NTI2LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NTI5LCAxNzgyNjEwMywgMTY3Nzc1MjksIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc1MzIsIDE3ODI2MTA2LCAxNjc3NzUzMiwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzUzNSwgMTc4MjYxMDksIDE2Nzc3NTM1LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NTM4LCAxNzgyNjExMiwgMTY3Nzc1MzgsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc1NDEsIDE3ODI2MTE1LCAxNjc3NzU0MSwgMCwgMCwgMjY0OTd9LAorICAgIHsxNjc3NzU0NCwgMTc4MjYxMTgsIDE2Nzc3NTQ0LCAwLCAwLCAyNjQ5N30sCisgICAgezE2Nzc3NTQ3LCAxNzgyNjEyMSwgMTY3Nzc1NDcsIDAsIDAsIDI2NDk3fSwKKyAgICB7MTY3Nzc1NTAsIDE3ODI2MTI0LCAxNjc3NzU1MCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3NzU1MywgMTc4MjYxMjcsIDE2Nzc3NTUzLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc3NTU2LCAxNzgyNjEzMCwgMTY3Nzc1NTYsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3Nzc1NTksIDE3ODI2MTMzLCAxNjc3NzU1OSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3NzU2MiwgMTc4MjYxMzYsIDE2Nzc3NTYyLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc3NTY1LCAxNzgyNjEzOSwgMTY3Nzc1NjUsIDAsIDAsIDI2Mzc3fSwKICAgICB7MCwgMCwgMCwgMCwgMCwgMzg0MH0sCiAgICAgezM1MzMyLCAwLCAzNTMzMiwgMCwgMCwgOTk5M30sCiAgICAgezM4MTQsIDAsIDM4MTQsIDAsIDAsIDk5OTN9LAotICAgIHszMzU1NDUwOSwgMTg4NzQ0NDIsIDMzNTU0NTA5LCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0NTE0LCAxODg3NDQ0NywgMzM1NTQ1MTQsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ1MTksIDE4ODc0NDUyLCAzMzU1NDUxOSwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDUyNCwgMTg4NzQ0NTcsIDMzNTU0NTI0LCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0NTI5LCAxODg3NDQ2MiwgMzM1NTQ1MjksIDAsIDAsIDI2Mzc3fSwKLSAgICB7MTY3NzczMTcsIDE3ODI1ODkxLCAxNjc3NzMxNywgMCwgMCwgMjYzNzd9LAotICAgIHsxNjc3NzMyMSwgMTg4NzQ0NzAsIDE2Nzc3MzIxLCAwLCAwLCAyNjQ5N30sCisgICAgezMzNTU0Nzg1LCAxODg3NDcxOCwgMzM1NTQ3ODUsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ3OTAsIDE4ODc0NzIzLCAzMzU1NDc5MCwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NDc5NSwgMTg4NzQ3MjgsIDMzNTU0Nzk1LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU0ODAwLCAxODg3NDczMywgMzM1NTQ4MDAsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ4MDUsIDE4ODc0NzM4LCAzMzU1NDgwNSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3NzU5MywgMTc4MjYxNjcsIDE2Nzc3NTkzLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc3NTk3LCAxODg3NDc0NiwgMTY3Nzc1OTcsIDAsIDAsIDI2NDk3fSwKICAgICB7OCwgMCwgOCwgMCwgMCwgOTk5M30sCiAgICAgezAsIC04LCAwLCAwLCAwLCAxMDExM30sCi0gICAgezMzNTU0NTQxLCAxODg3NDQ3NCwgMzM1NTQ1NDEsIDAsIDAsIDI2Mzc3fSwKLSAgICB7NTAzMzE3NjMsIDE5OTIzMDU1LCA1MDMzMTc2MywgMCwgMCwgMjYzNzd9LAotICAgIHs1MDMzMTc3MCwgMTk5MjMwNjIsIDUwMzMxNzcwLCAwLCAwLCAyNjM3N30sCi0gICAgezUwMzMxNzc3LCAxOTkyMzA2OSwgNTAzMzE3NzcsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ4MTcsIDE4ODc0NzUwLCAzMzU1NDgxNywgMCwgMCwgMjYzNzd9LAorICAgIHs1MDMzMjAzOSwgMTk5MjMzMzEsIDUwMzMyMDM5LCAwLCAwLCAyNjM3N30sCisgICAgezUwMzMyMDQ2LCAxOTkyMzMzOCwgNTAzMzIwNDYsIDAsIDAsIDI2Mzc3fSwKKyAgICB7NTAzMzIwNTMsIDE5OTIzMzQ1LCA1MDMzMjA1MywgMCwgMCwgMjYzNzd9LAogICAgIHs3NCwgMCwgNzQsIDAsIDAsIDk5OTN9LAogICAgIHs4NiwgMCwgODYsIDAsIDAsIDk5OTN9LAogICAgIHsxMDAsIDAsIDEwMCwgMCwgMCwgOTk5M30sCiAgICAgezEyOCwgMCwgMTI4LCAwLCAwLCA5OTkzfSwKICAgICB7MTEyLCAwLCAxMTIsIDAsIDAsIDk5OTN9LAogICAgIHsxMjYsIDAsIDEyNiwgMCwgMCwgOTk5M30sCi0gICAgezMzNTU0NTY3LCAxODg3NDUwMCwgMTY3NzczNTMsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ1NzMsIDE4ODc0NTA2LCAxNjc3NzM1OSwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDU3OSwgMTg4NzQ1MTIsIDE2Nzc3MzY1LCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0NTg1LCAxODg3NDUxOCwgMTY3NzczNzEsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ1OTEsIDE4ODc0NTI0LCAxNjc3NzM3NywgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDU5NywgMTg4NzQ1MzAsIDE2Nzc3MzgzLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0NjAzLCAxODg3NDUzNiwgMTY3NzczODksIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ2MDksIDE4ODc0NTQyLCAxNjc3NzM5NSwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDYxNSwgMTg4NzQ1NDgsIDE2Nzc3NDAxLCAwLCAwLCAyNjQzM30sCi0gICAgezMzNTU0NjIxLCAxODg3NDU1NCwgMTY3Nzc0MDcsIDAsIDAsIDI2NDMzfSwKLSAgICB7MzM1NTQ2MjcsIDE4ODc0NTYwLCAxNjc3NzQxMywgMCwgMCwgMjY0MzN9LAotICAgIHszMzU1NDYzMywgMTg4NzQ1NjYsIDE2Nzc3NDE5LCAwLCAwLCAyNjQzM30sCi0gICAgezMzNTU0NjM5LCAxODg3NDU3MiwgMTY3Nzc0MjUsIDAsIDAsIDI2NDMzfSwKLSAgICB7MzM1NTQ2NDUsIDE4ODc0NTc4LCAxNjc3NzQzMSwgMCwgMCwgMjY0MzN9LAotICAgIHszMzU1NDY1MSwgMTg4NzQ1ODQsIDE2Nzc3NDM3LCAwLCAwLCAyNjQzM30sCi0gICAgezMzNTU0NjU3LCAxODg3NDU5MCwgMTY3Nzc0NDMsIDAsIDAsIDI2NDMzfSwKLSAgICB7MzM1NTQ2NjMsIDE4ODc0NTk2LCAxNjc3NzQ0OSwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDY2OSwgMTg4NzQ2MDIsIDE2Nzc3NDU1LCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0Njc1LCAxODg3NDYwOCwgMTY3Nzc0NjEsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ2ODEsIDE4ODc0NjE0LCAxNjc3NzQ2NywgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDY4NywgMTg4NzQ2MjAsIDE2Nzc3NDczLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0NjkzLCAxODg3NDYyNiwgMTY3Nzc0NzksIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ2OTksIDE4ODc0NjMyLCAxNjc3NzQ4NSwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDcwNSwgMTg4NzQ2MzgsIDE2Nzc3NDkxLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0NzExLCAxODg3NDY0NCwgMTY3Nzc0OTcsIDAsIDAsIDI2NDMzfSwKLSAgICB7MzM1NTQ3MTcsIDE4ODc0NjUwLCAxNjc3NzUwMywgMCwgMCwgMjY0MzN9LAotICAgIHszMzU1NDcyMywgMTg4NzQ2NTYsIDE2Nzc3NTA5LCAwLCAwLCAyNjQzM30sCi0gICAgezMzNTU0NzI5LCAxODg3NDY2MiwgMTY3Nzc1MTUsIDAsIDAsIDI2NDMzfSwKLSAgICB7MzM1NTQ3MzUsIDE4ODc0NjY4LCAxNjc3NzUyMSwgMCwgMCwgMjY0MzN9LAotICAgIHszMzU1NDc0MSwgMTg4NzQ2NzQsIDE2Nzc3NTI3LCAwLCAwLCAyNjQzM30sCi0gICAgezMzNTU0NzQ3LCAxODg3NDY4MCwgMTY3Nzc1MzMsIDAsIDAsIDI2NDMzfSwKLSAgICB7MzM1NTQ3NTMsIDE4ODc0Njg2LCAxNjc3NzUzOSwgMCwgMCwgMjY0MzN9LAotICAgIHszMzU1NDc1OSwgMTg4NzQ2OTIsIDE2Nzc3NTQ1LCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0NzY1LCAxODg3NDY5OCwgMTY3Nzc1NTEsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ3NzEsIDE4ODc0NzA0LCAxNjc3NzU1NywgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDc3NywgMTg4NzQ3MTAsIDE2Nzc3NTYzLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0NzgzLCAxODg3NDcxNiwgMTY3Nzc1NjksIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ3ODksIDE4ODc0NzIyLCAxNjc3NzU3NSwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDc5NSwgMTg4NzQ3MjgsIDE2Nzc3NTgxLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0ODAxLCAxODg3NDczNCwgMTY3Nzc1ODcsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ4MDcsIDE4ODc0NzQwLCAxNjc3NzU5MywgMCwgMCwgMjY0MzN9LAotICAgIHszMzU1NDgxMywgMTg4NzQ3NDYsIDE2Nzc3NTk5LCAwLCAwLCAyNjQzM30sCi0gICAgezMzNTU0ODE5LCAxODg3NDc1MiwgMTY3Nzc2MDUsIDAsIDAsIDI2NDMzfSwKLSAgICB7MzM1NTQ4MjUsIDE4ODc0NzU4LCAxNjc3NzYxMSwgMCwgMCwgMjY0MzN9LAotICAgIHszMzU1NDgzMSwgMTg4NzQ3NjQsIDE2Nzc3NjE3LCAwLCAwLCAyNjQzM30sCi0gICAgezMzNTU0ODM3LCAxODg3NDc3MCwgMTY3Nzc2MjMsIDAsIDAsIDI2NDMzfSwKLSAgICB7MzM1NTQ4NDMsIDE4ODc0Nzc2LCAxNjc3NzYyOSwgMCwgMCwgMjY0MzN9LAotICAgIHszMzU1NDg0OSwgMTg4NzQ3ODIsIDE2Nzc3NjM1LCAwLCAwLCAyNjQzM30sCi0gICAgezMzNTU0ODU1LCAxODg3NDc4OCwgMzM1NTQ4NTcsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ4NjIsIDE4ODc0Nzk1LCAxNjc3NzY0OCwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDg2OCwgMTg4NzQ4MDEsIDMzNTU0ODcwLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0ODc1LCAxODg3NDgwOCwgMzM1NTQ4NzUsIDAsIDAsIDI2Mzc3fSwKLSAgICB7NTAzMzIwOTcsIDE5OTIzMzg5LCA1MDMzMjEwMCwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NDg0MywgMTg4NzQ3NzYsIDE2Nzc3NjI5LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU0ODQ5LCAxODg3NDc4MiwgMTY3Nzc2MzUsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ4NTUsIDE4ODc0Nzg4LCAxNjc3NzY0MSwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NDg2MSwgMTg4NzQ3OTQsIDE2Nzc3NjQ3LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU0ODY3LCAxODg3NDgwMCwgMTY3Nzc2NTMsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ4NzMsIDE4ODc0ODA2LCAxNjc3NzY1OSwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NDg3OSwgMTg4NzQ4MTIsIDE2Nzc3NjY1LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU0ODg1LCAxODg3NDgxOCwgMTY3Nzc2NzEsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ4OTEsIDE4ODc0ODI0LCAxNjc3NzY3NywgMCwgMCwgMjY0MzN9LAorICAgIHszMzU1NDg5NywgMTg4NzQ4MzAsIDE2Nzc3NjgzLCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU0OTAzLCAxODg3NDgzNiwgMTY3Nzc2ODksIDAsIDAsIDI2NDMzfSwKKyAgICB7MzM1NTQ5MDksIDE4ODc0ODQyLCAxNjc3NzY5NSwgMCwgMCwgMjY0MzN9LAorICAgIHszMzU1NDkxNSwgMTg4NzQ4NDgsIDE2Nzc3NzAxLCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU0OTIxLCAxODg3NDg1NCwgMTY3Nzc3MDcsIDAsIDAsIDI2NDMzfSwKKyAgICB7MzM1NTQ5MjcsIDE4ODc0ODYwLCAxNjc3NzcxMywgMCwgMCwgMjY0MzN9LAorICAgIHszMzU1NDkzMywgMTg4NzQ4NjYsIDE2Nzc3NzE5LCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU0OTM5LCAxODg3NDg3MiwgMTY3Nzc3MjUsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ5NDUsIDE4ODc0ODc4LCAxNjc3NzczMSwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NDk1MSwgMTg4NzQ4ODQsIDE2Nzc3NzM3LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU0OTU3LCAxODg3NDg5MCwgMTY3Nzc3NDMsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ5NjMsIDE4ODc0ODk2LCAxNjc3Nzc0OSwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NDk2OSwgMTg4NzQ5MDIsIDE2Nzc3NzU1LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU0OTc1LCAxODg3NDkwOCwgMTY3Nzc3NjEsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTQ5ODEsIDE4ODc0OTE0LCAxNjc3Nzc2NywgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NDk4NywgMTg4NzQ5MjAsIDE2Nzc3NzczLCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU0OTkzLCAxODg3NDkyNiwgMTY3Nzc3NzksIDAsIDAsIDI2NDMzfSwKKyAgICB7MzM1NTQ5OTksIDE4ODc0OTMyLCAxNjc3Nzc4NSwgMCwgMCwgMjY0MzN9LAorICAgIHszMzU1NTAwNSwgMTg4NzQ5MzgsIDE2Nzc3NzkxLCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU1MDExLCAxODg3NDk0NCwgMTY3Nzc3OTcsIDAsIDAsIDI2NDMzfSwKKyAgICB7MzM1NTUwMTcsIDE4ODc0OTUwLCAxNjc3NzgwMywgMCwgMCwgMjY0MzN9LAorICAgIHszMzU1NTAyMywgMTg4NzQ5NTYsIDE2Nzc3ODA5LCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU1MDI5LCAxODg3NDk2MiwgMTY3Nzc4MTUsIDAsIDAsIDI2NDMzfSwKKyAgICB7MzM1NTUwMzUsIDE4ODc0OTY4LCAxNjc3NzgyMSwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTA0MSwgMTg4NzQ5NzQsIDE2Nzc3ODI3LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1MDQ3LCAxODg3NDk4MCwgMTY3Nzc4MzMsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTUwNTMsIDE4ODc0OTg2LCAxNjc3NzgzOSwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTA1OSwgMTg4NzQ5OTIsIDE2Nzc3ODQ1LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1MDY1LCAxODg3NDk5OCwgMTY3Nzc4NTEsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTUwNzEsIDE4ODc1MDA0LCAxNjc3Nzg1NywgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTA3NywgMTg4NzUwMTAsIDE2Nzc3ODYzLCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1MDgzLCAxODg3NTAxNiwgMTY3Nzc4NjksIDAsIDAsIDI2NDMzfSwKKyAgICB7MzM1NTUwODksIDE4ODc1MDIyLCAxNjc3Nzg3NSwgMCwgMCwgMjY0MzN9LAorICAgIHszMzU1NTA5NSwgMTg4NzUwMjgsIDE2Nzc3ODgxLCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU1MTAxLCAxODg3NTAzNCwgMTY3Nzc4ODcsIDAsIDAsIDI2NDMzfSwKKyAgICB7MzM1NTUxMDcsIDE4ODc1MDQwLCAxNjc3Nzg5MywgMCwgMCwgMjY0MzN9LAorICAgIHszMzU1NTExMywgMTg4NzUwNDYsIDE2Nzc3ODk5LCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU1MTE5LCAxODg3NTA1MiwgMTY3Nzc5MDUsIDAsIDAsIDI2NDMzfSwKKyAgICB7MzM1NTUxMjUsIDE4ODc1MDU4LCAxNjc3NzkxMSwgMCwgMCwgMjY0MzN9LAorICAgIHszMzU1NTEzMSwgMTg4NzUwNjQsIDMzNTU1MTMzLCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1MTM4LCAxODg3NTA3MSwgMTY3Nzc5MjQsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTUxNDQsIDE4ODc1MDc3LCAzMzU1NTE0NiwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTE1MSwgMTg4NzUwODQsIDMzNTU1MTUxLCAwLCAwLCAyNjM3N30sCisgICAgezUwMzMyMzczLCAxOTkyMzY2NSwgNTAzMzIzNzYsIDAsIDAsIDI2Mzc3fSwKICAgICB7MCwgLTc0LCAwLCAwLCAwLCAxMDExM30sCi0gICAgezMzNTU0ODkwLCAxODg3NDgyMywgMTY3Nzc2NzYsIDAsIDAsIDI2NDMzfSwKLSAgICB7MTY3Nzc2NzksIDE3ODI2MjUzLCAxNjc3NzY3OSwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDg5OSwgMTg4NzQ4MzIsIDMzNTU0OTAxLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0OTA2LCAxODg3NDgzOSwgMTY3Nzc2OTIsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ5MTIsIDE4ODc0ODQ1LCAzMzU1NDkxNCwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDkxOSwgMTg4NzQ4NTIsIDMzNTU0OTE5LCAwLCAwLCAyNjM3N30sCi0gICAgezUwMzMyMTQxLCAxOTkyMzQzMywgNTAzMzIxNDQsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTUxNjYsIDE4ODc1MDk5LCAxNjc3Nzk1MiwgMCwgMCwgMjY0MzN9LAorICAgIHsxNjc3Nzk1NSwgMTc4MjY1MjksIDE2Nzc3OTU1LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1MTc1LCAxODg3NTEwOCwgMzM1NTUxNzcsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTUxODIsIDE4ODc1MTE1LCAxNjc3Nzk2OCwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTE4OCwgMTg4NzUxMjEsIDMzNTU1MTkwLCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1MTk1LCAxODg3NTEyOCwgMzM1NTUxOTUsIDAsIDAsIDI2Mzc3fSwKKyAgICB7NTAzMzI0MTcsIDE5OTIzNzA5LCA1MDMzMjQyMCwgMCwgMCwgMjYzNzd9LAogICAgIHswLCAtODYsIDAsIDAsIDAsIDEwMTEzfSwKLSAgICB7MzM1NTQ5MzQsIDE4ODc0ODY3LCAxNjc3NzcyMCwgMCwgMCwgMjY0MzN9LAotICAgIHs1MDMzMjE1NywgMTk5MjM0NDksIDUwMzMyMTU3LCAwLCAwLCAyNjM3N30sCi0gICAgezUwMzMyMTY0LCAxOTkyMzQ1NiwgNTAzMzIxNjQsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTQ5NTQsIDE4ODc0ODg3LCAzMzU1NDk1NCwgMCwgMCwgMjYzNzd9LAotICAgIHs1MDMzMjE3NiwgMTk5MjM0NjgsIDUwMzMyMTc2LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1MjEwLCAxODg3NTE0MywgMTY3Nzc5OTYsIDAsIDAsIDI2NDMzfSwKKyAgICB7NTAzMzI0MzMsIDE5OTIzNzI1LCA1MDMzMjQzMywgMCwgMCwgMjYzNzd9LAorICAgIHs1MDMzMjQ0MCwgMTk5MjM3MzIsIDUwMzMyNDQwLCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1MjMwLCAxODg3NTE2MywgMzM1NTUyMzAsIDAsIDAsIDI2Mzc3fSwKKyAgICB7NTAzMzI0NTIsIDE5OTIzNzQ0LCA1MDMzMjQ1MiwgMCwgMCwgMjYzNzd9LAogICAgIHswLCAtMTAwLCAwLCAwLCAwLCAxMDExM30sCi0gICAgezUwMzMyMTgzLCAxOTkyMzQ3NSwgNTAzMzIxODMsIDAsIDAsIDI2Mzc3fSwKLSAgICB7NTAzMzIxOTAsIDE5OTIzNDgyLCA1MDMzMjE5MCwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NDk4MCwgMTg4NzQ5MTMsIDMzNTU0OTgwLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU0OTg1LCAxODg3NDkxOCwgMzM1NTQ5ODUsIDAsIDAsIDI2Mzc3fSwKLSAgICB7NTAzMzIyMDcsIDE5OTIzNDk5LCA1MDMzMjIwNywgMCwgMCwgMjYzNzd9LAorICAgIHs1MDMzMjQ1OSwgMTk5MjM3NTEsIDUwMzMyNDU5LCAwLCAwLCAyNjM3N30sCisgICAgezUwMzMyNDY2LCAxOTkyMzc1OCwgNTAzMzI0NjYsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTUyNTYsIDE4ODc1MTg5LCAzMzU1NTI1NiwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTI2MSwgMTg4NzUxOTQsIDMzNTU1MjYxLCAwLCAwLCAyNjM3N30sCisgICAgezUwMzMyNDgzLCAxOTkyMzc3NSwgNTAzMzI0ODMsIDAsIDAsIDI2Mzc3fSwKICAgICB7MCwgLTExMiwgMCwgMCwgMCwgMTAxMTN9LAotICAgIHszMzU1NDk5NywgMTg4NzQ5MzAsIDMzNTU0OTk5LCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU1MDA0LCAxODg3NDkzNywgMTY3Nzc3OTAsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTUwMTAsIDE4ODc0OTQzLCAzMzU1NTAxMiwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NTAxNywgMTg4NzQ5NTAsIDMzNTU1MDE3LCAwLCAwLCAyNjM3N30sCi0gICAgezUwMzMyMjM5LCAxOTkyMzUzMSwgNTAzMzIyNDIsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTUyNzMsIDE4ODc1MjA2LCAzMzU1NTI3NSwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTI4MCwgMTg4NzUyMTMsIDE2Nzc4MDY2LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1Mjg2LCAxODg3NTIxOSwgMzM1NTUyODgsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTUyOTMsIDE4ODc1MjI2LCAzMzU1NTI5MywgMCwgMCwgMjYzNzd9LAorICAgIHs1MDMzMjUxNSwgMTk5MjM4MDcsIDUwMzMyNTE4LCAwLCAwLCAyNjM3N30sCiAgICAgezAsIC0xMjgsIDAsIDAsIDAsIDEwMTEzfSwKICAgICB7MCwgLTEyNiwgMCwgMCwgMCwgMTAxMTN9LAotICAgIHszMzU1NTAzMiwgMTg4NzQ5NjUsIDE2Nzc3ODE4LCAwLCAwLCAyNjQzM30sCisgICAgezMzNTU1MzA4LCAxODg3NTI0MSwgMTY3NzgwOTQsIDAsIDAsIDI2NDMzfSwKICAgICB7MCwgMCwgMCwgMCwgMCwgMzA3Nn0sCiAgICAgezAsIDAsIDAsIDAsIDQsIDMwNzZ9LAogICAgIHswLCAwLCAwLCAwLCA1LCAzMDc2fSwKQEAgLTI4MCwyMiArMzgwLDExMSBAQAogICAgIHswLCAtMzUzMzIsIDAsIDAsIDAsIDEwMTEzfSwKICAgICB7MCwgLTQyMjgwLCAwLCAwLCAwLCAxMDExM30sCiAgICAgezAsIC00MjMwOCwgMCwgMCwgMCwgMTAxMTN9LAotICAgIHszMzU1NTAzOCwgMTg4NzQ5NzEsIDMzNTU1MDQwLCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU1MDQ1LCAxODg3NDk3OCwgMzM1NTUwNDcsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTUwNTIsIDE4ODc0OTg1LCAzMzU1NTA1NCwgMCwgMCwgMjYzNzd9LAotICAgIHs1MDMzMjI3NiwgMTk5MjM1NjgsIDUwMzMyMjc5LCAwLCAwLCAyNjM3N30sCi0gICAgezUwMzMyMjg2LCAxOTkyMzU3OCwgNTAzMzIyODksIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTUwNzksIDE4ODc1MDEyLCAzMzU1NTA4MSwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NTA4NiwgMTg4NzUwMTksIDMzNTU1MDg4LCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU1MDkzLCAxODg3NTAyNiwgMzM1NTUwOTUsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTUxMDAsIDE4ODc1MDMzLCAzMzU1NTEwMiwgMCwgMCwgMjYzNzd9LAotICAgIHszMzU1NTEwNywgMTg4NzUwNDAsIDMzNTU1MTA5LCAwLCAwLCAyNjM3N30sCi0gICAgezMzNTU1MTE0LCAxODg3NTA0NywgMzM1NTUxMTYsIDAsIDAsIDI2Mzc3fSwKLSAgICB7MzM1NTUxMjEsIDE4ODc1MDU0LCAzMzU1NTEyMywgMCwgMCwgMjYzNzd9LAorICAgIHswLCAtNDIzMTksIDAsIDAsIDAsIDEwMTEzfSwKKyAgICB7MCwgLTQyMzE1LCAwLCAwLCAwLCAxMDExM30sCisgICAgezAsIC00MjMwNSwgMCwgMCwgMCwgMTAxMTN9LAorICAgIHswLCAtNDIyNTgsIDAsIDAsIDAsIDEwMTEzfSwKKyAgICB7MCwgLTQyMjgyLCAwLCAwLCAwLCAxMDExM30sCisgICAgezAsIC00MjI2MSwgMCwgMCwgMCwgMTAxMTN9LAorICAgIHswLCA5MjgsIDAsIDAsIDAsIDEwMTEzfSwKKyAgICB7LTkyOCwgMCwgLTkyOCwgMCwgMCwgOTk5M30sCisgICAgezE2Nzc4MDk3LCAxNzgyNjY3MSwgMTY3NzgwOTcsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxMDAsIDE3ODI2Njc0LCAxNjc3ODEwMCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODEwMywgMTc4MjY2NzcsIDE2Nzc4MTAzLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTA2LCAxNzgyNjY4MCwgMTY3NzgxMDYsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxMDksIDE3ODI2NjgzLCAxNjc3ODEwOSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODExMiwgMTc4MjY2ODYsIDE2Nzc4MTEyLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTE1LCAxNzgyNjY4OSwgMTY3NzgxMTUsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxMTgsIDE3ODI2NjkyLCAxNjc3ODExOCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODEyMSwgMTc4MjY2OTUsIDE2Nzc4MTIxLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTI0LCAxNzgyNjY5OCwgMTY3NzgxMjQsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxMjcsIDE3ODI2NzAxLCAxNjc3ODEyNywgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODEzMCwgMTc4MjY3MDQsIDE2Nzc4MTMwLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTMzLCAxNzgyNjcwNywgMTY3NzgxMzMsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxMzYsIDE3ODI2NzEwLCAxNjc3ODEzNiwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODEzOSwgMTc4MjY3MTMsIDE2Nzc4MTM5LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTQyLCAxNzgyNjcxNiwgMTY3NzgxNDIsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxNDUsIDE3ODI2NzE5LCAxNjc3ODE0NSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODE0OCwgMTc4MjY3MjIsIDE2Nzc4MTQ4LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTUxLCAxNzgyNjcyNSwgMTY3NzgxNTEsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxNTQsIDE3ODI2NzI4LCAxNjc3ODE1NCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODE1NywgMTc4MjY3MzEsIDE2Nzc4MTU3LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTYwLCAxNzgyNjczNCwgMTY3NzgxNjAsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxNjMsIDE3ODI2NzM3LCAxNjc3ODE2MywgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODE2NiwgMTc4MjY3NDAsIDE2Nzc4MTY2LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTY5LCAxNzgyNjc0MywgMTY3NzgxNjksIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxNzIsIDE3ODI2NzQ2LCAxNjc3ODE3MiwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODE3NSwgMTc4MjY3NDksIDE2Nzc4MTc1LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTc4LCAxNzgyNjc1MiwgMTY3NzgxNzgsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxODEsIDE3ODI2NzU1LCAxNjc3ODE4MSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODE4NCwgMTc4MjY3NTgsIDE2Nzc4MTg0LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTg3LCAxNzgyNjc2MSwgMTY3NzgxODcsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxOTAsIDE3ODI2NzY0LCAxNjc3ODE5MCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODE5MywgMTc4MjY3NjcsIDE2Nzc4MTkzLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MTk2LCAxNzgyNjc3MCwgMTY3NzgxOTYsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgxOTksIDE3ODI2NzczLCAxNjc3ODE5OSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODIwMiwgMTc4MjY3NzYsIDE2Nzc4MjAyLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MjA1LCAxNzgyNjc3OSwgMTY3NzgyMDUsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyMDgsIDE3ODI2NzgyLCAxNjc3ODIwOCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODIxMSwgMTc4MjY3ODUsIDE2Nzc4MjExLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MjE0LCAxNzgyNjc4OCwgMTY3NzgyMTQsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyMTcsIDE3ODI2NzkxLCAxNjc3ODIxNywgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODIyMCwgMTc4MjY3OTQsIDE2Nzc4MjIwLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MjIzLCAxNzgyNjc5NywgMTY3NzgyMjMsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyMjYsIDE3ODI2ODAwLCAxNjc3ODIyNiwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODIyOSwgMTc4MjY4MDMsIDE2Nzc4MjI5LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MjMyLCAxNzgyNjgwNiwgMTY3NzgyMzIsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyMzUsIDE3ODI2ODA5LCAxNjc3ODIzNSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODIzOCwgMTc4MjY4MTIsIDE2Nzc4MjM4LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MjQxLCAxNzgyNjgxNSwgMTY3NzgyNDEsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyNDQsIDE3ODI2ODE4LCAxNjc3ODI0NCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODI0NywgMTc4MjY4MjEsIDE2Nzc4MjQ3LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MjUwLCAxNzgyNjgyNCwgMTY3NzgyNTAsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyNTMsIDE3ODI2ODI3LCAxNjc3ODI1MywgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODI1NiwgMTc4MjY4MzAsIDE2Nzc4MjU2LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MjU5LCAxNzgyNjgzMywgMTY3NzgyNTksIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyNjIsIDE3ODI2ODM2LCAxNjc3ODI2MiwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODI2NSwgMTc4MjY4MzksIDE2Nzc4MjY1LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MjY4LCAxNzgyNjg0MiwgMTY3NzgyNjgsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyNzEsIDE3ODI2ODQ1LCAxNjc3ODI3MSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODI3NCwgMTc4MjY4NDgsIDE2Nzc4Mjc0LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4Mjc3LCAxNzgyNjg1MSwgMTY3NzgyNzcsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyODAsIDE3ODI2ODU0LCAxNjc3ODI4MCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODI4MywgMTc4MjY4NTcsIDE2Nzc4MjgzLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4Mjg2LCAxNzgyNjg2MCwgMTY3NzgyODYsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyODksIDE3ODI2ODYzLCAxNjc3ODI4OSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODI5MiwgMTc4MjY4NjYsIDE2Nzc4MjkyLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4Mjk1LCAxNzgyNjg2OSwgMTY3NzgyOTUsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgyOTgsIDE3ODI2ODcyLCAxNjc3ODI5OCwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODMwMSwgMTc4MjY4NzUsIDE2Nzc4MzAxLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MzA0LCAxNzgyNjg3OCwgMTY3NzgzMDQsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgzMDcsIDE3ODI2ODgxLCAxNjc3ODMwNywgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODMxMCwgMTc4MjY4ODQsIDE2Nzc4MzEwLCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MzEzLCAxNzgyNjg4NywgMTY3NzgzMTMsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgzMTYsIDE3ODI2ODkwLCAxNjc3ODMxNiwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODMxOSwgMTc4MjY4OTMsIDE2Nzc4MzE5LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MzIyLCAxNzgyNjg5NiwgMTY3NzgzMjIsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgzMjUsIDE3ODI2ODk5LCAxNjc3ODMyNSwgMCwgMCwgMjYzNzd9LAorICAgIHsxNjc3ODMyOCwgMTc4MjY5MDIsIDE2Nzc4MzI4LCAwLCAwLCAyNjM3N30sCisgICAgezE2Nzc4MzMxLCAxNzgyNjkwNSwgMTY3NzgzMzEsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MTY3NzgzMzQsIDE3ODI2OTA4LCAxNjc3ODMzNCwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTU1NCwgMTg4NzU0ODcsIDMzNTU1NTU2LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1NTYxLCAxODg3NTQ5NCwgMzM1NTU1NjMsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTU1NjgsIDE4ODc1NTAxLCAzMzU1NTU3MCwgMCwgMCwgMjYzNzd9LAorICAgIHs1MDMzMjc5MiwgMTk5MjQwODQsIDUwMzMyNzk1LCAwLCAwLCAyNjM3N30sCisgICAgezUwMzMyODAyLCAxOTkyNDA5NCwgNTAzMzI4MDUsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTU1OTUsIDE4ODc1NTI4LCAzMzU1NTU5NywgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTYwMiwgMTg4NzU1MzUsIDMzNTU1NjA0LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1NjA5LCAxODg3NTU0MiwgMzM1NTU2MTEsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTU2MTYsIDE4ODc1NTQ5LCAzMzU1NTYxOCwgMCwgMCwgMjYzNzd9LAorICAgIHszMzU1NTYyMywgMTg4NzU1NTYsIDMzNTU1NjI1LCAwLCAwLCAyNjM3N30sCisgICAgezMzNTU1NjMwLCAxODg3NTU2MywgMzM1NTU2MzIsIDAsIDAsIDI2Mzc3fSwKKyAgICB7MzM1NTU2MzcsIDE4ODc1NTcwLCAzMzU1NTYzOSwgMCwgMCwgMjYzNzd9LAogICAgIHswLCAwLCAwLCAwLCAwLCAxMDI1fSwKICAgICB7MCwgMCwgMCwgMCwgMCwgNTYzM30sCiAgICAgezAsIDQwLCAwLCAwLCAwLCAxMDExM30sCiAgICAgey00MCwgMCwgLTQwLCAwLCAwLCA5OTkzfSwKKyAgICB7MCwgMCwgMCwgMCwgMCwgOTM0NH0sCiB9OwogCiAvKiBleHRlbmRlZCBjYXNlIG1hcHBpbmdzICovCkBAIC0zNzUsNiArNTY0LDI4MiBAQAogICAgIDEzNjIsCiAgICAgMTMzMywKICAgICAxNDEwLAorICAgIDQzODg4LAorICAgIDUwMjQsCisgICAgNTAyNCwKKyAgICA0Mzg4OSwKKyAgICA1MDI1LAorICAgIDUwMjUsCisgICAgNDM4OTAsCisgICAgNTAyNiwKKyAgICA1MDI2LAorICAgIDQzODkxLAorICAgIDUwMjcsCisgICAgNTAyNywKKyAgICA0Mzg5MiwKKyAgICA1MDI4LAorICAgIDUwMjgsCisgICAgNDM4OTMsCisgICAgNTAyOSwKKyAgICA1MDI5LAorICAgIDQzODk0LAorICAgIDUwMzAsCisgICAgNTAzMCwKKyAgICA0Mzg5NSwKKyAgICA1MDMxLAorICAgIDUwMzEsCisgICAgNDM4OTYsCisgICAgNTAzMiwKKyAgICA1MDMyLAorICAgIDQzODk3LAorICAgIDUwMzMsCisgICAgNTAzMywKKyAgICA0Mzg5OCwKKyAgICA1MDM0LAorICAgIDUwMzQsCisgICAgNDM4OTksCisgICAgNTAzNSwKKyAgICA1MDM1LAorICAgIDQzOTAwLAorICAgIDUwMzYsCisgICAgNTAzNiwKKyAgICA0MzkwMSwKKyAgICA1MDM3LAorICAgIDUwMzcsCisgICAgNDM5MDIsCisgICAgNTAzOCwKKyAgICA1MDM4LAorICAgIDQzOTAzLAorICAgIDUwMzksCisgICAgNTAzOSwKKyAgICA0MzkwNCwKKyAgICA1MDQwLAorICAgIDUwNDAsCisgICAgNDM5MDUsCisgICAgNTA0MSwKKyAgICA1MDQxLAorICAgIDQzOTA2LAorICAgIDUwNDIsCisgICAgNTA0MiwKKyAgICA0MzkwNywKKyAgICA1MDQzLAorICAgIDUwNDMsCisgICAgNDM5MDgsCisgICAgNTA0NCwKKyAgICA1MDQ0LAorICAgIDQzOTA5LAorICAgIDUwNDUsCisgICAgNTA0NSwKKyAgICA0MzkxMCwKKyAgICA1MDQ2LAorICAgIDUwNDYsCisgICAgNDM5MTEsCisgICAgNTA0NywKKyAgICA1MDQ3LAorICAgIDQzOTEyLAorICAgIDUwNDgsCisgICAgNTA0OCwKKyAgICA0MzkxMywKKyAgICA1MDQ5LAorICAgIDUwNDksCisgICAgNDM5MTQsCisgICAgNTA1MCwKKyAgICA1MDUwLAorICAgIDQzOTE1LAorICAgIDUwNTEsCisgICAgNTA1MSwKKyAgICA0MzkxNiwKKyAgICA1MDUyLAorICAgIDUwNTIsCisgICAgNDM5MTcsCisgICAgNTA1MywKKyAgICA1MDUzLAorICAgIDQzOTE4LAorICAgIDUwNTQsCisgICAgNTA1NCwKKyAgICA0MzkxOSwKKyAgICA1MDU1LAorICAgIDUwNTUsCisgICAgNDM5MjAsCisgICAgNTA1NiwKKyAgICA1MDU2LAorICAgIDQzOTIxLAorICAgIDUwNTcsCisgICAgNTA1NywKKyAgICA0MzkyMiwKKyAgICA1MDU4LAorICAgIDUwNTgsCisgICAgNDM5MjMsCisgICAgNTA1OSwKKyAgICA1MDU5LAorICAgIDQzOTI0LAorICAgIDUwNjAsCisgICAgNTA2MCwKKyAgICA0MzkyNSwKKyAgICA1MDYxLAorICAgIDUwNjEsCisgICAgNDM5MjYsCisgICAgNTA2MiwKKyAgICA1MDYyLAorICAgIDQzOTI3LAorICAgIDUwNjMsCisgICAgNTA2MywKKyAgICA0MzkyOCwKKyAgICA1MDY0LAorICAgIDUwNjQsCisgICAgNDM5MjksCisgICAgNTA2NSwKKyAgICA1MDY1LAorICAgIDQzOTMwLAorICAgIDUwNjYsCisgICAgNTA2NiwKKyAgICA0MzkzMSwKKyAgICA1MDY3LAorICAgIDUwNjcsCisgICAgNDM5MzIsCisgICAgNTA2OCwKKyAgICA1MDY4LAorICAgIDQzOTMzLAorICAgIDUwNjksCisgICAgNTA2OSwKKyAgICA0MzkzNCwKKyAgICA1MDcwLAorICAgIDUwNzAsCisgICAgNDM5MzUsCisgICAgNTA3MSwKKyAgICA1MDcxLAorICAgIDQzOTM2LAorICAgIDUwNzIsCisgICAgNTA3MiwKKyAgICA0MzkzNywKKyAgICA1MDczLAorICAgIDUwNzMsCisgICAgNDM5MzgsCisgICAgNTA3NCwKKyAgICA1MDc0LAorICAgIDQzOTM5LAorICAgIDUwNzUsCisgICAgNTA3NSwKKyAgICA0Mzk0MCwKKyAgICA1MDc2LAorICAgIDUwNzYsCisgICAgNDM5NDEsCisgICAgNTA3NywKKyAgICA1MDc3LAorICAgIDQzOTQyLAorICAgIDUwNzgsCisgICAgNTA3OCwKKyAgICA0Mzk0MywKKyAgICA1MDc5LAorICAgIDUwNzksCisgICAgNDM5NDQsCisgICAgNTA4MCwKKyAgICA1MDgwLAorICAgIDQzOTQ1LAorICAgIDUwODEsCisgICAgNTA4MSwKKyAgICA0Mzk0NiwKKyAgICA1MDgyLAorICAgIDUwODIsCisgICAgNDM5NDcsCisgICAgNTA4MywKKyAgICA1MDgzLAorICAgIDQzOTQ4LAorICAgIDUwODQsCisgICAgNTA4NCwKKyAgICA0Mzk0OSwKKyAgICA1MDg1LAorICAgIDUwODUsCisgICAgNDM5NTAsCisgICAgNTA4NiwKKyAgICA1MDg2LAorICAgIDQzOTUxLAorICAgIDUwODcsCisgICAgNTA4NywKKyAgICA0Mzk1MiwKKyAgICA1MDg4LAorICAgIDUwODgsCisgICAgNDM5NTMsCisgICAgNTA4OSwKKyAgICA1MDg5LAorICAgIDQzOTU0LAorICAgIDUwOTAsCisgICAgNTA5MCwKKyAgICA0Mzk1NSwKKyAgICA1MDkxLAorICAgIDUwOTEsCisgICAgNDM5NTYsCisgICAgNTA5MiwKKyAgICA1MDkyLAorICAgIDQzOTU3LAorICAgIDUwOTMsCisgICAgNTA5MywKKyAgICA0Mzk1OCwKKyAgICA1MDk0LAorICAgIDUwOTQsCisgICAgNDM5NTksCisgICAgNTA5NSwKKyAgICA1MDk1LAorICAgIDQzOTYwLAorICAgIDUwOTYsCisgICAgNTA5NiwKKyAgICA0Mzk2MSwKKyAgICA1MDk3LAorICAgIDUwOTcsCisgICAgNDM5NjIsCisgICAgNTA5OCwKKyAgICA1MDk4LAorICAgIDQzOTYzLAorICAgIDUwOTksCisgICAgNTA5OSwKKyAgICA0Mzk2NCwKKyAgICA1MTAwLAorICAgIDUxMDAsCisgICAgNDM5NjUsCisgICAgNTEwMSwKKyAgICA1MTAxLAorICAgIDQzOTY2LAorICAgIDUxMDIsCisgICAgNTEwMiwKKyAgICA0Mzk2NywKKyAgICA1MTAzLAorICAgIDUxMDMsCisgICAgNTExMiwKKyAgICA1MTA0LAorICAgIDUxMDQsCisgICAgNTExMywKKyAgICA1MTA1LAorICAgIDUxMDUsCisgICAgNTExNCwKKyAgICA1MTA2LAorICAgIDUxMDYsCisgICAgNTExNSwKKyAgICA1MTA3LAorICAgIDUxMDcsCisgICAgNTExNiwKKyAgICA1MTA4LAorICAgIDUxMDgsCisgICAgNTExNywKKyAgICA1MTA5LAorICAgIDUxMDksCisgICAgNTExMiwKKyAgICA1MTA0LAorICAgIDUxMDQsCisgICAgNTExMywKKyAgICA1MTA1LAorICAgIDUxMDUsCisgICAgNTExNCwKKyAgICA1MTA2LAorICAgIDUxMDYsCisgICAgNTExNSwKKyAgICA1MTA3LAorICAgIDUxMDcsCisgICAgNTExNiwKKyAgICA1MTA4LAorICAgIDUxMDgsCisgICAgNTExNywKKyAgICA1MTA5LAorICAgIDUxMDksCiAgICAgNzgzMCwKICAgICAxMDQsCiAgICAgODE3LApAQCAtOTA0LDYgKzEzNjksMjQ2IEBACiAgICAgOTM3LAogICAgIDkyMSwKICAgICA4MTg4LAorICAgIDQzODg4LAorICAgIDUwMjQsCisgICAgNTAyNCwKKyAgICA0Mzg4OSwKKyAgICA1MDI1LAorICAgIDUwMjUsCisgICAgNDM4OTAsCisgICAgNTAyNiwKKyAgICA1MDI2LAorICAgIDQzODkxLAorICAgIDUwMjcsCisgICAgNTAyNywKKyAgICA0Mzg5MiwKKyAgICA1MDI4LAorICAgIDUwMjgsCisgICAgNDM4OTMsCisgICAgNTAyOSwKKyAgICA1MDI5LAorICAgIDQzODk0LAorICAgIDUwMzAsCisgICAgNTAzMCwKKyAgICA0Mzg5NSwKKyAgICA1MDMxLAorICAgIDUwMzEsCisgICAgNDM4OTYsCisgICAgNTAzMiwKKyAgICA1MDMyLAorICAgIDQzODk3LAorICAgIDUwMzMsCisgICAgNTAzMywKKyAgICA0Mzg5OCwKKyAgICA1MDM0LAorICAgIDUwMzQsCisgICAgNDM4OTksCisgICAgNTAzNSwKKyAgICA1MDM1LAorICAgIDQzOTAwLAorICAgIDUwMzYsCisgICAgNTAzNiwKKyAgICA0MzkwMSwKKyAgICA1MDM3LAorICAgIDUwMzcsCisgICAgNDM5MDIsCisgICAgNTAzOCwKKyAgICA1MDM4LAorICAgIDQzOTAzLAorICAgIDUwMzksCisgICAgNTAzOSwKKyAgICA0MzkwNCwKKyAgICA1MDQwLAorICAgIDUwNDAsCisgICAgNDM5MDUsCisgICAgNTA0MSwKKyAgICA1MDQxLAorICAgIDQzOTA2LAorICAgIDUwNDIsCisgICAgNTA0MiwKKyAgICA0MzkwNywKKyAgICA1MDQzLAorICAgIDUwNDMsCisgICAgNDM5MDgsCisgICAgNTA0NCwKKyAgICA1MDQ0LAorICAgIDQzOTA5LAorICAgIDUwNDUsCisgICAgNTA0NSwKKyAgICA0MzkxMCwKKyAgICA1MDQ2LAorICAgIDUwNDYsCisgICAgNDM5MTEsCisgICAgNTA0NywKKyAgICA1MDQ3LAorICAgIDQzOTEyLAorICAgIDUwNDgsCisgICAgNTA0OCwKKyAgICA0MzkxMywKKyAgICA1MDQ5LAorICAgIDUwNDksCisgICAgNDM5MTQsCisgICAgNTA1MCwKKyAgICA1MDUwLAorICAgIDQzOTE1LAorICAgIDUwNTEsCisgICAgNTA1MSwKKyAgICA0MzkxNiwKKyAgICA1MDUyLAorICAgIDUwNTIsCisgICAgNDM5MTcsCisgICAgNTA1MywKKyAgICA1MDUzLAorICAgIDQzOTE4LAorICAgIDUwNTQsCisgICAgNTA1NCwKKyAgICA0MzkxOSwKKyAgICA1MDU1LAorICAgIDUwNTUsCisgICAgNDM5MjAsCisgICAgNTA1NiwKKyAgICA1MDU2LAorICAgIDQzOTIxLAorICAgIDUwNTcsCisgICAgNTA1NywKKyAgICA0MzkyMiwKKyAgICA1MDU4LAorICAgIDUwNTgsCisgICAgNDM5MjMsCisgICAgNTA1OSwKKyAgICA1MDU5LAorICAgIDQzOTI0LAorICAgIDUwNjAsCisgICAgNTA2MCwKKyAgICA0MzkyNSwKKyAgICA1MDYxLAorICAgIDUwNjEsCisgICAgNDM5MjYsCisgICAgNTA2MiwKKyAgICA1MDYyLAorICAgIDQzOTI3LAorICAgIDUwNjMsCisgICAgNTA2MywKKyAgICA0MzkyOCwKKyAgICA1MDY0LAorICAgIDUwNjQsCisgICAgNDM5MjksCisgICAgNTA2NSwKKyAgICA1MDY1LAorICAgIDQzOTMwLAorICAgIDUwNjYsCisgICAgNTA2NiwKKyAgICA0MzkzMSwKKyAgICA1MDY3LAorICAgIDUwNjcsCisgICAgNDM5MzIsCisgICAgNTA2OCwKKyAgICA1MDY4LAorICAgIDQzOTMzLAorICAgIDUwNjksCisgICAgNTA2OSwKKyAgICA0MzkzNCwKKyAgICA1MDcwLAorICAgIDUwNzAsCisgICAgNDM5MzUsCisgICAgNTA3MSwKKyAgICA1MDcxLAorICAgIDQzOTM2LAorICAgIDUwNzIsCisgICAgNTA3MiwKKyAgICA0MzkzNywKKyAgICA1MDczLAorICAgIDUwNzMsCisgICAgNDM5MzgsCisgICAgNTA3NCwKKyAgICA1MDc0LAorICAgIDQzOTM5LAorICAgIDUwNzUsCisgICAgNTA3NSwKKyAgICA0Mzk0MCwKKyAgICA1MDc2LAorICAgIDUwNzYsCisgICAgNDM5NDEsCisgICAgNTA3NywKKyAgICA1MDc3LAorICAgIDQzOTQyLAorICAgIDUwNzgsCisgICAgNTA3OCwKKyAgICA0Mzk0MywKKyAgICA1MDc5LAorICAgIDUwNzksCisgICAgNDM5NDQsCisgICAgNTA4MCwKKyAgICA1MDgwLAorICAgIDQzOTQ1LAorICAgIDUwODEsCisgICAgNTA4MSwKKyAgICA0Mzk0NiwKKyAgICA1MDgyLAorICAgIDUwODIsCisgICAgNDM5NDcsCisgICAgNTA4MywKKyAgICA1MDgzLAorICAgIDQzOTQ4LAorICAgIDUwODQsCisgICAgNTA4NCwKKyAgICA0Mzk0OSwKKyAgICA1MDg1LAorICAgIDUwODUsCisgICAgNDM5NTAsCisgICAgNTA4NiwKKyAgICA1MDg2LAorICAgIDQzOTUxLAorICAgIDUwODcsCisgICAgNTA4NywKKyAgICA0Mzk1MiwKKyAgICA1MDg4LAorICAgIDUwODgsCisgICAgNDM5NTMsCisgICAgNTA4OSwKKyAgICA1MDg5LAorICAgIDQzOTU0LAorICAgIDUwOTAsCisgICAgNTA5MCwKKyAgICA0Mzk1NSwKKyAgICA1MDkxLAorICAgIDUwOTEsCisgICAgNDM5NTYsCisgICAgNTA5MiwKKyAgICA1MDkyLAorICAgIDQzOTU3LAorICAgIDUwOTMsCisgICAgNTA5MywKKyAgICA0Mzk1OCwKKyAgICA1MDk0LAorICAgIDUwOTQsCisgICAgNDM5NTksCisgICAgNTA5NSwKKyAgICA1MDk1LAorICAgIDQzOTYwLAorICAgIDUwOTYsCisgICAgNTA5NiwKKyAgICA0Mzk2MSwKKyAgICA1MDk3LAorICAgIDUwOTcsCisgICAgNDM5NjIsCisgICAgNTA5OCwKKyAgICA1MDk4LAorICAgIDQzOTYzLAorICAgIDUwOTksCisgICAgNTA5OSwKKyAgICA0Mzk2NCwKKyAgICA1MTAwLAorICAgIDUxMDAsCisgICAgNDM5NjUsCisgICAgNTEwMSwKKyAgICA1MTAxLAorICAgIDQzOTY2LAorICAgIDUxMDIsCisgICAgNTEwMiwKKyAgICA0Mzk2NywKKyAgICA1MTAzLAorICAgIDUxMDMsCiAgICAgNjQyNTYsCiAgICAgMTAyLAogICAgIDEwMiwKQEAgLTEwMjksNDA1ICsxNzM0LDUxMSBAQAogICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKICAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI4LCAxMjksIDEzMCwgCiAgICAgMTMxLCAxMzIsIDEzMywgMTM0LCAzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAKLSAgICA3MSwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDE1MCwgNzEsIDE1MSwgMTUyLCAKLSAgICAxNTMsIDcxLCAxNTQsIDcxLCAxNTUsIDcxLCA3MSwgNzEsIDE1NiwgNzEsIDcxLCA3MSwgMTU3LCAxNTgsIDE1OSwgMTYwLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAxNjEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDE2MiwgNzEsIAotICAgIDE2MywgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDE2NCwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDM0LCAzNCwgMzQsIDM0LCAxNjUsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDE2NiwgMTY3LCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDE2OCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNjQsIDE2OSwgMTcwLCAxNzEsIDE3MiwgNzEsIDE3MywgNzEsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAKLSAgICAxNzksIDE4MCwgMTgxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDE4MiwgMTgzLCA3MSwgNzEsIDE4NCwgCi0gICAgMTg1LCAxODYsIDE4NywgMTg4LCA3MSwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDY1LCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDE5NywgMTk4LCAKLSAgICAxOTksIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDg3LCAyMDAsIAotICAgIDM0LCAyMDEsIDIwMiwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNDUsIDM0LCAzNCwgMTUyLCAxNDUsIDE1MywgMTU0LCAxNTUsIAorICAgIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTYwLCAxNjEsIDE2MiwgMTQ1LCAxNDUsIDE2MywgMTQ1LCAxNDUsIDE0NSwgMTY0LCAKKyAgICAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNDUsIDE0NSwgMTcxLCAxNDUsIDE3MiwgMTczLCAxNzQsIDE3NSwgCisgICAgMTQ1LCAxNDUsIDE3NiwgMTQ1LCAxNDUsIDE0NSwgMTc3LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxNzgsIDE3OSwgMzQsIDE4MCwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxODEsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMzQsIDM0LCAzNCwgMzQsIDE4MiwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAzNCwgMzQsIDM0LCAzNCwgMTgzLCAxODQsIDE4NSwgMTg2LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxODcsIDE4OCwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE4OSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE5MCwgMTkxLCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgNjQsIDE5MiwgCisgICAgMTkzLCAxOTQsIDE5NSwgMTQ1LCAxOTYsIDE0NSwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDY0LCAKKyAgICA2NCwgNjQsIDY0LCAyMDUsIDIwNiwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDM0LCAyMDcsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMjA4LCAKKyAgICAyMDksIDE0NSwgMTQ1LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMTQ1LCA2NCwgMjE1LCA2NCwgNjQsIDIxNiwgMjE3LCAKKyAgICA2NCwgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywgMjI0LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAyMjUsIDIyNiwgMjI3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA4NywgMjI4LCAzNCwgMjI5LCAyMzAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjAzLCAzNCwgMzQsIAotICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIwNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIwNSwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIzMSwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAyMzIsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAyMzMsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAyMDYsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIzNSwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIwNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjM2LCAzNCwgMjM3LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDM0LCAzNCwgMzQsIDIwOCwgMzQsIDIwOSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDM0LCAyMDMsIDM0LCAzNCwgMjA5LCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCAyMTAsIDcxLCAyMTEsIDIxMiwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDEyNywgMTI3LCAxMjcsIDEyNywgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDIzOCwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAzNCwgMjMxLCAzNCwgMzQsIDIzOSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMjQwLCAxNDUsIDI0MSwgMjQyLCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgCisgICAgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIAorICAgIDE0NSwgMTQ1LCAxNDUsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKICAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgCiAgICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIAogICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKQEAgLTE0NjMsOCArMjI3NCw4IEBACiAgICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIAogICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKICAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgCisgICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAyNDMsIDEyNywgMTI3LCAxMjcsIAogICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKLSAgICAxMjcsIDEyNywgMTI3LCAyMTMsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgCiAgICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIAogICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKICAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgCkBAIC0xNTAwLDcgKzIzMTEsNyBAQAogICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKICAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgCiAgICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIAotICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAyMTMsIAorICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMjQzLCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmRleDJbXSA9IHsKQEAgLTE1MzUsMjAzICsyMzQ2LDIwNCBAQAogICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDY0LCAyMCwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAogICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgNjUsIAogICAgIDMwLCAzMSwgNjYsIDY3LCA2OCwgNjgsIDMwLCAzMSwgNjksIDcwLCA3MSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAotICAgIDMxLCAzMCwgMzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgMjAsIDc3LCA3NywgMjAsIDc4LCAyMCwgNzksIDIwLCAyMCwgMjAsIAotICAgIDIwLCA3NywgMjAsIDIwLCA4MCwgMjAsIDgxLCA4MiwgMjAsIDgzLCA4NCwgMjAsIDg1LCAyMCwgMjAsIDIwLCA4NCwgMjAsIAotICAgIDg2LCA4NywgMjAsIDIwLCA4OCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDg5LCAyMCwgMjAsIDkwLCAyMCwgMjAsIAotICAgIDkwLCAyMCwgMjAsIDIwLCAyMCwgOTAsIDkxLCA5MiwgOTIsIDkzLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDk0LCAyMCwgNTUsIAotICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAotICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIAotICAgIDk2LCA5NiwgOTYsIDk2LCA5NiwgOTYsIDk2LCA5NSwgOTUsIDYsIDYsIDYsIDYsIDk2LCA5NiwgOTYsIDk2LCA5NiwgOTYsIAotICAgIDk2LCA5NiwgOTYsIDk2LCA5NiwgOTYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgOTYsIDYsIDk2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCAKLSAgICA2LCA2LCA2LCA2LCA2LCA2LCA2LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMzEsIDMwLCAzMSwgNzIsIDczLCA3NCwgNzUsIDc2LCAyMCwgNzcsIDc3LCAyMCwgNzgsIDIwLCA3OSwgODAsIDIwLCAyMCwgCisgICAgMjAsIDc3LCA4MSwgMjAsIDgyLCAyMCwgODMsIDg0LCAyMCwgODUsIDg2LCAyMCwgODcsIDg4LCAyMCwgMjAsIDg2LCAyMCwgCisgICAgODksIDkwLCAyMCwgMjAsIDkxLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgOTIsIDIwLCAyMCwgOTMsIDIwLCAyMCwgCisgICAgOTMsIDIwLCAyMCwgMjAsIDk0LCA5MywgOTUsIDk2LCA5NiwgOTcsIDIwLCAyMCwgMjAsIDIwLCAyMCwgOTgsIDIwLCA1NSwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCA5OSwgMTAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgCisgICAgMTAxLCAxMDEsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAxLCAxMDEsIDYsIDYsIDYsIDYsIDEwMiwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDYsIDYsIDYsIDYsIDYsIDYsIAorICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCA2LCA2LCA2LCA2LCA2LCA2LCA2LCAKKyAgICAxMDIsIDYsIDEwMiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDk3LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTAzLCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMzAsIDMxLCAzMCwgMzEsIDk2LCA2LCAzMCwgMzEsIDAsIDAsIAotICAgIDk4LCA1MCwgNTAsIDUwLCA1LCAwLCAwLCAwLCAwLCAwLCA2LCA2LCA5OSwgMjUsIDEwMCwgMTAwLCAxMDAsIDAsIDEwMSwgMCwgCi0gICAgMTAyLCAxMDIsIDEwMywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxMDQsIDEwNSwgMTA1LCAxMDUsIAotICAgIDEwNiwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxMDcsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDEwOCwgMTA5LCAxMDksIDExMCwgMTExLCAxMTIsIAotICAgIDExMywgMTEzLCAxMTMsIDExNCwgMTE1LCAxMTYsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCi0gICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDExNywgMTE4LCAxMTksIDIwLCAKLSAgICAxMjAsIDEyMSwgNSwgMzAsIDMxLCAxMjIsIDMwLCAzMSwgMjAsIDY0LCA2NCwgNjQsIDEyMywgMTIzLCAxMjMsIDEyMywgCi0gICAgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMsIDEyMywgMTcsIDE3LCAxNywgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAzMCwgMzEsIDMwLCAzMSwgMTAyLCA2LCAzMCwgMzEsIDAsIDAsIDEwNCwgNTAsIDUwLCA1MCwgNSwgMTA1LCAwLCAKKyAgICAwLCAwLCAwLCA2LCA2LCAxMDYsIDI1LCAxMDcsIDEwNywgMTA3LCAwLCAxMDgsIDAsIDEwOSwgMTA5LCAxMTAsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTExLCAxMTIsIDExMiwgMTEyLCAxMTMsIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTE0LCAxOSwgMTksIDE5LCAxOSwgMTksIAorICAgIDE5LCAxOSwgMTksIDE5LCAxMTUsIDExNiwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMCwgMTIwLCAxMjEsIDEyMiwgCisgICAgMTIzLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCA1LCAzMCwgMzEsIDEzMCwgCisgICAgMzAsIDMxLCAyMCwgNjQsIDY0LCA2NCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAKLSAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAotICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAotICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCA1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDYsIDYsIDMwLCAzMSwgMzAsIDMxLCAKKyAgICAxNywgMTcsIDE3LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDEzMiwgCisgICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAorICAgIDEzMiwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKKyAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgNiwgNiwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCiAgICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCiAgICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAxMjUsIDMwLCAzMSwgMzAsIAotICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMTI2LCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAKKyAgICAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAxMzMsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMTM0LCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAogICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAogICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAogICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAogICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAotICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcsIAotICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKLSAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgCi0gICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMCwgMCwgOTYsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjksIDAsIDUsIDUsIDAsIDAsIDAsIAotICAgIDAsIDUsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDAsIDAsIDEwMiwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMTM2LCAxMzYsIDEzNiwgMTM2LCAKKyAgICAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgCisgICAgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNywgMCwgNSwgNSwgMCwgMCwgNSwgNSwgNSwgMCwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCAyNSwgNSwgMjUsIDI1LCA1LCAyNSwgMjUsIAotICAgIDUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1LCA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgNSwgMjEsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgOTYsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA3LCA4LCAKLSAgICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNSwgNSwgNSwgNSwgNTUsIDU1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNSwgNTUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyMSwgNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgOTYsIDk2LCAyNSwgMjUsIDUsIDI1LCAyNSwgMjUsIDI1LCA1NSwgNTUsIDcsIDgsIDksIDEwLCAxMSwgCi0gICAgMTIsIDEzLCAxNCwgMTUsIDE2LCA1NSwgNTUsIDU1LCA1LCA1LCA1NSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgMCwgMjEsIDU1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDUsIDI1LCA1LCAyNSwgMjUsIDUsIDI1LCAyNSwgNSwgMjUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgCisgICAgNTUsIDUsIDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgCisgICAgMjEsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTAyLCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgOCwgOSwgMTAsIAotICAgIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAKKyAgICAxMywgMTQsIDE1LCAxNiwgNSwgNSwgNSwgNSwgNTUsIDU1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA5NiwgOTYsIDUsIDUsIDUsIDUsIDk2LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIDk2LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCA5NiwgMjUsIDI1LCAyNSwgOTYsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjEsIDUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDEwMiwgMTAyLCAyNSwgMjUsIDUsIDI1LCAyNSwgMjUsIDI1LCA1NSwgNTUsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgCisgICAgMTUsIDE2LCA1NSwgNTUsIDU1LCA1LCA1LCA1NSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgMCwgMjEsIDU1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAKLSAgICAyNSwgMCwgMCwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDAsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMjUsIDI1LCAyNSwgMTgsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgCisgICAgMTQsIDE1LCAxNiwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTAyLCAxMDIsIDUsIDUsIDUsIDUsIDEwMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMjUsIDI1LCAxMDIsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDEwMiwgMjUsIDI1LCAyNSwgMTAyLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAwLCAwLCAKKyAgICA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDE4LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMTgsIDI1LCA1NSwgMTgsIDE4LCAxOCwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDE4LCAxOCwgNTUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCA1LCA1LCAKLSAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNSwgOTYsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAyNSwgMTgsIDE4LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDAsIDAsIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAKLSAgICA1NSwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDI1LCA1NSwgMTgsIDE4LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDAsIAotICAgIDAsIDE4LCAxOCwgMCwgMCwgMTgsIDE4LCAyNSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAwLCAwLCAKLSAgICA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMCwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIAotICAgIDU1LCA1NSwgNSwgNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAxOCwgMCwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgMCwgNTUsIDU1LCAwLCA1NSwgNTUsIDAsIDAsIDI1LCAwLCAxOCwgCi0gICAgMTgsIDE4LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMCwgMCwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMjUsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgOCwgOSwgMTAsIAotICAgIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDI1LCAyNSwgNTUsIDU1LCA1NSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDI1LCAyNSwgMTgsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgCi0gICAgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCAwLCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDI1LCA1NSwgMTgsIDE4LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCAyNSwgMjUsIAotICAgIDE4LCAwLCAxOCwgMTgsIDI1LCAwLCAwLCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTUsIDU1LCAyNSwgMjUsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA1LCA1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMTgsIDE4LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCAwLCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMjUsIDU1LCAxOCwgMjUsIDE4LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMCwgMCwgMTgsIDE4LCAwLCAwLCAxOCwgMTgsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgCi0gICAgMTgsIDAsIDAsIDAsIDAsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgMjUsIDI1LCAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAKLSAgICAxMywgMTQsIDE1LCAxNiwgNSwgNTUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDI1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDAsIDAsIDAsIDU1LCA1NSwgMCwgNTUsIDAsIDU1LCA1NSwgMCwgMCwgMCwgNTUsIDU1LCAwLCAwLCAwLCA1NSwgNTUsIAotICAgIDU1LCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAKLSAgICAxOCwgMTgsIDI1LCAxOCwgMTgsIDAsIDAsIDAsIDE4LCAxOCwgMTgsIDAsIDE4LCAxOCwgMTgsIDI1LCAwLCAwLCA1NSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDgsIDksIDEwLCAKLSAgICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyNywgMjcsIDI3LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxOCwgMTgsIDE4LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDAsIAorICAgIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA1LCAxMDIsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAxOCwgMTgsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDAsIDU1LCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMjUsIDU1LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMCwgMCwgMTgsIDE4LCAwLCAwLCAxOCwgMTgsIDI1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIAorICAgIDAsIDAsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgMjUsIDI1LCAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIAorICAgIDE1LCAxNiwgNTUsIDU1LCA1LCA1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAyNSwgCisgICAgMjUsIDE4LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgMCwgMCwgMCwgNTUsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMTgsIDE4LCAwLCAyNSwgMjUsIDI1LCAwLCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAwLCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDU1LCA1NSwgMjUsIDI1LCAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDUsIDAsIDAsIDE4LCAxOCwgMCwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDI1LCA1NSwgMTgsIDI1LCAxOCwgCi0gICAgMTgsIDE4LCAxOCwgMTgsIDAsIDI1LCAxOCwgMTgsIDAsIDE4LCAxOCwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCAwLCA1NSwgNTUsIDI1LCAyNSwgMCwgMCwgNywgOCwgOSwgMTAsIAotICAgIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTgsIDE4LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDAsIDU1LCAKKyAgICA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgMCwgNTUsIDU1LCAwLCA1NSwgNTUsIDAsIDAsIAorICAgIDI1LCAwLCAxOCwgMTgsIDE4LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMCwgMCwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgCisgICAgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgCisgICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDI1LCAyNSwgNTUsIDU1LCA1NSwgMjUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMTgsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIAorICAgIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCAKKyAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDI1LCA1NSwgMTgsIDE4LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCAKKyAgICAyNSwgMjUsIDE4LCAwLCAxOCwgMTgsIDI1LCAwLCAwLCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNTUsIDU1LCAyNSwgMjUsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA1LCA1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDE4LCAxOCwgMCwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDI1LCA1NSwgMTgsIDI1LCAKKyAgICAxOCwgMjUsIDI1LCAyNSwgMjUsIDAsIDAsIDE4LCAxOCwgMCwgMCwgMTgsIDE4LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjUsIDE4LCAwLCAwLCAwLCAwLCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMCwgMCwgNywgOCwgOSwgMTAsIAorICAgIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDUsIDU1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDAsIAorICAgIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCA1NSwgNTUsIDAsIDU1LCAwLCA1NSwgNTUsIDAsIDAsIDAsIDU1LCA1NSwgMCwgMCwgCisgICAgMCwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMCwgMCwgMCwgMCwgMTgsIDE4LCAyNSwgMTgsIDE4LCAwLCAwLCAwLCAxOCwgMTgsIDE4LCAwLCAxOCwgMTgsIDE4LCAyNSwgCisgICAgMCwgMCwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjcsIDI3LCAyNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjUsIDE4LCAxOCwgMTgsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIAorICAgIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgNTUsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMTgsIDE4LCAwLCAKKyAgICAyNSwgMjUsIDI1LCAwLCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAwLCA1NSwgNTUsIAorICAgIDU1LCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDI1LCAyNSwgMCwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgCisgICAgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1LCAwLCAyNSwgMTgsIDE4LCAKKyAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCisgICAgMjUsIDU1LCAxOCwgMjUsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMCwgMjUsIDE4LCAxOCwgMCwgMTgsIDE4LCAyNSwgMjUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDAsIDU1LCA1NSwgMjUsIDI1LCAwLCAKKyAgICAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMTgsIDE4LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIAorICAgIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIDE4LCAxOCwgMTgsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAwLCAxOCwgMTgsIDE4LCAwLCAxOCwgMTgsIDE4LCAyNSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCAyNSwgMjUsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIAorICAgIDE2LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAxOCwgCisgICAgMTgsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDAsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMjUsIDAsIDAsIDAsIDAsIAorICAgIDE4LCAxOCwgMTgsIDI1LCAyNSwgMjUsIDAsIDI1LCAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAxOCwgMTgsIDUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDU1LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAyNSwgMCwgMTgsIDE4LCAxOCwgMCwgCi0gICAgMTgsIDE4LCAxOCwgMjUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTUsIDU1LCAyNSwgMjUsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAwLCAwLCAwLCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAxOCwgMTgsIDAsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIAorICAgIDU1LCAyNSwgNTUsIDEzOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDEwMiwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAKKyAgICAxMywgMTQsIDE1LCAxNiwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCAwLCAKKyAgICA1NSwgMCwgMCwgNTUsIDU1LCAwLCA1NSwgMCwgMCwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgMCwgNTUsIDAsIDU1LCAwLCAwLCA1NSwgNTUsIDAsIAorICAgIDU1LCA1NSwgNTUsIDU1LCAyNSwgNTUsIDEzOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMjUsIDI1LCA1NSwgMCwgMCwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAxMDIsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDAsIDcsIDgsIDksIDEwLCAKKyAgICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI1LCAKKyAgICAyNSwgNSwgNSwgNSwgNSwgNSwgNSwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1LCAyNSwgNSwgMjUsIDUsIDI1LCA1LCA1LCA1LCA1LCAxOCwgMTgsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCAwLCAKLSAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMjUsIDAsIDAsIDAsIDAsIDE4LCAxOCwgMTgsIDI1LCAKLSAgICAyNSwgMjUsIDAsIDI1LCAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAxOCwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDU1LCAxMzAsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCAwLCAwLCAwLCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA5NiwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNSwgNSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCAwLCA1NSwgMCwgMCwgNTUsIDU1LCAwLCA1NSwgCi0gICAgMCwgMCwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgMCwgNTUsIDU1LCA1NSwgMCwgNTUsIDAsIDU1LCAwLCAwLCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAyNSwgNTUsIAotICAgIDEzMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMjUsIDI1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAKLSAgICA5NiwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIAotICAgIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDI1LCA1LCA1LCA1LCA1LCA1LCA1LCA3LCAKLSAgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDUsIDI1LCA1LCAyNSwgNSwgMjUsIDUsIDUsIDUsIDUsIDE4LCAxOCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCAwLCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDE4LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDUsIDI1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTgsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgMjUsIDI1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDE4LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDE4LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAxOCwgMjUsIDI1LCAxOCwgMTgsIDI1LCAyNSwgNTUsIDcsIDgsIDksIDEwLCAxMSwgCi0gICAgMTIsIDEzLCAxNCwgMTUsIDE2LCA1LCA1LCA1LCA1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMTgsIDI1LCAKLSAgICAyNSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMjUsIDU1LCAxOCwgMTgsIDE4LCA1NSwgNTUsIDE4LCAxOCwgMTgsIDE4LCAKLSAgICAxOCwgMTgsIDE4LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAxOCwgMTgsIDI1LCAyNSwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDU1LCAKLSAgICAxOCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE4LCAxOCwgMTgsIDI1LCA1LCA1LCAxMzEsIDEzMSwgCi0gICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAotICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKLSAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDAsIDAsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDI1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDUsIDk2LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAxOCwgMTgsIDI1LCAyNSwgMjUsIDI1LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTgsIDI1LCAyNSwgMTgsIDE4LCAKKyAgICAyNSwgMjUsIDU1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNSwgNSwgNSwgNSwgNSwgNSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDE4LCAyNSwgMjUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCA1NSwgMTgsIAorICAgIDE4LCAxOCwgNTUsIDU1LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMTgsIDE4LCAyNSwgMjUsIAorICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDI1LCA1NSwgMTgsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAKKyAgICAxOCwgMTgsIDE4LCAyNSwgNSwgNSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKKyAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCisgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDAsIAorICAgIDEzOSwgMCwgMCwgMCwgMCwgMCwgMTM5LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNSwgMTAyLCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCkBAIC0xNzQyLDMxICsyNTU0LDMzIEBACiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAwLCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgMCwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCAKKyAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgCisgICAgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAyNSwgMjUsIDI1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgMCwgMCwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTQwLCAxNDEsIDE0MiwgCisgICAgMTQzLCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIAorICAgIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAKKyAgICAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgCisgICAgMTgyLCAxODMsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MywgMTk0LCAxOTUsIAorICAgIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAKKyAgICAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywgCisgICAgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDAsIDAsIDIzNSwgMjM2LCAKKyAgICAyMzcsIDIzOCwgMjM5LCAyNDAsIDAsIDAsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCkBAIC0xNzg2LDI4ICsyNjAwLDI4IEBACiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDUsIDUsIDUsIDE0MSwgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIAotICAgIDI1LCAyNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIAotICAgIDU1LCA1NSwgMCwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDUsIDUsIDUsIDI0MSwgMjQxLCAyNDEsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCAyNSwgMjUsIDI1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAKKyAgICA1NSwgNTUsIDU1LCAwLCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMTgsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDI1LCAxOCwgMTgsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgOTYsIDUsIDUsIDUsIDUsIDU1LCAyNSwgMCwgMCwgNywgCi0gICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICAyNSwgMjUsIDI1LCAyMSwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAyNSwgMTgsIDE4LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDUsIDUsIDUsIDEwMiwgNSwgNSwgNSwgNSwgNTUsIDI1LCAwLCAKKyAgICAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDI1LCAyNSwgMjUsIDIxLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDk2LCAKKyAgICAxMDIsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCA1NSwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCkBAIC0xODE1LDU5MCArMjYyOSwyNjcgQEAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAKLSAgICAxOCwgMTgsIDE4LCAxOCwgMjUsIDI1LCAxOCwgMTgsIDE4LCAwLCAwLCAwLCAwLCAxOCwgMTgsIDI1LCAxOCwgMTgsIDE4LCAKLSAgICAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCA1LCA1LCA3LCA4LCA5LCAxMCwgMTEsIAotICAgIDEyLCAxMywgMTQsIDE1LCAxNiwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDI1LCAyNSwgCisgICAgMjUsIDE4LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDE4LCAxOCwgMTgsIDAsIDAsIDAsIDAsIDE4LCAxOCwgMjUsIDE4LCAxOCwgCisgICAgMTgsIDE4LCAxOCwgMTgsIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDUsIDUsIDcsIDgsIDksIDEwLCAKKyAgICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIAotICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDE4LCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDEzMiwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAxOCwgMTgsIDI1LCAwLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMTgsIDE4LCAyNSwgMCwgMCwgNSwgNSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDI1LCAxOCwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDI1LCAxOCwgMjUsIDE4LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMCwgMCwgMjUsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA4LCA5LCAKLSAgICAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgOTYsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMjUsIAorICAgIDE4LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMjUsIDE4LCAyNSwgMTgsIDE4LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAwLCAwLCAyNSwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCAxMDIsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDE4LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAxOCwgMjUsIAotICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDE4LCAxOCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIAotICAgIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCAwLCAwLCAwLCAyNSwgMjUsIDE4LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDI1LCAxOCwgMjUsIDE4LCAxOCwgNTUsIDU1LCA3LCA4LCA5LCAKLSAgICAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMTgsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDE4LCAyNSwgCi0gICAgMjUsIDE4LCAxOCwgMTgsIDI1LCAxOCwgMjUsIDI1LCAyNSwgMTgsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCAKLSAgICA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAxOCwgMjUsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDE4LCAxOCwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDI1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAyNSwgMjUsIDE4LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTgsIAotICAgIDE4LCAyNSwgMjUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAKLSAgICAwLCAwLCAwLCA1NSwgNTUsIDU1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDI1LCAxOCwgMjUsIAorICAgIDI1LCAyNSwgNTUsIDU1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDk2LCA5NiwgOTYsIDk2LCA5NiwgOTYsIDUsIDUsIDAsIDAsIDAsIDAsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDI1LCAxOCwgMjUsIDI1LCAxOCwgMTgsIDE4LCAyNSwgMTgsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDI1LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA3LCA4LCA5LCAxMCwgCisgICAgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAKKyAgICAxNSwgMTYsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxMDIsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDE4LCAxOCwgMjUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIDI1LCA1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTgsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgMjUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMTgsIDI1LCA1NSwgNTUsIDAsIDI1LCAyNSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCiAgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDk1LCAxNDIsIDIwLCAyMCwgMjAsIDE0MywgMjAsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKLSAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIAorICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAKKyAgICAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgCisgICAgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIAorICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAKKyAgICAxMDEsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAxMDEsIDI0MiwgMjAsIAorICAgIDIwLCAyMCwgMjQzLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDEwMSwgMTAxLCAxMDEsIAorICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAKKyAgICAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgCisgICAgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDE0NCwgCi0gICAgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDIwLCAyMCwgMTUwLCAyMCwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAKLSAgICAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAKLSAgICAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAKLSAgICAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAKLSAgICAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAKLSAgICAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMTUxLCAxNTEsIAotICAgIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAKLSAgICAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAwLCAwLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAwLCAwLCAKLSAgICAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgCi0gICAgMTUyLCAxNTIsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTIsIDE1MiwgMTUyLCAxNTIsIAotICAgIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMCwgMCwgMTUyLCAxNTIsIDE1MiwgCi0gICAgMTUyLCAxNTIsIDE1MiwgMCwgMCwgMTUzLCAxNTEsIDE1NCwgMTUxLCAxNTUsIDE1MSwgMTU2LCAxNTEsIDAsIDE1MiwgMCwgCi0gICAgMTUyLCAwLCAxNTIsIDAsIDE1MiwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MiwgMTUyLCAKLSAgICAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTcsIDE1NywgMTU4LCAxNTgsIDE1OCwgMTU4LCAxNTksIDE1OSwgCi0gICAgMTYwLCAxNjAsIDE2MSwgMTYxLCAxNjIsIDE2MiwgMCwgMCwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAKLSAgICAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgCi0gICAgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIAotICAgIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMTUxLCAKLSAgICAxNTEsIDIxMSwgMjEyLCAyMTMsIDAsIDIxNCwgMjE1LCAxNTIsIDE1MiwgMjE2LCAyMTYsIDIxNywgNiwgMjE4LCA2LCA2LCAKLSAgICA2LCAyMTksIDIyMCwgMjIxLCAwLCAyMjIsIDIyMywgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjUsIDYsIDYsIDYsIDE1MSwgCi0gICAgMTUxLCAyMjYsIDIyNywgMCwgMCwgMjI4LCAyMjksIDE1MiwgMTUyLCAyMzAsIDIzMCwgMCwgNiwgNiwgNiwgMTUxLCAxNTEsIAotICAgIDIzMSwgMjMyLCAyMzMsIDExOSwgMjM0LCAyMzUsIDE1MiwgMTUyLCAyMzYsIDIzNiwgMTIyLCA2LCA2LCA2LCAwLCAwLCAKLSAgICAyMzcsIDIzOCwgMjM5LCAwLCAyNDAsIDI0MSwgMjQyLCAyNDIsIDI0MywgMjQzLCAyNDQsIDYsIDYsIDAsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIxLCAyMSwgMjEsIDIxLCAyMSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgNiwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgNSwgNSwgNiwgMywgMywgMjEsIDIxLCAyMSwgMjEsIDIxLCAyLCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgMTgsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyNDUsIDk1LCAwLCAwLCAKLSAgICAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCA1LCA1LCA1LCA1LCA1LCA5NSwgMjQ1LCAyNiwgMjIsIDIzLCAyNDYsIAotICAgIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCA1LCA1LCA1LCA1LCA1LCAwLCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCi0gICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDYsIDYsIDYsIDYsIDI1LCA2LCA2LCA2LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCAxMTMsIDUsIDUsIAotICAgIDUsIDUsIDExMywgNSwgNSwgMjAsIDExMywgMTEzLCAxMTMsIDIwLCAyMCwgMTEzLCAxMTMsIDExMywgMjAsIDUsIDExMywgNSwgCi0gICAgNSwgMjUyLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgNSwgNSwgNSwgNSwgNSwgNSwgMTEzLCA1LCAyNTMsIDUsIDExMywgCi0gICAgNSwgMjU0LCAyNTUsIDExMywgMTEzLCAyNTIsIDIwLCAxMTMsIDExMywgMjU2LCAxMTMsIDIwLCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgMjAsIDUsIDUsIDIwLCAyMCwgMTEzLCAxMTMsIDUsIDUsIDUsIDUsIDUsIDExMywgMjAsIDIwLCAyMCwgMjAsIDUsIDUsIDUsIAotICAgIDUsIDI1NywgNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAyNTgsIDI1OCwgMjU4LCAKLSAgICAyNTgsIDI1OCwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgCi0gICAgMjU5LCAyNTksIDI1OSwgMjU5LCAxNDEsIDE0MSwgMTQxLCAzMCwgMzEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMjcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyMiwgMjMsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAKLSAgICAyNTEsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjYsIDIyLCAyMywgMjQ2LCAyNDcsIAotICAgIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNiwgMjIsIAotICAgIDIzLCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjQ1LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjYsIDIyLCAyMywgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjcsIAotICAgIDI0NSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjYsIAotICAgIDIyLCAyMywgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjcsIDI2LCAyMiwgMjMsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgCi0gICAgMjUwLCAyNTEsIDI3LCAyNiwgMjIsIDIzLCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNywgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIAotICAgIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAKLSAgICAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgCi0gICAgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAwLCAzMCwgMzEsIDI2MiwgMjYzLCAKLSAgICAyNjQsIDI2NSwgMjY2LCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAyNjcsIDI2OCwgMjY5LCAyNzAsIDIwLCAzMCwgMzEsIAotICAgIDIwLCAzMCwgMzEsIDIwLCAyMCwgMjAsIDIwLCAyMCwgOTUsIDk1LCAyNzEsIDI3MSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDIwLCA1LCA1LCA1LCA1LCA1LCA1LCAzMCwgMzEsIDMwLCAzMSwgMjUsIDI1LCAyNSwgMzAsIDMxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCAyNywgNSwgNSwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKLSAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCi0gICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAotICAgIDI3MiwgMjcyLCAyNzIsIDAsIDI3MiwgMCwgMCwgMCwgMCwgMCwgMjcyLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDk2LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjczLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDIwLCAyMCwgMjUwLCAyMCwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMjUxLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MiwgMjUyLCAyNTIsIDI1MiwgCisgICAgMjUyLCAyNTIsIDI1MiwgMjUyLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMjUxLCAwLCAwLCAyNTIsIDI1MiwgMjUyLCAKKyAgICAyNTIsIDI1MiwgMjUyLCAwLCAwLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMjUyLCAyNTIsIAorICAgIDI1MiwgMjUyLCAyNTIsIDI1MiwgMjUyLCAyNTIsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMjUxLCAKKyAgICAyNTIsIDI1MiwgMjUyLCAyNTIsIDI1MiwgMjUyLCAyNTIsIDI1MiwgMjUxLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMCwgCisgICAgMCwgMjUyLCAyNTIsIDI1MiwgMjUyLCAyNTIsIDI1MiwgMCwgMCwgMjUzLCAyNTEsIDI1NCwgMjUxLCAyNTUsIDI1MSwgMjU2LCAKKyAgICAyNTEsIDAsIDI1MiwgMCwgMjUyLCAwLCAyNTIsIDAsIDI1MiwgMjUxLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMjUxLCAKKyAgICAyNTEsIDI1MiwgMjUyLCAyNTIsIDI1MiwgMjUyLCAyNTIsIDI1MiwgMjUyLCAyNTcsIDI1NywgMjU4LCAyNTgsIDI1OCwgCisgICAgMjU4LCAyNTksIDI1OSwgMjYwLCAyNjAsIDI2MSwgMjYxLCAyNjIsIDI2MiwgMCwgMCwgMjYzLCAyNjQsIDI2NSwgMjY2LCAKKyAgICAyNjcsIDI2OCwgMjY5LCAyNzAsIDI3MSwgMjcyLCAyNzMsIDI3NCwgMjc1LCAyNzYsIDI3NywgMjc4LCAyNzksIDI4MCwgCisgICAgMjgxLCAyODIsIDI4MywgMjg0LCAyODUsIDI4NiwgMjg3LCAyODgsIDI4OSwgMjkwLCAyOTEsIDI5MiwgMjkzLCAyOTQsIAorICAgIDI5NSwgMjk2LCAyOTcsIDI5OCwgMjk5LCAzMDAsIDMwMSwgMzAyLCAzMDMsIDMwNCwgMzA1LCAzMDYsIDMwNywgMzA4LCAKKyAgICAzMDksIDMxMCwgMjUxLCAyNTEsIDMxMSwgMzEyLCAzMTMsIDAsIDMxNCwgMzE1LCAyNTIsIDI1MiwgMzE2LCAzMTYsIDMxNywgCisgICAgNiwgMzE4LCA2LCA2LCA2LCAzMTksIDMyMCwgMzIxLCAwLCAzMjIsIDMyMywgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjUsIDYsIAorICAgIDYsIDYsIDI1MSwgMjUxLCAzMjYsIDMyNywgMCwgMCwgMzI4LCAzMjksIDI1MiwgMjUyLCAzMzAsIDMzMCwgMCwgNiwgNiwgNiwgCisgICAgMjUxLCAyNTEsIDMzMSwgMzMyLCAzMzMsIDEyNiwgMzM0LCAzMzUsIDI1MiwgMjUyLCAzMzYsIDMzNiwgMTMwLCA2LCA2LCA2LCAKKyAgICAwLCAwLCAzMzcsIDMzOCwgMzM5LCAwLCAzNDAsIDM0MSwgMzQyLCAzNDIsIDM0MywgMzQzLCAzNDQsIDYsIDYsIDAsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIxLCAyMSwgMjEsIDIxLCAyMSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgCisgICAgNiwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgNSwgNSwgNiwgMywgMywgMjEsIDIxLCAyMSwgMjEsIDIxLCAyLCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgMTgsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAzNDUsIDEwMSwgCisgICAgMCwgMCwgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgNSwgNSwgNSwgNSwgNSwgMTAxLCAzNDUsIDI2LCAyMiwgMjMsIAorICAgIDM0NiwgMzQ3LCAzNDgsIDM0OSwgMzUwLCAzNTEsIDUsIDUsIDUsIDUsIDUsIDAsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAKKyAgICAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDYsIDYsIDYsIDYsIDI1LCA2LCA2LCA2LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1LCA1LCAxMjAsIDUsIDUsIDUsIDUsIDEyMCwgNSwgNSwgMjAsIDEyMCwgMTIwLCAxMjAsIDIwLCAyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMjAsIDUsIDEyMCwgNSwgNSwgMzUyLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgMTIwLCA1LCAzNTMsIDUsIDEyMCwgNSwgMzU0LCAzNTUsIDEyMCwgMTIwLCAzNTIsIDIwLCAxMjAsIDEyMCwgMzU2LCAxMjAsIAorICAgIDIwLCA1NSwgNTUsIDU1LCA1NSwgMjAsIDUsIDUsIDIwLCAyMCwgMTIwLCAxMjAsIDUsIDUsIDUsIDUsIDUsIDEyMCwgMjAsIAorICAgIDIwLCAyMCwgMjAsIDUsIDUsIDUsIDUsIDM1NywgNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDM1OCwgMzU4LCAzNTgsIDM1OCwgMzU4LCAzNTgsIDM1OCwgMzU4LCAzNTgsIDM1OCwgCisgICAgMzU4LCAzNTgsIDM1OCwgMzU4LCAzNTgsIDM1OCwgMzU5LCAzNTksIDM1OSwgMzU5LCAzNTksIDM1OSwgMzU5LCAzNTksIAorICAgIDM1OSwgMzU5LCAzNTksIDM1OSwgMzU5LCAzNTksIDM1OSwgMzU5LCAyNDEsIDI0MSwgMjQxLCAzMCwgMzEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjcsIDUsIDUsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDIsIDUsIDUsIDUsIDUsIDk2LCA1NSwgMTQxLCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAyNSwgMjUsIDI1LCAyNSwgMTgsIDE4LCA1LCA5NiwgCi0gICAgOTYsIDk2LCA5NiwgOTYsIDUsIDUsIDE0MSwgMTQxLCAxNDEsIDk2LCA1NSwgNSwgNSwgNSwgMCwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAyNSwgMjUsIDYsIDYsIDk2LCA5NiwgNTUsIAotICAgIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDUsIDk2LCA5NiwgOTYsIDU1LCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCAwLCA1LCA1LCAyNywgMjcsIDI3LCAyNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDIyLCAyMywgMzQ2LCAKKyAgICAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNiwgCisgICAgMjIsIDIzLCAzNDYsIDM0NywgMzQ4LCAzNDksIDM1MCwgMzUxLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI2LCAyMiwgMjMsIDM0NiwgMzQ3LCAzNDgsIDM0OSwgMzUwLCAzNTEsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMzYwLCAzNjAsIDM2MCwgMzYwLCAzNjAsIDM2MCwgMzYwLCAzNjAsIDM2MCwgMzYwLCAKKyAgICAzNjAsIDM2MCwgMzYwLCAzNjAsIDM2MCwgMzYwLCAzNjAsIDM2MCwgMzYwLCAzNjAsIDM2MCwgMzYwLCAzNjAsIDM2MCwgCisgICAgMzYwLCAzNjAsIDM2MSwgMzYxLCAzNjEsIDM2MSwgMzYxLCAzNjEsIDM2MSwgMzYxLCAzNjEsIDM2MSwgMzYxLCAzNjEsIAorICAgIDM2MSwgMzYxLCAzNjEsIDM2MSwgMzYxLCAzNjEsIDM2MSwgMzYxLCAzNjEsIDM2MSwgMzYxLCAzNjEsIDM2MSwgMzYxLCAKKyAgICAzNDUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNiwgMjIsIDIzLCAzNDYsIDM0NywgMzQ4LCAKKyAgICAzNDksIDM1MCwgMzUxLCAyNywgMzQ1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyNzQsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCAyNzQsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgMjc0LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgMjc0LCA1NSwgMjc0LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDI3NCwgMjc0LCAyNzQsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDI3NCwgMjc0LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA5NiwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgOTYsIDk2LCA5NiwgOTYsIDk2LCA5NiwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgOTYsIDUsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNTUsIDU1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgCi0gICAgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgNTUsIDI1LCA2LCA2LCA2LCA1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgNSwgOTYsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKLSAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCA1NSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgMjYsIDIyLCAyMywgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMjcsIDI2LCAyMiwgCisgICAgMjMsIDM0NiwgMzQ3LCAzNDgsIDM0OSwgMzUwLCAzNTEsIDI3LCAyNiwgMjIsIDIzLCAzNDYsIDM0NywgMzQ4LCAzNDksIAorICAgIDM1MCwgMzUxLCAyNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAKKyAgICAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgCisgICAgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAwLCAKKyAgICAzMCwgMzEsIDM2MiwgMzYzLCAzNjQsIDM2NSwgMzY2LCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzNjcsIDM2OCwgMzY5LCAKKyAgICAzNzAsIDIwLCAzMCwgMzEsIDIwLCAzMCwgMzEsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMTAxLCAxMDEsIDM3MSwgMzcxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMjAsIDUsIDUsIDUsIDUsIDUsIDUsIDMwLCAzMSwgMzAsIDMxLCAKKyAgICAyNSwgMjUsIDI1LCAzMCwgMzEsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDI3LCA1LCA1LCAzNzIsIDM3MiwgMzcyLCAKKyAgICAzNzIsIDM3MiwgMzcyLCAzNzIsIDM3MiwgMzcyLCAzNzIsIDM3MiwgMzcyLCAzNzIsIDM3MiwgMzcyLCAzNzIsIDM3MiwgCisgICAgMzcyLCAzNzIsIDM3MiwgMzcyLCAzNzIsIDM3MiwgMzcyLCAzNzIsIDM3MiwgMzcyLCAzNzIsIDM3MiwgMzcyLCAzNzIsIAorICAgIDM3MiwgMzcyLCAzNzIsIDM3MiwgMzcyLCAzNzIsIDM3MiwgMCwgMzcyLCAwLCAwLCAwLCAwLCAwLCAzNzIsIDAsIDAsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDI1LCAyNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgCi0gICAgNiwgNiwgNiwgNiwgNiwgOTYsIDk2LCA5NiwgOTYsIDk2LCA5NiwgOTYsIDk2LCA5NiwgNiwgNiwgMzAsIDMxLCAzMCwgMzEsIAotICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAyMCwgMjAsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAotICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAotICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAotICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAotICAgIDMwLCAzMSwgOTUsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMzAsIDMxLCAzMCwgMzEsIDI3NSwgMzAsIDMxLCAKLSAgICAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDk2LCA2LCA2LCAzMCwgMzEsIDI3NiwgMjAsIDAsIDMwLCAzMSwgMzAsIAotICAgIDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAotICAgIDMwLCAzMSwgMjc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMzczLCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NSwgOTUsIDIwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIAotICAgIDU1LCA1NSwgNTUsIDI1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDE4LCAyNSwgMjUsIAotICAgIDE4LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMiwgNSwgCisgICAgNSwgNSwgNSwgMTAyLCA1NSwgMjQxLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMTgsIDE4LCA1LCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgNSwgNSwgMjQxLCAyNDEsIDI0MSwgMTAyLCAKKyAgICA1NSwgNSwgNSwgNSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMTgsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAKLSAgICAxOCwgMTgsIDE4LCAxOCwgMTgsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA3LCA4LCA5LCAxMCwgMTEsIAotICAgIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNSwgNSwgNSwgNTUsIAotICAgIDAsIDAsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTgsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDI1LCAKLSAgICAyNSwgMjUsIDE4LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAxOCwgMTgsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAxOCwgMTgsIDI1LCAxOCwgMTgsIDE4LCAxOCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgMCwgOTYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCA1LCA1LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIAotICAgIDI1LCAxOCwgMTgsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgMjUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDE4LCAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAKLSAgICAxNiwgMCwgMCwgNSwgNSwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDk2LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1LCA1LCA1LCA1NSwgMTgsIDAsIDAsIDAsIDAsIDU1LCAKKyAgICAwLCAwLCAyNSwgMjUsIDYsIDYsIDEwMiwgMTAyLCA1NSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgNTUsIDI1LCAyNSwgMjUsIDU1LCA1NSwgCi0gICAgMjUsIDI1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgNTUsIDI1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA5NiwgNSwgNSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMjUsIDI1LCAxOCwgMTgsIDUsIDUsIDU1LCA5NiwgOTYsIAotICAgIDE4LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDE4LCAxOCwgMjUsIAotICAgIDE4LCAxOCwgMjUsIDE4LCAxOCwgNSwgMTgsIDI1LCAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1LCAxMDIsIDEwMiwgMTAyLCA1NSwgMCwgMCwgMCwgMCwgMCwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNSwgNSwgMjcsIDI3LCAyNywgMjcsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIAotICAgIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDI3NCwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMjc4LCAyNzksIDI4MCwgMjgxLCAyODIsIDI4MywgMjg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyODUsIDI4NiwgMjg3LCAyODgsIDI4OSwgMCwgMCwgMCwgMCwgMCwgNTUsIDI1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDAsIDU1LCA1NSwgMCwgNTUsIDU1LCAwLCAKKyAgICAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIApAQCAtMjQwNiwxOTggKzI4OTcsNjM5IEBACiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCAyOTAsIDI5MCwgMjkwLCAyOTAsIDI5MCwgMjkwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgMjkwLCAyOTAsIDUsIDUsIDAsIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCA1LCA2LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgMTgsIDE4LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgMTgsIAotICAgIDE4LCA1LCA1LCA2LCAwLCA1LCA2LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICAwLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAyOTAsIDU1LCAyOTAsIDU1LCAyOTAsIDAsIDI5MCwgNTUsIDI5MCwgNTUsIAotICAgIDI5MCwgNTUsIDI5MCwgNTUsIDI5MCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMjEsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDYsIDUsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA2LCA1LCA1LCA1LCA1LCA1LCA1LCAxNywgCi0gICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCi0gICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDUsIDUsIDYsIDE4LCA2LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA5NiwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjkxLCAyOTEsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAKLSAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIAotICAgIDU1LCAwLCAwLCAwLCA1LCA1LCA1LCA2LCA1LCA1LCA1LCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCA1LCA1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDAsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKLSAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDI3LCAyNywgMjcsIDI3LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCAyNywgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDAsIDAsIDU1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAzNzQsIAorICAgIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDM3NCwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCAzNzQsIDU1LCAzNzQsIDM3NCwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCAzNzQsIDM3NCwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCAzNzQsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMzc0LCAzNzQsIDM3NCwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTAyLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgMCwgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTQxLCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAKKyAgICAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgMTAyLCA1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIAorICAgIDMxLCAzMCwgMzEsIDU1LCAyNSwgNiwgNiwgNiwgNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDUsIDEwMiwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIAorICAgIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDEwMSwgMTAxLCAyNSwgMjUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI1LCAyNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgCisgICAgNiwgNiwgNiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgNiwgNiwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAyMCwgMjAsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgCisgICAgMzEsIDMwLCAzMSwgMTAxLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDMwLCAzMSwgMzAsIDMxLCAzNzUsIDMwLCAKKyAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAxMDIsIDYsIDYsIDMwLCAzMSwgMzc2LCAyMCwgNTUsIDMwLCAKKyAgICAzMSwgMzAsIDMxLCAyMCwgMjAsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAKKyAgICAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzc3LCAzNzgsIDM3OSwgMzgwLCAwLCAwLCAzODEsIDM4MiwgMzgzLCAzODQsIAorICAgIDMwLCAzMSwgMzAsIDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCAxMDEsIDEwMSwgCisgICAgMjAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgNTUsIDU1LCA1NSwgMjUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDAsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDE4LCAxOCwgMjUsIDI1LCAxOCwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1LCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTgsIDE4LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDE4LCAxOCwgCisgICAgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAyNSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDUsIDUsIDUsIDU1LCA1LCA1NSwgMCwgMCwgNywgOCwgOSwgMTAsIDExLCAKKyAgICAxMiwgMTMsIDE0LCAxNSwgMTYsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAxOCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMTgsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDE4LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDE4LCAKKyAgICAxOCwgMTgsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAxMDIsIDcsIDgsIDksIDEwLCAKKyAgICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAxMDIsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTgsIAorICAgIDE4LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCAyNSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMTgsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAKKyAgICAxNCwgMTUsIDE2LCAwLCAwLCA1LCA1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTAyLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1LCA1LCA1LCA1NSwgMTgsIDI1LCAxOCwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgNTUsIDI1LCAyNSwgCisgICAgMjUsIDU1LCA1NSwgMjUsIDI1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgNTUsIDI1LCA1NSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCAxMDIsIAorICAgIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDI1LCAyNSwgMTgsIDE4LCA1LCAKKyAgICA1LCA1NSwgMTAyLCAxMDIsIDE4LCAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDM4NSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDYsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzg2LCAzODcsIDM4OCwgMzg5LCAzOTAsIAorICAgIDM5MSwgMzkyLCAzOTMsIDM5NCwgMzk1LCAzOTYsIDM5NywgMzk4LCAzOTksIDQwMCwgNDAxLCA0MDIsIDQwMywgNDA0LCAKKyAgICA0MDUsIDQwNiwgNDA3LCA0MDgsIDQwOSwgNDEwLCA0MTEsIDQxMiwgNDEzLCA0MTQsIDQxNSwgNDE2LCA0MTcsIDQxOCwgCisgICAgNDE5LCA0MjAsIDQyMSwgNDIyLCA0MjMsIDQyNCwgNDI1LCA0MjYsIDQyNywgNDI4LCA0MjksIDQzMCwgNDMxLCA0MzIsIAorICAgIDQzMywgNDM0LCA0MzUsIDQzNiwgNDM3LCA0MzgsIDQzOSwgNDQwLCA0NDEsIDQ0MiwgNDQzLCA0NDQsIDQ0NSwgNDQ2LCAKKyAgICA0NDcsIDQ0OCwgNDQ5LCA0NTAsIDQ1MSwgNDUyLCA0NTMsIDQ1NCwgNDU1LCA0NTYsIDQ1NywgNDU4LCA0NTksIDQ2MCwgCisgICAgNDYxLCA0NjIsIDQ2MywgNDY0LCA0NjUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDE4LCAyNSwgMTgsIDE4LCAyNSwgMTgsIDE4LCA1LCAxOCwgMjUsIDAsIDAsIDcsIAorICAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2NiwgNDY3LCA0NjgsIDQ2OSwgCisgICAgNDcwLCA0NzEsIDQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDczLCA0NzQsIDQ3NSwgNDc2LCAKKyAgICA0NzcsIDAsIDAsIDAsIDAsIDAsIDU1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDAsIDU1LCAwLCA1NSwgNTUsIDAsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgCisgICAgNiwgNiwgNiwgNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDQ3OCwgNDc4LCA0NzgsIDQ3OCwgNDc4LCA0NzgsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgCi0gICAgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIAotICAgIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MiwgMjkyLCAyOTIsIDI5MywgMjkzLCAKLSAgICAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgCi0gICAgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIAotICAgIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDQ3OCwgNDc4LCA1LCA1LCAwLCAwLCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgNiwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDUsIDUsIDUsIDE4LCAxOCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTgsIDE4LCAxOCwgNSwgNSwgNiwgMCwgNSwgNiwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgCisgICAgNDc4LCA1NSwgNDc4LCA1NSwgNDc4LCAwLCA0NzgsIDU1LCA0NzgsIDU1LCA0NzgsIDU1LCA0NzgsIDU1LCA0NzgsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgMCwgNTUsIDU1LCAwLCAwLCAwLCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAwLCAwLCAwLCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDUsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIAorICAgIDIxLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA2LCA1LCA1LCA1LCA1LCA1LCA1LCA2LCA1LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAKKyAgICAxMywgMTQsIDE1LCAxNiwgNiwgNSwgNSwgNSwgNSwgNSwgNSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA1LCA1LCAKKyAgICA1LCA2LCAxOCwgNiwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTAyLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIAotICAgIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgMjUsIDI1LCAyNSwgMCwgMjUsIAotICAgIDI1LCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAyNSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDAsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA0NzksIDQ3OSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMjUsIAotICAgIDI2LCAyMiwgMjMsIDI0NiwgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCAwLCAwLCAwLCA1LCA1LCA1LCA2LCA1LCA1LCA1LCAwLCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCA1LCA1LCAwLCAwLCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCAyNywgMjcsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjIsIDIzLCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMCwgMTgsIDI1LCAxOCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAyNiwgMjIsIDIzLCAyNDYsIDI0NywgMjQ4LCAKLSAgICAyNDksIDI1MCwgMjUxLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDcsIDgsIDksIDEwLCAKLSAgICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNSwgMjUsIDE4LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMTgsIDE4LCAyNSwgMjUsIDUsIDUsIDIxLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgOCwgOSwgMTAsIAotICAgIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMTgsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgCi0gICAgMTYsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNywgMjcsIDI3LCAyNywgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjcsIDI3LCA1LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIDE4LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDI1LCAxOCwgMTgsIDU1LCA1NSwgNTUsIDU1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDI0MSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNDEsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCAwLCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDUsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODAsIDQ4MCwgCisgICAgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIAorICAgIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCAKKyAgICA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgCisgICAgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0ODEsIAorICAgIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNDgxLCAKKyAgICA0ODEsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0ODEsIDQ4MSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNywgCisgICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDAsIDU1LCA1NSwgMCwgMCwgMCwgNTUsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNSwgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDUsIDUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgNSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDI3LCAyNywgNTUsIDU1LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDU1LCAyNSwgMjUsIDI1LCAwLCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCisgICAgMCwgMCwgMjUsIDI1LCAyNSwgMCwgMCwgMCwgMCwgMjUsIDI2LCAyMiwgMjMsIDM0NiwgMjcsIDI3LCAyNywgMjcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjcsIDI3LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMCwgMCwgMCwgCisgICAgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOCwgMTA4LCAKKyAgICAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgCisgICAgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIAorICAgIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAKKyAgICAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI2LCAyMiwgMjMsIDM0NiwgMzQ3LCAzNDgsIDM0OSwgMzUwLCAzNTEsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAwLCAxOCwgMjUsIDE4LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDI2LCAyMiwgMjMsIDM0NiwgMzQ3LCAzNDgsIDM0OSwgMzUwLCAKKyAgICAzNTEsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIAorICAgIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDE4LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAyNSwgMTgsIDE4LCAKKyAgICAyNSwgMjUsIDUsIDUsIDIxLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIAorICAgIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMTgsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDUsIDUsIDUsIAorICAgIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDUsIDUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNSwgMjUsIDE4LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMTgsIAorICAgIDE4LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAxOCwgMTgsIDU1LCA1NSwgNTUsIDU1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCAyNSwgMjUsIDI1LCA1LCAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNTUsIDUsIAorICAgIDU1LCA1LCA1LCA1LCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDI1LCAxOCwgMTgsIDI1LCAxOCwgMjUsIDI1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAyNSwgMTgsIDE4LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCA3LCA4LCA5LCAKKyAgICAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAxOCwgMTgsIDAsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgNTUsIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAyNSwgNTUsIDE4LCAKKyAgICAxOCwgMjUsIDE4LCAxOCwgMTgsIDE4LCAwLCAwLCAxOCwgMTgsIDAsIDAsIDE4LCAxOCwgMTgsIDAsIDAsIDU1LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCAxOCwgMTgsIDAsIDAsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDE4LCAxOCwgMTgsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDE4LCAyNSwgMTgsIDE4LCAxOCwgMTgsIDI1LCAyNSwgMTgsIDI1LCAyNSwgNTUsIDU1LCAKKyAgICA1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgMTgsIDE4LCAxOCwgMjUsIDI1LCAyNSwgMjUsIDAsIDAsIDE4LCAxOCwgMTgsIDE4LCAyNSwgMjUsIDE4LCAyNSwgCisgICAgMjUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDE4LCAxOCwgMTgsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMTgsIDE4LCAyNSwgMTgsIDI1LCAyNSwgNSwgNSwgNSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAorICAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDE4LCAyNSwgMTgsIDE4LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAxOCwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIDE4LCAKKyAgICAxOCwgMjUsIDI1LCAyNSwgMjUsIDE4LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgCisgICAgMTIsIDEzLCAxNCwgMTUsIDE2LCAyNywgMjcsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDE5LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMCwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKLSAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKLSAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKLSAgICAxNDEsIDE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAKQEAgLTI2MDcsMjk3ICszNTM5LDM3OSBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNywgOCwgOSwgMTAsIDExLCAKKyAgICAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTAyLCAxMDIsIDEwMiwgMTAyLCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDE4LCAxOCwgMTgsIDE4LCAxOCwgCisgICAgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIAogICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIAogICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIAotICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIAotICAgIDI1LCAyNSwgMjUsIDk2LCA5NiwgOTYsIDk2LCA5NiwgOTYsIDk2LCA5NiwgOTYsIDk2LCA5NiwgOTYsIDk2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDAsIAorICAgIDE4LCAxOCwgMTgsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgMTgsIDI1LCAyNSwgMjUsIAotICAgIDUsIDUsIDUsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgMjUsIDI1LCAyNSwgMjUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI1LCAyNSwgMjUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMTEzLCAwLCAxMTMsIDExMywgMCwgMCwgMTEzLCAwLCAwLCAKLSAgICAxMTMsIDExMywgMCwgMCwgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMjAsIDIwLCAyMCwgMjAsIDAsIDIwLCAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAotICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAxMTMsIDExMywgMCwgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAwLCAwLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMCwgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAotICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDExMywgMTEzLCAwLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAxMTMsIDAsIDAsIDAsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAotICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAotICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDAsIDAsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgNSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDUsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgNSwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKLSAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDUsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgNSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAotICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDUsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgNSwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCi0gICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDUsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgNSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAotICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAotICAgIDUsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDExMywgMjAsIDAsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgCi0gICAgMTUsIDE2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAKLSAgICAxNSwgMTYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIAotICAgIDE1LCAxNiwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCAKLSAgICA1NSwgMCwgNTUsIDAsIDAsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDAsIDU1LCAwLCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDAsIDAsIDAsIDAsIDU1LCAwLCA1NSwgMCwgCi0gICAgNTUsIDAsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgMCwgNTUsIDAsIDAsIDU1LCAwLCA1NSwgMCwgNTUsIDAsIDU1LCAwLCAKLSAgICA1NSwgMCwgNTUsIDU1LCAwLCA1NSwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1LCAyNDUsIDI2LCAyMiwgMjMsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgCi0gICAgMjUwLCAyNTEsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIAotICAgIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIAotICAgIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjc0LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI3NCwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCi0gICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCA1LCAyNSwgMjUsIDUsIDIxLCAKKyAgICAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIAorICAgIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE4LCAxOCwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgMTgsIAorICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyNSwgMjUsIDI1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMjUsIDUsIDUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDI1LCAyNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAxMjAsIDAsIDEyMCwgMTIwLCAwLCAwLCAxMjAsIDAsIDAsIDEyMCwgMTIwLCAwLCAwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMCwgMjAsIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDEyMCwgMTIwLCAwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDAsIDAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMTIwLCAxMjAsIDAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDAsIDEyMCwgMCwgMCwgMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMCwgMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCA1LCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgNSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCA1LCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgNSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCA1LCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgNSwgMjAsIDIwLCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCA1LCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIAorICAgIDIwLCAyMCwgMjAsIDIwLCAyMCwgNSwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCA1LCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgCisgICAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgNSwgMjAsIDIwLCAKKyAgICAyMCwgMjAsIDIwLCAyMCwgMTIwLCAyMCwgMCwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDcsIDgsIAorICAgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgNywgOCwgCisgICAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgNSwgNSwgNSwgNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCAyNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAyNSwgMjUsIAorICAgIDI1LCAyNSwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCisgICAgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDAsIDU1LCAwLCAwLCA1NSwgMCwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgMCwgNTUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDU1LCAwLCAwLCAwLCAwLCA1NSwgMCwgNTUsIDAsIDU1LCAwLCA1NSwgNTUsIDU1LCAwLCA1NSwgCisgICAgNTUsIDAsIDU1LCAwLCAwLCA1NSwgMCwgNTUsIDAsIDU1LCAwLCA1NSwgMCwgNTUsIDAsIDU1LCA1NSwgMCwgNTUsIDAsIDAsIAorICAgIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCAwLCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTUsIDU1LCA1NSwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM0NSwgMzQ1LCAyNiwgMjIsIDIzLCAzNDYsIDM0NywgMzQ4LCAzNDksIDM1MCwgMzUxLCAyNywgMjcsIDAsIDAsIDAsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgCisgICAgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIAorICAgIDQ4MiwgNDgyLCA1LCA1LCA1LCA1LCA1LCA1LCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCAKKyAgICA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgCisgICAgNDgyLCA0ODIsIDQ4MiwgNSwgNSwgMCwgMCwgMCwgMCwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIAorICAgIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCAKKyAgICA0ODIsIDQ4MiwgNDgyLCA0ODIsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIDYsIDYsIDYsIDYsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCAzNzQsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDM3NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAzNzQsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCAzNzQsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMzc0LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCisgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKICAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKICAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKICAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKICAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKQEAgLTI5MTAsMTMgKzM5MjQsMTMgQEAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAorICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCiAgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgCiB9OwogCiAvKiBSZXR1cm5zIHRoZSBudW1lcmljIHZhbHVlIGFzIGRvdWJsZSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzCkBAIC0yOTQxLDYgKzM5NTUsNyBAQAogICAgIGNhc2UgMHgwQzc4OgogICAgIGNhc2UgMHgwQ0U2OgogICAgIGNhc2UgMHgwRDY2OgorICAgIGNhc2UgMHgwREU2OgogICAgIGNhc2UgMHgwRTUwOgogICAgIGNhc2UgMHgwRUQwOgogICAgIGNhc2UgMHgwRjIwOgpAQCAtMjk2OSw2ICszOTg0LDcgQEAKICAgICBjYXNlIDB4QThEMDoKICAgICBjYXNlIDB4QTkwMDoKICAgICBjYXNlIDB4QTlEMDoKKyAgICBjYXNlIDB4QTlGMDoKICAgICBjYXNlIDB4QUE1MDoKICAgICBjYXNlIDB4QUJGMDoKICAgICBjYXNlIDB4RjlCMjoKQEAgLTI5NzksNyArMzk5NSwxNCBAQAogICAgIGNhc2UgMHgxMTBGMDoKICAgICBjYXNlIDB4MTExMzY6CiAgICAgY2FzZSAweDExMUQwOgorICAgIGNhc2UgMHgxMTJGMDoKKyAgICBjYXNlIDB4MTE0RDA6CisgICAgY2FzZSAweDExNjUwOgogICAgIGNhc2UgMHgxMTZDMDoKKyAgICBjYXNlIDB4MTE3MzA6CisgICAgY2FzZSAweDExOEUwOgorICAgIGNhc2UgMHgxNkE2MDoKKyAgICBjYXNlIDB4MTZCNTA6CiAgICAgY2FzZSAweDFEN0NFOgogICAgIGNhc2UgMHgxRDdEODoKICAgICBjYXNlIDB4MUQ3RTI6CkBAIC0yOTg3LDYgKzQwMTAsOCBAQAogICAgIGNhc2UgMHgxRDdGNjoKICAgICBjYXNlIDB4MUYxMDA6CiAgICAgY2FzZSAweDFGMTAxOgorICAgIGNhc2UgMHgxRjEwQjoKKyAgICBjYXNlIDB4MUYxMEM6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAwLjA7CiAgICAgY2FzZSAweDAwMzE6CiAgICAgY2FzZSAweDAwQjk6CkBAIC0zMDA0LDYgKzQwMjksNyBAQAogICAgIGNhc2UgMHgwQzdDOgogICAgIGNhc2UgMHgwQ0U3OgogICAgIGNhc2UgMHgwRDY3OgorICAgIGNhc2UgMHgwREU3OgogICAgIGNhc2UgMHgwRTUxOgogICAgIGNhc2UgMHgwRUQxOgogICAgIGNhc2UgMHgwRjIxOgpAQCAtMzA0Nyw2ICs0MDczLDcgQEAKICAgICBjYXNlIDB4QThEMToKICAgICBjYXNlIDB4QTkwMToKICAgICBjYXNlIDB4QTlEMToKKyAgICBjYXNlIDB4QTlGMToKICAgICBjYXNlIDB4QUE1MToKICAgICBjYXNlIDB4QUJGMToKICAgICBjYXNlIDB4RkYxMToKQEAgLTMwNTUsMzkgKzQwODIsNTkgQEAKICAgICBjYXNlIDB4MTAxNTg6CiAgICAgY2FzZSAweDEwMTU5OgogICAgIGNhc2UgMHgxMDE1QToKKyAgICBjYXNlIDB4MTAyRTE6CiAgICAgY2FzZSAweDEwMzIwOgogICAgIGNhc2UgMHgxMDNEMToKICAgICBjYXNlIDB4MTA0QTE6CiAgICAgY2FzZSAweDEwODU4OgorICAgIGNhc2UgMHgxMDg3OToKKyAgICBjYXNlIDB4MTA4QTc6CisgICAgY2FzZSAweDEwOEZCOgogICAgIGNhc2UgMHgxMDkxNjoKKyAgICBjYXNlIDB4MTA5QzA6CiAgICAgY2FzZSAweDEwQTQwOgogICAgIGNhc2UgMHgxMEE3RDoKKyAgICBjYXNlIDB4MTBBOUQ6CisgICAgY2FzZSAweDEwQUVCOgogICAgIGNhc2UgMHgxMEI1ODoKICAgICBjYXNlIDB4MTBCNzg6CisgICAgY2FzZSAweDEwQkE5OgorICAgIGNhc2UgMHgxMENGQToKICAgICBjYXNlIDB4MTBFNjA6CiAgICAgY2FzZSAweDExMDUyOgogICAgIGNhc2UgMHgxMTA2NzoKICAgICBjYXNlIDB4MTEwRjE6CiAgICAgY2FzZSAweDExMTM3OgogICAgIGNhc2UgMHgxMTFEMToKKyAgICBjYXNlIDB4MTExRTE6CisgICAgY2FzZSAweDExMkYxOgorICAgIGNhc2UgMHgxMTREMToKKyAgICBjYXNlIDB4MTE2NTE6CiAgICAgY2FzZSAweDExNkMxOgorICAgIGNhc2UgMHgxMTczMToKKyAgICBjYXNlIDB4MTE4RTE6CiAgICAgY2FzZSAweDEyNDE1OgogICAgIGNhc2UgMHgxMjQxRToKICAgICBjYXNlIDB4MTI0MkM6CiAgICAgY2FzZSAweDEyNDM0OgogICAgIGNhc2UgMHgxMjQ0RjoKICAgICBjYXNlIDB4MTI0NTg6CisgICAgY2FzZSAweDE2QTYxOgorICAgIGNhc2UgMHgxNkI1MToKICAgICBjYXNlIDB4MUQzNjA6CiAgICAgY2FzZSAweDFEN0NGOgogICAgIGNhc2UgMHgxRDdEOToKICAgICBjYXNlIDB4MUQ3RTM6CiAgICAgY2FzZSAweDFEN0VEOgogICAgIGNhc2UgMHgxRDdGNzoKKyAgICBjYXNlIDB4MUU4Qzc6CiAgICAgY2FzZSAweDFGMTAyOgogICAgIGNhc2UgMHgyMDkyQToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMDsKICAgICBjYXNlIDB4MjE1MjoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMC8xMC4wOworICAgIGNhc2UgMHgxMDlGNjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEuMC8xMi4wOwogICAgIGNhc2UgMHgwOUY0OgogICAgIGNhc2UgMHgwQjc1OgogICAgIGNhc2UgMHhBODMzOgpAQCAtMzEwMSwxMiArNDE0OCwxNSBAQAogICAgIGNhc2UgMHgxMDE0MToKICAgICBjYXNlIDB4MTAxNzU6CiAgICAgY2FzZSAweDEwMTc2OgorICAgIGNhc2UgMHgxMDlCRDoKICAgICBjYXNlIDB4MTBFN0I6CisgICAgY2FzZSAweDEyNDY0OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzIuMDsKICAgICBjYXNlIDB4MjE1MzoKICAgICBjYXNlIDB4MTBFN0Q6CiAgICAgY2FzZSAweDEyNDVBOgogICAgIGNhc2UgMHgxMjQ1RDoKKyAgICBjYXNlIDB4MTI0NjU6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvMy4wOwogICAgIGNhc2UgMHgwMEJDOgogICAgIGNhc2UgMHgwOUY3OgpAQCAtMzExNCw5ICs0MTY0LDExIEBACiAgICAgY2FzZSAweDBENzM6CiAgICAgY2FzZSAweEE4MzA6CiAgICAgY2FzZSAweDEwMTQwOgorICAgIGNhc2UgMHgxMDE4QjoKICAgICBjYXNlIDB4MTBFN0M6CiAgICAgY2FzZSAweDEyNDYwOgogICAgIGNhc2UgMHgxMjQ2MjoKKyAgICBjYXNlIDB4MTI0NjM6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvNC4wOwogICAgIGNhc2UgMHgyMTU1OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzUuMDsKQEAgLTMxNjMsMTcgKzQyMTUsMzIgQEAKICAgICBjYXNlIDB4MTAxNjI6CiAgICAgY2FzZSAweDEwMTYzOgogICAgIGNhc2UgMHgxMDE2NDoKKyAgICBjYXNlIDB4MTAyRUE6CiAgICAgY2FzZSAweDEwMzIyOgogICAgIGNhc2UgMHgxMDNEMzoKICAgICBjYXNlIDB4MTA4NUI6CisgICAgY2FzZSAweDEwODdFOgorICAgIGNhc2UgMHgxMDhBRDoKKyAgICBjYXNlIDB4MTA4RkQ6CiAgICAgY2FzZSAweDEwOTE3OgorICAgIGNhc2UgMHgxMDlDOToKICAgICBjYXNlIDB4MTBBNDQ6CisgICAgY2FzZSAweDEwQTlFOgorICAgIGNhc2UgMHgxMEFFRDoKICAgICBjYXNlIDB4MTBCNUM6CiAgICAgY2FzZSAweDEwQjdDOgorICAgIGNhc2UgMHgxMEJBRDoKKyAgICBjYXNlIDB4MTBDRkM6CiAgICAgY2FzZSAweDEwRTY5OgogICAgIGNhc2UgMHgxMTA1QjoKKyAgICBjYXNlIDB4MTExRUE6CisgICAgY2FzZSAweDExNzNBOgorICAgIGNhc2UgMHgxMThFQToKKyAgICBjYXNlIDB4MTZCNUI6CiAgICAgY2FzZSAweDFEMzY5OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAuMDsKKyAgICBjYXNlIDB4MTA5RkY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMC4wLzEyLjA7CiAgICAgY2FzZSAweDBCRjE6CiAgICAgY2FzZSAweDBENzE6CiAgICAgY2FzZSAweDEzN0I6CkBAIC0zMTg2LDE0ICs0MjUzLDIzIEBACiAgICAgY2FzZSAweDEwMTRCOgogICAgIGNhc2UgMHgxMDE1MjoKICAgICBjYXNlIDB4MTAxNkE6CisgICAgY2FzZSAweDEwMkYzOgogICAgIGNhc2UgMHgxMDNENToKICAgICBjYXNlIDB4MTA4NUQ6CisgICAgY2FzZSAweDEwOEFGOgorICAgIGNhc2UgMHgxMDhGRjoKICAgICBjYXNlIDB4MTA5MTk6CisgICAgY2FzZSAweDEwOUQyOgogICAgIGNhc2UgMHgxMEE0NjoKKyAgICBjYXNlIDB4MTBBRUY6CiAgICAgY2FzZSAweDEwQjVFOgogICAgIGNhc2UgMHgxMEI3RToKKyAgICBjYXNlIDB4MTBCQUY6CisgICAgY2FzZSAweDEwQ0ZFOgogICAgIGNhc2UgMHgxMEU3MjoKICAgICBjYXNlIDB4MTEwNjQ6CisgICAgY2FzZSAweDExMUYzOgorICAgIGNhc2UgMHgxNkI1QzoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMC4wOwogICAgIGNhc2UgMHgwQkYyOgogICAgIGNhc2UgMHgwRDcyOgpAQCAtMzIwOCwxMCArNDI4NCwxMyBAQAogICAgIGNhc2UgMHgxMDE1NDoKICAgICBjYXNlIDB4MTAxNzE6CiAgICAgY2FzZSAweDEwODVFOgorICAgIGNhc2UgMHgxMDlEQjoKICAgICBjYXNlIDB4MTBBNDc6CiAgICAgY2FzZSAweDEwQjVGOgogICAgIGNhc2UgMHgxMEI3RjoKKyAgICBjYXNlIDB4MTBDRkY6CiAgICAgY2FzZSAweDExMDY1OgorICAgIGNhc2UgMHgxMTFGNDoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMDAuMDsKICAgICBjYXNlIDB4MTM3QzoKICAgICBjYXNlIDB4MjE4MjoKQEAgLTMyMjAsMTMgKzQyOTksMjIgQEAKICAgICBjYXNlIDB4MTAxMkI6CiAgICAgY2FzZSAweDEwMTU1OgogICAgIGNhc2UgMHgxMDg1RjoKKyAgICBjYXNlIDB4MTA5RTQ6CisgICAgY2FzZSAweDE2QjVEOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDAuMDsKICAgICBjYXNlIDB4MjE4ODoKKyAgICBjYXNlIDB4MTA5RUQ6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwMDAuMDsKKyAgICBjYXNlIDB4MTZCNUU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwMDAwLjA7CiAgICAgY2FzZSAweDRFQkY6CiAgICAgY2FzZSAweDUxMDQ6CisgICAgY2FzZSAweDE2QjVGOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDAwMDAwLjA7CisgICAgY2FzZSAweDE2QjYwOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDAwMDAwMDAuMDsKICAgICBjYXNlIDB4NTE0NjoKKyAgICBjYXNlIDB4MTZCNjE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwMDAwMDAwMDAwLjA7CiAgICAgY2FzZSAweDIxNkE6CiAgICAgY2FzZSAweDIxN0E6CkBAIC0zMjM1LDYgKzQzMjMsOCBAQAogICAgIGNhc2UgMHgyNDkyOgogICAgIGNhc2UgMHgyNEVCOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTEuMDsKKyAgICBjYXNlIDB4MTA5QkM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMS4wLzEyLjA7CiAgICAgY2FzZSAweDBGMkY6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAxMS4wLzIuMDsKICAgICBjYXNlIDB4MjE2QjoKQEAgLTMzMDUsNiArNDM5NSw3IEBACiAgICAgY2FzZSAweDBDN0Q6CiAgICAgY2FzZSAweDBDRTg6CiAgICAgY2FzZSAweDBENjg6CisgICAgY2FzZSAweDBERTg6CiAgICAgY2FzZSAweDBFNTI6CiAgICAgY2FzZSAweDBFRDI6CiAgICAgY2FzZSAweDBGMjI6CkBAIC0zMzQ5LDYgKzQ0NDAsNyBAQAogICAgIGNhc2UgMHhBOEQyOgogICAgIGNhc2UgMHhBOTAyOgogICAgIGNhc2UgMHhBOUQyOgorICAgIGNhc2UgMHhBOUYyOgogICAgIGNhc2UgMHhBQTUyOgogICAgIGNhc2UgMHhBQkYyOgogICAgIGNhc2UgMHhGOTc4OgpAQCAtMzM1OCwyMCArNDQ1MCwzMSBAQAogICAgIGNhc2UgMHgxMDE1QzoKICAgICBjYXNlIDB4MTAxNUQ6CiAgICAgY2FzZSAweDEwMTVFOgorICAgIGNhc2UgMHgxMDJFMjoKICAgICBjYXNlIDB4MTAzRDI6CiAgICAgY2FzZSAweDEwNEEyOgogICAgIGNhc2UgMHgxMDg1OToKKyAgICBjYXNlIDB4MTA4N0E6CisgICAgY2FzZSAweDEwOEE4OgogICAgIGNhc2UgMHgxMDkxQToKKyAgICBjYXNlIDB4MTA5QzE6CiAgICAgY2FzZSAweDEwQTQxOgogICAgIGNhc2UgMHgxMEI1OToKICAgICBjYXNlIDB4MTBCNzk6CisgICAgY2FzZSAweDEwQkFBOgogICAgIGNhc2UgMHgxMEU2MToKICAgICBjYXNlIDB4MTEwNTM6CiAgICAgY2FzZSAweDExMDY4OgogICAgIGNhc2UgMHgxMTBGMjoKICAgICBjYXNlIDB4MTExMzg6CiAgICAgY2FzZSAweDExMUQyOgorICAgIGNhc2UgMHgxMTFFMjoKKyAgICBjYXNlIDB4MTEyRjI6CisgICAgY2FzZSAweDExNEQyOgorICAgIGNhc2UgMHgxMTY1MjoKICAgICBjYXNlIDB4MTE2QzI6CisgICAgY2FzZSAweDExNzMyOgorICAgIGNhc2UgMHgxMThFMjoKICAgICBjYXNlIDB4MTI0MDA6CiAgICAgY2FzZSAweDEyNDE2OgogICAgIGNhc2UgMHgxMjQxRjoKQEAgLTMzODIsMjAgKzQ0ODUsMjYgQEAKICAgICBjYXNlIDB4MTI0NTA6CiAgICAgY2FzZSAweDEyNDU2OgogICAgIGNhc2UgMHgxMjQ1OToKKyAgICBjYXNlIDB4MTZBNjI6CisgICAgY2FzZSAweDE2QjUyOgogICAgIGNhc2UgMHgxRDM2MToKICAgICBjYXNlIDB4MUQ3RDA6CiAgICAgY2FzZSAweDFEN0RBOgogICAgIGNhc2UgMHgxRDdFNDoKICAgICBjYXNlIDB4MUQ3RUU6CiAgICAgY2FzZSAweDFEN0Y4OgorICAgIGNhc2UgMHgxRThDODoKICAgICBjYXNlIDB4MUYxMDM6CiAgICAgY2FzZSAweDIyMzkwOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMi4wOworICAgIGNhc2UgMHgxMDlGNzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIuMC8xMi4wOwogICAgIGNhc2UgMHgyMTU0OgogICAgIGNhc2UgMHgxMDE3NzoKICAgICBjYXNlIDB4MTBFN0U6CiAgICAgY2FzZSAweDEyNDVCOgogICAgIGNhc2UgMHgxMjQ1RToKKyAgICBjYXNlIDB4MTI0NjY6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyLjAvMy4wOwogICAgIGNhc2UgMHgyMTU2OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMi4wLzUuMDsKQEAgLTM0MDksMjMgKzQ1MTgsNDAgQEAKICAgICBjYXNlIDB4NTM0NDoKICAgICBjYXNlIDB4NUVGRjoKICAgICBjYXNlIDB4MTAxMTE6CisgICAgY2FzZSAweDEwMkVCOgogICAgIGNhc2UgMHgxMDNENDoKICAgICBjYXNlIDB4MTA4NUM6CisgICAgY2FzZSAweDEwODdGOgorICAgIGNhc2UgMHgxMDhBRToKKyAgICBjYXNlIDB4MTA4RkU6CiAgICAgY2FzZSAweDEwOTE4OgorICAgIGNhc2UgMHgxMDlDQToKICAgICBjYXNlIDB4MTBBNDU6CisgICAgY2FzZSAweDEwQTlGOgorICAgIGNhc2UgMHgxMEFFRToKICAgICBjYXNlIDB4MTBCNUQ6CiAgICAgY2FzZSAweDEwQjdEOgorICAgIGNhc2UgMHgxMEJBRToKICAgICBjYXNlIDB4MTBFNkE6CiAgICAgY2FzZSAweDExMDVDOgorICAgIGNhc2UgMHgxMTFFQjoKKyAgICBjYXNlIDB4MTE3M0I6CisgICAgY2FzZSAweDExOEVCOgogICAgIGNhc2UgMHgxRDM2QToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwLjA7CiAgICAgY2FzZSAweDEwMTFBOgorICAgIGNhc2UgMHgxMDJGNDoKKyAgICBjYXNlIDB4MTA5RDM6CiAgICAgY2FzZSAweDEwRTczOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwLjA7CiAgICAgY2FzZSAweDEwMTIzOgorICAgIGNhc2UgMHgxMDlEQzoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMDAuMDsKICAgICBjYXNlIDB4MTAxMkM6CisgICAgY2FzZSAweDEwOUU1OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwMDAuMDsKKyAgICBjYXNlIDB4MTA5RUU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyMDAwMDAuMDsKICAgICBjYXNlIDB4MzI1MToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxLjA7CiAgICAgY2FzZSAweDEyNDMyOgpAQCAtMzQ2Miw2ICs0NTg4LDcgQEAKICAgICBjYXNlIDB4MEM3RToKICAgICBjYXNlIDB4MENFOToKICAgICBjYXNlIDB4MEQ2OToKKyAgICBjYXNlIDB4MERFOToKICAgICBjYXNlIDB4MEU1MzoKICAgICBjYXNlIDB4MEVEMzoKICAgICBjYXNlIDB4MEYyMzoKQEAgLTM1MDUsMjQgKzQ2MzIsMzYgQEAKICAgICBjYXNlIDB4QThEMzoKICAgICBjYXNlIDB4QTkwMzoKICAgICBjYXNlIDB4QTlEMzoKKyAgICBjYXNlIDB4QTlGMzoKICAgICBjYXNlIDB4QUE1MzoKICAgICBjYXNlIDB4QUJGMzoKICAgICBjYXNlIDB4Rjk2QjoKICAgICBjYXNlIDB4RkYxMzoKICAgICBjYXNlIDB4MTAxMDk6CisgICAgY2FzZSAweDEwMkUzOgogICAgIGNhc2UgMHgxMDRBMzoKICAgICBjYXNlIDB4MTA4NUE6CisgICAgY2FzZSAweDEwODdCOgorICAgIGNhc2UgMHgxMDhBOToKICAgICBjYXNlIDB4MTA5MUI6CisgICAgY2FzZSAweDEwOUMyOgogICAgIGNhc2UgMHgxMEE0MjoKICAgICBjYXNlIDB4MTBCNUE6CiAgICAgY2FzZSAweDEwQjdBOgorICAgIGNhc2UgMHgxMEJBQjoKICAgICBjYXNlIDB4MTBFNjI6CiAgICAgY2FzZSAweDExMDU0OgogICAgIGNhc2UgMHgxMTA2OToKICAgICBjYXNlIDB4MTEwRjM6CiAgICAgY2FzZSAweDExMTM5OgogICAgIGNhc2UgMHgxMTFEMzoKKyAgICBjYXNlIDB4MTExRTM6CisgICAgY2FzZSAweDExMkYzOgorICAgIGNhc2UgMHgxMTREMzoKKyAgICBjYXNlIDB4MTE2NTM6CiAgICAgY2FzZSAweDExNkMzOgorICAgIGNhc2UgMHgxMTczMzoKKyAgICBjYXNlIDB4MTE4RTM6CiAgICAgY2FzZSAweDEyNDAxOgogICAgIGNhc2UgMHgxMjQwODoKICAgICBjYXNlIDB4MTI0MTc6CkBAIC0zNTM4LDE4ICs0Njc3LDIzIEBACiAgICAgY2FzZSAweDEyNDRCOgogICAgIGNhc2UgMHgxMjQ1MToKICAgICBjYXNlIDB4MTI0NTc6CisgICAgY2FzZSAweDE2QTYzOgorICAgIGNhc2UgMHgxNkI1MzoKICAgICBjYXNlIDB4MUQzNjI6CiAgICAgY2FzZSAweDFEN0QxOgogICAgIGNhc2UgMHgxRDdEQjoKICAgICBjYXNlIDB4MUQ3RTU6CiAgICAgY2FzZSAweDFEN0VGOgogICAgIGNhc2UgMHgxRDdGOToKKyAgICBjYXNlIDB4MUU4Qzk6CiAgICAgY2FzZSAweDFGMTA0OgogICAgIGNhc2UgMHgyMEFGRDoKICAgICBjYXNlIDB4MjBCMTk6CiAgICAgY2FzZSAweDIyOTk4OgogICAgIGNhc2UgMHgyM0IxQjoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDMuMDsKKyAgICBjYXNlIDB4MTA5Rjg6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzLjAvMTIuMDsKICAgICBjYXNlIDB4MDlGNjoKICAgICBjYXNlIDB4MEI3NzoKICAgICBjYXNlIDB4QTgzNToKQEAgLTM1NzQsMTkgKzQ3MTgsMjkgQEAKICAgICBjYXNlIDB4NTM0NToKICAgICBjYXNlIDB4MTAxMTI6CiAgICAgY2FzZSAweDEwMTY1OgorICAgIGNhc2UgMHgxMDJFQzoKKyAgICBjYXNlIDB4MTA5Q0I6CiAgICAgY2FzZSAweDEwRTZCOgogICAgIGNhc2UgMHgxMTA1RDoKKyAgICBjYXNlIDB4MTExRUM6CisgICAgY2FzZSAweDExOEVDOgogICAgIGNhc2UgMHgxRDM2QjoKICAgICBjYXNlIDB4MjA5ODM6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAzMC4wOwogICAgIGNhc2UgMHgxMDExQjoKICAgICBjYXNlIDB4MTAxNkI6CisgICAgY2FzZSAweDEwMkY1OgorICAgIGNhc2UgMHgxMDlENDoKICAgICBjYXNlIDB4MTBFNzQ6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAzMDAuMDsKICAgICBjYXNlIDB4MTAxMjQ6CisgICAgY2FzZSAweDEwOUREOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzAwMC4wOwogICAgIGNhc2UgMHgxMDEyRDoKKyAgICBjYXNlIDB4MTA5RTY6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAzMDAwMC4wOworICAgIGNhc2UgMHgxMDlFRjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMwMDAwMC4wOwogICAgIGNhc2UgMHgzMjVCOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzEuMDsKICAgICBjYXNlIDB4MzI1QzoKQEAgLTM2MTgsNiArNDc3Miw3IEBACiAgICAgY2FzZSAweDBDNkE6CiAgICAgY2FzZSAweDBDRUE6CiAgICAgY2FzZSAweDBENkE6CisgICAgY2FzZSAweDBERUE6CiAgICAgY2FzZSAweDBFNTQ6CiAgICAgY2FzZSAweDBFRDQ6CiAgICAgY2FzZSAweDBGMjQ6CkBAIC0zNjU4LDIxICs0ODEzLDM0IEBACiAgICAgY2FzZSAweEE4RDQ6CiAgICAgY2FzZSAweEE5MDQ6CiAgICAgY2FzZSAweEE5RDQ6CisgICAgY2FzZSAweEE5RjQ6CiAgICAgY2FzZSAweEFBNTQ6CiAgICAgY2FzZSAweEFCRjQ6CiAgICAgY2FzZSAweEZGMTQ6CiAgICAgY2FzZSAweDEwMTBBOgorICAgIGNhc2UgMHgxMDJFNDoKICAgICBjYXNlIDB4MTA0QTQ6CisgICAgY2FzZSAweDEwODdDOgorICAgIGNhc2UgMHgxMDhBQToKKyAgICBjYXNlIDB4MTA4QUI6CisgICAgY2FzZSAweDEwOUMzOgogICAgIGNhc2UgMHgxMEE0MzoKICAgICBjYXNlIDB4MTBCNUI6CiAgICAgY2FzZSAweDEwQjdCOgorICAgIGNhc2UgMHgxMEJBQzoKICAgICBjYXNlIDB4MTBFNjM6CiAgICAgY2FzZSAweDExMDU1OgogICAgIGNhc2UgMHgxMTA2QToKICAgICBjYXNlIDB4MTEwRjQ6CiAgICAgY2FzZSAweDExMTNBOgogICAgIGNhc2UgMHgxMTFENDoKKyAgICBjYXNlIDB4MTExRTQ6CisgICAgY2FzZSAweDExMkY0OgorICAgIGNhc2UgMHgxMTRENDoKKyAgICBjYXNlIDB4MTE2NTQ6CiAgICAgY2FzZSAweDExNkM0OgorICAgIGNhc2UgMHgxMTczNDoKKyAgICBjYXNlIDB4MTE4RTQ6CiAgICAgY2FzZSAweDEyNDAyOgogICAgIGNhc2UgMHgxMjQwOToKICAgICBjYXNlIDB4MTI0MEY6CkBAIC0zNjg4LDE3ICs0ODU2LDIzIEBACiAgICAgY2FzZSAweDEyNDRDOgogICAgIGNhc2UgMHgxMjQ1MjoKICAgICBjYXNlIDB4MTI0NTM6CisgICAgY2FzZSAweDEyNDY5OgorICAgIGNhc2UgMHgxNkE2NDoKKyAgICBjYXNlIDB4MTZCNTQ6CiAgICAgY2FzZSAweDFEMzYzOgogICAgIGNhc2UgMHgxRDdEMjoKICAgICBjYXNlIDB4MUQ3REM6CiAgICAgY2FzZSAweDFEN0U2OgogICAgIGNhc2UgMHgxRDdGMDoKICAgICBjYXNlIDB4MUQ3RkE6CisgICAgY2FzZSAweDFFOENBOgogICAgIGNhc2UgMHgxRjEwNToKICAgICBjYXNlIDB4MjAwNjQ6CiAgICAgY2FzZSAweDIwMEUyOgogICAgIGNhc2UgMHgyNjI2RDoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQuMDsKKyAgICBjYXNlIDB4MTA5Rjk6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0LjAvMTIuMDsKICAgICBjYXNlIDB4MjE1ODoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQuMC81LjA7CiAgICAgY2FzZSAweDEzNzU6CkBAIC0zNzA2LDE5ICs0ODgwLDMwIEBACiAgICAgY2FzZSAweDMyQjU6CiAgICAgY2FzZSAweDUzNEM6CiAgICAgY2FzZSAweDEwMTEzOgorICAgIGNhc2UgMHgxMDJFRDoKKyAgICBjYXNlIDB4MTA5Q0M6CiAgICAgY2FzZSAweDEwRTZDOgogICAgIGNhc2UgMHgxMTA1RToKKyAgICBjYXNlIDB4MTExRUQ6CisgICAgY2FzZSAweDExOEVEOgorICAgIGNhc2UgMHgxMjQ2NzoKICAgICBjYXNlIDB4MUQzNkM6CiAgICAgY2FzZSAweDIwOThDOgogICAgIGNhc2UgMHgyMDk5QzoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQwLjA7CiAgICAgY2FzZSAweDEwMTFDOgorICAgIGNhc2UgMHgxMDJGNjoKKyAgICBjYXNlIDB4MTA5RDU6CiAgICAgY2FzZSAweDEwRTc1OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAwLjA7CiAgICAgY2FzZSAweDEwMTI1OgorICAgIGNhc2UgMHgxMDlERToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQwMDAuMDsKICAgICBjYXNlIDB4MTAxMkU6CisgICAgY2FzZSAweDEwOUU3OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAwMDAuMDsKKyAgICBjYXNlIDB4MTA5RjA6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0MDAwMDAuMDsKICAgICBjYXNlIDB4MzJCNjoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQxLjA7CiAgICAgY2FzZSAweDMyQjc6CkBAIC0zNzUyLDYgKzQ5MzcsNyBAQAogICAgIGNhc2UgMHgwQzZCOgogICAgIGNhc2UgMHgwQ0VCOgogICAgIGNhc2UgMHgwRDZCOgorICAgIGNhc2UgMHgwREVCOgogICAgIGNhc2UgMHgwRTU1OgogICAgIGNhc2UgMHgwRUQ1OgogICAgIGNhc2UgMHgwRjI1OgpAQCAtMzc5Miw2ICs0OTc4LDcgQEAKICAgICBjYXNlIDB4QThENToKICAgICBjYXNlIDB4QTkwNToKICAgICBjYXNlIDB4QTlENToKKyAgICBjYXNlIDB4QTlGNToKICAgICBjYXNlIDB4QUE1NToKICAgICBjYXNlIDB4QUJGNToKICAgICBjYXNlIDB4RkYxNToKQEAgLTM4MDEsMTUgKzQ5ODgsMjggQEAKICAgICBjYXNlIDB4MTAxNEY6CiAgICAgY2FzZSAweDEwMTVGOgogICAgIGNhc2UgMHgxMDE3MzoKKyAgICBjYXNlIDB4MTAyRTU6CiAgICAgY2FzZSAweDEwMzIxOgogICAgIGNhc2UgMHgxMDRBNToKKyAgICBjYXNlIDB4MTA4N0Q6CisgICAgY2FzZSAweDEwOEFDOgorICAgIGNhc2UgMHgxMDhGQzoKKyAgICBjYXNlIDB4MTA5QzQ6CisgICAgY2FzZSAweDEwQUVDOgorICAgIGNhc2UgMHgxMENGQjoKICAgICBjYXNlIDB4MTBFNjQ6CiAgICAgY2FzZSAweDExMDU2OgogICAgIGNhc2UgMHgxMTA2QjoKICAgICBjYXNlIDB4MTEwRjU6CiAgICAgY2FzZSAweDExMTNCOgogICAgIGNhc2UgMHgxMTFENToKKyAgICBjYXNlIDB4MTExRTU6CisgICAgY2FzZSAweDExMkY1OgorICAgIGNhc2UgMHgxMTRENToKKyAgICBjYXNlIDB4MTE2NTU6CiAgICAgY2FzZSAweDExNkM1OgorICAgIGNhc2UgMHgxMTczNToKKyAgICBjYXNlIDB4MTE4RTU6CiAgICAgY2FzZSAweDEyNDAzOgogICAgIGNhc2UgMHgxMjQwQToKICAgICBjYXNlIDB4MTI0MTA6CkBAIC0zODIxLDE1ICs1MDIxLDIxIEBACiAgICAgY2FzZSAweDEyNDREOgogICAgIGNhc2UgMHgxMjQ1NDoKICAgICBjYXNlIDB4MTI0NTU6CisgICAgY2FzZSAweDEyNDZBOgorICAgIGNhc2UgMHgxNkE2NToKKyAgICBjYXNlIDB4MTZCNTU6CiAgICAgY2FzZSAweDFEMzY0OgogICAgIGNhc2UgMHgxRDdEMzoKICAgICBjYXNlIDB4MUQ3REQ6CiAgICAgY2FzZSAweDFEN0U3OgogICAgIGNhc2UgMHgxRDdGMToKICAgICBjYXNlIDB4MUQ3RkI6CisgICAgY2FzZSAweDFFOENCOgogICAgIGNhc2UgMHgxRjEwNjoKICAgICBjYXNlIDB4MjAxMjE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA1LjA7CisgICAgY2FzZSAweDEwOUZBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNS4wLzEyLjA7CiAgICAgY2FzZSAweDBGMkM6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA1LjAvMi4wOwogICAgIGNhc2UgMHgyMTVBOgpAQCAtMzg1MiwxMCArNTA1OCwxNiBAQAogICAgIGNhc2UgMHgxMDE2ODoKICAgICBjYXNlIDB4MTAxNjk6CiAgICAgY2FzZSAweDEwMTc0OgorICAgIGNhc2UgMHgxMDJFRToKICAgICBjYXNlIDB4MTAzMjM6CisgICAgY2FzZSAweDEwOUNEOgogICAgIGNhc2UgMHgxMEE3RToKKyAgICBjYXNlIDB4MTBDRkQ6CiAgICAgY2FzZSAweDEwRTZEOgogICAgIGNhc2UgMHgxMTA1RjoKKyAgICBjYXNlIDB4MTExRUU6CisgICAgY2FzZSAweDExOEVFOgorICAgIGNhc2UgMHgxMjQ2ODoKICAgICBjYXNlIDB4MUQzNkQ6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA1MC4wOwogICAgIGNhc2UgMHgyMTZFOgpAQCAtMzg2OSw2ICs1MDgxLDggQEAKICAgICBjYXNlIDB4MTAxNkU6CiAgICAgY2FzZSAweDEwMTZGOgogICAgIGNhc2UgMHgxMDE3MDoKKyAgICBjYXNlIDB4MTAyRjc6CisgICAgY2FzZSAweDEwOUQ2OgogICAgIGNhc2UgMHgxMEU3NjoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMC4wOwogICAgIGNhc2UgMHgyMTgxOgpAQCAtMzg3NiwxMiArNTA5MCwxNiBAQAogICAgIGNhc2UgMHgxMDE0NjoKICAgICBjYXNlIDB4MTAxNEU6CiAgICAgY2FzZSAweDEwMTcyOgorICAgIGNhc2UgMHgxMDlERjoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMDAuMDsKICAgICBjYXNlIDB4MjE4NzoKICAgICBjYXNlIDB4MTAxMkY6CiAgICAgY2FzZSAweDEwMTQ3OgogICAgIGNhc2UgMHgxMDE1NjoKKyAgICBjYXNlIDB4MTA5RTg6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA1MDAwMC4wOworICAgIGNhc2UgMHgxMDlGMToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMDAwMC4wOwogICAgIGNhc2UgMHgwMDM2OgogICAgIGNhc2UgMHgwNjY2OgogICAgIGNhc2UgMHgwNkY2OgpAQCAtMzg5NSw2ICs1MTEzLDcgQEAKICAgICBjYXNlIDB4MEM2QzoKICAgICBjYXNlIDB4MENFQzoKICAgICBjYXNlIDB4MEQ2QzoKKyAgICBjYXNlIDB4MERFQzoKICAgICBjYXNlIDB4MEU1NjoKICAgICBjYXNlIDB4MEVENjoKICAgICBjYXNlIDB4MEYyNjoKQEAgLTM5MzUsMjAgKzUxNTQsMjkgQEAKICAgICBjYXNlIDB4QThENjoKICAgICBjYXNlIDB4QTkwNjoKICAgICBjYXNlIDB4QTlENjoKKyAgICBjYXNlIDB4QTlGNjoKICAgICBjYXNlIDB4QUE1NjoKICAgICBjYXNlIDB4QUJGNjoKICAgICBjYXNlIDB4RjlEMToKICAgICBjYXNlIDB4RjlEMzoKICAgICBjYXNlIDB4RkYxNjoKICAgICBjYXNlIDB4MTAxMEM6CisgICAgY2FzZSAweDEwMkU2OgogICAgIGNhc2UgMHgxMDRBNjoKKyAgICBjYXNlIDB4MTA5QzU6CiAgICAgY2FzZSAweDEwRTY1OgogICAgIGNhc2UgMHgxMTA1NzoKICAgICBjYXNlIDB4MTEwNkM6CiAgICAgY2FzZSAweDExMEY2OgogICAgIGNhc2UgMHgxMTEzQzoKICAgICBjYXNlIDB4MTExRDY6CisgICAgY2FzZSAweDExMUU2OgorICAgIGNhc2UgMHgxMTJGNjoKKyAgICBjYXNlIDB4MTE0RDY6CisgICAgY2FzZSAweDExNjU2OgogICAgIGNhc2UgMHgxMTZDNjoKKyAgICBjYXNlIDB4MTE3MzY6CisgICAgY2FzZSAweDExOEU2OgogICAgIGNhc2UgMHgxMjQwNDoKICAgICBjYXNlIDB4MTI0MEI6CiAgICAgY2FzZSAweDEyNDExOgpAQCAtMzk1NiwyOSArNTE4NCw0NSBAQAogICAgIGNhc2UgMHgxMjQyODoKICAgICBjYXNlIDB4MTI0NDA6CiAgICAgY2FzZSAweDEyNDRFOgorICAgIGNhc2UgMHgxMjQ2QjoKKyAgICBjYXNlIDB4MTZBNjY6CisgICAgY2FzZSAweDE2QjU2OgogICAgIGNhc2UgMHgxRDM2NToKICAgICBjYXNlIDB4MUQ3RDQ6CiAgICAgY2FzZSAweDFEN0RFOgogICAgIGNhc2UgMHgxRDdFODoKICAgICBjYXNlIDB4MUQ3RjI6CiAgICAgY2FzZSAweDFEN0ZDOgorICAgIGNhc2UgMHgxRThDQzoKICAgICBjYXNlIDB4MUYxMDc6CiAgICAgY2FzZSAweDIwQUVBOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNi4wOworICAgIGNhc2UgMHgxMDlGQjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDYuMC8xMi4wOwogICAgIGNhc2UgMHgxMzc3OgogICAgIGNhc2UgMHgzMjREOgogICAgIGNhc2UgMHgxMDExNToKKyAgICBjYXNlIDB4MTAyRUY6CisgICAgY2FzZSAweDEwOUNFOgogICAgIGNhc2UgMHgxMEU2RToKICAgICBjYXNlIDB4MTEwNjA6CisgICAgY2FzZSAweDExMUVGOgorICAgIGNhc2UgMHgxMThFRjoKICAgICBjYXNlIDB4MUQzNkU6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA2MC4wOwogICAgIGNhc2UgMHgxMDExRToKKyAgICBjYXNlIDB4MTAyRjg6CisgICAgY2FzZSAweDEwOUQ3OgogICAgIGNhc2UgMHgxMEU3NzoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDYwMC4wOwogICAgIGNhc2UgMHgxMDEyNzoKKyAgICBjYXNlIDB4MTA5RTA6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA2MDAwLjA7CiAgICAgY2FzZSAweDEwMTMwOgorICAgIGNhc2UgMHgxMDlFOToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDYwMDAwLjA7CisgICAgY2FzZSAweDEwOUYyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNjAwMDAwLjA7CiAgICAgY2FzZSAweDAwMzc6CiAgICAgY2FzZSAweDA2Njc6CiAgICAgY2FzZSAweDA2Rjc6CkBAIC0zOTkyLDYgKzUyMzYsNyBAQAogICAgIGNhc2UgMHgwQzZEOgogICAgIGNhc2UgMHgwQ0VEOgogICAgIGNhc2UgMHgwRDZEOgorICAgIGNhc2UgMHgwREVEOgogICAgIGNhc2UgMHgwRTU3OgogICAgIGNhc2UgMHgwRUQ3OgogICAgIGNhc2UgMHgwRjI3OgpAQCAtNDAzMiwxOCArNTI3NywyNyBAQAogICAgIGNhc2UgMHhBOEQ3OgogICAgIGNhc2UgMHhBOTA3OgogICAgIGNhc2UgMHhBOUQ3OgorICAgIGNhc2UgMHhBOUY3OgogICAgIGNhc2UgMHhBQTU3OgogICAgIGNhc2UgMHhBQkY3OgogICAgIGNhc2UgMHhGRjE3OgogICAgIGNhc2UgMHgxMDEwRDoKKyAgICBjYXNlIDB4MTAyRTc6CiAgICAgY2FzZSAweDEwNEE3OgorICAgIGNhc2UgMHgxMDlDNjoKICAgICBjYXNlIDB4MTBFNjY6CiAgICAgY2FzZSAweDExMDU4OgogICAgIGNhc2UgMHgxMTA2RDoKICAgICBjYXNlIDB4MTEwRjc6CiAgICAgY2FzZSAweDExMTNEOgogICAgIGNhc2UgMHgxMTFENzoKKyAgICBjYXNlIDB4MTExRTc6CisgICAgY2FzZSAweDExMkY3OgorICAgIGNhc2UgMHgxMTRENzoKKyAgICBjYXNlIDB4MTE2NTc6CiAgICAgY2FzZSAweDExNkM3OgorICAgIGNhc2UgMHgxMTczNzoKKyAgICBjYXNlIDB4MTE4RTc6CiAgICAgY2FzZSAweDEyNDA1OgogICAgIGNhc2UgMHgxMjQwQzoKICAgICBjYXNlIDB4MTI0MTI6CkBAIC00MDUyLDE1ICs1MzA2LDIxIEBACiAgICAgY2FzZSAweDEyNDQxOgogICAgIGNhc2UgMHgxMjQ0MjoKICAgICBjYXNlIDB4MTI0NDM6CisgICAgY2FzZSAweDEyNDZDOgorICAgIGNhc2UgMHgxNkE2NzoKKyAgICBjYXNlIDB4MTZCNTc6CiAgICAgY2FzZSAweDFEMzY2OgogICAgIGNhc2UgMHgxRDdENToKICAgICBjYXNlIDB4MUQ3REY6CiAgICAgY2FzZSAweDFEN0U5OgogICAgIGNhc2UgMHgxRDdGMzoKICAgICBjYXNlIDB4MUQ3RkQ6CisgICAgY2FzZSAweDFFOENEOgogICAgIGNhc2UgMHgxRjEwODoKICAgICBjYXNlIDB4MjAwMDE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA3LjA7CisgICAgY2FzZSAweDEwOUZDOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNy4wLzEyLjA7CiAgICAgY2FzZSAweDBGMkQ6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA3LjAvMi4wOwogICAgIGNhc2UgMHgyMTVFOgpAQCAtNDA2OCwxNyArNTMyOCwyNyBAQAogICAgIGNhc2UgMHgxMzc4OgogICAgIGNhc2UgMHgzMjRFOgogICAgIGNhc2UgMHgxMDExNjoKKyAgICBjYXNlIDB4MTAyRjA6CisgICAgY2FzZSAweDEwOUNGOgogICAgIGNhc2UgMHgxMEU2RjoKICAgICBjYXNlIDB4MTEwNjE6CisgICAgY2FzZSAweDExMUYwOgorICAgIGNhc2UgMHgxMThGMDoKICAgICBjYXNlIDB4MUQzNkY6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA3MC4wOwogICAgIGNhc2UgMHgxMDExRjoKKyAgICBjYXNlIDB4MTAyRjk6CisgICAgY2FzZSAweDEwOUQ4OgogICAgIGNhc2UgMHgxMEU3ODoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDcwMC4wOwogICAgIGNhc2UgMHgxMDEyODoKKyAgICBjYXNlIDB4MTA5RTE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA3MDAwLjA7CiAgICAgY2FzZSAweDEwMTMxOgorICAgIGNhc2UgMHgxMDlFQToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDcwMDAwLjA7CisgICAgY2FzZSAweDEwOUYzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNzAwMDAwLjA7CiAgICAgY2FzZSAweDAwMzg6CiAgICAgY2FzZSAweDA2Njg6CiAgICAgY2FzZSAweDA2Rjg6CkBAIC00MDkyLDYgKzUzNjIsNyBAQAogICAgIGNhc2UgMHgwQzZFOgogICAgIGNhc2UgMHgwQ0VFOgogICAgIGNhc2UgMHgwRDZFOgorICAgIGNhc2UgMHgwREVFOgogICAgIGNhc2UgMHgwRTU4OgogICAgIGNhc2UgMHgwRUQ4OgogICAgIGNhc2UgMHgwRjI4OgpAQCAtNDEzMCwxOCArNTQwMSwyNyBAQAogICAgIGNhc2UgMHhBOEQ4OgogICAgIGNhc2UgMHhBOTA4OgogICAgIGNhc2UgMHhBOUQ4OgorICAgIGNhc2UgMHhBOUY4OgogICAgIGNhc2UgMHhBQTU4OgogICAgIGNhc2UgMHhBQkY4OgogICAgIGNhc2UgMHhGRjE4OgogICAgIGNhc2UgMHgxMDEwRToKKyAgICBjYXNlIDB4MTAyRTg6CiAgICAgY2FzZSAweDEwNEE4OgorICAgIGNhc2UgMHgxMDlDNzoKICAgICBjYXNlIDB4MTBFNjc6CiAgICAgY2FzZSAweDExMDU5OgogICAgIGNhc2UgMHgxMTA2RToKICAgICBjYXNlIDB4MTEwRjg6CiAgICAgY2FzZSAweDExMTNFOgogICAgIGNhc2UgMHgxMTFEODoKKyAgICBjYXNlIDB4MTExRTg6CisgICAgY2FzZSAweDExMkY4OgorICAgIGNhc2UgMHgxMTREODoKKyAgICBjYXNlIDB4MTE2NTg6CiAgICAgY2FzZSAweDExNkM4OgorICAgIGNhc2UgMHgxMTczODoKKyAgICBjYXNlIDB4MTE4RTg6CiAgICAgY2FzZSAweDEyNDA2OgogICAgIGNhc2UgMHgxMjQwRDoKICAgICBjYXNlIDB4MTI0MTM6CkBAIC00MTQ5LDI4ICs1NDI5LDQzIEBACiAgICAgY2FzZSAweDEyNDJBOgogICAgIGNhc2UgMHgxMjQ0NDoKICAgICBjYXNlIDB4MTI0NDU6CisgICAgY2FzZSAweDEyNDZEOgorICAgIGNhc2UgMHgxNkE2ODoKKyAgICBjYXNlIDB4MTZCNTg6CiAgICAgY2FzZSAweDFEMzY3OgogICAgIGNhc2UgMHgxRDdENjoKICAgICBjYXNlIDB4MUQ3RTA6CiAgICAgY2FzZSAweDFEN0VBOgogICAgIGNhc2UgMHgxRDdGNDoKICAgICBjYXNlIDB4MUQ3RkU6CisgICAgY2FzZSAweDFFOENFOgogICAgIGNhc2UgMHgxRjEwOToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDguMDsKKyAgICBjYXNlIDB4MTA5RkQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA4LjAvMTIuMDsKICAgICBjYXNlIDB4MTM3OToKICAgICBjYXNlIDB4MzI0RjoKICAgICBjYXNlIDB4MTAxMTc6CisgICAgY2FzZSAweDEwMkYxOgogICAgIGNhc2UgMHgxMEU3MDoKICAgICBjYXNlIDB4MTEwNjI6CisgICAgY2FzZSAweDExMUYxOgorICAgIGNhc2UgMHgxMThGMToKICAgICBjYXNlIDB4MUQzNzA6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA4MC4wOwogICAgIGNhc2UgMHgxMDEyMDoKKyAgICBjYXNlIDB4MTAyRkE6CisgICAgY2FzZSAweDEwOUQ5OgogICAgIGNhc2UgMHgxMEU3OToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDgwMC4wOwogICAgIGNhc2UgMHgxMDEyOToKKyAgICBjYXNlIDB4MTA5RTI6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA4MDAwLjA7CiAgICAgY2FzZSAweDEwMTMyOgorICAgIGNhc2UgMHgxMDlFQjoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDgwMDAwLjA7CisgICAgY2FzZSAweDEwOUY0OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgODAwMDAwLjA7CiAgICAgY2FzZSAweDAwMzk6CiAgICAgY2FzZSAweDA2Njk6CiAgICAgY2FzZSAweDA2Rjk6CkBAIC00MTg0LDYgKzU0NzksNyBAQAogICAgIGNhc2UgMHgwQzZGOgogICAgIGNhc2UgMHgwQ0VGOgogICAgIGNhc2UgMHgwRDZGOgorICAgIGNhc2UgMHgwREVGOgogICAgIGNhc2UgMHgwRTU5OgogICAgIGNhc2UgMHgwRUQ5OgogICAgIGNhc2UgMHgwRjI5OgpAQCAtNDIyMywxOCArNTUxOSwyNyBAQAogICAgIGNhc2UgMHhBOEQ5OgogICAgIGNhc2UgMHhBOTA5OgogICAgIGNhc2UgMHhBOUQ5OgorICAgIGNhc2UgMHhBOUY5OgogICAgIGNhc2UgMHhBQTU5OgogICAgIGNhc2UgMHhBQkY5OgogICAgIGNhc2UgMHhGRjE5OgogICAgIGNhc2UgMHgxMDEwRjoKKyAgICBjYXNlIDB4MTAyRTk6CiAgICAgY2FzZSAweDEwNEE5OgorICAgIGNhc2UgMHgxMDlDODoKICAgICBjYXNlIDB4MTBFNjg6CiAgICAgY2FzZSAweDExMDVBOgogICAgIGNhc2UgMHgxMTA2RjoKICAgICBjYXNlIDB4MTEwRjk6CiAgICAgY2FzZSAweDExMTNGOgogICAgIGNhc2UgMHgxMTFEOToKKyAgICBjYXNlIDB4MTExRTk6CisgICAgY2FzZSAweDExMkY5OgorICAgIGNhc2UgMHgxMTREOToKKyAgICBjYXNlIDB4MTE2NTk6CiAgICAgY2FzZSAweDExNkM5OgorICAgIGNhc2UgMHgxMTczOToKKyAgICBjYXNlIDB4MTE4RTk6CiAgICAgY2FzZSAweDEyNDA3OgogICAgIGNhc2UgMHgxMjQwRToKICAgICBjYXNlIDB4MTI0MTQ6CkBAIC00MjQ0LDMyICs1NTQ5LDQ3IEBACiAgICAgY2FzZSAweDEyNDQ3OgogICAgIGNhc2UgMHgxMjQ0ODoKICAgICBjYXNlIDB4MTI0NDk6CisgICAgY2FzZSAweDEyNDZFOgorICAgIGNhc2UgMHgxNkE2OToKKyAgICBjYXNlIDB4MTZCNTk6CiAgICAgY2FzZSAweDFEMzY4OgogICAgIGNhc2UgMHgxRDdENzoKICAgICBjYXNlIDB4MUQ3RTE6CiAgICAgY2FzZSAweDFEN0VCOgogICAgIGNhc2UgMHgxRDdGNToKICAgICBjYXNlIDB4MUQ3RkY6CisgICAgY2FzZSAweDFFOENGOgogICAgIGNhc2UgMHgxRjEwQToKICAgICBjYXNlIDB4MkY4OTA6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA5LjA7CisgICAgY2FzZSAweDEwOUZFOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgOS4wLzEyLjA7CiAgICAgY2FzZSAweDBGMkU6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA5LjAvMi4wOwogICAgIGNhc2UgMHgxMzdBOgogICAgIGNhc2UgMHgxMDExODoKKyAgICBjYXNlIDB4MTAyRjI6CiAgICAgY2FzZSAweDEwMzQxOgogICAgIGNhc2UgMHgxMEU3MToKICAgICBjYXNlIDB4MTEwNjM6CisgICAgY2FzZSAweDExMUYyOgorICAgIGNhc2UgMHgxMThGMjoKICAgICBjYXNlIDB4MUQzNzE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA5MC4wOwogICAgIGNhc2UgMHgxMDEyMToKKyAgICBjYXNlIDB4MTAyRkI6CiAgICAgY2FzZSAweDEwMzRBOgorICAgIGNhc2UgMHgxMDlEQToKICAgICBjYXNlIDB4MTBFN0E6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA5MDAuMDsKICAgICBjYXNlIDB4MTAxMkE6CisgICAgY2FzZSAweDEwOUUzOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTAwMC4wOwogICAgIGNhc2UgMHgxMDEzMzoKKyAgICBjYXNlIDB4MTA5RUM6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA5MDAwMC4wOworICAgIGNhc2UgMHgxMDlGNToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDkwMDAwMC4wOwogICAgIH0KICAgICByZXR1cm4gLTEuMDsKIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvd2Vha3JlZm9iamVjdC5jIGIvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMKaW5kZXggZDRkNTJlNi4uN2U2ZjM2NCAxMDA2NDQKLS0tIGEvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMKKysrIGIvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMKQEAgLTI2OCw3ICsyNjgsNiBAQAogcGFyc2Vfd2Vha3JlZl9pbml0X2FyZ3MoY2hhciAqZnVuY25hbWUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipvYnAsIFB5T2JqZWN0ICoqY2FsbGJhY2twKQogewotICAgIC8qIFhYWCBTaG91bGQgY2hlY2sgdGhhdCBrd2FyZ3MgPT0gTlVMTCBvciBpcyBlbXB0eS4gKi8KICAgICByZXR1cm4gUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgZnVuY25hbWUsIDEsIDIsIG9icCwgY2FsbGJhY2twKTsKIH0KIApAQCAtMzMxLDYgKzMzMCw5IEBACiB7CiAgICAgUHlPYmplY3QgKnRtcDsKIAorICAgIGlmICghX1B5QXJnX05vS2V5d29yZHMoInJlZigpIiwga3dhcmdzKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgaWYgKHBhcnNlX3dlYWtyZWZfaW5pdF9hcmdzKCJfX2luaXRfXyIsIGFyZ3MsIGt3YXJncywgJnRtcCwgJnRtcCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL19iejIudmNwcm9qIGIvUEMvVlM5LjAvX2J6Mi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZWI4YzcuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvX2J6Mi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1ODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9Il9iejIiDQotCVByb2plY3RHVUlEPSJ7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fSINCi0JUm9vdE5hbWVzcGFjZT0iYnoyIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9iejJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9ImJ6aXAyIDEuMC42IEhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYl9wcml2YXRlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJiemlwMiAxLjAuNiBTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJsb2Nrc29ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxjcmN0YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGRlY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxodWZmbWFuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilccmFuZHRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX2N0eXBlcy52Y3Byb2ogYi9QQy9WUzkuMC9fY3R5cGVzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU1Y2JhMS4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9fY3R5cGVzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDcwNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0iX2N0eXBlcyINCi0JUHJvamVjdEdVSUQ9InswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9Ig0KLQlSb290TmFtZXNwYWNlPSJfY3R5cGVzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjdHlwZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjdHlwZXNfZGxmY24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmlfY29tbW9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpdGFyZ2V0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYyINCi0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luNjQuYXNtIg0KLQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvWmkgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9fY3R5cGVzX3Rlc3QudmNwcm9qIGIvUEMvVlM5LjAvX2N0eXBlc190ZXN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzAzMzU0Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9fY3R5cGVzX3Rlc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI5LjAwIg0KLQlOYW1lPSJfY3R5cGVzX3Rlc3QiDQotCVByb2plY3RHVUlEPSJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlc190ZXN0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX2RlY2ltYWwudmNwcm9qIGIvUEMvVlM5LjAvX2RlY2ltYWwudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWZhYmIwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL19kZWNpbWFsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDc0MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0iX2RlY2ltYWwiDQotCVByb2plY3RHVUlEPSJ7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE3fSINCi0JUm9vdE5hbWVzcGFjZT0iX2RlY2ltYWwiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgL0RDT05GSUdfMzIgL0RQUFJPIC9ETUFTTSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbDsuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgL0RDT05GSUdfNjQgL0RNQVNNIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsOy4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0RfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAvRENPTkZJR18zMiAvRFBQUk8gL0RNQVNNIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsOy4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0RfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAvRENPTkZJR182NCAvRE1BU00iDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWw7Li5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlYyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC9EQ09ORklHXzMyIC9EUFBSTyAvRE1BU00iDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWw7Li5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlYyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0RfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAvRENPTkZJR182NCAvRE1BU00iDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWw7Li5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlYyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgL0RDT05GSUdfMzIgL0RQUFJPIC9ETUFTTSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbDsuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0RfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAvRENPTkZJR182NCAvRE1BU00iDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWw7Li5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlYyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXGJhc2Vhcml0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1xiaXRzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXGNvbnN0YW50cy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1xjb252b2x1dGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcY3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXGRpZnJhZGl4Mi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxkb2NzdHJpbmdzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXGZudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1xmb3Vyc3RlcC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1xtcGRlY2ltYWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcbnVtYmVydGhlb3J5LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXHNpeHN0ZXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcdHJhbnNwb3NlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXHR5cGVhcml0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1x1bW9kYXJpdGguaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcdmNjb21wYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcdmNzdGRpbnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXF9kZWNpbWFsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXGJhc2Vhcml0aC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1xjb25zdGFudHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcY29udGV4dC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1xjb252b2x1dGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcY3J0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXGRpZnJhZGl4Mi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1xmbnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcZm91cnN0ZXAuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcaW8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcbWVtb3J5LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXG1wZGVjaW1hbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1xudW1iZXJ0aGVvcnkuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcc2l4c3RlcC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlY1x0cmFuc3Bvc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcdmNkaXY2NC5hc20iDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9aaSAvRm8gJnF1b3Q7JChJbnREaXIpXHZjZGl2NjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcdmNkaXY2NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9aaSAvRm8gJnF1b3Q7JChJbnREaXIpXHZjZGl2NjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcdmNkaXY2NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvRm8gJnF1b3Q7JChJbnREaXIpXHZjZGl2NjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcdmNkaXY2NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx2Y2RpdjY0Lm9iaiZxdW90OyAmcXVvdDskKElucHV0UGF0aCkmcXVvdDsmI3gwRDsmI3gwQTsiDQotCQkJCQkJT3V0cHV0cz0iJChJbnREaXIpXHZjZGl2NjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTOS4wL19lbGVtZW50dHJlZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZDczNzUuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlQcm9qZWN0R1VJRD0iezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0iDQotCVJvb3ROYW1lc3BhY2U9Il9lbGVtZW50dHJlZSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWl0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXRfY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0X2V4dGVybmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGlhc2NpaXRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxpbnRlcm5hbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxsYXRpbjF0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcbWFjY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XG5hbWV0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRccHlleHBhdG5zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHV0Zjh0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcd2luY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9faGFzaGxpYi52Y3Byb2ogYi9QQy9WUzkuMC9faGFzaGxpYi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3NDE3ZWMuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvX2hhc2hsaWIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI5LjAwIg0KLQlOYW1lPSJfaGFzaGxpYiINCi0JUHJvamVjdEdVSUQ9Ins0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlSb290TmFtZXNwYWNlPSJfaGFzaGxpYiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oYXNob3BlbnNzbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL19sem1hLnZjcHJvaiBiL1BDL1ZTOS4wL19sem1hLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M2MDAzZi4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9fbHptYS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9Il9sem1hIg0KLQlQcm9qZWN0R1VJRD0ie0Y5RDcxNzgwLUYzOTMtMTFFMC1CRTUwLTA4MDAyMDBDOUE2Nn0iDQotCVJvb3ROYW1lc3BhY2U9Imx6bWEiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChsem1hRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7TFpNQV9BUElfU1RBVElDIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGx6bWFEaXIpXGJpbl9pNDg2XGxpYmx6bWEuYSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChsem1hRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7TFpNQV9BUElfU1RBVElDIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGx6bWFEaXIpXGJpbl94ODYtNjRcbGlibHptYS5hIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGx6bWFEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtMWk1BX0FQSV9TVEFUSUMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQobHptYURpcilcYmluX2k0ODZcbGlibHptYS5hIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChsem1hRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7TFpNQV9BUElfU1RBVElDIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGx6bWFEaXIpXGJpbl94ODYtNjRcbGlibHptYS5hIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChsem1hRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7TFpNQV9BUElfU1RBVElDIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKGx6bWFEaXIpXGJpbl9pNDg2XGxpYmx6bWEuYSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGx6bWFEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtMWk1BX0FQSV9TVEFUSUMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQobHptYURpcilcYmluX3g4Ni02NFxsaWJsem1hLmEiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQobHptYURpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO0xaTUFfQVBJX1NUQVRJQyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChsem1hRGlyKVxiaW5faTQ4NlxsaWJsem1hLmEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQobHptYURpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO0xaTUFfQVBJX1NUQVRJQyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChsem1hRGlyKVxiaW5feDg2LTY0XGxpYmx6bWEuYSINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sem1hbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX21zaS52Y3Byb2ogYi9QQy9WUzkuMC9fbXNpLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IyMzBlMS4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9fbXNpLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0iX21zaSINCi0JUHJvamVjdEdVSUQ9InszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9Ig0KLQlSb290TmFtZXNwYWNlPSJfbXNpIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xfbXNpLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2ogYi9QQy9WUzkuMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIzZDFlNy4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9fbXVsdGlwcm9jZXNzaW5nLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0iX211bHRpcHJvY2Vzc2luZyINCi0JUHJvamVjdEdVSUQ9Ins5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9Ig0KLQlSb290TmFtZXNwYWNlPSJfbXVsdGlwcm9jZXNzaW5nIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xzZW1hcGhvcmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9fc29ja2V0LnZjcHJvaiBiL1BDL1ZTOS4wL19zb2NrZXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjFmNmQ0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL19zb2NrZXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI5LjAwIg0KLQlOYW1lPSJfc29ja2V0Ig0KLQlQcm9qZWN0R1VJRD0iezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0iDQotCVJvb3ROYW1lc3BhY2U9Il9zb2NrZXQiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmM1N2FlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0iX3NxbGl0ZTMiDQotCVByb2plY3RHVUlEPSJ7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fSINCi0JUm9vdE5hbWVzcGFjZT0iX3NxbGl0ZTMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChzcWxpdGUzRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoc3FsaXRlM0RpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHNxbGl0ZTNEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoc3FsaXRlM0RpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChzcWxpdGUzRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChzcWxpdGUzRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoc3FsaXRlM0RpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHNxbGl0ZTNEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtaWNyb3Byb3RvY29scy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxyb3cuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX3NzbC52Y3Byb2ogYi9QQy9WUzkuMC9fc3NsLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ3ZGMyNy4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9fc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOSwwMCINCi0JTmFtZT0iX3NzbCINCi0JUHJvamVjdEdVSUQ9IntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KLQlSb290TmFtZXNwYWNlPSJfc3NsIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jNjQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NzbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL190ZXN0YnVmZmVyLnZjcHJvaiBiL1BDL1ZTOS4wL190ZXN0YnVmZmVyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMzNzdlMS4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9fdGVzdGJ1ZmZlci52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9Il90ZXN0YnVmZmVyIg0KLQlQcm9qZWN0R1VJRD0ie0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0iDQotCVJvb3ROYW1lc3BhY2U9Il90ZXN0YnVmZmVyIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGJ1ZmZlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL190ZXN0Y2FwaS52Y3Byb2ogYi9QQy9WUzkuMC9fdGVzdGNhcGkudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTMzMDBhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL190ZXN0Y2FwaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9Il90ZXN0Y2FwaSINCi0JUHJvamVjdEdVSUQ9Ins2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KLQlSb290TmFtZXNwYWNlPSJfdGVzdGNhcGkiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90ZXN0Y2FwaW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qIGIvUEMvVlM5LjAvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZDkxMGQuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9Il90ZXN0aW1wb3J0bXVsdGlwbGUiDQotCVByb2plY3RHVUlEPSJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCi0JUm9vdE5hbWVzcGFjZT0iX3Rlc3RpbXBvcnRtdWx0aXBsZSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL190a2ludGVyLnZjcHJvaiBiL1BDL1ZTOS4wL190a2ludGVyLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE2MzMxNy4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9fdGtpbnRlci52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9Il90a2ludGVyIg0KLQlQcm9qZWN0R1VJRD0iezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQotCVJvb3ROYW1lc3BhY2U9Il90a2ludGVyIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWJEZWJ1ZykiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGs2NERpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0azY0TGliRGVidWcpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGs2NERpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0azY0TGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGs2NERpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0azY0TGliKSINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGs2NERpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0azY0TGliKSINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90a2ludGVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRrYXBwaW5pdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL2JkaXN0X3dpbmluc3QudmNwcm9qIGIvUEMvVlM5LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4Y2M3YWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvYmRpc3Rfd2luaW5zdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9ImJkaXN0X3dpbmluc3QiDQotCVByb2plY3RHVUlEPSJ7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfSINCi0JUm9vdE5hbWVzcGFjZT0id2luaW5zdCINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJTWtUeXBMaWJDb21wYXRpYmxlPSJ0cnVlIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KLQkJCQlUeXBlTGlicmFyeU5hbWU9Ii5cLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIxIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQzsuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImNvbWN0bDMyLmxpYiBpbWFnZWhscC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTkuMC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC05LjAucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCi0JCQkJRGF0YUV4ZWN1dGlvblByZXZlbnRpb249IjAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFBsYXRmb3JtTmFtZSlcJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LnRsYiINCi0JCQkJSGVhZGVyRmlsZU5hbWU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZTsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJjb21jdGwzMi5saWIgaW1hZ2VobHAubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC05LjAtYW1kNjQuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOS4wLWFtZDY0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGV4dHJhY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcaW5zdGFsbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iemxpYiINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubCINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGFyY2hpdmUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcaW5zdGFsbC5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3RcUHl0aG9uUG93ZXJlZC5ibXAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvZGVidWcudnNwcm9wcyBiL1BDL1ZTOS4wL2RlYnVnLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjQzY2IuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvZGVidWcudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJkZWJ1ZyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IktpbGxQeXRob25FeGUiDQotCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM5LjAva2lsbF9weXRob24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY2ZTFiMC4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBIZWxwZXIgcHJvZ3JhbSBmb3Iga2lsbGluZyBsaW5nZXJpbmcgcHl0aG9uW19kXS5leGUgcHJvY2Vzc2VzIGJlZm9yZQotICogYnVpbGRpbmcsIHRodXMgYXR0ZW1wdGluZyB0byBhdm9pZCBidWlsZCBmYWlsdXJlcyBkdWUgdG8gZmlsZXMgYmVpbmcKLSAqIGxvY2tlZC4KLSAqLwotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHdjaGFyLmg+Ci0jaW5jbHVkZSA8dGxoZWxwMzIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jcHJhZ21hIGNvbW1lbnQobGliLCAicHNhcGkiKQotCi0jaWZkZWYgX0RFQlVHCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uX2QuZXhlIikKLSNkZWZpbmUgUFlUSE9OX0VYRV9MRU4gICAgICAoMTIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRSAgICAgKEwia2lsbF9weXRob25fZC5leGUiKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEVfTEVOICgxNykKLSNlbHNlCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uLmV4ZSIpCi0jZGVmaW5lIFBZVEhPTl9FWEVfTEVOICAgICAgKDEwKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEUgICAgIChMImtpbGxfcHl0aG9uLmV4ZSIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRV9MRU4gKDE1KQotI2VuZGlmCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgSEFORExFICAgaHAsIGhzcCwgaHNtOyAvKiBwcm9jZXNzLCBzbmFwc2hvdCBwcm9jZXNzZXMsIHNuYXBzaG90IG1vZHVsZXMgKi8KLSAgICBEV09SRCAgICBkYWMsIG91cl9waWQ7Ci0gICAgc2l6ZV90ICAgbGVuOwotICAgIHdjaGFyX3QgIHBhdGhbTUFYX1BBVEgrMV07Ci0KLSAgICBNT0RVTEVFTlRSWTMyVyAgbWU7Ci0gICAgUFJPQ0VTU0VOVFJZMzJXIHBlOwotCi0gICAgbWUuZHdTaXplID0gc2l6ZW9mKE1PRFVMRUVOVFJZMzJXKTsKLSAgICBwZS5kd1NpemUgPSBzaXplb2YoUFJPQ0VTU0VOVFJZMzJXKTsKLQotICAgIG1lbXNldChwYXRoLCAwLCBNQVhfUEFUSCsxKTsKLQotICAgIG91cl9waWQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0KLSAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIG91cl9waWQpOwotICAgIGlmIChoc20gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcHJpbnRmKCJDcmVhdGVUb29saGVscDMyU25hcHNob3RbMV0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoIU1vZHVsZTMyRmlyc3RXKGhzbSwgJm1lKSkgewotICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzFdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBFbnVtZXJhdGUgb3ZlciB0aGUgbW9kdWxlcyBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBpbiBvcmRlciB0byBmaW5kCi0gICAgICoga2lsbF9wcm9jZXNzW19kXS5leGUsIHRoZW4gdGFrZSBhIG5vdGUgb2YgdGhlIGRpcmVjdG9yeSBpdCBsaXZlcyBpbi4KLSAgICAgKi8KLSAgICBkbyB7Ci0gICAgICAgIGlmIChfd2NzbmljbXAobWUuc3pNb2R1bGUsIEtJTExfUFlUSE9OX0VYRSwgS0lMTF9QWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBsZW4gPSB3Y3NubGVuX3MobWUuc3pFeGVQYXRoLCBNQVhfUEFUSCkgLSBLSUxMX1BZVEhPTl9FWEVfTEVOOwotICAgICAgICB3Y3NuY3B5X3MocGF0aCwgTUFYX1BBVEgrMSwgbWUuc3pFeGVQYXRoLCBsZW4pOyAKLQotICAgICAgICBicmVhazsKLQotICAgIH0gd2hpbGUgKE1vZHVsZTMyTmV4dFcoaHNtLCAmbWUpKTsKLQotICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0KLSAgICBpZiAocGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50ZigiZmFpbGVkIHRvIGRpc2Nlcm4gZGlyZWN0b3J5IG9mIHJ1bm5pbmcgcHJvY2Vzc1xuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVGFrZSBhIHNuYXBzaG90IG9mIHN5c3RlbSBwcm9jZXNzZXMuICBFbnVtZXJhdGUgb3ZlciB0aGUgc25hcHNob3QsCi0gICAgICogbG9va2luZyBmb3IgcHl0aG9uIHByb2Nlc3Nlcy4gIFdoZW4gd2UgZmluZCBvbmUsIHZlcmlmeSBpdCBsaXZlcwotICAgICAqIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3ZSBsaXZlIGluLiAgSWYgaXQgZG9lcywga2lsbCBpdC4gIElmIHdlJ3JlCi0gICAgICogdW5hYmxlIHRvIGtpbGwgaXQsIHRyZWF0IHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgcmV0dXJuIDEuCi0gICAgICogCi0gICAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0aGF0IHdlJ3JlIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIAotICAgICAqIGJ1aWxkIHByb2Nlc3Mgb24gdGhlIGJhc2lzIHRoYXQgd2UnbGwgdGFrZSBjYXJlIG9mIGtpbGxpbmcgYW55Ci0gICAgICogcnVubmluZyBpbnN0YW5jZXMsIHN1Y2ggdGhhdCB0aGUgYnVpbGQgd29uJ3QgZW5jb3VudGVyIHBlcm1pc3Npb24KLSAgICAgKiBkZW5pZWQgZXJyb3JzIGR1cmluZyBsaW5raW5nLiBJZiB3ZSBjYW4ndCBraWxsIG9uZSBvZiB0aGUgcHJvY2Vzc2VzLAotICAgICAqIHdlIGNhbid0IHByb3ZpZGUgdGhpcyBhc3N1cmFuY2UsIGFuZCB0aGUgYnVpbGQgc2hvdWxkbid0IHN0YXJ0LgotICAgICAqLwotCi0gICAgaHNwID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQUFJPQ0VTUywgMCk7Ci0gICAgaWYgKGhzcCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICBwcmludGYoIkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdFsyXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICghUHJvY2VzczMyRmlyc3RXKGhzcCwgJnBlKSkgewotICAgICAgICBwcmludGYoIlByb2Nlc3MzMkZpcnN0VyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGRhYyA9IFBST0NFU1NfUVVFUllfSU5GT1JNQVRJT04gfCBQUk9DRVNTX1ZNX1JFQUQgfCBQUk9DRVNTX1RFUk1JTkFURTsKLSAgICBkbyB7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKLSAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzRbX2RdLmRsbCksCi0gICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgotICAgICAgICAgKiBOb3Qgd29ydGggbG9zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjawotICAgICAgICAgKiBmb3IganVzdCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChfd2NzbmljbXAocGUuc3pFeGVGaWxlLCBQWVRIT05fRVhFLCBQWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICAvKiBUaGlzIGlzbid0IGEgcHl0aG9uIHByb2Nlc3MuICovCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBJdCdzIGEgcHl0aG9uIHByb2Nlc3MsIHNvIGZpZ3VyZSBvdXQgd2hpY2ggZGlyZWN0b3J5IGl0J3MgaW4uLi4gKi8KLSAgICAgICAgaHNtID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQTU9EVUxFLCBwZS50aDMyUHJvY2Vzc0lEKTsKLSAgICAgICAgaWYgKGhzbSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgIC8qIAotICAgICAgICAgICAgICogSWYgb3VyIG1vZHVsZSBzbmFwc2hvdCBmYWlscyAod2hpY2ggd2lsbCBoYXBwZW4gaWYgd2UgZG9uJ3Qgb3duCi0gICAgICAgICAgICAgKiB0aGUgcHJvY2VzcyksIGp1c3QgaWdub3JlIGl0IGFuZCBjb250aW51ZS4gIChJdCBzZWVtcyBkaWZmZXJlbnQKLSAgICAgICAgICAgICAqIHZlcnNpb25zIG9mIFdpbmRvd3MgcmV0dXJuIGRpZmZlcmVudCB2YWx1ZXMgZm9yIEdldExhc3RFcnJvcigpCi0gICAgICAgICAgICAgKiBpbiB0aGlzIHNpdHVhdGlvbjsgaXQncyBlYXNpZXIgdG8ganVzdCBpZ25vcmUgaXQgYW5kIG1vdmUgb24gdnMuCi0gICAgICAgICAgICAgKiBzdG9wcGluZyB0aGUgYnVpbGQgZm9yIHdoYXQgY291bGQgYmUgYSBmYWxzZSBwb3NpdGl2ZS4pCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIU1vZHVsZTMyRmlyc3RXKGhzbSwgJm1lKSkgewotICAgICAgICAgICAgcHJpbnRmKCJNb2R1bGUzMkZpcnN0V1syXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKF93Y3NuaWNtcChtZS5zek1vZHVsZSwgUFlUSE9OX0VYRSwgUFlUSE9OX0VYRV9MRU4pKQotICAgICAgICAgICAgICAgIC8qIFdyb25nIG1vZHVsZSwgd2UncmUgbG9va2luZyBmb3IgcHl0aG9uW19kXS5leGUuLi4gKi8KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYgKF93Y3NuaWNtcChwYXRoLCBtZS5zekV4ZVBhdGgsIGxlbikpCi0gICAgICAgICAgICAgICAgLyogUHJvY2VzcyBkb2Vzbid0IGxpdmUgaW4gb3VyIGRpcmVjdG9yeS4gKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLyogUHl0aG9uIHByb2Nlc3MgcmVzaWRpbmcgaW4gdGhlIHJpZ2h0IGRpcmVjdG9yeSwga2lsbCBpdCEgICovCi0gICAgICAgICAgICBocCA9IE9wZW5Qcm9jZXNzKGRhYywgRkFMU0UsIHBlLnRoMzJQcm9jZXNzSUQpOwotICAgICAgICAgICAgaWYgKCFocCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiT3BlblByb2Nlc3MgZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFUZXJtaW5hdGVQcm9jZXNzKGhwLCAxKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiVGVybWluYXRlUHJvY2VzcyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgfSB3aGlsZSAoTW9kdWxlMzJOZXh0Vyhoc20sICZtZSkpOwotCi0gICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0KLSAgICB9IHdoaWxlIChQcm9jZXNzMzJOZXh0Vyhoc3AsICZwZSkpOwotCi0gICAgQ2xvc2VIYW5kbGUoaHNwKTsKLQotICAgIHJldHVybiAwOwotfQotCi0vKiB2aTogc2V0IHRzPTggc3c9NCBzdHM9NCBleHBhbmR0YWIgKi8KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLnZjcHJvaiBiL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM0MTA3YS4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9raWxsX3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9ImtpbGxfcHl0aG9uIg0KLQlQcm9qZWN0R1VJRD0iezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0iDQotCVJvb3ROYW1lc3BhY2U9ImtpbGxfcHl0aG9uIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5ca2lsbF9weXRob24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9tYWtlX2J1aWxkaW5mby5jIGIvUEMvVlM5LjAvbWFrZV9idWlsZGluZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI0YTY0YS4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9tYWtlX2J1aWxkaW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGlvLmg+Ci0KLSNkZWZpbmUgQ01EX1NJWkUgNTAwCi0KLS8qIFRoaXMgZmlsZSBjcmVhdGVzIHRoZSBnZXRidWlsZGluZm8ubyBvYmplY3QsIGJ5IGZpcnN0Ci0gICBpbnZva2luZyBzdWJ3Y3Jldi5leGUgKGlmIGZvdW5kKSwgYW5kIHRoZW4gaW52b2tpbmcgY2wuZXhlLgotICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgbWlnaHQgZ2VuZXJhdGUgUENCdWlsZFxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotICAgSG93ZXZlciwgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCBiZSB1c2VkCi0gICBhcyBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hlcmUgYW55IGdldGJ1aWxkaW5mbzIuYyBhbmQKLSAgIGdldGJ1aWxkaW5mby5vIGZpbGVzIGFyZSBwdXQuICBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZQotICAgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGluIHBhcmFsbGVsLCB0byBhdm9pZCB0aGVtCi0gICB0cmFtcGxpbmcgZWFjaCBvdGhlcidzIGZpbGVzLgotCi0qLwotCi1pbnQgbWFrZV9idWlsZGluZm8yKGNvbnN0IGNoYXIgKnRtcHBhdGgpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRSsxXTsKLSAgICBEV09SRCB0eXBlLCBzaXplOwotICAgIGlmIChfc3RhdCgiLnN2biIsICZzdCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBBbGxvdyBzdXBwcmVzc2lvbiBvZiBzdWJ3Y3Jldi5leGUgaW52b2NhdGlvbiBpZiBhIG5vX3N1YndjcmV2IGZpbGUgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAoX3N0YXQoIm5vX3N1YndjcmV2IiwgJnN0KSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTICYmCi0gICAgICAgIFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAvKiBUb3J0b2lzZSBub3QgaW5zdGFsbGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbW1hbmRbMF0gPSAnIic7ICAvKiBxdW90ZSB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSAqLwotICAgIHNpemUgPSBzaXplb2YoY29tbWFuZCkgLSAxOwotICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaFRvcnRvaXNlLCAiRGlyZWN0b3J5IiwgMCwgJnR5cGUsIGNvbW1hbmQrMSwgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MgfHwKLSAgICAgICAgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgIC8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImJpblxcc3Vid2NyZXYuZXhlIik7Ci0gICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCi0gICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIC4uXFwuLiAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIFwiIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOyAvKiBxdW90ZWQgdG1wcGF0aCAqLwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jXCIiKTsKLQotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIGlmIChzeXN0ZW0oY29tbWFuZCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotY29uc3QgY2hhciBERUxJTVNbXSA9IHsgIiBcbiIgfTsKLQotaW50IGdldF9tZXJjdXJpYWxfaW5mbyhjaGFyICogaGdicmFuY2gsIGNoYXIgKiBoZ3RhZywgY2hhciAqIGhncmV2LCBpbnQgc2l6ZSkKLXsKLSAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICBjaGFyIGZpbGVuYW1lW0NNRF9TSVpFXTsKLSAgICBjaGFyIGNtZGxpbmVbQ01EX1NJWkVdOwotCi0gICAgc3RyY3B5X3MoZmlsZW5hbWUsIENNRF9TSVpFLCAidG1wWFhYWFhYIik7Ci0gICAgaWYgKF9ta3RlbXBfcyhmaWxlbmFtZSwgQ01EX1NJWkUpID09IDApIHsKLSAgICAgICAgaW50IHJjOwotCi0gICAgICAgIHN0cmNweV9zKGNtZGxpbmUsIENNRF9TSVpFLCAiaGcgaWQgLWJpdCA+ICIpOwotICAgICAgICBzdHJjYXRfcyhjbWRsaW5lLCBDTURfU0laRSwgZmlsZW5hbWUpOwotICAgICAgICByYyA9IHN5c3RlbShjbWRsaW5lKTsKLSAgICAgICAgaWYgKHJjID09IDApIHsKLSAgICAgICAgICAgIEZJTEUgKiBmcDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZvcGVuX3MoJmZwLCBmaWxlbmFtZSwgInIiKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqIGNwID0gZmdldHMoY21kbGluZSwgQ01EX1NJWkUsIGZwKTsKLQotICAgICAgICAgICAgICAgIGlmIChjcCkgewotICAgICAgICAgICAgICAgICAgICBjaGFyICogY29udGV4dCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiB0cCA9IHN0cnRva19zKGNwLCBERUxJTVMsICZjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHlfcyhoZ3Jldiwgc2l6ZSwgdHApOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAgPSBzdHJ0b2tfcyhOVUxMLCBERUxJTVMsICZjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweV9zKGhnYnJhbmNoLCBzaXplLCB0cCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAgPSBzdHJ0b2tfcyhOVUxMLCBERUxJTVMsICZjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5X3MoaGd0YWcsIHNpemUsIHRwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBfdW5saW5rKGZpbGVuYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQotewotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRV0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7Ci0gICAgY2hhciB0bXBwYXRoW0NNRF9TSVpFXSA9ICIiOwotICAgIGludCBkb191bmxpbmssIHJlc3VsdDsKLSAgICBjaGFyICp0bXBkaXIgPSBOVUxMOwotICAgIGlmIChhcmdjIDw9IDIgfHwgYXJnYyA+IDMpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKSBbdG1wZGlyXVxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIkRlYnVnIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1EX0RFQlVHIC1NRGQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUl0YW5pdW0iKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19JVEFOSVVNICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VBTUQ2NCIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgIik7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19PUFRFUk9OICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKGFyZ2MgPiAyKSB7Ci0gICAgICAgIHRtcGRpciA9IGFyZ3ZbMl07Ci0gICAgICAgIHN0cmNhdF9zKHRtcHBhdGgsIF9jb3VudG9mKHRtcHBhdGgpLCB0bXBkaXIpOwotICAgICAgICAvKiBIYWNrIGZpeCBmb3IgYmFkIGNvbW1hbmQgbGluZTogIElmIHRoZSBjb21tYW5kIGlzIGlzc3VlZCBsaWtlIHRoaXM6Ci0gICAgICAgICAqICQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBEZWJ1ZyAiJChJbnREaXIpIgotICAgICAgICAgKiB3ZSB3aWxsIGdldCBhIHRyYWlsaW5nIHF1b3RlIGJlY2F1c2UgSW50RGlyIGVuZHMgd2l0aCBhIGJhY2tzbGFzaCB0aGF0IHRoZW4KLSAgICAgICAgICogZXNjYXBlcyB0aGUgZmluYWwgIi4gIFRvIHNpbXBsaWZ5IHRoZSBsaWZlIGZvciBkZXZlbG9wZXJzLCBjYXRjaCB0aGF0IHByb2JsZW0KLSAgICAgICAgICogaGVyZSBieSBjdXR0aW5nIGl0IG9mZi4KLSAgICAgICAgICogVGhlIHByb3BlciBjb21tYW5kIGxpbmUsIGJ0dyBpczoKLSAgICAgICAgICogJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIERlYnVnICIkKEludERpcilcIgotICAgICAgICAgKiBIb29yYXkgZm9yIGNvbW1hbmQgbGluZSBwYXJzaW5nIG9uIHdpbmRvd3MuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoc3RybGVuKHRtcHBhdGgpID4gMCAmJiB0bXBwYXRoW3N0cmxlbih0bXBwYXRoKS0xXSA9PSAnIicpCi0gICAgICAgICAgICB0bXBwYXRoW3N0cmxlbih0bXBwYXRoKS0xXSA9ICdcMCc7Ci0gICAgICAgIHN0cmNhdF9zKHRtcHBhdGgsIF9jb3VudG9mKHRtcHBhdGgpLCAiXFwiKTsKLSAgICB9Ci0KLSAgICBpZiAoKGRvX3VubGluayA9IG1ha2VfYnVpbGRpbmZvMih0bXBwYXRoKSkpIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcIiIpOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jXCIgLURTVUJXQ1JFViAiKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgaGd0YWdbQ01EX1NJWkVdOwotICAgICAgICBjaGFyIGhnYnJhbmNoW0NNRF9TSVpFXTsKLSAgICAgICAgY2hhciBoZ3JldltDTURfU0laRV07Ci0KLSAgICAgICAgaWYgKGdldF9tZXJjdXJpYWxfaW5mbyhoZ2JyYW5jaCwgaGd0YWcsIGhncmV2LCBDTURfU0laRSkpIHsKLSAgICAgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLURIR0JSQU5DSD1cXFwiIik7Ci0gICAgICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgaGdicmFuY2gpOwotICAgICAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcXFwiIik7Ci0KLSAgICAgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiIC1ESEdUQUc9XFxcIiIpOwotICAgICAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIGhndGFnKTsKLSAgICAgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiXFxcIiIpOwotCi0gICAgICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIiAtREhHVkVSU0lPTj1cXFwiIik7Ci0gICAgICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgaGdyZXYpOwotICAgICAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcXFwiICIpOwotICAgICAgICB9Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotICAgIH0KLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIiAtRm9cIiIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mby5vXCIgLUkuLlxcLi5cXEluY2x1ZGUgLUkuLlxcLi5cXFBDIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmVzdWx0ID0gc3lzdGVtKGNvbW1hbmQpOwotICAgIGlmIChkb191bmxpbmspIHsKLSAgICAgICAgY29tbWFuZFswXSA9ICdcMCc7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiXCIiKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mbzIuY1wiIik7Ci0gICAgICAgIF91bmxpbmsoY29tbWFuZCk7Ci0gICAgfQotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvbWFrZV9idWlsZGluZm8udmNwcm9qIGIvUEMvVlM5LjAvbWFrZV9idWlsZGluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjQwNjVkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL21ha2VfYnVpbGRpbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0ibWFrZV9idWlsZGluZm8iDQotCVByb2plY3RHVUlEPSJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi0JUm9vdE5hbWVzcGFjZT0ibWFrZV9idWlsZGluZm8iDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8uZXhlIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKFRhcmdldERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1ha2VfYnVpbGRpbmZvLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvbWFrZV92ZXJzaW9uaW5mby52Y3Byb2ogYi9QQy9WUzkuMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGExZmQyOC4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDMyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JUHJvamVjdEdVSUQ9IntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLQlSb290TmFtZXNwYWNlPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbm50X3JjLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmMuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbm50X3JjLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmMuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250LmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCQlPdXRwdXRzPSIkKFNvbHV0aW9uRGlyKS4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCQlPdXRwdXRzPSIkKFNvbHV0aW9uRGlyKS4uXC4uXFBDXHB5dGhvbm50X3JjX2QuaCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvX2QuZXhlIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7IC4uXC4uXFBDXHB5dGhvbl9udF9kLmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtYWtlX3ZlcnNpb25pbmZvLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcGNidWlsZC5zbG4gYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE3ZjY5Yy4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9wY2J1aWxkLnNsbgorKysgL2Rldi9udWxsCkBAIC0xLDY5MCArMCwwIEBACi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMC4wMA0KLSMgVmlzdWFsIFN0dWRpbyAyMDA4DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob24iLCAicHl0aG9uLnZjcHJvaiIsICJ7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0gPSB7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfdmVyc2lvbmluZm8iLCAibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiLCAie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uY29yZSIsICJweXRob25jb3JlLnZjcHJvaiIsICJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0gPSB7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfQ0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0gPSB7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbnciLCAicHl0aG9udy52Y3Byb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3Byb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQotRW5kUHJvamVjdA0KLVByb2plY3QoInsyMTUwRTMzMy04RkRDLTQyQTMtOTQ3NC0xQTM5NTZENDZERTh9IikgPSAiU29sdXRpb24gSXRlbXMiLCAiU29sdXRpb24gSXRlbXMiLCAiezU1M0VDMzNFLTk4MTYtNDk5Ni1BNjYwLTVENjE4NkEwQjBCM30iDQotCVByb2plY3RTZWN0aW9uKFNvbHV0aW9uSXRlbXMpID0gcHJlUHJvamVjdA0KLQkJLi5cLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYyA9IC4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMNCi0JCXJlYWRtZS50eHQgPSByZWFkbWUudHh0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAid2luc291bmQiLCAid2luc291bmQudmNwcm9qIiwgInsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2RlY2ltYWwiLCAiX2RlY2ltYWwudmNwcm9qIiwgInswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlcyIsICJfY3R5cGVzLnZjcHJvaiIsICJ7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXNfdGVzdCIsICJfY3R5cGVzX3Rlc3QudmNwcm9qIiwgIns5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2VsZW1lbnR0cmVlIiwgIl9lbGVtZW50dHJlZS52Y3Byb2oiLCAiezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfbXNpIiwgIl9tc2kudmNwcm9qIiwgInszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NvY2tldCIsICJfc29ja2V0LnZjcHJvaiIsICJ7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zcWxpdGUzIiwgIl9zcWxpdGUzLnZjcHJvaiIsICJ7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0gPSB7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zc2wiLCAiX3NzbC52Y3Byb2oiLCAie0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9ID0gezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0NCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9ID0ge0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0NCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGNhcGkiLCAiX3Rlc3RjYXBpLnZjcHJvaiIsICJ7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0aW1wb3J0bXVsdGlwbGUiLCAiX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oiLCAiezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfYnoyIiwgIl9iejIudmNwcm9qIiwgIns3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2x6bWEiLCAiX2x6bWEudmNwcm9qIiwgIntGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic2VsZWN0IiwgInNlbGVjdC52Y3Byb2oiLCAiezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ1bmljb2RlZGF0YSIsICJ1bmljb2RlZGF0YS52Y3Byb2oiLCAie0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweWV4cGF0IiwgInB5ZXhwYXQudmNwcm9qIiwgIntEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiYmRpc3Rfd2luaW5zdCIsICJiZGlzdF93aW5pbnN0LnZjcHJvaiIsICJ7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfSINCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfaGFzaGxpYiIsICJfaGFzaGxpYi52Y3Byb2oiLCAiezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9ID0ge0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0NCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzcWxpdGUzIiwgInNxbGl0ZTMudmNwcm9qIiwgIntBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX211bHRpcHJvY2Vzc2luZyIsICJfbXVsdGlwcm9jZXNzaW5nLnZjcHJvaiIsICJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNzbCIsICJzc2wudmNwcm9qIiwgIntFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAia2lsbF9weXRob24iLCAia2lsbF9weXRob24udmNwcm9qIiwgIns2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbjNkbGwiLCAicHl0aG9uM2RsbC52Y3Byb2oiLCAiezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAieHhsaW1pdGVkIiwgInh4bGltaXRlZC52Y3Byb2oiLCAie0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RidWZmZXIiLCAiX3Rlc3RidWZmZXIudmNwcm9qIiwgIntBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLUdsb2JhbA0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KLQkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KLQkJRGVidWd8eDY0ID0gRGVidWd8eDY0DQotCQlQR0luc3RydW1lbnR8V2luMzIgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCVBHSW5zdHJ1bWVudHx4NjQgPSBQR0luc3RydW1lbnR8eDY0DQotCQlQR1VwZGF0ZXxXaW4zMiA9IFBHVXBkYXRlfFdpbjMyDQotCQlQR1VwZGF0ZXx4NjQgPSBQR1VwZGF0ZXx4NjQNCi0JCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyDQotCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0DQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24NCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxN30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxN30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxN30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE3fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE3fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE3fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTd9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE3fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0Y5RDcxNzgwLUYzOTMtMTFFMC1CRTUwLTA4MDAyMDBDOUE2Nn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y5RDcxNzgwLUYzOTMtMTFFMC1CRTUwLTA4MDAyMDBDOUE2Nn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0Y5RDcxNzgwLUYzOTMtMTFFMC1CRTUwLTA4MDAyMDBDOUE2Nn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RjlENzE3ODAtRjM5My0xMUUwLUJFNTAtMDgwMDIwMEM5QTY2fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RjlENzE3ODAtRjM5My0xMUUwLUJFNTAtMDgwMDIwMEM5QTY2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RjlENzE3ODAtRjM5My0xMUUwLUJFNTAtMDgwMDIwMEM5QTY2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGOUQ3MTc4MC1GMzkzLTExRTAtQkU1MC0wODAwMjAwQzlBNjZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RjlENzE3ODAtRjM5My0xMUUwLUJFNTAtMDgwMDIwMEM5QTY2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LkRlYnVnfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCi0JCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcGdpbnN0cnVtZW50LnZzcHJvcHMgYi9QQy9WUzkuMC9wZ2luc3RydW1lbnQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTljMTE3Yi4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9wZ2luc3RydW1lbnQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJwZ2luc3RydW1lbnQiDQotCU91dHB1dERpcmVjdG9yeT0iJChPdXREaXJQR0kpIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtcGdpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMiINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCUZhdm9yU2l6ZU9yU3BlZWQ9IjIiDQotCQlPbWl0RnJhbWVQb2ludGVycz0idHJ1ZSINCi0JCUVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM9ImZhbHNlIg0KLQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSJ0cnVlIg0KLQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KLQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjIiDQotCQlFbmFibGVDT01EQVRGb2xkaW5nPSIxIg0KLQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iMiINCi0JCVByb2ZpbGVHdWlkZWREYXRhYmFzZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCQoVGFyZ2V0TmFtZSkucGdkIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJPdXREaXJQR0kiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktcGdpXCINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcGd1cGRhdGUudnNwcm9wcyBiL1BDL1ZTOS4wL3BndXBkYXRlLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2Y2ZjMmQuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvcGd1cGRhdGUudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJwZ3VwZGF0ZSINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ29cIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChTb2x1dGlvbkRpcilccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCUFkZGl0aW9uYWxNYW5pZmVzdERlcGVuZGVuY2llcz0iIg0KLQkJTGlua1RpbWVDb2RlR2VuZXJhdGlvbj0iNCINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHlkLnZzcHJvcHMgYi9QQy9WUzkuMC9weWQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRjMjFlMS4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9weWQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWQiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIg0KLQkJUnVudGltZUxpYnJhcnk9IjIiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkucHlkIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLnBkYiINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJQ29tbWFuZExpbmU9IiINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHlkX2QudnNwcm9wcyBiL1BDL1ZTOS4wL3B5ZF9kLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxM2EzMGIuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvcHlkX2QudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWRfZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjAiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFIg0KLQkJUnVudGltZUxpYnJhcnk9IjMiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5weWQiDQotCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5wZGIiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcilcJChUYXJnZXROYW1lKS5saWIiDQotCQlHZW5lcmF0ZU1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJRW1iZWRNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCUNvbW1hbmRMaW5lPSIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKXB5dGhvbl9kLmV4ZSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHlleHBhdC52Y3Byb2ogYi9QQy9WUzkuMC9weWV4cGF0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThkMmNkNy4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9weWV4cGF0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0icHlleHBhdCINCi0JUHJvamVjdEdVSUQ9IntEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9Ig0KLQlSb290TmFtZXNwYWNlPSJweWV4cGF0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xweWV4cGF0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMgYi9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkwOTg3NS4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9weXByb2plY3QudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweXByb2plY3QiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjIiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0idHJ1ZSINCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7IC4uXC4uXFBDIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU4zMiINCi0JCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQlFeGNlcHRpb25IYW5kbGluZz0iMCINCi0JCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJQ29tcGlsZUFzPSIwIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iJChPdXREaXIpIg0KLQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIg0KLQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQlTdWJTeXN0ZW09IjIiDQotCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCVRhcmdldE1hY2hpbmU9IjEiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cSW5jbHVkZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHlEbGxOYW1lIg0KLQkJVmFsdWU9InB5dGhvbjM0Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChTb2x1dGlvbkRpcilccHl0aG9uLmV4ZSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iZXh0ZXJuYWxzRGlyIg0KLQkJVmFsdWU9Ii4uXC4uXC4uIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJzcWxpdGUzRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy44LjMuMSINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iYnoyRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxiemlwMi0xLjAuNiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0ibHptYURpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilceHotNS4wLjUiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFnIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGsiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjREaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrNjQiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrTGliIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWIgJCh0Y2x0a0RpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGtEaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjRMaWIiDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODUubGliICQodGNsdGs2NERpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliRGVidWciDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3B5dGhvbi52Y3Byb2ogYi9QQy9WUzkuMC9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDdkZTIxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9InB5dGhvbiINCi0JUHJvamVjdEdVSUQ9IntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob25fZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIxMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbi5pY28iDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHl0aG9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHl0aG9uM2RsbC52Y3Byb2ogYi9QQy9WUzkuMC9weXRob24zZGxsLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ3MzMzYi4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9weXRob24zZGxsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0icHl0aG9uM2RsbCINCi0JUHJvamVjdEdVSUQ9Ins4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9Ig0KLQlSb290TmFtZXNwYWNlPSJweXRob24zZGxsIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg4NiBPdXREaXI9JChPdXREaXIpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14ODYgT3V0RGlyPSQoT3V0RGlyKSByZWJ1aWxkIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcikgY2xlYW4iDQotCQkJCU91dHB1dD0iJChPdXREaXIpXHB5dGhvbjMuZGxsIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg2NCBPdXREaXI9JChPdXREaXIpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14NjQgT3V0RGlyPSQoT3V0RGlyKSByZWJ1aWxkIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcikgY2xlYW4iDQotCQkJCU91dHB1dD0iJChPdXREaXIpXHB5dGhvbjMuZGxsIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14ODYgT3V0RGlyPSQoT3V0RGlyKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcikgcmVidWlsZCINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg4NiBPdXREaXI9JChPdXREaXIpIGNsZWFuIg0KLQkJCQlPdXRwdXQ9IiQoT3V0RGlyKVxweXRob24zLmRsbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcikiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg2NCBPdXREaXI9JChPdXREaXIpIHJlYnVpbGQiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14NjQgT3V0RGlyPSQoT3V0RGlyKSBjbGVhbiINCi0JCQkJT3V0cHV0PSIkKE91dERpcilccHl0aG9uMy5kbGwiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14ODYgT3V0RGlyPSQoT3V0RGlyKSINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcikgcmVidWlsZCINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg4NiBPdXREaXI9JChPdXREaXIpIGNsZWFuIg0KLQkJCQlPdXRwdXQ9IiQoT3V0RGlyKVxweXRob24zLmRsbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg2NCBPdXREaXI9JChPdXREaXIpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14NjQgT3V0RGlyPSQoT3V0RGlyKSByZWJ1aWxkIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcikgY2xlYW4iDQotCQkJCU91dHB1dD0iJChPdXREaXIpXHB5dGhvbjMuZGxsIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiDQotCQkJVW5pcXVlSWRlbnRpZmllcj0iezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn0iDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uMy5kZWYiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob24zZGxsLmMiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQkJCT4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2luYzt4c2QiDQotCQkJVW5pcXVlSWRlbnRpZmllcj0iezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn0iDQotCQkJPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJyYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9udC5yYyINCi0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQk+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJCQk+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJCQk+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQk+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCQkJPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvaiBiL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjYwNDcwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTg3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0icHl0aG9uY29yZSINCi0JUHJvamVjdEdVSUQ9IntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9Ig0KLQlSb290TmFtZXNwYWNlPSJweXRob25jb3JlIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAmcXVvdDskKEludERpcilcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikkKFB5RGxsTmFtZSkubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAmcXVvdDskKEludERpcilcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpcikkKFB5RGxsTmFtZSkubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBEZWJ1ZyAmcXVvdDskKEludERpcilcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKV9kLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBEZWJ1ZyAmcXVvdDskKEludERpcilcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKV9kLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAmcXVvdDskKEludERpcilcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJnF1b3Q7JChJbnREaXIpXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJnF1b3Q7JChJbnREaXIpZ2V0YnVpbGRpbmZvLm8mcXVvdDsiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAmcXVvdDskKEludERpcilcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICZxdW90OyQoSW50RGlyKVwmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiZxdW90OyQoSW50RGlyKWdldGJ1aWxkaW5mby5vJnF1b3Q7Ig0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJJbmNsdWRlIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYWJzdHJhY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYWNjdS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhc2RsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFzdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxiaXRzZXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYm9vbG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxieXRlc19tZXRob2RzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJ5dGVhcnJheW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxieXRlc29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjZWxsb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNldmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNsYXNzb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29kZWNzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvbXBpbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29tcGxleG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkYXRldGltZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkZXNjcm9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkaWN0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGR5bmFtaWNfYW5ub3RhdGlvbnMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZW51bW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxlcnJjb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGV2YWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmlsZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmaWxldXRpbHMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmxvYXRvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZnJhbWVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZnVuY29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxnZW5vYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZ3JhbWluaXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZ3JhbW1hci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxpbXBvcnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaW50cmNoZWNrLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGl0ZXJvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbGlzdG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxsb25naW50cmVwci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxsb25nb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1hcnNoYWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbWVtb3J5b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1ldGFncmFtbWFyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1ldGhvZG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtb2RzdXBwb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1vZHVsZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxuYW1lc3BhY2VvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbm9kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb2JqaW1wbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvcGNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb3NkZWZzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhcnNldG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhdGNobGV2ZWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGdlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwZ2VuaGVhZGVycy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweV9jdXJzZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlhcmVuYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWNhcHN1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljdHlwZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWRlYnVnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXJyb3JzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlmcGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlnZXRvcHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltYWN0b29sYm94LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWF0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltYWNyby5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweW1lbS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXBvcnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdGF0ZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXN0cmNtcC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXN0cnRvZC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkdG9hLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXFB5dGhvbi1hc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcUHl0aG9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5dGhvbnJ1bi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRocmVhZC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxyYW5nZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzZXRvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc2xpY2VvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3RydWN0bWVtYmVyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN0cnVjdHNlcS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzeW10YWJsZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzeXNtb2R1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdGltZWZ1bmNzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHRva2VuLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHRyYWNlYmFjay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0dXBsZW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx1Y25oYXNoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHVuaWNvZGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcd2Vha3JlZm9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iTW9kdWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Nzdi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfanNvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbG9jYWxlbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sc3Byb2YuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3BpY2tsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3N0cnVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfd2luYXBpLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF0ZXhpdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhdWRpb29wLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9kYXRldGltZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xmYXVsdGhhbmRsZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1haW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfb3BlcmF0b3IuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmVfbGliLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdGF0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGltZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemlwaW1wb3J0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9Il9pbyINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9caW9iYXNlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9InpsaWIiDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY29tcHJlc3MuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZpeGVkLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZ0cmVlcy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx1bmNvbXByLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHpjb25mLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHpjb25mLmluLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHpsaWIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iY2prY29kZWNzIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcYWxnX2ppc3gwMjAxLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcY2prY29kZWNzLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcZW11X2ppc3gwMjEzXzIwMDAuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19jbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2hrLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2pwLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3Nfa3IuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc190dy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iT2JqZWN0cyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFic3RyYWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFjY3UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYm9vbG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVhcnJheW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjYXBzdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNlbGxvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2xhc3NvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxjb3VudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkaWN0b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGVudW1vYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZXhjZXB0aW9ucy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmFzdHNlYXJjaC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cmluZ2xpYlxmaW5kLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZsb2F0b2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZyYW1lb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZ1bmNvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZ2Vub2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xsb25nb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZXRob2RvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbW9kdWxlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG5hbWVzcGFjZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJccmVwbGFjZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGV0eXBlX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlBhcnNlciINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYWNjZWxlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGJpdHNldC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyMS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGxpc3Rub2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbm9kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNldG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQQyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3aW5yZWcuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGNvbmZpZy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZGxfbnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGVycm1hcC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcZ2V0cGF0aHAuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1zdmNydG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHljb25maWcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlB5dGhvbiINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cX3dhcm5pbmdzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXNkbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGJsdGlubW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY2V2YWwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjb2RlY3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjb21waWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZXJyb3JzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZmlsZXV0aWxzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmcm96ZW4uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmdXR1cmUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRhcmdzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29tcGlsZXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRvcHQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHZlcnNpb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxncmFtaW5pdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydGRsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0ZGwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtYXJzaGFsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c25wcmludGYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXN0cnRvdWwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxwZWVwaG9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5YXJlbmEuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWN0eXBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlmcGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweW1hdGguYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXRpbWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0YXRlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJjbXAuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cnRvZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR0b2EuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aG9ucnVuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHJhbmRvbS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5bXRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkX250LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdHJhY2ViYWNrLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fbnQucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHl0aG9udy52Y3Byb2ogYi9QQy9WUzkuMC9weXRob253LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y1YzA0Yi4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9weXRob253LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0icHl0aG9udyINCi0JUHJvamVjdEdVSUQ9IntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9ud19kLmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbndfZC5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xXaW5NYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcmVsZWFzZS52c3Byb3BzIGIvUEMvVlM5LjAvcmVsZWFzZS52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGRlZjkwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL3JlbGVhc2UudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJyZWxlYXNlIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iS2lsbFB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob24uZXhlIg0KLQkvPgkNCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvc2VsZWN0LnZjcHJvaiBiL1BDL1ZTOS4wL3NlbGVjdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzN2ZkOTcuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvc2VsZWN0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0ic2VsZWN0Ig0KLQlQcm9qZWN0R1VJRD0iezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30iDQotCVJvb3ROYW1lc3BhY2U9InNlbGVjdCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzkuMC9zcWxpdGUzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4YzMyOC4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9zcWxpdGUzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0ic3FsaXRlMyINCi0JUHJvamVjdEdVSUQ9IntBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9Ig0KLQlSb290TmFtZXNwYWNlPSJzcWxpdGUzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpX2QuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJnF1b3Q7JChzcWxpdGUzRGlyKSZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHJvamVjdE5hbWUpLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHNxbGl0ZTMudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKHNxbGl0ZTNEaXIpXHNxbGl0ZTMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoc3FsaXRlM0Rpcilcc3FsaXRlM2V4dC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoc3FsaXRlM0Rpcilcc3FsaXRlMy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3NxbGl0ZTMudnNwcm9wcyBiL1BDL1ZTOS4wL3NxbGl0ZTMudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUwMmRmNS4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9zcWxpdGUzLnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ic3FsaXRlMyINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHNxbGl0ZTNEaXIpIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIg0KLQkJV2FybmluZ0xldmVsPSIxIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9zc2wudmNwcm9qIGIvUEMvVlM5LjAvc3NsLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMwZTg3Ny4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC9zc2wudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI5LjAwIg0KLQlOYW1lPSJzc2wiDQotCVByb2plY3RHVUlEPSJ7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSINCi0JUm9vdE5hbWVzcGFjZT0ic3NsIg0KLQlLZXl3b3JkPSJNYWtlRmlsZVByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3VuaWNvZGVkYXRhLnZjcHJvaiBiL1BDL1ZTOS4wL3VuaWNvZGVkYXRhLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY2ZmY3Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzkuMC91bmljb2RlZGF0YS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9InVuaWNvZGVkYXRhIg0KLQlQcm9qZWN0R1VJRD0ie0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0iDQotCVJvb3ROYW1lc3BhY2U9InVuaWNvZGVkYXRhIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YV9kYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x1bmljb2RlbmFtZV9kYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGEuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC93aW5zb3VuZC52Y3Byb2ogYi9QQy9WUzkuMC93aW5zb3VuZC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZGJmMjkuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAvd2luc291bmQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI5LjAwIg0KLQlOYW1lPSJ3aW5zb3VuZCINCi0JUHJvamVjdEdVSUQ9InsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9Ig0KLQlSb290TmFtZXNwYWNlPSJ3aW5zb3VuZCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3aW5zb3VuZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3g2NC52c3Byb3BzIGIvUEMvVlM5LjAveDY0LnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNmY0NzAuLjAwMDAwMDAKLS0tIGEvUEMvVlM5LjAveDY0LnZzcHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYW1kNjQiDQotCU91dHB1dERpcmVjdG9yeT0iJChTb2x1dGlvbkRpcilcYW1kNjRcIg0KLQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uTmFtZSlcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9HUy0iDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjY0O19NX1g2NCINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeXRob25FeGUiDQotCQlWYWx1ZT0iJChIT1NUX1BZVEhPTikiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3h4bGltaXRlZC52Y3Byb2ogYi9QQy9WUzkuMC94eGxpbWl0ZWQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2FhYWQ2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL3h4bGltaXRlZC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw0MTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjkuMDAiDQotCU5hbWU9Inh4bGltaXRlZCINCi0JUHJvamVjdEdVSUQ9IntGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9Ig0KLQlSb290TmFtZXNwYWNlPSJ4eGxpbWl0ZWQiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7X1dJTjMyO19XSU5ETEw7UHlfTElNSVRFRF9BUEk7JChOT0lOSEVSSVQpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0xJTUlURURfQVBJIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0xJTUlURURfQVBJIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x4eGxpbWl0ZWQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L2FyY2hpdmUuaCBiL1BDL2JkaXN0X3dpbmluc3QvYXJjaGl2ZS5oCmluZGV4IDMxYTc4MDUuLjUwZmYxNWMgMTAwNjQ0Ci0tLSBhL1BDL2JkaXN0X3dpbmluc3QvYXJjaGl2ZS5oCisrKyBiL1BDL2JkaXN0X3dpbmluc3QvYXJjaGl2ZS5oCkBAIC0xLDEwICsxLDkgQEAKIC8qCi0gIElNUE9SVEFOVCBOT1RFOiBJRiBUSElTIEZJTEUgSVMgQ0hBTkdFRCwgV0lOSU5TVC02LkVYRSBNVVNUIEJFIFJFQ09NUElMRUQKLSAgV0lUSCBUSEUgTVNWQzYgV0lOSU5TVC5EU1cgV09SS1NQQUNFIEZJTEUgTUFOVUFMTFksIEFORCBXSU5JTlNULTcuMS5FWEUgTVVTVAotICBCRSBSRUNPTVBJTEVEIFdJVEggVEhFIE1TVkMgMjAwMy5ORVQgV0lOSU5TVC03LjEuVkNQUk9KIEZJTEUgTUFOVUFMTFkuCisgIElNUE9SVEFOVCBOT1RFOiBJRiBUSElTIEZJTEUgSVMgQ0hBTkdFRCwgUENCVUlMRFxCRElTVF9XSU5JTlNULlZDWFBST0ogTVVTVAorICBCRSBSRUJVSUxUIEFTIFdFTEwuCiAKLSAgSUYgQ0hBTkdFUyBUTyBUSElTIEZJTEUgQVJFIENIRUNLRUQgSU5UTyBQWVRIT04gQ1ZTLCBUSEUgUkVDT01QSUxFRCBCSU5BUklFUwotICBNVVNUIEJFIENIRUNLRUQgSU4gQVMgV0VMTCEKKyAgSUYgQ0hBTkdFUyBUTyBUSElTIEZJTEUgQVJFIENIRUNLRUQgSU4sIFRIRSBSRUNPTVBJTEVEIEJJTkFSSUVTIE1VU1QgQkUKKyAgQ0hFQ0tFRCBJTiBBUyBXRUxMIQogKi8KIAogI3ByYWdtYSBwYWNrKDEpCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L2JkaXN0X3dpbmluc3QudmN4cHJvaiBiL1BDL2JkaXN0X3dpbmluc3QvYmRpc3Rfd2luaW5zdC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzUwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9QQy9iZGlzdF93aW5pbnN0L2JkaXN0X3dpbmluc3QudmN4cHJvagpAQCAtMCwwICsxLDEwNCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR0luc3RydW1lbnQ8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR1VwZGF0ZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdVcGRhdGV8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ308L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPndpbmluc3Q8L1Jvb3ROYW1lc3BhY2U+CisgICAgPFN1cHBvcnRQR08+ZmFsc2U8L1N1cHBvcnRQR08+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIuLlwuLlxQQ0J1aWxkXHB5dGhvbi5wcm9wcyIgLz4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cLi5cUENCdWlsZFxweXByb2plY3QucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8T3V0RGlyPiQoUHlTb3VyY2VQYXRoKWxpYlxkaXN0dXRpbHNcY29tbWFuZFw8L091dERpcj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgICAgPFRhcmdldE5hbWU+d2luaW5zdC0kKFZpc3VhbFN0dWRpb1ZlcnNpb24pPC9UYXJnZXROYW1lPgorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJChQbGF0Zm9ybSkgPT0gJ3g2NCciPiQoVGFyZ2V0TmFtZSktYW1kNjQ8L1RhcmdldE5hbWU+CisgICAgPFRhcmdldEV4dD4uZXhlPC9UYXJnZXRFeHQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPE1pZGw+CisgICAgICA8VHlwZUxpYnJhcnlOYW1lPiQoT3V0RGlyKXdpbmluc3QudGxiPC9UeXBlTGlicmFyeU5hbWU+CisgICAgPC9NaWRsPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8T3B0aW1pemF0aW9uPk1pblNwYWNlPC9PcHRpbWl6YXRpb24+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFB5U291cmNlUGF0aClNb2R1bGVzXHpsaWI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnkgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdEZWJ1ZyciPk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+CisgICAgICA8UnVudGltZUxpYnJhcnkgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKSc9PSdSZWxlYXNlJyI+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CisgICAgPC9DbENvbXBpbGU+CisgICAgPFJlc291cmNlQ29tcGlsZT4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHlTb3VyY2VQYXRoKVBDXGJkaXN0X3dpbmluc3Q7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmNvbWN0bDMyLmxpYjtpbWFnZWhscC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImV4dHJhY3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Imluc3RhbGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJhcmNoaXZlLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iaW5zdGFsbC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPE5vbmUgSW5jbHVkZT0iUHl0aG9uUG93ZXJlZC5ibXAiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYmRpc3Rfd2luaW5zdC52Y3hwcm9qLmZpbHRlcnMgYi9QQy9iZGlzdF93aW5pbnN0L2JkaXN0X3dpbmluc3QudmN4cHJvai5maWx0ZXJzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBQQ2J1aWxkL2JkaXN0X3dpbmluc3QudmN4cHJvai5maWx0ZXJzCnJlbmFtZSB0byBQQy9iZGlzdF93aW5pbnN0L2JkaXN0X3dpbmluc3QudmN4cHJvai5maWx0ZXJzCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L2J1aWxkLmJhdCBiL1BDL2JkaXN0X3dpbmluc3QvYnVpbGQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZjU2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9QQy9iZGlzdF93aW5pbnN0L2J1aWxkLmJhdApAQCAtMCwwICsxLDIyIEBACitAZWNobyBvZmYNCitzZXRsb2NhbA0KKw0KK3NldCBEPSV+ZHAwDQorc2V0IFBDQlVJTEQ9JX5kcDAuLlwuLlxQQ0J1aWxkXA0KKw0KKw0KK2VjaG8gQnVpbGRpbmcgTGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QteHguMC5leGUNCisNCitjYWxsICIlUENCVUlMRCVlbnYuYmF0IiB4ODYNCitpZiBlcnJvcmxldmVsIDEgZ290byA6ZW9mDQorDQorbXNidWlsZCAiJUQlYmRpc3Rfd2luaW5zdC52Y3hwcm9qIiAiL3A6U29sdXRpb25EaXI9JVBDQlVJTEQlXCIgL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPVdpbjMyDQoraWYgZXJyb3JsZXZlbCAxIGdvdG8gOmVvZg0KKw0KKw0KK2VjaG8gQnVpbGRpbmcgTGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QteHguMC1hbWQ2NC5leGUNCisNCitjYWxsICIlUENCVUlMRCVlbnYuYmF0IiB4ODZfYW1kNjQNCitpZiBlcnJvcmxldmVsIDEgZ290byA6ZW9mDQorDQorbXNidWlsZCAiJUQlYmRpc3Rfd2luaW5zdC52Y3hwcm9qIiAiL3A6U29sdXRpb25EaXI9JVBDQlVJTEQlXCIgL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPXg2NA0KZGlmZiAtLWdpdCBhL1BDL2JkaXN0X3dpbmluc3QvZXh0cmFjdC5jIGIvUEMvYmRpc3Rfd2luaW5zdC9leHRyYWN0LmMKaW5kZXggYWVjOGVkYS4uMDI0OWQ5ZiAxMDA2NDQKLS0tIGEvUEMvYmRpc3Rfd2luaW5zdC9leHRyYWN0LmMKKysrIGIvUEMvYmRpc3Rfd2luaW5zdC9leHRyYWN0LmMKQEAgLTEsMTAgKzEsOSBAQAogLyoKLSAgSU1QT1JUQU5UIE5PVEU6IElGIFRISVMgRklMRSBJUyBDSEFOR0VELCBXSU5JTlNULTYuRVhFIE1VU1QgQkUgUkVDT01QSUxFRAotICBXSVRIIFRIRSBNU1ZDNiBXSU5JTlNULkRTVyBXT1JLU1BBQ0UgRklMRSBNQU5VQUxMWSwgQU5EIFdJTklOU1QtNy4xLkVYRSBNVVNUCi0gIEJFIFJFQ09NUElMRUQgV0lUSCBUSEUgTVNWQyAyMDAzLk5FVCBXSU5JTlNULTcuMS5WQ1BST0ogRklMRSBNQU5VQUxMWS4KKyAgSU1QT1JUQU5UIE5PVEU6IElGIFRISVMgRklMRSBJUyBDSEFOR0VELCBQQ0JVSUxEXEJESVNUX1dJTklOU1QuVkNYUFJPSiBNVVNUCisgIEJFIFJFQlVJTFQgQVMgV0VMTC4KIAotICBJRiBDSEFOR0VTIFRPIFRISVMgRklMRSBBUkUgQ0hFQ0tFRCBJTlRPIFBZVEhPTiBDVlMsIFRIRSBSRUNPTVBJTEVEIEJJTkFSSUVTCi0gIE1VU1QgQkUgQ0hFQ0tFRCBJTiBBUyBXRUxMIQorICBJRiBDSEFOR0VTIFRPIFRISVMgRklMRSBBUkUgQ0hFQ0tFRCBJTiwgVEhFIFJFQ09NUElMRUQgQklOQVJJRVMgTVVTVCBCRQorICBDSEVDS0VEIElOIEFTIFdFTEwhCiAqLwogCiAjaW5jbHVkZSA8d2luZG93cy5oPgpkaWZmIC0tZ2l0IGEvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLmMgYi9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYwppbmRleCBmNGNmMzQ4Li5jYjAzN2ZmIDEwMDY0NAotLS0gYS9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYworKysgYi9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYwpAQCAtMSwxMCArMSw5IEBACiAvKgotICBJTVBPUlRBTlQgTk9URTogSUYgVEhJUyBGSUxFIElTIENIQU5HRUQsIFdJTklOU1QtNi5FWEUgTVVTVCBCRSBSRUNPTVBJTEVECi0gIFdJVEggVEhFIE1TVkM2IFdJTklOU1QuRFNXIFdPUktTUEFDRSBGSUxFIE1BTlVBTExZLCBBTkQgV0lOSU5TVC03LjEuRVhFIE1VU1QKLSAgQkUgUkVDT01QSUxFRCBXSVRIIFRIRSBNU1ZDIDIwMDMuTkVUIFdJTklOU1QtNy4xLlZDUFJPSiBGSUxFIE1BTlVBTExZLgorICBJTVBPUlRBTlQgTk9URTogSUYgVEhJUyBGSUxFIElTIENIQU5HRUQsIFBDQlVJTERcQkRJU1RfV0lOSU5TVC5WQ1hQUk9KIE1VU1QKKyAgQkUgUkVCVUlMVCBBUyBXRUxMLgogCi0gIElGIENIQU5HRVMgVE8gVEhJUyBGSUxFIEFSRSBDSEVDS0VEIElOVE8gUFlUSE9OIENWUywgVEhFIFJFQ09NUElMRUQgQklOQVJJRVMKLSAgTVVTVCBCRSBDSEVDS0VEIElOIEFTIFdFTEwhCisgIElGIENIQU5HRVMgVE8gVEhJUyBGSUxFIEFSRSBDSEVDS0VEIElOLCBUSEUgUkVDT01QSUxFRCBCSU5BUklFUyBNVVNUIEJFCisgIENIRUNLRUQgSU4gQVMgV0VMTCEKICovCiAKIC8qCkBAIC0xNTQsNiArMTUzLDEzIEBACiBIQU5ETEUgaEJpdG1hcDsKIGNoYXIgKmJpdG1hcF9ieXRlczsKIAorc3RhdGljIGNvbnN0IGNoYXIgKlJFR0lTVFJZX1NVRkZJWF82NDMyID0KKyNpZmRlZiBNU19XSU42NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiI7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0zMiI7CisjZW5kaWYKKwogCiAjZGVmaW5lIFdNX05VTUZJTEVTIFdNX1VTRVIrMQogLyogd1BhcmFtOiAwLCBsUGFyYW06IHRvdGFsIG51bWJlciBvZiBmaWxlcyAqLwpAQCAtNjU4LDggKzY2NCw4IEBACiAgICAgaWYgKGgpCiAgICAgICAgIHJldHVybiBoOwogICAgIHdzcHJpbnRmKHN1YmtleV9uYW1lLAotICAgICAgICAgICAgICJTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlXFwlZC4lZFxcSW5zdGFsbFBhdGgiLAotICAgICAgICAgICAgIHB5X21ham9yLCBweV9taW5vcik7CisgICAgICAgICAgICAgIlNPRlRXQVJFXFxQeXRob25cXFB5dGhvbkNvcmVcXCVkLiVkJXNcXEluc3RhbGxQYXRoIiwKKyAgICAgICAgICAgICBweV9tYWpvciwgcHlfbWlub3IsIFJFR0lTVFJZX1NVRkZJWF82NDMyKTsKICAgICBpZiAoRVJST1JfU1VDQ0VTUyAhPSBSZWdRdWVyeVZhbHVlKEhLRVlfQ1VSUkVOVF9VU0VSLCBzdWJrZXlfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoLCAmc2l6ZSkgJiYKICAgICAgICAgRVJST1JfU1VDQ0VTUyAhPSBSZWdRdWVyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgc3Via2V5X25hbWUsCkBAIC02NjcsNyArNjczLDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3RyY2F0KGZ1bGxwYXRoLCAiXFwiKTsKICAgICBzdHJjYXQoZnVsbHBhdGgsIGZuYW1lKTsKLSAgICByZXR1cm4gTG9hZExpYnJhcnkoZnVsbHBhdGgpOworICAgIC8vIFdlIHVzZSBMT0FEX1dJVEhfQUxURVJFRF9TRUFSQ0hfUEFUSCB0byBlbnN1cmUgYW55IGRlcGVuZGVudCBETExzCisgICAgLy8gbmV4dCB0byB0aGUgUHl0aG9uIERMTCAoZWcsIHRoZSBDUlQgRExMKSBhcmUgYWxzbyBsb2FkZWQuCisgICAgcmV0dXJuIExvYWRMaWJyYXJ5RXgoZnVsbHBhdGgsIE5VTEwsIExPQURfV0lUSF9BTFRFUkVEX1NFQVJDSF9QQVRIKTsKIH0KIAogc3RhdGljIGludCBwcmVwYXJlX3NjcmlwdF9lbnZpcm9ubWVudChISU5TVEFOQ0UgaFB5dGhvbikKQEAgLTEyMTYsNyArMTIyNCw3IEBACiAKICNpbmNsdWRlIDxwcnNodC5oPgogCi1CT09MIENBTExCQUNLCitJTlRfUFRSIENBTExCQUNLCiBJbnRyb0RsZ1Byb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBMUE5NSERSIGxwbm07CkBAIC0xNTY1LDcgKzE1NzMsNyBAQAogICAgIHJldHVybiBvbGRfc2NoZW1lOwogfQogCi1CT09MIENBTExCQUNLCitJTlRfUFRSIENBTExCQUNLCiBTZWxlY3RQeXRob25EbGdQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgTFBOTUhEUiBscG5tOwpAQCAtMTg2Nyw3ICsxODc1LDcgQEAKICAgICAgICAgZmNsb3NlKGxvZ2ZpbGUpOwogfQogCi1CT09MIENBTExCQUNLCitJTlRfUFRSIENBTExCQUNLCiBJbnN0YWxsRmlsZXNEbGdQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgTFBOTUhEUiBscG5tOwpAQCAtMjAyMiw3ICsyMDMwLDcgQEAKIH0KIAogCi1CT09MIENBTExCQUNLCitJTlRfUFRSIENBTExCQUNLCiBGaW5pc2hlZERsZ1Byb2MoSFdORCBod25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBMUE5NSERSIGxwbm07CkBAIC0yMTk4LDIzICsyMjA2LDYgQEAKICAgICByZXR1cm4gVFJVRTsKIH0KIAotLy8gUmV0dXJucyBUUlVFIGlmIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyBVQUMuCi1CT09MIFBsYXRmb3JtU3VwcG9ydHNVQUMoKQotewotICAgIC8vIE5vdGUgdGhhdCB3aW4yayBkb2VzIHNlZW0gdG8gc3VwcG9ydCBTaGVsbEV4ZWN1dGUgd2l0aCAncnVuYXMnLAotICAgIC8vIGJ1dCBkb2VzICpub3QqIHN1cHBvcnQgSXNVc2VyQW5BZG1pbiAtIHNvIHdlIGp1c3QgcHJldGVuZCB0aGluZ3MKLSAgICAvLyBvbmx5IHdvcmsgb24gWFAgYW5kIGxhdGVyLgotICAgIEJPT0wgYklzV2luZG93c1hQb3JMYXRlcjsKLSAgICBPU1ZFUlNJT05JTkZPIHdpbnZlcmluZm87Ci0gICAgd2ludmVyaW5mby5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHdpbnZlcmluZm8pOwotICAgIGlmICghR2V0VmVyc2lvbkV4KCZ3aW52ZXJpbmZvKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOyAvLyBzb21ldGhpbmcgYmFkIGhhcyBnb25lIHdyb25nCi0gICAgYklzV2luZG93c1hQb3JMYXRlciA9Ci0gICAgICAgKCAod2ludmVyaW5mby5kd01ham9yVmVyc2lvbiA+IDUpIHx8Ci0gICAgICAgKCAod2ludmVyaW5mby5kd01ham9yVmVyc2lvbiA9PSA1KSAmJiAod2ludmVyaW5mby5kd01pbm9yVmVyc2lvbiA+PSAxKSApKTsKLSAgICByZXR1cm4gYklzV2luZG93c1hQb3JMYXRlcjsKLX0KLQogLy8gU3Bhd24gb3Vyc2VsZiBhcyBhbiBlbGV2YXRlZCBhcHBsaWNhdGlvbi4gIE9uIGZhaWx1cmUsIGEgbWVzc2FnZSBpcwogLy8gZGlzcGxheWVkIHRvIHRoZSB1c2VyIC0gYnV0IHRoaXMgYXBwIHdpbGwgYWx3YXlzIHRlcm1pbmF0ZSwgZXZlbgogLy8gb24gZXJyb3IuCkBAIC0yMjY4LDkgKzIyNTksMTEgQEAKICAgICBHZXRQcml2YXRlUHJvZmlsZVN0cmluZygiU2V0dXAiLCAidXNlcl9hY2Nlc3NfY29udHJvbCIsICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2FjY2Vzc19jb250cm9sLCBzaXplb2YodXNlcl9hY2Nlc3NfY29udHJvbCksIGluaV9maWxlKTsKIAorICAgIHN0cmNhdCh0YXJnZXRfdmVyc2lvbiwgUkVHSVNUUllfU1VGRklYXzY0MzIpOworCiAgICAgLy8gU2VlIGlmIHdlIG5lZWQgdG8gZG8gdGhlIFZpc3RhIFVBQyBtYWdpYy4KICAgICBpZiAoc3RyY21wKHVzZXJfYWNjZXNzX2NvbnRyb2wsICJmb3JjZSIpPT0wKSB7Ci0gICAgICAgIGlmIChQbGF0Zm9ybVN1cHBvcnRzVUFDKCkgJiYgIU15SXNVc2VyQW5BZG1pbigpKSB7CisgICAgICAgIGlmICghTXlJc1VzZXJBbkFkbWluKCkpIHsKICAgICAgICAgICAgIFNwYXduVUFDKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMjI3OCw3ICsyMjcxLDcgQEAKICAgICB9IGVsc2UgaWYgKHN0cmNtcCh1c2VyX2FjY2Vzc19jb250cm9sLCAiYXV0byIpPT0wKSB7CiAgICAgICAgIC8vIENoZWNrIGlmIGl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBVQUMgY29udHJvbCwgYmFzZWQKICAgICAgICAgLy8gb24gaG93IFB5dGhvbiBpdHNlbGYgd2FzIGluc3RhbGxlZC4KLSAgICAgICAgaWYgKFBsYXRmb3JtU3VwcG9ydHNVQUMoKSAmJiAhTXlJc1VzZXJBbkFkbWluKCkgJiYgTmVlZEF1dG9VQUMoKSkgeworICAgICAgICBpZiAoIU15SXNVc2VyQW5BZG1pbigpICYmIE5lZWRBdXRvVUFDKCkpIHsKICAgICAgICAgICAgIFNwYXduVUFDKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLnJjIGIvUEMvYmRpc3Rfd2luaW5zdC9pbnN0YWxsLnJjCmluZGV4IGQwMThiNDguLmRmYTJmZmMgMTAwNjQ0Ci0tLSBhL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5yYworKysgYi9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwucmMKQEAgLTEsOTcgKzEsMjAgQEAKIC8qCi0gIElNUE9SVEFOVCBOT1RFOiBJRiBUSElTIEZJTEUgSVMgQ0hBTkdFRCwgV0lOSU5TVC02LkVYRSBNVVNUIEJFIFJFQ09NUElMRUQKLSAgV0lUSCBUSEUgTVNWQzYgV0lOSU5TVC5EU1cgV09SS1NQQUNFIEZJTEUgTUFOVUFMTFksIEFORCBXSU5JTlNULTcuMS5FWEUgTVVTVAotICBCRSBSRUNPTVBJTEVEIFdJVEggVEhFIE1TVkMgMjAwMy5ORVQgV0lOSU5TVC03LjEuVkNQUk9KIEZJTEUgTUFOVUFMTFkuCisgIElNUE9SVEFOVCBOT1RFOiBJRiBUSElTIEZJTEUgSVMgQ0hBTkdFRCwgUENCVUlMRFxCRElTVF9XSU5JTlNULlZDWFBST0ogTVVTVAorICBCRSBSRUJVSUxUIEFTIFdFTEwuCiAKLSAgSUYgQ0hBTkdFUyBUTyBUSElTIEZJTEUgQVJFIENIRUNLRUQgSU5UTyBQWVRIT04gQ1ZTLCBUSEUgUkVDT01QSUxFRCBCSU5BUklFUwotICBNVVNUIEJFIENIRUNLRUQgSU4gQVMgV0VMTCEKKyAgSUYgQ0hBTkdFUyBUTyBUSElTIEZJTEUgQVJFIENIRUNLRUQgSU4sIFRIRSBSRUNPTVBJTEVEIEJJTkFSSUVTIE1VU1QgQkUKKyAgQ0hFQ0tFRCBJTiBBUyBXRUxMIQogKi8KIAotLy9NaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBnZW5lcmF0ZWQgcmVzb3VyY2Ugc2NyaXB0LgotLy8KKyNpbmNsdWRlIDx3aW5yZXMuaD4KICNpbmNsdWRlICJyZXNvdXJjZS5oIgogCi0jZGVmaW5lIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDIgcmVzb3VyY2UuCi0vLwotI2luY2x1ZGUgImFmeHJlcy5oIgotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI3VuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIE5ldXRyYWwgcmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX05FVSkKLSNpZmRlZiBfV0lOMzIKIExBTkdVQUdFIExBTkdfTkVVVFJBTCwgU1VCTEFOR19ORVVUUkFMCiAjcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQotI2VuZGlmIC8vX1dJTjMyCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gQml0bWFwCi0vLwogCiBJREJfQklUTUFQICAgICAgICAgICAgICBCSVRNQVAgIERJU0NBUkRBQkxFICAgICAiUHl0aG9uUG93ZXJlZC5ibXAiCi0jZW5kaWYgICAgLy8gTmV1dHJhbCByZXNvdXJjZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEdlcm1hbiAoR2VybWFueSkgcmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0RFVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdVQUdFIExBTkdfR0VSTUFOLCBTVUJMQU5HX0dFUk1BTgotI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MikKLSNlbmRpZiAvL19XSU4zMgotCi0jaWZkZWYgQVBTVFVESU9fSU5WT0tFRAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBURVhUSU5DTFVERQotLy8KLQotMSBURVhUSU5DTFVERSBESVNDQVJEQUJMRSAKLUJFR0lOCi0gICAgInJlc291cmNlLmhcMCIKLUVORAotCi0yIFRFWFRJTkNMVURFIERJU0NBUkRBQkxFIAotQkVHSU4KLSAgICAiI2luY2x1ZGUgIiJhZnhyZXMuaCIiXHJcbiIKLSAgICAiXDAiCi1FTkQKLQotMyBURVhUSU5DTFVERSBESVNDQVJEQUJMRSAKLUJFR0lOCi0gICAgIlxyXG4iCi0gICAgIlwwIgotRU5ECi0KLSNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VECi0KLSNlbmRpZiAgICAvLyBHZXJtYW4gKEdlcm1hbnkpIHJlc291cmNlcwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gRW5nbGlzaCAoVS5TLikgcmVzb3VyY2VzCi0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0VOVSkKLSNpZmRlZiBfV0lOMzIKLUxBTkdVQUdFIExBTkdfRU5HTElTSCwgU1VCTEFOR19FTkdMSVNIX1VTCi0jcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQotI2VuZGlmIC8vX1dJTjMyCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gRGlhbG9nCi0vLwotCiBJRERfSU5UUk8gRElBTE9HRVggMCwgMCwgMzc5LCAxNzgKIFNUWUxFIFdTX0NISUxEIHwgV1NfRElTQUJMRUQgfCBXU19DQVBUSU9OCiBDQVBUSU9OICJTZXR1cCIKQEAgLTE1Miw3OCArNzUsMyBAQAogICAgIEVESVRURVhUICAgICAgICBJRENfSU5GTywxMjUsNDAsMjQ3LDEzMSxFU19NVUxUSUxJTkUgfCBFU19SRUFET05MWSB8IAogICAgICAgICAgICAgICAgICAgICBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCB8IE5PVCBXU19UQUJTVE9QCiBFTkQKLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8KLS8vIERFU0lHTklORk8KLS8vCi0KLSNpZmRlZiBBUFNUVURJT19JTlZPS0VECi1HVUlERUxJTkVTIERFU0lHTklORk8gRElTQ0FSREFCTEUgCi1CRUdJTgotICAgIElERF9JTlRSTywgRElBTE9HCi0gICAgQkVHSU4KLSAgICAgICAgTEVGVE1BUkdJTiwgNwotICAgICAgICBSSUdIVE1BUkdJTiwgMzcyCi0gICAgICAgIFZFUlRHVUlERSwgMTI1Ci0gICAgICAgIFZFUlRHVUlERSwgMzcyCi0gICAgICAgIFRPUE1BUkdJTiwgNwotICAgICAgICBCT1RUT01NQVJHSU4sIDE3MQotICAgICAgICBIT1JaR1VJREUsIDgKLSAgICAgICAgSE9SWkdVSURFLCAzMQotICAgIEVORAotCi0gICAgSUREX1NFTEVDVFBZVEhPTiwgRElBTE9HCi0gICAgQkVHSU4KLSAgICAgICAgTEVGVE1BUkdJTiwgNwotICAgICAgICBSSUdIVE1BUkdJTiwgMzcyCi0gICAgICAgIFZFUlRHVUlERSwgMTI1Ci0gICAgICAgIFZFUlRHVUlERSwgMzcyCi0gICAgICAgIFRPUE1BUkdJTiwgNwotICAgICAgICBCT1RUT01NQVJHSU4sIDE3MQotICAgICAgICBIT1JaR1VJREUsIDgKLSAgICAgICAgSE9SWkdVSURFLCA0MQotICAgIEVORAotCi0gICAgSUREX0lOU1RBTExGSUxFUywgRElBTE9HCi0gICAgQkVHSU4KLSAgICAgICAgTEVGVE1BUkdJTiwgNwotICAgICAgICBSSUdIVE1BUkdJTiwgMzcyCi0gICAgICAgIFZFUlRHVUlERSwgMTI1Ci0gICAgICAgIFZFUlRHVUlERSwgMzcxCi0gICAgICAgIFRPUE1BUkdJTiwgNwotICAgICAgICBCT1RUT01NQVJHSU4sIDE3MQotICAgICAgICBIT1JaR1VJREUsIDgKLSAgICAgICAgSE9SWkdVSURFLCA0MQotICAgIEVORAotCi0gICAgSUREX0ZJTklTSEVELCBESUFMT0cKLSAgICBCRUdJTgotICAgICAgICBMRUZUTUFSR0lOLCA2Ci0gICAgICAgIFJJR0hUTUFSR0lOLCAzNzIKLSAgICAgICAgVkVSVEdVSURFLCAxMjUKLSAgICAgICAgVkVSVEdVSURFLCAzNzIKLSAgICAgICAgVE9QTUFSR0lOLCA3Ci0gICAgICAgIEJPVFRPTU1BUkdJTiwgMTcxCi0gICAgICAgIEhPUlpHVUlERSwgOAotICAgICAgICBIT1JaR1VJREUsIDQxCi0gICAgRU5ECi1FTkQKLSNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VECi0KLSNlbmRpZiAgICAvLyBFbmdsaXNoIChVLlMuKSByZXNvdXJjZXMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLQotCi0jaWZuZGVmIEFQU1RVRElPX0lOVk9LRUQKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDMgcmVzb3VyY2UuCi0vLwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jZW5kaWYgICAgLy8gbm90IEFQU1RVRElPX0lOVk9LRUQKLQpkaWZmIC0tZ2l0IGEvUEMvYmRpc3Rfd2luaW5zdC9yZXNvdXJjZS5oIGIvUEMvYmRpc3Rfd2luaW5zdC9yZXNvdXJjZS5oCmluZGV4IDM1YmEzYzIuLjg2YWVhYmIgMTAwNjQ0Ci0tLSBhL1BDL2JkaXN0X3dpbmluc3QvcmVzb3VyY2UuaAorKysgYi9QQy9iZGlzdF93aW5pbnN0L3Jlc291cmNlLmgKQEAgLTEsMTYgKzEsMTEgQEAKIC8qCi0gIElNUE9SVEFOVCBOT1RFOiBJRiBUSElTIEZJTEUgSVMgQ0hBTkdFRCwgV0lOSU5TVC02LkVYRSBNVVNUIEJFIFJFQ09NUElMRUQKLSAgV0lUSCBUSEUgTVNWQzYgV0lOSU5TVC5EU1cgV09SS1NQQUNFIEZJTEUgTUFOVUFMTFksIEFORCBXSU5JTlNULTcuMS5FWEUgTVVTVAotICBCRSBSRUNPTVBJTEVEIFdJVEggVEhFIE1TVkMgMjAwMy5ORVQgV0lOSU5TVC03LjEuVkNQUk9KIEZJTEUgTUFOVUFMTFkuCisgIElNUE9SVEFOVCBOT1RFOiBJRiBUSElTIEZJTEUgSVMgQ0hBTkdFRCwgUENCVUlMRFxCRElTVF9XSU5JTlNULlZDWFBST0ogTVVTVAorICBCRSBSRUJVSUxUIEFTIFdFTEwuCiAKLSAgSUYgQ0hBTkdFUyBUTyBUSElTIEZJTEUgQVJFIENIRUNLRUQgSU5UTyBQWVRIT04gQ1ZTLCBUSEUgUkVDT01QSUxFRCBCSU5BUklFUwotICBNVVNUIEJFIENIRUNLRUQgSU4gQVMgV0VMTCEKKyAgSUYgQ0hBTkdFUyBUTyBUSElTIEZJTEUgQVJFIENIRUNLRUQgSU4sIFRIRSBSRUNPTVBJTEVEIEJJTkFSSUVTIE1VU1QgQkUKKyAgQ0hFQ0tFRCBJTiBBUyBXRUxMIQogKi8KIAotLy97e05PX0RFUEVOREVOQ0lFU319Ci0vLyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgotLy8gVXNlZCBieSBpbnN0YWxsLnJjCi0vLwogI2RlZmluZSBJRERfRElBTE9HMSAgICAgICAgICAgICAgICAgICAgIDEwMQogI2RlZmluZSBJREJfQklUTUFQMSAgICAgICAgICAgICAgICAgICAgIDEwMwogI2RlZmluZSBJRERfSU5UUk8gICAgICAgICAgICAgICAgICAgICAgIDEwNwpAQCAtMzQsMTQgKzI5LDMgQEAKICNkZWZpbmUgSURDX0JVSUxEX0lORk8gICAgICAgICAgICAgICAgICAxMDI0CiAjZGVmaW5lIElEQ19CSVRNQVAgICAgICAgICAgICAgICAgICAgICAgMTAyNQogI2RlZmluZSBJRENfT1RIRVJQWVRIT04gICAgICAgICAgICAgICAgIDEwMjYKLQotLy8gTmV4dCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKLS8vIAotI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKLSNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUwotI2RlZmluZSBfQVBTX05FWFRfUkVTT1VSQ0VfVkFMVUUgICAgICAgIDExMgotI2RlZmluZSBfQVBTX05FWFRfQ09NTUFORF9WQUxVRSAgICAgICAgIDQwMDAxCi0jZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVFICAgICAgICAgMTAyOAotI2RlZmluZSBfQVBTX05FWFRfU1lNRURfVkFMVUUgICAgICAgICAgIDEwMQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1BDL2JkaXN0X3dpbmluc3Qvd2luaW5zdC03LjEuc2xuIGIvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LTcuMS5zbG4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMDVkMjUuLjAwMDAwMDAKLS0tIGEvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LTcuMS5zbG4KKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA4LjAwDQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3aW5pbnN0IiwgIndpbmluc3QtNy4xLnZjcHJvaiIsICJ7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1HbG9iYWwNCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb24pID0gcHJlU29sdXRpb24NCi0JCURlYnVnID0gRGVidWcNCi0JCVJlbGVhc2UgPSBSZWxlYXNlDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbikgPSBwb3N0U29sdXRpb24NCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUdsb2JhbHMpID0gcG9zdFNvbHV0aW9uDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5QWRkSW5zKSA9IHBvc3RTb2x1dGlvbg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LTcuMS52Y3Byb2ogYi9QQy9iZGlzdF93aW5pbnN0L3dpbmluc3QtNy4xLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBkYWFlOS4uMDAwMDAwMAotLS0gYS9QQy9iZGlzdF93aW5pbnN0L3dpbmluc3QtNy4xLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDIxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0id2luaW5zdCINCi0JUHJvamVjdEdVSUQ9IntFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9Ig0KLQlSb290TmFtZXNwYWNlPSJ3aW5pbnN0Ig0KLQlTY2NQcm9qZWN0TmFtZT0iIg0KLQlTY2NMb2NhbFBhdGg9IiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQiDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHRlbXAtcmVsZWFzZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjEiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXC4uXHpsaWItMS4yLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlx0ZW1wLXJlbGVhc2Uvd2luaW5zdC5wY2giDQotCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlx0ZW1wLXJlbGVhc2UvIg0KLQkJCQlPYmplY3RGaWxlPSIuXHRlbXAtcmVsZWFzZS8iDQotCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHRlbXAtcmVsZWFzZS8iDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cemxpYi0xLjIuM1x6bGliLmxpYiBpbWFnZWhscC5saWIgY29tY3RsMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQvd2luaW5zdC03LjEuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQvd2luaW5zdC02LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJTWtUeXBMaWJDb21wYXRpYmxlPSJUUlVFIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KLQkJCQlUeXBlTGlicmFyeU5hbWU9Ii5cLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kL3dpbmluc3QudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cdGVtcC1kZWJ1ZyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cLi5cemxpYi0xLjIuMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlQcmVjb21waWxlZEhlYWRlckZpbGU9Ii5cdGVtcC1kZWJ1Zy93aW5pbnN0LnBjaCINCi0JCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXHRlbXAtZGVidWcvIg0KLQkJCQlPYmplY3RGaWxlPSIuXHRlbXAtZGVidWcvIg0KLQkJCQlQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT0iLlx0ZW1wLWRlYnVnLyINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIxIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cemxpYi0xLjIuMVx6bGliLmxpYiBpbWFnZWhscC5saWIgY29tY3RsMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQvd2luaW5zdC03LjFfZC5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMiINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJMSUJDIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0iVFJVRSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4vd2luaW5zdC50bGIiDQotCQkJCUhlYWRlckZpbGVOYW1lPSIiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7cmM7ZGVmO3I7b2RsO2lkbDtocGo7YmF0Ij4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9ImV4dHJhY3QuYyI+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIxIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Imluc3RhbGwuYyI+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIxIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Imluc3RhbGwucmMiPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmwiPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iYXJjaGl2ZS5oIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSI+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSJQeXRob25Qb3dlcmVkLmJtcCI+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL2JkaXN0X3dpbmluc3Qvd2luaW5zdC04LnNsbiBiL1BDL2JkaXN0X3dpbmluc3Qvd2luaW5zdC04LnNsbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVmMTZjZi4uMDAwMDAwMAotLS0gYS9QQy9iZGlzdF93aW5pbnN0L3dpbmluc3QtOC5zbG4KKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA5LjAwDQotIyBWaXN1YWwgU3R1ZGlvIDIwMDUNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbmluc3QiLCAid2luaW5zdC04LnZjcHJvaiIsICJ7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfSINCi1FbmRQcm9qZWN0DQotR2xvYmFsDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQotCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQotCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KLQkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQotCUVuZEdsb2JhbFNlY3Rpb24NCi1FbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L3dpbmluc3QtOC52Y3Byb2ogYi9QQy9iZGlzdF93aW5pbnN0L3dpbmluc3QtOC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNDdkMWIuLjAwMDAwMDAKLS0tIGEvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LTgudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJ3aW5pbnN0Ig0KLQlQcm9qZWN0R1VJRD0ie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotCVJvb3ROYW1lc3BhY2U9Indpbmluc3QiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZCINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cdGVtcC1yZWxlYXNlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNzEudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJTWtUeXBMaWJDb21wYXRpYmxlPSJ0cnVlIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIxIg0KLQkJCQlUeXBlTGlicmFyeU5hbWU9Ii5cLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kL3dpbmluc3QudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIxIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlx0ZW1wLXJlbGVhc2Uvd2luaW5zdC5wY2giDQotCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlx0ZW1wLXJlbGVhc2UvIg0KLQkJCQlPYmplY3RGaWxlPSIuXHRlbXAtcmVsZWFzZS8iDQotCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHRlbXAtcmVsZWFzZS8iDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImltYWdlaGxwLmxpYiBjb21jdGwzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZC93aW5pbnN0LTguZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQvd2luaW5zdC02LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cdGVtcC1kZWJ1ZyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzcxLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4vd2luaW5zdC50bGIiDQotCQkJCUhlYWRlckZpbGVOYW1lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlx0ZW1wLWRlYnVnL3dpbmluc3QucGNoIg0KLQkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cdGVtcC1kZWJ1Zy8iDQotCQkJCU9iamVjdEZpbGU9Ii5cdGVtcC1kZWJ1Zy8iDQotCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXHRlbXAtZGVidWcvIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjEiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iaW1hZ2VobHAubGliIGNvbWN0bDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kL3dpbmluc3QtOF9kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIyIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdCINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSJleHRyYWN0LmMiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMSINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSJpbnN0YWxsLmMiDQotCQkJCT4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMSINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJCS8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSJpbnN0YWxsLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWx0ZXINCi0JCQkJTmFtZT0iemxpYiINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcYWRsZXIzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjcmMzMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCTwvRmlsdGVyPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCUZpbHRlcj0iaDtocHA7aHh4O2htO2lubCINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSJhcmNoaXZlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSJQeXRob25Qb3dlcmVkLmJtcCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L3dpbmluc3QuZHNwIGIvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4NTU2OS4uMDAwMDAwMAotLS0gYS9QQy9iZGlzdF93aW5pbnN0L3dpbmluc3QuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0id2luaW5zdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iIDB4MDEwMQ0KLQ0KLUNGRz13aW5pbnN0IC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIndpbmluc3QubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIndpbmluc3QubWFrIiBDRkc9Indpbmluc3QgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAid2luaW5zdCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJ3aW5pbnN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ3aW5pbnN0IC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZCINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAidGVtcC1yZWxlYXNlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9PMSAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uXC4uXC4uXHpsaWItMS4yLjMiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDcgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDcgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXHpsaWItMS4yLjNcemxpYi5saWIgaW1hZ2VobHAubGliIGNvbWRsZzMyLmxpYiBvbGUzMi5saWIgY29tY3RsMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJMSUJDIiAvb3V0OiIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQvd2luaW5zdC02LjAuZXhlIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ3aW5pbnN0IC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgInRlbXAtZGVidWciDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvWkkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvWjcgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi5cLi5cLi5cemxpYi0xLjIuMSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDcgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDcgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIC4uXC4uXC4uXHpsaWItMS4yLjNcemxpYi5saWIgaW1hZ2VobHAubGliIGNvbWRsZzMyLmxpYiBvbGUzMi5saWIgY29tY3RsMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL3BkYjpub25lIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6IkxJQkMiIC9vdXQ6Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZC93aW5pbnN0LTYuMF9kLmV4ZSINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIndpbmluc3QgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAid2luaW5zdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uXGV4dHJhY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uXGluc3RhbGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uXGluc3RhbGwucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubCINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS5cYXJjaGl2ZS5oDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgIlJlc291cmNlIEZpbGVzIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9LlxQeXRob25Qb3dlcmVkLmJtcA0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LmRzdyBiL1BDL2JkaXN0X3dpbmluc3Qvd2luaW5zdC5kc3cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYzY2YWEuLjAwMDAwMDAKLS0tIGEvUEMvYmRpc3Rfd2luaW5zdC93aW5pbnN0LmRzdworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLU1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIndpbmluc3QiPS5cd2luaW5zdC5kc3AgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotR2xvYmFsOg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08Mz4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQpkaWZmIC0tZ2l0IGEvUEMvY2xpbmljL21zdmNydG1vZHVsZS5jLmggYi9QQy9jbGluaWMvbXN2Y3J0bW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2E3MmM0Ci0tLSAvZGV2L251bGwKKysrIGIvUEMvY2xpbmljL21zdmNydG1vZHVsZS5jLmgKQEAgLTAsMCArMSw1NTMgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihtc3ZjcnRfaGVhcG1pbl9fZG9jX18sCisiaGVhcG1pbigkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiTWluaW1pemUgdGhlIG1hbGxvYygpIGhlYXAuXG4iCisiXG4iCisiRm9yY2UgdGhlIG1hbGxvYygpIGhlYXAgdG8gY2xlYW4gaXRzZWxmIHVwIGFuZCByZXR1cm4gdW51c2VkIGJsb2Nrc1xuIgorInRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBPbiBmYWlsdXJlLCB0aGlzIHJhaXNlcyBPU0Vycm9yLiIpOworCisjZGVmaW5lIE1TVkNSVF9IRUFQTUlOX01FVEhPRERFRiAgICBcCisgICAgeyJoZWFwbWluIiwgKFB5Q0Z1bmN0aW9uKW1zdmNydF9oZWFwbWluLCBNRVRIX05PQVJHUywgbXN2Y3J0X2hlYXBtaW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK21zdmNydF9oZWFwbWluX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfaGVhcG1pbihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBtc3ZjcnRfaGVhcG1pbl9pbXBsKG1vZHVsZSk7Cit9CisKK1B5RG9jX1NUUlZBUihtc3ZjcnRfbG9ja2luZ19fZG9jX18sCisibG9ja2luZygkbW9kdWxlLCBmZCwgbW9kZSwgbmJ5dGVzLCAvKVxuIgorIi0tXG4iCisiXG4iCisiTG9jayBwYXJ0IG9mIGEgZmlsZSBiYXNlZCBvbiBmaWxlIGRlc2NyaXB0b3IgZmQgZnJvbSB0aGUgQyBydW50aW1lLlxuIgorIlxuIgorIlJhaXNlcyBJT0Vycm9yIG9uIGZhaWx1cmUuIFRoZSBsb2NrZWQgcmVnaW9uIG9mIHRoZSBmaWxlIGV4dGVuZHMgZnJvbVxuIgorInRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gZm9yIG5ieXRlcyBieXRlcywgYW5kIG1heSBjb250aW51ZSBiZXlvbmRcbiIKKyJ0aGUgZW5kIG9mIHRoZSBmaWxlLiBtb2RlIG11c3QgYmUgb25lIG9mIHRoZSBMS18qIGNvbnN0YW50cyBsaXN0ZWRcbiIKKyJiZWxvdy4gTXVsdGlwbGUgcmVnaW9ucyBpbiBhIGZpbGUgbWF5IGJlIGxvY2tlZCBhdCB0aGUgc2FtZSB0aW1lLCBidXRcbiIKKyJtYXkgbm90IG92ZXJsYXAuIEFkamFjZW50IHJlZ2lvbnMgYXJlIG5vdCBtZXJnZWQ7IHRoZXkgbXVzdCBiZSB1bmxvY2tlZFxuIgorImluZGl2aWR1YWxseS4iKTsKKworI2RlZmluZSBNU1ZDUlRfTE9DS0lOR19NRVRIT0RERUYgICAgXAorICAgIHsibG9ja2luZyIsIChQeUNGdW5jdGlvbiltc3ZjcnRfbG9ja2luZywgTUVUSF9WQVJBUkdTLCBtc3ZjcnRfbG9ja2luZ19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X2xvY2tpbmdfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBtb2RlLCBsb25nIG5ieXRlcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfbG9ja2luZyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgaW50IG1vZGU7CisgICAgbG9uZyBuYnl0ZXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpbDpsb2NraW5nIiwKKyAgICAgICAgJmZkLCAmbW9kZSwgJm5ieXRlcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBtc3ZjcnRfbG9ja2luZ19pbXBsKG1vZHVsZSwgZmQsIG1vZGUsIG5ieXRlcyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG1zdmNydF9zZXRtb2RlX19kb2NfXywKKyJzZXRtb2RlKCRtb2R1bGUsIGZkLCBtb2RlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2V0IHRoZSBsaW5lLWVuZCB0cmFuc2xhdGlvbiBtb2RlIGZvciB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLlxuIgorIlxuIgorIlRvIHNldCBpdCB0byB0ZXh0IG1vZGUsIGZsYWdzIHNob3VsZCBiZSBvcy5PX1RFWFQ7IGZvciBiaW5hcnksIGl0XG4iCisic2hvdWxkIGJlIG9zLk9fQklOQVJZLlxuIgorIlxuIgorIlJldHVybiB2YWx1ZSBpcyB0aGUgcHJldmlvdXMgbW9kZS4iKTsKKworI2RlZmluZSBNU1ZDUlRfU0VUTU9ERV9NRVRIT0RERUYgICAgXAorICAgIHsic2V0bW9kZSIsIChQeUNGdW5jdGlvbiltc3ZjcnRfc2V0bW9kZSwgTUVUSF9WQVJBUkdTLCBtc3ZjcnRfc2V0bW9kZV9fZG9jX199LAorCitzdGF0aWMgbG9uZworbXN2Y3J0X3NldG1vZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBmbGFncyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfc2V0bW9kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgaW50IGZsYWdzOworICAgIGxvbmcgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c2V0bW9kZSIsCisgICAgICAgICZmZCwgJmZsYWdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBtc3ZjcnRfc2V0bW9kZV9pbXBsKG1vZHVsZSwgZmQsIGZsYWdzKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG1zdmNydF9vcGVuX29zZmhhbmRsZV9fZG9jX18sCisib3Blbl9vc2ZoYW5kbGUoJG1vZHVsZSwgaGFuZGxlLCBmbGFncywgLylcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhIEMgcnVudGltZSBmaWxlIGRlc2NyaXB0b3IgZnJvbSB0aGUgZmlsZSBoYW5kbGUgaGFuZGxlLlxuIgorIlxuIgorIlRoZSBmbGFncyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgYml0d2lzZSBPUiBvZiBvcy5PX0FQUEVORCwgb3MuT19SRE9OTFksXG4iCisiYW5kIG9zLk9fVEVYVC4gVGhlIHJldHVybmVkIGZpbGUgZGVzY3JpcHRvciBtYXkgYmUgdXNlZCBhcyBhIHBhcmFtZXRlclxuIgorInRvIG9zLmZkb3BlbigpIHRvIGNyZWF0ZSBhIGZpbGUgb2JqZWN0LiIpOworCisjZGVmaW5lIE1TVkNSVF9PUEVOX09TRkhBTkRMRV9NRVRIT0RERUYgICAgXAorICAgIHsib3Blbl9vc2ZoYW5kbGUiLCAoUHlDRnVuY3Rpb24pbXN2Y3J0X29wZW5fb3NmaGFuZGxlLCBNRVRIX1ZBUkFSR1MsIG1zdmNydF9vcGVuX29zZmhhbmRsZV9fZG9jX199LAorCitzdGF0aWMgbG9uZworbXN2Y3J0X29wZW5fb3NmaGFuZGxlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfaW50cHRyX3QgaGFuZGxlLCBpbnQgZmxhZ3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X29wZW5fb3NmaGFuZGxlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBpbnQgZmxhZ3M7CisgICAgbG9uZyBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiX1B5X1BBUlNFX0lOVFBUUiJpOm9wZW5fb3NmaGFuZGxlIiwKKyAgICAgICAgJmhhbmRsZSwgJmZsYWdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBtc3ZjcnRfb3Blbl9vc2ZoYW5kbGVfaW1wbChtb2R1bGUsIGhhbmRsZSwgZmxhZ3MpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZyhfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIobXN2Y3J0X2dldF9vc2ZoYW5kbGVfX2RvY19fLAorImdldF9vc2ZoYW5kbGUoJG1vZHVsZSwgZmQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGZpbGUgaGFuZGxlIGZvciB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLlxuIgorIlxuIgorIlJhaXNlcyBJT0Vycm9yIGlmIGZkIGlzIG5vdCByZWNvZ25pemVkLiIpOworCisjZGVmaW5lIE1TVkNSVF9HRVRfT1NGSEFORExFX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRfb3NmaGFuZGxlIiwgKFB5Q0Z1bmN0aW9uKW1zdmNydF9nZXRfb3NmaGFuZGxlLCBNRVRIX08sIG1zdmNydF9nZXRfb3NmaGFuZGxlX19kb2NfX30sCisKK3N0YXRpYyBQeV9pbnRwdHJfdAorbXN2Y3J0X2dldF9vc2ZoYW5kbGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpOworCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X2dldF9vc2ZoYW5kbGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgUHlfaW50cHRyX3QgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaTpnZXRfb3NmaGFuZGxlIiwgJmZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBtc3ZjcnRfZ2V0X29zZmhhbmRsZV9pbXBsKG1vZHVsZSwgZmQpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCAqKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihtc3ZjcnRfa2JoaXRfX2RvY19fLAorImtiaGl0KCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdHJ1ZSBpZiBhIGtleXByZXNzIGlzIHdhaXRpbmcgdG8gYmUgcmVhZC4iKTsKKworI2RlZmluZSBNU1ZDUlRfS0JISVRfTUVUSE9EREVGICAgIFwKKyAgICB7ImtiaGl0IiwgKFB5Q0Z1bmN0aW9uKW1zdmNydF9rYmhpdCwgTUVUSF9OT0FSR1MsIG1zdmNydF9rYmhpdF9fZG9jX199LAorCitzdGF0aWMgbG9uZworbXN2Y3J0X2tiaGl0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfa2JoaXQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBsb25nIF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gbXN2Y3J0X2tiaGl0X2ltcGwobW9kdWxlKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG1zdmNydF9nZXRjaF9fZG9jX18sCisiZ2V0Y2goJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgYSBrZXlwcmVzcyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyIGFzIGEgYnl0ZSBzdHJpbmcuXG4iCisiXG4iCisiTm90aGluZyBpcyBlY2hvZWQgdG8gdGhlIGNvbnNvbGUuIFRoaXMgY2FsbCB3aWxsIGJsb2NrIGlmIGEga2V5cHJlc3MgaXNcbiIKKyJub3QgYWxyZWFkeSBhdmFpbGFibGUsIGJ1dCB3aWxsIG5vdCB3YWl0IGZvciBFbnRlciB0byBiZSBwcmVzc2VkLiBJZiB0aGVcbiIKKyJwcmVzc2VkIGtleSB3YXMgYSBzcGVjaWFsIGZ1bmN0aW9uIGtleSwgdGhpcyB3aWxsIHJldHVybiBcJ1xcMDAwXCcgb3JcbiIKKyJcJ1xceGUwXCc7IHRoZSBuZXh0IGNhbGwgd2lsbCByZXR1cm4gdGhlIGtleWNvZGUuIFRoZSBDb250cm9sLUMga2V5cHJlc3NcbiIKKyJjYW5ub3QgYmUgcmVhZCB3aXRoIHRoaXMgZnVuY3Rpb24uIik7CisKKyNkZWZpbmUgTVNWQ1JUX0dFVENIX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRjaCIsIChQeUNGdW5jdGlvbiltc3ZjcnRfZ2V0Y2gsIE1FVEhfTk9BUkdTLCBtc3ZjcnRfZ2V0Y2hfX2RvY19ffSwKKworc3RhdGljIGludAorbXN2Y3J0X2dldGNoX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfZ2V0Y2goUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjaGFyIHNbMV07CisKKyAgICBzWzBdID0gbXN2Y3J0X2dldGNoX2ltcGwobW9kdWxlKTsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIDEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG1zdmNydF9nZXR3Y2hfX2RvY19fLAorImdldHdjaCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV2lkZSBjaGFyIHZhcmlhbnQgb2YgZ2V0Y2goKSwgcmV0dXJuaW5nIGEgVW5pY29kZSB2YWx1ZS4iKTsKKworI2RlZmluZSBNU1ZDUlRfR0VUV0NIX01FVEhPRERFRiAgICBcCisgICAgeyJnZXR3Y2giLCAoUHlDRnVuY3Rpb24pbXN2Y3J0X2dldHdjaCwgTUVUSF9OT0FSR1MsIG1zdmNydF9nZXR3Y2hfX2RvY19ffSwKKworc3RhdGljIHdjaGFyX3QKK21zdmNydF9nZXR3Y2hfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK21zdmNydF9nZXR3Y2goUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB3Y2hhcl90IF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gbXN2Y3J0X2dldHdjaF9pbXBsKG1vZHVsZSk7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKF9yZXR1cm5fdmFsdWUpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG1zdmNydF9nZXRjaGVfX2RvY19fLAorImdldGNoZSgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2ltaWxhciB0byBnZXRjaCgpLCBidXQgdGhlIGtleXByZXNzIHdpbGwgYmUgZWNob2VkIGlmIHBvc3NpYmxlLiIpOworCisjZGVmaW5lIE1TVkNSVF9HRVRDSEVfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldGNoZSIsIChQeUNGdW5jdGlvbiltc3ZjcnRfZ2V0Y2hlLCBNRVRIX05PQVJHUywgbXN2Y3J0X2dldGNoZV9fZG9jX199LAorCitzdGF0aWMgaW50Cittc3ZjcnRfZ2V0Y2hlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfZ2V0Y2hlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY2hhciBzWzFdOworCisgICAgc1swXSA9IG1zdmNydF9nZXRjaGVfaW1wbChtb2R1bGUpOworICAgIHJldHVybl92YWx1ZSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgMSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIobXN2Y3J0X2dldHdjaGVfX2RvY19fLAorImdldHdjaGUoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIldpZGUgY2hhciB2YXJpYW50IG9mIGdldGNoZSgpLCByZXR1cm5pbmcgYSBVbmljb2RlIHZhbHVlLiIpOworCisjZGVmaW5lIE1TVkNSVF9HRVRXQ0hFX01FVEhPRERFRiAgICBcCisgICAgeyJnZXR3Y2hlIiwgKFB5Q0Z1bmN0aW9uKW1zdmNydF9nZXR3Y2hlLCBNRVRIX05PQVJHUywgbXN2Y3J0X2dldHdjaGVfX2RvY19ffSwKKworc3RhdGljIHdjaGFyX3QKK21zdmNydF9nZXR3Y2hlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfZ2V0d2NoZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHdjaGFyX3QgX3JldHVybl92YWx1ZTsKKworICAgIF9yZXR1cm5fdmFsdWUgPSBtc3ZjcnRfZ2V0d2NoZV9pbXBsKG1vZHVsZSk7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKF9yZXR1cm5fdmFsdWUpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG1zdmNydF9wdXRjaF9fZG9jX18sCisicHV0Y2goJG1vZHVsZSwgY2hhciwgLylcbiIKKyItLVxuIgorIlxuIgorIlByaW50IHRoZSBieXRlIHN0cmluZyBjaGFyIHRvIHRoZSBjb25zb2xlIHdpdGhvdXQgYnVmZmVyaW5nLiIpOworCisjZGVmaW5lIE1TVkNSVF9QVVRDSF9NRVRIT0RERUYgICAgXAorICAgIHsicHV0Y2giLCAoUHlDRnVuY3Rpb24pbXN2Y3J0X3B1dGNoLCBNRVRIX08sIG1zdmNydF9wdXRjaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X3B1dGNoX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgY2hhciBjaGFyX3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK21zdmNydF9wdXRjaChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNoYXIgY2hhcl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiYzpwdXRjaCIsICZjaGFyX3ZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG1zdmNydF9wdXRjaF9pbXBsKG1vZHVsZSwgY2hhcl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKG1zdmNydF9wdXR3Y2hfX2RvY19fLAorInB1dHdjaCgkbW9kdWxlLCB1bmljb2RlX2NoYXIsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXaWRlIGNoYXIgdmFyaWFudCBvZiBwdXRjaCgpLCBhY2NlcHRpbmcgYSBVbmljb2RlIHZhbHVlLiIpOworCisjZGVmaW5lIE1TVkNSVF9QVVRXQ0hfTUVUSE9EREVGICAgIFwKKyAgICB7InB1dHdjaCIsIChQeUNGdW5jdGlvbiltc3ZjcnRfcHV0d2NoLCBNRVRIX08sIG1zdmNydF9wdXR3Y2hfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK21zdmNydF9wdXR3Y2hfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgdW5pY29kZV9jaGFyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK21zdmNydF9wdXR3Y2goUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgdW5pY29kZV9jaGFyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJDOnB1dHdjaCIsICZ1bmljb2RlX2NoYXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gbXN2Y3J0X3B1dHdjaF9pbXBsKG1vZHVsZSwgdW5pY29kZV9jaGFyKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIobXN2Y3J0X3VuZ2V0Y2hfX2RvY19fLAorInVuZ2V0Y2goJG1vZHVsZSwgY2hhciwgLylcbiIKKyItLVxuIgorIlxuIgorIk9wcG9zaXRlIG9mIGdldGNoLlxuIgorIlxuIgorIkNhdXNlIHRoZSBieXRlIHN0cmluZyBjaGFyIHRvIGJlIFwicHVzaGVkIGJhY2tcIiBpbnRvIHRoZVxuIgorImNvbnNvbGUgYnVmZmVyOyBpdCB3aWxsIGJlIHRoZSBuZXh0IGNoYXJhY3RlciByZWFkIGJ5XG4iCisiZ2V0Y2goKSBvciBnZXRjaGUoKS4iKTsKKworI2RlZmluZSBNU1ZDUlRfVU5HRVRDSF9NRVRIT0RERUYgICAgXAorICAgIHsidW5nZXRjaCIsIChQeUNGdW5jdGlvbiltc3ZjcnRfdW5nZXRjaCwgTUVUSF9PLCBtc3ZjcnRfdW5nZXRjaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X3VuZ2V0Y2hfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjaGFyIGNoYXJfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X3VuZ2V0Y2goUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjaGFyIGNoYXJfdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImM6dW5nZXRjaCIsICZjaGFyX3ZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG1zdmNydF91bmdldGNoX2ltcGwobW9kdWxlLCBjaGFyX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIobXN2Y3J0X3VuZ2V0d2NoX19kb2NfXywKKyJ1bmdldHdjaCgkbW9kdWxlLCB1bmljb2RlX2NoYXIsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXaWRlIGNoYXIgdmFyaWFudCBvZiB1bmdldGNoKCksIGFjY2VwdGluZyBhIFVuaWNvZGUgdmFsdWUuIik7CisKKyNkZWZpbmUgTVNWQ1JUX1VOR0VUV0NIX01FVEhPRERFRiAgICBcCisgICAgeyJ1bmdldHdjaCIsIChQeUNGdW5jdGlvbiltc3ZjcnRfdW5nZXR3Y2gsIE1FVEhfTywgbXN2Y3J0X3VuZ2V0d2NoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfdW5nZXR3Y2hfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgdW5pY29kZV9jaGFyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK21zdmNydF91bmdldHdjaChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCB1bmljb2RlX2NoYXI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkM6dW5nZXR3Y2giLCAmdW5pY29kZV9jaGFyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG1zdmNydF91bmdldHdjaF9pbXBsKG1vZHVsZSwgdW5pY29kZV9jaGFyKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChfREVCVUcpCisKK1B5RG9jX1NUUlZBUihtc3ZjcnRfQ3J0U2V0UmVwb3J0RmlsZV9fZG9jX18sCisiQ3J0U2V0UmVwb3J0RmlsZSgkbW9kdWxlLCB0eXBlLCBmaWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV3JhcHBlciBhcm91bmQgX0NydFNldFJlcG9ydEZpbGUuXG4iCisiXG4iCisiT25seSBhdmFpbGFibGUgb24gRGVidWcgYnVpbGRzLiIpOworCisjZGVmaW5lIE1TVkNSVF9DUlRTRVRSRVBPUlRGSUxFX01FVEhPRERFRiAgICBcCisgICAgeyJDcnRTZXRSZXBvcnRGaWxlIiwgKFB5Q0Z1bmN0aW9uKW1zdmNydF9DcnRTZXRSZXBvcnRGaWxlLCBNRVRIX1ZBUkFSR1MsIG1zdmNydF9DcnRTZXRSZXBvcnRGaWxlX19kb2NfX30sCisKK3N0YXRpYyBsb25nCittc3ZjcnRfQ3J0U2V0UmVwb3J0RmlsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCB0eXBlLCBpbnQgZmlsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfQ3J0U2V0UmVwb3J0RmlsZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgdHlwZTsKKyAgICBpbnQgZmlsZTsKKyAgICBsb25nIF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOkNydFNldFJlcG9ydEZpbGUiLAorICAgICAgICAmdHlwZSwgJmZpbGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG1zdmNydF9DcnRTZXRSZXBvcnRGaWxlX2ltcGwobW9kdWxlLCB0eXBlLCBmaWxlKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoX0RFQlVHKSAqLworCisjaWYgZGVmaW5lZChfREVCVUcpCisKK1B5RG9jX1NUUlZBUihtc3ZjcnRfQ3J0U2V0UmVwb3J0TW9kZV9fZG9jX18sCisiQ3J0U2V0UmVwb3J0TW9kZSgkbW9kdWxlLCB0eXBlLCBtb2RlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV3JhcHBlciBhcm91bmQgX0NydFNldFJlcG9ydE1vZGUuXG4iCisiXG4iCisiT25seSBhdmFpbGFibGUgb24gRGVidWcgYnVpbGRzLiIpOworCisjZGVmaW5lIE1TVkNSVF9DUlRTRVRSRVBPUlRNT0RFX01FVEhPRERFRiAgICBcCisgICAgeyJDcnRTZXRSZXBvcnRNb2RlIiwgKFB5Q0Z1bmN0aW9uKW1zdmNydF9DcnRTZXRSZXBvcnRNb2RlLCBNRVRIX1ZBUkFSR1MsIG1zdmNydF9DcnRTZXRSZXBvcnRNb2RlX19kb2NfX30sCisKK3N0YXRpYyBsb25nCittc3ZjcnRfQ3J0U2V0UmVwb3J0TW9kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCB0eXBlLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfQ3J0U2V0UmVwb3J0TW9kZShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgdHlwZTsKKyAgICBpbnQgbW9kZTsKKyAgICBsb25nIF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOkNydFNldFJlcG9ydE1vZGUiLAorICAgICAgICAmdHlwZSwgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG1zdmNydF9DcnRTZXRSZXBvcnRNb2RlX2ltcGwobW9kdWxlLCB0eXBlLCBtb2RlKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoX0RFQlVHKSAqLworCisjaWYgZGVmaW5lZChfREVCVUcpCisKK1B5RG9jX1NUUlZBUihtc3ZjcnRfc2V0X2Vycm9yX21vZGVfX2RvY19fLAorInNldF9lcnJvcl9tb2RlKCRtb2R1bGUsIG1vZGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXcmFwcGVyIGFyb3VuZCBfc2V0X2Vycm9yX21vZGUuXG4iCisiXG4iCisiT25seSBhdmFpbGFibGUgb24gRGVidWcgYnVpbGRzLiIpOworCisjZGVmaW5lIE1TVkNSVF9TRVRfRVJST1JfTU9ERV9NRVRIT0RERUYgICAgXAorICAgIHsic2V0X2Vycm9yX21vZGUiLCAoUHlDRnVuY3Rpb24pbXN2Y3J0X3NldF9lcnJvcl9tb2RlLCBNRVRIX08sIG1zdmNydF9zZXRfZXJyb3JfbW9kZV9fZG9jX199LAorCitzdGF0aWMgbG9uZworbXN2Y3J0X3NldF9lcnJvcl9tb2RlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IG1vZGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X3NldF9lcnJvcl9tb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IG1vZGU7CisgICAgbG9uZyBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJpOnNldF9lcnJvcl9tb2RlIiwgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG1zdmNydF9zZXRfZXJyb3JfbW9kZV9pbXBsKG1vZHVsZSwgbW9kZSk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9ERUJVRykgKi8KKworUHlEb2NfU1RSVkFSKG1zdmNydF9TZXRFcnJvck1vZGVfX2RvY19fLAorIlNldEVycm9yTW9kZSgkbW9kdWxlLCBtb2RlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiV3JhcHBlciBhcm91bmQgU2V0RXJyb3JNb2RlLiIpOworCisjZGVmaW5lIE1TVkNSVF9TRVRFUlJPUk1PREVfTUVUSE9EREVGICAgIFwKKyAgICB7IlNldEVycm9yTW9kZSIsIChQeUNGdW5jdGlvbiltc3ZjcnRfU2V0RXJyb3JNb2RlLCBNRVRIX08sIG1zdmNydF9TZXRFcnJvck1vZGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK21zdmNydF9TZXRFcnJvck1vZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCB1bnNpZ25lZCBpbnQgbW9kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCittc3ZjcnRfU2V0RXJyb3JNb2RlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IG1vZGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIkk6U2V0RXJyb3JNb2RlIiwgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gbXN2Y3J0X1NldEVycm9yTW9kZV9pbXBsKG1vZHVsZSwgbW9kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmbmRlZiBNU1ZDUlRfQ1JUU0VUUkVQT1JURklMRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE1TVkNSVF9DUlRTRVRSRVBPUlRGSUxFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE1TVkNSVF9DUlRTRVRSRVBPUlRGSUxFX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBNU1ZDUlRfQ1JUU0VUUkVQT1JUTU9ERV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE1TVkNSVF9DUlRTRVRSRVBPUlRNT0RFX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKE1TVkNSVF9DUlRTRVRSRVBPUlRNT0RFX01FVEhPRERFRikgKi8KKworI2lmbmRlZiBNU1ZDUlRfU0VUX0VSUk9SX01PREVfTUVUSE9EREVGCisgICAgI2RlZmluZSBNU1ZDUlRfU0VUX0VSUk9SX01PREVfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoTVNWQ1JUX1NFVF9FUlJPUl9NT0RFX01FVEhPRERFRikgKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yYTc5NGM1MjBkNmFlODg3IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL1BDL2NsaW5pYy93aW5yZWcuYy5oIGIvUEMvY2xpbmljL3dpbnJlZy5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhZTJjMAotLS0gL2Rldi9udWxsCisrKyBiL1BDL2NsaW5pYy93aW5yZWcuYy5oCkBAIC0wLDAgKzEsMTA1OSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHdpbnJlZ19IS0VZVHlwZV9DbG9zZV9fZG9jX18sCisiQ2xvc2UoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDbG9zZXMgdGhlIHVuZGVybHlpbmcgV2luZG93cyBoYW5kbGUuXG4iCisiXG4iCisiSWYgdGhlIGhhbmRsZSBpcyBhbHJlYWR5IGNsb3NlZCwgbm8gZXJyb3IgaXMgcmFpc2VkLiIpOworCisjZGVmaW5lIFdJTlJFR19IS0VZVFlQRV9DTE9TRV9NRVRIT0RERUYgICAgXAorICAgIHsiQ2xvc2UiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0hLRVlUeXBlX0Nsb3NlLCBNRVRIX05PQVJHUywgd2lucmVnX0hLRVlUeXBlX0Nsb3NlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfSEtFWVR5cGVfQ2xvc2VfaW1wbChQeUhLRVlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0hLRVlUeXBlX0Nsb3NlKFB5SEtFWU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gd2lucmVnX0hLRVlUeXBlX0Nsb3NlX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfSEtFWVR5cGVfRGV0YWNoX19kb2NfXywKKyJEZXRhY2goJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZXRhY2hlcyB0aGUgV2luZG93cyBoYW5kbGUgZnJvbSB0aGUgaGFuZGxlIG9iamVjdC5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUgaGFuZGxlIGJlZm9yZSBpdCBpcyBkZXRhY2hlZC4gIElmIHRoZVxuIgorImhhbmRsZSBpcyBhbHJlYWR5IGRldGFjaGVkLCB0aGlzIHdpbGwgcmV0dXJuIHplcm8uXG4iCisiXG4iCisiQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgaGFuZGxlIGlzIGVmZmVjdGl2ZWx5IGludmFsaWRhdGVkLFxuIgorImJ1dCB0aGUgaGFuZGxlIGlzIG5vdCBjbG9zZWQuICBZb3Ugd291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4geW91XG4iCisibmVlZCB0aGUgdW5kZXJseWluZyB3aW4zMiBoYW5kbGUgdG8gZXhpc3QgYmV5b25kIHRoZSBsaWZldGltZSBvZiB0aGVcbiIKKyJoYW5kbGUgb2JqZWN0LiIpOworCisjZGVmaW5lIFdJTlJFR19IS0VZVFlQRV9ERVRBQ0hfTUVUSE9EREVGICAgIFwKKyAgICB7IkRldGFjaCIsIChQeUNGdW5jdGlvbil3aW5yZWdfSEtFWVR5cGVfRGV0YWNoLCBNRVRIX05PQVJHUywgd2lucmVnX0hLRVlUeXBlX0RldGFjaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0hLRVlUeXBlX0RldGFjaF9pbXBsKFB5SEtFWU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfSEtFWVR5cGVfRGV0YWNoKFB5SEtFWU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gd2lucmVnX0hLRVlUeXBlX0RldGFjaF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIod2lucmVnX0hLRVlUeXBlX19fZW50ZXJfX19fZG9jX18sCisiX19lbnRlcl9fKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iKTsKKworI2RlZmluZSBXSU5SRUdfSEtFWVRZUEVfX19FTlRFUl9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX2VudGVyX18iLCAoUHlDRnVuY3Rpb24pd2lucmVnX0hLRVlUeXBlX19fZW50ZXJfXywgTUVUSF9OT0FSR1MsIHdpbnJlZ19IS0VZVHlwZV9fX2VudGVyX19fX2RvY19ffSwKKworc3RhdGljIFB5SEtFWU9iamVjdCAqCit3aW5yZWdfSEtFWVR5cGVfX19lbnRlcl9fX2ltcGwoUHlIS0VZT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19IS0VZVHlwZV9fX2VudGVyX18oUHlIS0VZT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5SEtFWU9iamVjdCAqX3JldHVybl92YWx1ZTsKKworICAgIF9yZXR1cm5fdmFsdWUgPSB3aW5yZWdfSEtFWVR5cGVfX19lbnRlcl9fX2ltcGwoc2VsZik7CisgICAgcmV0dXJuX3ZhbHVlID0gKFB5T2JqZWN0ICopX3JldHVybl92YWx1ZTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfSEtFWVR5cGVfX19leGl0X19fX2RvY19fLAorIl9fZXhpdF9fKCRzZWxmLCAvLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG4iCisiLS1cbiIKKyJcbiIpOworCisjZGVmaW5lIFdJTlJFR19IS0VZVFlQRV9fX0VYSVRfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19leGl0X18iLCAoUHlDRnVuY3Rpb24pd2lucmVnX0hLRVlUeXBlX19fZXhpdF9fLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgd2lucmVnX0hLRVlUeXBlX19fZXhpdF9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfSEtFWVR5cGVfX19leGl0X19faW1wbChQeUhLRVlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpleGNfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGNfdmFsdWUsIFB5T2JqZWN0ICp0cmFjZWJhY2spOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0hLRVlUeXBlX19fZXhpdF9fKFB5SEtFWU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJleGNfdHlwZSIsICJleGNfdmFsdWUiLCAidHJhY2ViYWNrIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmV4Y190eXBlOworICAgIFB5T2JqZWN0ICpleGNfdmFsdWU7CisgICAgUHlPYmplY3QgKnRyYWNlYmFjazsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk9PTzpfX2V4aXRfXyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmV4Y190eXBlLCAmZXhjX3ZhbHVlLCAmdHJhY2ViYWNrKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHdpbnJlZ19IS0VZVHlwZV9fX2V4aXRfX19pbXBsKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjayk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHdpbnJlZ19DbG9zZUtleV9fZG9jX18sCisiQ2xvc2VLZXkoJG1vZHVsZSwgaGtleSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIHJlZ2lzdHJ5IGtleS5cbiIKKyJcbiIKKyIgIGhrZXlcbiIKKyIgICAgQSBwcmV2aW91c2x5IG9wZW5lZCBrZXkuXG4iCisiXG4iCisiTm90ZSB0aGF0IGlmIHRoZSBrZXkgaXMgbm90IGNsb3NlZCB1c2luZyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBiZVxuIgorImNsb3NlZCB3aGVuIHRoZSBoa2V5IG9iamVjdCBpcyBkZXN0cm95ZWQgYnkgUHl0aG9uLiIpOworCisjZGVmaW5lIFdJTlJFR19DTE9TRUtFWV9NRVRIT0RERUYgICAgXAorICAgIHsiQ2xvc2VLZXkiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0Nsb3NlS2V5LCBNRVRIX08sIHdpbnJlZ19DbG9zZUtleV9fZG9jX199LAorCitQeURvY19TVFJWQVIod2lucmVnX0Nvbm5lY3RSZWdpc3RyeV9fZG9jX18sCisiQ29ubmVjdFJlZ2lzdHJ5KCRtb2R1bGUsIGNvbXB1dGVyX25hbWUsIGtleSwgLylcbiIKKyItLVxuIgorIlxuIgorIkVzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byB0aGUgcmVnaXN0cnkgb24gYW5vdGhlciBjb21wdXRlci5cbiIKKyJcbiIKKyIgIGNvbXB1dGVyX25hbWVcbiIKKyIgICAgVGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBjb21wdXRlciwgb2YgdGhlIGZvcm0gclwiXFxcXGNvbXB1dGVybmFtZVwiLiAgSWZcbiIKKyIgICAgTm9uZSwgdGhlIGxvY2FsIGNvbXB1dGVyIGlzIHVzZWQuXG4iCisiICBrZXlcbiIKKyIgICAgVGhlIHByZWRlZmluZWQga2V5IHRvIGNvbm5lY3QgdG8uXG4iCisiXG4iCisiVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgaGFuZGxlIG9mIHRoZSBvcGVuZWQga2V5LlxuIgorIklmIHRoZSBmdW5jdGlvbiBmYWlscywgYW4gT1NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworCisjZGVmaW5lIFdJTlJFR19DT05ORUNUUkVHSVNUUllfTUVUSE9EREVGICAgIFwKKyAgICB7IkNvbm5lY3RSZWdpc3RyeSIsIChQeUNGdW5jdGlvbil3aW5yZWdfQ29ubmVjdFJlZ2lzdHJ5LCBNRVRIX1ZBUkFSR1MsIHdpbnJlZ19Db25uZWN0UmVnaXN0cnlfX2RvY19ffSwKKworc3RhdGljIEhLRVkKK3dpbnJlZ19Db25uZWN0UmVnaXN0cnlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeV9VTklDT0RFICpjb21wdXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhLRVkga2V5KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19Db25uZWN0UmVnaXN0cnkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfVU5JQ09ERSAqY29tcHV0ZXJfbmFtZTsKKyAgICBIS0VZIGtleTsKKyAgICBIS0VZIF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlpPJjpDb25uZWN0UmVnaXN0cnkiLAorICAgICAgICAmY29tcHV0ZXJfbmFtZSwgY2xpbmljX0hLRVlfY29udmVydGVyLCAma2V5KSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSB3aW5yZWdfQ29ubmVjdFJlZ2lzdHJ5X2ltcGwobW9kdWxlLCBjb21wdXRlcl9uYW1lLCBrZXkpOworICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUhLRVlfRnJvbUhLRVkoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHdpbnJlZ19DcmVhdGVLZXlfX2RvY19fLAorIkNyZWF0ZUtleSgkbW9kdWxlLCBrZXksIHN1Yl9rZXksIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGVzIG9yIG9wZW5zIHRoZSBzcGVjaWZpZWQga2V5LlxuIgorIlxuIgorIiAga2V5XG4iCisiICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorIiAgc3ViX2tleVxuIgorIiAgICBUaGUgbmFtZSBvZiB0aGUga2V5IHRoaXMgbWV0aG9kIG9wZW5zIG9yIGNyZWF0ZXMuXG4iCisiXG4iCisiSWYga2V5IGlzIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBrZXlzLCBzdWJfa2V5IG1heSBiZSBOb25lLiBJbiB0aGF0IGNhc2UsXG4iCisidGhlIGhhbmRsZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBrZXkgaGFuZGxlIHBhc3NlZCBpbiB0byB0aGUgZnVuY3Rpb24uXG4iCisiXG4iCisiSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywgdGhpcyBmdW5jdGlvbiBvcGVucyB0aGUgZXhpc3Rpbmcga2V5LlxuIgorIlxuIgorIlRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGhhbmRsZSBvZiB0aGUgb3BlbmVkIGtleS5cbiIKKyJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBXSU5SRUdfQ1JFQVRFS0VZX01FVEhPRERFRiAgICBcCisgICAgeyJDcmVhdGVLZXkiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0NyZWF0ZUtleSwgTUVUSF9WQVJBUkdTLCB3aW5yZWdfQ3JlYXRlS2V5X19kb2NfX30sCisKK3N0YXRpYyBIS0VZCit3aW5yZWdfQ3JlYXRlS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKnN1Yl9rZXkpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0NyZWF0ZUtleShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIS0VZIGtleTsKKyAgICBQeV9VTklDT0RFICpzdWJfa2V5OworICAgIEhLRVkgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZaOkNyZWF0ZUtleSIsCisgICAgICAgIGNsaW5pY19IS0VZX2NvbnZlcnRlciwgJmtleSwgJnN1Yl9rZXkpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IHdpbnJlZ19DcmVhdGVLZXlfaW1wbChtb2R1bGUsIGtleSwgc3ViX2tleSk7CisgICAgaWYgKF9yZXR1cm5fdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5SEtFWV9Gcm9tSEtFWShfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIod2lucmVnX0NyZWF0ZUtleUV4X19kb2NfXywKKyJDcmVhdGVLZXlFeCgkbW9kdWxlLCAvLCBrZXksIHN1Yl9rZXksIHJlc2VydmVkPTAsXG4iCisiICAgICAgICAgICAgYWNjZXNzPXdpbnJlZy5LRVlfV1JJVEUpXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGVzIG9yIG9wZW5zIHRoZSBzcGVjaWZpZWQga2V5LlxuIgorIlxuIgorIiAga2V5XG4iCisiICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorIiAgc3ViX2tleVxuIgorIiAgICBUaGUgbmFtZSBvZiB0aGUga2V5IHRoaXMgbWV0aG9kIG9wZW5zIG9yIGNyZWF0ZXMuXG4iCisiICByZXNlcnZlZFxuIgorIiAgICBBIHJlc2VydmVkIGludGVnZXIsIGFuZCBtdXN0IGJlIHplcm8uICBEZWZhdWx0IGlzIHplcm8uXG4iCisiICBhY2Nlc3NcbiIKKyIgICAgQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBhbiBhY2Nlc3MgbWFzayB0aGF0IGRlc2NyaWJlcyB0aGVcbiIKKyIgICAgZGVzaXJlZCBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuIERlZmF1bHQgaXMgS0VZX1dSSVRFLlxuIgorIlxuIgorIklmIGtleSBpcyBvbmUgb2YgdGhlIHByZWRlZmluZWQga2V5cywgc3ViX2tleSBtYXkgYmUgTm9uZS4gSW4gdGhhdCBjYXNlLFxuIgorInRoZSBoYW5kbGUgcmV0dXJuZWQgaXMgdGhlIHNhbWUga2V5IGhhbmRsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uLlxuIgorIlxuIgorIklmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIGV4aXN0aW5nIGtleVxuIgorIlxuIgorIlRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGhhbmRsZSBvZiB0aGUgb3BlbmVkIGtleS5cbiIKKyJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBXSU5SRUdfQ1JFQVRFS0VZRVhfTUVUSE9EREVGICAgIFwKKyAgICB7IkNyZWF0ZUtleUV4IiwgKFB5Q0Z1bmN0aW9uKXdpbnJlZ19DcmVhdGVLZXlFeCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIHdpbnJlZ19DcmVhdGVLZXlFeF9fZG9jX199LAorCitzdGF0aWMgSEtFWQord2lucmVnX0NyZWF0ZUtleUV4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKnN1Yl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzZXJ2ZWQsIFJFR1NBTSBhY2Nlc3MpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0NyZWF0ZUtleUV4KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsia2V5IiwgInN1Yl9rZXkiLCAicmVzZXJ2ZWQiLCAiYWNjZXNzIiwgTlVMTH07CisgICAgSEtFWSBrZXk7CisgICAgUHlfVU5JQ09ERSAqc3ViX2tleTsKKyAgICBpbnQgcmVzZXJ2ZWQgPSAwOworICAgIFJFR1NBTSBhY2Nlc3MgPSBLRVlfV1JJVEU7CisgICAgSEtFWSBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZafGlpOkNyZWF0ZUtleUV4IiwgX2tleXdvcmRzLAorICAgICAgICBjbGluaWNfSEtFWV9jb252ZXJ0ZXIsICZrZXksICZzdWJfa2V5LCAmcmVzZXJ2ZWQsICZhY2Nlc3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IHdpbnJlZ19DcmVhdGVLZXlFeF9pbXBsKG1vZHVsZSwga2V5LCBzdWJfa2V5LCByZXNlcnZlZCwgYWNjZXNzKTsKKyAgICBpZiAoX3JldHVybl92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlIS0VZX0Zyb21IS0VZKF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfRGVsZXRlS2V5X19kb2NfXywKKyJEZWxldGVLZXkoJG1vZHVsZSwga2V5LCBzdWJfa2V5LCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleS5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiICBzdWJfa2V5XG4iCisiICAgIEEgc3RyaW5nIHRoYXQgbXVzdCBiZSB0aGUgbmFtZSBvZiBhIHN1YmtleSBvZiB0aGUga2V5IGlkZW50aWZpZWQgYnlcbiIKKyIgICAgdGhlIGtleSBwYXJhbWV0ZXIuIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgTm9uZSwgYW5kIHRoZSBrZXkgbWF5IG5vdFxuIgorIiAgICBoYXZlIHN1YmtleXMuXG4iCisiXG4iCisiVGhpcyBtZXRob2QgY2FuIG5vdCBkZWxldGUga2V5cyB3aXRoIHN1YmtleXMuXG4iCisiXG4iCisiSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgZW50aXJlIGtleSwgaW5jbHVkaW5nIGFsbCBvZiBpdHMgdmFsdWVzLFxuIgorImlzIHJlbW92ZWQuICBJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBXSU5SRUdfREVMRVRFS0VZX01FVEhPRERFRiAgICBcCisgICAgeyJEZWxldGVLZXkiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0RlbGV0ZUtleSwgTUVUSF9WQVJBUkdTLCB3aW5yZWdfRGVsZXRlS2V5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfRGVsZXRlS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKnN1Yl9rZXkpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0RlbGV0ZUtleShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIS0VZIGtleTsKKyAgICBQeV9VTklDT0RFICpzdWJfa2V5OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnU6RGVsZXRlS2V5IiwKKyAgICAgICAgY2xpbmljX0hLRVlfY29udmVydGVyLCAma2V5LCAmc3ViX2tleSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5yZWdfRGVsZXRlS2V5X2ltcGwobW9kdWxlLCBrZXksIHN1Yl9rZXkpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfRGVsZXRlS2V5RXhfX2RvY19fLAorIkRlbGV0ZUtleUV4KCRtb2R1bGUsIC8sIGtleSwgc3ViX2tleSwgYWNjZXNzPXdpbnJlZy5LRVlfV09XNjRfNjRLRVksXG4iCisiICAgICAgICAgICAgcmVzZXJ2ZWQ9MClcbiIKKyItLVxuIgorIlxuIgorIkRlbGV0ZXMgdGhlIHNwZWNpZmllZCBrZXkgKDY0LWJpdCBPUyBvbmx5KS5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiICBzdWJfa2V5XG4iCisiICAgIEEgc3RyaW5nIHRoYXQgbXVzdCBiZSB0aGUgbmFtZSBvZiBhIHN1YmtleSBvZiB0aGUga2V5IGlkZW50aWZpZWQgYnlcbiIKKyIgICAgdGhlIGtleSBwYXJhbWV0ZXIuIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgTm9uZSwgYW5kIHRoZSBrZXkgbWF5IG5vdFxuIgorIiAgICBoYXZlIHN1YmtleXMuXG4iCisiICBhY2Nlc3NcbiIKKyIgICAgQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBhbiBhY2Nlc3MgbWFzayB0aGF0IGRlc2NyaWJlcyB0aGVcbiIKKyIgICAgZGVzaXJlZCBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuIERlZmF1bHQgaXMgS0VZX1dPVzY0XzY0S0VZLlxuIgorIiAgcmVzZXJ2ZWRcbiIKKyIgICAgQSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgorIlxuIgorIlRoaXMgbWV0aG9kIGNhbiBub3QgZGVsZXRlIGtleXMgd2l0aCBzdWJrZXlzLlxuIgorIlxuIgorIklmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgdGhlIGVudGlyZSBrZXksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHZhbHVlcyxcbiIKKyJpcyByZW1vdmVkLiAgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBPU0Vycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4iCisiT24gdW5zdXBwb3J0ZWQgV2luZG93cyB2ZXJzaW9ucywgTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuIik7CisKKyNkZWZpbmUgV0lOUkVHX0RFTEVURUtFWUVYX01FVEhPRERFRiAgICBcCisgICAgeyJEZWxldGVLZXlFeCIsIChQeUNGdW5jdGlvbil3aW5yZWdfRGVsZXRlS2V5RXgsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCB3aW5yZWdfRGVsZXRlS2V5RXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19EZWxldGVLZXlFeF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICpzdWJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgUkVHU0FNIGFjY2VzcywgaW50IHJlc2VydmVkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19EZWxldGVLZXlFeChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImtleSIsICJzdWJfa2V5IiwgImFjY2VzcyIsICJyZXNlcnZlZCIsIE5VTEx9OworICAgIEhLRVkga2V5OworICAgIFB5X1VOSUNPREUgKnN1Yl9rZXk7CisgICAgUkVHU0FNIGFjY2VzcyA9IEtFWV9XT1c2NF82NEtFWTsKKyAgICBpbnQgcmVzZXJ2ZWQgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ1fGlpOkRlbGV0ZUtleUV4IiwgX2tleXdvcmRzLAorICAgICAgICBjbGluaWNfSEtFWV9jb252ZXJ0ZXIsICZrZXksICZzdWJfa2V5LCAmYWNjZXNzLCAmcmVzZXJ2ZWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gd2lucmVnX0RlbGV0ZUtleUV4X2ltcGwobW9kdWxlLCBrZXksIHN1Yl9rZXksIGFjY2VzcywgcmVzZXJ2ZWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfRGVsZXRlVmFsdWVfX2RvY19fLAorIkRlbGV0ZVZhbHVlKCRtb2R1bGUsIGtleSwgdmFsdWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZW1vdmVzIGEgbmFtZWQgdmFsdWUgZnJvbSBhIHJlZ2lzdHJ5IGtleS5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiICB2YWx1ZVxuIgorIiAgICBBIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHZhbHVlIHRvIHJlbW92ZS4iKTsKKworI2RlZmluZSBXSU5SRUdfREVMRVRFVkFMVUVfTUVUSE9EREVGICAgIFwKKyAgICB7IkRlbGV0ZVZhbHVlIiwgKFB5Q0Z1bmN0aW9uKXdpbnJlZ19EZWxldGVWYWx1ZSwgTUVUSF9WQVJBUkdTLCB3aW5yZWdfRGVsZXRlVmFsdWVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19EZWxldGVWYWx1ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICp2YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfRGVsZXRlVmFsdWUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEtFWSBrZXk7CisgICAgUHlfVU5JQ09ERSAqdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mWjpEZWxldGVWYWx1ZSIsCisgICAgICAgIGNsaW5pY19IS0VZX2NvbnZlcnRlciwgJmtleSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHdpbnJlZ19EZWxldGVWYWx1ZV9pbXBsKG1vZHVsZSwga2V5LCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHdpbnJlZ19FbnVtS2V5X19kb2NfXywKKyJFbnVtS2V5KCRtb2R1bGUsIGtleSwgaW5kZXgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJFbnVtZXJhdGVzIHN1YmtleXMgb2YgYW4gb3BlbiByZWdpc3RyeSBrZXkuXG4iCisiXG4iCisiICBrZXlcbiIKKyIgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorIiAgaW5kZXhcbiIKKyIgICAgQW4gaW50ZWdlciB0aGF0IGlkZW50aWZpZXMgdGhlIGluZGV4IG9mIHRoZSBrZXkgdG8gcmV0cmlldmUuXG4iCisiXG4iCisiVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbmFtZSBvZiBvbmUgc3Via2V5IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuXG4iCisiSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzXG4iCisicmFpc2VkLCBpbmRpY2F0aW5nIG5vIG1vcmUgdmFsdWVzIGFyZSBhdmFpbGFibGUuIik7CisKKyNkZWZpbmUgV0lOUkVHX0VOVU1LRVlfTUVUSE9EREVGICAgIFwKKyAgICB7IkVudW1LZXkiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0VudW1LZXksIE1FVEhfVkFSQVJHUywgd2lucmVnX0VudW1LZXlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19FbnVtS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIGludCBpbmRleCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfRW51bUtleShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIS0VZIGtleTsKKyAgICBpbnQgaW5kZXg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpFbnVtS2V5IiwKKyAgICAgICAgY2xpbmljX0hLRVlfY29udmVydGVyLCAma2V5LCAmaW5kZXgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gd2lucmVnX0VudW1LZXlfaW1wbChtb2R1bGUsIGtleSwgaW5kZXgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfRW51bVZhbHVlX19kb2NfXywKKyJFbnVtVmFsdWUoJG1vZHVsZSwga2V5LCBpbmRleCwgLylcbiIKKyItLVxuIgorIlxuIgorIkVudW1lcmF0ZXMgdmFsdWVzIG9mIGFuIG9wZW4gcmVnaXN0cnkga2V5LlxuIgorIlxuIgorIiAga2V5XG4iCisiICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKKyIgIGluZGV4XG4iCisiICAgIEFuIGludGVnZXIgdGhhdCBpZGVudGlmaWVzIHRoZSBpbmRleCBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmUuXG4iCisiXG4iCisiVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbmFtZSBvZiBvbmUgc3Via2V5IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuXG4iCisiSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5LCB1bnRpbCBhbiBPU0Vycm9yIGV4Y2VwdGlvblxuIgorImlzIHJhaXNlZCwgaW5kaWNhdGluZyBubyBtb3JlIHZhbHVlcy5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGlzIGEgdHVwbGUgb2YgMyBpdGVtczpcbiIKKyIgIHZhbHVlX25hbWVcbiIKKyIgICAgQSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSB2YWx1ZS5cbiIKKyIgIHZhbHVlX2RhdGFcbiIKKyIgICAgQW4gb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHZhbHVlIGRhdGEsIGFuZCB3aG9zZSB0eXBlIGRlcGVuZHNcbiIKKyIgICAgb24gdGhlIHVuZGVybHlpbmcgcmVnaXN0cnkgdHlwZS5cbiIKKyIgIGRhdGFfdHlwZVxuIgorIiAgICBBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgZGF0YS4iKTsKKworI2RlZmluZSBXSU5SRUdfRU5VTVZBTFVFX01FVEhPRERFRiAgICBcCisgICAgeyJFbnVtVmFsdWUiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0VudW1WYWx1ZSwgTUVUSF9WQVJBUkdTLCB3aW5yZWdfRW51bVZhbHVlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfRW51bVZhbHVlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIGludCBpbmRleCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfRW51bVZhbHVlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIEhLRVkga2V5OworICAgIGludCBpbmRleDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpOkVudW1WYWx1ZSIsCisgICAgICAgIGNsaW5pY19IS0VZX2NvbnZlcnRlciwgJmtleSwgJmluZGV4KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHdpbnJlZ19FbnVtVmFsdWVfaW1wbChtb2R1bGUsIGtleSwgaW5kZXgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzX19kb2NfXywKKyJFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MoJG1vZHVsZSwgc3RyaW5nLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRXhwYW5kIGVudmlyb25tZW50IHZhcnMuIik7CisKKyNkZWZpbmUgV0lOUkVHX0VYUEFOREVOVklST05NRU5UU1RSSU5HU19NRVRIT0RERUYgICAgXAorICAgIHsiRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzIiwgKFB5Q0Z1bmN0aW9uKXdpbnJlZ19FeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MsIE1FVEhfTywgd2lucmVnX0V4cGFuZEVudmlyb25tZW50U3RyaW5nc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0V4cGFuZEVudmlyb25tZW50U3RyaW5nc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X1VOSUNPREUgKnN0cmluZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfVU5JQ09ERSAqc3RyaW5nOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ1OkV4cGFuZEVudmlyb25tZW50U3RyaW5ncyIsICZzdHJpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gd2lucmVnX0V4cGFuZEVudmlyb25tZW50U3RyaW5nc19pbXBsKG1vZHVsZSwgc3RyaW5nKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIod2lucmVnX0ZsdXNoS2V5X19kb2NfXywKKyJGbHVzaEtleSgkbW9kdWxlLCBrZXksIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXcml0ZXMgYWxsIHRoZSBhdHRyaWJ1dGVzIG9mIGEga2V5IHRvIHRoZSByZWdpc3RyeS5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiXG4iCisiSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjYWxsIEZsdXNoS2V5IHRvIGNoYW5nZSBhIGtleS4gIFJlZ2lzdHJ5IGNoYW5nZXNcbiIKKyJhcmUgZmx1c2hlZCB0byBkaXNrIGJ5IHRoZSByZWdpc3RyeSB1c2luZyBpdHMgbGF6eSBmbHVzaGVyLiAgUmVnaXN0cnlcbiIKKyJjaGFuZ2VzIGFyZSBhbHNvIGZsdXNoZWQgdG8gZGlzayBhdCBzeXN0ZW0gc2h1dGRvd24uICBVbmxpa2VcbiIKKyJDbG9zZUtleSgpLCB0aGUgRmx1c2hLZXkoKSBtZXRob2QgcmV0dXJucyBvbmx5IHdoZW4gYWxsIHRoZSBkYXRhIGhhc1xuIgorImJlZW4gd3JpdHRlbiB0byB0aGUgcmVnaXN0cnkuXG4iCisiXG4iCisiQW4gYXBwbGljYXRpb24gc2hvdWxkIG9ubHkgY2FsbCBGbHVzaEtleSgpIGlmIGl0IHJlcXVpcmVzIGFic29sdXRlXG4iCisiY2VydGFpbnR5IHRoYXQgcmVnaXN0cnkgY2hhbmdlcyBhcmUgb24gZGlzay4gIElmIHlvdSBkb25cJ3Qga25vdyB3aGV0aGVyXG4iCisiYSBGbHVzaEtleSgpIGNhbGwgaXMgcmVxdWlyZWQsIGl0IHByb2JhYmx5IGlzblwndC4iKTsKKworI2RlZmluZSBXSU5SRUdfRkxVU0hLRVlfTUVUSE9EREVGICAgIFwKKyAgICB7IkZsdXNoS2V5IiwgKFB5Q0Z1bmN0aW9uKXdpbnJlZ19GbHVzaEtleSwgTUVUSF9PLCB3aW5yZWdfRmx1c2hLZXlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19GbHVzaEtleV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19GbHVzaEtleShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIEhLRVkga2V5OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjpGbHVzaEtleSIsIGNsaW5pY19IS0VZX2NvbnZlcnRlciwgJmtleSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5yZWdfRmx1c2hLZXlfaW1wbChtb2R1bGUsIGtleSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHdpbnJlZ19Mb2FkS2V5X19kb2NfXywKKyJMb2FkS2V5KCRtb2R1bGUsIGtleSwgc3ViX2tleSwgZmlsZV9uYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSW5zZXJ0IGRhdGEgaW50byB0aGUgcmVnaXN0cnkgZnJvbSBhIGZpbGUuXG4iCisiXG4iCisiICBrZXlcbiIKKyIgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorIiAgc3ViX2tleVxuIgorIiAgICBBIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHN1Yi1rZXkgdG8gbG9hZC5cbiIKKyIgIGZpbGVfbmFtZVxuIgorIiAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBsb2FkIHJlZ2lzdHJ5IGRhdGEgZnJvbS4gIFRoaXMgZmlsZSBtdXN0XG4iCisiICAgIGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggdGhlIFNhdmVLZXkoKSBmdW5jdGlvbi4gIFVuZGVyIHRoZSBmaWxlXG4iCisiICAgIGFsbG9jYXRpb24gdGFibGUgKEZBVCkgZmlsZSBzeXN0ZW0sIHRoZSBmaWxlbmFtZSBtYXkgbm90IGhhdmUgYW5cbiIKKyIgICAgZXh0ZW5zaW9uLlxuIgorIlxuIgorIkNyZWF0ZXMgYSBzdWJrZXkgdW5kZXIgdGhlIHNwZWNpZmllZCBrZXkgYW5kIHN0b3JlcyByZWdpc3RyYXRpb25cbiIKKyJpbmZvcm1hdGlvbiBmcm9tIGEgc3BlY2lmaWVkIGZpbGUgaW50byB0aGF0IHN1YmtleS5cbiIKKyJcbiIKKyJBIGNhbGwgdG8gTG9hZEtleSgpIGZhaWxzIGlmIHRoZSBjYWxsaW5nIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSB0aGVcbiIKKyJTRV9SRVNUT1JFX1BSSVZJTEVHRSBwcml2aWxlZ2UuXG4iCisiXG4iCisiSWYga2V5IGlzIGEgaGFuZGxlIHJldHVybmVkIGJ5IENvbm5lY3RSZWdpc3RyeSgpLCB0aGVuIHRoZSBwYXRoXG4iCisic3BlY2lmaWVkIGluIGZpbGVOYW1lIGlzIHJlbGF0aXZlIHRvIHRoZSByZW1vdGUgY29tcHV0ZXIuXG4iCisiXG4iCisiVGhlIE1TRE4gZG9jcyBpbXBseSBrZXkgbXVzdCBiZSBpbiB0aGUgSEtFWV9VU0VSIG9yIEhLRVlfTE9DQUxfTUFDSElORVxuIgorInRyZWUuIik7CisKKyNkZWZpbmUgV0lOUkVHX0xPQURLRVlfTUVUSE9EREVGICAgIFwKKyAgICB7IkxvYWRLZXkiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0xvYWRLZXksIE1FVEhfVkFSQVJHUywgd2lucmVnX0xvYWRLZXlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19Mb2FkS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKnN1Yl9rZXksCisgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKmZpbGVfbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfTG9hZEtleShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIS0VZIGtleTsKKyAgICBQeV9VTklDT0RFICpzdWJfa2V5OworICAgIFB5X1VOSUNPREUgKmZpbGVfbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZ1dTpMb2FkS2V5IiwKKyAgICAgICAgY2xpbmljX0hLRVlfY29udmVydGVyLCAma2V5LCAmc3ViX2tleSwgJmZpbGVfbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5yZWdfTG9hZEtleV9pbXBsKG1vZHVsZSwga2V5LCBzdWJfa2V5LCBmaWxlX25hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfT3BlbktleV9fZG9jX18sCisiT3BlbktleSgkbW9kdWxlLCAvLCBrZXksIHN1Yl9rZXksIHJlc2VydmVkPTAsIGFjY2Vzcz13aW5yZWcuS0VZX1JFQUQpXG4iCisiLS1cbiIKKyJcbiIKKyJPcGVucyB0aGUgc3BlY2lmaWVkIGtleS5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiICBzdWJfa2V5XG4iCisiICAgIEEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgc3ViX2tleSB0byBvcGVuLlxuIgorIiAgcmVzZXJ2ZWRcbiIKKyIgICAgQSByZXNlcnZlZCBpbnRlZ2VyIHRoYXQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgorIiAgYWNjZXNzXG4iCisiICAgIEFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgYW4gYWNjZXNzIG1hc2sgdGhhdCBkZXNjcmliZXMgdGhlIGRlc2lyZWRcbiIKKyIgICAgc2VjdXJpdHkgYWNjZXNzIGZvciB0aGUga2V5LiAgRGVmYXVsdCBpcyBLRVlfUkVBRC5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGlzIGEgbmV3IGhhbmRsZSB0byB0aGUgc3BlY2lmaWVkIGtleS5cbiIKKyJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBXSU5SRUdfT1BFTktFWV9NRVRIT0RERUYgICAgXAorICAgIHsiT3BlbktleSIsIChQeUNGdW5jdGlvbil3aW5yZWdfT3BlbktleSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIHdpbnJlZ19PcGVuS2V5X19kb2NfX30sCisKK3N0YXRpYyBIS0VZCit3aW5yZWdfT3BlbktleV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICpzdWJfa2V5LAorICAgICAgICAgICAgICAgICAgICBpbnQgcmVzZXJ2ZWQsIFJFR1NBTSBhY2Nlc3MpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX09wZW5LZXkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJrZXkiLCAic3ViX2tleSIsICJyZXNlcnZlZCIsICJhY2Nlc3MiLCBOVUxMfTsKKyAgICBIS0VZIGtleTsKKyAgICBQeV9VTklDT0RFICpzdWJfa2V5OworICAgIGludCByZXNlcnZlZCA9IDA7CisgICAgUkVHU0FNIGFjY2VzcyA9IEtFWV9SRUFEOworICAgIEhLRVkgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mWnxpaTpPcGVuS2V5IiwgX2tleXdvcmRzLAorICAgICAgICBjbGluaWNfSEtFWV9jb252ZXJ0ZXIsICZrZXksICZzdWJfa2V5LCAmcmVzZXJ2ZWQsICZhY2Nlc3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IHdpbnJlZ19PcGVuS2V5X2ltcGwobW9kdWxlLCBrZXksIHN1Yl9rZXksIHJlc2VydmVkLCBhY2Nlc3MpOworICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUhLRVlfRnJvbUhLRVkoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHdpbnJlZ19PcGVuS2V5RXhfX2RvY19fLAorIk9wZW5LZXlFeCgkbW9kdWxlLCAvLCBrZXksIHN1Yl9rZXksIHJlc2VydmVkPTAsIGFjY2Vzcz13aW5yZWcuS0VZX1JFQUQpXG4iCisiLS1cbiIKKyJcbiIKKyJPcGVucyB0aGUgc3BlY2lmaWVkIGtleS5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiICBzdWJfa2V5XG4iCisiICAgIEEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgc3ViX2tleSB0byBvcGVuLlxuIgorIiAgcmVzZXJ2ZWRcbiIKKyIgICAgQSByZXNlcnZlZCBpbnRlZ2VyIHRoYXQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgorIiAgYWNjZXNzXG4iCisiICAgIEFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgYW4gYWNjZXNzIG1hc2sgdGhhdCBkZXNjcmliZXMgdGhlIGRlc2lyZWRcbiIKKyIgICAgc2VjdXJpdHkgYWNjZXNzIGZvciB0aGUga2V5LiAgRGVmYXVsdCBpcyBLRVlfUkVBRC5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGlzIGEgbmV3IGhhbmRsZSB0byB0aGUgc3BlY2lmaWVkIGtleS5cbiIKKyJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBXSU5SRUdfT1BFTktFWUVYX01FVEhPRERFRiAgICBcCisgICAgeyJPcGVuS2V5RXgiLCAoUHlDRnVuY3Rpb24pd2lucmVnX09wZW5LZXlFeCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIHdpbnJlZ19PcGVuS2V5RXhfX2RvY19ffSwKKworc3RhdGljIEhLRVkKK3dpbnJlZ19PcGVuS2V5RXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSwgUHlfVU5JQ09ERSAqc3ViX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzZXJ2ZWQsIFJFR1NBTSBhY2Nlc3MpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX09wZW5LZXlFeChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImtleSIsICJzdWJfa2V5IiwgInJlc2VydmVkIiwgImFjY2VzcyIsIE5VTEx9OworICAgIEhLRVkga2V5OworICAgIFB5X1VOSUNPREUgKnN1Yl9rZXk7CisgICAgaW50IHJlc2VydmVkID0gMDsKKyAgICBSRUdTQU0gYWNjZXNzID0gS0VZX1JFQUQ7CisgICAgSEtFWSBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZafGlpOk9wZW5LZXlFeCIsIF9rZXl3b3JkcywKKyAgICAgICAgY2xpbmljX0hLRVlfY29udmVydGVyLCAma2V5LCAmc3ViX2tleSwgJnJlc2VydmVkLCAmYWNjZXNzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSB3aW5yZWdfT3BlbktleUV4X2ltcGwobW9kdWxlLCBrZXksIHN1Yl9rZXksIHJlc2VydmVkLCBhY2Nlc3MpOworICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUhLRVlfRnJvbUhLRVkoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHdpbnJlZ19RdWVyeUluZm9LZXlfX2RvY19fLAorIlF1ZXJ5SW5mb0tleSgkbW9kdWxlLCBrZXksIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEga2V5LlxuIgorIlxuIgorIiAga2V5XG4iCisiICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGlzIGEgdHVwbGUgb2YgMyBpdGVtczpcbiIKKyJBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgbnVtYmVyIG9mIHN1YiBrZXlzIHRoaXMga2V5IGhhcy5cbiIKKyJBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGlzIGtleSBoYXMuXG4iCisiQW4gaW50ZWdlciB0aGF0IGlkZW50aWZpZXMgd2hlbiB0aGUga2V5IHdhcyBsYXN0IG1vZGlmaWVkIChpZiBhdmFpbGFibGUpXG4iCisiYXMgMTAwXCdzIG9mIG5hbm9zZWNvbmRzIHNpbmNlIEphbiAxLCAxNjAwLiIpOworCisjZGVmaW5lIFdJTlJFR19RVUVSWUlORk9LRVlfTUVUSE9EREVGICAgIFwKKyAgICB7IlF1ZXJ5SW5mb0tleSIsIChQeUNGdW5jdGlvbil3aW5yZWdfUXVlcnlJbmZvS2V5LCBNRVRIX08sIHdpbnJlZ19RdWVyeUluZm9LZXlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19RdWVyeUluZm9LZXlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfUXVlcnlJbmZvS2V5KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEtFWSBrZXk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOlF1ZXJ5SW5mb0tleSIsIGNsaW5pY19IS0VZX2NvbnZlcnRlciwgJmtleSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5yZWdfUXVlcnlJbmZvS2V5X2ltcGwobW9kdWxlLCBrZXkpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfUXVlcnlWYWx1ZV9fZG9jX18sCisiUXVlcnlWYWx1ZSgkbW9kdWxlLCBrZXksIHN1Yl9rZXksIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXRyaWV2ZXMgdGhlIHVubmFtZWQgdmFsdWUgZm9yIGEga2V5LlxuIgorIlxuIgorIiAga2V5XG4iCisiICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKKyIgIHN1Yl9rZXlcbiIKKyIgICAgQSBzdHJpbmcgdGhhdCBob2xkcyB0aGUgbmFtZSBvZiB0aGUgc3Via2V5IHdpdGggd2hpY2ggdGhlIHZhbHVlXG4iCisiICAgIGlzIGFzc29jaWF0ZWQuICBJZiB0aGlzIHBhcmFtZXRlciBpcyBOb25lIG9yIGVtcHR5LCB0aGUgZnVuY3Rpb25cbiIKKyIgICAgcmV0cmlldmVzIHRoZSB2YWx1ZSBzZXQgYnkgdGhlIFNldFZhbHVlKCkgbWV0aG9kIGZvciB0aGUga2V5XG4iCisiICAgIGlkZW50aWZpZWQgYnkga2V5LlxuIgorIlxuIgorIlZhbHVlcyBpbiB0aGUgcmVnaXN0cnkgaGF2ZSBuYW1lLCB0eXBlLCBhbmQgZGF0YSBjb21wb25lbnRzLiBUaGlzIG1ldGhvZFxuIgorInJldHJpZXZlcyB0aGUgZGF0YSBmb3IgYSBrZXlcJ3MgZmlyc3QgdmFsdWUgdGhhdCBoYXMgYSBOVUxMIG5hbWUuXG4iCisiQnV0IHNpbmNlIHRoZSB1bmRlcmx5aW5nIEFQSSBjYWxsIGRvZXNuXCd0IHJldHVybiB0aGUgdHlwZSwgeW91XCdsbFxuIgorInByb2JhYmx5IGJlIGhhcHBpZXIgdXNpbmcgUXVlcnlWYWx1ZUV4OyB0aGlzIGZ1bmN0aW9uIGlzIGp1c3QgaGVyZSBmb3JcbiIKKyJjb21wbGV0ZW5lc3MuIik7CisKKyNkZWZpbmUgV0lOUkVHX1FVRVJZVkFMVUVfTUVUSE9EREVGICAgIFwKKyAgICB7IlF1ZXJ5VmFsdWUiLCAoUHlDRnVuY3Rpb24pd2lucmVnX1F1ZXJ5VmFsdWUsIE1FVEhfVkFSQVJHUywgd2lucmVnX1F1ZXJ5VmFsdWVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19RdWVyeVZhbHVlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKnN1Yl9rZXkpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX1F1ZXJ5VmFsdWUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEtFWSBrZXk7CisgICAgUHlfVU5JQ09ERSAqc3ViX2tleTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZaOlF1ZXJ5VmFsdWUiLAorICAgICAgICBjbGluaWNfSEtFWV9jb252ZXJ0ZXIsICZrZXksICZzdWJfa2V5KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHdpbnJlZ19RdWVyeVZhbHVlX2ltcGwobW9kdWxlLCBrZXksIHN1Yl9rZXkpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfUXVlcnlWYWx1ZUV4X19kb2NfXywKKyJRdWVyeVZhbHVlRXgoJG1vZHVsZSwga2V5LCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0cmlldmVzIHRoZSB0eXBlIGFuZCB2YWx1ZSBvZiBhIHNwZWNpZmllZCBzdWIta2V5LlxuIgorIlxuIgorIiAga2V5XG4iCisiICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKKyIgIG5hbWVcbiIKKyIgICAgQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdmFsdWUgdG8gcXVlcnkuXG4iCisiXG4iCisiQmVoYXZlcyBtb3N0bHkgbGlrZSBRdWVyeVZhbHVlKCksIGJ1dCBhbHNvIHJldHVybnMgdGhlIHR5cGUgb2YgdGhlXG4iCisic3BlY2lmaWVkIHZhbHVlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBvcGVuIHJlZ2lzdHJ5IGtleS5cbiIKKyJcbiIKKyJUaGUgcmV0dXJuIHZhbHVlIGlzIGEgdHVwbGUgb2YgdGhlIHZhbHVlIGFuZCB0aGUgdHlwZV9pZC4iKTsKKworI2RlZmluZSBXSU5SRUdfUVVFUllWQUxVRUVYX01FVEhPRERFRiAgICBcCisgICAgeyJRdWVyeVZhbHVlRXgiLCAoUHlDRnVuY3Rpb24pd2lucmVnX1F1ZXJ5VmFsdWVFeCwgTUVUSF9WQVJBUkdTLCB3aW5yZWdfUXVlcnlWYWx1ZUV4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfUXVlcnlWYWx1ZUV4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX1F1ZXJ5VmFsdWVFeChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIS0VZIGtleTsKKyAgICBQeV9VTklDT0RFICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJlo6UXVlcnlWYWx1ZUV4IiwKKyAgICAgICAgY2xpbmljX0hLRVlfY29udmVydGVyLCAma2V5LCAmbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5yZWdfUXVlcnlWYWx1ZUV4X2ltcGwobW9kdWxlLCBrZXksIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfU2F2ZUtleV9fZG9jX18sCisiU2F2ZUtleSgkbW9kdWxlLCBrZXksIGZpbGVfbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlNhdmVzIHRoZSBzcGVjaWZpZWQga2V5LCBhbmQgYWxsIGl0cyBzdWJrZXlzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiICBmaWxlX25hbWVcbiIKKyIgICAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gc2F2ZSByZWdpc3RyeSBkYXRhIHRvLiAgVGhpcyBmaWxlIGNhbm5vdFxuIgorIiAgICBhbHJlYWR5IGV4aXN0LiBJZiB0aGlzIGZpbGVuYW1lIGluY2x1ZGVzIGFuIGV4dGVuc2lvbiwgaXQgY2Fubm90IGJlXG4iCisiICAgIHVzZWQgb24gZmlsZSBhbGxvY2F0aW9uIHRhYmxlIChGQVQpIGZpbGUgc3lzdGVtcyBieSB0aGUgTG9hZEtleSgpLFxuIgorIiAgICBSZXBsYWNlS2V5KCkgb3IgUmVzdG9yZUtleSgpIG1ldGhvZHMuXG4iCisiXG4iCisiSWYga2V5IHJlcHJlc2VudHMgYSBrZXkgb24gYSByZW1vdGUgY29tcHV0ZXIsIHRoZSBwYXRoIGRlc2NyaWJlZCBieVxuIgorImZpbGVfbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgcmVtb3RlIGNvbXB1dGVyLlxuIgorIlxuIgorIlRoZSBjYWxsZXIgb2YgdGhpcyBtZXRob2QgbXVzdCBwb3NzZXNzIHRoZSBTZUJhY2t1cFByaXZpbGVnZVxuIgorInNlY3VyaXR5IHByaXZpbGVnZS4gIFRoaXMgZnVuY3Rpb24gcGFzc2VzIE5VTEwgZm9yIHNlY3VyaXR5X2F0dHJpYnV0ZXNcbiIKKyJ0byB0aGUgQVBJLiIpOworCisjZGVmaW5lIFdJTlJFR19TQVZFS0VZX01FVEhPRERFRiAgICBcCisgICAgeyJTYXZlS2V5IiwgKFB5Q0Z1bmN0aW9uKXdpbnJlZ19TYXZlS2V5LCBNRVRIX1ZBUkFSR1MsIHdpbnJlZ19TYXZlS2V5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfU2F2ZUtleV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICpmaWxlX25hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX1NhdmVLZXkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEtFWSBrZXk7CisgICAgUHlfVU5JQ09ERSAqZmlsZV9uYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnU6U2F2ZUtleSIsCisgICAgICAgIGNsaW5pY19IS0VZX2NvbnZlcnRlciwgJmtleSwgJmZpbGVfbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5yZWdfU2F2ZUtleV9pbXBsKG1vZHVsZSwga2V5LCBmaWxlX25hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5yZWdfU2V0VmFsdWVfX2RvY19fLAorIlNldFZhbHVlKCRtb2R1bGUsIGtleSwgc3ViX2tleSwgdHlwZSwgdmFsdWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJBc3NvY2lhdGVzIGEgdmFsdWUgd2l0aCBhIHNwZWNpZmllZCBrZXkuXG4iCisiXG4iCisiICBrZXlcbiIKKyIgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorIiAgc3ViX2tleVxuIgorIiAgICBBIHN0cmluZyB0aGF0IG5hbWVzIHRoZSBzdWJrZXkgd2l0aCB3aGljaCB0aGUgdmFsdWUgaXMgYXNzb2NpYXRlZC5cbiIKKyIgIHR5cGVcbiIKKyIgICAgQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgZGF0YS4gIEN1cnJlbnRseSB0aGlzIG11c3RcbiIKKyIgICAgYmUgUkVHX1NaLCBtZWFuaW5nIG9ubHkgc3RyaW5ncyBhcmUgc3VwcG9ydGVkLlxuIgorIiAgdmFsdWVcbiIKKyIgICAgQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG5ldyB2YWx1ZS5cbiIKKyJcbiIKKyJJZiB0aGUga2V5IHNwZWNpZmllZCBieSB0aGUgc3ViX2tleSBwYXJhbWV0ZXIgZG9lcyBub3QgZXhpc3QsIHRoZVxuIgorIlNldFZhbHVlIGZ1bmN0aW9uIGNyZWF0ZXMgaXQuXG4iCisiXG4iCisiVmFsdWUgbGVuZ3RocyBhcmUgbGltaXRlZCBieSBhdmFpbGFibGUgbWVtb3J5LiBMb25nIHZhbHVlcyAobW9yZSB0aGFuXG4iCisiMjA0OCBieXRlcykgc2hvdWxkIGJlIHN0b3JlZCBhcyBmaWxlcyB3aXRoIHRoZSBmaWxlbmFtZXMgc3RvcmVkIGluXG4iCisidGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0cnkgdG8gaGVscCB0aGUgcmVnaXN0cnkgcGVyZm9ybSBlZmZpY2llbnRseS5cbiIKKyJcbiIKKyJUaGUga2V5IGlkZW50aWZpZWQgYnkgdGhlIGtleSBwYXJhbWV0ZXIgbXVzdCBoYXZlIGJlZW4gb3BlbmVkIHdpdGhcbiIKKyJLRVlfU0VUX1ZBTFVFIGFjY2Vzcy4iKTsKKworI2RlZmluZSBXSU5SRUdfU0VUVkFMVUVfTUVUSE9EREVGICAgIFwKKyAgICB7IlNldFZhbHVlIiwgKFB5Q0Z1bmN0aW9uKXdpbnJlZ19TZXRWYWx1ZSwgTUVUSF9WQVJBUkdTLCB3aW5yZWdfU2V0VmFsdWVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19TZXRWYWx1ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICpzdWJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgRFdPUkQgdHlwZSwgUHlfVU5JQ09ERSAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV9jbGVhbl90IHZhbHVlX2xlbmd0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfU2V0VmFsdWUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEtFWSBrZXk7CisgICAgUHlfVU5JQ09ERSAqc3ViX2tleTsKKyAgICBEV09SRCB0eXBlOworICAgIFB5X1VOSUNPREUgKnZhbHVlOworICAgIFB5X3NzaXplX2NsZWFuX3QgdmFsdWVfbGVuZ3RoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJlprdSM6U2V0VmFsdWUiLAorICAgICAgICBjbGluaWNfSEtFWV9jb252ZXJ0ZXIsICZrZXksICZzdWJfa2V5LCAmdHlwZSwgJnZhbHVlLCAmdmFsdWVfbGVuZ3RoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHdpbnJlZ19TZXRWYWx1ZV9pbXBsKG1vZHVsZSwga2V5LCBzdWJfa2V5LCB0eXBlLCB2YWx1ZSwgdmFsdWVfbGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIod2lucmVnX1NldFZhbHVlRXhfX2RvY19fLAorIlNldFZhbHVlRXgoJG1vZHVsZSwga2V5LCB2YWx1ZV9uYW1lLCByZXNlcnZlZCwgdHlwZSwgdmFsdWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJTdG9yZXMgZGF0YSBpbiB0aGUgdmFsdWUgZmllbGQgb2YgYW4gb3BlbiByZWdpc3RyeSBrZXkuXG4iCisiXG4iCisiICBrZXlcbiIKKyIgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorIiAgdmFsdWVfbmFtZVxuIgorIiAgICBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSB2YWx1ZSB0byBzZXQsIG9yIE5vbmUuXG4iCisiICByZXNlcnZlZFxuIgorIiAgICBDYW4gYmUgYW55dGhpbmcgLSB6ZXJvIGlzIGFsd2F5cyBwYXNzZWQgdG8gdGhlIEFQSS5cbiIKKyIgIHR5cGVcbiIKKyIgICAgQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgZGF0YSwgb25lIG9mOlxuIgorIiAgICBSRUdfQklOQVJZIC0tIEJpbmFyeSBkYXRhIGluIGFueSBmb3JtLlxuIgorIiAgICBSRUdfRFdPUkQgLS0gQSAzMi1iaXQgbnVtYmVyLlxuIgorIiAgICBSRUdfRFdPUkRfTElUVExFX0VORElBTiAtLSBBIDMyLWJpdCBudW1iZXIgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQuXG4iCisiICAgIFJFR19EV09SRF9CSUdfRU5ESUFOIC0tIEEgMzItYml0IG51bWJlciBpbiBiaWctZW5kaWFuIGZvcm1hdC5cbiIKKyIgICAgUkVHX0VYUEFORF9TWiAtLSBBIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdGhhdCBjb250YWlucyB1bmV4cGFuZGVkXG4iCisiICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlcyB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKGZvciBleGFtcGxlLFxuIgorIiAgICAgICAgICAgICAgICAgICAgICVQQVRIJSkuXG4iCisiICAgIFJFR19MSU5LIC0tIEEgVW5pY29kZSBzeW1ib2xpYyBsaW5rLlxuIgorIiAgICBSRUdfTVVMVElfU1ogLS0gQSBzZXF1ZW5jZSBvZiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncywgdGVybWluYXRlZFxuIgorIiAgICAgICAgICAgICAgICAgICAgYnkgdHdvIG51bGwgY2hhcmFjdGVycy4gIE5vdGUgdGhhdCBQeXRob24gaGFuZGxlc1xuIgorIiAgICAgICAgICAgICAgICAgICAgdGhpcyB0ZXJtaW5hdGlvbiBhdXRvbWF0aWNhbGx5LlxuIgorIiAgICBSRUdfTk9ORSAtLSBObyBkZWZpbmVkIHZhbHVlIHR5cGUuXG4iCisiICAgIFJFR19SRVNPVVJDRV9MSVNUIC0tIEEgZGV2aWNlLWRyaXZlciByZXNvdXJjZSBsaXN0LlxuIgorIiAgICBSRUdfU1ogLS0gQSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLlxuIgorIiAgdmFsdWVcbiIKKyIgICAgQSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG5ldyB2YWx1ZS5cbiIKKyJcbiIKKyJUaGlzIG1ldGhvZCBjYW4gYWxzbyBzZXQgYWRkaXRpb25hbCB2YWx1ZSBhbmQgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdGhlXG4iCisic3BlY2lmaWVkIGtleS4gIFRoZSBrZXkgaWRlbnRpZmllZCBieSB0aGUga2V5IHBhcmFtZXRlciBtdXN0IGhhdmUgYmVlblxuIgorIm9wZW5lZCB3aXRoIEtFWV9TRVRfVkFMVUUgYWNjZXNzLlxuIgorIlxuIgorIlRvIG9wZW4gdGhlIGtleSwgdXNlIHRoZSBDcmVhdGVLZXlFeCgpIG9yIE9wZW5LZXlFeCgpIG1ldGhvZHMuXG4iCisiXG4iCisiVmFsdWUgbGVuZ3RocyBhcmUgbGltaXRlZCBieSBhdmFpbGFibGUgbWVtb3J5LiBMb25nIHZhbHVlcyAobW9yZSB0aGFuXG4iCisiMjA0OCBieXRlcykgc2hvdWxkIGJlIHN0b3JlZCBhcyBmaWxlcyB3aXRoIHRoZSBmaWxlbmFtZXMgc3RvcmVkIGluXG4iCisidGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0cnkgdG8gaGVscCB0aGUgcmVnaXN0cnkgcGVyZm9ybSBlZmZpY2llbnRseS4iKTsKKworI2RlZmluZSBXSU5SRUdfU0VUVkFMVUVFWF9NRVRIT0RERUYgICAgXAorICAgIHsiU2V0VmFsdWVFeCIsIChQeUNGdW5jdGlvbil3aW5yZWdfU2V0VmFsdWVFeCwgTUVUSF9WQVJBUkdTLCB3aW5yZWdfU2V0VmFsdWVFeF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX1NldFZhbHVlRXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSwgUHlfVU5JQ09ERSAqdmFsdWVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlc2VydmVkLCBEV09SRCB0eXBlLCBQeU9iamVjdCAqdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX1NldFZhbHVlRXgoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEtFWSBrZXk7CisgICAgUHlfVU5JQ09ERSAqdmFsdWVfbmFtZTsKKyAgICBQeU9iamVjdCAqcmVzZXJ2ZWQ7CisgICAgRFdPUkQgdHlwZTsKKyAgICBQeU9iamVjdCAqdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mWk9rTzpTZXRWYWx1ZUV4IiwKKyAgICAgICAgY2xpbmljX0hLRVlfY29udmVydGVyLCAma2V5LCAmdmFsdWVfbmFtZSwgJnJlc2VydmVkLCAmdHlwZSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHdpbnJlZ19TZXRWYWx1ZUV4X2ltcGwobW9kdWxlLCBrZXksIHZhbHVlX25hbWUsIHJlc2VydmVkLCB0eXBlLCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHdpbnJlZ19EaXNhYmxlUmVmbGVjdGlvbktleV9fZG9jX18sCisiRGlzYWJsZVJlZmxlY3Rpb25LZXkoJG1vZHVsZSwga2V5LCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGlzYWJsZXMgcmVnaXN0cnkgcmVmbGVjdGlvbiBmb3IgMzJiaXQgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gYSA2NGJpdCBPUy5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiXG4iCisiV2lsbCBnZW5lcmFsbHkgcmFpc2UgTm90SW1wbGVtZW50ZWQgaWYgZXhlY3V0ZWQgb24gYSAzMmJpdCBPUy5cbiIKKyJcbiIKKyJJZiB0aGUga2V5IGlzIG5vdCBvbiB0aGUgcmVmbGVjdGlvbiBsaXN0LCB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgYnV0IGhhc1xuIgorIm5vIGVmZmVjdC4gIERpc2FibGluZyByZWZsZWN0aW9uIGZvciBhIGtleSBkb2VzIG5vdCBhZmZlY3QgcmVmbGVjdGlvblxuIgorIm9mIGFueSBzdWJrZXlzLiIpOworCisjZGVmaW5lIFdJTlJFR19ESVNBQkxFUkVGTEVDVElPTktFWV9NRVRIT0RERUYgICAgXAorICAgIHsiRGlzYWJsZVJlZmxlY3Rpb25LZXkiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0Rpc2FibGVSZWZsZWN0aW9uS2V5LCBNRVRIX08sIHdpbnJlZ19EaXNhYmxlUmVmbGVjdGlvbktleV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0Rpc2FibGVSZWZsZWN0aW9uS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXkpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0Rpc2FibGVSZWZsZWN0aW9uS2V5KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgSEtFWSBrZXk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIk8mOkRpc2FibGVSZWZsZWN0aW9uS2V5IiwgY2xpbmljX0hLRVlfY29udmVydGVyLCAma2V5KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHdpbnJlZ19EaXNhYmxlUmVmbGVjdGlvbktleV9pbXBsKG1vZHVsZSwga2V5KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIod2lucmVnX0VuYWJsZVJlZmxlY3Rpb25LZXlfX2RvY19fLAorIkVuYWJsZVJlZmxlY3Rpb25LZXkoJG1vZHVsZSwga2V5LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVzdG9yZXMgcmVnaXN0cnkgcmVmbGVjdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBkaXNhYmxlZCBrZXkuXG4iCisiXG4iCisiICBrZXlcbiIKKyIgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorIlxuIgorIldpbGwgZ2VuZXJhbGx5IHJhaXNlIE5vdEltcGxlbWVudGVkIGlmIGV4ZWN1dGVkIG9uIGEgMzJiaXQgT1MuXG4iCisiUmVzdG9yaW5nIHJlZmxlY3Rpb24gZm9yIGEga2V5IGRvZXMgbm90IGFmZmVjdCByZWZsZWN0aW9uIG9mIGFueVxuIgorInN1YmtleXMuIik7CisKKyNkZWZpbmUgV0lOUkVHX0VOQUJMRVJFRkxFQ1RJT05LRVlfTUVUSE9EREVGICAgIFwKKyAgICB7IkVuYWJsZVJlZmxlY3Rpb25LZXkiLCAoUHlDRnVuY3Rpb24pd2lucmVnX0VuYWJsZVJlZmxlY3Rpb25LZXksIE1FVEhfTywgd2lucmVnX0VuYWJsZVJlZmxlY3Rpb25LZXlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19FbmFibGVSZWZsZWN0aW9uS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXkpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX0VuYWJsZVJlZmxlY3Rpb25LZXkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBIS0VZIGtleTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiTyY6RW5hYmxlUmVmbGVjdGlvbktleSIsIGNsaW5pY19IS0VZX2NvbnZlcnRlciwgJmtleSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5yZWdfRW5hYmxlUmVmbGVjdGlvbktleV9pbXBsKG1vZHVsZSwga2V5KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIod2lucmVnX1F1ZXJ5UmVmbGVjdGlvbktleV9fZG9jX18sCisiUXVlcnlSZWZsZWN0aW9uS2V5KCRtb2R1bGUsIGtleSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgdGhlIHJlZmxlY3Rpb24gc3RhdGUgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGFzIGEgYm9vbC5cbiIKKyJcbiIKKyIgIGtleVxuIgorIiAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCisiXG4iCisiV2lsbCBnZW5lcmFsbHkgcmFpc2UgTm90SW1wbGVtZW50ZWQgaWYgZXhlY3V0ZWQgb24gYSAzMmJpdCBPUy4iKTsKKworI2RlZmluZSBXSU5SRUdfUVVFUllSRUZMRUNUSU9OS0VZX01FVEhPRERFRiAgICBcCisgICAgeyJRdWVyeVJlZmxlY3Rpb25LZXkiLCAoUHlDRnVuY3Rpb24pd2lucmVnX1F1ZXJ5UmVmbGVjdGlvbktleSwgTUVUSF9PLCB3aW5yZWdfUXVlcnlSZWZsZWN0aW9uS2V5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfUXVlcnlSZWZsZWN0aW9uS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXkpOworCitzdGF0aWMgUHlPYmplY3QgKgord2lucmVnX1F1ZXJ5UmVmbGVjdGlvbktleShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIEhLRVkga2V5OworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJPJjpRdWVyeVJlZmxlY3Rpb25LZXkiLCBjbGluaWNfSEtFWV9jb252ZXJ0ZXIsICZrZXkpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gd2lucmVnX1F1ZXJ5UmVmbGVjdGlvbktleV9pbXBsKG1vZHVsZSwga2V5KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdiODk0MGEyM2Y2MDVkZGMgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvUEMvY2xpbmljL3dpbnNvdW5kLmMuaCBiL1BDL2NsaW5pYy93aW5zb3VuZC5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwYjQ0MgotLS0gL2Rldi9udWxsCisrKyBiL1BDL2NsaW5pYy93aW5zb3VuZC5jLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUih3aW5zb3VuZF9QbGF5U291bmRfX2RvY19fLAorIlBsYXlTb3VuZCgkbW9kdWxlLCBzb3VuZCwgZmxhZ3MsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJBIHdyYXBwZXIgYXJvdW5kIHRoZSBXaW5kb3dzIFBsYXlTb3VuZCBBUEkuXG4iCisiXG4iCisiICBzb3VuZFxuIgorIiAgICBUaGUgc291bmQgdG8gcGxheTsgYSBmaWxlbmFtZSwgZGF0YSwgb3IgTm9uZS5cbiIKKyIgIGZsYWdzXG4iCisiICAgIEZsYWcgdmFsdWVzLCBvcmVkIHRvZ2V0aGVyLiAgU2VlIG1vZHVsZSBkb2N1bWVudGF0aW9uLiIpOworCisjZGVmaW5lIFdJTlNPVU5EX1BMQVlTT1VORF9NRVRIT0RERUYgICAgXAorICAgIHsiUGxheVNvdW5kIiwgKFB5Q0Z1bmN0aW9uKXdpbnNvdW5kX1BsYXlTb3VuZCwgTUVUSF9WQVJBUkdTLCB3aW5zb3VuZF9QbGF5U291bmRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnNvdW5kX1BsYXlTb3VuZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X1VOSUNPREUgKnNvdW5kLCBpbnQgZmxhZ3MpOworCitzdGF0aWMgUHlPYmplY3QgKgord2luc291bmRfUGxheVNvdW5kKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X1VOSUNPREUgKnNvdW5kOworICAgIGludCBmbGFnczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiWmk6UGxheVNvdW5kIiwKKyAgICAgICAgJnNvdW5kLCAmZmxhZ3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gd2luc291bmRfUGxheVNvdW5kX2ltcGwobW9kdWxlLCBzb3VuZCwgZmxhZ3MpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5zb3VuZF9CZWVwX19kb2NfXywKKyJCZWVwKCRtb2R1bGUsIGZyZXF1ZW5jeSwgZHVyYXRpb24sIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJBIHdyYXBwZXIgYXJvdW5kIHRoZSBXaW5kb3dzIEJlZXAgQVBJLlxuIgorIlxuIgorIiAgZnJlcXVlbmN5XG4iCisiICAgIEZyZXF1ZW5jeSBvZiB0aGUgc291bmQgaW4gaGVydHouXG4iCisiICAgIE11c3QgYmUgaW4gdGhlIHJhbmdlIDM3IHRocm91Z2ggMzIsNzY3LlxuIgorIiAgZHVyYXRpb25cbiIKKyIgICAgSG93IGxvbmcgdGhlIHNvdW5kIHNob3VsZCBwbGF5LCBpbiBtaWxsaXNlY29uZHMuIik7CisKKyNkZWZpbmUgV0lOU09VTkRfQkVFUF9NRVRIT0RERUYgICAgXAorICAgIHsiQmVlcCIsIChQeUNGdW5jdGlvbil3aW5zb3VuZF9CZWVwLCBNRVRIX1ZBUkFSR1MsIHdpbnNvdW5kX0JlZXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnNvdW5kX0JlZXBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZnJlcXVlbmN5LCBpbnQgZHVyYXRpb24pOworCitzdGF0aWMgUHlPYmplY3QgKgord2luc291bmRfQmVlcChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZnJlcXVlbmN5OworICAgIGludCBkdXJhdGlvbjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6QmVlcCIsCisgICAgICAgICZmcmVxdWVuY3ksICZkdXJhdGlvbikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5zb3VuZF9CZWVwX2ltcGwobW9kdWxlLCBmcmVxdWVuY3ksIGR1cmF0aW9uKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIod2luc291bmRfTWVzc2FnZUJlZXBfX2RvY19fLAorIk1lc3NhZ2VCZWVwKCRtb2R1bGUsIHg9TUJfT0ssIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDYWxsIFdpbmRvd3MgTWVzc2FnZUJlZXAoeCkuXG4iCisiXG4iCisieCBkZWZhdWx0cyB0byBNQl9PSy4iKTsKKworI2RlZmluZSBXSU5TT1VORF9NRVNTQUdFQkVFUF9NRVRIT0RERUYgICAgXAorICAgIHsiTWVzc2FnZUJlZXAiLCAoUHlDRnVuY3Rpb24pd2luc291bmRfTWVzc2FnZUJlZXAsIE1FVEhfVkFSQVJHUywgd2luc291bmRfTWVzc2FnZUJlZXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnNvdW5kX01lc3NhZ2VCZWVwX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHgpOworCitzdGF0aWMgUHlPYmplY3QgKgord2luc291bmRfTWVzc2FnZUJlZXAoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IHggPSBNQl9PSzsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6TWVzc2FnZUJlZXAiLAorICAgICAgICAmeCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB3aW5zb3VuZF9NZXNzYWdlQmVlcF9pbXBsKG1vZHVsZSwgeCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jMGIyOTBkYWYyMzMwZGM5IGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL1BDL2NvbmZpZy5jIGIvUEMvY29uZmlnLmMKaW5kZXggNzJjOTM4MS4uNjZiZjQ1OCAxMDA2NDQKLS0tIGEvUEMvY29uZmlnLmMKKysrIGIvUEMvY29uZmlnLmMKQEAgLTEsNyArMSw3IEBACiAvKiBNb2R1bGUgY29uZmlndXJhdGlvbiAqLwogCiAvKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHRhYmxlIG9mIGJ1aWx0LWluIG1vZHVsZXMuCi0gICBTZWUgaW5pdF9idWlsdGluKCkgaW4gaW1wb3J0LmMuICovCisgICBTZWUgY3JlYXRlX2J1aWx0aW4oKSBpbiBpbXBvcnQuYy4gKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCkBAIC0xOSw3ICsxOSw3IEBACiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fbWQ1KHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfbnQodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3BlcmF0b3Iodm9pZCk7Ci1leHRlcm4gUHlPYmplY3QqIFB5SW5pdF9zaWduYWwodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2lnbmFsKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTEodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2hhMjU2KHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTUxMih2b2lkKTsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICB7Im1hdGgiLCBQeUluaXRfbWF0aH0sCiAgICAgeyJudCIsIFB5SW5pdF9udH0sIC8qIFVzZSB0aGUgTlQgb3MgZnVuY3Rpb25zLCBub3QgcG9zaXggKi8KICAgICB7Il9vcGVyYXRvciIsIFB5SW5pdF9fb3BlcmF0b3J9LAotICAgIHsic2lnbmFsIiwgUHlJbml0X3NpZ25hbH0sCisgICAgeyJfc2lnbmFsIiwgUHlJbml0X19zaWduYWx9LAogICAgIHsiX21kNSIsIFB5SW5pdF9fbWQ1fSwKICAgICB7Il9zaGExIiwgUHlJbml0X19zaGExfSwKICAgICB7Il9zaGEyNTYiLCBQeUluaXRfX3NoYTI1Nn0sCmRpZmYgLS1naXQgYS9QQy9kbF9udC5jIGIvUEMvZGxfbnQuYwppbmRleCBhZTEwZmI1Li5jODdjNTFlIDEwMDY0NAotLS0gYS9QQy9kbF9udC5jCisrKyBiL1BDL2RsX250LmMKQEAgLTEyLDcgKzEyLDEyIEBACiAjaW5jbHVkZSAid2luZG93cy5oIgogCiAjaWZkZWYgUHlfRU5BQkxFX1NIQVJFRAorI2lmZGVmIE1TX0RMTF9JRAorLy8gVGhlIHN0cmluZyBpcyBhdmFpbGFibGUgYXQgYnVpbGQsIHNvIGZpbGwgdGhlIGJ1ZmZlciBpbW1lZGlhdGVseQorY2hhciBkbGxWZXJzaW9uQnVmZmVyWzE2XSA9IE1TX0RMTF9JRDsKKyNlbHNlCiBjaGFyIGRsbFZlcnNpb25CdWZmZXJbMTZdID0gIiI7IC8vIGEgcHJpdmF0ZSBidWZmZXIKKyNlbmRpZgogCiAvLyBQeXRob24gR2xvYmFscwogSE1PRFVMRSBQeVdpbl9ETExoTW9kdWxlID0gTlVMTDsKQEAgLTg4LDggKzkzLDExIEBACiAgICAgewogICAgICAgICBjYXNlIERMTF9QUk9DRVNTX0FUVEFDSDoKICAgICAgICAgICAgIFB5V2luX0RMTGhNb2R1bGUgPSBoSW5zdDsKKyNpZm5kZWYgTVNfRExMX0lECisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIE1TX0RMTF9JRCwgd2UgZG9uJ3QgbmVlZCB0byBsb2FkIHRoZSBzdHJpbmcuCiAgICAgICAgICAgICAvLyAxMDAwIGlzIGEgbWFnaWMgbnVtYmVyIEkgcGlja2VkIG91dCBvZiB0aGUgYWlyLiAgQ291bGQgZG8gd2l0aCBhICNkZWZpbmUsIEkgc3Bvc2UuLi4KICAgICAgICAgICAgIExvYWRTdHJpbmcoaEluc3QsIDEwMDAsIGRsbFZlcnNpb25CdWZmZXIsIHNpemVvZihkbGxWZXJzaW9uQnVmZmVyKSk7CisjZW5kaWYKIAogI2lmIEhBVkVfU1hTCiAgICAgICAgICAgICAvLyBhbmQgY2FwdHVyZSBvdXIgYWN0aXZhdGlvbiBjb250ZXh0IGZvciB1c2Ugd2hlbiBsb2FkaW5nIGV4dGVuc2lvbnMuCmRpZmYgLS1naXQgYS9QQy9nZXRwYXRocC5jIGIvUEMvZ2V0cGF0aHAuYwppbmRleCBkZWI0MGU3Li5jN2RkZjFlIDEwMDY0NAotLS0gYS9QQy9nZXRwYXRocC5jCisrKyBiL1BDL2dldHBhdGhwLmMKQEAgLTExMyw3ICsxMTMsMTAgQEAKIHN0YXRpYyB2b2lkCiByZWR1Y2Uod2NoYXJfdCAqZGlyKQogewotICAgIHNpemVfdCBpID0gd2NzbGVuKGRpcik7CisgICAgc2l6ZV90IGkgPSB3Y3NubGVuX3MoZGlyLCBNQVhQQVRITEVOKzEpOworICAgIGlmIChpID49IE1BWFBBVEhMRU4rMSkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiYnVmZmVyIG92ZXJmbG93IGluIGdldHBhdGhwLmMncyByZWR1Y2UoKSIpOworCiAgICAgd2hpbGUgKGkgPiAwICYmICFpc19zZXAoZGlyW2ldKSkKICAgICAgICAgLS1pOwogICAgIGRpcltpXSA9ICdcMCc7CkBAIC0xMzAsMTYgKzEzMywyMyBAQAogICAgbWF5IGV4dGVuZCAnZmlsZW5hbWUnIGJ5IG9uZSBjaGFyYWN0ZXIuCiAqLwogc3RhdGljIGludAotaXNtb2R1bGUod2NoYXJfdCAqZmlsZW5hbWUpICAgICAvKiBJcyBtb2R1bGUgLS0gY2hlY2sgZm9yIC5weWMvLnB5byB0b28gKi8KK2lzbW9kdWxlKHdjaGFyX3QgKmZpbGVuYW1lLCBpbnQgdXBkYXRlX2ZpbGVuYW1lKSAvKiBJcyBtb2R1bGUgLS0gY2hlY2sgZm9yIC5weWMvLnB5byB0b28gKi8KIHsKKyAgICBpbnQgbjsKKwogICAgIGlmIChleGlzdHMoZmlsZW5hbWUpKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIC8qIENoZWNrIGZvciB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiBwcmVmaXguICovCi0gICAgaWYgKHdjc2xlbihmaWxlbmFtZSkgPCBNQVhQQVRITEVOKSB7Ci0gICAgICAgIHdjc2NhdChmaWxlbmFtZSwgUHlfT3B0aW1pemVGbGFnID8gTCJvIiA6IEwiYyIpOwotICAgICAgICBpZiAoZXhpc3RzKGZpbGVuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAxOworICAgIG4gPSB3Y3NubGVuX3MoZmlsZW5hbWUsIE1BWFBBVEhMRU4rMSk7CisgICAgaWYgKG4gPCBNQVhQQVRITEVOKSB7CisgICAgICAgIGludCBleGlzdCA9IDA7CisgICAgICAgIGZpbGVuYW1lW25dID0gUHlfT3B0aW1pemVGbGFnID8gTCdvJyA6IEwnYyc7CisgICAgICAgIGZpbGVuYW1lW24gKyAxXSA9IEwnXDAnOworICAgICAgICBleGlzdCA9IGV4aXN0cyhmaWxlbmFtZSk7CisgICAgICAgIGlmICghdXBkYXRlX2ZpbGVuYW1lKQorICAgICAgICAgICAgZmlsZW5hbWVbbl0gPSBMJ1wwJzsKKyAgICAgICAgcmV0dXJuIGV4aXN0OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTE1NCwyMyArMTY0LDIzIEBACiAgICBzdHVmZiBhcyBmaXRzIHdpbGwgYmUgYXBwZW5kZWQuCiAqLwogc3RhdGljIHZvaWQKLWpvaW4od2NoYXJfdCAqYnVmZmVyLCB3Y2hhcl90ICpzdHVmZikKK2pvaW4od2NoYXJfdCAqYnVmZmVyLCBjb25zdCB3Y2hhcl90ICpzdHVmZikKIHsKLSAgICBzaXplX3QgbiwgazsKLSAgICBpZiAoaXNfc2VwKHN0dWZmWzBdKSkKLSAgICAgICAgbiA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG4gPSB3Y3NsZW4oYnVmZmVyKTsKLSAgICAgICAgaWYgKG4gPiAwICYmICFpc19zZXAoYnVmZmVyW24tMV0pICYmIG4gPCBNQVhQQVRITEVOKQotICAgICAgICAgICAgYnVmZmVyW24rK10gPSBTRVA7CisgICAgc2l6ZV90IG47CisgICAgaWYgKGlzX3NlcChzdHVmZlswXSkgfHwKKyAgICAgICAgKHdjc25sZW5fcyhzdHVmZiwgNCkgPj0gMyAmJiBzdHVmZlsxXSA9PSAnOicgJiYgaXNfc2VwKHN0dWZmWzJdKSkpIHsKKyAgICAgICAgaWYgKHdjc2NweV9zKGJ1ZmZlciwgTUFYUEFUSExFTisxLCBzdHVmZikgIT0gMCkKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbigpIik7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG4gPiBNQVhQQVRITEVOKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJidWZmZXIgb3ZlcmZsb3cgaW4gZ2V0cGF0aHAuYydzIGpvaW5wYXRoKCkiKTsKLSAgICBrID0gd2NzbGVuKHN0dWZmKTsKLSAgICBpZiAobiArIGsgPiBNQVhQQVRITEVOKQotICAgICAgICBrID0gTUFYUEFUSExFTiAtIG47Ci0gICAgd2NzbmNweShidWZmZXIrbiwgc3R1ZmYsIGspOwotICAgIGJ1ZmZlcltuK2tdID0gJ1wwJzsKKworICAgIG4gPSB3Y3NubGVuX3MoYnVmZmVyLCBNQVhQQVRITEVOKzEpOworICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuIC0gMV0pICYmIG4gPCBNQVhQQVRITEVOKSB7CisgICAgICAgIGJ1ZmZlcltuXSA9IFNFUDsKKyAgICAgICAgYnVmZmVyW24gKyAxXSA9ICdcMCc7CisgICAgfQorICAgIGlmICh3Y3NjYXRfcyhidWZmZXIsIE1BWFBBVEhMRU4rMSwgc3R1ZmYpICE9IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbigpIik7CiB9CiAKIC8qIGdvdGxhbmRtYXJrIG9ubHkgY2FsbGVkIGJ5IHNlYXJjaF9mb3JfcHJlZml4LCB3aGljaCBlbnN1cmVzCkBAIC0xODEsMTEgKzE5MSwxMCBAQAogZ290bGFuZG1hcmsod2NoYXJfdCAqbGFuZG1hcmspCiB7CiAgICAgaW50IG9rOwotICAgIFB5X3NzaXplX3QgbjsKKyAgICBQeV9zc2l6ZV90IG4gPSB3Y3NubGVuX3MocHJlZml4LCBNQVhQQVRITEVOKTsKIAotICAgIG4gPSB3Y3NsZW4ocHJlZml4KTsKICAgICBqb2luKHByZWZpeCwgbGFuZG1hcmspOwotICAgIG9rID0gaXNtb2R1bGUocHJlZml4KTsKKyAgICBvayA9IGlzbW9kdWxlKHByZWZpeCwgRkFMU0UpOwogICAgIHByZWZpeFtuXSA9ICdcMCc7CiAgICAgcmV0dXJuIG9rOwogfQpAQCAtMTk2LDcgKzIwNSw3IEBACiBzZWFyY2hfZm9yX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpsYW5kbWFyaykKIHsKICAgICAvKiBTZWFyY2ggZnJvbSBhcmd2MF9wYXRoLCB1bnRpbCBsYW5kbWFyayBpcyBmb3VuZCAqLwotICAgIHdjc2NweShwcmVmaXgsIGFyZ3YwX3BhdGgpOworICAgIHdjc2NweV9zKHByZWZpeCwgTUFYUEFUSExFTiArIDEsIGFyZ3YwX3BhdGgpOwogICAgIGRvIHsKICAgICAgICAgaWYgKGdvdGxhbmRtYXJrKGxhbmRtYXJrKSkKICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMjM2LDcgKzI0NSw3IEBACiAgICAgV0NIQVIgKmRhdGFCdWYgPSBOVUxMOwogICAgIHN0YXRpYyBjb25zdCBXQ0hBUiBrZXlQcmVmaXhbXSA9IEwiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxcIjsKICAgICBzdGF0aWMgY29uc3QgV0NIQVIga2V5U3VmZml4W10gPSBMIlxcUHl0aG9uUGF0aCI7Ci0gICAgc2l6ZV90IHZlcnNpb25MZW47CisgICAgc2l6ZV90IHZlcnNpb25MZW4sIGtleUJ1ZkxlbjsKICAgICBEV09SRCBpbmRleDsKICAgICBXQ0hBUiAqa2V5QnVmID0gTlVMTDsKICAgICBXQ0hBUiAqa2V5QnVmUHRyOwpAQCAtMjQ1LDEyICsyNTQsMTMgQEAKICAgICAvKiBUcmllZCB0byB1c2Ugc3lzZ2V0KCJ3aW52ZXIiKSBidXQgaGVyZSBpcyB0b28gZWFybHkgOi0oICovCiAgICAgdmVyc2lvbkxlbiA9IHN0cmxlbihQeVdpbl9ETExWZXJzaW9uU3RyaW5nKTsKICAgICAvKiBTcGFjZSBmb3IgYWxsIHRoZSBjaGFycywgcGx1cyBvbmUgXDAgKi8KLSAgICBrZXlCdWYgPSBrZXlCdWZQdHIgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKGtleVByZWZpeCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoV0NIQVIpKih2ZXJzaW9uTGVuLTEpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGtleVN1ZmZpeCkpOworICAgIGtleUJ1ZkxlbiA9IHNpemVvZihrZXlQcmVmaXgpICsKKyAgICAgICAgICAgICAgICBzaXplb2YoV0NIQVIpKih2ZXJzaW9uTGVuLTEpICsKKyAgICAgICAgICAgICAgICBzaXplb2Yoa2V5U3VmZml4KTsKKyAgICBrZXlCdWYgPSBrZXlCdWZQdHIgPSBQeU1lbV9SYXdNYWxsb2Moa2V5QnVmTGVuKTsKICAgICBpZiAoa2V5QnVmPT1OVUxMKSBnb3RvIGRvbmU7CiAKLSAgICBtZW1jcHkoa2V5QnVmUHRyLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLXNpemVvZihXQ0hBUikpOworICAgIG1lbWNweV9zKGtleUJ1ZlB0ciwga2V5QnVmTGVuLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLXNpemVvZihXQ0hBUikpOwogICAgIGtleUJ1ZlB0ciArPSBQeV9BUlJBWV9MRU5HVEgoa2V5UHJlZml4KSAtIDE7CiAgICAgbWJzdG93Y3Moa2V5QnVmUHRyLCBQeVdpbl9ETExWZXJzaW9uU3RyaW5nLCB2ZXJzaW9uTGVuKTsKICAgICBrZXlCdWZQdHIgKz0gdmVyc2lvbkxlbjsKQEAgLTMxMSw3ICszMjEsNiBAQAogICAgIGRhdGFCdWYgPSBQeU1lbV9SYXdNYWxsb2MoKGRhdGFTaXplKzEpICogc2l6ZW9mKFdDSEFSKSk7CiAgICAgaWYgKGRhdGFCdWYpIHsKICAgICAgICAgV0NIQVIgKnN6Q3VyID0gZGF0YUJ1ZjsKLSAgICAgICAgRFdPUkQgcmVxZFNpemUgPSBkYXRhU2l6ZTsKICAgICAgICAgLyogQ29weSBvdXIgY29sbGVjdGVkIHN0cmluZ3MgKi8KICAgICAgICAgZm9yIChpbmRleD0wO2luZGV4PG51bUtleXM7aW5kZXgrKykgewogICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkgewpAQCAtMzM5LDYgKzM0OCwxMCBAQAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZUV4VyhuZXdLZXksIE5VTEwsIDAsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQQllURSlzekN1ciwgJmRhdGFTaXplKTsKKyAgICAgICAgICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShkYXRhQnVmKTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogQW5kIHNldCB0aGUgcmVzdWx0IC0gY2FsbGVyIG11c3QgZnJlZSAqLwogICAgICAgICByZXR2YWwgPSBkYXRhQnVmOwpAQCAtNDUxLDExICs0NjQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBidWZmZXIsIE1BWFBBVEhMRU4gKiAyKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWNvZGVkKTsKICAgICAgICAgICAgIGlmIChrID49IDApIHsKLSAgICAgICAgICAgICAgICB3Y2hhcl90ICogdG9rID0gd2NzdG9rKHRtcGJ1ZmZlciwgTCIgXHRcclxuIik7CisgICAgICAgICAgICAgICAgd2NoYXJfdCAqIGNvbnRleHQgPSBOVUxMOworICAgICAgICAgICAgICAgIHdjaGFyX3QgKiB0b2sgPSB3Y3N0b2tfcyh0bXBidWZmZXIsIEwiIFx0XHJcbiIsICZjb250ZXh0KTsKICAgICAgICAgICAgICAgICBpZiAoKHRvayAhPSBOVUxMKSAmJiAhd2NzY21wKHRvaywga2V5KSkgewotICAgICAgICAgICAgICAgICAgICB0b2sgPSB3Y3N0b2soTlVMTCwgTCIgXHQiKTsKKyAgICAgICAgICAgICAgICAgICAgdG9rID0gd2NzdG9rX3MoTlVMTCwgTCIgXHQiLCAmY29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgodG9rICE9IE5VTEwpICYmICF3Y3NjbXAodG9rLCBMIj0iKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gd2NzdG9rKE5VTEwsIEwiXHJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gd2NzdG9rX3MoTlVMTCwgTCJcclxuIiwgJmNvbnRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvayAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NzbmNweSh2YWx1ZSwgdG9rLCBNQVhQQVRITEVOKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAxOwpAQCAtNDgzLDcgKzQ5Nyw3IEBACiAgICAgd2NoYXJfdCAqbWFjaGluZXBhdGggPSBOVUxMOwogICAgIHdjaGFyX3QgKnVzZXJwYXRoID0gTlVMTDsKICAgICB3Y2hhcl90IHppcF9wYXRoW01BWFBBVEhMRU4rMV07Ci0gICAgc2l6ZV90IGxlbjsKKyAgICBpbnQgYXBwbG9jYWwgPSAwOwogCiAgICAgaWYgKCFQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWcpIHsKICAgICAgICAgZW52cGF0aCA9IF93Z2V0ZW52KEwiUFlUSE9OUEFUSCIpOwpAQCAtNTAxLDcgKzUxNSw3IEBACiAKICAgICBnZXRfcHJvZ3BhdGgoKTsKICAgICAvKiBwcm9ncGF0aCBndWFyYW50ZWVkIFwwIHRlcm1pbmF0ZWQgaW4gTUFYUEFUSCsxIGJ5dGVzLiAqLwotICAgIHdjc2NweShhcmd2MF9wYXRoLCBwcm9ncGF0aCk7CisgICAgd2NzY3B5X3MoYXJndjBfcGF0aCwgTUFYUEFUSExFTisxLCBwcm9ncGF0aCk7CiAgICAgcmVkdWNlKGFyZ3YwX3BhdGgpOwogCiAgICAgLyogU2VhcmNoIGZvciBhbiBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZpbGUsIGZpcnN0IGluIHRoZQpAQCAtNTEwLDI3ICs1MjQsMzkgQEAKICAgICAqLwogCiAgICAgeworICAgICAgICB3Y2hhcl90IGVudmJ1ZmZlcltNQVhQQVRITEVOKzFdOwogICAgICAgICB3Y2hhcl90IHRtcGJ1ZmZlcltNQVhQQVRITEVOKzFdOwotICAgICAgICB3Y2hhcl90ICplbnZfY2ZnID0gTCJweXZlbnYuY2ZnIjsKKyAgICAgICAgY29uc3Qgd2NoYXJfdCAqZW52X2NmZyA9IEwicHl2ZW52LmNmZyI7CiAgICAgICAgIEZJTEUgKiBlbnZfZmlsZSA9IE5VTEw7CiAKLSAgICAgICAgd2NzY3B5KHRtcGJ1ZmZlciwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGpvaW4odG1wYnVmZmVyLCBlbnZfY2ZnKTsKLSAgICAgICAgZW52X2ZpbGUgPSBfUHlfd2ZvcGVuKHRtcGJ1ZmZlciwgTCJyIik7CisgICAgICAgIHdjc2NweV9zKGVudmJ1ZmZlciwgTUFYUEFUSExFTisxLCBhcmd2MF9wYXRoKTsKKyAgICAgICAgam9pbihlbnZidWZmZXIsIGVudl9jZmcpOworICAgICAgICBlbnZfZmlsZSA9IF9QeV93Zm9wZW4oZW52YnVmZmVyLCBMInIiKTsKICAgICAgICAgaWYgKGVudl9maWxlID09IE5VTEwpIHsKICAgICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAgIHJlZHVjZSh0bXBidWZmZXIpOwotICAgICAgICAgICAgcmVkdWNlKHRtcGJ1ZmZlcik7Ci0gICAgICAgICAgICBqb2luKHRtcGJ1ZmZlciwgZW52X2NmZyk7Ci0gICAgICAgICAgICBlbnZfZmlsZSA9IF9QeV93Zm9wZW4odG1wYnVmZmVyLCBMInIiKTsKKyAgICAgICAgICAgIHJlZHVjZShlbnZidWZmZXIpOworICAgICAgICAgICAgcmVkdWNlKGVudmJ1ZmZlcik7CisgICAgICAgICAgICBqb2luKGVudmJ1ZmZlciwgZW52X2NmZyk7CisgICAgICAgICAgICBlbnZfZmlsZSA9IF9QeV93Zm9wZW4oZW52YnVmZmVyLCBMInIiKTsKICAgICAgICAgICAgIGlmIChlbnZfZmlsZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChlbnZfZmlsZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAvKiBMb29rIGZvciBhbiAnYXBwbG9jYWwnIHZhcmlhYmxlIGFuZCwgaWYgdHJ1ZSwgaWdub3JlIGFsbCByZWdpc3RyeQorICAgICAgICAgICAgICoga2V5cyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBidXQgcmV0YWluIHRoZSBkZWZhdWx0IHBhdGhzCisgICAgICAgICAgICAgKiAoRExMcywgTGliKSBhbmQgdGhlIHppcCBmaWxlLiBTZXR0aW5nIHB5dGhvbmhvbWUgaGVyZSBzdXBwcmVzc2VzCisgICAgICAgICAgICAgKiB0aGUgc2VhcmNoIGZvciBMQU5ETUFSSyBiZWxvdyBhbmQgb3ZlcnJpZGVzICVQWVRIT05IT01FJS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGZpbmRfZW52X2NvbmZpZ192YWx1ZShlbnZfZmlsZSwgTCJhcHBsb2NhbCIsIHRtcGJ1ZmZlcikgJiYKKyAgICAgICAgICAgICAgICAoYXBwbG9jYWwgPSAod2NzaWNtcCh0bXBidWZmZXIsIEwidHJ1ZSIpID09IDApKSkgeworICAgICAgICAgICAgICAgIGVudnBhdGggPSBOVUxMOworICAgICAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBhcmd2MF9wYXRoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICAvKiBMb29rIGZvciBhICdob21lJyB2YXJpYWJsZSBhbmQgc2V0IGFyZ3YwX3BhdGggdG8gaXQsIGlmIGZvdW5kICovCiAgICAgICAgICAgICBpZiAoZmluZF9lbnZfY29uZmlnX3ZhbHVlKGVudl9maWxlLCBMImhvbWUiLCB0bXBidWZmZXIpKSB7Ci0gICAgICAgICAgICAgICAgd2NzY3B5KGFyZ3YwX3BhdGgsIHRtcGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgd2NzY3B5X3MoYXJndjBfcGF0aCwgTUFYUEFUSExFTisxLCB0bXBidWZmZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZmNsb3NlKGVudl9maWxlKTsKICAgICAgICAgICAgIGVudl9maWxlID0gTlVMTDsKQEAgLTU0NCwzMyArNTcwLDMwIEBACiAgICAgICAgICAgICBweXRob25ob21lID0gTlVMTDsKICAgICB9CiAgICAgZWxzZQotICAgICAgICB3Y3NuY3B5KHByZWZpeCwgcHl0aG9uaG9tZSwgTUFYUEFUSExFTik7CisgICAgICAgIHdjc2NweV9zKHByZWZpeCwgTUFYUEFUSExFTisxLCBweXRob25ob21lKTsKIAogICAgIGlmIChlbnZwYXRoICYmICplbnZwYXRoID09ICdcMCcpCiAgICAgICAgIGVudnBhdGggPSBOVUxMOwogCiAKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgLyogQ2FsY3VsYXRlIHppcCBhcmNoaXZlIHBhdGggKi8KLSAgICBpZiAoZGxscGF0aFswXSkgICAgICAgICAgICAgLyogdXNlIG5hbWUgb2YgcHl0aG9uIERMTCAqLwotICAgICAgICB3Y3NuY3B5KHppcF9wYXRoLCBkbGxwYXRoLCBNQVhQQVRITEVOKTsKLSAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNlIG5hbWUgb2YgZXhlY3V0YWJsZSBwcm9ncmFtICovCi0gICAgICAgIHdjc25jcHkoemlwX3BhdGgsIHByb2dwYXRoLCBNQVhQQVRITEVOKTsKLSAgICB6aXBfcGF0aFtNQVhQQVRITEVOXSA9ICdcMCc7Ci0gICAgbGVuID0gd2NzbGVuKHppcF9wYXRoKTsKLSAgICBpZiAobGVuID4gNCkgewotICAgICAgICB6aXBfcGF0aFtsZW4tM10gPSAneic7ICAgICAgICAgIC8qIGNoYW5nZSBlbmRpbmcgdG8gInppcCIgKi8KLSAgICAgICAgemlwX3BhdGhbbGVuLTJdID0gJ2knOwotICAgICAgICB6aXBfcGF0aFtsZW4tMV0gPSAncCc7Ci0gICAgfQorICAgIC8qIENhbGN1bGF0ZSB6aXAgYXJjaGl2ZSBwYXRoIGZyb20gRExMIG9yIGV4ZSBwYXRoICovCisgICAgaWYgKHdjc2NweV9zKHppcF9wYXRoLCBNQVhQQVRITEVOKzEsIGRsbHBhdGhbMF0gPyBkbGxwYXRoIDogcHJvZ3BhdGgpKQorICAgICAgICAvKiBleGNlZWRlZCBidWZmZXIgbGVuZ3RoIC0gaWdub3JlIHppcF9wYXRoICovCisgICAgICAgIHppcF9wYXRoWzBdID0gJ1wwJzsKICAgICBlbHNlIHsKLSAgICAgICAgemlwX3BhdGhbMF0gPSAwOworICAgICAgICB3Y2hhcl90ICpkb3QgPSB3Y3NyY2hyKHppcF9wYXRoLCAnLicpOworICAgICAgICBpZiAoIWRvdCB8fCB3Y3NjcHlfcyhkb3QsIE1BWFBBVEhMRU4rMSAtIChkb3QgLSB6aXBfcGF0aCksIEwiLnppcCIpKQorICAgICAgICAgICAgLyogZXhjZWVkZWQgYnVmZmVyIGxlbmd0aCAtIGlnbm9yZSB6aXBfcGF0aCAqLworICAgICAgICAgICAgemlwX3BhdGhbMF0gPSBMJ1wwJzsKICAgICB9CiAKICAgICBza2lwaG9tZSA9IHB5dGhvbmhvbWU9PU5VTEwgPyAwIDogMTsKICNpZmRlZiBQeV9FTkFCTEVfU0hBUkVECi0gICAgbWFjaGluZXBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfTE9DQUxfTUFDSElORSwgc2tpcGhvbWUpOwotICAgIHVzZXJwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0NVUlJFTlRfVVNFUiwgc2tpcGhvbWUpOworICAgIGlmICghYXBwbG9jYWwpIHsKKyAgICAgICAgbWFjaGluZXBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfTE9DQUxfTUFDSElORSwgc2tpcGhvbWUpOworICAgICAgICB1c2VycGF0aCA9IGdldHB5dGhvbnJlZ3BhdGgoSEtFWV9DVVJSRU5UX1VTRVIsIHNraXBob21lKTsKKyAgICB9CiAjZW5kaWYKICAgICAvKiBXZSBvbmx5IHVzZSB0aGUgZGVmYXVsdCByZWxhdGl2ZSBQWVRIT05QQVRIIGlmIHdlIGhhdmVudAogICAgICAgIGFueXRoaW5nIGJldHRlciB0byB1c2UhICovCkBAIC01ODksNiArNjEyLDcgQEAKICAgICAgICBFeHRyYSBydWxlczoKICAgICAgICAtIElmIFBZVEhPTkhPTUUgaXMgc2V0IChpbiBhbnkgd2F5KSBpdGVtICgzKSBpcyBpZ25vcmVkLgogICAgICAgIC0gSWYgcmVnaXN0cnkgdmFsdWVzIGFyZSB1c2VkLCAoNCkgYW5kICg1KSBhcmUgaWdub3JlZC4KKyAgICAgICAtIElmIGFwcGxvY2FsIGlzIHNldCwgKDEpLCAoMyksIGFuZCByZWdpc3RyeSB2YWx1ZXMgYXJlIGlnbm9yZWQKICAgICAqLwogCiAgICAgLyogQ2FsY3VsYXRlIHNpemUgb2YgcmV0dXJuIGJ1ZmZlciAqLwpAQCAtNjA2LDkgKzYzMCw5IEBACiAgICAgYnVmc3ogKz0gd2NzbGVuKFBZVEhPTlBBVEgpICsgMTsKICAgICBidWZzeiArPSB3Y3NsZW4oYXJndjBfcGF0aCkgKyAxOwogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAodXNlcnBhdGgpCisgICAgaWYgKCFhcHBsb2NhbCAmJiB1c2VycGF0aCkKICAgICAgICAgYnVmc3ogKz0gd2NzbGVuKHVzZXJwYXRoKSArIDE7Ci0gICAgaWYgKG1hY2hpbmVwYXRoKQorICAgIGlmICghYXBwbG9jYWwgJiYgbWFjaGluZXBhdGgpCiAgICAgICAgIGJ1ZnN6ICs9IHdjc2xlbihtYWNoaW5lcGF0aCkgKyAxOwogICAgIGJ1ZnN6ICs9IHdjc2xlbih6aXBfcGF0aCkgKyAxOwogI2VuZGlmCkBAIC02MzUsMzggKzY1OSw0NSBAQAogICAgIH0KIAogICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgIHdjc2NweShidWYsIGVudnBhdGgpOworICAgICAgICBpZiAod2NzY3B5X3MoYnVmLCBidWZzeiAtIChidWYgLSBtb2R1bGVfc2VhcmNoX3BhdGgpLCBlbnZwYXRoKSkKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3MgY2FsY3VsYXRlX3BhdGgoKSIpOwogICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CiAgICAgICAgICpidWYrKyA9IERFTElNOwogICAgIH0KICNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKHppcF9wYXRoWzBdKSB7Ci0gICAgICAgIHdjc2NweShidWYsIHppcF9wYXRoKTsKKyAgICAgICAgaWYgKHdjc2NweV9zKGJ1ZiwgYnVmc3ogLSAoYnVmIC0gbW9kdWxlX3NlYXJjaF9wYXRoKSwgemlwX3BhdGgpKQorICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiYnVmZmVyIG92ZXJmbG93IGluIGdldHBhdGhwLmMncyBjYWxjdWxhdGVfcGF0aCgpIik7CiAgICAgICAgIGJ1ZiA9IHdjc2NocihidWYsIEwnXDAnKTsKICAgICAgICAgKmJ1ZisrID0gREVMSU07CiAgICAgfQogICAgIGlmICh1c2VycGF0aCkgewotICAgICAgICB3Y3NjcHkoYnVmLCB1c2VycGF0aCk7CisgICAgICAgIGlmICh3Y3NjcHlfcyhidWYsIGJ1ZnN6IC0gKGJ1ZiAtIG1vZHVsZV9zZWFyY2hfcGF0aCksIHVzZXJwYXRoKSkKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3MgY2FsY3VsYXRlX3BhdGgoKSIpOwogICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CiAgICAgICAgICpidWYrKyA9IERFTElNOwogICAgICAgICBQeU1lbV9SYXdGcmVlKHVzZXJwYXRoKTsKICAgICB9CiAgICAgaWYgKG1hY2hpbmVwYXRoKSB7Ci0gICAgICAgIHdjc2NweShidWYsIG1hY2hpbmVwYXRoKTsKKyAgICAgICAgaWYgKHdjc2NweV9zKGJ1ZiwgYnVmc3ogLSAoYnVmIC0gbW9kdWxlX3NlYXJjaF9wYXRoKSwgbWFjaGluZXBhdGgpKQorICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiYnVmZmVyIG92ZXJmbG93IGluIGdldHBhdGhwLmMncyBjYWxjdWxhdGVfcGF0aCgpIik7CiAgICAgICAgIGJ1ZiA9IHdjc2NocihidWYsIEwnXDAnKTsKICAgICAgICAgKmJ1ZisrID0gREVMSU07CiAgICAgICAgIFB5TWVtX1Jhd0ZyZWUobWFjaGluZXBhdGgpOwogICAgIH0KICAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghc2tpcGRlZmF1bHQpIHsKLSAgICAgICAgICAgIHdjc2NweShidWYsIFBZVEhPTlBBVEgpOworICAgICAgICAgICAgaWYgKHdjc2NweV9zKGJ1ZiwgYnVmc3ogLSAoYnVmIC0gbW9kdWxlX3NlYXJjaF9wYXRoKSwgUFlUSE9OUEFUSCkpCisgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiYnVmZmVyIG92ZXJmbG93IGluIGdldHBhdGhwLmMncyBjYWxjdWxhdGVfcGF0aCgpIik7CiAgICAgICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CisgICAgICAgICAgICAqYnVmKysgPSBERUxJTTsKICAgICAgICAgfQogICAgIH0KICNlbHNlCiAgICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewogICAgICAgICB3Y3NjcHkoYnVmLCBQWVRIT05QQVRIKTsKICAgICAgICAgYnVmID0gd2NzY2hyKGJ1ZiwgTCdcMCcpOworICAgICAgICAqYnVmKysgPSBERUxJTTsKICAgICB9CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogICAgIGVsc2UgewpAQCAtNjgwLDI1ICs3MTEsMjYgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBuID0gcS1wOwogICAgICAgICAgICAgaWYgKHBbMF0gPT0gJy4nICYmIGlzX3NlcChwWzFdKSkgewotICAgICAgICAgICAgICAgIHdjc2NweShidWYsIHB5dGhvbmhvbWUpOworICAgICAgICAgICAgICAgIGlmICh3Y3NjcHlfcyhidWYsIGJ1ZnN6IC0gKGJ1ZiAtIG1vZHVsZV9zZWFyY2hfcGF0aCksIHB5dGhvbmhvbWUpKQorICAgICAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJidWZmZXIgb3ZlcmZsb3cgaW4gZ2V0cGF0aHAuYydzIGNhbGN1bGF0ZV9wYXRoKCkiKTsKICAgICAgICAgICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CiAgICAgICAgICAgICAgICAgcCsrOwogICAgICAgICAgICAgICAgIG4tLTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdjc25jcHkoYnVmLCBwLCBuKTsKICAgICAgICAgICAgIGJ1ZiArPSBuOworICAgICAgICAgICAgKmJ1ZisrID0gREVMSU07CiAgICAgICAgICAgICBpZiAocSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKmJ1ZisrID0gREVMSU07CiAgICAgICAgICAgICBwID0gcSsxOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChhcmd2MF9wYXRoKSB7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwogICAgICAgICB3Y3NjcHkoYnVmLCBhcmd2MF9wYXRoKTsKICAgICAgICAgYnVmID0gd2NzY2hyKGJ1ZiwgTCdcMCcpOworICAgICAgICAqYnVmKysgPSBERUxJTTsKICAgICB9Ci0gICAgKmJ1ZiA9IEwnXDAnOworICAgICooYnVmIC0gMSkgPSBMJ1wwJzsKICAgICAvKiBOb3cgdG8gcHVsbCBvbmUgbGFzdCBoYWNrL3RyaWNrLiAgSWYgc3lzLnByZWZpeCBpcwogICAgICAgIGVtcHR5LCB0aGVuIHRyeSBhbmQgZmluZCBpdCBzb21ld2hlcmUgb24gdGhlIHBhdGhzCiAgICAgICAgd2UgY2FsY3VsYXRlZC4gIFdlIHNjYW4gYmFja3dhcmRzLCBhcyBvdXIgZ2VuZXJhbCBwb2xpY3kKZGlmZiAtLWdpdCBhL1BDL2ljb25zLm1hayBiL1BDL2ljb25zLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGExMzJjOS4uMDAwMDAwMAotLS0gYS9QQy9pY29ucy5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXB5dGhvbl9pY29uLmV4ZToJcHkucmVzIGVtcHR5Lm9iagotCWxpbmsgL291dDpweXRob25faWNvbi5leGUgL21hY2hpbmU6eDg2IC9zdWJzeXN0ZW06d2luZG93cyBweS5yZXMgZW1wdHkub2JqCi0KLXB5LnJlczoJcHkuaWNvIHB5Yy5pY28gcHljb24uaWNvIGljb25zLnJjCi0JcmMgL2ZvIHB5LnJlcyBpY29ucy5yYwotCi1lbXB0eS5vYmo6CWVtcHR5LmMKLQljbCAvYyBlbXB0eS5jCi0KZGlmZiAtLWdpdCBhL1BDL2ljb25zLnJjIGIvUEMvaWNvbnMucmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYjQ0MTAuLjAwMDAwMDAKLS0tIGEvUEMvaWNvbnMucmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTEwMSBJQ09OICJweS5pY28iCi0xMDIgSUNPTiAicHljLmljbyIKLTEwMyBJQ09OICJweWNvbi5pY28iCi0KZGlmZiAtLWdpdCBhL1BDL2ljb25zL2Jhc2Vsb2dvLnN2ZyBiL1BDL2ljb25zL2Jhc2Vsb2dvLnN2ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZmNmIxNy4uMDAwMDAwMAotLS0gYS9QQy9pY29ucy9iYXNlbG9nby5zdmcKKysrIC9kZXYvbnVsbApAQCAtMSw2MDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxzdmcgdmVyc2lvbj0iMS4wIiB3aWR0aD0iNzQ0LjA5NDQ4IiBoZWlnaHQ9IjEwNTIuMzYyMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Ci0gIDxkZWZzPgotICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icHlZZWxsb3dHcmFkaWVudCI+Ci0gICAgICA8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojZmZjMTMwO3N0b3Atb3BhY2l0eToxIi8+Ci0gICAgICA8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojZmZlYTViO3N0b3Atb3BhY2l0eToxIi8+Ci0gICAgPC9saW5lYXJHcmFkaWVudD4KLSAgICA8bGluZWFyR3JhZGllbnQgaWQ9InB5Qmx1ZUdyYWRpZW50Ij4KLSAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOiM0MjY2ODQ7c3RvcC1vcGFjaXR5OjEiIG9mZnNldD0iMCIvPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6IzM1N2NiNTtzdG9wLW9wYWNpdHk6MSIgb2Zmc2V0PSIxIi8+Ci0gICAgPC9saW5lYXJHcmFkaWVudD4KLSAgICA8bGluZWFyR3JhZGllbnQgaWQ9InB5WWVsbG93IiB4bGluazpocmVmPSIjcHlZZWxsb3dHcmFkaWVudCIgeDE9IjExMDguOTczOSIgeTE9IjMzNjUuNjQ0OCIgeDI9Ijk0OS44MDkyNyIgeTI9IjMxNDQuMTk0MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4zMTc3MTUsMCwwLDAuMzE3NzE1LC0xNzIuNTc5LC01ODMuMDI3KSIvPgotICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icHlCbHVlIiB4bGluazpocmVmPSIjcHlCbHVlR3JhZGllbnQiIHgxPSI2MDcuMjc3OTUiIHkxPSIxODQxLjYxOSIgeDI9IjQ3Mi42NzM3MSIgeTI9IjE2NjAuNjAwMiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC4zMTc3MTUsMCwwLDAuMzE3NzE1LC03MS4zOTM0MywtMTUxLjIzNDgpIi8+Ci0gIDwvZGVmcz4KLQotICA8ZwotICAgICBpZD0ibGF5ZXIxIj4KLSAgICA8cGF0aAotICAgICAgIGQ9Ik0gODguMTI2MTg4LDExMC44OTM3NCBDIDg4LjEyNjE4OCw5OS45MzI1NjkgOTcuMDIxOTU0LDkxLjAzNjQyMiAxMDcuOTgzMTIsOTEuMDIzMzAxIEwgMTQ3LjY5NzgxLDkxLjAyMzMwMSBDIDE1OC42NTg5OCw5MS4wMzY0MzUgMTY3LjU1NDc1LDk5LjkzMjU2OSAxNjcuNTU0NzUsMTEwLjg4MDIzIEwgMTY3LjU1NDc1LDE0OC4xMTkyOSBDIDE2Ny41NTQ3NSwxNTkuMDgwNDYgMTU4LjY1ODk4LDE2Ny45NzY2MSAxNDcuNjk3ODEsMTY3Ljk3NjYxIEwgMTA3Ljk4MzEyLDE2Ny45NzY2MSBDIDk0LjI4MTg1MywxNjcuOTc2NjEgODMuMTYxOTU1LDE3OS4wOTY1IDgzLjE2MTk1NSwxOTIuNzk3NzcgTCA4My4xNjE5NTUsMjEwLjE3OTU1IEwgNjguMjY4ODczLDIxMC4xNjY0MyBDIDU3LjMwNzcwNiwyMTAuMTc5NTUgNDguNDExNTU5LDIwMS4yNzAyOCA0OC40MTE1NTksMTkwLjMwOTExIEwgNDguNDExNTU5LDE1MC41OTQ3MiBDIDQ4LjQxMTU1OSwxMzkuNjQ2NjggNTcuMzA3NzA2LDEzMC43Mzc0MSA2OC4yNjg4NzMsMTMwLjczNzQxIEwgMTI3Ljg0MDQ0LDEzMC43NTA1NCBMIDEyNy44NDA0NCwxMjUuNzg2MzEgTCA4OC4xMjYwNjEsMTI1Ljc4NjMxIEwgODguMTI2MDYxLDExMC44OTM2MSBMIDg4LjEyNjE4OCwxMTAuODkzNzQgeiBNIDEwNS40OTQ0MywxMDAuOTY0ODkgQyAxMDkuNjExNzMsMTAwLjk2NDg5IDExMi45NDc3NCwxMDQuMzAwOSAxMTIuOTQ3NzQsMTA4LjQwNTA0IEMgMTEyLjk0Nzc0LDExMi41MjE5NiAxMDkuNjExNzMsMTE1Ljg1Nzk3IDEwNS40OTQ0MywxMTUuODU3OTcgQyAxMDEuMzkwNjYsMTE1Ljg1Nzk3IDk4LjA0MTUwMSwxMTIuNTIxOTYgOTguMDQxNTAxLDEwOC40MDUwNCBDIDk4LjA0MTUwMSwxMDQuMzAwOSAxMDEuMzkwNjMsMTAwLjk2NDg5IDEwNS40OTQ0MywxMDAuOTY0ODkgeiAiCi0gICAgICAgc3R5bGU9ImZpbGw6IzQyNjY4NDtmaWxsLXJ1bGU6ZXZlbm9kZCIKLSAgICAgICBpZD0icGF0aDYiIC8+Ci0gICAgPGcKLSAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjMxNzcxNSwwLDAsMC4zMTc3MTUsLTcxLjM5MzQzLC0xNTEuMjM0OCkiCi0gICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIgotICAgICAgIGlkPSJfMTk0MTAyNDgiPgotICAgPGcKLSAgIGlkPSJnOSI+Ci0gICAgPHBhdGgKLSAgIGQ9Ik0gMTEwMi40Miw5MDIuMjkzIEMgMTE2MC4zMzY1LDkwMS4zMzM5NCAxMTg2LjYyNzksOTU1LjgzNDcgMTE4Ny4wODYxLDEwMTcuNjY4IEMgMTE4Ny4wODYxLDEwNzIuMTY3NiAxMTU5LjgzNjksMTEyMy4yOTMgMTEwMS40MTk2LDExMjUuMjEgQyAxMDc3LjU4NjEsMTEyNS4yMSAxMDU3LjEyODMsMTExNy45MTc5IDEwMzcuMTcsMTEwNS43NTEzIEwgMTAzNy4xNywxMjMxLjgzNTMgTCAxMDAyLjEyNzksMTIxOS4xNjggTCAxMDAyLjYyODcsOTM5LjI5MyBDIDEwMDIuMTI3OSw5MzkuMjkzIDEwMjkuODc3OSw5MDIuNzkzNCAxMTAxLjkyMDQsOTAxLjc5MyBMIDExMDIuNDIsOTAyLjI5Mzc5IEwgMTEwMi40Miw5MDIuMjkzIHogTSAxMDkzLjYyNzksMTA5OS45MTcgQyAxMTQwLjM3ODMsMTA5Ny4wMDA5IDExNDYuMjExOCwxMDUxLjI1MDkgMTE0Ni4yMTE4LDEwMTUuMjA5NSBDIDExNDYuMjExOCw5ODAuMTY3NCAxMTQwLjM3ODMsOTI3LjU4MzUgMTA5Ni4wODcsOTI1LjY2NzggQyAxMDY1LjkyMDUsOTIzLjcwOTUzIDEwNDEuNTQ0OSw5MzcuODM0MyAxMDM2LjcxMTgsOTQyLjcwODcgTCAxMDM2LjcxMTgsMTA4MS40MTc3IEMgMTA0OC4zNzg3LDEwODguNzA5OCAxMDcxLjc1MjcsMTEwMS4zNzYgMTA5My42Mjc5LDEwOTkuOTE3MyBMIDEwOTMuNjI3OSwxMDk5LjkxNyB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzE5NDEwNTY4IiAvPgotCi0gICAgPHBhdGgKLSAgIGQ9Ik0gMTI2MSwxMDUxLjI1IEwgMTI2MSw5MDEuNzkxIEwgMTIyNC45NTg3LDkxMy45NTg3IEwgMTIyNC45NTg3LDEwNjEuOTU3NyBDIDEyMjQuOTU4NywxMTAxLjM3NDYgMTI2MS40OTk2LDExMjQuMjQ5IDEyOTMuNjI0NCwxMTI0LjI0OSBDIDEzMzUuNDU3OSwxMTI0LjI0OSAxMzU5LjMzMjcsMTExMi41ODMzIDEzNzAuMDQwNSwxMTA3LjcwNzcgQyAxMzcwLjQ5ODgsMTExMy4wNDE2IDEzNzAuMDQwNSwxMTExLjU4MjkgMTM3MC4wNDA1LDExMTYuOTU4MSBDIDEzNzAuMDQwNSwxMTMyLjU0MTYgMTM2OS41NDA5LDExNTkuMjkxMiAxMzYyLjI0ODgsMTE3Mi45MTY0IEMgMTM0Ny42MjQ0LDEyMDAuNjY2NCAxMzA4LjcwNzEsMTIwNC41NDE2IDEyODEuNDU3OSwxMjA4LjQ1ODEgTCAxMjg3LjI5MDIsMTIzMC44MzI5IEMgMTMyMy4yOTAyLDEyMjkuODc1IDEzNzMuOTE1OCwxMjE2LjI0OTggMTM5MS45MTYyLDExODIuMTY2OCBDIDE0MDIuMTY1OCwxMTYyLjcwODEgMTQwMy42MjQ1LDExMjUuMjA4MSAxNDAzLjYyNDUsMTEwMC40MTY4IEwgMTQwMy42MjQ1LDkwNy4xNjU3OSBMIDEzNjguMDgyOCw5MDcuMTY1NzkgTCAxMzY4LjA4MjgsMTA4MC45MTY4IEMgMTM1Ni40MTU5LDEwODguNzA4NSAxMzM1LjAwMDEsMTA5OS40MTY0IDEzMTUuOTk5NywxMDk5LjkxNiBDIDEyODQuMzc0NSwxMTAwLjQxNjggMTI2MS4wMDA1LDEwODMuMzc0NyAxMjYxLjAwMDUsMTA1MC43NDkxIEwgMTI2MS4wMDA1LDEwNTEuMjQ5OSBMIDEyNjEsMTA1MS4yNSB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzE5NDEyMzg0IiAvPgotCi0gICAgPHBhdGgKLSAgIGQ9Ik0gMTQ2My4yOSw5MzAuMDQzIEwgMTQ2My4yOSwxMDY5Ljc1MSBDIDE0NjMuMjksMTEwNi4yNTA2IDE0OTEuNTM5NiwxMTI3LjY2NzUgMTUzOC43NDgzLDExMjMuMjkyNyBMIDE1MzguNzQ4MywxMTA0Ljc5MzEgQyAxNTEzLjkxNDQsMTEwMy43OTI3IDE0OTguODMxOCwxMDk3LjAwMTQgMTQ5OC44MzE4LDEwNjguNzUwNiBMIDE0OTguODMxOCw5MzAuMDQzNiBMIDE1MzguNzQ4Myw5MzAuMDQzNiBMIDE1MzguNzQ4Myw5MDcuMTY4IEwgMTQ5OC44MzE4LDkwNy4xNjggTCAxNDk4LjgzMTgsODM1LjEyNjcgTCAxNDYzLjI5MDEsODQ3Ljc5MjggTCAxNDYzLjI5MDEsOTA3LjE2OCBMIDE0MzguOTU3LDkwNy4xNjggTCAxNDM4Ljk1Nyw5MzAuMDQzNiBMIDE0NjMuMjkwMSw5MzAuMDQzNiBMIDE0NjMuMjksOTMwLjA0MyB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzE5NDEzMTA0IiAvPgotCi0gICAgPHBhdGgKLSAgIGQ9Ik0gMTc1NC41LDExMjAuMzMgTCAxNzU0LjUsOTcxLjkxNCBDIDE3NTQuNSw5MzQuOTEzNiAxNzI5LjE2NjUsOTA1LjcwNjEgMTY5MS4yMDgzLDkwNS43MDYxIEMgMTY2Mi41MDA0LDkwNS43MDYxIDE2MzguMTY3NCw5MTQuOTU1MzEgMTYxNi43NTA0LDkzMC40OTc0IEwgMTYxNi43NTA0LDc4MS4wODA0IEwgMTU4MS4yMDg3LDc5Mi4yODc5IEwgMTU4MS4yMDg3LDExMjAuMzI5OSBMIDE2MTYuNzUwNCwxMTIwLjMyOTkgTCAxNjE2Ljc1MDQsOTU1LjgzMDkgQyAxNjM0Ljc1MDQsOTQzLjE2MzYgMTY1NS4yMDgzLDkzMC4wMzkyIDE2NzcuNTgzMSw5MzAuMDM5MiBDIDE3MDYuMjkyMiw5MzAuMDM5MiAxNzE4LjQ1ODcsOTU4LjI0NzUgMTcxOC40NTg3LDk4My4wODAxIEwgMTcxOC40NTg3LDExMjAuMzMwMSBMIDE3NTQuNSwxMTIwLjMzMDEgTCAxNzU0LjUsMTEyMC4zMyB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzE5NDE1MTM2IiAvPgotCi0gICAgPHBhdGgKLSAgIGQ9Ik0gMTc4Ni4yOSwxMDA5Ljg4IEMgMTc4Ni4yOSwxMDY4Ljc1NDQgMTgxNy40NTY5LDExMjQuMjU0IDE4ODMuMTY1MiwxMTI0Ljc1NSBDIDE5NDkuMzczMSwxMTI0LjI1NDIgMTk4MS40OTkxLDEwNjguNzU0MiAxOTgxLjQ5OTEsMTAwOS44OCBDIDE5ODAuOTk4Myw5NTIuNDIxNyAxOTQ0Ljk5ODMsOTAyLjI5NyAxODgzLjY2NDgsOTAxLjc5NiBDIDE4MjIuODMyMSw5MDIuMjk2NzkgMTc4Ni4yOSw5NTIuNDIxNiAxNzg2LjI5LDEwMDkuODggTCAxNzg2LjI5LDEwMDkuODggeiBNIDE4MjQuNzQ5MSwxMDA5Ljg4IEMgMTgyNC43NDkxLDk3MS40MjIxIDE4MzQuNDk3OSw5MjkuMDg3OSAxODgzLjE2NTIsOTI2LjEzMDQgQyAxOTI4LjkxNTIsOTI4LjU4ODI3IDE5NDIuNTQwNCw5NzEuNDIyMSAxOTQyLjU0MDQsMTAwOS44OCBDIDE5NDIuNTQwNCwxMDUwLjc1NDQgMTkzMy43ODk2LDExMDEuMzggMTg4NC4xMjMxLDExMDIuODM4NyBDIDE4MzguMzczMSwxMTAyLjMzNzkgMTgyNS4yNDg3LDEwNTAuNzU0NCAxODI1LjI0ODcsMTAwOS44OCBMIDE4MjQuNzQ5MSwxMDA5Ljg4IEwgMTgyNC43NDkxLDEwMDkuODggeiAiCi0gICBzdHlsZT0iZmlsbDojNmE2YTZhIgotICAgaWQ9Il8xOTQxNjEwNCIgLz4KLQotICAgIDxwYXRoCi0gICBkPSJNIDIxODQuMDQsMTEyMC4zMyBMIDIxODQuMDQsOTU3LjI4OCBDIDIxODQuMDQsOTI4LjU4MDEgMjE2MS4xNjQ0LDkxMC4wODA1IDIxMzUuMzcyNyw5MDQuMjQ3MSBDIDIxMTAuMDM5Miw4OTguNDEzNjQgMjA4Ni4yMDcsOTAzLjI0NjcxIDIwNjguNzA2Niw5MDguMTIyMyBDIDIwNDYuMjg5Myw5MTMuOTU1NzYgMjAzMC4yNDc1LDkyNC4yMDU0IDIwMTIuMjA2Miw5MzcuMzI5OCBMIDIwMTIuMjA2MiwxMTIwLjMyOTggTCAyMDQ3Ljc0NzksMTEyMC4zMjk4IEwgMjA0Ny43NDc5LDk0MS43MDU4IEMgMjA1OC45NTY2LDkzMy45MTQwNyAyMDc2Ljk1NjYsOTI1LjY2NDEgMjA5NS45NTcsOTI1LjE2MzMgQyAyMTI3LjA4MTQsOTI0LjY2MzY5IDIxNDguNDk4Myw5NDIuNzA1IDIxNDguNDk4Myw5NzUuMjg4MSBMIDIxNDguNDk4MywxMTIwLjMzMDEgTCAyMTg0LjA0LDExMjAuMzMwMSBMIDIxODQuMDQsMTEyMC4zMyB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzE5NDE2NTkyIiAvPgotCi0gICA8L2c+Ci0KLSAgPC9nPgotICAgIDxwYXRoCi0gICAgICAgZD0iTSAxNjcuNTU0NjIsMjMwLjAyMzIgQyAxNjcuNTU0NjIsMjQwLjk4NDM3IDE1OC42NTg4NSwyNDkuODgwNTEgMTQ3LjY5NzY5LDI0OS44OTM2NCBMIDEwNy45ODI5OSwyNDkuODkzNjQgQyA5Ny4wMjE4MjcsMjQ5Ljg4MDUxIDg4LjEyNjA2MSwyNDAuOTg0MzcgODguMTI2MDYxLDIzMC4wMzY3IEwgODguMTI2MDYxLDE5Mi43OTc2NSBDIDg4LjEyNjA2MSwxODEuODM2NDggOTcuMDIxODI3LDE3Mi45NDA3MSAxMDcuOTgyOTksMTcyLjk0MDcxIEwgMTQ3LjY5NzY5LDE3Mi45NDA3MSBDIDE2MS4zOTg5NiwxNzIuOTQwNzEgMTcyLjUxOTIzLDE2MS44MjA0MyAxNzIuNTE5MjMsMTQ4LjExOTE2IEwgMTcyLjUxOTIzLDEzMC43MzczOSBMIDE4Ny40MTE5MywxMzAuNzUwNTIgQyAxOTguMzczMSwxMzAuNzM3MzkgMjA3LjI2OTI1LDEzOS42NDY2NyAyMDcuMjY5MjUsMTUwLjYwNzg0IEwgMjA3LjI2OTI1LDE5MC4zMjIyIEMgMjA3LjI2OTI1LDIwMS4yNzAyNSAxOTguMzczMSwyMTAuMTc5NTIgMTg3LjQxMTkzLDIxMC4xNzk1MiBMIDEyNy44NDAzNywyMTAuMTY2MzkgTCAxMjcuODQwMzcsMjE1LjEzMDYzIEwgMTY3LjU1NDc1LDIxNS4xMzA2MyBMIDE2Ny41NTQ3NSwyMzAuMDIzMzMgTCAxNjcuNTU0NjIsMjMwLjAyMzIgeiBNIDE1MC4xNzMyMywyMzkuOTUyMDUgQyAxNDYuMDY5NDYsMjM5Ljk1MjA1IDE0Mi43MzM0NSwyMzYuNjE2MDQgMTQyLjczMzQ1LDIzMi41MTIyNyBDIDE0Mi43MzM0NSwyMjguMzk0OTcgMTQ2LjA2OTQ2LDIyNS4wNTg5NyAxNTAuMTczMjMsMjI1LjA1ODk3IEMgMTU0LjI5MDE1LDIyNS4wNTg5NyAxNTcuNjI2MTUsMjI4LjM5NDk3IDE1Ny42MjYxNSwyMzIuNTEyMjcgQyAxNTcuNjI2MTUsMjM2LjYxNjA0IDE1NC4yOTAxNSwyMzkuOTUyMDUgMTUwLjE3MzIzLDIzOS45NTIwNSB6ICIKLSAgICAgICBzdHlsZT0iZmlsbDojZDNhYTNmO2ZpbGwtcnVsZTpldmVub2RkIgotICAgICAgIGlkPSJwYXRoMTciIC8+Ci0gICAgPGcKLSAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjMxNzcxNSwwLDAsMC4zMTc3MTUsLTcxLjM5MzQzLC0xNTEuMjM0OCkiCi0gICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIgotICAgICAgIGlkPSJnMTY5OSI+Ci0gICAgICA8cG9seWdvbgotICAgICAgICAgcG9pbnRzPSIzMzUuMjIyLDYyNi4wNjkgMzM0LjI5MSw2MjAuNDkzIDMzNC4yOTEsNjE1LjUwOCAzMzguNDU4LDYxNS41MDggMzM4LjQ1OCw2MjAuNDkzIDMzNy40ODYsNjI2LjA2OSAzMzUuMjIyLDYyNi4wNjkgIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJfMTk0MTk5NDQiIC8+Ci0gICAgICA8cGF0aAotICAgICAgICAgZD0iTSAzNDEuNzk4LDYzNC41MjcgQyAzNDEuNzk4LDYzMC41Mjc3OSAzNDIuOTA5NDIsNjI3LjU2MjA0IDM0NS4xMzgxNiw2MjUuNjM5MiBDIDM0Ni45OTI0OSw2MjQuMDQxMTcgMzQ5LjI1NjY2LDYyMy4yMzU2NiAzNTEuOTI5NSw2MjMuMjM1NjYgQyAzNTQuOTAyMzMsNjIzLjIzNTY2IDM1Ny4zMzE4Niw2MjQuMjA4ODkgMzU5LjIxNDU0LDYyNi4xNjAwNyBDIDM2MS4xMDMxMiw2MjguMTA0MTYgMzYyLjA0MDkyLDYzMC43OTExNyAzNjIuMDQwOTIsNjM0LjIyMjI3IEMgMzYyLjA0MDkyLDYzNy4wMDYxMyAzNjEuNjIzOTksNjM5LjE5NDcxIDM2MC43OTAxMyw2NDAuNzg0NDcgQyAzNTkuOTU3NDUsNjQyLjM4MTMyIDM1OC43NDIxLDY0My42MTc5MyAzNTcuMTUyMzMsNjQ0LjQ5OTA0IEMgMzU1LjU1NDMsNjQ1LjM4MTMyIDM1My44MTgwOCw2NDUuODE5NTEgMzUxLjkyOTUsNjQ1LjgxOTUxIEMgMzQ4LjkwOTQyLDY0NS44MTk1MSAzNDYuNDY0NTQsNjQ0Ljg1MzM3IDM0NC41OTYwNCw2NDIuOTA5MjcgQyAzNDIuNzI4NzIsNjQwLjk3MjI2IDM0MS43OTgwMSw2MzguMTgwMTQgMzQxLjc5ODAxLDYzNC41MjY5OSBMIDM0MS43OTgsNjM0LjUyNyB6IE0gMzQ1LjU2MjE3LDYzNC41MjcgQyAzNDUuNTYyMTcsNjM3LjI5Nzg3IDM0Ni4xNjU3MSw2MzkuMzY4MzQgMzQ3LjM3Mzk4LDY0MC43NDMxNCBDIDM0OC41ODIyNSw2NDIuMTI1MDMgMzUwLjEwMzUxLDY0Mi44MTI0MyAzNTEuOTI5NDksNjQyLjgxMjQzIEMgMzUzLjc0OTU3LDY0Mi44MTI0MyAzNTUuMjYyNTYsNjQyLjExNzk0IDM1Ni40NzA4Myw2NDAuNzM2MDUgQyAzNTcuNjczMTksNjM5LjM1NDE2IDM1OC4yNzY3NCw2MzcuMjQyMzUgMzU4LjI3Njc0LDYzNC40MTAwNyBDIDM1OC4yNzY3NCw2MzEuNzM2MDUgMzU3LjY3MzIsNjI5LjcwODEgMzU2LjQ1Nzg0LDYyOC4zMzMzIEMgMzU1LjI0MjQ5LDYyNi45NTg1IDM1My43MzU0LDYyNi4yNzExIDM1MS45Mjk0OSw2MjYuMjcxMSBDIDM1MC4xMDM1MSw2MjYuMjcxMSAzNDguNTgyMjUsNjI2Ljk1ODUgMzQ3LjM3Mzk4LDYyOC4zMjYyMiBDIDM0Ni4xNjU3MSw2MjkuNjkzOTQgMzQ1LjU2MjE3LDYzMS43NjMyMyAzNDUuNTYyMTcsNjM0LjUyNzAxIEwgMzQ1LjU2MjE3LDYzNC41MjcgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGgyMSIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDM2Ni4yOTgsNjQ1LjMzMyBMIDM2Ni4yOTgsNjIzLjcyOTUgTCAzNjkuNTg5NzMsNjIzLjcyOTUgTCAzNjkuNTg5NzMsNjI2Ljk5OTk3IEMgMzcwLjQyOTQ5LDYyNS40NzI4IDM3MS4yMDc4NCw2MjQuNDU4MjQgMzcxLjkyMjQxLDYyMy45NzI4IEMgMzcyLjYzMTA3LDYyMy40ODYxOSAzNzMuNDE1MzIsNjIzLjIzNTc5IDM3NC4yNzA0NCw2MjMuMjM1NzkgQyAzNzUuNTA1ODcsNjIzLjIzNTc5IDM3Ni43NTY2Niw2MjMuNjMyNjQgMzc4LjAzMzQzLDYyNC40MTY4OSBMIDM3Ni43Njk2NSw2MjcuODE5NjUgQyAzNzUuODgxNDYsNjI3LjI4NDYxIDM3NC45ODUsNjI3LjAyMTIzIDM3NC4wODk3Myw2MjcuMDIxMjMgQyAzNzMuMjg0MjIsNjI3LjAyMTIzIDM3Mi41Njg0Nyw2MjcuMjY0NTMgMzcxLjkyOTQ5LDYyNy43NDI4OCBDIDM3MS4yOTA1MSw2MjguMjI5NSAzNzAuODM5MzMsNjI4Ljg5NTY0IDM3MC41Njg4Niw2MjkuNzQ5NTcgQyAzNzAuMTU5MDIsNjMxLjA0ODc4IDM2OS45NTgyMyw2MzIuNDcyMDEgMzY5Ljk1ODIzLDYzNC4wMjA0NCBMIDM2OS45NTgyMyw2NDUuMzMzMDQgTCAzNjYuMjk3OTksNjQ1LjMzMzA0IEwgMzY2LjI5OCw2NDUuMzMzIHogIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJwYXRoMjMiIC8+Ci0gICAgICA8cGF0aAotICAgICAgICAgZD0iTSAzODAuMjI4LDYxOS43MjIgTCAzODAuMjI4LDYxNS41MDc4MyBMIDM4My44OTQxNCw2MTUuNTA3ODMgTCAzODMuODk0MTQsNjE5LjcyMiBMIDM4MC4yMjgsNjE5LjcyMiB6IE0gMzgwLjIyOCw2NDUuMzMzIEwgMzgwLjIyOCw2MjMuNzI5NSBMIDM4My44OTQxNCw2MjMuNzI5NSBMIDM4My44OTQxNCw2NDUuMzMzIEwgMzgwLjIyOCw2NDUuMzMzIHogIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJwYXRoMjUiIC8+Ci0gICAgICA8cGF0aAotICAgICAgICAgZD0iTSAzODguNzk2LDY0Ny4xMjUgTCAzOTIuMzU4Miw2NDcuNjUyOTUgQyAzOTIuNTA0NjYsNjQ4Ljc1MDE5IDM5Mi45MjA0MSw2NDkuNTQ4NjIgMzkzLjU5NDgxLDY1MC4wNTUzMSBDIDM5NC41MDQyNiw2NTAuNzI4NTQgMzk1Ljc0Njc4LDY1MS4wNjg3IDM5Ny4zMTY0Niw2NTEuMDY4NyBDIDM5OS4wMTg0Myw2NTEuMDY4NyA0MDAuMzIzNTUsNjUwLjcyODU1IDQwMS4yNDcxNyw2NTAuMDU1MzEgQyA0MDIuMTcwNzksNjQ5LjM3NSA0MDIuNzg4NTEsNjQ4LjQyMzAzIDQwMy4xMTQ0OSw2NDcuMjA3NjcgQyA0MDMuMzA5MzcsNjQ2LjQ1NzY3IDQwMy4zOTMyMyw2NDQuODk2MjUgNDAzLjM3OTA2LDY0Mi41MDY4OCBDIDQwMS43ODIyMSw2NDQuMzg4MzggMzk5Ljc4ODUxLDY0NS4zMzMyNiAzOTcuNDAwMzIsNjQ1LjMzMzI2IEMgMzk0LjQyNzQ5LDY0NS4zMzMyNiAzOTIuMTI5MDYsNjQ0LjI2NDM2IDM5MC41MDM4Niw2NDIuMTE4MyBDIDM4OC44Nzk4NCw2MzkuOTc5MzIgMzg4LjA2MDE2LDYzNy40MDMzNCAzODguMDYwMTYsNjM0LjQxMDQzIEMgMzg4LjA2MDE2LDYzMi4zNDcwNCAzODguNDM0NTcsNjMwLjQ0NDI5IDM4OS4xNzc0OCw2MjguNzAyMTYgQyAzODkuOTI3NDgsNjI2Ljk1ODg1IDM5MS4wMTE3Myw2MjUuNjExMjIgMzkyLjQyNzg3LDYyNC42NjA0MyBDIDM5My44NDQwMSw2MjMuNzE1NTUgMzk1LjUxMDU1LDYyMy4yMzYwMiAzOTcuNDIwMzksNjIzLjIzNjAyIEMgMzk5Ljk2OTIxLDYyMy4yMzYwMiA0MDIuMDczOTMsNjI0LjI3MDY3IDQwMy43MjYzLDYyNi4zMzQwNSBMIDQwMy43MjYzLDYyMy43Mjk3MiBMIDQwNy4xMDc4LDYyMy43Mjk3MiBMIDQwNy4xMDc4LDY0Mi40MDI5MiBDIDQwNy4xMDc4LDY0NS43NjQzNCA0MDYuNzYwNTUsNjQ4LjE1MjUzIDQwNi4wODAyNCw2NDkuNTU1NjggQyA0MDUuMzkyODMsNjUwLjk1NzY1IDQwNC4zMDk3Nyw2NTIuMDY5MDcgNDAyLjgyMzk0LDY1Mi44ODE2NiBDIDQwMS4zMzY5Myw2NTMuNjk0MjYgMzk5LjUxMDk1LDY1NC4xMDQxIDM5Ny4zMzc3Miw2NTQuMTA0MSBDIDM5NC43NjA1NSw2NTQuMTA0MSAzOTIuNjc4MjcsNjUzLjUyMDY0IDM5MS4wOTQ0MSw2NTIuMzYwNzkgQyAzODkuNTA0NjUsNjUxLjIwMDk1IDM4OC43NDA0Nyw2NDkuNDU3NjQgMzg4Ljc5NTk4LDY0Ny4xMjQ5NiBMIDM4OC43OTYsNjQ3LjEyNSB6IE0gMzkxLjgyMzE3LDYzNC4xNDU5IEMgMzkxLjgyMzE3LDYzNi45NzkzNiAzOTIuMzg2NTYsNjM5LjA0ODY2IDM5My41MTgwNSw2NDAuMzQ3ODcgQyAzOTQuNjQzNjQsNjQxLjY1Mjk5IDM5Ni4wNTI3LDY0Mi4yOTkwNSAzOTcuNzQ3NTgsNjQyLjI5OTA1IEMgMzk5LjQyNzExLDY0Mi4yOTkwNSA0MDAuODM3MzQsNjQxLjY1Mjk5IDQwMS45NzU5Myw2NDAuMzYwODYgQyA0MDMuMTE0NTEsNjM5LjA2MjgzIDQwMy42ODQ5OSw2MzcuMDM0ODggNDAzLjY4NDk5LDYzNC4yNjQwMSBDIDQwMy42ODQ5OSw2MzEuNjE4MzQgNDAzLjEwMTUzLDYyOS42MjU4MiA0MDEuOTI3NTEsNjI4LjI4NTI3IEMgNDAwLjc1MzQ5LDYyNi45NDQ3MiAzOTkuMzM3MzUsNjI2LjI3MTQ5IDM5Ny42ODQ5OSw2MjYuMjcxNDkgQyAzOTYuMDU5NzksNjI2LjI3MTQ5IDM5NC42Nzc5LDYyNi45MzA1NCAzOTMuNTMyMjMsNjI4LjI1NjkyIEMgMzkyLjM5MzY1LDYyOS41NzYyMSAzOTEuODIzMTcsNjMxLjU0MTU3IDM5MS44MjMxNyw2MzQuMTQ1OSBMIDM5MS44MjMxNyw2MzQuMTQ1OSB6ICIKLSAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICAgICAgICBpZD0icGF0aDI3IiAvPgotICAgICAgPHBhdGgKLSAgICAgICAgIGQ9Ik0gNDEyLjY1Nyw2MTkuNzIyIEwgNDEyLjY1Nyw2MTUuNTA3ODMgTCA0MTYuMzIzMTQsNjE1LjUwNzgzIEwgNDE2LjMyMzE0LDYxOS43MjIgTCA0MTIuNjU3LDYxOS43MjIgeiBNIDQxMi42NTcsNjQ1LjMzMyBMIDQxMi42NTcsNjIzLjcyOTUgTCA0MTYuMzIzMTQsNjIzLjcyOTUgTCA0MTYuMzIzMTQsNjQ1LjMzMyBMIDQxMi42NTcsNjQ1LjMzMyB6ICIKLSAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICAgICAgICBpZD0icGF0aDI5IiAvPgotICAgICAgPHBhdGgKLSAgICAgICAgIGQ9Ik0gNDIxLjg5OSw2NDUuMzMzIEwgNDIxLjg5OSw2MjMuNzI5NSBMIDQyNS4xOTA3Myw2MjMuNzI5NSBMIDQyNS4xOTA3Myw2MjYuNzk5MTkgQyA0MjYuNzgxNjcsNjI0LjQyMzk5IDQyOS4wNzMwMSw2MjMuMjM1OCA0MzIuMDY1OTMsNjIzLjIzNTggQyA0MzMuMzcxMDUsNjIzLjIzNTggNDM0LjU2NTE0LDYyMy40NzIwMiA0MzUuNjU2NDgsNjIzLjkzNzM3IEMgNDM2Ljc1MzcyLDYyNC40MDk4MiA0MzcuNTY1MTQsNjI1LjAyMDQ1IDQzOC4xMDcyNyw2MjUuNzg0NjIgQyA0MzguNjU2NDgsNjI2LjU0MTcgNDM5LjAzMDg5LDYyNy40NDQwNyA0MzkuMjUyOTQsNjI4LjQ4NTggQyA0MzkuMzg1MjIsNjI5LjE2NzI5IDQzOS40NTQ5MSw2MzAuMzU0MyA0MzkuNDU0OTEsNjMyLjA0OTE5IEwgNDM5LjQ1NDkxLDY0NS4zMzMwOSBMIDQzNS43ODc1OSw2NDUuMzMzMDkgTCA0MzUuNzg3NTksNjMyLjE4NzM5IEMgNDM1Ljc4NzU5LDYzMC43MDE1NiA0MzUuNjQ5NCw2MjkuNTgzMDYgNDM1LjM2NDc1LDYyOC44NDAxNSBDIDQzNS4wODAxMSw2MjguMTA0MzIgNDM0LjU3MjIzLDYyNy41MTM3NyA0MzMuODUwNTgsNjI3LjA3Njc2IEMgNDMzLjEyMTg0LDYyNi42MzI2NiA0MzIuMjczODEsNjI2LjQwOTQzIDQzMS4yOTQ2Nyw2MjYuNDA5NDMgQyA0MjkuNzMyMDcsNjI2LjQwOTQzIDQyOC4zOTI3LDYyNi45MTAyMiA0MjcuMjUyOTQsNjI3Ljg5NjQ0IEMgNDI2LjEyMTQ0LDYyOC44ODg1NyA0MjUuNTU5MjQsNjMwLjc2NDE2IDQyNS41NTkyNCw2MzMuNTM1MDIgTCA0MjUuNTU5MjQsNjQ1LjMzMzAyIEwgNDIxLjg5OSw2NDUuMzMzMDIgTCA0MjEuODk5LDY0NS4zMzMgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGgzMSIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDQ1OS4xNyw2NDIuNjY2IEMgNDU3LjgwODE5LDY0My44MTg3NiA0NTYuNTAzMDcsNjQ0LjYzMTM1IDQ1NS4yNTM0Niw2NDUuMTEwODggQyA0NTMuOTk1NTksNjQ1LjU4MzMyIDQ1Mi42NDkxMyw2NDUuODE5NTQgNDUxLjIxMTczLDY0NS44MTk1NCBDIDQ0OC44MzY1Myw2NDUuODE5NTQgNDQ3LjAxNzY0LDY0NS4yNDMxNiA0NDUuNzM5NjgsNjQ0LjA4MzMyIEMgNDQ0LjQ2ODgxLDY0Mi45MjM0OCA0NDMuODI5ODQsNjQxLjQzNzY1IDQ0My44Mjk4NCw2MzkuNjM4ODMgQyA0NDMuODI5ODQsNjM4LjU3NTg0IDQ0NC4wNjYwNiw2MzcuNjEwODggNDQ0LjU1MTQ5LDYzNi43MzU2OCBDIDQ0NS4wMzEwMiw2MzUuODYwNDggNDQ1LjY2MjkxLDYzNS4xNjAwOSA0NDYuNDQxMjUsNjM0LjYzMjE0IEMgNDQ3LjIyNTUxLDYzNC4xMDQxOSA0NDguMTAwNyw2MzMuNzAxNDMgNDQ5LjA3OTgzLDYzMy40MzA5NiBDIDQ0OS43OTQ0LDYzMy4yNDMxNyA0NTAuODc4NjUsNjMzLjA1NTM3IDQ1Mi4zMjkwNCw2MzIuODgxNzUgQyA0NTUuMjg3Nyw2MzIuNTI3NDIgNDU3LjQ2ODAyLDYzMi4xMTA0OSA0NTguODY0MDgsNjMxLjYxNzk3IEMgNDU4Ljg3ODI2LDYzMS4xMTgzNiA0NTguODg1MzQsNjMwLjc5ODI4IDQ1OC44ODUzNCw2MzAuNjY2IEMgNDU4Ljg4NTM0LDYyOS4xNzMwOSA0NTguNTM4MSw2MjguMTE4MzYgNDU3Ljg0MzYxLDYyNy41MTM2NCBDIDQ1Ni45MTI5LDYyNi42ODA5NiA0NTUuNTE2ODQsNjI2LjI3MTEyIDQ1My42NzY2OCw2MjYuMjcxMTIgQyA0NTEuOTU0NjMsNjI2LjI3MTEyIDQ1MC42ODM3Nyw2MjYuNTY5OTQgNDQ5Ljg1Njk5LDYyNy4xNzM0OCBDIDQ0OS4wMzczMSw2MjcuNzc4MjEgNDQ4LjQzMzc2LDYyOC44NDcxIDQ0OC4wMzgwOSw2MzAuMzgxMzUgTCA0NDQuNDYxNzEsNjI5Ljg4ODgzIEMgNDQ0Ljc4NzcsNjI4LjM2MTY2IDQ0NS4zMjI3NCw2MjcuMTE3OTYgNDQ2LjA2NTY1LDYyNi4xODAxNyBDIDQ0Ni44MDg1Nyw2MjUuMjM2NDcgNDQ3Ljg5MTYzLDYyNC41MDY1NSA0NDkuMzAxODcsNjIzLjk5OTg2IEMgNDUwLjcxMDkzLDYyMy40OTMxNyA0NTIuMzQzMjEsNjIzLjIzNTY5IDQ1NC4yMDQ2Myw2MjMuMjM1NjkgQyA0NTYuMDUxODcsNjIzLjIzNTY5IDQ1Ny41NDQ3OSw2MjMuNDU4OTIgNDU4LjY5NzU0LDYyMy44ODg4NCBDIDQ1OS44NTAzLDYyNC4zMjcwMyA0NjAuNjk3MTUsNjI0Ljg2Nzk3IDQ2MS4yNDYzNiw2MjUuNTI4MjEgQyA0NjEuNzg3MzEsNjI2LjE4NzI2IDQ2Mi4xNjI5LDYyNy4wMTQwNCA0NjIuMzg0OTQsNjI4LjAyMDM0IEMgNDYyLjUwMzA1LDYyOC42NDYzMiA0NjIuNTY1NjUsNjI5Ljc3MDczIDQ2Mi41NjU2NSw2MzEuMzk1OTMgTCA0NjIuNTY1NjUsNjM2LjI3NzQzIEMgNDYyLjU2NTY1LDYzOS42ODcyNyA0NjIuNjQxMjQsNjQxLjg0MDQyIDQ2Mi44MDE4Nyw2NDIuNzM1NyBDIDQ2Mi45NTQyMyw2NDMuNjM4MDYgNDYzLjI2NzIzLDY0NC41MDYxNyA0NjMuNzI1NDksNjQ1LjMzMjk0IEwgNDU5Ljg5ODcyLDY0NS4zMzI5NCBDIDQ1OS41MjQzMiw2NDQuNTc1ODUgNDU5LjI3MzkyLDY0My42ODc2NiA0NTkuMTY5OTgsNjQyLjY2NjAxIEwgNDU5LjE3LDY0Mi42NjYgeiBNIDQ1OC44NjQwOSw2MzQuNDg1NjkgQyA0NTcuNTMwNjMsNjM1LjAzNDkgNDU1LjUzODExLDYzNS40OTMxNyA0NTIuODg1MzUsNjM1Ljg3NDY3IEMgNDUxLjM3ODI2LDYzNi4wODk2MyA0NTAuMzA4MTgsNjM2LjMzMjk0IDQ0OS42OTA0Nyw2MzYuNjAzNDEgQyA0NDkuMDY1NjcsNjM2Ljg3NTA2IDQ0OC41NzkwNSw2MzcuMjcwNzMgNDQ4LjI0NTk4LDYzNy43OTg2OSBDIDQ0Ny45MDU4Myw2MzguMzE5NTYgNDQ3LjczMjIsNjM4Ljg5NTkzIDQ0Ny43MzIyLDYzOS41MzQ5MSBDIDQ0Ny43MzIyLDY0MC41MTQwNCA0NDguMTA3OCw2NDEuMzI2NjQgNDQ4Ljg0MzYyLDY0MS45Nzg2MSBDIDQ0OS41Nzk0NSw2NDIuNjI0NjcgNDUwLjY2MjUyLDY0Mi45NTA2NiA0NTIuMDg2OTMsNjQyLjk1MDY2IEMgNDUzLjQ5NTk5LDY0Mi45NTA2NiA0NTQuNzUyNjgsNjQyLjY0NTkzIDQ1NS44NDk5Miw2NDIuMDI3MDQgQyA0NTYuOTQ3MTYsNjQxLjQwOTMyIDQ1Ny43NTk3Niw2NDAuNTYyNDcgNDU4LjI3MzU0LDYzOS40OTIzOSBDIDQ1OC42NjkyMSw2MzguNjY2NzkgNDU4Ljg2NDEsNjM3LjQ0NDM1IDQ1OC44NjQxLDYzNS44MzMzMyBMIDQ1OC44NjQxLDYzNC40ODU2OSBMIDQ1OC44NjQwOSw2MzQuNDg1NjkgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGgzMyIgLz4KLSAgICAgIDxwb2x5Z29uCi0gICAgICAgICBwb2ludHM9IjQ2OC4xNjMsNjQ1LjMzMyA0NjguMTYzLDYxNS41MDggNDcxLjgyMiw2MTUuNTA4IDQ3MS44MjIsNjQ1LjMzMyA0NjguMTYzLDY0NS4zMzMgIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJwb2x5Z29uMzUiIC8+Ci0gICAgICA8cG9seWdvbgotICAgICAgICAgcG9pbnRzPSI0NzcuNTE2LDYyNi4wNjkgNDc2LjU4NSw2MjAuNDkzIDQ3Ni41ODUsNjE1LjUwOCA0ODAuNzUyLDYxNS41MDggNDgwLjc1Miw2MjAuNDkzIDQ3OS43OCw2MjYuMDY5IDQ3Ny41MTYsNjI2LjA2OSAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBvbHlnb24zNyIgLz4KLSAgICAgIDxwb2x5Z29uCi0gICAgICAgICBwb2ludHM9IjQ5Ni45NTQsNjQ1LjMzMyA0OTYuOTU0LDYxNS41MDggNTAwLjYxMyw2MTUuNTA4IDUwMC42MTMsNjQ1LjMzMyA0OTYuOTU0LDY0NS4zMzMgIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJwb2x5Z29uMzkiIC8+Ci0gICAgICA8cGF0aAotICAgICAgICAgZD0iTSA1MDQuOTI1LDYzNC41MjcgQyA1MDQuOTI1LDYzMC41Mjc3OSA1MDYuMDM2NDIsNjI3LjU2MjA0IDUwOC4yNjUxNiw2MjUuNjM5MiBDIDUxMC4xMTk0OSw2MjQuMDQxMTcgNTEyLjM4MzY2LDYyMy4yMzU2NiA1MTUuMDU2NSw2MjMuMjM1NjYgQyA1MTguMDI5MzMsNjIzLjIzNTY2IDUyMC40NTg4Niw2MjQuMjA4ODkgNTIyLjM0MTU0LDYyNi4xNjAwNyBDIDUyNC4yMzAxMiw2MjguMTA0MTYgNTI1LjE2NzkyLDYzMC43OTExNyA1MjUuMTY3OTIsNjM0LjIyMjI3IEMgNTI1LjE2NzkyLDYzNy4wMDYxMyA1MjQuNzUwOTksNjM5LjE5NDcxIDUyMy45MTcxMyw2NDAuNzg0NDcgQyA1MjMuMDg0NDUsNjQyLjM4MTMyIDUyMS44NjkxLDY0My42MTc5MyA1MjAuMjc5MzMsNjQ0LjQ5OTA0IEMgNTE4LjY4MTMsNjQ1LjM4MTMyIDUxNi45NDUwOCw2NDUuODE5NTEgNTE1LjA1NjUsNjQ1LjgxOTUxIEMgNTEyLjAzNjQyLDY0NS44MTk1MSA1MDkuNTkxNTQsNjQ0Ljg1MzM3IDUwNy43MjMwNCw2NDIuOTA5MjcgQyA1MDUuODU1NzIsNjQwLjk3MjI2IDUwNC45MjUwMSw2MzguMTgwMTQgNTA0LjkyNTAxLDYzNC41MjY5OSBMIDUwNC45MjUsNjM0LjUyNyB6IE0gNTA4LjY4OTE3LDYzNC41MjcgQyA1MDguNjg5MTcsNjM3LjI5Nzg3IDUwOS4yOTI3MSw2MzkuMzY4MzQgNTEwLjUwMDk4LDY0MC43NDMxNCBDIDUxMS43MDkyNSw2NDIuMTI1MDMgNTEzLjIzMDUxLDY0Mi44MTI0MyA1MTUuMDU2NDksNjQyLjgxMjQzIEMgNTE2Ljg3NjU3LDY0Mi44MTI0MyA1MTguMzg5NTYsNjQyLjExNzk0IDUxOS41OTc4Myw2NDAuNzM2MDUgQyA1MjAuODAwMTksNjM5LjM1NDE2IDUyMS40MDM3NCw2MzcuMjQyMzUgNTIxLjQwMzc0LDYzNC40MTAwNyBDIDUyMS40MDM3NCw2MzEuNzM2MDUgNTIwLjgwMDIsNjI5LjcwODEgNTE5LjU4NDg0LDYyOC4zMzMzIEMgNTE4LjM2OTQ5LDYyNi45NTg1IDUxNi44NjI0LDYyNi4yNzExIDUxNS4wNTY0OSw2MjYuMjcxMSBDIDUxMy4yMzA1MSw2MjYuMjcxMSA1MTEuNzA5MjUsNjI2Ljk1ODUgNTEwLjUwMDk4LDYyOC4zMjYyMiBDIDUwOS4yOTI3MSw2MjkuNjkzOTQgNTA4LjY4OTE3LDYzMS43NjMyMyA1MDguNjg5MTcsNjM0LjUyNzAxIEwgNTA4LjY4OTE3LDYzNC41MjcgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGg0MSIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDUyOC43OTMsNjQ3LjEyNSBMIDUzMi4zNTUyLDY0Ny42NTI5NSBDIDUzMi41MDE2Niw2NDguNzUwMTkgNTMyLjkxNzQsNjQ5LjU0ODYyIDUzMy41OTE4MSw2NTAuMDU1MzEgQyA1MzQuNTAxMjYsNjUwLjcyODU0IDUzNS43NDM3OCw2NTEuMDY4NyA1MzcuMzEzNDYsNjUxLjA2ODcgQyA1MzkuMDE1NDMsNjUxLjA2ODcgNTQwLjMyMDU1LDY1MC43Mjg1NSA1NDEuMjQ0MTcsNjUwLjA1NTMxIEMgNTQyLjE2Nzc5LDY0OS4zNzUgNTQyLjc4NTUxLDY0OC40MjMwMyA1NDMuMTExNDksNjQ3LjIwNzY3IEMgNTQzLjMwNjM3LDY0Ni40NTc2NyA1NDMuMzkwMjMsNjQ0Ljg5NjI1IDU0My4zNzYwNiw2NDIuNTA2ODggQyA1NDEuNzc5MjEsNjQ0LjM4ODM4IDUzOS43ODU1MSw2NDUuMzMzMjYgNTM3LjM5NzMyLDY0NS4zMzMyNiBDIDUzNC40MjQ0OSw2NDUuMzMzMjYgNTMyLjEyNjA2LDY0NC4yNjQzNiA1MzAuNTAwODYsNjQyLjExODMgQyA1MjguODc2ODQsNjM5Ljk3OTMyIDUyOC4wNTcxNiw2MzcuNDAzMzQgNTI4LjA1NzE2LDYzNC40MTA0MyBDIDUyOC4wNTcxNiw2MzIuMzQ3MDQgNTI4LjQzMTU3LDYzMC40NDQyOSA1MjkuMTc0NDgsNjI4LjcwMjE2IEMgNTI5LjkyNDQ4LDYyNi45NTg4NSA1MzEuMDA4NzMsNjI1LjYxMTIyIDUzMi40MjQ4Nyw2MjQuNjYwNDMgQyA1MzMuODQxMDEsNjIzLjcxNTU1IDUzNS41MDc1NSw2MjMuMjM2MDIgNTM3LjQxNzM5LDYyMy4yMzYwMiBDIDUzOS45NjYyMSw2MjMuMjM2MDIgNTQyLjA3MDkzLDYyNC4yNzA2NyA1NDMuNzIzMyw2MjYuMzM0MDUgTCA1NDMuNzIzMyw2MjMuNzI5NzIgTCA1NDcuMTA0OCw2MjMuNzI5NzIgTCA1NDcuMTA0OCw2NDIuNDAyOTIgQyA1NDcuMTA0OCw2NDUuNzY0MzQgNTQ2Ljc1NzU1LDY0OC4xNTI1MyA1NDYuMDc3MjQsNjQ5LjU1NTY4IEMgNTQ1LjM4OTgzLDY1MC45NTc2NSA1NDQuMzA2NzcsNjUyLjA2OTA3IDU0Mi44MjA5NCw2NTIuODgxNjYgQyA1NDEuMzMzOTMsNjUzLjY5NDI2IDUzOS41MDc5NSw2NTQuMTA0MSA1MzcuMzM0NzIsNjU0LjEwNDEgQyA1MzQuNzU3NTUsNjU0LjEwNDEgNTMyLjY3NTI3LDY1My41MjA2NCA1MzEuMDkxNDEsNjUyLjM2MDc5IEMgNTI5LjUwMTY1LDY1MS4yMDA5NSA1MjguNzM3NDcsNjQ5LjQ1NzY0IDUyOC43OTI5OCw2NDcuMTI0OTYgTCA1MjguNzkzLDY0Ny4xMjUgeiBNIDUzMS44MjAxNyw2MzQuMTQ1OSBDIDUzMS44MjAxNyw2MzYuOTc5MzYgNTMyLjM4MzU2LDYzOS4wNDg2NiA1MzMuNTE1MDUsNjQwLjM0Nzg3IEMgNTM0LjY0MDY0LDY0MS42NTI5OSA1MzYuMDQ5Nyw2NDIuMjk5MDUgNTM3Ljc0NDU4LDY0Mi4yOTkwNSBDIDUzOS40MjQxMSw2NDIuMjk5MDUgNTQwLjgzNDM0LDY0MS42NTI5OSA1NDEuOTcyOTMsNjQwLjM2MDg2IEMgNTQzLjExMTUxLDYzOS4wNjI4MyA1NDMuNjgxOTksNjM3LjAzNDg4IDU0My42ODE5OSw2MzQuMjY0MDEgQyA1NDMuNjgxOTksNjMxLjYxODM0IDU0My4wOTg1Miw2MjkuNjI1ODIgNTQxLjkyNDUxLDYyOC4yODUyNyBDIDU0MC43NTA0OSw2MjYuOTQ0NzIgNTM5LjMzNDM1LDYyNi4yNzE0OSA1MzcuNjgxOTksNjI2LjI3MTQ5IEMgNTM2LjA1Njc5LDYyNi4yNzE0OSA1MzQuNjc0OSw2MjYuOTMwNTQgNTMzLjUyOTIzLDYyOC4yNTY5MiBDIDUzMi4zOTA2NSw2MjkuNTc2MjEgNTMxLjgyMDE3LDYzMS41NDE1NyA1MzEuODIwMTcsNjM0LjE0NTkgTCA1MzEuODIwMTcsNjM0LjE0NTkgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGg0MyIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDU1MS4yNzEsNjM0LjUyNyBDIDU1MS4yNzEsNjMwLjUyNzc5IDU1Mi4zODI0Miw2MjcuNTYyMDQgNTU0LjYxMTE2LDYyNS42MzkyIEMgNTU2LjQ2NTQ5LDYyNC4wNDExNyA1NTguNzI5NjYsNjIzLjIzNTY2IDU2MS40MDI1LDYyMy4yMzU2NiBDIDU2NC4zNzUzMyw2MjMuMjM1NjYgNTY2LjgwNDg2LDYyNC4yMDg4OSA1NjguNjg3NTQsNjI2LjE2MDA3IEMgNTcwLjU3NjEyLDYyOC4xMDQxNiA1NzEuNTEzOTIsNjMwLjc5MTE3IDU3MS41MTM5Miw2MzQuMjIyMjcgQyA1NzEuNTEzOTIsNjM3LjAwNjEzIDU3MS4wOTY5OSw2MzkuMTk0NzEgNTcwLjI2MzEzLDY0MC43ODQ0NyBDIDU2OS40MzA0NSw2NDIuMzgxMzIgNTY4LjIxNTEsNjQzLjYxNzkzIDU2Ni42MjUzMyw2NDQuNDk5MDQgQyA1NjUuMDI3Myw2NDUuMzgxMzIgNTYzLjI5MTA4LDY0NS44MTk1MSA1NjEuNDAyNSw2NDUuODE5NTEgQyA1NTguMzgyNDIsNjQ1LjgxOTUxIDU1NS45Mzc1NCw2NDQuODUzMzcgNTU0LjA2OTA0LDY0Mi45MDkyNyBDIDU1Mi4yMDE3Miw2NDAuOTcyMjYgNTUxLjI3MTAxLDYzOC4xODAxNCA1NTEuMjcxMDEsNjM0LjUyNjk5IEwgNTUxLjI3MSw2MzQuNTI3IHogTSA1NTUuMDM1MTcsNjM0LjUyNyBDIDU1NS4wMzUxNyw2MzcuMjk3ODcgNTU1LjYzODcxLDYzOS4zNjgzNCA1NTYuODQ2OTgsNjQwLjc0MzE0IEMgNTU4LjA1NTI1LDY0Mi4xMjUwMyA1NTkuNTc2NTEsNjQyLjgxMjQzIDU2MS40MDI0OSw2NDIuODEyNDMgQyA1NjMuMjIyNTcsNjQyLjgxMjQzIDU2NC43MzU1Niw2NDIuMTE3OTQgNTY1Ljk0MzgzLDY0MC43MzYwNSBDIDU2Ny4xNDYxOSw2MzkuMzU0MTYgNTY3Ljc0OTc0LDYzNy4yNDIzNSA1NjcuNzQ5NzQsNjM0LjQxMDA3IEMgNTY3Ljc0OTc0LDYzMS43MzYwNSA1NjcuMTQ2Miw2MjkuNzA4MSA1NjUuOTMwODQsNjI4LjMzMzMgQyA1NjQuNzE1NDksNjI2Ljk1ODUgNTYzLjIwODQsNjI2LjI3MTEgNTYxLjQwMjQ5LDYyNi4yNzExIEMgNTU5LjU3NjUxLDYyNi4yNzExIDU1OC4wNTUyNSw2MjYuOTU4NSA1NTYuODQ2OTgsNjI4LjMyNjIyIEMgNTU1LjYzODcxLDYyOS42OTM5NCA1NTUuMDM1MTcsNjMxLjc2MzIzIDU1NS4wMzUxNyw2MzQuNTI3MDEgTCA1NTUuMDM1MTcsNjM0LjUyNyB6ICIKLSAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICAgICAgICBpZD0icGF0aDQ1IiAvPgotICAgICAgPHBhdGgKLSAgICAgICAgIGQ9Ik0gNTg4LjI1Niw2NDUuMzMzIEwgNTg4LjI1Niw2MjYuNTc1OSBMIDU4NS4wMjY4Nyw2MjYuNTc1OSBMIDU4NS4wMjY4Nyw2MjMuNzI5NDQgTCA1ODguMjU2LDYyMy43Mjk0NCBMIDU4OC4yNTYsNjIxLjQzMTAxIEMgNTg4LjI1Niw2MTkuOTc5NDQgNTg4LjM4ODI4LDYxOC44OTYzNiA1ODguNjQ0NTgsNjE4LjE5NDc5IEMgNTg4Ljk5ODkxLDYxNy4yNDI4MiA1ODkuNjE3ODEsNjE2LjQ3Mjc0IDU5MC41MDYsNjE1Ljg4MjE5IEMgNTkxLjM5NTM3LDYxNS4yOTE2NCA1OTIuNjM3ODksNjE0Ljk5OTkxIDU5NC4yNDE4Myw2MTQuOTk5OTEgQyA1OTUuMjcwNTcsNjE0Ljk5OTkxIDU5Ni40MDkxNSw2MTUuMTE4MDIgNTk3LjY1ODc2LDYxNS4zNjg0MSBMIDU5Ny4xMTA3Myw2MTguNTYzMjkgQyA1OTYuMzUzNjQsNjE4LjQyMzkyIDU5NS42MzA4MSw2MTguMzU0MjQgNTk0Ljk1MDQ5LDYxOC4zNTQyNCBDIDU5My44MzkwNyw2MTguMzU0MjQgNTkzLjA1NDgyLDYxOC41OTA0NiA1OTIuNTk2NTUsNjE5LjA2OTk4IEMgNTkyLjEzMTIsNjE5LjU0MjQyIDU5MS45MDIwNiw2MjAuNDMwNjEgNTkxLjkwMjA2LDYyMS43MzU3MyBMIDU5MS45MDIwNiw2MjMuNzI5NDMgTCA1OTYuMTEwMzMsNjIzLjcyOTQzIEwgNTk2LjExMDMzLDYyNi41NzU4OSBMIDU5MS45MDIwNiw2MjYuNTc1ODkgTCA1OTEuOTAyMDYsNjQ1LjMzMjk5IEwgNTg4LjI1Niw2NDUuMzMyOTkgTCA1ODguMjU2LDY0NS4zMzMgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGg0NyIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDU5OC45MjMsNjQ1LjMzMyBMIDU5OC45MjMsNjIzLjcyOTUgTCA2MDIuMjE0NzMsNjIzLjcyOTUgTCA2MDIuMjE0NzMsNjI2Ljk5OTk3IEMgNjAzLjA1NDQ5LDYyNS40NzI4IDYwMy44MzI4NCw2MjQuNDU4MjQgNjA0LjU0NzQxLDYyMy45NzI4IEMgNjA1LjI1NjA3LDYyMy40ODYxOSA2MDYuMDQwMzIsNjIzLjIzNTc5IDYwNi44OTU0NCw2MjMuMjM1NzkgQyA2MDguMTMwODcsNjIzLjIzNTc5IDYwOS4zODE2Niw2MjMuNjMyNjQgNjEwLjY1ODQzLDYyNC40MTY4OSBMIDYwOS4zOTQ2NSw2MjcuODE5NjUgQyA2MDguNTA2NDYsNjI3LjI4NDYxIDYwNy42MSw2MjcuMDIxMjMgNjA2LjcxNDczLDYyNy4wMjEyMyBDIDYwNS45MDkyMiw2MjcuMDIxMjMgNjA1LjE5MzQ3LDYyNy4yNjQ1MyA2MDQuNTU0NDksNjI3Ljc0Mjg4IEMgNjAzLjkxNTUxLDYyOC4yMjk1IDYwMy40NjQzMyw2MjguODk1NjQgNjAzLjE5Mzg2LDYyOS43NDk1NyBDIDYwMi43ODQwMiw2MzEuMDQ4NzggNjAyLjU4MzIzLDYzMi40NzIwMSA2MDIuNTgzMjMsNjM0LjAyMDQ0IEwgNjAyLjU4MzIzLDY0NS4zMzMwNCBMIDU5OC45MjI5OSw2NDUuMzMzMDQgTCA1OTguOTIzLDY0NS4zMzMgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGg0OSIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDYxMS40NzEsNjM0LjUyNyBDIDYxMS40NzEsNjMwLjUyNzc5IDYxMi41ODI0Miw2MjcuNTYyMDQgNjE0LjgxMTE2LDYyNS42MzkyIEMgNjE2LjY2NTQ5LDYyNC4wNDExNyA2MTguOTI5NjYsNjIzLjIzNTY2IDYyMS42MDI1LDYyMy4yMzU2NiBDIDYyNC41NzUzMyw2MjMuMjM1NjYgNjI3LjAwNDg2LDYyNC4yMDg4OSA2MjguODg3NTQsNjI2LjE2MDA3IEMgNjMwLjc3NjEyLDYyOC4xMDQxNiA2MzEuNzEzOTIsNjMwLjc5MTE3IDYzMS43MTM5Miw2MzQuMjIyMjcgQyA2MzEuNzEzOTIsNjM3LjAwNjEzIDYzMS4yOTY5OSw2MzkuMTk0NzEgNjMwLjQ2MzEzLDY0MC43ODQ0NyBDIDYyOS42MzA0NSw2NDIuMzgxMzIgNjI4LjQxNTEsNjQzLjYxNzkzIDYyNi44MjUzMyw2NDQuNDk5MDQgQyA2MjUuMjI3Myw2NDUuMzgxMzIgNjIzLjQ5MTA4LDY0NS44MTk1MSA2MjEuNjAyNSw2NDUuODE5NTEgQyA2MTguNTgyNDIsNjQ1LjgxOTUxIDYxNi4xMzc1NCw2NDQuODUzMzcgNjE0LjI2OTA0LDY0Mi45MDkyNyBDIDYxMi40MDE3Miw2NDAuOTcyMjYgNjExLjQ3MTAxLDYzOC4xODAxNCA2MTEuNDcxMDEsNjM0LjUyNjk5IEwgNjExLjQ3MSw2MzQuNTI3IHogTSA2MTUuMjM1MTcsNjM0LjUyNyBDIDYxNS4yMzUxNyw2MzcuMjk3ODcgNjE1LjgzODcxLDYzOS4zNjgzNCA2MTcuMDQ2OTgsNjQwLjc0MzE0IEMgNjE4LjI1NTI1LDY0Mi4xMjUwMyA2MTkuNzc2NTEsNjQyLjgxMjQzIDYyMS42MDI0OSw2NDIuODEyNDMgQyA2MjMuNDIyNTcsNjQyLjgxMjQzIDYyNC45MzU1Niw2NDIuMTE3OTQgNjI2LjE0MzgzLDY0MC43MzYwNSBDIDYyNy4zNDYxOSw2MzkuMzU0MTYgNjI3Ljk0OTc0LDYzNy4yNDIzNSA2MjcuOTQ5NzQsNjM0LjQxMDA3IEMgNjI3Ljk0OTc0LDYzMS43MzYwNSA2MjcuMzQ2Miw2MjkuNzA4MSA2MjYuMTMwODQsNjI4LjMzMzMgQyA2MjQuOTE1NDksNjI2Ljk1ODUgNjIzLjQwODQsNjI2LjI3MTEgNjIxLjYwMjQ5LDYyNi4yNzExIEMgNjE5Ljc3NjUxLDYyNi4yNzExIDYxOC4yNTUyNSw2MjYuOTU4NSA2MTcuMDQ2OTgsNjI4LjMyNjIyIEMgNjE1LjgzODcxLDYyOS42OTM5NCA2MTUuMjM1MTcsNjMxLjc2MzIzIDYxNS4yMzUxNyw2MzQuNTI3MDEgTCA2MTUuMjM1MTcsNjM0LjUyNyB6ICIKLSAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICAgICAgICBpZD0icGF0aDUxIiAvPgotICAgICAgPHBhdGgKLSAgICAgICAgIGQ9Ik0gNjM2LjAxMiw2NDUuMzMzIEwgNjM2LjAxMiw2MjMuNzI5NSBMIDYzOS4yODM2NSw2MjMuNzI5NSBMIDYzOS4yODM2NSw2MjYuNzU2NjcgQyA2MzkuOTYzOTYsNjI1LjcwMTk1IDY0MC44NjYzMyw2MjQuODQ2ODMgNjQxLjk5MTkyLDYyNC4yMDkwMyBDIDY0My4xMTYzMyw2MjMuNTYyOTcgNjQ0LjQwMTM3LDYyMy4yMzU4IDY0NS44Mzg3Nyw2MjMuMjM1OCBDIDY0Ny40MzU2Miw2MjMuMjM1OCA2NDguNzQ3ODMsNjIzLjU3MDA1IDY0OS43Njk0OCw2MjQuMjM2MTkgQyA2NTAuNzk3MDQsNjI0LjkwMzUxIDY1MS41MTg2OSw2MjUuODI1OTUgNjUxLjkzNTYyLDYyNy4wMjEyMyBDIDY1My42NTA1OCw2MjQuNTAwNzYgNjU1Ljg3MzQyLDYyMy4yMzU4IDY1OC42MDg4NSw2MjMuMjM1OCBDIDY2MC43NTQ5MSw2MjMuMjM1OCA2NjIuNDAwMTksNjIzLjgzMzQ0IDY2My41NTI5NCw2MjUuMDIwNDUgQyA2NjQuNzA1Nyw2MjYuMjA4NjQgNjY1LjI4MjA3LDYyOC4wMzQ2MiA2NjUuMjgyMDcsNjMwLjQ5OTU4IEwgNjY1LjI4MjA3LDY0NS4zMzMwOCBMIDY2MS42NDQyNyw2NDUuMzMzMDggTCA2NjEuNjQ0MjcsNjMxLjcyMjA4IEMgNjYxLjY0NDI3LDYzMC4yNTc1MSA2NjEuNTI2MTYsNjI5LjIwMTYxIDY2MS4yODk5NCw2MjguNTU1NTQgQyA2NjEuMDQ2NjMsNjI3LjkxNjU3IDY2MC42MTU1Myw2MjcuMzk1NyA2NTkuOTk3ODEsNjI3LjAwMDAzIEMgNjU5LjM3MzAxLDYyNi42MTE0NSA2NTguNjM3MTgsNjI2LjQwOTQ4IDY1Ny43OTYyNCw2MjYuNDA5NDggQyA2NTYuMjc2MTYsNjI2LjQwOTQ4IDY1NS4wMTgyOSw2MjYuOTE3MzUgNjU0LjAxMTk5LDYyNy45MzA3NCBDIDY1My4wMTE2LDYyOC45MzgyMiA2NTIuNTA0OSw2MzAuNTU1MTUgNjUyLjUwNDksNjMyLjc3Nzk4IEwgNjUyLjUwNDksNjQ1LjMzMzA4IEwgNjQ4Ljg0NTg0LDY0NS4zMzMwOCBMIDY0OC44NDU4NCw2MzEuMjk5MTggQyA2NDguODQ1ODQsNjI5LjY2NjkgNjQ4LjU0NzAyLDYyOC40NDQ0NiA2NDcuOTQ5MzgsNjI3LjYzMTg2IEMgNjQ3LjM1MjkzLDYyNi44MTkyNiA2NDYuMzc5NjksNjI2LjQwOTQyIDY0NS4wMTkwNyw2MjYuNDA5NDIgQyA2NDMuOTkxNTEsNjI2LjQwOTQyIDY0My4wMzk1NCw2MjYuNjgxMDcgNjQyLjE2NTUzLDYyNy4yMjkxMSBDIDY0MS4yOTAzNCw2MjcuNzcxMjMgNjQwLjY1MTM2LDYyOC41NjI1NyA2NDAuMjYyNzcsNjI5LjYwNDMxIEMgNjM5Ljg2NTkyLDYzMC42NTMxMyA2MzkuNjcyMjIsNjMyLjE2MDIyIDYzOS42NzIyMiw2MzQuMTI0MzkgTCA2MzkuNjcyMjIsNjQ1LjMzMzA5IEwgNjM2LjAxMTk4LDY0NS4zMzMwOSBMIDYzNi4wMTIsNjQ1LjMzMyB6ICIKLSAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICAgICAgICBpZD0icGF0aDUzIiAvPgotICAgICAgPHBhdGgKLSAgICAgICAgIGQ9Ik0gNjg1LjY3MSw2NDUuMzMzIEwgNjgyLjI3NTMzLDY0NS4zMzMgTCA2ODIuMjc1MzMsNjE1LjUwNzggTCA2ODUuOTM0MzksNjE1LjUwNzggTCA2ODUuOTM0MzksNjI2LjE0NiBDIDY4Ny40ODI4Miw2MjQuMjA4OTkgNjg5LjQ1NTI2LDYyMy4yMzU3NiA2OTEuODUwNTMsNjIzLjIzNTc2IEMgNjkzLjE4Mzk5LDYyMy4yMzU3NiA2OTQuNDQxODcsNjIzLjUwNzQxIDY5NS42Mjg4OCw2MjQuMDQxMjcgQyA2OTYuODE1ODksNjI0LjU3NjMxIDY5Ny43ODc5NCw2MjUuMzMzNCA2OTguNTU5MTksNjI2LjI5ODM2IEMgNjk5LjMyMzM2LDYyNy4yNzA0MSA2OTkuOTI2OTEsNjI4LjQzNzM0IDcwMC4zNTgwMSw2MjkuODEyMTQgQyA3MDAuNzk1MDIsNjMxLjE4MTA0IDcwMS4wMTExNiw2MzIuNjQ1NiA3MDEuMDExMTYsNjM0LjIwMTEyIEMgNzAxLjAxMTE2LDYzNy45MDk3OCA3MDAuMDkzNDQsNjQwLjc3MDQxIDY5OC4yNjAzNyw2NDIuNzkxMjggQyA2OTYuNDM0MzksNjQ0LjgxMjE1IDY5NC4yMzI4MSw2NDUuODE5NjMgNjkxLjY3MSw2NDUuODE5NjMgQyA2ODkuMTIyMTgsNjQ1LjgxOTYzIDY4Ny4xMjI1Nyw2NDQuNzU2NjQgNjg1LjY3MSw2NDIuNjI0NzUgTCA2ODUuNjcxLDY0NS4zMzMwMiBMIDY4NS42NzEsNjQ1LjMzMyB6IE0gNjg1LjYyODQ4LDYzNC4zNjc2IEMgNjg1LjYyODQ4LDYzNi45NTc3NiA2ODUuOTgyODEsNjM4LjgyNjI2IDY4Ni42ODQzOSw2MzkuOTc5MDIgQyA2ODcuODM3MTUsNjQxLjg2NzYgNjg5LjM5OTc0LDY0Mi44MTI0OCA2OTEuMzY1MSw2NDIuODEyNDggQyA2OTIuOTY5MDQsNjQyLjgxMjQ4IDY5NC4zNTA5Myw2NDIuMTE3OTkgNjk1LjUxNzg2LDY0MC43MjE5MyBDIDY5Ni42ODQ3OSw2MzkuMzMyOTUgNjk3LjI2NzA3LDYzNy4yNjM2NiA2OTcuMjY3MDcsNjM0LjUwNjk3IEMgNjk3LjI2NzA3LDYzMS42ODc2OCA2OTYuNzA0ODcsNjI5LjYwNDIxIDY5NS41ODc1NCw2MjguMjYzNjYgQyA2OTQuNDY5MDQsNjI2LjkyMzExIDY5My4xMTU0OSw2MjYuMjQ5ODggNjkxLjUzMTYzLDYyNi4yNDk4OCBDIDY4OS45Mjc2OSw2MjYuMjQ5ODggNjg4LjU0NTgsNjI2Ljk0NDM3IDY4Ny4zNzg4Nyw2MjguMzMzMzQgQyA2ODYuMjExOTQsNjI5LjcyMjMyIDY4NS42Mjg0OCw2MzEuNzM2MSA2ODUuNjI4NDgsNjM0LjM2NzU5IEwgNjg1LjYyODQ4LDYzNC4zNjc2IHogIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJwYXRoNTUiIC8+Ci0gICAgICA8cGF0aAotICAgICAgICAgZD0iTSA3MjAuMjU0LDYzOC4zNzUgTCA3MjQuMDM4MjUsNjM4Ljg0MDM1IEMgNzIzLjQ0MDYxLDY0MS4wNTQ5MiA3MjIuMzM3NDYsNjQyLjc2OTg4IDcyMC43MjY0NCw2NDMuOTkyMzIgQyA3MTkuMTA4MzMsNjQ1LjIwNzY3IDcxNy4wNDQ5NCw2NDUuODE5NDkgNzE0LjUzODY0LDY0NS44MTk0OSBDIDcxMS4zNzkxOSw2NDUuODE5NDkgNzA4Ljg3MTcxLDY0NC44NDYyNyA3MDcuMDI0NDcsNjQyLjkwMjE3IEMgNzA1LjE3MDE0LDY0MC45NTgwOCA3MDQuMjQ2NTIsNjM4LjIyODU1IDcwNC4yNDY1Miw2MzQuNzE0NzcgQyA3MDQuMjQ2NTIsNjMxLjA3NTc5IDcwNS4xODQzMSw2MjguMjU2NSA3MDcuMDUyODIsNjI2LjI0OTgxIEMgNzA4LjkyNzIzLDYyNC4yNDMxMiA3MTEuMzUwODUsNjIzLjIzNTY0IDcxNC4zMzY2OCw2MjMuMjM1NjQgQyA3MTcuMjI1NjYsNjIzLjIzNTY0IDcxOS41ODY2OCw2MjQuMjIxODYgNzIxLjQxMzg1LDYyNi4xODcyMSBDIDcyMy4yNDY5Miw2MjguMTUyNTYgNzI0LjE2MzQ2LDYzMC45MjM0MyA3MjQuMTYzNDYsNjM0LjQ4NTY0IEMgNzI0LjE2MzQ2LDYzNC43MDc2OSA3MjQuMTU2MzcsNjM1LjAzNDg2IDcyNC4xNDIyLDYzNS40NjQ3OCBMIDcwOC4wMzIsNjM1LjQ2NDc4IEMgNzA4LjE2NDI4LDYzNy44Mzk5OCA3MDguODM3NTEsNjM5LjY1ODg3IDcxMC4wNDU3OCw2NDAuOTE2NzUgQyA3MTEuMjU0MDUsNjQyLjE4MDUzIDcxMi43NTQwNSw2NDIuODEyNDIgNzE0LjU1OTk1LDY0Mi44MTI0MiBDIDcxNS44OTkzMiw2NDIuODEyNDIgNzE3LjA0NDk5LDY0Mi40NTgwOSA3MTcuOTk2OTYsNjQxLjc0OTQzIEMgNzE4Ljk0Nzc1LDY0MS4wNDc4NSA3MTkuNjk3NzUsNjM5LjkyMzQ1IDcyMC4yNTQwNSw2MzguMzc1MDIgTCA3MjAuMjU0LDYzOC4zNzUgeiBNIDcwOC4yMzI3LDYzMi40NTE3NyBMIDcyMC4yOTUzLDYzMi40NTE3NyBDIDcyMC4xMzU4NSw2MzAuNjM4NzggNzE5LjY3MDUsNjI5LjI3MTA2IDcxOC45MTM0MSw2MjguMzY3NTIgQyA3MTcuNzQ2NDgsNjI2Ljk1ODQ2IDcxNi4yMzM0OSw2MjYuMjQ5OCA3MTQuMzc5MTYsNjI2LjI0OTggQyA3MTIuNjk4NDUsNjI2LjI0OTggNzExLjI4MTEzLDYyNi44MTIwMSA3MTAuMTM1NDYsNjI3LjkzNzYgQyA3MDguOTg5NzksNjI5LjA2MjAxIDcwOC4zNTc5LDYzMC41NjkxIDcwOC4yMzI3LDYzMi40NTE3NyBMIDcwOC4yMzI3LDYzMi40NTE3NyB6ICIKLSAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICAgICAgICBpZD0icGF0aDU3IiAvPgotICAgICAgPHBhdGgKLSAgICAgICAgIGQ9Ik0gNzM2LjYzNiw2NDIuMDU2IEwgNzM3LjE2Mjc3LDY0NS4yOTIyMiBDIDczNi4xMzUyMSw2NDUuNTA3MTggNzM1LjIxMTU5LDY0NS42MTgyIDczNC4zOTg5OSw2NDUuNjE4MiBDIDczMy4wNjY3MSw2NDUuNjE4MiA3MzIuMDM3OTcsNjQ1LjQxMDMzIDczMS4zMDIxNCw2NDQuOTg2MzEgQyA3MzAuNTczNCw2NDQuNTY5MzkgNzMwLjA1OTYyLDY0NC4wMTQyNyA3MjkuNzYwOCw2NDMuMzI2ODYgQyA3MjkuNDYxOTgsNjQyLjY0NjU1IDcyOS4zMDk2Miw2NDEuMjAyMDYgNzI5LjMwOTYyLDYzOS4wMDc1NyBMIDcyOS4zMDk2Miw2MjYuNTc2NDcgTCA3MjYuNjIxNDMsNjI2LjU3NjQ3IEwgNzI2LjYyMTQzLDYyMy43MzAwMSBMIDcyOS4zMDk2Miw2MjMuNzMwMDEgTCA3MjkuMzA5NjIsNjE4LjM3NjA3IEwgNzMyLjk1NDUsNjE2LjE4MTU4IEwgNzMyLjk1NDUsNjIzLjczMDAxIEwgNzM2LjYzNiw2MjMuNzMwMDEgTCA3MzYuNjM2LDYyNi41NzY0NyBMIDczMi45NTQ1LDYyNi41NzY0NyBMIDczMi45NTQ1LDYzOS4yMDgzNyBDIDczMi45NTQ1LDY0MC4yNTcxOSA3MzMuMDE3MSw2NDAuOTI0NTEgNzMzLjE0MjMsNjQxLjIyMjE1IEMgNzMzLjI3NDU4LDY0MS41MjA5NyA3MzMuNDgyNDUsNjQxLjc1NzE5IDczMy43NzQxOSw2NDEuOTM3OSBDIDczNC4wNjU5Miw2NDIuMTExNTIgNzM0LjQ4Mjg1LDY0Mi4yMDEyOSA3MzUuMDI0OTgsNjQyLjIwMTI5IEMgNzM1LjQzMzY0LDY0Mi4yMDEyOSA3MzUuOTY4NjgsNjQyLjE1Mjg2IDczNi42MzYsNjQyLjA1NjAxIEwgNzM2LjYzNiw2NDIuMDU2IHogIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJwYXRoNTkiIC8+Ci0gICAgICA8cGF0aAotICAgICAgICAgZD0iTSA3NTQuMzE2LDY0Mi42NjYgQyA3NTIuOTU0MTksNjQzLjgxODc2IDc1MS42NDkwNyw2NDQuNjMxMzUgNzUwLjM5OTQ2LDY0NS4xMTA4OCBDIDc0OS4xNDE1OSw2NDUuNTgzMzIgNzQ3Ljc5NTEzLDY0NS44MTk1NCA3NDYuMzU3NzMsNjQ1LjgxOTU0IEMgNzQzLjk4MjUzLDY0NS44MTk1NCA3NDIuMTYzNjQsNjQ1LjI0MzE2IDc0MC44ODU2OCw2NDQuMDgzMzIgQyA3MzkuNjE0ODEsNjQyLjkyMzQ4IDczOC45NzU4NCw2NDEuNDM3NjUgNzM4Ljk3NTg0LDYzOS42Mzg4MyBDIDczOC45NzU4NCw2MzguNTc1ODQgNzM5LjIxMjA2LDYzNy42MTA4OCA3MzkuNjk3NDksNjM2LjczNTY4IEMgNzQwLjE3NzAyLDYzNS44NjA0OCA3NDAuODA4OTEsNjM1LjE2MDA5IDc0MS41ODcyNSw2MzQuNjMyMTQgQyA3NDIuMzcxNTEsNjM0LjEwNDE5IDc0My4yNDY3LDYzMy43MDE0MyA3NDQuMjI1ODMsNjMzLjQzMDk2IEMgNzQ0Ljk0MDQsNjMzLjI0MzE3IDc0Ni4wMjQ2NSw2MzMuMDU1MzcgNzQ3LjQ3NTA0LDYzMi44ODE3NSBDIDc1MC40MzM3LDYzMi41Mjc0MiA3NTIuNjE0MDIsNjMyLjExMDQ5IDc1NC4wMTAwOCw2MzEuNjE3OTcgQyA3NTQuMDI0MjYsNjMxLjExODM2IDc1NC4wMzEzNCw2MzAuNzk4MjggNzU0LjAzMTM0LDYzMC42NjYgQyA3NTQuMDMxMzQsNjI5LjE3MzA5IDc1My42ODQxLDYyOC4xMTgzNiA3NTIuOTg5NjEsNjI3LjUxMzY0IEMgNzUyLjA1ODksNjI2LjY4MDk2IDc1MC42NjI4NCw2MjYuMjcxMTIgNzQ4LjgyMjY4LDYyNi4yNzExMiBDIDc0Ny4xMDA2Myw2MjYuMjcxMTIgNzQ1LjgyOTc3LDYyNi41Njk5NCA3NDUuMDAyOTksNjI3LjE3MzQ4IEMgNzQ0LjE4MzMxLDYyNy43NzgyMSA3NDMuNTc5NzYsNjI4Ljg0NzEgNzQzLjE4NDA5LDYzMC4zODEzNSBMIDczOS42MDc3MSw2MjkuODg4ODMgQyA3MzkuOTMzNyw2MjguMzYxNjYgNzQwLjQ2ODc0LDYyNy4xMTc5NiA3NDEuMjExNjUsNjI2LjE4MDE3IEMgNzQxLjk1NDU3LDYyNS4yMzY0NyA3NDMuMDM3NjMsNjI0LjUwNjU1IDc0NC40NDc4Nyw2MjMuOTk5ODYgQyA3NDUuODU2OTMsNjIzLjQ5MzE3IDc0Ny40ODkyMSw2MjMuMjM1NjkgNzQ5LjM1MDYzLDYyMy4yMzU2OSBDIDc1MS4xOTc4Nyw2MjMuMjM1NjkgNzUyLjY5MDc5LDYyMy40NTg5MiA3NTMuODQzNTQsNjIzLjg4ODg0IEMgNzU0Ljk5NjMsNjI0LjMyNzAzIDc1NS44NDMxNSw2MjQuODY3OTcgNzU2LjM5MjM2LDYyNS41MjgyMSBDIDc1Ni45MzMzMSw2MjYuMTg3MjYgNzU3LjMwODksNjI3LjAxNDA0IDc1Ny41MzA5NCw2MjguMDIwMzQgQyA3NTcuNjQ5MDUsNjI4LjY0NjMyIDc1Ny43MTE2NSw2MjkuNzcwNzMgNzU3LjcxMTY1LDYzMS4zOTU5MyBMIDc1Ny43MTE2NSw2MzYuMjc3NDMgQyA3NTcuNzExNjUsNjM5LjY4NzI3IDc1Ny43ODcyNCw2NDEuODQwNDIgNzU3Ljk0Nzg3LDY0Mi43MzU3IEMgNzU4LjEwMDIzLDY0My42MzgwNiA3NTguNDEzMjMsNjQ0LjUwNjE3IDc1OC44NzE0OSw2NDUuMzMyOTQgTCA3NTUuMDQ0NzIsNjQ1LjMzMjk0IEMgNzU0LjY3MDMyLDY0NC41NzU4NSA3NTQuNDE5OTIsNjQzLjY4NzY2IDc1NC4zMTU5OCw2NDIuNjY2MDEgTCA3NTQuMzE2LDY0Mi42NjYgeiBNIDc1NC4wMTAwOSw2MzQuNDg1NjkgQyA3NTIuNjc2NjMsNjM1LjAzNDkgNzUwLjY4NDExLDYzNS40OTMxNyA3NDguMDMxMzUsNjM1Ljg3NDY3IEMgNzQ2LjUyNDI2LDYzNi4wODk2MyA3NDUuNDU0MTgsNjM2LjMzMjk0IDc0NC44MzY0Nyw2MzYuNjAzNDEgQyA3NDQuMjExNjcsNjM2Ljg3NTA2IDc0My43MjUwNSw2MzcuMjcwNzMgNzQzLjM5MTk4LDYzNy43OTg2OSBDIDc0My4wNTE4Myw2MzguMzE5NTYgNzQyLjg3ODIsNjM4Ljg5NTkzIDc0Mi44NzgyLDYzOS41MzQ5MSBDIDc0Mi44NzgyLDY0MC41MTQwNCA3NDMuMjUzNzksNjQxLjMyNjY0IDc0My45ODk2Miw2NDEuOTc4NjEgQyA3NDQuNzI1NDUsNjQyLjYyNDY3IDc0NS44MDg1Miw2NDIuOTUwNjYgNzQ3LjIzMjkzLDY0Mi45NTA2NiBDIDc0OC42NDE5OSw2NDIuOTUwNjYgNzQ5Ljg5ODY4LDY0Mi42NDU5MyA3NTAuOTk1OTIsNjQyLjAyNzA0IEMgNzUyLjA5MzE2LDY0MS40MDkzMiA3NTIuOTA1NzYsNjQwLjU2MjQ3IDc1My40MTk1NCw2MzkuNDkyMzkgQyA3NTMuODE1MjEsNjM4LjY2Njc5IDc1NC4wMTAwOSw2MzcuNDQ0MzUgNzU0LjAxMDA5LDYzNS44MzMzMyBMIDc1NC4wMTAwOSw2MzQuNDg1NjkgTCA3NTQuMDEwMDksNjM0LjQ4NTY5IHogIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJwYXRoNjEiIC8+Ci0gICAgICA8cG9seWdvbgotICAgICAgICAgcG9pbnRzPSI3NjQuNDI2LDY0NS4zMzMgNzY0LjQyNiw2NDEuMTU5IDc2OC42LDY0MS4xNTkgNzY4LjYsNjQ1LjMzMyA3NjQuNDI2LDY0NS4zMzMgIgotICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgICAgICAgIGlkPSJwb2x5Z29uNjMiIC8+Ci0gICAgICA8cGF0aAotICAgICAgICAgZD0iTSA3NzQuOTY3LDY1My42MSBMIDc3NC45NjcsNjIzLjcyOTMgTCA3NzguMzAwMDcsNjIzLjcyOTMgTCA3NzguMzAwMDcsNjI2LjUzNDQyIEMgNzc5LjA4NTUsNjI1LjQzNzE4IDc3OS45NzM2OSw2MjQuNjExNTkgNzgwLjk2Nyw2MjQuMDYyMzcgQyA3ODEuOTUzMjIsNjIzLjUxNDM0IDc4My4xNTQ0LDYyMy4yMzU2IDc4NC41NjQ2NCw2MjMuMjM1NiBDIDc4Ni40MTE4OCw2MjMuMjM1NiA3ODguMDM3MDgsNjIzLjcxNTEzIDc4OS40NDYxNCw2MjQuNjYwMDEgQyA3OTAuODYyMjgsNjI1LjYxMDc5IDc5MS45MjUyNyw2MjYuOTUxMzUgNzkyLjY0MTAyLDYyOC42ODA0OCBDIDc5My4zNjI2Nyw2MzAuNDA5NjEgNzkzLjcyNDA5LDYzMi4zMDUyOCA3OTMuNzI0MDksNjM0LjM2NzQ5IEMgNzkzLjcyNDA5LDYzNi41NzYxNSA3OTMuMzI4NDIsNjM4LjU2ODY3IDc5Mi41Myw2NDAuMzQwMzIgQyA3OTEuNzM3NDgsNjQyLjExMDc5IDc5MC41ODQ3Miw2NDMuNDY0MzQgNzg5LjA3MTczLDY0NC40MDkyMiBDIDc4Ny41NTc1Niw2NDUuMzQ3MDEgNzg1Ljk2NjYxLDY0NS44MTk0NiA3ODQuMzAwMDgsNjQ1LjgxOTQ2IEMgNzgzLjA3ODgyLDY0NS44MTk0NiA3ODEuOTg3NDgsNjQ1LjU2MTk4IDc4MS4wMTU0Myw2NDUuMDQ4MiBDIDc4MC4wNDMzOCw2NDQuNTM0NDIgNzc5LjI1MjA0LDY0My44ODEyNyA3NzguNjI3MjQsNjQzLjA5NzAyIEwgNzc4LjYyNzI0LDY1My42MTAwMiBMIDc3NC45NjcsNjUzLjYxMDAyIEwgNzc0Ljk2Nyw2NTMuNjEgeiBNIDc3OC4yNzk5OSw2MzQuNjUyMSBDIDc3OC4yNzk5OSw2MzcuNDMwMDUgNzc4Ljg0MjE5LDYzOS40ODUxNyA3NzkuOTY3NzksNjQwLjgxODY0IEMgNzgxLjA5MjIsNjQyLjE0NTAyIDc4Mi40NTk5Miw2NDIuODEyMzQgNzg0LjA1Nzk1LDY0Mi44MTIzNCBDIDc4NS42ODE5Nyw2NDIuODEyMzQgNzg3LjA3ODAzLDY0Mi4xMjQ5NCA3ODguMjM3ODcsNjQwLjc0MzA1IEMgNzg5LjM5NzcxLDYzOS4zNjgyNSA3ODkuOTgxMTgsNjM3LjIzNjM2IDc4OS45ODExOCw2MzQuMzQ3MzggQyA3ODkuOTgxMTgsNjMxLjU4OTUxIDc4OS40MTE4OSw2MjkuNTM0MzkgNzg4LjI3OTIxLDYyOC4xNTk1OCBDIDc4Ny4xNDc3MSw2MjYuNzkxODYgNzg1Ljc5Mjk5LDYyNi4xMDQ0NiA3ODQuMjI0NDksNjI2LjEwNDQ2IEMgNzgyLjY2MTg5LDYyNi4xMDQ0NiA3ODEuMjgsNjI2LjgzMzIgNzgwLjA3ODgyLDYyOC4yOTE4NiBDIDc3OC44NzY0Niw2MjkuNzQ5MzQgNzc4LjI4LDYzMS44NzUzMiA3NzguMjgsNjM0LjY1MjEgTCA3NzguMjc5OTksNjM0LjY1MjEgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGg2NSIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDc5Ny45NzQsNjUzLjY1MyBMIDc5Ny41NjQxNiw2NTAuMjE0ODEgQyA3OTguMzY5NjcsNjUwLjQzMDk1IDc5OS4wNjQxNiw2NTAuNTQxOTggNzk5LjY2MTgsNjUwLjU0MTk4IEMgODAwLjQ3NDM5LDY1MC41NDE5OCA4MDEuMTI2MzcsNjUwLjQwMjYxIDgwMS42MTI5OCw2NTAuMTMyMTMgQyA4MDIuMTA1NSw2NDkuODYwNDggODAyLjUwMjM1LDY0OS40ODYwNyA4MDIuODE0MTYsNjQ4Ljk5MjM3IEMgODAzLjA1MDM4LDY0OC42MzIxNCA4MDMuNDE4ODgsNjQ3LjcyMjY4IDgwMy45MzI2Niw2NDYuMjcxMTEgQyA4MDQuMDAyMzQsNjQ2LjA2MjA2IDgwNC4xMTMzNyw2NDUuNzcwMzMgODA0LjI1ODY0LDY0NS4zNzQ2NSBMIDc5Ni4wNjQxNSw2MjMuNzI5NzUgTCA4MDAuMDA5MDMsNjIzLjcyOTc1IEwgODA0LjUwOTAzLDYzNi4yMzY0NSBDIDgwNS4wODU0MSw2MzcuODI2MjEgODA1LjYxMzM2LDYzOS40OTI3NSA4MDYuMDcxNjMsNjQxLjI0MzE1IEMgODA2LjQ5NDQ3LDYzOS41NjI0NCA4MDYuOTk1MjUsNjM3LjkyNDI1IDgwNy41Nzg3Miw2MzYuMzE5MTIgTCA4MTIuMTk1NjUsNjIzLjcyOTczIEwgODE1Ljg1NTg5LDYyMy43Mjk3MyBMIDgwNy42NDAxNCw2NDUuNzAxNzMgQyA4MDYuNzU5MDQsNjQ4LjA3NTc0IDgwNi4wNzE2NCw2NDkuNzA4MDMgODA1LjU4NTAyLDY1MC42MDQ0OCBDIDgwNC45MzE4Nyw2NTEuODEyNzUgODA0LjE4ODk2LDY1Mi42OTM4NSA4MDMuMzQ5MTksNjUzLjI1NzI0IEMgODAyLjUwMjM0LDY1My44MTk0NSA4MDEuNTAxOTUsNjU0LjEwNDA5IDgwMC4zMzUwMiw2NTQuMTA0MDkgQyA3OTkuNjI2MzYsNjU0LjEwNDA5IDc5OC44NDIxMSw2NTMuOTUwNTUgNzk3Ljk3NCw2NTMuNjUyOTEgTCA3OTcuOTc0LDY1My42NTMgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGg2NyIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDgyNi45NjcsNjQyLjA1NiBMIDgyNy40OTM3Nyw2NDUuMjkyMjIgQyA4MjYuNDY2MjEsNjQ1LjUwNzE4IDgyNS41NDI1OSw2NDUuNjE4MiA4MjQuNzI5OTksNjQ1LjYxODIgQyA4MjMuMzk3NzEsNjQ1LjYxODIgODIyLjM2ODk3LDY0NS40MTAzMyA4MjEuNjMzMTQsNjQ0Ljk4NjMxIEMgODIwLjkwNDQsNjQ0LjU2OTM5IDgyMC4zOTA2Miw2NDQuMDE0MjcgODIwLjA5MTgsNjQzLjMyNjg2IEMgODE5Ljc5Mjk4LDY0Mi42NDY1NSA4MTkuNjQwNjIsNjQxLjIwMjA2IDgxOS42NDA2Miw2MzkuMDA3NTcgTCA4MTkuNjQwNjIsNjI2LjU3NjQ3IEwgODE2Ljk1MjQzLDYyNi41NzY0NyBMIDgxNi45NTI0Myw2MjMuNzMwMDEgTCA4MTkuNjQwNjIsNjIzLjczMDAxIEwgODE5LjY0MDYyLDYxOC4zNzYwNyBMIDgyMy4yODU1LDYxNi4xODE1OCBMIDgyMy4yODU1LDYyMy43MzAwMSBMIDgyNi45NjcsNjIzLjczMDAxIEwgODI2Ljk2Nyw2MjYuNTc2NDcgTCA4MjMuMjg1NSw2MjYuNTc2NDcgTCA4MjMuMjg1NSw2MzkuMjA4MzcgQyA4MjMuMjg1NSw2NDAuMjU3MTkgODIzLjM0ODEsNjQwLjkyNDUxIDgyMy40NzMzLDY0MS4yMjIxNSBDIDgyMy42MDU1OCw2NDEuNTIwOTcgODIzLjgxMzQ1LDY0MS43NTcxOSA4MjQuMTA1MTksNjQxLjkzNzkgQyA4MjQuMzk2OTIsNjQyLjExMTUyIDgyNC44MTM4NSw2NDIuMjAxMjkgODI1LjM1NTk4LDY0Mi4yMDEyOSBDIDgyNS43NjQ2NCw2NDIuMjAxMjkgODI2LjI5OTY4LDY0Mi4xNTI4NiA4MjYuOTY3LDY0Mi4wNTYwMSBMIDgyNi45NjcsNjQyLjA1NiB6ICIKLSAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICAgICAgICBpZD0icGF0aDY5IiAvPgotICAgICAgPHBhdGgKLSAgICAgICAgIGQ9Ik0gODMwLjU0OSw2NDUuMzMzIEwgODMwLjU0OSw2MTUuNTA3OCBMIDgzNC4yMDkyNCw2MTUuNTA3OCBMIDgzNC4yMDkyNCw2MjYuMjA4NiBDIDgzNS45MTcxMSw2MjQuMjI5MDcgODM4LjA3NzM1LDYyMy4yMzU3NyA4NDAuNjgwNSw2MjMuMjM1NzcgQyA4NDIuMjc4NTMsNjIzLjIzNTc3IDg0My42Njc1MSw2MjMuNTU1ODUgODQ0Ljg0NzQzLDYyNC4xODc3NCBDIDg0Ni4wMjg1Myw2MjQuODEyNTQgODQ2Ljg3NTM4LDYyNS42ODc3NCA4NDcuMzgyMDgsNjI2Ljc5OTE2IEMgODQ3Ljg4ODc3LDYyNy45MDk0IDg0OC4xNDYyNSw2MjkuNTI3NTEgODQ4LjE0NjI1LDYzMS42MzkzMiBMIDg0OC4xNDYyNSw2NDUuMzMzMDIgTCA4NDQuNDgwMTEsNjQ1LjMzMzAyIEwgODQ0LjQ4MDExLDYzMS42MzkzMiBDIDg0NC40ODAxMSw2MjkuODEyMTUgODQ0LjA4MzI2LDYyOC40Nzg2OSA4NDMuMjkxOTIsNjI3LjY0NjAxIEMgODQyLjUwMDU4LDYyNi44MTIxNSA4NDEuMzc0OTksNjI2LjM4OTMyIDgzOS45MjQ2LDYyNi4zODkzMiBDIDgzOC44NDAzNSw2MjYuMzg5MzIgODM3LjgxOTg4LDYyNi42NzM5NiA4MzYuODYyLDYyNy4yMzYxNyBDIDgzNS45MDI5NSw2MjcuNzk4MzcgODM1LjIyMjYzLDYyOC41NjI1NSA4MzQuODE5ODcsNjI5LjUyNzUxIEMgODM0LjQxMDAzLDYzMC40ODY1NiA4MzQuMjA5MjQsNjMxLjgxODg1IDgzNC4yMDkyNCw2MzMuNTEzNzMgTCA4MzQuMjA5MjQsNjQ1LjMzMzAzIEwgODMwLjU0OSw2NDUuMzMzMDMgTCA4MzAuNTQ5LDY0NS4zMzMgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGg3MSIgLz4KLSAgICAgIDxwYXRoCi0gICAgICAgICBkPSJNIDg1Mi4zNTQsNjM0LjUyNyBDIDg1Mi4zNTQsNjMwLjUyNzc5IDg1My40NjU0Miw2MjcuNTYyMDQgODU1LjY5NDE2LDYyNS42MzkyIEMgODU3LjU0ODQ5LDYyNC4wNDExNyA4NTkuODEyNjYsNjIzLjIzNTY2IDg2Mi40ODU1LDYyMy4yMzU2NiBDIDg2NS40NTgzMyw2MjMuMjM1NjYgODY3Ljg4Nzg2LDYyNC4yMDg4OSA4NjkuNzcwNTQsNjI2LjE2MDA3IEMgODcxLjY1OTEyLDYyOC4xMDQxNiA4NzIuNTk2OTIsNjMwLjc5MTE3IDg3Mi41OTY5Miw2MzQuMjIyMjcgQyA4NzIuNTk2OTIsNjM3LjAwNjEzIDg3Mi4xNzk5OSw2MzkuMTk0NzEgODcxLjM0NjEzLDY0MC43ODQ0NyBDIDg3MC41MTM0NSw2NDIuMzgxMzIgODY5LjI5ODEsNjQzLjYxNzkzIDg2Ny43MDgzMyw2NDQuNDk5MDQgQyA4NjYuMTEwMyw2NDUuMzgxMzIgODY0LjM3NDA4LDY0NS44MTk1MSA4NjIuNDg1NSw2NDUuODE5NTEgQyA4NTkuNDY1NDIsNjQ1LjgxOTUxIDg1Ny4wMjA1NCw2NDQuODUzMzcgODU1LjE1MjA0LDY0Mi45MDkyNyBDIDg1My4yODQ3Miw2NDAuOTcyMjYgODUyLjM1NDAxLDYzOC4xODAxNCA4NTIuMzU0MDEsNjM0LjUyNjk5IEwgODUyLjM1NCw2MzQuNTI3IHogTSA4NTYuMTE4MTcsNjM0LjUyNyBDIDg1Ni4xMTgxNyw2MzcuMjk3ODcgODU2LjcyMTcxLDYzOS4zNjgzNCA4NTcuOTI5OTgsNjQwLjc0MzE0IEMgODU5LjEzODI1LDY0Mi4xMjUwMyA4NjAuNjU5NTEsNjQyLjgxMjQzIDg2Mi40ODU0OSw2NDIuODEyNDMgQyA4NjQuMzA1NTcsNjQyLjgxMjQzIDg2NS44MTg1Niw2NDIuMTE3OTQgODY3LjAyNjgzLDY0MC43MzYwNSBDIDg2OC4yMjkxOSw2MzkuMzU0MTYgODY4LjgzMjc0LDYzNy4yNDIzNSA4NjguODMyNzQsNjM0LjQxMDA3IEMgODY4LjgzMjc0LDYzMS43MzYwNSA4NjguMjI5Miw2MjkuNzA4MSA4NjcuMDEzODQsNjI4LjMzMzMgQyA4NjUuNzk4NDksNjI2Ljk1ODUgODY0LjI5MTQsNjI2LjI3MTEgODYyLjQ4NTQ5LDYyNi4yNzExIEMgODYwLjY1OTUxLDYyNi4yNzExIDg1OS4xMzgyNSw2MjYuOTU4NSA4NTcuOTI5OTgsNjI4LjMyNjIyIEMgODU2LjcyMTcxLDYyOS42OTM5NCA4NTYuMTE4MTcsNjMxLjc2MzIzIDg1Ni4xMTgxNyw2MzQuNTI3MDEgTCA4NTYuMTE4MTcsNjM0LjUyNyB6ICIKLSAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICAgICAgICBpZD0icGF0aDczIiAvPgotICAgICAgPHBhdGgKLSAgICAgICAgIGQ9Ik0gODc2Ljg5NSw2NDUuMzMzIEwgODc2Ljg5NSw2MjMuNzI5NSBMIDg4MC4xODY3Myw2MjMuNzI5NSBMIDg4MC4xODY3Myw2MjYuNzk5MTkgQyA4ODEuNzc3NjcsNjI0LjQyMzk5IDg4NC4wNjkwMSw2MjMuMjM1OCA4ODcuMDYxOTMsNjIzLjIzNTggQyA4ODguMzY3MDUsNjIzLjIzNTggODg5LjU2MTE0LDYyMy40NzIwMiA4OTAuNjUyNDgsNjIzLjkzNzM3IEMgODkxLjc0OTcyLDYyNC40MDk4MiA4OTIuNTYxMTQsNjI1LjAyMDQ1IDg5My4xMDMyNyw2MjUuNzg0NjIgQyA4OTMuNjUyNDgsNjI2LjU0MTcgODk0LjAyNjg5LDYyNy40NDQwNyA4OTQuMjQ4OTQsNjI4LjQ4NTggQyA4OTQuMzgxMjIsNjI5LjE2NzI5IDg5NC40NTA5MSw2MzAuMzU0MyA4OTQuNDUwOTEsNjMyLjA0OTE5IEwgODk0LjQ1MDkxLDY0NS4zMzMwOSBMIDg5MC43ODM1OSw2NDUuMzMzMDkgTCA4OTAuNzgzNTksNjMyLjE4NzM5IEMgODkwLjc4MzU5LDYzMC43MDE1NiA4OTAuNjQ1NCw2MjkuNTgzMDYgODkwLjM2MDc1LDYyOC44NDAxNSBDIDg5MC4wNzYxMSw2MjguMTA0MzIgODg5LjU2ODIzLDYyNy41MTM3NyA4ODguODQ2NTgsNjI3LjA3Njc2IEMgODg4LjExNzg0LDYyNi42MzI2NiA4ODcuMjY5ODEsNjI2LjQwOTQzIDg4Ni4yOTA2Nyw2MjYuNDA5NDMgQyA4ODQuNzI4MDcsNjI2LjQwOTQzIDg4My4zODg3LDYyNi45MTAyMiA4ODIuMjQ4OTQsNjI3Ljg5NjQ0IEMgODgxLjExNzQ0LDYyOC44ODg1NyA4ODAuNTU1MjQsNjMwLjc2NDE2IDg4MC41NTUyNCw2MzMuNTM1MDIgTCA4ODAuNTU1MjQsNjQ1LjMzMzAyIEwgODc2Ljg5NSw2NDUuMzMzMDIgTCA4NzYuODk1LDY0NS4zMzMgeiAiCi0gICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgICAgICAgaWQ9InBhdGg3NSIgLz4KLSAgICA8L2c+Ci0gICAgPGcKLSAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjMxNzcxNSwwLDAsMC4zMTc3MTUsLTcxLjM5MzQzLC0xNTEuMjM0OCkiCi0gICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIgotICAgICAgIGlkPSJfMTk0MjgzMTIiPgotICAgPHBhdGgKLSAgIGQ9Ik0gMzQxLjIwNywxNDQzLjU0IEwgMzMyLjk4NTM1LDE0MjEuOTM2NSBMIDMzNi44NTM0NiwxNDIxLjkzNjUgTCAzNDEuNDkxNjUsMTQzNC44NzMxIEMgMzQxLjk5MjQ0LDE0MzYuMjY5MiAzNDIuNDUwNywxNDM3LjcyMDcgMzQyLjg3MzU0LDE0MzkuMjI3OCBDIDM0My4yMDA3LDE0MzguMDg5MiAzNDMuNjUxODksMTQzNi43MjAzIDM0NC4yMzUzNSwxNDM1LjExNjQgTCAzNDkuMDQwMDcsMTQyMS45MzY1IEwgMzUyLjgwNDI0LDE0MjEuOTM2NSBMIDM0NC42MjM5MywxNDQzLjU0IEwgMzQxLjIwNywxNDQzLjU0IEwgMzQxLjIwNywxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJfMTk0MzkyMjQiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDM3MC44MjUsMTQzNi41OCBMIDM3NC42MDkyNSwxNDM3LjA0NTQgQyAzNzQuMDExNjEsMTQzOS4yNTk5IDM3Mi45MDg0NiwxNDQwLjk3NDkgMzcxLjI5NzQ0LDE0NDIuMTk3MyBDIDM2OS42NzkzMywxNDQzLjQxMjcgMzY3LjYxNTk0LDE0NDQuMDI0NSAzNjUuMTA5NjQsMTQ0NC4wMjQ1IEMgMzYxLjk1MDE5LDE0NDQuMDI0NSAzNTkuNDQyNzEsMTQ0My4wNTEzIDM1Ny41OTU0NywxNDQxLjEwNzIgQyAzNTUuNzQxMTQsMTQzOS4xNjMxIDM1NC44MTc1MiwxNDM2LjQzMzYgMzU0LjgxNzUyLDE0MzIuOTE5OCBDIDM1NC44MTc1MiwxNDI5LjI4MDggMzU1Ljc1NTMyLDE0MjYuNDYxNSAzNTcuNjIzODIsMTQyNC40NTQ4IEMgMzU5LjQ5ODIzLDE0MjIuNDQ4MSAzNjEuOTIxODUsMTQyMS40NDA2IDM2NC45MDc2OCwxNDIxLjQ0MDYgQyAzNjcuNzk2NjYsMTQyMS40NDA2IDM3MC4xNTc2OCwxNDIyLjQyNjkgMzcxLjk4NDg1LDE0MjQuMzkyMiBDIDM3My44MTc5MiwxNDI2LjM1NzYgMzc0LjczNDQ2LDE0MjkuMTI4NCAzNzQuNzM0NDYsMTQzMi42OTA2IEMgMzc0LjczNDQ2LDE0MzIuOTEyNyAzNzQuNzI3MzcsMTQzMy4yMzk5IDM3NC43MTMyLDE0MzMuNjY5OCBMIDM1OC42MDMsMTQzMy42Njk4IEMgMzU4LjczNTI4LDE0MzYuMDQ1IDM1OS40MDg1MSwxNDM3Ljg2MzkgMzYwLjYxNjc4LDE0MzkuMTIxNyBDIDM2MS44MjUwNSwxNDQwLjM4NTUgMzYzLjMyNTA1LDE0NDEuMDE3NCAzNjUuMTMwOTUsMTQ0MS4wMTc0IEMgMzY2LjQ3MDMyLDE0NDEuMDE3NCAzNjcuNjE1OTksMTQ0MC42NjMxIDM2OC41Njc5NiwxNDM5Ljk1NDQgQyAzNjkuNTE4NzUsMTQzOS4yNTI5IDM3MC4yNjg3NSwxNDM4LjEyODQgMzcwLjgyNTA1LDE0MzYuNTggTCAzNzAuODI1LDE0MzYuNTggeiBNIDM1OC44MDM3LDE0MzAuNjU2OCBMIDM3MC44NjYzLDE0MzAuNjU2OCBDIDM3MC43MDY4NSwxNDI4Ljg0MzggMzcwLjI0MTUsMTQyNy40NzYxIDM2OS40ODQ0MSwxNDI2LjU3MjUgQyAzNjguMzE3NDgsMTQyNS4xNjM1IDM2Ni44MDQ0OSwxNDI0LjQ1NDggMzY0Ljk1MDE2LDE0MjQuNDU0OCBDIDM2My4yNjk0NSwxNDI0LjQ1NDggMzYxLjg1MjEzLDE0MjUuMDE3IDM2MC43MDY0NiwxNDI2LjE0MjYgQyAzNTkuNTYwNzksMTQyNy4yNjcgMzU4LjkyODksMTQyOC43NzQxIDM1OC44MDM3LDE0MzAuNjU2OCBMIDM1OC44MDM3LDE0MzAuNjU2OCB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDc5IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAzNzkuMTcyLDE0NDMuNTQgTCAzNzkuMTcyLDE0MjEuOTM2NSBMIDM4Mi40NjM3MywxNDIxLjkzNjUgTCAzODIuNDYzNzMsMTQyNS4yMDcgQyAzODMuMzAzNDksMTQyMy42Nzk4IDM4NC4wODE4NCwxNDIyLjY2NTIgMzg0Ljc5NjQxLDE0MjIuMTc5OCBDIDM4NS41MDUwNywxNDIxLjY5MzIgMzg2LjI4OTMyLDE0MjEuNDQyOCAzODcuMTQ0NDQsMTQyMS40NDI4IEMgMzg4LjM3OTg3LDE0MjEuNDQyOCAzODkuNjMwNjYsMTQyMS44Mzk2IDM5MC45MDc0MywxNDIyLjYyMzkgTCAzODkuNjQzNjUsMTQyNi4wMjY3IEMgMzg4Ljc1NTQ2LDE0MjUuNDkxNiAzODcuODU5LDE0MjUuMjI4MiAzODYuOTYzNzMsMTQyNS4yMjgyIEMgMzg2LjE1ODIyLDE0MjUuMjI4MiAzODUuNDQyNDcsMTQyNS40NzE1IDM4NC44MDM0OSwxNDI1Ljk0OTkgQyAzODQuMTY0NTEsMTQyNi40MzY1IDM4My43MTMzMywxNDI3LjEwMjYgMzgzLjQ0Mjg2LDE0MjcuOTU2NiBDIDM4My4wMzMwMiwxNDI5LjI1NTggMzgyLjgzMjIzLDE0MzAuNjc5IDM4Mi44MzIyMywxNDMyLjIyNzQgTCAzODIuODMyMjMsMTQ0My41NCBMIDM3OS4xNzE5OSwxNDQzLjU0IEwgMzc5LjE3MiwxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoODEiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDM5MS42MjMsMTQzNy4wOSBMIDM5NS4yNDA3MiwxNDM2LjUyMDcgQyAzOTUuNDQxNTEsMTQzNy45NzIzIDM5Ni4wMTE5OCwxNDM5LjA4MjUgMzk2Ljk0MTUxLDE0MzkuODYwOSBDIDM5Ny44NjUxMywxNDQwLjYzMDkgMzk5LjE2NDM0LDE0NDEuMDIwNyA0MDAuODM3OTcsMTQ0MS4wMjA3IEMgNDAyLjUxODY4LDE0NDEuMDIwNyA0MDMuNzY4MjgsMTQ0MC42NzM1IDQwNC41ODA4OCwxNDM5Ljk5MzEgQyA0MDUuMzkzNDgsMTQzOS4zMDU3IDQwNS44MDMzMiwxNDM4LjQ5OTEgNDA1LjgwMzMyLDE0MzcuNTgyNSBDIDQwNS44MDMzMiwxNDM2Ljc0OTggNDA1LjQ0MTksMTQzNi4xMDM4IDQwNC43MTkwNywxNDM1LjYyNDIgQyA0MDQuMjE5NDYsMTQzNS4yOTgzIDQwMi45Njk4NiwxNDM0Ljg4ODQgNDAwLjk3NjE2LDE0MzQuMzg4OCBDIDM5OC4yOTYyNCwxNDMzLjcwODUgMzk2LjQyNzczLDE0MzMuMTI1IDM5NS4zOTMwOSwxNDMyLjYyNDIgQyAzOTQuMzU4NDQsMTQzMi4xMzE3IDM5My41NjcxMSwxNDMxLjQ0NDMgMzkzLjAzMjA3LDE0MzAuNTY5MSBDIDM5Mi40OTgyMSwxNDI5LjY5MzkgMzkyLjIyNjU2LDE0MjguNzI5IDM5Mi4yMjY1NiwxNDI3LjY3MzEgQyAzOTIuMjI2NTYsMTQyNi43MDgxIDM5Mi40NDg2LDE0MjUuODE5OSAzOTIuODkzODgsMTQyNS4wMDAyIEMgMzkzLjMzMDg5LDE0MjQuMTczNSAzOTMuOTM1NjEsMTQyMy40OTMxIDM5NC42OTE1MiwxNDIyLjk1MSBDIDM5NS4yNjE5OSwxNDIyLjUzNTMgMzk2LjAzOTE2LDE0MjIuMTczOSAzOTcuMDE4MjksMTQyMS44ODIxIEMgMzk4LjAwNDUxLDE0MjEuNTkwNCAzOTkuMDYwNDIsMTQyMS40NDM5IDQwMC4xODQ4MywxNDIxLjQ0MzkgQyA0MDEuODc5NzEsMTQyMS40NDM5IDQwMy4zNjU1NCwxNDIxLjY5NDMgNDA0LjY1MDU4LDE0MjIuMTgwOSBDIDQwNS45MzQ0NCwxNDIyLjY2NjQgNDA2Ljg3OTMyLDE0MjMuMzI2NiA0MDcuNDg5OTUsMTQyNC4xNTkzIEMgNDA4LjEwMTc2LDE0MjUuMDAwMiA0MDguNTE4NjksMTQyNi4xMTA1IDQwOC43NDc4MiwxNDI3LjUwNjUgTCA0MDUuMTcxNDQsMTQyOC4wMDAyIEMgNDA1LjAwNDkxLDE0MjYuODg4OCA0MDQuNTMyNDcsMTQyNi4wMjA3IDQwMy43NTQxMiwxNDI1LjM5NTkgQyA0MDIuOTc2OTYsMTQyNC43NzExIDQwMS44NzI2MiwxNDI0LjQ1ODEgNDAwLjQ0OTQsMTQyNC40NTgxIEMgMzk4Ljc2ODY5LDE0MjQuNDU4MSAzOTcuNTY3NTEsMTQyNC43MzU3IDM5Ni44NTE3NiwxNDI1LjI5MiBDIDM5Ni4xMzAxMSwxNDI1Ljg0NzEgMzk1Ljc2ODY5LDE0MjYuNTAwMiAzOTUuNzY4NjksMTQyNy4yNDMyIEMgMzk1Ljc2ODY5LDE0MjcuNzIxNSAzOTUuOTIxMDUsMTQyOC4xNDU1IDM5Ni4yMTk4NywxNDI4LjUyODIgQyAzOTYuNTE4NjksMTQyOC45MjM5IDM5Ni45ODQwNSwxNDI5LjI0MjggMzk3LjYyMzAyLDE0MjkuNTA3MyBDIDM5Ny45OTAzNCwxNDI5LjYzODQgMzk5LjA2NzUxLDE0MjkuOTUxNCA0MDAuODU4MDYsMTQzMC40MzY5IEMgNDAzLjQ0ODIyLDE0MzEuMTMxMyA0MDUuMjU0MTIsMTQzMS42OTQ3IDQwNi4yNzQ2LDE0MzIuMTM4OCBDIDQwNy4zMDMzNCwxNDMyLjU3NTggNDA4LjEwODg1LDE0MzMuMjIxOSA0MDguNjkyMzIsMTQzNC4wNjE3IEMgNDA5LjI3NDYxLDE0MzQuOTAyNiA0MDkuNTY2MzQsMTQzNS45NDQzIDQwOS41NjYzNCwxNDM3LjE5MzkgQyA0MDkuNTY2MzQsMTQzOC40MTY0IDQwOS4yMDYxLDE0MzkuNTYyIDQwOC40OTc0NCwxNDQwLjY0NTEgQyA0MDcuNzgxNjksMTQ0MS43MjIzIDQwNi43NTQxMywxNDQyLjU1NSA0MDUuNDEzNTgsMTQ0My4xNDU1IEMgNDA0LjA3NDIxLDE0NDMuNzM2MSA0MDIuNTUyOTUsMTQ0NC4wMjc4IDQwMC44NTgwNywxNDQ0LjAyNzggQyAzOTguMDQ1ODcsMTQ0NC4wMjc4IDM5NS45MDY4OSwxNDQzLjQ0NDMgMzk0LjQzNTI0LDE0NDIuMjc3NCBDIDM5Mi45NjI0MSwxNDQxLjExMDUgMzkyLjAyNTc5LDE0MzkuMzgxMyAzOTEuNjIzMDQsMTQzNy4wOSBMIDM5MS42MjMsMTQzNy4wOSB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDgzIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA0MTMuOTM0LDE0MTcuOTMgTCA0MTMuOTM0LDE0MTMuNzE1OCBMIDQxNy42MDAxNCwxNDEzLjcxNTggTCA0MTcuNjAwMTQsMTQxNy45MyBMIDQxMy45MzQsMTQxNy45MyB6IE0gNDEzLjkzNCwxNDQzLjU0MSBMIDQxMy45MzQsMTQyMS45Mzc1IEwgNDE3LjYwMDE0LDE0MjEuOTM3NSBMIDQxNy42MDAxNCwxNDQzLjU0MSBMIDQxMy45MzQsMTQ0My41NDEgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGg4NSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gNDIxLjgwOCwxNDMyLjc0IEMgNDIxLjgwOCwxNDI4Ljc0MDggNDIyLjkxOTQyLDE0MjUuNzc1IDQyNS4xNDgxNiwxNDIzLjg1MjIgQyA0MjcuMDAyNDksMTQyMi4yNTQyIDQyOS4yNjY2NiwxNDIxLjQ0ODcgNDMxLjkzOTUsMTQyMS40NDg3IEMgNDM0LjkxMjMzLDE0MjEuNDQ4NyA0MzcuMzQxODYsMTQyMi40MjE5IDQzOS4yMjQ1NCwxNDI0LjM3MzEgQyA0NDEuMTEzMTIsMTQyNi4zMTcyIDQ0Mi4wNTA5MiwxNDI5LjAwNDIgNDQyLjA1MDkyLDE0MzIuNDM1MyBDIDQ0Mi4wNTA5MiwxNDM1LjIxOTEgNDQxLjYzMzk5LDE0MzcuNDA3NyA0NDAuODAwMTMsMTQzOC45OTc1IEMgNDM5Ljk2NzQ1LDE0NDAuNTk0MyA0MzguNzUyMSwxNDQxLjgzMDkgNDM3LjE2MjMzLDE0NDIuNzEyIEMgNDM1LjU2NDMsMTQ0My41OTQzIDQzMy44MjgwOCwxNDQ0LjAzMjUgNDMxLjkzOTUsMTQ0NC4wMzI1IEMgNDI4LjkxOTQyLDE0NDQuMDMyNSA0MjYuNDc0NTQsMTQ0My4wNjY0IDQyNC42MDYwNCwxNDQxLjEyMjMgQyA0MjIuNzM4NzIsMTQzOS4xODUzIDQyMS44MDgwMSwxNDM2LjM5MzEgNDIxLjgwODAxLDE0MzIuNzQgTCA0MjEuODA4LDE0MzIuNzQgeiBNIDQyNS41NzIxNywxNDMyLjc0IEMgNDI1LjU3MjE3LDE0MzUuNTEwOSA0MjYuMTc1NzEsMTQzNy41ODEzIDQyNy4zODM5OCwxNDM4Ljk1NjEgQyA0MjguNTkyMjUsMTQ0MC4zMzggNDMwLjExMzUxLDE0NDEuMDI1NCA0MzEuOTM5NDksMTQ0MS4wMjU0IEMgNDMzLjc1OTU3LDE0NDEuMDI1NCA0MzUuMjcyNTYsMTQ0MC4zMzA5IDQzNi40ODA4MywxNDM4Ljk0OSBDIDQzNy42ODMxOSwxNDM3LjU2NzIgNDM4LjI4Njc0LDE0MzUuNDU1NCA0MzguMjg2NzQsMTQzMi42MjMxIEMgNDM4LjI4Njc0LDE0MjkuOTQ5IDQzNy42ODMyLDE0MjcuOTIxMSA0MzYuNDY3ODQsMTQyNi41NDYzIEMgNDM1LjI1MjQ5LDE0MjUuMTcxNSA0MzMuNzQ1NCwxNDI0LjQ4NDEgNDMxLjkzOTQ5LDE0MjQuNDg0MSBDIDQzMC4xMTM1MSwxNDI0LjQ4NDEgNDI4LjU5MjI1LDE0MjUuMTcxNSA0MjcuMzgzOTgsMTQyNi41MzkyIEMgNDI2LjE3NTcxLDE0MjcuOTA2OSA0MjUuNTcyMTcsMTQyOS45NzYyIDQyNS41NzIxNywxNDMyLjc0IEwgNDI1LjU3MjE3LDE0MzIuNzQgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGg4NyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gNDQ2LjM0OSwxNDQzLjU0IEwgNDQ2LjM0OSwxNDIxLjkzNjUgTCA0NDkuNjQwNzMsMTQyMS45MzY1IEwgNDQ5LjY0MDczLDE0MjUuMDA2MiBDIDQ1MS4yMzE2NywxNDIyLjYzMSA0NTMuNTIzMDEsMTQyMS40NDI4IDQ1Ni41MTU5MywxNDIxLjQ0MjggQyA0NTcuODIxMDUsMTQyMS40NDI4IDQ1OS4wMTUxNCwxNDIxLjY3OSA0NjAuMTA2NDgsMTQyMi4xNDQ0IEMgNDYxLjIwMzcyLDE0MjIuNjE2OCA0NjIuMDE1MTQsMTQyMy4yMjc0IDQ2Mi41NTcyNywxNDIzLjk5MTYgQyA0NjMuMTA2NDgsMTQyNC43NDg3IDQ2My40ODA4OSwxNDI1LjY1MTEgNDYzLjcwMjk0LDE0MjYuNjkyOCBDIDQ2My44MzUyMiwxNDI3LjM3NDMgNDYzLjkwNDkxLDE0MjguNTYxMyA0NjMuOTA0OTEsMTQzMC4yNTYyIEwgNDYzLjkwNDkxLDE0NDMuNTQwMSBMIDQ2MC4yMzc1OSwxNDQzLjU0MDEgTCA0NjAuMjM3NTksMTQzMC4zOTQ0IEMgNDYwLjIzNzU5LDE0MjguOTA4NiA0NjAuMDk5NCwxNDI3Ljc5MDEgNDU5LjgxNDc1LDE0MjcuMDQ3MSBDIDQ1OS41MzAxMSwxNDI2LjMxMTMgNDU5LjAyMjIzLDE0MjUuNzIwOCA0NTguMzAwNTgsMTQyNS4yODM4IEMgNDU3LjU3MTg0LDE0MjQuODM5NyA0NTYuNzIzODEsMTQyNC42MTY0IDQ1NS43NDQ2NywxNDI0LjYxNjQgQyA0NTQuMTgyMDcsMTQyNC42MTY0IDQ1Mi44NDI3LDE0MjUuMTE3MiA0NTEuNzAyOTQsMTQyNi4xMDM0IEMgNDUwLjU3MTQ0LDE0MjcuMDk1NiA0NTAuMDA5MjQsMTQyOC45NzEyIDQ1MC4wMDkyNCwxNDMxLjc0MiBMIDQ1MC4wMDkyNCwxNDQzLjU0IEwgNDQ2LjM0OSwxNDQzLjU0IEwgNDQ2LjM0OSwxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoODkiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDQ4MS4xMTMsMTQxNy45MyBMIDQ4MS4xMTMsMTQxMy43MTU4IEwgNDg0Ljc3OTE0LDE0MTMuNzE1OCBMIDQ4NC43NzkxNCwxNDE3LjkzIEwgNDgxLjExMywxNDE3LjkzIHogTSA0ODEuMTEzLDE0NDMuNTQxIEwgNDgxLjExMywxNDIxLjkzNzUgTCA0ODQuNzc5MTQsMTQyMS45Mzc1IEwgNDg0Ljc3OTE0LDE0NDMuNTQxIEwgNDgxLjExMywxNDQzLjU0MSB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDkxIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA0OTAuMzU1LDE0NDMuNTQgTCA0OTAuMzU1LDE0MjEuOTM2NSBMIDQ5My42NDY3MywxNDIxLjkzNjUgTCA0OTMuNjQ2NzMsMTQyNS4wMDYyIEMgNDk1LjIzNzY3LDE0MjIuNjMxIDQ5Ny41MjkwMSwxNDIxLjQ0MjggNTAwLjUyMTkzLDE0MjEuNDQyOCBDIDUwMS44MjcwNSwxNDIxLjQ0MjggNTAzLjAyMTE0LDE0MjEuNjc5IDUwNC4xMTI0OCwxNDIyLjE0NDQgQyA1MDUuMjA5NzIsMTQyMi42MTY4IDUwNi4wMjExNCwxNDIzLjIyNzQgNTA2LjU2MzI3LDE0MjMuOTkxNiBDIDUwNy4xMTI0OCwxNDI0Ljc0ODcgNTA3LjQ4Njg5LDE0MjUuNjUxMSA1MDcuNzA4OTQsMTQyNi42OTI4IEMgNTA3Ljg0MTIyLDE0MjcuMzc0MyA1MDcuOTEwOTEsMTQyOC41NjEzIDUwNy45MTA5MSwxNDMwLjI1NjIgTCA1MDcuOTEwOTEsMTQ0My41NDAxIEwgNTA0LjI0MzU5LDE0NDMuNTQwMSBMIDUwNC4yNDM1OSwxNDMwLjM5NDQgQyA1MDQuMjQzNTksMTQyOC45MDg2IDUwNC4xMDU0LDE0MjcuNzkwMSA1MDMuODIwNzUsMTQyNy4wNDcxIEMgNTAzLjUzNjExLDE0MjYuMzExMyA1MDMuMDI4MjMsMTQyNS43MjA4IDUwMi4zMDY1OCwxNDI1LjI4MzggQyA1MDEuNTc3ODQsMTQyNC44Mzk3IDUwMC43Mjk4MSwxNDI0LjYxNjQgNDk5Ljc1MDY3LDE0MjQuNjE2NCBDIDQ5OC4xODgwNywxNDI0LjYxNjQgNDk2Ljg0ODcsMTQyNS4xMTcyIDQ5NS43MDg5NCwxNDI2LjEwMzQgQyA0OTQuNTc3NDQsMTQyNy4wOTU2IDQ5NC4wMTUyNCwxNDI4Ljk3MTIgNDk0LjAxNTI0LDE0MzEuNzQyIEwgNDk0LjAxNTI0LDE0NDMuNTQgTCA0OTAuMzU1LDE0NDMuNTQgTCA0OTAuMzU1LDE0NDMuNTQgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGg5MyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gNTM5LjI2NCwxNDQzLjU0IEwgNTM5LjI2NCwxNDQwLjM2NjQgQyA1MzcuNTc2MiwxNDQyLjgxMTMgNTM1LjI5MTk1LDE0NDQuMDI2NiA1MzIuNDAyOTgsMTQ0NC4wMjY2IEMgNTMxLjEzMjExLDE0NDQuMDI2NiA1MjkuOTM2ODQsMTQ0My43ODMzIDUyOC44MzM2OSwxNDQzLjI5NjcgQyA1MjcuNzI5MzYsMTQ0Mi44MTEzIDUyNi45MDk2NywxNDQyLjE5MjQgNTI2LjM3NDYzLDE0NDEuNDU2NSBDIDUyNS44MzM2OCwxNDQwLjcxMzYgNTI1LjQ1ODA5LDE0MzkuODExMyA1MjUuMjQzMTMsMTQzOC43NDEyIEMgNTI1LjA5NjY3LDE0MzguMDE5NSA1MjUuMDIxMDgsMTQzNi44ODA5IDUyNS4wMjEwOCwxNDM1LjMxODQgTCA1MjUuMDIxMDgsMTQyMS45MzY1IEwgNTI4LjY4MDE0LDE0MjEuOTM2NSBMIDUyOC42ODAxNCwxNDMzLjkxNTIgQyA1MjguNjgwMTQsMTQzNS44MzIxIDUyOC43NTY5MSwxNDM3LjExNTkgNTI4LjkwMjE5LDE0MzcuNzgzMyBDIDUyOS4xMzg0MSwxNDM4Ljc0ODIgNTI5LjYyNTAyLDE0MzkuNDk4MiA1MzAuMzY3OTQsMTQ0MC4wNTMzIEMgNTMxLjExNzk0LDE0NDAuNjAyNiA1MzIuMDQxNTYsMTQ0MC44NzMgNTMzLjEzODgxLDE0NDAuODczIEMgNTM0LjIzNjA1LDE0NDAuODczIDUzNS4yNjM2MSwxNDQwLjU5NTUgNTM2LjIyODU3LDE0NDAuMDMzMyBDIDUzNy4xOTM1MywxNDM5LjQ3MTEgNTM3Ljg3NTAzLDE0MzguNjk5OCA1MzguMjcwNywxNDM3LjczNDggQyA1MzguNjczNDYsMTQzNi43NjI4IDUzOC44NzQyNCwxNDM1LjM1MjYgNTM4Ljg3NDI0LDE0MzMuNTEyNCBMIDUzOC44NzQyNCwxNDIxLjkzNjQgTCA1NDIuNTM0NDgsMTQyMS45MzY0IEwgNTQyLjUzNDQ4LDE0NDMuNTM5OSBMIDUzOS4yNjQwMSwxNDQzLjUzOTkgTCA1MzkuMjY0LDE0NDMuNTQgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGg5NSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gNTQ2LjgxMywxNDM3LjA5IEwgNTUwLjQzMDcyLDE0MzYuNTIwNyBDIDU1MC42MzE1MSwxNDM3Ljk3MjMgNTUxLjIwMTk4LDE0MzkuMDgyNSA1NTIuMTMxNTEsMTQzOS44NjA5IEMgNTUzLjA1NTEzLDE0NDAuNjMwOSA1NTQuMzU0MzQsMTQ0MS4wMjA3IDU1Ni4wMjc5NywxNDQxLjAyMDcgQyA1NTcuNzA4NjgsMTQ0MS4wMjA3IDU1OC45NTgyOCwxNDQwLjY3MzUgNTU5Ljc3MDg4LDE0MzkuOTkzMSBDIDU2MC41ODM0OCwxNDM5LjMwNTcgNTYwLjk5MzMyLDE0MzguNDk5MSA1NjAuOTkzMzIsMTQzNy41ODI1IEMgNTYwLjk5MzMyLDE0MzYuNzQ5OCA1NjAuNjMxOSwxNDM2LjEwMzggNTU5LjkwOTA3LDE0MzUuNjI0MiBDIDU1OS40MDk0NiwxNDM1LjI5ODMgNTU4LjE1OTg2LDE0MzQuODg4NCA1NTYuMTY2MTYsMTQzNC4zODg4IEMgNTUzLjQ4NjI0LDE0MzMuNzA4NSA1NTEuNjE3NzMsMTQzMy4xMjUgNTUwLjU4MzA5LDE0MzIuNjI0MiBDIDU0OS41NDg0NCwxNDMyLjEzMTcgNTQ4Ljc1NzExLDE0MzEuNDQ0MyA1NDguMjIyMDcsMTQzMC41NjkxIEMgNTQ3LjY4ODIxLDE0MjkuNjkzOSA1NDcuNDE2NTYsMTQyOC43MjkgNTQ3LjQxNjU2LDE0MjcuNjczMSBDIDU0Ny40MTY1NiwxNDI2LjcwODEgNTQ3LjYzODYsMTQyNS44MTk5IDU0OC4wODM4OCwxNDI1LjAwMDIgQyA1NDguNTIwODksMTQyNC4xNzM1IDU0OS4xMjU2MSwxNDIzLjQ5MzEgNTQ5Ljg4MTUyLDE0MjIuOTUxIEMgNTUwLjQ1MTk5LDE0MjIuNTM1MyA1NTEuMjI5MTYsMTQyMi4xNzM5IDU1Mi4yMDgyOSwxNDIxLjg4MjEgQyA1NTMuMTk0NTEsMTQyMS41OTA0IDU1NC4yNTA0MiwxNDIxLjQ0MzkgNTU1LjM3NDgzLDE0MjEuNDQzOSBDIDU1Ny4wNjk3MSwxNDIxLjQ0MzkgNTU4LjU1NTU0LDE0MjEuNjk0MyA1NTkuODQwNTgsMTQyMi4xODA5IEMgNTYxLjEyNDQ0LDE0MjIuNjY2NCA1NjIuMDY5MzIsMTQyMy4zMjY2IDU2Mi42Nzk5NSwxNDI0LjE1OTMgQyA1NjMuMjkxNzYsMTQyNS4wMDAyIDU2My43MDg2OSwxNDI2LjExMDUgNTYzLjkzNzgyLDE0MjcuNTA2NSBMIDU2MC4zNjE0NCwxNDI4LjAwMDIgQyA1NjAuMTk0OTEsMTQyNi44ODg4IDU1OS43MjI0NywxNDI2LjAyMDcgNTU4Ljk0NDEyLDE0MjUuMzk1OSBDIDU1OC4xNjY5NiwxNDI0Ljc3MTEgNTU3LjA2MjYyLDE0MjQuNDU4MSA1NTUuNjM5NCwxNDI0LjQ1ODEgQyA1NTMuOTU4NjksMTQyNC40NTgxIDU1Mi43NTc1MSwxNDI0LjczNTcgNTUyLjA0MTc2LDE0MjUuMjkyIEMgNTUxLjMyMDExLDE0MjUuODQ3MSA1NTAuOTU4NjksMTQyNi41MDAyIDU1MC45NTg2OSwxNDI3LjI0MzIgQyA1NTAuOTU4NjksMTQyNy43MjE1IDU1MS4xMTEwNSwxNDI4LjE0NTUgNTUxLjQwOTg3LDE0MjguNTI4MiBDIDU1MS43MDg2OSwxNDI4LjkyMzkgNTUyLjE3NDA1LDE0MjkuMjQyOCA1NTIuODEzMDIsMTQyOS41MDczIEMgNTUzLjE4MDM1LDE0MjkuNjM4NCA1NTQuMjU3NTEsMTQyOS45NTE0IDU1Ni4wNDgwNiwxNDMwLjQzNjkgQyA1NTguNjM4MjIsMTQzMS4xMzEzIDU2MC40NDQxMiwxNDMxLjY5NDcgNTYxLjQ2NDYsMTQzMi4xMzg4IEMgNTYyLjQ5MzM0LDE0MzIuNTc1OCA1NjMuMjk4ODUsMTQzMy4yMjE5IDU2My44ODIzMiwxNDM0LjA2MTcgQyA1NjQuNDY0NjEsMTQzNC45MDI2IDU2NC43NTYzNCwxNDM1Ljk0NDMgNTY0Ljc1NjM0LDE0MzcuMTkzOSBDIDU2NC43NTYzNCwxNDM4LjQxNjQgNTY0LjM5NjEsMTQzOS41NjIgNTYzLjY4NzQ0LDE0NDAuNjQ1MSBDIDU2Mi45NzE2OSwxNDQxLjcyMjMgNTYxLjk0NDEzLDE0NDIuNTU1IDU2MC42MDM1OCwxNDQzLjE0NTUgQyA1NTkuMjY0MjEsMTQ0My43MzYxIDU1Ny43NDI5NSwxNDQ0LjAyNzggNTU2LjA0ODA3LDE0NDQuMDI3OCBDIDU1My4yMzU4NywxNDQ0LjAyNzggNTUxLjA5Njg5LDE0NDMuNDQ0MyA1NDkuNjI1MjQsMTQ0Mi4yNzc0IEMgNTQ4LjE1MjQxLDE0NDEuMTEwNSA1NDcuMjE1NzksMTQzOS4zODEzIDU0Ni44MTMwNCwxNDM3LjA5IEwgNTQ2LjgxMywxNDM3LjA5IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoOTciIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDU4My44OTQsMTQzNi41OCBMIDU4Ny42NzgyNSwxNDM3LjA0NTQgQyA1ODcuMDgwNjEsMTQzOS4yNTk5IDU4NS45Nzc0NiwxNDQwLjk3NDkgNTg0LjM2NjQ0LDE0NDIuMTk3MyBDIDU4Mi43NDgzMywxNDQzLjQxMjcgNTgwLjY4NDk0LDE0NDQuMDI0NSA1NzguMTc4NjQsMTQ0NC4wMjQ1IEMgNTc1LjAxOTE5LDE0NDQuMDI0NSA1NzIuNTExNzEsMTQ0My4wNTEzIDU3MC42NjQ0NywxNDQxLjEwNzIgQyA1NjguODEwMTQsMTQzOS4xNjMxIDU2Ny44ODY1MiwxNDM2LjQzMzYgNTY3Ljg4NjUyLDE0MzIuOTE5OCBDIDU2Ny44ODY1MiwxNDI5LjI4MDggNTY4LjgyNDMxLDE0MjYuNDYxNSA1NzAuNjkyODIsMTQyNC40NTQ4IEMgNTcyLjU2NzIzLDE0MjIuNDQ4MSA1NzQuOTkwODUsMTQyMS40NDA2IDU3Ny45NzY2OCwxNDIxLjQ0MDYgQyA1ODAuODY1NjYsMTQyMS40NDA2IDU4My4yMjY2OCwxNDIyLjQyNjkgNTg1LjA1Mzg1LDE0MjQuMzkyMiBDIDU4Ni44ODY5MiwxNDI2LjM1NzYgNTg3LjgwMzQ2LDE0MjkuMTI4NCA1ODcuODAzNDYsMTQzMi42OTA2IEMgNTg3LjgwMzQ2LDE0MzIuOTEyNyA1ODcuNzk2MzcsMTQzMy4yMzk5IDU4Ny43ODIyLDE0MzMuNjY5OCBMIDU3MS42NzIsMTQzMy42Njk4IEMgNTcxLjgwNDI4LDE0MzYuMDQ1IDU3Mi40Nzc1MSwxNDM3Ljg2MzkgNTczLjY4NTc4LDE0MzkuMTIxNyBDIDU3NC44OTQwNSwxNDQwLjM4NTUgNTc2LjM5NDA1LDE0NDEuMDE3NCA1NzguMTk5OTUsMTQ0MS4wMTc0IEMgNTc5LjUzOTMyLDE0NDEuMDE3NCA1ODAuNjg0OTksMTQ0MC42NjMxIDU4MS42MzY5NiwxNDM5Ljk1NDQgQyA1ODIuNTg3NzUsMTQzOS4yNTI5IDU4My4zMzc3NSwxNDM4LjEyODQgNTgzLjg5NDA1LDE0MzYuNTggTCA1ODMuODk0LDE0MzYuNTggeiBNIDU3MS44NzI3LDE0MzAuNjU2OCBMIDU4My45MzUzLDE0MzAuNjU2OCBDIDU4My43NzU4NSwxNDI4Ljg0MzggNTgzLjMxMDUsMTQyNy40NzYxIDU4Mi41NTM0MSwxNDI2LjU3MjUgQyA1ODEuMzg2NDgsMTQyNS4xNjM1IDU3OS44NzM0OSwxNDI0LjQ1NDggNTc4LjAxOTE2LDE0MjQuNDU0OCBDIDU3Ni4zMzg0NSwxNDI0LjQ1NDggNTc0LjkyMTEzLDE0MjUuMDE3IDU3My43NzU0NiwxNDI2LjE0MjYgQyA1NzIuNjI5NzksMTQyNy4yNjcgNTcxLjk5NzksMTQyOC43NzQxIDU3MS44NzI3LDE0MzAuNjU2OCBMIDU3MS44NzI3LDE0MzAuNjU2OCB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDk5IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA2MDIuNDkxLDE0MzIuNzQgQyA2MDIuNDkxLDE0MjguNzQwOCA2MDMuNjAyNDIsMTQyNS43NzUgNjA1LjgzMTE2LDE0MjMuODUyMiBDIDYwNy42ODU0OSwxNDIyLjI1NDIgNjA5Ljk0OTY2LDE0MjEuNDQ4NyA2MTIuNjIyNSwxNDIxLjQ0ODcgQyA2MTUuNTk1MzMsMTQyMS40NDg3IDYxOC4wMjQ4NiwxNDIyLjQyMTkgNjE5LjkwNzU0LDE0MjQuMzczMSBDIDYyMS43OTYxMiwxNDI2LjMxNzIgNjIyLjczMzkyLDE0MjkuMDA0MiA2MjIuNzMzOTIsMTQzMi40MzUzIEMgNjIyLjczMzkyLDE0MzUuMjE5MSA2MjIuMzE2OTksMTQzNy40MDc3IDYyMS40ODMxMywxNDM4Ljk5NzUgQyA2MjAuNjUwNDUsMTQ0MC41OTQzIDYxOS40MzUxLDE0NDEuODMwOSA2MTcuODQ1MzMsMTQ0Mi43MTIgQyA2MTYuMjQ3MywxNDQzLjU5NDMgNjE0LjUxMTA4LDE0NDQuMDMyNSA2MTIuNjIyNSwxNDQ0LjAzMjUgQyA2MDkuNjAyNDIsMTQ0NC4wMzI1IDYwNy4xNTc1NCwxNDQzLjA2NjQgNjA1LjI4OTA0LDE0NDEuMTIyMyBDIDYwMy40MjE3MiwxNDM5LjE4NTMgNjAyLjQ5MTAxLDE0MzYuMzkzMSA2MDIuNDkxMDEsMTQzMi43NCBMIDYwMi40OTEsMTQzMi43NCB6IE0gNjA2LjI1NTE3LDE0MzIuNzQgQyA2MDYuMjU1MTcsMTQzNS41MTA5IDYwNi44NTg3MSwxNDM3LjU4MTMgNjA4LjA2Njk4LDE0MzguOTU2MSBDIDYwOS4yNzUyNSwxNDQwLjMzOCA2MTAuNzk2NTEsMTQ0MS4wMjU0IDYxMi42MjI0OSwxNDQxLjAyNTQgQyA2MTQuNDQyNTcsMTQ0MS4wMjU0IDYxNS45NTU1NiwxNDQwLjMzMDkgNjE3LjE2MzgzLDE0MzguOTQ5IEMgNjE4LjM2NjE5LDE0MzcuNTY3MiA2MTguOTY5NzQsMTQzNS40NTU0IDYxOC45Njk3NCwxNDMyLjYyMzEgQyA2MTguOTY5NzQsMTQyOS45NDkgNjE4LjM2NjIsMTQyNy45MjExIDYxNy4xNTA4NCwxNDI2LjU0NjMgQyA2MTUuOTM1NDksMTQyNS4xNzE1IDYxNC40Mjg0LDE0MjQuNDg0MSA2MTIuNjIyNDksMTQyNC40ODQxIEMgNjEwLjc5NjUxLDE0MjQuNDg0MSA2MDkuMjc1MjUsMTQyNS4xNzE1IDYwOC4wNjY5OCwxNDI2LjUzOTIgQyA2MDYuODU4NzEsMTQyNy45MDY5IDYwNi4yNTUxNywxNDI5Ljk3NjIgNjA2LjI1NTE3LDE0MzIuNzQgTCA2MDYuMjU1MTcsMTQzMi43NCB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDEwMSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gNjI3LjAzMiwxNDQzLjU0IEwgNjI3LjAzMiwxNDIxLjkzNjUgTCA2MzAuMzIzNzMsMTQyMS45MzY1IEwgNjMwLjMyMzczLDE0MjUuMDA2MiBDIDYzMS45MTQ2NywxNDIyLjYzMSA2MzQuMjA2MDEsMTQyMS40NDI4IDYzNy4xOTg5MywxNDIxLjQ0MjggQyA2MzguNTA0MDUsMTQyMS40NDI4IDYzOS42OTgxNCwxNDIxLjY3OSA2NDAuNzg5NDgsMTQyMi4xNDQ0IEMgNjQxLjg4NjcyLDE0MjIuNjE2OCA2NDIuNjk4MTQsMTQyMy4yMjc0IDY0My4yNDAyNywxNDIzLjk5MTYgQyA2NDMuNzg5NDgsMTQyNC43NDg3IDY0NC4xNjM4OSwxNDI1LjY1MTEgNjQ0LjM4NTk0LDE0MjYuNjkyOCBDIDY0NC41MTgyMiwxNDI3LjM3NDMgNjQ0LjU4NzkxLDE0MjguNTYxMyA2NDQuNTg3OTEsMTQzMC4yNTYyIEwgNjQ0LjU4NzkxLDE0NDMuNTQwMSBMIDY0MC45MjA1OSwxNDQzLjU0MDEgTCA2NDAuOTIwNTksMTQzMC4zOTQ0IEMgNjQwLjkyMDU5LDE0MjguOTA4NiA2NDAuNzgyNCwxNDI3Ljc5MDEgNjQwLjQ5Nzc1LDE0MjcuMDQ3MSBDIDY0MC4yMTMxMSwxNDI2LjMxMTMgNjM5LjcwNTIzLDE0MjUuNzIwOCA2MzguOTgzNTgsMTQyNS4yODM4IEMgNjM4LjI1NDg0LDE0MjQuODM5NyA2MzcuNDA2ODEsMTQyNC42MTY0IDYzNi40Mjc2NywxNDI0LjYxNjQgQyA2MzQuODY1MDcsMTQyNC42MTY0IDYzMy41MjU3LDE0MjUuMTE3MiA2MzIuMzg1OTQsMTQyNi4xMDM0IEMgNjMxLjI1NDQ0LDE0MjcuMDk1NiA2MzAuNjkyMjQsMTQyOC45NzEyIDYzMC42OTIyNCwxNDMxLjc0MiBMIDYzMC42OTIyNCwxNDQzLjU0IEwgNjI3LjAzMiwxNDQzLjU0IEwgNjI3LjAzMiwxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTAzIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA5ODguNTE3LDE0NDAuODggQyA5ODcuMTU1MTksMTQ0Mi4wMzI4IDk4NS44NTAwNywxNDQyLjg0NTQgOTg0LjYwMDQ2LDE0NDMuMzI0OSBDIDk4My4zNDI1OSwxNDQzLjc5NzMgOTgxLjk5NjEzLDE0NDQuMDMzNSA5ODAuNTU4NzMsMTQ0NC4wMzM1IEMgOTc4LjE4MzUzLDE0NDQuMDMzNSA5NzYuMzY0NjQsMTQ0My40NTcyIDk3NS4wODY2OCwxNDQyLjI5NzMgQyA5NzMuODE1ODEsMTQ0MS4xMzc1IDk3My4xNzY4NCwxNDM5LjY1MTcgOTczLjE3Njg0LDE0MzcuODUyOCBDIDk3My4xNzY4NCwxNDM2Ljc4OTggOTczLjQxMzA2LDE0MzUuODI0OSA5NzMuODk4NDksMTQzNC45NDk3IEMgOTc0LjM3ODAyLDE0MzQuMDc0NSA5NzUuMDA5OTEsMTQzMy4zNzQxIDk3NS43ODgyNSwxNDMyLjg0NjEgQyA5NzYuNTcyNTEsMTQzMi4zMTgyIDk3Ny40NDc3LDE0MzEuOTE1NCA5NzguNDI2ODMsMTQzMS42NDUgQyA5NzkuMTQxNCwxNDMxLjQ1NzIgOTgwLjIyNTY1LDE0MzEuMjY5NCA5ODEuNjc2MDQsMTQzMS4wOTU3IEMgOTg0LjYzNDcsMTQzMC43NDE0IDk4Ni44MTUwMiwxNDMwLjMyNDUgOTg4LjIxMTA4LDE0MjkuODMyIEMgOTg4LjIyNTI2LDE0MjkuMzMyNCA5ODguMjMyMzQsMTQyOS4wMTIzIDk4OC4yMzIzNCwxNDI4Ljg4IEMgOTg4LjIzMjM0LDE0MjcuMzg3MSA5ODcuODg1MSwxNDI2LjMzMjQgOTg3LjE5MDYxLDE0MjUuNzI3NiBDIDk4Ni4yNTk5LDE0MjQuODk1IDk4NC44NjM4NCwxNDI0LjQ4NTEgOTgzLjAyMzY4LDE0MjQuNDg1MSBDIDk4MS4zMDE2MywxNDI0LjQ4NTEgOTgwLjAzMDc3LDE0MjQuNzgzOSA5NzkuMjAzOTksMTQyNS4zODc1IEMgOTc4LjM4NDMxLDE0MjUuOTkyMiA5NzcuNzgwNzYsMTQyNy4wNjExIDk3Ny4zODUwOSwxNDI4LjU5NTQgTCA5NzMuODA4NzEsMTQyOC4xMDI4IEMgOTc0LjEzNDcsMTQyNi41NzU3IDk3NC42Njk3NCwxNDI1LjMzMiA5NzUuNDEyNjUsMTQyNC4zOTQyIEMgOTc2LjE1NTU3LDE0MjMuNDUwNSA5NzcuMjM4NjMsMTQyMi43MjA2IDk3OC42NDg4NywxNDIyLjIxMzkgQyA5ODAuMDU3OTMsMTQyMS43MDcyIDk4MS42OTAyMSwxNDIxLjQ0OTcgOTgzLjU1MTYzLDE0MjEuNDQ5NyBDIDk4NS4zOTg4NywxNDIxLjQ0OTcgOTg2Ljg5MTc5LDE0MjEuNjcyOSA5ODguMDQ0NTQsMTQyMi4xMDI4IEMgOTg5LjE5NzMsMTQyMi41NDEgOTkwLjA0NDE1LDE0MjMuMDgyIDk5MC41OTMzNiwxNDIzLjc0MjIgQyA5OTEuMTM0MzEsMTQyNC40MDEzIDk5MS41MDk5LDE0MjUuMjI4IDk5MS43MzE5NCwxNDI2LjIzNDMgQyA5OTEuODUwMDUsMTQyNi44NjAzIDk5MS45MTI2NSwxNDI3Ljk4NDcgOTkxLjkxMjY1LDE0MjkuNjA5OSBMIDk5MS45MTI2NSwxNDM0LjQ5MTQgQyA5OTEuOTEyNjUsMTQzNy45MDEzIDk5MS45ODgyNCwxNDQwLjA1NDQgOTkyLjE0ODg3LDE0NDAuOTQ5NyBDIDk5Mi4zMDEyMywxNDQxLjg1MjEgOTkyLjYxNDIzLDE0NDIuNzIwMiA5OTMuMDcyNDksMTQ0My41NDY5IEwgOTg5LjI0NTcyLDE0NDMuNTQ2OSBDIDk4OC44NzEzMiwxNDQyLjc4OTkgOTg4LjYyMDkyLDE0NDEuOTAxNyA5ODguNTE2OTgsMTQ0MC44OCBMIDk4OC41MTcsMTQ0MC44OCB6IE0gOTg4LjIxMTA5LDE0MzIuNjk5NyBDIDk4Ni44Nzc2MywxNDMzLjI0ODkgOTg0Ljg4NTExLDE0MzMuNzA3MiA5ODIuMjMyMzUsMTQzNC4wODg3IEMgOTgwLjcyNTI2LDE0MzQuMzAzNiA5NzkuNjU1MTgsMTQzNC41NDY5IDk3OS4wMzc0NywxNDM0LjgxNzQgQyA5NzguNDEyNjcsMTQzNS4wODkxIDk3Ny45MjYwNSwxNDM1LjQ4NDcgOTc3LjU5Mjk4LDE0MzYuMDEyNyBDIDk3Ny4yNTI4MywxNDM2LjUzMzYgOTc3LjA3OTIsMTQzNy4xMDk5IDk3Ny4wNzkyLDE0MzcuNzQ4OSBDIDk3Ny4wNzkyLDE0MzguNzI4IDk3Ny40NTQ3OSwxNDM5LjU0MDYgOTc4LjE5MDYyLDE0NDAuMTkyNiBDIDk3OC45MjY0NSwxNDQwLjgzODcgOTgwLjAwOTUyLDE0NDEuMTY0NyA5ODEuNDMzOTMsMTQ0MS4xNjQ3IEMgOTgyLjg0Mjk5LDE0NDEuMTY0NyA5ODQuMDk5NjgsMTQ0MC44NTk5IDk4NS4xOTY5MiwxNDQwLjI0MSBDIDk4Ni4yOTQxNiwxNDM5LjYyMzMgOTg3LjEwNjc2LDE0MzguNzc2NSA5ODcuNjIwNTQsMTQzNy43MDY0IEMgOTg4LjAxNjIxLDE0MzYuODgwOCA5ODguMjExMDksMTQzNS42NTg0IDk4OC4yMTEwOSwxNDM0LjA0NzMgTCA5ODguMjExMDksMTQzMi42OTk3IEwgOTg4LjIxMTA5LDE0MzIuNjk5NyB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDEwNSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTAxMS42MSwxNDQzLjU0IEwgMTAxMS42MSwxNDQwLjgxMDUgQyAxMDEwLjI0MjMsMTQ0Mi45NTY1IDEwMDguMjI4NSwxNDQ0LjAyNjYgMTAwNS41Njg3LDE0NDQuMDI2NiBDIDEwMDMuODQ2NiwxNDQ0LjAyNjYgMTAwMi4yNjI4LDE0NDMuNTU0MiAxMDAwLjgxODMsMTQ0Mi42MDIyIEMgOTk5LjM3Mzc4LDE0NDEuNjU4NSA5OTguMjU2NDYsMTQ0MC4zMzIxIDk5Ny40NTgwMywxNDM4LjYyMzEgQyA5OTYuNjY1NTEsMTQzNi45MjIzIDk5Ni4yNjk4NCwxNDM0Ljk3MTEgOTk2LjI2OTg0LDE0MzIuNzU1MyBDIDk5Ni4yNjk4NCwxNDMwLjYwMjIgOTk2LjYzMTI2LDE0MjguNjQzOSA5OTcuMzQ3MDEsMTQyNi44ODc2IEMgOTk4LjA2ODY2LDE0MjUuMTMwMiA5OTkuMTQ0NjUsMTQyMy43ODM3IDEwMDAuNTgyMSwxNDIyLjg1MyBDIDEwMDIuMDIwNiwxNDIxLjkxNTIgMTAwMy42MzE3LDE0MjEuNDQyNyAxMDA1LjQwOTIsMTQyMS40NDI3IEMgMTAwNi43MDczLDE0MjEuNDQyNyAxMDA3Ljg2NzEsMTQyMS43MjE1IDEwMDguODgwNSwxNDIyLjI2OTUgQyAxMDA5LjkwMjEsMTQyMi44MTg3IDEwMTAuNzI3NywxNDIzLjUzMzMgMTAxMS4zNjY3LDE0MjQuNDE1NiBMIDEwMTEuMzY2NywxNDEzLjcxNDggTCAxMDE1LjAwNTcsMTQxMy43MTQ4IEwgMTAxNS4wMDU3LDE0NDMuNTQgTCAxMDExLjYxLDE0NDMuNTQgTCAxMDExLjYxLDE0NDMuNTQgeiBNIDEwMDAuMDM0LDE0MzIuNzU1NCBDIDEwMDAuMDM0LDE0MzUuNTI2MyAxMDAwLjYxNzUsMTQzNy41OTU2IDEwMDEuNzg0NCwxNDM4Ljk2MzMgQyAxMDAyLjk1MDEsMTQ0MC4zMzIyIDEwMDQuMzI2MSwxNDQxLjAxOTYgMTAwNS45MTU5LDE0NDEuMDE5NiBDIDEwMDcuNTEyNywxNDQxLjAxOTYgMTAwOC44NzQ2LDE0NDAuMzU5MyAxMDA5Ljk5MTksMTQzOS4wNTQyIEMgMTAxMS4xMTA0LDE0MzcuNzQ3OSAxMDExLjY3MjYsMTQzNS43NDgzIDEwMTEuNjcyNiwxNDMzLjA2MTMgQyAxMDExLjY3MjYsMTQzMC4xMDI3IDEwMTEuMTAzMywxNDI3LjkzNjUgMTAwOS45NjQ3LDE0MjYuNTU0NiBDIDEwMDguODI0OSwxNDI1LjE2NTYgMTAwNy40MjMsMTQyNC40NzgyIDEwMDUuNzQ5NCwxNDI0LjQ3ODIgQyAxMDA0LjEyNDIsMTQyNC40NzgyIDEwMDIuNzYzNSwxNDI1LjE0NDQgMTAwMS42NzM0LDE0MjYuNDcwOCBDIDEwMDAuNTgyLDE0MjcuNzk3MSAxMDAwLjAzNCwxNDI5Ljg5NDggMTAwMC4wMzQsMTQzMi43NTU0IEwgMTAwMC4wMzQsMTQzMi43NTU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTA3IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxMDIwLjc4LDE0MTcuOTMgTCAxMDIwLjc4LDE0MTMuNzE1OCBMIDEwMjQuNDQ2MSwxNDEzLjcxNTggTCAxMDI0LjQ0NjEsMTQxNy45MyBMIDEwMjAuNzgsMTQxNy45MyB6IE0gMTAyMC43OCwxNDQzLjU0MSBMIDEwMjAuNzgsMTQyMS45Mzc1IEwgMTAyNC40NDYxLDE0MjEuOTM3NSBMIDEwMjQuNDQ2MSwxNDQzLjU0MSBMIDEwMjAuNzgsMTQ0My41NDEgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxMDkiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDEwNDQuODEsMTQzNi41OCBMIDEwNDguNTk0MiwxNDM3LjA0NTQgQyAxMDQ3Ljk5NjYsMTQzOS4yNTk5IDEwNDYuODkzNSwxNDQwLjk3NDkgMTA0NS4yODI0LDE0NDIuMTk3MyBDIDEwNDMuNjY0MywxNDQzLjQxMjcgMTA0MS42MDA5LDE0NDQuMDI0NSAxMDM5LjA5NDYsMTQ0NC4wMjQ1IEMgMTAzNS45MzUyLDE0NDQuMDI0NSAxMDMzLjQyNzcsMTQ0My4wNTEzIDEwMzEuNTgwNSwxNDQxLjEwNzIgQyAxMDI5LjcyNjEsMTQzOS4xNjMxIDEwMjguODAyNSwxNDM2LjQzMzYgMTAyOC44MDI1LDE0MzIuOTE5OCBDIDEwMjguODAyNSwxNDI5LjI4MDggMTAyOS43NDAzLDE0MjYuNDYxNSAxMDMxLjYwODgsMTQyNC40NTQ4IEMgMTAzMy40ODMyLDE0MjIuNDQ4MSAxMDM1LjkwNjksMTQyMS40NDA2IDEwMzguODkyNywxNDIxLjQ0MDYgQyAxMDQxLjc4MTcsMTQyMS40NDA2IDEwNDQuMTQyNywxNDIyLjQyNjkgMTA0NS45Njk5LDE0MjQuMzkyMiBDIDEwNDcuODAyOSwxNDI2LjM1NzYgMTA0OC43MTk1LDE0MjkuMTI4NCAxMDQ4LjcxOTUsMTQzMi42OTA2IEMgMTA0OC43MTk1LDE0MzIuOTEyNyAxMDQ4LjcxMjQsMTQzMy4yMzk5IDEwNDguNjk4MiwxNDMzLjY2OTggTCAxMDMyLjU4OCwxNDMzLjY2OTggQyAxMDMyLjcyMDMsMTQzNi4wNDUgMTAzMy4zOTM1LDE0MzcuODYzOSAxMDM0LjYwMTgsMTQzOS4xMjE3IEMgMTAzNS44MTAxLDE0NDAuMzg1NSAxMDM3LjMxMDEsMTQ0MS4wMTc0IDEwMzkuMTE2LDE0NDEuMDE3NCBDIDEwNDAuNDU1MywxNDQxLjAxNzQgMTA0MS42MDEsMTQ0MC42NjMxIDEwNDIuNTUzLDE0MzkuOTU0NCBDIDEwNDMuNTAzNywxNDM5LjI1MjkgMTA0NC4yNTM4LDE0MzguMTI4NCAxMDQ0LjgxMDEsMTQzNi41OCBMIDEwNDQuODEsMTQzNi41OCB6IE0gMTAzMi43ODg3LDE0MzAuNjU2OCBMIDEwNDQuODUxMywxNDMwLjY1NjggQyAxMDQ0LjY5MTksMTQyOC44NDM4IDEwNDQuMjI2NSwxNDI3LjQ3NjEgMTA0My40Njk0LDE0MjYuNTcyNSBDIDEwNDIuMzAyNSwxNDI1LjE2MzUgMTA0MC43ODk1LDE0MjQuNDU0OCAxMDM4LjkzNTIsMTQyNC40NTQ4IEMgMTAzNy4yNTQ0LDE0MjQuNDU0OCAxMDM1LjgzNzEsMTQyNS4wMTcgMTAzNC42OTE1LDE0MjYuMTQyNiBDIDEwMzMuNTQ1OCwxNDI3LjI2NyAxMDMyLjkxMzksMTQyOC43NzQxIDEwMzIuNzg4NywxNDMwLjY1NjggTCAxMDMyLjc4ODcsMTQzMC42NTY4IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTExIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxMDUzLjE5LDE0NDMuNTQgTCAxMDUzLjE5LDE0MjEuOTM2NSBMIDEwNTYuNDgxNywxNDIxLjkzNjUgTCAxMDU2LjQ4MTcsMTQyNS4wMDYyIEMgMTA1OC4wNzI3LDE0MjIuNjMxIDEwNjAuMzY0LDE0MjEuNDQyOCAxMDYzLjM1NjksMTQyMS40NDI4IEMgMTA2NC42NjIsMTQyMS40NDI4IDEwNjUuODU2MSwxNDIxLjY3OSAxMDY2Ljk0NzUsMTQyMi4xNDQ0IEMgMTA2OC4wNDQ3LDE0MjIuNjE2OCAxMDY4Ljg1NjEsMTQyMy4yMjc0IDEwNjkuMzk4MywxNDIzLjk5MTYgQyAxMDY5Ljk0NzUsMTQyNC43NDg3IDEwNzAuMzIxOSwxNDI1LjY1MTEgMTA3MC41NDM5LDE0MjYuNjkyOCBDIDEwNzAuNjc2MiwxNDI3LjM3NDMgMTA3MC43NDU5LDE0MjguNTYxMyAxMDcwLjc0NTksMTQzMC4yNTYyIEwgMTA3MC43NDU5LDE0NDMuNTQwMSBMIDEwNjcuMDc4NiwxNDQzLjU0MDEgTCAxMDY3LjA3ODYsMTQzMC4zOTQ0IEMgMTA2Ny4wNzg2LDE0MjguOTA4NiAxMDY2Ljk0MDQsMTQyNy43OTAxIDEwNjYuNjU1OCwxNDI3LjA0NzEgQyAxMDY2LjM3MTEsMTQyNi4zMTEzIDEwNjUuODYzMiwxNDI1LjcyMDggMTA2NS4xNDE2LDE0MjUuMjgzOCBDIDEwNjQuNDEyOCwxNDI0LjgzOTcgMTA2My41NjQ4LDE0MjQuNjE2NCAxMDYyLjU4NTcsMTQyNC42MTY0IEMgMTA2MS4wMjMxLDE0MjQuNjE2NCAxMDU5LjY4MzcsMTQyNS4xMTcyIDEwNTguNTQzOSwxNDI2LjEwMzQgQyAxMDU3LjQxMjQsMTQyNy4wOTU2IDEwNTYuODUwMiwxNDI4Ljk3MTIgMTA1Ni44NTAyLDE0MzEuNzQyIEwgMTA1Ni44NTAyLDE0NDMuNTQgTCAxMDUzLjE5LDE0NDMuNTQgTCAxMDUzLjE5LDE0NDMuNTQgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxMTMiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDEwODQuMzYsMTQ0MC4yNiBMIDEwODQuODg2OCwxNDQzLjQ5NjIgQyAxMDgzLjg1OTIsMTQ0My43MTEyIDEwODIuOTM1NiwxNDQzLjgyMjIgMTA4Mi4xMjMsMTQ0My44MjIyIEMgMTA4MC43OTA3LDE0NDMuODIyMiAxMDc5Ljc2MiwxNDQzLjYxNDMgMTA3OS4wMjYxLDE0NDMuMTkwMyBDIDEwNzguMjk3NCwxNDQyLjc3MzQgMTA3Ny43ODM2LDE0NDIuMjE4MyAxMDc3LjQ4NDgsMTQ0MS41MzA5IEMgMTA3Ny4xODYsMTQ0MC44NTA1IDEwNzcuMDMzNiwxNDM5LjQwNjEgMTA3Ny4wMzM2LDE0MzcuMjExNiBMIDEwNzcuMDMzNiwxNDI0Ljc4MDUgTCAxMDc0LjM0NTQsMTQyNC43ODA1IEwgMTA3NC4zNDU0LDE0MjEuOTM0IEwgMTA3Ny4wMzM2LDE0MjEuOTM0IEwgMTA3Ny4wMzM2LDE0MTYuNTgwMSBMIDEwODAuNjc4NSwxNDE0LjM4NTYgTCAxMDgwLjY3ODUsMTQyMS45MzQgTCAxMDg0LjM2LDE0MjEuOTM0IEwgMTA4NC4zNiwxNDI0Ljc4MDUgTCAxMDgwLjY3ODUsMTQyNC43ODA1IEwgMTA4MC42Nzg1LDE0MzcuNDEyNCBDIDEwODAuNjc4NSwxNDM4LjQ2MTIgMTA4MC43NDExLDE0MzkuMTI4NSAxMDgwLjg2NjMsMTQzOS40MjYyIEMgMTA4MC45OTg2LDE0MzkuNzI1IDEwODEuMjA2NSwxNDM5Ljk2MTIgMTA4MS40OTgyLDE0NDAuMTQxOSBDIDEwODEuNzg5OSwxNDQwLjMxNTUgMTA4Mi4yMDY4LDE0NDAuNDA1MyAxMDgyLjc0OSwxNDQwLjQwNTMgQyAxMDgzLjE1NzYsMTQ0MC40MDUzIDEwODMuNjkyNywxNDQwLjM1NjkgMTA4NC4zNiwxNDQwLjI2IEwgMTA4NC4zNiwxNDQwLjI2IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTE1IiAvPgotCi0gICA8cG9seWdvbgotICAgcG9pbnRzPSIxMDk4LjA5LDE0MzQuNTkgMTA5OC4wOSwxNDMwLjkxIDExMDkuMzUsMTQzMC45MSAxMTA5LjM1LDE0MzQuNTkgMTA5OC4wOSwxNDM0LjU5ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icG9seWdvbjExNyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTEzOC45OCwxNDQzLjU0IEwgMTEzOC45OCwxNDQwLjgxMDUgQyAxMTM3LjYxMjMsMTQ0Mi45NTY1IDExMzUuNTk4NSwxNDQ0LjAyNjYgMTEzMi45Mzg3LDE0NDQuMDI2NiBDIDExMzEuMjE2NiwxNDQ0LjAyNjYgMTEyOS42MzI4LDE0NDMuNTU0MiAxMTI4LjE4ODMsMTQ0Mi42MDIyIEMgMTEyNi43NDM4LDE0NDEuNjU4NSAxMTI1LjYyNjUsMTQ0MC4zMzIxIDExMjQuODI4LDE0MzguNjIzMSBDIDExMjQuMDM1NSwxNDM2LjkyMjMgMTEyMy42Mzk4LDE0MzQuOTcxMSAxMTIzLjYzOTgsMTQzMi43NTUzIEMgMTEyMy42Mzk4LDE0MzAuNjAyMiAxMTI0LjAwMTMsMTQyOC42NDM5IDExMjQuNzE3LDE0MjYuODg3NiBDIDExMjUuNDM4NywxNDI1LjEzMDIgMTEyNi41MTQ3LDE0MjMuNzgzNyAxMTI3Ljk1MjEsMTQyMi44NTMgQyAxMTI5LjM5MDYsMTQyMS45MTUyIDExMzEuMDAxNywxNDIxLjQ0MjcgMTEzMi43NzkyLDE0MjEuNDQyNyBDIDExMzQuMDc3MywxNDIxLjQ0MjcgMTEzNS4yMzcxLDE0MjEuNzIxNSAxMTM2LjI1MDUsMTQyMi4yNjk1IEMgMTEzNy4yNzIxLDE0MjIuODE4NyAxMTM4LjA5NzcsMTQyMy41MzMzIDExMzguNzM2NywxNDI0LjQxNTYgTCAxMTM4LjczNjcsMTQxMy43MTQ4IEwgMTE0Mi4zNzU3LDE0MTMuNzE0OCBMIDExNDIuMzc1NywxNDQzLjU0IEwgMTEzOC45OCwxNDQzLjU0IEwgMTEzOC45OCwxNDQzLjU0IHogTSAxMTI3LjQwNCwxNDMyLjc1NTQgQyAxMTI3LjQwNCwxNDM1LjUyNjMgMTEyNy45ODc1LDE0MzcuNTk1NiAxMTI5LjE1NDQsMTQzOC45NjMzIEMgMTEzMC4zMjAxLDE0NDAuMzMyMiAxMTMxLjY5NjEsMTQ0MS4wMTk2IDExMzMuMjg1OSwxNDQxLjAxOTYgQyAxMTM0Ljg4MjcsMTQ0MS4wMTk2IDExMzYuMjQ0NSwxNDQwLjM1OTMgMTEzNy4zNjE5LDE0MzkuMDU0MiBDIDExMzguNDgwNCwxNDM3Ljc0NzkgMTEzOS4wNDI2LDE0MzUuNzQ4MyAxMTM5LjA0MjYsMTQzMy4wNjEzIEMgMTEzOS4wNDI2LDE0MzAuMTAyNyAxMTM4LjQ3MzMsMTQyNy45MzY1IDExMzcuMzM0NywxNDI2LjU1NDYgQyAxMTM2LjE5NSwxNDI1LjE2NTYgMTEzNC43OTMsMTQyNC40NzgyIDExMzMuMTE5NCwxNDI0LjQ3ODIgQyAxMTMxLjQ5NDIsMTQyNC40NzgyIDExMzAuMTMzNSwxNDI1LjE0NDQgMTEyOS4wNDM0LDE0MjYuNDcwOCBDIDExMjcuOTUyLDE0MjcuNzk3MSAxMTI3LjQwNCwxNDI5Ljg5NDggMTEyNy40MDQsMTQzMi43NTU0IEwgMTEyNy40MDQsMTQzMi43NTU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTE5IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxMTQ4LjE2LDE0MTcuOTMgTCAxMTQ4LjE2LDE0MTMuNzE1OCBMIDExNTEuODI2MSwxNDEzLjcxNTggTCAxMTUxLjgyNjEsMTQxNy45MyBMIDExNDguMTYsMTQxNy45MyB6IE0gMTE0OC4xNiwxNDQzLjU0MSBMIDExNDguMTYsMTQyMS45Mzc1IEwgMTE1MS44MjYxLDE0MjEuOTM3NSBMIDExNTEuODI2MSwxNDQzLjU0MSBMIDExNDguMTYsMTQ0My41NDEgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxMjEiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDExNTguMjcsMTQ0My41NCBMIDExNTguMjcsMTQyNC43ODI5IEwgMTE1NS4wNDA5LDE0MjQuNzgyOSBMIDExNTUuMDQwOSwxNDIxLjkzNjQgTCAxMTU4LjI3LDE0MjEuOTM2NCBMIDExNTguMjcsMTQxOS42MzggQyAxMTU4LjI3LDE0MTguMTg2NCAxMTU4LjQwMjMsMTQxNy4xMDM0IDExNTguNjU4NiwxNDE2LjQwMTggQyAxMTU5LjAxMjksMTQxNS40NDk4IDExNTkuNjMxOCwxNDE0LjY3OTcgMTE2MC41MiwxNDE0LjA4OTIgQyAxMTYxLjQwOTQsMTQxMy40OTg2IDExNjIuNjUxOSwxNDEzLjIwNjkgMTE2NC4yNTU4LDE0MTMuMjA2OSBDIDExNjUuMjg0NiwxNDEzLjIwNjkgMTE2Ni40MjMyLDE0MTMuMzI1IDExNjcuNjcyOCwxNDEzLjU3NTQgTCAxMTY3LjEyNDcsMTQxNi43NzAzIEMgMTE2Ni4zNjc2LDE0MTYuNjMwOSAxMTY1LjY0NDgsMTQxNi41NjEyIDExNjQuOTY0NSwxNDE2LjU2MTIgQyAxMTYzLjg1MzEsMTQxNi41NjEyIDExNjMuMDY4OCwxNDE2Ljc5NzUgMTE2Mi42MTA2LDE0MTcuMjc3IEMgMTE2Mi4xNDUyLDE0MTcuNzQ5NCAxMTYxLjkxNjEsMTQxOC42Mzc2IDExNjEuOTE2MSwxNDE5Ljk0MjcgTCAxMTYxLjkxNjEsMTQyMS45MzY0IEwgMTE2Ni4xMjQzLDE0MjEuOTM2NCBMIDExNjYuMTI0MywxNDI0Ljc4MjkgTCAxMTYxLjkxNjEsMTQyNC43ODI5IEwgMTE2MS45MTYxLDE0NDMuNTQgTCAxMTU4LjI3LDE0NDMuNTQgTCAxMTU4LjI3LDE0NDMuNTQgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxMjMiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDExNjkuMDksMTQ0My41NCBMIDExNjkuMDksMTQyNC43ODI5IEwgMTE2NS44NjA5LDE0MjQuNzgyOSBMIDExNjUuODYwOSwxNDIxLjkzNjQgTCAxMTY5LjA5LDE0MjEuOTM2NCBMIDExNjkuMDksMTQxOS42MzggQyAxMTY5LjA5LDE0MTguMTg2NCAxMTY5LjIyMjMsMTQxNy4xMDM0IDExNjkuNDc4NiwxNDE2LjQwMTggQyAxMTY5LjgzMjksMTQxNS40NDk4IDExNzAuNDUxOCwxNDE0LjY3OTcgMTE3MS4zNCwxNDE0LjA4OTIgQyAxMTcyLjIyOTQsMTQxMy40OTg2IDExNzMuNDcxOSwxNDEzLjIwNjkgMTE3NS4wNzU4LDE0MTMuMjA2OSBDIDExNzYuMTA0NiwxNDEzLjIwNjkgMTE3Ny4yNDMyLDE0MTMuMzI1IDExNzguNDkyOCwxNDEzLjU3NTQgTCAxMTc3Ljk0NDcsMTQxNi43NzAzIEMgMTE3Ny4xODc2LDE0MTYuNjMwOSAxMTc2LjQ2NDgsMTQxNi41NjEyIDExNzUuNzg0NSwxNDE2LjU2MTIgQyAxMTc0LjY3MzEsMTQxNi41NjEyIDExNzMuODg4OCwxNDE2Ljc5NzUgMTE3My40MzA2LDE0MTcuMjc3IEMgMTE3Mi45NjUyLDE0MTcuNzQ5NCAxMTcyLjczNjEsMTQxOC42Mzc2IDExNzIuNzM2MSwxNDE5Ljk0MjcgTCAxMTcyLjczNjEsMTQyMS45MzY0IEwgMTE3Ni45NDQzLDE0MjEuOTM2NCBMIDExNzYuOTQ0MywxNDI0Ljc4MjkgTCAxMTcyLjczNjEsMTQyNC43ODI5IEwgMTE3Mi43MzYxLDE0NDMuNTQgTCAxMTY5LjA5LDE0NDMuNTQgTCAxMTY5LjA5LDE0NDMuNTQgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxMjUiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDExOTQuNTksMTQzNi41OCBMIDExOTguMzc0MiwxNDM3LjA0NTQgQyAxMTk3Ljc3NjYsMTQzOS4yNTk5IDExOTYuNjczNSwxNDQwLjk3NDkgMTE5NS4wNjI0LDE0NDIuMTk3MyBDIDExOTMuNDQ0MywxNDQzLjQxMjcgMTE5MS4zODA5LDE0NDQuMDI0NSAxMTg4Ljg3NDYsMTQ0NC4wMjQ1IEMgMTE4NS43MTUyLDE0NDQuMDI0NSAxMTgzLjIwNzcsMTQ0My4wNTEzIDExODEuMzYwNSwxNDQxLjEwNzIgQyAxMTc5LjUwNjEsMTQzOS4xNjMxIDExNzguNTgyNSwxNDM2LjQzMzYgMTE3OC41ODI1LDE0MzIuOTE5OCBDIDExNzguNTgyNSwxNDI5LjI4MDggMTE3OS41MjAzLDE0MjYuNDYxNSAxMTgxLjM4ODgsMTQyNC40NTQ4IEMgMTE4My4yNjMyLDE0MjIuNDQ4MSAxMTg1LjY4NjksMTQyMS40NDA2IDExODguNjcyNywxNDIxLjQ0MDYgQyAxMTkxLjU2MTcsMTQyMS40NDA2IDExOTMuOTIyNywxNDIyLjQyNjkgMTE5NS43NDk5LDE0MjQuMzkyMiBDIDExOTcuNTgyOSwxNDI2LjM1NzYgMTE5OC40OTk1LDE0MjkuMTI4NCAxMTk4LjQ5OTUsMTQzMi42OTA2IEMgMTE5OC40OTk1LDE0MzIuOTEyNyAxMTk4LjQ5MjQsMTQzMy4yMzk5IDExOTguNDc4MiwxNDMzLjY2OTggTCAxMTgyLjM2OCwxNDMzLjY2OTggQyAxMTgyLjUwMDMsMTQzNi4wNDUgMTE4My4xNzM1LDE0MzcuODYzOSAxMTg0LjM4MTgsMTQzOS4xMjE3IEMgMTE4NS41OTAxLDE0NDAuMzg1NSAxMTg3LjA5MDEsMTQ0MS4wMTc0IDExODguODk2LDE0NDEuMDE3NCBDIDExOTAuMjM1MywxNDQxLjAxNzQgMTE5MS4zODEsMTQ0MC42NjMxIDExOTIuMzMzLDE0MzkuOTU0NCBDIDExOTMuMjgzNywxNDM5LjI1MjkgMTE5NC4wMzM4LDE0MzguMTI4NCAxMTk0LjU5MDEsMTQzNi41OCBMIDExOTQuNTksMTQzNi41OCB6IE0gMTE4Mi41Njg3LDE0MzAuNjU2OCBMIDExOTQuNjMxMywxNDMwLjY1NjggQyAxMTk0LjQ3MTksMTQyOC44NDM4IDExOTQuMDA2NSwxNDI3LjQ3NjEgMTE5My4yNDk0LDE0MjYuNTcyNSBDIDExOTIuMDgyNSwxNDI1LjE2MzUgMTE5MC41Njk1LDE0MjQuNDU0OCAxMTg4LjcxNTIsMTQyNC40NTQ4IEMgMTE4Ny4wMzQ0LDE0MjQuNDU0OCAxMTg1LjYxNzEsMTQyNS4wMTcgMTE4NC40NzE1LDE0MjYuMTQyNiBDIDExODMuMzI1OCwxNDI3LjI2NyAxMTgyLjY5MzksMTQyOC43NzQxIDExODIuNTY4NywxNDMwLjY1NjggTCAxMTgyLjU2ODcsMTQzMC42NTY4IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTI3IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxMjAyLjkzLDE0NDMuNTQgTCAxMjAyLjkzLDE0MjEuOTM2NSBMIDEyMDYuMjIxNywxNDIxLjkzNjUgTCAxMjA2LjIyMTcsMTQyNS4yMDcgQyAxMjA3LjA2MTUsMTQyMy42Nzk4IDEyMDcuODM5OCwxNDIyLjY2NTIgMTIwOC41NTQ0LDE0MjIuMTc5OCBDIDEyMDkuMjYzMSwxNDIxLjY5MzIgMTIxMC4wNDczLDE0MjEuNDQyOCAxMjEwLjkwMjQsMTQyMS40NDI4IEMgMTIxMi4xMzc5LDE0MjEuNDQyOCAxMjEzLjM4ODcsMTQyMS44Mzk2IDEyMTQuNjY1NCwxNDIyLjYyMzkgTCAxMjEzLjQwMTcsMTQyNi4wMjY3IEMgMTIxMi41MTM1LDE0MjUuNDkxNiAxMjExLjYxNywxNDI1LjIyODIgMTIxMC43MjE3LDE0MjUuMjI4MiBDIDEyMDkuOTE2MiwxNDI1LjIyODIgMTIwOS4yMDA1LDE0MjUuNDcxNSAxMjA4LjU2MTUsMTQyNS45NDk5IEMgMTIwNy45MjI1LDE0MjYuNDM2NSAxMjA3LjQ3MTMsMTQyNy4xMDI2IDEyMDcuMjAwOSwxNDI3Ljk1NjYgQyAxMjA2Ljc5MSwxNDI5LjI1NTggMTIwNi41OTAyLDE0MzAuNjc5IDEyMDYuNTkwMiwxNDMyLjIyNzQgTCAxMjA2LjU5MDIsMTQ0My41NCBMIDEyMDIuOTMsMTQ0My41NCBMIDEyMDIuOTMsMTQ0My41NCB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDEyOSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTIzMS42MywxNDM2LjU4IEwgMTIzNS40MTQzLDE0MzcuMDQ1NCBDIDEyMzQuODE2NiwxNDM5LjI1OTkgMTIzMy43MTM1LDE0NDAuOTc0OSAxMjMyLjEwMjQsMTQ0Mi4xOTczIEMgMTIzMC40ODQzLDE0NDMuNDEyNyAxMjI4LjQyMDksMTQ0NC4wMjQ1IDEyMjUuOTE0NiwxNDQ0LjAyNDUgQyAxMjIyLjc1NTIsMTQ0NC4wMjQ1IDEyMjAuMjQ3NywxNDQzLjA1MTMgMTIxOC40MDA1LDE0NDEuMTA3MiBDIDEyMTYuNTQ2MSwxNDM5LjE2MzEgMTIxNS42MjI1LDE0MzYuNDMzNiAxMjE1LjYyMjUsMTQzMi45MTk4IEMgMTIxNS42MjI1LDE0MjkuMjgwOCAxMjE2LjU2MDMsMTQyNi40NjE1IDEyMTguNDI4OCwxNDI0LjQ1NDggQyAxMjIwLjMwMzIsMTQyMi40NDgxIDEyMjIuNzI2OSwxNDIxLjQ0MDYgMTIyNS43MTI3LDE0MjEuNDQwNiBDIDEyMjguNjAxNywxNDIxLjQ0MDYgMTIzMC45NjI3LDE0MjIuNDI2OSAxMjMyLjc4OTksMTQyNC4zOTIyIEMgMTIzNC42MjI5LDE0MjYuMzU3NiAxMjM1LjUzOTUsMTQyOS4xMjg0IDEyMzUuNTM5NSwxNDMyLjY5MDYgQyAxMjM1LjUzOTUsMTQzMi45MTI3IDEyMzUuNTMyNCwxNDMzLjIzOTkgMTIzNS41MTgyLDE0MzMuNjY5OCBMIDEyMTkuNDA4LDE0MzMuNjY5OCBDIDEyMTkuNTQwMywxNDM2LjA0NSAxMjIwLjIxMzUsMTQzNy44NjM5IDEyMjEuNDIxOCwxNDM5LjEyMTcgQyAxMjIyLjYzMDEsMTQ0MC4zODU1IDEyMjQuMTMwMSwxNDQxLjAxNzQgMTIyNS45MzYsMTQ0MS4wMTc0IEMgMTIyNy4yNzUzLDE0NDEuMDE3NCAxMjI4LjQyMSwxNDQwLjY2MzEgMTIyOS4zNzMsMTQzOS45NTQ0IEMgMTIzMC4zMjM3LDE0MzkuMjUyOSAxMjMxLjA3MzgsMTQzOC4xMjg0IDEyMzEuNjMwMSwxNDM2LjU4IEwgMTIzMS42MywxNDM2LjU4IHogTSAxMjE5LjYwODcsMTQzMC42NTY4IEwgMTIzMS42NzEzLDE0MzAuNjU2OCBDIDEyMzEuNTExOSwxNDI4Ljg0MzggMTIzMS4wNDY1LDE0MjcuNDc2MSAxMjMwLjI4OTQsMTQyNi41NzI1IEMgMTIyOS4xMjI1LDE0MjUuMTYzNSAxMjI3LjYwOTUsMTQyNC40NTQ4IDEyMjUuNzU1MiwxNDI0LjQ1NDggQyAxMjI0LjA3NDQsMTQyNC40NTQ4IDEyMjIuNjU3MSwxNDI1LjAxNyAxMjIxLjUxMTUsMTQyNi4xNDI2IEMgMTIyMC4zNjU4LDE0MjcuMjY3IDEyMTkuNzMzOSwxNDI4Ljc3NDEgMTIxOS42MDg3LDE0MzAuNjU2OCBMIDEyMTkuNjA4NywxNDMwLjY1NjggeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxMzEiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDEyNDAuMDIsMTQ0My41NCBMIDEyNDAuMDIsMTQyMS45MzY1IEwgMTI0My4zMTE3LDE0MjEuOTM2NSBMIDEyNDMuMzExNywxNDI1LjAwNjIgQyAxMjQ0LjkwMjcsMTQyMi42MzEgMTI0Ny4xOTQsMTQyMS40NDI4IDEyNTAuMTg2OSwxNDIxLjQ0MjggQyAxMjUxLjQ5MiwxNDIxLjQ0MjggMTI1Mi42ODYxLDE0MjEuNjc5IDEyNTMuNzc3NSwxNDIyLjE0NDQgQyAxMjU0Ljg3NDcsMTQyMi42MTY4IDEyNTUuNjg2MSwxNDIzLjIyNzQgMTI1Ni4yMjgzLDE0MjMuOTkxNiBDIDEyNTYuNzc3NSwxNDI0Ljc0ODcgMTI1Ny4xNTE5LDE0MjUuNjUxMSAxMjU3LjM3MzksMTQyNi42OTI4IEMgMTI1Ny41MDYyLDE0MjcuMzc0MyAxMjU3LjU3NTksMTQyOC41NjEzIDEyNTcuNTc1OSwxNDMwLjI1NjIgTCAxMjU3LjU3NTksMTQ0My41NDAxIEwgMTI1My45MDg2LDE0NDMuNTQwMSBMIDEyNTMuOTA4NiwxNDMwLjM5NDQgQyAxMjUzLjkwODYsMTQyOC45MDg2IDEyNTMuNzcwNCwxNDI3Ljc5MDEgMTI1My40ODU4LDE0MjcuMDQ3MSBDIDEyNTMuMjAxMSwxNDI2LjMxMTMgMTI1Mi42OTMyLDE0MjUuNzIwOCAxMjUxLjk3MTYsMTQyNS4yODM4IEMgMTI1MS4yNDI4LDE0MjQuODM5NyAxMjUwLjM5NDgsMTQyNC42MTY0IDEyNDkuNDE1NywxNDI0LjYxNjQgQyAxMjQ3Ljg1MzEsMTQyNC42MTY0IDEyNDYuNTEzNywxNDI1LjExNzIgMTI0NS4zNzM5LDE0MjYuMTAzNCBDIDEyNDQuMjQyNCwxNDI3LjA5NTYgMTI0My42ODAyLDE0MjguOTcxMiAxMjQzLjY4MDIsMTQzMS43NDIgTCAxMjQzLjY4MDIsMTQ0My41NCBMIDEyNDAuMDIsMTQ0My41NCBMIDEyNDAuMDIsMTQ0My41NCB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDEzMyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTI3MS4xOSwxNDQwLjI2IEwgMTI3MS43MTY4LDE0NDMuNDk2MiBDIDEyNzAuNjg5MiwxNDQzLjcxMTIgMTI2OS43NjU2LDE0NDMuODIyMiAxMjY4Ljk1MywxNDQzLjgyMjIgQyAxMjY3LjYyMDcsMTQ0My44MjIyIDEyNjYuNTkyLDE0NDMuNjE0MyAxMjY1Ljg1NjEsMTQ0My4xOTAzIEMgMTI2NS4xMjc0LDE0NDIuNzczNCAxMjY0LjYxMzYsMTQ0Mi4yMTgzIDEyNjQuMzE0OCwxNDQxLjUzMDkgQyAxMjY0LjAxNiwxNDQwLjg1MDUgMTI2My44NjM2LDE0MzkuNDA2MSAxMjYzLjg2MzYsMTQzNy4yMTE2IEwgMTI2My44NjM2LDE0MjQuNzgwNSBMIDEyNjEuMTc1NCwxNDI0Ljc4MDUgTCAxMjYxLjE3NTQsMTQyMS45MzQgTCAxMjYzLjg2MzYsMTQyMS45MzQgTCAxMjYzLjg2MzYsMTQxNi41ODAxIEwgMTI2Ny41MDg1LDE0MTQuMzg1NiBMIDEyNjcuNTA4NSwxNDIxLjkzNCBMIDEyNzEuMTksMTQyMS45MzQgTCAxMjcxLjE5LDE0MjQuNzgwNSBMIDEyNjcuNTA4NSwxNDI0Ljc4MDUgTCAxMjY3LjUwODUsMTQzNy40MTI0IEMgMTI2Ny41MDg1LDE0MzguNDYxMiAxMjY3LjU3MTEsMTQzOS4xMjg1IDEyNjcuNjk2MywxNDM5LjQyNjIgQyAxMjY3LjgyODYsMTQzOS43MjUgMTI2OC4wMzY1LDE0MzkuOTYxMiAxMjY4LjMyODIsMTQ0MC4xNDE5IEMgMTI2OC42MTk5LDE0NDAuMzE1NSAxMjY5LjAzNjgsMTQ0MC40MDUzIDEyNjkuNTc5LDE0NDAuNDA1MyBDIDEyNjkuOTg3NiwxNDQwLjQwNTMgMTI3MC41MjI3LDE0NDAuMzU2OSAxMjcxLjE5LDE0NDAuMjYgTCAxMjcxLjE5LDE0NDAuMjYgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxMzUiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDEzMDAuNDUsMTQzNS42MyBMIDEzMDQuMDQ2NSwxNDM2LjEwMjQgQyAxMzAzLjY1NzksMTQzOC41ODE2IDEzMDIuNjUwNCwxNDQwLjUyNTcgMTMwMS4wMjY0LDE0NDEuOTI4OCBDIDEyOTkuNDA4MywxNDQzLjMzMiAxMjk3LjQxNDYsMTQ0NC4wMzM1IDEyOTUuMDUzNiwxNDQ0LjAzMzUgQyAxMjkyLjEwMzIsMTQ0NC4wMzM1IDEyODkuNzIwOSwxNDQzLjA2NzQgMTI4Ny45MjkxLDE0NDEuMTM3NSBDIDEyODYuMTMwMywxNDM5LjIwNjQgMTI4NS4yMjgsMTQzNi40MzU1IDEyODUuMjI4LDE0MzIuODI0OSBDIDEyODUuMjI4LDE0MzAuNDkyMiAxMjg1LjYxNjUsMTQyOC40NTAxIDEyODYuMzg3OCwxNDI2LjY5OTcgQyAxMjg3LjE2NSwxNDI0Ljk1MDUgMTI4OC4zMzksMTQyMy42MzcxIDEyODkuOTIxNywxNDIyLjc2MzEgQyAxMjkxLjQ5ODQsMTQyMS44ODc5IDEyOTMuMjIwNSwxNDIxLjQ0OTcgMTI5NS4wNzQ4LDE0MjEuNDQ5NyBDIDEyOTcuNDIxNywxNDIxLjQ0OTcgMTI5OS4zNDU3LDE0MjIuMDQ3MyAxMzAwLjgzMTUsMTQyMy4yMzQzIEMgMTMwMi4zMjQ0LDE0MjQuNDIyNSAxMzAzLjI4MzUsMTQyNi4xMDMyIDEzMDMuNzA2MywxNDI4LjI5MDYgTCAxMzAwLjE0NDEsMTQyOC44Mzg3IEMgMTI5OS44MDM5LDE0MjcuMzg3MSAxMjk5LjIwNjMsMTQyNi4yOTY5IDEyOTguMzQ1MywxNDI1LjU2MTEgQyAxMjk3LjQ4NDMsMTQyNC44MzI0IDEyOTYuNDQyNSwxNDI0LjQ2MzkgMTI5NS4yMjAxLDE0MjQuNDYzOSBDIDEyOTMuMzcyOCwxNDI0LjQ2MzkgMTI5MS44NzI4LDE0MjUuMTI0MSAxMjkwLjcyMDEsMTQyNi40NTA1IEMgMTI4OS41NjczLDE0MjcuNzY5OCAxMjg4Ljk5MSwxNDI5Ljg2MDMgMTI4OC45OTEsMTQzMi43MjA5IEMgMTI4OC45OTEsMTQzNS42MjI5IDEyODkuNTQ3MiwxNDM3LjczNDcgMTI5MC42NjQ2LDE0MzkuMDU0IEMgMTI5MS43NzYsMTQ0MC4zNjYyIDEyOTMuMjI3NiwxNDQxLjAyNjUgMTI5NS4wMTkzLDE0NDEuMDI2NSBDIDEyOTYuNDU2NywxNDQxLjAyNjUgMTI5Ny42NTA4LDE0NDAuNTgxMiAxMjk4LjYxNTgsMTQzOS43MDAxIEMgMTI5OS41ODE5LDE0MzguODE3OCAxMzAwLjE5MjUsMTQzNy40NjQyIDEzMDAuNDUsMTQzNS42MyBMIDEzMDAuNDUsMTQzNS42MyB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDEzNyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTMyMS4zNCwxNDQzLjU0IEwgMTMyMS4zNCwxNDQwLjM2NjQgQyAxMzE5LjY1MjIsMTQ0Mi44MTEzIDEzMTcuMzY3OSwxNDQ0LjAyNjYgMTMxNC40NzksMTQ0NC4wMjY2IEMgMTMxMy4yMDgxLDE0NDQuMDI2NiAxMzEyLjAxMjgsMTQ0My43ODMzIDEzMTAuOTA5NywxNDQzLjI5NjcgQyAxMzA5LjgwNTQsMTQ0Mi44MTEzIDEzMDguOTg1NywxNDQyLjE5MjQgMTMwOC40NTA2LDE0NDEuNDU2NSBDIDEzMDcuOTA5NywxNDQwLjcxMzYgMTMwNy41MzQxLDE0MzkuODExMyAxMzA3LjMxOTEsMTQzOC43NDEyIEMgMTMwNy4xNzI3LDE0MzguMDE5NSAxMzA3LjA5NzEsMTQzNi44ODA5IDEzMDcuMDk3MSwxNDM1LjMxODQgTCAxMzA3LjA5NzEsMTQyMS45MzY1IEwgMTMxMC43NTYxLDE0MjEuOTM2NSBMIDEzMTAuNzU2MSwxNDMzLjkxNTIgQyAxMzEwLjc1NjEsMTQzNS44MzIxIDEzMTAuODMyOSwxNDM3LjExNTkgMTMxMC45NzgyLDE0MzcuNzgzMyBDIDEzMTEuMjE0NCwxNDM4Ljc0ODIgMTMxMS43MDEsMTQzOS40OTgyIDEzMTIuNDQzOSwxNDQwLjA1MzMgQyAxMzEzLjE5MzksMTQ0MC42MDI2IDEzMTQuMTE3NiwxNDQwLjg3MyAxMzE1LjIxNDgsMTQ0MC44NzMgQyAxMzE2LjMxMjEsMTQ0MC44NzMgMTMxNy4zMzk2LDE0NDAuNTk1NSAxMzE4LjMwNDYsMTQ0MC4wMzMzIEMgMTMxOS4yNjk1LDE0MzkuNDcxMSAxMzE5Ljk1MSwxNDM4LjY5OTggMTMyMC4zNDY3LDE0MzcuNzM0OCBDIDEzMjAuNzQ5NSwxNDM2Ljc2MjggMTMyMC45NTAyLDE0MzUuMzUyNiAxMzIwLjk1MDIsMTQzMy41MTI0IEwgMTMyMC45NTAyLDE0MjEuOTM2NCBMIDEzMjQuNjEwNSwxNDIxLjkzNjQgTCAxMzI0LjYxMDUsMTQ0My41Mzk5IEwgMTMyMS4zNCwxNDQzLjUzOTkgTCAxMzIxLjM0LDE0NDMuNTQgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxMzkiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDEzMzAuMzEsMTQ0My41NCBMIDEzMzAuMzEsMTQyMS45MzY1IEwgMTMzMy42MDE3LDE0MjEuOTM2NSBMIDEzMzMuNjAxNywxNDI1LjIwNyBDIDEzMzQuNDQxNSwxNDIzLjY3OTggMTMzNS4yMTk4LDE0MjIuNjY1MiAxMzM1LjkzNDQsMTQyMi4xNzk4IEMgMTMzNi42NDMxLDE0MjEuNjkzMiAxMzM3LjQyNzMsMTQyMS40NDI4IDEzMzguMjgyNCwxNDIxLjQ0MjggQyAxMzM5LjUxNzksMTQyMS40NDI4IDEzNDAuNzY4NywxNDIxLjgzOTYgMTM0Mi4wNDU0LDE0MjIuNjIzOSBMIDEzNDAuNzgxNiwxNDI2LjAyNjcgQyAxMzM5Ljg5MzUsMTQyNS40OTE2IDEzMzguOTk3LDE0MjUuMjI4MiAxMzM4LjEwMTcsMTQyNS4yMjgyIEMgMTMzNy4yOTYyLDE0MjUuMjI4MiAxMzM2LjU4MDUsMTQyNS40NzE1IDEzMzUuOTQxNSwxNDI1Ljk0OTkgQyAxMzM1LjMwMjUsMTQyNi40MzY1IDEzMzQuODUxMywxNDI3LjEwMjYgMTMzNC41ODA5LDE0MjcuOTU2NiBDIDEzMzQuMTcxLDE0MjkuMjU1OCAxMzMzLjk3MDIsMTQzMC42NzkgMTMzMy45NzAyLDE0MzIuMjI3NCBMIDEzMzMuOTcwMiwxNDQzLjU0IEwgMTMzMC4zMSwxNDQzLjU0IEwgMTMzMC4zMSwxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTQxIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxMzUwLjIzLDE0NDMuNTQgTCAxMzQyLjAwODQsMTQyMS45MzY1IEwgMTM0NS44NzY1LDE0MjEuOTM2NSBMIDEzNTAuNTE0NiwxNDM0Ljg3MzEgQyAxMzUxLjAxNTQsMTQzNi4yNjkyIDEzNTEuNDczNywxNDM3LjcyMDcgMTM1MS44OTY1LDE0MzkuMjI3OCBDIDEzNTIuMjIzNywxNDM4LjA4OTIgMTM1Mi42NzQ5LDE0MzYuNzIwMyAxMzUzLjI1ODQsMTQzNS4xMTY0IEwgMTM1OC4wNjMxLDE0MjEuOTM2NSBMIDEzNjEuODI3MiwxNDIxLjkzNjUgTCAxMzUzLjY0NjksMTQ0My41NCBMIDEzNTAuMjMsMTQ0My41NCB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE0MyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTM3OS44NSwxNDM2LjU4IEwgMTM4My42MzQyLDE0MzcuMDQ1NCBDIDEzODMuMDM2NiwxNDM5LjI1OTkgMTM4MS45MzM1LDE0NDAuOTc0OSAxMzgwLjMyMjQsMTQ0Mi4xOTczIEMgMTM3OC43MDQzLDE0NDMuNDEyNyAxMzc2LjY0MDksMTQ0NC4wMjQ1IDEzNzQuMTM0NiwxNDQ0LjAyNDUgQyAxMzcwLjk3NTIsMTQ0NC4wMjQ1IDEzNjguNDY3NywxNDQzLjA1MTMgMTM2Ni42MjA1LDE0NDEuMTA3MiBDIDEzNjQuNzY2MSwxNDM5LjE2MzEgMTM2My44NDI1LDE0MzYuNDMzNiAxMzYzLjg0MjUsMTQzMi45MTk4IEMgMTM2My44NDI1LDE0MjkuMjgwOCAxMzY0Ljc4MDMsMTQyNi40NjE1IDEzNjYuNjQ4OCwxNDI0LjQ1NDggQyAxMzY4LjUyMzIsMTQyMi40NDgxIDEzNzAuOTQ2OSwxNDIxLjQ0MDYgMTM3My45MzI3LDE0MjEuNDQwNiBDIDEzNzYuODIxNywxNDIxLjQ0MDYgMTM3OS4xODI3LDE0MjIuNDI2OSAxMzgxLjAwOTksMTQyNC4zOTIyIEMgMTM4Mi44NDI5LDE0MjYuMzU3NiAxMzgzLjc1OTUsMTQyOS4xMjg0IDEzODMuNzU5NSwxNDMyLjY5MDYgQyAxMzgzLjc1OTUsMTQzMi45MTI3IDEzODMuNzUyNCwxNDMzLjIzOTkgMTM4My43MzgyLDE0MzMuNjY5OCBMIDEzNjcuNjI4LDE0MzMuNjY5OCBDIDEzNjcuNzYwMywxNDM2LjA0NSAxMzY4LjQzMzUsMTQzNy44NjM5IDEzNjkuNjQxOCwxNDM5LjEyMTcgQyAxMzcwLjg1MDEsMTQ0MC4zODU1IDEzNzIuMzUwMSwxNDQxLjAxNzQgMTM3NC4xNTYsMTQ0MS4wMTc0IEMgMTM3NS40OTUzLDE0NDEuMDE3NCAxMzc2LjY0MSwxNDQwLjY2MzEgMTM3Ny41OTMsMTQzOS45NTQ0IEMgMTM3OC41NDM3LDE0MzkuMjUyOSAxMzc5LjI5MzgsMTQzOC4xMjg0IDEzNzkuODUwMSwxNDM2LjU4IEwgMTM3OS44NSwxNDM2LjU4IHogTSAxMzY3LjgyODcsMTQzMC42NTY4IEwgMTM3OS44OTEzLDE0MzAuNjU2OCBDIDEzNzkuNzMxOSwxNDI4Ljg0MzggMTM3OS4yNjY1LDE0MjcuNDc2MSAxMzc4LjUwOTQsMTQyNi41NzI1IEMgMTM3Ny4zNDI1LDE0MjUuMTYzNSAxMzc1LjgyOTUsMTQyNC40NTQ4IDEzNzMuOTc1MiwxNDI0LjQ1NDggQyAxMzcyLjI5NDQsMTQyNC40NTQ4IDEzNzAuODc3MSwxNDI1LjAxNyAxMzY5LjczMTUsMTQyNi4xNDI2IEMgMTM2OC41ODU4LDE0MjcuMjY3IDEzNjcuOTUzOSwxNDI4Ljc3NDEgMTM2Ny44Mjg3LDE0MzAuNjU2OCBMIDEzNjcuODI4NywxNDMwLjY1NjggeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxNDUiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDEzODYuNzcsMTQzNy4wOSBMIDEzOTAuMzg3NywxNDM2LjUyMDcgQyAxMzkwLjU4ODUsMTQzNy45NzIzIDEzOTEuMTU5LDE0MzkuMDgyNSAxMzkyLjA4ODUsMTQzOS44NjA5IEMgMTM5My4wMTIxLDE0NDAuNjMwOSAxMzk0LjMxMTMsMTQ0MS4wMjA3IDEzOTUuOTg1LDE0NDEuMDIwNyBDIDEzOTcuNjY1NywxNDQxLjAyMDcgMTM5OC45MTUzLDE0NDAuNjczNSAxMzk5LjcyNzksMTQzOS45OTMxIEMgMTQwMC41NDA1LDE0MzkuMzA1NyAxNDAwLjk1MDMsMTQzOC40OTkxIDE0MDAuOTUwMywxNDM3LjU4MjUgQyAxNDAwLjk1MDMsMTQzNi43NDk4IDE0MDAuNTg4OSwxNDM2LjEwMzggMTM5OS44NjYxLDE0MzUuNjI0MiBDIDEzOTkuMzY2NSwxNDM1LjI5ODMgMTM5OC4xMTY5LDE0MzQuODg4NCAxMzk2LjEyMzIsMTQzNC4zODg4IEMgMTM5My40NDMyLDE0MzMuNzA4NSAxMzkxLjU3NDcsMTQzMy4xMjUgMTM5MC41NDAxLDE0MzIuNjI0MiBDIDEzODkuNTA1NCwxNDMyLjEzMTcgMTM4OC43MTQxLDE0MzEuNDQ0MyAxMzg4LjE3OTEsMTQzMC41NjkxIEMgMTM4Ny42NDUyLDE0MjkuNjkzOSAxMzg3LjM3MzYsMTQyOC43MjkgMTM4Ny4zNzM2LDE0MjcuNjczMSBDIDEzODcuMzczNiwxNDI2LjcwODEgMTM4Ny41OTU2LDE0MjUuODE5OSAxMzg4LjA0MDksMTQyNS4wMDAyIEMgMTM4OC40Nzc5LDE0MjQuMTczNSAxMzg5LjA4MjYsMTQyMy40OTMxIDEzODkuODM4NSwxNDIyLjk1MSBDIDEzOTAuNDA5LDE0MjIuNTM1MyAxMzkxLjE4NjIsMTQyMi4xNzM5IDEzOTIuMTY1MywxNDIxLjg4MjEgQyAxMzkzLjE1MTUsMTQyMS41OTA0IDEzOTQuMjA3NCwxNDIxLjQ0MzkgMTM5NS4zMzE4LDE0MjEuNDQzOSBDIDEzOTcuMDI2NywxNDIxLjQ0MzkgMTM5OC41MTI1LDE0MjEuNjk0MyAxMzk5Ljc5NzYsMTQyMi4xODA5IEMgMTQwMS4wODE0LDE0MjIuNjY2NCAxNDAyLjAyNjMsMTQyMy4zMjY2IDE0MDIuNjM3LDE0MjQuMTU5MyBDIDE0MDMuMjQ4OCwxNDI1LjAwMDIgMTQwMy42NjU3LDE0MjYuMTEwNSAxNDAzLjg5NDgsMTQyNy41MDY1IEwgMTQwMC4zMTg0LDE0MjguMDAwMiBDIDE0MDAuMTUxOSwxNDI2Ljg4ODggMTM5OS42Nzk1LDE0MjYuMDIwNyAxMzk4LjkwMTEsMTQyNS4zOTU5IEMgMTM5OC4xMjQsMTQyNC43NzExIDEzOTcuMDE5NiwxNDI0LjQ1ODEgMTM5NS41OTY0LDE0MjQuNDU4MSBDIDEzOTMuOTE1NywxNDI0LjQ1ODEgMTM5Mi43MTQ1LDE0MjQuNzM1NyAxMzkxLjk5ODgsMTQyNS4yOTIgQyAxMzkxLjI3NzEsMTQyNS44NDcxIDEzOTAuOTE1NywxNDI2LjUwMDIgMTM5MC45MTU3LDE0MjcuMjQzMiBDIDEzOTAuOTE1NywxNDI3LjcyMTUgMTM5MS4wNjgxLDE0MjguMTQ1NSAxMzkxLjM2NjksMTQyOC41MjgyIEMgMTM5MS42NjU3LDE0MjguOTIzOSAxMzkyLjEzMSwxNDI5LjI0MjggMTM5Mi43NywxNDI5LjUwNzMgQyAxMzkzLjEzNzMsMTQyOS42Mzg0IDEzOTQuMjE0NSwxNDI5Ljk1MTQgMTM5Ni4wMDUxLDE0MzAuNDM2OSBDIDEzOTguNTk1MiwxNDMxLjEzMTMgMTQwMC40MDExLDE0MzEuNjk0NyAxNDAxLjQyMTYsMTQzMi4xMzg4IEMgMTQwMi40NTAzLDE0MzIuNTc1OCAxNDAzLjI1NTksMTQzMy4yMjE5IDE0MDMuODM5MywxNDM0LjA2MTcgQyAxNDA0LjQyMTYsMTQzNC45MDI2IDE0MDQuNzEzMywxNDM1Ljk0NDMgMTQwNC43MTMzLDE0MzcuMTkzOSBDIDE0MDQuNzEzMywxNDM4LjQxNjQgMTQwNC4zNTMxLDE0MzkuNTYyIDE0MDMuNjQ0NCwxNDQwLjY0NTEgQyAxNDAyLjkyODcsMTQ0MS43MjIzIDE0MDEuOTAxMSwxNDQyLjU1NSAxNDAwLjU2MDYsMTQ0My4xNDU1IEMgMTM5OS4yMjEyLDE0NDMuNzM2MSAxMzk3LjY5OTksMTQ0NC4wMjc4IDEzOTYuMDA1MSwxNDQ0LjAyNzggQyAxMzkzLjE5MjksMTQ0NC4wMjc4IDEzOTEuMDUzOSwxNDQzLjQ0NDMgMTM4OS41ODIyLDE0NDIuMjc3NCBDIDEzODguMTA5NCwxNDQxLjExMDUgMTM4Ny4xNzI4LDE0MzkuMzgxMyAxMzg2Ljc3LDE0MzcuMDkgTCAxMzg2Ljc3LDE0MzcuMDkgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxNDciIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDE0MTAuMDIsMTQ0My41NCBMIDE0MTAuMDIsMTQzOS4zNjYgTCAxNDE0LjE5MjgsMTQzOS4zNjYgTCAxNDE0LjE5MjgsMTQ0My41NCBDIDE0MTQuMTkyOCwxNDQ1LjA3NDIgMTQxMy45MjI0LDE0NDYuMzEwOSAxNDEzLjM4MDIsMTQ0Ny4yNTU4IEMgMTQxMi44MzIyLDE0NDguMTkyNCAxNDExLjk3MTIsMTQ0OC45MjIzIDE0MTAuNzk3MiwxNDQ5LjQ0MzIgTCAxNDA5Ljc3NjcsMTQ0Ny44NzM1IEMgMTQxMC41NDgsMTQ0Ny41MzMzIDE0MTEuMTE3MiwxNDQ3LjAzMjUgMTQxMS40ODQ2LDE0NDYuMzgwNiBDIDE0MTEuODUzMSwxNDQ1LjcyMDMgMTQxMi4wNTM5LDE0NDQuNzc2NiAxNDEyLjA5NjQsMTQ0My41NCBMIDE0MTAuMDIsMTQ0My41NCBMIDE0MTAuMDIsMTQ0My41NCB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE0OSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTQzMC43NSwxNDM3LjA5IEwgMTQzNC4zNjc3LDE0MzYuNTIwNyBDIDE0MzQuNTY4NSwxNDM3Ljk3MjMgMTQzNS4xMzksMTQzOS4wODI1IDE0MzYuMDY4NSwxNDM5Ljg2MDkgQyAxNDM2Ljk5MjEsMTQ0MC42MzA5IDE0MzguMjkxMywxNDQxLjAyMDcgMTQzOS45NjUsMTQ0MS4wMjA3IEMgMTQ0MS42NDU3LDE0NDEuMDIwNyAxNDQyLjg5NTMsMTQ0MC42NzM1IDE0NDMuNzA3OSwxNDM5Ljk5MzEgQyAxNDQ0LjUyMDUsMTQzOS4zMDU3IDE0NDQuOTMwMywxNDM4LjQ5OTEgMTQ0NC45MzAzLDE0MzcuNTgyNSBDIDE0NDQuOTMwMywxNDM2Ljc0OTggMTQ0NC41Njg5LDE0MzYuMTAzOCAxNDQzLjg0NjEsMTQzNS42MjQyIEMgMTQ0My4zNDY1LDE0MzUuMjk4MyAxNDQyLjA5NjksMTQzNC44ODg0IDE0NDAuMTAzMiwxNDM0LjM4ODggQyAxNDM3LjQyMzIsMTQzMy43MDg1IDE0MzUuNTU0NywxNDMzLjEyNSAxNDM0LjUyMDEsMTQzMi42MjQyIEMgMTQzMy40ODU0LDE0MzIuMTMxNyAxNDMyLjY5NDEsMTQzMS40NDQzIDE0MzIuMTU5MSwxNDMwLjU2OTEgQyAxNDMxLjYyNTIsMTQyOS42OTM5IDE0MzEuMzUzNiwxNDI4LjcyOSAxNDMxLjM1MzYsMTQyNy42NzMxIEMgMTQzMS4zNTM2LDE0MjYuNzA4MSAxNDMxLjU3NTYsMTQyNS44MTk5IDE0MzIuMDIwOSwxNDI1LjAwMDIgQyAxNDMyLjQ1NzksMTQyNC4xNzM1IDE0MzMuMDYyNiwxNDIzLjQ5MzEgMTQzMy44MTg1LDE0MjIuOTUxIEMgMTQzNC4zODksMTQyMi41MzUzIDE0MzUuMTY2MiwxNDIyLjE3MzkgMTQzNi4xNDUzLDE0MjEuODgyMSBDIDE0MzcuMTMxNSwxNDIxLjU5MDQgMTQzOC4xODc0LDE0MjEuNDQzOSAxNDM5LjMxMTgsMTQyMS40NDM5IEMgMTQ0MS4wMDY3LDE0MjEuNDQzOSAxNDQyLjQ5MjUsMTQyMS42OTQzIDE0NDMuNzc3NiwxNDIyLjE4MDkgQyAxNDQ1LjA2MTQsMTQyMi42NjY0IDE0NDYuMDA2MywxNDIzLjMyNjYgMTQ0Ni42MTcsMTQyNC4xNTkzIEMgMTQ0Ny4yMjg4LDE0MjUuMDAwMiAxNDQ3LjY0NTcsMTQyNi4xMTA1IDE0NDcuODc0OCwxNDI3LjUwNjUgTCAxNDQ0LjI5ODQsMTQyOC4wMDAyIEMgMTQ0NC4xMzE5LDE0MjYuODg4OCAxNDQzLjY1OTUsMTQyNi4wMjA3IDE0NDIuODgxMSwxNDI1LjM5NTkgQyAxNDQyLjEwNCwxNDI0Ljc3MTEgMTQ0MC45OTk2LDE0MjQuNDU4MSAxNDM5LjU3NjQsMTQyNC40NTgxIEMgMTQzNy44OTU3LDE0MjQuNDU4MSAxNDM2LjY5NDUsMTQyNC43MzU3IDE0MzUuOTc4OCwxNDI1LjI5MiBDIDE0MzUuMjU3MSwxNDI1Ljg0NzEgMTQzNC44OTU3LDE0MjYuNTAwMiAxNDM0Ljg5NTcsMTQyNy4yNDMyIEMgMTQzNC44OTU3LDE0MjcuNzIxNSAxNDM1LjA0ODEsMTQyOC4xNDU1IDE0MzUuMzQ2OSwxNDI4LjUyODIgQyAxNDM1LjY0NTcsMTQyOC45MjM5IDE0MzYuMTExLDE0MjkuMjQyOCAxNDM2Ljc1LDE0MjkuNTA3MyBDIDE0MzcuMTE3MywxNDI5LjYzODQgMTQzOC4xOTQ1LDE0MjkuOTUxNCAxNDM5Ljk4NTEsMTQzMC40MzY5IEMgMTQ0Mi41NzUyLDE0MzEuMTMxMyAxNDQ0LjM4MTEsMTQzMS42OTQ3IDE0NDUuNDAxNiwxNDMyLjEzODggQyAxNDQ2LjQzMDMsMTQzMi41NzU4IDE0NDcuMjM1OSwxNDMzLjIyMTkgMTQ0Ny44MTkzLDE0MzQuMDYxNyBDIDE0NDguNDAxNiwxNDM0LjkwMjYgMTQ0OC42OTMzLDE0MzUuOTQ0MyAxNDQ4LjY5MzMsMTQzNy4xOTM5IEMgMTQ0OC42OTMzLDE0MzguNDE2NCAxNDQ4LjMzMzEsMTQzOS41NjIgMTQ0Ny42MjQ0LDE0NDAuNjQ1MSBDIDE0NDYuOTA4NywxNDQxLjcyMjMgMTQ0NS44ODExLDE0NDIuNTU1IDE0NDQuNTQwNiwxNDQzLjE0NTUgQyAxNDQzLjIwMTIsMTQ0My43MzYxIDE0NDEuNjc5OSwxNDQ0LjAyNzggMTQzOS45ODUxLDE0NDQuMDI3OCBDIDE0MzcuMTcyOSwxNDQ0LjAyNzggMTQzNS4wMzM5LDE0NDMuNDQ0MyAxNDMzLjU2MjIsMTQ0Mi4yNzc0IEMgMTQzMi4wODk0LDE0NDEuMTEwNSAxNDMxLjE1MjgsMTQzOS4zODEzIDE0MzAuNzUsMTQzNy4wOSBMIDE0MzAuNzUsMTQzNy4wOSB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE1MSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTQ1My4wNSwxNDUxLjgyIEwgMTQ1My4wNSwxNDIxLjkzOTMgTCAxNDU2LjM4MzEsMTQyMS45MzkzIEwgMTQ1Ni4zODMxLDE0MjQuNzQ0NCBDIDE0NTcuMTY4NSwxNDIzLjY0NzIgMTQ1OC4wNTY3LDE0MjIuODIxNiAxNDU5LjA1LDE0MjIuMjcyNCBDIDE0NjAuMDM2MiwxNDIxLjcyNDMgMTQ2MS4yMzc0LDE0MjEuNDQ1NiAxNDYyLjY0NzYsMTQyMS40NDU2IEMgMTQ2NC40OTQ5LDE0MjEuNDQ1NiAxNDY2LjEyMDEsMTQyMS45MjUxIDE0NjcuNTI5MSwxNDIyLjg3IEMgMTQ2OC45NDUzLDE0MjMuODIwOCAxNDcwLjAwODMsMTQyNS4xNjEzIDE0NzAuNzI0LDE0MjYuODkwNSBDIDE0NzEuNDQ1NywxNDI4LjYxOTYgMTQ3MS44MDcxLDE0MzAuNTE1MyAxNDcxLjgwNzEsMTQzMi41Nzc1IEMgMTQ3MS44MDcxLDE0MzQuNzg2MSAxNDcxLjQxMTQsMTQzNi43Nzg3IDE0NzAuNjEzLDE0MzguNTUwMyBDIDE0NjkuODIwNSwxNDQwLjMyMDggMTQ2OC42Njc3LDE0NDEuNjc0MyAxNDY3LjE1NDcsMTQ0Mi42MTkyIEMgMTQ2NS42NDA2LDE0NDMuNTU3IDE0NjQuMDQ5NiwxNDQ0LjAyOTUgMTQ2Mi4zODMxLDE0NDQuMDI5NSBDIDE0NjEuMTYxOCwxNDQ0LjAyOTUgMTQ2MC4wNzA1LDE0NDMuNzcyIDE0NTkuMDk4NCwxNDQzLjI1ODIgQyAxNDU4LjEyNjQsMTQ0Mi43NDQ0IDE0NTcuMzM1LDE0NDIuMDkxMyAxNDU2LjcxMDIsMTQ0MS4zMDcgTCAxNDU2LjcxMDIsMTQ1MS44MiBMIDE0NTMuMDUsMTQ1MS44MiBMIDE0NTMuMDUsMTQ1MS44MiB6IE0gMTQ1Ni4zNjMsMTQzMi44NjIxIEMgMTQ1Ni4zNjMsMTQzNS42NCAxNDU2LjkyNTIsMTQzNy42OTUyIDE0NTguMDUwOCwxNDM5LjAyODYgQyAxNDU5LjE3NTIsMTQ0MC4zNTUgMTQ2MC41NDI5LDE0NDEuMDIyMyAxNDYyLjE0MDksMTQ0MS4wMjIzIEMgMTQ2My43NjUsMTQ0MS4wMjIzIDE0NjUuMTYxLDE0NDAuMzM0OSAxNDY2LjMyMDksMTQzOC45NTMgQyAxNDY3LjQ4MDcsMTQzNy41NzgyIDE0NjguMDY0MiwxNDM1LjQ0NjQgMTQ2OC4wNjQyLDE0MzIuNTU3NCBDIDE0NjguMDY0MiwxNDI5Ljc5OTUgMTQ2Ny40OTQ5LDE0MjcuNzQ0NCAxNDY2LjM2MjIsMTQyNi4zNjk2IEMgMTQ2NS4yMzA3LDE0MjUuMDAxOSAxNDYzLjg3NiwxNDI0LjMxNDUgMTQ2Mi4zMDc1LDE0MjQuMzE0NSBDIDE0NjAuNzQ0OSwxNDI0LjMxNDUgMTQ1OS4zNjMsMTQyNS4wNDMyIDE0NTguMTYxOCwxNDI2LjUwMTkgQyAxNDU2Ljk1OTUsMTQyNy45NTkzIDE0NTYuMzYzLDE0MzAuMDg1MyAxNDU2LjM2MywxNDMyLjg2MjEgTCAxNDU2LjM2MywxNDMyLjg2MjEgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxNTMiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDE0OTAuMzIsMTQ0MC44OCBDIDE0ODguOTU4MiwxNDQyLjAzMjggMTQ4Ny42NTMxLDE0NDIuODQ1NCAxNDg2LjQwMzUsMTQ0My4zMjQ5IEMgMTQ4NS4xNDU2LDE0NDMuNzk3MyAxNDgzLjc5OTEsMTQ0NC4wMzM1IDE0ODIuMzYxNywxNDQ0LjAzMzUgQyAxNDc5Ljk4NjUsMTQ0NC4wMzM1IDE0NzguMTY3NiwxNDQzLjQ1NzIgMTQ3Ni44ODk3LDE0NDIuMjk3MyBDIDE0NzUuNjE4OCwxNDQxLjEzNzUgMTQ3NC45Nzk4LDE0MzkuNjUxNyAxNDc0Ljk3OTgsMTQzNy44NTI4IEMgMTQ3NC45Nzk4LDE0MzYuNzg5OCAxNDc1LjIxNjEsMTQzNS44MjQ5IDE0NzUuNzAxNSwxNDM0Ljk0OTcgQyAxNDc2LjE4MSwxNDM0LjA3NDUgMTQ3Ni44MTI5LDE0MzMuMzc0MSAxNDc3LjU5MTMsMTQzMi44NDYxIEMgMTQ3OC4zNzU1LDE0MzIuMzE4MiAxNDc5LjI1MDcsMTQzMS45MTU0IDE0ODAuMjI5OCwxNDMxLjY0NSBDIDE0ODAuOTQ0NCwxNDMxLjQ1NzIgMTQ4Mi4wMjg3LDE0MzEuMjY5NCAxNDgzLjQ3OSwxNDMxLjA5NTcgQyAxNDg2LjQzNzcsMTQzMC43NDE0IDE0ODguNjE4LDE0MzAuMzI0NSAxNDkwLjAxNDEsMTQyOS44MzIgQyAxNDkwLjAyODMsMTQyOS4zMzI0IDE0OTAuMDM1MywxNDI5LjAxMjMgMTQ5MC4wMzUzLDE0MjguODggQyAxNDkwLjAzNTMsMTQyNy4zODcxIDE0ODkuNjg4MSwxNDI2LjMzMjQgMTQ4OC45OTM2LDE0MjUuNzI3NiBDIDE0ODguMDYyOSwxNDI0Ljg5NSAxNDg2LjY2NjgsMTQyNC40ODUxIDE0ODQuODI2NywxNDI0LjQ4NTEgQyAxNDgzLjEwNDYsMTQyNC40ODUxIDE0ODEuODMzOCwxNDI0Ljc4MzkgMTQ4MS4wMDcsMTQyNS4zODc1IEMgMTQ4MC4xODczLDE0MjUuOTkyMiAxNDc5LjU4MzgsMTQyNy4wNjExIDE0NzkuMTg4MSwxNDI4LjU5NTQgTCAxNDc1LjYxMTcsMTQyOC4xMDI4IEMgMTQ3NS45Mzc3LDE0MjYuNTc1NyAxNDc2LjQ3MjcsMTQyNS4zMzIgMTQ3Ny4yMTU3LDE0MjQuMzk0MiBDIDE0NzcuOTU4NiwxNDIzLjQ1MDUgMTQ3OS4wNDE2LDE0MjIuNzIwNiAxNDgwLjQ1MTksMTQyMi4yMTM5IEMgMTQ4MS44NjA5LDE0MjEuNzA3MiAxNDgzLjQ5MzIsMTQyMS40NDk3IDE0ODUuMzU0NiwxNDIxLjQ0OTcgQyAxNDg3LjIwMTksMTQyMS40NDk3IDE0ODguNjk0OCwxNDIxLjY3MjkgMTQ4OS44NDc1LDE0MjIuMTAyOCBDIDE0OTEuMDAwMywxNDIyLjU0MSAxNDkxLjg0NzIsMTQyMy4wODIgMTQ5Mi4zOTY0LDE0MjMuNzQyMiBDIDE0OTIuOTM3MywxNDI0LjQwMTMgMTQ5My4zMTI5LDE0MjUuMjI4IDE0OTMuNTM0OSwxNDI2LjIzNDMgQyAxNDkzLjY1MzEsMTQyNi44NjAzIDE0OTMuNzE1NywxNDI3Ljk4NDcgMTQ5My43MTU3LDE0MjkuNjA5OSBMIDE0OTMuNzE1NywxNDM0LjQ5MTQgQyAxNDkzLjcxNTcsMTQzNy45MDEzIDE0OTMuNzkxMiwxNDQwLjA1NDQgMTQ5My45NTE5LDE0NDAuOTQ5NyBDIDE0OTQuMTA0MiwxNDQxLjg1MjEgMTQ5NC40MTcyLDE0NDIuNzIwMiAxNDk0Ljg3NTUsMTQ0My41NDY5IEwgMTQ5MS4wNDg3LDE0NDMuNTQ2OSBDIDE0OTAuNjc0MywxNDQyLjc4OTkgMTQ5MC40MjM5LDE0NDEuOTAxNyAxNDkwLjMyLDE0NDAuODggTCAxNDkwLjMyLDE0NDAuODggeiBNIDE0OTAuMDE0MSwxNDMyLjY5OTcgQyAxNDg4LjY4MDYsMTQzMy4yNDg5IDE0ODYuNjg4MSwxNDMzLjcwNzIgMTQ4NC4wMzU0LDE0MzQuMDg4NyBDIDE0ODIuNTI4MywxNDM0LjMwMzYgMTQ4MS40NTgyLDE0MzQuNTQ2OSAxNDgwLjg0MDUsMTQzNC44MTc0IEMgMTQ4MC4yMTU3LDE0MzUuMDg5MSAxNDc5LjcyOTEsMTQzNS40ODQ3IDE0NzkuMzk2LDE0MzYuMDEyNyBDIDE0NzkuMDU1OCwxNDM2LjUzMzYgMTQ3OC44ODIyLDE0MzcuMTA5OSAxNDc4Ljg4MjIsMTQzNy43NDg5IEMgMTQ3OC44ODIyLDE0MzguNzI4IDE0NzkuMjU3OCwxNDM5LjU0MDYgMTQ3OS45OTM2LDE0NDAuMTkyNiBDIDE0ODAuNzI5NSwxNDQwLjgzODcgMTQ4MS44MTI1LDE0NDEuMTY0NyAxNDgzLjIzNjksMTQ0MS4xNjQ3IEMgMTQ4NC42NDYsMTQ0MS4xNjQ3IDE0ODUuOTAyNywxNDQwLjg1OTkgMTQ4Ni45OTk5LDE0NDAuMjQxIEMgMTQ4OC4wOTcyLDE0MzkuNjIzMyAxNDg4LjkwOTgsMTQzOC43NzY1IDE0ODkuNDIzNSwxNDM3LjcwNjQgQyAxNDg5LjgxOTIsMTQzNi44ODA4IDE0OTAuMDE0MSwxNDM1LjY1ODQgMTQ5MC4wMTQxLDE0MzQuMDQ3MyBMIDE0OTAuMDE0MSwxNDMyLjY5OTcgTCAxNDkwLjAxNDEsMTQzMi42OTk3IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTU1IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxNTEzLjQ5LDE0MzUuNjMgTCAxNTE3LjA4NjUsMTQzNi4xMDI0IEMgMTUxNi42OTc5LDE0MzguNTgxNiAxNTE1LjY5MDQsMTQ0MC41MjU3IDE1MTQuMDY2NCwxNDQxLjkyODggQyAxNTEyLjQ0ODMsMTQ0My4zMzIgMTUxMC40NTQ2LDE0NDQuMDMzNSAxNTA4LjA5MzYsMTQ0NC4wMzM1IEMgMTUwNS4xNDMyLDE0NDQuMDMzNSAxNTAyLjc2MDksMTQ0My4wNjc0IDE1MDAuOTY5MSwxNDQxLjEzNzUgQyAxNDk5LjE3MDMsMTQzOS4yMDY0IDE0OTguMjY4LDE0MzYuNDM1NSAxNDk4LjI2OCwxNDMyLjgyNDkgQyAxNDk4LjI2OCwxNDMwLjQ5MjIgMTQ5OC42NTY1LDE0MjguNDUwMSAxNDk5LjQyNzgsMTQyNi42OTk3IEMgMTUwMC4yMDUsMTQyNC45NTA1IDE1MDEuMzc5LDE0MjMuNjM3MSAxNTAyLjk2MTcsMTQyMi43NjMxIEMgMTUwNC41Mzg0LDE0MjEuODg3OSAxNTA2LjI2MDUsMTQyMS40NDk3IDE1MDguMTE0OCwxNDIxLjQ0OTcgQyAxNTEwLjQ2MTcsMTQyMS40NDk3IDE1MTIuMzg1NywxNDIyLjA0NzMgMTUxMy44NzE1LDE0MjMuMjM0MyBDIDE1MTUuMzY0NCwxNDI0LjQyMjUgMTUxNi4zMjM1LDE0MjYuMTAzMiAxNTE2Ljc0NjMsMTQyOC4yOTA2IEwgMTUxMy4xODQxLDE0MjguODM4NyBDIDE1MTIuODQzOSwxNDI3LjM4NzEgMTUxMi4yNDYzLDE0MjYuMjk2OSAxNTExLjM4NTMsMTQyNS41NjExIEMgMTUxMC41MjQzLDE0MjQuODMyNCAxNTA5LjQ4MjUsMTQyNC40NjM5IDE1MDguMjYwMSwxNDI0LjQ2MzkgQyAxNTA2LjQxMjgsMTQyNC40NjM5IDE1MDQuOTEyOCwxNDI1LjEyNDEgMTUwMy43NjAxLDE0MjYuNDUwNSBDIDE1MDIuNjA3MywxNDI3Ljc2OTggMTUwMi4wMzEsMTQyOS44NjAzIDE1MDIuMDMxLDE0MzIuNzIwOSBDIDE1MDIuMDMxLDE0MzUuNjIyOSAxNTAyLjU4NzIsMTQzNy43MzQ3IDE1MDMuNzA0NiwxNDM5LjA1NCBDIDE1MDQuODE2LDE0NDAuMzY2MiAxNTA2LjI2NzYsMTQ0MS4wMjY1IDE1MDguMDU5MywxNDQxLjAyNjUgQyAxNTA5LjQ5NjcsMTQ0MS4wMjY1IDE1MTAuNjkwOCwxNDQwLjU4MTIgMTUxMS42NTU4LDE0MzkuNzAwMSBDIDE1MTIuNjIxOSwxNDM4LjgxNzggMTUxMy4yMzI1LDE0MzcuNDY0MiAxNTEzLjQ5LDE0MzUuNjMgTCAxNTEzLjQ5LDE0MzUuNjMgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxNTciIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDE1MjAuMjQsMTQxNy45MyBMIDE1MjAuMjQsMTQxMy43MTU4IEwgMTUyMy45MDYxLDE0MTMuNzE1OCBMIDE1MjMuOTA2MSwxNDE3LjkzIEwgMTUyMC4yNCwxNDE3LjkzIHogTSAxNTIwLjI0LDE0NDMuNTQxIEwgMTUyMC4yNCwxNDIxLjkzNzUgTCAxNTIzLjkwNjEsMTQyMS45Mzc1IEwgMTUyMy45MDYxLDE0NDMuNTQxIEwgMTUyMC4yNCwxNDQzLjU0MSB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE1OSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTUyOS40OSwxNDQzLjU0IEwgMTUyOS40OSwxNDIxLjkzNjUgTCAxNTMyLjc4MTcsMTQyMS45MzY1IEwgMTUzMi43ODE3LDE0MjUuMDA2MiBDIDE1MzQuMzcyNywxNDIyLjYzMSAxNTM2LjY2NCwxNDIxLjQ0MjggMTUzOS42NTY5LDE0MjEuNDQyOCBDIDE1NDAuOTYyLDE0MjEuNDQyOCAxNTQyLjE1NjEsMTQyMS42NzkgMTU0My4yNDc1LDE0MjIuMTQ0NCBDIDE1NDQuMzQ0NywxNDIyLjYxNjggMTU0NS4xNTYxLDE0MjMuMjI3NCAxNTQ1LjY5ODMsMTQyMy45OTE2IEMgMTU0Ni4yNDc1LDE0MjQuNzQ4NyAxNTQ2LjYyMTksMTQyNS42NTExIDE1NDYuODQzOSwxNDI2LjY5MjggQyAxNTQ2Ljk3NjIsMTQyNy4zNzQzIDE1NDcuMDQ1OSwxNDI4LjU2MTMgMTU0Ny4wNDU5LDE0MzAuMjU2MiBMIDE1NDcuMDQ1OSwxNDQzLjU0MDEgTCAxNTQzLjM3ODYsMTQ0My41NDAxIEwgMTU0My4zNzg2LDE0MzAuMzk0NCBDIDE1NDMuMzc4NiwxNDI4LjkwODYgMTU0My4yNDA0LDE0MjcuNzkwMSAxNTQyLjk1NTgsMTQyNy4wNDcxIEMgMTU0Mi42NzExLDE0MjYuMzExMyAxNTQyLjE2MzIsMTQyNS43MjA4IDE1NDEuNDQxNiwxNDI1LjI4MzggQyAxNTQwLjcxMjgsMTQyNC44Mzk3IDE1MzkuODY0OCwxNDI0LjYxNjQgMTUzOC44ODU3LDE0MjQuNjE2NCBDIDE1MzcuMzIzMSwxNDI0LjYxNjQgMTUzNS45ODM3LDE0MjUuMTE3MiAxNTM0Ljg0MzksMTQyNi4xMDM0IEMgMTUzMy43MTI0LDE0MjcuMDk1NiAxNTMzLjE1MDIsMTQyOC45NzEyIDE1MzMuMTUwMiwxNDMxLjc0MiBMIDE1MzMuMTUwMiwxNDQzLjU0IEwgMTUyOS40OSwxNDQzLjU0IEwgMTUyOS40OSwxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTYxIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxNTUxLjk5LDE0NDUuMzMgTCAxNTU1LjU1MjIsMTQ0NS44NTggQyAxNTU1LjY5ODcsMTQ0Ni45NTUyIDE1NTYuMTE0NCwxNDQ3Ljc1MzYgMTU1Ni43ODg4LDE0NDguMjYwMyBDIDE1NTcuNjk4MywxNDQ4LjkzMzUgMTU1OC45NDA4LDE0NDkuMjczNyAxNTYwLjUxMDUsMTQ0OS4yNzM3IEMgMTU2Mi4yMTI0LDE0NDkuMjczNyAxNTYzLjUxNzYsMTQ0OC45MzM1IDE1NjQuNDQxMiwxNDQ4LjI2MDMgQyAxNTY1LjM2NDgsMTQ0Ny41OCAxNTY1Ljk4MjUsMTQ0Ni42MjggMTU2Ni4zMDg1LDE0NDUuNDEyNyBDIDE1NjYuNTAzNCwxNDQ0LjY2MjcgMTU2Ni41ODcyLDE0NDMuMTAxMyAxNTY2LjU3MzEsMTQ0MC43MTE5IEMgMTU2NC45NzYyLDE0NDIuNTkzNCAxNTYyLjk4MjUsMTQ0My41MzgzIDE1NjAuNTk0MywxNDQzLjUzODMgQyAxNTU3LjYyMTUsMTQ0My41MzgzIDE1NTUuMzIzMSwxNDQyLjQ2OTQgMTU1My42OTc5LDE0NDAuMzIzMyBDIDE1NTIuMDczOCwxNDM4LjE4NDMgMTU1MS4yNTQyLDE0MzUuNjA4MyAxNTUxLjI1NDIsMTQzMi42MTU0IEMgMTU1MS4yNTQyLDE0MzAuNTUyIDE1NTEuNjI4NiwxNDI4LjY0OTMgMTU1Mi4zNzE1LDE0MjYuOTA3MiBDIDE1NTMuMTIxNSwxNDI1LjE2MzkgMTU1NC4yMDU3LDE0MjMuODE2MiAxNTU1LjYyMTksMTQyMi44NjU0IEMgMTU1Ny4wMzgsMTQyMS45MjA2IDE1NTguNzA0NSwxNDIxLjQ0MSAxNTYwLjYxNDQsMTQyMS40NDEgQyAxNTYzLjE2MzIsMTQyMS40NDEgMTU2NS4yNjc5LDE0MjIuNDc1NyAxNTY2LjkyMDMsMTQyNC41MzkxIEwgMTU2Ni45MjAzLDE0MjEuOTM0NyBMIDE1NzAuMzAxOCwxNDIxLjkzNDcgTCAxNTcwLjMwMTgsMTQ0MC42MDc5IEMgMTU3MC4zMDE4LDE0NDMuOTY5MyAxNTY5Ljk1NDYsMTQ0Ni4zNTc1IDE1NjkuMjc0MiwxNDQ3Ljc2MDcgQyAxNTY4LjU4NjgsMTQ0OS4xNjI3IDE1NjcuNTAzOCwxNDUwLjI3NDEgMTU2Ni4wMTc5LDE0NTEuMDg2NyBDIDE1NjQuNTMwOSwxNDUxLjg5OTMgMTU2Mi43MDQ5LDE0NTIuMzA5MSAxNTYwLjUzMTcsMTQ1Mi4zMDkxIEMgMTU1Ny45NTQ1LDE0NTIuMzA5MSAxNTU1Ljg3MjMsMTQ1MS43MjU2IDE1NTQuMjg4NCwxNDUwLjU2NTggQyAxNTUyLjY5ODYsMTQ0OS40MDYgMTU1MS45MzQ1LDE0NDcuNjYyNiAxNTUxLjk5LDE0NDUuMzMgTCAxNTUxLjk5LDE0NDUuMzMgeiBNIDE1NTUuMDE3MiwxNDMyLjM1MDkgQyAxNTU1LjAxNzIsMTQzNS4xODQ0IDE1NTUuNTgwNiwxNDM3LjI1MzcgMTU1Ni43MTIxLDE0MzguNTUyOSBDIDE1NTcuODM3NiwxNDM5Ljg1OCAxNTU5LjI0NjcsMTQ0MC41MDQxIDE1NjAuOTQxNiwxNDQwLjUwNDEgQyAxNTYyLjYyMTEsMTQ0MC41MDQxIDE1NjQuMDMxMywxNDM5Ljg1OCAxNTY1LjE2OTksMTQzOC41NjU5IEMgMTU2Ni4zMDg1LDE0MzcuMjY3OCAxNTY2Ljg3OSwxNDM1LjIzOTkgMTU2Ni44NzksMTQzMi40NjkgQyAxNTY2Ljg3OSwxNDI5LjgyMzMgMTU2Ni4yOTU1LDE0MjcuODMwOCAxNTY1LjEyMTUsMTQyNi40OTAzIEMgMTU2My45NDc1LDE0MjUuMTQ5NyAxNTYyLjUzMTQsMTQyNC40NzY1IDE1NjAuODc5LDE0MjQuNDc2NSBDIDE1NTkuMjUzOCwxNDI0LjQ3NjUgMTU1Ny44NzE5LDE0MjUuMTM1NSAxNTU2LjcyNjIsMTQyNi40NjE5IEMgMTU1NS41ODc3LDE0MjcuNzgxMiAxNTU1LjAxNzIsMTQyOS43NDY2IDE1NTUuMDE3MiwxNDMyLjM1MDkgTCAxNTU1LjAxNzIsMTQzMi4zNTA5IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTYzIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxNTc2Ljc4LDE0NDMuNTQgTCAxNTc2Ljc4LDE0MzkuMzY2IEwgMTU4MC45NTI4LDE0MzkuMzY2IEwgMTU4MC45NTI4LDE0NDMuNTQgQyAxNTgwLjk1MjgsMTQ0NS4wNzQyIDE1ODAuNjgyNCwxNDQ2LjMxMDkgMTU4MC4xNDAyLDE0NDcuMjU1OCBDIDE1NzkuNTkyMiwxNDQ4LjE5MjQgMTU3OC43MzEyLDE0NDguOTIyMyAxNTc3LjU1NzIsMTQ0OS40NDMyIEwgMTU3Ni41MzY3LDE0NDcuODczNSBDIDE1NzcuMzA4LDE0NDcuNTMzMyAxNTc3Ljg3NzIsMTQ0Ny4wMzI1IDE1NzguMjQ0NiwxNDQ2LjM4MDYgQyAxNTc4LjYxMzEsMTQ0NS43MjAzIDE1NzguODEzOSwxNDQ0Ljc3NjYgMTU3OC44NTY0LDE0NDMuNTQgTCAxNTc2Ljc4LDE0NDMuNTQgTCAxNTc2Ljc4LDE0NDMuNTQgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxNjUiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDY2OS43NzUsMTQ0MC4yNiBMIDY3MC4zMDE3NywxNDQzLjQ5NjIgQyA2NjkuMjc0MjEsMTQ0My43MTEyIDY2OC4zNTA1OSwxNDQzLjgyMjIgNjY3LjUzNzk5LDE0NDMuODIyMiBDIDY2Ni4yMDU3MSwxNDQzLjgyMjIgNjY1LjE3Njk3LDE0NDMuNjE0MyA2NjQuNDQxMTQsMTQ0My4xOTAzIEMgNjYzLjcxMjQsMTQ0Mi43NzM0IDY2My4xOTg2MiwxNDQyLjIxODMgNjYyLjg5OTgsMTQ0MS41MzA5IEMgNjYyLjYwMDk4LDE0NDAuODUwNSA2NjIuNDQ4NjIsMTQzOS40MDYxIDY2Mi40NDg2MiwxNDM3LjIxMTYgTCA2NjIuNDQ4NjIsMTQyNC43ODA1IEwgNjU5Ljc2MDQzLDE0MjQuNzgwNSBMIDY1OS43NjA0MywxNDIxLjkzNCBMIDY2Mi40NDg2MiwxNDIxLjkzNCBMIDY2Mi40NDg2MiwxNDE2LjU4MDEgTCA2NjYuMDkzNSwxNDE0LjM4NTYgTCA2NjYuMDkzNSwxNDIxLjkzNCBMIDY2OS43NzUsMTQyMS45MzQgTCA2NjkuNzc1LDE0MjQuNzgwNSBMIDY2Ni4wOTM1LDE0MjQuNzgwNSBMIDY2Ni4wOTM1LDE0MzcuNDEyNCBDIDY2Ni4wOTM1LDE0MzguNDYxMiA2NjYuMTU2MSwxNDM5LjEyODUgNjY2LjI4MTMsMTQzOS40MjYyIEMgNjY2LjQxMzU4LDE0MzkuNzI1IDY2Ni42MjE0NSwxNDM5Ljk2MTIgNjY2LjkxMzE5LDE0NDAuMTQxOSBDIDY2Ny4yMDQ5MiwxNDQwLjMxNTUgNjY3LjYyMTg1LDE0NDAuNDA1MyA2NjguMTYzOTgsMTQ0MC40MDUzIEMgNjY4LjU3MjY0LDE0NDAuNDA1MyA2NjkuMTA3NjgsMTQ0MC4zNTY5IDY2OS43NzUsMTQ0MC4yNiBMIDY2OS43NzUsMTQ0MC4yNiB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE2NyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gNjczLjM1NywxNDQzLjU0IEwgNjczLjM1NywxNDEzLjcxNDggTCA2NzcuMDE3MjQsMTQxMy43MTQ4IEwgNjc3LjAxNzI0LDE0MjQuNDE1NiBDIDY3OC43MjUxMSwxNDIyLjQzNjEgNjgwLjg4NTM1LDE0MjEuNDQyOCA2ODMuNDg4NSwxNDIxLjQ0MjggQyA2ODUuMDg2NTMsMTQyMS40NDI4IDY4Ni40NzU1MSwxNDIxLjc2MjggNjg3LjY1NTQzLDE0MjIuMzk0NyBDIDY4OC44MzY1MywxNDIzLjAxOTUgNjg5LjY4MzM4LDE0MjMuODk0NyA2OTAuMTkwMDgsMTQyNS4wMDYyIEMgNjkwLjY5Njc3LDE0MjYuMTE2NCA2OTAuOTU0MjUsMTQyNy43MzQ1IDY5MC45NTQyNSwxNDI5Ljg0NjMgTCA2OTAuOTU0MjUsMTQ0My41NCBMIDY4Ny4yODgxMSwxNDQzLjU0IEwgNjg3LjI4ODExLDE0MjkuODQ2MyBDIDY4Ny4yODgxMSwxNDI4LjAxOTEgNjg2Ljg5MTI2LDE0MjYuNjg1NyA2ODYuMDk5OTIsMTQyNS44NTMgQyA2ODUuMzA4NTgsMTQyNS4wMTkyIDY4NC4xODI5OSwxNDI0LjU5NjMgNjgyLjczMjYsMTQyNC41OTYzIEMgNjgxLjY0ODM1LDE0MjQuNTk2MyA2ODAuNjI3ODgsMTQyNC44ODEgNjc5LjY3LDE0MjUuNDQzMiBDIDY3OC43MTA5NSwxNDI2LjAwNTQgNjc4LjAzMDYzLDE0MjYuNzY5NSA2NzcuNjI3ODcsMTQyNy43MzQ1IEMgNjc3LjIxODAzLDE0MjguNjkzNiA2NzcuMDE3MjQsMTQzMC4wMjU4IDY3Ny4wMTcyNCwxNDMxLjcyMDcgTCA2NzcuMDE3MjQsMTQ0My41NCBMIDY3My4zNTcsMTQ0My41NCBMIDY3My4zNTcsMTQ0My41NCB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE2OSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gNzExLjMxNSwxNDM2LjU4IEwgNzE1LjA5OTI1LDE0MzcuMDQ1NCBDIDcxNC41MDE2MSwxNDM5LjI1OTkgNzEzLjM5ODQ2LDE0NDAuOTc0OSA3MTEuNzg3NDQsMTQ0Mi4xOTczIEMgNzEwLjE2OTMzLDE0NDMuNDEyNyA3MDguMTA1OTQsMTQ0NC4wMjQ1IDcwNS41OTk2NCwxNDQ0LjAyNDUgQyA3MDIuNDQwMTksMTQ0NC4wMjQ1IDY5OS45MzI3MSwxNDQzLjA1MTMgNjk4LjA4NTQ3LDE0NDEuMTA3MiBDIDY5Ni4yMzExNCwxNDM5LjE2MzEgNjk1LjMwNzUyLDE0MzYuNDMzNiA2OTUuMzA3NTIsMTQzMi45MTk4IEMgNjk1LjMwNzUyLDE0MjkuMjgwOCA2OTYuMjQ1MzIsMTQyNi40NjE1IDY5OC4xMTM4MiwxNDI0LjQ1NDggQyA2OTkuOTg4MjMsMTQyMi40NDgxIDcwMi40MTE4NSwxNDIxLjQ0MDYgNzA1LjM5NzY4LDE0MjEuNDQwNiBDIDcwOC4yODY2NiwxNDIxLjQ0MDYgNzEwLjY0NzY4LDE0MjIuNDI2OSA3MTIuNDc0ODUsMTQyNC4zOTIyIEMgNzE0LjMwNzkyLDE0MjYuMzU3NiA3MTUuMjI0NDYsMTQyOS4xMjg0IDcxNS4yMjQ0NiwxNDMyLjY5MDYgQyA3MTUuMjI0NDYsMTQzMi45MTI3IDcxNS4yMTczNywxNDMzLjIzOTkgNzE1LjIwMzIsMTQzMy42Njk4IEwgNjk5LjA5MywxNDMzLjY2OTggQyA2OTkuMjI1MjgsMTQzNi4wNDUgNjk5Ljg5ODUxLDE0MzcuODYzOSA3MDEuMTA2NzgsMTQzOS4xMjE3IEMgNzAyLjMxNTA1LDE0NDAuMzg1NSA3MDMuODE1MDUsMTQ0MS4wMTc0IDcwNS42MjA5NSwxNDQxLjAxNzQgQyA3MDYuOTYwMzIsMTQ0MS4wMTc0IDcwOC4xMDU5OSwxNDQwLjY2MzEgNzA5LjA1Nzk2LDE0MzkuOTU0NCBDIDcxMC4wMDg3NSwxNDM5LjI1MjkgNzEwLjc1ODc1LDE0MzguMTI4NCA3MTEuMzE1MDUsMTQzNi41OCBMIDcxMS4zMTUsMTQzNi41OCB6IE0gNjk5LjI5MzcsMTQzMC42NTY4IEwgNzExLjM1NjMsMTQzMC42NTY4IEMgNzExLjE5Njg1LDE0MjguODQzOCA3MTAuNzMxNSwxNDI3LjQ3NjEgNzA5Ljk3NDQxLDE0MjYuNTcyNSBDIDcwOC44MDc0OCwxNDI1LjE2MzUgNzA3LjI5NDQ5LDE0MjQuNDU0OCA3MDUuNDQwMTYsMTQyNC40NTQ4IEMgNzAzLjc1OTQ1LDE0MjQuNDU0OCA3MDIuMzQyMTMsMTQyNS4wMTcgNzAxLjE5NjQ2LDE0MjYuMTQyNiBDIDcwMC4wNTA3OSwxNDI3LjI2NyA2OTkuNDE4OSwxNDI4Ljc3NDEgNjk5LjI5MzcsMTQzMC42NTY4IEwgNjk5LjI5MzcsMTQzMC42NTY4IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTcxIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA3MzUuMjY2LDE0NDMuNTQgTCA3MjguNjU1MzcsMTQyMS45MzY1IEwgNzMyLjQzOTYyLDE0MjEuOTM2NSBMIDczNS44Nzc4MSwxNDM0LjQwNzggTCA3MzcuMTU0NTgsMTQzOS4wNDcyIEMgNzM3LjIxMDA5LDE0MzguODExIDczNy41ODU2OCwxNDM3LjMyNTEgNzM4LjI3MzA4LDE0MzQuNTg4NSBMIDc0MS43MTAwOSwxNDIxLjkzNjUgTCA3NDUuNDc0MjYsMTQyMS45MzY1IEwgNzQ4LjcxMDQ4LDE0MzQuNDYzMyBMIDc0OS43OTM1NSwxNDM4LjU5NiBMIDc1MS4wMzAxNiwxNDM0LjQyMiBMIDc1NC43MzA1NSwxNDIxLjkzNjYgTCA3NTguMjkzOTQsMTQyMS45MzY2IEwgNzUxLjUzNjg1LDE0NDMuNTQwMSBMIDc0Ny43Mzg0MiwxNDQzLjU0MDEgTCA3NDQuMzAwMjMsMTQzMC42MDIzIEwgNzQzLjQ2MDQ3LDE0MjYuOTE0OSBMIDczOS4wOTI3NSwxNDQzLjU0MDEgTCA3MzUuMjY1OTgsMTQ0My41NDAxIEwgNzM1LjI2NiwxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTczIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA3NzYuMTU0LDE0MzYuNTggTCA3NzkuOTM4MjUsMTQzNy4wNDU0IEMgNzc5LjM0MDYxLDE0MzkuMjU5OSA3NzguMjM3NDYsMTQ0MC45NzQ5IDc3Ni42MjY0NCwxNDQyLjE5NzMgQyA3NzUuMDA4MzMsMTQ0My40MTI3IDc3Mi45NDQ5NCwxNDQ0LjAyNDUgNzcwLjQzODY0LDE0NDQuMDI0NSBDIDc2Ny4yNzkxOSwxNDQ0LjAyNDUgNzY0Ljc3MTcxLDE0NDMuMDUxMyA3NjIuOTI0NDcsMTQ0MS4xMDcyIEMgNzYxLjA3MDE0LDE0MzkuMTYzMSA3NjAuMTQ2NTIsMTQzNi40MzM2IDc2MC4xNDY1MiwxNDMyLjkxOTggQyA3NjAuMTQ2NTIsMTQyOS4yODA4IDc2MS4wODQzMSwxNDI2LjQ2MTUgNzYyLjk1MjgyLDE0MjQuNDU0OCBDIDc2NC44MjcyMywxNDIyLjQ0ODEgNzY3LjI1MDg1LDE0MjEuNDQwNiA3NzAuMjM2NjgsMTQyMS40NDA2IEMgNzczLjEyNTY2LDE0MjEuNDQwNiA3NzUuNDg2NjgsMTQyMi40MjY5IDc3Ny4zMTM4NSwxNDI0LjM5MjIgQyA3NzkuMTQ2OTIsMTQyNi4zNTc2IDc4MC4wNjM0NiwxNDI5LjEyODQgNzgwLjA2MzQ2LDE0MzIuNjkwNiBDIDc4MC4wNjM0NiwxNDMyLjkxMjcgNzgwLjA1NjM3LDE0MzMuMjM5OSA3ODAuMDQyMiwxNDMzLjY2OTggTCA3NjMuOTMyLDE0MzMuNjY5OCBDIDc2NC4wNjQyOCwxNDM2LjA0NSA3NjQuNzM3NTEsMTQzNy44NjM5IDc2NS45NDU3OCwxNDM5LjEyMTcgQyA3NjcuMTU0MDUsMTQ0MC4zODU1IDc2OC42NTQwNSwxNDQxLjAxNzQgNzcwLjQ1OTk1LDE0NDEuMDE3NCBDIDc3MS43OTkzMiwxNDQxLjAxNzQgNzcyLjk0NDk5LDE0NDAuNjYzMSA3NzMuODk2OTYsMTQzOS45NTQ0IEMgNzc0Ljg0Nzc1LDE0MzkuMjUyOSA3NzUuNTk3NzUsMTQzOC4xMjg0IDc3Ni4xNTQwNSwxNDM2LjU4IEwgNzc2LjE1NCwxNDM2LjU4IHogTSA3NjQuMTMyNywxNDMwLjY1NjggTCA3NzYuMTk1MywxNDMwLjY1NjggQyA3NzYuMDM1ODUsMTQyOC44NDM4IDc3NS41NzA1LDE0MjcuNDc2MSA3NzQuODEzNDEsMTQyNi41NzI1IEMgNzczLjY0NjQ4LDE0MjUuMTYzNSA3NzIuMTMzNDksMTQyNC40NTQ4IDc3MC4yNzkxNiwxNDI0LjQ1NDggQyA3NjguNTk4NDUsMTQyNC40NTQ4IDc2Ny4xODExMywxNDI1LjAxNyA3NjYuMDM1NDYsMTQyNi4xNDI2IEMgNzY0Ljg4OTc5LDE0MjcuMjY3IDc2NC4yNTc5LDE0MjguNzc0MSA3NjQuMTMyNywxNDMwLjY1NjggTCA3NjQuMTMyNywxNDMwLjY1NjggeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxNzUiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDc4Ny45MTgsMTQ0My41NCBMIDc4NC41MjIzMywxNDQzLjU0IEwgNzg0LjUyMjMzLDE0MTMuNzE0OCBMIDc4OC4xODEzOSwxNDEzLjcxNDggTCA3ODguMTgxMzksMTQyNC4zNTMgQyA3ODkuNzI5ODIsMTQyMi40MTYgNzkxLjcwMjI2LDE0MjEuNDQyOCA3OTQuMDk3NTMsMTQyMS40NDI4IEMgNzk1LjQzMDk5LDE0MjEuNDQyOCA3OTYuNjg4ODcsMTQyMS43MTQ0IDc5Ny44NzU4OCwxNDIyLjI0ODMgQyA3OTkuMDYyODksMTQyMi43ODMzIDgwMC4wMzQ5NCwxNDIzLjU0MDQgODAwLjgwNjE5LDE0MjQuNTA1NCBDIDgwMS41NzAzNiwxNDI1LjQ3NzQgODAyLjE3MzkxLDE0MjYuNjQ0MyA4MDIuNjA1MDEsMTQyOC4wMTkxIEMgODAzLjA0MjAyLDE0MjkuMzg4IDgwMy4yNTgxNiwxNDMwLjg1MjYgODAzLjI1ODE2LDE0MzIuNDA4MSBDIDgwMy4yNTgxNiwxNDM2LjExNjggODAyLjM0MDQ0LDE0MzguOTc3NCA4MDAuNTA3MzcsMTQ0MC45OTgzIEMgNzk4LjY4MTM5LDE0NDMuMDE5MiA3OTYuNDc5ODEsMTQ0NC4wMjY2IDc5My45MTgsMTQ0NC4wMjY2IEMgNzkxLjM2OTE4LDE0NDQuMDI2NiA3ODkuMzY5NTcsMTQ0Mi45NjM2IDc4Ny45MTgsMTQ0MC44MzE4IEwgNzg3LjkxOCwxNDQzLjU0IEwgNzg3LjkxOCwxNDQzLjU0IHogTSA3ODcuODc1NDgsMTQzMi41NzQ2IEMgNzg3Ljg3NTQ4LDE0MzUuMTY0OCA3ODguMjI5ODEsMTQzNy4wMzMzIDc4OC45MzEzOSwxNDM4LjE4NiBDIDc5MC4wODQxNSwxNDQwLjA3NDYgNzkxLjY0Njc0LDE0NDEuMDE5NSA3OTMuNjEyMSwxNDQxLjAxOTUgQyA3OTUuMjE2MDQsMTQ0MS4wMTk1IDc5Ni41OTc5MywxNDQwLjMyNSA3OTcuNzY0ODYsMTQzOC45Mjg5IEMgNzk4LjkzMTc5LDE0MzcuNTQgNzk5LjUxNDA3LDE0MzUuNDcwNyA3OTkuNTE0MDcsMTQzMi43MTQgQyA3OTkuNTE0MDcsMTQyOS44OTQ3IDc5OC45NTE4NywxNDI3LjgxMTIgNzk3LjgzNDU0LDE0MjYuNDcwNyBDIDc5Ni43MTYwNCwxNDI1LjEzMDEgNzk1LjM2MjQ5LDE0MjQuNDU2OSA3OTMuNzc4NjMsMTQyNC40NTY5IEMgNzkyLjE3NDY5LDE0MjQuNDU2OSA3OTAuNzkyOCwxNDI1LjE1MTQgNzg5LjYyNTg3LDE0MjYuNTQwMyBDIDc4OC40NTg5NCwxNDI3LjkyOTMgNzg3Ljg3NTQ4LDE0MjkuOTQzMSA3ODcuODc1NDgsMTQzMi41NzQ2IEwgNzg3Ljg3NTQ4LDE0MzIuNTc0NiB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE3NyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gODE3LjgyNywxNDM3LjA5IEwgODIxLjQ0NDcyLDE0MzYuNTIwNyBDIDgyMS42NDU1MSwxNDM3Ljk3MjMgODIyLjIxNTk4LDE0MzkuMDgyNSA4MjMuMTQ1NTEsMTQzOS44NjA5IEMgODI0LjA2OTEzLDE0NDAuNjMwOSA4MjUuMzY4MzQsMTQ0MS4wMjA3IDgyNy4wNDE5NywxNDQxLjAyMDcgQyA4MjguNzIyNjgsMTQ0MS4wMjA3IDgyOS45NzIyOCwxNDQwLjY3MzUgODMwLjc4NDg4LDE0MzkuOTkzMSBDIDgzMS41OTc0OCwxNDM5LjMwNTcgODMyLjAwNzMyLDE0MzguNDk5MSA4MzIuMDA3MzIsMTQzNy41ODI1IEMgODMyLjAwNzMyLDE0MzYuNzQ5OCA4MzEuNjQ1OSwxNDM2LjEwMzggODMwLjkyMzA3LDE0MzUuNjI0MiBDIDgzMC40MjM0NiwxNDM1LjI5ODMgODI5LjE3Mzg2LDE0MzQuODg4NCA4MjcuMTgwMTYsMTQzNC4zODg4IEMgODI0LjUwMDI0LDE0MzMuNzA4NSA4MjIuNjMxNzMsMTQzMy4xMjUgODIxLjU5NzA5LDE0MzIuNjI0MiBDIDgyMC41NjI0NCwxNDMyLjEzMTcgODE5Ljc3MTExLDE0MzEuNDQ0MyA4MTkuMjM2MDcsMTQzMC41NjkxIEMgODE4LjcwMjIxLDE0MjkuNjkzOSA4MTguNDMwNTYsMTQyOC43MjkgODE4LjQzMDU2LDE0MjcuNjczMSBDIDgxOC40MzA1NiwxNDI2LjcwODEgODE4LjY1MjYsMTQyNS44MTk5IDgxOS4wOTc4OCwxNDI1LjAwMDIgQyA4MTkuNTM0ODksMTQyNC4xNzM1IDgyMC4xMzk2MSwxNDIzLjQ5MzEgODIwLjg5NTUyLDE0MjIuOTUxIEMgODIxLjQ2NTk5LDE0MjIuNTM1MyA4MjIuMjQzMTYsMTQyMi4xNzM5IDgyMy4yMjIyOSwxNDIxLjg4MjEgQyA4MjQuMjA4NTEsMTQyMS41OTA0IDgyNS4yNjQ0MiwxNDIxLjQ0MzkgODI2LjM4ODgzLDE0MjEuNDQzOSBDIDgyOC4wODM3MSwxNDIxLjQ0MzkgODI5LjU2OTU0LDE0MjEuNjk0MyA4MzAuODU0NTgsMTQyMi4xODA5IEMgODMyLjEzODQ0LDE0MjIuNjY2NCA4MzMuMDgzMzIsMTQyMy4zMjY2IDgzMy42OTM5NSwxNDI0LjE1OTMgQyA4MzQuMzA1NzYsMTQyNS4wMDAyIDgzNC43MjI2OSwxNDI2LjExMDUgODM0Ljk1MTgyLDE0MjcuNTA2NSBMIDgzMS4zNzU0NCwxNDI4LjAwMDIgQyA4MzEuMjA4OTEsMTQyNi44ODg4IDgzMC43MzY0NywxNDI2LjAyMDcgODI5Ljk1ODEyLDE0MjUuMzk1OSBDIDgyOS4xODA5NiwxNDI0Ljc3MTEgODI4LjA3NjYyLDE0MjQuNDU4MSA4MjYuNjUzNCwxNDI0LjQ1ODEgQyA4MjQuOTcyNjksMTQyNC40NTgxIDgyMy43NzE1MSwxNDI0LjczNTcgODIzLjA1NTc2LDE0MjUuMjkyIEMgODIyLjMzNDExLDE0MjUuODQ3MSA4MjEuOTcyNjksMTQyNi41MDAyIDgyMS45NzI2OSwxNDI3LjI0MzIgQyA4MjEuOTcyNjksMTQyNy43MjE1IDgyMi4xMjUwNSwxNDI4LjE0NTUgODIyLjQyMzg3LDE0MjguNTI4MiBDIDgyMi43MjI2OSwxNDI4LjkyMzkgODIzLjE4ODA1LDE0MjkuMjQyOCA4MjMuODI3MDIsMTQyOS41MDczIEMgODI0LjE5NDM1LDE0MjkuNjM4NCA4MjUuMjcxNTEsMTQyOS45NTE0IDgyNy4wNjIwNiwxNDMwLjQzNjkgQyA4MjkuNjUyMjIsMTQzMS4xMzEzIDgzMS40NTgxMiwxNDMxLjY5NDcgODMyLjQ3ODYsMTQzMi4xMzg4IEMgODMzLjUwNzM0LDE0MzIuNTc1OCA4MzQuMzEyODUsMTQzMy4yMjE5IDgzNC44OTYzMiwxNDM0LjA2MTcgQyA4MzUuNDc4NjEsMTQzNC45MDI2IDgzNS43NzAzNCwxNDM1Ljk0NDMgODM1Ljc3MDM0LDE0MzcuMTkzOSBDIDgzNS43NzAzNCwxNDM4LjQxNjQgODM1LjQxMDEsMTQzOS41NjIgODM0LjcwMTQ0LDE0NDAuNjQ1MSBDIDgzMy45ODU2OSwxNDQxLjcyMjMgODMyLjk1ODEzLDE0NDIuNTU1IDgzMS42MTc1OCwxNDQzLjE0NTUgQyA4MzAuMjc4MjEsMTQ0My43MzYxIDgyOC43NTY5NSwxNDQ0LjAyNzggODI3LjA2MjA3LDE0NDQuMDI3OCBDIDgyNC4yNDk4NywxNDQ0LjAyNzggODIyLjExMDg5LDE0NDMuNDQ0MyA4MjAuNjM5MjQsMTQ0Mi4yNzc0IEMgODE5LjE2NjQxLDE0NDEuMTEwNSA4MTguMjI5NzksMTQzOS4zODEzIDgxNy44MjcwNCwxNDM3LjA5IEwgODE3LjgyNywxNDM3LjA5IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTc5IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA4NDAuMTM4LDE0MTcuOTMgTCA4NDAuMTM4LDE0MTMuNzE1OCBMIDg0My44MDQxNCwxNDEzLjcxNTggTCA4NDMuODA0MTQsMTQxNy45MyBMIDg0MC4xMzgsMTQxNy45MyB6IE0gODQwLjEzOCwxNDQzLjU0MSBMIDg0MC4xMzgsMTQyMS45Mzc1IEwgODQzLjgwNDE0LDE0MjEuOTM3NSBMIDg0My44MDQxNCwxNDQzLjU0MSBMIDg0MC4xMzgsMTQ0My41NDEgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxODEiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDg1Ny4zNzQsMTQ0MC4yNiBMIDg1Ny45MDA3NywxNDQzLjQ5NjIgQyA4NTYuODczMjEsMTQ0My43MTEyIDg1NS45NDk1OSwxNDQzLjgyMjIgODU1LjEzNjk5LDE0NDMuODIyMiBDIDg1My44MDQ3MSwxNDQzLjgyMjIgODUyLjc3NTk3LDE0NDMuNjE0MyA4NTIuMDQwMTQsMTQ0My4xOTAzIEMgODUxLjMxMTQsMTQ0Mi43NzM0IDg1MC43OTc2MiwxNDQyLjIxODMgODUwLjQ5ODgsMTQ0MS41MzA5IEMgODUwLjE5OTk4LDE0NDAuODUwNSA4NTAuMDQ3NjIsMTQzOS40MDYxIDg1MC4wNDc2MiwxNDM3LjIxMTYgTCA4NTAuMDQ3NjIsMTQyNC43ODA1IEwgODQ3LjM1OTQzLDE0MjQuNzgwNSBMIDg0Ny4zNTk0MywxNDIxLjkzNCBMIDg1MC4wNDc2MiwxNDIxLjkzNCBMIDg1MC4wNDc2MiwxNDE2LjU4MDEgTCA4NTMuNjkyNSwxNDE0LjM4NTYgTCA4NTMuNjkyNSwxNDIxLjkzNCBMIDg1Ny4zNzQsMTQyMS45MzQgTCA4NTcuMzc0LDE0MjQuNzgwNSBMIDg1My42OTI1LDE0MjQuNzgwNSBMIDg1My42OTI1LDE0MzcuNDEyNCBDIDg1My42OTI1LDE0MzguNDYxMiA4NTMuNzU1MSwxNDM5LjEyODUgODUzLjg4MDMsMTQzOS40MjYyIEMgODU0LjAxMjU4LDE0MzkuNzI1IDg1NC4yMjA0NSwxNDM5Ljk2MTIgODU0LjUxMjE5LDE0NDAuMTQxOSBDIDg1NC44MDM5MiwxNDQwLjMxNTUgODU1LjIyMDg1LDE0NDAuNDA1MyA4NTUuNzYyOTgsMTQ0MC40MDUzIEMgODU2LjE3MTY0LDE0NDAuNDA1MyA4NTYuNzA2NjgsMTQ0MC4zNTY5IDg1Ny4zNzQsMTQ0MC4yNiBMIDg1Ny4zNzQsMTQ0MC4yNiB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE4MyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gODc1Ljc0MSwxNDM2LjU4IEwgODc5LjUyNTI1LDE0MzcuMDQ1NCBDIDg3OC45Mjc2MSwxNDM5LjI1OTkgODc3LjgyNDQ2LDE0NDAuOTc0OSA4NzYuMjEzNDQsMTQ0Mi4xOTczIEMgODc0LjU5NTMzLDE0NDMuNDEyNyA4NzIuNTMxOTQsMTQ0NC4wMjQ1IDg3MC4wMjU2NCwxNDQ0LjAyNDUgQyA4NjYuODY2MTksMTQ0NC4wMjQ1IDg2NC4zNTg3MSwxNDQzLjA1MTMgODYyLjUxMTQ3LDE0NDEuMTA3MiBDIDg2MC42NTcxNCwxNDM5LjE2MzEgODU5LjczMzUyLDE0MzYuNDMzNiA4NTkuNzMzNTIsMTQzMi45MTk4IEMgODU5LjczMzUyLDE0MjkuMjgwOCA4NjAuNjcxMzEsMTQyNi40NjE1IDg2Mi41Mzk4MiwxNDI0LjQ1NDggQyA4NjQuNDE0MjMsMTQyMi40NDgxIDg2Ni44Mzc4NSwxNDIxLjQ0MDYgODY5LjgyMzY4LDE0MjEuNDQwNiBDIDg3Mi43MTI2NiwxNDIxLjQ0MDYgODc1LjA3MzY4LDE0MjIuNDI2OSA4NzYuOTAwODUsMTQyNC4zOTIyIEMgODc4LjczMzkyLDE0MjYuMzU3NiA4NzkuNjUwNDYsMTQyOS4xMjg0IDg3OS42NTA0NiwxNDMyLjY5MDYgQyA4NzkuNjUwNDYsMTQzMi45MTI3IDg3OS42NDMzNywxNDMzLjIzOTkgODc5LjYyOTIsMTQzMy42Njk4IEwgODYzLjUxOSwxNDMzLjY2OTggQyA4NjMuNjUxMjgsMTQzNi4wNDUgODY0LjMyNDUxLDE0MzcuODYzOSA4NjUuNTMyNzgsMTQzOS4xMjE3IEMgODY2Ljc0MTA1LDE0NDAuMzg1NSA4NjguMjQxMDUsMTQ0MS4wMTc0IDg3MC4wNDY5NSwxNDQxLjAxNzQgQyA4NzEuMzg2MzIsMTQ0MS4wMTc0IDg3Mi41MzE5OSwxNDQwLjY2MzEgODczLjQ4Mzk2LDE0MzkuOTU0NCBDIDg3NC40MzQ3NSwxNDM5LjI1MjkgODc1LjE4NDc1LDE0MzguMTI4NCA4NzUuNzQxMDUsMTQzNi41OCBMIDg3NS43NDEsMTQzNi41OCB6IE0gODYzLjcxOTcsMTQzMC42NTY4IEwgODc1Ljc4MjMsMTQzMC42NTY4IEMgODc1LjYyMjg1LDE0MjguODQzOCA4NzUuMTU3NSwxNDI3LjQ3NjEgODc0LjQwMDQxLDE0MjYuNTcyNSBDIDg3My4yMzM0OCwxNDI1LjE2MzUgODcxLjcyMDQ5LDE0MjQuNDU0OCA4NjkuODY2MTYsMTQyNC40NTQ4IEMgODY4LjE4NTQ1LDE0MjQuNDU0OCA4NjYuNzY4MTMsMTQyNS4wMTcgODY1LjYyMjQ2LDE0MjYuMTQyNiBDIDg2NC40NzY3OSwxNDI3LjI2NyA4NjMuODQ0OSwxNDI4Ljc3NDEgODYzLjcxOTcsMTQzMC42NTY4IEwgODYzLjcxOTcsMTQzMC42NTY4IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTg1IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA4OTkuNjkyLDE0NDMuNTQgTCA4OTMuMDgxMzcsMTQyMS45MzY1IEwgODk2Ljg2NTYyLDE0MjEuOTM2NSBMIDkwMC4zMDM4MSwxNDM0LjQwNzggTCA5MDEuNTgwNTgsMTQzOS4wNDcyIEMgOTAxLjYzNjA5LDE0MzguODExIDkwMi4wMTE2OCwxNDM3LjMyNTEgOTAyLjY5OTA4LDE0MzQuNTg4NSBMIDkwNi4xMzYwOSwxNDIxLjkzNjUgTCA5MDkuOTAwMjYsMTQyMS45MzY1IEwgOTEzLjEzNjQ4LDE0MzQuNDYzMyBMIDkxNC4yMTk1NSwxNDM4LjU5NiBMIDkxNS40NTYxNiwxNDM0LjQyMiBMIDkxOS4xNTY1NSwxNDIxLjkzNjYgTCA5MjIuNzE5OTQsMTQyMS45MzY2IEwgOTE1Ljk2Mjg1LDE0NDMuNTQwMSBMIDkxMi4xNjQ0MiwxNDQzLjU0MDEgTCA5MDguNzI2MjMsMTQzMC42MDIzIEwgOTA3Ljg4NjQ3LDE0MjYuOTE0OSBMIDkwMy41MTg3NSwxNDQzLjU0MDEgTCA4OTkuNjkxOTgsMTQ0My41NDAxIEwgODk5LjY5MiwxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTg3IiAvPgotCi0gICA8cG9seWdvbgotICAgcG9pbnRzPSI5MjMuMDQ2LDE0NDQuMDUgOTMxLjY5MSwxNDEzLjIxIDkzNC42MjIsMTQxMy4yMSA5MjUuOTk3LDE0NDQuMDUgOTIzLjA0NiwxNDQ0LjA1ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icG9seWdvbjE4OSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gOTM2LjY5OCwxNDQ1LjMzIEwgOTQwLjI2MDIsMTQ0NS44NTggQyA5NDAuNDA2NjYsMTQ0Ni45NTUyIDk0MC44MjI0LDE0NDcuNzUzNiA5NDEuNDk2ODEsMTQ0OC4yNjAzIEMgOTQyLjQwNjI2LDE0NDguOTMzNSA5NDMuNjQ4NzgsMTQ0OS4yNzM3IDk0NS4yMTg0NiwxNDQ5LjI3MzcgQyA5NDYuOTIwNDMsMTQ0OS4yNzM3IDk0OC4yMjU1NSwxNDQ4LjkzMzUgOTQ5LjE0OTE3LDE0NDguMjYwMyBDIDk1MC4wNzI3OSwxNDQ3LjU4IDk1MC42OTA1MSwxNDQ2LjYyOCA5NTEuMDE2NDksMTQ0NS40MTI3IEMgOTUxLjIxMTM3LDE0NDQuNjYyNyA5NTEuMjk1MjMsMTQ0My4xMDEzIDk1MS4yODEwNiwxNDQwLjcxMTkgQyA5NDkuNjg0MjEsMTQ0Mi41OTM0IDk0Ny42OTA1MSwxNDQzLjUzODMgOTQ1LjMwMjMyLDE0NDMuNTM4MyBDIDk0Mi4zMjk0OSwxNDQzLjUzODMgOTQwLjAzMTA2LDE0NDIuNDY5NCA5MzguNDA1ODYsMTQ0MC4zMjMzIEMgOTM2Ljc4MTg0LDE0MzguMTg0MyA5MzUuOTYyMTYsMTQzNS42MDgzIDkzNS45NjIxNiwxNDMyLjYxNTQgQyA5MzUuOTYyMTYsMTQzMC41NTIgOTM2LjMzNjU3LDE0MjguNjQ5MyA5MzcuMDc5NDgsMTQyNi45MDcyIEMgOTM3LjgyOTQ4LDE0MjUuMTYzOSA5MzguOTEzNzMsMTQyMy44MTYyIDk0MC4zMjk4NywxNDIyLjg2NTQgQyA5NDEuNzQ2MDEsMTQyMS45MjA2IDk0My40MTI1NSwxNDIxLjQ0MSA5NDUuMzIyMzksMTQyMS40NDEgQyA5NDcuODcxMjEsMTQyMS40NDEgOTQ5Ljk3NTkzLDE0MjIuNDc1NyA5NTEuNjI4MywxNDI0LjUzOTEgTCA5NTEuNjI4MywxNDIxLjkzNDcgTCA5NTUuMDA5OCwxNDIxLjkzNDcgTCA5NTUuMDA5OCwxNDQwLjYwNzkgQyA5NTUuMDA5OCwxNDQzLjk2OTMgOTU0LjY2MjU1LDE0NDYuMzU3NSA5NTMuOTgyMjQsMTQ0Ny43NjA3IEMgOTUzLjI5NDgzLDE0NDkuMTYyNyA5NTIuMjExNzcsMTQ1MC4yNzQxIDk1MC43MjU5NCwxNDUxLjA4NjcgQyA5NDkuMjM4OTMsMTQ1MS44OTkzIDk0Ny40MTI5NSwxNDUyLjMwOTEgOTQ1LjIzOTcyLDE0NTIuMzA5MSBDIDk0Mi42NjI1NSwxNDUyLjMwOTEgOTQwLjU4MDI3LDE0NTEuNzI1NiA5MzguOTk2NDEsMTQ1MC41NjU4IEMgOTM3LjQwNjY1LDE0NDkuNDA2IDkzNi42NDI0NywxNDQ3LjY2MjYgOTM2LjY5Nzk4LDE0NDUuMzMgTCA5MzYuNjk4LDE0NDUuMzMgeiBNIDkzOS43MjUxNywxNDMyLjM1MDkgQyA5MzkuNzI1MTcsMTQzNS4xODQ0IDk0MC4yODg1NiwxNDM3LjI1MzcgOTQxLjQyMDA1LDE0MzguNTUyOSBDIDk0Mi41NDU2NCwxNDM5Ljg1OCA5NDMuOTU0NywxNDQwLjUwNDEgOTQ1LjY0OTU4LDE0NDAuNTA0MSBDIDk0Ny4zMjkxMSwxNDQwLjUwNDEgOTQ4LjczOTM0LDE0MzkuODU4IDk0OS44Nzc5MywxNDM4LjU2NTkgQyA5NTEuMDE2NTEsMTQzNy4yNjc4IDk1MS41ODY5OSwxNDM1LjIzOTkgOTUxLjU4Njk5LDE0MzIuNDY5IEMgOTUxLjU4Njk5LDE0MjkuODIzMyA5NTEuMDAzNTIsMTQyNy44MzA4IDk0OS44Mjk1MSwxNDI2LjQ5MDMgQyA5NDguNjU1NDksMTQyNS4xNDk3IDk0Ny4yMzkzNSwxNDI0LjQ3NjUgOTQ1LjU4Njk5LDE0MjQuNDc2NSBDIDk0My45NjE3OSwxNDI0LjQ3NjUgOTQyLjU3OTksMTQyNS4xMzU1IDk0MS40MzQyMywxNDI2LjQ2MTkgQyA5NDAuMjk1NjUsMTQyNy43ODEyIDkzOS43MjUxNywxNDI5Ljc0NjYgOTM5LjcyNTE3LDE0MzIuMzUwOSB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE5MSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gOTYwLjUwMywxNDQzLjU0IEwgOTYwLjUwMywxNDIxLjkzNjUgTCA5NjMuNzk0NzMsMTQyMS45MzY1IEwgOTYzLjc5NDczLDE0MjUuMjA3IEMgOTY0LjYzNDQ5LDE0MjMuNjc5OCA5NjUuNDEyODQsMTQyMi42NjUyIDk2Ni4xMjc0MSwxNDIyLjE3OTggQyA5NjYuODM2MDcsMTQyMS42OTMyIDk2Ny42MjAzMiwxNDIxLjQ0MjggOTY4LjQ3NTQ0LDE0MjEuNDQyOCBDIDk2OS43MTA4NywxNDIxLjQ0MjggOTcwLjk2MTY2LDE0MjEuODM5NiA5NzIuMjM4NDMsMTQyMi42MjM5IEwgOTcwLjk3NDY1LDE0MjYuMDI2NyBDIDk3MC4wODY0NiwxNDI1LjQ5MTYgOTY5LjE5LDE0MjUuMjI4MiA5NjguMjk0NzMsMTQyNS4yMjgyIEMgOTY3LjQ4OTIyLDE0MjUuMjI4MiA5NjYuNzczNDcsMTQyNS40NzE1IDk2Ni4xMzQ0OSwxNDI1Ljk0OTkgQyA5NjUuNDk1NTEsMTQyNi40MzY1IDk2NS4wNDQzMywxNDI3LjEwMjYgOTY0Ljc3Mzg2LDE0MjcuOTU2NiBDIDk2NC4zNjQwMiwxNDI5LjI1NTggOTY0LjE2MzIzLDE0MzAuNjc5IDk2NC4xNjMyMywxNDMyLjIyNzQgTCA5NjQuMTYzMjMsMTQ0My41NCBMIDk2MC41MDI5OSwxNDQzLjU0IEwgOTYwLjUwMywxNDQzLjU0IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMTkzIiAvPgotCi0gIDwvZz4KLSAgICA8ZwotICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzE3NzE1LDAsMCwwLjMxNzcxNSw0MTUuMjUxMywtNDUxLjU4NTgpIgotICAgICAgIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZCIKLSAgICAgICBpZD0iXzE5NTA5MDk2Ij4KLSAgIDxwYXRoCi0gICBkPSJNIDc1LjMyNzIsMjM4NC4yMiBMIDc1Ljg1Mzk3MiwyMzg3LjQ1NjIgQyA3NC44MjY0MTIsMjM4Ny42NzEyIDczLjkwMjc5MiwyMzg3Ljc4MjIgNzMuMDkwMTkyLDIzODcuNzgyMiBDIDcxLjc1NzkxMiwyMzg3Ljc4MjIgNzAuNzI5MTcyLDIzODcuNTc0MyA2OS45OTMzNDIsMjM4Ny4xNTAzIEMgNjkuMjY0NjAyLDIzODYuNzMzNCA2OC43NTA4MjIsMjM4Ni4xNzgzIDY4LjQ1MjAwMiwyMzg1LjQ5MDkgQyA2OC4xNTMxODMsMjM4NC44MTA1IDY4LjAwMDgyMSwyMzgzLjM2NjEgNjguMDAwODIxLDIzODEuMTcxNiBMIDY4LjAwMDgyMSwyMzY4Ljc0MDUgTCA2NS4zMTI2MzEsMjM2OC43NDA1IEwgNjUuMzEyNjMxLDIzNjUuODk0IEwgNjguMDAwODIxLDIzNjUuODk0IEwgNjguMDAwODIxLDIzNjAuNTQwMSBMIDcxLjY0NTcwMSwyMzU4LjM0NTYgTCA3MS42NDU3MDEsMjM2NS44OTQgTCA3NS4zMjcyMDEsMjM2NS44OTQgTCA3NS4zMjcyMDEsMjM2OC43NDA1IEwgNzEuNjQ1NzAxLDIzNjguNzQwNSBMIDcxLjY0NTcwMSwyMzgxLjM3MjQgQyA3MS42NDU3MDEsMjM4Mi40MjEyIDcxLjcwODI5OSwyMzgzLjA4ODUgNzEuODMzNDk2LDIzODMuMzg2MiBDIDcxLjk2NTc3OSwyMzgzLjY4NSA3Mi4xNzM2NTMsMjM4My45MjEyIDcyLjQ2NTM4NiwyMzg0LjEwMTkgQyA3Mi43NTcxMTgsMjM4NC4yNzU1IDczLjE3NDA0NywyMzg0LjM2NTMgNzMuNzE2MTc2LDIzODQuMzY1MyBDIDc0LjEyNDgzNywyMzg0LjM2NTMgNzQuNjU5ODc3LDIzODQuMzE2OSA3NS4zMjcxOTYsMjM4NC4yMiBMIDc1LjMyNzIsMjM4NC4yMiB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0iXzE5NTA5MDAwIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSA5My42OTQ1LDIzODAuNTQgTCA5Ny40Nzg3NSwyMzgxLjAwNTQgQyA5Ni44ODExMTIsMjM4My4yMTk5IDk1Ljc3Nzk2LDIzODQuOTM0OSA5NC4xNjY5NCwyMzg2LjE1NzMgQyA5Mi41NDg4MywyMzg3LjM3MjcgOTAuNDg1NDQsMjM4Ny45ODQ1IDg3Ljk3OTE0LDIzODcuOTg0NSBDIDg0LjgxOTY5LDIzODcuOTg0NSA4Mi4zMTIyMSwyMzg3LjAxMTMgODAuNDY0OTcsMjM4NS4wNjcyIEMgNzguNjEwNjQsMjM4My4xMjMxIDc3LjY4NzAyLDIzODAuMzkzNiA3Ny42ODcwMiwyMzc2Ljg3OTggQyA3Ny42ODcwMiwyMzczLjI0MDggNzguNjI0ODE1LDIzNzAuNDIxNSA4MC40OTMzMiwyMzY4LjQxNDggQyA4Mi4zNjc3MywyMzY2LjQwODEgODQuNzkxMzUsMjM2NS40MDA2IDg3Ljc3NzE4LDIzNjUuNDAwNiBDIDkwLjY2NjE2LDIzNjUuNDAwNiA5My4wMjcxOCwyMzY2LjM4NjkgOTQuODU0MzUsMjM2OC4zNTIyIEMgOTYuNjg3NDIsMjM3MC4zMTc2IDk3LjYwMzk2LDIzNzMuMDg4NCA5Ny42MDM5NiwyMzc2LjY1MDYgQyA5Ny42MDM5NiwyMzc2Ljg3MjcgOTcuNTk2ODczLDIzNzcuMTk5OSA5Ny41ODI3LDIzNzcuNjI5OCBMIDgxLjQ3MjUsMjM3Ny42Mjk4IEMgODEuNjA0NzgzLDIzODAuMDA1IDgyLjI3ODAxMiwyMzgxLjgyMzkgODMuNDg2MjgsMjM4My4wODE3IEMgODQuNjk0NTUsMjM4NC4zNDU1IDg2LjE5NDU1LDIzODQuOTc3NCA4OC4wMDA0NSwyMzg0Ljk3NzQgQyA4OS4zMzk4MiwyMzg0Ljk3NzQgOTAuNDg1NDksMjM4NC42MjMxIDkxLjQzNzQ2LDIzODMuOTE0NCBDIDkyLjM4ODI0NywyMzgzLjIxMjkgOTMuMTM4MjUsMjM4Mi4wODg0IDkzLjY5NDU1LDIzODAuNTQgTCA5My42OTQ1LDIzODAuNTQgeiBNIDgxLjY3MzIsMjM3NC42MTY4IEwgOTMuNzM1OCwyMzc0LjYxNjggQyA5My41NzYzNTEsMjM3Mi44MDM4IDkzLjExMDk5NywyMzcxLjQzNjEgOTIuMzUzOTEsMjM3MC41MzI1IEMgOTEuMTg2OTgsMjM2OS4xMjM1IDg5LjY3Mzk5LDIzNjguNDE0OCA4Ny44MTk2NiwyMzY4LjQxNDggQyA4Ni4xMzg5NSwyMzY4LjQxNDggODQuNzIxNjMsMjM2OC45NzcgODMuNTc1OTYsMjM3MC4xMDI2IEMgODIuNDMwMjksMjM3MS4yMjcgODEuNzk4NCwyMzcyLjczNDEgODEuNjczMiwyMzc0LjYxNjggeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgxOTciIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDk5LjYzOSwyMzg3LjUgTCAxMDcuNTM0NjcsMjM3Ni4yNzEzIEwgMTAwLjIyODM3LDIzNjUuODk2NSBMIDEwNC44MDUxNCwyMzY1Ljg5NjUgTCAxMDguMTI0MDQsMjM3MC45NTg3IEMgMTA4Ljc0Mjk0LDIzNzEuOTIzNyAxMDkuMjQ5NjMsMjM3Mi43MjkyIDEwOS42MjQwNCwyMzczLjM4MjMgQyAxMTAuMjIxNjgsMjM3Mi40ODcgMTEwLjc3MDg5LDIzNzEuNjk0NSAxMTEuMjc3NTgsMjM3MSBMIDExNC45MTY1NiwyMzY1Ljg5NjUgTCAxMTkuMjkxMzYsMjM2NS44OTY1IEwgMTExLjgyNTYxLDIzNzYuMDY5MyBMIDExOS44NjA2NSwyMzg3LjUgTCAxMTUuMzY3NzQsMjM4Ny41IEwgMTEwLjkzMDM0LDIzODAuNzg1NCBMIDEwOS43NDkyNCwyMzc4Ljk3MjQgTCAxMDQuMDc2NDEsMjM4Ny41IEwgOTkuNjM5MDEsMjM4Ny41IEwgOTkuNjM5LDIzODcuNSB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDE5OSIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMTMwLjkwOSwyMzg0LjIyIEwgMTMxLjQzNTc3LDIzODcuNDU2MiBDIDEzMC40MDgyMSwyMzg3LjY3MTIgMTI5LjQ4NDU5LDIzODcuNzgyMiAxMjguNjcxOTksMjM4Ny43ODIyIEMgMTI3LjMzOTcxLDIzODcuNzgyMiAxMjYuMzEwOTcsMjM4Ny41NzQzIDEyNS41NzUxNCwyMzg3LjE1MDMgQyAxMjQuODQ2NCwyMzg2LjczMzQgMTI0LjMzMjYyLDIzODYuMTc4MyAxMjQuMDMzOCwyMzg1LjQ5MDkgQyAxMjMuNzM0OTgsMjM4NC44MTA1IDEyMy41ODI2MiwyMzgzLjM2NjEgMTIzLjU4MjYyLDIzODEuMTcxNiBMIDEyMy41ODI2MiwyMzY4Ljc0MDUgTCAxMjAuODk0NDMsMjM2OC43NDA1IEwgMTIwLjg5NDQzLDIzNjUuODk0IEwgMTIzLjU4MjYyLDIzNjUuODk0IEwgMTIzLjU4MjYyLDIzNjAuNTQwMSBMIDEyNy4yMjc1LDIzNTguMzQ1NiBMIDEyNy4yMjc1LDIzNjUuODk0IEwgMTMwLjkwOSwyMzY1Ljg5NCBMIDEzMC45MDksMjM2OC43NDA1IEwgMTI3LjIyNzUsMjM2OC43NDA1IEwgMTI3LjIyNzUsMjM4MS4zNzI0IEMgMTI3LjIyNzUsMjM4Mi40MjEyIDEyNy4yOTAxLDIzODMuMDg4NSAxMjcuNDE1MywyMzgzLjM4NjIgQyAxMjcuNTQ3NTgsMjM4My42ODUgMTI3Ljc1NTQ1LDIzODMuOTIxMiAxMjguMDQ3MTksMjM4NC4xMDE5IEMgMTI4LjMzODkyLDIzODQuMjc1NSAxMjguNzU1ODUsMjM4NC4zNjUzIDEyOS4yOTc5OCwyMzg0LjM2NTMgQyAxMjkuNzA2NjQsMjM4NC4zNjUzIDEzMC4yNDE2OCwyMzg0LjMxNjkgMTMwLjkwOSwyMzg0LjIyIEwgMTMwLjkwOSwyMzg0LjIyIHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMjAxIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxNDYuMDY3LDIzOTUuNzggTCAxNDYuMDY3LDIzNjUuODk5MyBMIDE0OS40MDAwNywyMzY1Ljg5OTMgTCAxNDkuNDAwMDcsMjM2OC43MDQ0IEMgMTUwLjE4NTUsMjM2Ny42MDcyIDE1MS4wNzM2OSwyMzY2Ljc4MTYgMTUyLjA2NywyMzY2LjIzMjQgQyAxNTMuMDUzMjIsMjM2NS42ODQzIDE1NC4yNTQ0LDIzNjUuNDA1NiAxNTUuNjY0NjQsMjM2NS40MDU2IEMgMTU3LjUxMTg4LDIzNjUuNDA1NiAxNTkuMTM3MDgsMjM2NS44ODUxIDE2MC41NDYxNCwyMzY2LjgzIEMgMTYxLjk2MjI4LDIzNjcuNzgwOCAxNjMuMDI1MjcsMjM2OS4xMjEzIDE2My43NDEwMiwyMzcwLjg1MDUgQyAxNjQuNDYyNjcsMjM3Mi41Nzk2IDE2NC44MjQwOSwyMzc0LjQ3NTMgMTY0LjgyNDA5LDIzNzYuNTM3NSBDIDE2NC44MjQwOSwyMzc4Ljc0NjEgMTY0LjQyODQyLDIzODAuNzM4NyAxNjMuNjMsMjM4Mi41MTAzIEMgMTYyLjgzNzQ4LDIzODQuMjgwOCAxNjEuNjg0NzIsMjM4NS42MzQzIDE2MC4xNzE3MywyMzg2LjU3OTIgQyAxNTguNjU3NTYsMjM4Ny41MTcgMTU3LjA2NjYxLDIzODcuOTg5NSAxNTUuNDAwMDgsMjM4Ny45ODk1IEMgMTU0LjE3ODgyLDIzODcuOTg5NSAxNTMuMDg3NDgsMjM4Ny43MzIgMTUyLjExNTQzLDIzODcuMjE4MiBDIDE1MS4xNDMzOCwyMzg2LjcwNDQgMTUwLjM1MjA0LDIzODYuMDUxMyAxNDkuNzI3MjQsMjM4NS4yNjcgTCAxNDkuNzI3MjQsMjM5NS43OCBMIDE0Ni4wNjcsMjM5NS43OCBMIDE0Ni4wNjcsMjM5NS43OCB6IE0gMTQ5LjM3OTk5LDIzNzYuODIyMSBDIDE0OS4zNzk5OSwyMzc5LjYwMDEgMTQ5Ljk0MjIsMjM4MS42NTUyIDE1MS4wNjc3OSwyMzgyLjk4ODYgQyAxNTIuMTkyMiwyMzg0LjMxNSAxNTMuNTU5OTIsMjM4NC45ODIzIDE1NS4xNTc5NSwyMzg0Ljk4MjMgQyAxNTYuNzgxOTcsMjM4NC45ODIzIDE1OC4xNzgwMywyMzg0LjI5NDkgMTU5LjMzNzg3LDIzODIuOTEzMSBDIDE2MC40OTc3MSwyMzgxLjUzODMgMTYxLjA4MTE4LDIzNzkuNDA2NCAxNjEuMDgxMTgsMjM3Ni41MTc0IEMgMTYxLjA4MTE4LDIzNzMuNzU5NSAxNjAuNTExODksMjM3MS43MDQ0IDE1OS4zNzkyMSwyMzcwLjMyOTYgQyAxNTguMjQ3NzEsMjM2OC45NjE5IDE1Ni44OTI5OSwyMzY4LjI3NDUgMTU1LjMyNDQ5LDIzNjguMjc0NSBDIDE1My43NjE4OSwyMzY4LjI3NDUgMTUyLjM4LDIzNjkuMDAzMiAxNTEuMTc4ODIsMjM3MC40NjE5IEMgMTQ5Ljk3NjQ2LDIzNzEuOTE5MyAxNDkuMzgsMjM3NC4wNDUzIDE0OS4zOCwyMzc2LjgyMjEgTCAxNDkuMzc5OTksMjM3Ni44MjIxIHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMjAzIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAxNjkuMTk5LDIzODcuNSBMIDE2OS4xOTksMjM2NS44OTY1IEwgMTcyLjQ5MDczLDIzNjUuODk2NSBMIDE3Mi40OTA3MywyMzY5LjE2NyBDIDE3My4zMzA0OSwyMzY3LjYzOTggMTc0LjEwODg0LDIzNjYuNjI1MiAxNzQuODIzNDEsMjM2Ni4xMzk4IEMgMTc1LjUzMjA3LDIzNjUuNjUzMiAxNzYuMzE2MzIsMjM2NS40MDI4IDE3Ny4xNzE0NCwyMzY1LjQwMjggQyAxNzguNDA2ODcsMjM2NS40MDI4IDE3OS42NTc2NiwyMzY1Ljc5OTYgMTgwLjkzNDQzLDIzNjYuNTgzOSBMIDE3OS42NzA2NSwyMzY5Ljk4NjcgQyAxNzguNzgyNDYsMjM2OS40NTE2IDE3Ny44ODYsMjM2OS4xODgyIDE3Ni45OTA3MywyMzY5LjE4ODIgQyAxNzYuMTg1MjIsMjM2OS4xODgyIDE3NS40Njk0NywyMzY5LjQzMTUgMTc0LjgzMDQ5LDIzNjkuOTA5OSBDIDE3NC4xOTE1MSwyMzcwLjM5NjUgMTczLjc0MDMzLDIzNzEuMDYyNiAxNzMuNDY5ODYsMjM3MS45MTY2IEMgMTczLjA2MDAyLDIzNzMuMjE1OCAxNzIuODU5MjMsMjM3NC42MzkgMTcyLjg1OTIzLDIzNzYuMTg3NCBMIDE3Mi44NTkyMywyMzg3LjUgTCAxNjkuMTk4OTksMjM4Ny41IEwgMTY5LjE5OSwyMzg3LjUgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgyMDUiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDE4MS43NDcsMjM3Ni42OSBDIDE4MS43NDcsMjM3Mi42OTA4IDE4Mi44NTg0MiwyMzY5LjcyNSAxODUuMDg3MTYsMjM2Ny44MDIyIEMgMTg2Ljk0MTQ5LDIzNjYuMjA0MiAxODkuMjA1NjYsMjM2NS4zOTg3IDE5MS44Nzg1LDIzNjUuMzk4NyBDIDE5NC44NTEzMywyMzY1LjM5ODcgMTk3LjI4MDg2LDIzNjYuMzcxOSAxOTkuMTYzNTQsMjM2OC4zMjMxIEMgMjAxLjA1MjEyLDIzNzAuMjY3MiAyMDEuOTg5OTIsMjM3Mi45NTQyIDIwMS45ODk5MiwyMzc2LjM4NTMgQyAyMDEuOTg5OTIsMjM3OS4xNjkxIDIwMS41NzI5OSwyMzgxLjM1NzcgMjAwLjczOTEzLDIzODIuOTQ3NSBDIDE5OS45MDY0NSwyMzg0LjU0NDMgMTk4LjY5MTEsMjM4NS43ODA5IDE5Ny4xMDEzMywyMzg2LjY2MiBDIDE5NS41MDMzLDIzODcuNTQ0MyAxOTMuNzY3MDgsMjM4Ny45ODI1IDE5MS44Nzg1LDIzODcuOTgyNSBDIDE4OC44NTg0MiwyMzg3Ljk4MjUgMTg2LjQxMzU0LDIzODcuMDE2NCAxODQuNTQ1MDQsMjM4NS4wNzIzIEMgMTgyLjY3NzcyLDIzODMuMTM1MyAxODEuNzQ3MDEsMjM4MC4zNDMxIDE4MS43NDcwMSwyMzc2LjY5IEwgMTgxLjc0NywyMzc2LjY5IHogTSAxODUuNTExMTcsMjM3Ni42OSBDIDE4NS41MTExNywyMzc5LjQ2MDkgMTg2LjExNDcxLDIzODEuNTMxMyAxODcuMzIyOTgsMjM4Mi45MDYxIEMgMTg4LjUzMTI1LDIzODQuMjg4IDE5MC4wNTI1MSwyMzg0Ljk3NTQgMTkxLjg3ODQ5LDIzODQuOTc1NCBDIDE5My42OTg1NywyMzg0Ljk3NTQgMTk1LjIxMTU2LDIzODQuMjgwOSAxOTYuNDE5ODMsMjM4Mi44OTkxIEMgMTk3LjYyMjE5LDIzODEuNTE3MiAxOTguMjI1NzQsMjM3OS40MDU0IDE5OC4yMjU3NCwyMzc2LjU3MzEgQyAxOTguMjI1NzQsMjM3My44OTkxIDE5Ny42MjIyLDIzNzEuODcxMSAxOTYuNDA2ODQsMjM3MC40OTYzIEMgMTk1LjE5MTQ5LDIzNjkuMTIxNSAxOTMuNjg0NCwyMzY4LjQzNDEgMTkxLjg3ODQ5LDIzNjguNDM0MSBDIDE5MC4wNTI1MSwyMzY4LjQzNDEgMTg4LjUzMTI1LDIzNjkuMTIxNSAxODcuMzIyOTgsMjM3MC40ODkyIEMgMTg2LjExNDcxLDIzNzEuODU2OSAxODUuNTExMTcsMjM3My45MjYyIDE4NS41MTExNywyMzc2LjY5IEwgMTg1LjUxMTE3LDIzNzYuNjkgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgyMDciIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDIwNi4yODgsMjM5NS43OCBMIDIwNi4yODgsMjM2NS44OTkzIEwgMjA5LjYyMTA3LDIzNjUuODk5MyBMIDIwOS42MjEwNywyMzY4LjcwNDQgQyAyMTAuNDA2NSwyMzY3LjYwNzIgMjExLjI5NDY5LDIzNjYuNzgxNiAyMTIuMjg4LDIzNjYuMjMyNCBDIDIxMy4yNzQyMiwyMzY1LjY4NDMgMjE0LjQ3NTQsMjM2NS40MDU2IDIxNS44ODU2NCwyMzY1LjQwNTYgQyAyMTcuNzMyODgsMjM2NS40MDU2IDIxOS4zNTgwOCwyMzY1Ljg4NTEgMjIwLjc2NzE0LDIzNjYuODMgQyAyMjIuMTgzMjgsMjM2Ny43ODA4IDIyMy4yNDYyNywyMzY5LjEyMTMgMjIzLjk2MjAyLDIzNzAuODUwNSBDIDIyNC42ODM2NywyMzcyLjU3OTYgMjI1LjA0NTA5LDIzNzQuNDc1MyAyMjUuMDQ1MDksMjM3Ni41Mzc1IEMgMjI1LjA0NTA5LDIzNzguNzQ2MSAyMjQuNjQ5NDIsMjM4MC43Mzg3IDIyMy44NTEsMjM4Mi41MTAzIEMgMjIzLjA1ODQ4LDIzODQuMjgwOCAyMjEuOTA1NzIsMjM4NS42MzQzIDIyMC4zOTI3MywyMzg2LjU3OTIgQyAyMTguODc4NTYsMjM4Ny41MTcgMjE3LjI4NzYxLDIzODcuOTg5NSAyMTUuNjIxMDgsMjM4Ny45ODk1IEMgMjE0LjM5OTgyLDIzODcuOTg5NSAyMTMuMzA4NDgsMjM4Ny43MzIgMjEyLjMzNjQzLDIzODcuMjE4MiBDIDIxMS4zNjQzOCwyMzg2LjcwNDQgMjEwLjU3MzA0LDIzODYuMDUxMyAyMDkuOTQ4MjQsMjM4NS4yNjcgTCAyMDkuOTQ4MjQsMjM5NS43OCBMIDIwNi4yODgsMjM5NS43OCBMIDIwNi4yODgsMjM5NS43OCB6IE0gMjA5LjYwMDk5LDIzNzYuODIyMSBDIDIwOS42MDA5OSwyMzc5LjYwMDEgMjEwLjE2MzIsMjM4MS42NTUyIDIxMS4yODg3OSwyMzgyLjk4ODYgQyAyMTIuNDEzMiwyMzg0LjMxNSAyMTMuNzgwOTIsMjM4NC45ODIzIDIxNS4zNzg5NSwyMzg0Ljk4MjMgQyAyMTcuMDAyOTcsMjM4NC45ODIzIDIxOC4zOTkwMywyMzg0LjI5NDkgMjE5LjU1ODg3LDIzODIuOTEzMSBDIDIyMC43MTg3MSwyMzgxLjUzODMgMjIxLjMwMjE4LDIzNzkuNDA2NCAyMjEuMzAyMTgsMjM3Ni41MTc0IEMgMjIxLjMwMjE4LDIzNzMuNzU5NSAyMjAuNzMyODksMjM3MS43MDQ0IDIxOS42MDAyMSwyMzcwLjMyOTYgQyAyMTguNDY4NzEsMjM2OC45NjE5IDIxNy4xMTM5OSwyMzY4LjI3NDUgMjE1LjU0NTQ5LDIzNjguMjc0NSBDIDIxMy45ODI4OSwyMzY4LjI3NDUgMjEyLjYwMSwyMzY5LjAwMzIgMjExLjM5OTgyLDIzNzAuNDYxOSBDIDIxMC4xOTc0NiwyMzcxLjkxOTMgMjA5LjYwMSwyMzc0LjA0NTMgMjA5LjYwMSwyMzc2LjgyMjEgTCAyMDkuNjAwOTksMjM3Ni44MjIxIHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMjA5IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAyMjguMDkzLDIzNzYuNjkgQyAyMjguMDkzLDIzNzIuNjkwOCAyMjkuMjA0NDIsMjM2OS43MjUgMjMxLjQzMzE2LDIzNjcuODAyMiBDIDIzMy4yODc0OSwyMzY2LjIwNDIgMjM1LjU1MTY2LDIzNjUuMzk4NyAyMzguMjI0NSwyMzY1LjM5ODcgQyAyNDEuMTk3MzMsMjM2NS4zOTg3IDI0My42MjY4NiwyMzY2LjM3MTkgMjQ1LjUwOTU0LDIzNjguMzIzMSBDIDI0Ny4zOTgxMiwyMzcwLjI2NzIgMjQ4LjMzNTkyLDIzNzIuOTU0MiAyNDguMzM1OTIsMjM3Ni4zODUzIEMgMjQ4LjMzNTkyLDIzNzkuMTY5MSAyNDcuOTE4OTksMjM4MS4zNTc3IDI0Ny4wODUxMywyMzgyLjk0NzUgQyAyNDYuMjUyNDUsMjM4NC41NDQzIDI0NS4wMzcxLDIzODUuNzgwOSAyNDMuNDQ3MzMsMjM4Ni42NjIgQyAyNDEuODQ5MywyMzg3LjU0NDMgMjQwLjExMzA4LDIzODcuOTgyNSAyMzguMjI0NSwyMzg3Ljk4MjUgQyAyMzUuMjA0NDIsMjM4Ny45ODI1IDIzMi43NTk1NCwyMzg3LjAxNjQgMjMwLjg5MTA0LDIzODUuMDcyMyBDIDIyOS4wMjM3MiwyMzgzLjEzNTMgMjI4LjA5MzAxLDIzODAuMzQzMSAyMjguMDkzMDEsMjM3Ni42OSBMIDIyOC4wOTMsMjM3Ni42OSB6IE0gMjMxLjg1NzE3LDIzNzYuNjkgQyAyMzEuODU3MTcsMjM3OS40NjA5IDIzMi40NjA3MSwyMzgxLjUzMTMgMjMzLjY2ODk4LDIzODIuOTA2MSBDIDIzNC44NzcyNSwyMzg0LjI4OCAyMzYuMzk4NTEsMjM4NC45NzU0IDIzOC4yMjQ0OSwyMzg0Ljk3NTQgQyAyNDAuMDQ0NTcsMjM4NC45NzU0IDI0MS41NTc1NiwyMzg0LjI4MDkgMjQyLjc2NTgzLDIzODIuODk5MSBDIDI0My45NjgxOSwyMzgxLjUxNzIgMjQ0LjU3MTc0LDIzNzkuNDA1NCAyNDQuNTcxNzQsMjM3Ni41NzMxIEMgMjQ0LjU3MTc0LDIzNzMuODk5MSAyNDMuOTY4MiwyMzcxLjg3MTEgMjQyLjc1Mjg0LDIzNzAuNDk2MyBDIDI0MS41Mzc0OSwyMzY5LjEyMTUgMjQwLjAzMDQsMjM2OC40MzQxIDIzOC4yMjQ0OSwyMzY4LjQzNDEgQyAyMzYuMzk4NTEsMjM2OC40MzQxIDIzNC44NzcyNSwyMzY5LjEyMTUgMjMzLjY2ODk4LDIzNzAuNDg5MiBDIDIzMi40NjA3MSwyMzcxLjg1NjkgMjMxLjg1NzE3LDIzNzMuOTI2MiAyMzEuODU3MTcsMjM3Ni42OSBMIDIzMS44NTcxNywyMzc2LjY5IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMjExIiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAyNTIuNTkzLDIzODcuNSBMIDI1Mi41OTMsMjM2NS44OTY1IEwgMjU1Ljg4NDczLDIzNjUuODk2NSBMIDI1NS44ODQ3MywyMzY5LjE2NyBDIDI1Ni43MjQ0OSwyMzY3LjYzOTggMjU3LjUwMjg0LDIzNjYuNjI1MiAyNTguMjE3NDEsMjM2Ni4xMzk4IEMgMjU4LjkyNjA3LDIzNjUuNjUzMiAyNTkuNzEwMzIsMjM2NS40MDI4IDI2MC41NjU0NCwyMzY1LjQwMjggQyAyNjEuODAwODcsMjM2NS40MDI4IDI2My4wNTE2NiwyMzY1Ljc5OTYgMjY0LjMyODQzLDIzNjYuNTgzOSBMIDI2My4wNjQ2NSwyMzY5Ljk4NjcgQyAyNjIuMTc2NDYsMjM2OS40NTE2IDI2MS4yOCwyMzY5LjE4ODIgMjYwLjM4NDczLDIzNjkuMTg4MiBDIDI1OS41NzkyMiwyMzY5LjE4ODIgMjU4Ljg2MzQ3LDIzNjkuNDMxNSAyNTguMjI0NDksMjM2OS45MDk5IEMgMjU3LjU4NTUxLDIzNzAuMzk2NSAyNTcuMTM0MzMsMjM3MS4wNjI2IDI1Ni44NjM4NiwyMzcxLjkxNjYgQyAyNTYuNDU0MDIsMjM3My4yMTU4IDI1Ni4yNTMyMywyMzc0LjYzOSAyNTYuMjUzMjMsMjM3Ni4xODc0IEwgMjU2LjI1MzIzLDIzODcuNSBMIDI1Mi41OTI5OSwyMzg3LjUgTCAyNTIuNTkzLDIzODcuNSB6ICIKLSAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOm5vbnplcm8iCi0gICBpZD0icGF0aDIxMyIgLz4KLQotICAgPHBhdGgKLSAgIGQ9Ik0gMjc0LjUwMiwyMzg0LjIyIEwgMjc1LjAyODc3LDIzODcuNDU2MiBDIDI3NC4wMDEyMSwyMzg3LjY3MTIgMjczLjA3NzU5LDIzODcuNzgyMiAyNzIuMjY0OTksMjM4Ny43ODIyIEMgMjcwLjkzMjcxLDIzODcuNzgyMiAyNjkuOTAzOTcsMjM4Ny41NzQzIDI2OS4xNjgxNCwyMzg3LjE1MDMgQyAyNjguNDM5NCwyMzg2LjczMzQgMjY3LjkyNTYyLDIzODYuMTc4MyAyNjcuNjI2OCwyMzg1LjQ5MDkgQyAyNjcuMzI3OTgsMjM4NC44MTA1IDI2Ny4xNzU2MiwyMzgzLjM2NjEgMjY3LjE3NTYyLDIzODEuMTcxNiBMIDI2Ny4xNzU2MiwyMzY4Ljc0MDUgTCAyNjQuNDg3NDMsMjM2OC43NDA1IEwgMjY0LjQ4NzQzLDIzNjUuODk0IEwgMjY3LjE3NTYyLDIzNjUuODk0IEwgMjY3LjE3NTYyLDIzNjAuNTQwMSBMIDI3MC44MjA1LDIzNTguMzQ1NiBMIDI3MC44MjA1LDIzNjUuODk0IEwgMjc0LjUwMiwyMzY1Ljg5NCBMIDI3NC41MDIsMjM2OC43NDA1IEwgMjcwLjgyMDUsMjM2OC43NDA1IEwgMjcwLjgyMDUsMjM4MS4zNzI0IEMgMjcwLjgyMDUsMjM4Mi40MjEyIDI3MC44ODMxLDIzODMuMDg4NSAyNzEuMDA4MywyMzgzLjM4NjIgQyAyNzEuMTQwNTgsMjM4My42ODUgMjcxLjM0ODQ1LDIzODMuOTIxMiAyNzEuNjQwMTksMjM4NC4xMDE5IEMgMjcxLjkzMTkyLDIzODQuMjc1NSAyNzIuMzQ4ODUsMjM4NC4zNjUzIDI3Mi44OTA5OCwyMzg0LjM2NTMgQyAyNzMuMjk5NjQsMjM4NC4zNjUzIDI3My44MzQ2OCwyMzg0LjMxNjkgMjc0LjUwMiwyMzg0LjIyIEwgMjc0LjUwMiwyMzg0LjIyIHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMjE1IiAvPgotCi0gICA8cGF0aAotICAgZD0iTSAyNzguMDk5LDIzNjEuODkgTCAyNzguMDk5LDIzNTcuNjc1OCBMIDI4MS43NjUxNCwyMzU3LjY3NTggTCAyODEuNzY1MTQsMjM2MS44OSBMIDI3OC4wOTksMjM2MS44OSB6IE0gMjc4LjA5OSwyMzg3LjUwMSBMIDI3OC4wOTksMjM2NS44OTc1IEwgMjgxLjc2NTE0LDIzNjUuODk3NSBMIDI4MS43NjUxNCwyMzg3LjUwMSBMIDI3OC4wOTksMjM4Ny41MDEgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgyMTciIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDI4NS45NzMsMjM3Ni42OSBDIDI4NS45NzMsMjM3Mi42OTA4IDI4Ny4wODQ0MiwyMzY5LjcyNSAyODkuMzEzMTYsMjM2Ny44MDIyIEMgMjkxLjE2NzQ5LDIzNjYuMjA0MiAyOTMuNDMxNjYsMjM2NS4zOTg3IDI5Ni4xMDQ1LDIzNjUuMzk4NyBDIDI5OS4wNzczMywyMzY1LjM5ODcgMzAxLjUwNjg2LDIzNjYuMzcxOSAzMDMuMzg5NTQsMjM2OC4zMjMxIEMgMzA1LjI3ODEyLDIzNzAuMjY3MiAzMDYuMjE1OTIsMjM3Mi45NTQyIDMwNi4yMTU5MiwyMzc2LjM4NTMgQyAzMDYuMjE1OTIsMjM3OS4xNjkxIDMwNS43OTg5OSwyMzgxLjM1NzcgMzA0Ljk2NTEzLDIzODIuOTQ3NSBDIDMwNC4xMzI0NSwyMzg0LjU0NDMgMzAyLjkxNzEsMjM4NS43ODA5IDMwMS4zMjczMywyMzg2LjY2MiBDIDI5OS43MjkzLDIzODcuNTQ0MyAyOTcuOTkzMDgsMjM4Ny45ODI1IDI5Ni4xMDQ1LDIzODcuOTgyNSBDIDI5My4wODQ0MiwyMzg3Ljk4MjUgMjkwLjYzOTU0LDIzODcuMDE2NCAyODguNzcxMDQsMjM4NS4wNzIzIEMgMjg2LjkwMzcyLDIzODMuMTM1MyAyODUuOTczMDEsMjM4MC4zNDMxIDI4NS45NzMwMSwyMzc2LjY5IEwgMjg1Ljk3MywyMzc2LjY5IHogTSAyODkuNzM3MTcsMjM3Ni42OSBDIDI4OS43MzcxNywyMzc5LjQ2MDkgMjkwLjM0MDcxLDIzODEuNTMxMyAyOTEuNTQ4OTgsMjM4Mi45MDYxIEMgMjkyLjc1NzI1LDIzODQuMjg4IDI5NC4yNzg1MSwyMzg0Ljk3NTQgMjk2LjEwNDQ5LDIzODQuOTc1NCBDIDI5Ny45MjQ1NywyMzg0Ljk3NTQgMjk5LjQzNzU2LDIzODQuMjgwOSAzMDAuNjQ1ODMsMjM4Mi44OTkxIEMgMzAxLjg0ODE5LDIzODEuNTE3MiAzMDIuNDUxNzQsMjM3OS40MDU0IDMwMi40NTE3NCwyMzc2LjU3MzEgQyAzMDIuNDUxNzQsMjM3My44OTkxIDMwMS44NDgyLDIzNzEuODcxMSAzMDAuNjMyODQsMjM3MC40OTYzIEMgMjk5LjQxNzQ5LDIzNjkuMTIxNSAyOTcuOTEwNCwyMzY4LjQzNDEgMjk2LjEwNDQ5LDIzNjguNDM0MSBDIDI5NC4yNzg1MSwyMzY4LjQzNDEgMjkyLjc1NzI1LDIzNjkuMTIxNSAyOTEuNTQ4OTgsMjM3MC40ODkyIEMgMjkwLjM0MDcxLDIzNzEuODU2OSAyODkuNzM3MTcsMjM3My45MjYyIDI4OS43MzcxNywyMzc2LjY5IEwgMjg5LjczNzE3LDIzNzYuNjkgeiAiCi0gICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtcnVsZTpub256ZXJvIgotICAgaWQ9InBhdGgyMTkiIC8+Ci0KLSAgIDxwYXRoCi0gICBkPSJNIDMxMC41MTQsMjM4Ny41IEwgMzEwLjUxNCwyMzY1Ljg5NjUgTCAzMTMuODA1NzMsMjM2NS44OTY1IEwgMzEzLjgwNTczLDIzNjguOTY2MiBDIDMxNS4zOTY2NywyMzY2LjU5MSAzMTcuNjg4MDEsMjM2NS40MDI4IDMyMC42ODA5MywyMzY1LjQwMjggQyAzMjEuOTg2MDUsMjM2NS40MDI4IDMyMy4xODAxNCwyMzY1LjYzOSAzMjQuMjcxNDgsMjM2Ni4xMDQ0IEMgMzI1LjM2ODcyLDIzNjYuNTc2OCAzMjYuMTgwMTQsMjM2Ny4xODc0IDMyNi43MjIyNywyMzY3Ljk1MTYgQyAzMjcuMjcxNDgsMjM2OC43MDg3IDMyNy42NDU4OSwyMzY5LjYxMTEgMzI3Ljg2Nzk0LDIzNzAuNjUyOCBDIDMyOC4wMDAyMiwyMzcxLjMzNDMgMzI4LjA2OTkxLDIzNzIuNTIxMyAzMjguMDY5OTEsMjM3NC4yMTYyIEwgMzI4LjA2OTkxLDIzODcuNTAwMSBMIDMyNC40MDI1OSwyMzg3LjUwMDEgTCAzMjQuNDAyNTksMjM3NC4zNTQ0IEMgMzI0LjQwMjU5LDIzNzIuODY4NiAzMjQuMjY0NCwyMzcxLjc1MDEgMzIzLjk3OTc1LDIzNzEuMDA3MSBDIDMyMy42OTUxMSwyMzcwLjI3MTMgMzIzLjE4NzIzLDIzNjkuNjgwOCAzMjIuNDY1NTgsMjM2OS4yNDM4IEMgMzIxLjczNjg0LDIzNjguNzk5NyAzMjAuODg4ODEsMjM2OC41NzY0IDMxOS45MDk2NywyMzY4LjU3NjQgQyAzMTguMzQ3MDcsMjM2OC41NzY0IDMxNy4wMDc3LDIzNjkuMDc3MiAzMTUuODY3OTQsMjM3MC4wNjM0IEMgMzE0LjczNjQ0LDIzNzEuMDU1NiAzMTQuMTc0MjQsMjM3Mi45MzEyIDMxNC4xNzQyNCwyMzc1LjcwMiBMIDMxNC4xNzQyNCwyMzg3LjUgTCAzMTAuNTE0LDIzODcuNSBMIDMxMC41MTQsMjM4Ny41IHogIgotICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLXJ1bGU6bm9uemVybyIKLSAgIGlkPSJwYXRoMjIxIiAvPgotCi0gIDwvZz4KLSAgICA8cGF0aAotICAgICAgIGQ9Ik0gODguMTI2MTg4LDM2OS4wMzYyMiBDIDg4LjEyNjE4OCwzNTYuNjE5MDYgMTAzLjAxODg5LDM0Ni42OTA1OSAxMjcuODQwNTYsMzQ2LjY5MDU5IEMgMTUyLjY2MjExLDM0Ni42OTA1OSAxNjcuNTU0OTQsMzU2LjYxOTA2IDE2Ny41NTQ5NCwzNjkuMDIzMDcgTCAxNjcuNTU0OTQsNDA2LjI2MTgxIEMgMTY3LjU1NDk0LDQxNy4yMjI5NyAxNTguNjU5MTcsNDI2LjExODc0IDE0Ny42OTgsNDI2LjExODc0IEwgMTA3Ljk4MzMxLDQyNi4xMTg3NCBDIDk0LjI4MjA0Myw0MjYuMTE4NzQgODMuMTYyMTQ1LDQzNy4yMzkwMiA4My4xNjIxNDUsNDUwLjk0MDI5IEwgODMuMTYyMTQ1LDQ2OC4zMjIwNiBMIDY4LjI2OTA2NCw0NjguMzA4OTQgQyA1NS44NTE5MDQsNDY4LjMwODk0IDQ1LjkyMzA1Niw0NTMuNDE1ODYgNDUuOTIzMDU2LDQyOC41OTQyNSBDIDQ1LjkyMzA1Niw0MDMuNzcyNyA1NS44NTE5MDQsMzg4Ljg3OTg3IDY4LjI2OTA2NCwzODguODc5ODcgTCAxMjcuODQwNjMsMzg4Ljg5MyBMIDEyNy44NDA2MywzODMuOTI4NzYgTCA4OC4xMjYyNTIsMzgzLjkyODc2IEwgODguMTI2MjUyLDM2OS4wMzYwNiBMIDg4LjEyNjE4OCwzNjkuMDM2MjIgeiBNIDEwNS40OTQ0MywzNTkuMTA3NzUgQyAxMDkuNjExNzMsMzU5LjEwNzc1IDExMi45NDc3NCwzNjIuNDQzNzYgMTEyLjk0Nzc0LDM2Ni41NDc1MyBDIDExMi45NDc3NCwzNzAuNjY0ODMgMTA5LjYxMTczLDM3NC4wMDA0NSAxMDUuNDk0NDMsMzc0LjAwMDQ1IEMgMTAxLjM5MDY2LDM3NC4wMDA0NSA5OC4wNDE1MDEsMzcwLjY2NDgzIDk4LjA0MTUwMSwzNjYuNTQ3NTMgQyA5OC4wNDE1MDEsMzYyLjQ0Mzc2IDEwMS4zOTA2MywzNTkuMTA3NzUgMTA1LjQ5NDQzLDM1OS4xMDc3NSB6ICIKLSAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3B5Qmx1ZSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQiCi0gICAgICAgaWQ9InBhdGgyMjMiIC8+Ci0gICAgPGcKLSAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjMxNzcxNSwwLDAsMC4zMTc3MTUsLTcxLjM5MzQzLC0xNTEuMjM0OCkiCi0gICAgICAgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkIgotICAgICAgIGlkPSJfMTk0ODc5MzYiPgotICAgPGcKLSAgIGlkPSJnMjI2Ij4KLSAgICA8cGF0aAotICAgZD0iTSAxMjAwLjc1LDE2OTQgQyAxMjY5LjEyNTIsMTY5Mi44MzMxIDEzMDAuMTI0NCwxNzU3LjE2NjUgMTMwMC43MDc5LDE4MzAuMTI0IEMgMTMwMC43MDc5LDE4OTQuNDU3NSAxMjY4LjU0MTgsMTk1NC43NDkgMTE5OS42MjU5LDE5NTcuMDQxIEMgMTE3MS40NTksMTk1Ny4wNDEgMTE0Ny4zMzM4LDE5NDguNDE2NiAxMTIzLjc5MiwxOTM0LjA4MjcgTCAxMTIzLjc5MiwyMDgyLjgzMjcgTCAxMDgyLjQxOCwyMDY3Ljg3NCBMIDEwODMuMDAwMywxNzM3LjYyNSBDIDEwODIuNDE4LDE3MzcuNjI1IDExMTUuMTY3NiwxNjk0LjU4MzMgMTIwMC4xNjgzLDE2OTMuNDE2MyBMIDEyMDAuNzUwNiwxNjkzLjk5OTggTCAxMjAwLjc1LDE2OTQgeiBNIDExOTAuNDE3NywxOTI3LjE2NiBDIDEyNDUuNTQyMSwxOTIzLjc0OTEgMTI1Mi40NTg2LDE4NjkuNzUwMyAxMjUyLjQ1ODYsMTgyNy4yNDk1IEMgMTI1Mi40NTg2LDE3ODUuODc0MyAxMjQ1LjU0MjEsMTcyMy44NzQ1IDExOTMuMjkyNSwxNzIxLjU4MzUgQyAxMTU3LjY2NjksMTcxOS4yNDk2IDExMjguOTU5LDE3MzUuOTE2MiAxMTIzLjIwOTQsMTc0MS42NjcgTCAxMTIzLjIwOTQsMTkwNS4zNzUgQyAxMTM3LDE5MTMuOTU4MSAxMTY0LjU4MzQsMTkyOC45MTY3IDExOTAuNDE3NywxOTI3LjE2NjMgTCAxMTkwLjQxNzcsMTkyNy4xNjYgeiAiCi0gICBzdHlsZT0iZmlsbDojNmE2YTZhIgotICAgaWQ9Il8xOTQ4Nzk4NCIgLz4KLQotICAgIDxwYXRoCi0gICBkPSJNIDEzODcuODcsMTg2OS43NSBMIDEzODcuODcsMTY5My40MTYgTCAxMzQ1LjM3MDQsMTcwNy43OTEyIEwgMTM0NS4zNzA0LDE4ODIuMzc0MiBDIDEzNDUuMzcwNCwxOTI4LjkxNTUgMTM4OC40NTM1LDE5NTUuOTE1NSAxNDI2LjM3MDQsMTk1NS45MTU1IEMgMTQ3NS43NDUyLDE5NTUuOTE1NSAxNTAzLjkxMjEsMTk0Mi4xMjM4IDE1MTYuNTM2OSwxOTM2LjM3NDIgQyAxNTE3LjEyMDQsMTk0Mi42NjU5IDE1MTYuNTM2OSwxOTQwLjk1NjkgMTUxNi41MzY5LDE5NDcuMjg5OSBDIDE1MTYuNTM2OSwxOTY1LjY2NTUgMTUxNS45NTM0LDE5OTcuMjQ5MyAxNTA3LjM3MDQsMjAxMy4zMzI0IEMgMTQ5MC4xMjA0LDIwNDYuMDgyIDE0NDQuMTYxMywyMDUwLjY2NTkgMTQxMS45OTUyLDIwNTUuMjQ4NSBMIDE0MTguOTExNywyMDgxLjY2NSBDIDE0NjEuNDExMywyMDgwLjU0MDYgMTUyMS4xMTk3LDIwNjQuNDU3NSAxNTQyLjM2OTcsMjAyNC4yNDgxIEMgMTU1NC40NTM2LDIwMDEuMjQ4NSAxNTU2LjE2MTQsMTk1Ny4wMzk4IDE1NTYuMTYxNCwxOTI3Ljc0ODUgTCAxNTU2LjE2MTQsMTY5OS43NDg1IEwgMTUxNC4yNDUzLDE2OTkuNzQ4NSBMIDE1MTQuMjQ1MywxOTA0Ljc5MDUgQyAxNTAwLjQ1MzYsMTkxMy45NTcgMTQ3NS4yMDI4LDE5MjYuNjI0NCAxNDUyLjc4NjYsMTkyNy4xNjUzIEMgMTQxNS40NTMxLDE5MjcuNzQ4OCAxMzg3Ljg2OTcsMTkwNy42NjUzIDEzODcuODY5NywxODY5LjE2NjEgTCAxMzg3Ljg2OTcsMTg2OS43NDk2IEwgMTM4Ny44NywxODY5Ljc1IHogIgotICAgc3R5bGU9ImZpbGw6IzZhNmE2YSIKLSAgIGlkPSJfMTk0ODgyMDAiIC8+Ci0KLSAgICA8cGF0aAotICAgZD0iTSAxNjI2LjYyLDE3MjYuNzUgTCAxNjI2LjYyLDE4OTEuNTgzIEMgMTYyNi42MiwxOTM0LjY2NjEgMTY1OS45MTE3LDE5NTkuOTE2OSAxNzE1LjYxOTYsMTk1NC43NDk1IEwgMTcxNS42MTk2LDE5MzIuOTE2OCBDIDE2ODYuMzI4MywxOTMxLjc5MTIgMTY2OC41MzYxLDE5MjMuNzQ5MSAxNjY4LjUzNjEsMTg5MC40MTYgTCAxNjY4LjUzNjEsMTcyNi43NDkgTCAxNzE1LjYxOTYsMTcyNi43NDkgTCAxNzE1LjYxOTYsMTY5OS43NDkgTCAxNjY4LjUzNjEsMTY5OS43NDkgTCAxNjY4LjUzNjEsMTYxNC43NDk4IEwgMTYyNi42MiwxNjI5LjY2NzEgTCAxNjI2LjYyLDE2OTkuNzQ5IEwgMTU5Ny44Njk2LDE2OTkuNzQ5IEwgMTU5Ny44Njk2LDE3MjYuNzQ5IEwgMTYyNi42MiwxNzI2Ljc0OSBMIDE2MjYuNjIsMTcyNi43NSB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzE5NDg4NDg4IiAvPgotCi0gICAgPHBhdGgKLSAgIGQ9Ik0gMTk3MC4yMSwxOTUxLjI5IEwgMTk3MC4yMSwxNzc2LjEyMyBDIDE5NzAuMjEsMTczMi40NTY1IDE5NDAuMzM1MiwxNjk3Ljk5OSAxODk1LjU0MzEsMTY5Ny45OTkgQyAxODYxLjYyNjYsMTY5Ny45OTkgMTgzMi45MTg3LDE3MDguOTE0NyAxODA3LjY2OTEsMTcyNy4yOTAzIEwgMTgwNy42NjkxLDE1NTAuOTk5MyBMIDE3NjUuNzEwNCwxNTY0LjIwODcgTCAxNzY1LjcxMDQsMTk1MS4yODk3IEwgMTgwNy42NjkxLDE5NTEuMjg5NyBMIDE4MDcuNjY5MSwxNzU3LjE2NDcgQyAxODI4LjkxODMsMTc0Mi4yNDc0IDE4NTMuMDQzNSwxNzI2Ljc0NzggMTg3OS40NiwxNzI2Ljc0NzggQyAxOTEzLjMzNTIsMTcyNi43NDc4IDE5MjcuNzEwNCwxNzYwLjAzOTUgMTkyNy43MTA0LDE3ODkuMzMwOSBMIDE5MjcuNzEwNCwxOTUxLjI4OTkgTCAxOTcwLjIxLDE5NTEuMjg5OSBMIDE5NzAuMjEsMTk1MS4yOSB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzEyNjc0OTAyNCIgLz4KLQotICAgIDxwYXRoCi0gICBkPSJNIDIwMDcuNzUsMTgyMC45MiBDIDIwMDcuNzUsMTg5MC40MTk2IDIwNDQuNSwxOTU1LjkyIDIxMjIuMDQxLDE5NTYuNDYyIEMgMjIwMC4xNjYyLDE5NTUuOTE5OSAyMjM4LjA0MiwxODkwLjQxOTUgMjIzOC4wNDIsMTgyMC45MiBDIDIyMzcuNDk5OSwxNzUzLjE2OTYgMjE5NS4wMDAzLDE2OTQuMDAzIDIxMjIuNjI1LDE2OTMuNDIgQyAyMDUwLjgzNDEsMTY5NC4wMDM1IDIwMDcuNzUxLDE3NTMuMTY5NiAyMDA3Ljc1MSwxODIwLjkyIEwgMjAwNy43NSwxODIwLjkyIHogTSAyMDUzLjEyNDQsMTgyMC45MiBDIDIwNTMuMTI0NCwxNzc1LjU0NDQgMjA2NC41ODIzLDE3MjUuNTg2MSAyMTIyLjA0MDUsMTcyMi4xMjc5IEMgMjE3Ni4wNDA1LDE3MjUuMDAzOSAyMTkyLjEyNDgsMTc3NS41NDQ0IDIxOTIuMTI0OCwxODIwLjkyIEMgMjE5Mi4xMjQ4LDE4NjkuMTcwNCAyMTgxLjc1LDE5MjguOTIgMjEyMy4xNjYxLDE5MzAuNjI4IEMgMjA2OS4yMDc0LDE5MzAuMDQ0NSAyMDUzLjcwNzgsMTg2OS4xNzA1IDIwNTMuNzA3OCwxODIwLjkyIEwgMjA1My4xMjQzLDE4MjAuOTIgTCAyMDUzLjEyNDQsMTgyMC45MiB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzEyNjY3NzQ1NiIgLz4KLQotICAgIDxwYXRoCi0gICBkPSJNIDI0NzcuMDQsMTk1MS4yOSBMIDI0NzcuMDQsMTc1OC44NzMgQyAyNDc3LjA0LDE3MjQuOTk5IDI0NTAuMDgxMywxNzAzLjE2NTEgMjQxOS42MjMxLDE2OTYuMjg5OSBDIDIzODkuNzQ4MywxNjg5LjQxNDcgMjM2MS42MjM5LDE2OTUuMTY1NSAyMzQwLjk1NywxNzAwLjg3MzggQyAyMzE0LjQ5OTEsMTcwNy43OTAzIDIyOTUuNTgxNCwxNzE5LjgzMTcgMjI3NC4zMzIyLDE3MzUuMzMxMyBMIDIyNzQuMzMyMiwxOTUxLjI5MDMgTCAyMzE2LjI0ODMsMTk1MS4yOTAzIEwgMjMxNi4yNDgzLDE3NDAuNDk5MyBDIDIzMjkuNDU2NiwxNzMxLjMzMjcgMjM1MC43MDcsMTcyMS41ODI4IDIzNzMuMDgxOCwxNzIwLjk5OTMgQyAyNDA5Ljg3MzEsMTcyMC40MTU4IDI0MzUuMTIzOSwxNzQxLjY2NjIgMjQzNS4xMjM5LDE3ODAuMTY1NCBMIDI0MzUuMTIzOSwxOTUxLjI5MDQgTCAyNDc3LjA0LDE5NTEuMjkwNCBMIDI0NzcuMDQsMTk1MS4yOSB6ICIKLSAgIHN0eWxlPSJmaWxsOiM2YTZhNmEiCi0gICBpZD0iXzEyNjY3ODE3NiIgLz4KLQotICAgPC9nPgotCi0gIDwvZz4KLSAgICA8cGF0aAotICAgICAgIGQ9Ik0gMTY3LjU1NDYyLDQ4OC4xNjY2NCBDIDE2Ny41NTQ2Miw1MDAuNTg0MTggMTUyLjY2MTkyLDUxMC41MTI2NSAxMjcuODQwMjUsNTEwLjUxMjY1IEMgMTAzLjAxODcsNTEwLjUxMjY1IDg4LjEyNTg3LDUwMC41ODQxOCA4OC4xMjU4Nyw0ODguMTc5NzkgTCA4OC4xMjU4Nyw0NTAuOTQxMDUgQyA4OC4xMjU4Nyw0MzkuOTc5ODggOTcuMDIxNjM2LDQzMS4wODM3NCAxMDcuOTgyOCw0MzEuMDgzNzQgTCAxNDcuNjk3NSw0MzEuMDgzNzQgQyAxNjEuMzk4NzcsNDMxLjA4Mzc0IDE3Mi41MTkwNCw0MTkuOTYzODQgMTcyLjUxOTA0LDQwNi4yNjI1NyBMIDE3Mi41MTkwNCwzODguODgwOCBMIDE4Ny40MTE3NCwzODguODkzOTIgQyAxOTkuODE1NzUsMzg4Ljg5MzkyIDIwOS43NDQ2LDQwMy43ODcgMjA5Ljc0NDYsNDI4LjYwODI5IEMgMjA5Ljc0NDYsNDUzLjQyOTg0IDE5OS44MTU3NSw0NjguMzIyOTggMTg3LjQxMTc0LDQ2OC4zMjI5OCBMIDEyNy44NDAxOCw0NjguMzA5ODYgTCAxMjcuODQwMTgsNDczLjI3NDEgTCAxNjcuNTU0NTYsNDczLjI3NDEgTCAxNjcuNTU0NTYsNDg4LjE2NjggTCAxNjcuNTU0NjIsNDg4LjE2NjY0IHogTSAxNTAuMTczMjMsNDk4LjA5NTEgQyAxNDYuMDY5NDYsNDk4LjA5NTEgMTQyLjczMzQ1LDQ5NC43NTk0OCAxNDIuNzMzNDUsNDkwLjY1NTMzIEMgMTQyLjczMzQ1LDQ4Ni41Mzg0MSAxNDYuMDY5NDYsNDgzLjIwMjQgMTUwLjE3MzIzLDQ4My4yMDI0IEMgMTU0LjI5MDE1LDQ4My4yMDI0IDE1Ny42MjYxNSw0ODYuNTM4NDEgMTU3LjYyNjE1LDQ5MC42NTUzMyBDIDE1Ny42MjYxNSw0OTQuNzU5NDggMTU0LjI5MDE1LDQ5OC4wOTUxIDE1MC4xNzMyMyw0OTguMDk1MSB6ICIKLSAgICAgICBzdHlsZT0iZmlsbDp1cmwoI3B5WWVsbG93KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZCIKLSAgICAgICBpZD0icGF0aDIzNCIgLz4KLSAgPC9nPgotPC9zdmc+CmRpZmYgLS1naXQgYS9QQy9pY29ucy9zb3VyY2UueGFyIGIvUEMvaWNvbnMvc291cmNlLnhhcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRjYmJjNC4uMDAwMDAwMAotLS0gYS9QQy9pY29ucy9zb3VyY2UueGFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvUEMvaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlci5jIGIvUEMvaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MzQ3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9QQy9pbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyLmMKQEAgLTAsMCArMSwyMiBAQAorI2lmZGVmIF9NU0NfVkVSCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmIF9NU0NfVkVSID49IDE5MDAKKy8qIHB5Y29uZmlnLmggdXNlcyB0aGlzIGZ1bmN0aW9uIGluIHRoZSBfUHlfQkVHSU4vRU5EX1NVUFBSRVNTX0lQSAorICogbWFjcm9zLiBJdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGRlZmluZWQgd2hlbiBidWlsZGluZyB1c2luZyBNU1ZDCisgKiBlYXJsaWVyIHRoYW4gMTQuMCAoX01TQ19WRVIgPT0gMTkwMCkuCisgKi8KKworc3RhdGljIHZvaWQgX19jZGVjbCBfc2lsZW50X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIoCisgICAgd2NoYXJfdCBjb25zdCogZXhwcmVzc2lvbiwKKyAgICB3Y2hhcl90IGNvbnN0KiBmdW5jdGlvbiwKKyAgICB3Y2hhcl90IGNvbnN0KiBmaWxlLAorICAgIHVuc2lnbmVkIGludCBsaW5lLAorICAgIHVpbnRwdHJfdCBwUmVzZXJ2ZWQpIHsgfQorCitfaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlciBfUHlfc2lsZW50X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIgPSBfc2lsZW50X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXI7CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1BDL2xhdW5jaGVyLmMgYi9QQy9sYXVuY2hlci5jCmluZGV4IGJiYjI4ZGEuLjQwZDRjYjUgMTAwNjQ0Ci0tLSBhL1BDL2xhdW5jaGVyLmMKKysrIGIvUEMvbGF1bmNoZXIuYwpAQCAtODcsMTYgKzg3LDE2IEBACiAgICAgaWYgKHJjID09IDApIHsgIC8qIGEgV2luZG93cyBlcnJvciAqLwogICAgICAgICB3aW5lcnJvcihHZXRMYXN0RXJyb3IoKSwgd2luX21lc3NhZ2UsIE1TR1NJWkUpOwogICAgICAgICBpZiAobGVuID49IDApIHsKLSAgICAgICAgICAgIF9zbndwcmludGZfcygmbWVzc2FnZVtsZW5dLCBNU0dTSVpFIC0gbGVuLCBfVFJVTkNBVEUsIEwiOiAlcyIsCisgICAgICAgICAgICBfc253cHJpbnRmX3MoJm1lc3NhZ2VbbGVuXSwgTVNHU0laRSAtIGxlbiwgX1RSVU5DQVRFLCBMIjogJWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5fbWVzc2FnZSk7CiAgICAgICAgIH0KICAgICB9CiAKICNpZiAhZGVmaW5lZChfV0lORE9XUykKLSAgICBmd3ByaW50ZihzdGRlcnIsIEwiJXNcbiIsIG1lc3NhZ2UpOworICAgIGZ3cHJpbnRmKHN0ZGVyciwgTCIlbHNcbiIsIG1lc3NhZ2UpOwogI2Vsc2UKICAgICBNZXNzYWdlQm94KE5VTEwsIG1lc3NhZ2UsIFRFWFQoIlB5dGhvbiBMYXVuY2hlciBpcyBzb3JyeSB0byBzYXkgLi4uIiksCi0gICAgICAgICAgICAgICBNQl9PSyk7IAorICAgICAgICAgICAgICAgTUJfT0spOwogI2VuZGlmCiAgICAgRXhpdFByb2Nlc3MocmMpOwogfQpAQCAtMTU3LDE1ICsxNTcsMjMgQEAKIAogc3RhdGljIHNpemVfdCBudW1faW5zdGFsbGVkX3B5dGhvbnMgPSAwOwogCi0vKiB0byBob2xkIFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXFguWVxJbnN0YWxsUGF0aCAqLworLyoKKyAqIFRvIGhvbGQgU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcWC5ZLi4uXEluc3RhbGxQYXRoCisgKiBUaGUgdmVyc2lvbiBuYW1lIGNhbiBiZSBsb25nZXIgdGhhbiBNQVhfVkVSU0lPTl9TSVpFLCBidXQgd2lsbCBiZQorICogdHJ1bmNhdGVkIHRvIGp1c3QgWC5ZIGZvciBjb21wYXJpc29ucy4KKyAqLwogI2RlZmluZSBJUF9CQVNFX1NJWkUgNDAKLSNkZWZpbmUgSVBfU0laRSAoSVBfQkFTRV9TSVpFICsgTUFYX1ZFUlNJT05fU0laRSkKKyNkZWZpbmUgSVBfVkVSU0lPTl9TSVpFIDgKKyNkZWZpbmUgSVBfU0laRSAoSVBfQkFTRV9TSVpFICsgSVBfVkVSU0lPTl9TSVpFKQogI2RlZmluZSBDT1JFX1BBVEggTCJTT0ZUV0FSRVxcUHl0aG9uXFxQeXRob25Db3JlIgogCiBzdGF0aWMgd2NoYXJfdCAqIGxvY2F0aW9uX2NoZWNrc1tdID0gewogICAgIEwiXFwiLAotICAgIEwiXFxQQ0J1aWxkXFwiLAorICAgIEwiXFxQQ0J1aWxkXFx3aW4zMlxcIiwKICAgICBMIlxcUENCdWlsZFxcYW1kNjRcXCIsCisgICAgLy8gVG8gc3VwcG9ydCBlYXJseSAzMmJpdCB2ZXJzaW9ucyBvZiBQeXRob24gdGhhdCBzdHVjayB0aGUgYnVpbGQgYmluYXJpZXMKKyAgICAvLyBkaXJlY3RseSBpbiBQQ0J1aWxkLi4uCisgICAgTCJcXFBDQnVpbGRcXCIsCiAgICAgTlVMTAogfTsKIApAQCAtMTk2LDM1ICsyMDQsMzggQEAKICAgICBCT09MIG9rOwogICAgIERXT1JEIHR5cGUsIGRhdGFfc2l6ZSwgYXR0cnM7CiAgICAgSU5TVEFMTEVEX1BZVEhPTiAqIGlwLCAqIHBpcDsKKyAgICB3Y2hhcl90IGlwX3ZlcnNpb25bSVBfVkVSU0lPTl9TSVpFXTsKICAgICB3Y2hhcl90IGlwX3BhdGhbSVBfU0laRV07CiAgICAgd2NoYXJfdCAqIGNoZWNrOwogICAgIHdjaGFyX3QgKiogY2hlY2twOwogICAgIHdjaGFyX3QgKmtleV9uYW1lID0gKHJvb3QgPT0gSEtFWV9MT0NBTF9NQUNISU5FKSA/IEwiSEtMTSIgOiBMIkhLQ1UiOwogCiAgICAgaWYgKHN0YXR1cyAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICBkZWJ1ZyhMImxvY2F0ZV9weXRob25zX2Zvcl9rZXk6IHVuYWJsZSB0byBvcGVuIFB5dGhvbkNvcmUga2V5IGluICVzXG4iLAorICAgICAgICBkZWJ1ZyhMImxvY2F0ZV9weXRob25zX2Zvcl9rZXk6IHVuYWJsZSB0byBvcGVuIFB5dGhvbkNvcmUga2V5IGluICVsc1xuIiwKICAgICAgICAgICAgICAga2V5X25hbWUpOwogICAgIGVsc2UgewogICAgICAgICBpcCA9ICZpbnN0YWxsZWRfcHl0aG9uc1tudW1faW5zdGFsbGVkX3B5dGhvbnNdOwogICAgICAgICBmb3IgKGkgPSAwOyBudW1faW5zdGFsbGVkX3B5dGhvbnMgPCBNQVhfSU5TVEFMTEVEX1BZVEhPTlM7IGkrKykgewotICAgICAgICAgICAgc3RhdHVzID0gUmVnRW51bUtleVcoY29yZV9yb290LCBpLCBpcC0+dmVyc2lvbiwgTUFYX1ZFUlNJT05fU0laRSk7CisgICAgICAgICAgICBzdGF0dXMgPSBSZWdFbnVtS2V5Vyhjb3JlX3Jvb3QsIGksIGlwX3ZlcnNpb24sIElQX1ZFUlNJT05fU0laRSk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVSUk9SX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVSUk9SX05PX01PUkVfSVRFTVMpIHsKICAgICAgICAgICAgICAgICAgICAgLyogdW5leHBlY3RlZCBlcnJvciAqLwogICAgICAgICAgICAgICAgICAgICB3aW5lcnJvcihzdGF0dXMsIG1lc3NhZ2UsIE1TR1NJWkUpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIkNhbid0IGVudW1lcmF0ZSByZWdpc3RyeSBrZXkgZm9yIHZlcnNpb24gJXM6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpcC0+dmVyc2lvbiwgbWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwiQ2FuJ3QgZW51bWVyYXRlIHJlZ2lzdHJ5IGtleSBmb3IgdmVyc2lvbiAlbHM6ICVsc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXBfdmVyc2lvbiwgbWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgd2NzbmNweV9zKGlwLT52ZXJzaW9uLCBNQVhfVkVSU0lPTl9TSVpFLCBpcF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfVkVSU0lPTl9TSVpFLTEpOwogICAgICAgICAgICAgICAgIF9zbndwcmludGZfcyhpcF9wYXRoLCBJUF9TSVpFLCBfVFJVTkNBVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEwiJXNcXCVzXFxJbnN0YWxsUGF0aCIsIENPUkVfUEFUSCwgaXAtPnZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMIiVsc1xcJWxzXFxJbnN0YWxsUGF0aCIsIENPUkVfUEFUSCwgaXBfdmVyc2lvbik7CiAgICAgICAgICAgICAgICAgc3RhdHVzID0gUmVnT3BlbktleUV4Vyhyb290LCBpcF9wYXRoLCAwLCBmbGFncywgJmlwX2tleSk7CiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBFUlJPUl9TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICAgICAgIHdpbmVycm9yKHN0YXR1cywgbWVzc2FnZSwgTVNHU0laRSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6ICdtZXNzYWdlJyBhbHJlYWR5IGhhcyBhIHRyYWlsaW5nIFxuCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKEwiJXNcXCVzOiAlcyIsIGtleV9uYW1lLCBpcF9wYXRoLCBtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoTCIlbHNcXCVsczogJWxzIiwga2V5X25hbWUsIGlwX3BhdGgsIG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGF0YV9zaXplID0gc2l6ZW9mKGlwLT5leGVjdXRhYmxlKSAtIDE7CkBAIC0yMzMsNyArMjQ0LDcgQEAKICAgICAgICAgICAgICAgICBSZWdDbG9zZUtleShpcF9rZXkpOwogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gRVJST1JfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgICAgICB3aW5lcnJvcihzdGF0dXMsIG1lc3NhZ2UsIE1TR1NJWkUpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIiVzXFwlczogJXNcbiIsIGtleV9uYW1lLCBpcF9wYXRoLCBtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoTCIlbHNcXCVsczogJWxzXG4iLCBrZXlfbmFtZSwgaXBfcGF0aCwgbWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBSRUdfU1opIHsKQEAgLTI0NiwyNyArMjU3LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBfc253cHJpbnRmX3MoJmlwLT5leGVjdXRhYmxlW2RhdGFfc2l6ZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1BBVEggLSBkYXRhX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1BBVEggLSBkYXRhX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCIlcyVzIiwgY2hlY2ssIFBZVEhPTl9FWEVDVVRBQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMIiVscyVscyIsIGNoZWNrLCBQWVRIT05fRVhFQ1VUQUJMRSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyhpcC0+ZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5lcnJvcihHZXRMYXN0RXJyb3IoKSwgbWVzc2FnZSwgTVNHU0laRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJsb2NhdGVfcHl0aG9uc19mb3Jfa2V5OiAlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlX3B5dGhvbnNfZm9yX2tleTogJWxzOiAlbHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwLT5leGVjdXRhYmxlLCBtZXNzYWdlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJsb2NhdGVfcHl0aG9uc19mb3Jfa2V5OiAnJXMnIGlzIGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlX3B5dGhvbnNfZm9yX2tleTogJyVscycgaXMgYSBcCiBkaXJlY3RvcnlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAtPmV4ZWN1dGFibGUsIGF0dHJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpbmRfZXhpc3RpbmdfcHl0aG9uKGlwLT5leGVjdXRhYmxlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlX3B5dGhvbnNfZm9yX2tleTogJXM6IGFscmVhZHkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlX3B5dGhvbnNfZm9yX2tleTogJWxzOiBhbHJlYWR5IFwKIGZvdW5kXG4iLCBpcC0+ZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayB0aGUgZXhlY3V0YWJsZSB0eXBlLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gR2V0QmluYXJ5VHlwZVcoaXAtPmV4ZWN1dGFibGUsICZhdHRycyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIkZhaWx1cmUgZ2V0dGluZyBiaW5hcnkgdHlwZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwiRmFpbHVyZSBnZXR0aW5nIGJpbmFyeSB0eXBlOiAlbHNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwLT5leGVjdXRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0yNzcsNyArMjg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAtPmJpdHMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXAtPmJpdHMgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJsb2NhdGVfcHl0aG9uc19mb3Jfa2V5OiAlczogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJsb2NhdGVfcHl0aG9uc19mb3Jfa2V5OiAlbHM6IFwKIGludmFsaWQgYmluYXJ5IHR5cGU6ICVYXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAtPmV4ZWN1dGFibGUsIGF0dHJzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjkxLDcgKzMwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAtPmV4ZWN1dGFibGVbbiArIDFdID0gTCdcIic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAtPmV4ZWN1dGFibGVbbiArIDJdID0gTCdcMCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMImxvY2F0ZV9weXRob25zX2Zvcl9rZXk6ICVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlX3B5dGhvbnNfZm9yX2tleTogJWxzIFwKIGlzIGEgJWRiaXQgZXhlY3V0YWJsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcC0+ZXhlY3V0YWJsZSwgaXAtPmJpdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytudW1faW5zdGFsbGVkX3B5dGhvbnM7CkBAIC0zNDEsNyArMzUyLDcgQEAKICAgICAgICAgbG9jYXRlX3B5dGhvbnNfZm9yX2tleShIS0VZX0NVUlJFTlRfVVNFUiwgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpOwogICAgICAgICBsb2NhdGVfcHl0aG9uc19mb3Jfa2V5KEhLRVlfTE9DQUxfTUFDSElORSwgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpOwogICAgIH0KLSNlbmRpZiAgICAKKyNlbmRpZgogICAgIC8vIG5vdyBoaXQgdGhlICJuYXRpdmUiIGtleSBmb3IgdGhpcyBwcm9jZXNzIGJpdHRlZG5lc3MuCiAgICAgZGVidWcoTCJsb2NhdGluZyBQeXRob25zIGluIG5hdGl2ZSByZWdpc3RyeVxuIik7CiAgICAgbG9jYXRlX3B5dGhvbnNfZm9yX2tleShIS0VZX0NVUlJFTlRfVVNFUiwgS0VZX1JFQUQpOwpAQCAtMzc2LDYgKzM4NywzMSBAQAogfQogCiAKK3N0YXRpYyB3Y2hhcl90ICoKK2ZpbmRfcHl0aG9uX2J5X3ZlbnYoKQoreworICAgIHN0YXRpYyB3Y2hhcl90IHZlbnZfcHl0aG9uW01BWF9QQVRIXTsKKyAgICB3Y2hhcl90ICp2aXJ0dWFsX2VudiA9IGdldF9lbnYoTCJWSVJUVUFMX0VOViIpOworICAgIERXT1JEIGF0dHJzOworCisgICAgLyogQ2hlY2sgZm9yIFZJUlRVQUxfRU5WIGVudmlyb25tZW50IHZhcmlhYmxlICovCisgICAgaWYgKHZpcnR1YWxfZW52ID09IE5VTEwgfHwgdmlydHVhbF9lbnZbMF0gPT0gTCdcMCcpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIGEgcHl0aG9uIGV4ZWN1dGFibGUgaW4gdGhlIHZlbnYgKi8KKyAgICBkZWJ1ZyhMIkNoZWNraW5nIGZvciBQeXRob24gZXhlY3V0YWJsZSBpbiB2aXJ0dWFsIGVudiAnJWxzJ1xuIiwgdmlydHVhbF9lbnYpOworICAgIF9zbndwcmludGZfcyh2ZW52X3B5dGhvbiwgTUFYX1BBVEgsIF9UUlVOQ0FURSwKKyAgICAgICAgICAgIEwiJWxzXFxTY3JpcHRzXFwlbHMiLCB2aXJ0dWFsX2VudiwgUFlUSE9OX0VYRUNVVEFCTEUpOworICAgIGF0dHJzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHZlbnZfcHl0aG9uKTsKKyAgICBpZiAoYXR0cnMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpIHsKKyAgICAgICAgZGVidWcoTCJQeXRob24gZXhlY3V0YWJsZSAlbHMgbWlzc2luZyBmcm9tIHZpcnR1YWwgZW52XG4iLCB2ZW52X3B5dGhvbik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiB2ZW52X3B5dGhvbjsKK30KKwogc3RhdGljIHdjaGFyX3QgYXBwZGF0YV9pbmlfcGF0aFtNQVhfUEFUSF07CiBzdGF0aWMgd2NoYXJfdCBsYXVuY2hlcl9pbmlfcGF0aFtNQVhfUEFUSF07CiAKQEAgLTM5Nyw3ICs0MzMsNyBAQAogICAgIERXT1JEIHNpemU7CiAKICAgICAvKiBGaXJzdCwgc2VhcmNoIHRoZSBlbnZpcm9ubWVudC4gKi8KLSAgICBfc253cHJpbnRmX3MoY29uZmlndXJlZF92YWx1ZSwgTVNHU0laRSwgX1RSVU5DQVRFLCBMInB5XyVzIiwga2V5KTsKKyAgICBfc253cHJpbnRmX3MoY29uZmlndXJlZF92YWx1ZSwgTVNHU0laRSwgX1RSVU5DQVRFLCBMInB5XyVscyIsIGtleSk7CiAgICAgcmVzdWx0ID0gZ2V0X2Vudihjb25maWd1cmVkX3ZhbHVlKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwgJiYgYXBwZGF0YV9pbmlfcGF0aFswXSkgewogICAgICAgICAvKiBOb3QgaW4gZW52aXJvbm1lbnQ6IGNoZWNrIGxvY2FsIGNvbmZpZ3VyYXRpb24uICovCkBAIC00MjAsMTAgKzQ1NiwxMCBAQAogICAgICAgICB9CiAgICAgfQogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgZGVidWcoTCJmb3VuZCBjb25maWd1cmVkIHZhbHVlICclcz0lcycgaW4gJXNcbiIsCisgICAgICAgIGRlYnVnKEwiZm91bmQgY29uZmlndXJlZCB2YWx1ZSAnJWxzPSVscycgaW4gJWxzXG4iLAogICAgICAgICAgICAgICBrZXksIHJlc3VsdCwgZm91bmRfaW4gPyBmb3VuZF9pbiA6IEwiKHVua25vd24pIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZGVidWcoTCJmb3VuZCBubyBjb25maWd1cmVkIHZhbHVlIGZvciAnJXMnXG4iLCBrZXkpOworICAgICAgICBkZWJ1ZyhMImZvdW5kIG5vIGNvbmZpZ3VyZWQgdmFsdWUgZm9yICclbHMnXG4iLCBrZXkpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDQ5LDkgKzQ4NSw5IEBACiAgICAgfQogICAgIGlmICgqd2FudGVkX3ZlcikgewogICAgICAgICByZXN1bHQgPSBmaW5kX3B5dGhvbl9ieV92ZXJzaW9uKHdhbnRlZF92ZXIpOwotICAgICAgICBkZWJ1ZyhMInNlYXJjaCBmb3IgUHl0aG9uIHZlcnNpb24gJyVzJyBmb3VuZCAiLCB3YW50ZWRfdmVyKTsKKyAgICAgICAgZGVidWcoTCJzZWFyY2ggZm9yIFB5dGhvbiB2ZXJzaW9uICclbHMnIGZvdW5kICIsIHdhbnRlZF92ZXIpOwogICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhMIiclcydcbiIsIHJlc3VsdC0+ZXhlY3V0YWJsZSk7CisgICAgICAgICAgICBkZWJ1ZyhMIiclbHMnXG4iLCByZXN1bHQtPmV4ZWN1dGFibGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZGVidWcoTCJubyBpbnRlcnByZXRlclxuIik7CiAgICAgICAgIH0KQEAgLTQ2Nyw3ICs1MDMsNyBAQAogICAgICAgICAgICAgcmVzdWx0ID0gZmluZF9weXRob25fYnlfdmVyc2lvbihMIjMiKTsKICAgICAgICAgZGVidWcoTCJzZWFyY2ggZm9yIGRlZmF1bHQgUHl0aG9uIGZvdW5kICIpOwogICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICBkZWJ1ZyhMInZlcnNpb24gJXMgYXQgJyVzJ1xuIiwKKyAgICAgICAgICAgIGRlYnVnKEwidmVyc2lvbiAlbHMgYXQgJyVscydcbiIsCiAgICAgICAgICAgICAgICAgICByZXN1bHQtPnZlcnNpb24sIHJlc3VsdC0+ZXhlY3V0YWJsZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkZWJ1ZyhMIm5vIGludGVycHJldGVyXG4iKTsKQEAgLTUwNSwxOSArNTQxLDE5IEBACiAgICAgcGxlbiA9IEdldE1vZHVsZUZpbGVOYW1lVyhOVUxMLCB3cmFwcGVkX3NjcmlwdF9wYXRoLCBNQVhfUEFUSCk7CiAgICAgcCA9IHdjc3JjaHIod3JhcHBlZF9zY3JpcHRfcGF0aCwgTCcuJyk7CiAgICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBkZWJ1ZyhMIkdldE1vZHVsZUZpbGVOYW1lVyByZXR1cm5lZCB2YWx1ZSBoYXMgbm8gZXh0ZW5zaW9uOiAlc1xuIiwKKyAgICAgICAgZGVidWcoTCJHZXRNb2R1bGVGaWxlTmFtZVcgcmV0dXJuZWQgdmFsdWUgaGFzIG5vIGV4dGVuc2lvbjogJWxzXG4iLAogICAgICAgICAgICAgICB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKLSAgICAgICAgZXJyb3IoUkNfTk9fU0NSSVBULCBMIldyYXBwZXIgbmFtZSAnJXMnIGlzIG5vdCB2YWxpZC4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgZXJyb3IoUkNfTk9fU0NSSVBULCBMIldyYXBwZXIgbmFtZSAnJWxzJyBpcyBub3QgdmFsaWQuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CiAgICAgfQogCiAgICAgd2NzbmNweV9zKHAsIE1BWF9QQVRIIC0gKHAgLSB3cmFwcGVkX3NjcmlwdF9wYXRoKSArIDEsIFNDUklQVF9TVUZGSVgsIF9UUlVOQ0FURSk7CiAgICAgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cod3JhcHBlZF9zY3JpcHRfcGF0aCk7CiAgICAgaWYgKGF0dHJzID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7Ci0gICAgICAgIGRlYnVnKEwiRmlsZSAnJXMnIG5vbi1leGlzdGVudFxuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7Ci0gICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJTY3JpcHQgZmlsZSAnJXMnIGlzIG5vdCBwcmVzZW50LiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgICAgICBkZWJ1ZyhMIkZpbGUgJyVscycgbm9uLWV4aXN0ZW50XG4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgZXJyb3IoUkNfTk9fU0NSSVBULCBMIlNjcmlwdCBmaWxlICclbHMnIGlzIG5vdCBwcmVzZW50LiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOwogICAgIH0KIAotICAgIGRlYnVnKEwiVXNpbmcgd3JhcHBlZCBzY3JpcHQgZmlsZSAnJXMnXG4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICBkZWJ1ZyhMIlVzaW5nIHdyYXBwZWQgc2NyaXB0IGZpbGUgJyVscydcbiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOwogfQogI2VuZGlmCiAKQEAgLTU3MSw3ICs2MDcsNyBAQAogICAgIC8vIHdpbmRvdywgb3IgZmV0Y2hpbmcgYSBtZXNzYWdlKS4gIEFzIHRoaXMgbGF1bmNoZXIgZG9lc24ndCBkbyB0aGlzCiAgICAgLy8gZGlyZWN0bHksIHRoYXQgY3Vyc29yIHJlbWFpbnMgZXZlbiBhZnRlciB0aGUgY2hpbGQgcHJvY2VzcyBkb2VzIHRoZXNlCiAgICAgLy8gdGhpbmdzLiAgV2UgYXZvaWQgdGhhdCBieSBkb2luZyBhIHNpbXBsZSBwb3N0K2dldCBtZXNzYWdlLgotICAgIC8vIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTcyOTAgYW5kIAorICAgIC8vIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTcyOTAgYW5kCiAgICAgLy8gaHR0cHM6Ly9iaXRidWNrZXQub3JnL3ZpbmF5LnNhamlwL3B5bGF1bmNoZXIvaXNzdWUvMjAvYnVzeS1jdXJzb3ItZm9yLWEtbG9uZy10aW1lLXdoZW4tcnVubmluZwogICAgIE1TRyBtc2c7CiAKQEAgLTU3OSw3ICs2MTUsNyBAQAogICAgIEdldE1lc3NhZ2UoJm1zZywgMCwgMCwgMCk7CiAjZW5kaWYKIAotICAgIGRlYnVnKEwicnVuX2NoaWxkOiBhYm91dCB0byBydW4gJyVzJ1xuIiwgY21kbGluZSk7CisgICAgZGVidWcoTCJydW5fY2hpbGQ6IGFib3V0IHRvIHJ1biAnJWxzJ1xuIiwgY21kbGluZSk7CiAgICAgam9iID0gQ3JlYXRlSm9iT2JqZWN0KE5VTEwsIE5VTEwpOwogICAgIG9rID0gUXVlcnlJbmZvcm1hdGlvbkpvYk9iamVjdChqb2IsIEpvYk9iamVjdEV4dGVuZGVkTGltaXRJbmZvcm1hdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5mbywgc2l6ZW9mKGluZm8pLCAmcmMpOwpAQCAtNjExLDcgKzY0Nyw3IEBACiAgICAgb2sgPSBDcmVhdGVQcm9jZXNzVyhOVUxMLCBjbWRsaW5lLCBOVUxMLCBOVUxMLCBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgJnNpLCAmcGkpOwogICAgIGlmICghb2spCi0gICAgICAgIGVycm9yKFJDX0NSRUFURV9QUk9DRVNTLCBMIlVuYWJsZSB0byBjcmVhdGUgcHJvY2VzcyB1c2luZyAnJXMnIiwgY21kbGluZSk7CisgICAgICAgIGVycm9yKFJDX0NSRUFURV9QUk9DRVNTLCBMIlVuYWJsZSB0byBjcmVhdGUgcHJvY2VzcyB1c2luZyAnJWxzJyIsIGNtZGxpbmUpOwogICAgIEFzc2lnblByb2Nlc3NUb0pvYk9iamVjdChqb2IsIHBpLmhQcm9jZXNzKTsKICAgICBDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgocGkuaFByb2Nlc3MsIElORklOSVRFLCBGQUxTRSk7CkBAIC02NDgsMTEgKzY4NCwxMSBAQAogICAgICAgICAgICAgICAgICAgY2hpbGRfY29tbWFuZF9zaXplKTsKICAgICAgICAgaWYgKG5vX3N1ZmZpeCkKICAgICAgICAgICAgIF9zbndwcmludGZfcyhjaGlsZF9jb21tYW5kLCBjaGlsZF9jb21tYW5kX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRfY29tbWFuZF9zaXplIC0gMSwgTCIlcyAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRfY29tbWFuZF9zaXplIC0gMSwgTCIlbHMgJWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlLCBjbWRsaW5lKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgX3Nud3ByaW50Zl9zKGNoaWxkX2NvbW1hbmQsIGNoaWxkX2NvbW1hbmRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZF9jb21tYW5kX3NpemUgLSAxLCBMIiVzICVzICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZF9jb21tYW5kX3NpemUgLSAxLCBMIiVscyAlbHMgJWxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlLCBzdWZmaXgsIGNtZGxpbmUpOwogICAgICAgICBydW5fY2hpbGQoY2hpbGRfY29tbWFuZCk7CiAgICAgICAgIGZyZWUoY2hpbGRfY29tbWFuZCk7CkBAIC03OTEsNyArODI3LDcgQEAKIGFkZF9jb21tYW5kKHdjaGFyX3QgKiBuYW1lLCB3Y2hhcl90ICogY21kbGluZSkKIHsKICAgICBpZiAobnVtX2NvbW1hbmRzID49IE1BWF9DT01NQU5EUykgewotICAgICAgICBkZWJ1ZyhMImNhbid0IGFkZCAlcyA9ICclcyc6IG5vIHJvb21cbiIsIG5hbWUsIGNtZGxpbmUpOworICAgICAgICBkZWJ1ZyhMImNhbid0IGFkZCAlbHMgPSAnJWxzJzogbm8gcm9vbVxuIiwgbmFtZSwgY21kbGluZSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBDT01NQU5EICogY3AgPSAmY29tbWFuZHNbbnVtX2NvbW1hbmRzKytdOwpAQCAtODEzLDE0ICs4NDksMTQgQEAKICAgICByZWFkID0gR2V0UHJpdmF0ZVByb2ZpbGVTdHJpbmdXKEwiY29tbWFuZHMiLCBOVUxMLCBOVUxMLCBrZXluYW1lcywgTVNHU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wYXRoKTsKICAgICBpZiAocmVhZCA9PSBNU0dTSVpFIC0gMSkgewotICAgICAgICBkZWJ1ZyhMInJlYWRfY29tbWFuZHM6ICVzOiBub3QgZW5vdWdoIHNwYWNlIGZvciBuYW1lc1xuIiwgY29uZmlnX3BhdGgpOworICAgICAgICBkZWJ1ZyhMInJlYWRfY29tbWFuZHM6ICVsczogbm90IGVub3VnaCBzcGFjZSBmb3IgbmFtZXNcbiIsIGNvbmZpZ19wYXRoKTsKICAgICB9CiAgICAga2V5ID0ga2V5bmFtZXM7CiAgICAgd2hpbGUgKCprZXkpIHsKICAgICAgICAgcmVhZCA9IEdldFByaXZhdGVQcm9maWxlU3RyaW5nVyhMImNvbW1hbmRzIiwga2V5LCBOVUxMLCB2YWx1ZSwgTVNHU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wYXRoKTsKICAgICAgICAgaWYgKHJlYWQgPT0gTVNHU0laRSAtIDEpIHsKLSAgICAgICAgICAgIGRlYnVnKEwicmVhZF9jb21tYW5kczogJXM6IG5vdCBlbm91Z2ggc3BhY2UgZm9yICVzXG4iLAorICAgICAgICAgICAgZGVidWcoTCJyZWFkX2NvbW1hbmRzOiAlbHM6IG5vdCBlbm91Z2ggc3BhY2UgZm9yICVsc1xuIiwKICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wYXRoLCBrZXkpOwogICAgICAgICB9CiAgICAgICAgIGNtZHAgPSBza2lwX3doaXRlc3BhY2UodmFsdWUpOwpAQCAtOTMyLDEwICs5NjgsMTIgQEAKICAqLwogc3RhdGljIEJPTSBCT01zW10gPSB7CiAgICAgeyAzLCB7IDB4RUYsIDB4QkIsIDB4QkYgfSwgQ1BfVVRGOCB9LCAgICAgICAgICAgLyogVVRGLTggLSBrZWVwIGZpcnN0ICovCi0gICAgeyAyLCB7IDB4RkYsIDB4RkUgfSwgQ1BfVVRGMTZMRSB9LCAgICAgICAgICAgICAgLyogVVRGLTE2TEUgKi8KLSAgICB7IDIsIHsgMHhGRSwgMHhGRiB9LCBDUF9VVEYxNkJFIH0sICAgICAgICAgICAgICAvKiBVVEYtMTZCRSAqLworICAgIC8qIFRlc3QgVVRGLTMyTEUgYmVmb3JlIFVURi0xNkxFIHNpbmNlIFVURi0xNkxFIEJPTSBpcyBhIHByZWZpeAorICAgICAqIG9mIFVURi0zMkxFIEJPTS4gKi8KICAgICB7IDQsIHsgMHhGRiwgMHhGRSwgMHgwMCwgMHgwMCB9LCBDUF9VVEYzMkxFIH0sICAvKiBVVEYtMzJMRSAqLwogICAgIHsgNCwgeyAweDAwLCAweDAwLCAweEZFLCAweEZGIH0sIENQX1VURjMyQkUgfSwgIC8qIFVURi0zMkJFICovCisgICAgeyAyLCB7IDB4RkYsIDB4RkUgfSwgQ1BfVVRGMTZMRSB9LCAgICAgICAgICAgICAgLyogVVRGLTE2TEUgKi8KKyAgICB7IDIsIHsgMHhGRSwgMHhGRiB9LCBDUF9VVEYxNkJFIH0sICAgICAgICAgICAgICAvKiBVVEYtMTZCRSAqLwogICAgIHsgMCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0xMDMwLDE4ICsxMDY4LDIxIEBACiB9IFBZQ19NQUdJQzsKIAogc3RhdGljIFBZQ19NQUdJQyBtYWdpY192YWx1ZXNbXSA9IHsKLSAgICB7IDB4YzY4NywgMHhjNjg3LCBMIjIuMCIgfSwKLSAgICB7IDB4ZWIyYSwgMHhlYjJhLCBMIjIuMSIgfSwKLSAgICB7IDB4ZWQyZCwgMHhlZDJkLCBMIjIuMiIgfSwKLSAgICB7IDB4ZjIzYiwgMHhmMjQ1LCBMIjIuMyIgfSwKLSAgICB7IDB4ZjI1OSwgMHhmMjZkLCBMIjIuNCIgfSwKLSAgICB7IDB4ZjI3NywgMHhmMmIzLCBMIjIuNSIgfSwKLSAgICB7IDB4ZjJjNywgMHhmMmQxLCBMIjIuNiIgfSwKLSAgICB7IDB4ZjJkYiwgMHhmMzAzLCBMIjIuNyIgfSwKLSAgICB7IDB4MGJiOCwgMHgwYzNiLCBMIjMuMCIgfSwKLSAgICB7IDB4MGM0NSwgMHgwYzRmLCBMIjMuMSIgfSwKLSAgICB7IDB4MGM1OCwgMHgwYzZjLCBMIjMuMiIgfSwKLSAgICB7IDB4MGM3NiwgMHgwYzc2LCBMIjMuMyIgfSwKKyAgICB7IDUwODIzLCA1MDgyMywgTCIyLjAiIH0sCisgICAgeyA2MDIwMiwgNjAyMDIsIEwiMi4xIiB9LAorICAgIHsgNjA3MTcsIDYwNzE3LCBMIjIuMiIgfSwKKyAgICB7IDYyMDExLCA2MjAyMSwgTCIyLjMiIH0sCisgICAgeyA2MjA0MSwgNjIwNjEsIEwiMi40IiB9LAorICAgIHsgNjIwNzEsIDYyMTMxLCBMIjIuNSIgfSwKKyAgICB7IDYyMTUxLCA2MjE2MSwgTCIyLjYiIH0sCisgICAgeyA2MjE3MSwgNjIyMTEsIEwiMi43IiB9LAorICAgIHsgMzAwMCwgMzEzMSwgTCIzLjAiIH0sCisgICAgeyAzMTQxLCAzMTUxLCBMIjMuMSIgfSwKKyAgICB7IDMxNjAsIDMxODAsIEwiMy4yIiB9LAorICAgIHsgMzE5MCwgMzIzMCwgTCIzLjMiIH0sCisgICAgeyAzMjUwLCAzMzEwLCBMIjMuNCIgfSwKKyAgICB7IDMzMjAsIDMzNTEsIEwiMy41IiB9LAorICAgIHsgMzM2MCwgMzM2MSwgTCIzLjYiIH0sCiAgICAgeyAwIH0KIH07CiAKQEAgLTEwOTcsNyArMTEzOCw3IEBACiAgICAgICAgIGlmICgocmVhZCA+PSA0KSAmJiAoYnVmZmVyWzNdID09ICdcbicpICYmIChidWZmZXJbMl0gPT0gJ1xyJykpIHsKICAgICAgICAgICAgIGlwID0gZmluZF9ieV9tYWdpYygoYnVmZmVyWzFdIDw8IDggfCBidWZmZXJbMF0pICYgMHhGRkZGKTsKICAgICAgICAgICAgIGlmIChpcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZGVidWcoTCJzY3JpcHQgZmlsZSBpcyBjb21waWxlZCBhZ2FpbnN0IFB5dGhvbiAlc1xuIiwKKyAgICAgICAgICAgICAgICBkZWJ1ZyhMInNjcmlwdCBmaWxlIGlzIGNvbXBpbGVkIGFnYWluc3QgUHl0aG9uICVsc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICBpcC0+dmVyc2lvbik7CiAgICAgICAgICAgICAgICAgaW52b2tlX2NoaWxkKGlwLT5leGVjdXRhYmxlLCBOVUxMLCBjbWRsaW5lKTsKICAgICAgICAgICAgIH0KQEAgLTEyMDAsNyArMTI0MSw3IEBACiAgICAgICAgICAgICAgICAgaXNfdmlydCA9IHBhcnNlX3NoZWJhbmcoc2hlYmFuZ19saW5lLCBuY2hhcnMsICZjb21tYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWZmaXgsICZzZWFyY2gpOwogICAgICAgICAgICAgICAgIGlmIChjb21tYW5kICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJwYXJzZV9zaGViYW5nOiBmb3VuZCBjb21tYW5kOiAlc1xuIiwgY29tbWFuZCk7CisgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwicGFyc2Vfc2hlYmFuZzogZm91bmQgY29tbWFuZDogJWxzXG4iLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc192aXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VfY2hpbGQoY29tbWFuZCwgc3VmZml4LCBjbWRsaW5lKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTIxMiw3ICsxMjUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3Y3NuY21wKGNvbW1hbmQsIEwicHl0aG9uIiwgNikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoUkNfQkFEX1ZJUlRVQUxfUEFUSCwgTCJVbmtub3duIHZpcnR1YWwgXAotcGF0aCAnJXMnIiwgY29tbWFuZCk7CitwYXRoICclbHMnIiwgY29tbWFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kICs9IDY7ICAgLyogc2tpcCBwYXN0ICJweXRob24iICovCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoICYmICgoKmNvbW1hbmQgPT0gTCdcMCcpIHx8IGlzc3BhY2UoKmNvbW1hbmQpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgaXMgZWxpZ2libGUgZm9yIHBhdGggc2VhcmNoLCBhbmQgdGhlcmUKQEAgLTEyMjAsOSArMTI2MSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJzZWFyY2hpbmcgUEFUSCBmb3IgcHl0aG9uIGV4ZWN1dGFibGVcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9IGZpbmRfb25fcGF0aChQWVRIT05fRVhFQ1VUQUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJQeXRob24gb24gcGF0aDogJXNcbiIsIGNtZCA/IGNtZC0+dmFsdWUgOiBMIjxub3QgZm91bmQ+Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJQeXRob24gb24gcGF0aDogJWxzXG4iLCBjbWQgPyBjbWQtPnZhbHVlIDogTCI8bm90IGZvdW5kPiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJsb2NhdGVkIHB5dGhvbiBvbiBQQVRIOiAlc1xuIiwgY21kLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlZCBweXRob24gb24gUEFUSDogJWxzXG4iLCBjbWQtPnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlX2NoaWxkKGNtZC0+dmFsdWUsIHN1ZmZpeCwgY21kbGluZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4aXQgaGVyZSwgYXMgd2UgaGF2ZSBmb3VuZCB0aGUgY29tbWFuZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjMzLDE0ICsxMjc0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmNvbW1hbmQgJiYgIXZhbGlkYXRlX3ZlcnNpb24oY29tbWFuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoUkNfQkFEX1ZJUlRVQUxfUEFUSCwgTCJJbnZhbGlkIHZlcnNpb24gXAotc3BlY2lmaWNhdGlvbjogJyVzJy5cbkluIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzY3JpcHQsICdweXRob24nIG5lZWRzIHRvIGJlIFwKK3NwZWNpZmljYXRpb246ICclbHMnLlxuSW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNjcmlwdCwgJ3B5dGhvbicgbmVlZHMgdG8gYmUgXAogZm9sbG93ZWQgYnkgYSB2YWxpZCB2ZXJzaW9uIHNwZWNpZmllci5cblBsZWFzZSBjaGVjayB0aGUgZG9jdW1lbnRhdGlvbi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETyBjb3VsZCBjYWxsIHZhbGlkYXRlX3ZlcnNpb24oY29tbWFuZCkgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbihjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpcCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoUkNfTk9fUFlUSE9OLCBMIlJlcXVlc3RlZCBQeXRob24gdmVyc2lvbiBcCi0oJXMpIGlzIG5vdCBpbnN0YWxsZWQiLCBjb21tYW5kKTsKKyglbHMpIGlzIG5vdCBpbnN0YWxsZWQiLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZV9jaGlsZChpcC0+ZXhlY3V0YWJsZSwgc3VmZml4LCBjbWRsaW5lKTsKQEAgLTEzMDEsNiArMTM0Miw3IEBACiB7CiAgICAgd2NoYXJfdCAqIHdwOwogICAgIHdjaGFyX3QgKiBjb21tYW5kOworICAgIHdjaGFyX3QgKiBleGVjdXRhYmxlOwogICAgIHdjaGFyX3QgKiBwOwogICAgIGludCByYyA9IDA7CiAgICAgc2l6ZV90IHBsZW47CkBAIC0xMzQ3LDE3ICsxMzg5LDE3IEBACiAgICAgICAgIHdjc25jcHlfcyhwLCBNQVhfUEFUSCAtIHBsZW4sIEwiXFxweS5pbmkiLCBfVFJVTkNBVEUpOwogICAgICAgICBhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyhhcHBkYXRhX2luaV9wYXRoKTsKICAgICAgICAgaWYgKGF0dHJzID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7Ci0gICAgICAgICAgICBkZWJ1ZyhMIkZpbGUgJyVzJyBub24tZXhpc3RlbnRcbiIsIGFwcGRhdGFfaW5pX3BhdGgpOworICAgICAgICAgICAgZGVidWcoTCJGaWxlICclbHMnIG5vbi1leGlzdGVudFxuIiwgYXBwZGF0YV9pbmlfcGF0aCk7CiAgICAgICAgICAgICBhcHBkYXRhX2luaV9wYXRoWzBdID0gTCdcMCc7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWJ1ZyhMIlVzaW5nIGxvY2FsIGNvbmZpZ3VyYXRpb24gZmlsZSAnJXMnXG4iLCBhcHBkYXRhX2luaV9wYXRoKTsKKyAgICAgICAgICAgIGRlYnVnKEwiVXNpbmcgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlICclbHMnXG4iLCBhcHBkYXRhX2luaV9wYXRoKTsKICAgICAgICAgfQogICAgIH0KICAgICBwbGVuID0gR2V0TW9kdWxlRmlsZU5hbWVXKE5VTEwsIGxhdW5jaGVyX2luaV9wYXRoLCBNQVhfUEFUSCk7CiAgICAgc2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGxhdW5jaGVyX2luaV9wYXRoLCAmc2l6ZSk7CiAgICAgaWYgKHNpemUgPT0gMCkgewogICAgICAgICB3aW5lcnJvcihHZXRMYXN0RXJyb3IoKSwgbWVzc2FnZSwgTVNHU0laRSk7Ci0gICAgICAgIGRlYnVnKEwiR2V0RmlsZVZlcnNpb25JbmZvU2l6ZSBmYWlsZWQ6ICVzXG4iLCBtZXNzYWdlKTsKKyAgICAgICAgZGVidWcoTCJHZXRGaWxlVmVyc2lvbkluZm9TaXplIGZhaWxlZDogJWxzXG4iLCBtZXNzYWdlKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHZlcnNpb25fZGF0YSA9IG1hbGxvYyhzaXplKTsKQEAgLTEzODEsNyArMTQyMyw3IEBACiAgICAgfQogICAgIHAgPSB3Y3NyY2hyKGxhdW5jaGVyX2luaV9wYXRoLCBMJ1xcJyk7CiAgICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBkZWJ1ZyhMIkdldE1vZHVsZUZpbGVOYW1lVyByZXR1cm5lZCB2YWx1ZSBoYXMgbm8gYmFja3NsYXNoOiAlc1xuIiwKKyAgICAgICAgZGVidWcoTCJHZXRNb2R1bGVGaWxlTmFtZVcgcmV0dXJuZWQgdmFsdWUgaGFzIG5vIGJhY2tzbGFzaDogJWxzXG4iLAogICAgICAgICAgICAgICBsYXVuY2hlcl9pbmlfcGF0aCk7CiAgICAgICAgIGxhdW5jaGVyX2luaV9wYXRoWzBdID0gTCdcMCc7CiAgICAgfQpAQCAtMTM5MCwxNSArMTQzMiwxNSBAQAogICAgICAgICAgICAgICAgICAgX1RSVU5DQVRFKTsKICAgICAgICAgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cobGF1bmNoZXJfaW5pX3BhdGgpOwogICAgICAgICBpZiAoYXR0cnMgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpIHsKLSAgICAgICAgICAgIGRlYnVnKEwiRmlsZSAnJXMnIG5vbi1leGlzdGVudFxuIiwgbGF1bmNoZXJfaW5pX3BhdGgpOworICAgICAgICAgICAgZGVidWcoTCJGaWxlICclbHMnIG5vbi1leGlzdGVudFxuIiwgbGF1bmNoZXJfaW5pX3BhdGgpOwogICAgICAgICAgICAgbGF1bmNoZXJfaW5pX3BhdGhbMF0gPSBMJ1wwJzsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnKEwiVXNpbmcgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZmlsZSAnJXMnXG4iLCBsYXVuY2hlcl9pbmlfcGF0aCk7CisgICAgICAgICAgICBkZWJ1ZyhMIlVzaW5nIGdsb2JhbCBjb25maWd1cmF0aW9uIGZpbGUgJyVscydcbiIsIGxhdW5jaGVyX2luaV9wYXRoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGNvbW1hbmQgPSBza2lwX21lKEdldENvbW1hbmRMaW5lVygpKTsKLSAgICBkZWJ1ZyhMIkNhbGxlZCB3aXRoIGNvbW1hbmQgbGluZTogJXNcbiIsIGNvbW1hbmQpOworICAgIGRlYnVnKEwiQ2FsbGVkIHdpdGggY29tbWFuZCBsaW5lOiAlbHNcbiIsIGNvbW1hbmQpOwogCiAjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKICAgICAvKiBUaGUgbGF1bmNoZXIgaXMgYmVpbmcgdXNlZCBpbiAic2NyaXB0IHdyYXBwZXIiIG1vZGUuCkBAIC0xNDIyLDcgKzE0NjQsNyBAQAogICAgICAgICB3Y3NjcHlfcyhuZXdjb21tYW5kLCBuZXdsZW4sIHdyYXBwZWRfc2NyaXB0X3BhdGgpOwogICAgICAgICB3Y3NjYXRfcyhuZXdjb21tYW5kLCBuZXdsZW4sIEwiICIpOwogICAgICAgICB3Y3NjYXRfcyhuZXdjb21tYW5kLCBuZXdsZW4sIGNvbW1hbmQpOwotICAgICAgICBkZWJ1ZyhMIlJ1bm5pbmcgd3JhcHBlZCBzY3JpcHQgd2l0aCBjb21tYW5kIGxpbmUgJyVzJ1xuIiwgbmV3Y29tbWFuZCk7CisgICAgICAgIGRlYnVnKEwiUnVubmluZyB3cmFwcGVkIHNjcmlwdCB3aXRoIGNvbW1hbmQgbGluZSAnJWxzJ1xuIiwgbmV3Y29tbWFuZCk7CiAgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKICAgICAgICAgYXZbMF0gPSB3cmFwcGVkX3NjcmlwdF9wYXRoOwogICAgICAgICBhdlsxXSA9IE5VTEw7CkBAIC0xNDQzLDggKzE0ODUsOSBAQAogICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbigmcFsxXSk7CiAgICAgICAgICAgICBpZiAoaXAgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBlcnJvcihSQ19OT19QWVRIT04sIEwiUmVxdWVzdGVkIFB5dGhvbiB2ZXJzaW9uICglcykgbm90IFwKKyAgICAgICAgICAgICAgICBlcnJvcihSQ19OT19QWVRIT04sIEwiUmVxdWVzdGVkIFB5dGhvbiB2ZXJzaW9uICglbHMpIG5vdCBcCiBpbnN0YWxsZWQiLCAmcFsxXSk7CisgICAgICAgICAgICBleGVjdXRhYmxlID0gaXAtPmV4ZWN1dGFibGU7CiAgICAgICAgICAgICBjb21tYW5kICs9IHdjc2xlbihwKTsKICAgICAgICAgICAgIGNvbW1hbmQgPSBza2lwX3doaXRlc3BhY2UoY29tbWFuZCk7CiAgICAgICAgIH0KQEAgLTE0NjIsOSArMTUwNSwxNiBAQAogI2VuZGlmCiAKICAgICBpZiAoIXZhbGlkKSB7Ci0gICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbihMIiIpOwotICAgICAgICBpZiAoaXAgPT0gTlVMTCkKLSAgICAgICAgICAgIGVycm9yKFJDX05PX1BZVEhPTiwgTCJDYW4ndCBmaW5kIGEgZGVmYXVsdCBQeXRob24uIik7CisgICAgICAgIC8qIExvb2sgZm9yIGFuIGFjdGl2ZSB2aXJ0dWFsZW52ICovCisgICAgICAgIGV4ZWN1dGFibGUgPSBmaW5kX3B5dGhvbl9ieV92ZW52KCk7CisKKyAgICAgICAgLyogSWYgd2UgZGlkbid0IGZpbmQgb25lLCBsb29rIGZvciB0aGUgZGVmYXVsdCBQeXRob24gKi8KKyAgICAgICAgaWYgKGV4ZWN1dGFibGUgPT0gTlVMTCkgeworICAgICAgICAgICAgaXAgPSBsb2NhdGVfcHl0aG9uKEwiIik7CisgICAgICAgICAgICBpZiAoaXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBlcnJvcihSQ19OT19QWVRIT04sIEwiQ2FuJ3QgZmluZCBhIGRlZmF1bHQgUHl0aG9uLiIpOworICAgICAgICAgICAgZXhlY3V0YWJsZSA9IGlwLT5leGVjdXRhYmxlOworICAgICAgICB9CiAgICAgICAgIGlmICgoYXJnYyA9PSAyKSAmJiAoIV93Y3NpY21wKHAsIEwiLWgiKSB8fCAhX3djc2ljbXAocCwgTCItLWhlbHAiKSkpIHsKICNpZiBkZWZpbmVkKF9NX1g2NCkKICAgICAgICAgICAgIEJPT0wgY2FuRG82NGJpdCA9IFRSVUU7CkBAIC0xNDc2LDkgKzE1MjYsOSBAQAogCiAgICAgICAgICAgICBnZXRfdmVyc2lvbl9pbmZvKHZlcnNpb25fdGV4dCwgTUFYX1BBVEgpOwogICAgICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBMIlwKLVB5dGhvbiBMYXVuY2hlciBmb3IgV2luZG93cyBWZXJzaW9uICVzXG5cbiIsIHZlcnNpb25fdGV4dCk7CitQeXRob24gTGF1bmNoZXIgZm9yIFdpbmRvd3MgVmVyc2lvbiAlbHNcblxuIiwgdmVyc2lvbl90ZXh0KTsKICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCJcCi11c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBbIHB5dGhvbi1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7Cit1c2FnZTogJWxzIFsgbGF1bmNoZXItYXJndW1lbnRzIF0gWyBweXRob24tYXJndW1lbnRzIF0gc2NyaXB0IFsgc2NyaXB0LWFyZ3VtZW50cyBdXG5cbiIsIGFyZ3ZbMF0pOwogICAgICAgICAgICAgZnB1dHdzKEwiXAogTGF1bmNoZXIgYXJndW1lbnRzOlxuXG5cCiAtMiAgICAgOiBMYXVuY2ggdGhlIGxhdGVzdCBQeXRob24gMi54IHZlcnNpb25cblwKQEAgLTE0OTIsNyArMTU0Miw3IEBACiAgICAgICAgICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICAgfQogICAgIH0KLSAgICBpbnZva2VfY2hpbGQoaXAtPmV4ZWN1dGFibGUsIE5VTEwsIGNvbW1hbmQpOworICAgIGludm9rZV9jaGlsZChleGVjdXRhYmxlLCBOVUxMLCBjb21tYW5kKTsKICAgICByZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL1BDL21ha2VfdmVyc2lvbmluZm8uYyBiL1BDL21ha2VfdmVyc2lvbmluZm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk2OTY3MS4uMDAwMDAwMAotLS0gYS9QQy9tYWtlX3ZlcnNpb25pbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJwYXRjaGxldmVsLmgiCi0vKgotICogVGhpcyBwcm9ncmFtIHByaW50cyBvdXQgYW4gaW5jbHVkZSBmaWxlIGNvbnRhaW5pbmcgZmllbGRzIHJlcXVpcmVkIHRvIGJ1aWxkCi0gKiB0aGUgdmVyc2lvbiBpbmZvIHJlc291cmNlIG9mIHB5dGhvbnh4LmRsbCBiZWNhdXNlIHRoZSByZXNvdXJjZSBjb21waWxlcgotICogY2Fubm90IGRvIHRoZSBhcml0aG1ldGljLgotICovCi0vKgotICogRklFTEQzIGlzIHRoZSB0aGlyZCBmaWVsZCBvZiB0aGUgdmVyc2lvbiBudW1iZXIuCi0gKiBUaGlzIGlzIHdoYXQgd2UnZCBsaWtlIEZJRUxEMyB0byBiZToKLSAqCi0gKiAjZGVmaW5lIEZJRUxEMyAoUFlfTUlDUk9fVkVSU0lPTioxMDAwICsgUFlfUkVMRUFTRV9MRVZFTCoxMCArIFBZX1JFTEVBU0VfU0VSSUFMKQotICoKLSAqIGJ1dCB0aGF0IG5laXRoZXIgZ2l2ZXMgYW4gZXJyb3Igbm9yIGNvbWVzIGFueXdoZXJlIGNsb3NlIHRvIHdvcmtpbmcuCi0gKgotICogRm9yIDIuNGEwLAotICogUFlfTUlDUk9fVkVSU0lPTiA9IDAKLSAqIFBZX1JFTEVBU0VfTEVWRUwgPSAnYWxwaGEnID0gMHhhCi0gKiBQWV9SRUxFQVNFX1NFUklBTCA9IDAKLSAqCi0gKiBnaXZlcyBGSUVMRDMgPSAwKjEwMDAgKyAxMCoxMCArIDAgPSAxMDAKLSAqLwotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIHByaW50ZigiLyogVGhpcyBmaWxlIGNyZWF0ZWQgYnkgbWFrZV92ZXJzaW9uaW5mby5leGUgKi9cbiIpOwotICAgIHByaW50ZigiI2RlZmluZSBGSUVMRDMgJWRcbiIsCi0gICAgICAgIFBZX01JQ1JPX1ZFUlNJT04qMTAwMCArIFBZX1JFTEVBU0VfTEVWRUwqMTAgKyBQWV9SRUxFQVNFX1NFUklBTCk7Ci0gICAgcHJpbnRmKCIjZGVmaW5lIE1TX0RMTF9JRCBcIiVkLiVkXCJcbiIsCi0gICAgICAgICAgIFBZX01BSk9SX1ZFUlNJT04sIFBZX01JTk9SX1ZFUlNJT04pOwotICAgIHByaW50ZigiI2lmbmRlZiBfREVCVUdcbiIpOwotICAgIHByaW50ZigiI2RlZmluZSBQWVRIT05fRExMX05BTUUgXCJweXRob24lZCVkLmRsbFwiXG4iLAotICAgICAgICAgICBQWV9NQUpPUl9WRVJTSU9OLCBQWV9NSU5PUl9WRVJTSU9OKTsKLSAgICBwcmludGYoIiNlbHNlXG4iKTsKLSAgICBwcmludGYoIiNkZWZpbmUgUFlUSE9OX0RMTF9OQU1FIFwicHl0aG9uJWQlZF9kLmRsbFwiXG4iLAotICAgICAgICAgICBQWV9NQUpPUl9WRVJTSU9OLCBQWV9NSU5PUl9WRVJTSU9OKTsKLSAgICBwcmludGYoIiNlbmRpZlxuIik7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QQy9tc3ZjcnRtb2R1bGUuYyBiL1BDL21zdmNydG1vZHVsZS5jCmluZGV4IDE4ZGVjNmQuLmIwNzM5ZDAgMTAwNjQ0Ci0tLSBhL1BDL21zdmNydG1vZHVsZS5jCisrKyBiL1BDL21zdmNydG1vZHVsZS5jCkBAIC0zMiw0MjEgKzMyLDQ1MCBAQAogI2VuZGlmCiAjZW5kaWYKIAotLy8gRm9yY2UgdGhlIG1hbGxvYyBoZWFwIHRvIGNsZWFuIGl0c2VsZiB1cCwgYW5kIGZyZWUgdW51c2VkIGJsb2NrcwotLy8gYmFjayB0byB0aGUgT1MuICAoQWNjb3JkaW5nIHRvIHRoZSBkb2NzLCBvbmx5IHdvcmtzIG9uIE5ULikKLXN0YXRpYyBQeU9iamVjdCAqCi1tc3ZjcnRfaGVhcG1pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6aGVhcG1pbiIpKQotICAgICAgICByZXR1cm4gTlVMTDsKKy8qW3B5dGhvbiBpbnB1dF0KK2NsYXNzIFB5X2ludHB0cl90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2ludHB0cl90JworICAgIGZvcm1hdF91bml0ID0gJyJfUHlfUEFSU0VfSU5UUFRSIicKIAorY2xhc3MgaGFuZGxlX3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2ludHB0cl90JworICAgIGNhc3QgPSAnKHZvaWQgKiknCisgICAgY29udmVyc2lvbl9mbiA9ICdQeUxvbmdfRnJvbVZvaWRQdHInCisKK2NsYXNzIGJ5dGVfY2hhcl9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnaW50JworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIGRhdGEuZGVjbGFyYXRpb25zLmFwcGVuZCgnY2hhciBzWzFdOycpCisgICAgICAgIGRhdGEucmV0dXJuX3ZhbHVlID0gJ3NbMF0nCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgMSk7XG4nKQorCitjbGFzcyB3Y2hhcl90X3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICd3Y2hhcl90JworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICdyZXR1cm5fdmFsdWUgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoX3JldHVybl92YWx1ZSk7XG4nKQorW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NmE1NGZjNGU3M2QwYjM2N10qLworCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgbXN2Y3J0CitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1mMzFhODdhNzgzZDAzNmNkXSovCisKKyNpbmNsdWRlICJjbGluaWMvbXN2Y3J0bW9kdWxlLmMuaCIKKworLypbY2xpbmljIGlucHV0XQorbXN2Y3J0LmhlYXBtaW4KKworTWluaW1pemUgdGhlIG1hbGxvYygpIGhlYXAuCisKK0ZvcmNlIHRoZSBtYWxsb2MoKSBoZWFwIHRvIGNsZWFuIGl0c2VsZiB1cCBhbmQgcmV0dXJuIHVudXNlZCBibG9ja3MKK3RvIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBPbiBmYWlsdXJlLCB0aGlzIHJhaXNlcyBPU0Vycm9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X2hlYXBtaW5faW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFiYTAwZjM0NDc4MmRjMTkgaW5wdXQ9ODJlMTc3MWQyMWJkZTJkOF0qLworewogICAgIGlmIChfaGVhcG1pbigpICE9IDApCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CisvKltjbGluaWMgaW5wdXRdCittc3ZjcnQubG9ja2luZwogCi1QeURvY19TVFJWQVIoaGVhcG1pbl9kb2MsCi0iaGVhcG1pbigpIC0+IE5vbmVcblwKLVxuXAotRm9yY2UgdGhlIG1hbGxvYygpIGhlYXAgdG8gY2xlYW4gaXRzZWxmIHVwIGFuZCByZXR1cm4gdW51c2VkIGJsb2Nrc1xuXAotdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0uIE9uIGZhaWx1cmUsIHRoaXMgcmFpc2VzIElPRXJyb3IuIik7CisgICAgZmQ6IGludAorICAgIG1vZGU6IGludAorICAgIG5ieXRlczogbG9uZworICAgIC8KIAotLy8gUGVyZm9ybSBsb2NraW5nIG9wZXJhdGlvbnMgb24gYSBDIHJ1bnRpbWUgZmlsZSBkZXNjcmlwdG9yLgorTG9jayBwYXJ0IG9mIGEgZmlsZSBiYXNlZCBvbiBmaWxlIGRlc2NyaXB0b3IgZmQgZnJvbSB0aGUgQyBydW50aW1lLgorCitSYWlzZXMgSU9FcnJvciBvbiBmYWlsdXJlLiBUaGUgbG9ja2VkIHJlZ2lvbiBvZiB0aGUgZmlsZSBleHRlbmRzIGZyb20KK3RoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gZm9yIG5ieXRlcyBieXRlcywgYW5kIG1heSBjb250aW51ZSBiZXlvbmQKK3RoZSBlbmQgb2YgdGhlIGZpbGUuIG1vZGUgbXVzdCBiZSBvbmUgb2YgdGhlIExLXyogY29uc3RhbnRzIGxpc3RlZAorYmVsb3cuIE11bHRpcGxlIHJlZ2lvbnMgaW4gYSBmaWxlIG1heSBiZSBsb2NrZWQgYXQgdGhlIHNhbWUgdGltZSwgYnV0CittYXkgbm90IG92ZXJsYXAuIEFkamFjZW50IHJlZ2lvbnMgYXJlIG5vdCBtZXJnZWQ7IHRoZXkgbXVzdCBiZSB1bmxvY2tlZAoraW5kaXZpZHVhbGx5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbXN2Y3J0X2xvY2tpbmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorbXN2Y3J0X2xvY2tpbmdfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQsIGludCBtb2RlLCBsb25nIG5ieXRlcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNGE5MGRlY2E5Nzg1YTAzIGlucHV0PWQ5ZjEzZjBmNmE3MTNiYTddKi8KIHsKLSAgICBpbnQgZmQ7Ci0gICAgaW50IG1vZGU7Ci0gICAgbG9uZyBuYnl0ZXM7CiAgICAgaW50IGVycjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlsOmxvY2tpbmciLCAmZmQsICZtb2RlLCAmbmJ5dGVzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZXJyID0gX2xvY2tpbmcoZmQsIG1vZGUsIG5ieXRlcyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihsb2NraW5nX2RvYywKLSJsb2NraW5nKGZkLCBtb2RlLCBuYnl0ZXMpIC0+IE5vbmVcblwKLVxuXAotTG9jayBwYXJ0IG9mIGEgZmlsZSBiYXNlZCBvbiBmaWxlIGRlc2NyaXB0b3IgZmQgZnJvbSB0aGUgQyBydW50aW1lLlxuXAotUmFpc2VzIElPRXJyb3Igb24gZmFpbHVyZS4gVGhlIGxvY2tlZCByZWdpb24gb2YgdGhlIGZpbGUgZXh0ZW5kcyBmcm9tXG5cCi10aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGZvciBuYnl0ZXMgYnl0ZXMsIGFuZCBtYXkgY29udGludWUgYmV5b25kXG5cCi10aGUgZW5kIG9mIHRoZSBmaWxlLiBtb2RlIG11c3QgYmUgb25lIG9mIHRoZSBMS18qIGNvbnN0YW50cyBsaXN0ZWRcblwKLWJlbG93LiBNdWx0aXBsZSByZWdpb25zIGluIGEgZmlsZSBtYXkgYmUgbG9ja2VkIGF0IHRoZSBzYW1lIHRpbWUsIGJ1dFxuXAotbWF5IG5vdCBvdmVybGFwLiBBZGphY2VudCByZWdpb25zIGFyZSBub3QgbWVyZ2VkOyB0aGV5IG11c3QgYmUgdW5sb2NrZWRcblwKLWluZGl2aWR1YWxseS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK21zdmNydC5zZXRtb2RlIC0+IGxvbmcKIAotLy8gU2V0IHRoZSBmaWxlIHRyYW5zbGF0aW9uIG1vZGUgZm9yIGEgQyBydW50aW1lIGZpbGUgZGVzY3JpcHRvci4KLXN0YXRpYyBQeU9iamVjdCAqCi1tc3ZjcnRfc2V0bW9kZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgZmQ6IGludAorICAgIG1vZGUgYXMgZmxhZ3M6IGludAorICAgIC8KKworU2V0IHRoZSBsaW5lLWVuZCB0cmFuc2xhdGlvbiBtb2RlIGZvciB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLgorCitUbyBzZXQgaXQgdG8gdGV4dCBtb2RlLCBmbGFncyBzaG91bGQgYmUgb3MuT19URVhUOyBmb3IgYmluYXJ5LCBpdAorc2hvdWxkIGJlIG9zLk9fQklOQVJZLgorCitSZXR1cm4gdmFsdWUgaXMgdGhlIHByZXZpb3VzIG1vZGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBsb25nCittc3ZjcnRfc2V0bW9kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBmZCwgaW50IGZsYWdzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTI0YTliZTVlYTA3Y2NiOWIgaW5wdXQ9NzZlN2MwMWY2YjEzN2Y3NV0qLwogewotICAgIGludCBmZDsKLSAgICBpbnQgZmxhZ3M7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpOnNldG1vZGUiLCAmZmQsICZmbGFncykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgZmxhZ3MgPSBfc2V0bW9kZShmZCwgZmxhZ3MpOwogICAgIGlmIChmbGFncyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhmbGFncyk7CisgICAgcmV0dXJuIGZsYWdzOwogfQogCi1QeURvY19TVFJWQVIoc2V0bW9kZV9kb2MsCi0ic2V0bW9kZShmZCwgbW9kZSkgLT4gUHJldmlvdXMgbW9kZVxuXAotXG5cCi1TZXQgdGhlIGxpbmUtZW5kIHRyYW5zbGF0aW9uIG1vZGUgZm9yIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuIFRvIHNldFxuXAotaXQgdG8gdGV4dCBtb2RlLCBmbGFncyBzaG91bGQgYmUgb3MuT19URVhUOyBmb3IgYmluYXJ5LCBpdCBzaG91bGQgYmVcblwKLW9zLk9fQklOQVJZLiIpOworLypbY2xpbmljIGlucHV0XQorbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlIC0+IGxvbmcKIAotLy8gQ29udmVydCBhbiBPUyBmaWxlIGhhbmRsZSB0byBhIEMgcnVudGltZSBmaWxlIGRlc2NyaXB0b3IuCi1zdGF0aWMgUHlPYmplY3QgKgotbXN2Y3J0X29wZW5fb3NmaGFuZGxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICBoYW5kbGU6IFB5X2ludHB0cl90CisgICAgZmxhZ3M6IGludAorICAgIC8KKworQ3JlYXRlIGEgQyBydW50aW1lIGZpbGUgZGVzY3JpcHRvciBmcm9tIHRoZSBmaWxlIGhhbmRsZSBoYW5kbGUuCisKK1RoZSBmbGFncyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgYml0d2lzZSBPUiBvZiBvcy5PX0FQUEVORCwgb3MuT19SRE9OTFksCithbmQgb3MuT19URVhULiBUaGUgcmV0dXJuZWQgZmlsZSBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyCit0byBvcy5mZG9wZW4oKSB0byBjcmVhdGUgYSBmaWxlIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGxvbmcKK21zdmNydF9vcGVuX29zZmhhbmRsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X2ludHB0cl90IGhhbmRsZSwgaW50IGZsYWdzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJmNjVlNDIyMjQzYTM5ZjkgaW5wdXQ9NGQ4NTE2ZWQzMmRiOGY2NV0qLwogewotICAgIFB5X2ludHB0cl90IGhhbmRsZTsKLSAgICBpbnQgZmxhZ3M7CiAgICAgaW50IGZkOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6b3Blbl9vc2ZoYW5kbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmZmxhZ3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGZkID0gX29wZW5fb3NmaGFuZGxlKGhhbmRsZSwgZmxhZ3MpOwogICAgIGlmIChmZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhmZCk7CisgICAgcmV0dXJuIGZkOwogfQogCi1QeURvY19TVFJWQVIob3Blbl9vc2ZoYW5kbGVfZG9jLAotIm9wZW5fb3NmaGFuZGxlKGhhbmRsZSwgZmxhZ3MpIC0+IGZpbGUgZGVzY3JpcHRvclxuXAotXG5cCi1DcmVhdGUgYSBDIHJ1bnRpbWUgZmlsZSBkZXNjcmlwdG9yIGZyb20gdGhlIGZpbGUgaGFuZGxlIGhhbmRsZS4gVGhlXG5cCi1mbGFncyBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgYml0d2lzZSBPUiBvZiBvcy5PX0FQUEVORCwgb3MuT19SRE9OTFksXG5cCi1hbmQgb3MuT19URVhULiBUaGUgcmV0dXJuZWQgZmlsZSBkZXNjcmlwdG9yIG1heSBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyXG5cCi10byBvcy5mZG9wZW4oKSB0byBjcmVhdGUgYSBmaWxlIG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK21zdmNydC5nZXRfb3NmaGFuZGxlIC0+IGhhbmRsZQogCi0vLyBDb252ZXJ0IGEgQyBydW50aW1lIGZpbGUgZGVzY3JpcHRvciB0byBhbiBPUyBmaWxlIGhhbmRsZS4KLXN0YXRpYyBQeU9iamVjdCAqCi1tc3ZjcnRfZ2V0X29zZmhhbmRsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgZmQ6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBmaWxlIGhhbmRsZSBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4KKworUmFpc2VzIElPRXJyb3IgaWYgZmQgaXMgbm90IHJlY29nbml6ZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeV9pbnRwdHJfdAorbXN2Y3J0X2dldF9vc2ZoYW5kbGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZmQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZWFjNDc2NDMzMzhjMGJhYSBpbnB1dD1jN2QxOGQwMmM4MDE3ZWMxXSovCiB7Ci0gICAgaW50IGZkOwotICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGUgPSAtMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpOmdldF9vc2ZoYW5kbGUiLCAmZmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICisgICAgICAgIGhhbmRsZSA9IF9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAorICAgICAgICBpZiAoaGFuZGxlID09IC0xKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgIH0KIAotICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLQotICAgIGhhbmRsZSA9IF9nZXRfb3NmaGFuZGxlKGZkKTsKLSAgICBpZiAoaGFuZGxlID09IC0xKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotCi0gICAgLyogdGVjaG5pY2FsbHkgJ2hhbmRsZScgaXMgbm90IGEgcG9pbnRlciwgYnV0IGEgaW50ZWdlciBhcwotICAgICAgIGxhcmdlIGFzIGEgcG9pbnRlciwgUHl0aG9uJ3MgKlZvaWRQdHIgaW50ZXJmYWNlIGlzIHRoZQotICAgICAgIG1vc3QgYXBwcm9wcmlhdGUgaGVyZSAqLwotICAgIHJldHVybiBQeUxvbmdfRnJvbVZvaWRQdHIoKHZvaWQqKWhhbmRsZSk7CisgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotUHlEb2NfU1RSVkFSKGdldF9vc2ZoYW5kbGVfZG9jLAotImdldF9vc2ZoYW5kbGUoZmQpIC0+IGZpbGUgaGFuZGxlXG5cCi1cblwKLVJldHVybiB0aGUgZmlsZSBoYW5kbGUgZm9yIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuIFJhaXNlcyBJT0Vycm9yXG5cCi1pZiBmZCBpcyBub3QgcmVjb2duaXplZC4iKTsKLQogLyogQ29uc29sZSBJL08gKi8KKy8qW2NsaW5pYyBpbnB1dF0KK21zdmNydC5rYmhpdCAtPiBsb25nCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1tc3ZjcnRfa2JoaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorUmV0dXJuIHRydWUgaWYgYSBrZXlwcmVzcyBpcyB3YWl0aW5nIHRvIGJlIHJlYWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBsb25nCittc3ZjcnRfa2JoaXRfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk0MGRmY2U2NTg3YzE4OTAgaW5wdXQ9ZTcwZDY3OGE1YzJmNmFjY10qLwogewotICAgIGludCBvazsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOmtiaGl0IikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgb2sgPSBfa2JoaXQoKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG9rKTsKKyAgICByZXR1cm4gX2tiaGl0KCk7CiB9CiAKLVB5RG9jX1NUUlZBUihrYmhpdF9kb2MsCi0ia2JoaXQoKSAtPiBib29sXG5cCi1cblwKLVJldHVybiB0cnVlIGlmIGEga2V5cHJlc3MgaXMgd2FpdGluZyB0byBiZSByZWFkLiIpOworLypbY2xpbmljIGlucHV0XQorbXN2Y3J0LmdldGNoIC0+IGJ5dGVfY2hhcgogCi1zdGF0aWMgUHlPYmplY3QgKgotbXN2Y3J0X2dldGNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK1JlYWQgYSBrZXlwcmVzcyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyIGFzIGEgYnl0ZSBzdHJpbmcuCisKK05vdGhpbmcgaXMgZWNob2VkIHRvIHRoZSBjb25zb2xlLiBUaGlzIGNhbGwgd2lsbCBibG9jayBpZiBhIGtleXByZXNzIGlzCitub3QgYWxyZWFkeSBhdmFpbGFibGUsIGJ1dCB3aWxsIG5vdCB3YWl0IGZvciBFbnRlciB0byBiZSBwcmVzc2VkLiBJZiB0aGUKK3ByZXNzZWQga2V5IHdhcyBhIHNwZWNpYWwgZnVuY3Rpb24ga2V5LCB0aGlzIHdpbGwgcmV0dXJuICdcMDAwJyBvcgorJ1x4ZTAnOyB0aGUgbmV4dCBjYWxsIHdpbGwgcmV0dXJuIHRoZSBrZXljb2RlLiBUaGUgQ29udHJvbC1DIGtleXByZXNzCitjYW5ub3QgYmUgcmVhZCB3aXRoIHRoaXMgZnVuY3Rpb24uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK21zdmNydF9nZXRjaF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTRlNTFmMDU2NTA2NGE3ZCBpbnB1dD0zN2E0MGNmMGVkMGQxMTUzXSovCiB7CiAgICAgaW50IGNoOwotICAgIGNoYXIgc1sxXTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOmdldGNoIikpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGNoID0gX2dldGNoKCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBzWzBdID0gY2g7Ci0gICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgMSk7CisgICAgcmV0dXJuIGNoOwogfQogCi1QeURvY19TVFJWQVIoZ2V0Y2hfZG9jLAotImdldGNoKCkgLT4ga2V5IGNoYXJhY3RlclxuXAotXG5cCi1SZWFkIGEga2V5cHJlc3MgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlciBhcyBhIGJ5dGUgc3RyaW5nLlxuXAotTm90aGluZyBpcyBlY2hvZWQgdG8gdGhlIGNvbnNvbGUuIFRoaXMgY2FsbCB3aWxsIGJsb2NrIGlmIGEga2V5cHJlc3MgaXNcblwKLW5vdCBhbHJlYWR5IGF2YWlsYWJsZSwgYnV0IHdpbGwgbm90IHdhaXQgZm9yIEVudGVyIHRvIGJlIHByZXNzZWQuIElmIHRoZVxuXAotcHJlc3NlZCBrZXkgd2FzIGEgc3BlY2lhbCBmdW5jdGlvbiBrZXksIHRoaXMgd2lsbCByZXR1cm4gJ1xcMDAwJyBvclxuXAotJ1xceGUwJzsgdGhlIG5leHQgY2FsbCB3aWxsIHJldHVybiB0aGUga2V5Y29kZS4gVGhlIENvbnRyb2wtQyBrZXlwcmVzc1xuXAotY2Fubm90IGJlIHJlYWQgd2l0aCB0aGlzIGZ1bmN0aW9uLiIpOworLypbY2xpbmljIGlucHV0XQorbXN2Y3J0LmdldHdjaCAtPiB3Y2hhcl90CiAKLSNpZmRlZiBfV0NPTklPX0RFRklORUQKLXN0YXRpYyBQeU9iamVjdCAqCi1tc3ZjcnRfZ2V0d2NoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK1dpZGUgY2hhciB2YXJpYW50IG9mIGdldGNoKCksIHJldHVybmluZyBhIFVuaWNvZGUgdmFsdWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyB3Y2hhcl90Cittc3ZjcnRfZ2V0d2NoX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iZTk5Mzc0OTRlMjJmMDA3IGlucHV0PTI3YjNkZWM4YWQ4MjNkN2NdKi8KIHsKICAgICB3Y2hhcl90IGNoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6Z2V0d2NoIikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGNoID0gX2dldHdjaCgpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tT3JkaW5hbChjaCk7CisgICAgcmV0dXJuIGNoOwogfQogCi1QeURvY19TVFJWQVIoZ2V0d2NoX2RvYywKLSJnZXR3Y2goKSAtPiBVbmljb2RlIGtleSBjaGFyYWN0ZXJcblwKLVxuXAotV2lkZSBjaGFyIHZhcmlhbnQgb2YgZ2V0Y2goKSwgcmV0dXJuaW5nIGEgVW5pY29kZSB2YWx1ZS4iKTsKLSNlbmRpZgorLypbY2xpbmljIGlucHV0XQorbXN2Y3J0LmdldGNoZSAtPiBieXRlX2NoYXIKIAotc3RhdGljIFB5T2JqZWN0ICoKLW1zdmNydF9nZXRjaGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorU2ltaWxhciB0byBnZXRjaCgpLCBidXQgdGhlIGtleXByZXNzIHdpbGwgYmUgZWNob2VkIGlmIHBvc3NpYmxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgaW50Cittc3ZjcnRfZ2V0Y2hlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kOGY3ZGI0ZmQyOTkwNDAxIGlucHV0PTQzMzExYWRlOWVkNGE5YzBdKi8KIHsKICAgICBpbnQgY2g7Ci0gICAgY2hhciBzWzFdOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6Z2V0Y2hlIikpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGNoID0gX2dldGNoZSgpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgc1swXSA9IGNoOwotICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIDEpOworICAgIHJldHVybiBjaDsKIH0KIAotUHlEb2NfU1RSVkFSKGdldGNoZV9kb2MsCi0iZ2V0Y2hlKCkgLT4ga2V5IGNoYXJhY3RlclxuXAotXG5cCi1TaW1pbGFyIHRvIGdldGNoKCksIGJ1dCB0aGUga2V5cHJlc3Mgd2lsbCBiZSBlY2hvZWQgaWYgaXQgcmVwcmVzZW50c1xuXAotYSBwcmludGFibGUgY2hhcmFjdGVyLiIpOworLypbY2xpbmljIGlucHV0XQorbXN2Y3J0LmdldHdjaGUgLT4gd2NoYXJfdAogCi0jaWZkZWYgX1dDT05JT19ERUZJTkVECi1zdGF0aWMgUHlPYmplY3QgKgotbXN2Y3J0X2dldHdjaGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorV2lkZSBjaGFyIHZhcmlhbnQgb2YgZ2V0Y2hlKCksIHJldHVybmluZyBhIFVuaWNvZGUgdmFsdWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyB3Y2hhcl90Cittc3ZjcnRfZ2V0d2NoZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDBkYWU1YmEzODI5ZDU5NiBpbnB1dD00OTMzN2Q1OWQxYTU5MWY4XSovCiB7CiAgICAgd2NoYXJfdCBjaDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOmdldHdjaGUiKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgY2ggPSBfZ2V0d2NoZSgpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tT3JkaW5hbChjaCk7CisgICAgcmV0dXJuIGNoOwogfQogCi1QeURvY19TVFJWQVIoZ2V0d2NoZV9kb2MsCi0iZ2V0d2NoZSgpIC0+IFVuaWNvZGUga2V5IGNoYXJhY3RlclxuXAotXG5cCi1XaWRlIGNoYXIgdmFyaWFudCBvZiBnZXRjaGUoKSwgcmV0dXJuaW5nIGEgVW5pY29kZSB2YWx1ZS4iKTsKLSNlbmRpZgorLypbY2xpbmljIGlucHV0XQorbXN2Y3J0LnB1dGNoCisKKyAgICBjaGFyOiBjaGFyCisgICAgLworCitQcmludCB0aGUgYnl0ZSBzdHJpbmcgY2hhciB0byB0aGUgY29uc29sZSB3aXRob3V0IGJ1ZmZlcmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLW1zdmNydF9wdXRjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCittc3ZjcnRfcHV0Y2hfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjaGFyIGNoYXJfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTJlYzliODEwMTJkOGY2MCBpbnB1dD1lYzA3OGRkMTBjYjA1NGQ2XSovCiB7Ci0gICAgY2hhciBjaDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiYzpwdXRjaCIsICZjaCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgX3B1dGNoKGNoKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgX3B1dGNoKGNoYXJfdmFsdWUpOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIocHV0Y2hfZG9jLAotInB1dGNoKGNoYXIpIC0+IE5vbmVcblwKLVxuXAotUHJpbnQgdGhlIGJ5dGUgc3RyaW5nIGNoYXIgdG8gdGhlIGNvbnNvbGUgd2l0aG91dCBidWZmZXJpbmcuIik7CisvKltjbGluaWMgaW5wdXRdCittc3ZjcnQucHV0d2NoCiAKLSNpZmRlZiBfV0NPTklPX0RFRklORUQKKyAgICB1bmljb2RlX2NoYXI6IGludChhY2NlcHQ9e3N0cn0pCisgICAgLworCitXaWRlIGNoYXIgdmFyaWFudCBvZiBwdXRjaCgpLCBhY2NlcHRpbmcgYSBVbmljb2RlIHZhbHVlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotbXN2Y3J0X3B1dHdjaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCittc3ZjcnRfcHV0d2NoX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHVuaWNvZGVfY2hhcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hM2JkMWE4OTUxZDI4ZWVlIGlucHV0PTk5NmNjZDBiYmNiYWM0YzNdKi8KIHsKLSAgICBpbnQgY2g7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkM6cHV0d2NoIiwgJmNoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBfcHV0d2NoKGNoKTsKKyAgICBfcHV0d2NoKHVuaWNvZGVfY2hhcik7CiAgICAgUHlfUkVUVVJOX05PTkU7CiAKIH0KIAotUHlEb2NfU1RSVkFSKHB1dHdjaF9kb2MsCi0icHV0d2NoKHVuaWNvZGVfY2hhcikgLT4gTm9uZVxuXAotXG5cCi1XaWRlIGNoYXIgdmFyaWFudCBvZiBwdXRjaCgpLCBhY2NlcHRpbmcgYSBVbmljb2RlIHZhbHVlLiIpOwotI2VuZGlmCisvKltjbGluaWMgaW5wdXRdCittc3ZjcnQudW5nZXRjaAorCisgICAgY2hhcjogY2hhcgorICAgIC8KKworT3Bwb3NpdGUgb2YgZ2V0Y2guCisKK0NhdXNlIHRoZSBieXRlIHN0cmluZyBjaGFyIHRvIGJlICJwdXNoZWQgYmFjayIgaW50byB0aGUKK2NvbnNvbGUgYnVmZmVyOyBpdCB3aWxsIGJlIHRoZSBuZXh0IGNoYXJhY3RlciByZWFkIGJ5CitnZXRjaCgpIG9yIGdldGNoZSgpLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotbXN2Y3J0X3VuZ2V0Y2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorbXN2Y3J0X3VuZ2V0Y2hfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBjaGFyIGNoYXJfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzY5NDJhMGVmYTExOTAwMCBpbnB1dD0yMmYwN2VlOTAwMWJiZjBmXSovCiB7Ci0gICAgY2hhciBjaDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiYzp1bmdldGNoIiwgJmNoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoX3VuZ2V0Y2goY2gpID09IEVPRikKKyAgICBpZiAoX3VuZ2V0Y2goY2hhcl92YWx1ZSkgPT0gRU9GKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKHVuZ2V0Y2hfZG9jLAotInVuZ2V0Y2goY2hhcikgLT4gTm9uZVxuXAotXG5cCi1DYXVzZSB0aGUgYnl0ZSBzdHJpbmcgY2hhciB0byBiZSBcInB1c2hlZCBiYWNrXCIgaW50byB0aGVcblwKLWNvbnNvbGUgYnVmZmVyOyBpdCB3aWxsIGJlIHRoZSBuZXh0IGNoYXJhY3RlciByZWFkIGJ5XG5cCi1nZXRjaCgpIG9yIGdldGNoZSgpLiIpOworLypbY2xpbmljIGlucHV0XQorbXN2Y3J0LnVuZ2V0d2NoCiAKLSNpZmRlZiBfV0NPTklPX0RFRklORUQKKyAgICB1bmljb2RlX2NoYXI6IGludChhY2NlcHQ9e3N0cn0pCisgICAgLworCitXaWRlIGNoYXIgdmFyaWFudCBvZiB1bmdldGNoKCksIGFjY2VwdGluZyBhIFVuaWNvZGUgdmFsdWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1tc3ZjcnRfdW5nZXR3Y2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorbXN2Y3J0X3VuZ2V0d2NoX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgaW50IHVuaWNvZGVfY2hhcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNjNhZjA1NDM4YjhiYTNkIGlucHV0PTgzZWMwNDkyYmUwNGQ1NjRdKi8KIHsKLSAgICBpbnQgY2g7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkM6dW5nZXR3Y2giLCAmY2gpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChfdW5nZXR3Y2goY2gpID09IFdFT0YpCisgICAgaWYgKF91bmdldHdjaCh1bmljb2RlX2NoYXIpID09IFdFT0YpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotfQotCi1QeURvY19TVFJWQVIodW5nZXR3Y2hfZG9jLAotInVuZ2V0d2NoKHVuaWNvZGVfY2hhcikgLT4gTm9uZVxuXAotXG5cCi1XaWRlIGNoYXIgdmFyaWFudCBvZiB1bmdldGNoKCksIGFjY2VwdGluZyBhIFVuaWNvZGUgdmFsdWUuIik7Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQKLWluc2VydGludChQeU9iamVjdCAqZCwgY2hhciAqbmFtZSwgaW50IHZhbHVlKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7Ci0gICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAvKiBEb24ndCBib3RoZXIgcmVwb3J0aW5nIHRoaXMgZXJyb3IgKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIG5hbWUsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQorICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAjaWZkZWYgX0RFQlVHCisvKltjbGluaWMgaW5wdXRdCittc3ZjcnQuQ3J0U2V0UmVwb3J0RmlsZSAtPiBsb25nCiAKLXN0YXRpYyBQeU9iamVjdCoKLW1zdmNydF9zZXRyZXBvcnRmaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICB0eXBlOiBpbnQKKyAgICBmaWxlOiBpbnQKKyAgICAvCisKK1dyYXBwZXIgYXJvdW5kIF9DcnRTZXRSZXBvcnRGaWxlLgorCitPbmx5IGF2YWlsYWJsZSBvbiBEZWJ1ZyBidWlsZHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBsb25nCittc3ZjcnRfQ3J0U2V0UmVwb3J0RmlsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCB0eXBlLCBpbnQgZmlsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kZjI5MWM3ZmUwMzJlYjY4IGlucHV0PWJiOGY3MjFhNjA0ZmNjNDVdKi8KIHsKLSAgICBpbnQgdHlwZSwgZmlsZTsKLSAgICBfSEZJTEUgcmVzOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaSIsICZ0eXBlLCAmZmlsZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJlcyA9IF9DcnRTZXRSZXBvcnRGaWxlKHR5cGUsIChfSEZJTEUpZmlsZSk7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylyZXMpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICByZXR1cm4gKGxvbmcpX0NydFNldFJlcG9ydEZpbGUodHlwZSwgKF9IRklMRSlmaWxlKTsKIH0KIAotc3RhdGljIFB5T2JqZWN0KgotbXN2Y3J0X3NldHJlcG9ydG1vZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorLypbY2xpbmljIGlucHV0XQorbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUgLT4gbG9uZworCisgICAgdHlwZTogaW50CisgICAgbW9kZTogaW50CisgICAgLworCitXcmFwcGVyIGFyb3VuZCBfQ3J0U2V0UmVwb3J0TW9kZS4KKworT25seSBhdmFpbGFibGUgb24gRGVidWcgYnVpbGRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgbG9uZworbXN2Y3J0X0NydFNldFJlcG9ydE1vZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgdHlwZSwgaW50IG1vZGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjI4NjM3NjE1MjNkZTMxNyBpbnB1dD05MzE5ZDI5YjQzMTk0MjZiXSovCiB7Ci0gICAgaW50IHR5cGUsIG1vZGU7CiAgICAgaW50IHJlczsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWkiLCAmdHlwZSwgJm1vZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXMgPSBfQ3J0U2V0UmVwb3J0TW9kZSh0eXBlLCBtb2RlKTsKICAgICBpZiAocmVzID09IC0xKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmVzKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOworICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKLW1zdmNydF9zZXRlcnJvcm1vZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGludCBtb2RlLCByZXM7CisvKltjbGluaWMgaW5wdXRdCittc3ZjcnQuc2V0X2Vycm9yX21vZGUgLT4gbG9uZwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpIiwgJm1vZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXMgPSBfc2V0X2Vycm9yX21vZGUobW9kZSk7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyZXMpOworICAgIG1vZGU6IGludAorICAgIC8KKworV3JhcHBlciBhcm91bmQgX3NldF9lcnJvcl9tb2RlLgorCitPbmx5IGF2YWlsYWJsZSBvbiBEZWJ1ZyBidWlsZHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBsb25nCittc3ZjcnRfc2V0X2Vycm9yX21vZGVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgbW9kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hYzRhMDkwNDBkOGFjNGUzIGlucHV0PTA0NmZjYTU5YzBmMjA4NzJdKi8KK3sKKyAgICByZXR1cm4gX3NldF9lcnJvcl9tb2RlKG1vZGUpOwogfQorI2VuZGlmIC8qIF9ERUJVRyAqLwogCi0jZW5kaWYKKy8qW2NsaW5pYyBpbnB1dF0KK21zdmNydC5TZXRFcnJvck1vZGUKIAotc3RhdGljIFB5T2JqZWN0Kgotc2V0ZXJyb3Jtb2RlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICBtb2RlOiB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKQorICAgIC8KKworV3JhcHBlciBhcm91bmQgU2V0RXJyb3JNb2RlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorbXN2Y3J0X1NldEVycm9yTW9kZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIHVuc2lnbmVkIGludCBtb2RlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAxZDUyOTI5M2YwMGRhOGYgaW5wdXQ9ZDhiMTY3MjU4ZDMyZDkwN10qLwogewotICAgIHVuc2lnbmVkIGludCBtb2RlLCByZXM7CisgICAgdW5zaWduZWQgaW50IHJlczsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiSSIsICZtb2RlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmVzID0gU2V0RXJyb3JNb2RlKG1vZGUpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhyZXMpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1kYTM5YTNlZTVlNmI0YjBkXSovCiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG1zdmNydF9mdW5jdGlvbnNbXSA9IHsKLSAgICB7ImhlYXBtaW4iLCAgICAgICAgICAgICAgICAgbXN2Y3J0X2hlYXBtaW4sIE1FVEhfVkFSQVJHUywgaGVhcG1pbl9kb2N9LAotICAgIHsibG9ja2luZyIsICAgICAgICAgICAgIG1zdmNydF9sb2NraW5nLCBNRVRIX1ZBUkFSR1MsIGxvY2tpbmdfZG9jfSwKLSAgICB7InNldG1vZGUiLCAgICAgICAgICAgICAgICAgbXN2Y3J0X3NldG1vZGUsIE1FVEhfVkFSQVJHUywgc2V0bW9kZV9kb2N9LAotICAgIHsib3Blbl9vc2ZoYW5kbGUiLCAgICAgICAgICBtc3ZjcnRfb3Blbl9vc2ZoYW5kbGUsIE1FVEhfVkFSQVJHUywgb3Blbl9vc2ZoYW5kbGVfZG9jfSwKLSAgICB7ImdldF9vc2ZoYW5kbGUiLCAgICAgICAgICAgbXN2Y3J0X2dldF9vc2ZoYW5kbGUsIE1FVEhfVkFSQVJHUywgZ2V0X29zZmhhbmRsZV9kb2N9LAotICAgIHsia2JoaXQiLCAgICAgICAgICAgICAgICAgICBtc3ZjcnRfa2JoaXQsIE1FVEhfVkFSQVJHUywga2JoaXRfZG9jfSwKLSAgICB7ImdldGNoIiwgICAgICAgICAgICAgICAgICAgbXN2Y3J0X2dldGNoLCBNRVRIX1ZBUkFSR1MsIGdldGNoX2RvY30sCi0gICAgeyJnZXRjaGUiLCAgICAgICAgICAgICAgICAgIG1zdmNydF9nZXRjaGUsIE1FVEhfVkFSQVJHUywgZ2V0Y2hlX2RvY30sCi0gICAgeyJwdXRjaCIsICAgICAgICAgICAgICAgICAgIG1zdmNydF9wdXRjaCwgTUVUSF9WQVJBUkdTLCBwdXRjaF9kb2N9LAotICAgIHsidW5nZXRjaCIsICAgICAgICAgICAgICAgICBtc3ZjcnRfdW5nZXRjaCwgTUVUSF9WQVJBUkdTLCB1bmdldGNoX2RvY30sCi0gICAgeyJTZXRFcnJvck1vZGUiLCAgICAgICAgICAgIHNldGVycm9ybW9kZSwgTUVUSF9WQVJBUkdTfSwKLSNpZmRlZiBfREVCVUcKLSAgICB7IkNydFNldFJlcG9ydEZpbGUiLCAgICAgICAgbXN2Y3J0X3NldHJlcG9ydGZpbGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJDcnRTZXRSZXBvcnRNb2RlIiwgICAgICAgIG1zdmNydF9zZXRyZXBvcnRtb2RlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsic2V0X2Vycm9yX21vZGUiLCAgICAgICAgICBtc3ZjcnRfc2V0ZXJyb3Jtb2RlLCBNRVRIX1ZBUkFSR1N9LAotI2VuZGlmCi0jaWZkZWYgX1dDT05JT19ERUZJTkVECi0gICAgeyJnZXR3Y2giLCAgICAgICAgICAgICAgICAgIG1zdmNydF9nZXR3Y2gsIE1FVEhfVkFSQVJHUywgZ2V0d2NoX2RvY30sCi0gICAgeyJnZXR3Y2hlIiwgICAgICAgICAgICAgICAgIG1zdmNydF9nZXR3Y2hlLCBNRVRIX1ZBUkFSR1MsIGdldHdjaGVfZG9jfSwKLSAgICB7InB1dHdjaCIsICAgICAgICAgICAgICAgICAgbXN2Y3J0X3B1dHdjaCwgTUVUSF9WQVJBUkdTLCBwdXR3Y2hfZG9jfSwKLSAgICB7InVuZ2V0d2NoIiwgICAgICAgICAgICAgICAgbXN2Y3J0X3VuZ2V0d2NoLCBNRVRIX1ZBUkFSR1MsIHVuZ2V0d2NoX2RvY30sCi0jZW5kaWYKKyAgICBNU1ZDUlRfSEVBUE1JTl9NRVRIT0RERUYKKyAgICBNU1ZDUlRfTE9DS0lOR19NRVRIT0RERUYKKyAgICBNU1ZDUlRfU0VUTU9ERV9NRVRIT0RERUYKKyAgICBNU1ZDUlRfT1BFTl9PU0ZIQU5ETEVfTUVUSE9EREVGCisgICAgTVNWQ1JUX0dFVF9PU0ZIQU5ETEVfTUVUSE9EREVGCisgICAgTVNWQ1JUX0tCSElUX01FVEhPRERFRgorICAgIE1TVkNSVF9HRVRDSF9NRVRIT0RERUYKKyAgICBNU1ZDUlRfR0VUQ0hFX01FVEhPRERFRgorICAgIE1TVkNSVF9QVVRDSF9NRVRIT0RERUYKKyAgICBNU1ZDUlRfVU5HRVRDSF9NRVRIT0RERUYKKyAgICBNU1ZDUlRfU0VURVJST1JNT0RFX01FVEhPRERFRgorICAgIE1TVkNSVF9DUlRTRVRSRVBPUlRGSUxFX01FVEhPRERFRgorICAgIE1TVkNSVF9DUlRTRVRSRVBPUlRNT0RFX01FVEhPRERFRgorICAgIE1TVkNSVF9TRVRfRVJST1JfTU9ERV9NRVRIT0RERUYKKyAgICBNU1ZDUlRfR0VUV0NIX01FVEhPRERFRgorICAgIE1TVkNSVF9HRVRXQ0hFX01FVEhPRERFRgorICAgIE1TVkNSVF9QVVRXQ0hfTUVUSE9EREVGCisgICAgTVNWQ1JUX1VOR0VUV0NIX01FVEhPRERFRgogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfQogfTsKIApAQCAtNDYzLDYgKzQ5MiwyMCBAQAogICAgIE5VTEwKIH07CiAKK3N0YXRpYyB2b2lkCitpbnNlcnRpbnQoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKK3sKKyAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgdmFsdWUpOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgLyogRG9uJ3QgYm90aGVyIHJlcG9ydGluZyB0aGlzIGVycm9yICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCBuYW1lLCB2KTsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgIH0KK30KKwogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9tc3ZjcnQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL1BDL3B5Y29uZmlnLmggYi9QQy9weWNvbmZpZy5oCmluZGV4IGUxYzE5ODguLmFjNGY4ZjIgMTAwNjQ0Ci0tLSBhL1BDL3B5Y29uZmlnLmgKKysrIGIvUEMvcHljb25maWcuaApAQCAtMTQ1LDE4ICsxNDUsMjQgQEAKICNpZiBkZWZpbmVkKF9NX0lBNjQpCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCI2NCBiaXQgKEl0YW5pdW0pIikKICNkZWZpbmUgTVNfV0lOSTY0CisjZGVmaW5lIFBZRF9QTEFURk9STV9UQUcgIndpbl9pYTY0IgogI2VsaWYgZGVmaW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX01fQU1ENjQpCisjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBDT01QSUxFUiAoIltJQ0Mgdi4iIF9QeV9TVFJJTkdJWkUoX19JTlRFTF9DT01QSUxFUikgIiA2NCBiaXQgKGFtZDY0KSB3aXRoIE1TQyB2LiIgX1B5X1NUUklOR0laRShfTVNDX1ZFUikgIiBDUlRdIikKKyNlbHNlCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCI2NCBiaXQgKEFNRDY0KSIpCisjZW5kaWYgLyogX19JTlRFTF9DT01QSUxFUiAqLwogI2RlZmluZSBNU19XSU5YNjQKKyNkZWZpbmUgUFlEX1BMQVRGT1JNX1RBRyAid2luX2FtZDY0IgogI2Vsc2UKICNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjY0IGJpdCAoVW5rbm93bikiKQogI2VuZGlmCiAjZW5kaWYgLyogTVNfV0lONjQgKi8KIAogLyogc2V0IHRoZSB2ZXJzaW9uIG1hY3JvcyBmb3IgdGhlIHdpbmRvd3MgaGVhZGVycyAqLwotLyogUHl0aG9uIDMuNCsgcmVxdWlyZXMgV2luZG93cyBYUCBvciBncmVhdGVyICovCi0jZGVmaW5lIFB5X1dJTlZFUiAweDA1MDEgLyogX1dJTjMyX1dJTk5UX1dJTlhQICovCi0jZGVmaW5lIFB5X05URERJIE5URERJX1dJTlhQCisvKiBQeXRob24gMy41KyByZXF1aXJlcyBXaW5kb3dzIFZpc3RhIG9yIGdyZWF0ZXIgKi8KKyNkZWZpbmUgUHlfV0lOVkVSIDB4MDYwMCAvKiBfV0lOMzJfV0lOTlRfVklTVEEgKi8KKyNkZWZpbmUgUHlfTlREREkgTlRERElfVklTVEEKIAogLyogV2Ugb25seSBzZXQgdGhlc2UgdmFsdWVzIHdoZW4gYnVpbGRpbmcgUHl0aG9uIC0gd2UgZG9uJ3Qgd2FudCB0byBmb3JjZQogICAgdGhlc2UgdmFsdWVzIG9uIGV4dGVuc2lvbnMsIGFzIHRoYXQgd2lsbCBhZmZlY3QgdGhlIHByb3RvdHlwZXMgYW5kCkBAIC0xOTIsOSArMTk4LDE1IEBACiAKICNpZiBkZWZpbmVkKE1TX1dJTjMyKSAmJiAhZGVmaW5lZChNU19XSU42NCkKICNpZiBkZWZpbmVkKF9NX0lYODYpCisjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBDT01QSUxFUiAoIltJQ0Mgdi4iIF9QeV9TVFJJTkdJWkUoX19JTlRFTF9DT01QSUxFUikgIiAzMiBiaXQgKEludGVsKSB3aXRoIE1TQyB2LiIgX1B5X1NUUklOR0laRShfTVNDX1ZFUikgIiBDUlRdIikKKyNlbHNlCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKEludGVsKSIpCisjZW5kaWYgLyogX19JTlRFTF9DT01QSUxFUiAqLworI2RlZmluZSBQWURfUExBVEZPUk1fVEFHICJ3aW4zMiIKICNlbGlmIGRlZmluZWQoX01fQVJNKQogI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChBUk0pIikKKyNkZWZpbmUgUFlEX1BMQVRGT1JNX1RBRyAid2luX2FybSIKICNlbHNlCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKFVua25vd24pIikKICNlbmRpZgpAQCAtMjEzLDYgKzIyNSwxMyBAQAogI2RlZmluZSBoeXBvdCBfaHlwb3QKICNlbmRpZgogCisvKiBWUyAyMDE1IGRlZmluZXMgdGhlc2UgbmFtZXMgd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZSAqLworI2lmIF9NU0NfVkVSID49IDE5MDAKKyNkZWZpbmUgdGltZXpvbmUgX3RpbWV6b25lCisjZGVmaW5lIGRheWxpZ2h0IF9kYXlsaWdodAorI2RlZmluZSB0em5hbWUgX3R6bmFtZQorI2VuZGlmCisKIC8qIFNpZGUgYnkgU2lkZSBhc3NlbWJsaWVzIHN1cHBvcnRlZCBpbiBWUyAyMDA1IGFuZCBWUyAyMDA4IGJ1dCBub3QgMjAxMCovCiAjaWYgX01TQ19WRVIgPj0gMTQwMCAmJiBfTVNDX1ZFUiA8IDE2MDAKICNkZWZpbmUgSEFWRV9TWFMgMQpAQCAtMjI3LDM1ICsyNDYsNiBAQAogI2VuZGlmIC8qIF9NU0NfVkVSICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgQm9ybGFuZCBjb21waWxlciBkZWZpbmVzIF9fQk9STEFORENfXyAqLwotLyogWFhYIFRoZXNlIGRlZmluZXMgYXJlIGxpa2VseSBpbmNvbXBsZXRlLCBidXQgc2hvdWxkIGJlIGVhc3kgdG8gZml4LiAqLwotI2lmZGVmIF9fQk9STEFORENfXwotI2RlZmluZSBDT01QSUxFUiAiW0JvcmxhbmRdIgotCi0jaWZkZWYgX1dJTjMyCi0vKiB0ZXN0ZWQgd2l0aCBCQ0MgNS41IChfX0JPUkxBTkRDX18gPj0gMHgwNTUwKQotICovCi0KLXR5cGVkZWYgaW50IHBpZF90OwotLyogQkNDNTUgc2VlbXMgdG8gdW5kZXJzdGFuZCBfX2RlY2xzcGVjKGRsbGltcG9ydCksIGl0IGlzIHVzZWQgaW4gaXRzCi0gICBvd24gaGVhZGVyIGZpbGVzICh3aW5udC5oLCAuLi4pIC0gc28gd2UgY2FuIGRvIG5vdGhpbmcgYW5kIGdldCB0aGUgZGVmYXVsdCovCi0KLSN1bmRlZiBIQVZFX1NZU19VVElNRV9ICi0jZGVmaW5lIEhBVkVfVVRJTUVfSAotI2RlZmluZSBIQVZFX0RJUkVOVF9ICi0KLS8qIHJlbmFtZSBhIGZldyBmdW5jdGlvbnMgZm9yIHRoZSBCb3JsYW5kIGNvbXBpbGVyICovCi0jaW5jbHVkZSA8aW8uaD4KLSNkZWZpbmUgX2Noc2l6ZSBjaHNpemUKLSNkZWZpbmUgX3NldG1vZGUgc2V0bW9kZQotCi0jZWxzZSAvKiAhX1dJTjMyICovCi0jZXJyb3IgIk9ubHkgV2luMzIgYW5kIGxhdGVyIGFyZSBzdXBwb3J0ZWQiCi0jZW5kaWYgLyogIV9XSU4zMiAqLwotCi0jZW5kaWYgLyogQk9STEFOREMgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIGVnY3MvZ251LXdpbjMyIGRlZmluZXMgX19HTlVDX18gYW5kIF9XSU4zMiAqLwogI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX1dJTjMyKQogLyogWFhYIFRoZXNlIGRlZmluZXMgYXJlIGxpa2VseSBpbmNvbXBsZXRlLCBidXQgc2hvdWxkIGJlIGVhc3kgdG8gZml4LgpAQCAtMzIyLDExICszMTIsMTEgQEAKIAkJCXRoZWlyIE1ha2VmaWxlIChvdGhlciBjb21waWxlcnMgYXJlIGdlbmVyYWxseQogCQkJdGFrZW4gY2FyZSBvZiBieSBkaXN0dXRpbHMuKSAqLwogIwkJCWlmIGRlZmluZWQoX0RFQlVHKQotIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjM0X2QubGliIikKKyMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zNV9kLmxpYiIpCiAjCQkJZWxpZiBkZWZpbmVkKFB5X0xJTUlURURfQVBJKQogIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMubGliIikKICMJCQllbHNlCi0jCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzQubGliIikKKyMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zNS5saWIiKQogIwkJCWVuZGlmIC8qIF9ERUJVRyAqLwogIwkJZW5kaWYgLyogX01TQ19WRVIgKi8KICMJZW5kaWYgLyogUHlfQlVJTERfQ09SRSAqLwpAQCAtMzU3LDcgKzM0Nyw3IEBACiAjCWRlZmluZSBTSVpFT0ZfRlBPU19UIDgKICMJZGVmaW5lIFNJWkVPRl9IS0VZIDQKICMJZGVmaW5lIFNJWkVPRl9TSVpFX1QgNAotCS8qIE1TIFZTMjAwNSBjaGFuZ2VzIHRpbWVfdCB0byBhbiA2NC1iaXQgdHlwZSBvbiBhbGwgcGxhdGZvcm1zICovCisJLyogTVMgVlMyMDA1IGNoYW5nZXMgdGltZV90IHRvIGEgNjQtYml0IHR5cGUgb24gYWxsIHBsYXRmb3JtcyAqLwogIwlpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNDAwCiAjCWRlZmluZSBTSVpFT0ZfVElNRV9UIDgKICMJZWxzZQpkaWZmIC0tZ2l0IGEvUEMvcHlsYXVuY2hlci5yYyBiL1BDL3B5bGF1bmNoZXIucmMKaW5kZXggZGY1ODI0YS4uYThkYjBhOCAxMDA2NDQKLS0tIGEvUEMvcHlsYXVuY2hlci5yYworKysgYi9QQy9weWxhdW5jaGVyLnJjCkBAIC0xLDUxICsxLDUwIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogCi0jZGVmaW5lIE1TX1dJTkRPV1MKLSNpbmNsdWRlICIuLlxJbmNsdWRlXG1vZHN1cHBvcnQuaCIKLSNpbmNsdWRlICIuLlxJbmNsdWRlXHBhdGNobGV2ZWwuaCIKLSNpZmRlZiBfREVCVUcKLSMgICBpbmNsdWRlICJweXRob25udF9yY19kLmgiCi0jZWxzZQotIyAgIGluY2x1ZGUgInB5dGhvbm50X3JjLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJweXRob25fdmVyX3JjLmgiCiAKLSNkZWZpbmUgUFlUSE9OX1ZFUlNJT04gUFlfVkVSU0lPTiAiXDAiCi0jZGVmaW5lIFBZVkVSU0lPTjY0IFBZX01BSk9SX1ZFUlNJT04sIFBZX01JTk9SX1ZFUlNJT04sIEZJRUxEMywgUFlUSE9OX0FQSV9WRVJTSU9OCisvLyBJbmNsdWRlIHRoZSBtYW5pZmVzdCBmaWxlIHRoYXQgaW5kaWNhdGVzIHdlIHN1cHBvcnQgYWxsCisvLyBjdXJyZW50IHZlcnNpb25zIG9mIFdpbmRvd3MuCisjaW5jbHVkZSA8d2ludXNlci5oPgorMSBSVF9NQU5JRkVTVCAicHl0aG9uLm1hbmlmZXN0IgorCisxIElDT04gRElTQ0FSREFCTEUgImxhdW5jaGVyLmljbyIgCisyIElDT04gRElTQ0FSREFCTEUgInB5LmljbyIgCiszIElDT04gRElTQ0FSREFCTEUgInB5Yy5pY28iIAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFZlcnNpb24KKy8vCiAKIFZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTwogIEZJTEVWRVJTSU9OIFBZVkVSU0lPTjY0CiAgUFJPRFVDVFZFUlNJT04gUFlWRVJTSU9ONjQKLSBGSUxFRkxBR1NNQVNLIDB4MTdMCisgRklMRUZMQUdTTUFTSyAweDNmTAogI2lmZGVmIF9ERUJVRwotIEZJTEVGTEFHUyAweDFMCisgRklMRUZMQUdTIFZTX0ZGX0RFQlVHCiAjZWxzZQogIEZJTEVGTEFHUyAweDBMCiAjZW5kaWYKLSBGSUxFT1MgMHg0TAotIEZJTEVUWVBFIDB4MUwKKyBGSUxFT1MgVk9TX19XSU5ET1dTMzIKKyBGSUxFVFlQRSBWRlRfQVBQCiAgRklMRVNVQlRZUEUgMHgwTAogQkVHSU4KICAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCiAgICAgQkVHSU4KLSAgICAgICAgQkxPQ0sgIjA4MDkwNGIwIgorICAgICAgICBCTE9DSyAiMDAwMDA0YjAiCiAgICAgICAgIEJFR0lOCi0gICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzIgotICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIgotICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJQeXRob24gTGF1bmNoZXIgZm9yIFdpbmRvd3MgKENvbnNvbGUpIgorICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgUFlUSE9OX0NPTVBBTlkgIlwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJQeXRob25cMCIKICAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFBZVEhPTl9WRVJTSU9OCi0gICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgInB5IgotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAxMS0yMDEyIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIgotICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAicHkiCi0gICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzIgorICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJQeXRob24gTGF1bmNoZXJcMCIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsIFBZVEhPTl9DT1BZUklHSFQgIlwwIgorICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAicHkiIFBZVEhPTl9ERUJVR19FWFQgIi5leGVcMCIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJQeXRob25cMCIKICAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsIFBZVEhPTl9WRVJTSU9OCiAgICAgICAgIEVORAogICAgIEVORAogICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKICAgICBCRUdJTgotICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDgwOSwgMTIwMAorICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDAsIDEyMDAKICAgICBFTkQKLUVORAotCi1JRElfSUNPTjEgICAgICAgICAgICAgICBJQ09OICAgICAgICAgICAgICAgICAgICAibGF1bmNoZXIuaWNvIgotCi0KK0VORApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDL3B5c2hlbGxleHQuY3BwIGIvUEMvcHlzaGVsbGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmZTYxZQotLS0gL2Rldi9udWxsCisrKyBiL1BDL3B5c2hlbGxleHQuY3BwCkBAIC0wLDAgKzEsNjA1IEBACisvLyBTdXBwb3J0IGJhY2sgdG8gVmlzdGEKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIF9XSU4zMl9XSU5OVF9WSVNUQQorI2luY2x1ZGUgPHNka2Rka3Zlci5oPgorCisvLyBVc2UgV1JMIHRvIGRlZmluZSBhIGNsYXNzaWMgQ09NIGNsYXNzCisjZGVmaW5lIF9fV1JMX0NMQVNTSUNfQ09NX18KKyNpbmNsdWRlIDx3cmwuaD4KKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDxzaGxvYmouaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisjaW5jbHVkZSA8b2xlY3RsLmg+CisjaW5jbHVkZSA8c3Ryc2FmZS5oPgorCisjaW5jbHVkZSAicHlzaGVsbGV4dF9oLmgiCisKKyNkZWZpbmUgRERXTV9VUERBVEVXSU5ET1cgKFdNX1VTRVIrMykKKworc3RhdGljIEhJTlNUQU5DRSBoTW9kdWxlOworc3RhdGljIENMSVBGT1JNQVQgY2ZEcm9wRGVzY3JpcHRpb247CitzdGF0aWMgQ0xJUEZPUk1BVCBjZkRyYWdXaW5kb3c7CisKK3N0YXRpYyBjb25zdCBMUENXU1RSIENMQVNTX1NVQktFWSA9IEwiU29mdHdhcmVcXENsYXNzZXNcXENMU0lEXFx7QkVBMjE4RDItNjk1MC00OTdCLTk0MzQtNjE2ODNFQzA2NUZFfSI7CitzdGF0aWMgY29uc3QgTFBDV1NUUiBEUkFHX01FU1NBR0UgPSBMIk9wZW4gd2l0aCAlMSI7CisKK3VzaW5nIG5hbWVzcGFjZSBNaWNyb3NvZnQ6OldSTDsKKworSFJFU1VMVCBGaWxlbmFtZUxpc3RDY2hMZW5ndGhBKExQQ1NUUiBwc3pTb3VyY2UsIHNpemVfdCBjY2hNYXgsIHNpemVfdCAqcGNjaExlbmd0aCwgc2l6ZV90ICpwY2NoQ291bnQpIHsKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBzaXplX3QgY291bnQgPSAwOworICAgIHNpemVfdCBsZW5ndGggPSAwOworCisgICAgd2hpbGUgKHBzelNvdXJjZSAmJiBwc3pTb3VyY2VbMF0pIHsKKyAgICAgICAgc2l6ZV90IG9uZUxlbmd0aDsKKyAgICAgICAgaHIgPSBTdHJpbmdDY2hMZW5ndGhBKHBzelNvdXJjZSwgY2NoTWF4IC0gbGVuZ3RoLCAmb25lTGVuZ3RoKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorICAgICAgICBjb3VudCArPSAxOworICAgICAgICBsZW5ndGggKz0gb25lTGVuZ3RoICsgKHN0cmNocihwc3pTb3VyY2UsICcgJykgPyAzIDogMSk7CisgICAgICAgIHBzelNvdXJjZSA9ICZwc3pTb3VyY2Vbb25lTGVuZ3RoICsgMV07CisgICAgfQorCisgICAgKnBjY2hDb3VudCA9IGNvdW50OworICAgICpwY2NoTGVuZ3RoID0gbGVuZ3RoOworICAgIHJldHVybiBocjsKK30KKworSFJFU1VMVCBGaWxlbmFtZUxpc3RDY2hMZW5ndGhXKExQQ1dTVFIgcHN6U291cmNlLCBzaXplX3QgY2NoTWF4LCBzaXplX3QgKnBjY2hMZW5ndGgsIHNpemVfdCAqcGNjaENvdW50KSB7CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICBzaXplX3QgbGVuZ3RoID0gMDsKKworICAgIHdoaWxlIChwc3pTb3VyY2UgJiYgcHN6U291cmNlWzBdKSB7CisgICAgICAgIHNpemVfdCBvbmVMZW5ndGg7CisgICAgICAgIGhyID0gU3RyaW5nQ2NoTGVuZ3RoVyhwc3pTb3VyY2UsIGNjaE1heCAtIGxlbmd0aCwgJm9uZUxlbmd0aCk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0KKyAgICAgICAgY291bnQgKz0gMTsKKyAgICAgICAgbGVuZ3RoICs9IG9uZUxlbmd0aCArICh3Y3NjaHIocHN6U291cmNlLCAnICcpID8gMyA6IDEpOworICAgICAgICBwc3pTb3VyY2UgPSAmcHN6U291cmNlW29uZUxlbmd0aCArIDFdOworICAgIH0KKworICAgICpwY2NoQ291bnQgPSBjb3VudDsKKyAgICAqcGNjaExlbmd0aCA9IGxlbmd0aDsKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgRmlsZW5hbWVMaXN0Q2NoQ29weUEoU1RSU0FGRV9MUFNUUiBwc3pEZXN0LCBzaXplX3QgY2NoRGVzdCwgTFBDU1RSIHBzelNvdXJjZSwgTFBDU1RSIHBzelNlcGFyYXRvcikgeworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgc2l6ZV90IGxlbmd0aCA9IDA7CisKKyAgICB3aGlsZSAocHN6U291cmNlWzBdKSB7CisgICAgICAgIFNUUlNBRkVfTFBTVFIgbmV3RGVzdDsKKworICAgICAgICBociA9IFN0cmluZ0NjaENvcHlFeEEocHN6RGVzdCwgY2NoRGVzdCwgcHN6U291cmNlLCAmbmV3RGVzdCwgJmNjaERlc3QsIDApOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICB9CisgICAgICAgIHBzelNvdXJjZSArPSAobmV3RGVzdCAtIHBzekRlc3QpICsgMTsKKyAgICAgICAgcHN6RGVzdCA9IFBhdGhRdW90ZVNwYWNlc0EocHN6RGVzdCkgPyBuZXdEZXN0ICsgMiA6IG5ld0Rlc3Q7CisKKyAgICAgICAgaWYgKHBzelNvdXJjZVswXSkgeworICAgICAgICAgICAgaHIgPSBTdHJpbmdDY2hDb3B5RXhBKHBzekRlc3QsIGNjaERlc3QsIHBzelNlcGFyYXRvciwgJm5ld0Rlc3QsICZjY2hEZXN0LCAwKTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGhyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHN6RGVzdCA9IG5ld0Rlc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaHI7Cit9CisKK0hSRVNVTFQgRmlsZW5hbWVMaXN0Q2NoQ29weVcoU1RSU0FGRV9MUFdTVFIgcHN6RGVzdCwgc2l6ZV90IGNjaERlc3QsIExQQ1dTVFIgcHN6U291cmNlLCBMUENXU1RSIHBzelNlcGFyYXRvcikgeworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgc2l6ZV90IGxlbmd0aCA9IDA7CisKKyAgICB3aGlsZSAocHN6U291cmNlWzBdKSB7CisgICAgICAgIFNUUlNBRkVfTFBXU1RSIG5ld0Rlc3Q7CisKKyAgICAgICAgaHIgPSBTdHJpbmdDY2hDb3B5RXhXKHBzekRlc3QsIGNjaERlc3QsIHBzelNvdXJjZSwgJm5ld0Rlc3QsICZjY2hEZXN0LCAwKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorICAgICAgICBwc3pTb3VyY2UgKz0gKG5ld0Rlc3QgLSBwc3pEZXN0KSArIDE7CisgICAgICAgIHBzekRlc3QgPSBQYXRoUXVvdGVTcGFjZXNXKHBzekRlc3QpID8gbmV3RGVzdCArIDIgOiBuZXdEZXN0OworCisgICAgICAgIGlmIChwc3pTb3VyY2VbMF0pIHsKKyAgICAgICAgICAgIGhyID0gU3RyaW5nQ2NoQ29weUV4Vyhwc3pEZXN0LCBjY2hEZXN0LCBwc3pTZXBhcmF0b3IsICZuZXdEZXN0LCAmY2NoRGVzdCwgMCk7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBzekRlc3QgPSBuZXdEZXN0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhyOworfQorCisKK2NsYXNzIFB5U2hlbGxFeHQgOiBwdWJsaWMgUnVudGltZUNsYXNzPAorICAgIFJ1bnRpbWVDbGFzc0ZsYWdzPENsYXNzaWNDb20+LAorICAgIElEcm9wVGFyZ2V0LAorICAgIElQZXJzaXN0RmlsZQorPgoreworICAgIExQT0xFU1RSIHRhcmdldCwgdGFyZ2V0X2RpcjsKKyAgICBEV09SRCB0YXJnZXRfbW9kZTsKKworICAgIElEYXRhT2JqZWN0ICpkYXRhX29iajsKKworcHVibGljOgorICAgIFB5U2hlbGxFeHQoKSA6IHRhcmdldChOVUxMKSwgdGFyZ2V0X2RpcihOVUxMKSwgdGFyZ2V0X21vZGUoMCksIGRhdGFfb2JqKE5VTEwpIHsKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpQeVNoZWxsRXh0Iik7CisgICAgfQorCisgICAgflB5U2hlbGxFeHQoKSB7CisgICAgICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAgICAgIENvVGFza01lbUZyZWUodGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGFyZ2V0X2RpcikgeworICAgICAgICAgICAgQ29UYXNrTWVtRnJlZSh0YXJnZXRfZGlyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGF0YV9vYmopIHsKKyAgICAgICAgICAgIGRhdGFfb2JqLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgSFJFU1VMVCBVcGRhdGVEcm9wRGVzY3JpcHRpb24oSURhdGFPYmplY3QgKnBEYXRhT2JqKSB7CisgICAgICAgIFNUR01FRElVTSBtZWRpdW07CisgICAgICAgIEZPUk1BVEVUQyBmbXQgPSB7CisgICAgICAgICAgICBjZkRyb3BEZXNjcmlwdGlvbiwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBEVkFTUEVDVF9DT05URU5ULAorICAgICAgICAgICAgLTEsCisgICAgICAgICAgICBUWU1FRF9IR0xPQkFMCisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBociA9IHBEYXRhT2JqLT5HZXREYXRhKCZmbXQsICZtZWRpdW0pOworICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpVcGRhdGVEcm9wRGVzY3JpcHRpb24gLSBmYWlsZWQgdG8gZ2V0IERST1BERVNDUklQVElPTiBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lZGl1bS5oR2xvYmFsKSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OlVwZGF0ZURyb3BEZXNjcmlwdGlvbiAtIERST1BERVNDUklQVElPTiBmb3JtYXQgaGFkIE5VTEwgaEdsb2JhbCIpOworICAgICAgICAgICAgUmVsZWFzZVN0Z01lZGl1bSgmbWVkaXVtKTsKKyAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBkZCA9IChEUk9QREVTQ1JJUFRJT04qKUdsb2JhbExvY2sobWVkaXVtLmhHbG9iYWwpOworICAgICAgICBTdHJpbmdDY2hDb3B5KGRkLT5zek1lc3NhZ2UsIHNpemVvZihkZC0+c3pNZXNzYWdlKSAvIHNpemVvZihkZC0+c3pNZXNzYWdlWzBdKSwgRFJBR19NRVNTQUdFKTsKKyAgICAgICAgU3RyaW5nQ2NoQ29weShkZC0+c3pJbnNlcnQsIHNpemVvZihkZC0+c3pJbnNlcnQpIC8gc2l6ZW9mKGRkLT5zekluc2VydFswXSksIFBhdGhGaW5kRmlsZU5hbWVXKHRhcmdldCkpOworICAgICAgICBkZC0+dHlwZSA9IERST1BJTUFHRV9NT1ZFOworCisgICAgICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2JhbCk7CisgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0oJm1lZGl1bSk7CisKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgSFJFU1VMVCBHZXREcmFnV2luZG93KElEYXRhT2JqZWN0ICpwRGF0YU9iaiwgSFdORCAqcGhXbmQpIHsKKyAgICAgICAgSFJFU1VMVCBocjsKKyAgICAgICAgSFdORCAqcE1lbTsKKyAgICAgICAgU1RHTUVESVVNIG1lZGl1bTsKKyAgICAgICAgRk9STUFURVRDIGZtdCA9IHsKKyAgICAgICAgICAgIGNmRHJhZ1dpbmRvdywKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBEVkFTUEVDVF9DT05URU5ULAorICAgICAgICAgICAgLTEsCisgICAgICAgICAgICBUWU1FRF9IR0xPQkFMCisgICAgICAgIH07CisKKyAgICAgICAgaHIgPSBwRGF0YU9iai0+R2V0RGF0YSgmZm10LCAmbWVkaXVtKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6R2V0RHJhZ1dpbmRvdyAtIGZhaWxlZCB0byBnZXQgRHJhZ1dpbmRvdyBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1lZGl1bS5oR2xvYmFsKSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkdldERyYWdXaW5kb3cgLSBEcmFnV2luZG93IGZvcm1hdCBoYWQgTlVMTCBoR2xvYmFsIik7CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKCZtZWRpdW0pOworICAgICAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgfQorCisgICAgICAgIHBNZW0gPSAoSFdORCopR2xvYmFsTG9jayhtZWRpdW0uaEdsb2JhbCk7CisgICAgICAgIGlmICghcE1lbSkgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpHZXREcmFnV2luZG93IC0gZmFpbGVkIHRvIGxvY2sgRHJhZ1dpbmRvdyBoR2xvYmFsIik7CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKCZtZWRpdW0pOworICAgICAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgfQorCisgICAgICAgICpwaFduZCA9ICpwTWVtOworCisgICAgICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2JhbCk7CisgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0oJm1lZGl1bSk7CisKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgSFJFU1VMVCBHZXRBcmd1bWVudHMoSURhdGFPYmplY3QgKnBEYXRhT2JqLCBMUENXU1RSICpwQXJndW1lbnRzKSB7CisgICAgICAgIEhSRVNVTFQgaHI7CisgICAgICAgIERST1BGSUxFUyAqcGRyb3BmaWxlczsKKworICAgICAgICBTVEdNRURJVU0gbWVkaXVtOworICAgICAgICBGT1JNQVRFVEMgZm10ID0geworICAgICAgICAgICAgQ0ZfSERST1AsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgRFZBU1BFQ1RfQ09OVEVOVCwKKyAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgVFlNRURfSEdMT0JBTAorICAgICAgICB9OworCisgICAgICAgIGhyID0gcERhdGFPYmotPkdldERhdGEoJmZtdCwgJm1lZGl1bSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkdldEFyZ3VtZW50cyAtIGZhaWxlZCB0byBnZXQgQ0ZfSERST1AgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtZWRpdW0uaEdsb2JhbCkgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpHZXRBcmd1bWVudHMgLSBDRl9IRFJPUCBmb3JtYXQgaGFkIE5VTEwgaEdsb2JhbCIpOworICAgICAgICAgICAgUmVsZWFzZVN0Z01lZGl1bSgmbWVkaXVtKTsKKyAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgICAgIH0KKworICAgICAgICBwZHJvcGZpbGVzID0gKERST1BGSUxFUyopR2xvYmFsTG9jayhtZWRpdW0uaEdsb2JhbCk7CisgICAgICAgIGlmICghcGRyb3BmaWxlcykgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpHZXRBcmd1bWVudHMgLSBmYWlsZWQgdG8gbG9jayBDRl9IRFJPUCBoR2xvYmFsIik7CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKCZtZWRpdW0pOworICAgICAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZHJvcGZpbGVzLT5mV2lkZSkgeworICAgICAgICAgICAgTFBDV1NUUiBmaWxlcyA9IChMUENXU1RSKSgoY2hhciopcGRyb3BmaWxlcyArIHBkcm9wZmlsZXMtPnBGaWxlcyk7CisgICAgICAgICAgICBzaXplX3QgbGVuLCBjb3VudDsKKyAgICAgICAgICAgIGhyID0gRmlsZW5hbWVMaXN0Q2NoTGVuZ3RoVyhmaWxlcywgMzI3NjcsICZsZW4sICZjb3VudCk7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgeworICAgICAgICAgICAgICAgIExQV1NUUiBhcmdzID0gKExQV1NUUilDb1Rhc2tNZW1BbGxvYyhzaXplb2YoV0NIQVIpICogKGxlbiArIDEpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJncykgeworICAgICAgICAgICAgICAgICAgICBociA9IEZpbGVuYW1lTGlzdENjaENvcHlXKGFyZ3MsIDMyNzY3LCBmaWxlcywgTCIgIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcEFyZ3VtZW50cyA9IGFyZ3M7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDb1Rhc2tNZW1GcmVlKGFyZ3MpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaHIgPSBFX09VVE9GTUVNT1JZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExQQ1NUUiBmaWxlcyA9IChMUENTVFIpKChjaGFyKilwZHJvcGZpbGVzICsgcGRyb3BmaWxlcy0+cEZpbGVzKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4sIGNvdW50OworICAgICAgICAgICAgaHIgPSBGaWxlbmFtZUxpc3RDY2hMZW5ndGhBKGZpbGVzLCAzMjc2NywgJmxlbiwgJmNvdW50KTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAgICAgICAgICAgTFBTVFIgdGVtcCA9IChMUFNUUilDb1Rhc2tNZW1BbGxvYyhzaXplb2YoQ0hBUikgKiAobGVuICsgMSkpOworICAgICAgICAgICAgICAgIGlmICh0ZW1wKSB7CisgICAgICAgICAgICAgICAgICAgIGhyID0gRmlsZW5hbWVMaXN0Q2NoQ29weUEodGVtcCwgMzI3NjcsIGZpbGVzLCAiICIpOworICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdsZW4gPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwgMCwgdGVtcCwgKGludClsZW4sIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFdTVFIgYXJncyA9IChMUFdTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9mKFdDSEFSKSAqICh3bGVuICsgMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwgMCwgdGVtcCwgKGludClsZW4sIGFyZ3MsIHdsZW4gKyAxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcEFyZ3VtZW50cyA9IGFyZ3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpHZXRBcmd1bWVudHMgLSBmYWlsZWQgdG8gY29udmVydCBtdWx0aS1ieXRlIHRvIHdpZGUtY2hhciBwYXRoIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvVGFza01lbUZyZWUoYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyID0gRV9GQUlMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpHZXRBcmd1bWVudHMgLSBmYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiB3aWRlLWNoYXIgcGF0aCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyID0gRV9GQUlMOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIENvVGFza01lbUZyZWUodGVtcCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaHIgPSBFX09VVE9GTUVNT1JZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2JhbCk7CisgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0oJm1lZGl1bSk7CisKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIEhSRVNVTFQgTm90aWZ5RHJhZ1dpbmRvdyhIV05EIGh3bmQpIHsKKyAgICAgICAgTFJFU1VMVCByZXM7CisKKyAgICAgICAgaWYgKCFod25kKSB7CisgICAgICAgICAgICByZXR1cm4gU19GQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcyA9IFNlbmRNZXNzYWdlKGh3bmQsIEREV01fVVBEQVRFV0lORE9XLCAwLCBOVUxMKTsKKworICAgICAgICBpZiAocmVzKSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6Ok5vdGlmeURyYWdXaW5kb3cgLSBmYWlsZWQgdG8gcG9zdCBERFdNX1VQREFURVdJTkRPVyIpOworICAgICAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworcHVibGljOgorICAgIC8vIElEcm9wVGFyZ2V0IGltcGxlbWVudGF0aW9uCisKKyAgICBTVERNRVRIT0RJTVAgRHJhZ0VudGVyKElEYXRhT2JqZWN0ICpwRGF0YU9iaiwgRFdPUkQgZ3JmS2V5U3RhdGUsIFBPSU5UTCBwdCwgRFdPUkQgKnBkd0VmZmVjdCkgeworICAgICAgICBIV05EIGh3bmQ7CisKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEcmFnRW50ZXIiKTsKKworICAgICAgICBwRGF0YU9iai0+QWRkUmVmKCk7CisgICAgICAgIGRhdGFfb2JqID0gcERhdGFPYmo7CisKKyAgICAgICAgKnBkd0VmZmVjdCA9IERST1BFRkZFQ1RfTU9WRTsKKworICAgICAgICBpZiAoRkFJTEVEKFVwZGF0ZURyb3BEZXNjcmlwdGlvbihkYXRhX29iaikpKSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkRyYWdFbnRlciAtIGZhaWxlZCB0byB1cGRhdGUgZHJvcCBkZXNjcmlwdGlvbiIpOworICAgICAgICB9CisgICAgICAgIGlmIChGQUlMRUQoR2V0RHJhZ1dpbmRvdyhkYXRhX29iaiwgJmh3bmQpKSkgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEcmFnRW50ZXIgLSBmYWlsZWQgdG8gZ2V0IGRyYWcgd2luZG93Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEZBSUxFRChOb3RpZnlEcmFnV2luZG93KGh3bmQpKSkgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEcmFnRW50ZXIgLSBmYWlsZWQgdG8gbm90aWZ5IGRyYWcgd2luZG93Iik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBTVERNRVRIT0RJTVAgRHJhZ0xlYXZlKCkgeworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBTVERNRVRIT0RJTVAgRHJhZ092ZXIoRFdPUkQgZ3JmS2V5U3RhdGUsIFBPSU5UTCBwdCwgRFdPUkQgKnBkd0VmZmVjdCkgeworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBTVERNRVRIT0RJTVAgRHJvcChJRGF0YU9iamVjdCAqcERhdGFPYmosIERXT1JEIGdyZktleVN0YXRlLCBQT0lOVEwgcHQsIERXT1JEICpwZHdFZmZlY3QpIHsKKyAgICAgICAgTFBDV1NUUiBhcmdzOworCisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6RHJvcCIpOworICAgICAgICAqcGR3RWZmZWN0ID0gRFJPUEVGRkVDVF9OT05FOworCisgICAgICAgIGlmIChwRGF0YU9iaiAhPSBkYXRhX29iaikgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEcm9wIC0gdW5leHBlY3RlZCBkYXRhIG9iamVjdCIpOworICAgICAgICAgICAgcmV0dXJuIEVfRkFJTDsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFfb2JqLT5SZWxlYXNlKCk7CisgICAgICAgIGRhdGFfb2JqID0gTlVMTDsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKEdldEFyZ3VtZW50cyhwRGF0YU9iaiwgJmFyZ3MpKSkgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoYXJncyk7CisgICAgICAgICAgICBTaGVsbEV4ZWN1dGUoTlVMTCwgTlVMTCwgdGFyZ2V0LCBhcmdzLCB0YXJnZXRfZGlyLCBTV19OT1JNQUwpOworCisgICAgICAgICAgICBDb1Rhc2tNZW1GcmVlKChMUFZPSUQpYXJncyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkRyb3AgLSBmYWlsZWQgdG8gZ2V0IGxhdW5jaCBhcmd1bWVudHMiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgIC8vIElQZXJzaXN0RmlsZSBpbXBsZW1lbnRhdGlvbgorCisgICAgU1RETUVUSE9ESU1QIEdldEN1ckZpbGUoTFBPTEVTVFIgKnBwc3pGaWxlTmFtZSkgeworICAgICAgICBIUkVTVUxUIGhyOworICAgICAgICBzaXplX3QgbGVuOworCisgICAgICAgIGlmICghcHBzekZpbGVOYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICAgICB9CisKKyAgICAgICAgaHIgPSBTdHJpbmdDY2hMZW5ndGgodGFyZ2V0LCBTVFJTQUZFX01BWF9DQ0ggLSAxLCAmbGVuKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CisgICAgICAgIH0KKworICAgICAgICAqcHBzekZpbGVOYW1lID0gKExQT0xFU1RSKUNvVGFza01lbUFsbG9jKHNpemVvZihXQ0hBUikgKiAobGVuICsgMSkpOworICAgICAgICBpZiAoISpwcHN6RmlsZU5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworICAgICAgICB9CisKKyAgICAgICAgaHIgPSBTdHJpbmdDY2hDb3B5KCpwcHN6RmlsZU5hbWUsIGxlbiArIDEsIHRhcmdldCk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICBDb1Rhc2tNZW1GcmVlKCpwcHN6RmlsZU5hbWUpOworICAgICAgICAgICAgKnBwc3pGaWxlTmFtZSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gRV9GQUlMOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgU1RETUVUSE9ESU1QIElzRGlydHkoKSB7CisgICAgICAgIHJldHVybiBTX0ZBTFNFOworICAgIH0KKworICAgIFNURE1FVEhPRElNUCBMb2FkKExQQ09MRVNUUiBwc3pGaWxlTmFtZSwgRFdPUkQgZHdNb2RlKSB7CisgICAgICAgIEhSRVNVTFQgaHI7CisgICAgICAgIHNpemVfdCBsZW47CisKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpMb2FkIik7CisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKHBzekZpbGVOYW1lKTsKKworICAgICAgICBociA9IFN0cmluZ0NjaExlbmd0aChwc3pGaWxlTmFtZSwgU1RSU0FGRV9NQVhfQ0NIIC0gMSwgJmxlbik7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkxvYWQgLSBmYWlsZWQgdG8gZ2V0IHN0cmluZyBsZW5ndGgiKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0YXJnZXQpIHsKKyAgICAgICAgICAgIENvVGFza01lbUZyZWUodGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGFyZ2V0X2RpcikgeworICAgICAgICAgICAgQ29UYXNrTWVtRnJlZSh0YXJnZXRfZGlyKTsKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldCA9IChMUE9MRVNUUilDb1Rhc2tNZW1BbGxvYyhzaXplb2YoV0NIQVIpICogKGxlbiArIDEpKTsKKyAgICAgICAgaWYgKCF0YXJnZXQpIHsKKyAgICAgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6TG9hZCAtIEVfT1VUT0ZNRU1PUlkiKTsKKyAgICAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOworICAgICAgICB9CisgICAgICAgIHRhcmdldF9kaXIgPSAoTFBPTEVTVFIpQ29UYXNrTWVtQWxsb2Moc2l6ZW9mKFdDSEFSKSAqIChsZW4gKyAxKSk7CisgICAgICAgIGlmICghdGFyZ2V0X2RpcikgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpMb2FkIC0gRV9PVVRPRk1FTU9SWSIpOworICAgICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CisgICAgICAgIH0KKworICAgICAgICBociA9IFN0cmluZ0NjaENvcHkodGFyZ2V0LCBsZW4gKyAxLCBwc3pGaWxlTmFtZSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkxvYWQgLSBmYWlsZWQgdG8gY29weSBzdHJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorCisgICAgICAgIGhyID0gU3RyaW5nQ2NoQ29weSh0YXJnZXRfZGlyLCBsZW4gKyAxLCBwc3pGaWxlTmFtZSk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkxvYWQgLSBmYWlsZWQgdG8gY29weSBzdHJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBocjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVBhdGhSZW1vdmVGaWxlU3BlY1codGFyZ2V0X2RpcikpIHsKKyAgICAgICAgICAgIE91dHB1dERlYnVnU3RyaW5nVyhMIlB5U2hlbGxFeHQ6OkxvYWQgLSBmYWlsZWQgdG8gcmVtb3ZlIGZpbGVzcGVjIGZyb20gdGFyZ2V0Iik7CisgICAgICAgICAgICByZXR1cm4gRV9GQUlMOworICAgICAgICB9CisKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcodGFyZ2V0KTsKKyAgICAgICAgdGFyZ2V0X21vZGUgPSBkd01vZGU7CisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6TG9hZCAtIFNfT0siKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgU1RETUVUSE9ESU1QIFNhdmUoTFBDT0xFU1RSIHBzekZpbGVOYW1lLCBCT09MIGZSZW1lbWJlcikgeworICAgICAgICByZXR1cm4gRV9OT1RJTVBMOworICAgIH0KKworICAgIFNURE1FVEhPRElNUCBTYXZlQ29tcGxldGVkKExQQ09MRVNUUiBwc3pGaWxlTmFtZSkgeworICAgICAgICByZXR1cm4gRV9OT1RJTVBMOworICAgIH0KKworICAgIFNURE1FVEhPRElNUCBHZXRDbGFzc0lEKENMU0lEICpwQ2xhc3NJRCkgeworICAgICAgICAqcENsYXNzSUQgPSBDTFNJRF9QeVNoZWxsRXh0OworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9Cit9OworCitDb0NyZWF0YWJsZUNsYXNzKFB5U2hlbGxFeHQpOworCitTVERBUEkgRGxsR2V0Q2xhc3NPYmplY3QoUkVGQ0xTSUQgcmNsc2lkLCBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJfIHZvaWQqKiBwcHYpIHsKKyAgICByZXR1cm4gTW9kdWxlPEluUHJvYz46OkdldE1vZHVsZSgpLkdldENsYXNzT2JqZWN0KHJjbHNpZCwgcmlpZCwgcHB2KTsKK30KKworU1REQVBJIERsbENhblVubG9hZE5vdygpIHsKKyAgICByZXR1cm4gTW9kdWxlPEluUHJvYz46OkdldE1vZHVsZSgpLlRlcm1pbmF0ZSgpID8gU19PSyA6IFNfRkFMU0U7Cit9CisKK1NUREFQSSBEbGxSZWdpc3RlclNlcnZlcigpIHsKKyAgICBMT05HIHJlczsKKyAgICBTRUNVUklUWV9BVFRSSUJVVEVTIHNlY2F0dHIgPSB7IHNpemVvZihTRUNVUklUWV9BVFRSSUJVVEVTKSwgTlVMTCwgRkFMU0UgfTsKKyAgICBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgcHNlY2F0dHIgPSBOVUxMOworICAgIEhLRVkga2V5LCBpcHNLZXk7CisgICAgV0NIQVIgbW9kbmFtZVtNQVhfUEFUSF07CisgICAgRFdPUkQgbW9kbmFtZV9sZW47CisKKyAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkRsbFJlZ2lzdGVyU2VydmVyIik7CisgICAgaWYgKCFoTW9kdWxlKSB7CisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6RGxsUmVnaXN0ZXJTZXJ2ZXIgLSBtb2R1bGUgaGFuZGxlIHdhcyBub3Qgc2V0Iik7CisgICAgICAgIHJldHVybiBTRUxGUkVHX0VfQ0xBU1M7CisgICAgfQorICAgIG1vZG5hbWVfbGVuID0gR2V0TW9kdWxlRmlsZU5hbWUoaE1vZHVsZSwgbW9kbmFtZSwgTUFYX1BBVEgpOworICAgIGlmIChtb2RuYW1lX2xlbiA9PSAwIHx8CisgICAgICAgIChtb2RuYW1lX2xlbiA9PSBNQVhfUEFUSCAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSkgeworICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkRsbFJlZ2lzdGVyU2VydmVyIC0gZmFpbGVkIHRvIGdldCBtb2R1bGUgZmlsZSBuYW1lIik7CisgICAgICAgIHJldHVybiBTRUxGUkVHX0VfQ0xBU1M7CisgICAgfQorCisgICAgRFdPUkQgZGlzcDsKKyAgICByZXMgPSBSZWdDcmVhdGVLZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsIENMQVNTX1NVQktFWSwgMCwgTlVMTCwgMCwKKyAgICAgICAgS0VZX0FMTF9BQ0NFU1MsIHBzZWNhdHRyLCAma2V5LCAmZGlzcCk7CisgICAgaWYgKHJlcyA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEKSB7CisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6RGxsUmVnaXN0ZXJTZXJ2ZXIgLSBmYWlsZWQgdG8gd3JpdGUgcGVyLW1hY2hpbmUgcmVnaXN0cmF0aW9uLiBBdHRlbXB0aW5nIHBlci11c2VyIGluc3RlYWQuIik7CisgICAgICAgIHJlcyA9IFJlZ0NyZWF0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCBDTEFTU19TVUJLRVksIDAsIE5VTEwsIDAsCisgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUywgcHNlY2F0dHIsICZrZXksICZkaXNwKTsKKyAgICB9CisgICAgaWYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6RGxsUmVnaXN0ZXJTZXJ2ZXIgLSBmYWlsZWQgdG8gY3JlYXRlIGNsYXNzIGtleSIpOworICAgICAgICByZXR1cm4gU0VMRlJFR19FX0NMQVNTOworICAgIH0KKworICAgIHJlcyA9IFJlZ0NyZWF0ZUtleUV4KGtleSwgTCJJblByb2NTZXJ2ZXIzMiIsIDAsIE5VTEwsIDAsCisgICAgICAgIEtFWV9BTExfQUNDRVNTLCBwc2VjYXR0ciwgJmlwc0tleSwgTlVMTCk7CisgICAgaWYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6RGxsUmVnaXN0ZXJTZXJ2ZXIgLSBmYWlsZWQgdG8gY3JlYXRlIEluUHJvY1NlcnZlcjMyIGtleSIpOworICAgICAgICByZXR1cm4gU0VMRlJFR19FX0NMQVNTOworICAgIH0KKworICAgIHJlcyA9IFJlZ1NldFZhbHVlRXgoaXBzS2V5LCBOVUxMLCAwLAorICAgICAgICBSRUdfU1osIChMUEJZVEUpbW9kbmFtZSwgbW9kbmFtZV9sZW4gKiBzaXplb2YobW9kbmFtZVswXSkpOworCisgICAgaWYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIFJlZ0Nsb3NlS2V5KGlwc0tleSk7CisgICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiUHlTaGVsbEV4dDo6RGxsUmVnaXN0ZXJTZXJ2ZXIgLSBmYWlsZWQgdG8gc2V0IHNlcnZlciBwYXRoIik7CisgICAgICAgIHJldHVybiBTRUxGUkVHX0VfQ0xBU1M7CisgICAgfQorCisgICAgcmVzID0gUmVnU2V0VmFsdWVFeChpcHNLZXksIEwiVGhyZWFkaW5nTW9kZWwiLCAwLAorICAgICAgICBSRUdfU1osIChMUEJZVEUpKEwiQXBhcnRtZW50IiksIHNpemVvZihMIkFwYXJ0bWVudCIpKTsKKworICAgIFJlZ0Nsb3NlS2V5KGlwc0tleSk7CisgICAgUmVnQ2xvc2VLZXkoa2V5KTsKKyAgICBpZiAocmVzICE9IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEbGxSZWdpc3RlclNlcnZlciAtIGZhaWxlZCB0byBzZXQgdGhyZWFkaW5nIG1vZGVsIik7CisgICAgICAgIHJldHVybiBTRUxGUkVHX0VfQ0xBU1M7CisgICAgfQorCisgICAgU0hDaGFuZ2VOb3RpZnkoU0hDTkVfQVNTT0NDSEFOR0VELCBTSENORl9JRExJU1QsIE5VTEwsIE5VTEwpOworCisgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEbGxSZWdpc3RlclNlcnZlciAtIFNfT0siKTsKKyAgICByZXR1cm4gU19PSzsKK30KKworU1REQVBJIERsbFVucmVnaXN0ZXJTZXJ2ZXIoKSB7CisgICAgTE9ORyByZXNfbG0sIHJlc19jdTsKKworICAgIHJlc19sbSA9IFJlZ0RlbGV0ZVRyZWUoSEtFWV9MT0NBTF9NQUNISU5FLCBDTEFTU19TVUJLRVkpOworICAgIGlmIChyZXNfbG0gIT0gRVJST1JfU1VDQ0VTUyAmJiByZXNfbG0gIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEbGxVbnJlZ2lzdGVyU2VydmVyIC0gZmFpbGVkIHRvIGRlbGV0ZSBwZXItbWFjaGluZSByZWdpc3RyYXRpb24iKTsKKyAgICAgICAgcmV0dXJuIFNFTEZSRUdfRV9DTEFTUzsKKyAgICB9CisKKyAgICByZXNfY3UgPSBSZWdEZWxldGVUcmVlKEhLRVlfQ1VSUkVOVF9VU0VSLCBDTEFTU19TVUJLRVkpOworICAgIGlmIChyZXNfY3UgIT0gRVJST1JfU1VDQ0VTUyAmJiByZXNfY3UgIT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEbGxVbnJlZ2lzdGVyU2VydmVyIC0gZmFpbGVkIHRvIGRlbGV0ZSBwZXItdXNlciByZWdpc3RyYXRpb24iKTsKKyAgICAgICAgcmV0dXJuIFNFTEZSRUdfRV9DTEFTUzsKKyAgICB9CisKKyAgICBpZiAocmVzX2xtID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EICYmIHJlc19jdSA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkgeworICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkRsbFVucmVnaXN0ZXJTZXJ2ZXIgLSBleHRlbnNpb24gd2FzIG5vdCByZWdpc3RlcmVkIik7CisgICAgICAgIHJldHVybiBTRUxGUkVHX0VfQ0xBU1M7CisgICAgfQorCisgICAgU0hDaGFuZ2VOb3RpZnkoU0hDTkVfQVNTT0NDSEFOR0VELCBTSENORl9JRExJU1QsIE5VTEwsIE5VTEwpOworCisgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEbGxVbnJlZ2lzdGVyU2VydmVyIC0gU19PSyIpOworICAgIHJldHVybiBTX09LOworfQorCitTVERBUElfKEJPT0wpIERsbE1haW4oX0luX29wdF8gSElOU1RBTkNFIGhpbnN0LCBEV09SRCByZWFzb24sIF9Jbl9vcHRfIHZvaWQqKSB7CisgICAgaWYgKHJlYXNvbiA9PSBETExfUFJPQ0VTU19BVFRBQ0gpIHsKKyAgICAgICAgaE1vZHVsZSA9IGhpbnN0OworCisgICAgICAgIGNmRHJvcERlc2NyaXB0aW9uID0gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoQ0ZTVFJfRFJPUERFU0NSSVBUSU9OKTsKKyAgICAgICAgaWYgKCFjZkRyb3BEZXNjcmlwdGlvbikgeworICAgICAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcoTCJQeVNoZWxsRXh0OjpEbGxNYWluIC0gZmFpbGVkIHRvIGdldCBDRlNUUl9EUk9QREVTQ1JJUFRJT04gZm9ybWF0Iik7CisgICAgICAgIH0KKyAgICAgICAgY2ZEcmFnV2luZG93ID0gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoTCJEcmFnV2luZG93Iik7CisgICAgICAgIGlmICghY2ZEcmFnV2luZG93KSB7CisgICAgICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlB5U2hlbGxFeHQ6OkRsbE1haW4gLSBmYWlsZWQgdG8gZ2V0IERyYWdXaW5kb3cgZm9ybWF0Iik7CisgICAgICAgIH0KKworICAgICAgICBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzKGhpbnN0KTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUEMvcHlzaGVsbGV4dC5kZWYgYi9QQy9weXNoZWxsZXh0LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDI0YmQxCi0tLSAvZGV2L251bGwKKysrIGIvUEMvcHlzaGVsbGV4dC5kZWYKQEAgLTAsMCArMSw2IEBACitMSUJSQVJZCSJweXNoZWxsZXh0IgorRVhQT1JUUworICBEbGxSZWdpc3RlclNlcnZlciBQUklWQVRFCisgIERsbFVucmVnaXN0ZXJTZXJ2ZXIgUFJJVkFURQorICBEbGxHZXRDbGFzc09iamVjdCBQUklWQVRFCisgIERsbENhblVubG9hZE5vdyBQUklWQVRFCmRpZmYgLS1naXQgYS9QQy9weXNoZWxsZXh0LmlkbCBiL1BDL3B5c2hlbGxleHQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTE4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9QQy9weXNoZWxsZXh0LmlkbApAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgIm9jaWRsLmlkbCI7CisKK1t1dWlkKDQ0MDM5QTc2LTNCREQtNDFDMS1BMzFCLTcxQzAwMjAyQ0U4MSksIHZlcnNpb24oMS4wKV0KK2xpYnJhcnkgUHlTaGVsbEV4dExpYgoreworICAgIFt1dWlkKEJFQTIxOEQyLTY5NTAtNDk3Qi05NDM0LTYxNjgzRUMwNjVGRSksIHZlcnNpb24oMS4wKV0KKyAgICBjb2NsYXNzIFB5U2hlbGxFeHQKKyAgICB7CisgICAgICAgIFtkZWZhdWx0XSBpbnRlcmZhY2UgSURyb3BUYXJnZXQ7CisgICAgICAgIGludGVyZmFjZSBJUGVyc2lzdEZpbGU7CisgICAgfQorfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQy9weXNoZWxsZXh0LnJjIGIvUEMvcHlzaGVsbGV4dC5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTkyNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvUEMvcHlzaGVsbGV4dC5yYwpAQCAtMCwwICsxLDQ2IEBACisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjaW5jbHVkZSAicHl0aG9uX3Zlcl9yYy5oIgorCisvLyBJbmNsdWRlIHRoZSBtYW5pZmVzdCBmaWxlIHRoYXQgaW5kaWNhdGVzIHdlIHN1cHBvcnQgYWxsCisvLyBjdXJyZW50IHZlcnNpb25zIG9mIFdpbmRvd3MuCisjaW5jbHVkZSA8d2ludXNlci5oPgorMSBSVF9NQU5JRkVTVCAicHl0aG9uLm1hbmlmZXN0IgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFZlcnNpb24KKy8vCisKK1ZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTworIEZJTEVWRVJTSU9OIFBZVkVSU0lPTjY0CisgUFJPRFVDVFZFUlNJT04gUFlWRVJTSU9ONjQKKyBGSUxFRkxBR1NNQVNLIDB4M2ZMCisjaWZkZWYgX0RFQlVHCisgRklMRUZMQUdTIFZTX0ZGX0RFQlVHCisjZWxzZQorIEZJTEVGTEFHUyAweDBMCisjZW5kaWYKKyBGSUxFT1MgVk9TX19XSU5ET1dTMzIKKyBGSUxFVFlQRSBWRlRfQVBQCisgRklMRVNVQlRZUEUgMHgwTAorQkVHSU4KKyAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgICAgQkVHSU4KKyAgICAgICAgQkxPQ0sgIjAwMDAwNGIwIgorICAgICAgICBCRUdJTgorICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgUFlUSE9OX0NPTVBBTlkgIlwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJQeXRob25cMCIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFBZVEhPTl9WRVJTSU9OCisgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgIlB5dGhvbiBMYXVuY2hlciBTaGVsbCBFeHRlbnNpb25cMCIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsIFBZVEhPTl9DT1BZUklHSFQgIlwwIgorICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAicHlzaGVsbGV4dCIgUFlUSE9OX0RFQlVHX0VYVCAiLmRsbFwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlB5dGhvblwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgUFlUSE9OX1ZFUlNJT04KKyAgICAgICAgRU5ECisgICAgRU5ECisgICAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4MCwgMTIwMAorICAgIEVORAorRU5EClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUEMvcHlzaGVsbGV4dF9kLmRlZiBiL1BDL3B5c2hlbGxleHRfZC5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyMTQ4YgotLS0gL2Rldi9udWxsCisrKyBiL1BDL3B5c2hlbGxleHRfZC5kZWYKQEAgLTAsMCArMSw2IEBACitMSUJSQVJZCSJweXNoZWxsZXh0X2QiCitFWFBPUlRTCisgIERsbFJlZ2lzdGVyU2VydmVyIFBSSVZBVEUKKyAgRGxsVW5yZWdpc3RlclNlcnZlciBQUklWQVRFCisgIERsbEdldENsYXNzT2JqZWN0IFBSSVZBVEUKKyAgRGxsQ2FuVW5sb2FkTm93IFBSSVZBVEUKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbi5tYW5pZmVzdCBiL1BDL3B5dGhvbi5tYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmU0YmJhCi0tLSAvZGV2L251bGwKKysrIGIvUEMvcHl0aG9uLm1hbmlmZXN0CkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KKzxhc3NlbWJseSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjEiIG1hbmlmZXN0VmVyc2lvbj0iMS4wIj4KKyAgPHRydXN0SW5mbz4KKyAgICA8c2VjdXJpdHk+CisgICAgICA8cmVxdWVzdGVkUHJpdmlsZWdlcz4KKyAgICAgICAgPHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsIGxldmVsPSJhc0ludm9rZXIiIHVpQWNjZXNzPSJmYWxzZSIvPgorICAgICAgPC9yZXF1ZXN0ZWRQcml2aWxlZ2VzPgorICAgIDwvc2VjdXJpdHk+CisgIDwvdHJ1c3RJbmZvPgorICA8Y29tcGF0aWJpbGl0eSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpjb21wYXRpYmlsaXR5LnYxIj4gCisgICAgPGFwcGxpY2F0aW9uPiAKKyAgICAgIDxzdXBwb3J0ZWRPUyBJZD0ie2UyMDExNDU3LTE1NDYtNDNjNS1hNWZlLTAwOGRlZWUzZDNmMH0iLz4gCisgICAgICA8c3VwcG9ydGVkT1MgSWQ9InszNTEzOGI5YS01ZDk2LTRmYmQtOGUyZC1hMjQ0MDIyNWY5M2F9Ii8+CisgICAgICA8c3VwcG9ydGVkT1MgSWQ9Ins0YTJmMjhlMy01M2I5LTQ0NDEtYmE5Yy1kNjlkNGE0YTZlMzh9Ii8+CisgICAgICA8c3VwcG9ydGVkT1MgSWQ9InsxZjY3NmM3Ni04MGUxLTQyMzktOTViYi04M2QwZjZkMGRhNzh9Ii8+CisgICAgICA8c3VwcG9ydGVkT1MgSWQ9Ins4ZTBmN2ExMi1iZmIzLTRmZTgtYjlhNS00OGZkNTBhMTVhOWF9Ii8+CisgICAgPC9hcHBsaWNhdGlvbj4gCisgIDwvY29tcGF0aWJpbGl0eT4KKyAgPGRlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVudEFzc2VtYmx5PgorICAgICAgPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9Ik1pY3Jvc29mdC5XaW5kb3dzLkNvbW1vbi1Db250cm9scyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249IjYuMC4wLjAiIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0iKiIgcHVibGljS2V5VG9rZW49IjY1OTViNjQxNDRjY2YxZGYiIGxhbmd1YWdlPSIqIiAvPgorICAgIDwvZGVwZW5kZW50QXNzZW1ibHk+CisgIDwvZGVwZW5kZW5jeT4KKzwvYXNzZW1ibHk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5kZWYgYi9QQy9weXRob24zLmRlZgppbmRleCAzN2U0NTRiLi44OGMwNzQyIDEwMDY0NAotLS0gYS9QQy9weXRob24zLmRlZgorKysgYi9QQy9weXRob24zLmRlZgpAQCAtMSw3MDEgKzEsNzEzIEBACi07IFdoZW4gY2hhbmdpbmcgdGhpcyBmaWxlLCBydW4gcHl0aG9uMzRnZW4ucHkKKzsgVGhpcyBmaWxlIHNwZWNpZmllcyB0aGUgaW1wb3J0IGZvcndhcmRpbmcgZm9yIHB5dGhvbjMuZGxsCis7IEl0IGlzIHVzZWQgd2hlbiBidWlsZGluZyBweXRob24zZGxsLnZjeHByb2oKIExJQlJBUlkJInB5dGhvbjMiCiBFWFBPUlRTCi0gIFB5QXJnX1BhcnNlPXB5dGhvbjM0LlB5QXJnX1BhcnNlCi0gIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZQotICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzQuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjM0LlB5QXJnX1VucGFja1R1cGxlCi0gIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzQuUHlBcmdfVmFQYXJzZQotICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zNC5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcwotICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzQuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCi0gIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjM0LlB5QmFzZU9iamVjdF9UeXBlIERBVEEKLSAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjM0LlB5Qm9vbF9Gcm9tTG9uZwotICBQeUJvb2xfVHlwZT1weXRob24zNC5QeUJvb2xfVHlwZSBEQVRBCi0gIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjM0LlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzQuUHlCeXRlQXJyYXlfQXNTdHJpbmcKLSAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0NvbmNhdAotICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKLSAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1Jlc2l6ZQotICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X1NpemUKLSAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zNC5QeUJ5dGVBcnJheV9UeXBlIERBVEEKLSAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zNC5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zNC5QeUJ5dGVzX0FzU3RyaW5nCi0gIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCi0gIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0Ci0gIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjM0LlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCi0gIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjM0LlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCi0gIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXQKLSAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zNC5QeUJ5dGVzX0Zyb21Gb3JtYXRWCi0gIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zNC5QeUJ5dGVzX0Zyb21PYmplY3QKLSAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZwotICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlc19SZXByPXB5dGhvbjM0LlB5Qnl0ZXNfUmVwcgotICBQeUJ5dGVzX1NpemU9cHl0aG9uMzQuUHlCeXRlc19TaXplCi0gIFB5Qnl0ZXNfVHlwZT1weXRob24zNC5QeUJ5dGVzX1R5cGUgREFUQQotICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0NhbGwKLSAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0Ci0gIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZsYWdzCi0gIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCi0gIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzQuUHlDRnVuY3Rpb25fR2V0U2VsZgotICBQeUNGdW5jdGlvbl9OZXc9cHl0aG9uMzQuUHlDRnVuY3Rpb25fTmV3Ci0gIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX05ld0V4Ci0gIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzQuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCi0gIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjM0LlB5Q2FsbEl0ZXJfTmV3Ci0gIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zNC5QeUNhbGxJdGVyX1R5cGUgREFUQQotICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjM0LlB5Q2FsbGFibGVfQ2hlY2sKLSAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzQuUHlDYXBzdWxlX0dldENvbnRleHQKLSAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzQuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKLSAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzQuUHlDYXBzdWxlX0dldE5hbWUKLSAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzQuUHlDYXBzdWxlX0dldFBvaW50ZXIKLSAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zNC5QeUNhcHN1bGVfSW1wb3J0Ci0gIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjM0LlB5Q2Fwc3VsZV9Jc1ZhbGlkCi0gIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzQuUHlDYXBzdWxlX05ldwotICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zNC5QeUNhcHN1bGVfU2V0Q29udGV4dAotICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zNC5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgotICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zNC5QeUNhcHN1bGVfU2V0TmFtZQotICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zNC5QeUNhcHN1bGVfU2V0UG9pbnRlcgotICBQeUNhcHN1bGVfVHlwZT1weXRob24zNC5QeUNhcHN1bGVfVHlwZSBEQVRBCi0gIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjM0LlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKLSAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycwotICBQeUNvZGVjX0RlY29kZT1weXRob24zNC5QeUNvZGVjX0RlY29kZQotICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19EZWNvZGVyCi0gIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjM0LlB5Q29kZWNfRW5jb2RlCi0gIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zNC5QeUNvZGVjX0VuY29kZXIKLSAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19JZ25vcmVFcnJvcnMKLSAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKLSAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzQuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKLSAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjM0LlB5Q29kZWNfS25vd25FbmNvZGluZwotICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjM0LlB5Q29kZWNfTG9va3VwRXJyb3IKLSAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyCi0gIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zNC5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKLSAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfUmVwbGFjZUVycm9ycwotICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVJlYWRlcgotICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zNC5QeUNvZGVjX1N0cmVhbVdyaXRlcgotICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zNC5QeUNvZGVjX1N0cmljdEVycm9ycwotICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKLSAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjM0LlB5Q29tcGxleF9Gcm9tRG91YmxlcwotICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjM0LlB5Q29tcGxleF9JbWFnQXNEb3VibGUKLSAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zNC5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCi0gIFB5Q29tcGxleF9UeXBlPXB5dGhvbjM0LlB5Q29tcGxleF9UeXBlIERBVEEKLSAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zNC5QeURlc2NyX05ld0NsYXNzTWV0aG9kCi0gIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjM0LlB5RGVzY3JfTmV3R2V0U2V0Ci0gIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWVtYmVyCi0gIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjM0LlB5RGVzY3JfTmV3TWV0aG9kCi0gIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zNC5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQotICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zNC5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCi0gIFB5RGljdEtleXNfVHlwZT1weXRob24zNC5QeURpY3RLZXlzX1R5cGUgREFUQQotICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzQuUHlEaWN0UHJveHlfTmV3Ci0gIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzQuUHlEaWN0UHJveHlfVHlwZSBEQVRBCi0gIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjM0LlB5RGljdFZhbHVlc19UeXBlIERBVEEKLSAgUHlEaWN0X0NsZWFyPXB5dGhvbjM0LlB5RGljdF9DbGVhcgotICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzQuUHlEaWN0X0NvbnRhaW5zCi0gIFB5RGljdF9Db3B5PXB5dGhvbjM0LlB5RGljdF9Db3B5Ci0gIFB5RGljdF9EZWxJdGVtPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtCi0gIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9EZWxJdGVtU3RyaW5nCi0gIFB5RGljdF9HZXRJdGVtPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtCi0gIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtU3RyaW5nCi0gIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjM0LlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCi0gIFB5RGljdF9JdGVtcz1weXRob24zNC5QeURpY3RfSXRlbXMKLSAgUHlEaWN0X0tleXM9cHl0aG9uMzQuUHlEaWN0X0tleXMKLSAgUHlEaWN0X01lcmdlPXB5dGhvbjM0LlB5RGljdF9NZXJnZQotICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zNC5QeURpY3RfTWVyZ2VGcm9tU2VxMgotICBQeURpY3RfTmV3PXB5dGhvbjM0LlB5RGljdF9OZXcKLSAgUHlEaWN0X05leHQ9cHl0aG9uMzQuUHlEaWN0X05leHQKLSAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW0KLSAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlEaWN0X1NldEl0ZW1TdHJpbmcKLSAgUHlEaWN0X1NpemU9cHl0aG9uMzQuUHlEaWN0X1NpemUKLSAgUHlEaWN0X1R5cGU9cHl0aG9uMzQuUHlEaWN0X1R5cGUgREFUQQotICBQeURpY3RfVXBkYXRlPXB5dGhvbjM0LlB5RGljdF9VcGRhdGUKLSAgUHlEaWN0X1ZhbHVlcz1weXRob24zNC5QeURpY3RfVmFsdWVzCi0gIFB5RWxsaXBzaXNfVHlwZT1weXRob24zNC5QeUVsbGlwc2lzX1R5cGUgREFUQQotICBQeUVudW1fVHlwZT1weXRob24zNC5QeUVudW1fVHlwZSBEQVRBCi0gIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjM0LlB5RXJyX0JhZEFyZ3VtZW50Ci0gIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5QeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjM0LlB5RXJyX0NoZWNrU2lnbmFscwotICBQeUVycl9DbGVhcj1weXRob24zNC5QeUVycl9DbGVhcgotICBQeUVycl9EaXNwbGF5PXB5dGhvbjM0LlB5RXJyX0Rpc3BsYXkKLSAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNC5QeUVycl9FeGNlcHRpb25NYXRjaGVzCi0gIFB5RXJyX0ZldGNoPXB5dGhvbjM0LlB5RXJyX0ZldGNoCi0gIFB5RXJyX0Zvcm1hdD1weXRob24zNC5QeUVycl9Gb3JtYXQKLSAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjM0LlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcwotICBQeUVycl9OZXdFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uCi0gIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2M9cHl0aG9uMzQuUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYwotICBQeUVycl9Ob01lbW9yeT1weXRob24zNC5QeUVycl9Ob01lbW9yeQotICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb249cHl0aG9uMzQuUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCi0gIFB5RXJyX09jY3VycmVkPXB5dGhvbjM0LlB5RXJyX09jY3VycmVkCi0gIFB5RXJyX1ByaW50PXB5dGhvbjM0LlB5RXJyX1ByaW50Ci0gIFB5RXJyX1ByaW50RXg9cHl0aG9uMzQuUHlFcnJfUHJpbnRFeAotICBQeUVycl9Qcm9ncmFtVGV4dD1weXRob24zNC5QeUVycl9Qcm9ncmFtVGV4dAotICBQeUVycl9SZXN0b3JlPXB5dGhvbjM0LlB5RXJyX1Jlc3RvcmUKLSAgUHlFcnJfU2V0RnJvbUVycm5vPXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJubwotICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWU9cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi0gIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKLSAgUHlFcnJfU2V0SW50ZXJydXB0PXB5dGhvbjM0LlB5RXJyX1NldEludGVycnVwdAotICBQeUVycl9TZXROb25lPXB5dGhvbjM0LlB5RXJyX1NldE5vbmUKLSAgUHlFcnJfU2V0T2JqZWN0PXB5dGhvbjM0LlB5RXJyX1NldE9iamVjdAotICBQeUVycl9TZXRTdHJpbmc9cHl0aG9uMzQuUHlFcnJfU2V0U3RyaW5nCi0gIFB5RXJyX1N5bnRheExvY2F0aW9uPXB5dGhvbjM0LlB5RXJyX1N5bnRheExvY2F0aW9uCi0gIFB5RXJyX1dhcm5FeD1weXRob24zNC5QeUVycl9XYXJuRXgKLSAgUHlFcnJfV2FybkV4cGxpY2l0PXB5dGhvbjM0LlB5RXJyX1dhcm5FeHBsaWNpdAotICBQeUVycl9XYXJuRm9ybWF0PXB5dGhvbjM0LlB5RXJyX1dhcm5Gb3JtYXQKLSAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlPXB5dGhvbjM0LlB5RXJyX1dyaXRlVW5yYWlzYWJsZQotICBQeUV2YWxfQWNxdWlyZUxvY2s9cHl0aG9uMzQuUHlFdmFsX0FjcXVpcmVMb2NrCi0gIFB5RXZhbF9BY3F1aXJlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9BY3F1aXJlVGhyZWFkCi0gIFB5RXZhbF9DYWxsRnVuY3Rpb249cHl0aG9uMzQuUHlFdmFsX0NhbGxGdW5jdGlvbgotICBQeUV2YWxfQ2FsbE1ldGhvZD1weXRob24zNC5QeUV2YWxfQ2FsbE1ldGhvZAotICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3Jkcz1weXRob24zNC5QeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcwotICBQeUV2YWxfRXZhbENvZGU9cHl0aG9uMzQuUHlFdmFsX0V2YWxDb2RlCi0gIFB5RXZhbF9FdmFsQ29kZUV4PXB5dGhvbjM0LlB5RXZhbF9FdmFsQ29kZUV4Ci0gIFB5RXZhbF9FdmFsRnJhbWU9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZQotICBQeUV2YWxfRXZhbEZyYW1lRXg9cHl0aG9uMzQuUHlFdmFsX0V2YWxGcmFtZUV4Ci0gIFB5RXZhbF9HZXRCdWlsdGlucz1weXRob24zNC5QeUV2YWxfR2V0QnVpbHRpbnMKLSAgUHlFdmFsX0dldENhbGxTdGF0cz1weXRob24zNC5QeUV2YWxfR2V0Q2FsbFN0YXRzCi0gIFB5RXZhbF9HZXRGcmFtZT1weXRob24zNC5QeUV2YWxfR2V0RnJhbWUKLSAgUHlFdmFsX0dldEZ1bmNEZXNjPXB5dGhvbjM0LlB5RXZhbF9HZXRGdW5jRGVzYwotICBQeUV2YWxfR2V0RnVuY05hbWU9cHl0aG9uMzQuUHlFdmFsX0dldEZ1bmNOYW1lCi0gIFB5RXZhbF9HZXRHbG9iYWxzPXB5dGhvbjM0LlB5RXZhbF9HZXRHbG9iYWxzCi0gIFB5RXZhbF9HZXRMb2NhbHM9cHl0aG9uMzQuUHlFdmFsX0dldExvY2FscwotICBQeUV2YWxfSW5pdFRocmVhZHM9cHl0aG9uMzQuUHlFdmFsX0luaXRUaHJlYWRzCi0gIFB5RXZhbF9SZUluaXRUaHJlYWRzPXB5dGhvbjM0LlB5RXZhbF9SZUluaXRUaHJlYWRzCi0gIFB5RXZhbF9SZWxlYXNlTG9jaz1weXRob24zNC5QeUV2YWxfUmVsZWFzZUxvY2sKLSAgUHlFdmFsX1JlbGVhc2VUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1JlbGVhc2VUaHJlYWQKLSAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLSAgUHlFdmFsX1NhdmVUaHJlYWQ9cHl0aG9uMzQuUHlFdmFsX1NhdmVUaHJlYWQKLSAgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZD1weXRob24zNC5QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCi0gIFB5RXhjX0FyaXRobWV0aWNFcnJvcj1weXRob24zNC5QeUV4Y19Bcml0aG1ldGljRXJyb3IgREFUQQotICBQeUV4Y19Bc3NlcnRpb25FcnJvcj1weXRob24zNC5QeUV4Y19Bc3NlcnRpb25FcnJvciBEQVRBCi0gIFB5RXhjX0F0dHJpYnV0ZUVycm9yPXB5dGhvbjM0LlB5RXhjX0F0dHJpYnV0ZUVycm9yIERBVEEKLSAgUHlFeGNfQmFzZUV4Y2VwdGlvbj1weXRob24zNC5QeUV4Y19CYXNlRXhjZXB0aW9uIERBVEEKLSAgUHlFeGNfQnVmZmVyRXJyb3I9cHl0aG9uMzQuUHlFeGNfQnVmZmVyRXJyb3IgREFUQQotICBQeUV4Y19CeXRlc1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfQnl0ZXNXYXJuaW5nIERBVEEKLSAgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCi0gIFB5RXhjX0VPRkVycm9yPXB5dGhvbjM0LlB5RXhjX0VPRkVycm9yIERBVEEKLSAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcj1weXRob24zNC5QeUV4Y19FbnZpcm9ubWVudEVycm9yIERBVEEKLSAgUHlFeGNfRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXhjX0V4Y2VwdGlvbiBEQVRBCi0gIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcj1weXRob24zNC5QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IgREFUQQotICBQeUV4Y19GdXR1cmVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0Z1dHVyZVdhcm5pbmcgREFUQQotICBQeUV4Y19HZW5lcmF0b3JFeGl0PXB5dGhvbjM0LlB5RXhjX0dlbmVyYXRvckV4aXQgREFUQQotICBQeUV4Y19JT0Vycm9yPXB5dGhvbjM0LlB5RXhjX0lPRXJyb3IgREFUQQotICBQeUV4Y19JbXBvcnRFcnJvcj1weXRob24zNC5QeUV4Y19JbXBvcnRFcnJvciBEQVRBCi0gIFB5RXhjX0ltcG9ydFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfSW1wb3J0V2FybmluZyBEQVRBCi0gIFB5RXhjX0luZGVudGF0aW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZW50YXRpb25FcnJvciBEQVRBCi0gIFB5RXhjX0luZGV4RXJyb3I9cHl0aG9uMzQuUHlFeGNfSW5kZXhFcnJvciBEQVRBCi0gIFB5RXhjX0tleUVycm9yPXB5dGhvbjM0LlB5RXhjX0tleUVycm9yIERBVEEKLSAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQ9cHl0aG9uMzQuUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQgREFUQQotICBQeUV4Y19Mb29rdXBFcnJvcj1weXRob24zNC5QeUV4Y19Mb29rdXBFcnJvciBEQVRBCi0gIFB5RXhjX01lbW9yeUVycm9yPXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9yIERBVEEKLSAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0PXB5dGhvbjM0LlB5RXhjX01lbW9yeUVycm9ySW5zdCBEQVRBCi0gIFB5RXhjX05hbWVFcnJvcj1weXRob24zNC5QeUV4Y19OYW1lRXJyb3IgREFUQQotICBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yPXB5dGhvbjM0LlB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IgREFUQQotICBQeUV4Y19PU0Vycm9yPXB5dGhvbjM0LlB5RXhjX09TRXJyb3IgREFUQQotICBQeUV4Y19PdmVyZmxvd0Vycm9yPXB5dGhvbjM0LlB5RXhjX092ZXJmbG93RXJyb3IgREFUQQotICBQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcgREFUQQotICBQeUV4Y19SZWN1cnNpb25FcnJvckluc3Q9cHl0aG9uMzQuUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0IERBVEEKLSAgUHlFeGNfUmVmZXJlbmNlRXJyb3I9cHl0aG9uMzQuUHlFeGNfUmVmZXJlbmNlRXJyb3IgREFUQQotICBQeUV4Y19SdW50aW1lRXJyb3I9cHl0aG9uMzQuUHlFeGNfUnVudGltZUVycm9yIERBVEEKLSAgUHlFeGNfUnVudGltZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfUnVudGltZVdhcm5pbmcgREFUQQotICBQeUV4Y19TdG9wSXRlcmF0aW9uPXB5dGhvbjM0LlB5RXhjX1N0b3BJdGVyYXRpb24gREFUQQotICBQeUV4Y19TeW50YXhFcnJvcj1weXRob24zNC5QeUV4Y19TeW50YXhFcnJvciBEQVRBCi0gIFB5RXhjX1N5bnRheFdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfU3ludGF4V2FybmluZyBEQVRBCi0gIFB5RXhjX1N5c3RlbUVycm9yPXB5dGhvbjM0LlB5RXhjX1N5c3RlbUVycm9yIERBVEEKLSAgUHlFeGNfU3lzdGVtRXhpdD1weXRob24zNC5QeUV4Y19TeXN0ZW1FeGl0IERBVEEKLSAgUHlFeGNfVGFiRXJyb3I9cHl0aG9uMzQuUHlFeGNfVGFiRXJyb3IgREFUQQotICBQeUV4Y19UeXBlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVHlwZUVycm9yIERBVEEKLSAgUHlFeGNfVW5ib3VuZExvY2FsRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZURlY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZVdhcm5pbmc9cHl0aG9uMzQuUHlFeGNfVW5pY29kZVdhcm5pbmcgREFUQQotICBQeUV4Y19Vc2VyV2FybmluZz1weXRob24zNC5QeUV4Y19Vc2VyV2FybmluZyBEQVRBCi0gIFB5RXhjX1ZhbHVlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVmFsdWVFcnJvciBEQVRBCi0gIFB5RXhjX1dhcm5pbmc9cHl0aG9uMzQuUHlFeGNfV2FybmluZyBEQVRBCi0gIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yPXB5dGhvbjM0LlB5RXhjX1plcm9EaXZpc2lvbkVycm9yIERBVEEKLSAgUHlFeGNlcHRpb25fR2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0Q2F1c2UKLSAgUHlFeGNlcHRpb25fR2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRDb250ZXh0Ci0gIFB5RXhjZXB0aW9uX0dldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2sKLSAgUHlFeGNlcHRpb25fU2V0Q2F1c2U9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0Q2F1c2UKLSAgUHlFeGNlcHRpb25fU2V0Q29udGV4dD1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRDb250ZXh0Ci0gIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjaz1weXRob24zNC5QeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sKLSAgUHlGaWxlX0Zyb21GZD1weXRob24zNC5QeUZpbGVfRnJvbUZkCi0gIFB5RmlsZV9HZXRMaW5lPXB5dGhvbjM0LlB5RmlsZV9HZXRMaW5lCi0gIFB5RmlsZV9Xcml0ZU9iamVjdD1weXRob24zNC5QeUZpbGVfV3JpdGVPYmplY3QKLSAgUHlGaWxlX1dyaXRlU3RyaW5nPXB5dGhvbjM0LlB5RmlsZV9Xcml0ZVN0cmluZwotICBQeUZpbHRlcl9UeXBlPXB5dGhvbjM0LlB5RmlsdGVyX1R5cGUgREFUQQotICBQeUZsb2F0X0FzRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfQXNEb3VibGUKLSAgUHlGbG9hdF9Gcm9tRG91YmxlPXB5dGhvbjM0LlB5RmxvYXRfRnJvbURvdWJsZQotICBQeUZsb2F0X0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlGbG9hdF9Gcm9tU3RyaW5nCi0gIFB5RmxvYXRfR2V0SW5mbz1weXRob24zNC5QeUZsb2F0X0dldEluZm8KLSAgUHlGbG9hdF9HZXRNYXg9cHl0aG9uMzQuUHlGbG9hdF9HZXRNYXgKLSAgUHlGbG9hdF9HZXRNaW49cHl0aG9uMzQuUHlGbG9hdF9HZXRNaW4KLSAgUHlGbG9hdF9UeXBlPXB5dGhvbjM0LlB5RmxvYXRfVHlwZSBEQVRBCi0gIFB5RnJvemVuU2V0X05ldz1weXRob24zNC5QeUZyb3plblNldF9OZXcKLSAgUHlGcm96ZW5TZXRfVHlwZT1weXRob24zNC5QeUZyb3plblNldF9UeXBlIERBVEEKLSAgUHlHQ19Db2xsZWN0PXB5dGhvbjM0LlB5R0NfQ29sbGVjdAotICBQeUdJTFN0YXRlX0Vuc3VyZT1weXRob24zNC5QeUdJTFN0YXRlX0Vuc3VyZQotICBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZT1weXRob24zNC5QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQotICBQeUdJTFN0YXRlX1JlbGVhc2U9cHl0aG9uMzQuUHlHSUxTdGF0ZV9SZWxlYXNlCi0gIFB5R2V0U2V0RGVzY3JfVHlwZT1weXRob24zNC5QeUdldFNldERlc2NyX1R5cGUgREFUQQotICBQeUltcG9ydF9BZGRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfQWRkTW9kdWxlCi0gIFB5SW1wb3J0X0FwcGVuZEluaXR0YWI9cHl0aG9uMzQuUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgotICBQeUltcG9ydF9DbGVhbnVwPXB5dGhvbjM0LlB5SW1wb3J0X0NsZWFudXAKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeD1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4Ci0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcz1weXRob24zNC5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMKLSAgUHlJbXBvcnRfR2V0SW1wb3J0ZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0SW1wb3J0ZXIKLSAgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKLSAgUHlJbXBvcnRfR2V0TWFnaWNUYWc9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TWFnaWNUYWcKLSAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdD1weXRob24zNC5QeUltcG9ydF9HZXRNb2R1bGVEaWN0Ci0gIFB5SW1wb3J0X0ltcG9ydD1weXRob24zNC5QeUltcG9ydF9JbXBvcnQKLSAgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQotICBQeUltcG9ydF9JbXBvcnRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2s9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jawotICBQeUltcG9ydF9SZWxvYWRNb2R1bGU9cHl0aG9uMzQuUHlJbXBvcnRfUmVsb2FkTW9kdWxlCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcj1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfQ2xlYXIKLSAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZT1weXRob24zNC5QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXc9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX05ldwotICBQeUl0ZXJfTmV4dD1weXRob24zNC5QeUl0ZXJfTmV4dAotICBQeUxpc3RJdGVyX1R5cGU9cHl0aG9uMzQuUHlMaXN0SXRlcl9UeXBlIERBVEEKLSAgUHlMaXN0UmV2SXRlcl9UeXBlPXB5dGhvbjM0LlB5TGlzdFJldkl0ZXJfVHlwZSBEQVRBCi0gIFB5TGlzdF9BcHBlbmQ9cHl0aG9uMzQuUHlMaXN0X0FwcGVuZAotICBQeUxpc3RfQXNUdXBsZT1weXRob24zNC5QeUxpc3RfQXNUdXBsZQotICBQeUxpc3RfR2V0SXRlbT1weXRob24zNC5QeUxpc3RfR2V0SXRlbQotICBQeUxpc3RfR2V0U2xpY2U9cHl0aG9uMzQuUHlMaXN0X0dldFNsaWNlCi0gIFB5TGlzdF9JbnNlcnQ9cHl0aG9uMzQuUHlMaXN0X0luc2VydAotICBQeUxpc3RfTmV3PXB5dGhvbjM0LlB5TGlzdF9OZXcKLSAgUHlMaXN0X1JldmVyc2U9cHl0aG9uMzQuUHlMaXN0X1JldmVyc2UKLSAgUHlMaXN0X1NldEl0ZW09cHl0aG9uMzQuUHlMaXN0X1NldEl0ZW0KLSAgUHlMaXN0X1NldFNsaWNlPXB5dGhvbjM0LlB5TGlzdF9TZXRTbGljZQotICBQeUxpc3RfU2l6ZT1weXRob24zNC5QeUxpc3RfU2l6ZQotICBQeUxpc3RfU29ydD1weXRob24zNC5QeUxpc3RfU29ydAotICBQeUxpc3RfVHlwZT1weXRob24zNC5QeUxpc3RfVHlwZSBEQVRBCi0gIFB5TG9uZ1JhbmdlSXRlcl9UeXBlPXB5dGhvbjM0LlB5TG9uZ1JhbmdlSXRlcl9UeXBlIERBVEEKLSAgUHlMb25nX0FzRG91YmxlPXB5dGhvbjM0LlB5TG9uZ19Bc0RvdWJsZQotICBQeUxvbmdfQXNMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmcKLSAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdwotICBQeUxvbmdfQXNMb25nTG9uZz1weXRob24zNC5QeUxvbmdfQXNMb25nTG9uZwotICBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93PXB5dGhvbjM0LlB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cKLSAgUHlMb25nX0FzU2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NpemVfdAotICBQeUxvbmdfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Bc1NzaXplX3QKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwotICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2s9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCi0gIFB5TG9uZ19Bc1ZvaWRQdHI9cHl0aG9uMzQuUHlMb25nX0FzVm9pZFB0cgotICBQeUxvbmdfRnJvbURvdWJsZT1weXRob24zNC5QeUxvbmdfRnJvbURvdWJsZQotICBQeUxvbmdfRnJvbUxvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nCi0gIFB5TG9uZ19Gcm9tTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21Mb25nTG9uZwotICBQeUxvbmdfRnJvbVNpemVfdD1weXRob24zNC5QeUxvbmdfRnJvbVNpemVfdAotICBQeUxvbmdfRnJvbVNzaXplX3Q9cHl0aG9uMzQuUHlMb25nX0Zyb21Tc2l6ZV90Ci0gIFB5TG9uZ19Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tU3RyaW5nCi0gIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCi0gIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcKLSAgUHlMb25nX0Zyb21Wb2lkUHRyPXB5dGhvbjM0LlB5TG9uZ19Gcm9tVm9pZFB0cgotICBQeUxvbmdfR2V0SW5mbz1weXRob24zNC5QeUxvbmdfR2V0SW5mbwotICBQeUxvbmdfVHlwZT1weXRob24zNC5QeUxvbmdfVHlwZSBEQVRBCi0gIFB5TWFwX1R5cGU9cHl0aG9uMzQuUHlNYXBfVHlwZSBEQVRBCi0gIFB5TWFwcGluZ19DaGVjaz1weXRob24zNC5QeU1hcHBpbmdfQ2hlY2sKLSAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKLSAgUHlNYXBwaW5nX0hhc0tleT1weXRob24zNC5QeU1hcHBpbmdfSGFzS2V5Ci0gIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX0hhc0tleVN0cmluZwotICBQeU1hcHBpbmdfSXRlbXM9cHl0aG9uMzQuUHlNYXBwaW5nX0l0ZW1zCi0gIFB5TWFwcGluZ19LZXlzPXB5dGhvbjM0LlB5TWFwcGluZ19LZXlzCi0gIFB5TWFwcGluZ19MZW5ndGg9cHl0aG9uMzQuUHlNYXBwaW5nX0xlbmd0aAotICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZz1weXRob24zNC5QeU1hcHBpbmdfU2V0SXRlbVN0cmluZwotICBQeU1hcHBpbmdfU2l6ZT1weXRob24zNC5QeU1hcHBpbmdfU2l6ZQotICBQeU1hcHBpbmdfVmFsdWVzPXB5dGhvbjM0LlB5TWFwcGluZ19WYWx1ZXMKLSAgUHlNZW1fRnJlZT1weXRob24zNC5QeU1lbV9GcmVlCi0gIFB5TWVtX01hbGxvYz1weXRob24zNC5QeU1lbV9NYWxsb2MKLSAgUHlNZW1fUmVhbGxvYz1weXRob24zNC5QeU1lbV9SZWFsbG9jCi0gIFB5TWVtYmVyRGVzY3JfVHlwZT1weXRob24zNC5QeU1lbWJlckRlc2NyX1R5cGUgREFUQQotICBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdD1weXRob24zNC5QeU1lbW9yeVZpZXdfRnJvbU9iamVjdAotICBQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cz1weXRob24zNC5QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cwotICBQeU1lbW9yeVZpZXdfVHlwZT1weXRob24zNC5QeU1lbW9yeVZpZXdfVHlwZSBEQVRBCi0gIFB5TWV0aG9kRGVzY3JfVHlwZT1weXRob24zNC5QeU1ldGhvZERlc2NyX1R5cGUgREFUQQotICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudD1weXRob24zNC5QeU1vZHVsZV9BZGRJbnRDb25zdGFudAotICBQeU1vZHVsZV9BZGRPYmplY3Q9cHl0aG9uMzQuUHlNb2R1bGVfQWRkT2JqZWN0Ci0gIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50PXB5dGhvbjM0LlB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50Ci0gIFB5TW9kdWxlX0NyZWF0ZTI9cHl0aG9uMzQuUHlNb2R1bGVfQ3JlYXRlMgotICBQeU1vZHVsZV9HZXREZWY9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGVmCi0gIFB5TW9kdWxlX0dldERpY3Q9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RGljdAotICBQeU1vZHVsZV9HZXRGaWxlbmFtZT1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZQotICBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdD1weXRob24zNC5QeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdAotICBQeU1vZHVsZV9HZXROYW1lPXB5dGhvbjM0LlB5TW9kdWxlX0dldE5hbWUKLSAgUHlNb2R1bGVfR2V0U3RhdGU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0U3RhdGUKLSAgUHlNb2R1bGVfTmV3PXB5dGhvbjM0LlB5TW9kdWxlX05ldwotICBQeU1vZHVsZV9UeXBlPXB5dGhvbjM0LlB5TW9kdWxlX1R5cGUgREFUQQotICBQeU51bGxJbXBvcnRlcl9UeXBlPXB5dGhvbjM0LlB5TnVsbEltcG9ydGVyX1R5cGUgREFUQQotICBQeU51bWJlcl9BYnNvbHV0ZT1weXRob24zNC5QeU51bWJlcl9BYnNvbHV0ZQotICBQeU51bWJlcl9BZGQ9cHl0aG9uMzQuUHlOdW1iZXJfQWRkCi0gIFB5TnVtYmVyX0FuZD1weXRob24zNC5QeU51bWJlcl9BbmQKLSAgUHlOdW1iZXJfQXNTc2l6ZV90PXB5dGhvbjM0LlB5TnVtYmVyX0FzU3NpemVfdAotICBQeU51bWJlcl9DaGVjaz1weXRob24zNC5QeU51bWJlcl9DaGVjawotICBQeU51bWJlcl9EaXZtb2Q9cHl0aG9uMzQuUHlOdW1iZXJfRGl2bW9kCi0gIFB5TnVtYmVyX0Zsb2F0PXB5dGhvbjM0LlB5TnVtYmVyX0Zsb2F0Ci0gIFB5TnVtYmVyX0Zsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0Zsb29yRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VBZGQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZUFkZAotICBQeU51bWJlcl9JblBsYWNlQW5kPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VBbmQKLSAgUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQotICBQeU51bWJlcl9JblBsYWNlTHNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VMc2hpZnQKLSAgUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQotICBQeU51bWJlcl9JblBsYWNlT3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZU9yCi0gIFB5TnVtYmVyX0luUGxhY2VQb3dlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUG93ZXIKLSAgUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9JblBsYWNlUmVtYWluZGVyCi0gIFB5TnVtYmVyX0luUGxhY2VSc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAotICBQeU51bWJlcl9JblBsYWNlU3VidHJhY3Q9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0Ci0gIFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VYb3I9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVhvcgotICBQeU51bWJlcl9JbmRleD1weXRob24zNC5QeU51bWJlcl9JbmRleAotICBQeU51bWJlcl9JbnZlcnQ9cHl0aG9uMzQuUHlOdW1iZXJfSW52ZXJ0Ci0gIFB5TnVtYmVyX0xvbmc9cHl0aG9uMzQuUHlOdW1iZXJfTG9uZwotICBQeU51bWJlcl9Mc2hpZnQ9cHl0aG9uMzQuUHlOdW1iZXJfTHNoaWZ0Ci0gIFB5TnVtYmVyX011bHRpcGx5PXB5dGhvbjM0LlB5TnVtYmVyX011bHRpcGx5Ci0gIFB5TnVtYmVyX05lZ2F0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX05lZ2F0aXZlCi0gIFB5TnVtYmVyX09yPXB5dGhvbjM0LlB5TnVtYmVyX09yCi0gIFB5TnVtYmVyX1Bvc2l0aXZlPXB5dGhvbjM0LlB5TnVtYmVyX1Bvc2l0aXZlCi0gIFB5TnVtYmVyX1Bvd2VyPXB5dGhvbjM0LlB5TnVtYmVyX1Bvd2VyCi0gIFB5TnVtYmVyX1JlbWFpbmRlcj1weXRob24zNC5QeU51bWJlcl9SZW1haW5kZXIKLSAgUHlOdW1iZXJfUnNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX1JzaGlmdAotICBQeU51bWJlcl9TdWJ0cmFjdD1weXRob24zNC5QeU51bWJlcl9TdWJ0cmFjdAotICBQeU51bWJlcl9Ub0Jhc2U9cHl0aG9uMzQuUHlOdW1iZXJfVG9CYXNlCi0gIFB5TnVtYmVyX1RydWVEaXZpZGU9cHl0aG9uMzQuUHlOdW1iZXJfVHJ1ZURpdmlkZQotICBQeU51bWJlcl9Yb3I9cHl0aG9uMzQuUHlOdW1iZXJfWG9yCi0gIFB5T1NfQWZ0ZXJGb3JrPXB5dGhvbjM0LlB5T1NfQWZ0ZXJGb3JrCi0gIFB5T1NfSW5pdEludGVycnVwdHM9cHl0aG9uMzQuUHlPU19Jbml0SW50ZXJydXB0cwotICBQeU9TX0lucHV0SG9vaz1weXRob24zNC5QeU9TX0lucHV0SG9vayBEQVRBCi0gIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQ9cHl0aG9uMzQuUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAotICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyPXB5dGhvbjM0LlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgREFUQQotICBQeU9TX2RvdWJsZV90b19zdHJpbmc9cHl0aG9uMzQuUHlPU19kb3VibGVfdG9fc3RyaW5nCi0gIFB5T1NfZ2V0c2lnPXB5dGhvbjM0LlB5T1NfZ2V0c2lnCi0gIFB5T1NfbXlzdHJpY21wPXB5dGhvbjM0LlB5T1NfbXlzdHJpY21wCi0gIFB5T1NfbXlzdHJuaWNtcD1weXRob24zNC5QeU9TX215c3RybmljbXAKLSAgUHlPU19zZXRzaWc9cHl0aG9uMzQuUHlPU19zZXRzaWcKLSAgUHlPU19zbnByaW50Zj1weXRob24zNC5QeU9TX3NucHJpbnRmCi0gIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZT1weXRob24zNC5QeU9TX3N0cmluZ190b19kb3VibGUKLSAgUHlPU19zdHJ0b2w9cHl0aG9uMzQuUHlPU19zdHJ0b2wKLSAgUHlPU19zdHJ0b3VsPXB5dGhvbjM0LlB5T1Nfc3RydG91bAotICBQeU9TX3ZzbnByaW50Zj1weXRob24zNC5QeU9TX3ZzbnByaW50ZgotICBQeU9iamVjdF9BU0NJST1weXRob24zNC5QeU9iamVjdF9BU0NJSQotICBQeU9iamVjdF9Bc0NoYXJCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNDaGFyQnVmZmVyCi0gIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I9cHl0aG9uMzQuUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcgotICBQeU9iamVjdF9Bc1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNSZWFkQnVmZmVyCi0gIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgotICBQeU9iamVjdF9CeXRlcz1weXRob24zNC5QeU9iamVjdF9CeXRlcwotICBQeU9iamVjdF9DYWxsPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGwKLSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbgotICBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKLSAgUHlPYmplY3RfQ2FsbE1ldGhvZD1weXRob24zNC5QeU9iamVjdF9DYWxsTWV0aG9kCi0gIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzPXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCi0gIFB5T2JqZWN0X0NhbGxPYmplY3Q9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE9iamVjdAotICBQeU9iamVjdF9DaGVja1JlYWRCdWZmZXI9cHl0aG9uMzQuUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyCi0gIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnM9cHl0aG9uMzQuUHlPYmplY3RfQ2xlYXJXZWFrUmVmcwotICBQeU9iamVjdF9EZWxJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0RlbEl0ZW0KLSAgUHlPYmplY3RfRGVsSXRlbVN0cmluZz1weXRob24zNC5QeU9iamVjdF9EZWxJdGVtU3RyaW5nCi0gIFB5T2JqZWN0X0Rpcj1weXRob24zNC5QeU9iamVjdF9EaXIKLSAgUHlPYmplY3RfRm9ybWF0PXB5dGhvbjM0LlB5T2JqZWN0X0Zvcm1hdAotICBQeU9iamVjdF9GcmVlPXB5dGhvbjM0LlB5T2JqZWN0X0ZyZWUKLSAgUHlPYmplY3RfR0NfRGVsPXB5dGhvbjM0LlB5T2JqZWN0X0dDX0RlbAotICBQeU9iamVjdF9HQ19UcmFjaz1weXRob24zNC5QeU9iamVjdF9HQ19UcmFjawotICBQeU9iamVjdF9HQ19VblRyYWNrPXB5dGhvbjM0LlB5T2JqZWN0X0dDX1VuVHJhY2sKLSAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY0dldEF0dHIKLSAgUHlPYmplY3RfR2VuZXJpY1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKLSAgUHlPYmplY3RfR2V0QXR0cj1weXRob24zNC5QeU9iamVjdF9HZXRBdHRyCi0gIFB5T2JqZWN0X0dldEF0dHJTdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfR2V0QXR0clN0cmluZwotICBQeU9iamVjdF9HZXRJdGVtPXB5dGhvbjM0LlB5T2JqZWN0X0dldEl0ZW0KLSAgUHlPYmplY3RfR2V0SXRlcj1weXRob24zNC5QeU9iamVjdF9HZXRJdGVyCi0gIFB5T2JqZWN0X0hhc0F0dHI9cHl0aG9uMzQuUHlPYmplY3RfSGFzQXR0cgotICBQeU9iamVjdF9IYXNBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLSAgUHlPYmplY3RfSGFzaD1weXRob24zNC5QeU9iamVjdF9IYXNoCi0gIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZD1weXRob24zNC5QeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQKLSAgUHlPYmplY3RfSW5pdD1weXRob24zNC5QeU9iamVjdF9Jbml0Ci0gIFB5T2JqZWN0X0luaXRWYXI9cHl0aG9uMzQuUHlPYmplY3RfSW5pdFZhcgotICBQeU9iamVjdF9Jc0luc3RhbmNlPXB5dGhvbjM0LlB5T2JqZWN0X0lzSW5zdGFuY2UKLSAgUHlPYmplY3RfSXNTdWJjbGFzcz1weXRob24zNC5QeU9iamVjdF9Jc1N1YmNsYXNzCi0gIFB5T2JqZWN0X0lzVHJ1ZT1weXRob24zNC5QeU9iamVjdF9Jc1RydWUKLSAgUHlPYmplY3RfTGVuZ3RoPXB5dGhvbjM0LlB5T2JqZWN0X0xlbmd0aAotICBQeU9iamVjdF9NYWxsb2M9cHl0aG9uMzQuUHlPYmplY3RfTWFsbG9jCi0gIFB5T2JqZWN0X05vdD1weXRob24zNC5QeU9iamVjdF9Ob3QKLSAgUHlPYmplY3RfUmVhbGxvYz1weXRob24zNC5QeU9iamVjdF9SZWFsbG9jCi0gIFB5T2JqZWN0X1JlcHI9cHl0aG9uMzQuUHlPYmplY3RfUmVwcgotICBQeU9iamVjdF9SaWNoQ29tcGFyZT1weXRob24zNC5QeU9iamVjdF9SaWNoQ29tcGFyZQotICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2w9cHl0aG9uMzQuUHlPYmplY3RfUmljaENvbXBhcmVCb29sCi0gIFB5T2JqZWN0X1NlbGZJdGVyPXB5dGhvbjM0LlB5T2JqZWN0X1NlbGZJdGVyCi0gIFB5T2JqZWN0X1NldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfU2V0QXR0cgotICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X1NldEF0dHJTdHJpbmcKLSAgUHlPYmplY3RfU2V0SXRlbT1weXRob24zNC5QeU9iamVjdF9TZXRJdGVtCi0gIFB5T2JqZWN0X1NpemU9cHl0aG9uMzQuUHlPYmplY3RfU2l6ZQotICBQeU9iamVjdF9TdHI9cHl0aG9uMzQuUHlPYmplY3RfU3RyCi0gIFB5T2JqZWN0X1R5cGU9cHl0aG9uMzQuUHlPYmplY3RfVHlwZSBEQVRBCi0gIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzPXB5dGhvbjM0LlB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCi0gIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3M9cHl0aG9uMzQuUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncwotICBQeVByb3BlcnR5X1R5cGU9cHl0aG9uMzQuUHlQcm9wZXJ0eV9UeXBlIERBVEEKLSAgUHlSYW5nZUl0ZXJfVHlwZT1weXRob24zNC5QeVJhbmdlSXRlcl9UeXBlIERBVEEKLSAgUHlSYW5nZV9UeXBlPXB5dGhvbjM0LlB5UmFuZ2VfVHlwZSBEQVRBCi0gIFB5UmV2ZXJzZWRfVHlwZT1weXRob24zNC5QeVJldmVyc2VkX1R5cGUgREFUQQotICBQeVNlcUl0ZXJfTmV3PXB5dGhvbjM0LlB5U2VxSXRlcl9OZXcKLSAgUHlTZXFJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXFJdGVyX1R5cGUgREFUQQotICBQeVNlcXVlbmNlX0NoZWNrPXB5dGhvbjM0LlB5U2VxdWVuY2VfQ2hlY2sKLSAgUHlTZXF1ZW5jZV9Db25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db25jYXQKLSAgUHlTZXF1ZW5jZV9Db250YWlucz1weXRob24zNC5QeVNlcXVlbmNlX0NvbnRhaW5zCi0gIFB5U2VxdWVuY2VfQ291bnQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db3VudAotICBQeVNlcXVlbmNlX0RlbEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxJdGVtCi0gIFB5U2VxdWVuY2VfRGVsU2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9EZWxTbGljZQotICBQeVNlcXVlbmNlX0Zhc3Q9cHl0aG9uMzQuUHlTZXF1ZW5jZV9GYXN0Ci0gIFB5U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVNlcXVlbmNlX0dldEl0ZW0KLSAgUHlTZXF1ZW5jZV9HZXRTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX0dldFNsaWNlCi0gIFB5U2VxdWVuY2VfSW49cHl0aG9uMzQuUHlTZXF1ZW5jZV9JbgotICBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0Ci0gIFB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdD1weXRob24zNC5QeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQKLSAgUHlTZXF1ZW5jZV9JbmRleD1weXRob24zNC5QeVNlcXVlbmNlX0luZGV4Ci0gIFB5U2VxdWVuY2VfTGVuZ3RoPXB5dGhvbjM0LlB5U2VxdWVuY2VfTGVuZ3RoCi0gIFB5U2VxdWVuY2VfTGlzdD1weXRob24zNC5QeVNlcXVlbmNlX0xpc3QKLSAgUHlTZXF1ZW5jZV9SZXBlYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9SZXBlYXQKLSAgUHlTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0SXRlbQotICBQeVNlcXVlbmNlX1NldFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2V0U2xpY2UKLSAgUHlTZXF1ZW5jZV9TaXplPXB5dGhvbjM0LlB5U2VxdWVuY2VfU2l6ZQotICBQeVNlcXVlbmNlX1R1cGxlPXB5dGhvbjM0LlB5U2VxdWVuY2VfVHVwbGUKLSAgUHlTZXRJdGVyX1R5cGU9cHl0aG9uMzQuUHlTZXRJdGVyX1R5cGUgREFUQQotICBQeVNldF9BZGQ9cHl0aG9uMzQuUHlTZXRfQWRkCi0gIFB5U2V0X0NsZWFyPXB5dGhvbjM0LlB5U2V0X0NsZWFyCi0gIFB5U2V0X0NvbnRhaW5zPXB5dGhvbjM0LlB5U2V0X0NvbnRhaW5zCi0gIFB5U2V0X0Rpc2NhcmQ9cHl0aG9uMzQuUHlTZXRfRGlzY2FyZAotICBQeVNldF9OZXc9cHl0aG9uMzQuUHlTZXRfTmV3Ci0gIFB5U2V0X1BvcD1weXRob24zNC5QeVNldF9Qb3AKLSAgUHlTZXRfU2l6ZT1weXRob24zNC5QeVNldF9TaXplCi0gIFB5U2V0X1R5cGU9cHl0aG9uMzQuUHlTZXRfVHlwZSBEQVRBCi0gIFB5U2xpY2VfR2V0SW5kaWNlcz1weXRob24zNC5QeVNsaWNlX0dldEluZGljZXMKLSAgUHlTbGljZV9HZXRJbmRpY2VzRXg9cHl0aG9uMzQuUHlTbGljZV9HZXRJbmRpY2VzRXgKLSAgUHlTbGljZV9OZXc9cHl0aG9uMzQuUHlTbGljZV9OZXcKLSAgUHlTbGljZV9UeXBlPXB5dGhvbjM0LlB5U2xpY2VfVHlwZSBEQVRBCi0gIFB5U29ydFdyYXBwZXJfVHlwZT1weXRob24zNC5QeVNvcnRXcmFwcGVyX1R5cGUgREFUQQotICBQeVN0YXRlX0ZpbmRNb2R1bGU9cHl0aG9uMzQuUHlTdGF0ZV9GaW5kTW9kdWxlCi0gIFB5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfQWRkTW9kdWxlCi0gIFB5U3RhdGVfUmVtb3ZlTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfUmVtb3ZlTW9kdWxlCi0gIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXc9cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZQotICBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtCi0gIFB5U3VwZXJfVHlwZT1weXRob24zNC5QeVN1cGVyX1R5cGUgREFUQQotICBQeVN5c19BZGRXYXJuT3B0aW9uPXB5dGhvbjM0LlB5U3lzX0FkZFdhcm5PcHRpb24KLSAgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGU9cHl0aG9uMzQuUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUKLSAgUHlTeXNfRm9ybWF0U3RkZXJyPXB5dGhvbjM0LlB5U3lzX0Zvcm1hdFN0ZGVycgotICBQeVN5c19Gb3JtYXRTdGRvdXQ9cHl0aG9uMzQuUHlTeXNfRm9ybWF0U3Rkb3V0Ci0gIFB5U3lzX0dldE9iamVjdD1weXRob24zNC5QeVN5c19HZXRPYmplY3QKLSAgUHlTeXNfSGFzV2Fybk9wdGlvbnM9cHl0aG9uMzQuUHlTeXNfSGFzV2Fybk9wdGlvbnMKLSAgUHlTeXNfUmVzZXRXYXJuT3B0aW9ucz1weXRob24zNC5QeVN5c19SZXNldFdhcm5PcHRpb25zCi0gIFB5U3lzX1NldEFyZ3Y9cHl0aG9uMzQuUHlTeXNfU2V0QXJndgotICBQeVN5c19TZXRBcmd2RXg9cHl0aG9uMzQuUHlTeXNfU2V0QXJndkV4Ci0gIFB5U3lzX1NldE9iamVjdD1weXRob24zNC5QeVN5c19TZXRPYmplY3QKLSAgUHlTeXNfU2V0UGF0aD1weXRob24zNC5QeVN5c19TZXRQYXRoCi0gIFB5U3lzX1dyaXRlU3RkZXJyPXB5dGhvbjM0LlB5U3lzX1dyaXRlU3RkZXJyCi0gIFB5U3lzX1dyaXRlU3Rkb3V0PXB5dGhvbjM0LlB5U3lzX1dyaXRlU3Rkb3V0Ci0gIFB5VGhyZWFkU3RhdGVfQ2xlYXI9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9DbGVhcgotICBQeVRocmVhZFN0YXRlX0RlbGV0ZT1weXRob24zNC5QeVRocmVhZFN0YXRlX0RlbGV0ZQotICBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQ9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50Ci0gIFB5VGhyZWFkU3RhdGVfR2V0PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfR2V0Ci0gIFB5VGhyZWFkU3RhdGVfR2V0RGljdD1weXRob24zNC5QeVRocmVhZFN0YXRlX0dldERpY3QKLSAgUHlUaHJlYWRTdGF0ZV9OZXc9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9OZXcKLSAgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yz1weXRob24zNC5QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCi0gIFB5VGhyZWFkU3RhdGVfU3dhcD1weXRob24zNC5QeVRocmVhZFN0YXRlX1N3YXAKLSAgUHlUcmFjZUJhY2tfSGVyZT1weXRob24zNC5QeVRyYWNlQmFja19IZXJlCi0gIFB5VHJhY2VCYWNrX1ByaW50PXB5dGhvbjM0LlB5VHJhY2VCYWNrX1ByaW50Ci0gIFB5VHJhY2VCYWNrX1R5cGU9cHl0aG9uMzQuUHlUcmFjZUJhY2tfVHlwZSBEQVRBCi0gIFB5VHVwbGVJdGVyX1R5cGU9cHl0aG9uMzQuUHlUdXBsZUl0ZXJfVHlwZSBEQVRBCi0gIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdD1weXRob24zNC5QeVR1cGxlX0NsZWFyRnJlZUxpc3QKLSAgUHlUdXBsZV9HZXRJdGVtPXB5dGhvbjM0LlB5VHVwbGVfR2V0SXRlbQotICBQeVR1cGxlX0dldFNsaWNlPXB5dGhvbjM0LlB5VHVwbGVfR2V0U2xpY2UKLSAgUHlUdXBsZV9OZXc9cHl0aG9uMzQuUHlUdXBsZV9OZXcKLSAgUHlUdXBsZV9QYWNrPXB5dGhvbjM0LlB5VHVwbGVfUGFjawotICBQeVR1cGxlX1NldEl0ZW09cHl0aG9uMzQuUHlUdXBsZV9TZXRJdGVtCi0gIFB5VHVwbGVfU2l6ZT1weXRob24zNC5QeVR1cGxlX1NpemUKLSAgUHlUdXBsZV9UeXBlPXB5dGhvbjM0LlB5VHVwbGVfVHlwZSBEQVRBCi0gIFB5VHlwZV9DbGVhckNhY2hlPXB5dGhvbjM0LlB5VHlwZV9DbGVhckNhY2hlCi0gIFB5VHlwZV9Gcm9tU3BlYz1weXRob24zNC5QeVR5cGVfRnJvbVNwZWMKLSAgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzPXB5dGhvbjM0LlB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcwotICBQeVR5cGVfR2VuZXJpY0FsbG9jPXB5dGhvbjM0LlB5VHlwZV9HZW5lcmljQWxsb2MKLSAgUHlUeXBlX0dlbmVyaWNOZXc9cHl0aG9uMzQuUHlUeXBlX0dlbmVyaWNOZXcKLSAgUHlUeXBlX0dldEZsYWdzPXB5dGhvbjM0LlB5VHlwZV9HZXRGbGFncwotICBQeVR5cGVfR2V0U2xvdD1weXRob24zNC5QeVR5cGVfR2V0U2xvdAotICBQeVR5cGVfSXNTdWJ0eXBlPXB5dGhvbjM0LlB5VHlwZV9Jc1N1YnR5cGUKLSAgUHlUeXBlX01vZGlmaWVkPXB5dGhvbjM0LlB5VHlwZV9Nb2RpZmllZAotICBQeVR5cGVfUmVhZHk9cHl0aG9uMzQuUHlUeXBlX1JlYWR5Ci0gIFB5VHlwZV9UeXBlPXB5dGhvbjM0LlB5VHlwZV9UeXBlIERBVEEKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZQotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZwotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZUl0ZXJfVHlwZT1weXRob24zNC5QeVVuaWNvZGVJdGVyX1R5cGUgREFUQQotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlX0FwcGVuZD1weXRob24zNC5QeVVuaWNvZGVfQXBwZW5kCi0gIFB5VW5pY29kZV9BcHBlbmRBbmREZWw9cHl0aG9uMzQuUHlVbmljb2RlX0FwcGVuZEFuZERlbAotICBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNBU0NJSVN0cmluZwotICBQeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmcKLSAgUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0Ci0gIFB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlCi0gIFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdAotICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcKLSAgUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGUKLSAgUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0xhdGluMVN0cmluZwotICBQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMTZTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVVRGMTZTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGMzJTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVVRGMzJTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGOFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNVVEY4U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZwotICBQeVVuaWNvZGVfQXNXaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVfQXNXaWRlQ2hhcgotICBQeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdD1weXRob24zNC5QeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdAotICBQeVVuaWNvZGVfQ29tcGFyZT1weXRob24zNC5QeVVuaWNvZGVfQ29tcGFyZQotICBQeVVuaWNvZGVfQ29uY2F0PXB5dGhvbjM0LlB5VW5pY29kZV9Db25jYXQKLSAgUHlVbmljb2RlX0NvbnRhaW5zPXB5dGhvbjM0LlB5VW5pY29kZV9Db250YWlucwotICBQeVVuaWNvZGVfQ291bnQ9cHl0aG9uMzQuUHlVbmljb2RlX0NvdW50Ci0gIFB5VW5pY29kZV9EZWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZQotICBQeVVuaWNvZGVfRGVjb2RlQVNDSUk9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZUFTQ0lJCi0gIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVDaGFybWFwCi0gIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZT1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZQotICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVMYXRpbjEKLSAgUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKLSAgUHlVbmljb2RlX0RlY29kZVVURjE2PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEYxNgotICBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVVRGMzI9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjMyCi0gIFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY4PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY4Ci0gIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZT1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZQotICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXI9cHl0aG9uMzQuUHlVbmljb2RlX0ZTQ29udmVydGVyCi0gIFB5VW5pY29kZV9GU0RlY29kZXI9cHl0aG9uMzQuUHlVbmljb2RlX0ZTRGVjb2RlcgotICBQeVVuaWNvZGVfRmluZD1weXRob24zNC5QeVVuaWNvZGVfRmluZAotICBQeVVuaWNvZGVfRm9ybWF0PXB5dGhvbjM0LlB5VW5pY29kZV9Gb3JtYXQKLSAgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdD1weXRob24zNC5QeVVuaWNvZGVfRnJvbUZvcm1hdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdFY9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21Gb3JtYXRWCi0gIFB5VW5pY29kZV9Gcm9tT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tT2JqZWN0Ci0gIFB5VW5pY29kZV9Gcm9tT3JkaW5hbD1weXRob24zNC5QeVVuaWNvZGVfRnJvbU9yZGluYWwKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21TdHJpbmcKLSAgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tV2lkZUNoYXIKLSAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nCi0gIFB5VW5pY29kZV9HZXRTaXplPXB5dGhvbjM0LlB5VW5pY29kZV9HZXRTaXplCi0gIFB5VW5pY29kZV9Jc0lkZW50aWZpZXI9cHl0aG9uMzQuUHlVbmljb2RlX0lzSWRlbnRpZmllcgotICBQeVVuaWNvZGVfSm9pbj1weXRob24zNC5QeVVuaWNvZGVfSm9pbgotICBQeVVuaWNvZGVfUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZV9QYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JQYXJ0aXRpb249cHl0aG9uMzQuUHlVbmljb2RlX1JQYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JTcGxpdD1weXRob24zNC5QeVVuaWNvZGVfUlNwbGl0Ci0gIFB5VW5pY29kZV9SZXBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZV9SZXBsYWNlCi0gIFB5VW5pY29kZV9SZXNpemU9cHl0aG9uMzQuUHlVbmljb2RlX1Jlc2l6ZQotICBQeVVuaWNvZGVfUmljaENvbXBhcmU9cHl0aG9uMzQuUHlVbmljb2RlX1JpY2hDb21wYXJlCi0gIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZwotICBQeVVuaWNvZGVfU3BsaXQ9cHl0aG9uMzQuUHlVbmljb2RlX1NwbGl0Ci0gIFB5VW5pY29kZV9TcGxpdGxpbmVzPXB5dGhvbjM0LlB5VW5pY29kZV9TcGxpdGxpbmVzCi0gIFB5VW5pY29kZV9UYWlsbWF0Y2g9cHl0aG9uMzQuUHlVbmljb2RlX1RhaWxtYXRjaAotICBQeVVuaWNvZGVfVHJhbnNsYXRlPXB5dGhvbjM0LlB5VW5pY29kZV9UcmFuc2xhdGUKLSAgUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXA9cHl0aG9uMzQuUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKLSAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0RlY29kZVVURjc9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjcKLSAgUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsCi0gIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZwotICBQeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWw9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkltbW9ydGFsCi0gIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5JblBsYWNlCi0gIFB5VW5pY29kZV9UeXBlPXB5dGhvbjM0LlB5VW5pY29kZV9UeXBlIERBVEEKLSAgUHlXZWFrcmVmX0dldE9iamVjdD1weXRob24zNC5QeVdlYWtyZWZfR2V0T2JqZWN0IERBVEEKLSAgUHlXZWFrcmVmX05ld1Byb3h5PXB5dGhvbjM0LlB5V2Vha3JlZl9OZXdQcm94eQotICBQeVdlYWtyZWZfTmV3UmVmPXB5dGhvbjM0LlB5V2Vha3JlZl9OZXdSZWYKLSAgUHlXcmFwcGVyRGVzY3JfVHlwZT1weXRob24zNC5QeVdyYXBwZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlXcmFwcGVyX05ldz1weXRob24zNC5QeVdyYXBwZXJfTmV3Ci0gIFB5WmlwX1R5cGU9cHl0aG9uMzQuUHlaaXBfVHlwZSBEQVRBCi0gIFB5X0FkZFBlbmRpbmdDYWxsPXB5dGhvbjM0LlB5X0FkZFBlbmRpbmdDYWxsCi0gIFB5X0F0RXhpdD1weXRob24zNC5QeV9BdEV4aXQKLSAgUHlfQnVpbGRWYWx1ZT1weXRob24zNC5QeV9CdWlsZFZhbHVlCi0gIFB5X0NvbXBpbGVTdHJpbmc9cHl0aG9uMzQuUHlfQ29tcGlsZVN0cmluZwotICBQeV9EZWNSZWY9cHl0aG9uMzQuUHlfRGVjUmVmCi0gIFB5X0VuZEludGVycHJldGVyPXB5dGhvbjM0LlB5X0VuZEludGVycHJldGVyCi0gIFB5X0V4aXQ9cHl0aG9uMzQuUHlfRXhpdAotICBQeV9GYXRhbEVycm9yPXB5dGhvbjM0LlB5X0ZhdGFsRXJyb3IKLSAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfRmluYWxpemU9cHl0aG9uMzQuUHlfRmluYWxpemUKLSAgUHlfR2V0QnVpbGRJbmZvPXB5dGhvbjM0LlB5X0dldEJ1aWxkSW5mbwotICBQeV9HZXRDb21waWxlcj1weXRob24zNC5QeV9HZXRDb21waWxlcgotICBQeV9HZXRDb3B5cmlnaHQ9cHl0aG9uMzQuUHlfR2V0Q29weXJpZ2h0Ci0gIFB5X0dldEV4ZWNQcmVmaXg9cHl0aG9uMzQuUHlfR2V0RXhlY1ByZWZpeAotICBQeV9HZXRQYXRoPXB5dGhvbjM0LlB5X0dldFBhdGgKLSAgUHlfR2V0UGxhdGZvcm09cHl0aG9uMzQuUHlfR2V0UGxhdGZvcm0KLSAgUHlfR2V0UHJlZml4PXB5dGhvbjM0LlB5X0dldFByZWZpeAotICBQeV9HZXRQcm9ncmFtRnVsbFBhdGg9cHl0aG9uMzQuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCi0gIFB5X0dldFByb2dyYW1OYW1lPXB5dGhvbjM0LlB5X0dldFByb2dyYW1OYW1lCi0gIFB5X0dldFB5dGhvbkhvbWU9cHl0aG9uMzQuUHlfR2V0UHl0aG9uSG9tZQotICBQeV9HZXRSZWN1cnNpb25MaW1pdD1weXRob24zNC5QeV9HZXRSZWN1cnNpb25MaW1pdAotICBQeV9HZXRWZXJzaW9uPXB5dGhvbjM0LlB5X0dldFZlcnNpb24KLSAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKLSAgUHlfSW5jUmVmPXB5dGhvbjM0LlB5X0luY1JlZgotICBQeV9Jbml0aWFsaXplPXB5dGhvbjM0LlB5X0luaXRpYWxpemUKLSAgUHlfSW5pdGlhbGl6ZUV4PXB5dGhvbjM0LlB5X0luaXRpYWxpemVFeAotICBQeV9Jc0luaXRpYWxpemVkPXB5dGhvbjM0LlB5X0lzSW5pdGlhbGl6ZWQKLSAgUHlfTWFpbj1weXRob24zNC5QeV9NYWluCi0gIFB5X01ha2VQZW5kaW5nQ2FsbHM9cHl0aG9uMzQuUHlfTWFrZVBlbmRpbmdDYWxscwotICBQeV9OZXdJbnRlcnByZXRlcj1weXRob24zNC5QeV9OZXdJbnRlcnByZXRlcgotICBQeV9SZXByRW50ZXI9cHl0aG9uMzQuUHlfUmVwckVudGVyCi0gIFB5X1JlcHJMZWF2ZT1weXRob24zNC5QeV9SZXByTGVhdmUKLSAgUHlfU2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzQuUHlfU2V0UHJvZ3JhbU5hbWUKLSAgUHlfU2V0UHl0aG9uSG9tZT1weXRob24zNC5QeV9TZXRQeXRob25Ib21lCi0gIFB5X1NldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0LlB5X1NldFJlY3Vyc2lvbkxpbWl0Ci0gIFB5X1N5bXRhYmxlU3RyaW5nPXB5dGhvbjM0LlB5X1N5bXRhYmxlU3RyaW5nCi0gIFB5X1ZhQnVpbGRWYWx1ZT1weXRob24zNC5QeV9WYUJ1aWxkVmFsdWUKLSAgX1B5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQ9cHl0aG9uMzQuX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVAotICBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVD1weXRob24zNC5fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAotICBfUHlPYmplY3RfR0NfTWFsbG9jPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19NYWxsb2MKLSAgX1B5T2JqZWN0X0dDX05ldz1weXRob24zNC5fUHlPYmplY3RfR0NfTmV3Ci0gIF9QeU9iamVjdF9HQ19OZXdWYXI9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX05ld1ZhcgotICBfUHlPYmplY3RfR0NfUmVzaXplPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19SZXNpemUKLSAgX1B5T2JqZWN0X05ldz1weXRob24zNC5fUHlPYmplY3RfTmV3Ci0gIF9QeU9iamVjdF9OZXdWYXI9cHl0aG9uMzQuX1B5T2JqZWN0X05ld1ZhcgotICBfUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzQuX1B5U3RhdGVfQWRkTW9kdWxlCi0gIF9QeVRocmVhZFN0YXRlX0luaXQ9cHl0aG9uMzQuX1B5VGhyZWFkU3RhdGVfSW5pdAotICBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYz1weXRob24zNC5fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYwotICBfUHlUcmFzaF9kZWxldGVfbGF0ZXI9cHl0aG9uMzQuX1B5VHJhc2hfZGVsZXRlX2xhdGVyIERBVEEKLSAgX1B5VHJhc2hfZGVsZXRlX25lc3Rpbmc9cHl0aG9uMzQuX1B5VHJhc2hfZGVsZXRlX25lc3RpbmcgREFUQQotICBfUHlUcmFzaF9kZXBvc2l0X29iamVjdD1weXRob24zNC5fUHlUcmFzaF9kZXBvc2l0X29iamVjdAotICBfUHlUcmFzaF9kZXN0cm95X2NoYWluPXB5dGhvbjM0Ll9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KLSAgX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZT1weXRob24zNC5fUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIERBVEEKLSAgX1B5V2Vha3JlZl9Qcm94eVR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9Qcm94eVR5cGUgREFUQQotICBfUHlXZWFrcmVmX1JlZlR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9SZWZUeXBlIERBVEEKLSAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKLSAgX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgREFUQQotICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsPXB5dGhvbjM0Ll9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwKLSAgX1B5X0RlYWxsb2M9cHl0aG9uMzQuX1B5X0RlYWxsb2MKLSAgX1B5X0VsbGlwc2lzT2JqZWN0PXB5dGhvbjM0Ll9QeV9FbGxpcHNpc09iamVjdCBEQVRBCi0gIF9QeV9GYWxzZVN0cnVjdD1weXRob24zNC5fUHlfRmFsc2VTdHJ1Y3QgREFUQQotICBfUHlfTm9uZVN0cnVjdD1weXRob24zNC5fUHlfTm9uZVN0cnVjdCBEQVRBCi0gIF9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdD1weXRob24zNC5fUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QgREFUQQotICBfUHlfU3dhcHBlZE9wPXB5dGhvbjM0Ll9QeV9Td2FwcGVkT3AgREFUQQotICBfUHlfVHJ1ZVN0cnVjdD1weXRob24zNC5fUHlfVHJ1ZVN0cnVjdCBEQVRBCi0gIF9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAotICBfUHlBcmdfUGFyc2VfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCi0gIF9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotICBfUHlBcmdfVmFQYXJzZV9TaXplVD1weXRob24zNC5fUHlBcmdfVmFQYXJzZV9TaXplVAotICBfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCi0gIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9CdWlsZFZhbHVlX1NpemVUCisgIFB5QXJnX1BhcnNlPXB5dGhvbjM1LlB5QXJnX1BhcnNlCisgIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzUuUHlBcmdfUGFyc2VUdXBsZQorICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzUuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCisgIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjM1LlB5QXJnX1VucGFja1R1cGxlCisgIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzUuUHlBcmdfVmFQYXJzZQorICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zNS5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzUuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCisgIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjM1LlB5QmFzZU9iamVjdF9UeXBlIERBVEEKKyAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjM1LlB5Qm9vbF9Gcm9tTG9uZworICBQeUJvb2xfVHlwZT1weXRob24zNS5QeUJvb2xfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjM1LlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzUuUHlCeXRlQXJyYXlfQXNTdHJpbmcKKyAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjM1LlB5Qnl0ZUFycmF5X0NvbmNhdAorICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjM1LlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKKyAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzUuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjM1LlB5Qnl0ZUFycmF5X1Jlc2l6ZQorICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjM1LlB5Qnl0ZUFycmF5X1NpemUKKyAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zNS5QeUJ5dGVBcnJheV9UeXBlIERBVEEKKyAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zNS5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zNS5QeUJ5dGVzX0FzU3RyaW5nCisgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjM1LlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjM1LlB5Qnl0ZXNfQ29uY2F0CisgIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjM1LlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCisgIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjM1LlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCisgIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zNS5QeUJ5dGVzX0Zyb21Gb3JtYXQKKyAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zNS5QeUJ5dGVzX0Zyb21Gb3JtYXRWCisgIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zNS5QeUJ5dGVzX0Zyb21PYmplY3QKKyAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjM1LlB5Qnl0ZXNfRnJvbVN0cmluZworICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM1LlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlc19SZXByPXB5dGhvbjM1LlB5Qnl0ZXNfUmVwcgorICBQeUJ5dGVzX1NpemU9cHl0aG9uMzUuUHlCeXRlc19TaXplCisgIFB5Qnl0ZXNfVHlwZT1weXRob24zNS5QeUJ5dGVzX1R5cGUgREFUQQorICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjM1LlB5Q0Z1bmN0aW9uX0NhbGwKKyAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zNS5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0CisgIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjM1LlB5Q0Z1bmN0aW9uX0dldEZsYWdzCisgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjM1LlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCisgIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzUuUHlDRnVuY3Rpb25fR2V0U2VsZgorICBQeUNGdW5jdGlvbl9OZXc9cHl0aG9uMzUuUHlDRnVuY3Rpb25fTmV3CisgIFB5Q0Z1bmN0aW9uX05ld0V4PXB5dGhvbjM1LlB5Q0Z1bmN0aW9uX05ld0V4CisgIFB5Q0Z1bmN0aW9uX1R5cGU9cHl0aG9uMzUuUHlDRnVuY3Rpb25fVHlwZSBEQVRBCisgIFB5Q2FsbEl0ZXJfTmV3PXB5dGhvbjM1LlB5Q2FsbEl0ZXJfTmV3CisgIFB5Q2FsbEl0ZXJfVHlwZT1weXRob24zNS5QeUNhbGxJdGVyX1R5cGUgREFUQQorICBQeUNhbGxhYmxlX0NoZWNrPXB5dGhvbjM1LlB5Q2FsbGFibGVfQ2hlY2sKKyAgUHlDYXBzdWxlX0dldENvbnRleHQ9cHl0aG9uMzUuUHlDYXBzdWxlX0dldENvbnRleHQKKyAgUHlDYXBzdWxlX0dldERlc3RydWN0b3I9cHl0aG9uMzUuUHlDYXBzdWxlX0dldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX0dldE5hbWU9cHl0aG9uMzUuUHlDYXBzdWxlX0dldE5hbWUKKyAgUHlDYXBzdWxlX0dldFBvaW50ZXI9cHl0aG9uMzUuUHlDYXBzdWxlX0dldFBvaW50ZXIKKyAgUHlDYXBzdWxlX0ltcG9ydD1weXRob24zNS5QeUNhcHN1bGVfSW1wb3J0CisgIFB5Q2Fwc3VsZV9Jc1ZhbGlkPXB5dGhvbjM1LlB5Q2Fwc3VsZV9Jc1ZhbGlkCisgIFB5Q2Fwc3VsZV9OZXc9cHl0aG9uMzUuUHlDYXBzdWxlX05ldworICBQeUNhcHN1bGVfU2V0Q29udGV4dD1weXRob24zNS5QeUNhcHN1bGVfU2V0Q29udGV4dAorICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3Rvcj1weXRob24zNS5QeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgorICBQeUNhcHN1bGVfU2V0TmFtZT1weXRob24zNS5QeUNhcHN1bGVfU2V0TmFtZQorICBQeUNhcHN1bGVfU2V0UG9pbnRlcj1weXRob24zNS5QeUNhcHN1bGVfU2V0UG9pbnRlcgorICBQeUNhcHN1bGVfVHlwZT1weXRob24zNS5QeUNhcHN1bGVfVHlwZSBEQVRBCisgIFB5Q2xhc3NNZXRob2REZXNjcl9UeXBlPXB5dGhvbjM1LlB5Q2xhc3NNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzPXB5dGhvbjM1LlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycworICBQeUNvZGVjX0RlY29kZT1weXRob24zNS5QeUNvZGVjX0RlY29kZQorICBQeUNvZGVjX0RlY29kZXI9cHl0aG9uMzUuUHlDb2RlY19EZWNvZGVyCisgIFB5Q29kZWNfRW5jb2RlPXB5dGhvbjM1LlB5Q29kZWNfRW5jb2RlCisgIFB5Q29kZWNfRW5jb2Rlcj1weXRob24zNS5QeUNvZGVjX0VuY29kZXIKKyAgUHlDb2RlY19JZ25vcmVFcnJvcnM9cHl0aG9uMzUuUHlDb2RlY19JZ25vcmVFcnJvcnMKKyAgUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXI9cHl0aG9uMzUuUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIKKyAgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXI9cHl0aG9uMzUuUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKKyAgUHlDb2RlY19Lbm93bkVuY29kaW5nPXB5dGhvbjM1LlB5Q29kZWNfS25vd25FbmNvZGluZworICBQeUNvZGVjX0xvb2t1cEVycm9yPXB5dGhvbjM1LlB5Q29kZWNfTG9va3VwRXJyb3IKKyAgUHlDb2RlY19SZWdpc3Rlcj1weXRob24zNS5QeUNvZGVjX1JlZ2lzdGVyCisgIFB5Q29kZWNfUmVnaXN0ZXJFcnJvcj1weXRob24zNS5QeUNvZGVjX1JlZ2lzdGVyRXJyb3IKKyAgUHlDb2RlY19SZXBsYWNlRXJyb3JzPXB5dGhvbjM1LlB5Q29kZWNfUmVwbGFjZUVycm9ycworICBQeUNvZGVjX1N0cmVhbVJlYWRlcj1weXRob24zNS5QeUNvZGVjX1N0cmVhbVJlYWRlcgorICBQeUNvZGVjX1N0cmVhbVdyaXRlcj1weXRob24zNS5QeUNvZGVjX1N0cmVhbVdyaXRlcgorICBQeUNvZGVjX1N0cmljdEVycm9ycz1weXRob24zNS5QeUNvZGVjX1N0cmljdEVycm9ycworICBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzPXB5dGhvbjM1LlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKKyAgUHlDb21wbGV4X0Zyb21Eb3VibGVzPXB5dGhvbjM1LlB5Q29tcGxleF9Gcm9tRG91YmxlcworICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlPXB5dGhvbjM1LlB5Q29tcGxleF9JbWFnQXNEb3VibGUKKyAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZT1weXRob24zNS5QeUNvbXBsZXhfUmVhbEFzRG91YmxlCisgIFB5Q29tcGxleF9UeXBlPXB5dGhvbjM1LlB5Q29tcGxleF9UeXBlIERBVEEKKyAgUHlEZXNjcl9OZXdDbGFzc01ldGhvZD1weXRob24zNS5QeURlc2NyX05ld0NsYXNzTWV0aG9kCisgIFB5RGVzY3JfTmV3R2V0U2V0PXB5dGhvbjM1LlB5RGVzY3JfTmV3R2V0U2V0CisgIFB5RGVzY3JfTmV3TWVtYmVyPXB5dGhvbjM1LlB5RGVzY3JfTmV3TWVtYmVyCisgIFB5RGVzY3JfTmV3TWV0aG9kPXB5dGhvbjM1LlB5RGVzY3JfTmV3TWV0aG9kCisgIFB5RGljdEl0ZW1zX1R5cGU9cHl0aG9uMzUuUHlEaWN0SXRlbXNfVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJJdGVtX1R5cGU9cHl0aG9uMzUuUHlEaWN0SXRlckl0ZW1fVHlwZSBEQVRBCisgIFB5RGljdEl0ZXJLZXlfVHlwZT1weXRob24zNS5QeURpY3RJdGVyS2V5X1R5cGUgREFUQQorICBQeURpY3RJdGVyVmFsdWVfVHlwZT1weXRob24zNS5QeURpY3RJdGVyVmFsdWVfVHlwZSBEQVRBCisgIFB5RGljdEtleXNfVHlwZT1weXRob24zNS5QeURpY3RLZXlzX1R5cGUgREFUQQorICBQeURpY3RQcm94eV9OZXc9cHl0aG9uMzUuUHlEaWN0UHJveHlfTmV3CisgIFB5RGljdFByb3h5X1R5cGU9cHl0aG9uMzUuUHlEaWN0UHJveHlfVHlwZSBEQVRBCisgIFB5RGljdFZhbHVlc19UeXBlPXB5dGhvbjM1LlB5RGljdFZhbHVlc19UeXBlIERBVEEKKyAgUHlEaWN0X0NsZWFyPXB5dGhvbjM1LlB5RGljdF9DbGVhcgorICBQeURpY3RfQ29udGFpbnM9cHl0aG9uMzUuUHlEaWN0X0NvbnRhaW5zCisgIFB5RGljdF9Db3B5PXB5dGhvbjM1LlB5RGljdF9Db3B5CisgIFB5RGljdF9EZWxJdGVtPXB5dGhvbjM1LlB5RGljdF9EZWxJdGVtCisgIFB5RGljdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjM1LlB5RGljdF9EZWxJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtPXB5dGhvbjM1LlB5RGljdF9HZXRJdGVtCisgIFB5RGljdF9HZXRJdGVtU3RyaW5nPXB5dGhvbjM1LlB5RGljdF9HZXRJdGVtU3RyaW5nCisgIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yPXB5dGhvbjM1LlB5RGljdF9HZXRJdGVtV2l0aEVycm9yCisgIFB5RGljdF9JdGVtcz1weXRob24zNS5QeURpY3RfSXRlbXMKKyAgUHlEaWN0X0tleXM9cHl0aG9uMzUuUHlEaWN0X0tleXMKKyAgUHlEaWN0X01lcmdlPXB5dGhvbjM1LlB5RGljdF9NZXJnZQorICBQeURpY3RfTWVyZ2VGcm9tU2VxMj1weXRob24zNS5QeURpY3RfTWVyZ2VGcm9tU2VxMgorICBQeURpY3RfTmV3PXB5dGhvbjM1LlB5RGljdF9OZXcKKyAgUHlEaWN0X05leHQ9cHl0aG9uMzUuUHlEaWN0X05leHQKKyAgUHlEaWN0X1NldEl0ZW09cHl0aG9uMzUuUHlEaWN0X1NldEl0ZW0KKyAgUHlEaWN0X1NldEl0ZW1TdHJpbmc9cHl0aG9uMzUuUHlEaWN0X1NldEl0ZW1TdHJpbmcKKyAgUHlEaWN0X1NpemU9cHl0aG9uMzUuUHlEaWN0X1NpemUKKyAgUHlEaWN0X1R5cGU9cHl0aG9uMzUuUHlEaWN0X1R5cGUgREFUQQorICBQeURpY3RfVXBkYXRlPXB5dGhvbjM1LlB5RGljdF9VcGRhdGUKKyAgUHlEaWN0X1ZhbHVlcz1weXRob24zNS5QeURpY3RfVmFsdWVzCisgIFB5RWxsaXBzaXNfVHlwZT1weXRob24zNS5QeUVsbGlwc2lzX1R5cGUgREFUQQorICBQeUVudW1fVHlwZT1weXRob24zNS5QeUVudW1fVHlwZSBEQVRBCisgIFB5RXJyX0JhZEFyZ3VtZW50PXB5dGhvbjM1LlB5RXJyX0JhZEFyZ3VtZW50CisgIFB5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNS5QeUVycl9CYWRJbnRlcm5hbENhbGwKKyAgUHlFcnJfQ2hlY2tTaWduYWxzPXB5dGhvbjM1LlB5RXJyX0NoZWNrU2lnbmFscworICBQeUVycl9DbGVhcj1weXRob24zNS5QeUVycl9DbGVhcgorICBQeUVycl9EaXNwbGF5PXB5dGhvbjM1LlB5RXJyX0Rpc3BsYXkKKyAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNS5QeUVycl9FeGNlcHRpb25NYXRjaGVzCisgIFB5RXJyX0ZldGNoPXB5dGhvbjM1LlB5RXJyX0ZldGNoCisgIFB5RXJyX0Zvcm1hdD1weXRob24zNS5QeUVycl9Gb3JtYXQKKyAgUHlFcnJfRm9ybWF0Vj1weXRob24zNS5QeUVycl9Gb3JtYXRWCisgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNS5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKKyAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjM1LlB5RXJyX05ld0V4Y2VwdGlvbgorICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjM1LlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKKyAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzUuUHlFcnJfTm9NZW1vcnkKKyAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjM1LlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgorICBQeUVycl9PY2N1cnJlZD1weXRob24zNS5QeUVycl9PY2N1cnJlZAorICBQeUVycl9QcmludD1weXRob24zNS5QeUVycl9QcmludAorICBQeUVycl9QcmludEV4PXB5dGhvbjM1LlB5RXJyX1ByaW50RXgKKyAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzUuUHlFcnJfUHJvZ3JhbVRleHQKKyAgUHlFcnJfUmVzdG9yZT1weXRob24zNS5QeUVycl9SZXN0b3JlCisgIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zNS5QeUVycl9TZXRGcm9tRXJybm8KKyAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjM1LlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQorICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzUuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0CisgIFB5RXJyX1NldEludGVycnVwdD1weXRob24zNS5QeUVycl9TZXRJbnRlcnJ1cHQKKyAgUHlFcnJfU2V0Tm9uZT1weXRob24zNS5QeUVycl9TZXROb25lCisgIFB5RXJyX1NldE9iamVjdD1weXRob24zNS5QeUVycl9TZXRPYmplY3QKKyAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjM1LlB5RXJyX1NldFN0cmluZworICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zNS5QeUVycl9TeW50YXhMb2NhdGlvbgorICBQeUVycl9XYXJuRXg9cHl0aG9uMzUuUHlFcnJfV2FybkV4CisgIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zNS5QeUVycl9XYXJuRXhwbGljaXQKKyAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zNS5QeUVycl9XYXJuRm9ybWF0CisgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zNS5QeUVycl9Xcml0ZVVucmFpc2FibGUKKyAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjM1LlB5RXZhbF9BY3F1aXJlTG9jaworICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zNS5QeUV2YWxfQWNxdWlyZVRocmVhZAorICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM1LlB5RXZhbF9DYWxsRnVuY3Rpb24KKyAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzUuUHlFdmFsX0NhbGxNZXRob2QKKyAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzUuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKKyAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjM1LlB5RXZhbF9FdmFsQ29kZQorICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zNS5QeUV2YWxfRXZhbENvZGVFeAorICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjM1LlB5RXZhbF9FdmFsRnJhbWUKKyAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjM1LlB5RXZhbF9FdmFsRnJhbWVFeAorICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzUuUHlFdmFsX0dldEJ1aWx0aW5zCisgIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzUuUHlFdmFsX0dldENhbGxTdGF0cworICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzUuUHlFdmFsX0dldEZyYW1lCisgIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zNS5QeUV2YWxfR2V0RnVuY0Rlc2MKKyAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjM1LlB5RXZhbF9HZXRGdW5jTmFtZQorICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zNS5QeUV2YWxfR2V0R2xvYmFscworICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjM1LlB5RXZhbF9HZXRMb2NhbHMKKyAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjM1LlB5RXZhbF9Jbml0VGhyZWFkcworICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zNS5QeUV2YWxfUmVJbml0VGhyZWFkcworICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzUuUHlFdmFsX1JlbGVhc2VMb2NrCisgIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjM1LlB5RXZhbF9SZWxlYXNlVGhyZWFkCisgIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjM1LlB5RXZhbF9SZXN0b3JlVGhyZWFkCisgIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjM1LlB5RXZhbF9TYXZlVGhyZWFkCisgIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzUuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAorICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzUuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKKyAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzUuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQorICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zNS5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCisgIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzUuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjM1LlB5RXhjX0J1ZmZlckVycm9yIERBVEEKKyAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjM1LlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCisgIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zNS5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19FT0ZFcnJvcj1weXRob24zNS5QeUV4Y19FT0ZFcnJvciBEQVRBCisgIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzUuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCisgIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zNS5QeUV4Y19FeGNlcHRpb24gREFUQQorICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzUuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKKyAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zNS5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKKyAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zNS5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKKyAgUHlFeGNfSU9FcnJvcj1weXRob24zNS5QeUV4Y19JT0Vycm9yIERBVEEKKyAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzUuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjM1LlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQorICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjM1LlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQorICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjM1LlB5RXhjX0luZGV4RXJyb3IgREFUQQorICBQeUV4Y19LZXlFcnJvcj1weXRob24zNS5QeUV4Y19LZXlFcnJvciBEQVRBCisgIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjM1LlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKKyAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzUuUHlFeGNfTG9va3VwRXJyb3IgREFUQQorICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zNS5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zNS5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQorICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzUuUHlFeGNfTmFtZUVycm9yIERBVEEKKyAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zNS5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKKyAgUHlFeGNfT1NFcnJvcj1weXRob24zNS5QeUV4Y19PU0Vycm9yIERBVEEKKyAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zNS5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKKyAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zNS5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKKyAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjM1LlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCisgIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjM1LlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjM1LlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCisgIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjM1LlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKKyAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zNS5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKKyAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzUuUHlFeGNfU3ludGF4RXJyb3IgREFUQQorICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjM1LlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQorICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zNS5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCisgIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzUuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCisgIFB5RXhjX1RhYkVycm9yPXB5dGhvbjM1LlB5RXhjX1RhYkVycm9yIERBVEEKKyAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjM1LlB5RXhjX1R5cGVFcnJvciBEQVRBCisgIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjM1LlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjM1LlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zNS5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzUuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjM1LlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjM1LlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKKyAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzUuUHlFeGNfVXNlcldhcm5pbmcgREFUQQorICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjM1LlB5RXhjX1ZhbHVlRXJyb3IgREFUQQorICBQeUV4Y19XYXJuaW5nPXB5dGhvbjM1LlB5RXhjX1dhcm5pbmcgREFUQQorICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zNS5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCisgIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjM1LlB5RXhjZXB0aW9uX0dldENhdXNlCisgIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzUuUHlFeGNlcHRpb25fR2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzUuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCisgIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjM1LlB5RXhjZXB0aW9uX1NldENhdXNlCisgIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzUuUHlFeGNlcHRpb25fU2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzUuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCisgIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzUuUHlGaWxlX0Zyb21GZAorICBQeUZpbGVfR2V0TGluZT1weXRob24zNS5QeUZpbGVfR2V0TGluZQorICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzUuUHlGaWxlX1dyaXRlT2JqZWN0CisgIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zNS5QeUZpbGVfV3JpdGVTdHJpbmcKKyAgUHlGaWx0ZXJfVHlwZT1weXRob24zNS5QeUZpbHRlcl9UeXBlIERBVEEKKyAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zNS5QeUZsb2F0X0FzRG91YmxlCisgIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zNS5QeUZsb2F0X0Zyb21Eb3VibGUKKyAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjM1LlB5RmxvYXRfRnJvbVN0cmluZworICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzUuUHlGbG9hdF9HZXRJbmZvCisgIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjM1LlB5RmxvYXRfR2V0TWF4CisgIFB5RmxvYXRfR2V0TWluPXB5dGhvbjM1LlB5RmxvYXRfR2V0TWluCisgIFB5RmxvYXRfVHlwZT1weXRob24zNS5QeUZsb2F0X1R5cGUgREFUQQorICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzUuUHlGcm96ZW5TZXRfTmV3CisgIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzUuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCisgIFB5R0NfQ29sbGVjdD1weXRob24zNS5QeUdDX0NvbGxlY3QKKyAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzUuUHlHSUxTdGF0ZV9FbnN1cmUKKyAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzUuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKKyAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjM1LlB5R0lMU3RhdGVfUmVsZWFzZQorICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzUuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKKyAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjM1LlB5SW1wb3J0X0FkZE1vZHVsZQorICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjM1LlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKKyAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zNS5QeUltcG9ydF9DbGVhbnVwCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjM1LlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzUuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzUuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCisgIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjM1LlB5SW1wb3J0X0dldEltcG9ydGVyCisgIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjM1LlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCisgIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjM1LlB5SW1wb3J0X0dldE1hZ2ljVGFnCisgIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzUuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAorICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzUuUHlJbXBvcnRfSW1wb3J0CisgIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zNS5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKKyAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjM1LlB5SW1wb3J0X0ltcG9ydE1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zNS5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjM1LlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKKyAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjM1LlB5SW1wb3J0X1JlbG9hZE1vZHVsZQorICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzUuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzUuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQorICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjM1LlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKKyAgUHlJdGVyX05leHQ9cHl0aG9uMzUuUHlJdGVyX05leHQKKyAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjM1LlB5TGlzdEl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zNS5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQorICBQeUxpc3RfQXBwZW5kPXB5dGhvbjM1LlB5TGlzdF9BcHBlbmQKKyAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzUuUHlMaXN0X0FzVHVwbGUKKyAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzUuUHlMaXN0X0dldEl0ZW0KKyAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjM1LlB5TGlzdF9HZXRTbGljZQorICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjM1LlB5TGlzdF9JbnNlcnQKKyAgUHlMaXN0X05ldz1weXRob24zNS5QeUxpc3RfTmV3CisgIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjM1LlB5TGlzdF9SZXZlcnNlCisgIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjM1LlB5TGlzdF9TZXRJdGVtCisgIFB5TGlzdF9TZXRTbGljZT1weXRob24zNS5QeUxpc3RfU2V0U2xpY2UKKyAgUHlMaXN0X1NpemU9cHl0aG9uMzUuUHlMaXN0X1NpemUKKyAgUHlMaXN0X1NvcnQ9cHl0aG9uMzUuUHlMaXN0X1NvcnQKKyAgUHlMaXN0X1R5cGU9cHl0aG9uMzUuUHlMaXN0X1R5cGUgREFUQQorICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zNS5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zNS5QeUxvbmdfQXNEb3VibGUKKyAgUHlMb25nX0FzTG9uZz1weXRob24zNS5QeUxvbmdfQXNMb25nCisgIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zNS5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzUuUHlMb25nX0FzTG9uZ0xvbmcKKyAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zNS5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93CisgIFB5TG9uZ19Bc1NpemVfdD1weXRob24zNS5QeUxvbmdfQXNTaXplX3QKKyAgUHlMb25nX0FzU3NpemVfdD1weXRob24zNS5QeUxvbmdfQXNTc2l6ZV90CisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zNS5QeUxvbmdfQXNVbnNpZ25lZExvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zNS5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjM1LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzUuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaworICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjM1LlB5TG9uZ19Bc1ZvaWRQdHIKKyAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzUuUHlMb25nX0Zyb21Eb3VibGUKKyAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjM1LlB5TG9uZ19Gcm9tTG9uZworICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjM1LlB5TG9uZ19Gcm9tTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzUuUHlMb25nX0Zyb21TaXplX3QKKyAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjM1LlB5TG9uZ19Gcm9tU3NpemVfdAorICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zNS5QeUxvbmdfRnJvbVN0cmluZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zNS5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzUuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zNS5QeUxvbmdfRnJvbVZvaWRQdHIKKyAgUHlMb25nX0dldEluZm89cHl0aG9uMzUuUHlMb25nX0dldEluZm8KKyAgUHlMb25nX1R5cGU9cHl0aG9uMzUuUHlMb25nX1R5cGUgREFUQQorICBQeU1hcF9UeXBlPXB5dGhvbjM1LlB5TWFwX1R5cGUgREFUQQorICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzUuUHlNYXBwaW5nX0NoZWNrCisgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjM1LlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCisgIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzUuUHlNYXBwaW5nX0hhc0tleQorICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjM1LlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKKyAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjM1LlB5TWFwcGluZ19JdGVtcworICBQeU1hcHBpbmdfS2V5cz1weXRob24zNS5QeU1hcHBpbmdfS2V5cworICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjM1LlB5TWFwcGluZ19MZW5ndGgKKyAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzUuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzUuUHlNYXBwaW5nX1NpemUKKyAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zNS5QeU1hcHBpbmdfVmFsdWVzCisgIFB5TWVtX0ZyZWU9cHl0aG9uMzUuUHlNZW1fRnJlZQorICBQeU1lbV9NYWxsb2M9cHl0aG9uMzUuUHlNZW1fTWFsbG9jCisgIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzUuUHlNZW1fUmVhbGxvYworICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzUuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKKyAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzUuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKKyAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzUuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKKyAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzUuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQorICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzUuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzUuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKKyAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjM1LlB5TW9kdWxlX0FkZE9iamVjdAorICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zNS5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAorICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjM1LlB5TW9kdWxlX0NyZWF0ZTIKKyAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjM1LlB5TW9kdWxlX0dldERlZgorICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjM1LlB5TW9kdWxlX0dldERpY3QKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzUuUHlNb2R1bGVfR2V0RmlsZW5hbWUKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzUuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKKyAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zNS5QeU1vZHVsZV9HZXROYW1lCisgIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjM1LlB5TW9kdWxlX0dldFN0YXRlCisgIFB5TW9kdWxlX05ldz1weXRob24zNS5QeU1vZHVsZV9OZXcKKyAgUHlNb2R1bGVfVHlwZT1weXRob24zNS5QeU1vZHVsZV9UeXBlIERBVEEKKyAgUHlNb2R1bGVEZWZfSW5pdD1weXRob24zNS5QeU1vZHVsZURlZl9Jbml0CisgIFB5TW9kdWxlRGVmX1R5cGU9cHl0aG9uMzUuUHlNb2R1bGVEZWZfVHlwZSBEQVRBCisgIFB5TnVsbEltcG9ydGVyX1R5cGU9cHl0aG9uMzUuUHlOdWxsSW1wb3J0ZXJfVHlwZSBEQVRBCisgIFB5TnVtYmVyX0Fic29sdXRlPXB5dGhvbjM1LlB5TnVtYmVyX0Fic29sdXRlCisgIFB5TnVtYmVyX0FkZD1weXRob24zNS5QeU51bWJlcl9BZGQKKyAgUHlOdW1iZXJfQW5kPXB5dGhvbjM1LlB5TnVtYmVyX0FuZAorICBQeU51bWJlcl9Bc1NzaXplX3Q9cHl0aG9uMzUuUHlOdW1iZXJfQXNTc2l6ZV90CisgIFB5TnVtYmVyX0NoZWNrPXB5dGhvbjM1LlB5TnVtYmVyX0NoZWNrCisgIFB5TnVtYmVyX0Rpdm1vZD1weXRob24zNS5QeU51bWJlcl9EaXZtb2QKKyAgUHlOdW1iZXJfRmxvYXQ9cHl0aG9uMzUuUHlOdW1iZXJfRmxvYXQKKyAgUHlOdW1iZXJfRmxvb3JEaXZpZGU9cHl0aG9uMzUuUHlOdW1iZXJfRmxvb3JEaXZpZGUKKyAgUHlOdW1iZXJfSW5QbGFjZUFkZD1weXRob24zNS5QeU51bWJlcl9JblBsYWNlQWRkCisgIFB5TnVtYmVyX0luUGxhY2VBbmQ9cHl0aG9uMzUuUHlOdW1iZXJfSW5QbGFjZUFuZAorICBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGU9cHl0aG9uMzUuUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlCisgIFB5TnVtYmVyX0luUGxhY2VMc2hpZnQ9cHl0aG9uMzUuUHlOdW1iZXJfSW5QbGFjZUxzaGlmdAorICBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHk9cHl0aG9uMzUuUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5CisgIFB5TnVtYmVyX0luUGxhY2VPcj1weXRob24zNS5QeU51bWJlcl9JblBsYWNlT3IKKyAgUHlOdW1iZXJfSW5QbGFjZVBvd2VyPXB5dGhvbjM1LlB5TnVtYmVyX0luUGxhY2VQb3dlcgorICBQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyPXB5dGhvbjM1LlB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIKKyAgUHlOdW1iZXJfSW5QbGFjZVJzaGlmdD1weXRob24zNS5QeU51bWJlcl9JblBsYWNlUnNoaWZ0CisgIFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdD1weXRob24zNS5QeU51bWJlcl9JblBsYWNlU3VidHJhY3QKKyAgUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGU9cHl0aG9uMzUuUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUKKyAgUHlOdW1iZXJfSW5QbGFjZVhvcj1weXRob24zNS5QeU51bWJlcl9JblBsYWNlWG9yCisgIFB5TnVtYmVyX0luZGV4PXB5dGhvbjM1LlB5TnVtYmVyX0luZGV4CisgIFB5TnVtYmVyX0ludmVydD1weXRob24zNS5QeU51bWJlcl9JbnZlcnQKKyAgUHlOdW1iZXJfTG9uZz1weXRob24zNS5QeU51bWJlcl9Mb25nCisgIFB5TnVtYmVyX0xzaGlmdD1weXRob24zNS5QeU51bWJlcl9Mc2hpZnQKKyAgUHlOdW1iZXJfTXVsdGlwbHk9cHl0aG9uMzUuUHlOdW1iZXJfTXVsdGlwbHkKKyAgUHlOdW1iZXJfTmVnYXRpdmU9cHl0aG9uMzUuUHlOdW1iZXJfTmVnYXRpdmUKKyAgUHlOdW1iZXJfT3I9cHl0aG9uMzUuUHlOdW1iZXJfT3IKKyAgUHlOdW1iZXJfUG9zaXRpdmU9cHl0aG9uMzUuUHlOdW1iZXJfUG9zaXRpdmUKKyAgUHlOdW1iZXJfUG93ZXI9cHl0aG9uMzUuUHlOdW1iZXJfUG93ZXIKKyAgUHlOdW1iZXJfUmVtYWluZGVyPXB5dGhvbjM1LlB5TnVtYmVyX1JlbWFpbmRlcgorICBQeU51bWJlcl9Sc2hpZnQ9cHl0aG9uMzUuUHlOdW1iZXJfUnNoaWZ0CisgIFB5TnVtYmVyX1N1YnRyYWN0PXB5dGhvbjM1LlB5TnVtYmVyX1N1YnRyYWN0CisgIFB5TnVtYmVyX1RvQmFzZT1weXRob24zNS5QeU51bWJlcl9Ub0Jhc2UKKyAgUHlOdW1iZXJfVHJ1ZURpdmlkZT1weXRob24zNS5QeU51bWJlcl9UcnVlRGl2aWRlCisgIFB5TnVtYmVyX1hvcj1weXRob24zNS5QeU51bWJlcl9Yb3IKKyAgUHlPU19BZnRlckZvcms9cHl0aG9uMzUuUHlPU19BZnRlckZvcmsKKyAgUHlPU19Jbml0SW50ZXJydXB0cz1weXRob24zNS5QeU9TX0luaXRJbnRlcnJ1cHRzCisgIFB5T1NfSW5wdXRIb29rPXB5dGhvbjM1LlB5T1NfSW5wdXRIb29rIERBVEEKKyAgUHlPU19JbnRlcnJ1cHRPY2N1cnJlZD1weXRob24zNS5QeU9TX0ludGVycnVwdE9jY3VycmVkCisgIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXI9cHl0aG9uMzUuUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciBEQVRBCisgIFB5T1NfZG91YmxlX3RvX3N0cmluZz1weXRob24zNS5QeU9TX2RvdWJsZV90b19zdHJpbmcKKyAgUHlPU19nZXRzaWc9cHl0aG9uMzUuUHlPU19nZXRzaWcKKyAgUHlPU19teXN0cmljbXA9cHl0aG9uMzUuUHlPU19teXN0cmljbXAKKyAgUHlPU19teXN0cm5pY21wPXB5dGhvbjM1LlB5T1NfbXlzdHJuaWNtcAorICBQeU9TX3NldHNpZz1weXRob24zNS5QeU9TX3NldHNpZworICBQeU9TX3NucHJpbnRmPXB5dGhvbjM1LlB5T1Nfc25wcmludGYKKyAgUHlPU19zdHJpbmdfdG9fZG91YmxlPXB5dGhvbjM1LlB5T1Nfc3RyaW5nX3RvX2RvdWJsZQorICBQeU9TX3N0cnRvbD1weXRob24zNS5QeU9TX3N0cnRvbAorICBQeU9TX3N0cnRvdWw9cHl0aG9uMzUuUHlPU19zdHJ0b3VsCisgIFB5T1NfdnNucHJpbnRmPXB5dGhvbjM1LlB5T1NfdnNucHJpbnRmCisgIFB5T2JqZWN0X0FTQ0lJPXB5dGhvbjM1LlB5T2JqZWN0X0FTQ0lJCisgIFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcj1weXRob24zNS5QeU9iamVjdF9Bc0NoYXJCdWZmZXIKKyAgUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcj1weXRob24zNS5QeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yCisgIFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcj1weXRob24zNS5QeU9iamVjdF9Bc1JlYWRCdWZmZXIKKyAgUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcj1weXRob24zNS5QeU9iamVjdF9Bc1dyaXRlQnVmZmVyCisgIFB5T2JqZWN0X0J5dGVzPXB5dGhvbjM1LlB5T2JqZWN0X0J5dGVzCisgIFB5T2JqZWN0X0NhbGw9cHl0aG9uMzUuUHlPYmplY3RfQ2FsbAorICBQeU9iamVjdF9DYWxsRnVuY3Rpb249cHl0aG9uMzUuUHlPYmplY3RfQ2FsbEZ1bmN0aW9uCisgIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3M9cHl0aG9uMzUuUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncworICBQeU9iamVjdF9DYWxsTWV0aG9kPXB5dGhvbjM1LlB5T2JqZWN0X0NhbGxNZXRob2QKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3M9cHl0aG9uMzUuUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MKKyAgUHlPYmplY3RfQ2FsbE9iamVjdD1weXRob24zNS5QeU9iamVjdF9DYWxsT2JqZWN0CisgIFB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcj1weXRob24zNS5QeU9iamVjdF9DaGVja1JlYWRCdWZmZXIKKyAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcz1weXRob24zNS5QeU9iamVjdF9DbGVhcldlYWtSZWZzCisgIFB5T2JqZWN0X0RlbEl0ZW09cHl0aG9uMzUuUHlPYmplY3RfRGVsSXRlbQorICBQeU9iamVjdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjM1LlB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcKKyAgUHlPYmplY3RfRGlyPXB5dGhvbjM1LlB5T2JqZWN0X0RpcgorICBQeU9iamVjdF9Gb3JtYXQ9cHl0aG9uMzUuUHlPYmplY3RfRm9ybWF0CisgIFB5T2JqZWN0X0ZyZWU9cHl0aG9uMzUuUHlPYmplY3RfRnJlZQorICBQeU9iamVjdF9HQ19EZWw9cHl0aG9uMzUuUHlPYmplY3RfR0NfRGVsCisgIFB5T2JqZWN0X0dDX1RyYWNrPXB5dGhvbjM1LlB5T2JqZWN0X0dDX1RyYWNrCisgIFB5T2JqZWN0X0dDX1VuVHJhY2s9cHl0aG9uMzUuUHlPYmplY3RfR0NfVW5UcmFjaworICBQeU9iamVjdF9HZW5lcmljR2V0QXR0cj1weXRob24zNS5QeU9iamVjdF9HZW5lcmljR2V0QXR0cgorICBQeU9iamVjdF9HZW5lcmljU2V0QXR0cj1weXRob24zNS5QeU9iamVjdF9HZW5lcmljU2V0QXR0cgorICBQeU9iamVjdF9HZXRBdHRyPXB5dGhvbjM1LlB5T2JqZWN0X0dldEF0dHIKKyAgUHlPYmplY3RfR2V0QXR0clN0cmluZz1weXRob24zNS5QeU9iamVjdF9HZXRBdHRyU3RyaW5nCisgIFB5T2JqZWN0X0dldEl0ZW09cHl0aG9uMzUuUHlPYmplY3RfR2V0SXRlbQorICBQeU9iamVjdF9HZXRJdGVyPXB5dGhvbjM1LlB5T2JqZWN0X0dldEl0ZXIKKyAgUHlPYmplY3RfSGFzQXR0cj1weXRob24zNS5QeU9iamVjdF9IYXNBdHRyCisgIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmc9cHl0aG9uMzUuUHlPYmplY3RfSGFzQXR0clN0cmluZworICBQeU9iamVjdF9IYXNoPXB5dGhvbjM1LlB5T2JqZWN0X0hhc2gKKyAgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkPXB5dGhvbjM1LlB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZAorICBQeU9iamVjdF9Jbml0PXB5dGhvbjM1LlB5T2JqZWN0X0luaXQKKyAgUHlPYmplY3RfSW5pdFZhcj1weXRob24zNS5QeU9iamVjdF9Jbml0VmFyCisgIFB5T2JqZWN0X0lzSW5zdGFuY2U9cHl0aG9uMzUuUHlPYmplY3RfSXNJbnN0YW5jZQorICBQeU9iamVjdF9Jc1N1YmNsYXNzPXB5dGhvbjM1LlB5T2JqZWN0X0lzU3ViY2xhc3MKKyAgUHlPYmplY3RfSXNUcnVlPXB5dGhvbjM1LlB5T2JqZWN0X0lzVHJ1ZQorICBQeU9iamVjdF9MZW5ndGg9cHl0aG9uMzUuUHlPYmplY3RfTGVuZ3RoCisgIFB5T2JqZWN0X01hbGxvYz1weXRob24zNS5QeU9iamVjdF9NYWxsb2MKKyAgUHlPYmplY3RfTm90PXB5dGhvbjM1LlB5T2JqZWN0X05vdAorICBQeU9iamVjdF9SZWFsbG9jPXB5dGhvbjM1LlB5T2JqZWN0X1JlYWxsb2MKKyAgUHlPYmplY3RfUmVwcj1weXRob24zNS5QeU9iamVjdF9SZXByCisgIFB5T2JqZWN0X1JpY2hDb21wYXJlPXB5dGhvbjM1LlB5T2JqZWN0X1JpY2hDb21wYXJlCisgIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbD1weXRob24zNS5QeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wKKyAgUHlPYmplY3RfU2VsZkl0ZXI9cHl0aG9uMzUuUHlPYmplY3RfU2VsZkl0ZXIKKyAgUHlPYmplY3RfU2V0QXR0cj1weXRob24zNS5QeU9iamVjdF9TZXRBdHRyCisgIFB5T2JqZWN0X1NldEF0dHJTdHJpbmc9cHl0aG9uMzUuUHlPYmplY3RfU2V0QXR0clN0cmluZworICBQeU9iamVjdF9TZXRJdGVtPXB5dGhvbjM1LlB5T2JqZWN0X1NldEl0ZW0KKyAgUHlPYmplY3RfU2l6ZT1weXRob24zNS5QeU9iamVjdF9TaXplCisgIFB5T2JqZWN0X1N0cj1weXRob24zNS5QeU9iamVjdF9TdHIKKyAgUHlPYmplY3RfVHlwZT1weXRob24zNS5QeU9iamVjdF9UeXBlIERBVEEKKyAgUHlPRGljdF9EZWxJdGVtPXB5dGhvbjM1LlB5T0RpY3RfRGVsSXRlbQorICBQeU9EaWN0X05ldz1weXRob24zNS5QeU9EaWN0X05ldworICBQeU9EaWN0X1NldEl0ZW09cHl0aG9uMzUuUHlPRGljdF9TZXRJdGVtCisgIFB5T0RpY3RfVHlwZT1weXRob24zNS5QeU9EaWN0X1R5cGUgREFUQQorICBQeU9EaWN0SXRlbXNfVHlwZT1weXRob24zNS5QeU9EaWN0SXRlbXNfVHlwZSBEQVRBCisgIFB5T0RpY3RJdGVyX1R5cGU9cHl0aG9uMzUuUHlPRGljdEl0ZXJfVHlwZSBEQVRBCisgIFB5T0RpY3RLZXlzX1R5cGU9cHl0aG9uMzUuUHlPRGljdEtleXNfVHlwZSBEQVRBCisgIFB5T0RpY3RWYWx1ZXNfVHlwZT1weXRob24zNS5QeU9EaWN0VmFsdWVzX1R5cGUgREFUQQorICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zNS5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncworICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjM1LlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKKyAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjM1LlB5UHJvcGVydHlfVHlwZSBEQVRBCisgIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzUuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5UmFuZ2VfVHlwZT1weXRob24zNS5QeVJhbmdlX1R5cGUgREFUQQorICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzUuUHlSZXZlcnNlZF9UeXBlIERBVEEKKyAgUHlTZXFJdGVyX05ldz1weXRob24zNS5QeVNlcUl0ZXJfTmV3CisgIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjM1LlB5U2VxSXRlcl9UeXBlIERBVEEKKyAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zNS5QeVNlcXVlbmNlX0NoZWNrCisgIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjM1LlB5U2VxdWVuY2VfQ29uY2F0CisgIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzUuUHlTZXF1ZW5jZV9Db250YWlucworICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjM1LlB5U2VxdWVuY2VfQ291bnQKKyAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjM1LlB5U2VxdWVuY2VfRGVsSXRlbQorICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjM1LlB5U2VxdWVuY2VfRGVsU2xpY2UKKyAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjM1LlB5U2VxdWVuY2VfRmFzdAorICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzUuUHlTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzUuUHlTZXF1ZW5jZV9HZXRTbGljZQorICBQeVNlcXVlbmNlX0luPXB5dGhvbjM1LlB5U2VxdWVuY2VfSW4KKyAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjM1LlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAorICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzUuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0CisgIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzUuUHlTZXF1ZW5jZV9JbmRleAorICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zNS5QeVNlcXVlbmNlX0xlbmd0aAorICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzUuUHlTZXF1ZW5jZV9MaXN0CisgIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjM1LlB5U2VxdWVuY2VfUmVwZWF0CisgIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zNS5QeVNlcXVlbmNlX1NldEl0ZW0KKyAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zNS5QeVNlcXVlbmNlX1NldFNsaWNlCisgIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zNS5QeVNlcXVlbmNlX1NpemUKKyAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zNS5QeVNlcXVlbmNlX1R1cGxlCisgIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjM1LlB5U2V0SXRlcl9UeXBlIERBVEEKKyAgUHlTZXRfQWRkPXB5dGhvbjM1LlB5U2V0X0FkZAorICBQeVNldF9DbGVhcj1weXRob24zNS5QeVNldF9DbGVhcgorICBQeVNldF9Db250YWlucz1weXRob24zNS5QeVNldF9Db250YWlucworICBQeVNldF9EaXNjYXJkPXB5dGhvbjM1LlB5U2V0X0Rpc2NhcmQKKyAgUHlTZXRfTmV3PXB5dGhvbjM1LlB5U2V0X05ldworICBQeVNldF9Qb3A9cHl0aG9uMzUuUHlTZXRfUG9wCisgIFB5U2V0X1NpemU9cHl0aG9uMzUuUHlTZXRfU2l6ZQorICBQeVNldF9UeXBlPXB5dGhvbjM1LlB5U2V0X1R5cGUgREFUQQorICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzUuUHlTbGljZV9HZXRJbmRpY2VzCisgIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjM1LlB5U2xpY2VfR2V0SW5kaWNlc0V4CisgIFB5U2xpY2VfTmV3PXB5dGhvbjM1LlB5U2xpY2VfTmV3CisgIFB5U2xpY2VfVHlwZT1weXRob24zNS5QeVNsaWNlX1R5cGUgREFUQQorICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzUuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKKyAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjM1LlB5U3RhdGVfRmluZE1vZHVsZQorICBQeVN0YXRlX0FkZE1vZHVsZT1weXRob24zNS5QeVN0YXRlX0FkZE1vZHVsZQorICBQeVN0YXRlX1JlbW92ZU1vZHVsZT1weXRob24zNS5QeVN0YXRlX1JlbW92ZU1vZHVsZQorICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzUuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjM1LlB5U3RydWN0U2VxdWVuY2VfTmV3CisgIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zNS5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM1LlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQorICBQeVN1cGVyX1R5cGU9cHl0aG9uMzUuUHlTdXBlcl9UeXBlIERBVEEKKyAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zNS5QeVN5c19BZGRXYXJuT3B0aW9uCisgIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjM1LlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCisgIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zNS5QeVN5c19Gb3JtYXRTdGRlcnIKKyAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjM1LlB5U3lzX0Zvcm1hdFN0ZG91dAorICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzUuUHlTeXNfR2V0T2JqZWN0CisgIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjM1LlB5U3lzX0hhc1dhcm5PcHRpb25zCisgIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzUuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucworICBQeVN5c19TZXRBcmd2PXB5dGhvbjM1LlB5U3lzX1NldEFyZ3YKKyAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjM1LlB5U3lzX1NldEFyZ3ZFeAorICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzUuUHlTeXNfU2V0T2JqZWN0CisgIFB5U3lzX1NldFBhdGg9cHl0aG9uMzUuUHlTeXNfU2V0UGF0aAorICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zNS5QeVN5c19Xcml0ZVN0ZGVycgorICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zNS5QeVN5c19Xcml0ZVN0ZG91dAorICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjM1LlB5VGhyZWFkU3RhdGVfQ2xlYXIKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzUuUHlUaHJlYWRTdGF0ZV9EZWxldGUKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjM1LlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAorICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zNS5QeVRocmVhZFN0YXRlX0dldAorICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzUuUHlUaHJlYWRTdGF0ZV9HZXREaWN0CisgIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjM1LlB5VGhyZWFkU3RhdGVfTmV3CisgIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzUuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YworICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzUuUHlUaHJlYWRTdGF0ZV9Td2FwCisgIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzUuUHlUcmFjZUJhY2tfSGVyZQorICBQeVRyYWNlQmFja19QcmludD1weXRob24zNS5QeVRyYWNlQmFja19QcmludAorICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjM1LlB5VHJhY2VCYWNrX1R5cGUgREFUQQorICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjM1LlB5VHVwbGVJdGVyX1R5cGUgREFUQQorICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzUuUHlUdXBsZV9DbGVhckZyZWVMaXN0CisgIFB5VHVwbGVfR2V0SXRlbT1weXRob24zNS5QeVR1cGxlX0dldEl0ZW0KKyAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zNS5QeVR1cGxlX0dldFNsaWNlCisgIFB5VHVwbGVfTmV3PXB5dGhvbjM1LlB5VHVwbGVfTmV3CisgIFB5VHVwbGVfUGFjaz1weXRob24zNS5QeVR1cGxlX1BhY2sKKyAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjM1LlB5VHVwbGVfU2V0SXRlbQorICBQeVR1cGxlX1NpemU9cHl0aG9uMzUuUHlUdXBsZV9TaXplCisgIFB5VHVwbGVfVHlwZT1weXRob24zNS5QeVR1cGxlX1R5cGUgREFUQQorICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zNS5QeVR5cGVfQ2xlYXJDYWNoZQorICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzUuUHlUeXBlX0Zyb21TcGVjCisgIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcz1weXRob24zNS5QeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMKKyAgUHlUeXBlX0dlbmVyaWNBbGxvYz1weXRob24zNS5QeVR5cGVfR2VuZXJpY0FsbG9jCisgIFB5VHlwZV9HZW5lcmljTmV3PXB5dGhvbjM1LlB5VHlwZV9HZW5lcmljTmV3CisgIFB5VHlwZV9HZXRGbGFncz1weXRob24zNS5QeVR5cGVfR2V0RmxhZ3MKKyAgUHlUeXBlX0dldFNsb3Q9cHl0aG9uMzUuUHlUeXBlX0dldFNsb3QKKyAgUHlUeXBlX0lzU3VidHlwZT1weXRob24zNS5QeVR5cGVfSXNTdWJ0eXBlCisgIFB5VHlwZV9Nb2RpZmllZD1weXRob24zNS5QeVR5cGVfTW9kaWZpZWQKKyAgUHlUeXBlX1JlYWR5PXB5dGhvbjM1LlB5VHlwZV9SZWFkeQorICBQeVR5cGVfVHlwZT1weXRob24zNS5QeVR5cGVfVHlwZSBEQVRBCisgIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZT1weXRob24zNS5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzUuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM1LlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzUuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNS5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzUuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM1LlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzUuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM1LlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjM1LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZD1weXRob24zNS5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjM1LlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzUuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjM1LlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZD1weXRob24zNS5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjM1LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbgorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zNS5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAorICBQeVVuaWNvZGVJdGVyX1R5cGU9cHl0aG9uMzUuUHlVbmljb2RlSXRlcl9UeXBlIERBVEEKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kPXB5dGhvbjM1LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzUuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbj1weXRob24zNS5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzUuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kPXB5dGhvbjM1LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzUuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM1LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZV9BcHBlbmQ9cHl0aG9uMzUuUHlVbmljb2RlX0FwcGVuZAorICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsPXB5dGhvbjM1LlB5VW5pY29kZV9BcHBlbmRBbmREZWwKKyAgUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc9cHl0aG9uMzUuUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcKKyAgUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZz1weXRob24zNS5QeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nCisgIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3Q9cHl0aG9uMzUuUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZT1weXRob24zNS5QeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZQorICBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0PXB5dGhvbjM1LlB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZz1weXRob24zNS5QeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nCisgIFB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlPXB5dGhvbjM1LlB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlCisgIFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZz1weXRob24zNS5QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcKKyAgUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zNS5QeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjE2U3RyaW5nPXB5dGhvbjM1LlB5VW5pY29kZV9Bc1VURjE2U3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjMyU3RyaW5nPXB5dGhvbjM1LlB5VW5pY29kZV9Bc1VURjMyU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjhTdHJpbmc9cHl0aG9uMzUuUHlVbmljb2RlX0FzVVRGOFN0cmluZworICBQeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjM1LlB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKKyAgUHlVbmljb2RlX0FzV2lkZUNoYXI9cHl0aG9uMzUuUHlVbmljb2RlX0FzV2lkZUNoYXIKKyAgUHlVbmljb2RlX0NsZWFyRnJlZWxpc3Q9cHl0aG9uMzUuUHlVbmljb2RlX0NsZWFyRnJlZWxpc3QKKyAgUHlVbmljb2RlX0NvbXBhcmU9cHl0aG9uMzUuUHlVbmljb2RlX0NvbXBhcmUKKyAgUHlVbmljb2RlX0NvbmNhdD1weXRob24zNS5QeVVuaWNvZGVfQ29uY2F0CisgIFB5VW5pY29kZV9Db250YWlucz1weXRob24zNS5QeVVuaWNvZGVfQ29udGFpbnMKKyAgUHlVbmljb2RlX0NvdW50PXB5dGhvbjM1LlB5VW5pY29kZV9Db3VudAorICBQeVVuaWNvZGVfRGVjb2RlPXB5dGhvbjM1LlB5VW5pY29kZV9EZWNvZGUKKyAgUHlVbmljb2RlX0RlY29kZUFTQ0lJPXB5dGhvbjM1LlB5VW5pY29kZV9EZWNvZGVBU0NJSQorICBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcD1weXRob24zNS5QeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcAorICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0PXB5dGhvbjM1LlB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemU9cHl0aG9uMzUuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKKyAgUHlVbmljb2RlX0RlY29kZUxhdGluMT1weXRob24zNS5QeVVuaWNvZGVfRGVjb2RlTGF0aW4xCisgIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlPXB5dGhvbjM1LlB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlCisgIFB5VW5pY29kZV9EZWNvZGVVVEYxNj1weXRob24zNS5QeVVuaWNvZGVfRGVjb2RlVVRGMTYKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWw9cHl0aG9uMzUuUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVURjMyPXB5dGhvbjM1LlB5VW5pY29kZV9EZWNvZGVVVEYzMgorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bD1weXRob24zNS5QeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOD1weXRob24zNS5QeVVuaWNvZGVfRGVjb2RlVVRGOAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsPXB5dGhvbjM1LlB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGU9cHl0aG9uMzUuUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0ZTQ29udmVydGVyPXB5dGhvbjM1LlB5VW5pY29kZV9GU0NvbnZlcnRlcgorICBQeVVuaWNvZGVfRlNEZWNvZGVyPXB5dGhvbjM1LlB5VW5pY29kZV9GU0RlY29kZXIKKyAgUHlVbmljb2RlX0ZpbmQ9cHl0aG9uMzUuUHlVbmljb2RlX0ZpbmQKKyAgUHlVbmljb2RlX0Zvcm1hdD1weXRob24zNS5QeVVuaWNvZGVfRm9ybWF0CisgIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdD1weXRob24zNS5QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXQ9cHl0aG9uMzUuUHlVbmljb2RlX0Zyb21Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXRWPXB5dGhvbjM1LlB5VW5pY29kZV9Gcm9tRm9ybWF0VgorICBQeVVuaWNvZGVfRnJvbU9iamVjdD1weXRob24zNS5QeVVuaWNvZGVfRnJvbU9iamVjdAorICBQeVVuaWNvZGVfRnJvbU9yZGluYWw9cHl0aG9uMzUuUHlVbmljb2RlX0Zyb21PcmRpbmFsCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nPXB5dGhvbjM1LlB5VW5pY29kZV9Gcm9tU3RyaW5nCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zNS5QeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcj1weXRob24zNS5QeVVuaWNvZGVfRnJvbVdpZGVDaGFyCisgIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzUuUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZworICBQeVVuaWNvZGVfR2V0U2l6ZT1weXRob24zNS5QeVVuaWNvZGVfR2V0U2l6ZQorICBQeVVuaWNvZGVfSXNJZGVudGlmaWVyPXB5dGhvbjM1LlB5VW5pY29kZV9Jc0lkZW50aWZpZXIKKyAgUHlVbmljb2RlX0pvaW49cHl0aG9uMzUuUHlVbmljb2RlX0pvaW4KKyAgUHlVbmljb2RlX1BhcnRpdGlvbj1weXRob24zNS5QeVVuaWNvZGVfUGFydGl0aW9uCisgIFB5VW5pY29kZV9SUGFydGl0aW9uPXB5dGhvbjM1LlB5VW5pY29kZV9SUGFydGl0aW9uCisgIFB5VW5pY29kZV9SU3BsaXQ9cHl0aG9uMzUuUHlVbmljb2RlX1JTcGxpdAorICBQeVVuaWNvZGVfUmVwbGFjZT1weXRob24zNS5QeVVuaWNvZGVfUmVwbGFjZQorICBQeVVuaWNvZGVfUmVzaXplPXB5dGhvbjM1LlB5VW5pY29kZV9SZXNpemUKKyAgUHlVbmljb2RlX1JpY2hDb21wYXJlPXB5dGhvbjM1LlB5VW5pY29kZV9SaWNoQ29tcGFyZQorICBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjM1LlB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2RpbmcKKyAgUHlVbmljb2RlX1NwbGl0PXB5dGhvbjM1LlB5VW5pY29kZV9TcGxpdAorICBQeVVuaWNvZGVfU3BsaXRsaW5lcz1weXRob24zNS5QeVVuaWNvZGVfU3BsaXRsaW5lcworICBQeVVuaWNvZGVfVGFpbG1hdGNoPXB5dGhvbjM1LlB5VW5pY29kZV9UYWlsbWF0Y2gKKyAgUHlVbmljb2RlX1RyYW5zbGF0ZT1weXRob24zNS5QeVVuaWNvZGVfVHJhbnNsYXRlCisgIFB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwPXB5dGhvbjM1LlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCisgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nPXB5dGhvbjM1LlB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCisgIFB5VW5pY29kZV9EZWNvZGVVVEY3PXB5dGhvbjM1LlB5VW5pY29kZV9EZWNvZGVVVEY3CisgIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWw9cHl0aG9uMzUuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0PXB5dGhvbjM1LlB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmc9cHl0aG9uMzUuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKKyAgUHlVbmljb2RlX0ludGVybkltbW9ydGFsPXB5dGhvbjM1LlB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAorICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZT1weXRob24zNS5QeVVuaWNvZGVfSW50ZXJuSW5QbGFjZQorICBQeVVuaWNvZGVfVHlwZT1weXRob24zNS5QeVVuaWNvZGVfVHlwZSBEQVRBCisgIFB5V2Vha3JlZl9HZXRPYmplY3Q9cHl0aG9uMzUuUHlXZWFrcmVmX0dldE9iamVjdCBEQVRBCisgIFB5V2Vha3JlZl9OZXdQcm94eT1weXRob24zNS5QeVdlYWtyZWZfTmV3UHJveHkKKyAgUHlXZWFrcmVmX05ld1JlZj1weXRob24zNS5QeVdlYWtyZWZfTmV3UmVmCisgIFB5V3JhcHBlckRlc2NyX1R5cGU9cHl0aG9uMzUuUHlXcmFwcGVyRGVzY3JfVHlwZSBEQVRBCisgIFB5V3JhcHBlcl9OZXc9cHl0aG9uMzUuUHlXcmFwcGVyX05ldworICBQeVppcF9UeXBlPXB5dGhvbjM1LlB5WmlwX1R5cGUgREFUQQorICBQeV9BZGRQZW5kaW5nQ2FsbD1weXRob24zNS5QeV9BZGRQZW5kaW5nQ2FsbAorICBQeV9BdEV4aXQ9cHl0aG9uMzUuUHlfQXRFeGl0CisgIFB5X0J1aWxkVmFsdWU9cHl0aG9uMzUuUHlfQnVpbGRWYWx1ZQorICBQeV9Db21waWxlU3RyaW5nPXB5dGhvbjM1LlB5X0NvbXBpbGVTdHJpbmcKKyAgUHlfRGVjUmVmPXB5dGhvbjM1LlB5X0RlY1JlZgorICBQeV9FbmRJbnRlcnByZXRlcj1weXRob24zNS5QeV9FbmRJbnRlcnByZXRlcgorICBQeV9FeGl0PXB5dGhvbjM1LlB5X0V4aXQKKyAgUHlfRmF0YWxFcnJvcj1weXRob24zNS5QeV9GYXRhbEVycm9yCisgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzUuUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0ZpbmFsaXplPXB5dGhvbjM1LlB5X0ZpbmFsaXplCisgIFB5X0dldEJ1aWxkSW5mbz1weXRob24zNS5QeV9HZXRCdWlsZEluZm8KKyAgUHlfR2V0Q29tcGlsZXI9cHl0aG9uMzUuUHlfR2V0Q29tcGlsZXIKKyAgUHlfR2V0Q29weXJpZ2h0PXB5dGhvbjM1LlB5X0dldENvcHlyaWdodAorICBQeV9HZXRFeGVjUHJlZml4PXB5dGhvbjM1LlB5X0dldEV4ZWNQcmVmaXgKKyAgUHlfR2V0UGF0aD1weXRob24zNS5QeV9HZXRQYXRoCisgIFB5X0dldFBsYXRmb3JtPXB5dGhvbjM1LlB5X0dldFBsYXRmb3JtCisgIFB5X0dldFByZWZpeD1weXRob24zNS5QeV9HZXRQcmVmaXgKKyAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoPXB5dGhvbjM1LlB5X0dldFByb2dyYW1GdWxsUGF0aAorICBQeV9HZXRQcm9ncmFtTmFtZT1weXRob24zNS5QeV9HZXRQcm9ncmFtTmFtZQorICBQeV9HZXRQeXRob25Ib21lPXB5dGhvbjM1LlB5X0dldFB5dGhvbkhvbWUKKyAgUHlfR2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzUuUHlfR2V0UmVjdXJzaW9uTGltaXQKKyAgUHlfR2V0VmVyc2lvbj1weXRob24zNS5QeV9HZXRWZXJzaW9uCisgIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzUuUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0luY1JlZj1weXRob24zNS5QeV9JbmNSZWYKKyAgUHlfSW5pdGlhbGl6ZT1weXRob24zNS5QeV9Jbml0aWFsaXplCisgIFB5X0luaXRpYWxpemVFeD1weXRob24zNS5QeV9Jbml0aWFsaXplRXgKKyAgUHlfSXNJbml0aWFsaXplZD1weXRob24zNS5QeV9Jc0luaXRpYWxpemVkCisgIFB5X01haW49cHl0aG9uMzUuUHlfTWFpbgorICBQeV9NYWtlUGVuZGluZ0NhbGxzPXB5dGhvbjM1LlB5X01ha2VQZW5kaW5nQ2FsbHMKKyAgUHlfTmV3SW50ZXJwcmV0ZXI9cHl0aG9uMzUuUHlfTmV3SW50ZXJwcmV0ZXIKKyAgUHlfUmVwckVudGVyPXB5dGhvbjM1LlB5X1JlcHJFbnRlcgorICBQeV9SZXByTGVhdmU9cHl0aG9uMzUuUHlfUmVwckxlYXZlCisgIFB5X1NldFByb2dyYW1OYW1lPXB5dGhvbjM1LlB5X1NldFByb2dyYW1OYW1lCisgIFB5X1NldFB5dGhvbkhvbWU9cHl0aG9uMzUuUHlfU2V0UHl0aG9uSG9tZQorICBQeV9TZXRSZWN1cnNpb25MaW1pdD1weXRob24zNS5QeV9TZXRSZWN1cnNpb25MaW1pdAorICBQeV9TeW10YWJsZVN0cmluZz1weXRob24zNS5QeV9TeW10YWJsZVN0cmluZworICBQeV9WYUJ1aWxkVmFsdWU9cHl0aG9uMzUuUHlfVmFCdWlsZFZhbHVlCisgIF9QeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzUuX1B5RXJyX0JhZEludGVybmFsQ2FsbAorICBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUPXB5dGhvbjM1Ll9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKKyAgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQ9cHl0aG9uMzUuX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQKKyAgX1B5T2JqZWN0X0dDX01hbGxvYz1weXRob24zNS5fUHlPYmplY3RfR0NfTWFsbG9jCisgIF9QeU9iamVjdF9HQ19OZXc9cHl0aG9uMzUuX1B5T2JqZWN0X0dDX05ldworICBfUHlPYmplY3RfR0NfTmV3VmFyPXB5dGhvbjM1Ll9QeU9iamVjdF9HQ19OZXdWYXIKKyAgX1B5T2JqZWN0X0dDX1Jlc2l6ZT1weXRob24zNS5fUHlPYmplY3RfR0NfUmVzaXplCisgIF9QeU9iamVjdF9OZXc9cHl0aG9uMzUuX1B5T2JqZWN0X05ldworICBfUHlPYmplY3RfTmV3VmFyPXB5dGhvbjM1Ll9QeU9iamVjdF9OZXdWYXIKKyAgX1B5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM1Ll9QeVN0YXRlX0FkZE1vZHVsZQorICBfUHlUaHJlYWRTdGF0ZV9Jbml0PXB5dGhvbjM1Ll9QeVRocmVhZFN0YXRlX0luaXQKKyAgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2M9cHl0aG9uMzUuX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MKKyAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyPXB5dGhvbjM1Ll9QeVRyYXNoX2RlbGV0ZV9sYXRlciBEQVRBCisgIF9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nPXB5dGhvbjM1Ll9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIERBVEEKKyAgX1B5VHJhc2hfZGVwb3NpdF9vYmplY3Q9cHl0aG9uMzUuX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKKyAgX1B5VHJhc2hfZGVzdHJveV9jaGFpbj1weXRob24zNS5fUHlUcmFzaF9kZXN0cm95X2NoYWluCisgIF9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGU9cHl0aG9uMzUuX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSBEQVRBCisgIF9QeVdlYWtyZWZfUHJveHlUeXBlPXB5dGhvbjM1Ll9QeVdlYWtyZWZfUHJveHlUeXBlIERBVEEKKyAgX1B5V2Vha3JlZl9SZWZUeXBlPXB5dGhvbjM1Ll9QeVdlYWtyZWZfUmVmVHlwZSBEQVRBCisgIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM1Ll9QeV9CdWlsZFZhbHVlX1NpemVUCisgIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0PXB5dGhvbjM1Ll9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IERBVEEKKyAgX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbD1weXRob24zNS5fUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCisgIF9QeV9EZWFsbG9jPXB5dGhvbjM1Ll9QeV9EZWFsbG9jCisgIF9QeV9FbGxpcHNpc09iamVjdD1weXRob24zNS5fUHlfRWxsaXBzaXNPYmplY3QgREFUQQorICBfUHlfRmFsc2VTdHJ1Y3Q9cHl0aG9uMzUuX1B5X0ZhbHNlU3RydWN0IERBVEEKKyAgX1B5X05vbmVTdHJ1Y3Q9cHl0aG9uMzUuX1B5X05vbmVTdHJ1Y3QgREFUQQorICBfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3Q9cHl0aG9uMzUuX1B5X05vdEltcGxlbWVudGVkU3RydWN0IERBVEEKKyAgX1B5X1N3YXBwZWRPcD1weXRob24zNS5fUHlfU3dhcHBlZE9wIERBVEEKKyAgX1B5X1RydWVTdHJ1Y3Q9cHl0aG9uMzUuX1B5X1RydWVTdHJ1Y3QgREFUQQorICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM1Ll9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQKKyAgX1B5QXJnX1BhcnNlX1NpemVUPXB5dGhvbjM1Ll9QeUFyZ19QYXJzZV9TaXplVAorICBfUHlBcmdfUGFyc2VUdXBsZV9TaXplVD1weXRob24zNS5fUHlBcmdfUGFyc2VUdXBsZV9TaXplVAorICBfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjM1Ll9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKKyAgX1B5QXJnX1ZhUGFyc2VfU2l6ZVQ9cHl0aG9uMzUuX1B5QXJnX1ZhUGFyc2VfU2l6ZVQKKyAgX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjM1Ll9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAorICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zNS5fUHlfQnVpbGRWYWx1ZV9TaXplVApkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5tYWsgYi9QQy9weXRob24zLm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI4ZTdhYS4uMDAwMDAwMAotLS0gYS9QQy9weXRob24zLm1haworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSQoT3V0RGlyKXB5dGhvbjMuZGxsOglweXRob24zLmRlZiAkKE91dERpcilweXRob24zNHN0dWIubGliCi0JY2wgL0xEIC9GZSQoT3V0RGlyKXB5dGhvbjMuZGxsIHB5dGhvbjNkbGwuYyBweXRob24zLmRlZiAkKE91dERpcilweXRob24zNHN0dWIubGliCi0KLSQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWI6CXB5dGhvbjM0c3R1Yi5kZWYKLQlsaWIgL2RlZjpweXRob24zNHN0dWIuZGVmIC9vdXQ6JChPdXREaXIpcHl0aG9uMzRzdHViLmxpYiAvTUFDSElORTokKE1BQ0hJTkUpCi0KLWNsZWFuOgotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMuZGxsIGRlbCAkKE91dERpcilweXRob24zLmRsbAotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMubGliIGRlbCAkKE91dERpcilweXRob24zLmxpYgotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIgZGVsICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIKLQlJRiBFWElTVCAkKE91dERpcilweXRob24zLmV4cCBkZWwgJChPdXREaXIpcHl0aG9uMy5leHAKLQlJRiBFWElTVCAkKE91dERpcilweXRob24zNHN0dWIuZXhwIGRlbCAkKE91dERpcilweXRob24zNHN0dWIuZXhwCi0KLXJlYnVpbGQ6IGNsZWFuICQoT3V0RGlyKXB5dGhvbjMuZGxsCmRpZmYgLS1naXQgYS9QQy9weXRob24zNGdlbi5weSBiL1BDL3B5dGhvbjM0Z2VuLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODBjZTExLi4wMDAwMDAwCi0tLSBhL1BDL3B5dGhvbjM0Z2VuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIyBHZW5lcmF0ZSBweXRob24zNHN0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgotIyBUaGUgcmVndWxhciBpbXBvcnQgbGlicmFyeSBjYW5ub3QgYmUgdXNlZCwKLSMgc2luY2UgaXQgZG9lc24ndCBwcm92aWRlIHRoZSByaWdodCBzeW1ib2xzIGZvcgotIyBkYXRhIGZvcndhcmRpbmcKLW91dCA9IG9wZW4oInB5dGhvbjM0c3R1Yi5kZWYiLCAidyIpCi1vdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjM0IlxuJykKLW91dC53cml0ZSgnRVhQT1JUU1xuJykKLQotaW5wID0gb3BlbigicHl0aG9uMy5kZWYiKQotbGluZSA9IGlucC5yZWFkbGluZSgpCi13aGlsZSBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aCgnOycpOgotICAgIGxpbmUgPSBpbnAucmVhZGxpbmUoKQotbGluZSA9IGlucC5yZWFkbGluZSgpICMgTElCUkFSWQotYXNzZXJ0IGxpbmUuc3RyaXAoKT09J0VYUE9SVFMnCi0KLWZvciBsaW5lIGluIGlucDoKLSAgICAjIFNZTTE9cHl0aG9uMzQuU1lNMlsgREFUQV0KLSAgICBoZWFkLCB0YWlsID0gbGluZS5zcGxpdCgnLicpCi0gICAgaWYgJ0RBVEEnIGluIHRhaWw6Ci0gICAgICAgIHN5bWJvbCwgdGFpbCA9IHRhaWwuc3BsaXQoJyAnKQotICAgIGVsc2U6Ci0gICAgICAgIHN5bWJvbCA9IHRhaWwuc3RyaXAoKQotICAgIG91dC53cml0ZShzeW1ib2wrJ1xuJykKLQotaW5wLmNsb3NlKCkKLW91dC5jbG9zZSgpCmRpZmYgLS1naXQgYS9QQy9weXRob24zNHN0dWIuZGVmIGIvUEMvcHl0aG9uMzRzdHViLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA3NGNmMy4uMDAwMDAwMAotLS0gYS9QQy9weXRob24zNHN0dWIuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsNzAwICswLDAgQEAKLUxJQlJBUlkgInB5dGhvbjM0IgotRVhQT1JUUwotUHlBcmdfUGFyc2UKLVB5QXJnX1BhcnNlVHVwbGUKLVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcwotUHlBcmdfVW5wYWNrVHVwbGUKLVB5QXJnX1ZhUGFyc2UKLVB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzCi1QeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHMKLVB5QmFzZU9iamVjdF9UeXBlCi1QeUJvb2xfRnJvbUxvbmcKLVB5Qm9vbF9UeXBlCi1QeUJ5dGVBcnJheUl0ZXJfVHlwZQotUHlCeXRlQXJyYXlfQXNTdHJpbmcKLVB5Qnl0ZUFycmF5X0NvbmNhdAotUHlCeXRlQXJyYXlfRnJvbU9iamVjdAotUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKLVB5Qnl0ZUFycmF5X1Jlc2l6ZQotUHlCeXRlQXJyYXlfU2l6ZQotUHlCeXRlQXJyYXlfVHlwZQotUHlCeXRlc0l0ZXJfVHlwZQotUHlCeXRlc19Bc1N0cmluZwotUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUKLVB5Qnl0ZXNfQ29uY2F0Ci1QeUJ5dGVzX0NvbmNhdEFuZERlbAotUHlCeXRlc19EZWNvZGVFc2NhcGUKLVB5Qnl0ZXNfRnJvbUZvcm1hdAotUHlCeXRlc19Gcm9tRm9ybWF0VgotUHlCeXRlc19Gcm9tT2JqZWN0Ci1QeUJ5dGVzX0Zyb21TdHJpbmcKLVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLVB5Qnl0ZXNfUmVwcgotUHlCeXRlc19TaXplCi1QeUJ5dGVzX1R5cGUKLVB5Q0Z1bmN0aW9uX0NhbGwKLVB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3QKLVB5Q0Z1bmN0aW9uX0dldEZsYWdzCi1QeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgotUHlDRnVuY3Rpb25fR2V0U2VsZgotUHlDRnVuY3Rpb25fTmV3Ci1QeUNGdW5jdGlvbl9OZXdFeAotUHlDRnVuY3Rpb25fVHlwZQotUHlDYWxsSXRlcl9OZXcKLVB5Q2FsbEl0ZXJfVHlwZQotUHlDYWxsYWJsZV9DaGVjawotUHlDYXBzdWxlX0dldENvbnRleHQKLVB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi1QeUNhcHN1bGVfR2V0TmFtZQotUHlDYXBzdWxlX0dldFBvaW50ZXIKLVB5Q2Fwc3VsZV9JbXBvcnQKLVB5Q2Fwc3VsZV9Jc1ZhbGlkCi1QeUNhcHN1bGVfTmV3Ci1QeUNhcHN1bGVfU2V0Q29udGV4dAotUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLVB5Q2Fwc3VsZV9TZXROYW1lCi1QeUNhcHN1bGVfU2V0UG9pbnRlcgotUHlDYXBzdWxlX1R5cGUKLVB5Q2xhc3NNZXRob2REZXNjcl9UeXBlCi1QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKLVB5Q29kZWNfRGVjb2RlCi1QeUNvZGVjX0RlY29kZXIKLVB5Q29kZWNfRW5jb2RlCi1QeUNvZGVjX0VuY29kZXIKLVB5Q29kZWNfSWdub3JlRXJyb3JzCi1QeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlcgotUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIKLVB5Q29kZWNfS25vd25FbmNvZGluZwotUHlDb2RlY19Mb29rdXBFcnJvcgotUHlDb2RlY19SZWdpc3RlcgotUHlDb2RlY19SZWdpc3RlckVycm9yCi1QeUNvZGVjX1JlcGxhY2VFcnJvcnMKLVB5Q29kZWNfU3RyZWFtUmVhZGVyCi1QeUNvZGVjX1N0cmVhbVdyaXRlcgotUHlDb2RlY19TdHJpY3RFcnJvcnMKLVB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMKLVB5Q29tcGxleF9Gcm9tRG91YmxlcwotUHlDb21wbGV4X0ltYWdBc0RvdWJsZQotUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotUHlDb21wbGV4X1R5cGUKLVB5RGVzY3JfTmV3Q2xhc3NNZXRob2QKLVB5RGVzY3JfTmV3R2V0U2V0Ci1QeURlc2NyX05ld01lbWJlcgotUHlEZXNjcl9OZXdNZXRob2QKLVB5RGljdEl0ZW1zX1R5cGUKLVB5RGljdEl0ZXJJdGVtX1R5cGUKLVB5RGljdEl0ZXJLZXlfVHlwZQotUHlEaWN0SXRlclZhbHVlX1R5cGUKLVB5RGljdEtleXNfVHlwZQotUHlEaWN0UHJveHlfTmV3Ci1QeURpY3RQcm94eV9UeXBlCi1QeURpY3RWYWx1ZXNfVHlwZQotUHlEaWN0X0NsZWFyCi1QeURpY3RfQ29udGFpbnMKLVB5RGljdF9Db3B5Ci1QeURpY3RfRGVsSXRlbQotUHlEaWN0X0RlbEl0ZW1TdHJpbmcKLVB5RGljdF9HZXRJdGVtCi1QeURpY3RfR2V0SXRlbVN0cmluZwotUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IKLVB5RGljdF9JdGVtcwotUHlEaWN0X0tleXMKLVB5RGljdF9NZXJnZQotUHlEaWN0X01lcmdlRnJvbVNlcTIKLVB5RGljdF9OZXcKLVB5RGljdF9OZXh0Ci1QeURpY3RfU2V0SXRlbQotUHlEaWN0X1NldEl0ZW1TdHJpbmcKLVB5RGljdF9TaXplCi1QeURpY3RfVHlwZQotUHlEaWN0X1VwZGF0ZQotUHlEaWN0X1ZhbHVlcwotUHlFbGxpcHNpc19UeXBlCi1QeUVudW1fVHlwZQotUHlFcnJfQmFkQXJndW1lbnQKLVB5RXJyX0JhZEludGVybmFsQ2FsbAotUHlFcnJfQ2hlY2tTaWduYWxzCi1QeUVycl9DbGVhcgotUHlFcnJfRGlzcGxheQotUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcwotUHlFcnJfRmV0Y2gKLVB5RXJyX0Zvcm1hdAotUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzCi1QeUVycl9OZXdFeGNlcHRpb24KLVB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKLVB5RXJyX05vTWVtb3J5Ci1QeUVycl9Ob3JtYWxpemVFeGNlcHRpb24KLVB5RXJyX09jY3VycmVkCi1QeUVycl9QcmludAotUHlFcnJfUHJpbnRFeAotUHlFcnJfUHJvZ3JhbVRleHQKLVB5RXJyX1Jlc3RvcmUKLVB5RXJyX1NldEZyb21FcnJubwotUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi1QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QKLVB5RXJyX1NldEludGVycnVwdAotUHlFcnJfU2V0Tm9uZQotUHlFcnJfU2V0T2JqZWN0Ci1QeUVycl9TZXRTdHJpbmcKLVB5RXJyX1N5bnRheExvY2F0aW9uCi1QeUVycl9XYXJuRXgKLVB5RXJyX1dhcm5FeHBsaWNpdAotUHlFcnJfV2FybkZvcm1hdAotUHlFcnJfV3JpdGVVbnJhaXNhYmxlCi1QeUV2YWxfQWNxdWlyZUxvY2sKLVB5RXZhbF9BY3F1aXJlVGhyZWFkCi1QeUV2YWxfQ2FsbEZ1bmN0aW9uCi1QeUV2YWxfQ2FsbE1ldGhvZAotUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKLVB5RXZhbF9FdmFsQ29kZQotUHlFdmFsX0V2YWxDb2RlRXgKLVB5RXZhbF9FdmFsRnJhbWUKLVB5RXZhbF9FdmFsRnJhbWVFeAotUHlFdmFsX0dldEJ1aWx0aW5zCi1QeUV2YWxfR2V0Q2FsbFN0YXRzCi1QeUV2YWxfR2V0RnJhbWUKLVB5RXZhbF9HZXRGdW5jRGVzYwotUHlFdmFsX0dldEZ1bmNOYW1lCi1QeUV2YWxfR2V0R2xvYmFscwotUHlFdmFsX0dldExvY2FscwotUHlFdmFsX0luaXRUaHJlYWRzCi1QeUV2YWxfUmVJbml0VGhyZWFkcwotUHlFdmFsX1JlbGVhc2VMb2NrCi1QeUV2YWxfUmVsZWFzZVRocmVhZAotUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLVB5RXZhbF9TYXZlVGhyZWFkCi1QeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkCi1QeUV4Y19Bcml0aG1ldGljRXJyb3IKLVB5RXhjX0Fzc2VydGlvbkVycm9yCi1QeUV4Y19BdHRyaWJ1dGVFcnJvcgotUHlFeGNfQmFzZUV4Y2VwdGlvbgotUHlFeGNfQnVmZmVyRXJyb3IKLVB5RXhjX0J5dGVzV2FybmluZwotUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nCi1QeUV4Y19FT0ZFcnJvcgotUHlFeGNfRW52aXJvbm1lbnRFcnJvcgotUHlFeGNfRXhjZXB0aW9uCi1QeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IKLVB5RXhjX0Z1dHVyZVdhcm5pbmcKLVB5RXhjX0dlbmVyYXRvckV4aXQKLVB5RXhjX0lPRXJyb3IKLVB5RXhjX0ltcG9ydEVycm9yCi1QeUV4Y19JbXBvcnRXYXJuaW5nCi1QeUV4Y19JbmRlbnRhdGlvbkVycm9yCi1QeUV4Y19JbmRleEVycm9yCi1QeUV4Y19LZXlFcnJvcgotUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQKLVB5RXhjX0xvb2t1cEVycm9yCi1QeUV4Y19NZW1vcnlFcnJvcgotUHlFeGNfTWVtb3J5RXJyb3JJbnN0Ci1QeUV4Y19OYW1lRXJyb3IKLVB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IKLVB5RXhjX09TRXJyb3IKLVB5RXhjX092ZXJmbG93RXJyb3IKLVB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcKLVB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdAotUHlFeGNfUmVmZXJlbmNlRXJyb3IKLVB5RXhjX1J1bnRpbWVFcnJvcgotUHlFeGNfUnVudGltZVdhcm5pbmcKLVB5RXhjX1N0b3BJdGVyYXRpb24KLVB5RXhjX1N5bnRheEVycm9yCi1QeUV4Y19TeW50YXhXYXJuaW5nCi1QeUV4Y19TeXN0ZW1FcnJvcgotUHlFeGNfU3lzdGVtRXhpdAotUHlFeGNfVGFiRXJyb3IKLVB5RXhjX1R5cGVFcnJvcgotUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IKLVB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcgotUHlFeGNfVW5pY29kZUVuY29kZUVycm9yCi1QeUV4Y19Vbmljb2RlRXJyb3IKLVB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvcgotUHlFeGNfVW5pY29kZVdhcm5pbmcKLVB5RXhjX1VzZXJXYXJuaW5nCi1QeUV4Y19WYWx1ZUVycm9yCi1QeUV4Y19XYXJuaW5nCi1QeUV4Y19aZXJvRGl2aXNpb25FcnJvcgotUHlFeGNlcHRpb25fR2V0Q2F1c2UKLVB5RXhjZXB0aW9uX0dldENvbnRleHQKLVB5RXhjZXB0aW9uX0dldFRyYWNlYmFjawotUHlFeGNlcHRpb25fU2V0Q2F1c2UKLVB5RXhjZXB0aW9uX1NldENvbnRleHQKLVB5RXhjZXB0aW9uX1NldFRyYWNlYmFjawotUHlGaWxlX0Zyb21GZAotUHlGaWxlX0dldExpbmUKLVB5RmlsZV9Xcml0ZU9iamVjdAotUHlGaWxlX1dyaXRlU3RyaW5nCi1QeUZpbHRlcl9UeXBlCi1QeUZsb2F0X0FzRG91YmxlCi1QeUZsb2F0X0Zyb21Eb3VibGUKLVB5RmxvYXRfRnJvbVN0cmluZwotUHlGbG9hdF9HZXRJbmZvCi1QeUZsb2F0X0dldE1heAotUHlGbG9hdF9HZXRNaW4KLVB5RmxvYXRfVHlwZQotUHlGcm96ZW5TZXRfTmV3Ci1QeUZyb3plblNldF9UeXBlCi1QeUdDX0NvbGxlY3QKLVB5R0lMU3RhdGVfRW5zdXJlCi1QeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZQotUHlHSUxTdGF0ZV9SZWxlYXNlCi1QeUdldFNldERlc2NyX1R5cGUKLVB5SW1wb3J0X0FkZE1vZHVsZQotUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgotUHlJbXBvcnRfQ2xlYW51cAotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcwotUHlJbXBvcnRfR2V0SW1wb3J0ZXIKLVB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCi1QeUltcG9ydF9HZXRNYWdpY1RhZwotUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotUHlJbXBvcnRfSW1wb3J0Ci1QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLVB5SW1wb3J0X0ltcG9ydE1vZHVsZQotUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwKLVB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKLVB5SW1wb3J0X1JlbG9hZE1vZHVsZQotUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCi1QeUludGVycHJldGVyU3RhdGVfRGVsZXRlCi1QeUludGVycHJldGVyU3RhdGVfTmV3Ci1QeUl0ZXJfTmV4dAotUHlMaXN0SXRlcl9UeXBlCi1QeUxpc3RSZXZJdGVyX1R5cGUKLVB5TGlzdF9BcHBlbmQKLVB5TGlzdF9Bc1R1cGxlCi1QeUxpc3RfR2V0SXRlbQotUHlMaXN0X0dldFNsaWNlCi1QeUxpc3RfSW5zZXJ0Ci1QeUxpc3RfTmV3Ci1QeUxpc3RfUmV2ZXJzZQotUHlMaXN0X1NldEl0ZW0KLVB5TGlzdF9TZXRTbGljZQotUHlMaXN0X1NpemUKLVB5TGlzdF9Tb3J0Ci1QeUxpc3RfVHlwZQotUHlMb25nUmFuZ2VJdGVyX1R5cGUKLVB5TG9uZ19Bc0RvdWJsZQotUHlMb25nX0FzTG9uZwotUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93Ci1QeUxvbmdfQXNMb25nTG9uZwotUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdwotUHlMb25nX0FzU2l6ZV90Ci1QeUxvbmdfQXNTc2l6ZV90Ci1QeUxvbmdfQXNVbnNpZ25lZExvbmcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCi1QeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrCi1QeUxvbmdfQXNWb2lkUHRyCi1QeUxvbmdfRnJvbURvdWJsZQotUHlMb25nX0Zyb21Mb25nCi1QeUxvbmdfRnJvbUxvbmdMb25nCi1QeUxvbmdfRnJvbVNpemVfdAotUHlMb25nX0Zyb21Tc2l6ZV90Ci1QeUxvbmdfRnJvbVN0cmluZwotUHlMb25nX0Zyb21VbnNpZ25lZExvbmcKLVB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZwotUHlMb25nX0Zyb21Wb2lkUHRyCi1QeUxvbmdfR2V0SW5mbwotUHlMb25nX1R5cGUKLVB5TWFwX1R5cGUKLVB5TWFwcGluZ19DaGVjawotUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKLVB5TWFwcGluZ19IYXNLZXkKLVB5TWFwcGluZ19IYXNLZXlTdHJpbmcKLVB5TWFwcGluZ19JdGVtcwotUHlNYXBwaW5nX0tleXMKLVB5TWFwcGluZ19MZW5ndGgKLVB5TWFwcGluZ19TZXRJdGVtU3RyaW5nCi1QeU1hcHBpbmdfU2l6ZQotUHlNYXBwaW5nX1ZhbHVlcwotUHlNZW1fRnJlZQotUHlNZW1fTWFsbG9jCi1QeU1lbV9SZWFsbG9jCi1QeU1lbWJlckRlc2NyX1R5cGUKLVB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0Ci1QeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cwotUHlNZW1vcnlWaWV3X1R5cGUKLVB5TWV0aG9kRGVzY3JfVHlwZQotUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKLVB5TW9kdWxlX0FkZE9iamVjdAotUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQKLVB5TW9kdWxlX0NyZWF0ZTIKLVB5TW9kdWxlX0dldERlZgotUHlNb2R1bGVfR2V0RGljdAotUHlNb2R1bGVfR2V0RmlsZW5hbWUKLVB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0Ci1QeU1vZHVsZV9HZXROYW1lCi1QeU1vZHVsZV9HZXRTdGF0ZQotUHlNb2R1bGVfTmV3Ci1QeU1vZHVsZV9UeXBlCi1QeU51bGxJbXBvcnRlcl9UeXBlCi1QeU51bWJlcl9BYnNvbHV0ZQotUHlOdW1iZXJfQWRkCi1QeU51bWJlcl9BbmQKLVB5TnVtYmVyX0FzU3NpemVfdAotUHlOdW1iZXJfQ2hlY2sKLVB5TnVtYmVyX0Rpdm1vZAotUHlOdW1iZXJfRmxvYXQKLVB5TnVtYmVyX0Zsb29yRGl2aWRlCi1QeU51bWJlcl9JblBsYWNlQWRkCi1QeU51bWJlcl9JblBsYWNlQW5kCi1QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKLVB5TnVtYmVyX0luUGxhY2VMc2hpZnQKLVB5TnVtYmVyX0luUGxhY2VNdWx0aXBseQotUHlOdW1iZXJfSW5QbGFjZU9yCi1QeU51bWJlcl9JblBsYWNlUG93ZXIKLVB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIKLVB5TnVtYmVyX0luUGxhY2VSc2hpZnQKLVB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAotUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUKLVB5TnVtYmVyX0luUGxhY2VYb3IKLVB5TnVtYmVyX0luZGV4Ci1QeU51bWJlcl9JbnZlcnQKLVB5TnVtYmVyX0xvbmcKLVB5TnVtYmVyX0xzaGlmdAotUHlOdW1iZXJfTXVsdGlwbHkKLVB5TnVtYmVyX05lZ2F0aXZlCi1QeU51bWJlcl9PcgotUHlOdW1iZXJfUG9zaXRpdmUKLVB5TnVtYmVyX1Bvd2VyCi1QeU51bWJlcl9SZW1haW5kZXIKLVB5TnVtYmVyX1JzaGlmdAotUHlOdW1iZXJfU3VidHJhY3QKLVB5TnVtYmVyX1RvQmFzZQotUHlOdW1iZXJfVHJ1ZURpdmlkZQotUHlOdW1iZXJfWG9yCi1QeU9TX0FmdGVyRm9yawotUHlPU19Jbml0SW50ZXJydXB0cwotUHlPU19JbnB1dEhvb2sKLVB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLVB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIKLVB5T1NfZG91YmxlX3RvX3N0cmluZwotUHlPU19nZXRzaWcKLVB5T1NfbXlzdHJpY21wCi1QeU9TX215c3RybmljbXAKLVB5T1Nfc2V0c2lnCi1QeU9TX3NucHJpbnRmCi1QeU9TX3N0cmluZ190b19kb3VibGUKLVB5T1Nfc3RydG9sCi1QeU9TX3N0cnRvdWwKLVB5T1NfdnNucHJpbnRmCi1QeU9iamVjdF9BU0NJSQotUHlPYmplY3RfQXNDaGFyQnVmZmVyCi1QeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yCi1QeU9iamVjdF9Bc1JlYWRCdWZmZXIKLVB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKLVB5T2JqZWN0X0J5dGVzCi1QeU9iamVjdF9DYWxsCi1QeU9iamVjdF9DYWxsRnVuY3Rpb24KLVB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MKLVB5T2JqZWN0X0NhbGxNZXRob2QKLVB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzCi1QeU9iamVjdF9DYWxsT2JqZWN0Ci1QeU9iamVjdF9DaGVja1JlYWRCdWZmZXIKLVB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKLVB5T2JqZWN0X0RlbEl0ZW0KLVB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcKLVB5T2JqZWN0X0RpcgotUHlPYmplY3RfRm9ybWF0Ci1QeU9iamVjdF9GcmVlCi1QeU9iamVjdF9HQ19EZWwKLVB5T2JqZWN0X0dDX1RyYWNrCi1QeU9iamVjdF9HQ19VblRyYWNrCi1QeU9iamVjdF9HZW5lcmljR2V0QXR0cgotUHlPYmplY3RfR2VuZXJpY1NldEF0dHIKLVB5T2JqZWN0X0dldEF0dHIKLVB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLVB5T2JqZWN0X0dldEl0ZW0KLVB5T2JqZWN0X0dldEl0ZXIKLVB5T2JqZWN0X0hhc0F0dHIKLVB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLVB5T2JqZWN0X0hhc2gKLVB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZAotUHlPYmplY3RfSW5pdAotUHlPYmplY3RfSW5pdFZhcgotUHlPYmplY3RfSXNJbnN0YW5jZQotUHlPYmplY3RfSXNTdWJjbGFzcwotUHlPYmplY3RfSXNUcnVlCi1QeU9iamVjdF9MZW5ndGgKLVB5T2JqZWN0X01hbGxvYwotUHlPYmplY3RfTm90Ci1QeU9iamVjdF9SZWFsbG9jCi1QeU9iamVjdF9SZXByCi1QeU9iamVjdF9SaWNoQ29tcGFyZQotUHlPYmplY3RfUmljaENvbXBhcmVCb29sCi1QeU9iamVjdF9TZWxmSXRlcgotUHlPYmplY3RfU2V0QXR0cgotUHlPYmplY3RfU2V0QXR0clN0cmluZwotUHlPYmplY3RfU2V0SXRlbQotUHlPYmplY3RfU2l6ZQotUHlPYmplY3RfU3RyCi1QeU9iamVjdF9UeXBlCi1QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncwotUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncwotUHlQcm9wZXJ0eV9UeXBlCi1QeVJhbmdlSXRlcl9UeXBlCi1QeVJhbmdlX1R5cGUKLVB5UmV2ZXJzZWRfVHlwZQotUHlTZXFJdGVyX05ldwotUHlTZXFJdGVyX1R5cGUKLVB5U2VxdWVuY2VfQ2hlY2sKLVB5U2VxdWVuY2VfQ29uY2F0Ci1QeVNlcXVlbmNlX0NvbnRhaW5zCi1QeVNlcXVlbmNlX0NvdW50Ci1QeVNlcXVlbmNlX0RlbEl0ZW0KLVB5U2VxdWVuY2VfRGVsU2xpY2UKLVB5U2VxdWVuY2VfRmFzdAotUHlTZXF1ZW5jZV9HZXRJdGVtCi1QeVNlcXVlbmNlX0dldFNsaWNlCi1QeVNlcXVlbmNlX0luCi1QeVNlcXVlbmNlX0luUGxhY2VDb25jYXQKLVB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdAotUHlTZXF1ZW5jZV9JbmRleAotUHlTZXF1ZW5jZV9MZW5ndGgKLVB5U2VxdWVuY2VfTGlzdAotUHlTZXF1ZW5jZV9SZXBlYXQKLVB5U2VxdWVuY2VfU2V0SXRlbQotUHlTZXF1ZW5jZV9TZXRTbGljZQotUHlTZXF1ZW5jZV9TaXplCi1QeVNlcXVlbmNlX1R1cGxlCi1QeVNldEl0ZXJfVHlwZQotUHlTZXRfQWRkCi1QeVNldF9DbGVhcgotUHlTZXRfQ29udGFpbnMKLVB5U2V0X0Rpc2NhcmQKLVB5U2V0X05ldwotUHlTZXRfUG9wCi1QeVNldF9TaXplCi1QeVNldF9UeXBlCi1QeVNsaWNlX0dldEluZGljZXMKLVB5U2xpY2VfR2V0SW5kaWNlc0V4Ci1QeVNsaWNlX05ldwotUHlTbGljZV9UeXBlCi1QeVNvcnRXcmFwcGVyX1R5cGUKLVB5U3RhdGVfRmluZE1vZHVsZQotUHlTdGF0ZV9BZGRNb2R1bGUKLVB5U3RhdGVfUmVtb3ZlTW9kdWxlCi1QeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KLVB5U3RydWN0U2VxdWVuY2VfTmV3Ci1QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKLVB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQotUHlTdXBlcl9UeXBlCi1QeVN5c19BZGRXYXJuT3B0aW9uCi1QeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZQotUHlTeXNfRm9ybWF0U3RkZXJyCi1QeVN5c19Gb3JtYXRTdGRvdXQKLVB5U3lzX0dldE9iamVjdAotUHlTeXNfSGFzV2Fybk9wdGlvbnMKLVB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMKLVB5U3lzX1NldEFyZ3YKLVB5U3lzX1NldEFyZ3ZFeAotUHlTeXNfU2V0T2JqZWN0Ci1QeVN5c19TZXRQYXRoCi1QeVN5c19Xcml0ZVN0ZGVycgotUHlTeXNfV3JpdGVTdGRvdXQKLVB5VGhyZWFkU3RhdGVfQ2xlYXIKLVB5VGhyZWFkU3RhdGVfRGVsZXRlCi1QeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQKLVB5VGhyZWFkU3RhdGVfR2V0Ci1QeVRocmVhZFN0YXRlX0dldERpY3QKLVB5VGhyZWFkU3RhdGVfTmV3Ci1QeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCi1QeVRocmVhZFN0YXRlX1N3YXAKLVB5VHJhY2VCYWNrX0hlcmUKLVB5VHJhY2VCYWNrX1ByaW50Ci1QeVRyYWNlQmFja19UeXBlCi1QeVR1cGxlSXRlcl9UeXBlCi1QeVR1cGxlX0NsZWFyRnJlZUxpc3QKLVB5VHVwbGVfR2V0SXRlbQotUHlUdXBsZV9HZXRTbGljZQotUHlUdXBsZV9OZXcKLVB5VHVwbGVfUGFjawotUHlUdXBsZV9TZXRJdGVtCi1QeVR1cGxlX1NpemUKLVB5VHVwbGVfVHlwZQotUHlUeXBlX0NsZWFyQ2FjaGUKLVB5VHlwZV9Gcm9tU3BlYwotUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzCi1QeVR5cGVfR2VuZXJpY0FsbG9jCi1QeVR5cGVfR2VuZXJpY05ldwotUHlUeXBlX0dldEZsYWdzCi1QeVR5cGVfR2V0U2xvdAotUHlUeXBlX0lzU3VidHlwZQotUHlUeXBlX01vZGlmaWVkCi1QeVR5cGVfUmVhZHkKLVB5VHlwZV9UeXBlCi1QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKLVB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nCi1QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQKLVB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdAotUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uCi1QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAotUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCi1QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KLVB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0Ci1QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZwotUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kCi1QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QKLVB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbgotUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKLVB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAotUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCi1QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAotUHlVbmljb2RlSXRlcl9UeXBlCi1QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQKLVB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdAotUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uCi1QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAotUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCi1QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KLVB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0Ci1QeVVuaWNvZGVfQXBwZW5kCi1QeVVuaWNvZGVfQXBwZW5kQW5kRGVsCi1QeVVuaWNvZGVfQXNBU0NJSVN0cmluZwotUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZwotUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdAotUHlVbmljb2RlX0FzRGVjb2RlZFVuaWNvZGUKLVB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3QKLVB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcKLVB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlCi1QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcKLVB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKLVB5VW5pY29kZV9Bc1VURjE2U3RyaW5nCi1QeVVuaWNvZGVfQXNVVEYzMlN0cmluZwotUHlVbmljb2RlX0FzVVRGOFN0cmluZwotUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZwotUHlVbmljb2RlX0FzV2lkZUNoYXIKLVB5VW5pY29kZV9DbGVhckZyZWVsaXN0Ci1QeVVuaWNvZGVfQ29tcGFyZQotUHlVbmljb2RlX0NvbmNhdAotUHlVbmljb2RlX0NvbnRhaW5zCi1QeVVuaWNvZGVfQ291bnQKLVB5VW5pY29kZV9EZWNvZGUKLVB5VW5pY29kZV9EZWNvZGVBU0NJSQotUHlVbmljb2RlX0RlY29kZUNoYXJtYXAKLVB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQKLVB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplCi1QeVVuaWNvZGVfRGVjb2RlTGF0aW4xCi1QeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZQotUHlVbmljb2RlX0RlY29kZVVURjE2Ci1QeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bAotUHlVbmljb2RlX0RlY29kZVVURjMyCi1QeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bAotUHlVbmljb2RlX0RlY29kZVVURjgKLVB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwKLVB5VW5pY29kZV9EZWNvZGVVbmljb2RlRXNjYXBlCi1QeVVuaWNvZGVfRlNDb252ZXJ0ZXIKLVB5VW5pY29kZV9GU0RlY29kZXIKLVB5VW5pY29kZV9GaW5kCi1QeVVuaWNvZGVfRm9ybWF0Ci1QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QKLVB5VW5pY29kZV9Gcm9tRm9ybWF0Ci1QeVVuaWNvZGVfRnJvbUZvcm1hdFYKLVB5VW5pY29kZV9Gcm9tT2JqZWN0Ci1QeVVuaWNvZGVfRnJvbU9yZGluYWwKLVB5VW5pY29kZV9Gcm9tU3RyaW5nCi1QeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUKLVB5VW5pY29kZV9Gcm9tV2lkZUNoYXIKLVB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2RpbmcKLVB5VW5pY29kZV9HZXRTaXplCi1QeVVuaWNvZGVfSXNJZGVudGlmaWVyCi1QeVVuaWNvZGVfSm9pbgotUHlVbmljb2RlX1BhcnRpdGlvbgotUHlVbmljb2RlX1JQYXJ0aXRpb24KLVB5VW5pY29kZV9SU3BsaXQKLVB5VW5pY29kZV9SZXBsYWNlCi1QeVVuaWNvZGVfUmVzaXplCi1QeVVuaWNvZGVfUmljaENvbXBhcmUKLVB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2RpbmcKLVB5VW5pY29kZV9TcGxpdAotUHlVbmljb2RlX1NwbGl0bGluZXMKLVB5VW5pY29kZV9UYWlsbWF0Y2gKLVB5VW5pY29kZV9UcmFuc2xhdGUKLVB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCi1QeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZwotUHlVbmljb2RlX0RlY29kZVVURjcKLVB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWwKLVB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKLVB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nCi1QeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWwKLVB5VW5pY29kZV9JbnRlcm5JblBsYWNlCi1QeVVuaWNvZGVfVHlwZQotUHlXZWFrcmVmX0dldE9iamVjdAotUHlXZWFrcmVmX05ld1Byb3h5Ci1QeVdlYWtyZWZfTmV3UmVmCi1QeVdyYXBwZXJEZXNjcl9UeXBlCi1QeVdyYXBwZXJfTmV3Ci1QeVppcF9UeXBlCi1QeV9BZGRQZW5kaW5nQ2FsbAotUHlfQXRFeGl0Ci1QeV9CdWlsZFZhbHVlCi1QeV9Db21waWxlU3RyaW5nCi1QeV9EZWNSZWYKLVB5X0VuZEludGVycHJldGVyCi1QeV9FeGl0Ci1QeV9GYXRhbEVycm9yCi1QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nCi1QeV9GaW5hbGl6ZQotUHlfR2V0QnVpbGRJbmZvCi1QeV9HZXRDb21waWxlcgotUHlfR2V0Q29weXJpZ2h0Ci1QeV9HZXRFeGVjUHJlZml4Ci1QeV9HZXRQYXRoCi1QeV9HZXRQbGF0Zm9ybQotUHlfR2V0UHJlZml4Ci1QeV9HZXRQcm9ncmFtRnVsbFBhdGgKLVB5X0dldFByb2dyYW1OYW1lCi1QeV9HZXRQeXRob25Ib21lCi1QeV9HZXRSZWN1cnNpb25MaW1pdAotUHlfR2V0VmVyc2lvbgotUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZwotUHlfSW5jUmVmCi1QeV9Jbml0aWFsaXplCi1QeV9Jbml0aWFsaXplRXgKLVB5X0lzSW5pdGlhbGl6ZWQKLVB5X01haW4KLVB5X01ha2VQZW5kaW5nQ2FsbHMKLVB5X05ld0ludGVycHJldGVyCi1QeV9SZXByRW50ZXIKLVB5X1JlcHJMZWF2ZQotUHlfU2V0UHJvZ3JhbU5hbWUKLVB5X1NldFB5dGhvbkhvbWUKLVB5X1NldFJlY3Vyc2lvbkxpbWl0Ci1QeV9TeW10YWJsZVN0cmluZwotUHlfVmFCdWlsZFZhbHVlCi1fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi1fUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUCi1fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAotX1B5T2JqZWN0X0dDX01hbGxvYwotX1B5T2JqZWN0X0dDX05ldwotX1B5T2JqZWN0X0dDX05ld1ZhcgotX1B5T2JqZWN0X0dDX1Jlc2l6ZQotX1B5T2JqZWN0X05ldwotX1B5T2JqZWN0X05ld1ZhcgotX1B5U3RhdGVfQWRkTW9kdWxlCi1fUHlUaHJlYWRTdGF0ZV9Jbml0Ci1fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYwotX1B5VHJhc2hfZGVsZXRlX2xhdGVyCi1fUHlUcmFzaF9kZWxldGVfbmVzdGluZwotX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKLV9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KLV9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGUKLV9QeVdlYWtyZWZfUHJveHlUeXBlCi1fUHlXZWFrcmVmX1JlZlR5cGUKLV9QeV9CdWlsZFZhbHVlX1NpemVUCi1fUHlfQ2hlY2tSZWN1cnNpb25MaW1pdAotX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbAotX1B5X0RlYWxsb2MKLV9QeV9FbGxpcHNpc09iamVjdAotX1B5X0ZhbHNlU3RydWN0Ci1fUHlfTm9uZVN0cnVjdAotX1B5X05vdEltcGxlbWVudGVkU3RydWN0Ci1fUHlfU3dhcHBlZE9wCi1fUHlfVHJ1ZVN0cnVjdAotX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAotX1B5QXJnX1BhcnNlX1NpemVUCi1fUHlBcmdfUGFyc2VUdXBsZV9TaXplVAotX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotX1B5QXJnX1ZhUGFyc2VfU2l6ZVQKLV9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotX1B5X0J1aWxkVmFsdWVfU2l6ZVQKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbl9leGUucmMgYi9QQy9weXRob25fZXhlLnJjCmluZGV4IDE0ZTI1NzQuLjkxNzg1YTEgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbl9leGUucmMKKysrIGIvUEMvcHl0aG9uX2V4ZS5yYwpAQCAtMSArMSw0OSBAQAotMSAgICAgICAgICAgSUNPTiAgICBESVNDQVJEQUJMRSAgICAgInB5Y29uLmljbyIgCisvLyBSZXNvdXJjZSBzY3JpcHQgZm9yIFB5dGhvbiBjb25zb2xlIEVYRXMuCisKKyNpbmNsdWRlICJweXRob25fdmVyX3JjLmgiCisKKy8vIEluY2x1ZGUgdGhlIG1hbmlmZXN0IGZpbGUgdGhhdCBpbmRpY2F0ZXMgd2Ugc3VwcG9ydCBhbGwKKy8vIGN1cnJlbnQgdmVyc2lvbnMgb2YgV2luZG93cy4KKyNpbmNsdWRlIDx3aW51c2VyLmg+CisxIFJUX01BTklGRVNUICJweXRob24ubWFuaWZlc3QiCisKKzEgSUNPTiBESVNDQVJEQUJMRSAicHljb24uaWNvIiAKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFZlcnNpb24KKy8vCisKK1ZTX1ZFUlNJT05fSU5GTyBWRVJTSU9OSU5GTworIEZJTEVWRVJTSU9OIFBZVkVSU0lPTjY0CisgUFJPRFVDVFZFUlNJT04gUFlWRVJTSU9ONjQKKyBGSUxFRkxBR1NNQVNLIDB4M2ZMCisjaWZkZWYgX0RFQlVHCisgRklMRUZMQUdTIFZTX0ZGX0RFQlVHCisjZWxzZQorIEZJTEVGTEFHUyAweDBMCisjZW5kaWYKKyBGSUxFT1MgVk9TX19XSU5ET1dTMzIKKyBGSUxFVFlQRSBWRlRfQVBQCisgRklMRVNVQlRZUEUgMHgwTAorQkVHSU4KKyAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCisgICAgQkVHSU4KKyAgICAgICAgQkxPQ0sgIjAwMDAwNGIwIgorICAgICAgICBCRUdJTgorICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgUFlUSE9OX0NPTVBBTlkgIlwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJQeXRob25cMCIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFBZVEhPTl9WRVJTSU9OCisgICAgICAgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgIlB5dGhvbiBDb25zb2xlXDAiCisgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCBQWVRIT05fQ09QWVJJR0hUICJcMCIKKyAgICAgICAgICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgInB5dGhvbiIgUFlUSE9OX0RFQlVHX0VYVCAiLmV4ZVwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlB5dGhvblwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgUFlUSE9OX1ZFUlNJT04KKyAgICAgICAgRU5ECisgICAgRU5ECisgICAgQkxPQ0sgIlZhckZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4MCwgMTIwMAorICAgIEVORAorRU5ECmRpZmYgLS1naXQgYS9QQy9weXRob25fbnQucmMgYi9QQy9weXRob25fbnQucmMKaW5kZXggMGZiZGJlMC4uZmFjNjEwNSAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uX250LnJjCisrKyBiL1BDL3B5dGhvbl9udC5yYwpAQCAtMSwzMyArMSwxMSBAQAogLy8gUmVzb3VyY2Ugc2NyaXB0IGZvciBQeXRob24gY29yZSBETEwuCi0vLyBDdXJyZW50bHkgb25seSBob2xkcyB2ZXJzaW9uIGluZm9ybWF0aW9uLgotLy8KLSNpbmNsdWRlICJ3aW52ZXIuaCIKIAotI2RlZmluZSBNU19XSU5ET1dTCi0jaW5jbHVkZSAibW9kc3VwcG9ydC5oIgotI2luY2x1ZGUgInBhdGNobGV2ZWwuaCIKLSNpZmRlZiBfREVCVUcKLSMgICBpbmNsdWRlICJweXRob25udF9yY19kLmgiCi0jZWxzZQotIyAgIGluY2x1ZGUgInB5dGhvbm50X3JjLmgiCi0jZW5kaWYKKyNpbmNsdWRlICJweXRob25fdmVyX3JjLmgiCiAKLS8qIGUuZy4sIDMuMy4wYTEKLSAqIFBZX1ZFUlNJT04gY29tZXMgZnJvbSBwYXRjaGV2ZWwuaAotICovCi0jZGVmaW5lIFBZVEhPTl9WRVJTSU9OIFBZX1ZFUlNJT04gIlwwIgotCi0vKiA2NC1iaXQgdmVyc2lvbiBudW1iZXIgYXMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgNCAxNi1iaXQgaW50cyAqLwotI2lmIFBZX01JQ1JPX1ZFUlNJT04gPiA2NAotIyAgIGVycm9yICJQWV9NSUNST19WRVJTSU9OID4gNjQiCi0jZW5kaWYKLSNpZiBQWV9SRUxFQVNFX0xFVkVMID4gOTkKLSMgICBlcnJvciAiUFlfUkVMRUFTRV9MRVZFTCA+IDk5IgotI2VuZGlmCi0jaWYgUFlfUkVMRUFTRV9TRVJJQUwgPiA5Ci0jICAgZXJyb3IgIlBZX1JFTEVBU0VfU0VSSUFMID4gOSIKLSNlbmRpZgotI2RlZmluZSBQWVZFUlNJT042NCBQWV9NQUpPUl9WRVJTSU9OLCBQWV9NSU5PUl9WRVJTSU9OLCBGSUVMRDMsIFBZVEhPTl9BUElfVkVSU0lPTgorLy8gSW5jbHVkZSB0aGUgbWFuaWZlc3QgZmlsZSB0aGF0IGluZGljYXRlcyB3ZSBzdXBwb3J0IGFsbAorLy8gY3VycmVudCB2ZXJzaW9ucyBvZiBXaW5kb3dzLgorI2luY2x1ZGUgPHdpbnVzZXIuaD4KKzIgUlRfTUFOSUZFU1QgInB5dGhvbi5tYW5pZmVzdCIKIAogLy8gU3RyaW5nIFRhYmxlcwogU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQEAgLTQ1LDIzICsyMywyMyBAQAogIFBST0RVQ1RWRVJTSU9OIFBZVkVSU0lPTjY0CiAgRklMRUZMQUdTTUFTSyAweDNmTAogI2lmZGVmIF9ERUJVRwotIEZJTEVGTEFHUyAweDFMCisgRklMRUZMQUdTIFZTX0ZGX0RFQlVHCiAjZWxzZQogIEZJTEVGTEFHUyAweDBMCiAjZW5kaWYKLSBGSUxFT1MgMHg0MDAwNEwKLSBGSUxFVFlQRSAweDFMCisgRklMRU9TIFZPU19fV0lORE9XUzMyCisgRklMRVRZUEUgVkZUX0RMTAogIEZJTEVTVUJUWVBFIDB4MEwKIEJFR0lOCiAgICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgIEJFR0lOCiAgICAgICAgIEJMT0NLICIwMDAwMDRiMCIKICAgICAgICAgQkVHSU4KLSAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJQeXRob24gU29mdHdhcmUgRm91bmRhdGlvblwwIgorICAgICAgICAgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgUFlUSE9OX0NPTVBBTlkgIlwwIgogICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJQeXRob24gQ29yZVwwIgogICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgUFlUSE9OX1ZFUlNJT04KICAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAiUHl0aG9uIERMTFwwIgotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDIwMDEtMjAxNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gQ29weXJpZ2h0IKkgMjAwMCBCZU9wZW4uY29tLiBDb3B5cmlnaHQgqSAxOTk1LTIwMDEgQ05SSS4gQ29weXJpZ2h0IKkgMTk5MS0xOTk1IFNNQy5cMCIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsIFBZVEhPTl9DT1BZUklHSFQgIlwwIgogICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCBQWVRIT05fRExMX05BTUUgIlwwIgogICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlB5dGhvblwwIgogICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgUFlUSE9OX1ZFUlNJT04KZGlmZiAtLWdpdCBhL1BDL3B5dGhvbl92ZXJfcmMuaCBiL1BDL3B5dGhvbl92ZXJfcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTVlNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvUEMvcHl0aG9uX3Zlcl9yYy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIFJlc291cmNlIHNjcmlwdCBmb3IgUHl0aG9uIGNvcmUgRExMLgorLy8gQ3VycmVudGx5IG9ubHkgaG9sZHMgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKy8vCisjaW5jbHVkZSAid2ludmVyLmgiCisKKyNkZWZpbmUgUFlUSE9OX0NPTVBBTlkgICAiUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24iCisjZGVmaW5lIFBZVEhPTl9DT1BZUklHSFQgIkNvcHlyaWdodCBceEE5IDIwMDEtMjAxNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gQ29weXJpZ2h0IFx4QTkgMjAwMCBCZU9wZW4uY29tLiBDb3B5cmlnaHQgXHhBOSAxOTk1LTIwMDEgQ05SSS4gQ29weXJpZ2h0IFx4QTkgMTk5MS0xOTk1IFNNQy4iCisKKyNkZWZpbmUgTVNfV0lORE9XUworI2luY2x1ZGUgIm1vZHN1cHBvcnQuaCIKKyNpbmNsdWRlICJwYXRjaGxldmVsLmgiCisjaW5jbHVkZSA8cHl0aG9ubnRfcmMuaD4KKyNpZmRlZiBfREVCVUcKKyMgICBkZWZpbmUgUFlUSE9OX0RFQlVHX0VYVCAiX2QiCisjZWxzZQorIyAgIGRlZmluZSBQWVRIT05fREVCVUdfRVhUCisjZW5kaWYKKworLyogZS5nLiwgMy4zLjBhMQorICogUFlfVkVSU0lPTiBjb21lcyBmcm9tIHBhdGNobGV2ZWwuaAorICovCisjZGVmaW5lIFBZVEhPTl9WRVJTSU9OIFBZX1ZFUlNJT04gIlwwIgorCisvKiA2NC1iaXQgdmVyc2lvbiBudW1iZXIgYXMgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgNCAxNi1iaXQgaW50cyAqLworI2lmIFBZX01JQ1JPX1ZFUlNJT04gPiA2NAorIyAgIGVycm9yICJQWV9NSUNST19WRVJTSU9OID4gNjQiCisjZW5kaWYKKyNpZiBQWV9SRUxFQVNFX0xFVkVMID4gOTkKKyMgICBlcnJvciAiUFlfUkVMRUFTRV9MRVZFTCA+IDk5IgorI2VuZGlmCisjaWYgUFlfUkVMRUFTRV9TRVJJQUwgPiA5CisjICAgZXJyb3IgIlBZX1JFTEVBU0VfU0VSSUFMID4gOSIKKyNlbmRpZgorI2RlZmluZSBQWVZFUlNJT042NCBQWV9NQUpPUl9WRVJTSU9OLCBQWV9NSU5PUl9WRVJTSU9OLCBGSUVMRDMsIFBZVEhPTl9BUElfVkVSU0lPTgpkaWZmIC0tZ2l0IGEvUEMvcmVhZG1lLnR4dCBiL1BDL3JlYWRtZS50eHQKaW5kZXggOTkwMDZiZi4uMGE5NmQyNiAxMDA2NDQKLS0tIGEvUEMvcmVhZG1lLnR4dAorKysgYi9QQy9yZWFkbWUudHh0CkBAIC03MiwxMSArNzIsNiBAQAogICAgICAgICAgICAgICAgdmFyaW91cyBETExzLCB0byBhdm9pZCBydW4tdGltZSByZWxvY2F0aW9uLgogCiAKLUxlZ2FjeSBzdXBwb3J0IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotVGhlIHN1YmRpcmVjdG9yaWVzIFZDNiwgVlM3LjEgYW5kIFZTOC4wIGNvbnRhaW4gbGVnYWN5IHN1cHBvcnQgb2xkZXIKLXZlcnNpb25zIG9mIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBTZWUgUENidWlsZC9yZWFkbWUudHh0LgotCiBOb3RlIGZvciBXaW5kb3dzIDMueCBhbmQgRE9TIHVzZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL1BDL3NxbGl0ZTMucmMgYi9QQy9zcWxpdGUzLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YmQ4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9QQy9zcWxpdGUzLnJjCkBAIC0wLDAgKzEsNDkgQEAKKy8vIFJlc291cmNlIHNjcmlwdCBmb3IgU3FsaXRlIERMTC4KKworI2luY2x1ZGUgPHdpbnZlci5oPgorCisvLyBJbmNsdWRlIHRoZSBtYW5pZmVzdCBmaWxlIHRoYXQgaW5kaWNhdGVzIHdlIHN1cHBvcnQgYWxsCisvLyBjdXJyZW50IHZlcnNpb25zIG9mIFdpbmRvd3MuCisjaW5jbHVkZSA8d2ludXNlci5oPgorMiBSVF9NQU5JRkVTVCAicHl0aG9uLm1hbmlmZXN0IgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFZlcnNpb24KKy8vCisKKyNkZWZpbmUgX1MoeCkgI3gKKyNkZWZpbmUgUyh4KSBfUyh4KQorCitWU19WRVJTSU9OX0lORk8gVkVSU0lPTklORk8KKyBGSUxFVkVSU0lPTiBTUUxJVEVfTUFKT1JfVkVSU0lPTiwgU1FMSVRFX01JTk9SX1ZFUlNJT04sIFNRTElURV9NSUNST19WRVJTSU9OLCBTUUxJVEVfUEFUQ0hfVkVSU0lPTgorIFBST0RVQ1RWRVJTSU9OIFNRTElURV9NQUpPUl9WRVJTSU9OLCBTUUxJVEVfTUlOT1JfVkVSU0lPTiwgU1FMSVRFX01JQ1JPX1ZFUlNJT04sIFNRTElURV9QQVRDSF9WRVJTSU9OCisgRklMRUZMQUdTTUFTSyAweDNmTAorI2lmZGVmIF9ERUJVRworIEZJTEVGTEFHUyBWU19GRl9ERUJVRworI2Vsc2UKKyBGSUxFRkxBR1MgMHgwTAorI2VuZGlmCisgRklMRU9TIFZPU19fV0lORE9XUzMyCisgRklMRVRZUEUgVkZUX0RMTAorIEZJTEVTVUJUWVBFIDB4MEwKK0JFR0lOCisgICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgorICAgIEJFR0lOCisgICAgICAgIEJMT0NLICIwMDAwMDRiMCIKKyAgICAgICAgQkVHSU4KKyAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJTUUxpdGUzXDAiCisgICAgICAgICAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIlNRTGl0ZTNcMCIKKyAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsIFMoU1FMSVRFX1ZFUlNJT04pICJcMCIKKyAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAiU1FMaXRlMyBETExcMCIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJVbnNwZWNpZmllZFwwIgorICAgICAgICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAic3FsaXRlMy5kbGxcMCIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJTUUxpdGUzXDAiCisgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBTKFNRTElURV9WRVJTSU9OKSAiXDAiCisgICAgICAgIEVORAorICAgIEVORAorICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgICBCRUdJTgorICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDAsIDEyMDAKKyAgICBFTkQKK0VORApkaWZmIC0tZ2l0IGEvUEMvdGVzdHB5LnB5IGIvUEMvdGVzdHB5LnB5CmluZGV4IDM2ZjkyMDAuLjRlZjNkNGYgMTAwNjQ0Ci0tLSBhL1BDL3Rlc3RweS5weQorKysgYi9QQy90ZXN0cHkucHkKQEAgLTE4LDggKzE4LDYgQEAKICAgYSBQQywgeW91IHNob3VsZCBhZGQgdGhlIGRvc184eDMgZGlyZWN0b3J5IHRvIHlvdXIgUFlUSE9OUEFUSC4iIiIpCiAgICAgc3lzLmV4aXQoMSkKIAotaW1wb3J0IG9zCi0KIGZvciBkaXIgaW4gc3lzLnBhdGg6CiAgICAgZmlsZSA9IG9zLnBhdGguam9pbihkaXIsICJvcy5weSIpCiAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6CmRpZmYgLS1naXQgYS9QQy92YWxpZGF0ZV91Y3J0YmFzZS5weSBiL1BDL3ZhbGlkYXRlX3VjcnRiYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDVkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9QQy92YWxpZGF0ZV91Y3J0YmFzZS5weQpAQCAtMCwwICsxLDg4IEBACisnJycKK1RoaXMgc2NyaXB0IGdldHMgdGhlIHZlcnNpb24gbnVtYmVyIGZyb20gdWNydGJhc2VkLmRsbCBhbmQgY2hlY2tzCit3aGV0aGVyIGl0IGlzIGEgdmVyc2lvbiB3aXRoIGEga25vd24gaXNzdWUuCisnJycKKworaW1wb3J0IHN5cworCitmcm9tIGN0eXBlcyBpbXBvcnQgKGNfYnVmZmVyLCBQT0lOVEVSLCBieXJlZiwgY3JlYXRlX3VuaWNvZGVfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUsIFdpbkRMTCkKK2Zyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBEV09SRCwgSEFORExFCisKK2NsYXNzIFZTX0ZJWEVERklMRUlORk8oU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsKKyAgICAgICAgKCJkd1NpZ25hdHVyZSIsIERXT1JEKSwKKyAgICAgICAgKCJkd1N0cnVjVmVyc2lvbiIsIERXT1JEKSwKKyAgICAgICAgKCJkd0ZpbGVWZXJzaW9uTVMiLCBEV09SRCksCisgICAgICAgICgiZHdGaWxlVmVyc2lvbkxTIiwgRFdPUkQpLAorICAgICAgICAoImR3UHJvZHVjdFZlcnNpb25NUyIsIERXT1JEKSwKKyAgICAgICAgKCJkd1Byb2R1Y3RWZXJzaW9uTFMiLCBEV09SRCksCisgICAgICAgICgiZHdGaWxlRmxhZ3NNYXNrIiwgRFdPUkQpLAorICAgICAgICAoImR3RmlsZUZsYWdzIiwgRFdPUkQpLAorICAgICAgICAoImR3RmlsZU9TIiwgRFdPUkQpLAorICAgICAgICAoImR3RmlsZVR5cGUiLCBEV09SRCksCisgICAgICAgICgiZHdGaWxlU3VidHlwZSIsIERXT1JEKSwKKyAgICAgICAgKCJkd0ZpbGVEYXRlTVMiLCBEV09SRCksCisgICAgICAgICgiZHdGaWxlRGF0ZUxTIiwgRFdPUkQpLAorICAgIF0KKwora2VybmVsMzIgPSBXaW5ETEwoJ2tlcm5lbDMyJykKK3ZlcnNpb24gPSBXaW5ETEwoJ3ZlcnNpb24nKQorCitpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKKyAgICBwcmludCgnVXNhZ2U6IHZhbGlkYXRlX3VjcnRiYXNlLnB5IDx1Y3J0YmFzZXx1Y3J0YmFzZWQ+JykKKyAgICBzeXMuZXhpdCgyKQorCit0cnk6CisgICAgdWNydGJhc2VkID0gV2luRExMKHN5cy5hcmd2WzFdKQorZXhjZXB0IE9TRXJyb3I6CisgICAgcHJpbnQoJ0Nhbm5vdCBmaW5kIHVjcnRiYXNlZC5kbGwnKQorICAgICMgVGhpcyBsaWtlbHkgbWVhbnMgdGhhdCBWUyBpcyBub3QgaW5zdGFsbGVkLCBidXQgdGhhdCBpcyBhbgorICAgICMgb2J2aW91cyBlbm91Z2ggcHJvYmxlbSBpZiB5b3UncmUgdHJ5aW5nIHRvIHByb2R1Y2UgYSBkZWJ1ZworICAgICMgYnVpbGQgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGZhaWwgaGVyZS4KKyAgICBzeXMuZXhpdCgwKQorCisjIFdlIHdpbGwgaW1tZWRpYXRlbHkgZG91YmxlIHRoZSBsZW5ndGggdXAgdG8gTUFYX1BBVEgsIGJ1dCB0aGUKKyMgcGF0aCBtYXkgYmUgbG9uZ2VyLCBzbyB3ZSByZXRyeSB1bnRpbCB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzCisjIHNob3J0ZXIgdGhhbiBvdXIgYnVmZmVyLgorbmFtZV9sZW4gPSBhY3R1YWxfbGVuID0gMTMwCit3aGlsZSBhY3R1YWxfbGVuID09IG5hbWVfbGVuOgorICAgIG5hbWVfbGVuICo9IDIKKyAgICBuYW1lID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKG5hbWVfbGVuKQorICAgIGFjdHVhbF9sZW4gPSBrZXJuZWwzMi5HZXRNb2R1bGVGaWxlTmFtZVcoSEFORExFKHVjcnRiYXNlZC5faGFuZGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGxlbihuYW1lKSkKKyAgICBpZiBub3QgYWN0dWFsX2xlbjoKKyAgICAgICAgcHJpbnQoJ0ZhaWxlZCB0byBnZXQgZnVsbCBtb2R1bGUgbmFtZS4nKQorICAgICAgICBzeXMuZXhpdCgyKQorCitzaXplID0gdmVyc2lvbi5HZXRGaWxlVmVyc2lvbkluZm9TaXplVyhuYW1lLCBOb25lKQoraWYgbm90IHNpemU6CisgICAgcHJpbnQoJ0ZhaWxlZCB0byBnZXQgc2l6ZSBvZiB2ZXJzaW9uIGluZm8uJykKKyAgICBzeXMuZXhpdCgyKQorCit2ZXJfYmxvY2sgPSBjX2J1ZmZlcihzaXplKQoraWYgKG5vdCB2ZXJzaW9uLkdldEZpbGVWZXJzaW9uSW5mb1cobmFtZSwgTm9uZSwgc2l6ZSwgdmVyX2Jsb2NrKSBvcgorICAgIG5vdCB2ZXJfYmxvY2spOgorICAgIHByaW50KCdGYWlsZWQgdG8gZ2V0IHZlcnNpb24gaW5mby4nKQorICAgIHN5cy5leGl0KDIpCisKK3B2aSA9IFBPSU5URVIoVlNfRklYRURGSUxFSU5GTykoKQoraWYgbm90IHZlcnNpb24uVmVyUXVlcnlWYWx1ZVcodmVyX2Jsb2NrLCAiIiwgYnlyZWYocHZpKSwgYnlyZWYoRFdPUkQoKSkpOgorICAgIHByaW50KCdGYWlsZWQgdG8gZ2V0IHZlcnNpb24gdmFsdWUgZnJvbSBpbmZvLicpCisgICAgc3lzLmV4aXQoMikKKwordmVyID0gKAorICAgIHB2aS5jb250ZW50cy5kd1Byb2R1Y3RWZXJzaW9uTVMgPj4gMTYsCisgICAgcHZpLmNvbnRlbnRzLmR3UHJvZHVjdFZlcnNpb25NUyAmIDB4RkZGRiwKKyAgICBwdmkuY29udGVudHMuZHdQcm9kdWN0VmVyc2lvbkxTID4+IDE2LAorICAgIHB2aS5jb250ZW50cy5kd1Byb2R1Y3RWZXJzaW9uTFMgJiAweEZGRkYsCispCisKK3ByaW50KCd7fSBpcyB2ZXJzaW9uIHt9Lnt9Lnt9Lnt9Jy5mb3JtYXQobmFtZS52YWx1ZSwgKnZlcikpCisKK2lmIHZlciA8ICgxMCwgMCwgMTA1ODYpOgorICAgIHByaW50KCdXQVJOOiB1Y3J0YmFzZWQgY29udGFpbnMga25vd24gaXNzdWVzLiAnCisgICAgICAgICAgJ1BsZWFzZSB1cGRhdGUgVmlzdWFsIFN0dWRpbyBvciB0aGUgV2luZG93cyBTREsuJykKKyAgICBwcmludCgnU2VlOicpCisgICAgcHJpbnQoJyAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI2NjI0JykKKyAgICBzeXMuZXhpdCgxKQpkaWZmIC0tZ2l0IGEvUEMvd2lucmVnLmMgYi9QQy93aW5yZWcuYwppbmRleCAxOWQ1YTcwLi5mMDhkOWE0IDEwMDY0NAotLS0gYS9QQy93aW5yZWcuYworKysgYi9QQy93aW5yZWcuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgIndpbmRvd3MuaCIKIAogc3RhdGljIEJPT0wgUHlIS0VZX0FzSEtFWShQeU9iamVjdCAqb2IsIEhLRVkgKnBSZXMsIEJPT0wgYk5vbmVPSyk7CitzdGF0aWMgQk9PTCBjbGluaWNfSEtFWV9jb252ZXJ0ZXIoUHlPYmplY3QgKm9iLCB2b2lkICpwKTsKIHN0YXRpYyBQeU9iamVjdCAqUHlIS0VZX0Zyb21IS0VZKEhLRVkgaCk7CiBzdGF0aWMgQk9PTCBQeUhLRVlfQ2xvc2UoUHlPYmplY3QgKm9iSGFuZGxlKTsKIApAQCAtNDYsMTAgKzQ3LDEyIEBACiAiRGVsZXRlVmFsdWUoKSAtIFJlbW92ZXMgYSBuYW1lZCB2YWx1ZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVnaXN0cnkga2V5LlxuIgogIkVudW1LZXkoKSAtIEVudW1lcmF0ZXMgc3Via2V5cyBvZiB0aGUgc3BlY2lmaWVkIG9wZW4gcmVnaXN0cnkga2V5LlxuIgogIkVudW1WYWx1ZSgpIC0gRW51bWVyYXRlcyB2YWx1ZXMgb2YgdGhlIHNwZWNpZmllZCBvcGVuIHJlZ2lzdHJ5IGtleS5cbiIKLSJFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MoKSAtIEV4cGFuZCB0aGUgZW52IHN0cmluZ3MgaW4gYSBSRUdfRVhQQU5EX1NaIHN0cmluZy5cbiIKKyJFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MoKSAtIEV4cGFuZCB0aGUgZW52IHN0cmluZ3MgaW4gYSBSRUdfRVhQQU5EX1NaXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuXG4iCiAiRmx1c2hLZXkoKSAtIFdyaXRlcyBhbGwgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHNwZWNpZmllZCBrZXkgdG8gdGhlIHJlZ2lzdHJ5LlxuIgotIkxvYWRLZXkoKSAtIENyZWF0ZXMgYSBzdWJrZXkgdW5kZXIgSEtFWV9VU0VSIG9yIEhLRVlfTE9DQUxfTUFDSElORSBhbmQgc3RvcmVzXG4iCi0iICAgICAgICAgICAgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGZyb20gYSBzcGVjaWZpZWQgZmlsZSBpbnRvIHRoYXQgc3Via2V5LlxuIgorIkxvYWRLZXkoKSAtIENyZWF0ZXMgYSBzdWJrZXkgdW5kZXIgSEtFWV9VU0VSIG9yIEhLRVlfTE9DQUxfTUFDSElORSBhbmRcbiIKKyIgICAgICAgICAgICBzdG9yZXMgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGZyb20gYSBzcGVjaWZpZWQgZmlsZSBpbnRvIHRoYXRcbiIKKyIgICAgICAgICAgICBzdWJrZXkuXG4iCiAiT3BlbktleSgpIC0gT3BlbnMgdGhlIHNwZWNpZmllZCBrZXkuXG4iCiAiT3BlbktleUV4KCkgLSBBbGlhcyBvZiBPcGVuS2V5KCkuXG4iCiAiUXVlcnlWYWx1ZSgpIC0gUmV0cmlldmVzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHVubmFtZWQgdmFsdWUgZm9yIGFcbiIKQEAgLTcxLDI5OSArNzQsNiBAQAogInRvIHNlZSB3aGF0IGNvbnN0YW50cyBhcmUgdXNlZCwgYW5kIHdoZXJlLiIpOwogCiAKLVB5RG9jX1NUUlZBUihDbG9zZUtleV9kb2MsCi0iQ2xvc2VLZXkoaGtleSlcbiIKLSJDbG9zZXMgYSBwcmV2aW91c2x5IG9wZW5lZCByZWdpc3RyeSBrZXkuXG4iCi0iXG4iCi0iVGhlIGhrZXkgYXJndW1lbnQgc3BlY2lmaWVzIGEgcHJldmlvdXNseSBvcGVuZWQga2V5LlxuIgotIlxuIgotIk5vdGUgdGhhdCBpZiB0aGUga2V5IGlzIG5vdCBjbG9zZWQgdXNpbmcgdGhpcyBtZXRob2QsIGl0IHdpbGwgYmVcbiIKLSJjbG9zZWQgd2hlbiB0aGUgaGtleSBvYmplY3QgaXMgZGVzdHJveWVkIGJ5IFB5dGhvbi4iKTsKLQotUHlEb2NfU1RSVkFSKENvbm5lY3RSZWdpc3RyeV9kb2MsCi0iQ29ubmVjdFJlZ2lzdHJ5KGNvbXB1dGVyX25hbWUsIGtleSkgLT4ga2V5XG4iCi0iRXN0YWJsaXNoZXMgYSBjb25uZWN0aW9uIHRvIGEgcHJlZGVmaW5lZCByZWdpc3RyeSBoYW5kbGUgb24gYW5vdGhlciBjb21wdXRlci5cbiIKLSJcbiIKLSJjb21wdXRlcl9uYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgY29tcHV0ZXIsIG9mIHRoZSBmb3JtIFxcXFxjb21wdXRlcm5hbWUuXG4iCi0iICAgICAgICAgICAgICBJZiBOb25lLCB0aGUgbG9jYWwgY29tcHV0ZXIgaXMgdXNlZC5cbiIKLSJrZXkgaXMgdGhlIHByZWRlZmluZWQgaGFuZGxlIHRvIGNvbm5lY3QgdG8uXG4iCi0iXG4iCi0iVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgaGFuZGxlIG9mIHRoZSBvcGVuZWQga2V5LlxuIgotIklmIHRoZSBmdW5jdGlvbiBmYWlscywgYW4gT1NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOwotCi1QeURvY19TVFJWQVIoQ3JlYXRlS2V5X2RvYywKLSJDcmVhdGVLZXkoa2V5LCBzdWJfa2V5KSAtPiBrZXlcbiIKLSJDcmVhdGVzIG9yIG9wZW5zIHRoZSBzcGVjaWZpZWQga2V5LlxuIgotIlxuIgotImtleSBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKLSJzdWJfa2V5IGlzIGEgc3RyaW5nIHRoYXQgbmFtZXMgdGhlIGtleSB0aGlzIG1ldGhvZCBvcGVucyBvciBjcmVhdGVzLlxuIgotIlxuIgotIklmIGtleSBpcyBvbmUgb2YgdGhlIHByZWRlZmluZWQga2V5cywgc3ViX2tleSBtYXkgYmUgTm9uZS4gSW4gdGhhdCBjYXNlLFxuIgotInRoZSBoYW5kbGUgcmV0dXJuZWQgaXMgdGhlIHNhbWUga2V5IGhhbmRsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uLlxuIgotIlxuIgotIklmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIGV4aXN0aW5nIGtleS5cbiIKLSJcbiIKLSJUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBoYW5kbGUgb2YgdGhlIG9wZW5lZCBrZXkuXG4iCi0iSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBPU0Vycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuIik7Ci0KLVB5RG9jX1NUUlZBUihDcmVhdGVLZXlFeF9kb2MsCi0iQ3JlYXRlS2V5RXgoa2V5LCBzdWJfa2V5LCByZXNlcnZlZD0wLCBhY2Nlc3M9S0VZX1dSSVRFKSAtPiBrZXlcbiIKLSJDcmVhdGVzIG9yIG9wZW5zIHRoZSBzcGVjaWZpZWQga2V5LlxuIgotIlxuIgotImtleSBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50c1xuIgotInN1Yl9rZXkgaXMgYSBzdHJpbmcgdGhhdCBuYW1lcyB0aGUga2V5IHRoaXMgbWV0aG9kIG9wZW5zIG9yIGNyZWF0ZXMuXG4iCi0icmVzZXJ2ZWQgaXMgYSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgotImFjY2VzcyBpcyBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZSBcbiIKLSIgICAgICAgZGVzaXJlZCBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuIERlZmF1bHQgaXMgS0VZX1dSSVRFLlxuIgotIlxuIgotIklmIGtleSBpcyBvbmUgb2YgdGhlIHByZWRlZmluZWQga2V5cywgc3ViX2tleSBtYXkgYmUgTm9uZS4gSW4gdGhhdCBjYXNlLFxuIgotInRoZSBoYW5kbGUgcmV0dXJuZWQgaXMgdGhlIHNhbWUga2V5IGhhbmRsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uLlxuIgotIlxuIgotIklmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIGV4aXN0aW5nIGtleVxuIgotIlxuIgotIlRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGhhbmRsZSBvZiB0aGUgb3BlbmVkIGtleS5cbiIKLSJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKLQotUHlEb2NfU1RSVkFSKERlbGV0ZUtleV9kb2MsCi0iRGVsZXRlS2V5KGtleSwgc3ViX2tleSlcbiIKLSJEZWxldGVzIHRoZSBzcGVjaWZpZWQga2V5LlxuIgotIlxuIgotImtleSBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCi0ic3ViX2tleSBpcyBhIHN0cmluZyB0aGF0IG11c3QgYmUgYSBzdWJrZXkgb2YgdGhlIGtleSBpZGVudGlmaWVkIGJ5IHRoZSBrZXlcbiIKLSIgICAgICAgIHBhcmFtZXRlci4gVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSBOb25lLCBhbmQgdGhlIGtleSBtYXkgbm90IGhhdmVcbiIKLSIgICAgICAgIHN1YmtleXMuXG4iCi0iXG4iCi0iVGhpcyBtZXRob2QgY2FuIG5vdCBkZWxldGUga2V5cyB3aXRoIHN1YmtleXMuXG4iCi0iXG4iCi0iSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgZW50aXJlIGtleSwgaW5jbHVkaW5nIGFsbCBvZiBpdHMgdmFsdWVzLFxuIgotImlzIHJlbW92ZWQuICBJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKLQotUHlEb2NfU1RSVkFSKERlbGV0ZUtleUV4X2RvYywKLSJEZWxldGVLZXlFeChrZXksIHN1Yl9rZXksIGFjY2Vzcz1LRVlfV09XNjRfNjRLRVksIHJlc2VydmVkPTApXG4iCi0iRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleSAoNjQtYml0IE9TIG9ubHkpLlxuIgotIlxuIgotImtleSBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCi0ic3ViX2tleSBpcyBhIHN0cmluZyB0aGF0IG11c3QgYmUgYSBzdWJrZXkgb2YgdGhlIGtleSBpZGVudGlmaWVkIGJ5IHRoZSBrZXlcbiIKLSIgICAgICAgIHBhcmFtZXRlci4gVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSBOb25lLCBhbmQgdGhlIGtleSBtYXkgbm90IGhhdmVcbiIKLSIgICAgICAgIHN1YmtleXMuXG4iCi0icmVzZXJ2ZWQgaXMgYSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgotImFjY2VzcyBpcyBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZSBcbiIKLSIgICAgICAgZGVzaXJlZCBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuIERlZmF1bHQgaXMgS0VZX1dPVzY0XzY0S0VZLlxuIgotIlxuIgotIlRoaXMgbWV0aG9kIGNhbiBub3QgZGVsZXRlIGtleXMgd2l0aCBzdWJrZXlzLlxuIgotIlxuIgotIklmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgdGhlIGVudGlyZSBrZXksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHZhbHVlcyxcbiIKLSJpcyByZW1vdmVkLiAgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBPU0Vycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4iCi0iT24gdW5zdXBwb3J0ZWQgV2luZG93cyB2ZXJzaW9ucywgTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuIik7Ci0KLVB5RG9jX1NUUlZBUihEZWxldGVWYWx1ZV9kb2MsCi0iRGVsZXRlVmFsdWUoa2V5LCB2YWx1ZSlcbiIKLSJSZW1vdmVzIGEgbmFtZWQgdmFsdWUgZnJvbSBhIHJlZ2lzdHJ5IGtleS5cbiIKLSJcbiIKLSJrZXkgaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgotInZhbHVlIGlzIGEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgdmFsdWUgdG8gcmVtb3ZlLiIpOwotCi1QeURvY19TVFJWQVIoRW51bUtleV9kb2MsCi0iRW51bUtleShrZXksIGluZGV4KSAtPiBzdHJpbmdcbiIKLSJFbnVtZXJhdGVzIHN1YmtleXMgb2YgYW4gb3BlbiByZWdpc3RyeSBrZXkuXG4iCi0iXG4iCi0ia2V5IGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKLSJpbmRleCBpcyBhbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgaW5kZXggb2YgdGhlIGtleSB0byByZXRyaWV2ZS5cbiIKLSJcbiIKLSJUaGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBuYW1lIG9mIG9uZSBzdWJrZXkgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC5cbiIKLSJJdCBpcyB0eXBpY2FsbHkgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgYW4gT1NFcnJvciBleGNlcHRpb24gaXNcbiIKLSJyYWlzZWQsIGluZGljYXRpbmcgbm8gbW9yZSB2YWx1ZXMgYXJlIGF2YWlsYWJsZS4iKTsKLQotUHlEb2NfU1RSVkFSKEVudW1WYWx1ZV9kb2MsCi0iRW51bVZhbHVlKGtleSwgaW5kZXgpIC0+IHR1cGxlXG4iCi0iRW51bWVyYXRlcyB2YWx1ZXMgb2YgYW4gb3BlbiByZWdpc3RyeSBrZXkuXG4iCi0ia2V5IGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKLSJpbmRleCBpcyBhbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIHRvIHJldHJpZXZlLlxuIgotIlxuIgotIlRoZSBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIG5hbWUgb2Ygb25lIHN1YmtleSBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkLlxuIgotIkl0IGlzIHR5cGljYWxseSBjYWxsZWQgcmVwZWF0ZWRseSwgdW50aWwgYW4gT1NFcnJvciBleGNlcHRpb25cbiIKLSJpcyByYWlzZWQsIGluZGljYXRpbmcgbm8gbW9yZSB2YWx1ZXMuXG4iCi0iXG4iCi0iVGhlIHJlc3VsdCBpcyBhIHR1cGxlIG9mIDMgaXRlbXM6XG4iCi0idmFsdWVfbmFtZSBpcyBhIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHZhbHVlLlxuIgotInZhbHVlX2RhdGEgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHZhbHVlIGRhdGEsIGFuZCB3aG9zZSB0eXBlIGRlcGVuZHNcbiIKLSIgICAgICAgICAgIG9uIHRoZSB1bmRlcmx5aW5nIHJlZ2lzdHJ5IHR5cGUuXG4iCi0iZGF0YV90eXBlIGlzIGFuIGludGVnZXIgdGhhdCBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBkYXRhLiIpOwotCi1QeURvY19TVFJWQVIoRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzX2RvYywKLSJFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3Moc3RyaW5nKSAtPiBzdHJpbmdcbiIKLSJFeHBhbmQgZW52aXJvbm1lbnQgdmFycy5cbiIpOwotCi1QeURvY19TVFJWQVIoRmx1c2hLZXlfZG9jLAotIkZsdXNoS2V5KGtleSlcbiIKLSJXcml0ZXMgYWxsIHRoZSBhdHRyaWJ1dGVzIG9mIGEga2V5IHRvIHRoZSByZWdpc3RyeS5cbiIKLSJcbiIKLSJrZXkgaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgotIlxuIgotIkl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2FsbCBGbHVzaEtleSB0byBjaGFuZ2UgYSBrZXkuICBSZWdpc3RyeSBjaGFuZ2VzIGFyZVxuIgotImZsdXNoZWQgdG8gZGlzayBieSB0aGUgcmVnaXN0cnkgdXNpbmcgaXRzIGxhenkgZmx1c2hlci4gIFJlZ2lzdHJ5IGNoYW5nZXMgYXJlXG4iCi0iYWxzbyBmbHVzaGVkIHRvIGRpc2sgYXQgc3lzdGVtIHNodXRkb3duLiAgVW5saWtlIENsb3NlS2V5KCksIHRoZSBGbHVzaEtleSgpXG4iCi0ibWV0aG9kIHJldHVybnMgb25seSB3aGVuIGFsbCB0aGUgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSByZWdpc3RyeS5cbiIKLSJcbiIKLSJBbiBhcHBsaWNhdGlvbiBzaG91bGQgb25seSBjYWxsIEZsdXNoS2V5KCkgaWYgaXQgcmVxdWlyZXMgYWJzb2x1dGUgY2VydGFpbnR5XG4iCi0idGhhdCByZWdpc3RyeSBjaGFuZ2VzIGFyZSBvbiBkaXNrLiAgSWYgeW91IGRvbid0IGtub3cgd2hldGhlciBhIEZsdXNoS2V5KClcbiIKLSJjYWxsIGlzIHJlcXVpcmVkLCBpdCBwcm9iYWJseSBpc24ndC4iKTsKLQotUHlEb2NfU1RSVkFSKExvYWRLZXlfZG9jLAotIkxvYWRLZXkoa2V5LCBzdWJfa2V5LCBmaWxlX25hbWUpXG4iCi0iQ3JlYXRlcyBhIHN1YmtleSB1bmRlciB0aGUgc3BlY2lmaWVkIGtleSBhbmQgc3RvcmVzIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvblxuIgotImZyb20gYSBzcGVjaWZpZWQgZmlsZSBpbnRvIHRoYXQgc3Via2V5LlxuIgotIlxuIgotImtleSBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCi0ic3ViX2tleSBpcyBhIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHN1Yl9rZXkgdG8gbG9hZC5cbiIKLSJmaWxlX25hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gbG9hZCByZWdpc3RyeSBkYXRhIGZyb20uICBUaGlzIGZpbGUgbXVzdFxuIgotIiAgICAgICAgICBoYXZlIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBTYXZlS2V5KCkgZnVuY3Rpb24uICBVbmRlciB0aGUgZmlsZVxuIgotIiAgICAgICAgICBhbGxvY2F0aW9uIHRhYmxlIChGQVQpIGZpbGUgc3lzdGVtLCB0aGUgZmlsZW5hbWUgbWF5IG5vdCBoYXZlIGFuXG4iCi0iICAgICAgICAgIGV4dGVuc2lvbi5cbiIKLSJcbiIKLSJBIGNhbGwgdG8gTG9hZEtleSgpIGZhaWxzIGlmIHRoZSBjYWxsaW5nIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSB0aGVcbiIKLSJTRV9SRVNUT1JFX1BSSVZJTEVHRSBwcml2aWxlZ2UuXG4iCi0iXG4iCi0iSWYga2V5IGlzIGEgaGFuZGxlIHJldHVybmVkIGJ5IENvbm5lY3RSZWdpc3RyeSgpLCB0aGVuIHRoZSBwYXRoIHNwZWNpZmllZFxuIgotImluIGZpbGVOYW1lIGlzIHJlbGF0aXZlIHRvIHRoZSByZW1vdGUgY29tcHV0ZXIuXG4iCi0iXG4iCi0iVGhlIGRvY3MgaW1wbHkga2V5IG11c3QgYmUgaW4gdGhlIEhLRVlfVVNFUiBvciBIS0VZX0xPQ0FMX01BQ0hJTkUgdHJlZSIpOwotCi1QeURvY19TVFJWQVIoT3BlbktleV9kb2MsCi0iT3BlbktleShrZXksIHN1Yl9rZXksIHJlc2VydmVkPTAsIGFjY2Vzcz1LRVlfUkVBRCkgLT4ga2V5XG4iCi0iT3BlbnMgdGhlIHNwZWNpZmllZCBrZXkuXG4iCi0iXG4iCi0ia2V5IGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKLSJzdWJfa2V5IGlzIGEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgc3ViX2tleSB0byBvcGVuLlxuIgotInJlc2VydmVkIGlzIGEgcmVzZXJ2ZWQgaW50ZWdlciwgYW5kIG11c3QgYmUgemVyby4gIERlZmF1bHQgaXMgemVyby5cbiIKLSJhY2Nlc3MgaXMgYW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBhbiBhY2Nlc3MgbWFzayB0aGF0IGRlc2NyaWJlcyB0aGUgZGVzaXJlZFxuIgotIiAgICAgICBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuICBEZWZhdWx0IGlzIEtFWV9SRUFEXG4iCi0iXG4iCi0iVGhlIHJlc3VsdCBpcyBhIG5ldyBoYW5kbGUgdG8gdGhlIHNwZWNpZmllZCBrZXlcbiIKLSJJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKLQotUHlEb2NfU1RSVkFSKE9wZW5LZXlFeF9kb2MsICJTZWUgT3BlbktleSgpIik7Ci0KLVB5RG9jX1NUUlZBUihRdWVyeUluZm9LZXlfZG9jLAotIlF1ZXJ5SW5mb0tleShrZXkpIC0+IHR1cGxlXG4iCi0iUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGtleS5cbiIKLSJcbiIKLSJrZXkgaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgotIlxuIgotIlRoZSByZXN1bHQgaXMgYSB0dXBsZSBvZiAzIGl0ZW1zOiIKLSJBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgbnVtYmVyIG9mIHN1YiBrZXlzIHRoaXMga2V5IGhhcy5cbiIKLSJBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGlzIGtleSBoYXMuXG4iCi0iQW4gaW50ZWdlciB0aGF0IGlkZW50aWZpZXMgd2hlbiB0aGUga2V5IHdhcyBsYXN0IG1vZGlmaWVkIChpZiBhdmFpbGFibGUpXG4iCi0iIGFzIDEwMCdzIG9mIG5hbm9zZWNvbmRzIHNpbmNlIEphbiAxLCAxNjAwLiIpOwotCi1QeURvY19TVFJWQVIoUXVlcnlWYWx1ZV9kb2MsCi0iUXVlcnlWYWx1ZShrZXksIHN1Yl9rZXkpIC0+IHN0cmluZ1xuIgotIlJldHJpZXZlcyB0aGUgdW5uYW1lZCB2YWx1ZSBmb3IgYSBrZXkuXG4iCi0iXG4iCi0ia2V5IGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKLSJzdWJfa2V5IGlzIGEgc3RyaW5nIHRoYXQgaG9sZHMgdGhlIG5hbWUgb2YgdGhlIHN1YmtleSB3aXRoIHdoaWNoIHRoZSB2YWx1ZVxuIgotIiAgICAgICAgaXMgYXNzb2NpYXRlZC4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIE5vbmUgb3IgZW1wdHksIHRoZSBmdW5jdGlvblxuIgotIiAgICAgICAgcmV0cmlldmVzIHRoZSB2YWx1ZSBzZXQgYnkgdGhlIFNldFZhbHVlKCkgbWV0aG9kIGZvciB0aGUga2V5XG4iCi0iICAgICAgICBpZGVudGlmaWVkIGJ5IGtleS4iCi0iXG4iCi0iVmFsdWVzIGluIHRoZSByZWdpc3RyeSBoYXZlIG5hbWUsIHR5cGUsIGFuZCBkYXRhIGNvbXBvbmVudHMuIFRoaXMgbWV0aG9kXG4iCi0icmV0cmlldmVzIHRoZSBkYXRhIGZvciBhIGtleSdzIGZpcnN0IHZhbHVlIHRoYXQgaGFzIGEgTlVMTCBuYW1lLlxuIgotIkJ1dCB0aGUgdW5kZXJseWluZyBBUEkgY2FsbCBkb2Vzbid0IHJldHVybiB0aGUgdHlwZSwgTGFtZSBMYW1lIExhbWUsIERPTlQgVVNFIFRISVMhISEiKTsKLQotUHlEb2NfU1RSVkFSKFF1ZXJ5VmFsdWVFeF9kb2MsCi0iUXVlcnlWYWx1ZUV4KGtleSwgdmFsdWVfbmFtZSkgLT4gKHZhbHVlLCB0eXBlX2lkKVxuIgotIlJldHJpZXZlcyB0aGUgdHlwZSBhbmQgZGF0YSBmb3IgYSBzcGVjaWZpZWQgdmFsdWUgbmFtZSBhc3NvY2lhdGVkIHdpdGggYW5cbiIKLSJvcGVuIHJlZ2lzdHJ5IGtleS5cbiIKLSJcbiIKLSJrZXkgaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgotInZhbHVlX25hbWUgaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgdmFsdWUgdG8gcXVlcnkiKTsKLQotUHlEb2NfU1RSVkFSKFNhdmVLZXlfZG9jLAotIlNhdmVLZXkoa2V5LCBmaWxlX25hbWUpXG4iCi0iU2F2ZXMgdGhlIHNwZWNpZmllZCBrZXksIGFuZCBhbGwgaXRzIHN1YmtleXMgdG8gdGhlIHNwZWNpZmllZCBmaWxlLlxuIgotIlxuIgotImtleSBpcyBhbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuXG4iCi0iZmlsZV9uYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHNhdmUgcmVnaXN0cnkgZGF0YSB0by4gIFRoaXMgZmlsZSBjYW5ub3RcbiIKLSIgICAgICAgICAgYWxyZWFkeSBleGlzdC4gSWYgdGhpcyBmaWxlbmFtZSBpbmNsdWRlcyBhbiBleHRlbnNpb24sIGl0IGNhbm5vdCBiZVxuIgotIiAgICAgICAgICB1c2VkIG9uIGZpbGUgYWxsb2NhdGlvbiB0YWJsZSAoRkFUKSBmaWxlIHN5c3RlbXMgYnkgdGhlIExvYWRLZXkoKSxcbiIKLSIgICAgICAgICAgUmVwbGFjZUtleSgpIG9yIFJlc3RvcmVLZXkoKSBtZXRob2RzLlxuIgotIlxuIgotIklmIGtleSByZXByZXNlbnRzIGEga2V5IG9uIGEgcmVtb3RlIGNvbXB1dGVyLCB0aGUgcGF0aCBkZXNjcmliZWQgYnkgZmlsZV9uYW1lXG4iCi0iaXMgcmVsYXRpdmUgdG8gdGhlIHJlbW90ZSBjb21wdXRlci5cbiIKLSJcbiIKLSJUaGUgY2FsbGVyIG9mIHRoaXMgbWV0aG9kIG11c3QgcG9zc2VzcyB0aGUgU2VCYWNrdXBQcml2aWxlZ2Ugc2VjdXJpdHlcbiIKLSJwcml2aWxlZ2UuICBUaGlzIGZ1bmN0aW9uIHBhc3NlcyBOVUxMIGZvciBzZWN1cml0eV9hdHRyaWJ1dGVzIHRvIHRoZSBBUEkuIik7Ci0KLVB5RG9jX1NUUlZBUihTZXRWYWx1ZV9kb2MsCi0iU2V0VmFsdWUoa2V5LCBzdWJfa2V5LCB0eXBlLCB2YWx1ZSlcbiIKLSJBc3NvY2lhdGVzIGEgdmFsdWUgd2l0aCBhIHNwZWNpZmllZCBrZXkuXG4iCi0iXG4iCi0ia2V5IGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKLSJzdWJfa2V5IGlzIGEgc3RyaW5nIHRoYXQgbmFtZXMgdGhlIHN1YmtleSB3aXRoIHdoaWNoIHRoZSB2YWx1ZSBpcyBhc3NvY2lhdGVkLlxuIgotInR5cGUgaXMgYW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgZGF0YS4gIEN1cnJlbnRseSB0aGlzIG11c3RcbiIKLSIgICAgIGJlIFJFR19TWiwgbWVhbmluZyBvbmx5IHN0cmluZ3MgYXJlIHN1cHBvcnRlZC5cbiIKLSJ2YWx1ZSBpcyBhIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbmV3IHZhbHVlLlxuIgotIlxuIgotIklmIHRoZSBrZXkgc3BlY2lmaWVkIGJ5IHRoZSBzdWJfa2V5IHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdCwgdGhlIFNldFZhbHVlXG4iCi0iZnVuY3Rpb24gY3JlYXRlcyBpdC5cbiIKLSJcbiIKLSJWYWx1ZSBsZW5ndGhzIGFyZSBsaW1pdGVkIGJ5IGF2YWlsYWJsZSBtZW1vcnkuIExvbmcgdmFsdWVzIChtb3JlIHRoYW5cbiIKLSIyMDQ4IGJ5dGVzKSBzaG91bGQgYmUgc3RvcmVkIGFzIGZpbGVzIHdpdGggdGhlIGZpbGVuYW1lcyBzdG9yZWQgaW4gXG4iCi0idGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0cnkuICBUaGlzIGhlbHBzIHRoZSByZWdpc3RyeSBwZXJmb3JtIGVmZmljaWVudGx5LlxuIgotIlxuIgotIlRoZSBrZXkgaWRlbnRpZmllZCBieSB0aGUga2V5IHBhcmFtZXRlciBtdXN0IGhhdmUgYmVlbiBvcGVuZWQgd2l0aFxuIgotIktFWV9TRVRfVkFMVUUgYWNjZXNzLiIpOwotCi1QeURvY19TVFJWQVIoU2V0VmFsdWVFeF9kb2MsCi0iU2V0VmFsdWVFeChrZXksIHZhbHVlX25hbWUsIHJlc2VydmVkLCB0eXBlLCB2YWx1ZSlcbiIKLSJTdG9yZXMgZGF0YSBpbiB0aGUgdmFsdWUgZmllbGQgb2YgYW4gb3BlbiByZWdpc3RyeSBrZXkuXG4iCi0iXG4iCi0ia2V5IGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy5cbiIKLSJ2YWx1ZV9uYW1lIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHZhbHVlIHRvIHNldCwgb3IgTm9uZS5cbiIKLSJyZXNlcnZlZCBjYW4gYmUgYW55dGhpbmcgLSB6ZXJvIGlzIGFsd2F5cyBwYXNzZWQgdG8gdGhlIEFQSS5cbiIKLSJ0eXBlIGlzIGFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIGRhdGEuICBUaGlzIHNob3VsZCBiZSBvbmUgb2Y6XG4iCi0iICBSRUdfQklOQVJZIC0tIEJpbmFyeSBkYXRhIGluIGFueSBmb3JtLlxuIgotIiAgUkVHX0RXT1JEIC0tIEEgMzItYml0IG51bWJlci5cbiIKLSIgIFJFR19EV09SRF9MSVRUTEVfRU5ESUFOIC0tIEEgMzItYml0IG51bWJlciBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdC5cbiIKLSIgIFJFR19EV09SRF9CSUdfRU5ESUFOIC0tIEEgMzItYml0IG51bWJlciBpbiBiaWctZW5kaWFuIGZvcm1hdC5cbiIKLSIgIFJFR19FWFBBTkRfU1ogLS0gQSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgY29udGFpbnMgdW5leHBhbmRlZCByZWZlcmVuY2VzXG4iCi0iICAgICAgICAgICAgICAgICAgIHRvIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZm9yIGV4YW1wbGUsICVQQVRIJSkuXG4iCi0iICBSRUdfTElOSyAtLSBBIFVuaWNvZGUgc3ltYm9saWMgbGluay5cbiIKLSIgIFJFR19NVUxUSV9TWiAtLSBBbiBzZXF1ZW5jZSBvZiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncywgdGVybWluYXRlZCBieVxuIgotIiAgICAgICAgICAgICAgICAgIHR3byBudWxsIGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgUHl0aG9uIGhhbmRsZXMgdGhpc1xuIgotIiAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW9uIGF1dG9tYXRpY2FsbHkuXG4iCi0iICBSRUdfTk9ORSAtLSBObyBkZWZpbmVkIHZhbHVlIHR5cGUuXG4iCi0iICBSRUdfUkVTT1VSQ0VfTElTVCAtLSBBIGRldmljZS1kcml2ZXIgcmVzb3VyY2UgbGlzdC5cbiIKLSIgIFJFR19TWiAtLSBBIG51bGwtdGVybWluYXRlZCBzdHJpbmcuXG4iCi0idmFsdWUgaXMgYSBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgdGhlIG5ldyB2YWx1ZS5cbiIKLSJcbiIKLSJUaGlzIG1ldGhvZCBjYW4gYWxzbyBzZXQgYWRkaXRpb25hbCB2YWx1ZSBhbmQgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdGhlXG4iCi0ic3BlY2lmaWVkIGtleS4gIFRoZSBrZXkgaWRlbnRpZmllZCBieSB0aGUga2V5IHBhcmFtZXRlciBtdXN0IGhhdmUgYmVlblxuIgotIm9wZW5lZCB3aXRoIEtFWV9TRVRfVkFMVUUgYWNjZXNzLlxuIgotIlxuIgotIlRvIG9wZW4gdGhlIGtleSwgdXNlIHRoZSBDcmVhdGVLZXlFeCgpIG9yIE9wZW5LZXlFeCgpIG1ldGhvZHMuXG4iCi0iXG4iCi0iVmFsdWUgbGVuZ3RocyBhcmUgbGltaXRlZCBieSBhdmFpbGFibGUgbWVtb3J5LiBMb25nIHZhbHVlcyAobW9yZSB0aGFuXG4iCi0iMjA0OCBieXRlcykgc2hvdWxkIGJlIHN0b3JlZCBhcyBmaWxlcyB3aXRoIHRoZSBmaWxlbmFtZXMgc3RvcmVkIGluIFxuIgotInRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdHJ5LiAgVGhpcyBoZWxwcyB0aGUgcmVnaXN0cnkgcGVyZm9ybSBlZmZpY2llbnRseS4iKTsKLQotUHlEb2NfU1RSVkFSKERpc2FibGVSZWZsZWN0aW9uS2V5X2RvYywKLSJEaXNhYmxlcyByZWdpc3RyeSByZWZsZWN0aW9uIGZvciAzMi1iaXQgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gYSA2NC1iaXRcbiIKLSJPcGVyYXRpbmcgU3lzdGVtLiAgV2lsbCBnZW5lcmFsbHkgcmFpc2UgTm90SW1wbGVtZW50ZWQgaWYgZXhlY3V0ZWQgb25cbiIKLSJhIDMyLWJpdCBPcGVyYXRpbmcgU3lzdGVtLlxuIgotIlxuIgotIklmIHRoZSBrZXkgaXMgbm90IG9uIHRoZSByZWZsZWN0aW9uIGxpc3QsIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBidXQgaGFzIG5vIGVmZmVjdC5cbiIKLSJEaXNhYmxpbmcgcmVmbGVjdGlvbiBmb3IgYSBrZXkgZG9lcyBub3QgYWZmZWN0IHJlZmxlY3Rpb24gb2YgYW55IHN1YmtleXMuIik7Ci0KLVB5RG9jX1NUUlZBUihFbmFibGVSZWZsZWN0aW9uS2V5X2RvYywKLSJSZXN0b3JlcyByZWdpc3RyeSByZWZsZWN0aW9uIGZvciB0aGUgc3BlY2lmaWVkIGRpc2FibGVkIGtleS5cbiIKLSJXaWxsIGdlbmVyYWxseSByYWlzZSBOb3RJbXBsZW1lbnRlZCBpZiBleGVjdXRlZCBvbiBhIDMyLWJpdCBPcGVyYXRpbmcgU3lzdGVtLlxuIgotIlJlc3RvcmluZyByZWZsZWN0aW9uIGZvciBhIGtleSBkb2VzIG5vdCBhZmZlY3QgcmVmbGVjdGlvbiBvZiBhbnkgc3Via2V5cy4iKTsKLQotUHlEb2NfU1RSVkFSKFF1ZXJ5UmVmbGVjdGlvbktleV9kb2MsCi0iUXVlcnlSZWZsZWN0aW9uS2V5KGhrZXkpIC0+IGJvb2xcbiIKLSJEZXRlcm1pbmVzIHRoZSByZWZsZWN0aW9uIHN0YXRlIGZvciB0aGUgc3BlY2lmaWVkIGtleS5cbiIKLSJXaWxsIGdlbmVyYWxseSByYWlzZSBOb3RJbXBsZW1lbnRlZCBpZiBleGVjdXRlZCBvbiBhIDMyLWJpdCBPcGVyYXRpbmcgU3lzdGVtLlxuIik7CiAKIC8qIFB5SEtFWSBkb2NzdHJpbmdzICovCiBQeURvY19TVFJWQVIoUHlIS0VZX2RvYywKQEAgLTM4OSwyNCArOTksNiBAQAogInJpY2ggY29tcGFyaXNvbiAtIEhhbmRsZSBvYmplY3RzIGFyZSBjb21wYXJlZCB1c2luZyB0aGUgaGFuZGxlIHZhbHVlLiIpOwogCiAKLVB5RG9jX1NUUlZBUihQeUhLRVlfQ2xvc2VfZG9jLAotImtleS5DbG9zZSgpXG4iCi0iQ2xvc2VzIHRoZSB1bmRlcmx5aW5nIFdpbmRvd3MgaGFuZGxlLlxuIgotIlxuIgotIklmIHRoZSBoYW5kbGUgaXMgYWxyZWFkeSBjbG9zZWQsIG5vIGVycm9yIGlzIHJhaXNlZC4iKTsKLQotUHlEb2NfU1RSVkFSKFB5SEtFWV9EZXRhY2hfZG9jLAotImtleS5EZXRhY2goKSAtPiBpbnRcbiIKLSJEZXRhY2hlcyB0aGUgV2luZG93cyBoYW5kbGUgZnJvbSB0aGUgaGFuZGxlIG9iamVjdC5cbiIKLSJcbiIKLSJUaGUgcmVzdWx0IGlzIHRoZSB2YWx1ZSBvZiB0aGUgaGFuZGxlIGJlZm9yZSBpdCBpcyBkZXRhY2hlZC4gIElmIHRoZVxuIgotImhhbmRsZSBpcyBhbHJlYWR5IGRldGFjaGVkLCB0aGlzIHdpbGwgcmV0dXJuIHplcm8uXG4iCi0iXG4iCi0iQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgaGFuZGxlIGlzIGVmZmVjdGl2ZWx5IGludmFsaWRhdGVkLFxuIgotImJ1dCB0aGUgaGFuZGxlIGlzIG5vdCBjbG9zZWQuICBZb3Ugd291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4geW91XG4iCi0ibmVlZCB0aGUgdW5kZXJseWluZyB3aW4zMiBoYW5kbGUgdG8gZXhpc3QgYmV5b25kIHRoZSBsaWZldGltZSBvZiB0aGVcbiIKLSJoYW5kbGUgb2JqZWN0LiIpOwotCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIApAQCAtNTE2LDE2ICsyMDgsMTM1IEBACiAgICAgUHlIS0VZX3VuYXJ5RmFpbHVyZUZ1bmMsICAgICAgICAgICAgLyogbmJfZmxvYXQgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCAqUHlIS0VZX0Nsb3NlTWV0aG9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7Ci1zdGF0aWMgUHlPYmplY3QgKlB5SEtFWV9EZXRhY2hNZXRob2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKLXN0YXRpYyBQeU9iamVjdCAqUHlIS0VZX0VudGVyKFB5T2JqZWN0ICpzZWxmKTsKLXN0YXRpYyBQeU9iamVjdCAqUHlIS0VZX0V4aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSB3aW5yZWcKK2NsYXNzIHdpbnJlZy5IS0VZVHlwZSAiUHlIS0VZT2JqZWN0ICoiICImUHlIS0VZX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD00Yzk2NGViYTNiZjkxNGQ2XSovCisKKy8qW3B5dGhvbiBpbnB1dF0KK2NsYXNzIFJFR1NBTV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdSRUdTQU0nCisgICAgZm9ybWF0X3VuaXQgPSAnaScKKworY2xhc3MgRFdPUkRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnRFdPUkQnCisgICAgZm9ybWF0X3VuaXQgPSAnaycKKworY2xhc3MgSEtFWV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdIS0VZJworICAgIGNvbnZlcnRlciA9ICdjbGluaWNfSEtFWV9jb252ZXJ0ZXInCisKK2NsYXNzIEhLRVlfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ0hLRVknCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmX251bGxfcG9pbnRlcigiX3JldHVybl92YWx1ZSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5SEtFWV9Gcm9tSEtFWShfcmV0dXJuX3ZhbHVlKTtcbicpCisKKyMgSEFDSzogdGhpcyBvbmx5IHdvcmtzIGZvciBQeUhLRVlPYmplY3RzLCBub3RoaW5nIGVsc2UuCisjICAgICAgIFNob3VsZCB0aGlzIGJlIGdlbmVyYWxpemVkIGFuZCBlbnNocmluZWQgaW4gY2xpbmljLnB5LAorIyAgICAgICBkZXN0cm95IHRoaXMgY29udmVydGVyIHdpdGggcHJlanVkaWNlLgorY2xhc3Mgc2VsZl9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlIS0VZT2JqZWN0IConCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IChQeU9iamVjdCAqKV9yZXR1cm5fdmFsdWU7XG4nKQorW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MjJmN2FlZGM2ZDY4ZTgwZV0qLworCisjaW5jbHVkZSAiY2xpbmljL3dpbnJlZy5jLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBUaGUgUHlIS0VZIG9iamVjdCBtZXRob2RzCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5IS0VZVHlwZS5DbG9zZQorCitDbG9zZXMgdGhlIHVuZGVybHlpbmcgV2luZG93cyBoYW5kbGUuCisKK0lmIHRoZSBoYW5kbGUgaXMgYWxyZWFkeSBjbG9zZWQsIG5vIGVycm9yIGlzIHJhaXNlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19IS0VZVHlwZV9DbG9zZV9pbXBsKFB5SEtFWU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mY2VkM2E2MjRmYjBjMzQ0IGlucHV0PTY3ODZhYzc1ZjZiODlkZTZdKi8KK3sKKyAgICBpZiAoIVB5SEtFWV9DbG9zZSgoUHlPYmplY3QgKilzZWxmKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5IS0VZVHlwZS5EZXRhY2gKKworRGV0YWNoZXMgdGhlIFdpbmRvd3MgaGFuZGxlIGZyb20gdGhlIGhhbmRsZSBvYmplY3QuCisKK1RoZSByZXN1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZSBoYW5kbGUgYmVmb3JlIGl0IGlzIGRldGFjaGVkLiAgSWYgdGhlCitoYW5kbGUgaXMgYWxyZWFkeSBkZXRhY2hlZCwgdGhpcyB3aWxsIHJldHVybiB6ZXJvLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBoYW5kbGUgaXMgZWZmZWN0aXZlbHkgaW52YWxpZGF0ZWQsCitidXQgdGhlIGhhbmRsZSBpcyBub3QgY2xvc2VkLiAgWW91IHdvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHlvdQorbmVlZCB0aGUgdW5kZXJseWluZyB3aW4zMiBoYW5kbGUgdG8gZXhpc3QgYmV5b25kIHRoZSBsaWZldGltZSBvZiB0aGUKK2hhbmRsZSBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfSEtFWVR5cGVfRGV0YWNoX2ltcGwoUHlIS0VZT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRkYTVhOWUxYTAxYWU3OGYgaW5wdXQ9ZGQyY2MwOWU2YzZiYTgzM10qLworeworICAgIHZvaWQqIHJldDsKKyAgICByZXQgPSAodm9pZCopc2VsZi0+aGtleTsKKyAgICBzZWxmLT5oa2V5ID0gMDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Wb2lkUHRyKHJldCk7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5IS0VZVHlwZS5fX2VudGVyX18gLT4gc2VsZgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlIS0VZT2JqZWN0ICoKK3dpbnJlZ19IS0VZVHlwZV9fX2VudGVyX19faW1wbChQeUhLRVlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTJjMzQ5ODZkYWIyODk5MCBpbnB1dD1jNDBmYWIxZjA2OTBhOGUyXSovCit7CisgICAgUHlfWElOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuSEtFWVR5cGUuX19leGl0X18KKworICAgIGV4Y190eXBlOiBvYmplY3QKKyAgICBleGNfdmFsdWU6IG9iamVjdAorICAgIHRyYWNlYmFjazogb2JqZWN0CitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW5yZWdfSEtFWVR5cGVfX19leGl0X19faW1wbChQeUhLRVlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpleGNfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGNfdmFsdWUsIFB5T2JqZWN0ICp0cmFjZWJhY2spCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTIzZWJlNzM4OWU2YTI2MyBpbnB1dD1mYjMyNDg5ZWU5MjQwM2M3XSovCit7CisgICAgaWYgKCFQeUhLRVlfQ2xvc2UoKFB5T2JqZWN0ICopc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKltjbGluaWMgaW5wdXRdCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1kYTM5YTNlZTVlNmI0YjBkXSovCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgUHlIS0VZX21ldGhvZHNbXSA9IHsKLSAgICB7IkNsb3NlIiwgIFB5SEtFWV9DbG9zZU1ldGhvZCwgTUVUSF9WQVJBUkdTLCBQeUhLRVlfQ2xvc2VfZG9jfSwKLSAgICB7IkRldGFjaCIsIFB5SEtFWV9EZXRhY2hNZXRob2QsIE1FVEhfVkFSQVJHUywgUHlIS0VZX0RldGFjaF9kb2N9LAotICAgIHsiX19lbnRlcl9fIiwgKFB5Q0Z1bmN0aW9uKVB5SEtFWV9FbnRlciwgTUVUSF9OT0FSR1MsIE5VTEx9LAotICAgIHsiX19leGl0X18iLCBQeUhLRVlfRXhpdCwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKKyAgICBXSU5SRUdfSEtFWVRZUEVfQ0xPU0VfTUVUSE9EREVGCisgICAgV0lOUkVHX0hLRVlUWVBFX0RFVEFDSF9NRVRIT0RERUYKKyAgICBXSU5SRUdfSEtFWVRZUEVfX19FTlRFUl9fX01FVEhPRERFRgorICAgIFdJTlJFR19IS0VZVFlQRV9fX0VYSVRfX19NRVRIT0RERUYKICAgICB7TlVMTH0KIH07CiAKQEAgLTU3MCw1MCArMzgxLDYgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICBUaGUgUHlIS0VZIG9iamVjdCBtZXRob2RzCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1QeUhLRVlfQ2xvc2VNZXRob2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOkNsb3NlIikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlIS0VZX0Nsb3NlKHNlbGYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1QeUhLRVlfRGV0YWNoTWV0aG9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICB2b2lkKiByZXQ7Ci0gICAgUHlIS0VZT2JqZWN0ICpwVGhpcyA9IChQeUhLRVlPYmplY3QgKilzZWxmOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOkRldGFjaCIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXQgPSAodm9pZCopcFRoaXMtPmhrZXk7Ci0gICAgcFRoaXMtPmhrZXkgPSAwOwotICAgIHJldHVybiBQeUxvbmdfRnJvbVZvaWRQdHIocmV0KTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLVB5SEtFWV9FbnRlcihQeU9iamVjdCAqc2VsZikKLXsKLSAgICBQeV9YSU5DUkVGKHNlbGYpOwotICAgIHJldHVybiBzZWxmOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotUHlIS0VZX0V4aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGlmICghUHlIS0VZX0Nsb3NlKHNlbGYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9SRVRVUk5fTk9ORTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICBUaGUgcHVibGljIFB5SEtFWSBBUEkgKHdlbGwsIG5vdCBwdWJsaWMgeWV0IDotKQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogUHlPYmplY3QgKgpAQCAtNjc1LDYgKzQ0MiwxNCBAQAogICAgIHJldHVybiBUUlVFOwogfQogCitCT09MCitjbGluaWNfSEtFWV9jb252ZXJ0ZXIoUHlPYmplY3QgKm9iLCB2b2lkICpwKQoreworICAgIGlmICghUHlIS0VZX0FzSEtFWShvYiwgKEhLRVkgKilwLCBGQUxTRSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwogUHlPYmplY3QgKgogUHlIS0VZX0Zyb21IS0VZKEhLRVkgaCkKIHsKQEAgLTk4NSwxMjAgKzc2MCwxOTkgQEAKIAogLyogVGhlIFB5dGhvbiBtZXRob2RzICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1QeUNsb3NlS2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqb2JLZXk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOkNsb3NlS2V5IiwgJm9iS2V5KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQ2xvc2Uob2JLZXkpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7Ci19CisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuQ2xvc2VLZXkKKworICAgIGhrZXk6IG9iamVjdAorICAgICAgICBBIHByZXZpb3VzbHkgb3BlbmVkIGtleS4KKyAgICAvCisKK0Nsb3NlcyBhIHByZXZpb3VzbHkgb3BlbmVkIHJlZ2lzdHJ5IGtleS4KKworTm90ZSB0aGF0IGlmIHRoZSBrZXkgaXMgbm90IGNsb3NlZCB1c2luZyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBiZQorY2xvc2VkIHdoZW4gdGhlIGhrZXkgb2JqZWN0IGlzIGRlc3Ryb3llZCBieSBQeXRob24uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeUNvbm5lY3RSZWdpc3RyeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit3aW5yZWdfQ2xvc2VLZXkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmhrZXkpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTRmYTUzNzAxOWE4MGQxNSBpbnB1dD01YjFhYWM2NWJhNTEyN2FkXSovCiB7Ci0gICAgSEtFWSBoS2V5OwotICAgIFB5T2JqZWN0ICpvYktleTsKLSAgICB3Y2hhcl90ICpzekNvbXBOYW1lID0gTlVMTDsKKyAgICBpZiAoIVB5SEtFWV9DbG9zZShoa2V5KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5Db25uZWN0UmVnaXN0cnkgLT4gSEtFWQorCisgICAgY29tcHV0ZXJfbmFtZTogUHlfVU5JQ09ERShhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KQorICAgICAgICBUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGNvbXB1dGVyLCBvZiB0aGUgZm9ybSByIlxcY29tcHV0ZXJuYW1lIi4gIElmCisgICAgICAgIE5vbmUsIHRoZSBsb2NhbCBjb21wdXRlciBpcyB1c2VkLgorICAgIGtleTogSEtFWQorICAgICAgICBUaGUgcHJlZGVmaW5lZCBrZXkgdG8gY29ubmVjdCB0by4KKyAgICAvCisKK0VzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byB0aGUgcmVnaXN0cnkgb24gYW5vdGhlciBjb21wdXRlci4KKworVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgaGFuZGxlIG9mIHRoZSBvcGVuZWQga2V5LgorSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBPU0Vycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBIS0VZCit3aW5yZWdfQ29ubmVjdFJlZ2lzdHJ5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfVU5JQ09ERSAqY29tcHV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIS0VZIGtleSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01YWI3OWQwMmFhMzE2N2I0IGlucHV0PTVmOThhODkxYTM0N2U2OGVdKi8KK3sKICAgICBIS0VZIHJldEtleTsKICAgICBsb25nIHJjOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiWk86Q29ubmVjdFJlZ2lzdHJ5IiwgJnN6Q29tcE5hbWUsICZvYktleSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gUmVnQ29ubmVjdFJlZ2lzdHJ5VyhzekNvbXBOYW1lLCBoS2V5LCAmcmV0S2V5KTsKKyAgICByYyA9IFJlZ0Nvbm5lY3RSZWdpc3RyeVcoY29tcHV0ZXJfbmFtZSwga2V5LCAmcmV0S2V5KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdFJlZ2lzdHJ5Iik7Ci0gICAgcmV0dXJuIFB5SEtFWV9Gcm9tSEtFWShyZXRLZXkpOworICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiQ29ubmVjdFJlZ2lzdHJ5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmV0S2V5OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotUHlDcmVhdGVLZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorLypbY2xpbmljIGlucHV0XQord2lucmVnLkNyZWF0ZUtleSAtPiBIS0VZCisKKyAgICBrZXk6IEhLRVkKKyAgICAgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3Igb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuCisgICAgc3ViX2tleTogUHlfVU5JQ09ERShhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KQorICAgICAgICBUaGUgbmFtZSBvZiB0aGUga2V5IHRoaXMgbWV0aG9kIG9wZW5zIG9yIGNyZWF0ZXMuCisgICAgLworCitDcmVhdGVzIG9yIG9wZW5zIHRoZSBzcGVjaWZpZWQga2V5LgorCitJZiBrZXkgaXMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGtleXMsIHN1Yl9rZXkgbWF5IGJlIE5vbmUuIEluIHRoYXQgY2FzZSwKK3RoZSBoYW5kbGUgcmV0dXJuZWQgaXMgdGhlIHNhbWUga2V5IGhhbmRsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uLgorCitJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCB0aGlzIGZ1bmN0aW9uIG9wZW5zIHRoZSBleGlzdGluZyBrZXkuCisKK1RoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGhhbmRsZSBvZiB0aGUgb3BlbmVkIGtleS4KK0lmIHRoZSBmdW5jdGlvbiBmYWlscywgYW4gT1NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgSEtFWQord2lucmVnX0NyZWF0ZUtleV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICpzdWJfa2V5KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTljODFkNDA5NTUyN2M5MjcgaW5wdXQ9M2NkZDE2MjI0ODhhY2VhMl0qLwogewotICAgIEhLRVkgaEtleTsKLSAgICBQeU9iamVjdCAqb2JLZXk7Ci0gICAgd2NoYXJfdCAqc3ViS2V5OwogICAgIEhLRVkgcmV0S2V5OwogICAgIGxvbmcgcmM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPWjpDcmVhdGVLZXkiLCAmb2JLZXksICZzdWJLZXkpKQorCisgICAgcmMgPSBSZWdDcmVhdGVLZXlXKGtleSwgc3ViX2tleSwgJnJldEtleSk7CisgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsICJDcmVhdGVLZXkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByYyA9IFJlZ0NyZWF0ZUtleVcoaEtleSwgc3ViS2V5LCAmcmV0S2V5KTsKLSAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiQ3JlYXRlS2V5Iik7Ci0gICAgcmV0dXJuIFB5SEtFWV9Gcm9tSEtFWShyZXRLZXkpOworICAgIH0KKyAgICByZXR1cm4gcmV0S2V5OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotUHlDcmVhdGVLZXlFeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuQ3JlYXRlS2V5RXggLT4gSEtFWQorCisgICAga2V5OiBIS0VZCisgICAgICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLgorICAgIHN1Yl9rZXk6IFB5X1VOSUNPREUoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkKKyAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGtleSB0aGlzIG1ldGhvZCBvcGVucyBvciBjcmVhdGVzLgorICAgIHJlc2VydmVkOiBpbnQgPSAwCisgICAgICAgIEEgcmVzZXJ2ZWQgaW50ZWdlciwgYW5kIG11c3QgYmUgemVyby4gIERlZmF1bHQgaXMgemVyby4KKyAgICBhY2Nlc3M6IFJFR1NBTShjX2RlZmF1bHQ9J0tFWV9XUklURScpID0gd2lucmVnLktFWV9XUklURQorICAgICAgICBBbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZQorICAgICAgICBkZXNpcmVkIHNlY3VyaXR5IGFjY2VzcyBmb3IgdGhlIGtleS4gRGVmYXVsdCBpcyBLRVlfV1JJVEUuCisKK0NyZWF0ZXMgb3Igb3BlbnMgdGhlIHNwZWNpZmllZCBrZXkuCisKK0lmIGtleSBpcyBvbmUgb2YgdGhlIHByZWRlZmluZWQga2V5cywgc3ViX2tleSBtYXkgYmUgTm9uZS4gSW4gdGhhdCBjYXNlLAordGhlIGhhbmRsZSByZXR1cm5lZCBpcyB0aGUgc2FtZSBrZXkgaGFuZGxlIHBhc3NlZCBpbiB0byB0aGUgZnVuY3Rpb24uCisKK0lmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMsIHRoaXMgZnVuY3Rpb24gb3BlbnMgdGhlIGV4aXN0aW5nIGtleQorCitUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBoYW5kbGUgb2YgdGhlIG9wZW5lZCBrZXkuCitJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIEhLRVkKK3dpbnJlZ19DcmVhdGVLZXlFeF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICpzdWJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc2VydmVkLCBSRUdTQU0gYWNjZXNzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI5ZmNlNmRjNWM0ZTM5YjEgaW5wdXQ9NDJjMmIwM2Y5ODQwNmI2Nl0qLwogewotICAgIEhLRVkgaEtleTsKLSAgICBQeU9iamVjdCAqa2V5OwotICAgIHdjaGFyX3QgKnN1Yl9rZXk7CiAgICAgSEtFWSByZXRLZXk7Ci0gICAgaW50IHJlc2VydmVkID0gMDsKLSAgICBSRUdTQU0gYWNjZXNzID0gS0VZX1dSSVRFOwogICAgIGxvbmcgcmM7CiAKLSAgICBjaGFyICprd2xpc3RbXSA9IHsia2V5IiwgInN1Yl9rZXkiLCAicmVzZXJ2ZWQiLCAiYWNjZXNzIiwgTlVMTH07Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPWnxpaTpDcmVhdGVLZXlFeCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LCAmc3ViX2tleSwgJnJlc2VydmVkLCAmYWNjZXNzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQXNIS0VZKGtleSwgJmhLZXksIEZBTFNFKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByYyA9IFJlZ0NyZWF0ZUtleUV4VyhoS2V5LCBzdWJfa2V5LCByZXNlcnZlZCwgTlVMTCwgKERXT1JEKU5VTEwsCisgICAgcmMgPSBSZWdDcmVhdGVLZXlFeFcoa2V5LCBzdWJfa2V5LCByZXNlcnZlZCwgTlVMTCwgKERXT1JEKU5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLCBOVUxMLCAmcmV0S2V5LCBOVUxMKTsKLSAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiQ3JlYXRlS2V5RXgiKTsKLSAgICByZXR1cm4gUHlIS0VZX0Zyb21IS0VZKHJldEtleSk7CisgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsICJDcmVhdGVLZXlFeCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJldEtleTsKIH0KIAorLypbY2xpbmljIGlucHV0XQord2lucmVnLkRlbGV0ZUtleQorICAgIGtleTogSEtFWQorICAgICAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuCisgICAgc3ViX2tleTogUHlfVU5JQ09ERQorICAgICAgICBBIHN0cmluZyB0aGF0IG11c3QgYmUgdGhlIG5hbWUgb2YgYSBzdWJrZXkgb2YgdGhlIGtleSBpZGVudGlmaWVkIGJ5CisgICAgICAgIHRoZSBrZXkgcGFyYW1ldGVyLiBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIE5vbmUsIGFuZCB0aGUga2V5IG1heSBub3QKKyAgICAgICAgaGF2ZSBzdWJrZXlzLgorICAgIC8KKworRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleS4KKworVGhpcyBtZXRob2QgY2FuIG5vdCBkZWxldGUga2V5cyB3aXRoIHN1YmtleXMuCisKK0lmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgdGhlIGVudGlyZSBrZXksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHZhbHVlcywKK2lzIHJlbW92ZWQuICBJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVB5RGVsZXRlS2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3dpbnJlZ19EZWxldGVLZXlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSwgUHlfVU5JQ09ERSAqc3ViX2tleSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NzM0YjFlNDMxOTkxYWU0IGlucHV0PWIzMWQyMjViOTM1ZTQyMTFdKi8KIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKm9iS2V5OwotICAgIHdjaGFyX3QgKnN1YktleTsKICAgICBsb25nIHJjOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3U6RGVsZXRlS2V5IiwgJm9iS2V5LCAmc3ViS2V5KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByYyA9IFJlZ0RlbGV0ZUtleVcoaEtleSwgc3ViS2V5ICk7CisgICAgcmMgPSBSZWdEZWxldGVLZXlXKGtleSwgc3ViX2tleSApOwogICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsICJSZWdEZWxldGVLZXkiKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5EZWxldGVLZXlFeAorCisgICAga2V5OiBIS0VZCisgICAgICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy4KKyAgICBzdWJfa2V5OiBQeV9VTklDT0RFCisgICAgICAgIEEgc3RyaW5nIHRoYXQgbXVzdCBiZSB0aGUgbmFtZSBvZiBhIHN1YmtleSBvZiB0aGUga2V5IGlkZW50aWZpZWQgYnkKKyAgICAgICAgdGhlIGtleSBwYXJhbWV0ZXIuIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgTm9uZSwgYW5kIHRoZSBrZXkgbWF5IG5vdAorICAgICAgICBoYXZlIHN1YmtleXMuCisgICAgYWNjZXNzOiBSRUdTQU0oY19kZWZhdWx0PSdLRVlfV09XNjRfNjRLRVknKSA9IHdpbnJlZy5LRVlfV09XNjRfNjRLRVkKKyAgICAgICAgQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBhbiBhY2Nlc3MgbWFzayB0aGF0IGRlc2NyaWJlcyB0aGUKKyAgICAgICAgZGVzaXJlZCBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuIERlZmF1bHQgaXMgS0VZX1dPVzY0XzY0S0VZLgorICAgIHJlc2VydmVkOiBpbnQgPSAwCisgICAgICAgIEEgcmVzZXJ2ZWQgaW50ZWdlciwgYW5kIG11c3QgYmUgemVyby4gIERlZmF1bHQgaXMgemVyby4KKworRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleSAoNjQtYml0IE9TIG9ubHkpLgorCitUaGlzIG1ldGhvZCBjYW4gbm90IGRlbGV0ZSBrZXlzIHdpdGggc3Via2V5cy4KKworSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgZW50aXJlIGtleSwgaW5jbHVkaW5nIGFsbCBvZiBpdHMgdmFsdWVzLAoraXMgcmVtb3ZlZC4gIElmIHRoZSBmdW5jdGlvbiBmYWlscywgYW4gT1NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLgorT24gdW5zdXBwb3J0ZWQgV2luZG93cyB2ZXJzaW9ucywgTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QeURlbGV0ZUtleUV4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3dpbnJlZ19EZWxldGVLZXlFeF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICpzdWJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgUkVHU0FNIGFjY2VzcywgaW50IHJlc2VydmVkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAxMzc4ZDg2YWQzZWI5MzYgaW5wdXQ9NzExZDlkODllN2VjYmVkN10qLwogewotICAgIEhLRVkgaEtleTsKLSAgICBQeU9iamVjdCAqa2V5OwogICAgIEhNT0RVTEUgaE1vZDsKICAgICB0eXBlZGVmIExPTkcgKFdJTkFQSSAqUkRLRUZ1bmMpKEhLRVksIGNvbnN0IHdjaGFyX3QqLCBSRUdTQU0sIGludCk7CiAgICAgUkRLRUZ1bmMgcGZuID0gTlVMTDsKLSAgICB3Y2hhcl90ICpzdWJfa2V5OwogICAgIGxvbmcgcmM7Ci0gICAgaW50IHJlc2VydmVkID0gMDsKLSAgICBSRUdTQU0gYWNjZXNzID0gS0VZX1dPVzY0XzY0S0VZOwotCi0gICAgY2hhciAqa3dsaXN0W10gPSB7ImtleSIsICJzdWJfa2V5IiwgImFjY2VzcyIsICJyZXNlcnZlZCIsIE5VTEx9OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk91fGlpOkRlbGV0ZUtleUV4Iiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXksICZzdWJfa2V5LCAmYWNjZXNzLCAmcmVzZXJ2ZWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIVB5SEtFWV9Bc0hLRVkoa2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIE9ubHkgYXZhaWxhYmxlIG9uIDY0Yml0IHBsYXRmb3Jtcywgc28gd2UgbXVzdCBsb2FkIGl0CiAgICAgICAgZHluYW1pY2FsbHkuICovCkBAIC0xMTEyLDQyICs5NjYsNjAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9ICgqcGZuKShoS2V5LCBzdWJfa2V5LCBhY2Nlc3MsIHJlc2VydmVkKTsKKyAgICByYyA9ICgqcGZuKShrZXksIHN1Yl9rZXksIGFjY2VzcywgcmVzZXJ2ZWQpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiUmVnRGVsZXRlS2V5RXgiKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5EZWxldGVWYWx1ZQorCisgICAga2V5OiBIS0VZCisgICAgICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy4KKyAgICB2YWx1ZTogUHlfVU5JQ09ERShhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KQorICAgICAgICBBIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHZhbHVlIHRvIHJlbW92ZS4KKyAgICAvCisKK1JlbW92ZXMgYSBuYW1lZCB2YWx1ZSBmcm9tIGEgcmVnaXN0cnkga2V5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotUHlEZWxldGVWYWx1ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit3aW5yZWdfRGVsZXRlVmFsdWVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSwgUHlfVU5JQ09ERSAqdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjdlN2U5YTUxNGY4NDk1MSBpbnB1dD1hNzhkMzQwN2E0MTk3YjIxXSovCiB7Ci0gICAgSEtFWSBoS2V5OwotICAgIFB5T2JqZWN0ICpvYktleTsKLSAgICB3Y2hhcl90ICpzdWJLZXk7CiAgICAgbG9uZyByYzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9aOkRlbGV0ZVZhbHVlIiwgJm9iS2V5LCAmc3ViS2V5KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBSZWdEZWxldGVWYWx1ZVcoaEtleSwgc3ViS2V5KTsKKyAgICByYyA9IFJlZ0RlbGV0ZVZhbHVlVyhrZXksIHZhbHVlKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyYyAhPUVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdEZWxldGVWYWx1ZSIpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLypbY2xpbmljIGlucHV0XQord2lucmVnLkVudW1LZXkKKworICAgIGtleTogSEtFWQorICAgICAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuCisgICAgaW5kZXg6IGludAorICAgICAgICBBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgaW5kZXggb2YgdGhlIGtleSB0byByZXRyaWV2ZS4KKyAgICAvCisKK0VudW1lcmF0ZXMgc3Via2V5cyBvZiBhbiBvcGVuIHJlZ2lzdHJ5IGtleS4KKworVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbmFtZSBvZiBvbmUgc3Via2V5IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuCitJdCBpcyB0eXBpY2FsbHkgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgYW4gT1NFcnJvciBleGNlcHRpb24gaXMKK3JhaXNlZCwgaW5kaWNhdGluZyBubyBtb3JlIHZhbHVlcyBhcmUgYXZhaWxhYmxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotUHlFbnVtS2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3dpbnJlZ19FbnVtS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIGludCBpbmRleCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yNWE2ZWM1MmNkMTQ3YmM0IGlucHV0PWZhZDlhN2MwMGFiMGUwNGJdKi8KIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKm9iS2V5OwotICAgIGludCBpbmRleDsKICAgICBsb25nIHJjOwogICAgIFB5T2JqZWN0ICpyZXRTdHI7CiAKQEAgLTExNjAsMTMgKzEwMzIsOCBAQAogICAgIHdjaGFyX3QgdG1wYnVmWzI1N107CiAgICAgRFdPUkQgbGVuID0gc2l6ZW9mKHRtcGJ1Zikvc2l6ZW9mKHdjaGFyX3QpOyAvKiBpbmNsdWRlcyBOVUxMIHRlcm1pbmF0b3IgKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2k6RW51bUtleSIsICZvYktleSwgJmluZGV4KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9IFJlZ0VudW1LZXlFeFcoaEtleSwgaW5kZXgsIHRtcGJ1ZiwgJmxlbiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgcmMgPSBSZWdFbnVtS2V5RXhXKGtleSwgaW5kZXgsIHRtcGJ1ZiwgJmxlbiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiUmVnRW51bUtleUV4Iik7CkBAIC0xMTc1LDEyICsxMDQyLDM1IEBACiAgICAgcmV0dXJuIHJldFN0cjsgIC8qIGNhbiBiZSBOVUxMICovCiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5FbnVtVmFsdWUKKworICAgIGtleTogSEtFWQorICAgICAgICAgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLgorICAgIGluZGV4OiBpbnQKKyAgICAgICAgQW4gaW50ZWdlciB0aGF0IGlkZW50aWZpZXMgdGhlIGluZGV4IG9mIHRoZSB2YWx1ZSB0byByZXRyaWV2ZS4KKyAgICAvCisKK0VudW1lcmF0ZXMgdmFsdWVzIG9mIGFuIG9wZW4gcmVnaXN0cnkga2V5LgorCitUaGUgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBuYW1lIG9mIG9uZSBzdWJrZXkgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZC4KK0l0IGlzIHR5cGljYWxseSBjYWxsZWQgcmVwZWF0ZWRseSwgdW50aWwgYW4gT1NFcnJvciBleGNlcHRpb24KK2lzIHJhaXNlZCwgaW5kaWNhdGluZyBubyBtb3JlIHZhbHVlcy4KKworVGhlIHJlc3VsdCBpcyBhIHR1cGxlIG9mIDMgaXRlbXM6CisgIHZhbHVlX25hbWUKKyAgICBBIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIHZhbHVlLgorICB2YWx1ZV9kYXRhCisgICAgQW4gb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHZhbHVlIGRhdGEsIGFuZCB3aG9zZSB0eXBlIGRlcGVuZHMKKyAgICBvbiB0aGUgdW5kZXJseWluZyByZWdpc3RyeSB0eXBlLgorICBkYXRhX3R5cGUKKyAgICBBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiB0aGUgdmFsdWUgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVB5RW51bVZhbHVlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3dpbnJlZ19FbnVtVmFsdWVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSwgaW50IGluZGV4KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQzNjNiNWEwNmY4Nzg5YWMgaW5wdXQ9NDQxNGY0N2E2ZmIyMzhiNV0qLwogewotICAgIEhLRVkgaEtleTsKLSAgICBQeU9iamVjdCAqb2JLZXk7Ci0gICAgaW50IGluZGV4OwogICAgIGxvbmcgcmM7CiAgICAgd2NoYXJfdCAqcmV0VmFsdWVCdWY7CiAgICAgQllURSAqdG1wQnVmOwpAQCAtMTE5MSwxMiArMTA4MSw3IEBACiAgICAgUHlPYmplY3QgKm9iRGF0YTsKICAgICBQeU9iamVjdCAqcmV0VmFsOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaTpFbnVtVmFsdWUiLCAmb2JLZXksICZpbmRleCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoKHJjID0gUmVnUXVlcnlJbmZvS2V5VyhoS2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIGlmICgocmMgPSBSZWdRdWVyeUluZm9LZXlXKGtleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0VmFsdWVTaXplLCAmcmV0RGF0YVNpemUsIE5VTEwsIE5VTEwpKQogICAgICAgICAhPSBFUlJPUl9TVUNDRVNTKQpAQCAtMTIxNyw3ICsxMTAyLDcgQEAKIAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmMgPSBSZWdFbnVtVmFsdWVXKGhLZXksCisgICAgICAgIHJjID0gUmVnRW51bVZhbHVlVyhrZXksCiAgICAgICAgICAgICAgICAgICBpbmRleCwKICAgICAgICAgICAgICAgICAgIHJldFZhbHVlQnVmLAogICAgICAgICAgICAgICAgICAgJnJldFZhbHVlU2l6ZSwKQEAgLTEyNjAsMTkgKzExNDUsMjUgQEAKICAgICByZXR1cm4gcmV0VmFsOwogfQogCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzCisKKyAgICBzdHJpbmc6IFB5X1VOSUNPREUKKyAgICAvCisKK0V4cGFuZCBlbnZpcm9ubWVudCB2YXJzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotUHlFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQord2lucmVnX0V4cGFuZEVudmlyb25tZW50U3RyaW5nc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5X1VOSUNPREUgKnN0cmluZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jYmE0NmFjMjkzYThhZjFhIGlucHV0PWIyYTk3MTRkMmI3NTFhYTZdKi8KIHsKICAgICB3Y2hhcl90ICpyZXRWYWx1ZSA9IE5VTEw7Ci0gICAgd2NoYXJfdCAqc3JjOwogICAgIERXT1JEIHJldFZhbHVlU2l6ZTsKICAgICBEV09SRCByYzsKICAgICBQeU9iamVjdCAqbzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidTpFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MiLCAmc3JjKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXRWYWx1ZVNpemUgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKHNyYywgcmV0VmFsdWUsIDApOworICAgIHJldFZhbHVlU2l6ZSA9IEV4cGFuZEVudmlyb25tZW50U3RyaW5nc1coc3RyaW5nLCByZXRWYWx1ZSwgMCk7CiAgICAgaWYgKHJldFZhbHVlU2l6ZSA9PSAwKSB7CiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyZXRWYWx1ZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGFuZEVudmlyb25tZW50U3RyaW5ncyIpOwpAQCAtMTI4Miw3ICsxMTczLDcgQEAKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogCi0gICAgcmMgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKHNyYywgcmV0VmFsdWUsIHJldFZhbHVlU2l6ZSk7CisgICAgcmMgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NXKHN0cmluZywgcmV0VmFsdWUsIHJldFZhbHVlU2l6ZSk7CiAgICAgaWYgKHJjID09IDApIHsKICAgICAgICAgUHlNZW1fRnJlZShyZXRWYWx1ZSk7CiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyZXRWYWx1ZVNpemUsCkBAIC0xMjkzLDkwICsxMTg0LDE2NiBAQAogICAgIHJldHVybiBvOwogfQogCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuRmx1c2hLZXkKKworICAgIGtleTogSEtFWQorICAgICAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuCisgICAgLworCitXcml0ZXMgYWxsIHRoZSBhdHRyaWJ1dGVzIG9mIGEga2V5IHRvIHRoZSByZWdpc3RyeS4KKworSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjYWxsIEZsdXNoS2V5IHRvIGNoYW5nZSBhIGtleS4gIFJlZ2lzdHJ5IGNoYW5nZXMKK2FyZSBmbHVzaGVkIHRvIGRpc2sgYnkgdGhlIHJlZ2lzdHJ5IHVzaW5nIGl0cyBsYXp5IGZsdXNoZXIuICBSZWdpc3RyeQorY2hhbmdlcyBhcmUgYWxzbyBmbHVzaGVkIHRvIGRpc2sgYXQgc3lzdGVtIHNodXRkb3duLiAgVW5saWtlCitDbG9zZUtleSgpLCB0aGUgRmx1c2hLZXkoKSBtZXRob2QgcmV0dXJucyBvbmx5IHdoZW4gYWxsIHRoZSBkYXRhIGhhcworYmVlbiB3cml0dGVuIHRvIHRoZSByZWdpc3RyeS4KKworQW4gYXBwbGljYXRpb24gc2hvdWxkIG9ubHkgY2FsbCBGbHVzaEtleSgpIGlmIGl0IHJlcXVpcmVzIGFic29sdXRlCitjZXJ0YWludHkgdGhhdCByZWdpc3RyeSBjaGFuZ2VzIGFyZSBvbiBkaXNrLiAgSWYgeW91IGRvbid0IGtub3cgd2hldGhlcgorYSBGbHVzaEtleSgpIGNhbGwgaXMgcmVxdWlyZWQsIGl0IHByb2JhYmx5IGlzbid0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotUHlGbHVzaEtleShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit3aW5yZWdfRmx1c2hLZXlfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNmZjMjMwZDRjNWRjMDQ5IGlucHV0PWY1NzQ1N2MxMjI5N2Q4MmZdKi8KIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKm9iS2V5OwogICAgIGxvbmcgcmM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOkZsdXNoS2V5IiwgJm9iS2V5KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBSZWdGbHVzaEtleShoS2V5KTsKKyAgICByYyA9IFJlZ0ZsdXNoS2V5KGtleSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiUmVnRmx1c2hLZXkiKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9Ci1zdGF0aWMgUHlPYmplY3QgKgotUHlMb2FkS2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKm9iS2V5OwotICAgIHdjaGFyX3QgKnN1YktleTsKLSAgICB3Y2hhcl90ICpmaWxlTmFtZTsKIAorCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuTG9hZEtleQorCisgICAga2V5OiBIS0VZCisgICAgICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy4KKyAgICBzdWJfa2V5OiBQeV9VTklDT0RFCisgICAgICAgIEEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgc3ViLWtleSB0byBsb2FkLgorICAgIGZpbGVfbmFtZTogUHlfVU5JQ09ERQorICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBsb2FkIHJlZ2lzdHJ5IGRhdGEgZnJvbS4gIFRoaXMgZmlsZSBtdXN0CisgICAgICAgIGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggdGhlIFNhdmVLZXkoKSBmdW5jdGlvbi4gIFVuZGVyIHRoZSBmaWxlCisgICAgICAgIGFsbG9jYXRpb24gdGFibGUgKEZBVCkgZmlsZSBzeXN0ZW0sIHRoZSBmaWxlbmFtZSBtYXkgbm90IGhhdmUgYW4KKyAgICAgICAgZXh0ZW5zaW9uLgorICAgIC8KKworSW5zZXJ0IGRhdGEgaW50byB0aGUgcmVnaXN0cnkgZnJvbSBhIGZpbGUuCisKK0NyZWF0ZXMgYSBzdWJrZXkgdW5kZXIgdGhlIHNwZWNpZmllZCBrZXkgYW5kIHN0b3JlcyByZWdpc3RyYXRpb24KK2luZm9ybWF0aW9uIGZyb20gYSBzcGVjaWZpZWQgZmlsZSBpbnRvIHRoYXQgc3Via2V5LgorCitBIGNhbGwgdG8gTG9hZEtleSgpIGZhaWxzIGlmIHRoZSBjYWxsaW5nIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSB0aGUKK1NFX1JFU1RPUkVfUFJJVklMRUdFIHByaXZpbGVnZS4KKworSWYga2V5IGlzIGEgaGFuZGxlIHJldHVybmVkIGJ5IENvbm5lY3RSZWdpc3RyeSgpLCB0aGVuIHRoZSBwYXRoCitzcGVjaWZpZWQgaW4gZmlsZU5hbWUgaXMgcmVsYXRpdmUgdG8gdGhlIHJlbW90ZSBjb21wdXRlci4KKworVGhlIE1TRE4gZG9jcyBpbXBseSBrZXkgbXVzdCBiZSBpbiB0aGUgSEtFWV9VU0VSIG9yIEhLRVlfTE9DQUxfTUFDSElORQordHJlZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19Mb2FkS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKnN1Yl9rZXksCisgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKmZpbGVfbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04NzM0NDAwNWM1OTA1Y2RlIGlucHV0PWUzYjViNDVhZGUzMTE1ODJdKi8KK3sKICAgICBsb25nIHJjOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3V1OkxvYWRLZXkiLCAmb2JLZXksICZzdWJLZXksICZmaWxlTmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBSZWdMb2FkS2V5VyhoS2V5LCBzdWJLZXksIGZpbGVOYW1lICk7CisgICAgcmMgPSBSZWdMb2FkS2V5VyhrZXksIHN1Yl9rZXksIGZpbGVfbmFtZSApOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywgIlJlZ0xvYWRLZXkiKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1QeU9wZW5LZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorLypbY2xpbmljIGlucHV0XQord2lucmVnLk9wZW5LZXkgLT4gSEtFWQorCisgICAga2V5OiBIS0VZCisgICAgICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy4KKyAgICBzdWJfa2V5OiBQeV9VTklDT0RFKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pCisgICAgICAgIEEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgc3ViX2tleSB0byBvcGVuLgorICAgIHJlc2VydmVkOiBpbnQgPSAwCisgICAgICAgIEEgcmVzZXJ2ZWQgaW50ZWdlciB0aGF0IG11c3QgYmUgemVyby4gIERlZmF1bHQgaXMgemVyby4KKyAgICBhY2Nlc3M6IFJFR1NBTShjX2RlZmF1bHQ9J0tFWV9SRUFEJykgPSB3aW5yZWcuS0VZX1JFQUQKKyAgICAgICAgQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBhbiBhY2Nlc3MgbWFzayB0aGF0IGRlc2NyaWJlcyB0aGUgZGVzaXJlZAorICAgICAgICBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuICBEZWZhdWx0IGlzIEtFWV9SRUFELgorCitPcGVucyB0aGUgc3BlY2lmaWVkIGtleS4KKworVGhlIHJlc3VsdCBpcyBhIG5ldyBoYW5kbGUgdG8gdGhlIHNwZWNpZmllZCBrZXkuCitJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIEhLRVkKK3dpbnJlZ19PcGVuS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKnN1Yl9rZXksCisgICAgICAgICAgICAgICAgICAgIGludCByZXNlcnZlZCwgUkVHU0FNIGFjY2VzcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hOTA1ZjFiOTQ3ZjNjZTg1IGlucHV0PTA5ODUwNWFjMzZhOWFlMjhdKi8KIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKmtleTsKLSAgICB3Y2hhcl90ICpzdWJfa2V5OwotICAgIGludCByZXNlcnZlZCA9IDA7CiAgICAgSEtFWSByZXRLZXk7CiAgICAgbG9uZyByYzsKLSAgICBSRUdTQU0gYWNjZXNzID0gS0VZX1JFQUQ7Ci0KLSAgICBjaGFyICprd2xpc3RbXSA9IHsia2V5IiwgInN1Yl9rZXkiLCAicmVzZXJ2ZWQiLCAiYWNjZXNzIiwgTlVMTH07Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPWnxpaTpPcGVuS2V5Iiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXksICZzdWJfa2V5LCAmcmVzZXJ2ZWQsICZhY2Nlc3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIVB5SEtFWV9Bc0hLRVkoa2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9IFJlZ09wZW5LZXlFeFcoaEtleSwgc3ViX2tleSwgcmVzZXJ2ZWQsIGFjY2VzcywgJnJldEtleSk7CisgICAgcmMgPSBSZWdPcGVuS2V5RXhXKGtleSwgc3ViX2tleSwgcmVzZXJ2ZWQsIGFjY2VzcywgJnJldEtleSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiUmVnT3BlbktleUV4Iik7Ci0gICAgcmV0dXJuIFB5SEtFWV9Gcm9tSEtFWShyZXRLZXkpOworICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiUmVnT3BlbktleUV4Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmV0S2V5OwogfQogCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuT3BlbktleUV4ID0gd2lucmVnLk9wZW5LZXkKKworT3BlbnMgdGhlIHNwZWNpZmllZCBrZXkuCisKK1RoZSByZXN1bHQgaXMgYSBuZXcgaGFuZGxlIHRvIHRoZSBzcGVjaWZpZWQga2V5LgorSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBPU0Vycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBIS0VZCit3aW5yZWdfT3BlbktleUV4X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKnN1Yl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc2VydmVkLCBSRUdTQU0gYWNjZXNzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIyNjA0MjU5M2IzN2U5NDAgaW5wdXQ9YzZjNDk3MmFmODYyMjk1OV0qLworeworICAgIHJldHVybiB3aW5yZWdfT3BlbktleV9pbXBsKG1vZHVsZSwga2V5LCBzdWJfa2V5LCByZXNlcnZlZCwgYWNjZXNzKTsKK30KKworLypbY2xpbmljIGlucHV0XQord2lucmVnLlF1ZXJ5SW5mb0tleQorCisgICAga2V5OiBIS0VZCisgICAgICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy4KKyAgICAvCisKK1JldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBrZXkuCisKK1RoZSByZXN1bHQgaXMgYSB0dXBsZSBvZiAzIGl0ZW1zOgorQW4gaW50ZWdlciB0aGF0IGlkZW50aWZpZXMgdGhlIG51bWJlciBvZiBzdWIga2V5cyB0aGlzIGtleSBoYXMuCitBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGlzIGtleSBoYXMuCitBbiBpbnRlZ2VyIHRoYXQgaWRlbnRpZmllcyB3aGVuIHRoZSBrZXkgd2FzIGxhc3QgbW9kaWZpZWQgKGlmIGF2YWlsYWJsZSkKK2FzIDEwMCdzIG9mIG5hbm9zZWNvbmRzIHNpbmNlIEphbiAxLCAxNjAwLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlRdWVyeUluZm9LZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQord2lucmVnX1F1ZXJ5SW5mb0tleV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRjNjU3YjgzNTZhNGY0MzggaW5wdXQ9YzM1OTM4MDIzOTBjZGUxZl0qLwogewotICBIS0VZIGhLZXk7Ci0gIFB5T2JqZWN0ICpvYktleTsKICAgbG9uZyByYzsKICAgRFdPUkQgblN1YktleXMsIG5WYWx1ZXM7CiAgIEZJTEVUSU1FIGZ0OwogICBMQVJHRV9JTlRFR0VSIGxpOwogICBQeU9iamVjdCAqbDsKICAgUHlPYmplY3QgKnJldDsKLSAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOlF1ZXJ5SW5mb0tleSIsICZvYktleSkpCi0gICAgcmV0dXJuIE5VTEw7Ci0gIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKLSAgICByZXR1cm4gTlVMTDsKLSAgaWYgKChyYyA9IFJlZ1F1ZXJ5SW5mb0tleShoS2V5LCBOVUxMLCBOVUxMLCAwLCAmblN1YktleXMsIE5VTEwsIE5VTEwsCisKKyAgaWYgKChyYyA9IFJlZ1F1ZXJ5SW5mb0tleShrZXksIE5VTEwsIE5VTEwsIDAsICZuU3ViS2V5cywgTlVMTCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmblZhbHVlcywgIE5VTEwsICBOVUxMLCBOVUxMLCAmZnQpKQogICAgICAgIT0gRVJST1JfU1VDQ0VTUykKICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsICJSZWdRdWVyeUluZm9LZXkiKTsKQEAgLTEzOTAsMTIgKzEzNTcsMzEgQEAKICAgcmV0dXJuIHJldDsKIH0KIAorLypbY2xpbmljIGlucHV0XQord2lucmVnLlF1ZXJ5VmFsdWUKKworICAgIGtleTogSEtFWQorICAgICAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuCisgICAgc3ViX2tleTogUHlfVU5JQ09ERShhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KQorICAgICAgICBBIHN0cmluZyB0aGF0IGhvbGRzIHRoZSBuYW1lIG9mIHRoZSBzdWJrZXkgd2l0aCB3aGljaCB0aGUgdmFsdWUKKyAgICAgICAgaXMgYXNzb2NpYXRlZC4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIE5vbmUgb3IgZW1wdHksIHRoZSBmdW5jdGlvbgorICAgICAgICByZXRyaWV2ZXMgdGhlIHZhbHVlIHNldCBieSB0aGUgU2V0VmFsdWUoKSBtZXRob2QgZm9yIHRoZSBrZXkKKyAgICAgICAgaWRlbnRpZmllZCBieSBrZXkuCisgICAgLworCitSZXRyaWV2ZXMgdGhlIHVubmFtZWQgdmFsdWUgZm9yIGEga2V5LgorCitWYWx1ZXMgaW4gdGhlIHJlZ2lzdHJ5IGhhdmUgbmFtZSwgdHlwZSwgYW5kIGRhdGEgY29tcG9uZW50cy4gVGhpcyBtZXRob2QKK3JldHJpZXZlcyB0aGUgZGF0YSBmb3IgYSBrZXkncyBmaXJzdCB2YWx1ZSB0aGF0IGhhcyBhIE5VTEwgbmFtZS4KK0J1dCBzaW5jZSB0aGUgdW5kZXJseWluZyBBUEkgY2FsbCBkb2Vzbid0IHJldHVybiB0aGUgdHlwZSwgeW91J2xsCitwcm9iYWJseSBiZSBoYXBwaWVyIHVzaW5nIFF1ZXJ5VmFsdWVFeDsgdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGhlcmUgZm9yCitjb21wbGV0ZW5lc3MuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVF1ZXJ5VmFsdWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQord2lucmVnX1F1ZXJ5VmFsdWVfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSwgUHlfVU5JQ09ERSAqc3ViX2tleSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yYmI4ZDFlMDJjMTBkMGI2IGlucHV0PTQxY2FmYmJmNDIzYjIxZDZdKi8KIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKm9iS2V5OwotICAgIHdjaGFyX3QgKnN1YktleTsKICAgICBsb25nIHJjOwogICAgIFB5T2JqZWN0ICpyZXRTdHI7CiAgICAgd2NoYXJfdCAqcmV0QnVmOwpAQCAtMTQwMywxMyArMTM4OSw3IEBACiAgICAgRFdPUkQgcmV0U2l6ZSA9IDA7CiAgICAgd2NoYXJfdCAqdG1wOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPWjpRdWVyeVZhbHVlIiwgJm9iS2V5LCAmc3ViS2V5KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmMgPSBSZWdRdWVyeVZhbHVlVyhoS2V5LCBzdWJLZXksIE5VTEwsICZyZXRTaXplKTsKKyAgICByYyA9IFJlZ1F1ZXJ5VmFsdWVXKGtleSwgc3ViX2tleSwgTlVMTCwgJnJldFNpemUpOwogICAgIGlmIChyYyA9PSBFUlJPUl9NT1JFX0RBVEEpCiAgICAgICAgIHJldFNpemUgPSAyNTY7CiAgICAgZWxzZSBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKQEAgLTE0MjMsNyArMTQwMyw3IEBACiAKICAgICB3aGlsZSAoMSkgewogICAgICAgICByZXRTaXplID0gYnVmU2l6ZTsKLSAgICAgICAgcmMgPSBSZWdRdWVyeVZhbHVlVyhoS2V5LCBzdWJLZXksIHJldEJ1ZiwgJnJldFNpemUpOworICAgICAgICByYyA9IFJlZ1F1ZXJ5VmFsdWVXKGtleSwgc3ViX2tleSwgcmV0QnVmLCAmcmV0U2l6ZSk7CiAgICAgICAgIGlmIChyYyAhPSBFUlJPUl9NT1JFX0RBVEEpCiAgICAgICAgICAgICBicmVhazsKIApAQCAtMTQ0NywxMyArMTQyNywyOCBAQAogICAgIHJldHVybiByZXRTdHI7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1QeVF1ZXJ5VmFsdWVFeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgSEtFWSBoS2V5OwotICAgIFB5T2JqZWN0ICpvYktleTsKLSAgICB3Y2hhcl90ICp2YWx1ZU5hbWU7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5RdWVyeVZhbHVlRXgKKworICAgIGtleTogSEtFWQorICAgICAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuCisgICAgbmFtZTogUHlfVU5JQ09ERShhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9KQorICAgICAgICBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSB2YWx1ZSB0byBxdWVyeS4KKyAgICAvCisKK1JldHJpZXZlcyB0aGUgdHlwZSBhbmQgdmFsdWUgb2YgYSBzcGVjaWZpZWQgc3ViLWtleS4KKworQmVoYXZlcyBtb3N0bHkgbGlrZSBRdWVyeVZhbHVlKCksIGJ1dCBhbHNvIHJldHVybnMgdGhlIHR5cGUgb2YgdGhlCitzcGVjaWZpZWQgdmFsdWUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG9wZW4gcmVnaXN0cnkga2V5LgorCitUaGUgcmV0dXJuIHZhbHVlIGlzIGEgdHVwbGUgb2YgdGhlIHZhbHVlIGFuZCB0aGUgdHlwZV9pZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbnJlZ19RdWVyeVZhbHVlRXhfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBIS0VZIGtleSwgUHlfVU5JQ09ERSAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01YjRmYTNlMzNkNmQzZThmIGlucHV0PWNmMzY2Y2FkYTQ4MzY4OTFdKi8KK3sKICAgICBsb25nIHJjOwogICAgIEJZVEUgKnJldEJ1ZiwgKnRtcDsKICAgICBEV09SRCBidWZTaXplID0gMCwgcmV0U2l6ZTsKQEAgLTE0NjEsMTMgKzE0NTYsNyBAQAogICAgIFB5T2JqZWN0ICpvYkRhdGE7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT1o6UXVlcnlWYWx1ZUV4IiwgJm9iS2V5LCAmdmFsdWVOYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmMgPSBSZWdRdWVyeVZhbHVlRXhXKGhLZXksIHZhbHVlTmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgJmJ1ZlNpemUpOworICAgIHJjID0gUmVnUXVlcnlWYWx1ZUV4VyhrZXksIG5hbWUsIE5VTEwsIE5VTEwsIE5VTEwsICZidWZTaXplKTsKICAgICBpZiAocmMgPT0gRVJST1JfTU9SRV9EQVRBKQogICAgICAgICBidWZTaXplID0gMjU2OwogICAgIGVsc2UgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCkBAIC0xNDc5LDcgKzE0NjgsNyBAQAogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgcmV0U2l6ZSA9IGJ1ZlNpemU7Ci0gICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZUV4VyhoS2V5LCB2YWx1ZU5hbWUsIE5VTEwsICZ0eXAsCisgICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZUV4VyhrZXksIG5hbWUsIE5VTEwsICZ0eXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFICopcmV0QnVmLCAmcmV0U2l6ZSk7CiAgICAgICAgIGlmIChyYyAhPSBFUlJPUl9NT1JFX0RBVEEpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE1MDcsOTEgKzE0OTYsMTQ5IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLypbY2xpbmljIGlucHV0XQord2lucmVnLlNhdmVLZXkKKworICAgIGtleTogSEtFWQorICAgICAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuCisgICAgZmlsZV9uYW1lOiBQeV9VTklDT0RFCisgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHNhdmUgcmVnaXN0cnkgZGF0YSB0by4gIFRoaXMgZmlsZSBjYW5ub3QKKyAgICAgICAgYWxyZWFkeSBleGlzdC4gSWYgdGhpcyBmaWxlbmFtZSBpbmNsdWRlcyBhbiBleHRlbnNpb24sIGl0IGNhbm5vdCBiZQorICAgICAgICB1c2VkIG9uIGZpbGUgYWxsb2NhdGlvbiB0YWJsZSAoRkFUKSBmaWxlIHN5c3RlbXMgYnkgdGhlIExvYWRLZXkoKSwKKyAgICAgICAgUmVwbGFjZUtleSgpIG9yIFJlc3RvcmVLZXkoKSBtZXRob2RzLgorICAgIC8KKworU2F2ZXMgdGhlIHNwZWNpZmllZCBrZXksIGFuZCBhbGwgaXRzIHN1YmtleXMgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgorCitJZiBrZXkgcmVwcmVzZW50cyBhIGtleSBvbiBhIHJlbW90ZSBjb21wdXRlciwgdGhlIHBhdGggZGVzY3JpYmVkIGJ5CitmaWxlX25hbWUgaXMgcmVsYXRpdmUgdG8gdGhlIHJlbW90ZSBjb21wdXRlci4KKworVGhlIGNhbGxlciBvZiB0aGlzIG1ldGhvZCBtdXN0IHBvc3Nlc3MgdGhlIFNlQmFja3VwUHJpdmlsZWdlCitzZWN1cml0eSBwcml2aWxlZ2UuICBUaGlzIGZ1bmN0aW9uIHBhc3NlcyBOVUxMIGZvciBzZWN1cml0eV9hdHRyaWJ1dGVzCit0byB0aGUgQVBJLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlTYXZlS2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3dpbnJlZ19TYXZlS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXksIFB5X1VOSUNPREUgKmZpbGVfbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xZGRhMTUwMmJkNGMzMGQ4IGlucHV0PWRhNzM1MjQxZjkxYWM3YTJdKi8KIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKm9iS2V5OwotICAgIHdjaGFyX3QgKmZpbGVOYW1lOwogICAgIExQU0VDVVJJVFlfQVRUUklCVVRFUyBwU0EgPSBOVUxMOwogCiAgICAgbG9uZyByYzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk91OlNhdmVLZXkiLCAmb2JLZXksICZmaWxlTmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAvKiAgT25lIGRheSB3ZSBtYXkgZ2V0IHNlY3VyaXR5IGludG8gdGhlIGNvcmU/CiAgICAgaWYgKCFQeVdpbk9iamVjdF9Bc1NFQ1VSSVRZX0FUVFJJQlVURVMob2JTQSwgJnBTQSwgVFJVRSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogKi8KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBSZWdTYXZlS2V5VyhoS2V5LCBmaWxlTmFtZSwgcFNBICk7CisgICAgcmMgPSBSZWdTYXZlS2V5VyhrZXksIGZpbGVfbmFtZSwgcFNBICk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmMgIT0gRVJST1JfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZ1bmN0aW9uKHJjLCAiUmVnU2F2ZUtleSIpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLypbY2xpbmljIGlucHV0XQord2lucmVnLlNldFZhbHVlCisKKyAgICBrZXk6IEhLRVkKKyAgICAgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLgorICAgIHN1Yl9rZXk6IFB5X1VOSUNPREUoYWNjZXB0PXtzdHIsIE5vbmVUeXBlfSkKKyAgICAgICAgQSBzdHJpbmcgdGhhdCBuYW1lcyB0aGUgc3Via2V5IHdpdGggd2hpY2ggdGhlIHZhbHVlIGlzIGFzc29jaWF0ZWQuCisgICAgdHlwZTogRFdPUkQKKyAgICAgICAgQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgZGF0YS4gIEN1cnJlbnRseSB0aGlzIG11c3QKKyAgICAgICAgYmUgUkVHX1NaLCBtZWFuaW5nIG9ubHkgc3RyaW5ncyBhcmUgc3VwcG9ydGVkLgorICAgIHZhbHVlOiBQeV9VTklDT0RFKHplcm9lcz1UcnVlKQorICAgICAgICBBIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgbmV3IHZhbHVlLgorICAgIC8KKworQXNzb2NpYXRlcyBhIHZhbHVlIHdpdGggYSBzcGVjaWZpZWQga2V5LgorCitJZiB0aGUga2V5IHNwZWNpZmllZCBieSB0aGUgc3ViX2tleSBwYXJhbWV0ZXIgZG9lcyBub3QgZXhpc3QsIHRoZQorU2V0VmFsdWUgZnVuY3Rpb24gY3JlYXRlcyBpdC4KKworVmFsdWUgbGVuZ3RocyBhcmUgbGltaXRlZCBieSBhdmFpbGFibGUgbWVtb3J5LiBMb25nIHZhbHVlcyAobW9yZSB0aGFuCisyMDQ4IGJ5dGVzKSBzaG91bGQgYmUgc3RvcmVkIGFzIGZpbGVzIHdpdGggdGhlIGZpbGVuYW1lcyBzdG9yZWQgaW4KK3RoZSBjb25maWd1cmF0aW9uIHJlZ2lzdHJ5IHRvIGhlbHAgdGhlIHJlZ2lzdHJ5IHBlcmZvcm0gZWZmaWNpZW50bHkuCisKK1RoZSBrZXkgaWRlbnRpZmllZCBieSB0aGUga2V5IHBhcmFtZXRlciBtdXN0IGhhdmUgYmVlbiBvcGVuZWQgd2l0aAorS0VZX1NFVF9WQUxVRSBhY2Nlc3MuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVNldFZhbHVlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3dpbnJlZ19TZXRWYWx1ZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICpzdWJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgRFdPUkQgdHlwZSwgUHlfVU5JQ09ERSAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV9jbGVhbl90IHZhbHVlX2xlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xZTMxOTMxMTc0ODIwNjMxIGlucHV0PTJjZDJhZGFiNzkzMzljNTNdKi8KIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKm9iS2V5OwotICAgIHdjaGFyX3QgKnN1YktleTsKLSAgICB3Y2hhcl90ICpzdHI7Ci0gICAgRFdPUkQgdHlwOwotICAgIERXT1JEIGxlbjsKICAgICBsb25nIHJjOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT1ppdSM6U2V0VmFsdWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ0eXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4pKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICh0eXAgIT0gUkVHX1NaKSB7CisKKyAgICBpZiAodHlwZSAhPSBSRUdfU1opIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJUeXBlIG11c3QgYmUgd2lucmVnLlJFR19TWiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBSZWdTZXRWYWx1ZVcoaEtleSwgc3ViS2V5LCBSRUdfU1osIHN0ciwgbGVuKzEpOworICAgIHJjID0gUmVnU2V0VmFsdWVXKGtleSwgc3ViX2tleSwgUkVHX1NaLCB2YWx1ZSwgdmFsdWVfbGVuZ3RoKzEpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywgIlJlZ1NldFZhbHVlIik7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuU2V0VmFsdWVFeAorCisgICAga2V5OiBIS0VZCisgICAgICAgIEFuIGFscmVhZHkgb3BlbiBrZXksIG9yIGFueSBvbmUgb2YgdGhlIHByZWRlZmluZWQgSEtFWV8qIGNvbnN0YW50cy4KKyAgICB2YWx1ZV9uYW1lOiBQeV9VTklDT0RFKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pCisgICAgICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHZhbHVlIHRvIHNldCwgb3IgTm9uZS4KKyAgICByZXNlcnZlZDogb2JqZWN0CisgICAgICAgIENhbiBiZSBhbnl0aGluZyAtIHplcm8gaXMgYWx3YXlzIHBhc3NlZCB0byB0aGUgQVBJLgorICAgIHR5cGU6IERXT1JECisgICAgICAgIEFuIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIGRhdGEsIG9uZSBvZjoKKyAgICAgICAgUkVHX0JJTkFSWSAtLSBCaW5hcnkgZGF0YSBpbiBhbnkgZm9ybS4KKyAgICAgICAgUkVHX0RXT1JEIC0tIEEgMzItYml0IG51bWJlci4KKyAgICAgICAgUkVHX0RXT1JEX0xJVFRMRV9FTkRJQU4gLS0gQSAzMi1iaXQgbnVtYmVyIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorICAgICAgICBSRUdfRFdPUkRfQklHX0VORElBTiAtLSBBIDMyLWJpdCBudW1iZXIgaW4gYmlnLWVuZGlhbiBmb3JtYXQuCisgICAgICAgIFJFR19FWFBBTkRfU1ogLS0gQSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRoYXQgY29udGFpbnMgdW5leHBhbmRlZAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzIChmb3IgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAlUEFUSCUpLgorICAgICAgICBSRUdfTElOSyAtLSBBIFVuaWNvZGUgc3ltYm9saWMgbGluay4KKyAgICAgICAgUkVHX01VTFRJX1NaIC0tIEEgc2VxdWVuY2Ugb2YgbnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MsIHRlcm1pbmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHR3byBudWxsIGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgUHl0aG9uIGhhbmRsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgdGVybWluYXRpb24gYXV0b21hdGljYWxseS4KKyAgICAgICAgUkVHX05PTkUgLS0gTm8gZGVmaW5lZCB2YWx1ZSB0eXBlLgorICAgICAgICBSRUdfUkVTT1VSQ0VfTElTVCAtLSBBIGRldmljZS1kcml2ZXIgcmVzb3VyY2UgbGlzdC4KKyAgICAgICAgUkVHX1NaIC0tIEEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICB2YWx1ZTogb2JqZWN0CisgICAgICAgIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBuZXcgdmFsdWUuCisgICAgLworCitTdG9yZXMgZGF0YSBpbiB0aGUgdmFsdWUgZmllbGQgb2YgYW4gb3BlbiByZWdpc3RyeSBrZXkuCisKK1RoaXMgbWV0aG9kIGNhbiBhbHNvIHNldCBhZGRpdGlvbmFsIHZhbHVlIGFuZCB0eXBlIGluZm9ybWF0aW9uIGZvciB0aGUKK3NwZWNpZmllZCBrZXkuICBUaGUga2V5IGlkZW50aWZpZWQgYnkgdGhlIGtleSBwYXJhbWV0ZXIgbXVzdCBoYXZlIGJlZW4KK29wZW5lZCB3aXRoIEtFWV9TRVRfVkFMVUUgYWNjZXNzLgorCitUbyBvcGVuIHRoZSBrZXksIHVzZSB0aGUgQ3JlYXRlS2V5RXgoKSBvciBPcGVuS2V5RXgoKSBtZXRob2RzLgorCitWYWx1ZSBsZW5ndGhzIGFyZSBsaW1pdGVkIGJ5IGF2YWlsYWJsZSBtZW1vcnkuIExvbmcgdmFsdWVzIChtb3JlIHRoYW4KKzIwNDggYnl0ZXMpIHNob3VsZCBiZSBzdG9yZWQgYXMgZmlsZXMgd2l0aCB0aGUgZmlsZW5hbWVzIHN0b3JlZCBpbgordGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0cnkgdG8gaGVscCB0aGUgcmVnaXN0cnkgcGVyZm9ybSBlZmZpY2llbnRseS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVB5U2V0VmFsdWVFeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit3aW5yZWdfU2V0VmFsdWVFeF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5LCBQeV9VTklDT0RFICp2YWx1ZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVzZXJ2ZWQsIERXT1JEIHR5cGUsIFB5T2JqZWN0ICp2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jODhjODQyNmI2YzAwZWM3IGlucHV0PWYxYjE2Y2JjYzNlZDQxMDFdKi8KIHsKLSAgICBIS0VZIGhLZXk7Ci0gICAgUHlPYmplY3QgKm9iS2V5OwotICAgIHdjaGFyX3QgKnZhbHVlTmFtZTsKLSAgICBQeU9iamVjdCAqb2JSZXM7Ci0gICAgUHlPYmplY3QgKnZhbHVlOwogICAgIEJZVEUgKmRhdGE7CiAgICAgRFdPUkQgbGVuOwotICAgIERXT1JEIHR5cDsKIAogICAgIExPTkcgcmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9aT2lPOlNldFZhbHVlRXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvYlJlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnR5cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIVB5MlJlZyh2YWx1ZSwgdHlwLCAmZGF0YSwgJmxlbikpCisgICAgaWYgKCFQeTJSZWcodmFsdWUsIHR5cGUsICZkYXRhLCAmbGVuKSkKICAgICB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtMTU5OSwzMSArMTY0Niw0MCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gUmVnU2V0VmFsdWVFeFcoaEtleSwgdmFsdWVOYW1lLCAwLCB0eXAsIGRhdGEsIGxlbik7CisgICAgcmMgPSBSZWdTZXRWYWx1ZUV4VyhrZXksIHZhbHVlX25hbWUsIDAsIHR5cGUsIGRhdGEsIGxlbik7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBQeU1lbV9ERUwoZGF0YSk7CiAgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdTZXRWYWx1ZUV4Iik7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuRGlzYWJsZVJlZmxlY3Rpb25LZXkKKworICAgIGtleTogSEtFWQorICAgICAgICBBbiBhbHJlYWR5IG9wZW4ga2V5LCBvciBhbnkgb25lIG9mIHRoZSBwcmVkZWZpbmVkIEhLRVlfKiBjb25zdGFudHMuCisgICAgLworCitEaXNhYmxlcyByZWdpc3RyeSByZWZsZWN0aW9uIGZvciAzMmJpdCBwcm9jZXNzZXMgcnVubmluZyBvbiBhIDY0Yml0IE9TLgorCitXaWxsIGdlbmVyYWxseSByYWlzZSBOb3RJbXBsZW1lbnRlZCBpZiBleGVjdXRlZCBvbiBhIDMyYml0IE9TLgorCitJZiB0aGUga2V5IGlzIG5vdCBvbiB0aGUgcmVmbGVjdGlvbiBsaXN0LCB0aGUgZnVuY3Rpb24gc3VjY2VlZHMgYnV0IGhhcworbm8gZWZmZWN0LiAgRGlzYWJsaW5nIHJlZmxlY3Rpb24gZm9yIGEga2V5IGRvZXMgbm90IGFmZmVjdCByZWZsZWN0aW9uCitvZiBhbnkgc3Via2V5cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLVB5RGlzYWJsZVJlZmxlY3Rpb25LZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQord2lucmVnX0Rpc2FibGVSZWZsZWN0aW9uS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXkpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODMwY2NlNTA0Y2M3NjRiNCBpbnB1dD1hNmM5ZTVjYTU0MTAxOTNjXSovCiB7Ci0gICAgSEtFWSBoS2V5OwotICAgIFB5T2JqZWN0ICpvYktleTsKICAgICBITU9EVUxFIGhNb2Q7CiAgICAgdHlwZWRlZiBMT05HIChXSU5BUEkgKlJEUktGdW5jKShIS0VZKTsKICAgICBSRFJLRnVuYyBwZm4gPSBOVUxMOwogICAgIExPTkcgcmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86RGlzYWJsZVJlZmxlY3Rpb25LZXkiLCAmb2JLZXkpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgLyogT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKICAgICAgICBkeW5hbWljYWxseS4qLwogICAgIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGVXKEwiYWR2YXBpMzIuZGxsIik7CkBAIC0xNjM2LDMwICsxNjkyLDM3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSAoKnBmbikoaEtleSk7CisgICAgcmMgPSAoKnBmbikoa2V5KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnRGlzYWJsZVJlZmxlY3Rpb25LZXkiKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK3dpbnJlZy5FbmFibGVSZWZsZWN0aW9uS2V5CisKKyAgICBrZXk6IEhLRVkKKyAgICAgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLgorICAgIC8KKworUmVzdG9yZXMgcmVnaXN0cnkgcmVmbGVjdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBkaXNhYmxlZCBrZXkuCisKK1dpbGwgZ2VuZXJhbGx5IHJhaXNlIE5vdEltcGxlbWVudGVkIGlmIGV4ZWN1dGVkIG9uIGEgMzJiaXQgT1MuCitSZXN0b3JpbmcgcmVmbGVjdGlvbiBmb3IgYSBrZXkgZG9lcyBub3QgYWZmZWN0IHJlZmxlY3Rpb24gb2YgYW55CitzdWJrZXlzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotUHlFbmFibGVSZWZsZWN0aW9uS2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3dpbnJlZ19FbmFibGVSZWZsZWN0aW9uS2V5X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgSEtFWSBrZXkpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODZmYTEzODVmZGQ5Y2U1NyBpbnB1dD03NzQ4YWJiYWNkMWUxNjZhXSovCiB7Ci0gICAgSEtFWSBoS2V5OwotICAgIFB5T2JqZWN0ICpvYktleTsKICAgICBITU9EVUxFIGhNb2Q7CiAgICAgdHlwZWRlZiBMT05HIChXSU5BUEkgKlJFUktGdW5jKShIS0VZKTsKICAgICBSRVJLRnVuYyBwZm4gPSBOVUxMOwogICAgIExPTkcgcmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86RW5hYmxlUmVmbGVjdGlvbktleSIsICZvYktleSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICAvKiBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAogICAgICAgIGR5bmFtaWNhbGx5LiovCiAgICAgaE1vZCA9IEdldE1vZHVsZUhhbmRsZVcoTCJhZHZhcGkzMi5kbGwiKTsKQEAgLTE2NzIsMzEgKzE3MzUsMzYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9ICgqcGZuKShoS2V5KTsKKyAgICByYyA9ICgqcGZuKShrZXkpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWdFbmFibGVSZWZsZWN0aW9uS2V5Iik7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCisvKltjbGluaWMgaW5wdXRdCit3aW5yZWcuUXVlcnlSZWZsZWN0aW9uS2V5CisKKyAgICBrZXk6IEhLRVkKKyAgICAgICAgQW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLgorICAgIC8KKworUmV0dXJucyB0aGUgcmVmbGVjdGlvbiBzdGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBrZXkgYXMgYSBib29sLgorCitXaWxsIGdlbmVyYWxseSByYWlzZSBOb3RJbXBsZW1lbnRlZCBpZiBleGVjdXRlZCBvbiBhIDMyYml0IE9TLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotUHlRdWVyeVJlZmxlY3Rpb25LZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQord2lucmVnX1F1ZXJ5UmVmbGVjdGlvbktleV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIEhLRVkga2V5KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTRlNzc0YWYyODhjM2ViYjkgaW5wdXQ9OWYzMjVlYWNiNWE2NWQ4OF0qLwogewotICAgIEhLRVkgaEtleTsKLSAgICBQeU9iamVjdCAqb2JLZXk7CiAgICAgSE1PRFVMRSBoTW9kOwogICAgIHR5cGVkZWYgTE9ORyAoV0lOQVBJICpSUVJLRnVuYykoSEtFWSwgQk9PTCAqKTsKICAgICBSUVJLRnVuYyBwZm4gPSBOVUxMOwogICAgIEJPT0wgcmVzdWx0OwogICAgIExPTkcgcmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86UXVlcnlSZWZsZWN0aW9uS2V5IiwgJm9iS2V5KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFQeUhLRVlfQXNIS0VZKG9iS2V5LCAmaEtleSwgRkFMU0UpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIC8qIE9ubHkgYXZhaWxhYmxlIG9uIDY0Yml0IHBsYXRmb3Jtcywgc28gd2UgbXVzdCBsb2FkIGl0CiAgICAgICAgZHluYW1pY2FsbHkuKi8KICAgICBoTW9kID0gR2V0TW9kdWxlSGFuZGxlVyhMImFkdmFwaTMyLmRsbCIpOwpAQCAtMTcwOSw3ICsxNzc3LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9ICgqcGZuKShoS2V5LCAmcmVzdWx0KTsKKyAgICByYyA9ICgqcGZuKShrZXksICZyZXN1bHQpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywKQEAgLTE3MTgsMzQgKzE3ODYsMjkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiB3aW5yZWdfbWV0aG9kc1tdID0gewotICAgIHsiQ2xvc2VLZXkiLCAgICAgICAgIFB5Q2xvc2VLZXksICAgICAgICBNRVRIX1ZBUkFSR1MsIENsb3NlS2V5X2RvY30sCi0gICAgeyJDb25uZWN0UmVnaXN0cnkiLCAgUHlDb25uZWN0UmVnaXN0cnksIE1FVEhfVkFSQVJHUywgQ29ubmVjdFJlZ2lzdHJ5X2RvY30sCi0gICAgeyJDcmVhdGVLZXkiLCAgICAgICAgUHlDcmVhdGVLZXksICAgICAgIE1FVEhfVkFSQVJHUywgQ3JlYXRlS2V5X2RvY30sCi0gICAgeyJDcmVhdGVLZXlFeCIsICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3JlYXRlS2V5RXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgQ3JlYXRlS2V5RXhfZG9jfSwKLSAgICB7IkRlbGV0ZUtleSIsICAgICAgICBQeURlbGV0ZUtleSwgICAgICAgTUVUSF9WQVJBUkdTLCBEZWxldGVLZXlfZG9jfSwKLSAgICB7IkRlbGV0ZUtleUV4IiwgICAgICAoUHlDRnVuY3Rpb24pUHlEZWxldGVLZXlFeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBEZWxldGVLZXlFeF9kb2N9LAotICAgIHsiRGVsZXRlVmFsdWUiLCAgICAgIFB5RGVsZXRlVmFsdWUsICAgICBNRVRIX1ZBUkFSR1MsIERlbGV0ZVZhbHVlX2RvY30sCi0gICAgeyJEaXNhYmxlUmVmbGVjdGlvbktleSIsIFB5RGlzYWJsZVJlZmxlY3Rpb25LZXksIE1FVEhfVkFSQVJHUywgRGlzYWJsZVJlZmxlY3Rpb25LZXlfZG9jfSwKLSAgICB7IkVuYWJsZVJlZmxlY3Rpb25LZXkiLCAgUHlFbmFibGVSZWZsZWN0aW9uS2V5LCAgTUVUSF9WQVJBUkdTLCBFbmFibGVSZWZsZWN0aW9uS2V5X2RvY30sCi0gICAgeyJFbnVtS2V5IiwgICAgICAgICAgUHlFbnVtS2V5LCAgICAgICAgIE1FVEhfVkFSQVJHUywgRW51bUtleV9kb2N9LAotICAgIHsiRW51bVZhbHVlIiwgICAgICAgIFB5RW51bVZhbHVlLCAgICAgICBNRVRIX1ZBUkFSR1MsIEVudW1WYWx1ZV9kb2N9LAotICAgIHsiRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzIiwgUHlFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzX2RvYyB9LAotICAgIHsiRmx1c2hLZXkiLCAgICAgICAgIFB5Rmx1c2hLZXksICAgICAgICBNRVRIX1ZBUkFSR1MsIEZsdXNoS2V5X2RvY30sCi0gICAgeyJMb2FkS2V5IiwgICAgICAgICAgUHlMb2FkS2V5LCAgICAgICAgIE1FVEhfVkFSQVJHUywgTG9hZEtleV9kb2N9LAotICAgIHsiT3BlbktleSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeU9wZW5LZXksIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbktleV9kb2N9LAotICAgIHsiT3BlbktleUV4IiwgICAgICAgIChQeUNGdW5jdGlvbilQeU9wZW5LZXksIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbktleUV4X2RvY30sCi0gICAgeyJRdWVyeVZhbHVlIiwgICAgICAgUHlRdWVyeVZhbHVlLCAgICAgIE1FVEhfVkFSQVJHUywgUXVlcnlWYWx1ZV9kb2N9LAotICAgIHsiUXVlcnlWYWx1ZUV4IiwgICAgIFB5UXVlcnlWYWx1ZUV4LCAgICBNRVRIX1ZBUkFSR1MsIFF1ZXJ5VmFsdWVFeF9kb2N9LAotICAgIHsiUXVlcnlJbmZvS2V5IiwgICAgIFB5UXVlcnlJbmZvS2V5LCAgICBNRVRIX1ZBUkFSR1MsIFF1ZXJ5SW5mb0tleV9kb2N9LAotICAgIHsiUXVlcnlSZWZsZWN0aW9uS2V5IixQeVF1ZXJ5UmVmbGVjdGlvbktleSxNRVRIX1ZBUkFSR1MsIFF1ZXJ5UmVmbGVjdGlvbktleV9kb2N9LAotICAgIHsiU2F2ZUtleSIsICAgICAgICAgIFB5U2F2ZUtleSwgICAgICAgICBNRVRIX1ZBUkFSR1MsIFNhdmVLZXlfZG9jfSwKLSAgICB7IlNldFZhbHVlIiwgICAgICAgICBQeVNldFZhbHVlLCAgICAgICAgTUVUSF9WQVJBUkdTLCBTZXRWYWx1ZV9kb2N9LAotICAgIHsiU2V0VmFsdWVFeCIsICAgICAgIFB5U2V0VmFsdWVFeCwgICAgICBNRVRIX1ZBUkFSR1MsIFNldFZhbHVlRXhfZG9jfSwKKyAgICBXSU5SRUdfQ0xPU0VLRVlfTUVUSE9EREVGCisgICAgV0lOUkVHX0NPTk5FQ1RSRUdJU1RSWV9NRVRIT0RERUYKKyAgICBXSU5SRUdfQ1JFQVRFS0VZX01FVEhPRERFRgorICAgIFdJTlJFR19DUkVBVEVLRVlFWF9NRVRIT0RERUYKKyAgICBXSU5SRUdfREVMRVRFS0VZX01FVEhPRERFRgorICAgIFdJTlJFR19ERUxFVEVLRVlFWF9NRVRIT0RERUYKKyAgICBXSU5SRUdfREVMRVRFVkFMVUVfTUVUSE9EREVGCisgICAgV0lOUkVHX0RJU0FCTEVSRUZMRUNUSU9OS0VZX01FVEhPRERFRgorICAgIFdJTlJFR19FTkFCTEVSRUZMRUNUSU9OS0VZX01FVEhPRERFRgorICAgIFdJTlJFR19FTlVNS0VZX01FVEhPRERFRgorICAgIFdJTlJFR19FTlVNVkFMVUVfTUVUSE9EREVGCisgICAgV0lOUkVHX0VYUEFOREVOVklST05NRU5UU1RSSU5HU19NRVRIT0RERUYKKyAgICBXSU5SRUdfRkxVU0hLRVlfTUVUSE9EREVGCisgICAgV0lOUkVHX0xPQURLRVlfTUVUSE9EREVGCisgICAgV0lOUkVHX09QRU5LRVlfTUVUSE9EREVGCisgICAgV0lOUkVHX09QRU5LRVlFWF9NRVRIT0RERUYKKyAgICBXSU5SRUdfUVVFUllWQUxVRV9NRVRIT0RERUYKKyAgICBXSU5SRUdfUVVFUllWQUxVRUVYX01FVEhPRERFRgorICAgIFdJTlJFR19RVUVSWUlORk9LRVlfTUVUSE9EREVGCisgICAgV0lOUkVHX1FVRVJZUkVGTEVDVElPTktFWV9NRVRIT0RERUYKKyAgICBXSU5SRUdfU0FWRUtFWV9NRVRIT0RERUYKKyAgICBXSU5SRUdfU0VUVkFMVUVfTUVUSE9EREVGCisgICAgV0lOUkVHX1NFVFZBTFVFRVhfTUVUSE9EREVGCiAgICAgTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL1BDL3dpbnNvdW5kLmMgYi9QQy93aW5zb3VuZC5jCmluZGV4IGI1NjRlYWIuLjZiNzlkMjMgMTAwNjQ0Ci0tLSBhL1BDL3dpbnNvdW5kLmMKKysrIGIvUEMvd2luc291bmQuYwpAQCAtMzksMjIgKzM5LDYgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8bW1zeXN0ZW0uaD4KIAotUHlEb2NfU1RSVkFSKHNvdW5kX3BsYXlzb3VuZF9kb2MsCi0iUGxheVNvdW5kKHNvdW5kLCBmbGFncykgLSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBXaW5kb3dzIFBsYXlTb3VuZCBBUElcbiIKLSJcbiIKLSJUaGUgc291bmQgYXJndW1lbnQgY2FuIGJlIGEgZmlsZW5hbWUsIGRhdGEsIG9yIE5vbmUuXG4iCi0iRm9yIGZsYWcgdmFsdWVzLCBvcmVkIHRvZ2V0aGVyLCBzZWUgbW9kdWxlIGRvY3VtZW50YXRpb24uIik7Ci0KLVB5RG9jX1NUUlZBUihzb3VuZF9iZWVwX2RvYywKLSJCZWVwKGZyZXF1ZW5jeSwgZHVyYXRpb24pIC0gYSB3cmFwcGVyIGFyb3VuZCB0aGUgV2luZG93cyBCZWVwIEFQSVxuIgotIlxuIgotIlRoZSBmcmVxdWVuY3kgYXJndW1lbnQgc3BlY2lmaWVzIGZyZXF1ZW5jeSwgaW4gaGVydHosIG9mIHRoZSBzb3VuZC5cbiIKLSJUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGluIHRoZSByYW5nZSAzNyB0aHJvdWdoIDMyLDc2Ny5cbiIKLSJUaGUgZHVyYXRpb24gYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLlxuIik7Ci0KLVB5RG9jX1NUUlZBUihzb3VuZF9tc2diZWVwX2RvYywKLSJNZXNzYWdlQmVlcCh4KSAtIGNhbGwgV2luZG93cyBNZXNzYWdlQmVlcCh4KS4geCBkZWZhdWx0cyB0byBNQl9PSy4iKTsKLQogUHlEb2NfU1RSVkFSKHNvdW5kX21vZHVsZV9kb2MsCiAiUGxheVNvdW5kKHNvdW5kLCBmbGFncykgLSBwbGF5IGEgc291bmRcbiIKICJTTkRfRklMRU5BTUUgLSBzb3VuZCBpcyBhIHdhdiBmaWxlIG5hbWVcbiIKQEAgLTY3LDc5ICs1MSwxMTIgQEAKICJTTkRfTk9TVE9QIC0gRG8gbm90IGludGVycnVwdCBhbnkgc291bmRzIGN1cnJlbnRseSBwbGF5aW5nXG4iICAvLyBSYWlzaW5nIFJ1bnRpbWVFcnJvciBpZiBuZWVkZWQKICJTTkRfTk9XQUlUIC0gUmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZSBzb3VuZCBkcml2ZXIgaXMgYnVzeVxuIiAvLyBXaXRob3V0IGFueSBlcnJvcnMKICJcbiIKLSJCZWVwKGZyZXF1ZW5jeSwgZHVyYXRpb24pIC0gTWFrZSBhIGJlZXAgdGhyb3VnaCB0aGUgUEMgc3BlYWtlci4iKTsKKyJCZWVwKGZyZXF1ZW5jeSwgZHVyYXRpb24pIC0gTWFrZSBhIGJlZXAgdGhyb3VnaCB0aGUgUEMgc3BlYWtlci5cbiIKKyJNZXNzYWdlQmVlcCh4KSAtIENhbGwgV2luZG93cyBNZXNzYWdlQmVlcC4iKTsKKworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIHdpbnNvdW5kCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1hMTg0MDExNDJkOTdiOGQ1XSovCisKKyNpbmNsdWRlICJjbGluaWMvd2luc291bmQuYy5oIgorCisvKltjbGluaWMgaW5wdXRdCit3aW5zb3VuZC5QbGF5U291bmQKKworICAgIHNvdW5kOiBQeV9VTklDT0RFKGFjY2VwdD17c3RyLCBOb25lVHlwZX0pCisgICAgICAgIFRoZSBzb3VuZCB0byBwbGF5OyBhIGZpbGVuYW1lLCBkYXRhLCBvciBOb25lLgorICAgIGZsYWdzOiBpbnQKKyAgICAgICAgRmxhZyB2YWx1ZXMsIG9yZWQgdG9nZXRoZXIuICBTZWUgbW9kdWxlIGRvY3VtZW50YXRpb24uCisgICAgLworCitBIHdyYXBwZXIgYXJvdW5kIHRoZSBXaW5kb3dzIFBsYXlTb3VuZCBBUEkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zb3VuZF9wbGF5c291bmQoUHlPYmplY3QgKnMsIFB5T2JqZWN0ICphcmdzKQord2luc291bmRfUGxheVNvdW5kX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlfVU5JQ09ERSAqc291bmQsIGludCBmbGFncykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lYzI0YjNhMmI0MzY4Mzc4IGlucHV0PTM0MTFiMWI3YzFmMzZkOTNdKi8KIHsKLSAgICB3Y2hhcl90ICp3c291bmQ7Ci0gICAgaW50IGZsYWdzOwogICAgIGludCBvazsKIAotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJaaTpQbGF5U291bmQiLCAmd3NvdW5kLCAmZmxhZ3MpKSB7Ci0gICAgICAgIGlmIChmbGFncyAmIFNORF9BU1lOQyAmJiBmbGFncyAmIFNORF9NRU1PUlkpIHsKLSAgICAgICAgICAgIC8qIFNpZGVzdGVwIHJlZmVyZW5jZSBjb3VudGluZyBoZWFkYWNoZTsgdW5mb3J0dW5hdGVseSB0aGlzIGFsc28KLSAgICAgICAgICAgICAgIHByZXZlbnQgU05EX0xPT1AgZnJvbSBtZW1vcnkuICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiQ2Fubm90IHBsYXkgYXN5bmNocm9ub3VzbHkgZnJvbSBtZW1vcnkiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgb2sgPSBQbGF5U291bmRXKHdzb3VuZCwgTlVMTCwgZmxhZ3MpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiRmFpbGVkIHRvIHBsYXkgc291bmQiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgaWYgKGZsYWdzICYgU05EX0FTWU5DICYmIGZsYWdzICYgU05EX01FTU9SWSkgeworICAgICAgICAvKiBTaWRlc3RlcCByZWZlcmVuY2UgY291bnRpbmcgaGVhZGFjaGU7IHVuZm9ydHVuYXRlbHkgdGhpcyBhbHNvCisgICAgICAgICAgICBwcmV2ZW50IFNORF9MT09QIGZyb20gbWVtb3J5LiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBwbGF5IGFzeW5jaHJvbm91c2x5IGZyb20gbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBvayA9IFBsYXlTb3VuZFcoc291bmQsIE5VTEwsIGZsYWdzKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmICghb2spIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIkZhaWxlZCB0byBwbGF5IHNvdW5kIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLypbY2xpbmljIGlucHV0XQord2luc291bmQuQmVlcAorCisgICAgZnJlcXVlbmN5OiBpbnQKKyAgICAgICAgRnJlcXVlbmN5IG9mIHRoZSBzb3VuZCBpbiBoZXJ0ei4KKyAgICAgICAgTXVzdCBiZSBpbiB0aGUgcmFuZ2UgMzcgdGhyb3VnaCAzMiw3NjcuCisgICAgZHVyYXRpb246IGludAorICAgICAgICBIb3cgbG9uZyB0aGUgc291bmQgc2hvdWxkIHBsYXksIGluIG1pbGxpc2Vjb25kcy4KKyAgICAvCisKK0Egd3JhcHBlciBhcm91bmQgdGhlIFdpbmRvd3MgQmVlcCBBUEkuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1zb3VuZF9iZWVwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3dpbnNvdW5kX0JlZXBfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBpbnQgZnJlcXVlbmN5LCBpbnQgZHVyYXRpb24pCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjMyMzgyZTUyZWU5YjJmYiBpbnB1dD02MjhhOTlkMmRkZjczNzk4XSovCiB7Ci0gICAgaW50IGZyZXE7Ci0gICAgaW50IGR1cjsKICAgICBCT09MIG9rOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpCZWVwIiwgJmZyZXEsICAmZHVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoZnJlcSA8IDM3IHx8IGZyZXEgPiAzMjc2NykgeworICAgIGlmIChmcmVxdWVuY3kgPCAzNyB8fCBmcmVxdWVuY3kgPiAzMjc2NykgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJmcmVxdWVuY3kgbXVzdCBiZSBpbiAzNyB0aHJ1IDMyNzY3Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBvayA9IEJlZXAoZnJlcSwgZHVyKTsKKyAgICBvayA9IEJlZXAoZnJlcXVlbmN5LCBkdXJhdGlvbik7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIkZhaWxlZCB0byBiZWVwIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLypbY2xpbmljIGlucHV0XQord2luc291bmQuTWVzc2FnZUJlZXAKKworICAgIHg6IGludChjX2RlZmF1bHQ9Ik1CX09LIikgPSBNQl9PSworICAgIC8KKworQ2FsbCBXaW5kb3dzIE1lc3NhZ2VCZWVwKHgpLgorCit4IGRlZmF1bHRzIHRvIE1CX09LLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotc291bmRfbXNnYmVlcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit3aW5zb3VuZF9NZXNzYWdlQmVlcF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCB4KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFhZDg5ZTRkOGQzMGE5NTcgaW5wdXQ9YTc3NmM4YTg1Yzk4NTNmNl0qLwogewotICAgIGludCB4ID0gTUJfT0s7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpNZXNzYWdlQmVlcCIsICZ4KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgTWVzc2FnZUJlZXAoeCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHNvdW5kX21ldGhvZHNbXSA9CiB7Ci0gICAgeyJQbGF5U291bmQiLCBzb3VuZF9wbGF5c291bmQsIE1FVEhfVkFSQVJHUywgc291bmRfcGxheXNvdW5kX2RvY30sCi0gICAgeyJCZWVwIiwgICAgICBzb3VuZF9iZWVwLCAgICAgIE1FVEhfVkFSQVJHUywgc291bmRfYmVlcF9kb2N9LAotICAgIHsiTWVzc2FnZUJlZXAiLCBzb3VuZF9tc2diZWVwLCBNRVRIX1ZBUkFSR1MsIHNvdW5kX21zZ2JlZXBfZG9jfSwKKyAgICBXSU5TT1VORF9QTEFZU09VTkRfTUVUSE9EREVGCisgICAgV0lOU09VTkRfQkVFUF9NRVRIT0RERUYKKyAgICBXSU5TT1VORF9NRVNTQUdFQkVFUF9NRVRIT0RERUYKICAgICB7TlVMTCwgIE5VTEx9CiB9OwogCmRpZmYgLS1naXQgYS9QQ2J1aWxkL19iejIudmN4cHJvaiBiL1BDYnVpbGQvX2J6Mi52Y3hwcm9qCmluZGV4IDkzODdlNTQuLjllZmIwZDkgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX2J6Mi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX2J6Mi52Y3hwcm9qCkBAIC0zOSwxMTcgKzM5LDI4IEBACiAgICAgPFJvb3ROYW1lc3BhY2U+YnoyPC9Sb290TmFtZXNwYWNlPgogICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KICAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoYnoyRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgogICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KQEAgLTE1OCw4MyArNjksNiBAQAogICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxNzAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKGJ6MkRpcik7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDE3MDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKGJ6MkRpcik7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDE3MDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChiejJEaXIpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxNzAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKGJ6MkRpcik7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDE3MDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKGJ6MkRpcik7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDE3MDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoYnoyRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTcwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChiejJEaXIpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxNzAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2J6Mm1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChiejJEaXIpXGJsb2Nrc29ydC5jIiAvPgpAQCAtMjUwLDYgKzg0LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoYnoyRGlyKVxiemxpYl9wcml2YXRlLmgiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KICAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fY3R5cGVzLnZjeHByb2ogYi9QQ2J1aWxkL19jdHlwZXMudmN4cHJvagppbmRleCAyMDJjYjFmLi43MGJlYTQ1IDEwMDY0NAotLS0gYS9QQ2J1aWxkL19jdHlwZXMudmN4cHJvagorKysgYi9QQ2J1aWxkL19jdHlwZXMudmN4cHJvagpAQCAtMzksMjA0ICszOSwzMyBAQAogICAgIDxSb290TmFtZXNwYWNlPl9jdHlwZXM8L1Jvb3ROYW1lc3BhY2U+CiAgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRhcmdldEV4dD4ucHlkPC9UYXJnZXRFeHQ+CisgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+CiAgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC40MDIxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxDbENvbXBpbGU+CiAgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmM7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFEMUEwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDFBMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmM7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8U3ViU3lzdGVtPk5vdFNldDwvU3ViU3lzdGVtPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxQTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YzslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KLSAgICAgIDxTdWJTeXN0ZW0+Tm90U2V0PC9TdWJTeXN0ZW0+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDFBMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YzslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KLSAgICAgIDxTdWJTeXN0ZW0+Tm90U2V0PC9TdWJTeXN0ZW0+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDFBMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmM7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8U3ViU3lzdGVtPk5vdFNldDwvU3ViU3lzdGVtPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxQTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmM7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8U3ViU3lzdGVtPk5vdFNldDwvU3ViU3lzdGVtPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxQTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmM7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8U3ViU3lzdGVtPk5vdFNldDwvU3ViU3lzdGVtPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxQTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KQEAgLTI1NywzMyArODYsMjAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xwcmVwX2NpZi5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jIj4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoUGxhdGZvcm0pJz09J3g2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q3VzdG9tQnVpbGQgSW5jbHVkZT0iLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHdpbjY0LmFzbSI+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5tbDY0IC9ub2xvZ28gL2MgL1ppIC9GbyAiJChJbnREaXIpd2luNjQub2JqIiAiJShGdWxsUGF0aCkiCi08L0NvbW1hbmQ+Ci0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoSW50RGlyKXdpbjY0Lm9iajslKE91dHB1dHMpPC9PdXRwdXRzPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5tbDY0IC9ub2xvZ28gL2MgL0ZvICIkKEludERpcil3aW42NC5vYmoiICIlKEZ1bGxQYXRoKSIKLTwvQ29tbWFuZD4KLSAgICAgIDxPdXRwdXRzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPiQoSW50RGlyKXdpbjY0Lm9iajslKE91dHB1dHMpPC9PdXRwdXRzPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxDb21tYW5kIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+bWw2NCAvbm9sb2dvIC9jIC9GbyAiJChJbnREaXIpd2luNjQub2JqIiAiJShGdWxsUGF0aCkiCi08L0NvbW1hbmQ+Ci0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPiQoSW50RGlyKXdpbjY0Lm9iajslKE91dHB1dHMpPC9PdXRwdXRzPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPENvbW1hbmQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPm1sNjQgL25vbG9nbyAvYyAvRm8gIiQoSW50RGlyKXdpbjY0Lm9iaiIgIiUoRnVsbFBhdGgpIgotPC9Db21tYW5kPgotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoSW50RGlyKXdpbjY0Lm9iajslKE91dHB1dHMpPC9PdXRwdXRzPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoUGxhdGZvcm0pJz09J1dpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8Q29tbWFuZD5tbDY0IC9ub2xvZ28gL2MgL1ppIC9GbyAiJChJbnREaXIpd2luNjQub2JqIiAiJShGdWxsUGF0aCkiPC9Db21tYW5kPgorICAgICAgPE91dHB1dHM+JChJbnREaXIpd2luNjQub2JqOyUoT3V0cHV0cyk8L091dHB1dHM+CiAgICAgPC9DdXN0b21CdWlsZD4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICA8L1Byb2plY3RSZWZlcmVuY2U+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19jdHlwZXNfdGVzdC52Y3hwcm9qIGIvUENidWlsZC9fY3R5cGVzX3Rlc3QudmN4cHJvagppbmRleCAzNWUyOTliLi5iNjI0MDdmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL19jdHlwZXNfdGVzdC52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX2N0eXBlc190ZXN0LnZjeHByb2oKQEAgLTM4LDE0MyArMzgsMjggQEAKICAgICA8UHJvamVjdEd1aWQ+ezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn08L1Byb2plY3RHdWlkPgogICAgIDxSb290TmFtZXNwYWNlPl9jdHlwZXNfdGVzdDwvUm9vdE5hbWVzcGFjZT4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFN1cHBvcnRQR08+ZmFsc2U8L1N1cHBvcnRQR08+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmgiIC8+CiAgIDwvSXRlbUdyb3VwPgpAQCAtMTgyLDYgKzY3LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICA8L1Byb2plY3RSZWZlcmVuY2U+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19kZWNpbWFsLnZjeHByb2ogYi9QQ2J1aWxkL19kZWNpbWFsLnZjeHByb2oKaW5kZXggOThiYTgxZC4uOWM5YzE5YSAxMDA2NDQKLS0tIGEvUENidWlsZC9fZGVjaW1hbC52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX2RlY2ltYWwudmN4cHJvagpAQCAtMzksMjA4ICszOSwzNyBAQAogICAgIDxSb290TmFtZXNwYWNlPl9kZWNpbWFsPC9Sb290TmFtZXNwYWNlPgogICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgorICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgL0RDT05GSUdfMzIgL0RQUFJPIC9ETUFTTSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7TUFTTTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICdXaW4zMiciPkNPTkZJR18zMjtQUFJPOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKFBsYXRmb3JtKScgPT0gJ3g2NCciPkNPTkZJR182NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXF9kZWNpbWFsOy4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWM7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFEMUEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgL0RDT05GSUdfNjQgL0RNQVNNICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcX2RlY2ltYWw7Li5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlYzslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxQTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgL0RDT05GSUdfMzIgL0RQUFJPIC9ETUFTTSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXF9kZWNpbWFsOy4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWM7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Tm90U2V0PC9TdWJTeXN0ZW0+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDFBMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgL0RDT05GSUdfNjQgL0RNQVNNICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcX2RlY2ltYWw7Li5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlYzsuLlxJbmNsdWRlOy4uXFBDOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPk5vdFNldDwvU3ViU3lzdGVtPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxQTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L0RfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAvRENPTkZJR18zMiAvRFBQUk8gL0RNQVNNICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcX2RlY2ltYWw7Li5cTW9kdWxlc1xfZGVjaW1hbFxsaWJtcGRlYzslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Ob3RTZXQ8L1N1YlN5c3RlbT4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMUEwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC9EQ09ORklHXzY0IC9ETUFTTSAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXF9kZWNpbWFsOy4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWM7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Tm90U2V0PC9TdWJTeXN0ZW0+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDFBMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC9EQ09ORklHXzMyIC9EUFBSTyAvRE1BU00gJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cTW9kdWxlc1xfZGVjaW1hbDsuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPk5vdFNldDwvU3ViU3lzdGVtPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxQTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L0RfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAvRENPTkZJR182NCAvRE1BU00gJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cTW9kdWxlc1xfZGVjaW1hbDsuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPk5vdFNldDwvU3ViU3lzdGVtPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxQTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2RlY2ltYWxcbGlibXBkZWNcYmFzZWFyaXRoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXGJpdHMuaCIgLz4KQEAgLTI3OSwyNSArMTA4LDE1IEBACiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDdXN0b21CdWlsZCBJbmNsdWRlPSIuLlxNb2R1bGVzXF9kZWNpbWFsXGxpYm1wZGVjXHZjZGl2NjQuYXNtIj4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPm1sNjQgL25vbG9nbyAvYyAvWmkgL0ZvICIkKEludERpcil2Y2RpdjY0Lm9iaiIgIiUoRnVsbFBhdGgpIgotPC9Db21tYW5kPgotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKEludERpcil2Y2RpdjY0Lm9iajslKE91dHB1dHMpPC9PdXRwdXRzPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5tbDY0IC9ub2xvZ28gL2MgL0ZvICIkKEludERpcil2Y2RpdjY0Lm9iaiIgIiUoRnVsbFBhdGgpIgotPC9Db21tYW5kPgotICAgICAgPE91dHB1dHMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+JChJbnREaXIpdmNkaXY2NC5vYmo7JShPdXRwdXRzKTwvT3V0cHV0cz4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPm1sNjQgL25vbG9nbyAvYyAvRm8gIiQoSW50RGlyKXZjZGl2NjQub2JqIiAiJShGdWxsUGF0aCkiCi08L0NvbW1hbmQ+Ci0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPiQoSW50RGlyKXZjZGl2NjQub2JqOyUoT3V0cHV0cyk8L091dHB1dHM+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8Q29tbWFuZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+bWw2NCAvbm9sb2dvIC9jIC9aaSAvRm8gIiQoSW50RGlyKXZjZGl2NjQub2JqIiAiJShGdWxsUGF0aCkiCi08L0NvbW1hbmQ+Ci0gICAgICA8T3V0cHV0cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JChJbnREaXIpdmNkaXY2NC5vYmo7JShPdXRwdXRzKTwvT3V0cHV0cz4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKFBsYXRmb3JtKSc9PSdXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPENvbW1hbmQ+bWw2NCAvbm9sb2dvIC9jIC9aaSAvRm8gIiQoSW50RGlyKXZjZGl2NjQub2JqIiAiJShGdWxsUGF0aCkiPC9Db21tYW5kPgorICAgICAgPE91dHB1dHM+JChJbnREaXIpdmNkaXY2NC5vYmo7JShPdXRwdXRzKTwvT3V0cHV0cz4KICAgICA8L0N1c3RvbUJ1aWxkPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX2VsZW1lbnR0cmVlLnZjeHByb2ogYi9QQ2J1aWxkL19lbGVtZW50dHJlZS52Y3hwcm9qCmluZGV4IDc4MDJhYjMuLjcyNWI1YTkgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX2VsZW1lbnR0cmVlLnZjeHByb2oKKysrIGIvUENidWlsZC9fZWxlbWVudHRyZWUudmN4cHJvagpAQCAtMzksMTE3ICszOSwyNyBAQAogICAgIDxSb290TmFtZXNwYWNlPl9lbGVtZW50dHJlZTwvUm9vdE5hbWVzcGFjZT4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KICAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcZXhwYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KICAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5YTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgpAQCAtMTU4LDgzICs2OCw2IEBACiAgICAgICA8QmFzZUFkZHJlc3M+MHgxRDEwMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcZXhwYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5YTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMDAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cTW9kdWxlc1xleHBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDEwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cTW9kdWxlc1xleHBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDEwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcZXhwYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5YTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMDAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cTW9kdWxlc1xleHBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDEwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXE1vZHVsZXNcZXhwYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5YTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMDAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxNb2R1bGVzXGV4cGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGV4cGF0XGFzY2lpLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGV4cGF0XGFzY2lpdGFiLmgiIC8+CkBAIC0yNTksNiArOTIsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19mcmVlemVfaW1wb3J0bGliLnZjeHByb2ogYi9QQ2J1aWxkL19mcmVlemVfaW1wb3J0bGliLnZjeHByb2oKaW5kZXggNTUxOTdhZi4uZjc3MTRjMCAxMDA2NDQKLS0tIGEvUENidWlsZC9fZnJlZXplX2ltcG9ydGxpYi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX2ZyZWV6ZV9pbXBvcnRsaWIudmN4cHJvagpAQCAtOSw2ICs5LDIyIEBACiAgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KICAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHSW5zdHJ1bWVudHxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR0luc3RydW1lbnQ8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHSW5zdHJ1bWVudHx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdJbnN0cnVtZW50PC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdVcGRhdGV8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdVcGRhdGU8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHVXBkYXRlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR1VwZGF0ZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgogICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KICAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CkBAIC0yMiwxNTIgKzM4LDMyIEBACiAgICAgPFByb2plY3RHdWlkPnsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9PC9Qcm9qZWN0R3VpZD4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgICAgPFJvb3ROYW1lc3BhY2U+X2ZyZWV6ZV9pbXBvcnRsaWI8L1Jvb3ROYW1lc3BhY2U+CisgICAgPFN1cHBvcnRQR08+ZmFsc2U8L1N1cHBvcnRQR08+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPExpbmtJbmNyZW1lbnRhbD50cnVlPC9MaW5rSW5jcmVtZW50YWw+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+CiAgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgogICAgIDwvTGluaz4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4kKFRhcmdldFBhdGgpIC4uXExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weSAuLlxQeXRob25caW1wb3J0bGliLmg8L0NvbW1hbmQ+Ci0gICAgPC9Qb3N0QnVpbGRFdmVudD4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Ci0gICAgICA8TWVzc2FnZT5jcmVhdGluZyBpbXBvcnRsaWIuaDwvTWVzc2FnZT4KLSAgICA8L1Bvc3RCdWlsZEV2ZW50PgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgIDwvTGluaz4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4kKFRhcmdldFBhdGgpIC4uXExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weSAuLlxQeXRob25caW1wb3J0bGliLmg8L0NvbW1hbmQ+Ci0gICAgPC9Qb3N0QnVpbGRFdmVudD4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Ci0gICAgICA8TWVzc2FnZT5jcmVhdGluZyBpbXBvcnRsaWIuaDwvTWVzc2FnZT4KLSAgICA8L1Bvc3RCdWlsZEV2ZW50PgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgotICAgIDwvTGluaz4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4kKFRhcmdldFBhdGgpIC4uXExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weSAuLlxQeXRob25caW1wb3J0bGliLmg8L0NvbW1hbmQ+Ci0gICAgPC9Qb3N0QnVpbGRFdmVudD4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Ci0gICAgICA8TWVzc2FnZT5jcmVhdGluZyBpbXBvcnRsaWIuaDwvTWVzc2FnZT4KLSAgICA8L1Bvc3RCdWlsZEV2ZW50PgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICA8L0xpbms+Ci0gICAgPFBvc3RCdWlsZEV2ZW50PgotICAgICAgPENvbW1hbmQ+JChUYXJnZXRQYXRoKSAuLlxMaWJcaW1wb3J0bGliXF9ib290c3RyYXAucHkgLi5cUHl0aG9uXGltcG9ydGxpYi5oPC9Db21tYW5kPgotICAgIDwvUG9zdEJ1aWxkRXZlbnQ+Ci0gICAgPFBvc3RCdWlsZEV2ZW50PgotICAgICAgPE1lc3NhZ2U+Y3JlYXRpbmcgaW1wb3J0bGliLmg8L01lc3NhZ2U+Ci0gICAgPC9Qb3N0QnVpbGRFdmVudD4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfZnJlZXplX2ltcG9ydGxpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHJvZ3JhbXNcX2ZyZWV6ZV9pbXBvcnRsaWIuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KQEAgLTE4NSw0ICs4MSwyNiBAQAogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgPFRhcmdldCBOYW1lPSJSZWJ1aWxkSW1wb3J0TGliIiBBZnRlclRhcmdldHM9IkFmdGVyQnVpbGQiIENvbmRpdGlvbj0iJChDb25maWd1cmF0aW9uKSA9PSAnRGVidWcnIG9yICQoQ29uZmlndXJhdGlvbikgPT0gJ1JlbGVhc2UnIj4KKyAgICA8RXhlYyBDb21tYW5kPSciJChUYXJnZXRQYXRoKSIgIiQoUHlTb3VyY2VQYXRoKUxpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weSIgIiQoSW50RGlyKWltcG9ydGxpYi5nLmgiJyAvPgorICAgIAorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgPF9PbGRDb250ZW50IENvbmRpdGlvbj0iRXhpc3RzKCckKFB5U291cmNlUGF0aClQeXRob25caW1wb3J0bGliLmgnKSI+JChbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgnJChQeVNvdXJjZVBhdGgpUHl0aG9uXGltcG9ydGxpYi5oJykuUmVwbGFjZShgJiN4MEQ7JiN4MEE7YCwgYCYjeDBBO2ApKTwvX09sZENvbnRlbnQ+CisgICAgICA8X05ld0NvbnRlbnQgQ29uZGl0aW9uPSJFeGlzdHMoJyQoSW50RGlyKWltcG9ydGxpYi5nLmgnKSI+JChbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgnJChJbnREaXIpaW1wb3J0bGliLmcuaCcpLlJlcGxhY2UoYCYjeDBEOyYjeDBBO2AsIGAmI3gwQTtgKSk8L19OZXdDb250ZW50PgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICAKKyAgICA8Q29weSBTb3VyY2VGaWxlcz0iJChJbnREaXIpaW1wb3J0bGliLmcuaCIKKyAgICAgICAgICBEZXN0aW5hdGlvbkZpbGVzPSIkKFB5U291cmNlUGF0aClQeXRob25caW1wb3J0bGliLmgiCisgICAgICAgICAgQ29uZGl0aW9uPSJFeGlzdHMoJyQoSW50RGlyKWltcG9ydGxpYi5nLmgnKSBhbmQgJyQoX09sZENvbnRlbnQpJyAhPSAnJChfTmV3Q29udGVudCknIiAvPgorICAgIAorICAgIDxXYXJuaW5nIFRleHQ9ImltcG9ydGxpYi5oIGhhcyBiZWVuIHVwZGF0ZWQuIFlvdSB3aWxsIG5lZWQgdG8gcmVidWlsZCBweXRob25jb3JlIHRvIHNlZSB0aGUgY2hhbmdlcy4iCisgICAgICAgICAgICAgQ29uZGl0aW9uPSJFeGlzdHMoJyQoSW50RGlyKWltcG9ydGxpYi5nLmgnKSBhbmQgJyQoX09sZENvbnRlbnQpJyAhPSAnJChfTmV3Q29udGVudCknIGFuZCAkKENvbmZpZ3VyYXRpb24pID09ICdEZWJ1ZyciIC8+CisgICAgPEVycm9yIFRleHQ9ImltcG9ydGxpYi5oIGhhcyBiZWVuIHVwZGF0ZWQuIFlvdSB3aWxsIG5lZWQgdG8gcmVidWlsZCBweXRob25jb3JlIHRvIHNlZSB0aGUgY2hhbmdlcy4iCisgICAgICAgICAgIENvbmRpdGlvbj0iRXhpc3RzKCckKEludERpcilpbXBvcnRsaWIuZy5oJykgYW5kICckKF9PbGRDb250ZW50KScgIT0gJyQoX05ld0NvbnRlbnQpJyBhbmQgJChDb25maWd1cmF0aW9uKSA9PSAnUmVsZWFzZSciIC8+CisgIDwvVGFyZ2V0PgorICA8VGFyZ2V0IE5hbWU9Il9DbGVhbkltcG9ydExpYiIgQmVmb3JlVGFyZ2V0cz0iQ29yZUNsZWFuIj4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgPENsZWFuIEluY2x1ZGU9IiQoSW50RGlyKWltcG9ydGxpYi5nLmgiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgIDwvVGFyZ2V0PgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fZnJlZXplX2ltcG9ydGxpYi52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL19mcmVlemVfaW1wb3J0bGliLnZjeHByb2ouZmlsdGVycwppbmRleCA1MGVjMTkzLi5jY2FkMDUzIDEwMDY0NAotLS0gYS9QQ2J1aWxkL19mcmVlemVfaW1wb3J0bGliLnZjeHByb2ouZmlsdGVycworKysgYi9QQ2J1aWxkL19mcmVlemVfaW1wb3J0bGliLnZjeHByb2ouZmlsdGVycwpAQCAtMTUsNyArMTUsNyBAQAogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2ZyZWV6ZV9pbXBvcnRsaWIuYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQcm9ncmFtc1xfZnJlZXplX2ltcG9ydGxpYi5jIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgpAQCAtMjQsNCArMjQsNCBAQAogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L05vbmU+CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX2hhc2hsaWIudmN4cHJvaiBiL1BDYnVpbGQvX2hhc2hsaWIudmN4cHJvagppbmRleCA1MjQzM2VkLi5iMTMwMGNiIDEwMDY0NAotLS0gYS9QQ2J1aWxkL19oYXNobGliLnZjeHByb2oKKysrIGIvUENidWlsZC9faGFzaGxpYi52Y3hwcm9qCkBAIC0zOSwyMzkgKzM5LDUwIEBACiAgICAgPFJvb3ROYW1lc3BhY2U+X2hhc2hsaWI8L1Jvb3ROYW1lc3BhY2U+CiAgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRhcmdldEV4dD4ucHlkPC9UYXJnZXRFeHQ+CisgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+CiAgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKG9wZW5zc2xEaXIpXGluYzMyOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKG9wZW5zc2xJbmNsdWRlRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxQcmVMaW5rRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4KLSAgICAgIDwvQ29tbWFuZD4KLSAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChvcGVuc3NsRGlyKVxpbmM2NDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxQcmVMaW5rRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4KLSAgICAgIDwvQ29tbWFuZD4KLSAgICA8L1ByZUxpbmtFdmVudD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQob3BlbnNzbERpcilcaW5jMzI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChvcGVuc3NsRGlyKVxpbmM2NDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxQcmVMaW5rRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4KLSAgICAgIDwvQ29tbWFuZD4KLSAgICA8L1ByZUxpbmtFdmVudD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChvcGVuc3NsRGlyKVxpbmMzMjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxQcmVMaW5rRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4KLSAgICAgIDwvQ29tbWFuZD4KLSAgICA8L1ByZUxpbmtFdmVudD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQob3BlbnNzbERpcilcaW5jNjQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQob3BlbnNzbERpcilcaW5jMzI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQob3BlbnNzbERpcilcaW5jNjQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKE91dERpcilsaWJlYXkkKFB5RGVidWdFeHQpLmxpYjskKE91dERpcilzc2xlYXkkKFB5RGVidWdFeHQpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfaGFzaG9wZW5zc2wuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uLnZjeHByb2oiPgotICAgICAgPFByb2plY3Q+e2IxMWQ3NTBmLWNkMWYtNGE5Ni04NWNlLWU2OWE1YzUyNTlmOX08L1Byb2plY3Q+Ci0gICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KICAgICA8L1Byb2plY3RSZWZlcmVuY2U+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ic3NsLnZjeHByb2oiPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InNzbGVheS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PnsxMDYxNWIyNC03M2JmLTRlZmEtOTNhYS0yMzY5MTYzMjEzMTd9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGliZWF5LnZjeHByb2oiPgogICAgICAgPFByb2plY3Q+e2U1YjA0Y2MwLWViNGMtNDJhYi1iNGRjLTE4ZWY5NWY4NjRiMH08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgogICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KQEAgLTI3OSw0ICs5MCw0IEBACiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fbHptYS52Y3hwcm9qIGIvUENidWlsZC9fbHptYS52Y3hwcm9qCmluZGV4IGFjMjVjODAuLjFmMDY5NmRhIDEwMDY0NAotLS0gYS9QQ2J1aWxkL19sem1hLnZjeHByb2oKKysrIGIvUENidWlsZC9fbHptYS52Y3hwcm9qCkBAIC0zOSwyMDYgKzM5LDQ0IEBACiAgICAgPFJvb3ROYW1lc3BhY2U+bHptYTwvUm9vdE5hbWVzcGFjZT4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQobHptYURpcilcaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChsem1hRGlyKWluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KICAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTtMWk1BX0FQSV9TVEFUSUM7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChsem1hRGlyKVxiaW5faTQ4NlxsaWJsem1hLmE7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChsem1hRGlyKVxpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7TFpNQV9BUElfU1RBVElDOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQobHptYURpcilcYmluX3g4Ni02NFxsaWJsem1hLmE7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQobHptYURpcilcaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO0xaTUFfQVBJX1NUQVRJQzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKGx6bWFEaXIpXGJpbl9pNDg2XGxpYmx6bWEuYTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQobHptYURpcilcaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO0xaTUFfQVBJX1NUQVRJQzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKGx6bWFEaXIpXGJpbl94ODYtNjRcbGlibHptYS5hOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQobHptYURpcilcaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO0xaTUFfQVBJX1NUQVRJQzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKGx6bWFEaXIpXGJpbl9pNDg2XGxpYmx6bWEuYTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChsem1hRGlyKVxpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7TFpNQV9BUElfU1RBVElDOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQobHptYURpcilcYmluX3g4Ni02NFxsaWJsem1hLmE7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChsem1hRGlyKVxpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEU7TFpNQV9BUElfU1RBVElDOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQobHptYURpcilcYmluX2k0ODZcbGlibHptYS5hOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQobHptYURpcilcaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFO0xaTUFfQVBJX1NUQVRJQzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKGx6bWFEaXIpXGJpbl94ODYtNjRcbGlibHptYS5hOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICdXaW4zMiciPiQobHptYURpcilcYmluX2k0ODZcbGlibHptYS5hOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcyBDb25kaXRpb249IickKFBsYXRmb3JtKScgPT0gJ3g2NCciPiQobHptYURpcilcYmluX3g4Ni02NFxsaWJsem1hLmE7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJbWFnZUhhc1NhZmVFeGNlcHRpb25IYW5kbGVycz5mYWxzZTwvSW1hZ2VIYXNTYWZlRXhjZXB0aW9uSGFuZGxlcnM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9sem1hbW9kdWxlLmMiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KICAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fbXNpLnZjeHByb2ogYi9QQ2J1aWxkL19tc2kudmN4cHJvagppbmRleCAxMzIzZDE2Li4zODk1ZDQ1IDEwMDY0NAotLS0gYS9QQ2J1aWxkL19tc2kudmN4cHJvagorKysgYi9QQ2J1aWxkL19tc2kudmN4cHJvagpAQCAtMzksMTgyICszOSwzOSBAQAogICAgIDxSb290TmFtZXNwYWNlPl9tc2k8L1Jvb3ROYW1lc3BhY2U+CiAgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRhcmdldEV4dD4ucHlkPC9UYXJnZXRFeHQ+CisgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+CiAgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+ZmNpLmxpYjttc2kubGliO3JwY3J0NC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmNhYmluZXQubGliO21zaS5saWI7cnBjcnQ0LmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxNjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+ZmNpLmxpYjttc2kubGliO3JwY3J0NC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTYwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5mY2kubGliO21zaS5saWI7cnBjcnQ0LmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxNjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5mY2kubGliO21zaS5saWI7cnBjcnQ0LmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxNjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+ZmNpLmxpYjttc2kubGliO3JwY3J0NC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTYwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5mY2kubGliO21zaS5saWI7cnBjcnQ0LmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxNjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+ZmNpLmxpYjttc2kubGliO3JwY3J0NC5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTYwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmZjaS5saWI7bXNpLmxpYjtycGNydDQubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDE2MDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcX21zaS5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX211bHRpcHJvY2Vzc2luZy52Y3hwcm9qIGIvUENidWlsZC9fbXVsdGlwcm9jZXNzaW5nLnZjeHByb2oKaW5kZXggYjRiYjU2OC4uYmIyYmI0MSAxMDA2NDQKLS0tIGEvUENidWlsZC9fbXVsdGlwcm9jZXNzaW5nLnZjeHByb2oKKysrIGIvUENidWlsZC9fbXVsdGlwcm9jZXNzaW5nLnZjeHByb2oKQEAgLTM5LDE3OCArMzksMzIgQEAKICAgICA8Um9vdE5hbWVzcGFjZT5fbXVsdGlwcm9jZXNzaW5nPC9Sb290TmFtZXNwYWNlPgogICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgorICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUQwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUQwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFEMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUQwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUQwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFEMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFEMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFEMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXG11bHRpcHJvY2Vzc2luZy5oIiAvPgogICA8L0l0ZW1Hcm91cD4KQEAgLTIxOSw2ICs3Myw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KICAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCmluZGV4IGQwZWU3MmYuLjhjZjhhODYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX292ZXJsYXBwZWQudmN4cHJvagorKysgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKQEAgLTM5LDE5MCArMzksMzkgQEAKICAgICA8Um9vdE5hbWVzcGFjZT5fb3ZlcmxhcHBlZDwvUm9vdE5hbWVzcGFjZT4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CiAgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3ZlcmxhcHBlZC5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NvY2tldC52Y3hwcm9qIGIvUENidWlsZC9fc29ja2V0LnZjeHByb2oKaW5kZXggNjM4MzZlOS4uZDVjNGQxYiAxMDA2NDQKLS0tIGEvUENidWlsZC9fc29ja2V0LnZjeHByb2oKKysrIGIvUENidWlsZC9fc29ja2V0LnZjeHByb2oKQEAgLTM5LDE3OCArMzksMzIgQEAKICAgICA8Um9vdE5hbWVzcGFjZT5fc29ja2V0PC9Sb290TmFtZXNwYWNlPgogICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgorICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUQwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUQwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFEMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUQwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUQwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFEMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFEMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFEMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuaCIgLz4KICAgPC9JdGVtR3JvdXA+CkBAIC0yMTgsNiArNzIsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ogYi9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2oKaW5kZXggZWQzNWQ1Yi4uNTQ1NmJiNSAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvagpAQCAtMzksMTE3ICszOSwyNyBAQAogICAgIDxSb290TmFtZXNwYWNlPl9zcWxpdGUzPC9Sb290TmFtZXNwYWNlPgogICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgorICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgogICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChzcWxpdGUzRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgogICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk1PRFVMRV9OQU1FPSJzcWxpdGUzIjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CkBAIC0xNTgsODMgKzY4LDYgQEAKICAgICAgIDxCYXNlQWRkcmVzcz4weDFlMTgwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChzcWxpdGUzRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk1PRFVMRV9OQU1FPSJzcWxpdGUzIjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTE4MDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKHNxbGl0ZTNEaXIpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TU9EVUxFX05BTUU9InNxbGl0ZTMiOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMTgwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKHNxbGl0ZTNEaXIpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TU9EVUxFX05BTUU9InNxbGl0ZTMiOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMTgwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChzcWxpdGUzRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk1PRFVMRV9OQU1FPSJzcWxpdGUzIjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTE4MDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKHNxbGl0ZTNEaXIpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TU9EVUxFX05BTUU9InNxbGl0ZTMiOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMTgwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChzcWxpdGUzRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk1PRFVMRV9OQU1FPSJzcWxpdGUzIjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTE4MDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoc3FsaXRlM0Rpcik7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5NT0RVTEVfTkFNRT0ic3FsaXRlMyI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxODAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxjYWNoZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uaCIgLz4KQEAgLTI1OCw2ICs5MSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NzbC52Y3hwcm9qIGIvUENidWlsZC9fc3NsLnZjeHByb2oKaW5kZXggNzM3ODc5NC4uZDc1ZWJkNiAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3NsLnZjeHByb2oKKysrIGIvUENidWlsZC9fc3NsLnZjeHByb2oKQEAgLTM5LDI0MiArMzksNTMgQEAKICAgICA8Um9vdE5hbWVzcGFjZT5fc3NsPC9Sb290TmFtZXNwYWNlPgogICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgorICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChvcGVuc3NsRGlyKVxpbmMzMjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChvcGVuc3NsSW5jbHVkZURpcik7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQob3BlbnNzbERpcilcaW5jNjQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKG9wZW5zc2xEaXIpXGluYzMyOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFByZUxpbmtFdmVudD4KLSAgICAgIDxDb21tYW5kPgotICAgICAgPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQob3BlbnNzbERpcilcaW5jNjQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQob3BlbnNzbERpcilcaW5jMzI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKG9wZW5zc2xEaXIpXGluYzY0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFByZUxpbmtFdmVudD4KLSAgICAgIDxDb21tYW5kPgotICAgICAgPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKG9wZW5zc2xEaXIpXGluYzMyOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFByZUxpbmtFdmVudD4KLSAgICAgIDxDb21tYW5kPgotICAgICAgPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKG9wZW5zc2xEaXIpXGluYzY0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFByZUxpbmtFdmVudD4KLSAgICAgIDxDb21tYW5kPgotICAgICAgPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChPdXREaXIpbGliZWF5JChQeURlYnVnRXh0KS5saWI7JChPdXREaXIpc3NsZWF5JChQeURlYnVnRXh0KS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NzbC5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob24udmN4cHJvaiI+Ci0gICAgICA8UHJvamVjdD57YjExZDc1MGYtY2QxZi00YTk2LTg1Y2UtZTY5YTVjNTI1OWY5fTwvUHJvamVjdD4KLSAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+Ci0gICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KICAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgogICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJzc2wudmN4cHJvaiI+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibGliZWF5LnZjeHByb2oiPgogICAgICAgPFByb2plY3Q+e2U1YjA0Y2MwLWViNGMtNDJhYi1iNGRjLTE4ZWY5NWY4NjRiMH08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgogICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJzc2xlYXkudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57MTA2MTViMjQtNzNiZi00ZWZhLTkzYWEtMjM2OTE2MzIxMzE3fTwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Il9zb2NrZXQudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57ODY5MzdmNTMtYzE4OS00MGVmLThjZTgtODc1OWQ4ZTdkNDgwfTwvUHJvamVjdD4KICAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CkBAIC0yODMsNCArOTQsNCBAQAogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3Rlc3RidWZmZXIudmN4cHJvaiBiL1BDYnVpbGQvX3Rlc3RidWZmZXIudmN4cHJvagppbmRleCBlMTI2NWY2Li4xZjQ1YjI5IDEwMDY0NAotLS0gYS9QQ2J1aWxkL190ZXN0YnVmZmVyLnZjeHByb2oKKysrIGIvUENidWlsZC9fdGVzdGJ1ZmZlci52Y3hwcm9qCkBAIC0zOCwxNzUgKzM4LDQwIEBACiAgICAgPFByb2plY3RHdWlkPntBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9PC9Qcm9qZWN0R3VpZD4KICAgICA8Um9vdE5hbWVzcGFjZT5fdGVzdGJ1ZmZlcjwvUm9vdE5hbWVzcGFjZT4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFN1cHBvcnRQR08+ZmFsc2U8L1N1cHBvcnRQR08+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjQwMjE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPExpbms+CiAgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RidWZmZXIuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICA8L1Byb2plY3RSZWZlcmVuY2U+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL190ZXN0Y2FwaS52Y3hwcm9qIGIvUENidWlsZC9fdGVzdGNhcGkudmN4cHJvagppbmRleCBlOTlhN2U0Li4zNjViMDdjIDEwMDY0NAotLS0gYS9QQ2J1aWxkL190ZXN0Y2FwaS52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3Rlc3RjYXBpLnZjeHByb2oKQEAgLTM4LDE3NSArMzgsNDAgQEAKICAgICA8UHJvamVjdEd1aWQ+ezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH08L1Byb2plY3RHdWlkPgogICAgIDxSb290TmFtZXNwYWNlPl90ZXN0Y2FwaTwvUm9vdE5hbWVzcGFjZT4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFN1cHBvcnRQR08+ZmFsc2U8L1N1cHBvcnRQR08+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPExpbms+CiAgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KICAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ogYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagppbmRleCA4M2M3YWQyLi4xNGE5MjZlIDEwMDY0NAotLS0gYS9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagorKysgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagpAQCAtOSw2ICs5LDIyIEBACiAgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KICAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHSW5zdHJ1bWVudHxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR0luc3RydW1lbnQ8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHSW5zdHJ1bWVudHx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdJbnN0cnVtZW50PC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdVcGRhdGV8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdVcGRhdGU8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHVXBkYXRlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR1VwZGF0ZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgogICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KICAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CkBAIC0yMiwxMzcgKzM4LDQwIEBACiAgICAgPFByb2plY3RHdWlkPns2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9PC9Qcm9qZWN0R3VpZD4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgICAgPFJvb3ROYW1lc3BhY2U+X3Rlc3RlbWJlZDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8U3VwcG9ydFBHTz5mYWxzZTwvU3VwcG9ydFBHTz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgogICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0ZW1iZWQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFByb2dyYW1zXF90ZXN0ZW1iZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KLSAgICAgIDxQcml2YXRlPnRydWU8L1ByaXZhdGU+Ci0gICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+dHJ1ZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+Ci0gICAgICA8Q29weUxvY2FsU2F0ZWxsaXRlQXNzZW1ibGllcz5mYWxzZTwvQ29weUxvY2FsU2F0ZWxsaXRlQXNzZW1ibGllcz4KLSAgICAgIDxMaW5rTGlicmFyeURlcGVuZGVuY2llcz50cnVlPC9MaW5rTGlicmFyeURlcGVuZGVuY2llcz4KLSAgICAgIDxVc2VMaWJyYXJ5RGVwZW5kZW5jeUlucHV0cz5mYWxzZTwvVXNlTGlicmFyeURlcGVuZGVuY3lJbnB1dHM+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgogICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ouZmlsdGVycwppbmRleCBkZWE1NGQ0Li5mN2Y5YWJlIDEwMDY0NAotLS0gYS9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICA8L0ZpbHRlcj4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0ZW1iZWQuYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQcm9ncmFtc1xfdGVzdGVtYmVkLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvaiBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCmluZGV4IDg0OTg0ZmYuLjM3YzFhNjQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCkBAIC0zOCwxNzUgKzM4LDQwIEBACiAgICAgPFByb2plY3RHdWlkPnszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9PC9Qcm9qZWN0R3VpZD4KICAgICA8Um9vdE5hbWVzcGFjZT5fdGVzdGltcG9ydG11bHRpcGxlPC9Sb290TmFtZXNwYWNlPgogICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8U3VwcG9ydFBHTz5mYWxzZTwvU3VwcG9ydFBHTz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgorICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8TGluaz4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiIC8+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KICAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGVzdG11bHRpcGhhc2UudmN4cHJvaiBiL1BDYnVpbGQvX3Rlc3RtdWx0aXBoYXNlLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2OTI3YwotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvX3Rlc3RtdWx0aXBoYXNlLnZjeHByb2oKQEAgLTAsMCArMSw4MyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR0luc3RydW1lbnQ8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR1VwZGF0ZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdVcGRhdGV8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezE2QkZFNkYwLTIyRUYtNDBCNS1CODMxLTdFOTM3MTE5RUYxMH08L1Byb2plY3RHdWlkPgorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5fdGVzdG11bHRpcGhhc2U8L1Jvb3ROYW1lc3BhY2U+CisgICAgPFN1cHBvcnRQR08+ZmFsc2U8L1N1cHBvcnRQR08+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdG11bHRpcGhhc2UuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KKyAgPC9JbXBvcnRHcm91cD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL190ZXN0bXVsdGlwaGFzZS52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL190ZXN0bXVsdGlwaGFzZS52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyNTEwMQotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvX3Rlc3RtdWx0aXBoYXNlLnZjeHByb2ouZmlsdGVycwpAQCAtMCwwICsxLDIyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5oO2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPnJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4O3RpZmY7dGlmO3BuZzt3YXY7bWZjcmliYm9uLW1zPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RtdWx0aXBoYXNlLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGtpbnRlci52Y3hwcm9qIGIvUENidWlsZC9fdGtpbnRlci52Y3hwcm9qCmluZGV4IDY3ZjcyZmUuLjY3OTMxMDYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3RraW50ZXIudmN4cHJvagorKysgYi9QQ2J1aWxkL190a2ludGVyLnZjeHByb2oKQEAgLTM5LDIxMSArMzksNTQgQEAKICAgICA8Um9vdE5hbWVzcGFjZT5fdGtpbnRlcjwvUm9vdE5hbWVzcGFjZT4KICAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJ0Y2x0ay5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JCh0Y2x0a0RpcilcaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JCh0Y2x0a0RpcilpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CiAgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lUSF9BUFBJTklUOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQodGNsdGtMaWJEZWJ1Zyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JCh0Y2x0azY0RGlyKVxpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lUSF9BUFBJTklUOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQodGNsdGs2NExpYkRlYnVnKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JCh0Y2x0a0RpcilcaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJVEhfQVBQSU5JVDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChCdWlsZEZvclJlbGVhc2UpJyAhPSAndHJ1ZSciPlB5X1RDTFRLX0RJUj0iJCh0Y2x0a0Rpci5UcmltRW5kKCdcJykuUmVwbGFjZSgnXCcsICdcXCcpKSI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JCh0Y2x0a0xpYik7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKHRjbHRrNjREaXIpXGluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSVRIX0FQUElOSVQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JCh0Y2x0azY0TGliKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKHRjbHRrRGlyKVxpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lUSF9BUFBJTklUOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQodGNsdGtMaWIpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKHRjbHRrNjREaXIpXGluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSVRIX0FQUElOSVQ7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JCh0Y2x0azY0TGliKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKHRjbHRrRGlyKVxpbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lUSF9BUFBJTklUOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQodGNsdGtMaWIpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQodGNsdGs2NERpcilcaW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJVEhfQVBQSU5JVDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKHRjbHRrNjRMaWIpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGtpbnRlci5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x0a2FwcGluaXQuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CiAgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InRjbC52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntiNWZkNmYxZC0xMjllLTRiZmYtOTM0MC0wMzYwNmZhYzcyODN9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ0ay52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns3ZTg1ZWNjZi1hNzJjLTRkYTQtOWU1Mi04ODQ1MDhlODBiYTF9PC9Qcm9qZWN0PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL2JkaXN0X3dpbmluc3QudmN4cHJvaiBiL1BDYnVpbGQvYmRpc3Rfd2luaW5zdC52Y3hwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTI3NmEyLi4wMDAwMDAwCi0tLSBhL1BDYnVpbGQvYmRpc3Rfd2luaW5zdC52Y3hwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ308L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPndpbmluc3Q8L1Jvb3ROYW1lc3BhY2U+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPi4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFw8L091dERpcj4KLSAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+Ci0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXDwvT3V0RGlyPgotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KLSAgICA8TGlua0luY3JlbWVudGFsIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5mYWxzZTwvTGlua0luY3JlbWVudGFsPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8VGFyZ2V0RXh0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPi5leGU8L1RhcmdldEV4dD4KLSAgICA8VGFyZ2V0RXh0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4uZXhlPC9UYXJnZXRFeHQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPgotICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+V2luMzI8L1RhcmdldEVudmlyb25tZW50PgotICAgICAgPFR5cGVMaWJyYXJ5TmFtZT4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LnRsYjwvVHlwZUxpYnJhcnlOYW1lPgotICAgICAgPEhlYWRlckZpbGVOYW1lPgotICAgICAgPC9IZWFkZXJGaWxlTmFtZT4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWluU3BhY2U8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cUENcYmRpc3Rfd2luaW5zdDsuLlxJbmNsdWRlOy4uXE1vZHVsZXNcemxpYjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwMDAwPC9DdWx0dXJlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cUEM7Li5cUENcYmRpc3Rfd2luaW5zdDsuLlxJbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9SZXNvdXJjZUNvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5jb21jdGwzMi5saWI7aW1hZ2VobHAubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8T3V0cHV0RmlsZT4uLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC0xMC4wLmV4ZTwvT3V0cHV0RmlsZT4KLSAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5MSUJDOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtMTAuMC5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+Ci0gICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KLSAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxNa1R5cExpYkNvbXBhdGlibGU+dHJ1ZTwvTWtUeXBMaWJDb21wYXRpYmxlPgotICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICAgIDxUeXBlTGlicmFyeU5hbWU+LlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC50bGI8L1R5cGVMaWJyYXJ5TmFtZT4KLSAgICAgIDxIZWFkZXJGaWxlTmFtZT4KLSAgICAgIDwvSGVhZGVyRmlsZU5hbWU+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1pblNwYWNlPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cSW5jbHVkZTsuLlxNb2R1bGVzXHpsaWI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDAwMDwvQ3VsdHVyZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXFBDOy4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cSW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Y29tY3RsMzIubGliO2ltYWdlaGxwLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPE91dHB1dEZpbGU+Li5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtMTAuMC1hbWQ2NC5leGU8L091dHB1dEZpbGU+Ci0gICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+TElCQzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxQcm9ncmFtRGF0YWJhc2VGaWxlPi4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTkuMC1hbWQ2NC5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+Ci0gICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KLSAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcYmRpc3Rfd2luaW5zdFxleHRyYWN0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHpsaWJcaW5mbGF0ZS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHpsaWJcenV0aWwuYyIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxQQ1xiZGlzdF93aW5pbnN0XGFyY2hpdmUuaCIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwucmMiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxOb25lIEluY2x1ZGU9Ii4uXFBDXGJkaXN0X3dpbmluc3RcUHl0aG9uUG93ZXJlZC5ibXAiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgotICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGQuYmF0IGIvUENidWlsZC9idWlsZC5iYXQKaW5kZXggMGM0ODJmNS4uODhiMWYwNiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZC5iYXQKKysrIGIvUENidWlsZC9idWlsZC5iYXQKQEAgLTEsMTEzICsxLDE1MiBAQAogQGVjaG8gb2ZmDQotcmVtIEEgYmF0Y2ggcHJvZ3JhbSB0byBidWlsZCBvciByZWJ1aWxkIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uLA0KLXJlbSBqdXN0IGZvciBjb252ZW5pZW5jZS4NCitnb3RvIFJ1bg0KKzpVc2FnZQ0KK2VjaG8uJX5ueDAgW2ZsYWdzIGFuZCBhcmd1bWVudHNdIFtxdW90ZWQgTVNCdWlsZCBvcHRpb25zXQ0KK2VjaG8uDQorZWNoby5CdWlsZCBDUHl0aG9uIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIFJlcXVpcmVzIHRoZSBhcHByb3ByaWF0ZQ0KK2VjaG8udmVyc2lvbihzKSBvZiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyB0byBiZSBpbnN0YWxsZWQgKHNlZSByZWFkbWUudHh0KS4NCitlY2hvLkFsc28gcmVxdWlyZXMgU3VidmVyc2lvbiAoc3ZuLmV4ZSkgdG8gYmUgb24gUEFUSCBpZiB0aGUgJy1lJyBmbGFnIGlzDQorZWNoby5naXZlbi4NCitlY2hvLg0KK2VjaG8uQWZ0ZXIgdGhlIGZsYWdzIHJlY29nbml6ZWQgYnkgdGhpcyBzY3JpcHQsIHVwIHRvIDkgYXJndW1lbnRzIHRvIGJlIHBhc3NlZA0KK2VjaG8uZGlyZWN0bHkgdG8gTVNCdWlsZCBtYXkgYmUgcGFzc2VkLiAgSWYgdGhlIGFyZ3VtZW50IGNvbnRhaW5zIGFuICc9JywgdGhlDQorZWNoby5lbnRpcmUgYXJndW1lbnQgbXVzdCBiZSBxdW90ZWQgKGUuZy4gYCV+bngwICIvcDpQbGF0Zm9ybVRvb2xzZXQ9djEwMCJgKQ0KK2VjaG8uDQorZWNoby5BdmFpbGFibGUgZmxhZ3M6DQorZWNoby4gIC1oICBEaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlDQorZWNoby4gIC1WICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJ1aWxkDQorZWNoby4gIC1yICBUYXJnZXQgUmVidWlsZCBpbnN0ZWFkIG9mIEJ1aWxkDQorZWNoby4gIC1kICBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcNCitlY2hvLiAgLWUgIEJ1aWxkIGV4dGVybmFsIGxpYnJhcmllcyBmZXRjaGVkIGJ5IGdldF9leHRlcm5hbHMuYmF0DQorZWNoby4gICAgICBFeHRlbnNpb24gbW9kdWxlcyB0aGF0IGRlcGVuZCBvbiBleHRlcm5hbCBsaWJyYXJpZXMgd2lsbCBub3QgYXR0ZW1wdA0KK2VjaG8uICAgICAgdG8gYnVpbGQgaWYgdGhpcyBmbGFnIGlzIG5vdCBwcmVzZW50DQorZWNoby4gIC1tICBFbmFibGUgcGFyYWxsZWwgYnVpbGQgKGVuYWJsZWQgYnkgZGVmYXVsdCkNCitlY2hvLiAgLU0gIERpc2FibGUgcGFyYWxsZWwgYnVpbGQNCitlY2hvLiAgLXYgIEluY3JlYXNlZCBvdXRwdXQgbWVzc2FnZXMNCitlY2hvLiAgLWsgIEF0dGVtcHQgdG8ga2lsbCBhbnkgcnVubmluZyBQeXRob25zIGJlZm9yZSBidWlsZGluZyAodXN1YWxseSBkb25lDQorZWNoby4gICAgICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBweXRob25jb3JlIHByb2plY3QpDQorZWNoby4gIC0tcGdvICAgICAgICAgIEJ1aWxkIHdpdGggUHJvZmlsZS1HdWlkZWQgT3B0aW1pemF0aW9uLiAgVGhpcyBmbGFnDQorZWNoby4gICAgICAgICAgICAgICAgIG92ZXJyaWRlcyAtYyBhbmQgLWQNCitlY2hvLiAgLS10ZXN0LW1hcmtlciAgRW5hYmxlIHRoZSB0ZXN0IG1hcmtlciB3aXRoaW4gdGhlIGJ1aWxkLg0KK2VjaG8uDQorZWNoby5BdmFpbGFibGUgZmxhZ3MgdG8gYXZvaWQgYnVpbGRpbmcgY2VydGFpbiBtb2R1bGVzLg0KK2VjaG8uVGhlc2UgZmxhZ3MgaGF2ZSBubyBlZmZlY3QgaWYgJy1lJyBpcyBub3QgZ2l2ZW46DQorZWNoby4gIC0tbm8tc3NsICAgICAgRG8gbm90IGF0dGVtcHQgdG8gYnVpbGQgX3NzbA0KK2VjaG8uICAtLW5vLXRraW50ZXIgIERvIG5vdCBhdHRlbXB0IHRvIGJ1aWxkIFRraW50ZXINCitlY2hvLg0KK2VjaG8uQXZhaWxhYmxlIGFyZ3VtZW50czoNCitlY2hvLiAgLWMgUmVsZWFzZSBefCBEZWJ1ZyBefCBQR0luc3RydW1lbnQgXnwgUEdVcGRhdGUNCitlY2hvLiAgICAgU2V0IHRoZSBjb25maWd1cmF0aW9uIChkZWZhdWx0OiBSZWxlYXNlKQ0KK2VjaG8uICAtcCB4NjQgXnwgV2luMzINCitlY2hvLiAgICAgU2V0IHRoZSBwbGF0Zm9ybSAoZGVmYXVsdDogV2luMzIpDQorZWNoby4gIC10IEJ1aWxkIF58IFJlYnVpbGQgXnwgQ2xlYW4gXnwgQ2xlYW5BbGwNCitlY2hvLiAgICAgU2V0IHRoZSB0YXJnZXQgbWFudWFsbHkNCitlY2hvLiAgLS1wZ28tam9iICBUaGUgam9iIHRvIHVzZSBmb3IgUEdPIHRyYWluaW5nOyBpbXBsaWVzIC0tcGdvDQorZWNoby4gICAgICAgICAgICAgKGRlZmF1bHQ6ICItbSB0ZXN0IC0tcGdvIikNCitleGl0IC9iIDEyNw0KIA0KLXJlbSBBcmd1bWVudHM6DQotcmVtICAtYyAgU2V0IHRoZSBjb25maWd1cmF0aW9uIChkZWZhdWx0OiBSZWxlYXNlKQ0KLXJlbSAgLXAgIFNldCB0aGUgcGxhdGZvcm0gKHg2NCBvciBXaW4zMiwgZGVmYXVsdDogV2luMzIpDQotcmVtICAtciAgVGFyZ2V0IFJlYnVpbGQgaW5zdGVhZCBvZiBCdWlsZA0KLXJlbSAgLXQgIFNldCB0aGUgdGFyZ2V0IG1hbnVhbGx5IChCdWlsZCwgUmVidWlsZCwgb3IgQ2xlYW4pDQotcmVtICAtZCAgU2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIERlYnVnDQotcmVtICAtZSAgUHVsbCBpbiBleHRlcm5hbCBsaWJyYXJpZXMgdXNpbmcgZ2V0X2V4dGVybmFscy5iYXQNCi1yZW0gIC1tICBFbmFibGUgcGFyYWxsZWwgYnVpbGQNCi1yZW0gIC1NICBEaXNhYmxlIHBhcmFsbGVsIGJ1aWxkIChkaXNhYmxlZCBieSBkZWZhdWx0KQ0KLXJlbSAgLXYgIEluY3JlYXNlZCBvdXRwdXQgbWVzc2FnZXMNCi1yZW0gIC1rICBBdHRlbXB0IHRvIGtpbGwgYW55IHJ1bm5pbmcgUHl0aG9ucyBiZWZvcmUgYnVpbGRpbmcNCi0NCis6UnVuDQogc2V0bG9jYWwNCiBzZXQgcGxhdGY9V2luMzINCiBzZXQgdnNfcGxhdGY9eDg2DQogc2V0IGNvbmY9UmVsZWFzZQ0KIHNldCB0YXJnZXQ9QnVpbGQNCiBzZXQgZGlyPSV+ZHAwDQotc2V0IHBhcmFsbGVsPQ0KK3NldCBwYXJhbGxlbD0vbQ0KIHNldCB2ZXJib3NlPS9ub2xvZ28gL3Y6bQ0KIHNldCBraWxsPQ0KLXNldCBidWlsZF90a2ludGVyPQ0KK3NldCBkb19wZ289DQorc2V0IHBnb19qb2I9LW0gdGVzdCAtLXBnbw0KK3NldCBvbl82NF9iaXQ9dHJ1ZQ0KKw0KK3JlbSBUaGlzIG1heSBub3QgYmUgMTAwJSBhY2N1cmF0ZSwgYnV0IGNsb3NlIGVub3VnaC4NCitpZiAiJVByb2dyYW1GaWxlcyh4ODYpJSI9PSIiIChzZXQgb25fNjRfYml0PWZhbHNlKQ0KIA0KIDpDaGVja09wdHMNCi1pZiAnJTEnPT0nLWMnIChzZXQgY29uZj0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCi1pZiAnJTEnPT0nLXAnIChzZXQgcGxhdGY9JTIpICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQotaWYgJyUxJz09Jy1yJyAoc2V0IHRhcmdldD1SZWJ1aWxkKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCi1pZiAnJTEnPT0nLXQnIChzZXQgdGFyZ2V0PSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KLWlmICclMSc9PSctZCcgKHNldCBjb25mPURlYnVnKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCi1pZiAnJTEnPT0nLWUnIGNhbGwgIiVkaXIlZ2V0X2V4dGVybmFscy5iYXQiICYgKHNldCBidWlsZF90a2ludGVyPXRydWUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KLWlmICclMSc9PSctbScgKHNldCBwYXJhbGxlbD0vbSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQotaWYgJyUxJz09Jy1NJyAoc2V0IHBhcmFsbGVsPSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQotaWYgJyUxJz09Jy12JyAoc2V0IHZlcmJvc2U9L3Y6bikgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQotaWYgJyUxJz09Jy1rJyAoc2V0IGtpbGw9dHJ1ZSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSI9PSItaCIgZ290byBVc2FnZQ0KK2lmICIlfjEiPT0iLWMiIChzZXQgY29uZj0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJX4xIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiPT0iLXIiIChzZXQgdGFyZ2V0PVJlYnVpbGQpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiPT0iLXQiIChzZXQgdGFyZ2V0PSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiPT0iLWQiIChzZXQgY29uZj1EZWJ1ZykgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSI9PSItbSIgKHNldCBwYXJhbGxlbD0vbSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSI9PSItTSIgKHNldCBwYXJhbGxlbD0pICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiPT0iLXYiIChzZXQgdmVyYm9zZT0vdjpuKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJX4xIj09Ii1rIiAoc2V0IGtpbGw9dHJ1ZSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSI9PSItLXBnbyIgKHNldCBkb19wZ289dHJ1ZSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSI9PSItLXBnby1qb2IiIChzZXQgZG9fcGdvPXRydWUpICYgKHNldCBwZ29fam9iPSV+MikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJX4xIj09Ii0tdGVzdC1tYXJrZXIiIChzZXQgVXNlVGVzdE1hcmtlcj10cnVlKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJX4xIj09Ii1WIiBzaGlmdCAmIGdvdG8gVmVyc2lvbg0KK3JlbSBUaGVzZSB1c2UgdGhlIGFjdHVhbCBwcm9wZXJ0eSBuYW1lcyB1c2VkIGJ5IE1TQnVpbGQuICBXZSBjb3VsZCBqdXN0IGxldA0KK3JlbSB0aGVtIGluIHRocm91Z2ggdGhlIGVudmlyb25tZW50LCBidXQgd2Ugc3BlY2lmeSB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUNCityZW0gYW55d2F5IGZvciB2aXNpYmlsaXR5IHNvIHNldCBkZWZhdWx0cyBhZnRlciB0aGlzDQoraWYgIiV+MSI9PSItZSIgKHNldCBJbmNsdWRlRXh0ZXJuYWxzPXRydWUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiPT0iLS1uby1zc2wiIChzZXQgSW5jbHVkZVNTTD1mYWxzZSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSI9PSItLW5vLXRraW50ZXIiIChzZXQgSW5jbHVkZVRraW50ZXI9ZmFsc2UpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KIA0KLWlmICclY29uZiUnPT0nRGVidWcnIChzZXQgZGJnX2V4dD1fZCkgZWxzZSAoc2V0IGRiZ19leHQ9KQ0KLWlmICclcGxhdGYlJz09J3g2NCcgKA0KLSAgICBzZXQgdnNfcGxhdGY9eDg2X2FtZDY0DQotICAgIHNldCBidWlsZGRpcj0lZGlyJWFtZDY0XA0KLSkgZWxzZSAoDQotICAgIHNldCBidWlsZGRpcj0lZGlyJQ0KK2lmICIlSW5jbHVkZUV4dGVybmFscyUiPT0iIiBzZXQgSW5jbHVkZUV4dGVybmFscz1mYWxzZQ0KK2lmICIlSW5jbHVkZVNTTCUiPT0iIiBzZXQgSW5jbHVkZVNTTD10cnVlDQoraWYgIiVJbmNsdWRlVGtpbnRlciUiPT0iIiBzZXQgSW5jbHVkZVRraW50ZXI9dHJ1ZQ0KKw0KK2lmICIlSW5jbHVkZUV4dGVybmFscyUiPT0idHJ1ZSIgY2FsbCAiJWRpciVnZXRfZXh0ZXJuYWxzLmJhdCINCisNCitpZiAiJXBsYXRmJSI9PSJ4NjQiICgNCisgICAgaWYgIiVvbl82NF9iaXQlIj09InRydWUiICgNCisgICAgICAgIHJlbSBUaGlzIG91Z2h0IHRvIGFsd2F5cyBiZSBjb3JyZWN0IHRoZXNlIGRheXMuLi4NCisgICAgICAgIHNldCB2c19wbGF0Zj1hbWQ2NA0KKyAgICApIGVsc2UgKA0KKyAgICAgICAgaWYgIiVkb19wZ28lIj09InRydWUiICgNCisgICAgICAgICAgICBlY2hvLkVSUk9SOiBDYW5ub3QgY3Jvc3MtY29tcGlsZSB3aXRoIFBHTw0KKyAgICAgICAgICAgIGVjaG8uICAgIDMyYml0IG9wZXJhdGluZyBzeXN0ZW0gZGV0ZWN0ZWQsIGlmIHRoaXMgaXMgaW5jb3JyZWN0LA0KKyAgICAgICAgICAgIGVjaG8uICAgIG1ha2Ugc3VyZSB0aGUgUHJvZ3JhbUZpbGVzKHg4Nl4pIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldA0KKyAgICAgICAgICAgIGV4aXQgL2IgMQ0KKyAgICAgICAgKQ0KKyAgICAgICAgc2V0IHZzX3BsYXRmPXg4Nl9hbWQ2NA0KKyAgICApDQogKQ0KIA0KIHJlbSBTZXR1cCB0aGUgZW52aXJvbm1lbnQNCi1jYWxsICIlZGlyJWVudi5iYXQiICV2c19wbGF0ZiUNCitjYWxsICIlZGlyJWVudi5iYXQiICV2c19wbGF0ZiUgPm51bA0KIA0KLWlmICcla2lsbCUnPT0ndHJ1ZScgKA0KLSAgICBtc2J1aWxkICIlZGlyJWtpbGxfcHl0aG9uLnZjeHByb2oiICV2ZXJib3NlJSAvcDpDb25maWd1cmF0aW9uPSVjb25mJSAvcDpQbGF0Zm9ybT0lcGxhdGYlICYmICIlYnVpbGRkaXIla2lsbF9weXRob24lZGJnX2V4dCUuZXhlIg0KK2lmICIla2lsbCUiPT0idHJ1ZSIgY2FsbCA6S2lsbA0KKw0KK2lmICIlZG9fcGdvJSI9PSJ0cnVlIiAoDQorICAgIHNldCBjb25mPVBHSW5zdHJ1bWVudA0KKyAgICBjYWxsIDpCdWlsZA0KKyAgICBkZWwgL3MgIiVkaXIlXCoucGdjIg0KKyAgICBkZWwgL3MgIiVkaXIlXC4uXExpYlwqLnB5YyINCisgICAgZWNobyBvbg0KKyAgICBjYWxsICIlZGlyJVwuLlxweXRob24uYmF0IiAlcGdvX2pvYiUNCisgICAgQGVjaG8gb2ZmDQorICAgIGNhbGwgOktpbGwNCisgICAgc2V0IGNvbmY9UEdVcGRhdGUNCiApDQorZ290byBCdWlsZA0KIA0KLXNldCBleHRlcm5hbHNfZGlyPSVkaXIlLi5cZXh0ZXJuYWxzDQotaWYgJyVidWlsZF90a2ludGVyJSc9PSd0cnVlJyAoDQotICAgIGlmICclcGxhdGYlJz09J3g2NCcgKA0KLSAgICAgICAgc2V0IHRjbHRrZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2x0azY0DQotICAgICAgICBzZXQgbWFjaGluZT1BTUQ2NA0KLSAgICApIGVsc2UgKA0KLSAgICAgICAgc2V0IHRjbHRrZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2x0aw0KLSAgICAgICAgc2V0IG1hY2hpbmU9SVg4Ng0KLSAgICApDQotICAgIGlmICclY29uZiUnPT0nRGVidWcnICgNCi0gICAgICAgIHNldCB0Y2xfZGJnX2V4dD1nDQotICAgICAgICBzZXQgZGVidWdfZmxhZz0xDQotICAgICAgICBzZXQgb3B0aW9ucz1zeW1ib2xzDQotICAgICkgZWxzZSAoDQotICAgICAgICBzZXQgdGNsX2RiZ19leHQ9DQotICAgICAgICBzZXQgZGVidWdfZmxhZz0wDQotICAgICAgICBzZXQgb3B0aW9ucz0NCi0gICAgKQ0KLSAgICBzZXQgdGNsZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2wtOC42LjEuMA0KLSAgICBzZXQgdGtkaXI9JWV4dGVybmFsc19kaXIlXHRrLTguNi4xLjANCi0gICAgc2V0IHRpeGRpcj0lZXh0ZXJuYWxzX2RpciVcdGl4LTguNC4zLjQNCi0pDQotaWYgJyVidWlsZF90a2ludGVyJSc9PSd0cnVlJyAoDQotICAgIGlmIG5vdCBleGlzdCAiJXRjbHRrZGlyJVxiaW5cdGNsODZ0JXRjbF9kYmdfZXh0JS5kbGwiICgNCi0gICAgICAgIEByZW0gYWxsIGFuZCBpbnN0YWxsIG5lZWQgdG8gYmUgc2VwYXJhdGUgaW52b2NhdGlvbnMsIG90aGVyd2lzZSBubWFrZWhscCBpcyBub3QgZm91bmQgb24gaW5zdGFsbA0KLSAgICAgICAgcHVzaGQgIiV0Y2xkaXIlXHdpbiINCi0gICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9JW1hY2hpbmUlIE9QVFM9JW9wdGlvbnMlIElOU1RBTExESVI9IiV0Y2x0a2RpciUiIGNsZWFuIGFsbA0KLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcw0KLSAgICAgICAgcG9wZA0KLSAgICApDQotICAgIGlmIG5vdCBleGlzdCAiJWJ1aWxkZGlyJXRjbDg2dCV0Y2xfZGJnX2V4dCUuZGxsIiAoDQotICAgICAgICB4Y29weSAiJXRjbHRrZGlyJVxiaW5cdGNsODZ0JXRjbF9kYmdfZXh0JS5kbGwiICIlYnVpbGRkaXIlIg0KLSAgICApDQorOktpbGwNCitlY2hvIG9uDQorbXNidWlsZCAiJWRpciVccHl0aG9uY29yZS52Y3hwcm9qIiAvdDpLaWxsUHl0aG9uICV2ZXJib3NlJV4NCisgL3A6Q29uZmlndXJhdGlvbj0lY29uZiUgL3A6UGxhdGZvcm09JXBsYXRmJV4NCisgL3A6S2lsbFB5dGhvbj10cnVlDQogDQotICAgIGlmIG5vdCBleGlzdCAiJXRjbHRrZGlyJVxiaW5cdGs4NnQldGNsX2RiZ19leHQlLmRsbCIgKA0KLSAgICAgICAgcHVzaGQgIiV0a2RpciVcd2luIg0KLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgVENMRElSPSIldGNsZGlyJSIgY2xlYW4NCi0gICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9JW1hY2hpbmUlIE9QVFM9JW9wdGlvbnMlIElOU1RBTExESVI9IiV0Y2x0a2RpciUiIFRDTERJUj0iJXRjbGRpciUiIGFsbA0KLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgVENMRElSPSIldGNsZGlyJSIgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcw0KLSAgICAgICAgcG9wZA0KLSAgICApDQotICAgIGlmIG5vdCBleGlzdCAiJWJ1aWxkZGlyJXRrODZ0JXRjbF9kYmdfZXh0JS5kbGwiICgNCi0gICAgICAgIHhjb3B5ICIldGNsdGtkaXIlXGJpblx0azg2dCV0Y2xfZGJnX2V4dCUuZGxsIiAiJWJ1aWxkZGlyJSINCi0gICAgKQ0KK0BlY2hvIG9mZg0KK2dvdG8gOmVvZg0KIA0KLSAgICBpZiBub3QgZXhpc3QgIiV0Y2x0a2RpciVcbGliXHRpeDguNC4zXHRpeDg0JXRjbF9kYmdfZXh0JS5kbGwiICgNCi0gICAgICAgIHB1c2hkICIldGl4ZGlyJVx3aW4iDQotICAgICAgICBubWFrZSAtZiBweXRob24ubWFrIERFQlVHPSVkZWJ1Z19mbGFnJSBNQUNISU5FPSVtYWNoaW5lJSBUQ0xfRElSPSIldGNsZGlyJSIgVEtfRElSPSIldGtkaXIlIiBJTlNUQUxMX0RJUj0iJXRjbHRrZGlyJSIgY2xlYW4NCi0gICAgICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgREVCVUc9JWRlYnVnX2ZsYWclIE1BQ0hJTkU9JW1hY2hpbmUlIFRDTF9ESVI9IiV0Y2xkaXIlIiBUS19ESVI9IiV0a2RpciUiIElOU1RBTExfRElSPSIldGNsdGtkaXIlIiBhbGwNCi0gICAgICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgREVCVUc9JWRlYnVnX2ZsYWclIE1BQ0hJTkU9JW1hY2hpbmUlIFRDTF9ESVI9IiV0Y2xkaXIlIiBUS19ESVI9IiV0a2RpciUiIElOU1RBTExfRElSPSIldGNsdGtkaXIlIiBpbnN0YWxsDQotICAgICAgICBwb3BkDQotICAgICkNCi0pDQotDQorOkJ1aWxkDQogcmVtIENhbGwgb24gTVNCdWlsZCB0byBkbyB0aGUgd29yaywgZWNobyB0aGUgY29tbWFuZC4NCiByZW0gUGFzc2luZyAlMS05IGlzIG5vdCB0aGUgcHJlZmVycmVkIG9wdGlvbiwgYnV0IGFyZ3VtZW50IHBhcnNpbmcgaW4NCiByZW0gYmF0Y2ggaXMsIHNoYWxsIHdlIHNheSwgImxhY2tsdXN0ZXIiDQogZWNobyBvbg0KLW1zYnVpbGQgIiVkaXIlcGNidWlsZC5zbG4iIC90OiV0YXJnZXQlICVwYXJhbGxlbCUgJXZlcmJvc2UlIC9wOkNvbmZpZ3VyYXRpb249JWNvbmYlIC9wOlBsYXRmb3JtPSVwbGF0ZiUgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkNCittc2J1aWxkICIlZGlyJXBjYnVpbGQucHJvaiIgL3Q6JXRhcmdldCUgJXBhcmFsbGVsJSAldmVyYm9zZSVeDQorIC9wOkNvbmZpZ3VyYXRpb249JWNvbmYlIC9wOlBsYXRmb3JtPSVwbGF0ZiVeDQorIC9wOkluY2x1ZGVFeHRlcm5hbHM9JUluY2x1ZGVFeHRlcm5hbHMlXg0KKyAvcDpJbmNsdWRlU1NMPSVJbmNsdWRlU1NMJSAvcDpJbmNsdWRlVGtpbnRlcj0lSW5jbHVkZVRraW50ZXIlXg0KKyAvcDpVc2VUZXN0TWFya2VyPSVVc2VUZXN0TWFya2VyJV4NCisgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkNCisNCitAZWNobyBvZmYNCitnb3RvIDplb2YNCisNCis6VmVyc2lvbg0KK3JlbSBEaXNwbGF5IHRoZSBjdXJyZW50IGJ1aWxkIHZlcnNpb24gaW5mb3JtYXRpb24NCittc2J1aWxkICIlZGlyJXB5dGhvbi5wcm9wcyIgL3Q6U2hvd1ZlcnNpb25JbmZvIC92Om0gL25vbG9nbyAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQ0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfcGdvLmJhdCBiL1BDYnVpbGQvYnVpbGRfcGdvLmJhdAppbmRleCBkN2U0ZThiLi44NzJjMzgyIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3Bnby5iYXQKKysrIGIvUENidWlsZC9idWlsZF9wZ28uYmF0CkBAIC0xLDQxICsxLDYgQEAKIEBlY2hvIG9mZg0KLXJlbSBBIGJhdGNoIHByb2dyYW0gdG8gYnVpbGQgUEdPIChQcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24pIGJ5IGZpcnN0DQotcmVtIGJ1aWxkaW5nIGluc3RydW1lbnRlZCBiaW5hcmllcywgdGhlbiBydW5uaW5nIHRoZSB0ZXN0c3VpdGUsIGFuZA0KLXJlbSBmaW5hbGx5IGJ1aWxkaW5nIHRoZSBvcHRpbWl6ZWQgY29kZS4NCi1yZW0gTm90ZSwgYWZ0ZXIgdGhlIGZpcnN0IGluc3RydW1lbnRlZCBydW4sIG9uZSBjYW4ganVzdCBrZWVwIG9uDQotcmVtIGJ1aWxkaW5nIHRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHdoaWxlIGRldmVsb3BpbmcuDQorZWNoby5EZXByZWNhdGlvbldhcm5pbmc6DQorZWNoby4gICAgVGhpcyBzY3JpcHQgaXMgZGVwcmVjYXRlZCwgdXNlIGBidWlsZC5iYXQgLS1wZ29gIGluc3RlYWQuDQorZWNoby4NCiANCi1zZXRsb2NhbA0KLXNldCBwbGF0Zj1XaW4zMg0KLQ0KLXJlbSB1c2UgdGhlIHBlcmZvcm1hbmNlIHRlc3RzdWl0ZS4gIFRoaXMgaXMgcXVpY2sgYW5kIHNpbXBsZQ0KLXNldCBqb2IxPS4uXHRvb2xzXHB5YmVuY2hccHliZW5jaC5weSAtbiAxIC1DIDEgLS13aXRoLWdjDQotc2V0IHBhdGgxPS4uXHRvb2xzXHB5YmVuY2gNCi0NCi1yZW0gb3IgdGhlIHdob2xlIHRlc3RzdWl0ZSBmb3IgbW9yZSB0aG9yb3VnaCB0ZXN0aW5nDQotc2V0IGpvYjI9Li5cbGliXHRlc3RccmVncnRlc3QucHkNCi1zZXQgcGF0aDI9Li5cbGliDQotDQotc2V0IGpvYj0lam9iMSUNCi1zZXQgY2xycGF0aD0lcGF0aDElDQotDQotOkNoZWNrT3B0cw0KLWlmICIlMSI9PSItcCIgKHNldCBwbGF0Zj0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCi1pZiAiJTEiPT0iLTIiIChzZXQgam9iPSVqb2IyJSkgJiAoc2V0IGNscnBhdGg9JXBhdGgyJSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQotDQotc2V0IFBHST0lcGxhdGYlLXBnaQ0KLXNldCBQR089JXBsYXRmJS1wZ28NCi0NCi1AZWNobyBvbg0KLXJlbSBidWlsZCB0aGUgaW5zdHJ1bWVudGVkIHZlcnNpb24NCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50DQotDQotcmVtIHJlbW92ZSAucHljIGZpbGVzLCAucGdjIGZpbGVzIGFuZCBleGVjdXRlIHRoZSBqb2INCi0lUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQ0KLWRlbCAlUEdJJVwqLnBnYw0KLSVQR0klXHB5dGhvbi5leGUgJWpvYiUNCi0NCi1yZW0gZmluYWxseSBidWlsZCB0aGUgb3B0aW1pemVkIHZlcnNpb24NCi1pZiBleGlzdCAlUEdPJSBkZWwgL3MgL3EgJVBHTyUNCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUNCi0NCitjYWxsICIlfmRwMGJ1aWxkLmJhdCIgLS1wZ28gJSoNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NzViOGQuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9idWlsZF9zc2wuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotQGVjaG8gb2ZmDQotaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKA0KLSAgaWYgJTEgRVFVIERlYnVnICgNCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQ0KLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzRfZC5kbGwgZXhpdCAxDQotICApIEVMU0UgKA0KLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQ0KLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzQuZGxsIGV4aXQgMQ0KLSAgKQ0KLSkNCi0lSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMiAlMw0KLQ0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfc3NsLnB5IGIvUENidWlsZC9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZWU3MTUuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9idWlsZF9zc2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotIyBTY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBfc3NsIGFuZCBfaGFzaGxpYiBtb2R1bGVzIGZvciBXaW5kb3dzLgotIyBVc2VzIFBlcmwgdG8gc2V0dXAgdGhlIE9wZW5TU0wgZW52aXJvbm1lbnQgY29ycmVjdGx5Ci0jIGFuZCBidWlsZCBPcGVuU1NMLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbm1ha2Ugc2Vzc2lvbgotIyBmb3IgdGhlIGFjdHVhbCBfc3NsLnB5ZCBhbmQgX2hhc2hsaWIucHlkIERMTHMuCi0KLSMgVEhFT1JFVElDQUxMWSwgeW91IGNhbjoKLSMgKiBVbnBhY2sgdGhlIGxhdGVzdCBTU0wgcmVsZWFzZSBvbmUgbGV2ZWwgYWJvdmUgeW91ciBtYWluIFB5dGhvbiBzb3VyY2UKLSMgICBkaXJlY3RvcnkuICBJdCBpcyBsaWtlbHkgeW91IHdpbGwgYWxyZWFkeSBmaW5kIHRoZSB6bGliIGxpYnJhcnkgYW5kCi0jICAgYW55IG90aGVyIGV4dGVybmFsIHBhY2thZ2VzIHRoZXJlLgotIyAqIEluc3RhbGwgQWN0aXZlUGVybCBhbmQgZW5zdXJlIGl0IGlzIHNvbWV3aGVyZSBvbiB5b3VyIHBhdGguCi0jICogUnVuIHRoaXMgc2NyaXB0IGZyb20gdGhlIFBDQnVpbGQgZGlyZWN0b3J5LgotIwotIyBpdCBzaG91bGQgY29uZmlndXJlIGFuZCBidWlsZCBTU0wsIHRoZW4gYnVpbGQgdGhlIF9zc2wgYW5kIF9oYXNobGliCi0jIFB5dGhvbiBleHRlbnNpb25zIHdpdGhvdXQgaW50ZXJ2ZW50aW9uLgotCi0jIE1vZGlmaWVkIGJ5IENocmlzdGlhbiBIZWltZXMKLSMgTm93IHRoaXMgc2NyaXB0IHN1cHBvcnRzIHByZS1nZW5lcmF0ZWQgbWFrZWZpbGVzIGFuZCBhc3NlbWJseSBmaWxlcy4KLSMgRGV2ZWxvcGVycyBkb24ndCBuZWVkIGFuIGluc3RhbGxhdGlvbiBvZiBQZXJsIGFueW1vcmUgdG8gYnVpbGQgUHl0aG9uLiBBIHN2bgotIyBjaGVja291dCBmcm9tIG91ciBzdm4gcmVwb3NpdG9yeSBpcyBlbm91Z2guCi0jCi0jIEluIE9yZGVyIHRvIGNyZWF0ZSB0aGUgZmlsZXMgaW4gdGhlIGNhc2Ugb2YgYW4gdXBkYXRlIHlvdSBzdGlsbCBuZWVkIFBlcmwuCi0jIFJ1biBidWlsZF9zc2wgaW4gdGhpcyBvcmRlcjoKLSMgcHl0aG9uLmV4ZSBidWlsZF9zc2wucHkgUmVsZWFzZSB4NjQKLSMgcHl0aG9uLmV4ZSBidWlsZF9zc2wucHkgUmVsZWFzZSBXaW4zMgotCi1pbXBvcnQgb3MsIHN5cywgcmUsIHNodXRpbAotaW1wb3J0IHN1YnByb2Nlc3MKLQotIyBGaW5kIGFsbCAiZm9vLmV4ZSIgZmlsZXMgb24gdGhlIFBBVEguCi1kZWYgZmluZF9hbGxfb25fcGF0aChmaWxlbmFtZSwgZXh0cmFzID0gTm9uZSk6Ci0gICAgZW50cmllcyA9IG9zLmVudmlyb25bIlBBVEgiXS5zcGxpdChvcy5wYXRoc2VwKQotICAgIHJldCA9IFtdCi0gICAgZm9yIHAgaW4gZW50cmllczoKLSAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICBpZiBleHRyYXM6Ci0gICAgICAgIGZvciBwIGluIGV4dHJhczoKLSAgICAgICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICAgICAgcmV0LmFwcGVuZChmbmFtZSkKLSAgICByZXR1cm4gcmV0Ci0KLSMgRmluZCBhIHN1aXRhYmxlIFBlcmwgaW5zdGFsbGF0aW9uIGZvciBPcGVuU1NMLgotIyBjeWd3aW4gcGVybCBkb2VzICpub3QqIHdvcmsuICBBY3RpdmVQZXJsIGRvZXMuCi0jIEJlaW5nIGEgUGVybCBkdW1teSwgdGhlIHNpbXBsZXN0IHdheSBJIGNhbiBjaGVjayBpcyBpZiB0aGUgIldpbjMyIiBwYWNrYWdlCi0jIGlzIGF2YWlsYWJsZS4KLWRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6Ci0gICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtwZXJsLCAiLWUiLCAidXNlIFdpbjMyOyJdKQotICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHBlcmwKLQotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCgiVGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIpCi0gICAgICAgIGZvciBwIGluIHBlcmxzOgotICAgICAgICAgICAgcHJpbnQoIiAiLCBwKQotICAgICAgICBwcmludCgiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIikKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCi0gICAgcHJpbnQoIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiKQotCi0jIEZldGNoIFNTTCBkaXJlY3RvcnkgZnJvbSBWQyBwcm9wZXJ0aWVzCi1kZWYgZ2V0X3NzbF9kaXIoKToKLSAgICBwcm9wZmlsZSA9IChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ3B5cHJvamVjdC5wcm9wcycpKQotICAgIHdpdGggb3Blbihwcm9wZmlsZSwgZW5jb2Rpbmc9J3V0Zi04LXNpZycpIGFzIGY6Ci0gICAgICAgIG0gPSByZS5zZWFyY2goJ29wZW5zc2wtKFtePF0rKTwnLCBmLnJlYWQoKSkKLSAgICAgICAgcmV0dXJuICIuLlxleHRlcm5hbHNcb3BlbnNzbC0iK20uZ3JvdXAoMSkKLQotCi1kZWYgY3JlYXRlX21ha2VmaWxlNjQobWFrZWZpbGUsIG0zMik6Ci0gICAgIiIiQ3JlYXRlIGFuZCBmaXggbWFrZWZpbGUgZm9yIDY0Yml0Ci0KLSAgICBSZXBsYWNlIDMyIHdpdGggNjRiaXQgZGlyZWN0b3JpZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobTMyKToKLSAgICAgICAgcmV0dXJuCi0gICAgd2l0aCBvcGVuKG0zMikgYXMgZmluOgotICAgICAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCI9dG1wMzIiLCAiPXRtcDY0IikKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCI9b3V0MzIiLCAiPW91dDY0IikKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCI9aW5jMzIiLCAiPWluYzY0IikKLSAgICAgICAgICAgICAgICAjIGZvcmNlIDY0IGJpdCBtYWNoaW5lCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiTUtMSUI9bGliIiwgIk1LTElCPWxpYiAvTUFDSElORTpYNjQiKQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIkxGTEFHUz0iLCAiTEZMQUdTPS9NQUNISU5FOlg2NCAiKQotICAgICAgICAgICAgICAgICMgZG9uJ3QgbGluayBhZ2FpbnN0IHRoZSBsaWIgb24gNjRiaXQgc3lzdGVtcwotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoImJ1ZmZlcm92ZXJmbG93dS5saWIiLCAiIikKLSAgICAgICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0gICAgb3MudW5saW5rKG0zMikKLQotZGVmIGZpeF9tYWtlZmlsZShtYWtlZmlsZSk6Ci0gICAgIiIiRml4IHNvbWUgc3R1ZmYgaW4gYWxsIG1ha2VmaWxlcwotICAgICIiIgotICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSk6Ci0gICAgICAgIHJldHVybgotICAgIHdpdGggb3BlbihtYWtlZmlsZSkgYXMgZmluOgotICAgICAgICBsaW5lcyA9IGZpbi5yZWFkbGluZXMoKQotICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUEVSTD0iKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJDUD0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gIkNQPWNvcHlcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiTUtESVI9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJNS0RJUj1ta2RpclxuIgotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJDRkxBRz0iKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgZm9yIGFsZ28gaW4gKCJSQzUiLCAiTURDMiIsICJJREVBIik6Ci0gICAgICAgICAgICAgICAgICAgIG5vYWxnbyA9ICIgLURPUEVOU1NMX05PXyVzIiAlIGFsZ28KLSAgICAgICAgICAgICAgICAgICAgaWYgbm9hbGdvIG5vdCBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyBub2FsZ28KLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICdcbicKLSAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKLQotZGVmIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpOgotICAgIHByaW50KCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSsiIG5vLWlkZWEgbm8tbWRjMiIpCi0gICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSsiIG5vLWlkZWEgbm8tbWRjMiIpCi0gICAgcHJpbnQoZG9fc2NyaXB0KQotICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCi0KLWRlZiBjbXAoZjEsIGYyKToKLSAgICBidWZzaXplID0gMTAyNCAqIDgKLSAgICB3aXRoIG9wZW4oZjEsICdyYicpIGFzIGZwMSwgb3BlbihmMiwgJ3JiJykgYXMgZnAyOgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQotICAgICAgICAgICAgYjIgPSBmcDIucmVhZChidWZzaXplKQotICAgICAgICAgICAgaWYgYjEgIT0gYjI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgYjE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotZGVmIGNvcHkoc3JjLCBkc3QpOgotICAgIGlmIG9zLnBhdGguaXNmaWxlKGRzdCkgYW5kIGNtcChzcmMsIGRzdCk6Ci0gICAgICAgIHJldHVybgotICAgIHNodXRpbC5jb3B5KHNyYywgZHN0KQotCi1kZWYgbWFpbigpOgotICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKLSAgICBpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZSI6Ci0gICAgICAgIGRlYnVnID0gRmFsc2UKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICJEZWJ1ZyI6Ci0gICAgICAgIGRlYnVnID0gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Ioc3RyKHN5cy5hcmd2KSkKLQotICAgIGlmIHN5cy5hcmd2WzJdID09ICJXaW4zMiI6Ci0gICAgICAgIGFyY2ggPSAieDg2IgotICAgICAgICBjb25maWd1cmUgPSAiVkMtV0lOMzIiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fbmFzbSIKLSAgICAgICAgbWFrZWZpbGU9Im1zXFxudC5tYWsiCi0gICAgICAgIG0zMiA9IG1ha2VmaWxlCi0gICAgICAgIGRpcnN1ZmZpeCA9ICIzMiIKLSAgICBlbGlmIHN5cy5hcmd2WzJdID09ICJ4NjQiOgotICAgICAgICBhcmNoPSJhbWQ2NCIKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjY0QSIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb193aW42NGEiCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudDY0Lm1hayIKLSAgICAgICAgbTMyID0gbWFrZWZpbGUucmVwbGFjZSgnNjQnLCAnJykKLSAgICAgICAgZGlyc3VmZml4ID0gIjY0IgotICAgICAgICAjb3MuZW52aXJvblsiVlNFWFRDT01QX1VTRUNMIl0gPSAiTVNfT1BURVJPTiIKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHN0cihzeXMuYXJndikpCi0KLSAgICBtYWtlX2ZsYWdzID0gIiIKLSAgICBpZiBidWlsZF9hbGw6Ci0gICAgICAgIG1ha2VfZmxhZ3MgPSAiLWEiCi0gICAgIyBwZXJsIHNob3VsZCBiZSBvbiB0aGUgcGF0aCwgYnV0IHdlIGFsc28gbG9vayBpbiAiXHBlcmwiIGFuZCAiYzpcXHBlcmwiCi0gICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCi0gICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFtyIlxwZXJsXGJpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIkM6XHBlcmxcYmluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXHBlcmw2NFxiaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJDOlxwZXJsNjRcYmluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybDoKLSAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAyIGxldmVscyB1cCBmcm9tIHBjYnVpbGQgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KLSAgICBzc2xfZGlyID0gZ2V0X3NzbF9kaXIoKQotICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICMgYWRkIG91ciBjb3B5IG9mIE5BU00gdG8gUEFUSC4gIEl0IHdpbGwgYmUgb24gdGhlIHNhbWUgbGV2ZWwgYXMgb3BlbnNzbAotICAgIGZvciBkaXIgaW4gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4oc3NsX2Rpciwgb3MucGFyZGlyKSk6Ci0gICAgICAgIGlmIGRpci5zdGFydHN3aXRoKCduYXNtJyk6Ci0gICAgICAgICAgICBuYXNtX2RpciA9IG9zLnBhdGguam9pbihzc2xfZGlyLCBvcy5wYXJkaXIsIGRpcikKLSAgICAgICAgICAgIG5hc21fZGlyID0gb3MucGF0aC5hYnNwYXRoKG5hc21fZGlyKQotICAgICAgICAgICAgb2xkX3BhdGggPSBvcy5lbnZpcm9uWydQQVRIJ10KLSAgICAgICAgICAgIG9zLmVudmlyb25bJ1BBVEgnXSA9IG9zLnBhdGhzZXAuam9pbihbbmFzbV9kaXIsIG9sZF9wYXRoXSkKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ05BU00gd2FzIG5vdCBmb3VuZCwgbWFrZSBzdXJlIGl0IGlzIG9uIFBBVEgnKQotCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyByZWJ1aWxkIG1ha2VmaWxlIHdoZW4gd2UgZG8gdGhlIHJvbGUgb3ZlciBmcm9tIDMyIHRvIDY0IGJ1aWxkCi0gICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IiBhbmQgb3MucGF0aC5pc2ZpbGUobTMyKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgICAgIG9zLnVubGluayhtMzIpCi0KLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwcmludCgiUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFrZWZpbGVzISIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGRlYnVnOgotICAgICAgICAgICAgICAgIHByaW50KCJPcGVuU1NMIGRlYnVnIGJ1aWxkcyBhcmVuJ3Qgc3VwcG9ydGVkLiIpCi0gICAgICAgICAgICAjaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgIyAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgIyAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAjICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKLSAgICAgICAgICAgICAgICBjcmVhdGVfbWFrZWZpbGU2NChtYWtlZmlsZSwgbTMyKQotICAgICAgICAgICAgZml4X21ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQotCi0gICAgICAgICMgSWYgdGhlIGFzc2VtYmxlciBmaWxlcyBkb24ndCBleGlzdCBpbiB0bXBYWCwgY29weSB0aGVtIHRoZXJlCi0gICAgICAgIGlmIHBlcmwgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygidG1wIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKCJ0bXAiK2RpcnN1ZmZpeCkKLSAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBpZiBub3QgZi5lbmRzd2l0aCgiLmFzbSIpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHIidG1wJXNcJXMiICUgKGRpcnN1ZmZpeCwgZikpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiYXNtJXNcJXMiICUgKGRpcnN1ZmZpeCwgZiksICJ0bXAiK2RpcnN1ZmZpeCkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiOgotICAgICAgICAgICAgcmMgPSBvcy5zeXN0ZW0oIm5hc20gLWYgd2luNjQgLURORUFSIC1PeCAtZyBtc1xcdXB0YWJsZS5hc20iKQotICAgICAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIm5hc20gYXNzZW1ibGVyIGhhcyBmYWlsZWQuIikKLSAgICAgICAgICAgICAgICBzeXMuZXhpdChyYykKLQotICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cYnVpbGRpbmYuaCIpCi0gICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKLQotICAgICAgICAjbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gLWYgXCIlc1wiIiAlIG1ha2VmaWxlCi0gICAgICAgIHByaW50KCJFeGVjdXRpbmcgc3NsIG1ha2VmaWxlczoiLCBtYWtlQ29tbWFuZCkKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50KCJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIpCi0gICAgICAgICAgICBwcmludChyYykKLSAgICAgICAgICAgIHN5cy5leGl0KHJjKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLmNoZGlyKG9sZF9jZCkKLSAgICBzeXMuZXhpdChyYykKLQotaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkgYi9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MDdlN2IuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9idWlsZF90a2ludGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotIiIiU2NyaXB0IHRvIGNvbXBpbGUgdGhlIGRlcGVuZGVuY2llcyBvZiBfdGtpbnRlcgotCi1Db3B5cmlnaHQgKGMpIDIwMDcgYnkgQ2hyaXN0aWFuIEhlaW1lcyA8Y2hyaXN0aWFuQGNoZWltZXMuZGU+Ci0KLUxpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotaGVyZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQotcGFyID0gb3MucGF0aC5wYXJkaXIKLQotVENMID0gInRjbDguNi4xIgotVEsgPSAidGs4LjYuMSIKLVRJWCA9ICJ0aXgtOC40LjMuMyIKLQotUk9PVCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oaGVyZSwgcGFyLCBwYXIpKQotTk1BS0UgPSAoJ25tYWtlIC9ub2xvZ28gL2YgJXMgJXMgJXMnKQotCi1kZWYgbm1ha2UobWFrZWZpbGUsIGNvbW1hbmQ9IiIsICoqa3cpOgotICAgIGRlZmluZXMgPSAnICcuam9pbihrKyc9JytzdHIodikgZm9yIGssIHYgaW4ga3cuaXRlbXMoKSkKLSAgICBjbWQgPSBOTUFLRSAlIChtYWtlZmlsZSwgZGVmaW5lcywgY29tbWFuZCkKLSAgICBwcmludCgiXG5cbiIrY21kKyJcbiIpCi0gICAgaWYgb3Muc3lzdGVtKGNtZCkgIT0gMDoKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKGNtZCkKLQotZGVmIGJ1aWxkKHBsYXRmb3JtLCBjbGVhbik6Ci0gICAgaWYgcGxhdGZvcm0gPT0gIldpbjMyIjoKLSAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihST09ULCAidGNsdGsiKQotICAgICAgICBtYWNoaW5lID0gIklYODYiCi0gICAgZWxpZiBwbGF0Zm9ybSA9PSAiQU1ENjQiOgotICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKFJPT1QsICJ0Y2x0azY0IikKLSAgICAgICAgbWFjaGluZSA9ICJBTUQ2NCIKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHBsYXRmb3JtKQotCi0gICAgIyBUQ0wKLSAgICB0Y2xkaXIgPSBvcy5wYXRoLmpvaW4oUk9PVCwgVENMKQotICAgIGlmIDE6Ci0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbih0Y2xkaXIsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCBNQUNISU5FPW1hY2hpbmUpCi0gICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJpbnN0YWxsIiwgSU5TVEFMTERJUj1kZXN0LCBNQUNISU5FPW1hY2hpbmUpCi0KLSAgICAjIFRLCi0gICAgaWYgMToKLSAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKFJPT1QsIFRLLCAid2luIikpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImNsZWFuIiwgREVCVUc9MCwgVENMRElSPXRjbGRpcikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgREVCVUc9MCwgTUFDSElORT1tYWNoaW5lLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIERFQlVHPTAsIElOU1RBTExESVI9ZGVzdCwgTUFDSElORT1tYWNoaW5lLCBUQ0xESVI9dGNsZGlyKQotCi0gICAgIyBUSVgKLSAgICBpZiAxOgotICAgICAgICAjIHB5dGhvbjkubWFrIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcKLSAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKFJPT1QsIFRJWCwgIndpbiIpKQotICAgICAgICBpZiBjbGVhbjoKLSAgICAgICAgICAgIG5tYWtlKCJweXRob24ubWFrIiwgImNsZWFuIikKLSAgICAgICAgbm1ha2UoInB5dGhvbi5tYWsiLCBNQUNISU5FPW1hY2hpbmUsIElOU1RBTExfRElSPWRlc3QpCi0gICAgICAgIG5tYWtlKCJweXRob24ubWFrIiwgImluc3RhbGwiLCBNQUNISU5FPW1hY2hpbmUsIElOU1RBTExfRElSPWRlc3QpCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA8IDIgb3Igc3lzLmFyZ3ZbMV0gbm90IGluICgiV2luMzIiLCAiQU1ENjQiKToKLSAgICAgICAgcHJpbnQoIiVzIFdpbjMyfEFNRDY0IiAlIHN5cy5hcmd2WzBdKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgaWYgIi1jIiBpbiBzeXMuYXJndjoKLSAgICAgICAgY2xlYW4gPSBUcnVlCi0gICAgZWxzZToKLSAgICAgICAgY2xlYW4gPSBGYWxzZQotCi0gICAgYnVpbGQoc3lzLmFyZ3ZbMV0sIGNsZWFuKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2NsZWFuLmJhdCBiL1BDYnVpbGQvY2xlYW4uYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NTE3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL2NsZWFuLmJhdApAQCAtMCwwICsxLDUgQEAKK0BlY2hvIG9mZg0KK3JlbSBBIGJhdGNoIHByb2dyYW0gdG8gY2xlYW4gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24sDQorcmVtIGp1c3QgZm9yIGNvbnZlbmllbmNlLg0KKw0KK2NhbGwgJX5kcDBidWlsZC5iYXQgLXQgQ2xlYW4gJSoNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2RlYnVnLnByb3BzIGIvUENidWlsZC9kZWJ1Zy5wcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI3YTY1YS4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkL2RlYnVnLnByb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyI+Ci0gICAgPFB5RGVidWdFeHQ+X2Q8L1B5RGVidWdFeHQ+Ci0gICAgPEtpbGxQeXRob25FeGU+JChPdXREaXIpa2lsbF9weXRob25fZC5leGU8L0tpbGxQeXRob25FeGU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxUYXJnZXROYW1lPiQoUHJvamVjdE5hbWUpX2Q8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxCdWlsZE1hY3JvIEluY2x1ZGU9IlB5RGVidWdFeHQiPgotICAgICAgPFZhbHVlPiQoUHlEZWJ1Z0V4dCk8L1ZhbHVlPgotICAgIDwvQnVpbGRNYWNybz4KLSAgICA8QnVpbGRNYWNybyBJbmNsdWRlPSJLaWxsUHl0aG9uRXhlIj4KLSAgICAgIDxWYWx1ZT4kKEtpbGxQeXRob25FeGUpPC9WYWx1ZT4KLSAgICA8L0J1aWxkTWFjcm8+Ci0gIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvZW52LmJhdCBiL1BDYnVpbGQvZW52LmJhdAppbmRleCAwMTcwYmNlLi4yYjJjMDA1IDEwMDY0NAotLS0gYS9QQ2J1aWxkL2Vudi5iYXQKKysrIGIvUENidWlsZC9lbnYuYmF0CkBAIC0xLDQgKzEsMTYgQEAKIEBlY2hvIG9mZg0KLWVjaG8gQnVpbGQgZW52aXJvbm1lbnRzOiB4ODYsIGlhNjQsIGFtZDY0LCB4ODZfYW1kNjQsIHg4Nl9pYTY0DQorcmVtIFRoaXMgc2NyaXB0IGFkZHMgdGhlIGxhdGVzdCBhdmFpbGFibGUgdG9vbHMgdG8gdGhlIHBhdGggZm9yIHRoZSBjdXJyZW50DQorcmVtIGNvbW1hbmQgd2luZG93LiBIb3dldmVyLCBtb3N0IGJ1aWxkcyBvZiBQeXRob24gd2lsbCBpZ25vcmUgdGhlIHZlcnNpb24NCityZW0gb2YgdGhlIHRvb2xzIG9uIFBBVEggYW5kIHVzZSBQbGF0Zm9ybVRvb2xzZXQgaW5zdGVhZC4gSWRlYWxseSwgYm90aCBzZXRzIG9mDQorcmVtIHRvb2xzIHNob3VsZCBiZSB0aGUgc2FtZSB2ZXJzaW9uIHRvIGF2b2lkIHBvdGVudGlhbCBjb25mbGljdHMuDQorcmVtDQorcmVtIFRvIGJ1aWxkIFB5dGhvbiB3aXRoIGFuIGVhcmxpZXIgdG9vbHNldCwgcGFzcyAiL3A6UGxhdGZvcm1Ub29sc2V0PXYxMDAiIChvcg0KK3JlbSAndjExMCcsICd2MTIwJyBvciAndjE0MCcpIHRvIHRoZSBidWlsZCBzY3JpcHQuDQorDQorZWNobyBCdWlsZCBlbnZpcm9ubWVudHM6IHg4NiwgYW1kNjQsIHg4Nl9hbWQ2NA0KIGVjaG8uDQotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJS4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiICUqDQorc2V0IFZTVE9PTFM9JVZTMTQwQ09NTlRPT0xTJQ0KK2lmICIlVlNUT09MUyUiPT0iIiBzZXQgVlNUT09MUz0lVlMxMjBDT01OVE9PTFMlDQoraWYgIiVWU1RPT0xTJSI9PSIiIHNldCBWU1RPT0xTPSVWUzExMENPTU5UT09MUyUNCitpZiAiJVZTVE9PTFMlIj09IiIgc2V0IFZTVE9PTFM9JVZTMTAwQ09NTlRPT0xTJQ0KK2NhbGwgIiVWU1RPT0xTJS4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiICUqDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9nZXRfZXh0ZXJuYWxzLmJhdCBiL1BDYnVpbGQvZ2V0X2V4dGVybmFscy5iYXQKaW5kZXggMGI4ZjBiOC4uOWIyYTA4NCAxMDA2NDQKLS0tIGEvUENidWlsZC9nZXRfZXh0ZXJuYWxzLmJhdAorKysgYi9QQ2J1aWxkL2dldF9leHRlcm5hbHMuYmF0CkBAIC01MSwxNiArNTEsMTcgQEAKIA0KIGVjaG8uRmV0Y2hpbmcgZXh0ZXJuYWwgbGlicmFyaWVzLi4uDQogDQotZm9yICUlZSBpbiAoDQotICAgICAgICAgICAgYnppcDItMS4wLjYNCi0gICAgICAgICAgICBuYXNtLTIuMTEuMDYNCi0gICAgICAgICAgICBvcGVuc3NsLTEuMC4yZA0KLSAgICAgICAgICAgIHRjbC04LjYuMS4wDQotICAgICAgICAgICAgdGstOC42LjEuMA0KLSAgICAgICAgICAgIHRpeC04LjQuMy40DQotICAgICAgICAgICAgc3FsaXRlLTMuOC4xMS4wDQotICAgICAgICAgICAgeHotNS4wLjUNCi0gICAgICAgICAgICApIGRvICgNCitzZXQgbGlicmFyaWVzPQ0KK3NldCBsaWJyYXJpZXM9JWxpYnJhcmllcyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMi0xLjAuNg0KK2lmIE5PVCAiJUluY2x1ZGVTU0wlIj09ImZhbHNlIiBzZXQgbGlicmFyaWVzPSVsaWJyYXJpZXMlICAgICBuYXNtLTIuMTEuMDYNCitpZiBOT1QgIiVJbmNsdWRlU1NMJSI9PSJmYWxzZSIgc2V0IGxpYnJhcmllcz0lbGlicmFyaWVzJSAgICAgb3BlbnNzbC0xLjAuMmgNCitzZXQgbGlicmFyaWVzPSVsaWJyYXJpZXMlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlLTMuOC4xMS4wDQoraWYgTk9UICIlSW5jbHVkZVRraW50ZXIlIj09ImZhbHNlIiBzZXQgbGlicmFyaWVzPSVsaWJyYXJpZXMlIHRjbC1jb3JlLTguNi40LjINCitpZiBOT1QgIiVJbmNsdWRlVGtpbnRlciUiPT0iZmFsc2UiIHNldCBsaWJyYXJpZXM9JWxpYnJhcmllcyUgdGstOC42LjQuMg0KK2lmIE5PVCAiJUluY2x1ZGVUa2ludGVyJSI9PSJmYWxzZSIgc2V0IGxpYnJhcmllcz0lbGlicmFyaWVzJSB0aXgtOC40LjMuNg0KK3NldCBsaWJyYXJpZXM9JWxpYnJhcmllcyUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ei01LjAuNQ0KKw0KK2ZvciAlJWUgaW4gKCVsaWJyYXJpZXMlKSBkbyAoDQogICAgIGlmIGV4aXN0ICUlZSAoDQogICAgICAgICBlY2hvLiUlZSBhbHJlYWR5IGV4aXN0cywgc2tpcHBpbmcuDQogICAgICkgZWxzZSAoDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9pZGxlLmJhdCBiL1BDYnVpbGQvaWRsZS5iYXQKaW5kZXggNWFiMTVmNS4uYmFjYWFhOCAxMDA2NDQKLS0tIGEvUENidWlsZC9pZGxlLmJhdAorKysgYi9QQ2J1aWxkL2lkbGUuYmF0CkBAIC00LDEwICs0LDEwIEBACiByZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuDQogDQogc2V0bG9jYWwNCi1zZXQgZXhlPXB5dGhvbg0KLVBBVEggJVBBVEglOy4uXC4uXHRjbHRrXGJpbg0KK3NldCBleGU9d2luMzJccHl0aG9uDQorUEFUSCAlUEFUSCU7Li5cZXh0ZXJuYWxzXHRjbHRrXGJpbg0KIA0KLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQNCitpZiAiJTEiPT0iLWQiIChzZXQgZXhlPSVleGUlX2QpICYgc2hpZnQNCiANCiBzZXQgY21kPSVleGUlIC4uL0xpYi9pZGxlbGliL2lkbGUucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkNCiANCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2luc3RhbGxlci5ibXAgYi9QQ2J1aWxkL2luc3RhbGxlci5ibXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NzVlMTkuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9pbnN0YWxsZXIuYm1wCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvUENidWlsZC9raWxsX3B5dGhvbi5jIGIvUENidWlsZC9raWxsX3B5dGhvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjZlMWIwLi4wMDAwMDAwCi0tLSBhL1BDYnVpbGQva2lsbF9weXRob24uYworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogSGVscGVyIHByb2dyYW0gZm9yIGtpbGxpbmcgbGluZ2VyaW5nIHB5dGhvbltfZF0uZXhlIHByb2Nlc3NlcyBiZWZvcmUKLSAqIGJ1aWxkaW5nLCB0aHVzIGF0dGVtcHRpbmcgdG8gYXZvaWQgYnVpbGQgZmFpbHVyZXMgZHVlIHRvIGZpbGVzIGJlaW5nCi0gKiBsb2NrZWQuCi0gKi8KLQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDx3Y2hhci5oPgotI2luY2x1ZGUgPHRsaGVscDMyLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI3ByYWdtYSBjb21tZW50KGxpYiwgInBzYXBpIikKLQotI2lmZGVmIF9ERUJVRwotI2RlZmluZSBQWVRIT05fRVhFICAgICAgICAgIChMInB5dGhvbl9kLmV4ZSIpCi0jZGVmaW5lIFBZVEhPTl9FWEVfTEVOICAgICAgKDEyKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEUgICAgIChMImtpbGxfcHl0aG9uX2QuZXhlIikKLSNkZWZpbmUgS0lMTF9QWVRIT05fRVhFX0xFTiAoMTcpCi0jZWxzZQotI2RlZmluZSBQWVRIT05fRVhFICAgICAgICAgIChMInB5dGhvbi5leGUiKQotI2RlZmluZSBQWVRIT05fRVhFX0xFTiAgICAgICgxMCkKLSNkZWZpbmUgS0lMTF9QWVRIT05fRVhFICAgICAoTCJraWxsX3B5dGhvbi5leGUiKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEVfTEVOICgxNSkKLSNlbmRpZgotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIEhBTkRMRSAgIGhwLCBoc3AsIGhzbTsgLyogcHJvY2Vzcywgc25hcHNob3QgcHJvY2Vzc2VzLCBzbmFwc2hvdCBtb2R1bGVzICovCi0gICAgRFdPUkQgICAgZGFjLCBvdXJfcGlkOwotICAgIHNpemVfdCAgIGxlbjsKLSAgICB3Y2hhcl90ICBwYXRoW01BWF9QQVRIKzFdOwotCi0gICAgTU9EVUxFRU5UUlkzMlcgIG1lOwotICAgIFBST0NFU1NFTlRSWTMyVyBwZTsKLQotICAgIG1lLmR3U2l6ZSA9IHNpemVvZihNT0RVTEVFTlRSWTMyVyk7Ci0gICAgcGUuZHdTaXplID0gc2l6ZW9mKFBST0NFU1NFTlRSWTMyVyk7Ci0KLSAgICBtZW1zZXQocGF0aCwgMCwgTUFYX1BBVEgrMSk7Ci0KLSAgICBvdXJfcGlkID0gR2V0Q3VycmVudFByb2Nlc3NJZCgpOwotCi0gICAgaHNtID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQTU9EVUxFLCBvdXJfcGlkKTsKLSAgICBpZiAoaHNtID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIHByaW50ZigiQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90WzFdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKCFNb2R1bGUzMkZpcnN0Vyhoc20sICZtZSkpIHsKLSAgICAgICAgcHJpbnRmKCJNb2R1bGUzMkZpcnN0V1sxXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRW51bWVyYXRlIG92ZXIgdGhlIG1vZHVsZXMgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MgaW4gb3JkZXIgdG8gZmluZAotICAgICAqIGtpbGxfcHJvY2Vzc1tfZF0uZXhlLCB0aGVuIHRha2UgYSBub3RlIG9mIHRoZSBkaXJlY3RvcnkgaXQgbGl2ZXMgaW4uCi0gICAgICovCi0gICAgZG8gewotICAgICAgICBpZiAoX3djc25pY21wKG1lLnN6TW9kdWxlLCBLSUxMX1BZVEhPTl9FWEUsIEtJTExfUFlUSE9OX0VYRV9MRU4pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbGVuID0gd2Nzbmxlbl9zKG1lLnN6RXhlUGF0aCwgTUFYX1BBVEgpIC0gS0lMTF9QWVRIT05fRVhFX0xFTjsKLSAgICAgICAgd2NzbmNweV9zKHBhdGgsIE1BWF9QQVRIKzEsIG1lLnN6RXhlUGF0aCwgbGVuKTsgCi0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICB9IHdoaWxlIChNb2R1bGUzMk5leHRXKGhzbSwgJm1lKSk7Ci0KLSAgICBDbG9zZUhhbmRsZShoc20pOwotCi0gICAgaWYgKHBhdGggPT0gTlVMTCkgewotICAgICAgICBwcmludGYoImZhaWxlZCB0byBkaXNjZXJuIGRpcmVjdG9yeSBvZiBydW5uaW5nIHByb2Nlc3NcbiIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRha2UgYSBzbmFwc2hvdCBvZiBzeXN0ZW0gcHJvY2Vzc2VzLiAgRW51bWVyYXRlIG92ZXIgdGhlIHNuYXBzaG90LAotICAgICAqIGxvb2tpbmcgZm9yIHB5dGhvbiBwcm9jZXNzZXMuICBXaGVuIHdlIGZpbmQgb25lLCB2ZXJpZnkgaXQgbGl2ZXMKLSAgICAgKiBpbiB0aGUgc2FtZSBkaXJlY3Rvcnkgd2UgbGl2ZSBpbi4gIElmIGl0IGRvZXMsIGtpbGwgaXQuICBJZiB3ZSdyZQotICAgICAqIHVuYWJsZSB0byBraWxsIGl0LCB0cmVhdCB0aGlzIGFzIGEgZmF0YWwgZXJyb3IgYW5kIHJldHVybiAxLgotICAgICAqIAotICAgICAqIFRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgaXMgdGhhdCB3ZSdyZSBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSAKLSAgICAgKiBidWlsZCBwcm9jZXNzIG9uIHRoZSBiYXNpcyB0aGF0IHdlJ2xsIHRha2UgY2FyZSBvZiBraWxsaW5nIGFueQotICAgICAqIHJ1bm5pbmcgaW5zdGFuY2VzLCBzdWNoIHRoYXQgdGhlIGJ1aWxkIHdvbid0IGVuY291bnRlciBwZXJtaXNzaW9uCi0gICAgICogZGVuaWVkIGVycm9ycyBkdXJpbmcgbGlua2luZy4gSWYgd2UgY2FuJ3Qga2lsbCBvbmUgb2YgdGhlIHByb2Nlc3NlcywKLSAgICAgKiB3ZSBjYW4ndCBwcm92aWRlIHRoaXMgYXNzdXJhbmNlLCBhbmQgdGhlIGJ1aWxkIHNob3VsZG4ndCBzdGFydC4KLSAgICAgKi8KLQotICAgIGhzcCA9IENyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUFBST0NFU1MsIDApOwotICAgIGlmIChoc3AgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcHJpbnRmKCJDcmVhdGVUb29saGVscDMyU25hcHNob3RbMl0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoIVByb2Nlc3MzMkZpcnN0Vyhoc3AsICZwZSkpIHsKLSAgICAgICAgcHJpbnRmKCJQcm9jZXNzMzJGaXJzdFcgZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBkYWMgPSBQUk9DRVNTX1FVRVJZX0lORk9STUFUSU9OIHwgUFJPQ0VTU19WTV9SRUFEIHwgUFJPQ0VTU19URVJNSU5BVEU7Ci0gICAgZG8gewotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFhYWCBUT0RPOiBpZiB3ZSByZWFsbHkgd2FudGVkIHRvIGJlIGZhbmN5LCB3ZSBjb3VsZCBjaGVjayB0aGUgCi0gICAgICAgICAqIG1vZHVsZXMgZm9yIGFsbCBwcm9jZXNzZXMgKG5vdCBqdXN0IHRoZSBweXRob25bX2RdLmV4ZSBvbmVzKQotICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjM0W19kXS5kbGwpLAotICAgICAgICAgKiBhcyB0aGF0IHdvdWxkIGFsc28gaW5oaWJpdCBvdXIgYWJpbGl0eSB0byByZWJ1aWxkIHRoZSBzb2x1dGlvbi4KLSAgICAgICAgICogTm90IHdvcnRoIGxvc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sKLSAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgotICAgICAgICAgKi8KLQotICAgICAgICBpZiAoX3djc25pY21wKHBlLnN6RXhlRmlsZSwgUFlUSE9OX0VYRSwgUFlUSE9OX0VYRV9MRU4pKQotICAgICAgICAgICAgLyogVGhpcyBpc24ndCBhIHB5dGhvbiBwcm9jZXNzLiAqLwotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogSXQncyBhIHB5dGhvbiBwcm9jZXNzLCBzbyBmaWd1cmUgb3V0IHdoaWNoIGRpcmVjdG9yeSBpdCdzIGluLi4uICovCi0gICAgICAgIGhzbSA9IENyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdChUSDMyQ1NfU05BUE1PRFVMRSwgcGUudGgzMlByb2Nlc3NJRCk7Ci0gICAgICAgIGlmIChoc20gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgICAgICAvKiAKLSAgICAgICAgICAgICAqIElmIG91ciBtb2R1bGUgc25hcHNob3QgZmFpbHMgKHdoaWNoIHdpbGwgaGFwcGVuIGlmIHdlIGRvbid0IG93bgotICAgICAgICAgICAgICogdGhlIHByb2Nlc3MpLCBqdXN0IGlnbm9yZSBpdCBhbmQgY29udGludWUuICAoSXQgc2VlbXMgZGlmZmVyZW50Ci0gICAgICAgICAgICAgKiB2ZXJzaW9ucyBvZiBXaW5kb3dzIHJldHVybiBkaWZmZXJlbnQgdmFsdWVzIGZvciBHZXRMYXN0RXJyb3IoKQotICAgICAgICAgICAgICogaW4gdGhpcyBzaXR1YXRpb247IGl0J3MgZWFzaWVyIHRvIGp1c3QgaWdub3JlIGl0IGFuZCBtb3ZlIG9uIHZzLgotICAgICAgICAgICAgICogc3RvcHBpbmcgdGhlIGJ1aWxkIGZvciB3aGF0IGNvdWxkIGJlIGEgZmFsc2UgcG9zaXRpdmUuKQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFNb2R1bGUzMkZpcnN0Vyhoc20sICZtZSkpIHsKLSAgICAgICAgICAgIHByaW50ZigiTW9kdWxlMzJGaXJzdFdbMl0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChfd2NzbmljbXAobWUuc3pNb2R1bGUsIFBZVEhPTl9FWEUsIFBZVEhPTl9FWEVfTEVOKSkKLSAgICAgICAgICAgICAgICAvKiBXcm9uZyBtb2R1bGUsIHdlJ3JlIGxvb2tpbmcgZm9yIHB5dGhvbltfZF0uZXhlLi4uICovCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChfd2NzbmljbXAocGF0aCwgbWUuc3pFeGVQYXRoLCBsZW4pKQotICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgZG9lc24ndCBsaXZlIGluIG91ciBkaXJlY3RvcnkuICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8qIFB5dGhvbiBwcm9jZXNzIHJlc2lkaW5nIGluIHRoZSByaWdodCBkaXJlY3RvcnksIGtpbGwgaXQhICAqLwotICAgICAgICAgICAgaHAgPSBPcGVuUHJvY2VzcyhkYWMsIEZBTFNFLCBwZS50aDMyUHJvY2Vzc0lEKTsKLSAgICAgICAgICAgIGlmICghaHApIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIk9wZW5Qcm9jZXNzIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghVGVybWluYXRlUHJvY2VzcyhocCwgMSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlRlcm1pbmF0ZVByb2Nlc3MgZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShocCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENsb3NlSGFuZGxlKGhwKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIH0gd2hpbGUgKE1vZHVsZTMyTmV4dFcoaHNtLCAmbWUpKTsKLQotICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotCi0gICAgfSB3aGlsZSAoUHJvY2VzczMyTmV4dFcoaHNwLCAmcGUpKTsKLQotICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogdmk6IHNldCB0cz04IHN3PTQgc3RzPTQgZXhwYW5kdGFiICovCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2tpbGxfcHl0aG9uLnZjeHByb2ogYi9QQ2J1aWxkL2tpbGxfcHl0aG9uLnZjeHByb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNjdjNDAuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9raWxsX3B5dGhvbi52Y3hwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gIDwvSXRlbUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPns2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9PC9Qcm9qZWN0R3VpZD4KLSAgICA8Um9vdE5hbWVzcGFjZT5raWxsX3B5dGhvbjwvUm9vdE5hbWVzcGFjZT4KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KLSAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpJChQcm9qZWN0TmFtZSlfZC5leGU8L091dHB1dEZpbGU+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKSQoUHJvamVjdE5hbWUpX2QuZXhlPC9PdXRwdXRGaWxlPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ia2lsbF9weXRob24uYyIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9raWxsX3B5dGhvbi52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL2tpbGxfcHl0aG9uLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzZDc1MS4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkL2tpbGxfcHl0aG9uLnZjeHByb2ouZmlsdGVycworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezQ4NjA2NTkxLWM4YjYtNDFhNS05NWM1LTlhMDg5MGM1NTA0Zn08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgPC9GaWx0ZXI+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ia2lsbF9weXRob24uYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2xpYmVheS52Y3hwcm9qIGIvUENidWlsZC9saWJlYXkudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjYyY2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvUENidWlsZC9saWJlYXkudmN4cHJvagpAQCAtMCwwICsxLDkwNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdJbnN0cnVtZW50PC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHVXBkYXRlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdVcGRhdGU8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPmxpYmVheTwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgIAorICA8SW1wb3J0IFByb2plY3Q9Im9wZW5zc2wucHJvcHMiIC8+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorCisgIDxUYXJnZXQgTmFtZT0iQ3JlYXRlQnVpbGRpbmZIIiBJbnB1dHM9IiQoTVNCdWlsZFByb2plY3RGdWxsUGF0aCkiIE91dHB1dHM9IiQoSW50RGlyKVxidWlsZGluZi5oIiBBZnRlclRhcmdldHM9IlByZXBhcmVGb3JCdWlsZCI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICA8X0RBVEVWYWx1ZT4jZGVmaW5lIERBVEUgIiQoW1N5c3RlbS5EYXRlVGltZV06Ok5vdy5Ub1N0cmluZyhgZGRkIE1NTSBkZCBISCc6J21tJzonc3MgeXl5eWApKSI8L19EQVRFVmFsdWU+CisgICAgICA8X0NGTEFHU1ZhbHVlPiNkZWZpbmUgQ0ZMQUdTICJjbCAvTUQgL094IC1XMyAtR3MwIC1HeSAtbm9sb2dvIEAoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMtPictRCUoSWRlbnRpdHkpJywnICcpIjwvX0NGTEFHU1ZhbHVlPgorICAgICAgPF9QTEFURk9STVZhbHVlIENvbmRpdGlvbj0iJChQbGF0Zm9ybSk9PSdXaW4zMiciPiNkZWZpbmUgUExBVEZPUk0gIlZDLVdJTjMyIjwvX1BMQVRGT1JNVmFsdWU+CisgICAgICA8X1BMQVRGT1JNVmFsdWUgQ29uZGl0aW9uPSIkKFBsYXRmb3JtKT09J3g2NCciPiNkZWZpbmUgUExBVEZPUk0gIlZDLVdJTjY0QSI8L19QTEFURk9STVZhbHVlPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8V3JpdGVMaW5lc1RvRmlsZSBGaWxlPSIkKEludERpcilcYnVpbGRpbmYuaCIKKyAgICAgICAgICAgICAgICAgICAgICBMaW5lcz0iJChfREFURVZhbHVlKTskKF9DRkxBR1NWYWx1ZSk7JChfUExBVEZPUk1WYWx1ZSkiCisgICAgICAgICAgICAgICAgICAgICAgT3ZlcndyaXRlPSJ0cnVlIiAvPgorICAgIDxNZXNzYWdlIFRleHQ9IlVwZGF0aW5nIGJ1aWxkaW5mLmg6CisgICAgJChfREFURVZhbHVlKQorICAgICQoX0NGTEFHU1ZhbHVlKQorICAgICQoX1BMQVRGT1JNVmFsdWUpIiBJbXBvcnRhbmNlPSJub3JtYWwiIC8+CisgIDwvVGFyZ2V0PgorCisgIDxUYXJnZXQgTmFtZT0iU3VwcHJlc3NPcmlnaW5hbEJ1aWxkaW5mSCIgQ29uZGl0aW9uPSJFeGlzdHMoJyQob3BlbnNzbERpciljcnlwdG9cYnVpbGRpbmYuaCcpIiBCZWZvcmVUYXJnZXRzPSJQcmVwYXJlRm9yQnVpbGQiPgorICAgIDxNb3ZlIFNvdXJjZUZpbGVzPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJ1aWxkaW5mLmgiIERlc3RpbmF0aW9uRmlsZXM9IiQob3BlbnNzbERpciljcnlwdG9cYnVpbGRpbmYuaC5vcmlnIiAvPgorICA8L1RhcmdldD4KKworICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjdmVyc2lvbi5jIj4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoSW50RGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKyAgCisgIDxJdGVtR3JvdXA+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWFwcHNcZXJyc3RyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFlc1xhZXNfY2ZiLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFlc1xhZXNfY3RyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFlc1xhZXNfZWNiLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFlc1xhZXNfaWdlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFlc1xhZXNfbWlzYy5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYWVzXGFlc19vZmIuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYWVzXGFlc193cmFwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9iaXRzdHIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxhX2Jvb2wuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxhX2J5dGVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9kMmlfZnAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxhX2RpZ2VzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGFfZHVwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9lbnVtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9nZW50bS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGFfaTJkX2ZwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9pbnQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxhX21ic3RyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9vYmplY3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxhX29jdGV0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9wcmludC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGFfc2V0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9zaWduLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV9zdHJleC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGFfc3RybmlkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV90aW1lLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV90eXBlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYV91dGN0bS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGFfdXRmOC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGFfdmVyaWZ5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYW1ldGhfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYXNuX21pbWUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxhc25fbW9pZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGFzbl9wYWNrLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYXNuMV9lcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxhc24xX2dlbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGFzbjFfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcYXNuMV9wYXIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxiaW9fYXNuMS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGJpb19uZGVmLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcZDJpX3ByLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGQyaV9wdS5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGV2cF9hc24xLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGZfZW51bS5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXGZfaW50LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcZl9zdHJpbmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxpMmRfcHIuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcaTJkX3B1LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcbl9wa2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcbnNzZXEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxwNV9wYmUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVxwNV9wYmV2Mi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHA4X3BrZXkuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcdF9iaXRzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHRfY3JsLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcdF9wa2V5LmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHRfcmVxLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcdF9zcGtpLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcdF94NTA5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcdF94NTA5YS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHRhc25fZGVjLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcdGFzbl9lbmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx0YXNuX2ZyZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHRhc25fbmV3LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFcdGFzbl9wcm4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx0YXNuX3R5cC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHRhc25fdXRsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFceF9hbGdvci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHhfYXR0cmliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFceF9iaWdudW0uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx4X2NybC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHhfZXh0ZW4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx4X2luZm8uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx4X2xvbmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx4X25hbWUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx4X254NTA5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFceF9wa2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFceF9wdWJrZXkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx4X3JlcS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xhc24xXHhfc2lnLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFceF9zcGtpLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGFzbjFceF92YWwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx4X3g1MDkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYXNuMVx4X3g1MDlhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJmXGJmX2NmYjY0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJmXGJmX2VjYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiZlxiZl9vZmI2NC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiZlxiZl9za2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJpb1xiX2R1bXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJfcHJpbnQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJfc29jay5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiaW9cYmZfYnVmZi5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJmX25iaW8uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJmX251bGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJpb19jYi5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiaW9cYmlvX2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiaW9cYmlvX2xpYi5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJzc19hY3B0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJpb1xic3NfYmlvLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJpb1xic3NfY29ubi5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJzc19kZ3JhbS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiaW9cYnNzX2ZkLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJpb1xic3NfZmlsZS5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJzc19sb2cuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJzc19tZW0uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYmlvXGJzc19udWxsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJpb1xic3Nfc29jay5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiblxibl9hZGQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fYmxpbmQuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX2NvbnN0LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX2N0eC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fZGVwci5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiblxibl9kaXYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fZXJyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX2V4cC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiblxibl9leHAyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX2djZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiblxibl9nZjJtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX2tyb24uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX21vZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiblxibl9tb250LmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiblxibl9tcGkuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fbXVsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX25pc3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fcHJpbWUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fcHJpbnQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fcmFuZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiblxibl9yZWNwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX3NoaWZ0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX3Nxci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiblxibl9zcXJ0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX3dvcmQuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJuXGJuX3g5MzFwLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJ1ZmZlclxidWZfZXJyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJ1ZmZlclxidWZfc3RyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGJ1ZmZlclxidWZmZXIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cY2FtZWxsaWFcY21sbF9jZmIuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNhbWVsbGlhXGNtbGxfY3RyLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNhbWVsbGlhXGNtbGxfZWNiLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNhbWVsbGlhXGNtbGxfb2ZiLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNhbWVsbGlhXGNtbGxfdXRsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNhc3RcY19jZmI2NC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjYXN0XGNfZWNiLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNhc3RcY19vZmI2NC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjYXN0XGNfc2tleS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjbWFjXGNtX2FtZXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNtYWNcY21fcG1ldGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cY21hY1xjbWFjLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNtc1xjbXNfYXNuMS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjbXNcY21zX2F0dC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cY21zXGNtc19jZC5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjbXNcY21zX2RkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNtc1xjbXNfZW5jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNtc1xjbXNfZW52LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNtc1xjbXNfZXJyLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjbXNcY21zX2Vzcy5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjbXNcY21zX2lvLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNtc1xjbXNfa2FyaS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjbXNcY21zX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjbXNcY21zX3B3cmkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cY21zXGNtc19zZC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cY21zXGNtc19zbWltZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjb21wXGNfcmxlLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNvbXBcY196bGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNvbXBcY29tcF9lcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cY29tcFxjb21wX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjb25mXGNvbmZfYXBpLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNvbmZcY29uZl9kZWYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cY29uZlxjb25mX2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjb25mXGNvbmZfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNvbmZcY29uZl9tYWxsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNvbmZcY29uZl9tb2QuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNvbmZcY29uZl9zYXAuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cY3B0X2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjcnlwdGxpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNcY2JjX2Nrc20uYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xjYmNfZW5jLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xjZmJfZW5jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xjZmI2NGVkZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNcY2ZiNjRlbmMuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xkZXNfb2xkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xkZXNfb2xkMi5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNcZWNiX2VuYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNcZWNiM19lbmMuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xlZGVfY2JjbV9lbmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZGVzXGVuY19yZWFkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xlbmNfd3JpdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNcZmNyeXB0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xvZmJfZW5jLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xvZmI2NGVkZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNcb2ZiNjRlbmMuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xwY2JjX2VuYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNccXVkX2Nrc20uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZGVzXHJhbmRfa2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xyZWFkMnB3ZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNccnBjX2VuYy5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkZXNcc2V0X2tleS5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZGVzXHN0cjJrZXkuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZGVzXHhjYmNfZW5jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRoXGRoX2FtZXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRoXGRoX2FzbjEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZGhcZGhfY2hlY2suYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRoXGRoX2RlcHIuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZGhcZGhfZXJyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRoXGRoX2dlbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkaFxkaF9rZGYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZGhcZGhfa2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRoXGRoX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkaFxkaF9wbWV0aC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZGhcZGhfcHJuLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRoXGRoX3JmYzUxMTQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZHNhXGRzYV9hbWV0aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc2FcZHNhX2FzbjEuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRzYVxkc2FfZGVwci5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc2FcZHNhX2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc2FcZHNhX2dlbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc2FcZHNhX2tleS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc2FcZHNhX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc2FcZHNhX29zc2wuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZHNhXGRzYV9wbWV0aC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZHNhXGRzYV9wcm4uYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZHNhXGRzYV9zaWduLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRzYVxkc2FfdnJmLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc29cZHNvX2Jlb3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZHNvXGRzb19kbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc29cZHNvX2RsZmNuLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRzb1xkc29fZXJyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRzb1xkc29fbGliLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc29cZHNvX251bGwuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZHNvXGRzb19vcGVuc3NsLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc29cZHNvX3Ztcy5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xkc29cZHNvX3dpbjMyLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlYmNkaWMuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNfYW1ldGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNfYXNuMS5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNfY2hlY2suYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNfY3VydmUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNfY3Z0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjXGVjX2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY1xlY19rZXkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjXGVjX211bHQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNfb2N0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjXGVjX3BtZXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjXGVjX3ByaW50LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjXGVjMl9tdWx0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjXGVjMl9vY3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWMyX3NtcGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNrX3Bybi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY1xlY3BfbW9udC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY1xlY3BfbmlzdC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNwX25pc3RwMjI0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjXGVjcF9uaXN0cDI1Ni5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY1xlY3BfbmlzdHA1MjEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNcZWNwX25pc3RwdXRpbC5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY1xlY3Bfb2N0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjXGVjcF9zbXBsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjZGhcZWNoX2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY2RoXGVjaF9rZGYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNkaFxlY2hfa2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjZGhcZWNoX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY2RoXGVjaF9vc3NsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjZHNhXGVjc19hc24xLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVjZHNhXGVjc19lcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZWNkc2FcZWNzX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY2RzYVxlY3Nfb3NzbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY2RzYVxlY3Nfc2lnbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlY2RzYVxlY3NfdnJmLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVxlbmdfYWxsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVxlbmdfY25mLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlbmdpbmVcZW5nX2NyeXB0b2Rldi5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlbmdpbmVcZW5nX2N0cmwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXGVuZ19keW4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXGVuZ19lcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXGVuZ19mYXQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXGVuZ19pbml0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVxlbmdfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVxlbmdfbGlzdC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXGVuZ19vcGVuc3NsLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVxlbmdfcGtleS5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXGVuZ19yZHJhbmQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXGVuZ19yc2F4LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVxlbmdfdGFibGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXHRiX2Fzbm10aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlbmdpbmVcdGJfY2lwaGVyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVx0Yl9kaC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xlbmdpbmVcdGJfZGlnZXN0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVx0Yl9kc2EuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXHRiX2VjZGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXHRiX2VjZHNhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVuZ2luZVx0Yl9wa21ldGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXHRiX3JhbmQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXHRiX3JzYS5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZW5naW5lXHRiX3N0b3JlLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGVyclxlcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXJyXGVycl9hbGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXJyXGVycl9wcm4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGJpb19iNjQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGJpb19lbmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGJpb19tZC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGJpb19vay5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcY19hbGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGNfYWxsYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcY19hbGxkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxkaWdlc3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGVfYWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxlX2Flc19jYmNfaG1hY19zaGExLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxlX2Flc19jYmNfaG1hY19zaGEyNTYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGVfYmYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGVfY2FtZWxsaWEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGVfY2FzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZV9kZXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGVfZGVzMy5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGVfaWRlYS5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZV9udWxsLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZV9vbGQuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGVfcmMyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxlX3JjNC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZV9yYzRfaG1hY19tZDUuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxlX3JjNS5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZV9zZWVkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxlX3hjYmNfZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZW5jb2RlLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZXZwX2FjbmYuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGV2cF9jbmYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGV2cF9lbmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXGV2cF9lcnIuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxldnBfZmlwcy5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZXZwX2tleS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZXZwX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZXZwX3BiZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcZXZwX3BrZXkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXG1fZHNzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxtX2RzczEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXG1fZWNkc2EuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXG1fbWQ0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxtX21kNS5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXG1fbnVsbC5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBcbV9yaXBlbWQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXG1fc2hhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxtX3NoYTEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXG1fc2lndmVyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxtX3dwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxuYW1lcy5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXHBfZGVjLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxwX2xpYi5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXHBfb3Blbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBccF9zZWFsLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxwX3NpZ24uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXHBfdmVyaWZ5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxwNV9jcnB0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxwNV9jcnB0Mi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xldnBccG1ldGhfZm4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXZwXHBtZXRoX2duLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGV2cFxwbWV0aF9saWIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZXhfZGF0YS5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cZmlwc19lcnMuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9caG1hY1xobV9hbWV0aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xobWFjXGhtX3BtZXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGhtYWNcaG1hYy5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ca3JiNVxrcmI1X2Fzbi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xsaGFzaFxsaF9zdGF0cy5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xsaGFzaFxsaGFzaC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xtZDRcbWQ0X2Rnc3QuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG1kNFxtZDRfb25lLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG1kNVxtZDVfZGdzdC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cbWQ1XG1kNV9vbmUuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cbWVtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG1lbV9kYmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cbW9kZXNcY2JjMTI4LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG1vZGVzXGNjbTEyOC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xtb2Rlc1xjZmIxMjguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cbW9kZXNcY3RyMTI4LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG1vZGVzXGN0czEyOC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xtb2Rlc1xnY20xMjguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cbW9kZXNcb2ZiMTI4LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG1vZGVzXHdyYXAxMjguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cbW9kZXNceHRzMTI4LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG9fZGlyLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xvX2ZpcHMuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cb19pbml0LmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xvX3N0ci5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xvX3RpbWUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cb2JqZWN0c1xvX25hbWVzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG9iamVjdHNcb2JqX2RhdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xvYmplY3RzXG9ial9lcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cb2JqZWN0c1xvYmpfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG9iamVjdHNcb2JqX3hyZWYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cb2NzcFxvY3NwX2Fzbi5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cb2NzcFxvY3NwX2NsLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG9jc3Bcb2NzcF9lcnIuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG9jc3Bcb2NzcF9leHQuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cb2NzcFxvY3NwX2h0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG9jc3Bcb2NzcF9saWIuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXG9jc3Bcb2NzcF9wcm4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cb2NzcFxvY3NwX3Nydi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xvY3NwXG9jc3BfdmZ5LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBlbVxwZW1fYWxsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBlbVxwZW1fZXJyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBlbVxwZW1faW5mby5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwZW1ccGVtX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwZW1ccGVtX290aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwZW1ccGVtX3BrOC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwZW1ccGVtX3BrZXkuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBlbVxwZW1fc2VhbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwZW1ccGVtX3NpZ24uYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccGVtXHBlbV94NTA5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBlbVxwZW1feGF1eC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwZW1ccHZrZm10LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBrY3MxMlxwMTJfYWRkLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBrY3MxMlxwMTJfYXNuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBrY3MxMlxwMTJfYXR0ci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzMTJccDEyX2NycHQuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBrY3MxMlxwMTJfY3J0LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBrY3MxMlxwMTJfZGVjci5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccGtjczEyXHAxMl9pbml0LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBrY3MxMlxwMTJfa2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBrY3MxMlxwMTJfa2lzcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzMTJccDEyX211dGwuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHBrY3MxMlxwMTJfbnBhcy5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzMTJccDEyX3A4ZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzMTJccDEyX3A4ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzMTJccDEyX3V0bC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzMTJccGsxMmVyci5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccGtjczdcYmlvX3BrNy5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzN1xwazdfYXNuMS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzN1xwazdfYXR0ci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzN1xwazdfZG9pdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzN1xwazdfbGliLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzN1xwazdfbWltZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xwa2NzN1xwazdfc21pbWUuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccGtjczdccGtjczdlcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccHF1ZXVlXHBxdWV1ZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyYW5kXG1kX3JhbmQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccmFuZFxyYW5kX2VnZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyYW5kXHJhbmRfZXJyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJhbmRccmFuZF9saWIuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJhbmRccmFuZF9udy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyYW5kXHJhbmRfb3MyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJhbmRccmFuZF91bml4LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJhbmRccmFuZF93aW4uYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJhbmRccmFuZGZpbGUuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccmMyXHJjMl9jYmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccmMyXHJjMl9lY2IuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccmMyXHJjMl9za2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJjMlxyYzJjZmI2NC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyYzJccmMyb2ZiNjQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccmM0XHJjNF91dGwuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccmlwZW1kXHJtZF9kZ3N0LmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyaXBlbWRccm1kX29uZS5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyc2FccnNhX2FtZXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJzYVxyc2FfYXNuMS5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9jaGsuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9jcnB0LmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyc2FccnNhX2RlcHIuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9lYXkuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9lcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9nZW4uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9saWIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9ub25lLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyc2FccnNhX251bGwuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9vYWVwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJzYVxyc2FfcGsxLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJzYVxyc2FfcG1ldGguYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJzYVxyc2FfcHJuLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJzYVxyc2FfcHNzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHJzYVxyc2Ffc2Fvcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xyc2FccnNhX3NpZ24uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV9zc2wuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ccnNhXHJzYV94OTMxLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHNlZWRcc2VlZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xzZWVkXHNlZWRfY2JjLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHNlZWRcc2VlZF9jZmIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cc2VlZFxzZWVkX2VjYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xzZWVkXHNlZWRfb2ZiLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHNoYVxzaGFfZGdzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xzaGFcc2hhX29uZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xzaGFcc2hhMV9vbmUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cc2hhXHNoYTFkZ3N0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHNoYVxzaGEyNTYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cc2hhXHNoYTUxMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xzcnBcc3JwX2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xzcnBcc3JwX3ZmeS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xzdGFja1xzdGFjay5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cdHNcdHNfYXNuMS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x0c1x0c19jb25mLmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHRzXHRzX2Vyci5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cdHNcdHNfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHRzXHRzX3JlcV9wcmludC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x0c1x0c19yZXFfdXRpbHMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cdHNcdHNfcnNwX3ByaW50LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHRzXHRzX3JzcF9zaWduLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHRzXHRzX3JzcF91dGlscy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x0c1x0c19yc3BfdmVyaWZ5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHRzXHRzX3ZlcmlmeV9jdHguYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cdHh0X2RiXHR4dF9kYi5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cdWlcdWlfY29tcGF0LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHVpXHVpX2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x1aVx1aV9saWIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cdWlcdWlfb3BlbnNzbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x1aVx1aV91dGlsLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x1aWQuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cd2hybHBvb2xcd3BfZGdzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XGJ5X2Rpci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XGJ5X2ZpbGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOVx4X2FsbC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XHg1MDlfYXR0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOV9jbXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOVx4NTA5X2QyLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOV9kZWYuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOVx4NTA5X2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XHg1MDlfZXh0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOV9sdS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XHg1MDlfb2JqLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XHg1MDlfcjJ4LmMiIC8+CisgICAgLS0+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOV9yZXEuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOV9zZXQuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOVx4NTA5X3Rycy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XHg1MDlfdHh0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOV92My5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XHg1MDlfdmZ5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOV92cG0uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOVx4NTA5Y3NldC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5XHg1MDluYW1lLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOXJzZXQuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDlceDUwOXNwa2kuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOVx4NTA5dHlwZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNccGN5X2NhY2hlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1xwY3lfZGF0YS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNccGN5X2xpYi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNccGN5X21hcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNccGN5X25vZGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHBjeV90cmVlLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfYWRkci5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfYWtleS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfYWtleWEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHYzX2FsdC5jIiAvPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHYzX2FzaWQuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHYzX2Jjb25zLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19iaXRzdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfY29uZi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfY3BvbHMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHYzX2NybGQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHYzX2VudW0uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHYzX2V4dGt1LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19nZW5uLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19pYTUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHYzX2luZm8uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9ceDUwOXYzXHYzX2ludC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19uY29ucy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfb2NzcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfcGNpLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19wY2lhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19wY29ucy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfcGt1LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19wbWFwcy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfcHJuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19wdXJwLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19zY3RzLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19za2V5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M19zeG5ldC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1x4NTA5djNcdjNfdXRsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHg1MDl2M1x2M2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWVuZ2luZXNcY2Nnb3N0XGVfZ29zdF9lcnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGNjZ29zdFxnb3N0X2FtZXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xjY2dvc3RcZ29zdF9hc24xLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xjY2dvc3RcZ29zdF9jcnlwdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWVuZ2luZXNcY2Nnb3N0XGdvc3RfY3RsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xjY2dvc3RcZ29zdF9lbmcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGNjZ29zdFxnb3N0X2tleXdyYXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGNjZ29zdFxnb3N0X21kLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xjY2dvc3RcZ29zdF9wYXJhbXMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGNjZ29zdFxnb3N0X3BtZXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xjY2dvc3RcZ29zdF9zaWduLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xjY2dvc3RcZ29zdDIwMDEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGNjZ29zdFxnb3N0MjAwMV9rZXl4LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xjY2dvc3RcZ29zdDg5LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xjY2dvc3RcZ29zdDk0X2tleXguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGNjZ29zdFxnb3N0aGFzaC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWVuZ2luZXNcZV80NzU4Y2NhLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xlX2FlcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWVuZ2luZXNcZV9hdGFsbGEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGVfY2FwaS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWVuZ2luZXNcZV9jaGlsLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpZW5naW5lc1xlX2Nzd2lmdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWVuZ2luZXNcZV9nbXAuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGVfbnVyb24uYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcillbmdpbmVzXGVfcGFkbG9jay5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWVuZ2luZXNcZV9zdXJld2FyZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWVuZ2luZXNcZV91YnNlYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxkMV9jbG50LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXGQxX21ldGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcZDFfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXGQxX3NydnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcczJfc3J2ci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFx0MV9jbG50LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHQxX2V4dC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFx0MV9zcnZyLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwIENvbmRpdGlvbj0iJChQbGF0Zm9ybSkgPT0gJ1dpbjMyJyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXHdocmxwb29sXHdwX2Jsb2NrLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwIENvbmRpdGlvbj0iJChQbGF0Zm9ybSkgPT0gJ3g2NCciPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xiZlxiZl9lbmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpciljcnlwdG9cYm5cYm5fYXNtLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGNhbWVsbGlhXGNtbGxfbWlzYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWNyeXB0b1xjYXN0XGNfZW5jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xkZXNfZW5jLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpY3J5cHRvXGRlc1xmY3J5cHRfYi5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgICAKKyAgPEl0ZW1Hcm91cCBDb25kaXRpb249IiQoUGxhdGZvcm0pID09ICdXaW4zMiciPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJcYWVzLTU4Ni5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXAzMlxhZXNuaS14ODYuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJcYmYtNTg2LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDMyXGJuLTU4Ni5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXAzMlxjYXN0LTU4Ni5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXAzMlxjbWxsLXg4Ni5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXAzMlxjby01ODYuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJcY3J5cHQ1ODYuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJcZGVzLTU4Ni5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXAzMlxnaGFzaC14ODYuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJcbWQ1LTU4Ni5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXAzMlxyYzQtNTg2LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDMyXHJtZC01ODYuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJcc2hhMS01ODYuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJcc2hhMjU2LTU4Ni5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXAzMlxzaGE1MTItNTg2LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDMyXHZwYWVzLXg4Ni5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXAzMlx3cC1tbXguYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJceDg2Y3B1aWQuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJceDg2LWdmMm0uYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wMzJceDg2LW1vbnQuYXNtIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cCBDb25kaXRpb249IiQoUGxhdGZvcm0pID09ICd4NjQnIj4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XGFlc25pLXNoYTEteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XGFlc25pLXNoYTEteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XGFlc25pLWdjbS14ODZfNjQuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wNjRcYWVzbmktbWIteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XGFlc25pLXNoYTI1Ni14ODZfNjQuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wNjRcYWVzbmkteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XGFlcy14ODZfNjQuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wNjRcYnNhZXMteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XGNtbGwteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XGdoYXNoLXg4Nl82NC5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXA2NFxtZDUteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XHJjNC1tZDUteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XHJjNC14ODZfNjQuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wNjRcc2hhMS14ODZfNjQuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wNjRcc2hhMS1tYi14ODZfNjQuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wNjRcc2hhMjU2LW1iLXg4Nl82NC5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXA2NFxzaGEyNTYteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XHNoYTUxMi14ODZfNjQuYXNtIiAvPgorICAgIDxOYXNtQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpdG1wNjRcdnBhZXMteDg2XzY0LmFzbSIgLz4KKyAgICA8TmFzbUNvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXRtcDY0XHdwLXg4Nl82NC5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXA2NFx4ODZfNjRjcHVpZC5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXA2NFx4ODZfNjQtZ2YybS5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXA2NFx4ODZfNjQtbW9udC5hc20iIC8+CisgICAgPE5hc21Db21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcil0bXA2NFx4ODZfNjQtbW9udDUuYXNtIiAvPgorICA8L0l0ZW1Hcm91cD4KKworICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8VGFyZ2V0IE5hbWU9IkNsZWFuIiAvPgorICA8VGFyZ2V0IE5hbWU9IkNsZWFuQWxsIj4KKyAgICA8RGVsZXRlIEZpbGVzPSIkKFRhcmdldFBhdGgpIiAvPgorICAgIDxSZW1vdmVEaXIgRGlyZWN0b3JpZXM9IiQoSW50RGlyKSIgLz4KKyAgPC9UYXJnZXQ+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9tYWtlX2J1aWxkaW5mby5jIGIvUENidWlsZC9tYWtlX2J1aWxkaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWFhZGVlLi4wMDAwMDAwCi0tLSBhL1BDYnVpbGQvbWFrZV9idWlsZGluZm8uYworKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxpby5oPgotCi0jZGVmaW5lIENNRF9TSVpFIDUwMAotCi0vKiBUaGlzIGZpbGUgY3JlYXRlcyB0aGUgZ2V0YnVpbGRpbmZvLm8gb2JqZWN0LCBieSBmaXJzdAotICAgaW52b2tpbmcgc3Vid2NyZXYuZXhlIChpZiBmb3VuZCksIGFuZCB0aGVuIGludm9raW5nIGNsLmV4ZS4KLSAgIEFzIGEgc2lkZSBlZmZlY3QsIGl0IG1pZ2h0IGdlbmVyYXRlIFBDQnVpbGRcZ2V0YnVpbGRpbmZvMi5jCi0gICBhbHNvLiBJZiB0aGlzIGlzbid0IGEgc3VidmVyc2lvbiBjaGVja291dCwgb3Igc3Vid2NyZXYgaXNuJ3QKLSAgIGZvdW5kLCBpdCBjb21waWxlcyAuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotICAgSG93ZXZlciwgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCBiZSB1c2VkCi0gICBhcyBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hlcmUgYW55IGdldGJ1aWxkaW5mbzIuYyBhbmQKLSAgIGdldGJ1aWxkaW5mby5vIGZpbGVzIGFyZSBwdXQuICBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZQotICAgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGluIHBhcmFsbGVsLCB0byBhdm9pZCB0aGVtCi0gICB0cmFtcGxpbmcgZWFjaCBvdGhlcidzIGZpbGVzLgotCi0qLwotCi1pbnQgbWFrZV9idWlsZGluZm8yKGNvbnN0IGNoYXIgKnRtcHBhdGgpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRSsxXTsKLSAgICBEV09SRCB0eXBlLCBzaXplOwotICAgIGlmIChfc3RhdCgiLnN2biIsICZzdCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBBbGxvdyBzdXBwcmVzc2lvbiBvZiBzdWJ3Y3Jldi5leGUgaW52b2NhdGlvbiBpZiBhIG5vX3N1YndjcmV2IGZpbGUgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAoX3N0YXQoIm5vX3N1YndjcmV2IiwgJnN0KSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTICYmCi0gICAgICAgIFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAvKiBUb3J0b2lzZSBub3QgaW5zdGFsbGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbW1hbmRbMF0gPSAnIic7ICAvKiBxdW90ZSB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSAqLwotICAgIHNpemUgPSBzaXplb2YoY29tbWFuZCkgLSAxOwotICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaFRvcnRvaXNlLCAiRGlyZWN0b3J5IiwgMCwgJnR5cGUsIGNvbW1hbmQrMSwgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MgfHwKLSAgICAgICAgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgIC8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImJpblxcc3Vid2NyZXYuZXhlIik7Ci0gICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCi0gICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIC4uIC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyBcIiIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsgLyogcXVvdGVkIHRtcHBhdGggKi8KLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mbzIuY1wiIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgaWYgKHN5c3RlbShjb21tYW5kKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAxOwotfQotCi1jb25zdCBjaGFyIERFTElNU1tdID0geyAiIFxuIiB9OwotCi1pbnQgZ2V0X21lcmN1cmlhbF9pbmZvKGNoYXIgKiBoZ2JyYW5jaCwgY2hhciAqIGhndGFnLCBjaGFyICogaGdyZXYsIGludCBzaXplKQotewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGNoYXIgZmlsZW5hbWVbQ01EX1NJWkVdOwotICAgIGNoYXIgY21kbGluZVtDTURfU0laRV07Ci0KLSAgICBzdHJjcHlfcyhmaWxlbmFtZSwgQ01EX1NJWkUsICJ0bXBYWFhYWFgiKTsKLSAgICBpZiAoX21rdGVtcF9zKGZpbGVuYW1lLCBDTURfU0laRSkgPT0gMCkgewotICAgICAgICBpbnQgcmM7Ci0KLSAgICAgICAgc3RyY3B5X3MoY21kbGluZSwgQ01EX1NJWkUsICJoZyBpZCAtYml0ID4gIik7Ci0gICAgICAgIHN0cmNhdF9zKGNtZGxpbmUsIENNRF9TSVpFLCBmaWxlbmFtZSk7Ci0gICAgICAgIHJjID0gc3lzdGVtKGNtZGxpbmUpOwotICAgICAgICBpZiAocmMgPT0gMCkgewotICAgICAgICAgICAgRklMRSAqIGZwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZm9wZW5fcygmZnAsIGZpbGVuYW1lLCAiciIpID09IDApIHsKLSAgICAgICAgICAgICAgICBjaGFyICogY3AgPSBmZ2V0cyhjbWRsaW5lLCBDTURfU0laRSwgZnApOwotCi0gICAgICAgICAgICAgICAgaWYgKGNwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgKiBjb250ZXh0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgY2hhciAqIHRwID0gc3RydG9rX3MoY3AsIERFTElNUywgJmNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweV9zKGhncmV2LCBzaXplLCB0cCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cCA9IHN0cnRva19zKE5VTEwsIERFTElNUywgJmNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY3B5X3MoaGdicmFuY2gsIHNpemUsIHRwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cCA9IHN0cnRva19zKE5VTEwsIERFTElNUywgJmNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjcHlfcyhoZ3RhZywgc2l6ZSwgdHApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIF91bmxpbmsoZmlsZW5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCi17Ci0gICAgY2hhciBjb21tYW5kW0NNRF9TSVpFXSA9ICJjbC5leGUgLWMgLURfV0lOMzIgLURVU0VfRExfRVhQT1JUIC1EX1dJTkRPV1MgLURXSU4zMiAtRF9XSU5ETEwgIjsKLSAgICBjaGFyIHRtcHBhdGhbQ01EX1NJWkVdID0gIiI7Ci0gICAgaW50IGRvX3VubGluaywgcmVzdWx0OwotICAgIGNoYXIgKnRtcGRpciA9IE5VTEw7Ci0gICAgaWYgKGFyZ2MgPD0gMiB8fCBhcmdjID4gMykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1ha2VfYnVpbGRpbmZvICQoQ29uZmlndXJhdGlvbk5hbWUpIFt0bXBkaXJdXG4iKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZSIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiRGVidWciKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLURfREVCVUcgLU1EZCAiKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlSXRhbml1bSIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgL1VTRUNMOk1TX0lUQU5JVU0gIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUFNRDY0IikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1NRCAiKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgL1VTRUNMOk1TX09QVEVST04gIik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24gJXNcbiIsIGFyZ3ZbMV0pOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLSAgICBpZiAoYXJnYyA+IDIpIHsKLSAgICAgICAgdG1wZGlyID0gYXJndlsyXTsKLSAgICAgICAgc3RyY2F0X3ModG1wcGF0aCwgX2NvdW50b2YodG1wcGF0aCksIHRtcGRpcik7Ci0gICAgICAgIC8qIEhhY2sgZml4IGZvciBiYWQgY29tbWFuZCBsaW5lOiAgSWYgdGhlIGNvbW1hbmQgaXMgaXNzdWVkIGxpa2UgdGhpczoKLSAgICAgICAgICogJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIERlYnVnICIkKEludERpcikiCi0gICAgICAgICAqIHdlIHdpbGwgZ2V0IGEgdHJhaWxpbmcgcXVvdGUgYmVjYXVzZSBJbnREaXIgZW5kcyB3aXRoIGEgYmFja3NsYXNoIHRoYXQgdGhlbgotICAgICAgICAgKiBlc2NhcGVzIHRoZSBmaW5hbCAiLiAgVG8gc2ltcGxpZnkgdGhlIGxpZmUgZm9yIGRldmVsb3BlcnMsIGNhdGNoIHRoYXQgcHJvYmxlbQotICAgICAgICAgKiBoZXJlIGJ5IGN1dHRpbmcgaXQgb2ZmLgotICAgICAgICAgKiBUaGUgcHJvcGVyIGNvbW1hbmQgbGluZSwgYnR3IGlzOgotICAgICAgICAgKiAkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgRGVidWcgIiQoSW50RGlyKVwiCi0gICAgICAgICAqIEhvb3JheSBmb3IgY29tbWFuZCBsaW5lIHBhcnNpbmcgb24gd2luZG93cy4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChzdHJsZW4odG1wcGF0aCkgPiAwICYmIHRtcHBhdGhbc3RybGVuKHRtcHBhdGgpLTFdID09ICciJykKLSAgICAgICAgICAgIHRtcHBhdGhbc3RybGVuKHRtcHBhdGgpLTFdID0gJ1wwJzsKLSAgICAgICAgc3RyY2F0X3ModG1wcGF0aCwgX2NvdW50b2YodG1wcGF0aCksICJcXCIpOwotICAgIH0KLQotICAgIGlmICgoZG9fdW5saW5rID0gbWFrZV9idWlsZGluZm8yKHRtcHBhdGgpKSkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIik7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmNcIiAtRFNVQldDUkVWICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY2hhciBoZ3RhZ1tDTURfU0laRV07Ci0gICAgICAgIGNoYXIgaGdicmFuY2hbQ01EX1NJWkVdOwotICAgICAgICBjaGFyIGhncmV2W0NNRF9TSVpFXTsKLQotICAgICAgICBpZiAoZ2V0X21lcmN1cmlhbF9pbmZvKGhnYnJhbmNoLCBoZ3RhZywgaGdyZXYsIENNRF9TSVpFKSkgewotICAgICAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItREhHQlJBTkNIPVxcXCIiKTsKLSAgICAgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCBoZ2JyYW5jaCk7Ci0gICAgICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlxcXCIiKTsKLQotICAgICAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIgLURIR1RBRz1cXFwiIik7Ci0gICAgICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgaGd0YWcpOwotICAgICAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcXFwiIik7Ci0KLSAgICAgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiIC1ESEdWRVJTSU9OPVxcXCIiKTsKLSAgICAgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCBoZ3Jldik7Ci0gICAgICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlxcXCIgIik7Ci0gICAgICAgIH0KLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMiKTsKLSAgICB9Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIgLUZvXCIiKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8ub1wiIC1JLi5cXEluY2x1ZGUgLUkuLlxcUEMiKTsKLSAgICBwdXRzKGNvbW1hbmQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICByZXN1bHQgPSBzeXN0ZW0oY29tbWFuZCk7Ci0gICAgaWYgKGRvX3VubGluaykgewotICAgICAgICBjb21tYW5kWzBdID0gJ1wwJzsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcIiIpOwotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jXCIiKTsKLSAgICAgICAgX3VubGluayhjb21tYW5kKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QQ2J1aWxkL21ha2VfYnVpbGRpbmZvLnZjeHByb2ogYi9QQ2J1aWxkL21ha2VfYnVpbGRpbmZvLnZjeHByb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZTdmOTEuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9tYWtlX2J1aWxkaW5mby52Y3hwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gIDwvSXRlbUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9PC9Qcm9qZWN0R3VpZD4KLSAgICA8Um9vdE5hbWVzcGFjZT5tYWtlX2J1aWxkaW5mbzwvUm9vdE5hbWVzcGFjZT4KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjQwMjE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpbWFrZV9idWlsZGluZm8uZXhlPC9PdXRwdXRGaWxlPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJtYWtlX2J1aWxkaW5mby5jIiAvPgotICA8L0l0ZW1Hcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KLSAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL21ha2VfYnVpbGRpbmZvLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvbWFrZV9idWlsZGluZm8udmN4cHJvai5maWx0ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjI3ZjhjLi4wMDAwMDAwCi0tLSBhL1BDYnVpbGQvbWFrZV9idWlsZGluZm8udmN4cHJvai5maWx0ZXJzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgotICAgIDwvRmlsdGVyPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Im1ha2VfYnVpbGRpbmZvLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9tYWtlX3ZlcnNpb25pbmZvLnZjeHByb2ogYi9QQ2J1aWxkL21ha2VfdmVyc2lvbmluZm8udmN4cHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNmNTA3Yi4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkL21ha2VfdmVyc2lvbmluZm8udmN4cHJvagorKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICA8L0l0ZW1Hcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfTwvUHJvamVjdEd1aWQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+bWFrZV92ZXJzaW9uaW5mbzwvUm9vdE5hbWVzcGFjZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjQwMjE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q3VzdG9tQnVpbGRTdGVwPgotICAgICAgPE1lc3NhZ2U+QnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmg8L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD5jZCAkKFNvbHV0aW9uRGlyKQotbWFrZV92ZXJzaW9uaW5mby5leGUgJmd0OyAuLlxQQ1xweXRob25udF9yYy5oCi08L0NvbW1hbmQ+Ci0gICAgICA8T3V0cHV0cz4kKFNvbHV0aW9uRGlyKS4uXFBDXHB5dGhvbm50X3JjLmg7JShPdXRwdXRzKTwvT3V0cHV0cz4KLSAgICAgIDxJbnB1dHM+JChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZTwvSW5wdXRzPgotICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8T3V0cHV0RmlsZT4kKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm8uZXhlPC9PdXRwdXRGaWxlPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICAgIDxQb3N0QnVpbGRFdmVudCAvPgotICAgIDxQb3N0QnVpbGRFdmVudD4KLSAgICAgIDxDb21tYW5kPgotICAgICAgPC9Db21tYW5kPgotICAgIDwvUG9zdEJ1aWxkRXZlbnQ+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxDdXN0b21CdWlsZFN0ZXA+Ci0gICAgICA8TWVzc2FnZT5CdWlsZCBQQy9weXRob25udF9yYyhfZCkuaDwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPmNkICQoU29sdXRpb25EaXIpCi1tYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXFBDXHB5dGhvbm50X3JjLmgKLTwvQ29tbWFuZD4KLSAgICAgIDxPdXRwdXRzPiQoU29sdXRpb25EaXIpLi5cUENccHl0aG9ubnRfcmMuaDslKE91dHB1dHMpPC9PdXRwdXRzPgotICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mby5leGU8L091dHB1dEZpbGU+Ci0gICAgPC9MaW5rPgotICAgIDxQb3N0QnVpbGRFdmVudD4KLSAgICAgIDxDb21tYW5kPmNkICQoU29sdXRpb25EaXIpCi1tYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7IC4uXFBDXHB5dGhvbl9udC5oCi08L0NvbW1hbmQ+Ci0gICAgPC9Qb3N0QnVpbGRFdmVudD4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPEN1c3RvbUJ1aWxkU3RlcD4KLSAgICAgIDxNZXNzYWdlPkJ1aWxkIFBDL3B5dGhvbm50X3JjKF9kKS5oPC9NZXNzYWdlPgotICAgICAgPENvbW1hbmQ+Y2QgJChTb2x1dGlvbkRpcikKLW1ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlxQQ1xweXRob25udF9yY19kLmgKLTwvQ29tbWFuZD4KLSAgICAgIDxPdXRwdXRzPiQoU29sdXRpb25EaXIpLi5cUENccHl0aG9ubnRfcmNfZC5oOyUoT3V0cHV0cyk8L091dHB1dHM+Ci0gICAgICA8SW5wdXRzPiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mb19kLmV4ZTwvSW5wdXRzPgotICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+ZmFsc2U8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvX2QuZXhlPC9PdXRwdXRGaWxlPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICAgIDxQb3N0QnVpbGRFdmVudD4KLSAgICAgIDxDb21tYW5kPgotICAgICAgPC9Db21tYW5kPgotICAgIDwvUG9zdEJ1aWxkRXZlbnQ+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8Q3VzdG9tQnVpbGRTdGVwPgotICAgICAgPE1lc3NhZ2U+QnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmg8L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD5jZCAkKFNvbHV0aW9uRGlyKQotbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7IC4uXFBDXHB5dGhvbm50X3JjX2QuaAotPC9Db21tYW5kPgotICAgICAgPE91dHB1dHM+JChTb2x1dGlvbkRpcikuLlxQQ1xweXRob25udF9yY19kLmg7JShPdXRwdXRzKTwvT3V0cHV0cz4KLSAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPmZhbHNlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvX2QuZXhlPC9PdXRwdXRGaWxlPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gICAgPFBvc3RCdWlsZEV2ZW50PgotICAgICAgPENvbW1hbmQ+Y2QgJChTb2x1dGlvbkRpcikKLW1ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlxQQ1xweXRob25fbnRfZC5oCi08L0NvbW1hbmQ+Ci0gICAgPC9Qb3N0QnVpbGRFdmVudD4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcbWFrZV92ZXJzaW9uaW5mby5jIiAvPgotICA8L0l0ZW1Hcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KLSAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL21ha2VfdmVyc2lvbmluZm8udmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9tYWtlX3ZlcnNpb25pbmZvLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjMDQzNC4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkL21ha2VfdmVyc2lvbmluZm8udmN4cHJvai5maWx0ZXJzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57ZTQxODA5NTQtYzNhNS00NzQ5LWI5YTQtMzFiODA0ZWU0ZmE4fTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xtYWtlX3ZlcnNpb25pbmZvLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9vcGVuc3NsLnByb3BzIGIvUENidWlsZC9vcGVuc3NsLnByb3BzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNWMwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL29wZW5zc2wucHJvcHMKQEAgLTAsMCArMSw3NiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFB5X0ludERpciBDb25kaXRpb249IickKFB5X0ludERpciknID09ICcnIj4kKG9wZW5zc2xEaXIpdG1wXDwvUHlfSW50RGlyPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIAorICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKworICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iRFNPX1dJTjMyIiAvPgorICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBJbmNsdWRlPSJXSU4zMl9MRUFOX0FORF9NRUFOIiAvPgorICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBJbmNsdWRlPSJMX0VORElBTiIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC8+CisgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIEluY2x1ZGU9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iT1BFTlNTTF9USFJFQURTIiAvPgorICAgIDwhLS0gPFByZXByb2Nlc3NvckRlZmluaXRpb25zIEluY2x1ZGU9Ik9QRU5TU0xfU1lTTkFNRV9XSU4zMiIgLz4gLS0+CisgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIEluY2x1ZGU9Ik9QRU5TU0xfSUEzMl9TU0UyIiAvPgorICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBJbmNsdWRlPSJTSEExX0FTTSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iU0hBMjU2X0FTTSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iU0hBNTEyX0FTTSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iTUQ1X0FTTSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iQUVTX0FTTSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iVlBBRVNfQVNNIiAvPgorICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBJbmNsdWRlPSJXSElSTFBPT0xfQVNNIiAvPgorICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBJbmNsdWRlPSJHSEFTSF9BU00iIC8+CisgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIEluY2x1ZGU9Ik9QRU5TU0xfTk9fSURFQSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iT1BFTlNTTF9OT19SQzUiIC8+CisgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIEluY2x1ZGU9Ik9QRU5TU0xfTk9fTUQyIiAvPgorICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBJbmNsdWRlPSJPUEVOU1NMX05PX01EQzIiIC8+CisgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIEluY2x1ZGU9Ik9QRU5TU0xfTk9fS1JCNSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iT1BFTlNTTF9OT19KUEFLRSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iT1BFTlNTTF9OT19SRFJBTkQiIC8+CisgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIEluY2x1ZGU9Ik9QRU5TU0xfTk9fUlNBWCIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iT1BFTlNTTF9OT19EWU5BTUlDX0VOR0lORSIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXAgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknPT0nV2luMzInIj4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iT1BFTlNTTF9CTl9BU01fR0YybSIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iT1BFTlNTTF9CTl9BU01fUEFSVF9XT1JEUyIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iT1BFTlNTTF9CTl9BU01fTU9OVCIgLz4KKyAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgSW5jbHVkZT0iUk1EMTYwX0FTTSIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIAorICA8UHJvcGVydHlHcm91cD4KKyAgICA8X1ByZXByb2Nlc3NvckRlZmluaXRpb25MaXN0PkAoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9fUHJlcHJvY2Vzc29yRGVmaW5pdGlvbkxpc3Q+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8IS0tIFN1cHByZXNzIDY0LWJpdCB0cnVuY2F0aW9uIHdhcm5pbmdzIC0gdGhleSBhcmVuJ3Qgb3VycyB0byB3b3JyeSBhYm91dCAtLT4KKyAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MjQ0OzQyNjc8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChvcGVuc3NsRGlyKTskKG9wZW5zc2xJbmNsdWRlRGlyKTskKG9wZW5zc2xEaXIpY3J5cHRvOyQob3BlbnNzbERpciljcnlwdG9cYXNuMTskKG9wZW5zc2xEaXIpY3J5cHRvXGV2cDskKG9wZW5zc2xEaXIpY3J5cHRvXG1vZGVzPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPiQoX1ByZXByb2Nlc3NvckRlZmluaXRpb25MaXN0KTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgCisgIDxUYXJnZXQgTmFtZT0iRmluZE5hc20iPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgPG5hc20gQ29uZGl0aW9uPSIkKFBsYXRmb3JtKSA9PSAnV2luMzInIj5uYXNtLmV4ZSAtZiB3aW4zMjwvbmFzbT4KKyAgICAgIDxuYXNtIENvbmRpdGlvbj0iJChQbGF0Zm9ybSkgPT0gJ3g2NCciPm5hc20uZXhlIC1mIHdpbjY0IC1ETkVBUiAtT3ggLWc8L25hc20+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8L1RhcmdldD4KKworICA8VGFyZ2V0IE5hbWU9IkJ1aWxkTmFzbUZpbGVzIiBCZWZvcmVUYXJnZXRzPSJQcmVCdWlsZEV2ZW50IiBEZXBlbmRzT25UYXJnZXRzPSJQcmVwYXJlRm9yQnVpbGQ7RmluZE5hc20iIElucHV0cz0iQChOYXNtQ29tcGlsZSkiIE91dHB1dHM9IkAoTmFzbUNvbXBpbGUtPickKEludERpciklKEZpbGVuYW1lKS5vYmonKSI+CisgICAgPEV4ZWMgQ29tbWFuZD0nc2V0bG9jYWwKK3NldCBQQVRIPSQobmFzbURpcik7JVBBVEglCiskKG5hc20pIC1vICIkKEludERpciklKE5hc21Db21waWxlLkZpbGVuYW1lKS5vYmoiICIlKE5hc21Db21waWxlLkZ1bGxQYXRoKSInIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgIDxMaW5rIEluY2x1ZGU9IiQoSW50RGlyKSUoTmFzbUNvbXBpbGUuRmlsZW5hbWUpLm9iaiIgLz4KKyAgICAgIDxMaWIgSW5jbHVkZT0iJChJbnREaXIpJShOYXNtQ29tcGlsZS5GaWxlbmFtZSkub2JqIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICA8L1RhcmdldD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcGNidWlsZC5wcm9qIGIvUENidWlsZC9wY2J1aWxkLnByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyMDQzNAotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvcGNidWlsZC5wcm9qCkBAIC0wLDAgKzEsMTIyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0NDOUI5M0EyLTQzOUQtNDA1OC05RDI5LTZEQ0Y0Mzc3NDQwNX08L1Byb2plY3RHdWlkPgorICAgIDxQbGF0Zm9ybSBDb25kaXRpb249IickKFBsYXRmb3JtKScgPT0gJyciPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8Q29uZmlndXJhdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJyA9PSAnJyI+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICA8SW5jbHVkZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChJbmNsdWRlRXh0ZW5zaW9ucyknID09ICcnIj50cnVlPC9JbmNsdWRlRXh0ZW5zaW9ucz4KKyAgICA8SW5jbHVkZUV4dGVybmFscyBDb25kaXRpb249IickKEluY2x1ZGVFeHRlcm5hbHMpJyA9PSAnJyI+dHJ1ZTwvSW5jbHVkZUV4dGVybmFscz4KKyAgICA8SW5jbHVkZVRlc3RzIENvbmRpdGlvbj0iJyQoSW5jbHVkZVRlc3QpJyA9PSAnJyI+dHJ1ZTwvSW5jbHVkZVRlc3RzPgorICAgIDxJbmNsdWRlU1NMIENvbmRpdGlvbj0iJyQoSW5jbHVkZVNTTCknID09ICcnIj50cnVlPC9JbmNsdWRlU1NMPgorICAgIDxJbmNsdWRlVGtpbnRlciBDb25kaXRpb249IickKEluY2x1ZGVUa2ludGVyKScgPT0gJyciPnRydWU8L0luY2x1ZGVUa2ludGVyPgorICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPFByb2plY3RzPgorICAgICAgPFBsYXRmb3JtPiQoUGxhdGZvcm0pPC9QbGF0Zm9ybT4KKyAgICAgIDxDb25maWd1cmF0aW9uPiQoQ29uZmlndXJhdGlvbik8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UHJvcGVydGllcz48L1Byb3BlcnRpZXM+CisgICAgICA8QnVpbGRUYXJnZXQ+QnVpbGQ8L0J1aWxkVGFyZ2V0PgorICAgICAgPENsZWFuVGFyZ2V0PkNsZWFuPC9DbGVhblRhcmdldD4KKyAgICAgIDxDbGVhbkFsbFRhcmdldD5DbGVhbkFsbDwvQ2xlYW5BbGxUYXJnZXQ+CisgICAgICA8QnVpbGRJblBhcmFsbGVsPnRydWU8L0J1aWxkSW5QYXJhbGxlbD4KKyAgICA8L1Byb2plY3RzPgorICAgIDxQcm9qZWN0czI+CisgICAgICA8UGxhdGZvcm0+JChQbGF0Zm9ybSk8L1BsYXRmb3JtPgorICAgICAgPENvbmZpZ3VyYXRpb24+JChDb25maWd1cmF0aW9uKTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQcm9wZXJ0aWVzPjwvUHJvcGVydGllcz4KKyAgICAgIDxCdWlsZFRhcmdldD5CdWlsZDwvQnVpbGRUYXJnZXQ+CisgICAgICA8Q2xlYW5UYXJnZXQ+Q2xlYW48L0NsZWFuVGFyZ2V0PgorICAgICAgPENsZWFuQWxsVGFyZ2V0PkNsZWFuQWxsPC9DbGVhbkFsbFRhcmdldD4KKyAgICAgIDxCdWlsZEluUGFyYWxsZWw+dHJ1ZTwvQnVpbGRJblBhcmFsbGVsPgorICAgIDwvUHJvamVjdHMyPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPCEtLSBweXRob25YWS5kbGwgLS0+CisgICAgPCEtLQorICAgIFBhcmFsbGVsIGJ1aWxkIGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQgZm9yIHRoaXMgcHJvamVjdCBiZWNhdXNlIGl0CisgICAgY2F1c2VzIG1hbnkgY29uZmxpY3RzIGJldHdlZW4gcHl0aG9uY29yZSBhbmQgcHJvamVjdHMgdGhhdCBkZXBlbmQKKyAgICBvbiBweXRob25jb3JlLiBPbmNlIHRoZSBjb3JlIERMTCBoYXMgYmVlbiBidWlsdCwgc3Vic2VxdWVudAorICAgIHByb2plY3RzIHdpbGwgYmUgYnVpbHQgaW4gcGFyYWxsZWwuCisgICAgLS0+CisgICAgPFByb2plY3RzIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CisgICAgICA8QnVpbGRJblBhcmFsbGVsPmZhbHNlPC9CdWlsZEluUGFyYWxsZWw+CisgICAgPC9Qcm9qZWN0cz4KKyAgICA8IS0tIHB5dGhvbjMuZGxsIC0tPgorICAgIDxQcm9qZWN0cyBJbmNsdWRlPSJweXRob24zZGxsLnZjeHByb2oiIC8+CisgICAgPCEtLSBweVt3XS5leGUgLS0+CisgICAgPFByb2plY3RzIEluY2x1ZGU9InB5bGF1bmNoZXIudmN4cHJvajtweXdsYXVuY2hlci52Y3hwcm9qIiAvPgorICAgIDwhLS0gcHlzaGVsbGV4dC5kbGwgLS0+CisgICAgPFByb2plY3RzIEluY2x1ZGU9InB5c2hlbGxleHQudmN4cHJvaiIgLz4KKyAgICA8IS0tIF9mcmVlemVfaW1wb3J0bGliIC0tPgorICAgIDxQcm9qZWN0cyBJbmNsdWRlPSJfZnJlZXplX2ltcG9ydGxpYi52Y3hwcm9qIiAvPgorICAgIDwhLS0gRXh0ZW5zaW9uIG1vZHVsZXMgLS0+CisgICAgPEV4dGVuc2lvbk1vZHVsZXMgSW5jbHVkZT0iX2N0eXBlcztfZGVjaW1hbDtfZWxlbWVudHRyZWU7X21zaTtfbXVsdGlwcm9jZXNzaW5nO19vdmVybGFwcGVkO3B5ZXhwYXQ7c2VsZWN0O3VuaWNvZGVkYXRhO3dpbnNvdW5kIiAvPgorICAgIDwhLS0gRXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCByZXF1aXJlIGV4dGVybmFsIHNvdXJjZXMgLS0+CisgICAgPEV4dGVybmFsTW9kdWxlcyBJbmNsdWRlPSJfYnoyO19sem1hO19zcWxpdGUzIiAvPgorICAgIDwhLS0gX3NzbCB3aWxsIGJ1aWxkIF9zb2NrZXQgYXMgd2VsbCwgd2hpY2ggbWF5IGNhdXNlIGNvbmZsaWN0cyBpbiBwYXJhbGxlbCBidWlsZHMgLS0+CisgICAgPEV4dGVuc2lvbk1vZHVsZXMgSW5jbHVkZT0iX3NvY2tldCIgQ29uZGl0aW9uPSIhJChJbmNsdWRlU1NMKSBvciAhJChJbmNsdWRlRXh0ZXJuYWxzKSIgLz4KKyAgICA8RXh0ZXJuYWxNb2R1bGVzIEluY2x1ZGU9Il9zc2w7X2hhc2hsaWIiIENvbmRpdGlvbj0iJChJbmNsdWRlU1NMKSIgLz4KKyAgICA8RXh0ZXJuYWxNb2R1bGVzIEluY2x1ZGU9Il90a2ludGVyO3RpeCIgQ29uZGl0aW9uPSIkKEluY2x1ZGVUa2ludGVyKSIgLz4KKyAgICA8RXh0ZW5zaW9uTW9kdWxlcyBJbmNsdWRlPSJAKEV4dGVybmFsTW9kdWxlcy0+JyUoSWRlbnRpdHkpJykiIENvbmRpdGlvbj0iJChJbmNsdWRlRXh0ZXJuYWxzKSIgLz4KKyAgICA8UHJvamVjdHMgSW5jbHVkZT0iQChFeHRlbnNpb25Nb2R1bGVzLT4nJShJZGVudGl0eSkudmN4cHJvaicpIiBDb25kaXRpb249IiQoSW5jbHVkZUV4dGVuc2lvbnMpIiAvPgorICAgIDwhLS0gVGVzdCBtb2R1bGVzIC0tPgorICAgIDxUZXN0TW9kdWxlcyBJbmNsdWRlPSJfY3R5cGVzX3Rlc3Q7X3Rlc3RidWZmZXI7X3Rlc3RjYXBpO190ZXN0ZW1iZWQ7X3Rlc3RpbXBvcnRtdWx0aXBsZTtfdGVzdG11bHRpcGhhc2UiIC8+CisgICAgPFRlc3RNb2R1bGVzIEluY2x1ZGU9Inh4bGltaXRlZCIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKScgPT0gJ1JlbGVhc2UnIiAvPgorICAgIDxQcm9qZWN0cyBJbmNsdWRlPSJAKFRlc3RNb2R1bGVzLT4nJShJZGVudGl0eSkudmN4cHJvaicpIiBDb25kaXRpb249IiQoSW5jbHVkZVRlc3RzKSI+CisgICAgICA8IS0tIERpc2FibGUgcGFyYWxsZWwgYnVpbGQgZm9yIHRlc3QgbW9kdWxlcyAtLT4KKyAgICAgIDxCdWlsZEluUGFyYWxsZWw+ZmFsc2U8L0J1aWxkSW5QYXJhbGxlbD4KKyAgICA8L1Byb2plY3RzPgorICAgIAorICAgIDwhLS0gcHl0aG9uW3ddLmV4ZSAtLT4KKyAgICA8UHJvamVjdHMyIEluY2x1ZGU9InB5dGhvbi52Y3hwcm9qO3B5dGhvbncudmN4cHJvaiI+CisgICAgICA8QnVpbGRJblBhcmFsbGVsPmZhbHNlPC9CdWlsZEluUGFyYWxsZWw+CisgICAgPC9Qcm9qZWN0czI+CisgIDwvSXRlbUdyb3VwPgorCisgIDxUYXJnZXQgTmFtZT0iQnVpbGQiPgorICAgIDxNU0J1aWxkIFByb2plY3RzPSJAKFByb2plY3RzKSIKKyAgICAgICAgICAgICBQcm9wZXJ0aWVzPSJDb25maWd1cmF0aW9uPSUoQ29uZmlndXJhdGlvbik7UGxhdGZvcm09JShQbGF0Zm9ybSk7JShQcm9wZXJ0aWVzKSIKKyAgICAgICAgICAgICBCdWlsZEluUGFyYWxsZWw9IiUoQnVpbGRJblBhcmFsbGVsKSIKKyAgICAgICAgICAgICBTdG9wT25GaXJzdEZhaWx1cmU9InRydWUiCisgICAgICAgICAgICAgVGFyZ2V0cz0iJShCdWlsZFRhcmdldCkiIC8+CisgICAgPE1TQnVpbGQgUHJvamVjdHM9IkAoUHJvamVjdHMyKSIKKyAgICAgICAgICAgICBQcm9wZXJ0aWVzPSJDb25maWd1cmF0aW9uPSUoQ29uZmlndXJhdGlvbik7UGxhdGZvcm09JShQbGF0Zm9ybSk7JShQcm9wZXJ0aWVzKSIKKyAgICAgICAgICAgICBCdWlsZEluUGFyYWxsZWw9IiUoQnVpbGRJblBhcmFsbGVsKSIKKyAgICAgICAgICAgICBTdG9wT25GaXJzdEZhaWx1cmU9InRydWUiCisgICAgICAgICAgICAgVGFyZ2V0cz0iJShCdWlsZFRhcmdldCkiIC8+CisgIDwvVGFyZ2V0PgorCisgIDxUYXJnZXQgTmFtZT0iQ2xlYW4iPgorICAgIDxNU0J1aWxkIFByb2plY3RzPSJAKFByb2plY3RzMikiCisgICAgICAgICAgICAgUHJvcGVydGllcz0iQ29uZmlndXJhdGlvbj0lKENvbmZpZ3VyYXRpb24pO1BsYXRmb3JtPSUoUGxhdGZvcm0pOyUoUHJvcGVydGllcykiCisgICAgICAgICAgICAgQnVpbGRJblBhcmFsbGVsPSIlKEJ1aWxkSW5QYXJhbGxlbCkiCisgICAgICAgICAgICAgU3RvcE9uRmlyc3RGYWlsdXJlPSJmYWxzZSIKKyAgICAgICAgICAgICBDb25kaXRpb249IiUoQ2xlYW5UYXJnZXQpICE9ICcnIgorICAgICAgICAgICAgIFRhcmdldHM9IiUoQ2xlYW5UYXJnZXQpIiAvPgorICAgIDxNU0J1aWxkIFByb2plY3RzPSJAKFByb2plY3RzKSIKKyAgICAgICAgICAgICBQcm9wZXJ0aWVzPSJDb25maWd1cmF0aW9uPSUoQ29uZmlndXJhdGlvbik7UGxhdGZvcm09JShQbGF0Zm9ybSk7JShQcm9wZXJ0aWVzKSIKKyAgICAgICAgICAgICBCdWlsZEluUGFyYWxsZWw9IiUoQnVpbGRJblBhcmFsbGVsKSIKKyAgICAgICAgICAgICBTdG9wT25GaXJzdEZhaWx1cmU9ImZhbHNlIgorICAgICAgICAgICAgIENvbmRpdGlvbj0iJShDbGVhblRhcmdldCkgIT0gJyciCisgICAgICAgICAgICAgVGFyZ2V0cz0iJShDbGVhblRhcmdldCkiIC8+CisgIDwvVGFyZ2V0PgorCisgIDxUYXJnZXQgTmFtZT0iQ2xlYW5BbGwiPgorICAgIDxNU0J1aWxkIFByb2plY3RzPSJAKFByb2plY3RzMikiCisgICAgICAgICAgICAgUHJvcGVydGllcz0iQ29uZmlndXJhdGlvbj0lKENvbmZpZ3VyYXRpb24pO1BsYXRmb3JtPSUoUGxhdGZvcm0pOyUoUHJvcGVydGllcykiCisgICAgICAgICAgICAgQnVpbGRJblBhcmFsbGVsPSIlKEJ1aWxkSW5QYXJhbGxlbCkiCisgICAgICAgICAgICAgU3RvcE9uRmlyc3RGYWlsdXJlPSJmYWxzZSIKKyAgICAgICAgICAgICBDb25kaXRpb249IiUoQ2xlYW5BbGxUYXJnZXQpICE9ICcnIgorICAgICAgICAgICAgIFRhcmdldHM9IiUoQ2xlYW5BbGxUYXJnZXQpIiAvPgorICAgIDxNU0J1aWxkIFByb2plY3RzPSJAKFByb2plY3RzKSIKKyAgICAgICAgICAgICBQcm9wZXJ0aWVzPSJDb25maWd1cmF0aW9uPSUoQ29uZmlndXJhdGlvbik7UGxhdGZvcm09JShQbGF0Zm9ybSk7JShQcm9wZXJ0aWVzKSIKKyAgICAgICAgICAgICBCdWlsZEluUGFyYWxsZWw9IiUoQnVpbGRJblBhcmFsbGVsKSIKKyAgICAgICAgICAgICBTdG9wT25GaXJzdEZhaWx1cmU9ImZhbHNlIgorICAgICAgICAgICAgIENvbmRpdGlvbj0iJShDbGVhbkFsbFRhcmdldCkgIT0gJyciCisgICAgICAgICAgICAgVGFyZ2V0cz0iJShDbGVhbkFsbFRhcmdldCkiIC8+CisgIDwvVGFyZ2V0PgorCisgIDxUYXJnZXQgTmFtZT0iUmVidWlsZCIgRGVwZW5kc09uVGFyZ2V0cz0iQ2xlYW47QnVpbGQiIC8+CisgIDxUYXJnZXQgTmFtZT0iUmVidWlsZEFsbCIgRGVwZW5kc09uVGFyZ2V0cz0iQ2xlYW5BbGw7QnVpbGQiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9wY2J1aWxkLnNsbiBiL1BDYnVpbGQvcGNidWlsZC5zbG4KaW5kZXggYTM0NmUxMC4uNDJhNGQyYiAxMDA2NDQKLS0tIGEvUENidWlsZC9wY2J1aWxkLnNsbgorKysgYi9QQ2J1aWxkL3BjYnVpbGQuc2xuCkBAIC0xLDUgKzEsNyBAQAotTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTEuMDANCi0jIFZpc3VhbCBTdHVkaW8gMjAxMA0KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEyLjAwDQorIyBWaXN1YWwgU3R1ZGlvIDE0DQorVmlzdWFsU3R1ZGlvVmVyc2lvbiA9IDE0LjAuMjUxMjMuMA0KK01pbmltdW1WaXN1YWxTdHVkaW9WZXJzaW9uID0gMTAuMC40MDIxOS4xDQogUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJTb2x1dGlvbiBJdGVtcyIsICJTb2x1dGlvbiBJdGVtcyIsICJ7NTUzRUMzM0UtOTgxNi00OTk2LUE2NjAtNUQ2MTg2QTBCMEIzfSINCiAJUHJvamVjdFNlY3Rpb24oU29sdXRpb25JdGVtcykgPSBwcmVQcm9qZWN0DQogCQkuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jID0gLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYw0KQEAgLTgsMTQgKzEwLDEwIEBACiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob24iLCAicHl0aG9uLnZjeHByb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV92ZXJzaW9uaW5mbyIsICJtYWtlX3ZlcnNpb25pbmZvLnZjeHByb2oiLCAie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uY29yZSIsICJweXRob25jb3JlLnZjeHByb2oiLCAie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjeHByb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmN4cHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi1FbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3aW5zb3VuZCIsICJ3aW5zb3VuZC52Y3hwcm9qIiwgInsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9kZWNpbWFsIiwgIl9kZWNpbWFsLnZjeHByb2oiLCAiezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxN30iDQpAQCAtNTAsNyArNDgsNyBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHlleHBhdCIsICJweWV4cGF0LnZjeHByb2oiLCAie0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0iDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiYmRpc3Rfd2luaW5zdCIsICJiZGlzdF93aW5pbnN0LnZjeHByb2oiLCAie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiZGlzdF93aW5pbnN0IiwgIi4uXFBDXGJkaXN0X3dpbmluc3RcYmRpc3Rfd2luaW5zdC52Y3hwcm9qIiwgIntFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9oYXNobGliIiwgIl9oYXNobGliLnZjeHByb2oiLCAiezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0iDQogRW5kUHJvamVjdA0KQEAgLTU4LDEwICs1Niw2IEBACiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfbXVsdGlwcm9jZXNzaW5nIiwgIl9tdWx0aXByb2Nlc3NpbmcudmN4cHJvaiIsICJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSINCiBFbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2wiLCAic3NsLnZjeHByb2oiLCAie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAia2lsbF9weXRob24iLCAia2lsbF9weXRob24udmN4cHJvaiIsICJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi1FbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob24zZGxsIiwgInB5dGhvbjNkbGwudmN4cHJvaiIsICJ7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ4eGxpbWl0ZWQiLCAieHhsaW1pdGVkLnZjeHByb2oiLCAie0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0iDQpAQCAtNjksOCArNjMsMTQgQEAKIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RidWZmZXIiLCAiX3Rlc3RidWZmZXIudmN4cHJvaiIsICJ7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweWxhdW5jaGVyIiwgInB5bGF1bmNoZXIudmN4cHJvaiIsICJ7N0IyNzI3QjUtNUEzRi00MEVFLUE4NjYtNDNBMTNDRDMxNDQ2fSINCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0gPSB7MEY2RUU0QTQtQzc1Ri00NTc4LUI0QjMtMkQ2NEY0QjlCNzgyfQ0KKwlFbmRQcm9qZWN0U2VjdGlvbg0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5d2xhdW5jaGVyIiwgInB5d2xhdW5jaGVyLnZjeHByb2oiLCAiezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0iDQorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCisJCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9ID0gezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0NCisJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfZnJlZXplX2ltcG9ydGxpYiIsICJfZnJlZXplX2ltcG9ydGxpYi52Y3hwcm9qIiwgInsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9Ig0KIEVuZFByb2plY3QNCkBAIC03OCw2ICs3OCwyMCBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RlbWJlZCIsICJfdGVzdGVtYmVkLnZjeHByb2oiLCAiezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0iDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RtdWx0aXBoYXNlIiwgIl90ZXN0bXVsdGlwaGFzZS52Y3hwcm9qIiwgInsxNkJGRTZGMC0yMkVGLTQwQjUtQjgzMS03RTkzNzExOUVGMTB9Ig0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInRjbCIsICJ0Y2wudmN4cHJvaiIsICJ7QjVGRDZGMUQtMTI5RS00QkZGLTkzNDAtMDM2MDZGQUM3MjgzfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ0aXgiLCAidGl4LnZjeHByb2oiLCAie0M1QTNFN0ZCLTk2OTUtNEIyRS05NjBCLTFEOUY0M0YxRTU1NX0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidGsiLCAidGsudmN4cHJvaiIsICJ7N0U4NUVDQ0YtQTcyQy00REE0LTlFNTItODg0NTA4RTgwQkExfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJsaWJlYXkiLCAibGliZWF5LnZjeHByb2oiLCAie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsZWF5IiwgInNzbGVheS52Y3hwcm9qIiwgInsxMDYxNUIyNC03M0JGLTRFRkEtOTNBQS0yMzY5MTYzMjEzMTd9Ig0KK0VuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5c2hlbGxleHQiLCAicHlzaGVsbGV4dC52Y3hwcm9qIiwgInswRjZFRTRBNC1DNzVGLTQ1NzgtQjRCMy0yRDY0RjRCOUI3ODJ9Ig0KK0VuZFByb2plY3QNCiBHbG9iYWwNCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24NCiAJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzINCkBAIC0xMDYsMjIgKzEyMCw2IEBACiAJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTE0MiwzNCArMTQwLDE4IEBACiAJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTIyMiwxNCArMjA0LDE0IEBACiAJCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KIAkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KQEAgLTMzNCwxNCArMzE2LDE0IEBACiAJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KIAkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KQEAgLTQ0Miw3ICs0MjQsNyBAQAogCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KIAkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KQEAgLTQ5OCw0OSArNDgwLDE4IEBACiAJCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQogCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQpAQCAtNTYzLDE0ICs1MTQsMTQgQEAKIAkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0EyNjk3QkQzLTI4QzEtNEFFQy05MTA2LThCNzQ4NjM5RkQxNn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQpAQCAtNTc5LDM0ICs1MzAsMzQgQEAKIAkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQogCQl7N0IyNzI3QjUtNUEzRi00MEVFLUE4NjYtNDNBMTNDRDMxNDQ2fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQogCQl7N0IyNzI3QjUtNUEzRi00MEVFLUE4NjYtNDNBMTNDRDMxNDQ2fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7N0IyNzI3QjUtNUEzRi00MEVFLUE4NjYtNDNBMTNDRDMxNDQ2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7N0IyNzI3QjUtNUEzRi00MEVFLUE4NjYtNDNBMTNDRDMxNDQ2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7N0IyNzI3QjUtNUEzRi00MEVFLUE4NjYtNDNBMTNDRDMxNDQ2fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezdCMjcyN0I1LTVBM0YtNDBFRS1BODY2LTQzQTEzQ0QzMTQ0Nn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXs3QjI3MjdCNS01QTNGLTQwRUUtQTg2Ni00M0ExM0NEMzE0NDZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7N0IyNzI3QjUtNUEzRi00MEVFLUE4NjYtNDNBMTNDRDMxNDQ2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXsxRDRCMThEMy03QzEyLTRFQ0ItOTE3OS04NTMxRkY4NzZDRTZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQogCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCiAJCXsxRDRCMThEMy03QzEyLTRFQ0ItOTE3OS04NTMxRkY4NzZDRTZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCiAJCXsxRDRCMThEMy03QzEyLTRFQ0ItOTE3OS04NTMxRkY4NzZDRTZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxRDRCMThEMy03QzEyLTRFQ0ItOTE3OS04NTMxRkY4NzZDRTZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXsxRDRCMThEMy03QzEyLTRFQ0ItOTE3OS04NTMxRkY4NzZDRTZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXsxRDRCMThEMy03QzEyLTRFQ0ItOTE3OS04NTMxRkY4NzZDRTZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezFENEIxOEQzLTdDMTItNEVDQi05MTc5LTg1MzFGRjg3NkNFNn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXsxRDRCMThEMy03QzEyLTRFQ0ItOTE3OS04NTMxRkY4NzZDRTZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQpAQCAtNjE0LDcgKzU2NSw5IEBACiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MTlDMEMxM0YtNDdDQS00NDMyLUFGRjMtNzk5QTI5NkE0RERDfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQogCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCiAJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCkBAIC02NDUsNiArNTk4LDExNiBAQAogCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MTZCRkU2RjAtMjJFRi00MEI1LUI4MzEtN0U5MzcxMTlFRjEwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezE2QkZFNkYwLTIyRUYtNDBCNS1CODMxLTdFOTM3MTE5RUYxMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MTZCRkU2RjAtMjJFRi00MEI1LUI4MzEtN0U5MzcxMTlFRjEwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MTZCRkU2RjAtMjJFRi00MEI1LUI4MzEtN0U5MzcxMTlFRjEwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezE2QkZFNkYwLTIyRUYtNDBCNS1CODMxLTdFOTM3MTE5RUYxMH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXsxNkJGRTZGMC0yMkVGLTQwQjUtQjgzMS03RTkzNzExOUVGMTB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXsxNkJGRTZGMC0yMkVGLTQwQjUtQjgzMS03RTkzNzExOUVGMTB9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXsxNkJGRTZGMC0yMkVGLTQwQjUtQjgzMS03RTkzNzExOUVGMTB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MTZCRkU2RjAtMjJFRi00MEI1LUI4MzEtN0U5MzcxMTlFRjEwfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXsxNkJGRTZGMC0yMkVGLTQwQjUtQjgzMS03RTkzNzExOUVGMTB9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXsxNkJGRTZGMC0yMkVGLTQwQjUtQjgzMS03RTkzNzExOUVGMTB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezE2QkZFNkYwLTIyRUYtNDBCNS1CODMxLTdFOTM3MTE5RUYxMH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezE2QkZFNkYwLTIyRUYtNDBCNS1CODMxLTdFOTM3MTE5RUYxMH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXsxNkJGRTZGMC0yMkVGLTQwQjUtQjgzMS03RTkzNzExOUVGMTB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0I1RkQ2RjFELTEyOUUtNEJGRi05MzQwLTAzNjA2RkFDNzI4M30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtCNUZENkYxRC0xMjlFLTRCRkYtOTM0MC0wMzYwNkZBQzcyODN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0I1RkQ2RjFELTEyOUUtNEJGRi05MzQwLTAzNjA2RkFDNzI4M30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJe0I1RkQ2RjFELTEyOUUtNEJGRi05MzQwLTAzNjA2RkFDNzI4M30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXtCNUZENkYxRC0xMjlFLTRCRkYtOTM0MC0wMzYwNkZBQzcyODN9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QjVGRDZGMUQtMTI5RS00QkZGLTkzNDAtMDM2MDZGQUM3MjgzfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtCNUZENkYxRC0xMjlFLTRCRkYtOTM0MC0wMzYwNkZBQzcyODN9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtCNUZENkYxRC0xMjlFLTRCRkYtOTM0MC0wMzYwNkZBQzcyODN9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7QjVGRDZGMUQtMTI5RS00QkZGLTkzNDAtMDM2MDZGQUM3MjgzfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QjVGRDZGMUQtMTI5RS00QkZGLTkzNDAtMDM2MDZGQUM3MjgzfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0I1RkQ2RjFELTEyOUUtNEJGRi05MzQwLTAzNjA2RkFDNzI4M30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7QjVGRDZGMUQtMTI5RS00QkZGLTkzNDAtMDM2MDZGQUM3MjgzfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7QjVGRDZGMUQtMTI5RS00QkZGLTkzNDAtMDM2MDZGQUM3MjgzfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtCNUZENkYxRC0xMjlFLTRCRkYtOTM0MC0wMzYwNkZBQzcyODN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtCNUZENkYxRC0xMjlFLTRCRkYtOTM0MC0wMzYwNkZBQzcyODN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7QjVGRDZGMUQtMTI5RS00QkZGLTkzNDAtMDM2MDZGQUM3MjgzfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXtDNUEzRTdGQi05Njk1LTRCMkUtOTYwQi0xRDlGNDNGMUU1NTV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7QzVBM0U3RkItOTY5NS00QjJFLTk2MEItMUQ5RjQzRjFFNTU1fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXtDNUEzRTdGQi05Njk1LTRCMkUtOTYwQi0xRDlGNDNGMUU1NTV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXtDNUEzRTdGQi05Njk1LTRCMkUtOTYwQi0xRDlGNDNGMUU1NTV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7QzVBM0U3RkItOTY5NS00QjJFLTk2MEItMUQ5RjQzRjFFNTU1fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0M1QTNFN0ZCLTk2OTUtNEIyRS05NjBCLTFEOUY0M0YxRTU1NX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzVBM0U3RkItOTY5NS00QjJFLTk2MEItMUQ5RjQzRjFFNTU1fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7QzVBM0U3RkItOTY5NS00QjJFLTk2MEItMUQ5RjQzRjFFNTU1fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0M1QTNFN0ZCLTk2OTUtNEIyRS05NjBCLTFEOUY0M0YxRTU1NX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0M1QTNFN0ZCLTk2OTUtNEIyRS05NjBCLTFEOUY0M0YxRTU1NX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtDNUEzRTdGQi05Njk1LTRCMkUtOTYwQi0xRDlGNDNGMUU1NTV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0M1QTNFN0ZCLTk2OTUtNEIyRS05NjBCLTFEOUY0M0YxRTU1NX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0M1QTNFN0ZCLTk2OTUtNEIyRS05NjBCLTFEOUY0M0YxRTU1NX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzVBM0U3RkItOTY5NS00QjJFLTk2MEItMUQ5RjQzRjFFNTU1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7QzVBM0U3RkItOTY5NS00QjJFLTk2MEItMUQ5RjQzRjFFNTU1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0M1QTNFN0ZCLTk2OTUtNEIyRS05NjBCLTFEOUY0M0YxRTU1NX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7N0U4NUVDQ0YtQTcyQy00REE0LTlFNTItODg0NTA4RTgwQkExfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezdFODVFQ0NGLUE3MkMtNERBNC05RTUyLTg4NDUwOEU4MEJBMX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7N0U4NUVDQ0YtQTcyQy00REE0LTlFNTItODg0NTA4RTgwQkExfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7N0U4NUVDQ0YtQTcyQy00REE0LTlFNTItODg0NTA4RTgwQkExfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezdFODVFQ0NGLUE3MkMtNERBNC05RTUyLTg4NDUwOEU4MEJBMX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs3RTg1RUNDRi1BNzJDLTREQTQtOUU1Mi04ODQ1MDhFODBCQTF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezdFODVFQ0NGLUE3MkMtNERBNC05RTUyLTg4NDUwOEU4MEJBMX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezdFODVFQ0NGLUE3MkMtNERBNC05RTUyLTg4NDUwOEU4MEJBMX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs3RTg1RUNDRi1BNzJDLTREQTQtOUU1Mi04ODQ1MDhFODBCQTF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs3RTg1RUNDRi1BNzJDLTREQTQtOUU1Mi04ODQ1MDhFODBCQTF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7N0U4NUVDQ0YtQTcyQy00REE0LTlFNTItODg0NTA4RTgwQkExfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs3RTg1RUNDRi1BNzJDLTREQTQtOUU1Mi04ODQ1MDhFODBCQTF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs3RTg1RUNDRi1BNzJDLTREQTQtOUU1Mi04ODQ1MDhFODBCQTF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezdFODVFQ0NGLUE3MkMtNERBNC05RTUyLTg4NDUwOEU4MEJBMX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezdFODVFQ0NGLUE3MkMtNERBNC05RTUyLTg4NDUwOEU4MEJBMX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs3RTg1RUNDRi1BNzJDLTREQTQtOUU1Mi04ODQ1MDhFODBCQTF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXsxMDYxNUIyNC03M0JGLTRFRkEtOTNBQS0yMzY5MTYzMjEzMTd9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MTA2MTVCMjQtNzNCRi00RUZBLTkzQUEtMjM2OTE2MzIxMzE3fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXsxMDYxNUIyNC03M0JGLTRFRkEtOTNBQS0yMzY5MTYzMjEzMTd9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXsxMDYxNUIyNC03M0JGLTRFRkEtOTNBQS0yMzY5MTYzMjEzMTd9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MTA2MTVCMjQtNzNCRi00RUZBLTkzQUEtMjM2OTE2MzIxMzE3fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezEwNjE1QjI0LTczQkYtNEVGQS05M0FBLTIzNjkxNjMyMTMxN30uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MTA2MTVCMjQtNzNCRi00RUZBLTkzQUEtMjM2OTE2MzIxMzE3fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MTA2MTVCMjQtNzNCRi00RUZBLTkzQUEtMjM2OTE2MzIxMzE3fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezEwNjE1QjI0LTczQkYtNEVGQS05M0FBLTIzNjkxNjMyMTMxN30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezEwNjE1QjI0LTczQkYtNEVGQS05M0FBLTIzNjkxNjMyMTMxN30uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXsxMDYxNUIyNC03M0JGLTRFRkEtOTNBQS0yMzY5MTYzMjEzMTd9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezEwNjE1QjI0LTczQkYtNEVGQS05M0FBLTIzNjkxNjMyMTMxN30uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezEwNjE1QjI0LTczQkYtNEVGQS05M0FBLTIzNjkxNjMyMTMxN30uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MTA2MTVCMjQtNzNCRi00RUZBLTkzQUEtMjM2OTE2MzIxMzE3fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MTA2MTVCMjQtNzNCRi00RUZBLTkzQUEtMjM2OTE2MzIxMzE3fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezEwNjE1QjI0LTczQkYtNEVGQS05M0FBLTIzNjkxNjMyMTMxN30uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MEY2RUU0QTQtQzc1Ri00NTc4LUI0QjMtMkQ2NEY0QjlCNzgyfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MEY2RUU0QTQtQzc1Ri00NTc4LUI0QjMtMkQ2NEY0QjlCNzgyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MEY2RUU0QTQtQzc1Ri00NTc4LUI0QjMtMkQ2NEY0QjlCNzgyfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXswRjZFRTRBNC1DNzVGLTQ1NzgtQjRCMy0yRDY0RjRCOUI3ODJ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXswRjZFRTRBNC1DNzVGLTQ1NzgtQjRCMy0yRDY0RjRCOUI3ODJ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXswRjZFRTRBNC1DNzVGLTQ1NzgtQjRCMy0yRDY0RjRCOUI3ODJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezBGNkVFNEE0LUM3NUYtNDU3OC1CNEIzLTJENjRGNEI5Qjc4Mn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXswRjZFRTRBNC1DNzVGLTQ1NzgtQjRCMy0yRDY0RjRCOUI3ODJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAlFbmRHbG9iYWxTZWN0aW9uDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3BnaW5zdHJ1bWVudC5wcm9wcyBiL1BDYnVpbGQvcGdpbnN0cnVtZW50LnByb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTg0OTk1Li4wMDAwMDAwCi0tLSBhL1BDYnVpbGQvcGdpbnN0cnVtZW50LnByb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyI+Ci0gICAgPE91dERpclBHST4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pLXBnaVw8L091dERpclBHST4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPE91dERpcj4kKE91dERpclBHSSlcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLXBnaVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPmZhbHNlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8RmF2b3JTaXplT3JTcGVlZD5TaXplPC9GYXZvclNpemVPclNwZWVkPgotICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgotICAgICAgPEVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+ZmFsc2U8L0VuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+Ci0gICAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+Ci0gICAgICA8L0V4Y2VwdGlvbkhhbmRsaW5nPgotICAgICAgPEJ1ZmZlclNlY3VyaXR5Q2hlY2s+ZmFsc2U8L0J1ZmZlclNlY3VyaXR5Q2hlY2s+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPmZhbHNlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPExpbmtUaW1lQ29kZUdlbmVyYXRpb24+UEdJbnN0cnVtZW50PC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uPgotICAgICAgPFByb2ZpbGVHdWlkZWREYXRhYmFzZT4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pLXBnaVwkKFRhcmdldE5hbWUpLnBnZDwvUHJvZmlsZUd1aWRlZERhdGFiYXNlPgotICAgICAgPEltcG9ydExpYnJhcnk+JChPdXREaXJQR0kpXCQoVGFyZ2V0TmFtZSkubGliPC9JbXBvcnRMaWJyYXJ5PgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxCdWlsZE1hY3JvIEluY2x1ZGU9Ik91dERpclBHSSI+Ci0gICAgICA8VmFsdWU+JChPdXREaXJQR0kpPC9WYWx1ZT4KLSAgICA8L0J1aWxkTWFjcm8+Ci0gIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9wZ3VwZGF0ZS5wcm9wcyBiL1BDYnVpbGQvcGd1cGRhdGUucHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NzVhMDIuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9wZ3VwZGF0ZS5wcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFNvbHV0aW9uRGlyKVxwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnb1w8L091dERpcj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsTWFuaWZlc3REZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsTWFuaWZlc3REZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsTWFuaWZlc3REZXBlbmRlbmNpZXM+Ci0gICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbj5QR1VwZGF0ZTwvTGlua1RpbWVDb2RlR2VuZXJhdGlvbj4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSkubGliPC9JbXBvcnRMaWJyYXJ5PgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHJlcGFyZV9zc2wuYmF0IGIvUENidWlsZC9wcmVwYXJlX3NzbC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlNzNlNgotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvcHJlcGFyZV9zc2wuYmF0CkBAIC0wLDAgKzEsMTIgQEAKK0BlY2hvIG9mZg0KK2lmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgNCisgIGlmICIlMSIgRVFVICJEZWJ1ZyIgKA0KKyAgICBzaGlmdA0KKyAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uX2QuZXhlDQorICAgIGlmIG5vdCBleGlzdCBweXRob24zNV9kLmRsbCBleGl0IDENCisgICkgRUxTRSAoDQorICAgIHNldCBIT1NUX1BZVEhPTj1weXRob24uZXhlDQorICAgIGlmIG5vdCBleGlzdCBweXRob24zNS5kbGwgZXhpdCAxDQorICApDQorKQ0KKyVIT1NUX1BZVEhPTiUgIiV+ZHAwcHJlcGFyZV9zc2wucHkiICUxDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9wcmVwYXJlX3NzbC5weSBiL1BDYnVpbGQvcHJlcGFyZV9zc2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxNzBmNQotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvcHJlcGFyZV9zc2wucHkKQEAgLTAsMCArMSwxOTYgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24zCisjIFNjcmlwdCBmb3IgcHJlcGFyaW5nIE9wZW5TU0wgZm9yIGJ1aWxkaW5nIG9uIFdpbmRvd3MuCisjIFVzZXMgUGVybCB0byBjcmVhdGUgbm1ha2UgbWFrZWZpbGVzIGFuZCBvdGhlcndpc2UgcHJlcGFyZSB0aGUgd2F5CisjIGZvciBidWlsZGluZyBvbiAzMiBvciA2NCBiaXQgcGxhdGZvcm1zLgorCisjIFNjcmlwdCBvcmlnaW5hbGx5IGF1dGhvcmVkIGJ5IE1hcmsgSGFtbW9uZC4KKyMgTWFqb3IgcmV2aXNpb25zIGJ5OgorIyAgIE1hcnRpbiB2LiBMw7Z3aXMKKyMgICBDaHJpc3RpYW4gSGVpbWVzCisjICAgWmFjaGFyeSBXYXJlCisKKyMgVEhFT1JFVElDQUxMWSwgeW91IGNhbjoKKyMgKiBVbnBhY2sgdGhlIGxhdGVzdCBPcGVuU1NMIHJlbGVhc2Ugd2hlcmUgJChvcGVuc3NsRGlyKSBpbgorIyAgIFBDYnVpbGRccHlwcm9qZWN0LnByb3BzIGV4cGVjdHMgaXQgdG8gYmUuCisjICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KKyMgKiBSdW4gdGhpcyBzY3JpcHQgd2l0aCB0aGUgT3BlblNTTCBzb3VyY2UgZGlyIGFzIHRoZSBvbmx5IGFyZ3VtZW50LgorIworIyBpdCBzaG91bGQgY29uZmlndXJlIE9wZW5TU0wgc3VjaCB0aGF0IGl0IGlzIHJlYWR5IHRvIGJlIGJ1aWx0IGJ5CisjIHNzbC52Y3hwcm9qIG9uIDMyIG9yIDY0IGJpdCBwbGF0Zm9ybXMuCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBzaHV0aWwgaW1wb3J0IGNvcHkKKworIyBGaW5kIGFsbCAiZm9vLmV4ZSIgZmlsZXMgb24gdGhlIFBBVEguCitkZWYgZmluZF9hbGxfb25fcGF0aChmaWxlbmFtZSwgZXh0cmFzPU5vbmUpOgorICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKKyAgICByZXQgPSBbXQorICAgIGZvciBwIGluIGVudHJpZXM6CisgICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKKyAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCisgICAgaWYgZXh0cmFzOgorICAgICAgICBmb3IgcCBpbiBleHRyYXM6CisgICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgorICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCisgICAgcmV0dXJuIHJldAorCisKKyMgRmluZCBhIHN1aXRhYmxlIFBlcmwgaW5zdGFsbGF0aW9uIGZvciBPcGVuU1NMLgorIyBjeWd3aW4gcGVybCBkb2VzICpub3QqIHdvcmsuICBBY3RpdmVQZXJsIGRvZXMuCisjIEJlaW5nIGEgUGVybCBkdW1teSwgdGhlIHNpbXBsZXN0IHdheSBJIGNhbiBjaGVjayBpcyBpZiB0aGUgIldpbjMyIiBwYWNrYWdlCisjIGlzIGF2YWlsYWJsZS4KK2RlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6CisgICAgZm9yIHBlcmwgaW4gcGVybHM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtwZXJsLCAiLWUiLCAidXNlIFdpbjMyOyJdKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHBlcmwKKworICAgIGlmIHBlcmxzOgorICAgICAgICBwcmludCgiVGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIpCisgICAgICAgIGZvciBwIGluIHBlcmxzOgorICAgICAgICAgICAgcHJpbnQoIiAiLCBwKQorICAgICAgICBwcmludCgiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIikKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCisgICAgcHJpbnQoIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiKQorCisKK2RlZiBjcmVhdGVfYXNtcyhtYWtlZmlsZSwgdG1wX2QpOgorICAgICNjcmVhdGUgYSBjdXN0b20gbWFrZWZpbGUgb3V0IG9mIHRoZSBwcm92aWRlZCBvbmUKKyAgICBhc21fbWFrZWZpbGUgPSBvcy5wYXRoLnNwbGl0ZXh0KG1ha2VmaWxlKVswXSArICcuYXNtLm1haycKKyAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbiwgb3Blbihhc21fbWFrZWZpbGUsICd3JykgYXMgZm91dDoKKyAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgIyBLZWVwIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGluc3RhbGwgdGFyZ2V0IChpdCdzIGNvbnZlbmllbnQpCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ2luc3RhbGw6IGFsbCcpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCisgICAgICAgIGFzbXMgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICBpZiAnLmFzbScgaW4gbGluZSBhbmQgbGluZS5zdHJpcCgpLmVuZHN3aXRoKCcucGwnKToKKyAgICAgICAgICAgICAgICBhc21zLmFwcGVuZChsaW5lLnNwbGl0KCc6JylbMF0pCisgICAgICAgICAgICAgICAgd2hpbGUgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBuZXh0KGZpbikKKyAgICAgICAgICAgICAgICBmb3V0LndyaXRlKCdcbicpCisKKyAgICAgICAgZm91dC53cml0ZSgnYXNtczogJChUTVBfRCkgJykKKyAgICAgICAgZm91dC53cml0ZSgnICcuam9pbihhc21zKSkKKyAgICAgICAgZm91dC53cml0ZSgnXG4nKQorICAgIG9zLnN5c3RlbSgnbm1ha2UgL2Yge30gUEVSTD1wZXJsIFRNUF9EPXt9IGFzbXMnLmZvcm1hdChhc21fbWFrZWZpbGUsIHRtcF9kKSkKKworCitkZWYgY29weV9pbmNsdWRlcyhtYWtlZmlsZSwgc3VmZml4KToKKyAgICBkaXIgPSAnaW5jbHVkZScrc3VmZml4KydcXG9wZW5zc2wnCisgICAgb3MubWFrZWRpcnMoZGlyLCBleGlzdF9vaz1UcnVlKQorICAgIGNvcHlfaWZfZGlmZmVyZW50ID0gcickKFBFUkwpICQoU1JDX0QpXHV0aWxcY29weS1pZi1kaWZmZXJlbnQucGwnCisgICAgd2l0aCBvcGVuKG1ha2VmaWxlKSBhcyBmaW46CisgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgIGlmIGNvcHlfaWZfZGlmZmVyZW50IGluIGxpbmU6CisgICAgICAgICAgICAgICAgcGVybCwgc2NyaXB0LCBzcmMsIGRlc3QgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBub3QgJyQoSU5DT19EKScgaW4gZGVzdDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIFdlJ3JlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZQorICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5yZXBsYWNlKCckKFNSQ19EKScsICcuJykuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgIGRlc3QgPSBkZXN0LnN0cmlwKCciJykucmVwbGFjZSgnJChJTkNPX0QpJywgZGlyKQorICAgICAgICAgICAgICAgIHByaW50KCdjb3B5aW5nJywgc3JjLCAndG8nLCBkZXN0KQorICAgICAgICAgICAgICAgIGNvcHkoc3JjLCBkZXN0KQorCisKK2RlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKKyAgICBwcmludCgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQorICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQorICAgIHByaW50KGRvX3NjcmlwdCkKKyAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQorCisKK2RlZiBwcmVwKGFyY2gpOgorICAgIG1ha2VmaWxlX3RlbXBsYXRlID0gIm1zXFxudHt9Lm1hayIKKyAgICBnZW5lcmF0ZWRfbWFrZWZpbGUgPSBtYWtlZmlsZV90ZW1wbGF0ZS5mb3JtYXQoJycpCisgICAgaWYgYXJjaCA9PSAieDg2IjoKKyAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgorICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCisgICAgICAgIHN1ZmZpeCA9ICIzMiIKKyAgICBlbGlmIGFyY2ggPT0gImFtZDY0IjoKKyAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjY0QSIKKyAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb193aW42NGEiCisgICAgICAgIHN1ZmZpeCA9ICI2NCIKKyAgICAgICAgI29zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5yZWNvZ25pemVkIHBsYXRmb3JtOiAlcycgJSBhcmNoKQorCisgICAgcHJpbnQoIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iKQorICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICMgcnVuIGNvbmZpZ3VyZSwgY29weSBpbmNsdWRlcywgY3JlYXRlIGFzbXMKKyAgICBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KQorICAgIG1ha2VmaWxlID0gbWFrZWZpbGVfdGVtcGxhdGUuZm9ybWF0KHN1ZmZpeCkKKyAgICB0cnk6CisgICAgICAgIG9zLnVubGluayhtYWtlZmlsZSkKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBvcy5yZW5hbWUoZ2VuZXJhdGVkX21ha2VmaWxlLCBtYWtlZmlsZSkKKyAgICBjb3B5X2luY2x1ZGVzKG1ha2VmaWxlLCBzdWZmaXgpCisKKyAgICBwcmludCgnY3JlYXRpbmcgYXNtcy4uLicpCisgICAgY3JlYXRlX2FzbXMobWFrZWZpbGUsICd0bXAnK3N1ZmZpeCkKKworCitkZWYgbWFpbigpOgorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMToKKyAgICAgICAgcHJpbnQoIk5vdCBlbm91Z2ggYXJndW1lbnRzOiBkaXJlY3RvcnkgY29udGFpbmluZyBPcGVuU1NMIiwKKyAgICAgICAgICAgICAgInNvdXJjZXMgbXVzdCBiZSBzdXBwbGllZCIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMjoKKyAgICAgICAgcHJpbnQoIlRvbyBtYW55IGFyZ3VtZW50cyBzdXBwbGllZCwgYWxsIHdlIG5lZWQgaXMgdGhlIGRpcmVjdG9yeSIsCisgICAgICAgICAgICAgICJjb250YWluaW5nIE9wZW5TU0wgc291cmNlcyIpCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBzc2xfZGlyID0gc3lzLmFyZ3ZbMV0KKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNzbF9kaXIpOgorICAgICAgICBwcmludChzc2xfZGlyLCAiaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeSEiKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgIyBwZXJsIHNob3VsZCBiZSBvbiB0aGUgcGF0aCwgYnV0IHdlIGFsc28gbG9vayBpbiAiXHBlcmwiIGFuZCAiYzpcXHBlcmwiCisgICAgIyBhcyAid2VsbCBrbm93biIgbG9jYXRpb25zCisgICAgcGVybHMgPSBmaW5kX2FsbF9vbl9wYXRoKCJwZXJsLmV4ZSIsIFtyIlxwZXJsXGJpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIkM6XHBlcmxcYmluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXHBlcmw2NFxiaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJDOlxwZXJsNjRcYmluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCisgICAgaWYgcGVybDoKKyAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKKyAgICBlbHNlOgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIGlmIG5vdCBmaW5kX2FsbF9vbl9wYXRoKCdubWFrZS5leGUnKToKKyAgICAgICAgcHJpbnQoJ0NvdWxkIG5vdCBmaW5kIG5tYWtlLmV4ZSwgdHJ5IHJ1bm5pbmcgZW52LmJhdCcpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgaWYgbm90IGZpbmRfYWxsX29uX3BhdGgoJ25hc20uZXhlJyk6CisgICAgICAgIHByaW50KCdDb3VsZCBub3QgZmluZCBuYXNtLmV4ZSwgcGxlYXNlIGFkZCB0byBQQVRIJykKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgICMgUHV0IG91ciB3b3JraW5nIFBlcmwgYXQgdGhlIGZyb250IG9mIG91ciBwYXRoCisgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoc2VwICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0KKworICAgIG9sZF9jd2QgPSBvcy5nZXRjd2QoKQorICAgIHRyeToKKyAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKKyAgICAgICAgZm9yIGFyY2ggaW4gWydhbWQ2NCcsICd4ODYnXToKKyAgICAgICAgICAgIHByZXAoYXJjaCkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihvbGRfY3dkKQorCitpZiBfX25hbWVfXz09J19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHlkLnByb3BzIGIvUENidWlsZC9weWQucHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OTk2NmUuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9weWQucHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxHZW5lcmF0ZU1hbmlmZXN0PmZhbHNlPC9HZW5lcmF0ZU1hbmlmZXN0PgotICAgIDxFbWJlZE1hbmlmZXN0PmZhbHNlPC9FbWJlZE1hbmlmZXN0PgotICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UHlfQlVJTERfQ09SRV9NT0RVTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgIDwvTGluaz4KLSAgICA8UG9zdEJ1aWxkRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4KLSAgICAgIDwvQ29tbWFuZD4KLSAgICA8L1Bvc3RCdWlsZEV2ZW50PgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weWRfZC5wcm9wcyBiL1BDYnVpbGQvcHlkX2QucHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMjMyODguLjAwMDAwMDAKLS0tIGEvUENidWlsZC9weWRfZC5wcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+Ci0gICAgPEdlbmVyYXRlTWFuaWZlc3Q+ZmFsc2U8L0dlbmVyYXRlTWFuaWZlc3Q+Ci0gICAgPEVtYmVkTWFuaWZlc3Q+ZmFsc2U8L0VtYmVkTWFuaWZlc3Q+Ci0gICAgPFRhcmdldEV4dD4ucHlkPC9UYXJnZXRFeHQ+Ci0gICAgPFRhcmdldE5hbWU+JChQcm9qZWN0TmFtZSlfZDwvVGFyZ2V0TmFtZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkRlZmF1bHQ8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz5mYWxzZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlB5X0JVSUxEX0NPUkVfTU9EVUxFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rIC8+Ci0gICAgPFBvc3RCdWlsZEV2ZW50PgotICAgICAgPENvbW1hbmQ+Ci0gICAgICA8L0NvbW1hbmQ+Ci0gICAgPC9Qb3N0QnVpbGRFdmVudD4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbUdyb3VwIC8+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weWV4cGF0LnZjeHByb2ogYi9QQ2J1aWxkL3B5ZXhwYXQudmN4cHJvagppbmRleCA5NzRmZDNkLi45OWM3Mjg2IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5ZXhwYXQudmN4cHJvagorKysgYi9QQ2J1aWxkL3B5ZXhwYXQudmN4cHJvagpAQCAtMzUsMTg2ICszNSwzMyBAQAogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgIDwvSXRlbUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgogICAgIDxQcm9qZWN0R3VpZD57RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfTwvUHJvamVjdEd1aWQ+CiAgICAgPFJvb3ROYW1lc3BhY2U+cHlleHBhdDwvUm9vdE5hbWVzcGFjZT4KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGFyZ2V0RXh0Pi5weWQ8L1RhcmdldEV4dD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgotICA8UHJvcGVydHlHcm91cD4KLSAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi5cLi5cTW9kdWxlc1xleHBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChQeVNvdXJjZVBhdGgpTW9kdWxlc1xleHBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgogICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+LlwuLlxNb2R1bGVzXGV4cGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+LlwuLlxNb2R1bGVzXGV4cGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi5cLi5cTW9kdWxlc1xleHBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+LlwuLlxNb2R1bGVzXGV4cGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+LlwuLlxNb2R1bGVzXGV4cGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+LlwuLlxNb2R1bGVzXGV4cGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uXC4uXE1vZHVsZXNcZXhwYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5QWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suaCIgLz4KQEAgLTIyNiw2ICs3Myw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHlsYXVuY2hlci52Y3hwcm9qIGIvUENidWlsZC9weWxhdW5jaGVyLnZjeHByb2oKaW5kZXggOWZhOTNkZC4uMmQ0YjVmNiAxMDA2NDQKLS0tIGEvUENidWlsZC9weWxhdW5jaGVyLnZjeHByb2oKKysrIGIvUENidWlsZC9weWxhdW5jaGVyLnZjeHByb2oKQEAgLTM3LDI1NiArMzcsMzIgQEAKICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgogICAgIDxQcm9qZWN0R3VpZD57N0IyNzI3QjUtNUEzRi00MEVFLUE4NjYtNDNBMTNDRDMxNDQ2fTwvUHJvamVjdEd1aWQ+CiAgICAgPFJvb3ROYW1lc3BhY2U+cHlsYXVuY2hlcjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8VGFyZ2V0TmFtZT5weTwvVGFyZ2V0TmFtZT4KKyAgICA8U3VwcG9ydFBHTz5mYWxzZTwvU3VwcG9ydFBHTz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPE1ha2VWZXJzaW9uSW5mb0JlZm9yZVRhcmdldD5DbENvbXBpbGU8L01ha2VWZXJzaW9uSW5mb0JlZm9yZVRhcmdldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPFRhcmdldE5hbWU+cHlfZDwvVGFyZ2V0TmFtZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgotICAgIDxUYXJnZXROYW1lPnB5X2Q8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPFRhcmdldE5hbWU+cHk8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxUYXJnZXROYW1lPnB5PC9UYXJnZXROYW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPFRhcmdldE5hbWU+cHk8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxUYXJnZXROYW1lPnB5PC9UYXJnZXROYW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPFRhcmdldE5hbWU+cHk8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPFRhcmdldE5hbWU+cHk8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KICAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpJChUYXJnZXROYW1lKSQoVGFyZ2V0RXh0KTwvT3V0cHV0RmlsZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpJChUYXJnZXROYW1lKSQoVGFyZ2V0RXh0KTwvT3V0cHV0RmlsZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTtOREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5hYmxlQ09NREFURm9sZGluZz5mYWxzZTwvRW5hYmxlQ09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgotICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz52ZXJzaW9uLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DT05TT0xFO05ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPmZhbHNlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DT05TT0xFO05ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPmZhbHNlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+ZmFsc2U8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+dmVyc2lvbi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+ZmFsc2U8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICAgIDxJZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPmZhbHNlPC9JZ25vcmVBbGxEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+dmVyc2lvbi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DT05TT0xFO05ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPmZhbHNlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KICAgICA8L0xpbms+CkBAIC0zMDAsMTEgKzc2LDYgQEAKICAgPEl0ZW1Hcm91cD4KICAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5bGF1bmNoZXIucmMiIC8+CiAgIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1ha2VfdmVyc2lvbmluZm8udmN4cHJvaiI+Ci0gICAgICA8UHJvamVjdD57ZjBlMDU0MWUtZjE3ZC00MzBiLTk3YzQtOTNhZGYwZGQyODRlfTwvUHJvamVjdD4KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+Ci0gIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXByb2plY3QucHJvcHMgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwppbmRleCAwMzQxMzY4Li5kMWFjOTk4IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcworKysgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwpAQCAtMSw0OCArMSw1NSBAQAog77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKFBsYXRmb3JtKSc9PSdXaW4zMiciPgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyIgVHJlYXRBc0xvY2FsUHJvcGVydHk9IlB5X0ludERpciI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKTwvT3V0RGlyPgotICAgIDxJbnREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb24pXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgotICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPiAgCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoUGxhdGZvcm0pJz09J3g2NCciPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8X1Byb3BlcnR5U2hlZXREaXNwbGF5TmFtZT5hbWQ2NDwvX1Byb3BlcnR5U2hlZXREaXNwbGF5TmFtZT4KLSAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpYW1kNjRcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPFZpc3VhbFN0dWRpb1ZlcnNpb24gQ29uZGl0aW9uPSInJChWaXN1YWxTdHVkaW9WZXJzaW9uKScgPT0gJyciPjEwLjA8L1Zpc3VhbFN0dWRpb1ZlcnNpb24+CisgICAgPE91dERpcj4kKEJ1aWxkUGF0aCk8L091dERpcj4KKyAgICA8T3V0RGlyIENvbmRpdGlvbj0iIUhhc1RyYWlsaW5nU2xhc2goJChPdXREaXIpKSI+JChPdXREaXIpXDwvT3V0RGlyPgorICAgIDxQeV9JbnREaXIgQ29uZGl0aW9uPSInJChQeV9JbnREaXIpJyA9PSAnJyI+JChNU0J1aWxkVGhpc0ZpbGVEaXJlY3Rvcnkpb2JqXDwvUHlfSW50RGlyPgorICAgIDxJbnREaXI+JChQeV9JbnREaXIpXCQoQXJjaE5hbWUpXyQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CisgICAgPEludERpciBDb25kaXRpb249IiQoQ29uZmlndXJhdGlvbikgPT0gJ1BHSW5zdHJ1bWVudCcgb3IgJChDb25maWd1cmF0aW9uKSA9PSAnUEdVcGRhdGUnIj4kKFB5X0ludERpcilcJChBcmNoTmFtZSlfUEdPXCQoUHJvamVjdE5hbWUpXDwvSW50RGlyPgorICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoVGFyZ2V0TmFtZSknID09ICcnIj4kKFByb2plY3ROYW1lKTwvVGFyZ2V0TmFtZT4KKyAgICA8VGFyZ2V0TmFtZT4kKFRhcmdldE5hbWUpJChQeURlYnVnRXh0KTwvVGFyZ2V0TmFtZT4KKyAgICA8R2VuZXJhdGVNYW5pZmVzdD5mYWxzZTwvR2VuZXJhdGVNYW5pZmVzdD4KKyAgICA8RW1iZWRNYW5pZmVzdD5mYWxzZTwvRW1iZWRNYW5pZmVzdD4KKyAgICA8U3VwcG9ydFBHTyBDb25kaXRpb249IickKFN1cHBvcnRQR08pJyA9PSAnJyI+dHJ1ZTwvU3VwcG9ydFBHTz4KKyAgICA8U3VwcG9ydFNpZ25pbmcgQ29uZGl0aW9uPSInJChTdXBwb3J0U2lnbmluZyknID09ICcnIj50cnVlPC9TdXBwb3J0U2lnbmluZz4KKyAgICA8U3VwcG9ydFNpZ25pbmcgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKScgPT0gJ0RlYnVnJyI+ZmFsc2U8L1N1cHBvcnRTaWduaW5nPgorICAgIDxTdXBwb3J0U2lnbmluZyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb25UeXBlKScgPT0gJ1N0YXRpY0xpYnJhcnknIj5mYWxzZTwvU3VwcG9ydFNpZ25pbmc+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiPgotICAgIDxQeURsbE5hbWU+cHl0aG9uMzQkKFB5RGVidWdFeHQpPC9QeURsbE5hbWU+Ci0gICAgPFB5dGhvbkV4ZT4kKE91dERpcilweXRob24kKFB5RGVidWdFeHQpLmV4ZTwvUHl0aG9uRXhlPgotICAgIDxLaWxsUHl0aG9uRXhlPiQoT3V0RGlyKWtpbGxfcHl0aG9uJChQeURlYnVnRXh0KS5leGU8L0tpbGxQeXRob25FeGU+Ci0gICAgPGV4dGVybmFsc0Rpcj4uLlxleHRlcm5hbHM8L2V4dGVybmFsc0Rpcj4KLSAgICA8c3FsaXRlM0Rpcj4kKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuOC4xMS4wPC9zcWxpdGUzRGlyPgotICAgIDxiejJEaXI+JChleHRlcm5hbHNEaXIpXGJ6aXAyLTEuMC42PC9iejJEaXI+Ci0gICAgPGx6bWFEaXI+JChleHRlcm5hbHNEaXIpXHh6LTUuMC41PC9sem1hRGlyPgotICAgIDxvcGVuc3NsRGlyPiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4yZDwvb3BlbnNzbERpcj4KLSAgICA8dGNsdGtEaXI+JChleHRlcm5hbHNEaXIpXHRjbHRrPC90Y2x0a0Rpcj4KLSAgICA8dGNsdGs2NERpcj4kKGV4dGVybmFsc0RpcilcdGNsdGs2NDwvdGNsdGs2NERpcj4KLSAgICA8dGNsdGtMaWI+JCh0Y2x0a0RpcilcbGliXHRjbDg2dC5saWI7JCh0Y2x0a0RpcilcbGliXHRrODZ0LmxpYjwvdGNsdGtMaWI+Ci0gICAgPHRjbHRrTGliRGVidWc+JCh0Y2x0a0RpcilcbGliXHRjbDg2dGcubGliOyQodGNsdGtEaXIpXGxpYlx0azg2dGcubGliPC90Y2x0a0xpYkRlYnVnPgotICAgIDx0Y2x0azY0TGliPiQodGNsdGs2NERpcilcbGliXHRjbDg2dC5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NnQubGliPC90Y2x0azY0TGliPgotICAgIDx0Y2x0azY0TGliRGVidWc+JCh0Y2x0azY0RGlyKVxsaWJcdGNsODZ0Zy5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NnRnLmxpYjwvdGNsdGs2NExpYkRlYnVnPgorCisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxfRGVidWdQcmVwcm9jZXNzb3JEZWZpbml0aW9uPk5ERUJVRzs8L19EZWJ1Z1ByZXByb2Nlc3NvckRlZmluaXRpb24+CisgICAgPF9EZWJ1Z1ByZXByb2Nlc3NvckRlZmluaXRpb24gQ29uZGl0aW9uPSIkKENvbmZpZ3VyYXRpb24pID09ICdEZWJ1ZyciPl9ERUJVRzs8L19EZWJ1Z1ByZXByb2Nlc3NvckRlZmluaXRpb24+CisgICAgPF9QbGF0Zm9ybVByZXByb2Nlc3NvckRlZmluaXRpb24+X1dJTjMyOzwvX1BsYXRmb3JtUHJlcHJvY2Vzc29yRGVmaW5pdGlvbj4KKyAgICA8X1BsYXRmb3JtUHJlcHJvY2Vzc29yRGVmaW5pdGlvbiBDb25kaXRpb249IiQoUGxhdGZvcm0pID09ICd4NjQnIj5fV0lONjQ7X01fWDY0OzwvX1BsYXRmb3JtUHJlcHJvY2Vzc29yRGVmaW5pdGlvbj4KKyAgICA8X1B5ZFByZXByb2Nlc3NvckRlZmluaXRpb24gQ29uZGl0aW9uPSIkKFRhcmdldEV4dCkgPT0gJy5weWQnIj5QeV9CVUlMRF9DT1JFX01PRFVMRTs8L19QeWRQcmVwcm9jZXNzb3JEZWZpbml0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxDbENvbXBpbGU+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFB5U291cmNlUGF0aClJbmNsdWRlOyQoUHlTb3VyY2VQYXRoKVBDOyQoSW50RGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyOyQoX1BsYXRmb3JtUHJlcHJvY2Vzc29yRGVmaW5pdGlvbikkKF9EZWJ1Z1ByZXByb2Nlc3NvckRlZmluaXRpb24pJChfUHlkUHJlcHJvY2Vzc29yRGVmaW5pdGlvbiklKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICAKICAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgogICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxJbmNsdWRlOyAuLlxQQzslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9XSU4zMjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPEV4Y2VwdGlvbkhhbmRsaW5nPgotICAgICAgPC9FeGNlcHRpb25IYW5kbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxFeGNlcHRpb25IYW5kbGluZz48L0V4Y2VwdGlvbkhhbmRsaW5nPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgogICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgogICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KICAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PlByb2dyYW1EYXRhYmFzZTwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KICAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICAgIDxFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0IENvbmRpdGlvbj0iJyQoUGxhdGZvcm0pJz09J1dpbjMyJyI+Tm9FeHRlbnNpb25zPC9FbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgQ29uZGl0aW9uPSIkKENvbmZpZ3VyYXRpb24pID09ICdEZWJ1ZyciPgorICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj5mYWxzZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgorICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBDb25kaXRpb249IiQoSUNDQnVpbGQpID09ICd0cnVlJyI+CisgICAgICA8RmxvYXRpbmdQb2ludE1vZGVsPlN0cmljdDwvRmxvYXRpbmdQb2ludE1vZGVsPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChPdXREaXIpOyUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+CkBAIC01MSw1NCArNTgsMTA1IEBACiAgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KICAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+dHJ1ZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgogICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPnRydWU8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgorICAgICAgPFN1cHByZXNzU3RhcnR1cEJhbm5lcj50cnVlPC9TdXBwcmVzc1N0YXJ0dXBCYW5uZXI+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPkxJQkM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgorICAgICAgPFRhcmdldE1hY2hpbmUgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICd4NjQnIj5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgorICAgICAgPFByb2ZpbGVHdWlkZWREYXRhYmFzZSBDb25kaXRpb249IiQoU3VwcG9ydFBHTykiPiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSkucGdkPC9Qcm9maWxlR3VpZGVkRGF0YWJhc2U+CisgICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbiBDb25kaXRpb249IiQoQ29uZmlndXJhdGlvbikgPT0gJ1JlbGVhc2UnIj5Vc2VMaW5rVGltZUNvZGVHZW5lcmF0aW9uPC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uPgorICAgICAgPExpbmtUaW1lQ29kZUdlbmVyYXRpb24gQ29uZGl0aW9uPSIkKFN1cHBvcnRQR08pIGFuZCAkKENvbmZpZ3VyYXRpb24pID09ICdQR0luc3RydW1lbnQnIj5QR0luc3RydW1lbnQ8L0xpbmtUaW1lQ29kZUdlbmVyYXRpb24+CisgICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbiBDb25kaXRpb249IiQoU3VwcG9ydFBHTykgYW5kICQoQ29uZmlndXJhdGlvbikgPT0gJ1BHVXBkYXRlJyI+UEdVcGRhdGU8L0xpbmtUaW1lQ29kZUdlbmVyYXRpb24+CiAgICAgPC9MaW5rPgorICAgIDxMaWI+CisgICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbiBDb25kaXRpb249IiQoQ29uZmlndXJhdGlvbikgPT0gJ1JlbGVhc2UnIj50cnVlPC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uPgorICAgICAgPExpbmtUaW1lQ29kZUdlbmVyYXRpb24gQ29uZGl0aW9uPSIkKFN1cHBvcnRQR08pIGFuZCAkKENvbmZpZ3VyYXRpb24pID09ICdQR0luc3RydW1lbnQnIj50cnVlPC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uPgorICAgICAgPExpbmtUaW1lQ29kZUdlbmVyYXRpb24gQ29uZGl0aW9uPSIkKFN1cHBvcnRQR08pIGFuZCAkKENvbmZpZ3VyYXRpb24pID09ICdQR1VwZGF0ZSciPnRydWU8L0xpbmtUaW1lQ29kZUdlbmVyYXRpb24+CisgICAgPC9MaWI+CiAgICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXFBDOy4uXEluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHlTb3VyY2VQYXRoKVBDOyQoUHlTb3VyY2VQYXRoKUluY2x1ZGU7JChJbnREaXIpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+JChfRGVidWdQcmVwcm9jZXNzb3JEZWZpbml0aW9uKSUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KICAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgICA8TWlkbD4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4kKF9EZWJ1Z1ByZXByb2Nlc3NvckRlZmluaXRpb24pJShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPE1rVHlwTGliQ29tcGF0aWJsZT50cnVlPC9Na1R5cExpYkNvbXBhdGlibGU+CisgICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4KKyAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5XaW4zMjwvVGFyZ2V0RW52aXJvbm1lbnQ+CisgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICd4NjQnIj5YNjQ8L1RhcmdldEVudmlyb25tZW50PgorICAgICAgPE91dHB1dERpcmVjdG9yeT4kKEludERpcik8L091dHB1dERpcmVjdG9yeT4KKyAgICAgIDxJbnRlcmZhY2VJZGVudGlmaWVyRmlsZU5hbWU+JChNU0J1aWxkUHJvamVjdE5hbWUpX2kuYzwvSW50ZXJmYWNlSWRlbnRpZmllckZpbGVOYW1lPgorICAgICAgPFByb3h5RmlsZU5hbWU+JChNU0J1aWxkUHJvamVjdE5hbWUpX3AuYzwvUHJveHlGaWxlTmFtZT4KKyAgICA8L01pZGw+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8QnVpbGRNYWNybyBJbmNsdWRlPSJQeURsbE5hbWUiPgotICAgICAgPFZhbHVlPiQoUHlEbGxOYW1lKTwvVmFsdWU+Ci0gICAgPC9CdWlsZE1hY3JvPgotICAgIDxCdWlsZE1hY3JvIEluY2x1ZGU9IlB5dGhvbkV4ZSI+Ci0gICAgICA8VmFsdWU+JChQeXRob25FeGUpPC9WYWx1ZT4KLSAgICA8L0J1aWxkTWFjcm8+Ci0gICAgPEJ1aWxkTWFjcm8gSW5jbHVkZT0iS2lsbFB5dGhvbkV4ZSI+Ci0gICAgICA8VmFsdWU+JChLaWxsUHl0aG9uRXhlKTwvVmFsdWU+Ci0gICAgPC9CdWlsZE1hY3JvPgotICAgIDxCdWlsZE1hY3JvIEluY2x1ZGU9ImV4dGVybmFsc0RpciI+Ci0gICAgICA8VmFsdWU+JChleHRlcm5hbHNEaXIpPC9WYWx1ZT4KLSAgICA8L0J1aWxkTWFjcm8+Ci0gICAgPEJ1aWxkTWFjcm8gSW5jbHVkZT0ic3FsaXRlM0RpciI+Ci0gICAgICA8VmFsdWU+JChzcWxpdGUzRGlyKTwvVmFsdWU+Ci0gICAgPC9CdWlsZE1hY3JvPgotICAgIDxCdWlsZE1hY3JvIEluY2x1ZGU9ImJ6MkRpciI+Ci0gICAgICA8VmFsdWU+JChiejJEaXIpPC9WYWx1ZT4KLSAgICA8L0J1aWxkTWFjcm8+Ci0gICAgPEJ1aWxkTWFjcm8gSW5jbHVkZT0ibHptYURpciI+Ci0gICAgICA8VmFsdWU+JChsem1hRGlyKTwvVmFsdWU+Ci0gICAgPC9CdWlsZE1hY3JvPgotICAgIDxCdWlsZE1hY3JvIEluY2x1ZGU9Im9wZW5zc2xEaXIiPgotICAgICAgPFZhbHVlPiQob3BlbnNzbERpcik8L1ZhbHVlPgotICAgIDwvQnVpbGRNYWNybz4KLSAgICA8QnVpbGRNYWNybyBJbmNsdWRlPSJ0Y2x0a0RpciI+Ci0gICAgICA8VmFsdWU+JCh0Y2x0a0Rpcik8L1ZhbHVlPgotICAgIDwvQnVpbGRNYWNybz4KLSAgICA8QnVpbGRNYWNybyBJbmNsdWRlPSJ0Y2x0azY0RGlyIj4KLSAgICAgIDxWYWx1ZT4kKHRjbHRrNjREaXIpPC9WYWx1ZT4KLSAgICA8L0J1aWxkTWFjcm8+Ci0gICAgPEJ1aWxkTWFjcm8gSW5jbHVkZT0idGNsdGtMaWIiPgotICAgICAgPFZhbHVlPiQodGNsdGtMaWIpPC9WYWx1ZT4KLSAgICA8L0J1aWxkTWFjcm8+Ci0gICAgPEJ1aWxkTWFjcm8gSW5jbHVkZT0idGNsdGtMaWJEZWJ1ZyI+Ci0gICAgICA8VmFsdWU+JCh0Y2x0a0xpYkRlYnVnKTwvVmFsdWU+Ci0gICAgPC9CdWlsZE1hY3JvPgotICAgIDxCdWlsZE1hY3JvIEluY2x1ZGU9InRjbHRrNjRMaWIiPgotICAgICAgPFZhbHVlPiQodGNsdGs2NExpYik8L1ZhbHVlPgotICAgIDwvQnVpbGRNYWNybz4KLSAgICA8QnVpbGRNYWNybyBJbmNsdWRlPSJ0Y2x0azY0TGliRGVidWciPgotICAgICAgPFZhbHVlPiQodGNsdGs2NExpYkRlYnVnKTwvVmFsdWU+Ci0gICAgPC9CdWlsZE1hY3JvPgotICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KKworICA8VGFyZ2V0IE5hbWU9IkdlbmVyYXRlUHl0aG9uTnRSY0giCisgICAgICAgICAgQmVmb3JlVGFyZ2V0cz0iQ2xDb21waWxlIgorICAgICAgICAgIElucHV0cz0iJChQeVNvdXJjZVBhdGgpSW5jbHVkZVxwYXRjaGxldmVsLmgiCisgICAgICAgICAgT3V0cHV0cz0iJChJbnREaXIpcHl0aG9ubnRfcmMuaCI+CisgICAgPFdyaXRlTGluZXNUb0ZpbGUgRmlsZT0iJChJbnREaXIpcHl0aG9ubnRfcmMuaCIgT3ZlcndyaXRlPSJ0cnVlIiBFbmNvZGluZz0iYXNjaWkiCisgICAgICAgICAgICAgICAgICAgICAgTGluZXM9Jy8qIFRoaXMgZmlsZSBjcmVhdGVkIGJ5IHB5cHJvamVjdC5wcm9wcyAvdDpHZW5lcmF0ZVB5dGhvbk50UmNIICovCisjZGVmaW5lIEZJRUxEMyAkKEZpZWxkM1ZhbHVlKQorI2RlZmluZSBNU19ETExfSUQgIiQoU3lzV2luVmVyKSIKKyNkZWZpbmUgUFlUSE9OX0RMTF9OQU1FICIkKFRhcmdldE5hbWUpJChUYXJnZXRFeHQpIgorJyAvPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxGaWxlV3JpdGVzIEluY2x1ZGU9IiQoSW50RGlyKXB5dGhvbm50X3JjLmgiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgIDwvVGFyZ2V0PgorCisgIDxVc2luZ1Rhc2sgVGFza05hbWU9IktpbGxQeXRob24iIFRhc2tGYWN0b3J5PSJDb2RlVGFza0ZhY3RvcnkiIEFzc2VtYmx5RmlsZT0iJChNU0J1aWxkVG9vbHNQYXRoKVxNaWNyb3NvZnQuQnVpbGQuVGFza3MudjQuMC5kbGwiPgorICAgIDxQYXJhbWV0ZXJHcm91cD4KKyAgICAgIDxGaWxlTmFtZSBSZXF1aXJlZD0idHJ1ZSIgLz4KKyAgICA8L1BhcmFtZXRlckdyb3VwPgorICAgIDxUYXNrPgorICAgICAgPENvZGUgVHlwZT0iRnJhZ21lbnQiIExhbmd1YWdlPSJjcyI+Cis8IVtDREFUQVsKK3N0cmluZyBmdWxsUGF0aCA9IFN5c3RlbS5JTy5QYXRoLkdldEZ1bGxQYXRoKEZpbGVOYW1lKTsKK0xvZy5Mb2dNZXNzYWdlKCJMb29raW5nIGZvciAiICsgZnVsbFBhdGgsIE1lc3NhZ2VJbXBvcnRhbmNlLk5vcm1hbCk7Citmb3JlYWNoIChTeXN0ZW0uRGlhZ25vc3RpY3MuUHJvY2VzcyBwIGluIFN5c3RlbS5EaWFnbm9zdGljcy5Qcm9jZXNzLkdldFByb2Nlc3NlcygpKSB7CisgICAgdHJ5IHsKKyAgICAgICAgTG9nLkxvZ01lc3NhZ2UoIkZvdW5kIHJ1bm5pbmcgcHJvY2VzczogIiArIHAuTWFpbk1vZHVsZS5GaWxlTmFtZSwgTWVzc2FnZUltcG9ydGFuY2UuTG93KTsKKyAgICAgICAgaWYgKGZ1bGxQYXRoLkVxdWFscyhTeXN0ZW0uSU8uUGF0aC5HZXRGdWxsUGF0aChwLk1haW5Nb2R1bGUuRmlsZU5hbWUpLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkgeworICAgICAgICAgICAgTG9nLkxvZ01lc3NhZ2UoIlRlcm1pbmF0aW5nICIgKyBwLk1haW5Nb2R1bGUuRmlsZU5hbWUsIE1lc3NhZ2VJbXBvcnRhbmNlLkhpZ2gpOworICAgICAgICAgICAgcC5LaWxsKCk7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIHsKKyAgICB9Cit9CitdXT4KKyAgICAgIDwvQ29kZT4KKyAgICA8L1Rhc2s+CisgIDwvVXNpbmdUYXNrPgorICAKKyAgPFRhcmdldCBOYW1lPSJLaWxsUHl0aG9uIiBCZWZvcmVUYXJnZXRzPSJQcmVwYXJlRm9yQnVpbGQiIENvbmRpdGlvbj0iJyQoS2lsbFB5dGhvbiknID09ICd0cnVlJyI+CisgICAgPE1lc3NhZ2UgVGV4dD0iS2lsbGluZyBhbnkgcnVubmluZyBweXRob24kKFB5RGVidWdFeHQpJChQeVRlc3RFeHQpLmV4ZSBpbnN0YW5jZXMuLi4iIEltcG9ydGFuY2U9ImhpZ2giIC8+CisgICAgPEtpbGxQeXRob24gRmlsZU5hbWU9IiQoT3V0RGlyKXB5dGhvbiQoUHlEZWJ1Z0V4dCkkKFB5VGVzdEV4dCkuZXhlIiAvPgorICA8L1RhcmdldD4KKyAgCisgIDwhLS0KKyAgQSBkZWZhdWx0IHRhcmdldCB0byBoYW5kbGUgbXNidWlsZCBwY2J1aWxkLnByb2ogL3Q6Q2xlYW5BbGwuCisgIAorICBTb21lIGV4dGVybmFscyBwcm9qZWN0cyBkb24ndCByZXNwb25kIHRvIC90OkNsZWFuLCBzbyB3ZSBpbnZva2UKKyAgQ2xlYW5BbGwgb24gdGhlbSB3aGVuIHdlIHJlYWxseSB3YW50IHRvIGNsZWFuIHVwLgorICAtLT4KKyAgPFRhcmdldCBOYW1lPSJDbGVhbkFsbCIgRGVwZW5kc09uVGFyZ2V0cz0iQ2xlYW4iPgorICAgIDxNU0J1aWxkIFByb2plY3RzPSJAKFByb2plY3RSZWZlcmVuY2UtPiclKEZ1bGxQYXRoKScpIgorICAgICAgICAgICAgIFByb3BlcnRpZXM9IkNvbmZpZ3VyYXRpb249JChDb25maWd1cmF0aW9uKTtQbGF0Zm9ybT0kKFBsYXRmb3JtKSIKKyAgICAgICAgICAgICBCdWlsZEluUGFyYWxsZWw9InRydWUiCisgICAgICAgICAgICAgU3RvcE9uRmlyc3RGYWlsdXJlPSJmYWxzZSIKKyAgICAgICAgICAgICBDb25kaXRpb249IkV4aXN0cyglKEZ1bGxQYXRoKSkiCisgICAgICAgICAgICAgVGFyZ2V0cz0iQ2xlYW5BbGwiIC8+CisgIDwvVGFyZ2V0PgorCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoU2lnbmluZ0NlcnRpZmljYXRlKScgIT0gJycgYW5kICQoU3VwcG9ydFNpZ25pbmcpIj4KKyAgICA8U2lnblRvb2xQYXRoIENvbmRpdGlvbj0iJyQoU2lnblRvb2xQYXRoKScgPT0gJycgb3IgIUV4aXN0cygkKFNpZ25Ub29sUGF0aCkpIj4kKHJlZ2lzdHJ5OkhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93cyBLaXRzXEluc3RhbGxlZCBSb290c0BLaXRzUm9vdDgxKVxiaW5ceDg2XHNpZ250b29sLmV4ZTwvU2lnblRvb2xQYXRoPgorICAgIDxTaWduVG9vbFBhdGggQ29uZGl0aW9uPSIhRXhpc3RzKCQoU2lnblRvb2xQYXRoKSkiPiQocmVnaXN0cnk6SEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzIEtpdHNcSW5zdGFsbGVkIFJvb3RzQEtpdHNSb290KVxiaW5ceDg2XHNpZ250b29sLmV4ZTwvU2lnblRvb2xQYXRoPgorICAgIDxTaWduVG9vbFBhdGggQ29uZGl0aW9uPSIhRXhpc3RzKCQoU2lnblRvb2xQYXRoKSkiPiQocmVnaXN0cnk6SEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXE1pY3Jvc29mdFxNaWNyb3NvZnQgU0RLc1xXaW5kb3dzXHY3LjFBQEluc3RhbGxhdGlvbkZvbGRlcilcQmluXHNpZ250b29sLmV4ZTwvU2lnblRvb2xQYXRoPgorICAgIDxfU2lnbkNvbW1hbmQgQ29uZGl0aW9uPSJFeGlzdHMoJChTaWduVG9vbFBhdGgpKSI+IiQoU2lnblRvb2xQYXRoKSIgc2lnbiAvcSAvbiAiJChTaWduaW5nQ2VydGlmaWNhdGUpIiAvZmQgc2hhMjU2IC90IGh0dHA6Ly90aW1lc3RhbXAudmVyaXNpZ24uY29tL3NjcmlwdHMvdGltZXN0YW1wLmRsbCAvZCAiUHl0aG9uICQoUHl0aG9uVmVyc2lvbikiPC9fU2lnbkNvbW1hbmQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgCisgIDxUYXJnZXQgTmFtZT0iX1NpZ25CdWlsZCIgQWZ0ZXJUYXJnZXRzPSJBZnRlckJ1aWxkIiBDb25kaXRpb249IickKFNpZ25pbmdDZXJ0aWZpY2F0ZSknICE9ICcnIGFuZCAkKFN1cHBvcnRTaWduaW5nKSI+CisgICAgPEVycm9yIFRleHQ9IlVuYWJsZSB0byBsb2NhdGUgc2lnbnRvb2wuZXhlLiBTZXQgL3A6U2lnblRvb2xQYXRoIGFuZCByZWJ1aWxkIiBDb25kaXRpb249IickKF9TaWduQ29tbWFuZCknID09ICcnIiAvPgorICAgIDxFeGVjIENvbW1hbmQ9JyQoX1NpZ25Db21tYW5kKSAiJChUYXJnZXRQYXRoKSIgfHwgJChfU2lnbkNvbW1hbmQpICIkKFRhcmdldFBhdGgpIiB8fCAkKF9TaWduQ29tbWFuZCkgIiQoVGFyZ2V0UGF0aCkiJyBDb250aW51ZU9uRXJyb3I9ImZhbHNlIiAvPgorICA8L1RhcmdldD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5c2hlbGxleHQudmN4cHJvaiBiL1BDYnVpbGQvcHlzaGVsbGV4dC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOTM5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL3B5c2hlbGxleHQudmN4cHJvagpAQCAtMCwwICsxLDg3IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdJbnN0cnVtZW50PC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHVXBkYXRlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdVcGRhdGU8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICA8L0l0ZW1Hcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57MEY2RUU0QTQtQzc1Ri00NTc4LUI0QjMtMkQ2NEY0QjlCNzgyfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+cHlzaGVsbGV4dDwvUm9vdE5hbWVzcGFjZT4KKyAgICA8VGFyZ2V0TmFtZT5weXNoZWxsZXh0PC9UYXJnZXROYW1lPgorICAgIDxTdXBwb3J0UEdPPmZhbHNlPC9TdXBwb3J0UEdPPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxNYWtlVmVyc2lvbkluZm9CZWZvcmVUYXJnZXQ+Q2xDb21waWxlPC9NYWtlVmVyc2lvbkluZm9CZWZvcmVUYXJnZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICA8L0ltcG9ydEdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz52ZXJzaW9uLmxpYjtzaGx3YXBpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8TW9kdWxlRGVmaW5pdGlvbkZpbGU+Li5cUENccHlzaGVsbGV4dCQoUHlEZWJ1Z0V4dCkuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4KKyAgICA8L0xpbms+CisgICAgPE1pZGw+CisgICAgICA8Q29tcGlsZUludGVyZmFjZT50cnVlPC9Db21waWxlSW50ZXJmYWNlPgorICAgIDwvTWlkbD4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENccHlzaGVsbGV4dC5jcHAiIC8+CisgICAgPE1pZGwgSW5jbHVkZT0iLi5cUENccHlzaGVsbGV4dC5pZGwiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXFBDXHB5c2hlbGxleHQuZGVmIiAvPgorICAgIDxOb25lIEluY2x1ZGU9Ii4uXFBDXHB5c2hlbGxleHRfZC5kZWYiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHlzaGVsbGV4dC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CisgIDwvSW1wb3J0R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXNoZWxsZXh0LnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvcHlzaGVsbGV4dC52Y3hwcm9qLmZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4ZTQ5OQotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvcHlzaGVsbGV4dC52Y3hwcm9qLmZpbHRlcnMKQEAgLTAsMCArMSw0MCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgorICAgIDwvRmlsdGVyPgorICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXNoZWxsZXh0LmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8TWlkbCBJbmNsdWRlPSIuLlxQQ1xweXNoZWxsZXh0LmlkbCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvTWlkbD4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXNoZWxsZXh0LnJjIj4KKyAgICAgIDxGaWx0ZXI+UmVzb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5cUENccHlzaGVsbGV4dC5kZWYiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L05vbmU+CisgICAgPE5vbmUgSW5jbHVkZT0iLi5cUENccHlzaGVsbGV4dF9kLmRlZiI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvTm9uZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob24ucHJvcHMgYi9QQ2J1aWxkL3B5dGhvbi5wcm9wcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTcwMjEwCi0tLSAvZGV2L251bGwKKysrIGIvUENidWlsZC9weXRob24ucHJvcHMKQEAgLTAsMCArMSwxNzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxQbGF0Zm9ybSBDb25kaXRpb249IickKFBsYXRmb3JtKScgPT0gJyciPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8Q29uZmlndXJhdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJyA9PSAnJyI+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICA8IS0tCisgICAgVXNlIHRoZSBsYXRlc3QgYXZhaWxhYmxlIHZlcnNpb24gb2YgVmlzdWFsIFN0dWRpbyB0byBidWlsZC4gVG8gb3ZlcnJpZGUKKyAgICB0aGlzIGFuZCBidWlsZCB3aXRoIGFuIGVhcmxpZXIgdmVyc2lvbiwgcGFzcyAiL3A6UGxhdGZvcm1Ub29sc2V0PXYxMDAiCisgICAgKGZvciBleGFtcGxlKSB3aGVuIGJ1aWxkaW5nLgorCisgICAgV2Ugc2V0IEJhc2VQbGF0Zm9ybVRvb2xzZXQgZm9yIElDQydzIGJlbmVmaXQsIGl0J3Mgb3RoZXJ3aXNlIGlnbm9yZWQuCisgICAgLS0+CisgICAgPEJhc2VQbGF0Zm9ybVRvb2xzZXQgQ29uZGl0aW9uPSInJChCYXNlUGxhdGZvcm1Ub29sc2V0KScgPT0gJycgYW5kICckKFZDVGFyZ2V0c1BhdGgxNCknICE9ICcnIj52MTQwPC9CYXNlUGxhdGZvcm1Ub29sc2V0PgorICAgIDxCYXNlUGxhdGZvcm1Ub29sc2V0IENvbmRpdGlvbj0iJyQoQmFzZVBsYXRmb3JtVG9vbHNldCknID09ICcnIGFuZCAnJChWQ1RhcmdldHNQYXRoMTIpJyAhPSAnJyI+djEyMDwvQmFzZVBsYXRmb3JtVG9vbHNldD4KKyAgICA8QmFzZVBsYXRmb3JtVG9vbHNldCBDb25kaXRpb249IickKEJhc2VQbGF0Zm9ybVRvb2xzZXQpJyA9PSAnJyBhbmQgJyQoVkNUYXJnZXRzUGF0aDExKScgIT0gJyciPnYxMTA8L0Jhc2VQbGF0Zm9ybVRvb2xzZXQ+CisgICAgPEJhc2VQbGF0Zm9ybVRvb2xzZXQgQ29uZGl0aW9uPSInJChCYXNlUGxhdGZvcm1Ub29sc2V0KScgPT0gJycgYW5kICckKFZDVGFyZ2V0c1BhdGgxMCknICE9ICcnIj52MTAwPC9CYXNlUGxhdGZvcm1Ub29sc2V0PgorCisgICAgPFBsYXRmb3JtVG9vbHNldCBDb25kaXRpb249IickKFBsYXRmb3JtVG9vbHNldCknID09ICcnIj4kKEJhc2VQbGF0Zm9ybVRvb2xzZXQpPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPElDQ0J1aWxkPmZhbHNlPC9JQ0NCdWlsZD4KKyAgICA8SUNDQnVpbGQgQ29uZGl0aW9uPSIkKFBsYXRmb3JtVG9vbHNldC5TdGFydHNXaXRoKGBJbnRlbCBDKysgQ29tcGlsZXJgKSkiPnRydWU8L0lDQ0J1aWxkPgorCisgICAgPCEtLQorICAgIENvbnZpbmNpbmcgTVNWQy9NU0J1aWxkIHRvIHByZWZlciBvdXIgcGxhdGZvcm0gbmFtZXMgaXMgdG9vIGRpZmZpY3VsdCwKKyAgICBzbyB3ZSBkZWZpbmUgb3VyIG93biBjb25zdGFudCBBcmNoTmFtZSBhbmQgdXNlIHdoZXJldmVyIHdlIG5lZWQgaXQuCisgICAgLS0+CisgICAgPEFyY2hOYW1lIENvbmRpdGlvbj0iJyQoQXJjaE5hbWUpJyA9PSAnJyBhbmQgJChQbGF0Zm9ybSkgPT0gJ3g2NCciPmFtZDY0PC9BcmNoTmFtZT4KKyAgICA8QXJjaE5hbWUgQ29uZGl0aW9uPSInJChBcmNoTmFtZSknID09ICcnIj53aW4zMjwvQXJjaE5hbWU+CisgICAgPEFyY2hOYW1lIENvbmRpdGlvbj0iJChDb25maWd1cmF0aW9uKSA9PSAnUEdJbnN0cnVtZW50JyBvciAkKENvbmZpZ3VyYXRpb24pID09ICdQR1VwZGF0ZSciPiQoQXJjaE5hbWUpLXBnbzwvQXJjaE5hbWU+CisgICAgCisgICAgPCEtLSBSb290IGRpcmVjdG9yeSBvZiB0aGUgcmVwb3NpdG9yeSAtLT4KKyAgICA8UHlTb3VyY2VQYXRoIENvbmRpdGlvbj0iJyQoUHlTb3VyY2VQYXRoKScgPT0gJyciPiQoW1N5c3RlbS5JTy5QYXRoXTo6R2V0RnVsbFBhdGgoJChNU0J1aWxkVGhpc0ZpbGVEaXJlY3RvcnkpXC4uXCkpPC9QeVNvdXJjZVBhdGg+CisgICAgPFB5U291cmNlUGF0aCBDb25kaXRpb249IiFIYXNUcmFpbGluZ1NsYXNoKCQoUHlTb3VyY2VQYXRoKSkiPiQoUHlTb3VyY2VQYXRoKVw8L1B5U291cmNlUGF0aD4KKyAgICAKKyAgICA8IS0tIERpcmVjdG9yeSB3aGVyZSBidWlsZCBvdXRwdXRzIGFyZSBwdXQgLS0+CisgICAgPEJ1aWxkUGF0aDMyIENvbmRpdGlvbj0iJyQoUHlfT3V0RGlyKScgPT0gJyciPiQoUHlTb3VyY2VQYXRoKVBDQnVpbGRcd2luMzJcPC9CdWlsZFBhdGgzMj4KKyAgICA8QnVpbGRQYXRoMzIgQ29uZGl0aW9uPSInJChQeV9PdXREaXIpJyAhPSAnJyI+JChQeV9PdXREaXIpXHdpbjMyXDwvQnVpbGRQYXRoMzI+CisgICAgPEJ1aWxkUGF0aDY0IENvbmRpdGlvbj0iJyQoUHlfT3V0RGlyKScgPT0gJyciPiQoUHlTb3VyY2VQYXRoKVBDQnVpbGRcYW1kNjRcPC9CdWlsZFBhdGg2ND4KKyAgICA8QnVpbGRQYXRoNjQgQ29uZGl0aW9uPSInJChQeV9PdXREaXIpJyAhPSAnJyI+JChQeV9PdXREaXIpXGFtZDY0XDwvQnVpbGRQYXRoNjQ+CisgICAgPEJ1aWxkUGF0aCBDb25kaXRpb249IickKEFyY2hOYW1lKScgPT0gJ3dpbjMyJyI+JChCdWlsZFBhdGgzMik8L0J1aWxkUGF0aD4KKyAgICA8QnVpbGRQYXRoIENvbmRpdGlvbj0iJyQoQXJjaE5hbWUpJyA9PSAnYW1kNjQnIj4kKEJ1aWxkUGF0aDY0KTwvQnVpbGRQYXRoPgorICAgIDxCdWlsZFBhdGggQ29uZGl0aW9uPSInJChCdWlsZFBhdGgpJyA9PSAnJyI+JChQeVNvdXJjZVBhdGgpUENCdWlsZFwkKEFyY2hOYW1lKVw8L0J1aWxkUGF0aD4KKyAgICA8QnVpbGRQYXRoIENvbmRpdGlvbj0iIUhhc1RyYWlsaW5nU2xhc2goJChCdWlsZFBhdGgpKSI+JChCdWlsZFBhdGgpXDwvQnVpbGRQYXRoPgorICAgIAorICAgIDwhLS0gRGlyZWN0b3JpZXMgb2YgZXh0ZXJuYWwgcHJvamVjdHMuIHRjbHRrIGlzIGhhbmRsZWQgaW4gdGNsdGsucHJvcHMgLS0+CisgICAgPEV4dGVybmFsc0Rpcj4kKFtTeXN0ZW0uSU8uUGF0aF06OkdldEZ1bGxQYXRoKGAkKFB5U291cmNlUGF0aClleHRlcm5hbHNcYCkpPC9FeHRlcm5hbHNEaXI+CisgICAgPHNxbGl0ZTNEaXI+JChFeHRlcm5hbHNEaXIpc3FsaXRlLTMuOC4xMS4wXDwvc3FsaXRlM0Rpcj4KKyAgICA8YnoyRGlyPiQoRXh0ZXJuYWxzRGlyKWJ6aXAyLTEuMC42XDwvYnoyRGlyPgorICAgIDxsem1hRGlyPiQoRXh0ZXJuYWxzRGlyKXh6LTUuMC41XDwvbHptYURpcj4KKyAgICA8b3BlbnNzbERpcj4kKEV4dGVybmFsc0RpcilvcGVuc3NsLTEuMC4yaFw8L29wZW5zc2xEaXI+CisgICAgPG9wZW5zc2xJbmNsdWRlRGlyPiQob3BlbnNzbERpcilpbmNsdWRlMzI8L29wZW5zc2xJbmNsdWRlRGlyPgorICAgIDxvcGVuc3NsSW5jbHVkZURpciBDb25kaXRpb249IickKEFyY2hOYW1lKScgPT0gJ2FtZDY0JyI+JChvcGVuc3NsRGlyKWluY2x1ZGU2NDwvb3BlbnNzbEluY2x1ZGVEaXI+CisgICAgPG5hc21EaXI+JChFeHRlcm5hbHNEaXIpXG5hc20tMi4xMS4wNlw8L25hc21EaXI+CisgICAgCisgICAgPCEtLSBTdWZmaXggZm9yIGFsbCBiaW5hcmllcyB3aGVuIGJ1aWxkaW5nIGZvciBkZWJ1ZyAtLT4KKyAgICA8UHlEZWJ1Z0V4dCBDb25kaXRpb249IickKFB5RGVidWdFeHQpJyA9PSAnJyBhbmQgJChDb25maWd1cmF0aW9uKSA9PSAnRGVidWcnIj5fZDwvUHlEZWJ1Z0V4dD4KKyAgICAKKyAgICA8IS0tIFN1ZmZpeCBmb3IgdmVyc2lvbnMva2V5cyB3aGVuIGJ1aWxkaW5nIHdpdGggdGVzdCBtYXJrZXJzIC0tPgorICAgIDxQeVRlc3RFeHQgQ29uZGl0aW9uPSIkKFVzZVRlc3RNYXJrZXIpID09ICd0cnVlJyI+LXRlc3Q8L1B5VGVzdEV4dD4KKyAgICAKKyAgICA8IS0tIFN1ZmZpeCBmb3IgdmVyc2lvbnMva2V5cyB3aGVuIGJ1aWxkaW5nIGZvciBwYXJ0aWN1bGFyIHBsYXRmb3JtcyAtLT4KKyAgICA8UHlBcmNoRXh0IENvbmRpdGlvbj0iJyQoQXJjaE5hbWUpJyA9PSAnd2luMzInIj4tMzI8L1B5QXJjaEV4dD4KKyAgICAKKyAgICA8IS0tIEZ1bGwgcGF0aCBvZiB0aGUgcmVzdWx0aW5nIHB5dGhvbi5leGUgYmluYXJ5IC0tPgorICAgIDxQeXRob25FeGUgQ29uZGl0aW9uPSInJChQeXRob25FeGUpJyA9PSAnJyI+JChCdWlsZFBhdGgpcHl0aG9uJChQeURlYnVnRXh0KS5leGU8L1B5dGhvbkV4ZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICAKKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChPdmVycmlkZVZlcnNpb24pJyA9PSAnJyI+CisgICAgPCEtLQorICAgIFJlYWQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIEluY2x1ZGVccGF0Y2hsZXZlbC5oLiBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIHNldDoKKyAgICAKKyAgICAgICAgTWFqb3JWZXJzaW9uTnVtYmVyICAtICAgdGhlICczJyBpbiAnMy41LjJhMScKKyAgICAgICAgTWlub3JWZXJzaW9uTnVtYmVyICAtICAgdGhlICc1JyBpbiAnMy41LjJhMScKKyAgICAgICAgTWljcm9WZXJzaW9uTnVtYmVyICAtICAgdGhlICcyJyBpbiAnMy41LjJhMScKKyAgICAgICAgUmVsZWFzZVNlcmlhbCAgICAgICAtICAgdGhlICcxJyBpbiAnMy41LjJhMScKKyAgICAgICAgUmVsZWFzZUxldmVsTmFtZSAgICAtICAgdGhlICdhMScgaW4gJzMuNS4yYTEnCisgICAgICAgIFB5dGhvblZlcnNpb25OdW1iZXIgLSAgICczLjUuMicgZm9yICczLjUuMmExJworICAgICAgICBQeXRob25WZXJzaW9uICAgICAgIC0gICAnMy41LjJhMScKKyAgICAgICAgUHl0aG9uVmVyc2lvbkhleCAgICAtICAgMHgwMzA1MDJhMSBmb3IgJzMuNS4yYTEnCisgICAgICAgIFJlbGVhc2VMZXZlbE51bWJlciAgLSAgIDEwIGZvciBhbHBoYSwgMTEgZm9yIGJldGEsIDEyIGZvciBSQyAoZ2FtbWEpLCBhbmQgMTUgZm9yIGZpbmFsCisgICAgICAgIEZpZWxkM1ZhbHVlICAgICAgICAgLSAgIDIxMDEgZm9yICczLjUuMmExJyAoPT0gMTAwMCoyICsgMTAqMTAgKCdhJykgKyAxKQorICAgIC0tPgorICAgIDxfUGF0Y2hMZXZlbENvbnRlbnQ+JChbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dChgJChQeVNvdXJjZVBhdGgpSW5jbHVkZVxwYXRjaGxldmVsLmhgKSk8L19QYXRjaExldmVsQ29udGVudD4KKyAgICA8TWFqb3JWZXJzaW9uTnVtYmVyPiQoW1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy5SZWdleF06Ok1hdGNoKCQoX1BhdGNoTGV2ZWxDb250ZW50KSwgYGRlZmluZVxzK1BZX01BSk9SX1ZFUlNJT05ccysoXGQrKWApLkdyb3Vwc1sxXS5WYWx1ZSk8L01ham9yVmVyc2lvbk51bWJlcj4KKyAgICA8TWlub3JWZXJzaW9uTnVtYmVyPiQoW1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy5SZWdleF06Ok1hdGNoKCQoX1BhdGNoTGV2ZWxDb250ZW50KSwgYGRlZmluZVxzK1BZX01JTk9SX1ZFUlNJT05ccysoXGQrKWApLkdyb3Vwc1sxXS5WYWx1ZSk8L01pbm9yVmVyc2lvbk51bWJlcj4KKyAgICA8TWljcm9WZXJzaW9uTnVtYmVyPiQoW1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy5SZWdleF06Ok1hdGNoKCQoX1BhdGNoTGV2ZWxDb250ZW50KSwgYGRlZmluZVxzK1BZX01JQ1JPX1ZFUlNJT05ccysoXGQrKWApLkdyb3Vwc1sxXS5WYWx1ZSk8L01pY3JvVmVyc2lvbk51bWJlcj4KKyAgICA8X1JlbGVhc2VMZXZlbD4kKFtTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnMuUmVnZXhdOjpNYXRjaCgkKF9QYXRjaExldmVsQ29udGVudCksIGBkZWZpbmVccytQWV9SRUxFQVNFX0xFVkVMXHMrUFlfUkVMRUFTRV9MRVZFTF8oXHcrKWApLkdyb3Vwc1sxXS5WYWx1ZSk8L19SZWxlYXNlTGV2ZWw+CisgICAgPFJlbGVhc2VTZXJpYWw+JChbU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zLlJlZ2V4XTo6TWF0Y2goJChfUGF0Y2hMZXZlbENvbnRlbnQpLCBgZGVmaW5lXHMrUFlfUkVMRUFTRV9TRVJJQUxccysoXGQrKWApLkdyb3Vwc1sxXS5WYWx1ZSk8L1JlbGVhc2VTZXJpYWw+CisgICAgPFJlbGVhc2VMZXZlbE51bWJlcj4xNTwvUmVsZWFzZUxldmVsTnVtYmVyPgorICAgIDxSZWxlYXNlTGV2ZWxOdW1iZXIgQ29uZGl0aW9uPSIkKF9SZWxlYXNlTGV2ZWwpID09ICdBTFBIQSciPjEwPC9SZWxlYXNlTGV2ZWxOdW1iZXI+CisgICAgPFJlbGVhc2VMZXZlbE51bWJlciBDb25kaXRpb249IiQoX1JlbGVhc2VMZXZlbCkgPT0gJ0JFVEEnIj4xMTwvUmVsZWFzZUxldmVsTnVtYmVyPgorICAgIDxSZWxlYXNlTGV2ZWxOdW1iZXIgQ29uZGl0aW9uPSIkKF9SZWxlYXNlTGV2ZWwpID09ICdHQU1NQSciPjEyPC9SZWxlYXNlTGV2ZWxOdW1iZXI+CisgICAgPFJlbGVhc2VMZXZlbE5hbWUgQ29uZGl0aW9uPSIkKF9SZWxlYXNlTGV2ZWwpID09ICdBTFBIQSciPmEkKFJlbGVhc2VTZXJpYWwpPC9SZWxlYXNlTGV2ZWxOYW1lPgorICAgIDxSZWxlYXNlTGV2ZWxOYW1lIENvbmRpdGlvbj0iJChfUmVsZWFzZUxldmVsKSA9PSAnQkVUQSciPmIkKFJlbGVhc2VTZXJpYWwpPC9SZWxlYXNlTGV2ZWxOYW1lPgorICAgIDxSZWxlYXNlTGV2ZWxOYW1lIENvbmRpdGlvbj0iJChfUmVsZWFzZUxldmVsKSA9PSAnR0FNTUEnIj5yYyQoUmVsZWFzZVNlcmlhbCk8L1JlbGVhc2VMZXZlbE5hbWU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoT3ZlcnJpZGVWZXJzaW9uKScgIT0gJyciPgorICAgIDwhLS0KKyAgICBPdmVycmlkZSB0aGUgdmVyc2lvbiBudW1iZXIgd2hlbiBidWlsZGluZyBieSBzcGVjaWZ5aW5nIE92ZXJyaWRlVmVyc2lvbi4KKyAgICBGb3IgZXhhbXBsZToKKyAgICAKKyAgICAgICAgUENCdWlsZFxidWlsZC5iYXQgIi9wOk92ZXJyaWRlVmVyc2lvbj0zLjUuMmExIgorICAgIAorICAgIFVzZSB0aGUgLVYgb3B0aW9uIHRvIGNoZWNrIHlvdXIgdmVyc2lvbiBpcyB2YWxpZDoKKyAgICAKKyAgICAgICAgUENCdWlsZFxidWlsZC5iYXQgLVYgIi9wOk92ZXJyaWRlVmVyc2lvbj0zLjUuMmExIgorICAgICAgICAgIFB5dGhvblZlcnNpb25OdW1iZXI6IDMuNS4yCisgICAgICAgICAgUHl0aG9uVmVyc2lvbjogICAgICAgMy41LjJhMQorICAgICAgICAgIFB5dGhvblZlcnNpb25IZXg6ICAgIDB4MDMwNTAyQTEKKyAgICAgICAgICBGaWVsZDNWYWx1ZTogICAgICAgICAyMTAxCisgICAgCisgICAgTm90ZSB0aGF0IHRoaXMgb25seSBhZmZlY3RzIHRoZSB2ZXJzaW9uIG51bWJlcnMgZW1iZWRkZWQgaW4gcmVzb3VyY2VzIGFuZAorICAgIGluc3RhbGxlcnMsIGJ1dCBub3Qgc3lzLnZlcnNpb24uCisgICAgLS0+CisgICAgPE1ham9yVmVyc2lvbk51bWJlcj4kKFtTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnMuUmVnZXhdOjpNYXRjaCgkKE92ZXJyaWRlVmVyc2lvbiksIGAoXGQrKVwuKFxkKylcLihcZCspKChhfGJ8cmMpKFxkKSk/YCkuR3JvdXBzWzFdLlZhbHVlKTwvTWFqb3JWZXJzaW9uTnVtYmVyPgorICAgIDxNaW5vclZlcnNpb25OdW1iZXI+JChbU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zLlJlZ2V4XTo6TWF0Y2goJChPdmVycmlkZVZlcnNpb24pLCBgKFxkKylcLihcZCspXC4oXGQrKSgoYXxifHJjKShcZCkpP2ApLkdyb3Vwc1syXS5WYWx1ZSk8L01pbm9yVmVyc2lvbk51bWJlcj4KKyAgICA8TWljcm9WZXJzaW9uTnVtYmVyPiQoW1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy5SZWdleF06Ok1hdGNoKCQoT3ZlcnJpZGVWZXJzaW9uKSwgYChcZCspXC4oXGQrKVwuKFxkKykoKGF8YnxyYykoXGQpKT9gKS5Hcm91cHNbM10uVmFsdWUpPC9NaWNyb1ZlcnNpb25OdW1iZXI+CisgICAgPFJlbGVhc2VMZXZlbE5hbWU+JChbU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zLlJlZ2V4XTo6TWF0Y2goJChPdmVycmlkZVZlcnNpb24pLCBgKFxkKylcLihcZCspXC4oXGQrKSgoYXxifHJjKShcZCkpP2ApLkdyb3Vwc1s0XS5WYWx1ZSk8L1JlbGVhc2VMZXZlbE5hbWU+CisgICAgPF9SZWxlYXNlTGV2ZWw+JChbU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zLlJlZ2V4XTo6TWF0Y2goJChPdmVycmlkZVZlcnNpb24pLCBgKFxkKylcLihcZCspXC4oXGQrKSgoYXxifHJjKShcZCkpP2ApLkdyb3Vwc1s1XS5WYWx1ZSk8L19SZWxlYXNlTGV2ZWw+CisgICAgPFJlbGVhc2VTZXJpYWw+JChbU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zLlJlZ2V4XTo6TWF0Y2goJChPdmVycmlkZVZlcnNpb24pLCBgKFxkKylcLihcZCspXC4oXGQrKSgoYXxifHJjKShcZCkpP2ApLkdyb3Vwc1s2XS5WYWx1ZSk8L1JlbGVhc2VTZXJpYWw+CisgICAgPFJlbGVhc2VTZXJpYWwgQ29uZGl0aW9uPSInJChSZWxlYXNlU2VyaWFsKScgPT0gJyciPjA8L1JlbGVhc2VTZXJpYWw+CisgICAgPFJlbGVhc2VMZXZlbE51bWJlcj4xNTwvUmVsZWFzZUxldmVsTnVtYmVyPgorICAgIDxSZWxlYXNlTGV2ZWxOdW1iZXIgQ29uZGl0aW9uPSIkKF9SZWxlYXNlTGV2ZWwpID09ICdhJyI+MTA8L1JlbGVhc2VMZXZlbE51bWJlcj4KKyAgICA8UmVsZWFzZUxldmVsTnVtYmVyIENvbmRpdGlvbj0iJChfUmVsZWFzZUxldmVsKSA9PSAnYiciPjExPC9SZWxlYXNlTGV2ZWxOdW1iZXI+CisgICAgPFJlbGVhc2VMZXZlbE51bWJlciBDb25kaXRpb249IiQoX1JlbGVhc2VMZXZlbCkgPT0gJ3JjJyI+MTI8L1JlbGVhc2VMZXZlbE51bWJlcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICAKKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFB5dGhvblZlcnNpb25OdW1iZXI+JChNYWpvclZlcnNpb25OdW1iZXIpLiQoTWlub3JWZXJzaW9uTnVtYmVyKS4kKE1pY3JvVmVyc2lvbk51bWJlcik8L1B5dGhvblZlcnNpb25OdW1iZXI+CisgICAgPFB5dGhvblZlcnNpb24+JChNYWpvclZlcnNpb25OdW1iZXIpLiQoTWlub3JWZXJzaW9uTnVtYmVyKS4kKE1pY3JvVmVyc2lvbk51bWJlcikkKFJlbGVhc2VMZXZlbE5hbWUpPC9QeXRob25WZXJzaW9uPgorICAgIDxQeXRob25WZXJzaW9uSGV4PiQoW21zYnVpbGRdOjpCaXR3aXNlT3IoCisgICAgICAgICQoW21zYnVpbGRdOjpNdWx0aXBseSgkKE1ham9yVmVyc2lvbk51bWJlciksIDE2Nzc3MjE2KSksCisgICAgICAgICQoW21zYnVpbGRdOjpCaXR3aXNlT3IoCisgICAgICAgICAgICAkKFttc2J1aWxkXTo6TXVsdGlwbHkoJChNaW5vclZlcnNpb25OdW1iZXIpLCA2NTUzNikpLAorICAgICAgICAgICAgJChbbXNidWlsZF06OkJpdHdpc2VPcigKKyAgICAgICAgICAgICAgICAkKFttc2J1aWxkXTo6TXVsdGlwbHkoJChNaWNyb1ZlcnNpb25OdW1iZXIpLCAyNTYpKSwKKyAgICAgICAgICAgICAgICAkKFttc2J1aWxkXTo6Qml0d2lzZU9yKAorICAgICAgICAgICAgICAgICAgICAkKFttc2J1aWxkXTo6TXVsdGlwbHkoJChSZWxlYXNlTGV2ZWxOdW1iZXIpLCAxNikpLAorICAgICAgICAgICAgICAgICAgICAkKFJlbGVhc2VTZXJpYWwpCisgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICkpCisgICAgICAgICkpCisgICAgKSk8L1B5dGhvblZlcnNpb25IZXg+CisgICAgPEZpZWxkM1ZhbHVlPiQoW21zYnVpbGRdOjpBZGQoCisgICAgICAgICQoUmVsZWFzZVNlcmlhbCksCisgICAgICAgICQoW21zYnVpbGRdOjpBZGQoCisgICAgICAgICAgICAkKFttc2J1aWxkXTo6TXVsdGlwbHkoJChSZWxlYXNlTGV2ZWxOdW1iZXIpLCAxMCkpLAorICAgICAgICAgICAgJChbbXNidWlsZF06Ok11bHRpcGx5KCQoTWljcm9WZXJzaW9uTnVtYmVyKSwgMTAwMCkpCisgICAgICAgICkpCisgICAgKSk8L0ZpZWxkM1ZhbHVlPgorICAgIDxGaWVsZDNWYWx1ZSBDb25kaXRpb249IiQoVXNlVGVzdE1hcmtlcikgPT0gJ3RydWUnIj4kKFttc2J1aWxkXTo6QWRkKCQoRmllbGQzVmFsdWUpLCA5MDAwKSk8L0ZpZWxkM1ZhbHVlPgorICAgIAorICAgIDwhLS0gVGhlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyBweXRob25YWS5kbGwgKHdpdGhvdXQgdGhlIGV4dGVuc2lvbikgLS0+CisgICAgPFB5RGxsTmFtZT5weXRob24kKE1ham9yVmVyc2lvbk51bWJlcikkKE1pbm9yVmVyc2lvbk51bWJlcikkKFB5RGVidWdFeHQpPC9QeURsbE5hbWU+CisKKyAgICA8IS0tIFRoZSB2ZXJzaW9uIGFuZCBwbGF0Zm9ybSB0YWcgdG8gaW5jbHVkZSBpbiAucHlkIGZpbGVuYW1lcyAtLT4KKyAgICA8UHlkVGFnIENvbmRpdGlvbj0iJChBcmNoTmFtZSkgPT0gJ3dpbjMyJyI+LmNwJChNYWpvclZlcnNpb25OdW1iZXIpJChNaW5vclZlcnNpb25OdW1iZXIpLXdpbjMyPC9QeWRUYWc+CisgICAgPFB5ZFRhZyBDb25kaXRpb249IiQoQXJjaE5hbWUpID09ICdhbWQ2NCciPi5jcCQoTWFqb3JWZXJzaW9uTnVtYmVyKSQoTWlub3JWZXJzaW9uTnVtYmVyKS13aW5fYW1kNjQ8L1B5ZFRhZz4KKyAgICAKKyAgICA8IS0tIFRoZSB2ZXJzaW9uIG51bWJlciBmb3Igc3lzLndpbnZlciAtLT4KKyAgICA8U3lzV2luVmVyPiQoTWFqb3JWZXJzaW9uTnVtYmVyKS4kKE1pbm9yVmVyc2lvbk51bWJlcikkKFB5QXJjaEV4dCkkKFB5VGVzdEV4dCk8L1N5c1dpblZlcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICAKKyAgPCEtLSBEaXNwbGF5cyB0aGUgY2FsY3VsYXRlZCB2ZXJzaW9uIGluZm8gLS0+CisgIDxUYXJnZXQgTmFtZT0iU2hvd1ZlcnNpb25JbmZvIj4KKyAgICA8TWVzc2FnZSBJbXBvcnRhbmNlPSJoaWdoIiBUZXh0PSJQeXRob25WZXJzaW9uTnVtYmVyOiAkKFB5dGhvblZlcnNpb25OdW1iZXIpIiAvPgorICAgIDxNZXNzYWdlIEltcG9ydGFuY2U9ImhpZ2giIFRleHQ9IlB5dGhvblZlcnNpb246ICAgICAgICQoUHl0aG9uVmVyc2lvbikiIC8+CisgICAgPE1lc3NhZ2UgSW1wb3J0YW5jZT0iaGlnaCIgVGV4dD0iUHl0aG9uVmVyc2lvbkhleDogICAgMHgkKFtTeXN0ZW0uVUludDMyXTo6UGFyc2UoJChQeXRob25WZXJzaW9uSGV4KSkuVG9TdHJpbmcoYFgwOGApKSIgLz4KKyAgICA8TWVzc2FnZSBJbXBvcnRhbmNlPSJoaWdoIiBUZXh0PSJGaWVsZDNWYWx1ZTogICAgICAgICAkKEZpZWxkM1ZhbHVlKSIgLz4KKyAgICA8TWVzc2FnZSBJbXBvcnRhbmNlPSJoaWdoIiBUZXh0PSJTeXNXaW5WZXI6ICAgICAgICAgICAkKFN5c1dpblZlcikiIC8+CisgICAgPE1lc3NhZ2UgSW1wb3J0YW5jZT0iaGlnaCIgVGV4dD0iUHlEbGxOYW1lOiAgICAgICAgICAgJChQeURsbE5hbWUpIiAvPgorICA8L1RhcmdldD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uLnZjeHByb2ogYi9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCmluZGV4IGJkMTI2MjQuLjYwMTE2ZGYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKKysrIGIvUENidWlsZC9weXRob24udmN4cHJvagpAQCAtMzcsNDMgKzM3LDkgQEAKICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgogICAgIDxQcm9qZWN0R3VpZD57QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fTwvUHJvamVjdEd1aWQ+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+CiAgICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KQEAgLTgxLDI2OCArNDcsMjQgQEAKICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgogICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8Q29tcGlsZUFzPkRlZmF1bHQ8L0NvbXBpbGVBcz4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8UmVzb3VyY2VDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+Ci0gICAgPC9SZXNvdXJjZUNvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8T3V0cHV0RmlsZT4kKE91dERpcilweXRob24uZXhlPC9PdXRwdXRGaWxlPgogICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CiAgICAgICA8U3RhY2tSZXNlcnZlU2l6ZT4yMDAwMDAwPC9TdGFja1Jlc2VydmVTaXplPgogICAgICAgPEJhc2VBZGRyZXNzPjB4MWQwMDAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXB5dGhvbi5leGU8L091dHB1dEZpbGU+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxTdGFja1Jlc2VydmVTaXplPjIwMDAwMDA8L1N0YWNrUmVzZXJ2ZVNpemU+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz5mYWxzZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj50cnVlPC9Ccm93c2VJbmZvcm1hdGlvbj4KLSAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXEluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXB5dGhvbl9kLmV4ZTwvT3V0cHV0RmlsZT4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+MjAwMDAwMDwvU3RhY2tSZXNlcnZlU2l6ZT4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz5mYWxzZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxCcm93c2VJbmZvcm1hdGlvbj50cnVlPC9Ccm93c2VJbmZvcm1hdGlvbj4KLSAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXEluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXB5dGhvbl9kLmV4ZTwvT3V0cHV0RmlsZT4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+NDE5NDMwNDwvU3RhY2tSZXNlcnZlU2l6ZT4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9uLmV4ZTwvT3V0cHV0RmlsZT4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+MjAwMDAwMDwvU3RhY2tSZXNlcnZlU2l6ZT4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9uLmV4ZTwvT3V0cHV0RmlsZT4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+MjAwMDAwMDwvU3RhY2tSZXNlcnZlU2l6ZT4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8Q29tcGlsZUFzPkRlZmF1bHQ8L0NvbXBpbGVBcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UmVzb3VyY2VDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+Ci0gICAgPC9SZXNvdXJjZUNvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8T3V0cHV0RmlsZT4kKE91dERpcilweXRob24uZXhlPC9PdXRwdXRGaWxlPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8U3RhY2tSZXNlcnZlU2l6ZT4yMDAwMDAwPC9TdGFja1Jlc2VydmVTaXplPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWQwMDAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXB5dGhvbi5leGU8L091dHB1dEZpbGU+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxTdGFja1Jlc2VydmVTaXplPjIwMDAwMDA8L1N0YWNrUmVzZXJ2ZVNpemU+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cUENccHljb24uaWNvIiAvPgogICA8L0l0ZW1Hcm91cD4KQEAgLTM1MCw3ICs3Miw3IEBACiAgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fZXhlLnJjIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccHl0aG9uLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQcm9ncmFtc1xweXRob24uYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KQEAgLTM2MSw0ICs4MywyNiBAQAogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgorICA8VGFyZ2V0IE5hbWU9IlZhbGlkYXRlVWNydGJhc2UiIEFmdGVyVGFyZ2V0cz0iQWZ0ZXJCdWlsZCI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICA8VWNydE5hbWU+dWNydGJhc2U8L1VjcnROYW1lPgorICAgICAgPFVjcnROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknID09ICdEZWJ1ZyciPnVjcnRiYXNlZDwvVWNydE5hbWU+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxFeGVjIENvbW1hbmQ9JyIkKE91dERpcilweXRob24kKFB5RGVidWdFeHQpLmV4ZSIgIiQoUHlTb3VyY2VQYXRoKVBDXHZhbGlkYXRlX3VjcnRiYXNlLnB5IiAkKFVjcnROYW1lKScgQ29udGludWVPbkVycm9yPSJ0cnVlIiAvPgorICA8L1RhcmdldD4KKyAgPFRhcmdldCBOYW1lPSJHZW5lcmF0ZVB5dGhvbkJhdCIgQWZ0ZXJUYXJnZXRzPSJBZnRlckJ1aWxkIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgIDxfQ29udGVudD5AcmVtIFRoaXMgc2NyaXB0IGludm9rZXMgdGhlIG1vc3QgcmVjZW50bHkgYnVpbHQgUHl0aG9uIHdpdGggYWxsIGFyZ3VtZW50cworQHJlbSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgaW50ZXJwcmV0ZXIuICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHRoZQorQHJlbSBidWlsZCBwcm9jZXNzIGFuZCBhbnkgY2hhbmdlcyAqd2lsbCogYmUgdGhyb3duIGF3YXkgYnkgdGhlIG5leHQKK0ByZW0gcmVidWlsZC4KK0ByZW0gVGhpcyBpcyBvbmx5IG1lYW50IGFzIGEgY29udmVuaWVuY2UgZm9yIGRldmVsb3BpbmcgQ1B5dGhvbgorQHJlbSBhbmQgdXNpbmcgaXQgb3V0c2lkZSBvZiB0aGF0IGNvbnRleHQgaXMgaWxsLWFkdmlzZWQuCitAZWNobyBSdW5uaW5nICQoQ29uZmlndXJhdGlvbilefCQoUGxhdGZvcm0pIGludGVycHJldGVyLi4uCitAIiQoT3V0RGlyKXB5dGhvbiQoUHlEZWJ1Z0V4dCkuZXhlIiAlKgorPC9fQ29udGVudD4KKyAgICAgIDxfRXhpc3RpbmdDb250ZW50IENvbmRpdGlvbj0iRXhpc3RzKCckKFB5U291cmNlUGF0aClweXRob24uYmF0JykiPiQoW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJyQoUHlTb3VyY2VQYXRoKXB5dGhvbi5iYXQnKSk8L19FeGlzdGluZ0NvbnRlbnQ+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxXcml0ZUxpbmVzVG9GaWxlIEZpbGU9IiQoUHlTb3VyY2VQYXRoKXB5dGhvbi5iYXQiIExpbmVzPSIkKF9Db250ZW50KSIgT3ZlcndyaXRlPSJ0cnVlIiBDb25kaXRpb249IickKF9Db250ZW50KScgIT0gJyQoX0V4aXN0aW5nQ29udGVudCknIiAvPgorICA8L1RhcmdldD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZTQ5MDZhNC4uMDY2MmE0ZSAxMDA2NDQKLS0tIGEvUENidWlsZC9weXRob24udmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvcHl0aG9uLnZjeHByb2ouZmlsdGVycwpAQCAtMTksOCArMTksOCBAQAogICAgIDwvUmVzb3VyY2VDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccHl0aG9uLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHJvZ3JhbXNccHl0aG9uLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob24zZGxsLnZjeHByb2ogYi9QQ2J1aWxkL3B5dGhvbjNkbGwudmN4cHJvagppbmRleCBiYzhmZjMxLi5jNjZjOGVmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbjNkbGwudmN4cHJvagorKysgYi9QQ2J1aWxkL3B5dGhvbjNkbGwudmN4cHJvagpAQCAtMSw2ICsxLDE0IEBACiDvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8V2luMzIiPgogICAgICAgPENvbmZpZ3VyYXRpb24+UEdJbnN0cnVtZW50PC9Db25maWd1cmF0aW9uPgogICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KQEAgLTMwLDE0NCArMzgsNDMgQEAKICAgICA8UHJvamVjdEd1aWQ+ezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX08L1Byb2plY3RHdWlkPgogICAgIDxSb290TmFtZXNwYWNlPnB5dGhvbjNkbGw8L1Jvb3ROYW1lc3BhY2U+CiAgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgorICAgIDxUYXJnZXROYW1lPnB5dGhvbjM8L1RhcmdldE5hbWU+CisgICAgPFN1cHBvcnRQR08+ZmFsc2U8L1N1cHBvcnRQR08+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPk1ha2VmaWxlPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5NYWtlZmlsZTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5NYWtlZmlsZTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Tk1ha2VCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLW5tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcik8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Y2QgJChQcm9qZWN0RGlyKVwuLlxQQwotbm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14ODYgT3V0RGlyPSQoT3V0RGlyKSByZWJ1aWxkPC9OTWFrZVJlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLSIkKFZTSW5zdGFsbERpcilcVkNcYmluXG5tYWtlLmV4ZSIgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14ODYgT3V0RGlyPSQoT3V0RGlyKSBjbGVhbjwvTk1ha2VDbGVhbkNvbW1hbmRMaW5lPgotICAgIDxOTWFrZU91dHB1dCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKE91dERpcilweXRob24zLmRsbDwvTk1ha2VPdXRwdXQ+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChOTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8Tk1ha2VJbmNsdWRlU2VhcmNoUGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKE5NYWtlSW5jbHVkZVNlYXJjaFBhdGgpPC9OTWFrZUluY2x1ZGVTZWFyY2hQYXRoPgotICAgIDxOTWFrZUZvcmNlZEluY2x1ZGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoTk1ha2VBc3NlbWJseVNlYXJjaFBhdGgpPC9OTWFrZUFzc2VtYmx5U2VhcmNoUGF0aD4KLSAgICA8Tk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChOTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcyk8L05NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzPgotICAgIDxOTWFrZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLW5tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcik8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLW5tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcikgcmVidWlsZDwvTk1ha2VSZUJ1aWxkQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlQ2xlYW5Db21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Y2QgJChQcm9qZWN0RGlyKVwuLlxQQwotIiQoVlNJbnN0YWxsRGlyKVxWQ1xiaW5cbm1ha2UuZXhlIiAvZiBweXRob24zLm1hayBNQUNISU5FPXg2NCBPdXREaXI9JChPdXREaXIpIGNsZWFuPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlT3V0cHV0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKE91dERpcilweXRob24zLmRsbDwvTk1ha2VPdXRwdXQ+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoTk1ha2VJbmNsdWRlU2VhcmNoUGF0aCk8L05NYWtlSW5jbHVkZVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkSW5jbHVkZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzKTwvTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXM+Ci0gICAgPE5NYWtlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLW5tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcik8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5jZCAkKFByb2plY3REaXIpXC4uXFBDCi1ubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg4NiBPdXREaXI9JChPdXREaXIpIHJlYnVpbGQ8L05NYWtlUmVCdWlsZENvbW1hbmRMaW5lPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5jZCAkKFByb2plY3REaXIpXC4uXFBDCi0iJChWU0luc3RhbGxEaXIpXFZDXGJpblxubWFrZS5leGUiIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcikgY2xlYW48L05NYWtlQ2xlYW5Db21tYW5kTGluZT4KLSAgICA8Tk1ha2VPdXRwdXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4kKE91dERpcilweXRob24zLmRsbDwvTk1ha2VPdXRwdXQ+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+JChOTWFrZUluY2x1ZGVTZWFyY2hQYXRoKTwvTk1ha2VJbmNsdWRlU2VhcmNoUGF0aD4KLSAgICA8Tk1ha2VGb3JjZWRJbmNsdWRlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+JChOTWFrZUFzc2VtYmx5U2VhcmNoUGF0aCk8L05NYWtlQXNzZW1ibHlTZWFyY2hQYXRoPgotICAgIDxOTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPiQoTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXMpPC9OTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcz4KLSAgICA8Tk1ha2VCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLW5tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcik8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Y2QgJChQcm9qZWN0RGlyKVwuLlxQQwotbm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14NjQgT3V0RGlyPSQoT3V0RGlyKSByZWJ1aWxkPC9OTWFrZVJlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLSIkKFZTSW5zdGFsbERpcilcVkNcYmluXG5tYWtlLmV4ZSIgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14NjQgT3V0RGlyPSQoT3V0RGlyKSBjbGVhbjwvTk1ha2VDbGVhbkNvbW1hbmRMaW5lPgotICAgIDxOTWFrZU91dHB1dCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4kKE91dERpcilweXRob24zLmRsbDwvTk1ha2VPdXRwdXQ+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+JChOTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8Tk1ha2VJbmNsdWRlU2VhcmNoUGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4kKE5NYWtlSW5jbHVkZVNlYXJjaFBhdGgpPC9OTWFrZUluY2x1ZGVTZWFyY2hQYXRoPgotICAgIDxOTWFrZUZvcmNlZEluY2x1ZGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPiQoTk1ha2VBc3NlbWJseVNlYXJjaFBhdGgpPC9OTWFrZUFzc2VtYmx5U2VhcmNoUGF0aD4KLSAgICA8Tk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+JChOTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcyk8L05NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzPgotICAgIDxOTWFrZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLW5tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcik8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLW5tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcikgcmVidWlsZDwvTk1ha2VSZUJ1aWxkQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlQ2xlYW5Db21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Y2QgJChQcm9qZWN0RGlyKVwuLlxQQwotIiQoVlNJbnN0YWxsRGlyKVxWQ1xiaW5cbm1ha2UuZXhlIiAvZiBweXRob24zLm1hayBNQUNISU5FPXg4NiBPdXREaXI9JChPdXREaXIpIGNsZWFuPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlT3V0cHV0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4kKE91dERpcilweXRob24zLmRsbDwvTk1ha2VPdXRwdXQ+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPiQoTk1ha2VJbmNsdWRlU2VhcmNoUGF0aCk8L05NYWtlSW5jbHVkZVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkSW5jbHVkZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4kKE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzKTwvTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXM+Ci0gICAgPE5NYWtlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPmNkICQoUHJvamVjdERpcilcLi5cUEMKLW5tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcik8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5jZCAkKFByb2plY3REaXIpXC4uXFBDCi1ubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg2NCBPdXREaXI9JChPdXREaXIpIHJlYnVpbGQ8L05NYWtlUmVCdWlsZENvbW1hbmRMaW5lPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5jZCAkKFByb2plY3REaXIpXC4uXFBDCi0iJChWU0luc3RhbGxEaXIpXFZDXGJpblxubWFrZS5leGUiIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcikgY2xlYW48L05NYWtlQ2xlYW5Db21tYW5kTGluZT4KLSAgICA8Tk1ha2VPdXRwdXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4kKE91dERpcilweXRob24zLmRsbDwvTk1ha2VPdXRwdXQ+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4kKE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9OTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDxOTWFrZUluY2x1ZGVTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+JChOTWFrZUluY2x1ZGVTZWFyY2hQYXRoKTwvTk1ha2VJbmNsdWRlU2VhcmNoUGF0aD4KLSAgICA8Tk1ha2VGb3JjZWRJbmNsdWRlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+JChOTWFrZUFzc2VtYmx5U2VhcmNoUGF0aCk8L05NYWtlQXNzZW1ibHlTZWFyY2hQYXRoPgotICAgIDxOTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPiQoTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXMpPC9OTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcz4KKyAgICA8X01hY2hpbmU+WDg2PC9fTWFjaGluZT4KKyAgICA8X01hY2hpbmUgQ29uZGl0aW9uPSIkKFBsYXRmb3JtKSA9PSAneDY0JyI+WDY0PC9fTWFjaGluZT4KKyAgICA8RXh0ZW5zaW9uc1RvRGVsZXRlT25DbGVhbj4kKEV4dGVuc2lvbnNUb0RlbGV0ZU9uQ2xlYW4pOyQoSW50RGlyKXB5dGhvbjNfZC5kZWY7JChJbnREaXIpcHl0aG9uM3N0dWIuZGVmPC9FeHRlbnNpb25zVG9EZWxldGVPbkNsZWFuPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSlzdHViLmxpYjwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZSBDb25kaXRpb249IiQoQ29uZmlndXJhdGlvbikgIT0gJ0RlYnVnJyI+JChQeVNvdXJjZVBhdGgpUENccHl0aG9uMy5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPE1vZHVsZURlZmluaXRpb25GaWxlIENvbmRpdGlvbj0iJChDb25maWd1cmF0aW9uKSA9PSAnRGVidWcnIj4kKEludERpcilweXRob24zX2QuZGVmPC9Nb2R1bGVEZWZpbml0aW9uRmlsZT4KKyAgICAgIDxFbnRyeVBvaW50U3ltYm9sPkRsbE1haW48L0VudHJ5UG9pbnRTeW1ib2w+CisgICAgPC9MaW5rPgorICAgIDxQcmVMaW5rRXZlbnQ+CisgICAgICA8Q29tbWFuZD5saWIgL25vbG9nbyAvZGVmOiIkKEludERpcilweXRob24zc3R1Yi5kZWYiIC9vdXQ6IiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSlzdHViLmxpYiIgL01BQ0hJTkU6JChfTWFjaGluZSk8L0NvbW1hbmQ+CisgICAgICA8TWVzc2FnZT5SZWJ1aWxkaW5nICQoVGFyZ2V0TmFtZSlzdHViLmxpYjwvTWVzc2FnZT4KKyAgICAgIDxPdXRwdXRzPiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSlzdHViLmxpYjwvT3V0cHV0cz4KKyAgICA8L1ByZUxpbmtFdmVudD4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbjMuZGVmIiAvPgpAQCAtMTgxLDQgKzg4LDUwIEBACiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+CisgIAorICA8VGFyZ2V0IE5hbWU9IkJ1aWxkUHl0aG9uM19kRGVmIiBCZWZvcmVUYXJnZXRzPSJCdWlsZFN0dWJEZWYiIElucHV0cz0iLi5cUENccHl0aG9uMy5kZWYiIE91dHB1dHM9IiQoSW50RGlyKXB5dGhvbjNfZC5kZWYiIENvbmRpdGlvbj0iJChDb25maWd1cmF0aW9uKSA9PSAnRGVidWcnIj4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgPF9EZWZMaW5lcyBSZW1vdmU9IkAoX0RlZkxpbmVzKSIgLz4KKyAgICAgIDxfTGluZXMgUmVtb3ZlPSJAKF9MaW5lcykiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPFJlYWRMaW5lc0Zyb21GaWxlIEZpbGU9Ii4uXFBDXHB5dGhvbjMuZGVmIj4KKyAgICAgIDxPdXRwdXQgVGFza1BhcmFtZXRlcj0iTGluZXMiIEl0ZW1OYW1lPSJfRGVmTGluZXMiIC8+CisgICAgPC9SZWFkTGluZXNGcm9tRmlsZT4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgIDxfUGF0dGVybjE+KD1weXRob24kKE1ham9yVmVyc2lvbk51bWJlcikkKE1pbm9yVmVyc2lvbk51bWJlcikpXC48L19QYXR0ZXJuMT4KKyAgICAgIDxfU3ViMT4kMV9kLjwvX1N1YjE+CisgICAgICA8X1BhdHRlcm4yPiJweXRob24zIjwvX1BhdHRlcm4yPgorICAgICAgPF9TdWIyPiJweXRob24zX2QiPC9fU3ViMj4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgIDxfTGluZXMgSW5jbHVkZT0iQChfRGVmTGluZXMpIj4KKyAgICAgICAgPE5ldz4kKFtTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnMuUmVnZXhdOjpSZXBsYWNlKCQoW1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy5SZWdleF06OlJlcGxhY2UoYCUoSWRlbnRpdHkpYCwgYCQoX1BhdHRlcm4xKWAsIGAkKF9TdWIxKWApKSwgYCQoX1BhdHRlcm4yKWAsIGAkKF9TdWIyKWApKTwvTmV3PgorICAgICAgPC9fTGluZXM+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPE1ha2VEaXIgRGlyZWN0b3JpZXM9IiQoSW50RGlyKSIgLz4KKyAgICA8V3JpdGVMaW5lc1RvRmlsZSBGaWxlPSIkKEludERpcilweXRob24zX2QuZGVmIiBMaW5lcz0iQChfTGluZXMtPiclKE5ldyknKSIgT3ZlcndyaXRlPSJ0cnVlIiAvPgorICA8L1RhcmdldD4KKyAgCisgIDxUYXJnZXQgTmFtZT0iQnVpbGRTdHViRGVmIiBCZWZvcmVUYXJnZXRzPSJQcmVMaW5rRXZlbnQiIElucHV0cz0iLi5cUENccHl0aG9uMy5kZWYiIE91dHB1dHM9IiQoSW50RGlyKXB5dGhvbjNzdHViLmRlZiI+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgIDxfRGVmTGluZXMgUmVtb3ZlPSJAKF9EZWZMaW5lcykiIC8+CisgICAgICA8X0xpbmVzIFJlbW92ZT0iQChfTGluZXMpIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxSZWFkTGluZXNGcm9tRmlsZSBGaWxlPSIuLlxQQ1xweXRob24zLmRlZiI+CisgICAgICA8T3V0cHV0IFRhc2tQYXJhbWV0ZXI9IkxpbmVzIiBJdGVtTmFtZT0iX0RlZkxpbmVzIiAvPgorICAgIDwvUmVhZExpbmVzRnJvbUZpbGU+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICA8X1BhdHRlcm4+Xltcdy5dKz0uKz9cLihbXiBdKykuKiQ8L19QYXR0ZXJuPgorICAgICAgPF9TdWI+JDE8L19TdWI+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICA8X0xpbmVzIEluY2x1ZGU9IkVYUE9SVFMiIC8+CisgICAgICA8X1N5bWJvbHMgSW5jbHVkZT0iQChfRGVmTGluZXMpIiBDb25kaXRpb249IiQoW1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy5SZWdleF06OklzTWF0Y2goYCUoSWRlbnRpdHkpYCwgYCQoX1BhdHRlcm4pYCkpIj4KKyAgICAgICAgPFN5bWJvbD4kKFtTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnMuUmVnZXhdOjpSZXBsYWNlKGAlKElkZW50aXR5KWAsIGAkKF9QYXR0ZXJuKWAsIGAkKF9TdWIpYCkpPC9TeW1ib2w+CisgICAgICA8L19TeW1ib2xzPgorICAgICAgPF9MaW5lcyBJbmNsdWRlPSJAKF9TeW1ib2xzLT4nJShTeW1ib2wpJykiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPE1ha2VEaXIgRGlyZWN0b3JpZXM9IiQoSW50RGlyKSIgLz4KKyAgICA8V3JpdGVMaW5lc1RvRmlsZSBGaWxlPSIkKEludERpcilweXRob24zc3R1Yi5kZWYiIExpbmVzPSJAKF9MaW5lcykiIE92ZXJ3cml0ZT0idHJ1ZSIgLz4KKyAgPC9UYXJnZXQ+CiA8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ogYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagppbmRleCA2MDIxY2Q3Li4zYTFiNWJhIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagorKysgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvagpAQCAtMzgsNDA1ICszOCw0MCBAQAogICAgIDxQcm9qZWN0R3VpZD57Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fTwvUHJvamVjdEd1aWQ+CiAgICAgPFJvb3ROYW1lc3BhY2U+cHl0aG9uY29yZTwvUm9vdE5hbWVzcGFjZT4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPEtpbGxQeXRob24+dHJ1ZTwvS2lsbFB5dGhvbj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIiAvPgogICA8UHJvcGVydHlHcm91cD4KICAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKFB5RGxsTmFtZSk8L1RhcmdldE5hbWU+Ci0gICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4kKFB5RGxsTmFtZSk8L1RhcmdldE5hbWU+Ci0gICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPiQoUHlEbGxOYW1lKTwvVGFyZ2V0TmFtZT4KLSAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKFB5RGxsTmFtZSk8L1RhcmdldE5hbWU+Ci0gICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKFB5RGxsTmFtZSk8L1RhcmdldE5hbWU+Ci0gICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+JChQeURsbE5hbWUpPC9UYXJnZXROYW1lPgotICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+JChQeURsbE5hbWUpPC9UYXJnZXROYW1lPgotICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKFB5RGxsTmFtZSk8L1RhcmdldE5hbWU+CisgICAgPFRhcmdldE5hbWU+JChQeURsbE5hbWUpPC9UYXJnZXROYW1lPgogICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8Q3VzdG9tQnVpbGRCZWZvcmVUYXJnZXRzPkxpbms8L0N1c3RvbUJ1aWxkQmVmb3JlVGFyZ2V0cz4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgogICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9abTIwMCAgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cUHl0aG9uOy4uXE1vZHVsZXNcemxpYjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoUHlTb3VyY2VQYXRoKVB5dGhvbjskKFB5U291cmNlUGF0aClNb2R1bGVzXHpsaWI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtNU19ETExfSUQ9IiQoU3lzV2luVmVyKSI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXEluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5kbGw8L091dHB1dEZpbGU+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8QmFzZUFkZHJlc3M+MHgxZTAwMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgotICAgIDxQcmVCdWlsZEV2ZW50PgotICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQotSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCi0gICAgZXhpdCAvYiAwCi0pPC9Db21tYW5kPgotICAgIDwvUHJlQnVpbGRFdmVudD4KLSAgICA8UHJlQnVpbGRFdmVudD4KLSAgICAgIDxNZXNzYWdlPktpbGxpbmcgYW55IHJ1bm5pbmcgJChQeXRob25FeGUpIGluc3RhbmNlcy4uLjwvTWVzc2FnZT4KLSAgICA8L1ByZUJ1aWxkRXZlbnQ+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L1ptMjAwICAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxQeXRob247Li5cTW9kdWxlc1x6bGliOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXEluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gICAgPFByZUJ1aWxkRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCi1JRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKLSAgICBleGl0IC9iIDAKLSk8L0NvbW1hbmQ+Ci0gICAgPC9QcmVCdWlsZEV2ZW50PgotICAgIDxQcmVCdWlsZEV2ZW50PgotICAgICAgPE1lc3NhZ2U+S2lsbGluZyBhbnkgcnVubmluZyAkKFB5dGhvbkV4ZSkgaW5zdGFuY2VzLi4uPC9NZXNzYWdlPgotICAgIDwvUHJlQnVpbGRFdmVudD4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vWm0yMDAgICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5EZWZhdWx0PC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+ZmFsc2U8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXFB5dGhvbjsuLlxNb2R1bGVzXHpsaWI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UmVzb3VyY2VDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxJbmNsdWRlOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9SZXNvdXJjZUNvbXBpbGU+Ci0gICAgPFByZUxpbmtFdmVudD4KLSAgICAgIDxNZXNzYWdlPkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uPC9NZXNzYWdlPgotICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBEZWJ1ZyAiJChJbnREaXIpIjwvQ29tbWFuZD4KLSAgICA8L1ByZUxpbmtFdmVudD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoSW50RGlyKWdldGJ1aWxkaW5mby5vOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICAgIDxQcmVCdWlsZEV2ZW50PgotICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQotSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCi0gICAgZXhpdCAvYiAwCi0pPC9Db21tYW5kPgotICAgIDwvUHJlQnVpbGRFdmVudD4KLSAgICA8UHJlQnVpbGRFdmVudD4KLSAgICAgIDxNZXNzYWdlPktpbGxpbmcgYW55IHJ1bm5pbmcgJChQeXRob25FeGUpIGluc3RhbmNlcy4uLjwvTWVzc2FnZT4KLSAgICA8L1ByZUJ1aWxkRXZlbnQ+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxPcHRpb25zPi9abTIwMCAgJShBZGRpdGlvbmFsT3B0aW9ucyk8L0FkZGl0aW9uYWxPcHRpb25zPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkRlZmF1bHQ8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz5mYWxzZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cUHl0aG9uOy4uXE1vZHVsZXNcemxpYjslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXEluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIERlYnVnICIkKEludERpcikiPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gICAgPFByZUJ1aWxkRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCi1JRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKLSAgICBleGl0IC9iIDAKLSk8L0NvbW1hbmQ+Ci0gICAgPC9QcmVCdWlsZEV2ZW50PgotICAgIDxQcmVCdWlsZEV2ZW50PgotICAgICAgPE1lc3NhZ2U+S2lsbGluZyBhbnkgcnVubmluZyAkKFB5dGhvbkV4ZSkgaW5zdGFuY2VzLi4uPC9NZXNzYWdlPgotICAgIDwvUHJlQnVpbGRFdmVudD4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L1ptMjAwICAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxQeXRob247Li5cTW9kdWxlc1x6bGliOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXEluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5kbGw8L091dHB1dEZpbGU+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZTAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICAgIDxQcmVCdWlsZEV2ZW50PgotICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQotSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCi0gICAgZXhpdCAvYiAwCi0pPC9Db21tYW5kPgotICAgIDwvUHJlQnVpbGRFdmVudD4KLSAgICA8UHJlQnVpbGRFdmVudD4KLSAgICAgIDxNZXNzYWdlPktpbGxpbmcgYW55IHJ1bm5pbmcgJChQeXRob25FeGUpIGluc3RhbmNlcy4uLjwvTWVzc2FnZT4KLSAgICA8L1ByZUJ1aWxkRXZlbnQ+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vWm0yMDAgICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXFB5dGhvbjsuLlxNb2R1bGVzXHpsaWI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cSW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxQcmVMaW5rRXZlbnQ+Ci0gICAgICA8TWVzc2FnZT5HZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLjwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpXCI8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKEludERpcilnZXRidWlsZGluZm8ubzslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWUwMDAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gICAgPFByZUJ1aWxkRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCi1JRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKLSAgICBleGl0IC9iIDAKLSk8L0NvbW1hbmQ+Ci0gICAgPC9QcmVCdWlsZEV2ZW50PgotICAgIDxQcmVCdWlsZEV2ZW50PgotICAgICAgPE1lc3NhZ2U+S2lsbGluZyBhbnkgcnVubmluZyAkKFB5dGhvbkV4ZSkgaW5zdGFuY2VzLi4uPC9NZXNzYWdlPgotICAgIDwvUHJlQnVpbGRFdmVudD4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucz4vWm0yMDAgICUoQWRkaXRpb25hbE9wdGlvbnMpPC9BZGRpdGlvbmFsT3B0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXFB5dGhvbjsuLlxNb2R1bGVzXHpsaWI7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cSW5jbHVkZTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxQcmVMaW5rRXZlbnQ+Ci0gICAgICA8TWVzc2FnZT5HZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLjwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpXCI8L0NvbW1hbmQ+Ci0gICAgPC9QcmVMaW5rRXZlbnQ+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKEludERpcilnZXRidWlsZGluZm8ubzslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpJChQeURsbE5hbWUpLmRsbDwvT3V0cHV0RmlsZT4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gICAgPFByZUJ1aWxkRXZlbnQ+Ci0gICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCi1JRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKLSAgICBleGl0IC9iIDAKLSk8L0NvbW1hbmQ+Ci0gICAgPC9QcmVCdWlsZEV2ZW50PgotICAgIDxQcmVCdWlsZEV2ZW50PgotICAgICAgPE1lc3NhZ2U+S2lsbGluZyBhbnkgcnVubmluZyAkKFB5dGhvbkV4ZSkgaW5zdGFuY2VzLi4uPC9NZXNzYWdlPgotICAgIDwvUHJlQnVpbGRFdmVudD4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbE9wdGlvbnM+L1ptMjAwICAlKEFkZGl0aW9uYWxPcHRpb25zKTwvQWRkaXRpb25hbE9wdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlxQeXRob247Li5cTW9kdWxlc1x6bGliOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXEluY2x1ZGU7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8UHJlTGlua0V2ZW50PgotICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgotICAgIDwvUHJlTGlua0V2ZW50PgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFlMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICAgIDxQcmVCdWlsZEV2ZW50PgotICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQotSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCi0gICAgZXhpdCAvYiAwCi0pPC9Db21tYW5kPgotICAgIDwvUHJlQnVpbGRFdmVudD4KLSAgICA8UHJlQnVpbGRFdmVudD4KLSAgICAgIDxNZXNzYWdlPktpbGxpbmcgYW55IHJ1bm5pbmcgJChQeXRob25FeGUpIGluc3RhbmNlcy4uLjwvTWVzc2FnZT4KLSAgICA8L1ByZUJ1aWxkRXZlbnQ+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVcYWJzdHJhY3QuaCIgLz4KQEAgLTQ4Niw2ICsxMjEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxub2RlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXG9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxvYmppbXBsLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXG9kaWN0b2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXG9wY29kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxvc2RlZnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccGFyc2V0b2suaCIgLz4KQEAgLTUwMiw2ICsxMzgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWV4cGF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5ZnBlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5Z2V0b3B0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5bGlmZWN5Y2xlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5bWF0aC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweXRpbWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHltYWNyby5oIiAvPgpAQCAtNTEwLDYgKzE0Nyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5c3RhdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHlzdHJjbXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHlzdHJ0b2QuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHlzdHJoZXguaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVcZHRvYS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxQeXRob24tYXN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXFB5dGhvbi5oIiAvPgpAQCAtNjc1LDYgKzMxMyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxPYmplY3RzXG5hbWVzcGFjZW9iamVjdC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xvYmplY3QuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE9iamVjdHNcb2JtYWxsb2MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE9iamVjdHNcb2RpY3RvYmplY3QuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE9iamVjdHNccmFuZ2VvYmplY3QuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc2V0b2JqZWN0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMiIC8+CkBAIC02OTYsOSArMzM1LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBhcnNlclxwYXJzZXIuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBhcnNlclxwYXJzZXRvay5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUGFyc2VyXHRva2VuaXplci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcaW52YWxpZF9wYXJhbWV0ZXJfaGFuZGxlci5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcd2lucmVnLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xjb25maWcuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXGRsX250LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xnZXRwYXRocC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcbXN2Y3J0bW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHloYXNoLmMiIC8+CkBAIC03MzQsMTAgKzM3MywxMiBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5YXJlbmEuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWN0eXBlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHlmcGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWxpZmVjeWNsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5bWF0aC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5dGltZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5c3RhdGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweXN0cmNtcC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5c3RyaGV4LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHlzdHJ0b2QuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxkdG9hLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25cUHl0aG9uLWFzdC5jIiAvPgpAQCAtNzQ5LDIzICszOTAsMzAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblx0cmFjZWJhY2suYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xkbF9udC5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJraWxsX3B5dGhvbi52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0Pns2ZGUxMDc0NC1lMzk2LTQwYTUtYjRlMi0xYjY5YWE3YzhkMzF9PC9Qcm9qZWN0PgotICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0ibWFrZV9idWlsZGluZm8udmN4cHJvaiI+Ci0gICAgICA8UHJvamVjdD57YzczZjBlYzEtMzU4Yi00MTc3LTk0MGYtMDg0NmFjOGIwNGNkfTwvUHJvamVjdD4KLSAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+Ci0gICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgotICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Im1ha2VfdmVyc2lvbmluZm8udmN4cHJvaiI+Ci0gICAgICA8UHJvamVjdD57ZjBlMDU0MWUtZjE3ZC00MzBiLTk3YzQtOTNhZGYwZGQyODRlfTwvUHJvamVjdD4KLSAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+Ci0gICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KKyAgPFRhcmdldCBOYW1lPSJfR2V0QnVpbGRJbmZvIiBCZWZvcmVUYXJnZXRzPSJQcmVwYXJlRm9yQnVpbGQiPgorICAgIDxFeGVjIENvbW1hbmQ9ImhnIGlkIC1iICZndDsgJnF1b3Q7JChJbnREaXIpaGdicmFuY2gudHh0JnF1b3Q7IiBDb250aW51ZU9uRXJyb3I9InRydWUiIC8+CisgICAgPEV4ZWMgQ29tbWFuZD0iaGcgaWQgLWkgJmd0OyAmcXVvdDskKEludERpciloZ3ZlcnNpb24udHh0JnF1b3Q7IiBDb250aW51ZU9uRXJyb3I9InRydWUiIC8+CisgICAgPEV4ZWMgQ29tbWFuZD0iaGcgaWQgLXQgJmd0OyAmcXVvdDskKEludERpciloZ3RhZy50eHQmcXVvdDsiIENvbnRpbnVlT25FcnJvcj0idHJ1ZSIgLz4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgIDxIZ0JyYW5jaCBDb25kaXRpb249IkV4aXN0cygnJChJbnREaXIpaGdicmFuY2gudHh0JykiPiQoW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJyQoSW50RGlyKWhnYnJhbmNoLnR4dCcpLlRyaW0oKSk8L0hnQnJhbmNoPgorICAgICAgPEhnVmVyc2lvbiBDb25kaXRpb249IkV4aXN0cygnJChJbnREaXIpaGd2ZXJzaW9uLnR4dCcpIj4kKFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCckKEludERpciloZ3ZlcnNpb24udHh0JykuVHJpbSgpKTwvSGdWZXJzaW9uPgorICAgICAgPEhnVGFnIENvbmRpdGlvbj0iRXhpc3RzKCckKEludERpciloZ3RhZy50eHQnKSI+JChbU3lzdGVtLklPLkZpbGVdOjpSZWFkQWxsVGV4dCgnJChJbnREaXIpaGd0YWcudHh0JykuVHJpbSgpKTwvSGdUYWc+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMiPgorICAgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SEdWRVJTSU9OPSIkKEhnVmVyc2lvbikiO0hHVEFHPSIkKEhnVGFnKSI7SEdCUkFOQ0g9IiQoSGdCcmFuY2gpIjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8L0NsQ29tcGlsZT4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgPC9UYXJnZXQ+CisgIDxUYXJnZXQgTmFtZT0iX1dhcm5BYm91dFRvb2xzZXQiIEJlZm9yZVRhcmdldHM9IlByZXBhcmVGb3JCdWlsZCIgQ29uZGl0aW9uPSIkKFBsYXRmb3JtVG9vbHNldCkgIT0gJ3YxNDAnIj4KKyAgICA8V2FybmluZyBUZXh0PSJUb29sc2V0ICQoUGxhdGZvcm1Ub29sc2V0KSBpcyBub3QgdXNlZCBmb3Igb2ZmaWNpYWwgYnVpbGRzLiBZb3VyIGJ1aWxkIG1heSBoYXZlIGVycm9ycyBvciBpbmNvbXBhdGliaWxpdGllcy4iIC8+CisgIDwvVGFyZ2V0PgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDhjNjUyNDcuLjgzN2I3MzYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMjE2LDYgKzIxNiw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5Z2V0b3B0LmgiPgogICAgICAgPEZpbHRlcj5JbmNsdWRlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5bGlmZWN5Y2xlLmgiPgorICAgICAgPEZpbHRlcj5JbmNsdWRlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5bWF0aC5oIj4KICAgICAgIDxGaWx0ZXI+SW5jbHVkZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMjQwLDYgKzI0Myw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5c3RydG9kLmgiPgogICAgICAgPEZpbHRlcj5JbmNsdWRlPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5c3RyaGV4LmgiPgorICAgICAgPEZpbHRlcj5JbmNsdWRlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXGR0b2EuaCI+CiAgICAgICA8RmlsdGVyPkluY2x1ZGU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTQyOSw2ICs0MzUsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xoYXNodGFibGUuaCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVcb2RpY3RvYmplY3QuaCI+CisgICAgICA8RmlsdGVyPkluY2x1ZGU8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyI+CkBAIC04OTAsNiArODk5LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWZwZS5jIj4KICAgICAgIDxGaWx0ZXI+UHl0aG9uPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHlsaWZlY3ljbGUuYyI+CisgICAgICA8RmlsdGVyPlB5dGhvbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5bWF0aC5jIj4KICAgICAgIDxGaWx0ZXI+UHl0aG9uPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC05MDIsNiArOTE0LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweXN0cmNtcC5jIj4KICAgICAgIDxGaWx0ZXI+UHl0aG9uPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQeXRob25ccHlzdHJoZXguYyI+CisgICAgICA8RmlsdGVyPlB5dGhvbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5c3RydG9kLmMiPgogICAgICAgPEZpbHRlcj5QeXRob248L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTk1Myw2ICs5NjgsMTIgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmMiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xpbnZhbGlkX3BhcmFtZXRlcl9oYW5kbGVyLmMiPgorICAgICAgPEZpbHRlcj5QQzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xvZGljdG9iamVjdC5jIj4KKyAgICAgIDxGaWx0ZXI+T2JqZWN0czwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyI+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbncudmN4cHJvaiBiL1BDYnVpbGQvcHl0aG9udy52Y3hwcm9qCmluZGV4IDEyMTQ1NjkuLmNhZWQxZTggMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9udy52Y3hwcm9qCisrKyBiL1BDYnVpbGQvcHl0aG9udy52Y3hwcm9qCkBAIC0zNiwyOTYgKzM2LDI5IEBACiAgIDwvSXRlbUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CiAgICAgPFByb2plY3RHdWlkPntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9PC9Qcm9qZWN0R3VpZD4KKyAgICA8U3VwcG9ydFBHTz5mYWxzZTwvU3VwcG9ydFBHTz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+CiAgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+ZmFsc2U8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X1dJTkRPV1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1Z0RMTDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8Q29tcGlsZUFzPkRlZmF1bHQ8L0NvbXBpbGVBcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UmVzb3VyY2VDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+Ci0gICAgPC9SZXNvdXJjZUNvbXBpbGU+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9ud19kLmV4ZTwvT3V0cHV0RmlsZT4KICAgICAgIDxTdGFja1Jlc2VydmVTaXplPjIwMDAwMDA8L1N0YWNrUmVzZXJ2ZVNpemU+CiAgICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPmZhbHNlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9XSU5ET1dTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9ud19kLmV4ZTwvT3V0cHV0RmlsZT4KLSAgICAgIDxTdGFja1Jlc2VydmVTaXplPjIwMDAwMDA8L1N0YWNrUmVzZXJ2ZVNpemU+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9XSU5ET1dTOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8Q29tcGlsZUFzPkRlZmF1bHQ8L0NvbXBpbGVBcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8UmVzb3VyY2VDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+Ci0gICAgPC9SZXNvdXJjZUNvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8T3V0cHV0RmlsZT4kKE91dERpcilweXRob253LmV4ZTwvT3V0cHV0RmlsZT4KLSAgICAgIDxTdGFja1Jlc2VydmVTaXplPjIwMDAwMDA8L1N0YWNrUmVzZXJ2ZVNpemU+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxZDAwMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X1dJTkRPV1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXB5dGhvbncuZXhlPC9PdXRwdXRGaWxlPgotICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+MjAwMDAwMDwvU3RhY2tSZXNlcnZlU2l6ZT4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9XUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9udy5leGU8L091dHB1dEZpbGU+Ci0gICAgICA8U3RhY2tSZXNlcnZlU2l6ZT4yMDAwMDAwPC9TdGFja1Jlc2VydmVTaXplPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWQwMDAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9XUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9udy5leGU8L091dHB1dEZpbGU+Ci0gICAgICA8U3RhY2tSZXNlcnZlU2l6ZT4yMDAwMDAwPC9TdGFja1Jlc2VydmVTaXplPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWQwMDAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X1dJTkRPV1M7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxSZXNvdXJjZUNvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKXB5dGhvbncuZXhlPC9PdXRwdXRGaWxlPgotICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+MjAwMDAwMDwvU3RhY2tSZXNlcnZlU2l6ZT4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9XUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWRETEw8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPFJlc291cmNlQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPgotICAgIDwvUmVzb3VyY2VDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9udy5leGU8L091dHB1dEZpbGU+Ci0gICAgICA8U3RhY2tSZXNlcnZlU2l6ZT4yMDAwMDAwPC9TdGFja1Jlc2VydmVTaXplPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MWQwMDAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXdsYXVuY2hlci52Y3hwcm9qIGIvUENidWlsZC9weXdsYXVuY2hlci52Y3hwcm9qCmluZGV4IDk2ZWE0MjEuLmVhYmY4ODMgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl3bGF1bmNoZXIudmN4cHJvagorKysgYi9QQ2J1aWxkL3B5d2xhdW5jaGVyLnZjeHByb2oKQEAgLTM3LDIwMCArMzcsMzYgQEAKICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgogICAgIDxQcm9qZWN0R3VpZD57MUQ0QjE4RDMtN0MxMi00RUNCLTkxNzktODUzMUZGODc2Q0U2fTwvUHJvamVjdEd1aWQ+CiAgICAgPFJvb3ROYW1lc3BhY2U+cHl3bGF1bmNoZXI8L1Jvb3ROYW1lc3BhY2U+CisgICAgPFRhcmdldE5hbWU+cHl3PC9UYXJnZXROYW1lPgorICAgIDxTdXBwb3J0UEdPPmZhbHNlPC9TdXBwb3J0UEdPPgogICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgogICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8UHJvcGVydHlHcm91cD4KKyAgICA8TWFrZVZlcnNpb25JbmZvQmVmb3JlVGFyZ2V0PkNsQ29tcGlsZTwvTWFrZVZlcnNpb25JbmZvQmVmb3JlVGFyZ2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9ImRlYnVnLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJyZWxlYXNlLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8VGFyZ2V0TmFtZT5weXdfZDwvVGFyZ2V0TmFtZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgotICAgIDxUYXJnZXROYW1lPnB5d19kPC9UYXJnZXROYW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxUYXJnZXROYW1lPnB5dzwvVGFyZ2V0TmFtZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPFRhcmdldE5hbWU+cHl3PC9UYXJnZXROYW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPFRhcmdldE5hbWU+cHl3PC9UYXJnZXROYW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8VGFyZ2V0TmFtZT5weXc8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KICAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9XUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpJChUYXJnZXROYW1lKSQoVGFyZ2V0RXh0KTwvT3V0cHV0RmlsZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9XUzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpJChUYXJnZXROYW1lKSQoVGFyZ2V0RXh0KTwvT3V0cHV0RmlsZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9XUztOREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5hYmxlQ09NREFURm9sZGluZz5mYWxzZTwvRW5hYmxlQ09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgotICAgICAgPElnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+ZmFsc2U8L0lnbm9yZUFsbERlZmF1bHRMaWJyYXJpZXM+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz52ZXJzaW9uLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9XSU5ET1dTO05ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPmZhbHNlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgICA8SWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz5mYWxzZTwvSWdub3JlQWxsRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPnZlcnNpb24ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X1dJTkRPV1M7TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz52ZXJzaW9uLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9XSU5ET1dTO05ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz52ZXJzaW9uLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9XSU5ET1dTO05ERUJVRztfV0lONjQ7X01fWDY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+dmVyc2lvbi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lORE9XUztOREVCVUc7X1dJTjY0O19NX1g2NDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXGxhdW5jaGVyLmMiIC8+CiAgIDwvSXRlbUdyb3VwPgpAQCAtMjQwLDExICs3Niw2IEBACiAgIDxJdGVtR3JvdXA+CiAgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweWxhdW5jaGVyLnJjIiAvPgogICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJtYWtlX3ZlcnNpb25pbmZvLnZjeHByb2oiPgotICAgICAgPFByb2plY3Q+e2YwZTA1NDFlLWYxN2QtNDMwYi05N2M0LTkzYWRmMGRkMjg0ZX08L1Byb2plY3Q+Ci0gICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgotICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcmVhZG1lLnR4dCBiL1BDYnVpbGQvcmVhZG1lLnR4dAppbmRleCBlMGM2Njg1Li5kNDVlYjI3IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3JlYWRtZS50eHQKKysrIGIvUENidWlsZC9yZWFkbWUudHh0CkBAIC0xLDQ5ICsxLDU0IEBACitRdWljayBTdGFydCBHdWlkZQ0KKy0tLS0tLS0tLS0tLS0tLS0tDQorDQorMS4gIEluc3RhbGwgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAxNSwgYW55IGVkaXRpb24uDQorMi4gIEluc3RhbGwgU3VidmVyc2lvbiwgYW5kIG1ha2Ugc3VyZSAnc3ZuLmV4ZScgaXMgb24geW91ciBQQVRILg0KKzMuICBSdW4gImJ1aWxkLmJhdCAtZSIgdG8gYnVpbGQgUHl0aG9uIGluIDMyLWJpdCBSZWxlYXNlIGNvbmZpZ3VyYXRpb24uDQorNC4gIChPcHRpb25hbCwgYnV0IHJlY29tbWVuZGVkKSBSdW4gdGhlIHRlc3Qgc3VpdGUgd2l0aCAicnQuYmF0IC1xIi4NCisNCisNCiBCdWlsZGluZyBQeXRob24gdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysNCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiANCiBUaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIENQeXRob24gZm9yIE1pY3Jvc29mdCBXaW5kb3dzIE5UIHZlcnNpb24NCi01LjEgb3IgaGlnaGVyIChXaW5kb3dzIFhQLCBXaW5kb3dzIFNlcnZlciAyMDAzLCBvciBsYXRlcikgb24gMzIgYW5kIDY0DQorNi4wIG9yIGhpZ2hlciAoV2luZG93cyBWaXN0YSwgV2luZG93cyBTZXJ2ZXIgMjAwOCwgb3IgbGF0ZXIpIG9uIDMyIGFuZCA2NA0KIGJpdCBwbGF0Zm9ybXMuICBVc2luZyB0aGlzIGRpcmVjdG9yeSByZXF1aXJlcyBhbiBpbnN0YWxsYXRpb24gb2YNCi1NaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDEwIChNU1ZDIDEwLjApIG9mIGFueSBlZGl0aW9uLiAgVGhlIHNwZWNpZmljDQorTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxNSAoTVNWQyAxNC4wKSBvZiBhbnkgZWRpdGlvbi4gIFRoZSBzcGVjaWZpYw0KIHJlcXVpcmVtZW50cyBhcmUgYXMgZm9sbG93czoNCiANCi1WaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uDQotICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyAzMi1iaXQgRGVidWcgYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMuDQorVmlzdWFsIFN0dWRpbyBFeHByZXNzIDIwMTUgZm9yIERlc2t0b3ANCitWaXN1YWwgU3R1ZGlvIFByb2Zlc3Npb25hbCAyMDE1DQorICAgIEVpdGhlciBlZGl0aW9uIGlzIHN1ZmZpY2llbnQgZm9yIGJ1aWxkaW5nIGFsbCBjb25maWd1cmF0aW9ucyBleGNlcHQNCisgICAgZm9yIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbi4NCiAgICAgVGhlIFB5dGhvbiBidWlsZCBzb2x1dGlvbiBwY2J1aWxkLnNsbiBtYWtlcyB1c2Ugb2YgU29sdXRpb24gRm9sZGVycywNCiAgICAgd2hpY2ggdGhpcyBlZGl0aW9uIGRvZXMgbm90IHN1cHBvcnQuICBBbnkgdGltZSBwY2J1aWxkLnNsbiBpcyBvcGVuZWQNCi0gICAgb3IgcmVsb2FkZWQgYnkgVmlzdWFsIEMrKywgYSB3YXJuaW5nIGFib3V0IFNvbHV0aW9uIEZvbGRlcnMgd2lsbCBiZQ0KLSAgICBkaXNwbGF5ZWQgd2hpY2ggY2FuIGJlIHNhZmVseSBkaXNtaXNzZWQgd2l0aCBubyBpbXBhY3Qgb24geW91cg0KKyAgICBvciByZWxvYWRlZCBieSBWaXN1YWwgU3R1ZGlvLCBhIHdhcm5pbmcgYWJvdXQgU29sdXRpb24gRm9sZGVycyB3aWxsDQorICAgIGJlIGRpc3BsYXllZCwgd2hpY2ggY2FuIGJlIHNhZmVseSBkaXNtaXNzZWQgd2l0aCBubyBpbXBhY3Qgb24geW91cg0KICAgICBhYmlsaXR5IHRvIGJ1aWxkIFB5dGhvbi4NCi1WaXN1YWwgU3R1ZGlvIDIwMTAgUHJvZmVzc2lvbmFsIEVkaXRpb24NCiAgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIDY0LWJpdCBEZWJ1ZyBhbmQgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcw0KLVZpc3VhbCBTdHVkaW8gMjAxMCBQcmVtaXVtIEVkaXRpb24NCitWaXN1YWwgU3R1ZGlvIFByZW1pdW0gMjAxNQ0KICAgICBSZXF1aXJlZCBmb3IgYnVpbGRpbmcgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcyB0aGF0IG1ha2UgdXNlIG9mDQogICAgIFByb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbiAoUEdPKSwgb24gZWl0aGVyIHBsYXRmb3JtLg0KIA0KLUluc3RhbGxpbmcgU2VydmljZSBQYWNrIDEgZm9yIFZpc3VhbCBTdHVkaW8gMjAxMCBpcyBoaWdobHkgcmVjb21tZW5kZWQNCi10byBhdm9pZCBMTksxMTIzIGVycm9ycy4NCi0NCiBBbGwgeW91IG5lZWQgdG8gZG8gdG8gYnVpbGQgaXMgb3BlbiB0aGUgc29sdXRpb24gInBjYnVpbGQuc2xuIiBpbiBWaXN1YWwNCiBTdHVkaW8sIHNlbGVjdCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBwbGF0Zm9ybSwNCi10aGVuIGJ1aWxkIHdpdGggIkJ1aWxkIFNvbHV0aW9uIiBvciB0aGUgRjcga2V5Ym9hcmQgc2hvcnRjdXQuICBZb3UgY2FuDQotYWxzbyBidWlsZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdXNpbmcgdGhlICJidWlsZC5iYXQiIHNjcmlwdCBpbiB0aGlzDQotZGlyZWN0b3J5LiAgVGhlIHNvbHV0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgdGhlIHByb2plY3RzIGluIHRoZQ0KLWNvcnJlY3Qgb3JkZXIuDQordGhlbiBidWlsZCB3aXRoICJCdWlsZCBTb2x1dGlvbiIuICBZb3UgY2FuIGFsc28gYnVpbGQgZnJvbSB0aGUgY29tbWFuZA0KK2xpbmUgdXNpbmcgdGhlICJidWlsZC5iYXQiIHNjcmlwdCBpbiB0aGlzIGRpcmVjdG9yeTsgc2VlIGJlbG93IGZvcg0KK2RldGFpbHMuICBUaGUgc29sdXRpb24gaXMgY29uZmlndXJlZCB0byBidWlsZCB0aGUgcHJvamVjdHMgaW4gdGhlIGNvcnJlY3QNCitvcmRlci4NCiANCiBUaGUgc29sdXRpb24gY3VycmVudGx5IHN1cHBvcnRzIHR3byBwbGF0Zm9ybXMuICBUaGUgV2luMzIgcGxhdGZvcm0gaXMNCi11c2VkIHRvIGJ1aWxkIHN0YW5kYXJkIHg4Ni1jb21wYXRpYmxlIDMyLWJpdCBiaW5hcmllcywgb3V0cHV0IGludG8gdGhpcw0KLWRpcmVjdG9yeS4gIFRoZSB4NjQgcGxhdGZvcm0gaXMgdXNlZCBmb3IgYnVpbGRpbmcgNjQtYml0IEFNRDY0IChha2ENCi14ODZfNjQgb3IgRU02NFQpIGJpbmFyaWVzLCBvdXRwdXQgaW50byB0aGUgYW1kNjQgc3ViLWRpcmVjdG9yeSB3aGljaA0KLXdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICBUaGUgSXRhbml1bSAoSUEtNjQpDQotcGxhdGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIFNlZSB0aGUgIkJ1aWxkaW5nIGZvciBBTUQ2NCIgc2VjdGlvbg0KLWJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDY0LWJpdCBidWlsZHMuDQordXNlZCB0byBidWlsZCBzdGFuZGFyZCB4ODYtY29tcGF0aWJsZSAzMi1iaXQgYmluYXJpZXMsIG91dHB1dCBpbnRvIHRoZQ0KK3dpbjMyIHN1Yi1kaXJlY3RvcnkuICBUaGUgeDY0IHBsYXRmb3JtIGlzIHVzZWQgZm9yIGJ1aWxkaW5nIDY0LWJpdCBBTUQ2NA0KKyhha2EgeDg2XzY0IG9yIEVNNjRUKSBiaW5hcmllcywgb3V0cHV0IGludG8gdGhlIGFtZDY0IHN1Yi1kaXJlY3RvcnkuDQorVGhlIEl0YW5pdW0gKElBLTY0KSBwbGF0Zm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLg0KIA0KIEZvdXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHNvbHV0aW9uOg0KIERlYnVnDQogICAgIFVzZWQgdG8gYnVpbGQgUHl0aG9uIHdpdGggZXh0cmEgZGVidWdnaW5nIGNhcGFiaWxpdGllcywgZXF1aXZhbGVudA0KICAgICB0byB1c2luZyAuL2NvbmZpZ3VyZSAtLXdpdGgtcHlkZWJ1ZyBvbiBVTklYLiAgQWxsIGJpbmFyaWVzIGJ1aWx0DQogICAgIHVzaW5nIHRoaXMgY29uZmlndXJhdGlvbiBoYXZlICJfZCIgYWRkZWQgdG8gdGhlaXIgbmFtZToNCi0gICAgcHl0aG9uMzRfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uICBCb3RoIHRoZQ0KKyAgICBweXRob24zNV9kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4gIEJvdGggdGhlDQogICAgIGJ1aWxkIGFuZCBydCAocnVuIHRlc3QpIGJhdGNoIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGFjY2VwdCBhIC1kDQogICAgIG9wdGlvbiBmb3IgZGVidWcgYnVpbGRzLiAgSWYgeW91IGFyZSBidWlsZGluZyBQeXRob24gdG8gaGVscCB3aXRoDQogICAgIGRldmVsb3BtZW50IG9mIENQeXRob24sIHlvdSB3aWxsIG1vc3QgbGlrZWx5IHVzZSB0aGlzIGNvbmZpZ3VyYXRpb24uDQpAQCAtNTIsMjggKzU3LDMxIEBACiAgICAgcmVxdWlyZXMgUHJlbWl1bSBFZGl0aW9uIG9mIFZpc3VhbCBTdHVkaW8uICBTZWUgdGhlICJQcm9maWxlDQogICAgIEd1aWRlZCBPcHRpbWl6YXRpb24iIHNlY3Rpb24gYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBCdWlsZA0KICAgICBvdXRwdXQgZnJvbSBlYWNoIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGxhbmRzIGluIGl0cyBvd24NCi0gICAgc3ViLWRpcmVjdG9yeSBvZiB0aGlzIGRpcmVjdG9yeS4gIFRoZSBvZmZpY2lhbCBQeXRob24gcmVsZWFzZXMgYXJlDQotICAgIGJ1aWx0IHVzaW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zLg0KKyAgICBzdWItZGlyZWN0b3J5IG9mIHRoaXMgZGlyZWN0b3J5LiAgVGhlIG9mZmljaWFsIFB5dGhvbiByZWxlYXNlcyBtYXkNCisgICAgYmUgYnVpbHQgdXNpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMuDQogUmVsZWFzZQ0KICAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBhcyBpdCBpcyBtZWFudCB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24NCiAgICAgc2V0dGluZ3MsIHRob3VnaCB3aXRob3V0IFBHTy4NCiANCiANCi1MZWdhY3kgc3VwcG9ydA0KLS0tLS0tLS0tLS0tLS0tDQorQnVpbGRpbmcgUHl0aG9uIHVzaW5nIHRoZSBidWlsZC5iYXQgc2NyaXB0DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIA0KLVlvdSBjYW4gZmluZCBidWlsZCBkaXJlY3RvcmllcyBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpbyBhbmQNCi1WaXN1YWwgQysrIGluIHRoZSBQQyBkaXJlY3RvcnkuIFRoZSBsZWdhY3kgYnVpbGQgZGlyZWN0b3JpZXMgYXJlIG5vDQotbG9uZ2VyIGFjdGl2ZWx5IG1haW50YWluZWQgYW5kIG1heSBub3Qgd29yayBvdXQgb2YgdGhlIGJveC4NCitJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgYnVpbGQuYmF0LCBhIHNjcmlwdCBkZXNpZ25lZCB0byBtYWtlDQorYnVpbGRpbmcgUHl0aG9uIG9uIFdpbmRvd3Mgc2ltcGxlci4gIFRoaXMgc2NyaXB0IHdpbGwgdXNlIHRoZSBlbnYuYmF0DQorc2NyaXB0IHRvIGRldGVjdCBvbmUgb2YgVmlzdWFsIFN0dWRpbyAyMDE1LCAyMDEzLCAyMDEyLCBvciAyMDEwLCBhbnkgb2YNCit3aGljaCBtYXkgYmUgdXNlZCB0byBidWlsZCBQeXRob24sIHRob3VnaCBvbmx5IFZpc3VhbCBTdHVkaW8gMjAxNSBpcw0KK29mZmljaWFsbHkgc3VwcG9ydGVkLg0KIA0KLUN1cnJlbnRseSwgdGhlIG9ubHkgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yeSBpcyBQQ1xWUzkuMCwgZm9yIFZpc3VhbA0KLVN0dWRpbyAyMDA4ICg5LjApLg0KK0J5IGRlZmF1bHQsIGJ1aWxkLmJhdCB3aWxsIGJ1aWxkIFB5dGhvbiBpbiBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gZm9yDQordGhlIDMyLWJpdCBXaW4zMiBwbGF0Zm9ybS4gIEl0IGFjY2VwdHMgc2V2ZXJhbCBhcmd1bWVudHMgdG8gY2hhbmdlDQordGhpcyBiZWhhdmlvciwgdHJ5IGBidWlsZC5iYXQgLWhgIHRvIGxlYXJuIG1vcmUuDQogDQogDQogQyBSdW50aW1lDQogLS0tLS0tLS0tDQogDQotVmlzdWFsIFN0dWRpbyAyMDEwIHVzZXMgdmVyc2lvbiAxMCBvZiB0aGUgQyBydW50aW1lIChNU1ZDUlQxMCkuICBUaGUNCitWaXN1YWwgU3R1ZGlvIDIwMTUgdXNlcyB2ZXJzaW9uIDE0IG9mIHRoZSBDIHJ1bnRpbWUgKE1TVkNSVDE0KS4gIFRoZQ0KIGV4ZWN1dGFibGVzIG5vIGxvbmdlciB1c2UgdGhlICJTaWRlIGJ5IFNpZGUiIGFzc2VtYmxpZXMgdXNlZCBpbiBwcmV2aW91cw0KIHZlcnNpb25zIG9mIHRoZSBjb21waWxlci4gIFRoaXMgc2ltcGxpZmllcyBkaXN0cmlidXRpb24gb2YgYXBwbGljYXRpb25zLg0KIA0KQEAgLTk4LDEyICsxMDYsNiBAQAogICAgIC5kbGwgYW5kIC5saWINCiBweXRob24NCiAgICAgLmV4ZQ0KLWtpbGxfcHl0aG9uDQotICAgIGtpbGxfcHl0aG9uLmV4ZSwgYSBzbWFsbCBwcm9ncmFtIGRlc2lnbmVkIHRvIGtpbGwgYW55IGluc3RhbmNlcyBvZg0KLSAgICBweXRob24oX2QpLmV4ZSB0aGF0IGFyZSBydW5uaW5nIGFuZCBsaXZlIGluIHRoZSBidWlsZCBvdXRwdXQNCi0gICAgZGlyZWN0b3J5OyB0aGlzIGlzIG1lYW50IHRvIGF2b2lkIGJ1aWxkIGlzc3VlcyBkdWUgdG8gbG9ja2VkIGZpbGVzDQotbWFrZV9idWlsZGluZm8sIG1ha2VfdmVyc2lvbmluZm8NCi0gICAgaGVscGVycyB0byBwcm92aWRlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byB0aGUgYnVpbGQgcHJvY2Vzcw0KIA0KIFRoZXNlIHN1Yi1wcm9qZWN0cyBwcm92aWRlIGV4dHJhIGV4ZWN1dGFibGVzIHRoYXQgYXJlIHVzZWZ1bCBmb3IgcnVubmluZw0KIENQeXRob24gaW4gZGlmZmVyZW50IHdheXM6DQpAQCAtMTIxLDE0ICsxMjMsMTAgQEAKICAgICBwdXJwb3NlcywgdXNlZCBieSB0ZXN0X2NhcGkucHkNCiANCiBUaGVzZSBhcmUgbWlzY2VsbGFuZW91cyBzdWItcHJvamVjdHMgdGhhdCBkb24ndCByZWFsbHkgZml0IHRoZSBvdGhlcg0KLWNhdGVnb3JpZXMuICBCeSBkZWZhdWx0LCB0aGVzZSBwcm9qZWN0cyBkbyBub3QgYnVpbGQgaW4gRGVidWcNCi1jb25maWd1cmF0aW9uOg0KK2NhdGVnb3JpZXM6DQogX2ZyZWV6ZV9pbXBvcnRsaWINCiAgICAgX2ZyZWV6ZV9pbXBvcnRsaWIuZXhlLCB1c2VkIHRvIHJlZ2VuZXJhdGUgUHl0aG9uXGltcG9ydGxpYi5oIGFmdGVyDQogICAgIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gTGliXGltcG9ydGxpYlxfYm9vdHN0cmFwLnB5DQotYmRpc3Rfd2luaW5zdA0KLSAgICAuLlxMaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC0xMC4wWy1hbWQ2NF0uZXhlLCB0aGUgYmFzZQ0KLSAgICBleGVjdXRhYmxlIHVzZWQgYnkgdGhlIGRpc3R1dGlscyBiZGlzdF93aW5pbnN0IGNvbW1hbmQNCiBweXRob24zZGxsDQogICAgIHB5dGhvbjMuZGxsLCB0aGUgUEVQIDM4NCBTdGFibGUgQUJJIGRsbA0KIHh4bGltaXRlZA0KQEAgLTE3MSw3ICsxNjksNyBAQAogICAgIEhvbWVwYWdlOg0KICAgICAgICAgaHR0cDovL3R1a2Fhbmkub3JnL3h6Lw0KIF9zc2wNCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHZlcnNpb24gMS4wLjJkIG9mIHRoZSBPcGVuU1NMIHNlY3VyZSBzb2NrZXRzDQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB2ZXJzaW9uIDEuMC4yaCBvZiB0aGUgT3BlblNTTCBzZWN1cmUgc29ja2V0cw0KICAgICBsaWJyYXJ5LCB3aGljaCBpcyBidWlsdCBieSBzc2wudmN4cHJvag0KICAgICBIb21lcGFnZToNCiAgICAgICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvDQpAQCAtMTg0LDU2ICsxODIsNDkgQEAKICAgICB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsIHJlYnVpbGQgb2YNCiAgICAgT3BlblNTTC4gIElmIHlvdSB1c2UgdGhlIFBDYnVpbGRcZ2V0X2V4dGVybmFscy5iYXQgbWV0aG9kDQogICAgIGZvciBnZXR0aW5nIHNvdXJjZXMsIGl0IGFsc28gZG93bmxvYWRzIGEgdmVyc2lvbiBvZiBOQVNNIHdoaWNoIHRoZQ0KLSAgICBzc2wgYnVpbGQgc2NyaXB0IHdpbGwgYWRkIHRvIFBBVEguDQorICAgIGxpYmVheS9zc2xlYXkgc3ViLXByb2plY3RzIHVzZS4NCiANCi0gICAgSWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20NCi0gICAgcHl0aG9uLm9yZydzIHN1YnZlcnNpb24gcmVwb3NpdG9yeSwgUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUNCi0gICAgbmVjZXNzYXJ5IG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuICBBY3RpdmVQZXJsIGlzIGF2YWlsYWJsZQ0KLSAgICBmcm9tDQorICAgIFRoZSBsaWJlYXkvc3NsZWF5IHN1Yi1wcm9qZWN0cyBleHBlY3QgeW91ciBPcGVuU1NMIHNvdXJjZXMgdG8gaGF2ZQ0KKyAgICBhbHJlYWR5IGJlZW4gY29uZmlndXJlZCBhbmQgYmUgcmVhZHkgdG8gYnVpbGQuICBJZiB5b3UgZ2V0IHlvdXIgc291cmNlcw0KKyAgICBmcm9tIHN2bi5weXRob24ub3JnIGFzIHN1Z2dlc3RlZCBpbiB0aGUgIkdldHRpbmcgRXh0ZXJuYWwgU291cmNlcyINCisgICAgc2VjdGlvbiBiZWxvdywgdGhlIE9wZW5TU0wgc291cmNlIHdpbGwgYWxyZWFkeSBiZSByZWFkeSB0byBnby4gIElmDQorICAgIHlvdSB3YW50IHRvIGJ1aWxkIGEgZGlmZmVyZW50IHZlcnNpb24sIHlvdSB3aWxsIG5lZWQgdG8gcnVuDQorDQorICAgICAgIFBDYnVpbGRccHJlcGFyZV9zc2wucHkgcGF0aFx0b1xvcGVuc3NsLXNvdXJjZS1kaXINCisNCisgICAgVGhhdCBzY3JpcHQgd2lsbCBwcmVwYXJlIHlvdXIgT3BlblNTTCBzb3VyY2VzIGluIHRoZSBzYW1lIHdheSB0aGF0DQorICAgIHRob3NlIGF2YWlsYWJsZSBvbiBzdm4ucHl0aG9uLm9yZyBoYXZlIGJlZW4gcHJlcGFyZWQuICBOb3RlIHRoYXQNCisgICAgUGVybCBtdXN0IGJlIGluc3RhbGxlZCBhbmQgYXZhaWxhYmxlIG9uIHlvdXIgUEFUSCB0byBjb25maWd1cmUNCisgICAgT3BlblNTTC4gIEFjdGl2ZVBlcmwgaXMgcmVjb21tZW5kZWQgYW5kIGlzIGF2YWlsYWJsZSBmcm9tDQogICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVwZXJsLw0KLSAgICBUaGUgc3ZuLnB5dGhvbi5vcmcgdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbHQgbWFrZWZpbGVzIGFuZCBhc3NlbWJseQ0KLSAgICBmaWxlcy4NCiANCi0gICAgVGhlIGJ1aWxkIHByb2Nlc3MgbWFrZXMgc3VyZSB0aGF0IG5vIHBhdGVudGVkIGFsZ29yaXRobXMgYXJlDQotICAgIGluY2x1ZGVkLiAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLg0KLSAgICBZb3UgbWF5IGhhdmUgdG8gbWFudWFsbHkgcmVtb3ZlICQoT0JKX0QpXGlfKi5vYmogZnJvbSBtc1xudC5tYWsgaWYNCi0gICAgdXNpbmcgb2ZmaWNpYWwgc291cmNlczsgdGhlIHN2bi5weXRob24ub3JnLWhvc3RlZCB2ZXJzaW9uIGlzIGFscmVhZHkNCi0gICAgZml4ZWQuDQotDQotICAgIFRoZSBzc2wudmN4cHJvaiBzdWItcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQ2J1aWxkL2J1aWxkX3NzbC5weSwNCi0gICAgd2hpY2ggbG9jYXRlcyBhbmQgYnVpbGRzIE9wZW5TU0wuDQotDQotICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdA0KLSAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybA0KLSAgICB0aGF0IHdvcmtzIHdpdGggT3BlblNTTCkgYW5kIGdpdmUgYSByZWFzb25hYmxlIGVycm9yIG1lc3NhZ2UuICBJZg0KLSAgICB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkgKGUuZy4sDQotICAgIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZSBhDQotICAgIHBlZWsgYXQgYnVpbGRfc3NsLnB5IGFuZCBzdWdnZXN0IHBhdGNoZXMuICBOb3RlIHRoYXQgYnVpbGRfc3NsLnB5DQotICAgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuDQotDQotICAgIFRoZSBzc2wgc3ViLXByb2plY3QgZG9lcyBub3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBjbGVhbiB0aGUgT3BlblNTTA0KLSAgICBidWlsZDsgaWYgeW91IG5lZWQgdG8gcmVidWlsZCwgeW91J2xsIGhhdmUgdG8gY2xlYW4gaXQgYnkgaGFuZC4NCisgICAgVGhlIGxpYmVheSBhbmQgc3NsZWF5IHN1Yi1wcm9qZWN0cyB3aWxsIGJ1aWxkIHRoZSBtb2R1bGVzIG9mIE9wZW5TU0wNCisgICAgcmVxdWlyZWQgYnkgX3NzbCBhbmQgX2hhc2hsaWIgYW5kIG1heSBuZWVkIHRvIGJlIG1hbnVhbGx5IHVwZGF0ZWQgd2hlbg0KKyAgICB1cGdyYWRpbmcgdG8gYSBuZXdlciB2ZXJzaW9uIG9mIE9wZW5TU0wgb3Igd2hlbiBhZGRpbmcgbmV3DQorICAgIGZ1bmN0aW9uYWxpdHkgdG8gX3NzbCBvciBfaGFzaGxpYi4gVGhleSB3aWxsIG5vdCBjbGVhbiB1cCB0aGVpciBvdXRwdXQNCisgICAgd2l0aCB0aGUgbm9ybWFsIENsZWFuIHRhcmdldDsgQ2xlYW5BbGwgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4NCiBfc3FsaXRlMw0KICAgICBXcmFwcyBTUUxpdGUgMy44LjExLjAsIHdoaWNoIGlzIGl0c2VsZiBidWlsdCBieSBzcWxpdGUzLnZjeHByb2oNCiAgICAgSG9tZXBhZ2U6DQogICAgICAgICBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvDQogX3RraW50ZXINCi0gICAgV3JhcHMgdmVyc2lvbiA4LjYuMSBvZiB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4NCisgICAgV3JhcHMgdmVyc2lvbiA4LjYuNCBvZiB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4NCiAgICAgSG9tZXBhZ2U6DQogICAgICAgICBodHRwOi8vd3d3LnRjbC50ay8NCiANCi0gICAgVW5saWtlIHRoZSBvdGhlciBleHRlcm5hbCBsaWJyYXJpZXMgbGlzdGVkIGFib3ZlLCBUayBtdXN0IGJlIGJ1aWx0DQotICAgIHNlcGFyYXRlbHkgYmVmb3JlIHRoZSBfdGtpbnRlciBtb2R1bGUgY2FuIGJlIGJ1aWx0LiBUaGlzIG1lYW5zIHRoYXQNCi0gICAgYSBwcmUtYnVpbHQgVGNsL1RrIGluc3RhbGxhdGlvbiBpcyBleHBlY3RlZCBpbiAuLlxleHRlcm5hbHNcdGNsdGsNCi0gICAgKHRjbHRrNjQgZm9yIDY0LWJpdCkgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3Rvcnk7IHRoZSBlYXNpZXN0IHdheSB0bw0KLSAgICBkbyBzbyBpcyB0byBidWlsZCBQeXRob24gdXNpbmcgYGJ1aWxkLmJhdCAtZWAsIHdoaWNoIHdpbGwgYnVpbGQNCi0gICAgVGNsLCBUaywgYW5kIFRpeCBhbmQgaW5zdGFsbCB0aGVtIGFzIGV4cGVjdGVkLiAgTm90ZSB0aGF0IHRvDQotICAgIGltcG9ydCBhbmQgdXNlIHRraW50ZXIsIHRoZSBUY2wgYW5kIFRrIERMTHMgbXVzdCBiZSBzb21ld2hlcmUgdGhhdA0KLSAgICBweXRob24uZXhlIGNhbiBmaW5kIHRoZW0sIHdoaWNoIG1lYW5zIHRoYXQgZWl0aGVyDQotICAgIC4uXGV4dGVybmFsc1x0Y2x0a1s2NF1cYmluIG11c3QgYmUgYWRkZWQgdG8gUEFUSCwgb3IgdGhlIERMTHMgbXVzdA0KLSAgICBiZSBjb3BpZWQgZnJvbSB0aGF0IGZvbGRlciB0byBiZSBhbG9uZ3NpZGUgcHl0aG9uLmV4ZS4gIGBidWlsZC5iYXRgDQotICAgIHRha2VzIGNhcmUgb2YgaXQgZm9yIHlvdSBieSBjb3B5aW5nIHRoZSBETExzIGludG8gdGhlIGJ1aWxkDQotICAgIGRpcmVjdG9yeS4NCisgICAgVGtpbnRlcidzIGRlcGVuZGVuY2llcyBhcmUgYnVpbHQgYnkgdGhlIHRjbC52Y3hwcm9qIGFuZCB0ay52Y3hwcm9qDQorICAgIHByb2plY3RzLiAgVGhlIHRpeC52Y3hwcm9qIHByb2plY3QgYWxzbyBidWlsZHMgdGhlIFRpeCBleHRlbmRlZA0KKyAgICB3aWRnZXQgc2V0IGZvciB1c2Ugd2l0aCBUa2ludGVyLg0KKw0KKyAgICBUaG9zZSB0aHJlZSBwcm9qZWN0cyBpbnN0YWxsIHRoZWlyIHJlc3BlY3RpdmUgY29tcG9uZW50cyBpbiBhDQorICAgIGRpcmVjdG9yeSBhbG9uZ3NpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcmllcyBjYWxsZWQgInRjbHRrIiBvbg0KKyAgICBXaW4zMiBhbmQgInRjbHRrNjQiIG9uIHg2NC4gIFRoZXkgYWxzbyBjb3B5IHRoZSBUY2wgYW5kIFRrIERMTHMNCisgICAgaW50byB0aGUgY3VycmVudCBvdXRwdXQgZGlyZWN0b3J5LCB3aGljaCBzaG91bGQgZW5zdXJlIHRoYXQgVGtpbnRlcg0KKyAgICBpcyBhYmxlIHRvIGxvYWQgVGNsL1RrIHdpdGhvdXQgaGF2aW5nIHRvIGNoYW5nZSB5b3VyIFBBVEguDQorDQorICAgIFRoZSB0Y2wsIHRrLCBhbmQgdGl4IHN1Yi1wcm9qZWN0cyBkbyBub3QgY2xlYW4gdGhlaXIgYnVpbGRzIHdpdGgNCisgICAgdGhlIG5vcm1hbCBDbGVhbiB0YXJnZXQ7IGlmIHlvdSBuZWVkIHRvIHJlYnVpbGQsIHlvdSBzaG91bGQgdXNlIHRoZQ0KKyAgICBDbGVhbkFsbCB0YXJnZXQgb3IgbWFudWFsbHkgZGVsZXRlIHRoZWlyIGJ1aWxkcy4NCiANCiANCiBHZXR0aW5nIEV4dGVybmFsIFNvdXJjZXMNCkBAIC0yNDIsMjQgKzIzMywyMSBAQAogVGhlIGxhc3QgY2F0ZWdvcnkgb2Ygc3ViLXByb2plY3RzIGxpc3RlZCBhYm92ZSB3cmFwIGV4dGVybmFsIHByb2plY3RzDQogUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIGFzIHN1Y2ggYSBsaXR0bGUgbW9yZSB3b3JrIGlzIHJlcXVpcmVkIGluDQogb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBmb3IgZWFjaCBwcm9qZWN0IGJlZm9yZSB0aGV5DQotY2FuIGJlIGJ1aWx0LiAgVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlIHRoZSBgYnVpbGQuYmF0YA0KLXNjcmlwdCBpbiB0aGlzIGRpcmVjdG9yeSB0byBidWlsZCBQeXRob24sIGFuZCBwYXNzIHRoZSAnLWUnIHN3aXRjaCB0bw0KLXRlbGwgaXQgdG8gdXNlIGdldF9leHRlcm5hbHMuYmF0IHRvIGZldGNoIGV4dGVybmFsIHNvdXJjZXMgYW5kIGJ1aWxkDQotVGNsL1RrIGFuZCBUaXguICBUbyB1c2UgZ2V0X2V4dGVybmFscy5iYXQsIHlvdSdsbCBuZWVkIHRvIGhhdmUNCi1TdWJ2ZXJzaW9uIGluc3RhbGxlZCBhbmQgc3ZuLmV4ZSBvbiB5b3VyIFBBVEguICBUaGUgc2NyaXB0IHdpbGwgZmV0Y2gNCi1leHRlcm5hbCBsaWJyYXJ5IHNvdXJjZXMgZnJvbSBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvZXh0ZXJuYWwgYW5kIHBsYWNlDQotdGhlbSBpbiAuLlxleHRlcm5hbHMgKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4NCitjYW4gYmUgYnVpbHQuICBIb3dldmVyLCBhIHNpbXBsZSBzY3JpcHQgaXMgcHJvdmlkZWQgdG8gbWFrZSB0aGlzIGFzDQorcGFpbmxlc3MgYXMgcG9zc2libGUsIGNhbGxlZCAiZ2V0X2V4dGVybmFscy5iYXQiIGFuZCBsb2NhdGVkIGluIHRoaXMNCitkaXJlY3RvcnkuICBUaGlzIHNjcmlwdCBleHRyYWN0cyBhbGwgdGhlIGV4dGVybmFsIHN1Yi1wcm9qZWN0cyBmcm9tDQorICAgIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbA0KK3ZpYSBTdWJ2ZXJzaW9uIChzbyB5b3UnbGwgbmVlZCBzdm4uZXhlIG9uIHlvdXIgUEFUSCkgYW5kIHBsYWNlcyB0aGVtDQoraW4gLi5cZXh0ZXJuYWxzIChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuDQogDQorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkb3dubG9hZCBzb3VyY2VzIGZyb20gZWFjaCBwcm9qZWN0J3MgaG9tZXBhZ2UsDQordGhvdWdoIHlvdSBtYXkgaGF2ZSB0byBjaGFuZ2UgZm9sZGVyIG5hbWVzIG9yIHBhc3MgdGhlIG5hbWVzIHRvIE1TQnVpbGQNCithcyB0aGUgdmFsdWVzIG9mIGNlcnRhaW4gcHJvcGVydGllcyBpbiBvcmRlciBmb3IgdGhlIGJ1aWxkIHNvbHV0aW9uIHRvDQorZmluZCB0aGVtLiAgVGhpcyBpcyBhbiBhZHZhbmNlZCB0b3BpYyBhbmQgbm90IG5lY2Vzc2FyaWx5IGZ1bGx5DQorc3VwcG9ydGVkLg0KIA0KLUJ1aWxkaW5nIGZvciBBTUQ2NA0KLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLVRoZSBidWlsZCBwcm9jZXNzIGZvciBBTUQ2NCAvIHg2NCBpcyB2ZXJ5IHNpbWlsYXIgdG8gc3RhbmRhcmQgYnVpbGRzLA0KLXlvdSBqdXN0IGhhdmUgdG8gc2V0IHg2NCBhcyBwbGF0Zm9ybS4gSW4gYWRkaXRpb24sIHRoZSBIT1NUX1BZVEhPTg0KLWVudmlyb25tZW50IHZhcmlhYmxlIG11c3QgcG9pbnQgdG8gYSBQeXRob24gaW50ZXJwcmV0ZXIgKGF0IGxlYXN0IDIuNCksDQotdG8gc3VwcG9ydCBjcm9zcy1jb21waWxhdGlvbiBmcm9tIFdpbjMyLiAgTm90ZSB0aGF0IFZpc3VhbCBTdHVkaW8NCi1yZXF1aXJlcyBQcm9mZXNzaW9uYWwgRWRpdGlvbiBvciBiZXR0ZXIgaW4gb3JkZXIgdG8gYnVpbGQgNjQtYml0DQotYmluYXJpZXMuDQorVGhlIGdldF9leHRlcm5hbHMuYmF0IHNjcmlwdCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBieSBidWlsZC5iYXQgd2hlbg0KK3lvdSBwYXNzIHRoZSAnLWUnIG9wdGlvbiB0byBpdC4NCiANCiANCiBQcm9maWxlIEd1aWRlZCBPcHRpbWl6YXRpb24NCkBAIC0yNzYsNyArMjY0LDcgQEAKIFBHSSBweXRob24sIGFuZCBmaW5hbGx5IGNyZWF0ZXMgdGhlIG9wdGltaXplZCBmaWxlcy4NCiANCiBTZWUNCi0gICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2U3azMyZjRrKFZTLjEwMCkuYXNweA0KKyAgICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZTdrMzJmNGsoVlMuMTQwKS5hc3B4DQogZm9yIG1vcmUgb24gdGhpcyB0b3BpYy4NCiANCiANCkBAIC0yOTQsMjcgKzI4MiwxOSBAQAogVmlzdWFsIFN0dWRpbyBwcm9wZXJ0aWVzDQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogDQotVGhlIFBDYnVpbGQgc29sdXRpb24gbWFrZXMgaGVhdnkgdXNlIG9mIFZpc3VhbCBTdHVkaW8gcHJvcGVydHkgZmlsZXMNCi0oKi5wcm9wcykuIFRoZSBwcm9wZXJ0aWVzIGNhbiBiZSB2aWV3ZWQgYW5kIGFsdGVyZWQgaW4gdGhlIFByb3BlcnR5DQotTWFuYWdlciAoVmlldyAtPiBPdGhlciBXaW5kb3dzIC0+IFByb3BlcnR5IE1hbmFnZXIpLg0KK1RoZSBQQ2J1aWxkIHNvbHV0aW9uIG1ha2VzIHVzZSBvZiBWaXN1YWwgU3R1ZGlvIHByb3BlcnR5IGZpbGVzICgqLnByb3BzKQ0KK3RvIHNpbXBsaWZ5IGVhY2ggcHJvamVjdC4gVGhlIHByb3BlcnRpZXMgY2FuIGJlIHZpZXdlZCBpbiB0aGUgUHJvcGVydHkNCitNYW5hZ2VyIChWaWV3IC0+IE90aGVyIFdpbmRvd3MgLT4gUHJvcGVydHkgTWFuYWdlcikgYnV0IHNob3VsZCBiZQ0KK2NhcmVmdWxseSBtb2RpZmllZCBieSBoYW5kLg0KIA0KLVRoZSBwcm9wZXJ0eSBmaWxlcyB1c2VkIGFyZSAoKy0tID0gImFsc28gaW1wb3J0cyIpOg0KLSAqIGRlYnVnIChkZWJ1ZyBtYWNybzogX0RFQlVHKQ0KLSAqIHBnaW5zdHJ1bWVudCAoUEdPKQ0KLSAqIHBndXBkYXRlIChQR08pDQotICAgICstLSBwZ2luc3RydW1lbnQNCi0gKiBweWQgKHB5dGhvbiBleHRlbnNpb24sIHJlbGVhc2UgYnVpbGQpDQotICAgICstLSByZWxlYXNlDQotICAgICstLSBweXByb2plY3QNCi0gKiBweWRfZCAocHl0aG9uIGV4dGVuc2lvbiwgZGVidWcgYnVpbGQpDQotICAgICstLSBkZWJ1Zw0KLSAgICArLS0gcHlwcm9qZWN0DQotICogcHlwcm9qZWN0IChiYXNlIHNldHRpbmdzIGZvciBhbGwgcHJvamVjdHMsIHVzZXIgbWFjcm9zIGxpa2UgUHlEbGxOYW1lKQ0KLSAqIHJlbGVhc2UgKHJlbGVhc2UgbWFjcm86IE5ERUJVRykNCi0gKiBzcWxpdGUzICh1c2VkIG9ubHkgYnkgc3FsaXRlMy52Y3hwcm9qKQ0KLSAqIHg2NCAoQU1ENjQgLyB4NjQgcGxhdGZvcm0gc3BlY2lmaWMgc2V0dGluZ3MpDQorVGhlIHByb3BlcnR5IGZpbGVzIHVzZWQgYXJlOg0KKyAqIHB5dGhvbiAodmVyc2lvbnMsIGRpcmVjdG9yaWVzIGFuZCBidWlsZCBuYW1lcykNCisgKiBweXByb2plY3QgKGJhc2Ugc2V0dGluZ3MgZm9yIGFsbCBwcm9qZWN0cykNCisgKiBvcGVuc3NsICh1c2VkIGJ5IGxpYmVheSBhbmQgc3NsZWF5IHByb2plY3RzKQ0KKyAqIHRjbHRrICh1c2VkIGJ5IF90a2ludGVyLCB0Y2wsIHRrIGFuZCB0aXggcHJvamVjdHMpDQogDQotVGhlIHB5cHJvamVjdCBwcm9wZXJ0eSBmaWxlIGRlZmluZXMgX1dJTjMyIGFuZCB4NjQgZGVmaW5lcyBfV0lONjQgYW5kDQotX01fWDY0IGFsdGhvdWdoIHRoZSBtYWNyb3MgYXJlIHNldCBieSB0aGUgY29tcGlsZXIsIHRvby4gVGhlIEdVSSBkb2Vzbid0DQotYWx3YXlzIGtub3cgYWJvdXQgdGhlIG1hY3JvcyBhbmQgY29uZnVzZSB0aGUgdXNlciB3aXRoIGZhbHNlDQotaW5mb3JtYXRpb24uDQorVGhlIHB5cHJvamVjdCBwcm9wZXJ0eSBmaWxlIGRlZmluZXMgYWxsIG9mIHRoZSBidWlsZCBzZXR0aW5ncyBmb3IgZWFjaA0KK3Byb2plY3QsIHdpdGggc29tZSBwcm9qZWN0cyBvdmVycmlkaW5nIGNlcnRhaW4gc3BlY2lmaWMgdmFsdWVzLiBUaGUgR1VJDQorZG9lc24ndCBhbHdheXMgcmVmbGVjdCB0aGUgY29ycmVjdCBzZXR0aW5ncyBhbmQgbWF5IGNvbmZ1c2UgdGhlIHVzZXINCit3aXRoIGZhbHNlIGluZm9ybWF0aW9uLCBlc3BlY2lhbGx5IGZvciBzZXR0aW5ncyB0aGF0IGF1dG9tYXRpY2FsbHkgYWRhcHQNCitmb3IgZGlmZmlyZW50IGNvbmZpZ3VyYXRpb25zLg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcmVsZWFzZS5wcm9wcyBiL1BDYnVpbGQvcmVsZWFzZS5wcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNmZTNlNC4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkL3JlbGVhc2UucHJvcHMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJVc2VyTWFjcm9zIj4KLSAgICA8UHlEZWJ1Z0V4dCAvPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8QnVpbGRNYWNybyBJbmNsdWRlPSJQeURlYnVnRXh0Ij4KLSAgICAgIDxWYWx1ZT4kKFB5RGVidWdFeHQpPC9WYWx1ZT4KLSAgICA8L0J1aWxkTWFjcm8+Ci0gIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvcnQuYmF0IGIvUENidWlsZC9ydC5iYXQKaW5kZXggMTNjOWQ2Mi4uMmQ5M2I4MCAxMDA2NDQKLS0tIGEvUENidWlsZC9ydC5iYXQKKysrIGIvUENidWlsZC9ydC5iYXQKQEAgLTI4LDI1ICsyOCwyNSBAQAogc2V0bG9jYWwNCiANCiBzZXQgcGNidWlsZD0lfmRwMA0KLXNldCBwcmVmaXg9JXBjYnVpbGQlDQorc2V0IHByZWZpeD0lcGNidWlsZCV3aW4zMlwNCiBzZXQgc3VmZml4PQ0KIHNldCBxbW9kZT0NCiBzZXQgZGFzaE89DQotc2V0IHRjbHRrPXRjbHRrDQorc2V0IHJlZ3J0ZXN0YXJncz0NCiANCiA6Q2hlY2tPcHRzDQogaWYgIiUxIj09Ii1PIiAoc2V0IGRhc2hPPS1PKSAgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQogaWYgIiUxIj09Ii1xIiAoc2V0IHFtb2RlPXllcykgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQogaWYgIiUxIj09Ii1kIiAoc2V0IHN1ZmZpeD1fZCkgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQotaWYgIiUxIj09Ii14NjQiIChzZXQgcHJlZml4PSVwcmVmaXglYW1kNjQpICYgKHNldCB0Y2x0az10Y2x0azY0KSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJTEiPT0iLXg2NCIgKHNldCBwcmVmaXg9JXBjYnVpbGQlYW1kNjRcKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiBOT1QgIiUxIj09IiIgKHNldCByZWdydGVzdGFyZ3M9JXJlZ3J0ZXN0YXJncyUgJTEpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KIA0KLVBBVEggJVBBVEglOyVwY2J1aWxkJS4uXGV4dGVybmFsc1wldGNsdGslXGJpbg0KLXNldCBleGU9IiVwcmVmaXglXHB5dGhvbiVzdWZmaXglIg0KLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtV2QgLUUgLWJiICIlcGNidWlsZCUuLlxsaWJcdGVzdFxyZWdydGVzdC5weSIgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkNCitzZXQgZXhlPSVwcmVmaXglcHl0aG9uJXN1ZmZpeCUuZXhlDQorc2V0IGNtZD0iJWV4ZSUiICVkYXNoTyUgLVdkIC1FIC1iYiAiJXBjYnVpbGQlLi5cbGliXHRlc3RccmVncnRlc3QucHkiICVyZWdydGVzdGFyZ3MlDQogaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlDQogDQogZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uDQotJWV4ZSUgIiVwY2J1aWxkJVxybXB5Yy5weSINCisiJWV4ZSUiICIlcGNidWlsZCVybXB5Yy5weSINCiANCiBlY2hvIG9uDQogJWNtZCUNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3NlbGVjdC52Y3hwcm9qIGIvUENidWlsZC9zZWxlY3QudmN4cHJvagppbmRleCA3YzM2ZDY0Li5kNjExMmFiIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3NlbGVjdC52Y3hwcm9qCisrKyBiL1BDYnVpbGQvc2VsZWN0LnZjeHByb2oKQEAgLTM3LDE5MiArMzcsNDAgQEAKICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgogICAgIDxQcm9qZWN0R3VpZD57MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfTwvUHJvamVjdEd1aWQ+CiAgICAgPFJvb3ROYW1lc3BhY2U+c2VsZWN0PC9Sb290TmFtZXNwYWNlPgotICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KICAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgogICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxUYXJnZXRFeHQ+LnB5ZDwvVGFyZ2V0RXh0PgorICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CiAgIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzZWxlY3Rtb2R1bGUuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3NxbGl0ZTMucHJvcHMgYi9QQ2J1aWxkL3NxbGl0ZTMucHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZWUwMmMuLjAwMDAwMDAKLS0tIGEvUENidWlsZC9zcWxpdGUzLnByb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXA+Ci0gICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKHNxbGl0ZTNEaXIpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+U1FMSVRFX0FQST1fX2RlY2xzcGVjKGRsbGV4cG9ydCk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDE8L1dhcm5pbmdMZXZlbD4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvc3FsaXRlMy52Y3hwcm9qIGIvUENidWlsZC9zcWxpdGUzLnZjeHByb2oKaW5kZXggZGFmMDEwZC4uYzg0MWM1YSAxMDA2NDQKLS0tIGEvUENidWlsZC9zcWxpdGUzLnZjeHByb2oKKysrIGIvUENidWlsZC9zcWxpdGUzLnZjeHByb2oKQEAgLTM3LDE4OSArMzcsNDEgQEAKICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgogICAgIDxQcm9qZWN0R3VpZD57QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfTwvUHJvamVjdEd1aWQ+CiAgICAgPFJvb3ROYW1lc3BhY2U+c3FsaXRlMzwvUm9vdE5hbWVzcGFjZT4KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFRhcmdldEV4dD4ucHlkPC9UYXJnZXRFeHQ+CisgICAgPFN1cHBvcnRQR08+ZmFsc2U8L1N1cHBvcnRQR08+CiAgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSJweXRob24ucHJvcHMiIC8+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KICAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KICAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJzcWxpdGUzLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ic3FsaXRlMy5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ic3FsaXRlMy5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InNxbGl0ZTMucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJzcWxpdGUzLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InNxbGl0ZTMucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJzcWxpdGUzLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InNxbGl0ZTMucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+CisgICAgPF9TcWxpdGVWZXJzaW9uPiQoW1N5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9ucy5SZWdleF06Ok1hdGNoKGAkKHNxbGl0ZTNEaXIpYCwgYCgoXGQrKVwuKFxkKylcLihcZCspXC4oXGQrKSlcXD8kYCkuR3JvdXBzKTwvX1NxbGl0ZVZlcnNpb24+CisgICAgPFNxbGl0ZVZlcnNpb24+JChfU3FsaXRlVmVyc2lvbi5TcGxpdChgO2ApWzFdKTwvU3FsaXRlVmVyc2lvbj4KKyAgICA8U3FsaXRlTWFqb3JWZXJzaW9uPiQoX1NxbGl0ZVZlcnNpb24uU3BsaXQoYDtgKVsyXSk8L1NxbGl0ZU1ham9yVmVyc2lvbj4KKyAgICA8U3FsaXRlTWlub3JWZXJzaW9uPiQoX1NxbGl0ZVZlcnNpb24uU3BsaXQoYDtgKVszXSk8L1NxbGl0ZU1pbm9yVmVyc2lvbj4KKyAgICA8U3FsaXRlTWljcm9WZXJzaW9uPiQoX1NxbGl0ZVZlcnNpb24uU3BsaXQoYDtgKVs0XSk8L1NxbGl0ZU1pY3JvVmVyc2lvbj4KKyAgICA8U3FsaXRlUGF0Y2hWZXJzaW9uPiQoX1NxbGl0ZVZlcnNpb24uU3BsaXQoYDtgKVs1XSk8L1NxbGl0ZVBhdGNoVmVyc2lvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8T3V0cHV0RmlsZT4kKE91dERpcikkKFByb2plY3ROYW1lKV9kLmRsbDwvT3V0cHV0RmlsZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKSQoUHJvamVjdE5hbWUpX2QuZGxsPC9PdXRwdXRGaWxlPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKSQoUHJvamVjdE5hbWUpLmRsbDwvT3V0cHV0RmlsZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpJChQcm9qZWN0TmFtZSkuZGxsPC9PdXRwdXRGaWxlPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgorICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgogICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChzcWxpdGUzRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwxPC9XYXJuaW5nTGV2ZWw+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8T3V0cHV0RmlsZT4kKE91dERpcikkKFByb2plY3ROYW1lKS5kbGw8L091dHB1dEZpbGU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgIDwvQ2xDb21waWxlPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxPdXRwdXRGaWxlPiQoT3V0RGlyKSQoUHJvamVjdE5hbWUpLmRsbDwvT3V0cHV0RmlsZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KKyAgICA8UmVzb3VyY2VDb21waWxlPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlNRTElURV9WRVJTSU9OPSQoU3FsaXRlVmVyc2lvbik7U1FMSVRFX01BSk9SX1ZFUlNJT049JChTcWxpdGVNYWpvclZlcnNpb24pO1NRTElURV9NSU5PUl9WRVJTSU9OPSQoU3FsaXRlTWlub3JWZXJzaW9uKTtTUUxJVEVfTUlDUk9fVkVSU0lPTj0kKFNxbGl0ZU1pY3JvVmVyc2lvbik7U1FMSVRFX1BBVENIX1ZFUlNJT049JChTcWxpdGVQYXRjaFZlcnNpb24pOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L1Jlc291cmNlQ29tcGlsZT4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChzcWxpdGUzRGlyKVxzcWxpdGUzLmgiIC8+CkBAIC0yMjksMTAgKzgxLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoc3FsaXRlM0Rpcilcc3FsaXRlMy5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJraWxsX3B5dGhvbi52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0Pns2ZGUxMDc0NC1lMzk2LTQwYTUtYjRlMi0xYjY5YWE3YzhkMzF9PC9Qcm9qZWN0PgotICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xzcWxpdGUzLnJjIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvc3NsLnZjeHByb2ogYi9QQ2J1aWxkL3NzbC52Y3hwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWVhYzlhLi4wMDAwMDAwCi0tLSBhL1BDYnVpbGQvc3NsLnZjeHByb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fHg2NCI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5QR0luc3RydW1lbnQ8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXxXaW4zMiI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5QR1VwZGF0ZTwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdVcGRhdGV8eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnNzbDwvUm9vdE5hbWVzcGFjZT4KLSAgICA8S2V5d29yZD5NYWtlRmlsZVByb2o8L0tleXdvcmQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPk1ha2VmaWxlPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPk1ha2VmaWxlPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPk1ha2VmaWxlPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Tk1ha2VCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5jZCAiJChTb2x1dGlvbkRpcikiCi0iJChQeXRob25FeGUpIiBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtKSAtYQotPC9OTWFrZUJ1aWxkQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlUmVCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmVjaG8gT3BlblNTTCBtdXN0IGJlIGNsZWFuZWQgbWFudWFsbHkgaWYgeW91IHdhbnQgdG8gcmVidWlsZCBpdC48L05NYWtlQ2xlYW5Db21tYW5kTGluZT4KLSAgICA8Tk1ha2VPdXRwdXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoTk1ha2VJbmNsdWRlU2VhcmNoUGF0aCk8L05NYWtlSW5jbHVkZVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkSW5jbHVkZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4kKE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzKTwvTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXM+Ci0gICAgPE5NYWtlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPmNkICIkKFNvbHV0aW9uRGlyKSIKLSIkKFB5dGhvbkV4ZSkiIGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm0pIC1hCi08L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5lY2hvIE9wZW5TU0wgbXVzdCBiZSBjbGVhbmVkIG1hbnVhbGx5IGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgaXQuPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlT3V0cHV0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Tk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKE5NYWtlSW5jbHVkZVNlYXJjaFBhdGgpPC9OTWFrZUluY2x1ZGVTZWFyY2hQYXRoPgotICAgIDxOTWFrZUZvcmNlZEluY2x1ZGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChOTWFrZUZvcmNlZEluY2x1ZGVzKTwvTk1ha2VGb3JjZWRJbmNsdWRlcz4KLSAgICA8Tk1ha2VBc3NlbWJseVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JChOTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcyk8L05NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzPgotICAgIDxOTWFrZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Y2QgIiQoU29sdXRpb25EaXIpIgotIiQoUHl0aG9uRXhlKSIgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybSkgLWEKLTwvTk1ha2VCdWlsZENvbW1hbmRMaW5lPgotICAgIDxOTWFrZVJlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZWNobyBPcGVuU1NMIG11c3QgYmUgY2xlYW5lZCBtYW51YWxseSBpZiB5b3Ugd2FudCB0byByZWJ1aWxkIGl0LjwvTk1ha2VDbGVhbkNvbW1hbmRMaW5lPgotICAgIDxOTWFrZU91dHB1dCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiAvPgotICAgIDxOTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JChOTWFrZUluY2x1ZGVTZWFyY2hQYXRoKTwvTk1ha2VJbmNsdWRlU2VhcmNoUGF0aD4KLSAgICA8Tk1ha2VGb3JjZWRJbmNsdWRlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKE5NYWtlRm9yY2VkSW5jbHVkZXMpPC9OTWFrZUZvcmNlZEluY2x1ZGVzPgotICAgIDxOTWFrZUFzc2VtYmx5U2VhcmNoUGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiQoTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXMpPC9OTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcz4KLSAgICA8Tk1ha2VCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5jZCAiJChTb2x1dGlvbkRpcikiCi0iJChQeXRob25FeGUpIiBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtKSAtYQotPC9OTWFrZUJ1aWxkQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlUmVCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmVjaG8gT3BlblNTTCBtdXN0IGJlIGNsZWFuZWQgbWFudWFsbHkgaWYgeW91IHdhbnQgdG8gcmVidWlsZCBpdC48L05NYWtlQ2xlYW5Db21tYW5kTGluZT4KLSAgICA8Tk1ha2VPdXRwdXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoTk1ha2VJbmNsdWRlU2VhcmNoUGF0aCk8L05NYWtlSW5jbHVkZVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkSW5jbHVkZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4kKE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzKTwvTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXM+Ci0gICAgPE5NYWtlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPmNkICIkKFNvbHV0aW9uRGlyKSIKLSIkKFB5dGhvbkV4ZSkiIGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm0pIC1hCi08L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj5lY2hvIE9wZW5TU0wgbXVzdCBiZSBjbGVhbmVkIG1hbnVhbGx5IGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgaXQuPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlT3V0cHV0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Tk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4kKE5NYWtlSW5jbHVkZVNlYXJjaFBhdGgpPC9OTWFrZUluY2x1ZGVTZWFyY2hQYXRoPgotICAgIDxOTWFrZUZvcmNlZEluY2x1ZGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+JChOTWFrZUZvcmNlZEluY2x1ZGVzKTwvTk1ha2VGb3JjZWRJbmNsdWRlcz4KLSAgICA8Tk1ha2VBc3NlbWJseVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+JChOTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcyk8L05NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzPgotICAgIDxOTWFrZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Y2QgIiQoU29sdXRpb25EaXIpIgotIiQoUHl0aG9uRXhlKSIgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybSkgLWEKLTwvTk1ha2VCdWlsZENvbW1hbmRMaW5lPgotICAgIDxOTWFrZVJlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+ZWNobyBPcGVuU1NMIG11c3QgYmUgY2xlYW5lZCBtYW51YWxseSBpZiB5b3Ugd2FudCB0byByZWJ1aWxkIGl0LjwvTk1ha2VDbGVhbkNvbW1hbmRMaW5lPgotICAgIDxOTWFrZU91dHB1dCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiAvPgotICAgIDxOTWFrZVByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+JChOTWFrZUluY2x1ZGVTZWFyY2hQYXRoKTwvTk1ha2VJbmNsdWRlU2VhcmNoUGF0aD4KLSAgICA8Tk1ha2VGb3JjZWRJbmNsdWRlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4kKE5NYWtlRm9yY2VkSW5jbHVkZXMpPC9OTWFrZUZvcmNlZEluY2x1ZGVzPgotICAgIDxOTWFrZUFzc2VtYmx5U2VhcmNoUGF0aCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPiQoTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXMpPC9OTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcz4KLSAgICA8Tk1ha2VCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj5jZCAiJChTb2x1dGlvbkRpcikiCi0iJChQeXRob25FeGUpIiBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtKSAtYQotPC9OTWFrZUJ1aWxkQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlUmVCdWlsZENvbW1hbmRMaW5lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPmVjaG8gT3BlblNTTCBtdXN0IGJlIGNsZWFuZWQgbWFudWFsbHkgaWYgeW91IHdhbnQgdG8gcmVidWlsZCBpdC48L05NYWtlQ2xlYW5Db21tYW5kTGluZT4KLSAgICA8Tk1ha2VPdXRwdXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIC8+Ci0gICAgPE5NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPiQoTk1ha2VJbmNsdWRlU2VhcmNoUGF0aCk8L05NYWtlSW5jbHVkZVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkSW5jbHVkZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPiQoTk1ha2VGb3JjZWRJbmNsdWRlcyk8L05NYWtlRm9yY2VkSW5jbHVkZXM+Ci0gICAgPE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4kKE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzKTwvTk1ha2VGb3JjZWRVc2luZ0Fzc2VtYmxpZXM+Ci0gICAgPE5NYWtlQnVpbGRDb21tYW5kTGluZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPmNkICIkKFNvbHV0aW9uRGlyKSIKLSIkKFB5dGhvbkV4ZSkiIGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm0pIC1hCi08L05NYWtlQnVpbGRDb21tYW5kTGluZT4KLSAgICA8Tk1ha2VSZUJ1aWxkQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxOTWFrZUNsZWFuQ29tbWFuZExpbmUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj5lY2hvIE9wZW5TU0wgbXVzdCBiZSBjbGVhbmVkIG1hbnVhbGx5IGlmIHlvdSB3YW50IHRvIHJlYnVpbGQgaXQuPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+Ci0gICAgPE5NYWtlT3V0cHV0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Tk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPiQoTk1ha2VQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L05NYWtlUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPE5NYWtlSW5jbHVkZVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4kKE5NYWtlSW5jbHVkZVNlYXJjaFBhdGgpPC9OTWFrZUluY2x1ZGVTZWFyY2hQYXRoPgotICAgIDxOTWFrZUZvcmNlZEluY2x1ZGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+JChOTWFrZUZvcmNlZEluY2x1ZGVzKTwvTk1ha2VGb3JjZWRJbmNsdWRlcz4KLSAgICA8Tk1ha2VBc3NlbWJseVNlYXJjaFBhdGggQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4kKE5NYWtlQXNzZW1ibHlTZWFyY2hQYXRoKTwvTk1ha2VBc3NlbWJseVNlYXJjaFBhdGg+Ci0gICAgPE5NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+JChOTWFrZUZvcmNlZFVzaW5nQXNzZW1ibGllcyk8L05NYWtlRm9yY2VkVXNpbmdBc3NlbWJsaWVzPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uLnZjeHByb2oiPgotICAgICAgPFByb2plY3Q+e2IxMWQ3NTBmLWNkMWYtNGE5Ni04NWNlLWU2OWE1YzUyNTlmOX08L1Byb2plY3Q+Ci0gICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9zc2xlYXkudmN4cHJvaiBiL1BDYnVpbGQvc3NsZWF5LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM5ZTNhYwotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvc3NsZWF5LnZjeHByb2oKQEAgLTAsMCArMSwxMTkgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR0luc3RydW1lbnQ8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR1VwZGF0ZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdVcGRhdGV8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPnsxMDYxNUIyNC03M0JGLTRFRkEtOTNBQS0yMzY5MTYzMjEzMTd9PC9Qcm9qZWN0R3VpZD4KKyAgICA8Um9vdE5hbWVzcGFjZT5zc2xlYXk8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKworICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKworICA8UHJvcGVydHlHcm91cCBMYWJlbD0iQ29uZmlndXJhdGlvbiI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgPEltcG9ydCBQcm9qZWN0PSJvcGVuc3NsLnByb3BzIiAvPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKworICA8SXRlbUdyb3VwPgorICAgIDwhLS0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcYmlvX3NzbC5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxkMV9ib3RoLmMiIC8+CisgICAgPCEtLQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxkMV9jbG50LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXGQxX2VuYy5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxkMV9saWIuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXGQxX21ldGguYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcZDFfcGt0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXGQxX3NydHAuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXGQxX3NydnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xca3NzbC5jIiAvPgorICAgIC0tPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzMl9jbG50LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHMyX2VuYy5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzMl9saWIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcczJfbWV0aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzMl9wa3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcczJfc3J2ci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzMjNfY2xudC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzMjNfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHMyM19tZXRoLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHMyM19wa3QuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcczIzX3NydnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcczNfYm90aC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzM19jYmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcczNfY2xudC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzM19lbmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcczNfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHMzX21ldGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcczNfcGt0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHMzX3NydnIuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcc3NsX2FsZ3MuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcc3NsX2FzbjEuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcc3NsX2NlcnQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcc3NsX2NpcGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcc3NsX2Vyci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzc2xfZXJyMi5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFxzc2xfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHNzbF9yc2EuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcc3NsX3Nlc3MuYyIgLz4KKyAgICA8IS0tCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHNzbF9zdGF0LmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHNzbF90eHQuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcc3NsX3V0c3QuYyIgLz4KKyAgICAtLT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcdDFfY2xudC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFx0MV9lbmMuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcdDFfbGliLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpc3NsXHQxX21ldGguYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcdDFfcmVuZWcuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQob3BlbnNzbERpcilzc2xcdDFfc3J2ci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKXNzbFx0bHNfc3JwLmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICAKKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgPFRhcmdldCBOYW1lPSJDbGVhbiIgLz4KKyAgPFRhcmdldCBOYW1lPSJDbGVhbkFsbCI+CisgICAgPERlbGV0ZSBGaWxlcz0iJChUYXJnZXRQYXRoKSIgLz4KKyAgICA8UmVtb3ZlRGlyIERpcmVjdG9yaWVzPSIkKEludERpcikiIC8+CisgIDwvVGFyZ2V0PgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvdGNsLnZjeHByb2ogYi9QQ2J1aWxkL3RjbC52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZmQxNTUKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL3RjbC52Y3hwcm9qCkBAIC0wLDAgKzEsOTMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR0luc3RydW1lbnQ8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5QR1VwZGF0ZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdVcGRhdGV8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPntCNUZENkYxRC0xMjlFLTRCRkYtOTM0MC0wMzYwNkZBQzcyODN9PC9Qcm9qZWN0R3VpZD4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8SW1wb3J0IFByb2plY3Q9InRjbHRrLnByb3BzIiAvPgorICAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5NYWtlZmlsZTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPE91dERpcj4kKHRjbHRrRGlyKTwvT3V0RGlyPgorICAgIDxUYXJnZXRQYXRoPiQoT3V0RGlyKWJpblwkKHRjbERMTE5hbWUpPC9UYXJnZXRQYXRoPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIAorICA8SXRlbUdyb3VwPgorICAgIDxFeHBlY3RlZE91dHB1dHMgSW5jbHVkZT0iCisgICAgICAgICQoT3V0RGlyKVxiaW5cJCh0Y2xETExOYW1lKTsKKyAgICAgICAgJChPdXREaXIpXGJpblwkKHRjbFNoRXhlTmFtZSk7CisgICAgICAgICQoT3V0RGlyKVxpbmNsdWRlXHRjbC5oOworICAgICAgICAkKE91dERpcilcbGliXHRjbCQoVGNsTWFqb3JWZXJzaW9uKTsKKyAgICAgICAgJChPdXREaXIpXGxpYlx0Y2wkKFRjbE1ham9yVmVyc2lvbikuJChUY2xNaW5vclZlcnNpb24pOworICAgICAgICAkKE91dERpcilcbGliXCQodGNsTGliTmFtZSkiIC8+CisgIDwvSXRlbUdyb3VwPgorICAKKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIAorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGNsT3B0cz5tc3ZjcnQ8L1RjbE9wdHM+CisgICAgPFRjbE9wdHMgQ29uZGl0aW9uPSIkKENvbmZpZ3VyYXRpb24pID09ICdEZWJ1ZyciPnN5bWJvbHMsbXN2Y3J0PC9UY2xPcHRzPgorICAgIDxUY2xEaXJzPklOU1RBTExESVI9IiQoT3V0RGlyLlRyaW1FbmQoYFxgKSkiIElOU1RBTExfRElSPSIkKE91dERpci5UcmltRW5kKGBcYCkpIjwvVGNsRGlycz4KKyAgICA8RGVidWdGbGFncyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJyA9PSAnRGVidWcnIj5ERUJVR0ZMQUdTPSItd2Q0NDU2IC13ZDQ0NTcgLXdkNDQ1OCAtd2Q0NDU5IC13ZDQ5OTYiPC9EZWJ1Z0ZsYWdzPgorICAgIDxOTWFrZUJ1aWxkQ29tbWFuZExpbmU+c2V0bG9jYWwKK0AoRXhwZWN0ZWRPdXRwdXRzLT4naWYgbm90IGV4aXN0ICIlKEZ1bGxQYXRoKSIgZ290byBidWlsZCcsJworJykKK2dvdG8gOmVvZgorOmJ1aWxkCitzZXQgVkNJTlNUQUxMRElSPSQoVkNJbnN0YWxsRGlyKQorY2QgL0QgIiQodGNsRGlyKXdpbiIKK25tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9JChUY2xNYWNoaW5lKSBPUFRTPSQoVGNsT3B0cykgJChUY2xEaXJzKSAkKERlYnVnRmxhZ3MpIGNvcmUgc2hlbGwgZGxscworbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0kKFRjbE1hY2hpbmUpIE9QVFM9JChUY2xPcHRzKSAkKFRjbERpcnMpICQoRGVidWdGbGFncykgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcworPC9OTWFrZUJ1aWxkQ29tbWFuZExpbmU+CisgIDwvUHJvcGVydHlHcm91cD4KKworICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICAKKyAgPFRhcmdldCBOYW1lPSJDb3B5RGxsIiBJbnB1dHM9IiQoT3V0RGlyKVxiaW5cJCh0Y2xETExOYW1lKSIgT3V0cHV0cz0iJChCdWlsZFBhdGgpJCh0Y2xETExOYW1lKSIgQWZ0ZXJUYXJnZXRzPSJCdWlsZCI+CisgICAgPENvcHkgU291cmNlRmlsZXM9IiQoT3V0RGlyKVxiaW5cJCh0Y2xETExOYW1lKSIgRGVzdGluYXRpb25GaWxlcz0iJChCdWlsZFBhdGgpJCh0Y2xETExOYW1lKSIgLz4KKyAgPC9UYXJnZXQ+CisgIAorICA8VGFyZ2V0IE5hbWU9IkNsZWFuIiAvPgorICA8VGFyZ2V0IE5hbWU9IkNsZWFuQWxsIj4KKyAgICA8RGVsZXRlIEZpbGVzPSIkKFRhcmdldFBhdGgpOyQoQnVpbGRQYXRoKSQodGNsRExMTmFtZSkiIC8+CisgICAgPFJlbW92ZURpciBEaXJlY3Rvcmllcz0iJChJbnREaXIpIiAvPgorICA8L1RhcmdldD4KKyAgCisgIDxUYXJnZXQgTmFtZT0iUmVzb2x2ZUFzc2VtYmx5UmVmZXJlbmNlcyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3RjbHRrLnByb3BzIGIvUENidWlsZC90Y2x0ay5wcm9wcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRiZmZiCi0tLSAvZGV2L251bGwKKysrIGIvUENidWlsZC90Y2x0ay5wcm9wcwpAQCAtMCwwICsxLDQ1IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRjbE1ham9yVmVyc2lvbj44PC9UY2xNYWpvclZlcnNpb24+CisgICAgPFRjbE1pbm9yVmVyc2lvbj42PC9UY2xNaW5vclZlcnNpb24+CisgICAgPFRjbFBhdGNoTGV2ZWw+NDwvVGNsUGF0Y2hMZXZlbD4KKyAgICA8VGNsUmV2aXNpb24+MjwvVGNsUmV2aXNpb24+CisgICAgPFRrTWFqb3JWZXJzaW9uPiQoVGNsTWFqb3JWZXJzaW9uKTwvVGtNYWpvclZlcnNpb24+CisgICAgPFRrTWlub3JWZXJzaW9uPiQoVGNsTWlub3JWZXJzaW9uKTwvVGtNaW5vclZlcnNpb24+CisgICAgPFRrUGF0Y2hMZXZlbD4kKFRjbFBhdGNoTGV2ZWwpPC9Ua1BhdGNoTGV2ZWw+CisgICAgPFRrUmV2aXNpb24+JChUY2xSZXZpc2lvbik8L1RrUmV2aXNpb24+CisgICAgPFRpeE1ham9yVmVyc2lvbj44PC9UaXhNYWpvclZlcnNpb24+CisgICAgPFRpeE1pbm9yVmVyc2lvbj40PC9UaXhNaW5vclZlcnNpb24+CisgICAgPFRpeFBhdGNoTGV2ZWw+MzwvVGl4UGF0Y2hMZXZlbD4KKyAgICA8VGl4UmV2aXNpb24+NjwvVGl4UmV2aXNpb24+CisgICAgPHRjbERpcj4kKEV4dGVybmFsc0Rpcil0Y2wtY29yZS0kKFRjbE1ham9yVmVyc2lvbikuJChUY2xNaW5vclZlcnNpb24pLiQoVGNsUGF0Y2hMZXZlbCkuJChUY2xSZXZpc2lvbilcPC90Y2xEaXI+CisgICAgPHRrRGlyPiQoRXh0ZXJuYWxzRGlyKXRrLSQoVGtNYWpvclZlcnNpb24pLiQoVGtNaW5vclZlcnNpb24pLiQoVGtQYXRjaExldmVsKS4kKFRrUmV2aXNpb24pXDwvdGtEaXI+CisgICAgPHRpeERpcj4kKEV4dGVybmFsc0Rpcil0aXgtJChUaXhNYWpvclZlcnNpb24pLiQoVGl4TWlub3JWZXJzaW9uKS4kKFRpeFBhdGNoTGV2ZWwpLiQoVGl4UmV2aXNpb24pXDwvdGl4RGlyPgorICAgIDx0Y2x0a0Rpcj4kKEV4dGVybmFsc0Rpcil0Y2x0a1w8L3RjbHRrRGlyPgorICAgIDx0Y2x0a0RpciBDb25kaXRpb249IickKFBsYXRmb3JtKScgPT0gJ3g2NCciPiQoRXh0ZXJuYWxzRGlyKXRjbHRrNjRcPC90Y2x0a0Rpcj4KKyAgICA8VGNsRGVidWdFeHQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKScgPT0gJ0RlYnVnJyI+ZzwvVGNsRGVidWdFeHQ+CisgICAgPHRjbERMTE5hbWU+dGNsJChUY2xNYWpvclZlcnNpb24pJChUY2xNaW5vclZlcnNpb24pdCQoVGNsRGVidWdFeHQpLmRsbDwvdGNsRExMTmFtZT4KKyAgICA8dGNsTGliTmFtZT50Y2wkKFRjbE1ham9yVmVyc2lvbikkKFRjbE1pbm9yVmVyc2lvbil0JChUY2xEZWJ1Z0V4dCkubGliPC90Y2xMaWJOYW1lPgorICAgIDx0Y2xTaEV4ZU5hbWU+dGNsc2gkKFRjbE1ham9yVmVyc2lvbikkKFRjbE1pbm9yVmVyc2lvbil0JChUY2xEZWJ1Z0V4dCkuZXhlPC90Y2xTaEV4ZU5hbWU+CisgICAgPHRrRExMTmFtZT50ayQoVGtNYWpvclZlcnNpb24pJChUa01pbm9yVmVyc2lvbil0JChUY2xEZWJ1Z0V4dCkuZGxsPC90a0RMTE5hbWU+CisgICAgPHRrTGliTmFtZT50ayQoVGtNYWpvclZlcnNpb24pJChUa01pbm9yVmVyc2lvbil0JChUY2xEZWJ1Z0V4dCkubGliPC90a0xpYk5hbWU+CisgICAgPHRpeERMTE5hbWU+dGl4JChUaXhNYWpvclZlcnNpb24pJChUaXhNaW5vclZlcnNpb24pJChUY2xEZWJ1Z0V4dCkuZGxsPC90aXhETExOYW1lPgorICAgIDx0aXhETExQYXRoPiQodGNsdGtEaXIpbGliXHRpeCQoVGl4TWFqb3JWZXJzaW9uKS4kKFRpeE1pbm9yVmVyc2lvbikuJChUaXhQYXRjaExldmVsKVwkKHRpeERMTE5hbWUpPC90aXhETExQYXRoPgorICAgIDx0Y2x0a0xpYj4kKHRjbHRrRGlyKWxpYlx0Y2wkKFRjbE1ham9yVmVyc2lvbikkKFRjbE1pbm9yVmVyc2lvbil0JChUY2xEZWJ1Z0V4dCkubGliOyQodGNsdGtEaXIpbGliXHRrJChUa01ham9yVmVyc2lvbikkKFRrTWlub3JWZXJzaW9uKXQkKFRjbERlYnVnRXh0KS5saWI8L3RjbHRrTGliPgorICAgIDxUY2xNYWNoaW5lPklYODY8L1RjbE1hY2hpbmU+CisgICAgPFRjbE1hY2hpbmUgQ29uZGl0aW9uPSInJChQbGF0Zm9ybSknID09ICd4NjQnIj5BTUQ2NDwvVGNsTWFjaGluZT4KKyAgICA8VGNsVmVyc2lvbnM+VENMX01BSk9SX1ZFUlNJT049JChUY2xNYWpvclZlcnNpb24pIFRDTF9NSU5PUl9WRVJTSU9OPSQoVGNsTWlub3JWZXJzaW9uKSBUQ0xfUEFUQ0hfTEVWRUw9JChUY2xQYXRjaExldmVsKTwvVGNsVmVyc2lvbnM+CisgICAgPFRjbFNob3J0VmVyc2lvbnM+VENMX01BSk9SPSQoVGNsTWFqb3JWZXJzaW9uKSBUQ0xfTUlOT1I9JChUY2xNaW5vclZlcnNpb24pIFRDTF9QQVRDSD0kKFRjbFBhdGNoTGV2ZWwpPC9UY2xTaG9ydFZlcnNpb25zPgorICAgIDxUa1ZlcnNpb25zPlRLX01BSk9SX1ZFUlNJT049JChUa01ham9yVmVyc2lvbikgVEtfTUlOT1JfVkVSU0lPTj0kKFRrTWlub3JWZXJzaW9uKSBUS19QQVRDSF9MRVZFTD0kKFRrUGF0Y2hMZXZlbCk8L1RrVmVyc2lvbnM+CisKKyAgICA8QnVpbGREaXJUb3A+UmVsZWFzZTwvQnVpbGREaXJUb3A+CisgICAgPEJ1aWxkRGlyVG9wIENvbmRpdGlvbj0iJChDb25maWd1cmF0aW9uKSA9PSAnRGVidWcnIj5EZWJ1ZzwvQnVpbGREaXJUb3A+CisgICAgPEJ1aWxkRGlyVG9wIENvbmRpdGlvbj0iJChUY2xNYWNoaW5lKSAhPSAnSVg4NiciPiQoQnVpbGREaXJUb3ApXyQoVGNsTWFjaGluZSk8L0J1aWxkRGlyVG9wPgorICAgIDxCdWlsZERpclRvcCBDb25kaXRpb249IiQoUGxhdGZvcm1Ub29sc2V0KSA9PSAndjE0MCciPiQoQnVpbGREaXJUb3ApX1ZDMTM8L0J1aWxkRGlyVG9wPgorICAgIDxCdWlsZERpclRvcCBDb25kaXRpb249IiQoUGxhdGZvcm1Ub29sc2V0KSA9PSAndjEyMCciPiQoQnVpbGREaXJUb3ApX1ZDMTI8L0J1aWxkRGlyVG9wPgorICAgIDxCdWlsZERpclRvcCBDb25kaXRpb249IiQoUGxhdGZvcm1Ub29sc2V0KSA9PSAndjExMCciPiQoQnVpbGREaXJUb3ApX1ZDMTE8L0J1aWxkRGlyVG9wPgorICAgIDxCdWlsZERpclRvcCBDb25kaXRpb249IiQoUGxhdGZvcm1Ub29sc2V0KSA9PSAndjEwMCciPiQoQnVpbGREaXJUb3ApX1ZDMTA8L0J1aWxkRGlyVG9wPgorICA8L1Byb3BlcnR5R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC90aXgudmN4cHJvaiBiL1BDYnVpbGQvdGl4LnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiYzBhYgotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvdGl4LnZjeHByb2oKQEAgLTAsMCArMSw5NCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdJbnN0cnVtZW50PC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHVXBkYXRlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdVcGRhdGU8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+e0M1QTNFN0ZCLTk2OTUtNEIyRS05NjBCLTFEOUY0M0YxRTU1NX08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPnRpeDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8SW1wb3J0IFByb2plY3Q9InRjbHRrLnByb3BzIiAvPgorICAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5NYWtlZmlsZTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPE91dERpcj4kKHRjbHRrRGlyKTwvT3V0RGlyPgorICAgIDxUYXJnZXRQYXRoPiQodGl4RExMUGF0aCk8L1RhcmdldFBhdGg+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgCisgIDxJdGVtR3JvdXA+CisgICAgPEV4cGVjdGVkT3V0cHV0cyBJbmNsdWRlPSIkKFRhcmdldFBhdGgpIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgorICAKKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRpeERpcnM+QlVJTERESVJUT1A9IiQoQnVpbGREaXJUb3ApIiBUQ0xfRElSPSIkKHRjbERpci5UcmltRW5kKGBcYCkpIiBUS19ESVI9IiQodGtEaXIuVHJpbUVuZChgXGApKSIgSU5TVEFMTF9ESVI9IiQoT3V0RGlyLlRyaW1FbmQoYFxgKSkiPC9UaXhEaXJzPgorICAgIDxEZWJ1Z0ZsYWdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknID09ICdEZWJ1ZyciPkRFQlVHPTEgTk9ERUJVRz0wIFRDTF9EQkdYPWcgVEtfREJHWD1nPC9EZWJ1Z0ZsYWdzPgorICAgIDxEZWJ1Z0ZsYWdzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbiknICE9ICdEZWJ1ZyciPkRFQlVHPTAgTk9ERUJVRz0xPC9EZWJ1Z0ZsYWdzPgorICAgIDxOTWFrZUJ1aWxkQ29tbWFuZExpbmU+c2V0bG9jYWwKK0AoRXhwZWN0ZWRPdXRwdXRzLT4naWYgbm90IGV4aXN0ICIlKEZ1bGxQYXRoKSIgZ290byBidWlsZCcsJworJykKK2dvdG8gOmVvZgorOmJ1aWxkCitzZXQgVkNJTlNUQUxMRElSPSQoVkNJbnN0YWxsRGlyKQorY2QgL0QgIiQodGl4RGlyKXdpbiIKK25tYWtlIC9ub2xvZ28gLWYgbWFrZWZpbGUudmMgTUFDSElORT0kKFRjbE1hY2hpbmUpICQoRGVidWdGbGFncykgJChUY2xTaG9ydFZlcnNpb25zKSAkKFRpeERpcnMpIGFsbCBpbnN0YWxsCis8L05NYWtlQnVpbGRDb21tYW5kTGluZT4KKyAgICA8Tk1ha2VDbGVhbkNvbW1hbmRMaW5lPnJtZGlyIC9xL3MgIiQoT3V0RGlyLlRyaW1FbmQoYFxgKSkiPC9OTWFrZUNsZWFuQ29tbWFuZExpbmU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgCisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0idGNsLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2I1ZmQ2ZjFkLTEyOWUtNGJmZi05MzQwLTAzNjA2ZmFjNzI4M308L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ0ay52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0Pns3ZTg1ZWNjZi1hNzJjLTRkYTQtOWU1Mi04ODQ1MDhlODBiYTF9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CisKKyAgPFRhcmdldCBOYW1lPSJDbGVhbiIgLz4KKyAgPFRhcmdldCBOYW1lPSJDbGVhbkFsbCI+CisgICAgPFJlbW92ZURpciBEaXJlY3Rvcmllcz0iJChPdXREaXIpIiAvPgorICAgIDxSZW1vdmVEaXIgRGlyZWN0b3JpZXM9IiQoSW50RGlyKSIgLz4KKyAgPC9UYXJnZXQ+CisgIAorICA8VGFyZ2V0IE5hbWU9IlJlc29sdmVBc3NlbWJseVJlZmVyZW5jZXMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC90ay52Y3hwcm9qIGIvUENidWlsZC90ay52Y3hwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjMxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL3RrLnZjeHByb2oKQEAgLTAsMCArMSw5NyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXxXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdJbnN0cnVtZW50PC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR0luc3RydW1lbnR8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlBHVXBkYXRlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlBHVXBkYXRlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQR1VwZGF0ZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UEdVcGRhdGU8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgPC9JdGVtR3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KKyAgICA8UHJvamVjdEd1aWQ+ezdFODVFQ0NGLUE3MkMtNERBNC05RTUyLTg4NDUwOEU4MEJBMX08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPnRrPC9Sb290TmFtZXNwYWNlPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIAorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KKyAgPEltcG9ydCBQcm9qZWN0PSJ0Y2x0ay5wcm9wcyIgLz4KKyAgCisgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+TWFrZWZpbGU8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxPdXREaXI+JCh0Y2x0a0Rpcik8L091dERpcj4KKyAgICA8VGFyZ2V0UGF0aD4kKE91dERpciliaW5cJCh0a0RMTE5hbWUpPC9UYXJnZXRQYXRoPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIAorICA8SXRlbUdyb3VwPgorICAgIDxFeHBlY3RlZE91dHB1dHMgSW5jbHVkZT0iCisgICAgICAgICQoT3V0RGlyKWJpblwkKHRrRExMTmFtZSk7CisgICAgICAgICQoT3V0RGlyKWluY2x1ZGVcdGsuaDsKKyAgICAgICAgJChPdXREaXIpbGliXCQodGtMaWJOYW1lKTsKKyAgICAgICAgJChPdXREaXIpbGliXHRrJChUa01ham9yVmVyc2lvbikuJChUa01pbm9yVmVyc2lvbikiIC8+CisgIDwvSXRlbUdyb3VwPgorICAKKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIAorICA8UHJvcGVydHlHcm91cD4KKyAgICA8VGtPcHRzPm1zdmNydDwvVGtPcHRzPgorICAgIDxUa09wdHMgQ29uZGl0aW9uPSIkKENvbmZpZ3VyYXRpb24pID09ICdEZWJ1ZyciPnN5bWJvbHMsbXN2Y3J0PC9Ua09wdHM+CisgICAgPFRrRGlycz5UQ0xESVI9IiQodGNsRGlyLlRyaW1FbmQoYFxgKSkiIElOU1RBTExESVI9IiQoT3V0RGlyLlRyaW1FbmQoYFxgKSkiPC9Ua0RpcnM+CisgICAgPERlYnVnRmxhZ3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKScgPT0gJ0RlYnVnJyI+REVCVUdGTEFHUz0iLXdkNDQ1NiAtd2Q0NDU3IC13ZDQ0NTggLXdkNDQ1OSAtd2Q0OTk2IjwvRGVidWdGbGFncz4KKyAgICA8Tk1ha2VCdWlsZENvbW1hbmRMaW5lPnNldGxvY2FsCitAKEV4cGVjdGVkT3V0cHV0cy0+J2lmIG5vdCBleGlzdCAiJShGdWxsUGF0aCkiIGdvdG8gYnVpbGQnLCcKKycpCitnb3RvIDplb2YKKzpidWlsZAorc2V0IFZDSU5TVEFMTERJUj0kKFZDSW5zdGFsbERpcikKK2NkIC9EICIkKHRrRGlyKXdpbiIKK25tYWtlIC9ub2xvZ28gLWYgbWFrZWZpbGUudmMgUkM9cmMgTUFDSElORT0kKFRjbE1hY2hpbmUpIE9QVFM9JChUa09wdHMpICQoVGtEaXJzKSAkKERlYnVnRmxhZ3MpIGFsbAorbm1ha2UgL25vbG9nbyAtZiBtYWtlZmlsZS52YyBSQz1yYyBNQUNISU5FPSQoVGNsTWFjaGluZSkgT1BUUz0kKFRrT3B0cykgJChUa0RpcnMpICQoRGVidWdGbGFncykgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcworPC9OTWFrZUJ1aWxkQ29tbWFuZExpbmU+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1Hcm91cD4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ0Y2wudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57YjVmZDZmMWQtMTI5ZS00YmZmLTkzNDAtMDM2MDZmYWM3MjgzfTwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICA8L0l0ZW1Hcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKyAgCisgIDxUYXJnZXQgTmFtZT0iQ29weURsbCIgSW5wdXRzPSIkKE91dERpcilcYmluXCQodGtETExOYW1lKSIgT3V0cHV0cz0iJChCdWlsZFBhdGgpJCh0a0RMTE5hbWUpIiBBZnRlclRhcmdldHM9IkJ1aWxkIj4KKyAgICA8Q29weSBTb3VyY2VGaWxlcz0iJChPdXREaXIpXGJpblwkKHRrRExMTmFtZSkiIERlc3RpbmF0aW9uRmlsZXM9IiQoQnVpbGRQYXRoKSQodGtETExOYW1lKSIgLz4KKyAgPC9UYXJnZXQ+CisgIAorICA8VGFyZ2V0IE5hbWU9IkNsZWFuIiAvPgorICA8VGFyZ2V0IE5hbWU9IkNsZWFuQWxsIj4KKyAgICA8RGVsZXRlIEZpbGVzPSIkKFRhcmdldFBhdGgpOyQoQnVpbGRQYXRoKSQodGtETExOYW1lKSIgLz4KKyAgICA8UmVtb3ZlRGlyIERpcmVjdG9yaWVzPSIkKEludERpcikiIC8+CisgIDwvVGFyZ2V0PgorICAKKyAgPFRhcmdldCBOYW1lPSJSZXNvbHZlQXNzZW1ibHlSZWZlcmVuY2VzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvdW5pY29kZWRhdGEudmN4cHJvaiBiL1BDYnVpbGQvdW5pY29kZWRhdGEudmN4cHJvagppbmRleCBjOWQ1Mjc4Li4zMTdjMWE4IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3VuaWNvZGVkYXRhLnZjeHByb2oKKysrIGIvUENidWlsZC91bmljb2RlZGF0YS52Y3hwcm9qCkBAIC0zOSwxNzAgKzM5LDMxIEBACiAgICAgPFJvb3ROYW1lc3BhY2U+dW5pY29kZWRhdGE8L1Jvb3ROYW1lc3BhY2U+CiAgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRhcmdldEV4dD4ucHlkPC9UYXJnZXRFeHQ+CisgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+CiAgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxMaW5rPgogICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTIwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxMaW5rPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMjAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTIwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTIwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTIwMDAwPC9CYXNlQWRkcmVzcz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHVuaWNvZGVkYXRhX2RiLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHVuaWNvZGVuYW1lX2RiLmgiIC8+CkBAIC0yMTEsNiArNzIsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KKyAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHB5dGhvbl9udC5yYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CiAgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvdnM5dG8xMC5weSBiL1BDYnVpbGQvdnM5dG8xMC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3ZGFiNS4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkL3ZzOXRvMTAucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0jUnVuIHRoaXMgZmlsZSBhZnRlciBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiB0aGUgVmlzdWFsU3R1ZGlvIDIwMDggc29sdXRpb24gYnkgVmlzdWFsU3R1ZGlvIDIwMTAuCi0jVGhpcyBjYW4gYmUgZG9uZSB3aGVuZXZlciB0aGUgMjAwOCBzb2x1dGlvbiBjaGFuZ2VzLgotI0l0IHdpbGwgbWFrZSB0aGUgbmVjZXNzYXJ5IGNsZWFudXAgYW5kIHVwZGF0ZXMgdG8gdGhlIHZjeHByb2ogZmlsZXMKLSN0aGUgLnByb3BzIGZpbGVzIG5lZWQgdG8gYmUgbWFpbnRhaW5lZCBieSBoYW5kIGlmIHRoZSAudnNwcm9wcyBmaWxlcyBjaGFuZ2UKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi1pbXBvcnQgb3MucGF0aAotCi1kZWYgdnM5dG8xMChzcmMsIGRlc3QpOgotICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIoc3JjKToKLSAgICAgICAgcGF0aCwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQotICAgICAgICBpZiBleHQubG93ZXIoKSBub3QgaW4gKCcudmN4cHJvaicsKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihzcmMsIG5hbWUpKQotICAgICAgICBkZXN0bmFtZSA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKGRlc3QsIG5hbWUpKQotICAgICAgICBwcmludCgiJXMgLT4gJXMiICUgKGZpbGVuYW1lLCBkZXN0bmFtZSkpCi0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsYXN0bGluZSA9IGIiIgotICAgICAgICBpbXBvcnRncm91cCA9IEZhbHNlCi0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZmluOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgotICAgICAgICAgICAgICAgICNyZW1vdmUgcmVkdW5kYW50IGxpbmtlciBvdXRwdXQgaW5mbwotICAgICAgICAgICAgICAgIGlmIGIiPE91dHB1dExpbmU+IiBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIGIiPFByb2dyYW1EYXRhYmFzZUZpbGU+IiBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIGIiPEltcG9ydExpYnJhcnk+IiBpbiBsaW5lIGFuZCBiIjwvSW1wb3J0TGlicmFyeT4iIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgICAgICAjYWRkIG5ldyBwcm9wZXJ0eSBzaGVldCB0byB0aGUgcHl0aG9uY29yZQotICAgICAgICAgICAgICAgIGlmIGltcG9ydGdyb3VwIGFuZCAicHl0aG9uY29yZSIgaW4gbmFtZS5sb3dlcigpOgotICAgICAgICAgICAgICAgICAgICBpZiBiIjwvSW1wb3J0R3JvdXA+IiBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYiJkZWJ1Zy5wcm9wcyIgaW4gbGFzdGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGInICAgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uY29yZV9kLnByb3BzIiAvPlxyXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBiInB5dGhvbmNvcmUiIG5vdCBpbiBsYXN0bGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYicgICAgPEltcG9ydCBQcm9qZWN0PSJweXRob25jb3JlLnByb3BzIiAvPlxyXG4nKQotICAgICAgICAgICAgICAgIGlmIGIiPEltcG9ydEdyb3VwIENvbmRpdGlvbiIgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0Z3JvdXAgPSBUcnVlCi0gICAgICAgICAgICAgICAgZWxpZiBiIjwvSW1wb3J0R3JvdXA+IiBpbiBsaW5lOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRncm91cCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCi0gICAgICAgICAgICAgICAgbGFzdGxpbmUgPSBsaW5lCi0gICAgICAgIHdpdGggb3BlbihkZXN0bmFtZSwgJ3diJykgYXMgZm91dDoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBzcmMgPSAiLiIgaWYgbGVuKHN5cy5hcmd2KSA8IDIgZWxzZSBzeXMuYXJndlsxXQotICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguYWJzcGF0aChzcmMpKQotICAgIGRlc3QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNyYywgIi4uIiwgbmFtZSArICJVcGQiKSkKLSAgICBvcy5tYWtlZGlycyhkZXN0KQotICAgIHZzOXRvMTAoc3JjLCBkZXN0KQpkaWZmIC0tZ2l0IGEvUENidWlsZC92czl0bzgucHkgYi9QQ2J1aWxkL3ZzOXRvOC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I4OGExNi4uMDAwMDAwMAotLS0gYS9QQ2J1aWxkL3ZzOXRvOC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLWltcG9ydCBvcwotCi1kZWYgdnM5dG84KHNyYywgZGVzdCk6Ci0gICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihzcmMpOgotICAgICAgICBwYXRoLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG5hbWUpCi0gICAgICAgIGlmIGV4dC5sb3dlcigpIG5vdCBpbiAoJy5zbG4nLCAnLnZjcHJvaicsICcudnNwcm9wcycpOgotICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHNyYywgbmFtZSkpCi0gICAgICAgIGRlc3RuYW1lID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZGVzdCwgbmFtZSkpCi0gICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAoZmlsZW5hbWUsIGRlc3RuYW1lKSkKLQotICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyVScpIGFzIGZpbjoKLSAgICAgICAgICAgIGxpbmVzID0gZmluLnJlYWQoKQotICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5yZXBsYWNlKCdWZXJzaW9uPSI5LDAwIicsICdWZXJzaW9uPSI4LjAwIicpCi0gICAgICAgICAgICBsaW5lcyA9IGxpbmVzLnJlcGxhY2UoJ1ZlcnNpb249IjkuMDAiJywgJ1ZlcnNpb249IjguMDAiJykKLSAgICAgICAgICAgIGxpbmVzID0gbGluZXMucmVwbGFjZSgnRm9ybWF0IFZlcnNpb24gMTAuMDAnLCAnRm9ybWF0IFZlcnNpb24gOS4wMCcpCi0gICAgICAgICAgICBsaW5lcyA9IGxpbmVzLnJlcGxhY2UoJ1Zpc3VhbCBTdHVkaW8gMjAwOCcsICdWaXN1YWwgU3R1ZGlvIDIwMDUnKQotCi0gICAgICAgICAgICBsaW5lcyA9IGxpbmVzLnJlcGxhY2UoJ3dpbmluc3QtOS4wJywgJ3dpbmluc3QtOC4wJykKLSAgICAgICAgICAgIGxpbmVzID0gbGluZXMucmVwbGFjZSgnLi5cXCcsICcuLlxcLi5cXCcpCi0gICAgICAgICAgICBsaW5lcyA9IGxpbmVzLnJlcGxhY2UoJy4uXFwuLlxcLi5cXC4uXFwnLCAnLi5cXC4uXFwuLlxcJykKLQotICAgICAgICAgICAgIyBCYWguIFZTOC4wIGRvZXMgbm90IGV4cGFuZCBtYWNyb3MgaW4gZmlsZSBuYW1lcy4KLSAgICAgICAgICAgICMgUmVwbGFjZSB0aGVtIGhlcmUuCi0gICAgICAgICAgICBsaW5lcyA9IGxpbmVzLnJlcGxhY2UoJyQoc3FsaXRlM0RpciknLCAnLi5cXC4uXFwuLlxcc3FsaXRlLTMuNi4yMScpCi0KLSAgICAgICAgd2l0aCBvcGVuKGRlc3RuYW1lLCAnd2InKSBhcyBmb3V0OgotICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5yZXBsYWNlKCJcbiIsICJcclxuIikuZW5jb2RlKCkKLSAgICAgICAgICAgIGZvdXQud3JpdGUobGluZXMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdnM5dG84KHNyYz0iLiIsIGRlc3Q9Ii4uL1BDL1ZTOC4wIikKZGlmZiAtLWdpdCBhL1BDYnVpbGQvd2luc291bmQudmN4cHJvaiBiL1BDYnVpbGQvd2luc291bmQudmN4cHJvagppbmRleCBjZjUxOGU5Li4xMjkxM2VmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3dpbnNvdW5kLnZjeHByb2oKKysrIGIvUENidWlsZC93aW5zb3VuZC52Y3hwcm9qCkBAIC0zOSwxNzQgKzM5LDM4IEBACiAgICAgPFJvb3ROYW1lc3BhY2U+d2luc291bmQ8L1Jvb3ROYW1lc3BhY2U+CiAgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0icHl0aG9uLnByb3BzIiAvPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRhcmdldEV4dD4ucHlkPC9UYXJnZXRFeHQ+CisgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWRfZC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KICAgPFByb3BlcnR5R3JvdXA+CiAgICAgPF9Qcm9qZWN0RmlsZVZlcnNpb24+MTAuMC4zMDMxOS4xPC9fUHJvamVjdEZpbGVWZXJzaW9uPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0PgotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d2lubW0ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53aW5tbS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53aW5tbS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d2lubW0ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53aW5tbS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53aW5tbS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIj4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndpbm1tLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgotICAgIDxNaWRsPgotICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+Ci0gICAgPC9NaWRsPgotICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d2lubW0ubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcd2luc291bmQuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CisgICAgPFJlc291cmNlQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xweXRob25fbnQucmMiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbmNvcmUudmN4cHJvaiI+CiAgICAgICA8UHJvamVjdD57Y2Y3YWMzZDEtZTJkZi00MWQyLWJlYTYtMWUyNTU2Y2RlYTI2fTwvUHJvamVjdD4KICAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3g2NC5wcm9wcyBiL1BDYnVpbGQveDY0LnByb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODVjMGVmLi4wMDAwMDAwCi0tLSBhL1BDYnVpbGQveDY0LnByb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgQ29uZGl0aW9uPSInJChIT1NUX1BZVEhPTiknIT0nJyI+Ci0gICAgPFB5dGhvbkV4ZT4kKEhPU1RfUFlUSE9OKTwvUHl0aG9uRXhlPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fV0lONjQ7X01fWDY0OyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPEJ1aWxkTWFjcm8gSW5jbHVkZT0iUHl0aG9uRXhlIj4KLSAgICAgIDxWYWx1ZT4kKFB5dGhvbkV4ZSk8L1ZhbHVlPgotICAgIDwvQnVpbGRNYWNybz4KLSAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3h4bGltaXRlZC52Y3hwcm9qIGIvUENidWlsZC94eGxpbWl0ZWQudmN4cHJvagppbmRleCBhYmY0MWY5Li4wMTQ0ZmE5IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3h4bGltaXRlZC52Y3hwcm9qCisrKyBiL1BDYnVpbGQveHhsaW1pdGVkLnZjeHByb2oKQEAgLTEsNiArMSwxNCBAQAog77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUEdJbnN0cnVtZW50fFdpbjMyIj4KICAgICAgIDxDb25maWd1cmF0aW9uPlBHSW5zdHJ1bWVudDwvQ29uZmlndXJhdGlvbj4KICAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CkBAIC0zMSwxNTggKzM5LDQ0IEBACiAgICAgPFJvb3ROYW1lc3BhY2U+eHhsaW1pdGVkPC9Sb290TmFtZXNwYWNlPgogICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9InB5dGhvbi5wcm9wcyIgLz4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgogICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KKyAgICA8U3VwcG9ydFBHTz5mYWxzZTwvU3VwcG9ydFBHTz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXA+CisgICAgPFRhcmdldEV4dD4ucHlkPC9UYXJnZXRFeHQ+CisgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+CiAgIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGdpbnN0cnVtZW50LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icGd1cGRhdGUucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgogICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyIgLz4KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+Ci0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPgotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7X1dJTjMyO19XSU5ETEw7UHlfTElNSVRFRF9BUEk9MHgwMzA0MDAwMDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk7UHlfTElNSVRFRF9BUEk9MHgwMzA1MDAwMDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgogICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UHlfTElNSVRFRF9BUEk9MHgwMzA0MDAwMDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KLSAgICA8TWlkbD4KLSAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgotICAgIDwvTWlkbD4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzb2NrMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5QeV9MSU1JVEVEX0FQST0weDAzMDQwMDAwOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzb2NrMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+Ci0gICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8eDY0JyI+Ci0gICAgPE1pZGw+Ci0gICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KLSAgICA8L01pZGw+Ci0gICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgotICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNceHhsaW1pdGVkLmMiIC8+CiAgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9InB5dGhvbjNkbGwudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57ODg1ZDQ4OTgtZDA4ZC00MDkxLTljNDAtYzcwMGNmZTNmYzVhfTwvUHJvamVjdD4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgpkaWZmIC0tZ2l0IGEvUGFyc2VyL1B5dGhvbi5hc2RsIGIvUGFyc2VyL1B5dGhvbi5hc2RsCmluZGV4IGRlYmQ4OWUuLmNkMDgzMmQgMTAwNjQ0Ci0tLSBhL1BhcnNlci9QeXRob24uYXNkbAorKysgYi9QYXJzZXIvUHl0aG9uLmFzZGwKQEAgLTksMTMgKzksMTQgQEAKICAgICAgICAgLS0gbm90IHJlYWxseSBhbiBhY3R1YWwgbm9kZSBidXQgdXNlZnVsIGluIEp5dGhvbidzIHR5cGVzeXN0ZW0uCiAgICAgICAgIHwgU3VpdGUoc3RtdCogYm9keSkKIAotICAgIHN0bXQgPSBGdW5jdGlvbkRlZihpZGVudGlmaWVyIG5hbWUsIGFyZ3VtZW50cyBhcmdzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0bXQqIGJvZHksIGV4cHIqIGRlY29yYXRvcl9saXN0LCBleHByPyByZXR1cm5zKQotICAgICAgICAgIHwgQ2xhc3NEZWYoaWRlbnRpZmllciBuYW1lLCAKKyAgICBzdG10ID0gRnVuY3Rpb25EZWYoaWRlbnRpZmllciBuYW1lLCBhcmd1bWVudHMgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgc3RtdCogYm9keSwgZXhwciogZGVjb3JhdG9yX2xpc3QsIGV4cHI/IHJldHVybnMpCisgICAgICAgICAgfCBBc3luY0Z1bmN0aW9uRGVmKGlkZW50aWZpZXIgbmFtZSwgYXJndW1lbnRzIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0bXQqIGJvZHksIGV4cHIqIGRlY29yYXRvcl9saXN0LCBleHByPyByZXR1cm5zKQorCisgICAgICAgICAgfCBDbGFzc0RlZihpZGVudGlmaWVyIG5hbWUsCiAgICAgICAgICAgICAgZXhwciogYmFzZXMsCiAgICAgICAgICAgICAga2V5d29yZCoga2V5d29yZHMsCi0gICAgICAgICAgICAgZXhwcj8gc3RhcmFyZ3MsCi0gICAgICAgICAgICAgZXhwcj8ga3dhcmdzLAogICAgICAgICAgICAgIHN0bXQqIGJvZHksCiAgICAgICAgICAgICAgZXhwciogZGVjb3JhdG9yX2xpc3QpCiAgICAgICAgICAgfCBSZXR1cm4oZXhwcj8gdmFsdWUpCkBAIC0yNiw5ICsyNywxMSBAQAogCiAgICAgICAgICAgLS0gdXNlICdvcmVsc2UnIGJlY2F1c2UgZWxzZSBpcyBhIGtleXdvcmQgaW4gdGFyZ2V0IGxhbmd1YWdlcwogICAgICAgICAgIHwgRm9yKGV4cHIgdGFyZ2V0LCBleHByIGl0ZXIsIHN0bXQqIGJvZHksIHN0bXQqIG9yZWxzZSkKKyAgICAgICAgICB8IEFzeW5jRm9yKGV4cHIgdGFyZ2V0LCBleHByIGl0ZXIsIHN0bXQqIGJvZHksIHN0bXQqIG9yZWxzZSkKICAgICAgICAgICB8IFdoaWxlKGV4cHIgdGVzdCwgc3RtdCogYm9keSwgc3RtdCogb3JlbHNlKQogICAgICAgICAgIHwgSWYoZXhwciB0ZXN0LCBzdG10KiBib2R5LCBzdG10KiBvcmVsc2UpCiAgICAgICAgICAgfCBXaXRoKHdpdGhpdGVtKiBpdGVtcywgc3RtdCogYm9keSkKKyAgICAgICAgICB8IEFzeW5jV2l0aCh3aXRoaXRlbSogaXRlbXMsIHN0bXQqIGJvZHkpCiAKICAgICAgICAgICB8IFJhaXNlKGV4cHI/IGV4YywgZXhwcj8gY2F1c2UpCiAgICAgICAgICAgfCBUcnkoc3RtdCogYm9keSwgZXhjZXB0aGFuZGxlciogaGFuZGxlcnMsIHN0bXQqIG9yZWxzZSwgc3RtdCogZmluYWxib2R5KQpAQCAtNTksMTMgKzYyLDEzIEBACiAgICAgICAgICB8IERpY3RDb21wKGV4cHIga2V5LCBleHByIHZhbHVlLCBjb21wcmVoZW5zaW9uKiBnZW5lcmF0b3JzKQogICAgICAgICAgfCBHZW5lcmF0b3JFeHAoZXhwciBlbHQsIGNvbXByZWhlbnNpb24qIGdlbmVyYXRvcnMpCiAgICAgICAgICAtLSB0aGUgZ3JhbW1hciBjb25zdHJhaW5zIHdoZXJlIHlpZWxkIGV4cHJlc3Npb25zIGNhbiBvY2N1cgorICAgICAgICAgfCBBd2FpdChleHByIHZhbHVlKQogICAgICAgICAgfCBZaWVsZChleHByPyB2YWx1ZSkKICAgICAgICAgIHwgWWllbGRGcm9tKGV4cHIgdmFsdWUpCiAgICAgICAgICAtLSBuZWVkIHNlcXVlbmNlcyBmb3IgY29tcGFyZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuCiAgICAgICAgICAtLSB4IDwgNCA8IDMgYW5kICh4IDwgNCkgPCAzCiAgICAgICAgICB8IENvbXBhcmUoZXhwciBsZWZ0LCBjbXBvcCogb3BzLCBleHByKiBjb21wYXJhdG9ycykKLSAgICAgICAgIHwgQ2FsbChleHByIGZ1bmMsIGV4cHIqIGFyZ3MsIGtleXdvcmQqIGtleXdvcmRzLAotICAgICAgICAgICAgIGV4cHI/IHN0YXJhcmdzLCBleHByPyBrd2FyZ3MpCisgICAgICAgICB8IENhbGwoZXhwciBmdW5jLCBleHByKiBhcmdzLCBrZXl3b3JkKiBrZXl3b3JkcykKICAgICAgICAgIHwgTnVtKG9iamVjdCBuKSAtLSBhIG51bWJlciBhcyBhIFB5T2JqZWN0LgogICAgICAgICAgfCBTdHIoc3RyaW5nIHMpIC0tIG5lZWQgdG8gc3BlY2lmeSByYXcsIHVuaWNvZGUsIGV0Yz8KICAgICAgICAgIHwgQnl0ZXMoYnl0ZXMgcykKQEAgLTc3LDcgKzgwLDcgQEAKICAgICAgICAgIHwgU3Vic2NyaXB0KGV4cHIgdmFsdWUsIHNsaWNlIHNsaWNlLCBleHByX2NvbnRleHQgY3R4KQogICAgICAgICAgfCBTdGFycmVkKGV4cHIgdmFsdWUsIGV4cHJfY29udGV4dCBjdHgpCiAgICAgICAgICB8IE5hbWUoaWRlbnRpZmllciBpZCwgZXhwcl9jb250ZXh0IGN0eCkKLSAgICAgICAgIHwgTGlzdChleHByKiBlbHRzLCBleHByX2NvbnRleHQgY3R4KSAKKyAgICAgICAgIHwgTGlzdChleHByKiBlbHRzLCBleHByX2NvbnRleHQgY3R4KQogICAgICAgICAgfCBUdXBsZShleHByKiBlbHRzLCBleHByX2NvbnRleHQgY3R4KQogCiAgICAgICAgICAgLS0gY29sX29mZnNldCBpcyB0aGUgYnl0ZSBvZmZzZXQgaW4gdGhlIHV0Zjggc3RyaW5nIHRoZSBwYXJzZXIgdXNlcwpAQCAtODUsMTMgKzg4LDEzIEBACiAKICAgICBleHByX2NvbnRleHQgPSBMb2FkIHwgU3RvcmUgfCBEZWwgfCBBdWdMb2FkIHwgQXVnU3RvcmUgfCBQYXJhbQogCi0gICAgc2xpY2UgPSBTbGljZShleHByPyBsb3dlciwgZXhwcj8gdXBwZXIsIGV4cHI/IHN0ZXApIAotICAgICAgICAgIHwgRXh0U2xpY2Uoc2xpY2UqIGRpbXMpIAotICAgICAgICAgIHwgSW5kZXgoZXhwciB2YWx1ZSkgCisgICAgc2xpY2UgPSBTbGljZShleHByPyBsb3dlciwgZXhwcj8gdXBwZXIsIGV4cHI/IHN0ZXApCisgICAgICAgICAgfCBFeHRTbGljZShzbGljZSogZGltcykKKyAgICAgICAgICB8IEluZGV4KGV4cHIgdmFsdWUpCiAKLSAgICBib29sb3AgPSBBbmQgfCBPciAKKyAgICBib29sb3AgPSBBbmQgfCBPcgogCi0gICAgb3BlcmF0b3IgPSBBZGQgfCBTdWIgfCBNdWx0IHwgRGl2IHwgTW9kIHwgUG93IHwgTFNoaWZ0IAorICAgIG9wZXJhdG9yID0gQWRkIHwgU3ViIHwgTXVsdCB8IE1hdE11bHQgfCBEaXYgfCBNb2QgfCBQb3cgfCBMU2hpZnQKICAgICAgICAgICAgICAgICAgfCBSU2hpZnQgfCBCaXRPciB8IEJpdFhvciB8IEJpdEFuZCB8IEZsb29yRGl2CiAKICAgICB1bmFyeW9wID0gSW52ZXJ0IHwgTm90IHwgVUFkZCB8IFVTdWIKQEAgLTEwOSw4ICsxMTIsOCBAQAogICAgIGFyZyA9IChpZGVudGlmaWVyIGFyZywgZXhwcj8gYW5ub3RhdGlvbikKICAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKLSAgICAtLSBrZXl3b3JkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBjYWxsCi0gICAga2V5d29yZCA9IChpZGVudGlmaWVyIGFyZywgZXhwciB2YWx1ZSkKKyAgICAtLSBrZXl3b3JkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBjYWxsIChOVUxMIGlkZW50aWZpZXIgZm9yICoqa3dhcmdzKQorICAgIGtleXdvcmQgPSAoaWRlbnRpZmllcj8gYXJnLCBleHByIHZhbHVlKQogCiAgICAgLS0gaW1wb3J0IG5hbWUgd2l0aCBvcHRpb25hbCAnYXMnIGFsaWFzLgogICAgIGFsaWFzID0gKGlkZW50aWZpZXIgbmFtZSwgaWRlbnRpZmllcj8gYXNuYW1lKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL2FzZGwucHkgYi9QYXJzZXIvYXNkbC5weQppbmRleCBmYzFiMTZjLi4xMjFjZGFiIDEwMDY0NAotLS0gYS9QYXJzZXIvYXNkbC5weQorKysgYi9QYXJzZXIvYXNkbC5weQpAQCAtMSwyNTUgKzEsNTIgQEAKLSIiIkFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBaZXBoeXIgQWJzdHJhY3QgU3ludGF4IERlZmluaXRpb24gTGFuZ3VhZ2UuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXJzZXIgZm9yIEFTREwgWzFdIGRlZmluaXRpb24gZmlsZXMuIFJlYWRzIGluIGFuIEFTREwgZGVzY3JpcHRpb24gYW5kIHBhcnNlcworIyBpdCBpbnRvIGFuIEFTVCB0aGF0IGRlc2NyaWJlcyBpdC4KKyMKKyMgVGhlIEVCTkYgd2UncmUgcGFyc2luZyBoZXJlOiBGaWd1cmUgMSBvZiB0aGUgcGFwZXIgWzFdLiBFeHRlbmRlZCB0byBzdXBwb3J0CisjIG1vZHVsZXMgYW5kIGF0dHJpYnV0ZXMgYWZ0ZXIgYSBwcm9kdWN0LiBXb3JkcyBzdGFydGluZyB3aXRoIENhcGl0YWwgbGV0dGVycworIyBhcmUgdGVybWluYWxzLiBMaXRlcmFsIHRva2VucyBhcmUgaW4gImRvdWJsZSBxdW90ZXMiLiBPdGhlcnMgYXJlCisjIG5vbi10ZXJtaW5hbHMuIElkIGlzIGVpdGhlciBUb2tlbklkIG9yIENvbnN0cnVjdG9ySWQuCisjCisjIG1vZHVsZSAgICAgICAgOjo9ICJtb2R1bGUiIElkICJ7IiBbZGVmaW5pdGlvbnNdICJ9IgorIyBkZWZpbml0aW9ucyAgIDo6PSB7IFR5cGVJZCAiPSIgdHlwZSB9CisjIHR5cGUgICAgICAgICAgOjo9IHByb2R1Y3QgfCBzdW0KKyMgcHJvZHVjdCAgICAgICA6Oj0gZmllbGRzIFsiYXR0cmlidXRlcyIgZmllbGRzXQorIyBmaWVsZHMgICAgICAgIDo6PSAiKCIgeyBmaWVsZCwgIiwiIH0gZmllbGQgIikiCisjIGZpZWxkICAgICAgICAgOjo9IFR5cGVJZCBbIj8iIHwgIioiXSBbSWRdCisjIHN1bSAgICAgICAgICAgOjo9IGNvbnN0cnVjdG9yIHsgInwiIGNvbnN0cnVjdG9yIH0gWyJhdHRyaWJ1dGVzIiBmaWVsZHNdCisjIGNvbnN0cnVjdG9yICAgOjo9IENvbnN0cnVjdG9ySWQgW2ZpZWxkc10KKyMKKyMgWzFdICJUaGUgWmVwaHlyIEFic3RyYWN0IFN5bnRheCBEZXNjcmlwdGlvbiBMYW5ndWFnZSIgYnkgV2FuZywgZXQuIGFsLiBTZWUKKyMgICAgIGh0dHA6Ly9hc2RsLnNvdXJjZWZvcmdlLm5ldC8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitpbXBvcnQgcmUKIAotU2VlIGh0dHA6Ly9hc2RsLnNvdXJjZWZvcmdlLm5ldC8gYW5kCi1odHRwOi8vd3d3LmNzLnByaW5jZXRvbi5lZHUvcmVzZWFyY2gvdGVjaHJlcHMvVFItNTU0LTk3CitfX2FsbF9fID0gWworICAgICdidWlsdGluX3R5cGVzJywgJ3BhcnNlJywgJ0FTVCcsICdNb2R1bGUnLCAnVHlwZScsICdDb25zdHJ1Y3RvcicsCisgICAgJ0ZpZWxkJywgJ1N1bScsICdQcm9kdWN0JywgJ1Zpc2l0b3JCYXNlJywgJ0NoZWNrJywgJ2NoZWNrJ10KIAotT25seSBzdXBwb3J0cyB0b3AgbGV2ZWwgbW9kdWxlIGRlY2wsIG5vdCB2aWV3LiAgSSdtIGd1ZXNzaW5nIHRoYXQgdmlldwotaXMgaW50ZW5kZWQgdG8gc3VwcG9ydCB0aGUgYnJvd3NlciBhbmQgSSdtIG5vdCBpbnRlcmVzdGVkIGluIHRoZQotYnJvd3Nlci4KKyMgVGhlIGZvbGxvd2luZyBjbGFzc2VzIGRlZmluZSBub2RlcyBpbnRvIHdoaWNoIHRoZSBBU0RMIGRlc2NyaXB0aW9uIGlzIHBhcnNlZC4KKyMgTm90ZTogdGhpcyBpcyBhICJtZXRhLUFTVCIuIEFTREwgZmlsZXMgKHN1Y2ggYXMgUHl0aG9uLmFzZGwpIGRlc2NyaWJlIHRoZSBBU1QKKyMgc3RydWN0dXJlIHVzZWQgYnkgYSBwcm9ncmFtbWluZyBsYW5ndWFnZS4gQnV0IEFTREwgZmlsZXMgdGhlbXNlbHZlcyBuZWVkIHRvIGJlCisjIHBhcnNlZC4gVGhpcyBtb2R1bGUgcGFyc2VzIEFTREwgZmlsZXMgYW5kIHVzZXMgYSBzaW1wbGUgQVNUIHRvIHJlcHJlc2VudCB0aGVtLgorIyBTZWUgdGhlIEVCTkYgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBsb2dpY2FsIGNvbm5lY3Rpb24KKyMgYmV0d2VlbiB0aGUgdmFyaW91cyBub2RlIHR5cGVzLgogCi1DaGFuZ2VzIGZvciBQeXRob246IEFkZCBzdXBwb3J0IGZvciBtb2R1bGUgdmVyc2lvbnMKLSIiIgorYnVpbHRpbl90eXBlcyA9IHsnaWRlbnRpZmllcicsICdzdHJpbmcnLCAnYnl0ZXMnLCAnaW50JywgJ29iamVjdCcsICdzaW5nbGV0b24nfQogCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0cmFjZWJhY2sKLQotaW1wb3J0IHNwYXJrCi0KLWRlZiBvdXRwdXQoKnN0cmluZ3MpOgotICAgIGZvciBzIGluIHN0cmluZ3M6Ci0gICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKHMpICsgIlxuIikKLQotCi1jbGFzcyBUb2tlbihvYmplY3QpOgotICAgICMgc3Bhcmsgc2VlbXMgdG8gZGlzcGF0Y2ggaW4gdGhlIHBhcnNlciBiYXNlZCBvbiBhIHRva2VuJ3MKLSAgICAjIHR5cGUgYXR0cmlidXRlCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIGxpbmVubyk6Ci0gICAgICAgIHNlbGYudHlwZSA9IHR5cGUKLSAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlCi0KK2NsYXNzIEFTVDoKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZikKLQotY2xhc3MgSWQoVG9rZW4pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgbGluZW5vKToKLSAgICAgICAgc2VsZi50eXBlID0gJ0lkJwotICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKLSAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQotCi1jbGFzcyBTdHJpbmcoVG9rZW4pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgbGluZW5vKToKLSAgICAgICAgc2VsZi50eXBlID0gJ1N0cmluZycKLSAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCi0gICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCi0KLWNsYXNzIEFTRExTeW50YXhFcnJvcihFeGNlcHRpb24pOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmVubywgdG9rZW49Tm9uZSwgbXNnPU5vbmUpOgotICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubwotICAgICAgICBzZWxmLnRva2VuID0gdG9rZW4KLSAgICAgICAgc2VsZi5tc2cgPSBtc2cKLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICBpZiBzZWxmLm1zZyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuICJFcnJvciBhdCAnJXMnLCBsaW5lICVkIiAlIChzZWxmLnRva2VuLCBzZWxmLmxpbmVubykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiJXMsIGxpbmUgJWQiICUgKHNlbGYubXNnLCBzZWxmLmxpbmVubykKLQotY2xhc3MgQVNETFNjYW5uZXIoc3BhcmsuR2VuZXJpY1NjYW5uZXIsIG9iamVjdCk6Ci0KLSAgICBkZWYgdG9rZW5pemUoc2VsZiwgaW5wdXQpOgotICAgICAgICBzZWxmLnJ2ID0gW10KLSAgICAgICAgc2VsZi5saW5lbm8gPSAxCi0gICAgICAgIHN1cGVyKEFTRExTY2FubmVyLCBzZWxmKS50b2tlbml6ZShpbnB1dCkKLSAgICAgICAgcmV0dXJuIHNlbGYucnYKLQotICAgIGRlZiB0X2lkKHNlbGYsIHMpOgotICAgICAgICByIltcd1wuXSsiCi0gICAgICAgICMgWFhYIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggdXBwZXIgdnMuIGxvd2VyLCB3aGljaCBpcwotICAgICAgICAjIHNpZ25pZmljYW50IGZvciBBU0RMLgotICAgICAgICBzZWxmLnJ2LmFwcGVuZChJZChzLCBzZWxmLmxpbmVubykpCi0KLSAgICBkZWYgdF9zdHJpbmcoc2VsZiwgcyk6Ci0gICAgICAgIHInIlteIl0qIicKLSAgICAgICAgc2VsZi5ydi5hcHBlbmQoU3RyaW5nKHMsIHNlbGYubGluZW5vKSkKLQotICAgIGRlZiB0X3h4eChzZWxmLCBzKTogIyBub3Qgc3VyZSB3aGF0IHRoaXMgcHJvZHVjdGlvbiBtZWFucwotICAgICAgICByIjw9IgotICAgICAgICBzZWxmLnJ2LmFwcGVuZChUb2tlbihzLCBzZWxmLmxpbmVubykpCi0KLSAgICBkZWYgdF9wdW5jdHVhdGlvbihzZWxmLCBzKToKLSAgICAgICAgciJbXHtcfVwqXD1cfFwoXClcLFw/XDpdIgotICAgICAgICBzZWxmLnJ2LmFwcGVuZChUb2tlbihzLCBzZWxmLmxpbmVubykpCi0KLSAgICBkZWYgdF9jb21tZW50KHNlbGYsIHMpOgotICAgICAgICByIlwtXC1bXlxuXSoiCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiB0X25ld2xpbmUoc2VsZiwgcyk6Ci0gICAgICAgIHIiXG4iCi0gICAgICAgIHNlbGYubGluZW5vICs9IDEKLQotICAgIGRlZiB0X3doaXRlc3BhY2Uoc2VsZiwgcyk6Ci0gICAgICAgIHIiWyBcdF0rIgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdF9kZWZhdWx0KHNlbGYsIHMpOgotICAgICAgICByIiAuICsiCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVubWF0Y2hlZCBpbnB1dDogJXIiICUgcykKLQotY2xhc3MgQVNETFBhcnNlcihzcGFyay5HZW5lcmljUGFyc2VyLCBvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc3VwZXIoQVNETFBhcnNlciwgc2VsZikuX19pbml0X18oIm1vZHVsZSIpCi0KLSAgICBkZWYgdHlwZXN0cmluZyhzZWxmLCB0b2spOgotICAgICAgICByZXR1cm4gdG9rLnR5cGUKLQotICAgIGRlZiBlcnJvcihzZWxmLCB0b2spOgotICAgICAgICByYWlzZSBBU0RMU3ludGF4RXJyb3IodG9rLmxpbmVubywgdG9rKQotCi0gICAgZGVmIHBfbW9kdWxlXzAoc2VsZiwgaW5mbyk6Ci0gICAgICAgICIgbW9kdWxlIDo6PSBJZCBJZCB7IH0gIgotICAgICAgICBtb2R1bGUsIG5hbWUsIF8wLCBfMSA9IGluZm8KLSAgICAgICAgaWYgbW9kdWxlLnZhbHVlICE9ICJtb2R1bGUiOgotICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKG1vZHVsZS5saW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHBlY3RlZCAnbW9kdWxlJywgZm91bmQgJXMiICUgbW9kdWxlKQotICAgICAgICByZXR1cm4gTW9kdWxlKG5hbWUsIE5vbmUpCi0KLSAgICBkZWYgcF9tb2R1bGUoc2VsZiwgaW5mbyk6Ci0gICAgICAgICIgbW9kdWxlIDo6PSBJZCBJZCB7IGRlZmluaXRpb25zIH0gIgotICAgICAgICBtb2R1bGUsIG5hbWUsIF8wLCBkZWZpbml0aW9ucywgXzEgPSBpbmZvCi0gICAgICAgIGlmIG1vZHVsZS52YWx1ZSAhPSAibW9kdWxlIjoKLSAgICAgICAgICAgIHJhaXNlIEFTRExTeW50YXhFcnJvcihtb2R1bGUubGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXhwZWN0ZWQgJ21vZHVsZScsIGZvdW5kICVzIiAlIG1vZHVsZSkKLSAgICAgICAgcmV0dXJuIE1vZHVsZShuYW1lLCBkZWZpbml0aW9ucykKLQotICAgIGRlZiBwX2RlZmluaXRpb25fMChzZWxmLCBkZWZpbml0aW9uKToKLSAgICAgICAgIiBkZWZpbml0aW9ucyA6Oj0gZGVmaW5pdGlvbiAiCi0gICAgICAgIHJldHVybiBkZWZpbml0aW9uWzBdCi0KLSAgICBkZWYgcF9kZWZpbml0aW9uXzEoc2VsZiwgZGVmaW5pdGlvbnMpOgotICAgICAgICAiIGRlZmluaXRpb25zIDo6PSBkZWZpbml0aW9uIGRlZmluaXRpb25zICIKLSAgICAgICAgcmV0dXJuIGRlZmluaXRpb25zWzBdICsgZGVmaW5pdGlvbnNbMV0KLQotICAgIGRlZiBwX2RlZmluaXRpb24oc2VsZiwgaW5mbyk6Ci0gICAgICAgICIgZGVmaW5pdGlvbiA6Oj0gSWQgPSB0eXBlICIKLSAgICAgICAgaWQsIF8sIHR5cGUgPSBpbmZvCi0gICAgICAgIHJldHVybiBbVHlwZShpZCwgdHlwZSldCi0KLSAgICBkZWYgcF90eXBlXzAoc2VsZiwgcHJvZHVjdCk6Ci0gICAgICAgICIgdHlwZSA6Oj0gcHJvZHVjdCAiCi0gICAgICAgIHJldHVybiBwcm9kdWN0WzBdCi0KLSAgICBkZWYgcF90eXBlXzEoc2VsZiwgc3VtKToKLSAgICAgICAgIiB0eXBlIDo6PSBzdW0gIgotICAgICAgICByZXR1cm4gU3VtKHN1bVswXSkKLQotICAgIGRlZiBwX3R5cGVfMihzZWxmLCBpbmZvKToKLSAgICAgICAgIiB0eXBlIDo6PSBzdW0gSWQgKCBmaWVsZHMgKSAiCi0gICAgICAgIHN1bSwgaWQsIF8wLCBhdHRyaWJ1dGVzLCBfMSA9IGluZm8KLSAgICAgICAgaWYgaWQudmFsdWUgIT0gImF0dHJpYnV0ZXMiOgotICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKGlkLmxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGF0dHJpYnV0ZXMsIGZvdW5kICVzIiAlIGlkKQotICAgICAgICByZXR1cm4gU3VtKHN1bSwgYXR0cmlidXRlcykKLQotICAgIGRlZiBwX3Byb2R1Y3RfMChzZWxmLCBpbmZvKToKLSAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApICIKLSAgICAgICAgXzAsIGZpZWxkcywgXzEgPSBpbmZvCi0gICAgICAgIHJldHVybiBQcm9kdWN0KGZpZWxkcykKLQotICAgIGRlZiBwX3Byb2R1Y3RfMShzZWxmLCBpbmZvKToKLSAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApIElkICggZmllbGRzICkgIgotICAgICAgICBfMCwgZmllbGRzLCBfMSwgaWQsIF8yLCBhdHRyaWJ1dGVzLCBfMyA9IGluZm8KLSAgICAgICAgaWYgaWQudmFsdWUgIT0gImF0dHJpYnV0ZXMiOgotICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKGlkLmxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGF0dHJpYnV0ZXMsIGZvdW5kICVzIiAlIGlkKQotICAgICAgICByZXR1cm4gUHJvZHVjdChmaWVsZHMsIGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgcF9zdW1fMChzZWxmLCBjb25zdHJ1Y3Rvcik6Ci0gICAgICAgICIgc3VtIDo6PSBjb25zdHJ1Y3RvciAiCi0gICAgICAgIHJldHVybiBbY29uc3RydWN0b3JbMF1dCi0KLSAgICBkZWYgcF9zdW1fMShzZWxmLCBpbmZvKToKLSAgICAgICAgIiBzdW0gOjo9IGNvbnN0cnVjdG9yIHwgc3VtICIKLSAgICAgICAgY29uc3RydWN0b3IsIF8sIHN1bSA9IGluZm8KLSAgICAgICAgcmV0dXJuIFtjb25zdHJ1Y3Rvcl0gKyBzdW0KLQotICAgIGRlZiBwX3N1bV8yKHNlbGYsIGluZm8pOgotICAgICAgICAiIHN1bSA6Oj0gY29uc3RydWN0b3IgfCBzdW0gIgotICAgICAgICBjb25zdHJ1Y3RvciwgXywgc3VtID0gaW5mbwotICAgICAgICByZXR1cm4gW2NvbnN0cnVjdG9yXSArIHN1bQotCi0gICAgZGVmIHBfY29uc3RydWN0b3JfMChzZWxmLCBpZCk6Ci0gICAgICAgICIgY29uc3RydWN0b3IgOjo9IElkICIKLSAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yKGlkWzBdKQotCi0gICAgZGVmIHBfY29uc3RydWN0b3JfMShzZWxmLCBpbmZvKToKLSAgICAgICAgIiBjb25zdHJ1Y3RvciA6Oj0gSWQgKCBmaWVsZHMgKSAiCi0gICAgICAgIGlkLCBfMCwgZmllbGRzLCBfMSA9IGluZm8KLSAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yKGlkLCBmaWVsZHMpCi0KLSAgICBkZWYgcF9maWVsZHNfMChzZWxmLCBmaWVsZCk6Ci0gICAgICAgICIgZmllbGRzIDo6PSBmaWVsZCAiCi0gICAgICAgIHJldHVybiBbZmllbGRbMF1dCi0KLSAgICBkZWYgcF9maWVsZHNfMShzZWxmLCBpbmZvKToKLSAgICAgICAgIiBmaWVsZHMgOjo9IGZpZWxkcyAsIGZpZWxkICIKLSAgICAgICAgZmllbGRzLCBfLCBmaWVsZCA9IGluZm8KLSAgICAgICAgcmV0dXJuIGZpZWxkcyArIFtmaWVsZF0KLQotICAgIGRlZiBwX2ZpZWxkXzAoc2VsZiwgdHlwZV8pOgotICAgICAgICAiIGZpZWxkIDo6PSBJZCAiCi0gICAgICAgIHJldHVybiBGaWVsZCh0eXBlX1swXSkKLQotICAgIGRlZiBwX2ZpZWxkXzEoc2VsZiwgaW5mbyk6Ci0gICAgICAgICIgZmllbGQgOjo9IElkIElkICIKLSAgICAgICAgdHlwZSwgbmFtZSA9IGluZm8KLSAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGUsIG5hbWUpCi0KLSAgICBkZWYgcF9maWVsZF8yKHNlbGYsIGluZm8pOgotICAgICAgICAiIGZpZWxkIDo6PSBJZCAqIElkICIKLSAgICAgICAgdHlwZSwgXywgbmFtZSA9IGluZm8KLSAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGUsIG5hbWUsIHNlcT1UcnVlKQotCi0gICAgZGVmIHBfZmllbGRfMyhzZWxmLCBpbmZvKToKLSAgICAgICAgIiBmaWVsZCA6Oj0gSWQgPyBJZCAiCi0gICAgICAgIHR5cGUsIF8sIG5hbWUgPSBpbmZvCi0gICAgICAgIHJldHVybiBGaWVsZCh0eXBlLCBuYW1lLCBvcHQ9VHJ1ZSkKLQotICAgIGRlZiBwX2ZpZWxkXzQoc2VsZiwgdHlwZV8pOgotICAgICAgICAiIGZpZWxkIDo6PSBJZCAqICIKLSAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGVfWzBdLCBzZXE9VHJ1ZSkKLQotICAgIGRlZiBwX2ZpZWxkXzUoc2VsZiwgdHlwZV8pOgotICAgICAgICAiIGZpZWxkIDo6PSBJZCA/ICIKLSAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGVbMF0sIG9wdD1UcnVlKQotCi1idWlsdGluX3R5cGVzID0gKCJpZGVudGlmaWVyIiwgInN0cmluZyIsICJieXRlcyIsICJpbnQiLCAib2JqZWN0IiwgInNpbmdsZXRvbiIpCi0KLSMgYmVsb3cgaXMgYSBjb2xsZWN0aW9uIG9mIGNsYXNzZXMgdG8gY2FwdHVyZSB0aGUgQVNUIG9mIGFuIEFTVCA6LSkKLSMgbm90IHN1cmUgaWYgYW55IG9mIHRoZSBtZXRob2RzIGFyZSB1c2VmdWwgeWV0LCBidXQgSSdtIGFkZGluZyB0aGVtCi0jIHBpZWNlbWVhbCBhcyB0aGV5IHNlZW0gaGVscGZ1bAotCi1jbGFzcyBBU1Qob2JqZWN0KToKLSAgICBwYXNzICMgYSBtYXJrZXIgY2xhc3MKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiBjbGFzcyBNb2R1bGUoQVNUKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGZucyk6CiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi5kZm5zID0gZGZucwotICAgICAgICBzZWxmLnR5cGVzID0ge30gIyBtYXBzIHR5cGUgbmFtZSB0byB2YWx1ZSAoZnJvbSBkZm5zKQotICAgICAgICBmb3IgdHlwZSBpbiBkZm5zOgotICAgICAgICAgICAgc2VsZi50eXBlc1t0eXBlLm5hbWUudmFsdWVdID0gdHlwZS52YWx1ZQorICAgICAgICBzZWxmLnR5cGVzID0ge3R5cGUubmFtZTogdHlwZS52YWx1ZSBmb3IgdHlwZSBpbiBkZm5zfQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIk1vZHVsZSglcywgJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYuZGZucykKKyAgICAgICAgcmV0dXJuICdNb2R1bGUoezAubmFtZX0sIHswLmRmbnN9KScuZm9ybWF0KHNlbGYpCiAKIGNsYXNzIFR5cGUoQVNUKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdmFsdWUpOgpAQCAtMjU3LDcgKzU0LDcgQEAKICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiVHlwZSglcywgJXMpIiAlIChzZWxmLm5hbWUsIHNlbGYudmFsdWUpCisgICAgICAgIHJldHVybiAnVHlwZSh7MC5uYW1lfSwgezAudmFsdWV9KScuZm9ybWF0KHNlbGYpCiAKIGNsYXNzIENvbnN0cnVjdG9yKEFTVCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGZpZWxkcz1Ob25lKToKQEAgLTI2NSw3ICs2Miw3IEBACiAgICAgICAgIHNlbGYuZmllbGRzID0gZmllbGRzIG9yIFtdCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiQ29uc3RydWN0b3IoJXMsICVzKSIgJSAoc2VsZi5uYW1lLCBzZWxmLmZpZWxkcykKKyAgICAgICAgcmV0dXJuICdDb25zdHJ1Y3Rvcih7MC5uYW1lfSwgezAuZmllbGRzfSknLmZvcm1hdChzZWxmKQogCiBjbGFzcyBGaWVsZChBU1QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBuYW1lPU5vbmUsIHNlcT1GYWxzZSwgb3B0PUZhbHNlKToKQEAgLTI4Miw5ICs3OSw5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBleHRyYSA9ICIiCiAgICAgICAgIGlmIHNlbGYubmFtZSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuICJGaWVsZCglcyVzKSIgJSAoc2VsZi50eXBlLCBleHRyYSkKKyAgICAgICAgICAgIHJldHVybiAnRmllbGQoezAudHlwZX17MX0pJy5mb3JtYXQoc2VsZiwgZXh0cmEpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIkZpZWxkKCVzLCAlcyVzKSIgJSAoc2VsZi50eXBlLCBzZWxmLm5hbWUsIGV4dHJhKQorICAgICAgICAgICAgcmV0dXJuICdGaWVsZCh7MC50eXBlfSwgezAubmFtZX17MX0pJy5mb3JtYXQoc2VsZiwgZXh0cmEpCiAKIGNsYXNzIFN1bShBU1QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlcywgYXR0cmlidXRlcz1Ob25lKToKQEAgLTI5MiwxMCArODksMTAgQEAKICAgICAgICAgc2VsZi5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyBvciBbXQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmF0dHJpYnV0ZXMgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAiU3VtKCVzKSIgJSBzZWxmLnR5cGVzCisgICAgICAgIGlmIHNlbGYuYXR0cmlidXRlczoKKyAgICAgICAgICAgIHJldHVybiAnU3VtKHswLnR5cGVzfSwgezAuYXR0cmlidXRlc30pJy5mb3JtYXQoc2VsZikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiU3VtKCVzLCAlcykiICUgKHNlbGYudHlwZXMsIHNlbGYuYXR0cmlidXRlcykKKyAgICAgICAgICAgIHJldHVybiAnU3VtKHswLnR5cGVzfSknLmZvcm1hdChzZWxmKQogCiBjbGFzcyBQcm9kdWN0KEFTVCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcywgYXR0cmlidXRlcz1Ob25lKToKQEAgLTMwMyw0OSArMTAwLDQzIEBACiAgICAgICAgIHNlbGYuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgb3IgW10KIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5hdHRyaWJ1dGVzIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMpIiAlIHNlbGYuZmllbGRzCisgICAgICAgIGlmIHNlbGYuYXR0cmlidXRlczoKKyAgICAgICAgICAgIHJldHVybiAnUHJvZHVjdCh7MC5maWVsZHN9LCB7MC5hdHRyaWJ1dGVzfSknLmZvcm1hdChzZWxmKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzLCAlcykiICUgKHNlbGYuZmllbGRzLCBzZWxmLmF0dHJpYnV0ZXMpCisgICAgICAgICAgICByZXR1cm4gJ1Byb2R1Y3QoezAuZmllbGRzfSknLmZvcm1hdChzZWxmKQorCisjIEEgZ2VuZXJpYyB2aXNpdG9yIGZvciB0aGUgbWV0YS1BU1QgdGhhdCBkZXNjcmliZXMgQVNETC4gVGhpcyBjYW4gYmUgdXNlZCBieQorIyBlbWl0dGVycy4gTm90ZSB0aGF0IHRoaXMgdmlzaXRvciBkb2VzIG5vdCBwcm92aWRlIGEgZ2VuZXJpYyB2aXNpdCBtZXRob2QsIHNvIGEKKyMgc3ViY2xhc3MgbmVlZHMgdG8gZGVmaW5lIHZpc2l0IG1ldGhvZHMgZnJvbSB2aXNpdE1vZHVsZSB0byBhcyBkZWVwIGFzIHRoZQorIyBpbnRlcmVzdGluZyBub2RlLgorIyBXZSBhbHNvIGRlZmluZSBhIENoZWNrIHZpc2l0b3IgdGhhdCBtYWtlcyBzdXJlIHRoZSBwYXJzZWQgQVNETCBpcyB3ZWxsLWZvcm1lZC4KIAogY2xhc3MgVmlzaXRvckJhc2Uob2JqZWN0KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBza2lwPUZhbHNlKToKKyAgICAiIiJHZW5lcmljIHRyZWUgdmlzaXRvciBmb3IgQVNUcy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuY2FjaGUgPSB7fQotICAgICAgICBzZWxmLnNraXAgPSBza2lwCiAKLSAgICBkZWYgdmlzaXQoc2VsZiwgb2JqZWN0LCAqYXJncyk6Ci0gICAgICAgIG1ldGggPSBzZWxmLl9kaXNwYXRjaChvYmplY3QpCi0gICAgICAgIGlmIG1ldGggaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtZXRoKG9iamVjdCwgKmFyZ3MpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICBvdXRwdXQoIkVycm9yIHZpc2l0aW5nIiArIHJlcHIob2JqZWN0KSkKLSAgICAgICAgICAgIG91dHB1dChzdHIoc3lzLmV4Y19pbmZvKClbMV0pKQotICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgICAgICAgICAjIFhYWCBoYWNrCi0gICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdmaWxlJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5maWxlLmZsdXNoKCkKLSAgICAgICAgICAgIG9zLl9leGl0KDEpCi0KLSAgICBkZWYgX2Rpc3BhdGNoKHNlbGYsIG9iamVjdCk6Ci0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG9iamVjdCwgQVNUKSwgcmVwcihvYmplY3QpCi0gICAgICAgIGtsYXNzID0gb2JqZWN0Ll9fY2xhc3NfXworICAgIGRlZiB2aXNpdChzZWxmLCBvYmosICphcmdzKToKKyAgICAgICAga2xhc3MgPSBvYmouX19jbGFzc19fCiAgICAgICAgIG1ldGggPSBzZWxmLmNhY2hlLmdldChrbGFzcykKICAgICAgICAgaWYgbWV0aCBpcyBOb25lOgogICAgICAgICAgICAgbWV0aG5hbWUgPSAidmlzaXQiICsga2xhc3MuX19uYW1lX18KLSAgICAgICAgICAgIGlmIHNlbGYuc2tpcDoKLSAgICAgICAgICAgICAgICBtZXRoID0gZ2V0YXR0cihzZWxmLCBtZXRobmFtZSwgTm9uZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbWV0aCA9IGdldGF0dHIoc2VsZiwgbWV0aG5hbWUpCisgICAgICAgICAgICBtZXRoID0gZ2V0YXR0cihzZWxmLCBtZXRobmFtZSwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuY2FjaGVba2xhc3NdID0gbWV0aAotICAgICAgICByZXR1cm4gbWV0aAorICAgICAgICBpZiBtZXRoOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1ldGgob2JqLCAqYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBwcmludCgiRXJyb3IgdmlzaXRpbmcgJXI6ICVzIiAlIChvYmosIGUpKQorICAgICAgICAgICAgICAgIHJhaXNlCiAKIGNsYXNzIENoZWNrKFZpc2l0b3JCYXNlKToKKyAgICAiIiJBIHZpc2l0b3IgdGhhdCBjaGVja3MgYSBwYXJzZWQgQVNETCB0cmVlIGZvciBjb3JyZWN0bmVzcy4KIAorICAgIEVycm9ycyBhcmUgcHJpbnRlZCBhbmQgYWNjdW11bGF0ZWQuCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzdXBlcihDaGVjaywgc2VsZikuX19pbml0X18oc2tpcD1UcnVlKQorICAgICAgICBzdXBlcihDaGVjaywgc2VsZikuX19pbml0X18oKQogICAgICAgICBzZWxmLmNvbnMgPSB7fQogICAgICAgICBzZWxmLmVycm9ycyA9IDAKICAgICAgICAgc2VsZi50eXBlcyA9IHt9CkBAIC0zNjcsOCArMTU4LDggQEAKICAgICAgICAgaWYgY29uZmxpY3QgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuY29uc1trZXldID0gbmFtZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgb3V0cHV0KCJSZWRlZmluaXRpb24gb2YgY29uc3RydWN0b3IgJXMiICUga2V5KQotICAgICAgICAgICAgb3V0cHV0KCJEZWZpbmVkIGluICVzIGFuZCAlcyIgJSAoY29uZmxpY3QsIG5hbWUpKQorICAgICAgICAgICAgcHJpbnQoJ1JlZGVmaW5pdGlvbiBvZiBjb25zdHJ1Y3RvciB7fScuZm9ybWF0KGtleSkpCisgICAgICAgICAgICBwcmludCgnRGVmaW5lZCBpbiB7fSBhbmQge30nLmZvcm1hdChjb25mbGljdCwgbmFtZSkpCiAgICAgICAgICAgICBzZWxmLmVycm9ycyArPSAxCiAgICAgICAgIGZvciBmIGluIGNvbnMuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdChmLCBrZXkpCkBAIC0zODMsNiArMTc0LDExIEBACiAgICAgICAgICAgICBzZWxmLnZpc2l0KGYsIG5hbWUpCiAKIGRlZiBjaGVjayhtb2QpOgorICAgICIiIkNoZWNrIHRoZSBwYXJzZWQgQVNETCB0cmVlIGZvciBjb3JyZWN0bmVzcy4KKworICAgIFJldHVybiBUcnVlIGlmIHN1Y2Nlc3MuIEZvciBmYWlsdXJlLCB0aGUgZXJyb3JzIGFyZSBwcmludGVkIG91dCBhbmQgRmFsc2UKKyAgICBpcyByZXR1cm5lZC4KKyAgICAiIiIKICAgICB2ID0gQ2hlY2soKQogICAgIHYudmlzaXQobW9kKQogCkBAIC0zOTAsNDcgKzE4NiwxOTAgQEAKICAgICAgICAgaWYgdCBub3QgaW4gbW9kLnR5cGVzIGFuZCBub3QgdCBpbiBidWlsdGluX3R5cGVzOgogICAgICAgICAgICAgdi5lcnJvcnMgKz0gMQogICAgICAgICAgICAgdXNlcyA9ICIsICIuam9pbih2LnR5cGVzW3RdKQotICAgICAgICAgICAgb3V0cHV0KCJVbmRlZmluZWQgdHlwZSAlcywgdXNlZCBpbiAlcyIgJSAodCwgdXNlcykpCi0KKyAgICAgICAgICAgIHByaW50KCdVbmRlZmluZWQgdHlwZSB7fSwgdXNlZCBpbiB7fScuZm9ybWF0KHQsIHVzZXMpKQogICAgIHJldHVybiBub3Qgdi5lcnJvcnMKIAotZGVmIHBhcnNlKGZpbGUpOgotICAgIHNjYW5uZXIgPSBBU0RMU2Nhbm5lcigpCi0gICAgcGFyc2VyID0gQVNETFBhcnNlcigpCisjIFRoZSBBU0RMIHBhcnNlciBpdHNlbGYgY29tZXMgbmV4dC4gVGhlIG9ubHkgaW50ZXJlc3RpbmcgZXh0ZXJuYWwgaW50ZXJmYWNlCisjIGhlcmUgaXMgdGhlIHRvcC1sZXZlbCBwYXJzZSBmdW5jdGlvbi4KIAotICAgIGYgPSBvcGVuKGZpbGUpCi0gICAgdHJ5OgotICAgICAgICBidWYgPSBmLnJlYWQoKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGYuY2xvc2UoKQotICAgIHRva2VucyA9IHNjYW5uZXIudG9rZW5pemUoYnVmKQotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZSh0b2tlbnMpCi0gICAgZXhjZXB0IEFTRExTeW50YXhFcnJvcjoKLSAgICAgICAgZXJyID0gc3lzLmV4Y19pbmZvKClbMV0KLSAgICAgICAgb3V0cHV0KHN0cihlcnIpKQotICAgICAgICBsaW5lcyA9IGJ1Zi5zcGxpdCgiXG4iKQotICAgICAgICBvdXRwdXQobGluZXNbZXJyLmxpbmVubyAtIDFdKSAjIGxpbmVzIHN0YXJ0cyBhdCAwLCBmaWxlcyBhdCAxCitkZWYgcGFyc2UoZmlsZW5hbWUpOgorICAgICIiIlBhcnNlIEFTREwgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBhbmQgcmV0dXJuIGEgTW9kdWxlIG5vZGUgZGVzY3JpYmluZyBpdC4iIiIKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGY6CisgICAgICAgIHBhcnNlciA9IEFTRExQYXJzZXIoKQorICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKGYucmVhZCgpKQogCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGltcG9ydCBnbG9iCi0gICAgaW1wb3J0IHN5cworIyBUeXBlcyBmb3IgZGVzY3JpYmluZyB0b2tlbnMgaW4gYW4gQVNETCBzcGVjaWZpY2F0aW9uLgorY2xhc3MgVG9rZW5LaW5kOgorICAgICIiIlRva2VuS2luZCBpcyBwcm92aWRlcyBhIHNjb3BlIGZvciBlbnVtZXJhdGVkIHRva2VuIGtpbmRzLiIiIgorICAgIChDb25zdHJ1Y3RvcklkLCBUeXBlSWQsIEVxdWFscywgQ29tbWEsIFF1ZXN0aW9uLCBQaXBlLCBBc3RlcmlzaywKKyAgICAgTFBhcmVuLCBSUGFyZW4sIExCcmFjZSwgUkJyYWNlKSA9IHJhbmdlKDExKQogCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6Ci0gICAgICAgIGZpbGVzID0gc3lzLmFyZ3ZbMTpdCi0gICAgZWxzZToKLSAgICAgICAgdGVzdGRpciA9ICJ0ZXN0cyIKLSAgICAgICAgZmlsZXMgPSBnbG9iLmdsb2IodGVzdGRpciArICIvKi5hc2RsIikKKyAgICBvcGVyYXRvcl90YWJsZSA9IHsKKyAgICAgICAgJz0nOiBFcXVhbHMsICcsJzogQ29tbWEsICAgICc/JzogUXVlc3Rpb24sICd8JzogUGlwZSwgICAgJygnOiBMUGFyZW4sCisgICAgICAgICcpJzogUlBhcmVuLCAnKic6IEFzdGVyaXNrLCAneyc6IExCcmFjZSwgICAnfSc6IFJCcmFjZX0KIAotICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICBvdXRwdXQoZmlsZSkKLSAgICAgICAgbW9kID0gcGFyc2UoZmlsZSkKLSAgICAgICAgaWYgbm90IG1vZDoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIG91dHB1dCgibW9kdWxlIiwgbW9kLm5hbWUpCi0gICAgICAgIG91dHB1dChsZW4obW9kLmRmbnMpLCAiZGVmaW5pdGlvbnMiKQotICAgICAgICBpZiBub3QgY2hlY2sobW9kKToKLSAgICAgICAgICAgIG91dHB1dCgiQ2hlY2sgZmFpbGVkIikKK1Rva2VuID0gbmFtZWR0dXBsZSgnVG9rZW4nLCAna2luZCB2YWx1ZSBsaW5lbm8nKQorCitjbGFzcyBBU0RMU3ludGF4RXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbXNnLCBsaW5lbm89Tm9uZSk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vIG9yICc8dW5rbm93bj4nCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdTeW50YXggZXJyb3Igb24gbGluZSB7MC5saW5lbm99OiB7MC5tc2d9Jy5mb3JtYXQoc2VsZikKKworZGVmIHRva2VuaXplX2FzZGwoYnVmKToKKyAgICAiIiJUb2tlbml6ZSB0aGUgZ2l2ZW4gYnVmZmVyLiBZaWVsZCBUb2tlbiBvYmplY3RzLiIiIgorICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGJ1Zi5zcGxpdGxpbmVzKCksIDEpOgorICAgICAgICBmb3IgbSBpbiByZS5maW5kaXRlcihyJ1xzKihcdyt8LS0uKnwuKScsIGxpbmUuc3RyaXAoKSk6CisgICAgICAgICAgICBjID0gbS5ncm91cCgxKQorICAgICAgICAgICAgaWYgY1swXS5pc2FscGhhKCk6CisgICAgICAgICAgICAgICAgIyBTb21lIGtpbmQgb2YgaWRlbnRpZmllcgorICAgICAgICAgICAgICAgIGlmIGNbMF0uaXN1cHBlcigpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbihUb2tlbktpbmQuQ29uc3RydWN0b3JJZCwgYywgbGluZW5vKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIFRva2VuKFRva2VuS2luZC5UeXBlSWQsIGMsIGxpbmVubykKKyAgICAgICAgICAgIGVsaWYgY1s6Ml0gPT0gJy0tJzoKKyAgICAgICAgICAgICAgICAjIENvbW1lbnQKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE9wZXJhdG9ycworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3Bfa2luZCA9IFRva2VuS2luZC5vcGVyYXRvcl90YWJsZVtjXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKCdJbnZhbGlkIG9wZXJhdG9yICVzJyAlIGMsIGxpbmVubykKKyAgICAgICAgICAgICAgICB5aWVsZCBUb2tlbihvcF9raW5kLCBjLCBsaW5lbm8pCisKK2NsYXNzIEFTRExQYXJzZXI6CisgICAgIiIiUGFyc2VyIGZvciBBU0RMIGZpbGVzLgorCisgICAgQ3JlYXRlLCB0aGVuIGNhbGwgdGhlIHBhcnNlIG1ldGhvZCBvbiBhIGJ1ZmZlciBjb250YWluaW5nIEFTREwuCisgICAgVGhpcyBpcyBhIHNpbXBsZSByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIgdGhhdCB1c2VzIHRva2VuaXplX2FzZGwgZm9yIHRoZQorICAgIGxleGluZy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX3Rva2VuaXplciA9IE5vbmUKKyAgICAgICAgc2VsZi5jdXJfdG9rZW4gPSBOb25lCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYnVmKToKKyAgICAgICAgIiIiUGFyc2UgdGhlIEFTREwgaW4gdGhlIGJ1ZmZlciBhbmQgcmV0dXJuIGFuIEFTVCB3aXRoIGEgTW9kdWxlIHJvb3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl90b2tlbml6ZXIgPSB0b2tlbml6ZV9hc2RsKGJ1ZikKKyAgICAgICAgc2VsZi5fYWR2YW5jZSgpCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZV9tb2R1bGUoKQorCisgICAgZGVmIF9wYXJzZV9tb2R1bGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2F0X2tleXdvcmQoJ21vZHVsZScpOgorICAgICAgICAgICAgc2VsZi5fYWR2YW5jZSgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgotICAgICAgICAgICAgICAgIG91dHB1dChkZm4ubmFtZSwgZGZuLnZhbHVlKQorICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKAorICAgICAgICAgICAgICAgICdFeHBlY3RlZCAibW9kdWxlIiAoZm91bmQge30pJy5mb3JtYXQoc2VsZi5jdXJfdG9rZW4udmFsdWUpLAorICAgICAgICAgICAgICAgIHNlbGYuY3VyX3Rva2VuLmxpbmVubykKKyAgICAgICAgbmFtZSA9IHNlbGYuX21hdGNoKHNlbGYuX2lkX2tpbmRzKQorICAgICAgICBzZWxmLl9tYXRjaChUb2tlbktpbmQuTEJyYWNlKQorICAgICAgICBkZWZzID0gc2VsZi5fcGFyc2VfZGVmaW5pdGlvbnMoKQorICAgICAgICBzZWxmLl9tYXRjaChUb2tlbktpbmQuUkJyYWNlKQorICAgICAgICByZXR1cm4gTW9kdWxlKG5hbWUsIGRlZnMpCisKKyAgICBkZWYgX3BhcnNlX2RlZmluaXRpb25zKHNlbGYpOgorICAgICAgICBkZWZzID0gW10KKyAgICAgICAgd2hpbGUgc2VsZi5jdXJfdG9rZW4ua2luZCA9PSBUb2tlbktpbmQuVHlwZUlkOgorICAgICAgICAgICAgdHlwZW5hbWUgPSBzZWxmLl9hZHZhbmNlKCkKKyAgICAgICAgICAgIHNlbGYuX21hdGNoKFRva2VuS2luZC5FcXVhbHMpCisgICAgICAgICAgICB0eXBlID0gc2VsZi5fcGFyc2VfdHlwZSgpCisgICAgICAgICAgICBkZWZzLmFwcGVuZChUeXBlKHR5cGVuYW1lLCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIGRlZnMKKworICAgIGRlZiBfcGFyc2VfdHlwZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJfdG9rZW4ua2luZCA9PSBUb2tlbktpbmQuTFBhcmVuOgorICAgICAgICAgICAgIyBJZiB3ZSBzZWUgYSAoLCBpdCdzIGEgcHJvZHVjdAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlX3Byb2R1Y3QoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPdGhlcndpc2UgaXQncyBhIHN1bS4gTG9vayBmb3IgQ29uc3RydWN0b3JJZAorICAgICAgICAgICAgc3VtbGlzdCA9IFtDb25zdHJ1Y3RvcihzZWxmLl9tYXRjaChUb2tlbktpbmQuQ29uc3RydWN0b3JJZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX29wdGlvbmFsX2ZpZWxkcygpKV0KKyAgICAgICAgICAgIHdoaWxlIHNlbGYuY3VyX3Rva2VuLmtpbmQgID09IFRva2VuS2luZC5QaXBlOgorICAgICAgICAgICAgICAgICMgTW9yZSBjb25zdHJ1Y3RvcnMKKyAgICAgICAgICAgICAgICBzZWxmLl9hZHZhbmNlKCkKKyAgICAgICAgICAgICAgICBzdW1saXN0LmFwcGVuZChDb25zdHJ1Y3RvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWF0Y2goVG9rZW5LaW5kLkNvbnN0cnVjdG9ySWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9vcHRpb25hbF9maWVsZHMoKSkpCisgICAgICAgICAgICByZXR1cm4gU3VtKHN1bWxpc3QsIHNlbGYuX3BhcnNlX29wdGlvbmFsX2F0dHJpYnV0ZXMoKSkKKworICAgIGRlZiBfcGFyc2VfcHJvZHVjdChzZWxmKToKKyAgICAgICAgcmV0dXJuIFByb2R1Y3Qoc2VsZi5fcGFyc2VfZmllbGRzKCksIHNlbGYuX3BhcnNlX29wdGlvbmFsX2F0dHJpYnV0ZXMoKSkKKworICAgIGRlZiBfcGFyc2VfZmllbGRzKHNlbGYpOgorICAgICAgICBmaWVsZHMgPSBbXQorICAgICAgICBzZWxmLl9tYXRjaChUb2tlbktpbmQuTFBhcmVuKQorICAgICAgICB3aGlsZSBzZWxmLmN1cl90b2tlbi5raW5kID09IFRva2VuS2luZC5UeXBlSWQ6CisgICAgICAgICAgICB0eXBlbmFtZSA9IHNlbGYuX2FkdmFuY2UoKQorICAgICAgICAgICAgaXNfc2VxLCBpc19vcHQgPSBzZWxmLl9wYXJzZV9vcHRpb25hbF9maWVsZF9xdWFudGlmaWVyKCkKKyAgICAgICAgICAgIGlkID0gKHNlbGYuX2FkdmFuY2UoKSBpZiBzZWxmLmN1cl90b2tlbi5raW5kIGluIHNlbGYuX2lkX2tpbmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBOb25lKQorICAgICAgICAgICAgZmllbGRzLmFwcGVuZChGaWVsZCh0eXBlbmFtZSwgaWQsIHNlcT1pc19zZXEsIG9wdD1pc19vcHQpKQorICAgICAgICAgICAgaWYgc2VsZi5jdXJfdG9rZW4ua2luZCA9PSBUb2tlbktpbmQuUlBhcmVuOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIHNlbGYuY3VyX3Rva2VuLmtpbmQgPT0gVG9rZW5LaW5kLkNvbW1hOgorICAgICAgICAgICAgICAgIHNlbGYuX2FkdmFuY2UoKQorICAgICAgICBzZWxmLl9tYXRjaChUb2tlbktpbmQuUlBhcmVuKQorICAgICAgICByZXR1cm4gZmllbGRzCisKKyAgICBkZWYgX3BhcnNlX29wdGlvbmFsX2ZpZWxkcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJfdG9rZW4ua2luZCA9PSBUb2tlbktpbmQuTFBhcmVuOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlX2ZpZWxkcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wYXJzZV9vcHRpb25hbF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9hdF9rZXl3b3JkKCdhdHRyaWJ1dGVzJyk6CisgICAgICAgICAgICBzZWxmLl9hZHZhbmNlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZV9maWVsZHMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfcGFyc2Vfb3B0aW9uYWxfZmllbGRfcXVhbnRpZmllcihzZWxmKToKKyAgICAgICAgaXNfc2VxLCBpc19vcHQgPSBGYWxzZSwgRmFsc2UKKyAgICAgICAgaWYgc2VsZi5jdXJfdG9rZW4ua2luZCA9PSBUb2tlbktpbmQuQXN0ZXJpc2s6CisgICAgICAgICAgICBpc19zZXEgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9hZHZhbmNlKCkKKyAgICAgICAgZWxpZiBzZWxmLmN1cl90b2tlbi5raW5kID09IFRva2VuS2luZC5RdWVzdGlvbjoKKyAgICAgICAgICAgIGlzX29wdCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2FkdmFuY2UoKQorICAgICAgICByZXR1cm4gaXNfc2VxLCBpc19vcHQKKworICAgIGRlZiBfYWR2YW5jZShzZWxmKToKKyAgICAgICAgIiIiIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdG9rZW4gYW5kIHJlYWQgdGhlIG5leHQgb25lIGludG8KKyAgICAgICAgICAgIHNlbGYuY3VyX3Rva2VuLgorICAgICAgICAiIiIKKyAgICAgICAgY3VyX3ZhbCA9IE5vbmUgaWYgc2VsZi5jdXJfdG9rZW4gaXMgTm9uZSBlbHNlIHNlbGYuY3VyX3Rva2VuLnZhbHVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3VyX3Rva2VuID0gbmV4dChzZWxmLl90b2tlbml6ZXIpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgc2VsZi5jdXJfdG9rZW4gPSBOb25lCisgICAgICAgIHJldHVybiBjdXJfdmFsCisKKyAgICBfaWRfa2luZHMgPSAoVG9rZW5LaW5kLkNvbnN0cnVjdG9ySWQsIFRva2VuS2luZC5UeXBlSWQpCisKKyAgICBkZWYgX21hdGNoKHNlbGYsIGtpbmQpOgorICAgICAgICAiIiJUaGUgJ21hdGNoJyBwcmltaXRpdmUgb2YgUkQgcGFyc2Vycy4KKworICAgICAgICAqIFZlcmlmaWVzIHRoYXQgdGhlIGN1cnJlbnQgdG9rZW4gaXMgb2YgdGhlIGdpdmVuIGtpbmQgKGtpbmQgY2FuCisgICAgICAgICAgYmUgYSB0dXBsZSwgaW4gd2hpY2ggdGhlIGtpbmQgbXVzdCBtYXRjaCBvbmUgb2YgaXRzIG1lbWJlcnMpLgorICAgICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHRva2VuCisgICAgICAgICogUmVhZHMgaW4gdGhlIG5leHQgdG9rZW4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChpc2luc3RhbmNlKGtpbmQsIHR1cGxlKSBhbmQgc2VsZi5jdXJfdG9rZW4ua2luZCBpbiBraW5kIG9yCisgICAgICAgICAgICBzZWxmLmN1cl90b2tlbi5raW5kID09IGtpbmQKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuY3VyX3Rva2VuLnZhbHVlCisgICAgICAgICAgICBzZWxmLl9hZHZhbmNlKCkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKAorICAgICAgICAgICAgICAgICdVbm1hdGNoZWQge30gKGZvdW5kIHt9KScuZm9ybWF0KGtpbmQsIHNlbGYuY3VyX3Rva2VuLmtpbmQpLAorICAgICAgICAgICAgICAgIHNlbGYuY3VyX3Rva2VuLmxpbmVubykKKworICAgIGRlZiBfYXRfa2V5d29yZChzZWxmLCBrZXl3b3JkKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmN1cl90b2tlbi5raW5kID09IFRva2VuS2luZC5UeXBlSWQgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5jdXJfdG9rZW4udmFsdWUgPT0ga2V5d29yZCkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsX2MucHkgYi9QYXJzZXIvYXNkbF9jLnB5CmluZGV4IGQ2MDg2ZTYuLmYzOGMyNTMgMTAwNzU1Ci0tLSBhL1BhcnNlci9hc2RsX2MucHkKKysrIGIvUGFyc2VyL2FzZGxfYy5weQpAQCAtMSw5ICsxLDYgQEAKICMhIC91c3IvYmluL2VudiBweXRob24KICIiIkdlbmVyYXRlIEMgY29kZSBmcm9tIGFuIEFTREwgZGVzY3JpcHRpb24uIiIiCiAKLSMgVE8gRE8KLSMgaGFuZGxlIGZpZWxkcyB0aGF0IGhhdmUgYSB0eXBlIGJ1dCBubyBuYW1lCi0KIGltcG9ydCBvcywgc3lzCiAKIGltcG9ydCBhc2RsCkBAIC0xNCwxMiArMTEsOCBAQAogZGVmIGdldF9jX3R5cGUobmFtZSk6CiAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvciB0aGUgQyBuYW1lIG9mIHRoZSB0eXBlLgogCi0gICAgVGhpcyBmdW5jdGlvbiBzcGVjaWFsIGNhc2VzIHRoZSBkZWZhdWx0IHR5cGVzIHByb3ZpZGVkIGJ5IGFzZGw6Ci0gICAgaWRlbnRpZmllciwgc3RyaW5nLCBpbnQuCisgICAgVGhpcyBmdW5jdGlvbiBzcGVjaWFsIGNhc2VzIHRoZSBkZWZhdWx0IHR5cGVzIHByb3ZpZGVkIGJ5IGFzZGwuCiAgICAgIiIiCi0gICAgIyBYWFggYWNrISAgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIElkIGlzIHVzZWZ1bCBhbmQgd2hlcmUgc3RyaW5nCi0gICAgaWYgaXNpbnN0YW5jZShuYW1lLCBhc2RsLklkKToKLSAgICAgICAgbmFtZSA9IG5hbWUudmFsdWUKICAgICBpZiBuYW1lIGluIGFzZGwuYnVpbHRpbl90eXBlczoKICAgICAgICAgcmV0dXJuIG5hbWUKICAgICBlbHNlOgpAQCAtMTQ0LDcgKzEzNyw3IEBACiAKIAogY2xhc3MgU3RydWN0VmlzaXRvcihFbWl0VmlzaXRvcik6Ci0gICAgIiIiVmlzaXRvciB0byBnZW5lcmF0ZSB0eXBkZWZzIGZvciBBU1QuIiIiCisgICAgIiIiVmlzaXRvciB0byBnZW5lcmF0ZSB0eXBlZGVmcyBmb3IgQVNULiIiIgogCiAgICAgZGVmIHZpc2l0TW9kdWxlKHNlbGYsIG1vZCk6CiAgICAgICAgIGZvciBkZm4gaW4gbW9kLmRmbnM6CkBAIC0xODgsOSArMTgxLDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLnZpc2l0KGYsIGRlcHRoICsgMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgifSAlczsiICUgY29ucy5uYW1lLCBkZXB0aCkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiIiwgZGVwdGgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFhYWCBub3Qgc3VyZSB3aGF0IEkgd2FudCBoZXJlLCBub3RoaW5nIGlzIHByb2JhYmx5IGZpbmUKLSAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB2aXNpdEZpZWxkKHNlbGYsIGZpZWxkLCBkZXB0aCk6CiAgICAgICAgICMgWFhYIG5lZWQgdG8gbG9va3VwIGZpZWxkLnR5cGUsIGJlY2F1c2UgaXQgbWlnaHQgYmUgc29tZXRoaW5nCkBAIC0xOTgsNyArMTg4LDcgQEAKICAgICAgICAgY3R5cGUgPSBnZXRfY190eXBlKGZpZWxkLnR5cGUpCiAgICAgICAgIG5hbWUgPSBmaWVsZC5uYW1lCiAgICAgICAgIGlmIGZpZWxkLnNlcToKLSAgICAgICAgICAgIGlmIGZpZWxkLnR5cGUudmFsdWUgaW4gKCdjbXBvcCcsKToKKyAgICAgICAgICAgIGlmIGZpZWxkLnR5cGUgPT0gJ2NtcG9wJzoKICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoImFzZGxfaW50X3NlcSAqJShuYW1lKXM7IiAlIGxvY2FscygpLCBkZXB0aCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJhc2RsX3NlcSAqJShuYW1lKXM7IiAlIGxvY2FscygpLCBkZXB0aCkKQEAgLTI1Myw3ICsyNDMsNyBAQAogICAgICAgICAgICAgICAgIG5hbWUgPSBmLm5hbWUKICAgICAgICAgICAgICMgWFhYIHNob3VsZCBleHRlbmQgZ2V0X2NfdHlwZSgpIHRvIGhhbmRsZSB0aGlzCiAgICAgICAgICAgICBpZiBmLnNlcToKLSAgICAgICAgICAgICAgICBpZiBmLnR5cGUudmFsdWUgaW4gKCdjbXBvcCcsKToKKyAgICAgICAgICAgICAgICBpZiBmLnR5cGUgPT0gJ2NtcG9wJzoKICAgICAgICAgICAgICAgICAgICAgY3R5cGUgPSAiYXNkbF9pbnRfc2VxICoiCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY3R5cGUgPSAiYXNkbF9zZXEgKiIKQEAgLTI4NSw3ICsyNzUsOSBAQAogCiAgICAgZGVmIHZpc2l0UHJvZHVjdChzZWxmLCBwcm9kLCBuYW1lKToKICAgICAgICAgc2VsZi5lbWl0X2Z1bmN0aW9uKG5hbWUsIGdldF9jX3R5cGUobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9hcmdzKHByb2QuZmllbGRzKSwgW10sIHVuaW9uPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfYXJncyhwcm9kLmZpZWxkcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9hcmdzKHByb2QuYXR0cmlidXRlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbj1GYWxzZSkKIAogCiBjbGFzcyBGdW5jdGlvblZpc2l0b3IoUHJvdG90eXBlVmlzaXRvcik6CkBAIC0zMzksNyArMzMxLDggQEAKICAgICAgICAgICAgIHNlbGYuZW1pdChzLCBkZXB0aCwgcmVmbG93KQogICAgICAgICBmb3IgYXJndHlwZSwgYXJnbmFtZSwgb3B0IGluIGFyZ3M6CiAgICAgICAgICAgICBlbWl0KCJwLT4lcyA9ICVzOyIgJSAoYXJnbmFtZSwgYXJnbmFtZSksIDEpCi0gICAgICAgIGFzc2VydCBub3QgYXR0cnMKKyAgICAgICAgZm9yIGFyZ3R5cGUsIGFyZ25hbWUsIG9wdCBpbiBhdHRyczoKKyAgICAgICAgICAgIGVtaXQoInAtPiVzID0gJXM7IiAlIChhcmduYW1lLCBhcmduYW1lKSwgMSkKIAogCiBjbGFzcyBQaWNrbGVWaXNpdG9yKEVtaXRWaXNpdG9yKToKQEAgLTQzNyw3ICs0MzAsNyBAQAogICAgICAgICAgICAgc2VsZi5lbWl0KCIiLCAwKQogICAgICAgICAgICAgZm9yIGYgaW4gdC5maWVsZHM6CiAgICAgICAgICAgICAgICAgc2VsZi52aXNpdEZpZWxkKGYsIHQubmFtZSwgc3VtPXN1bSwgZGVwdGg9MikKLSAgICAgICAgICAgIGFyZ3MgPSBbZi5uYW1lLnZhbHVlIGZvciBmIGluIHQuZmllbGRzXSArIFthLm5hbWUudmFsdWUgZm9yIGEgaW4gc3VtLmF0dHJpYnV0ZXNdCisgICAgICAgICAgICBhcmdzID0gW2YubmFtZSBmb3IgZiBpbiB0LmZpZWxkc10gKyBbYS5uYW1lIGZvciBhIGluIHN1bS5hdHRyaWJ1dGVzXQogICAgICAgICAgICAgc2VsZi5lbWl0KCIqb3V0ID0gJXMoJXMpOyIgJSAodC5uYW1lLCBzZWxmLmJ1aWxkQXJncyhhcmdzKSksIDIpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOyIsIDIpCiAgICAgICAgICAgICBzZWxmLmVtaXQoInJldHVybiAwOyIsIDIpCkBAIC00NjIsMTAgKzQ1NSwxNSBAQAogICAgICAgICBzZWxmLmVtaXQoIlB5T2JqZWN0KiB0bXAgPSBOVUxMOyIsIDEpCiAgICAgICAgIGZvciBmIGluIHByb2QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdEZpZWxkRGVjbGFyYXRpb24oZiwgbmFtZSwgcHJvZD1wcm9kLCBkZXB0aD0xKQorICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBzZWxmLnZpc2l0RmllbGREZWNsYXJhdGlvbihhLCBuYW1lLCBwcm9kPXByb2QsIGRlcHRoPTEpCiAgICAgICAgIHNlbGYuZW1pdCgiIiwgMCkKICAgICAgICAgZm9yIGYgaW4gcHJvZC5maWVsZHM6CiAgICAgICAgICAgICBzZWxmLnZpc2l0RmllbGQoZiwgbmFtZSwgcHJvZD1wcm9kLCBkZXB0aD0xKQotICAgICAgICBhcmdzID0gW2YubmFtZS52YWx1ZSBmb3IgZiBpbiBwcm9kLmZpZWxkc10KKyAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgc2VsZi52aXNpdEZpZWxkKGEsIG5hbWUsIHByb2Q9cHJvZCwgZGVwdGg9MSkKKyAgICAgICAgYXJncyA9IFtmLm5hbWUgZm9yIGYgaW4gcHJvZC5maWVsZHNdCisgICAgICAgIGFyZ3MuZXh0ZW5kKFthLm5hbWUgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzXSkKICAgICAgICAgc2VsZi5lbWl0KCIqb3V0ID0gJXMoJXMpOyIgJSAobmFtZSwgc2VsZi5idWlsZEFyZ3MoYXJncykpLCAxKQogICAgICAgICBzZWxmLmVtaXQoInJldHVybiAwOyIsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgiZmFpbGVkOiIsIDApCkBAIC00ODcsOCArNDg1LDggQEAKIAogICAgIGRlZiBpc1NpbXBsZVN1bShzZWxmLCBmaWVsZCk6CiAgICAgICAgICMgWFhYIGNhbiB0aGUgbWVtYmVycyBvZiB0aGlzIGxpc3QgYmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5PwotICAgICAgICByZXR1cm4gZmllbGQudHlwZS52YWx1ZSBpbiAoJ2V4cHJfY29udGV4dCcsICdib29sb3AnLCAnb3BlcmF0b3InLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuYXJ5b3AnLCAnY21wb3AnKQorICAgICAgICByZXR1cm4gZmllbGQudHlwZSBpbiAoJ2V4cHJfY29udGV4dCcsICdib29sb3AnLCAnb3BlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuYXJ5b3AnLCAnY21wb3AnKQogCiAgICAgZGVmIGlzTnVtZXJpYyhzZWxmLCBmaWVsZCk6CiAgICAgICAgIHJldHVybiBnZXRfY190eXBlKGZpZWxkLnR5cGUpIGluICgiaW50IiwgImJvb2wiKQpAQCAtOTYwLDcgKzk1OCw3IEBACiAKICAgICBkZWYgdmlzaXRQcm9kdWN0KHNlbGYsIHByb2QsIG5hbWUpOgogICAgICAgICBpZiBwcm9kLmZpZWxkczoKLSAgICAgICAgICAgIGZpZWxkcyA9IG5hbWUudmFsdWUrIl9maWVsZHMiCisgICAgICAgICAgICBmaWVsZHMgPSBuYW1lKyJfZmllbGRzIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZmllbGRzID0gIk5VTEwiCiAgICAgICAgIHNlbGYuZW1pdCgnJXNfdHlwZSA9IG1ha2VfdHlwZSgiJXMiLCAmQVNUX3R5cGUsICVzLCAlZCk7JyAlCkBAIC05ODcsNyArOTg1LDcgQEAKIAogICAgIGRlZiB2aXNpdENvbnN0cnVjdG9yKHNlbGYsIGNvbnMsIG5hbWUsIHNpbXBsZSk6CiAgICAgICAgIGlmIGNvbnMuZmllbGRzOgotICAgICAgICAgICAgZmllbGRzID0gY29ucy5uYW1lLnZhbHVlKyJfZmllbGRzIgorICAgICAgICAgICAgZmllbGRzID0gY29ucy5uYW1lKyJfZmllbGRzIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZmllbGRzID0gIk5VTEwiCiAgICAgICAgIHNlbGYuZW1pdCgnJXNfdHlwZSA9IG1ha2VfdHlwZSgiJXMiLCAlc190eXBlLCAlcywgJWQpOycgJQpAQCAtMTE3MCw3ICsxMTY4LDcgQEAKICAgICBkZWYgc2V0KHNlbGYsIGZpZWxkLCB2YWx1ZSwgZGVwdGgpOgogICAgICAgICBpZiBmaWVsZC5zZXE6CiAgICAgICAgICAgICAjIFhYWCBzaG91bGQgcmVhbGx5IGNoZWNrIGZvciBpc19zaW1wbGUsIGJ1dCB0aGF0IHJlcXVpcmVzIGEgc3ltYm9sIHRhYmxlCi0gICAgICAgICAgICBpZiBmaWVsZC50eXBlLnZhbHVlID09ICJjbXBvcCI6CisgICAgICAgICAgICBpZiBmaWVsZC50eXBlID09ICJjbXBvcCI6CiAgICAgICAgICAgICAgICAgIyBXaGlsZSB0aGUgc2VxdWVuY2UgZWxlbWVudHMgYXJlIHN0b3JlZCBhcyB2b2lkKiwKICAgICAgICAgICAgICAgICAjIGFzdDJvYmpfY21wb3AgZXhwZWN0cyBhbiBlbnVtCiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCJ7IiwgZGVwdGgpCkBAIC0xMjQ5LDEyICsxMjQ3LDE1IEBACiAKIGNvbW1vbl9tc2cgPSAiLyogRmlsZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSAlcy4gKi9cblxuIgogCi1kZWYgbWFpbihzcmNmaWxlKToKK2RlZiBtYWluKHNyY2ZpbGUsIGR1bXBfbW9kdWxlPUZhbHNlKToKICAgICBhcmd2MCA9IHN5cy5hcmd2WzBdCiAgICAgY29tcG9uZW50cyA9IGFyZ3YwLnNwbGl0KG9zLnNlcCkKICAgICBhcmd2MCA9IG9zLnNlcC5qb2luKGNvbXBvbmVudHNbLTI6XSkKICAgICBhdXRvX2dlbl9tc2cgPSBjb21tb25fbXNnICUgYXJndjAKICAgICBtb2QgPSBhc2RsLnBhcnNlKHNyY2ZpbGUpCisgICAgaWYgZHVtcF9tb2R1bGU6CisgICAgICAgIHByaW50KCdQYXJzZWQgTW9kdWxlOicpCisgICAgICAgIHByaW50KG1vZCkKICAgICBpZiBub3QgYXNkbC5jaGVjayhtb2QpOgogICAgICAgICBzeXMuZXhpdCgxKQogICAgIGlmIElOQ19ESVI6CkBAIC0xMjk2LDIxICsxMjk3LDIzIEBACiAgICAgICAgIGYuY2xvc2UoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGltcG9ydCBzeXMKICAgICBpbXBvcnQgZ2V0b3B0CiAKICAgICBJTkNfRElSID0gJycKICAgICBTUkNfRElSID0gJycKLSAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJoOmM6IikKLSAgICBpZiBsZW4ob3B0cykgIT0gMToKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiTXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIG91dHB1dCBmaWxlXG4iKQotICAgICAgICBzeXMuZXhpdCgxKQorICAgIGR1bXBfbW9kdWxlID0gRmFsc2UKKyAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJkaDpjOiIpCiAgICAgZm9yIG8sIHYgaW4gb3B0czoKICAgICAgICAgaWYgbyA9PSAnLWgnOgogICAgICAgICAgICAgSU5DX0RJUiA9IHYKICAgICAgICAgaWYgbyA9PSAnLWMnOgogICAgICAgICAgICAgU1JDX0RJUiA9IHYKLSAgICBpZiBsZW4oYXJncykgIT0gMToKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiTXVzdCBzcGVjaWZ5IHNpbmdsZSBpbnB1dCBmaWxlXG4iKQorICAgICAgICBpZiBvID09ICctZCc6CisgICAgICAgICAgICBkdW1wX21vZHVsZSA9IFRydWUKKyAgICBpZiBJTkNfRElSIGFuZCBTUkNfRElSOgorICAgICAgICBwcmludCgnTXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIG91dHB1dCBmaWxlJykKICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBtYWluKGFyZ3NbMF0pCisgICAgZWxpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgcHJpbnQoJ011c3Qgc3BlY2lmeSBzaW5nbGUgaW5wdXQgZmlsZScpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgbWFpbihhcmdzWzBdLCBkdW1wX21vZHVsZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9ub2RlLmMgYi9QYXJzZXIvbm9kZS5jCmluZGV4IDU2NGJkOTEuLjAwMTAzMjQgMTAwNjQ0Ci0tLSBhL1BhcnNlci9ub2RlLmMKKysrIGIvUGFyc2VyL25vZGUuYwpAQCAtNzAsOCArNzAsOCBAQAogICogTm90ZSB0aGF0IHRoaXMgd291bGQgYmUgc3RyYWlnaHRmb3J3YXJkIGlmIGEgbm9kZSBzdG9yZWQgaXRzIGN1cnJlbnQKICAqIGNhcGFjaXR5LiAgVGhlIGNvZGUgaXMgdHJpY2t5IHRvIGF2b2lkIHRoYXQuCiAgKi8KLSNkZWZpbmUgWFhYUk9VTkRVUChuKSAoKG4pIDw9IDEgPyAobikgOiAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgKG4pIDw9IDEyOCA/IF9QeV9TSVpFX1JPVU5EX1VQKChuKSwgNCkgOiBcCisjZGVmaW5lIFhYWFJPVU5EVVAobikgKChuKSA8PSAxID8gKG4pIDogICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKG4pIDw9IDEyOCA/IChpbnQpX1B5X1NJWkVfUk9VTkRfVVAoKG4pLCA0KSA6ICAgIFwKICAgICAgICAgICAgICAgIGZhbmN5X3JvdW5kdXAobikpCiAKIApkaWZmIC0tZ2l0IGEvUGFyc2VyL3BnZW4uYyBiL1BhcnNlci9wZ2VuLmMKaW5kZXggYjJmODQ3MC4uZjMwMzFhZSAxMDA2NDQKLS0tIGEvUGFyc2VyL3BnZW4uYworKysgYi9QYXJzZXIvcGdlbi5jCkBAIC0xMzYsMTEgKzEzNiwxMiBAQAogCiBzdGF0aWMgY2hhciBSRVFORk1UW10gPSAibWV0YWNvbXBpbGU6IGxlc3MgdGhhbiAlZCBjaGlsZHJlblxuIjsKIAotI2RlZmluZSBSRVFOKGksIGNvdW50KSBcCisjZGVmaW5lIFJFUU4oaSwgY291bnQpIGRvIHsgXAogICAgIGlmIChpIDwgY291bnQpIHsgXAogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgUkVRTkZNVCwgY291bnQpOyBcCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlJFUU4iKTsgXAotICAgIH0gZWxzZQorICAgIH0gXAorfSB3aGlsZSAoMCkKIAogI2Vsc2UKICNkZWZpbmUgUkVRTihpLCBjb3VudCkgIC8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9QYXJzZXIvcGdlbm1haW4uYyBiL1BhcnNlci9wZ2VubWFpbi5jCmluZGV4IDAxN2E0ZjkuLjBmMDU1ZDYgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wZ2VubWFpbi5jCisrKyBiL1BhcnNlci9wZ2VubWFpbi5jCkBAIC05NiwxMCArOTYsMTEgQEAKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJQYXJzaW5nIGVycm9yICVkLCBsaW5lICVkLlxuIiwKICAgICAgICAgICAgIGVyci5lcnJvciwgZXJyLmxpbmVubyk7CiAgICAgICAgIGlmIChlcnIudGV4dCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgICAgIHNpemVfdCBsZW47CisgICAgICAgICAgICBpbnQgaTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBlcnIudGV4dCk7Ci0gICAgICAgICAgICBpID0gc3RybGVuKGVyci50ZXh0KTsKLSAgICAgICAgICAgIGlmIChpID09IDAgfHwgZXJyLnRleHRbaS0xXSAhPSAnXG4nKQorICAgICAgICAgICAgbGVuID0gc3RybGVuKGVyci50ZXh0KTsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gMCB8fCBlcnIudGV4dFtsZW4tMV0gIT0gJ1xuJykKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXJyLm9mZnNldDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVyci50ZXh0W2ldID09ICdcdCcpCmRpZmYgLS1naXQgYS9QYXJzZXIvcHJpbnRncmFtbWFyLmMgYi9QYXJzZXIvcHJpbnRncmFtbWFyLmMKaW5kZXggZGQ3ZTZhZS4uNzMxMWU1NSAxMDA2NDQKLS0tIGEvUGFyc2VyL3ByaW50Z3JhbW1hci5jCisrKyBiL1BhcnNlci9wcmludGdyYW1tYXIuYwpAQCAtODQsNyArODQsNyBAQAogcHJpbnRkZmFzKGdyYW1tYXIgKmcsIEZJTEUgKmZwKQogewogICAgIGRmYSAqZDsKLSAgICBpbnQgaSwgajsKKyAgICBpbnQgaSwgaiwgbjsKIAogICAgIHByaW50c3RhdGVzKGcsIGZwKTsKICAgICBmcHJpbnRmKGZwLCAic3RhdGljIGRmYSBkZmFzWyVkXSA9IHtcbiIsIGctPmdfbmRmYXMpOwpAQCAtOTMsNyArOTMsOCBAQAogICAgICAgICBmcHJpbnRmKGZwLCAiICAgIHslZCwgXCIlc1wiLCAlZCwgJWQsIHN0YXRlc18lZCxcbiIsCiAgICAgICAgICAgICBkLT5kX3R5cGUsIGQtPmRfbmFtZSwgZC0+ZF9pbml0aWFsLCBkLT5kX25zdGF0ZXMsIGkpOwogICAgICAgICBmcHJpbnRmKGZwLCAiICAgICBcIiIpOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgTkJZVEVTKGctPmdfbGwubGxfbmxhYmVscyk7IGorKykKKyAgICAgICAgbiA9IE5CWVRFUyhnLT5nX2xsLmxsX25sYWJlbHMpOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICAgICAgZnByaW50ZihmcCwgIlxcJTAzbyIsIGQtPmRfZmlyc3Rbal0gJiAweGZmKTsKICAgICAgICAgZnByaW50ZihmcCwgIlwifSxcbiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1BhcnNlci9zcGFyay5weSBiL1BhcnNlci9zcGFyay5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhjMWE4OS4uMDAwMDAwMAotLS0gYS9QYXJzZXIvc3BhcmsucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NDkgKzAsMCBAQAotIyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIgSm9obiBBeWNvY2sKLSMKLSMgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwotIyAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0jICAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0jICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0jICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KLSMgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwotIyAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotIwotIyAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLSMgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotIwotIyAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0jICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSMgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLSMgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCi0jICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAotIyAgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKLSMgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotCi1fX3ZlcnNpb25fXyA9ICdTUEFSSy0wLjcgKHByZS1hbHBoYS01KScKLQotaW1wb3J0IHJlCi0KLSMgQ29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHB5dGhvbnMuCi1kZWYgb3V0cHV0KHN0cmluZz0nJywgZW5kPSdcbicpOgotICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyaW5nICsgZW5kKQotCi10cnk6Ci0gICAgc29ydGVkCi1leGNlcHQgTmFtZUVycm9yOgotICAgIGRlZiBzb3J0ZWQoc2VxKToKLSAgICAgICAgc2VxMiA9IHNlcVs6XQotICAgICAgICBzZXEyLnNvcnQoKQotICAgICAgICByZXR1cm4gc2VxMgotCi1kZWYgX25hbWVsaXN0KGluc3RhbmNlKToKLSAgICBuYW1lbGlzdCwgbmFtZWRpY3QsIGNsYXNzbGlzdCA9IFtdLCB7fSwgW2luc3RhbmNlLl9fY2xhc3NfX10KLSAgICBmb3IgYyBpbiBjbGFzc2xpc3Q6Ci0gICAgICAgIGZvciBiIGluIGMuX19iYXNlc19fOgotICAgICAgICAgICAgY2xhc3NsaXN0LmFwcGVuZChiKQotICAgICAgICBmb3IgbmFtZSBpbiBjLl9fZGljdF9fLmtleXMoKToKLSAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIG5hbWVkaWN0OgotICAgICAgICAgICAgICAgIG5hbWVsaXN0LmFwcGVuZChuYW1lKQotICAgICAgICAgICAgICAgIG5hbWVkaWN0W25hbWVdID0gMQotICAgIHJldHVybiBuYW1lbGlzdAotCi1jbGFzcyBHZW5lcmljU2Nhbm5lcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmxhZ3M9MCk6Ci0gICAgICAgIHBhdHRlcm4gPSBzZWxmLnJlZmxlY3QoKQotICAgICAgICBzZWxmLnJlID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5WRVJCT1NFfGZsYWdzKQotCi0gICAgICAgIHNlbGYuaW5kZXgyZnVuYyA9IHt9Ci0gICAgICAgIGZvciBuYW1lLCBudW1iZXIgaW4gc2VsZi5yZS5ncm91cGluZGV4Lml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmluZGV4MmZ1bmNbbnVtYmVyLTFdID0gZ2V0YXR0cihzZWxmLCAndF8nICsgbmFtZSkKLQotICAgIGRlZiBtYWtlUkUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGRvYyA9IGdldGF0dHIoc2VsZiwgbmFtZSkuX19kb2NfXwotICAgICAgICBydiA9ICcoP1A8JXM+JXMpJyAlIChuYW1lWzI6XSwgZG9jKQotICAgICAgICByZXR1cm4gcnYKLQotICAgIGRlZiByZWZsZWN0KHNlbGYpOgotICAgICAgICBydiA9IFtdCi0gICAgICAgIGZvciBuYW1lIGluIF9uYW1lbGlzdChzZWxmKToKLSAgICAgICAgICAgIGlmIG5hbWVbOjJdID09ICd0XycgYW5kIG5hbWUgIT0gJ3RfZGVmYXVsdCc6Ci0gICAgICAgICAgICAgICAgcnYuYXBwZW5kKHNlbGYubWFrZVJFKG5hbWUpKQotCi0gICAgICAgIHJ2LmFwcGVuZChzZWxmLm1ha2VSRSgndF9kZWZhdWx0JykpCi0gICAgICAgIHJldHVybiAnfCcuam9pbihydikKLQotICAgIGRlZiBlcnJvcihzZWxmLCBzLCBwb3MpOgotICAgICAgICBvdXRwdXQoIkxleGljYWwgZXJyb3IgYXQgcG9zaXRpb24gJXMiICUgcG9zKQotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0Ci0KLSAgICBkZWYgdG9rZW5pemUoc2VsZiwgcyk6Ci0gICAgICAgIHBvcyA9IDAKLSAgICAgICAgbiA9IGxlbihzKQotICAgICAgICB3aGlsZSBwb3MgPCBuOgotICAgICAgICAgICAgbSA9IHNlbGYucmUubWF0Y2gocywgcG9zKQotICAgICAgICAgICAgaWYgbSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IocywgcG9zKQotCi0gICAgICAgICAgICBncm91cHMgPSBtLmdyb3VwcygpCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZ3JvdXBzKSk6Ci0gICAgICAgICAgICAgICAgaWYgZ3JvdXBzW2ldIGFuZCBpIGluIHNlbGYuaW5kZXgyZnVuYzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleDJmdW5jW2ldKGdyb3Vwc1tpXSkKLSAgICAgICAgICAgIHBvcyA9IG0uZW5kKCkKLQotICAgIGRlZiB0X2RlZmF1bHQoc2VsZiwgcyk6Ci0gICAgICAgIHInKCAuIHwgXG4gKSsnCi0gICAgICAgIG91dHB1dCgiU3BlY2lmaWNhdGlvbiBlcnJvcjogdW5tYXRjaGVkIGlucHV0IikKLSAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAotCi0jCi0jICBFeHRyYWN0ZWQgZnJvbSBHZW5lcmljUGFyc2VyIGFuZCBtYWRlIGdsb2JhbCBzbyB0aGF0IFt1bl1waWNraW5nIHdvcmtzLgotIwotY2xhc3MgX1N0YXRlOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0ZW5vLCBpdGVtcyk6Ci0gICAgICAgIHNlbGYuVCwgc2VsZi5jb21wbGV0ZSwgc2VsZi5pdGVtcyA9IFtdLCBbXSwgaXRlbXMKLSAgICAgICAgc2VsZi5zdGF0ZW5vID0gc3RhdGVubwotCi1jbGFzcyBHZW5lcmljUGFyc2VyOgotICAgICMKLSAgICAjICBBbiBFYXJsZXkgcGFyc2VyLCBhcyBwZXIgSi4gRWFybGV5LCAiQW4gRWZmaWNpZW50IENvbnRleHQtRnJlZQotICAgICMgIFBhcnNpbmcgQWxnb3JpdGhtIiwgQ0FDTSAxMygyKSwgcHAuIDk0LTEwMi4gIEFsc28gSi4gQy4gRWFybGV5LAotICAgICMgICJBbiBFZmZpY2llbnQgQ29udGV4dC1GcmVlIFBhcnNpbmcgQWxnb3JpdGhtIiwgUGguRC4gdGhlc2lzLAotICAgICMgIENhcm5lZ2llLU1lbGxvbiBVbml2ZXJzaXR5LCBBdWd1c3QgMTk2OC4gIE5ldyBmb3JtdWxhdGlvbiBvZgotICAgICMgIHRoZSBwYXJzZXIgYWNjb3JkaW5nIHRvIEouIEF5Y29jaywgIlByYWN0aWNhbCBFYXJsZXkgUGFyc2luZwotICAgICMgIGFuZCB0aGUgU1BBUksgVG9vbGtpdCIsIFBoLkQuIHRoZXNpcywgVW5pdmVyc2l0eSBvZiBWaWN0b3JpYSwKLSAgICAjICAyMDAxLCBhbmQgSi4gQXljb2NrIGFuZCBSLiBOLiBIb3JzcG9vbCwgIlByYWN0aWNhbCBFYXJsZXkKLSAgICAjICBQYXJzaW5nIiwgdW5wdWJsaXNoZWQgcGFwZXIsIDIwMDEuCi0gICAgIwotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0KToKLSAgICAgICAgc2VsZi5ydWxlcyA9IHt9Ci0gICAgICAgIHNlbGYucnVsZTJmdW5jID0ge30KLSAgICAgICAgc2VsZi5ydWxlMm5hbWUgPSB7fQotICAgICAgICBzZWxmLmNvbGxlY3RSdWxlcygpCi0gICAgICAgIHNlbGYuYXVnbWVudChzdGFydCkKLSAgICAgICAgc2VsZi5ydWxlc2NoYW5nZWQgPSAxCi0KLSAgICBfTlVMTEFCTEUgPSAnXGVfJwotICAgIF9TVEFSVCA9ICdTVEFSVCcKLSAgICBfQk9GID0gJ3wtJwotCi0gICAgIwotICAgICMgIFdoZW4gcGlja2xpbmcsIHRha2UgdGhlIHRpbWUgdG8gZ2VuZXJhdGUgdGhlIGZ1bGwgc3RhdGUgbWFjaGluZTsKLSAgICAjICBzb21lIGluZm9ybWF0aW9uIGlzIHRoZW4gZXh0cmFuZW91cywgdG9vLiAgVW5mb3J0dW5hdGVseSB3ZQotICAgICMgIGNhbid0IHNhdmUgdGhlIHJ1bGUyZnVuYyBtYXAuCi0gICAgIwotICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYucnVsZXNjaGFuZ2VkOgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyAgWFhYIC0gZHVwbGljYXRlZCBmcm9tIHBhcnNlKCkKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgIHNlbGYuY29tcHV0ZU51bGwoKQotICAgICAgICAgICAgc2VsZi5uZXdydWxlcyA9IHt9Ci0gICAgICAgICAgICBzZWxmLm5ldzJvbGQgPSB7fQotICAgICAgICAgICAgc2VsZi5tYWtlTmV3UnVsZXMoKQotICAgICAgICAgICAgc2VsZi5ydWxlc2NoYW5nZWQgPSAwCi0gICAgICAgICAgICBzZWxmLmVkZ2VzLCBzZWxmLmNvcmVzID0ge30sIHt9Ci0gICAgICAgICAgICBzZWxmLnN0YXRlcyA9IHsgMDogc2VsZi5tYWtlU3RhdGUwKCkgfQotICAgICAgICAgICAgc2VsZi5tYWtlU3RhdGUoMCwgc2VsZi5fQk9GKQotICAgICAgICAjCi0gICAgICAgICMgIFhYWCAtIHNob3VsZCBmaW5kIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLi4KLSAgICAgICAgIwotICAgICAgICBjaGFuZ2VzID0gMQotICAgICAgICB3aGlsZSBjaGFuZ2VzOgotICAgICAgICAgICAgY2hhbmdlcyA9IDAKLSAgICAgICAgICAgIGZvciBrLCB2IGluIHNlbGYuZWRnZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBpZiB2IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLCBzeW0gPSBrCi0gICAgICAgICAgICAgICAgICAgIGlmIHN0YXRlIGluIHNlbGYuc3RhdGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nb3RvKHN0YXRlLCBzeW0pCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzID0gMQotICAgICAgICBydiA9IHNlbGYuX19kaWN0X18uY29weSgpCi0gICAgICAgIGZvciBzIGluIHNlbGYuc3RhdGVzLnZhbHVlcygpOgotICAgICAgICAgICAgZGVsIHMuaXRlbXMKLSAgICAgICAgZGVsIHJ2WydydWxlMmZ1bmMnXQotICAgICAgICBkZWwgcnZbJ251bGxhYmxlJ10KLSAgICAgICAgZGVsIHJ2Wydjb3JlcyddCi0gICAgICAgIHJldHVybiBydgotCi0gICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBEKToKLSAgICAgICAgc2VsZi5ydWxlcyA9IHt9Ci0gICAgICAgIHNlbGYucnVsZTJmdW5jID0ge30KLSAgICAgICAgc2VsZi5ydWxlMm5hbWUgPSB7fQotICAgICAgICBzZWxmLmNvbGxlY3RSdWxlcygpCi0gICAgICAgIHN0YXJ0ID0gRFsncnVsZXMnXVtzZWxmLl9TVEFSVF1bMF1bMV1bMV0gICAgICAgICMgQmxlY2guCi0gICAgICAgIHNlbGYuYXVnbWVudChzdGFydCkKLSAgICAgICAgRFsncnVsZTJmdW5jJ10gPSBzZWxmLnJ1bGUyZnVuYwotICAgICAgICBEWydtYWtlU2V0J10gPSBzZWxmLm1ha2VTZXRfZmFzdAotICAgICAgICBzZWxmLl9fZGljdF9fID0gRAotCi0gICAgIwotICAgICMgIEEgaG9vayBmb3IgR2VuZXJpY0FTVEJ1aWxkZXIgYW5kIEdlbmVyaWNBU1RNYXRjaGVyLiAgTWVzcwotICAgICMgIHRoZWUgbm90IHdpdGggdGhpczsgbm9yIHNoYWxsIHRoZWUgdG91Y2hldGggdGhlIF9wcmVwcm9jZXNzCi0gICAgIyAgYXJndW1lbnQgdG8gYWRkUnVsZS4KLSAgICAjCi0gICAgZGVmIHByZXByb2Nlc3Moc2VsZiwgcnVsZSwgZnVuYyk6ICAgICAgIHJldHVybiBydWxlLCBmdW5jCi0KLSAgICBkZWYgYWRkUnVsZShzZWxmLCBkb2MsIGZ1bmMsIF9wcmVwcm9jZXNzPTEpOgotICAgICAgICBmbiA9IGZ1bmMKLSAgICAgICAgcnVsZXMgPSBkb2Muc3BsaXQoKQotCi0gICAgICAgIGluZGV4ID0gW10KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHJ1bGVzKSk6Ci0gICAgICAgICAgICBpZiBydWxlc1tpXSA9PSAnOjo9JzoKLSAgICAgICAgICAgICAgICBpbmRleC5hcHBlbmQoaS0xKQotICAgICAgICBpbmRleC5hcHBlbmQobGVuKHJ1bGVzKSkKLQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oaW5kZXgpLTEpOgotICAgICAgICAgICAgbGhzID0gcnVsZXNbaW5kZXhbaV1dCi0gICAgICAgICAgICByaHMgPSBydWxlc1tpbmRleFtpXSsyOmluZGV4W2krMV1dCi0gICAgICAgICAgICBydWxlID0gKGxocywgdHVwbGUocmhzKSkKLQotICAgICAgICAgICAgaWYgX3ByZXByb2Nlc3M6Ci0gICAgICAgICAgICAgICAgcnVsZSwgZm4gPSBzZWxmLnByZXByb2Nlc3MocnVsZSwgZnVuYykKLQotICAgICAgICAgICAgaWYgbGhzIGluIHNlbGYucnVsZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5ydWxlc1tsaHNdLmFwcGVuZChydWxlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnJ1bGVzW2xoc10gPSBbIHJ1bGUgXQotICAgICAgICAgICAgc2VsZi5ydWxlMmZ1bmNbcnVsZV0gPSBmbgotICAgICAgICAgICAgc2VsZi5ydWxlMm5hbWVbcnVsZV0gPSBmdW5jLl9fbmFtZV9fWzI6XQotICAgICAgICBzZWxmLnJ1bGVzY2hhbmdlZCA9IDEKLQotICAgIGRlZiBjb2xsZWN0UnVsZXMoc2VsZik6Ci0gICAgICAgIGZvciBuYW1lIGluIF9uYW1lbGlzdChzZWxmKToKLSAgICAgICAgICAgIGlmIG5hbWVbOjJdID09ICdwXyc6Ci0gICAgICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoc2VsZiwgbmFtZSkKLSAgICAgICAgICAgICAgICBkb2MgPSBmdW5jLl9fZG9jX18KLSAgICAgICAgICAgICAgICBzZWxmLmFkZFJ1bGUoZG9jLCBmdW5jKQotCi0gICAgZGVmIGF1Z21lbnQoc2VsZiwgc3RhcnQpOgotICAgICAgICBydWxlID0gJyVzIDo6PSAlcyAlcycgJSAoc2VsZi5fU1RBUlQsIHNlbGYuX0JPRiwgc3RhcnQpCi0gICAgICAgIHNlbGYuYWRkUnVsZShydWxlLCBsYW1iZGEgYXJnczogYXJnc1sxXSwgMCkKLQotICAgIGRlZiBjb21wdXRlTnVsbChzZWxmKToKLSAgICAgICAgc2VsZi5udWxsYWJsZSA9IHt9Ci0gICAgICAgIHRiZCA9IFtdCi0KLSAgICAgICAgZm9yIHJ1bGVsaXN0IGluIHNlbGYucnVsZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICBsaHMgPSBydWxlbGlzdFswXVswXQotICAgICAgICAgICAgc2VsZi5udWxsYWJsZVtsaHNdID0gMAotICAgICAgICAgICAgZm9yIHJ1bGUgaW4gcnVsZWxpc3Q6Ci0gICAgICAgICAgICAgICAgcmhzID0gcnVsZVsxXQotICAgICAgICAgICAgICAgIGlmIGxlbihyaHMpID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubnVsbGFibGVbbGhzXSA9IDEKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyAgV2Ugb25seSBuZWVkIHRvIGNvbnNpZGVyIHJ1bGVzIHdoaWNoCi0gICAgICAgICAgICAgICAgIyAgY29uc2lzdCBlbnRpcmVseSBvZiBub250ZXJtaW5hbCBzeW1ib2xzLgotICAgICAgICAgICAgICAgICMgIFRoaXMgc2hvdWxkIGJlIGEgc2F2aW5ncyBvbiB0eXBpY2FsCi0gICAgICAgICAgICAgICAgIyAgZ3JhbW1hcnMuCi0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgIGZvciBzeW0gaW4gcmhzOgotICAgICAgICAgICAgICAgICAgICBpZiBzeW0gbm90IGluIHNlbGYucnVsZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHRiZC5hcHBlbmQocnVsZSkKLSAgICAgICAgY2hhbmdlcyA9IDEKLSAgICAgICAgd2hpbGUgY2hhbmdlczoKLSAgICAgICAgICAgIGNoYW5nZXMgPSAwCi0gICAgICAgICAgICBmb3IgbGhzLCByaHMgaW4gdGJkOgotICAgICAgICAgICAgICAgIGlmIHNlbGYubnVsbGFibGVbbGhzXToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBmb3Igc3ltIGluIHJoczoKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYubnVsbGFibGVbc3ltXToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5udWxsYWJsZVtsaHNdID0gMQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzID0gMQotCi0gICAgZGVmIG1ha2VTdGF0ZTAoc2VsZik6Ci0gICAgICAgIHMwID0gX1N0YXRlKDAsIFtdKQotICAgICAgICBmb3IgcnVsZSBpbiBzZWxmLm5ld3J1bGVzW3NlbGYuX1NUQVJUXToKLSAgICAgICAgICAgIHMwLml0ZW1zLmFwcGVuZCgocnVsZSwgMCkpCi0gICAgICAgIHJldHVybiBzMAotCi0gICAgZGVmIGZpbmFsU3RhdGUoc2VsZiwgdG9rZW5zKToKLSAgICAgICAgIwotICAgICAgICAjICBZdWNrLgotICAgICAgICAjCi0gICAgICAgIGlmIGxlbihzZWxmLm5ld3J1bGVzW3NlbGYuX1NUQVJUXSkgPT0gMiBhbmQgbGVuKHRva2VucykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHN0YXJ0ID0gc2VsZi5ydWxlc1tzZWxmLl9TVEFSVF1bMF1bMV1bMV0KLSAgICAgICAgcmV0dXJuIHNlbGYuZ290bygxLCBzdGFydCkKLQotICAgIGRlZiBtYWtlTmV3UnVsZXMoc2VsZik6Ci0gICAgICAgIHdvcmtsaXN0ID0gW10KLSAgICAgICAgZm9yIHJ1bGVsaXN0IGluIHNlbGYucnVsZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICBmb3IgcnVsZSBpbiBydWxlbGlzdDoKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoKHJ1bGUsIDAsIDEsIHJ1bGUpKQotCi0gICAgICAgIGZvciBydWxlLCBpLCBjYW5kaWRhdGUsIG9sZHJ1bGUgaW4gd29ya2xpc3Q6Ci0gICAgICAgICAgICBsaHMsIHJocyA9IHJ1bGUKLSAgICAgICAgICAgIG4gPSBsZW4ocmhzKQotICAgICAgICAgICAgd2hpbGUgaSA8IG46Ci0gICAgICAgICAgICAgICAgc3ltID0gcmhzW2ldCi0gICAgICAgICAgICAgICAgaWYgc3ltIG5vdCBpbiBzZWxmLnJ1bGVzIG9yIFwKLSAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5udWxsYWJsZVtzeW1dOgotICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSAwCi0gICAgICAgICAgICAgICAgICAgIGkgPSBpICsgMQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICAgICAgbmV3cmhzID0gbGlzdChyaHMpCi0gICAgICAgICAgICAgICAgbmV3cmhzW2ldID0gc2VsZi5fTlVMTEFCTEUrc3ltCi0gICAgICAgICAgICAgICAgbmV3cnVsZSA9IChsaHMsIHR1cGxlKG5ld3JocykpCi0gICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKChuZXdydWxlLCBpKzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUsIG9sZHJ1bGUpKQotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IDAKLSAgICAgICAgICAgICAgICBpID0gaSArIDEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgY2FuZGlkYXRlOgotICAgICAgICAgICAgICAgICAgICBsaHMgPSBzZWxmLl9OVUxMQUJMRStsaHMKLSAgICAgICAgICAgICAgICAgICAgcnVsZSA9IChsaHMsIHJocykKLSAgICAgICAgICAgICAgICBpZiBsaHMgaW4gc2VsZi5uZXdydWxlczoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXdydWxlc1tsaHNdLmFwcGVuZChydWxlKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubmV3cnVsZXNbbGhzXSA9IFsgcnVsZSBdCi0gICAgICAgICAgICAgICAgc2VsZi5uZXcyb2xkW3J1bGVdID0gb2xkcnVsZQotCi0gICAgZGVmIHR5cGVzdHJpbmcoc2VsZiwgdG9rZW4pOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGVycm9yKHNlbGYsIHRva2VuKToKLSAgICAgICAgb3V0cHV0KCJTeW50YXggZXJyb3IgYXQgb3IgbmVhciBgJXMnIHRva2VuIiAlIHRva2VuKQotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0Ci0KLSAgICBkZWYgcGFyc2Uoc2VsZiwgdG9rZW5zKToKLSAgICAgICAgc2V0cyA9IFsgWygxLDApLCAoMiwwKV0gXQotICAgICAgICBzZWxmLmxpbmtzID0ge30KLQotICAgICAgICBpZiBzZWxmLnJ1bGVzY2hhbmdlZDoKLSAgICAgICAgICAgIHNlbGYuY29tcHV0ZU51bGwoKQotICAgICAgICAgICAgc2VsZi5uZXdydWxlcyA9IHt9Ci0gICAgICAgICAgICBzZWxmLm5ldzJvbGQgPSB7fQotICAgICAgICAgICAgc2VsZi5tYWtlTmV3UnVsZXMoKQotICAgICAgICAgICAgc2VsZi5ydWxlc2NoYW5nZWQgPSAwCi0gICAgICAgICAgICBzZWxmLmVkZ2VzLCBzZWxmLmNvcmVzID0ge30sIHt9Ci0gICAgICAgICAgICBzZWxmLnN0YXRlcyA9IHsgMDogc2VsZi5tYWtlU3RhdGUwKCkgfQotICAgICAgICAgICAgc2VsZi5tYWtlU3RhdGUoMCwgc2VsZi5fQk9GKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih0b2tlbnMpKToKLSAgICAgICAgICAgIHNldHMuYXBwZW5kKFtdKQotCi0gICAgICAgICAgICBpZiBzZXRzW2ldID09IFtdOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLm1ha2VTZXQodG9rZW5zW2ldLCBzZXRzLCBpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2V0cy5hcHBlbmQoW10pCi0gICAgICAgICAgICBzZWxmLm1ha2VTZXQoTm9uZSwgc2V0cywgbGVuKHRva2VucykpCi0KLSAgICAgICAgI19kdW1wKHRva2Vucywgc2V0cywgc2VsZi5zdGF0ZXMpCi0KLSAgICAgICAgZmluYWxpdGVtID0gKHNlbGYuZmluYWxTdGF0ZSh0b2tlbnMpLCAwKQotICAgICAgICBpZiBmaW5hbGl0ZW0gbm90IGluIHNldHNbLTJdOgotICAgICAgICAgICAgaWYgbGVuKHRva2VucykgPiAwOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IodG9rZW5zW2ktMV0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoTm9uZSkKLQotICAgICAgICByZXR1cm4gc2VsZi5idWlsZFRyZWUoc2VsZi5fU1RBUlQsIGZpbmFsaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VucywgbGVuKHNldHMpLTIpCi0KLSAgICBkZWYgaXNudWxsYWJsZShzZWxmLCBzeW0pOgotICAgICAgICAjCi0gICAgICAgICMgIEZvciBzeW1ib2xzIGluIEdfZSBvbmx5LiAgSWYgd2Ugd2VyZW4ndCBzdXBwb3J0aW5nIDEuNSwKLSAgICAgICAgIyAgY291bGQganVzdCB1c2Ugc3ltLnN0YXJ0c3dpdGgoKS4KLSAgICAgICAgIwotICAgICAgICByZXR1cm4gc2VsZi5fTlVMTEFCTEUgPT0gc3ltWzA6bGVuKHNlbGYuX05VTExBQkxFKV0KLQotICAgIGRlZiBza2lwKHNlbGYsIGhzLCBwb3M9MCk6Ci0gICAgICAgIG4gPSBsZW4oaHNbMV0pCi0gICAgICAgIHdoaWxlIHBvcyA8IG46Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5pc251bGxhYmxlKGhzWzFdW3Bvc10pOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBwb3MgPSBwb3MgKyAxCi0gICAgICAgIHJldHVybiBwb3MKLQotICAgIGRlZiBtYWtlU3RhdGUoc2VsZiwgc3RhdGUsIHN5bSk6Ci0gICAgICAgIGFzc2VydCBzeW0gaXMgbm90IE5vbmUKLSAgICAgICAgIwotICAgICAgICAjICBDb21wdXRlIFxlcHNpbG9uLWtlcm5lbCBzdGF0ZSdzIGNvcmUgYW5kIHNlZSBpZgotICAgICAgICAjICBpdCBleGlzdHMgYWxyZWFkeS4KLSAgICAgICAgIwotICAgICAgICBraXRlbXMgPSBbXQotICAgICAgICBmb3IgcnVsZSwgcG9zIGluIHNlbGYuc3RhdGVzW3N0YXRlXS5pdGVtczoKLSAgICAgICAgICAgIGxocywgcmhzID0gcnVsZQotICAgICAgICAgICAgaWYgcmhzW3Bvczpwb3MrMV0gPT0gKHN5bSwpOgotICAgICAgICAgICAgICAgIGtpdGVtcy5hcHBlbmQoKHJ1bGUsIHNlbGYuc2tpcChydWxlLCBwb3MrMSkpKQotICAgICAgICBjb3JlID0ga2l0ZW1zCi0KLSAgICAgICAgY29yZS5zb3J0KCkKLSAgICAgICAgdGNvcmUgPSB0dXBsZShjb3JlKQotICAgICAgICBpZiB0Y29yZSBpbiBzZWxmLmNvcmVzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29yZXNbdGNvcmVdCi0gICAgICAgICMKLSAgICAgICAgIyAgTm9wZSwgZG9lc24ndCBleGlzdC4gIENvbXB1dGUgaXQgYW5kIHRoZSBhc3NvY2lhdGVkCi0gICAgICAgICMgIFxlcHNpbG9uLW5vbmtlcm5lbCBzdGF0ZSB0b2dldGhlcjsgd2UnbGwgbmVlZCBpdCByaWdodCBhd2F5LgotICAgICAgICAjCi0gICAgICAgIGsgPSBzZWxmLmNvcmVzW3Rjb3JlXSA9IGxlbihzZWxmLnN0YXRlcykKLSAgICAgICAgSywgTksgPSBfU3RhdGUoaywga2l0ZW1zKSwgX1N0YXRlKGsrMSwgW10pCi0gICAgICAgIHNlbGYuc3RhdGVzW2tdID0gSwotICAgICAgICBwcmVkaWN0ZWQgPSB7fQotCi0gICAgICAgIGVkZ2VzID0gc2VsZi5lZGdlcwotICAgICAgICBydWxlcyA9IHNlbGYubmV3cnVsZXMKLSAgICAgICAgZm9yIFggaW4gSywgTks6Ci0gICAgICAgICAgICB3b3JrbGlzdCA9IFguaXRlbXMKLSAgICAgICAgICAgIGZvciBpdGVtIGluIHdvcmtsaXN0OgotICAgICAgICAgICAgICAgIHJ1bGUsIHBvcyA9IGl0ZW0KLSAgICAgICAgICAgICAgICBsaHMsIHJocyA9IHJ1bGUKLSAgICAgICAgICAgICAgICBpZiBwb3MgPT0gbGVuKHJocyk6Ci0gICAgICAgICAgICAgICAgICAgIFguY29tcGxldGUuYXBwZW5kKHJ1bGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgICAgICBuZXh0U3ltID0gcmhzW3Bvc10KLSAgICAgICAgICAgICAgICBrZXkgPSAoWC5zdGF0ZW5vLCBuZXh0U3ltKQotICAgICAgICAgICAgICAgIGlmIG5leHRTeW0gbm90IGluIHJ1bGVzOgotICAgICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluIGVkZ2VzOgotICAgICAgICAgICAgICAgICAgICAgICAgZWRnZXNba2V5XSA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIFguVC5hcHBlbmQobmV4dFN5bSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBlZGdlc1trZXldID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBpZiBuZXh0U3ltIG5vdCBpbiBwcmVkaWN0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWN0ZWRbbmV4dFN5bV0gPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJ1bGUgaW4gcnVsZXNbbmV4dFN5bV06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBvcyA9IHNlbGYuc2tpcChwcnVsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgPSAocHJ1bGUsIHBwb3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTksuaXRlbXMuYXBwZW5kKG5ldykKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgIFByb2JsZW06IHdlIGtub3cgSyBuZWVkcyBnZW5lcmF0aW5nLCBidXQgd2UKLSAgICAgICAgICAgICMgIGRvbid0IHlldCBrbm93IGFib3V0IE5LLiAgQ2FuJ3QgY29tbWl0IGFueXRoaW5nCi0gICAgICAgICAgICAjICByZWdhcmRpbmcgTksgdG8gc2VsZi5lZGdlcyB1bnRpbCB3ZSdyZSBzdXJlLiAgU2hvdWxkCi0gICAgICAgICAgICAjICB3ZSBkZWxheSBjb21taXR0aW5nIG9uIGJvdGggSyBhbmQgTksgdG8gYXZvaWQgdGhpcwotICAgICAgICAgICAgIyAgaGFja3kgY29kZT8gIFRoaXMgY3JlYXRlcyBvdGhlciBwcm9ibGVtcy4uCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICBpZiBYIGlzIEs6Ci0gICAgICAgICAgICAgICAgZWRnZXMgPSB7fQotCi0gICAgICAgIGlmIE5LLml0ZW1zID09IFtdOgotICAgICAgICAgICAgcmV0dXJuIGsKLQotICAgICAgICAjCi0gICAgICAgICMgIENoZWNrIGZvciBcZXBzaWxvbi1ub25rZXJuZWwncyBjb3JlLiAgVW5mb3J0dW5hdGVseSB3ZQotICAgICAgICAjICBuZWVkIHRvIGtub3cgdGhlIGVudGlyZSBzZXQgb2YgcHJlZGljdGVkIG5vbnRlcm1pbmFscwotICAgICAgICAjICB0byBkbyB0aGlzIHdpdGhvdXQgYWNjaWRlbnRhbGx5IGR1cGxpY2F0aW5nIHN0YXRlcy4KLSAgICAgICAgIwotICAgICAgICBjb3JlID0gc29ydGVkKHByZWRpY3RlZC5rZXlzKCkpCi0gICAgICAgIHRjb3JlID0gdHVwbGUoY29yZSkKLSAgICAgICAgaWYgdGNvcmUgaW4gc2VsZi5jb3JlczoKLSAgICAgICAgICAgIHNlbGYuZWRnZXNbKGssIE5vbmUpXSA9IHNlbGYuY29yZXNbdGNvcmVdCi0gICAgICAgICAgICByZXR1cm4gawotCi0gICAgICAgIG5rID0gc2VsZi5jb3Jlc1t0Y29yZV0gPSBzZWxmLmVkZ2VzWyhrLCBOb25lKV0gPSBOSy5zdGF0ZW5vCi0gICAgICAgIHNlbGYuZWRnZXMudXBkYXRlKGVkZ2VzKQotICAgICAgICBzZWxmLnN0YXRlc1tua10gPSBOSwotICAgICAgICByZXR1cm4gawotCi0gICAgZGVmIGdvdG8oc2VsZiwgc3RhdGUsIHN5bSk6Ci0gICAgICAgIGtleSA9IChzdGF0ZSwgc3ltKQotICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuZWRnZXM6Ci0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjICBObyB0cmFuc2l0aW9ucyBmcm9tIHN0YXRlIG9uIHN5bS4KLSAgICAgICAgICAgICMKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgcnYgPSBzZWxmLmVkZ2VzW2tleV0KLSAgICAgICAgaWYgcnYgaXMgTm9uZToKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgIFRhcmdldCBzdGF0ZSBpc24ndCBnZW5lcmF0ZWQgeWV0LiAgUmVtZWR5IHRoaXMuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICBydiA9IHNlbGYubWFrZVN0YXRlKHN0YXRlLCBzeW0pCi0gICAgICAgICAgICBzZWxmLmVkZ2VzW2tleV0gPSBydgotICAgICAgICByZXR1cm4gcnYKLQotICAgIGRlZiBnb3RvVChzZWxmLCBzdGF0ZSwgdCk6Ci0gICAgICAgIHJldHVybiBbc2VsZi5nb3RvKHN0YXRlLCB0KV0KLQotICAgIGRlZiBnb3RvU1Qoc2VsZiwgc3RhdGUsIHN0KToKLSAgICAgICAgcnYgPSBbXQotICAgICAgICBmb3IgdCBpbiBzZWxmLnN0YXRlc1tzdGF0ZV0uVDoKLSAgICAgICAgICAgIGlmIHN0ID09IHQ6Ci0gICAgICAgICAgICAgICAgcnYuYXBwZW5kKHNlbGYuZ290byhzdGF0ZSwgdCkpCi0gICAgICAgIHJldHVybiBydgotCi0gICAgZGVmIGFkZChzZWxmLCBzZXQsIGl0ZW0sIGk9Tm9uZSwgcHJlZGVjZXNzb3I9Tm9uZSwgY2F1c2FsPU5vbmUpOgotICAgICAgICBpZiBwcmVkZWNlc3NvciBpcyBOb25lOgotICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gc2V0OgotICAgICAgICAgICAgICAgIHNldC5hcHBlbmQoaXRlbSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGtleSA9IChpdGVtLCBpKQotICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gc2V0OgotICAgICAgICAgICAgICAgIHNlbGYubGlua3Nba2V5XSA9IFtdCi0gICAgICAgICAgICAgICAgc2V0LmFwcGVuZChpdGVtKQotICAgICAgICAgICAgc2VsZi5saW5rc1trZXldLmFwcGVuZCgocHJlZGVjZXNzb3IsIGNhdXNhbCkpCi0KLSAgICBkZWYgbWFrZVNldChzZWxmLCB0b2tlbiwgc2V0cywgaSk6Ci0gICAgICAgIGN1ciwgbmV4dCA9IHNldHNbaV0sIHNldHNbaSsxXQotCi0gICAgICAgIHR0eXBlID0gdG9rZW4gaXMgbm90IE5vbmUgYW5kIHNlbGYudHlwZXN0cmluZyh0b2tlbikgb3IgTm9uZQotICAgICAgICBpZiB0dHlwZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGZuLCBhcmcgPSBzZWxmLmdvdG9ULCB0dHlwZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm4sIGFyZyA9IHNlbGYuZ290b1NULCB0b2tlbgotCi0gICAgICAgIGZvciBpdGVtIGluIGN1cjoKLSAgICAgICAgICAgIHB0ciA9IChpdGVtLCBpKQotICAgICAgICAgICAgc3RhdGUsIHBhcmVudCA9IGl0ZW0KLSAgICAgICAgICAgIGFkZCA9IGZuKHN0YXRlLCBhcmcpCi0gICAgICAgICAgICBmb3IgayBpbiBhZGQ6Ci0gICAgICAgICAgICAgICAgaWYgayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQobmV4dCwgKGssIHBhcmVudCksIGkrMSwgcHRyKQotICAgICAgICAgICAgICAgICAgICBuayA9IHNlbGYuZ290byhrLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBuayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKG5leHQsIChuaywgaSsxKSkKLQotICAgICAgICAgICAgaWYgcGFyZW50ID09IGk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgZm9yIHJ1bGUgaW4gc2VsZi5zdGF0ZXNbc3RhdGVdLmNvbXBsZXRlOgotICAgICAgICAgICAgICAgIGxocywgcmhzID0gcnVsZQotICAgICAgICAgICAgICAgIGZvciBwaXRlbSBpbiBzZXRzW3BhcmVudF06Ci0gICAgICAgICAgICAgICAgICAgIHBzdGF0ZSwgcHBhcmVudCA9IHBpdGVtCi0gICAgICAgICAgICAgICAgICAgIGsgPSBzZWxmLmdvdG8ocHN0YXRlLCBsaHMpCi0gICAgICAgICAgICAgICAgICAgIGlmIGsgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aHkgPSAoaXRlbSwgaSwgcnVsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBwdHIgPSAocGl0ZW0sIHBhcmVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKGN1ciwgKGssIHBwYXJlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgcHB0ciwgd2h5KQotICAgICAgICAgICAgICAgICAgICAgICAgbmsgPSBzZWxmLmdvdG8oaywgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5rIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKGN1ciwgKG5rLCBpKSkKLQotICAgIGRlZiBtYWtlU2V0X2Zhc3Qoc2VsZiwgdG9rZW4sIHNldHMsIGkpOgotICAgICAgICAjCi0gICAgICAgICMgIENhbGwgKm9ubHkqIHdoZW4gdGhlIGVudGlyZSBzdGF0ZSBtYWNoaW5lIGhhcyBiZWVuIGJ1aWx0IQotICAgICAgICAjICBJdCByZWxpZXMgb24gc2VsZi5lZGdlcyBiZWluZyBmaWxsZWQgaW4gY29tcGxldGVseSwgYW5kCi0gICAgICAgICMgIHRoZW4gZHVwbGljYXRlcyBhbmQgaW5saW5lcyBjb2RlIHRvIGJvb3N0IHNwZWVkIGF0IHRoZQotICAgICAgICAjICBjb3N0IG9mIGV4dHJlbWUgdWdsaW5lc3MuCi0gICAgICAgICMKLSAgICAgICAgY3VyLCBuZXh0ID0gc2V0c1tpXSwgc2V0c1tpKzFdCi0gICAgICAgIHR0eXBlID0gdG9rZW4gaXMgbm90IE5vbmUgYW5kIHNlbGYudHlwZXN0cmluZyh0b2tlbikgb3IgTm9uZQotCi0gICAgICAgIGZvciBpdGVtIGluIGN1cjoKLSAgICAgICAgICAgIHB0ciA9IChpdGVtLCBpKQotICAgICAgICAgICAgc3RhdGUsIHBhcmVudCA9IGl0ZW0KLSAgICAgICAgICAgIGlmIHR0eXBlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGsgPSBzZWxmLmVkZ2VzLmdldCgoc3RhdGUsIHR0eXBlKSwgTm9uZSkKLSAgICAgICAgICAgICAgICBpZiBrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAjc2VsZi5hZGQobmV4dCwgKGssIHBhcmVudCksIGkrMSwgcHRyKQotICAgICAgICAgICAgICAgICAgICAjSU5MSU5FRCAtLXYKLSAgICAgICAgICAgICAgICAgICAgbmV3ID0gKGssIHBhcmVudCkKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gKG5ldywgaSsxKQotICAgICAgICAgICAgICAgICAgICBpZiBuZXcgbm90IGluIG5leHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmtzW2tleV0gPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5hcHBlbmQobmV3KQotICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmtzW2tleV0uYXBwZW5kKChwdHIsIE5vbmUpKQotICAgICAgICAgICAgICAgICAgICAjSU5MSU5FRCAtLV4KLSAgICAgICAgICAgICAgICAgICAgI25rID0gc2VsZi5nb3RvKGssIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIG5rID0gc2VsZi5lZGdlcy5nZXQoKGssIE5vbmUpLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBuayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICNzZWxmLmFkZChuZXh0LCAobmssIGkrMSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAjSU5MSU5FRCAtLXYKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyA9IChuaywgaSsxKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV3IG5vdCBpbiBuZXh0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuYXBwZW5kKG5ldykKLSAgICAgICAgICAgICAgICAgICAgICAgICNJTkxJTkVEIC0tXgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhZGQgPSBzZWxmLmdvdG9TVChzdGF0ZSwgdG9rZW4pCi0gICAgICAgICAgICAgICAgZm9yIGsgaW4gYWRkOgotICAgICAgICAgICAgICAgICAgICBpZiBrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQobmV4dCwgKGssIHBhcmVudCksIGkrMSwgcHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgI25rID0gc2VsZi5nb3RvKGssIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBuayA9IHNlbGYuZWRnZXMuZ2V0KChrLCBOb25lKSwgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5rIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkKG5leHQsIChuaywgaSsxKSkKLQotICAgICAgICAgICAgaWYgcGFyZW50ID09IGk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgZm9yIHJ1bGUgaW4gc2VsZi5zdGF0ZXNbc3RhdGVdLmNvbXBsZXRlOgotICAgICAgICAgICAgICAgIGxocywgcmhzID0gcnVsZQotICAgICAgICAgICAgICAgIGZvciBwaXRlbSBpbiBzZXRzW3BhcmVudF06Ci0gICAgICAgICAgICAgICAgICAgIHBzdGF0ZSwgcHBhcmVudCA9IHBpdGVtCi0gICAgICAgICAgICAgICAgICAgICNrID0gc2VsZi5nb3RvKHBzdGF0ZSwgbGhzKQotICAgICAgICAgICAgICAgICAgICBrID0gc2VsZi5lZGdlcy5nZXQoKHBzdGF0ZSwgbGhzKSwgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoeSA9IChpdGVtLCBpLCBydWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgcHB0ciA9IChwaXRlbSwgcGFyZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGYuYWRkKGN1ciwgKGssIHBwYXJlbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgaSwgcHB0ciwgd2h5KQotICAgICAgICAgICAgICAgICAgICAgICAgI0lOTElORUQgLS12Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgPSAoaywgcHBhcmVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IChuZXcsIGkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBuZXcgbm90IGluIGN1cjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmtzW2tleV0gPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ci5hcHBlbmQobmV3KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5rc1trZXldLmFwcGVuZCgocHB0ciwgd2h5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICNJTkxJTkVEIC0tXgotICAgICAgICAgICAgICAgICAgICAgICAgI25rID0gc2VsZi5nb3RvKGssIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBuayA9IHNlbGYuZWRnZXMuZ2V0KChrLCBOb25lKSwgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5rIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzZWxmLmFkZChjdXIsIChuaywgaSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lOTElORUQgLS12Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ID0gKG5rLCBpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5ldyBub3QgaW4gY3VyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIuYXBwZW5kKG5ldykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU5MSU5FRCAtLV4KLQotICAgIGRlZiBwcmVkZWNlc3NvcihzZWxmLCBrZXksIGNhdXNhbCk6Ci0gICAgICAgIGZvciBwLCBjIGluIHNlbGYubGlua3Nba2V5XToKLSAgICAgICAgICAgIGlmIGMgPT0gY2F1c2FsOgotICAgICAgICAgICAgICAgIHJldHVybiBwCi0gICAgICAgIGFzc2VydCAwCi0KLSAgICBkZWYgY2F1c2FsKHNlbGYsIGtleSk6Ci0gICAgICAgIGxpbmtzID0gc2VsZi5saW5rc1trZXldCi0gICAgICAgIGlmIGxlbihsaW5rcykgPT0gMToKLSAgICAgICAgICAgIHJldHVybiBsaW5rc1swXVsxXQotICAgICAgICBjaG9pY2VzID0gW10KLSAgICAgICAgcnVsZTJjYXVzZSA9IHt9Ci0gICAgICAgIGZvciBwLCBjIGluIGxpbmtzOgotICAgICAgICAgICAgcnVsZSA9IGNbMl0KLSAgICAgICAgICAgIGNob2ljZXMuYXBwZW5kKHJ1bGUpCi0gICAgICAgICAgICBydWxlMmNhdXNlW3J1bGVdID0gYwotICAgICAgICByZXR1cm4gcnVsZTJjYXVzZVtzZWxmLmFtYmlndWl0eShjaG9pY2VzKV0KLQotICAgIGRlZiBkZXJpdmVFcHNpbG9uKHNlbGYsIG50KToKLSAgICAgICAgaWYgbGVuKHNlbGYubmV3cnVsZXNbbnRdKSA+IDE6Ci0gICAgICAgICAgICBydWxlID0gc2VsZi5hbWJpZ3VpdHkoc2VsZi5uZXdydWxlc1tudF0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBydWxlID0gc2VsZi5uZXdydWxlc1tudF1bMF0KLSAgICAgICAgI291dHB1dChydWxlKQotCi0gICAgICAgIHJocyA9IHJ1bGVbMV0KLSAgICAgICAgYXR0ciA9IFtOb25lXSAqIGxlbihyaHMpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHJocyktMSwgLTEsIC0xKToKLSAgICAgICAgICAgIGF0dHJbaV0gPSBzZWxmLmRlcml2ZUVwc2lsb24ocmhzW2ldKQotICAgICAgICByZXR1cm4gc2VsZi5ydWxlMmZ1bmNbc2VsZi5uZXcyb2xkW3J1bGVdXShhdHRyKQotCi0gICAgZGVmIGJ1aWxkVHJlZShzZWxmLCBudCwgaXRlbSwgdG9rZW5zLCBrKToKLSAgICAgICAgc3RhdGUsIHBhcmVudCA9IGl0ZW0KLQotICAgICAgICBjaG9pY2VzID0gW10KLSAgICAgICAgZm9yIHJ1bGUgaW4gc2VsZi5zdGF0ZXNbc3RhdGVdLmNvbXBsZXRlOgotICAgICAgICAgICAgaWYgcnVsZVswXSA9PSBudDoKLSAgICAgICAgICAgICAgICBjaG9pY2VzLmFwcGVuZChydWxlKQotICAgICAgICBydWxlID0gY2hvaWNlc1swXQotICAgICAgICBpZiBsZW4oY2hvaWNlcykgPiAxOgotICAgICAgICAgICAgcnVsZSA9IHNlbGYuYW1iaWd1aXR5KGNob2ljZXMpCi0gICAgICAgICNvdXRwdXQocnVsZSkKLQotICAgICAgICByaHMgPSBydWxlWzFdCi0gICAgICAgIGF0dHIgPSBbTm9uZV0gKiBsZW4ocmhzKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihyaHMpLTEsIC0xLCAtMSk6Ci0gICAgICAgICAgICBzeW0gPSByaHNbaV0KLSAgICAgICAgICAgIGlmIHN5bSBub3QgaW4gc2VsZi5uZXdydWxlczoKLSAgICAgICAgICAgICAgICBpZiBzeW0gIT0gc2VsZi5fQk9GOgotICAgICAgICAgICAgICAgICAgICBhdHRyW2ldID0gdG9rZW5zW2stMV0KLSAgICAgICAgICAgICAgICAgICAga2V5ID0gKGl0ZW0sIGspCi0gICAgICAgICAgICAgICAgICAgIGl0ZW0sIGsgPSBzZWxmLnByZWRlY2Vzc29yKGtleSwgTm9uZSkKLSAgICAgICAgICAgICNlbGlmIHNlbGYuaXNudWxsYWJsZShzeW0pOgotICAgICAgICAgICAgZWxpZiBzZWxmLl9OVUxMQUJMRSA9PSBzeW1bMDpsZW4oc2VsZi5fTlVMTEFCTEUpXToKLSAgICAgICAgICAgICAgICBhdHRyW2ldID0gc2VsZi5kZXJpdmVFcHNpbG9uKHN5bSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAga2V5ID0gKGl0ZW0sIGspCi0gICAgICAgICAgICAgICAgd2h5ID0gc2VsZi5jYXVzYWwoa2V5KQotICAgICAgICAgICAgICAgIGF0dHJbaV0gPSBzZWxmLmJ1aWxkVHJlZShzeW0sIHdoeVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLCB3aHlbMV0pCi0gICAgICAgICAgICAgICAgaXRlbSwgayA9IHNlbGYucHJlZGVjZXNzb3Ioa2V5LCB3aHkpCi0gICAgICAgIHJldHVybiBzZWxmLnJ1bGUyZnVuY1tzZWxmLm5ldzJvbGRbcnVsZV1dKGF0dHIpCi0KLSAgICBkZWYgYW1iaWd1aXR5KHNlbGYsIHJ1bGVzKToKLSAgICAgICAgIwotICAgICAgICAjICBYWFggLSBwcm9ibGVtIGhlcmUgYW5kIGluIGNvbGxlY3RSdWxlcygpIGlmIHRoZSBzYW1lIHJ1bGUKLSAgICAgICAgIyAgICAgICAgYXBwZWFycyBpbiA+MSBtZXRob2QuICBBbHNvIHVuZGVmaW5lZCByZXN1bHRzIGlmIHJ1bGVzCi0gICAgICAgICMgICAgICAgIGNhdXNpbmcgdGhlIGFtYmlndWl0eSBhcHBlYXIgaW4gdGhlIHNhbWUgbWV0aG9kLgotICAgICAgICAjCi0gICAgICAgIHNvcnRsaXN0ID0gW10KLSAgICAgICAgbmFtZTJpbmRleCA9IHt9Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihydWxlcykpOgotICAgICAgICAgICAgbGhzLCByaHMgPSBydWxlID0gcnVsZXNbaV0KLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnJ1bGUybmFtZVtzZWxmLm5ldzJvbGRbcnVsZV1dCi0gICAgICAgICAgICBzb3J0bGlzdC5hcHBlbmQoKGxlbihyaHMpLCBuYW1lKSkKLSAgICAgICAgICAgIG5hbWUyaW5kZXhbbmFtZV0gPSBpCi0gICAgICAgIHNvcnRsaXN0LnNvcnQoKQotICAgICAgICBsaXN0ID0gW2IgZm9yIGEsIGIgaW4gc29ydGxpc3RdCi0gICAgICAgIHJldHVybiBydWxlc1tuYW1lMmluZGV4W3NlbGYucmVzb2x2ZShsaXN0KV1dCi0KLSAgICBkZWYgcmVzb2x2ZShzZWxmLCBsaXN0KToKLSAgICAgICAgIwotICAgICAgICAjICBSZXNvbHZlIGFtYmlndWl0eSBpbiBmYXZvciBvZiB0aGUgc2hvcnRlc3QgUkhTLgotICAgICAgICAjICBTaW5jZSB3ZSB3YWxrIHRoZSB0cmVlIGZyb20gdGhlIHRvcCBkb3duLCB0aGlzCi0gICAgICAgICMgIHNob3VsZCBlZmZlY3RpdmVseSByZXNvbHZlIGluIGZhdm9yIG9mIGEgInNoaWZ0Ii4KLSAgICAgICAgIwotICAgICAgICByZXR1cm4gbGlzdFswXQotCi0jCi0jICBHZW5lcmljQVNUQnVpbGRlciBhdXRvbWFnaWNhbGx5IGNvbnN0cnVjdHMgYSBjb25jcmV0ZS9hYnN0cmFjdCBzeW50YXggdHJlZQotIyAgZm9yIGEgZ2l2ZW4gaW5wdXQuICBUaGUgZXh0cmEgYXJndW1lbnQgaXMgYSBjbGFzcyAobm90IGFuIGluc3RhbmNlISkKLSMgIHdoaWNoIHN1cHBvcnRzIHRoZSAiX19zZXRzbGljZV9fIiBhbmQgIl9fbGVuX18iIG1ldGhvZHMuCi0jCi0jICBYWFggLSBzaWxlbnRseSBvdmVycmlkZXMgYW55IHVzZXIgY29kZSBpbiBtZXRob2RzLgotIwotCi1jbGFzcyBHZW5lcmljQVNUQnVpbGRlcihHZW5lcmljUGFyc2VyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgQVNULCBzdGFydCk6Ci0gICAgICAgIEdlbmVyaWNQYXJzZXIuX19pbml0X18oc2VsZiwgc3RhcnQpCi0gICAgICAgIHNlbGYuQVNUID0gQVNUCi0KLSAgICBkZWYgcHJlcHJvY2VzcyhzZWxmLCBydWxlLCBmdW5jKToKLSAgICAgICAgcmViaW5kID0gbGFtYmRhIGxocywgc2VsZj1zZWxmOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYXJncywgbGhzPWxocywgc2VsZj1zZWxmOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRBU1ROb2RlKGFyZ3MsIGxocykKLSAgICAgICAgbGhzLCByaHMgPSBydWxlCi0gICAgICAgIHJldHVybiBydWxlLCByZWJpbmQobGhzKQotCi0gICAgZGVmIGJ1aWxkQVNUTm9kZShzZWxmLCBhcmdzLCBsaHMpOgotICAgICAgICBjaGlsZHJlbiA9IFtdCi0gICAgICAgIGZvciBhcmcgaW4gYXJnczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBzZWxmLkFTVCk6Ci0gICAgICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGFyZykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHNlbGYudGVybWluYWwoYXJnKSkKLSAgICAgICAgcmV0dXJuIHNlbGYubm9udGVybWluYWwobGhzLCBjaGlsZHJlbikKLQotICAgIGRlZiB0ZXJtaW5hbChzZWxmLCB0b2tlbik6ICAgICAgcmV0dXJuIHRva2VuCi0KLSAgICBkZWYgbm9udGVybWluYWwoc2VsZiwgdHlwZSwgYXJncyk6Ci0gICAgICAgIHJ2ID0gc2VsZi5BU1QodHlwZSkKLSAgICAgICAgcnZbOmxlbihhcmdzKV0gPSBhcmdzCi0gICAgICAgIHJldHVybiBydgotCi0jCi0jICBHZW5lcmljQVNUVHJhdmVyc2FsIGlzIGEgVmlzaXRvciBwYXR0ZXJuIGFjY29yZGluZyB0byBEZXNpZ24gUGF0dGVybnMuICBGb3IKLSMgIGVhY2ggbm9kZSBpdCBhdHRlbXB0cyB0byBpbnZva2UgdGhlIG1ldGhvZCBuXzxub2RlIHR5cGU+LCBmYWxsaW5nCi0jICBiYWNrIG9udG8gdGhlIGRlZmF1bHQoKSBtZXRob2QgaWYgdGhlIG5fKiBjYW4ndCBiZSBmb3VuZC4gIFRoZSBwcmVvcmRlcgotIyAgdHJhdmVyc2FsIGFsc28gbG9va3MgZm9yIGFuIGV4aXQgaG9vayBuYW1lZCBuXzxub2RlIHR5cGU+X2V4aXQgKG5vIGRlZmF1bHQKLSMgIHJvdXRpbmUgaXMgY2FsbGVkIGlmIGl0J3Mgbm90IGZvdW5kKS4gIFRvIHByZW1hdHVyZWx5IGhhbHQgdHJhdmVyc2FsCi0jICBvZiBhIHN1YnRyZWUsIGNhbGwgdGhlIHBydW5lKCkgbWV0aG9kIC0tIHRoaXMgb25seSBtYWtlcyBzZW5zZSBmb3IgYQotIyAgcHJlb3JkZXIgdHJhdmVyc2FsLiAgTm9kZSB0eXBlIGlzIGRldGVybWluZWQgdmlhIHRoZSB0eXBlc3RyaW5nKCkgbWV0aG9kLgotIwotCi1jbGFzcyBHZW5lcmljQVNUVHJhdmVyc2FsUHJ1bmluZ0V4Y2VwdGlvbjoKLSAgICBwYXNzCi0KLWNsYXNzIEdlbmVyaWNBU1RUcmF2ZXJzYWw6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFzdCk6Ci0gICAgICAgIHNlbGYuYXN0ID0gYXN0Ci0KLSAgICBkZWYgdHlwZXN0cmluZyhzZWxmLCBub2RlKToKLSAgICAgICAgcmV0dXJuIG5vZGUudHlwZQotCi0gICAgZGVmIHBydW5lKHNlbGYpOgotICAgICAgICByYWlzZSBHZW5lcmljQVNUVHJhdmVyc2FsUHJ1bmluZ0V4Y2VwdGlvbgotCi0gICAgZGVmIHByZW9yZGVyKHNlbGYsIG5vZGU9Tm9uZSk6Ci0gICAgICAgIGlmIG5vZGUgaXMgTm9uZToKLSAgICAgICAgICAgIG5vZGUgPSBzZWxmLmFzdAotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG5hbWUgPSAnbl8nICsgc2VsZi50eXBlc3RyaW5nKG5vZGUpCi0gICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYsIG5hbWUpOgotICAgICAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYsIG5hbWUpCi0gICAgICAgICAgICAgICAgZnVuYyhub2RlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmRlZmF1bHQobm9kZSkKLSAgICAgICAgZXhjZXB0IEdlbmVyaWNBU1RUcmF2ZXJzYWxQcnVuaW5nRXhjZXB0aW9uOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgZm9yIGtpZCBpbiBub2RlOgotICAgICAgICAgICAgc2VsZi5wcmVvcmRlcihraWQpCi0KLSAgICAgICAgbmFtZSA9IG5hbWUgKyAnX2V4aXQnCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgbmFtZSk6Ci0gICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzZWxmLCBuYW1lKQotICAgICAgICAgICAgZnVuYyhub2RlKQotCi0gICAgZGVmIHBvc3RvcmRlcihzZWxmLCBub2RlPU5vbmUpOgotICAgICAgICBpZiBub2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICBub2RlID0gc2VsZi5hc3QKLQotICAgICAgICBmb3Iga2lkIGluIG5vZGU6Ci0gICAgICAgICAgICBzZWxmLnBvc3RvcmRlcihraWQpCi0KLSAgICAgICAgbmFtZSA9ICduXycgKyBzZWxmLnR5cGVzdHJpbmcobm9kZSkKLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCBuYW1lKToKLSAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYsIG5hbWUpCi0gICAgICAgICAgICBmdW5jKG5vZGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmRlZmF1bHQobm9kZSkKLQotCi0gICAgZGVmIGRlZmF1bHQoc2VsZiwgbm9kZSk6Ci0gICAgICAgIHBhc3MKLQotIwotIyAgR2VuZXJpY0FTVE1hdGNoZXIuICBBU1Qgbm9kZXMgbXVzdCBoYXZlICJfX2dldGl0ZW1fXyIgYW5kICJfX2NtcF9fIgotIyAgaW1wbGVtZW50ZWQuCi0jCi0jICBYWFggLSBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCBob3cgR2VuZXJpY1BhcnNlciB3YWxrcyB0aGUgcGFyc2UgdHJlZS4KLSMKLQotY2xhc3MgR2VuZXJpY0FTVE1hdGNoZXIoR2VuZXJpY1BhcnNlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBhc3QpOgotICAgICAgICBHZW5lcmljUGFyc2VyLl9faW5pdF9fKHNlbGYsIHN0YXJ0KQotICAgICAgICBzZWxmLmFzdCA9IGFzdAotCi0gICAgZGVmIHByZXByb2Nlc3Moc2VsZiwgcnVsZSwgZnVuYyk6Ci0gICAgICAgIHJlYmluZCA9IGxhbWJkYSBmdW5jLCBzZWxmPXNlbGY6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBhcmdzLCBmdW5jPWZ1bmMsIHNlbGY9c2VsZjogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvdW5kTWF0Y2goYXJncywgZnVuYykKLSAgICAgICAgbGhzLCByaHMgPSBydWxlCi0gICAgICAgIHJoc2xpc3QgPSBsaXN0KHJocykKLSAgICAgICAgcmhzbGlzdC5yZXZlcnNlKCkKLQotICAgICAgICByZXR1cm4gKGxocywgdHVwbGUocmhzbGlzdCkpLCByZWJpbmQoZnVuYykKLQotICAgIGRlZiBmb3VuZE1hdGNoKHNlbGYsIGFyZ3MsIGZ1bmMpOgotICAgICAgICBmdW5jKGFyZ3NbLTFdKQotICAgICAgICByZXR1cm4gYXJnc1stMV0KLQotICAgIGRlZiBtYXRjaF9yKHNlbGYsIG5vZGUpOgotICAgICAgICBzZWxmLmlucHV0Lmluc2VydCgwLCBub2RlKQotICAgICAgICBjaGlsZHJlbiA9IDAKLQotICAgICAgICBmb3IgY2hpbGQgaW4gbm9kZToKLSAgICAgICAgICAgIGlmIGNoaWxkcmVuID09IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5pbnNlcnQoMCwgJygnKQotICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbiArIDEKLSAgICAgICAgICAgIHNlbGYubWF0Y2hfcihjaGlsZCkKLQotICAgICAgICBpZiBjaGlsZHJlbiA+IDA6Ci0gICAgICAgICAgICBzZWxmLmlucHV0Lmluc2VydCgwLCAnKScpCi0KLSAgICBkZWYgbWF0Y2goc2VsZiwgYXN0PU5vbmUpOgotICAgICAgICBpZiBhc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGFzdCA9IHNlbGYuYXN0Ci0gICAgICAgIHNlbGYuaW5wdXQgPSBbXQotCi0gICAgICAgIHNlbGYubWF0Y2hfcihhc3QpCi0gICAgICAgIHNlbGYucGFyc2Uoc2VsZi5pbnB1dCkKLQotICAgIGRlZiByZXNvbHZlKHNlbGYsIGxpc3QpOgotICAgICAgICAjCi0gICAgICAgICMgIFJlc29sdmUgYW1iaWd1aXR5IGluIGZhdm9yIG9mIHRoZSBsb25nZXN0IFJIUy4KLSAgICAgICAgIwotICAgICAgICByZXR1cm4gbGlzdFstMV0KLQotZGVmIF9kdW1wKHRva2Vucywgc2V0cywgc3RhdGVzKToKLSAgICBmb3IgaSBpbiByYW5nZShsZW4oc2V0cykpOgotICAgICAgICBvdXRwdXQoJ3NldCAlZCcgJSBpKQotICAgICAgICBmb3IgaXRlbSBpbiBzZXRzW2ldOgotICAgICAgICAgICAgb3V0cHV0KCdcdCcsIGl0ZW0pCi0gICAgICAgICAgICBmb3IgKGxocywgcmhzKSwgcG9zIGluIHN0YXRlc1tpdGVtWzBdXS5pdGVtczoKLSAgICAgICAgICAgICAgICBvdXRwdXQoJ1x0XHQnLCBsaHMsICc6Oj0nLCBlbmQ9JycpCi0gICAgICAgICAgICAgICAgb3V0cHV0KCcgJy5qb2luKHJoc1s6cG9zXSksIGVuZD0nJykKLSAgICAgICAgICAgICAgICBvdXRwdXQoJy4nLCBlbmQ9JycpCi0gICAgICAgICAgICAgICAgb3V0cHV0KCcgJy5qb2luKHJoc1twb3M6XSkpCi0gICAgICAgIGlmIGkgPCBsZW4odG9rZW5zKToKLSAgICAgICAgICAgIG91dHB1dCgpCi0gICAgICAgICAgICBvdXRwdXQoJ3Rva2VuICVzJyAlIHN0cih0b2tlbnNbaV0pKQotICAgICAgICAgICAgb3V0cHV0KCkKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuYyBiL1BhcnNlci90b2tlbml6ZXIuYwppbmRleCAxNTQwZDI2Li4xODRmZmU3IDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmMKKysrIGIvUGFyc2VyL3Rva2VuaXplci5jCkBAIC05OCwxMCArOTgsMTMgQEAKICAgICAiRE9VQkxFU0xBU0giLAogICAgICJET1VCTEVTTEFTSEVRVUFMIiwKICAgICAiQVQiLAorICAgICJBVEVRVUFMIiwKICAgICAiUkFSUk9XIiwKICAgICAiRUxMSVBTSVMiLAogICAgIC8qIFRoaXMgdGFibGUgbXVzdCBtYXRjaCB0aGUgI2RlZmluZXMgaW4gdG9rZW4uaCEgKi8KICAgICAiT1AiLAorICAgICJBV0FJVCIsCisgICAgIkFTWU5DIiwKICAgICAiPEVSUk9SVE9LRU4+IiwKICAgICAiPE5fVE9LRU5TPiIKIH07CkBAIC0xMjMsNiArMTI2LDcgQEAKICAgICB0b2stPnRhYnNpemUgPSBUQUJTSVpFOwogICAgIHRvay0+aW5kZW50ID0gMDsKICAgICB0b2stPmluZHN0YWNrWzBdID0gMDsKKwogICAgIHRvay0+YXRib2wgPSAxOwogICAgIHRvay0+cGVuZGluID0gMDsKICAgICB0b2stPnByb21wdCA9IHRvay0+bmV4dHByb21wdCA9IE5VTEw7CkBAIC0xNDMsNiArMTQ3LDExIEBACiAgICAgdG9rLT5kZWNvZGluZ19yZWFkbGluZSA9IE5VTEw7CiAgICAgdG9rLT5kZWNvZGluZ19idWZmZXIgPSBOVUxMOwogI2VuZGlmCisKKyAgICB0b2stPmFzeW5jX2RlZiA9IDA7CisgICAgdG9rLT5hc3luY19kZWZfaW5kZW50ID0gMDsKKyAgICB0b2stPmFzeW5jX2RlZl9ubCA9IDA7CisKICAgICByZXR1cm4gdG9rOwogfQogCkBAIC0yNjYsNiArMjc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAqc3BlYyA9IHI7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01MTUsOSArNTI1LDggQEAKICAgICBpZiAoc3RyZWFtID09IE5VTEwpCiAgICAgICAgIGdvdG8gY2xlYW51cDsKIAotICAgIFB5X1hERUNSRUYodG9rLT5kZWNvZGluZ19yZWFkbGluZSk7CiAgICAgcmVhZGxpbmUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHN0cmVhbSwgJlB5SWRfcmVhZGxpbmUpOwotICAgIHRvay0+ZGVjb2RpbmdfcmVhZGxpbmUgPSByZWFkbGluZTsKKyAgICBQeV9YU0VUUkVGKHRvay0+ZGVjb2RpbmdfcmVhZGxpbmUsIHJlYWRsaW5lKTsKICAgICBpZiAocG9zID4gMCkgewogICAgICAgICBpZiAoUHlPYmplY3RfQ2FsbE9iamVjdChyZWFkbGluZSwgTlVMTCkgPT0gTlVMTCkgewogICAgICAgICAgICAgcmVhZGxpbmUgPSBOVUxMOwpAQCAtMTEyOSw3ICsxMTM4LDcgQEAKICAgICBjYXNlICd9JzogICAgICAgICAgIHJldHVybiBSQlJBQ0U7CiAgICAgY2FzZSAnXic6ICAgICAgICAgICByZXR1cm4gQ0lSQ1VNRkxFWDsKICAgICBjYXNlICd+JzogICAgICAgICAgIHJldHVybiBUSUxERTsKLSAgICBjYXNlICdAJzogICAgICAgcmV0dXJuIEFUOworICAgIGNhc2UgJ0AnOiAgICAgICAgICAgcmV0dXJuIEFUOwogICAgIGRlZmF1bHQ6ICAgICAgICAgICAgcmV0dXJuIE9QOwogICAgIH0KIH0KQEAgLTEyMDUsNiArMTIxNCwxMSBAQAogICAgICAgICBjYXNlICc9JzogICAgICAgICAgICAgICByZXR1cm4gQ0lSQ1VNRkxFWEVRVUFMOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ0AnOgorICAgICAgICBzd2l0Y2ggKGMyKSB7CisgICAgICAgIGNhc2UgJz0nOiAgICAgICAgICAgICAgIHJldHVybiBBVEVRVUFMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gT1A7CiB9CkBAIC0xNDIyLDYgKzE0MzYsMjEgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICh0b2stPmFzeW5jX2RlZgorICAgICAgICAmJiAhYmxhbmtsaW5lCisgICAgICAgICYmIHRvay0+bGV2ZWwgPT0gMAorICAgICAgICAvKiBUaGVyZSB3YXMgYSBORVdMSU5FIGFmdGVyIEFTWU5DIERFRiwKKyAgICAgICAgICAgc28gd2UncmUgcGFzdCB0aGUgc2lnbmF0dXJlLiAqLworICAgICAgICAmJiB0b2stPmFzeW5jX2RlZl9ubAorICAgICAgICAvKiBDdXJyZW50IGluZGVudGF0aW9uIGxldmVsIGlzIGxlc3MgdGhhbiB3aGVyZQorICAgICAgICAgICB0aGUgYXN5bmMgZnVuY3Rpb24gd2FzIGRlZmluZWQgKi8KKyAgICAgICAgJiYgdG9rLT5hc3luY19kZWZfaW5kZW50ID49IHRvay0+aW5kZW50KQorICAgIHsKKyAgICAgICAgdG9rLT5hc3luY19kZWYgPSAwOworICAgICAgICB0b2stPmFzeW5jX2RlZl9pbmRlbnQgPSAwOworICAgICAgICB0b2stPmFzeW5jX2RlZl9ubCA9IDA7CisgICAgfQorCiAgYWdhaW46CiAgICAgdG9rLT5zdGFydCA9IE5VTEw7CiAgICAgLyogU2tpcCBzcGFjZXMgKi8KQEAgLTE0NzMsNiArMTUwMiw0MiBAQAogICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LRU47CiAgICAgICAgICpwX3N0YXJ0ID0gdG9rLT5zdGFydDsKICAgICAgICAgKnBfZW5kID0gdG9rLT5jdXI7CisKKyAgICAgICAgLyogYXN5bmMvYXdhaXQgcGFyc2luZyBibG9jay4gKi8KKyAgICAgICAgaWYgKHRvay0+Y3VyIC0gdG9rLT5zdGFydCA9PSA1KSB7CisgICAgICAgICAgICAvKiBDdXJyZW50IHRva2VuIGxlbmd0aCBpcyA1LiAqLworICAgICAgICAgICAgaWYgKHRvay0+YXN5bmNfZGVmKSB7CisgICAgICAgICAgICAgICAgLyogV2UncmUgaW5zaWRlIGFuICdhc3luYyBkZWYnIGZ1bmN0aW9uLiAqLworICAgICAgICAgICAgICAgIGlmIChtZW1jbXAodG9rLT5zdGFydCwgImFzeW5jIiwgNSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFTWU5DOworICAgICAgICAgICAgICAgIGlmIChtZW1jbXAodG9rLT5zdGFydCwgImF3YWl0IiwgNSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFXQUlUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobWVtY21wKHRvay0+c3RhcnQsICJhc3luYyIsIDUpID09IDApIHsKKyAgICAgICAgICAgICAgICAvKiBUaGUgY3VycmVudCB0b2tlbiBpcyAnYXN5bmMnLgorICAgICAgICAgICAgICAgICAgIExvb2sgYWhlYWQgb25lIHRva2VuLiovCisKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdG9rX3N0YXRlIGFoZWFkX3RvazsKKyAgICAgICAgICAgICAgICBjaGFyICphaGVhZF90b2tfc3RhcnQgPSBOVUxMLCAqYWhlYWRfdG9rX2VuZCA9IE5VTEw7CisgICAgICAgICAgICAgICAgaW50IGFoZWFkX3Rva19raW5kOworCisgICAgICAgICAgICAgICAgbWVtY3B5KCZhaGVhZF90b2ssIHRvaywgc2l6ZW9mKGFoZWFkX3RvaykpOworICAgICAgICAgICAgICAgIGFoZWFkX3Rva19raW5kID0gdG9rX2dldCgmYWhlYWRfdG9rLCAmYWhlYWRfdG9rX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWhlYWRfdG9rX2VuZCk7CisKKyAgICAgICAgICAgICAgICBpZiAoYWhlYWRfdG9rX2tpbmQgPT0gTkFNRQorICAgICAgICAgICAgICAgICAgICAmJiBhaGVhZF90b2suY3VyIC0gYWhlYWRfdG9rLnN0YXJ0ID09IDMKKyAgICAgICAgICAgICAgICAgICAgJiYgbWVtY21wKGFoZWFkX3Rvay5zdGFydCwgImRlZiIsIDMpID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBUaGUgbmV4dCB0b2tlbiBpcyBnb2luZyB0byBiZSAnZGVmJywgc28gaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ2FzeW5jJyBOQU1FIHRva2VuLCB3ZSByZXR1cm4gQVNZTkMuICovCisgICAgICAgICAgICAgICAgICAgIHRvay0+YXN5bmNfZGVmX2luZGVudCA9IHRvay0+aW5kZW50OworICAgICAgICAgICAgICAgICAgICB0b2stPmFzeW5jX2RlZiA9IDE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBU1lOQzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gTkFNRTsKICAgICB9CiAKQEAgLTE0ODQsNiArMTU0OSwxMSBAQAogICAgICAgICAqcF9zdGFydCA9IHRvay0+c3RhcnQ7CiAgICAgICAgICpwX2VuZCA9IHRvay0+Y3VyIC0gMTsgLyogTGVhdmUgJ1xuJyBvdXQgb2YgdGhlIHN0cmluZyAqLwogICAgICAgICB0b2stPmNvbnRfbGluZSA9IDA7CisgICAgICAgIGlmICh0b2stPmFzeW5jX2RlZikgeworICAgICAgICAgICAgLyogV2UncmUgc29tZXdoZXJlIGluc2lkZSBhbiAnYXN5bmMgZGVmJyBmdW5jdGlvbiwgYW5kCisgICAgICAgICAgICAgICB3ZSd2ZSBlbmNvdW50ZXJlZCBhIE5FV0xJTkUgYWZ0ZXIgaXRzIHNpZ25hdHVyZS4gKi8KKyAgICAgICAgICAgIHRvay0+YXN5bmNfZGVmX25sID0gMTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gTkVXTElORTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuaCBiL1BhcnNlci90b2tlbml6ZXIuaAppbmRleCAxY2U2ZWViLi5hZjA1M2UyIDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmgKKysrIGIvUGFyc2VyL3Rva2VuaXplci5oCkBAIC02NSw2ICs2NSwxMyBAQAogICAgIGNvbnN0IGNoYXIqIGVuYzsgICAgICAgIC8qIEVuY29kaW5nIGZvciB0aGUgY3VycmVudCBzdHIuICovCiAgICAgY29uc3QgY2hhciogc3RyOwogICAgIGNvbnN0IGNoYXIqIGlucHV0OyAvKiBUb2tlbml6ZXIncyBuZXdsaW5lIHRyYW5zbGF0ZWQgY29weSBvZiB0aGUgc3RyaW5nLiAqLworCisgICAgLyogYXN5bmMvYXdhaXQgcmVsYXRlZCBmaWVsZHM7IGNhbiBiZSByZW1vdmVkIGluIDMuNyB3aGVuIGFzeW5jIGFuZCBhd2FpdAorICAgICAgIGJlY29tZSBub3JtYWwga2V5d29yZHMuICovCisgICAgaW50IGFzeW5jX2RlZjsgICAgICAgIC8qID0xIGlmIHRva2VucyBhcmUgaW5zaWRlIGFuICdhc3luYyBkZWYnIGJvZHkuICovCisgICAgaW50IGFzeW5jX2RlZl9pbmRlbnQ7IC8qIEluZGVudGF0aW9uIGxldmVsIG9mIHRoZSBvdXRlcm1vc3QgJ2FzeW5jIGRlZicuICovCisgICAgaW50IGFzeW5jX2RlZl9ubDsgICAgIC8qID0xIGlmIHRoZSBvdXRlcm1vc3QgJ2FzeW5jIGRlZicgaGFkIGF0IGxlYXN0IG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVdMSU5FIHRva2VuIGFmdGVyIGl0LiAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvUHJvZ3JhbXMvUkVBRE1FIGIvUHJvZ3JhbXMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNDU3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Qcm9ncmFtcy9SRUFETUUKQEAgLTAsMCArMSBAQAorU291cmNlIGZpbGVzIGZvciBiaW5hcnkgZXhlY3V0YWJsZXMgKGFzIG9wcG9zZWQgdG8gc2hhcmVkIG1vZHVsZXMpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMgYi9Qcm9ncmFtcy9fZnJlZXplX2ltcG9ydGxpYi5jCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwpyZW5hbWUgdG8gUHJvZ3JhbXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwppbmRleCA1N2IxYWMwLi5hZWNiMTIzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKKysrIGIvUHJvZ3JhbXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwpAQCAtMTIsMTIgKzEyLDExIEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKIAotCiAvKiBUbyBhdm9pZCBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gZnJvemVuLm8sIHdlIGNyZWF0ZSBvdXIgb3duIHN0cnVjdHVyZQogICAgb2YgZnJvemVuIG1vZHVsZXMgaW5zdGVhZCwgbGVmdCBkZWxpYmVyYXRlbHkgYmxhbmsgc28gYXMgdG8gYXZvaWQKICAgIHVuaW50ZW50aW9uYWwgaW1wb3J0IG9mIGEgc3RhbGUgdmVyc2lvbiBvZiBfZnJvemVuX2ltcG9ydGxpYi4gKi8KIAotY29uc3Qgc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKICAgICB7MCwgMCwgMH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI4LDE4ICsyNywxOSBAQAogY29uc3Qgc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CiAjZW5kaWYKIAotY29uc3QgY2hhciBoZWFkZXJbXSA9ICIvKiBBdXRvLWdlbmVyYXRlZCBieSBNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMgKi8iOworY29uc3QgY2hhciBoZWFkZXJbXSA9ICIvKiBBdXRvLWdlbmVyYXRlZCBieSBQcm9ncmFtcy9fZnJlZXplX2ltcG9ydGxpYi5jICovIjsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0gICAgY2hhciAqaW5wYXRoLCAqb3V0cGF0aDsKKyAgICBjaGFyICppbnBhdGgsICpvdXRwYXRoLCAqY29kZV9uYW1lOwogICAgIEZJTEUgKmluZmlsZSA9IE5VTEwsICpvdXRmaWxlID0gTlVMTDsKLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0IHN0YXR1czsKICAgICBzaXplX3QgdGV4dF9zaXplLCBkYXRhX3NpemUsIG47CiAgICAgY2hhciAqdGV4dCA9IE5VTEw7CiAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKICAgICBQeU9iamVjdCAqY29kZSA9IE5VTEwsICptYXJzaGFsbGVkID0gTlVMTDsKKyAgICBpbnQgaXNfYm9vdHN0cmFwID0gMTsKIAogICAgIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXMgPSBfUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKIApAQCAtNTQsMTEgKzU0LDExIEBACiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2Fubm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZ1xuIiwgaW5wYXRoKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgaWYgKGZzdGF0KGZpbGVubyhpbmZpbGUpLCAmc3QpKSB7CisgICAgaWYgKF9QeV9mc3RhdF9ub3JhaXNlKGZpbGVubyhpbmZpbGUpLCAmc3RhdHVzKSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBmc3RhdCAnJXMnXG4iLCBpbnBhdGgpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICB0ZXh0X3NpemUgPSBzdC5zdF9zaXplOworICAgIHRleHRfc2l6ZSA9IHN0YXR1cy5zdF9zaXplOwogICAgIHRleHQgPSAoY2hhciAqKSBtYWxsb2ModGV4dF9zaXplICsgMSk7CiAgICAgaWYgKHRleHQgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBhbGxvY2F0ZSAlbGQgYnl0ZXNcbiIsIChsb25nKSB0ZXh0X3NpemUpOwpAQCAtODIsOCArODIsMTQgQEAKICAgICAvKiBEb24ndCBpbnN0YWxsIGltcG9ydGxpYiwgc2luY2UgaXQgY291bGQgZXhlY3V0ZSBvdXRkYXRlZCBieXRlY29kZS4gKi8KICAgICBfUHlfSW5pdGlhbGl6ZUV4X1ByaXZhdGUoMSwgMCk7CiAKLSAgICBjb2RlID0gUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3ModGV4dCwgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfZmlsZV9pbnB1dCwgTlVMTCwgMCk7CisgICAgaWYgKHN0cnN0cihpbnBhdGgsICJfZXh0ZXJuYWwiKSAhPSBOVUxMKSB7CisgICAgICAgIGlzX2Jvb3RzdHJhcCA9IDA7CisgICAgfQorCisgICAgY29kZV9uYW1lID0gaXNfYm9vdHN0cmFwID8KKyAgICAgICAgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiA6CisgICAgICAgICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwX2V4dGVybmFsPiI7CisgICAgY29kZSA9IFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKHRleHQsIGNvZGVfbmFtZSwgUHlfZmlsZV9pbnB1dCwgTlVMTCwgMCk7CiAgICAgaWYgKGNvZGUgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBmcmVlKHRleHQpOwpAQCAtMTA2LDcgKzExMiwxMSBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBmcHJpbnRmKG91dGZpbGUsICIlc1xuIiwgaGVhZGVyKTsKLSAgICBmcHJpbnRmKG91dGZpbGUsICJjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHtcbiIpOworICAgIGlmIChpc19ib290c3RyYXApCisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgImNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0ge1xuIik7CisgICAgZWxzZQorICAgICAgICBmcHJpbnRmKG91dGZpbGUsCisgICAgICAgICAgICAgICAgImNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYl9leHRlcm5hbFtdID0ge1xuIik7CiAgICAgZm9yIChuID0gMDsgbiA8IGRhdGFfc2l6ZTsgbiArPSAxNikgewogICAgICAgICBzaXplX3QgaSwgZW5kID0gUHlfTUlOKG4gKyAxNiwgZGF0YV9zaXplKTsKICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiICAgICIpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGVtYmVkLmMgYi9Qcm9ncmFtcy9fdGVzdGVtYmVkLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gTW9kdWxlcy9fdGVzdGVtYmVkLmMKcmVuYW1lIHRvIFByb2dyYW1zL190ZXN0ZW1iZWQuYwppbmRleCBhMjFkMjUxLi5hYjZhOGM3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0ZW1iZWQuYworKysgYi9Qcm9ncmFtcy9fdGVzdGVtYmVkLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFRlc3QgcmVwZWF0ZWQgaW5pdGFsaXNhdGlvbiBhbmQgc3ViaW50ZXJwcmV0ZXJzCisgKiBUZXN0IHJlcGVhdGVkIGluaXRpYWxpc2F0aW9uIGFuZCBzdWJpbnRlcnByZXRlcnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQgcHJpbnRfc3ViaW50ZXJwKHZvaWQpCkBAIC0xMDksMTEgKzEwOSwxMSBAQAogICAgIHByaW50ZigiLS0tIFVzZSBkZWZhdWx0cyAtLS1cbiIpOwogICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoTlVMTCwgTlVMTCk7CiAgICAgcHJpbnRmKCItLS0gU2V0IGVycm9ycyBvbmx5IC0tLVxuIik7Ci0gICAgY2hlY2tfc3RkaW9fZGV0YWlscyhOVUxMLCAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscyhOVUxMLCAiaWdub3JlIik7CiAgICAgcHJpbnRmKCItLS0gU2V0IGVuY29kaW5nIG9ubHkgLS0tXG4iKTsKICAgICBjaGVja19zdGRpb19kZXRhaWxzKCJsYXRpbi0xIiwgTlVMTCk7CiAgICAgcHJpbnRmKCItLS0gU2V0IGVuY29kaW5nIGFuZCBlcnJvcnMgLS0tXG4iKTsKLSAgICBjaGVja19zdGRpb19kZXRhaWxzKCJsYXRpbi0xIiwgInN1cnJvZ2F0ZWVzY2FwZSIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoImxhdGluLTEiLCAicmVwbGFjZSIpOwogCiAgICAgLyogQ2hlY2sgY2FsbGluZyBhZnRlciBpbml0aWFsaXphdGlvbiBmYWlscyAqLwogICAgIFB5X0luaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHl0aG9uLmMgYi9Qcm9ncmFtcy9weXRob24uYwpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBNb2R1bGVzL3B5dGhvbi5jCnJlbmFtZSB0byBQcm9ncmFtcy9weXRob24uYwppbmRleCA5ODExYzAxLi4zN2IxMGI4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3B5dGhvbi5jCisrKyBiL1Byb2dyYW1zL3B5dGhvbi5jCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGxvY2FsZS5oPgogCiAjaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxmbG9hdGluZ3BvaW50Lmg+CisjaW5jbHVkZSA8ZmVudi5oPgogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCkBAIC0yMyw5ICsyMyw2IEBACiAgICAgd2NoYXJfdCAqKmFyZ3ZfY29weTI7CiAgICAgaW50IGksIHJlczsKICAgICBjaGFyICpvbGRsb2M7Ci0jaWZkZWYgX19GcmVlQlNEX18KLSAgICBmcF9leGNlcHRfdCBtOwotI2VuZGlmCiAKICAgICBhcmd2X2NvcHkgPSAod2NoYXJfdCAqKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSAqIChhcmdjKzEpKTsKICAgICBhcmd2X2NvcHkyID0gKHdjaGFyX3QgKiopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiAoYXJnYysxKSk7CkBAIC00MCw4ICszNyw3IEBACiAgICAgICogZXhjZXB0aW9ucyBieSBkZWZhdWx0LiAgSGVyZSB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgICovCiAjaWZkZWYgX19GcmVlQlNEX18KLSAgICBtID0gZnBnZXRtYXNrKCk7Ci0gICAgZnBzZXRtYXNrKG0gJiB+RlBfWF9PRkwpOworICAgIGZlZGlzYWJsZWV4Y2VwdChGRV9PVkVSRkxPVyk7CiAjZW5kaWYKIAogICAgIG9sZGxvYyA9IF9QeU1lbV9SYXdTdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwpAQCAtNTIsNyArNDgsNyBAQAogCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgYXJndl9jb3B5W2ldID0gX1B5X2NoYXIyd2NoYXIoYXJndltpXSwgTlVMTCk7CisgICAgICAgIGFyZ3ZfY29weVtpXSA9IFB5X0RlY29kZUxvY2FsZShhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAiCmRpZmYgLS1naXQgYS9QeXRob24vUHl0aG9uLWFzdC5jIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwppbmRleCA0NGZkYWZjLi5lZGZjYmFkIDEwMDY0NAotLS0gYS9QeXRob24vUHl0aG9uLWFzdC5jCisrKyBiL1B5dGhvbi9QeXRob24tYXN0LmMKQEAgLTQ1LDE3ICs0NSwyMSBAQAogICAgICJkZWNvcmF0b3JfbGlzdCIsCiAgICAgInJldHVybnMiLAogfTsKK3N0YXRpYyBQeVR5cGVPYmplY3QgKkFzeW5jRnVuY3Rpb25EZWZfdHlwZTsKK3N0YXRpYyBjaGFyICpBc3luY0Z1bmN0aW9uRGVmX2ZpZWxkc1tdPXsKKyAgICAibmFtZSIsCisgICAgImFyZ3MiLAorICAgICJib2R5IiwKKyAgICAiZGVjb3JhdG9yX2xpc3QiLAorICAgICJyZXR1cm5zIiwKK307CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpDbGFzc0RlZl90eXBlOwogX1B5X0lERU5USUZJRVIoYmFzZXMpOwogX1B5X0lERU5USUZJRVIoa2V5d29yZHMpOwotX1B5X0lERU5USUZJRVIoc3RhcmFyZ3MpOwotX1B5X0lERU5USUZJRVIoa3dhcmdzKTsKIHN0YXRpYyBjaGFyICpDbGFzc0RlZl9maWVsZHNbXT17CiAgICAgIm5hbWUiLAogICAgICJiYXNlcyIsCiAgICAgImtleXdvcmRzIiwKLSAgICAic3RhcmFyZ3MiLAotICAgICJrd2FyZ3MiLAogICAgICJib2R5IiwKICAgICAiZGVjb3JhdG9yX2xpc3QiLAogfTsKQEAgLTkxLDYgKzk1LDEzIEBACiAgICAgImJvZHkiLAogICAgICJvcmVsc2UiLAogfTsKK3N0YXRpYyBQeVR5cGVPYmplY3QgKkFzeW5jRm9yX3R5cGU7CitzdGF0aWMgY2hhciAqQXN5bmNGb3JfZmllbGRzW109eworICAgICJ0YXJnZXQiLAorICAgICJpdGVyIiwKKyAgICAiYm9keSIsCisgICAgIm9yZWxzZSIsCit9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqV2hpbGVfdHlwZTsKIF9QeV9JREVOVElGSUVSKHRlc3QpOwogc3RhdGljIGNoYXIgKldoaWxlX2ZpZWxkc1tdPXsKQEAgLTExMCw2ICsxMjEsMTEgQEAKICAgICAiaXRlbXMiLAogICAgICJib2R5IiwKIH07CitzdGF0aWMgUHlUeXBlT2JqZWN0ICpBc3luY1dpdGhfdHlwZTsKK3N0YXRpYyBjaGFyICpBc3luY1dpdGhfZmllbGRzW109eworICAgICJpdGVtcyIsCisgICAgImJvZHkiLAorfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKlJhaXNlX3R5cGU7CiBfUHlfSURFTlRJRklFUihleGMpOwogX1B5X0lERU5USUZJRVIoY2F1c2UpOwpAQCAtMjMyLDYgKzI0OCwxMCBAQAogICAgICJlbHQiLAogICAgICJnZW5lcmF0b3JzIiwKIH07CitzdGF0aWMgUHlUeXBlT2JqZWN0ICpBd2FpdF90eXBlOworc3RhdGljIGNoYXIgKkF3YWl0X2ZpZWxkc1tdPXsKKyAgICAidmFsdWUiLAorfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKllpZWxkX3R5cGU7CiBzdGF0aWMgY2hhciAqWWllbGRfZmllbGRzW109ewogICAgICJ2YWx1ZSIsCkBAIC0yNTQsOCArMjc0LDYgQEAKICAgICAiZnVuYyIsCiAgICAgImFyZ3MiLAogICAgICJrZXl3b3JkcyIsCi0gICAgInN0YXJhcmdzIiwKLSAgICAia3dhcmdzIiwKIH07CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpOdW1fdHlwZTsKIF9QeV9JREVOVElGSUVSKG4pOwpAQCAtMzQ5LDEzICszNjcsMTQgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgKk9yX3R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpvcGVyYXRvcl90eXBlOwogc3RhdGljIFB5T2JqZWN0ICpBZGRfc2luZ2xldG9uLCAqU3ViX3NpbmdsZXRvbiwgKk11bHRfc2luZ2xldG9uLAotKkRpdl9zaW5nbGV0b24sICpNb2Rfc2luZ2xldG9uLCAqUG93X3NpbmdsZXRvbiwgKkxTaGlmdF9zaW5nbGV0b24sCi0qUlNoaWZ0X3NpbmdsZXRvbiwgKkJpdE9yX3NpbmdsZXRvbiwgKkJpdFhvcl9zaW5nbGV0b24sICpCaXRBbmRfc2luZ2xldG9uLAotKkZsb29yRGl2X3NpbmdsZXRvbjsKKypNYXRNdWx0X3NpbmdsZXRvbiwgKkRpdl9zaW5nbGV0b24sICpNb2Rfc2luZ2xldG9uLCAqUG93X3NpbmdsZXRvbiwKKypMU2hpZnRfc2luZ2xldG9uLCAqUlNoaWZ0X3NpbmdsZXRvbiwgKkJpdE9yX3NpbmdsZXRvbiwgKkJpdFhvcl9zaW5nbGV0b24sCisqQml0QW5kX3NpbmdsZXRvbiwgKkZsb29yRGl2X3NpbmdsZXRvbjsKIHN0YXRpYyBQeU9iamVjdCogYXN0Mm9ial9vcGVyYXRvcihvcGVyYXRvcl90eSk7CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpBZGRfdHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKlN1Yl90eXBlOwogc3RhdGljIFB5VHlwZU9iamVjdCAqTXVsdF90eXBlOworc3RhdGljIFB5VHlwZU9iamVjdCAqTWF0TXVsdF90eXBlOwogc3RhdGljIFB5VHlwZU9iamVjdCAqRGl2X3R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpNb2RfdHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKlBvd190eXBlOwpAQCAtODExLDcgKzgzMCwxMCBAQAogICAgIEZ1bmN0aW9uRGVmX3R5cGUgPSBtYWtlX3R5cGUoIkZ1bmN0aW9uRGVmIiwgc3RtdF90eXBlLCBGdW5jdGlvbkRlZl9maWVsZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1KTsKICAgICBpZiAoIUZ1bmN0aW9uRGVmX3R5cGUpIHJldHVybiAwOwotICAgIENsYXNzRGVmX3R5cGUgPSBtYWtlX3R5cGUoIkNsYXNzRGVmIiwgc3RtdF90eXBlLCBDbGFzc0RlZl9maWVsZHMsIDcpOworICAgIEFzeW5jRnVuY3Rpb25EZWZfdHlwZSA9IG1ha2VfdHlwZSgiQXN5bmNGdW5jdGlvbkRlZiIsIHN0bXRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN5bmNGdW5jdGlvbkRlZl9maWVsZHMsIDUpOworICAgIGlmICghQXN5bmNGdW5jdGlvbkRlZl90eXBlKSByZXR1cm4gMDsKKyAgICBDbGFzc0RlZl90eXBlID0gbWFrZV90eXBlKCJDbGFzc0RlZiIsIHN0bXRfdHlwZSwgQ2xhc3NEZWZfZmllbGRzLCA1KTsKICAgICBpZiAoIUNsYXNzRGVmX3R5cGUpIHJldHVybiAwOwogICAgIFJldHVybl90eXBlID0gbWFrZV90eXBlKCJSZXR1cm4iLCBzdG10X3R5cGUsIFJldHVybl9maWVsZHMsIDEpOwogICAgIGlmICghUmV0dXJuX3R5cGUpIHJldHVybiAwOwpAQCAtODIzLDEyICs4NDUsMTYgQEAKICAgICBpZiAoIUF1Z0Fzc2lnbl90eXBlKSByZXR1cm4gMDsKICAgICBGb3JfdHlwZSA9IG1ha2VfdHlwZSgiRm9yIiwgc3RtdF90eXBlLCBGb3JfZmllbGRzLCA0KTsKICAgICBpZiAoIUZvcl90eXBlKSByZXR1cm4gMDsKKyAgICBBc3luY0Zvcl90eXBlID0gbWFrZV90eXBlKCJBc3luY0ZvciIsIHN0bXRfdHlwZSwgQXN5bmNGb3JfZmllbGRzLCA0KTsKKyAgICBpZiAoIUFzeW5jRm9yX3R5cGUpIHJldHVybiAwOwogICAgIFdoaWxlX3R5cGUgPSBtYWtlX3R5cGUoIldoaWxlIiwgc3RtdF90eXBlLCBXaGlsZV9maWVsZHMsIDMpOwogICAgIGlmICghV2hpbGVfdHlwZSkgcmV0dXJuIDA7CiAgICAgSWZfdHlwZSA9IG1ha2VfdHlwZSgiSWYiLCBzdG10X3R5cGUsIElmX2ZpZWxkcywgMyk7CiAgICAgaWYgKCFJZl90eXBlKSByZXR1cm4gMDsKICAgICBXaXRoX3R5cGUgPSBtYWtlX3R5cGUoIldpdGgiLCBzdG10X3R5cGUsIFdpdGhfZmllbGRzLCAyKTsKICAgICBpZiAoIVdpdGhfdHlwZSkgcmV0dXJuIDA7CisgICAgQXN5bmNXaXRoX3R5cGUgPSBtYWtlX3R5cGUoIkFzeW5jV2l0aCIsIHN0bXRfdHlwZSwgQXN5bmNXaXRoX2ZpZWxkcywgMik7CisgICAgaWYgKCFBc3luY1dpdGhfdHlwZSkgcmV0dXJuIDA7CiAgICAgUmFpc2VfdHlwZSA9IG1ha2VfdHlwZSgiUmFpc2UiLCBzdG10X3R5cGUsIFJhaXNlX2ZpZWxkcywgMik7CiAgICAgaWYgKCFSYWlzZV90eXBlKSByZXR1cm4gMDsKICAgICBUcnlfdHlwZSA9IG1ha2VfdHlwZSgiVHJ5Iiwgc3RtdF90eXBlLCBUcnlfZmllbGRzLCA0KTsKQEAgLTg3NywxMyArOTAzLDE1IEBACiAgICAgR2VuZXJhdG9yRXhwX3R5cGUgPSBtYWtlX3R5cGUoIkdlbmVyYXRvckV4cCIsIGV4cHJfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JFeHBfZmllbGRzLCAyKTsKICAgICBpZiAoIUdlbmVyYXRvckV4cF90eXBlKSByZXR1cm4gMDsKKyAgICBBd2FpdF90eXBlID0gbWFrZV90eXBlKCJBd2FpdCIsIGV4cHJfdHlwZSwgQXdhaXRfZmllbGRzLCAxKTsKKyAgICBpZiAoIUF3YWl0X3R5cGUpIHJldHVybiAwOwogICAgIFlpZWxkX3R5cGUgPSBtYWtlX3R5cGUoIllpZWxkIiwgZXhwcl90eXBlLCBZaWVsZF9maWVsZHMsIDEpOwogICAgIGlmICghWWllbGRfdHlwZSkgcmV0dXJuIDA7CiAgICAgWWllbGRGcm9tX3R5cGUgPSBtYWtlX3R5cGUoIllpZWxkRnJvbSIsIGV4cHJfdHlwZSwgWWllbGRGcm9tX2ZpZWxkcywgMSk7CiAgICAgaWYgKCFZaWVsZEZyb21fdHlwZSkgcmV0dXJuIDA7CiAgICAgQ29tcGFyZV90eXBlID0gbWFrZV90eXBlKCJDb21wYXJlIiwgZXhwcl90eXBlLCBDb21wYXJlX2ZpZWxkcywgMyk7CiAgICAgaWYgKCFDb21wYXJlX3R5cGUpIHJldHVybiAwOwotICAgIENhbGxfdHlwZSA9IG1ha2VfdHlwZSgiQ2FsbCIsIGV4cHJfdHlwZSwgQ2FsbF9maWVsZHMsIDUpOworICAgIENhbGxfdHlwZSA9IG1ha2VfdHlwZSgiQ2FsbCIsIGV4cHJfdHlwZSwgQ2FsbF9maWVsZHMsIDMpOwogICAgIGlmICghQ2FsbF90eXBlKSByZXR1cm4gMDsKICAgICBOdW1fdHlwZSA9IG1ha2VfdHlwZSgiTnVtIiwgZXhwcl90eXBlLCBOdW1fZmllbGRzLCAxKTsKICAgICBpZiAoIU51bV90eXBlKSByZXR1cm4gMDsKQEAgLTk3MCw2ICs5OTgsMTAgQEAKICAgICBpZiAoIU11bHRfdHlwZSkgcmV0dXJuIDA7CiAgICAgTXVsdF9zaW5nbGV0b24gPSBQeVR5cGVfR2VuZXJpY05ldyhNdWx0X3R5cGUsIE5VTEwsIE5VTEwpOwogICAgIGlmICghTXVsdF9zaW5nbGV0b24pIHJldHVybiAwOworICAgIE1hdE11bHRfdHlwZSA9IG1ha2VfdHlwZSgiTWF0TXVsdCIsIG9wZXJhdG9yX3R5cGUsIE5VTEwsIDApOworICAgIGlmICghTWF0TXVsdF90eXBlKSByZXR1cm4gMDsKKyAgICBNYXRNdWx0X3NpbmdsZXRvbiA9IFB5VHlwZV9HZW5lcmljTmV3KE1hdE11bHRfdHlwZSwgTlVMTCwgTlVMTCk7CisgICAgaWYgKCFNYXRNdWx0X3NpbmdsZXRvbikgcmV0dXJuIDA7CiAgICAgRGl2X3R5cGUgPSBtYWtlX3R5cGUoIkRpdiIsIG9wZXJhdG9yX3R5cGUsIE5VTEwsIDApOwogICAgIGlmICghRGl2X3R5cGUpIHJldHVybiAwOwogICAgIERpdl9zaW5nbGV0b24gPSBQeVR5cGVfR2VuZXJpY05ldyhEaXZfdHlwZSwgTlVMTCwgTlVMTCk7CkBAIC0xMjAyLDkgKzEyMzQsMzkgQEAKIH0KIAogc3RtdF90eQotQ2xhc3NEZWYoaWRlbnRpZmllciBuYW1lLCBhc2RsX3NlcSAqIGJhc2VzLCBhc2RsX3NlcSAqIGtleXdvcmRzLCBleHByX3R5Ci0gICAgICAgICBzdGFyYXJncywgZXhwcl90eSBrd2FyZ3MsIGFzZGxfc2VxICogYm9keSwgYXNkbF9zZXEgKiBkZWNvcmF0b3JfbGlzdCwKLSAgICAgICAgIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKK0FzeW5jRnVuY3Rpb25EZWYoaWRlbnRpZmllciBuYW1lLCBhcmd1bWVudHNfdHkgYXJncywgYXNkbF9zZXEgKiBib2R5LCBhc2RsX3NlcQorICAgICAgICAgICAgICAgICAqIGRlY29yYXRvcl9saXN0LCBleHByX3R5IHJldHVybnMsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LAorICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBzdG10X3R5IHA7CisgICAgaWYgKCFuYW1lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIG5hbWUgaXMgcmVxdWlyZWQgZm9yIEFzeW5jRnVuY3Rpb25EZWYiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghYXJncykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCBhcmdzIGlzIHJlcXVpcmVkIGZvciBBc3luY0Z1bmN0aW9uRGVmIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwID0gKHN0bXRfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcC0+a2luZCA9IEFzeW5jRnVuY3Rpb25EZWZfa2luZDsKKyAgICBwLT52LkFzeW5jRnVuY3Rpb25EZWYubmFtZSA9IG5hbWU7CisgICAgcC0+di5Bc3luY0Z1bmN0aW9uRGVmLmFyZ3MgPSBhcmdzOworICAgIHAtPnYuQXN5bmNGdW5jdGlvbkRlZi5ib2R5ID0gYm9keTsKKyAgICBwLT52LkFzeW5jRnVuY3Rpb25EZWYuZGVjb3JhdG9yX2xpc3QgPSBkZWNvcmF0b3JfbGlzdDsKKyAgICBwLT52LkFzeW5jRnVuY3Rpb25EZWYucmV0dXJucyA9IHJldHVybnM7CisgICAgcC0+bGluZW5vID0gbGluZW5vOworICAgIHAtPmNvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0OworICAgIHJldHVybiBwOworfQorCitzdG10X3R5CitDbGFzc0RlZihpZGVudGlmaWVyIG5hbWUsIGFzZGxfc2VxICogYmFzZXMsIGFzZGxfc2VxICoga2V5d29yZHMsIGFzZGxfc2VxICoKKyAgICAgICAgIGJvZHksIGFzZGxfc2VxICogZGVjb3JhdG9yX2xpc3QsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hCisgICAgICAgICAqYXJlbmEpCiB7CiAgICAgc3RtdF90eSBwOwogICAgIGlmICghbmFtZSkgewpAQCAtMTIxOSw4ICsxMjgxLDYgQEAKICAgICBwLT52LkNsYXNzRGVmLm5hbWUgPSBuYW1lOwogICAgIHAtPnYuQ2xhc3NEZWYuYmFzZXMgPSBiYXNlczsKICAgICBwLT52LkNsYXNzRGVmLmtleXdvcmRzID0ga2V5d29yZHM7Ci0gICAgcC0+di5DbGFzc0RlZi5zdGFyYXJncyA9IHN0YXJhcmdzOwotICAgIHAtPnYuQ2xhc3NEZWYua3dhcmdzID0ga3dhcmdzOwogICAgIHAtPnYuQ2xhc3NEZWYuYm9keSA9IGJvZHk7CiAgICAgcC0+di5DbGFzc0RlZi5kZWNvcmF0b3JfbGlzdCA9IGRlY29yYXRvcl9saXN0OwogICAgIHAtPmxpbmVubyA9IGxpbmVubzsKQEAgLTEzMzgsNiArMTM5OCwzNCBAQAogfQogCiBzdG10X3R5CitBc3luY0ZvcihleHByX3R5IHRhcmdldCwgZXhwcl90eSBpdGVyLCBhc2RsX3NlcSAqIGJvZHksIGFzZGxfc2VxICogb3JlbHNlLCBpbnQKKyAgICAgICAgIGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQoreworICAgIHN0bXRfdHkgcDsKKyAgICBpZiAoIXRhcmdldCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCB0YXJnZXQgaXMgcmVxdWlyZWQgZm9yIEFzeW5jRm9yIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIWl0ZXIpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgaXRlciBpcyByZXF1aXJlZCBmb3IgQXN5bmNGb3IiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHAgPSAoc3RtdF90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwLT5raW5kID0gQXN5bmNGb3Jfa2luZDsKKyAgICBwLT52LkFzeW5jRm9yLnRhcmdldCA9IHRhcmdldDsKKyAgICBwLT52LkFzeW5jRm9yLml0ZXIgPSBpdGVyOworICAgIHAtPnYuQXN5bmNGb3IuYm9keSA9IGJvZHk7CisgICAgcC0+di5Bc3luY0Zvci5vcmVsc2UgPSBvcmVsc2U7CisgICAgcC0+bGluZW5vID0gbGluZW5vOworICAgIHAtPmNvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0OworICAgIHJldHVybiBwOworfQorCitzdG10X3R5CiBXaGlsZShleHByX3R5IHRlc3QsIGFzZGxfc2VxICogYm9keSwgYXNkbF9zZXEgKiBvcmVsc2UsIGludCBsaW5lbm8sIGludAogICAgICAgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCiB7CkBAIC0xMzk4LDYgKzE0ODYsMjIgQEAKIH0KIAogc3RtdF90eQorQXN5bmNXaXRoKGFzZGxfc2VxICogaXRlbXMsIGFzZGxfc2VxICogYm9keSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsCisgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgc3RtdF90eSBwOworICAgIHAgPSAoc3RtdF90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwLT5raW5kID0gQXN5bmNXaXRoX2tpbmQ7CisgICAgcC0+di5Bc3luY1dpdGguaXRlbXMgPSBpdGVtczsKKyAgICBwLT52LkFzeW5jV2l0aC5ib2R5ID0gYm9keTsKKyAgICBwLT5saW5lbm8gPSBsaW5lbm87CisgICAgcC0+Y29sX29mZnNldCA9IGNvbF9vZmZzZXQ7CisgICAgcmV0dXJuIHA7Cit9CisKK3N0bXRfdHkKIFJhaXNlKGV4cHJfdHkgZXhjLCBleHByX3R5IGNhdXNlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgc3RtdF90eSBwOwpAQCAtMTgyNSw2ICsxOTI5LDI1IEBACiB9CiAKIGV4cHJfdHkKK0F3YWl0KGV4cHJfdHkgdmFsdWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBleHByX3R5IHA7CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgQXdhaXQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHAgPSAoZXhwcl90eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CisgICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwLT5raW5kID0gQXdhaXRfa2luZDsKKyAgICBwLT52LkF3YWl0LnZhbHVlID0gdmFsdWU7CisgICAgcC0+bGluZW5vID0gbGluZW5vOworICAgIHAtPmNvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0OworICAgIHJldHVybiBwOworfQorCitleHByX3R5CiBZaWVsZChleHByX3R5IHZhbHVlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgZXhwcl90eSBwOwpAQCAtMTg4MCw4ICsyMDAzLDggQEAKIH0KIAogZXhwcl90eQotQ2FsbChleHByX3R5IGZ1bmMsIGFzZGxfc2VxICogYXJncywgYXNkbF9zZXEgKiBrZXl3b3JkcywgZXhwcl90eSBzdGFyYXJncywKLSAgICAgZXhwcl90eSBrd2FyZ3MsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKK0NhbGwoZXhwcl90eSBmdW5jLCBhc2RsX3NlcSAqIGFyZ3MsIGFzZGxfc2VxICoga2V5d29yZHMsIGludCBsaW5lbm8sIGludAorICAgICBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBleHByX3R5IHA7CiAgICAgaWYgKCFmdW5jKSB7CkBAIC0xODk2LDggKzIwMTksNiBAQAogICAgIHAtPnYuQ2FsbC5mdW5jID0gZnVuYzsKICAgICBwLT52LkNhbGwuYXJncyA9IGFyZ3M7CiAgICAgcC0+di5DYWxsLmtleXdvcmRzID0ga2V5d29yZHM7Ci0gICAgcC0+di5DYWxsLnN0YXJhcmdzID0gc3RhcmFyZ3M7Ci0gICAgcC0+di5DYWxsLmt3YXJncyA9IGt3YXJnczsKICAgICBwLT5saW5lbm8gPSBsaW5lbm87CiAgICAgcC0+Y29sX29mZnNldCA9IGNvbF9vZmZzZXQ7CiAgICAgcmV0dXJuIHA7CkBAIC0yMjUxLDcgKzIzNzIsOCBAQAogfQogCiBhcmdfdHkKLWFyZyhpZGVudGlmaWVyIGFyZywgZXhwcl90eSBhbm5vdGF0aW9uLCBQeUFyZW5hICphcmVuYSkKK2FyZyhpZGVudGlmaWVyIGFyZywgZXhwcl90eSBhbm5vdGF0aW9uLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYQorICAgICphcmVuYSkKIHsKICAgICBhcmdfdHkgcDsKICAgICBpZiAoIWFyZykgewpAQCAtMjI2NCw2ICsyMzg2LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcC0+YXJnID0gYXJnOwogICAgIHAtPmFubm90YXRpb24gPSBhbm5vdGF0aW9uOworICAgIHAtPmxpbmVubyA9IGxpbmVubzsKKyAgICBwLT5jb2xfb2Zmc2V0ID0gY29sX29mZnNldDsKICAgICByZXR1cm4gcDsKIH0KIApAQCAtMjI3MSwxMSArMjM5NSw2IEBACiBrZXl3b3JkKGlkZW50aWZpZXIgYXJnLCBleHByX3R5IHZhbHVlLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBrZXl3b3JkX3R5IHA7Ci0gICAgaWYgKCFhcmcpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgYXJnIGlzIHJlcXVpcmVkIGZvciBrZXl3b3JkIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImZpZWxkIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBrZXl3b3JkIik7CkBAIC0yNDE5LDYgKzI1MzgsMzYgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFzeW5jRnVuY3Rpb25EZWZfa2luZDoKKyAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoQXN5bmNGdW5jdGlvbkRlZl90eXBlLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOworICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT52LkFzeW5jRnVuY3Rpb25EZWYubmFtZSk7CisgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX25hbWUsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfYXJndW1lbnRzKG8tPnYuQXN5bmNGdW5jdGlvbkRlZi5hcmdzKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfYXJncywgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPnYuQXN5bmNGdW5jdGlvbkRlZi5ib2R5LCBhc3Qyb2JqX3N0bXQpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9ib2R5LCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+di5Bc3luY0Z1bmN0aW9uRGVmLmRlY29yYXRvcl9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3Qyb2JqX2V4cHIpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9kZWNvcmF0b3JfbGlzdCwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPnYuQXN5bmNGdW5jdGlvbkRlZi5yZXR1cm5zKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfcmV0dXJucywgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2xhc3NEZWZfa2luZDoKICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoQ2xhc3NEZWZfdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKQEAgLTI0MzcsMTYgKzI1ODYsNiBAQAogICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2tleXdvcmRzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+di5DbGFzc0RlZi5zdGFyYXJncyk7Ci0gICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3N0YXJhcmdzLCB2YWx1ZSkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+di5DbGFzc0RlZi5rd2FyZ3MpOwotICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZ3MsIHZhbHVlKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT52LkNsYXNzRGVmLmJvZHksIGFzdDJvYmpfc3RtdCk7CiAgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwogICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2JvZHksIHZhbHVlKSA9PSAtMSkKQEAgLTI1MzMsNiArMjY3MiwzMCBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXN5bmNGb3Jfa2luZDoKKyAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoQXN5bmNGb3JfdHlwZSwgTlVMTCwgTlVMTCk7CisgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKKyAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+di5Bc3luY0Zvci50YXJnZXQpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF90YXJnZXQsIHZhbHVlKSA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT52LkFzeW5jRm9yLml0ZXIpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9pdGVyLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+di5Bc3luY0Zvci5ib2R5LCBhc3Qyb2JqX3N0bXQpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9ib2R5LCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+di5Bc3luY0Zvci5vcmVsc2UsIGFzdDJvYmpfc3RtdCk7CisgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX29yZWxzZSwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2hpbGVfa2luZDoKICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoV2hpbGVfdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKQEAgLTI1ODUsNiArMjc0OCwyMCBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXN5bmNXaXRoX2tpbmQ6CisgICAgICAgIHJlc3VsdCA9IFB5VHlwZV9HZW5lcmljTmV3KEFzeW5jV2l0aF90eXBlLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOworICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT52LkFzeW5jV2l0aC5pdGVtcywgYXN0Mm9ial93aXRoaXRlbSk7CisgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2l0ZW1zLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+di5Bc3luY1dpdGguYm9keSwgYXN0Mm9ial9zdG10KTsKKyAgICAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfYm9keSwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmFpc2Vfa2luZDoKICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoUmFpc2VfdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKQEAgLTI4OTgsNiArMzA3NSwxNSBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXdhaXRfa2luZDoKKyAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoQXdhaXRfdHlwZSwgTlVMTCwgTlVMTCk7CisgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKKyAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+di5Bd2FpdC52YWx1ZSk7CisgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhbHVlLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBZaWVsZF9raW5kOgogICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhZaWVsZF90eXBlLCBOVUxMLCBOVUxMKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOwpAQCAtMjk1OSwxNiArMzE0NSw2IEBACiAgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa2V5d29yZHMsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgICAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT52LkNhbGwuc3RhcmFyZ3MpOwotICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9zdGFyYXJncywgdmFsdWUpID09IC0xKQotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPnYuQ2FsbC5rd2FyZ3MpOwotICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZ3MsIHZhbHVlKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE51bV9raW5kOgogICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhOdW1fdHlwZSwgTlVMTCwgTlVMTCk7CkBAIC0zMjMyLDYgKzM0MDgsOSBAQAogICAgICAgICBjYXNlIE11bHQ6CiAgICAgICAgICAgICBQeV9JTkNSRUYoTXVsdF9zaW5nbGV0b24pOwogICAgICAgICAgICAgcmV0dXJuIE11bHRfc2luZ2xldG9uOworICAgICAgICBjYXNlIE1hdE11bHQ6CisgICAgICAgICAgICBQeV9JTkNSRUYoTWF0TXVsdF9zaW5nbGV0b24pOworICAgICAgICAgICAgcmV0dXJuIE1hdE11bHRfc2luZ2xldG9uOwogICAgICAgICBjYXNlIERpdjoKICAgICAgICAgICAgIFB5X0lOQ1JFRihEaXZfc2luZ2xldG9uKTsKICAgICAgICAgICAgIHJldHVybiBEaXZfc2luZ2xldG9uOwpAQCAtMzg1OSw2ICs0MDM4LDEwMiBAQAogICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilBc3luY0Z1bmN0aW9uRGVmX3R5cGUpOworICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaXNpbnN0YW5jZSkgeworICAgICAgICBpZGVudGlmaWVyIG5hbWU7CisgICAgICAgIGFyZ3VtZW50c190eSBhcmdzOworICAgICAgICBhc2RsX3NlcSogYm9keTsKKyAgICAgICAgYXNkbF9zZXEqIGRlY29yYXRvcl9saXN0OworICAgICAgICBleHByX3R5IHJldHVybnM7CisKKyAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9uYW1lKSkgeworICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9uYW1lKTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICByZXMgPSBvYmoyYXN0X2lkZW50aWZpZXIodG1wLCAmbmFtZSwgYXJlbmEpOworICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJuYW1lXCIgbWlzc2luZyBmcm9tIEFzeW5jRnVuY3Rpb25EZWYiKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYXJncykpIHsKKyAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYXJncyk7CisgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9hcmd1bWVudHModG1wLCAmYXJncywgYXJlbmEpOworICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJhcmdzXCIgbWlzc2luZyBmcm9tIEFzeW5jRnVuY3Rpb25EZWYiKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYm9keSkpIHsKKyAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9ib2R5KTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkFzeW5jRnVuY3Rpb25EZWYgZmllbGQgXCJib2R5XCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOworICAgICAgICAgICAgICAgIHJlcyA9IG9iajJhc3Rfc3RtdChQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoYm9keSwgaSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImJvZHlcIiBtaXNzaW5nIGZyb20gQXN5bmNGdW5jdGlvbkRlZiIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9kZWNvcmF0b3JfbGlzdCkpIHsKKyAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9kZWNvcmF0b3JfbGlzdCk7CisgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJBc3luY0Z1bmN0aW9uRGVmIGZpZWxkIFwiZGVjb3JhdG9yX2xpc3RcIiBtdXN0IGJlIGEgbGlzdCwgbm90IGEgJS4yMDBzIiwgdG1wLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgaWYgKGRlY29yYXRvcl9saXN0ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIoUHlMaXN0X0dFVF9JVEVNKHRtcCwgaSksICZ2YWx1ZSwgYXJlbmEpOworICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGRlY29yYXRvcl9saXN0LCBpLCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9DTEVBUih0bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVjb3JhdG9yX2xpc3RcIiBtaXNzaW5nIGZyb20gQXN5bmNGdW5jdGlvbkRlZiIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3JldHVybnMpKSB7CisgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3JldHVybnMpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZyZXR1cm5zLCBhcmVuYSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybnMgPSBOVUxMOworICAgICAgICB9CisgICAgICAgICpvdXQgPSBBc3luY0Z1bmN0aW9uRGVmKG5hbWUsIGFyZ3MsIGJvZHksIGRlY29yYXRvcl9saXN0LCByZXR1cm5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sIGNvbF9vZmZzZXQsIGFyZW5hKTsKKyAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopQ2xhc3NEZWZfdHlwZSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0zODY3LDggKzQxNDIsNiBAQAogICAgICAgICBpZGVudGlmaWVyIG5hbWU7CiAgICAgICAgIGFzZGxfc2VxKiBiYXNlczsKICAgICAgICAgYXNkbF9zZXEqIGtleXdvcmRzOwotICAgICAgICBleHByX3R5IHN0YXJhcmdzOwotICAgICAgICBleHByX3R5IGt3YXJnczsKICAgICAgICAgYXNkbF9zZXEqIGJvZHk7CiAgICAgICAgIGFzZGxfc2VxKiBkZWNvcmF0b3JfbGlzdDsKIApAQCAtMzkzMSwyNiArNDIwNCw2IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDbGFzc0RlZiIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0YXJhcmdzKSkgewotICAgICAgICAgICAgaW50IHJlczsKLSAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncyk7Ci0gICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJnN0YXJhcmdzLCBhcmVuYSk7Ci0gICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXJhcmdzID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmdzKSkgewotICAgICAgICAgICAgaW50IHJlczsKLSAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpOwotICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZrd2FyZ3MsIGFyZW5hKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgICAgICBQeV9DTEVBUih0bXApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAga3dhcmdzID0gTlVMTDsKLSAgICAgICAgfQogICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2JvZHkpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC0zOTk5LDggKzQyNTIsOCBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVjb3JhdG9yX2xpc3RcIiBtaXNzaW5nIGZyb20gQ2xhc3NEZWYiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgICpvdXQgPSBDbGFzc0RlZihuYW1lLCBiYXNlcywga2V5d29yZHMsIHN0YXJhcmdzLCBrd2FyZ3MsIGJvZHksCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCwgbGluZW5vLCBjb2xfb2Zmc2V0LCBhcmVuYSk7CisgICAgICAgICpvdXQgPSBDbGFzc0RlZihuYW1lLCBiYXNlcywga2V5d29yZHMsIGJvZHksIGRlY29yYXRvcl9saXN0LCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xfb2Zmc2V0LCBhcmVuYSk7CiAgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC00MjM3LDYgKzQ0OTAsOTAgQEAKICAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopQXN5bmNGb3JfdHlwZSk7CisgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChpc2luc3RhbmNlKSB7CisgICAgICAgIGV4cHJfdHkgdGFyZ2V0OworICAgICAgICBleHByX3R5IGl0ZXI7CisgICAgICAgIGFzZGxfc2VxKiBib2R5OworICAgICAgICBhc2RsX3NlcSogb3JlbHNlOworCisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdGFyZ2V0KSkgeworICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF90YXJnZXQpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZ0YXJnZXQsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBQeV9DTEVBUih0bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidGFyZ2V0XCIgbWlzc2luZyBmcm9tIEFzeW5jRm9yIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2l0ZXIpKSB7CisgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2l0ZXIpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZpdGVyLCBhcmVuYSk7CisgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcIml0ZXJcIiBtaXNzaW5nIGZyb20gQXN5bmNGb3IiKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYm9keSkpIHsKKyAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9ib2R5KTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkFzeW5jRm9yIGZpZWxkIFwiYm9keVwiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICByZXMgPSBvYmoyYXN0X3N0bXQoUHlMaXN0X0dFVF9JVEVNKHRtcCwgaSksICZ2YWx1ZSwgYXJlbmEpOworICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGJvZHksIGksIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJib2R5XCIgbWlzc2luZyBmcm9tIEFzeW5jRm9yIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX29yZWxzZSkpIHsKKyAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9vcmVsc2UpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIGlmICghUHlMaXN0X0NoZWNrKHRtcCkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiQXN5bmNGb3IgZmllbGQgXCJvcmVsc2VcIiBtdXN0IGJlIGEgbGlzdCwgbm90IGEgJS4yMDBzIiwgdG1wLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOworICAgICAgICAgICAgICAgIHJlcyA9IG9iajJhc3Rfc3RtdChQeUxpc3RfR0VUX0lURU0odG1wLCBpKSwgJnZhbHVlLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQob3JlbHNlLCBpLCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9DTEVBUih0bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwib3JlbHNlXCIgbWlzc2luZyBmcm9tIEFzeW5jRm9yIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAqb3V0ID0gQXN5bmNGb3IodGFyZ2V0LCBpdGVyLCBib2R5LCBvcmVsc2UsIGxpbmVubywgY29sX29mZnNldCwgYXJlbmEpOworICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilXaGlsZV90eXBlKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkgewogICAgICAgICByZXR1cm4gMTsKQEAgLTQ0NDEsNiArNDc3OCw2NiBAQAogICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilBc3luY1dpdGhfdHlwZSk7CisgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChpc2luc3RhbmNlKSB7CisgICAgICAgIGFzZGxfc2VxKiBpdGVtczsKKyAgICAgICAgYXNkbF9zZXEqIGJvZHk7CisKKyAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9pdGVtcykpIHsKKyAgICAgICAgICAgIGludCByZXM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9pdGVtcyk7CisgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJBc3luY1dpdGggZmllbGQgXCJpdGVtc1wiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7CisgICAgICAgICAgICBpdGVtcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICB3aXRoaXRlbV90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICByZXMgPSBvYmoyYXN0X3dpdGhpdGVtKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChpdGVtcywgaSwgdmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcIml0ZW1zXCIgbWlzc2luZyBmcm9tIEFzeW5jV2l0aCIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9ib2R5KSkgeworICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOworICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2JvZHkpOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIGlmICghUHlMaXN0X0NoZWNrKHRtcCkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiQXN5bmNXaXRoIGZpZWxkIFwiYm9keVwiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKKyAgICAgICAgICAgICAgICByZXMgPSBvYmoyYXN0X3N0bXQoUHlMaXN0X0dFVF9JVEVNKHRtcCwgaSksICZ2YWx1ZSwgYXJlbmEpOworICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGJvZHksIGksIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJib2R5XCIgbWlzc2luZyBmcm9tIEFzeW5jV2l0aCIpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgKm91dCA9IEFzeW5jV2l0aChpdGVtcywgYm9keSwgbGluZW5vLCBjb2xfb2Zmc2V0LCBhcmVuYSk7CisgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKVJhaXNlX3R5cGUpOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CiAgICAgICAgIHJldHVybiAxOwpAQCAtNTM3NSw2ICs1NzcyLDI4IEBACiAgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKUF3YWl0X3R5cGUpOworICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaXNpbnN0YW5jZSkgeworICAgICAgICBleHByX3R5IHZhbHVlOworCisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhbHVlKTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBQeV9DTEVBUih0bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidmFsdWVcIiBtaXNzaW5nIGZyb20gQXdhaXQiKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgICpvdXQgPSBBd2FpdCh2YWx1ZSwgbGluZW5vLCBjb2xfb2Zmc2V0LCBhcmVuYSk7CisgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKVlpZWxkX3R5cGUpOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CiAgICAgICAgIHJldHVybiAxOwpAQCAtNTQ5OCw4ICs1OTE3LDYgQEAKICAgICAgICAgZXhwcl90eSBmdW5jOwogICAgICAgICBhc2RsX3NlcSogYXJnczsKICAgICAgICAgYXNkbF9zZXEqIGtleXdvcmRzOwotICAgICAgICBleHByX3R5IHN0YXJhcmdzOwotICAgICAgICBleHByX3R5IGt3YXJnczsKIAogICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2Z1bmMpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwpAQCAtNTU2MCwyOCArNTk3Nyw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDYWxsIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7Ci0gICAgICAgICAgICBpbnQgcmVzOwotICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKTsKLSAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAmc3RhcmFyZ3MsIGFyZW5hKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgICAgICBQeV9DTEVBUih0bXApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhcmFyZ3MgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9rd2FyZ3MpKSB7Ci0gICAgICAgICAgICBpbnQgcmVzOwotICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJncyk7Ci0gICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJmt3YXJncywgYXJlbmEpOwotICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBrd2FyZ3MgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgICpvdXQgPSBDYWxsKGZ1bmMsIGFyZ3MsIGtleXdvcmRzLCBzdGFyYXJncywga3dhcmdzLCBsaW5lbm8sIGNvbF9vZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIGFyZW5hKTsKKyAgICAgICAgKm91dCA9IENhbGwoZnVuYywgYXJncywga2V5d29yZHMsIGxpbmVubywgY29sX29mZnNldCwgYXJlbmEpOwogICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNjE3NSw2ICs2NTcxLDE0IEBACiAgICAgICAgICpvdXQgPSBNdWx0OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QgKilNYXRNdWx0X3R5cGUpOworICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaXNpbnN0YW5jZSkgeworICAgICAgICAqb3V0ID0gTWF0TXVsdDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0ICopRGl2X3R5cGUpOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKSB7CiAgICAgICAgIHJldHVybiAxOwpAQCAtNjY4NSw2ICs3MDg5LDggQEAKICAgICBQeU9iamVjdCogdG1wID0gTlVMTDsKICAgICBpZGVudGlmaWVyIGFyZzsKICAgICBleHByX3R5IGFubm90YXRpb247CisgICAgaW50IGxpbmVubzsKKyAgICBpbnQgY29sX29mZnNldDsKIAogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYXJnKSkgewogICAgICAgICBpbnQgcmVzOwpAQCAtNjcwNyw3ICs3MTEzLDI5IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgYW5ub3RhdGlvbiA9IE5VTEw7CiAgICAgfQotICAgICpvdXQgPSBhcmcoYXJnLCBhbm5vdGF0aW9uLCBhcmVuYSk7CisgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9saW5lbm8pKSB7CisgICAgICAgIGludCByZXM7CisgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9saW5lbm8pOworICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICByZXMgPSBvYmoyYXN0X2ludCh0bXAsICZsaW5lbm8sIGFyZW5hKTsKKyAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJsaW5lbm9cIiBtaXNzaW5nIGZyb20gYXJnIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2NvbF9vZmZzZXQpKSB7CisgICAgICAgIGludCByZXM7CisgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9jb2xfb2Zmc2V0KTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgcmVzID0gb2JqMmFzdF9pbnQodG1wLCAmY29sX29mZnNldCwgYXJlbmEpOworICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOworICAgICAgICBQeV9DTEVBUih0bXApOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImNvbF9vZmZzZXRcIiBtaXNzaW5nIGZyb20gYXJnIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gYXJnKGFyZywgYW5ub3RhdGlvbiwgbGluZW5vLCBjb2xfb2Zmc2V0LCBhcmVuYSk7CiAgICAgcmV0dXJuIDA7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih0bXApOwpAQCAtNjcyMSw3ICs3MTQ5LDcgQEAKICAgICBpZGVudGlmaWVyIGFyZzsKICAgICBleHByX3R5IHZhbHVlOwogCi0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hcmcpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2FyZykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2FyZyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzI5LDggKzcxNTcsNyBAQAogICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwogICAgICAgICBQeV9DTEVBUih0bXApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImFyZ1wiIG1pc3NpbmcgZnJvbSBrZXl3b3JkIik7Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICBhcmcgPSBOVUxMOwogICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgewogICAgICAgICBpbnQgcmVzOwpAQCAtNjg0Nyw2ICs3Mjc0LDggQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInN0bXQiLCAoUHlPYmplY3QqKXN0bXRfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkZ1bmN0aW9uRGVmIiwgKFB5T2JqZWN0KilGdW5jdGlvbkRlZl90eXBlKSA8CiAgICAgICAgIDApIHJldHVybiBOVUxMOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQXN5bmNGdW5jdGlvbkRlZiIsCisgICAgICAgIChQeU9iamVjdCopQXN5bmNGdW5jdGlvbkRlZl90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQ2xhc3NEZWYiLCAoUHlPYmplY3QqKUNsYXNzRGVmX3R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJSZXR1cm4iLCAoUHlPYmplY3QqKVJldHVybl90eXBlKSA8IDApIHJldHVybgpAQCAtNjg1OCwxMCArNzI4NywxNCBAQAogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQXVnQXNzaWduIiwgKFB5T2JqZWN0KilBdWdBc3NpZ25fdHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkZvciIsIChQeU9iamVjdCopRm9yX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBc3luY0ZvciIsIChQeU9iamVjdCopQXN5bmNGb3JfdHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIldoaWxlIiwgKFB5T2JqZWN0KilXaGlsZV90eXBlKSA8IDApIHJldHVybgogICAgICAgICBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiSWYiLCAoUHlPYmplY3QqKUlmX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJXaXRoIiwgKFB5T2JqZWN0KilXaXRoX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBc3luY1dpdGgiLCAoUHlPYmplY3QqKUFzeW5jV2l0aF90eXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiUmFpc2UiLCAoUHlPYmplY3QqKVJhaXNlX3R5cGUpIDwgMCkgcmV0dXJuCiAgICAgICAgIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUcnkiLCAoUHlPYmplY3QqKVRyeV90eXBlKSA8IDApIHJldHVybiBOVUxMOwpAQCAtNjkwMiw2ICs3MzM1LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJHZW5lcmF0b3JFeHAiLCAoUHlPYmplY3QqKUdlbmVyYXRvckV4cF90eXBlKSA8CiAgICAgICAgIDApIHJldHVybiBOVUxMOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQXdhaXQiLCAoUHlPYmplY3QqKUF3YWl0X3R5cGUpIDwgMCkgcmV0dXJuCisgICAgICAgIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJZaWVsZCIsIChQeU9iamVjdCopWWllbGRfdHlwZSkgPCAwKSByZXR1cm4KICAgICAgICAgTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIllpZWxkRnJvbSIsIChQeU9iamVjdCopWWllbGRGcm9tX3R5cGUpIDwgMCkKQEAgLTY5NTYsNiArNzM5MSw4IEBACiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBZGQiLCAoUHlPYmplY3QqKUFkZF90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiU3ViIiwgKFB5T2JqZWN0KilTdWJfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIk11bHQiLCAoUHlPYmplY3QqKU11bHRfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIk1hdE11bHQiLCAoUHlPYmplY3QqKU1hdE11bHRfdHlwZSkgPCAwKSByZXR1cm4KKyAgICAgICAgTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkRpdiIsIChQeU9iamVjdCopRGl2X3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJNb2QiLCAoUHlPYmplY3QqKU1vZF90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiUG93IiwgKFB5T2JqZWN0KilQb3dfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL1B5dGhvbi9SRUFETUUgYi9QeXRob24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1M2I2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vUkVBRE1FCkBAIC0wLDAgKzEgQEAKK01pc2NlbGxhbmVvdXMgc291cmNlIGZpbGVzIGZvciB0aGUgbWFpbiBQeXRob24gc2hhcmVkIGxpYnJhcnkKZGlmZiAtLWdpdCBhL1B5dGhvbi9fd2FybmluZ3MuYyBiL1B5dGhvbi9fd2FybmluZ3MuYwppbmRleCA2ZGZmMGEyLi45NzhiYWQxIDEwMDY0NAotLS0gYS9QeXRob24vX3dhcm5pbmdzLmMKKysrIGIvUHl0aG9uL193YXJuaW5ncy5jCkBAIC01MTMsNiArNTEzLDY0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsgIC8qIFB5X05vbmUgb3IgTlVMTC4gKi8KIH0KIAorc3RhdGljIGludAoraXNfaW50ZXJuYWxfZnJhbWUoUHlGcmFtZU9iamVjdCAqZnJhbWUpCit7CisgICAgc3RhdGljIFB5T2JqZWN0ICppbXBvcnRsaWJfc3RyaW5nID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKmJvb3RzdHJhcF9zdHJpbmcgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBpbnQgY29udGFpbnM7CisKKyAgICBpZiAoaW1wb3J0bGliX3N0cmluZyA9PSBOVUxMKSB7CisgICAgICAgIGltcG9ydGxpYl9zdHJpbmcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiaW1wb3J0bGliIik7CisgICAgICAgIGlmIChpbXBvcnRsaWJfc3RyaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgYm9vdHN0cmFwX3N0cmluZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJfYm9vdHN0cmFwIik7CisgICAgICAgIGlmIChib290c3RyYXBfc3RyaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpbXBvcnRsaWJfc3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRihpbXBvcnRsaWJfc3RyaW5nKTsKKyAgICAgICAgUHlfSU5DUkVGKGJvb3RzdHJhcF9zdHJpbmcpOworICAgIH0KKworICAgIGlmIChmcmFtZSA9PSBOVUxMIHx8IGZyYW1lLT5mX2NvZGUgPT0gTlVMTCB8fAorICAgICAgICAgICAgZnJhbWUtPmZfY29kZS0+Y29fZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZmlsZW5hbWUgPSBmcmFtZS0+Zl9jb2RlLT5jb19maWxlbmFtZTsKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhmaWxlbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNvbnRhaW5zID0gUHlVbmljb2RlX0NvbnRhaW5zKGZpbGVuYW1lLCBpbXBvcnRsaWJfc3RyaW5nKTsKKyAgICBpZiAoY29udGFpbnMgPCAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChjb250YWlucyA+IDApIHsKKyAgICAgICAgY29udGFpbnMgPSBQeVVuaWNvZGVfQ29udGFpbnMoZmlsZW5hbWUsIGJvb3RzdHJhcF9zdHJpbmcpOworICAgICAgICBpZiAoY29udGFpbnMgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb250YWlucyA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeUZyYW1lT2JqZWN0ICoKK25leHRfZXh0ZXJuYWxfZnJhbWUoUHlGcmFtZU9iamVjdCAqZnJhbWUpCit7CisgICAgZG8geworICAgICAgICBmcmFtZSA9IGZyYW1lLT5mX2JhY2s7CisgICAgfSB3aGlsZSAoZnJhbWUgIT0gTlVMTCAmJiBpc19pbnRlcm5hbF9mcmFtZShmcmFtZSkpOworCisgICAgcmV0dXJuIGZyYW1lOworfQorCiAvKiBmaWxlbmFtZSwgbW9kdWxlLCBhbmQgcmVnaXN0cnkgYXJlIG5ldyByZWZzLCBnbG9iYWxzIGlzIGJvcnJvd2VkICovCiAvKiBSZXR1cm5zIDAgb24gZXJyb3IgKG5vIG5ldyByZWZzKSwgMSBvbiBzdWNjZXNzICovCiBzdGF0aWMgaW50CkBAIC01MjMsOCArNTgxLDE4IEBACiAKICAgICAvKiBTZXR1cCBnbG9iYWxzIGFuZCBsaW5lbm8uICovCiAgICAgUHlGcmFtZU9iamVjdCAqZiA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmZyYW1lOwotICAgIHdoaWxlICgtLXN0YWNrX2xldmVsID4gMCAmJiBmICE9IE5VTEwpCi0gICAgICAgIGYgPSBmLT5mX2JhY2s7CisgICAgLy8gU3RhY2sgbGV2ZWwgY29tcGFyaXNvbnMgdG8gUHl0aG9uIGNvZGUgaXMgb2ZmIGJ5IG9uZSBhcyB0aGVyZSBpcyBubworICAgIC8vIHdhcm5pbmdzLXJlbGF0ZWQgc3RhY2sgbGV2ZWwgdG8gYXZvaWQuCisgICAgaWYgKHN0YWNrX2xldmVsIDw9IDAgfHwgaXNfaW50ZXJuYWxfZnJhbWUoZikpIHsKKyAgICAgICAgd2hpbGUgKC0tc3RhY2tfbGV2ZWwgPiAwICYmIGYgIT0gTlVMTCkgeworICAgICAgICAgICAgZiA9IGYtPmZfYmFjazsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd2hpbGUgKC0tc3RhY2tfbGV2ZWwgPiAwICYmIGYgIT0gTlVMTCkgeworICAgICAgICAgICAgZiA9IG5leHRfZXh0ZXJuYWxfZnJhbWUoZik7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAoZiA9PSBOVUxMKSB7CiAgICAgICAgIGdsb2JhbHMgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnAtPnN5c2RpY3Q7CkBAIC01ODAsMTMgKzY0OCwxMiBAQAogICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoKmZpbGVuYW1lKTsKIAogI2RlZmluZSBhc2NpaV9sb3dlcihjKSAoKGMgPD0gMTI3KSA/IFB5X1RPTE9XRVIoYykgOiAwKQotICAgICAgICAvKiBpZiBmaWxlbmFtZS5sb3dlcigpLmVuZHN3aXRoKCgiLnB5YyIsICIucHlvIikpOiAqLworICAgICAgICAvKiBpZiBmaWxlbmFtZS5sb3dlcigpLmVuZHN3aXRoKCIucHljIik6ICovCiAgICAgICAgIGlmIChsZW4gPj0gNCAmJgogICAgICAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTQpID09ICcuJyAmJgogICAgICAgICAgICAgYXNjaWlfbG93ZXIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTMpKSA9PSAncCcgJiYKICAgICAgICAgICAgIGFzY2lpX2xvd2VyKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0yKSkgPT0gJ3knICYmCi0gICAgICAgICAgICAoYXNjaWlfbG93ZXIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTEpKSA9PSAnYycgfHwKLSAgICAgICAgICAgICAgICBhc2NpaV9sb3dlcihQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMSkpID09ICdvJykpCisgICAgICAgICAgICBhc2NpaV9sb3dlcihQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMSkpID09ICdjJykKICAgICAgICAgewogICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlVbmljb2RlX1N1YnN0cmluZygqZmlsZW5hbWUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKCpmaWxlbmFtZSktMSk7CkBAIC02MTMsOCArNjgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc190cnVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqZmlsZW5hbWUpOwotICAgICAgICAgICAgICAgICAgICAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiX19tYWluX18iKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfU0VUUkVGKCpmaWxlbmFtZSwgUHlVbmljb2RlX0Zyb21TdHJpbmcoIl9fbWFpbl9fIikpOwogICAgICAgICAgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKICAgICAgICAgICAgICAgICB9CkBAIC02NTQsMTYgKzcyMCwxNyBAQAogCiAgICAgaWYgKHJjID09IDEpCiAgICAgICAgIGNhdGVnb3J5ID0gKFB5T2JqZWN0KiltZXNzYWdlLT5vYl90eXBlOwotICAgIGVsc2UgaWYgKGNhdGVnb3J5ID09IE5VTEwpCisgICAgZWxzZSBpZiAoY2F0ZWdvcnkgPT0gTlVMTCB8fCBjYXRlZ29yeSA9PSBQeV9Ob25lKQogICAgICAgICBjYXRlZ29yeSA9IFB5RXhjX1VzZXJXYXJuaW5nOwogCiAgICAgLyogVmFsaWRhdGUgY2F0ZWdvcnkuICovCiAgICAgcmMgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGNhdGVnb3J5LCBQeUV4Y19XYXJuaW5nKTsKLSAgICBpZiAocmMgPT0gLTEpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChyYyA9PSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNhdGVnb3J5IGlzIG5vdCBhIHN1YmNsYXNzIG9mIFdhcm5pbmciKTsKKyAgICAvKiBjYXRlZ29yeSBpcyBub3QgYSBzdWJjbGFzcyBvZiBQeUV4Y19XYXJuaW5nIG9yCisgICAgICAgUHlPYmplY3RfSXNTdWJjbGFzcyByYWlzZWQgYW4gZXJyb3IgKi8KKyAgICBpZiAocmMgPT0gLTEgfHwgcmMgPT0gMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNhdGVnb3J5IG11c3QgYmUgYSBXYXJuaW5nIHN1YmNsYXNzLCBub3QgJyVzJyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGNhdGVnb3J5KS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvUHl0aG9uL2FzZGwuYyBiL1B5dGhvbi9hc2RsLmMKaW5kZXggNzRmYTk0MS4uZGYzODdiMiAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzZGwuYworKysgYi9QeXRob24vYXNkbC5jCkBAIC01LDIxICs1LDIxIEBACiBfUHlfYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXNkbF9zZXEgKnNlcSA9IE5VTEw7Ci0gICAgc2l6ZV90IG4gPSAoc2l6ZSA/IChzaXplb2Yodm9pZCAqKSAqIChzaXplIC0gMSkpIDogMCk7CisgICAgc2l6ZV90IG47CiAKICAgICAvKiBjaGVjayBzaXplIGlzIHNhbmUgKi8KLSAgICBpZiAoc2l6ZSA8IDAgfHwgc2l6ZSA9PSBJTlRfTUlOIHx8Ci0gICAgICAgIChzaXplICYmICgoc2l6ZSAtIDEpID4gKFBZX1NJWkVfTUFYIC8gc2l6ZW9mKHZvaWQgKikpKSkpIHsKKyAgICBpZiAoc2l6ZSA8IDAgfHwKKyAgICAgICAgKHNpemUgJiYgKCgoc2l6ZV90KXNpemUgLSAxKSA+IChQWV9TSVpFX01BWCAvIHNpemVvZih2b2lkICopKSkpKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBuID0gKHNpemUgPyAoc2l6ZW9mKHZvaWQgKikgKiAoc2l6ZSAtIDEpKSA6IDApOwogCiAgICAgLyogY2hlY2sgaWYgc2l6ZSBjYW4gYmUgYWRkZWQgc2FmZWx5ICovCiAgICAgaWYgKG4gPiBQWV9TSVpFX01BWCAtIHNpemVvZihhc2RsX3NlcSkpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCiAgICAgbiArPSBzaXplb2YoYXNkbF9zZXEpOwogCiAgICAgc2VxID0gKGFzZGxfc2VxICopUHlBcmVuYV9NYWxsb2MoYXJlbmEsIG4pOwpAQCAtMzYsMjEgKzM2LDIxIEBACiBfUHlfYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFzZGxfaW50X3NlcSAqc2VxID0gTlVMTDsKLSAgICBzaXplX3QgbiA9IChzaXplID8gKHNpemVvZih2b2lkICopICogKHNpemUgLSAxKSkgOiAwKTsKKyAgICBzaXplX3QgbjsKIAogICAgIC8qIGNoZWNrIHNpemUgaXMgc2FuZSAqLwotICAgIGlmIChzaXplIDwgMCB8fCBzaXplID09IElOVF9NSU4gfHwKLSAgICAgICAgKHNpemUgJiYgKChzaXplIC0gMSkgPiAoUFlfU0laRV9NQVggLyBzaXplb2Yodm9pZCAqKSkpKSkgeworICAgIGlmIChzaXplIDwgMCB8fAorICAgICAgICAoc2l6ZSAmJiAoKChzaXplX3Qpc2l6ZSAtIDEpID4gKFBZX1NJWkVfTUFYIC8gc2l6ZW9mKHZvaWQgKikpKSkpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgbiA9IChzaXplID8gKHNpemVvZih2b2lkICopICogKHNpemUgLSAxKSkgOiAwKTsKIAogICAgIC8qIGNoZWNrIGlmIHNpemUgY2FuIGJlIGFkZGVkIHNhZmVseSAqLwogICAgIGlmIChuID4gUFlfU0laRV9NQVggLSBzaXplb2YoYXNkbF9zZXEpKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQogICAgIG4gKz0gc2l6ZW9mKGFzZGxfc2VxKTsKIAogICAgIHNlcSA9IChhc2RsX2ludF9zZXEgKilQeUFyZW5hX01hbGxvYyhhcmVuYSwgbik7CmRpZmYgLS1naXQgYS9QeXRob24vYXN0LmMgYi9QeXRob24vYXN0LmMKaW5kZXggZDUwY2I4MC4uNzc0M2MzMSAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzdC5jCisrKyBiL1B5dGhvbi9hc3QuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgfQogICAgIGlmICghdmFsaWRhdGVfYXJncyhhcmdzLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGFyZ3MtPmt3YXJnICYmIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uIAorICAgIGlmIChhcmdzLT5rd2FyZyAmJiBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbgogICAgICAgICAmJiAhdmFsaWRhdGVfZXhwcihhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiwgTG9hZCkpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE2NCw2ICsxNjQsOCBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tfY3R4ID0gMDsKKyAgICAgICAgLyogc2V0IGFjdHVhbF9jdHggdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLworICAgICAgICBhY3R1YWxfY3R4ID0gMDsKICAgICB9CiAgICAgaWYgKGNoZWNrX2N0eCAmJiBhY3R1YWxfY3R4ICE9IGN0eCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgImV4cHJlc3Npb24gbXVzdCBoYXZlICVzIGNvbnRleHQgYnV0IGhhcyAlcyBpbnN0ZWFkIiwKQEAgLTE5Nyw4ICsxOTksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGljdCBkb2Vzbid0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXMgYXMgdmFsdWVzIik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcnMoZXhwLT52LkRpY3Qua2V5cywgTG9hZCwgMCkgJiYKLSAgICAgICAgICAgIHZhbGlkYXRlX2V4cHJzKGV4cC0+di5EaWN0LnZhbHVlcywgTG9hZCwgMCk7CisgICAgICAgIC8qIG51bGxfb2s9MSBmb3Iga2V5cyBleHByZXNzaW9ucyB0byBhbGxvdyBkaWN0IHVucGFja2luZyB0byB3b3JrIGluCisgICAgICAgICAgIGRpY3QgbGl0ZXJhbHMsIGkuZS4gYGB7Kip7YTpifX1gYCAqLworICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcnMoZXhwLT52LkRpY3Qua2V5cywgTG9hZCwgLypudWxsX29rPSovIDEpICYmCisgICAgICAgICAgICB2YWxpZGF0ZV9leHBycyhleHAtPnYuRGljdC52YWx1ZXMsIExvYWQsIC8qbnVsbF9vaz0qLyAwKTsKICAgICBjYXNlIFNldF9raW5kOgogICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcnMoZXhwLT52LlNldC5lbHRzLCBMb2FkLCAwKTsKICNkZWZpbmUgQ09NUChOQU1FKSBcCkBAIC0yMTcsNiArMjIxLDggQEAKICAgICAgICAgcmV0dXJuICFleHAtPnYuWWllbGQudmFsdWUgfHwgdmFsaWRhdGVfZXhwcihleHAtPnYuWWllbGQudmFsdWUsIExvYWQpOwogICAgIGNhc2UgWWllbGRGcm9tX2tpbmQ6CiAgICAgICAgIHJldHVybiB2YWxpZGF0ZV9leHByKGV4cC0+di5ZaWVsZEZyb20udmFsdWUsIExvYWQpOworICAgIGNhc2UgQXdhaXRfa2luZDoKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlX2V4cHIoZXhwLT52LkF3YWl0LnZhbHVlLCBMb2FkKTsKICAgICBjYXNlIENvbXBhcmVfa2luZDoKICAgICAgICAgaWYgKCFhc2RsX3NlcV9MRU4oZXhwLT52LkNvbXBhcmUuY29tcGFyYXRvcnMpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNvbXBhcmUgd2l0aCBubyBjb21wYXJhdG9ycyIpOwpAQCAtMjMzLDkgKzIzOSw3IEBACiAgICAgY2FzZSBDYWxsX2tpbmQ6CiAgICAgICAgIHJldHVybiB2YWxpZGF0ZV9leHByKGV4cC0+di5DYWxsLmZ1bmMsIExvYWQpICYmCiAgICAgICAgICAgICB2YWxpZGF0ZV9leHBycyhleHAtPnYuQ2FsbC5hcmdzLCBMb2FkLCAwKSAmJgotICAgICAgICAgICAgdmFsaWRhdGVfa2V5d29yZHMoZXhwLT52LkNhbGwua2V5d29yZHMpICYmCi0gICAgICAgICAgICAoIWV4cC0+di5DYWxsLnN0YXJhcmdzIHx8IHZhbGlkYXRlX2V4cHIoZXhwLT52LkNhbGwuc3RhcmFyZ3MsIExvYWQpKSAmJgotICAgICAgICAgICAgKCFleHAtPnYuQ2FsbC5rd2FyZ3MgfHwgdmFsaWRhdGVfZXhwcihleHAtPnYuQ2FsbC5rd2FyZ3MsIExvYWQpKTsKKyAgICAgICAgICAgIHZhbGlkYXRlX2tleXdvcmRzKGV4cC0+di5DYWxsLmtleXdvcmRzKTsKICAgICBjYXNlIE51bV9raW5kOiB7CiAgICAgICAgIFB5T2JqZWN0ICpuID0gZXhwLT52Lk51bS5uOwogICAgICAgICBpZiAoIVB5TG9uZ19DaGVja0V4YWN0KG4pICYmICFQeUZsb2F0X0NoZWNrRXhhY3QobikgJiYKQEAgLTMyMCw5ICszMjQsNyBAQAogICAgICAgICByZXR1cm4gdmFsaWRhdGVfYm9keShzdG10LT52LkNsYXNzRGVmLmJvZHksICJDbGFzc0RlZiIpICYmCiAgICAgICAgICAgICB2YWxpZGF0ZV9leHBycyhzdG10LT52LkNsYXNzRGVmLmJhc2VzLCBMb2FkLCAwKSAmJgogICAgICAgICAgICAgdmFsaWRhdGVfa2V5d29yZHMoc3RtdC0+di5DbGFzc0RlZi5rZXl3b3JkcykgJiYKLSAgICAgICAgICAgIHZhbGlkYXRlX2V4cHJzKHN0bXQtPnYuQ2xhc3NEZWYuZGVjb3JhdG9yX2xpc3QsIExvYWQsIDApICYmCi0gICAgICAgICAgICAoIXN0bXQtPnYuQ2xhc3NEZWYuc3RhcmFyZ3MgfHwgdmFsaWRhdGVfZXhwcihzdG10LT52LkNsYXNzRGVmLnN0YXJhcmdzLCBMb2FkKSkgJiYKLSAgICAgICAgICAgICghc3RtdC0+di5DbGFzc0RlZi5rd2FyZ3MgfHwgdmFsaWRhdGVfZXhwcihzdG10LT52LkNsYXNzRGVmLmt3YXJncywgTG9hZCkpOworICAgICAgICAgICAgdmFsaWRhdGVfZXhwcnMoc3RtdC0+di5DbGFzc0RlZi5kZWNvcmF0b3JfbGlzdCwgTG9hZCwgMCk7CiAgICAgY2FzZSBSZXR1cm5fa2luZDoKICAgICAgICAgcmV0dXJuICFzdG10LT52LlJldHVybi52YWx1ZSB8fCB2YWxpZGF0ZV9leHByKHN0bXQtPnYuUmV0dXJuLnZhbHVlLCBMb2FkKTsKICAgICBjYXNlIERlbGV0ZV9raW5kOgpAQCAtMzM4LDYgKzM0MCwxMSBAQAogICAgICAgICAgICAgdmFsaWRhdGVfZXhwcihzdG10LT52LkZvci5pdGVyLCBMb2FkKSAmJgogICAgICAgICAgICAgdmFsaWRhdGVfYm9keShzdG10LT52LkZvci5ib2R5LCAiRm9yIikgJiYKICAgICAgICAgICAgIHZhbGlkYXRlX3N0bXRzKHN0bXQtPnYuRm9yLm9yZWxzZSk7CisgICAgY2FzZSBBc3luY0Zvcl9raW5kOgorICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcihzdG10LT52LkFzeW5jRm9yLnRhcmdldCwgU3RvcmUpICYmCisgICAgICAgICAgICB2YWxpZGF0ZV9leHByKHN0bXQtPnYuQXN5bmNGb3IuaXRlciwgTG9hZCkgJiYKKyAgICAgICAgICAgIHZhbGlkYXRlX2JvZHkoc3RtdC0+di5Bc3luY0Zvci5ib2R5LCAiQXN5bmNGb3IiKSAmJgorICAgICAgICAgICAgdmFsaWRhdGVfc3RtdHMoc3RtdC0+di5Bc3luY0Zvci5vcmVsc2UpOwogICAgIGNhc2UgV2hpbGVfa2luZDoKICAgICAgICAgcmV0dXJuIHZhbGlkYXRlX2V4cHIoc3RtdC0+di5XaGlsZS50ZXN0LCBMb2FkKSAmJgogICAgICAgICAgICAgdmFsaWRhdGVfYm9keShzdG10LT52LldoaWxlLmJvZHksICJXaGlsZSIpICYmCkBAIC0zNTYsNiArMzYzLDE2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHZhbGlkYXRlX2JvZHkoc3RtdC0+di5XaXRoLmJvZHksICJXaXRoIik7CisgICAgY2FzZSBBc3luY1dpdGhfa2luZDoKKyAgICAgICAgaWYgKCF2YWxpZGF0ZV9ub25lbXB0eV9zZXEoc3RtdC0+di5Bc3luY1dpdGguaXRlbXMsICJpdGVtcyIsICJBc3luY1dpdGgiKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXNkbF9zZXFfTEVOKHN0bXQtPnYuQXN5bmNXaXRoLml0ZW1zKTsgaSsrKSB7CisgICAgICAgICAgICB3aXRoaXRlbV90eSBpdGVtID0gYXNkbF9zZXFfR0VUKHN0bXQtPnYuQXN5bmNXaXRoLml0ZW1zLCBpKTsKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihpdGVtLT5jb250ZXh0X2V4cHIsIExvYWQpIHx8CisgICAgICAgICAgICAgICAgKGl0ZW0tPm9wdGlvbmFsX3ZhcnMgJiYgIXZhbGlkYXRlX2V4cHIoaXRlbS0+b3B0aW9uYWxfdmFycywgU3RvcmUpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsaWRhdGVfYm9keShzdG10LT52LkFzeW5jV2l0aC5ib2R5LCAiQXN5bmNXaXRoIik7CiAgICAgY2FzZSBSYWlzZV9raW5kOgogICAgICAgICBpZiAoc3RtdC0+di5SYWlzZS5leGMpIHsKICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZV9leHByKHN0bXQtPnYuUmFpc2UuZXhjLCBMb2FkKSAmJgpAQCAtNDA3LDYgKzQyNCwxMiBAQAogICAgICAgICByZXR1cm4gdmFsaWRhdGVfbm9uZW1wdHlfc2VxKHN0bXQtPnYuTm9ubG9jYWwubmFtZXMsICJuYW1lcyIsICJOb25sb2NhbCIpOwogICAgIGNhc2UgRXhwcl9raW5kOgogICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcihzdG10LT52LkV4cHIudmFsdWUsIExvYWQpOworICAgIGNhc2UgQXN5bmNGdW5jdGlvbkRlZl9raW5kOgorICAgICAgICByZXR1cm4gdmFsaWRhdGVfYm9keShzdG10LT52LkFzeW5jRnVuY3Rpb25EZWYuYm9keSwgIkFzeW5jRnVuY3Rpb25EZWYiKSAmJgorICAgICAgICAgICAgdmFsaWRhdGVfYXJndW1lbnRzKHN0bXQtPnYuQXN5bmNGdW5jdGlvbkRlZi5hcmdzKSAmJgorICAgICAgICAgICAgdmFsaWRhdGVfZXhwcnMoc3RtdC0+di5Bc3luY0Z1bmN0aW9uRGVmLmRlY29yYXRvcl9saXN0LCBMb2FkLCAwKSAmJgorICAgICAgICAgICAgKCFzdG10LT52LkFzeW5jRnVuY3Rpb25EZWYucmV0dXJucyB8fAorICAgICAgICAgICAgIHZhbGlkYXRlX2V4cHIoc3RtdC0+di5Bc3luY0Z1bmN0aW9uRGVmLnJldHVybnMsIExvYWQpKTsKICAgICBjYXNlIFBhc3Nfa2luZDoKICAgICBjYXNlIEJyZWFrX2tpbmQ6CiAgICAgY2FzZSBDb250aW51ZV9raW5kOgpAQCAtNDUxLDcgKzQ3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUgZGlzYWxsb3dlZCBpbiBleHByZXNzaW9uIGxpc3QiKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgIH0KICAgICByZXR1cm4gMTsKIH0KQEAgLTUwNSw2ICs1MjgsOSBAQAogc3RhdGljIGV4cHJfdHkgYXN0X2Zvcl90ZXN0bGlzdChzdHJ1Y3QgY29tcGlsaW5nICosIGNvbnN0IG5vZGUgKik7CiBzdGF0aWMgc3RtdF90eSBhc3RfZm9yX2NsYXNzZGVmKHN0cnVjdCBjb21waWxpbmcgKiwgY29uc3Qgbm9kZSAqLCBhc2RsX3NlcSAqKTsKIAorc3RhdGljIHN0bXRfdHkgYXN0X2Zvcl93aXRoX3N0bXQoc3RydWN0IGNvbXBpbGluZyAqLCBjb25zdCBub2RlICosIGludCk7CitzdGF0aWMgc3RtdF90eSBhc3RfZm9yX2Zvcl9zdG10KHN0cnVjdCBjb21waWxpbmcgKiwgY29uc3Qgbm9kZSAqLCBpbnQpOworCiAvKiBOb3RlIGRpZmZlcmVudCBzaWduYXR1cmUgZm9yIGFzdF9mb3JfY2FsbCAqLwogc3RhdGljIGV4cHJfdHkgYXN0X2Zvcl9jYWxsKHN0cnVjdCBjb21waWxpbmcgKiwgY29uc3Qgbm9kZSAqLCBleHByX3R5KTsKIApAQCAtODI1LDYgKzg1MSw4IEBACiAgICAgICAgICAgICByZXR1cm4gU3ViOwogICAgICAgICBjYXNlIFNUQVI6CiAgICAgICAgICAgICByZXR1cm4gTXVsdDsKKyAgICAgICAgY2FzZSBBVDoKKyAgICAgICAgICAgIHJldHVybiBNYXRNdWx0OwogICAgICAgICBjYXNlIFNMQVNIOgogICAgICAgICAgICAgcmV0dXJuIERpdjsKICAgICAgICAgY2FzZSBET1VCTEVTTEFTSDoKQEAgLTg0NCw3ICs4NzIsOCBAQAogfTsKIAogc3RhdGljIGludAotZm9yYmlkZGVuX25hbWUoc3RydWN0IGNvbXBpbGluZyAqYywgaWRlbnRpZmllciBuYW1lLCBjb25zdCBub2RlICpuLCBpbnQgZnVsbF9jaGVja3MpCitmb3JiaWRkZW5fbmFtZShzdHJ1Y3QgY29tcGlsaW5nICpjLCBpZGVudGlmaWVyIG5hbWUsIGNvbnN0IG5vZGUgKm4sCisgICAgICAgICAgICAgICBpbnQgZnVsbF9jaGVja3MpCiB7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhuYW1lKSk7CiAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2RlYnVnX18iKSA9PSAwKSB7CkBAIC05NDAsNiArOTY5LDkgQEAKICAgICAgICAgY2FzZSBZaWVsZEZyb21fa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJ5aWVsZCBleHByZXNzaW9uIjsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF3YWl0X2tpbmQ6CisgICAgICAgICAgICBleHByX25hbWUgPSAiYXdhaXQgZXhwcmVzc2lvbiI7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMaXN0Q29tcF9raW5kOgogICAgICAgICAgICAgZXhwcl9uYW1lID0gImxpc3QgY29tcHJlaGVuc2lvbiI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwMzAsNiArMTA2Miw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFBvdzsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gTXVsdDsKKyAgICAgICAgY2FzZSAnQCc6CisgICAgICAgICAgICByZXR1cm4gTWF0TXVsdDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwgImludmFsaWQgYXVnYXNzaWduOiAlcyIsIFNUUihuKSk7CiAgICAgICAgICAgICByZXR1cm4gKG9wZXJhdG9yX3R5KTA7CkBAIC0xMTM5LDExICsxMTczLDkgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJldCA9IGFyZyhuYW1lLCBhbm5vdGF0aW9uLCBjLT5jX2FyZW5hKTsKKyAgICByZXQgPSBhcmcobmFtZSwgYW5ub3RhdGlvbiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIGlmICghcmV0KQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXQtPmxpbmVubyA9IExJTkVOTyhuKTsKLSAgICByZXQtPmNvbF9vZmZzZXQgPSBuLT5uX2NvbF9vZmZzZXQ7CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTE5OSwxMSArMTIzMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShjLCBhcmduYW1lLCBjaCwgMCkpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAgICAgYXJnID0gYXJnKGFyZ25hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIGFyZyA9IGFyZyhhcmduYW1lLCBhbm5vdGF0aW9uLCBMSU5FTk8oY2gpLCBjaC0+bl9jb2xfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIWFyZykKICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgICAgICBhcmctPmxpbmVubyA9IExJTkVOTyhjaCk7Ci0gICAgICAgICAgICAgICAgYXJnLT5jb2xfb2Zmc2V0ID0gY2gtPm5fY29sX29mZnNldDsKICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoa3dvbmx5YXJncywgaisrLCBhcmcpOwogICAgICAgICAgICAgICAgIGkgKz0gMjsgLyogdGhlIG5hbWUgYW5kIHRoZSBjb21tYSAqLwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQzOSw3ICsxNDcwLDcgQEAKICAgICAgICAgbmFtZV9leHByID0gTlVMTDsKICAgICB9CiAgICAgZWxzZSBpZiAoTkNIKG4pID09IDUpIHsgLyogQ2FsbCB3aXRoIG5vIGFyZ3VtZW50cyAqLwotICAgICAgICBkID0gQ2FsbChuYW1lX2V4cHIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIExJTkVOTyhuKSwKKyAgICAgICAgZCA9IENhbGwobmFtZV9leHByLCBOVUxMLCBOVUxMLCBMSU5FTk8obiksCiAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghZCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTQ3Nyw3ICsxNTA4LDggQEAKIH0KIAogc3RhdGljIHN0bXRfdHkKLWFzdF9mb3JfZnVuY2RlZihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBhc2RsX3NlcSAqZGVjb3JhdG9yX3NlcSkKK2FzdF9mb3JfZnVuY2RlZl9pbXBsKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sCisgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZGVjb3JhdG9yX3NlcSwgaW50IGlzX2FzeW5jKQogewogICAgIC8qIGZ1bmNkZWY6ICdkZWYnIE5BTUUgcGFyYW1ldGVycyBbJy0+JyB0ZXN0XSAnOicgc3VpdGUgKi8KICAgICBpZGVudGlmaWVyIG5hbWU7CkBAIC0xNTA2LDE0ICsxNTM4LDY4IEBACiAgICAgaWYgKCFib2R5KQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBGdW5jdGlvbkRlZihuYW1lLCBhcmdzLCBib2R5LCBkZWNvcmF0b3Jfc2VxLCByZXR1cm5zLCBMSU5FTk8obiksCi0gICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgaWYgKGlzX2FzeW5jKQorICAgICAgICByZXR1cm4gQXN5bmNGdW5jdGlvbkRlZihuYW1lLCBhcmdzLCBib2R5LCBkZWNvcmF0b3Jfc2VxLCByZXR1cm5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8obiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRnVuY3Rpb25EZWYobmFtZSwgYXJncywgYm9keSwgZGVjb3JhdG9yX3NlcSwgcmV0dXJucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Cit9CisKK3N0YXRpYyBzdG10X3R5Cithc3RfZm9yX2FzeW5jX2Z1bmNkZWYoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgYXNkbF9zZXEgKmRlY29yYXRvcl9zZXEpCit7CisgICAgLyogYXN5bmNfZnVuY2RlZjogQVNZTkMgZnVuY2RlZiAqLworICAgIFJFUShuLCBhc3luY19mdW5jZGVmKTsKKyAgICBSRVEoQ0hJTEQobiwgMCksIEFTWU5DKTsKKyAgICBSRVEoQ0hJTEQobiwgMSksIGZ1bmNkZWYpOworCisgICAgcmV0dXJuIGFzdF9mb3JfZnVuY2RlZl9pbXBsKGMsIENISUxEKG4sIDEpLCBkZWNvcmF0b3Jfc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qIGlzX2FzeW5jICovKTsKK30KKworc3RhdGljIHN0bXRfdHkKK2FzdF9mb3JfZnVuY2RlZihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBhc2RsX3NlcSAqZGVjb3JhdG9yX3NlcSkKK3sKKyAgICAvKiBmdW5jZGVmOiAnZGVmJyBOQU1FIHBhcmFtZXRlcnMgWyctPicgdGVzdF0gJzonIHN1aXRlICovCisgICAgcmV0dXJuIGFzdF9mb3JfZnVuY2RlZl9pbXBsKGMsIG4sIGRlY29yYXRvcl9zZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogaXNfYXN5bmMgKi8pOworfQorCisKK3N0YXRpYyBzdG10X3R5Cithc3RfZm9yX2FzeW5jX3N0bXQoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKK3sKKyAgICAvKiBhc3luY19zdG10OiBBU1lOQyAoZnVuY2RlZiB8IHdpdGhfc3RtdCB8IGZvcl9zdG10KSAqLworICAgIFJFUShuLCBhc3luY19zdG10KTsKKyAgICBSRVEoQ0hJTEQobiwgMCksIEFTWU5DKTsKKworICAgIHN3aXRjaCAoVFlQRShDSElMRChuLCAxKSkpIHsKKyAgICAgICAgY2FzZSBmdW5jZGVmOgorICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfZnVuY2RlZl9pbXBsKGMsIENISUxEKG4sIDEpLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyogaXNfYXN5bmMgKi8pOworICAgICAgICBjYXNlIHdpdGhfc3RtdDoKKyAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX3dpdGhfc3RtdChjLCBDSElMRChuLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qIGlzX2FzeW5jICovKTsKKworICAgICAgICBjYXNlIGZvcl9zdG10OgorICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfZm9yX3N0bXQoYywgQ0hJTEQobiwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qIGlzX2FzeW5jICovKTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGFzeW5jIHN0YW1lbnQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTVFIoQ0hJTEQobiwgMSkpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIH0KIAogc3RhdGljIHN0bXRfdHkKIGFzdF9mb3JfZGVjb3JhdGVkKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7Ci0gICAgLyogZGVjb3JhdGVkOiBkZWNvcmF0b3JzIChjbGFzc2RlZiB8IGZ1bmNkZWYpICovCisgICAgLyogZGVjb3JhdGVkOiBkZWNvcmF0b3JzIChjbGFzc2RlZiB8IGZ1bmNkZWYgfCBhc3luY19mdW5jZGVmKSAqLwogICAgIHN0bXRfdHkgdGhpbmcgPSBOVUxMOwogICAgIGFzZGxfc2VxICpkZWNvcmF0b3Jfc2VxID0gTlVMTDsKIApAQCAtMTUyNCwxMiArMTYxMCwxNSBAQAogICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBhc3NlcnQoVFlQRShDSElMRChuLCAxKSkgPT0gZnVuY2RlZiB8fAorICAgICAgICAgICBUWVBFKENISUxEKG4sIDEpKSA9PSBhc3luY19mdW5jZGVmIHx8CiAgICAgICAgICAgIFRZUEUoQ0hJTEQobiwgMSkpID09IGNsYXNzZGVmKTsKIAogICAgIGlmIChUWVBFKENISUxEKG4sIDEpKSA9PSBmdW5jZGVmKSB7CiAgICAgICB0aGluZyA9IGFzdF9mb3JfZnVuY2RlZihjLCBDSElMRChuLCAxKSwgZGVjb3JhdG9yX3NlcSk7CiAgICAgfSBlbHNlIGlmIChUWVBFKENISUxEKG4sIDEpKSA9PSBjbGFzc2RlZikgewogICAgICAgdGhpbmcgPSBhc3RfZm9yX2NsYXNzZGVmKGMsIENISUxEKG4sIDEpLCBkZWNvcmF0b3Jfc2VxKTsKKyAgICB9IGVsc2UgaWYgKFRZUEUoQ0hJTEQobiwgMSkpID09IGFzeW5jX2Z1bmNkZWYpIHsKKyAgICAgIHRoaW5nID0gYXN0X2Zvcl9hc3luY19mdW5jZGVmKGMsIENISUxEKG4sIDEpLCBkZWNvcmF0b3Jfc2VxKTsKICAgICB9CiAgICAgLyogd2UgY291bnQgdGhlIGRlY29yYXRvcnMgaW4gd2hlbiB0YWxraW5nIGFib3V0IHRoZSBjbGFzcycgb3IKICAgICAgKiBmdW5jdGlvbidzIGxpbmUgbnVtYmVyICovCkBAIC0xNzI5LDE2ICsxODE4LDIyIEBACiBzdGF0aWMgZXhwcl90eQogYXN0X2Zvcl9pdGVyY29tcChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBpbnQgdHlwZSkKIHsKLSAgICAvKiB0ZXN0bGlzdF9jb21wOiB0ZXN0ICggY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSApCi0gICAgICAgYXJndW1lbnQ6IFt0ZXN0ICc9J10gdGVzdCBbY29tcF9mb3JdICAgICAgICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdCAqLworICAgIC8qIHRlc3RsaXN0X2NvbXA6ICh0ZXN0fHN0YXJfZXhwcikKKyAgICAgKiAgICAgICAgICAgICAgICAoIGNvbXBfZm9yIHwgKCcsJyAodGVzdHxzdGFyX2V4cHIpKSogWycsJ10gKSAqLwogICAgIGV4cHJfdHkgZWx0OwogICAgIGFzZGxfc2VxICpjb21wczsKKyAgICBub2RlICpjaDsKIAogICAgIGFzc2VydChOQ0gobikgPiAxKTsKIAotICAgIGVsdCA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAwKSk7CisgICAgY2ggPSBDSElMRChuLCAwKTsKKyAgICBlbHQgPSBhc3RfZm9yX2V4cHIoYywgY2gpOwogICAgIGlmICghZWx0KQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZWx0LT5raW5kID09IFN0YXJyZWRfa2luZCkgeworICAgICAgICBhc3RfZXJyb3IoYywgY2gsICJpdGVyYWJsZSB1bnBhY2tpbmcgY2Fubm90IGJlIHVzZWQgaW4gY29tcHJlaGVuc2lvbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBjb21wcyA9IGFzdF9mb3JfY29tcHJlaGVuc2lvbihjLCBDSElMRChuLCAxKSk7CiAgICAgaWYgKCFjb21wcykKQEAgLTE3NTUsMjMgKzE4NTAsNTkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIEZpbGxzIGluIHRoZSBrZXksIHZhbHVlIHBhaXIgY29ycmVzcG9uZGluZyB0byB0aGUgZGljdCBlbGVtZW50LiAgSW4gY2FzZQorICogb2YgYW4gdW5wYWNraW5nLCBrZXkgaXMgTlVMTC4gICppIGlzIGFkdmFuY2VkIGJ5IHRoZSBudW1iZXIgb2YgYXN0CisgKiBlbGVtZW50cy4gIElmZiBzdWNjZXNzZnVsLCBub256ZXJvIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW50Cithc3RfZm9yX2RpY3RlbGVtZW50KHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sIGludCAqaSwKKyAgICAgICAgICAgICAgICAgICAgZXhwcl90eSAqa2V5LCBleHByX3R5ICp2YWx1ZSkKK3sKKyAgICBleHByX3R5IGV4cHJlc3Npb247CisgICAgaWYgKFRZUEUoQ0hJTEQobiwgKmkpKSA9PSBET1VCTEVTVEFSKSB7CisgICAgICAgIGFzc2VydChOQ0gobikgLSAqaSA+PSAyKTsKKworICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sICppICsgMSkpOworICAgICAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgKmtleSA9IE5VTEw7CisgICAgICAgICp2YWx1ZSA9IGV4cHJlc3Npb247CisKKyAgICAgICAgKmkgKz0gMjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChOQ0gobikgLSAqaSA+PSAzKTsKKworICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sICppKSk7CisgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAqa2V5ID0gZXhwcmVzc2lvbjsKKworICAgICAgICBSRVEoQ0hJTEQobiwgKmkgKyAxKSwgQ09MT04pOworCisgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgKmkgKyAyKSk7CisgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAqdmFsdWUgPSBleHByZXNzaW9uOworCisgICAgICAgICppICs9IDM7CisgICAgfQorICAgIHJldHVybiAxOworfQorCiBzdGF0aWMgZXhwcl90eQogYXN0X2Zvcl9kaWN0Y29tcChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewogICAgIGV4cHJfdHkga2V5LCB2YWx1ZTsKICAgICBhc2RsX3NlcSAqY29tcHM7CisgICAgaW50IGkgPSAwOwogCi0gICAgYXNzZXJ0KE5DSChuKSA+IDMpOwotICAgIFJFUShDSElMRChuLCAxKSwgQ09MT04pOwotCi0gICAga2V5ID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDApKTsKLSAgICBpZiAoIWtleSkKKyAgICBpZiAoIWFzdF9mb3JfZGljdGVsZW1lbnQoYywgbiwgJmksICZrZXksICZ2YWx1ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHZhbHVlID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDIpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBhc3NlcnQoa2V5KTsKKyAgICBhc3NlcnQoTkNIKG4pIC0gaSA+PSAxKTsKIAotICAgIGNvbXBzID0gYXN0X2Zvcl9jb21wcmVoZW5zaW9uKGMsIENISUxEKG4sIDMpKTsKKyAgICBjb21wcyA9IGFzdF9mb3JfY29tcHJlaGVuc2lvbihjLCBDSElMRChuLCBpKSk7CiAgICAgaWYgKCFjb21wcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE3NzksNiArMTkxMCwzOSBAQAogfQogCiBzdGF0aWMgZXhwcl90eQorYXN0X2Zvcl9kaWN0ZGlzcGxheShzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQoreworICAgIGludCBpOworICAgIGludCBqOworICAgIGludCBzaXplOworICAgIGFzZGxfc2VxICprZXlzLCAqdmFsdWVzOworCisgICAgc2l6ZSA9IChOQ0gobikgKyAxKSAvIDM7IC8qICsxIGluIGNhc2Ugbm8gdHJhaWxpbmcgY29tbWEgKi8KKyAgICBrZXlzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICBpZiAoIWtleXMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICBpZiAoIXZhbHVlcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBqID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpKyspIHsKKyAgICAgICAgZXhwcl90eSBrZXksIHZhbHVlOworCisgICAgICAgIGlmICghYXN0X2Zvcl9kaWN0ZWxlbWVudChjLCBuLCAmaSwgJmtleSwgJnZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBhc2RsX3NlcV9TRVQoa2V5cywgaiwga2V5KTsKKyAgICAgICAgYXNkbF9zZXFfU0VUKHZhbHVlcywgaiwgdmFsdWUpOworCisgICAgICAgIGorKzsKKyAgICB9CisgICAga2V5cy0+c2l6ZSA9IGo7CisgICAgdmFsdWVzLT5zaXplID0gajsKKyAgICByZXR1cm4gRGljdChrZXlzLCB2YWx1ZXMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKK30KKworc3RhdGljIGV4cHJfdHkKIGFzdF9mb3JfZ2VuZXhwKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCiB7CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gKHRlc3RsaXN0X2NvbXApIHx8IFRZUEUobikgPT0gKGFyZ3VtZW50KSk7CkBAIC0xNzk5LDYgKzE5NjMsMjcgQEAKICAgICByZXR1cm4gYXN0X2Zvcl9pdGVyY29tcChjLCBuLCBDT01QX1NFVENPTVApOwogfQogCitzdGF0aWMgZXhwcl90eQorYXN0X2Zvcl9zZXRkaXNwbGF5KHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCit7CisgICAgaW50IGk7CisgICAgaW50IHNpemU7CisgICAgYXNkbF9zZXEgKmVsdHM7CisKKyAgICBhc3NlcnQoVFlQRShuKSA9PSAoZGljdG9yc2V0bWFrZXIpKTsKKyAgICBzaXplID0gKE5DSChuKSArIDEpIC8gMjsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLworICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgIGlmICghZWx0cykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7CisgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKKyAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpKSk7CisgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBhc2RsX3NlcV9TRVQoZWx0cywgaSAvIDIsIGV4cHJlc3Npb24pOworICAgIH0KKyAgICByZXR1cm4gU2V0KGVsdHMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKK30KIAogc3RhdGljIGV4cHJfdHkKIGFzdF9mb3JfYXRvbShzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQpAQCAtMTkwOSw2MiArMjA5NCw0OCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9saXN0Y29tcChjLCBjaCk7CiAgICAgY2FzZSBMQlJBQ0U6IHsKLSAgICAgICAgLyogZGljdG9yc2V0bWFrZXI6IHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10gfAotICAgICAgICAgKiAgICAgICAgICAgICAgICAgdGVzdCAoZ2VuX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddKSAgKi8KLSAgICAgICAgaW50IGksIHNpemU7Ci0gICAgICAgIGFzZGxfc2VxICprZXlzLCAqdmFsdWVzOwotCisgICAgICAgIC8qIGRpY3RvcnNldG1ha2VyOiAoICgodGVzdCAnOicgdGVzdCB8ICcqKicgdGVzdCkKKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgIChjb21wX2ZvciB8ICgnLCcgKHRlc3QgJzonIHRlc3QgfCAnKionIHRlc3QpKSogWycsJ10pKSB8CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICgodGVzdCB8ICcqJyB0ZXN0KQorICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgKGNvbXBfZm9yIHwgKCcsJyAodGVzdCB8ICcqJyB0ZXN0KSkqIFsnLCddKSkgKSAqLworICAgICAgICBleHByX3R5IHJlczsKICAgICAgICAgY2ggPSBDSElMRChuLCAxKTsKICAgICAgICAgaWYgKFRZUEUoY2gpID09IFJCUkFDRSkgewotICAgICAgICAgICAgLyogaXQncyBhbiBlbXB0eSBkaWN0ICovCisgICAgICAgICAgICAvKiBJdCdzIGFuIGVtcHR5IGRpY3QuICovCiAgICAgICAgICAgICByZXR1cm4gRGljdChOVUxMLCBOVUxMLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoTkNIKGNoKSA9PSAxIHx8IFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBDT01NQSkgewotICAgICAgICAgICAgLyogaXQncyBhIHNpbXBsZSBzZXQgKi8KLSAgICAgICAgICAgIGFzZGxfc2VxICplbHRzOwotICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyAyOyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKLSAgICAgICAgICAgIGlmICghZWx0cykKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0goY2gpOyBpICs9IDIpIHsKLSAgICAgICAgICAgICAgICBleHByX3R5IGV4cHJlc3Npb247Ci0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgaSkpOwotICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGVsdHMsIGkgLyAyLCBleHByZXNzaW9uKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBpc19kaWN0ID0gKFRZUEUoQ0hJTEQoY2gsIDApKSA9PSBET1VCTEVTVEFSKTsKKyAgICAgICAgICAgIGlmIChOQ0goY2gpID09IDEgfHwKKyAgICAgICAgICAgICAgICAgICAgKE5DSChjaCkgPiAxICYmCisgICAgICAgICAgICAgICAgICAgICBUWVBFKENISUxEKGNoLCAxKSkgPT0gQ09NTUEpKSB7CisgICAgICAgICAgICAgICAgLyogSXQncyBhIHNldCBkaXNwbGF5LiAqLworICAgICAgICAgICAgICAgIHJlcyA9IGFzdF9mb3Jfc2V0ZGlzcGxheShjLCBjaCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gU2V0KGVsdHMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKLSAgICAgICAgfSBlbHNlIGlmIChUWVBFKENISUxEKGNoLCAxKSkgPT0gY29tcF9mb3IpIHsKLSAgICAgICAgICAgIC8qIGl0J3MgYSBzZXQgY29tcHJlaGVuc2lvbiAqLwotICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3Jfc2V0Y29tcChjLCBjaCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoTkNIKGNoKSA+IDMgJiYgVFlQRShDSElMRChjaCwgMykpID09IGNvbXBfZm9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9kaWN0Y29tcChjLCBjaCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBpdCdzIGEgZGljdCAqLwotICAgICAgICAgICAgc2l6ZSA9IChOQ0goY2gpICsgMSkgLyA0OyAvKiArMSBpbiBjYXNlIG5vIHRyYWlsaW5nIGNvbW1hICovCi0gICAgICAgICAgICBrZXlzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKLSAgICAgICAgICAgIGlmICgha2V5cykKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKLSAgICAgICAgICAgIGlmICghdmFsdWVzKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKGNoKTsgaSArPSA0KSB7Ci0gICAgICAgICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uOwotCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgaSkpOwotICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoa2V5cywgaSAvIDQsIGV4cHJlc3Npb24pOwotCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgaSArIDIpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKHZhbHVlcywgaSAvIDQsIGV4cHJlc3Npb24pOworICAgICAgICAgICAgZWxzZSBpZiAoTkNIKGNoKSA+IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgVFlQRShDSElMRChjaCwgMSkpID09IGNvbXBfZm9yKSB7CisgICAgICAgICAgICAgICAgLyogSXQncyBhIHNldCBjb21wcmVoZW5zaW9uLiAqLworICAgICAgICAgICAgICAgIHJlcyA9IGFzdF9mb3Jfc2V0Y29tcChjLCBjaCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gRGljdChrZXlzLCB2YWx1ZXMsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKE5DSChjaCkgPiAzIC0gaXNfZGljdCAmJgorICAgICAgICAgICAgICAgICAgICBUWVBFKENISUxEKGNoLCAzIC0gaXNfZGljdCkpID09IGNvbXBfZm9yKSB7CisgICAgICAgICAgICAgICAgLyogSXQncyBhIGRpY3Rpb25hcnkgY29tcHJlaGVuc2lvbi4gKi8KKyAgICAgICAgICAgICAgICBpZiAoaXNfZGljdCkgeworICAgICAgICAgICAgICAgICAgICBhc3RfZXJyb3IoYywgbiwgImRpY3QgdW5wYWNraW5nIGNhbm5vdCBiZSB1c2VkIGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGljdCBjb21wcmVoZW5zaW9uIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXMgPSBhc3RfZm9yX2RpY3Rjb21wKGMsIGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEl0J3MgYSBkaWN0aW9uYXJ5IGRpc3BsYXkuICovCisgICAgICAgICAgICAgICAgcmVzID0gYXN0X2Zvcl9kaWN0ZGlzcGxheShjLCBjaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVzKSB7CisgICAgICAgICAgICAgICAgcmVzLT5saW5lbm8gPSBMSU5FTk8obik7CisgICAgICAgICAgICAgICAgcmVzLT5jb2xfb2Zmc2V0ID0gbi0+bl9jb2xfb2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgfQogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtMjEwMCw3ICsyMjcxLDcgQEAKICAgICBSRVEobiwgdHJhaWxlcik7CiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IExQQVIpIHsKICAgICAgICAgaWYgKE5DSChuKSA9PSAyKQotICAgICAgICAgICAgcmV0dXJuIENhbGwobGVmdF9leHByLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBMSU5FTk8obiksCisgICAgICAgICAgICByZXR1cm4gQ2FsbChsZWZ0X2V4cHIsIE5VTEwsIE5VTEwsIExJTkVOTyhuKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMSksIGxlZnRfZXhwcik7CkBAIC0yMTkyLDE5ICsyMzYzLDI5IEBACiB9CiAKIHN0YXRpYyBleHByX3R5Ci1hc3RfZm9yX3Bvd2VyKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCithc3RfZm9yX2F0b21fZXhwcihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewotICAgIC8qIHBvd2VyOiBhdG9tIHRyYWlsZXIqICgnKionIGZhY3RvcikqCi0gICAgICovCi0gICAgaW50IGk7CisgICAgaW50IGksIG5jaCwgc3RhcnQgPSAwOwogICAgIGV4cHJfdHkgZSwgdG1wOwotICAgIFJFUShuLCBwb3dlcik7Ci0gICAgZSA9IGFzdF9mb3JfYXRvbShjLCBDSElMRChuLCAwKSk7CisKKyAgICBSRVEobiwgYXRvbV9leHByKTsKKyAgICBuY2ggPSBOQ0gobik7CisKKyAgICBpZiAoVFlQRShDSElMRChuLCAwKSkgPT0gQVdBSVQpIHsKKyAgICAgICAgc3RhcnQgPSAxOworICAgICAgICBhc3NlcnQobmNoID4gMSk7CisgICAgfQorCisgICAgZSA9IGFzdF9mb3JfYXRvbShjLCBDSElMRChuLCBzdGFydCkpOwogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKE5DSChuKSA9PSAxKQorICAgIGlmIChuY2ggPT0gMSkKICAgICAgICAgcmV0dXJuIGU7Ci0gICAgZm9yIChpID0gMTsgaSA8IE5DSChuKTsgaSsrKSB7CisgICAgaWYgKHN0YXJ0ICYmIG5jaCA9PSAyKSB7CisgICAgICAgIHJldHVybiBBd2FpdChlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgfQorCisgICAgZm9yIChpID0gc3RhcnQgKyAxOyBpIDwgbmNoOyBpKyspIHsKICAgICAgICAgbm9kZSAqY2ggPSBDSElMRChuLCBpKTsKICAgICAgICAgaWYgKFRZUEUoY2gpICE9IHRyYWlsZXIpCiAgICAgICAgICAgICBicmVhazsKQEAgLTIyMTUsNiArMjM5NiwyOCBAQAogICAgICAgICB0bXAtPmNvbF9vZmZzZXQgPSBlLT5jb2xfb2Zmc2V0OwogICAgICAgICBlID0gdG1wOwogICAgIH0KKworICAgIGlmIChzdGFydCkgeworICAgICAgICAvKiB0aGVyZSB3YXMgYW4gQVdBSVQgKi8KKyAgICAgICAgcmV0dXJuIEF3YWl0KGUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBlOworICAgIH0KK30KKworc3RhdGljIGV4cHJfdHkKK2FzdF9mb3JfcG93ZXIoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKK3sKKyAgICAvKiBwb3dlcjogYXRvbSB0cmFpbGVyKiAoJyoqJyBmYWN0b3IpKgorICAgICAqLworICAgIGV4cHJfdHkgZTsKKyAgICBSRVEobiwgcG93ZXIpOworICAgIGUgPSBhc3RfZm9yX2F0b21fZXhwcihjLCBDSElMRChuLCAwKSk7CisgICAgaWYgKCFlKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoTkNIKG4pID09IDEpCisgICAgICAgIHJldHVybiBlOwogICAgIGlmIChUWVBFKENISUxEKG4sIE5DSChuKSAtIDEpKSA9PSBmYWN0b3IpIHsKICAgICAgICAgZXhwcl90eSBmID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIE5DSChuKSAtIDEpKTsKICAgICAgICAgaWYgKCFmKQpAQCAtMjI1Nyw5ICsyNDYwLDExIEBACiAgICAgICAgYW5kX2V4cHI6IHNoaWZ0X2V4cHIgKCcmJyBzaGlmdF9leHByKSoKICAgICAgICBzaGlmdF9leHByOiBhcml0aF9leHByICgoJzw8J3wnPj4nKSBhcml0aF9leHByKSoKICAgICAgICBhcml0aF9leHByOiB0ZXJtICgoJysnfCctJykgdGVybSkqCi0gICAgICAgdGVybTogZmFjdG9yICgoJyonfCcvJ3wnJSd8Jy8vJykgZmFjdG9yKSoKKyAgICAgICB0ZXJtOiBmYWN0b3IgKCgnKid8J0AnfCcvJ3wnJSd8Jy8vJykgZmFjdG9yKSoKICAgICAgICBmYWN0b3I6ICgnKyd8Jy0nfCd+JykgZmFjdG9yIHwgcG93ZXIKLSAgICAgICBwb3dlcjogYXRvbSB0cmFpbGVyKiAoJyoqJyBmYWN0b3IpKgorICAgICAgIHBvd2VyOiBhdG9tX2V4cHIgWycqKicgZmFjdG9yXQorICAgICAgIGF0b21fZXhwcjogW0FXQUlUXSBhdG9tIHRyYWlsZXIqCisgICAgICAgeWllbGRfZXhwcjogJ3lpZWxkJyBbeWllbGRfYXJnXQogICAgICovCiAKICAgICBhc2RsX3NlcSAqc2VxOwpAQCAtMjQwOSwxNSArMjYxNCwxNCBAQAogYXN0X2Zvcl9jYWxsKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4sIGV4cHJfdHkgZnVuYykKIHsKICAgICAvKgotICAgICAgYXJnbGlzdDogKGFyZ3VtZW50ICcsJykqIChhcmd1bWVudCBbJywnXXwgJyonIHRlc3QgWycsJyAnKionIHRlc3RdCi0gICAgICAgICAgICAgICB8ICcqKicgdGVzdCkKLSAgICAgIGFyZ3VtZW50OiBbdGVzdCAnPSddICh0ZXN0KSBbY29tcF9mb3JdICAgICAgICAjIFJlYWxseSBba2V5d29yZCAnPSddIHRlc3QKKyAgICAgIGFyZ2xpc3Q6IGFyZ3VtZW50ICgnLCcgYXJndW1lbnQpKiAgWycsJ10KKyAgICAgIGFyZ3VtZW50OiAoIHRlc3QgW2NvbXBfZm9yXSB8ICcqJyB0ZXN0IHwgdGVzdCAnPScgdGVzdCB8ICcqKicgdGVzdCApCiAgICAgKi8KIAogICAgIGludCBpLCBuYXJncywgbmtleXdvcmRzLCBuZ2VuczsKKyAgICBpbnQgbmRvdWJsZXN0YXJzOwogICAgIGFzZGxfc2VxICphcmdzOwogICAgIGFzZGxfc2VxICprZXl3b3JkczsKLSAgICBleHByX3R5IHZhcmFyZyA9IE5VTEwsIGt3YXJnID0gTlVMTDsKIAogICAgIFJFUShuLCBhcmdsaXN0KTsKIApAQCAtMjQzMSw3ICsyNjM1LDEwIEBACiAgICAgICAgICAgICAgICAgbmFyZ3MrKzsKICAgICAgICAgICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBjb21wX2ZvcikKICAgICAgICAgICAgICAgICBuZ2VucysrOworICAgICAgICAgICAgZWxzZSBpZiAoVFlQRShDSElMRChjaCwgMCkpID09IFNUQVIpCisgICAgICAgICAgICAgICAgbmFyZ3MrKzsKICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAvKiBUWVBFKENISUxEKGNoLCAwKSkgPT0gRE9VQkxFU1RBUiBvciBrZXl3b3JkIGFyZ3VtZW50ICovCiAgICAgICAgICAgICAgICAgbmtleXdvcmRzKys7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDUyLDQxICsyNjU5LDgxIEBACiAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KG5rZXl3b3JkcywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFrZXl3b3JkcykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbmFyZ3MgPSAwOwotICAgIG5rZXl3b3JkcyA9IDA7CisKKyAgICBuYXJncyA9IDA7ICAvKiBwb3NpdGlvbmFsIGFyZ3VtZW50cyArIGl0ZXJhYmxlIGFyZ3VtZW50IHVucGFja2luZ3MgKi8KKyAgICBua2V5d29yZHMgPSAwOyAgLyoga2V5d29yZCBhcmd1bWVudHMgKyBrZXl3b3JkIGFyZ3VtZW50IHVucGFja2luZ3MgKi8KKyAgICBuZG91Ymxlc3RhcnMgPSAwOyAgLyoganVzdCBrZXl3b3JkIGFyZ3VtZW50IHVucGFja2luZ3MgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpKyspIHsKICAgICAgICAgbm9kZSAqY2ggPSBDSElMRChuLCBpKTsKICAgICAgICAgaWYgKFRZUEUoY2gpID09IGFyZ3VtZW50KSB7CiAgICAgICAgICAgICBleHByX3R5IGU7CisgICAgICAgICAgICBub2RlICpjaGNoID0gQ0hJTEQoY2gsIDApOwogICAgICAgICAgICAgaWYgKE5DSChjaCkgPT0gMSkgeworICAgICAgICAgICAgICAgIC8qIGEgcG9zaXRpb25hbCBhcmd1bWVudCAqLwogICAgICAgICAgICAgICAgIGlmIChua2V5d29yZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKGMsIENISUxEKGNoLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub24ta2V5d29yZCBhcmcgYWZ0ZXIga2V5d29yZCBhcmciKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5kb3VibGVzdGFycykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKGMsIGNoY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbmFsIGFyZ3VtZW50IGZvbGxvd3MgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZCBhcmd1bWVudCB1bnBhY2tpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjLCBjaGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb25hbCBhcmd1bWVudCBmb2xsb3dzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmQgYXJndW1lbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHZhcmFyZykgewotICAgICAgICAgICAgICAgICAgICBhc3RfZXJyb3IoYywgQ0hJTEQoY2gsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkgbmFtZWQgYXJndW1lbnRzIG1heSBmb2xsb3cgKmV4cHJlc3Npb24iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGUgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDApKTsKKyAgICAgICAgICAgICAgICBlID0gYXN0X2Zvcl9leHByKGMsIGNoY2gpOwogICAgICAgICAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFyZ3MsIG5hcmdzKyssIGUpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoVFlQRShjaGNoKSA9PSBTVEFSKSB7CisgICAgICAgICAgICAgICAgLyogYW4gaXRlcmFibGUgYXJndW1lbnQgdW5wYWNraW5nICovCisgICAgICAgICAgICAgICAgZXhwcl90eSBzdGFycmVkOworICAgICAgICAgICAgICAgIGlmIChuZG91Ymxlc3RhcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKGMsIGNoY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhYmxlIGFyZ3VtZW50IHVucGFja2luZyBmb2xsb3dzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZCBhcmd1bWVudCB1bnBhY2tpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGUgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDEpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIHN0YXJyZWQgPSBTdGFycmVkKGUsIExvYWQsIExJTkVOTyhjaGNoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoY2gtPm5fY29sX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIGlmICghc3RhcnJlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFyZ3MsIG5hcmdzKyssIHN0YXJyZWQpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChUWVBFKGNoY2gpID09IERPVUJMRVNUQVIpIHsKKyAgICAgICAgICAgICAgICAvKiBhIGtleXdvcmQgYXJndW1lbnQgdW5wYWNraW5nICovCisgICAgICAgICAgICAgICAga2V5d29yZF90eSBrdzsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgZSA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMSkpOworICAgICAgICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAga3cgPSBrZXl3b3JkKE5VTEwsIGUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChrZXl3b3JkcywgbmtleXdvcmRzKyssIGt3KTsKKyAgICAgICAgICAgICAgICBuZG91Ymxlc3RhcnMrKzsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQoY2gsIDEpKSA9PSBjb21wX2ZvcikgeworICAgICAgICAgICAgICAgIC8qIHRoZSBsb25lIGdlbmVyYXRvciBleHByZXNzaW9uICovCiAgICAgICAgICAgICAgICAgZSA9IGFzdF9mb3JfZ2VuZXhwKGMsIGNoKTsKICAgICAgICAgICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChhcmdzLCBuYXJncysrLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGEga2V5d29yZCBhcmd1bWVudCAqLwogICAgICAgICAgICAgICAgIGtleXdvcmRfdHkga3c7CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllciBrZXksIHRtcDsKICAgICAgICAgICAgICAgICBpbnQgazsKIAotICAgICAgICAgICAgICAgIC8qIENISUxEKGNoLCAwKSBpcyB0ZXN0LCBidXQgbXVzdCBiZSBhbiBpZGVudGlmaWVyPyAqLwotICAgICAgICAgICAgICAgIGUgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDApKTsKKyAgICAgICAgICAgICAgICAvKiBjaGNoIGlzIHRlc3QsIGJ1dCBtdXN0IGJlIGFuIGlkZW50aWZpZXI/ICovCisgICAgICAgICAgICAgICAgZSA9IGFzdF9mb3JfZXhwcihjLCBjaGNoKTsKICAgICAgICAgICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIC8qIGYobGFtYmRhIHg6IHhbMF0gPSAzKSBlbmRzIHVwIGdldHRpbmcgcGFyc2VkIHdpdGgKQEAgLTI0OTUsMTkgKzI3NDIsMjQgQEAKICAgICAgICAgICAgICAgICAgKiB0aGVuIGlzIHZlcnkgY29uZnVzaW5nLgogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGlmIChlLT5raW5kID09IExhbWJkYV9raW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjLCBDSElMRChjaCwgMCksICJsYW1iZGEgY2Fubm90IGNvbnRhaW4gYXNzaWdubWVudCIpOworICAgICAgICAgICAgICAgICAgICBhc3RfZXJyb3IoYywgY2hjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFtYmRhIGNhbm5vdCBjb250YWluIGFzc2lnbm1lbnQiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5raW5kICE9IE5hbWVfa2luZCkgewotICAgICAgICAgICAgICAgICAgICBhc3RfZXJyb3IoYywgQ0hJTEQoY2gsIDApLCAia2V5d29yZCBjYW4ndCBiZSBhbiBleHByZXNzaW9uIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmtpbmQgIT0gTmFtZV9raW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjLCBjaGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JiaWRkZW5fbmFtZShjLCBlLT52Lk5hbWUuaWQsIGNoLCAxKSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JiaWRkZW5fbmFtZShjLCBlLT52Lk5hbWUuaWQsIGNoLCAxKSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAga2V5ID0gZS0+di5OYW1lLmlkOwogICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBua2V5d29yZHM7IGsrKykgewogICAgICAgICAgICAgICAgICAgICB0bXAgPSAoKGtleXdvcmRfdHkpYXNkbF9zZXFfR0VUKGtleXdvcmRzLCBrKSktPmFyZzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ29tcGFyZSh0bXAsIGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjLCBDSElMRChjaCwgMCksICJrZXl3b3JkIGFyZ3VtZW50IHJlcGVhdGVkIik7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgIVB5VW5pY29kZV9Db21wYXJlKHRtcCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXN0X2Vycm9yKGMsIGNoY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50IHJlcGVhdGVkIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI1MjAsMjEgKzI3NzIsOSBAQAogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChrZXl3b3JkcywgbmtleXdvcmRzKyssIGt3KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChUWVBFKGNoKSA9PSBTVEFSKSB7Ci0gICAgICAgICAgICB2YXJhcmcgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgaSsxKSk7Ci0gICAgICAgICAgICBpZiAoIXZhcmFyZykKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChUWVBFKGNoKSA9PSBET1VCTEVTVEFSKSB7Ci0gICAgICAgICAgICBrd2FyZyA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpKzEpKTsKLSAgICAgICAgICAgIGlmICgha3dhcmcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gQ2FsbChmdW5jLCBhcmdzLCBrZXl3b3JkcywgdmFyYXJnLCBrd2FyZywgZnVuYy0+bGluZW5vLCBmdW5jLT5jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICByZXR1cm4gQ2FsbChmdW5jLCBhcmdzLCBrZXl3b3JkcywgZnVuYy0+bGluZW5vLCBmdW5jLT5jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKIH0KIAogc3RhdGljIGV4cHJfdHkKQEAgLTI1NjgsNyArMjgwOCw3IEBACiAgICAgLyogZXhwcl9zdG10OiB0ZXN0bGlzdF9zdGFyX2V4cHIgKGF1Z2Fzc2lnbiAoeWllbGRfZXhwcnx0ZXN0bGlzdCkKICAgICAgICAgICAgICAgICB8ICgnPScgKHlpZWxkX2V4cHJ8dGVzdGxpc3QpKSopCiAgICAgICAgdGVzdGxpc3Rfc3Rhcl9leHByOiAodGVzdHxzdGFyX2V4cHIpICgnLCcgdGVzdHxzdGFyX2V4cHIpKiBbJywnXQotICAgICAgIGF1Z2Fzc2lnbjogJys9JyB8ICctPScgfCAnKj0nIHwgJy89JyB8ICclPScgfCAnJj0nIHwgJ3w9JyB8ICdePScKKyAgICAgICBhdWdhc3NpZ246ICcrPScgfCAnLT0nIHwgJyo9JyB8ICdAPScgfCAnLz0nIHwgJyU9JyB8ICcmPScgfCAnfD0nIHwgJ149JwogICAgICAgICAgICAgICAgIHwgJzw8PScgfCAnPj49JyB8ICcqKj0nIHwgJy8vPScKICAgICAgICB0ZXN0OiAuLi4gaGVyZSBzdGFydHMgdGhlIG9wZXJhdG9yIHByZWNlbmRlbmNlIGRhbmNlCiAgICAgICovCkBAIC0zMjg4LDcgKzM1MjgsNyBAQAogfQogCiBzdGF0aWMgc3RtdF90eQotYXN0X2Zvcl9mb3Jfc3RtdChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQorYXN0X2Zvcl9mb3Jfc3RtdChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBpbnQgaXNfYXN5bmMpCiB7CiAgICAgYXNkbF9zZXEgKl90YXJnZXQsICpzZXEgPSBOVUxMLCAqc3VpdGVfc2VxOwogICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKQEAgLTMzMjIsOCArMzU2MiwxNCBAQAogICAgIGlmICghc3VpdGVfc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBGb3IodGFyZ2V0LCBleHByZXNzaW9uLCBzdWl0ZV9zZXEsIHNlcSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsCi0gICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKKyAgICBpZiAoaXNfYXN5bmMpCisgICAgICAgIHJldHVybiBBc3luY0Zvcih0YXJnZXQsIGV4cHJlc3Npb24sIHN1aXRlX3NlcSwgc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBGb3IodGFyZ2V0LCBleHByZXNzaW9uLCBzdWl0ZV9zZXEsIHNlcSwKKyAgICAgICAgICAgICAgICAgICBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKIH0KIAogc3RhdGljIGV4Y2VwdGhhbmRsZXJfdHkKQEAgLTM0NzAsNyArMzcxNiw3IEBACiAKIC8qIHdpdGhfc3RtdDogJ3dpdGgnIHdpdGhfaXRlbSAoJywnIHdpdGhfaXRlbSkqICc6JyBzdWl0ZSAqLwogc3RhdGljIHN0bXRfdHkKLWFzdF9mb3Jfd2l0aF9zdG10KHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCithc3RfZm9yX3dpdGhfc3RtdChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBpbnQgaXNfYXN5bmMpCiB7CiAgICAgaW50IGksIG5faXRlbXM7CiAgICAgYXNkbF9zZXEgKml0ZW1zLCAqYm9keTsKQEAgLTM0OTIsNyArMzczOCwxMCBAQAogICAgIGlmICghYm9keSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gV2l0aChpdGVtcywgYm9keSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgIGlmIChpc19hc3luYykKKyAgICAgICAgcmV0dXJuIEFzeW5jV2l0aChpdGVtcywgYm9keSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdpdGgoaXRlbXMsIGJvZHksIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKIH0KIAogc3RhdGljIHN0bXRfdHkKQEAgLTM1MTQsOCArMzc2Myw4IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGNsYXNzbmFtZSwgQ0hJTEQobiwgMyksIDApKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJldHVybiBDbGFzc0RlZihjbGFzc25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIHMsIGRlY29yYXRvcl9zZXEsCi0gICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIHJldHVybiBDbGFzc0RlZihjbGFzc25hbWUsIE5VTEwsIE5VTEwsIHMsIGRlY29yYXRvcl9zZXEsIExJTkVOTyhuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogCiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMykpID09IFJQQVIpIHsgLyogY2xhc3MgTkFNRSAnKCcgJyknICc6JyBzdWl0ZSAqLwpAQCAtMzUyNyw4ICszNzc2LDggQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgY2xhc3NuYW1lLCBDSElMRChuLCAzKSwgMCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmV0dXJuIENsYXNzRGVmKGNsYXNzbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgcywgZGVjb3JhdG9yX3NlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgcmV0dXJuIENsYXNzRGVmKGNsYXNzbmFtZSwgTlVMTCwgTlVMTCwgcywgZGVjb3JhdG9yX3NlcSwgTElORU5PKG4pLAorICAgICAgICAgICAgICAgICAgICAgICAgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAKICAgICAvKiBjbGFzcyBOQU1FICcoJyBhcmdsaXN0ICcpJyAnOicgc3VpdGUgKi8KQEAgLTM1NTMsOCArMzgwMiw3IEBACiAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGNsYXNzbmFtZSwgQ0hJTEQobiwgMSksIDApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBDbGFzc0RlZihjbGFzc25hbWUsIGNhbGwtPnYuQ2FsbC5hcmdzLCBjYWxsLT52LkNhbGwua2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgIGNhbGwtPnYuQ2FsbC5zdGFyYXJncywgY2FsbC0+di5DYWxsLmt3YXJncywgcywKKyAgICByZXR1cm4gQ2xhc3NEZWYoY2xhc3NuYW1lLCBjYWxsLT52LkNhbGwuYXJncywgY2FsbC0+di5DYWxsLmtleXdvcmRzLCBzLAogICAgICAgICAgICAgICAgICAgICBkZWNvcmF0b3Jfc2VxLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiB9CiAKQEAgLTM2MDAsNyArMzg0OCw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBjb21wb3VuZF9zdG10OiBpZl9zdG10IHwgd2hpbGVfc3RtdCB8IGZvcl9zdG10IHwgdHJ5X3N0bXQKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZiB8IGNsYXNzZGVmIHwgZGVjb3JhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWYgfCBjbGFzc2RlZiB8IGRlY29yYXRlZCB8IGFzeW5jX3N0bXQKICAgICAgICAgKi8KICAgICAgICAgbm9kZSAqY2ggPSBDSElMRChuLCAwKTsKICAgICAgICAgUkVRKG4sIGNvbXBvdW5kX3N0bXQpOwpAQCAtMzYxMCwxNyArMzg1OCwxOSBAQAogICAgICAgICAgICAgY2FzZSB3aGlsZV9zdG10OgogICAgICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX3doaWxlX3N0bXQoYywgY2gpOwogICAgICAgICAgICAgY2FzZSBmb3Jfc3RtdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9mb3Jfc3RtdChjLCBjaCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfZm9yX3N0bXQoYywgY2gsIDApOwogICAgICAgICAgICAgY2FzZSB0cnlfc3RtdDoKICAgICAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl90cnlfc3RtdChjLCBjaCk7CiAgICAgICAgICAgICBjYXNlIHdpdGhfc3RtdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl93aXRoX3N0bXQoYywgY2gpOworICAgICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX3dpdGhfc3RtdChjLCBjaCwgMCk7CiAgICAgICAgICAgICBjYXNlIGZ1bmNkZWY6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfZnVuY2RlZihjLCBjaCwgTlVMTCk7CiAgICAgICAgICAgICBjYXNlIGNsYXNzZGVmOgogICAgICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2NsYXNzZGVmKGMsIGNoLCBOVUxMKTsKICAgICAgICAgICAgIGNhc2UgZGVjb3JhdGVkOgogICAgICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2RlY29yYXRlZChjLCBjaCk7CisgICAgICAgICAgICBjYXNlIGFzeW5jX3N0bXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfYXN5bmNfc3RtdChjLCBjaCk7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaGFuZGxlZCBzbWFsbF9zdG10OiBUWVBFPSVkIE5DSD0lZFxuIiwKZGlmZiAtLWdpdCBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jIGIvUHl0aG9uL2JsdGlubW9kdWxlLmMKaW5kZXggNTMwMDllMy4uZWVkZDdjMyAxMDA2NDQKLS0tIGEvUHl0aG9uL2JsdGlubW9kdWxlLmMKKysrIGIvUHl0aG9uL2JsdGlubW9kdWxlLmMKQEAgLTQ2LDEzICs0NiwxNiBAQAogX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKIF9QeV9JREVOVElGSUVSKHN0ZGVycik7CiAKKyNpbmNsdWRlICJjbGluaWMvYmx0aW5tb2R1bGUuYy5oIgorCisvKiBBQzogY2Fubm90IGNvbnZlcnQgeWV0LCB3YWl0aW5nIGZvciAqYXJncyBzdXBwb3J0ICovCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9fX2J1aWxkX2NsYXNzX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqZnVuYywgKm5hbWUsICpiYXNlcywgKm1rdywgKm1ldGEsICp3aW5uZXIsICpwcmVwLCAqbnMsICpjZWxsOwogICAgIFB5T2JqZWN0ICpjbHMgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbmFyZ3M7Ci0gICAgaW50IGlzY2xhc3M7CisgICAgaW50IGlzY2xhc3MgPSAwOyAgIC8qIGluaXRpYWxpemUgdG8gcHJldmVudCBnY2Mgd2FybmluZyAqLwogCiAgICAgYXNzZXJ0KGFyZ3MgIT0gTlVMTCk7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CkBAIC0yMjksMjUgKzIzMiw0MiBAQAogaXMgdGhlIG51bWJlciBvZiBwYXJlbnQgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG1vZHVsZS4iKTsKIAogCisvKltjbGluaWMgaW5wdXRdCithYnMgYXMgYnVpbHRpbl9hYnMKKworICAgIHg6IG9iamVjdAorICAgIC8KKworUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2FicyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCitidWlsdGluX2FicyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqeCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iMWI0MzNiOWU1MTM1NmY1IGlucHV0PWJlZDRjYTE0ZTI5YzIwZDFdKi8KIHsKLSAgICByZXR1cm4gUHlOdW1iZXJfQWJzb2x1dGUodik7CisgICAgcmV0dXJuIFB5TnVtYmVyX0Fic29sdXRlKHgpOwogfQogCi1QeURvY19TVFJWQVIoYWJzX2RvYywKLSJhYnMobnVtYmVyKSAtPiBudW1iZXJcblwKLVxuXAotUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQuIik7CisvKltjbGluaWMgaW5wdXRdCithbGwgYXMgYnVpbHRpbl9hbGwKKworICAgIGl0ZXJhYmxlOiBvYmplY3QKKyAgICAvCisKK1JldHVybiBUcnVlIGlmIGJvb2woeCkgaXMgVHJ1ZSBmb3IgYWxsIHZhbHVlcyB4IGluIHRoZSBpdGVyYWJsZS4KKworSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5LCByZXR1cm4gVHJ1ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ1aWx0aW5fYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK2J1aWx0aW5fYWxsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICppdGVyYWJsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jYTJhNzEyNzI3NmY3OWIzIGlucHV0PTFhN2M1ZDFiYzM0MzhhMjFdKi8KIHsKICAgICBQeU9iamVjdCAqaXQsICppdGVtOwogICAgIFB5T2JqZWN0ICooKml0ZXJuZXh0KShQeU9iamVjdCAqKTsKICAgICBpbnQgY21wOwogCi0gICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKHYpOworICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGl0ZXJuZXh0ID0gKlB5X1RZUEUoaXQpLT50cF9pdGVybmV4dDsKQEAgLTI3NywyMCArMjk3LDI2IEBACiAgICAgUHlfUkVUVVJOX1RSVUU7CiB9CiAKLVB5RG9jX1NUUlZBUihhbGxfZG9jLAotImFsbChpdGVyYWJsZSkgLT4gYm9vbFxuXAotXG5cCi1SZXR1cm4gVHJ1ZSBpZiBib29sKHgpIGlzIFRydWUgZm9yIGFsbCB2YWx1ZXMgeCBpbiB0aGUgaXRlcmFibGUuXG5cCi1JZiB0aGUgaXRlcmFibGUgaXMgZW1wdHksIHJldHVybiBUcnVlLiIpOworLypbY2xpbmljIGlucHV0XQorYW55IGFzIGJ1aWx0aW5fYW55CisKKyAgICBpdGVyYWJsZTogb2JqZWN0CisgICAgLworCitSZXR1cm4gVHJ1ZSBpZiBib29sKHgpIGlzIFRydWUgZm9yIGFueSB4IGluIHRoZSBpdGVyYWJsZS4KKworSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5LCByZXR1cm4gRmFsc2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2FueShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCitidWlsdGluX2FueShQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqaXRlcmFibGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmE2NTY4NDc0OGNhYTYwZSBpbnB1dD00MWQ3NDUxYzIzMzg0ZjI0XSovCiB7CiAgICAgUHlPYmplY3QgKml0LCAqaXRlbTsKICAgICBQeU9iamVjdCAqKCppdGVybmV4dCkoUHlPYmplY3QgKik7CiAgICAgaW50IGNtcDsKIAotICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKKyAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOwogICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpdGVybmV4dCA9ICpQeV9UWVBFKGl0KS0+dHBfaXRlcm5leHQ7CkBAIC0zMjAsNTYgKzM0Niw2NyBAQAogICAgIFB5X1JFVFVSTl9GQUxTRTsKIH0KIAotUHlEb2NfU1RSVkFSKGFueV9kb2MsCi0iYW55KGl0ZXJhYmxlKSAtPiBib29sXG5cCi1cblwKLVJldHVybiBUcnVlIGlmIGJvb2woeCkgaXMgVHJ1ZSBmb3IgYW55IHggaW4gdGhlIGl0ZXJhYmxlLlxuXAotSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5LCByZXR1cm4gRmFsc2UuIik7CisvKltjbGluaWMgaW5wdXRdCithc2NpaSBhcyBidWlsdGluX2FzY2lpCisKKyAgICBvYmo6IG9iamVjdAorICAgIC8KKworUmV0dXJuIGFuIEFTQ0lJLW9ubHkgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LgorCitBcyByZXByKCksIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nIGEgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuCitvYmplY3QsIGJ1dCBlc2NhcGUgdGhlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkKK3JlcHIoKSB1c2luZyBcXHgsIFxcdSBvciBcXFUgZXNjYXBlcy4gVGhpcyBnZW5lcmF0ZXMgYSBzdHJpbmcgc2ltaWxhcgordG8gdGhhdCByZXR1cm5lZCBieSByZXByKCkgaW4gUHl0aG9uIDIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2FzY2lpKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK2J1aWx0aW5fYXNjaWkoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02ZDM3YjNmMDk4NGM3ZWI5IGlucHV0PTRjNjI3MzJlMWIzYTNjYzldKi8KIHsKLSAgICByZXR1cm4gUHlPYmplY3RfQVNDSUkodik7CisgICAgcmV0dXJuIFB5T2JqZWN0X0FTQ0lJKG9iaik7CiB9CiAKLVB5RG9jX1NUUlZBUihhc2NpaV9kb2MsCi0iYXNjaWkob2JqZWN0KSAtPiBzdHJpbmdcblwKLVxuXAotQXMgcmVwcigpLCByZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyBhIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhblxuXAotb2JqZWN0LCBidXQgZXNjYXBlIHRoZSBub24tQVNDSUkgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5XG5cCi1yZXByKCkgdXNpbmcgXFx4LCBcXHUgb3IgXFxVIGVzY2FwZXMuICBUaGlzIGdlbmVyYXRlcyBhIHN0cmluZyBzaW1pbGFyXG5cCi10byB0aGF0IHJldHVybmVkIGJ5IHJlcHIoKSBpbiBQeXRob24gMi4iKTsKIAorLypbY2xpbmljIGlucHV0XQorYmluIGFzIGJ1aWx0aW5fYmluCisKKyAgICBudW1iZXI6IG9iamVjdAorICAgIC8KKworUmV0dXJuIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4KKworICAgPj4+IGJpbigyNzk2MjAyKQorICAgJzBiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCcKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ1aWx0aW5fYmluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK2J1aWx0aW5fYmluKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpudW1iZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjZmYzRhZDVlNjQ5ZjRmNyBpbnB1dD01M2Y4YTAyNjRiYWNhZjkwXSovCiB7Ci0gICAgcmV0dXJuIFB5TnVtYmVyX1RvQmFzZSh2LCAyKTsKKyAgICByZXR1cm4gUHlOdW1iZXJfVG9CYXNlKG51bWJlciwgMik7CiB9CiAKLVB5RG9jX1NUUlZBUihiaW5fZG9jLAotImJpbihudW1iZXIpIC0+IHN0cmluZ1xuXAotXG5cCi1SZXR1cm4gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAotXG5cCi0gICA+Pj4gYmluKDI3OTYyMDIpXG5cCi0gICAnMGIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwJ1xuXAotIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NhbGxhYmxlIGFzIGJ1aWx0aW5fY2FsbGFibGUKKworICAgIG9iajogb2JqZWN0CisgICAgLworCitSZXR1cm4gd2hldGhlciB0aGUgb2JqZWN0IGlzIGNhbGxhYmxlIChpLmUuLCBzb21lIGtpbmQgb2YgZnVuY3Rpb24pLgorCitOb3RlIHRoYXQgY2xhc3NlcyBhcmUgY2FsbGFibGUsIGFzIGFyZSBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aXRoIGEKK19fY2FsbF9fKCkgbWV0aG9kLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9jYWxsYWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCitidWlsdGluX2NhbGxhYmxlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpvYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MmIwOTVkNTlkOTM0Y2I3ZSBpbnB1dD0xNDIzYmFiOTljYzQxZjU4XSovCiB7Ci0gICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygobG9uZylQeUNhbGxhYmxlX0NoZWNrKHYpKTsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKVB5Q2FsbGFibGVfQ2hlY2sob2JqKSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjYWxsYWJsZV9kb2MsCi0iY2FsbGFibGUob2JqZWN0KSAtPiBib29sXG5cCi1cblwKLVJldHVybiB3aGV0aGVyIHRoZSBvYmplY3QgaXMgY2FsbGFibGUgKGkuZS4sIHNvbWUga2luZCBvZiBmdW5jdGlvbikuXG5cCi1Ob3RlIHRoYXQgY2xhc3NlcyBhcmUgY2FsbGFibGUsIGFzIGFyZSBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aXRoIGFcblwKLV9fY2FsbF9fKCkgbWV0aG9kLiIpOwotCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC01MjQsNDAgKzU2MSw0MSBAQAogfTsKIAogCisvKltjbGluaWMgaW5wdXRdCitmb3JtYXQgYXMgYnVpbHRpbl9mb3JtYXQKKworICAgIHZhbHVlOiBvYmplY3QKKyAgICBmb3JtYXRfc3BlYzogdW5pY29kZShjX2RlZmF1bHQ9Ik5VTEwiKSA9ICcnCisgICAgLworCitSZXR1cm4gdmFsdWUuX19mb3JtYXRfXyhmb3JtYXRfc3BlYykKKworZm9ybWF0X3NwZWMgZGVmYXVsdHMgdG8gdGhlIGVtcHR5IHN0cmluZworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9mb3JtYXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnVpbHRpbl9mb3JtYXRfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICpmb3JtYXRfc3BlYykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yZjQwYmRmYTQ5NTRiMDc3IGlucHV0PTYzMjVlNzUxYTFiMjliODZdKi8KIHsKLSAgICBQeU9iamVjdCAqdmFsdWU7Ci0gICAgUHlPYmplY3QgKmZvcm1hdF9zcGVjID0gTlVMTDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xVOmZvcm1hdCIsICZ2YWx1ZSwgJmZvcm1hdF9zcGVjKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICByZXR1cm4gUHlPYmplY3RfRm9ybWF0KHZhbHVlLCBmb3JtYXRfc3BlYyk7CiB9CiAKLVB5RG9jX1NUUlZBUihmb3JtYXRfZG9jLAotImZvcm1hdCh2YWx1ZVssIGZvcm1hdF9zcGVjXSkgLT4gc3RyaW5nXG5cCi1cblwKLVJldHVybnMgdmFsdWUuX19mb3JtYXRfXyhmb3JtYXRfc3BlYylcblwKLWZvcm1hdF9zcGVjIGRlZmF1bHRzIHRvIFwiXCIiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2NociBhcyBidWlsdGluX2NocgorCisgICAgaTogaW50CisgICAgLworCitSZXR1cm4gYSBVbmljb2RlIHN0cmluZyBvZiBvbmUgY2hhcmFjdGVyIHdpdGggb3JkaW5hbCBpOyAwIDw9IGkgPD0gMHgxMGZmZmYuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2NocihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitidWlsdGluX2Nocl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBpKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWM3MzNhZmNkMjAwYWZjYjcgaW5wdXQ9M2Y2MDRlZjQ1YTcwNzUwZF0qLwogewotICAgIGludCB4OwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmNociIsICZ4KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21PcmRpbmFsKHgpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbU9yZGluYWwoaSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjaHJfZG9jLAotImNocihpKSAtPiBVbmljb2RlIGNoYXJhY3RlclxuXAotXG5cCi1SZXR1cm4gYSBVbmljb2RlIHN0cmluZyBvZiBvbmUgY2hhcmFjdGVyIHdpdGggb3JkaW5hbCBpOyAwIDw9IGkgPD0gMHgxMGZmZmYuIik7Ci0KIAogc3RhdGljIGNvbnN0IGNoYXIgKgogc291cmNlX2FzX3N0cmluZyhQeU9iamVjdCAqY21kLCBjb25zdCBjaGFyICpmdW5jbmFtZSwgY29uc3QgY2hhciAqd2hhdCwgUHlDb21waWxlckZsYWdzICpjZiwgUHlPYmplY3QgKipjbWRfY29weSkKQEAgLTU5OSw4ICs2MzcsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoc3RybGVuKHN0cikgIT0gc2l6ZSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgIGlmIChzdHJsZW4oc3RyKSAhPSAoc2l6ZV90KXNpemUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIGNvZGUgc3RyaW5nIGNhbm5vdCBjb250YWluIG51bGwgYnl0ZXMiKTsKICAgICAgICAgUHlfQ0xFQVIoKmNtZF9jb3B5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02MDgsMzUgKzY0Niw0NyBAQAogICAgIHJldHVybiBzdHI7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NvbXBpbGUgYXMgYnVpbHRpbl9jb21waWxlCisKKyAgICBzb3VyY2U6IG9iamVjdAorICAgIGZpbGVuYW1lOiBvYmplY3QoY29udmVydGVyPSJQeVVuaWNvZGVfRlNEZWNvZGVyIikKKyAgICBtb2RlOiBzdHIKKyAgICBmbGFnczogaW50ID0gMAorICAgIGRvbnRfaW5oZXJpdDogaW50KGNfZGVmYXVsdD0iMCIpID0gRmFsc2UKKyAgICBvcHRpbWl6ZTogaW50ID0gLTEKKworQ29tcGlsZSBzb3VyY2UgaW50byBhIGNvZGUgb2JqZWN0IHRoYXQgY2FuIGJlIGV4ZWN1dGVkIGJ5IGV4ZWMoKSBvciBldmFsKCkuCisKK1RoZSBzb3VyY2UgY29kZSBtYXkgcmVwcmVzZW50IGEgUHl0aG9uIG1vZHVsZSwgc3RhdGVtZW50IG9yIGV4cHJlc3Npb24uCitUaGUgZmlsZW5hbWUgd2lsbCBiZSB1c2VkIGZvciBydW4tdGltZSBlcnJvciBtZXNzYWdlcy4KK1RoZSBtb2RlIG11c3QgYmUgJ2V4ZWMnIHRvIGNvbXBpbGUgYSBtb2R1bGUsICdzaW5nbGUnIHRvIGNvbXBpbGUgYQorc2luZ2xlIChpbnRlcmFjdGl2ZSkgc3RhdGVtZW50LCBvciAnZXZhbCcgdG8gY29tcGlsZSBhbiBleHByZXNzaW9uLgorVGhlIGZsYWdzIGFyZ3VtZW50LCBpZiBwcmVzZW50LCBjb250cm9scyB3aGljaCBmdXR1cmUgc3RhdGVtZW50cyBpbmZsdWVuY2UKK3RoZSBjb21waWxhdGlvbiBvZiB0aGUgY29kZS4KK1RoZSBkb250X2luaGVyaXQgYXJndW1lbnQsIGlmIHRydWUsIHN0b3BzIHRoZSBjb21waWxhdGlvbiBpbmhlcml0aW5nCit0aGUgZWZmZWN0cyBvZiBhbnkgZnV0dXJlIHN0YXRlbWVudHMgaW4gZWZmZWN0IGluIHRoZSBjb2RlIGNhbGxpbmcKK2NvbXBpbGU7IGlmIGFic2VudCBvciBmYWxzZSB0aGVzZSBzdGF0ZW1lbnRzIGRvIGluZmx1ZW5jZSB0aGUgY29tcGlsYXRpb24sCitpbiBhZGRpdGlvbiB0byBhbnkgZmVhdHVyZXMgZXhwbGljaXRseSBzcGVjaWZpZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2NvbXBpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK2J1aWx0aW5fY29tcGlsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzb3VyY2UsIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUsIGludCBmbGFncywgaW50IGRvbnRfaW5oZXJpdCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xZmExNzZlMzM0NTJiYjYzIGlucHV0PTlkNTNlOGNmYjNjODY0MTRdKi8KIHsKLSAgICBQeU9iamVjdCAqY21kX2NvcHk7CisgICAgUHlPYmplY3QgKnNvdXJjZV9jb3B5OwogICAgIGNvbnN0IGNoYXIgKnN0cjsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWU7Ci0gICAgY2hhciAqc3RhcnRzdHI7Ci0gICAgaW50IG1vZGUgPSAtMTsKLSAgICBpbnQgZG9udF9pbmhlcml0ID0gMDsKLSAgICBpbnQgc3VwcGxpZWRfZmxhZ3MgPSAwOwotICAgIGludCBvcHRpbWl6ZSA9IC0xOworICAgIGludCBjb21waWxlX21vZGUgPSAtMTsKICAgICBpbnQgaXNfYXN0OwogICAgIFB5Q29tcGlsZXJGbGFncyBjZjsKLSAgICBQeU9iamVjdCAqY21kOwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic291cmNlIiwgImZpbGVuYW1lIiwgIm1vZGUiLCAiZmxhZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9udF9pbmhlcml0IiwgIm9wdGltaXplIiwgTlVMTH07CiAgICAgaW50IHN0YXJ0W10gPSB7UHlfZmlsZV9pbnB1dCwgUHlfZXZhbF9pbnB1dCwgUHlfc2luZ2xlX2lucHV0fTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJnN8aWlpOmNvbXBpbGUiLCAga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHN0ciwgJnN1cHBsaWVkX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb250X2luaGVyaXQsICZvcHRpbWl6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGNmLmNmX2ZsYWdzID0gZmxhZ3MgfCBQeUNGX1NPVVJDRV9JU19VVEY4OwogCi0gICAgY2YuY2ZfZmxhZ3MgPSBzdXBwbGllZF9mbGFncyB8IFB5Q0ZfU09VUkNFX0lTX1VURjg7Ci0KLSAgICBpZiAoc3VwcGxpZWRfZmxhZ3MgJgorICAgIGlmIChmbGFncyAmCiAgICAgICAgIH4oUHlDRl9NQVNLIHwgUHlDRl9NQVNLX09CU09MRVRFIHwgUHlDRl9ET05UX0lNUExZX0RFREVOVCB8IFB5Q0ZfT05MWV9BU1QpKQogICAgIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC02NTUsMjUgKzcwNSwyNSBAQAogICAgICAgICBQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzKCZjZik7CiAgICAgfQogCi0gICAgaWYgKHN0cmNtcChzdGFydHN0ciwgImV4ZWMiKSA9PSAwKQotICAgICAgICBtb2RlID0gMDsKLSAgICBlbHNlIGlmIChzdHJjbXAoc3RhcnRzdHIsICJldmFsIikgPT0gMCkKLSAgICAgICAgbW9kZSA9IDE7Ci0gICAgZWxzZSBpZiAoc3RyY21wKHN0YXJ0c3RyLCAic2luZ2xlIikgPT0gMCkKLSAgICAgICAgbW9kZSA9IDI7CisgICAgaWYgKHN0cmNtcChtb2RlLCAiZXhlYyIpID09IDApCisgICAgICAgIGNvbXBpbGVfbW9kZSA9IDA7CisgICAgZWxzZSBpZiAoc3RyY21wKG1vZGUsICJldmFsIikgPT0gMCkKKyAgICAgICAgY29tcGlsZV9tb2RlID0gMTsKKyAgICBlbHNlIGlmIChzdHJjbXAobW9kZSwgInNpbmdsZSIpID09IDApCisgICAgICAgIGNvbXBpbGVfbW9kZSA9IDI7CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBpbGUoKSBhcmcgMyBtdXN0IGJlICdleGVjJywgJ2V2YWwnIG9yICdzaW5nbGUnIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGlsZSgpIG1vZGUgbXVzdCBiZSAnZXhlYycsICdldmFsJyBvciAnc2luZ2xlJyIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGlzX2FzdCA9IFB5QVNUX0NoZWNrKGNtZCk7CisgICAgaXNfYXN0ID0gUHlBU1RfQ2hlY2soc291cmNlKTsKICAgICBpZiAoaXNfYXN0ID09IC0xKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmIChpc19hc3QpIHsKLSAgICAgICAgaWYgKHN1cHBsaWVkX2ZsYWdzICYgUHlDRl9PTkxZX0FTVCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGNtZCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBjbWQ7CisgICAgICAgIGlmIChmbGFncyAmIFB5Q0ZfT05MWV9BU1QpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzb3VyY2UpOworICAgICAgICAgICAgcmVzdWx0ID0gc291cmNlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmE7CkBAIC02ODIsNyArNzMyLDcgQEAKICAgICAgICAgICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKICAgICAgICAgICAgIGlmIChhcmVuYSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBtb2QgPSBQeUFTVF9vYmoybW9kKGNtZCwgYXJlbmEsIG1vZGUpOworICAgICAgICAgICAgbW9kID0gUHlBU1Rfb2JqMm1vZChzb3VyY2UsIGFyZW5hLCBjb21waWxlX21vZGUpOwogICAgICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtNjk4LDEyICs3NDgsMTIgQEAKICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIH0KIAotICAgIHN0ciA9IHNvdXJjZV9hc19zdHJpbmcoY21kLCAiY29tcGlsZSIsICJzdHJpbmcsIGJ5dGVzIG9yIEFTVCIsICZjZiwgJmNtZF9jb3B5KTsKKyAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKHNvdXJjZSwgImNvbXBpbGUiLCAic3RyaW5nLCBieXRlcyBvciBBU1QiLCAmY2YsICZzb3VyY2VfY29weSk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgcmVzdWx0ID0gUHlfQ29tcGlsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydFttb2RlXSwgJmNmLCBvcHRpbWl6ZSk7Ci0gICAgUHlfWERFQ1JFRihjbWRfY29weSk7CisgICAgcmVzdWx0ID0gUHlfQ29tcGlsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydFtjb21waWxlX21vZGVdLCAmY2YsIG9wdGltaXplKTsKKyAgICBQeV9YREVDUkVGKHNvdXJjZV9jb3B5KTsKICAgICBnb3RvIGZpbmFsbHk7CiAKIGVycm9yOgpAQCAtNzEzLDIxICs3NjMsNyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21waWxlX2RvYywKLSJjb21waWxlKHNvdXJjZSwgZmlsZW5hbWUsIG1vZGVbLCBmbGFnc1ssIGRvbnRfaW5oZXJpdF1dKSAtPiBjb2RlIG9iamVjdFxuXAotXG5cCi1Db21waWxlIHRoZSBzb3VyY2UgKGEgUHl0aG9uIG1vZHVsZSwgc3RhdGVtZW50IG9yIGV4cHJlc3Npb24pXG5cCi1pbnRvIGEgY29kZSBvYmplY3QgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgYnkgZXhlYygpIG9yIGV2YWwoKS5cblwKLVRoZSBmaWxlbmFtZSB3aWxsIGJlIHVzZWQgZm9yIHJ1bi10aW1lIGVycm9yIG1lc3NhZ2VzLlxuXAotVGhlIG1vZGUgbXVzdCBiZSAnZXhlYycgdG8gY29tcGlsZSBhIG1vZHVsZSwgJ3NpbmdsZScgdG8gY29tcGlsZSBhXG5cCi1zaW5nbGUgKGludGVyYWN0aXZlKSBzdGF0ZW1lbnQsIG9yICdldmFsJyB0byBjb21waWxlIGFuIGV4cHJlc3Npb24uXG5cCi1UaGUgZmxhZ3MgYXJndW1lbnQsIGlmIHByZXNlbnQsIGNvbnRyb2xzIHdoaWNoIGZ1dHVyZSBzdGF0ZW1lbnRzIGluZmx1ZW5jZVxuXAotdGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBjb2RlLlxuXAotVGhlIGRvbnRfaW5oZXJpdCBhcmd1bWVudCwgaWYgbm9uLXplcm8sIHN0b3BzIHRoZSBjb21waWxhdGlvbiBpbmhlcml0aW5nXG5cCi10aGUgZWZmZWN0cyBvZiBhbnkgZnV0dXJlIHN0YXRlbWVudHMgaW4gZWZmZWN0IGluIHRoZSBjb2RlIGNhbGxpbmdcblwKLWNvbXBpbGU7IGlmIGFic2VudCBvciB6ZXJvIHRoZXNlIHN0YXRlbWVudHMgZG8gaW5mbHVlbmNlIHRoZSBjb21waWxhdGlvbixcblwKLWluIGFkZGl0aW9uIHRvIGFueSBmZWF0dXJlcyBleHBsaWNpdGx5IHNwZWNpZmllZC4iKTsKLQorLyogQUM6IGNhbm5vdCBjb252ZXJ0IHlldCwgYXMgbmVlZHMgUEVQIDQ1NyBncm91cCBzdXBwb3J0IGluIGluc3BlY3QgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX2RpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC03NTIsMzIgKzc4OCw1MCBAQAogIiAgZm9yIGFueSBvdGhlciBvYmplY3Q6IGl0cyBhdHRyaWJ1dGVzLCBpdHMgY2xhc3MncyBhdHRyaWJ1dGVzLCBhbmRcbiIKICIgICAgcmVjdXJzaXZlbHkgdGhlIGF0dHJpYnV0ZXMgb2YgaXRzIGNsYXNzJ3MgYmFzZSBjbGFzc2VzLiIpOwogCi1zdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9kaXZtb2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICp2LCAqdzsKKy8qW2NsaW5pYyBpbnB1dF0KK2Rpdm1vZCBhcyBidWlsdGluX2Rpdm1vZAogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZGl2bW9kIiwgMiwgMiwgJnYsICZ3KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TnVtYmVyX0Rpdm1vZCh2LCB3KTsKKyAgICB4OiBvYmplY3QKKyAgICB5OiBvYmplY3QKKyAgICAvCisKK1JldHVybiB0aGUgdHVwbGUgKHgvL3ksIHgleSkuICBJbnZhcmlhbnQ6IGRpdip5ICsgbW9kID09IHguCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2Rpdm1vZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iMDZkOGE1ZjZlMGM3NDVlIGlucHV0PTE3NWFkOWM4NGZmNDFhODVdKi8KK3sKKyAgICByZXR1cm4gUHlOdW1iZXJfRGl2bW9kKHgsIHkpOwogfQogCi1QeURvY19TVFJWQVIoZGl2bW9kX2RvYywKLSJkaXZtb2QoeCwgeSkgLT4gKGRpdiwgbW9kKVxuXAotXG5cCi1SZXR1cm4gdGhlIHR1cGxlICgoeC14JXkpL3ksIHgleSkuICBJbnZhcmlhbnQ6IGRpdip5ICsgbW9kID09IHguIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2V2YWwgYXMgYnVpbHRpbl9ldmFsCisKKyAgICBzb3VyY2U6IG9iamVjdAorICAgIGdsb2JhbHM6IG9iamVjdCA9IE5vbmUKKyAgICBsb2NhbHM6IG9iamVjdCA9IE5vbmUKKyAgICAvCisKK0V2YWx1YXRlIHRoZSBnaXZlbiBzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgZ2xvYmFscyBhbmQgbG9jYWxzLgorCitUaGUgc291cmNlIG1heSBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBQeXRob24gZXhwcmVzc2lvbgorb3IgYSBjb2RlIG9iamVjdCBhcyByZXR1cm5lZCBieSBjb21waWxlKCkuCitUaGUgZ2xvYmFscyBtdXN0IGJlIGEgZGljdGlvbmFyeSBhbmQgbG9jYWxzIGNhbiBiZSBhbnkgbWFwcGluZywKK2RlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgZ2xvYmFscyBhbmQgbG9jYWxzLgorSWYgb25seSBnbG9iYWxzIGlzIGdpdmVuLCBsb2NhbHMgZGVmYXVsdHMgdG8gaXQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2V2YWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnVpbHRpbl9ldmFsX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnNvdXJjZSwgUHlPYmplY3QgKmdsb2JhbHMsCisgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbG9jYWxzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBhMDgyNGFhNzAwOTMxMTYgaW5wdXQ9MTFlZTcxOGE4NjQwZTUyN10qLwogewotICAgIFB5T2JqZWN0ICpjbWQsICpyZXN1bHQsICpjbWRfY29weTsKLSAgICBQeU9iamVjdCAqZ2xvYmFscyA9IFB5X05vbmUsICpsb2NhbHMgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpyZXN1bHQsICpzb3VyY2VfY29weTsKICAgICBjb25zdCBjaGFyICpzdHI7CiAgICAgUHlDb21waWxlckZsYWdzIGNmOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZXZhbCIsIDEsIDMsICZjbWQsICZnbG9iYWxzLCAmbG9jYWxzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGxvY2FscyAhPSBQeV9Ob25lICYmICFQeU1hcHBpbmdfQ2hlY2sobG9jYWxzKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibG9jYWxzIG11c3QgYmUgYSBtYXBwaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODEyLDE3ICs4NjYsMTcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChQeUNvZGVfQ2hlY2soY21kKSkgewotICAgICAgICBpZiAoUHlDb2RlX0dldE51bUZyZWUoKFB5Q29kZU9iamVjdCAqKWNtZCkgPiAwKSB7CisgICAgaWYgKFB5Q29kZV9DaGVjayhzb3VyY2UpKSB7CisgICAgICAgIGlmIChQeUNvZGVfR2V0TnVtRnJlZSgoUHlDb2RlT2JqZWN0ICopc291cmNlKSA+IDApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICJjb2RlIG9iamVjdCBwYXNzZWQgdG8gZXZhbCgpIG1heSBub3QgY29udGFpbiBmcmVlIHZhcmlhYmxlcyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5RXZhbF9FdmFsQ29kZShjbWQsIGdsb2JhbHMsIGxvY2Fscyk7CisgICAgICAgIHJldHVybiBQeUV2YWxfRXZhbENvZGUoc291cmNlLCBnbG9iYWxzLCBsb2NhbHMpOwogICAgIH0KIAogICAgIGNmLmNmX2ZsYWdzID0gUHlDRl9TT1VSQ0VfSVNfVVRGODsKLSAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKGNtZCwgImV2YWwiLCAic3RyaW5nLCBieXRlcyBvciBjb2RlIiwgJmNmLCAmY21kX2NvcHkpOworICAgIHN0ciA9IHNvdXJjZV9hc19zdHJpbmcoc291cmNlLCAiZXZhbCIsICJzdHJpbmcsIGJ5dGVzIG9yIGNvZGUiLCAmY2YsICZzb3VyY2VfY29weSk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtODMxLDI4ICs4ODUsMzMgQEAKIAogICAgICh2b2lkKVB5RXZhbF9NZXJnZUNvbXBpbGVyRmxhZ3MoJmNmKTsKICAgICByZXN1bHQgPSBQeVJ1bl9TdHJpbmdGbGFncyhzdHIsIFB5X2V2YWxfaW5wdXQsIGdsb2JhbHMsIGxvY2FscywgJmNmKTsKLSAgICBQeV9YREVDUkVGKGNtZF9jb3B5KTsKKyAgICBQeV9YREVDUkVGKHNvdXJjZV9jb3B5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QeURvY19TVFJWQVIoZXZhbF9kb2MsCi0iZXZhbChzb3VyY2VbLCBnbG9iYWxzWywgbG9jYWxzXV0pIC0+IHZhbHVlXG5cCi1cblwKLUV2YWx1YXRlIHRoZSBzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgZ2xvYmFscyBhbmQgbG9jYWxzLlxuXAotVGhlIHNvdXJjZSBtYXkgYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgUHl0aG9uIGV4cHJlc3Npb25cblwKLW9yIGEgY29kZSBvYmplY3QgYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpLlxuXAotVGhlIGdsb2JhbHMgbXVzdCBiZSBhIGRpY3Rpb25hcnkgYW5kIGxvY2FscyBjYW4gYmUgYW55IG1hcHBpbmcsXG5cCi1kZWZhdWx0aW5nIHRvIHRoZSBjdXJyZW50IGdsb2JhbHMgYW5kIGxvY2Fscy5cblwKLUlmIG9ubHkgZ2xvYmFscyBpcyBnaXZlbiwgbG9jYWxzIGRlZmF1bHRzIHRvIGl0LlxuIik7CisvKltjbGluaWMgaW5wdXRdCitleGVjIGFzIGJ1aWx0aW5fZXhlYworCisgICAgc291cmNlOiBvYmplY3QKKyAgICBnbG9iYWxzOiBvYmplY3QgPSBOb25lCisgICAgbG9jYWxzOiBvYmplY3QgPSBOb25lCisgICAgLworCitFeGVjdXRlIHRoZSBnaXZlbiBzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgZ2xvYmFscyBhbmQgbG9jYWxzLgorCitUaGUgc291cmNlIG1heSBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgb25lIG9yIG1vcmUgUHl0aG9uIHN0YXRlbWVudHMKK29yIGEgY29kZSBvYmplY3QgYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpLgorVGhlIGdsb2JhbHMgbXVzdCBiZSBhIGRpY3Rpb25hcnkgYW5kIGxvY2FscyBjYW4gYmUgYW55IG1hcHBpbmcsCitkZWZhdWx0aW5nIHRvIHRoZSBjdXJyZW50IGdsb2JhbHMgYW5kIGxvY2Fscy4KK0lmIG9ubHkgZ2xvYmFscyBpcyBnaXZlbiwgbG9jYWxzIGRlZmF1bHRzIHRvIGl0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9leGVjKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J1aWx0aW5fZXhlY19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzb3VyY2UsIFB5T2JqZWN0ICpnbG9iYWxzLAorICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxvY2FscykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zYzkwZWZjNmFiNjhlZjVkIGlucHV0PTAxY2EzZTFjMDE2OTI4MjldKi8KIHsKICAgICBQeU9iamVjdCAqdjsKLSAgICBQeU9iamVjdCAqcHJvZywgKmdsb2JhbHMgPSBQeV9Ob25lLCAqbG9jYWxzID0gUHlfTm9uZTsKLQotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImV4ZWMiLCAxLCAzLCAmcHJvZywgJmdsb2JhbHMsICZsb2NhbHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChnbG9iYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgZ2xvYmFscyA9IFB5RXZhbF9HZXRHbG9iYWxzKCk7CkBAIC04NzEsMTMgKzkzMCwxMyBAQAogICAgICAgICBsb2NhbHMgPSBnbG9iYWxzOwogCiAgICAgaWYgKCFQeURpY3RfQ2hlY2soZ2xvYmFscykpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImV4ZWMoKSBhcmcgMiBtdXN0IGJlIGEgZGljdCwgbm90ICUuMTAwcyIsCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJleGVjKCkgZ2xvYmFscyBtdXN0IGJlIGEgZGljdCwgbm90ICUuMTAwcyIsCiAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICghUHlNYXBwaW5nX0NoZWNrKGxvY2FscykpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJhcmcgMyBtdXN0IGJlIGEgbWFwcGluZyBvciBOb25lLCBub3QgJS4xMDBzIiwKKyAgICAgICAgICAgICJsb2NhbHMgbXVzdCBiZSBhIG1hcHBpbmcgb3IgTm9uZSwgbm90ICUuMTAwcyIsCiAgICAgICAgICAgICBsb2NhbHMtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC04ODcsMjMgKzk0NiwyMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKFB5Q29kZV9DaGVjayhwcm9nKSkgewotICAgICAgICBpZiAoUHlDb2RlX0dldE51bUZyZWUoKFB5Q29kZU9iamVjdCAqKXByb2cpID4gMCkgeworICAgIGlmIChQeUNvZGVfQ2hlY2soc291cmNlKSkgeworICAgICAgICBpZiAoUHlDb2RlX0dldE51bUZyZWUoKFB5Q29kZU9iamVjdCAqKXNvdXJjZSkgPiAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICJjb2RlIG9iamVjdCBwYXNzZWQgdG8gZXhlYygpIG1heSBub3QgIgogICAgICAgICAgICAgICAgICJjb250YWluIGZyZWUgdmFyaWFibGVzIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICB2ID0gUHlFdmFsX0V2YWxDb2RlKHByb2csIGdsb2JhbHMsIGxvY2Fscyk7CisgICAgICAgIHYgPSBQeUV2YWxfRXZhbENvZGUoc291cmNlLCBnbG9iYWxzLCBsb2NhbHMpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKnByb2dfY29weTsKKyAgICAgICAgUHlPYmplY3QgKnNvdXJjZV9jb3B5OwogICAgICAgICBjb25zdCBjaGFyICpzdHI7CiAgICAgICAgIFB5Q29tcGlsZXJGbGFncyBjZjsKICAgICAgICAgY2YuY2ZfZmxhZ3MgPSBQeUNGX1NPVVJDRV9JU19VVEY4OwotICAgICAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKHByb2csICJleGVjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nLCBieXRlcyBvciBjb2RlIiwgJmNmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9nX2NvcHkpOworICAgICAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKHNvdXJjZSwgImV4ZWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgYnl0ZXMgb3IgY29kZSIsICZjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2VfY29weSk7CiAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFncygmY2YpKQpAQCAtOTExLDcgKzk3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzLCAmY2YpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2ID0gUHlSdW5fU3RyaW5nKHN0ciwgUHlfZmlsZV9pbnB1dCwgZ2xvYmFscywgbG9jYWxzKTsKLSAgICAgICAgUHlfWERFQ1JFRihwcm9nX2NvcHkpOworICAgICAgICBQeV9YREVDUkVGKHNvdXJjZV9jb3B5KTsKICAgICB9CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05MTksMTUgKzk3OCw4IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihleGVjX2RvYywKLSJleGVjKG9iamVjdFssIGdsb2JhbHNbLCBsb2NhbHNdXSlcblwKLVxuXAotUmVhZCBhbmQgZXhlY3V0ZSBjb2RlIGZyb20gYW4gb2JqZWN0LCB3aGljaCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBjb2RlXG5cCi1vYmplY3QuXG5cCi1UaGUgZ2xvYmFscyBhbmQgbG9jYWxzIGFyZSBkaWN0aW9uYXJpZXMsIGRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnRcblwKLWdsb2JhbHMgYW5kIGxvY2Fscy4gIElmIG9ubHkgZ2xvYmFscyBpcyBnaXZlbiwgbG9jYWxzIGRlZmF1bHRzIHRvIGl0LiIpOwogCi0KKy8qIEFDOiBjYW5ub3QgY29udmVydCB5ZXQsIGFzIG5lZWRzIFBFUCA0NTcgZ3JvdXAgc3VwcG9ydCBpbiBpbnNwZWN0ICovCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9nZXRhdHRyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTk2MSw4ICsxMDEzLDE4IEBACiBleGlzdDsgd2l0aG91dCBpdCwgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbiB0aGF0IGNhc2UuIik7CiAKIAorLypbY2xpbmljIGlucHV0XQorZ2xvYmFscyBhcyBidWlsdGluX2dsb2JhbHMKKworUmV0dXJuIHRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc2NvcGUncyBnbG9iYWwgdmFyaWFibGVzLgorCitOT1RFOiBVcGRhdGVzIHRvIHRoaXMgZGljdGlvbmFyeSAqd2lsbCogYWZmZWN0IG5hbWUgbG9va3VwcyBpbiB0aGUgY3VycmVudAorZ2xvYmFsIHNjb3BlIGFuZCB2aWNlLXZlcnNhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9nbG9iYWxzKFB5T2JqZWN0ICpzZWxmKQorYnVpbHRpbl9nbG9iYWxzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNWRkMTUyNzA2N2I5NGQyIGlucHV0PTkzMjc1NzZmOTJiYjQ4YmFdKi8KIHsKICAgICBQeU9iamVjdCAqZDsKIApAQCAtOTcxLDI2ICsxMDMzLDMxIEBACiAgICAgcmV0dXJuIGQ7CiB9CiAKLVB5RG9jX1NUUlZBUihnbG9iYWxzX2RvYywKLSJnbG9iYWxzKCkgLT4gZGljdGlvbmFyeVxuXAotXG5cCi1SZXR1cm4gdGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY3VycmVudCBzY29wZSdzIGdsb2JhbCB2YXJpYWJsZXMuIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2hhc2F0dHIgYXMgYnVpbHRpbl9oYXNhdHRyCisKKyAgICBvYmo6IG9iamVjdAorICAgIG5hbWU6IG9iamVjdAorICAgIC8KKworUmV0dXJuIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYW4gYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisKK1RoaXMgaXMgZG9uZSBieSBjYWxsaW5nIGdldGF0dHIob2JqLCBuYW1lKSBhbmQgY2F0Y2hpbmcgQXR0cmlidXRlRXJyb3IuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2hhc2F0dHIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnVpbHRpbl9oYXNhdHRyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTdhZmYyMDkwYTQxNTFlNSBpbnB1dD0wZmFlYzk3ODdkOTc5NTQyXSovCiB7CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgUHlPYmplY3QgKm5hbWU7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJoYXNhdHRyIiwgMiwgMiwgJnYsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobmFtZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNhdHRyKCk6IGF0dHJpYnV0ZSBuYW1lIG11c3QgYmUgc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICB2ID0gUHlPYmplY3RfR2V0QXR0cih2LCBuYW1lKTsKKyAgICB2ID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWUpOwogICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMTAwMiwyNSArMTA2OSwzMSBAQAogICAgIFB5X1JFVFVSTl9UUlVFOwogfQogCi1QeURvY19TVFJWQVIoaGFzYXR0cl9kb2MsCi0iaGFzYXR0cihvYmplY3QsIG5hbWUpIC0+IGJvb2xcblwKLVxuXAotUmV0dXJuIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYW4gYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuXG5cCi0oVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgZ2V0YXR0cihvYmplY3QsIG5hbWUpIGFuZCBjYXRjaGluZyBBdHRyaWJ1dGVFcnJvci4pIik7CiAKKy8qIEFDOiBnZGIncyBpbnRlZ3JhdGlvbiB3aXRoIENQeXRob24gcmVsaWVzIG9uIGJ1aWx0aW5faWQgaGF2aW5nCisgKiB0aGUgKmV4YWN0KiBwYXJhbWV0ZXIgbmFtZXMgb2YgInNlbGYiIGFuZCAidiIsIHNvIHdlIGVuc3VyZSB3ZQorICogcHJlc2VydmUgdGhvc2UgbmFtZSByYXRoZXIgdGhhbiB1c2luZyB0aGUgQUMgZGVmYXVsdHMuCisgKi8KKy8qW2NsaW5pYyBpbnB1dF0KK2lkIGFzIGJ1aWx0aW5faWQKKworICAgIHNlbGY6IHNlbGYodHlwZT0iUHlNb2R1bGVEZWYgKiIpCisgICAgb2JqIGFzIHY6IG9iamVjdAorICAgIC8KKworUmV0dXJuIHRoZSBpZGVudGl0eSBvZiBhbiBvYmplY3QuCisKK1RoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUgYW1vbmcgc2ltdWx0YW5lb3VzbHkgZXhpc3Rpbmcgb2JqZWN0cy4KKyhDUHl0aG9uIHVzZXMgdGhlIG9iamVjdCdzIG1lbW9yeSBhZGRyZXNzLikKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ1aWx0aW5faWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2KQorYnVpbHRpbl9pZChQeU1vZHVsZURlZiAqc2VsZiwgUHlPYmplY3QgKnYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGFhNjQwNzg1ZjY5N2Y2NSBpbnB1dD01YTUzNDEzNjQxOTYzMWY0XSovCiB7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVm9pZFB0cih2KTsKIH0KIAotUHlEb2NfU1RSVkFSKGlkX2RvYywKLSJpZChvYmplY3QpIC0+IGludGVnZXJcblwKLVxuXAotUmV0dXJuIHRoZSBpZGVudGl0eSBvZiBhbiBvYmplY3QuICBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGFtb25nXG5cCi1zaW11bHRhbmVvdXNseSBleGlzdGluZyBvYmplY3RzLiAgKEhpbnQ6IGl0J3MgdGhlIG9iamVjdCdzIG1lbW9yeSBhZGRyZXNzLikiKTsKLQogCiAvKiBtYXAgb2JqZWN0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTE5Myw2ICsxMjY2LDggQEAKICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCisKKy8qIEFDOiBjYW5ub3QgY29udmVydCB5ZXQsIGFzIG5lZWRzIFBFUCA0NTcgZ3JvdXAgc3VwcG9ydCBpbiBpbnNwZWN0ICovCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9uZXh0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTEyMzQsODMgKzEzMDksMTAwIEBACiBpcyBleGhhdXN0ZWQsIGl0IGlzIHJldHVybmVkIGluc3RlYWQgb2YgcmFpc2luZyBTdG9wSXRlcmF0aW9uLiIpOwogCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX3NldGF0dHIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICp2OwotICAgIFB5T2JqZWN0ICpuYW1lOwotICAgIFB5T2JqZWN0ICp2YWx1ZTsKKy8qW2NsaW5pYyBpbnB1dF0KK3NldGF0dHIgYXMgYnVpbHRpbl9zZXRhdHRyCiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRhdHRyIiwgMywgMywgJnYsICZuYW1lLCAmdmFsdWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlPYmplY3RfU2V0QXR0cih2LCBuYW1lLCB2YWx1ZSkgIT0gMCkKKyAgICBvYmo6IG9iamVjdAorICAgIG5hbWU6IG9iamVjdAorICAgIHZhbHVlOiBvYmplY3QKKyAgICAvCisKK1NldHMgdGhlIG5hbWVkIGF0dHJpYnV0ZSBvbiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisKK3NldGF0dHIoeCwgJ3knLCB2KSBpcyBlcXVpdmFsZW50IHRvIGBgeC55ID0gdicnCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX3NldGF0dHJfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYzJjZTFkMWFkZDlhY2I0IGlucHV0PWJkMmI3Y2E2ODc1YTE4OTldKi8KK3sKKyAgICBpZiAoUHlPYmplY3RfU2V0QXR0cihvYmosIG5hbWUsIHZhbHVlKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLVB5RG9jX1NUUlZBUihzZXRhdHRyX2RvYywKLSJzZXRhdHRyKG9iamVjdCwgbmFtZSwgdmFsdWUpXG5cCi1cblwKLVNldCBhIG5hbWVkIGF0dHJpYnV0ZSBvbiBhbiBvYmplY3Q7IHNldGF0dHIoeCwgJ3knLCB2KSBpcyBlcXVpdmFsZW50IHRvXG5cCi1gYHgueSA9IHYnJy4iKTsKIAorLypbY2xpbmljIGlucHV0XQorZGVsYXR0ciBhcyBidWlsdGluX2RlbGF0dHIKKworICAgIG9iajogb2JqZWN0CisgICAgbmFtZTogb2JqZWN0CisgICAgLworCitEZWxldGVzIHRoZSBuYW1lZCBhdHRyaWJ1dGUgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0LgorCitkZWxhdHRyKHgsICd5JykgaXMgZXF1aXZhbGVudCB0byBgYGRlbCB4LnknJworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9kZWxhdHRyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J1aWx0aW5fZGVsYXR0cl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg1MTM0YmM1OGRmZjc5ZmEgaW5wdXQ9ZGIxNjY4NWQ2YjRiOTQxMF0qLwogewotICAgIFB5T2JqZWN0ICp2OwotICAgIFB5T2JqZWN0ICpuYW1lOwotCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZGVsYXR0ciIsIDIsIDIsICZ2LCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeU9iamVjdF9TZXRBdHRyKHYsIG5hbWUsIChQeU9iamVjdCAqKU5VTEwpICE9IDApCisgICAgaWYgKFB5T2JqZWN0X1NldEF0dHIob2JqLCBuYW1lLCAoUHlPYmplY3QgKilOVUxMKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWxhdHRyX2RvYywKLSJkZWxhdHRyKG9iamVjdCwgbmFtZSlcblwKLVxuXAotRGVsZXRlIGEgbmFtZWQgYXR0cmlidXRlIG9uIGFuIG9iamVjdDsgZGVsYXR0cih4LCAneScpIGlzIGVxdWl2YWxlbnQgdG9cblwKLWBgZGVsIHgueScnLiIpOwogCisvKltjbGluaWMgaW5wdXRdCitoYXNoIGFzIGJ1aWx0aW5faGFzaAorCisgICAgb2JqOiBvYmplY3QKKyAgICAvCisKK1JldHVybiB0aGUgaGFzaCB2YWx1ZSBmb3IgdGhlIGdpdmVuIG9iamVjdC4KKworVHdvIG9iamVjdHMgdGhhdCBjb21wYXJlIGVxdWFsIG11c3QgYWxzbyBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWUsIGJ1dCB0aGUKK3JldmVyc2UgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2hhc2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2KQorYnVpbHRpbl9oYXNoKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpvYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjM3NjY4ZTlkNzY4OGRiNyBpbnB1dD01OGM0OGJlODIyYmY5YzU0XSovCiB7CiAgICAgUHlfaGFzaF90IHg7CiAKLSAgICB4ID0gUHlPYmplY3RfSGFzaCh2KTsKKyAgICB4ID0gUHlPYmplY3RfSGFzaChvYmopOwogICAgIGlmICh4ID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHgpOwogfQogCi1QeURvY19TVFJWQVIoaGFzaF9kb2MsCi0iaGFzaChvYmplY3QpIC0+IGludGVnZXJcblwKLVxuXAotUmV0dXJuIGEgaGFzaCB2YWx1ZSBmb3IgdGhlIG9iamVjdC4gIFR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUgdmFsdWUgaGF2ZVxuXAotdGhlIHNhbWUgaGFzaCB2YWx1ZS4gIFRoZSByZXZlcnNlIGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLCBidXQgbGlrZWx5LiIpOwogCisvKltjbGluaWMgaW5wdXRdCitoZXggYXMgYnVpbHRpbl9oZXgKKworICAgIG51bWJlcjogb2JqZWN0CisgICAgLworCitSZXR1cm4gdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuCisKKyAgID4+PiBoZXgoMTI2NDg0MzApCisgICAnMHhjMGZmZWUnCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1idWlsdGluX2hleChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnYpCitidWlsdGluX2hleChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbnVtYmVyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWU0NmI2MTIxNjkwOTk0MDggaW5wdXQ9ZTY0NWFmZjVmYzdkNTQwZV0qLwogewotICAgIHJldHVybiBQeU51bWJlcl9Ub0Jhc2UodiwgMTYpOworICAgIHJldHVybiBQeU51bWJlcl9Ub0Jhc2UobnVtYmVyLCAxNik7CiB9CiAKLVB5RG9jX1NUUlZBUihoZXhfZG9jLAotImhleChudW1iZXIpIC0+IHN0cmluZ1xuXAotXG5cCi1SZXR1cm4gdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCi1cblwKLSAgID4+PiBoZXgoMzczNTkyODU1OSlcblwKLSAgICcweGRlYWRiZWVmJ1xuXAotIik7CiAKLQorLyogQUM6IGNhbm5vdCBjb252ZXJ0IHlldCwgYXMgbmVlZHMgUEVQIDQ1NyBncm91cCBzdXBwb3J0IGluIGluc3BlY3QgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX2l0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtMTMzNywyNSArMTQyOSw0MSBAQAogSW4gdGhlIHNlY29uZCBmb3JtLCB0aGUgY2FsbGFibGUgaXMgY2FsbGVkIHVudGlsIGl0IHJldHVybnMgdGhlIHNlbnRpbmVsLiIpOwogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK2xlbiBhcyBidWlsdGluX2xlbgorCisgICAgb2JqOiBvYmplY3QKKyAgICAvCisKK1JldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgY29udGFpbmVyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9sZW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2KQorYnVpbHRpbl9sZW4oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mYTdhMjcwZDMxNGRmYjZjIGlucHV0PWJjNTU1OThkYTllOWM5YjVdKi8KIHsKICAgICBQeV9zc2l6ZV90IHJlczsKIAotICAgIHJlcyA9IFB5T2JqZWN0X1NpemUodik7CisgICAgcmVzID0gUHlPYmplY3RfU2l6ZShvYmopOwogICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKIH0KIAotUHlEb2NfU1RSVkFSKGxlbl9kb2MsCi0ibGVuKG9iamVjdClcblwKLVxuXAotUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgb2YgYSBzZXF1ZW5jZSBvciBjb2xsZWN0aW9uLiIpOwogCisvKltjbGluaWMgaW5wdXRdCitsb2NhbHMgYXMgYnVpbHRpbl9sb2NhbHMKKworUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjdXJyZW50IHNjb3BlJ3MgbG9jYWwgdmFyaWFibGVzLgorCitOT1RFOiBXaGV0aGVyIG9yIG5vdCB1cGRhdGVzIHRvIHRoaXMgZGljdGlvbmFyeSB3aWxsIGFmZmVjdCBuYW1lIGxvb2t1cHMgaW4KK3RoZSBsb2NhbCBzY29wZSBhbmQgdmljZS12ZXJzYSBpcyAqaW1wbGVtZW50YXRpb24gZGVwZW5kZW50KiBhbmQgbm90Citjb3ZlcmVkIGJ5IGFueSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9sb2NhbHMoUHlPYmplY3QgKnNlbGYpCitidWlsdGluX2xvY2Fsc19pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjQ2Yzk0MDE1Y2UxMTQ0OCBpbnB1dD03ODc0MDE4ZDQ3OGQ1YzRiXSovCiB7CiAgICAgUHlPYmplY3QgKmQ7CiAKQEAgLTEzNjQsMTEgKzE0NzIsNiBAQAogICAgIHJldHVybiBkOwogfQogCi1QeURvY19TVFJWQVIobG9jYWxzX2RvYywKLSJsb2NhbHMoKSAtPiBkaWN0aW9uYXJ5XG5cCi1cblwKLVVwZGF0ZSBhbmQgcmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjdXJyZW50IHNjb3BlJ3MgbG9jYWwgdmFyaWFibGVzLiIpOwotCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBtaW5fbWF4KFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcywgaW50IG9wKQpAQCAtMTQ3MSw2ICsxNTc0LDcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyogQUM6IGNhbm5vdCBjb252ZXJ0IHlldCwgd2FpdGluZyBmb3IgKmFyZ3Mgc3VwcG9ydCAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5fbWluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC0xNDg3LDYgKzE1OTEsNyBAQAogV2l0aCB0d28gb3IgbW9yZSBhcmd1bWVudHMsIHJldHVybiB0aGUgc21hbGxlc3QgYXJndW1lbnQuIik7CiAKIAorLyogQUM6IGNhbm5vdCBjb252ZXJ0IHlldCwgd2FpdGluZyBmb3IgKmFyZ3Mgc3VwcG9ydCAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5fbWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC0xNTAzLDU2ICsxNjA4LDcwIEBACiBXaXRoIHR3byBvciBtb3JlIGFyZ3VtZW50cywgcmV0dXJuIHRoZSBsYXJnZXN0IGFyZ3VtZW50LiIpOwogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK29jdCBhcyBidWlsdGluX29jdAorCisgICAgbnVtYmVyOiBvYmplY3QKKyAgICAvCisKK1JldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4KKworICAgPj4+IG9jdCgzNDIzOTEpCisgICAnMG8xMjM0NTY3JworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9vY3QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2KQorYnVpbHRpbl9vY3QoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm51bWJlcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MGEzNDY1NmI2ODc1MzUyIGlucHV0PWFkNmIyNzRhZjQwMTZjNzJdKi8KIHsKLSAgICByZXR1cm4gUHlOdW1iZXJfVG9CYXNlKHYsIDgpOworICAgIHJldHVybiBQeU51bWJlcl9Ub0Jhc2UobnVtYmVyLCA4KTsKIH0KIAotUHlEb2NfU1RSVkFSKG9jdF9kb2MsCi0ib2N0KG51bWJlcikgLT4gc3RyaW5nXG5cCi1cblwKLVJldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKLVxuXAotICAgPj4+IG9jdCgzNDIzOTEpXG5cCi0gICAnMG8xMjM0NTY3J1xuXAotIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK29yZCBhcyBidWlsdGluX29yZAorCisgICAgYzogb2JqZWN0CisgICAgLworCitSZXR1cm4gdGhlIFVuaWNvZGUgY29kZSBwb2ludCBmb3IgYSBvbmUtY2hhcmFjdGVyIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ1aWx0aW5fb3JkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCogb2JqKQorYnVpbHRpbl9vcmQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NGZhNWU4N2EzMjNiYWU3MSBpbnB1dD0zMDY0ZTVkNjIwM2FkMDEyXSovCiB7CiAgICAgbG9uZyBvcmQ7CiAgICAgUHlfc3NpemVfdCBzaXplOwogCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sob2JqKSkgewotICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShvYmopOworICAgIGlmIChQeUJ5dGVzX0NoZWNrKGMpKSB7CisgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGMpOwogICAgICAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICBvcmQgPSAobG9uZykoKHVuc2lnbmVkIGNoYXIpKlB5Qnl0ZXNfQVNfU1RSSU5HKG9iaikpOworICAgICAgICAgICAgb3JkID0gKGxvbmcpKCh1bnNpZ25lZCBjaGFyKSpQeUJ5dGVzX0FTX1NUUklORyhjKSk7CiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG9yZCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKG9iaikpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopID09IC0xKQorICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhjKSkgeworICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGMpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOworICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoYyk7CiAgICAgICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAgICAgIG9yZCA9IChsb25nKVB5VW5pY29kZV9SRUFEX0NIQVIob2JqLCAwKTsKKyAgICAgICAgICAgIG9yZCA9IChsb25nKVB5VW5pY29kZV9SRUFEX0NIQVIoYywgMCk7CiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG9yZCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfQ2hlY2sob2JqKSkgeworICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKGMpKSB7CiAgICAgICAgIC8qIFhYWCBIb3BlZnVsbHkgdGhpcyBpcyB0ZW1wb3JhcnkgKi8KLSAgICAgICAgc2l6ZSA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKG9iaik7CisgICAgICAgIHNpemUgPSBQeUJ5dGVBcnJheV9HRVRfU0laRShjKTsKICAgICAgICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICAgICAgb3JkID0gKGxvbmcpKCh1bnNpZ25lZCBjaGFyKSpQeUJ5dGVBcnJheV9BU19TVFJJTkcob2JqKSk7CisgICAgICAgICAgICBvcmQgPSAobG9uZykoKHVuc2lnbmVkIGNoYXIpKlB5Qnl0ZUFycmF5X0FTX1NUUklORyhjKSk7CiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG9yZCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAib3JkKCkgZXhwZWN0ZWQgc3RyaW5nIG9mIGxlbmd0aCAxLCBidXQgIiBcCi0gICAgICAgICAgICAgICAgICAgICAiJS4yMDBzIGZvdW5kIiwgb2JqLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMgZm91bmQiLCBjLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xNTYzLDMxICsxNjgyLDMwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1ZBUihvcmRfZG9jKSA9IFB5RG9jX1NUUigKLSJvcmQoYykgLT4gaW50ZWdlclxuXAotXG5cCi1SZXR1cm4gdGhlIGludGVnZXIgb3JkaW5hbCBvZiBhIG9uZS1jaGFyYWN0ZXIgc3RyaW5nLiIKLSk7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK3BvdyBhcyBidWlsdGluX3BvdworCisgICAgeDogb2JqZWN0CisgICAgeTogb2JqZWN0CisgICAgejogb2JqZWN0ID0gTm9uZQorICAgIC8KKworRXF1aXZhbGVudCB0byB4Kip5ICh3aXRoIHR3byBhcmd1bWVudHMpIG9yIHgqKnkgJSB6ICh3aXRoIHRocmVlIGFyZ3VtZW50cykKKworU29tZSB0eXBlcywgc3VjaCBhcyBpbnRzLCBhcmUgYWJsZSB0byB1c2UgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gd2hlbgoraW52b2tlZCB1c2luZyB0aGUgdGhyZWUgYXJndW1lbnQgZm9ybS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ1aWx0aW5fcG93KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J1aWx0aW5fcG93X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5LCBQeU9iamVjdCAqeikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MGExNGQ1ZDEzMGQ0MDRiIGlucHV0PTY1M2Q1N2QzOGQ0MWZjMDddKi8KIHsKLSAgICBQeU9iamVjdCAqdiwgKncsICp6ID0gUHlfTm9uZTsKLQotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInBvdyIsIDIsIDMsICZ2LCAmdywgJnopKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlOdW1iZXJfUG93ZXIodiwgdywgeik7CisgICAgcmV0dXJuIFB5TnVtYmVyX1Bvd2VyKHgsIHksIHopOwogfQogCi1QeURvY19TVFJWQVIocG93X2RvYywKLSJwb3coeCwgeVssIHpdKSAtPiBudW1iZXJcblwKLVxuXAotV2l0aCB0d28gYXJndW1lbnRzLCBlcXVpdmFsZW50IHRvIHgqKnkuICBXaXRoIHRocmVlIGFyZ3VtZW50cyxcblwKLWVxdWl2YWxlbnQgdG8gKHgqKnkpICUgeiwgYnV0IG1heSBiZSBtb3JlIGVmZmljaWVudCAoZS5nLiBmb3IgaW50cykuIik7CiAKLQotCisvKiBBQzogY2Fubm90IGNvbnZlcnQgeWV0LCB3YWl0aW5nIGZvciAqYXJncyBzdXBwb3J0ICovCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9wcmludChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewpAQCAtMTY4MywxMCArMTgwMSwyNSBAQAogZmx1c2g6IHdoZXRoZXIgdG8gZm9yY2libHkgZmx1c2ggdGhlIHN0cmVhbS4iKTsKIAogCisvKltjbGluaWMgaW5wdXRdCitpbnB1dCBhcyBidWlsdGluX2lucHV0CisKKyAgICBwcm9tcHQ6IG9iamVjdChjX2RlZmF1bHQ9Ik5VTEwiKSA9IE5vbmUKKyAgICAvCisKK1JlYWQgYSBzdHJpbmcgZnJvbSBzdGFuZGFyZCBpbnB1dC4gIFRoZSB0cmFpbGluZyBuZXdsaW5lIGlzIHN0cmlwcGVkLgorCitUaGUgcHJvbXB0IHN0cmluZywgaWYgZ2l2ZW4sIGlzIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0cHV0IHdpdGhvdXQgYQordHJhaWxpbmcgbmV3bGluZSBiZWZvcmUgcmVhZGluZyBpbnB1dC4KKworSWYgdGhlIHVzZXIgaGl0cyBFT0YgKCpuaXg6IEN0cmwtRCwgV2luZG93czogQ3RybC1aK1JldHVybiksIHJhaXNlIEVPRkVycm9yLgorT24gKm5peCBzeXN0ZW1zLCByZWFkbGluZSBpcyB1c2VkIGlmIGF2YWlsYWJsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWJ1aWx0aW5faW5wdXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYnVpbHRpbl9pbnB1dF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpwcm9tcHQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODNkYjVhMTkxZTdhMGQ2MCBpbnB1dD01ZThiYjcwYzI5MDhmZTNjXSovCiB7Ci0gICAgUHlPYmplY3QgKnByb21wdGFyZyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmZpbiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRpbik7CiAgICAgUHlPYmplY3QgKmZvdXQgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKICAgICBQeU9iamVjdCAqZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwpAQCAtMTY5NCwxMCArMTgyNyw2IEBACiAgICAgbG9uZyBmZDsKICAgICBpbnQgdHR5OwogCi0gICAgLyogUGFyc2UgYXJndW1lbnRzICovCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiaW5wdXQiLCAwLCAxLCAmcHJvbXB0YXJnKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICAvKiBDaGVjayB0aGF0IHN0ZGluL291dC9lcnIgYXJlIGludGFjdCAqLwogICAgIGlmIChmaW4gPT0gTlVMTCB8fCBmaW4gPT0gUHlfTm9uZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtMTc1NSw3ICsxODg0LDcgQEAKICAgICAvKiBJZiB3ZSdyZSBpbnRlcmFjdGl2ZSwgdXNlIChHTlUpIHJlYWRsaW5lICovCiAgICAgaWYgKHR0eSkgewogICAgICAgICBQeU9iamVjdCAqcG8gPSBOVUxMOwotICAgICAgICBjaGFyICpwcm9tcHQ7CisgICAgICAgIGNoYXIgKnByb21wdHN0cjsKICAgICAgICAgY2hhciAqcyA9IE5VTEw7CiAgICAgICAgIFB5T2JqZWN0ICpzdGRpbl9lbmNvZGluZyA9IE5VTEwsICpzdGRpbl9lcnJvcnMgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCAqc3Rkb3V0X2VuY29kaW5nID0gTlVMTCwgKnN0ZG91dF9lcnJvcnMgPSBOVUxMOwpAQCAtMTc3OCw3ICsxOTA3LDcgQEAKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwotICAgICAgICBpZiAocHJvbXB0YXJnICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHByb21wdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAvKiBXZSBoYXZlIGEgcHJvbXB0LCBlbmNvZGUgaXQgYXMgc3Rkb3V0IHdvdWxkICovCiAgICAgICAgICAgICBjaGFyICpzdGRvdXRfZW5jb2Rpbmdfc3RyLCAqc3Rkb3V0X2Vycm9yc19zdHI7CiAgICAgICAgICAgICBQeU9iamVjdCAqc3RyaW5ncG87CkBAIC0xNzkwLDcgKzE5MTksNyBAQAogICAgICAgICAgICAgc3Rkb3V0X2Vycm9yc19zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHN0ZG91dF9lcnJvcnMpOwogICAgICAgICAgICAgaWYgKCFzdGRvdXRfZW5jb2Rpbmdfc3RyIHx8ICFzdGRvdXRfZXJyb3JzX3N0cikKICAgICAgICAgICAgICAgICBnb3RvIF9yZWFkbGluZV9lcnJvcnM7Ci0gICAgICAgICAgICBzdHJpbmdwbyA9IFB5T2JqZWN0X1N0cihwcm9tcHRhcmcpOworICAgICAgICAgICAgc3RyaW5ncG8gPSBQeU9iamVjdF9TdHIocHJvbXB0KTsKICAgICAgICAgICAgIGlmIChzdHJpbmdwbyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gX3JlYWRsaW5lX2Vycm9yczsKICAgICAgICAgICAgIHBvID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhzdHJpbmdwbywKQEAgLTE4MDAsMTUgKzE5MjksMTUgQEAKICAgICAgICAgICAgIFB5X0NMRUFSKHN0cmluZ3BvKTsKICAgICAgICAgICAgIGlmIChwbyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gX3JlYWRsaW5lX2Vycm9yczsKLSAgICAgICAgICAgIHByb21wdCA9IFB5Qnl0ZXNfQXNTdHJpbmcocG8pOwotICAgICAgICAgICAgaWYgKHByb21wdCA9PSBOVUxMKQorICAgICAgICAgICAgcHJvbXB0c3RyID0gUHlCeXRlc19Bc1N0cmluZyhwbyk7CisgICAgICAgICAgICBpZiAocHJvbXB0c3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBfcmVhZGxpbmVfZXJyb3JzOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcG8gPSBOVUxMOwotICAgICAgICAgICAgcHJvbXB0ID0gIiI7CisgICAgICAgICAgICBwcm9tcHRzdHIgPSAiIjsKICAgICAgICAgfQotICAgICAgICBzID0gUHlPU19SZWFkbGluZShzdGRpbiwgc3Rkb3V0LCBwcm9tcHQpOworICAgICAgICBzID0gUHlPU19SZWFkbGluZShzdGRpbiwgc3Rkb3V0LCBwcm9tcHRzdHIpOwogICAgICAgICBpZiAocyA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9DaGVja1NpZ25hbHMoKTsKICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTE4NTAsOCArMTk3OSw4IEBACiAgICAgfQogCiAgICAgLyogRmFsbGJhY2sgaWYgd2UncmUgbm90IGludGVyYWN0aXZlICovCi0gICAgaWYgKHByb21wdGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QocHJvbXB0YXJnLCBmb3V0LCBQeV9QUklOVF9SQVcpICE9IDApCisgICAgaWYgKHByb21wdCAhPSBOVUxMKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QocHJvbXB0LCBmb3V0LCBQeV9QUklOVF9SQVcpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmb3V0LCAmUHlJZF9mbHVzaCwgIiIpOwpAQCAtMTg2MiwyOCArMTk5MSwyOSBAQAogICAgIHJldHVybiBQeUZpbGVfR2V0TGluZShmaW4sIC0xKTsKIH0KIAotUHlEb2NfU1RSVkFSKGlucHV0X2RvYywKLSJpbnB1dChbcHJvbXB0XSkgLT4gc3RyaW5nXG5cCi1cblwKLVJlYWQgYSBzdHJpbmcgZnJvbSBzdGFuZGFyZCBpbnB1dC4gIFRoZSB0cmFpbGluZyBuZXdsaW5lIGlzIHN0cmlwcGVkLlxuXAotSWYgdGhlIHVzZXIgaGl0cyBFT0YgKFVuaXg6IEN0bC1ELCBXaW5kb3dzOiBDdGwtWitSZXR1cm4pLCByYWlzZSBFT0ZFcnJvci5cblwKLU9uIFVuaXgsIEdOVSByZWFkbGluZSBpcyB1c2VkIGlmIGVuYWJsZWQuICBUaGUgcHJvbXB0IHN0cmluZywgaWYgZ2l2ZW4sXG5cCi1pcyBwcmludGVkIHdpdGhvdXQgYSB0cmFpbGluZyBuZXdsaW5lIGJlZm9yZSByZWFkaW5nLiIpOwogCisvKltjbGluaWMgaW5wdXRdCityZXByIGFzIGJ1aWx0aW5fcmVwcgorCisgICAgb2JqOiBvYmplY3QKKyAgICAvCisKK1JldHVybiB0aGUgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0LgorCitGb3IgbWFueSBvYmplY3QgdHlwZXMsIGluY2x1ZGluZyBtb3N0IGJ1aWx0aW5zLCBldmFsKHJlcHIob2JqKSkgPT0gb2JqLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9yZXByKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK2J1aWx0aW5fcmVwcihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdlZDM3NzhjNDRmZDAxOTQgaW5wdXQ9MWM5ZTZkNjZkM2UzYmUwNF0qLwogewotICAgIHJldHVybiBQeU9iamVjdF9SZXByKHYpOworICAgIHJldHVybiBQeU9iamVjdF9SZXByKG9iaik7CiB9CiAKLVB5RG9jX1NUUlZBUihyZXByX2RvYywKLSJyZXByKG9iamVjdCkgLT4gc3RyaW5nXG5cCi1cblwKLVJldHVybiB0aGUgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0LlxuXAotRm9yIG1vc3Qgb2JqZWN0IHR5cGVzLCBldmFsKHJlcHIob2JqZWN0KSkgPT0gb2JqZWN0LiIpOwogCi0KKy8qIEFDOiBjYW5ub3QgY29udmVydCB5ZXQsIGFzIG5lZWRzIFBFUCA0NTcgZ3JvdXAgc3VwcG9ydCBpbiBpbnNwZWN0CisgKiAgICAgb3IgYSBzZW1hbnRpYyBjaGFuZ2UgdG8gYWNjZXB0IE5vbmUgZm9yICJuZGlnaXRzIgorICovCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9yb3VuZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewpAQCAtMTkyNSw2ICsyMDU1LDM1IEBACiBzYW1lIHR5cGUgYXMgdGhlIG51bWJlci4gbmRpZ2l0cyBtYXkgYmUgbmVnYXRpdmUuIik7CiAKIAorLypBQzogd2UgbmVlZCB0byBrZWVwIHRoZSBrd2RzIGRpY3QgaW50YWN0IHRvIGVhc2lseSBjYWxsIGludG8gdGhlCisgKiBsaXN0LnNvcnQgbWV0aG9kLCB3aGljaCBpc24ndCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIEFDLiBTbyB3ZSBqdXN0IHVzZQorICogdGhlIGluaXRpYWxseSBnZW5lcmF0ZWQgc2lnbmF0dXJlIHdpdGggYSBjdXN0b20gaW1wbGVtZW50YXRpb24uCisgKi8KKy8qIFtkaXNhYmxlZCBjbGluaWMgaW5wdXRdCitzb3J0ZWQgYXMgYnVpbHRpbl9zb3J0ZWQKKworICAgIGl0ZXJhYmxlIGFzIHNlcTogb2JqZWN0CisgICAga2V5IGFzIGtleWZ1bmM6IG9iamVjdCA9IE5vbmUKKyAgICByZXZlcnNlOiBvYmplY3QgPSBGYWxzZQorCitSZXR1cm4gYSBuZXcgbGlzdCBjb250YWluaW5nIGFsbCBpdGVtcyBmcm9tIHRoZSBpdGVyYWJsZSBpbiBhc2NlbmRpbmcgb3JkZXIuCisKK0EgY3VzdG9tIGtleSBmdW5jdGlvbiBjYW4gYmUgc3VwcGxpZWQgdG8gY3VzdG9taXNlIHRoZSBzb3J0IG9yZGVyLCBhbmQgdGhlCityZXZlcnNlIGZsYWcgY2FuIGJlIHNldCB0byByZXF1ZXN0IHRoZSByZXN1bHQgaW4gZGVzY2VuZGluZyBvcmRlci4KK1tlbmQgZGlzYWJsZWQgY2xpbmljIGlucHV0XSovCisKK1B5RG9jX1NUUlZBUihidWlsdGluX3NvcnRlZF9fZG9jX18sCisic29ydGVkKCRtb2R1bGUsIGl0ZXJhYmxlLCBrZXk9Tm9uZSwgcmV2ZXJzZT1GYWxzZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgYWxsIGl0ZW1zIGZyb20gdGhlIGl0ZXJhYmxlIGluIGFzY2VuZGluZyBvcmRlci5cbiIKKyJcbiIKKyJBIGN1c3RvbSBrZXkgZnVuY3Rpb24gY2FuIGJlIHN1cHBsaWVkIHRvIGN1c3RvbWlzZSB0aGUgc29ydCBvcmRlciwgYW5kIHRoZVxuIgorInJldmVyc2UgZmxhZyBjYW4gYmUgc2V0IHRvIHJlcXVlc3QgdGhlIHJlc3VsdCBpbiBkZXNjZW5kaW5nIG9yZGVyLiIpOworCisjZGVmaW5lIEJVSUxUSU5fU09SVEVEX01FVEhPRERFRiAgICBcCisgICAgeyJzb3J0ZWQiLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9zb3J0ZWQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBidWlsdGluX3NvcnRlZF9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9zb3J0ZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKQEAgLTE5NjYsOSArMjEyNSw4IEBACiAgICAgcmV0dXJuIG5ld2xpc3Q7CiB9CiAKLVB5RG9jX1NUUlZBUihzb3J0ZWRfZG9jLAotInNvcnRlZChpdGVyYWJsZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpIC0tPiBuZXcgc29ydGVkIGxpc3QiKTsKIAorLyogQUM6IGNhbm5vdCBjb252ZXJ0IHlldCwgYXMgbmVlZHMgUEVQIDQ1NyBncm91cCBzdXBwb3J0IGluIGluc3BlY3QgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX3ZhcnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtMjAwMCwxNyArMjE1OCwyOSBAQAogV2l0aG91dCBhcmd1bWVudHMsIGVxdWl2YWxlbnQgdG8gbG9jYWxzKCkuXG5cCiBXaXRoIGFuIGFyZ3VtZW50LCBlcXVpdmFsZW50IHRvIG9iamVjdC5fX2RpY3RfXy4iKTsKIAotc3RhdGljIFB5T2JqZWN0KgotYnVpbHRpbl9zdW0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorCisvKltjbGluaWMgaW5wdXRdCitzdW0gYXMgYnVpbHRpbl9zdW0KKworICAgIGl0ZXJhYmxlOiBvYmplY3QKKyAgICBzdGFydDogb2JqZWN0KGNfZGVmYXVsdD0iTlVMTCIpID0gMAorICAgIC8KKworUmV0dXJuIHRoZSBzdW0gb2YgYSAnc3RhcnQnIHZhbHVlIChkZWZhdWx0OiAwKSBwbHVzIGFuIGl0ZXJhYmxlIG9mIG51bWJlcnMKKworV2hlbiB0aGUgaXRlcmFibGUgaXMgZW1wdHksIHJldHVybiB0aGUgc3RhcnQgdmFsdWUuCitUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHNwZWNpZmljYWxseSBmb3IgdXNlIHdpdGggbnVtZXJpYyB2YWx1ZXMgYW5kIG1heQorcmVqZWN0IG5vbi1udW1lcmljIHR5cGVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9zdW1faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqaXRlcmFibGUsIFB5T2JqZWN0ICpzdGFydCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kZjc1OGNlYzdkMWQzMDJmIGlucHV0PTNiNWI3YTlkNzYxMWM3M2FdKi8KIHsKLSAgICBQeU9iamVjdCAqc2VxOwotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBzdGFydDsKICAgICBQeU9iamVjdCAqdGVtcCwgKml0ZW0sICppdGVyOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic3VtIiwgMSwgMiwgJnNlcSwgJnJlc3VsdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIoc2VxKTsKKyAgICBpdGVyID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIwNDAsNyArMjIxMCw2IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotCiAgICAgICAgIFB5X0lOQ1JFRihyZXN1bHQpOwogICAgIH0KIApAQCAtMjE2Niw2MiArMjMzNSw2MiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVB5RG9jX1NUUlZBUihzdW1fZG9jLAotInN1bShpdGVyYWJsZVssIHN0YXJ0XSkgLT4gdmFsdWVcblwKLVxuXAotUmV0dXJuIHRoZSBzdW0gb2YgYW4gaXRlcmFibGUgb2YgbnVtYmVycyAoTk9UIHN0cmluZ3MpIHBsdXMgdGhlIHZhbHVlXG5cCi1vZiBwYXJhbWV0ZXIgJ3N0YXJ0JyAod2hpY2ggZGVmYXVsdHMgdG8gMCkuICBXaGVuIHRoZSBpdGVyYWJsZSBpc1xuXAotZW1wdHksIHJldHVybiBzdGFydC4iKTsKIAorLypbY2xpbmljIGlucHV0XQoraXNpbnN0YW5jZSBhcyBidWlsdGluX2lzaW5zdGFuY2UKKworICAgIG9iajogb2JqZWN0CisgICAgY2xhc3Nfb3JfdHVwbGU6IG9iamVjdAorICAgIC8KKworUmV0dXJuIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3Mgb3Igb2YgYSBzdWJjbGFzcyB0aGVyZW9mLgorCitBIHR1cGxlLCBhcyBpbiBgYGlzaW5zdGFuY2UoeCwgKEEsIEIsIC4uLikpYGAsIG1heSBiZSBnaXZlbiBhcyB0aGUgdGFyZ2V0IHRvCitjaGVjayBhZ2FpbnN0LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBpc2luc3RhbmNlKHgsIEEpIG9yIGlzaW5zdGFuY2UoeCwgQikKK29yIC4uLmBgIGV0Yy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ1aWx0aW5faXNpbnN0YW5jZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitidWlsdGluX2lzaW5zdGFuY2VfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNsYXNzX29yX3R1cGxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZmYWYwMTQ3MmMxM2IwMDMgaW5wdXQ9ZmZhNzQzZGIxZGFmNzU0OV0qLwogewotICAgIFB5T2JqZWN0ICppbnN0OwotICAgIFB5T2JqZWN0ICpjbHM7CiAgICAgaW50IHJldHZhbDsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImlzaW5zdGFuY2UiLCAyLCAyLCAmaW5zdCwgJmNscykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dmFsID0gUHlPYmplY3RfSXNJbnN0YW5jZShpbnN0LCBjbHMpOworICAgIHJldHZhbCA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCBjbGFzc19vcl90dXBsZSk7CiAgICAgaWYgKHJldHZhbCA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmV0dmFsKTsKIH0KIAotUHlEb2NfU1RSVkFSKGlzaW5zdGFuY2VfZG9jLAotImlzaW5zdGFuY2Uob2JqZWN0LCBjbGFzcy1vci10eXBlLW9yLXR1cGxlKSAtPiBib29sXG5cCi1cblwKLVJldHVybiB3aGV0aGVyIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIG9yIG9mIGEgc3ViY2xhc3MgdGhlcmVvZi5cblwKLVdpdGggYSB0eXBlIGFzIHNlY29uZCBhcmd1bWVudCwgcmV0dXJuIHdoZXRoZXIgdGhhdCBpcyB0aGUgb2JqZWN0J3MgdHlwZS5cblwKLVRoZSBmb3JtIHVzaW5nIGEgdHVwbGUsIGlzaW5zdGFuY2UoeCwgKEEsIEIsIC4uLikpLCBpcyBhIHNob3J0Y3V0IGZvclxuXAotaXNpbnN0YW5jZSh4LCBBKSBvciBpc2luc3RhbmNlKHgsIEIpIG9yIC4uLiAoZXRjLikuIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2lzc3ViY2xhc3MgYXMgYnVpbHRpbl9pc3N1YmNsYXNzCisKKyAgICBjbHM6IG9iamVjdAorICAgIGNsYXNzX29yX3R1cGxlOiBvYmplY3QKKyAgICAvCisKK1JldHVybiB3aGV0aGVyICdjbHMnIGlzIGEgZGVyaXZlZCBmcm9tIGFub3RoZXIgY2xhc3Mgb3IgaXMgdGhlIHNhbWUgY2xhc3MuCisKK0EgdHVwbGUsIGFzIGluIGBgaXNzdWJjbGFzcyh4LCAoQSwgQiwgLi4uKSlgYCwgbWF5IGJlIGdpdmVuIGFzIHRoZSB0YXJnZXQgdG8KK2NoZWNrIGFnYWluc3QuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYGlzc3ViY2xhc3MoeCwgQSkgb3IgaXNzdWJjbGFzcyh4LCBCKQorb3IgLi4uYGAgZXRjLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnVpbHRpbl9pc3N1YmNsYXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J1aWx0aW5faXNzdWJjbGFzc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpjbHMsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xhc3Nfb3JfdHVwbGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzU4NDEyNDEwY2Q3YTI1MCBpbnB1dD1hZjVmMzVlOWNlYWRkYWY2XSovCiB7Ci0gICAgUHlPYmplY3QgKmRlcml2ZWQ7Ci0gICAgUHlPYmplY3QgKmNsczsKICAgICBpbnQgcmV0dmFsOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiaXNzdWJjbGFzcyIsIDIsIDIsICZkZXJpdmVkLCAmY2xzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR2YWwgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGRlcml2ZWQsIGNscyk7CisgICAgcmV0dmFsID0gUHlPYmplY3RfSXNTdWJjbGFzcyhjbHMsIGNsYXNzX29yX3R1cGxlKTsKICAgICBpZiAocmV0dmFsIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyZXR2YWwpOwogfQogCi1QeURvY19TVFJWQVIoaXNzdWJjbGFzc19kb2MsCi0iaXNzdWJjbGFzcyhDLCBCKSAtPiBib29sXG5cCi1cblwKLVJldHVybiB3aGV0aGVyIGNsYXNzIEMgaXMgYSBzdWJjbGFzcyAoaS5lLiwgYSBkZXJpdmVkIGNsYXNzKSBvZiBjbGFzcyBCLlxuXAotV2hlbiB1c2luZyBhIHR1cGxlIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgaXNzdWJjbGFzcyhYLCAoQSwgQiwgLi4uKSksXG5cCi1pcyBhIHNob3J0Y3V0IGZvciBpc3N1YmNsYXNzKFgsIEEpIG9yIGlzc3ViY2xhc3MoWCwgQikgb3IgLi4uIChldGMuKS4iKTsKLQogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMjQxNiw0NCArMjU4NSw0NCBAQAogICAgIHsiX19idWlsZF9jbGFzc19fIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fX19idWlsZF9jbGFzc19fLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBidWlsZF9jbGFzc19kb2N9LAogICAgIHsiX19pbXBvcnRfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fX19pbXBvcnRfXywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgaW1wb3J0X2RvY30sCi0gICAgeyJhYnMiLCAgICAgICAgICAgICBidWlsdGluX2FicywgICAgICAgIE1FVEhfTywgYWJzX2RvY30sCi0gICAgeyJhbGwiLCAgICAgICAgICAgICBidWlsdGluX2FsbCwgICAgICAgIE1FVEhfTywgYWxsX2RvY30sCi0gICAgeyJhbnkiLCAgICAgICAgICAgICBidWlsdGluX2FueSwgICAgICAgIE1FVEhfTywgYW55X2RvY30sCi0gICAgeyJhc2NpaSIsICAgICAgICAgICBidWlsdGluX2FzY2lpLCAgICAgIE1FVEhfTywgYXNjaWlfZG9jfSwKLSAgICB7ImJpbiIsICAgICAgICAgICAgIGJ1aWx0aW5fYmluLCAgICAgICAgTUVUSF9PLCBiaW5fZG9jfSwKLSAgICB7ImNhbGxhYmxlIiwgICAgICAgIGJ1aWx0aW5fY2FsbGFibGUsICAgTUVUSF9PLCBjYWxsYWJsZV9kb2N9LAotICAgIHsiY2hyIiwgICAgICAgICAgICAgYnVpbHRpbl9jaHIsICAgICAgICBNRVRIX1ZBUkFSR1MsIGNocl9kb2N9LAotICAgIHsiY29tcGlsZSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fY29tcGlsZSwgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgY29tcGlsZV9kb2N9LAotICAgIHsiZGVsYXR0ciIsICAgICAgICAgYnVpbHRpbl9kZWxhdHRyLCAgICBNRVRIX1ZBUkFSR1MsIGRlbGF0dHJfZG9jfSwKKyAgICBCVUlMVElOX0FCU19NRVRIT0RERUYKKyAgICBCVUlMVElOX0FMTF9NRVRIT0RERUYKKyAgICBCVUlMVElOX0FOWV9NRVRIT0RERUYKKyAgICBCVUlMVElOX0FTQ0lJX01FVEhPRERFRgorICAgIEJVSUxUSU5fQklOX01FVEhPRERFRgorICAgIEJVSUxUSU5fQ0FMTEFCTEVfTUVUSE9EREVGCisgICAgQlVJTFRJTl9DSFJfTUVUSE9EREVGCisgICAgQlVJTFRJTl9DT01QSUxFX01FVEhPRERFRgorICAgIEJVSUxUSU5fREVMQVRUUl9NRVRIT0RERUYKICAgICB7ImRpciIsICAgICAgICAgICAgIGJ1aWx0aW5fZGlyLCAgICAgICAgTUVUSF9WQVJBUkdTLCBkaXJfZG9jfSwKLSAgICB7ImRpdm1vZCIsICAgICAgICAgIGJ1aWx0aW5fZGl2bW9kLCAgICAgTUVUSF9WQVJBUkdTLCBkaXZtb2RfZG9jfSwKLSAgICB7ImV2YWwiLCAgICAgICAgICAgIGJ1aWx0aW5fZXZhbCwgICAgICAgTUVUSF9WQVJBUkdTLCBldmFsX2RvY30sCi0gICAgeyJleGVjIiwgICAgICAgIGJ1aWx0aW5fZXhlYywgICAgICAgTUVUSF9WQVJBUkdTLCBleGVjX2RvY30sCi0gICAgeyJmb3JtYXQiLCAgICAgICAgICBidWlsdGluX2Zvcm1hdCwgICAgIE1FVEhfVkFSQVJHUywgZm9ybWF0X2RvY30sCisgICAgQlVJTFRJTl9ESVZNT0RfTUVUSE9EREVGCisgICAgQlVJTFRJTl9FVkFMX01FVEhPRERFRgorICAgIEJVSUxUSU5fRVhFQ19NRVRIT0RERUYKKyAgICBCVUlMVElOX0ZPUk1BVF9NRVRIT0RERUYKICAgICB7ImdldGF0dHIiLCAgICAgICAgIGJ1aWx0aW5fZ2V0YXR0ciwgICAgTUVUSF9WQVJBUkdTLCBnZXRhdHRyX2RvY30sCi0gICAgeyJnbG9iYWxzIiwgICAgICAgICAoUHlDRnVuY3Rpb24pYnVpbHRpbl9nbG9iYWxzLCAgICBNRVRIX05PQVJHUywgZ2xvYmFsc19kb2N9LAotICAgIHsiaGFzYXR0ciIsICAgICAgICAgYnVpbHRpbl9oYXNhdHRyLCAgICBNRVRIX1ZBUkFSR1MsIGhhc2F0dHJfZG9jfSwKLSAgICB7Imhhc2giLCAgICAgICAgICAgIGJ1aWx0aW5faGFzaCwgICAgICAgTUVUSF9PLCBoYXNoX2RvY30sCi0gICAgeyJoZXgiLCAgICAgICAgICAgICBidWlsdGluX2hleCwgICAgICAgIE1FVEhfTywgaGV4X2RvY30sCi0gICAgeyJpZCIsICAgICAgICAgICAgICBidWlsdGluX2lkLCAgICAgICAgIE1FVEhfTywgaWRfZG9jfSwKLSAgICB7ImlucHV0IiwgICAgICAgICAgIGJ1aWx0aW5faW5wdXQsICAgICAgTUVUSF9WQVJBUkdTLCBpbnB1dF9kb2N9LAotICAgIHsiaXNpbnN0YW5jZSIsICBidWlsdGluX2lzaW5zdGFuY2UsIE1FVEhfVkFSQVJHUywgaXNpbnN0YW5jZV9kb2N9LAotICAgIHsiaXNzdWJjbGFzcyIsICBidWlsdGluX2lzc3ViY2xhc3MsIE1FVEhfVkFSQVJHUywgaXNzdWJjbGFzc19kb2N9LAorICAgIEJVSUxUSU5fR0xPQkFMU19NRVRIT0RERUYKKyAgICBCVUlMVElOX0hBU0FUVFJfTUVUSE9EREVGCisgICAgQlVJTFRJTl9IQVNIX01FVEhPRERFRgorICAgIEJVSUxUSU5fSEVYX01FVEhPRERFRgorICAgIEJVSUxUSU5fSURfTUVUSE9EREVGCisgICAgQlVJTFRJTl9JTlBVVF9NRVRIT0RERUYKKyAgICBCVUlMVElOX0lTSU5TVEFOQ0VfTUVUSE9EREVGCisgICAgQlVJTFRJTl9JU1NVQkNMQVNTX01FVEhPRERFRgogICAgIHsiaXRlciIsICAgICAgICAgICAgYnVpbHRpbl9pdGVyLCAgICAgICBNRVRIX1ZBUkFSR1MsIGl0ZXJfZG9jfSwKLSAgICB7ImxlbiIsICAgICAgICAgICAgIGJ1aWx0aW5fbGVuLCAgICAgICAgTUVUSF9PLCBsZW5fZG9jfSwKLSAgICB7ImxvY2FscyIsICAgICAgICAgIChQeUNGdW5jdGlvbilidWlsdGluX2xvY2FscywgICAgIE1FVEhfTk9BUkdTLCBsb2NhbHNfZG9jfSwKKyAgICBCVUlMVElOX0xFTl9NRVRIT0RERUYKKyAgICBCVUlMVElOX0xPQ0FMU19NRVRIT0RERUYKICAgICB7Im1heCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilidWlsdGluX21heCwgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIG1heF9kb2N9LAogICAgIHsibWluIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fbWluLCAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgbWluX2RvY30sCiAgICAgeyJuZXh0IiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pYnVpbHRpbl9uZXh0LCAgICAgICBNRVRIX1ZBUkFSR1MsIG5leHRfZG9jfSwKLSAgICB7Im9jdCIsICAgICAgICAgICAgIGJ1aWx0aW5fb2N0LCAgICAgICAgTUVUSF9PLCBvY3RfZG9jfSwKLSAgICB7Im9yZCIsICAgICAgICAgICAgIGJ1aWx0aW5fb3JkLCAgICAgICAgTUVUSF9PLCBvcmRfZG9jfSwKLSAgICB7InBvdyIsICAgICAgICAgICAgIGJ1aWx0aW5fcG93LCAgICAgICAgTUVUSF9WQVJBUkdTLCBwb3dfZG9jfSwKKyAgICBCVUlMVElOX09DVF9NRVRIT0RERUYKKyAgICBCVUlMVElOX09SRF9NRVRIT0RERUYKKyAgICBCVUlMVElOX1BPV19NRVRIT0RERUYKICAgICB7InByaW50IiwgICAgICAgICAgIChQeUNGdW5jdGlvbilidWlsdGluX3ByaW50LCAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHByaW50X2RvY30sCi0gICAgeyJyZXByIiwgICAgICAgICAgICBidWlsdGluX3JlcHIsICAgICAgIE1FVEhfTywgcmVwcl9kb2N9LAorICAgIEJVSUxUSU5fUkVQUl9NRVRIT0RERUYKICAgICB7InJvdW5kIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilidWlsdGluX3JvdW5kLCAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHJvdW5kX2RvY30sCi0gICAgeyJzZXRhdHRyIiwgICAgICAgICBidWlsdGluX3NldGF0dHIsICAgIE1FVEhfVkFSQVJHUywgc2V0YXR0cl9kb2N9LAotICAgIHsic29ydGVkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fc29ydGVkLCAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgc29ydGVkX2RvY30sCi0gICAgeyJzdW0iLCAgICAgICAgICAgICBidWlsdGluX3N1bSwgICAgICAgIE1FVEhfVkFSQVJHUywgc3VtX2RvY30sCisgICAgQlVJTFRJTl9TRVRBVFRSX01FVEhPRERFRgorICAgIEJVSUxUSU5fU09SVEVEX01FVEhPRERFRgorICAgIEJVSUxUSU5fU1VNX01FVEhPRERFRgogICAgIHsidmFycyIsICAgICAgICAgICAgYnVpbHRpbl92YXJzLCAgICAgICBNRVRIX1ZBUkFSR1MsIHZhcnNfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9LAogfTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9jZXZhbC5jIGIvUHl0aG9uL2NldmFsLmMKaW5kZXggN2EwY2I3Zi4uYzYzMjQ4OCAxMDA2NDQKLS0tIGEvUHl0aG9uL2NldmFsLmMKKysrIGIvUHl0aG9uL2NldmFsLmMKQEAgLTEyLDggKzEyLDEwIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKICNpbmNsdWRlICJjb2RlLmgiCisjaW5jbHVkZSAiZGljdG9iamVjdC5oIgogI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCiAjaW5jbHVkZSAib3Bjb2RlLmgiCisjaW5jbHVkZSAic2V0b2JqZWN0LmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgpAQCAtNzM1LDcgKzczNyw3IEBACiAgICAgaWYgKHRzdGF0ZS0+cmVjdXJzaW9uX2RlcHRoID4gcmVjdXJzaW9uX2xpbWl0KSB7CiAgICAgICAgIC0tdHN0YXRlLT5yZWN1cnNpb25fZGVwdGg7CiAgICAgICAgIHRzdGF0ZS0+b3ZlcmZsb3dlZCA9IDE7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SZWN1cnNpb25FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZCVzIiwKICAgICAgICAgICAgICAgICAgICAgIHdoZXJlKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTE4OSw3ICsxMTkxLDcgQEAKICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsgICAgICAgLyogcmVtYWlucyBOVUxMIHVubGVzcyB5aWVsZCBzdXNwZW5kcyBmcmFtZSAqLwogICAgIGYtPmZfZXhlY3V0aW5nID0gMTsKIAotICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IpIHsKKyAgICBpZiAoY28tPmNvX2ZsYWdzICYgKENPX0dFTkVSQVRPUiB8IENPX0NPUk9VVElORSkpIHsKICAgICAgICAgaWYgKCF0aHJvd2ZsYWcgJiYgZi0+Zl9leGNfdHlwZSAhPSBOVUxMICYmIGYtPmZfZXhjX3R5cGUgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgLyogV2Ugd2VyZSBpbiBhbiBleGNlcHQgaGFuZGxlciB3aGVuIHdlIGxlZnQsCiAgICAgICAgICAgICAgICByZXN0b3JlIHRoZSBleGNlcHRpb24gc3RhdGUgd2hpY2ggd2FzIHB1dCBhc2lkZQpAQCAtMTUwNCw2ICsxNTA2LDE4IEBACiAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9NQVRSSVhfTVVMVElQTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9NYXRyaXhNdWx0aXBseShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKICAgICAgICAgVEFSR0VUKEJJTkFSWV9UUlVFX0RJVklERSkgewogICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKICAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOwpAQCAtMTU0OSw3ICsxNTYzLDcgQEAKICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChsZWZ0KSAmJgogICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgc3VtID0gdW5pY29kZV9jb25jYXRlbmF0ZShsZWZ0LCByaWdodCwgZiwgbmV4dF9pbnN0cik7Ci0gICAgICAgICAgICAgICAgLyogdW5pY29kZV9jb25jYXRlbmF0ZSBjb25zdW1lZCB0aGUgcmVmIHRvIHYgKi8KKyAgICAgICAgICAgICAgICAvKiB1bmljb2RlX2NvbmNhdGVuYXRlIGNvbnN1bWVkIHRoZSByZWYgdG8gbGVmdCAqLwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc3VtID0gUHlOdW1iZXJfQWRkKGxlZnQsIHJpZ2h0KTsKQEAgLTE2OTQsNiArMTcwOCwxOCBAQAogICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCisgICAgICAgIFRBUkdFVChJTlBMQUNFX01BVFJJWF9NVUxUSVBMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VNYXRyaXhNdWx0aXBseShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKICAgICAgICAgVEFSR0VUKElOUExBQ0VfVFJVRV9ESVZJREUpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CiAgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKQEAgLTE3MzYsNyArMTc2Miw3IEBACiAgICAgICAgICAgICBQeU9iamVjdCAqc3VtOwogICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGxlZnQpICYmIFB5VW5pY29kZV9DaGVja0V4YWN0KHJpZ2h0KSkgewogICAgICAgICAgICAgICAgIHN1bSA9IHVuaWNvZGVfY29uY2F0ZW5hdGUobGVmdCwgcmlnaHQsIGYsIG5leHRfaW5zdHIpOwotICAgICAgICAgICAgICAgIC8qIHVuaWNvZGVfY29uY2F0ZW5hdGUgY29uc3VtZWQgdGhlIHJlZiB0byB2ICovCisgICAgICAgICAgICAgICAgLyogdW5pY29kZV9jb25jYXRlbmF0ZSBjb25zdW1lZCB0aGUgcmVmIHRvIGxlZnQgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHN1bSA9IFB5TnVtYmVyX0luUGxhY2VBZGQobGVmdCwgcmlnaHQpOwpAQCAtMTgyNyw3ICsxODUzLDcgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gVEhJUkQoKTsKICAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMyk7Ci0gICAgICAgICAgICAvKiB2W3ddID0gdSAqLworICAgICAgICAgICAgLyogY29udGFpbmVyW3N1Yl0gPSB2ICovCiAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKGNvbnRhaW5lciwgc3ViLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOwpAQCAtMTg0Miw3ICsxODY4LDcgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBTRUNPTkQoKTsKICAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICAvKiBkZWwgdlt3XSAqLworICAgICAgICAgICAgLyogZGVsIGNvbnRhaW5lcltzdWJdICovCiAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9EZWxJdGVtKGNvbnRhaW5lciwgc3ViKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CkBAIC0xOTAwLDExICsxOTI2LDE2NiBAQAogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKICAgICAgICAgfQogCisgICAgICAgIFRBUkdFVChHRVRfQUlURVIpIHsKKyAgICAgICAgICAgIHVuYXJ5ZnVuYyBnZXR0ZXIgPSBOVUxMOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBOVUxMOworICAgICAgICAgICAgUHlPYmplY3QgKmF3YWl0YWJsZSA9IE5VTEw7CisgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gVE9QKCk7CisgICAgICAgICAgICBQeVR5cGVPYmplY3QgKnR5cGUgPSBQeV9UWVBFKG9iaik7CisKKyAgICAgICAgICAgIGlmICh0eXBlLT50cF9hc19hc3luYyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZ2V0dGVyID0gdHlwZS0+dHBfYXNfYXN5bmMtPmFtX2FpdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZ2V0dGVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpdGVyID0gKCpnZXR0ZXIpKG9iaik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKE5VTEwpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFNFVF9UT1AoTlVMTCk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICInYXN5bmMgZm9yJyByZXF1aXJlcyBhbiBvYmplY3Qgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICJfX2FpdGVyX18gbWV0aG9kLCBnb3QgJS4xMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKFB5X1RZUEUoaXRlciktPnRwX2FzX2FzeW5jICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpdGVyKS0+dHBfYXNfYXN5bmMtPmFtX2FuZXh0ICE9IE5VTEwpIHsKKworICAgICAgICAgICAgICAgIC8qIFN0YXJ0aW5nIHdpdGggQ1B5dGhvbiAzLjUuMiBfX2FpdGVyX18gc2hvdWxkIHJldHVybgorICAgICAgICAgICAgICAgICAgIGFzeW5jaHJvbm91cyBpdGVyYXRvcnMgZGlyZWN0bHkgKG5vdCBhd2FpdGFibGVzIHRoYXQKKyAgICAgICAgICAgICAgICAgICByZXNvbHZlIHRvIGFzeW5jaHJvbm91cyBpdGVyYXRvcnMuKQorCisgICAgICAgICAgICAgICAgICAgVGhlcmVmb3JlLCB3ZSBjaGVjayBpZiB0aGUgb2JqZWN0IHRoYXQgd2FzIHJldHVybmVkCisgICAgICAgICAgICAgICAgICAgZnJvbSBfX2FpdGVyX18gaGFzIGFuIF9fYW5leHRfXyBtZXRob2QuICBJZiBpdCBkb2VzLAorICAgICAgICAgICAgICAgICAgIHdlIHdyYXAgaXQgaW4gYW4gYXdhaXRhYmxlIHRoYXQgcmVzb2x2ZXMgdG8gYGl0ZXJgLgorCisgICAgICAgICAgICAgICAgICAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNzI0MyBmb3IgbW9yZQorICAgICAgICAgICAgICAgICAgIGRldGFpbHMuCisgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp3cmFwcGVyID0gX1B5QUl0ZXJXcmFwcGVyX05ldyhpdGVyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CisgICAgICAgICAgICAgICAgU0VUX1RPUCh3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhd2FpdGFibGUgPSBfUHlDb3JvX0dldEF3YWl0YWJsZUl0ZXIoaXRlcik7CisgICAgICAgICAgICBpZiAoYXdhaXRhYmxlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBTRVRfVE9QKE5VTEwpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiJ2FzeW5jIGZvcicgcmVjZWl2ZWQgYW4gaW52YWxpZCBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAiZnJvbSBfX2FpdGVyX186ICUuMTAwcyIsCisgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlciktPnRwX25hbWUpOworCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKworICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICInJS4xMDBzJyBpbXBsZW1lbnRzIGxlZ2FjeSBfX2FpdGVyX18gcHJvdG9jb2w7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX2FpdGVyX18gc2hvdWxkIHJldHVybiBhbiBhc3luY2hyb25vdXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdG9yLCBub3QgYXdhaXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogV2FybmluZyB3YXMgY29udmVydGVkIHRvIGFuIGVycm9yLiAqLworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXdhaXRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1RPUChOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNFVF9UT1AoYXdhaXRhYmxlKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoR0VUX0FORVhUKSB7CisgICAgICAgICAgICB1bmFyeWZ1bmMgZ2V0dGVyID0gTlVMTDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuZXh0X2l0ZXIgPSBOVUxMOworICAgICAgICAgICAgUHlPYmplY3QgKmF3YWl0YWJsZSA9IE5VTEw7CisgICAgICAgICAgICBQeU9iamVjdCAqYWl0ZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5VHlwZU9iamVjdCAqdHlwZSA9IFB5X1RZUEUoYWl0ZXIpOworCisgICAgICAgICAgICBpZiAodHlwZS0+dHBfYXNfYXN5bmMgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnZXR0ZXIgPSB0eXBlLT50cF9hc19hc3luYy0+YW1fYW5leHQ7CisKKyAgICAgICAgICAgIGlmIChnZXR0ZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG5leHRfaXRlciA9ICgqZ2V0dGVyKShhaXRlcik7CisgICAgICAgICAgICAgICAgaWYgKG5leHRfaXRlciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICInYXN5bmMgZm9yJyByZXF1aXJlcyBhbiBpdGVyYXRvciB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgIl9fYW5leHRfXyBtZXRob2QsIGdvdCAlLjEwMHMiLAorICAgICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhd2FpdGFibGUgPSBfUHlDb3JvX0dldEF3YWl0YWJsZUl0ZXIobmV4dF9pdGVyKTsKKyAgICAgICAgICAgIGlmIChhd2FpdGFibGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiJ2FzeW5jIGZvcicgcmVjZWl2ZWQgYW4gaW52YWxpZCBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAiZnJvbSBfX2FuZXh0X186ICUuMTAwcyIsCisgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobmV4dF9pdGVyKS0+dHBfbmFtZSk7CisKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmV4dF9pdGVyKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5leHRfaXRlcik7CisKKyAgICAgICAgICAgIFBVU0goYXdhaXRhYmxlKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoR0VUX0FXQUlUQUJMRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXJhYmxlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlciA9IF9QeUNvcm9fR2V0QXdhaXRhYmxlSXRlcihpdGVyYWJsZSk7CisKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyYWJsZSk7CisKKyAgICAgICAgICAgIGlmIChpdGVyICE9IE5VTEwgJiYgUHlDb3JvX0NoZWNrRXhhY3QoaXRlcikpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqeWYgPSBfUHlHZW5feWYoKFB5R2VuT2JqZWN0KilpdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAoeWYgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAvKiBgaXRlcmAgaXMgYSBjb3JvdXRpbmUgb2JqZWN0IHRoYXQgaXMgYmVpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgYXdhaXRlZCwgYHlmYCBpcyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgYXdhaXRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIGF3YWl0ZWQgb24uICovCisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih5Zik7CisgICAgICAgICAgICAgICAgICAgIFB5X0NMRUFSKGl0ZXIpOworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29yb3V0aW5lIGlzIGJlaW5nIGF3YWl0ZWQgYWxyZWFkeSIpOworICAgICAgICAgICAgICAgICAgICAvKiBUaGUgY29kZSBiZWxvdyBqdW1wcyB0byBgZXJyb3JgIGlmIGBpdGVyYCBpcyBOVUxMLiAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU0VUX1RPUChpdGVyKTsgLyogRXZlbiBpZiBpdCdzIE5VTEwgKi8KKworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKwogICAgICAgICBUQVJHRVQoWUlFTERfRlJPTSkgewogICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZWNpZXZlciA9IFRPUCgpOwogICAgICAgICAgICAgaW50IGVycjsKLSAgICAgICAgICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KHJlY2lldmVyKSkgeworICAgICAgICAgICAgaWYgKFB5R2VuX0NoZWNrRXhhY3QocmVjaWV2ZXIpIHx8IFB5Q29yb19DaGVja0V4YWN0KHJlY2lldmVyKSkgewogICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeUdlbl9TZW5kKChQeUdlbk9iamVjdCAqKXJlY2lldmVyLCB2KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoc2VuZCk7CkBAIC0xOTI2LDcgKzIxMDcsNyBAQAogICAgICAgICAgICAgICAgIFNFVF9UT1AodmFsKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogeCByZW1haW5zIG9uIHN0YWNrLCByZXR2YWwgaXMgdmFsdWUgdG8gYmUgeWllbGRlZCAqLworICAgICAgICAgICAgLyogcmVjZWl2ZXIgcmVtYWlucyBvbiBzdGFjaywgcmV0dmFsIGlzIHZhbHVlIHRvIGJlIHlpZWxkZWQgKi8KICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBzdGFja19wb2ludGVyOwogICAgICAgICAgICAgd2h5ID0gV0hZX1lJRUxEOwogICAgICAgICAgICAgLyogYW5kIHJlcGVhdC4uLiAqLwpAQCAtMjIzMyw2ICsyNDE0LDEwIEBACiAgICAgICAgICAgICAgICAgLyogU2xvdy1wYXRoIGlmIGdsb2JhbHMgb3IgYnVpbHRpbnMgaXMgbm90IGEgZGljdCAqLwogICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgICAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQpAQCAtMjM1NSw2ICsyNTQwLDQzIEBACiAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKKyAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChCVUlMRF9UVVBMRV9VTlBBQ0ssIF9idWlsZF9saXN0X3VucGFjaykKKyAgICAgICAgVEFSR0VUKEJVSUxEX0xJU1RfVU5QQUNLKQorICAgICAgICBfYnVpbGRfbGlzdF91bnBhY2s6IHsKKyAgICAgICAgICAgIGludCBjb252ZXJ0X3RvX3R1cGxlID0gb3Bjb2RlID09IEJVSUxEX1RVUExFX1VOUEFDSzsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgUHlPYmplY3QgKnN1bSA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOworICAgICAgICAgICAgaWYgKHN1bSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGZvciAoaSA9IG9wYXJnOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5vbmVfdmFsOworCisgICAgICAgICAgICAgICAgbm9uZV92YWwgPSBfUHlMaXN0X0V4dGVuZCgoUHlMaXN0T2JqZWN0ICopc3VtLCBQRUVLKGkpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9uZV92YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3VtKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5vbmVfdmFsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnZlcnRfdG9fdHVwbGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBQeUxpc3RfQXNUdXBsZShzdW0pOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdW0pOworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5fdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHN1bTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKG9wYXJnLS0pCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKFBPUCgpKTsKKyAgICAgICAgICAgIFBVU0gocmV0dXJuX3ZhbHVlKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKwogICAgICAgICBUQVJHRVQoQlVJTERfU0VUKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqc2V0ID0gUHlTZXRfTmV3KE5VTEwpOwogICAgICAgICAgICAgaW50IGVyciA9IDA7CkBAIC0yMzc0LDI2ICsyNTk2LDEyNyBAQAogICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCisgICAgICAgIFRBUkdFVChCVUlMRF9TRVRfVU5QQUNLKSB7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdW0gPSBQeVNldF9OZXcoTlVMTCk7CisgICAgICAgICAgICBpZiAoc3VtID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgZm9yIChpID0gb3Bhcmc7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5U2V0X1VwZGF0ZShzdW0sIFBFRUsoaSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3VtKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChvcGFyZy0tKQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihQT1AoKSk7CisgICAgICAgICAgICBQVVNIKHN1bSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKICAgICAgICAgVEFSR0VUKEJVSUxEX01BUCkgeworICAgICAgICAgICAgaW50IGk7CiAgICAgICAgICAgICBQeU9iamVjdCAqbWFwID0gX1B5RGljdF9OZXdQcmVzaXplZCgoUHlfc3NpemVfdClvcGFyZyk7CiAgICAgICAgICAgICBpZiAobWFwID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGZvciAoaSA9IG9wYXJnOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gUEVFSygyKmkpOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBFRUsoMippIC0gMSk7CisgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obWFwLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1hcCk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAob3BhcmctLSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihQT1AoKSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKFBPUCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFBVU0gobWFwKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfTUFQKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gVE9QKCk7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIFB5T2JqZWN0ICptYXAgPSBUSElSRCgpOwotICAgICAgICAgICAgaW50IGVycjsKLSAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChtYXApKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG1hcCwga2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoQlVJTERfTUFQX1VOUEFDS19XSVRIX0NBTEwsIF9idWlsZF9tYXBfdW5wYWNrKQorICAgICAgICBUQVJHRVQoQlVJTERfTUFQX1VOUEFDSykKKyAgICAgICAgX2J1aWxkX21hcF91bnBhY2s6IHsKKyAgICAgICAgICAgIGludCB3aXRoX2NhbGwgPSBvcGNvZGUgPT0gQlVJTERfTUFQX1VOUEFDS19XSVRIX0NBTEw7CisgICAgICAgICAgICBpbnQgbnVtX21hcHM7CisgICAgICAgICAgICBpbnQgZnVuY3Rpb25fbG9jYXRpb247CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdW0gPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICBpZiAoc3VtID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmICh3aXRoX2NhbGwpIHsKKyAgICAgICAgICAgICAgICBudW1fbWFwcyA9IG9wYXJnICYgMHhmZjsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbl9sb2NhdGlvbiA9IChvcGFyZz4+OCkgJiAweGZmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbnVtX21hcHMgPSBvcGFyZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpID0gbnVtX21hcHM7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJnID0gUEVFSyhpKTsKKyAgICAgICAgICAgICAgICBpZiAod2l0aF9jYWxsKSB7CisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppbnRlcnNlY3Rpb24gPSBfUHlEaWN0Vmlld19JbnRlcnNlY3Qoc3VtLCBhcmcpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb24gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRUVLKGZ1bmN0aW9uX2xvY2F0aW9uICsgbnVtX21hcHMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcyUuMjAwcyBhcmd1bWVudCBhZnRlciAqKiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBhIG1hcHBpbmcsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEZ1bmNOYW1lKGZ1bmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEZ1bmNEZXNjKGZ1bmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdW0pOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChQeVNldF9HRVRfU0laRShpbnRlcnNlY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGlkeCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqa2V5OworICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQRUVLKGZ1bmN0aW9uX2xvY2F0aW9uICsgbnVtX21hcHMpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2g7CisgICAgICAgICAgICAgICAgICAgICAgICBfUHlTZXRfTmV4dEVudHJ5KGludGVyc2VjdGlvbiwgJmlkeCwgJmtleSwgJmhhc2gpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soa2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzJS4yMDBzIGtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0RnVuY05hbWUoZnVuYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0RnVuY0Rlc2MoZnVuYykpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcyUuMjAwcyBnb3QgbXVsdGlwbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCAnJVUnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRGdW5jTmFtZShmdW5jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRGdW5jRGVzYyhmdW5jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdW0pOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaW50ZXJzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X1VwZGF0ZShzdW0sIGFyZykgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclLjIwMHMnIG9iamVjdCBpcyBub3QgYSBtYXBwaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3VtKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChudW1fbWFwcy0tKQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihQT1AoKSk7CisgICAgICAgICAgICBQVVNIKHN1bSk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKQEAgLTI0MDUsNyArMjcyOCw3IEBACiAgICAgICAgICAgICBTVEFDS0FESigtMik7CiAgICAgICAgICAgICBtYXAgPSBzdGFja19wb2ludGVyWy1vcGFyZ107ICAvKiBkaWN0ICovCiAgICAgICAgICAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QobWFwKSk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShtYXAsIGtleSwgdmFsdWUpOyAgLyogdlt3XSA9IHUgKi8KKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG1hcCwga2V5LCB2YWx1ZSk7ICAvKiBtYXBba2V5XSA9IHZhbHVlICovCiAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBpZiAoZXJyICE9IDApCkBAIC0yNjU1LDYgKzI5NzgsMzQgQEAKICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAorICAgICAgICBUQVJHRVQoR0VUX1lJRUxEX0ZST01fSVRFUikgeworICAgICAgICAgICAgLyogYmVmb3JlOiBbb2JqXTsgYWZ0ZXIgW2dldGl0ZXIob2JqKV0gKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyYWJsZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXI7CisgICAgICAgICAgICBpZiAoUHlDb3JvX0NoZWNrRXhhY3QoaXRlcmFibGUpKSB7CisgICAgICAgICAgICAgICAgLyogYGl0ZXJhYmxlYCBpcyBhIGNvcm91dGluZSAqLworICAgICAgICAgICAgICAgIGlmICghKGNvLT5jb19mbGFncyAmIChDT19DT1JPVVRJTkUgfCBDT19JVEVSQUJMRV9DT1JPVVRJTkUpKSkgeworICAgICAgICAgICAgICAgICAgICAvKiBhbmQgaXQgaXMgdXNlZCBpbiBhICd5aWVsZCBmcm9tJyBleHByZXNzaW9uIG9mIGEKKyAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhciBnZW5lcmF0b3IuICovCisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFNFVF9UT1AoTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90ICd5aWVsZCBmcm9tJyBhIGNvcm91dGluZSBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIGEgbm9uLWNvcm91dGluZSBnZW5lcmF0b3IiKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghUHlHZW5fQ2hlY2tFeGFjdChpdGVyYWJsZSkpIHsKKyAgICAgICAgICAgICAgICAvKiBgaXRlcmFibGVgIGlzIG5vdCBhIGdlbmVyYXRvci4gKi8KKyAgICAgICAgICAgICAgICBpdGVyID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXJhYmxlKTsKKyAgICAgICAgICAgICAgICBTRVRfVE9QKGl0ZXIpOworICAgICAgICAgICAgICAgIGlmIChpdGVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKEZPUl9JVEVSKTsKICAgICAgICAgVEFSR0VUKEZPUl9JVEVSKSB7CiAgICAgICAgICAgICAvKiBiZWZvcmU6IFtpdGVyXTsgYWZ0ZXI6IFtpdGVyLCBpdGVyKCldICpvciogW10gKi8KQEAgLTI3MDcsNiArMzA1OCwzOSBAQAogICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCisgICAgICAgIFRBUkdFVChCRUZPUkVfQVNZTkNfV0lUSCkgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19hZXhpdF9fKTsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fYWVudGVyX18pOworCisgICAgICAgICAgICBQeU9iamVjdCAqbWdyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhpdCA9IHNwZWNpYWxfbG9va3VwKG1nciwgJlB5SWRfX19hZXhpdF9fKSwKKyAgICAgICAgICAgICAgICAgICAgICplbnRlcjsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgICAgICBpZiAoZXhpdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBTRVRfVE9QKGV4aXQpOworICAgICAgICAgICAgZW50ZXIgPSBzcGVjaWFsX2xvb2t1cChtZ3IsICZQeUlkX19fYWVudGVyX18pOworICAgICAgICAgICAgUHlfREVDUkVGKG1ncik7CisgICAgICAgICAgICBpZiAoZW50ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhlbnRlciwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW50ZXIpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKFNFVFVQX0FTWU5DX1dJVEgpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQT1AoKTsKKyAgICAgICAgICAgIC8qIFNldHVwIHRoZSBmaW5hbGx5IGJsb2NrIGJlZm9yZSBwdXNoaW5nIHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgIG9mIF9fYWVudGVyX18gb24gdGhlIHN0YWNrLiAqLworICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIFNFVFVQX0ZJTkFMTFksIElOU1RSX09GRlNFVCgpICsgb3BhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfTEVWRUwoKSk7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKICAgICAgICAgVEFSR0VUKFNFVFVQX1dJVEgpIHsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZXhpdF9fKTsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZW50ZXJfXyk7CkBAIC0yNzMzLDcgKzMxMTcsNyBAQAogICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChXSVRIX0NMRUFOVVApIHsKKyAgICAgICAgVEFSR0VUKFdJVEhfQ0xFQU5VUF9TVEFSVCkgewogICAgICAgICAgICAgLyogQXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgYXJlIDEtNiB2YWx1ZXMgaW5kaWNhdGluZwogICAgICAgICAgICAgICAgaG93L3doeSB3ZSBlbnRlcmVkIHRoZSBmaW5hbGx5IGNsYXVzZToKICAgICAgICAgICAgICAgIC0gVE9QID0gTm9uZQpAQCAtMjc2MSw3ICszMTQ1LDYgQEAKIAogICAgICAgICAgICAgUHlPYmplY3QgKmV4aXRfZnVuYzsKICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBUT1AoKSwgKnZhbCA9IFB5X05vbmUsICp0YiA9IFB5X05vbmUsICpyZXM7Ci0gICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgaWYgKGV4YyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgKHZvaWQpUE9QKCk7CiAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gVE9QKCk7CkBAIC0yODExLDExICszMTk0LDI2IEBACiAgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAorICAgICAgICAgICAgUHlfSU5DUkVGKGV4Yyk7IC8qIER1cGxpY2F0aW5nIHRoZSBleGNlcHRpb24gb24gdGhlIHN0YWNrICovCisgICAgICAgICAgICBQVVNIKGV4Yyk7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBQUkVESUNUKFdJVEhfQ0xFQU5VUF9GSU5JU0gpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFBSRURJQ1RFRChXSVRIX0NMRUFOVVBfRklOSVNIKTsKKyAgICAgICAgVEFSR0VUKFdJVEhfQ0xFQU5VUF9GSU5JU0gpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisKICAgICAgICAgICAgIGlmIChleGMgIT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlcnIgPSAwOworCiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihleGMpOwogCiAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjg2Nyw4ICszMjY1LDcgQEAKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgICAgICAgICAgICAgZnVuYyA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihmdW5jKTsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZnVuYyk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKCpwZnVuYyk7Ci0gICAgICAgICAgICAgICAgKnBmdW5jID0gc2VsZjsKKyAgICAgICAgICAgICAgICBQeV9TRVRSRUYoKnBmdW5jLCBzZWxmKTsKICAgICAgICAgICAgICAgICBuYSsrOwogICAgICAgICAgICAgICAgIC8qIG4rKzsgKi8KICAgICAgICAgICAgIH0gZWxzZQpAQCAtMjkyMyw2ICszMzIwLDcgQEAKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYW5ucyA9IFB5RGljdF9OZXcoKTsKICAgICAgICAgICAgICAgICBpZiAoYW5ucyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbmFtZV9peCA9IFB5VHVwbGVfU2l6ZShuYW1lcyk7CkBAIC0yOTM4LDkgKzMzMzYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZXMpOwogCiAgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMoZnVuYywgYW5ucykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCkBAIC0yOTUwLDcgKzMzNTAsNiBAQAogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogWFhYIE1heWJlIHRoaXMgc2hvdWxkIGJlIGEgc2VwYXJhdGUgb3Bjb2RlPyAqLwpAQCAtMzAyNiw2ICszNDI1LDcgQEAKICAgICAgICAgICAgIGdvdG8gZGlzcGF0Y2hfb3Bjb2RlOwogICAgICAgICB9CiAKKwogI2lmIFVTRV9DT01QVVRFRF9HT1RPUwogICAgICAgICBfdW5rbm93bl9vcGNvZGU6CiAjZW5kaWYKQEAgLTMxNjgsMTEgKzM1NjgsMTAgQEAKICAgICBpZiAod2h5ICE9IFdIWV9SRVRVUk4pCiAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAKLSAgICBhc3NlcnQoKHJldHZhbCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgfHwgKHJldHZhbCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKKyAgICBhc3NlcnQoKHJldHZhbCAhPSBOVUxMKSBeIChQeUVycl9PY2N1cnJlZCgpICE9IE5VTEwpKTsKIAogZmFzdF95aWVsZDoKLSAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SKSB7CisgICAgaWYgKGNvLT5jb19mbGFncyAmIChDT19HRU5FUkFUT1IgfCBDT19DT1JPVVRJTkUpKSB7CiAKICAgICAgICAgLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBibG9jayBpcyB0byBwdXQgYXNpZGUgdGhlIGdlbmVyYXRvcidzIGV4Y2VwdGlvbgogICAgICAgICAgICBzdGF0ZSBhbmQgcmVzdG9yZSB0aGF0IG9mIHRoZSBjYWxsaW5nIGZyYW1lLiBJZiB0aGUgY3VycmVudApAQCAtMzIzMCw3ICszNjI5LDcgQEAKICAgICBmLT5mX2V4ZWN1dGluZyA9IDA7CiAgICAgdHN0YXRlLT5mcmFtZSA9IGYtPmZfYmFjazsKIAotICAgIHJldHVybiByZXR2YWw7CisgICAgcmV0dXJuIF9QeV9DaGVja0Z1bmN0aW9uUmVzdWx0KE5VTEwsIHJldHZhbCwgIlB5RXZhbF9FdmFsRnJhbWVFeCIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzM4NywxMCArMzc4NiwxMSBAQAogICAgUHlFdmFsX0V2YWxGcmFtZSgpIGFuZCBQeUV2YWxfRXZhbENvZGVFeCgpIHlvdSB3aWxsIG5lZWQgdG8gYWRqdXN0CiAgICB0aGUgdGVzdCBpbiB0aGUgaWYgc3RhdGVtZW50cyBpbiBNaXNjL2dkYmluaXQgKHB5c3RhY2sgYW5kIHB5c3RhY2t2KS4gKi8KIAotUHlPYmplY3QgKgotUHlFdmFsX0V2YWxDb2RlRXgoUHlPYmplY3QgKl9jbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsCitzdGF0aWMgUHlPYmplY3QgKgorX1B5RXZhbF9FdmFsQ29kZVdpdGhOYW1lKFB5T2JqZWN0ICpfY28sIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLAogICAgICAgICAgICBQeU9iamVjdCAqKmFyZ3MsIGludCBhcmdjb3VudCwgUHlPYmplY3QgKiprd3MsIGludCBrd2NvdW50LAotICAgICAgICAgICBQeU9iamVjdCAqKmRlZnMsIGludCBkZWZjb3VudCwgUHlPYmplY3QgKmt3ZGVmcywgUHlPYmplY3QgKmNsb3N1cmUpCisgICAgICAgICAgIFB5T2JqZWN0ICoqZGVmcywgaW50IGRlZmNvdW50LCBQeU9iamVjdCAqa3dkZWZzLCBQeU9iamVjdCAqY2xvc3VyZSwKKyAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpxdWFsbmFtZSkKIHsKICAgICBQeUNvZGVPYmplY3QqIGNvID0gKFB5Q29kZU9iamVjdCopX2NvOwogICAgIFB5RnJhbWVPYmplY3QgKmY7CkBAIC0zNTczLDcgKzM5NzMsMjEgQEAKICAgICAgICAgZnJlZXZhcnNbUHlUdXBsZV9HRVRfU0laRShjby0+Y29fY2VsbHZhcnMpICsgaV0gPSBvOwogICAgIH0KIAotICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IpIHsKKyAgICBpZiAoY28tPmNvX2ZsYWdzICYgKENPX0dFTkVSQVRPUiB8IENPX0NPUk9VVElORSkpIHsKKyAgICAgICAgUHlPYmplY3QgKmdlbjsKKyAgICAgICAgUHlPYmplY3QgKmNvcm9fd3JhcHBlciA9IHRzdGF0ZS0+Y29yb3V0aW5lX3dyYXBwZXI7CisgICAgICAgIGludCBpc19jb3JvID0gY28tPmNvX2ZsYWdzICYgQ09fQ09ST1VUSU5FOworCisgICAgICAgIGlmIChpc19jb3JvICYmIHRzdGF0ZS0+aW5fY29yb3V0aW5lX3dyYXBwZXIpIHsKKyAgICAgICAgICAgIGFzc2VydChjb3JvX3dyYXBwZXIgIT0gTlVMTCk7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JvdXRpbmUgd3JhcHBlciAlLjIwMFIgYXR0ZW1wdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAidG8gcmVjdXJzaXZlbHkgd3JhcCAlLjIwMFIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvcm9fd3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbyk7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKwogICAgICAgICAvKiBEb24ndCBuZWVkIHRvIGtlZXAgdGhlIHJlZmVyZW5jZSB0byBmX2JhY2ssIGl0IHdpbGwgYmUgc2V0CiAgICAgICAgICAqIHdoZW4gdGhlIGdlbmVyYXRvciBpcyByZXN1bWVkLiAqLwogICAgICAgICBQeV9DTEVBUihmLT5mX2JhY2spOwpAQCAtMzU4Miw3ICszOTk2LDIzIEBACiAKICAgICAgICAgLyogQ3JlYXRlIGEgbmV3IGdlbmVyYXRvciB0aGF0IG93bnMgdGhlIHJlYWR5IHRvIHJ1biBmcmFtZQogICAgICAgICAgKiBhbmQgcmV0dXJuIHRoYXQgYXMgdGhlIHZhbHVlLiAqLwotICAgICAgICByZXR1cm4gUHlHZW5fTmV3KGYpOworICAgICAgICBpZiAoaXNfY29ybykgeworICAgICAgICAgICAgZ2VuID0gUHlDb3JvX05ldyhmLCBuYW1lLCBxdWFsbmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnZW4gPSBQeUdlbl9OZXdXaXRoUXVhbE5hbWUoZiwgbmFtZSwgcXVhbG5hbWUpOworICAgICAgICB9CisgICAgICAgIGlmIChnZW4gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmIChpc19jb3JvICYmIGNvcm9fd3JhcHBlciAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqd3JhcHBlZDsKKyAgICAgICAgICAgIHRzdGF0ZS0+aW5fY29yb3V0aW5lX3dyYXBwZXIgPSAxOworICAgICAgICAgICAgd3JhcHBlZCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihjb3JvX3dyYXBwZXIsICJOIiwgZ2VuKTsKKyAgICAgICAgICAgIHRzdGF0ZS0+aW5fY29yb3V0aW5lX3dyYXBwZXIgPSAwOworICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZ2VuOwogICAgIH0KIAogICAgIHJldHZhbCA9IFB5RXZhbF9FdmFsRnJhbWVFeChmLDApOwpAQCAtMzYwMSw2ICs0MDMxLDE2IEBACiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAorUHlPYmplY3QgKgorUHlFdmFsX0V2YWxDb2RlRXgoUHlPYmplY3QgKl9jbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsCisgICAgICAgICAgIFB5T2JqZWN0ICoqYXJncywgaW50IGFyZ2NvdW50LCBQeU9iamVjdCAqKmt3cywgaW50IGt3Y291bnQsCisgICAgICAgICAgIFB5T2JqZWN0ICoqZGVmcywgaW50IGRlZmNvdW50LCBQeU9iamVjdCAqa3dkZWZzLCBQeU9iamVjdCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5RXZhbF9FdmFsQ29kZVdpdGhOYW1lKF9jbywgZ2xvYmFscywgbG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgYXJnY291bnQsIGt3cywga3djb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZnMsIGRlZmNvdW50LCBrd2RlZnMsIGNsb3N1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIHNwZWNpYWxfbG9va3VwKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqaWQpCkBAIC0zNzkxLDkgKzQyMzEsMTcgQEAKICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewogICAgICAgICAgICAgLyogSXRlcmF0b3IgZG9uZSwgdmlhIGVycm9yIG9yIGV4aGF1c3Rpb24uICovCiAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIm5lZWQgbW9yZSB0aGFuICVkIHZhbHVlJXMgdG8gdW5wYWNrIiwKLSAgICAgICAgICAgICAgICAgICAgaSwgaSA9PSAxID8gIiIgOiAicyIpOworICAgICAgICAgICAgICAgIGlmIChhcmdjbnRhZnRlciA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIHZhbHVlcyB0byB1bnBhY2sgKGV4cGVjdGVkICVkLCBnb3QgJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2NudCwgaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIHZhbHVlcyB0byB1bnBhY2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgIihleHBlY3RlZCBhdCBsZWFzdCAlZCwgZ290ICVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdjbnQgKyBhcmdjbnRhZnRlciwgaSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290byBFcnJvcjsKICAgICAgICAgfQpAQCAtMzgxMCw4ICs0MjU4LDkgQEAKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrICIKLSAgICAgICAgICAgICAgICAgICAgICIoZXhwZWN0ZWQgJWQpIiwgYXJnY250KTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAidG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjayAoZXhwZWN0ZWQgJWQpIiwKKyAgICAgICAgICAgIGFyZ2NudCk7CiAgICAgICAgIGdvdG8gRXJyb3I7CiAgICAgfQogCkBAIC0zODIzLDggKzQyNzIsOSBAQAogCiAgICAgbGwgPSBQeUxpc3RfR0VUX1NJWkUobCk7CiAgICAgaWYgKGxsIDwgYXJnY250YWZ0ZXIpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJuZWVkIG1vcmUgdGhhbiAlemQgdmFsdWVzIHRvIHVucGFjayIsCi0gICAgICAgICAgICAgICAgICAgICBhcmdjbnQgKyBsbCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgIm5vdCBlbm91Z2ggdmFsdWVzIHRvIHVucGFjayAoZXhwZWN0ZWQgYXQgbGVhc3QgJWQsIGdvdCAlemQpIiwKKyAgICAgICAgICAgIGFyZ2NudCArIGFyZ2NudGFmdGVyLCBhcmdjbnQgKyBsbCk7CiAgICAgICAgIGdvdG8gRXJyb3I7CiAgICAgfQogCkBAIC00MDA4LDYgKzQ0NTgsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMgIT0gTlVMTCkpOwogfQogCit2b2lkCitfUHlFdmFsX1NldENvcm91dGluZVdyYXBwZXIoUHlPYmplY3QgKndyYXBwZXIpCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKworICAgIFB5X1hJTkNSRUYod3JhcHBlcik7CisgICAgUHlfWFNFVFJFRih0c3RhdGUtPmNvcm91dGluZV93cmFwcGVyLCB3cmFwcGVyKTsKK30KKworUHlPYmplY3QgKgorX1B5RXZhbF9HZXRDb3JvdXRpbmVXcmFwcGVyKHZvaWQpCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICByZXR1cm4gdHN0YXRlLT5jb3JvdXRpbmVfd3JhcHBlcjsKK30KKwogUHlPYmplY3QgKgogUHlFdmFsX0dldEJ1aWx0aW5zKHZvaWQpCiB7CkBAIC00MDg2LDggKzQ1NTIsOCBAQAogCiAjaWZkZWYgUHlfREVCVUcKICAgICAvKiBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcygpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbgotICAgICAgIHNldCwgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpCi0gICAgICAgYW5kIHNvIHRoZSBjYWxsZXIgbG9zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgICAgIHNldC4gSXQgcmFpc2VzIGEgbmV3IGV4Y2VwdGlvbiBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkIG9yIGlmCisgICAgICAgUHlUdXBsZV9OZXcoKSBmYWlscywgYW5kIHNvIHRoZSBvcmlnaW5hbCBleGNlcHRpb24gaXMgbG9zdC4gKi8KICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOwogI2VuZGlmCiAKQEAgLTQxMTQsOCArNDU4MCw2IEBACiAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBhcmcsIGt3KTsKICAgICBQeV9ERUNSRUYoYXJnKTsKIAotICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDIxOCwxMSArNDY4MiwxNSBAQAogICAgICAgICAgICAgUHlPYmplY3QgKnNlbGYgPSBQeUNGdW5jdGlvbl9HRVRfU0VMRihmdW5jKTsKICAgICAgICAgICAgIGlmIChmbGFncyAmIE1FVEhfTk9BUkdTICYmIG5hID09IDApIHsKICAgICAgICAgICAgICAgICBDX1RSQUNFKHgsICgqbWV0aCkoc2VsZixOVUxMKSk7CisKKyAgICAgICAgICAgICAgICB4ID0gX1B5X0NoZWNrRnVuY3Rpb25SZXN1bHQoZnVuYywgeCwgTlVMTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIE1FVEhfTyAmJiBuYSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZyA9IEVYVF9QT1AoKnBwX3N0YWNrKTsKICAgICAgICAgICAgICAgICBDX1RSQUNFKHgsICgqbWV0aCkoc2VsZixhcmcpKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXJnKTsKKworICAgICAgICAgICAgICAgIHggPSBfUHlfQ2hlY2tGdW5jdGlvblJlc3VsdChmdW5jLCB4LCBOVUxMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGVycl9hcmdzKGZ1bmMsIGZsYWdzLCBuYSk7CkBAIC00MjQyLDcgKzQ3MTAsOCBAQAogICAgICAgICAgICAgICAgIHggPSBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIGlmIChQeU1ldGhvZF9DaGVjayhmdW5jKSAmJiBQeU1ldGhvZF9HRVRfU0VMRihmdW5jKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICAvKiBvcHRpbWl6ZSBhY2Nlc3MgdG8gYm91bmQgbWV0aG9kcyAqLwogICAgICAgICAgICAgUHlPYmplY3QgKnNlbGYgPSBQeU1ldGhvZF9HRVRfU0VMRihmdW5jKTsKQEAgLTQyNTEsOCArNDcyMCw3IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgICAgICAgICBmdW5jID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKGZ1bmMpOwogICAgICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOwotICAgICAgICAgICAgUHlfREVDUkVGKCpwZnVuYyk7Ci0gICAgICAgICAgICAqcGZ1bmMgPSBzZWxmOworICAgICAgICAgICAgUHlfU0VUUkVGKCpwZnVuYywgc2VsZik7CiAgICAgICAgICAgICBuYSsrOwogICAgICAgICAgICAgbisrOwogICAgICAgICB9IGVsc2UKQEAgLTQyNjQsOSArNDczMiw5IEBACiAgICAgICAgICAgICB4ID0gZG9fY2FsbChmdW5jLCBwcF9zdGFjaywgbmEsIG5rKTsKICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMSk7CiAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKworICAgICAgICBhc3NlcnQoKHggIT0gTlVMTCkgXiAoUHlFcnJfT2NjdXJyZWQoKSAhPSBOVUxMKSk7CiAgICAgfQotICAgIGFzc2VydCgoeCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICB8fCAoeCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKIAogICAgIC8qIENsZWFyIHRoZSBzdGFjayBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgQWxzbyByZW1vdmVzCiAgICAgICAgdGhlIGFyZ3VtZW50cyBpbiBjYXNlIHRoZXkgd2VyZW4ndCBjb25zdW1lZCBhbHJlYWR5CkBAIC00Mjc4LDggKzQ3NDYsNyBAQAogICAgICAgICBQQ0FMTChQQ0FMTF9QT1ApOwogICAgIH0KIAotICAgIGFzc2VydCgoeCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICB8fCAoeCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKKyAgICBhc3NlcnQoKHggIT0gTlVMTCkgXiAoUHlFcnJfT2NjdXJyZWQoKSAhPSBOVUxMKSk7CiAgICAgcmV0dXJuIHg7CiB9CiAKQEAgLTQyOTksNiArNDc2Niw4IEBACiAgICAgUHlPYmplY3QgKmdsb2JhbHMgPSBQeUZ1bmN0aW9uX0dFVF9HTE9CQUxTKGZ1bmMpOwogICAgIFB5T2JqZWN0ICphcmdkZWZzID0gUHlGdW5jdGlvbl9HRVRfREVGQVVMVFMoZnVuYyk7CiAgICAgUHlPYmplY3QgKmt3ZGVmcyA9IFB5RnVuY3Rpb25fR0VUX0tXX0RFRkFVTFRTKGZ1bmMpOworICAgIFB5T2JqZWN0ICpuYW1lID0gKChQeUZ1bmN0aW9uT2JqZWN0ICopZnVuYykgLT4gZnVuY19uYW1lOworICAgIFB5T2JqZWN0ICpxdWFsbmFtZSA9ICgoUHlGdW5jdGlvbk9iamVjdCAqKWZ1bmMpIC0+IGZ1bmNfcXVhbG5hbWU7CiAgICAgUHlPYmplY3QgKipkID0gTlVMTDsKICAgICBpbnQgbmQgPSAwOwogCkBAIC00MzQxLDEwICs0ODEwLDExIEBACiAgICAgICAgIGQgPSAmUHlUdXBsZV9HRVRfSVRFTShhcmdkZWZzLCAwKTsKICAgICAgICAgbmQgPSBQeV9TSVpFKGFyZ2RlZnMpOwogICAgIH0KLSAgICByZXR1cm4gUHlFdmFsX0V2YWxDb2RlRXgoKFB5T2JqZWN0KiljbywgZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopTlVMTCwgKCpwcF9zdGFjayktbiwgbmEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqcHBfc3RhY2spLTIqbmssIG5rLCBkLCBuZCwga3dkZWZzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dFVF9DTE9TVVJFKGZ1bmMpKTsKKyAgICByZXR1cm4gX1B5RXZhbF9FdmFsQ29kZVdpdGhOYW1lKChQeU9iamVjdCopY28sIGdsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilOVUxMLCAoKnBwX3N0YWNrKS1uLCBuYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqcHBfc3RhY2spLTIqbmssIG5rLCBkLCBuZCwga3dkZWZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HRVRfQ0xPU1VSRShmdW5jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHF1YWxuYW1lKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQ1MDgsMjAgKzQ5NzgsMjggQEAKICAgICAgICAgICAgIGt3ZGljdCA9IGQ7CiAgICAgICAgIH0KICAgICB9CisgICAgaWYgKG5rID4gMCkgeworICAgICAgICBrd2RpY3QgPSB1cGRhdGVfa2V5d29yZF9hcmdzKGt3ZGljdCwgbmssIHBwX3N0YWNrLCBmdW5jKTsKKyAgICAgICAgaWYgKGt3ZGljdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBleHRfY2FsbF9mYWlsOworICAgIH0KKwogICAgIGlmIChmbGFncyAmIENBTExfRkxBR19WQVIpIHsKICAgICAgICAgc3RhcmFyZyA9IEVYVF9QT1AoKnBwX3N0YWNrKTsKICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHN0YXJhcmcpKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdCA9IE5VTEw7CisgICAgICAgICAgICBpZiAoUHlfVFlQRShzdGFyYXJnKS0+dHBfaXRlciA9PSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgICFQeVNlcXVlbmNlX0NoZWNrKHN0YXJhcmcpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcyUuMjAwcyBhcmd1bWVudCBhZnRlciAqICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgYW4gaXRlcmFibGUsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0RnVuY05hbWUoZnVuYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRGdW5jRGVzYyhmdW5jKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmFyZy0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBleHRfY2FsbF9mYWlsOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdCA9IFB5U2VxdWVuY2VfVHVwbGUoc3RhcmFyZyk7CiAgICAgICAgICAgICBpZiAodCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcyUuMjAwcyBhcmd1bWVudCBhZnRlciAqICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEZ1bmNOYW1lKGZ1bmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEZ1bmNEZXNjKGZ1bmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcmFyZy0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGdvdG8gZXh0X2NhbGxfZmFpbDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFyYXJnKTsKQEAgLTQ1MjksMTEgKzUwMDcsNiBAQAogICAgICAgICB9CiAgICAgICAgIG5zdGFyID0gUHlUdXBsZV9HRVRfU0laRShzdGFyYXJnKTsKICAgICB9Ci0gICAgaWYgKG5rID4gMCkgewotICAgICAgICBrd2RpY3QgPSB1cGRhdGVfa2V5d29yZF9hcmdzKGt3ZGljdCwgbmssIHBwX3N0YWNrLCBmdW5jKTsKLSAgICAgICAgaWYgKGt3ZGljdCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBleHRfY2FsbF9mYWlsOwotICAgIH0KICAgICBjYWxsYXJncyA9IHVwZGF0ZV9zdGFyX2FyZ3MobmEsIG5zdGFyLCBzdGFyYXJnLCBwcF9zdGFjayk7CiAgICAgaWYgKGNhbGxhcmdzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXh0X2NhbGxfZmFpbDsKQEAgLTQ1NjMsMTIgKzUwMzYsMTAgQEAKICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKICAgICBQeV9YREVDUkVGKGt3ZGljdCk7CiAgICAgUHlfWERFQ1JFRihzdGFyYXJnKTsKLSAgICBhc3NlcnQoKHJlc3VsdCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICB8fCAocmVzdWx0ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS8qIEV4dHJhY3QgYSBzbGljZSBpbmRleCBmcm9tIGEgUHlJbnQgb3IgUHlMb25nIG9yIGFuIG9iamVjdCB3aXRoIHRoZQorLyogRXh0cmFjdCBhIHNsaWNlIGluZGV4IGZyb20gYSBQeUxvbmcgb3IgYW4gb2JqZWN0IHdpdGggdGhlCiAgICBuYl9pbmRleCBzbG90IGRlZmluZWQsIGFuZCBzdG9yZSBpbiAqcGkuCiAgICBTaWxlbnRseSByZWR1Y2UgdmFsdWVzIGxhcmdlciB0aGFuIFBZX1NTSVpFX1RfTUFYIHRvIFBZX1NTSVpFX1RfTUFYLAogICAgYW5kIHNpbGVudGx5IGJvb3N0IHZhbHVlcyBsZXNzIHRoYW4gLVBZX1NTSVpFX1RfTUFYLTEgdG8gLVBZX1NTSVpFX1RfTUFYLTEuCkBAIC00NjU4LDEyICs1MTI5LDM1IEBACiBpbXBvcnRfZnJvbShQeU9iamVjdCAqdiwgUHlPYmplY3QgKm5hbWUpCiB7CiAgICAgUHlPYmplY3QgKng7CisgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOworICAgIFB5T2JqZWN0ICpmdWxsbW9kbmFtZSwgKnBrZ25hbWU7CiAKICAgICB4ID0gUHlPYmplY3RfR2V0QXR0cih2LCBuYW1lKTsKLSAgICBpZiAoeCA9PSBOVUxMICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgImNhbm5vdCBpbXBvcnQgbmFtZSAlUiIsIG5hbWUpOworICAgIGlmICh4ICE9IE5VTEwgfHwgIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICByZXR1cm4geDsKKyAgICAvKiBJc3N1ZSAjMTc2MzY6IGluIGNhc2UgdGhpcyBmYWlsZWQgYmVjYXVzZSBvZiBhIGNpcmN1bGFyIHJlbGF0aXZlCisgICAgICAgaW1wb3J0LCB0cnkgdG8gZmFsbGJhY2sgb24gcmVhZGluZyB0aGUgbW9kdWxlIGRpcmVjdGx5IGZyb20KKyAgICAgICBzeXMubW9kdWxlcy4gKi8KKyAgICBQeUVycl9DbGVhcigpOworICAgIHBrZ25hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHYsICZQeUlkX19fbmFtZV9fKTsKKyAgICBpZiAocGtnbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQorICAgIGZ1bGxtb2RuYW1lID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVLiVVIiwgcGtnbmFtZSwgbmFtZSk7CisgICAgUHlfREVDUkVGKHBrZ25hbWUpOworICAgIGlmIChmdWxsbW9kbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB4ID0gUHlEaWN0X0dldEl0ZW0oUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpLCBmdWxsbW9kbmFtZSk7CisgICAgUHlfREVDUkVGKGZ1bGxtb2RuYW1lKTsKKyAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0lOQ1JFRih4KTsKICAgICByZXR1cm4geDsKKyBlcnJvcjoKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJjYW5ub3QgaW1wb3J0IG5hbWUgJVIiLCBuYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvUHl0aG9uL2NldmFsX2dpbC5oIGIvUHl0aG9uL2NldmFsX2dpbC5oCmluZGV4IDI3MDJkNWMuLjhkMzhlZTkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jZXZhbF9naWwuaAorKysgYi9QeXRob24vY2V2YWxfZ2lsLmgKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgdmFyaWFibGUgKGdpbF9kcm9wX3JlcXVlc3QpIGlzIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgd2hpY2ggaXMgY2hlY2tlZAogICAgICBhdCBldmVyeSB0dXJuIG9mIHRoZSBldmFsIGxvb3AuIFRoYXQgdmFyaWFibGUgaXMgc2V0IGFmdGVyIGEgd2FpdCBvZgogICAgICBgaW50ZXJ2YWxgIG1pY3Jvc2Vjb25kcyBvbiBgZ2lsX2NvbmRgIGhhcyB0aW1lZCBvdXQuCi0gICAgICAKKwogICAgICAgW0FjdHVhbGx5LCBhbm90aGVyIHZvbGF0aWxlIGJvb2xlYW4gdmFyaWFibGUgKGV2YWxfYnJlYWtlcikgaXMgdXNlZAogICAgICAgIHdoaWNoIE9ScyBzZXZlcmFsIGNvbmRpdGlvbnMgaW50byBvbmUuIFZvbGF0aWxlIGJvb2xlYW5zIGFyZQogICAgICAgIHN1ZmZpY2llbnQgYXMgaW50ZXItdGhyZWFkIHNpZ25hbGxpbmcgbWVhbnMgc2luY2UgUHl0aG9uIGlzIHJ1bgpAQCAtNDEsNyArNDEsNyBAQAogICAgICB0aW1lIChgaW50ZXJ2YWxgIG1pY3Jvc2Vjb25kcykgYmVmb3JlIHNldHRpbmcgZ2lsX2Ryb3BfcmVxdWVzdC4gVGhpcwogICAgICBlbmNvdXJhZ2VzIGEgZGVmaW5lZCBzd2l0Y2hpbmcgcGVyaW9kLCBidXQgZG9lc24ndCBlbmZvcmNlIGl0IHNpbmNlCiAgICAgIG9wY29kZXMgY2FuIHRha2UgYW4gYXJiaXRyYXJ5IHRpbWUgdG8gZXhlY3V0ZS4KLSAKKwogICAgICBUaGUgYGludGVydmFsYCB2YWx1ZSBpcyBhdmFpbGFibGUgZm9yIHRoZSB1c2VyIHRvIHJlYWQgYW5kIG1vZGlmeQogICAgICB1c2luZyB0aGUgUHl0aG9uIEFQSSBgc3lzLntnZXQsc2V0fXN3aXRjaGludGVydmFsKClgLgogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgIHRoZSB2YWx1ZSBvZiBnaWxfbGFzdF9ob2xkZXIgaXMgY2hhbmdlZCB0byBzb21ldGhpbmcgZWxzZSB0aGFuIGl0cwogICAgICBvd24gdGhyZWFkIHN0YXRlIHBvaW50ZXIsIGluZGljYXRpbmcgdGhhdCBhbm90aGVyIHRocmVhZCB3YXMgYWJsZSB0bwogICAgICB0YWtlIHRoZSBHSUwuCi0gCisKICAgICAgVGhpcyBpcyBtZWFudCB0byBwcm9oaWJpdCB0aGUgbGF0ZW5jeS1hZHZlcnNlIGJlaGF2aW91ciBvbiBtdWx0aS1jb3JlCiAgICAgIG1hY2hpbmVzIHdoZXJlIG9uZSB0aHJlYWQgd291bGQgc3BlY3VsYXRpdmVseSByZWxlYXNlIHRoZSBHSUwsIGJ1dCBzdGlsbAogICAgICBydW4gYW5kIGVuZCB1cCBiZWluZyB0aGUgZmlyc3QgdG8gcmUtYWNxdWlyZSBpdCwgbWFraW5nIHRoZSAidGltZXNsaWNlcyIKQEAgLTExMSw3ICsxMTEsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2lsX3N3aXRjaF9udW1iZXIgPSAwOwogLyogTGFzdCBQeVRocmVhZFN0YXRlIGhvbGRpbmcgLyBoYXZpbmcgaGVsZCB0aGUgR0lMLiBUaGlzIGhlbHBzIHVzIGtub3cKICAgIHdoZXRoZXIgYW55b25lIGVsc2Ugd2FzIHNjaGVkdWxlZCBhZnRlciB3ZSBkcm9wcGVkIHRoZSBHSUwuICovCi1zdGF0aWMgX1B5X2F0b21pY19hZGRyZXNzIGdpbF9sYXN0X2hvbGRlciA9IHtOVUxMfTsKK3N0YXRpYyBfUHlfYXRvbWljX2FkZHJlc3MgZ2lsX2xhc3RfaG9sZGVyID0gezB9OwogCiAvKiBUaGlzIGNvbmRpdGlvbiB2YXJpYWJsZSBhbGxvd3Mgb25lIG9yIHNldmVyYWwgdGhyZWFkcyB0byB3YWl0IHVudGlsCiAgICB0aGUgR0lMIGlzIHJlbGVhc2VkLiBJbiBhZGRpdGlvbiwgdGhlIG11dGV4IGFsc28gcHJvdGVjdHMgdGhlIGFib3ZlCkBAIC0xNDIsNyArMTQyLDcgQEAKICNpZmRlZiBGT1JDRV9TV0lUQ0hJTkcKICAgICBDT05EX0lOSVQoc3dpdGNoX2NvbmQpOwogI2VuZGlmCi0gICAgX1B5X2F0b21pY19zdG9yZV9yZWxheGVkKCZnaWxfbGFzdF9ob2xkZXIsIE5VTEwpOworICAgIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZCgmZ2lsX2xhc3RfaG9sZGVyLCAwKTsKICAgICBfUHlfQU5OT1RBVEVfUldMT0NLX0NSRUFURSgmZ2lsX2xvY2tlZCk7CiAgICAgX1B5X2F0b21pY19zdG9yZV9leHBsaWNpdCgmZ2lsX2xvY2tlZCwgMCwgX1B5X21lbW9yeV9vcmRlcl9yZWxlYXNlKTsKIH0KQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgICAgICAvKiBTdWItaW50ZXJwcmV0ZXIgc3VwcG9ydDogdGhyZWFkcyBtaWdodCBoYXZlIGJlZW4gc3dpdGNoZWQKICAgICAgICAgICAgdW5kZXIgb3VyIGZlZXQgdXNpbmcgUHlUaHJlYWRTdGF0ZV9Td2FwKCkuIEZpeCB0aGUgR0lMIGxhc3QKICAgICAgICAgICAgaG9sZGVyIHZhcmlhYmxlIHNvIHRoYXQgb3VyIGhldXJpc3RpY3Mgd29yay4gKi8KLSAgICAgICAgX1B5X2F0b21pY19zdG9yZV9yZWxheGVkKCZnaWxfbGFzdF9ob2xkZXIsIHRzdGF0ZSk7CisgICAgICAgIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZCgmZ2lsX2xhc3RfaG9sZGVyLCAoUHlfdWludHB0cl90KXRzdGF0ZSk7CiAgICAgfQogCiAgICAgTVVURVhfTE9DSyhnaWxfbXV0ZXgpOwpAQCAtMTg2LDEyICsxODYsMTIgQEAKICAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJmdpbF9sb2NrZWQsIDApOwogICAgIENPTkRfU0lHTkFMKGdpbF9jb25kKTsKICAgICBNVVRFWF9VTkxPQ0soZ2lsX211dGV4KTsKLSAgICAKKwogI2lmZGVmIEZPUkNFX1NXSVRDSElORwogICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmZ2lsX2Ryb3BfcmVxdWVzdCkgJiYgdHN0YXRlICE9IE5VTEwpIHsKICAgICAgICAgTVVURVhfTE9DSyhzd2l0Y2hfbXV0ZXgpOwogICAgICAgICAvKiBOb3Qgc3dpdGNoZWQgeWV0ID0+IHdhaXQgKi8KLSAgICAgICAgaWYgKF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZnaWxfbGFzdF9ob2xkZXIpID09IHRzdGF0ZSkgeworICAgICAgICBpZiAoKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZnaWxfbGFzdF9ob2xkZXIpID09IHRzdGF0ZSkgewogICAgICAgICBSRVNFVF9HSUxfRFJPUF9SRVFVRVNUKCk7CiAgICAgICAgICAgICAvKiBOT1RFOiBpZiBDT05EX1dBSVQgZG9lcyBub3QgYXRvbWljYWxseSBzdGFydCB3YWl0aW5nIHdoZW4KICAgICAgICAgICAgICAgIHJlbGVhc2luZyB0aGUgbXV0ZXgsIGFub3RoZXIgdGhyZWFkIGNhbiBydW4gdGhyb3VnaCwgdGFrZQpAQCAtMjE1LDcgKzIxNSw3IEBACiAKICAgICBpZiAoIV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZnaWxfbG9ja2VkKSkKICAgICAgICAgZ290byBfcmVhZHk7Ci0gICAgCisKICAgICB3aGlsZSAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9sb2NrZWQpKSB7CiAgICAgICAgIGludCB0aW1lZF9vdXQgPSAwOwogICAgICAgICB1bnNpZ25lZCBsb25nIHNhdmVkX3N3aXRjaG51bTsKQEAgLTIzOSw4ICsyMzksOCBAQAogICAgIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZCgmZ2lsX2xvY2tlZCwgMSk7CiAgICAgX1B5X0FOTk9UQVRFX1JXTE9DS19BQ1FVSVJFRCgmZ2lsX2xvY2tlZCwgLyppc193cml0ZT0qLzEpOwogCi0gICAgaWYgKHRzdGF0ZSAhPSBfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmZ2lsX2xhc3RfaG9sZGVyKSkgewotICAgICAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJmdpbF9sYXN0X2hvbGRlciwgdHN0YXRlKTsKKyAgICBpZiAodHN0YXRlICE9IChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmZ2lsX2xhc3RfaG9sZGVyKSkgeworICAgICAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJmdpbF9sYXN0X2hvbGRlciwgKFB5X3VpbnRwdHJfdCl0c3RhdGUpOwogICAgICAgICArK2dpbF9zd2l0Y2hfbnVtYmVyOwogICAgIH0KIApAQCAtMjU0LDcgKzI1NCw3IEBACiAgICAgaWYgKHRzdGF0ZS0+YXN5bmNfZXhjICE9IE5VTEwpIHsKICAgICAgICAgX1B5RXZhbF9TaWduYWxBc3luY0V4YygpOwogICAgIH0KLSAgICAKKwogICAgIE1VVEVYX1VOTE9DSyhnaWxfbXV0ZXgpOwogICAgIGVycm5vID0gZXJyOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NsaW5pYy9ibHRpbm1vZHVsZS5jLmggYi9QeXRob24vY2xpbmljL2JsdGlubW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTJiMWYxCi0tLSAvZGV2L251bGwKKysrIGIvUHl0aG9uL2NsaW5pYy9ibHRpbm1vZHVsZS5jLmgKQEAgLTAsMCArMSw2NjIgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihidWlsdGluX2Fic19fZG9jX18sCisiYWJzKCRtb2R1bGUsIHgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBhcmd1bWVudC4iKTsKKworI2RlZmluZSBCVUlMVElOX0FCU19NRVRIT0RERUYgICAgXAorICAgIHsiYWJzIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fYWJzLCBNRVRIX08sIGJ1aWx0aW5fYWJzX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihidWlsdGluX2FsbF9fZG9jX18sCisiYWxsKCRtb2R1bGUsIGl0ZXJhYmxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgYm9vbCh4KSBpcyBUcnVlIGZvciBhbGwgdmFsdWVzIHggaW4gdGhlIGl0ZXJhYmxlLlxuIgorIlxuIgorIklmIHRoZSBpdGVyYWJsZSBpcyBlbXB0eSwgcmV0dXJuIFRydWUuIik7CisKKyNkZWZpbmUgQlVJTFRJTl9BTExfTUVUSE9EREVGICAgIFwKKyAgICB7ImFsbCIsIChQeUNGdW5jdGlvbilidWlsdGluX2FsbCwgTUVUSF9PLCBidWlsdGluX2FsbF9fZG9jX199LAorCitQeURvY19TVFJWQVIoYnVpbHRpbl9hbnlfX2RvY19fLAorImFueSgkbW9kdWxlLCBpdGVyYWJsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBUcnVlIGlmIGJvb2woeCkgaXMgVHJ1ZSBmb3IgYW55IHggaW4gdGhlIGl0ZXJhYmxlLlxuIgorIlxuIgorIklmIHRoZSBpdGVyYWJsZSBpcyBlbXB0eSwgcmV0dXJuIEZhbHNlLiIpOworCisjZGVmaW5lIEJVSUxUSU5fQU5ZX01FVEhPRERFRiAgICBcCisgICAgeyJhbnkiLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9hbnksIE1FVEhfTywgYnVpbHRpbl9hbnlfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGJ1aWx0aW5fYXNjaWlfX2RvY19fLAorImFzY2lpKCRtb2R1bGUsIG9iaiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhbiBBU0NJSS1vbmx5IHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC5cbiIKKyJcbiIKKyJBcyByZXByKCksIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nIGEgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4iCisib2JqZWN0LCBidXQgZXNjYXBlIHRoZSBub24tQVNDSUkgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5XG4iCisicmVwcigpIHVzaW5nIFxcXFx4LCBcXFxcdSBvciBcXFxcVSBlc2NhcGVzLiBUaGlzIGdlbmVyYXRlcyBhIHN0cmluZyBzaW1pbGFyXG4iCisidG8gdGhhdCByZXR1cm5lZCBieSByZXByKCkgaW4gUHl0aG9uIDIuIik7CisKKyNkZWZpbmUgQlVJTFRJTl9BU0NJSV9NRVRIT0RERUYgICAgXAorICAgIHsiYXNjaWkiLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9hc2NpaSwgTUVUSF9PLCBidWlsdGluX2FzY2lpX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihidWlsdGluX2Jpbl9fZG9jX18sCisiYmluKCRtb2R1bGUsIG51bWJlciwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG4iCisiXG4iCisiICAgPj4+IGJpbigyNzk2MjAyKVxuIgorIiAgIFwnMGIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwXCciKTsKKworI2RlZmluZSBCVUlMVElOX0JJTl9NRVRIT0RERUYgICAgXAorICAgIHsiYmluIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fYmluLCBNRVRIX08sIGJ1aWx0aW5fYmluX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihidWlsdGluX2NhbGxhYmxlX19kb2NfXywKKyJjYWxsYWJsZSgkbW9kdWxlLCBvYmosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gd2hldGhlciB0aGUgb2JqZWN0IGlzIGNhbGxhYmxlIChpLmUuLCBzb21lIGtpbmQgb2YgZnVuY3Rpb24pLlxuIgorIlxuIgorIk5vdGUgdGhhdCBjbGFzc2VzIGFyZSBjYWxsYWJsZSwgYXMgYXJlIGluc3RhbmNlcyBvZiBjbGFzc2VzIHdpdGggYVxuIgorIl9fY2FsbF9fKCkgbWV0aG9kLiIpOworCisjZGVmaW5lIEJVSUxUSU5fQ0FMTEFCTEVfTUVUSE9EREVGICAgIFwKKyAgICB7ImNhbGxhYmxlIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fY2FsbGFibGUsIE1FVEhfTywgYnVpbHRpbl9jYWxsYWJsZV9fZG9jX199LAorCitQeURvY19TVFJWQVIoYnVpbHRpbl9mb3JtYXRfX2RvY19fLAorImZvcm1hdCgkbW9kdWxlLCB2YWx1ZSwgZm9ybWF0X3NwZWM9XCdcJywgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKVxuIgorIlxuIgorImZvcm1hdF9zcGVjIGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmciKTsKKworI2RlZmluZSBCVUlMVElOX0ZPUk1BVF9NRVRIT0RERUYgICAgXAorICAgIHsiZm9ybWF0IiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fZm9ybWF0LCBNRVRIX1ZBUkFSR1MsIGJ1aWx0aW5fZm9ybWF0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2Zvcm1hdF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKmZvcm1hdF9zcGVjKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fZm9ybWF0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKyAgICBQeU9iamVjdCAqZm9ybWF0X3NwZWMgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfFU6Zm9ybWF0IiwKKyAgICAgICAgJnZhbHVlLCAmZm9ybWF0X3NwZWMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnVpbHRpbl9mb3JtYXRfaW1wbChtb2R1bGUsIHZhbHVlLCBmb3JtYXRfc3BlYyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJ1aWx0aW5fY2hyX19kb2NfXywKKyJjaHIoJG1vZHVsZSwgaSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIFVuaWNvZGUgc3RyaW5nIG9mIG9uZSBjaGFyYWN0ZXIgd2l0aCBvcmRpbmFsIGk7IDAgPD0gaSA8PSAweDEwZmZmZi4iKTsKKworI2RlZmluZSBCVUlMVElOX0NIUl9NRVRIT0RERUYgICAgXAorICAgIHsiY2hyIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fY2hyLCBNRVRIX08sIGJ1aWx0aW5fY2hyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2Nocl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIGludCBpKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fY2hyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImk6Y2hyIiwgJmkpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnVpbHRpbl9jaHJfaW1wbChtb2R1bGUsIGkpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihidWlsdGluX2NvbXBpbGVfX2RvY19fLAorImNvbXBpbGUoJG1vZHVsZSwgLywgc291cmNlLCBmaWxlbmFtZSwgbW9kZSwgZmxhZ3M9MCxcbiIKKyIgICAgICAgIGRvbnRfaW5oZXJpdD1GYWxzZSwgb3B0aW1pemU9LTEpXG4iCisiLS1cbiIKKyJcbiIKKyJDb21waWxlIHNvdXJjZSBpbnRvIGEgY29kZSBvYmplY3QgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgYnkgZXhlYygpIG9yIGV2YWwoKS5cbiIKKyJcbiIKKyJUaGUgc291cmNlIGNvZGUgbWF5IHJlcHJlc2VudCBhIFB5dGhvbiBtb2R1bGUsIHN0YXRlbWVudCBvciBleHByZXNzaW9uLlxuIgorIlRoZSBmaWxlbmFtZSB3aWxsIGJlIHVzZWQgZm9yIHJ1bi10aW1lIGVycm9yIG1lc3NhZ2VzLlxuIgorIlRoZSBtb2RlIG11c3QgYmUgXCdleGVjXCcgdG8gY29tcGlsZSBhIG1vZHVsZSwgXCdzaW5nbGVcJyB0byBjb21waWxlIGFcbiIKKyJzaW5nbGUgKGludGVyYWN0aXZlKSBzdGF0ZW1lbnQsIG9yIFwnZXZhbFwnIHRvIGNvbXBpbGUgYW4gZXhwcmVzc2lvbi5cbiIKKyJUaGUgZmxhZ3MgYXJndW1lbnQsIGlmIHByZXNlbnQsIGNvbnRyb2xzIHdoaWNoIGZ1dHVyZSBzdGF0ZW1lbnRzIGluZmx1ZW5jZVxuIgorInRoZSBjb21waWxhdGlvbiBvZiB0aGUgY29kZS5cbiIKKyJUaGUgZG9udF9pbmhlcml0IGFyZ3VtZW50LCBpZiB0cnVlLCBzdG9wcyB0aGUgY29tcGlsYXRpb24gaW5oZXJpdGluZ1xuIgorInRoZSBlZmZlY3RzIG9mIGFueSBmdXR1cmUgc3RhdGVtZW50cyBpbiBlZmZlY3QgaW4gdGhlIGNvZGUgY2FsbGluZ1xuIgorImNvbXBpbGU7IGlmIGFic2VudCBvciBmYWxzZSB0aGVzZSBzdGF0ZW1lbnRzIGRvIGluZmx1ZW5jZSB0aGUgY29tcGlsYXRpb24sXG4iCisiaW4gYWRkaXRpb24gdG8gYW55IGZlYXR1cmVzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiIpOworCisjZGVmaW5lIEJVSUxUSU5fQ09NUElMRV9NRVRIT0RERUYgICAgXAorICAgIHsiY29tcGlsZSIsIChQeUNGdW5jdGlvbilidWlsdGluX2NvbXBpbGUsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBidWlsdGluX2NvbXBpbGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fY29tcGlsZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzb3VyY2UsIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUsIGludCBmbGFncywgaW50IGRvbnRfaW5oZXJpdCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2NvbXBpbGUoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzb3VyY2UiLCAiZmlsZW5hbWUiLCAibW9kZSIsICJmbGFncyIsICJkb250X2luaGVyaXQiLCAib3B0aW1pemUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc291cmNlOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBjb25zdCBjaGFyICptb2RlOworICAgIGludCBmbGFncyA9IDA7CisgICAgaW50IGRvbnRfaW5oZXJpdCA9IDA7CisgICAgaW50IG9wdGltaXplID0gLTE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPTyZzfGlpaTpjb21waWxlIiwgX2tleXdvcmRzLAorICAgICAgICAmc291cmNlLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUsICZtb2RlLCAmZmxhZ3MsICZkb250X2luaGVyaXQsICZvcHRpbWl6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBidWlsdGluX2NvbXBpbGVfaW1wbChtb2R1bGUsIHNvdXJjZSwgZmlsZW5hbWUsIG1vZGUsIGZsYWdzLCBkb250X2luaGVyaXQsIG9wdGltaXplKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnVpbHRpbl9kaXZtb2RfX2RvY19fLAorImRpdm1vZCgkbW9kdWxlLCB4LCB5LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSB0dXBsZSAoeC8veSwgeCV5KS4gIEludmFyaWFudDogZGl2KnkgKyBtb2QgPT0geC4iKTsKKworI2RlZmluZSBCVUlMVElOX0RJVk1PRF9NRVRIT0RERUYgICAgXAorICAgIHsiZGl2bW9kIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fZGl2bW9kLCBNRVRIX1ZBUkFSR1MsIGJ1aWx0aW5fZGl2bW9kX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2Rpdm1vZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICp4LCBQeU9iamVjdCAqeSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2Rpdm1vZChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqeDsKKyAgICBQeU9iamVjdCAqeTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImRpdm1vZCIsCisgICAgICAgIDIsIDIsCisgICAgICAgICZ4LCAmeSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBidWlsdGluX2Rpdm1vZF9pbXBsKG1vZHVsZSwgeCwgeSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJ1aWx0aW5fZXZhbF9fZG9jX18sCisiZXZhbCgkbW9kdWxlLCBzb3VyY2UsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJFdmFsdWF0ZSB0aGUgZ2l2ZW4gc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGdsb2JhbHMgYW5kIGxvY2Fscy5cbiIKKyJcbiIKKyJUaGUgc291cmNlIG1heSBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBQeXRob24gZXhwcmVzc2lvblxuIgorIm9yIGEgY29kZSBvYmplY3QgYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpLlxuIgorIlRoZSBnbG9iYWxzIG11c3QgYmUgYSBkaWN0aW9uYXJ5IGFuZCBsb2NhbHMgY2FuIGJlIGFueSBtYXBwaW5nLFxuIgorImRlZmF1bHRpbmcgdG8gdGhlIGN1cnJlbnQgZ2xvYmFscyBhbmQgbG9jYWxzLlxuIgorIklmIG9ubHkgZ2xvYmFscyBpcyBnaXZlbiwgbG9jYWxzIGRlZmF1bHRzIHRvIGl0LiIpOworCisjZGVmaW5lIEJVSUxUSU5fRVZBTF9NRVRIT0RERUYgICAgXAorICAgIHsiZXZhbCIsIChQeUNGdW5jdGlvbilidWlsdGluX2V2YWwsIE1FVEhfVkFSQVJHUywgYnVpbHRpbl9ldmFsX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2V2YWxfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc291cmNlLCBQeU9iamVjdCAqZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsb2NhbHMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9ldmFsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzb3VyY2U7CisgICAgUHlPYmplY3QgKmdsb2JhbHMgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpsb2NhbHMgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZXZhbCIsCisgICAgICAgIDEsIDMsCisgICAgICAgICZzb3VyY2UsICZnbG9iYWxzLCAmbG9jYWxzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ1aWx0aW5fZXZhbF9pbXBsKG1vZHVsZSwgc291cmNlLCBnbG9iYWxzLCBsb2NhbHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihidWlsdGluX2V4ZWNfX2RvY19fLAorImV4ZWMoJG1vZHVsZSwgc291cmNlLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRXhlY3V0ZSB0aGUgZ2l2ZW4gc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGdsb2JhbHMgYW5kIGxvY2Fscy5cbiIKKyJcbiIKKyJUaGUgc291cmNlIG1heSBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgb25lIG9yIG1vcmUgUHl0aG9uIHN0YXRlbWVudHNcbiIKKyJvciBhIGNvZGUgb2JqZWN0IGFzIHJldHVybmVkIGJ5IGNvbXBpbGUoKS5cbiIKKyJUaGUgZ2xvYmFscyBtdXN0IGJlIGEgZGljdGlvbmFyeSBhbmQgbG9jYWxzIGNhbiBiZSBhbnkgbWFwcGluZyxcbiIKKyJkZWZhdWx0aW5nIHRvIHRoZSBjdXJyZW50IGdsb2JhbHMgYW5kIGxvY2Fscy5cbiIKKyJJZiBvbmx5IGdsb2JhbHMgaXMgZ2l2ZW4sIGxvY2FscyBkZWZhdWx0cyB0byBpdC4iKTsKKworI2RlZmluZSBCVUlMVElOX0VYRUNfTUVUSE9EREVGICAgIFwKKyAgICB7ImV4ZWMiLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9leGVjLCBNRVRIX1ZBUkFSR1MsIGJ1aWx0aW5fZXhlY19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9leGVjX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnNvdXJjZSwgUHlPYmplY3QgKmdsb2JhbHMsCisgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbG9jYWxzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fZXhlYyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc291cmNlOworICAgIFB5T2JqZWN0ICpnbG9iYWxzID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqbG9jYWxzID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImV4ZWMiLAorICAgICAgICAxLCAzLAorICAgICAgICAmc291cmNlLCAmZ2xvYmFscywgJmxvY2FscykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBidWlsdGluX2V4ZWNfaW1wbChtb2R1bGUsIHNvdXJjZSwgZ2xvYmFscywgbG9jYWxzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnVpbHRpbl9nbG9iYWxzX19kb2NfXywKKyJnbG9iYWxzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY3VycmVudCBzY29wZVwncyBnbG9iYWwgdmFyaWFibGVzLlxuIgorIlxuIgorIk5PVEU6IFVwZGF0ZXMgdG8gdGhpcyBkaWN0aW9uYXJ5ICp3aWxsKiBhZmZlY3QgbmFtZSBsb29rdXBzIGluIHRoZSBjdXJyZW50XG4iCisiZ2xvYmFsIHNjb3BlIGFuZCB2aWNlLXZlcnNhLiIpOworCisjZGVmaW5lIEJVSUxUSU5fR0xPQkFMU19NRVRIT0RERUYgICAgXAorICAgIHsiZ2xvYmFscyIsIChQeUNGdW5jdGlvbilidWlsdGluX2dsb2JhbHMsIE1FVEhfTk9BUkdTLCBidWlsdGluX2dsb2JhbHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fZ2xvYmFsc19pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9nbG9iYWxzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIGJ1aWx0aW5fZ2xvYmFsc19pbXBsKG1vZHVsZSk7Cit9CisKK1B5RG9jX1NUUlZBUihidWlsdGluX2hhc2F0dHJfX2RvY19fLAorImhhc2F0dHIoJG1vZHVsZSwgb2JqLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYW4gYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4iCisiXG4iCisiVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgZ2V0YXR0cihvYmosIG5hbWUpIGFuZCBjYXRjaGluZyBBdHRyaWJ1dGVFcnJvci4iKTsKKworI2RlZmluZSBCVUlMVElOX0hBU0FUVFJfTUVUSE9EREVGICAgIFwKKyAgICB7Imhhc2F0dHIiLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9oYXNhdHRyLCBNRVRIX1ZBUkFSR1MsIGJ1aWx0aW5faGFzYXR0cl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9oYXNhdHRyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9oYXNhdHRyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlPYmplY3QgKm5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJoYXNhdHRyIiwKKyAgICAgICAgMiwgMiwKKyAgICAgICAgJm9iaiwgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnVpbHRpbl9oYXNhdHRyX2ltcGwobW9kdWxlLCBvYmosIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihidWlsdGluX2lkX19kb2NfXywKKyJpZCgkbW9kdWxlLCBvYmosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGlkZW50aXR5IG9mIGFuIG9iamVjdC5cbiIKKyJcbiIKKyJUaGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGFtb25nIHNpbXVsdGFuZW91c2x5IGV4aXN0aW5nIG9iamVjdHMuXG4iCisiKENQeXRob24gdXNlcyB0aGUgb2JqZWN0XCdzIG1lbW9yeSBhZGRyZXNzLikiKTsKKworI2RlZmluZSBCVUlMVElOX0lEX01FVEhPRERFRiAgICBcCisgICAgeyJpZCIsIChQeUNGdW5jdGlvbilidWlsdGluX2lkLCBNRVRIX08sIGJ1aWx0aW5faWRfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGJ1aWx0aW5fc2V0YXR0cl9fZG9jX18sCisic2V0YXR0cigkbW9kdWxlLCBvYmosIG5hbWUsIHZhbHVlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2V0cyB0aGUgbmFtZWQgYXR0cmlidXRlIG9uIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiIKKyJcbiIKKyJzZXRhdHRyKHgsIFwneVwnLCB2KSBpcyBlcXVpdmFsZW50IHRvIGBgeC55ID0gdlwnXCciKTsKKworI2RlZmluZSBCVUlMVElOX1NFVEFUVFJfTUVUSE9EREVGICAgIFwKKyAgICB7InNldGF0dHIiLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9zZXRhdHRyLCBNRVRIX1ZBUkFSR1MsIGJ1aWx0aW5fc2V0YXR0cl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9zZXRhdHRyX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9zZXRhdHRyKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlPYmplY3QgKm5hbWU7CisgICAgUHlPYmplY3QgKnZhbHVlOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2V0YXR0ciIsCisgICAgICAgIDMsIDMsCisgICAgICAgICZvYmosICZuYW1lLCAmdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYnVpbHRpbl9zZXRhdHRyX2ltcGwobW9kdWxlLCBvYmosIG5hbWUsIHZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnVpbHRpbl9kZWxhdHRyX19kb2NfXywKKyJkZWxhdHRyKCRtb2R1bGUsIG9iaiwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkRlbGV0ZXMgdGhlIG5hbWVkIGF0dHJpYnV0ZSBmcm9tIHRoZSBnaXZlbiBvYmplY3QuXG4iCisiXG4iCisiZGVsYXR0cih4LCBcJ3lcJykgaXMgZXF1aXZhbGVudCB0byBgYGRlbCB4LnlcJ1wnIik7CisKKyNkZWZpbmUgQlVJTFRJTl9ERUxBVFRSX01FVEhPRERFRiAgICBcCisgICAgeyJkZWxhdHRyIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fZGVsYXR0ciwgTUVUSF9WQVJBUkdTLCBidWlsdGluX2RlbGF0dHJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fZGVsYXR0cl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fZGVsYXR0cihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5T2JqZWN0ICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZGVsYXR0ciIsCisgICAgICAgIDIsIDIsCisgICAgICAgICZvYmosICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ1aWx0aW5fZGVsYXR0cl9pbXBsKG1vZHVsZSwgb2JqLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnVpbHRpbl9oYXNoX19kb2NfXywKKyJoYXNoKCRtb2R1bGUsIG9iaiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgaGFzaCB2YWx1ZSBmb3IgdGhlIGdpdmVuIG9iamVjdC5cbiIKKyJcbiIKKyJUd28gb2JqZWN0cyB0aGF0IGNvbXBhcmUgZXF1YWwgbXVzdCBhbHNvIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZSwgYnV0IHRoZVxuIgorInJldmVyc2UgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUuIik7CisKKyNkZWZpbmUgQlVJTFRJTl9IQVNIX01FVEhPRERFRiAgICBcCisgICAgeyJoYXNoIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5faGFzaCwgTUVUSF9PLCBidWlsdGluX2hhc2hfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKGJ1aWx0aW5faGV4X19kb2NfXywKKyJoZXgoJG1vZHVsZSwgbnVtYmVyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuIgorIlxuIgorIiAgID4+PiBoZXgoMTI2NDg0MzApXG4iCisiICAgXCcweGMwZmZlZVwnIik7CisKKyNkZWZpbmUgQlVJTFRJTl9IRVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImhleCIsIChQeUNGdW5jdGlvbilidWlsdGluX2hleCwgTUVUSF9PLCBidWlsdGluX2hleF9fZG9jX199LAorCitQeURvY19TVFJWQVIoYnVpbHRpbl9sZW5fX2RvY19fLAorImxlbigkbW9kdWxlLCBvYmosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIGNvbnRhaW5lci4iKTsKKworI2RlZmluZSBCVUlMVElOX0xFTl9NRVRIT0RERUYgICAgXAorICAgIHsibGVuIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fbGVuLCBNRVRIX08sIGJ1aWx0aW5fbGVuX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihidWlsdGluX2xvY2Fsc19fZG9jX18sCisibG9jYWxzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc2NvcGVcJ3MgbG9jYWwgdmFyaWFibGVzLlxuIgorIlxuIgorIk5PVEU6IFdoZXRoZXIgb3Igbm90IHVwZGF0ZXMgdG8gdGhpcyBkaWN0aW9uYXJ5IHdpbGwgYWZmZWN0IG5hbWUgbG9va3VwcyBpblxuIgorInRoZSBsb2NhbCBzY29wZSBhbmQgdmljZS12ZXJzYSBpcyAqaW1wbGVtZW50YXRpb24gZGVwZW5kZW50KiBhbmQgbm90XG4iCisiY292ZXJlZCBieSBhbnkgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZ3VhcmFudGVlcy4iKTsKKworI2RlZmluZSBCVUlMVElOX0xPQ0FMU19NRVRIT0RERUYgICAgXAorICAgIHsibG9jYWxzIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5fbG9jYWxzLCBNRVRIX05PQVJHUywgYnVpbHRpbl9sb2NhbHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fbG9jYWxzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2xvY2FscyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBidWlsdGluX2xvY2Fsc19pbXBsKG1vZHVsZSk7Cit9CisKK1B5RG9jX1NUUlZBUihidWlsdGluX29jdF9fZG9jX18sCisib2N0KCRtb2R1bGUsIG51bWJlciwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cbiIKKyJcbiIKKyIgICA+Pj4gb2N0KDM0MjM5MSlcbiIKKyIgICBcJzBvMTIzNDU2N1wnIik7CisKKyNkZWZpbmUgQlVJTFRJTl9PQ1RfTUVUSE9EREVGICAgIFwKKyAgICB7Im9jdCIsIChQeUNGdW5jdGlvbilidWlsdGluX29jdCwgTUVUSF9PLCBidWlsdGluX29jdF9fZG9jX199LAorCitQeURvY19TVFJWQVIoYnVpbHRpbl9vcmRfX2RvY19fLAorIm9yZCgkbW9kdWxlLCBjLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQgZm9yIGEgb25lLWNoYXJhY3RlciBzdHJpbmcuIik7CisKKyNkZWZpbmUgQlVJTFRJTl9PUkRfTUVUSE9EREVGICAgIFwKKyAgICB7Im9yZCIsIChQeUNGdW5jdGlvbilidWlsdGluX29yZCwgTUVUSF9PLCBidWlsdGluX29yZF9fZG9jX199LAorCitQeURvY19TVFJWQVIoYnVpbHRpbl9wb3dfX2RvY19fLAorInBvdygkbW9kdWxlLCB4LCB5LCB6PU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJFcXVpdmFsZW50IHRvIHgqKnkgKHdpdGggdHdvIGFyZ3VtZW50cykgb3IgeCoqeSAlIHogKHdpdGggdGhyZWUgYXJndW1lbnRzKVxuIgorIlxuIgorIlNvbWUgdHlwZXMsIHN1Y2ggYXMgaW50cywgYXJlIGFibGUgdG8gdXNlIGEgbW9yZSBlZmZpY2llbnQgYWxnb3JpdGhtIHdoZW5cbiIKKyJpbnZva2VkIHVzaW5nIHRoZSB0aHJlZSBhcmd1bWVudCBmb3JtLiIpOworCisjZGVmaW5lIEJVSUxUSU5fUE9XX01FVEhPRERFRiAgICBcCisgICAgeyJwb3ciLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9wb3csIE1FVEhfVkFSQVJHUywgYnVpbHRpbl9wb3dfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fcG93X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5LCBQeU9iamVjdCAqeik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX3BvdyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqeDsKKyAgICBQeU9iamVjdCAqeTsKKyAgICBQeU9iamVjdCAqeiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJwb3ciLAorICAgICAgICAyLCAzLAorICAgICAgICAmeCwgJnksICZ6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ1aWx0aW5fcG93X2ltcGwobW9kdWxlLCB4LCB5LCB6KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnVpbHRpbl9pbnB1dF9fZG9jX18sCisiaW5wdXQoJG1vZHVsZSwgcHJvbXB0PU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIGEgc3RyaW5nIGZyb20gc3RhbmRhcmQgaW5wdXQuICBUaGUgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZC5cbiIKKyJcbiIKKyJUaGUgcHJvbXB0IHN0cmluZywgaWYgZ2l2ZW4sIGlzIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0cHV0IHdpdGhvdXQgYVxuIgorInRyYWlsaW5nIG5ld2xpbmUgYmVmb3JlIHJlYWRpbmcgaW5wdXQuXG4iCisiXG4iCisiSWYgdGhlIHVzZXIgaGl0cyBFT0YgKCpuaXg6IEN0cmwtRCwgV2luZG93czogQ3RybC1aK1JldHVybiksIHJhaXNlIEVPRkVycm9yLlxuIgorIk9uICpuaXggc3lzdGVtcywgcmVhZGxpbmUgaXMgdXNlZCBpZiBhdmFpbGFibGUuIik7CisKKyNkZWZpbmUgQlVJTFRJTl9JTlBVVF9NRVRIT0RERUYgICAgXAorICAgIHsiaW5wdXQiLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9pbnB1dCwgTUVUSF9WQVJBUkdTLCBidWlsdGluX2lucHV0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2lucHV0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnByb21wdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2lucHV0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpwcm9tcHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiaW5wdXQiLAorICAgICAgICAwLCAxLAorICAgICAgICAmcHJvbXB0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ1aWx0aW5faW5wdXRfaW1wbChtb2R1bGUsIHByb21wdCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJ1aWx0aW5fcmVwcl9fZG9jX18sCisicmVwcigkbW9kdWxlLCBvYmosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGNhbm9uaWNhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC5cbiIKKyJcbiIKKyJGb3IgbWFueSBvYmplY3QgdHlwZXMsIGluY2x1ZGluZyBtb3N0IGJ1aWx0aW5zLCBldmFsKHJlcHIob2JqKSkgPT0gb2JqLiIpOworCisjZGVmaW5lIEJVSUxUSU5fUkVQUl9NRVRIT0RERUYgICAgXAorICAgIHsicmVwciIsIChQeUNGdW5jdGlvbilidWlsdGluX3JlcHIsIE1FVEhfTywgYnVpbHRpbl9yZXByX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihidWlsdGluX3N1bV9fZG9jX18sCisic3VtKCRtb2R1bGUsIGl0ZXJhYmxlLCBzdGFydD0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBzdW0gb2YgYSBcJ3N0YXJ0XCcgdmFsdWUgKGRlZmF1bHQ6IDApIHBsdXMgYW4gaXRlcmFibGUgb2YgbnVtYmVyc1xuIgorIlxuIgorIldoZW4gdGhlIGl0ZXJhYmxlIGlzIGVtcHR5LCByZXR1cm4gdGhlIHN0YXJ0IHZhbHVlLlxuIgorIlRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgc3BlY2lmaWNhbGx5IGZvciB1c2Ugd2l0aCBudW1lcmljIHZhbHVlcyBhbmQgbWF5XG4iCisicmVqZWN0IG5vbi1udW1lcmljIHR5cGVzLiIpOworCisjZGVmaW5lIEJVSUxUSU5fU1VNX01FVEhPRERFRiAgICBcCisgICAgeyJzdW0iLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9zdW0sIE1FVEhfVkFSQVJHUywgYnVpbHRpbl9zdW1fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5fc3VtX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKml0ZXJhYmxlLCBQeU9iamVjdCAqc3RhcnQpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9zdW0oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKml0ZXJhYmxlOworICAgIFB5T2JqZWN0ICpzdGFydCA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzdW0iLAorICAgICAgICAxLCAyLAorICAgICAgICAmaXRlcmFibGUsICZzdGFydCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBidWlsdGluX3N1bV9pbXBsKG1vZHVsZSwgaXRlcmFibGUsIHN0YXJ0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYnVpbHRpbl9pc2luc3RhbmNlX19kb2NfXywKKyJpc2luc3RhbmNlKCRtb2R1bGUsIG9iaiwgY2xhc3Nfb3JfdHVwbGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gd2hldGhlciBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyBvciBvZiBhIHN1YmNsYXNzIHRoZXJlb2YuXG4iCisiXG4iCisiQSB0dXBsZSwgYXMgaW4gYGBpc2luc3RhbmNlKHgsIChBLCBCLCAuLi4pKWBgLCBtYXkgYmUgZ2l2ZW4gYXMgdGhlIHRhcmdldCB0b1xuIgorImNoZWNrIGFnYWluc3QuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYGlzaW5zdGFuY2UoeCwgQSkgb3IgaXNpbnN0YW5jZSh4LCBCKVxuIgorIm9yIC4uLmBgIGV0Yy4iKTsKKworI2RlZmluZSBCVUlMVElOX0lTSU5TVEFOQ0VfTUVUSE9EREVGICAgIFwKKyAgICB7ImlzaW5zdGFuY2UiLCAoUHlDRnVuY3Rpb24pYnVpbHRpbl9pc2luc3RhbmNlLCBNRVRIX1ZBUkFSR1MsIGJ1aWx0aW5faXNpbnN0YW5jZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9pc2luc3RhbmNlX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjbGFzc19vcl90dXBsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2lzaW5zdGFuY2UoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeU9iamVjdCAqY2xhc3Nfb3JfdHVwbGU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJpc2luc3RhbmNlIiwKKyAgICAgICAgMiwgMiwKKyAgICAgICAgJm9iaiwgJmNsYXNzX29yX3R1cGxlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJ1aWx0aW5faXNpbnN0YW5jZV9pbXBsKG1vZHVsZSwgb2JqLCBjbGFzc19vcl90dXBsZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJ1aWx0aW5faXNzdWJjbGFzc19fZG9jX18sCisiaXNzdWJjbGFzcygkbW9kdWxlLCBjbHMsIGNsYXNzX29yX3R1cGxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHdoZXRoZXIgXCdjbHNcJyBpcyBhIGRlcml2ZWQgZnJvbSBhbm90aGVyIGNsYXNzIG9yIGlzIHRoZSBzYW1lIGNsYXNzLlxuIgorIlxuIgorIkEgdHVwbGUsIGFzIGluIGBgaXNzdWJjbGFzcyh4LCAoQSwgQiwgLi4uKSlgYCwgbWF5IGJlIGdpdmVuIGFzIHRoZSB0YXJnZXQgdG9cbiIKKyJjaGVjayBhZ2FpbnN0LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBpc3N1YmNsYXNzKHgsIEEpIG9yIGlzc3ViY2xhc3MoeCwgQilcbiIKKyJvciAuLi5gYCBldGMuIik7CisKKyNkZWZpbmUgQlVJTFRJTl9JU1NVQkNMQVNTX01FVEhPRERFRiAgICBcCisgICAgeyJpc3N1YmNsYXNzIiwgKFB5Q0Z1bmN0aW9uKWJ1aWx0aW5faXNzdWJjbGFzcywgTUVUSF9WQVJBUkdTLCBidWlsdGluX2lzc3ViY2xhc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2J1aWx0aW5faXNzdWJjbGFzc19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpjbHMsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xhc3Nfb3JfdHVwbGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorYnVpbHRpbl9pc3N1YmNsYXNzKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjbHM7CisgICAgUHlPYmplY3QgKmNsYXNzX29yX3R1cGxlOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiaXNzdWJjbGFzcyIsCisgICAgICAgIDIsIDIsCisgICAgICAgICZjbHMsICZjbGFzc19vcl90dXBsZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBidWlsdGluX2lzc3ViY2xhc3NfaW1wbChtb2R1bGUsIGNscywgY2xhc3Nfb3JfdHVwbGUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTAzMTI3MGI2NGM3OTRiOCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9QeXRob24vY2xpbmljL2ltcG9ydC5jLmggYi9QeXRob24vY2xpbmljL2ltcG9ydC5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVkNzlhYwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9jbGluaWMvaW1wb3J0LmMuaApAQCAtMCwwICsxLDM1NSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfbG9ja19oZWxkX19kb2NfXywKKyJsb2NrX2hlbGQoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBUcnVlIGlmIHRoZSBpbXBvcnQgbG9jayBpcyBjdXJyZW50bHkgaGVsZCwgZWxzZSBGYWxzZS5cbiIKKyJcbiIKKyJPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCByZXR1cm4gRmFsc2UuIik7CisKKyNkZWZpbmUgX0lNUF9MT0NLX0hFTERfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvY2tfaGVsZCIsIChQeUNGdW5jdGlvbilfaW1wX2xvY2tfaGVsZCwgTUVUSF9OT0FSR1MsIF9pbXBfbG9ja19oZWxkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2xvY2tfaGVsZF9pbXBsKFB5T2JqZWN0ICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2NrX2hlbGQoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9sb2NrX2hlbGRfaW1wbChtb2R1bGUpOworfQorCitQeURvY19TVFJWQVIoX2ltcF9hY3F1aXJlX2xvY2tfX2RvY19fLAorImFjcXVpcmVfbG9jaygkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQWNxdWlyZXMgdGhlIGludGVycHJldGVyXCdzIGltcG9ydCBsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQuXG4iCisiXG4iCisiVGhpcyBsb2NrIHNob3VsZCBiZSB1c2VkIGJ5IGltcG9ydCBob29rcyB0byBlbnN1cmUgdGhyZWFkLXNhZmV0eSB3aGVuIGltcG9ydGluZ1xuIgorIm1vZHVsZXMuIE9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIpOworCisjZGVmaW5lIF9JTVBfQUNRVUlSRV9MT0NLX01FVEhPRERFRiAgICBcCisgICAgeyJhY3F1aXJlX2xvY2siLCAoUHlDRnVuY3Rpb24pX2ltcF9hY3F1aXJlX2xvY2ssIE1FVEhfTk9BUkdTLCBfaW1wX2FjcXVpcmVfbG9ja19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9hY3F1aXJlX2xvY2tfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfYWNxdWlyZV9sb2NrKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pbXBfYWNxdWlyZV9sb2NrX2ltcGwobW9kdWxlKTsKK30KKworUHlEb2NfU1RSVkFSKF9pbXBfcmVsZWFzZV9sb2NrX19kb2NfXywKKyJyZWxlYXNlX2xvY2soJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlbGVhc2UgdGhlIGludGVycHJldGVyXCdzIGltcG9ydCBsb2NrLlxuIgorIlxuIgorIk9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIpOworCisjZGVmaW5lIF9JTVBfUkVMRUFTRV9MT0NLX01FVEhPRERFRiAgICBcCisgICAgeyJyZWxlYXNlX2xvY2siLCAoUHlDRnVuY3Rpb24pX2ltcF9yZWxlYXNlX2xvY2ssIE1FVEhfTk9BUkdTLCBfaW1wX3JlbGVhc2VfbG9ja19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9yZWxlYXNlX2xvY2tfaW1wbChQeU9iamVjdCAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfcmVsZWFzZV9sb2NrKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pbXBfcmVsZWFzZV9sb2NrX2ltcGwobW9kdWxlKTsKK30KKworUHlEb2NfU1RSVkFSKF9pbXBfX2ZpeF9jb19maWxlbmFtZV9fZG9jX18sCisiX2ZpeF9jb19maWxlbmFtZSgkbW9kdWxlLCBjb2RlLCBwYXRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ2hhbmdlcyBjb2RlLmNvX2ZpbGVuYW1lIHRvIHNwZWNpZnkgdGhlIHBhc3NlZC1pbiBmaWxlIHBhdGguXG4iCisiXG4iCisiICBjb2RlXG4iCisiICAgIENvZGUgb2JqZWN0IHRvIGNoYW5nZS5cbiIKKyIgIHBhdGhcbiIKKyIgICAgRmlsZSBwYXRoIHRvIHVzZS4iKTsKKworI2RlZmluZSBfSU1QX19GSVhfQ09fRklMRU5BTUVfTUVUSE9EREVGICAgIFwKKyAgICB7Il9maXhfY29fZmlsZW5hbWUiLCAoUHlDRnVuY3Rpb24pX2ltcF9fZml4X2NvX2ZpbGVuYW1lLCBNRVRIX1ZBUkFSR1MsIF9pbXBfX2ZpeF9jb19maWxlbmFtZV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9fZml4X2NvX2ZpbGVuYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlDb2RlT2JqZWN0ICpjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnBhdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9fZml4X2NvX2ZpbGVuYW1lKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5Q29kZU9iamVjdCAqY29kZTsKKyAgICBQeU9iamVjdCAqcGF0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFVOl9maXhfY29fZmlsZW5hbWUiLAorICAgICAgICAmUHlDb2RlX1R5cGUsICZjb2RlLCAmcGF0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW1wX19maXhfY29fZmlsZW5hbWVfaW1wbChtb2R1bGUsIGNvZGUsIHBhdGgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW1wX2NyZWF0ZV9idWlsdGluX19kb2NfXywKKyJjcmVhdGVfYnVpbHRpbigkbW9kdWxlLCBzcGVjLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGFuIGV4dGVuc2lvbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9DUkVBVEVfQlVJTFRJTl9NRVRIT0RERUYgICAgXAorICAgIHsiY3JlYXRlX2J1aWx0aW4iLCAoUHlDRnVuY3Rpb24pX2ltcF9jcmVhdGVfYnVpbHRpbiwgTUVUSF9PLCBfaW1wX2NyZWF0ZV9idWlsdGluX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19fZG9jX18sCisiZXh0ZW5zaW9uX3N1ZmZpeGVzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBsaXN0IG9mIGZpbGUgc3VmZml4ZXMgdXNlZCB0byBpZGVudGlmeSBleHRlbnNpb24gbW9kdWxlcy4iKTsKKworI2RlZmluZSBfSU1QX0VYVEVOU0lPTl9TVUZGSVhFU19NRVRIT0RERUYgICAgXAorICAgIHsiZXh0ZW5zaW9uX3N1ZmZpeGVzIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzLCBNRVRIX05PQVJHUywgX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzX2ltcGwoUHlPYmplY3QgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2V4dGVuc2lvbl9zdWZmaXhlcyhQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKG1vZHVsZSk7Cit9CisKK1B5RG9jX1NUUlZBUihfaW1wX2luaXRfZnJvemVuX19kb2NfXywKKyJpbml0X2Zyb3plbigkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSW5pdGlhbGl6ZXMgYSBmcm96ZW4gbW9kdWxlLiIpOworCisjZGVmaW5lIF9JTVBfSU5JVF9GUk9aRU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImluaXRfZnJvemVuIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaW5pdF9mcm96ZW4sIE1FVEhfTywgX2ltcF9pbml0X2Zyb3plbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pbml0X2Zyb3plbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaW5pdF9mcm96ZW4oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiVTppbml0X2Zyb3plbiIsICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaW5pdF9mcm96ZW5faW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfaW1wX2dldF9mcm96ZW5fb2JqZWN0X19kb2NfXywKKyJnZXRfZnJvemVuX29iamVjdCgkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgY29kZSBvYmplY3QgZm9yIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0dFVF9GUk9aRU5fT0JKRUNUX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRfZnJvemVuX29iamVjdCIsIChQeUNGdW5jdGlvbilfaW1wX2dldF9mcm96ZW5fb2JqZWN0LCBNRVRIX08sIF9pbXBfZ2V0X2Zyb3plbl9vYmplY3RfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfZ2V0X2Zyb3plbl9vYmplY3RfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2dldF9mcm96ZW5fb2JqZWN0KFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIlU6Z2V0X2Zyb3plbl9vYmplY3QiLCAmbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW1wX2dldF9mcm96ZW5fb2JqZWN0X2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2ltcF9pc19mcm96ZW5fcGFja2FnZV9fZG9jX18sCisiaXNfZnJvemVuX3BhY2thZ2UoJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgaXMgb2YgYSBmcm96ZW4gcGFja2FnZS4iKTsKKworI2RlZmluZSBfSU1QX0lTX0ZST1pFTl9QQUNLQUdFX01FVEhPRERFRiAgICBcCisgICAgeyJpc19mcm96ZW5fcGFja2FnZSIsIChQeUNGdW5jdGlvbilfaW1wX2lzX2Zyb3plbl9wYWNrYWdlLCBNRVRIX08sIF9pbXBfaXNfZnJvemVuX3BhY2thZ2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuX3BhY2thZ2VfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbl9wYWNrYWdlKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgIlU6aXNfZnJvemVuX3BhY2thZ2UiLCAmbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2ltcF9pc19idWlsdGluX19kb2NfXywKKyJpc19idWlsdGluKCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGNvcnJlc3BvbmRzIHRvIGEgYnVpbHQtaW4gbW9kdWxlLiIpOworCisjZGVmaW5lIF9JTVBfSVNfQlVJTFRJTl9NRVRIT0RERUYgICAgXAorICAgIHsiaXNfYnVpbHRpbiIsIChQeUNGdW5jdGlvbilfaW1wX2lzX2J1aWx0aW4sIE1FVEhfTywgX2ltcF9pc19idWlsdGluX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2J1aWx0aW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2J1aWx0aW4oUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiVTppc19idWlsdGluIiwgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pc19idWlsdGluX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2ltcF9pc19mcm96ZW5fX2RvY19fLAorImlzX2Zyb3plbigkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGZyb3plbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9JU19GUk9aRU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImlzX2Zyb3plbiIsIChQeUNGdW5jdGlvbilfaW1wX2lzX2Zyb3plbiwgTUVUSF9PLCBfaW1wX2lzX2Zyb3plbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pc19mcm96ZW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbihQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJVOmlzX2Zyb3plbiIsICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaXNfZnJvemVuX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RZTkFNSUNfTE9BRElORykKKworUHlEb2NfU1RSVkFSKF9pbXBfY3JlYXRlX2R5bmFtaWNfX2RvY19fLAorImNyZWF0ZV9keW5hbWljKCRtb2R1bGUsIHNwZWMsIGZpbGU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhbiBleHRlbnNpb24gbW9kdWxlLiIpOworCisjZGVmaW5lIF9JTVBfQ1JFQVRFX0RZTkFNSUNfTUVUSE9EREVGICAgIFwKKyAgICB7ImNyZWF0ZV9keW5hbWljIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfY3JlYXRlX2R5bmFtaWMsIE1FVEhfVkFSQVJHUywgX2ltcF9jcmVhdGVfZHluYW1pY19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9jcmVhdGVfZHluYW1pY19pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzcGVjLCBQeU9iamVjdCAqZmlsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2NyZWF0ZV9keW5hbWljKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzcGVjOworICAgIFB5T2JqZWN0ICpmaWxlID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImNyZWF0ZV9keW5hbWljIiwKKyAgICAgICAgMSwgMiwKKyAgICAgICAgJnNwZWMsICZmaWxlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfY3JlYXRlX2R5bmFtaWNfaW1wbChtb2R1bGUsIHNwZWMsIGZpbGUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfRFlOQU1JQ19MT0FESU5HKSAqLworCisjaWYgZGVmaW5lZChIQVZFX0RZTkFNSUNfTE9BRElORykKKworUHlEb2NfU1RSVkFSKF9pbXBfZXhlY19keW5hbWljX19kb2NfXywKKyJleGVjX2R5bmFtaWMoJG1vZHVsZSwgbW9kLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSW5pdGlhbGl6ZSBhbiBleHRlbnNpb24gbW9kdWxlLiIpOworCisjZGVmaW5lIF9JTVBfRVhFQ19EWU5BTUlDX01FVEhPRERFRiAgICBcCisgICAgeyJleGVjX2R5bmFtaWMiLCAoUHlDRnVuY3Rpb24pX2ltcF9leGVjX2R5bmFtaWMsIE1FVEhfTywgX2ltcF9leGVjX2R5bmFtaWNfX2RvY19ffSwKKworc3RhdGljIGludAorX2ltcF9leGVjX2R5bmFtaWNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbW9kKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfZXhlY19keW5hbWljKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICptb2QpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gX2ltcF9leGVjX2R5bmFtaWNfaW1wbChtb2R1bGUsIG1vZCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfRFlOQU1JQ19MT0FESU5HKSAqLworCitQeURvY19TVFJWQVIoX2ltcF9leGVjX2J1aWx0aW5fX2RvY19fLAorImV4ZWNfYnVpbHRpbigkbW9kdWxlLCBtb2QsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJJbml0aWFsaXplIGEgYnVpbHQtaW4gbW9kdWxlLiIpOworCisjZGVmaW5lIF9JTVBfRVhFQ19CVUlMVElOX01FVEhPRERFRiAgICBcCisgICAgeyJleGVjX2J1aWx0aW4iLCAoUHlDRnVuY3Rpb24pX2ltcF9leGVjX2J1aWx0aW4sIE1FVEhfTywgX2ltcF9leGVjX2J1aWx0aW5fX2RvY19ffSwKKworc3RhdGljIGludAorX2ltcF9leGVjX2J1aWx0aW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbW9kKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfZXhlY19idWlsdGluKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICptb2QpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gX2ltcF9leGVjX2J1aWx0aW5faW1wbChtb2R1bGUsIG1vZCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKyNpZm5kZWYgX0lNUF9DUkVBVEVfRFlOQU1JQ19NRVRIT0RERUYKKyAgICAjZGVmaW5lIF9JTVBfQ1JFQVRFX0RZTkFNSUNfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoX0lNUF9DUkVBVEVfRFlOQU1JQ19NRVRIT0RERUYpICovCisKKyNpZm5kZWYgX0lNUF9FWEVDX0RZTkFNSUNfTUVUSE9EREVGCisgICAgI2RlZmluZSBfSU1QX0VYRUNfRFlOQU1JQ19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfSU1QX0VYRUNfRFlOQU1JQ19NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTBhZDZlNTgzM2U2MTcwZCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9QeXRob24vY29kZWNzLmMgYi9QeXRob24vY29kZWNzLmMKaW5kZXggMjdmMmFlYi4uZmU1N2QwZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvZGVjcy5jCisrKyBiL1B5dGhvbi9jb2RlY3MuYwpAQCAtOSw2ICs5LDcgQEAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAidWNuaGFzaC5oIgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKIGNvbnN0IGNoYXIgKlB5X2hleGRpZ2l0cyA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKQEAgLTQwMiw3ICs0MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLCBlbmNvZGluZyk7CiB9CiAKLS8qIEVuY29kZSBhbiBvYmplY3QgKGUuZy4gYW4gVW5pY29kZSBvYmplY3QpIHVzaW5nIHRoZSBnaXZlbiBlbmNvZGluZworLyogRW5jb2RlIGFuIG9iamVjdCAoZS5nLiBhIFVuaWNvZGUgb2JqZWN0KSB1c2luZyB0aGUgZ2l2ZW4gZW5jb2RpbmcKICAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBlbmNvZGVkIG9iamVjdCAodXN1YWxseSBhIFB5dGhvbiBzdHJpbmcpLgogCiAgICBlcnJvcnMgaXMgcGFzc2VkIHRvIHRoZSBlbmNvZGVyIGZhY3RvcnkgYXMgYXJndW1lbnQgaWYgbm9uLU5VTEwuICovCkBAIC00NDksNyArNDUwLDcgQEAKIH0KIAogLyogRGVjb2RlIGFuIG9iamVjdCAodXN1YWxseSBhIFB5dGhvbiBzdHJpbmcpIHVzaW5nIHRoZSBnaXZlbiBlbmNvZGluZwotICAgYW5kIHJldHVybiBhbiBlcXVpdmFsZW50IG9iamVjdCAoZS5nLiBhbiBVbmljb2RlIG9iamVjdCkuCisgICBhbmQgcmV0dXJuIGFuIGVxdWl2YWxlbnQgb2JqZWN0IChlLmcuIGEgVW5pY29kZSBvYmplY3QpLgogCiAgICBlcnJvcnMgaXMgcGFzc2VkIHRvIHRoZSBkZWNvZGVyIGZhY3RvcnkgYXMgYXJndW1lbnQgaWYgbm9uLU5VTEwuICovCiAKQEAgLTg1Niw2ICs4NTcsMTE4IEBACiAKIFB5T2JqZWN0ICpQeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMoUHlPYmplY3QgKmV4YykKIHsKKyAgICBQeU9iamVjdCAqb2JqZWN0OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0OworICAgIFB5X3NzaXplX3QgZW5kOworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgdW5zaWduZWQgY2hhciAqb3V0cDsKKyAgICBpbnQgcmVzc2l6ZTsKKyAgICBQeV9VQ1M0IGM7CisKKyAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV4YywgKFB5VHlwZU9iamVjdCAqKVB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcikpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqcDsKKyAgICAgICAgaWYgKFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0KGV4YywgJnN0YXJ0KSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKCEob2JqZWN0ID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0KGV4YykpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICghKHAgPSAodW5zaWduZWQgY2hhciopUHlCeXRlc19Bc1N0cmluZyhvYmplY3QpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXMgPSBQeVVuaWNvZGVfTmV3KDQgKiAoZW5kIC0gc3RhcnQpLCAxMjcpOworICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgb3V0cCA9IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcyk7CisgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyssIG91dHAgKz0gNCkgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gcFtpXTsKKyAgICAgICAgICAgIG91dHBbMF0gPSAnXFwnOworICAgICAgICAgICAgb3V0cFsxXSA9ICd4JzsKKyAgICAgICAgICAgIG91dHBbMl0gPSBQeV9oZXhkaWdpdHNbKGM+PjQpJjB4Zl07CisgICAgICAgICAgICBvdXRwWzNdID0gUHlfaGV4ZGlnaXRzW2MmMHhmXTsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmVzLCAxKSk7CisgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5uKSIsIHJlcywgZW5kKTsKKyAgICB9CisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydChleGMsICZzdGFydCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZChleGMsICZlbmQpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICghKG9iamVjdCA9IFB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdChleGMpKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yKSkgeworICAgICAgICBpZiAoUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQoZXhjLCAmc3RhcnQpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoIShvYmplY3QgPSBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QoZXhjKSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHdyb25nX2V4Y2VwdGlvbl90eXBlKGV4Yyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChlbmQgLSBzdGFydCA+IFBZX1NTSVpFX1RfTUFYIC8gKDErMSs4KSkKKyAgICAgICAgZW5kID0gc3RhcnQgKyBQWV9TU0laRV9UX01BWCAvICgxKzErOCk7CisgICAgZm9yIChpID0gc3RhcnQsIHJlc3NpemUgPSAwOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgLyogb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgInJlYWR5IiAqLworICAgICAgICBjID0gUHlVbmljb2RlX1JFQURfQ0hBUihvYmplY3QsIGkpOworICAgICAgICBpZiAoYyA+PSAweDEwMDAwKSB7CisgICAgICAgICAgICByZXNzaXplICs9IDErMSs4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMDApIHsKKyAgICAgICAgICAgIHJlc3NpemUgKz0gMSsxKzQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzc2l6ZSArPSAxKzErMjsKKyAgICB9CisgICAgcmVzID0gUHlVbmljb2RlX05ldyhyZXNzaXplLCAxMjcpOworICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG91dHAgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXMpOworICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIob2JqZWN0LCBpKTsKKyAgICAgICAgKm91dHArKyA9ICdcXCc7CisgICAgICAgIGlmIChjID49IDB4MDAwMTAwMDApIHsKKyAgICAgICAgICAgICpvdXRwKysgPSAnVSc7CisgICAgICAgICAgICAqb3V0cCsrID0gUHlfaGV4ZGlnaXRzWyhjPj4yOCkmMHhmXTsKKyAgICAgICAgICAgICpvdXRwKysgPSBQeV9oZXhkaWdpdHNbKGM+PjI0KSYweGZdOworICAgICAgICAgICAgKm91dHArKyA9IFB5X2hleGRpZ2l0c1soYz4+MjApJjB4Zl07CisgICAgICAgICAgICAqb3V0cCsrID0gUHlfaGV4ZGlnaXRzWyhjPj4xNikmMHhmXTsKKyAgICAgICAgICAgICpvdXRwKysgPSBQeV9oZXhkaWdpdHNbKGM+PjEyKSYweGZdOworICAgICAgICAgICAgKm91dHArKyA9IFB5X2hleGRpZ2l0c1soYz4+OCkmMHhmXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjID49IDB4MTAwKSB7CisgICAgICAgICAgICAqb3V0cCsrID0gJ3UnOworICAgICAgICAgICAgKm91dHArKyA9IFB5X2hleGRpZ2l0c1soYz4+MTIpJjB4Zl07CisgICAgICAgICAgICAqb3V0cCsrID0gUHlfaGV4ZGlnaXRzWyhjPj44KSYweGZdOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpvdXRwKysgPSAneCc7CisgICAgICAgICpvdXRwKysgPSBQeV9oZXhkaWdpdHNbKGM+PjQpJjB4Zl07CisgICAgICAgICpvdXRwKysgPSBQeV9oZXhkaWdpdHNbYyYweGZdOworICAgIH0KKworICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmVzLCAxKSk7CisgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCByZXMsIGVuZCk7Cit9CisKK3N0YXRpYyBfUHlVbmljb2RlX05hbWVfQ0FQSSAqdWNuaGFzaF9DQVBJID0gTlVMTDsKKworUHlPYmplY3QgKlB5Q29kZWNfTmFtZVJlcGxhY2VFcnJvcnMoUHlPYmplY3QgKmV4YykKK3sKICAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV4YywgKFB5VHlwZU9iamVjdCAqKVB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKICAgICAgICAgUHlPYmplY3QgKnJlc3R1cGxlOwogICAgICAgICBQeU9iamVjdCAqb2JqZWN0OwpAQCAtODY1LDM2ICs5NzgsNTYgQEAKICAgICAgICAgUHlPYmplY3QgKnJlczsKICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cDsKICAgICAgICAgUHlfc3NpemVfdCByZXNzaXplOworICAgICAgICBpbnQgcmVwbHNpemU7CiAgICAgICAgIFB5X1VDUzQgYzsKKyAgICAgICAgY2hhciBidWZmZXJbMjU2XTsgLyogTkFNRV9NQVhMRU4gKi8KICAgICAgICAgaWYgKFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0KGV4YywgJnN0YXJ0KSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKCEob2JqZWN0ID0gUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0KGV4YykpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChlbmQgLSBzdGFydCA+IFBZX1NTSVpFX1RfTUFYIC8gKDErMSs4KSkKLSAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgUFlfU1NJWkVfVF9NQVggLyAoMSsxKzgpOworICAgICAgICBpZiAoIXVjbmhhc2hfQ0FQSSkgeworICAgICAgICAgICAgLyogbG9hZCB0aGUgdW5pY29kZSBkYXRhIG1vZHVsZSAqLworICAgICAgICAgICAgdWNuaGFzaF9DQVBJID0gKF9QeVVuaWNvZGVfTmFtZV9DQVBJICopUHlDYXBzdWxlX0ltcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlRGF0YV9DQVBTVUxFX05BTUUsIDEpOworICAgICAgICAgICAgaWYgKCF1Y25oYXNoX0NBUEkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgZm9yIChpID0gc3RhcnQsIHJlc3NpemUgPSAwOyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgICAgIC8qIG9iamVjdCBpcyBndWFyYW50ZWVkIHRvIGJlICJyZWFkeSIgKi8KICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKG9iamVjdCwgaSk7Ci0gICAgICAgICAgICBpZiAoYyA+PSAweDEwMDAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzc2l6ZSArPSAxKzErODsKKyAgICAgICAgICAgIGlmICh1Y25oYXNoX0NBUEktPmdldG5hbWUoTlVMTCwgYywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgMSkpIHsKKyAgICAgICAgICAgICAgICByZXBsc2l6ZSA9IDErMSsxKyhpbnQpc3RybGVuKGJ1ZmZlcikrMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMDAwMCkgeworICAgICAgICAgICAgICAgIHJlcGxzaXplID0gMSsxKzg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjID49IDB4MTAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzc2l6ZSArPSAxKzErNDsKKyAgICAgICAgICAgICAgICByZXBsc2l6ZSA9IDErMSs0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3NpemUgKz0gMSsxKzI7CisgICAgICAgICAgICAgICAgcmVwbHNpemUgPSAxKzErMjsKKyAgICAgICAgICAgIGlmIChyZXNzaXplID4gUFlfU1NJWkVfVF9NQVggLSByZXBsc2l6ZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlc3NpemUgKz0gcmVwbHNpemU7CiAgICAgICAgIH0KKyAgICAgICAgZW5kID0gaTsKICAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldyhyZXNzaXplLCAxMjcpOwotICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICBpZiAocmVzPT1OVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICAgICAgZm9yIChpID0gc3RhcnQsIG91dHAgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXMpOwogICAgICAgICAgICAgaSA8IGVuZDsgKytpKSB7CiAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQURfQ0hBUihvYmplY3QsIGkpOwogICAgICAgICAgICAgKm91dHArKyA9ICdcXCc7CisgICAgICAgICAgICBpZiAodWNuaGFzaF9DQVBJLT5nZXRuYW1lKE5VTEwsIGMsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIDEpKSB7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICdOJzsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gJ3snOworICAgICAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKW91dHAsIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgb3V0cCArPSBzdHJsZW4oYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gJ30nOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGMgPj0gMHgwMDAxMDAwMCkgewogICAgICAgICAgICAgICAgICpvdXRwKysgPSAnVSc7CiAgICAgICAgICAgICAgICAgKm91dHArKyA9IFB5X2hleGRpZ2l0c1soYz4+MjgpJjB4Zl07CkBAIC05MTUsNiArMTA0OCw3IEBACiAgICAgICAgICAgICAqb3V0cCsrID0gUHlfaGV4ZGlnaXRzW2MmMHhmXTsKICAgICAgICAgfQogCisgICAgICAgIGFzc2VydChvdXRwID09IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcykgKyByZXNzaXplKTsKICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKICAgICAgICAgcmVzdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcmVzLCBlbmQpOwogICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKQEAgLTkyNiw2ICsxMDYwLDcgQEAKICAgICB9CiB9CiAKKyNkZWZpbmUgRU5DX1VOS05PV04gICAgIC0xCiAjZGVmaW5lIEVOQ19VVEY4ICAgICAgICAwCiAjZGVmaW5lIEVOQ19VVEYxNkJFICAgICAxCiAjZGVmaW5lIEVOQ19VVEYxNkxFICAgICAyCkBAIC05NDEsNyArMTA3NiwxMSBAQAogICAgICAgICBlbmNvZGluZyArPSAzOwogICAgICAgICBpZiAoKmVuY29kaW5nID09ICctJyB8fCAqZW5jb2RpbmcgPT0gJ18nICkKICAgICAgICAgICAgIGVuY29kaW5nKys7Ci0gICAgICAgIGlmIChlbmNvZGluZ1swXSA9PSAnMScgJiYgZW5jb2RpbmdbMV0gPT0gJzYnKSB7CisgICAgICAgIGlmIChlbmNvZGluZ1swXSA9PSAnOCcgJiYgZW5jb2RpbmdbMV0gPT0gJ1wwJykgeworICAgICAgICAgICAgKmJ5dGVsZW5ndGggPSAzOworICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEY4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVuY29kaW5nWzBdID09ICcxJyAmJiBlbmNvZGluZ1sxXSA9PSAnNicpIHsKICAgICAgICAgICAgIGVuY29kaW5nICs9IDI7CiAgICAgICAgICAgICAqYnl0ZWxlbmd0aCA9IDI7CiAgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICdcMCcpIHsKQEAgLTk4MCw5ICsxMTE5LDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgLyogdXRmLTggKi8KLSAgICAqYnl0ZWxlbmd0aCA9IDM7Ci0gICAgcmV0dXJuIEVOQ19VVEY4OworICAgIGVsc2UgaWYgKHN0cmNtcChlbmNvZGluZywgIkNQX1VURjgiKSA9PSAwKSB7CisgICAgICAgICpieXRlbGVuZ3RoID0gMzsKKyAgICAgICAgcmV0dXJuIEVOQ19VVEY4OworICAgIH0KKyAgICByZXR1cm4gRU5DX1VOS05PV047CiB9CiAKIC8qIFRoaXMgaGFuZGxlciBpcyBkZWNsYXJlZCBzdGF0aWMgdW50aWwgc29tZW9uZSBkZW1vbnN0cmF0ZXMKQEAgLTEwMjAsNiArMTE2MSwxMiBAQAogICAgICAgICB9CiAgICAgICAgIGNvZGUgPSBnZXRfc3RhbmRhcmRfZW5jb2RpbmcoZW5jb2RpbmcsICZieXRlbGVuZ3RoKTsKICAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisgICAgICAgIGlmIChjb2RlID09IEVOQ19VTktOT1dOKSB7CisgICAgICAgICAgICAvKiBOb3Qgc3VwcG9ydGVkLCBmYWlsIHdpdGggb3JpZ2luYWwgZXhjZXB0aW9uICovCisgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChlbmQgLSBzdGFydCA+IFBZX1NTSVpFX1RfTUFYIC8gYnl0ZWxlbmd0aCkKICAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgUFlfU1NJWkVfVF9NQVggLyBieXRlbGVuZ3RoOwpAQCAtMTA5Niw2ICsxMjQzLDEyIEBACiAgICAgICAgIH0KICAgICAgICAgY29kZSA9IGdldF9zdGFuZGFyZF9lbmNvZGluZyhlbmNvZGluZywgJmJ5dGVsZW5ndGgpOwogICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKyAgICAgICAgaWYgKGNvZGUgPT0gRU5DX1VOS05PV04pIHsKKyAgICAgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQsIGZhaWwgd2l0aCBvcmlnaW5hbCBleGNlcHRpb24gKi8KKyAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y2VwdGlvbkluc3RhbmNlX0NsYXNzKGV4YyksIGV4Yyk7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAKICAgICAgICAgLyogVHJ5IGRlY29kaW5nIGEgc2luZ2xlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIuIElmCiAgICAgICAgICAgIHRoZXJlIGFyZSBtb3JlLCBsZXQgdGhlIGNvZGVjIGNhbGwgdXMgYWdhaW4uICovCkBAIC0xMjUyLDYgKzE0MDUsMTEgQEAKICAgICByZXR1cm4gUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzKGV4Yyk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqbmFtZXJlcGxhY2VfZXJyb3JzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZXhjKQoreworICAgIHJldHVybiBQeUNvZGVjX05hbWVSZXBsYWNlRXJyb3JzKGV4Yyk7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqc3Vycm9nYXRlcGFzc19lcnJvcnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpleGMpCiB7CiAgICAgcmV0dXJuIFB5Q29kZWNfU3Vycm9nYXRlUGFzc0Vycm9ycyhleGMpOwpAQCAtMTMxNyw4ICsxNDc1LDE5IEBACiAgICAgICAgICAgICAgICAgYmFja3NsYXNocmVwbGFjZV9lcnJvcnMsCiAgICAgICAgICAgICAgICAgTUVUSF9PLAogICAgICAgICAgICAgICAgIFB5RG9jX1NUUigiSW1wbGVtZW50cyB0aGUgJ2JhY2tzbGFzaHJlcGxhY2UnIGVycm9yIGhhbmRsaW5nLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGljaCByZXBsYWNlcyBtYWxmb3JtZWQgZGF0YSB3aXRoIGEgYmFja3NsYXNoZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZXNjYXBlIHNlcXVlbmNlLiIpCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lcmVwbGFjZSIsCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWVyZXBsYWNlX2Vycm9ycyIsCisgICAgICAgICAgICAgICAgbmFtZXJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgICAgIE1FVEhfTywKKyAgICAgICAgICAgICAgICBQeURvY19TVFIoIkltcGxlbWVudHMgdGhlICduYW1lcmVwbGFjZScgZXJyb3IgaGFuZGxpbmcsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoaWNoIHJlcGxhY2VzIGFuIHVuZW5jb2RhYmxlIGNoYXJhY3RlciB3aXRoIGEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3NsYXNoZWQgZXNjYXBlIHNlcXVlbmNlLiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcXE57Li4ufSBlc2NhcGUgc2VxdWVuY2UuIikKICAgICAgICAgICAgIH0KICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbXBpbGUuYyBiL1B5dGhvbi9jb21waWxlLmMKaW5kZXggZmY2MjQ4Ny4uOTNmNDdlMCAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbXBpbGUuYworKysgYi9QeXRob24vY29tcGlsZS5jCkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAic3ltdGFibGUuaCIKICNpbmNsdWRlICJvcGNvZGUuaCIKIAotaW50IFB5X09wdGltaXplRmxhZyA9IDA7Ci0KICNkZWZpbmUgREVGQVVMVF9CTE9DS19TSVpFIDE2CiAjZGVmaW5lIERFRkFVTFRfQkxPQ0tTIDgKICNkZWZpbmUgREVGQVVMVF9DT0RFX1NJWkUgMTI4CkBAIC05NCw2ICs5Miw3IEBACiAgICAgQ09NUElMRVJfU0NPUEVfTU9EVUxFLAogICAgIENPTVBJTEVSX1NDT1BFX0NMQVNTLAogICAgIENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OLAorICAgIENPTVBJTEVSX1NDT1BFX0FTWU5DX0ZVTkNUSU9OLAogICAgIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICBDT01QSUxFUl9TQ09QRV9DT01QUkVIRU5TSU9OLAogfTsKQEAgLTE5NSwxMSArMTk0LDExIEBACiBzdGF0aWMgaW50IGV4cHJfY29uc3RhbnQoc3RydWN0IGNvbXBpbGVyICosIGV4cHJfdHkpOwogCiBzdGF0aWMgaW50IGNvbXBpbGVyX3dpdGgoc3RydWN0IGNvbXBpbGVyICosIHN0bXRfdHksIGludCk7CitzdGF0aWMgaW50IGNvbXBpbGVyX2FzeW5jX3dpdGgoc3RydWN0IGNvbXBpbGVyICosIHN0bXRfdHksIGludCk7CitzdGF0aWMgaW50IGNvbXBpbGVyX2FzeW5jX2ZvcihzdHJ1Y3QgY29tcGlsZXIgKiwgc3RtdF90eSk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywgUHlfc3NpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmtleXdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGt3YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3Jkcyk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX3RyeV9leGNlcHQoc3RydWN0IGNvbXBpbGVyICosIHN0bXRfdHkpOwogc3RhdGljIGludCBjb21waWxlcl9zZXRfcXVhbG5hbWUoc3RydWN0IGNvbXBpbGVyICopOwogCkBAIC0zOTQsNyArMzkzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGsgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgICAgIGsgPSBQeVR1cGxlX1BhY2soMiwgaywgay0+b2JfdHlwZSk7CisgICAgICAgIGsgPSBfUHlDb2RlX0NvbnN0YW50S2V5KGspOwogICAgICAgICBpZiAoayA9PSBOVUxMIHx8IFB5RGljdF9TZXRJdGVtKGRpY3QsIGssIHYpIDwgMCkgewogICAgICAgICAgICAgUHlfWERFQ1JFRihrKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKQEAgLTQ1Nyw3ICs0NTYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgdHVwbGUgPSBQeVR1cGxlX1BhY2soMiwgaywgay0+b2JfdHlwZSk7CisgICAgICAgICAgICB0dXBsZSA9IF9QeUNvZGVfQ29uc3RhbnRLZXkoayk7CiAgICAgICAgICAgICBpZiAoIXR1cGxlIHx8IFB5RGljdF9TZXRJdGVtKGRlc3QsIHR1cGxlLCBpdGVtKSA8IDApIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc29ydGVkX2tleXMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKQEAgLTU2MCw3ICs1NTksNyBAQAogICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgdHVwbGUgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgUHlfVFlQRShuYW1lKSk7CisgICAgICAgIHR1cGxlID0gX1B5Q29kZV9Db25zdGFudEtleShuYW1lKTsKICAgICAgICAgaWYgKCF0dXBsZSkgewogICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC02NzcsNyArNjc2LDkgQEAKICAgICAgICAgcGFyZW50ID0gKHN0cnVjdCBjb21waWxlcl91bml0ICopUHlDYXBzdWxlX0dldFBvaW50ZXIoY2Fwc3VsZSwgQ0FQU1VMRV9OQU1FKTsKICAgICAgICAgYXNzZXJ0KHBhcmVudCk7CiAKLSAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTiB8fCB1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MpIHsKKyAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTgorICAgICAgICAgICAgfHwgdS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0FTWU5DX0ZVTkNUSU9OCisgICAgICAgICAgICB8fCB1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MpIHsKICAgICAgICAgICAgIGFzc2VydCh1LT51X25hbWUpOwogICAgICAgICAgICAgbWFuZ2xlZCA9IF9QeV9NYW5nbGUocGFyZW50LT51X3ByaXZhdGUsIHUtPnVfbmFtZSk7CiAgICAgICAgICAgICBpZiAoIW1hbmdsZWQpCkBAIC02OTEsNiArNjkyLDcgQEAKIAogICAgICAgICBpZiAoIWZvcmNlX2dsb2JhbCkgewogICAgICAgICAgICAgaWYgKHBhcmVudC0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OCisgICAgICAgICAgICAgICAgfHwgcGFyZW50LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQVNZTkNfRlVOQ1RJT04KICAgICAgICAgICAgICAgICB8fCBwYXJlbnQtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9MQU1CREEpIHsKICAgICAgICAgICAgICAgICBkb3RfbG9jYWxzX3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZkb3RfbG9jYWxzKTsKICAgICAgICAgICAgICAgICBpZiAoZG90X2xvY2Fsc19zdHIgPT0gTlVMTCkKQEAgLTg4MSw2ICs4ODMsNyBAQAogCiAgICAgICAgIGNhc2UgQklOQVJZX1BPV0VSOgogICAgICAgICBjYXNlIEJJTkFSWV9NVUxUSVBMWToKKyAgICAgICAgY2FzZSBCSU5BUllfTUFUUklYX01VTFRJUExZOgogICAgICAgICBjYXNlIEJJTkFSWV9NT0RVTE86CiAgICAgICAgIGNhc2UgQklOQVJZX0FERDoKICAgICAgICAgY2FzZSBCSU5BUllfU1VCVFJBQ1Q6CkBAIC04OTUsMTIgKzg5OCwxMSBAQAogICAgICAgICBjYXNlIElOUExBQ0VfQUREOgogICAgICAgICBjYXNlIElOUExBQ0VfU1VCVFJBQ1Q6CiAgICAgICAgIGNhc2UgSU5QTEFDRV9NVUxUSVBMWToKKyAgICAgICAgY2FzZSBJTlBMQUNFX01BVFJJWF9NVUxUSVBMWToKICAgICAgICAgY2FzZSBJTlBMQUNFX01PRFVMTzoKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBTVE9SRV9TVUJTQ1I6CiAgICAgICAgICAgICByZXR1cm4gLTM7Ci0gICAgICAgIGNhc2UgU1RPUkVfTUFQOgotICAgICAgICAgICAgcmV0dXJuIC0yOwogICAgICAgICBjYXNlIERFTEVURV9TVUJTQ1I6CiAgICAgICAgICAgICByZXR1cm4gLTI7CiAKQEAgLTkyOSw3ICs5MzEsOSBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgU0VUVVBfV0lUSDoKICAgICAgICAgICAgIHJldHVybiA3OwotICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKKyAgICAgICAgY2FzZSBXSVRIX0NMRUFOVVBfU1RBUlQ6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBXSVRIX0NMRUFOVVBfRklOSVNIOgogICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBYWFggU29tZXRpbWVzIG1vcmUgKi8KICAgICAgICAgY2FzZSBSRVRVUk5fVkFMVUU6CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC05NzMsOCArOTc3LDE1IEBACiAgICAgICAgIGNhc2UgQlVJTERfTElTVDoKICAgICAgICAgY2FzZSBCVUlMRF9TRVQ6CiAgICAgICAgICAgICByZXR1cm4gMS1vcGFyZzsKKyAgICAgICAgY2FzZSBCVUlMRF9MSVNUX1VOUEFDSzoKKyAgICAgICAgY2FzZSBCVUlMRF9UVVBMRV9VTlBBQ0s6CisgICAgICAgIGNhc2UgQlVJTERfU0VUX1VOUEFDSzoKKyAgICAgICAgY2FzZSBCVUlMRF9NQVBfVU5QQUNLOgorICAgICAgICAgICAgcmV0dXJuIDEgLSBvcGFyZzsKKyAgICAgICAgY2FzZSBCVUlMRF9NQVBfVU5QQUNLX1dJVEhfQ0FMTDoKKyAgICAgICAgICAgIHJldHVybiAxIC0gKG9wYXJnICYgMHhGRik7CiAgICAgICAgIGNhc2UgQlVJTERfTUFQOgotICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICByZXR1cm4gMSAtIDIqb3Bhcmc7CiAgICAgICAgIGNhc2UgTE9BRF9BVFRSOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgQ09NUEFSRV9PUDoKQEAgLTEwNDMsNiArMTA1NCwxOCBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIERFTEVURV9ERVJFRjoKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdFVF9BV0FJVEFCTEU6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBTRVRVUF9BU1lOQ19XSVRIOgorICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAgIGNhc2UgQkVGT1JFX0FTWU5DX1dJVEg6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHRVRfQUlURVI6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHRVRfQU5FWFQ6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHRVRfWUlFTERfRlJPTV9JVEVSOgorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1Q7CiAgICAgfQpAQCAtMTA3Nyw1NCArMTEwMCwxNyBAQAogewogICAgIFB5T2JqZWN0ICp0LCAqdjsKICAgICBQeV9zc2l6ZV90IGFyZzsKLSAgICBkb3VibGUgZDsKIAotICAgIC8qIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgdHlwZXMgYXJlbid0IGNvZXJjZWQgKGUuZy4sIGZsb2F0IGFuZCBjb21wbGV4KSAqLwotICAgIC8qIF9hbmRfIHRvIGRpc3Rpbmd1aXNoIDAuMCBmcm9tIC0wLjAgZS5nLiBvbiBJRUVFIHBsYXRmb3JtcyAqLwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG8pKSB7Ci0gICAgICAgIGQgPSBQeUZsb2F0X0FTX0RPVUJMRShvKTsKLSAgICAgICAgLyogYWxsIHdlIG5lZWQgaXMgdG8gbWFrZSB0aGUgdHVwbGUgZGlmZmVyZW50IGluIGVpdGhlciB0aGUgMC4wCi0gICAgICAgICAqIG9yIC0wLjAgY2FzZSBmcm9tIGFsbCBvdGhlcnMsIGp1c3QgdG8gYXZvaWQgdGhlICJjb2VyY2lvbiIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoZCA9PSAwLjAgJiYgY29weXNpZ24oMS4wLCBkKSA8IDAuMCkKLSAgICAgICAgICAgIHQgPSBQeVR1cGxlX1BhY2soMywgbywgby0+b2JfdHlwZSwgUHlfTm9uZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHQgPSBQeVR1cGxlX1BhY2soMiwgbywgby0+b2JfdHlwZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5Q29tcGxleF9DaGVjayhvKSkgewotICAgICAgICBQeV9jb21wbGV4IHo7Ci0gICAgICAgIGludCByZWFsX25lZ3plcm8sIGltYWdfbmVnemVybzsKLSAgICAgICAgLyogRm9yIHRoZSBjb21wbGV4IGNhc2Ugd2UgbXVzdCBtYWtlIGNvbXBsZXgoeCwgMC4pCi0gICAgICAgICAgIGRpZmZlcmVudCBmcm9tIGNvbXBsZXgoeCwgLTAuKSBhbmQgY29tcGxleCgwLiwgeSkKLSAgICAgICAgICAgZGlmZmVyZW50IGZyb20gY29tcGxleCgtMC4sIHkpLCBmb3IgYW55IHggYW5kIHkuCi0gICAgICAgICAgIEFsbCBmb3VyIGNvbXBsZXggemVyb3MgbXVzdCBiZSBkaXN0aW5ndWlzaGVkLiovCi0gICAgICAgIHogPSBQeUNvbXBsZXhfQXNDQ29tcGxleChvKTsKLSAgICAgICAgcmVhbF9uZWd6ZXJvID0gei5yZWFsID09IDAuMCAmJiBjb3B5c2lnbigxLjAsIHoucmVhbCkgPCAwLjA7Ci0gICAgICAgIGltYWdfbmVnemVybyA9IHouaW1hZyA9PSAwLjAgJiYgY29weXNpZ24oMS4wLCB6LmltYWcpIDwgMC4wOwotICAgICAgICBpZiAocmVhbF9uZWd6ZXJvICYmIGltYWdfbmVnemVybykgewotICAgICAgICAgICAgdCA9IFB5VHVwbGVfUGFjayg1LCBvLCBvLT5vYl90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lLCBQeV9Ob25lLCBQeV9Ob25lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbWFnX25lZ3plcm8pIHsKLSAgICAgICAgICAgIHQgPSBQeVR1cGxlX1BhY2soNCwgbywgby0+b2JfdHlwZSwgUHlfTm9uZSwgUHlfTm9uZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocmVhbF9uZWd6ZXJvKSB7Ci0gICAgICAgICAgICB0ID0gUHlUdXBsZV9QYWNrKDMsIG8sIG8tPm9iX3R5cGUsIFB5X05vbmUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdCA9IFB5VHVwbGVfUGFjaygyLCBvLCBvLT5vYl90eXBlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgdCA9IFB5VHVwbGVfUGFjaygyLCBvLCBvLT5vYl90eXBlKTsKLSAgICB9CisgICAgdCA9IF9QeUNvZGVfQ29uc3RhbnRLZXkobyk7CiAgICAgaWYgKHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGRpY3QsIHQpOwogICAgIGlmICghdikgewotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0KTsKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBhcmcgPSBQeURpY3RfU2l6ZShkaWN0KTsKICAgICAgICAgdiA9IFB5TG9uZ19Gcm9tU3NpemVfdChhcmcpOwogICAgICAgICBpZiAoIXYpIHsKQEAgLTE0MjksNyArMTQxNSw3IEBACiBjb21waWxlcl9sb29rdXBfYXJnKFB5T2JqZWN0ICpkaWN0LCBQeU9iamVjdCAqbmFtZSkKIHsKICAgICBQeU9iamVjdCAqaywgKnY7Ci0gICAgayA9IFB5VHVwbGVfUGFjaygyLCBuYW1lLCBuYW1lLT5vYl90eXBlKTsKKyAgICBrID0gX1B5Q29kZV9Db25zdGFudEtleShuYW1lKTsKICAgICBpZiAoayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGRpY3QsIGspOwpAQCAtMTUwOCw2ICsxNDk0LDkgQEAKIGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKHN0cnVjdCBjb21waWxlciAqYywgYXNkbF9zZXEgKmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqa3dfZGVmYXVsdHMpCiB7CisgICAgLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGVmYXVsdHMgKyAxLgorICAgICAgIFJldHVybnMgMCBvbiBlcnJvci4KKyAgICAgKi8KICAgICBpbnQgaSwgZGVmYXVsdF9jb3VudCA9IDA7CiAgICAgZm9yIChpID0gMDsgaSA8IGFzZGxfc2VxX0xFTihrd29ubHlhcmdzKTsgaSsrKSB7CiAgICAgICAgIGFyZ190eSBhcmcgPSBhc2RsX3NlcV9HRVQoa3dvbmx5YXJncywgaSk7CkBAIC0xNTE1LDE2ICsxNTA0LDE2IEBACiAgICAgICAgIGlmIChkZWZhdWx0XykgewogICAgICAgICAgICAgUHlPYmplY3QgKm1hbmdsZWQgPSBfUHlfTWFuZ2xlKGMtPnUtPnVfcHJpdmF0ZSwgYXJnLT5hcmcpOwogICAgICAgICAgICAgaWYgKCFtYW5nbGVkKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgbWFuZ2xlZCwgY29uc3RzKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtYW5nbGVkKTsKICAgICAgICAgICAgIGlmICghY29tcGlsZXJfdmlzaXRfZXhwcihjLCBkZWZhdWx0XykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0X2NvdW50Kys7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGRlZmF1bHRfY291bnQ7CisgICAgcmV0dXJuIGRlZmF1bHRfY291bnQgKyAxOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNTM2LDMyICsxNTI1LDMxIEBACiAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGFubm90YXRpb24pOwogICAgICAgICBtYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIGlkKTsKICAgICAgICAgaWYgKCFtYW5nbGVkKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKG5hbWVzLCBtYW5nbGVkKSA8IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtYW5nbGVkKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihtYW5nbGVkKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKHN0cnVjdCBjb21waWxlciAqYywgYXNkbF9zZXEqIGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZXMpCiB7Ci0gICAgaW50IGksIGVycm9yOworICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4oYXJncyk7IGkrKykgewogICAgICAgICBhcmdfdHkgYXJnID0gKGFyZ190eSlhc2RsX3NlcV9HRVQoYXJncywgaSk7Ci0gICAgICAgIGVycm9yID0gY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbigKKyAgICAgICAgaWYgKCFjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgYywKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZy0+YXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgYXJnLT5hbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMpOwotICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcykpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE1NjksMjggKzE1NTcsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgcmV0dXJucykKIHsKICAgICAvKiBQdXNoIGFyZyBhbm5vdGF0aW9ucyBhbmQgYSBsaXN0IG9mIHRoZSBhcmd1bWVudCBuYW1lcy4gUmV0dXJuIHRoZSAjCi0gICAgICAgb2YgaXRlbXMgcHVzaGVkLiBUaGUgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBvdXQtb2Ytb3JkZXIgd3J0IHRoZQorICAgICAgIG9mIGl0ZW1zIHB1c2hlZCArIDEuIFRoZSBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIG91dC1vZi1vcmRlciB3cnQgdGhlCiAgICAgICAgc291cmNlIGNvZGUuCiAKLSAgICAgICBNb3JlIHRoYW4gMl4xNi0xIGFubm90YXRpb25zIGlzIGEgU3ludGF4RXJyb3IuIFJldHVybnMgLTEgb24gZXJyb3IuCisgICAgICAgTW9yZSB0aGFuIDJeMTYtMSBhbm5vdGF0aW9ucyBpcyBhIFN5bnRheEVycm9yLiBSZXR1cm5zIDAgb24gZXJyb3IuCiAgICAgICAgKi8KICAgICBzdGF0aWMgaWRlbnRpZmllciByZXR1cm5fc3RyOwogICAgIFB5T2JqZWN0ICpuYW1lczsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBuYW1lcyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKCFuYW1lcykKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9ucyhjLCBhcmdzLT5hcmdzLCBuYW1lcykpCisgICAgaWYgKCFjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9ucyhjLCBhcmdzLT5hcmdzLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKGFyZ3MtPnZhcmFyZyAmJiBhcmdzLT52YXJhcmctPmFubm90YXRpb24gJiYKLSAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT52YXJhcmctPmFyZywKKyAgICAgICAgIWNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+dmFyYXJnLT5hcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKGMsIGFyZ3MtPmt3b25seWFyZ3MsIG5hbWVzKSkKKyAgICBpZiAoIWNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKGMsIGFyZ3MtPmt3b25seWFyZ3MsIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoYXJncy0+a3dhcmcgJiYgYXJncy0+a3dhcmctPmFubm90YXRpb24gJiYKLSAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT5rd2FyZy0+YXJnLAorICAgICAgICAhY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT5rd2FyZy0+YXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTE1OTksNyArMTU4Nyw3IEBACiAgICAgICAgIGlmICghcmV0dXJuX3N0cikKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGlmIChjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIHJldHVybl9zdHIsIHJldHVybnMsIG5hbWVzKSkgeworICAgIGlmICghY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCByZXR1cm5fc3RyLCByZXR1cm5zLCBuYW1lcykpIHsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKQEAgLTE2MjksMjcgKzE2MTcsNTEgQEAKICAgICBQeV9ERUNSRUYobmFtZXMpOwogCiAgICAgLyogV2UganVzdCBjaGVja2VkIHRoYXQgbGVuIDw9IDY1NTM1LCBzZWUgYWJvdmUgKi8KLSAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChsZW4sIFB5X3NzaXplX3QsIGludCk7CisgICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QobGVuICsgMSwgUHlfc3NpemVfdCwgaW50KTsKIAogZXJyb3I6CiAgICAgUHlfREVDUkVGKG5hbWVzKTsKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWNvbXBpbGVyX2Z1bmN0aW9uKHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQorY29tcGlsZXJfZnVuY3Rpb24oc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMsIGludCBpc19hc3luYykKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIFB5T2JqZWN0ICpxdWFsbmFtZSwgKmZpcnN0X2NvbnN0ID0gUHlfTm9uZTsKLSAgICBhcmd1bWVudHNfdHkgYXJncyA9IHMtPnYuRnVuY3Rpb25EZWYuYXJnczsKLSAgICBleHByX3R5IHJldHVybnMgPSBzLT52LkZ1bmN0aW9uRGVmLnJldHVybnM7Ci0gICAgYXNkbF9zZXEqIGRlY29zID0gcy0+di5GdW5jdGlvbkRlZi5kZWNvcmF0b3JfbGlzdDsKKyAgICBhcmd1bWVudHNfdHkgYXJnczsKKyAgICBleHByX3R5IHJldHVybnM7CisgICAgaWRlbnRpZmllciBuYW1lOworICAgIGFzZGxfc2VxKiBkZWNvczsKKyAgICBhc2RsX3NlcSAqYm9keTsKICAgICBzdG10X3R5IHN0OwogICAgIFB5X3NzaXplX3QgaSwgbiwgYXJnbGVuZ3RoOwogICAgIGludCBkb2NzdHJpbmcsIGt3X2RlZmF1bHRfY291bnQgPSAwOwogICAgIGludCBudW1fYW5ub3RhdGlvbnM7CisgICAgaW50IHNjb3BlX3R5cGU7CiAKLSAgICBhc3NlcnQocy0+a2luZCA9PSBGdW5jdGlvbkRlZl9raW5kKTsKKworICAgIGlmIChpc19hc3luYykgeworICAgICAgICBhc3NlcnQocy0+a2luZCA9PSBBc3luY0Z1bmN0aW9uRGVmX2tpbmQpOworCisgICAgICAgIGFyZ3MgPSBzLT52LkFzeW5jRnVuY3Rpb25EZWYuYXJnczsKKyAgICAgICAgcmV0dXJucyA9IHMtPnYuQXN5bmNGdW5jdGlvbkRlZi5yZXR1cm5zOworICAgICAgICBkZWNvcyA9IHMtPnYuQXN5bmNGdW5jdGlvbkRlZi5kZWNvcmF0b3JfbGlzdDsKKyAgICAgICAgbmFtZSA9IHMtPnYuQXN5bmNGdW5jdGlvbkRlZi5uYW1lOworICAgICAgICBib2R5ID0gcy0+di5Bc3luY0Z1bmN0aW9uRGVmLmJvZHk7CisKKyAgICAgICAgc2NvcGVfdHlwZSA9IENPTVBJTEVSX1NDT1BFX0FTWU5DX0ZVTkNUSU9OOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2VydChzLT5raW5kID09IEZ1bmN0aW9uRGVmX2tpbmQpOworCisgICAgICAgIGFyZ3MgPSBzLT52LkZ1bmN0aW9uRGVmLmFyZ3M7CisgICAgICAgIHJldHVybnMgPSBzLT52LkZ1bmN0aW9uRGVmLnJldHVybnM7CisgICAgICAgIGRlY29zID0gcy0+di5GdW5jdGlvbkRlZi5kZWNvcmF0b3JfbGlzdDsKKyAgICAgICAgbmFtZSA9IHMtPnYuRnVuY3Rpb25EZWYubmFtZTsKKyAgICAgICAgYm9keSA9IHMtPnYuRnVuY3Rpb25EZWYuYm9keTsKKworICAgICAgICBzY29wZV90eXBlID0gQ09NUElMRVJfU0NPUEVfRlVOQ1RJT047CisgICAgfQogCiAgICAgaWYgKCFjb21waWxlcl9kZWNvcmF0b3JzKGMsIGRlY29zKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjU4LDIxICsxNjcwLDIyIEBACiAgICAgaWYgKGFyZ3MtPmt3b25seWFyZ3MpIHsKICAgICAgICAgaW50IHJlcyA9IGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKGMsIGFyZ3MtPmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd19kZWZhdWx0cyk7Ci0gICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICBpZiAocmVzID09IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlczsKKyAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlcyAtIDE7CiAgICAgfQogICAgIG51bV9hbm5vdGF0aW9ucyA9IGNvbXBpbGVyX3Zpc2l0X2Fubm90YXRpb25zKGMsIGFyZ3MsIHJldHVybnMpOwotICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPCAwKQorICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPT0gMCkKICAgICAgICAgcmV0dXJuIDA7CisgICAgbnVtX2Fubm90YXRpb25zLS07CiAgICAgYXNzZXJ0KChudW1fYW5ub3RhdGlvbnMgJiAweEZGRkYpID09IG51bV9hbm5vdGF0aW9ucyk7CiAKLSAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIHMtPnYuRnVuY3Rpb25EZWYubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OLCAodm9pZCAqKXMsCisgICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGVfdHlwZSwgKHZvaWQgKilzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bGluZW5vKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzdCA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChzLT52LkZ1bmN0aW9uRGVmLmJvZHksIDApOworICAgIHN0ID0gKHN0bXRfdHkpYXNkbF9zZXFfR0VUKGJvZHksIDApOwogICAgIGRvY3N0cmluZyA9IGNvbXBpbGVyX2lzZG9jc3RyaW5nKHN0KTsKICAgICBpZiAoZG9jc3RyaW5nICYmIGMtPmNfb3B0aW1pemUgPCAyKQogICAgICAgICBmaXJzdF9jb25zdCA9IHN0LT52LkV4cHIudmFsdWUtPnYuU3RyLnM7CkBAIC0xNjgzLDEwICsxNjk2LDEwIEBACiAKICAgICBjLT51LT51X2FyZ2NvdW50ID0gYXNkbF9zZXFfTEVOKGFyZ3MtPmFyZ3MpOwogICAgIGMtPnUtPnVfa3dvbmx5YXJnY291bnQgPSBhc2RsX3NlcV9MRU4oYXJncy0+a3dvbmx5YXJncyk7Ci0gICAgbiA9IGFzZGxfc2VxX0xFTihzLT52LkZ1bmN0aW9uRGVmLmJvZHkpOworICAgIG4gPSBhc2RsX3NlcV9MRU4oYm9keSk7CiAgICAgLyogaWYgdGhlcmUgd2FzIGEgZG9jc3RyaW5nLCB3ZSBuZWVkIHRvIHNraXAgdGhlIGZpcnN0IHN0YXRlbWVudCAqLwogICAgIGZvciAoaSA9IGRvY3N0cmluZzsgaSA8IG47IGkrKykgewotICAgICAgICBzdCA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChzLT52LkZ1bmN0aW9uRGVmLmJvZHksIGkpOworICAgICAgICBzdCA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChib2R5LCBpKTsKICAgICAgICAgVklTSVRfSU5fU0NPUEUoYywgc3RtdCwgc3QpOwogICAgIH0KICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwpAQCAtMTcwMiw2ICsxNzE1LDggQEAKICAgICBhcmdsZW5ndGggPSBhc2RsX3NlcV9MRU4oYXJncy0+ZGVmYXVsdHMpOwogICAgIGFyZ2xlbmd0aCB8PSBrd19kZWZhdWx0X2NvdW50IDw8IDg7CiAgICAgYXJnbGVuZ3RoIHw9IG51bV9hbm5vdGF0aW9ucyA8PCAxNjsKKyAgICBpZiAoaXNfYXN5bmMpCisgICAgICAgIGNvLT5jb19mbGFncyB8PSBDT19DT1JPVVRJTkU7CiAgICAgY29tcGlsZXJfbWFrZV9jbG9zdXJlKGMsIGNvLCBhcmdsZW5ndGgsIHF1YWxuYW1lKTsKICAgICBQeV9ERUNSRUYocXVhbG5hbWUpOwogICAgIFB5X0RFQ1JFRihjbyk7CkBAIC0xNzExLDcgKzE3MjYsNyBAQAogICAgICAgICBBRERPUF9JKGMsIENBTExfRlVOQ1RJT04sIDEpOwogICAgIH0KIAotICAgIHJldHVybiBjb21waWxlcl9uYW1lb3AoYywgcy0+di5GdW5jdGlvbkRlZi5uYW1lLCBTdG9yZSk7CisgICAgcmV0dXJuIGNvbXBpbGVyX25hbWVvcChjLCBuYW1lLCBTdG9yZSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE3NDUsOCArMTc2MCw3IEBACiAgICAgewogICAgICAgICAvKiB1c2UgdGhlIGNsYXNzIG5hbWUgZm9yIG5hbWUgbWFuZ2xpbmcgKi8KICAgICAgICAgUHlfSU5DUkVGKHMtPnYuQ2xhc3NEZWYubmFtZSk7Ci0gICAgICAgIFB5X1hERUNSRUYoYy0+dS0+dV9wcml2YXRlKTsKLSAgICAgICAgYy0+dS0+dV9wcml2YXRlID0gcy0+di5DbGFzc0RlZi5uYW1lOworICAgICAgICBQeV9YU0VUUkVGKGMtPnUtPnVfcHJpdmF0ZSwgcy0+di5DbGFzc0RlZi5uYW1lKTsKICAgICAgICAgLyogbG9hZCAoZ2xvYmFsKSBfX25hbWVfXyAuLi4gKi8KICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7CiAgICAgICAgIGlmICghc3RyIHx8ICFjb21waWxlcl9uYW1lb3AoYywgc3RyLCBMb2FkKSkgewpAQCAtMTgyMSw5ICsxODM1LDcgQEAKICAgICAvKiA1LiBnZW5lcmF0ZSB0aGUgcmVzdCBvZiB0aGUgY29kZSBmb3IgdGhlIGNhbGwgKi8KICAgICBpZiAoIWNvbXBpbGVyX2NhbGxfaGVscGVyKGMsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT52LkNsYXNzRGVmLmJhc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+di5DbGFzc0RlZi5rZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnYuQ2xhc3NEZWYuc3RhcmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT52LkNsYXNzRGVmLmt3YXJncykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT52LkNsYXNzRGVmLmtleXdvcmRzKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvKiA2LiBhcHBseSBkZWNvcmF0b3JzICovCkBAIC0xODgxLDggKzE4OTMsOCBAQAogICAgIGlmIChhcmdzLT5rd29ubHlhcmdzKSB7CiAgICAgICAgIGludCByZXMgPSBjb21waWxlcl92aXNpdF9rd29ubHlkZWZhdWx0cyhjLCBhcmdzLT5rd29ubHlhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dfZGVmYXVsdHMpOwotICAgICAgICBpZiAocmVzIDwgMCkgcmV0dXJuIDA7Ci0gICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXM7CisgICAgICAgIGlmIChyZXMgPT0gMCkgcmV0dXJuIDA7CisgICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXMgLSAxOwogICAgIH0KICAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIG5hbWUsIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZSwgZS0+bGluZW5vKSkKQEAgLTE5MzgsNyArMTk1MCw3IEBACiAgICAgfSBlbHNlIGlmIChjb25zdGFudCA9PSAxKSB7CiAgICAgICAgIFZJU0lUX1NFUShjLCBzdG10LCBzLT52LklmLmJvZHkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzLT52LklmLm9yZWxzZSkgeworICAgICAgICBpZiAoYXNkbF9zZXFfTEVOKHMtPnYuSWYub3JlbHNlKSkgewogICAgICAgICAgICAgbmV4dCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICAgICAgICAgIGlmIChuZXh0ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTQ4LDggKzE5NjAsOCBAQAogICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LklmLnRlc3QpOwogICAgICAgICBBRERPUF9KQUJTKGMsIFBPUF9KVU1QX0lGX0ZBTFNFLCBuZXh0KTsKICAgICAgICAgVklTSVRfU0VRKGMsIHN0bXQsIHMtPnYuSWYuYm9keSk7Ci0gICAgICAgIEFERE9QX0pSRUwoYywgSlVNUF9GT1JXQVJELCBlbmQpOwotICAgICAgICBpZiAocy0+di5JZi5vcmVsc2UpIHsKKyAgICAgICAgaWYgKGFzZGxfc2VxX0xFTihzLT52LklmLm9yZWxzZSkpIHsKKyAgICAgICAgICAgIEFERE9QX0pSRUwoYywgSlVNUF9GT1JXQVJELCBlbmQpOwogICAgICAgICAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgbmV4dCk7CiAgICAgICAgICAgICBWSVNJVF9TRVEoYywgc3RtdCwgcy0+di5JZi5vcmVsc2UpOwogICAgICAgICB9CkBAIC0xOTg2LDYgKzE5OTgsOTIgQEAKICAgICByZXR1cm4gMTsKIH0KIAorCitzdGF0aWMgaW50Citjb21waWxlcl9hc3luY19mb3Ioc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCit7CisgICAgc3RhdGljIFB5T2JqZWN0ICpzdG9waXRlcl9lcnJvciA9IE5VTEw7CisgICAgYmFzaWNibG9jayAqdHJ5LCAqZXhjZXB0LCAqZW5kLCAqYWZ0ZXJfdHJ5LCAqdHJ5X2NsZWFudXAsCisgICAgICAgICAgICAgICAqYWZ0ZXJfbG9vcCwgKmFmdGVyX2xvb3BfZWxzZTsKKworICAgIGlmIChzdG9waXRlcl9lcnJvciA9PSBOVUxMKSB7CisgICAgICAgIHN0b3BpdGVyX2Vycm9yID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIlN0b3BBc3luY0l0ZXJhdGlvbiIpOworICAgICAgICBpZiAoc3RvcGl0ZXJfZXJyb3IgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHRyeSA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKKyAgICBleGNlcHQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CisgICAgZW5kID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOworICAgIGFmdGVyX3RyeSA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKKyAgICB0cnlfY2xlYW51cCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKKyAgICBhZnRlcl9sb29wID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOworICAgIGFmdGVyX2xvb3BfZWxzZSA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKKworICAgIGlmICh0cnkgPT0gTlVMTCB8fCBleGNlcHQgPT0gTlVMTCB8fCBlbmQgPT0gTlVMTAorICAgICAgICAgICAgfHwgYWZ0ZXJfdHJ5ID09IE5VTEwgfHwgdHJ5X2NsZWFudXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBRERPUF9KUkVMKGMsIFNFVFVQX0xPT1AsIGFmdGVyX2xvb3ApOworICAgIGlmICghY29tcGlsZXJfcHVzaF9mYmxvY2soYywgTE9PUCwgdHJ5KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBWSVNJVChjLCBleHByLCBzLT52LkFzeW5jRm9yLml0ZXIpOworICAgIEFERE9QKGMsIEdFVF9BSVRFUik7CisgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9Ob25lLCBjb25zdHMpOworICAgIEFERE9QKGMsIFlJRUxEX0ZST00pOworCisgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgdHJ5KTsKKworCisgICAgQURET1BfSlJFTChjLCBTRVRVUF9FWENFUFQsIGV4Y2VwdCk7CisgICAgaWYgKCFjb21waWxlcl9wdXNoX2ZibG9jayhjLCBFWENFUFQsIHRyeSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgQURET1AoYywgR0VUX0FORVhUKTsKKyAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X05vbmUsIGNvbnN0cyk7CisgICAgQURET1AoYywgWUlFTERfRlJPTSk7CisgICAgVklTSVQoYywgZXhwciwgcy0+di5Bc3luY0Zvci50YXJnZXQpOworICAgIEFERE9QKGMsIFBPUF9CTE9DSyk7CisgICAgY29tcGlsZXJfcG9wX2ZibG9jayhjLCBFWENFUFQsIHRyeSk7CisgICAgQURET1BfSlJFTChjLCBKVU1QX0ZPUldBUkQsIGFmdGVyX3RyeSk7CisKKworICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGV4Y2VwdCk7CisgICAgQURET1AoYywgRFVQX1RPUCk7CisgICAgQURET1BfTyhjLCBMT0FEX0dMT0JBTCwgc3RvcGl0ZXJfZXJyb3IsIG5hbWVzKTsKKyAgICBBRERPUF9JKGMsIENPTVBBUkVfT1AsIFB5Q21wX0VYQ19NQVRDSCk7CisgICAgQURET1BfSkFCUyhjLCBQT1BfSlVNUF9JRl9GQUxTRSwgdHJ5X2NsZWFudXApOworCisgICAgQURET1AoYywgUE9QX1RPUCk7CisgICAgQURET1AoYywgUE9QX1RPUCk7CisgICAgQURET1AoYywgUE9QX1RPUCk7CisgICAgQURET1AoYywgUE9QX0VYQ0VQVCk7IC8qIGZvciBTRVRVUF9FWENFUFQgKi8KKyAgICBBRERPUChjLCBQT1BfQkxPQ0spOyAvKiBmb3IgU0VUVVBfTE9PUCAqLworICAgIEFERE9QX0pBQlMoYywgSlVNUF9BQlNPTFVURSwgYWZ0ZXJfbG9vcF9lbHNlKTsKKworCisgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgdHJ5X2NsZWFudXApOworICAgIEFERE9QKGMsIEVORF9GSU5BTExZKTsKKworICAgIGNvbXBpbGVyX3VzZV9uZXh0X2Jsb2NrKGMsIGFmdGVyX3RyeSk7CisgICAgVklTSVRfU0VRKGMsIHN0bXQsIHMtPnYuQXN5bmNGb3IuYm9keSk7CisgICAgQURET1BfSkFCUyhjLCBKVU1QX0FCU09MVVRFLCB0cnkpOworCisgICAgQURET1AoYywgUE9QX0JMT0NLKTsgLyogZm9yIFNFVFVQX0xPT1AgKi8KKyAgICBjb21waWxlcl9wb3BfZmJsb2NrKGMsIExPT1AsIHRyeSk7CisKKyAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBhZnRlcl9sb29wKTsKKyAgICBBRERPUF9KQUJTKGMsIEpVTVBfQUJTT0xVVEUsIGVuZCk7CisKKyAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBhZnRlcl9sb29wX2Vsc2UpOworICAgIFZJU0lUX1NFUShjLCBzdG10LCBzLT52LkZvci5vcmVsc2UpOworCisgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgZW5kKTsKKworICAgIHJldHVybiAxOworfQorCiBzdGF0aWMgaW50CiBjb21waWxlcl93aGlsZShzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKQEAgLTIzMDksNyArMjQwNyw3IEBACiAgICAgUHlfc3NpemVfdCBkb3QgPSBQeVVuaWNvZGVfRmluZENoYXIobmFtZSwgJy4nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpLCAxKTsKICAgICBpZiAoZG90ID09IC0yKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgICAgLyogQ29uc3VtZSB0aGUgYmFzZSBtb2R1bGUgbmFtZSB0byBnZXQgdGhlIGZpcnN0IGF0dHJpYnV0ZSAqLwogICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IGRvdCArIDE7CkBAIC0yMzE4LDEyICsyNDE2LDEyIEBACiAgICAgICAgICAgICBkb3QgPSBQeVVuaWNvZGVfRmluZENoYXIobmFtZSwgJy4nLCBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSksIDEpOwogICAgICAgICAgICAgaWYgKGRvdCA9PSAtMikKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBhdHRyID0gUHlVbmljb2RlX1N1YnN0cmluZyhuYW1lLCBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG90ICE9IC0xKSA/IGRvdCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSk7CiAgICAgICAgICAgICBpZiAoIWF0dHIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgQURET1BfTyhjLCBMT0FEX0FUVFIsIGF0dHIsIG5hbWVzKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyKTsKICAgICAgICAgICAgIHBvcyA9IGRvdCArIDE7CkBAIC0yNTEyLDcgKzI2MTAsNyBAQAogCiAgICAgc3dpdGNoIChzLT5raW5kKSB7CiAgICAgY2FzZSBGdW5jdGlvbkRlZl9raW5kOgotICAgICAgICByZXR1cm4gY29tcGlsZXJfZnVuY3Rpb24oYywgcyk7CisgICAgICAgIHJldHVybiBjb21waWxlcl9mdW5jdGlvbihjLCBzLCAwKTsKICAgICBjYXNlIENsYXNzRGVmX2tpbmQ6CiAgICAgICAgIHJldHVybiBjb21waWxlcl9jbGFzcyhjLCBzKTsKICAgICBjYXNlIFJldHVybl9raW5kOgpAQCAtMjU5MSw3ICsyNjg5LDE0IEBACiAgICAgICAgIHJldHVybiBjb21waWxlcl9jb250aW51ZShjKTsKICAgICBjYXNlIFdpdGhfa2luZDoKICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX3dpdGgoYywgcywgMCk7CisgICAgY2FzZSBBc3luY0Z1bmN0aW9uRGVmX2tpbmQ6CisgICAgICAgIHJldHVybiBjb21waWxlcl9mdW5jdGlvbihjLCBzLCAxKTsKKyAgICBjYXNlIEFzeW5jV2l0aF9raW5kOgorICAgICAgICByZXR1cm4gY29tcGlsZXJfYXN5bmNfd2l0aChjLCBzLCAwKTsKKyAgICBjYXNlIEFzeW5jRm9yX2tpbmQ6CisgICAgICAgIHJldHVybiBjb21waWxlcl9hc3luY19mb3IoYywgcyk7CiAgICAgfQorCiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTI2MjQsNiArMjcyOSw4IEBACiAgICAgICAgIHJldHVybiBCSU5BUllfU1VCVFJBQ1Q7CiAgICAgY2FzZSBNdWx0OgogICAgICAgICByZXR1cm4gQklOQVJZX01VTFRJUExZOworICAgIGNhc2UgTWF0TXVsdDoKKyAgICAgICAgcmV0dXJuIEJJTkFSWV9NQVRSSVhfTVVMVElQTFk7CiAgICAgY2FzZSBEaXY6CiAgICAgICAgIHJldHVybiBCSU5BUllfVFJVRV9ESVZJREU7CiAgICAgY2FzZSBNb2Q6CkBAIC0yNjg4LDYgKzI3OTUsOCBAQAogICAgICAgICByZXR1cm4gSU5QTEFDRV9TVUJUUkFDVDsKICAgICBjYXNlIE11bHQ6CiAgICAgICAgIHJldHVybiBJTlBMQUNFX01VTFRJUExZOworICAgIGNhc2UgTWF0TXVsdDoKKyAgICAgICAgcmV0dXJuIElOUExBQ0VfTUFUUklYX01VTFRJUExZOwogICAgIGNhc2UgRGl2OgogICAgICAgICByZXR1cm4gSU5QTEFDRV9UUlVFX0RJVklERTsKICAgICBjYXNlIE1vZDoKQEAgLTI3NDksOCArMjg1OCw3IEBACiAgICAgICAgICAgICBvcHR5cGUgPSBPUF9GQVNUOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdMT0JBTF9JTVBMSUNJVDoKLSAgICAgICAgaWYgKGMtPnUtPnVfc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrICYmCi0gICAgICAgICAgICAhYy0+dS0+dV9zdGUtPnN0ZV91bm9wdGltaXplZCkKKyAgICAgICAgaWYgKGMtPnUtPnVfc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrKQogICAgICAgICAgICAgb3B0eXBlID0gT1BfR0xPQkFMOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdMT0JBTF9FWFBMSUNJVDoKQEAgLTI4NjgsNjcgKzI5NzYsMTQ1IEBACiB9CiAKIHN0YXRpYyBpbnQKK3N0YXJ1bnBhY2tfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywgYXNkbF9zZXEgKmVsdHMsCisgICAgICAgICAgICAgICAgICBpbnQgc2luZ2xlX29wLCBpbnQgaW5uZXJfb3AsIGludCBvdXRlcl9vcCkKK3sKKyAgICBQeV9zc2l6ZV90IG4gPSBhc2RsX3NlcV9MRU4oZWx0cyk7CisgICAgUHlfc3NpemVfdCBpLCBuc3ViaXRlbXMgPSAwLCBuc2VlbiA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBleHByX3R5IGVsdCA9IGFzZGxfc2VxX0dFVChlbHRzLCBpKTsKKyAgICAgICAgaWYgKGVsdC0+a2luZCA9PSBTdGFycmVkX2tpbmQpIHsKKyAgICAgICAgICAgIGlmIChuc2VlbikgeworICAgICAgICAgICAgICAgIEFERE9QX0koYywgaW5uZXJfb3AsIG5zZWVuKTsKKyAgICAgICAgICAgICAgICBuc2VlbiA9IDA7CisgICAgICAgICAgICAgICAgbnN1Yml0ZW1zKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBWSVNJVChjLCBleHByLCBlbHQtPnYuU3RhcnJlZC52YWx1ZSk7CisgICAgICAgICAgICBuc3ViaXRlbXMrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGVsdCk7CisgICAgICAgICAgICBuc2VlbisrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChuc3ViaXRlbXMpIHsKKyAgICAgICAgaWYgKG5zZWVuKSB7CisgICAgICAgICAgICBBRERPUF9JKGMsIGlubmVyX29wLCBuc2Vlbik7CisgICAgICAgICAgICBuc3ViaXRlbXMrKzsKKyAgICAgICAgfQorICAgICAgICBBRERPUF9JKGMsIG91dGVyX29wLCBuc3ViaXRlbXMpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIEFERE9QX0koYywgc2luZ2xlX29wLCBuc2Vlbik7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2Fzc2lnbm1lbnRfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywgYXNkbF9zZXEgKmVsdHMpCit7CisgICAgUHlfc3NpemVfdCBuID0gYXNkbF9zZXFfTEVOKGVsdHMpOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2Vlbl9zdGFyID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIGV4cHJfdHkgZWx0ID0gYXNkbF9zZXFfR0VUKGVsdHMsIGkpOworICAgICAgICBpZiAoZWx0LT5raW5kID09IFN0YXJyZWRfa2luZCAmJiAhc2Vlbl9zdGFyKSB7CisgICAgICAgICAgICBpZiAoKGkgPj0gKDEgPDwgOCkpIHx8CisgICAgICAgICAgICAgICAgKG4taS0xID49IChJTlRfTUFYID4+IDgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGlsZXJfZXJyb3IoYywKKyAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IGV4cHJlc3Npb25zIGluICIKKyAgICAgICAgICAgICAgICAgICAgInN0YXItdW5wYWNraW5nIGFzc2lnbm1lbnQiKTsKKyAgICAgICAgICAgIEFERE9QX0koYywgVU5QQUNLX0VYLCAoaSArICgobi1pLTEpIDw8IDgpKSk7CisgICAgICAgICAgICBzZWVuX3N0YXIgPSAxOworICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGVsdHMsIGksIGVsdC0+di5TdGFycmVkLnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlbHQtPmtpbmQgPT0gU3RhcnJlZF9raW5kKSB7CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZXJfZXJyb3IoYywKKyAgICAgICAgICAgICAgICAidHdvIHN0YXJyZWQgZXhwcmVzc2lvbnMgaW4gYXNzaWdubWVudCIpOworICAgICAgICB9CisgICAgfQorICAgIGlmICghc2Vlbl9zdGFyKSB7CisgICAgICAgIEFERE9QX0koYywgVU5QQUNLX1NFUVVFTkNFLCBuKTsKKyAgICB9CisgICAgVklTSVRfU0VRKGMsIGV4cHIsIGVsdHMpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CiBjb21waWxlcl9saXN0KHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIFB5X3NzaXplX3QgbiA9IGFzZGxfc2VxX0xFTihlLT52Lkxpc3QuZWx0cyk7CisgICAgYXNkbF9zZXEgKmVsdHMgPSBlLT52Lkxpc3QuZWx0czsKICAgICBpZiAoZS0+di5MaXN0LmN0eCA9PSBTdG9yZSkgewotICAgICAgICBpbnQgaSwgc2Vlbl9zdGFyID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgZXhwcl90eSBlbHQgPSBhc2RsX3NlcV9HRVQoZS0+di5MaXN0LmVsdHMsIGkpOwotICAgICAgICAgICAgaWYgKGVsdC0+a2luZCA9PSBTdGFycmVkX2tpbmQgJiYgIXNlZW5fc3RhcikgewotICAgICAgICAgICAgICAgIGlmICgoaSA+PSAoMSA8PCA4KSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKG4taS0xID49IChJTlRfTUFYID4+IDgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAidG9vIG1hbnkgZXhwcmVzc2lvbnMgaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgInN0YXItdW5wYWNraW5nIGFzc2lnbm1lbnQiKTsKLSAgICAgICAgICAgICAgICBBRERPUF9JKGMsIFVOUEFDS19FWCwgKGkgKyAoKG4taS0xKSA8PCA4KSkpOwotICAgICAgICAgICAgICAgIHNlZW5fc3RhciA9IDE7Ci0gICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGUtPnYuTGlzdC5lbHRzLCBpLCBlbHQtPnYuU3RhcnJlZC52YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGVsdC0+a2luZCA9PSBTdGFycmVkX2tpbmQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGlsZXJfZXJyb3IoYywKLSAgICAgICAgICAgICAgICAgICAgInR3byBzdGFycmVkIGV4cHJlc3Npb25zIGluIGFzc2lnbm1lbnQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIXNlZW5fc3RhcikgewotICAgICAgICAgICAgQURET1BfSShjLCBVTlBBQ0tfU0VRVUVOQ0UsIG4pOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBhc3NpZ25tZW50X2hlbHBlcihjLCBlbHRzKTsKICAgICB9Ci0gICAgVklTSVRfU0VRKGMsIGV4cHIsIGUtPnYuTGlzdC5lbHRzKTsKLSAgICBpZiAoZS0+di5MaXN0LmN0eCA9PSBMb2FkKSB7Ci0gICAgICAgIEFERE9QX0koYywgQlVJTERfTElTVCwgbik7CisgICAgZWxzZSBpZiAoZS0+di5MaXN0LmN0eCA9PSBMb2FkKSB7CisgICAgICAgIHJldHVybiBzdGFydW5wYWNrX2hlbHBlcihjLCBlbHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVJTERfTElTVCwgQlVJTERfVFVQTEUsIEJVSUxEX0xJU1RfVU5QQUNLKTsKICAgICB9CisgICAgZWxzZQorICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgZWx0cyk7CiAgICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3R1cGxlKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIFB5X3NzaXplX3QgbiA9IGFzZGxfc2VxX0xFTihlLT52LlR1cGxlLmVsdHMpOworICAgIGFzZGxfc2VxICplbHRzID0gZS0+di5UdXBsZS5lbHRzOwogICAgIGlmIChlLT52LlR1cGxlLmN0eCA9PSBTdG9yZSkgewotICAgICAgICBpbnQgaSwgc2Vlbl9zdGFyID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgZXhwcl90eSBlbHQgPSBhc2RsX3NlcV9HRVQoZS0+di5UdXBsZS5lbHRzLCBpKTsKLSAgICAgICAgICAgIGlmIChlbHQtPmtpbmQgPT0gU3RhcnJlZF9raW5kICYmICFzZWVuX3N0YXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGkgPj0gKDEgPDwgOCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChuLWktMSA+PSAoSU5UX01BWCA+PiA4KSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLAotICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IGV4cHJlc3Npb25zIGluICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdGFyLXVucGFja2luZyBhc3NpZ25tZW50Iik7Ci0gICAgICAgICAgICAgICAgQURET1BfSShjLCBVTlBBQ0tfRVgsIChpICsgKChuLWktMSkgPDwgOCkpKTsKLSAgICAgICAgICAgICAgICBzZWVuX3N0YXIgPSAxOwotICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChlLT52LlR1cGxlLmVsdHMsIGksIGVsdC0+di5TdGFycmVkLnZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZWx0LT5raW5kID09IFN0YXJyZWRfa2luZCkgewotICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLAotICAgICAgICAgICAgICAgICAgICAidHdvIHN0YXJyZWQgZXhwcmVzc2lvbnMgaW4gYXNzaWdubWVudCIpOwotICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNzaWdubWVudF9oZWxwZXIoYywgZWx0cyk7CisgICAgfQorICAgIGVsc2UgaWYgKGUtPnYuVHVwbGUuY3R4ID09IExvYWQpIHsKKyAgICAgICAgcmV0dXJuIHN0YXJ1bnBhY2tfaGVscGVyKGMsIGVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVUlMRF9UVVBMRSwgQlVJTERfVFVQTEUsIEJVSUxEX1RVUExFX1VOUEFDSyk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGVsdHMpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citjb21waWxlcl9zZXQoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCit7CisgICAgcmV0dXJuIHN0YXJ1bnBhY2tfaGVscGVyKGMsIGUtPnYuU2V0LmVsdHMsIEJVSUxEX1NFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlVJTERfU0VULCBCVUlMRF9TRVRfVU5QQUNLKTsKK30KKworc3RhdGljIGludAorY29tcGlsZXJfZGljdChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKK3sKKyAgICBQeV9zc2l6ZV90IGksIG4sIGNvbnRhaW5lcnMsIGVsZW1lbnRzOworICAgIGludCBpc191bnBhY2tpbmcgPSAwOworICAgIG4gPSBhc2RsX3NlcV9MRU4oZS0+di5EaWN0LnZhbHVlcyk7CisgICAgY29udGFpbmVycyA9IDA7CisgICAgZWxlbWVudHMgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgaXNfdW5wYWNraW5nID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKGUtPnYuRGljdC5rZXlzLCBpKSA9PSBOVUxMOworICAgICAgICBpZiAoZWxlbWVudHMgPT0gMHhGRkZGIHx8IChlbGVtZW50cyAmJiBpc191bnBhY2tpbmcpKSB7CisgICAgICAgICAgICBBRERPUF9JKGMsIEJVSUxEX01BUCwgZWxlbWVudHMpOworICAgICAgICAgICAgY29udGFpbmVycysrOworICAgICAgICAgICAgZWxlbWVudHMgPSAwOwogICAgICAgICB9Ci0gICAgICAgIGlmICghc2Vlbl9zdGFyKSB7Ci0gICAgICAgICAgICBBRERPUF9JKGMsIFVOUEFDS19TRVFVRU5DRSwgbik7CisgICAgICAgIGlmIChpc191bnBhY2tpbmcpIHsKKyAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIChleHByX3R5KWFzZGxfc2VxX0dFVChlLT52LkRpY3QudmFsdWVzLCBpKSk7CisgICAgICAgICAgICBjb250YWluZXJzKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWSVNJVChjLCBleHByLCAoZXhwcl90eSlhc2RsX3NlcV9HRVQoZS0+di5EaWN0LmtleXMsIGkpKTsKKyAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIChleHByX3R5KWFzZGxfc2VxX0dFVChlLT52LkRpY3QudmFsdWVzLCBpKSk7CisgICAgICAgICAgICBlbGVtZW50cysrOwogICAgICAgICB9CiAgICAgfQotICAgIFZJU0lUX1NFUShjLCBleHByLCBlLT52LlR1cGxlLmVsdHMpOwotICAgIGlmIChlLT52LlR1cGxlLmN0eCA9PSBMb2FkKSB7Ci0gICAgICAgIEFERE9QX0koYywgQlVJTERfVFVQTEUsIG4pOworICAgIGlmIChlbGVtZW50cyB8fCBjb250YWluZXJzID09IDApIHsKKyAgICAgICAgQURET1BfSShjLCBCVUlMRF9NQVAsIGVsZW1lbnRzKTsKKyAgICAgICAgY29udGFpbmVycysrOworICAgIH0KKyAgICAvKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGRpY3QsIHRoZXkgbmVlZCB0byBiZSBtZXJnZWQgaW50byBhIG5ldworICAgICAqIGRpY3QuICBJZiB0aGVyZSBpcyBvbmUgZGljdCBhbmQgaXQncyBhbiB1bnBhY2tpbmcsIHRoZW4gaXQgbmVlZHMKKyAgICAgKiB0byBiZSBjb3BpZWQgaW50byBhIG5ldyBkaWN0LiIgKi8KKyAgICB3aGlsZSAoY29udGFpbmVycyA+IDEgfHwgaXNfdW5wYWNraW5nKSB7CisgICAgICAgIGludCBvcGFyZyA9IGNvbnRhaW5lcnMgPCAyNTUgPyBjb250YWluZXJzIDogMjU1OworICAgICAgICBBRERPUF9JKGMsIEJVSUxEX01BUF9VTlBBQ0ssIG9wYXJnKTsKKyAgICAgICAgY29udGFpbmVycyAtPSAob3BhcmcgLSAxKTsKKyAgICAgICAgaXNfdW5wYWNraW5nID0gMDsKICAgICB9CiAgICAgcmV0dXJuIDE7CiB9CkBAIC0yOTg0LDkgKzMxNzAsNyBAQAogICAgIFZJU0lUKGMsIGV4cHIsIGUtPnYuQ2FsbC5mdW5jKTsKICAgICByZXR1cm4gY29tcGlsZXJfY2FsbF9oZWxwZXIoYywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5DYWxsLmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnYuQ2FsbC5rZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5DYWxsLnN0YXJhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkNhbGwua3dhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+di5DYWxsLmtleXdvcmRzKTsKIH0KIAogLyogc2hhcmVkIGNvZGUgYmV0d2VlbiBjb21waWxlcl9jYWxsIGFuZCBjb21waWxlcl9jbGFzcyAqLwpAQCAtMjk5NCwyNiArMzE3OCwxMDIgQEAKIGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywKICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbiwgLyogQXJncyBhbHJlYWR5IHB1c2hlZCAqLwogICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAotICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHMpCiB7CiAgICAgaW50IGNvZGUgPSAwOworICAgIFB5X3NzaXplX3QgbmVsdHMsIGksIG5zZWVuLCBua3c7CiAKLSAgICBuICs9IGFzZGxfc2VxX0xFTihhcmdzKTsKLSAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncyk7Ci0gICAgaWYgKGtleXdvcmRzKSB7Ci0gICAgICAgIFZJU0lUX1NFUShjLCBrZXl3b3JkLCBrZXl3b3Jkcyk7Ci0gICAgICAgIG4gfD0gYXNkbF9zZXFfTEVOKGtleXdvcmRzKSA8PCA4OworICAgIC8qIHRoZSBudW1iZXIgb2YgdHVwbGVzIGFuZCBkaWN0aW9uYXJpZXMgb24gdGhlIHN0YWNrICovCisgICAgUHlfc3NpemVfdCBuc3ViYXJncyA9IDAsIG5zdWJrd2FyZ3MgPSAwOworCisgICAgbmt3ID0gMDsKKyAgICBuc2VlbiA9IDA7ICAvKiB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIG9uIHRoZSBzdGFjayAqLworICAgIG5lbHRzID0gYXNkbF9zZXFfTEVOKGFyZ3MpOworICAgIGZvciAoaSA9IDA7IGkgPCBuZWx0czsgaSsrKSB7CisgICAgICAgIGV4cHJfdHkgZWx0ID0gYXNkbF9zZXFfR0VUKGFyZ3MsIGkpOworICAgICAgICBpZiAoZWx0LT5raW5kID09IFN0YXJyZWRfa2luZCkgeworICAgICAgICAgICAgLyogQSBzdGFyLWFyZy4gSWYgd2UndmUgc2VlbiBwb3NpdGlvbmFsIGFyZ3VtZW50cywKKyAgICAgICAgICAgICAgIHBhY2sgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGludG8gYQorICAgICAgICAgICAgICAgdHVwbGUuICovCisgICAgICAgICAgICBpZiAobnNlZW4pIHsKKyAgICAgICAgICAgICAgICBBRERPUF9JKGMsIEJVSUxEX1RVUExFLCBuc2Vlbik7CisgICAgICAgICAgICAgICAgbnNlZW4gPSAwOworICAgICAgICAgICAgICAgIG5zdWJhcmdzKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBWSVNJVChjLCBleHByLCBlbHQtPnYuU3RhcnJlZC52YWx1ZSk7CisgICAgICAgICAgICBuc3ViYXJncysrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG5zdWJhcmdzKSB7CisgICAgICAgICAgICAvKiBXZSd2ZSBzZWVuIHN0YXItYXJncyBhbHJlYWR5LCBzbyB3ZQorICAgICAgICAgICAgICAgY291bnQgdG93YXJkcyBpdGVtcy10by1wYWNrLWludG8tdHVwbGUuICovCisgICAgICAgICAgICBWSVNJVChjLCBleHByLCBlbHQpOworICAgICAgICAgICAgbnNlZW4rKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIFBvc2l0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBzdGFyLWFyZ3VtZW50cworICAgICAgICAgICAgICAgYXJlIGxlZnQgb24gdGhlIHN0YWNrLiAqLworICAgICAgICAgICAgVklTSVQoYywgZXhwciwgZWx0KTsKKyAgICAgICAgICAgIG4rKzsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3RhcmFyZ3MpIHsKLSAgICAgICAgVklTSVQoYywgZXhwciwgc3RhcmFyZ3MpOworICAgIGlmIChuc2VlbikgeworICAgICAgICAvKiBQYWNrIHVwIGFueSB0cmFpbGluZyBwb3NpdGlvbmFsIGFyZ3VtZW50cy4gKi8KKyAgICAgICAgQURET1BfSShjLCBCVUlMRF9UVVBMRSwgbnNlZW4pOworICAgICAgICBuc3ViYXJncysrOworICAgIH0KKyAgICBpZiAobnN1YmFyZ3MpIHsKICAgICAgICAgY29kZSB8PSAxOworICAgICAgICBpZiAobnN1YmFyZ3MgPiAxKSB7CisgICAgICAgICAgICAvKiBJZiB3ZSBlbmRlZCB1cCB3aXRoIG1vcmUgdGhhbiBvbmUgc3RhcmFyZywgd2UgbmVlZAorICAgICAgICAgICAgICAgdG8gY29uY2F0ZW5hdGUgdGhlbSBpbnRvIGEgc2luZ2xlIHNlcXVlbmNlLiAqLworICAgICAgICAgICAgQURET1BfSShjLCBCVUlMRF9MSVNUX1VOUEFDSywgbnN1YmFyZ3MpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChrd2FyZ3MpIHsKLSAgICAgICAgVklTSVQoYywgZXhwciwga3dhcmdzKTsKKworICAgIC8qIFNhbWUgZGFuY2UgYWdhaW4gZm9yIGtleXdvcmQgYXJndW1lbnRzICovCisgICAgbnNlZW4gPSAwOyAgLyogdGhlIG51bWJlciBvZiBrZXl3b3JkIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgZm9sbG93aW5nICovCisgICAgbmVsdHMgPSBhc2RsX3NlcV9MRU4oa2V5d29yZHMpOworICAgIGZvciAoaSA9IDA7IGkgPCBuZWx0czsgaSsrKSB7CisgICAgICAgIGtleXdvcmRfdHkga3cgPSBhc2RsX3NlcV9HRVQoa2V5d29yZHMsIGkpOworICAgICAgICBpZiAoa3ctPmFyZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBBIGtleXdvcmQgYXJndW1lbnQgdW5wYWNraW5nLiAqLworICAgICAgICAgICAgaWYgKG5zZWVuKSB7CisgICAgICAgICAgICAgICAgQURET1BfSShjLCBCVUlMRF9NQVAsIG5zZWVuKTsKKyAgICAgICAgICAgICAgICBuc2VlbiA9IDA7CisgICAgICAgICAgICAgICAgbnN1Ymt3YXJncysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVklTSVQoYywgZXhwciwga3ctPnZhbHVlKTsKKyAgICAgICAgICAgIG5zdWJrd2FyZ3MrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuc3Via3dhcmdzKSB7CisgICAgICAgICAgICAvKiBBIGtleXdvcmQgYXJndW1lbnQgYW5kIHdlIGFscmVhZHkgaGF2ZSBhIGRpY3QuICovCisgICAgICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGt3LT5hcmcsIGNvbnN0cyk7CisgICAgICAgICAgICBWSVNJVChjLCBleHByLCBrdy0+dmFsdWUpOworICAgICAgICAgICAgbnNlZW4rKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIGtleXdvcmQgYXJndW1lbnQgKi8KKyAgICAgICAgICAgIFZJU0lUKGMsIGtleXdvcmQsIGt3KQorICAgICAgICAgICAgbmt3Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5zZWVuKSB7CisgICAgICAgIC8qIFBhY2sgdXAgYW55IHRyYWlsaW5nIGtleXdvcmQgYXJndW1lbnRzLiAqLworICAgICAgICBBRERPUF9JKGMsIEJVSUxEX01BUCwgbnNlZW4pOworICAgICAgICBuc3Via3dhcmdzKys7CisgICAgfQorICAgIGlmIChuc3Via3dhcmdzKSB7CiAgICAgICAgIGNvZGUgfD0gMjsKKyAgICAgICAgaWYgKG5zdWJrd2FyZ3MgPiAxKSB7CisgICAgICAgICAgICAvKiBQYWNrIGl0IGFsbCB1cCAqLworICAgICAgICAgICAgaW50IGZ1bmN0aW9uX3BvcyA9IG4gKyAoY29kZSAmIDEpICsgMiAqIG5rdyArIDE7CisgICAgICAgICAgICBBRERPUF9JKGMsIEJVSUxEX01BUF9VTlBBQ0tfV0lUSF9DQUxMLCBuc3Via3dhcmdzIHwgKGZ1bmN0aW9uX3BvcyA8PCA4KSk7CisgICAgICAgIH0KICAgICB9CisgICAgYXNzZXJ0KG4gPCAxPDw4KTsKKyAgICBhc3NlcnQobmt3IDwgMTw8MjQpOworICAgIG4gfD0gbmt3IDw8IDg7CisKICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIEFERE9QX0koYywgQ0FMTF9GVU5DVElPTiwgbik7CkBAIC0zMTM4LDggKzMzOTgsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1jb21waWxlcl9jb21wcmVoZW5zaW9uKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlLCBpbnQgdHlwZSwgaWRlbnRpZmllciBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqZ2VuZXJhdG9ycywgZXhwcl90eSBlbHQsIGV4cHJfdHkgdmFsKQorY29tcGlsZXJfY29tcHJlaGVuc2lvbihzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSwgaW50IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgbmFtZSwgYXNkbF9zZXEgKmdlbmVyYXRvcnMsIGV4cHJfdHkgZWx0LAorICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IHZhbCkKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvID0gTlVMTDsKICAgICBleHByX3R5IG91dGVybW9zdF9pdGVyOwpAQCAtMzMxMiw2ICszNTczLDEwMiBAQAogICAgIH0KIH0KIAorCisvKgorICAgSW1wbGVtZW50cyB0aGUgYXN5bmMgd2l0aCBzdGF0ZW1lbnQuCisKKyAgIFRoZSBzZW1hbnRpY3Mgb3V0bGluZWQgaW4gdGhhdCBQRVAgYXJlIGFzIGZvbGxvd3M6CisKKyAgIGFzeW5jIHdpdGggRVhQUiBhcyBWQVI6CisgICAgICAgQkxPQ0sKKworICAgSXQgaXMgaW1wbGVtZW50ZWQgcm91Z2hseSBhczoKKworICAgY29udGV4dCA9IEVYUFIKKyAgIGV4aXQgPSBjb250ZXh0Ll9fYWV4aXRfXyAgIyBub3QgY2FsbGluZyBpdAorICAgdmFsdWUgPSBhd2FpdCBjb250ZXh0Ll9fYWVudGVyX18oKQorICAgdHJ5OgorICAgICAgIFZBUiA9IHZhbHVlICAjIGlmIFZBUiBwcmVzZW50IGluIHRoZSBzeW50YXgKKyAgICAgICBCTE9DSworICAgZmluYWxseToKKyAgICAgICBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZDoKKyAgICAgICBleGMgPSBjb3B5IG9mIChleGNlcHRpb24sIGluc3RhbmNlLCB0cmFjZWJhY2spCisgICAgICAgZWxzZToKKyAgICAgICBleGMgPSAoTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICBpZiBub3QgKGF3YWl0IGV4aXQoKmV4YykpOgorICAgICAgICAgICByYWlzZQorICovCitzdGF0aWMgaW50Citjb21waWxlcl9hc3luY193aXRoKHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzLCBpbnQgcG9zKQoreworICAgIGJhc2ljYmxvY2sgKmJsb2NrLCAqZmluYWxseTsKKyAgICB3aXRoaXRlbV90eSBpdGVtID0gYXNkbF9zZXFfR0VUKHMtPnYuQXN5bmNXaXRoLml0ZW1zLCBwb3MpOworCisgICAgYXNzZXJ0KHMtPmtpbmQgPT0gQXN5bmNXaXRoX2tpbmQpOworCisgICAgYmxvY2sgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CisgICAgZmluYWxseSA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKKyAgICBpZiAoIWJsb2NrIHx8ICFmaW5hbGx5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIEV2YWx1YXRlIEVYUFIgKi8KKyAgICBWSVNJVChjLCBleHByLCBpdGVtLT5jb250ZXh0X2V4cHIpOworCisgICAgQURET1AoYywgQkVGT1JFX0FTWU5DX1dJVEgpOworICAgIEFERE9QKGMsIEdFVF9BV0FJVEFCTEUpOworICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKKyAgICBBRERPUChjLCBZSUVMRF9GUk9NKTsKKworICAgIEFERE9QX0pSRUwoYywgU0VUVVBfQVNZTkNfV0lUSCwgZmluYWxseSk7CisKKyAgICAvKiBTRVRVUF9BU1lOQ19XSVRIIHB1c2hlcyBhIGZpbmFsbHkgYmxvY2suICovCisgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgYmxvY2spOworICAgIGlmICghY29tcGlsZXJfcHVzaF9mYmxvY2soYywgRklOQUxMWV9UUlksIGJsb2NrKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoaXRlbS0+b3B0aW9uYWxfdmFycykgeworICAgICAgICBWSVNJVChjLCBleHByLCBpdGVtLT5vcHRpb25hbF92YXJzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgLyogRGlzY2FyZCByZXN1bHQgZnJvbSBjb250ZXh0Ll9fYWVudGVyX18oKSAqLworICAgICAgICBBRERPUChjLCBQT1BfVE9QKTsKKyAgICB9CisKKyAgICBwb3MrKzsKKyAgICBpZiAocG9zID09IGFzZGxfc2VxX0xFTihzLT52LkFzeW5jV2l0aC5pdGVtcykpCisgICAgICAgIC8qIEJMT0NLIGNvZGUgKi8KKyAgICAgICAgVklTSVRfU0VRKGMsIHN0bXQsIHMtPnYuQXN5bmNXaXRoLmJvZHkpCisgICAgZWxzZSBpZiAoIWNvbXBpbGVyX2FzeW5jX3dpdGgoYywgcywgcG9zKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgLyogRW5kIG9mIHRyeSBibG9jazsgc3RhcnQgdGhlIGZpbmFsbHkgYmxvY2sgKi8KKyAgICBBRERPUChjLCBQT1BfQkxPQ0spOworICAgIGNvbXBpbGVyX3BvcF9mYmxvY2soYywgRklOQUxMWV9UUlksIGJsb2NrKTsKKworICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKKyAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBmaW5hbGx5KTsKKyAgICBpZiAoIWNvbXBpbGVyX3B1c2hfZmJsb2NrKGMsIEZJTkFMTFlfRU5ELCBmaW5hbGx5KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBGaW5hbGx5IGJsb2NrIHN0YXJ0czsgY29udGV4dC5fX2V4aXRfXyBpcyBvbiB0aGUgc3RhY2sgdW5kZXIKKyAgICAgICB0aGUgZXhjZXB0aW9uIG9yIHJldHVybiBpbmZvcm1hdGlvbi4gSnVzdCBpc3N1ZSBvdXIgbWFnaWMKKyAgICAgICBvcGNvZGUuICovCisgICAgQURET1AoYywgV0lUSF9DTEVBTlVQX1NUQVJUKTsKKworICAgIEFERE9QKGMsIEdFVF9BV0FJVEFCTEUpOworICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKKyAgICBBRERPUChjLCBZSUVMRF9GUk9NKTsKKworICAgIEFERE9QKGMsIFdJVEhfQ0xFQU5VUF9GSU5JU0gpOworCisgICAgLyogRmluYWxseSBibG9jayBlbmRzLiAqLworICAgIEFERE9QKGMsIEVORF9GSU5BTExZKTsKKyAgICBjb21waWxlcl9wb3BfZmJsb2NrKGMsIEZJTkFMTFlfRU5ELCBmaW5hbGx5KTsKKyAgICByZXR1cm4gMTsKK30KKworCiAvKgogICAgSW1wbGVtZW50cyB0aGUgd2l0aCBzdGF0ZW1lbnQgZnJvbSBQRVAgMzQzLgogCkBAIC0zMzg1LDcgKzM3NDIsOCBAQAogICAgIC8qIEZpbmFsbHkgYmxvY2sgc3RhcnRzOyBjb250ZXh0Ll9fZXhpdF9fIGlzIG9uIHRoZSBzdGFjayB1bmRlcgogICAgICAgIHRoZSBleGNlcHRpb24gb3IgcmV0dXJuIGluZm9ybWF0aW9uLiBKdXN0IGlzc3VlIG91ciBtYWdpYwogICAgICAgIG9wY29kZS4gKi8KLSAgICBBRERPUChjLCBXSVRIX0NMRUFOVVApOworICAgIEFERE9QKGMsIFdJVEhfQ0xFQU5VUF9TVEFSVCk7CisgICAgQURET1AoYywgV0lUSF9DTEVBTlVQX0ZJTklTSCk7CiAKICAgICAvKiBGaW5hbGx5IGJsb2NrIGVuZHMuICovCiAgICAgQURET1AoYywgRU5EX0ZJTkFMTFkpOwpAQCAtMzM5Niw4ICszNzU0LDYgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3Zpc2l0X2V4cHIoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBuOwotCiAgICAgLyogSWYgZXhwciBlIGhhcyBhIGRpZmZlcmVudCBsaW5lIG51bWJlciB0aGFuIHRoZSBsYXN0IGV4cHIvc3RtdCwKICAgICAgICBzZXQgYSBuZXcgbGluZSBudW1iZXIgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uLgogICAgICovCkBAIC0zNDI0LDIzICszNzgwLDkgQEAKICAgICBjYXNlIElmRXhwX2tpbmQ6CiAgICAgICAgIHJldHVybiBjb21waWxlcl9pZmV4cChjLCBlKTsKICAgICBjYXNlIERpY3Rfa2luZDoKLSAgICAgICAgbiA9IGFzZGxfc2VxX0xFTihlLT52LkRpY3QudmFsdWVzKTsKLSAgICAgICAgLyogQlVJTERfTUFQIHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgdG8gcHJlYWxsb2NhdGUgdGhlIGRpY3Rpb25hcnksCi0gICAgICAgICAgIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBleGFjdCAqLwotICAgICAgICBBRERPUF9JKGMsIEJVSUxEX01BUCwgKG4+MHhGRkZGID8gMHhGRkZGIDogbikpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICBWSVNJVChjLCBleHByLAotICAgICAgICAgICAgICAgIChleHByX3R5KWFzZGxfc2VxX0dFVChlLT52LkRpY3QudmFsdWVzLCBpKSk7Ci0gICAgICAgICAgICBWSVNJVChjLCBleHByLAotICAgICAgICAgICAgICAgIChleHByX3R5KWFzZGxfc2VxX0dFVChlLT52LkRpY3Qua2V5cywgaSkpOwotICAgICAgICAgICAgQURET1AoYywgU1RPUkVfTUFQKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2RpY3QoYywgZSk7CiAgICAgY2FzZSBTZXRfa2luZDoKLSAgICAgICAgbiA9IGFzZGxfc2VxX0xFTihlLT52LlNldC5lbHRzKTsKLSAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGUtPnYuU2V0LmVsdHMpOwotICAgICAgICBBRERPUF9JKGMsIEJVSUxEX1NFVCwgbik7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gY29tcGlsZXJfc2V0KGMsIGUpOwogICAgIGNhc2UgR2VuZXJhdG9yRXhwX2tpbmQ6CiAgICAgICAgIHJldHVybiBjb21waWxlcl9nZW5leHAoYywgZSk7CiAgICAgY2FzZSBMaXN0Q29tcF9raW5kOgpAQCAtMzQ1Miw2ICszNzk0LDggQEAKICAgICBjYXNlIFlpZWxkX2tpbmQ6CiAgICAgICAgIGlmIChjLT51LT51X3N0ZS0+c3RlX3R5cGUgIT0gRnVuY3Rpb25CbG9jaykKICAgICAgICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLCAiJ3lpZWxkJyBvdXRzaWRlIGZ1bmN0aW9uIik7CisgICAgICAgIGlmIChjLT51LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQVNZTkNfRlVOQ1RJT04pCisgICAgICAgICAgICByZXR1cm4gY29tcGlsZXJfZXJyb3IoYywgIid5aWVsZCcgaW5zaWRlIGFzeW5jIGZ1bmN0aW9uIik7CiAgICAgICAgIGlmIChlLT52LllpZWxkLnZhbHVlKSB7CiAgICAgICAgICAgICBWSVNJVChjLCBleHByLCBlLT52LllpZWxkLnZhbHVlKTsKICAgICAgICAgfQpAQCAtMzQ2Myw4ICszODA3LDI4IEBACiAgICAgY2FzZSBZaWVsZEZyb21fa2luZDoKICAgICAgICAgaWYgKGMtPnUtPnVfc3RlLT5zdGVfdHlwZSAhPSBGdW5jdGlvbkJsb2NrKQogICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsICIneWllbGQnIG91dHNpZGUgZnVuY3Rpb24iKTsKKworICAgICAgICBpZiAoYy0+dS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0FTWU5DX0ZVTkNUSU9OKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsICIneWllbGQgZnJvbScgaW5zaWRlIGFzeW5jIGZ1bmN0aW9uIik7CisKICAgICAgICAgVklTSVQoYywgZXhwciwgZS0+di5ZaWVsZEZyb20udmFsdWUpOwotICAgICAgICBBRERPUChjLCBHRVRfSVRFUik7CisgICAgICAgIEFERE9QKGMsIEdFVF9ZSUVMRF9GUk9NX0lURVIpOworICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X05vbmUsIGNvbnN0cyk7CisgICAgICAgIEFERE9QKGMsIFlJRUxEX0ZST00pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF3YWl0X2tpbmQ6CisgICAgICAgIGlmIChjLT51LT51X3N0ZS0+c3RlX3R5cGUgIT0gRnVuY3Rpb25CbG9jaykKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLCAiJ2F3YWl0JyBvdXRzaWRlIGZ1bmN0aW9uIik7CisKKyAgICAgICAgaWYgKGMtPnUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DT01QUkVIRU5TSU9OKQorICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2Vycm9yKAorICAgICAgICAgICAgICAgIGMsICInYXdhaXQnIGV4cHJlc3Npb25zIGluIGNvbXByZWhlbnNpb25zIGFyZSBub3Qgc3VwcG9ydGVkIik7CisKKyAgICAgICAgaWYgKGMtPnUtPnVfc2NvcGVfdHlwZSAhPSBDT01QSUxFUl9TQ09QRV9BU1lOQ19GVU5DVElPTikKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLCAiJ2F3YWl0JyBvdXRzaWRlIGFzeW5jIGZ1bmN0aW9uIik7CisKKyAgICAgICAgVklTSVQoYywgZXhwciwgZS0+di5Bd2FpdC52YWx1ZSk7CisgICAgICAgIEFERE9QKGMsIEdFVF9BV0FJVEFCTEUpOwogICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X05vbmUsIGNvbnN0cyk7CiAgICAgICAgIEFERE9QKGMsIFlJRUxEX0ZST00pOwogICAgICAgICBicmVhazsKQEAgLTM1NTEsNyArMzkxNSw3IEBACiAgICAgICAgICAgICAgICAgInN0YXJyZWQgYXNzaWdubWVudCB0YXJnZXQgbXVzdCBiZSBpbiBhIGxpc3Qgb3IgdHVwbGUiKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLAotICAgICAgICAgICAgICAgICJjYW4gdXNlIHN0YXJyZWQgZXhwcmVzc2lvbiBvbmx5IGFzIGFzc2lnbm1lbnQgdGFyZ2V0Iik7CisgICAgICAgICAgICAgICAgImNhbid0IHVzZSBzdGFycmVkIGV4cHJlc3Npb24gaGVyZSIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTmFtZV9raW5kOgpAQCAtMzYxNiw3ICszOTgwLDcgQEAKIHsKICAgICBzdHJ1Y3QgZmJsb2NraW5mbyAqZjsKICAgICBpZiAoYy0+dS0+dV9uZmJsb2NrcyA+PSBDT19NQVhCTE9DS1MpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidG9vIG1hbnkgc3RhdGljYWxseSBuZXN0ZWQgYmxvY2tzIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQxNjMsOSArNDUyNywxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB3aGlsZSAoUHlEaWN0X05leHQoZGljdCwgJnBvcywgJmssICZ2KSkgewogICAgICAgICBpID0gUHlMb25nX0FTX0xPTkcodik7Ci0gICAgICAgIC8qIFRoZSBrZXlzIG9mIHRoZSBkaWN0aW9uYXJ5IGFyZSB0dXBsZXMuIChzZWUgY29tcGlsZXJfYWRkX28pCi0gICAgICAgICAgIFRoZSBvYmplY3Qgd2Ugd2FudCBpcyBhbHdheXMgZmlyc3QsIHRob3VnaC4gKi8KLSAgICAgICAgayA9IFB5VHVwbGVfR0VUX0lURU0oaywgMCk7CisgICAgICAgIC8qIFRoZSBrZXlzIG9mIHRoZSBkaWN0aW9uYXJ5IGFyZSB0dXBsZXMuIChzZWUgY29tcGlsZXJfYWRkX28KKyAgICAgICAgICogYW5kIF9QeUNvZGVfQ29uc3RhbnRLZXkpLiBUaGUgb2JqZWN0IHdlIHdhbnQgaXMgYWx3YXlzIHNlY29uZCwKKyAgICAgICAgICogdGhvdWdoLiAqLworICAgICAgICBrID0gUHlUdXBsZV9HRVRfSVRFTShrLCAxKTsKICAgICAgICAgUHlfSU5DUkVGKGspOwogICAgICAgICBhc3NlcnQoKGkgLSBvZmZzZXQpIDwgc2l6ZSk7CiAgICAgICAgIGFzc2VydCgoaSAtIG9mZnNldCkgPj0gMCk7CkBAIC00MTgxLDkgKzQ1NDYsNyBAQAogICAgIGludCBmbGFncyA9IDA7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2spIHsKLSAgICAgICAgZmxhZ3MgfD0gQ09fTkVXTE9DQUxTOwotICAgICAgICBpZiAoIXN0ZS0+c3RlX3Vub3B0aW1pemVkKQotICAgICAgICAgICAgZmxhZ3MgfD0gQ09fT1BUSU1JWkVEOworICAgICAgICBmbGFncyB8PSBDT19ORVdMT0NBTFMgfCBDT19PUFRJTUlaRUQ7CiAgICAgICAgIGlmIChzdGUtPnN0ZV9uZXN0ZWQpCiAgICAgICAgICAgICBmbGFncyB8PSBDT19ORVNURUQ7CiAgICAgICAgIGlmIChzdGUtPnN0ZV9nZW5lcmF0b3IpCmRpZmYgLS1naXQgYS9QeXRob24vY29uZHZhci5oIGIvUHl0aG9uL2NvbmR2YXIuaAppbmRleCBlZjgxOGM0Li5iYjViMWI2IDEwMDY0NAotLS0gYS9QeXRob24vY29uZHZhci5oCisrKyBiL1B5dGhvbi9jb25kdmFyLmgKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBQb3J0YWJsZSBjb25kaXRpb24gdmFyaWFibGUgc3VwcG9ydCBmb3Igd2luZG93cyBhbmQgcHRocmVhZHMuCiAgKiBFdmVyeXRoaW5nIGlzIGlubGluZSwgdGhpcyBoZWFkZXIgY2FuIGJlIGluY2x1ZGVkIHdoZXJlIG5lZWRlZC4KICAqCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgcmV0dXJuIDE7CiAgICAgZWxzZSBpZiAocikKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UgCisgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICAgICAqIGEgbmV3IHRocmVhZCBjb21lcyBhbG9uZywgaXQgd2lsbCBwYXNzIHJpZ2h0IHRocm91aGdoLCBoYXZpbmcKICAgICAgICAgICogYWRqdXN0ZWQgaXQgdG8gKHdhaXRpbmcgPT0gMCAmJiBzZW0uY291bnQgPT0gMCkuCiAgICAgICAgICAqLwotICAgICAgICAgCisKICAgICBpZiAod2FpdCA9PSBXQUlUX0ZBSUxFRCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIC8qIHJldHVybiAwIG9uIHN1Y2Nlc3MsIDEgb24gdGltZW91dCAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R0b2EuYyBiL1B5dGhvbi9kdG9hLmMKaW5kZXggODk5NmE3Mi4uM2RhNTQ2ZSAxMDA2NDQKLS0tIGEvUHl0aG9uL2R0b2EuYworKysgYi9QeXRob24vZHRvYS5jCkBAIC0zNzMsNyArMzczLDcgQEAKICAgICAgICAgeCA9IDEgPDwgazsKICAgICAgICAgbGVuID0gKHNpemVvZihCaWdpbnQpICsgKHgtMSkqc2l6ZW9mKFVMb25nKSArIHNpemVvZihkb3VibGUpIC0gMSkKICAgICAgICAgICAgIC9zaXplb2YoZG91YmxlKTsKLSAgICAgICAgaWYgKGsgPD0gS21heCAmJiBwbWVtX25leHQgLSBwcml2YXRlX21lbSArIGxlbiA8PSBQUklWQVRFX21lbSkgeworICAgICAgICBpZiAoayA8PSBLbWF4ICYmIHBtZW1fbmV4dCAtIHByaXZhdGVfbWVtICsgbGVuIDw9IChQeV9zc2l6ZV90KVBSSVZBVEVfbWVtKSB7CiAgICAgICAgICAgICBydiA9IChCaWdpbnQqKXBtZW1fbmV4dDsKICAgICAgICAgICAgIHBtZW1fbmV4dCArPSBsZW47CiAgICAgICAgIH0KQEAgLTEwODcsNyArMTA4Nyw3IEBACiAgICAgYiA9IEJhbGxvYygxKTsKICAgICBpZiAoYiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAKKwogICAgIC8qIEZpcnN0IGNvbnN0cnVjdCBiIGFuZCBlIGFzc3VtaW5nIHRoYXQgc2NhbGUgPT0gMC4gKi8KICAgICBiLT53ZHMgPSAyOwogICAgIGItPnhbMF0gPSB3b3JkMShkKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX2FpeC5jIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKaW5kZXggNWFjMzBlZC4uYjNmZjhlMiAxMDA2NDQKLS0tIGEvUHl0aG9uL2R5bmxvYWRfYWl4LmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKQEAgLTE1NCw4ICsxNTQsOSBAQAogfQogCiAKLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKK2RsX2Z1bmNwdHIgX1B5SW1wb3J0X0ZpbmRTaGFyZWRGdW5jcHRyKGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKIHsKICAgICBkbF9mdW5jcHRyIHA7CiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX2RsLmMgYi9QeXRob24vZHlubG9hZF9kbC5jCmluZGV4IDU4MzZjYjNiLi4yYmVjNjQ1IDEwMDY0NAotLS0gYS9QeXRob24vZHlubG9hZF9kbC5jCisrKyBiL1B5dGhvbi9keW5sb2FkX2RsLmMKQEAgLTEyLDExICsxMiwxMiBAQAogY29uc3QgY2hhciAqX1B5SW1wb3J0X0R5bkxvYWRGaWxldGFiW10gPSB7Ii5vIiwgTlVMTH07CiAKIAotZGxfZnVuY3B0ciBfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMoY29uc3QgY2hhciAqc2hvcnRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZwKQorZGxfZnVuY3B0ciBfUHlJbXBvcnRfRmluZFNoYXJlZEZ1bmNwdHIoY29uc3QgY2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2hvcnRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZwKQogewogICAgIGNoYXIgZnVuY25hbWVbMjU4XTsKIAotICAgIFB5T1Nfc25wcmludGYoZnVuY25hbWUsIHNpemVvZihmdW5jbmFtZSksICJQeUluaXRfJS4yMDBzIiwgc2hvcnRuYW1lKTsKKyAgICBQeU9TX3NucHJpbnRmKGZ1bmNuYW1lLCBzaXplb2YoZnVuY25hbWUpLCAiJS4yMHNfJS4yMDBzIiwgcHJlZml4LCBzaG9ydG5hbWUpOwogICAgIHJldHVybiBkbF9sb2FkbW9kKFB5X0dldFByb2dyYW1OYW1lKCksIHBhdGhuYW1lLCBmdW5jbmFtZSk7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9ocHV4LmMgYi9QeXRob24vZHlubG9hZF9ocHV4LmMKaW5kZXggYzk1NTQxNC4uNDk2N2FmYyAxMDA2NDQKLS0tIGEvUHl0aG9uL2R5bmxvYWRfaHB1eC5jCisrKyBiL1B5dGhvbi9keW5sb2FkX2hwdXguYwpAQCAtOCwxNSArOCwxNiBAQAogI2luY2x1ZGUgImltcG9ydGRsLmgiCiAKICNpZiBkZWZpbmVkKF9faHA5MDAwczMwMCkKLSNkZWZpbmUgRlVOQ05BTUVfUEFUVEVSTiAiX1B5SW5pdF8lLjIwMHMiCisjZGVmaW5lIEZVTkNOQU1FX1BBVFRFUk4gIl8lLjIwc18lLjIwMHMiCiAjZWxzZQotI2RlZmluZSBGVU5DTkFNRV9QQVRURVJOICJQeUluaXRfJS4yMDBzIgorI2RlZmluZSBGVU5DTkFNRV9QQVRURVJOICIlLjIwc18lLjIwMHMiCiAjZW5kaWYKIAogY29uc3QgY2hhciAqX1B5SW1wb3J0X0R5bkxvYWRGaWxldGFiW10gPSB7U0hMSUJfRVhULCBOVUxMfTsKIAotZGxfZnVuY3B0ciBfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMoY29uc3QgY2hhciAqc2hvcnRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZwKQorZGxfZnVuY3B0ciBfUHlJbXBvcnRfRmluZFNoYXJlZEZ1bmNwdHIoY29uc3QgY2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2hvcnRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZwKQogewogICAgIGRsX2Z1bmNwdHIgcDsKICAgICBzaGxfdCBsaWI7CkBAIC01MCw3ICs1MSw4IEBACiAgICAgICAgIFB5X0RFQ1JFRihwYXRobmFtZV9vYik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeU9TX3NucHJpbnRmKGZ1bmNuYW1lLCBzaXplb2YoZnVuY25hbWUpLCBGVU5DTkFNRV9QQVRURVJOLCBzaG9ydG5hbWUpOworICAgIFB5T1Nfc25wcmludGYoZnVuY25hbWUsIHNpemVvZihmdW5jbmFtZSksIEZVTkNOQU1FX1BBVFRFUk4sCisgICAgICAgICAgICAgICAgICBwcmVmaXgsIHNob3J0bmFtZSk7CiAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQogICAgICAgICBwcmludGYoInNobF9maW5kc3ltICVzXG4iLCBmdW5jbmFtZSk7CiAgICAgaWYgKHNobF9maW5kc3ltKCZsaWIsIGZ1bmNuYW1lLCBUWVBFX1VOREVGSU5FRCwgKHZvaWQgKikgJnApID09IC0xKSB7CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9uZXh0LmMgYi9QeXRob24vZHlubG9hZF9uZXh0LmMKaW5kZXggODVjOTViNC4uODNhOGIyYmIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX25leHQuYworKysgYi9QeXRob24vZHlubG9hZF9uZXh0LmMKQEAgLTI3LDggKzI3LDkgQEAKICNkZWZpbmUgTElOS09QVElPTlMgTlNMSU5LTU9EVUxFX09QVElPTl9CSU5ETk9XfCBcCiAgICAgTlNMSU5LTU9EVUxFX09QVElPTl9SRVRVUk5fT05fRVJST1J8TlNMSU5LTU9EVUxFX09QVElPTl9QUklWQVRFCiAjZW5kaWYKLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKK2RsX2Z1bmNwdHIgX1B5SW1wb3J0X0ZpbmRTaGFyZWRGdW5jcHRyKGNvbnN0IGNoYXIgKnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKIHsKICAgICBkbF9mdW5jcHRyIHAgPSBOVUxMOwogICAgIGNoYXIgZnVuY25hbWVbMjU4XTsKQEAgLTM5LDcgKzQwLDcgQEAKICAgICBjb25zdCBjaGFyICplcnJTdHJpbmc7CiAgICAgY2hhciBlcnJCdWZbNTEyXTsKIAotICAgIFB5T1Nfc25wcmludGYoZnVuY25hbWUsIHNpemVvZihmdW5jbmFtZSksICJfUHlJbml0XyUuMjAwcyIsIHNob3J0bmFtZSk7CisgICAgUHlPU19zbnByaW50ZihmdW5jbmFtZSwgc2l6ZW9mKGZ1bmNuYW1lKSwgIl8lLjIwc18lLjIwMHMiLCBwcmVmaXgsIHNob3J0bmFtZSk7CiAKICNpZmRlZiBVU0VfRFlMRF9HTE9CQUxfTkFNRVNQQUNFCiAgICAgaWYgKE5TSXNTeW1ib2xOYW1lRGVmaW5lZChmdW5jbmFtZSkpIHsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX3NobGliLmMgYi9QeXRob24vZHlubG9hZF9zaGxpYi5jCmluZGV4IDVjZDFlZmQuLjdmOGYxMzQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX3NobGliLmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYwpAQCAtNTEsOCArNTEsMTAgQEAKIHN0YXRpYyBpbnQgbmhhbmRsZXMgPSAwOwogCiAKLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKK2RsX2Z1bmNwdHIKK19QeUltcG9ydF9GaW5kU2hhcmVkRnVuY3B0cihjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2hvcnRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKIHsKICAgICBkbF9mdW5jcHRyIHA7CiAgICAgdm9pZCAqaGFuZGxlOwpAQCAtNjcsMjYgKzY5LDI0IEBACiAgICAgfQogCiAgICAgUHlPU19zbnByaW50ZihmdW5jbmFtZSwgc2l6ZW9mKGZ1bmNuYW1lKSwKLSAgICAgICAgICAgICAgICAgIExFQURfVU5ERVJTQ09SRSAiUHlJbml0XyUuMjAwcyIsIHNob3J0bmFtZSk7CisgICAgICAgICAgICAgICAgICBMRUFEX1VOREVSU0NPUkUgIiUuMjBzXyUuMjAwcyIsIHByZWZpeCwgc2hvcnRuYW1lKTsKIAogICAgIGlmIChmcCAhPSBOVUxMKSB7CiAgICAgICAgIGludCBpOwotICAgICAgICBzdHJ1Y3Qgc3RhdCBzdGF0YjsKLSAgICAgICAgaWYgKGZzdGF0KGZpbGVubyhmcCksICZzdGF0YikgPT0gLTEpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgc3RydWN0IF9QeV9zdGF0X3N0cnVjdCBzdGF0dXM7CisgICAgICAgIGlmIChfUHlfZnN0YXQoZmlsZW5vKGZwKSwgJnN0YXR1cykgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmhhbmRsZXM7IGkrKykgewotICAgICAgICAgICAgaWYgKHN0YXRiLnN0X2RldiA9PSBoYW5kbGVzW2ldLmRldiAmJgotICAgICAgICAgICAgICAgIHN0YXRiLnN0X2lubyA9PSBoYW5kbGVzW2ldLmlubykgeworICAgICAgICAgICAgaWYgKHN0YXR1cy5zdF9kZXYgPT0gaGFuZGxlc1tpXS5kZXYgJiYKKyAgICAgICAgICAgICAgICBzdGF0dXMuc3RfaW5vID09IGhhbmRsZXNbaV0uaW5vKSB7CiAgICAgICAgICAgICAgICAgcCA9IChkbF9mdW5jcHRyKSBkbHN5bShoYW5kbGVzW2ldLmhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lKTsKICAgICAgICAgICAgICAgICByZXR1cm4gcDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAobmhhbmRsZXMgPCAxMjgpIHsKLSAgICAgICAgICAgIGhhbmRsZXNbbmhhbmRsZXNdLmRldiA9IHN0YXRiLnN0X2RldjsKLSAgICAgICAgICAgIGhhbmRsZXNbbmhhbmRsZXNdLmlubyA9IHN0YXRiLnN0X2lubzsKKyAgICAgICAgICAgIGhhbmRsZXNbbmhhbmRsZXNdLmRldiA9IHN0YXR1cy5zdF9kZXY7CisgICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5pbm8gPSBzdGF0dXMuc3RfaW5vOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF93aW4uYyBiL1B5dGhvbi9keW5sb2FkX3dpbi5jCmluZGV4IGZmY2YwZWUuLmYyYzc5NmUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX3dpbi5jCisrKyBiL1B5dGhvbi9keW5sb2FkX3dpbi5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKICNpbmNsdWRlICJpbXBvcnRkbC5oIgorI2luY2x1ZGUgInBhdGNobGV2ZWwuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKIC8vICJhY3RpdmF0aW9uIGNvbnRleHQiIG1hZ2ljIC0gc2VlIGRsX250LmMuLi4KQEAgLTE3LDE2ICsxOCwyOCBAQAogdm9pZCBfUHlfRGVhY3RpdmF0ZUFjdEN0eChVTE9OR19QVFIgY29va2llKTsKICNlbmRpZgogCi1jb25zdCBjaGFyICpfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWJbXSA9IHsKICNpZmRlZiBfREVCVUcKLSAgICAiX2QucHlkIiwKKyNkZWZpbmUgUFlEX0RFQlVHX1NVRkZJWCAiX2QiCiAjZWxzZQotICAgICIucHlkIiwKKyNkZWZpbmUgUFlEX0RFQlVHX1NVRkZJWCAiIgogI2VuZGlmCisKKyNkZWZpbmUgU1RSSU5HSVpFMih4KSAjeAorI2RlZmluZSBTVFJJTkdJWkUoeCkgU1RSSU5HSVpFMih4KQorI2lmZGVmIFBZRF9QTEFURk9STV9UQUcKKyNkZWZpbmUgUFlEX1RBR0dFRF9TVUZGSVggUFlEX0RFQlVHX1NVRkZJWCAiLmNwIiBTVFJJTkdJWkUoUFlfTUFKT1JfVkVSU0lPTikgU1RSSU5HSVpFKFBZX01JTk9SX1ZFUlNJT04pICItIiBQWURfUExBVEZPUk1fVEFHICIucHlkIgorI2Vsc2UKKyNkZWZpbmUgUFlEX1RBR0dFRF9TVUZGSVggUFlEX0RFQlVHX1NVRkZJWCAiLmNwIiBTVFJJTkdJWkUoUFlfTUFKT1JfVkVSU0lPTikgU1RSSU5HSVpFKFBZX01JTk9SX1ZFUlNJT04pICIucHlkIgorI2VuZGlmCisKKyNkZWZpbmUgUFlEX1VOVEFHR0VEX1NVRkZJWCBQWURfREVCVUdfU1VGRklYICIucHlkIgorCitjb25zdCBjaGFyICpfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWJbXSA9IHsKKyAgICBQWURfVEFHR0VEX1NVRkZJWCwKKyAgICBQWURfVU5UQUdHRURfU1VGRklYLAogICAgIE5VTEwKIH07CiAKLQogLyogQ2FzZSBpbnNlbnNpdGl2ZSBzdHJpbmcgY29tcGFyZSwgdG8gYXZvaWQgYW55IGRlcGVuZGVuY2llcyBvbiBwYXJ0aWN1bGFyCiAgICBDIFJUTCBpbXBsZW1lbnRhdGlvbnMgKi8KIApAQCAtMTczLDggKzE4Niw5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwYXRobmFtZSwgRklMRSAqZnApCitkbF9mdW5jcHRyIF9QeUltcG9ydF9GaW5kU2hhcmVkRnVuY3B0cldpbmRvd3MoY29uc3QgY2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcGF0aG5hbWUsIEZJTEUgKmZwKQogewogICAgIGRsX2Z1bmNwdHIgcDsKICAgICBjaGFyIGZ1bmNuYW1lWzI1OF0sICppbXBvcnRfcHl0aG9uOwpAQCAtMTg4LDcgKzIwMiw3IEBACiAgICAgaWYgKHdwYXRobmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5T1Nfc25wcmludGYoZnVuY25hbWUsIHNpemVvZihmdW5jbmFtZSksICJQeUluaXRfJS4yMDBzIiwgc2hvcnRuYW1lKTsKKyAgICBQeU9TX3NucHJpbnRmKGZ1bmNuYW1lLCBzaXplb2YoZnVuY25hbWUpLCAiJS4yMHNfJS4yMDBzIiwgcHJlZml4LCBzaG9ydG5hbWUpOwogCiAgICAgewogICAgICAgICBISU5TVEFOQ0UgaERMTCA9IE5VTEw7CmRpZmYgLS1naXQgYS9QeXRob24vZXJyb3JzLmMgYi9QeXRob24vZXJyb3JzLmMKaW5kZXggYjBhZDlhYS4uZTE1MWNhYiAxMDA2NDQKLS0tIGEvUHl0aG9uL2Vycm9ycy5jCisrKyBiL1B5dGhvbi9lcnJvcnMuYwpAQCAtNzQsMTEgKzc0LDExIEBACiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8ICFQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICAgICAgLyogV2UgbXVzdCBub3JtYWxpemUgdGhlIHZhbHVlIHJpZ2h0IG5vdyAqLwogICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsICpmaXhlZF92YWx1ZTsKLSNpZmRlZiBQeV9ERUJVRwotICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KLSAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKworICAgICAgICAgICAgLyogSXNzdWUgIzIzNTcxOiBQeUV2YWxfQ2FsbE9iamVjdCgpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuCisgICAgICAgICAgICAgICBleGNlcHRpb24gc2V0ICovCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotI2VuZGlmCisKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlID09IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOwogICAgICAgICAgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayh2YWx1ZSkpIHsKQEAgLTE1MiwxMyArMTUyLDcgQEAKIFB5T2JqZWN0ICoKIFB5RXJyX09jY3VycmVkKHZvaWQpCiB7Ci0gICAgLyogSWYgdGhlcmUgaXMgbm8gdGhyZWFkIHN0YXRlLCBQeVRocmVhZFN0YXRlX0dFVCBjYWxscwotICAgICAgIFB5X0ZhdGFsRXJyb3IsIHdoaWNoIGNhbGxzIFB5RXJyX09jY3VycmVkLiAgVG8gYXZvaWQgdGhlCi0gICAgICAgcmVzdWx0aW5nIGluZmluaXRlIGxvb3AsIHdlIGlubGluZSBQeVRocmVhZFN0YXRlX0dFVCBoZXJlIGFuZAotICAgICAgIHRyZWF0IG5vIHRocmVhZCBhcyBubyBlcnJvci4gKi8KLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPQotICAgICAgICAoKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KSk7Ci0KKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfUHlUaHJlYWRTdGF0ZV9VbmNoZWNrZWRHZXQoKTsKICAgICByZXR1cm4gdHN0YXRlID09IE5VTEwgPyBOVUxMIDogdHN0YXRlLT5jdXJleGNfdHlwZTsKIH0KIApAQCAtMzE1LDE0ICszMDksMTEgQEAKICAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIGlmICgrK3RzdGF0ZS0+cmVjdXJzaW9uX2RlcHRoID4gUHlfR2V0UmVjdXJzaW9uTGltaXQoKSkgewogICAgICAgICAtLXRzdGF0ZS0+cmVjdXJzaW9uX2RlcHRoOwotICAgICAgICAvKiB0aHJvdyBhd2F5IHRoZSBvbGQgZXhjZXB0aW9uLi4uICovCi0gICAgICAgIFB5X0RFQ1JFRigqZXhjKTsKLSAgICAgICAgUHlfREVDUkVGKCp2YWwpOwotICAgICAgICAvKiAuLi4gYW5kIHVzZSB0aGUgcmVjdXJzaW9uIGVycm9yIGluc3RlYWQgKi8KLSAgICAgICAgKmV4YyA9IFB5RXhjX1J1bnRpbWVFcnJvcjsKLSAgICAgICAgKnZhbCA9IFB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdDsKLSAgICAgICAgUHlfSU5DUkVGKCpleGMpOwotICAgICAgICBQeV9JTkNSRUYoKnZhbCk7CisgICAgICAgIC8qIHRocm93IGF3YXkgdGhlIG9sZCBleGNlcHRpb24gYW5kIHVzZSB0aGUgcmVjdXJzaW9uIGVycm9yIGluc3RlYWQgKi8KKyAgICAgICAgUHlfSU5DUkVGKFB5RXhjX1JlY3Vyc2lvbkVycm9yKTsKKyAgICAgICAgUHlfU0VUUkVGKCpleGMsIFB5RXhjX1JlY3Vyc2lvbkVycm9yKTsKKyAgICAgICAgUHlfSU5DUkVGKFB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCk7CisgICAgICAgIFB5X1NFVFJFRigqdmFsLCBQeUV4Y19SZWN1cnNpb25FcnJvckluc3QpOwogICAgICAgICAvKiBqdXN0IGtlZXBpbmcgdGhlIG9sZCB0cmFjZWJhY2sgKi8KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTczNiw5ICs3MjcsOSBAQAogICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgbXNnKTsKIAogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJuYW1lIiwgbmFtZSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBkb25lOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJwYXRoIiwgcGF0aCkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBkb25lOwogCiAgICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsKFB5RXhjX0ltcG9ydEVycm9yLCBhcmdzLCBrd2FyZ3MpOwogICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CkBAIC03NDYsOSArNzM3LDkgQEAKICAgICAgICAgUHlfREVDUkVGKGVycm9yKTsKICAgICB9CiAKK2RvbmU6CiAgICAgUHlfREVDUkVGKGFyZ3MpOwogICAgIFB5X0RFQ1JFRihrd2FyZ3MpOwotCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTc3MywzNCArNzY0LDM4IEBACiAjZGVmaW5lIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpIF9QeUVycl9CYWRJbnRlcm5hbENhbGwoX19GSUxFX18sIF9fTElORV9fKQogCiAKK1B5T2JqZWN0ICoKK1B5RXJyX0Zvcm1hdFYoUHlPYmplY3QgKmV4Y2VwdGlvbiwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQoreworICAgIFB5T2JqZWN0KiBzdHJpbmc7CisKKyAgICAvKiBJc3N1ZSAjMjM1NzE6IFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuCisgICAgICAgZXhjZXB0aW9uIHNldCwgaXQgY2FsbHMgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGxpa2UgUHlPYmplY3RfUmVwcigpICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKworICAgIHN0cmluZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKKworICAgIFB5RXJyX1NldE9iamVjdChleGNlcHRpb24sIHN0cmluZyk7CisgICAgUHlfWERFQ1JFRihzdHJpbmcpOworICAgIHJldHVybiBOVUxMOworfQorCiAKIFB5T2JqZWN0ICoKIFB5RXJyX0Zvcm1hdChQeU9iamVjdCAqZXhjZXB0aW9uLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhcmdzOwotICAgIFB5T2JqZWN0KiBzdHJpbmc7Ci0KICNpZmRlZiBIQVZFX1NUREFSR19QUk9UT1RZUEVTCiAgICAgdmFfc3RhcnQodmFyZ3MsIGZvcm1hdCk7CiAjZWxzZQogICAgIHZhX3N0YXJ0KHZhcmdzKTsKICNlbmRpZgotCi0jaWZkZWYgUHlfREVCVUcKLSAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbiBlcnJvcgotICAgICAgIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KLSAgICBQeUVycl9DbGVhcigpOwotI2VuZGlmCi0KLSAgICBzdHJpbmcgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YXJncyk7Ci0gICAgUHlFcnJfU2V0T2JqZWN0KGV4Y2VwdGlvbiwgc3RyaW5nKTsKLSAgICBQeV9YREVDUkVGKHN0cmluZyk7CisgICAgUHlFcnJfRm9ybWF0VihleGNlcHRpb24sIGZvcm1hdCwgdmFyZ3MpOwogICAgIHZhX2VuZCh2YXJncyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKIAotCiBQeU9iamVjdCAqCiBQeUVycl9OZXdFeGNlcHRpb24oY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmJhc2UsIFB5T2JqZWN0ICpkaWN0KQogewpAQCAtOTA1LDggKzkwMCwxMiBAQAogICAgIGlmIChvYmopIHsKICAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiRXhjZXB0aW9uIGlnbm9yZWQgaW46ICIsIGYpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjxvYmplY3QgcmVwcigpIGZhaWxlZD4iLCBmKSA8IDApIHsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKSA8IDApCiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQpAQCAtOTUxLDggKzk1MCwxMiBAQAogICAgIGlmICh2ICYmIHYgIT0gUHlfTm9uZSkgewogICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGYpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdCh2LCBmLCBQeV9QUklOVF9SQVcpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdCh2LCBmLCBQeV9QUklOVF9SQVcpIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjxleGNlcHRpb24gc3RyKCkgZmFpbGVkPiIsIGYpIDwgMCkgeworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGYpIDwgMCkKICAgICAgICAgZ290byBkb25lOwpAQCAtMTEyMSw2ICsxMTI0LDEwIEBACiAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGluZW5vIDw9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZwID0gX1B5X2ZvcGVuX29iaihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOworICAgIGlmIChmcCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gZXJyX3Byb2dyYW10ZXh0KGZwLCBsaW5lbm8pOwogfQogCmRpZmYgLS1naXQgYS9QeXRob24vZmlsZXV0aWxzLmMgYi9QeXRob24vZmlsZXV0aWxzLmMKaW5kZXggMzE2ODljMC4uMjNlZWQ3MSAxMDA2NDQKLS0tIGEvUHl0aG9uL2ZpbGV1dGlscy5jCisrKyBiL1B5dGhvbi9maWxldXRpbHMuYwpAQCAtMyw3ICszLDkgQEAKICNpbmNsdWRlIDxsb2NhbGUuaD4KIAogI2lmZGVmIE1TX1dJTkRPV1MKKyMgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgaW5jbHVkZSA8d2luZG93cy5oPgorZXh0ZXJuIGludCB3aW5lcnJvcl90b19lcnJubyhpbnQpOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKQEAgLTI5LDcgKzMxLDggQEAKICAgICAwOiBvcGVuKCkgaWdub3JlcyBPX0NMT0VYRUMgZmxhZywgZXg6IExpbnV4IGtlcm5lbCBvbGRlciB0aGFuIDIuNi4yMwogICAgIDE6IG9wZW4oKSBzdXBwb3J0cyBPX0NMT0VYRUMgZmxhZywgY2xvc2Utb24tZXhlYyBpcyBzZXQKIAotICAgVGhlIGZsYWcgaXMgdXNlZCBieSBfUHlfb3BlbigpLCBpby5GaWxlSU8gYW5kIG9zLm9wZW4oKSAqLworICAgVGhlIGZsYWcgaXMgdXNlZCBieSBfUHlfb3BlbigpLCBfUHlfb3Blbl9ub3JhaXNlKCksIGlvLkZpbGVJTworICAgYW5kIG9zLm9wZW4oKS4gKi8KIGludCBfUHlfb3Blbl9jbG9leGVjX3dvcmtzID0gLTE7CiAjZW5kaWYKIApAQCAtMzksOSArNDIsMTMgQEAKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgVUlOVCBjcDsKICNlbmRpZgotICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSB8fCAhaXNhdHR5KGZkKSkgeworICAgIGludCB2YWxpZDsKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICisgICAgdmFsaWQgPSBfUHlWZXJpZnlfZmQoZmQpICYmIGlzYXR0eShmZCk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKKyAgICBpZiAoIXZhbGlkKQogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKLSAgICB9CisKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgaWYgKGZkID09IDApCiAgICAgICAgIGNwID0gR2V0Q29uc29sZUNQKCk7CkBAIC04MiwxMSArODksMTEgQEAKIAogICAgVmFsdWVzIG9mIGZvcmNlX2FzY2lpOgogCi0gICAgICAgMTogdGhlIHdvcmthcm91bmQgaXMgdXNlZDogX1B5X3djaGFyMmNoYXIoKSB1c2VzCi0gICAgICAgICAgZW5jb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZSgpIGFuZCBfUHlfY2hhcjJ3Y2hhcigpIHVzZXMKKyAgICAgICAxOiB0aGUgd29ya2Fyb3VuZCBpcyB1c2VkOiBQeV9FbmNvZGVMb2NhbGUoKSB1c2VzCisgICAgICAgICAgZW5jb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZSgpIGFuZCBQeV9EZWNvZGVMb2NhbGUoKSB1c2VzCiAgICAgICAgICAgZGVjb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZSgpCi0gICAgICAgMDogdGhlIHdvcmthcm91bmQgaXMgbm90IHVzZWQ6IF9QeV93Y2hhcjJjaGFyKCkgdXNlcyB3Y3N0b21icygpIGFuZAotICAgICAgICAgIF9QeV9jaGFyMndjaGFyKCkgdXNlcyBtYnN0b3djcygpCisgICAgICAgMDogdGhlIHdvcmthcm91bmQgaXMgbm90IHVzZWQ6IFB5X0VuY29kZUxvY2FsZSgpIHVzZXMgd2NzdG9tYnMoKSBhbmQKKyAgICAgICAgICBQeV9EZWNvZGVMb2NhbGUoKSB1c2VzIG1ic3Rvd2NzKCkKICAgICAgIC0xOiB1bmtub3duLCBuZWVkIHRvIGNhbGwgY2hlY2tfZm9yY2VfYXNjaWkoKSB0byBnZXQgdGhlIHZhbHVlCiAqLwogc3RhdGljIGludCBmb3JjZV9hc2NpaSA9IC0xOwpAQCAtMTY5LDcgKzE3Niw3IEBACiAjZW5kaWYKIAogZXJyb3I6Ci0gICAgLyogaWYgYW4gZXJyb3Igb2NjdXJlZCwgZm9yY2UgdGhlIEFTQ0lJIGVuY29kaW5nICovCisgICAgLyogaWYgYW4gZXJyb3Igb2NjdXJyZWQsIGZvcmNlIHRoZSBBU0NJSSBlbmNvZGluZyAqLwogICAgIHJldHVybiAxOwogfQogCkBAIC0yNDQsMjQgKzI1MSwyNiBAQAogCiAKIC8qIERlY29kZSBhIGJ5dGUgc3RyaW5nIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZyB3aXRoIHRoZQotICAgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIgKHVuZGVjb2RhYmxlIGJ5dGVzIGFyZSBkZWNvZGVkIGFzIGNoYXJhY3RlcnMKLSAgIGluIHJhbmdlIFUrREM4MC4uVStEQ0ZGKS4gSWYgYSBieXRlIHNlcXVlbmNlIGNhbiBiZSBkZWNvZGVkIGFzIGEgc3Vycm9nYXRlCisgICBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlcjogdW5kZWNvZGFibGUgYnl0ZXMgYXJlIGRlY29kZWQgYXMgY2hhcmFjdGVycworICAgaW4gcmFuZ2UgVStEQzgwLi5VK0RDRkYuIElmIGEgYnl0ZSBzZXF1ZW5jZSBjYW4gYmUgZGVjb2RlZCBhcyBhIHN1cnJvZ2F0ZQogICAgY2hhcmFjdGVyLCBlc2NhcGUgdGhlIGJ5dGVzIHVzaW5nIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlciBpbnN0ZWFkCiAgICBvZiBkZWNvZGluZyB0aGVtLgogCi0gICBVc2UgX1B5X3djaGFyMmNoYXIoKSB0byBlbmNvZGUgdGhlIGNoYXJhY3RlciBzdHJpbmcgYmFjayB0byBhIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcsIHVzZQorICAgUHlNZW1fUmF3RnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeS4gSWYgc2l6ZSBpcyBub3QgTlVMTCwgd3JpdGUgdGhlIG51bWJlciBvZgorICAgd2lkZSBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0ZXIgaW50byAqc2l6ZQogCi0gICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyAodXNlCi0gICBQeU1lbV9SYXdGcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSBhbmQgd3JpdGUgdGhlIG51bWJlciBvZiB3cml0dGVuIHdpZGUKLSAgIGNoYXJhY3RlcnMgZXhjbHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciBpbnRvICpzaXplIGlmIHNpemUgaXMgbm90IE5VTEwsIG9yCi0gICBOVUxMIG9uIGVycm9yIChkZWNvZGluZyBvciBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcikuIElmIHNpemUgaXMgbm90IE5VTEwsCi0gICAqc2l6ZSBpcyBzZXQgdG8gKHNpemVfdCktMSBvbiBtZW1vcnkgZXJyb3IgYW5kIChzaXplX3QpLTIgb24gZGVjb2RpbmcKLSAgIGVycm9yLgorICAgUmV0dXJuIE5VTEwgb24gZGVjb2RpbmcgZXJyb3Igb3IgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuIElmICpzaXplKiBpcyBub3QKKyAgIE5VTEwsICpzaXplIGlzIHNldCB0byAoc2l6ZV90KS0xIG9uIG1lbW9yeSBlcnJvciBvciBzZXQgdG8gKHNpemVfdCktMiBvbgorICAgZGVjb2RpbmcgZXJyb3IuCiAKLSAgIENvbnZlcnNpb24gZXJyb3JzIHNob3VsZCBuZXZlciBoYXBwZW4sIHVubGVzcyB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgQwotICAgbGlicmFyeS4gKi8KKyAgIERlY29kaW5nIGVycm9ycyBzaG91bGQgbmV2ZXIgaGFwcGVuLCB1bmxlc3MgdGhlcmUgaXMgYSBidWcgaW4gdGhlIEMKKyAgIGxpYnJhcnkuCisKKyAgIFVzZSB0aGUgUHlfRW5jb2RlTG9jYWxlKCkgZnVuY3Rpb24gdG8gZW5jb2RlIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIGJhY2sgdG8gYQorICAgYnl0ZSBzdHJpbmcuICovCiB3Y2hhcl90KgotX1B5X2NoYXIyd2NoYXIoY29uc3QgY2hhciogYXJnLCBzaXplX3QgKnNpemUpCitQeV9EZWNvZGVMb2NhbGUoY29uc3QgY2hhciogYXJnLCBzaXplX3QgKnNpemUpCiB7CiAjaWZkZWYgX19BUFBMRV9fCiAgICAgd2NoYXJfdCAqd3N0cjsKQEAgLTM5OSwxOSArNDA4LDIwIEBACiAjZW5kaWYgICAvKiBfX0FQUExFX18gKi8KIH0KIAotLyogRW5jb2RlIGEgKHdpZGUpIGNoYXJhY3RlciBzdHJpbmcgdG8gdGhlIGxvY2FsZSBlbmNvZGluZyB3aXRoIHRoZQotICAgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIgKGNoYXJhY3RlcnMgaW4gcmFuZ2UgVStEQzgwLi5VK0RDRkYgYXJlCi0gICBjb252ZXJ0ZWQgdG8gYnl0ZXMgMHg4MC4uMHhGRikuCisvKiBFbmNvZGUgYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgdG8gdGhlIGxvY2FsZSBlbmNvZGluZyB3aXRoIHRoZQorICAgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXI6IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZQorICAgVStEQzgwLi5VK0RDRkYgYXJlIGNvbnZlcnRlZCB0byBieXRlcyAweDgwLi4weEZGLgogCi0gICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZXZlcnNlIG9mIF9QeV9jaGFyMndjaGFyKCkuCisgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGJ5dGUgc3RyaW5nLCB1c2UgUHlNZW1fRnJlZSgpIHRvIGZyZWUKKyAgIHRoZSBtZW1vcnkuIFJldHVybiBOVUxMIG9uIGVuY29kaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLgogCi0gICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGJ5dGUgc3RyaW5nICh1c2UgUHlNZW1fRnJlZSgpIHRvIGZyZWUKLSAgIHRoZSBtZW1vcnkpLCBvciBOVUxMIG9uIGVuY29kaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLgorICAgSWYgZXJyb3JfcG9zIGlzIG5vdCBOVUxMLCAqZXJyb3JfcG9zIGlzIHNldCB0byB0aGUgaW5kZXggb2YgdGhlIGludmFsaWQKKyAgIGNoYXJhY3RlciBvbiBlbmNvZGluZyBlcnJvciwgb3Igc2V0IHRvIChzaXplX3QpLTEgb3RoZXJ3aXNlLgogCi0gICBJZiBlcnJvcl9wb3MgaXMgbm90IE5VTEw6ICplcnJvcl9wb3MgaXMgdGhlIGluZGV4IG9mIHRoZSBpbnZhbGlkIGNoYXJhY3RlcgotICAgb24gZW5jb2RpbmcgZXJyb3IsIG9yIChzaXplX3QpLTEgb3RoZXJ3aXNlLiAqLworICAgVXNlIHRoZSBQeV9EZWNvZGVMb2NhbGUoKSBmdW5jdGlvbiB0byBkZWNvZGUgdGhlIGJ5dGVzIHN0cmluZyBiYWNrIHRvIGEgd2lkZQorICAgY2hhcmFjdGVyIHN0cmluZy4gKi8KIGNoYXIqCi1fUHlfd2NoYXIyY2hhcihjb25zdCB3Y2hhcl90ICp0ZXh0LCBzaXplX3QgKmVycm9yX3BvcykKK1B5X0VuY29kZUxvY2FsZShjb25zdCB3Y2hhcl90ICp0ZXh0LCBzaXplX3QgKmVycm9yX3BvcykKIHsKICNpZmRlZiBfX0FQUExFX18KICAgICBQeV9zc2l6ZV90IGxlbjsKQEAgLTUxNCwzNCArNTI0LDE3OSBAQAogI2VuZGlmICAgLyogX19BUFBMRV9fICovCiB9CiAKLS8qIEluIHByaW5jaXBsZSwgdGhpcyBzaG91bGQgdXNlIEhBVkVfX1dTVEFULCBhbmQgX3dzdGF0Ci0gICBzaG91bGQgYmUgZGV0ZWN0ZWQgYnkgYXV0b2NvbmYuIEhvd2V2ZXIsIG5vIGN1cnJlbnQKLSAgIFBPU0lYIHN5c3RlbSBwcm92aWRlcyB0aGF0IGZ1bmN0aW9uLCBzbyB0ZXN0aW5nIGZvcgotICAgaXQgaXMgcG9pbnRsZXNzLgotICAgTm90IHN1cmUgd2hldGhlciB0aGUgTVNfV0lORE9XUyBndWFyZHMgYXJlIG5lY2Vzc2FyeToKLSAgIHBlcmhhcHMgZm9yIGN5Z3dpbi9taW5ndyBidWlsZHM/Ci0qLwotI2lmIGRlZmluZWQoSEFWRV9TVEFUKSAmJiAhZGVmaW5lZChNU19XSU5ET1dTKQogCi0vKiBHZXQgZmlsZSBzdGF0dXMuIEVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlIGVuY29kaW5nLiAqLworI2lmZGVmIE1TX1dJTkRPV1MKK3N0YXRpYyBfX2ludDY0IHNlY3NfYmV0d2Vlbl9lcG9jaHMgPSAxMTY0NDQ3MzYwMDsgLyogU2Vjb25kcyBiZXR3ZWVuIDEuMS4xNjAxIGFuZCAxLjEuMTk3MCAqLwogCi1pbnQKLV9QeV93c3RhdChjb25zdCB3Y2hhcl90KiBwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQorc3RhdGljIHZvaWQKK0ZJTEVfVElNRV90b190aW1lX3RfbnNlYyhGSUxFVElNRSAqaW5fcHRyLCB0aW1lX3QgKnRpbWVfb3V0LCBpbnQqIG5zZWNfb3V0KQogewotICAgIGludCBlcnI7Ci0gICAgY2hhciAqZm5hbWU7Ci0gICAgZm5hbWUgPSBfUHlfd2NoYXIyY2hhcihwYXRoLCBOVUxMKTsKLSAgICBpZiAoZm5hbWUgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOworICAgIC8qIFhYWCBlbmRpYW5uZXNzLiBTaG91bGRuJ3QgbWF0dGVyLCBhcyBhbGwgV2luZG93cyBpbXBsZW1lbnRhdGlvbnMgYXJlIGxpdHRsZS1lbmRpYW4gKi8KKyAgICAvKiBDYW5ub3Qgc2ltcGx5IGNhc3QgYW5kIGRlcmVmZXJlbmNlIGluX3B0ciwKKyAgICAgICBzaW5jZSBpdCBtaWdodCBub3QgYmUgYWxpZ25lZCBwcm9wZXJseSAqLworICAgIF9faW50NjQgaW47CisgICAgbWVtY3B5KCZpbiwgaW5fcHRyLCBzaXplb2YoaW4pKTsKKyAgICAqbnNlY19vdXQgPSAoaW50KShpbiAlIDEwMDAwMDAwKSAqIDEwMDsgLyogRklMRVRJTUUgaXMgaW4gdW5pdHMgb2YgMTAwIG5zZWMuICovCisgICAgKnRpbWVfb3V0ID0gUHlfU0FGRV9ET1dOQ0FTVCgoaW4gLyAxMDAwMDAwMCkgLSBzZWNzX2JldHdlZW5fZXBvY2hzLCBfX2ludDY0LCB0aW1lX3QpOworfQorCit2b2lkCitfUHlfdGltZV90X3RvX0ZJTEVfVElNRSh0aW1lX3QgdGltZV9pbiwgaW50IG5zZWNfaW4sIEZJTEVUSU1FICpvdXRfcHRyKQoreworICAgIC8qIFhYWCBlbmRpYW5uZXNzICovCisgICAgX19pbnQ2NCBvdXQ7CisgICAgb3V0ID0gdGltZV9pbiArIHNlY3NfYmV0d2Vlbl9lcG9jaHM7CisgICAgb3V0ID0gb3V0ICogMTAwMDAwMDAgKyBuc2VjX2luIC8gMTAwOworICAgIG1lbWNweShvdXRfcHRyLCAmb3V0LCBzaXplb2Yob3V0KSk7Cit9CisKKy8qIEJlbG93LCB3ZSAqa25vdyogdGhhdCB1Z28rciBpcyAwNDQ0ICovCisjaWYgX1NfSVJFQUQgIT0gMDQwMAorI2Vycm9yIFVuc3VwcG9ydGVkIEMgbGlicmFyeQorI2VuZGlmCitzdGF0aWMgaW50CithdHRyaWJ1dGVzX3RvX21vZGUoRFdPUkQgYXR0cikKK3sKKyAgICBpbnQgbSA9IDA7CisgICAgaWYgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisgICAgICAgIG0gfD0gX1NfSUZESVIgfCAwMTExOyAvKiBJRkVYRUMgZm9yIHVzZXIsZ3JvdXAsb3RoZXIgKi8KKyAgICBlbHNlCisgICAgICAgIG0gfD0gX1NfSUZSRUc7CisgICAgaWYgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkKKyAgICAgICAgbSB8PSAwNDQ0OworICAgIGVsc2UKKyAgICAgICAgbSB8PSAwNjY2OworICAgIHJldHVybiBtOworfQorCit2b2lkCitfUHlfYXR0cmlidXRlX2RhdGFfdG9fc3RhdChCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiAqaW5mbywgVUxPTkcgcmVwYXJzZV90YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0ICpyZXN1bHQpCit7CisgICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCpyZXN1bHQpKTsKKyAgICByZXN1bHQtPnN0X21vZGUgPSBhdHRyaWJ1dGVzX3RvX21vZGUoaW5mby0+ZHdGaWxlQXR0cmlidXRlcyk7CisgICAgcmVzdWx0LT5zdF9zaXplID0gKCgoX19pbnQ2NClpbmZvLT5uRmlsZVNpemVIaWdoKTw8MzIpICsgaW5mby0+bkZpbGVTaXplTG93OworICAgIHJlc3VsdC0+c3RfZGV2ID0gaW5mby0+ZHdWb2x1bWVTZXJpYWxOdW1iZXI7CisgICAgcmVzdWx0LT5zdF9yZGV2ID0gcmVzdWx0LT5zdF9kZXY7CisgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdENyZWF0aW9uVGltZSwgJnJlc3VsdC0+c3RfY3RpbWUsICZyZXN1bHQtPnN0X2N0aW1lX25zZWMpOworICAgIEZJTEVfVElNRV90b190aW1lX3RfbnNlYygmaW5mby0+ZnRMYXN0V3JpdGVUaW1lLCAmcmVzdWx0LT5zdF9tdGltZSwgJnJlc3VsdC0+c3RfbXRpbWVfbnNlYyk7CisgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdExhc3RBY2Nlc3NUaW1lLCAmcmVzdWx0LT5zdF9hdGltZSwgJnJlc3VsdC0+c3RfYXRpbWVfbnNlYyk7CisgICAgcmVzdWx0LT5zdF9ubGluayA9IGluZm8tPm5OdW1iZXJPZkxpbmtzOworICAgIHJlc3VsdC0+c3RfaW5vID0gKCgoX19pbnQ2NClpbmZvLT5uRmlsZUluZGV4SGlnaCk8PDMyKSArIGluZm8tPm5GaWxlSW5kZXhMb3c7CisgICAgaWYgKHJlcGFyc2VfdGFnID09IElPX1JFUEFSU0VfVEFHX1NZTUxJTkspIHsKKyAgICAgICAgLyogZmlyc3QgY2xlYXIgdGhlIFNfSUZNVCBiaXRzICovCisgICAgICAgIHJlc3VsdC0+c3RfbW9kZSBePSAocmVzdWx0LT5zdF9tb2RlICYgU19JRk1UKTsKKyAgICAgICAgLyogbm93IHNldCB0aGUgYml0cyB0aGF0IG1ha2UgdGhpcyBhIHN5bWxpbmsgKi8KKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IFNfSUZMTks7CiAgICAgfQotICAgIGVyciA9IHN0YXQoZm5hbWUsIGJ1Zik7Ci0gICAgUHlNZW1fRnJlZShmbmFtZSk7Ci0gICAgcmV0dXJuIGVycjsKKyAgICByZXN1bHQtPnN0X2ZpbGVfYXR0cmlidXRlcyA9IGluZm8tPmR3RmlsZUF0dHJpYnV0ZXM7CiB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfU1RBVAorLyogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZS4KKworICAgT24gUE9TSVgsIHVzZSBmc3RhdCgpLgorCisgICBPbiBXaW5kb3dzLCB1c2UgR2V0RmlsZVR5cGUoKSBhbmQgR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoKSB3aGljaCBzdXBwb3J0CisgICBmaWxlcyBsYXJnZXIgdGhhbiAyIEdCLiAgZnN0YXQoKSBtYXkgZmFpbCB3aXRoIEVPVkVSRkxPVyBvbiBmaWxlcyBsYXJnZXIKKyAgIHRoYW4gMiBHQiBiZWNhdXNlIHRoZSBmaWxlIHNpemUgdHlwZSBpcyBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlcjogc2VlIGlzc3VlCisgICAjMjMxNTIuCisKKyAgIE9uIFdpbmRvd3MsIHNldCB0aGUgbGFzdCBXaW5kb3dzIGVycm9yIGFuZCByZXR1cm4gbm9uemVybyBvbiBlcnJvci4gT24KKyAgIFBPU0lYLCBzZXQgZXJybm8gYW5kIHJldHVybiBub256ZXJvIG9uIGVycm9yLiBGaWxsIHN0YXR1cyBhbmQgcmV0dXJuIDAgb24KKyAgIHN1Y2Nlc3MuICovCitpbnQKK19QeV9mc3RhdF9ub3JhaXNlKGludCBmZCwgc3RydWN0IF9QeV9zdGF0X3N0cnVjdCAqc3RhdHVzKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBpbmZvOworICAgIEhBTkRMRSBoOworICAgIGludCB0eXBlOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICBoID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgZWxzZSB7CisgICAgICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyAgICAgICAgaCA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgICAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAorICAgIH0KKworICAgIGlmIChoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIC8qIGVycm5vIGlzIGFscmVhZHkgc2V0IGJ5IF9nZXRfb3NmaGFuZGxlLCBidXQgd2UgYWxzbyBzZXQKKyAgICAgICAgICAgdGhlIFdpbjMyIGVycm9yIGZvciBjYWxsZXJzIHdobyBleHBlY3QgdGhhdCAqLworICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfSU5WQUxJRF9IQU5ETEUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1lbXNldChzdGF0dXMsIDAsIHNpemVvZigqc3RhdHVzKSk7CisKKyAgICB0eXBlID0gR2V0RmlsZVR5cGUoaCk7CisgICAgaWYgKHR5cGUgPT0gRklMRV9UWVBFX1VOS05PV04pIHsKKyAgICAgICAgRFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yICE9IDApIHsKKyAgICAgICAgICAgIGVycm5vID0gd2luZXJyb3JfdG9fZXJybm8oZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8qIGVsc2U6IHZhbGlkIGJ1dCB1bmtub3duIGZpbGUgKi8KKyAgICB9CisKKyAgICBpZiAodHlwZSAhPSBGSUxFX1RZUEVfRElTSykgeworICAgICAgICBpZiAodHlwZSA9PSBGSUxFX1RZUEVfQ0hBUikKKyAgICAgICAgICAgIHN0YXR1cy0+c3RfbW9kZSA9IF9TX0lGQ0hSOworICAgICAgICBlbHNlIGlmICh0eXBlID09IEZJTEVfVFlQRV9QSVBFKQorICAgICAgICAgICAgc3RhdHVzLT5zdF9tb2RlID0gX1NfSUZJRk87CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoaCwgJmluZm8pKSB7CisgICAgICAgIC8qIFRoZSBXaW4zMiBlcnJvciBpcyBhbHJlYWR5IHNldCwgYnV0IHdlIGFsc28gc2V0IGVycm5vIGZvcgorICAgICAgICAgICBjYWxsZXJzIHdobyBleHBlY3QgaXQgKi8KKyAgICAgICAgZXJybm8gPSB3aW5lcnJvcl90b19lcnJubyhHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBfUHlfYXR0cmlidXRlX2RhdGFfdG9fc3RhdCgmaW5mbywgMCwgc3RhdHVzKTsKKyAgICAvKiBzcGVjaWZpYyB0byBmc3RhdCgpICovCisgICAgc3RhdHVzLT5zdF9pbm8gPSAoKChfX2ludDY0KWluZm8ubkZpbGVJbmRleEhpZ2gpPDwzMikgKyBpbmZvLm5GaWxlSW5kZXhMb3c7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIHJldHVybiBmc3RhdChmZCwgc3RhdHVzKTsKKyNlbmRpZgorfQorCisvKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlLgorCisgICBPbiBQT1NJWCwgdXNlIGZzdGF0KCkuCisKKyAgIE9uIFdpbmRvd3MsIHVzZSBHZXRGaWxlVHlwZSgpIGFuZCBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSgpIHdoaWNoIHN1cHBvcnQKKyAgIGZpbGVzIGxhcmdlciB0aGFuIDIgR0IuICBmc3RhdCgpIG1heSBmYWlsIHdpdGggRU9WRVJGTE9XIG9uIGZpbGVzIGxhcmdlcgorICAgdGhhbiAyIEdCIGJlY2F1c2UgdGhlIGZpbGUgc2l6ZSB0eXBlIGlzIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyOiBzZWUgaXNzdWUKKyAgICMyMzE1Mi4KKworICAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuIE9uIFdpbmRvd3MsIHNldCB0aGUgbGFzdCBXaW5kb3dzCisgICBlcnJvciBvbiBlcnJvci4gT24gUE9TSVgsIHNldCBlcnJubyBvbiBlcnJvci4gRmlsbCBzdGF0dXMgYW5kIHJldHVybiAwIG9uCisgICBzdWNjZXNzLgorCisgICBSZWxlYXNlIHRoZSBHSUwgdG8gY2FsbCBHZXRGaWxlVHlwZSgpIGFuZCBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSgpLCBvcgorICAgdG8gY2FsbCBmc3RhdCgpLiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgR0lMLiAqLworaW50CitfUHlfZnN0YXQoaW50IGZkLCBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0ICpzdGF0dXMpCit7CisgICAgaW50IHJlczsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXMgPSBfUHlfZnN0YXRfbm9yYWlzZShmZCwgc3RhdHVzKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHJlcyAhPSAwKSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyNlbHNlCisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQogCiAvKiBDYWxsIF93c3RhdCgpIG9uIFdpbmRvd3MsIG9yIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyBhbmQKICAgIGNhbGwgc3RhdCgpIG90aGVyd2lzZS4gT25seSBmaWxsIHN0X21vZGUgYXR0cmlidXRlIG9uIFdpbmRvd3MuCkBAIC01NzUsNyArNzMwLDYgQEAKICNlbmRpZgogfQogCi0jZW5kaWYKIAogc3RhdGljIGludAogZ2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IHJhaXNlKQpAQCAtNTkwLDcgKzc0NCw5IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICiAgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKICAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CiAgICAgICAgIGlmIChyYWlzZSkKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKQEAgLTY2NSw3ICs4MjEsOSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAogICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICiAgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogICAgICAgICBpZiAocmFpc2UpCiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CkBAIC02OTgsNyArODU2LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGVycm5vICE9IEVOT1RUWSkgeworICAgICAgICBpZiAoZXJybm8gIT0gRU5PVFRZICYmIGVycm5vICE9IEVBQ0NFUykgewogICAgICAgICAgICAgaWYgKHJhaXNlKQogICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTcwNyw3ICs4NjUsMTIgQEAKICAgICAgICAgICAgIC8qIElzc3VlICMyMjI1ODogSGVyZSwgRU5PVFRZIG1lYW5zICJJbmFwcHJvcHJpYXRlIGlvY3RsIGZvcgogICAgICAgICAgICAgICAgZGV2aWNlIi4gVGhlIGlvY3RsIGlzIGRlY2xhcmVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuCiAgICAgICAgICAgICAgICBSZW1lbWJlciB0aGF0IGlvY3RsKCkgZG9lc24ndCB3b3JrLiBJdCBpcyB0aGUgY2FzZSBvbgotICAgICAgICAgICAgICAgSWxsdW1vcy1iYXNlZCBPUyBmb3IgZXhhbXBsZS4gKi8KKyAgICAgICAgICAgICAgIElsbHVtb3MtYmFzZWQgT1MgZm9yIGV4YW1wbGUuCisKKyAgICAgICAgICAgICAgIElzc3VlICMyNzA1NzogV2hlbiBTRUxpbnV4IHBvbGljeSBkaXNhbGxvd3MgaW9jdGwgaXQgd2lsbCBmYWlsCisgICAgICAgICAgICAgICB3aXRoIEVBQ0NFUy4gV2hpbGUgRklPQ0xFWCBpcyBzYWZlIG9wZXJhdGlvbiBpdCBtYXkgYmUKKyAgICAgICAgICAgICAgIHVuYXZhaWxhYmxlIGJlY2F1c2UgaW9jdGwgd2FzIGRlbmllZCBhbHRvZ2V0aGVyLgorICAgICAgICAgICAgICAgVGhpcyBjYW4gYmUgdGhlIGNhc2Ugb24gQW5kcm9pZC4gKi8KICAgICAgICAgICAgIGlvY3RsX3dvcmtzID0gMDsKICAgICAgICAgfQogICAgICAgICAvKiBmYWxsYmFjayB0byBmY250bCgpIGlmIGlvY3RsKCkgZG9lcyBub3Qgd29yayAqLwpAQCAtNzY3LDQwICs5MzAsOTIgQEAKICAgICByZXR1cm4gc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSwgMSwgYXRvbWljX2ZsYWdfd29ya3MpOwogfQogCi0vKiBPcGVuIGEgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3MgKHdyYXBwZXIgdG8gb3BlbigpIGZ1bmN0aW9uKS4KLSAgIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZCBub24taW5oZXJpdGFibGUuICovCi1pbnQKLV9QeV9vcGVuKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MpCitzdGF0aWMgaW50CitfUHlfb3Blbl9pbXBsKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MsIGludCBnaWxfaGVsZCkKIHsKICAgICBpbnQgZmQ7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MgfCBPX05PSU5IRVJJVCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIGZkOwotI2Vsc2UKLQorICAgIGludCBhc3luY19lcnIgPSAwOworI2lmbmRlZiBNU19XSU5ET1dTCiAgICAgaW50ICphdG9taWNfZmxhZ193b3JrczsKLSNpZmRlZiBPX0NMT0VYRUMKKyNlbmRpZgorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGZsYWdzIHw9IE9fTk9JTkhFUklUOworI2VsaWYgZGVmaW5lZChPX0NMT0VYRUMpCiAgICAgYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKICAgICBmbGFncyB8PSBPX0NMT0VYRUM7CiAjZWxzZQogICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKICNlbmRpZgotICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MpOwotICAgIGlmIChmZCA8IDApCi0gICAgICAgIHJldHVybiBmZDsKIAotICAgIGlmIChzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICBpZiAoZ2lsX2hlbGQpIHsKKyAgICAgICAgZG8geworICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgZmQgPSBvcGVuKHBhdGhuYW1lLCBmbGFncyk7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICB9IHdoaWxlIChmZCA8IDAKKyAgICAgICAgICAgICAgICAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOworICAgICAgICBpZiAoYXN5bmNfZXJyKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfT1NFcnJvciwgcGF0aG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzKTsKKyAgICAgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIGlmIChzZXRfaW5oZXJpdGFibGUoZmQsIDAsIGdpbF9oZWxkLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKSB7CiAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSNlbmRpZiAgIC8qICFNU19XSU5ET1dTICovCisjZW5kaWYKKwogICAgIHJldHVybiBmZDsKIH0KIAorLyogT3BlbiBhIGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIGZsYWdzICh3cmFwcGVyIHRvIG9wZW4oKSBmdW5jdGlvbikuCisgICBSZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3Igb24gc3VjY2Vzcy4gUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24KKyAgIGVycm9yLgorCisgICBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLgorCisgICBXaGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIChvcGVuKCkgZmFpbHMgd2l0aCBFSU5UUiksIHJldHJ5IHRoZSBzeXNjYWxsLAorICAgZXhjZXB0IGlmIHRoZSBQeXRob24gc2lnbmFsIGhhbmRsZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworICAgUmVsZWFzZSB0aGUgR0lMIHRvIGNhbGwgb3BlbigpLiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgR0lMLiAqLworaW50CitfUHlfb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKQoreworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgLyogX1B5X29wZW4oKSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBHSUwgaGVsZC4gKi8KKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorICAgIHJldHVybiBfUHlfb3Blbl9pbXBsKHBhdGhuYW1lLCBmbGFncywgMSk7Cit9CisKKy8qIE9wZW4gYSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyAod3JhcHBlciB0byBvcGVuKCkgZnVuY3Rpb24pLgorICAgUmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3MuIFNldCBlcnJubyBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLgorCisgICBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLgorCisgICBJZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgZmFpbCB3aXRoIEVJTlRSLiAqLworaW50CitfUHlfb3Blbl9ub3JhaXNlKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MpCit7CisgICAgcmV0dXJuIF9QeV9vcGVuX2ltcGwocGF0aG5hbWUsIGZsYWdzLCAwKTsKK30KKwogLyogT3BlbiBhIGZpbGUuIFVzZSBfd2ZvcGVuKCkgb24gV2luZG93cywgZW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBsb2NhbGUKLSAgIGVuY29kaW5nIGFuZCB1c2UgZm9wZW4oKSBvdGhlcndpc2UuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZAotICAgbm9uLWluaGVyaXRhYmxlLiAqLworICAgZW5jb2RpbmcgYW5kIHVzZSBmb3BlbigpIG90aGVyd2lzZS4KKworICAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4KKworICAgSWYgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIGZhaWwgd2l0aCBFSU5UUi4gKi8KIEZJTEUgKgogX1B5X3dmb3Blbihjb25zdCB3Y2hhcl90ICpwYXRoLCBjb25zdCB3Y2hhcl90ICptb2RlKQogewpAQCAtODE0LDcgKzEwMjksNyBAQAogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGNwYXRoID0gX1B5X3djaGFyMmNoYXIocGF0aCwgTlVMTCk7CisgICAgY3BhdGggPSBQeV9FbmNvZGVMb2NhbGUocGF0aCwgTlVMTCk7CiAgICAgaWYgKGNwYXRoID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGYgPSBmb3BlbihjcGF0aCwgY21vZGUpOwpAQCAtODMxLDcgKzEwNDYsMTEgQEAKICAgICByZXR1cm4gZjsKIH0KIAotLyogV3JhcHBlciB0byBmb3BlbigpLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLiAqLworLyogV3JhcHBlciB0byBmb3BlbigpLgorCisgICBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLgorCisgICBJZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgZmFpbCB3aXRoIEVJTlRSLiAqLwogRklMRSoKIF9QeV9mb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqbW9kZSkKIHsKQEAgLTg0NiwyMCArMTA2NSwzMiBAQAogfQogCiAvKiBPcGVuIGEgZmlsZS4gQ2FsbCBfd2ZvcGVuKCkgb24gV2luZG93cywgb3IgZW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBmaWxlc3lzdGVtCi0gICBlbmNvZGluZyBhbmQgY2FsbCBmb3BlbigpIG90aGVyd2lzZS4gVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkCi0gICBub24taW5oZXJpdGFibGUuCisgICBlbmNvZGluZyBhbmQgY2FsbCBmb3BlbigpIG90aGVyd2lzZS4KIAotICAgUmV0dXJuIHRoZSBuZXcgZmlsZSBvYmplY3Qgb24gc3VjY2Vzcywgb3IgTlVMTCBpZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbiBvcgotICAgKGlmIFB5RXJyX09jY3VycmVkKCkpIG9uIHVuaWNvZGUgZXJyb3IuICovCisgICBSZXR1cm4gdGhlIG5ldyBmaWxlIG9iamVjdCBvbiBzdWNjZXNzLiBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiBOVUxMCisgICBvbiBlcnJvci4KKworICAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4KKworICAgV2hlbiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAob3BlbigpIGZhaWxzIHdpdGggRUlOVFIpLCByZXRyeSB0aGUgc3lzY2FsbCwKKyAgIGV4Y2VwdCBpZiB0aGUgUHl0aG9uIHNpZ25hbCBoYW5kbGVyIHJhaXNlcyBhbiBleGNlcHRpb24uCisKKyAgIFJlbGVhc2UgdGhlIEdJTCB0byBjYWxsIF93Zm9wZW4oKSBvciBmb3BlbigpLiBUaGUgY2FsbGVyIG11c3QgaG9sZAorICAgdGhlIEdJTC4gKi8KIEZJTEUqCiBfUHlfZm9wZW5fb2JqKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogewogICAgIEZJTEUgKmY7CisgICAgaW50IGFzeW5jX2VyciA9IDA7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHdjaGFyX3QgKndwYXRoOwogICAgIHdjaGFyX3Qgd21vZGVbMTBdOwogICAgIGludCB1c2l6ZTsKIAorI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHBhdGgpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAic3RyIGZpbGUgcGF0aCBleHBlY3RlZCB1bmRlciBXaW5kb3dzLCBnb3QgJVIiLApAQCAtODcxLDI2ICsxMTAyLDI0OSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHVzaXplID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIDAsIG1vZGUsIC0xLCB3bW9kZSwgc2l6ZW9mKHdtb2RlKSk7Ci0gICAgaWYgKHVzaXplID09IDApCisgICAgaWYgKHVzaXplID09IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIGYgPSBfd2ZvcGVuKHdwYXRoLCB3bW9kZSk7CisgICAgZG8geworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGYgPSBfd2ZvcGVuKHdwYXRoLCB3bW9kZSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAoZiA9PSBOVUxMCisgICAgICAgICAgICAgJiYgZXJybm8gPT0gRUlOVFIgJiYgIShhc3luY19lcnIgPSBQeUVycl9DaGVja1NpZ25hbHMoKSkpOwogI2Vsc2UKICAgICBQeU9iamVjdCAqYnl0ZXM7CisgICAgY2hhciAqcGF0aF9ieXRlczsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKwogICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKHBhdGgsICZieXRlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGYgPSBmb3BlbihQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksIG1vZGUpOworICAgIHBhdGhfYnl0ZXMgPSBQeUJ5dGVzX0FTX1NUUklORyhieXRlcyk7CisKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZiA9IGZvcGVuKHBhdGhfYnl0ZXMsIG1vZGUpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gd2hpbGUgKGYgPT0gTlVMTAorICAgICAgICAgICAgICYmIGVycm5vID09IEVJTlRSICYmICEoYXN5bmNfZXJyID0gUHlFcnJfQ2hlY2tTaWduYWxzKCkpKTsKKwogICAgIFB5X0RFQ1JFRihieXRlcyk7CiAjZW5kaWYKLSAgICBpZiAoZiA9PSBOVUxMKQorICAgIGlmIChhc3luY19lcnIpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworCisgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChzZXRfaW5oZXJpdGFibGUoZmlsZW5vKGYpLCAwLCAxLCBOVUxMKSA8IDApIHsKICAgICAgICAgZmNsb3NlKGYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIGY7CiB9CiAKKy8qIFJlYWQgY291bnQgYnl0ZXMgZnJvbSBmZCBpbnRvIGJ1Zi4KKworICAgT24gc3VjY2VzcywgcmV0dXJuIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcywgaXQgY2FuIGJlIGxvd2VyIHRoYW4gY291bnQuCisgICBJZiB0aGUgY3VycmVudCBmaWxlIG9mZnNldCBpcyBhdCBvciBwYXN0IHRoZSBlbmQgb2YgZmlsZSwgbm8gYnl0ZXMgYXJlIHJlYWQsCisgICBhbmQgcmVhZCgpIHJldHVybnMgemVyby4KKworICAgT24gZXJyb3IsIHJhaXNlIGFuIGV4Y2VwdGlvbiwgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEuCisKKyAgIFdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgKHJlYWQoKSBmYWlscyB3aXRoIEVJTlRSKSwgcmV0cnkgdGhlIHN5c2NhbGwuCisgICBJZiB0aGUgUHl0aG9uIHNpZ25hbCBoYW5kbGVyIHJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBmdW5jdGlvbiByZXR1cm5zIC0xCisgICAodGhlIHN5c2NhbGwgaXMgbm90IHJldHJpZWQpLgorCisgICBSZWxlYXNlIHRoZSBHSUwgdG8gY2FsbCByZWFkKCkuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBHSUwuICovCitQeV9zc2l6ZV90CitfUHlfcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworICAgIFB5X3NzaXplX3QgbjsKKyAgICBpbnQgZXJyOworICAgIGludCBhc3luY19lcnIgPSAwOworCisgICAgLyogX1B5X3JlYWQoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LCBvdGhlcndpc2UgdGhlCisgICAgICogY2FsbGVyIG1heSB0aGluayB0aGF0IHJlYWQoKSB3YXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgYW5kIHRoZSBzaWduYWwKKyAgICAgKiBoYW5kbGVyIHJhaXNlZCBhbiBleGNlcHRpb24uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICAvKiBzYXZlL3Jlc3RvcmUgZXJybm8gYmVjYXVzZSBQeUVycl9TZXRGcm9tRXJybm8oKSBjYW4gbW9kaWZ5IGl0ICovCisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIGVycm5vID0gZXJyOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChjb3VudCA+IElOVF9NQVgpIHsKKyAgICAgICAgLyogT24gV2luZG93cywgdGhlIGNvdW50IHBhcmFtZXRlciBvZiByZWFkKCkgaXMgYW4gaW50ICovCisgICAgICAgIGNvdW50ID0gSU5UX01BWDsKKyAgICB9CisjZWxzZQorICAgIGlmIChjb3VudCA+IFBZX1NTSVpFX1RfTUFYKSB7CisgICAgICAgIC8qIGlmIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiBQWV9TU0laRV9UX01BWCwKKyAgICAgICAgICogcmVhZCgpIHJlc3VsdCBpcyB1bmRlZmluZWQgKi8KKyAgICAgICAgY291bnQgPSBQWV9TU0laRV9UX01BWDsKKyAgICB9CisjZW5kaWYKKworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZXJybm8gPSAwOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgbiA9IHJlYWQoZmQsIGJ1ZiwgKGludCljb3VudCk7CisjZWxzZQorICAgICAgICBuID0gcmVhZChmZCwgYnVmLCBjb3VudCk7CisjZW5kaWYKKyAgICAgICAgLyogc2F2ZS9yZXN0b3JlIGVycm5vIGJlY2F1c2UgUHlFcnJfQ2hlY2tTaWduYWxzKCkKKyAgICAgICAgICogYW5kIFB5RXJyX1NldEZyb21FcnJubygpIGNhbiBtb2RpZnkgaXQgKi8KKyAgICAgICAgZXJyID0gZXJybm87CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSB3aGlsZSAobiA8IDAgJiYgZXJyID09IEVJTlRSICYmCisgICAgICAgICAgICAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKKworICAgIGlmIChhc3luY19lcnIpIHsKKyAgICAgICAgLyogcmVhZCgpIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZmFpbGVkIHdpdGggRUlOVFIpCisgICAgICAgICAqIGFuZCB0aGUgUHl0aG9uIHNpZ25hbCBoYW5kbGVyIHJhaXNlZCBhbiBleGNlcHRpb24gKi8KKyAgICAgICAgZXJybm8gPSBlcnI7CisgICAgICAgIGFzc2VydChlcnJubyA9PSBFSU5UUiAmJiBQeUVycl9PY2N1cnJlZCgpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAobiA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICBlcnJubyA9IGVycjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgUHlfc3NpemVfdAorX1B5X3dyaXRlX2ltcGwoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgaW50IGdpbF9oZWxkKQoreworICAgIFB5X3NzaXplX3QgbjsKKyAgICBpbnQgZXJyOworICAgIGludCBhc3luY19lcnIgPSAwOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIGlmIChnaWxfaGVsZCkgeworICAgICAgICAgICAgLyogc2F2ZS9yZXN0b3JlIGVycm5vIGJlY2F1c2UgUHlFcnJfU2V0RnJvbUVycm5vKCkgY2FuIG1vZGlmeSBpdCAqLworICAgICAgICAgICAgZXJyID0gZXJybm87CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgICAgICBlcnJubyA9IGVycjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoY291bnQgPiAzMjc2NyAmJiBpc2F0dHkoZmQpKSB7CisgICAgICAgIC8qIElzc3VlICMxMTM5NTogdGhlIFdpbmRvd3MgY29uc29sZSByZXR1cm5zIGFuIGVycm9yICgxMjogbm90CisgICAgICAgICAgIGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZiBzdGRvdXQgbW9kZSBpcworICAgICAgICAgICBiaW5hcnkgYW5kIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywKKyAgICAgICAgICAgZGVwZW5kaW5nIG9uIGhlYXAgdXNhZ2UpLiAqLworICAgICAgICBjb3VudCA9IDMyNzY3OworICAgIH0KKyAgICBlbHNlIGlmIChjb3VudCA+IElOVF9NQVgpCisgICAgICAgIGNvdW50ID0gSU5UX01BWDsKKyNlbHNlCisgICAgaWYgKGNvdW50ID4gUFlfU1NJWkVfVF9NQVgpIHsKKyAgICAgICAgLyogd3JpdGUoKSBzaG91bGQgdHJ1bmNhdGUgY291bnQgdG8gUFlfU1NJWkVfVF9NQVgsIGJ1dCBpdCdzIHNhZmVyCisgICAgICAgICAqIHRvIGRvIGl0IG91cnNlbGYgdG8gaGF2ZSBhIHBvcnRhYmxlIGJlaGF2aW91ci4gKi8KKyAgICAgICAgY291bnQgPSBQWV9TU0laRV9UX01BWDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChnaWxfaGVsZCkgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICBlcnJubyA9IDA7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICAgICAgbiA9IHdyaXRlKGZkLCBidWYsIChpbnQpY291bnQpOworI2Vsc2UKKyAgICAgICAgICAgIG4gPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgIC8qIHNhdmUvcmVzdG9yZSBlcnJubyBiZWNhdXNlIFB5RXJyX0NoZWNrU2lnbmFscygpCisgICAgICAgICAgICAgKiBhbmQgUHlFcnJfU2V0RnJvbUVycm5vKCkgY2FuIG1vZGlmeSBpdCAqLworICAgICAgICAgICAgZXJyID0gZXJybm87CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICB9IHdoaWxlIChuIDwgMCAmJiBlcnIgPT0gRUlOVFIgJiYKKyAgICAgICAgICAgICAgICAhKGFzeW5jX2VyciA9IFB5RXJyX0NoZWNrU2lnbmFscygpKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBlcnJubyA9IDA7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICAgICAgbiA9IHdyaXRlKGZkLCBidWYsIChpbnQpY291bnQpOworI2Vsc2UKKyAgICAgICAgICAgIG4gPSB3cml0ZShmZCwgYnVmLCBjb3VudCk7CisjZW5kaWYKKyAgICAgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICB9IHdoaWxlIChuIDwgMCAmJiBlcnIgPT0gRUlOVFIpOworICAgIH0KKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAorCisgICAgaWYgKGFzeW5jX2VycikgeworICAgICAgICAvKiB3cml0ZSgpIHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZmFpbGVkIHdpdGggRUlOVFIpCisgICAgICAgICAgIGFuZCB0aGUgUHl0aG9uIHNpZ25hbCBoYW5kbGVyIHJhaXNlZCBhbiBleGNlcHRpb24gKGlmIGdpbF9oZWxkIGlzCisgICAgICAgICAgIG5vbnplcm8pLiAqLworICAgICAgICBlcnJubyA9IGVycjsKKyAgICAgICAgYXNzZXJ0KGVycm5vID09IEVJTlRSICYmICghZ2lsX2hlbGQgfHwgUHlFcnJfT2NjdXJyZWQoKSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChuIDwgMCkgeworICAgICAgICBpZiAoZ2lsX2hlbGQpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIGVycm5vID0gZXJyOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIG47Cit9CisKKy8qIFdyaXRlIGNvdW50IGJ5dGVzIG9mIGJ1ZiBpbnRvIGZkLgorCisgICBPbiBzdWNjZXNzLCByZXR1cm4gdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLCBpdCBjYW4gYmUgbG93ZXIgdGhhbiBjb3VudAorICAgaW5jbHVkaW5nIDAuIE9uIGVycm9yLCByYWlzZSBhbiBleGNlcHRpb24sIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xLgorCisgICBXaGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsICh3cml0ZSgpIGZhaWxzIHdpdGggRUlOVFIpLCByZXRyeSB0aGUgc3lzY2FsbC4KKyAgIElmIHRoZSBQeXRob24gc2lnbmFsIGhhbmRsZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgLTEKKyAgICh0aGUgc3lzY2FsbCBpcyBub3QgcmV0cmllZCkuCisKKyAgIFJlbGVhc2UgdGhlIEdJTCB0byBjYWxsIHdyaXRlKCkuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBHSUwuICovCitQeV9zc2l6ZV90CitfUHlfd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKyAgICAvKiBfUHlfd3JpdGUoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LCBvdGhlcndpc2UgdGhlCisgICAgICogY2FsbGVyIG1heSB0aGluayB0aGF0IHdyaXRlKCkgd2FzIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIGFuZCB0aGUgc2lnbmFsCisgICAgICogaGFuZGxlciByYWlzZWQgYW4gZXhjZXB0aW9uLiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisKKyAgICByZXR1cm4gX1B5X3dyaXRlX2ltcGwoZmQsIGJ1ZiwgY291bnQsIDEpOworfQorCisvKiBXcml0ZSBjb3VudCBieXRlcyBvZiBidWYgaW50byBmZC4KKyAqCisgKiBPbiBzdWNjZXNzLCByZXR1cm4gdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLCBpdCBjYW4gYmUgbG93ZXIgdGhhbiBjb3VudAorICogaW5jbHVkaW5nIDAuIE9uIGVycm9yLCBzZXQgZXJybm8gYW5kIHJldHVybiAtMS4KKyAqCisgKiBXaGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsICh3cml0ZSgpIGZhaWxzIHdpdGggRUlOVFIpLCByZXRyeSB0aGUgc3lzY2FsbAorICogd2l0aG91dCBjYWxsaW5nIHRoZSBQeXRob24gc2lnbmFsIGhhbmRsZXIuICovCitQeV9zc2l6ZV90CitfUHlfd3JpdGVfbm9yYWlzZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworICAgIHJldHVybiBfUHlfd3JpdGVfaW1wbChmZCwgYnVmLCBjb3VudCwgMCk7Cit9CisKICNpZmRlZiBIQVZFX1JFQURMSU5LCiAKIC8qIFJlYWQgdmFsdWUgb2Ygc3ltYm9saWMgbGluay4gRW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBsb2NhbGUgZW5jb2RpbmcsIGRlY29kZQpAQCAtOTA1LDcgKzEzNTksNyBAQAogICAgIGludCByZXM7CiAgICAgc2l6ZV90IHIxOwogCi0gICAgY3BhdGggPSBfUHlfd2NoYXIyY2hhcihwYXRoLCBOVUxMKTsKKyAgICBjcGF0aCA9IFB5X0VuY29kZUxvY2FsZShwYXRoLCBOVUxMKTsKICAgICBpZiAoY3BhdGggPT0gTlVMTCkgewogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtOTE5LDcgKzEzNzMsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGNidWZbcmVzXSA9ICdcMCc7IC8qIGJ1ZiB3aWxsIGJlIG51bGwgdGVybWluYXRlZCAqLwotICAgIHdidWYgPSBfUHlfY2hhcjJ3Y2hhcihjYnVmLCAmcjEpOworICAgIHdidWYgPSBQeV9EZWNvZGVMb2NhbGUoY2J1ZiwgJnIxKTsKICAgICBpZiAod2J1ZiA9PSBOVUxMKSB7CiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gLTE7CkBAIC05NTAsNyArMTQwNCw3IEBACiAgICAgd2NoYXJfdCAqd3Jlc29sdmVkX3BhdGg7CiAgICAgY2hhciAqcmVzOwogICAgIHNpemVfdCByOwotICAgIGNwYXRoID0gX1B5X3djaGFyMmNoYXIocGF0aCwgTlVMTCk7CisgICAgY3BhdGggPSBQeV9FbmNvZGVMb2NhbGUocGF0aCwgTlVMTCk7CiAgICAgaWYgKGNwYXRoID09IE5VTEwpIHsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTYwLDcgKzE0MTQsNyBAQAogICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICB3cmVzb2x2ZWRfcGF0aCA9IF9QeV9jaGFyMndjaGFyKGNyZXNvbHZlZF9wYXRoLCAmcik7CisgICAgd3Jlc29sdmVkX3BhdGggPSBQeV9EZWNvZGVMb2NhbGUoY3Jlc29sdmVkX3BhdGgsICZyKTsKICAgICBpZiAod3Jlc29sdmVkX3BhdGggPT0gTlVMTCkgewogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05OTMsNyArMTQ0Nyw3IEBACiAKICAgICBpZiAoZ2V0Y3dkKGZuYW1lLCBQeV9BUlJBWV9MRU5HVEgoZm5hbWUpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB3bmFtZSA9IF9QeV9jaGFyMndjaGFyKGZuYW1lLCAmbGVuKTsKKyAgICB3bmFtZSA9IFB5X0RlY29kZUxvY2FsZShmbmFtZSwgJmxlbik7CiAgICAgaWYgKHduYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplIDw9IGxlbikgewpAQCAtMTAyNSw3ICsxNDc5LDkgQEAKICAgICB9CiAKICNpZmRlZiBNU19XSU5ET1dTCisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAogICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICiAgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEwMzUsNyArMTQ5MSw5IEBACiAgICAgZnR5cGUgPSBHZXRGaWxlVHlwZShoYW5kbGUpOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICAgICBmZCA9IGR1cChmZCk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChmZCA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwpAQCAtMTA0NSwxMyArMTUwMywxNyBAQAogICAgIC8qIENoYXJhY3RlciBmaWxlcyBsaWtlIGNvbnNvbGUgY2Fubm90IGJlIG1ha2Ugbm9uLWluaGVyaXRhYmxlICovCiAgICAgaWYgKGZ0eXBlICE9IEZJTEVfVFlQRV9DSEFSKSB7CiAgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CiAjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUEZEX0NMT0VYRUMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICAgICBmZCA9IGZjbnRsKGZkLCBGX0RVUEZEX0NMT0VYRUMsIDApOworICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoZmQgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKQEAgLTEwNjAsNyArMTUyMiw5IEBACiAKICNlbHNlCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICAgICBmZCA9IGR1cChmZCk7CisgICAgX1B5X0VORF9TVVBQUkVTU19JUEgKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChmZCA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwpAQCAtMTA2OCwxMCArMTUzMiwxNTIgQEAKICAgICB9CiAKICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIF9QeV9CRUdJTl9TVVBQUkVTU19JUEgKICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIGZkOwogfQogCisjaWZuZGVmIE1TX1dJTkRPV1MKKy8qIEdldCB0aGUgYmxvY2tpbmcgbW9kZSBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yLgorICAgUmV0dXJuIDAgaWYgdGhlIE9fTk9OQkxPQ0sgZmxhZyBpcyBzZXQsIDEgaWYgdGhlIGZsYWcgaXMgY2xlYXJlZCwKKyAgIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworaW50CitfUHlfZ2V0X2Jsb2NraW5nKGludCBmZCkKK3sKKyAgICBpbnQgZmxhZ3M7CisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkwsIDApOworICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICisgICAgaWYgKGZsYWdzIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gIShmbGFncyAmIE9fTk9OQkxPQ0spOworfQorCisvKiBTZXQgdGhlIGJsb2NraW5nIG1vZGUgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisKKyAgIFNldCB0aGUgT19OT05CTE9DSyBmbGFnIGlmIGJsb2NraW5nIGlzIEZhbHNlLCBjbGVhciB0aGUgT19OT05CTE9DSyBmbGFnCisgICBvdGhlcndpc2UuCisKKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworaW50CitfUHlfc2V0X2Jsb2NraW5nKGludCBmZCwgaW50IGJsb2NraW5nKQoreworI2lmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9OQklPKQorICAgIGludCBhcmcgPSAhYmxvY2tpbmc7CisgICAgaWYgKGlvY3RsKGZkLCBGSU9OQklPLCAmYXJnKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisjZWxzZQorICAgIGludCBmbGFncywgcmVzOworCisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkwsIDApOworICAgIGlmIChmbGFncyA+PSAwKSB7CisgICAgICAgIGlmIChibG9ja2luZykKKyAgICAgICAgICAgIGZsYWdzID0gZmxhZ3MgJiAofk9fTk9OQkxPQ0spOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmbGFncyA9IGZsYWdzIHwgT19OT05CTE9DSzsKKworICAgICAgICByZXMgPSBmY250bChmZCwgRl9TRVRGTCwgZmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcyA9IC0xOworICAgIH0KKyAgICBfUHlfRU5EX1NVUFBSRVNTX0lQSAorCisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKKworZXJyb3I6CisgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgIHJldHVybiAtMTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBfTVNDX1ZFUiA+PSAxNDAwICYmIF9NU0NfVkVSIDwgMTkwMAorLyogTGVnYWN5IGltcGxlbWVudGF0aW9uIG9mIF9QeVZlcmlmeV9mZCB3aGlsZSB0cmFuc2l0aW9uaW5nIHRvCisgKiBNU1ZDIDE0LjAuIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4gKGlzc3VlMjM1MjQpCisgKi8KKworLyogTWljcm9zb2Z0IENSVCBpbiBWUzIwMDUgYW5kIGhpZ2hlciB3aWxsIHZlcmlmeSB0aGF0IGEgZmlsZWhhbmRsZSBpcworICogdmFsaWQgYW5kIHJhaXNlIGFuIGFzc2VydGlvbiBpZiBpdCBpc24ndC4KKyAqIE5vcm1hbGx5LCBhbiBpbnZhbGlkIGZkIGlzIGxpa2VseSB0byBiZSBhIEMgcHJvZ3JhbSBlcnJvciBhbmQgdGhlcmVmb3JlCisgKiBhbiBhc3NlcnRpb24gY2FuIGJlIHVzZWZ1bCwgYnV0IGl0IGRvZXMgY29udHJhZGljdCB0aGUgUE9TSVggc3RhbmRhcmQKKyAqIHdoaWNoIGZvciB3cml0ZSgyKSBzdGF0ZXM6CisgKiAgICAiT3RoZXJ3aXNlLCAtMSBzaGFsbCBiZSByZXR1cm5lZCBhbmQgZXJybm8gc2V0IHRvIGluZGljYXRlIHRoZSBlcnJvci4iCisgKiAgICAiW0VCQURGXSBUaGUgZmlsZGVzIGFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIGZpbGUgZGVzY3JpcHRvciBvcGVuIGZvcgorICogICAgIHdyaXRpbmcuIgorICogRnVydGhlcm1vcmUsIHB5dGhvbiBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW55IG9sZCBpbnRlZ2VyCisgKiBhcyBhIGZkIGFuZCBzaG91bGQgbWVyZWx5IHJhaXNlIGEgcHl0aG9uIGV4Y2VwdGlvbiBvbiBlcnJvci4KKyAqIFRoZSBNaWNyb3NvZnQgQ1JUIGRvZXNuJ3QgcHJvdmlkZSBhbiBvZmZpY2lhbCB3YXkgdG8gY2hlY2sgZm9yIHRoZQorICogdmFsaWRpdHkgb2YgYSBmaWxlIGRlc2NyaXB0b3IsIGJ1dCB3ZSBjYW4gZW11bGF0ZSBpdHMgaW50ZXJuYWwgYmVoYXZpb3VyCisgKiBieSB1c2luZyB0aGUgZXhwb3J0ZWQgX19waW5mbyBkYXRhIG1lbWJlciBhbmQga25vd2xlZGdlIG9mIHRoZQorICogaW50ZXJuYWwgc3RydWN0dXJlcyBpbnZvbHZlZC4KKyAqIFRoZSBzdHJ1Y3R1cmVzIGJlbG93IG11c3QgYmUgdXBkYXRlZCBmb3IgZWFjaCB2ZXJzaW9uIG9mIHZpc3VhbCBzdHVkaW8KKyAqIGFjY29yZGluZyB0byB0aGUgZmlsZSBpbnRlcm5hbC5oIGluIHRoZSBDUlQgc291cmNlLCB1bnRpbCBNUyBjb21lcworICogdXAgd2l0aCBhIGxlc3MgaGFja3kgd2F5IHRvIGRvIHRoaXMuCisgKiAoYWxsIG9mIHRoaXMgaXMgdG8gYXZvaWQgZ2xvYmFsbHkgbW9kaWZ5aW5nIHRoZSBDUlQgYmVoYXZpb3VyIHVzaW5nCisgKiBfc2V0X2ludmFsaWRfcGFyYW1ldGVyX2hhbmRsZXIoKSBhbmQgX0NydFNldFJlcG9ydE1vZGUoKSkKKyAqLworLyogVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdHJ1Y3R1cmUgaXMgZGV0ZXJtaW5lZCBhdCBydW50aW1lLgorICogT25seSB0aGUgZmlyc3QgaXRlbXMgbXVzdCBiZSBwcmVzZW50LgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50cHRyX3Qgb3NmaG5kOworICAgIGNoYXIgb3NmaWxlOworfSBteV9pb2luZm87CisKK2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciAqIF9fcGlvaW5mb1tdOworI2RlZmluZSBJT0lORk9fTDJFIDUKKyNkZWZpbmUgSU9JTkZPX0FSUkFZUyA2NAorI2RlZmluZSBJT0lORk9fQVJSQVlfRUxUUyAgICgxIDw8IElPSU5GT19MMkUpCisjZGVmaW5lIF9OSEFORExFXyAgICAgICAgICAgKElPSU5GT19BUlJBWVMgKiBJT0lORk9fQVJSQVlfRUxUUykKKyNkZWZpbmUgRk9QRU4gMHgwMQorI2RlZmluZSBfTk9fQ09OU09MRV9GSUxFTk8gKGludHB0cl90KS0yCisKKy8qIFRoaXMgZnVuY3Rpb24gZW11bGF0ZXMgd2hhdCB0aGUgd2luZG93cyBDUlQgZG9lcyB0byB2YWxpZGF0ZSBmaWxlIGhhbmRsZXMgKi8KK2ludAorX1B5VmVyaWZ5X2ZkKGludCBmZCkKK3sKKyAgICBjb25zdCBpbnQgaTEgPSBmZCA+PiBJT0lORk9fTDJFOworICAgIGNvbnN0IGludCBpMiA9IGZkICYgKCgxIDw8IElPSU5GT19MMkUpIC0gMSk7CisKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVvZl9pb2luZm8gPSAwOworCisgICAgLyogRGV0ZXJtaW5lIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgaW9pbmZvIHN0cnVjdHVyZSwKKyAgICAgKiBhcyB1c2VkIGJ5IHRoZSBDUlQgbG9hZGVkIGluIG1lbW9yeQorICAgICAqLworICAgIGlmIChzaXplb2ZfaW9pbmZvID09IDAgJiYgX19waW9pbmZvWzBdICE9IE5VTEwpIHsKKyAgICAgICAgc2l6ZW9mX2lvaW5mbyA9IF9tc2l6ZShfX3Bpb2luZm9bMF0pIC8gSU9JTkZPX0FSUkFZX0VMVFM7CisgICAgfQorICAgIGlmIChzaXplb2ZfaW9pbmZvID09IDApIHsKKyAgICAgICAgLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbi4uLiAqLworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogU2VlIHRoYXQgaXQgaXNuJ3QgYSBzcGVjaWFsIENMRUFSIGZpbGVubyAqLworICAgIGlmIChmZCAhPSBfTk9fQ09OU09MRV9GSUxFTk8pIHsKKyAgICAgICAgLyogTWljcm9zb2Z0IENSVCB3b3VsZCBjaGVjayB0aGF0IDA8PWZkPF9uaGFuZGxlIGJ1dCB3ZSBjYW4ndCBkbyB0aGF0LiAgSW5zdGVhZAorICAgICAgICAgKiB3ZSBjaGVjayBwb2ludGVyIHZhbGlkaXR5IGFuZCBvdGhlciBpbmZvCisgICAgICAgICAqLworICAgICAgICBpZiAoMCA8PSBpMSAmJiBpMSA8IElPSU5GT19BUlJBWVMgJiYgX19waW9pbmZvW2kxXSAhPSBOVUxMKSB7CisgICAgICAgICAgICAvKiBmaW5hbGx5LCBjaGVjayB0aGF0IHRoZSBmaWxlIGlzIG9wZW4gKi8KKyAgICAgICAgICAgIG15X2lvaW5mbyogaW5mbyA9IChteV9pb2luZm8qKShfX3Bpb2luZm9baTFdICsgaTIgKiBzaXplb2ZfaW9pbmZvKTsKKyAgICAgICAgICAgIGlmIChpbmZvLT5vc2ZpbGUgJiBGT1BFTikgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBmYWlsOgorICAgIGVycm5vID0gRUJBREY7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAgJiYgX01TQ19WRVIgPCAxOTAwICovCmRpZmYgLS1naXQgYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCmluZGV4IGUzYTgxNDkuLjhlOWM1MDIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCisrKyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCkBAIC04NDYsNiArODQ2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3JtYXQgc3BlY2lmaWVyICdjJyIpOwogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CisgICAgICAgIC8qIGVycm9yIHRvIHJlcXVlc3QgYWx0ZXJuYXRlIGZvcm1hdCAqLworICAgICAgICBpZiAoZm9ybWF0LT5hbHRlcm5hdGUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbHRlcm5hdGUgZm9ybSAoIykgbm90IGFsbG93ZWQgd2l0aCBpbnRlZ2VyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9ybWF0IHNwZWNpZmllciAnYyciKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIHRha2VuIGZyb20gdW5pY29kZW9iamVjdC5jIGZvcm1hdGNoYXIoKSAqLwogICAgICAgICAvKiBJbnRlZ2VyIGlucHV0IHRydW5jYXRlZCB0byBhIGNoYXJhY3RlciAqLwpAQCAtMTAzNSw3ICsxMDQyLDcgQEAKICAgICBlbHNlIGlmICh0eXBlID09ICdyJykKICAgICAgICAgdHlwZSA9ICdnJzsKIAotICAgIC8qIENhc3QgInR5cGUiLCBiZWNhdXNlIGlmIHdlJ3JlIGluIHVuaWNvZGUgd2UgbmVlZCB0byBwYXNzIGEKKyAgICAvKiBDYXN0ICJ0eXBlIiwgYmVjYXVzZSBpZiB3ZSdyZSBpbiB1bmljb2RlIHdlIG5lZWQgdG8gcGFzcyBhbgogICAgICAgIDgtYml0IGNoYXIuIFRoaXMgaXMgc2FmZSwgYmVjYXVzZSB3ZSd2ZSByZXN0cmljdGVkIHdoYXQgInR5cGUiCiAgICAgICAgY2FuIGJlLiAqLwogICAgIGJ1ZiA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh2YWwsIChjaGFyKXR5cGUsIHByZWNpc2lvbiwgZmxhZ3MsCkBAIC0xMjE0LDcgKzEyMjEsNyBAQAogICAgIGVsc2UgaWYgKHR5cGUgPT0gJ3InKQogICAgICAgICB0eXBlID0gJ2cnOwogCi0gICAgLyogQ2FzdCAidHlwZSIsIGJlY2F1c2UgaWYgd2UncmUgaW4gdW5pY29kZSB3ZSBuZWVkIHRvIHBhc3MgYQorICAgIC8qIENhc3QgInR5cGUiLCBiZWNhdXNlIGlmIHdlJ3JlIGluIHVuaWNvZGUgd2UgbmVlZCB0byBwYXNzIGFuCiAgICAgICAgOC1iaXQgY2hhci4gVGhpcyBpcyBzYWZlLCBiZWNhdXNlIHdlJ3ZlIHJlc3RyaWN0ZWQgd2hhdCAidHlwZSIKICAgICAgICBjYW4gYmUuICovCiAgICAgcmVfYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHJlLCAoY2hhcil0eXBlLCBwcmVjaXNpb24sIGZsYWdzLApkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zyb3plbi5jIGIvUHl0aG9uL2Zyb3plbi5jCmluZGV4IDliYzY2MmIuLjY3NmYzOTUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mcm96ZW4uYworKysgYi9QeXRob24vZnJvemVuLmMKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJpbXBvcnRsaWIuaCIKKyNpbmNsdWRlICJpbXBvcnRsaWJfZXh0ZXJuYWwuaCIKIAogLyogSW4gb3JkZXIgdG8gdGVzdCB0aGUgc3VwcG9ydCBmb3IgZnJvemVuIG1vZHVsZXMsIGJ5IGRlZmF1bHQgd2UKICAgIGRlZmluZSBhIHNpbmdsZSBmcm96ZW4gbW9kdWxlLCBfX2hlbGxvX18uICBMb2FkaW5nIGl0IHdpbGwgcHJpbnQKQEAgLTMxLDYgKzMyLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0gewogICAgIC8qIGltcG9ydGxpYiAqLwogICAgIHsiX2Zyb3plbl9pbXBvcnRsaWIiLCBfUHlfTV9faW1wb3J0bGliLCAoaW50KXNpemVvZihfUHlfTV9faW1wb3J0bGliKX0sCisgICAgeyJfZnJvemVuX2ltcG9ydGxpYl9leHRlcm5hbCIsIF9QeV9NX19pbXBvcnRsaWJfZXh0ZXJuYWwsCisgICAgICAgIChpbnQpc2l6ZW9mKF9QeV9NX19pbXBvcnRsaWJfZXh0ZXJuYWwpfSwKICAgICAvKiBUZXN0IG1vZHVsZSAqLwogICAgIHsiX19oZWxsb19fIiwgTV9fX2hlbGxvX18sIFNJWkV9LAogICAgIC8qIFRlc3QgcGFja2FnZSAobmVnYXRpdmUgc2l6ZSBpbmRpY2F0ZXMgcGFja2FnZS1uZXNzKSAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zyb3plbm1haW4uYyBiL1B5dGhvbi9mcm96ZW5tYWluLmMKaW5kZXggYjA1Yzk0YS4uZGU4YmQzNSAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zyb3plbm1haW4uYworKysgYi9QeXRob24vZnJvemVubWFpbi5jCkBAIC01NCw3ICs1NCw3IEBACiAKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKKyAgICAgICAgYXJndl9jb3B5W2ldID0gUHlfRGVjb2RlTG9jYWxlKGFyZ3ZbaV0sIE5VTEwpOwogICAgICAgICBhcmd2X2NvcHkyW2ldID0gYXJndl9jb3B5W2ldOwogICAgICAgICBpZiAoIWFyZ3ZfY29weVtpXSkgewogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgIyVpXG4iLApkaWZmIC0tZ2l0IGEvUHl0aG9uL2Z1dHVyZS5jIGIvUHl0aG9uL2Z1dHVyZS5jCmluZGV4IDgxZWFiNTQuLjE2M2Y4N2YgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mdXR1cmUuYworKysgYi9QeXRob24vZnV0dXJlLmMKQEAgLTQwLDYgKzQwLDggQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChmZWF0dXJlLCBGVVRVUkVfQkFSUllfQVNfQkRGTCkgPT0gMCkgewogICAgICAgICAgICAgZmYtPmZmX2ZlYXR1cmVzIHw9IENPX0ZVVFVSRV9CQVJSWV9BU19CREZMOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChmZWF0dXJlLCBGVVRVUkVfR0VORVJBVE9SX1NUT1ApID09IDApIHsKKyAgICAgICAgICAgIGZmLT5mZl9mZWF0dXJlcyB8PSBDT19GVVRVUkVfR0VORVJBVE9SX1NUT1A7CiAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGZlYXR1cmUsICJicmFjZXMiKSA9PSAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNoYW5jZSIpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dldGFyZ3MuYyBiL1B5dGhvbi9nZXRhcmdzLmMKaW5kZXggNjkwMmQxMy4uOGFhYjA2NyAxMDA2NDQKLS0tIGEvUHl0aG9uL2dldGFyZ3MuYworKysgYi9QeXRob24vZ2V0YXJncy5jCkBAIC0zNDIsNyArMzQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIGxldmVscywgbXNnYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobXNnYnVmKSwgJmZyZWVsaXN0KTsKICAgICAgICAgaWYgKG1zZykgewotICAgICAgICAgICAgc2V0ZXJyb3IoaSsxLCBtc2csIGxldmVscywgZm5hbWUsIG1zZyk7CisgICAgICAgICAgICBzZXRlcnJvcihpKzEsIG1zZywgbGV2ZWxzLCBmbmFtZSwgbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2xlYW5yZXR1cm4oMCwgJmZyZWVsaXN0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTUzNSw5ICs1MzUsMTUgQEAKIHsKICAgICBhc3NlcnQoZXhwZWN0ZWQgIT0gTlVMTCk7CiAgICAgYXNzZXJ0KGFyZyAhPSBOVUxMKTsKLSAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKLSAgICAgICAgICAgICAgICAgICJtdXN0IGJlICUuNTBzLCBub3QgJS41MHMiLCBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgIGFyZyA9PSBQeV9Ob25lID8gIk5vbmUiIDogYXJnLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICBpZiAoZXhwZWN0ZWRbMF0gPT0gJygnKSB7CisgICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICIlLjEwMHMiLCBleHBlY3RlZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSAlLjUwcywgbm90ICUuNTBzIiwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgYXJnID09IFB5X05vbmUgPyAiTm9uZSIgOiBhcmctPm9iX3R5cGUtPnRwX25hbWUpOworICAgIH0KICAgICByZXR1cm4gbXNnYnVmOwogfQogCkBAIC03NDEsNyArNzQ3LDcgQEAKICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhhcmcpKQogICAgICAgICAgICAgaXZhbCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soYXJnKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8az4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50IiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICAqcCA9IGl2YWw7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTc2Niw3ICs3NzIsNyBAQAogICAgICAgICBpZiAoUHlMb25nX0NoZWNrKGFyZykpCiAgICAgICAgICAgICBpdmFsID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2soYXJnKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8Sz4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50IiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICAqcCA9IGl2YWw7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg3MiwxMCArODc4LDEwIEBACiAgICAgICAgICAgICBTVE9SRV9TSVpFKGNvdW50KTsKICAgICAgICAgICAgIGZvcm1hdCsrOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHN0cmxlbigqcCkgIT0gY291bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCi0gICAgICAgICAgICAgICAgICAgICJieXRlcyB3aXRob3V0IG51bGwgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBpZiAoc3RybGVuKCpwKSAhPSAoc2l6ZV90KWNvdW50KSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbWJlZGRlZCBudWxsIGJ5dGUiKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk0OCwxNiArOTU0LDE1IEBACiAgICAgICAgICAgICAgICAgaWYgKHNhcmcgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoQ09OVl9VTklDT0RFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0cmxlbihzYXJnKSAhPSAoc2l6ZV90KWxlbikgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtYmVkZGVkIG51bGwgY2hhcmFjdGVyIik7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICpwID0gc2FyZzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycihjID09ICd6JyA/ICJzdHIgb3IgTm9uZSIgOiAic3RyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoKnAgIT0gTlVMTCAmJiBzYXJnICE9IE5VTEwgJiYgKFB5X3NzaXplX3QpIHN0cmxlbigqcCkgIT0gbGVuKQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKAotICAgICAgICAgICAgICAgICAgICBjID09ICd6JyA/ICJzdHIgd2l0aG91dCBudWxsIGNoYXJhY3RlcnMgb3IgTm9uZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAic3RyIHdpdGhvdXQgbnVsbCBjaGFyYWN0ZXJzIiwKLSAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTk5NSwxMCArMTAwMCwxMCBAQAogICAgICAgICAgICAgICAgICpwID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUoYXJnLCAmbGVuKTsKICAgICAgICAgICAgICAgICBpZiAoKnAgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0VSUl9PQ0NVUlJFRDsKLSAgICAgICAgICAgICAgICBpZiAoUHlfVU5JQ09ERV9zdHJsZW4oKnApICE9IGxlbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RyIHdpdGhvdXQgbnVsbCBjaGFyYWN0ZXJzIG9yIE5vbmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOworICAgICAgICAgICAgICAgIGlmIChQeV9VTklDT0RFX3N0cmxlbigqcCkgIT0gKHNpemVfdClsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbWJlZGRlZCBudWxsIGNoYXJhY3RlciIpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKGMgPT0gJ1onID8gInN0ciBvciBOb25lIiA6ICJzdHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKQEAgLTExMjQsOSArMTEyOSwxMSBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoc2l6ZSArIDEgPiBCVUZGRVJfTEVOKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCi0gICAgICAgICAgICAgICAgICAgICAgICAiKGJ1ZmZlciBvdmVyZmxvdykiLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuY29kZWQgc3RyaW5nIHRvbyBsb25nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJXpkLCBtYXhpbXVtIGxlbmd0aCAlemQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9zc2l6ZV90KXNpemUsIChQeV9zc2l6ZV90KShCVUZGRVJfTEVOLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0VSUl9PQ0NVUlJFRDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkoKmJ1ZmZlciwgcHRyLCBzaXplKzEpOwpAQCAtMTE0OCw3ICsxMTU1LDcgQEAKICAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdClzdHJsZW4ocHRyKSAhPSBzaXplKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHMpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKAotICAgICAgICAgICAgICAgICAgICAiZW5jb2RlZCBzdHJpbmcgd2l0aG91dCBOVUxMIGJ5dGVzIiwKKyAgICAgICAgICAgICAgICAgICAgImVuY29kZWQgc3RyaW5nIHdpdGhvdXQgbnVsbCBieXRlcyIsCiAgICAgICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICpidWZmZXIgPSBQeU1lbV9ORVcoY2hhciwgc2l6ZSArIDEpOwpAQCAtMTIzOCw3ICsxMjQ1LDcgQEAKIAogICAgICAgICBpZiAoKmZvcm1hdCAhPSAnKicpCiAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigKLSAgICAgICAgICAgICAgICAiaW52YWxpZCB1c2Ugb2YgJ3cnIGZvcm1hdCBjaGFyYWN0ZXIiLAorICAgICAgICAgICAgICAgICIoaW52YWxpZCB1c2Ugb2YgJ3cnIGZvcm1hdCBjaGFyYWN0ZXIpIiwKICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgIGZvcm1hdCsrOwogCkBAIC0xMjQ2LDcgKzEyNTMsOCBAQAogICAgICAgICAgICBzdXBwb3J0cyBpdCBkaXJlY3RseS4gKi8KICAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsIChQeV9idWZmZXIqKXAsIFB5QlVGX1dSSVRBQkxFKSA8IDApIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigicmVhZC13cml0ZSBidWZmZXIiLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigicmVhZC13cml0ZSBieXRlcy1saWtlIG9iamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoKFB5X2J1ZmZlciopcCwgJ0MnKSkgewogICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgoUHlfYnVmZmVyKilwKTsKQEAgLTEyNjEsNyArMTI2OSw3IEBACiAgICAgfQogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImltcG9zc2libGU8YmFkIGZvcm1hdCBjaGFyPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoIihpbXBvc3NpYmxlPGJhZCBmb3JtYXQgY2hhcj4pIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogCiAgICAgfQogCkBAIC0xMjg0LDcgKzEyOTIsNyBAQAogICAgICplcnJtc2cgPSBOVUxMOwogICAgICpwID0gTlVMTDsKICAgICBpZiAocGIgIT0gTlVMTCAmJiBwYi0+YmZfcmVsZWFzZWJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICAgICplcnJtc2cgPSAicmVhZC1vbmx5IHBpbm5lZCBidWZmZXIiOworICAgICAgICAqZXJybXNnID0gInJlYWQtb25seSBieXRlcy1saWtlIG9iamVjdCI7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTEzMDAsNyArMTMwOCw3IEBACiBnZXRidWZmZXIoUHlPYmplY3QgKmFyZywgUHlfYnVmZmVyICp2aWV3LCBjaGFyICoqZXJybXNnKQogewogICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYXJnLCB2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKLSAgICAgICAgKmVycm1zZyA9ICJieXRlcyBvciBidWZmZXIiOworICAgICAgICAqZXJybXNnID0gImJ5dGVzLWxpa2Ugb2JqZWN0IjsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAoIVB5QnVmZmVyX0lzQ29udGlndW91cyh2aWV3LCAnQycpKSB7CmRpZmYgLS1naXQgYS9QeXRob24vZ3JhbWluaXQuYyBiL1B5dGhvbi9ncmFtaW5pdC5jCmluZGV4IGUwNDk5OWIuLjgyMTJiMmEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ncmFtaW5pdC5jCisrKyBiL1B5dGhvbi9ncmFtaW5pdC5jCkBAIC05MiwzOTMgKzkyLDQwNiBAQAogc3RhdGljIGFyYyBhcmNzXzVfMFsxXSA9IHsKICAgICB7MTYsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc181XzFbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNV8xWzNdID0gewogICAgIHsxOCwgMn0sCiAgICAgezE5LCAyfSwKKyAgICB7MjAsIDJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc181XzJbMV0gPSB7CiAgICAgezAsIDJ9LAogfTsKIHN0YXRpYyBzdGF0ZSBzdGF0ZXNfNVszXSA9IHsKICAgICB7MSwgYXJjc181XzB9LAotICAgIHsyLCBhcmNzXzVfMX0sCisgICAgezMsIGFyY3NfNV8xfSwKICAgICB7MSwgYXJjc181XzJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc182XzBbMV0gPSB7Ci0gICAgezIwLCAxfSwKKyAgICB7MjEsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc182XzFbMV0gPSB7Ci0gICAgezIxLCAyfSwKKyAgICB7MTksIDJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc182XzJbMV0gPSB7Ci0gICAgezIyLCAzfSwKKyAgICB7MCwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzZfM1syXSA9IHsKLSAgICB7MjMsIDR9LAotICAgIHsyNSwgNX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzZfNFsxXSA9IHsKLSAgICB7MjQsIDZ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc182XzVbMV0gPSB7Ci0gICAgezI2LCA3fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNl82WzFdID0gewotICAgIHsyNSwgNX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzZfN1sxXSA9IHsKLSAgICB7MCwgN30sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc182WzhdID0geworc3RhdGljIHN0YXRlIHN0YXRlc182WzNdID0gewogICAgIHsxLCBhcmNzXzZfMH0sCiAgICAgezEsIGFyY3NfNl8xfSwKICAgICB7MSwgYXJjc182XzJ9LAotICAgIHsyLCBhcmNzXzZfM30sCi0gICAgezEsIGFyY3NfNl80fSwKLSAgICB7MSwgYXJjc182XzV9LAotICAgIHsxLCBhcmNzXzZfNn0sCi0gICAgezEsIGFyY3NfNl83fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfN18wWzFdID0gewotICAgIHsxMywgMX0sCisgICAgezIyLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfN18xWzJdID0gewotICAgIHsyNywgMn0sCi0gICAgezE1LCAzfSwKK3N0YXRpYyBhcmMgYXJjc183XzFbMV0gPSB7CisgICAgezIzLCAyfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfN18yWzFdID0gewotICAgIHsxNSwgM30sCi19Owotc3RhdGljIGFyYyBhcmNzXzdfM1sxXSA9IHsKLSAgICB7MCwgM30sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc183WzRdID0gewotICAgIHsxLCBhcmNzXzdfMH0sCi0gICAgezIsIGFyY3NfN18xfSwKLSAgICB7MSwgYXJjc183XzJ9LAotICAgIHsxLCBhcmNzXzdfM30sCi19Owotc3RhdGljIGFyYyBhcmNzXzhfMFszXSA9IHsKLSAgICB7MjgsIDF9LAotICAgIHszMSwgMn0sCi0gICAgezMyLCAzfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfOF8xWzNdID0gewotICAgIHsyOSwgNH0sCi0gICAgezMwLCA1fSwKLSAgICB7MCwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzhfMlszXSA9IHsKLSAgICB7MjgsIDZ9LAotICAgIHszMCwgN30sCi0gICAgezAsIDJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc184XzNbMV0gPSB7Ci0gICAgezI4LCA4fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfOF80WzFdID0gewotICAgIHsyNCwgOX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzhfNVs0XSA9IHsKLSAgICB7MjgsIDEwfSwKLSAgICB7MzEsIDExfSwKLSAgICB7MzIsIDN9LAotICAgIHswLCA1fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfOF82WzJdID0gewotICAgIHszMCwgN30sCi0gICAgezAsIDZ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc184XzdbMl0gPSB7Ci0gICAgezI4LCAxMn0sCi0gICAgezMyLCAzfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfOF84WzFdID0gewotICAgIHswLCA4fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfOF85WzJdID0gewotICAgIHszMCwgNX0sCi0gICAgezAsIDl9LAotfTsKLXN0YXRpYyBhcmMgYXJjc184XzEwWzNdID0gewotICAgIHszMCwgNX0sCi0gICAgezI5LCA0fSwKLSAgICB7MCwgMTB9LAotfTsKLXN0YXRpYyBhcmMgYXJjc184XzExWzNdID0gewotICAgIHsyOCwgMTN9LAotICAgIHszMCwgMTR9LAotICAgIHswLCAxMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzhfMTJbM10gPSB7Ci0gICAgezMwLCA3fSwKLSAgICB7MjksIDE1fSwKLSAgICB7MCwgMTJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc184XzEzWzJdID0gewotICAgIHszMCwgMTR9LAotICAgIHswLCAxM30sCi19Owotc3RhdGljIGFyYyBhcmNzXzhfMTRbMl0gPSB7Ci0gICAgezI4LCAxNn0sCi0gICAgezMyLCAzfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfOF8xNVsxXSA9IHsKLSAgICB7MjQsIDZ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc184XzE2WzNdID0gewotICAgIHszMCwgMTR9LAotICAgIHsyOSwgMTd9LAotICAgIHswLCAxNn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzhfMTdbMV0gPSB7Ci0gICAgezI0LCAxM30sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc184WzE4XSA9IHsKLSAgICB7MywgYXJjc184XzB9LAotICAgIHszLCBhcmNzXzhfMX0sCi0gICAgezMsIGFyY3NfOF8yfSwKLSAgICB7MSwgYXJjc184XzN9LAotICAgIHsxLCBhcmNzXzhfNH0sCi0gICAgezQsIGFyY3NfOF81fSwKLSAgICB7MiwgYXJjc184XzZ9LAotICAgIHsyLCBhcmNzXzhfN30sCi0gICAgezEsIGFyY3NfOF84fSwKLSAgICB7MiwgYXJjc184Xzl9LAotICAgIHszLCBhcmNzXzhfMTB9LAotICAgIHszLCBhcmNzXzhfMTF9LAotICAgIHszLCBhcmNzXzhfMTJ9LAotICAgIHsyLCBhcmNzXzhfMTN9LAotICAgIHsyLCBhcmNzXzhfMTR9LAotICAgIHsxLCBhcmNzXzhfMTV9LAotICAgIHszLCBhcmNzXzhfMTZ9LAotICAgIHsxLCBhcmNzXzhfMTd9LAotfTsKLXN0YXRpYyBhcmMgYXJjc185XzBbMV0gPSB7Ci0gICAgezIxLCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfOV8xWzJdID0gewotICAgIHsyNSwgMn0sCi0gICAgezAsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc185XzJbMV0gPSB7CiAgICAgezI0LCAzfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfOV8zWzFdID0geworc3RhdGljIGFyYyBhcmNzXzdfM1syXSA9IHsKKyAgICB7MjUsIDR9LAorICAgIHsyNywgNX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzdfNFsxXSA9IHsKKyAgICB7MjYsIDZ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183XzVbMV0gPSB7CisgICAgezI4LCA3fSwKK307CitzdGF0aWMgYXJjIGFyY3NfN182WzFdID0geworICAgIHsyNywgNX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzdfN1sxXSA9IHsKKyAgICB7MCwgN30sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc183WzhdID0geworICAgIHsxLCBhcmNzXzdfMH0sCisgICAgezEsIGFyY3NfN18xfSwKKyAgICB7MSwgYXJjc183XzJ9LAorICAgIHsyLCBhcmNzXzdfM30sCisgICAgezEsIGFyY3NfN180fSwKKyAgICB7MSwgYXJjc183XzV9LAorICAgIHsxLCBhcmNzXzdfNn0sCisgICAgezEsIGFyY3NfN183fSwKK307CitzdGF0aWMgYXJjIGFyY3NfOF8wWzFdID0geworICAgIHsxMywgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzhfMVsyXSA9IHsKKyAgICB7MjksIDJ9LAorICAgIHsxNSwgM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzhfMlsxXSA9IHsKKyAgICB7MTUsIDN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc184XzNbMV0gPSB7CiAgICAgezAsIDN9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfOVs0XSA9IHsKLSAgICB7MSwgYXJjc185XzB9LAotICAgIHsyLCBhcmNzXzlfMX0sCi0gICAgezEsIGFyY3NfOV8yfSwKLSAgICB7MSwgYXJjc185XzN9LAorc3RhdGljIHN0YXRlIHN0YXRlc184WzRdID0geworICAgIHsxLCBhcmNzXzhfMH0sCisgICAgezIsIGFyY3NfOF8xfSwKKyAgICB7MSwgYXJjc184XzJ9LAorICAgIHsxLCBhcmNzXzhfM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzEwXzBbM10gPSB7Ci0gICAgezM0LCAxfSwKLSAgICB7MzEsIDJ9LAotICAgIHszMiwgM30sCitzdGF0aWMgYXJjIGFyY3NfOV8wWzNdID0geworICAgIHszMCwgMX0sCisgICAgezMzLCAyfSwKKyAgICB7MzQsIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xMF8xWzNdID0gewotICAgIHsyOSwgNH0sCi0gICAgezMwLCA1fSwKK3N0YXRpYyBhcmMgYXJjc185XzFbM10gPSB7CisgICAgezMxLCA0fSwKKyAgICB7MzIsIDV9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfMlszXSA9IHsKLSAgICB7MzQsIDZ9LAotICAgIHszMCwgN30sCitzdGF0aWMgYXJjIGFyY3NfOV8yWzNdID0geworICAgIHszMCwgNn0sCisgICAgezMyLCA3fSwKICAgICB7MCwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzEwXzNbMV0gPSB7Ci0gICAgezM0LCA4fSwKK3N0YXRpYyBhcmMgYXJjc185XzNbMV0gPSB7CisgICAgezMwLCA4fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfNFsxXSA9IHsKLSAgICB7MjQsIDl9LAorc3RhdGljIGFyYyBhcmNzXzlfNFsxXSA9IHsKKyAgICB7MjYsIDl9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xMF81WzRdID0gewotICAgIHszNCwgMTB9LAotICAgIHszMSwgMTF9LAotICAgIHszMiwgM30sCitzdGF0aWMgYXJjIGFyY3NfOV81WzRdID0geworICAgIHszMCwgMTB9LAorICAgIHszMywgMTF9LAorICAgIHszNCwgM30sCiAgICAgezAsIDV9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xMF82WzJdID0gewotICAgIHszMCwgN30sCitzdGF0aWMgYXJjIGFyY3NfOV82WzJdID0geworICAgIHszMiwgN30sCiAgICAgezAsIDZ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xMF83WzJdID0gewotICAgIHszNCwgMTJ9LAotICAgIHszMiwgM30sCitzdGF0aWMgYXJjIGFyY3NfOV83WzJdID0geworICAgIHszMCwgMTJ9LAorICAgIHszNCwgM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzEwXzhbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfOV84WzFdID0gewogICAgIHswLCA4fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfOVsyXSA9IHsKLSAgICB7MzAsIDV9LAorc3RhdGljIGFyYyBhcmNzXzlfOVsyXSA9IHsKKyAgICB7MzIsIDV9LAogICAgIHswLCA5fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfMTBbM10gPSB7Ci0gICAgezMwLCA1fSwKLSAgICB7MjksIDR9LAorc3RhdGljIGFyYyBhcmNzXzlfMTBbM10gPSB7CisgICAgezMyLCA1fSwKKyAgICB7MzEsIDR9LAogICAgIHswLCAxMH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzEwXzExWzNdID0gewotICAgIHszNCwgMTN9LAotICAgIHszMCwgMTR9LAorc3RhdGljIGFyYyBhcmNzXzlfMTFbM10gPSB7CisgICAgezMwLCAxM30sCisgICAgezMyLCAxNH0sCiAgICAgezAsIDExfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfMTJbM10gPSB7Ci0gICAgezMwLCA3fSwKLSAgICB7MjksIDE1fSwKK3N0YXRpYyBhcmMgYXJjc185XzEyWzNdID0geworICAgIHszMiwgN30sCisgICAgezMxLCAxNX0sCiAgICAgezAsIDEyfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfMTNbMl0gPSB7Ci0gICAgezMwLCAxNH0sCitzdGF0aWMgYXJjIGFyY3NfOV8xM1syXSA9IHsKKyAgICB7MzIsIDE0fSwKICAgICB7MCwgMTN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xMF8xNFsyXSA9IHsKLSAgICB7MzQsIDE2fSwKLSAgICB7MzIsIDN9LAorc3RhdGljIGFyYyBhcmNzXzlfMTRbMl0gPSB7CisgICAgezMwLCAxNn0sCisgICAgezM0LCAzfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfMTVbMV0gPSB7Ci0gICAgezI0LCA2fSwKK3N0YXRpYyBhcmMgYXJjc185XzE1WzFdID0geworICAgIHsyNiwgNn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzEwXzE2WzNdID0gewotICAgIHszMCwgMTR9LAotICAgIHsyOSwgMTd9LAorc3RhdGljIGFyYyBhcmNzXzlfMTZbM10gPSB7CisgICAgezMyLCAxNH0sCisgICAgezMxLCAxN30sCiAgICAgezAsIDE2fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfMTdbMV0gPSB7Ci0gICAgezI0LCAxM30sCitzdGF0aWMgYXJjIGFyY3NfOV8xN1sxXSA9IHsKKyAgICB7MjYsIDEzfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzEwWzE4XSA9IHsKLSAgICB7MywgYXJjc18xMF8wfSwKLSAgICB7MywgYXJjc18xMF8xfSwKLSAgICB7MywgYXJjc18xMF8yfSwKLSAgICB7MSwgYXJjc18xMF8zfSwKLSAgICB7MSwgYXJjc18xMF80fSwKLSAgICB7NCwgYXJjc18xMF81fSwKLSAgICB7MiwgYXJjc18xMF82fSwKLSAgICB7MiwgYXJjc18xMF83fSwKLSAgICB7MSwgYXJjc18xMF84fSwKLSAgICB7MiwgYXJjc18xMF85fSwKLSAgICB7MywgYXJjc18xMF8xMH0sCi0gICAgezMsIGFyY3NfMTBfMTF9LAotICAgIHszLCBhcmNzXzEwXzEyfSwKLSAgICB7MiwgYXJjc18xMF8xM30sCi0gICAgezIsIGFyY3NfMTBfMTR9LAotICAgIHsxLCBhcmNzXzEwXzE1fSwKLSAgICB7MywgYXJjc18xMF8xNn0sCi0gICAgezEsIGFyY3NfMTBfMTd9LAorc3RhdGljIHN0YXRlIHN0YXRlc185WzE4XSA9IHsKKyAgICB7MywgYXJjc185XzB9LAorICAgIHszLCBhcmNzXzlfMX0sCisgICAgezMsIGFyY3NfOV8yfSwKKyAgICB7MSwgYXJjc185XzN9LAorICAgIHsxLCBhcmNzXzlfNH0sCisgICAgezQsIGFyY3NfOV81fSwKKyAgICB7MiwgYXJjc185XzZ9LAorICAgIHsyLCBhcmNzXzlfN30sCisgICAgezEsIGFyY3NfOV84fSwKKyAgICB7MiwgYXJjc185Xzl9LAorICAgIHszLCBhcmNzXzlfMTB9LAorICAgIHszLCBhcmNzXzlfMTF9LAorICAgIHszLCBhcmNzXzlfMTJ9LAorICAgIHsyLCBhcmNzXzlfMTN9LAorICAgIHsyLCBhcmNzXzlfMTR9LAorICAgIHsxLCBhcmNzXzlfMTV9LAorICAgIHszLCBhcmNzXzlfMTZ9LAorICAgIHsxLCBhcmNzXzlfMTd9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xMV8wWzFdID0gewotICAgIHsyMSwgMX0sCitzdGF0aWMgYXJjIGFyY3NfMTBfMFsxXSA9IHsKKyAgICB7MjMsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xMV8xWzFdID0geworc3RhdGljIGFyYyBhcmNzXzEwXzFbMl0gPSB7CisgICAgezI3LCAyfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18xMVsyXSA9IHsKLSAgICB7MSwgYXJjc18xMV8wfSwKLSAgICB7MSwgYXJjc18xMV8xfSwKK3N0YXRpYyBhcmMgYXJjc18xMF8yWzFdID0geworICAgIHsyNiwgM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzEyXzBbMl0gPSB7Ci0gICAgezMsIDF9LAotICAgIHs0LCAxfSwKK3N0YXRpYyBhcmMgYXJjc18xMF8zWzFdID0geworICAgIHswLCAzfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzEwWzRdID0geworICAgIHsxLCBhcmNzXzEwXzB9LAorICAgIHsyLCBhcmNzXzEwXzF9LAorICAgIHsxLCBhcmNzXzEwXzJ9LAorICAgIHsxLCBhcmNzXzEwXzN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xMV8wWzNdID0geworICAgIHszNiwgMX0sCisgICAgezMzLCAyfSwKKyAgICB7MzQsIDN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xMV8xWzNdID0geworICAgIHszMSwgNH0sCisgICAgezMyLCA1fSwKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzJbM10gPSB7CisgICAgezM2LCA2fSwKKyAgICB7MzIsIDd9LAorICAgIHswLCAyfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMTFfM1sxXSA9IHsKKyAgICB7MzYsIDh9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xMV80WzFdID0geworICAgIHsyNiwgOX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzVbNF0gPSB7CisgICAgezM2LCAxMH0sCisgICAgezMzLCAxMX0sCisgICAgezM0LCAzfSwKKyAgICB7MCwgNX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzZbMl0gPSB7CisgICAgezMyLCA3fSwKKyAgICB7MCwgNn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzdbMl0gPSB7CisgICAgezM2LCAxMn0sCisgICAgezM0LCAzfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMTFfOFsxXSA9IHsKKyAgICB7MCwgOH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzlbMl0gPSB7CisgICAgezMyLCA1fSwKKyAgICB7MCwgOX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzEwWzNdID0geworICAgIHszMiwgNX0sCisgICAgezMxLCA0fSwKKyAgICB7MCwgMTB9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xMV8xMVszXSA9IHsKKyAgICB7MzYsIDEzfSwKKyAgICB7MzIsIDE0fSwKKyAgICB7MCwgMTF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xMV8xMlszXSA9IHsKKyAgICB7MzIsIDd9LAorICAgIHszMSwgMTV9LAorICAgIHswLCAxMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzEzWzJdID0geworICAgIHszMiwgMTR9LAorICAgIHswLCAxM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzE0WzJdID0geworICAgIHszNiwgMTZ9LAorICAgIHszNCwgM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzE1WzFdID0geworICAgIHsyNiwgNn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzE2WzNdID0geworICAgIHszMiwgMTR9LAorICAgIHszMSwgMTd9LAorICAgIHswLCAxNn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzExXzE3WzFdID0geworICAgIHsyNiwgMTN9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMTFbMThdID0geworICAgIHszLCBhcmNzXzExXzB9LAorICAgIHszLCBhcmNzXzExXzF9LAorICAgIHszLCBhcmNzXzExXzJ9LAorICAgIHsxLCBhcmNzXzExXzN9LAorICAgIHsxLCBhcmNzXzExXzR9LAorICAgIHs0LCBhcmNzXzExXzV9LAorICAgIHsyLCBhcmNzXzExXzZ9LAorICAgIHsyLCBhcmNzXzExXzd9LAorICAgIHsxLCBhcmNzXzExXzh9LAorICAgIHsyLCBhcmNzXzExXzl9LAorICAgIHszLCBhcmNzXzExXzEwfSwKKyAgICB7MywgYXJjc18xMV8xMX0sCisgICAgezMsIGFyY3NfMTFfMTJ9LAorICAgIHsyLCBhcmNzXzExXzEzfSwKKyAgICB7MiwgYXJjc18xMV8xNH0sCisgICAgezEsIGFyY3NfMTFfMTV9LAorICAgIHszLCBhcmNzXzExXzE2fSwKKyAgICB7MSwgYXJjc18xMV8xN30sCit9Oworc3RhdGljIGFyYyBhcmNzXzEyXzBbMV0gPSB7CisgICAgezIzLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMTJfMVsxXSA9IHsKICAgICB7MCwgMX0sCiB9Owogc3RhdGljIHN0YXRlIHN0YXRlc18xMlsyXSA9IHsKLSAgICB7MiwgYXJjc18xMl8wfSwKKyAgICB7MSwgYXJjc18xMl8wfSwKICAgICB7MSwgYXJjc18xMl8xfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTNfMFsxXSA9IHsKLSAgICB7MzUsIDF9LAorc3RhdGljIGFyYyBhcmNzXzEzXzBbMl0gPSB7CisgICAgezMsIDF9LAorICAgIHs0LCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTNfMVsyXSA9IHsKLSAgICB7MzYsIDJ9LAorc3RhdGljIGFyYyBhcmNzXzEzXzFbMV0gPSB7CisgICAgezAsIDF9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMTNbMl0gPSB7CisgICAgezIsIGFyY3NfMTNfMH0sCisgICAgezEsIGFyY3NfMTNfMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzE0XzBbMV0gPSB7CisgICAgezM3LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMTRfMVsyXSA9IHsKKyAgICB7MzgsIDJ9LAogICAgIHsyLCAzfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTNfMlsyXSA9IHsKLSAgICB7MzUsIDF9LAorc3RhdGljIGFyYyBhcmNzXzE0XzJbMl0gPSB7CisgICAgezM3LCAxfSwKICAgICB7MiwgM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzEzXzNbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfMTRfM1sxXSA9IHsKICAgICB7MCwgM30sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18xM1s0XSA9IHsKLSAgICB7MSwgYXJjc18xM18wfSwKLSAgICB7MiwgYXJjc18xM18xfSwKLSAgICB7MiwgYXJjc18xM18yfSwKLSAgICB7MSwgYXJjc18xM18zfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMTRbNF0gPSB7CisgICAgezEsIGFyY3NfMTRfMH0sCisgICAgezIsIGFyY3NfMTRfMX0sCisgICAgezIsIGFyY3NfMTRfMn0sCisgICAgezEsIGFyY3NfMTRfM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzE0XzBbOF0gPSB7Ci0gICAgezM3LCAxfSwKLSAgICB7MzgsIDF9LAorc3RhdGljIGFyYyBhcmNzXzE1XzBbOF0gPSB7CiAgICAgezM5LCAxfSwKICAgICB7NDAsIDF9LAogICAgIHs0MSwgMX0sCiAgICAgezQyLCAxfSwKICAgICB7NDMsIDF9LAogICAgIHs0NCwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzE0XzFbMV0gPSB7Ci0gICAgezAsIDF9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMTRbMl0gPSB7Ci0gICAgezgsIGFyY3NfMTRfMH0sCi0gICAgezEsIGFyY3NfMTRfMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzE1XzBbMV0gPSB7CiAgICAgezQ1LCAxfSwKKyAgICB7NDYsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xNV8xWzNdID0gewotICAgIHs0NiwgMn0sCi0gICAgezI5LCAzfSwKK3N0YXRpYyBhcmMgYXJjc18xNV8xWzFdID0gewogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTVfMlsyXSA9IHsKLSAgICB7NDcsIDR9LAorc3RhdGljIHN0YXRlIHN0YXRlc18xNVsyXSA9IHsKKyAgICB7OCwgYXJjc18xNV8wfSwKKyAgICB7MSwgYXJjc18xNV8xfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMTZfMFsxXSA9IHsKKyAgICB7NDcsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xNl8xWzNdID0geworICAgIHs0OCwgMn0sCisgICAgezMxLCAzfSwKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzE2XzJbMl0gPSB7CisgICAgezQ5LCA0fSwKICAgICB7OSwgNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzE1XzNbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfMTZfM1syXSA9IHsKKyAgICB7NDksIDV9LAogICAgIHs0NywgNX0sCi0gICAgezQ1LCA1fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTVfNFsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc18xNl80WzFdID0gewogICAgIHswLCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTVfNVsyXSA9IHsKLSAgICB7MjksIDN9LAorc3RhdGljIGFyYyBhcmNzXzE2XzVbMl0gPSB7CisgICAgezMxLCAzfSwKICAgICB7MCwgNX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18xNVs2XSA9IHsKLSAgICB7MSwgYXJjc18xNV8wfSwKLSAgICB7MywgYXJjc18xNV8xfSwKLSAgICB7MiwgYXJjc18xNV8yfSwKLSAgICB7MiwgYXJjc18xNV8zfSwKLSAgICB7MSwgYXJjc18xNV80fSwKLSAgICB7MiwgYXJjc18xNV81fSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMTZbNl0gPSB7CisgICAgezEsIGFyY3NfMTZfMH0sCisgICAgezMsIGFyY3NfMTZfMX0sCisgICAgezIsIGFyY3NfMTZfMn0sCisgICAgezIsIGFyY3NfMTZfM30sCisgICAgezEsIGFyY3NfMTZfNH0sCisgICAgezIsIGFyY3NfMTZfNX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzE2XzBbMl0gPSB7Ci0gICAgezI0LCAxfSwKLSAgICB7NDgsIDF9LAorc3RhdGljIGFyYyBhcmNzXzE3XzBbMl0gPSB7CisgICAgezI2LCAxfSwKKyAgICB7NTAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xNl8xWzJdID0gewotICAgIHszMCwgMn0sCitzdGF0aWMgYXJjIGFyY3NfMTdfMVsyXSA9IHsKKyAgICB7MzIsIDJ9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTZfMlszXSA9IHsKLSAgICB7MjQsIDF9LAotICAgIHs0OCwgMX0sCitzdGF0aWMgYXJjIGFyY3NfMTdfMlszXSA9IHsKKyAgICB7MjYsIDF9LAorICAgIHs1MCwgMX0sCiAgICAgezAsIDJ9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMTZbM10gPSB7Ci0gICAgezIsIGFyY3NfMTZfMH0sCi0gICAgezIsIGFyY3NfMTZfMX0sCi0gICAgezMsIGFyY3NfMTZfMn0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzE3WzNdID0geworICAgIHsyLCBhcmNzXzE3XzB9LAorICAgIHsyLCBhcmNzXzE3XzF9LAorICAgIHszLCBhcmNzXzE3XzJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xN18wWzEyXSA9IHsKLSAgICB7NDksIDF9LAotICAgIHs1MCwgMX0sCitzdGF0aWMgYXJjIGFyY3NfMThfMFsxM10gPSB7CiAgICAgezUxLCAxfSwKICAgICB7NTIsIDF9LAogICAgIHs1MywgMX0sCkBAIC00ODksNjQgKzUwMiw1NyBAQAogICAgIHs1OCwgMX0sCiAgICAgezU5LCAxfSwKICAgICB7NjAsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18xN18xWzFdID0gewotICAgIHswLCAxfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzE3WzJdID0gewotICAgIHsxMiwgYXJjc18xN18wfSwKLSAgICB7MSwgYXJjc18xN18xfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMThfMFsxXSA9IHsKICAgICB7NjEsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18xOF8xWzFdID0gewotICAgIHs2MiwgMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzE4XzJbMV0gPSB7Ci0gICAgezAsIDJ9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMThbM10gPSB7Ci0gICAgezEsIGFyY3NfMThfMH0sCi0gICAgezEsIGFyY3NfMThfMX0sCi0gICAgezEsIGFyY3NfMThfMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzE5XzBbMV0gPSB7CisgICAgezYyLCAxfSwKICAgICB7NjMsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xOV8xWzFdID0geworc3RhdGljIGFyYyBhcmNzXzE4XzFbMV0gPSB7CiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMTlbMl0gPSB7CitzdGF0aWMgc3RhdGUgc3RhdGVzXzE4WzJdID0geworICAgIHsxMywgYXJjc18xOF8wfSwKKyAgICB7MSwgYXJjc18xOF8xfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMTlfMFsxXSA9IHsKKyAgICB7NjQsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xOV8xWzFdID0geworICAgIHs2NSwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzE5XzJbMV0gPSB7CisgICAgezAsIDJ9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMTlbM10gPSB7CiAgICAgezEsIGFyY3NfMTlfMH0sCiAgICAgezEsIGFyY3NfMTlfMX0sCisgICAgezEsIGFyY3NfMTlfMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzIwXzBbNV0gPSB7Ci0gICAgezY0LCAxfSwKLSAgICB7NjUsIDF9LAorc3RhdGljIGFyYyBhcmNzXzIwXzBbMV0gPSB7CiAgICAgezY2LCAxfSwKLSAgICB7NjcsIDF9LAotICAgIHs2OCwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzIwXzFbMV0gPSB7CiAgICAgezAsIDF9LAogfTsKIHN0YXRpYyBzdGF0ZSBzdGF0ZXNfMjBbMl0gPSB7Ci0gICAgezUsIGFyY3NfMjBfMH0sCisgICAgezEsIGFyY3NfMjBfMH0sCiAgICAgezEsIGFyY3NfMjBfMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzIxXzBbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfMjFfMFs1XSA9IHsKKyAgICB7NjcsIDF9LAorICAgIHs2OCwgMX0sCiAgICAgezY5LCAxfSwKKyAgICB7NzAsIDF9LAorICAgIHs3MSwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzIxXzFbMV0gPSB7CiAgICAgezAsIDF9LAogfTsKIHN0YXRpYyBzdGF0ZSBzdGF0ZXNfMjFbMl0gPSB7Ci0gICAgezEsIGFyY3NfMjFfMH0sCisgICAgezUsIGFyY3NfMjFfMH0sCiAgICAgezEsIGFyY3NfMjFfMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzIyXzBbMV0gPSB7Ci0gICAgezcwLCAxfSwKKyAgICB7NzIsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18yMl8xWzFdID0gewogICAgIHswLCAxfSwKQEAgLTU1NiwxNDggKzU2MiwxMzkgQEAKICAgICB7MSwgYXJjc18yMl8xfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMjNfMFsxXSA9IHsKLSAgICB7NzEsIDF9LAorICAgIHs3MywgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzIzXzFbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfMjNfMVsxXSA9IHsKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc18yM1syXSA9IHsKKyAgICB7MSwgYXJjc18yM18wfSwKKyAgICB7MSwgYXJjc18yM18xfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMjRfMFsxXSA9IHsKKyAgICB7NzQsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yNF8xWzJdID0gewogICAgIHs5LCAyfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzIzXzJbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfMjRfMlsxXSA9IHsKICAgICB7MCwgMn0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18yM1szXSA9IHsKLSAgICB7MSwgYXJjc18yM18wfSwKLSAgICB7MiwgYXJjc18yM18xfSwKLSAgICB7MSwgYXJjc18yM18yfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjRfMFsxXSA9IHsKLSAgICB7NDcsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yNF8xWzFdID0gewotICAgIHswLCAxfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzI0WzJdID0geworc3RhdGljIHN0YXRlIHN0YXRlc18yNFszXSA9IHsKICAgICB7MSwgYXJjc18yNF8wfSwKLSAgICB7MSwgYXJjc18yNF8xfSwKKyAgICB7MiwgYXJjc18yNF8xfSwKKyAgICB7MSwgYXJjc18yNF8yfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMjVfMFsxXSA9IHsKLSAgICB7NzIsIDF9LAorICAgIHs0OSwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzI1XzFbMl0gPSB7Ci0gICAgezI0LCAyfSwKK3N0YXRpYyBhcmMgYXJjc18yNV8xWzFdID0gewogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMjVfMlsyXSA9IHsKLSAgICB7NzMsIDN9LAotICAgIHswLCAyfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjVfM1sxXSA9IHsKLSAgICB7MjQsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yNV80WzFdID0gewotICAgIHswLCA0fSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzI1WzVdID0geworc3RhdGljIHN0YXRlIHN0YXRlc18yNVsyXSA9IHsKICAgICB7MSwgYXJjc18yNV8wfSwKLSAgICB7MiwgYXJjc18yNV8xfSwKLSAgICB7MiwgYXJjc18yNV8yfSwKLSAgICB7MSwgYXJjc18yNV8zfSwKLSAgICB7MSwgYXJjc18yNV80fSwKKyAgICB7MSwgYXJjc18yNV8xfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMjZfMFsyXSA9IHsKLSAgICB7NzQsIDF9LAorc3RhdGljIGFyYyBhcmNzXzI2XzBbMV0gPSB7CiAgICAgezc1LCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMjZfMVsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc18yNl8xWzJdID0geworICAgIHsyNiwgMn0sCiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMjZbMl0gPSB7Ci0gICAgezIsIGFyY3NfMjZfMH0sCi0gICAgezEsIGFyY3NfMjZfMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzI3XzBbMV0gPSB7Ci0gICAgezc2LCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjdfMVsxXSA9IHsKLSAgICB7NzcsIDJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yN18yWzFdID0geworc3RhdGljIGFyYyBhcmNzXzI2XzJbMl0gPSB7CisgICAgezc2LCAzfSwKICAgICB7MCwgMn0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18yN1szXSA9IHsKLSAgICB7MSwgYXJjc18yN18wfSwKLSAgICB7MSwgYXJjc18yN18xfSwKLSAgICB7MSwgYXJjc18yN18yfSwKK3N0YXRpYyBhcmMgYXJjc18yNl8zWzFdID0geworICAgIHsyNiwgNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzI4XzBbMV0gPSB7Ci0gICAgezczLCAxfSwKK3N0YXRpYyBhcmMgYXJjc18yNl80WzFdID0geworICAgIHswLCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMjhfMVszXSA9IHsKLSAgICB7NzgsIDJ9LAotICAgIHs3OSwgMn0sCi0gICAgezEyLCAzfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMjZbNV0gPSB7CisgICAgezEsIGFyY3NfMjZfMH0sCisgICAgezIsIGFyY3NfMjZfMX0sCisgICAgezIsIGFyY3NfMjZfMn0sCisgICAgezEsIGFyY3NfMjZfM30sCisgICAgezEsIGFyY3NfMjZfNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzI4XzJbNF0gPSB7Ci0gICAgezc4LCAyfSwKLSAgICB7NzksIDJ9LAotICAgIHsxMiwgM30sCi0gICAgezc2LCA0fSwKK3N0YXRpYyBhcmMgYXJjc18yN18wWzJdID0geworICAgIHs3NywgMX0sCisgICAgezc4LCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMjhfM1sxXSA9IHsKLSAgICB7NzYsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yOF80WzNdID0gewotICAgIHszMSwgNX0sCi0gICAgezEzLCA2fSwKLSAgICB7ODAsIDV9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yOF81WzFdID0gewotICAgIHswLCA1fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjhfNlsxXSA9IHsKLSAgICB7ODAsIDd9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yOF83WzFdID0gewotICAgIHsxNSwgNX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc18yOFs4XSA9IHsKLSAgICB7MSwgYXJjc18yOF8wfSwKLSAgICB7MywgYXJjc18yOF8xfSwKLSAgICB7NCwgYXJjc18yOF8yfSwKLSAgICB7MSwgYXJjc18yOF8zfSwKLSAgICB7MywgYXJjc18yOF80fSwKLSAgICB7MSwgYXJjc18yOF81fSwKLSAgICB7MSwgYXJjc18yOF82fSwKLSAgICB7MSwgYXJjc18yOF83fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjlfMFsxXSA9IHsKLSAgICB7MjEsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yOV8xWzJdID0gewotICAgIHs4MiwgMn0sCitzdGF0aWMgYXJjIGFyY3NfMjdfMVsxXSA9IHsKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzI5XzJbMV0gPSB7Ci0gICAgezIxLCAzfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMjdbMl0gPSB7CisgICAgezIsIGFyY3NfMjdfMH0sCisgICAgezEsIGFyY3NfMjdfMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzI4XzBbMV0gPSB7CisgICAgezc5LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMjhfMVsxXSA9IHsKKyAgICB7ODAsIDJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yOF8yWzFdID0geworICAgIHswLCAyfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzI4WzNdID0geworICAgIHsxLCBhcmNzXzI4XzB9LAorICAgIHsxLCBhcmNzXzI4XzF9LAorICAgIHsxLCBhcmNzXzI4XzJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yOV8wWzFdID0geworICAgIHs3NiwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzI5XzFbM10gPSB7CisgICAgezgxLCAyfSwKKyAgICB7ODIsIDJ9LAorICAgIHsxMiwgM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzI5XzJbNF0gPSB7CisgICAgezgxLCAyfSwKKyAgICB7ODIsIDJ9LAorICAgIHsxMiwgM30sCisgICAgezc5LCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMjlfM1sxXSA9IHsKLSAgICB7MCwgM30sCisgICAgezc5LCA0fSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzI5WzRdID0geworc3RhdGljIGFyYyBhcmNzXzI5XzRbM10gPSB7CisgICAgezMzLCA1fSwKKyAgICB7MTMsIDZ9LAorICAgIHs4MywgNX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzI5XzVbMV0gPSB7CisgICAgezAsIDV9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yOV82WzFdID0geworICAgIHs4MywgN30sCit9Oworc3RhdGljIGFyYyBhcmNzXzI5XzdbMV0gPSB7CisgICAgezE1LCA1fSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzI5WzhdID0gewogICAgIHsxLCBhcmNzXzI5XzB9LAotICAgIHsyLCBhcmNzXzI5XzF9LAotICAgIHsxLCBhcmNzXzI5XzJ9LAorICAgIHszLCBhcmNzXzI5XzF9LAorICAgIHs0LCBhcmNzXzI5XzJ9LAogICAgIHsxLCBhcmNzXzI5XzN9LAorICAgIHszLCBhcmNzXzI5XzR9LAorICAgIHsxLCBhcmNzXzI5XzV9LAorICAgIHsxLCBhcmNzXzI5XzZ9LAorICAgIHsxLCBhcmNzXzI5Xzd9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zMF8wWzFdID0gewotICAgIHsxMiwgMX0sCisgICAgezIzLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzBfMVsyXSA9IHsKLSAgICB7ODIsIDJ9LAorICAgIHs4NSwgMn0sCiAgICAgezAsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zMF8yWzFdID0gewotICAgIHsyMSwgM30sCisgICAgezIzLCAzfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzBfM1sxXSA9IHsKICAgICB7MCwgM30sCkBAIC03MDksMzcgKzcwNiw0NSBAQAogICAgIHsxLCBhcmNzXzMwXzN9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zMV8wWzFdID0gewotICAgIHs4MSwgMX0sCisgICAgezEyLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzFfMVsyXSA9IHsKLSAgICB7MzAsIDJ9LAorICAgIHs4NSwgMn0sCiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18zMV8yWzJdID0gewotICAgIHs4MSwgMX0sCi0gICAgezAsIDJ9LAorc3RhdGljIGFyYyBhcmNzXzMxXzJbMV0gPSB7CisgICAgezIzLCAzfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzMxWzNdID0geworc3RhdGljIGFyYyBhcmNzXzMxXzNbMV0gPSB7CisgICAgezAsIDN9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMzFbNF0gPSB7CiAgICAgezEsIGFyY3NfMzFfMH0sCiAgICAgezIsIGFyY3NfMzFfMX0sCi0gICAgezIsIGFyY3NfMzFfMn0sCisgICAgezEsIGFyY3NfMzFfMn0sCisgICAgezEsIGFyY3NfMzFfM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzMyXzBbMV0gPSB7Ci0gICAgezgzLCAxfSwKKyAgICB7ODQsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zMl8xWzJdID0gewotICAgIHszMCwgMH0sCisgICAgezMyLCAyfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18zMlsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc18zMl8yWzJdID0geworICAgIHs4NCwgMX0sCisgICAgezAsIDJ9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMzJbM10gPSB7CiAgICAgezEsIGFyY3NfMzJfMH0sCiAgICAgezIsIGFyY3NfMzJfMX0sCisgICAgezIsIGFyY3NfMzJfMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzMzXzBbMV0gPSB7Ci0gICAgezIxLCAxfSwKKyAgICB7ODYsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zM18xWzJdID0gewotICAgIHs3OCwgMH0sCisgICAgezMyLCAwfSwKICAgICB7MCwgMX0sCiB9Owogc3RhdGljIHN0YXRlIHN0YXRlc18zM1syXSA9IHsKQEAgLTc0NywyOCArNzUyLDI0IEBACiAgICAgezIsIGFyY3NfMzNfMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzM0XzBbMV0gPSB7Ci0gICAgezg0LCAxfSwKKyAgICB7MjMsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18zNF8xWzFdID0gewotICAgIHsyMSwgMn0sCitzdGF0aWMgYXJjIGFyY3NfMzRfMVsyXSA9IHsKKyAgICB7ODEsIDB9LAorICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMzRfMlsyXSA9IHsKLSAgICB7MzAsIDF9LAotICAgIHswLCAyfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzM0WzNdID0geworc3RhdGljIHN0YXRlIHN0YXRlc18zNFsyXSA9IHsKICAgICB7MSwgYXJjc18zNF8wfSwKLSAgICB7MSwgYXJjc18zNF8xfSwKLSAgICB7MiwgYXJjc18zNF8yfSwKKyAgICB7MiwgYXJjc18zNF8xfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzVfMFsxXSA9IHsKLSAgICB7ODUsIDF9LAorICAgIHs4NywgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzM1XzFbMV0gPSB7Ci0gICAgezIxLCAyfSwKKyAgICB7MjMsIDJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zNV8yWzJdID0gewotICAgIHszMCwgMX0sCisgICAgezMyLCAxfSwKICAgICB7MCwgMn0sCiB9Owogc3RhdGljIHN0YXRlIHN0YXRlc18zNVszXSA9IHsKQEAgLTc3Nyw1MDQgKzc3OCw1MTQgQEAKICAgICB7MiwgYXJjc18zNV8yfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzZfMFsxXSA9IHsKLSAgICB7ODYsIDF9LAorICAgIHs4OCwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzM2XzFbMV0gPSB7Ci0gICAgezI0LCAyfSwKKyAgICB7MjMsIDJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zNl8yWzJdID0gewotICAgIHszMCwgM30sCisgICAgezMyLCAxfSwKICAgICB7MCwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzM2XzNbMV0gPSB7Ci0gICAgezI0LCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMzZfNFsxXSA9IHsKLSAgICB7MCwgNH0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc18zNls1XSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMzZbM10gPSB7CiAgICAgezEsIGFyY3NfMzZfMH0sCiAgICAgezEsIGFyY3NfMzZfMX0sCiAgICAgezIsIGFyY3NfMzZfMn0sCi0gICAgezEsIGFyY3NfMzZfM30sCi0gICAgezEsIGFyY3NfMzZfNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzM3XzBbOF0gPSB7Ci0gICAgezg3LCAxfSwKLSAgICB7ODgsIDF9LAorc3RhdGljIGFyYyBhcmNzXzM3XzBbMV0gPSB7CiAgICAgezg5LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMzdfMVsxXSA9IHsKKyAgICB7MjYsIDJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18zN18yWzJdID0geworICAgIHszMiwgM30sCisgICAgezAsIDJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18zN18zWzFdID0geworICAgIHsyNiwgNH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzM3XzRbMV0gPSB7CisgICAgezAsIDR9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMzdbNV0gPSB7CisgICAgezEsIGFyY3NfMzdfMH0sCisgICAgezEsIGFyY3NfMzdfMX0sCisgICAgezIsIGFyY3NfMzdfMn0sCisgICAgezEsIGFyY3NfMzdfM30sCisgICAgezEsIGFyY3NfMzdfNH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzM4XzBbOV0gPSB7CiAgICAgezkwLCAxfSwKICAgICB7OTEsIDF9LAorICAgIHs5MiwgMX0sCisgICAgezkzLCAxfSwKKyAgICB7OTQsIDF9LAogICAgIHsxOSwgMX0sCiAgICAgezE4LCAxfSwKICAgICB7MTcsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zN18xWzFdID0gewotICAgIHswLCAxfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzM3WzJdID0gewotICAgIHs4LCBhcmNzXzM3XzB9LAotICAgIHsxLCBhcmNzXzM3XzF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zOF8wWzFdID0gewotICAgIHs5MiwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzM4XzFbMV0gPSB7Ci0gICAgezI0LCAyfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMzhfMlsxXSA9IHsKLSAgICB7MjUsIDN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zOF8zWzFdID0gewotICAgIHsyNiwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzM4XzRbM10gPSB7Ci0gICAgezkzLCAxfSwKLSAgICB7OTQsIDV9LAotICAgIHswLCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMzhfNVsxXSA9IHsKLSAgICB7MjUsIDZ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zOF82WzFdID0gewotICAgIHsyNiwgN30sCi19Owotc3RhdGljIGFyYyBhcmNzXzM4XzdbMV0gPSB7Ci0gICAgezAsIDd9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMzhbOF0gPSB7Ci0gICAgezEsIGFyY3NfMzhfMH0sCi0gICAgezEsIGFyY3NfMzhfMX0sCi0gICAgezEsIGFyY3NfMzhfMn0sCi0gICAgezEsIGFyY3NfMzhfM30sCi0gICAgezMsIGFyY3NfMzhfNH0sCi0gICAgezEsIGFyY3NfMzhfNX0sCi0gICAgezEsIGFyY3NfMzhfNn0sCi0gICAgezEsIGFyY3NfMzhfN30sCi19Owotc3RhdGljIGFyYyBhcmNzXzM5XzBbMV0gPSB7CiAgICAgezk1LCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMzlfMVsxXSA9IHsKLSAgICB7MjQsIDJ9LAorc3RhdGljIGFyYyBhcmNzXzM4XzFbMV0gPSB7CisgICAgezAsIDF9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMzhbMl0gPSB7CisgICAgezksIGFyY3NfMzhfMH0sCisgICAgezEsIGFyY3NfMzhfMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzM5XzBbMV0gPSB7CisgICAgezIxLCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMzlfMVszXSA9IHsKKyAgICB7MTksIDJ9LAorICAgIHs5NCwgMn0sCisgICAgezkyLCAyfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzlfMlsxXSA9IHsKLSAgICB7MjUsIDN9LAorICAgIHswLCAyfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMzlfM1sxXSA9IHsKLSAgICB7MjYsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zOV80WzJdID0gewotICAgIHs5NCwgNX0sCi0gICAgezAsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zOV81WzFdID0gewotICAgIHsyNSwgNn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzM5XzZbMV0gPSB7Ci0gICAgezI2LCA3fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMzlfN1sxXSA9IHsKLSAgICB7MCwgN30sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc18zOVs4XSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMzlbM10gPSB7CiAgICAgezEsIGFyY3NfMzlfMH0sCi0gICAgezEsIGFyY3NfMzlfMX0sCisgICAgezMsIGFyY3NfMzlfMX0sCiAgICAgezEsIGFyY3NfMzlfMn0sCi0gICAgezEsIGFyY3NfMzlfM30sCi0gICAgezIsIGFyY3NfMzlfNH0sCi0gICAgezEsIGFyY3NfMzlfNX0sCi0gICAgezEsIGFyY3NfMzlfNn0sCi0gICAgezEsIGFyY3NfMzlfN30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQwXzBbMV0gPSB7CiAgICAgezk2LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDBfMVsxXSA9IHsKLSAgICB7NjIsIDJ9LAorICAgIHsyNiwgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQwXzJbMV0gPSB7Ci0gICAgezk3LCAzfSwKKyAgICB7MjcsIDN9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MF8zWzFdID0gewotICAgIHs5LCA0fSwKKyAgICB7MjgsIDR9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MF80WzFdID0gewotICAgIHsyNSwgNX0sCitzdGF0aWMgYXJjIGFyY3NfNDBfNFszXSA9IHsKKyAgICB7OTcsIDF9LAorICAgIHs5OCwgNX0sCisgICAgezAsIDR9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MF81WzFdID0gewotICAgIHsyNiwgNn0sCisgICAgezI3LCA2fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDBfNlsyXSA9IHsKLSAgICB7OTQsIDd9LAotICAgIHswLCA2fSwKK3N0YXRpYyBhcmMgYXJjc180MF82WzFdID0geworICAgIHsyOCwgN30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQwXzdbMV0gPSB7Ci0gICAgezI1LCA4fSwKKyAgICB7MCwgN30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQwXzhbMV0gPSB7Ci0gICAgezI2LCA5fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNDBfOVsxXSA9IHsKLSAgICB7MCwgOX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc180MFsxMF0gPSB7CitzdGF0aWMgc3RhdGUgc3RhdGVzXzQwWzhdID0gewogICAgIHsxLCBhcmNzXzQwXzB9LAogICAgIHsxLCBhcmNzXzQwXzF9LAogICAgIHsxLCBhcmNzXzQwXzJ9LAogICAgIHsxLCBhcmNzXzQwXzN9LAotICAgIHsxLCBhcmNzXzQwXzR9LAorICAgIHszLCBhcmNzXzQwXzR9LAogICAgIHsxLCBhcmNzXzQwXzV9LAotICAgIHsyLCBhcmNzXzQwXzZ9LAorICAgIHsxLCBhcmNzXzQwXzZ9LAogICAgIHsxLCBhcmNzXzQwXzd9LAotICAgIHsxLCBhcmNzXzQwXzh9LAotICAgIHsxLCBhcmNzXzQwXzl9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MV8wWzFdID0gewotICAgIHs5OCwgMX0sCisgICAgezk5LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDFfMVsxXSA9IHsKLSAgICB7MjUsIDJ9LAorICAgIHsyNiwgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQxXzJbMV0gPSB7Ci0gICAgezI2LCAzfSwKKyAgICB7MjcsIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MV8zWzJdID0gewotICAgIHs5OSwgNH0sCi0gICAgezEwMCwgNX0sCitzdGF0aWMgYXJjIGFyY3NfNDFfM1sxXSA9IHsKKyAgICB7MjgsIDR9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MV80WzFdID0gewotICAgIHsyNSwgNn0sCitzdGF0aWMgYXJjIGFyY3NfNDFfNFsyXSA9IHsKKyAgICB7OTgsIDV9LAorICAgIHswLCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDFfNVsxXSA9IHsKLSAgICB7MjUsIDd9LAorICAgIHsyNywgNn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQxXzZbMV0gPSB7Ci0gICAgezI2LCA4fSwKKyAgICB7MjgsIDd9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MV83WzFdID0gewotICAgIHsyNiwgOX0sCisgICAgezAsIDd9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MV84WzRdID0gewotICAgIHs5OSwgNH0sCi0gICAgezk0LCAxMH0sCi0gICAgezEwMCwgNX0sCi0gICAgezAsIDh9LAotfTsKLXN0YXRpYyBhcmMgYXJjc180MV85WzFdID0gewotICAgIHswLCA5fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNDFfMTBbMV0gPSB7Ci0gICAgezI1LCAxMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzQxXzExWzFdID0gewotICAgIHsyNiwgMTJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc180MV8xMlsyXSA9IHsKLSAgICB7MTAwLCA1fSwKLSAgICB7MCwgMTJ9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDFbMTNdID0geworc3RhdGljIHN0YXRlIHN0YXRlc180MVs4XSA9IHsKICAgICB7MSwgYXJjc180MV8wfSwKICAgICB7MSwgYXJjc180MV8xfSwKICAgICB7MSwgYXJjc180MV8yfSwKLSAgICB7MiwgYXJjc180MV8zfSwKLSAgICB7MSwgYXJjc180MV80fSwKKyAgICB7MSwgYXJjc180MV8zfSwKKyAgICB7MiwgYXJjc180MV80fSwKICAgICB7MSwgYXJjc180MV81fSwKICAgICB7MSwgYXJjc180MV82fSwKICAgICB7MSwgYXJjc180MV83fSwKLSAgICB7NCwgYXJjc180MV84fSwKLSAgICB7MSwgYXJjc180MV85fSwKLSAgICB7MSwgYXJjc180MV8xMH0sCi0gICAgezEsIGFyY3NfNDFfMTF9LAotICAgIHsyLCBhcmNzXzQxXzEyfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDJfMFsxXSA9IHsKLSAgICB7MTAxLCAxfSwKKyAgICB7MTAwLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDJfMVsxXSA9IHsKLSAgICB7MTAyLCAyfSwKKyAgICB7NjUsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180Ml8yWzJdID0gewotICAgIHszMCwgMX0sCi0gICAgezI1LCAzfSwKK3N0YXRpYyBhcmMgYXJjc180Ml8yWzFdID0geworICAgIHsxMDEsIDN9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180Ml8zWzFdID0gewotICAgIHsyNiwgNH0sCisgICAgezksIDR9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180Ml80WzFdID0gewotICAgIHswLCA0fSwKKyAgICB7MjcsIDV9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDJbNV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNDJfNVsxXSA9IHsKKyAgICB7MjgsIDZ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc180Ml82WzJdID0geworICAgIHs5OCwgN30sCisgICAgezAsIDZ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc180Ml83WzFdID0geworICAgIHsyNywgOH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQyXzhbMV0gPSB7CisgICAgezI4LCA5fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDJfOVsxXSA9IHsKKyAgICB7MCwgOX0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc180MlsxMF0gPSB7CiAgICAgezEsIGFyY3NfNDJfMH0sCiAgICAgezEsIGFyY3NfNDJfMX0sCi0gICAgezIsIGFyY3NfNDJfMn0sCisgICAgezEsIGFyY3NfNDJfMn0sCiAgICAgezEsIGFyY3NfNDJfM30sCiAgICAgezEsIGFyY3NfNDJfNH0sCisgICAgezEsIGFyY3NfNDJfNX0sCisgICAgezIsIGFyY3NfNDJfNn0sCisgICAgezEsIGFyY3NfNDJfN30sCisgICAgezEsIGFyY3NfNDJfOH0sCisgICAgezEsIGFyY3NfNDJfOX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQzXzBbMV0gPSB7Ci0gICAgezI0LCAxfSwKKyAgICB7MTAyLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDNfMVsyXSA9IHsKLSAgICB7ODIsIDJ9LAotICAgIHswLCAxfSwKK3N0YXRpYyBhcmMgYXJjc180M18xWzFdID0geworICAgIHsyNywgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQzXzJbMV0gPSB7Ci0gICAgezEwMywgM30sCisgICAgezI4LCAzfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDNfM1sxXSA9IHsKLSAgICB7MCwgM30sCitzdGF0aWMgYXJjIGFyY3NfNDNfM1syXSA9IHsKKyAgICB7MTAzLCA0fSwKKyAgICB7MTA0LCA1fSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzQzWzRdID0geworc3RhdGljIGFyYyBhcmNzXzQzXzRbMV0gPSB7CisgICAgezI3LCA2fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDNfNVsxXSA9IHsKKyAgICB7MjcsIDd9LAorfTsKK3N0YXRpYyBhcmMgYXJjc180M182WzFdID0geworICAgIHsyOCwgOH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQzXzdbMV0gPSB7CisgICAgezI4LCA5fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDNfOFs0XSA9IHsKKyAgICB7MTAzLCA0fSwKKyAgICB7OTgsIDEwfSwKKyAgICB7MTA0LCA1fSwKKyAgICB7MCwgOH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQzXzlbMV0gPSB7CisgICAgezAsIDl9LAorfTsKK3N0YXRpYyBhcmMgYXJjc180M18xMFsxXSA9IHsKKyAgICB7MjcsIDExfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDNfMTFbMV0gPSB7CisgICAgezI4LCAxMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQzXzEyWzJdID0geworICAgIHsxMDQsIDV9LAorICAgIHswLCAxMn0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc180M1sxM10gPSB7CiAgICAgezEsIGFyY3NfNDNfMH0sCi0gICAgezIsIGFyY3NfNDNfMX0sCisgICAgezEsIGFyY3NfNDNfMX0sCiAgICAgezEsIGFyY3NfNDNfMn0sCi0gICAgezEsIGFyY3NfNDNfM30sCisgICAgezIsIGFyY3NfNDNfM30sCisgICAgezEsIGFyY3NfNDNfNH0sCisgICAgezEsIGFyY3NfNDNfNX0sCisgICAgezEsIGFyY3NfNDNfNn0sCisgICAgezEsIGFyY3NfNDNfN30sCisgICAgezQsIGFyY3NfNDNfOH0sCisgICAgezEsIGFyY3NfNDNfOX0sCisgICAgezEsIGFyY3NfNDNfMTB9LAorICAgIHsxLCBhcmNzXzQzXzExfSwKKyAgICB7MiwgYXJjc180M18xMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ0XzBbMV0gPSB7Ci0gICAgezEwNCwgMX0sCisgICAgezEwNSwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQ0XzFbMl0gPSB7Ci0gICAgezI0LCAyfSwKLSAgICB7MCwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNDRfMVsxXSA9IHsKKyAgICB7MTA2LCAyfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDRfMlsyXSA9IHsKLSAgICB7ODIsIDN9LAotICAgIHswLCAyfSwKKyAgICB7MzIsIDF9LAorICAgIHsyNywgM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ0XzNbMV0gPSB7Ci0gICAgezIxLCA0fSwKKyAgICB7MjgsIDR9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180NF80WzFdID0gewogICAgIHswLCA0fSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzQ0WzVdID0gewogICAgIHsxLCBhcmNzXzQ0XzB9LAotICAgIHsyLCBhcmNzXzQ0XzF9LAorICAgIHsxLCBhcmNzXzQ0XzF9LAogICAgIHsyLCBhcmNzXzQ0XzJ9LAogICAgIHsxLCBhcmNzXzQ0XzN9LAogICAgIHsxLCBhcmNzXzQ0XzR9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180NV8wWzJdID0gewotICAgIHszLCAxfSwKLSAgICB7MiwgMn0sCitzdGF0aWMgYXJjIGFyY3NfNDVfMFsxXSA9IHsKKyAgICB7MjYsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180NV8xWzFdID0geworc3RhdGljIGFyYyBhcmNzXzQ1XzFbMl0gPSB7CisgICAgezg1LCAyfSwKICAgICB7MCwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ1XzJbMV0gPSB7Ci0gICAgezEwNSwgM30sCisgICAgezEwNywgM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ1XzNbMV0gPSB7Ci0gICAgezYsIDR9LAorICAgIHswLCAzfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDVfNFsyXSA9IHsKLSAgICB7NiwgNH0sCi0gICAgezEwNiwgMX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc180NVs1XSA9IHsKLSAgICB7MiwgYXJjc180NV8wfSwKLSAgICB7MSwgYXJjc180NV8xfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNDVbNF0gPSB7CisgICAgezEsIGFyY3NfNDVfMH0sCisgICAgezIsIGFyY3NfNDVfMX0sCiAgICAgezEsIGFyY3NfNDVfMn0sCiAgICAgezEsIGFyY3NfNDVfM30sCi0gICAgezIsIGFyY3NfNDVfNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQ2XzBbMl0gPSB7Ci0gICAgezEwNywgMX0sCi0gICAgezEwOCwgMn0sCitzdGF0aWMgYXJjIGFyY3NfNDZfMFsxXSA9IHsKKyAgICB7MTA4LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDZfMVsyXSA9IHsKLSAgICB7OTIsIDN9LAorICAgIHsyNiwgMn0sCiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180Nl8yWzFdID0geworc3RhdGljIGFyYyBhcmNzXzQ2XzJbMl0gPSB7CisgICAgezg1LCAzfSwKICAgICB7MCwgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ2XzNbMV0gPSB7Ci0gICAgezEwNywgNH0sCisgICAgezIzLCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDZfNFsxXSA9IHsKLSAgICB7OTQsIDV9LAorICAgIHswLCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDZfNVsxXSA9IHsKLSAgICB7MjQsIDJ9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDZbNl0gPSB7Ci0gICAgezIsIGFyY3NfNDZfMH0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzQ2WzVdID0geworICAgIHsxLCBhcmNzXzQ2XzB9LAogICAgIHsyLCBhcmNzXzQ2XzF9LAotICAgIHsxLCBhcmNzXzQ2XzJ9LAorICAgIHsyLCBhcmNzXzQ2XzJ9LAogICAgIHsxLCBhcmNzXzQ2XzN9LAogICAgIHsxLCBhcmNzXzQ2XzR9LAotICAgIHsxLCBhcmNzXzQ2XzV9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180N18wWzJdID0gewotICAgIHsxMDcsIDF9LAotICAgIHsxMTAsIDF9LAorICAgIHszLCAxfSwKKyAgICB7MiwgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ3XzFbMV0gPSB7CiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDdbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNDdfMlsxXSA9IHsKKyAgICB7MTA5LCAzfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDdfM1sxXSA9IHsKKyAgICB7NiwgNH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQ3XzRbMl0gPSB7CisgICAgezYsIDR9LAorICAgIHsxMTAsIDF9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNDdbNV0gPSB7CiAgICAgezIsIGFyY3NfNDdfMH0sCiAgICAgezEsIGFyY3NfNDdfMX0sCisgICAgezEsIGFyY3NfNDdfMn0sCisgICAgezEsIGFyY3NfNDdfM30sCisgICAgezIsIGFyY3NfNDdfNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQ4XzBbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNDhfMFsyXSA9IHsKICAgICB7MTExLCAxfSwKKyAgICB7MTEyLCAyfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDhfMVsyXSA9IHsKLSAgICB7MzMsIDJ9LAotICAgIHsyNSwgM30sCisgICAgezk2LCAzfSwKKyAgICB7MCwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ4XzJbMV0gPSB7Ci0gICAgezI1LCAzfSwKKyAgICB7MCwgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ4XzNbMV0gPSB7Ci0gICAgezI0LCA0fSwKKyAgICB7MTExLCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDhfNFsxXSA9IHsKLSAgICB7MCwgNH0sCisgICAgezk4LCA1fSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzQ4WzVdID0gewotICAgIHsxLCBhcmNzXzQ4XzB9LAorc3RhdGljIGFyYyBhcmNzXzQ4XzVbMV0gPSB7CisgICAgezI2LCAyfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzQ4WzZdID0geworICAgIHsyLCBhcmNzXzQ4XzB9LAogICAgIHsyLCBhcmNzXzQ4XzF9LAogICAgIHsxLCBhcmNzXzQ4XzJ9LAogICAgIHsxLCBhcmNzXzQ4XzN9LAogICAgIHsxLCBhcmNzXzQ4XzR9LAorICAgIHsxLCBhcmNzXzQ4XzV9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180OV8wWzFdID0geworc3RhdGljIGFyYyBhcmNzXzQ5XzBbMl0gPSB7CiAgICAgezExMSwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzQ5XzFbMl0gPSB7Ci0gICAgezMzLCAyfSwKLSAgICB7MjUsIDN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc180OV8yWzFdID0gewotICAgIHsyNSwgM30sCi19Owotc3RhdGljIGFyYyBhcmNzXzQ5XzNbMV0gPSB7Ci0gICAgezEwOSwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzQ5XzRbMV0gPSB7Ci0gICAgezAsIDR9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDlbNV0gPSB7Ci0gICAgezEsIGFyY3NfNDlfMH0sCi0gICAgezIsIGFyY3NfNDlfMX0sCi0gICAgezEsIGFyY3NfNDlfMn0sCi0gICAgezEsIGFyY3NfNDlfM30sCi0gICAgezEsIGFyY3NfNDlfNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzUwXzBbMV0gPSB7Ci0gICAgezExMiwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzUwXzFbMl0gPSB7Ci0gICAgezExMywgMH0sCi0gICAgezAsIDF9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNTBbMl0gPSB7Ci0gICAgezEsIGFyY3NfNTBfMH0sCi0gICAgezIsIGFyY3NfNTBfMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzUxXzBbMV0gPSB7CiAgICAgezExNCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzUxXzFbMl0gPSB7Ci0gICAgezExNSwgMH0sCitzdGF0aWMgYXJjIGFyY3NfNDlfMVsxXSA9IHsKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc181MVsyXSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNDlbMl0gPSB7CisgICAgezIsIGFyY3NfNDlfMH0sCisgICAgezEsIGFyY3NfNDlfMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzUwXzBbMV0gPSB7CisgICAgezExNSwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzUwXzFbMl0gPSB7CisgICAgezM1LCAyfSwKKyAgICB7MjcsIDN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181MF8yWzFdID0geworICAgIHsyNywgM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzUwXzNbMV0gPSB7CisgICAgezI2LCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTBfNFsxXSA9IHsKKyAgICB7MCwgNH0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc181MFs1XSA9IHsKKyAgICB7MSwgYXJjc181MF8wfSwKKyAgICB7MiwgYXJjc181MF8xfSwKKyAgICB7MSwgYXJjc181MF8yfSwKKyAgICB7MSwgYXJjc181MF8zfSwKKyAgICB7MSwgYXJjc181MF80fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTFfMFsxXSA9IHsKKyAgICB7MTE1LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTFfMVsyXSA9IHsKKyAgICB7MzUsIDJ9LAorICAgIHsyNywgM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzUxXzJbMV0gPSB7CisgICAgezI3LCAzfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTFfM1sxXSA9IHsKKyAgICB7MTEzLCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTFfNFsxXSA9IHsKKyAgICB7MCwgNH0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc181MVs1XSA9IHsKICAgICB7MSwgYXJjc181MV8wfSwKICAgICB7MiwgYXJjc181MV8xfSwKKyAgICB7MSwgYXJjc181MV8yfSwKKyAgICB7MSwgYXJjc181MV8zfSwKKyAgICB7MSwgYXJjc181MV80fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNTJfMFsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc181Ml8wWzFdID0gewogICAgIHsxMTYsIDF9LAotICAgIHsxMTcsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc181Ml8xWzFdID0gewotICAgIHsxMTQsIDJ9LAorc3RhdGljIGFyYyBhcmNzXzUyXzFbMl0gPSB7CisgICAgezExNywgMH0sCisgICAgezAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc181Ml8yWzFdID0gewotICAgIHswLCAyfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzUyWzNdID0gewotICAgIHsyLCBhcmNzXzUyXzB9LAotICAgIHsxLCBhcmNzXzUyXzF9LAotICAgIHsxLCBhcmNzXzUyXzJ9LAorc3RhdGljIHN0YXRlIHN0YXRlc181MlsyXSA9IHsKKyAgICB7MSwgYXJjc181Ml8wfSwKKyAgICB7MiwgYXJjc181Ml8xfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNTNfMFsxXSA9IHsKLSAgICB7MTAzLCAxfSwKKyAgICB7MTE4LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNTNfMVsyXSA9IHsKLSAgICB7MTE4LCAwfSwKKyAgICB7MTE5LCAwfSwKICAgICB7MCwgMX0sCiB9Owogc3RhdGljIHN0YXRlIHN0YXRlc181M1syXSA9IHsKICAgICB7MSwgYXJjc181M18wfSwKICAgICB7MiwgYXJjc181M18xfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNTRfMFsxMF0gPSB7Ci0gICAgezExOSwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNTRfMFsyXSA9IHsKICAgICB7MTIwLCAxfSwKLSAgICB7MTIxLCAxfSwKLSAgICB7MTIyLCAxfSwKKyAgICB7MTIxLCAyfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTRfMVsxXSA9IHsKKyAgICB7MTE4LCAyfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTRfMlsxXSA9IHsKKyAgICB7MCwgMn0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc181NFszXSA9IHsKKyAgICB7MiwgYXJjc181NF8wfSwKKyAgICB7MSwgYXJjc181NF8xfSwKKyAgICB7MSwgYXJjc181NF8yfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTVfMFsxXSA9IHsKKyAgICB7MTA3LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTVfMVsyXSA9IHsKKyAgICB7MTIyLCAwfSwKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc181NVsyXSA9IHsKKyAgICB7MSwgYXJjc181NV8wfSwKKyAgICB7MiwgYXJjc181NV8xfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTZfMFsxMF0gPSB7CiAgICAgezEyMywgMX0sCiAgICAgezEyNCwgMX0sCiAgICAgezEyNSwgMX0sCi0gICAgezk3LCAxfSwKLSAgICB7MTE2LCAyfSwKLSAgICB7MTI2LCAzfSwKKyAgICB7MTI2LCAxfSwKKyAgICB7MTI3LCAxfSwKKyAgICB7MTI4LCAxfSwKKyAgICB7MTI5LCAxfSwKKyAgICB7MTAxLCAxfSwKKyAgICB7MTIwLCAyfSwKKyAgICB7MTMwLCAzfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNTRfMVsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc181Nl8xWzFdID0gewogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNTRfMlsxXSA9IHsKLSAgICB7OTcsIDF9LAorc3RhdGljIGFyYyBhcmNzXzU2XzJbMV0gPSB7CisgICAgezEwMSwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzU0XzNbMl0gPSB7Ci0gICAgezExNiwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNTZfM1syXSA9IHsKKyAgICB7MTIwLCAxfSwKICAgICB7MCwgM30sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc181NFs0XSA9IHsKLSAgICB7MTAsIGFyY3NfNTRfMH0sCi0gICAgezEsIGFyY3NfNTRfMX0sCi0gICAgezEsIGFyY3NfNTRfMn0sCi0gICAgezIsIGFyY3NfNTRfM30sCi19Owotc3RhdGljIGFyYyBhcmNzXzU1XzBbMV0gPSB7Ci0gICAgezMxLCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNTVfMVsxXSA9IHsKLSAgICB7MTAzLCAyfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNTVfMlsxXSA9IHsKLSAgICB7MCwgMn0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc181NVszXSA9IHsKLSAgICB7MSwgYXJjc181NV8wfSwKLSAgICB7MSwgYXJjc181NV8xfSwKLSAgICB7MSwgYXJjc181NV8yfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNTZfMFsxXSA9IHsKLSAgICB7MTI3LCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNTZfMVsyXSA9IHsKLSAgICB7MTI4LCAwfSwKLSAgICB7MCwgMX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc181NlsyXSA9IHsKLSAgICB7MSwgYXJjc181Nl8wfSwKLSAgICB7MiwgYXJjc181Nl8xfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNTZbNF0gPSB7CisgICAgezEwLCBhcmNzXzU2XzB9LAorICAgIHsxLCBhcmNzXzU2XzF9LAorICAgIHsxLCBhcmNzXzU2XzJ9LAorICAgIHsyLCBhcmNzXzU2XzN9LAogfTsKIHN0YXRpYyBhcmMgYXJjc181N18wWzFdID0gewotICAgIHsxMjksIDF9LAorICAgIHszMywgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzU3XzFbMl0gPSB7Ci0gICAgezEzMCwgMH0sCi0gICAgezAsIDF9LAorc3RhdGljIGFyYyBhcmNzXzU3XzFbMV0gPSB7CisgICAgezEwNywgMn0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc181N1syXSA9IHsKK3N0YXRpYyBhcmMgYXJjc181N18yWzFdID0geworICAgIHswLCAyfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzU3WzNdID0gewogICAgIHsxLCBhcmNzXzU3XzB9LAotICAgIHsyLCBhcmNzXzU3XzF9LAorICAgIHsxLCBhcmNzXzU3XzF9LAorICAgIHsxLCBhcmNzXzU3XzJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc181OF8wWzFdID0gewogICAgIHsxMzEsIDF9LApAQCAtMTI5MCw3NTIgKzEzMDEsNzkzIEBACiBzdGF0aWMgYXJjIGFyY3NfNTlfMFsxXSA9IHsKICAgICB7MTMzLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNTlfMVszXSA9IHsKK3N0YXRpYyBhcmMgYXJjc181OV8xWzJdID0gewogICAgIHsxMzQsIDB9LAotICAgIHsxMzUsIDB9LAogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzU5WzJdID0gewogICAgIHsxLCBhcmNzXzU5XzB9LAotICAgIHszLCBhcmNzXzU5XzF9LAorICAgIHsyLCBhcmNzXzU5XzF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc182MF8wWzFdID0gewotICAgIHsxMzYsIDF9LAorICAgIHsxMzUsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182MF8xWzNdID0gewotICAgIHsxMzcsIDB9LAotICAgIHsxMzgsIDB9LAorc3RhdGljIGFyYyBhcmNzXzYwXzFbMl0gPSB7CisgICAgezEzNiwgMH0sCiAgICAgezAsIDF9LAogfTsKIHN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjBbMl0gPSB7CiAgICAgezEsIGFyY3NfNjBfMH0sCi0gICAgezMsIGFyY3NfNjBfMX0sCisgICAgezIsIGFyY3NfNjBfMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzYxXzBbMV0gPSB7Ci0gICAgezEzOSwgMX0sCisgICAgezEzNywgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzYxXzFbNV0gPSB7Ci0gICAgezMxLCAwfSwKLSAgICB7MTQwLCAwfSwKLSAgICB7MTQxLCAwfSwKLSAgICB7MTQyLCAwfSwKK3N0YXRpYyBhcmMgYXJjc182MV8xWzNdID0geworICAgIHsxMzgsIDB9LAorICAgIHsxMzksIDB9LAogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzYxWzJdID0gewogICAgIHsxLCBhcmNzXzYxXzB9LAotICAgIHs1LCBhcmNzXzYxXzF9LAorICAgIHszLCBhcmNzXzYxXzF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182Ml8wWzRdID0gewotICAgIHsxMzcsIDF9LAotICAgIHsxMzgsIDF9LAotICAgIHsxNDMsIDF9LAotICAgIHsxNDQsIDJ9LAorc3RhdGljIGFyYyBhcmNzXzYyXzBbMV0gPSB7CisgICAgezE0MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzYyXzFbMV0gPSB7Ci0gICAgezEzOSwgMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzYyXzJbMV0gPSB7Ci0gICAgezAsIDJ9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjJbM10gPSB7Ci0gICAgezQsIGFyY3NfNjJfMH0sCi0gICAgezEsIGFyY3NfNjJfMX0sCi0gICAgezEsIGFyY3NfNjJfMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzYzXzBbMV0gPSB7Ci0gICAgezE0NSwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzYzXzFbM10gPSB7Ci0gICAgezE0NiwgMX0sCi0gICAgezMyLCAyfSwKK3N0YXRpYyBhcmMgYXJjc182Ml8xWzNdID0geworICAgIHsxNDEsIDB9LAorICAgIHsxNDIsIDB9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjNfMlsxXSA9IHsKLSAgICB7MTM5LCAzfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNjJbMl0gPSB7CisgICAgezEsIGFyY3NfNjJfMH0sCisgICAgezMsIGFyY3NfNjJfMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzYzXzNbMV0gPSB7Ci0gICAgezAsIDN9LAorc3RhdGljIGFyYyBhcmNzXzYzXzBbMV0gPSB7CisgICAgezE0MywgMX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc182M1s0XSA9IHsKK3N0YXRpYyBhcmMgYXJjc182M18xWzZdID0geworICAgIHszMywgMH0sCisgICAgezExLCAwfSwKKyAgICB7MTQ0LCAwfSwKKyAgICB7MTQ1LCAwfSwKKyAgICB7MTQ2LCAwfSwKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc182M1syXSA9IHsKICAgICB7MSwgYXJjc182M18wfSwKLSAgICB7MywgYXJjc182M18xfSwKLSAgICB7MSwgYXJjc182M18yfSwKLSAgICB7MSwgYXJjc182M18zfSwKKyAgICB7NiwgYXJjc182M18xfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjRfMFsxMF0gPSB7Ci0gICAgezEzLCAxfSwKK3N0YXRpYyBhcmMgYXJjc182NF8wWzRdID0geworICAgIHsxNDEsIDF9LAorICAgIHsxNDIsIDF9LAorICAgIHsxNDcsIDF9LAogICAgIHsxNDgsIDJ9LAotICAgIHsxNTAsIDN9LAotICAgIHsyMSwgNH0sCi0gICAgezE1MywgNH0sCi0gICAgezE1NCwgNX0sCi0gICAgezc5LCA0fSwKLSAgICB7MTU1LCA0fSwKLSAgICB7MTU2LCA0fSwKLSAgICB7MTU3LCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjRfMVszXSA9IHsKLSAgICB7NDcsIDZ9LAotICAgIHsxNDcsIDZ9LAotICAgIHsxNSwgNH0sCitzdGF0aWMgYXJjIGFyY3NfNjRfMVsxXSA9IHsKKyAgICB7MTQzLCAyfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjRfMlsyXSA9IHsKLSAgICB7MTQ3LCA3fSwKLSAgICB7MTQ5LCA0fSwKK3N0YXRpYyBhcmMgYXJjc182NF8yWzFdID0geworICAgIHswLCAyfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjRfM1syXSA9IHsKLSAgICB7MTUxLCA4fSwKLSAgICB7MTUyLCA0fSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNjRbM10gPSB7CisgICAgezQsIGFyY3NfNjRfMH0sCisgICAgezEsIGFyY3NfNjRfMX0sCisgICAgezEsIGFyY3NfNjRfMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY0XzRbMV0gPSB7Ci0gICAgezAsIDR9LAorc3RhdGljIGFyYyBhcmNzXzY1XzBbMV0gPSB7CisgICAgezE0OSwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY0XzVbMl0gPSB7Ci0gICAgezE1NCwgNX0sCi0gICAgezAsIDV9LAotfTsKLXN0YXRpYyBhcmMgYXJjc182NF82WzFdID0gewotICAgIHsxNSwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY0XzdbMV0gPSB7Ci0gICAgezE0OSwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY0XzhbMV0gPSB7Ci0gICAgezE1MiwgNH0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc182NFs5XSA9IHsKLSAgICB7MTAsIGFyY3NfNjRfMH0sCi0gICAgezMsIGFyY3NfNjRfMX0sCi0gICAgezIsIGFyY3NfNjRfMn0sCi0gICAgezIsIGFyY3NfNjRfM30sCi0gICAgezEsIGFyY3NfNjRfNH0sCi0gICAgezIsIGFyY3NfNjRfNX0sCi0gICAgezEsIGFyY3NfNjRfNn0sCi0gICAgezEsIGFyY3NfNjRfN30sCi0gICAgezEsIGFyY3NfNjRfOH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY1XzBbMl0gPSB7Ci0gICAgezI0LCAxfSwKLSAgICB7NDgsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc182NV8xWzNdID0gewotICAgIHsxNTgsIDJ9LAotICAgIHszMCwgM30sCitzdGF0aWMgYXJjIGFyY3NfNjVfMVsyXSA9IHsKKyAgICB7MzQsIDJ9LAogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNjVfMlsxXSA9IHsKLSAgICB7MCwgMn0sCisgICAgezE0MywgM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY1XzNbM10gPSB7Ci0gICAgezI0LCA0fSwKLSAgICB7NDgsIDR9LAorc3RhdGljIGFyYyBhcmNzXzY1XzNbMV0gPSB7CiAgICAgezAsIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182NV80WzJdID0gewotICAgIHszMCwgM30sCi0gICAgezAsIDR9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjVbNV0gPSB7Ci0gICAgezIsIGFyY3NfNjVfMH0sCi0gICAgezMsIGFyY3NfNjVfMX0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzY1WzRdID0geworICAgIHsxLCBhcmNzXzY1XzB9LAorICAgIHsyLCBhcmNzXzY1XzF9LAogICAgIHsxLCBhcmNzXzY1XzJ9LAotICAgIHszLCBhcmNzXzY1XzN9LAotICAgIHsyLCBhcmNzXzY1XzR9LAorICAgIHsxLCBhcmNzXzY1XzN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182Nl8wWzNdID0geworc3RhdGljIGFyYyBhcmNzXzY2XzBbMl0gPSB7CisgICAgezE1MCwgMX0sCisgICAgezE1MSwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzY2XzFbMV0gPSB7CisgICAgezE1MSwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzY2XzJbMl0gPSB7CisgICAgezE1MiwgMn0sCisgICAgezAsIDJ9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNjZbM10gPSB7CisgICAgezIsIGFyY3NfNjZfMH0sCisgICAgezEsIGFyY3NfNjZfMX0sCisgICAgezIsIGFyY3NfNjZfMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzY3XzBbMTBdID0gewogICAgIHsxMywgMX0sCi0gICAgezE0OCwgMn0sCi0gICAgezc4LCAzfSwKKyAgICB7MTU0LCAyfSwKKyAgICB7MTU2LCAzfSwKKyAgICB7MjMsIDR9LAorICAgIHsxNTksIDR9LAorICAgIHsxNjAsIDV9LAorICAgIHs4MiwgNH0sCisgICAgezE2MSwgNH0sCisgICAgezE2MiwgNH0sCisgICAgezE2MywgNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY2XzFbMl0gPSB7Ci0gICAgezE0LCA0fSwKLSAgICB7MTUsIDV9LAotfTsKLXN0YXRpYyBhcmMgYXJjc182Nl8yWzFdID0gewotICAgIHsxNTksIDZ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc182Nl8zWzFdID0gewotICAgIHsyMSwgNX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY2XzRbMV0gPSB7Ci0gICAgezE1LCA1fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNjZfNVsxXSA9IHsKLSAgICB7MCwgNX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY2XzZbMV0gPSB7Ci0gICAgezE0OSwgNX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc182Nls3XSA9IHsKLSAgICB7MywgYXJjc182Nl8wfSwKLSAgICB7MiwgYXJjc182Nl8xfSwKLSAgICB7MSwgYXJjc182Nl8yfSwKLSAgICB7MSwgYXJjc182Nl8zfSwKLSAgICB7MSwgYXJjc182Nl80fSwKLSAgICB7MSwgYXJjc182Nl81fSwKLSAgICB7MSwgYXJjc182Nl82fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNjdfMFsxXSA9IHsKLSAgICB7MTYwLCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNjdfMVsyXSA9IHsKLSAgICB7MzAsIDJ9LAotICAgIHswLCAxfSwKK3N0YXRpYyBhcmMgYXJjc182N18xWzNdID0geworICAgIHs0OSwgNn0sCisgICAgezE1MywgNn0sCisgICAgezE1LCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNjdfMlsyXSA9IHsKLSAgICB7MTYwLCAxfSwKLSAgICB7MCwgMn0sCisgICAgezE1MywgN30sCisgICAgezE1NSwgNH0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc182N1szXSA9IHsKLSAgICB7MSwgYXJjc182N18wfSwKLSAgICB7MiwgYXJjc182N18xfSwKK3N0YXRpYyBhcmMgYXJjc182N18zWzJdID0geworICAgIHsxNTcsIDh9LAorICAgIHsxNTgsIDR9LAorfTsKK3N0YXRpYyBhcmMgYXJjc182N180WzFdID0geworICAgIHswLCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNjdfNVsyXSA9IHsKKyAgICB7MTYwLCA1fSwKKyAgICB7MCwgNX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzY3XzZbMV0gPSB7CisgICAgezE1LCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNjdfN1sxXSA9IHsKKyAgICB7MTU1LCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNjdfOFsxXSA9IHsKKyAgICB7MTU4LCA0fSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzY3WzldID0geworICAgIHsxMCwgYXJjc182N18wfSwKKyAgICB7MywgYXJjc182N18xfSwKICAgICB7MiwgYXJjc182N18yfSwKKyAgICB7MiwgYXJjc182N18zfSwKKyAgICB7MSwgYXJjc182N180fSwKKyAgICB7MiwgYXJjc182N181fSwKKyAgICB7MSwgYXJjc182N182fSwKKyAgICB7MSwgYXJjc182N183fSwKKyAgICB7MSwgYXJjc182N184fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNjhfMFsyXSA9IHsKLSAgICB7MjQsIDF9LAotICAgIHsyNSwgMn0sCisgICAgezI2LCAxfSwKKyAgICB7NTAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182OF8xWzJdID0gewotICAgIHsyNSwgMn0sCitzdGF0aWMgYXJjIGFyY3NfNjhfMVszXSA9IHsKKyAgICB7MTY0LCAyfSwKKyAgICB7MzIsIDN9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjhfMlszXSA9IHsKLSAgICB7MjQsIDN9LAotICAgIHsxNjEsIDR9LAorc3RhdGljIGFyYyBhcmNzXzY4XzJbMV0gPSB7CiAgICAgezAsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182OF8zWzJdID0gewotICAgIHsxNjEsIDR9LAorc3RhdGljIGFyYyBhcmNzXzY4XzNbM10gPSB7CisgICAgezI2LCA0fSwKKyAgICB7NTAsIDR9LAogICAgIHswLCAzfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjhfNFsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc182OF80WzJdID0geworICAgIHszMiwgM30sCiAgICAgezAsIDR9LAogfTsKIHN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjhbNV0gPSB7CiAgICAgezIsIGFyY3NfNjhfMH0sCi0gICAgezIsIGFyY3NfNjhfMX0sCi0gICAgezMsIGFyY3NfNjhfMn0sCi0gICAgezIsIGFyY3NfNjhfM30sCi0gICAgezEsIGFyY3NfNjhfNH0sCisgICAgezMsIGFyY3NfNjhfMX0sCisgICAgezEsIGFyY3NfNjhfMn0sCisgICAgezMsIGFyY3NfNjhfM30sCisgICAgezIsIGFyY3NfNjhfNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY5XzBbMV0gPSB7Ci0gICAgezI1LCAxfSwKK3N0YXRpYyBhcmMgYXJjc182OV8wWzNdID0geworICAgIHsxMywgMX0sCisgICAgezE1NCwgMn0sCisgICAgezgxLCAzfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNjlfMVsyXSA9IHsKLSAgICB7MjQsIDJ9LAotICAgIHswLCAxfSwKKyAgICB7MTQsIDR9LAorICAgIHsxNSwgNX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzY5XzJbMV0gPSB7Ci0gICAgezAsIDJ9LAorICAgIHsxNjUsIDZ9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjlbM10gPSB7Ci0gICAgezEsIGFyY3NfNjlfMH0sCitzdGF0aWMgYXJjIGFyY3NfNjlfM1sxXSA9IHsKKyAgICB7MjMsIDV9LAorfTsKK3N0YXRpYyBhcmMgYXJjc182OV80WzFdID0geworICAgIHsxNSwgNX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzY5XzVbMV0gPSB7CisgICAgezAsIDV9LAorfTsKK3N0YXRpYyBhcmMgYXJjc182OV82WzFdID0geworICAgIHsxNTUsIDV9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNjlbN10gPSB7CisgICAgezMsIGFyY3NfNjlfMH0sCiAgICAgezIsIGFyY3NfNjlfMX0sCiAgICAgezEsIGFyY3NfNjlfMn0sCisgICAgezEsIGFyY3NfNjlfM30sCisgICAgezEsIGFyY3NfNjlfNH0sCisgICAgezEsIGFyY3NfNjlfNX0sCisgICAgezEsIGFyY3NfNjlfNn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcwXzBbMl0gPSB7Ci0gICAgezEwMywgMX0sCi0gICAgezQ4LCAxfSwKK3N0YXRpYyBhcmMgYXJjc183MF8wWzFdID0geworICAgIHsxNjYsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc183MF8xWzJdID0gewotICAgIHszMCwgMn0sCisgICAgezMyLCAyfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcwXzJbM10gPSB7Ci0gICAgezEwMywgMX0sCi0gICAgezQ4LCAxfSwKK3N0YXRpYyBhcmMgYXJjc183MF8yWzJdID0geworICAgIHsxNjYsIDF9LAogICAgIHswLCAyfSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzcwWzNdID0gewotICAgIHsyLCBhcmNzXzcwXzB9LAorICAgIHsxLCBhcmNzXzcwXzB9LAogICAgIHsyLCBhcmNzXzcwXzF9LAotICAgIHszLCBhcmNzXzcwXzJ9LAorICAgIHsyLCBhcmNzXzcwXzJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183MV8wWzFdID0gewotICAgIHsyNCwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNzFfMFsyXSA9IHsKKyAgICB7MjYsIDF9LAorICAgIHsyNywgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzcxXzFbMl0gPSB7Ci0gICAgezMwLCAyfSwKKyAgICB7MjcsIDJ9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzFfMlsyXSA9IHsKLSAgICB7MjQsIDF9LAorc3RhdGljIGFyYyBhcmNzXzcxXzJbM10gPSB7CisgICAgezI2LCAzfSwKKyAgICB7MTY3LCA0fSwKICAgICB7MCwgMn0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc183MVszXSA9IHsKLSAgICB7MSwgYXJjc183MV8wfSwKK3N0YXRpYyBhcmMgYXJjc183MV8zWzJdID0geworICAgIHsxNjcsIDR9LAorICAgIHswLCAzfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzFfNFsxXSA9IHsKKyAgICB7MCwgNH0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc183MVs1XSA9IHsKKyAgICB7MiwgYXJjc183MV8wfSwKICAgICB7MiwgYXJjc183MV8xfSwKLSAgICB7MiwgYXJjc183MV8yfSwKKyAgICB7MywgYXJjc183MV8yfSwKKyAgICB7MiwgYXJjc183MV8zfSwKKyAgICB7MSwgYXJjc183MV80fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNzJfMFsxXSA9IHsKLSAgICB7MjQsIDF9LAorICAgIHsyNywgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzFbNF0gPSB7Ci0gICAgezI1LCAyfSwKLSAgICB7MTU4LCAzfSwKLSAgICB7MzAsIDR9LAorc3RhdGljIGFyYyBhcmNzXzcyXzFbMl0gPSB7CisgICAgezI2LCAyfSwKICAgICB7MCwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzcyXzJbMV0gPSB7Ci0gICAgezI0LCA1fSwKKyAgICB7MCwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzNbMV0gPSB7Ci0gICAgezAsIDN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183Ml80WzJdID0gewotICAgIHsyNCwgNn0sCi0gICAgezAsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183Ml81WzNdID0gewotICAgIHsxNTgsIDN9LAotICAgIHszMCwgN30sCi0gICAgezAsIDV9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183Ml82WzJdID0gewotICAgIHszMCwgNH0sCi0gICAgezAsIDZ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183Ml83WzJdID0gewotICAgIHsyNCwgOH0sCi0gICAgezAsIDd9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183Ml84WzFdID0gewotICAgIHsyNSwgOX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzcyXzlbMV0gPSB7Ci0gICAgezI0LCAxMH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzcyXzEwWzJdID0gewotICAgIHszMCwgN30sCi0gICAgezAsIDEwfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzcyWzExXSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNzJbM10gPSB7CiAgICAgezEsIGFyY3NfNzJfMH0sCi0gICAgezQsIGFyY3NfNzJfMX0sCisgICAgezIsIGFyY3NfNzJfMX0sCiAgICAgezEsIGFyY3NfNzJfMn0sCi0gICAgezEsIGFyY3NfNzJfM30sCi0gICAgezIsIGFyY3NfNzJfNH0sCi0gICAgezMsIGFyY3NfNzJfNX0sCi0gICAgezIsIGFyY3NfNzJfNn0sCi0gICAgezIsIGFyY3NfNzJfN30sCi0gICAgezEsIGFyY3NfNzJfOH0sCi0gICAgezEsIGFyY3NfNzJfOX0sCi0gICAgezIsIGFyY3NfNzJfMTB9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183M18wWzFdID0gewotICAgIHsxNjIsIDF9LAorc3RhdGljIGFyYyBhcmNzXzczXzBbMl0gPSB7CisgICAgezEwNywgMX0sCisgICAgezUwLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzNfMVsxXSA9IHsKLSAgICB7MjEsIDJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183M18yWzJdID0gewotICAgIHsxMywgM30sCi0gICAgezI1LCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNzNfM1syXSA9IHsKLSAgICB7MTQsIDV9LAotICAgIHsxNSwgNn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzczXzRbMV0gPSB7Ci0gICAgezI2LCA3fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNzNfNVsxXSA9IHsKLSAgICB7MTUsIDZ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183M182WzFdID0gewotICAgIHsyNSwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzczXzdbMV0gPSB7Ci0gICAgezAsIDd9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNzNbOF0gPSB7Ci0gICAgezEsIGFyY3NfNzNfMH0sCi0gICAgezEsIGFyY3NfNzNfMX0sCi0gICAgezIsIGFyY3NfNzNfMn0sCi0gICAgezIsIGFyY3NfNzNfM30sCi0gICAgezEsIGFyY3NfNzNfNH0sCi0gICAgezEsIGFyY3NfNzNfNX0sCi0gICAgezEsIGFyY3NfNzNfNn0sCi0gICAgezEsIGFyY3NfNzNfN30sCi19Owotc3RhdGljIGFyYyBhcmNzXzc0XzBbM10gPSB7Ci0gICAgezE2MywgMX0sCi0gICAgezMxLCAyfSwKLSAgICB7MzIsIDN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183NF8xWzJdID0gewotICAgIHszMCwgNH0sCitzdGF0aWMgYXJjIGFyY3NfNzNfMVsyXSA9IHsKKyAgICB7MzIsIDJ9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzRfMlsxXSA9IHsKLSAgICB7MjQsIDV9LAorc3RhdGljIGFyYyBhcmNzXzczXzJbM10gPSB7CisgICAgezEwNywgMX0sCisgICAgezUwLCAxfSwKKyAgICB7MCwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzc0XzNbMV0gPSB7Ci0gICAgezI0LCA2fSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNzNbM10gPSB7CisgICAgezIsIGFyY3NfNzNfMH0sCisgICAgezIsIGFyY3NfNzNfMX0sCisgICAgezMsIGFyY3NfNzNfMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzc0XzRbNF0gPSB7Ci0gICAgezE2MywgMX0sCi0gICAgezMxLCAyfSwKLSAgICB7MzIsIDN9LAotICAgIHswLCA0fSwKK3N0YXRpYyBhcmMgYXJjc183NF8wWzFdID0geworICAgIHsyNiwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzc0XzVbMl0gPSB7Ci0gICAgezMwLCA3fSwKLSAgICB7MCwgNX0sCitzdGF0aWMgYXJjIGFyY3NfNzRfMVsyXSA9IHsKKyAgICB7MzIsIDJ9LAorICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzRfNlsxXSA9IHsKLSAgICB7MCwgNn0sCitzdGF0aWMgYXJjIGFyY3NfNzRfMlsyXSA9IHsKKyAgICB7MjYsIDF9LAorICAgIHswLCAyfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzRfN1syXSA9IHsKLSAgICB7MTYzLCA1fSwKLSAgICB7MzIsIDN9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNzRbOF0gPSB7Ci0gICAgezMsIGFyY3NfNzRfMH0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzc0WzNdID0geworICAgIHsxLCBhcmNzXzc0XzB9LAogICAgIHsyLCBhcmNzXzc0XzF9LAotICAgIHsxLCBhcmNzXzc0XzJ9LAotICAgIHsxLCBhcmNzXzc0XzN9LAotICAgIHs0LCBhcmNzXzc0XzR9LAotICAgIHsyLCBhcmNzXzc0XzV9LAotICAgIHsxLCBhcmNzXzc0XzZ9LAotICAgIHsyLCBhcmNzXzc0Xzd9LAorICAgIHsyLCBhcmNzXzc0XzJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183NV8wWzFdID0gewotICAgIHsyNCwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNzVfMFszXSA9IHsKKyAgICB7MjYsIDF9LAorICAgIHszNCwgMn0sCisgICAgezUwLCAzfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzVfMVszXSA9IHsKLSAgICB7MTU4LCAyfSwKLSAgICB7MjksIDN9LAorc3RhdGljIGFyYyBhcmNzXzc1XzFbNF0gPSB7CisgICAgezI3LCA0fSwKKyAgICB7MTY0LCA1fSwKKyAgICB7MzIsIDZ9LAogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNzVfMlsxXSA9IHsKLSAgICB7MCwgMn0sCisgICAgezEwNywgN30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzc1XzNbMV0gPSB7Ci0gICAgezI0LCAyfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzc1WzRdID0gewotICAgIHsxLCBhcmNzXzc1XzB9LAotICAgIHszLCBhcmNzXzc1XzF9LAotICAgIHsxLCBhcmNzXzc1XzJ9LAotICAgIHsxLCBhcmNzXzc1XzN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183Nl8wWzJdID0gewotICAgIHsxNTgsIDF9LAotICAgIHsxNjUsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183Nl8xWzFdID0gewotICAgIHswLCAxfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzc2WzJdID0gewotICAgIHsyLCBhcmNzXzc2XzB9LAotICAgIHsxLCBhcmNzXzc2XzF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183N18wWzFdID0gewotICAgIHs5NiwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzc3XzFbMV0gPSB7Ci0gICAgezYyLCAyfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNzdfMlsxXSA9IHsKLSAgICB7OTcsIDN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183N18zWzFdID0gewotICAgIHsxMDcsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc183N180WzJdID0geworc3RhdGljIGFyYyBhcmNzXzc1XzNbM10gPSB7CiAgICAgezE2NCwgNX0sCi0gICAgezAsIDR9LAorICAgIHszMiwgNn0sCisgICAgezAsIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183N181WzFdID0geworc3RhdGljIGFyYyBhcmNzXzc1XzRbMV0gPSB7CisgICAgezI2LCA3fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzVfNVsxXSA9IHsKICAgICB7MCwgNX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc183N1s2XSA9IHsKLSAgICB7MSwgYXJjc183N18wfSwKLSAgICB7MSwgYXJjc183N18xfSwKLSAgICB7MSwgYXJjc183N18yfSwKLSAgICB7MSwgYXJjc183N18zfSwKLSAgICB7MiwgYXJjc183N180fSwKLSAgICB7MSwgYXJjc183N181fSwKK3N0YXRpYyBhcmMgYXJjc183NV82WzNdID0geworICAgIHsyNiwgOH0sCisgICAgezUwLCA4fSwKKyAgICB7MCwgNn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzc4XzBbMV0gPSB7Ci0gICAgezkyLCAxfSwKK3N0YXRpYyBhcmMgYXJjc183NV83WzNdID0geworICAgIHsxNjQsIDV9LAorICAgIHszMiwgOX0sCisgICAgezAsIDd9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183OF8xWzFdID0gewotICAgIHsxMDksIDJ9LAorc3RhdGljIGFyYyBhcmNzXzc1XzhbMl0gPSB7CisgICAgezMyLCA2fSwKKyAgICB7MCwgOH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzc4XzJbMl0gPSB7Ci0gICAgezE2NCwgM30sCitzdGF0aWMgYXJjIGFyY3NfNzVfOVszXSA9IHsKKyAgICB7MjYsIDEwfSwKKyAgICB7MzQsIDExfSwKKyAgICB7MCwgOX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzc1XzEwWzFdID0geworICAgIHsyNywgMTJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183NV8xMVsxXSA9IHsKKyAgICB7MTA3LCAxM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzc1XzEyWzFdID0geworICAgIHsyNiwgMTN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183NV8xM1syXSA9IHsKKyAgICB7MzIsIDl9LAorICAgIHswLCAxM30sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc183NVsxNF0gPSB7CisgICAgezMsIGFyY3NfNzVfMH0sCisgICAgezQsIGFyY3NfNzVfMX0sCisgICAgezEsIGFyY3NfNzVfMn0sCisgICAgezMsIGFyY3NfNzVfM30sCisgICAgezEsIGFyY3NfNzVfNH0sCisgICAgezEsIGFyY3NfNzVfNX0sCisgICAgezMsIGFyY3NfNzVfNn0sCisgICAgezMsIGFyY3NfNzVfN30sCisgICAgezIsIGFyY3NfNzVfOH0sCisgICAgezMsIGFyY3NfNzVfOX0sCisgICAgezEsIGFyY3NfNzVfMTB9LAorICAgIHsxLCBhcmNzXzc1XzExfSwKKyAgICB7MSwgYXJjc183NV8xMn0sCisgICAgezIsIGFyY3NfNzVfMTN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Nl8wWzFdID0geworICAgIHsxNjgsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Nl8xWzFdID0geworICAgIHsyMywgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzc2XzJbMl0gPSB7CisgICAgezEzLCAzfSwKKyAgICB7MjcsIDR9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Nl8zWzJdID0geworICAgIHsxNCwgNX0sCisgICAgezE1LCA2fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzZfNFsxXSA9IHsKKyAgICB7MjgsIDd9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Nl81WzFdID0geworICAgIHsxNSwgNn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzc2XzZbMV0gPSB7CisgICAgezI3LCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzZfN1sxXSA9IHsKKyAgICB7MCwgN30sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc183Nls4XSA9IHsKKyAgICB7MSwgYXJjc183Nl8wfSwKKyAgICB7MSwgYXJjc183Nl8xfSwKKyAgICB7MiwgYXJjc183Nl8yfSwKKyAgICB7MiwgYXJjc183Nl8zfSwKKyAgICB7MSwgYXJjc183Nl80fSwKKyAgICB7MSwgYXJjc183Nl81fSwKKyAgICB7MSwgYXJjc183Nl82fSwKKyAgICB7MSwgYXJjc183Nl83fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzdfMFsxXSA9IHsKKyAgICB7MTY5LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzdfMVsyXSA9IHsKKyAgICB7MzIsIDJ9LAorICAgIHswLCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzdfMlsyXSA9IHsKKyAgICB7MTY5LCAxfSwKICAgICB7MCwgMn0sCiB9Oworc3RhdGljIHN0YXRlIHN0YXRlc183N1szXSA9IHsKKyAgICB7MSwgYXJjc183N18wfSwKKyAgICB7MiwgYXJjc183N18xfSwKKyAgICB7MiwgYXJjc183N18yfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzhfMFszXSA9IHsKKyAgICB7MjYsIDF9LAorICAgIHszNCwgMn0sCisgICAgezMzLCAyfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzhfMVszXSA9IHsKKyAgICB7MTY0LCAzfSwKKyAgICB7MzEsIDJ9LAorICAgIHswLCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzhfMlsxXSA9IHsKKyAgICB7MjYsIDN9LAorfTsKIHN0YXRpYyBhcmMgYXJjc183OF8zWzFdID0gewogICAgIHswLCAzfSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzc4WzRdID0gewotICAgIHsxLCBhcmNzXzc4XzB9LAotICAgIHsxLCBhcmNzXzc4XzF9LAotICAgIHsyLCBhcmNzXzc4XzJ9LAorICAgIHszLCBhcmNzXzc4XzB9LAorICAgIHszLCBhcmNzXzc4XzF9LAorICAgIHsxLCBhcmNzXzc4XzJ9LAogICAgIHsxLCBhcmNzXzc4XzN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183OV8wWzFdID0gewotICAgIHsyMSwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNzlfMFsyXSA9IHsKKyAgICB7MTY0LCAxfSwKKyAgICB7MTcxLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNzlfMVsxXSA9IHsKICAgICB7MCwgMX0sCiB9Owogc3RhdGljIHN0YXRlIHN0YXRlc183OVsyXSA9IHsKLSAgICB7MSwgYXJjc183OV8wfSwKKyAgICB7MiwgYXJjc183OV8wfSwKICAgICB7MSwgYXJjc183OV8xfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfODBfMFsxXSA9IHsKLSAgICB7MTY3LCAxfSwKKyAgICB7MTAwLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfODBfMVsyXSA9IHsKLSAgICB7MTY4LCAyfSwKLSAgICB7MCwgMX0sCitzdGF0aWMgYXJjIGFyY3NfODBfMVsxXSA9IHsKKyAgICB7NjUsIDJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc184MF8yWzFdID0gewotICAgIHswLCAyfSwKKyAgICB7MTAxLCAzfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzgwWzNdID0geworc3RhdGljIGFyYyBhcmNzXzgwXzNbMV0gPSB7CisgICAgezExMSwgNH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzgwXzRbMl0gPSB7CisgICAgezE3MCwgNX0sCisgICAgezAsIDR9LAorfTsKK3N0YXRpYyBhcmMgYXJjc184MF81WzFdID0geworICAgIHswLCA1fSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzgwWzZdID0gewogICAgIHsxLCBhcmNzXzgwXzB9LAotICAgIHsyLCBhcmNzXzgwXzF9LAorICAgIHsxLCBhcmNzXzgwXzF9LAogICAgIHsxLCBhcmNzXzgwXzJ9LAorICAgIHsxLCBhcmNzXzgwXzN9LAorICAgIHsyLCBhcmNzXzgwXzR9LAorICAgIHsxLCBhcmNzXzgwXzV9LAogfTsKLXN0YXRpYyBhcmMgYXJjc184MV8wWzJdID0gewotICAgIHs3MywgMX0sCi0gICAgezksIDJ9LAorc3RhdGljIGFyYyBhcmNzXzgxXzBbMV0gPSB7CisgICAgezk2LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfODFfMVsxXSA9IHsKLSAgICB7MjQsIDJ9LAorICAgIHsxMTMsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc184MV8yWzFdID0geworc3RhdGljIGFyYyBhcmNzXzgxXzJbMl0gPSB7CisgICAgezE3MCwgM30sCiAgICAgezAsIDJ9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfODFbM10gPSB7Ci0gICAgezIsIGFyY3NfODFfMH0sCi0gICAgezEsIGFyY3NfODFfMX0sCi0gICAgezEsIGFyY3NfODFfMn0sCitzdGF0aWMgYXJjIGFyY3NfODFfM1sxXSA9IHsKKyAgICB7MCwgM30sCiB9Owotc3RhdGljIGRmYSBkZmFzWzgyXSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfODFbNF0gPSB7CisgICAgezEsIGFyY3NfODFfMH0sCisgICAgezEsIGFyY3NfODFfMX0sCisgICAgezIsIGFyY3NfODFfMn0sCisgICAgezEsIGFyY3NfODFfM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzgyXzBbMV0gPSB7CisgICAgezIzLCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfODJfMVsxXSA9IHsKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc184MlsyXSA9IHsKKyAgICB7MSwgYXJjc184Ml8wfSwKKyAgICB7MSwgYXJjc184Ml8xfSwKK307CitzdGF0aWMgYXJjIGFyY3NfODNfMFsxXSA9IHsKKyAgICB7MTczLCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfODNfMVsyXSA9IHsKKyAgICB7MTc0LCAyfSwKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzgzXzJbMV0gPSB7CisgICAgezAsIDJ9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfODNbM10gPSB7CisgICAgezEsIGFyY3NfODNfMH0sCisgICAgezIsIGFyY3NfODNfMX0sCisgICAgezEsIGFyY3NfODNfMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzg0XzBbMl0gPSB7CisgICAgezc2LCAxfSwKKyAgICB7OSwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzg0XzFbMV0gPSB7CisgICAgezI2LCAyfSwKK307CitzdGF0aWMgYXJjIGFyY3NfODRfMlsxXSA9IHsKKyAgICB7MCwgMn0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc184NFszXSA9IHsKKyAgICB7MiwgYXJjc184NF8wfSwKKyAgICB7MSwgYXJjc184NF8xfSwKKyAgICB7MSwgYXJjc184NF8yfSwKK307CitzdGF0aWMgZGZhIGRmYXNbODVdID0gewogICAgIHsyNTYsICJzaW5nbGVfaW5wdXQiLCAwLCAzLCBzdGF0ZXNfMCwKLSAgICAgIlwwMDRcMDUwXDA2MFwyMDBcMDAwXDAwMFwwMDBcMjQwXDM0MFwyMjNcMTYwXDIyMFwwNDVcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDIwNFwwMDAifSwKKyAgICAgIlwwMDRcMDUwXDM0MFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwNVwyMzdcMjA0XDAwM1wxMzFcMDAyXDAxMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwNDEifSwKICAgICB7MjU3LCAiZmlsZV9pbnB1dCIsIDAsIDIsIHN0YXRlc18xLAotICAgICAiXDIwNFwwNTBcMDYwXDIwMFwwMDBcMDAwXDAwMFwyNDBcMzQwXDIyM1wxNjBcMjIwXDA0NVwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMjA0XDAwMCJ9LAorICAgICAiXDIwNFwwNTBcMzQwXDAwMFwwMDJcMDAwXDAwMFwwMDBcMDA1XDIzN1wyMDRcMDAzXDEzMVwwMDJcMDEwXDAwMVwwMDBcMTQwXDExMFwyMjRcMDE3XDA0MSJ9LAogICAgIHsyNTgsICJldmFsX2lucHV0IiwgMCwgMywgc3RhdGVzXzIsCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDBcMDAwIn0sCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMTBcMDAxXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCiAgICAgezI1OSwgImRlY29yYXRvciIsIDAsIDcsIHN0YXRlc18zLAogICAgICAiXDAwMFwwMTBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAogICAgIHsyNjAsICJkZWNvcmF0b3JzIiwgMCwgMiwgc3RhdGVzXzQsCiAgICAgICJcMDAwXDAxMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezI2MSwgImRlY29yYXRlZCIsIDAsIDMsIHN0YXRlc181LAogICAgICAiXDAwMFwwMTBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNjIsICJmdW5jZGVmIiwgMCwgOCwgc3RhdGVzXzYsCi0gICAgICJcMDAwXDAwMFwwMjBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI2MywgInBhcmFtZXRlcnMiLCAwLCA0LCBzdGF0ZXNfNywKKyAgICB7MjYyLCAiYXN5bmNfZnVuY2RlZiIsIDAsIDMsIHN0YXRlc182LAorICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyNjMsICJmdW5jZGVmIiwgMCwgOCwgc3RhdGVzXzcsCisgICAgICJcMDAwXDAwMFwxMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI2NCwgInBhcmFtZXRlcnMiLCAwLCA0LCBzdGF0ZXNfOCwKICAgICAgIlwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjY0LCAidHlwZWRhcmdzbGlzdCIsIDAsIDE4LCBzdGF0ZXNfOCwKLSAgICAgIlwwMDBcMDAwXDA0MFwyMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjY1LCAidGZwZGVmIiwgMCwgNCwgc3RhdGVzXzksCi0gICAgICJcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI2NiwgInZhcmFyZ3NsaXN0IiwgMCwgMTgsIHN0YXRlc18xMCwKLSAgICAgIlwwMDBcMDAwXDA0MFwyMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjY3LCAidmZwZGVmIiwgMCwgMiwgc3RhdGVzXzExLAotICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNjgsICJzdG10IiwgMCwgMiwgc3RhdGVzXzEyLAotICAgICAiXDAwMFwwNTBcMDYwXDIwMFwwMDBcMDAwXDAwMFwyNDBcMzQwXDIyM1wxNjBcMjIwXDA0NVwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMjA0XDAwMCJ9LAotICAgIHsyNjksICJzaW1wbGVfc3RtdCIsIDAsIDQsIHN0YXRlc18xMywKLSAgICAgIlwwMDBcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMjQwXDM0MFwyMjNcMTYwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDIwMFwwMDAifSwKLSAgICB7MjcwLCAic21hbGxfc3RtdCIsIDAsIDIsIHN0YXRlc18xNCwKLSAgICAgIlwwMDBcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMjQwXDM0MFwyMjNcMTYwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDIwMFwwMDAifSwKLSAgICB7MjcxLCAiZXhwcl9zdG10IiwgMCwgNiwgc3RhdGVzXzE1LAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwXDAwMCJ9LAotICAgIHsyNzIsICJ0ZXN0bGlzdF9zdGFyX2V4cHIiLCAwLCAzLCBzdGF0ZXNfMTYsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDBcMDAwIn0sCi0gICAgezI3MywgImF1Z2Fzc2lnbiIsIDAsIDIsIHN0YXRlc18xNywKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwzNzZcMDM3XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjc0LCAiZGVsX3N0bXQiLCAwLCAzLCBzdGF0ZXNfMTgsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI3NSwgInBhc3Nfc3RtdCIsIDAsIDIsIHN0YXRlc18xOSwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjc2LCAiZmxvd19zdG10IiwgMCwgMiwgc3RhdGVzXzIwLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMzQwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMCJ9LAotICAgIHsyNzcsICJicmVha19zdG10IiwgMCwgMiwgc3RhdGVzXzIxLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNzgsICJjb250aW51ZV9zdG10IiwgMCwgMiwgc3RhdGVzXzIyLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNzksICJyZXR1cm5fc3RtdCIsIDAsIDMsIHN0YXRlc18yMywKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjgwLCAieWllbGRfc3RtdCIsIDAsIDIsIHN0YXRlc18yNCwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDAifSwKLSAgICB7MjgxLCAicmFpc2Vfc3RtdCIsIDAsIDUsIHN0YXRlc18yNSwKKyAgICB7MjY1LCAidHlwZWRhcmdzbGlzdCIsIDAsIDE4LCBzdGF0ZXNfOSwKKyAgICAgIlwwMDBcMDAwXDIwMFwwMDBcMDA2XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MjY2LCAidGZwZGVmIiwgMCwgNCwgc3RhdGVzXzEwLAorICAgICAiXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyNjcsICJ2YXJhcmdzbGlzdCIsIDAsIDE4LCBzdGF0ZXNfMTEsCisgICAgICJcMDAwXDAwMFwyMDBcMDAwXDAwNlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI2OCwgInZmcGRlZiIsIDAsIDIsIHN0YXRlc18xMiwKKyAgICAgIlwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MjY5LCAic3RtdCIsIDAsIDIsIHN0YXRlc18xMywKKyAgICAgIlwwMDBcMDUwXDM0MFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwNVwyMzdcMjA0XDAwM1wxMzFcMDAyXDAxMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwNDEifSwKKyAgICB7MjcwLCAic2ltcGxlX3N0bXQiLCAwLCA0LCBzdGF0ZXNfMTQsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMlwwMDBcMDAwXDAwMFwwMDVcMjM3XDIwNFwwMDNcMDAwXDAwMFwwMTBcMDAxXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDQwIn0sCisgICAgezI3MSwgInNtYWxsX3N0bXQiLCAwLCAyLCBzdGF0ZXNfMTUsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMlwwMDBcMDAwXDAwMFwwMDVcMjM3XDIwNFwwMDNcMDAwXDAwMFwwMTBcMDAxXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDQwIn0sCisgICAgezI3MiwgImV4cHJfc3RtdCIsIDAsIDYsIHN0YXRlc18xNiwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAxMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MjczLCAidGVzdGxpc3Rfc3Rhcl9leHByIiwgMCwgMywgc3RhdGVzXzE3LAorICAgICAiXDAwMFwwNDBcMjAwXDAwMFwwMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwXDAwMFwwMDBcMDEwXDAwMVwwMDBcMTQwXDExMFwyMjRcMDE3XDAwMCJ9LAorICAgIHsyNzQsICJhdWdhc3NpZ24iLCAwLCAyLCBzdGF0ZXNfMTgsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMzcwXDM3N1wwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI3NSwgImRlbF9zdG10IiwgMCwgMywgc3RhdGVzXzE5LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyNzYsICJwYXNzX3N0bXQiLCAwLCAyLCBzdGF0ZXNfMjAsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI3NywgImZsb3dfc3RtdCIsIDAsIDIsIHN0YXRlc18yMSwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMTdcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDAifSwKKyAgICB7Mjc4LCAiYnJlYWtfc3RtdCIsIDAsIDIsIHN0YXRlc18yMiwKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjgyLCAiaW1wb3J0X3N0bXQiLCAwLCAyLCBzdGF0ZXNfMjYsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI4MywgImltcG9ydF9uYW1lIiwgMCwgMywgc3RhdGVzXzI3LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyODQsICJpbXBvcnRfZnJvbSIsIDAsIDgsIHN0YXRlc18yOCwKKyAgICB7Mjc5LCAiY29udGludWVfc3RtdCIsIDAsIDIsIHN0YXRlc18yMywKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjg1LCAiaW1wb3J0X2FzX25hbWUiLCAwLCA0LCBzdGF0ZXNfMjksCisgICAgezI4MCwgInJldHVybl9zdG10IiwgMCwgMywgc3RhdGVzXzI0LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyODEsICJ5aWVsZF9zdG10IiwgMCwgMiwgc3RhdGVzXzI1LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MCJ9LAorICAgIHsyODIsICJyYWlzZV9zdG10IiwgMCwgNSwgc3RhdGVzXzI2LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAxMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyODMsICJpbXBvcnRfc3RtdCIsIDAsIDIsIHN0YXRlc18yNywKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMjBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7Mjg0LCAiaW1wb3J0X25hbWUiLCAwLCAzLCBzdGF0ZXNfMjgsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI4NSwgImltcG9ydF9mcm9tIiwgMCwgOCwgc3RhdGVzXzI5LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyODYsICJpbXBvcnRfYXNfbmFtZSIsIDAsIDQsIHN0YXRlc18zMCwKKyAgICAgIlwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7Mjg3LCAiZG90dGVkX2FzX25hbWUiLCAwLCA0LCBzdGF0ZXNfMzEsCisgICAgICJcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI4OCwgImltcG9ydF9hc19uYW1lcyIsIDAsIDMsIHN0YXRlc18zMiwKKyAgICAgIlwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7Mjg5LCAiZG90dGVkX2FzX25hbWVzIiwgMCwgMiwgc3RhdGVzXzMzLAorICAgICAiXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyOTAsICJkb3R0ZWRfbmFtZSIsIDAsIDIsIHN0YXRlc18zNCwKKyAgICAgIlwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MjkxLCAiZ2xvYmFsX3N0bXQiLCAwLCAzLCBzdGF0ZXNfMzUsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI5MiwgIm5vbmxvY2FsX3N0bXQiLCAwLCAzLCBzdGF0ZXNfMzYsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI5MywgImFzc2VydF9zdG10IiwgMCwgNSwgc3RhdGVzXzM3LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyOTQsICJjb21wb3VuZF9zdG10IiwgMCwgMiwgc3RhdGVzXzM4LAorICAgICAiXDAwMFwwMTBcMTQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEzMVwwMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMSJ9LAorICAgIHsyOTUsICJhc3luY19zdG10IiwgMCwgMywgc3RhdGVzXzM5LAogICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyODYsICJkb3R0ZWRfYXNfbmFtZSIsIDAsIDQsIHN0YXRlc18zMCwKLSAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjg3LCAiaW1wb3J0X2FzX25hbWVzIiwgMCwgMywgc3RhdGVzXzMxLAotICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyODgsICJkb3R0ZWRfYXNfbmFtZXMiLCAwLCAyLCBzdGF0ZXNfMzIsCi0gICAgICJcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI4OSwgImRvdHRlZF9uYW1lIiwgMCwgMiwgc3RhdGVzXzMzLAotICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyOTAsICJnbG9iYWxfc3RtdCIsIDAsIDMsIHN0YXRlc18zNCwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjkxLCAibm9ubG9jYWxfc3RtdCIsIDAsIDMsIHN0YXRlc18zNSwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjkyLCAiYXNzZXJ0X3N0bXQiLCAwLCA1LCBzdGF0ZXNfMzYsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5MywgImNvbXBvdW5kX3N0bXQiLCAwLCAyLCBzdGF0ZXNfMzcsCi0gICAgICJcMDAwXDAxMFwwMjBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMjBcMDQ1XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwIn0sCi0gICAgezI5NCwgImlmX3N0bXQiLCAwLCA4LCBzdGF0ZXNfMzgsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5NSwgIndoaWxlX3N0bXQiLCAwLCA4LCBzdGF0ZXNfMzksCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5NiwgImZvcl9zdG10IiwgMCwgMTAsIHN0YXRlc180MCwKKyAgICB7Mjk2LCAiaWZfc3RtdCIsIDAsIDgsIHN0YXRlc180MCwKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjk3LCAidHJ5X3N0bXQiLCAwLCAxMywgc3RhdGVzXzQxLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyOTgsICJ3aXRoX3N0bXQiLCAwLCA1LCBzdGF0ZXNfNDIsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5OSwgIndpdGhfaXRlbSIsIDAsIDQsIHN0YXRlc180MywKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzAwLCAiZXhjZXB0X2NsYXVzZSIsIDAsIDUsIHN0YXRlc180NCwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MzAxLCAic3VpdGUiLCAwLCA1LCBzdGF0ZXNfNDUsCi0gICAgICJcMDA0XDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDI0MFwzNDBcMjIzXDE2MFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwyMDBcMDAwIn0sCi0gICAgezMwMiwgInRlc3QiLCAwLCA2LCBzdGF0ZXNfNDYsCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDBcMDAwIn0sCi0gICAgezMwMywgInRlc3Rfbm9jb25kIiwgMCwgMiwgc3RhdGVzXzQ3LAotICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwXDAwMCJ9LAotICAgIHszMDQsICJsYW1iZGVmIiwgMCwgNSwgc3RhdGVzXzQ4LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMDUsICJsYW1iZGVmX25vY29uZCIsIDAsIDUsIHN0YXRlc180OSwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MzA2LCAib3JfdGVzdCIsIDAsIDIsIHN0YXRlc181MCwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzA3LCAiYW5kX3Rlc3QiLCAwLCAyLCBzdGF0ZXNfNTEsCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDBcMDAwIn0sCi0gICAgezMwOCwgIm5vdF90ZXN0IiwgMCwgMywgc3RhdGVzXzUyLAotICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwXDAwMCJ9LAotICAgIHszMDksICJjb21wYXJpc29uIiwgMCwgMiwgc3RhdGVzXzUzLAotICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwXDAwMCJ9LAotICAgIHszMTAsICJjb21wX29wIiwgMCwgNCwgc3RhdGVzXzU0LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMlwwMDBcMjIwXDE3N1wwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMTEsICJzdGFyX2V4cHIiLCAwLCAzLCBzdGF0ZXNfNTUsCi0gICAgICJcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezMxMiwgImV4cHIiLCAwLCAyLCBzdGF0ZXNfNTYsCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDBcMDAwIn0sCi0gICAgezMxMywgInhvcl9leHByIiwgMCwgMiwgc3RhdGVzXzU3LAotICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwXDAwMCJ9LAotICAgIHszMTQsICJhbmRfZXhwciIsIDAsIDIsIHN0YXRlc181OCwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzE1LCAic2hpZnRfZXhwciIsIDAsIDIsIHN0YXRlc181OSwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzE2LCAiYXJpdGhfZXhwciIsIDAsIDIsIHN0YXRlc182MCwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzE3LCAidGVybSIsIDAsIDIsIHN0YXRlc182MSwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzE4LCAiZmFjdG9yIiwgMCwgMywgc3RhdGVzXzYyLAotICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwXDAwMCJ9LAotICAgIHszMTksICJwb3dlciIsIDAsIDQsIHN0YXRlc182MywKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzIwLCAiYXRvbSIsIDAsIDksIHN0YXRlc182NCwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzIxLCAidGVzdGxpc3RfY29tcCIsIDAsIDUsIHN0YXRlc182NSwKLSAgICAgIlwwMDBcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzIyLCAidHJhaWxlciIsIDAsIDcsIHN0YXRlc182NiwKLSAgICAgIlwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDAwXDAwMFwwMDAifSwKLSAgICB7MzIzLCAic3Vic2NyaXB0bGlzdCIsIDAsIDMsIHN0YXRlc182NywKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzI0LCAic3Vic2NyaXB0IiwgMCwgNSwgc3RhdGVzXzY4LAotICAgICAiXDAwMFwwNDBcMDQwXDAwMlwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwXDAwMCJ9LAotICAgIHszMjUsICJzbGljZW9wIiwgMCwgMywgc3RhdGVzXzY5LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMjYsICJleHBybGlzdCIsIDAsIDMsIHN0YXRlc183MCwKLSAgICAgIlwwMDBcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzI3LCAidGVzdGxpc3QiLCAwLCAzLCBzdGF0ZXNfNzEsCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDBcMDAwIn0sCi0gICAgezMyOCwgImRpY3RvcnNldG1ha2VyIiwgMCwgMTEsIHN0YXRlc183MiwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMFwwMDAifSwKLSAgICB7MzI5LCAiY2xhc3NkZWYiLCAwLCA4LCBzdGF0ZXNfNzMsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwIn0sCi0gICAgezMzMCwgImFyZ2xpc3QiLCAwLCA4LCBzdGF0ZXNfNzQsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDBcMDAwIn0sCi0gICAgezMzMSwgImFyZ3VtZW50IiwgMCwgNCwgc3RhdGVzXzc1LAotICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwXDAwMCJ9LAotICAgIHszMzIsICJjb21wX2l0ZXIiLCAwLCAyLCBzdGF0ZXNfNzYsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezMzMywgImNvbXBfZm9yIiwgMCwgNiwgc3RhdGVzXzc3LAorICAgIHsyOTcsICJ3aGlsZV9zdG10IiwgMCwgOCwgc3RhdGVzXzQxLAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAxMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyOTgsICJmb3Jfc3RtdCIsIDAsIDEwLCBzdGF0ZXNfNDIsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI5OSwgInRyeV9zdG10IiwgMCwgMTMsIHN0YXRlc180MywKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MzAwLCAid2l0aF9zdG10IiwgMCwgNSwgc3RhdGVzXzQ0LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHszMDEsICJ3aXRoX2l0ZW0iLCAwLCA0LCBzdGF0ZXNfNDUsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMTBcMDAxXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCisgICAgezMwMiwgImV4Y2VwdF9jbGF1c2UiLCAwLCA1LCBzdGF0ZXNfNDYsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezMwMywgInN1aXRlIiwgMCwgNSwgc3RhdGVzXzQ3LAorICAgICAiXDAwNFwwNDBcMjAwXDAwMFwwMDJcMDAwXDAwMFwwMDBcMDA1XDIzN1wyMDRcMDAzXDAwMFwwMDBcMDEwXDAwMVwwMDBcMTQwXDExMFwyMjRcMDE3XDA0MCJ9LAorICAgIHszMDQsICJ0ZXN0IiwgMCwgNiwgc3RhdGVzXzQ4LAorICAgICAiXDAwMFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwXDAwMFwwMDBcMDEwXDAwMVwwMDBcMTQwXDExMFwyMjRcMDE3XDAwMCJ9LAorICAgIHszMDUsICJ0ZXN0X25vY29uZCIsIDAsIDIsIHN0YXRlc180OSwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAxMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzA2LCAibGFtYmRlZiIsIDAsIDUsIHN0YXRlc181MCwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAxMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MzA3LCAibGFtYmRlZl9ub2NvbmQiLCAwLCA1LCBzdGF0ZXNfNTEsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMTBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezMwOCwgIm9yX3Rlc3QiLCAwLCAyLCBzdGF0ZXNfNTIsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCisgICAgezMwOSwgImFuZF90ZXN0IiwgMCwgMiwgc3RhdGVzXzUzLAorICAgICAiXDAwMFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwXDAwMFwwMDBcMDAwXDAwMVwwMDBcMTQwXDExMFwyMjRcMDE3XDAwMCJ9LAorICAgIHszMTAsICJub3RfdGVzdCIsIDAsIDMsIHN0YXRlc181NCwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAwMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzExLCAiY29tcGFyaXNvbiIsIDAsIDIsIHN0YXRlc181NSwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzEyLCAiY29tcF9vcCIsIDAsIDQsIHN0YXRlc181NiwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwzNzFcMDA3XDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MzEzLCAic3Rhcl9leHByIiwgMCwgMywgc3RhdGVzXzU3LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHszMTQsICJleHByIiwgMCwgMiwgc3RhdGVzXzU4LAorICAgICAiXDAwMFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTQwXDExMFwyMjRcMDE3XDAwMCJ9LAorICAgIHszMTUsICJ4b3JfZXhwciIsIDAsIDIsIHN0YXRlc181OSwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzE2LCAiYW5kX2V4cHIiLCAwLCAyLCBzdGF0ZXNfNjAsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCisgICAgezMxNywgInNoaWZ0X2V4cHIiLCAwLCAyLCBzdGF0ZXNfNjEsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCisgICAgezMxOCwgImFyaXRoX2V4cHIiLCAwLCAyLCBzdGF0ZXNfNjIsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCisgICAgezMxOSwgInRlcm0iLCAwLCAyLCBzdGF0ZXNfNjMsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCisgICAgezMyMCwgImZhY3RvciIsIDAsIDMsIHN0YXRlc182NCwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzIxLCAicG93ZXIiLCAwLCA0LCBzdGF0ZXNfNjUsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTAwXDIyNFwwMTdcMDAwIn0sCisgICAgezMyMiwgImF0b21fZXhwciIsIDAsIDMsIHN0YXRlc182NiwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMDBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzIzLCAiYXRvbSIsIDAsIDksIHN0YXRlc182NywKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzI0LCAidGVzdGxpc3RfY29tcCIsIDAsIDUsIHN0YXRlc182OCwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAxMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzI1LCAidHJhaWxlciIsIDAsIDcsIHN0YXRlc182OSwKKyAgICAgIlwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDAifSwKKyAgICB7MzI2LCAic3Vic2NyaXB0bGlzdCIsIDAsIDMsIHN0YXRlc183MCwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMTBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAxMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzI3LCAic3Vic2NyaXB0IiwgMCwgNSwgc3RhdGVzXzcxLAorICAgICAiXDAwMFwwNDBcMjAwXDAxMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwXDAwMFwwMDBcMDEwXDAwMVwwMDBcMTQwXDExMFwyMjRcMDE3XDAwMCJ9LAorICAgIHszMjgsICJzbGljZW9wIiwgMCwgMywgc3RhdGVzXzcyLAorICAgICAiXDAwMFwwMDBcMDAwXDAxMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHszMjksICJleHBybGlzdCIsIDAsIDMsIHN0YXRlc183MywKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzMwLCAidGVzdGxpc3QiLCAwLCAzLCBzdGF0ZXNfNzQsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMTBcMDAxXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCisgICAgezMzMSwgImRpY3RvcnNldG1ha2VyIiwgMCwgMTQsIHN0YXRlc183NSwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDA2XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAxMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKKyAgICB7MzMyLCAiY2xhc3NkZWYiLCAwLCA4LCBzdGF0ZXNfNzYsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxIn0sCisgICAgezMzMywgImFyZ2xpc3QiLCAwLCAzLCBzdGF0ZXNfNzcsCisgICAgICJcMDAwXDA0MFwyMDBcMDAwXDAwNlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMTBcMDAxXDAwMFwxNDBcMTEwXDIyNFwwMTdcMDAwIn0sCisgICAgezMzNCwgImFyZ3VtZW50IiwgMCwgNCwgc3RhdGVzXzc4LAorICAgICAiXDAwMFwwNDBcMjAwXDAwMFwwMDZcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwXDAwMFwwMDBcMDEwXDAwMVwwMDBcMTQwXDExMFwyMjRcMDE3XDAwMCJ9LAorICAgIHszMzUsICJjb21wX2l0ZXIiLCAwLCAyLCBzdGF0ZXNfNzksCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezMzNiwgImNvbXBfZm9yIiwgMCwgNiwgc3RhdGVzXzgwLAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHszMzcsICJjb21wX2lmIiwgMCwgNCwgc3RhdGVzXzgxLAogICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMzQsICJjb21wX2lmIiwgMCwgNCwgc3RhdGVzXzc4LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMzUsICJlbmNvZGluZ19kZWNsIiwgMCwgMiwgc3RhdGVzXzc5LAotICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMzYsICJ5aWVsZF9leHByIiwgMCwgMywgc3RhdGVzXzgwLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMCJ9LAotICAgIHszMzcsICJ5aWVsZF9hcmciLCAwLCAzLCBzdGF0ZXNfODEsCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAyXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDBcMDAwIn0sCisgICAgezMzOCwgImVuY29kaW5nX2RlY2wiLCAwLCAyLCBzdGF0ZXNfODIsCisgICAgICJcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezMzOSwgInlpZWxkX2V4cHIiLCAwLCAzLCBzdGF0ZXNfODMsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwIn0sCisgICAgezM0MCwgInlpZWxkX2FyZyIsIDAsIDMsIHN0YXRlc184NCwKKyAgICAgIlwwMDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDA0XDAwMFwwMDBcMDAwXDAxMFwwMDFcMDAwXDE0MFwxMTBcMjI0XDAxN1wwMDAifSwKIH07Ci1zdGF0aWMgbGFiZWwgbGFiZWxzWzE2OV0gPSB7CitzdGF0aWMgbGFiZWwgbGFiZWxzWzE3NV0gPSB7CiAgICAgezAsICJFTVBUWSJ9LAogICAgIHsyNTYsIDB9LAogICAgIHs0LCAwfSwKLSAgICB7MjY5LCAwfSwKLSAgICB7MjkzLCAwfSwKKyAgICB7MjcwLCAwfSwKKyAgICB7Mjk0LCAwfSwKICAgICB7MjU3LCAwfSwKLSAgICB7MjY4LCAwfSwKKyAgICB7MjY5LCAwfSwKICAgICB7MCwgMH0sCiAgICAgezI1OCwgMH0sCi0gICAgezMyNywgMH0sCisgICAgezMzMCwgMH0sCiAgICAgezI1OSwgMH0sCiAgICAgezQ5LCAwfSwKLSAgICB7Mjg5LCAwfSwKKyAgICB7MjkwLCAwfSwKICAgICB7NywgMH0sCi0gICAgezMzMCwgMH0sCisgICAgezMzMywgMH0sCiAgICAgezgsIDB9LAogICAgIHsyNjAsIDB9LAogICAgIHsyNjEsIDB9LAotICAgIHszMjksIDB9LAorICAgIHszMzIsIDB9LAorICAgIHsyNjMsIDB9LAogICAgIHsyNjIsIDB9LAorICAgIHs1NSwgMH0sCiAgICAgezEsICJkZWYifSwKICAgICB7MSwgMH0sCi0gICAgezI2MywgMH0sCi0gICAgezUwLCAwfSwKLSAgICB7MzAyLCAwfSwKLSAgICB7MTEsIDB9LAotICAgIHszMDEsIDB9LAogICAgIHsyNjQsIDB9LAorICAgIHs1MSwgMH0sCisgICAgezMwNCwgMH0sCisgICAgezExLCAwfSwKKyAgICB7MzAzLCAwfSwKICAgICB7MjY1LCAwfSwKKyAgICB7MjY2LCAwfSwKICAgICB7MjIsIDB9LAogICAgIHsxMiwgMH0sCiAgICAgezE2LCAwfSwKICAgICB7MzUsIDB9LAotICAgIHsyNjYsIDB9LAogICAgIHsyNjcsIDB9LAotICAgIHsyNzAsIDB9LAotICAgIHsxMywgMH0sCisgICAgezI2OCwgMH0sCiAgICAgezI3MSwgMH0sCi0gICAgezI3NCwgMH0sCisgICAgezEzLCAwfSwKKyAgICB7MjcyLCAwfSwKICAgICB7Mjc1LCAwfSwKICAgICB7Mjc2LCAwfSwKLSAgICB7MjgyLCAwfSwKLSAgICB7MjkwLCAwfSwKKyAgICB7Mjc3LCAwfSwKKyAgICB7MjgzLCAwfSwKICAgICB7MjkxLCAwfSwKICAgICB7MjkyLCAwfSwKLSAgICB7MjcyLCAwfSwKKyAgICB7MjkzLCAwfSwKICAgICB7MjczLCAwfSwKLSAgICB7MzM2LCAwfSwKLSAgICB7MzExLCAwfSwKKyAgICB7Mjc0LCAwfSwKKyAgICB7MzM5LCAwfSwKKyAgICB7MzEzLCAwfSwKICAgICB7MzYsIDB9LAogICAgIHszNywgMH0sCiAgICAgezM4LCAwfSwKKyAgICB7NTAsIDB9LAogICAgIHszOSwgMH0sCiAgICAgezQwLCAwfSwKICAgICB7NDEsIDB9LApAQCAtMjA0NiwzNiArMjA5OCwzNyBAQAogICAgIHs0NiwgMH0sCiAgICAgezQ4LCAwfSwKICAgICB7MSwgImRlbCJ9LAotICAgIHszMjYsIDB9LAorICAgIHszMjksIDB9LAogICAgIHsxLCAicGFzcyJ9LAotICAgIHsyNzcsIDB9LAogICAgIHsyNzgsIDB9LAogICAgIHsyNzksIDB9LAotICAgIHsyODEsIDB9LAogICAgIHsyODAsIDB9LAorICAgIHsyODIsIDB9LAorICAgIHsyODEsIDB9LAogICAgIHsxLCAiYnJlYWsifSwKICAgICB7MSwgImNvbnRpbnVlIn0sCiAgICAgezEsICJyZXR1cm4ifSwKICAgICB7MSwgInJhaXNlIn0sCiAgICAgezEsICJmcm9tIn0sCi0gICAgezI4MywgMH0sCiAgICAgezI4NCwgMH0sCi0gICAgezEsICJpbXBvcnQifSwKLSAgICB7Mjg4LCAwfSwKLSAgICB7MjMsIDB9LAotICAgIHs1MSwgMH0sCi0gICAgezI4NywgMH0sCiAgICAgezI4NSwgMH0sCi0gICAgezEsICJhcyJ9LAorICAgIHsxLCAiaW1wb3J0In0sCisgICAgezI4OSwgMH0sCisgICAgezIzLCAwfSwKKyAgICB7NTIsIDB9LAorICAgIHsyODgsIDB9LAogICAgIHsyODYsIDB9LAorICAgIHsxLCAiYXMifSwKKyAgICB7Mjg3LCAwfSwKICAgICB7MSwgImdsb2JhbCJ9LAogICAgIHsxLCAibm9ubG9jYWwifSwKICAgICB7MSwgImFzc2VydCJ9LAotICAgIHsyOTQsIDB9LAotICAgIHsyOTUsIDB9LAogICAgIHsyOTYsIDB9LAogICAgIHsyOTcsIDB9LAogICAgIHsyOTgsIDB9LAorICAgIHsyOTksIDB9LAorICAgIHszMDAsIDB9LAorICAgIHsyOTUsIDB9LAogICAgIHsxLCAiaWYifSwKICAgICB7MSwgImVsaWYifSwKICAgICB7MSwgImVsc2UifSwKQEAgLTIwODMsMjYgKzIxMzYsMjYgQEAKICAgICB7MSwgImZvciJ9LAogICAgIHsxLCAiaW4ifSwKICAgICB7MSwgInRyeSJ9LAotICAgIHszMDAsIDB9LAorICAgIHszMDIsIDB9LAogICAgIHsxLCAiZmluYWxseSJ9LAogICAgIHsxLCAid2l0aCJ9LAotICAgIHsyOTksIDB9LAotICAgIHszMTIsIDB9LAorICAgIHszMDEsIDB9LAorICAgIHszMTQsIDB9LAogICAgIHsxLCAiZXhjZXB0In0sCiAgICAgezUsIDB9LAogICAgIHs2LCAwfSwKLSAgICB7MzA2LCAwfSwKLSAgICB7MzA0LCAwfSwKLSAgICB7MzAzLCAwfSwKLSAgICB7MzA1LCAwfSwKLSAgICB7MSwgImxhbWJkYSJ9LAotICAgIHszMDcsIDB9LAotICAgIHsxLCAib3IifSwKICAgICB7MzA4LCAwfSwKKyAgICB7MzA2LCAwfSwKKyAgICB7MzA1LCAwfSwKKyAgICB7MzA3LCAwfSwKKyAgICB7MSwgImxhbWJkYSJ9LAorICAgIHszMDksIDB9LAorICAgIHsxLCAib3IifSwKKyAgICB7MzEwLCAwfSwKICAgICB7MSwgImFuZCJ9LAogICAgIHsxLCAibm90In0sCi0gICAgezMwOSwgMH0sCi0gICAgezMxMCwgMH0sCisgICAgezMxMSwgMH0sCisgICAgezMxMiwgMH0sCiAgICAgezIwLCAwfSwKICAgICB7MjEsIDB9LAogICAgIHsyNywgMH0sCkBAIC0yMTExLDUyICsyMTY0LDU0IEBACiAgICAgezI4LCAwfSwKICAgICB7MjgsIDB9LAogICAgIHsxLCAiaXMifSwKLSAgICB7MzEzLCAwfSwKLSAgICB7MTgsIDB9LAotICAgIHszMTQsIDB9LAotICAgIHszMiwgMH0sCiAgICAgezMxNSwgMH0sCi0gICAgezE5LCAwfSwKKyAgICB7MTgsIDB9LAogICAgIHszMTYsIDB9LAorICAgIHszMiwgMH0sCisgICAgezMxNywgMH0sCisgICAgezE5LCAwfSwKKyAgICB7MzE4LCAwfSwKICAgICB7MzMsIDB9LAogICAgIHszNCwgMH0sCi0gICAgezMxNywgMH0sCisgICAgezMxOSwgMH0sCiAgICAgezE0LCAwfSwKICAgICB7MTUsIDB9LAotICAgIHszMTgsIDB9LAorICAgIHszMjAsIDB9LAogICAgIHsxNywgMH0sCiAgICAgezI0LCAwfSwKICAgICB7NDcsIDB9LAogICAgIHszMSwgMH0sCi0gICAgezMxOSwgMH0sCi0gICAgezMyMCwgMH0sCi0gICAgezMyMiwgMH0sCiAgICAgezMyMSwgMH0sCisgICAgezMyMiwgMH0sCisgICAgezU0LCAwfSwKKyAgICB7MzIzLCAwfSwKKyAgICB7MzI1LCAwfSwKKyAgICB7MzI0LCAwfSwKICAgICB7OSwgMH0sCiAgICAgezEwLCAwfSwKICAgICB7MjUsIDB9LAotICAgIHszMjgsIDB9LAorICAgIHszMzEsIDB9LAogICAgIHsyNiwgMH0sCiAgICAgezIsIDB9LAogICAgIHszLCAwfSwKICAgICB7MSwgIk5vbmUifSwKICAgICB7MSwgIlRydWUifSwKICAgICB7MSwgIkZhbHNlIn0sCi0gICAgezMzMywgMH0sCi0gICAgezMyMywgMH0sCi0gICAgezMyNCwgMH0sCi0gICAgezMyNSwgMH0sCisgICAgezMzNiwgMH0sCisgICAgezMyNiwgMH0sCisgICAgezMyNywgMH0sCisgICAgezMyOCwgMH0sCiAgICAgezEsICJjbGFzcyJ9LAotICAgIHszMzEsIDB9LAotICAgIHszMzIsIDB9LAogICAgIHszMzQsIDB9LAogICAgIHszMzUsIDB9LAotICAgIHsxLCAieWllbGQifSwKICAgICB7MzM3LCAwfSwKKyAgICB7MzM4LCAwfSwKKyAgICB7MSwgInlpZWxkIn0sCisgICAgezM0MCwgMH0sCiB9OwogZ3JhbW1hciBfUHlQYXJzZXJfR3JhbW1hciA9IHsKLSAgICA4MiwKKyAgICA4NSwKICAgICBkZmFzLAotICAgIHsxNjksIGxhYmVsc30sCisgICAgezE3NSwgbGFiZWxzfSwKICAgICAyNTYKIH07CmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0LmMgYi9QeXRob24vaW1wb3J0LmMKaW5kZXggNGYwNzY1YS4uNTAyNWU3NSAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydC5jCisrKyBiL1B5dGhvbi9pbXBvcnQuYwpAQCAtMzYsNiArMzYsOCBAQAogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OWMzMzI0NzVkODY4NjI4NF0qLwogCisjaW5jbHVkZSAiY2xpbmljL2ltcG9ydC5jLmgiCisKIC8qW3B5dGhvbiBpbnB1dF0KIGNsYXNzIGZzX3VuaWNvZGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgogICAgIHR5cGUgPSAnUHlPYmplY3QgKicKQEAgLTIzOSwyOSArMjQxLDkgQEAKIE9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHJldHVybiBGYWxzZS4KIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotUHlEb2NfU1RSVkFSKF9pbXBfbG9ja19oZWxkX19kb2NfXywKLSJsb2NrX2hlbGQoJG1vZHVsZSwgLylcbiIKLSItLVxuIgotIlxuIgotIlJldHVybiBUcnVlIGlmIHRoZSBpbXBvcnQgbG9jayBpcyBjdXJyZW50bHkgaGVsZCwgZWxzZSBGYWxzZS5cbiIKLSJcbiIKLSJPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCByZXR1cm4gRmFsc2UuIik7Ci0KLSNkZWZpbmUgX0lNUF9MT0NLX0hFTERfTUVUSE9EREVGICAgIFwKLSAgICB7ImxvY2tfaGVsZCIsIChQeUNGdW5jdGlvbilfaW1wX2xvY2tfaGVsZCwgTUVUSF9OT0FSR1MsIF9pbXBfbG9ja19oZWxkX19kb2NfX30sCi0KIHN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2xvY2tfaGVsZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9sb2NrX2hlbGQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKLXsKLSAgICByZXR1cm4gX2ltcF9sb2NrX2hlbGRfaW1wbChtb2R1bGUpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9sb2NrX2hlbGRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhZTY1Njc0OTY2YmFhNjUgaW5wdXQ9OWIwODhmOWIyMTdkOWJkZl0qLworX2ltcF9sb2NrX2hlbGRfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThiODkzODRiNWUxOTYzZmMgaW5wdXQ9OWIwODhmOWIyMTdkOWJkZl0qLwogewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpbXBvcnRfbG9ja190aHJlYWQgIT0gLTEpOwpAQCAtMjc5LDMwICsyNjEsOSBAQAogbW9kdWxlcy4gT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihfaW1wX2FjcXVpcmVfbG9ja19fZG9jX18sCi0iYWNxdWlyZV9sb2NrKCRtb2R1bGUsIC8pXG4iCi0iLS1cbiIKLSJcbiIKLSJBY3F1aXJlcyB0aGUgaW50ZXJwcmV0ZXJcJ3MgaW1wb3J0IGxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC5cbiIKLSJcbiIKLSJUaGlzIGxvY2sgc2hvdWxkIGJlIHVzZWQgYnkgaW1wb3J0IGhvb2tzIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5IHdoZW4gaW1wb3J0aW5nXG4iCi0ibW9kdWxlcy4gT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIik7Ci0KLSNkZWZpbmUgX0lNUF9BQ1FVSVJFX0xPQ0tfTUVUSE9EREVGICAgIFwKLSAgICB7ImFjcXVpcmVfbG9jayIsIChQeUNGdW5jdGlvbilfaW1wX2FjcXVpcmVfbG9jaywgTUVUSF9OT0FSR1MsIF9pbXBfYWNxdWlyZV9sb2NrX19kb2NfX30sCi0KIHN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2FjcXVpcmVfbG9ja19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9hY3F1aXJlX2xvY2soUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKLXsKLSAgICByZXR1cm4gX2ltcF9hY3F1aXJlX2xvY2tfaW1wbChtb2R1bGUpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9hY3F1aXJlX2xvY2tfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQ3OGYxZmEwODlmZGI5YTQgaW5wdXQ9NGEyZDQzODE4NjZkNWZkY10qLworX2ltcF9hY3F1aXJlX2xvY2tfaW1wbChQeU9iamVjdCAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFhZmY1OGNiMGVlMWIwMjYgaW5wdXQ9NGEyZDQzODE4NjZkNWZkY10qLwogewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgX1B5SW1wb3J0X0FjcXVpcmVMb2NrKCk7CkBAIC0zMTksMjkgKzI4MCw5IEBACiBPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotUHlEb2NfU1RSVkFSKF9pbXBfcmVsZWFzZV9sb2NrX19kb2NfXywKLSJyZWxlYXNlX2xvY2soJG1vZHVsZSwgLylcbiIKLSItLVxuIgotIlxuIgotIlJlbGVhc2UgdGhlIGludGVycHJldGVyXCdzIGltcG9ydCBsb2NrLlxuIgotIlxuIgotIk9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIpOwotCi0jZGVmaW5lIF9JTVBfUkVMRUFTRV9MT0NLX01FVEhPRERFRiAgICBcCi0gICAgeyJyZWxlYXNlX2xvY2siLCAoUHlDRnVuY3Rpb24pX2ltcF9yZWxlYXNlX2xvY2ssIE1FVEhfTk9BUkdTLCBfaW1wX3JlbGVhc2VfbG9ja19fZG9jX199LAotCiBzdGF0aWMgUHlPYmplY3QgKgotX2ltcF9yZWxlYXNlX2xvY2tfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfcmVsZWFzZV9sb2NrKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCi17Ci0gICAgcmV0dXJuIF9pbXBfcmVsZWFzZV9sb2NrX2ltcGwobW9kdWxlKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfcmVsZWFzZV9sb2NrX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zNmM3N2E2ODMyZmRhZmQ0IGlucHV0PTkzNGZiMTE1MTZkZDc3OGJdKi8KK19pbXBfcmVsZWFzZV9sb2NrX2ltcGwoUHlPYmplY3QgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03ZmFhYjZkMGJlMTc4YjBhIGlucHV0PTkzNGZiMTE1MTZkZDc3OGJdKi8KIHsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChfUHlJbXBvcnRfUmVsZWFzZUxvY2soKSA8IDApIHsKQEAgLTU1MCw4ICs0OTEsMTMgQEAKIHsKICAgICBsb25nIHJlczsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IFB5VGhyZWFkU3RhdGVfR2V0KCktPmludGVycDsKLSAgICBQeU9iamVjdCAqcHljX21hZ2ljID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1JBV19NQUdJQ19OVU1CRVIiKTsKKyAgICBQeU9iamVjdCAqZXh0ZXJuYWwsICpweWNfbWFnaWM7CisKKyAgICBleHRlcm5hbCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoaW50ZXJwLT5pbXBvcnRsaWIsICJfYm9vdHN0cmFwX2V4dGVybmFsIik7CisgICAgaWYgKGV4dGVybmFsID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBweWNfbWFnaWMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGV4dGVybmFsLCAiX1JBV19NQUdJQ19OVU1CRVIiKTsKKyAgICBQeV9ERUNSRUYoZXh0ZXJuYWwpOwogICAgIGlmIChweWNfbWFnaWMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJlcyA9IFB5TG9uZ19Bc0xvbmcocHljX21hZ2ljKTsKQEAgLTcyNSw5ICs2NzEsMTMgQEAKICAgICBQeU9iamVjdCAqbW9kdWxlcyA9IFB5SW1wb3J0X0dldE1vZHVsZURpY3QoKTsKICAgICBQeU9iamVjdCAqbTsKIAotICAgIGlmICgobSA9IFB5RGljdF9HZXRJdGVtKG1vZHVsZXMsIG5hbWUpKSAhPSBOVUxMICYmCi0gICAgICAgIFB5TW9kdWxlX0NoZWNrKG0pKQorICAgIGlmICgobSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG1vZHVsZXMsIG5hbWUpKSAhPSBOVUxMICYmCisgICAgICAgIFB5TW9kdWxlX0NoZWNrKG0pKSB7CiAgICAgICAgIHJldHVybiBtOworICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbSA9IFB5TW9kdWxlX05ld09iamVjdChuYW1lKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTc5Niw3ICs3NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIHsKICAgICBQeU9iamVjdCAqbSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm5hbWVvYmosICpwYXRob2JqID0gTlVMTCwgKmNwYXRob2JqID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnBhdGhvYmogPSBOVUxMLCAqY3BhdGhvYmogPSBOVUxMLCAqZXh0ZXJuYWw9IE5VTEw7CiAKICAgICBuYW1lb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobmFtZSk7CiAgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkKQEAgLTgyNCw5ICs3NzQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGludGVycHJldGVyISIpOwogICAgICAgICB9CiAKLSAgICAgICAgcGF0aG9iaiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2dldF9zb3VyY2VmaWxlLCBjcGF0aG9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICBleHRlcm5hbD0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9ib290c3RyYXBfZXh0ZXJuYWwiKTsKKyAgICAgICAgaWYgKGV4dGVybmFsICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHBhdGhvYmogPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhleHRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZ2V0X3NvdXJjZWZpbGUsIGNwYXRob2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKGV4dGVybmFsKTsKKyAgICAgICAgfQogICAgICAgICBpZiAocGF0aG9iaiA9PSBOVUxMKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CkBAIC04OTIsNyArODQ3LDcgQEAKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqY28sIFB5T2JqZWN0ICpwYXRobmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjcGF0aG5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKmQsICpyZXM7CisgICAgUHlPYmplY3QgKmQsICpleHRlcm5hbCwgKnJlczsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKICAgICBfUHlfSURFTlRJRklFUihfZml4X3VwX21vZHVsZSk7CiAKQEAgLTkwNCw5ICs4NTksMTMgQEAKICAgICBpZiAocGF0aG5hbWUgPT0gTlVMTCkgewogICAgICAgICBwYXRobmFtZSA9ICgoUHlDb2RlT2JqZWN0ICopY28pLT5jb19maWxlbmFtZTsKICAgICB9Ci0gICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgZXh0ZXJuYWwgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGludGVycC0+aW1wb3J0bGliLCAiX2Jvb3RzdHJhcF9leHRlcm5hbCIpOworICAgIGlmIChleHRlcm5hbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhleHRlcm5hbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZml4X3VwX21vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLCBuYW1lLCBwYXRobmFtZSwgY3BhdGhuYW1lLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoZXh0ZXJuYWwpOwogICAgIGlmIChyZXMgIT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgcmVzID0gZXhlY19jb2RlX2luX21vZHVsZShuYW1lLCBkLCBjbyk7CkBAIC05NjYsNDMgKzkyNSwxMCBAQAogQ2hhbmdlcyBjb2RlLmNvX2ZpbGVuYW1lIHRvIHNwZWNpZnkgdGhlIHBhc3NlZC1pbiBmaWxlIHBhdGguCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihfaW1wX19maXhfY29fZmlsZW5hbWVfX2RvY19fLAotIl9maXhfY29fZmlsZW5hbWUoJG1vZHVsZSwgY29kZSwgcGF0aCwgLylcbiIKLSItLVxuIgotIlxuIgotIkNoYW5nZXMgY29kZS5jb19maWxlbmFtZSB0byBzcGVjaWZ5IHRoZSBwYXNzZWQtaW4gZmlsZSBwYXRoLlxuIgotIlxuIgotIiAgY29kZVxuIgotIiAgICBDb2RlIG9iamVjdCB0byBjaGFuZ2UuXG4iCi0iICBwYXRoXG4iCi0iICAgIEZpbGUgcGF0aCB0byB1c2UuIik7Ci0KLSNkZWZpbmUgX0lNUF9fRklYX0NPX0ZJTEVOQU1FX01FVEhPRERFRiAgICBcCi0gICAgeyJfZml4X2NvX2ZpbGVuYW1lIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfX2ZpeF9jb19maWxlbmFtZSwgTUVUSF9WQVJBUkdTLCBfaW1wX19maXhfY29fZmlsZW5hbWVfX2RvY19ffSwKLQogc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfX2ZpeF9jb19maWxlbmFtZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5Q29kZU9iamVjdCAqY29kZSwgUHlPYmplY3QgKnBhdGgpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9fZml4X2NvX2ZpbGVuYW1lKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIFB5Q29kZU9iamVjdCAqY29kZTsKLSAgICBQeU9iamVjdCAqcGF0aDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAiTyFVOl9maXhfY29fZmlsZW5hbWUiLAotICAgICAgICAmUHlDb2RlX1R5cGUsICZjb2RlLCAmcGF0aCkpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICByZXR1cm5fdmFsdWUgPSBfaW1wX19maXhfY29fZmlsZW5hbWVfaW1wbChtb2R1bGUsIGNvZGUsIHBhdGgpOwotCi1leGl0OgotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX19maXhfY29fZmlsZW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeUNvZGVPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpwYXRoKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZiNGIxZWRlYjBkNTVjNWQgaW5wdXQ9ODk1YmE1MGU3OGI4MmYwNV0qLworX2ltcF9fZml4X2NvX2ZpbGVuYW1lX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlDb2RlT2JqZWN0ICpjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnBhdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWQwMDJmMTAwMjM1NTg3ZCBpbnB1dD04OTViYTUwZTc4YjgyZjA1XSovCiAKIHsKICAgICB1cGRhdGVfY29tcGlsZWRfbW9kdWxlKGNvZGUsIHBhdGgpOwpAQCAtMTEwNCw1MCArMTAzMCw3NCBAQAogICAgIHJldHVybiBpbXBvcnRlcjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5jcmVhdGVfYnVpbHRpbgogCi1zdGF0aWMgaW50IGluaXRfYnVpbHRpbihQeU9iamVjdCAqKTsgLyogRm9yd2FyZCAqLworICAgIHNwZWM6IG9iamVjdAorICAgIC8KIAotLyogSW5pdGlhbGl6ZSBhIGJ1aWx0LWluIG1vZHVsZS4KLSAgIFJldHVybiAxIGZvciBzdWNjZXNzLCAwIGlmIHRoZSBtb2R1bGUgaXMgbm90IGZvdW5kLCBhbmQgLTEgd2l0aAotICAgYW4gZXhjZXB0aW9uIHNldCBpZiB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiAqLworQ3JlYXRlIGFuIGV4dGVuc2lvbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLXN0YXRpYyBpbnQKLWluaXRfYnVpbHRpbihQeU9iamVjdCAqbmFtZSkKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2NyZWF0ZV9idWlsdGluKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpzcGVjKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWFjZTdmZjIyMjcxZTZmMzkgaW5wdXQ9MzdmOTY2Zjg5MDM4NGU0N10qLwogewogICAgIHN0cnVjdCBfaW5pdHRhYiAqcDsKKyAgICBQeU9iamVjdCAqbmFtZTsKKyAgICBjaGFyICpuYW1lc3RyOwogICAgIFB5T2JqZWN0ICptb2Q7CiAKKyAgICBuYW1lID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzcGVjLCAibmFtZSIpOworICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgbW9kID0gX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QobmFtZSwgbmFtZSk7Ci0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAobW9kICE9IE5VTEwpCi0gICAgICAgIHJldHVybiAxOworICAgIGlmIChtb2QgfHwgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihtb2QpOworICAgICAgICByZXR1cm4gbW9kOworICAgIH0KKworICAgIG5hbWVzdHIgPSBQeVVuaWNvZGVfQXNVVEY4KG5hbWUpOworICAgIGlmIChuYW1lc3RyID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBmb3IgKHAgPSBQeUltcG9ydF9Jbml0dGFiOyBwLT5uYW1lICE9IE5VTEw7IHArKykgewotICAgICAgICBQeU9iamVjdCAqbW9kOwogICAgICAgICBQeU1vZHVsZURlZiAqZGVmOwogICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgcC0+bmFtZSkgPT0gMCkgewogICAgICAgICAgICAgaWYgKHAtPmluaXRmdW5jID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJDYW5ub3QgcmUtaW5pdCBpbnRlcm5hbCBtb2R1bGUgJVIiLAotICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgLyogQ2Fubm90IHJlLWluaXQgaW50ZXJuYWwgbW9kdWxlICgic3lzIiBvciAiYnVpbHRpbnMiKSAqLworICAgICAgICAgICAgICAgIG1vZCA9IFB5SW1wb3J0X0FkZE1vZHVsZShuYW1lc3RyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1vZCA9ICgqcC0+aW5pdGZ1bmMpKCk7Ci0gICAgICAgICAgICBpZiAobW9kID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgLyogUmVtZW1iZXIgcG9pbnRlciB0byBtb2R1bGUgaW5pdCBmdW5jdGlvbi4gKi8KLSAgICAgICAgICAgIGRlZiA9IFB5TW9kdWxlX0dldERlZihtb2QpOwotICAgICAgICAgICAgZGVmLT5tX2Jhc2UubV9pbml0ID0gcC0+aW5pdGZ1bmM7Ci0gICAgICAgICAgICBpZiAoX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KG1vZCwgbmFtZSwgbmFtZSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIC8qIEZpeHVwRXh0ZW5zaW9uIGhhcyBwdXQgdGhlIG1vZHVsZSBpbnRvIHN5cy5tb2R1bGVzLAotICAgICAgICAgICAgICAgc28gd2UgY2FuIHJlbGVhc2Ugb3VyIG93biByZWZlcmVuY2UuICovCi0gICAgICAgICAgICBQeV9ERUNSRUYobW9kKTsKLSAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhtb2QsICZQeU1vZHVsZURlZl9UeXBlKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlNb2R1bGVfRnJvbURlZkFuZFNwZWMoKFB5TW9kdWxlRGVmKiltb2QsIHNwZWMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciBwb2ludGVyIHRvIG1vZHVsZSBpbml0IGZ1bmN0aW9uLiAqLworICAgICAgICAgICAgICAgIGRlZiA9IFB5TW9kdWxlX0dldERlZihtb2QpOworICAgICAgICAgICAgICAgIGRlZi0+bV9iYXNlLm1faW5pdCA9IHAtPmluaXRmdW5jOworICAgICAgICAgICAgICAgIGlmIChfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QobW9kLCBuYW1lLCBuYW1lKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBtb2Q7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgUHlfREVDUkVGKG5hbWUpOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTEzMzcsNiArMTI4Nyw3IEBACiByZW1vdmVfaW1wb3J0bGliX2ZyYW1lcyh2b2lkKQogewogICAgIGNvbnN0IGNoYXIgKmltcG9ydGxpYl9maWxlbmFtZSA9ICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiI7CisgICAgY29uc3QgY2hhciAqZXh0ZXJuYWxfZmlsZW5hbWUgPSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbD4iOwogICAgIGNvbnN0IGNoYXIgKnJlbW92ZV9mcmFtZXMgPSAiX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZCI7CiAgICAgaW50IGFsd2F5c190cmltID0gMDsKICAgICBpbnQgaW5faW1wb3J0bGliID0gMDsKQEAgLTEzNjYsNyArMTMxNywxMCBAQAogICAgICAgICBhc3NlcnQoUHlUcmFjZUJhY2tfQ2hlY2sodGIpKTsKICAgICAgICAgbm93X2luX2ltcG9ydGxpYiA9IChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS0+Y29fZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYl9maWxlbmFtZSkgPT0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYl9maWxlbmFtZSkgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS0+Y29fZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX2ZpbGVuYW1lKSA9PSAwKTsKICAgICAgICAgaWYgKG5vd19pbl9pbXBvcnRsaWIgJiYgIWluX2ltcG9ydGxpYikgewogICAgICAgICAgICAgLyogVGhpcyBpcyB0aGUgbGluayB0byB0aGlzIGNodW5rIG9mIGltcG9ydGxpYiB0cmFjZWJhY2tzICovCiAgICAgICAgICAgICBvdXRlcl9saW5rID0gcHJldl9saW5rOwpAQCAtMTQ4NCw2ICsxNDM4LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2socGFja2FnZSkpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiX19uYW1lX18gbXVzdCBiZSBhIHN0cmluZyIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9JTkNSRUYocGFja2FnZSk7CiAKQEAgLTE1NzEsMTUgKzE1MjYsMTMgQEAKICAgICBfUHlJbXBvcnRfQWNxdWlyZUxvY2soKTsKICNlbmRpZgogICAgLyogRnJvbSB0aGlzIHBvaW50IGZvcndhcmQsIGdvdG8gZXJyb3Jfd2l0aF91bmxvY2shICovCi0gICAgaWYgKFB5RGljdF9DaGVjayhnbG9iYWxzKSkgewotICAgICAgICBidWlsdGluc19pbXBvcnQgPSBfUHlEaWN0X0dldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2ltcG9ydF9fKTsKLSAgICB9CisgICAgLyogWFhYIGludGVycC0+YnVpbHRpbnNfY29weSBpcyBOVUxMIGluIHN1YmludGVycHJldGVyISAqLworICAgIGJ1aWx0aW5zX2ltcG9ydCA9IF9QeURpY3RfR2V0SXRlbUlkKGludGVycC0+YnVpbHRpbnNfY29weSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwLT5idWlsdGluc19jb3B5IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnAtPmJ1aWx0aW5zLCAmUHlJZF9fX2ltcG9ydF9fKTsKICAgICBpZiAoYnVpbHRpbnNfaW1wb3J0ID09IE5VTEwpIHsKLSAgICAgICAgYnVpbHRpbnNfaW1wb3J0ID0gX1B5RGljdF9HZXRJdGVtSWQoaW50ZXJwLT5idWlsdGlucywgJlB5SWRfX19pbXBvcnRfXyk7Ci0gICAgICAgIGlmIChidWlsdGluc19pbXBvcnQgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLCAiX19pbXBvcnRfXyBub3QgZm91bmQiKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3Jfd2l0aF91bmxvY2s7Ci0gICAgICAgIH0KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLCAiX19pbXBvcnRfXyBub3QgZm91bmQiKTsKKyAgICAgICAgZ290byBlcnJvcl93aXRoX3VubG9jazsKICAgICB9CiAgICAgUHlfSU5DUkVGKGJ1aWx0aW5zX2ltcG9ydCk7CiAKQEAgLTE4NjgsMjcgKzE4MjEsOSBAQAogUmV0dXJucyB0aGUgbGlzdCBvZiBmaWxlIHN1ZmZpeGVzIHVzZWQgdG8gaWRlbnRpZnkgZXh0ZW5zaW9uIG1vZHVsZXMuCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19fZG9jX18sCi0iZXh0ZW5zaW9uX3N1ZmZpeGVzKCRtb2R1bGUsIC8pXG4iCi0iLS1cbiIKLSJcbiIKLSJSZXR1cm5zIHRoZSBsaXN0IG9mIGZpbGUgc3VmZml4ZXMgdXNlZCB0byBpZGVudGlmeSBleHRlbnNpb24gbW9kdWxlcy4iKTsKLQotI2RlZmluZSBfSU1QX0VYVEVOU0lPTl9TVUZGSVhFU19NRVRIT0RERUYgICAgXAotICAgIHsiZXh0ZW5zaW9uX3N1ZmZpeGVzIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzLCBNRVRIX05PQVJHUywgX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfX2RvY19ffSwKLQogc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2V4dGVuc2lvbl9zdWZmaXhlcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQotewotICAgIHJldHVybiBfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKG1vZHVsZSk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmIzMGEyNDM4MTY3Nzk4YyBpbnB1dD1lY2RlZWVjZmNiNmY4MzllXSovCitfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKFB5T2JqZWN0ICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MGJmMzQ2ZTI1YThmMGNkMyBpbnB1dD1lY2RlZWVjZmNiNmY4MzllXSovCiB7CiAgICAgUHlPYmplY3QgKmxpc3Q7CiAgICAgY29uc3QgY2hhciAqc3VmZml4OwpAQCAtMTkxNyw2MiArMTg1Miw2IEBACiB9CiAKIC8qW2NsaW5pYyBpbnB1dF0KLV9pbXAuaW5pdF9idWlsdGluCi0KLSAgICBuYW1lOiB1bmljb2RlCi0gICAgLwotCi1Jbml0aWFsaXplcyBhIGJ1aWx0LWluIG1vZHVsZS4KLVtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KLQotUHlEb2NfU1RSVkFSKF9pbXBfaW5pdF9idWlsdGluX19kb2NfXywKLSJpbml0X2J1aWx0aW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKLSItLVxuIgotIlxuIgotIkluaXRpYWxpemVzIGEgYnVpbHQtaW4gbW9kdWxlLiIpOwotCi0jZGVmaW5lIF9JTVBfSU5JVF9CVUlMVElOX01FVEhPRERFRiAgICBcCi0gICAgeyJpbml0X2J1aWx0aW4iLCAoUHlDRnVuY3Rpb24pX2ltcF9pbml0X2J1aWx0aW4sIE1FVEhfVkFSQVJHUywgX2ltcF9pbml0X2J1aWx0aW5fX2RvY19ffSwKLQotc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfaW5pdF9idWlsdGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9pbml0X2J1aWx0aW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm5hbWU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgIlU6aW5pdF9idWlsdGluIiwKLSAgICAgICAgJm5hbWUpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pbml0X2J1aWx0aW5faW1wbChtb2R1bGUsIG5hbWUpOwotCi1leGl0OgotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2luaXRfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWEwMjQ0OTQ4YTQzZjhlMjYgaW5wdXQ9ZjkzNGQyMjMxZWM1MmEyZV0qLwotewotICAgIGludCByZXQ7Ci0gICAgUHlPYmplY3QgKm07Ci0KLSAgICByZXQgPSBpbml0X2J1aWx0aW4obmFtZSk7Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChyZXQgPT0gMCkgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgIH0KLSAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG5hbWUpOwotICAgIFB5X1hJTkNSRUYobSk7Ci0gICAgcmV0dXJuIG07Ci19Ci0KLS8qW2NsaW5pYyBpbnB1dF0KIF9pbXAuaW5pdF9mcm96ZW4KIAogICAgIG5hbWU6IHVuaWNvZGUKQEAgLTE5ODEsMzcgKzE4NjAsOSBAQAogSW5pdGlhbGl6ZXMgYSBmcm96ZW4gbW9kdWxlLgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi1QeURvY19TVFJWQVIoX2ltcF9pbml0X2Zyb3plbl9fZG9jX18sCi0iaW5pdF9mcm96ZW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKLSItLVxuIgotIlxuIgotIkluaXRpYWxpemVzIGEgZnJvemVuIG1vZHVsZS4iKTsKLQotI2RlZmluZSBfSU1QX0lOSVRfRlJPWkVOX01FVEhPRERFRiAgICBcCi0gICAgeyJpbml0X2Zyb3plbiIsIChQeUNGdW5jdGlvbilfaW1wX2luaXRfZnJvemVuLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaW5pdF9mcm96ZW5fX2RvY19ffSwKLQogc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfaW5pdF9mcm96ZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2luaXRfZnJvemVuKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpuYW1lOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJVOmluaXRfZnJvemVuIiwKLSAgICAgICAgJm5hbWUpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pbml0X2Zyb3plbl9pbXBsKG1vZHVsZSwgbmFtZSk7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfaW5pdF9mcm96ZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNGJjMmJmZjI5NmY4ZjIyIGlucHV0PTEzMDE5YWRmYzA0ZjNmYjNdKi8KK19pbXBfaW5pdF9mcm96ZW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mYzA1MTFlZDg2OWZkNjljIGlucHV0PTEzMDE5YWRmYzA0ZjNmYjNdKi8KIHsKICAgICBpbnQgcmV0OwogICAgIFB5T2JqZWN0ICptOwpAQCAtMjAzNywzNyArMTg4OCw5IEBACiBDcmVhdGUgYSBjb2RlIG9iamVjdCBmb3IgYSBmcm96ZW4gbW9kdWxlLgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi1QeURvY19TVFJWQVIoX2ltcF9nZXRfZnJvemVuX29iamVjdF9fZG9jX18sCi0iZ2V0X2Zyb3plbl9vYmplY3QoJG1vZHVsZSwgbmFtZSwgLylcbiIKLSItLVxuIgotIlxuIgotIkNyZWF0ZSBhIGNvZGUgb2JqZWN0IGZvciBhIGZyb3plbiBtb2R1bGUuIik7Ci0KLSNkZWZpbmUgX0lNUF9HRVRfRlJPWkVOX09CSkVDVF9NRVRIT0RERUYgICAgXAotICAgIHsiZ2V0X2Zyb3plbl9vYmplY3QiLCAoUHlDRnVuY3Rpb24pX2ltcF9nZXRfZnJvemVuX29iamVjdCwgTUVUSF9WQVJBUkdTLCBfaW1wX2dldF9mcm96ZW5fb2JqZWN0X19kb2NfX30sCi0KIHN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2dldF9mcm96ZW5fb2JqZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9nZXRfZnJvemVuX29iamVjdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbmFtZTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAiVTpnZXRfZnJvemVuX29iamVjdCIsCi0gICAgICAgICZuYW1lKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IF9pbXBfZ2V0X2Zyb3plbl9vYmplY3RfaW1wbChtb2R1bGUsIG5hbWUpOwotCi1leGl0OgotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2dldF9mcm96ZW5fb2JqZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDA4OWVjNzAyYTlkNzBjNSBpbnB1dD1lZDY4OWJjMDUzNThmZGJkXSovCitfaW1wX2dldF9mcm96ZW5fb2JqZWN0X2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjU2OGNjNWI3YWEwZGE2MyBpbnB1dD1lZDY4OWJjMDUzNThmZGJkXSovCiB7CiAgICAgcmV0dXJuIGdldF9mcm96ZW5fb2JqZWN0KG5hbWUpOwogfQpAQCAtMjA4MSwzNyArMTkwNCw5IEBACiBSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGlzIG9mIGEgZnJvemVuIHBhY2thZ2UuCiBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKLVB5RG9jX1NUUlZBUihfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX19kb2NfXywKLSJpc19mcm96ZW5fcGFja2FnZSgkbW9kdWxlLCBuYW1lLCAvKVxuIgotIi0tXG4iCi0iXG4iCi0iUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBpcyBvZiBhIGZyb3plbiBwYWNrYWdlLiIpOwotCi0jZGVmaW5lIF9JTVBfSVNfRlJPWkVOX1BBQ0tBR0VfTUVUSE9EREVGICAgIFwKLSAgICB7ImlzX2Zyb3plbl9wYWNrYWdlIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaXNfZnJvemVuX3BhY2thZ2UsIE1FVEhfVkFSQVJHUywgX2ltcF9pc19mcm96ZW5fcGFja2FnZV9fZG9jX199LAotCiBzdGF0aWMgUHlPYmplY3QgKgotX2ltcF9pc19mcm96ZW5fcGFja2FnZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfaXNfZnJvemVuX3BhY2thZ2UoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm5hbWU7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgIlU6aXNfZnJvemVuX3BhY2thZ2UiLAotICAgICAgICAmbmFtZSkpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICByZXR1cm5fdmFsdWUgPSBfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX2ltcGwobW9kdWxlLCBuYW1lKTsKLQotZXhpdDoKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9pc19mcm96ZW5fcGFja2FnZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg2YWFiMTRkY2Q0Yjk1OWIgaW5wdXQ9ODFiNmNkZWNkMDgwZmJiOF0qLworX2ltcF9pc19mcm96ZW5fcGFja2FnZV9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWU3MGNiZGI0NTc4NGExYzkgaW5wdXQ9ODFiNmNkZWNkMDgwZmJiOF0qLwogewogICAgIHJldHVybiBpc19mcm96ZW5fcGFja2FnZShuYW1lKTsKIH0KQEAgLTIxMjUsMzcgKzE5MjAsOSBAQAogUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGJ1aWx0LWluIG1vZHVsZS4KIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotUHlEb2NfU1RSVkFSKF9pbXBfaXNfYnVpbHRpbl9fZG9jX18sCi0iaXNfYnVpbHRpbigkbW9kdWxlLCBuYW1lLCAvKVxuIgotIi0tXG4iCi0iXG4iCi0iUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGJ1aWx0LWluIG1vZHVsZS4iKTsKLQotI2RlZmluZSBfSU1QX0lTX0JVSUxUSU5fTUVUSE9EREVGICAgIFwKLSAgICB7ImlzX2J1aWx0aW4iLCAoUHlDRnVuY3Rpb24pX2ltcF9pc19idWlsdGluLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaXNfYnVpbHRpbl9fZG9jX199LAotCiBzdGF0aWMgUHlPYmplY3QgKgotX2ltcF9pc19idWlsdGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9pc19idWlsdGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpuYW1lOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJVOmlzX2J1aWx0aW4iLAotICAgICAgICAmbmFtZSkpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICByZXR1cm5fdmFsdWUgPSBfaW1wX2lzX2J1aWx0aW5faW1wbChtb2R1bGUsIG5hbWUpOwotCi1leGl0OgotICAgIHJldHVybiByZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2lzX2J1aWx0aW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKLS8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNTg0N2Y4Y2FjNTA5NDZlIGlucHV0PTg2YmVmZGFjMDIxZGQxYzddKi8KK19pbXBfaXNfYnVpbHRpbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNiZmQxMTYyZTJkM2JlODIgaW5wdXQ9ODZiZWZkYWMwMjFkZDFjN10qLwogewogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoaXNfYnVpbHRpbihuYW1lKSk7CiB9CkBAIC0yMTY5LDM3ICsxOTM2LDkgQEAKIFJldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgY29ycmVzcG9uZHMgdG8gYSBmcm96ZW4gbW9kdWxlLgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi1QeURvY19TVFJWQVIoX2ltcF9pc19mcm96ZW5fX2RvY19fLAotImlzX2Zyb3plbigkbW9kdWxlLCBuYW1lLCAvKVxuIgotIi0tXG4iCi0iXG4iCi0iUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGZyb3plbiBtb2R1bGUuIik7Ci0KLSNkZWZpbmUgX0lNUF9JU19GUk9aRU5fTUVUSE9EREVGICAgIFwKLSAgICB7ImlzX2Zyb3plbiIsIChQeUNGdW5jdGlvbilfaW1wX2lzX2Zyb3plbiwgTUVUSF9WQVJBUkdTLCBfaW1wX2lzX2Zyb3plbl9fZG9jX199LAotCiBzdGF0aWMgUHlPYmplY3QgKgotX2ltcF9pc19mcm96ZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2lzX2Zyb3plbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbmFtZTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAiVTppc19mcm96ZW4iLAotICAgICAgICAmbmFtZSkpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICByZXR1cm5fdmFsdWUgPSBfaW1wX2lzX2Zyb3plbl9pbXBsKG1vZHVsZSwgbmFtZSk7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfaXNfZnJvemVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCi0vKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjY5MWFmODg0YmE0OTg3ZCBpbnB1dD03MzAxZGJjYTE4OTdkNjZiXSovCitfaW1wX2lzX2Zyb3plbl9pbXBsKFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAxZjQwOGY1ZWMwZjI1NzcgaW5wdXQ9NzMwMWRiY2ExODk3ZDY2Yl0qLwogewogICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOwogCkBAIC0yMjA3LDg0ICsxOTQ2LDEzMSBAQAogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpIChwID09IE5VTEwgPyAwIDogcC0+c2l6ZSkpOwogfQogCisvKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIF9pbXAuZXhlY19keW5hbWljIGFuZCBfaW1wLmV4ZWNfYnVpbHRpbiAqLworc3RhdGljIGludAorZXhlY19idWlsdGluX29yX2R5bmFtaWMoUHlPYmplY3QgKm1vZCkgeworICAgIFB5TW9kdWxlRGVmICpkZWY7CisgICAgdm9pZCAqc3RhdGU7CisKKyAgICBpZiAoIVB5TW9kdWxlX0NoZWNrKG1vZCkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZGVmID0gUHlNb2R1bGVfR2V0RGVmKG1vZCk7CisgICAgaWYgKGRlZiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHN0YXRlID0gUHlNb2R1bGVfR2V0U3RhdGUobW9kKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChzdGF0ZSkgeworICAgICAgICAvKiBBbHJlYWR5IGluaXRpYWxpemVkOyBza2lwIHJlbG9hZCAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIFB5TW9kdWxlX0V4ZWNEZWYobW9kLCBkZWYpOworfQorCiAjaWZkZWYgSEFWRV9EWU5BTUlDX0xPQURJTkcKIAogLypbY2xpbmljIGlucHV0XQotX2ltcC5sb2FkX2R5bmFtaWMKK19pbXAuY3JlYXRlX2R5bmFtaWMKIAotICAgIG5hbWU6IHVuaWNvZGUKLSAgICBwYXRoOiBmc191bmljb2RlCisgICAgc3BlYzogb2JqZWN0CiAgICAgZmlsZTogb2JqZWN0ID0gTlVMTAogICAgIC8KIAotTG9hZHMgYW4gZXh0ZW5zaW9uIG1vZHVsZS4KK0NyZWF0ZSBhbiBleHRlbnNpb24gbW9kdWxlLgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi1QeURvY19TVFJWQVIoX2ltcF9sb2FkX2R5bmFtaWNfX2RvY19fLAotImxvYWRfZHluYW1pYygkbW9kdWxlLCBuYW1lLCBwYXRoLCBmaWxlPU5vbmUsIC8pXG4iCi0iLS1cbiIKLSJcbiIKLSJMb2FkcyBhbiBleHRlbnNpb24gbW9kdWxlLiIpOwotCi0jZGVmaW5lIF9JTVBfTE9BRF9EWU5BTUlDX01FVEhPRERFRiAgICBcCi0gICAgeyJsb2FkX2R5bmFtaWMiLCAoUHlDRnVuY3Rpb24pX2ltcF9sb2FkX2R5bmFtaWMsIE1FVEhfVkFSQVJHUywgX2ltcF9sb2FkX2R5bmFtaWNfX2RvY19ffSwKLQogc3RhdGljIFB5T2JqZWN0ICoKLV9pbXBfbG9hZF9keW5hbWljX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpwYXRoLCBQeU9iamVjdCAqZmlsZSk7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1faW1wX2xvYWRfZHluYW1pYyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK19pbXBfY3JlYXRlX2R5bmFtaWNfaW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqc3BlYywgUHlPYmplY3QgKmZpbGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODMyNDliODI3YTRmZGU3NyBpbnB1dD1jMzFiOTU0ZjRjZjRlMDlkXSovCiB7Ci0gICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm5hbWU7Ci0gICAgUHlPYmplY3QgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmZpbGUgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICJVTyZ8Tzpsb2FkX2R5bmFtaWMiLAotICAgICAgICAmbmFtZSwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJnBhdGgsICZmaWxlKSkKLSAgICAgICAgZ290byBleGl0OwotICAgIHJldHVybl92YWx1ZSA9IF9pbXBfbG9hZF9keW5hbWljX2ltcGwobW9kdWxlLCBuYW1lLCBwYXRoLCBmaWxlKTsKLQotZXhpdDoKLSAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotX2ltcF9sb2FkX2R5bmFtaWNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnBhdGgsIFB5T2JqZWN0ICpmaWxlKQotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTgxZDExYTFmYmQxZWEwYTggaW5wdXQ9YWY2NGYwNmU0YmFkMzUyNl0qLwotewotICAgIFB5T2JqZWN0ICptb2Q7CisgICAgUHlPYmplY3QgKm1vZCwgKm5hbWUsICpwYXRoOwogICAgIEZJTEUgKmZwOwogCisgICAgbmFtZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc3BlYywgIm5hbWUiKTsKKyAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHBhdGggPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNwZWMsICJvcmlnaW4iKTsKKyAgICBpZiAocGF0aCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbW9kID0gX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QobmFtZSwgcGF0aCk7CisgICAgaWYgKG1vZCAhPSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHBhdGgpOworICAgICAgICBQeV9JTkNSRUYobW9kKTsKKyAgICAgICAgcmV0dXJuIG1vZDsKKyAgICB9CisKICAgICBpZiAoZmlsZSAhPSBOVUxMKSB7CiAgICAgICAgIGZwID0gX1B5X2ZvcGVuX29iaihwYXRoLCAiciIpOwogICAgICAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKHBhdGgpOwotICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgZnAgPSBOVUxMOwotICAgIG1vZCA9IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZShuYW1lLCBwYXRoLCBmcCk7CisKKyAgICBtb2QgPSBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGVXaXRoU3BlYyhzcGVjLCBmcCk7CisKKyAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgUHlfREVDUkVGKHBhdGgpOwogICAgIGlmIChmcCkKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICByZXR1cm4gbW9kOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmV4ZWNfZHluYW1pYyAtPiBpbnQKKworICAgIG1vZDogb2JqZWN0CisgICAgLworCitJbml0aWFsaXplIGFuIGV4dGVuc2lvbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBpbnQKK19pbXBfZXhlY19keW5hbWljX2ltcGwoUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKm1vZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mNTcyMGFjN2I0NjU4NzdkIGlucHV0PTlmZGJmY2IyNTAyODBkM2FdKi8KK3sKKyAgICByZXR1cm4gZXhlY19idWlsdGluX29yX2R5bmFtaWMobW9kKTsKK30KKworCiAjZW5kaWYgLyogSEFWRV9EWU5BTUlDX0xPQURJTkcgKi8KIAogLypbY2xpbmljIGlucHV0XQorX2ltcC5leGVjX2J1aWx0aW4gLT4gaW50CisKKyAgICBtb2Q6IG9iamVjdAorICAgIC8KKworSW5pdGlhbGl6ZSBhIGJ1aWx0LWluIG1vZHVsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorX2ltcF9leGVjX2J1aWx0aW5faW1wbChQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqbW9kKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAyNjI0NDdiMjQwYzAzOGUgaW5wdXQ9N2JlZWQ1YTJmMTJhNjBjYV0qLworeworICAgIHJldHVybiBleGVjX2J1aWx0aW5fb3JfZHluYW1pYyhtb2QpOworfQorCisvKltjbGluaWMgaW5wdXRdCiBkdW1wIGJ1ZmZlcgogW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwotCi0jaWZuZGVmIF9JTVBfTE9BRF9EWU5BTUlDX01FVEhPRERFRgotICAgICNkZWZpbmUgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGCi0jZW5kaWYgLyogIWRlZmluZWQoX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGKSAqLwotLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQwN2MxZDRhMzQzYTk1NzkgaW5wdXQ9NTI0Y2UyZTAyMWU0ZWJhNl0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NTI0Y2UyZTAyMWU0ZWJhNl0qLwogCiAKIFB5RG9jX1NUUlZBUihkb2NfaW1wLApAQCAtMjI5NywxMSArMjA4MywxMyBAQAogICAgIF9JTVBfUkVMRUFTRV9MT0NLX01FVEhPRERFRgogICAgIF9JTVBfR0VUX0ZST1pFTl9PQkpFQ1RfTUVUSE9EREVGCiAgICAgX0lNUF9JU19GUk9aRU5fUEFDS0FHRV9NRVRIT0RERUYKLSAgICBfSU1QX0lOSVRfQlVJTFRJTl9NRVRIT0RERUYKKyAgICBfSU1QX0NSRUFURV9CVUlMVElOX01FVEhPRERFRgogICAgIF9JTVBfSU5JVF9GUk9aRU5fTUVUSE9EREVGCiAgICAgX0lNUF9JU19CVUlMVElOX01FVEhPRERFRgogICAgIF9JTVBfSVNfRlJPWkVOX01FVEhPRERFRgotICAgIF9JTVBfTE9BRF9EWU5BTUlDX01FVEhPRERFRgorICAgIF9JTVBfQ1JFQVRFX0RZTkFNSUNfTUVUSE9EREVGCisgICAgX0lNUF9FWEVDX0RZTkFNSUNfTUVUSE9EREVGCisgICAgX0lNUF9FWEVDX0JVSUxUSU5fTUVUSE9EREVGCiAgICAgX0lNUF9fRklYX0NPX0ZJTEVOQU1FX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgLyogc2VudGluZWwgKi8KIH07CkBAIC0yMzg0LDcgKzIxNzIsNyBAQAogCiAgICAgbWVtc2V0KG5ld3RhYiwgJ1wwJywgc2l6ZW9mIG5ld3RhYik7CiAKLSAgICBuZXd0YWJbMF0ubmFtZSA9IChjaGFyICopbmFtZTsKKyAgICBuZXd0YWJbMF0ubmFtZSA9IG5hbWU7CiAgICAgbmV3dGFiWzBdLmluaXRmdW5jID0gaW5pdGZ1bmM7CiAKICAgICByZXR1cm4gUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYihuZXd0YWIpOwpAQCAtMjM5Myw0ICsyMTgxLDMgQEAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRkbC5jIGIvUHl0aG9uL2ltcG9ydGRsLmMKaW5kZXggYjYwZjFjNy4uMWFhNTg1ZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGRsLmMKKysrIGIvUHl0aG9uL2ltcG9ydGRsLmMKQEAgLTEzLDg3ICsxMywxODUgQEAKICNpbmNsdWRlICJpbXBvcnRkbC5oIgogCiAjaWZkZWYgTVNfV0lORE9XUwotZXh0ZXJuIGRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcGF0aG5hbWUsIEZJTEUgKmZwKTsKK2V4dGVybiBkbF9mdW5jcHRyIF9QeUltcG9ydF9GaW5kU2hhcmVkRnVuY3B0cldpbmRvd3MoY29uc3QgY2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzaG9ydG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqZnApOwogI2Vsc2UKLWV4dGVybiBkbF9mdW5jcHRyIF9QeUltcG9ydF9HZXREeW5Mb2FkRnVuYyhjb25zdCBjaGFyICpzaG9ydG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZwKTsKK2V4dGVybiBkbF9mdW5jcHRyIF9QeUltcG9ydF9GaW5kU2hhcmVkRnVuY3B0cihjb25zdCBjaGFyICpwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2hvcnRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCk7CiAjZW5kaWYKIAotUHlPYmplY3QgKgotX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlKFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqcGF0aCwgRklMRSAqZnApCi17Ci0gICAgUHlPYmplY3QgKm0gPSBOVUxMOwotI2lmbmRlZiBNU19XSU5ET1dTCi0gICAgUHlPYmplY3QgKnBhdGhieXRlczsKLSNlbmRpZgotICAgIFB5T2JqZWN0ICpuYW1lYXNjaWk7Ci0gICAgY2hhciAqbmFtZXN0ciwgKmxhc3Rkb3QsICpzaG9ydG5hbWUsICpwYWNrYWdlY29udGV4dCwgKm9sZGNvbnRleHQ7Ci0gICAgZGxfZnVuY3B0ciBwMDsKLSAgICBQeU9iamVjdCogKCpwKSh2b2lkKTsKLSAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKmRlZjsKK3N0YXRpYyBjb25zdCBjaGFyICphc2NpaV9vbmx5X3ByZWZpeCA9ICJQeUluaXQiOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbmFzY2lpX3ByZWZpeCA9ICJQeUluaXRVIjsKIAotICAgIG0gPSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChuYW1lLCBwYXRoKTsKLSAgICBpZiAobSAhPSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihtKTsKLSAgICAgICAgcmV0dXJuIG07CisvKiBHZXQgdGhlIHZhcmlhYmxlIHBhcnQgb2YgYSBtb2R1bGUncyBleHBvcnQgc3ltYm9sIG5hbWUuCisgKiBSZXR1cm5zIGEgYnl0ZXMgaW5zdGFuY2UuIEZvciBub24tQVNDSUktbmFtZWQgbW9kdWxlcywgdGhlIG5hbWUgaXMKKyAqIGVuY29kZWQgYXMgcGVyIFBFUCA0ODkuCisgKiBUaGUgaG9va19wcmVmaXggcG9pbnRlciBpcyBzZXQgdG8gZWl0aGVyIGFzY2lpX29ubHlfcHJlZml4IG9yCisgKiBub25hc2NpaV9wcmVmaXgsIGFzIGFwcHJvcHJpYXRlLgorICovCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X2VuY29kZWRfbmFtZShQeU9iamVjdCAqbmFtZSwgY29uc3QgY2hhciAqKmhvb2tfcHJlZml4KSB7CisgICAgUHlPYmplY3QgKnRtcDsKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5VTEw7CisgICAgUHlPYmplY3QgKm1vZG5hbWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgbmFtZV9sZW4sIGxhc3Rkb3Q7CisgICAgX1B5X0lERU5USUZJRVIocmVwbGFjZSk7CisKKyAgICAvKiBHZXQgdGhlIHNob3J0IG5hbWUgKHN1YnN0cmluZyBhZnRlciBsYXN0IGRvdCkgKi8KKyAgICBuYW1lX2xlbiA9IFB5VW5pY29kZV9HZXRMZW5ndGgobmFtZSk7CisgICAgbGFzdGRvdCA9IFB5VW5pY29kZV9GaW5kQ2hhcihuYW1lLCAnLicsIDAsIG5hbWVfbGVuLCAtMSk7CisgICAgaWYgKGxhc3Rkb3QgPCAtMSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgaWYgKGxhc3Rkb3QgPj0gMCkgeworICAgICAgICB0bXAgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKG5hbWUsIGxhc3Rkb3QgKyAxLCBuYW1lX2xlbik7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBuYW1lID0gdG1wOworICAgICAgICAvKiAibmFtZSIgbm93IGhvbGRzIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgc3Vic3RyaW5nICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKG5hbWUpOwogICAgIH0KIAotICAgIC8qIG5hbWUgbXVzdCBiZSBlbmNvZGFibGUgdG8gQVNDSUkgYmVjYXVzZSBkeW5hbWljIG1vZHVsZSBtdXN0IGhhdmUgYQotICAgICAgIGZ1bmN0aW9uIGNhbGxlZCAiUHlJbml0X05BTUUiLCB0aGV5IGFyZSB3cml0dGVuIGluIEMsIGFuZCB0aGUgQyBsYW5ndWFnZQotICAgICAgIGRvZXNuJ3QgYWNjZXB0IG5vbi1BU0NJSSBpZGVudGlmaWVycy4gKi8KLSAgICBuYW1lYXNjaWkgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG5hbWUsICJhc2NpaSIsIE5VTEwpOwotICAgIGlmIChuYW1lYXNjaWkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogRW5jb2RlIHRvIEFTQ0lJIG9yIFB1bnljb2RlLCBhcyBuZWVkZWQgKi8KKyAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhuYW1lLCAiYXNjaWkiLCBOVUxMKTsKKyAgICBpZiAoZW5jb2RlZCAhPSBOVUxMKSB7CisgICAgICAgICpob29rX3ByZWZpeCA9IGFzY2lpX29ubHlfcHJlZml4OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhuYW1lLCAicHVueWNvZGUiLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmhvb2tfcHJlZml4ID0gbm9uYXNjaWlfcHJlZml4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KIAotICAgIG5hbWVzdHIgPSBQeUJ5dGVzX0FTX1NUUklORyhuYW1lYXNjaWkpOwotICAgIGlmIChuYW1lc3RyID09IE5VTEwpCisgICAgLyogUmVwbGFjZSAnLScgYnkgJ18nICovCisgICAgbW9kbmFtZSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZW5jb2RlZCwgJlB5SWRfcmVwbGFjZSwgImNjIiwgJy0nLCAnXycpOworICAgIGlmIChtb2RuYW1lID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBsYXN0ZG90ID0gc3RycmNocihuYW1lc3RyLCAnLicpOwotICAgIGlmIChsYXN0ZG90ID09IE5VTEwpIHsKLSAgICAgICAgcGFja2FnZWNvbnRleHQgPSBOVUxMOwotICAgICAgICBzaG9ydG5hbWUgPSBuYW1lc3RyOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcGFja2FnZWNvbnRleHQgPSBuYW1lc3RyOwotICAgICAgICBzaG9ydG5hbWUgPSBsYXN0ZG90KzE7CisgICAgUHlfREVDUkVGKG5hbWUpOworICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICByZXR1cm4gbW9kbmFtZTsKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICBQeV9YREVDUkVGKGVuY29kZWQpOworICAgIHJldHVybiBOVUxMOworfQorCitQeU9iamVjdCAqCitfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGVXaXRoU3BlYyhQeU9iamVjdCAqc3BlYywgRklMRSAqZnApCit7CisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBQeU9iamVjdCAqcGF0aGJ5dGVzID0gTlVMTDsKKyNlbmRpZgorICAgIFB5T2JqZWN0ICpuYW1lX3VuaWNvZGUgPSBOVUxMLCAqbmFtZSA9IE5VTEwsICpwYXRoID0gTlVMTCwgKm0gPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm5hbWVfYnVmLCAqaG9va19wcmVmaXg7CisgICAgY2hhciAqb2xkY29udGV4dDsKKyAgICBkbF9mdW5jcHRyIGV4cG9ydGZ1bmM7CisgICAgUHlNb2R1bGVEZWYgKmRlZjsKKyAgICBQeU9iamVjdCAqKCpwMCkodm9pZCk7CisKKyAgICBuYW1lX3VuaWNvZGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNwZWMsICJuYW1lIik7CisgICAgaWYgKG5hbWVfdW5pY29kZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIG5hbWUgPSBnZXRfZW5jb2RlZF9uYW1lKG5hbWVfdW5pY29kZSwgJmhvb2tfcHJlZml4KTsKKyAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIG5hbWVfYnVmID0gUHlCeXRlc19BU19TVFJJTkcobmFtZSk7CisKKyAgICBwYXRoID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzcGVjLCAib3JpZ2luIik7CisgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKwogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBwMCA9IF9QeUltcG9ydF9HZXREeW5Mb2FkV2luZG93cyhzaG9ydG5hbWUsIHBhdGgsIGZwKTsKKyAgICBleHBvcnRmdW5jID0gX1B5SW1wb3J0X0ZpbmRTaGFyZWRGdW5jcHRyV2luZG93cyhob29rX3ByZWZpeCwgbmFtZV9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgZnApOwogI2Vsc2UKICAgICBwYXRoYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KHBhdGgpOwogICAgIGlmIChwYXRoYnl0ZXMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBwMCA9IF9QeUltcG9ydF9HZXREeW5Mb2FkRnVuYyhzaG9ydG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocGF0aGJ5dGVzKSwgZnApOworICAgIGV4cG9ydGZ1bmMgPSBfUHlJbXBvcnRfRmluZFNoYXJlZEZ1bmNwdHIoaG9va19wcmVmaXgsIG5hbWVfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocGF0aGJ5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwKTsKICAgICBQeV9ERUNSRUYocGF0aGJ5dGVzKTsKICNlbmRpZgotICAgIHAgPSAoUHlPYmplY3QqKCopKHZvaWQpKXAwOwotICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJkeW5hbWljIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXQgZnVuY3Rpb24gKFB5SW5pdF8lcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRuYW1lKTsKLSAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgUHlFcnJfU2V0SW1wb3J0RXJyb3IobXNnLCBuYW1lLCBwYXRoKTsKLSAgICAgICAgUHlfREVDUkVGKG1zZyk7CisKKyAgICBpZiAoZXhwb3J0ZnVuYyA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm1zZzsKKyAgICAgICAgICAgIG1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KAorICAgICAgICAgICAgICAgICJkeW5hbWljIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgIgorICAgICAgICAgICAgICAgICJtb2R1bGUgZXhwb3J0IGZ1bmN0aW9uICglc18lcykiLAorICAgICAgICAgICAgICAgIGhvb2tfcHJlZml4LCBuYW1lX2J1Zik7CisgICAgICAgICAgICBpZiAobXNnID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFB5RXJyX1NldEltcG9ydEVycm9yKG1zZywgbmFtZV91bmljb2RlLCBwYXRoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtc2cpOworICAgICAgICB9CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIG9sZGNvbnRleHQgPSBfUHlfUGFja2FnZUNvbnRleHQ7Ci0gICAgX1B5X1BhY2thZ2VDb250ZXh0ID0gcGFja2FnZWNvbnRleHQ7Ci0gICAgbSA9ICgqcCkoKTsKLSAgICBfUHlfUGFja2FnZUNvbnRleHQgPSBvbGRjb250ZXh0OwotICAgIGlmIChtID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgIHAwID0gKFB5T2JqZWN0ICooKikodm9pZCkpZXhwb3J0ZnVuYzsKKworICAgIC8qIFBhY2thZ2UgY29udGV4dCBpcyBuZWVkZWQgZm9yIHNpbmdsZS1waGFzZSBpbml0ICovCisgICAgb2xkY29udGV4dCA9IF9QeV9QYWNrYWdlQ29udGV4dDsKKyAgICBfUHlfUGFja2FnZUNvbnRleHQgPSBQeVVuaWNvZGVfQXNVVEY4KG5hbWVfdW5pY29kZSk7CisgICAgbSA9IHAwKCk7CisgICAgX1B5X1BhY2thZ2VDb250ZXh0ID0gb2xkY29udGV4dDsKKworICAgIGlmIChtID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgImluaXRpYWxpemF0aW9uIG9mICVzIGZhaWxlZCB3aXRob3V0IHJhaXNpbmcgYW4gZXhjZXB0aW9uIiwKKyAgICAgICAgICAgICAgICBuYW1lX2J1Zik7CisgICAgICAgIH0KKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9IGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAiaW5pdGlhbGl6YXRpb24gb2YgJXMgcmFpc2VkIHVucmVwb3J0ZWQgZXhjZXB0aW9uIiwKKyAgICAgICAgICAgIG5hbWVfYnVmKTsKKyAgICAgICAgbSA9IE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChQeV9UWVBFKG0pID09IE5VTEwpIHsKKyAgICAgICAgLyogVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBQeU1vZHVsZURlZiBpcyByZXR1cm5lZCB3aXRob3V0IGNhbGxpbmcKKyAgICAgICAgICogUHlNb2R1bGVEZWZfSW5pdCBvbiBpdAorICAgICAgICAgKi8KICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemF0aW9uIG9mICVzIHJhaXNlZCB1bnJlcG9ydGVkIGV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICBzaG9ydG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgImluaXQgZnVuY3Rpb24gb2YgJXMgcmV0dXJuZWQgdW5pbml0aWFsaXplZCBvYmplY3QiLAorICAgICAgICAgICAgICAgICAgICAgbmFtZV9idWYpOworICAgICAgICBtID0gTlVMTDsgLyogcHJldmVudCBzZWdmYXVsdCBpbiBERUNSRUYgKi8KKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhtLCAmUHlNb2R1bGVEZWZfVHlwZSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG5hbWVfdW5pY29kZSk7CisgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHBhdGgpOworICAgICAgICByZXR1cm4gUHlNb2R1bGVfRnJvbURlZkFuZFNwZWMoKFB5TW9kdWxlRGVmKiltLCBzcGVjKTsKKyAgICB9CisKKyAgICAvKiBGYWxsIGJhY2sgdG8gc2luZ2xlLXBoYXNlIGluaXQgbWVjaGFuaXNtICovCisKKyAgICBpZiAoaG9va19wcmVmaXggPT0gbm9uYXNjaWlfcHJlZml4KSB7CisgICAgICAgIC8qIGRvbid0IGFsbG93IGxlZ2FjeSBpbml0IGZvciBub24tQVNDSUkgbW9kdWxlIG5hbWVzICovCisgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgImluaXRpYWxpemF0aW9uIG9mICogZGlkIG5vdCByZXR1cm4gUHlNb2R1bGVEZWYiLAorICAgICAgICAgICAgbmFtZV9idWYpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIApAQCAtMTAyLDEwICsyMDAsMTAgQEAKICAgICBpZiAoZGVmID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemF0aW9uIG9mICVzIGRpZCBub3QgcmV0dXJuIGFuIGV4dGVuc2lvbiAiCi0gICAgICAgICAgICAgICAgICAgICAibW9kdWxlIiwgc2hvcnRuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICJtb2R1bGUiLCBuYW1lX2J1Zik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGRlZi0+bV9iYXNlLm1faW5pdCA9IHA7CisgICAgZGVmLT5tX2Jhc2UubV9pbml0ID0gcDA7CiAKICAgICAvKiBSZW1lbWJlciB0aGUgZmlsZW5hbWUgYXMgdGhlIF9fZmlsZV9fIGF0dHJpYnV0ZSAqLwogICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIl9fZmlsZV9fIiwgcGF0aCkgPCAwKQpAQCAtMTEzLDEzICsyMTEsMTkgQEAKICAgICBlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihwYXRoKTsKIAotICAgIGlmIChfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QobSwgbmFtZSwgcGF0aCkgPCAwKQorICAgIGlmIChfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QobSwgbmFtZV91bmljb2RlLCBwYXRoKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfREVDUkVGKG5hbWVhc2NpaSk7CisKKyAgICBQeV9ERUNSRUYobmFtZV91bmljb2RlKTsKKyAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgUHlfREVDUkVGKHBhdGgpOworCiAgICAgcmV0dXJuIG07CiAKIGVycm9yOgotICAgIFB5X0RFQ1JFRihuYW1lYXNjaWkpOworICAgIFB5X0RFQ1JFRihuYW1lX3VuaWNvZGUpOworICAgIFB5X1hERUNSRUYobmFtZSk7CisgICAgUHlfWERFQ1JFRihwYXRoKTsKICAgICBQeV9YREVDUkVGKG0pOwogICAgIHJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGRsLmggYi9QeXRob24vaW1wb3J0ZGwuaAppbmRleCA2YTUxYTkxLi45ODQ3NjUyIDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0ZGwuaAorKysgYi9QeXRob24vaW1wb3J0ZGwuaApAQCAtOCw4ICs4LDcgQEAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKl9QeUltcG9ydF9EeW5Mb2FkRmlsZXRhYltdOwogCi1leHRlcm4gUHlPYmplY3QgKl9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZShQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqKTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlV2l0aFNwZWMoUHlPYmplY3QgKnNwZWMsIEZJTEUgKik7CiAKIC8qIE1heCBsZW5ndGggb2YgbW9kdWxlIHN1ZmZpeCBzZWFyY2hlZCBmb3IgLS0gYWNjb21tb2RhdGVzICJtb2R1bGUuc2xiIiAqLwogI2RlZmluZSBNQVhTVUZGSVhTSVpFIDEyCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0bGliLmggYi9QeXRob24vaW1wb3J0bGliLmgKaW5kZXggNzViZmNhNC4uN2Y2Yjc1MyAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGxpYi5oCisrKyBiL1B5dGhvbi9pbXBvcnRsaWIuaApAQCAtMSwyMjYzICsxLDE0NTIgQEAKLS8qIEF1dG8tZ2VuZXJhdGVkIGJ5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLworLyogQXV0by1nZW5lcmF0ZWQgYnkgUHJvZ3JhbXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLwogY29uc3QgdW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7Ci0gICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsCi0gICAgMCw2NCwwLDAsMCwxMTUsMjI4LDQsMCwwLDEwMCwwLDAsOTAsMCwwLAotICAgIDEwMCwxNjMsMCw5MCwxLDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsCi0gICAgMiwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDMsMCwxMDAsOCwKLSAgICAwLDEwMCw5LDAsMTMyLDAsMCw5MCw0LDAsMTAwLDEwLDAsMTAwLDExLDAsCi0gICAgMTMyLDAsMCw5MCw1LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCw5MCwKLSAgICA2LDAsMTAwLDE0LDAsMTAwLDE1LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDE2LAotICAgIDAsMTAwLDE3LDAsMTMyLDAsMCw5MCw4LDAsMTAwLDE4LDAsMTAwLDE5LDAsCi0gICAgMTMyLDAsMCw5MCw5LDAsMTAwLDIwLDAsMTAwLDIxLDAsMTMyLDAsMCw5MCwKLSAgICAxMCwwLDEwMCwyMiwwLDEwMCwyMywwLDEwMCwyNCwwLDEzMiwxLDAsOTAsMTEsCi0gICAgMCwxMDAsMjUsMCwxMDAsMjYsMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDI3LDAsCi0gICAgMTAwLDI4LDAsMTMyLDAsMCw5MCwxMywwLDEwMSwxNCwwLDEwMSwxMiwwLDEwNiwKLSAgICAxNSwwLDEzMSwxLDAsOTAsMTYsMCw3MSwxMDAsMjksMCwxMDAsMzAsMCwxMzIsCi0gICAgMCwwLDEwMCwzMCwwLDEzMSwyLDAsOTAsMTcsMCwxMDUsMCwwLDkwLDE4LAotICAgIDAsMTA1LDAsMCw5MCwxOSwwLDcxLDEwMCwzMSwwLDEwMCwzMiwwLDEzMiwwLAotICAgIDAsMTAwLDMyLDAsMTAxLDIwLDAsMTMxLDMsMCw5MCwyMSwwLDcxLDEwMCwzMywKLSAgICAwLDEwMCwzNCwwLDEzMiwwLDAsMTAwLDM0LDAsMTMxLDIsMCw5MCwyMiwwLAotICAgIDcxLDEwMCwzNSwwLDEwMCwzNiwwLDEzMiwwLDAsMTAwLDM2LDAsMTMxLDIsMCwKLSAgICA5MCwyMywwLDcxLDEwMCwzNywwLDEwMCwzOCwwLDEzMiwwLDAsMTAwLDM4LDAsCi0gICAgMTMxLDIsMCw5MCwyNCwwLDEwMCwzOSwwLDEwMCw0MCwwLDEzMiwwLDAsOTAsCi0gICAgMjUsMCwxMDAsNDEsMCwxMDAsNDIsMCwxMzIsMCwwLDkwLDI2LDAsMTAwLDQzLAotICAgIDAsMTAwLDQ0LDAsMTMyLDAsMCw5MCwyNywwLDEwMCw0NSwwLDEwNiwyOCwwLAotICAgIDEwMCw0NiwwLDEwMCw0NywwLDEzMSwyLDAsMTAwLDQ4LDAsMjMsOTAsMjksMCwKLSAgICAxMDEsMzAsMCwxMDYsMzEsMCwxMDEsMjksMCwxMDAsNDcsMCwxMzEsMiwwLDkwLAotICAgIDMyLDAsMTAwLDQ5LDAsOTAsMzMsMCwxMDAsNTAsMCwxMDMsMSwwLDkwLDM0LAotICAgIDAsMTAwLDUxLDAsMTAzLDEsMCw5MCwzNSwwLDEwMCw1MiwwLDEwMywxLDAsCi0gICAgOTAsMzYsMCwxMDAsNTMsMCwxMDAsNTQsMCwxMDAsNTUsMCwxMzIsMSwwLDkwLAotICAgIDM3LDAsMTAwLDU2LDAsMTAwLDU3LDAsMTMyLDAsMCw5MCwzOCwwLDEwMCw1OCwKLSAgICAwLDEwMCw1OSwwLDEzMiwwLDAsOTAsMzksMCwxMDAsNjAsMCwxMDAsNjEsMCwKLSAgICAxMzIsMCwwLDkwLDQwLDAsMTAwLDYyLDAsMTAwLDYzLDAsMTAwLDY0LDAsMTAwLAotICAgIDY1LDAsMTMyLDAsMSw5MCw0MSwwLDEwMCw2NiwwLDEwMCw2NywwLDEzMiwwLAotICAgIDAsOTAsNDIsMCwxMDAsNjgsMCwxMDAsNjksMCwxMzIsMCwwLDkwLDQzLDAsCi0gICAgMTAwLDcwLDAsMTAwLDcxLDAsMTMyLDAsMCw5MCw0NCwwLDEwMCw3MiwwLDEwMCwKLSAgICA3MywwLDEzMiwwLDAsOTAsNDUsMCwxMDAsNzQsMCwxMDAsNzUsMCwxMzIsMCwKLSAgICAwLDkwLDQ2LDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAwLDc2LDAsCi0gICAgMTAwLDc3LDAsMTMyLDMsMCw5MCw0NywwLDEwMCw1MywwLDEwMCw1MywwLDEwMCwKLSAgICA1MywwLDEwMCw3OCwwLDEwMCw3OSwwLDEzMiwzLDAsOTAsNDgsMCwxMDAsODAsCi0gICAgMCwxMDAsODAsMCwxMDAsODEsMCwxMDAsODIsMCwxMzIsMiwwLDkwLDQ5LDAsCi0gICAgMTAwLDgzLDAsMTAwLDg0LDAsMTMyLDAsMCw5MCw1MCwwLDEwMCw4NSwwLDEwMCwKLSAgICA4NiwwLDEzMiwwLDAsOTAsNTEsMCw3MSwxMDAsODcsMCwxMDAsODgsMCwxMzIsCi0gICAgMCwwLDEwMCw4OCwwLDEzMSwyLDAsOTAsNTIsMCw3MSwxMDAsODksMCwxMDAsCi0gICAgOTAsMCwxMzIsMCwwLDEwMCw5MCwwLDEzMSwyLDAsOTAsNTMsMCwxMDAsOTEsCi0gICAgMCwxMDAsNTMsMCwxMDAsOTIsMCwxMDAsNTMsMCwxMDAsOTMsMCwxMDAsOTQsMCwKLSAgICAxMzIsMCwyLDkwLDU0LDAsMTAxLDU1LDAsMTMxLDAsMCw5MCw1NiwwLDEwMCwKLSAgICA1MywwLDEwMCw5NSwwLDEwMCw1MywwLDEwMCw5NiwwLDEwMSw1NiwwLDEwMCw5NywKLSAgICAwLDEwMCw5OCwwLDEzMiwxLDIsOTAsNTcsMCwxMDAsNTMsMCwxMDAsNTMsMCwKLSAgICAxMDAsOTksMCwxMDAsMTAwLDAsMTMyLDIsMCw5MCw1OCwwLDcxLDEwMCwxMDEsMCwKLSAgICAxMDAsMTAyLDAsMTMyLDAsMCwxMDAsMTAyLDAsMTMxLDIsMCw5MCw1OSwwLDEwMCwKLSAgICA1MywwLDEwMCwxMDMsMCwxMDAsMTA0LDAsMTMyLDEsMCw5MCw2MCwwLDcxLDEwMCwKLSAgICAxMDUsMCwxMDAsMTA2LDAsMTMyLDAsMCwxMDAsMTA2LDAsMTMxLDIsMCw5MCw2MSwKLSAgICAwLDcxLDEwMCwxMDcsMCwxMDAsMTA4LDAsMTMyLDAsMCwxMDAsMTA4LDAsMTMxLDIsCi0gICAgMCw5MCw2MiwwLDcxLDEwMCwxMDksMCwxMDAsMTEwLDAsMTMyLDAsMCwxMDAsMTEwLAotICAgIDAsMTMxLDIsMCw5MCw2MywwLDcxLDEwMCwxMTEsMCwxMDAsMTEyLDAsMTMyLDAsCi0gICAgMCwxMDAsMTEyLDAsMTMxLDIsMCw5MCw2NCwwLDcxLDEwMCwxMTMsMCwxMDAsMTE0LAotICAgIDAsMTMyLDAsMCwxMDAsMTE0LDAsMTAxLDY0LDAsMTMxLDMsMCw5MCw2NSwwLAotICAgIDcxLDEwMCwxMTUsMCwxMDAsMTE2LDAsMTMyLDAsMCwxMDAsMTE2LDAsMTMxLDIsMCwKLSAgICA5MCw2NiwwLDcxLDEwMCwxMTcsMCwxMDAsMTE4LDAsMTMyLDAsMCwxMDAsMTE4LDAsCi0gICAgMTAxLDY2LDAsMTAxLDY1LDAsMTMxLDQsMCw5MCw2NywwLDcxLDEwMCwxMTksMCwKLSAgICAxMDAsMTIwLDAsMTMyLDAsMCwxMDAsMTIwLDAsMTAxLDY2LDAsMTAxLDY0LDAsMTMxLAotICAgIDQsMCw5MCw2OCwwLDEwMywwLDAsOTAsNjksMCw3MSwxMDAsMTIxLDAsMTAwLAotICAgIDEyMiwwLDEzMiwwLDAsMTAwLDEyMiwwLDEzMSwyLDAsOTAsNzAsMCw3MSwxMDAsCi0gICAgMTIzLDAsMTAwLDEyNCwwLDEzMiwwLDAsMTAwLDEyNCwwLDEzMSwyLDAsOTAsNzEsCi0gICAgMCw3MSwxMDAsMTI1LDAsMTAwLDEyNiwwLDEzMiwwLDAsMTAwLDEyNiwwLDEzMSwyLAotICAgIDAsOTAsNzIsMCw3MSwxMDAsMTI3LDAsMTAwLDEyOCwwLDEzMiwwLDAsMTAwLDEyOCwKLSAgICAwLDEzMSwyLDAsOTAsNzMsMCw3MSwxMDAsMTI5LDAsMTAwLDEzMCwwLDEzMiwwLAotICAgIDAsMTAwLDEzMCwwLDEzMSwyLDAsOTAsNzQsMCw3MSwxMDAsMTMxLDAsMTAwLDEzMiwKLSAgICAwLDEzMiwwLDAsMTAwLDEzMiwwLDEzMSwyLDAsOTAsNzUsMCwxMDAsMTMzLDAsCi0gICAgMTAwLDEzNCwwLDEzMiwwLDAsOTAsNzYsMCwxMDAsMTM1LDAsMTAwLDEzNiwwLDEzMiwKLSAgICAwLDAsOTAsNzcsMCwxMDAsNTMsMCwxMDAsMTM3LDAsMTAwLDEzOCwwLDEzMiwxLAotICAgIDAsOTAsNzgsMCwxMDAsMTM5LDAsMTAwLDE0MCwwLDEzMiwwLDAsOTAsNzksMCwKLSAgICAxMDAsMTQxLDAsOTAsODAsMCwxMDEsODAsMCwxMDAsMTQyLDAsMjMsOTAsODEsMCwKLSAgICAxMDAsMTQzLDAsMTAwLDE0NCwwLDEzMiwwLDAsOTAsODIsMCwxMDAsMTQ1LDAsMTAwLAotICAgIDE0NiwwLDEzMiwwLDAsOTAsODMsMCwxMDAsNTMsMCwxMDAsODAsMCwxMDAsMTQ3LAotICAgIDAsMTAwLDE0OCwwLDEzMiwyLDAsOTAsODQsMCwxMDAsMTQ5LDAsMTAwLDE1MCwwLAotICAgIDEzMiwwLDAsOTAsODUsMCwxMDAsMTUxLDAsMTAwLDE1MiwwLDEzMiwwLDAsOTAsCi0gICAgODYsMCwxMDAsMTUzLDAsMTAwLDE1NCwwLDEzMiwwLDAsOTAsODcsMCwxMDAsNTMsCi0gICAgMCwxMDAsNTMsMCwxMDIsMCwwLDEwMCw4MCwwLDEwMCwxNTUsMCwxMDAsMTU2LDAsCi0gICAgMTMyLDQsMCw5MCw4OCwwLDEwMCwxNTcsMCwxMDAsMTU4LDAsMTMyLDAsMCw5MCwKLSAgICA4OSwwLDEwMCwxNTksMCwxMDAsMTYwLDAsMTMyLDAsMCw5MCw5MCwwLDEwMCwxNjEsCi0gICAgMCwxMDAsMTYyLDAsMTMyLDAsMCw5MCw5MSwwLDEwMCw1MywwLDgzLDQxLDE2NCwKLSAgICA5Nyw4MywxLDAsMCw2NywxMTEsMTE0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw0NiwxMCwxMCw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMDUsMTE1LDMyLDc4LDc5LDg0LDMyLDEwOSwxMDEsOTcsMTEwLDExNiwzMiwxMTYsMTExLAotICAgIDMyLDk4LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDEwOCwxMjEsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTAxLDEwMCwzMywzMiw3MywxMTYsMzIsMTA0LDk3LDExNSwzMiw5OCwxMDEsCi0gICAgMTAxLDExMCwzMiwxMDAsMTAxLDExNSwxMDUsMTAzLDExMCwxMDEsMTAwLDMyLDExNSwxMTcsOTksMTA0LAotICAgIDEwLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwzMiwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsMTEyLDEwMSwxMDAsMzIsMTA1LDExMCwxMTYsCi0gICAgMTExLDMyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsCi0gICAgMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDMyLDY1LDExNSwxMCwxMTUsMTE3LDk5LAotICAgIDEwNCwzMiwxMDUsMTE2LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA1LDExMCwxMDYsMTAxLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNSwKLSAgICAxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTA1LAotICAgIDExMCwzMiwxMTEsMTE0LDEwMCwxMDEsMTE0LDMyLDExNiwxMTEsMTAsMTE5LDExMSwxMTQsMTA3LDQ2LAotICAgIDMyLDc5LDExMCwxMDEsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTE3LDExNSwxMDEsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTEyLDExNyw5OCwxMDgsMTA1LDk5LDQ1LDEwMiw5Nyw5OSwxMDUsMTEwLDEwMywzMiwxMTgsCi0gICAgMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMjE4LDMsMTE5LDEwNSwxMTAsMjE4LDYsOTksCi0gICAgMTIxLDEwMywxMTksMTA1LDExMCwyMTgsNiwxMDAsOTcsMTE0LDExOSwxMDUsMTEwLDk5LDAsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDQ5LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMDYsMiwwLAotICAgIDExNiwzLDAsMTMxLDEsMCwxMTQsMzMsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLAotICAgIDAsMCwxMjUsMCwwLDExMCwxMiwwLDEwMCwzLDAsMTAwLDIsMCwxMzIsMCwKLSAgICAwLDEyNSwwLDAsMTI0LDAsMCw4Myw0MSw0LDc4LDk5LDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsODMsMCwwLDAsCi0gICAgMTE1LDEzLDAsMCwwLDEwMCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw2LAotICAgIDAsODMsNDEsMiwxMjIsNTMsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMDIsMTA1LAotICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsCi0gICAgOTksMTA0LDEwMSw5OSwxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwxMTAsMTE1LAotICAgIDEwMSwxMTAsMTE1LDEwNSwxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0NiwxMTUsMTIsMCwwLDAsCi0gICAgODAsODksODQsNzIsNzksNzgsNjcsNjUsODMsNjksNzksNzUsNDEsMiwyMTgsMywKLSAgICA5NSwxMTEsMTE1LDkwLDcsMTAxLDExMCwxMTgsMTA1LDExNCwxMTEsMTEwLDE2OSwwLDExNCw0LAotICAgIDAsMCwwLDExNCw0LDAsMCwwLDI1MCwyOSw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwyMTgsMTEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LAotICAgIDk5LDk3LDExNSwxMDEsMzAsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwKLSAgICAzNyw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LAotICAgIDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMDgsOTcsCi0gICAgMTIwLDk1LDk5LDk3LDExNSwxMDEsOTksMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMSwwLDAsMCw4MywwLDAsMCwxMTUsNCwwLDAsMCwKLSAgICAxMDAsMSwwLDgzLDQxLDIsMTIyLDUzLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsCi0gICAgMTAxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsCi0gICAgMTEwLDExNSwxMDEsMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsNzAsMTE0LDQsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDYsMCwwLDAsMzQsMCwwLDAsCi0gICAgMTE1LDIsMCwwLDAsMCwyLDQxLDQsMjE4LDMsMTE1LDEyMSwxMTUsMjE4LDgsCi0gICAgMTEyLDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDIxOCwxMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LAotICAgIDExOSwxMDUsMTE2LDEwNCwyMTgsMjcsOTUsNjcsNjUsODMsNjksOTUsNzMsNzgsODMsNjksCi0gICAgNzgsODMsNzMsODQsNzMsODYsNjksOTUsODAsNzYsNjUsODQsNzAsNzksODIsNzcsCi0gICAgODMsNDEsMSwxMTQsNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAotICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LAotICAgIDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMjgsMCwwLDAsMTE1LDgsMCwKLSAgICAwLDAsMCwxLDE4LDEsMTUsNCwxMiwzLDExNCwxMSwwLDAsMCw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwyNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLAotICAgIDEsMCwxMDAsMSwwLDY0LDEwNiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzMSwKLSAgICAyLDAsODMsNDEsNCwxMjIsNDIsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsMzIsOTcsCi0gICAgMzIsNTEsNTAsNDUsOTgsMTA1LDExNiwzMiwxMDUsMTEwLDExNiwxMDEsMTAzLDEwMSwxMTQsMzIsCi0gICAgMTE2LDExMSwzMiwxMDgsMTA1LDExNiwxMTYsMTA4LDEwMSw0NSwxMDEsMTEwLDEwMCwxMDUsOTcsMTEwLAotICAgIDQ2LDEwOCwzLDAsMCwwLDI1NSwxMjcsMjU1LDEyNywzLDAsMjMzLDQsMCwwLAotICAgIDAsMjE4LDYsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDEsMiwyMTgsMywxMDUsMTEwLDExNiwKLSAgICAyMTgsOCwxMTYsMTExLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw0MSwxLDIxOCwxLDEyMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsNywKLSAgICA5NSwxMTksOTUsMTA4LDExMSwxMTAsMTAzLDQwLDAsMCwwLDExNSwyLDAsMCwwLAotICAgIDAsMiwxMTQsMTcsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLAotICAgIDEsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLAotICAgIDgzLDQxLDIsMTIyLDQ3LDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLDUyLDMyLDk4LAotICAgIDEyMSwxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwKLSAgICAxMTAsMTAwLDEwNSw5NywxMTAsMzIsMTE2LDExMSwzMiw5NywxMTAsMzIsMTA1LDExMCwxMTYsMTAxLAotICAgIDEwMywxMDEsMTE0LDQ2LDExNCwxMywwLDAsMCw0MSwyLDExNCwxNCwwLDAsMCwKLSAgICAyMTgsMTAsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLDExNSw0MSwxLDkwLDksCi0gICAgMTA1LDExMCwxMTYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDExNCw0LDAsMCwwLDExNCw0LAotICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCw3LDk1LDExNCw5NSwxMDgsMTExLDExMCwKLSAgICAxMDMsNDUsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNCwxOSwwLDAsCi0gICAgMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsCi0gICAgMCwwLDcxLDAsMCwwLDExNSwyNiwwLDAsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI0LDAsMCw2OCwxMzEsMSwKLSAgICAwLDEzMSwxLDAsODMsNDEsMywxMjIsMzEsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LAotICAgIDQ2LDEwNiwxMTEsMTA1LDExMCw0MCw0MSw0Niw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCw0LDAsMCwwLDgzLDAsMCwwLDExNSwzNywwLAotICAgIDAsMCwxMDMsMCwwLDEyNCwwLDAsOTMsMjcsMCwxMjUsMSwwLDEyNCwxLAotICAgIDAsMTE0LDYsMCwxMjQsMSwwLDEwNiwwLDAsMTE2LDEsMCwxMzEsMSwwLAotICAgIDE0NSwyLDAsMTEzLDYsMCw4MywxMTQsNCwwLDAsMCw0MSwyLDIxOCw2LAotICAgIDExNCwxMTUsMTE2LDExNCwxMDUsMTEyLDIxOCwxNSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwKLSAgICA5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDQxLDIsMjE4LDIsNDYsNDgsMjE4LDQsMTEyLAotICAgIDk3LDExNCwxMTYsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMjUwLDEwLDYwLDEwOCwxMDUsMTE1LDExNiw5OSwxMTEsMTA5LDExMiw2Miw1MiwwLAotICAgIDAsMCwxMTUsMiwwLDAsMCw5LDEsMTIyLDMwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDEwNiwxMTEsMTA1LDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsCi0gICAgMTA4LDEwNSwxMTUsMTE2LDk5LDExMSwxMDksMTEyLDYyLDQxLDIsMjE4LDgsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTE1LDEwMSwxMTIsMjE4LDQsMTA2LDExMSwxMDUsMTEwLDQxLDEsMjE4LDEwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExMiw5NywxMTQsMTE2LDExNSwxMTQsNCwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgMTA2LDExMSwxMDUsMTEwLDUwLDAsMCwwLDExNSw0LDAsMCwwLDAsMiwxNSwKLSAgICAxLDExNCwyOCwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsNSwKLSAgICAwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwxMzQsMCwwLDAsCi0gICAgMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwKLSAgICA1MiwwLDEyNCwwLDAsMTA2LDIsMCwxMTYsMywwLDEzMSwxLDAsOTIsMywKLSAgICAwLDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwxLDAsMTI0LDMsMCwKLSAgICAxMDIsMiwwLDgzLDEyMCw2OSwwLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLAotICAgIDY4LDkzLDU1LDAsMTI1LDQsMCwxMjQsNCwwLDExNiwxLDAsMTA3LDYsMCwKLSAgICAxMTQsNjUsMCwxMjQsMCwwLDEwNiw1LDAsMTI0LDQsMCwxMDAsMiwwLDEwMCwKLSAgICAxLDAsMTMxLDEsMSw5MiwyLDAsMTI1LDEsMCwxMjUsMywwLDEyNCwxLAotICAgIDAsMTI0LDMsMCwxMDIsMiwwLDgzLDExMyw2NSwwLDg3LDEwMCwzLDAsMTI0LAotICAgIDAsMCwxMDIsMiwwLDgzLDQxLDQsMTIyLDMyLDgyLDEwMSwxMTIsMTA4LDk3LDk5LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LAotICAgIDEwNCw0NiwxMTUsMTEyLDEwOCwxMDUsMTE2LDQwLDQxLDQ2LDIzMywxLDAsMCwwLDkwLAotICAgIDgsMTA5LDk3LDEyMCwxMTUsMTEyLDEwOCwxMDUsMTE2LDIxOCwwLDQxLDYsMjE4LDMsMTA4LAotICAgIDEwMSwxMTAsMTE0LDIxLDAsMCwwLDIxOCwxMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwKLSAgICAxMDUsMTExLDExMCwxMTQsMjUsMCwwLDAsMjE4LDgsMTE0LDEwMSwxMTgsMTAxLDExNCwxMTUsCi0gICAgMTAxLDEwMCwyMTgsNiwxMTQsMTE1LDExMiwxMDgsMTA1LDExNiw0MSw1LDIxOCw0LDExMiw5NywKLSAgICAxMTYsMTA0LDkwLDUsMTAyLDExNCwxMTEsMTEwLDExNiwyMTgsMSw5NSwyMTgsNCwxMTYsOTcsCi0gICAgMTA1LDEwOCwxMTQsMTYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsCi0gICAgMTA4LDEwNSwxMTYsNTYsMCwwLDAsMTE1LDE2LDAsMCwwLDAsMiwxOCwxLAotICAgIDI0LDEsMTAsMSwxOSwxLDEyLDEsMjcsMSwxNCwxLDExNCwzOCwwLDAsCi0gICAgMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTI0LDAsMCwxMzEsMSwwLDgzLDQxLDEsMTIyLDEyNiw4MywxMTYsOTcsMTE2LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDc3LDk3LDEwMCwxMDEsMzIsOTcsMzIsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMDEsMzIsCi0gICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTA5LDk3LDEwNywxMDEsCi0gICAgMzIsMTA1LDExNiwzMiwxMDEsOTcsMTE1LDEwNSwxMDEsMTE0LDMyLDExNiwxMTEsMzIsMTExLDExOCwKLSAgICAxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwzMiwxMDUsMTEwLDMyLDEwMSwxMjAsMTEyLDEwMSwxMTQsMTA1LAotICAgIDEwOSwxMDEsMTEwLDExNiwxMTUsMTAsMzIsMzIsMzIsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDMyLDExNSwxMTYsOTcsMTE2LDMyLDExNCwxMDEsMTE1LDExNywxMDgsCi0gICAgMTE2LDExNSw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw0MSwyLDExNCwzLDAsMCwKLSAgICAwLDkwLDQsMTE1LDExNiw5NywxMTYsNDEsMSwxMTQsMzUsMCwwLDAsMTE0LDQsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDY4LDAsMCwwLDExNSwyLDAsCi0gICAgMCwwLDAsNywxMTQsMzksMCwwLDAsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDMsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDU4LAotICAgIDAsMCwwLDEyMSwxNiwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwKLSAgICAyLDAsODcsMTEwLDIyLDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCw0MCwwLAotICAgIDEsMSwxLDEwMCwxLDAsODMsODksMTEwLDEsMCw4OCwxMjQsMiwwLDEwNiwKLSAgICAyLDAsMTAwLDIsMCw2NCwxMjQsMSwwLDEwNywyLDAsODMsNDEsMywxMjIsCi0gICAgNDksODQsMTAxLDExNSwxMTYsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsMTE0LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwKLSAgICAxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTE2LDEyMSwxMTIsCi0gICAgMTAxLDQ2LDcwLDEwNSwwLDI0MCwwLDAsNDEsMywxMTQsMzksMCwwLDAsMjE4LAotICAgIDcsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LDIxOCw3LDExNSwxMTYsOTUsMTA5LDExMSwxMDAsCi0gICAgMTAxLDQxLDMsMTE0LDM1LDAsMCwwLDIxOCw0LDEwOSwxMTEsMTAwLDEwMSw5MCw5LAotICAgIDExNSwxMTYsOTcsMTE2LDk1LDEwNSwxMTAsMTAyLDExMSwxMTQsNCwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTgsOTUsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDc4LDAsMCwwLAotICAgIDExNSwxMCwwLDAsMCwwLDIsMywxLDE2LDEsMTMsMSw5LDEsMTE0LAotICAgIDQzLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDEsMiwxMjIsMzEsODIsCi0gICAgMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsCi0gICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwNSwwLAotICAgIDEyOCwwLDAsNDEsMSwxMTQsNDMsMCwwLDAsNDEsMSwxMTQsMzUsMCwwLAotICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCi0gICAgMjE4LDEyLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDg3LDAsCi0gICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMTQsNDQsMCwwLDAsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMzQsMCwwLDAsMTI0LDAsMCwxMTUsMjEsMCwxMTYsMCwKLSAgICAwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMCwwLDExMCwwLDAsMTE2LDIsMCwKLSAgICAxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MSwyLDEyMiwzMCw4MiwxMDEsCi0gICAgMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsCi0gICAgNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDAsMTA1LDExNCw0NiwxMDUsMCw2NCwwLAotICAgIDAsNDEsMywxMTQsMywwLDAsMCwyMTgsNiwxMDMsMTAxLDExNiw5OSwxMTksMTAwLAotICAgIDExNCw0MywwLDAsMCw0MSwxLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCw5MiwwLDAsMCwxMTUsNiwwLDAsCi0gICAgMCwwLDIsNiwxLDE1LDEsMTE0LDQ2LDAsMCwwLDEwNSwxODIsMSwwLAotICAgIDAsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTcsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE5MiwwLDAsMCwxMDAsMSwwLDEwNiwwLAotICAgIDAsMTI0LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwwLAotICAgIDEyNSwzLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTE2LDIsMCwxMDYsCi0gICAgNCwwLDExNiwyLDAsMTA2LDUsMCw2NiwxMTYsMiwwLDEwNiw2LDAsNjYsCi0gICAgMTI0LDIsMCwxMDAsMiwwLDY0LDEzMSwzLDAsMTI1LDQsMCwxMjEsNjAsMCwKLSAgICAxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsMywwLDEzMSwyLDAsMTQzLAotICAgIDIwLDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw5LDAsMTI0LDEsMCwxMzEsMSwKLSAgICAwLDEsODcsMTAwLDQsMCw4MSw4OCwxMTYsMiwwLDEwNiwxMCwwLDEyNCwzLAotICAgIDAsMTI0LDAsMCwxMzEsMiwwLDEsODcsMTEwLDU5LDAsNCwxMTYsMTEsMCwKLSAgICAxMDcsMTAsMCwxMTQsMTg3LDAsMSwxLDEsMTIxLDE3LDAsMTE2LDIsMCwxMDYsCi0gICAgMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsMTgsMCw0LDExNiwxMSwKLSAgICAwLDEwNywxMCwwLDExNCwxNzksMCwxLDEsMSw4OSwxMTAsMSwwLDg4LDEzMCwKLSAgICAwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLDQxLDUsMTIyLDE2Miw2NiwKLSAgICAxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LDExNiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsCi0gICAgMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LDEwNSwxMTYsMTAxLDMyLDEwMCw5NywxMTYsCi0gICAgOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiw5NywxMTYsMTExLDEwOSwKLSAgICAxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsMzIsMzIsMzIsNjYsMTAxLDMyLDExMiwKLSAgICAxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwKLSAgICAxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksMTIwLDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsCi0gICAgMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsMTEwLDk5LDExNywxMTQsMTE0LDEwMSwxMTAsCi0gICAgMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLAotICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTAyLAotICAgIDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCwKLSAgICA0NiwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsMTA1LDE4MiwxLDAsMCw5MCwyLDExOSwKLSAgICA5OCw3OCw0MSwxMywyMTgsNiwxMDIsMTExLDExNCwxMDksOTcsMTE2LDIxOCwyLDEwNSwxMDAsCi0gICAgMTE0LDMsMCwwLDAsOTAsNCwxMTEsMTEyLDEwMSwxMTAsOTAsNiw3OSw5NSw2OSwKLSAgICA4OCw2Nyw3Niw5MCw3LDc5LDk1LDY3LDgyLDY5LDY1LDg0LDkwLDgsNzksOTUsCi0gICAgODcsODIsNzksNzgsNzYsODksMjE4LDMsOTUsMTA1LDExMSwyMTgsNiw3MCwxMDUsMTA4LAotICAgIDEwMSw3Myw3OSwyMTgsNSwxMTksMTE0LDEwNSwxMTYsMTAxLDIxOCw3LDExNCwxMDEsMTEyLDEwOCwKLSAgICA5Nyw5OSwxMDEsMTE0LDQwLDAsMCwwLDkwLDYsMTE3LDExMCwxMDgsMTA1LDExMCwxMDcsCi0gICAgNDEsNiwxMTQsMzUsMCwwLDAsMjE4LDQsMTAwLDk3LDExNiw5NywxMTQsNDIsMCwKLSAgICAwLDAsOTAsOCwxMTIsOTcsMTE2LDEwNCw5NSwxMTYsMTA5LDExMiw5MCwyLDEwMiwxMDAsCi0gICAgMjE4LDQsMTAyLDEwNSwxMDgsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw1LDAsMCwwLDIxOCwxMyw5NSwxMTksMTE0LDEwNSwxMTYsMTAxLDk1LDk3LDExNiwKLSAgICAxMTEsMTA5LDEwNSw5OSw5OSwwLDAsMCwxMTUsMjYsMCwwLDAsMCw1LDI0LAotICAgIDEsOSwxLDMzLDEsMywzLDIxLDEsMTksMSwyMCwxLDEzLDEsMywKLSAgICAxLDE3LDEsMTMsMSw1LDEsMTE0LDU1LDAsMCwwLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwzLDAsMCwwLDcsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDk1LDAsMCwwLDEyMCw2OSwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsCi0gICAgMywwLDEwMCw0LDAsMTAzLDQsMCw2OCw5Myw0OSwwLDEyNSwyLDAsMTE2LAotICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsMTksMCwxMTYsMSwKLSAgICAwLDEyNCwwLDAsMTI0LDIsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwKLSAgICAxMzEsMiwwLDEzMSwzLDAsMSwxMTMsMTksMCwxMTMsMTksMCw4NywxMjQsMCwKLSAgICAwLDEwNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwKLSAgICAxLDEwMCw1LDAsODMsNDEsNiwxMjIsNDcsODMsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiwKLSAgICAxMTUsMTE3LDk4LDExNSwxMTYsMTA1LDExNiwxMTcsMTE2LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMDIsCi0gICAgMTE3LDExMCw5OSwxMTYsMTExLDExMSwxMDgsMTE1LDQ2LDExNywxMTIsMTAwLDk3LDExNiwxMDEsOTUsCi0gICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDYsMjE4LDEwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk1LDk1LDIxOCw4LDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDIxOCwxMiwKLSAgICA5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwyMTgsNyw5NSw5NSwKLSAgICAxMDAsMTExLDk5LDk1LDk1LDc4LDQxLDUsMjE4LDcsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwyMTgsNywxMTUsMTAxLDExNiw5NywxMTYsMTE2LDExNCwyMTgsNywxMDMsMTAxLDExNiw5NywKLSAgICAxMTYsMTE2LDExNCwyMTgsOCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwyMTgsNiwxMTcsCi0gICAgMTEyLDEwMCw5NywxMTYsMTAxLDQxLDMsOTAsMywxMTAsMTAxLDExOSw5MCwzLDExMSwxMDgsCi0gICAgMTAwLDExNCw1MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKLSAgICAxMTQsNSwwLDAsMCwyMTgsNSw5NSwxMTksMTE0LDk3LDExMiwxMjEsMCwwLDAsCi0gICAgMTE1LDgsMCwwLDAsMCwyLDI1LDEsMTUsMSwzMiwxLDExNCw2NSwwLAotICAgIDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDExNiwKLSAgICAxLDAsMTMxLDEsMCwxMjQsMCwwLDEzMSwxLDAsODMsNDEsMSw3OCw0MSwKLSAgICAyLDIxOCw0LDExNiwxMjEsMTEyLDEwMSwxMTQsNywwLDAsMCw0MSwxLDIxOCw0LAotICAgIDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDIxOCwxMSw5NSwxMTAsMTAxLDExOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMjksMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNCw2OCwwLDAsMCwKLSAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwKLSAgICAwLDY0LDAsMCwwLDExNSw1OCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwKLSAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwKLSAgICAzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAotICAgIDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwKLSAgICAxMDAsOCwwLDgzLDQxLDksMjE4LDEzLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLAotICAgIDEwMSwxMDgsMTExLDk3LDEwMCwxMjIsNjMsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE1LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiw5OSwxMDgsMTAxLDk3LAotICAgIDExMCw0NSwxMTcsMTEyLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQwLDQxLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLAotICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLAotICAgIDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDAsMCw4Myw0MSwxLDc4LAotICAgIDQxLDEsMjE4LDUsOTUsMTEwLDk3LDEwOSwxMDEsNDEsMiwyMTgsNCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE0LDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxNDEsCi0gICAgMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMiw5NSw3Nyw5NywxMTAsCi0gICAgOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDEyNCwwLDAsMTA2LAotICAgIDAsMCwxMTYsMSwwLDEwNiwyLDAsMTA3LDYsMCwxMjQsMCwwLDk1LDMsCi0gICAgMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNCwxMTQsNzAsMCwwLDAsMTE0LAotICAgIDcsMCwwLDAsMjE4LDcsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDIxOCwxMCw5NSwKLSAgICAxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsNDEsMSwxMTQsNzEsMCwwLDAsCi0gICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAotICAgIDksOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwxNDQsMCwwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCwxLDEyMiwyMyw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsCi0gICAgMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw3MSwKLSAgICAwLDAsMCwxMTUsODAsMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEwMCwyLAotICAgIDAsMTMyLDAsMCwxMjQsMSwwLDY4LDEzMSwxLDAsMTMxLDEsMCwxMTQsNzYsCi0gICAgMCwxMjQsMCwwLDEwNiwxLDAsMTIsMTE0LDc2LDAsMTIxLDE3LDAsMTE2LDIsCi0gICAgMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCw2MSw4NywxMTMsNzYsMCw0LAotICAgIDExNiw1LDAsMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsODksMTEzLDc2LDAsCi0gICAgODgsMTEwLDAsMCwxMDAsMCwwLDgzLDQxLDMsNzgsOTksMSwwLDAsMCwKLSAgICAwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwxMTUsMCwwLDAsCi0gICAgMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwxMjUsMSwwLDEyNCwxLAotICAgIDAsMTAwLDAsMCwxMDcsOSwwLDg2LDEsMTEzLDMsMCwxMDAsMCwwLDgzLAotICAgIDQxLDEsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsMjE4LAotICAgIDMsOTcsMTE0LDEwMywxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKLSAgICAwLDAsMCwyNTAsOSw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTQ4LDAsCi0gICAgMCwwLDExNSwyLDAsMCwwLDYsMCwxMjIsNDEsOTUsNzcsOTcsMTEwLDk3LAotICAgIDEwMywxMDEsODIsMTAxLDEwOCwxMTEsOTcsMTAwLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSwKLSAgICA5NSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLAotICAgIDEyMCwxMTIsMTE0LDYyLDQxLDYsMjE4LDMsOTcsMTEwLDEyMSwxMTQsNzQsMCwwLDAsCi0gICAgMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw3MCwwLDAsMCwyMTgsCi0gICAgOCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCw0MSwyLDExNCw3MSwwLDAsMCwKLSAgICAyMTgsNCw5NywxMTQsMTAzLDExNSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKLSAgICAxMTQsNSwwLDAsMCwyMTgsOCw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsMTQ3LAotICAgIDAsMCwwLDExNSwxMCwwLDAsMCwwLDEsMzUsMSwzLDEsMTcsMSwKLSAgICAxMywxLDEyMiwyMiw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywKLSAgICAxMDAsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDcsMTE0LDU3LDAsCi0gICAgMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwKLSAgICAwLDExNCw3MiwwLDAsMCwxMTQsNzUsMCwwLDAsMTE0LDgxLDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKLSAgICA1LDAsMCwwLDExNCw2OSwwLDAsMCwxMzcsMCwwLDAsMTE1LDgsMCwKLSAgICAwLDAsMTIsMiw2LDIsMTIsMywxMiwzLDExNCw2OSwwLDAsMCw5OSwKLSAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDY0LDAsMCwwLDExNSwxNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCi0gICAgMCwwLDkwLDIsMCwxMDAsMSwwLDgzLDQxLDIsMjE4LDE0LDk1LDY4LDEwMSwKLSAgICA5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDc4LDQxLDMsMTE0LDU3LAotICAgIDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDgyLDAsMCwwLDE2MiwwLDAsMCwxMTUsMiwwLDAsMCwxMiwKLSAgICAxLDExNCw4MiwwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwKLSAgICAwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw4MiwwLDAsMCwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAotICAgIDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsCi0gICAgMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwKLSAgICAxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCwKLSAgICA3LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLAotICAgIDAsODMsNDEsMTMsMjE4LDExLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LAotICAgIDEwNywxMjIsMTY5LDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwxMTUsMTA1LDExOCwxMDEsMzIsMTA4LAotICAgIDExMSw5OSwxMDcsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk3LDk4LDEwOCwxMDEsCi0gICAgMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDMyLDEwMCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExNiwKLSAgICAxMDQsMTE0LDEwMSw5NywxMDAsMzIsNDksMzIsMTE2LDExNCwxMjEsMTA1LDExMCwxMDMsMzIsMTE2LAotICAgIDExMSwzMiwxMTYsOTcsMTA3LDEwMSwzMiwxMDgsMTExLDk5LDEwNywxMTUsMzIsNjUsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDY2LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LAotICAgIDEwMCwzMiw1MCwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTExLDEwLDMyLDMyLAotICAgIDMyLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiw2NiwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsNjUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI0LAotICAgIDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI0LDAsCi0gICAgMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDQsMCwxMDAsMCwwLAotICAgIDEyNCwwLDAsOTUsNSwwLDEwMCwxLDAsMTI0LDAsMCw5NSw2LDAsMTAwLAotICAgIDEsMCwxMjQsMCwwLDk1LDcsMCwxMDAsMCwwLDgzLDQxLDIsNzgsMjMzLAotICAgIDAsMCwwLDAsNDEsOCwyMTgsNyw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDkwLAotICAgIDEzLDk3LDEwOCwxMDgsMTExLDk5LDk3LDExNiwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMjE4LDQsCi0gICAgMTA4LDExMSw5OSwxMDcsMjE4LDYsMTE5LDk3LDEwNywxMDEsMTE3LDExMiwxMTQsNjcsMCwwLAotICAgIDAsMjE4LDUsMTExLDExOSwxMTAsMTAxLDExNCwyMTgsNSw5OSwxMTEsMTE3LDExMCwxMTYsMjE4LAotICAgIDcsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LAotICAgIDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDExNCw3MiwwLDAsMCwxNzIsMCwwLDAsMTE1LDEyLDAsMCwKLSAgICAwLDAsMSwxNSwxLDE1LDEsOSwxLDksMSw5LDEsMTIyLDIwLDk1LAotICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsODgsMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTI1LAotICAgIDIsMCwxMjAsNjAsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwKLSAgICAwLDEyNSwzLDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDU1LDAsCi0gICAgMTAwLDEsMCw4MywxMjQsMywwLDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLAotICAgIDEyNCwxLDAsMTA3LDIsMCwxMTQsMjQsMCwxMDAsMiwwLDgzLDExMywyNCwwLAotICAgIDg3LDEwMCwwLDAsODMsNDEsMyw3OCw3MCw4NCw0MSw1LDExNCw4NSwwLDAsCi0gICAgMCwyMTgsOSwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNCw4OCwwLDAsCi0gICAgMCwyMTgsMTIsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwyMTgsCi0gICAgMywxMDMsMTAxLDExNiw0MSw0LDExNCw3MSwwLDAsMCwyMTgsMiwxMDksMTAxLDIxOCwKLSAgICAzLDExNiwxMDUsMTAwLDExNCw4NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTIsMTA0LDk3LDExNSw5NSwxMDAsMTAxLAotICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNywxODAsMCwwLDAsMTE1LDE4LDAsMCwwLDAsCi0gICAgMiwxMiwxLDksMSwzLDEsMTUsMSwxMiwxLDQsMSw5LDEsMTIsCi0gICAgMSwxMjIsMjQsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDEwNCwKLSAgICA5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsOTksMSwwLDAsMCwKLSAgICAwLDAsMCwwLDIsMCwwLDAsMTYsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDIxNSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwKLSAgICAwLDEyNCwwLDAsMTE2LDIsMCwxMjQsMSwwLDYwLDEyMiwxNzgsMCwxMjAsMTcxLAotICAgIDAsMTI0LDAsMCwxMDYsMywwLDE0MywxMzAsMCwxLDEyNCwwLDAsMTA2LDQsCi0gICAgMCwxMDAsMSwwLDEwNywyLDAsMTE1LDY4LDAsMTI0LDAsMCwxMDYsNSwwLAotICAgIDEyNCwxLDAsMTA3LDIsMCwxMTQsOTYsMCwxMjQsMSwwLDEyNCwwLDAsOTUsCi0gICAgNSwwLDEyNCwwLDAsNCwxMDYsNCwwLDEwMCwyLDAsNTUsMiw5NSw0LAotICAgIDAsMTAwLDMsMCw4MywxMjQsMCwwLDEwNiw2LDAsMTMxLDAsMCwxMTQsMTI3LAotICAgIDAsMTE2LDcsMCwxMDAsNCwwLDEyNCwwLDAsMjIsMTMxLDEsMCwxMzAsMSwKLSAgICAwLDExMCwwLDAsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTAwLDUsMCwKLSAgICAxMzEsMSwwLDExNCwxNjMsMCwxMjQsMCwwLDQsMTA2LDEwLDAsMTAwLDIsMCwKLSAgICA1NSwyLDk1LDEwLDAsMTEwLDAsMCw4NywxMDAsNiwwLDgxLDg4LDEyNCwwLAotICAgIDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsMSwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTA2LDExLDAsMTMxLDAsMCwxLDExMywyOCwwLDg3LDg3LDEwMCw2LDAsCi0gICAgMTE2LDIsMCwxMjQsMSwwLDYxLDg4LDEwMCw2LDAsODMsNDEsNywxMjIsMTg1LAotICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsCi0gICAgNDYsMzIsMzIsNzMsMTAyLDMyLDk3LDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywKLSAgICAxMDgsMzIsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLAotICAgIDExNiwxMDEsOTksMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgOTcsMzIsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDc5LDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwKLSAgICAxMTUsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwKLSAgICAxMTQsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLDExNCwyOSwKLSAgICAwLDAsMCw4NCwxMjIsMjMsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTAwLAotICAgIDEwMSwxMTYsMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwzNywxMTQsNzAsNzgsNDEsCi0gICAgMTIsMTE0LDg1LDAsMCwwLDExNCw5MSwwLDAsMCwxMTQsOTIsMCwwLDAsCi0gICAgMTE0LDg2LDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsODgsMCwwLDAsMTE0LAotICAgIDk2LDAsMCwwLDExNCw4MiwwLDAsMCwxMTQsODcsMCwwLDAsMjE4LDcsCi0gICAgOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTQsOTAsMCwwLDAsMjE4LDcsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDk1LDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAotICAgIDExNCw5NywwLDAsMCwxOTIsMCwwLDAsMTE1LDMyLDAsMCwwLDAsNiwKLSAgICAxMiwxLDEwLDEsMywxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LDEsCi0gICAgNCwxLDEyLDEsMTksMSwxOCwxLDI0LDIsMTMsMSwyMSwyLDEyMiwxOSwKLSAgICA5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLDExNywKLSAgICAxMDUsMTE0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICAxMCwwLDAsMCw2NywwLDAsMCwxMTUsMTY1LDAsMCwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDE0MywKLSAgICAxMzgsMCwxLDEyNCwwLDAsMTA2LDMsMCwxMjQsMSwwLDEwNywzLDAsMTE0LAotICAgIDUyLDAsMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDUsMCwxMDAsMiwwLDEwNyw0LDAsMTE1LDczLDAsCi0gICAgMTE2LDYsMCwxMzAsMSwwLDEyNCwwLDAsNCwxMDYsNSwwLDEwMCwzLDAsCi0gICAgNTYsMiw5NSw1LDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDIsCi0gICAgMCwxMTQsMTU1LDAsMTAwLDAsMCwxMjQsMCwwLDk1LDMsMCwxMjQsMCwwLAotICAgIDEwNiw3LDAsMTE0LDE1NSwwLDEyNCwwLDAsNCwxMDYsNywwLDEwMCwzLDAsCi0gICAgNTYsMiw5NSw3LDAsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTMxLDAsCi0gICAgMCwxLDExMywxNTUsMCwxMTAsMCwwLDg3LDEwMCwwLDAsODEsODgsMTAwLDAsCi0gICAgMCw4Myw0MSw0LDc4LDEyMiwzMSw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMTQsODQsMCwwLDAsMTE0LDI5LDAsMCwwLAotICAgIDQxLDEwLDExNCw4NSwwLDAsMCwxMTQsOTEsMCwwLDAsMTE0LDg2LDAsMCwKLSAgICAwLDExNCw4OCwwLDAsMCwyMTgsMTIsODIsMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDExNCw4OSwwLDAsMCwyMTgsMTQsNjUsMTE1LDExNSwxMDEsMTE0LAotICAgIDExNiwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDkwLDAsMCwwLDExNCw4NywKLSAgICAwLDAsMCwxMTQsOTgsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LAotICAgIDk1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDExNCw5OCwwLDAsMCwyMTcsMCwwLDAsMTE1LDIyLDAsMCwKLSAgICAwLDAsMSwxMiwxLDEwLDEsMTUsMSwxNSwxLDIxLDEsMTUsMSwxNSwKLSAgICAxLDksMSw5LDEsMTUsMSwxMjIsMTksOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLAotICAgIDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDI1LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwKLSAgICAxLDAsMTE2LDIsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsMCw4Myw0MSwKLSAgICAyLDc4LDEyMiwyMyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsCi0gICAgMTIzLDMzLDExNCwxMjUsNDEsMzIsOTcsMTE2LDMyLDEyMywxMjUsNDEsMywxMTQsNDcsMCwKLSAgICAwLDAsMTE0LDY3LDAsMCwwLDExNCw0OCwwLDAsMCw0MSwxLDExNCw3MSwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwyMTgsOCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsMjMwLDAsMCwwLAotICAgIDExNSwyLDAsMCwwLDAsMSwxMjIsMjAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSw5LAotICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKLSAgICA1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDk2LDAsMCwwLDExNCw5NywKLSAgICAwLDAsMCwxMTQsOTgsMCwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNCwwLAotICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCi0gICAgMCwxMTQsODMsMCwwLDAsMTY2LDAsMCwwLDExNSwxMiwwLDAsMCwxMiwKLSAgICA0LDYsMiwxMiw4LDEyLDEyLDEyLDI1LDEyLDEzLDExNCw4MywwLDAsMCwKLSAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwKLSAgICAwLDY0LDAsMCwwLDExNSw3MCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwKLSAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwKLSAgICAzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAotICAgIDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwKLSAgICAxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsODMsCi0gICAgNDEsMTEsMjE4LDE2LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDc2LDExMSw5OSwxMDcsMTIyLDg2LDY1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTAxLDMyLDk1LAotICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywzMiwxMDEsMTEzLDExNywxMDUsMTE4LAotICAgIDk3LDEwOCwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLAotICAgIDMyLDk4LDExNywxMDUsMTA4LDEwMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDExMSwxMTcsMTE2LDEwLAotICAgIDMyLDMyLDMyLDMyLDEwOSwxMTcsMTA4LDExNiwxMDUsNDUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwKLSAgICAxMDUsMTEwLDEwMywzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDYsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMjIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsCi0gICAgMSwwLDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDEsMiw3OCwxMTQsCi0gICAgODQsMCwwLDAsNDEsMiwxMTQsNjcsMCwwLDAsMTE0LDg5LDAsMCwwLAotICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsCi0gICAgMjM4LDAsMCwwLDExNSw0LDAsMCwwLDAsMSw5LDEsMTIyLDI1LDk1LAotICAgIDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsCi0gICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCwxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsCi0gICAgMCwwLDEyNCwwLDAsNCwxMDYsMCwwLDEwMCwxLDAsNTUsMiw5NSwwLAotICAgIDAsMTAwLDIsMCw4Myw0MSwzLDc4LDExNCwyOSwwLDAsMCw4NCw0MSwxLAotICAgIDExNCw4OSwwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOTcsMCwwLDAsCi0gICAgMjQyLDAsMCwwLDExNSw0LDAsMCwwLDAsMSwxNSwxLDEyMiwyNCw5NSwKLSAgICA2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LAotICAgIDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLAotICAgIDEsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLAotICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMzAsMCwKLSAgICAxMTYsMSwwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LAotICAgIDAsMCw0LDEwNiwwLDAsMTAwLDMsMCw1NiwyLDk1LDAsMCwxMDAsMCwKLSAgICAwLDgzLDQxLDQsNzgsMTE0LDg0LDAsMCwwLDEyMiwzMSw5OSw5NywxMTAsMTEwLAotICAgIDExMSwxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwKLSAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMTQsMjksMCwwLDAsCi0gICAgNDEsMiwxMTQsODksMCwwLDAsMTE0LDk5LDAsMCwwLDQxLDEsMTE0LDcxLAotICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCi0gICAgMCwwLDExNCw5OCwwLDAsMCwyNDYsMCwwLDAsMTE1LDYsMCwwLDAsCi0gICAgMCwxLDE1LDEsMTUsMSwxMjIsMjQsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSwyNSwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsCi0gICAgMTI0LDAsMCwxMDYsMSwwLDExNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDEzMSwKLSAgICAyLDAsODMsNDEsMiw3OCwxMjIsMjgsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwxNjksMiwwLDAsMTAwLDAsMCw5MCwwLDAsCisgICAgMTAwLDEsMCw5NywxLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsCisgICAgMiwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDMsMCw3MSwxMDAsCisgICAgNiwwLDEwMCw3LDAsMTMyLDAsMCwxMDAsNywwLDEzMSwyLDAsOTAsNCwKKyAgICAwLDEwNSwwLDAsOTAsNSwwLDEwNSwwLDAsOTAsNiwwLDcxLDEwMCw4LAorICAgIDAsMTAwLDksMCwxMzIsMCwwLDEwMCw5LDAsMTAxLDcsMCwxMzEsMywwLAorICAgIDkwLDgsMCw3MSwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDEwMCwxMSwwLAorICAgIDEzMSwyLDAsOTAsOSwwLDcxLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsCisgICAgMTAwLDEzLDAsMTMxLDIsMCw5MCwxMCwwLDcxLDEwMCwxNCwwLDEwMCwxNSwwLAorICAgIDEzMiwwLDAsMTAwLDE1LDAsMTMxLDIsMCw5MCwxMSwwLDEwMCwxNiwwLDEwMCwKKyAgICAxNywwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMTgsMCwxMDAsMTksMCwxMzIsMCwKKyAgICAwLDkwLDEzLDAsMTAwLDIwLDAsMTAwLDIxLDAsMTMyLDAsMCw5MCwxNCwwLAorICAgIDEwMCwyMiwwLDEwMCwyMywwLDEwMCwyNCwwLDEwMCwyNSwwLDEzMiwwLDEsOTAsCisgICAgMTUsMCwxMDAsMjYsMCwxMDAsMjcsMCwxMzIsMCwwLDkwLDE2LDAsMTAwLDI4LAorICAgIDAsMTAwLDI5LDAsMTMyLDAsMCw5MCwxNywwLDEwMCwzMCwwLDEwMCwzMSwwLAorICAgIDEzMiwwLDAsOTAsMTgsMCwxMDAsMzIsMCwxMDAsMzMsMCwxMzIsMCwwLDkwLAorICAgIDE5LDAsNzEsMTAwLDM0LDAsMTAwLDM1LDAsMTMyLDAsMCwxMDAsMzUsMCwxMzEsCisgICAgMiwwLDkwLDIwLDAsNzEsMTAwLDM2LDAsMTAwLDM3LDAsMTMyLDAsMCwxMDAsCisgICAgMzcsMCwxMzEsMiwwLDkwLDIxLDAsMTAwLDM4LDAsMTAwLDEsMCwxMDAsMzksCisgICAgMCwxMDAsMSwwLDEwMCw0MCwwLDEwMCw0MSwwLDEzMiwwLDIsOTAsMjIsMCwKKyAgICAxMDEsMjMsMCwxMzEsMCwwLDkwLDI0LDAsMTAwLDEsMCwxMDAsMSwwLDEwMCwKKyAgICA0MiwwLDEwMCw0MywwLDEzMiwyLDAsOTAsMjUsMCwxMDAsNDQsMCwxMDAsNDUsCisgICAgMCwxMDAsNDYsMCwxMDAsNDcsMCwxMzIsMCwxLDkwLDI2LDAsMTAwLDQ4LDAsCisgICAgMTAwLDQ5LDAsMTMyLDAsMCw5MCwyNywwLDEwMCw1MCwwLDEwMCw1MSwwLDEzMiwKKyAgICAwLDAsOTAsMjgsMCwxMDAsNTIsMCwxMDAsNTMsMCwxMzIsMCwwLDkwLDI5LAorICAgIDAsMTAwLDU0LDAsMTAwLDU1LDAsMTMyLDAsMCw5MCwzMCwwLDEwMCw1NiwwLAorICAgIDEwMCw1NywwLDEzMiwwLDAsOTAsMzEsMCwxMDAsNTgsMCwxMDAsNTksMCwxMzIsCisgICAgMCwwLDkwLDMyLDAsNzEsMTAwLDYwLDAsMTAwLDYxLDAsMTMyLDAsMCwxMDAsCisgICAgNjEsMCwxMzEsMiwwLDkwLDMzLDAsNzEsMTAwLDYyLDAsMTAwLDYzLDAsMTMyLAorICAgIDAsMCwxMDAsNjMsMCwxMzEsMiwwLDkwLDM0LDAsNzEsMTAwLDY0LDAsMTAwLAorICAgIDY1LDAsMTMyLDAsMCwxMDAsNjUsMCwxMzEsMiwwLDkwLDM1LDAsMTAwLDY2LAorICAgIDAsMTAwLDY3LDAsMTMyLDAsMCw5MCwzNiwwLDEwMCw2OCwwLDEwMCw2OSwwLAorICAgIDEzMiwwLDAsOTAsMzcsMCwxMDAsMSwwLDEwMCw3MCwwLDEwMCw3MSwwLDEzMiwKKyAgICAxLDAsOTAsMzgsMCwxMDAsNzIsMCwxMDAsNzMsMCwxMzIsMCwwLDkwLDM5LAorICAgIDAsMTAwLDc0LDAsOTAsNDAsMCwxMDEsNDAsMCwxMDAsNzUsMCwyMyw5MCw0MSwKKyAgICAwLDEwMCw3NiwwLDEwMCw3NywwLDEzMiwwLDAsOTAsNDIsMCwxMDAsNzgsMCwKKyAgICAxMDAsNzksMCwxMzIsMCwwLDkwLDQzLDAsMTAwLDEsMCwxMDAsODAsMCwxMDAsCisgICAgODEsMCwxMDAsODIsMCwxMzIsMiwwLDkwLDQ0LDAsMTAwLDgzLDAsMTAwLDg0LAorICAgIDAsMTMyLDAsMCw5MCw0NSwwLDEwMCw4NSwwLDEwMCw4NiwwLDEzMiwwLDAsCisgICAgOTAsNDYsMCwxMDAsMSwwLDEwMCwxLDAsMTAyLDAsMCwxMDAsODAsMCwxMDAsCisgICAgODcsMCwxMDAsODgsMCwxMzIsNCwwLDkwLDQ3LDAsMTAwLDg5LDAsMTAwLDkwLAorICAgIDAsMTMyLDAsMCw5MCw0OCwwLDEwMCw5MSwwLDEwMCw5MiwwLDEzMiwwLDAsCisgICAgOTAsNDksMCwxMDAsOTMsMCwxMDAsOTQsMCwxMzIsMCwwLDkwLDUwLDAsMTAwLAorICAgIDEsMCw4Myw0MSw5NSw5Nyw4MywxLDAsMCw2NywxMTEsMTE0LDEwMSwzMiwxMDUsCisgICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NiwxMCwxMCw4NCwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDc4LDc5LDg0LDMyLDEwOSwxMDEsOTcsCisgICAgMTEwLDExNiwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDEwOCwKKyAgICAxMjEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMywzMiw3MywxMTYsMzIsMTA0LAorICAgIDk3LDExNSwzMiw5OCwxMDEsMTAxLDExMCwzMiwxMDAsMTAxLDExNSwxMDUsMTAzLDExMCwxMDEsMTAwLAorICAgIDMyLDExNSwxMTcsOTksMTA0LDEwLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMzIsOTksOTcsCisgICAgMTEwLDMyLDk4LDEwMSwzMiw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsMTEyLDEwMSwKKyAgICAxMDAsMzIsMTA1LDExMCwxMTYsMTExLDMyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsMzIsOTcsMTE1LAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwKKyAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDMyLDY1LAorICAgIDExNSwxMCwxMTUsMTE3LDk5LDEwNCwzMiwxMDUsMTE2LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAorICAgIDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDExMCwxMDYsMTAxLDk5LDExNiwxMDUsMTExLDExMCwKKyAgICAzMiwxMTEsMTAyLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsCisgICAgMTE2LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMTEsMTE0LDEwMCwxMDEsMTE0LDMyLDExNiwxMTEsMTAsCisgICAgMTE5LDExMSwxMTQsMTA3LDQ2LDMyLDc5LDExMCwxMDEsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsCisgICAgMzIsMTE3LDExNSwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5NywKKyAgICAxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDExNyw5OCwxMDgsMTA1LDk5LDQ1LDEwMiw5Nyw5OSwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTYsCisgICAgMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsNzgsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsOTIsMCwwLDAsMTIwLDY2LDAsMTAwLDEsMCwxMDAsMiwKKyAgICAwLDEwMCwzLDAsMTAwLDQsMCwxMDMsNCwwLDY4LDkzLDQ2LDAsMTI1LDIsCisgICAgMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDExNCwxOSwwLAorICAgIDExNiwxLDAsMTI0LDAsMCwxMjQsMiwwLDExNiwyLDAsMTI0LDEsMCwxMjQsCisgICAgMiwwLDEzMSwyLDAsMTMxLDMsMCwxLDExMywxOSwwLDg3LDEyNCwwLDAsCisgICAgMTA2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMSwwLDEsCisgICAgMTAwLDUsMCw4Myw0MSw2LDEyMiw0Nyw4MywxMDUsMTA5LDExMiwxMDgsMTAxLDMyLDExNSwKKyAgICAxMTcsOTgsMTE1LDExNiwxMDUsMTE2LDExNywxMTYsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEwMiwxMTcsCisgICAgMTEwLDk5LDExNiwxMTEsMTExLDEwOCwxMTUsNDYsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw5NSwxMTksCisgICAgMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0NiwyMTgsMTAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTUsOTUsMjE4LDgsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMjE4LDEyLDk1LAorICAgIDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDIxOCw3LDk1LDk1LDEwMCwKKyAgICAxMTEsOTksOTUsOTUsNzgsNDEsNSwyMTgsNywxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LAorICAgIDIxOCw3LDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDIxOCw3LDEwMywxMDEsMTE2LDk3LDExNiwKKyAgICAxMTYsMTE0LDIxOCw4LDk1LDk1LDEwMCwxMDUsOTksMTE2LDk1LDk1LDIxOCw2LDExNywxMTIsCisgICAgMTAwLDk3LDExNiwxMDEsNDEsMyw5MCwzLDExMCwxMDEsMTE5LDkwLDMsMTExLDEwOCwxMDAsCisgICAgMjE4LDcsMTE0LDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxNjksMCwxMTQsMTAsMCwwLDAsCisgICAgMjUwLDI5LDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDIxOCwKKyAgICA1LDk1LDExOSwxMTQsOTcsMTEyLDI3LDAsMCwwLDExNSw4LDAsMCwwLDAsCisgICAgMiwyNSwxLDE1LDEsMjksMSwxMTQsMTIsMCwwLDAsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTYsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTI0LAorICAgIDAsMCwxMzEsMSwwLDgzLDQxLDEsNzgsNDEsMiwyMTgsNCwxMTYsMTIxLDExMiwKKyAgICAxMDEsMjE4LDMsMTE1LDEyMSwxMTUsNDEsMSwyMTgsNCwxMTAsOTcsMTA5LDEwMSwxMTQsMTAsCisgICAgMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsMTEsOTUsCisgICAgMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzUsMCwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwxLDExNCwxNiwwLDAsMCw5OSwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSwKKyAgICA1OCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKKyAgICAxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCwKKyAgICA0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LAorICAgIDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDgzLDQxLDksCisgICAgMjE4LDEzLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLDEwMSwxMDgsMTExLDk3LDEwMCwxMjIsCisgICAgNjMsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTEsMTE1LAorICAgIDExNSwxMDUsOTgsMTA4LDEwMSwzMiw5OSwxMDgsMTAxLDk3LDExMCw0NSwxMTcsMTEyLDMyLDExMSwKKyAgICAxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDQxLDQ2LAorICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCwKKyAgICA5NSwwLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDEsMjE4LDUsOTUsMTEwLAorICAgIDk3LDEwOSwxMDEsNDEsMiwyMTgsNCwxMTUsMTAxLDEwOCwxMDIsMTE0LDE1LDAsMCwwLAorICAgIDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDIxOCwKKyAgICA4LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0MywwLDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDEsMTIyLDIyLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLDEwMSwxMDgsCisgICAgMTExLDk3LDEwMCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMjUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDExNiwxLDAsMTA2LAorICAgIDIsMCwxMDcsNiwwLDEyNCwwLDAsOTUsMywwLDEwMCwwLDAsODMsNDEsCisgICAgMSw3OCw0MSw0LDExNCwxOCwwLDAsMCwxMTQsMTQsMCwwLDAsMjE4LDcsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDIxOCwxMCw5NSwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LAorICAgIDExMSw5NywxMDAsNDEsMSwxMTQsMTksMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwKKyAgICAxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMjE4LDksOTUsOTUsMTAxLDExMCwxMTYsCisgICAgMTAxLDExNCw5NSw5NSw0NiwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLAorICAgIDIzLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLDEwMSwxMDgsMTExLDk3LDEwMCw0Niw5NSwKKyAgICA5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDExLDAsMCwwLDcxLDAsMCwwLDExNSw3NywwLAorICAgIDAsMCwxMTYsMCwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwxLAorICAgIDAsNjgsMTMxLDEsMCwxMzEsMSwwLDExNCw3MywwLDEyNCwwLDAsMTA2LDEsCisgICAgMCwxMiwxMTQsNzMsMCwxMjEsMTcsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDAsCisgICAgMCwxMDYsNCwwLDYxLDg3LDExMCwxOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwKKyAgICAxMTQsNzIsMCwxLDEsMSw4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsCisgICAgMyw3OCw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLAorICAgIDAsMCwwLDExNSwwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywKKyAgICAxNywwLDEyNSwxLDAsMTI0LDEsMCwxMDAsMCwwLDEwNyw5LDAsODYsMSwKKyAgICAxMTMsMywwLDEwMCwwLDAsODMsNDEsMSw3OCwxMTQsMTAsMCwwLDAsNDEsCisgICAgMiwyMTgsMiw0Niw0OCwyMTgsMyw5NywxMTQsMTAzLDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDExLDAsMCwwLDI1MCw5LDYwLDEwMywxMDEsMTEwLDEwMSwKKyAgICAxMjAsMTEyLDExNCw2Miw1MCwwLDAsMCwxMTUsMiwwLDAsMCw2LDAsMTIyLAorICAgIDQxLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLDEwMSwxMDgsMTExLDk3LDEwMCw0Niw5NSwKKyAgICA5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAorICAgIDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw0MSw2LDIxOCwzLDk3LDExMCwKKyAgICAxMjEsMTE0LDIyLDAsMCwwLDExNCwxNCwwLDAsMCwxMTQsMjEsMCwwLDAsCisgICAgMTE0LDE4LDAsMCwwLDIxOCw4LDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDQxLAorICAgIDIsMTE0LDE5LDAsMCwwLDIxOCw0LDk3LDExNCwxMDMsMTE1LDExNCwxMCwwLDAsCisgICAgMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDIxOCw4LDk1LDk1LDEwMSwKKyAgICAxMjAsMTA1LDExNiw5NSw5NSw0OSwwLDAsMCwxMTUsMTAsMCwwLDAsMCwxLAorICAgIDM1LDEsMywxLDE3LDEsMTMsMSwxMjIsMjIsOTUsNzcsOTcsMTEwLDk3LDEwMywKKyAgICAxMDEsODIsMTAxLDEwOCwxMTEsOTcsMTAwLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSwKKyAgICA3OCw0MSw3LDExNCwxLDAsMCwwLDExNCwwLDAsMCwwLDExNCwyLDAsCisgICAgMCwwLDExNCwzLDAsMCwwLDExNCwyMCwwLDAsMCwxMTQsMjMsMCwwLAorICAgIDAsMTE0LDMwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsCisgICAgMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsMTcsMCwwLDAsMzksCisgICAgMCwwLDAsMTE1LDgsMCwwLDAsMTIsMiw2LDIsMTIsMywxMiwzLAorICAgIDExNCwxNywwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwxLDAsMCwwLDY0LDAsMCwwLDExNSwxNiwwLDAsMCwxMDEsCisgICAgMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDgzLDQxLAorICAgIDIsMjE4LDE0LDk1LDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsCisgICAgMTE0LDc4LDQxLDMsMTE0LDEsMCwwLDAsMTE0LDAsMCwwLDAsMTE0LDIsCisgICAgMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwKKyAgICAwLDAsMTE0LDExLDAsMCwwLDExNCwzMSwwLDAsMCw2NCwwLDAsMCwKKyAgICAxMTUsMiwwLDAsMCwxMiwxLDExNCwzMSwwLDAsMCw5OSwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwKKyAgICAwLDExNSw4MiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLAorICAgIDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsCisgICAgMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLAorICAgIDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDEwMCwKKyAgICA5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsCisgICAgMCw5MCw4LDAsMTAwLDEyLDAsODMsNDEsMTMsMjE4LDExLDk1LDc3LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywxMjIsMTY5LDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwKKyAgICAxMTUsMTA1LDExOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsCisgICAgMTE1LDMyLDk3LDk4LDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LAorICAgIDMyLDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwKKyAgICAxMDEsNDYsMTAzLDQ2LDMyLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMzIsNDksMzIsMTE2LDExNCwKKyAgICAxMjEsMTA1LDExMCwxMDMsMzIsMTE2LDExMSwzMiwxMTYsOTcsMTA3LDEwMSwzMiwxMDgsMTExLDk5LAorICAgIDEwNywxMTUsMzIsNjUsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDY2LDQ0LDMyLDk3LDExMCwxMDAsCisgICAgMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwzMiw1MCwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksCisgICAgMTA3LDExNSwzMiw2NiwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNjUsNDEsNDYsMTAsMzIsMzIsCisgICAgMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsCisgICAgMSwwLDEzMSwwLDAsMTI0LDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwKKyAgICAwLDEzMSwwLDAsMTI0LDAsMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLAorICAgIDk1LDQsMCwxMDAsMCwwLDEyNCwwLDAsOTUsNSwwLDEwMCwxLDAsMTI0LAorICAgIDAsMCw5NSw2LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDcsMCwxMDAsMCwKKyAgICAwLDgzLDQxLDIsNzgsMjMzLDAsMCwwLDAsNDEsOCwyMTgsNyw5NSwxMTYsCisgICAgMTA0LDExNCwxMDEsOTcsMTAwLDkwLDEzLDk3LDEwOCwxMDgsMTExLDk5LDk3LDExNiwxMDEsOTUsCisgICAgMTA4LDExMSw5OSwxMDcsMjE4LDQsMTA4LDExMSw5OSwxMDcsMjE4LDYsMTE5LDk3LDEwNywxMDEsCisgICAgMTE3LDExMiwxMTQsMTUsMCwwLDAsMjE4LDUsMTExLDExOSwxMTAsMTAxLDExNCwyMTgsNSwKKyAgICA5OSwxMTEsMTE3LDExMCwxMTYsMjE4LDcsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsNDEsMiwKKyAgICAxMTQsMTksMCwwLDAsMTE0LDE1LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwyMCwwLDAsMCw3NCwwLAorICAgIDAsMCwxMTUsMTIsMCwwLDAsMCwxLDE1LDEsMTUsMSw5LDEsOSwKKyAgICAxLDksMSwxMjIsMjAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LAorICAgIDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsNCwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw4OCwKKyAgICAwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwKKyAgICAwLDAsMTA2LDIsMCwxMjUsMiwwLDEyMCw2MCwwLDExNiwzLDAsMTA2LDQsCisgICAgMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywwLDEwMCwwLDAsCisgICAgMTA3LDgsMCwxMTQsNTUsMCwxMDAsMSwwLDgzLDEyNCwzLDAsMTA2LDIsMCwKKyAgICAxMjUsMiwwLDEyNCwyLDAsMTI0LDEsMCwxMDcsMiwwLDExNCwyNCwwLDEwMCwKKyAgICAyLDAsODMsMTEzLDI0LDAsODcsMTAwLDAsMCw4Myw0MSwzLDc4LDcwLDg0LAorICAgIDQxLDUsMTE0LDM0LDAsMCwwLDIxOCw5LDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsMTAxLAorICAgIDExMCwxMTYsMTE0LDM3LDAsMCwwLDIxOCwxMiw5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsCisgICAgMTEwLDEwMyw5NSwxMTEsMTEwLDIxOCwzLDEwMywxMDEsMTE2LDQxLDQsMTE0LDE5LDAsMCwKKyAgICAwLDkwLDIsMTA5LDEwMSwyMTgsMywxMTYsMTA1LDEwMCwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMjE4LDEyLAorICAgIDEwNCw5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsODIsMCwwLDAsCisgICAgMTE1LDE4LDAsMCwwLDAsMiwxMiwxLDksMSwzLDEsMTUsMSwxMiwKKyAgICAxLDQsMSw5LDEsMTIsMSwxMjIsMjQsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA3NiwxMTEsOTksMTA3LDQ2LDEwNCw5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwKKyAgICAxMDcsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTYsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDIxMCwwLDAsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwwLDAsMTE2LDIsMCwxMjQsMSwwLAorICAgIDYwLDEyMiwxNzMsMCwxMjAsMTY2LDAsMTI0LDAsMCwxMDYsMywwLDE0MywxMjQsMCwKKyAgICAxLDEyNCwwLDAsMTA2LDQsMCwxMDAsMSwwLDEwNywyLDAsMTE1LDY4LDAsCisgICAgMTI0LDAsMCwxMDYsNSwwLDEyNCwxLDAsMTA3LDIsMCwxMTQsOTYsMCwxMjQsCisgICAgMSwwLDEyNCwwLDAsOTUsNSwwLDEyNCwwLDAsNCwxMDYsNCwwLDEwMCwKKyAgICAyLDAsNTUsMiw5NSw0LDAsMTAwLDMsMCw4MywxMjQsMCwwLDEwNiw2LAorICAgIDAsMTMxLDAsMCwxMTQsMTI0LDAsMTE2LDcsMCwxMDAsNCwwLDEyNCwwLDAsCisgICAgMjIsMTMxLDEsMCwxMzAsMSwwLDEyNCwwLDAsMTA2LDgsMCwxMDYsOSwwLAorICAgIDEwMCw1LDAsMTMxLDEsMCwxMTQsMTU3LDAsMTI0LDAsMCw0LDEwNiwxMCwwLAorICAgIDEwMCwyLDAsNTUsMiw5NSwxMCwwLDg3LDEwMCw2LDAsODEsODIsODgsMTI0LAorICAgIDAsMCwxMDYsOCwwLDEwNiw5LDAsMTMxLDAsMCwxLDEyNCwwLDAsMTA2LAorICAgIDgsMCwxMDYsMTEsMCwxMzEsMCwwLDEsMTEzLDI4LDAsODcsODcsMTAwLDYsCisgICAgMCwxMTYsMiwwLDEyNCwxLDAsNjEsODgsMTAwLDYsMCw4Myw0MSw3LDEyMiwKKyAgICAxODUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNjUsOTksMTEzLDExNywxMDUsMTE0LAorICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LAorICAgIDEwNyw0NiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LAorICAgIDk3LDEwOCwzMiwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDEwMCwKKyAgICAxMDEsMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw5NywzMiw5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLAorICAgIDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsNzksMTE2LDEwNCwxMDEsMTE0LDExOSwxMDUsMTE1LDEwMSw0NCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDk3LDEwOCwxMTksOTcsCisgICAgMTIxLDExNSwzMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiw5NywxMTAsMTAwLDMyLAorICAgIDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwKKyAgICA0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMzMsMCwwLDAsMjMzLAorICAgIDEsMCwwLDAsODQsMTIyLDIzLDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDMyLAorICAgIDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMzcsMTE0LDcwLDc4LAorICAgIDQxLDEyLDExNCwzNCwwLDAsMCwxMTQsNDAsMCwwLDAsMTE0LDQxLDAsMCwKKyAgICAwLDExNCwzNSwwLDAsMCwxMTQsMzgsMCwwLDAsMTE0LDM3LDAsMCwwLAorICAgIDExNCw0NCwwLDAsMCwxMTQsMzEsMCwwLDAsMTE0LDM2LDAsMCwwLDIxOCwKKyAgICA3LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE0LDM5LDAsMCwwLDIxOCw3LDExNCwKKyAgICAxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDQxLDIsMTE0LDE5LDAsMCwwLDExNCw0MywwLAorICAgIDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsCisgICAgMCwxMTQsNDYsMCwwLDAsOTQsMCwwLDAsMTE1LDMyLDAsMCwwLDAsCisgICAgNiwxMiwxLDEwLDEsMywxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LAorICAgIDEsNCwxLDEyLDEsMTYsMSwxOCwxLDIyLDIsMTMsMSwyMSwyLDEyMiwKKyAgICAxOSw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLAorICAgIDExNywxMDUsMTE0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCwxMCwwLDAsMCw2NywwLDAsMCwxMTUsMTU3LDAsMCwwLDExNiwwLAorICAgIDAsMTA2LDEsMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLAorICAgIDE0MywxMjksMCwxLDEyNCwwLDAsMTA2LDMsMCwxMjQsMSwwLDEwNywzLDAsCisgICAgMTE0LDQ5LDAsMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMjQsCisgICAgMCwwLDEwNiw1LDAsMTAwLDIsMCwxMDcsNCwwLDExNSw3MCwwLDExNiw2LAorICAgIDAsMTMwLDEsMCwxMjQsMCwwLDQsMTA2LDUsMCwxMDAsMywwLDU2LDIsCisgICAgOTUsNSwwLDEyNCwwLDAsMTA2LDUsMCwxMDAsMiwwLDEwNywyLDAsMTE0LAorICAgIDE0NiwwLDEwMCwwLDAsMTI0LDAsMCw5NSwzLDAsMTI0LDAsMCwxMDYsNywKKyAgICAwLDExNCwxNDYsMCwxMjQsMCwwLDQsMTA2LDcsMCwxMDAsMywwLDU2LDIsCisgICAgOTUsNywwLDEyNCwwLDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsMSwKKyAgICA4NywxMDAsMCwwLDgxLDgyLDg4LDEwMCwwLDAsODMsNDEsNCw3OCwxMjIsMzEsCisgICAgOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNywKKyAgICAxMTAsNDUsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSw5OSwxMDcsMTE0LAorICAgIDMzLDAsMCwwLDExNCw0NSwwLDAsMCw0MSwxMCwxMTQsMzQsMCwwLDAsCisgICAgMTE0LDQwLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMzcsMCwwLDAsMjE4LAorICAgIDEyLDgyLDExNywxMTAsMTE2LDEwNSwxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMzgsMCwKKyAgICAwLDAsMjE4LDE0LDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksMTE0LDExNCwKKyAgICAxMTEsMTE0LDExNCwzOSwwLDAsMCwxMTQsMzYsMCwwLDAsMTE0LDQ3LDAsMCwKKyAgICAwLDQxLDIsMTE0LDE5LDAsMCwwLDExNCw0MywwLDAsMCwxMTQsMTAsMCwKKyAgICAwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsNDcsMCwwLAorICAgIDAsMTE5LDAsMCwwLDExNSwyMiwwLDAsMCwwLDEsMTIsMSwxMCwxLAorICAgIDE1LDEsMTIsMSwyMSwxLDE1LDEsMTUsMSw5LDEsOSwxLDE1LDEsCisgICAgMTIyLDE5LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsMTAxLAorICAgIDEwOCwxMDEsOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAorICAgIDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyNSwwLDAsMCwxMDAsCisgICAgMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDExNiwyLDAsMTI0LDAsCisgICAgMCwxMzEsMSwwLDEzMSwyLDAsODMsNDEsMiw3OCwxMjIsMjMsOTUsNzcsMTExLAogICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDEyMywzMywxMTQsMTI1LDQxLDMyLDk3LAotICAgIDExNiwzMiwxMjMsMTI1LDQxLDMsMTE0LDQ3LDAsMCwwLDExNCw2NywwLDAsMCwKLSAgICAxMTQsNDgsMCwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsMCwKLSAgICAyNTEsMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSw2OCwxMTcsCi0gICAgMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LAotICAgIDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSw4LDExNCw1NywwLDAsMCwxMTQsNTYsCi0gICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwKLSAgICAwLDAsMTE0LDk3LDAsMCwwLDExNCw5OCwwLDAsMCwxMTQsMTAxLDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw1LDAsMCwwLDExNCwxMDIsMCwwLDAsMjM0LDAsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwxMiwyLDYsMiwxMiw0LDEyLDQsMTIsNSwxMTQsMTAyLDAsCi0gICAgMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsNjQsMCwwLDAsMTE1LDUyLDAsMCwwLDEwMSwwLDAsOTAsCi0gICAgMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwKLSAgICAwLDkwLDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCw5MCw0LDAsCi0gICAgMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LDAsODMsCi0gICAgNDEsOCwyMTgsMTgsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDc3LAotICAgIDk3LDExMCw5NywxMDMsMTAxLDExNCw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKLSAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwKLSAgICAxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwwLDAsMTI0LDAsMCw5NSwKLSAgICAxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDcwLDAsMCwwLAotICAgIDIxOCw1LDk1LDEwOCwxMTEsOTksMTA3LDQxLDIsMTE0LDcxLDAsMCwwLDExNCw2NywKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwxMTQsNzIsMCwwLDAsMSwxLDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDEsOSwxLDEyMiwyNyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwKLSAgICAxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwKLSAgICA5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxMCwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsNTMsMCwwLDAsMTIyLDIyLDAsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDIsMCwKLSAgICA4NywxMDAsMCwwLDExNiwzLDAsMTA2LDQsMCwxMzEsMCwwLDEsODgsMTI0LAotICAgIDAsMCwxMDYsMiwwLDEwNiw1LDAsMTMxLDAsMCwxLDEwMCwwLDAsODMsCi0gICAgNDEsMSw3OCw0MSw2LDIxOCwxNiw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTQsNzAsMCwwLDAsMTE0LDEwNCwwLDAsCi0gICAgMCwyMTgsNCw5NSwxMDUsMTA5LDExMiwyMTgsMTIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsCi0gICAgOTUsMTA4LDExMSw5OSwxMDcsMTE0LDk3LDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAotICAgIDExNCw3NSwwLDAsMCw1LDEsMCwwLDExNSw4LDAsMCwwLDAsMSwKLSAgICAzLDEsMjIsMiwxMSwxLDEyMiwyOCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LAotICAgIDExMSw5OSwxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LAotICAgIDEwMSwxMTQsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLAotICAgIDAsMSwwLDAsMCw3OSwwLDAsMCwxMTUsMTcsMCwwLDAsMTI0LDAsCi0gICAgMCwxMDYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDEwMCwwLDAsODMsNDEsCi0gICAgMSw3OCw0MSwyLDExNCwxMDQsMCwwLDAsMTE0LDk4LDAsMCwwLDQxLDMsCi0gICAgMTE0LDcxLDAsMCwwLDExNCw4MCwwLDAsMCwyMTgsNiwxMDcsMTE5LDk3LDExNCwKLSAgICAxMDMsMTE1LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKLSAgICAwLDExNCw4MSwwLDAsMCwxMiwxLDAsMCwxMTUsMiwwLDAsMCwwLAotICAgIDEsMTIyLDI3LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3Nyw5NywKLSAgICAxMTAsOTcsMTAzLDEwMSwxMTQsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLAotICAgIDYsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsCi0gICAgMTE0LDcyLDAsMCwwLDExNCw3NSwwLDAsMCwxMTQsODEsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCi0gICAgMCwwLDAsMTE0LDEwMywwLDAsMCwyNTUsMCwwLDAsMTE1LDYsMCwwLAotICAgIDAsMTIsMiwxMiw0LDEyLDcsMTE0LDEwMywwLDAsMCw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCwzLDAsMCwKLSAgICAwLDExNSwxNDIsMCwwLDAsMTAwLDEsMCwxMjUsMSwwLDEyMSwxNywwLDExNiwKLSAgICAwLDAsMTM2LDAsMCwyNSwxMzEsMCwwLDEyNSwxLDAsODcsMTEwLDE4LDAsCi0gICAgNCwxMTYsMSwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLDg5LDExMCwxLAotICAgIDAsODgsMTI0LDEsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDEzOCwwLDExNiwyLAotICAgIDAsMTAwLDEsMCwxMDcsOCwwLDExNCw4MywwLDExNiwzLDAsMTM2LDAsMCwKLSAgICAxMzEsMSwwLDEyNSwxLDAsMTEwLDEyLDAsMTE2LDQsMCwxMzYsMCwwLDEzMSwKLSAgICAxLDAsMTI1LDEsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzNCwwLDAsMTI1LDIsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDEsMCwKLSAgICAxMjQsMiwwLDEzMSwyLDAsMTE2LDAsMCwxMzYsMCwwLDYwLDExMCwwLDAsCi0gICAgMTI0LDEsMCw4Myw0MSw0LDEyMiwxMDksNzEsMTAxLDExNiwzMiwxMTEsMTE0LDMyLDk5LAotICAgIDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsCi0gICAgMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLAotICAgIDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiwKLSAgICA5NywxMDcsMTAxLDExMCw0Niw3OCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCwyLDAsMCwwLDE5LDAsMCwwLDExNSwxMSwwLDAsMCwKLSAgICAxMTYsMCwwLDEzNiwwLDAsNjEsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDEsCi0gICAgMjE4LDEzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNSw0MSwKLSAgICAxLDExNCwzNiwwLDAsMCw0MSwxLDExNCw2NywwLDAsMCwxMTQsNCwwLAotICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMiw5OSw5OCwzMiwxLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDEsMTIyLDI4LDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSwKLSAgICA2Miw0Niw5OSw5OCw0MSw3LDExNCwxMDksMCwwLDAsMTE0LDc5LDAsMCwwLAotICAgIDExNCw4NSwwLDAsMCwxMTQsMTAyLDAsMCwwLDExNCw4MywwLDAsMCwyMTgsCi0gICAgOCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5MCwzLDExNCwxMDEsMTAyLDQxLDMsCi0gICAgMTE0LDY3LDAsMCwwLDExNCw4NiwwLDAsMCwxMTQsMTEwLDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDQxLDEsMTE0LDY3LDAsMCwwLDExNCw1LDAsMCwwLAotICAgIDExNCwxMDUsMCwwLDAsMTgsMSwwLDAsMTE1LDI0LDAsMCwwLDAsNCwKLSAgICA2LDEsMywxLDE3LDEsMTMsMSw1LDEsMTIsMSwxMiwxLDE1LDIsCi0gICAgMTIsMSwxOCwyLDI1LDEsMTE0LDEwNSwwLDAsMCw5OSwxLDAsMCwwLAotICAgIDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsNzEsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDEsCi0gICAgMCwxMTYsMSwwLDEwNiwyLDAsMTMxLDAsMCwxLDEyMSwxNCwwLDEyNCwxLAotICAgIDAsMTA2LDMsMCwxMzEsMCwwLDEsODcsMTEwLDE4LDAsNCwxMTYsNCwwLAotICAgIDEwNywxMCwwLDExNCw1NiwwLDEsMSwxLDg5LDExMCwxMSwwLDg4LDEyNCwxLAotICAgIDAsMTA2LDUsMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MSwyLDk3LDIxLAotICAgIDEsMCwwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLAotICAgIDEwOCwxMTEsOTgsOTcsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksCi0gICAgMTA3LDQ0LDMyLDk3LDExMCwxMDAsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsCi0gICAgMTE2LDEwNCwxMDEsMTEwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLAotICAgIDEwLDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LAotICAgIDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMzIsMzIsMzIsMzIsODQsMTA0LAotICAgIDEwNSwxMTUsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTEwLAotICAgIDExNSwxMTcsMTE0LDEwMSwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LAotICAgIDMyLDk5LDExMSwxMDksMTEyLDEwOCwxMDEsMTE2LDEwMSwxMDgsMTIxLDMyLDEwNSwxMTAsMTA1LDExNiwKLSAgICAxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLDEwMCw0NCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDEwMSwxMTgsMTAxLDExMCwxMTYsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLAotICAgIDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDk4LAotICAgIDEyMSwzMiw5NywxMTAsMTExLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwKLSAgICAxMDgsMTIxLDMyLDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksCi0gICAgMTA3LDMyLDExNiw5NywxMDcsMTAxLDExMCw0Niw3OCw0MSw2LDExNCwxMDUsMCwwLDAsCi0gICAgMTE0LDEwNiwwLDAsMCwxMTQsMTA3LDAsMCwwLDExNCw5NywwLDAsMCwxMTQsCi0gICAgODIsMCwwLDAsMTE0LDk4LDAsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLAotICAgIDExNCw4NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwyMTgsMTksOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLAotICAgIDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzNywxLDAsMCwxMTUsMTQsMCwKLSAgICAwLDAsMCw3LDEyLDEsMTAsMSwzLDEsMTQsMSwxMywzLDUsMiwKLSAgICAxMTQsMTEyLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsCi0gICAgMCwwLDMsMCwwLDAsNzksMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwKLSAgICAwLDAsMTI0LDEsMCwxMjQsMiwwLDE0MiwwLDAsODMsNDEsMSw5Nyw0NiwKLSAgICAxLDAsMCwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiw0Niw5OSwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTcsMTA4LDExOSw5NywKLSAgICAxMjEsMTE1LDMyLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLAotICAgIDk5LDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDMyLDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsCi0gICAgMzIsMTAxLDExMCwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsCi0gICAgMTEwLDEwLDEwLDMyLDMyLDMyLDMyLDg1LDExNSwxMDEsMzIsMTA1LDExNiwzMiwxMDUsMTEwLAotICAgIDExNSwxMTYsMTAxLDk3LDEwMCwzMiwxMTEsMTAyLDMyLDk3LDMyLDExMCwxMTEsMTE0LDEwOSw5NywKLSAgICAxMDgsMzIsOTksOTcsMTA4LDEwOCwzMiwxMDUsMTEwLDMyLDExMiwxMDgsOTcsOTksMTAxLDExNSwKLSAgICAzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTA1LDExMCwxMDMsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwxMCwzMiwKLSAgICAzMiwzMiwzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMTE2LDExNCwxMTEsMTAwLAotICAgIDExNyw5OSwxMDEsMTE1LDMyLDExNywxMTAsMTE5LDk3LDExMCwxMTYsMTAxLDEwMCwzMiwxMTAsMTExLAotICAgIDEwNSwxMTUsMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTE0LDk3LAotICAgIDk5LDEwMSw5OCw5Nyw5OSwxMDcsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwxMTksMTA0LDEwMSwKLSAgICAxMTAsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTEwLDEwMywxMCwzMiwzMiwzMiwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0MSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMTQsNCwwLDAsMCw0MSwzLDIxOCwxLDEwMiwxMTQsODAsMCwwLDAsCi0gICAgOTAsNCwxMDcsMTE5LDEwMCwxMTUsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAotICAgIDU3LDEsMCwwLDExNSwyLDAsMCwwLDAsOCwxMTQsMTE0LDAsMCwwLAotICAgIDEwNSwyMzgsMTIsMCwwLDIzMywyLDAsMCwwLDExNCwxMywwLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwxMywxMCw5MCwxMSw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsOTUsOTUsMTIyLDMsNDYsMTEyLDEyMSwxMjIsNCw0NiwxMTIsMTIxLDk5LDEyMiw0LAotICAgIDQ2LDExMiwxMjEsMTExLDc4LDk5LDIsMCwwLDAsMCwwLDAsMCwxMSwwLAotICAgIDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxOTIsMCwwLDAsMTI0LAotICAgIDEsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEwNiwyLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwyLDAsMTI0LDIsCi0gICAgMCwxMTQsNDYsMCwxMTYsMywwLDEyNSwzLDAsMTEwLDYsMCwxMTYsNCwwLAotICAgIDEyNSwzLDAsMTE2LDUsMCwxMjQsMCwwLDEzMSwxLDAsOTIsMiwwLDEyNSwKLSAgICA0LDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw2LDAsMTAwLDIsMCwxMzEsMSwKLSAgICAwLDkyLDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsMCwxMTYsMCwwLAotICAgIDEwNiw3LDAsMTA2LDgsMCwxMjUsOSwwLDEyNCw5LDAsMTAwLDEsMCwxMDcsCi0gICAgOCwwLDExNCwxMzMsMCwxMTYsOSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwKLSAgICAwLDExMCwwLDAsMTAwLDQsMCwxMDYsMTAsMCwxMjQsNiwwLDExNCwxNTEsMCwKLSAgICAxMjQsNiwwLDExMCwzLDAsMTI0LDgsMCwxMjQsNywwLDEyNCw5LDAsMTI0LAotICAgIDMsMCwxMDAsNSwwLDI1LDEwMyw0LDAsMTMxLDEsMCwxMjUsMTAsMCwxMTYsCi0gICAgMTEsMCwxMjQsNCwwLDExNiwxMiwwLDEyNCwxMCwwLDEzMSwzLDAsODMsNDEsCi0gICAgNiw5NywyNDQsMSwwLDAsNzEsMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LAotICAgIDEwOCwxMDEsNDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAotICAgIDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwzMiw0NiwxMTIsMTIxLDk5LDQ3LAotICAgIDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICA4NCwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLAotICAgIDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTIwLAotICAgIDEwNSwxMTUsMTE2LDU5LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwKLSAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwKLSAgICAxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiw0NiwxMTIsMTIxLAotICAgIDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksCi0gICAgMTE3LDEwOCw5NywxMTYsMTAxLDEwMCwzMiw5NywxMTUsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTksMTAxLDExNCwxMDEsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMSwxMjAsCi0gICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDEwLDMyLDMyLDMyLDMyLDExOSwxMDUsMTA4LDEwOCwKLSAgICAzMiw5OCwxMDEsMzIsNDYsMTEyLDEyMSw5OSwzMiwxMTcsMTEwLDEwOCwxMDEsMTE1LDExNSwzMiwKLSAgICAxMTUsMTIxLDExNSw0NiwxMDIsMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsCi0gICAgMTIyLDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTEwLDQ1LDEyMiwxMDEsMTE0LDExMSw0NCwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLAotICAgIDQ2LDExMiwxMjEsMTExLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMDAsMTAxLAotICAgIDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLAotICAgIDExMCwxMTEsMTE2LDMyLDc4LDExMSwxMTAsMTAxLDQ0LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMDUsCi0gICAgMTE2LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTcsMzIsOTgsMTExLDExMSwxMDgsCi0gICAgMTAxLDk3LDExMCwzMiw5NywxMTAsMTAwLDMyLDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLAotICAgIDEwNSwxMTAsMTAsMzIsMzIsMzIsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMzIsMTExLDEwMiwzMiwKLSAgICAxMTUsMTIxLDExNSw0NiwxMDIsMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsCi0gICAgMTIyLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE1LDEyMSwxMTUsNDYsCi0gICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDk5LAotICAgIDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLAotICAgIDMyLDExNiwxMDQsMTAxLDExMCwzMiw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAotICAgIDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LAotICAgIDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDIxOCwxLDQ2LDEyMiwzNiwKLSAgICAxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LAotICAgIDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsCi0gICAgNzgsMTExLDExMCwxMDEsMTE0LDMwLDAsMCwwLDExNCw4NCwwLDAsMCw0MSwxMywKLSAgICAxMTQsNywwLDAsMCwyMTgsNSwxMDIsMTA4LDk3LDEwMywxMTUsMjE4LDgsMTExLDExMiwKLSAgICAxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwyMTgsMjMsNjgsNjksNjYsODUsNzEsOTUsNjYsODksCi0gICAgODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMjE4LAotICAgIDI3LDc5LDgwLDg0LDczLDc3LDczLDkwLDY5LDY4LDk1LDY2LDg5LDg0LDY5LDY3LAotICAgIDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNCwzOCwwLDAsCi0gICAgMCwxMTQsMzIsMCwwLDAsMjE4LDE0LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsCi0gICAgMTE2LDk3LDExNiwxMDUsMTExLDExMCwyMTgsOSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywKLSAgICAxMDMsMjE4LDE5LDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsCi0gICAgMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMjYsMCwwLDAsMTE0LDI4LDAsMCwwLAotICAgIDIxOCw4LDk1LDgwLDg5LDY3LDY1LDY3LDcyLDY5LDQxLDExLDExNCwzNSwwLDAsCi0gICAgMCw5MCwxNCwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLAotICAgIDEwMSwyMTgsNSwxMDAsMTAxLDk4LDExNywxMDMsMjE4LDgsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsCi0gICAgMTAxLDExNSwyMTgsNCwxMDQsMTAxLDk3LDEwMCwxMTQsMzcsMCwwLDAsMjE4LDQsOTgsCi0gICAgOTcsMTE1LDEwMSwyMTgsMywxMTUsMTAxLDExMiwyMTgsNCwxMTQsMTAxLDExNSwxMTYsOTAsMywKLSAgICAxMTYsOTcsMTAzLDIxOCw4LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLAotICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxODEsCi0gICAgMSwwLDAsMTE1LDIyLDAsMCwwLDAsMTMsMzEsMSw2LDEsOSwyLAotICAgIDYsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLDE1LDEsNDMsMSwxMTQsMTMyLAotICAgIDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAotICAgIDUsMCwwLDAsNjcsMCwwLDAsMTE1LDE5MywwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDMzLDAsMTE2LAotICAgIDMsMCwxMDAsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDExNiw0LAotICAgIDAsMTI0LDAsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMSwwLDEyNSwyLDAsCi0gICAgMTE2LDQsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSwxLDAsMTI1LAotICAgIDMsMCwxMjQsMywwLDExNiw1LDAsMTA3LDMsMCwxMTQsMTA4LDAsMTE2LDYsCi0gICAgMCwxMDAsMywwLDEwNiw3LDAsMTE2LDUsMCwxMjQsMCwwLDEzMSwyLDAsCi0gICAgMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDIsMCwxMDYsOCwwLDEwMCwKLSAgICA0LDAsMTMxLDEsMCwxMDAsNSwwLDEwNywzLDAsMTE0LDE1MywwLDExNiw2LAotICAgIDAsMTAwLDYsMCwxMDYsNywwLDEyNCwyLDAsMTMxLDEsMCwxMzEsMSwwLAotICAgIDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLDEwNiw5LDAsMTAwLDQsMCwxMzEsCi0gICAgMSwwLDEwMCw3LDAsMjUsMTI1LDQsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwKLSAgICA0LDAsMTE2LDExLDAsMTAwLDcsMCwyNSwyMywxMzEsMiwwLDgzLDQxLDgsCi0gICAgOTcsMTIxLDEsMCwwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCi0gICAgOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsOTksNDYsNDcsNDYsCi0gICAgMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsCi0gICAgMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgODQsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLAotICAgIDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LAotICAgIDExNywxMDgsOTcsMTE2LDEwMSwxMDAsMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LAotICAgIDExMiwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksCi0gICAgNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDMyLDMyLDczLDEwMiwzMiwKLSAgICAxMTIsOTcsMTE2LDEwNCwzMiwxMDAsMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwKLSAgICAxMTYsMzIsOTksMTExLDExMCwxMDIsMTExLDExNCwxMDksMzIsMTE2LDExMSwzMiw4MCw2OSw4MCwKLSAgICAzMiw1MSw0OSw1Miw1NSwzMiwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQ0LDMyLDg2LDk3LAotICAgIDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLAotICAgIDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMzIsNzMsMTAyLDEwLDMyLDMyLDMyLDMyLAotICAgIDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsCi0gICAgMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLAotICAgIDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsCi0gICAgMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwxMjIsCi0gICAgMzYsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LAotICAgIDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LAotICAgIDMyLDc4LDExMSwxMTAsMTAxLDEyMiwzNywxMjMsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDk4LDExMSwKLSAgICAxMTYsMTE2LDExMSwxMDksNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDAsMTA1LDExNCwxMDEsOTksCi0gICAgMTE2LDExMSwxMTQsMTIxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE0LDExNiwwLDAsCi0gICAgMCwxMTQsMTE1LDAsMCwwLDEyMiwyOCwxMDEsMTIwLDExMiwxMDEsOTksMTE2LDEwMSwxMDAsCi0gICAgMzIsMTExLDExMCwxMDgsMTIxLDMyLDUwLDMyLDEwMCwxMTEsMTE2LDExNSwzMiwxMDUsMTEwLDMyLAotICAgIDEyMywzMywxMTQsMTI1LDExNCw4NCwwLDAsMCw0MSwxMiwxMTQsNywwLDAsMCwKLSAgICAxMTQsMTIxLDAsMCwwLDExNCwxMjIsMCwwLDAsMTE0LDEyMywwLDAsMCwxMTQsCi0gICAgMzgsMCwwLDAsMTE0LDEyNCwwLDAsMCwyMTgsMTAsODYsOTcsMTA4LDExNywxMDEsCi0gICAgNjksMTE0LDExNCwxMTEsMTE0LDExNCw0NywwLDAsMCwxMTQsODksMCwwLDAsMjE4LAotICAgIDksMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTQsMjgsMCwwLDAsMjE4LAotICAgIDE1LDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAotICAgIDQxLDUsMTE0LDM1LDAsMCwwLDExNCwxMjcsMCwwLDAsOTAsMTYsMTEyLDEyMSwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5MCw3LAotICAgIDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5MCwxMyw5OCw5NywxMTUsMTAxLDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKLSAgICAxMTQsNSwwLDAsMCwyMTgsMTcsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LAotICAgIDExMSwxMDksOTUsOTksOTcsOTksMTA0LDEwMSwyMDgsMSwwLDAsMTE1LDI0LDAsMCwKLSAgICAwLDAsOSwxOCwxLDE1LDEsMTgsMSwxOCwxLDEyLDEsOSwxLDE4LAotICAgIDEsMjEsMSw5LDEsMTUsMSwxOSwxLDExNCwxMzYsMCwwLDAsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMTIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDE2NCwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsCi0gICAgMCwxMDAsMSwwLDEwNywyLDAsMTE0LDIyLDAsMTAwLDIsMCw4MywxMjQsMCwKLSAgICAwLDEwNiwxLDAsMTAwLDMsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMSwwLAotICAgIDEyNSwyLDAsMTI1LDMsMCwxMjQsMSwwLDEyLDExNSw4MSwwLDEyNCwzLDAsCi0gICAgMTA2LDIsMCwxMzEsMCwwLDEwMCw3LDAsMTAwLDgsMCwxMzMsMiwwLDI1LAotICAgIDEwMCw2LDAsMTA3LDMsMCwxMTQsODUsMCwxMjQsMCwwLDgzLDEyMSwxNiwwLAotICAgIDExNiwzLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw0LDAsODcsMTEwLDQwLDAsCi0gICAgNCwxMTYsNCwwLDExNiw1LDAsMTAyLDIsMCwxMDcsMTAsMCwxMTQsMTQzLDAsCi0gICAgMSwxLDEsMTI0LDAsMCwxMDAsMiwwLDEwMCw5LDAsMTMzLDIsMCwyNSwKLSAgICAxMjUsNCwwLDg5LDExMCwxLDAsODgsMTE2LDYsMCwxMjQsNCwwLDEzMSwxLAotICAgIDAsMTE0LDE2MCwwLDEyNCw0LDAsODMsMTI0LDAsMCw4Myw0MSwxMCwxMjIsMTg4LAotICAgIDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLDk3LDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKLSAgICAxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLAotICAgIDk3LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTA1LAotICAgIDEwMiwzMiwxMTIsMTExLDExNSwxMTUsMTA1LDk4LDEwOCwxMDEsNDEsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLAotICAgIDEwMSwxMjAsMTA1LDExNSwxMTYsMTE1LDMyLDExMiwxMTcsMTE0LDEwMSwxMDgsMTIxLDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDk4LDk3LDk5LDEwNywxMTksOTcsMTE0LDEwMCwxMTUsNDUsOTksMTExLDEwOSwxMTIsCi0gICAgOTcsMTE2LDEwNSw5OCwxMDUsMTA4LDEwNSwxMTYsMTIxLDMyLDEwMiwxMTEsMTE0LDEwLDMyLDMyLAotICAgIDMyLDMyLDgwLDEyMSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDk1LDY5LDEyMCwxMDEsOTksNjcsCi0gICAgMTExLDEwMCwxMDEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4NywxMDUsMTE2LDEwNCw3MCwxMDUsMTA4LAotICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsNDAsNDEsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICA2NywzMiw2NSw4MCw3Myw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTQsODQsMCwwLAotICAgIDAsNzgsMTE0LDExNiwwLDAsMCwyMzMsMywwLDAsMCwxMTQsMjksMCwwLAotICAgIDAsOTAsMiwxMTIsMTIxLDIzMywyNTMsMjU1LDI1NSwyNTUsMjMzLDI1NSwyNTUsMjU1LDI1NSwxMTQsCi0gICAgMTM5LDAsMCwwLDQxLDcsMTE0LDMxLDAsMCwwLDExNCwzMiwwLDAsMCwKLSAgICAyMTgsNSwxMDgsMTExLDExOSwxMDEsMTE0LDExNCwxMzYsMCwwLDAsMTE0LDEyMywwLDAsCi0gICAgMCwxMTQsMTMzLDAsMCwwLDExNCw0NCwwLDAsMCw0MSw1LDIxOCwxMyw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTMwLDAsMCwKLSAgICAwLDExNCwzNiwwLDAsMCw5MCw5LDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDIxOCwxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCw0LAotICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNSw5NSwKLSAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsMTA4LDEwMSwyMzEsMSwKLSAgICAwLDAsMTE1LDIwLDAsMCwwLDAsNywxOCwxLDQsMSwyNCwxLDM1LAotICAgIDEsNCwxLDMsMSwxNiwxLDE5LDEsMjEsMSwxMTQsMTQzLDAsMCwwLAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSw2MCwwLDAsMCwxMjEsMTksMCwxMTYsMCwwLAotICAgIDEyNCwwLDAsMTMxLDEsMCwxMDYsMSwwLDEyNSwxLDAsODcsMTEwLDI0LDAsCi0gICAgNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0NSwwLDEsMSwxLDEwMCwxLDAsCi0gICAgMTI1LDEsMCw4OSwxMTAsMSwwLDg4LDEyNCwxLDAsMTAwLDIsMCw3OSwxMjUsCi0gICAgMSwwLDEyNCwxLDAsODMsNDEsMywxMjIsNTEsNjcsOTcsMTA4LDk5LDExNywxMDgsCi0gICAgOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTEyLDEwMSwxMTQsCi0gICAgMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwzMiwxMDIsMTExLDExNCwzMiw5NywzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTA1LDE4MiwxLAotICAgIDAsMCwyMzMsMTI4LDAsMCwwLDQxLDMsMTE0LDM5LDAsMCwwLDExNCw0MSwKLSAgICAwLDAsMCwxMTQsNDAsMCwwLDAsNDEsMiwxMTQsMzUsMCwwLDAsMTE0LAotICAgIDQyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDIxOCwxMCw5NSw5OSw5NywxMDgsOTksOTUsMTA5LDExMSwxMDAsMTAxLDI1MCwKLSAgICAxLDAsMCwxMTUsMTIsMCwwLDAsMCwyLDMsMSwxOSwxLDEzLDEsCi0gICAgMTEsMywxMCwxLDExNCwxNDUsMCwwLDAsMjE4LDksMTE4LDEwMSwxMTQsOTgsMTExLAotICAgIDExNSwxMDUsMTE2LDEyMSwxMTQsMjksMCwwLDAsOTksMSwwLDAsMCwxLDAsCi0gICAgMCwwLDMsMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsODEsCi0gICAgMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDcsCi0gICAgNSwwLDExNCw3NywwLDEyNCwwLDAsMTA2LDMsMCwxMDAsNiwwLDEzMSwxLAotICAgIDAsMTE1LDQ2LDAsMTAwLDMsMCwxMjQsMCwwLDIzLDEyNSwwLDAsMTEwLDAsCi0gICAgMCwxMTYsNCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMiwwLDE0MCwwLDAsCi0gICAgMTAwLDQsMCwxMTYsMCwwLDEwNiw2LDAsMTMxLDEsMSwxLDExMCwwLDAsCi0gICAgMTAwLDUsMCw4Myw0MSw3LDEyMiw2MSw4MCwxMTQsMTA1LDExMCwxMTYsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMzIsMTE2LDExMSwzMiwxMTUsMTE2LDEwMCwKLSAgICAxMDEsMTE0LDExNCwzMiwxMDUsMTAyLDMyLDQ1LDExOCw0Nyw4MCw4OSw4NCw3Miw3OSw3OCwKLSAgICA4Niw2OSw4Miw2Niw3OSw4Myw2OSwzMiwxMDUsMTE1LDMyLDExNiwxMTcsMTE0LDExMCwxMDEsCi0gICAgMTAwLDMyLDExMSwxMTAsNDYsMjUwLDEsMzUsMjUwLDcsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMzIsMTIyLDIsMzUsMzIsMTE0LDU0LDAsMCwwLDc4LDQxLDIsMTE0LDE0NywwLAotICAgIDAsMCwxMTQsMTQ4LDAsMCwwLDQxLDcsMTE0LDcsMCwwLDAsMTE0LDExNywKLSAgICAwLDAsMCwyMTgsNywxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSwxMTQsOSwwLDAsCi0gICAgMCwyMTgsNSwxMTIsMTE0LDEwNSwxMTAsMTE2LDExNCw0NywwLDAsMCwyMTgsNiwxMTUsCi0gICAgMTE2LDEwMCwxMDEsMTE0LDExNCw0MSwzLDIxOCw3LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLAotICAgIDExNCwxNDYsMCwwLDAsMTE0LDgwLDAsMCwwLDExNCw0LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMTgsMTAxLDExNCw5OCwKLSAgICAxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSw2LDIsMCwwLDExNSwKLSAgICA4LDAsMCwwLDAsMiwxOCwxLDE1LDEsMTMsMSwxMTQsMTUzLDAsMCwKLSAgICAwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwKLSAgICAwLDAsMywwLDAsMCwxMTUsMzgsMCwwLDAsMTAwLDEsMCwxMzUsMCwKLSAgICAwLDEwMiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzNCwxLDAsMTI1LDEsMCwKLSAgICAxMTYsMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCwKLSAgICA4Myw0MSw0LDEyMiwyNTIsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LAotICAgIDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTE0LAotICAgIDEwMSwxMTMsMTE3LDEwMSwxMTUsMTE2LDEwMSwxMDAsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDk3LDExMCwzMiwxMDQsOTcsMTEwLDEwMCwKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsCi0gICAgMTE1LDExNiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsNDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDQxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwzMiw5NSwKLSAgICAxMTAsOTcsMTA5LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAotICAgIDEwMSw5OSwxMTEsMTEwLDEwMCwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LAotICAgIDExNSwxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTA5LDExMiw5NywxMTQsMTAxLDEwMCwzMiw5NywKLSAgICAxMDMsOTcsMTA1LDExMCwxMTUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICAxMTEsMTA5LDExMiw5NywxMTQsMTA1LDExNSwxMTEsMTEwLDMyLDEwMiw5NywxMDUsMTA4LDExNSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMTAsMzIsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDc4LDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDUsCi0gICAgMCwwLDAsMzEsMCwwLDAsMTE1LDgzLDAsMCwwLDEyNCwxLDAsMTAwLAotICAgIDAsMCwxMDcsOCwwLDExNCwyNCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwKLSAgICAwLDExMCw0MCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNywzLDAsCi0gICAgMTE0LDY0LDAsMTE2LDEsMCwxMDAsMSwwLDEyNCwxLDAsMjIsMTAwLDIsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LAotICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxNDIsMiwwLDgzLDQxLAotICAgIDMsNzgsMTIyLDIzLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDExMCwxMTEsCi0gICAgMTE2LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMzcsMTE1LDExNCw2NywwLDAsMCwKLSAgICA0MSwyLDExNCw2NywwLDAsMCwyMTgsMTEsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDEsNCwxMTQsNzEsMCwwLDAsMTE0LDY3LDAsMCwwLAotICAgIDExNCw4MCwwLDAsMCwxMTQsMTA4LDAsMCwwLDQxLDEsMjE4LDYsMTA5LDEwMSwKLSAgICAxMTYsMTA0LDExMSwxMDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE5LAotICAgIDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLAotICAgIDExMiwxMDEsMTE0LDIyLDIsMCwwLDExNSwxMCwwLDAsMCwwLDEsMTIsMSwKLSAgICAxMiwxLDE1LDEsMjUsMSwxMjIsNDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDk5LDEwNCwKLSAgICAxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LAotICAgIDQxLDEsMTE0LDY1LDAsMCwwLDQxLDIsMTE0LDE1NSwwLDAsMCwxMTQsMTU2LAotICAgIDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDE1NSwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwyMTgsMTEsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTQsMiwwLDAsMTE1LDYsMCwwLDAsMCw4LDIxLDYsMTMsMSwKLSAgICAxMTQsMTU3LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDMsMCwwLDAsMywwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LAotICAgIDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLAotICAgIDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLAotICAgIDAsODMsNDEsMywxMjIsNDksNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsCi0gICAgMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgMiwwLDAsMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNywwLDExNCw0NSwwLAorICAgIDExNiwzMiwxMjMsMTI1LDQxLDMsMjE4LDYsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTQsMTUsCisgICAgMCwwLDAsMjE4LDIsMTA1LDEwMCw0MSwxLDExNCwxOSwwLDAsMCwxMTQsMTAsCisgICAgMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsOCw5NSwKKyAgICA5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsMTMyLDAsMCwwLDExNSwyLDAsMCwwLAorICAgIDAsMSwxMjIsMjAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LAorICAgIDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSw5LDExNCwxLDAsMCwwLAorICAgIDExNCwwLDAsMCwwLDExNCwyLDAsMCwwLDExNCwzLDAsMCwwLDExNCwKKyAgICAyMCwwLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDQ2LDAsMCwwLDExNCw0NywKKyAgICAwLDAsMCwxMTQsNTIsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLAorICAgIDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwzMiwwLDAsCisgICAgMCw2OCwwLDAsMCwxMTUsMTIsMCwwLDAsMTIsNCw2LDIsMTIsOCwKKyAgICAxMiwxMiwxMiwyNSwxMiwxMywxMTQsMzIsMCwwLDAsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwKKyAgICAxMTUsNzAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsCisgICAgOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsCisgICAgNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsMCwxMDAsOSwKKyAgICAwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDgzLDQxLDExLDIxOCwxNiw5NSwKKyAgICA2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDEyMiwKKyAgICA4Niw2NSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiw5NSw3NywxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDc2LDExMSw5OSwxMDcsMzIsMTAxLDExMywxMTcsMTA1LDExOCw5NywxMDgsMTAxLDExMCwxMTYsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5OCwxMTcsMTA1LDEwOCwKKyAgICAxMDAsMTE1LDMyLDExOSwxMDUsMTE2LDEwNCwxMTEsMTE3LDExNiwxMCwzMiwzMiwzMiwzMiwxMDksCisgICAgMTE3LDEwOCwxMTYsMTA1LDQ1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE1LAorICAgIDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwKKyAgICAwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDEsMCwxMjQsMCwwLAorICAgIDk1LDEsMCwxMDAsMCwwLDgzLDQxLDIsNzgsMTE0LDMzLDAsMCwwLDQxLAorICAgIDIsMTE0LDE1LDAsMCwwLDExNCwzOCwwLDAsMCw0MSwyLDExNCwxOSwwLAorICAgIDAsMCwxMTQsMTUsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsCisgICAgMCwxMTQsMTEsMCwwLDAsMTE0LDIwLDAsMCwwLDE0MCwwLDAsMCwxMTUsCisgICAgNCwwLDAsMCwwLDEsOSwxLDEyMiwyNSw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsCisgICAgNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LAorICAgIDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKKyAgICAzLDAsMCwwLDY3LDAsMCwwLDExNSwxOSwwLDAsMCwxMjQsMCwwLAorICAgIDQsMTA2LDAsMCwxMDAsMSwwLDU1LDIsOTUsMCwwLDEwMCwyLDAsODMsCisgICAgNDEsMyw3OCwxMTQsNDUsMCwwLDAsODQsNDEsMSwxMTQsMzgsMCwwLDAsCisgICAgNDEsMSwxMTQsMTksMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsCisgICAgMCwxMTQsMTEsMCwwLDAsMTE0LDQ2LDAsMCwwLDE0NCwwLDAsMCwxMTUsCisgICAgNCwwLDAsMCwwLDEsMTUsMSwxMjIsMjQsOTUsNjgsMTE3LDEwOSwxMDksMTIxLAorICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5Nyw5OSwxMTMsMTE3LDEwNSwKKyAgICAxMTQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQ2LDAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDI3LDAsMTE2LDEsMCwxMDAsMiwKKyAgICAwLDEzMSwxLDAsMTMwLDEsMCwxMjQsMCwwLDQsMTA2LDAsMCwxMDAsMywKKyAgICAwLDU2LDIsOTUsMCwwLDEwMCwwLDAsODMsNDEsNCw3OCwxMTQsMzMsMCwKKyAgICAwLDAsMTIyLDMxLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsCisgICAgMTE1LDEwMSwzMiwxMTcsMTEwLDQ1LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwKKyAgICAxMTEsOTksMTA3LDExNCw0NSwwLDAsMCw0MSwyLDExNCwzOCwwLDAsMCwxMTQsCisgICAgNDgsMCwwLDAsNDEsMSwxMTQsMTksMCwwLDAsMTE0LDEwLDAsMCwwLAorICAgIDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDQ3LDAsMCwwLDE0OCwKKyAgICAwLDAsMCwxMTUsNiwwLDAsMCwwLDEsMTUsMSwxMiwxLDEyMiwyNCwKKyAgICA5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LAorICAgIDQ2LDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwxLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsCisgICAgMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTE2LDIsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsMCw4Myw0MSwyLDc4LDEyMiwyOCwKKyAgICA5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LAorICAgIDQwLDEyMywzMywxMTQsMTI1LDQxLDMyLDk3LDExNiwzMiwxMjMsMTI1LDQxLDMsMTE0LDUwLAorICAgIDAsMCwwLDExNCwxNSwwLDAsMCwxMTQsNTEsMCwwLDAsNDEsMSwxMTQsCisgICAgMTksMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsCisgICAgMCwwLDAsMTE0LDUyLDAsMCwwLDE1MywwLDAsMCwxMTUsMiwwLDAsCisgICAgMCwwLDEsMTIyLDI1LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQxLAorICAgIDgsMTE0LDEsMCwwLDAsMTE0LDAsMCwwLDAsMTE0LDIsMCwwLDAsCisgICAgMTE0LDMsMCwwLDAsMTE0LDIwLDAsMCwwLDExNCw0NiwwLDAsMCwxMTQsCisgICAgNDcsMCwwLDAsMTE0LDUyLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsCisgICAgMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsNTMsMCwKKyAgICAwLDAsMTM2LDAsMCwwLDExNSwxMCwwLDAsMCwxMiwyLDYsMiwxMiwKKyAgICA0LDEyLDQsMTIsNSwxMTQsNTMsMCwwLDAsOTksMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsCisgICAgNTIsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsCisgICAgMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMCwzLDAsMTAwLAorICAgIDQsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsCisgICAgMCw5MCw1LDAsMTAwLDcsMCw4Myw0MSw4LDIxOCwxOCw5NSw3NywxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLAorICAgIDAsMTAwLDAsMCwxMjQsMCwwLDk1LDEsMCwxMDAsMCwwLDgzLDQxLDEsCisgICAgNzgsNDEsMiwxMTQsMTgsMCwwLDAsMjE4LDUsOTUsMTA4LDExMSw5OSwxMDcsNDEsCisgICAgMiwxMTQsMTksMCwwLDAsMTE0LDE1LDAsMCwwLDExNCwxMCwwLDAsMCwKKyAgICAxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwyMCwwLDAsMCwxNTksCisgICAgMCwwLDAsMTE1LDQsMCwwLDAsMCwxLDksMSwxMjIsMjcsOTUsNzcsCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDc3LDk3LDExMCw5NywxMDMsMTAxLDExNCwKKyAgICA0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDEsMCwwLDAsMTAsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLAorICAgIDAsMCwwLDEyMiwyMiwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwKKyAgICAxLDAsMTI0LDAsMCw5NSwyLDAsODcsMTAwLDAsMCwxMTYsMywwLDEwNiwKKyAgICA0LDAsMTMxLDAsMCwxLDg4LDEyNCwwLDAsMTA2LDIsMCwxMDYsNSwwLAorICAgIDEzMSwwLDAsMSwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNiwyMTgsMTYsOTUsCisgICAgMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE0LAorICAgIDE4LDAsMCwwLDExNCw1NSwwLDAsMCwyMTgsNCw5NSwxMDUsMTA5LDExMiwyMTgsCisgICAgMTIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE0LDQ2LDAsCisgICAgMCwwLDQxLDEsMTE0LDE5LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsCisgICAgMCwwLDAsMTE0LDExLDAsMCwwLDExNCwyMywwLDAsMCwxNjMsMCwwLAorICAgIDAsMTE1LDgsMCwwLDAsMCwxLDMsMSwyMiwyLDExLDEsMTIyLDI4LAorICAgIDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3Nyw5NywxMTAsOTcsMTAzLAorICAgIDEwMSwxMTQsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMywwLDAsMCwxLDAsMCwwLDc5LDAsMCwKKyAgICAwLDExNSwxNywwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMzEsCisgICAgMCwwLDEsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDU1LDAsMCwKKyAgICAwLDExNCw0NywwLDAsMCw0MSwzLDExNCwxOSwwLDAsMCwxMTQsMjksMCwKKyAgICAwLDAsOTAsNiwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwzMCwwLDAsMCwxNzAsMCwKKyAgICAwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNyw5NSw3NywxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDc2LDExMSw5OSwxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LAorICAgIDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MSw2LDExNCwxLDAsMCwwLDExNCwwLAorICAgIDAsMCwwLDExNCwyLDAsMCwwLDExNCwyMCwwLDAsMCwxMTQsMjMsMCwKKyAgICAwLDAsMTE0LDMwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLAorICAgIDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsNTQsMCwwLDAsCisgICAgMTU3LDAsMCwwLDExNSw2LDAsMCwwLDEyLDIsMTIsNCwxMiw3LDExNCwKKyAgICA1NCwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsCisgICAgMCwxMSwwLDAsMCwzLDAsMCwwLDExNSwxMzksMCwwLDAsMTAwLDEsCisgICAgMCwxMjUsMSwwLDEyMSwxNywwLDExNiwwLDAsMTM2LDAsMCwyNSwxMzEsMCwKKyAgICAwLDEyNSwxLDAsODcsMTEwLDE4LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCwKKyAgICA0MywwLDEsMSwxLDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMSwwLAorICAgIDEwNyw4LDAsMTE0LDEzNSwwLDExNiwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwKKyAgICA4MywwLDExNiwzLDAsMTM2LDAsMCwxMzEsMSwwLDEyNSwxLDAsMTEwLDEyLAorICAgIDAsMTE2LDQsMCwxMzYsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMzUsMCwwLAorICAgIDEwMiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzNCwwLDAsMTI1LDIsMCwxMTYsCisgICAgNSwwLDEwNiw2LDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE2LDAsCisgICAgMCwxMzYsMCwwLDYwLDEyNCwxLDAsODMsNDEsNCwxMjIsMTA5LDcxLDEwMSwxMTYsCisgICAgMzIsMTExLDExNCwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTAyLDExMSwxMTQsMzIsOTcsCisgICAgMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsCisgICAgMTA5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MywxMDQsMTExLDExNywxMDgsMTAwLDMyLAorICAgIDExMSwxMTAsMTA4LDEyMSwzMiw5OCwxMDEsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExOSwKKyAgICAxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsCisgICAgMTExLDk5LDEwNywzMiwxMTYsOTcsMTA3LDEwMSwxMTAsNDYsNzgsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCwxOSwwLDAsMCwKKyAgICAxMTUsMTEsMCwwLDAsMTE2LDAsMCwxMzYsMCwwLDYxLDEwMCwwLDAsODMsCisgICAgNDEsMSw3OCw0MSwxLDIxOCwxMyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsCisgICAgMTExLDk5LDEwNywxMTUsNDEsMSwyMTgsMSw5NSw0MSwxLDExNCwxNSwwLDAsMCwKKyAgICAxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDIxOCwyLDk5LDk4LDE5MCwwLAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDI4LDk1LDEwMywxMDEsMTE2LDk1LAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksCisgICAgOTcsMTA4LDExNSw2Miw0Niw5OSw5OCw0MSw3LDExNCw1OSwwLDAsMCwxMTQsMjgsCisgICAgMCwwLDAsMTE0LDM0LDAsMCwwLDExNCw1MywwLDAsMCwxMTQsMzIsMCwKKyAgICAwLDAsMjE4LDgsOTUsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTAsMywxMTQsMTAxLAorICAgIDEwMiw0MSwzLDExNCwxNSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDYxLDAsCisgICAgMCwwLDExNCwxMCwwLDAsMCw0MSwxLDExNCwxNSwwLDAsMCwxMTQsMTEsCisgICAgMCwwLDAsMTE0LDU2LDAsMCwwLDE3NiwwLDAsMCwxMTUsMjQsMCwwLAorICAgIDAsMCw0LDYsMSwzLDEsMTcsMSwxMywxLDUsMSwxMiwxLDEyLAorICAgIDEsMTUsMiwxMiwxLDE4LDIsMjIsMSwxMTQsNTYsMCwwLDAsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDcxLDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwKKyAgICAwLDEyNSwxLDAsMTE2LDEsMCwxMDYsMiwwLDEzMSwwLDAsMSwxMjEsMTQsCisgICAgMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDAsMCwxLDg3LDExMCwxOCwwLDQsCisgICAgMTE2LDQsMCwxMDcsMTAsMCwxMTQsNTYsMCwxLDEsMSw4OSwxMTAsMTEsMCwKKyAgICA4OCwxMjQsMSwwLDEwNiw1LDAsMTMxLDAsMCwxLDEwMCwxLDAsODMsNDEsCisgICAgMiw5NywyMSwxLDAsMCw4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwMywxMDgsMTExLDk4LDk3LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwKKyAgICAxMDgsMTExLDk5LDEwNyw0NCwzMiw5NywxMTAsMTAwLDMyLDk3LDk5LDExMywxMTcsMTA1LDExNCwKKyAgICAxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsCisgICAgMTExLDk5LDEwNywzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDMyLDMyLDMyLAorICAgIDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsCisgICAgMzIsMTAxLDExMCwxMTUsMTE3LDExNCwxMDEsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTA1LDExNSwzMiw5OSwxMTEsMTA5LDExMiwxMDgsMTAxLDExNiwxMDEsMTA4LDEyMSwzMiwxMDUsCisgICAgMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwxMDAsNDQsMzIsMTA1LDExMCwzMiwxMTYsCisgICAgMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDEsMTE4LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTYsMzIsCisgICAgMTA1LDExNSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAorICAgIDEwMCwzMiw5OCwxMjEsMzIsOTcsMTEwLDExMSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwxMTQsCisgICAgMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MywxMDQsMTExLDExNywxMDgsMTAwLAorICAgIDMyLDExMSwxMTAsMTA4LDEyMSwzMiw5OCwxMDEsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLAorICAgIDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwKKyAgICAxMDgsMTExLDk5LDEwNywzMiwxMTYsOTcsMTA3LDEwMSwxMTAsNDYsNzgsNDEsNiwxMTQsNTYsCisgICAgMCwwLDAsMTE0LDU3LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNDYsMCwKKyAgICAwLDAsMTE0LDMxLDAsMCwwLDExNCw0NywwLDAsMCw0MSwyLDExNCwxNSwKKyAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLAorICAgIDAsMCwxMTQsMTEsMCwwLDAsMjE4LDE5LDk1LDEwOCwxMTEsOTksMTA3LDk1LDExNywKKyAgICAxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTk1LDAsMCwwLAorICAgIDExNSwxNCwwLDAsMCwwLDcsMTIsMSwxMCwxLDMsMSwxNCwxLDEzLAorICAgIDMsNSwyLDExNCw2MywwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMywwLDAsMCwzLDAsMCwwLDc5LDAsMCwwLDExNSwxMywwLAorICAgIDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxNDIsMCwwLDgzLDQxLAorICAgIDEsOTcsNDYsMSwwLDAsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsOTUsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsCisgICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsOTksMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk3LAorICAgIDEwOCwxMTksOTcsMTIxLDExNSwzMiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwzMiwxMTUsMTAxLDExMywKKyAgICAxMTcsMTAxLDExMCw5OSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDExNiwKKyAgICAxMDQsOTcsMTE2LDMyLDEwMSwxMTAsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiw5NywzMiw5OSwKKyAgICA5NywxMDgsMTA4LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LAorICAgIDExNiwxMDUsMTExLDExMCwxMCwxMCwzMiwzMiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwNSwxMTYsCisgICAgMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsMzIsMTExLDEwMiwzMiw5NywzMiwxMTAsMTExLAorICAgIDExNCwxMDksOTcsMTA4LDMyLDk5LDk3LDEwOCwxMDgsMzIsMTA1LDExMCwzMiwxMTIsMTA4LDk3LAorICAgIDk5LDEwMSwxMTUsMzIsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLAorICAgIDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCisgICAgOTgsMTAsMzIsMzIsMzIsMzIsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDExNiwKKyAgICAxMTQsMTExLDEwMCwxMTcsOTksMTAxLDExNSwzMiwxMTcsMTEwLDExOSw5NywxMTAsMTE2LDEwMSwxMDAsCisgICAgMzIsMTEwLDExMSwxMDUsMTE1LDEwMSwzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTE2LDExNCw5Nyw5OSwxMDEsOTgsOTcsOTksMTA3LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsCisgICAgMTE5LDEwNCwxMDEsMTEwLDMyLDEwMSwxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMCwxMDMsMTAsMzIsCisgICAgMzIsMzIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMTE0LDEwLDAsMCwwLDQxLDMsMjE4LDEsMTAyLDExNCwyOSwKKyAgICAwLDAsMCw5MCw0LDEwNywxMTksMTAwLDExNSwxMTQsMTAsMCwwLDAsMTE0LDEwLAorICAgIDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsMjUsOTUsOTksOTcsMTA4LDEwOCw5NSwKKyAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCisgICAgMTE4LDEwMSwxMDAsMjE0LDAsMCwwLDExNSwyLDAsMCwwLDAsOCwxMTQsNjUsCisgICAgMCwwLDAsMjE4LDksMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDUsMTE2LDEyMSwxMTQsNDUsCisgICAgMCwwLDAsOTksMSwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsCisgICAgNCwwLDAsMCw3MSwwLDAsMCwxMTUsNzUsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDcsNSwwLDExNCw3MSwwLDEyNCwKKyAgICAwLDAsMTA2LDMsMCwxMDAsNiwwLDEzMSwxLDAsMTE1LDQzLDAsMTAwLDMsCisgICAgMCwxMjQsMCwwLDIzLDEyNSwwLDAsMTE2LDQsMCwxMjQsMCwwLDEwNiw1LAorICAgIDAsMTI0LDIsMCwxNDAsMCwwLDEwMCw0LDAsMTE2LDAsMCwxMDYsNiwwLAorICAgIDEzMSwxLDEsMSwxMDAsNSwwLDgzLDQxLDcsMTIyLDYxLDgwLDExNCwxMDUsMTEwLAorICAgIDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwzMiwxMTYsMTExLAorICAgIDMyLDExNSwxMTYsMTAwLDEwMSwxMTQsMTE0LDMyLDEwNSwxMDIsMzIsNDUsMTE4LDQ3LDgwLDg5LAorICAgIDg0LDcyLDc5LDc4LDg2LDY5LDgyLDY2LDc5LDgzLDY5LDMyLDEwNSwxMTUsMzIsMTE2LAorICAgIDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTExLDExMCw0NiwyNTAsMSwzNSwyNTAsNywxMDUsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiwzMiwxMjIsMiwzNSwzMiw5MCw0LDEwMiwxMDUsMTA4LDEwMSw3OCwKKyAgICA0MSwyLDExNCw2NywwLDAsMCwxMTQsNjgsMCwwLDAsNDEsNywxMTQsMTQsCisgICAgMCwwLDAsMjE4LDUsMTAyLDEwOCw5NywxMDMsMTE1LDIxOCw3LDExOCwxMDEsMTE0LDk4LAorICAgIDExMSwxMTUsMTAxLDIxOCwxMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwyMTgsCisgICAgNSwxMTIsMTE0LDEwNSwxMTAsMTE2LDExNCw1MCwwLDAsMCwyMTgsNiwxMTUsMTE2LDEwMCwKKyAgICAxMDEsMTE0LDExNCw0MSwzLDIxOCw3LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNCw2NiwKKyAgICAwLDAsMCwxMTQsMjksMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLAorICAgIDAsMCwxMTQsMTEsMCwwLDAsMjE4LDE2LDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsCisgICAgMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDIyNSwwLDAsMCwxMTUsOCwwLAorICAgIDAsMCwwLDIsMTgsMSwxNSwxLDEwLDEsMTE0LDc1LDAsMCwwLDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsCisgICAgMywwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwKKyAgICAxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwKKyAgICAwLDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDEsMywxMjIsNDksCisgICAgNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwKKyAgICAxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwKKyAgICA0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LDAsCisgICAgMCwwLDE5LDAsMCwwLDExNSw1NSwwLDAsMCwxMjQsMSwwLDExNiwwLAorICAgIDAsMTA2LDEsMCwxMDcsNywwLDExNCw0MiwwLDExNiwyLDAsMTAwLDEsMCwKKyAgICAxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwxLDAsMTMxLAorICAgIDEsMSwxMzAsMSwwLDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLAorICAgIDAsODMsNDEsMyw3OCwxMjIsMjksMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsCisgICAgMTExLDExNiwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTQsMTUsMCwwLDAsNDEsNCwxMTQsMTQsMCwwLDAsCisgICAgMjE4LDIwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDk1LDExMCw5NywxMDksMTAxLDExNSwyMTgsMTEsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsCisgICAgMTE0LDExMSwxMTQsMTE0LDUwLDAsMCwwLDQxLDIsMTE0LDE5LDAsMCwwLDIxOCwKKyAgICA4LDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MSwxLDIxOCwzLDEwMiwxMjAsMTEwLAorICAgIDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMjE4LDI1LDk1LDExNCwxMDEsMTEzLAorICAgIDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCwKKyAgICA5NywxMTIsMTEyLDEwMSwxMTQsMjM1LDAsMCwwLDExNSw4LDAsMCwwLDAsMSwKKyAgICAxNSwxLDE4LDEsOSwxLDEyMiw1Miw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCisgICAgMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LAorICAgIDExNSw2Miw0Niw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsCisgICAgMTA4LDExNiwxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQxLDEsMTE0LDEyLAorICAgIDAsMCwwLDQxLDIsMTE0LDc5LDAsMCwwLDExNCw4MCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsNDEsMSwxMTQsNzksMCwwLDAsMTE0LDExLDAsMCwwLAorICAgIDIxOCwxNyw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LAorICAgIDExNiwxMDUsMTEwLDIzMywwLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwKKyAgICAxMywxLDExNCw4MSwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwKKyAgICAwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwKKyAgICAxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwKKyAgICAxMjQsMSwwLDgzLDQxLDMsMTIyLDQ3LDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsCisgICAgMTE0LDMyLDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsCisgICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDIsMCwwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTUsMCwwLAorICAgIDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTUsNDIsMCwKICAgICAxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLAotICAgIDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLAotICAgIDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMyw3OCwxMjIsMjksCi0gICAgMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNjcsMCwKLSAgICAwLDAsNDEsNCwxMTQsNywwLDAsMCwyMTgsMjAsOTgsMTE3LDEwNSwxMDgsMTE2LAotICAgIDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNCwKLSAgICAxNTQsMCwwLDAsMTE0LDQ3LDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLAotICAgIDIxOCw4LDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MSwxLDIxOCwzLDEwMiwxMjAsCi0gICAgMTEwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyNSw5NSwxMTQsMTAxLAotICAgIDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDM0LDIsMCwwLDExNSw4LDAsMCwwLDAsCi0gICAgMSwxNSwxLDE4LDEsMTIsMSwxMjIsNTIsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LAotICAgIDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MSwxLDExNCwKLSAgICA2NSwwLDAsMCw0MSwyLDExNCwxNjAsMCwwLDAsMTE0LDE2MSwwLDAsMCwKLSAgICAxMTQsNCwwLDAsMCw0MSwxLDExNCwxNjAsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMjE4LDE3LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsMzIsMiwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LAotICAgIDUsMTMsMSwxMTQsMTYyLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwxMTUsMzUsMCwKLSAgICAwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwKLSAgICAwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwwLDAsMTMxLDIsMCwKLSAgICAxLDEyNCwxLDAsODMsNDEsMywxMjIsNDcsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LAotICAgIDExMSwxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0Niw5OSwyLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwwLAotICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNSw0NSwKLSAgICAwLDExNiwyLDAsMTAwLDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwKLSAgICAxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LAotICAgIDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MSwzLDc4LDEyMiwKLSAgICAyNywxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw2NywwLDAsCi0gICAgMCw0MSw0LDExNCwxMDYsMCwwLDAsMjE4LDksMTA1LDExNSw5NSwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwxMTQsMTU0LDAsMCwwLDExNCw0NywwLDAsMCw0MSwyLDExNCwKLSAgICA3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDQxLDEsMTE0LDE2MCwwLDAsMCwKLSAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjQsOTUsMTE0LDEwMSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTksMTE0LDk3LAotICAgIDExMiwxMTIsMTAxLDExNCw0NSwyLDAsMCwxMTUsOCwwLDAsMCwwLDEsMTUsCi0gICAgMSwxOCwxLDEyLDEsMTIyLDUwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsCi0gICAgOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAotICAgIDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsMSwxMTQsNjUsMCwwLDAsCi0gICAgNDEsMiwxMTQsMTYwLDAsMCwwLDExNCwxNjQsMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsNDEsMSwxMTQsMTYwLDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwKLSAgICAxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDQzLAotICAgIDIsMCwwLDExNSw2LDAsMCwwLDAsMiwxOCw1LDEzLDEsMTE0LDE2NSwKLSAgICAwLDAsMCw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKLSAgICA0LDAsMCwwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMjQsMCwwLAotICAgIDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMiwwLDEyNSwKLSAgICAzLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LDEsCi0gICAgMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgzLDAsMTAwLDIsMCwxMjUsNCwwLAotICAgIDExNiwyLDAsMTA2LDMsMCwxMjQsNCwwLDEwNiw0LDAsMTI0LDMsMCwxMDAsCi0gICAgMywwLDI1LDEzMSwxLDAsMTE2LDUsMCwxMzEsMiwwLDEsMTEwLDAsMCwKLSAgICAxMjQsMiwwLDgzLDQxLDQsMTIyLDE1NSw4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMjEsMzIsMTAwLDEwMSwxMDgsMTAxLDEwMyw5NywxMTYsCi0gICAgMTA1LDExMCwxMDMsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDEwOCwxMDIsNDYsCi0gICAgMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsCi0gICAgMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDMyLDEwNSwxMTAsCi0gICAgMzIsMTAyLDk3LDExOCwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDc4LDEyMiw0NCw3OCwxMTEsMTE2LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwNSwxMTAsMTAzLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTIzLDEyNSwKLSAgICA1OCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDExNCw4NCwwLDAsMCw0MSw2LDIxOCwxMSwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMzEsMCwwLDAsMjE4LDksOTUsMTE5LDk3LAotICAgIDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDIxOCw0LDExOSw5NywxMTQsMTEwLDExNCw0NywwLDAsCi0gICAgMCwyMTgsMTMsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLAotICAgIDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMjE4LDYsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwyMTgsOCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDIxOCwzLAotICAgIDEwOSwxMTUsMTAzLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCi0gICAgMCwwLDIxOCwxNyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTE1LDEwNCwxMDUsMTA5LDU0LDIsMCwwLDExNSwxMCwwLDAsMCwwLDEwLAotICAgIDIxLDEsMjQsMSw2LDEsMzIsMSwxMTQsMTczLDAsMCwwLDk5LDIsMCwKLSAgICAwLDAsMCwwLDAsMCw1LDAsMCwwLDMsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDkzLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsMCwwLAotICAgIDEzMSwyLDAsMTI1LDIsMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsCi0gICAgMywwLDEyNCwxLDAsMTE2LDIsMCwxMDYsMywwLDEwNyw2LDAsMTE0LDc5LAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsMTI1LDQsMCwxMjQsMywKLSAgICAwLDEwNiw0LDAsMTI0LDQsMCwxMzEsMSwwLDEsMTE2LDIsMCwxMDYsMywKLSAgICAwLDEyNCwxLDAsMjUsODMsMTI0LDMsMCwxMDYsNSwwLDEzMSwwLDAsODMsCi0gICAgMTAwLDEsMCw4Myw0MSwyLDEyMiwxMjgsNzYsMTExLDk3LDEwMCwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMDUsMTE2LAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwKLSAgICAxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCwKLSAgICA0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAxLDEyMCwKLSAgICAxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywKLSAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsNDEsNiwyMTgsMTYsMTE1LDExMiwxMDEsCi0gICAgOTksOTUsMTAyLDExNCwxMTEsMTA5LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDEyLDk1LAotICAgIDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMTE0LDcsMCwwLDAsCi0gICAgMTE0LDczLDAsMCwwLDIxOCw0LDEwMSwxMjAsMTAxLDk5LDIxOCw0LDEwOCwxMTEsOTcsCi0gICAgMTAwLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMjE4LDQsMTE1LAotICAgIDExMiwxMDEsOTksMjE4LDcsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDIxOCw2LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDIxOCwxNyw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksNzEsMiwwLDAsMTE1LDE0LDAsMCwwLDAsCi0gICAgNiwxNSwxLDEyLDEsMTUsMSwxMywxLDEzLDEsMTEsMiwxMTQsMTgxLDAsCi0gICAgMCwwLDk5LDQsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwxOSwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMjU1LDEsMCwwLDEwNSwwLDAsMTI1LAotICAgIDQsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMzEsMCwxMjQsMiwKLSAgICAwLDEyNCw0LDAsMTAwLDIsMCw2MCwxMTAsNiwwLDEwMCwzLDAsMTI1LDIsCi0gICAgMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsNjIsMCwxMjQsMywwLAotICAgIDEyNCw0LDAsMTAwLDQsMCw2MCwxMTAsMCwwLDEyNCwwLDAsMTAwLDEsMCwKLSAgICAxMDAsNSwwLDEzMywyLDAsMjUsMTI1LDUsMCwxMjQsMCwwLDEwMCw1LDAsCi0gICAgMTAwLDYsMCwxMzMsMiwwLDI1LDEyNSw2LDAsMTI0LDAsMCwxMDAsNiwwLAotICAgIDEwMCw3LDAsMTMzLDIsMCwyNSwxMjUsNywwLDEyNCw1LDAsMTE2LDAsMCwKLSAgICAxMDcsMywwLDExNCwxNzEsMCwxMDAsOCwwLDEwNiwxLDAsMTI0LDIsMCwxMjQsCi0gICAgNSwwLDEzMSwyLDAsMTI1LDgsMCwxMTYsMiwwLDEwMCw5LDAsMTI0LDgsCi0gICAgMCwxMzEsMiwwLDEsMTE2LDMsMCwxMjQsOCwwLDEyNCw0LDAsMTQxLDEsCi0gICAgMCwxMzAsMSwwLDExMCwxMjIsMCwxMTYsNCwwLDEyNCw2LDAsMTMxLDEsMCwKLSAgICAxMDAsNSwwLDEwNywzLDAsMTE0LDIzMiwwLDEwMCwxMCwwLDEwNiwxLDAsMTI0LAotICAgIDIsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LDIsMCwxMDAsOSwwLDEyNCw4LAotICAgIDAsMTMxLDIsMCwxLDExNiw1LDAsMTI0LDgsMCwxMzEsMSwwLDEzMCwxLAotICAgIDAsMTEwLDYxLDAsMTE2LDQsMCwxMjQsNywwLDEzMSwxLDAsMTAwLDUsMCwKLSAgICAxMDcsMywwLDExNCwzNywxLDEwMCwxMSwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsCi0gICAgMSwwLDEyNSw4LDAsMTE2LDIsMCwxMDAsOSwwLDEyNCw4LDAsMTMxLDIsCi0gICAgMCwxLDExNiw1LDAsMTI0LDgsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsCi0gICAgMCwxMjQsMSwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMjQxLDEsMTIxLDIwLDAsCi0gICAgMTE2LDYsMCwxMjQsMSwwLDEwMCwxMiwwLDI1LDEzMSwxLDAsMTI1LDksMCwKLSAgICA4NywxMTAsMTgsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDg5LDEsMSwxLAotICAgIDEsODksMTEwLDY1LDAsODgsMTE2LDgsMCwxMjQsNiwwLDEzMSwxLDAsMTI0LAotICAgIDksMCwxMDcsMywwLDExNCwxNTQsMSwxMDAsMTMsMCwxMDYsMSwwLDEyNCwyLAotICAgIDAsMTMxLDEsMCwxMjUsOCwwLDExNiwyLDAsMTAwLDksMCwxMjQsOCwwLAotICAgIDEzMSwyLDAsMSwxMTYsMywwLDEyNCw4LDAsMTI0LDQsMCwxNDEsMSwwLAotICAgIDEzMCwxLDAsMTEwLDAsMCwxMjEsMTgsMCwxMjQsMSwwLDEwMCwxNCwwLDI1LAotICAgIDEwMCwxNSwwLDY0LDEyNSwxMCwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsCi0gICAgMTAsMCwxMTQsMTkyLDEsMSwxLDEsODksMTEzLDI0MSwxLDg4LDExNiw4LDAsCi0gICAgMTI0LDcsMCwxMzEsMSwwLDEyNCwxMCwwLDEwNywzLDAsMTE0LDI0MSwxLDExNiwKLSAgICAzLDAsMTAwLDEzLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDQsCi0gICAgMCwxNDEsMSwwLDEzMCwxLDAsMTEzLDI0MSwxLDExMCwwLDAsMTI0LDAsMCwKLSAgICAxMDAsNywwLDEwMCwxLDAsMTMzLDIsMCwyNSw4Myw0MSwxNiw5NywxMjIsMSwKLSAgICAwLDAsODYsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDQsCi0gICAgMTAxLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNSwKLSAgICAxMTUsMTAxLDEwMCw0NSwxMDUsMTEwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLAotICAgIDk3LDEwMyw5NywxMDUsMTEwLDExNSwxMTYsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsCi0gICAgMTE2LDk3LDExNiwxMTUsMzIsNDAsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMDMsMTA1LDExOCwKLSAgICAxMDEsMTEwLDQxLDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwKLSAgICAxMDMsMzIsMTE2LDEwNCwxMDEsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE2LAotICAgIDEwNCw5NywxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwzMiw5OSwxMTEsMTA5LDExMiwxMDUsCi0gICAgMTA4LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDQwLDQxLAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTExLDExNiwxMDQsMTAxLDExNCwKLSAgICAzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE3LAotICAgIDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMDQsOTcsMTEwLDk5LDEwMSwzMiwxMDEsCi0gICAgMTE0LDExNCwxMTEsMTE0LDMyLDExNCwxMDEsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwKLSAgICAzMiwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTExLDExNCwxMTQsMTAxLDk5LDExNiwzMiwxMTEsMTE0LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwxMTUsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiwxMTYsMTExLDMyLDk4LDEwMSwKLSAgICAzMiwxMTUsMTE2LDk3LDEwOCwxMDEsNDYsMzIsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDUsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwKLSAgICAxMDAsMzIsMTE2LDExMSwzMiw5OCwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExNCwxMTcsMTEwLAotICAgIDk5LDk3LDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDExNCw2NywwLAotICAgIDAsMCwxMjIsMTAsNjAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNjIsMTE0LDM1LAotICAgIDAsMCwwLDExNCwxMiwwLDAsMCwyMzMsOCwwLDAsMCwyMzMsMTIsMCwKLSAgICAwLDAsMTIyLDMwLDk4LDk3LDEwMCwzMiwxMDksOTcsMTAzLDEwNSw5OSwzMiwxMTAsMTE3LAotICAgIDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLAotICAgIDExNCwxMjUsMTIyLDIsMTIzLDEyNSwxMjIsNDMsMTE0LDEwMSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiwKLSAgICA2OSw3OSw3MCwzMiwxMTksMTA0LDEwNSwxMDgsMTAxLDMyLDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsCi0gICAgMTAzLDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTA1LDExMCwzMiwxMjMsCi0gICAgMzMsMTE0LDEyNSwxMjIsNDgsMTE0LDEwMSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiw2OSw3OSw3MCwKLSAgICAzMiwxMTksMTA0LDEwNSwxMDgsMTAxLDMyLDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwKLSAgICAxMDUsMTIyLDEwMSwzMiwxMTEsMTAyLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTA1LDExMCwKLSAgICAzMiwxMjMsMzMsMTE0LDEyNSwyMTgsNSwxMDksMTE2LDEwNSwxMDksMTAxLDEyMiwyNiw5OCwxMjEsCi0gICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDExNSwxMTYsOTcsMTA4LDEwMSwzMiwKLSAgICAxMDIsMTExLDExNCwzMiwxMjMsMzMsMTE0LDEyNSwyMTgsNCwxMTUsMTA1LDEyMiwxMDEsMTA4LDMsCi0gICAgMCwwLDAsMjU1LDEyNywyNTUsMTI3LDMsMCw0MSw5LDIxOCwxMiw3Nyw2NSw3MSwKLSAgICA3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwxMTQsNDcsMCwwLDAsMTE0LDE1MywKLSAgICAwLDAsMCwxMTQsMTU0LDAsMCwwLDExNCwzMSwwLDAsMCwyMTgsOCw2OSwKLSAgICA3OSw3MCw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDE0LDAsMCwwLDExNCw3OSwwLDAsCi0gICAgMCwxMTQsMTksMCwwLDAsNDEsMTEsMTE0LDUzLDAsMCwwLDIxOCwxMiwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTQsNjcsMCwwLDAsCi0gICAgMTE0LDM1LDAsMCwwLDkwLDExLDEwMSwxMjAsOTksOTUsMTAwLDEwMSwxMTYsOTcsMTA1LAotICAgIDEwOCwxMTUsOTAsNSwxMDksOTcsMTAzLDEwNSw5OSw5MCwxMywxMTQsOTcsMTE5LDk1LDExNiwKLSAgICAxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsOTAsOCwxMTQsOTcsMTE5LDk1LDExNSwxMDUsCi0gICAgMTIyLDEwMSwxMTQsMTUyLDAsMCwwLDIxOCwxMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMjE4LDExLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDEwNSwKLSAgICAxMjIsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKLSAgICAwLDIxOCwyNSw5NSwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMDQsMTAxLDk3LDEwMCwxMDEsMTE0LDg3LDIsMCwwLAotICAgIDExNSw3NiwwLDAsMCwwLDExLDYsMSwxMiwxLDEzLDMsNiwxLDEyLAotICAgIDEsMTMsMSwxNiwxLDE2LDEsMTYsMSwxMiwxLDE4LDEsMTMsMSwxOCwKLSAgICAxLDE4LDEsMTUsMSwxMywxLDE1LDEsMTgsMSwxNSwxLDEzLDEsMTUsCi0gICAgMSwxMiwxLDMsMSwyMCwxLDEzLDEsNSwyLDE4LDEsMTUsMSwxMywKLSAgICAxLDE4LDEsMywxLDE4LDEsMTMsMSw1LDIsMTgsMSwxNSwxLDE1LAotICAgIDEsMTE0LDE5MSwwLDAsMCw5OSw0LDAsMCwwLDAsMCwwLDAsNSwKLSAgICAwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxMTUsMCwwLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNCwwLDExNiwKLSAgICAyLDAsMTI0LDQsMCwxMTYsMywwLDEzMSwyLDAsMTE0LDc4LDAsMTE2LDQsCi0gICAgMCwxMDAsMSwwLDEyNCwyLDAsMTMxLDIsMCwxLDEyNCwzLDAsMTAwLDIsCi0gICAgMCwxMDcsOSwwLDExNCw3NCwwLDExNiw1LDAsMTA2LDYsMCwxMjQsNCwwLAotICAgIDEyNCwzLDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LDQsMCw4MywxMTYsNywKLSAgICAwLDEwMCwzLDAsMTA2LDgsMCwxMjQsMiwwLDEzMSwxLDAsMTAwLDQsMCwKLSAgICAxMjQsMSwwLDEwMCw1LDAsMTI0LDIsMCwxMzEsMSwyLDEzMCwxLDAsMTAwLAotICAgIDIsMCw4Myw0MSw2LDEyMiw2MCw2NywxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiw5NywxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwKLSAgICAxMTAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTUsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsCi0gICAgOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTA0LDEwMSw5NywxMDAsMTAxLDExNCwKLSAgICA0MCw0MSw0NiwxMjIsMjEsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LAotICAgIDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw3OCwxMjIsMjMsNzgsMTExLDExMCwKLSAgICA0NSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwzMiwKLSAgICAxMjMsMzMsMTE0LDEyNSwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDQxLDksCi0gICAgMjE4LDcsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCw5MCw1LDEwOCwxMTEsOTcsMTAwLDExNSwKLSAgICAyMTgsMTAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwyMTgsMTAsOTUsOTksCi0gICAgMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNCwxNTMsMCwwLDAsMTE0LDEwNiwwLAotICAgIDAsMCw5MCwxNiw5NSwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsOTUsMTAyLDEwNSwxMDgsMTAxLAotICAgIDExMCw5NywxMDksMTAxLDExNCwxNTQsMCwwLDAsMTE0LDQ3LDAsMCwwLDQxLDUsCi0gICAgMTE0LDUzLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMTQxLDAsMCwwLDExNCwKLSAgICAxNDIsMCwwLDAsMjE4LDQsOTksMTExLDEwMCwxMDEsMTE0LDQsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LDk5LDExMSwxMDksMTEyLAotICAgIDEwNSwxMDgsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDE0MiwyLDAsMCwKLSAgICAxMTUsMTYsMCwwLDAsMCwyLDE1LDEsMTUsMSwxMywxLDEyLDEsMTksCi0gICAgMSw0LDIsMTgsMSwxMTQsMTk2LDAsMCwwLDExNCw4NCwwLDAsMCw5OSwKLSAgICAzLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw3NiwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTMxLAotICAgIDEsMCwxMjUsMywwLDEyNCwzLDAsMTA2LDIsMCwxMTYsMywwLDEyNCwxLAotICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDMsMCwxMDYsMiwwLDExNiwzLAotICAgIDAsMTI0LDIsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMjQsMywwLDEwNiwyLAotICAgIDAsMTE2LDQsMCwxMDYsNSwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMSwwLAotICAgIDEsMTI0LDMsMCw4Myw0MSwxLDEyMiw4MCw2NywxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwKLSAgICAzMiw5NywzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTA1LAotICAgIDExMCwxMTYsMTExLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMTEsMTE0LAotICAgIDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsMTE3LDExNiwzMiwxMTYsMTExLDMyLAotICAgIDk3LDMyLDk4LDEyMSwxMTYsMTAxLDQ1LDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDEwMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsNDEsNiwyMTgsOSw5OCwxMjEsMTE2LAotICAgIDEwMSw5NywxMTQsMTE0LDk3LDEyMSwxMTQsMTg2LDAsMCwwLDIxOCw2LDEwMSwxMjAsMTE2LAotICAgIDEwMSwxMTAsMTAwLDExNCwxNywwLDAsMCwxMTQsMTkyLDAsMCwwLDkwLDUsMTAwLAotICAgIDExNywxMDksMTEyLDExNSw0MSw0LDExNCwxOTUsMCwwLDAsMTE0LDE4NCwwLDAsMCwKLSAgICAxMTQsMTkwLDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgOTUsMTE2LDExMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxNTQsMiwwLDAsCi0gICAgMTE1LDEwLDAsMCwwLDAsMywxMiwxLDE5LDEsMTksMSwyMiwxLDExNCwKLSAgICAxOTksMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwwLAotICAgIDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsODksMCwwLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEwOCwwLDAsMTI1LDEsMCwxMTYsMSwwLDEwNiwyLDAsCi0gICAgMTI0LDAsMCwxMzEsMSwwLDEwNiwzLDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwKLSAgICA0LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsMTE2LDEsMCwxMDYsNSwKLSAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMzEsMiwwLDEyNSw0LDAsMTI0LDQsMCwKLSAgICAxMDYsNiwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywwLDEwMCwxLDAsMjUsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDgzLDQxLDQsMTIyLDEyMSw2OCwxMDEsOTksMTExLDEwMCwKLSAgICAxMDEsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsCi0gICAgMTE2LDEwNSwxMTAsMTAzLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsCi0gICAgMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTE2LDExNCwxMDUsMTEwLDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NSwxMTAsMTA1LAotICAgIDExOCwxMDEsMTE0LDExNSw5NywxMDgsMzIsMTEwLDEwMSwxMTksMTA4LDEwNSwxMTAsMTAxLDMyLDExNSwKLSAgICAxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDUsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDEwMCwxMDUsMTEwLDEwMyw0NiwxMCwKLSAgICAzMiwzMiwzMiwzMiwxMTQsODQsMCwwLDAsNzgsODQsNDEsNywyMTgsOCwxMTYsCi0gICAgMTExLDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNCw0OSwwLDAsMCw5MCw3LDY2LDEyMSwKLSAgICAxMTYsMTAxLDExNSw3Myw3OSw5MCw4LDExNCwxMDEsOTcsMTAwLDEwOCwxMDUsMTEwLDEwMSw5MCwKLSAgICAxNSwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDk1LDEwMSwxMTAsOTksMTExLDEwMCwxMDUsMTEwLDEwMywKLSAgICA5MCwyNSw3MywxMTAsOTksMTE0LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTA4LDc4LDEwMSwxMTksCi0gICAgMTA4LDEwNSwxMTAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMjE4LDYsMTAwLDEwMSw5OSwKLSAgICAxMTEsMTAwLDEwMSw0MSw1LDIxOCwxMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTQsMjAwLDAsMCwwLDkwLDIxLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDExNCwxMDEsOTcsMTAwLDEwOCwxMDUsMTEwLDEwMSwyMTgsCi0gICAgOCwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsOTAsMTUsMTEwLDEwMSwxMTksMTA4LDEwNSwKLSAgICAxMTAsMTAxLDk1LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMywxMDAsMTAxLDk5LDExMSwxMDAsCi0gICAgMTAxLDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTY0LDIsMCwwLDExNSwxMCwwLDAsCi0gICAgMCwwLDUsMTIsMSwxOCwxLDE1LDEsMTgsMSwxMTQsMjA0LDAsMCwwLAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDM1LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSwxNSwxLDAsMCwxMTYsMCwwLDEyNCwwLDAsCi0gICAgMTAwLDEsMCwxMDAsMCwwLDEzMSwzLDAsMTI1LDEsMCwxMTYsMSwwLDEyNCwKLSAgICAxLDAsMTAwLDIsMCwxMzEsMiwwLDExNCw3NCwwLDEyMSwxNywwLDEyNCwxLAotICAgIDAsMTA2LDIsMCwxMjQsMCwwLDEzMSwxLDAsODMsODcsMTEzLDc0LDAsNCwKLSAgICAxMTYsMywwLDEwNywxMCwwLDExNCw3MCwwLDEsMSwxLDg5LDExMyw3NCwwLAotICAgIDg4LDExMCwwLDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNSwyLDAsCi0gICAgODcsMTEwLDE4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwxMDcsMCwxLDEsCi0gICAgMSw4OSwxMTAsMjksMCw4OCwxMjQsMiwwLDEwMCwwLDAsMTA3LDksMCwxMTQsCi0gICAgMTM2LDAsMTE2LDYsMCwxMjQsMiwwLDEzMSwxLDAsMTA2LDIsMCwxMzEsMCwKLSAgICAwLDgzLDEyMSwxMywwLDEyNCwwLDAsMTA2LDcsMCwxMjUsMywwLDg3LDExMCwKLSAgICAyNCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTc1LDAsMSwxLDEsMTAwLAotICAgIDMsMCwxMjUsMywwLDg5LDExMCwxLDAsODgsMTIxLDEzLDAsMTI0LDAsMCwKLSAgICAxMDYsOCwwLDEyNSw0LDAsODcsMTEwLDU5LDAsNCwxMTYsNSwwLDEwNywxMCwKLSAgICAwLDExNCwyNTAsMCwxLDEsMSwxMjQsMSwwLDEwMCwwLDAsMTA3LDgsMCwKLSAgICAxMTQsMjMwLDAsMTAwLDQsMCwxMDYsOSwwLDEyNCwzLDAsMTMxLDEsMCw4MywKLSAgICAxMDAsNSwwLDEwNiw5LDAsMTI0LDMsMCwxMjQsMSwwLDEzMSwyLDAsODMsCi0gICAgODksMTEwLDE3LDAsODgsMTAwLDYsMCwxMDYsOSwwLDEyNCwzLDAsMTI0LDQsCi0gICAgMCwxMzEsMiwwLDgzLDEwMCwwLDAsODMsNDEsNyw3OCwyMTgsMTAsOTUsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwyMTgsMTEsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTE0LDEwMSwxMTIsMTE0LDI1MCwxLDYzLDEyMiwxMyw2MCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMjAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDMzLDExNCwxMjUsNDEsNjIsMTIyLDIzLDYwLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDEwMiwxMTQsMTExLDEwOSwKLSAgICAzMiwxMjMsMzMsMTE0LDEyNSw2Miw0MSwxMCwxMTQsNjIsMCwwLDAsMTE0LDYwLDAsCi0gICAgMCwwLDExNCwyMDYsMCwwLDAsMjE4LDksNjksMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDIxOCw4LDk1LDk1LDExNSwxMTIsMTAxLDk5LDk1LDk1LDIxOCwxNCw2NSwxMTYsCi0gICAgMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCwxNzUsMCwwLAotICAgIDAsMTE0LDU3LDAsMCwwLDIxOCw4LDk1LDk1LDEwMiwxMDUsMTA4LDEwMSw5NSw5NSwKLSAgICAxMTQsNDcsMCwwLDAsNDEsNSwxMTQsMTgwLDAsMCwwLDExNCwxNzAsMCwwLAotICAgIDAsMTE0LDE3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDEzMSwwLDAsMCwKLSAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCi0gICAgMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDE3OCwyLDAsCi0gICAgMCwxMTUsNDYsMCwwLDAsMCwyLDE4LDEsMTUsNCwzLDEsMTcsMSwKLSAgICAxMywxLDgsMSwzLDEsMTMsMSwxMywxLDUsMiwxMiwxLDE2LDQsCi0gICAgMywxLDEzLDEsMTMsMSwxMSwxLDMsMSwxMywxLDEzLDEsMTIsMSwKLSAgICAxMywyLDIxLDIsMTE0LDIxMiwwLDAsMCw5OSwwLDAsMCwwLDAsMCwKLSAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw1MiwKLSAgICAwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCi0gICAgMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLDAsMTAwLDMsMCwxMDAsNCwKLSAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLAotICAgIDkwLDUsMCwxMDAsNywwLDgzLDQxLDgsMjE4LDE3LDk1LDEwNSwxMTAsMTE1LDExNiwKLSAgICA5NywxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwyNSwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEyNCwKLSAgICAxLDAsMTA2LDEsMCwxMjQsMCwwLDk1LDIsMCwxMDAsMCwwLDgzLDQxLAotICAgIDEsNzgsNDEsMywyMTgsNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsMjA5LDAsCi0gICAgMCwwLDIxOCw1LDk1LDExNSwxMTIsMTAxLDk5LDQxLDIsMTE0LDcxLDAsMCwwLAotICAgIDExNCwxODAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDUsMCwwLDAsMTE0LDcyLDAsMCwwLDIxNiwyLDAsMCwxMTUsNCwwLAotICAgIDAsMCwwLDEsOSwxLDEyMiwyNiw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwKLSAgICAxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDM4LDAsMCwwLDEwMCwxLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDk1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTE2LDMsCi0gICAgMCwxMDYsNCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsNSwwLDYwLDEwMCwwLAotICAgIDAsODMsNDEsMiw3OCw4NCw0MSw2LDExNCwyMTUsMCwwLDAsMjE4LDEzLDk1LAotICAgIDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTA1LDExMCwxMDMsMTE0LDIxNCwwLDAsCi0gICAgMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LDY3LDAsMCwwLAotICAgIDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKLSAgICAwLDExNCw1LDAsMCwwLDExNCw3NSwwLDAsMCwyMjAsMiwwLDAsMTE1LAotICAgIDQsMCwwLDAsMCw0LDEyLDEsMTIyLDI3LDk1LDEwNSwxMTAsMTE1LDExNiw5NywKLSAgICAxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTEwLAotICAgIDExNiwxMDEsMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsCi0gICAgMCwwLDE3LDAsMCwwLDcxLDAsMCwwLDExNSwxMjEsMCwwLDAsMTIyLAotICAgIDEwMSwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMiwwLDExNiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzMiwwLDAsMTI0LDEsMCw2OCwxMzEsMSwwLDEzMSwxLAotICAgIDAsMTE0LDc4LDAsMTIxLDE3LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwyLDAsCi0gICAgMTA2LDQsMCw2MSw4NywxMTMsMTAwLDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwKLSAgICA3NCwwLDEsMSwxLDg5LDExMywxMDAsMCw4OCwxMTAsMjIsMCwxMTYsNiwwLAotICAgIDEwMCwzLDAsMTI0LDIsMCwxMDYsNCwwLDEyNCwyLDAsMTA2LDcsMCwxMzEsCi0gICAgMywwLDEsODcsMTAwLDAsMCwxMDAsNCwwLDEyNCwwLDAsMTA2LDAsMCwKLSAgICA5NSw4LDAsODgsMTAwLDAsMCw4Myw0MSw1LDc4LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMTE1LDAsMCwwLAotICAgIDExNSwyNywwLDAsMCwxMjQsMCwwLDkzLDE3LDAsMTI1LDEsMCwxMjQsMSwKLSAgICAwLDEwMCwwLDAsMTA3LDksMCw4NiwxLDExMywzLDAsMTAwLDAsMCw4MywKLSAgICA0MSwxLDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDExNCwKLSAgICA3NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKLSAgICAwLDAsMCwxMTQsNzcsMCwwLDAsMjMwLDIsMCwwLDExNSwyLDAsMCwKLSAgICAwLDYsMCwxMjIsNDUsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwKLSAgICAxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw0NiwKLSAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsCi0gICAgMTE0LDYyLDEyMiwxOCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMjMsMzMsMTE0LDEyNSwzMiwKLSAgICAzNSwzMiwxMjMsMzMsMTE0LDEyNSw3MCw0MSw5LDExNCwyMTUsMCwwLDAsMTE0LDc4LAotICAgIDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywwLDAsMCwxMTQsNjcsMCwKLSAgICAwLDAsMTE0LDc5LDAsMCwwLDExNCwxNTMsMCwwLDAsMTE0LDE3MCwwLDAsCi0gICAgMCwxMTQsMjE2LDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwwLDExNCw4MCwwLAotICAgIDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKLSAgICAwLDExNCw1LDAsMCwwLDExNCw4MSwwLDAsMCwyMjcsMiwwLDAsMTE1LAotICAgIDE4LDAsMCwwLDAsMSwzLDEsOSwxLDI1LDEsMywxLDE3LDEsCi0gICAgMTMsMSw4LDIsMjYsMiwxMjIsMjYsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsCisgICAgMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDEzNiwwLDAsMTI0LDAsCisgICAgMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMyw3OCwxMjIsMjcsMTIzLDMzLDExNCwKKyAgICAxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLAorICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsMTUsMCwwLDAsNDEsNCwxMTQsCisgICAgNTcsMCwwLDAsMjE4LDksMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTQsCisgICAgNzcsMCwwLDAsMTE0LDUwLDAsMCwwLDQxLDIsMTE0LDE5LDAsMCwwLAorICAgIDExNCw3OCwwLDAsMCw0MSwxLDExNCw3OSwwLDAsMCwxMTQsMTAsMCwwLAorICAgIDAsMTE0LDExLDAsMCwwLDIxOCwyNCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCisgICAgMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LAorICAgIDI0NiwwLDAsMCwxMTUsOCwwLDAsMCwwLDEsMTUsMSwxOCwxLDksCisgICAgMSwxMjIsNTAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwKKyAgICAxMjIsMTAxLDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwKKyAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTksMTE0LAorICAgIDk3LDExMiwxMTIsMTAxLDExNCw0MSwxLDExNCwxMiwwLDAsMCw0MSwyLDExNCw3OSwKKyAgICAwLDAsMCwxMTQsODMsMCwwLDAsMTE0LDEwLDAsMCwwLDQxLDEsMTE0LAorICAgIDc5LDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsMTYsOTUsMTE0LDEwMSwxMTMsMTE3LAorICAgIDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwyNDQsMCwwLDAsMTE1LAorICAgIDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwxMTQsODQsMCwwLDAsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsODEsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEyNCwKKyAgICAwLDAsMTMxLDIsMCwxMjUsMiwwLDEyNCwxLDAsMTE2LDEsMCwxMDYsMiwKKyAgICAwLDEwNyw2LDAsMTE0LDY3LDAsMTE2LDEsMCwxMDYsMiwwLDEyNCwxLDAsCisgICAgMjUsMTI1LDMsMCwxMTYsMywwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMiwwLAorICAgIDEsMTE2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMjUsODMsMTE2LDQsMCwxMjQsCisgICAgMiwwLDEzMSwxLDAsODMsMTAwLDEsMCw4Myw0MSwyLDEyMiwxMjgsNzYsMTExLAorICAgIDk3LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSwKKyAgICA0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwKKyAgICAxMTcsMTE0LDExMCwzMiwxMDUsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsCisgICAgMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LAorICAgIDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCisgICAgMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsNDEsCisgICAgNSwyMTgsMTYsMTE1LDExMiwxMDEsOTksOTUsMTAyLDExNCwxMTEsMTA5LDk1LDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsMTE0LDE0LDAsMCwwLDExNCwyMSwwLDAsMCwyMTgsNSw5NSwKKyAgICAxMDEsMTIwLDEwMSw5OSwyMTgsNSw5NSwxMDgsMTExLDk3LDEwMCw0MSw0LDExNCwxOSwwLAorICAgIDAsMCwxMTQsNzgsMCwwLDAsMjE4LDQsMTE1LDExMiwxMDEsOTksMjE4LDYsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTEsMCwwLDAsMjE4LDE3LDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk1LDExNSwxMDQsMTA1LDEwOSwwLDEsMCwwLDExNSwxMiwwLDAsMCwKKyAgICAwLDYsMTUsMSwxNSwxLDEzLDEsMTMsMSwxMSwyLDExNCw5MCwwLDAsCisgICAgMCw5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwzNSwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNiwxLDAsMCwxMTYsMCwwLDEyNCwwLAorICAgIDAsMTAwLDEsMCwxMDAsMCwwLDEzMSwzLDAsMTI1LDEsMCwxMTYsMSwwLAorICAgIDEyNCwxLDAsMTAwLDIsMCwxMzEsMiwwLDExNCw3MSwwLDEyMSwxNywwLDEyNCwKKyAgICAxLDAsMTA2LDIsMCwxMjQsMCwwLDEzMSwxLDAsODMsODcsMTEwLDE4LDAsCisgICAgNCwxMTYsMywwLDEwNywxMCwwLDExNCw3MCwwLDEsMSwxLDg5LDExMCwxLAorICAgIDAsODgsMTIxLDEzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNSwyLDAsODcsMTEwLAorICAgIDE4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwKKyAgICAxMTAsMjMsMCw4OCwxMjQsMiwwLDEwMCwwLDAsMTA3LDksMCwxMTQsMTI3LDAsCisgICAgMTE2LDYsMCwxMjQsMiwwLDEzMSwxLDAsODMsMTIxLDEzLDAsMTI0LDAsMCwKKyAgICAxMDYsNywwLDEyNSwzLDAsODcsMTEwLDI0LDAsNCwxMTYsNSwwLDEwNywxMCwKKyAgICAwLDExNCwxNjYsMCwxLDEsMSwxMDAsMywwLDEyNSwzLDAsODksMTEwLDEsCisgICAgMCw4OCwxMjEsMTMsMCwxMjQsMCwwLDEwNiw4LDAsMTI1LDQsMCw4NywxMTAsCisgICAgNTksMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDI0MSwwLDEsMSwxLDEyNCwKKyAgICAxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMjEsMCwxMDAsNCwwLDEwNiw5LAorICAgIDAsMTI0LDMsMCwxMzEsMSwwLDgzLDEwMCw1LDAsMTA2LDksMCwxMjQsMywKKyAgICAwLDEyNCwxLDAsMTMxLDIsMCw4Myw4OSwxMTAsMTcsMCw4OCwxMDAsNiwwLAorICAgIDEwNiw5LDAsMTI0LDMsMCwxMjQsNCwwLDEzMSwyLDAsODMsMTAwLDAsMCwKKyAgICA4Myw0MSw3LDc4LDIxOCwxMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAorICAgIDIxOCwxMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMjUwLDEsNjMsCisgICAgMTIyLDEzLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDYyLDEyMiwKKyAgICAyMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCwxMjMsCisgICAgMzMsMTE0LDEyNSw0MSw2MiwxMjIsMjMsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLAorICAgIDMzLDExNCwxMjUsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDYyLDQxLDEwLAorICAgIDExNCw2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw5MiwwLDAsMCwyMTgsCisgICAgOSw2OSwxMjAsOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsMjE4LDgsOTUsOTUsMTE1LDExMiwKKyAgICAxMDEsOTksOTUsOTUsMjE4LDE0LDY1LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw2OSwKKyAgICAxMTQsMTE0LDExMSwxMTQsMjE4LDIyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsCisgICAgMTEyLDExNCw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMiwxMDEsOTksMTE0LDEsMCwwLAorICAgIDAsMjE4LDgsOTUsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDk1LDExNCw1MCwwLDAsMCwKKyAgICA0MSw1LDExNCw4OSwwLDAsMCwyMTgsNiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNCwKKyAgICA4OCwwLDAsMCwxMTQsMTUsMCwwLDAsMjE4LDgsMTAyLDEwNSwxMDgsMTAxLDExMCwKKyAgICA5NywxMDksMTAxLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsCisgICAgMCwwLDIxOCwxMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsCisgICAgMTYsMSwwLDAsMTE1LDQ2LDAsMCwwLDAsMiwxOCwxLDE1LDQsMywKKyAgICAxLDE3LDEsMTMsMSw1LDEsMywxLDEzLDEsMTMsMSw1LDIsMTIsCisgICAgMSwxMCw0LDMsMSwxMywxLDEzLDEsMTEsMSwzLDEsMTMsMSwxMywKKyAgICAxLDEyLDEsMTMsMiwyMSwyLDExNCwxMDEsMCwwLDAsOTksMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsCisgICAgMCwxMTUsNTIsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwKKyAgICAyLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMCwzLAorICAgIDAsMTAwLDQsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCw2LDAsCisgICAgMTMyLDAsMCw5MCw1LDAsMTAwLDcsMCw4Myw0MSw4LDIxOCwxNyw5NSwxMDUsCisgICAgMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMjUsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LAorICAgIDAsMCwxMjQsMSwwLDEwNiwxLDAsMTI0LDAsMCw5NSwyLDAsMTAwLDAsCisgICAgMCw4Myw0MSwxLDc4LDQxLDMsMjE4LDcsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMTE0LDk1LDAsMCwwLDIxOCw1LDk1LDExNSwxMTIsMTAxLDk5LDQxLDIsMTE0LDE5LAorICAgIDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsCisgICAgMCwwLDExNCwxMSwwLDAsMCwxMTQsMjAsMCwwLDAsNTQsMSwwLDAsCisgICAgMTE1LDQsMCwwLDAsMCwxLDksMSwxMjIsMjYsOTUsMTA1LDExMCwxMTUsMTE2LAorICAgIDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwNSwKKyAgICAxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAorICAgIDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsMCwxMDAsCisgICAgMSwwLDEyNCwwLDAsMTA2LDAsMCw5NSwxLDAsMTI0LDAsMCwxMDYsMiwKKyAgICAwLDExNiwzLDAsMTA2LDQsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDUsMCwKKyAgICA2MCwxMDAsMCwwLDgzLDQxLDIsNzgsODQsNDEsNiwxMTQsMTA0LDAsMCwwLAorICAgIDIxOCwxMyw5NSwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwNSwxMTAsMTAzLDExNCwKKyAgICAxMDMsMCwwLDAsMTE0LDE0LDAsMCwwLDExNCwyMSwwLDAsMCwxMTQsMTUsCisgICAgMCwwLDAsNDEsMSwxMTQsMTksMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwKKyAgICAxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDIzLDAsMCwwLDU4LDEsCisgICAgMCwwLDExNSw0LDAsMCwwLDAsNCwxMiwxLDEyMiwyNyw5NSwxMDUsMTEwLAorICAgIDExNSwxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsNDYsOTUsCisgICAgOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMywwLDAsMCwxNywwLDAsMCw3MSwwLDAsMCwxMTUsMTIxLDAsCisgICAgMCwwLDEyMiwxMDEsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDIsMCwxMTYsMSwKKyAgICAwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwxLDAsNjgsMTMxLDEsCisgICAgMCwxMzEsMSwwLDExNCw3OCwwLDEyMSwxNywwLDExNiwyLDAsMTA2LDMsMCwKKyAgICAxMjQsMiwwLDEwNiw0LDAsNjEsODcsMTEzLDEwMCwwLDQsMTE2LDUsMCwxMDcsCisgICAgMTAsMCwxMTQsNzQsMCwxLDEsMSw4OSwxMTMsMTAwLDAsODgsMTEwLDIyLDAsCisgICAgMTE2LDYsMCwxMDAsMywwLDEyNCwyLDAsMTA2LDQsMCwxMjQsMiwwLDEwNiwKKyAgICA3LDAsMTMxLDMsMCwxLDg3LDEwMCwwLDAsMTAwLDQsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsOTUsOCwwLDg4LDEwMCwwLDAsODMsNDEsNSw3OCw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwKKyAgICAwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLAorICAgIDAsMTI0LDEsMCwxMDAsMCwwLDEwNyw5LDAsODYsMSwxMTMsMywwLDEwMCwKKyAgICAwLDAsODMsNDEsMSw3OCwxMTQsMTAsMCwwLDAsNDEsMiwxMTQsMjQsMCwKKyAgICAwLDAsMTE0LDI1LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLAorICAgIDAsMTE0LDExLDAsMCwwLDExNCwyNiwwLDAsMCw2OCwxLDAsMCwxMTUsCisgICAgMiwwLDAsMCw2LDAsMTIyLDQ1LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LAogICAgIDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsCi0gICAgOTUsOTUsNzgsNDEsNiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCwKLSAgICA1OCwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDc1LDAsMCwwLDExNCw4MSwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAotICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMjEzLDAsMCwwLDIxNCwyLDAsMCwKLSAgICAxMTUsNiwwLDAsMCwxMiwyLDEyLDQsMTIsNywxMTQsMjEzLDAsMCwwLAotICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgsMCwwLAotICAgIDAsNjQsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwKLSAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwKLSAgICAzLDAsMTAwLDQsMCwxMDAsMywwLDEwMCw1LDAsMTAwLDMsMCwxMDAsNiwKLSAgICAwLDEwMCw3LDAsMTMyLDAsMyw5MCw0LDAsMTAwLDgsMCwxMDAsOSwwLAotICAgIDEzMiwwLDAsOTAsNSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsCi0gICAgNiwwLDEwMSw3LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwKLSAgICAwLDkwLDgsMCwxMDEsOCwwLDEwNiw5LDAsMTAwLDE0LDAsMTAwLDEzLDAsCi0gICAgMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywwLDEwMCwxNSwwLDEwMCwKLSAgICAxNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLDE3LAotICAgIDAsMTAwLDE4LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAxLDExLDAsCi0gICAgMTA2LDksMCwxMDAsMTksMCwxMDAsMTgsMCwxMzIsMCwwLDEzMSwxLDAsOTAsCi0gICAgMTEsMCwxMDAsMywwLDgzLDQxLDIwLDIxOCwxMCw3NywxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDgzLDExMiwxMDEsOTksOTcsMjA4LDUsMCwwLDg0LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsCi0gICAgOTksMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTEsMTE0LDMyLDk3LAotICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICA2NSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTE1LDExMiwxMDEsOTksMzIsCi0gICAgMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDEwNSwxMTAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMDUsMTExLDExMCwzMiw5Nyw5OCwKLSAgICAxMTEsMTE3LDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiwKLSAgICAzMiw3MCwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDEwMCw5NywxMTYsOTcsMzIsOTcsMTE1LAotICAgIDExNSwxMTEsOTksMTA1LDk3LDExNiwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLAotICAgIDEwNSwxMTAsMTAzLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDQsMzIsMTE3LDExNSwxMDEsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzksMTE1LDEwLDMyLDMyLDMyLDMyLDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiw5Nyw5OCwxMTUsMTExLDEwOCwxMTcsCi0gICAgMTE2LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDMyLDMyLDk2LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTYsCi0gICAgMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDEwLDMyLAotICAgIDMyLDMyLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQ2LDMyLDMyLDk2LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTYsMzIsMTA1LDExNSwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDEwNSwxMTAsNDYsMzIsMzIsODQsCi0gICAgMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTQsCi0gICAgMTA1LDExOCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsCi0gICAgMTA5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSw5NiwzMiwxMDAsMTAxLDExNiwxMDEsMTE0LDEwOSwxMDUsMTEwLDEwMSwxMTUsCi0gICAgMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsCi0gICAgMTE1LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwxMDEsMTAwLDMyLDk3LDMyLDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsCi0gICAgMTE2LDQ2LDMyLDMyLDc5LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTE2LAotICAgIDEwNCwxMDUsMTE1LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMDIsMTA4LDEwMSw5OSwxMTYsMTAxLDEwMCwKLSAgICAzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsOTYsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgOTUsOTYsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDk2LDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDk2LDMyLDEwNSwxMTUsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMzIsMTA4LDExMSw5OSw5NywKLSAgICAxMTYsMTA1LDExMSwxMTAsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTksMTA0LDEwNSwKLSAgICA5OSwxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMDUsMTAyLDMyLDExNiwxMDQsCi0gICAgOTcsMTE2LDMyLDEwNSwxMTAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMDUsCi0gICAgMTE1LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwxMDEsNDYsMzIsMzIsODcsMTA0LAotICAgIDEwMSwxMTAsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDEwNSwxMTUsMTAsMzIsCi0gICAgMzIsMzIsMzIsMTE1LDEwMSwxMTYsNDQsMzIsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsMzIsMTE5LAotICAgIDEwNSwxMDgsMTA4LDMyLDEwOSw5NywxMTYsOTksMTA0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDk2LDEwNCw5NywxMTUsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsOTYsMzIsMTA1LAotICAgIDExMCwxMDAsMTA1LDk5LDk3LDExNiwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLDk3LDMyLAotICAgIDExNSwxMTIsMTAxLDk5LDM5LDExNSwzMiwzNCwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzNCwzMiwKLSAgICAxMTQsMTAxLDEwMiwxMDgsMTAxLDk5LDExNiwxMTUsMzIsOTcsMzIsMTA4LDExMSw5OSw5NywxMTYsCi0gICAgMTA1LDExMSwxMTAsNDYsMTAsMzIsMzIsMzIsMzIsODcsMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwKLSAgICAxMDUsMTE1LDMyLDEwNSwxMTUsMzIsODQsMTE0LDExNywxMDEsNDQsMzIsOTYsOTUsOTUsMTAyLAotICAgIDEwNSwxMDgsMTAxLDk1LDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwKLSAgICAzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwKLSAgICAxMTUsMzIsMTE1LDEwMSwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsOTksOTcsOTksCi0gICAgMTA0LDEwMSwxMDAsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk5LDk3LAotICAgIDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICA0NCwzMiwxMDUsMTAyLDMyLDk3LDExMCwxMjEsNDYsMzIsMzIsNzMsMTE2LDEwLDMyLDMyLAotICAgIDMyLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwxMTUsMTEyLDExMSwxMTAsMTAwLDExNSwzMiwxMTYsMTExLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDk2LDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LAotICAgIDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiw5NiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsCi0gICAgMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsOTYsMzIsMTA1LAotICAgIDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMzIsMTExLAotICAgIDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTA1LDEwMSwxMTUsMzIsMTE2LAotICAgIDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE5LDEwNCwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsOTgsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDMyLDMyLDczLDEwMiwzMiwxMTUsMTAxLDExNiw0NCwKLSAgICAzMiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTUsMTA0LDExMSwxMTcsCi0gICAgMTA4LDEwMCwzMiw5OCwxMDEsMTAsMzIsMzIsMzIsMzIsODQsMTE0LDExNywxMDEsNDUsNDUsCi0gICAgOTcsMTEwLDEwMCwzMiw3MCw5NywxMDgsMTE1LDEwMSwzMiwxMTEsMTE2LDEwNCwxMDEsMTE0LDExOSwKLSAgICAxMDUsMTE1LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MCw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsNDAsMTA5LDk3LDEyMSw0MSwKLSAgICAzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwKLSAgICA0NiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsMTE1LDExMiwxMDEsOTksMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA0LDk3LDExNSwzMiw5NywzMiwxMTAsMTExLDExMCw0NSw3OCwxMTEsMTEwLDEwMSwzMiwKLSAgICAxMTgsOTcsMTA4LDExNywxMDEsMzIsMTA1LDExMCwzMiw5NiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwKLSAgICAxMDUsMTExLDExMCwxMTUsOTYsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTAsMzIsMzIsMzIsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsMTE5LDEwNSwxMDgsCi0gICAgMTA4LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE1LDMyLDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzksMTEwLDEwOCwxMjEsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDMyLDQwLDExNSwxMDEsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTcsOTgsOTksNDYsNzcsMTAxLDExNiw5Nyw4MCw5NywKLSAgICAxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk3LDk4LDk5LDQ2LDgwLAotICAgIDk3LDExNiwxMDQsNjksMTEwLDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDEsMzIsCi0gICAgMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMjEsMzIsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDMyLDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksCi0gICAgMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwyMTgsNiwxMTEsMTE0LDEwNSwxMDMsMTA1LAotICAgIDExMCw3OCwyMTgsMTIsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTUsMTE2LDk3LDExNiwxMDEsCi0gICAgMjE4LDEwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDMsMCwwLAotICAgIDAsMywwLDAsMCw2LDAsMCwwLDIsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDc5LDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTI0LAotICAgIDIsMCwxMjQsMCwwLDk1LDEsMCwxMjQsMywwLDEyNCwwLDAsOTUsMiwKLSAgICAwLDEyNCw0LDAsMTI0LDAsMCw5NSwzLDAsMTI0LDUsMCwxMTQsNDgsMCwKLSAgICAxMDMsMCwwLDExMCwzLDAsMTAwLDAsMCwxMjQsMCwwLDk1LDQsMCwxMDAsCi0gICAgMSwwLDEyNCwwLDAsOTUsNSwwLDEwMCwwLDAsMTI0LDAsMCw5NSw2LAotICAgIDAsMTAwLDAsMCw4Myw0MSwyLDc4LDcwLDQxLDcsMTE0LDY3LDAsMCwwLAotICAgIDExNCwxNzAsMCwwLDAsMTE0LDIxOCwwLDAsMCwxMTQsMjE5LDAsMCwwLDIxOCwKLSAgICAyNiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LAotICAgIDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsMjE4LDEzLDk1LDExNSwxMDEsCi0gICAgMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSw5NywxMTYsMTE2LDExNCwyMTgsNyw5NSw5OSw5Nyw5OSwKLSAgICAxMDQsMTAxLDEwMCw0MSw2LDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LAotICAgIDE3MCwwLDAsMCwxMTQsMjE4LDAsMCwwLDExNCwyMTksMCwwLDAsMTE0LDIyMCwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwxMTQsNzIsMCwwLDAsMjIsMywwLDAsMTE1LDE0LDAsMCwwLAotICAgIDAsMiw5LDEsOSwxLDksMSw5LDEsMjEsMyw5LDEsMTIyLDE5LAotICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsMTUzLDAsMCwwLDEwMCwxLDAsCi0gICAgMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMDAsMiwwLDEwNiwKLSAgICAwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwxLDAsMTAzLDIsMCwxMjUsMSwKLSAgICAwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDc5LDAsCi0gICAgMTI0LDEsMCwxMDYsNCwwLDEwMCwzLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwKLSAgICAzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTEwLDAsMCwxMjQsMCwwLDEwNiwKLSAgICA1LDAsMTAwLDAsMCwxMDcsOSwwLDExNCwxMjIsMCwxMjQsMSwwLDEwNiw0LAorICAgIDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwKKyAgICAxMDEsMTIwLDExMiwxMTQsNjIsMTIyLDE4LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEyMywzMywKKyAgICAxMTQsMTI1LDMyLDM1LDMyLDEyMywzMywxMTQsMTI1LDcwLDQxLDksMTE0LDEwNCwwLDAsCisgICAgMCwxMTQsMjcsMCwwLDAsMTE0LDE0LDAsMCwwLDExNCwyMSwwLDAsMCwKKyAgICAxMTQsMTUsMCwwLDAsMTE0LDI4LDAsMCwwLDExNCw3NSwwLDAsMCwxMTQsCisgICAgOTksMCwwLDAsMTE0LDEwNSwwLDAsMCw0MSwzLDExNCwxOSwwLDAsMCwKKyAgICAxMTQsMjksMCwwLDAsMTE0LDg4LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwzMCwwLDAsMCw2NSwxLAorICAgIDAsMCwxMTUsMTgsMCwwLDAsMCwxLDMsMSw5LDEsMjUsMSwzLAorICAgIDEsMTcsMSwxMywxLDgsMiwyNiwyLDEyMiwyNiw5NSwxMDUsMTEwLDExNSwxMTYsCisgICAgOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsNDYsOTUsOTUsMTAxLAorICAgIDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDYsMTE0LDEsMCwwLDAsMTE0LDAsMCwKKyAgICAwLDAsMTE0LDIsMCwwLDAsMTE0LDIwLDAsMCwwLDExNCwyMywwLDAsCisgICAgMCwxMTQsMzAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwKKyAgICAxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwxMDIsMCwwLDAsNTIsCisgICAgMSwwLDAsMTE1LDYsMCwwLDAsMTIsMiwxMiw0LDEyLDcsMTE0LDEwMiwKKyAgICAwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICA4LDAsMCwwLDY0LDAsMCwwLDExNSwxNzIsMCwwLDAsMTAxLDAsMCwKKyAgICA5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLAorICAgIDIsMCwxMDAsMywwLDEwMCw0LDAsMTAwLDMsMCwxMDAsNSwwLDEwMCwzLAorICAgIDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDMsOTAsNCwwLDEwMCw4LDAsCisgICAgMTAwLDksMCwxMzIsMCwwLDkwLDUsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsCisgICAgMCwwLDkwLDYsMCwxMDEsNywwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLAorICAgIDAsMTMxLDEsMCw5MCw4LDAsMTAxLDgsMCwxMDYsOSwwLDEwMCwxNCwwLAorICAgIDEwMCwxMywwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDcsMCwxMDAsCisgICAgMTUsMCwxMDAsMTYsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNywKKyAgICAwLDEwMCwxNywwLDEwMCwxOCwwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMSwwLAorICAgIDEwMSwxMSwwLDEwNiw5LDAsMTAwLDE5LDAsMTAwLDE4LDAsMTMyLDAsMCwxMzEsCisgICAgMSwwLDkwLDExLDAsMTAwLDMsMCw4Myw0MSwyMCwyMTgsMTAsNzcsMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDk3LDIwOCw1LDAsMCw4NCwxMDQsMTAxLDMyLAorICAgIDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMDIsMTExLAorICAgIDExNCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTcsMTE1LDEwMSwxMDAsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywxMDAsMTA1LDExMCwxMDMsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsNjUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExNSwxMTIsCisgICAgMTAxLDk5LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICAzMiwxMDIsMTExLDExNCwzMiwxMDUsMTEwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTA1LDExMSwxMTAsCisgICAgMzIsOTcsOTgsMTExLDExNywxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDYsMzIsMzIsNzAsMTExLDExNCwxMCwzMiwzMiwzMiwzMiwxMDAsOTcsMTE2LDk3LAorICAgIDMyLDk3LDExNSwxMTUsMTExLDk5LDEwNSw5NywxMTYsMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsMTA1LDExMCw5OSwKKyAgICAxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDQ0LDMyLDExNywKKyAgICAxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDM5LDExNSwxMCwzMiwzMiwKKyAgICAzMiwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk2LAorICAgIDExMCw5NywxMDksMTAxLDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsOTcsOTgsMTE1LAorICAgIDExMSwxMDgsMTE3LDExNiwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiwzMiw5NiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLAorICAgIDExNCwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDExOSwxMDQsMTAxLAorICAgIDExMCwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw0NiwzMiwzMiw5NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk2LDMyLAorICAgIDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwxMTYsCisgICAgMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMDUsMTEwLDQ2LAorICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLAorICAgIDEwMCwxMDEsMTE0LDEwNSwxMTgsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTA1LDExNSw5NSwKKyAgICAxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTYsMzIsMTAwLDEwMSwxMTYsMTAxLDExNCwxMDksMTA1LAorICAgIDExMCwxMDEsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsMTAxLDEwMCwzMiwKKyAgICA5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTExLDExNCwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMTAsMTExLDExNiw0NiwzMiwzMiw3OSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMTE1LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTAyLDEwOCwxMDEsOTksCisgICAgMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDk2LDk1LDk1LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCw5NiwzMiwxMDUsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDMyLDEwOCwKKyAgICAxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNywxMTUsMTAxLDEwMCwzMiw5OCwxMjEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCisgICAgMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsMTA1LDEwMiwKKyAgICAzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTEwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsMzIsMTA1LDExNSwzMiw5NywxMTgsOTcsMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLDQ2LDMyLAorICAgIDMyLDg3LDEwNCwxMDEsMTEwLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMDUsCisgICAgMTE1LDEwLDMyLDMyLDMyLDMyLDExNSwxMDEsMTE2LDQ0LDMyLDExMSwxMTQsMTA1LDEwMywxMDUsCisgICAgMTEwLDMyLDExOSwxMDUsMTA4LDEwOCwzMiwxMDksOTcsMTE2LDk5LDEwNCw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw5NiwxMDQsOTcsMTE1LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDk2LDMyLDEwNSwxMTAsMTAwLDEwNSw5OSw5NywxMTYsMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwKKyAgICAzMiw5NywzMiwxMTUsMTEyLDEwMSw5OSwzOSwxMTUsMzIsMzQsMTExLDExNCwxMDUsMTAzLDEwNSwKKyAgICAxMTAsMzQsMzIsMTE0LDEwMSwxMDIsMTA4LDEwMSw5OSwxMTYsMTE1LDMyLDk3LDMyLDEwOCwxMTEsCisgICAgOTksOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDEwLDMyLDMyLDMyLDMyLDg3LDEwNCwxMDEsMTEwLAorICAgIDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDUsMTE1LDMyLDg0LDExNCwxMTcsMTAxLDQ0LDMyLDk2LAorICAgIDk1LDk1LDEwMiwxMDUsMTA4LDEwMSw5NSw5NSw5NiwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsCisgICAgMTE3LDExNiwxMDEsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMDUsMTE1LDMyLDExNSwxMDEsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk2LAorICAgIDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LAorICAgIDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDEwMCwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsCisgICAgMTA1LDEwOCwxMDEsNDQsMzIsMTA1LDEwMiwzMiw5NywxMTAsMTIxLDQ2LDMyLDMyLDczLDExNiwKKyAgICAxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsMTEwLDEwMCwxMTUsCisgICAgMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiw5Niw5NSw5NSw5OSw5Nyw5OSwxMDQsMTAxLAorICAgIDEwMCw5NSw5NSw5NiwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsOTYsMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKKyAgICAxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LAorICAgIDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksCisgICAgMTAxLDMyLDExMSwxMDIsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEwNSwxMDEsCisgICAgMTE1LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE1LDEwMSw5NywxMTQsOTksMTA0LDMyLAorICAgIDExOSwxMDQsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMywzMiwxMTUsCisgICAgMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwzMiwzMiw3MywxMDIsMzIsMTE1LAorICAgIDEwMSwxMTYsNDQsMzIsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE1LAorICAgIDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDEwLDMyLDMyLDMyLDMyLDg0LDExNCwxMTcsCisgICAgMTAxLDQ1LDQ1LDk3LDExMCwxMDAsMzIsNzAsOTcsMTA4LDExNSwxMDEsMzIsMTExLDExNiwxMDQsCisgICAgMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODAsOTcsOTksCisgICAgMTA3LDk3LDEwMywxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLDQwLDEwOSwKKyAgICA5NywxMjEsNDEsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTUsNDYsMzIsMzIsNzMsMTAyLDMyLDk3LDMyLDExNSwxMTIsMTAxLDk5LDEwLAorICAgIDMyLDMyLDMyLDMyLDEwNCw5NywxMTUsMzIsOTcsMzIsMTEwLDExMSwxMTAsNDUsNzgsMTExLAorICAgIDExMCwxMDEsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTAsMzIsOTYsMTE1LDExNyw5OCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSwKKyAgICA5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDk2LDQ0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLAorICAgIDExOSwxMDUsMTA4LDEwOCwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsMTAyLDExNCwxMTEsCisgICAgMTA5LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDMyLDk3LDExNSwzMiwxMTIsOTcsCisgICAgOTksMTA3LDk3LDEwMywxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc5LDExMCwxMDgsCisgICAgMTIxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNSwzMiw0MCwxMTUsMTAxLDEwMSwzMiwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk3LDk4LDk5LDQ2LDc3LDEwMSwxMTYsCisgICAgOTcsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMTAsCisgICAgMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5Nyw5OCwKKyAgICA5OSw0Niw4MCw5NywxMTYsMTA0LDY5LDExMCwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTIxLAorICAgIDMyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSwzMiwxMDUsMTEwLDExNSwxMTYsCisgICAgOTcsMTEwLDk5LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMjE4LDYsMTExLDExNCwKKyAgICAxMDUsMTAzLDEwNSwxMTAsNzgsMjE4LDEyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE1LDExNiwKKyAgICA5NywxMTYsMTAxLDIxOCwxMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwKKyAgICAzLDAsMCwwLDMsMCwwLDAsNiwwLDAsMCwyLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw3OSwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsCisgICAgMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTI0LDMsMCwxMjQsMCwKKyAgICAwLDk1LDIsMCwxMjQsNCwwLDEyNCwwLDAsOTUsMywwLDEyNCw1LDAsCisgICAgMTE0LDQ4LDAsMTAzLDAsMCwxMTAsMywwLDEwMCwwLDAsMTI0LDAsMCw5NSwKKyAgICA0LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDUsMCwxMDAsMCwwLDEyNCwwLAorICAgIDAsOTUsNiwwLDEwMCwwLDAsODMsNDEsMiw3OCw3MCw0MSw3LDExNCwxNSwKKyAgICAwLDAsMCwxMTQsOTksMCwwLDAsMTE0LDEwNywwLDAsMCwxMTQsMTA4LDAsCisgICAgMCwwLDIxOCwyNiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsCisgICAgOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsMjE4LDEzLAorICAgIDk1LDExNSwxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSw5NywxMTYsMTE2LDExNCwyMTgsNyw5NSwKKyAgICA5OSw5Nyw5OSwxMDQsMTAxLDEwMCw0MSw2LDExNCwxOSwwLDAsMCwxMTQsMTUsMCwKKyAgICAwLDAsMTE0LDk5LDAsMCwwLDExNCwxMDcsMCwwLDAsMTE0LDEwOCwwLDAsCisgICAgMCwxMTQsMTA5LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsCisgICAgMTE0LDExLDAsMCwwLDExNCwyMCwwLDAsMCwxMTYsMSwwLDAsMTE1LDE0LAorICAgIDAsMCwwLDAsMiw5LDEsOSwxLDksMSw5LDEsMjEsMyw5LAorICAgIDEsMTIyLDE5LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0Niw5NSw5NSwKKyAgICAxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDIsCisgICAgMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTQ3LDAsMCwwLAorICAgIDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMDAsCisgICAgMiwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwxLDAsMTAzLDIsCisgICAgMCwxMjUsMSwwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMCwwLDEwNyw5LDAsCisgICAgMTE0LDc2LDAsMTI0LDEsMCwxMDYsNCwwLDEwMCwzLDAsMTA2LDAsMCwxMjQsCisgICAgMCwwLDEwNiwzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDAsMCwxMDYsCisgICAgNSwwLDEwMCwwLDAsMTA3LDksMCwxMTQsMTE2LDAsMTI0LDEsMCwxMDYsNCwKICAgICAwLDEwMCw0LDAsMTA2LDAsMCwxMjQsMCwwLDEwNiw1LDAsMTMxLDEsMCwKLSAgICAxMzEsMSwwLDEsMTEwLDAsMCwxMDAsNSwwLDEwNiwwLDAsMTI0LDAsMCwKLSAgICAxMDYsNiwwLDEwNiw3LDAsMTAwLDYsMCwxMDYsOCwwLDEyNCwxLDAsMTMxLAotICAgIDEsMCwxMzEsMiwwLDgzLDQxLDcsNzgsMTIyLDksMTEwLDk3LDEwOSwxMDEsNjEsCi0gICAgMTIzLDMzLDExNCwxMjUsMTIyLDExLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNjEsMTIzLDMzLDExNCwKLSAgICAxMjUsMTIyLDExLDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDYxLDEyMywzMywxMTQsMTI1LDEyMiwyOSwKLSAgICAxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsNjEsMTIzLDEyNSwxMjIsNiwxMjMsCi0gICAgMTI1LDQwLDEyMywxMjUsNDEsMTIyLDIsNDQsMzIsNDEsOSwxMTQsNDcsMCwwLDAsCi0gICAgMTE0LDY3LDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDIxOCwwLDAsMCwyMTgsCi0gICAgNiw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNCwyMjEsMCwwLDAsMjE4LDksOTUsOTUsCi0gICAgOTksMTA4LDk3LDExNSwxMTUsOTUsOTUsMTE0LDU3LDAsMCwwLDExNCwyNiwwLDAsCi0gICAgMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsODAsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsCi0gICAgMCwzNCwzLDAsMCwxMTUsMTYsMCwwLDAsMCwxLDE1LDEsMjEsMSwKLSAgICAxNSwxLDI4LDEsMTUsMSwxMiwxLDE2LDEsMTIyLDE5LDc3LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0Niw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDE0NSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LAotICAgIDIsMCwxMjEsMTA3LDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTA2LDEsCi0gICAgMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDEsMCwKLSAgICAxMDYsMiwwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LDMsMCwxMjQsCi0gICAgMSwwLDEwNiwzLDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDIsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwxMDYsNCwwLAotICAgIDEyNCwxLDAsMTA2LDQsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMCwwLDEwNiwKLSAgICA1LDAsMTI0LDEsMCwxMDYsNSwwLDEwNywyLDAsODMsODcsMTEwLDIyLDAsCi0gICAgNCwxMTYsNiwwLDEwNywxMCwwLDExNCwxNDAsMCwxLDEsMSwxMDAsMSwwLAotICAgIDgzLDg5LDExMCwxLDAsODgsMTAwLDAsMCw4Myw0MSwyLDc4LDcwLDQxLDcsCi0gICAgMTE0LDIyMSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsCi0gICAgMjE4LDAsMCwwLDIxOCw2LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDIxOCwxMiwxMDQsOTcsCi0gICAgMTE1LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNCwyMTAsMCwwLDAsNDEsCi0gICAgMywxMTQsNzEsMCwwLDAsMjE4LDUsMTExLDExNiwxMDQsMTAxLDExNCwyMTgsNCwxMTUsCi0gICAgMTA5LDExNSwxMDgsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMjE4LDYsOTUsOTUsMTAxLDExMyw5NSw5NSw0NCwzLDAsMCwxMTUsMjAsCi0gICAgMCwwLDAsMCwxLDksMSwzLDEsMTgsMSwxOCwxLDE4LDEsMTUsCi0gICAgMSwxOCwxLDIwLDEsMTMsMSwxMjIsMTcsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywKLSAgICAxMTIsMTAxLDk5LDQ2LDk1LDk1LDEwMSwxMTMsOTUsOTUsOTksMSwwLDAsMCwwLAotICAgIDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LAotICAgIDE1OCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDAsMCwxMDcsOCwwLAotICAgIDExNCwxNTEsMCwxMjQsMCwwLDEwNiwxLDAsMTAwLDAsMCwxMDcsOSwwLDExNCwKLSAgICAxNTEsMCwxMjQsMCwwLDEwNiwyLDAsMTE0LDE1MSwwLDEyNCwwLDAsMTA2LDEsCi0gICAgMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDMsMCwxMTYsNCwwLDExNiw1LDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDExNCwxMTIsMCwxMjEsMTksMCwxMTYsNiwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDAsMCw4NywxMTMsMTQ1LDAsNCwKLSAgICAxMTYsNywwLDEwNywxMCwwLDExNCwxMDgsMCwxLDEsMSw4OSwxMTMsMTQ1LDAsCi0gICAgODgsMTEzLDE0OCwwLDEyNCwxLDAsMTA2LDMsMCwxMTYsNCwwLDExNiw4LDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDExNCwxNDgsMCwxMjQsMSwwLDEyNCwwLDAsOTUsCi0gICAgMCwwLDExMywxNDgsMCwxMTMsMTUxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwwLAotICAgIDAsODMsNDEsMSw3OCw0MSw5LDExNCwyMjMsMCwwLDAsMTE0LDIxOCwwLDAsCi0gICAgMCwxMTQsMjIyLDAsMCwwLDIxOCw4LDEwMSwxMTAsMTAwLDExNSwxMTksMTA1LDExNiwxMDQsCi0gICAgMjE4LDUsMTE2LDExNywxMTIsMTA4LDEwMSwxMTQsMTM1LDAsMCwwLDExNCwxMzIsMCwwLAotICAgIDAsMTE0LDEyMywwLDAsMCwyMTgsMTcsNjYsODksODQsNjksNjcsNzksNjgsNjksCi0gICAgOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDEsMiwxMTQsNzEsMCwwLDAsCi0gICAgMTE0LDEzMSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwxMTQsMjI2LDAsMCwwLDU2LDMsMCwwLDExNSwyMiwwLAotICAgIDAsMCwwLDIsMTUsMSwyNCwxLDksMSwyMSwxLDMsMSwxOSwxLAotICAgIDEzLDEsOCwxLDIxLDEsMTgsMSwxMjIsMTcsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA4MywxMTIsMTAxLDk5LDQ2LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk5LDIsMCwwLDAsCi0gICAgMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDEzLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDAsCi0gICAgMCw4Myw0MSwxLDc4LDQxLDEsMTE0LDIyMywwLDAsMCw0MSwyLDExNCw3MSwKLSAgICAwLDAsMCwxMTQsMjI2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw1LDAsMCwwLDExNCwyMjYsMCwwLDAsNzAsMywwLDAsCi0gICAgMTE1LDIsMCwwLDAsMCwyLDk5LDEsMCwwLDAsMCwwLDAsMCwKLSAgICAxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDQ2LDAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDM1LDAsCi0gICAgMTI0LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwKLSAgICAzLDAsMjUsODMsMTI0LDAsMCwxMDYsMSwwLDgzLDEwMCwxLDAsODMsNDEsCi0gICAgNCwxMjIsMzIsODQsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE0LDEwMSwKLSAgICAxMTAsMTE2LDQ2LDc4LDExNCwxMTYsMCwwLDAsMTE0LDg0LDAsMCwwLDQxLDMsCi0gICAgMTE0LDIyMSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDMyLDAsMCwwLDQxLAotICAgIDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw1LDAsMCwwLDIxOCw2LDExMiw5NywxMTQsMTAxLDExMCwxMTYsNzQsMywwLAotICAgIDAsMTE1LDYsMCwwLDAsMCwzLDE1LDEsMjAsMiwxMjIsMTcsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTksCi0gICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsNywwLDAsMCwxMjQsMCwwLDEwNiwwLDAsODMsCi0gICAgNDEsMSw3OCw0MSwxLDExNCwyMjIsMCwwLDAsNDEsMSwxMTQsNzEsMCwwLAotICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCi0gICAgMTE0LDIyNywwLDAsMCw4MiwzLDAsMCwxMTUsMiwwLDAsMCwwLDIsCi0gICAgMTIyLDIzLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0NiwxMDQsOTcsMTE1LAotICAgIDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LAotICAgIDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNCwwLDAsOTUsCi0gICAgMSwwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwyLDIxOCw0LDk4LDExMSwxMTEsCi0gICAgMTA4LDExNCwyMjIsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMjE4LDUsMTE4LAotICAgIDk3LDEwOCwxMTcsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDExNCwyMjcsMCwwLDAsODYsMywwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwyLDQxLDEyLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LAotICAgIDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDEwMSwKLSAgICAwLDAsMCwxMTQsMjMwLDAsMCwwLDIxOCw4LDExMiwxMTQsMTExLDExMiwxMDEsMTE0LAotICAgIDExNiwxMjEsMTE0LDIyNiwwLDAsMCwyMTgsNiwxMTUsMTAxLDExNiwxMTYsMTAxLDExNCwxMTQsCi0gICAgMjM0LDAsMCwwLDExNCwyMjcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIxNywwLAotICAgIDAsMCwyNDEsMiwwLDAsMTE1LDIwLDAsMCwwLDEyLDM1LDYsMiwxNSwKLSAgICAxLDE1LDExLDEyLDEwLDEyLDEyLDE4LDE0LDIxLDQsMTgsOCwxOCw0LDExNCwKLSAgICAyMTcsMCwwLDAsMTE0LDIxOCwwLDAsMCwxMTQsMjIwLDAsMCwwLDk5LDIsCi0gICAgMCwwLDAsMiwwLDAsMCw1LDAsMCwwLDE1LDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxOTMsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEwMCwxLAotICAgIDAsMTMxLDIsMCwxMTQsODMsMCwxMjQsMywwLDEwMCwyLDAsMTA3LDgsMCwKLSAgICAxMTQsNDMsMCwxMTYsMSwwLDEyNCwwLDAsMTAwLDMsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDEsODMsMTI0LDMsMCwxMTQsNTUsMCwxMDMsMCwwLDExMCwzLDAsMTAwLAotICAgIDIsMCwxMjUsNCwwLDExNiwxLDAsMTI0LDAsMCwxMDAsMywwLDEyNCwxLAotICAgIDAsMTAwLDQsMCwxMjQsNCwwLDEzMSwxLDIsODMsMTI0LDMsMCwxMDAsMiwKLSAgICAwLDEwNyw4LDAsMTE0LDE2OCwwLDExNiwwLDAsMTI0LDEsMCwxMDAsNSwwLAotICAgIDEzMSwyLDAsMTE0LDE1OSwwLDEyMSwxOSwwLDEyNCwxLDAsMTA2LDIsMCwxMjQsCi0gICAgMCwwLDEzMSwxLDAsMTI1LDMsMCw4NywxMTMsMTY1LDAsNCwxMTYsMywwLAotICAgIDEwNywxMCwwLDExNCwxNTUsMCwxLDEsMSwxMDAsMiwwLDEyNSwzLDAsODksCi0gICAgMTEzLDE2NSwwLDg4LDExMywxNjgsMCwxMDAsNiwwLDEyNSwzLDAsMTEwLDAsMCwKLSAgICAxMTYsNCwwLDEyNCwwLDAsMTI0LDEsMCwxMDAsNywwLDEyNCwyLDAsMTAwLAotICAgIDUsMCwxMjQsMywwLDEzMSwyLDIsODMsNDEsOCwxMjIsNTMsODIsMTAxLDExNiwKLSAgICAxMTcsMTE0LDExMCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTUsMTEyLDEwMSwKLSAgICA5OSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExOCw5NywxMTQsMTA1LDExMSwKLSAgICAxMTcsMTE1LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMTE1LDQ2LDIxOCwxMiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCi0gICAgNzgsMTE0LDE3MCwwLDAsMCwxMTQsMjIxLDAsMCwwLDExNCwyMjAsMCwwLDAsCi0gICAgNzAsMTE0LDIxOCwwLDAsMCw0MSw1LDExNCw2MCwwLDAsMCwyMTgsMjMsMTE1LAotICAgIDExMiwxMDEsOTksOTUsMTAyLDExNCwxMTEsMTA5LDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsMTExLAotICAgIDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTQsMjIwLDAsMCwwLDExNCwxNTQsMCwwLDAsCi0gICAgMTE0LDIxNywwLDAsMCw0MSw1LDExNCw2NywwLDAsMCwxMTQsMTcwLDAsMCwKLSAgICAwLDExNCwyMTgsMCwwLDAsMTE0LDIyMCwwLDAsMCw5MCw2LDExNSwxMDEsOTcsCi0gICAgMTE0LDk5LDEwNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwxMTQsMTc0LDAsMCwwLDkxLDMsMCwwLDExNSwyOCwwLDAsMCwKLSAgICAwLDIsMTUsMSwxMiwxLDE2LDEsMTgsMSwxNSwxLDcsMiwxMiwxLAotICAgIDE1LDEsMywxLDE5LDEsMTMsMSwxNCwzLDksMiwxMTQsMTc0LDAsMCwKLSAgICAwLDExNCwxNzAsMCwwLDAsMTE0LDIyMSwwLDAsMCw5OSwyLDAsMCwwLAotICAgIDIsMCwwLDAsOSwwLDAsMCwxOSwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsMTEwLDEsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDcsOCwwLDExNCw3OSwKLSAgICAwLDEwMCwyLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwyLDAsMTAwLDMsMCwKLSAgICAxMzEsMiwwLDExNCw3OSwwLDEyMSwxOSwwLDEyNCwyLDAsMTA2LDEsMCwxMjQsCi0gICAgMCwwLDEzMSwxLDAsMTI1LDEsMCw4NywxMTMsNzYsMCw0LDExNiwyLDAsCi0gICAgMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsODksMTEzLDc2LDAsODgsMTEzLDc5LAotICAgIDAsMTEwLDAsMCwxMTYsMywwLDEyNCwwLDAsMTI0LDIsMCwxMDAsNCwwLAotICAgIDEyNCwxLDAsMTMxLDIsMSwxMjUsNCwwLDEwMCw1LDAsMTI0LDQsMCw5NSwKLSAgICA0LDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDIwMywwLDEyMCw3OSwKLSAgICAwLDExNiw1LDAsMTMxLDAsMCw2OCw5Myw2MSwwLDkyLDIsMCwxMjUsNSwKLSAgICAwLDEyNSw2LDAsMTI0LDEsMCwxMDYsNiwwLDExNiw3LDAsMTI0LDYsMCwKLSAgICAxMzEsMSwwLDEzMSwxLDAsMTE0LDEzMSwwLDEyNCw1LDAsMTI0LDAsMCwxMjQsCi0gICAgMSwwLDEzMSwyLDAsMTI1LDIsMCwxMjQsMiwwLDEyNCw0LDAsOTUsOCwKLSAgICAwLDgwLDExMywxMzEsMCwxMTMsMTMxLDAsODcsMTAwLDEsMCw4MywxMTAsMCwwLAotICAgIDEyNCwzLDAsMTE2LDksMCwxMDcsOCwwLDExNCwzOCwxLDExNiwwLDAsMTI0LAotICAgIDIsMCwxMDAsNiwwLDEzMSwyLDAsMTE0LDQ3LDEsMTIxLDE5LDAsMTI0LDIsCi0gICAgMCwxMDYsMTAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDcsMCw4NywxMTAsMTgsCi0gICAgMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDEzLDEsMSwxLDEsODksMTEzLAotICAgIDM1LDEsODgsMTI0LDcsMCwxMTQsMzUsMSwxMDMsMCwwLDEyNCw0LDAsOTUsCi0gICAgMTEsMCwxMTMsMzUsMSwxMTMsNDcsMSwxMTAsOSwwLDEyNCwzLDAsMTI0LDQsCi0gICAgMCw5NSwxMSwwLDEyNCw0LDAsMTA2LDExLDAsMTAzLDAsMCwxMDcsMiwwLAotICAgIDExNCwxMDYsMSwxMjQsMSwwLDExNCwxMDYsMSwxMTYsMTIsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTAwLDcsMCwyNSwxMjUsOCwwLDEyNCw0LDAsMTA2LDExLDAsMTA2LAotICAgIDEzLDAsMTI0LDgsMCwxMzEsMSwwLDEsMTEzLDEwNiwxLDExMCwwLDAsMTI0LAotICAgIDQsMCw4Myw0MSw4LDk3LDYxLDEsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTgsCi0gICAgOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA4LAotICAgIDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTExLAotICAgIDMyLDEwNSwxMTAsMTAwLDEwNSw5OSw5NywxMTYsMTAxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ0LDMyLDExNSwxMDEsMTE2LDEwLDMyLDMyLDMyLDMyLAotICAgIDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LAotICAgIDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSwzMiwxMTYsMTExLDMyLDk3LDMyLAotICAgIDEwOCwxMDUsMTE1LDExNiwzMiwxMTEsMTAyLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwKLSAgICAxMjEsMzIsMTEyLDk3LDExNiwxMDQsMTE1LDQ2LDMyLDMyLDY1LDExMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDEsMTA5LDExMiwxMTYsMTIxLDMyLDEwOCwxMDUsMTE1LDExNiwzMiwxMDUsMTE1LDMyLDExNSwKLSAgICAxMTcsMTAyLDEwMiwxMDUsOTksMTA1LDEwMSwxMTAsMTE2LDQ0LDMyLDExNiwxMDQsMTExLDExNywxMDMsCi0gICAgMTA0LDMyLDEwNSwxMTYsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExMSwxMTYsMTA0LDEwMSwxMTQsMTE5LAotICAgIDEwNSwxMTUsMTAxLDMyLDExNywxMTUsMTAxLDEwMiwxMTcsMTA4LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTE1LDEyMSwxMTUsCi0gICAgMTE2LDEwMSwxMDksNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDMyLDEwOSwxMTcsMTE1LDExNiwzMiwxMTYsOTcsMTA3LDEwMSwzMiw5NywKLSAgICAzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTUsMzIsMTA1LDExNiwxMTUsMzIsMTExLDExMCwxMDgsCi0gICAgMTIxLDMyLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0MCw0MSwzMiw5NywxMTQsMTAzLAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDEyMiw5LDYwLDExNywxMTAsMTA3LDExMCwxMTEsCi0gICAgMTE5LDExMCw2MiwxMTQsMjM5LDAsMCwwLDExNCwyMTgsMCwwLDAsODQsMTE0LDIyMCwKLSAgICAwLDAsMCwxMTQsODQsMCwwLDAsNDEsMTQsMTE0LDYwLDAsMCwwLDExNCwKLSAgICAyMzksMCwwLDAsMTE0LDE1NCwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMjIsCi0gICAgMCwwLDAsMjE4LDI3LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LAotICAgIDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwKLSAgICAxMTQsMjMxLDAsMCwwLDExNCwyMzIsMCwwLDAsMTE0LDE3MCwwLDAsMCwyMTgsCi0gICAgOSw5NSw4MCw3OSw4MCw4NSw3Niw2NSw4NCw2OSwxMTQsMjIwLDAsMCwwLDExNCwKLSAgICAyMjEsMCwwLDAsMTE0LDM4LDAsMCwwLDExNCwyMjQsMCwwLDAsNDEsOSwKLSAgICAxMTQsNjcsMCwwLDAsMjE4LDgsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LAotICAgIDE3MCwwLDAsMCwxMTQsMjIxLDAsMCwwLDExNCwxNzgsMCwwLDAsMjE4LDEyLAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTksMTA4LDk3LDExNSwxMTUsMTE0LDEyNiwwLDAsCi0gICAgMCwxMTQsMjIwLDAsMCwwLDkwLDcsMTAwLDEwNSwxMTQsMTEwLDk3LDEwOSwxMDEsMTE0LAotICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDI0MCwKLSAgICAwLDAsMCwxMTYsMywwLDAsMTE1LDYwLDAsMCwwLDAsMTIsMTIsNCwKLSAgICA2LDEsMTUsMiwzLDEsMTksMSwxMywxLDExLDgsMjEsMSw5LDMsCi0gICAgMTIsMSwyMiwxLDIxLDEsMTUsMSw5LDEsOCwyLDcsMywxMiwyLAotICAgIDE1LDEsMywxLDE5LDEsMTMsMSw1LDIsNiwxLDE4LDIsOSwxLAotICAgIDE1LDEsNiwxLDE2LDEsMjIsMiwxMTQsMjQwLDAsMCwwLDk5LDMsMCwKKyAgICAxMzEsMSwwLDEsMTAwLDUsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDYsMCwKKyAgICAxMDYsNywwLDEwMCw2LDAsMTA2LDgsMCwxMjQsMSwwLDEzMSwxLDAsMTMxLAorICAgIDIsMCw4Myw0MSw3LDc4LDEyMiw5LDExMCw5NywxMDksMTAxLDYxLDEyMywzMywxMTQsCisgICAgMTI1LDEyMiwxMSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDYxLDEyMywzMywxMTQsMTI1LDEyMiwxMSwKKyAgICAxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCw2MSwxMjMsMzMsMTE0LDEyNSwxMjIsMjksMTE1LDExNyw5OCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSwKKyAgICA5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDYxLDEyMywxMjUsMTIyLDYsMTIzLDEyNSw0MCwxMjMsCisgICAgMTI1LDQxLDEyMiwyLDQ0LDMyLDQxLDksMTE0LDUwLDAsMCwwLDExNCwxNSwwLAorICAgIDAsMCwxMTQsOTksMCwwLDAsMTE0LDEwNywwLDAsMCwyMTgsNiw5NywxMTIsCisgICAgMTEyLDEwMSwxMTAsMTAwLDExNCwxMTAsMCwwLDAsMjE4LDksOTUsOTUsOTksMTA4LDk3LAorICAgIDExNSwxMTUsOTUsOTUsMTE0LDEsMCwwLDAsMjE4LDQsMTA2LDExMSwxMDUsMTEwLDQxLAorICAgIDIsMTE0LDE5LDAsMCwwLDExNCwyOSwwLDAsMCwxMTQsMTAsMCwwLDAsCisgICAgMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsNTIsMCwwLDAsMTI4LAorICAgIDEsMCwwLDExNSwxNiwwLDAsMCwwLDEsMTUsMSwyMSwxLDE1LDEsCisgICAgMjUsMSwxNSwxLDEyLDEsMTMsMSwxMjIsMTksNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA4MywxMTIsMTAxLDk5LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTQ1LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMiwwLAorICAgIDEyMSwxMDcsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMDYsMSwwLDEwNywKKyAgICAyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMSwwLDEwNiwyLAorICAgIDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwxMDYsMywwLDEyNCwxLDAsCisgICAgMTA2LDMsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMiwwLDEyNCwxLDAsMTA2LAorICAgIDAsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDEsCisgICAgMCwxMDYsNCwwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LDUsMCwKKyAgICAxMjQsMSwwLDEwNiw1LDAsMTA3LDIsMCw4Myw4NywxMTAsMjIsMCw0LDExNiwKKyAgICA2LDAsMTA3LDEwLDAsMTE0LDE0MCwwLDEsMSwxLDEwMCwxLDAsODMsODksCisgICAgMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQxLDIsNzgsNzAsNDEsNywxMTQsMTEwLAorICAgIDAsMCwwLDExNCwxNSwwLDAsMCwxMTQsOTksMCwwLDAsMTE0LDEwNywwLAorICAgIDAsMCwyMTgsNiw5OSw5Nyw5OSwxMDQsMTAxLDEwMCwyMTgsMTIsMTA0LDk3LDExNSw5NSwKKyAgICAxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTQsOTYsMCwwLDAsNDEsMywxMTQsCisgICAgMTksMCwwLDAsOTAsNSwxMTEsMTE2LDEwNCwxMDEsMTE0LDkwLDQsMTE1LDEwOSwxMTUsCisgICAgMTA4LDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLAorICAgIDIxOCw2LDk1LDk1LDEwMSwxMTMsOTUsOTUsMTM4LDEsMCwwLDExNSwyMCwwLDAsCisgICAgMCwwLDEsOSwxLDMsMSwxOCwxLDE4LDEsMTgsMSwxNSwxLDE4LAorICAgIDEsMjAsMSwxMywxLDEyMiwxNyw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsCisgICAgOTksNDYsOTUsOTUsMTAxLDExMyw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw4NSwwLAorICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw3OCwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDc4LDAsCisgICAgMTI0LDAsMCwxMDYsMiwwLDExNCw3OCwwLDExNiwzLDAsMTAwLDAsMCwxMDcsCisgICAgOCwwLDExNCw1NywwLDExNiw0LDAsMTMwLDEsMCwxMTYsMywwLDEwNiw1LAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwwLDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDgzLDQxLDEsNzgsNDEsNiwxMTQsMTEyLDAsMCwKKyAgICAwLDExNCwxMDcsMCwwLDAsMTE0LDExMSwwLDAsMCwyMTgsMTksOTUsOTgsMTExLAorICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDk1LDEwMSwxMjAsMTE2LDEwMSwxMTQsMTEwLDk3LDEwOCwKKyAgICAyMTgsMTksNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsCisgICAgNjksMTE0LDExNCwxMTEsMTE0LDkwLDExLDk1LDEwMywxMDEsMTE2LDk1LDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsMTAwLDQxLDEsMTE0LDE5LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsCisgICAgMCwwLDAsMTE0LDExLDAsMCwwLDExNCwxMTYsMCwwLDAsMTUwLDEsMCwKKyAgICAwLDExNSwxMiwwLDAsMCwwLDIsMTUsMSwyNCwxLDEyLDEsNiwxLAorICAgIDIxLDEsMTIyLDE3LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0Niw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDEwMCw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLAorICAgIDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsCisgICAgMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwKKyAgICAxLDExNCwxMTIsMCwwLDAsNDEsMiwxMTQsMTksMCwwLDAsMTE0LDExNiwwLAorICAgIDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsCisgICAgMCwxMTQsMTE2LDAsMCwwLDE1OSwxLDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDIsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNDYsMCwwLDAsMTI0LDAsMCwxMDYsMCwKKyAgICAwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzUsMCwxMjQsMCwwLDEwNiwxLDAsCisgICAgMTA2LDIsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDMsMCwyNSw4MywxMjQsMCwKKyAgICAwLDEwNiwxLDAsODMsMTAwLDEsMCw4Myw0MSw0LDEyMiwzMiw4NCwxMDQsMTAxLAorICAgIDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDYsNzgsMjE4LDEsCisgICAgNDYsMTE0LDMzLDAsMCwwLDQxLDMsMTE0LDExMCwwLDAsMCwxMTQsMTUsMCwKKyAgICAwLDAsMjE4LDEwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDQxLDEsCisgICAgMTE0LDE5LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LAorICAgIDExLDAsMCwwLDIxOCw2LDExMiw5NywxMTQsMTAxLDExMCwxMTYsMTYzLDEsMCwwLAorICAgIDExNSw2LDAsMCwwLDAsMywxNSwxLDIwLDIsMTIyLDE3LDc3LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDgzLDQxLAorICAgIDEsNzgsNDEsMSwxMTQsMTExLDAsMCwwLDQxLDEsMTE0LDE5LDAsMCwwLAorICAgIDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwKKyAgICAxMTcsMCwwLDAsMTcxLDEsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsCisgICAgMjMsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDEwNCw5NywxMTUsOTUsCisgICAgMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsOTksMiwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTksMCwKKyAgICAwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxLAorICAgIDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMjE4LDQsOTgsMTExLDExMSwxMDgsCisgICAgMTE0LDExMSwwLDAsMCw0MSwyLDExNCwxOSwwLDAsMCwyMTgsNSwxMTgsOTcsCisgICAgMTA4LDExNywxMDEsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwKKyAgICAwLDAsMTE0LDExNywwLDAsMCwxNzUsMSwwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwyLDQxLDEyLDExNCwxLDAsMCwwLDExNCwwLDAsMCwwLDExNCwyLAorICAgIDAsMCwwLDExNCwzLDAsMCwwLDExNCwyMCwwLDAsMCwxMTQsNTIsMCwKKyAgICAwLDAsMTE0LDExOCwwLDAsMCwyMTgsOCwxMTIsMTE0LDExMSwxMTIsMTAxLDExNCwxMTYsCisgICAgMTIxLDExNCwxMTYsMCwwLDAsMjE4LDYsMTE1LDEwMSwxMTYsMTE2LDEwMSwxMTQsMTE0LDEyMywKKyAgICAwLDAsMCwxMTQsMTE3LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwKKyAgICAwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsMTA2LDAsMCwKKyAgICAwLDc5LDEsMCwwLDExNSwyMCwwLDAsMCwxMiwzNSw2LDIsMTUsMSwKKyAgICAxNSwxMSwxMiwxMCwxMiwxMiwxOCw5LDIxLDQsMTgsOCwxOCw0LDExNCwxMDYsCisgICAgMCwwLDAsMTE0LDEwNywwLDAsMCwxMTQsMTA5LDAsMCwwLDk5LDIsMCwKKyAgICAwLDAsMiwwLDAsMCw2LDAsMCwwLDE1LDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwyMTcsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEwMCwxLDAsCisgICAgMTMxLDIsMCwxMTQsMTEwLDAsMTE2LDEsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LAorICAgIDMzLDAsMTE2LDIsMCwxMzAsMSwwLDExNiwxLDAsMTA2LDMsMCwxMjUsNCwKKyAgICAwLDEyNCwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCw3MCwwLDEyNCw0LDAsCisgICAgMTI0LDAsMCwxMDAsMywwLDEyNCwxLDAsMTMxLDEsMSw4MywxMjQsMywwLAorICAgIDExNCw4MiwwLDEwMywwLDAsMTEwLDMsMCwxMDAsMiwwLDEyNSw1LDAsMTI0LAorICAgIDQsMCwxMjQsMCwwLDEwMCwzLDAsMTI0LDEsMCwxMDAsNCwwLDEyNCw1LAorICAgIDAsMTMxLDEsMiw4MywxMjQsMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsMTkyLAorICAgIDAsMTE2LDAsMCwxMjQsMSwwLDEwMCw1LDAsMTMxLDIsMCwxMTQsMTg2LDAsCisgICAgMTIxLDE5LDAsMTI0LDEsMCwxMDYsNCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsCisgICAgMywwLDg3LDExMywxOTIsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE4MiwwLAorICAgIDEsMSwxLDEwMCwyLDAsMTI1LDMsMCw4OSwxMTMsMTkyLDAsODgsMTEwLDYsCisgICAgMCwxMDAsNiwwLDEyNSwzLDAsMTE2LDYsMCwxMjQsMCwwLDEyNCwxLDAsCisgICAgMTAwLDcsMCwxMjQsMiwwLDEwMCw1LDAsMTI0LDMsMCwxMzEsMiwyLDgzLAorICAgIDQxLDgsMTIyLDUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTExLAorICAgIDExMCwzMiwxMTgsOTcsMTE0LDEwNSwxMTEsMTE3LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5MCwxMiwxMDMsMTAxLDExNiw5NSwxMDIsCisgICAgMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNzgsMTE0LDk5LDAsMCwwLDExNCwxMTAsMCwKKyAgICAwLDAsMTE0LDEwOSwwLDAsMCw3MCwxMTQsMTA3LDAsMCwwLDQxLDcsMTE0LAorICAgIDQsMCwwLDAsMTE0LDExOSwwLDAsMCwxMTQsMTIwLDAsMCwwLDIxOCwyMywKKyAgICAxMTUsMTEyLDEwMSw5OSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwKKyAgICAxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNCwxMDksMCwwLDAsMTE0LDc3LDAsMCwKKyAgICAwLDExNCwxMDYsMCwwLDAsNDEsNiwxMTQsMTUsMCwwLDAsMTE0LDk5LDAsCisgICAgMCwwLDExNCwxMDcsMCwwLDAsMTE0LDEwOSwwLDAsMCwxMTQsMTI4LDAsMCwKKyAgICAwLDkwLDYsMTE1LDEwMSw5NywxMTQsOTksMTA0LDExNCwxMCwwLDAsMCwxMTQsMTAsCisgICAgMCwwLDAsMTE0LDExLDAsMCwwLDExNCw4NSwwLDAsMCwxODAsMSwwLAorICAgIDAsMTE1LDM0LDAsMCwwLDAsMiwxNSwxLDEyLDEsNiwxLDksMiwKKyAgICAxMiwxLDE2LDEsMTgsMSwxNSwxLDcsMiwxMiwxLDE1LDEsMywxLAorICAgIDE5LDEsMTMsMSwxNCwzLDYsMiwxMTQsODUsMCwwLDAsOTksMywwLAogICAgIDAsMCwwLDAsMCwwLDgsMCwwLDAsNTMsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDEyNCwxLDAsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMCwwLDExNSwxMTgsMSwwLDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsMCwwLAogICAgIDEyNSwzLDAsODcsMTEwLDE4LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCwzMywKICAgICAwLDEsMSwxLDg5LDExMCwxNywwLDg4LDEyNCwzLDAsMTAwLDAsMCwxMDcsCiAgICAgOSwwLDExNCw1MCwwLDEyNCwzLDAsODMsMTI0LDAsMCwxMDYsMiwwLDEyNSwKLSAgICA0LDAsMTI0LDEsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyMSwxMywKLSAgICAwLDEyNCwwLDAsMTA2LDMsMCwxMjUsMSwwLDg3LDExMywxMDgsMCw0LDExNiwKLSAgICAxLDAsMTA3LDEwLDAsMTE0LDEwNCwwLDEsMSwxLDg5LDExMywxMDgsMCw4OCwKLSAgICAxMTAsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDQsMCwxMjUsNSwwLDg3LAotICAgIDExMCwyNCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMTQ3LDAsMSwxLDEsCi0gICAgMTAwLDAsMCwxMjUsNSwwLDg5LDExMCwxLDAsODgsMTI0LDIsMCwxMDAsMCwKLSAgICAwLDEwNyw4LDAsMTE0LDIyNCwwLDEyNCw1LDAsMTAwLDAsMCwxMDcsOCwwLAotICAgIDExNCwyMTUsMCwxMjEsMTMsMCwxMjQsMSwwLDEwNiw1LDAsMTI1LDIsMCw4NywKLSAgICAxMTMsMjIxLDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCwyMTEsMCwxLDEsMSwKLSAgICAxMDAsMCwwLDEyNSwyLDAsODksMTEzLDIyMSwwLDg4LDExMywyMjQsMCwxMjQsNSwKLSAgICAwLDEyNSwyLDAsMTEwLDAsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiw2LDAsCi0gICAgMTI1LDYsMCw4NywxMTAsMjQsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDcsCi0gICAgMSwxLDEsMSwxMDAsMCwwLDEyNSw2LDAsODksMTEwLDEsMCw4OCwxMjEsCi0gICAgMTksMCwxMTYsNywwLDEyNCwwLDAsMTA2LDgsMCwxMzEsMSwwLDEyNSw3LAotICAgIDAsODcsMTEwLDI0LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCw1MywxLDEsCi0gICAgMSwxLDEwMCwwLDAsMTI1LDcsMCw4OSwxMTAsMSwwLDg4LDExNiw5LDAsCi0gICAgMTI0LDQsMCwxMjQsMSwwLDEwMCwxLDAsMTI0LDIsMCwxMzEsMiwxLDEyNSwKLSAgICAzLDAsMTI0LDUsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDkzLDEsMTAwLDIsCi0gICAgMCwxMTAsMywwLDEwMCwzLDAsMTI0LDMsMCw5NSwxMCwwLDEyNCw2LDAsCi0gICAgMTI0LDMsMCw5NSwxMSwwLDEyNCw3LDAsMTI0LDMsMCw5NSwxMiwwLDEyNCwKLSAgICAzLDAsODMsNDEsNCw3OCwxMTQsMjE4LDAsMCwwLDcwLDg0LDQxLDEzLDExNCwKLSAgICAyMDksMCwwLDAsMTE0LDIxMCwwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDIwNSwKLSAgICAwLDAsMCwxMTQsMjExLDAsMCwwLDkwLDcsOTUsNzksODIsNzMsNzEsNzMsCi0gICAgNzgsMjE4LDEwLDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LDIxOCw0LDEwOCwKLSAgICAxMDUsMTE1LDExNiwyMTgsOCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTQsMjE3LDAsCi0gICAgMCwwLDExNCwyMjIsMCwwLDAsMTE0LDIyNiwwLDAsMCwxMTQsMjIxLDAsMCwKLSAgICAwLDQxLDgsMTE0LDE4MCwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwyMTgsMCwKLSAgICAwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDI0MywwLDAsCi0gICAgMCwxMTQsMjI2LDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LDExNSwxMTIsMTAxLAotICAgIDk5LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxODAsMywwLAotICAgIDAsMTE1LDcyLDAsMCwwLDAsMiwzLDEsMTMsMSwxMywxLDUsMiwKLSAgICAxMiwxLDQsMiw5LDEsMTIsMSwzLDEsMTMsMSwxMywyLDgsMSwKLSAgICAzLDEsMTMsMSwxMywxLDExLDEsMTIsMSwxMiwxLDMsMSwxMywxLAotICAgIDEzLDEsMTQsMiw5LDEsMywxLDEzLDEsMTMsMSwxMSwxLDMsMSwKLSAgICAxOSwxLDEzLDEsMTEsMiwyMSwxLDI3LDEsOSwxLDksMSwxMTQsMjQ4LAotICAgIDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAgIDYsMCwwLDAsNjQsMCwwLDAsMTE1LDE0MiwwLDAsMCwxMDEsMCwwLAotICAgIDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsCi0gICAgMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwKLSAgICAwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMDAsOCwwLAotICAgIDEwMCw5LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMiw5MCw2LDAsMTAwLAotICAgIDEyLDAsMTAwLDEzLDAsMTMyLDAsMCw5MCw3LDAsMTAwLDE0LDAsMTAwLDE1LAotICAgIDAsMTMyLDAsMCw5MCw4LDAsMTAwLDE2LDAsMTAwLDE3LDAsMTMyLDAsMCwKLSAgICA5MCw5LDAsMTAwLDE4LDAsMTAwLDE5LDAsMTMyLDAsMCw5MCwxMCwwLDEwMCwKLSAgICAyMCwwLDEwMCwyMSwwLDEzMiwwLDAsOTAsMTEsMCwxMDAsMjIsMCwxMDAsMjMsCi0gICAgMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDI0LDAsODMsNDEsMjUsMTE0LDE3NSwwLAotICAgIDAsMCwxMjIsNzcsNjcsMTExLDExMCwxMTgsMTAxLDExMCwxMDUsMTAxLDExMCw5OSwxMDEsMzIsCi0gICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMzIsOTcsMTE0LDExMSwxMTcsMTEwLDEwMCwzMiwxMTUsCi0gICAgMTEyLDEwMSw5OSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE1LDMyLDExNiwxMTEsMzIsMTEyLAotICAgIDExNCwxMTEsMTE4LDEwNSwxMDAsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDQ1LDExNSwxMTIsMTAxLDk5LAotICAgIDEwNSwxMDIsMTA1LDk5LDEwLDMyLDMyLDMyLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwKLSAgICA0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsMSwwLDEyNCwwLAotICAgIDAsOTUsMCwwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwxLDExNCwxNzgsMCwKLSAgICAwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwKLSAgICAwLDAsMjMyLDMsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjEsOTUsCi0gICAgODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5NSw5NSwxMDUsMTEwLAotICAgIDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLAotICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTU4LDAsMCwwLDEyNCwwLAotICAgIDAsMTA2LDAsMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsMSwwLAotICAgIDEwNyw4LDAsMTE0LDMwLDAsMTAwLDIsMCwxMTAsNiwwLDEyNCwxLDAsMTA2LAotICAgIDEsMCwxMjUsMiwwLDEyNCwxLDAsMTA2LDIsMCwxMDAsMSwwLDEwNyw4LAotICAgIDAsMTE0LDEwNCwwLDEyNCwxLDAsMTA2LDMsMCwxMDAsMSwwLDEwNyw4LDAsCi0gICAgMTE0LDgyLDAsMTAwLDMsMCwxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCw4MywKLSAgICAxMDAsNCwwLDEwNiw0LDAsMTI0LDIsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLAotICAgIDIsMCw4MywxMTAsNTAsMCwxMjQsMSwwLDEwNiw1LDAsMTE0LDEzMiwwLDEwMCwKLSAgICA1LDAsMTA2LDQsMCwxMjQsMiwwLDEyNCwxLDAsMTA2LDIsMCwxMzEsMiwKLSAgICAwLDgzLDEwMCw2LDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwxLDAsMTI0LDEsCi0gICAgMCwxMDYsMiwwLDEzMSwyLDAsODMsMTAwLDEsMCw4Myw0MSw3LDEyMiwzOCwKLSAgICA4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNCwxMDEsMTEyLDExNCwzMiwKLSAgICAxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LDExNCwyMDcsMCwwLDAsMTIyLDEzLDYwLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDYyLDEyMiwyMCw2MCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCwxMjMsMzMsMTE0LDEyNSw0MSwKLSAgICA2MiwxMjIsMjMsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsCi0gICAgMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDYyLDEyMiwxOCw2MCwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCwxMjMsMTI1LDQxLDYyLDQxLDYsCi0gICAgMTE0LDE3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDIxOCwwLDAsMCwxMTQsCi0gICAgMTcwLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMjI3LDAsMCwwLDQxLDMsCi0gICAgMTE0LDcxLDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMDYsCi0gICAgMCwwLDAsMjM1LDMsMCwwLDExNSwxOCwwLDAsMCwwLDMsOSwxLAotICAgIDMwLDEsMTUsMSwxNSwxLDEzLDIsMjIsMiw5LDEsMTksMiwxMjIsMjQsCi0gICAgOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMjE4LDksOTUsMTExLDExOCwxMDEsMTE0LDExNCwKLSAgICAxMDUsMTAwLDEwMSw3MCwyMTgsMTEsOTUsMTAyLDExMSwxMTQsOTksMTAxLDk1LDExMCw5NywxMDksCi0gICAgMTAxLDg0LDk5LDIsMCwwLDAsMiwwLDAsMCw2LDAsMCwwLDU5LAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw3NSwyLDAsMCwxMjQsMCwwLDEwNiwKLSAgICAwLDAsMTI1LDQsMCwxMjQsMiwwLDExNSw0NSwwLDEyNCwzLDAsMTE1LDQ1LAotICAgIDAsMTE2LDEsMCwxMjQsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzEsMywwLAotICAgIDEwMCwyLDAsMTA3LDgsMCwxMTQsODUsMCwxMjEsMTYsMCwxMjQsNCwwLDEwNiwKLSAgICAyLDAsMTI0LDEsMCw5NSwzLDAsODcsMTEzLDg1LDAsNCwxMTYsNCwwLAotICAgIDEwNywxMCwwLDExNCw4MSwwLDEsMSwxLDg5LDExMyw4NSwwLDg4LDExMCwwLAotICAgIDAsMTI0LDIsMCwxMTUsMTE1LDAsMTE2LDEsMCwxMjQsMSwwLDEwMCwzLDAsCi0gICAgMTAwLDIsMCwxMzEsMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsMjIxLDAsMTI0LAotICAgIDQsMCwxMDYsNSwwLDEyNSw1LDAsMTI0LDUsMCwxMDAsMiwwLDEwNyw4LAotICAgIDAsMTE0LDE4NCwwLDEyNCw0LDAsMTA2LDYsMCwxMDAsMiwwLDEwNyw5LDAsCi0gICAgMTE0LDE4NCwwLDExNiw3LDAsMTA2LDgsMCwxMTYsNywwLDEzMSwxLDAsMTI1LAotICAgIDUsMCwxMjQsNCwwLDEwNiw2LDAsMTI0LDUsMCw5NSw5LDAsMTEzLDE4NCwKLSAgICAwLDExMCwwLDAsMTIxLDEzLDAsMTI0LDUsMCwxMjQsMSwwLDk1LDEwLDAsCi0gICAgODcsMTEzLDIyMSwwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsMjE3LDAsMSwxLAotICAgIDEsODksMTEzLDIyMSwwLDg4LDExMCwwLDAsMTI0LDIsMCwxMTUsMjUxLDAsMTE2LAotICAgIDEsMCwxMjQsMSwwLDEwMCw0LDAsMTAwLDIsMCwxMzEsMywwLDEwMCwyLAotICAgIDAsMTA3LDgsMCwxMTQsMzUsMSwxMjEsMTYsMCwxMjQsNCwwLDEwNiwxMSwwLAotICAgIDEyNCwxLDAsOTUsMTIsMCw4NywxMTMsMzUsMSw0LDExNiw0LDAsMTA3LDEwLAotICAgIDAsMTE0LDMxLDEsMSwxLDEsODksMTEzLDM1LDEsODgsMTEwLDAsMCwxMjEsCi0gICAgMTMsMCwxMjQsNCwwLDEyNCwxLDAsOTUsMTMsMCw4NywxMTAsMTgsMCw0LAotICAgIDExNiw0LDAsMTA3LDEwLDAsMTE0LDY4LDEsMSwxLDEsODksMTEwLDEsMCwKLSAgICA4OCwxMjQsMiwwLDExNSw5OSwxLDExNiwxLDAsMTI0LDEsMCwxMDAsNSwwLAotICAgIDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDE1NywxLDEyNCwKLSAgICA0LDAsMTA2LDYsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDE1NywxLDEyMSwxNiwKLSAgICAwLDEyNCw0LDAsMTA2LDYsMCwxMjQsMSwwLDk1LDE0LDAsODcsMTEzLDE1NCwKLSAgICAxLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsMTUwLDEsMSwxLDEsODksMTEzLAotICAgIDE1NCwxLDg4LDExMywxNTcsMSwxMTAsMCwwLDEyNCw0LDAsMTA2LDE1LDAsMTE0LAotICAgIDcxLDIsMTI0LDIsMCwxMTUsMTk2LDEsMTE2LDEsMCwxMjQsMSwwLDEwMCw2LAotICAgIDAsMTAwLDIsMCwxMzEsMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsMjM2LDEsCi0gICAgMTIxLDE2LDAsMTI0LDQsMCwxMDYsMTYsMCwxMjQsMSwwLDk1LDE3LDAsODcsCi0gICAgMTEzLDIzNiwxLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsMjMyLDEsMSwxLDEsCi0gICAgODksMTEzLDIzNiwxLDg4LDExMCwwLDAsMTI0LDIsMCwxMTUsMTAsMiwxMTYsMSwKLSAgICAwLDEyNCwxLDAsMTAwLDcsMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwKLSAgICAxMDcsOCwwLDExNCw3MSwyLDEyNCw0LDAsMTA2LDE4LDAsMTAwLDIsMCwxMDcsCi0gICAgOSwwLDExNCw2OCwyLDEyMSwxNiwwLDEyNCw0LDAsMTA2LDE4LDAsMTI0LDEsCi0gICAgMCw5NSwxOSwwLDg3LDExMyw2NSwyLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsCi0gICAgNjEsMiwxLDEsMSw4OSwxMTMsNjUsMiw4OCwxMTMsNjgsMiwxMTMsNzEsMiwKLSAgICAxMTAsMCwwLDEwMCwyLDAsODMsNDEsOCw5NywyOSwyLDAsMCw4MywxMDEsCi0gICAgMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiw5NywKLSAgICAxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ1LDExNCwxMDEsMTA4LDk3LDExNiwxMDEsMTAwLDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsCi0gICAgMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiw0NiwzMiwzMiw3MiwKLSAgICAxMDEsMTE0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDUsMTE1LDMyLDEwNCwKLSAgICAxMTEsMTE5LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDMyLDk3LDExNiwxMTYsMTE0LAotICAgIDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTA5LDk3LDExMiwzMiwxMTEsMTEwLDExNiwxMTEsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNTgsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTEwLDk3LDEwOSwxMDEsMzIsNDUsCi0gICAgNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsCi0gICAgOTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwKLSAgICA5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDEwLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsNDUsCi0gICAgNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLAotICAgIDk5LDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExNSwxMTIsCi0gICAgMTAxLDk5LDk1LDk1LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc5LDExMiwKLSAgICAxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDU4LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDExNSwxMTIsMTAxLDk5LDQ2LDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDMyLDQ1LDYyLDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDEwMiwxMDUsMTA4LDEwMSw5NSw5NSwzMiw0MCwKLSAgICAxMDUsMTAyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExNSwxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwKLSAgICA5NywxMTYsMTE2LDExNCwzMiwxMDUsMTE1LDMyLDExNiwxMTQsMTE3LDEwMSw0MSwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0Niw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDEwMCwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDEwMCw5NSw5NSwzMiw0MCwxMDUsMTAyLDMyLDk1LDk1LDEwMiwxMDUsMTA4LAotICAgIDEwMSw5NSw5NSwzMiw5NywxMDgsMTE1LDExMSwzMiwxMTUsMTAxLDExNiw0MSwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTUsMTE3LDk4LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LAotICAgIDExNiwxMDUsMTExLDExMCwxMTUsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsCi0gICAgOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTAxLDExNiwKLSAgICA0MSwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsNTcsMCwwLDAsCi0gICAgNzgsMTE0LDIwNSwwLDAsMCwyMTgsMTEsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDk1LDk1LDExNCwyNDcsMCwwLDAsMTE0LDIxMSwwLDAsMCwxMTQsMjQ1LDAsCi0gICAgMCwwLDQxLDIwLDExNCwxNzgsMCwwLDAsMTE0LDYyLDAsMCwwLDExNCw2NywKLSAgICAwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDIxMCwwLDAsMCwxMTQsMTcwLDAsCi0gICAgMCwwLDExNCwyMjEsMCwwLDAsMjE4LDE2LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDIxOCw3LDk1LDk1LDExMCwxMDEsMTE5LAotICAgIDk1LDk1LDIxOCw1LDk1LDExMiw5NywxMTYsMTA0LDExNCwyMDUsMCwwLDAsMTE0LDIzNCwKLSAgICAwLDAsMCwxMTQsMjUxLDAsMCwwLDExNCwyMDksMCwwLDAsMTE0LDI0NywwLAotICAgIDAsMCwxMTQsMjI3LDAsMCwwLDExNCwyMTgsMCwwLDAsMTE0LDIxMSwwLDAsCi0gICAgMCwxMTQsMjI2LDAsMCwwLDExNCwyNDUsMCwwLDAsNDEsNiwxMTQsNzEsMCwKLSAgICAwLDAsMTE0LDE4MCwwLDAsMCwxMTQsMjQ5LDAsMCwwLDExNCwyNTAsMCwwLAotICAgIDAsMTE0LDE3OCwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNywxMDUsMTEwLDEwNSwxMTYsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTcsMTE2LDExNiwxMTQsMTE1LDI1MSwzLDAsCi0gICAgMCwxMTUsODgsMCwwLDAsMCwxNyw5LDYsMTIsMSwyNCwxLDMsMSwKLSAgICAxNiwxLDEzLDEsOCwzLDMwLDEsOSwxLDEyLDIsMTUsMSwxNSwxLAotICAgIDE4LDEsMywxLDEzLDEsMTMsMSw4LDMsMzAsMSwzLDEsMTYsMSwKLSAgICAxMywxLDgsMywzLDEsMTMsMSwxMywxLDUsMywzMCwxLDE1LDEsCi0gICAgMywxLDE2LDEsMTMsMSwxMSwyLDksMiwzMCwxLDMsMSwxNiwxLAotICAgIDEzLDEsOCwzLDMwLDEsMTUsMSwzLDEsMTYsMSwxMywxLDEyMiwzMCwKLSAgICA5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDEwNSwxMTAsMTA1LAotICAgIDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NywxMTYsMTE2LDExNCwxMTUsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMTAxLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwKLSAgICAwLDExNiwxLDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwxLDAsMTMxLDIsMCwKLSAgICAxMTQsNDgsMCwxMjQsMSwwLDEwNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDIsMCwxMTAsNiwwLDEwMCwyLDAsMTI1LDIsMCwxMjQsMiwKLSAgICAwLDEwMCwyLDAsMTA3LDgsMCwxMTQsODQsMCwxMTYsNCwwLDEyNCwxLDAsCi0gICAgMTA2LDUsMCwxMzEsMSwwLDEyNSwyLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwKLSAgICA2LDAsMTI0LDIsMCwxMzEsMSwwLDEsMTI0LDIsMCw4Myw0MSwzLDEyMiwKLSAgICAxNTMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDUsMTE0LDEwMSwxMDgsOTcsMTE2LDEwMSwxMDAsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwKLSAgICAzMiw5NywxMTQsMTAxLDMyLDk3LDEwOCwxMTUsMTExLDMyLDExNSwxMDEsMTE2LDMyLDExOSwxMDUsCi0gICAgMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywKLSAgICAxMTIsMTEyLDExNCwxMTEsMTEyLDExNCwxMDUsOTcsMTE2LDEwMSwzMiwxMTgsOTcsMTA4LDExNywxMDEsCi0gICAgMTE1LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwyMTgsMTMsOTksMTE0LDEwMSw5NywKLSAgICAxMTYsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQxLDcsMTE0LDE3OCwwLDAsCi0gICAgMCwxMTQsNjAsMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMCwxLDAsMCwKLSAgICAxMTQsNjgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyNTUsMCwwLDAsNDEsCi0gICAgMywxMTQsNzEsMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsMTgwLDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKLSAgICA2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSw3NSw0LDAsMCwxMTUsMTYsMCwwLDAsCi0gICAgMCw3LDksMiwxOCwzLDIxLDIsNiwxLDEyLDQsMTgsMSwxMywxLAotICAgIDEyMiwxOSw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk5LAotICAgIDExNCwxMDEsOTcsMTE2LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLAotICAgIDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCwxLDEwMCwxLDAsODMsNDEsMiwxMjIsMTg5LDY4LDExMSwzMiwxMDEsMTE4LDEwMSwKLSAgICAxMTQsMTIxLDExNiwxMDQsMTA1LDExMCwxMDMsMzIsMTEwLDEwMSw5OSwxMDEsMTE1LDExNSw5NywxMTQsCi0gICAgMTIxLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsODQsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwKLSAgICAxMTEsMTAyLDMyLDk2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk2LDMyLDEwNSwxMTUsMzIsMTE3LAotICAgIDExNSwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsOTcsMTE0LDEwMywxMDEsCi0gICAgMTE2LDMyLDExMSwxMDIsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTExLDExMCw0NiwxMCwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCwzOSwxMTUsMzIsOTYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsNDAsNDEsOTYsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMywxMTQsMTc4LDAsMCwwLDExNCwKLSAgICAxNzAsMCwwLDAsMjE4LDExLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDUsOTUsMTAxLAotICAgIDEyMCwxMDEsOTksOTgsNCwwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwxOCwKLSAgICA5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDEwMSwxMjAsCi0gICAgMTAxLDk5LDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDExLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNywxLDAsMCwxMjQsMCwwLDEwNiwKLSAgICAwLDAsMTA2LDEsMCwxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwxMzEsMCwKLSAgICAwLDEsMTE2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTQzLDIyNiwwLDEsMTE2LAotICAgIDUsMCwxMDYsNiwwLDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwxLAotICAgIDAsMTA3LDksMCwxMTQsOTUsMCwxMDAsMSwwLDEwNiw4LDAsMTI0LDIsMCwKLSAgICAxMzEsMSwwLDEyNSwzLDAsMTE2LDksMCwxMjQsMywwLDEwMCwyLDAsMTI0LAotICAgIDIsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwwLAotICAgIDAsMTA2LDEwLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxODEsMCwxMjQsMCwwLAotICAgIDEwNiwwLDAsMTA2LDExLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxNTgsMCwxMTYsCi0gICAgOSwwLDEwMCw0LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwxMiwwLAotICAgIDEyNCwxLDAsMTAwLDUsMCwxMDAsNiwwLDEzMSwxLDEsMSwxMjQsMSwwLAotICAgIDgzLDEyNCwwLDAsMTA2LDEyLDAsMTI0LDEsMCwxMDAsNSwwLDEwMCw2LDAsCi0gICAgMTMxLDEsMSwxLDExNiwxMywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMTAsMCwKLSAgICAxMDAsNywwLDEzMSwyLDAsMTE1LDI0MywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsCi0gICAgMTAsMCwxMDYsMTQsMCwxMjQsMiwwLDEzMSwxLDAsMSwxMTAsMTMsMCwxMjQsCi0gICAgMCwwLDEwNiwxNSwwLDEyNCwxLDAsMTMxLDEsMCwxLDg3LDEwMCwzLDAsCi0gICAgODEsODgsMTE2LDUsMCwxMDYsNiwwLDEyNCwyLDAsMjUsODMsNDEsOCwxMjIsCi0gICAgNTEsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSwKLSAgICA5OSwzMiwxMDUsMTEwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwxMTAsMTAzLAotICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLAotICAgIDk3LDk5LDEwMSw0NiwxMjIsMzAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwKLSAgICAxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTUsMTE0LDY3LDAsMCwwLDc4LDEyMiwxNCwxMDksMTA1LDExNSwxMTUsCi0gICAgMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMjQ5LDAsMCwwLDg0LAotICAgIDExNCwyLDEsMCwwLDQxLDE2LDExNCwxNzgsMCwwLDAsMTE0LDY3LDAsMCwKLSAgICAwLDExNCwxMDYsMCwwLDAsMjE4LDEyLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTUsCi0gICAgMTA4LDExMSw5OSwxMDcsMTE0LDEwMywwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsCi0gICAgMCwwLDAsMTE0LDkzLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMTU0LDAsCi0gICAgMCwwLDExNCwxNzAsMCwwLDAsMTE0LDIyMSwwLDAsMCwxMTQsMjU1LDAsMCwKLSAgICAwLDExNCw2MCwwLDAsMCwyMTgsMTEsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE0LDMsMSwwLDAsNDEsNCwxMTQsNzEsMCwwLDAsMTE0LAotICAgIDE4MCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE3MiwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTc2LDAsCi0gICAgMCwwLDEwOCw0LDAsMCwxMTUsMzIsMCwwLDAsMCwyLDEyLDEsMTAsCi0gICAgMSwxMywxLDI0LDEsMTUsMSwyMSwxLDE4LDEsMTgsMSwyNywyLDE5LAotICAgIDEsNCwxLDE5LDEsMjEsNCwyMiwyLDE5LDEsMTIyLDE3LDk1LDgzLDExMiwKLSAgICAxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTAxLDEyMCwxMDEsOTksOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMjcsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDI0LDEsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwKLSAgICAwLDEyNCwxLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTA2LDMsMCwKLSAgICAxMzEsMSwwLDEsMTE2LDQsMCwxMDYsNSwwLDEyNCwxLDAsMTA2LDMsMCwKLSAgICAyNSwxMjUsMiwwLDExNiw2LDAsMTI0LDIsMCwxMDAsMSwwLDEwMCwwLDAsCi0gICAgMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyMSwxNiwwLDEyNCwKLSAgICAxLDAsMTA2LDEsMCwxMjQsMiwwLDk1LDcsMCw4NywxMTMsMTA4LDAsNCwKLSAgICAxMTYsOCwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTMsMTA4LDAsCi0gICAgODgsMTEwLDAsMCwxMTYsNiwwLDEyNCwyLDAsMTAwLDIsMCwxMDAsMCwwLAotICAgIDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMTUsMCwxMjEsNTksMCwxMjQsCi0gICAgMiwwLDEwNiw5LDAsMTI0LDIsMCw5NSwxMCwwLDExNiwxMSwwLDEyNCwyLAotICAgIDAsMTAwLDMsMCwxMzEsMiwwLDExNSwxOTAsMCwxMjQsMSwwLDEwNiwzLDAsCi0gICAgMTA2LDEyLDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI0LDIsMCwKLSAgICA5NSwxMCwwLDExMCwwLDAsODcsMTEzLDIxNSwwLDQsMTE2LDgsMCwxMDcsMTAsCi0gICAgMCwxMTQsMjExLDAsMSwxLDEsODksMTEzLDIxNSwwLDg4LDExMCwwLDAsMTE2LAotICAgIDYsMCwxMjQsMiwwLDEwMCw2LDAsMTAwLDAsMCwxMzEsMywwLDEwMCwwLAotICAgIDAsMTA3LDgsMCwxMTQsMjAsMSwxMjEsMTMsMCwxMjQsMSwwLDEyNCwyLDAsCi0gICAgOTUsMTMsMCw4NywxMTMsMjAsMSw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDE2LAotICAgIDEsMSwxLDEsODksMTEzLDIwLDEsODgsMTEwLDAsMCwxMjQsMiwwLDgzLAotICAgIDQxLDcsNzgsMTE0LDIwNSwwLDAsMCwxMTQsMjUxLDAsMCwwLDExNCwyNDcsMCwKLSAgICAwLDAsMTE0LDExNiwwLDAsMCwxMTQsODQsMCwwLDAsMTE0LDIwOSwwLDAsCi0gICAgMCw0MSwxNCwxMTQsMTc4LDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDUsMSwKLSAgICAwLDAsMTE0LDY3LDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywwLDAsCi0gICAgMCwxMTQsNjIsMCwwLDAsMTE0LDIwNSwwLDAsMCwxMTQsMjEwLDAsMCwwLAotICAgIDExNCw1NywwLDAsMCwxMTQsMjUxLDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsCi0gICAgMzIsMCwwLDAsMTE0LDIwOSwwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCwKLSAgICAxMTQsMTc4LDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDk4LDk3LDk5LDEwNywxMTksOTcsMTE0LDEwMCw5NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsCi0gICAgMTA1LDk4LDEwOCwxMDEsMTMyLDQsMCwwLDExNSw0MiwwLDAsMCwwLDQsOSwKLSAgICAxLDE5LDIsMTYsMSwyNCwxLDMsMSwxNiwxLDEzLDEsOCwxLDI0LAotICAgIDEsMyw0LDEyLDEsMTUsMSwzMiwxLDEzLDEsOCwxLDI0LDEsMywKLSAgICAxLDEzLDEsMTMsMSw4LDEsMTIyLDM4LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLAotICAgIDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTA4LDExMSw5NywxMDAsOTUsOTgsOTcsOTksMTA3LAotICAgIDExOSw5NywxMTQsMTAwLDk1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsMTA4LDEwMSw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMTc5LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsCi0gICAgMSwwLDEwMCwwLDAsMTA3LDksMCwxMTQsNTIsMCwxMTYsMiwwLDEyNCwwLAotICAgIDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNTIsMCwKLSAgICAxMjQsMCwwLDEwNiwzLDAsMTMxLDAsMCw4MywxMTAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDQsMCwxMzEsMCwwLDEyNSwxLDAsMTE2LDUsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTQzLDg0LDAsMSwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDAsCi0gICAgMCwwLDEwNyw4LDAsMTE0LDE0MywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsNiwKLSAgICAwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTU2LDAsMTE2LDcsMCwxMDAsMiwwLAotICAgIDEwMCwzLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiw4LDAsMTMxLDEsMSwxMzAsCi0gICAgMSwwLDExMywxNTYsMCwxMTAsMTMsMCwxMjQsMCwwLDEwNiw5LDAsMTI0LDEsCi0gICAgMCwxMzEsMSwwLDEsODcsMTAwLDAsMCw4MSw4OCwxMTYsMTAsMCwxMDYsMTEsCi0gICAgMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDgsMCwyNSw4Myw0MSw0LDc4LDExNCwKLSAgICAyLDEsMCwwLDEyMiwxNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTQsNjcsMCwwLDAsNDEsMTIsMTE0LDE3OCwwLDAsMCwKLSAgICAxMTQsMTcwLDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsNiwxLDAsMCwxMTQsCi0gICAgMSwxLDAsMCwxMTQsMjEzLDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDE1NCwKLSAgICAwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDMsMSwwLDAsMTE0LDcsMCwKLSAgICAwLDAsMTE0LDczLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxODAsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMjE4LDE0LDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsCi0gICAgMTAxLDEwMCwxNjIsNCwwLDAsMTE1LDIwLDAsMCwwLDAsMiwxOCwyLDIxLAotICAgIDEsMTMsMiwxMiwxLDEzLDEsMTgsMSwxOCwxLDMwLDMsMTksNSwxMjIsCi0gICAgMjcsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5NSwxMDgsCi0gICAgMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsOTksMSwwLDAsCi0gICAgMCwwLDAsMCwwLDEsMCwwLDAsOCwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMSwKLSAgICAxMTYsMiwwLDEyNCwwLDAsMTA2LDMsMCwxMDYsNCwwLDEzMSwxLDAsMTQzLAotICAgIDE1LDAsMSwxMjQsMCwwLDEwNiw1LDAsMTMxLDAsMCw4Myw4NywxMDAsMSwKLSAgICAwLDgxLDg4LDEwMCwxLDAsODMsNDEsMiwxMjIsMjA3LDgyLDEwMSwxMTYsMTE3LDExNCwKLSAgICAxMTAsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLAotICAgIDk4LDEwNiwxMDEsOTksMTE2LDQ0LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsOTgsMTIxLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDM5LDExNSwzMiwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsCi0gICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywKLSAgICAxMDAsMTAwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwzMiwxMTIsOTcsMTE0LDEwMSwKLSAgICAxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwKLSAgICA5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDEwOCwxMTQsMTAxLAotICAgIDk3LDEwMCwxMjEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsNDQsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMDUsMTEwLAotICAgIDEwMywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDMsMTAxLDExNiwxMTUsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsOTksMTA4LDExMSw5OCw5OCwxMDEsMTE0LDEwMSwxMDAsNDYsCi0gICAgMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsNiwxMTQsMTA2LDAsCi0gICAgMCwwLDExNCw0LDEsMCwwLDExNCwxMDMsMCwwLDAsMTE0LDE3OCwwLDAsCi0gICAgMCwxMTQsNjcsMCwwLDAsMTE0LDcsMSwwLDAsNDEsMSwxMTQsNzEsMCwKLSAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDE3NywwLDAsMCwxODUsNCwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICA5LDEwLDEsMTksMSwxMjIsMTcsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwKLSAgICAxMTEsMTAwLDExNSw0NiwxMDgsMTExLDk3LDEwMCw3OCw0MSwxMywxMTQsNTcsMCwwLDAsCi0gICAgMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LAotICAgIDcyLDAsMCwwLDExNCwyMDYsMCwwLDAsMTE0LDI1NSwwLDAsMCwxMTQsMSwKLSAgICAxLDAsMCwxMTQsMywxLDAsMCwxMTQsMTc2LDAsMCwwLDExNCw2LDEsCi0gICAgMCwwLDExNCw3LDEsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCi0gICAgMTE0LDE3NSwwLDAsMCwyMjUsMywwLDAsMTE1LDIwLDAsMCwwLDEyLDMsCi0gICAgNiw0LDEyLDMsMTIsMTYsMjQsODAsMTIsMjMsMTIsMTAsMTIsMjQsMTIsMzAsCi0gICAgMTIsMjMsMTE0LDE3NSwwLDAsMCw5OSw0LDAsMCwwLDAsMCwwLDAsCi0gICAgNiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsMjAxLDAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLDAsMTI1LDQsMCwKLSAgICAxMjQsMCwwLDEwNiwwLDAsMTAwLDIsMCwxMzEsMSwwLDEyNSw1LDAsMTI0LAotICAgIDQsMCwxMTUsMTAyLDAsMTI0LDUsMCwxMTQsNTQsMCwxMjQsNSwwLDEwNiwxLAotICAgIDAsMTI1LDQsMCwxMTMsMTAyLDAsMTI0LDIsMCwxMjQsMywwLDEwNywyLDAsCi0gICAgMTE0LDg0LDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsCi0gICAgNCwwLDExMywxMDIsMCwxMTYsMywwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwKLSAgICAwLDEyNSw0LDAsMTEwLDAsMCwxMjQsNSwwLDExNSwxMzIsMCwxMTYsNCwwLAotICAgIDEyNCwxLDAsMTI0LDIsMCwxMDAsMywwLDEyNCw0LDAsMTMxLDIsMSwxMjUsCi0gICAgNSwwLDExMCwwLDAsMTIxLDQ0LDAsMTI0LDUsMCwxMjQsMCwwLDEwMCwyLAotICAgIDAsNjAsMTI0LDQsMCwxMjQsMCwwLDEwMCwxLDAsNjAsMTI0LDIsMCwxMjQsCi0gICAgMCwwLDEwMCw0LDAsNjAsMTI0LDMsMCwxMjQsMCwwLDEwMCw1LDAsNjAsCi0gICAgODcsMTEwLDE4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwxOTYsMCwxLDEsCi0gICAgMSw4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsNiw3OCwxMTQsMjA1LDAsCi0gICAgMCwwLDExNCwyMDksMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMjExLDAsMCwKLSAgICAwLDExNCwyNDUsMCwwLDAsNDEsNiwxMTQsOTMsMCwwLDAsMTE0LDE3MCwwLAotICAgIDAsMCwyMTgsMjAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDE2LDgzLDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE0LDI0MCwwLDAsMCwxMTQsCi0gICAgMjA4LDAsMCwwLDQxLDYsOTAsMiwxMTAsMTE1LDExNCw2NywwLDAsMCw5MCwKLSAgICA4LDExMiw5NywxMTYsMTA0LDExMCw5NywxMDksMTAxLDkwLDksOTksMTEyLDk3LDExNiwxMDQsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE0LDE3MCwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LAotICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNCw5NSwKLSAgICAxMDIsMTA1LDEyMCw5NSwxMTcsMTEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5OSw0LDAsCi0gICAgMCwxMTUsMzQsMCwwLDAsMCwyLDE1LDEsMTUsMSw2LDEsNiwxLAotICAgIDEyLDEsMTIsMSwxOCwyLDE4LDEsNiwxLDI0LDEsMywxLDEwLDEsCi0gICAgMTAsMSwxMCwxLDE0LDEsMTMsMiwxMTQsMTAsMSwwLDAsOTksMCwwLAotICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw2NCwwLAotICAgIDAsMCwxMTUsMTgxLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsCi0gICAgOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsMTAwLDIsMCwxMDAsCi0gICAgMywwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNCwKLSAgICAwLDEwMCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwyLDAsMTMxLDEsMCwKLSAgICA5MCw3LDAsMTAxLDYsMCwxMDAsNCwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsCi0gICAgMSwwLDEzMSwxLDAsOTAsOCwwLDEwMSw2LDAsMTAxLDksMCwxMDAsOSwKLSAgICAwLDEwMCwxMCwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEwLDAsCi0gICAgMTAxLDYsMCwxMDEsOSwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDExLDAsMTAxLDYsMCwxMDEsOSwwLDEwMCwxMywKLSAgICAwLDEwMCwxNCwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEyLDAsCi0gICAgMTAxLDYsMCwxMDEsOSwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDEzLDAsMTAwLDQsMCw4Myw0MSwxNywyMTgsMTUsCi0gICAgNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDEyMiwKLSAgICAxNDQsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMDIsMTExLDExNCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsMTA4LDEwOCwKLSAgICAzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTA1LDExNiwKLSAgICAxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwxMTYsOTcsCi0gICAgMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwzMiw5NywKLSAgICAxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LDExNiwxMDEsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsMTIyLDExNSw4MiwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwKLSAgICAxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NCwKLSAgICAxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSw5Nyw5OSwxMDQsMTA1LDExMCwKLSAgICAxMDEsMTE0LDEyMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA2LDExMSw5OCwKLSAgICAzMiwxMDUsMTE2LDExNSwxMDEsMTA4LDEwMiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwxMjIsMjQsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsCi0gICAgMzIsNDAsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDEsNjIsNDEsMiwxMTQsNDcsCi0gICAgMCwwLDAsMTE0LDU3LDAsMCwwLDQxLDEsMTE0LDE4MCwwLDAsMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjA2LAotICAgIDAsMCwwLDIzMyw0LDAsMCwxMTUsMiwwLDAsMCwwLDcsMTIyLDI3LAotICAgIDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsNzgsOTksNCwwLDAsCi0gICAgMCwwLDAsMCwwLDQsMCwwLDAsNSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNTgsMCwwLDAsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LAotICAgIDE2LDAsMTAwLDAsMCw4MywxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDExNCw1MCwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwxLAotICAgIDAsMTAwLDIsMCwxMzEsMiwxLDgzLDEwMCwwLDAsODMsMTAwLDAsMCw4MywKLSAgICA0MSwzLDc4LDExNCwyMTgsMCwwLDAsMTIyLDgsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LAotICAgIDEwNSwxMTAsNDEsMywxMTQsMTA2LDAsMCwwLDkwLDEwLDEwNSwxMTUsOTUsOTgsMTE3LAotICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE0LDE3NCwwLDAsMCw0MSw0LDIxOCwzLDk5LDEwOCwKLSAgICAxMTUsMTE0LDE1OSwwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDYsMTE2LDk3LDExNCwKLSAgICAxMDMsMTAxLDExNiwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwyMTgsOSwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksMjQyLDQsMCwKLSAgICAwLDExNSwxMCwwLDAsMCwwLDIsMTIsMSw0LDEsMTUsMSwxOSwyLAotICAgIDEyMiwyNSw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKLSAgICAxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwwLDAsCi0gICAgMCwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDQxLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEyNCwyLAotICAgIDAsMTMxLDIsMCwxMjUsMywwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLAotICAgIDExNCwzNywwLDEyNCwzLDAsMTA2LDEsMCw4MywxMDAsMSwwLDgzLDQxLDIsCi0gICAgMTIyLDE3NSw3MCwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsCi0gICAgNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksMzIsMTA1LAotICAgIDExNSwzMiwxMDEsMTE4LDEwMSwxMTQsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwKLSAgICAzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5NywxMTQsOTksMTA0LAotICAgIDMyLDEwNSwxMTUsMzIsOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LDEwMSwxMDAsMzIsOTcsCi0gICAgMzIsMTAyLDk3LDEwNSwxMDgsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LAotICAgIDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LAotICAgIDExNSwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDMyLDEwNSwKLSAgICAxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDc4LDQxLDIsMTE0LDE0LDEsMCwwLDExNCwxNzAsMCwwLDAsNDEsNCwKLSAgICAxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAotICAgIDE3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKLSAgICAwLDAsMCwyMTgsMTEsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDI1MSw0LDAsMCwxMTUsNCwwLDAsMCwwLDksMTgsMSwxMjIsMjcsNjYsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwKLSAgICAxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsCi0gICAgMCwwLDAsMywwLDAsMCwxMCwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgNTksMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTQzLDIzLDAsCi0gICAgMSwxMTYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwyLDAsCi0gICAgMTI1LDIsMCw4NywxMDAsMSwwLDgxLDg4LDEyNCwwLDAsMTI0LDIsMCw5NSwKLSAgICA0LDAsMTAwLDIsMCwxMjQsMiwwLDk1LDUsMCwxMjQsMiwwLDgzLDQxLAotICAgIDMsMTIyLDIzLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LAotICAgIDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsMTE0LDMwLDAsMCwwLAotICAgIDQxLDYsMTE0LDY5LDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDEwNiwwLDAsCi0gICAgMCw5MCwxMiwxMDUsMTEwLDEwNSwxMTYsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE0LAotICAgIDIwNSwwLDAsMCwxMTQsMjUxLDAsMCwwLDQxLDMsMTE0LDEyLDEsMCwwLAotICAgIDExNCwxNTksMCwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNSwxLDAsMCw3LDUsCi0gICAgMCwwLDExNSwxMCwwLDAsMCwwLDYsMTMsMSwyNCwxLDksMSw5LAotICAgIDEsMTIyLDI3LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLAorICAgIDQsMCwxMjQsMSwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTA1LDAsMTIxLDEzLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDEyNSwxLDAsODcsMTEwLDE4LDAsNCwxMTYsCisgICAgMSwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTAsMSwwLDg4LAorICAgIDEyMSwxMywwLDEyNCwwLDAsMTA2LDQsMCwxMjUsNSwwLDg3LDExMCwyNCwwLAorICAgIDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMTQ0LDAsMSwxLDEsMTAwLDAsMCwKKyAgICAxMjUsNSwwLDg5LDExMCwxLDAsODgsMTI0LDIsMCwxMDAsMCwwLDEwNyw4LAorICAgIDAsMTE0LDIxOCwwLDEyNCw1LDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMTIsMCwKKyAgICAxMjEsMTMsMCwxMjQsMSwwLDEwNiw1LDAsMTI1LDIsMCw4NywxMTMsMjE4LDAsCisgICAgNCwxMTYsMSwwLDEwNywxMCwwLDExNCwyMDgsMCwxLDEsMSwxMDAsMCwwLAorICAgIDEyNSwyLDAsODksMTEzLDIxOCwwLDg4LDExMCw2LDAsMTI0LDUsMCwxMjUsMiwKKyAgICAwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDYsMCwxMjUsNiwwLDg3LDExMCwyNCwKKyAgICAwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMSwxLDEsMSwxLDEwMCwwLAorICAgIDAsMTI1LDYsMCw4OSwxMTAsMSwwLDg4LDEyMSwxOSwwLDExNiw3LDAsMTI0LAorICAgIDAsMCwxMDYsOCwwLDEzMSwxLDAsMTI1LDcsMCw4NywxMTAsMjQsMCw0LAorICAgIDExNiwxLDAsMTA3LDEwLDAsMTE0LDQ3LDEsMSwxLDEsMTAwLDAsMCwxMjUsCisgICAgNywwLDg5LDExMCwxLDAsODgsMTE2LDksMCwxMjQsNCwwLDEyNCwxLDAsCisgICAgMTAwLDEsMCwxMjQsMiwwLDEzMSwyLDEsMTI1LDMsMCwxMjQsNSwwLDEwMCwKKyAgICAwLDAsMTA3LDgsMCwxMTQsODcsMSwxMDAsMiwwLDExMCwzLDAsMTAwLDMsCisgICAgMCwxMjQsMywwLDk1LDEwLDAsMTI0LDYsMCwxMjQsMywwLDk1LDExLDAsCisgICAgMTI0LDcsMCwxMjQsMywwLDk1LDEyLDAsMTI0LDMsMCw4Myw0MSw0LDc4LAorICAgIDExNCwxMDcsMCwwLDAsNzAsODQsNDEsMTMsMTE0LDk1LDAsMCwwLDExNCw5NiwKKyAgICAwLDAsMCwxMTQsMSwwLDAsMCwxMTQsOTEsMCwwLDAsMTE0LDk4LDAsCisgICAgMCwwLDkwLDcsOTUsNzksODIsNzMsNzEsNzMsNzgsMjE4LDEwLDk1LDk1LDk5LAorICAgIDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LDIxOCw0LDEwOCwxMDUsMTE1LDExNiwyMTgsOCw5NSwKKyAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTQsMTA2LDAsMCwwLDExNCwxMTEsMCwwLAorICAgIDAsMTE0LDExNiwwLDAsMCwxMTQsMTEwLDAsMCwwLDQxLDgsMTE0LDg5LDAsCisgICAgMCwwLDExNCw5OSwwLDAsMCwxMTQsMTA3LDAsMCwwLDExNCw4OCwwLDAsCisgICAgMCwxMTQsMTUsMCwwLDAsOTAsOCwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwKKyAgICAxMTQsMTE2LDAsMCwwLDExNCwxMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwKKyAgICAxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMjE4LDE3LDk1LDExNSwxMTIsMTAxLDk5LAorICAgIDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMDksMSwwLDAsCisgICAgMTE1LDcyLDAsMCwwLDAsMiwzLDEsMTMsMSwxMywxLDUsMiwxMiwKKyAgICAxLDQsMiw5LDEsMTIsMSwzLDEsMTMsMSwxMywyLDUsMSwzLAorICAgIDEsMTMsMSwxMywxLDExLDEsMTIsMSwxMiwxLDMsMSwxMywxLDEzLAorICAgIDEsMTQsMiw2LDEsMywxLDEzLDEsMTMsMSwxMSwxLDMsMSwxOSwKKyAgICAxLDEzLDEsMTEsMiwyMSwxLDI3LDEsOSwxLDksMSwxMTQsMTMyLDAsCisgICAgMCwwLDIxOCw4LDExMSwxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsNzAsOTksMiwwLAorICAgIDAsMCwxLDAsMCwwLDUsMCwwLDAsNTksMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDU0LDIsMCwwLDEyNCwyLDAsMTE1LDMwLDAsMTE2LDAsMCwKKyAgICAxMjQsMSwwLDEwMCwxLDAsMTAwLDAsMCwxMzEsMywwLDEwMCwwLDAsMTA3LAorICAgIDgsMCwxMTQsNjcsMCwxMjEsMTYsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsCisgICAgMCw5NSwyLDAsODcsMTEwLDE4LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCwKKyAgICA2NiwwLDEsMSwxLDg5LDExMCwxLDAsODgsMTI0LDIsMCwxMTUsOTcsMCwKKyAgICAxMTYsMCwwLDEyNCwxLDAsMTAwLDIsMCwxMDAsMCwwLDEzMSwzLDAsMTAwLAorICAgIDAsMCwxMDcsOCwwLDExNCwyMjEsMCwxMjQsMCwwLDEwNiw0LDAsMTI1LDMsCisgICAgMCwxMjQsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTg3LDAsMTI0LDAsMCwKKyAgICAxMDYsNSwwLDEwMCwwLDAsMTA3LDksMCwxMTQsMTg3LDAsMTE2LDYsMCwxMDAsCisgICAgMCwwLDEwNyw4LDAsMTE0LDE1MSwwLDExNiw3LDAsMTMwLDEsMCwxMTYsNiwKKyAgICAwLDEwNiw4LDAsMTI1LDQsMCwxMjQsNCwwLDEwNiw5LDAsMTI0LDQsMCwKKyAgICAxMzEsMSwwLDEyNSwzLDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwzLDAsOTUsCisgICAgMTAsMCwxMjEsMTMsMCwxMjQsMywwLDEyNCwxLDAsOTUsMTEsMCw4NywxMTAsCisgICAgMTgsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDIyMCwwLDEsMSwxLDg5LAorICAgIDExMCwxLDAsODgsMTI0LDIsMCwxMTUsMjUxLDAsMTE2LDAsMCwxMjQsMSwwLAorICAgIDEwMCwzLDAsMTAwLDAsMCwxMzEsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsCisgICAgMzIsMSwxMjEsMTYsMCwxMjQsMCwwLDEwNiwxMiwwLDEyNCwxLDAsOTUsMTMsCisgICAgMCw4NywxMTAsMTgsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDMxLDEsMSwKKyAgICAxLDEsODksMTEwLDEsMCw4OCwxMjEsMTMsMCwxMjQsMCwwLDEyNCwxLDAsCisgICAgOTUsMTQsMCw4NywxMTAsMTgsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDY1LAorICAgIDEsMSwxLDEsODksMTEwLDEsMCw4OCwxMjQsMiwwLDExNSw5NiwxLDExNiwKKyAgICAwLDAsMTI0LDEsMCwxMDAsNCwwLDEwMCwwLDAsMTMxLDMsMCwxMDAsMCwKKyAgICAwLDEwNyw4LDAsMTE0LDE0OCwxLDEyNCwwLDAsMTA2LDUsMCwxMDAsMCwwLAorICAgIDEwNyw5LDAsMTE0LDE0OCwxLDEyMSwxNiwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsCisgICAgMSwwLDk1LDE1LDAsODcsMTEwLDE4LDAsNCwxMTYsMywwLDEwNywxMCwwLAorICAgIDExNCwxNDcsMSwxLDEsMSw4OSwxMTAsMSwwLDg4LDEyNCwwLDAsMTA2LDE2LAorICAgIDAsMTE0LDUwLDIsMTI0LDIsMCwxMTUsMTg3LDEsMTE2LDAsMCwxMjQsMSwwLAorICAgIDEwMCw1LDAsMTAwLDAsMCwxMzEsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsCisgICAgMjI0LDEsMTIxLDE2LDAsMTI0LDAsMCwxMDYsMTcsMCwxMjQsMSwwLDk1LDE4LAorICAgIDAsODcsMTEwLDE4LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCwyMjMsMSwxLAorICAgIDEsMSw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTE1LDI1NCwxLDExNiwwLDAsCisgICAgMTI0LDEsMCwxMDAsNiwwLDEwMCwwLDAsMTMxLDMsMCwxMDAsMCwwLDEwNywKKyAgICA4LDAsMTE0LDUwLDIsMTI0LDAsMCwxMDYsMTksMCwxMDAsMCwwLDEwNyw5LAorICAgIDAsMTE0LDUwLDIsMTIxLDE2LDAsMTI0LDAsMCwxMDYsMTksMCwxMjQsMSwwLAorICAgIDk1LDIwLDAsODcsMTEwLDE4LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCw0OSwKKyAgICAyLDEsMSwxLDg5LDExMCwxLDAsODgsMTI0LDEsMCw4Myw0MSw3LDc4LAorICAgIDExNCwxLDAsMCwwLDExNCw5MSwwLDAsMCwyMTgsMTEsOTUsOTUsMTEyLDk3LAorICAgIDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNCwxMzEsMCwwLDAsMTE0LDk4LDAsMCwKKyAgICAwLDExNCwxMjksMCwwLDAsNDEsMjEsMTE0LDYsMCwwLDAsMTE0LDE1LDAsCisgICAgMCwwLDExNCwxLDAsMCwwLDExNCw5NiwwLDAsMCwxMTQsOTksMCwwLAorICAgIDAsMTE0LDExMCwwLDAsMCwxMTQsMTE5LDAsMCwwLDExNCwxMjAsMCwwLDAsCisgICAgMjE4LDE2LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDIxOCw3LDk1LDk1LDExMCwxMDEsMTE5LDk1LDk1LDkwLDUsOTUsMTEyLDk3LAorICAgIDExNiwxMDQsMTE0LDkxLDAsMCwwLDExNCwxMjMsMCwwLDAsMTE0LDEzNCwwLDAsCisgICAgMCwxMTQsOTUsMCwwLDAsMTE0LDEzMSwwLDAsMCwxMTQsMTE3LDAsMCwwLAorICAgIDExNCwxMDcsMCwwLDAsMTE0LDk4LDAsMCwwLDExNCwxMTYsMCwwLDAsMTE0LAorICAgIDEyOSwwLDAsMCw0MSw1LDExNCw4OCwwLDAsMCwxMTQsODksMCwwLDAsCisgICAgMTE0LDEzMywwLDAsMCwxMTQsOTksMCwwLDAsMTE0LDEzNSwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsMTgsCisgICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsCisgICAgMTE0LDExNSwyNTQsMSwwLDAsMTE1LDkyLDAsMCwwLDAsNCwzMCwxLDMsCisgICAgMSwxNiwxLDEzLDEsNSwyLDMwLDEsOSwxLDEyLDIsMTUsMSwxMiwKKyAgICAxLDYsMSw5LDIsMTUsMSwxMiwxLDMsMSwxMywxLDEzLDEsNSwKKyAgICAyLDMwLDEsMywxLDE2LDEsMTMsMSw1LDIsMywxLDEzLDEsMTMsCisgICAgMSw1LDIsMzAsMSwxNSwxLDMsMSwxNiwxLDEzLDEsNSwyLDksCisgICAgMSwzMCwxLDMsMSwxNiwxLDEzLDEsNSwyLDMwLDEsMTUsMSwzLAorICAgIDEsMTYsMSwxMywxLDUsMSwxMTQsMTM3LDAsMCwwLDk5LDEsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDUsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDEyOSwwLDAsMCwxMDAsMSwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsCisgICAgMCwwLDEwNiwxLDAsMTAwLDIsMCwxMzEsMiwwLDExNCw0NSwwLDEyNCwwLAorICAgIDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsMSwwLAorICAgIDExMCw0MCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEwMCwzLDAsMTMxLAorICAgIDIsMCwxMTQsODUsMCwxMTYsMywwLDEwNiw0LDAsMTAwLDQsMCwxMTYsNSwKKyAgICAwLDEwMCw1LDAsMTAwLDYsMCwxMzEsMiwxLDEsMTI0LDEsMCwxMDAsMSwKKyAgICAwLDEwNyw4LDAsMTE0LDExMiwwLDExNiw2LDAsMTI0LDAsMCwxMDYsNywwLAorICAgIDEzMSwxLDAsMTI1LDEsMCwxMTYsOCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsCisgICAgMiwwLDEsMTI0LDEsMCw4Myw0MSw3LDEyMiw0Myw2NywxMTQsMTAxLDk3LDExNiwKKyAgICAxMDEsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsOTcsMTE1LDEwMSwxMDAsCisgICAgMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsMTE0LDExMSwxMTgsMTA1LDEwMCwxMDEsMTAwLAorICAgIDMyLDExNSwxMTIsMTAxLDk5LDQ2LDc4LDIxOCwxMyw5OSwxMTQsMTAxLDk3LDExNiwxMDEsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjE4LDExLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDEyMiw4NywxMTUsMTE2LDk3LDExNCwxMTYsMTA1LDExMCwxMDMsMzIsMTA1LDExMCwKKyAgICAzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDUxLDQ2LDU0LDQ0LDMyLDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsMTE1LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTA1LDExMCwxMDMsMzIsMTAxLDEyMCwKKyAgICAxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsNDEsMzIsMTA5LDExNywxMTUsMTE2LAorICAgIDMyLDk3LDEwOCwxMTUsMTExLDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDMyLDk5LDExNCwxMDEsCisgICAgOTcsMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCw0MSw5MCwxMCwxMTUsMTE2LAorICAgIDk3LDk5LDEwNywxMDgsMTAxLDExOCwxMDEsMTA4LDIzMywyLDAsMCwwLDQxLDksMTE0LAorICAgIDQsMCwwLDAsMTE0LDk5LDAsMCwwLDExNCwxMzgsMCwwLDAsMjE4LDksCisgICAgOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDIxOCw0LDExOSw5NywxMTQsMTEwLDIxOCwKKyAgICAxOCw2OCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDg3LDk3LDExNCwxMTAsCisgICAgMTA1LDExMCwxMDMsMTE0LDE2LDAsMCwwLDExNCwxNSwwLDAsMCwxMTQsMTM3LDAsCisgICAgMCwwLDQxLDIsMTE0LDg4LDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsMTAsCisgICAgMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsMTYsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTIsMTAxLDk5LDU4LAorICAgIDIsMCwwLDExNSwyMCwwLDAsMCwwLDMsNiwxLDE4LDMsMjEsMSwKKyAgICAxOCwxLDksMiwxMywxLDEyLDEsMTUsMSwxMywxLDExNCwxNDQsMCwwLAorICAgIDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTQ5LDAsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDIxLDAsMTAwLDIsMCwxMTAsNiwwLAorICAgIDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwwLDEyNCwwLDAsMTA2LDEsMCwxMDAsCisgICAgMSwwLDEwNyw4LDAsMTE0LDk1LDAsMTI0LDAsMCwxMDYsMiwwLDEwMCwxLAorICAgIDAsMTA3LDgsMCwxMTQsNzMsMCwxMDAsMywwLDEwNiwzLDAsMTI0LDEsMCwKKyAgICAxMzEsMSwwLDgzLDEwMCw0LDAsMTA2LDMsMCwxMjQsMSwwLDEyNCwwLDAsCisgICAgMTA2LDIsMCwxMzEsMiwwLDgzLDExMCw1MCwwLDEyNCwwLDAsMTA2LDQsMCwKKyAgICAxMTQsMTIzLDAsMTAwLDUsMCwxMDYsMywwLDEyNCwxLDAsMTI0LDAsMCwxMDYsCisgICAgMSwwLDEzMSwyLDAsODMsMTAwLDYsMCwxMDYsMywwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDIsMCw4MywxMDAsMSwwLDgzLAorICAgIDQxLDcsMTIyLDM4LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LAorICAgIDEwMSwxMTIsMTE0LDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsMTE0LDkzLDAsMCwwLAorICAgIDEyMiwxMyw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsCisgICAgMjAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLAorICAgIDMzLDExNCwxMjUsNDEsNjIsMTIyLDIzLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywKKyAgICAzMywxMTQsMTI1LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMTgsCisgICAgNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDEyNSwKKyAgICA0MSw2Miw0MSw1LDExNCwxNSwwLDAsMCwxMTQsMTA3LDAsMCwwLDExNCw5OSwKKyAgICAwLDAsMCwxMTQsNTAsMCwwLDAsMTE0LDExNywwLDAsMCw0MSwyLDExNCwKKyAgICA4OCwwLDAsMCwxMTQsMTUsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwKKyAgICAwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDk3LDAsMCwwLDc2LDIsMCwKKyAgICAwLDExNSwxNiwwLDAsMCwwLDMsMzAsMSwxNSwxLDE1LDEsMTMsMiwKKyAgICAyMiwyLDksMSwxOSwyLDExNCw5NywwLDAsMCw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsNCwwLDAsMCwxMiwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMjUzLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMiwwLDExNiwxLAorICAgIDAsMTA2LDIsMCwxMzEsMCwwLDEsMTE2LDMsMCwxMjQsMiwwLDEzMSwxLAorICAgIDAsMTQzLDIwOCwwLDEsMTE2LDQsMCwxMDYsNSwwLDEwNiw2LDAsMTI0LDIsCisgICAgMCwxMzEsMSwwLDEyNCwxLDAsMTA3LDksMCwxMTQsODksMCwxMDAsMSwwLAorICAgIDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsMTE2LDgsMCwxMjQsCisgICAgMywwLDEwMCwyLDAsMTI0LDIsMCwxMzEsMSwxLDEzMCwxLDAsMTI0LDAsCisgICAgMCwxMDYsOSwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsMTYzLDAsMTI0LDAsMCwKKyAgICAxMDYsMTAsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDE0MCwwLDExNiw4LDAsMTAwLAorICAgIDQsMCwxMDAsMiwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMSwxLDEzMCwxLAorICAgIDAsMTE2LDExLDAsMTI0LDAsMCwxMjQsMSwwLDEwMCw1LDAsMTAwLDYsMCwKKyAgICAxMzEsMiwxLDEsMTI0LDEsMCw4MywxMTYsMTEsMCwxMjQsMCwwLDEyNCwxLAorICAgIDAsMTAwLDUsMCwxMDAsNiwwLDEzMSwyLDEsMSwxMTYsMTIsMCwxMjQsMCwKKyAgICAwLDEwNiw5LDAsMTAwLDcsMCwxMzEsMiwwLDExNSwyMTksMCwxMjQsMCwwLAorICAgIDEwNiw5LDAsMTA2LDEzLDAsMTI0LDIsMCwxMzEsMSwwLDEsMTEwLDE2LDAsCisgICAgMTI0LDAsMCwxMDYsOSwwLDEwNiwxNCwwLDEyNCwxLDAsMTMxLDEsMCwxLAorICAgIDg3LDEwMCwzLDAsODEsODIsODgsMTE2LDQsMCwxMDYsNSwwLDEyNCwyLDAsCisgICAgMjUsODMsNDEsOCwxMjIsNTEsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiwxMDUsMTEwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDEwNSwKKyAgICAxMTUsMTE2LDEwNSwxMTAsMTAzLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTAsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0NiwxMjIsMzAsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTUsMTIxLAorICAgIDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE0LDE1LDAsMCwwLDc4LDEyMiwKKyAgICAxNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsCisgICAgMTMzLDAsMCwwLDg0LDExNCwxMzksMCwwLDAsNDEsMTUsMTE0LDE1LDAsMCwKKyAgICAwLDExNCw1NywwLDAsMCwyMTgsMTIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwKKyAgICAxMDgsMTExLDk5LDEwNywxMTQsNTQsMCwwLDAsMTE0LDE0LDAsMCwwLDExNCwyMSwKKyAgICAwLDAsMCwxMTQsNDIsMCwwLDAsMTE0LDUwLDAsMCwwLDExNCw3NywwLAorICAgIDAsMCwxMTQsOTksMCwwLDAsMTE0LDExMCwwLDAsMCwxMTQsMTM3LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDIxOCwxMSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTQsMTM5LDAsMCwwLDQxLDQsMTE0LDg4LDAsMCwwLDExNCwKKyAgICA4OSwwLDAsMCwxMTQsMTUsMCwwLDAsMjE4LDMsMTA5LDExNSwxMDMsMTE0LDEwLAorICAgIDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDg2LDAsCisgICAgMCwwLDkzLDIsMCwwLDExNSwzMiwwLDAsMCwwLDIsOSwxLDEwLAorICAgIDEsMTMsMSwyNCwxLDE1LDEsMTgsMSwxNSwxLDE1LDEsMjEsMiwxOSwKKyAgICAxLDQsMSwxOSwxLDE4LDQsMTksMiwyMywxLDExNCw4NiwwLDAsMCwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyNywwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMywxLDAsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTA2LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTMxLDEsMCwxLDExNiwzLDAsCisgICAgMTA2LDQsMCwxMjQsMCwwLDEwNiwyLDAsMjUsMTI1LDEsMCwxMTYsNSwwLAorICAgIDEyNCwxLDAsMTAwLDEsMCwxMDAsMCwwLDEzMSwzLDAsMTAwLDAsMCwxMDcsCisgICAgOCwwLDExNCw5NiwwLDEyMSwxNiwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwKKyAgICAwLDk1LDYsMCw4NywxMTAsMTgsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LAorICAgIDk1LDAsMSwxLDEsODksMTEwLDEsMCw4OCwxMTYsNSwwLDEyNCwxLDAsCisgICAgMTAwLDIsMCwxMDAsMCwwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwKKyAgICAxOTcsMCwxMjEsNTYsMCwxMjQsMSwwLDEwNiw4LDAsMTI0LDEsMCw5NSw5LAorICAgIDAsMTE2LDEwLDAsMTI0LDEsMCwxMDAsMywwLDEzMSwyLDAsMTE1LDE3NSwwLAorICAgIDEyNCwwLDAsMTA2LDIsMCwxMDYsMTEsMCwxMDAsNCwwLDEzMSwxLDAsMTAwLAorICAgIDUsMCwyNSwxMjQsMSwwLDk1LDksMCw4NywxMTAsMTgsMCw0LDExNiw3LAorICAgIDAsMTA3LDEwLDAsMTE0LDE5NiwwLDEsMSwxLDg5LDExMCwxLDAsODgsMTE2LAorICAgIDUsMCwxMjQsMSwwLDEwMCw2LDAsMTAwLDAsMCwxMzEsMywwLDEwMCwwLAorICAgIDAsMTA3LDgsMCwxMTQsMjU1LDAsMTIxLDEzLDAsMTI0LDAsMCwxMjQsMSwwLAorICAgIDk1LDEyLDAsODcsMTEwLDE4LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwyNTQsCisgICAgMCwxLDEsMSw4OSwxMTAsMSwwLDg4LDEyNCwxLDAsODMsNDEsNyw3OCwKKyAgICAxMTQsOTEsMCwwLDAsMTE0LDEzNCwwLDAsMCwxMTQsMTMxLDAsMCwwLDExNCwKKyAgICAxMjEsMCwwLDAsMTE0LDMzLDAsMCwwLDExNCw5NSwwLDAsMCw0MSwxMywKKyAgICAxMTQsOTksMCwwLDAsMTE0LDE0NiwwLDAsMCwxMTQsMTUsMCwwLDAsMTE0LAorICAgIDE0LDAsMCwwLDExNCwyMSwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsOTEsCisgICAgMCwwLDAsMTE0LDk2LDAsMCwwLDExNCwxLDAsMCwwLDExNCwxMzQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDEyMiwwLDAsMCwxMTQsOTUsMCwwLAorICAgIDAsNDEsMiwxMTQsODgsMCwwLDAsMTE0LDg5LDAsMCwwLDExNCwxMCwwLAorICAgIDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDIxOCwyNSw5NSwxMDgsCisgICAgMTExLDk3LDEwMCw5NSw5OCw5Nyw5OSwxMDcsMTE5LDk3LDExNCwxMDAsOTUsOTksMTExLDEwOSwKKyAgICAxMTIsOTcsMTE2LDEwNSw5OCwxMDgsMTAxLDExOCwyLDAsMCwxMTUsNDAsMCwwLDAsCisgICAgMCw0LDE5LDIsMTYsMSwyNCwxLDMsMSwxNiwxLDEzLDEsNSwxLAorICAgIDI0LDEsMyw0LDEyLDEsMTUsMSwyOSwxLDEzLDEsNSwxLDI0LDEsCisgICAgMywxLDEzLDEsMTMsMSw1LDEsMTE0LDE0OCwwLDAsMCw5OSwxLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTU5LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMCwwLAorICAgIDEwNyw5LDAsMTE0LDQzLDAsMTE2LDEsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLAorICAgIDEsMCwxMzEsMiwwLDExNSw0MywwLDExNiwyLDAsMTI0LDAsMCwxMzEsMSwKKyAgICAwLDgzLDExNiwzLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwxLDAsMTE2LDQsCisgICAgMCwxMjQsMSwwLDEzMSwxLDAsMTQzLDc1LDAsMSwxMjQsMCwwLDEwNiwwLAorICAgIDAsMTAwLDAsMCwxMDcsOCwwLDExNCwxMjIsMCwxMjQsMCwwLDEwNiw1LDAsCisgICAgMTAwLDAsMCwxMDcsOCwwLDExNCwxMzgsMCwxMTYsNiwwLDEwMCwyLDAsMTAwLAorICAgIDMsMCwxMjQsMCwwLDEwNiw3LDAsMTMxLDEsMSwxMzAsMSwwLDExMCwxNiwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDYsOCwwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICAxLDg3LDEwMCwwLDAsODEsODIsODgsMTE2LDksMCwxMDYsMTAsMCwxMjQsMCwKKyAgICAwLDEwNiw3LDAsMjUsODMsNDEsNCw3OCwxMTQsMTM5LDAsMCwwLDEyMiwxNCwKKyAgICAxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMTUsCisgICAgMCwwLDAsNDEsMTEsMTE0LDk5LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICAxNDgsMCwwLDAsMTE0LDE0NCwwLDAsMCwxMTQsMTAyLDAsMCwwLDExNCwxMTAsCisgICAgMCwwLDAsMTE0LDc3LDAsMCwwLDExNCwxNSwwLDAsMCwxMTQsMTM5LDAsCisgICAgMCwwLDExNCwxNCwwLDAsMCwxMTQsMjEsMCwwLDAsNDEsMiwxMTQsODgsCisgICAgMCwwLDAsMTE0LDg5LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwKKyAgICAwLDAsMTE0LDExLDAsMCwwLDIxOCwxNCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsCisgICAgMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsMTQ3LDIsMCwwLDExNSwyMCwwLDAsMCwKKyAgICAwLDIsMTUsMiwxOCwxLDEwLDIsMTIsMSwxMywxLDE1LDEsMTUsMSwKKyAgICAyNCwzLDIzLDUsMTE0LDE0OSwwLDAsMCw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsMSwwLDAsMCw5LDAsMCwwLDY3LDAsMCwwLDExNSw0NywKKyAgICAwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDExNiwyLDAsCisgICAgMTI0LDAsMCwxMDYsMywwLDEzMSwxLDAsMTQzLDE1LDAsMSwxMTYsNCwwLAorICAgIDEyNCwwLDAsMTMxLDEsMCw4Myw4NywxMDAsMSwwLDgxLDgyLDg4LDEwMCwxLAorICAgIDAsODMsNDEsMiwxMjIsMTkxLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTEwLAorICAgIDEwMSwxMTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LAorICAgIDQ0LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDExNSwxMTIsMTAxLDk5LDM5LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LAorICAgIDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywxMDAsMTAwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsCisgICAgMTE2LDExNSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDczLDEwMiwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LAorICAgIDEwOCwxMTQsMTAxLDk3LDEwMCwxMjEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTAxLDEyMCwxMDUsMTE1LAorICAgIDExNiwxMDUsMTEwLDEwMywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDMsMTAxLDExNiwxMTUsCisgICAgMTAsMzIsMzIsMzIsMzIsOTksMTA4LDExMSw5OCw5OCwxMDEsMTE0LDEwMSwxMDAsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsNzgsNDEsNSwxMTQsNTcsMCwwLDAsMTE0LDE0NSwwLAorICAgIDAsMCwxMTQsNTQsMCwwLDAsMTE0LDE1LDAsMCwwLDExNCwxNDksMCwwLAorICAgIDAsNDEsMSwxMTQsODgsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLAorICAgIDAsMCwxMTQsMTEsMCwwLDAsMTE0LDg3LDAsMCwwLDE3MCwyLDAsMCwKKyAgICAxMTUsNiwwLDAsMCwwLDksMTAsMSwxNiwxLDExNCw4NywwLDAsMCwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwyMDUsMCwwLDAsMTAxLDAsMCw5MCwxLDAsCisgICAgMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsCisgICAgMiwwLDEwMCwzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNiwKKyAgICAwLDEwMCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDIsMCwKKyAgICAxMzEsMSwwLDkwLDcsMCwxMDEsNiwwLDEwMCw0LDAsMTAwLDcsMCwxMDAsCisgICAgOCwwLDEzMiwxLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDYsMCwxMDAsOSwKKyAgICAwLDEwMCwxMCwwLDEzMiwwLDAsMTMxLDEsMCw5MCw5LDAsMTAxLDYsMCwKKyAgICAxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsCisgICAgNiwwLDEwMSwxMSwwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLDAsMTMxLDEsCisgICAgMCwxMzEsMSwwLDkwLDEyLDAsMTAxLDYsMCwxMDEsMTEsMCwxMDAsMTUsMCwKKyAgICAxMDAsMTYsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMywwLDEwMSwKKyAgICA2LDAsMTAxLDExLDAsMTAwLDE3LDAsMTAwLDE4LDAsMTMyLDAsMCwxMzEsMSwKKyAgICAwLDEzMSwxLDAsOTAsMTQsMCwxMDEsNiwwLDEwMSwxNSwwLDEzMSwxLDAsCisgICAgOTAsMTYsMCwxMDAsNCwwLDgzLDQxLDE5LDIxOCwxNSw2NiwxMTcsMTA1LDEwOCwxMTYsCisgICAgMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTIyLDE0NCw3NywxMDEsMTE2LDk3LAorICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwKKyAgICAxMTEsMTAwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDk5LAorICAgIDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMTQsMzIsMTE1LDExNiw5NywxMTYsMTA1LDk5LDMyLDEwOSwKKyAgICAxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwxMTYsMTExLDMyLDk3LDExOCwxMTEsMTA1LDEwMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDExNiwxMDUsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICA5OSwxMDgsOTcsMTE1LDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsCisgICAgMSwwLDEzMSwxLDAsODMsNDEsMiwxMjIsMTE1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMzIsMTE0LDEwMSwxMTIsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LAorICAgIDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwKKyAgICAxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsMzIsMTA5LDk3LDk5LDEwNCwxMDUsMTEwLDEwMSwxMTQsMTIxLDMyLDEwMCwKKyAgICAxMTEsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDYsMTExLDk4LDMyLDEwNSwxMTYsMTE1LDEwMSwKKyAgICAxMDgsMTAyLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEyMiwyNCw2MCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCw5OCwxMTcsMTA1LAorICAgIDEwOCwxMTYsNDUsMTA1LDExMCw0MSw2Miw0MSwyLDExNCw1MCwwLDAsMCwxMTQsMSwKKyAgICAwLDAsMCw0MSwxLDExNCw4OSwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LAorICAgIDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsOTIsMCwwLDAsMTk1LDIsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMjcsNjYsMTE3LDEwNSwxMDgsMTE2LAorICAgIDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDk1LDExNCwxMDEsMTEyLDExNCw3OCw5OSw0LDAsMCwwLDAsMCwwLDAsCisgICAgNCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw1OCwwLDAsCisgICAgMCwxMjQsMiwwLDEwMCwwLDAsMTA3LDksMCwxMTQsMTYsMCwxMDAsMCwwLAorICAgIDgzLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDUwLDAsCisgICAgMTE2LDIsMCwxMjQsMSwwLDEyNCwwLDAsMTAwLDEsMCwxMDAsMiwwLDEzMSwKKyAgICAyLDEsODMsMTAwLDAsMCw4MywxMDAsMCwwLDgzLDQxLDMsNzgsMTE0LDEwNywKKyAgICAwLDAsMCwxMjIsOCw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0MSwzLDExNCwKKyAgICA1NywwLDAsMCw5MCwxMCwxMDUsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAorICAgIDExNCw4NSwwLDAsMCw0MSw0LDIxOCwzLDk5LDEwOCwxMTUsMTE0LDc4LDAsMCwKKyAgICAwLDIxOCw0LDExMiw5NywxMTYsMTA0LDIxOCw2LDExNiw5NywxMTQsMTAzLDEwMSwxMTYsMTE0LAorICAgIDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMjE4LDksCisgICAgMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDIwNCwyLDAsMCwxMTUsMTAsMCwKKyAgICAwLDAsMCwyLDEyLDEsNCwxLDE1LDEsMTksMiwxMjIsMjUsNjYsMTE3LAorICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwxMDUsCisgICAgMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwzLDAsMCwwLDAsMCwwLDAsCisgICAgNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsCisgICAgMTI1LDMsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsMzcsMCwxMjQsCisgICAgMywwLDEwNiwxLDAsODMsMTAwLDEsMCw4Myw0MSwyLDEyMiwxNzUsNzAsMTA1LAorICAgIDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNzMsMTAyLDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDEwNSwxMTUsMzIsMTAxLDExOCwKKyAgICAxMDEsMTE0LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsCisgICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMDUsMTE1LDMyLAorICAgIDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwxMDEsMTAwLDMyLDk3LDMyLDEwMiw5NywxMDUsCisgICAgMTA4LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LAorICAgIDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwKKyAgICAxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMiwKKyAgICAxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLAorICAgIDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwyLAorICAgIDExNCwxNTQsMCwwLDAsMTE0LDk5LDAsMCwwLDQxLDQsMTE0LDE1MSwwLDAsCisgICAgMCwxMTQsNzgsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsODgsMCwwLDAsCisgICAgMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMjE4LAorICAgIDExLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMTMsMiwwLDAsCisgICAgMTE1LDQsMCwwLDAsMCw5LDE4LDEsMTIyLDI3LDY2LDExNywxMDUsMTA4LDExNiwKKyAgICAxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCisgICAgMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsNjcsMCwwLDAsCisgICAgMTI0LDEsMCwxMDYsMCwwLDExNiwxLDAsMTA2LDIsMCwxMDcsNywwLDExNCwKKyAgICA1MSwwLDExNiwzLDAsMTAwLDEsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDAsCisgICAgMCwxMzEsMSwwLDEwMCwyLDAsMTI0LDEsMCwxMDYsMCwwLDEzMSwxLDEsCisgICAgMTMwLDEsMCwxMTYsNSwwLDExNiw2LDAsMTA2LDcsMCwxMjQsMSwwLDEzMSwKKyAgICAyLDAsODMsNDEsMywxMjIsMjQsNjcsMTE0LDEwMSw5NywxMTYsMTAxLDMyLDk3LDMyLAorICAgIDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEyMiwKKyAgICAyOSwxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDk4LAorICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCwxNSwKKyAgICAwLDAsMCw0MSw4LDExNCwxNSwwLDAsMCwxMTQsMTQsMCwwLDAsMTE0LAorICAgIDc2LDAsMCwwLDExNCw3NywwLDAsMCwxMTQsNTAsMCwwLDAsMTE0LDY1LAorICAgIDAsMCwwLDExNCw1NywwLDAsMCw5MCwxNCw5OSwxMTQsMTAxLDk3LDExNiwxMDEsCisgICAgOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNDEsMiwxMTQsMTksMCwwLDAsMTE0LAorICAgIDg4LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLAorICAgIDAsMCwwLDExNCwxMzgsMCwwLDAsMjI1LDIsMCwwLDExNSw4LDAsMCwKKyAgICAwLDAsMywxOCwxLDIxLDEsMTIsMSwxMjIsMjksNjYsMTE3LDEwNSwxMDgsMTE2LAorICAgIDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDk5LDExNCwxMDEsOTcsMTE2LAorICAgIDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwyMCwwLAorICAgIDAsMCwxMTYsMCwwLDExNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwyLAorICAgIDAsMSwxMDAsMSwwLDgzLDQxLDIsMTIyLDIyLDY5LDEyMCwxMDEsOTksMzIsOTcsCisgICAgMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNzgsNDEsMywxMTQsNjUsMCwwLDAsMTE0LDU3LDAsMCwwLDkwLDEyLDEwMSwKKyAgICAxMjAsMTAxLDk5LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDQxLDIsMTE0LDE5LDAsCisgICAgMCwwLDExNCw4OSwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwKKyAgICAwLDExNCwxMSwwLDAsMCwxMTQsMTM5LDAsMCwwLDIzMywyLDAsMCwxMTUsCisgICAgMiwwLDAsMCwwLDMsMTIyLDI3LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICAxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsCisgICAgODMsNDEsMiwxMjIsNTcsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwKKyAgICAzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsCisgICAgMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSw0Niw3OCwxMTQsCisgICAgMTAsMCwwLDAsNDEsMiwxMTQsMTUxLDAsMCwwLDExNCw3OCwwLDAsMCwKKyAgICAxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsCisgICAgOCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwyMzgsMiwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCw0LDEyMiwyNCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwKICAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDU3LAorICAgIDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTYsCiAgICAgODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTgsCiAgICAgMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLAotICAgIDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsOTksMTExLDEwMCwxMDEsCi0gICAgMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSw0Niw3OCwxMTQsNCwwLDAsMCw0MSwKLSAgICAyLDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw4LDEwMywxMDEsMTE2LDk1LAotICAgIDk5LDExMSwxMDAsMTAxLDE5LDUsMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsCi0gICAgMjQsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsCi0gICAgMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw1Niw4MiwxMDEsMTE2LDExNywxMTQsCi0gICAgMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsCi0gICAgMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLAotICAgIDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwKLSAgICAxMDAsMTAxLDQ2LDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDEyLDEsMCwwLAotICAgIDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDUsMCwwLDAsMjE4LDEwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgMjUsNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNiw2NiwxMTcsMTA1LAotICAgIDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwKLSAgICAwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTIsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKLSAgICA3MCw5NywxMDgsMTE1LDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKLSAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTEwLDEwMSwKLSAgICAxMTgsMTAxLDExNCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LDQ2LDcwLDExNCw0LAotICAgIDAsMCwwLDQxLDIsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIyMCwKLSAgICAwLDAsMCwzMSw1LDAsMCwxMTUsMiwwLDAsMCwwLDQsMTIyLDI2LAotICAgIDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwKLSAgICAxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MSwxNCwxMTQsNTcsMCwwLAotICAgIDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsCi0gICAgMjE4LDEyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTQsMjA2LAotICAgIDAsMCwwLDIxOCwxMSw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAxMTQsMTQsMSwwLDAsMTE0LDE1LDEsMCwwLDExNCwxNjIsMCwwLDAsMTE0LAotICAgIDUsMSwwLDAsMTE0LDE2LDEsMCwwLDExNCwxNywxLDAsMCwxMTQsMjIwLAotICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw1LDAsMCwwLDExNCwxMSwxLDAsMCwyMjQsNCwwLDAsCi0gICAgMTE1LDI4LDAsMCwwLDEyLDcsNiwyLDE4LDksMywxLDIxLDgsMywKLSAgICAxLDE4LDExLDMsMSwyMSwxMSwzLDEsMjEsNSwzLDEsMjEsNSwzLAotICAgIDEsMTE0LDExLDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLAotICAgIDAsMCwwLDUsMCwwLDAsNjQsMCwwLDAsMTE1LDE5MywwLDAsMCwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAotICAgIDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLAotICAgIDAsOTAsNSwwLDEwMSw2LDAsMTAwLDQsMCwxMDAsNCwwLDEwMCw1LDAsCi0gICAgMTAwLDYsMCwxMzIsMiwwLDEzMSwxLDAsOTAsNywwLDEwMSw2LDAsMTAwLAotICAgIDQsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDgsCi0gICAgMCwxMDEsNCwwLDEwMCw5LDAsMTAwLDEwLDAsMTMyLDAsMCwxMzEsMSwwLAotICAgIDkwLDksMCwxMDEsNiwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCw5MCwxMCwwLDEwMSw2LDAsMTAxLDExLDAsMTAwLDEzLDAsMTAwLDE0LAotICAgIDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTIsMCwxMDEsNiwwLAotICAgIDEwMSwxMSwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDkwLDEzLDAsMTAxLDYsMCwxMDEsMTEsMCwxMDAsMTcsMCwxMDAsMTgsCi0gICAgMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxNCwwLDEwMCw0LDAsCi0gICAgODMsNDEsMTksMjE4LDE0LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDEsMTE0LDEyMiwxNDIsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsCi0gICAgMTA4LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsCi0gICAgMTA1LDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwKLSAgICAxMTYsOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwKLSAgICAzMiw5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLAotICAgIDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LAotICAgIDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwKLSAgICAxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsMTIyLAotICAgIDExNSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwzMiwxMDIsMTExLDExNCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAotICAgIDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwKLSAgICAzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSw5Nyw5OSwxMDQsCi0gICAgMTA1LDExMCwxMDEsMTE0LDEyMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA2LAotICAgIDExMSw5OCwzMiwxMDUsMTE2LDExNSwxMDEsMTA4LDEwMiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwxMjIsMjIsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLAotICAgIDExNCwxMjUsMzIsNDAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDEsNjIsNDEsMiwxMTQsNDcsCi0gICAgMCwwLDAsMTE0LDU3LDAsMCwwLDQxLDEsMjE4LDEsMTA5LDExNCw0LDAsCi0gICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMDYsMCwwLAotICAgIDAsNDcsNSwwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwyNiw3MCwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsNzgsOTksNCwwLDAsMCwwLDAsCi0gICAgMCwwLDQsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsNDIsCisgICAgMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCwxMCwwLDAsMCw0MSwyLAorICAgIDExNCwxNTEsMCwwLDAsMTE0LDc4LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDExLDAsMCwwLDIxOCwxMCwxMDMsMTAxLDExNiw5NSwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDI0NCwyLDAsMCwxMTUsMiwwLDAsMCwwLDQsCisgICAgMTIyLDI2LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAorICAgIDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw1Miw4MiwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDMyLDcwLDk3LDEwOCwxMTUsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsCisgICAgMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsCisgICAgMTE0LDEwMSwzMiwxMTAsMTAxLDExOCwxMDEsMTE0LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKKyAgICAxMTUsNDYsNzAsMTE0LDEwLDAsMCwwLDQxLDIsMTE0LDE1MSwwLDAsMCwxMTQsCisgICAgNzgsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsCisgICAgMCwwLDAsMTE0LDEwOSwwLDAsMCwyNTAsMiwwLDAsMTE1LDIsMCwwLAorICAgIDAsMCw0LDEyMiwyNiw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDEsCisgICAgMTcsMTE0LDEsMCwwLDAsMTE0LDAsMCwwLDAsMTE0LDIsMCwwLDAsCisgICAgMTE0LDMsMCwwLDAsMjE4LDEyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwxMDksMTAxLDExNiwKKyAgICAxMDQsMTExLDEwMCwxMTQsOTIsMCwwLDAsMjE4LDExLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwKKyAgICAxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCwxNTQsMCwwLDAsMTE0LDE1NSwwLDAsMCwxMTQsCisgICAgMTM4LDAsMCwwLDExNCwxMzksMCwwLDAsMTE0LDgxLDAsMCwwLDExNCwxNTYsCisgICAgMCwwLDAsMTE0LDE1NywwLDAsMCwxMTQsMTA5LDAsMCwwLDExNCw5MCwwLAorICAgIDAsMCwxMTQsMTQ2LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLAorICAgIDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsMTUwLDAsMCwwLAorICAgIDE4NiwyLDAsMCwxMTUsMzAsMCwwLDAsMTIsNyw2LDIsMTgsOSwzLAorICAgIDEsMjEsOCwzLDEsMTgsMTEsMTgsOCwxOCw1LDMsMSwyMSw1LDMsCisgICAgMSwyMSw1LDMsMSwyMSw1LDExNCwxNTAsMCwwLDAsOTksMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw2NCwwLDAsCisgICAgMCwxMTUsMjExLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsCisgICAgMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsMTAwLDIsMCwxMDAsMywKKyAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNCwwLAorICAgIDEwMCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwyLDAsMTMxLDEsMCw5MCwKKyAgICA3LDAsMTAxLDYsMCwxMDAsNCwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMSwKKyAgICAwLDEzMSwxLDAsOTAsOCwwLDEwMSw2LDAsMTAwLDksMCwxMDAsMTAsMCwKKyAgICAxMzIsMCwwLDEzMSwxLDAsOTAsOSwwLDEwMSw0LDAsMTAwLDExLDAsMTAwLAorICAgIDEyLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLDYsMCwxMDAsMTMsCisgICAgMCwxMDAsMTQsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTEsMCwxMDEsNiwwLAorICAgIDEwMSwxMiwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsCisgICAgMSwwLDkwLDEzLDAsMTAxLDYsMCwxMDEsMTIsMCwxMDAsMTcsMCwxMDAsMTgsCisgICAgMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxNCwwLDEwMSw2LDAsCisgICAgMTAxLDEyLDAsMTAwLDE5LDAsMTAwLDIwLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwKKyAgICAxLDAsOTAsMTUsMCwxMDAsNCwwLDgzLDQxLDIxLDIxOCwxNCw3MCwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMjIsMTQyLDc3LDEwMSwxMTYsCisgICAgOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKKyAgICAxMDAsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsOTksMTA4LAorICAgIDk3LDExNSwxMTUsMzIsMTExLDExNCwzMiwxMTUsMTE2LDk3LDExNiwxMDUsOTksMzIsMTA5LDEwMSwKKyAgICAxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMTEsMzIsOTcsMTE4LDExMSwxMDUsMTAwLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwKKyAgICAxMTAsMTE1LDExNiw5NywxMTAsMTE2LDEwNSw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LAorICAgIDEwOCw5NywxMTUsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLAorICAgIDAsMTMxLDEsMCw4Myw0MSwyLDEyMiwxMTUsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKKyAgICAxMTQsMTAxLDExMiwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LAorICAgIDEwMSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwKKyAgICAxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwzMiwxMDksOTcsOTksMTA0LDEwNSwxMTAsMTAxLDExNCwxMjEsMzIsMTAwLDExMSwKKyAgICAxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNiwxMTEsOTgsMzIsMTA1LDExNiwxMTUsMTAxLDEwOCwKKyAgICAxMDIsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTIyLDIyLDYwLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEwMiwxMTQsMTExLDEyMiwKKyAgICAxMDEsMTEwLDQxLDYyLDQxLDIsMTE0LDUwLDAsMCwwLDExNCwxLDAsMCwwLAorICAgIDQxLDEsMjE4LDEsMTA5LDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LAorICAgIDExLDAsMCwwLDExNCw5MiwwLDAsMCwxMiwzLDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDcsMTIyLDI2LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwKKyAgICA3OCw5OSw0LDAsMCwwLDAsMCwwLDAsNCwwLDAsMCw1LDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw0MiwwLDAsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTI0LDEsMCwxMzEsMSwwLDExNCwzNCwwLDExNiwyLDAsMTI0LDEsMCwKKyAgICAxMjQsMCwwLDEwMCwxLDAsMTAwLDIsMCwxMzEsMiwxLDgzLDEwMCwwLDAsCisgICAgODMsMTAwLDAsMCw4Myw0MSwzLDc4LDExNCwxMDcsMCwwLDAsOTAsNiwxMDIsCisgICAgMTE0LDExMSwxMjIsMTAxLDExMCw0MSwzLDExNCw1NywwLDAsMCwxMTQsODIsMCwwLAorICAgIDAsMTE0LDg1LDAsMCwwLDQxLDQsMTE0LDE1MSwwLDAsMCwxMTQsNzgsMCwKKyAgICAwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwxMCwwLDAsCisgICAgMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwxNTQsMCwwLDAsCisgICAgMjEsMywwLDAsMTE1LDYsMCwwLDAsMCwyLDE1LDEsMTksMiwxMjIsCisgICAgMjQsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsCisgICAgMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwwLDAsMCwwLAorICAgIDAsMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLAogICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LAotICAgIDM0LDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwwLDAsMTAwLDEsMCwxMDAsMiwKLSAgICAwLDEzMSwyLDEsODMsMTAwLDAsMCw4MywxMDAsMCwwLDgzLDQxLDMsNzgsCi0gICAgMTE0LDIxOCwwLDAsMCw5MCw2LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDQxLDMsMTE0LAotICAgIDEwNiwwLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwxNzQsMCwwLDAsNDEsNCwKLSAgICAxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAotICAgIDEzLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDExNCwxNCwxLDAsMCw1Niw1LDAsMCwxMTUsNiwwLDAsCi0gICAgMCwwLDIsMTUsMSwxOSwyLDEyMiwyNCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsCi0gICAgOTksOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMTQsMTksMCwxMjQsMCwwLDgzLDEwMCwxLAotICAgIDAsODMsNDEsMiwxMjIsOTMsNzAsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLAotICAgIDMyLDg1LDExNSwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLAotICAgIDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDc4LDQxLDIsMTE0LDEwNiwwLDAsMCwxMTQsMTYzLDAsMCwwLAotICAgIDQxLDMsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAotICAgIDExNCwxNSwxLDAsMCw2Myw1LDAsMCwxMTUsMiwwLDAsMCwwLDcsCi0gICAgMTIyLDI2LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMywwLDAsMCw0LDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw5NSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMjUsCi0gICAgMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTE1LDU3LAotICAgIDAsMTE2LDQsMCwxMDAsMSwwLDEwNiw1LDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDEwMCwyLDAsMTI0LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMTYsCi0gICAgNiwwLDExNiwyLDAsMTA2LDcsMCwxMjQsMSwwLDEzMSwyLDAsMTI1LDIsCi0gICAgMCwxMTYsOCwwLDEyNCwyLDAsMTI0LDAsMCwxMDYsOSwwLDEzMSwyLDAsCi0gICAgMSwxMDAsMCwwLDgzLDQxLDMsNzgsMTIyLDI3LDEyMywzMywxMTQsMTI1LDMyLDEwNSwKLSAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDY3LDAsMCwwLDQxLDEwLDExNCwyMDksMCwwLAotICAgIDAsMTE0LDY3LDAsMCwwLDExNCwxMDYsMCwwLDAsMTE0LDE2MywwLDAsMCwKLSAgICAxMTQsMTU0LDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMTE0LDAsMCwwLDIxOCwKLSAgICAxNywxMDMsMTAxLDExNiw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTEsOTgsMTA2LDEwMSwKLSAgICA5OSwxMTYsMTE0LDE3NiwwLDAsMCwxMTQsNjMsMCwwLDAsNDEsMywxMTQsMTgwLAotICAgIDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMTk1LDAsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyLDEsMCwKLSAgICAwLDcyLDUsMCwwLDExNSwxMiwwLDAsMCwwLDIsMTIsMSwxNSwxLAotICAgIDE4LDEsMTIsMSwxOCwxLDEyMiwyNiw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwKKyAgICAxOSwwLDEyNCwwLDAsODMsMTAwLDEsMCw4Myw0MSwyLDEyMiw5Myw3MCwxMDUsCisgICAgMTEwLDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LAorICAgIDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwKKyAgICAxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDIsMTA1LDExMCwKKyAgICAxMDAsOTUsMTE1LDExMiwxMDEsOTksNDAsNDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMiwxMTQsNTcsCisgICAgMCwwLDAsMTE0LDgyLDAsMCwwLDQxLDMsMTE0LDE1MSwwLDAsMCwxMTQsCisgICAgNzgsMCwwLDAsMTE0LDE1MiwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLAorICAgIDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsMTU1LDAsMCwwLDI4LDMsMCwKKyAgICAwLDExNSwyLDAsMCwwLDAsNywxMjIsMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCwKKyAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsCisgICAgMCw4Myw0MSwyLDEyMiw0Miw4NSwxMTUsMTAxLDMyLDEwMCwxMDEsMTAyLDk3LDExNywxMDgsCisgICAgMTE2LDMyLDExNSwxMDEsMTA5LDk3LDExMCwxMTYsMTA1LDk5LDExNSwzMiwxMDIsMTExLDExNCwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDUsMTExLDExMCw0NiwKKyAgICA3OCwxMTQsMTAsMCwwLDAsNDEsMiwxMTQsMTUxLDAsMCwwLDExNCw4OCwwLAorICAgIDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsCisgICAgMCwxMTQsMTM4LDAsMCwwLDM3LDMsMCwwLDExNSwwLDAsMCwwLDEyMiwKKyAgICAyOCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwKKyAgICA5OSwxMTQsMTAxLDk3LDExNiwxMDEsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDMsMCwwLDAsNCwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsOTIsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsCisgICAgMTI1LDEsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDExNSwKKyAgICA1NCwwLDExNiw0LDAsMTAwLDEsMCwxMDYsNSwwLDEyNCwxLDAsMTMxLDEsCisgICAgMCwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExNiw2LDAsCisgICAgMTE2LDIsMCwxMDYsNywwLDEyNCwxLDAsMTMxLDIsMCwxMjUsMiwwLDExNiwKKyAgICA4LDAsMTI0LDIsMCwxMjQsMCwwLDEwNiw5LDAsMTMxLDIsMCwxLDEwMCwKKyAgICAwLDAsODMsNDEsMyw3OCwxMjIsMjcsMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwKKyAgICAxMTAsMTExLDExNiwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTQsMTUsMCwwLDAsNDEsMTAsMTE0LDk1LDAsMCwwLDExNCwKKyAgICAxNSwwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDgyLDAsMCwwLDExNCw3NywKKyAgICAwLDAsMCwxMTQsNTAsMCwwLDAsMTE0LDY1LDAsMCwwLDIxOCwxNywxMDMsCisgICAgMTAxLDExNiw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsCisgICAgMjE4LDQsMTAxLDEyMCwxMDEsOTksMTE0LDcsMCwwLDAsNDEsMywxMTQsODksMCwKKyAgICAwLDAsMTE0LDE1LDAsMCwwLDIxOCw0LDk5LDExMSwxMDAsMTAxLDExNCwxMCwwLAorICAgIDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwxMzksMCwwLAorICAgIDAsNDEsMywwLDAsMTE1LDEyLDAsMCwwLDAsMiwxMiwxLDE1LDEsCisgICAgMTgsMSw5LDEsMTgsMSwxMjIsMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksCiAgICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LAogICAgIDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywKICAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMjQsCkBAIC0yMjY3LDEwICsxNDU2LDEwIEBACiAgICAgMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLAogICAgIDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LDExNSwxMDEsMzIsMTAxLDEyMCwxMDEsOTksCiAgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsNDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywKLSAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDEsMSwxMTQsMTgxLAotICAgIDAsMCwwLDQxLDIsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDUsCi0gICAgMSwwLDAsODEsNSwwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwyNiwKKyAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDEsMSwxMTQsOTAsCisgICAgMCwwLDAsNDEsMiwxMTQsMTUxLDAsMCwwLDExNCw3OCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsMTQ2LAorICAgIDAsMCwwLDUwLDMsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMjYsCiAgICAgNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA4LAogICAgIDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLAogICAgIDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCkBAIC0yMjc4LDkgKzE0NjcsOSBAQAogICAgIDgzLDQxLDEsMTIyLDQ1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCiAgICAgOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTEsMTE0LDMyLAogICAgIDExNiwxMDQsMTAxLDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQ2LDQxLDIsMTE0LDEwNiwwLDAsMCwxMTQsMjIsMSwwLDAsNDEsMiwKLSAgICAxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTYsMSwwLDAsOTAsNSwKKyAgICAxMDEsNDYsNDEsMiwxMTQsNTcsMCwwLDAsMTE0LDE2MiwwLDAsMCw0MSwyLAorICAgIDExNCwxNTEsMCwwLDAsMTE0LDc4LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwxNTYsMCwwLDAsNTksMywKICAgICAwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyMyw3MCwxMTQsMTExLDEyMiwxMDEsCiAgICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCiAgICAgMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLApAQCAtMjI4OCwxMCArMTQ3NywxMCBAQAogICAgIDQxLDIsMTIyLDU0LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCiAgICAgOTcsMTE1LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAogICAgIDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsCi0gICAgNDEsMiwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTcsMSwwLDAsCi0gICAgOTYsNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNSw3MCwxMTQsMTExLAorICAgIDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCwxMCwwLDAsMCwKKyAgICA0MSwyLDExNCwxNTEsMCwwLDAsMTE0LDc4LDAsMCwwLDExNCwxMCwwLDAsCisgICAgMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDExNCwxNTcsMCwwLDAsCisgICAgNjUsMywwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNSw3MCwxMTQsMTExLAogICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwKICAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLAogICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLApAQCAtMjI5OSwyMDc5ICsxNDg4LDUwMiBAQAogICAgIDQ2LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwKICAgICAxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAogICAgIDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0Niw0MSwKLSAgICAyLDExNCwxMDYsMCwwLDAsOTAsMTcsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDEsMiwxMTQsMTIsMSwwLDAsCi0gICAgMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDEwMiw1LDAsMCwxMTUsMiwwLAorICAgIDIsMTE0LDU3LDAsMCwwLDkwLDE3LDEwNSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKKyAgICAxMTAsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQxLDIsMTE0LDE1MSwwLDAsMCwKKyAgICAxMTQsNzgsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTEsMCwwLDAsMTE0LDEwOSwwLDAsMCw3MSwzLDAsMCwxMTUsMiwwLAogICAgIDAsMCwwLDQsMTIyLDI1LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsCiAgICAgMTE0LDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQxLAotICAgIDE1LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLAotICAgIDExNCw1OSwwLDAsMCwxMTQsMTgsMSwwLDAsMTE0LDIwNiwwLDAsMCwxMTQsCi0gICAgMTksMSwwLDAsMTE0LDE0LDEsMCwwLDExNCwxNSwxLDAsMCwxMTQsMiwKLSAgICAxLDAsMCwxMTQsNSwxLDAsMCwxMTQsMTY1LDAsMCwwLDExNCwxNiwxLAotICAgIDAsMCwxMTQsMTcsMSwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKLSAgICAxMTQsMjAsMSwwLDAsMzgsNSwwLDAsMTE1LDI4LDAsMCwwLDEyLDcsCi0gICAgNiwyLDE4LDksMywxLDIxLDYsMywxLDE4LDgsMTgsOSwxOCw5LAotICAgIDMsMSwyMSw1LDMsMSwyMSw1LDMsMSwxMTQsMjAsMSwwLDAsOTksCi0gICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKLSAgICA2NCwwLDAsMCwxMTUsMTIxLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwKLSAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsOTAsNCwKLSAgICAwLDEwMCwzLDAsOTAsNSwwLDEwMCw0LDAsOTAsNiwwLDEwMSw3LDAsCi0gICAgMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsMTAxLAotICAgIDcsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDksCi0gICAgMCwxMDEsNywwLDEwMCw5LDAsMTAwLDksMCwxMDAsMTAsMCwxMDAsMTEsMCwKLSAgICAxMzIsMiwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNywwLDEwMCw5LDAsMTAwLAotICAgIDEyLDAsMTAwLDEzLDAsMTMyLDEsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDksCi0gICAgMCw4Myw0MSwxNCwyMTgsMjEsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywKLSAgICAxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTIyLDYyLDc3LDEwMSwxMTYsCi0gICAgOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMDEsOTksMTA4LDk3LDExNCwKLSAgICAxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsODcsMTA1LDExMCwxMDAsMTExLDExOSwKLSAgICAxMTUsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0NiwxMjIsNTksODMsMTExLDEwMiwKLSAgICAxMTYsMTE5LDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LAotICAgIDEwNCwxMTEsMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwKLSAgICAxMTUsMTA1LDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsCi0gICAgMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDEyMiw2NSw4MywxMTEsMTAyLDExNiwxMTksOTcsCi0gICAgMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsCi0gICAgNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsMTExLAotICAgIDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsMTA4LDEwOCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMjUsOTIsNjgsMTAxLDk4LDExNywxMDMsNzAsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDY3LDAsMCwwLDEyMSwyMywwLDExNiwwLDAsMTA2LDEsMCwxMTYsCi0gICAgMCwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDExMCwzNywwLAotICAgIDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNjIsMCwxLDEsMSwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTE2LDAsMCwxMDYsNCwwLDEyNCwxLDAsMTMxLDIsMCw4MywKLSAgICA4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsMSw3OCw0MSw1LDIxOCw3LAotICAgIDk1LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDkwLDcsNzksMTEyLDEwMSwxMTAsNzUsMTAxLDEyMSwKLSAgICA5MCwxNyw3Miw3NSw2OSw4OSw5NSw2Nyw4NSw4Miw4Miw2OSw3OCw4NCw5NSw4NSwKLSAgICA4Myw2OSw4MiwxMTQsNDAsMCwwLDAsOTAsMTgsNzIsNzUsNjksODksOTUsNzYsCi0gICAgNzksNjcsNjUsNzYsOTUsNzcsNjUsNjcsNzIsNzMsNzgsNjksNDEsMiwxMTQsMTIsCi0gICAgMSwwLDAsMjE4LDMsMTA3LDEwMSwxMjEsMTE0LDQsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDE0LDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsCi0gICAgMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDEyMSw1LDAsMCwxMTUsOCwwLDAsMCwKLSAgICAwLDIsMywxLDIzLDEsMTMsMSwxMjIsMzYsODcsMTA1LDExMCwxMDAsMTExLDExOSwKLSAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTExLDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTYsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDE0MiwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTE0LDIxLAotICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEyNSwyLDAsMTEwLDksMCwxMjQsMCwwLAotICAgIDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMjQsCi0gICAgMSwwLDEwMCwyLDAsMTE2LDQsMCwxMDYsNSwwLDEwMCwwLDAsMTAwLDMsCi0gICAgMCwxMzMsMiwwLDI1LDEzMSwwLDIsMTI1LDMsMCwxMjEsNDYsMCwxMjQsMCwKLSAgICAwLDEwNiw2LDAsMTI0LDMsMCwxMzEsMSwwLDE0MywyNSwwLDEyNSw0LDAsCi0gICAgMTE2LDcsMCwxMDYsOCwwLDEyNCw0LDAsMTAwLDQsMCwxMzEsMiwwLDEyNSwKLSAgICA1LDAsODcsMTAwLDAsMCw4MSw4OCw4NywxMTAsMjIsMCw0LDExNiw5LDAsCi0gICAgMTA3LDEwLDAsMTE0LDEzNywwLDEsMSwxLDEwMCwwLDAsODMsODksMTEwLDEsCi0gICAgMCw4OCwxMjQsNSwwLDgzLDQxLDUsNzgsMTE0LDE1OSwwLDAsMCw5MCwxMSwKLSAgICAxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTE0LDEzNywwLDAsMCwKLSAgICAxMTQsMzAsMCwwLDAsNDEsMTAsMjE4LDExLDY4LDY5LDY2LDg1LDcxLDk1LDY2LAotICAgIDg1LDczLDc2LDY4LDIxOCwxOCw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSw5NSw3NSwKLSAgICA2OSw4OSw5NSw2OCw2OSw2Niw4NSw3MSwyMTgsMTIsODIsNjksNzEsNzMsODMsODQsCi0gICAgODIsODksOTUsNzUsNjksODksMTE0LDQ3LDAsMCwwLDExNCw3LDAsMCwwLAotICAgIDIxOCw3LDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTQsMjYsMSwwLDAsMTE0LDI0LAotICAgIDEsMCwwLDkwLDEwLDgxLDExNywxMDEsMTE0LDEyMSw4Niw5NywxMDgsMTE3LDEwMSwxMTQsCi0gICAgNDAsMCwwLDAsNDEsNiwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwKLSAgICA5MCwxMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk1LDEwNywxMDEsMTIxLDExNCwyNSwKLSAgICAxLDAsMCw5MCw0LDEwNCwxMDcsMTAxLDEyMSwyMTgsOCwxMDIsMTA1LDEwOCwxMDEsMTEyLAotICAgIDk3LDExNiwxMDQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMjE4LDE2LDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsCi0gICAgMTE1LDExNiwxMTQsMTIxLDEyOCw1LDAsMCwxMTUsMjIsMCwwLDAsMCwyLDksCi0gICAgMSwxMiwyLDksMSwxNSwxLDIyLDEsMywxLDE4LDEsMjgsMSwxMywKLSAgICAxLDksMSwxMjIsMzgsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsCi0gICAgMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTE1LDEwMSw5NywxMTQsCi0gICAgOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzgsOTksNCwwLDAsCi0gICAgMCwwLDAsMCwwLDgsMCwwLDAsMTQsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDE1NSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSw0LDAsMTI0LDQsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDMxLAotICAgIDAsMTAwLDAsMCw4MywxMjEsMTQsMCwxMTYsMSwwLDEyNCw0LDAsMTMxLDEsCi0gICAgMCwxLDg3LDExMCwyMiwwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNjksMCwKLSAgICAxLDEsMSwxMDAsMCwwLDgzLDg5LDExMCwxLDAsODgsMTIwLDc4LDAsMTE2LAotICAgIDMsMCwxMzEsMCwwLDY4LDkzLDY3LDAsOTIsMiwwLDEyNSw1LDAsMTI1LAotICAgIDYsMCwxMjQsNCwwLDEwNiw0LDAsMTE2LDUsMCwxMjQsNiwwLDEzMSwxLAotICAgIDAsMTMxLDEsMCwxMTQsODAsMCwxMTYsNiwwLDEyNCwxLDAsMTI0LDUsMCwKLSAgICAxMjQsMSwwLDEyNCw0LDAsMTMxLDIsMCwxMDAsMSwwLDEyNCw0LDAsMTMxLAotICAgIDIsMSwxMjUsNywwLDEyNCw3LDAsODMsMTEzLDgwLDAsODcsMTAwLDAsMCwKLSAgICA4Myw0MSwyLDc4LDExNCwyMTgsMCwwLDAsNDEsNywxMTQsMzIsMSwwLDAsCi0gICAgMTE0LDM5LDAsMCwwLDExNCw0MCwwLDAsMCwxMTQsMjQxLDAsMCwwLDExNCwKLSAgICAyMzEsMCwwLDAsMTE0LDIzMiwwLDAsMCwxMTQsMTc0LDAsMCwwLDQxLDgsCi0gICAgMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKLSAgICAxMywxLDAsMCwxMTQsMzEsMSwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMTI2LAotICAgIDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDE0LDEsMCwwLDE0Myw1LDAsMCwKLSAgICAxMTUsMjQsMCwwLDAsMCwyLDE1LDEsMTIsMSw0LDEsMywxLDE0LAotICAgIDEsMTMsMSw5LDEsMjIsMSwyMSwxLDIxLDEsOSwxLDEyMiwzMSw4NywKLSAgICAxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywKLSAgICAwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsNDUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLAotICAgIDAsMTI0LDIsMCwxMzEsMiwwLDEyNSwzLDAsMTI0LDMsMCwxMDAsMSwwLAotICAgIDEwNyw5LDAsMTE0LDM3LDAsMTI0LDMsMCwxMDYsMSwwLDgzLDEwMCwxLDAsCi0gICAgODMsMTAwLDEsMCw4Myw0MSwyLDEyMiwxMDgsNzAsMTA1LDExMCwxMDAsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsCi0gICAgMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw3OCw0MSwyLDExNCwxNCwxLDAsMCwxMTQsMTcwLDAsCi0gICAgMCwwLDQxLDQsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LAotICAgIDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDE1LDEsMCwwLDE1OCw1LDAsMCwKLSAgICAxMTUsOCwwLDAsMCwwLDcsMTgsMSwxMiwxLDcsMiwxMjIsMzMsODcsCi0gICAgMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDQxLDEyLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwKLSAgICAwLDExNCw1OSwwLDAsMCwxMTQsMjksMSwwLDAsMTE0LDI4LDEsMCwwLAotICAgIDExNCwyNywxLDAsMCwxMTQsMTksMSwwLDAsMTE0LDI2LDEsMCwwLDExNCwKLSAgICAzMiwxLDAsMCwxMTQsMTQsMSwwLDAsMTE0LDE1LDEsMCwwLDExNCw0LAotICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCi0gICAgMCwwLDExNCwyMywxLDAsMCwxMDksNSwwLDAsMTE1LDIwLDAsMCwwLAotICAgIDEyLDIsNiwzLDYsMyw2LDIsNiwyLDE4LDcsMTgsMTUsMywxLAotICAgIDIxLDE0LDMsMSwxMTQsMjMsMSwwLDAsOTksMCwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsNTIsCi0gICAgMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAotICAgIDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwKLSAgICAwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLAotICAgIDkwLDcsMCwxMDAsNiwwLDgzLDQxLDcsMjE4LDEzLDk1LDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwxMjIsODMsNjYsOTcsMTE1LDEwMSwzMiw5OSwKLSAgICAxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTAyLDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsOTksCi0gICAgMTExLDEwMCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk4LDExMSwKLSAgICAxMTYsMTA0LDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwKLSAgICAxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5OSwyLDAsCi0gICAgMCwwLDAsMCwwLDAsNSwwLDAsMCwzLDAsMCwwLDY3LDAsCi0gICAgMCwwLDExNSw4OCwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEyNSwyLDAsCi0gICAgMTI0LDIsMCwxMDYsMiwwLDEwMCwyLDAsMTAwLDEsMCwxMzEsMiwwLDEwMCwKLSAgICAzLDAsMjUsMTI1LDMsMCwxMjQsMSwwLDEwNiwzLDAsMTAwLDIsMCwxMzEsCi0gICAgMSwwLDEwMCw0LDAsMjUsMTI1LDQsMCwxMjQsMywwLDEwMCw1LDAsMTA3LAotICAgIDIsMCwxMTEsODcsMCwxMjQsNCwwLDEwMCw1LDAsMTA3LDMsMCw4Myw0MSwKLSAgICA2LDEyMiwxNDEsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLAotICAgIDExNSwxMTIsMTAxLDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsOTgsMTIxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwNSwKLSAgICAxMTAsMTAzLDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiwKLSAgICA5OCwxMjEsMzIsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLAotICAgIDEwNCw5NywxMTUsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDExMSwKLSAgICAxMDIsMzIsMzksOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDExMiwxMjEsMzksNDYsCi0gICAgMTE0LDI5LDAsMCwwLDExNCwxMTYsMCwwLDAsMTE0LDg0LDAsMCwwLDExNCwKLSAgICAxMTUsMCwwLDAsMTE0LDcyLDAsMCwwLDQxLDQsMTE0LDM4LDAsMCwwLAotICAgIDExNCwyMzksMCwwLDAsMTE0LDM0LDAsMCwwLDExNCwzMiwwLDAsMCw0MSwKLSAgICA1LDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwxMzEsMCwwLDAsCi0gICAgOTAsMTMsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDk1LDk4LDk3LDExNSwxMDEsOTAsCi0gICAgOSwxMTYsOTcsMTA1LDEwOCw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDE3Nyw1LAotICAgIDAsMCwxMTUsOCwwLDAsMCwwLDMsMjUsMSwyMiwxLDE5LDEsMTIyLAotICAgIDI0LDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDUsCi0gICAgMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMywwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw4MCwKLSAgICAwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDIsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNTcsCi0gICAgMCwxMTYsMiwwLDEwMCwyLDAsMTA2LDMsMCwxMjQsMSwwLDEwNiwxLDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMTYsNCwwLDExNiwKLSAgICA1LDAsMTI0LDIsMCwxMjQsMSwwLDEwNiw2LDAsMTMxLDMsMCwxLDEwMCwKLSAgICAxLDAsODMsNDEsMywxMjIsMTksNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMjIsNTIsOTksOTcsMTEwLAotICAgIDExMCwxMTEsMTE2LDMyLDEwOCwxMTEsOTcsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDEyMywzMywxMTQsMTI1LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCi0gICAgMTAwLDEwMSw0MCw0MSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsNDEsNywxMTQsMTYsMSwwLDAsMTE0LDU3LDAsMCwwLDExNCwxNTQsMCwKLSAgICAwLDAsMTE0LDQ3LDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDE3NiwwLDAsCi0gICAgMCwxMTQsNjMsMCwwLDAsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDE4MCwwLAotICAgIDAsMCwxMTQsMTk1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKLSAgICAwLDExNCw1LDAsMCwwLDExNCwyLDEsMCwwLDE4NSw1LDAsMCwxMTUsCi0gICAgMTAsMCwwLDAsMCwyLDE4LDEsMTIsMSw5LDEsMTgsMSwxMjIsMjUsCi0gICAgOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwMSwxMjAsCi0gICAgMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQxLDgsMTE0LDU3LDAsMCwKLSAgICAwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLAotICAgIDExNCwyMjAsMCwwLDAsMTE0LDIsMSwwLDAsMTE0LDE4MSwwLDAsMCwxMTQsCi0gICAgNSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMzMsMSwwLDAsMTcyLDUsMCwKLSAgICAwLDExNSw4LDAsMCwwLDEyLDMsNiwyLDEyLDgsMTIsOCwxMTQsMzMsCi0gICAgMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgNCwwLDAsMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLDAsCi0gICAgOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsCi0gICAgMCwwLDkwLDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCw5MCw0LAotICAgIDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LDAsCi0gICAgMTAwLDgsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOSwwLDEwMCwxMCwwLDEzMiwKLSAgICAwLDAsOTAsNywwLDEwMCwxMSwwLDEwMCwxOCwwLDEwMCwxMywwLDEwMCwxNCwKLSAgICAwLDEzMiwwLDEsOTAsOCwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsCi0gICAgOTAsOSwwLDEwMCwxNywwLDgzLDQxLDE5LDIxOCwxMiw4MywxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICAyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDEwLDAsMCwKLSAgICAwLDExNiwwLDAsMTMwLDEsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDE3OCw3OSwKLSAgICAxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTYsCi0gICAgMTA0LDk3LDExNiwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMDUsMTA5LAotICAgIDEwMSwzMiw0MCw5NywxMTAsMzIsMTA1LDExMCwxMTYsNDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LAotICAgIDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksMTA1LAotICAgIDEwMiwxMDUsMTAxLDEwMCwzMiwxMTIsOTcsMTE2LDEwNCw0NCwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsMTAsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsOTcsMTA1LDExNSwxMDEsMTE1LDMyLAotICAgIDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk4LDEwMSwzMiwKLSAgICAxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiw3OCw0MSwxLDIxOCw3LDczLDc5LDY5LDExNCwxMTQsMTExLDExNCw0MSwyLDExNCwKLSAgICA3MSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCi0gICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDExMiw5NywxMTYsMTA0LDk1LDEwOSwKLSAgICAxMTYsMTA1LDEwOSwxMDEsMTk4LDUsMCwwLDExNSwyLDAsMCwwLDAsNiwxMjIsCi0gICAgMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDk5LDIsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDIwLDAsCi0gICAgMCwwLDEwNSwxLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCwxMDAsMSwwLDU0LDgzLDQxLDIsOTcsMTcwLDEsMCwwLDc5LDExMiwxMTYsCi0gICAgMTA1LDExMSwxMTAsOTcsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExNCwxMDEsMTE2LAotICAgIDExNywxMTQsMTEwLDEwNSwxMTAsMTAzLDMyLDk3LDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsCi0gICAgOTcsMzIsMTAwLDEwNSw5OSwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAotICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMTUsMTE2LDExNCw0MSw0NiwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiw4MCwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMDcsMTAxLDEyMSwKLSAgICAxMTUsNTgsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDUsMzIsMzksMTA5LDExNiwKLSAgICAxMDUsMTA5LDEwMSwzOSwzMiw0MCwxMDksOTcsMTEwLDEwMCw5NywxMTYsMTExLDExNCwxMjEsNDEsCi0gICAgMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTE3LDEwOSwxMDEsMTE0LDEwNSw5OSwzMiwKLSAgICAxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDExMSwxMDIsMzIsMTA4LDk3LDExNSwKLSAgICAxMTYsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMDksMTExLDEwMCwxMDUsMTAyLDEwNSw5OSw5NywKLSAgICAxMTYsMTA1LDExMSwxMTAsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDUsMzIsCi0gICAgMzksMTE1LDEwNSwxMjIsMTAxLDM5LDMyLDQwLDExMSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwKLSAgICA0MSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDUsMTIyLDEwMSwzMiwxMDUsMTEwLAotICAgIDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywKLSAgICAzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwKLSAgICAxMTEsMTE5LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNiwKLSAgICAxMTEsMzIsMTE0LDEwMSw5NywxMDAsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MiwKLSAgICA5NywxMDUsMTE1LDEwMSwxMTUsMzIsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDQsCi0gICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw5OSw5NywxMTAsMTEwLAotICAgIDExMSwxMTYsMzIsOTgsMTAxLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTAwLDQ2LDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCwxODQsMCwwLDAsNDEsMSwxMTQsMzYsCi0gICAgMSwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMjA2LDUsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsMTEsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsCi0gICAgMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDE2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMiwKLSAgICAwLDEyNCwzLDAsMTMxLDIsMCw4Myw0MSwxLDEyMiwyMjgsNzksMTEyLDExNiwxMDUsCi0gICAgMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksCi0gICAgMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsCi0gICAgMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLAotICAgIDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLAotICAgIDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LAotICAgIDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLAotICAgIDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEyLDk3LAotICAgIDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLAotICAgIDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsOTksMTE2LAotICAgIDEwOCwxMjEsMzIsMTE2LDExNCw5NywxMTAsMTE1LDEwMiwxMDEsMTE0LDMyLDExMiwxMDEsMTE0LDEwOSwKLSAgICAxMDUsMTE1LDExNSwxMDUsMTExLDExMCwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgNDEsMSwyMTgsOCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQxLDQsMTE0LDcxLAotICAgIDAsMCwwLDExNCwxNDIsMCwwLDAsOTAsMTAsOTksOTcsOTksMTA0LDEwMSw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTQsNTMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCi0gICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE1LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMjE5LDUsMCwwLDExNSwyLDAsCi0gICAgMCwwLDAsOCwxMjIsMjgsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKLSAgICAxMDAsMTAxLDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKLSAgICA0MSwyLDEyMiwxNTAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsCi0gICAgMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LAotICAgIDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsCi0gICAgMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLAotICAgIDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LAotICAgIDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwKLSAgICAxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSwKLSAgICA0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwxMTQsNCwwLDAsMCwKLSAgICA0MSwzLDExNCw3MSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDUzLDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAotICAgIDExNCwzOCwxLDAsMCwyMjksNSwwLDAsMTE1LDAsMCwwLDAsMTIyLDIxLAotICAgIDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTAwLDk3LDExNiw5Nyw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLAotICAgIDAsMCwxNiwwLDAsMCw2NywwLDAsMCwxMTUsMTA1LDAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjEsMTksCi0gICAgMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsCi0gICAgODcsMTEwLDU4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw5NCwwLDEsMTI1LAotICAgIDQsMCwxLDEyMiwyNiwwLDExNiwzLDAsMTAwLDEsMCwxMDAsMiwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMSwxMjQsNCwwLDEzMCwyLDAsODcsODksMTAwLDMsMCwKLSAgICAxMDAsMywwLDEyNSw0LDAsMTI2LDQsMCw4OCwxMTAsMSwwLDg4LDExNiw0LAotICAgIDAsMTI0LDMsMCwxMzEsMSwwLDgzLDQxLDQsMTIyLDUyLDY3LDExMSwxMTAsOTksCi0gICAgMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwKLSAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsCi0gICAgMTIyLDM5LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTE4LDk3LAotICAgIDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwzMiwxMTYsMTA0LDExNCwxMTEsMTE3LDEwMywxMDQsMzIsMTAzLAotICAgIDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MCw0MSwxMTQsNjcsMCwwLDAsNzgsNDEsCi0gICAgNSwxMTQsMjM5LDAsMCwwLDIxOCw4LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMTE0LDQwLDAsMCwwLDExNCwxNTQsMCwwLDAsMTE0LDIwNCwwLDAsMCw0MSwKLSAgICA1LDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsMCwKLSAgICAxMTQsMjAyLDAsMCwwLDIxOCwzLDEwMSwxMjAsOTksMTE0LDQsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE3LDEsMCwwLDIzNiw1LAotICAgIDAsMCwxMTUsMTQsMCwwLDAsMCwyLDE1LDEsMywxLDE5LDEsMTgsCi0gICAgMSw5LDEsMzEsMSwxMjIsMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDIxOCw5LAotICAgIDk1LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMTE0LDI5LDAsMCwwLDk5LDMsCi0gICAgMCwwLDAsMSwwLDAsMCw0LDAsMCwwLDksMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDMxLDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMjQsMSwKLSAgICAwLDEyNCwyLDAsMTAwLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwKLSAgICAxMjQsMywwLDEzMSw0LDIsODMsNDEsNSwxMjIsMTMwLDgyLDEwMSwxMTYsMTE3LDExNCwKLSAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksCi0gICAgMTE2LDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiw4NCwxMDQsMTAxLDMyLDM5LDEwMCw5NywxMTYsOTcsMzksMzIsOTcsMTE0LDEwMywxMTcsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTcsMTEwLDEyMSwzMiwKLSAgICAxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTE2LDEyMSwxMTIsMTAxLDMyLDExNiwxMDQsOTcsMTE2LAotICAgIDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDQwLDQxLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsCi0gICAgMTE0LDExNiwxMTUsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDE3NiwwLAotICAgIDAsMCwyMTgsMTIsMTAwLDExMSwxMTAsMTE2LDk1LDEwNSwxMTAsMTA0LDEwMSwxMTQsMTA1LDExNiwKLSAgICA4NCwxMTQsMTE4LDAsMCwwLDQxLDIsMTE0LDExNCwwLDAsMCwyMTgsNyw5OSwKLSAgICAxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSw0MSw0LDExNCw3MSwwLDAsMCwxMTQsNTMsMCwKLSAgICAwLDAsMTE0LDM1LDAsMCwwLDExNCw0MiwxLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTQsMTE1LDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSw5NSwxMTYsMTExLDk1LDk5LDExMSwxMDAsMTAxLDI0Niw1LDAsMCwxMTUsCi0gICAgNCwwLDAsMCwwLDUsMTgsMSwxMjIsMjcsODMsMTExLDExNywxMTQsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNiwxMTEsCi0gICAgOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDEwLDAsCi0gICAgMCwwLDQzLDAsMCwwLDY3LDAsMCwwLDExNSwxNzcsMSwwLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEwMCwxLAotICAgIDAsMTI1LDMsMCwxMjEsMTYsMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsMCwKLSAgICAxMjUsNCwwLDg3LDExMCwyNCwwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNjMsCi0gICAgMCwxLDEsMSwxMDAsMSwwLDEyNSw0LDAsODksMTEwLDIwMiwwLDg4LDEyMSwKLSAgICAxOSwwLDEyNCwwLDAsMTA2LDMsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDUsCi0gICAgMCw4NywxMTAsMTgsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDEwMywwLDEsCi0gICAgMSwxLDg5LDExMCwxNjIsMCw4OCwxMTYsNSwwLDEyNCw1LDAsMTAwLDIsMCwKLSAgICAyNSwxMzEsMSwwLDEyNSwzLDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNiwwLAotICAgIDEyNCw0LDAsMTMxLDEsMCwxMjUsNiwwLDg3LDExMCwxOCwwLDQsMTE2LDcsCi0gICAgMCwxMDcsMTAsMCwxMTQsMTU5LDAsMSwxLDEsODksMTEwLDEwNiwwLDg4LDEyMSwKLSAgICAzNCwwLDExNiw4LDAsMTI0LDYsMCwxMDAsMywwLDEyNCw1LDAsMTAwLDQsCi0gICAgMCwxMjQsMSwwLDEwMCw1LDAsMTI0LDQsMCwxMzEsMSwzLDEyNSw3LDAsCi0gICAgODcsMTEwLDI0LDAsNCwxMTYsOSwwLDExNiwxMCwwLDEwMiwyLDAsMTA3LDEwLAotICAgIDAsMTE0LDIyMCwwLDEsMSwxLDg5LDExMCw0NSwwLDg4LDExNiwxMSwwLDEwMCwKLSAgICA2LDAsMTI0LDQsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMTYsMTIsMCwxMjQsCi0gICAgNywwLDEwMCw0LDAsMTI0LDEsMCwxMDAsNywwLDEyNCw0LDAsMTAwLDgsCi0gICAgMCwxMjQsMiwwLDEzMSwxLDMsODMsMTI0LDAsMCwxMDYsNiwwLDEyNCwyLAotICAgIDAsMTMxLDEsMCwxMjUsOCwwLDEyNCwwLDAsMTA2LDEzLDAsMTI0LDgsMCwKLSAgICAxMjQsMiwwLDEzMSwyLDAsMTI1LDksMCwxMTYsMTEsMCwxMDAsOSwwLDEyNCwKLSAgICAyLDAsMTMxLDIsMCwxLDExNiwxNCwwLDEwNiwxNSwwLDEyLDExNCwxNzMsMSwKLSAgICAxMjQsNCwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTczLDEsMTI0LDMsMCwxMDAsCi0gICAgMSwwLDEwNyw5LDAsMTE0LDE3MywxLDExNiwxNiwwLDEyNCw5LDAsMTI0LDMsCi0gICAgMCwxMTYsMTcsMCwxMjQsOCwwLDEzMSwxLDAsMTMxLDMsMCwxMjUsNiwwLAotICAgIDEyMSwzNiwwLDEyNCwwLDAsMTA2LDE4LDAsMTI0LDIsMCwxMjQsNCwwLDEyNCwKLSAgICA2LDAsMTMxLDMsMCwxLDExNiwxMSwwLDEwMCwxMCwwLDEyNCw0LDAsMTMxLAotICAgIDIsMCwxLDg3LDExMywxNzMsMSw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDE2OSwKLSAgICAxLDEsMSwxLDg5LDExMywxNzMsMSw4OCwxMTAsMCwwLDEyNCw5LDAsODMsCi0gICAgNDEsMTEsMTIyLDE5MCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywKLSAgICAxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiwKLSAgICA5NSw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICA4MiwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksCi0gICAgMTExLDEwMCwxMDEsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwzMiw4NCwxMTEsMzIsMTE5LDExNCwKLSAgICAxMDUsMTE2LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OCwxMjEsMTE2LDEwMSwKLSAgICA5OSwxMTEsMTAwLDEwMSw0NCwzMiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDMyLDEwOSwKLSAgICAxMTcsMTE1LDExNiwzMiw5NywxMDgsMTE1LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw3OCwxMTQsMTg0LDAsMCwwLDExNCwxODgsMCwwLDAsMTE0LDY3LDAsCi0gICAgMCwwLDExNCwzNSwwLDAsMCwxMjIsMTMsMTIzLDEyNSwzMiwxMDksOTcsMTE2LDk5LAotICAgIDEwNCwxMDEsMTE1LDMyLDEyMywxMjUsMTE0LDE0MSwwLDAsMCwxMTQsMTQyLDAsMCwwLAotICAgIDEyMiwxOSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExNCwKLSAgICAxMTEsMTA5LDMyLDEyMywxMjUsMTIyLDEwLDExOSwxMTQsMTExLDExNiwxMDEsMzIsMTIzLDMzLDExNCwKLSAgICAxMjUsNDEsMTksMTE0LDIzOSwwLDAsMCwxMTQsMTMyLDAsMCwwLDExNCwxMjMsMCwKLSAgICAwLDAsMTE0LDM3LDEsMCwwLDExNCwzNSwxLDAsMCwxMTQsMTQsMCwwLAotICAgIDAsMTE0LDQwLDEsMCwwLDExNCw0MCwwLDAsMCwxMTQsMTkxLDAsMCwwLAotICAgIDExNCwxNTQsMCwwLDAsMTE0LDE4NywwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwKLSAgICAxOTYsMCwwLDAsMTE0LDQ1LDEsMCwwLDExNCw3LDAsMCwwLDIxOCwxOSwKLSAgICAxMDAsMTExLDExMCwxMTYsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwKLSAgICAxMTEsMTAwLDEwMSwxMTQsMTk5LDAsMCwwLDExNCwzMSwwLDAsMCwxMTQsMzksMSwKLSAgICAwLDAsNDEsMTAsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDE0MiwKLSAgICAwLDAsMCwxMTQsMTg5LDAsMCwwLDExNCwxNDEsMCwwLDAsMjE4LDIsMTE1LAotICAgIDExNiwxMTQsNTMsMCwwLDAsMjE4LDEwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsCi0gICAgMTE2LDk3LDExNCwyMDIsMCwwLDAsOTAsMTEsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LAotICAgIDEwNiwxMDEsOTksMTE2LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDExNCwxNiwxLDAsMCwyNTQsNSwwLDAsMTE1LDc4LDAsMCwKLSAgICAwLDAsNywxNSwxLDYsMSwzLDEsMTYsMSwxMywxLDExLDIsMywKLSAgICAxLDE5LDEsMTMsMSw1LDIsMTYsMSwzLDEsMTksMSwxMywxLDUsCi0gICAgMiwzLDEsOSwxLDEyLDEsMTMsMSwxOSwxLDUsMiw5LDEsNywKLSAgICAxLDE1LDEsNiwxLDcsMSwxNSwxLDE4LDEsMTMsMSwyMiwxLDEyLAotICAgIDEsOSwxLDE1LDEsMywxLDE5LDEsMTcsMSwxMywxLDgsMSwxMjIsCi0gICAgMjEsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLAotICAgIDExNiw5NSw5OSwxMTEsMTAwLDEwMSw3OCwxMTQsMTM5LDAsMCwwLDQxLDEwLDExNCw1NywKLSAgICAwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwzNiwxLAotICAgIDAsMCwxMTQsMzcsMSwwLDAsMTE0LDM5LDEsMCwwLDExNCwzOCwxLDAsCi0gICAgMCwxMTQsMTcsMSwwLDAsMTE0LDQ1LDEsMCwwLDExNCwxNiwxLDAsMCwKLSAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwxMTQsMzQsMSwwLDAsMTk2LDUsMCwwLDExNSwxNCwwLAotICAgIDAsMCwxMiwyLDEyLDgsMTIsMTMsMTIsMTAsMTIsNywxMiwxMCwxOCw4LAotICAgIDExNCwzNCwxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAgIDAsMCw0LDAsMCwwLDAsMCwwLDAsMTE1LDExMiwwLDAsMCwxMDEsCi0gICAgMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsCi0gICAgMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwKLSAgICAxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsCi0gICAgMCwwLDkwLDYsMCwxMDEsNywwLDEzNSwwLDAsMTAyLDEsMCwxMDAsOCwKLSAgICAwLDEwMCw5LDAsMTM0LDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywwLAotICAgIDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw5LDAsMTAwLAotICAgIDEyLDAsMTAwLDEzLDAsMTMyLDAsMCw5MCwxMCwwLDEzNSwwLDAsODMsNDEsCi0gICAgMTQsMjE4LDEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsMTAzLDY2LAotICAgIDk3LDExNSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgOTksMTA4LDk3LDExNSwxMTUsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMDksMTEyLDEwOCwKLSAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDMyLDExMiwxMTQsMTExLDExNiwxMTEsOTksMTExLDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLAotICAgIDEwMCwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMTAsMzIsMzIsMzIsMzIsMTE0LDEwMSwxMTMsMTE3LAotICAgIDEwNSwxMTQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiwKLSAgICAxMTcsMTE1LDk3LDEwMywxMDEsNDYsOTksMywwLDAsMCwwLDAsMCwwLDMsCi0gICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsCi0gICAgMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsCi0gICAgMSwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNzUsNjcsOTcsOTksMTA0LDEwMSwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsCi0gICAgMTIxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwMiwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDc4LDQxLDIsMTE0LDY3LDAsMCwwLDExNCwzNSwwLAotICAgIDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwxMTQsNzIsMCwwLDAsNTUsNiwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMCwzLDksMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwzNCwKLSAgICAwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMCwwLDEwNywKLSAgICAyLDAsMTExLDMzLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTA2LDEsCi0gICAgMCwxMDcsMiwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsMjI1LDAsMCwwLDExNCwKLSAgICA2MywwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMjI4LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKLSAgICAyMzAsMCwwLDAsNjEsNiwwLDAsMTE1LDQsMCwwLDAsMCwxLDE4LAotICAgIDEsMTIyLDE3LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwKLSAgICAxMDEsMTEzLDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTE2LDAsMCwxMjQsMCwwLAotICAgIDEwNiwyLDAsMTMxLDEsMCw2NSw4Myw0MSwxLDc4LDQxLDMsMjE4LDQsMTA0LAotICAgIDk3LDExNSwxMDQsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSwxLDExNCwKLSAgICA3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKLSAgICAwLDAsMCwyMTgsOCw5NSw5NSwxMDQsOTcsMTE1LDEwNCw5NSw5NSw2NSw2LDAsCi0gICAgMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDQsOTcsMTE1LDEwNCw5NSw5NSw5OSwyLDAsCi0gICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwKLSAgICAwLDAsMTE1LDIyLDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMjQsMCwwLAotICAgIDEzMSwyLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDEsMSwxMjIsCi0gICAgMTAwLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsCi0gICAgMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw0MSwzLDIxOCw1LDExNSwxMTcsMTEyLDEwMSwxMTQsMTE0LDQ5LAotICAgIDEsMCwwLDExNCw1LDEsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwKLSAgICAxNTksMCwwLDAsNDEsMSwxMTQsMjI1LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw1LDAsMCwwLDExNCw1LDEsMCwwLDY4LDYsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsMTAsMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsCi0gICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsCi0gICAgMCwwLDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCw4Myw0MSwxLAotICAgIDEyMiw1OCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsOTcsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDQxLDEsMTE0LDM1LAotICAgIDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIzOSwKLSAgICAwLDAsMCw4MCw2LDAsMCwxMTUsMiwwLDAsMCwwLDMsMTIyLDIzLAotICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDMsMCwwLDAsOCwwLDAsMCw2NywwLDAsMCwxMTUsNDEsMCwwLAotICAgIDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLAotICAgIDE0MywxNywwLDEyNSwyLDAsMTI0LDIsMCwxMDYsMiwwLDEzMSwwLDAsODMsCi0gICAgODcsMTAwLDIsMCw4MSw4OCwxMDAsMiwwLDgzLDQxLDMsMTIyLDM5LDgyLDEwMSwKLSAgICAxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDIsMTE0LAotICAgIDExMSwxMDksMzIsMTEyLDk3LDExNiwxMDQsMzIsOTcsMTE1LDMyLDExNCw5NywxMTksMzIsOTgsCi0gICAgMTIxLDExNiwxMDEsMTE1LDQ2LDIxOCwxLDExNCw3OCw0MSwzLDExNCw0OSwwLDAsMCwKLSAgICAxMTQsNTAsMCwwLDAsOTAsNCwxMTQsMTAxLDk3LDEwMCw0MSwzLDExNCw3MSwwLAotICAgIDAsMCwxMTQsMzUsMCwwLDAsMTE0LDU0LDAsMCwwLDExNCw0LDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw0MCwxLDAsMCwKLSAgICA4NSw2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMjEsMSwxMjIsMTksNzAsCi0gICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMCw5NywKLSAgICAxMTYsOTcsNDEsMTEsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsCi0gICAgMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsMjMwLDAsCi0gICAgMCwwLDExNCw1MSwxLDAsMCwxMTQsMTU3LDAsMCwwLDExNCw1LDEsMCwKLSAgICAwLDExNCwyMzksMCwwLDAsMTE0LDQwLDEsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDQxLDEsMTE0LDIyNSwwLDAsMCwxMTQsNSwwLDAsCi0gICAgMCwxMTQsNDksMSwwLDAsNTAsNiwwLDAsMTE1LDE0LDAsMCwwLDEyLAotICAgIDMsNiwyLDEyLDYsMTIsNCwxMiwzLDI0LDEyLDE4LDUsMTE0LDQ5LDEsCi0gICAgMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsCi0gICAgMCwwLDAsNjQsMCwwLDAsMTE1LDY0LDAsMCwwLDEwMSwwLDAsOTAsCi0gICAgMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLAotICAgIDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsCi0gICAgMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEwMCw4LDAsMTAwLAotICAgIDksMCwxMzIsMCwxLDkwLDYsMCwxMDAsMTAsMCw4Myw0MSwxMSwxMTQsOSwKLSAgICAxLDAsMCwxMjIsNjIsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsCi0gICAgODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTcsMTE1LDEwNSwKLSAgICAxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsCi0gICAgMTAxLDEwOSw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwKLSAgICAzLDAsMCwwLDY3LDAsMCwwLDExNSwzNiwwLDAsMCwxMTYsMCwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEwNSwyLDAsMTI0LDIsMCwxMDYsCi0gICAgMSwwLDEwMCwxLDAsNTQsMTI0LDIsMCwxMDYsMiwwLDEwMCwyLDAsNTQsCi0gICAgODMsNDEsMywxMjIsMzMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDQ2LDExNCwxODQsMCwwLDAsMTE0LDE4NSwwLDAsMCwKLSAgICA0MSwzLDExNCwzOSwwLDAsMCwyMTgsOCwxMTUsMTE2LDk1LDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsOTAsNywxMTUsMTE2LDk1LDExNSwxMDUsMTIyLDEwMSw0MSwzLDExNCw3MSwwLDAsCi0gICAgMCwxMTQsMzUsMCwwLDAsMTE0LDQ3LDEsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzNywxLDAsMCw5NSwKLSAgICA2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTIsMSwxMjIsMjcsODMsMTExLAotICAgIDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwwLDAsMCwwLDAsCi0gICAgMCwwLDUsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMzQsCi0gICAgMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwxMjQsCi0gICAgMCwwLDEwNiwxLDAsMTI0LDIsMCwxMjQsMywwLDEwMCwxLDAsMTI0LDQsCi0gICAgMCwxMzEsMiwxLDgzLDQxLDIsNzgsMjE4LDUsOTUsMTA5LDExMSwxMDAsMTAxLDQxLAotICAgIDIsMTE0LDE0NSwwLDAsMCwxMTQsMzgsMSwwLDAsNDEsNSwxMTQsNzEsMCwKLSAgICAwLDAsMTE0LDE0MiwwLDAsMCwxMTQsMTQxLDAsMCwwLDExNCw1MywwLDAsCi0gICAgMCwxMTQsNDIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDUsMCwwLDAsMTE0LDM5LDEsMCwwLDEwMCw2LDAsMCwxMTUsNCwKLSAgICAwLDAsMCwwLDIsMTIsMSwxMjIsMzIsODMsMTExLDExNywxMTQsOTksMTAxLDcwLAotICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNCw1NSwxLDAsMCwxMDUsMTgyLAotICAgIDEsMCwwLDk5LDMsMCwwLDAsMSwwLDAsMCw5LDAsMCwwLAotICAgIDE3LDAsMCwwLDY3LDAsMCwwLDExNSw1MywxLDAsMCwxMTYsMCwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEwMywKLSAgICAwLDAsMTI1LDYsMCwxMjAsNTQsMCwxMjQsNCwwLDExNCw4MCwwLDExNiwxLAotICAgIDAsMTI0LDQsMCwxMzEsMSwwLDEyLDExNCw4MCwwLDExNiwwLDAsMTI0LDQsCi0gICAgMCwxMzEsMSwwLDkyLDIsMCwxMjUsNCwwLDEyNSw3LDAsMTI0LDYsMCwKLSAgICAxMDYsMiwwLDEyNCw3LDAsMTMxLDEsMCwxLDExMywyNywwLDg3LDEyMCwxMzIsCi0gICAgMCwxMTYsMywwLDEyNCw2LDAsMTMxLDEsMCw2OCw5MywxMTgsMCwxMjUsNywKLSAgICAwLDExNiw0LDAsMTI0LDQsMCwxMjQsNywwLDEzMSwyLDAsMTI1LDQsMCwKLSAgICAxMjEsMTcsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEsCi0gICAgODcsMTEzLDk0LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTUsMCwxLDEsCi0gICAgMSwxMTksOTQsMCw4OSwxMTMsOTQsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LAotICAgIDIxMSwwLDEsMTI1LDgsMCwxLDEyMiwyNSwwLDExNiw5LDAsMTAwLDEsMCwKLSAgICAxMjQsNCwwLDEyNCw4LDAsMTMxLDMsMCwxLDEwMCwyLDAsODMsODcsODksCi0gICAgMTAwLDIsMCwxMDAsMiwwLDEyNSw4LDAsMTI2LDgsMCw4OCwxMTMsOTQsMCwKLSAgICA4OCwxMTMsOTQsMCw4NywxMjEsMzMsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwyLAotICAgIDAsMTI0LDMsMCwxMzEsMywwLDEsMTE2LDksMCwxMDAsMywwLDEyNCwxLAotICAgIDAsMTMxLDIsMCwxLDg3LDExMCw1MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwKLSAgICAxMTQsNDgsMSwxLDEyNSw4LDAsMSwxMjIsMjEsMCwxMTYsOSwwLDEwMCwxLAotICAgIDAsMTI0LDEsMCwxMjQsOCwwLDEzMSwzLDAsMSw4Nyw4OSwxMDAsMiwwLAotICAgIDEwMCwyLDAsMTI1LDgsMCwxMjYsOCwwLDg4LDExMCwxLDAsODgsMTAwLDIsCi0gICAgMCw4Myw0MSw0LDEyMiwyNyw4NywxMTQsMTA1LDExNiwxMDEsMzIsOTgsMTIxLDExNiwxMDEsCi0gICAgMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsCi0gICAgNDYsMTIyLDI3LDk5LDExMSwxMTcsMTA4LDEwMCwzMiwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLAotICAgIDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsNzgsMTIyLAotICAgIDEyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwxMDAsMzIsMTIzLDMzLDExNCwxMjUsNDEsMTEsMTE0LAotICAgIDM4LDAsMCwwLDExNCw0NiwwLDAsMCwxMTQsMjI0LDAsMCwwLDExNCwzMywKLSAgICAwLDAsMCwxMTQsMjgsMCwwLDAsMTE0LDMsMCwwLDAsOTAsNSwxMDksCi0gICAgMTA3LDEwMCwxMDUsMTE0LDIxOCwxNSw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsMTE1LAotICAgIDY5LDExNCwxMTQsMTExLDExNCwxMTQsNDAsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsCi0gICAgNTUsMCwwLDAsNDEsOSwxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwwLAotICAgIDExNCw1MywwLDAsMCwxMTQsNTUsMSwwLDAsMTE0LDIzNCwwLDAsMCwxMTQsCi0gICAgMTMxLDAsMCwwLDExNCwyNywwLDAsMCwxMTQsMjMsMCwwLDAsMTE0LDQxLAotICAgIDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCi0gICAgMCwwLDExNCwzOCwxLDAsMCwxMDUsNiwwLDAsMTE1LDM4LDAsMCwwLAotICAgIDAsMiwxOCwxLDYsMiwyMiwxLDE4LDEsMTcsMiwxOSwxLDE1LDEsCi0gICAgMywxLDE3LDEsMTMsMiw3LDEsMTgsMywxNiwxLDI3LDEsMywxLAotICAgIDE2LDEsMTcsMSwxOCwyLDEyMiwyNSw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsCi0gICAgOTcsNzgsNDEsNywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwKLSAgICAwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDM3LDEsMCwwLDExNCwzOSwxLAotICAgIDAsMCwxMTQsMzgsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDksMSwwLDAsCi0gICAgOTEsNiwwLDAsMTE1LDgsMCwwLDAsMTIsMiw2LDIsMTIsNSwxMiwKLSAgICA1LDExNCw5LDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDE2LDExNCwxLDAsMCwwLDExNCwwLDAsMCwwLDExNCwyLDAsMCwwLAorICAgIDExNCwzLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDkyLDAsMCwwLDExNCwKKyAgICAxNTksMCwwLDAsMTE0LDE1NCwwLDAsMCwxMTQsMTU1LDAsMCwwLDExNCwxMzgsCisgICAgMCwwLDAsMTE0LDEzOSwwLDAsMCwxMTQsMTQ2LDAsMCwwLDExNCw4NCwwLAorICAgIDAsMCwxMTQsMTU2LDAsMCwwLDExNCwxNTcsMCwwLDAsMTE0LDEwOSwwLDAsCisgICAgMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwKKyAgICAxMTQsMTEsMCwwLDAsMTE0LDE2MCwwLDAsMCwzLDMsMCwwLDExNSwzMCwKKyAgICAwLDAsMCwxMiw3LDYsMiwxOCw5LDMsMSwyMSw2LDMsMSwxOCwKKyAgICA4LDE4LDQsMTgsOSwxOCw5LDMsMSwyMSw1LDMsMSwyMSw1LDMsCisgICAgMSwxMTQsMTYwLDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLAogICAgIDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDQ2LDAsMCwwLAogICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsCiAgICAgMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwKICAgICAwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCw4Myw0MSw3LAotICAgIDExNCw4LDEsMCwwLDEyMiw0NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE5LDEwNCwKLSAgICAxMDUsOTksMTA0LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTE1LDMyLDExNSwxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMTUsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLAotICAgIDAsNiwwLDAsMCw2NywwLDAsMCwxMTUsNzYsMCwwLDAsMTI0LDAsCi0gICAgMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwxMTYsMiwwLDEyNCwKLSAgICAzLDAsMTAwLDEsMCwxMjQsMSwwLDEwMCwyLDAsMTI0LDIsMCwxMzEsMSwKLSAgICAyLDEyNSw0LDAsMTE2LDMsMCwxMjQsNCwwLDEwMCwxLDAsMTI0LDEsMCwKLSAgICAxMDAsMywwLDEyNCwyLDAsMTMxLDEsMiw4Myw0MSw0LDc4LDExNCw2NywwLAotICAgIDAsMCwxMTQsMzUsMCwwLDAsMTE0LDE0MSwwLDAsMCw0MSw0LDExNCwyMzksCi0gICAgMCwwLDAsMTE0LDQwLDEsMCwwLDExNCwxOTEsMCwwLDAsMTE0LDE5NiwwLAotICAgIDAsMCw0MSw1LDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwKLSAgICAwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LDQ4LDEsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNiwxLDAsCi0gICAgMCwxMzgsNiwwLDAsMTE1LDgsMCwwLDAsMCwxLDE1LDEsMTUsMSwKLSAgICAyNCwxLDEyMiwyOSw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAotICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsCi0gICAgMiwxMjIsMzksODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywKLSAgICAxMTUsMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMzIsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsMCwKLSAgICA0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw0LDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNywxLDAsMCwKLSAgICAxNDQsNiwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwzMSw4MywxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc4LDQxLDYsMTE0LAotICAgIDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LAotICAgIDAsMCwwLDExNCwxNiwxLDAsMCwxMTQsMTcsMSwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDgsMSwwLDAsMTM0LDYsMCwwLDExNSw2LDAsMCwwLDEyLAotICAgIDIsNiwyLDEyLDYsMTE0LDgsMSwwLDAsOTksMCwwLDAsMCwwLAotICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCw2NCwwLDAsMCwxMTUsCi0gICAgMTMwLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLAotICAgIDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLAotICAgIDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsCi0gICAgMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMSw3LDAsMTAwLDgsMCwKLSAgICAxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsMTAwLDEwLDAsMTAwLAotICAgIDExLDAsMTMyLDAsMCw5MCw5LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsCi0gICAgMCw5MCwxMCwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTEsMCwKLSAgICAxMDEsNywwLDEwMCwxNiwwLDEwMCwxNywwLDEzMiwwLDAsMTMxLDEsMCw5MCwKLSAgICAxMiwwLDEwMCwxOCwwLDgzLDQxLDE5LDIxOCwxOSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LAotICAgIDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsOTMsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LAotICAgIDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiw4NCwxMDQsMTAxLDMyLDk5LDExMSwxMTAsMTE1LDExNiwxMTQsMTE3LDk5LDExNiwxMTEsCi0gICAgMTE0LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTYsMTExLAotICAgIDMyLDExOSwxMTEsMTE0LDEwNywzMiwxMTksMTA1LDExNiwxMDQsMzIsNzAsMTA1LDEwOCwxMDEsNzAsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwzLDAsMCwKLSAgICAwLDAsMCwwLDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwyMiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEyNCwKLSAgICAyLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLAotICAgIDIsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSwzLDExNCw3MSwwLAotICAgIDAsMCwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MiwwLDAsMCwKLSAgICAxNjEsNiwwLDAsMTE1LDQsMCwwLDAsMCwxLDksMSwxMjIsMjgsNjksCi0gICAgMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsCi0gICAgMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwwLAotICAgIDAsMTA3LDIsMCwxMTEsMzMsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwKLSAgICAxMDYsMSwwLDEwNywyLDAsODMsNDEsMSw3OCw0MSwyLDExNCwyMjUsMCwwLAotICAgIDAsMTE0LDYzLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwyMjgsMCwKLSAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDIzMCwwLDAsMCwxNjUsNiwwLDAsMTE1LDQsMCwwLDAsMCwKLSAgICAxLDE4LDEsMTIyLDI2LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMTMsOTUsOTUsOTksCi0gICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwKLSAgICAxLDAsMTMxLDEsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDIsMCwxMzEsMSwKLSAgICAwLDY1LDgzLDQxLDEsNzgsNDEsMywxMTQsNTAsMSwwLDAsMTE0LDY3LDAsCi0gICAgMCwwLDExNCwzNSwwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNTEsMSwKLSAgICAwLDAsMTY5LDYsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsNjksCi0gICAgMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsOTksMiwwLDAsMCwKLSAgICAwLDAsMCwwLDQsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDE4MywwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxNDMsMjksCi0gICAgMCwxLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTI0LDAsCi0gICAgMCwxMDYsNCwwLDEzMSwzLDAsMTI1LDIsMCw4NywxMDAsMSwwLDgxLDg4LAotICAgIDExNiw1LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDIsMCwxLAotICAgIDEyNCwwLDAsMTA2LDYsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsCi0gICAgMywwLDExNCwxMjQsMCwxMTYsNywwLDEyNCwyLDAsMTAwLDMsMCwxMzEsMiwKLSAgICAwLDEyLDExNCwxMjQsMCwxMTYsOCwwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwKLSAgICAwLDEwMCw0LDAsMjUsMTAzLDEsMCwxMjQsMiwwLDk1LDksMCwxMTAsMCwKLSAgICAwLDEyNCwwLDAsMTI0LDIsMCw5NSwxMCwwLDEyNCwyLDAsMTA2LDExLDAsCi0gICAgMTI0LDIsMCw5NSwxMiwwLDEyNCwzLDAsMTE1LDE3OSwwLDEyNCwyLDAsMTA2LAotICAgIDEyLDAsMTA2LDEzLDAsMTAwLDUsMCwxMzEsMSwwLDEwMCw0LDAsMjUsMTI0LAotICAgIDIsMCw5NSwxMiwwLDExMCwwLDAsMTI0LDIsMCw4Myw0MSw2LDEyMiwyNSwKLSAgICA3NiwxMTEsOTcsMTAwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMjIsMzMsMTAxLDEyMCwxMTYsMTAxLAotICAgIDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsMTE0LDI0NywwLAotICAgIDAsMCwxMTQsODQsMCwwLDAsMTE0LDExNiwwLDAsMCw0MSwxNCwxMTQsNjksCi0gICAgMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTA2LDAsMCwwLDkwLDEyLDEwOCwKLSAgICAxMTEsOTcsMTAwLDk1LDEwMCwxMjEsMTEwLDk3LDEwOSwxMDUsOTksMTE0LDM1LDAsMCwwLAotICAgIDExNCwxNTMsMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsNjAsMCwwLDAsMTE0LAotICAgIDM4LDAsMCwwLDExNCwyNDcsMCwwLDAsMTE0LDIwNSwwLDAsMCwxMTQsNTcsCi0gICAgMCwwLDAsMTE0LDI1MSwwLDAsMCwxMTQsMzIsMCwwLDAsNDEsNCwxMTQsCi0gICAgNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCwyMjAsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMTE0LDUsMSwwLDAsMTcyLDYsMCwwLDExNSwyNCwwLDAsMCwKLSAgICAwLDUsMTMsMSw5LDEsMjEsMSwxNiwxLDE1LDEsMjIsMSwyOCwxLAotICAgIDksMSwxMiwxLDYsMSwyOCwxLDEyMiwzMSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LAotICAgIDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLAotICAgIDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsMTE1LDQ4LAotICAgIDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTAwLAotICAgIDEsMCwyNSwxMzcsMCwwLDExNiwyLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwKLSAgICAyLDAsMTAwLDMsMCwxMzQsMCwwLDExNiwzLDAsNjgsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDgzLDQxLDQsMTIyLDQ5LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsODQsMTE0LAotICAgIDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwKLSAgICAxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLAotICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NiwxMTQsMjksMCwwLDAsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsMCw1MSwwLAotICAgIDAsMCwxMTUsMzEsMCwwLDAsMTI0LDAsMCw5MywyMSwwLDEyNSwxLDAsCi0gICAgMTM2LDAsMCwxMDAsMCwwLDEyNCwxLDAsMjMsMTA3LDIsMCw4NiwxLDExMywKLSAgICAzLDAsMTAwLDEsMCw4Myw0MSwyLDExNCw3MiwwLDAsMCw3OCwxMTQsNCwKLSAgICAwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwyMTgsNiwxMTUsMTE3LDEwMiwxMDIsCi0gICAgMTA1LDEyMCw0MSwxLDIxOCw5LDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzcsMCwwLDAsMTkzLDYsCi0gICAgMCwwLDExNSwyLDAsMCwwLDYsMSwxMjIsNDksNjksMTIwLDExNiwxMDEsMTEwLAotICAgIDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LAotICAgIDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsCi0gICAgMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw0MSw0LDExNCwzOCwKLSAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDc4LDAsMCwwLDIxOCwxOCw2OSwKLSAgICA4OCw4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSwKLSAgICA4Myw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw0LDAsCi0gICAgMCwwLDQxLDEsMTE0LDU5LDEsMCwwLDExNCw1LDAsMCwwLDExNCwyMjAsCi0gICAgMCwwLDAsMTkwLDYsMCwwLDExNSw2LDAsMCwwLDAsMiwxOSwxLAotICAgIDE4LDEsMTIyLDMwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwKLSAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKLSAgICA0MSwyLDEyMiw2Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAotICAgIDk3LDExNSwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk5LDExNCwKLSAgICAxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSwKLSAgICA5OSwxMTYsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsCi0gICAgMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwxMTQsMTYsMSwwLDAsMTk2LDYsMCwwLDExNSwyLDAsCi0gICAgMCwwLDAsMiwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwKLSAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLAotICAgIDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLAotICAgIDQxLDIsMTIyLDUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCi0gICAgOTcsMTE1LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNSwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsNDEsCi0gICAgMiwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwKLSAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTcsMSwwLDAsMjAwLAotICAgIDYsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMzAsNjksMTIwLDExNiwxMDEsCi0gICAgMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsMCwwLDAsCi0gICAgMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICA3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCw4Myw0MSwxLDEyMiw1OCw4MiwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKLSAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwKLSAgICAxMDEsMzIsOTcsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDQxLDEsMTE0LDM1LDAsMCwwLAotICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIzOSwwLDAsMCwKLSAgICAyMDQsNiwwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwzMiw2OSwxMjAsMTE2LAotICAgIDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICA0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNzgsNDEsMTMsCi0gICAgMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LAotICAgIDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsMjMwLDAsMCwwLDExNCw1MSwKLSAgICAxLDAsMCwxMTQsMTU3LDAsMCwwLDExNCw1LDEsMCwwLDExNCwyMjAsMCwKLSAgICAwLDAsMTE0LDE2LDEsMCwwLDExNCwxNywxLDAsMCwxMTQsMjM5LDAsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw1LDAsMCwwLDExNCw1NywxLDAsMCwxNTMsNiwwLDAsMTE1LDE4LAotICAgIDAsMCwwLDEyLDYsNiwyLDEyLDQsMTIsNCwxMiwzLDE4LDE4LDEyLAotICAgIDYsMTIsNCwxMiw0LDExNCw1NywxLDAsMCw5OSwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSwKLSAgICAxMzAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsCi0gICAgMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsCi0gICAgNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwKLSAgICAwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsMCwxMDAsOSwwLAotICAgIDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsCi0gICAgOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsOSwwLDEwMCwxNCwKLSAgICAwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTYsMCwxMDAsMTcsMCwKLSAgICAxMzIsMCwwLDkwLDExLDAsMTAwLDE4LDAsMTAwLDE5LDAsMTMyLDAsMCw5MCwKLSAgICAxMiwwLDEwMCwyMCwwLDgzLDQxLDIxLDIxOCwxNCw5NSw3OCw5NywxMDksMTAxLDExNSwKLSAgICAxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsOTcsMzgsMSwwLDAsODIsMTAxLDExMiwKLSAgICAxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDM5LDExNSwzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCw0NiwzMiwzMiw3MywxMTYsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwLDMyLDMyLDMyLAotICAgIDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywxMTQsCi0gICAgMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwzMiwKLSAgICAxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwOCwxMTEsCi0gICAgMTExLDEwNywxMTUsMzIsMTE3LDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsCi0gICAgMTE2LDM5LDExNSwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwKLSAgICA0NiwzMiwzMiw4NywxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsOTksMTA0LDk3LAotICAgIDExMCwxMDMsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzOSwxMTUsMzIsMTExLDExOSwxMTAsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTQsCi0gICAgMTAxLDk5LDExMSwxMDksMTEyLDExNywxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwxMTcsCi0gICAgMTE1LDEwNSwxMTAsMTAzLDMyLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDQ2LDMyLDMyLDcwLDExMSwxMTQsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwKLSAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LAotICAgIDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLDk3LAotICAgIDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCi0gICAgMTE2LDEwNCw0Niw5OSw0LDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwKLSAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSw1MiwwLDAsMCwxMjQsMSwwLAotICAgIDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTE2LAotICAgIDIsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNCwwLAotICAgIDAsOTUsNCwwLDEyNCwzLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsMCwKLSAgICA4Myw0MSwxLDc4LDQxLDYsMTE0LDcwLDAsMCwwLDExNCwyNTQsMCwwLDAsCi0gICAgMTE0LDIzMiwwLDAsMCwyMTgsMTYsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsCi0gICAgMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwyMTgsMTcsOTUsMTA4LDk3LDExNSwxMTYsOTUsMTEyLAotICAgIDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwyMTgsMTIsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDEsNCwxMTQsNzEsMCwwLDAsMTE0LAotICAgIDY3LDAsMCwwLDExNCwzNSwwLDAsMCwyMTgsMTEsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDIxNyw2LDAsMCwxMTUsOCwKLSAgICAwLDAsMCwwLDEsOSwxLDksMSwyMSwxLDEyMiwyMyw5NSw3OCw5NywKLSAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA1LDExMCwKLSAgICAxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCw0LDAsMCwKLSAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwwLDEyNCwwLAotICAgIDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCw5MiwzLDAsCi0gICAgMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMiwwLDEwNywKLSAgICAyLDAsMTE0LDQzLDAsMTAwLDYsMCw4MywxMjQsMSwwLDEwMCw1LDAsMTAyLAotICAgIDIsMCw4Myw0MSw3LDEyMiw2Miw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywKLSAgICAzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLDExMSwxMDIsMzIsNDAsMTEyLDk3LDExNCwxMDEsMTEwLAotICAgIDExNiw0NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NSwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTIsCi0gICAgOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDExMiw5NywxMTYsMTA0LDQ1LDk3LDExNiwxMTYsMTE0LDQ1LAotICAgIDExMCw5NywxMDksMTAxLDQxLDExNCwxMTYsMCwwLDAsMTE0LDMwLDAsMCwwLDExNCwKLSAgICA3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMjQ3LDAsMCwwLDQxLDIsCi0gICAgMTIyLDMsMTE1LDEyMSwxMTUsMTIyLDQsMTEyLDk3LDExNiwxMDQsNDEsMiwxMTQsNzAsMCwKLSAgICAwLDAsMTE0LDMyLDAsMCwwLDQxLDQsMTE0LDcxLDAsMCwwLDExNCwyMzQsCi0gICAgMCwwLDAsMjE4LDMsMTAwLDExMSwxMTYsMTE0LDk0LDAsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyMyw5NSwxMDIsCi0gICAgMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMjIzLDYsMCwwLDExNSw4LDAsMCwwLDAsMiwKLSAgICAyNywxLDEyLDIsNCwzLDEyMiwzOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsCi0gICAgMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDM4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwKLSAgICAwLDkyLDIsMCwxMjUsMSwwLDEyNSwyLDAsMTE2LDEsMCwxMTYsMiwwLAotICAgIDEwNiwzLDAsMTI0LDEsMCwyNSwxMjQsMiwwLDEzMSwyLDAsODMsNDEsMSwKLSAgICA3OCw0MSw0LDExNCw2NywxLDAsMCwxMTQsNjIsMCwwLDAsMTE0LDcsMCwKLSAgICAwLDAsMTE0LDczLDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwwLDkwLDE4LAotICAgIDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTAsMTQsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwxMTQsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDYyLDEsMCwwLDIzMyw2LDAsMCwxMTUsNCwwLDAsMCwwLAotICAgIDEsMTgsMSwxMjIsMzEsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCwKLSAgICA5NywxMTYsMTA0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLAotICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTI3LDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCwxMjUsMSwwLAotICAgIDEyNCwxLDAsMTI0LDAsMCwxMDYsMiwwLDEwNywzLDAsMTE0LDEyMCwwLDEyNCwKLSAgICAwLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsMiwKLSAgICAwLDEyNSwyLDAsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDEwOCwwLAotICAgIDEyNCwyLDAsMTA2LDUsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyNCwKLSAgICAyLDAsMTA2LDYsMCwxMTQsMTA4LDAsMTI0LDIsMCwxMDYsNiwwLDEyNCwwLAotICAgIDAsOTUsNywwLDExMywxMDgsMCwxMTAsMCwwLDEyNCwxLDAsMTI0LDAsMCwKLSAgICA5NSwyLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiw3LDAsODMsNDEsMSw3OCwKLSAgICA0MSw4LDExNCwyMzIsMCwwLDAsMTE0LDYyLDEsMCwwLDExNCw2MywxLDAsCi0gICAgMCwxMTQsNjQsMSwwLDAsMTE0LDcwLDAsMCwwLDExNCwxNzAsMCwwLDAsCi0gICAgMTE0LDIyMSwwLDAsMCwxMTQsMjU0LDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwKLSAgICAwLDkwLDExLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE3OCwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwyMTgsMTIsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAotICAgIDIzNyw2LDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE4LDEsMTUsMSwyMSwKLSAgICAzLDI3LDEsOSwxLDE4LDEsMTIsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwKLSAgICAxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDExNCwxMDEsOTksOTcsMTA4LAotICAgIDk5LDExNywxMDgsOTcsMTE2LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwKLSAgICAxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsODMsCi0gICAgNDEsMSw3OCw0MSwyLDIxOCw0LDEwNSwxMTYsMTAxLDExNCwxMTQsNjgsMSwwLDAsCi0gICAgNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LAotICAgIDI1MCw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLDk1LDc4LDk3LAotICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTE2LAotICAgIDEwMSwxMTQsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAotICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQxLDEsCi0gICAgNzgsNDEsMiwxMTQsMzEsMCwwLDAsMTE0LDY4LDEsMCwwLDQxLDEsMTE0LAotICAgIDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDIxOCw3LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDI1Myw2LDAsMCwKLSAgICAxMTUsMiwwLDAsMCwwLDEsMTIyLDIyLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LAotICAgIDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMjAsOTUsNzgsCi0gICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQwLDEyMywzMywxMTQsCi0gICAgMTI1LDQxLDQxLDIsMTE0LDQ3LDAsMCwwLDExNCwyNTQsMCwwLDAsNDEsMSwKLSAgICAxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDUsMCwwLDAsMTE0LDEwMSwwLDAsMCwwLDcsMCwwLDExNSwyLDAsCi0gICAgMCwwLDAsMSwxMjIsMjMsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKLSAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsCi0gICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsCi0gICAgMCwwLDExNSwxNiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDAsMCwKLSAgICAxMzEsMCwwLDEwNyw2LDAsODMsNDEsMSw3OCw0MSwxLDExNCw2OCwxLDAsCi0gICAgMCw0MSwyLDExNCw3MSwwLDAsMCwyMTgsNCwxMDUsMTE2LDEwMSwxMDksMTE0LDQsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEyLDk1LAotICAgIDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTE1LDk1LDk1LDMsNywwLDAsMTE1LAotICAgIDIsMCwwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwKLSAgICAxMTUsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsMCwKLSAgICAxMDYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEsMTAwLDAsMCwKLSAgICA4Myw0MSwxLDc4LDQxLDIsMTE0LDI1NCwwLDAsMCwxMTQsMjI0LDAsMCwwLAotICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCw3MiwxLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjI0LDAsMCwwLAotICAgIDYsNywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMSw5NSw3OCw5NywKLSAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTcsMTEyLDExMiwxMDEsCi0gICAgMTEwLDEwMCw3OCw0MSwxMywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCwKLSAgICA1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsMCwwLDExNCw2NywKLSAgICAxLDAsMCwxMTQsNjIsMSwwLDAsMTE0LDY4LDEsMCwwLDExNCw3MCwxLAotICAgIDAsMCwxMTQsNzEsMSwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNzMsMSwwLAotICAgIDAsMTE0LDIyNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKLSAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNjEsMSwwLDAsMjEwLAotICAgIDYsMCwwLDExNSwyMCwwLDAsMCwxMiw1LDYsMiwxMiw2LDEyLDEwLAotICAgIDEyLDQsMTIsMTMsMTIsMywxMiwzLDEyLDMsMTIsMywxMTQsNjEsMSwwLAotICAgIDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLAotICAgIDAsMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLDAsOTAsMSwKLSAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLAotICAgIDkwLDMsMCwxMDEsNCwwLDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsOTAsNSwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLDkwLDYsCi0gICAgMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDksMCwKLSAgICAxMDAsMTAsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsCi0gICAgMCwwLDkwLDksMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDkwLDEwLAotICAgIDAsMTAwLDE1LDAsODMsNDEsMTYsMTE0LDI1MiwwLDAsMCw5OSw0LDAsMCwKKyAgICAyMTgsMTgsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsCisgICAgMTE2LDEwMSwxMjAsMTE2LDEyMiwzNiw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwzMiwxMDksOTcsCisgICAgMTEwLDk3LDEwMywxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwxLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDE0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEsMTAwLDEsCisgICAgMCw4Myw0MSwyLDEyMiwyNCw2NSw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQxLAorICAgIDIsMTE0LDU3LDAsMCwwLDExNCwxNDUsMCwwLDAsNDEsMSwxMTQsMTksMCwKKyAgICAwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLAorICAgIDAsMTE0LDIzLDAsMCwwLDg0LDMsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgMiwxMjIsMjgsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwKKyAgICAxMTAsMTE2LDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsOTksCisgICAgNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMSwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKKyAgICAwLDAsMSwxMDAsMSwwLDgzLDQxLDIsMTIyLDYwLDgyLDEwMSwxMDgsMTAxLDk3LAorICAgIDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSwKKyAgICA5OSwxMDcsMzIsMTE0LDEwMSwxMDMsOTcsMTE0LDEwMCwxMDgsMTAxLDExNSwxMTUsMzIsMTExLDEwMiwKKyAgICAzMiw5NywxMTAsMTIxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsMzIsMTAxLDEyMCw5OSwxMDEsCisgICAgMTEyLDExNiwxMDUsMTExLDExMCwxMTUsNDYsNzgsNDEsMiwxMTQsNTcsMCwwLDAsMTE0LAorICAgIDU4LDAsMCwwLDQxLDQsMTE0LDE5LDAsMCwwLDkwLDgsMTAxLDEyMCw5OSwKKyAgICA5NSwxMTYsMTIxLDExMiwxMDEsOTAsOSwxMDEsMTIwLDk5LDk1LDExOCw5NywxMDgsMTE3LDEwMSwKKyAgICA5MCwxMywxMDEsMTIwLDk5LDk1LDExNiwxMTQsOTcsOTksMTAxLDk4LDk3LDk5LDEwNywxMTQsCisgICAgMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsMzAsCisgICAgMCwwLDAsODgsMywwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyNywKKyAgICA5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLAorICAgIDEyMCwxMTYsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDYsMTE0LDEsCisgICAgMCwwLDAsMTE0LDAsMCwwLDAsMTE0LDIsMCwwLDAsMTE0LDMsMCwKKyAgICAwLDAsMTE0LDIzLDAsMCwwLDExNCwzMCwwLDAsMCwxMTQsMTAsMCwwLAorICAgIDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsCisgICAgMTE0LDE2NSwwLDAsMCw4MCwzLDAsMCwxMTUsNiwwLDAsMCwxMiwyLAorICAgIDYsMiwxMiw0LDExNCwxNjUsMCwwLDAsOTksMywwLDAsMCwwLDAsCisgICAgMCwwLDUsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsODgsCisgICAgMCwwLDAsMTI0LDEsMCwxMDYsMCwwLDEwMCwxLDAsMTI0LDIsMCwxMDAsCisgICAgMiwwLDI0LDEzMSwyLDAsMTI1LDMsMCwxMTYsMSwwLDEyNCwzLDAsMTMxLAorICAgIDEsMCwxMjQsMiwwLDEwNywwLDAsMTE0LDUyLDAsMTE2LDIsMCwxMDAsMywKKyAgICAwLDEzMSwxLDAsMTMwLDEsMCwxMjQsMywwLDEwMCw0LDAsMjUsMTI1LDQsCisgICAgMCwxMjQsMCwwLDExNCw4NCwwLDEwMCw1LDAsMTA2LDMsMCwxMjQsNCwwLAorICAgIDEyNCwwLDAsMTMxLDIsMCw4MywxMjQsNCwwLDgzLDQxLDYsMTIyLDUwLDgyLAorICAgIDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LAorICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTYsMTExLAorICAgIDMyLDk3LDExMCwzMiw5Nyw5OCwxMTUsMTExLDEwOCwxMTcsMTE2LDEwMSwzMiwxMTEsMTEwLDEwMSwKKyAgICA0NiwxMTQsMTIxLDAsMCwwLDExNCw0NSwwLDAsMCwxMjIsNTAsOTcsMTE2LDExNiwKKyAgICAxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCwzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTgsMTAxLDEyMSwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLAorICAgIDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTQsCisgICAgMzMsMCwwLDAsMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDQxLDQsMjE4LDYsMTE0LAorICAgIDExNSwxMTIsMTA4LDEwNSwxMTYsMjE4LDMsMTA4LDEwMSwxMTAsMjE4LDEwLDg2LDk3LDEwOCwxMTcsCisgICAgMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsNTAsMCwwLDAsNDEsNSwxMTQsMTUsMCwKKyAgICAwLDAsMjE4LDcsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDIxOCw1LDEwOCwxMDEsMTE4LAorICAgIDEwMSwxMDgsOTAsNCw5OCwxMDUsMTE2LDExNSw5MCw0LDk4LDk3LDExNSwxMDEsMTE0LDEwLAorICAgIDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMjE4LDEzLDk1LAorICAgIDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSw5MywzLDAsMCwKKyAgICAxMTUsMTAsMCwwLDAsMCwyLDIyLDEsMTgsMSwxMiwxLDEwLDEsMTE0LAorICAgIDE3MSwwLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNCwwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0NywwLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTI1LDMsMCwKKyAgICAxMjQsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMzQsMCwxMDAsMCwwLDgzLAorICAgIDExNiwxLDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsNDEsMSw3OCwKKyAgICA0MSwyLDExNCwxNTUsMCwwLDAsMTE0LDg1LDAsMCwwLDQxLDQsMjE4LDYsCisgICAgMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDE1LDAsMCwwLDExNCwxNTIsMCwwLDAsCisgICAgMTE0LDk5LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LAorICAgIDExLDAsMCwwLDIxOCwxNyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksCisgICAgOTUsMTA4LDEwMSwxMDMsOTcsOTksMTIxLDEwMiwzLDAsMCwxMTUsOCwwLDAsMCwKKyAgICAwLDMsMTgsMSwxMiwxLDQsMSwxMTQsMTczLDAsMCwwLDk5LDMsMCwKKyAgICAwLDAsMCwwLDAsMCw5LDAsMCwwLDI3LDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSw0MiwxLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTAwLDEsMCwKKyAgICAxMDcsOSwwLDExNCw0MSwwLDExNiwwLDAsMTA2LDEsMCwxMiwxMTQsNDEsMCwKKyAgICAxMTYsMiwwLDEwNiwzLDAsMTAwLDIsMCwxMTYsNCwwLDEzMSwyLDAsMSwKKyAgICAxMjQsMCwwLDExNiwwLDAsMTA2LDUsMCwxMDcsNiwwLDEyNSwzLDAsMTIwLAorICAgIDIzNSwwLDExNiwwLDAsMTA2LDEsMCw2OCw5MywyMjAsMCwxMjUsNCwwLDExNiwKKyAgICA2LDAsMTMxLDAsMCwxNDMsOTAsMCwxLDEyMSwxMywwLDEyNCw0LDAsMTA2LAorICAgIDcsMCwxMjUsNSwwLDg3LDExMCw1MSwwLDQsMTE2LDgsMCwxMDcsMTAsMCwKKyAgICAxMTQsMTQ4LDAsMSwxLDEsMTE2LDksMCwxMjQsNCwwLDEyNCwwLDAsMTI0LAorICAgIDEsMCwxMzEsMywwLDEyNSw2LDAsMTI0LDYsMCwxMDAsMSwwLDEwNyw4LAorICAgIDAsMTE0LDE0NCwwLDExOSw2NiwwLDg5LDExMCwxOSwwLDg4LDEyNCw1LDAsMTI0LAorICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDMsMCwxMjUsNiwwLDg3LDEwMCwKKyAgICAxLDAsODEsODIsODgsMTI0LDYsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDY2LAorICAgIDAsMTI0LDMsMCwxMiwxMTQsMjYsMSwxMjQsMCwwLDExNiwwLDAsMTA2LDUsCisgICAgMCwxMDcsNiwwLDExNCwyNiwxLDExNiwwLDAsMTA2LDUsMCwxMjQsMCwwLAorICAgIDI1LDEyNSw3LDAsMTIxLDEzLDAsMTI0LDcsMCwxMDYsMTAsMCwxMjUsOCwwLAorICAgIDg3LDExMCwyMiwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMiwxLDEsMSwKKyAgICAxLDEyNCw2LDAsODMsODksMTEzLDMwLDEsODgsMTI0LDgsMCwxMDAsMSwwLAorICAgIDEwNyw4LDAsMTE0LDE5LDEsMTI0LDYsMCw4MywxMjQsOCwwLDgzLDExMyw2NiwKKyAgICAwLDEyNCw2LDAsODMsMTEzLDY2LDAsODcsMTAwLDEsMCw4MywxMDAsMSwwLAorICAgIDgzLDQxLDMsMTIyLDIzLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDM5LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDc4LDEyMiwyMiwxMTUsCisgICAgMTIxLDExNSw0NiwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLAorICAgIDEwMSwxMDksMTEyLDExNiwxMjEsNDEsMTEsMTE0LDE0LDAsMCwwLDIxOCw5LDEwOSwxMDEsCisgICAgMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDExNCwxNDEsMCwwLDAsMTE0LDE0MiwwLDAsCisgICAgMCwyMTgsMTMsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLAorICAgIDExNCwyMSwwLDAsMCwxMTQsMTY1LDAsMCwwLDExNCwxNTQsMCwwLDAsMTE0LAorICAgIDk2LDAsMCwwLDExNCwxNzMsMCwwLDAsMTE0LDk1LDAsMCwwLDQxLDksCisgICAgMTE0LDE1LDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDE1MywwLDAsMCw5MCwKKyAgICA5LDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTQsMTcyLDAsMCwwLDExNCwKKyAgICAxNTQsMCwwLDAsMTE0LDg4LDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsOTUsCisgICAgMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTEsMCwKKyAgICAwLDAsMjE4LDEwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSwxMTEsMywKKyAgICAwLDAsMTE1LDQ4LDAsMCwwLDAsMiwyNSwxLDE2LDQsMTUsMSwxNiwKKyAgICAxLDEwLDEsMywxLDEzLDEsMTMsMSwxOCwxLDEyLDEsOCwyLDI1LAorICAgIDEsMTIsMiwyMiwxLDEzLDEsMywxLDEzLDEsMTMsNCw5LDIsMTIsCisgICAgMSw0LDIsNywyLDgsMiwxMTQsMTc2LDAsMCwwLDk5LDMsMCwwLAogICAgIDAsMCwwLDAsMCw0LDAsMCwwLDQsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDI1LDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwKLSAgICAzLDAsMTMxLDMsMCwxMjQsMCwwLDk1LDEsMCwxMDAsMCwwLDgzLDQxLAotICAgIDEsNzgsNDEsMiwxMTQsNjEsMSwwLDAsMTE0LDI1NCwwLDAsMCw0MSw0LAotICAgIDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKLSAgICA2NSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKLSAgICAwLDAsMCwxMTQsNzIsMCwwLDAsMTIsNywwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwxLDEyMiwyNSw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwxLAotICAgIDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsMTIyLDExNSw4MiwxMDEsMTE2LDExNywKLSAgICAxMTQsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLAotICAgIDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSw5Nyw5OSwxMDQsMTA1LDExMCwxMDEsMTE0LDEyMSwKLSAgICAzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA2LDExMSw5OCwzMiwxMDUsMTE2LAotICAgIDExNSwxMDEsMTA4LDEwMiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMjIsCi0gICAgMjUsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNDEsNjIsNDEsMiwxMTQsNDcsMCwwLAotICAgIDAsMTE0LDU3LDAsMCwwLDQxLDIsMTE0LDEyLDEsMCwwLDExNCwxODAsMCwKLSAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDIwNiwwLDAsMCwxNSw3LDAsMCwxMTUsMiwwLDAsMCwwLAotICAgIDcsMTIyLDI4LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiw3OCwKLSAgICA4NCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsCi0gICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKLSAgICAwLDExNCwyMjAsMCwwLDAsMjQsNywwLDAsMTE1LDIsMCwwLDAsMCwKLSAgICAxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiw3OCwxMTQsCi0gICAgMzAsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsCi0gICAgMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwxMTQsMTcsMSwwLDAsMjcsNywwLDAsMTE1LDIsMCwKLSAgICAwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDYsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDExNiwwLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwxMDAsNSwwLDEzMSwzLDEsCi0gICAgODMsNDEsNiw3OCwxMTQsMzAsMCwwLDAsMTIyLDgsNjAsMTE1LDExNiwxMTQsMTA1LAotICAgIDExMCwxMDMsNjIsMTE0LDE3NiwwLDAsMCwxMTQsNDMsMSwwLDAsODQsNDEsMSwKLSAgICAxMTQsNDQsMSwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsCi0gICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKLSAgICAxMTQsMTYsMSwwLDAsMzAsNywwLDAsMTE1LDIsMCwwLDAsMCwxLAotICAgIDEyMiwyNSw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLAotICAgIDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw0LDAsMCwwLDEwMCwwLDAsODMsNDEsMSw3OCwxMTQsNCwwLDAsCi0gICAgMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyLDEsMCwKLSAgICAwLDMzLDcsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsOTUsNzgsCi0gICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAxLAotICAgIDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLAotICAgIDAsMCwwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgMjksMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEyNCwwLDAsMTA2LDEsMCwKLSAgICAxMzEsMiwwLDEsMTE2LDIsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwKLSAgICA4Myw0MSwyLDEyMiw5OCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDExMCw5NywxMDksMTAxLAotICAgIDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwKLSAgICAxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCwKLSAgICA0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEyMiwzOCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLAotICAgIDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMjMsMzMsMTE0LDEyNSw0MSwKLSAgICAzLDExNCwxNTMsMCwwLDAsMTE0LDI1NCwwLDAsMCwxMTQsMTgxLDAsMCwwLAotICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDUsMSwwLDAsCi0gICAgMzYsNywwLDAsMTE1LDQsMCwwLDAsMCw3LDE2LDEsMTIyLDI4LDk1LAotICAgIDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQxLDExLDExNCw1NywKLSAgICAwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw3MiwwLAotICAgIDAsMCwxMTQsMTksMSwwLDAsMTE0LDIwNiwwLDAsMCwxMTQsMjIwLDAsMCwKLSAgICAwLDExNCwxNywxLDAsMCwxMTQsMTYsMSwwLDAsMTE0LDIsMSwwLDAsCi0gICAgMTE0LDUsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDI1MiwwLDAsMCwxMSw3LAotICAgIDAsMCwxMTUsMTQsMCwwLDAsMTIsMSwxMiwzLDE4LDksMTIsMywxMiwKLSAgICAzLDEyLDMsMTIsMywxMTQsMjUyLDAsMCwwLDk5LDAsMCwwLDAsMCwKLSAgICAwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNjQsMCwwLDAsMTE1LAotICAgIDE2MCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKLSAgICAxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsCi0gICAgMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwxMDAsNSwKLSAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw2LDAsMTAxLDQsMCwxMDAsNiwwLAotICAgIDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwwLDEwMCwKLSAgICA4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSw0LAotICAgIDAsMTAwLDEwLDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDEsMCwxMzEsMSwwLAotICAgIDkwLDksMCwxMDEsNCwwLDEwMCwxMCwwLDEwMCwxMCwwLDEwMCwxMywwLDEwMCwKLSAgICAxNCwwLDEzMiwyLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw0LDAsMTAwLDEwLAotICAgIDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDExLDAsCi0gICAgMTAwLDEwLDAsODMsNDEsMTcsMjE4LDEwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCwxMjIsNjIsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5NSw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSw5NSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsCi0gICAgMTE1LDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDU4LDAsMCwwLDEyMCw1MSwwLDExNiwKLSAgICAwLDAsMTA2LDEsMCwxMDYsMiwwLDEzMSwwLDAsNjgsOTMsMzQsMCwxMjUsCi0gICAgMSwwLDExNiwzLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDE2LAotICAgIDAsMTI0LDEsMCwxMDYsNCwwLDEzMSwwLDAsMSwxMTMsMTYsMCwxMTMsMTYsCi0gICAgMCw4NywxMDAsMiwwLDgzLDQxLDMsMTIyLDEyNSw2Nyw5NywxMDgsMTA4LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsCi0gICAgOTksMTA0LDEwMSwxMTUsNDAsNDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTExLDExMCwKLSAgICAzMiw5NywxMDgsMTA4LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsCi0gICAgMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDExNSwxMTYsMTExLDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDExNSwzMiw0MCwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsNDEsNDYsMjE4LDE3LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLAotICAgIDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNzgsNDEsNSwxMTQsNywwLAotICAgIDAsMCwyMTgsMTksMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAotICAgIDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIxOCw2LDExOCw5NywxMDgsMTE3LDEwMSwxMTUsMTE0LAotICAgIDYwLDAsMCwwLDExNCw3NSwxLDAsMCw0MSwyLDExNCwxMiwxLDAsMCwKLSAgICAyMTgsNiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsNCwwLAotICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNzUsMSwwLDAsNTMsNywwLDAsCi0gICAgMTE1LDYsMCwwLDAsMCw0LDIyLDEsMTUsMSwxMjIsMjgsODAsOTcsMTE2LAotICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAotICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDMsMCwwLDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDk0LAotICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMTUsMjgsMCwxMTYsMiwwLDEwNiwKLSAgICAzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwyLDAsMSwxMTAsMCwwLDEyMCwKLSAgICA1OSwwLDExNiwwLDAsMTA2LDEsMCw2OCw5Myw0NCwwLDEyNSwyLDAsMTIxLAotICAgIDE0LDAsMTI0LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsODcsMTEzLDM4LDAsCi0gICAgNCwxMTYsNSwwLDEwNywxMCwwLDExNCw4MSwwLDEsMSwxLDExOSwzOCwwLAotICAgIDg5LDExMywzOCwwLDg4LDExMywzOCwwLDg3LDEwMCwyLDAsODMsMTAwLDIsMCwKLSAgICA4Myw0MSwzLDEyMiwxMTMsODMsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE1LDEwMSwxMTMsMTE3LAotICAgIDEwMSwxMTAsOTksMTAxLDMyLDExMSwxMDIsMzIsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDIsMTExLAotICAgIDExNCwzMiw5NywzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwzOSwKLSAgICAxMTIsOTcsMTE2LDEwNCwzOSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICA3MywxMDIsMzIsMzksMTA0LDExMSwxMTEsMTA3LDExNSwzOSwzMiwxMDUsMTE1LDMyLDEwMiw5NywKLSAgICAxMDgsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTE3LDExNSwxMDEsMzIsMTE1LDEyMSwxMTUsCi0gICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMjIsMjMsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsCi0gICAgNDEsNiwxMTQsNywwLDAsMCwyMTgsMTAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwKLSAgICAxMTEsMTA3LDExNSwxMTQsMTY3LDAsMCwwLDExNCwxNjgsMCwwLDAsMTE0LDE2OSwwLAotICAgIDAsMCwxMTQsMTU0LDAsMCwwLDQxLDMsMTE0LDEyLDEsMCwwLDExNCwzNSwKLSAgICAwLDAsMCw5MCw0LDEwNCwxMTEsMTExLDEwNywxMTQsNCwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgMTA0LDExMSwxMTEsMTA3LDExNSw2MSw3LDAsMCwxMTUsMTYsMCwwLDAsMCw3LAotICAgIDksMSwxOSwxLDE2LDEsMywxLDE0LDEsMTMsMSwxMiwyLDEyMiwyMiwKLSAgICA4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSw5OSwyLDAsMCwwLDAsMCwwLDAsMywKLSAgICAwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsOTcsMCwwLDAsCi0gICAgMTI0LDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDI3LDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEzMSwwLDAsMTI1LDEsMCwxMTAsMCwwLDEyMSwxNywwLDExNiwyLAotICAgIDAsMTA2LDMsMCwxMjQsMSwwLDI1LDEyNSwyLDAsODcsMTEwLDQ2LDAsNCwKLSAgICAxMTYsNCwwLDEwNywxMCwwLDExNCw5MiwwLDEsMSwxLDEyNCwwLDAsMTA2LAotICAgIDUsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNiwyLAotICAgIDAsMTA2LDMsMCwxMjQsMSwwLDYwLDg5LDExMCwxLDAsODgsMTI0LDIsMCwKLSAgICA4Myw0MSwyLDEyMiwyMTAsNzEsMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwKLSAgICAzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTUsMTIxLDExNSw0NiwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsCi0gICAgMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LAotICAgIDk5LDEwNCwxMDEsNDQsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk3LDExMiwKLSAgICAxMTIsMTE0LDExMSwxMTIsMTE0LDEwNSw5NywxMTYsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LDExMCwxMDAsMzIsOTksOTcsOTksCi0gICAgMTA0LDEwMSwzMiwxMDUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTAsMTExLDMyLDEwMiwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwKLSAgICA0NCwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDMyLDc4LDExMSwxMTAsMTAxLDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCwzMCwwLDAsMCw0MSw2LDExNCwzLAotICAgIDAsMCwwLDExNCw0NSwwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzYsMSwKLSAgICAwLDAsMTE0LDc5LDAsMCwwLDExNCw4MCwxLDAsMCw0MSwzLDExNCwxMiwKLSAgICAxLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDc4LDEsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LAotICAgIDEwNCwxMDEsNzgsNywwLDAsMTE1LDE2LDAsMCwwLDAsOCwxMiwxLDE1LAotICAgIDEsMywxLDE3LDEsMTMsMSwxNSwxLDE4LDEsMTIyLDMxLDgwLDk3LDExNiwKLSAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTksMywwLDAsCi0gICAgMCwwLDAsMCwwLDYsMCwwLDAsMywwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMTEzLDAsMCwwLDExNiwwLDAsMTI0LDIsMCwxMDAsMSwwLDEzMSwKLSAgICAyLDAsMTE0LDM5LDAsMTI0LDIsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCw5MiwyLDAsMTI1LDMsMCwxMjUsNCwwLDExMCwyMSwwLDEyNCwyLDAsCi0gICAgMTA2LDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMDMsMCwwLDEyNSwKLSAgICA0LDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDg1LDAsMTE2LDMsCi0gICAgMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCw4MywxMTYsNCwwLDEyNCwxLAotICAgIDAsMTAwLDAsMCwxMzEsMiwwLDEyNSw1LDAsMTI0LDQsMCwxMjQsNSwwLAotICAgIDk1LDUsMCwxMjQsNSwwLDgzLDQxLDIsNzgsMTE0LDE2NiwwLDAsMCw0MSwKLSAgICA2LDExNCw2MCwwLDAsMCwxMTQsMTY2LDAsMCwwLDExNCwxNSwxLDAsMCwKLSAgICAxMTQsMTc0LDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDIyMSwwLDAsMCw0MSwKLSAgICA2LDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw3OCwxLDAsMCwKLSAgICAxMTQsMTcwLDAsMCwwLDExNCwxNzEsMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsCi0gICAgOTUsMTA4LDEwMSwxMDMsOTcsOTksMTIxLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LAotICAgIDk1LDcsMCwwLDExNSwxOCwwLDAsMCwwLDQsMTUsMSwyNCwyLDE1LAotICAgIDEsNiwxLDEyLDEsMTMsMSwxNSwxLDksMSwxMjIsMjcsODAsOTcsMTE2LAotICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwOCwxMDEsMTAzLDk3LDk5LDEyMSw5NSwKLSAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSw3OCw5OSw0LDAsMCwwLDAsMCwKLSAgICAwLDAsOSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwyNTIsCi0gICAgMCwwLDAsMTAzLDAsMCwxMjUsNCwwLDEyMCwyMzksMCwxMjQsMiwwLDY4LAotICAgIDkzLDIwMywwLDEyNSw1LDAsMTE2LDAsMCwxMjQsNSwwLDExNiwxLDAsMTE2LAotICAgIDIsMCwxMDIsMiwwLDEzMSwyLDAsMTE1LDQ2LDAsMTEzLDEzLDAsMTEwLDAsCi0gICAgMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDUsMCwxMzEsMSwwLDEyNSw2LDAsCi0gICAgMTI0LDYsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDEzLDAsMTE2LDQsMCwxMjQsCi0gICAgNiwwLDEwMCwyLDAsMTMxLDIsMCwxMTQsMTA5LDAsMTI0LDYsMCwxMDYsNSwKLSAgICAwLDEyNCwxLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw3LDAsMTEwLDE4LDAsCi0gICAgMTI0LDAsMCwxMDYsNiwwLDEyNCwxLDAsMTI0LDYsMCwxMzEsMiwwLDEyNSwKLSAgICA3LDAsMTI0LDcsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDE0NSwwLDExMywxMywKLSAgICAwLDExMCwwLDAsMTI0LDcsMCwxMDYsNywwLDEwMCwxLDAsMTA3LDksMCwKLSAgICAxMTQsMTY0LDAsMTI0LDcsMCw4MywxMjQsNywwLDEwNiw4LDAsMTI1LDgsMCwKLSAgICAxMjQsOCwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjAwLDAsMTE2LDksMCwxMDAsCi0gICAgMywwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCw0LDAsMTA2LDEwLAotICAgIDAsMTI0LDgsMCwxMzEsMSwwLDEsMTEzLDEzLDAsMTEzLDEzLDAsODcsMTE2LAotICAgIDExLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTI1LDcsMCwxMjQsNCwKLSAgICAwLDEyNCw3LDAsOTUsOCwwLDEyNCw3LDAsODMsMTAwLDEsMCw4Myw0MSwKLSAgICA0LDEyMiw2Myw3MCwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDMyLDExMSwxMTQsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQ3LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTAsOTcsMTA5LAotICAgIDEwMSw0Niw3OCwxMTQsMTQsMSwwLDAsMTIyLDE5LDExNSwxMTIsMTAxLDk5LDMyLDEwOSwKLSAgICAxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQxLDEyLDExNCwKLSAgICAxOTMsMCwwLDAsMjE4LDMsMTE1LDExNiwxMTQsMjE4LDUsOTgsMTIxLDExNiwxMDEsMTE1LAotICAgIDExNCw4MSwxLDAsMCwxMTQsNjAsMCwwLDAsMTE0LDE0LDEsMCwwLDExNCwKLSAgICA4MiwxLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDE1NCwKLSAgICAwLDAsMCwxMTQsMTk4LDAsMCwwLDExNCwyMTcsMCwwLDAsNDEsOSwxMTQsCi0gICAgMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDEzLAotICAgIDEsMCwwLDIxOCwxNCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5MCw1LDEwMSwxMTAsMTE2LDExNCwxMjEsMTE0LDc4LDEsMCwwLDExNCwKLSAgICAxNzgsMCwwLDAsMTE0LDE3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTEyLDEwMSw5OSwxMTAsNywwLDAsMTE1LDQwLDAsMCwwLDAsNSw2LDEsCi0gICAgMTMsMSwyMSwxLDYsMSwxNSwxLDEyLDEsMTUsMSwyMSwyLDE4LDEsCi0gICAgMTIsMSw2LDEsMTUsMSw0LDEsOSwxLDEyLDEsMTUsNSwyMCwyLAotICAgIDE1LDEsOSwxLDEyMiwyMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNDYsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksOTksNCwwLDAsMCwwLAotICAgIDAsMCwwLDYsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgMTQzLDAsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwyNCwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjUsMiwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCi0gICAgMiwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwzLDAsMTI1LDQsCi0gICAgMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNjEsMCwxMDAsMSwwLAotICAgIDgzLDEyNCw0LDAsMTA2LDMsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDEzNSwwLAotICAgIDEyNCw0LDAsMTA2LDQsMCwxMjUsNSwwLDEyNCw1LDAsMTE0LDEyOCwwLDEwMCwKLSAgICAyLDAsMTI0LDQsMCw5NSw1LDAsMTE2LDYsMCwxMjQsMSwwLDEyNCw1LAotICAgIDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwzLDAsMTI0LDQsMCw5NSw0LDAsCi0gICAgMTI0LDQsMCw4MywxMDAsMSwwLDgzLDExMCw0LDAsMTI0LDQsMCw4MywxMDAsCi0gICAgMSwwLDgzLDQxLDMsMTIyLDk4LDEwMiwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDExMSwxMTQsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksMzIsOTgsOTcsMTE1LAotICAgIDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCi0gICAgMTExLDExMSwxMDcsMTE1LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDc4LDkwLDksMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE1LDExMiw5Nyw5OSwxMDEsNDEsNywxMTQsNywwLDAsMCwxMTQsMzUsMCwwLAotICAgIDAsMTE0LDg2LDEsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDIyMSwwLDAsMCwKLSAgICAxMTQsMjE4LDAsMCwwLDExNCw2MSwxLDAsMCw0MSw2LDExNCwxMiwxLDAsCi0gICAgMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTMsMSwwLDAsCi0gICAgMTE0LDE3OCwwLDAsMCwxMTQsODUsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE0LDEsMCwwLDE0Miw3LAotICAgIDAsMCwxMTUsMjYsMCwwLDAsMCw0LDEyLDEsMTIsMSwyMSwxLDEyLAotICAgIDEsNCwxLDE1LDEsOSwxLDYsMyw5LDEsMjQsMSw0LDIsNywKLSAgICAyLDEyMiwyMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwKLSAgICAxMjUsMywwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzNCwwLDEwMCwKLSAgICAxLDAsODMsMTI0LDMsMCwxMDYsMSwwLDgzLDQxLDIsMTIyLDE3MCwxMDIsMTA1LAotICAgIDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwKLSAgICAzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywKLSAgICAxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsCi0gICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksCi0gICAgMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsCi0gICAgMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LAotICAgIDExMiwxMDEsOTksNDAsNDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMiwxMTQsMTQsMSwwLDAsCi0gICAgMTE0LDE3MCwwLDAsMCw0MSw0LDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwKLSAgICAwLDExNCwzNSwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNSwxLDAsMCwxNjQsCi0gICAgNywwLDAsMTE1LDgsMCwwLDAsMCw4LDE4LDEsMTIsMSw0LDEsCi0gICAgMTIyLDIyLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDEsMTIsMTE0LDU3LDAsMCwwLDExNCwKLSAgICA1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCwxOSwKLSAgICAxLDAsMCwxMTQsNzUsMSwwLDAsMTE0LDgwLDEsMCwwLDExNCw4MSwxLAotICAgIDAsMCwxMTQsODIsMSwwLDAsMTE0LDg2LDEsMCwwLDExNCwxNCwxLDAsCi0gICAgMCwxMTQsMTUsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc0LDEsMCwwLDQ5LAotICAgIDcsMCwwLDExNSwyMiwwLDAsMCwxMiwyLDYsMiwxOCw4LDE4LDE3LAotICAgIDE4LDE3LDE4LDE1LDMsMSwxOCwzMSwzLDEsMjEsMjEsMywxLDExNCw3NCwKLSAgICAxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKLSAgICAzLDAsMCwwLDY0LDAsMCwwLDExNSwxMzMsMCwwLDAsMTAxLDAsMCwKLSAgICA5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLAotICAgIDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsCi0gICAgMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLDkwLDcsMCwxMDAsNiwwLAotICAgIDEwMCw3LDAsMTMyLDAsMCw5MCw4LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwKLSAgICAwLDAsOTAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwxLAotICAgIDAsOTAsMTAsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDkwLDExLDAsCi0gICAgMTAxLDEyLDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLAotICAgIDEzLDAsMTAwLDE3LDAsMTAwLDE4LDAsMTMyLDAsMCw5MCwxNCwwLDEwMCwxMCwKLSAgICAwLDgzLDQxLDE5LDIxOCwxMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDEyMiwxNzIsNzAsMTA1LDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsMTE0LDk3LAotICAgIDk5LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsMTAxLDMyLAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LDEwMiwxMTEsCi0gICAgMTE0LDEwOSw5NywxMTAsOTksMTAxLDQ0LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwzMiwzMiwKLSAgICAzMiwzMiwxMTQsMTAxLDEwMiwxMTQsMTAxLDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCw5NywxMTAsCi0gICAgMTAwLDEwOCwxMDUsMTEwLDEwMywzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLDMyLDEwOSwKLSAgICAxMTEsMTAwLDEwNSwxMDIsMTA1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsMCw3LAotICAgIDAsMCwwLDExNSwxMjIsMCwwLDAsMTAzLDAsMCwxMjUsMywwLDEyMCw1MiwKLSAgICAwLDEyNCwyLDAsNjgsOTMsNDQsMCw5MiwyLDAsMTM3LDAsMCwxMjUsNCwKLSAgICAwLDEyNCwzLDAsMTA2LDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwKLSAgICAxMDAsMiwwLDEzNCwwLDAsMTI0LDQsMCw2OCwxMzEsMSwwLDEzMSwxLDAsCi0gICAgMSwxMTMsMTMsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMSwwLDEyNCwxLAotICAgIDAsMTEyLDc5LDAsMTAwLDMsMCwxMjQsMCwwLDk1LDIsMCwxMDAsNiwwLAotICAgIDEyNCwwLDAsOTUsMywwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwwLDk1LAotICAgIDUsMCwxMTYsNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSw2LDAsMTAwLDUsCi0gICAgMCw4Myw0MSw3LDEyMiwxNTQsNzMsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwKLSAgICAzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LAotICAgIDExMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTExLDExMCwzMiw5NywxMTAsMTAwLDMyLAotICAgIDk3LDMyLDExOCw5NywxMTQsMTA1LDk3LDk4LDEwOCwxMDEsMzIsMTEwLDExNywxMDksOTgsMTAxLAotICAgIDExNCwzMiwxMTEsMTAyLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDUwLDQ1LDExNiwKLSAgICAxMTcsMTEyLDEwOCwxMDEsMTE1LDMyLDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTA1LDExMCwxMDMsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsCi0gICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMTE0LDEwMSw5OSwxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsNDYsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsCi0gICAgMCw1MSwwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLAotICAgIDEyNSwxLDAsMTI0LDEsMCwxMzYsMCwwLDEwMiwyLDAsODYsMSwxMTMsMywKLSAgICAwLDEwMCwwLDAsODMsNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwKLSAgICAyMiwwLDAsMCwxMTQsNTgsMSwwLDAsNDEsMSwxMTQsMTcwLDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NywwLDAsMCwxOTMsCi0gICAgNywwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiwzOCw3MCwxMDUsMTA4LDEwMSwKLSAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0NiwKLSAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsCi0gICAgMTE0LDYyLDExNCwxMTYsMCwwLDAsMTE0LDI5LDAsMCwwLDc4LDExNCwxMzksMCwKLSAgICAwLDAsNDEsNywxMTQsMTk4LDAsMCwwLDIxOCw4LDk1LDEwOCwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsMTE1LDExNCwzNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwyMTgsMywxMTUsMTAxLDExNiwyMTgsMTEsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwyMTgsMTksOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDEwMSwKLSAgICAxMDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSw0MSw1LDExNCw3MSwKLSAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDE0LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsOTAsNywxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDExNSwxMTQsMTI2LDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDE3MCwwLAotICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsMTg3LDcsMCwwLAotICAgIDExNSwxNiwwLDAsMCwwLDQsNiwxLDE5LDEsMzYsMSw5LDIsMTUsCi0gICAgMSw5LDEsMTIsMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLAotICAgIDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLAotICAgIDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgMTMsMCwwLDAsMTAwLDMsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMiwwLAotICAgIDgzLDQxLDQsMTIyLDMxLDczLDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDEwOSwxMTYsCi0gICAgMTA1LDEwOSwxMDEsNDYsMTE0LDI5LDAsMCwwLDc4LDExNCwxMzksMCwwLDAsNDEsCi0gICAgMSwxMTQsODksMSwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc1LDEsMCwKLSAgICAwLDIwMSw3LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDI4LDcwLDEwNSwKLSAgICAxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsCi0gICAgOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLDAsMCwwLDAsCi0gICAgMCwwLDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICA1OSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDEyNSwyLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDM3LDAsMTAwLAotICAgIDEsMCwxMDMsMCwwLDEwMiwyLDAsODMsMTI0LDIsMCwxMDYsMSwwLDEyNCwKLSAgICAyLDAsMTA2LDIsMCwxMTIsNTUsMCwxMDMsMCwwLDEwMiwyLDAsODMsNDEsCi0gICAgMiwxMjIsMTk3LDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsCi0gICAgMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDQ0LDMyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5NywKLSAgICA5OSwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDMyLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwKLSAgICAxMTcsMTE0LDExMCwxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LAotICAgIDExNSwxMTYsNDUsMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwKLSAgICAxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywKLSAgICAxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsCi0gICAgMTEyLDEwMSw5OSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwzLDExNCwxNCwxLDAsMCwKLSAgICAxMTQsMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsNDEsMywxMTQsNzEsMCwwLAotICAgIDAsMTE0LDE1OSwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNjYsMCwwLDAsMjA3LAotICAgIDcsMCwwLDExNSw4LDAsMCwwLDAsNywxNSwxLDEyLDEsMTAsMSwKLSAgICAxMjIsMjIsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSw2LDAsMCwwLDAsMCwwLAotICAgIDAsNywwLDAsMCw3LDAsMCwwLDY3LDAsMCwwLDExNSw0MCwwLAotICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw2LAotICAgIDAsMTE2LDAsMCwxMjQsMiwwLDEyNCwzLDAsMTAwLDEsMCwxMjQsNiwwLAotICAgIDEwMCwyLDAsMTI0LDQsMCwxMzEsMiwyLDgzLDQxLDMsNzgsMTE0LDE3MCwwLAotICAgIDAsMCwxMTQsMjIxLDAsMCwwLDQxLDEsMTE0LDI0MCwwLDAsMCw0MSw3LAotICAgIDExNCw3MSwwLDAsMCwxMTQsMjQ0LDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LAotICAgIDM1LDAsMCwwLDExNCwyMjksMCwwLDAsMTE0LDEzLDEsMCwwLDExNCwxNzAsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMTE0LDg2LDEsMCwwLDIxOSw3LDAsMCwxMTUsNiwwLDAsMCwKLSAgICAwLDEsMTUsMSwxOCwxLDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDc4LDk5LDMsMCwKLSAgICAwLDAsMCwwLDAsMCwxNCwwLDAsMCwxNSwwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMjQwLDEsMCwwLDEwMCwxLDAsMTI1LDMsMCwxMjQsMSwwLAotICAgIDEwNiwwLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwzLDAsMjUsMTI1LDQsMCwKLSAgICAxMjEsMzQsMCwxMTYsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMTIsNDksMCwxMTYsCi0gICAgMywwLDEwNiw0LDAsMTMxLDAsMCwxMzEsMSwwLDEwNiw1LDAsMTI1LDUsCi0gICAgMCw4NywxMTAsMjQsMCw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDg1LDAsMSwKLSAgICAxLDEsMTAwLDEwLDAsMTI1LDUsMCw4OSwxMTAsMSwwLDg4LDEyNCw1LDAsCi0gICAgMTI0LDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDEyMywwLDEyNCwwLDAsMTA2LAotICAgIDgsMCwxMzEsMCwwLDEsMTI0LDUsMCwxMjQsMCwwLDk1LDcsMCwxMTAsCi0gICAgMCwwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTU2LDAsMTI0LDAsMCwxMDYsMTAsCi0gICAgMCwxMjUsNiwwLDEyNCw0LDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNywwLAotICAgIDExMCwxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDYsMCwxMjQsNCwwLDEyNSwKLSAgICA3LDAsMTI0LDcsMCwxMjQsNiwwLDEwNyw2LDAsMTE0LDUxLDEsMTE2LDEzLAotICAgIDAsMTI0LDAsMCwxMDYsMiwwLDEyNCw0LDAsMTMxLDIsMCwxMjUsOCwwLAotICAgIDEyMCwxMDMsMCwxMjQsMCwwLDEwNiwxNCwwLDY4LDkzLDc3LDAsOTIsMiwwLAotICAgIDEyNSw5LDAsMTI1LDEwLDAsMTAwLDUsMCwxMjQsOSwwLDIzLDEyNSwxMSwwLAotICAgIDExNiwxMywwLDEyNCw4LDAsMTI0LDExLDAsMTMxLDIsMCwxMjUsMTIsMCwxMTYsCi0gICAgMTUsMCwxMjQsMTIsMCwxMzEsMSwwLDExNCwyMTEsMCwxMjQsMCwwLDEwNiwxNiwKLSAgICAwLDEyNCwxMCwwLDEyNCwxLDAsMTI0LDEyLDAsMTI0LDgsMCwxMDMsMSwwLAotICAgIDEyNCwyLDAsMTMxLDUsMCw4MywxMTMsMjExLDAsODcsMTE2LDE3LDAsMTI0LDgsCi0gICAgMCwxMzEsMSwwLDEyNSwzLDAsMTEwLDAsMCwxMjAsMTI2LDAsMTI0LDAsMCwKLSAgICAxMDYsMTQsMCw2OCw5MywxMTUsMCw5MiwyLDAsMTI1LDksMCwxMjUsMTAsMCwKLSAgICAxMTYsMTMsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDQsMCwxMjQsOSwwLDIzLAotICAgIDEzMSwyLDAsMTI1LDEyLDAsMTE2LDE4LDAsMTAwLDYsMCwxMDYsMTksMCwxMjQsCi0gICAgMTIsMCwxMzEsMSwwLDEwMCw3LDAsMTAwLDMsMCwxMzEsMSwxLDEsMTI0LAotICAgIDcsMCwxMjQsOSwwLDIzLDEyNCw2LDAsMTA3LDYsMCwxMTQsNjEsMSwxMTYsCi0gICAgMTUsMCwxMjQsMTIsMCwxMzEsMSwwLDExNCwxNzYsMSwxMjQsMCwwLDEwNiwxNiwKLSAgICAwLDEyNCwxMCwwLDEyNCwxLDAsMTI0LDEyLDAsMTAwLDgsMCwxMjQsMiwwLAotICAgIDEzMSw1LDAsODMsMTEzLDYxLDEsMTEzLDYxLDEsODcsMTI0LDMsMCwxMTQsMjM2LAotICAgIDEsMTE2LDE4LDAsMTAwLDksMCwxMDYsMTksMCwxMjQsOCwwLDEzMSwxLDAsCi0gICAgMTMxLDEsMCwxLDExNiwyMCwwLDEyNCwxLDAsMTAwLDgsMCwxMzEsMiwwLAotICAgIDEyNSwxMywwLDEyNCw4LDAsMTAzLDEsMCwxMjQsMTMsMCw5NSwyMSwwLDEyNCwKLSAgICAxMywwLDgzLDEwMCw4LDAsODMsNDEsMTEsMTIyLDEyNSw4NCwxMTQsMTIxLDMyLDExNiwKLSAgICAxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLAotICAgIDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDEwLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTIsMTExLDExNCwxMTYsMTA1LAotICAgIDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDQwLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LDQ1LDExMSwxMDIsNDUsMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0Niw3MCwxMTQsMTE2LDAsMCwwLDExNCwxMTUsCi0gICAgMCwwLDAsMTE0LDI5LDAsMCwwLDExNCw3MiwwLDAsMCwxMjIsOSwxMTYsCi0gICAgMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNCwxNDYsMCwwLDAsNzgsMTIyLDI1LAotICAgIDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDExNCwxMzksMCwwLDAsNDEsMjIsCi0gICAgMTE0LDMyLDAsMCwwLDExNCwzOSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAotICAgIDMsMCwwLDAsMTE0LDQ1LDAsMCwwLDExNCw1NCwxLDAsMCwxMTQsNDAsCi0gICAgMCwwLDAsMTE0LDg5LDEsMCwwLDIxOCwxMSw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTQsNiwwLDAsMCwxMTQsOTIsMSwwLDAsMTE0LAotICAgIDE0MCwwLDAsMCwxMTQsOTEsMSwwLDAsMTE0LDI4LDAsMCwwLDExNCw4OCwKLSAgICAxLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDg2LDEsMCwwLDExNCw0NiwwLAotICAgIDAsMCwxMTQsMTUzLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMjE3LDAsMCwKLSAgICAwLDExNCwyMjEsMCwwLDAsNDEsMTQsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwKLSAgICAwLDAsMTE0LDEzLDEsMCwwLDkwLDEyLDEwNSwxMTUsOTUsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE1LDExMiw5Nyw5OSwxMDEsOTAsMTEsMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE0LDE4NCwwLDAsMCw5MCw1LDk5LDk3LDk5LDEwNCwxMDEsOTAsMTIsCi0gICAgOTksOTcsOTksMTA0LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCw5LDk4LDk3LAotICAgIDExNSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDU4LDEsMCwwLDExNCwyNDQsMCwwLAotICAgIDAsOTAsMTMsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwKLSAgICA5MCw5LDEwMiwxMTcsMTA4LDEwOCw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTc4LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKLSAgICAxNCwxLDAsMCwyMjQsNywwLDAsMTE1LDY4LDAsMCwwLDAsMyw2LAotICAgIDEsMTksMSwzLDEsMzQsMSwxMywxLDExLDEsMTUsMSwxMCwxLDEyLAotICAgIDIsOSwxLDksMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLDIyLAotICAgIDEsMTAsMSwxNSwxLDEyLDEsMzIsNCwxNSwyLDIyLDEsMjIsMSwyNSwKLSAgICAxLDE2LDEsMTIsMSwzMiwxLDYsMSwxOSwxLDE1LDEsMTIsMSw0LAotICAgIDEsMTIyLDIwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDEsMCwwLDAsMCwwLDAsMCwKLSAgICA5LDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwxNCwxLDAsCi0gICAgMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsMzEsMCwxMTYsMSwwLAotICAgIDEwNiwyLDAsMTI0LDEsMCwxMTIsMzMsMCwxMTYsMSwwLDEwNiwzLDAsMTMxLAotICAgIDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLDAsNCwxMTYsNCwwLAotICAgIDExNiw1LDAsMTE2LDYsMCwxMDIsMywwLDEwNywxMCwwLDExNCw3NSwwLDEsCi0gICAgMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LDExNiw3LDAsCi0gICAgMTA2LDgsMCwxMDYsOSwwLDEwMCwxLDAsMTMxLDEsMCwxMTUsMTEyLDAsMTE2LAotICAgIDEwLDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMTEsMCwxMTAsMTExLAotICAgIDAsMTE2LDEwLDAsMTMxLDAsMCwxMjUsMywwLDEyMCw5MCwwLDEyNCwyLDAsCi0gICAgNjgsOTMsODIsMCwxMjUsNCwwLDEyNCw0LDAsMTA2LDEyLDAsMTAwLDIsMCwKLSAgICAxMzEsMSwwLDkyLDMsMCwxMjUsNSwwLDEyNSw2LDAsMTI1LDcsMCwxMjQsCi0gICAgNiwwLDExNCwxOTEsMCwxMDAsMywwLDEwNiwxMywwLDEyNCw1LDAsMTI0LDcsCi0gICAgMCwxMDYsMTQsMCwxMzEsMCwwLDEzMSwyLDAsMTI1LDgsMCwxMTAsNiwwLAotICAgIDEyNCw1LDAsMTI1LDgsMCwxMjQsMywwLDEwNiwxNSwwLDEyNCw4LDAsMTMxLAotICAgIDEsMCwxLDExMywxMjgsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMTEsMCwKLSAgICAxMTYsNywwLDEwNiw4LDAsMTA2LDksMCwxMTYsMTYsMCwxMzEsMSwwLDExNCwKLSAgICAxMCwxLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDEyNCwyLDAsNjgsMTMxLAotICAgIDEsMCwxMjQsMCwwLDk1LDE3LDAsMTEwLDAsMCwxMDAsNiwwLDgzLDQxLAotICAgIDcsMTIyLDY4LDcwLDEwNSwxMDgsMTA4LDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsMzIsMTExLDEwMiwzMiwxMTIsMTExLDExNiwxMDEsMTEwLDExNiwxMDUsOTcsMTA4LDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMCwxMDUsMTE0LAotICAgIDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDYsMTE0LDAsMCwwLDAsMTE0LDExNiwwLDAsCi0gICAgMCwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsMywwLDAsMCw4MywwLDAsMCwxMTUsMjgsMCwKLSAgICAwLDAsMTA0LDAsMCwxMjQsMCwwLDkzLDE4LDAsMTI1LDEsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTMxLDAsMCwxNDYsMiwwLDExMyw2LDAsODMsMTE0LDQsCi0gICAgMCwwLDAsNDEsMSwxMTQsMTQwLDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwKLSAgICAwLDkwLDIsMTAyLDExMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwyNTAsOSw2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2Miw0MiwKLSAgICA4LDAsMCwxMTUsMiwwLDAsMCw5LDAsMTIyLDQxLDcwLDEwNSwxMDgsMTAxLAotICAgIDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LAotICAgIDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDExNSwxMDEsMTE2LAotICAgIDk5LDExMSwxMDksMTEyLDYyLDc4LDQxLDE4LDExNCwzNSwwLDAsMCwxMTQsMywwLAotICAgIDAsMCw5MCw3LDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LDExNCwxMTQsNDUsMCwwLDAsCi0gICAgMjE4LDE3LDcwLDEwNSwxMDgsMTAxLDc4LDExMSwxMTYsNzAsMTExLDExNywxMTAsMTAwLDY5LDExNCwKLSAgICAxMTQsMTExLDExNCwyMTgsMTUsODAsMTAxLDExNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDIxOCwxOCw3OCwxMTEsMTE2LDY1LDY4LDEwNSwxMTQsMTAxLDk5LDExNiwKLSAgICAxMTEsMTE0LDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDcsMCwwLDAsMTE0LDgsMCwKLSAgICAwLDAsMTE0LDksMCwwLDAsMTE0LDkwLDEsMCwwLDExNCw5MSwxLDAsCi0gICAgMCwxMTQsMTM0LDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMTQwLDAsMCwwLAotICAgIDIxOCwzLDk3LDEwMCwxMDAsMTE0LDEwLDAsMCwwLDExNCw5MiwxLDAsMCw0MSwKLSAgICA5LDExNCw3MSwwLDAsMCwxMTQsMzUsMCwwLDAsOTAsOCw5OSwxMTEsMTEwLAotICAgIDExNiwxMDEsMTEwLDExNiwxMTUsOTAsMjEsMTA4LDExMSwxMTksMTAxLDExNCw5NSwxMTUsMTE3LDEwMiwKLSAgICAxMDIsMTA1LDEyMCw5NSw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsMTE0LDcyLDEsMCwKLSAgICAwLDExNCw2NywwLDAsMCwxMTQsNjYsMSwwLDAsMTE0LDU4LDEsMCwwLAotICAgIDkwLDgsMTEwLDEwMSwxMTksOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDk0LDEsMCwwLDEzLDgsCi0gICAgMCwwLDExNSwzNCwwLDAsMCwwLDIsOSwxLDMsMSwzMSwxLDIyLAotICAgIDMsMTEsMywxOCwxLDE4LDcsOSwxLDEzLDEsMjQsMSw2LDEsMjcsCi0gICAgMiw2LDEsMTcsMSw5LDEsMTgsMSwxMjIsMjIsNzAsMTA1LDEwOCwxMDEsNzAsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsCi0gICAgMCwwLDcsMCwwLDAsMTE1LDI1LDAsMCwwLDEzNSwwLDAsMTM1LDEsCi0gICAgMCwxMDIsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwyLDAsCi0gICAgMTI0LDIsMCw4Myw0MSwzLDk3LDIwLDEsMCwwLDY1LDMyLDk5LDEwOCw5NywKLSAgICAxMTUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwKLSAgICAxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsOTksMTA4LDExMSwxMTUsMTE3LDExNCwKLSAgICAxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDExNCwxMDEsMTE2LAotICAgIDExNywxMTQsMTEwLDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwzMiwKLSAgICAxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsCi0gICAgMTA1LDEwMSwxMDAsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMzIsOTcsMTEwLDEwMCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICAxMDgsMTExLDExNSwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTA4LAotICAgIDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDExMSwxMTUsMTE3LAotICAgIDExNCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDAsMTA1LDExNCwxMDEsCi0gICAgOTksMTE2LDExMSwxMTQsMTIxLDQ0LDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDk3LAotICAgIDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwwLAotICAgIDE5LDAsMCwwLDExNSw0NiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLAotICAgIDEsMCwxMTUsMzMsMCwxMTYsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMjQsMCwKLSAgICAwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsMCwKLSAgICAxMzYsMSwwLDE0MCwxLDAsODMsNDEsMywxMjIsNDUsODAsOTcsMTE2LDEwNCwzMiwKLSAgICAxMDQsMTExLDExMSwxMDcsMzIsMTAyLDExMSwxMTQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0NiwxMDksOTcsOTksMTA0LDEwNSwxMTAsMTAxLDExNCwxMjEsNDYsNzAsMTA1LDEwOCwKLSAgICAxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMjIsMzAsMTExLDExMCwxMDgsMTIxLDMyLDEwMCwKLSAgICAxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMDUsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExNSwKLSAgICAxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDExNCwzNSwwLDAsMCw0MSwyLDExNCwKLSAgICA0NiwwLDAsMCwxMTQsMTU0LDAsMCwwLDQxLDEsMTE0LDM1LDAsMCwwLAotICAgIDQxLDIsMTE0LDEyLDEsMCwwLDExNCw5MywxLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNSwwLDAsMCwyMTgsMjQsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsCi0gICAgMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNTQsOCwwLDAsMTE1LDYsMCwwLDAsMCwyLDEyLDEsMjEsMSwxMjIsCi0gICAgNTQsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMDQsMTExLDExMSwxMDcsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LAotICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDQxLDMsMTE0LDEyLAotICAgIDEsMCwwLDExNCw5MywxLDAsMCwxMTQsMTAwLDEsMCwwLDExNCw0LDAsCi0gICAgMCwwLDQxLDIsMTE0LDEyLDEsMCwwLDExNCw5MywxLDAsMCwxMTQsNSwKLSAgICAwLDAsMCwyMTgsOSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsNDQsOCwKLSAgICAwLDAsMTE1LDQsMCwwLDAsMCwxMCwyMSw2LDEyMiwyMCw3MCwxMDUsMTA4LAotICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLAotICAgIDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLAotICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMTYsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwxMjMsMzMsMTE0LDEyNSw0MSwKLSAgICA0MSwyLDExNCw0NywwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMSwxMTQsNzEsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMTE0LDEwMSwwLDAsMCw2Miw4LDAsMCwxMTUsMiwwLDAsMCwKLSAgICAwLDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsCi0gICAgOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQxLDE1LDExNCw1NywwLDAsMCwxMTQsNTYsCi0gICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwKLSAgICAwLDAsMTE0LDc1LDEsMCwwLDExNCwxNzMsMCwwLDAsMTE0LDE1LDEsMCwKLSAgICAwLDExNCwxNjYsMCwwLDAsMTE0LDg2LDEsMCwwLDExNCwxNCwxLDAsMCwKLSAgICAxMTQsOTQsMSwwLDAsMTE0LDE5LDEsMCwwLDExNCwxMDEsMSwwLDAsMTE0LAotICAgIDEwMSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKLSAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsODcsMSwwLDAsMTc4LDcsMCwKLSAgICAwLDExNSwyMCwwLDAsMCwxMiw3LDYsMiwxMiwxNCwxMiw0LDYsMiwKLSAgICAxMiwxMiwxMiw1LDE1LDQ1LDEyLDMxLDE4LDE4LDExNCw4NywxLDAsMCw5OSwKLSAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDY0LDAsMCwwLDExNSw0NiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCi0gICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgOTAsNSwwLDEwMCw2LDAsODMsNDEsNywyMTgsMTgsOTUsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDEyMiwzNiw2NywKLSAgICAxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwzMiwxMDksOTcsMTEwLDk3LDEwMywxMDEsMTE0LDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsCi0gICAgOTksMTA3LDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDEsMCwwLDAsNjcsMCwwLDAsMTE1LDE0LDAsMCwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MSwyLDEyMiwyNCw2NSwKLSAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQxLDIsMTE0LDEwNiwwLDAsMCwxMTQsCi0gICAgNCwxLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwKLSAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzUsMCwwLDAsNzIsCi0gICAgOCwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyOCw5NSw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsNDYsOTUsCi0gICAgOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSw0LDAsMCwwLDAsMCwwLAotICAgIDAsNCwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwxNCwwLAotICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDEwMCwxLDAsODMsCi0gICAgNDEsMiwxMjIsNjAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTQsMTAxLDEwMyw5NywKLSAgICAxMTQsMTAwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTEsMTAyLDMyLDk3LDExMCwxMjEsMzIsMTE0LDk3LAotICAgIDEwNSwxMTUsMTAxLDEwMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwxMTEsMTEwLDExNSw0NiwKLSAgICA3OCw0MSwyLDExNCwxMDYsMCwwLDAsMTE0LDEwNywwLDAsMCw0MSw0LDExNCwKLSAgICA3MSwwLDAsMCw5MCw4LDEwMSwxMjAsOTksOTUsMTE2LDEyMSwxMTIsMTAxLDkwLDksCi0gICAgMTAxLDEyMCw5OSw5NSwxMTgsOTcsMTA4LDExNywxMDEsOTAsMTMsMTAxLDEyMCw5OSw5NSwxMTYsCi0gICAgMTE0LDk3LDk5LDEwMSw5OCw5Nyw5OSwxMDcsMTE0LDQsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDgxLDAsMCwwLDc2LDgsMCwwLAotICAgIDExNSwyLDAsMCwwLDAsMiwxMjIsMjcsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMjAsCi0gICAgMTA1LDExNiw5NSw5NSw3OCw0MSw2LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLAotICAgIDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzUsMCwwLDAsCi0gICAgMTE0LDgxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMDIsMSwwLDAsNjgsOCwKLSAgICAwLDAsMTE1LDYsMCwwLDAsMTIsMiw2LDIsMTIsNCwxMTQsMTAyLDEsCi0gICAgMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDQsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDkxLDAsMCwwLDEyNCwxLDAsMTA2LAotICAgIDAsMCwxMDAsMSwwLDEyNCwyLDAsMTAwLDIsMCwyNCwxMzEsMiwwLDEyNSwKLSAgICAzLDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMTI0LDIsMCwxMDcsMCwKLSAgICAwLDExNCw1NSwwLDExNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLDAsCi0gICAgMTEwLDAsMCwxMjQsMywwLDEwMCw0LDAsMjUsMTI1LDQsMCwxMjQsMCwwLAotICAgIDExNCw4NywwLDEwMCw1LDAsMTA2LDMsMCwxMjQsNCwwLDEyNCwwLDAsMTMxLAotICAgIDIsMCw4MywxMjQsNCwwLDgzLDQxLDYsMTIyLDUwLDgyLDEwMSwxMTUsMTExLDEwOCwKLSAgICAxMTgsMTAxLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTYsMTExLDMyLDk3LDExMCwzMiwKLSAgICA5Nyw5OCwxMTUsMTExLDEwOCwxMTcsMTE2LDEwMSwzMiwxMTEsMTEwLDEwMSw0NiwxMTQsMTE2LDAsCi0gICAgMCwwLDExNCwyOSwwLDAsMCwxMjIsNTAsOTcsMTE2LDExNiwxMDEsMTA5LDExMiwxMTYsCi0gICAgMTAxLDEwMCwzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMzIsOTgsMTAxLDEyMSwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLAotICAgIDExOCwxMDEsMTA4LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTQsODQsMCwwLDAsCi0gICAgMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDQxLDQsMTE0LDM0LDAsMCwwLDExNCwzMSwKLSAgICAwLDAsMCwxMTQsMTMzLDAsMCwwLDExNCw0NywwLDAsMCw0MSw1LDExNCwKLSAgICA2NywwLDAsMCwyMTgsNywxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMjE4LDUsMTA4LAotICAgIDEwMSwxMTgsMTAxLDEwOCw5MCw0LDk4LDEwNSwxMTYsMTE1LDExNCwxMjgsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEzLAotICAgIDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSw4MSw4LDAsCi0gICAgMCwxMTUsMTAsMCwwLDAsMCwyLDIyLDEsMTgsMSwxNSwxLDEwLDEsCi0gICAgMTE0LDEwNSwxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNCwwLAotICAgIDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0NywwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTI1LDMsCi0gICAgMCwxMjQsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMzQsMCwxMDAsMCwwLAotICAgIDgzLDExNiwxLDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsNDEsMSwKLSAgICA3OCw0MSwyLDExNCwxNSwxLDAsMCwxMTQsMTc0LDAsMCwwLDQxLDQsMTE0LAotICAgIDc4LDEsMCwwLDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDE3MCwKLSAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwyMTgsMTcsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk1LDEwOCwKLSAgICAxMDEsMTAzLDk3LDk5LDEyMSw5MCw4LDAsMCwxMTUsOCwwLDAsMCwwLDMsCi0gICAgMTgsMSwxMiwxLDQsMSwxMTQsMTA2LDEsMCwwLDk5LDMsMCwwLDAsCi0gICAgMCwwLDAsMCw5LDAsMCwwLDI2LDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSwzNCwxLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTE1LDI4LDAsMTE2LDIsCi0gICAgMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsMiwwLDEsMTEwLDAsCi0gICAgMCwxMjQsMCwwLDExNiwwLDAsMTA2LDUsMCwxMDcsNiwwLDEyNSwzLDAsCi0gICAgMTIwLDI0MCwwLDExNiwwLDAsMTA2LDEsMCw2OCw5MywyMjUsMCwxMjUsNCwwLAotICAgIDExNiw2LDAsMTMxLDAsMCwxNDMsOTMsMCwxLDEyMSwxMywwLDEyNCw0LDAsCi0gICAgMTA2LDcsMCwxMjUsNSwwLDg3LDExMCw1NCwwLDQsMTE2LDgsMCwxMDcsMTAsCi0gICAgMCwxMTQsMTM4LDAsMSwxLDEsMTE2LDksMCwxMjQsNCwwLDEyNCwwLDAsCi0gICAgMTI0LDEsMCwxMzEsMywwLDEyNSw2LDAsMTI0LDYsMCwxMDAsMiwwLDEwNywKLSAgICA4LDAsMTE0LDEzNCwwLDExOSw1MywwLDExMCwwLDAsODksMTEwLDE5LDAsODgsCi0gICAgMTI0LDUsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMywwLDEyNSwKLSAgICA2LDAsODcsMTAwLDIsMCw4MSw4OCwxMjQsNiwwLDEwMCwyLDAsMTA3LDksCi0gICAgMCwxMTQsNTMsMCwxMjQsMywwLDEyLDExNCwxNSwxLDEyNCwwLDAsMTE2LDAsCi0gICAgMCwxMDYsNSwwLDEwNyw2LDAsMTE0LDE1LDEsMTE2LDAsMCwxMDYsNSwwLAotICAgIDEyNCwwLDAsMjUsMTI1LDcsMCwxMjEsMTMsMCwxMjQsNywwLDEwNiwxMCwwLAotICAgIDEyNSw4LDAsODcsMTEwLDIyLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwyNDcsCi0gICAgMCwxLDEsMSwxMjQsNiwwLDgzLDg5LDExMywxOSwxLDg4LDEyNCw4LDAsCi0gICAgMTAwLDIsMCwxMDcsOCwwLDExNCw4LDEsMTI0LDYsMCw4MywxMjQsOCwwLAotICAgIDgzLDExMywyMiwxLDEyNCw2LDAsODMsMTEzLDUzLDAsMTEzLDUzLDAsODcsMTAwLAotICAgIDIsMCw4MywxMDAsMiwwLDgzLDQxLDMsMTIyLDIzLDcwLDEwNSwxMTAsMTAwLDMyLAotICAgIDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDQ2LDEyMiwyMiwxMTUsMTIxLDExNSw0NiwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsNDEsMTEsMTE0LDcsMCwKLSAgICAwLDAsMjE4LDksMTA5LDEwMSwxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE2NywwLAotICAgIDAsMCwxMTQsMTY4LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDczLDAsMCwKLSAgICAwLDExNCwxMDIsMSwwLDAsMTE0LDE0LDEsMCwwLDExNCwyMTAsMCwwLDAsCi0gICAgMTE0LDEwNiwxLDAsMCwxMTQsMjA5LDAsMCwwLDQxLDksMTE0LDY3LDAsMCwKLSAgICAwLDExNCwzNSwwLDAsMCwxMTQsMTMsMSwwLDAsOTAsOSwxMDUsMTE1LDk1LAotICAgIDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE0LDc4LDEsMCwwLDExNCwxNCwxLDAsMCwKLSAgICAxMTQsMTc4LDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LDIwOSwwLDAsMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDgsMCwwLDExNSw0OCwKLSAgICAwLDAsMCwwLDIsOSwxLDE5LDQsMTUsMSwxNiwxLDEwLDEsMywKLSAgICAxLDEzLDEsMTMsMSwxOCwxLDEyLDEsMTEsMiwyNCwxLDEyLDIsMjIsCi0gICAgMSwxMywxLDMsMSwxMywxLDEzLDQsOSwyLDEyLDEsNCwyLDcsCi0gICAgMiwxMSwyLDExNCwxMDgsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwKLSAgICAwLDQsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTk0LDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEzMSwyLDAsMTE1LDQ1LAotICAgIDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMjQsMCwwLAotICAgIDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsCi0gICAgMiwwLDEwMCwyLDAsMTA3LDAsMCwxMTQsNzIsMCwxMTYsNSwwLDEwMCwzLAotICAgIDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDEsMCwxMTQsMTU2LDAsCi0gICAgMTE2LDAsMCwxMjQsMSwwLDExNiwxLDAsMTMxLDIsMCwxMTUsMTA4LDAsMTE2LAotICAgIDIsMCwxMDAsNCwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTI0LDEsCi0gICAgMCwxMTYsNiwwLDEwNiw3LDAsMTA3LDcsMCwxMTQsMTU2LDAsMTAwLDUsMCwKLSAgICAxMjUsMywwLDExNiw4LDAsMTI0LDMsMCwxMDYsMywwLDEyNCwxLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEzLDE1NiwwLDExMCwwLDAsMTI0LDAsCi0gICAgMCwxMiwxMTQsMTkwLDAsMTI0LDIsMCwxMDAsMiwwLDEwNywyLDAsMTE0LDE5MCwKLSAgICAwLDExNiw1LDAsMTAwLDYsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwKLSAgICAxMDAsNywwLDgzLDQxLDgsMTIyLDI4LDg2LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsOTcsCi0gICAgMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDM0LDExNSw5NywKLSAgICAxMTAsMTAxLDM0LDQ2LDEyMiwzMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LAotICAgIDEwMSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDExNSwxMTYsMTE0LDQ0LDMyLDExMCwKLSAgICAxMTEsMTE2LDMyLDEyMywxMjUsMTE0LDg0LDAsMCwwLDEyMiwxOCwxMDgsMTAxLDExOCwxMDEsCi0gICAgMTA4LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsMzIsNDgsMTIyLDMxLAotICAgIDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTAsMTExLDExNiwzMiwKLSAgICAxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDEyMiwKLSAgICA2MSw4MCw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLAotICAgIDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCw0NCwzMiwKLSAgICA5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LDMyLDExNCwKLSAgICAxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMjIsMTcsCi0gICAgNjksMTA5LDExMiwxMTYsMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksCi0gICAgMTAxLDc4LDQxLDksMTE0LDE5MywwLDAsMCwxMTQsODMsMSwwLDAsMjE4LDksCi0gICAgODQsMTIxLDExMiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw0NywwLDAsMCwxMTQsNjYsCi0gICAgMCwwLDAsMTE0LDEzMywwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwKLSAgICAwLDAsMjE4LDExLDgzLDEyMSwxMTUsMTE2LDEwMSwxMDksNjksMTE0LDExNCwxMTEsMTE0LDQxLAotICAgIDQsMTE0LDY3LDAsMCwwLDExNCwxMDMsMSwwLDAsMTE0LDEwNCwxLDAsMCwKLSAgICAxMTQsMTcyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKLSAgICA1LDAsMCwwLDIxOCwxMyw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LDk5LDEwNCwKLSAgICAxMDEsOTksMTA3LDEzOSw4LDAsMCwxMTUsMjQsMCwwLDAsMCwyLDE1LDEsCi0gICAgMzAsMSwxMiwxLDE1LDEsNiwxLDE1LDEsMTUsMSwxNSwxLDYsMiwKLSAgICAyNywxLDE5LDEsMTE0LDExMSwxLDAsMCwxMjIsMTYsNzgsMTExLDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMjIsNCwxMjMsMzMsMTE0LAotICAgIDEyNSw5OSwyLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwxMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsNTIsMSwwLDAsMTAwLDAsMCwxMjUsMiwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwKLSAgICAyNSwxMjUsMywwLDEyNCwzLDAsMTE0LDE3OCwwLDEyNCwzLDAsMTE2LDEsMCwKLSAgICAxMDYsMiwwLDEwNyw3LDAsMTE0LDYyLDAsMTE2LDMsMCwxMjQsMSwwLDEyNCwKLSAgICAzLDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LDAsMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTA3LDYsMCwxMTQsODgsMCwxMTYsMSwwLDEwNiwyLDAsMTI0LDAsCi0gICAgMCwyNSw4MywxMTYsMSwwLDEwNiwyLDAsMTI0LDMsMCwyNSwxMjUsNCwwLAotICAgIDEyMSwxMywwLDEyNCw0LDAsMTA2LDQsMCwxMjUsMiwwLDg3LDExMywxNzgsMCwKLSAgICA0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE3NCwwLDEsMSwxLDExNiw2LDAsCi0gICAgMTAwLDMsMCwyMywxMDYsNywwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLAotICAgIDEyNSw1LDAsMTE2LDgsMCwxMjQsNSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsCi0gICAgMSwxLDEzMCwxLDAsODksMTEzLDE3OCwwLDg4LDExMCwwLDAsMTE2LDksMCwKLSAgICAxMjQsMCwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsNiwwLDEyNCw2LDAsMTAwLAotICAgIDAsMCwxMDcsOCwwLDExNCwyMzUsMCwxMTYsOCwwLDExNiw2LDAsMTA2LDcsCi0gICAgMCwxMjQsMCwwLDEzMSwxLDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsCi0gICAgMTMwLDEsMCwxMTAsMTgsMCwxMTYsMTAsMCwxMjQsNiwwLDEzMSwxLDAsMTA2LAotICAgIDExLDAsMTMxLDAsMCwxMjUsNywwLDEyNCwzLDAsMTE0LDQ4LDEsMTE2LDEsCi0gICAgMCwxMDYsMiwwLDEyNCwzLDAsMjUsMTI1LDQsMCwxMTYsMTIsMCwxMjQsNCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDUsMCwKLSAgICAyNSwxMjQsNywwLDEzMSwzLDAsMSwxMTAsMCwwLDEyNCw3LDAsODMsNDEsCi0gICAgNiw3OCwxMTQsMTE2LDAsMCwwLDExNCw4NCwwLDAsMCwxMjIsMjMsNTksMzIsCi0gICAgMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsMTE0LDY3LDAsMCwwLDExNCwxMTUsMCwwLDAsNDEsCi0gICAgMTMsMTE0LDMyLDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywwLDAsMCwKLSAgICAxMTQsMTE0LDAsMCwwLDExNCwyNDcsMCwwLDAsMTE0LDIxMCwwLDAsMCwyMTgsCi0gICAgOCw5NSw2OSw4Miw4Miw5NSw3Nyw4Myw3MSwxMTQsNDcsMCwwLDAsMTE0LDE1NCwKLSAgICAwLDAsMCwxMTQsMTA4LDEsMCwwLDExNCwxNzUsMCwwLDAsMTE0LDcsMSwKLSAgICAwLDAsMTE0LDYxLDAsMCwwLDQxLDgsMTE0LDY3LDAsMCwwLDIxOCw3LAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDExNCwzNSwwLDAsMCwxMTQsMjM0LDAsMCwKLSAgICAwLDkwLDEzLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMTE0LDE3MiwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LAotICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDIzLAotICAgIDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywKLSAgICAxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCwxNTksOCwwLDAsMTE1LDQyLDAsMCwwLAotICAgIDAsMSw2LDEsMTksMSw2LDEsMTUsMSwxNiwyLDE1LDEsMTEsMSwKLSAgICAxMywxLDMsMSwxMywxLDEzLDEsMjIsMSwyNiwxLDE1LDEsMTIsMSwKLSAgICAzMCwyLDE4LDEsNiwyLDEzLDEsMzIsMSwxMTQsMTE0LDEsMCwwLDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEwLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwzNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLAotICAgIDEsMCwxNDMsMTgsMCwxLDExNiwxLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwKLSAgICAyLDAsODMsODcsMTAwLDEsMCw4MSw4OCwxMDAsMSwwLDgzLDQxLDIsMTIyLAotICAgIDU0LDcwLDEwNSwxMTAsMTAwLDMyLDk3LDExMCwxMDAsMzIsMTA4LDExMSw5NywxMDAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMTQsCi0gICAgMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMDgsMTExLDk5LDEwNyw0Niw3OCw0MSwyLDExNCwxMDMsMCwwLDAsMTE0LAotICAgIDExNCwxLDAsMCw0MSwyLDExNCw2NywwLDAsMCwxMTQsMTEzLDEsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKLSAgICAxNCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxODYsCi0gICAgOCwwLDAsMTE1LDQsMCwwLDAsMCwyLDEzLDEsMTE0LDExNSwxLDAsCi0gICAgMCw5OSwzLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw0LDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNzIsMCwwLDAsMTE2LDAsMCwxMjQsMCwKLSAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMywwLDEsMTI0LDIsMCwxMDAsMSwKLSAgICAwLDEwNyw0LDAsMTE0LDQ5LDAsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLDAsCi0gICAgMTI0LDIsMCwxMzEsMywwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEwNiwKLSAgICAzLDAsMTMxLDAsMCwxLDEyNCwwLDAsMTE2LDQsMCwxMDYsNSwwLDEwNywKLSAgICA3LDAsMTE0LDg3LDAsMTE2LDYsMCwxMjQsMCwwLDExNiw3LDAsMTMxLDIsCi0gICAgMCw4MywxMTYsNCwwLDEwNiw1LDAsMTI0LDAsMCwyNSwxMjUsMywwLDEyNCwKLSAgICAzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNTgsMCwxMTYsMiwwLDEwNiw4LAotICAgIDAsMTMxLDAsMCwxLDEwMCwzLDAsMTA2LDksMCwxMjQsMCwwLDEzMSwxLAotICAgIDAsMTI1LDQsMCwxMTYsMTAsMCwxMjQsNCwwLDEwMCw0LDAsMTI0LDAsMCwKLSAgICAxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMTYsMTEsMCwxMjQsMCwwLDEzMSwKLSAgICAxLDAsMSwxMjQsMywwLDgzLDQxLDUsOTcsNTAsMSwwLDAsNzMsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwzMiw5NywxMTAsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDk3LDExNSwxMDEsMTAwLAotICAgIDMyLDExMSwxMTAsMzIsMTA1LDExNiwxMTUsMzIsMTEwLDk3LDEwOSwxMDEsNDQsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LAotICAgIDEwOCwxMDgsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsCi0gICAgMTA5LDk3LDEwMCwxMDEsMzIsMTAyLDExNCwxMTEsMTA5LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiw5NywxMDAsMTA2LDExNywxMTUsMTE2LDEwOSwKLSAgICAxMDEsMTEwLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDIsCi0gICAgMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLDExMCwKLSAgICAxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMTQsMTAxLDk3LDExNiwxMDEsMTE1LDExNiwzMiwKLSAgICA5OSwxMTEsMTA5LDEwOSwxMTEsMTEwLDMyLDEwMCwxMDEsMTEwLDExMSwxMDksMTA1LDExMCw5NywxMTYsCi0gICAgMTExLDExNCwzMiwxMTEsMTAyLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCw5NywxMDgsCi0gICAgMTA1LDExNiwxMjEsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDExNiwxMTksMTAxLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTcsMTEwLAotICAgIDEwMCwzMiw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSw0NiwzMiw4NCwxMDQsCi0gICAgMTA1LDExNSwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLDEwMSwxMTUsMzIsMTE1LDEwMSwxMTYsMTE2LAotICAgIDEwNSwxMTAsMTAzLDMyLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwKLSAgICAxMDUsMTAyLDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsMzIsMTAwLDEwNSwxMDAsMzIsMTEwLDExMSwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTE0LDg0LDAsMCwwLDc4LDEyMiw0MCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMTEsCi0gICAgMTAyLDMyLDEyMywxMjUsMzIsMTA0LDk3LDEwOCwxMTYsMTAxLDEwMCw1OSwzMiw3OCwxMTEsMTEwLAotICAgIDEwMSwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwKLSAgICAxMTQsNjcsMCwwLDAsNDEsMTIsMTE0LDExMSwxLDAsMCwxMTQsMTA1LDEsMCwKLSAgICAwLDExNCwxMDYsMCwwLDAsMTE0LDQsMSwwLDAsMTE0LDcsMCwwLDAsCi0gICAgMTE0LDczLDAsMCwwLDExNCwxMTUsMSwwLDAsMjE4LDExLDk1LDEwMyw5OSwxMDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE0LDEwNywwLDAsMCwxMTQsNDcsMCwwLAotICAgIDAsMTE0LDE1NCwwLDAsMCwxMTQsMTEyLDAsMCwwLDQxLDUsMTE0LDY3LDAsCi0gICAgMCwwLDExNCwxMDMsMSwwLDAsMTE0LDEwNCwxLDAsMCwxMTQsMTgwLDAsMCwKLSAgICAwLDExNCwxNTIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDUsMCwwLDAsMTE0LDExNiwxLDAsMCwxOTIsOCwwLDAsMTE1LDI4LAotICAgIDAsMCwwLDAsOSwxNiwxLDEyLDEsMjEsMSwxMCwxLDE1LDEsMTMsCi0gICAgMSwxMywxLDEyLDEsMTAsMSw2LDEsOSwxLDIxLDEsMTAsMSwxMTQsCi0gICAgMTE2LDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwKLSAgICAwLDE3LDAsMCwwLDY3LDAsMCwwLDExNSwxLDEsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDI1MywwLDEwMCwyLDAsCi0gICAgMTI0LDEsMCwxMDcsNiwwLDExNCw4OSwwLDExNiwxLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsCi0gICAgMCwxLDExNiwwLDAsMTI0LDAsMCwxMDAsMywwLDEzMSwyLDAsMTE0LDg5LAotICAgIDAsMTI0LDEsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwwLAotICAgIDEsMTEzLDg5LDAsMTEwLDAsMCwxMjAsMTYxLDAsMTI0LDEsMCw2OCw5MywxNTAsCi0gICAgMCwxMjUsMywwLDExNiwwLDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsCi0gICAgMTE1LDk2LDAsMTAwLDQsMCwxMDYsNSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsCi0gICAgMywwLDEzMSwyLDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNywwLDEyNCwyLAotICAgIDAsMTI0LDQsMCwxMzEsMiwwLDEsODcsMTEzLDI0NiwwLDQsMTE2LDgsMCwKLSAgICAxMDcsMTAsMCwxMTQsMjQyLDAsMSwxMjUsNSwwLDEsMTIyLDUzLDAsMTE2LDksCi0gICAgMCwxMjQsNSwwLDEzMSwxLDAsMTA2LDEwLDAsMTE2LDExLDAsMTMxLDEsMCwKLSAgICAxMTQsMjIxLDAsMTI0LDUsMCwxMDYsMTIsMCwxMjQsNCwwLDEwNywyLDAsMTE0LAotICAgIDIyMSwwLDExOSw5NiwwLDExMywyMjEsMCwxMTAsMCwwLDEzMCwwLDAsODcsODksCi0gICAgMTAwLDUsMCwxMDAsNSwwLDEyNSw1LDAsMTI2LDUsMCw4OCwxMTMsMjQ2LDAsCi0gICAgODgsMTEzLDk2LDAsMTEzLDk2LDAsODcsMTEwLDAsMCwxMjQsMCwwLDgzLDQxLAotICAgIDYsMTIyLDIzOCw3MCwxMDUsMTAzLDExNywxMTQsMTAxLDMyLDExMSwxMTcsMTE2LDMyLDExOSwxMDQsCi0gICAgOTcsMTE2LDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDMyLDExNSwxMDQsCi0gICAgMTExLDExNywxMDgsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMzIsMTEyLDk3LAotICAgIDExNCw5NywxMDksMTAxLDExNiwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsOTksOTcsMTA4LAotICAgIDEwOCw5Nyw5OCwxMDgsMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsOTcsMTA3LDEwMSwKLSAgICAxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDQ2LDMyLDczLDExNiwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDk5LDExMSwxMTcsMTEyLDEwOCwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTQsMTExLDEwOSwKLSAgICAzMiw5NywxMTUsMTE1LDExNywxMDksMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLAotICAgIDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LDExNCwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDExNCwyNDcsMCwwLDAsMjUwLDEsNDIsMjE4LDcsOTUsOTUsOTcsMTA4LDEwOCwKLSAgICA5NSw5NSwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsNzgsNDEsMTMsMTE0LDYwLDAsMCwKLSAgICAwLDExNCwyNDYsMCwwLDAsMjE4LDYsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTE0LDE5OCwKLSAgICAwLDAsMCwxMTQsMTE4LDEsMCwwLDExNCw0NywwLDAsMCwxMTQsNTcsMCwKLSAgICAwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTU0LDAsMCwwLDExNCw4MywxLDAsCi0gICAgMCwxMTQsOSwwLDAsMCwyMTgsMTUsOTUsNjksODIsODIsOTUsNzcsODMsNzEsCi0gICAgOTUsODAsODIsNjksNzAsNzMsODgsMTE0LDY3LDAsMCwwLDQxLDYsMTE0LDE4MCwKLSAgICAwLDAsMCwyMTgsOCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNCwxMTMsMSwKLSAgICAwLDAsMTE0LDE2LDAsMCwwLDkwLDksMTAyLDExNCwxMTEsMTA5LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDExNCw0MSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwKLSAgICAxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDIxNiw4LDAsMCwxMTUsMzQsMCwwLAotICAgIDAsMCwxMCwxNSwxLDEyLDEsMTIsMSwxMywxLDE1LDEsMjIsMSwxMywKLSAgICAxLDE1LDEsMjEsMSwzLDEsMTcsMSwxOCw0LDIxLDEsMTUsMSw5LAotICAgIDEsMzIsMSwxMTQsMTIyLDEsMCwwLDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDc4LDAsCisgICAgMCwxMTUsMTg1LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEzMSwKKyAgICAyLDAsMTE1LDQyLDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTE2LDQsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsCisgICAgMTI0LDIsMCwxMDAsMiwwLDEwNywwLDAsMTE0LDY2LDAsMTE2LDUsMCwxMDAsCisgICAgMywwLDEzMSwxLDAsMTMwLDEsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDQsCisgICAgMCwxMTQsMTUwLDAsMTE2LDAsMCwxMjQsMSwwLDExNiwxLDAsMTMxLDIsMCwKKyAgICAxMTUsMTA4LDAsMTE2LDIsMCwxMDAsNCwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsCisgICAgNDIsMCwxMjQsMSwwLDExNiw2LDAsMTA2LDcsMCwxMDcsNywwLDExNCwxNTAsCisgICAgMCwxMDAsNSwwLDEyNSwzLDAsMTE2LDgsMCwxMjQsMywwLDEwNiwzLDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMjQsMCwwLDEyLAorICAgIDExNCwxODEsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsMTgxLDAsMTE2LAorICAgIDUsMCwxMDAsNiwwLDEzMSwxLDAsMTMwLDEsMCwxMDAsNywwLDgzLDQxLAorICAgIDgsMTIyLDI4LDg2LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwKKyAgICAxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDM0LDExNSw5NywxMTAsMTAxLDM0LDQ2LDEyMiwKKyAgICAzMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMDksMTE3LDExNSwKKyAgICAxMTYsMzIsOTgsMTAxLDMyLDExNSwxMTYsMTE0LDQ0LDMyLDExMCwxMTEsMTE2LDMyLDEyMywxMjUsCisgICAgMTE0LDMzLDAsMCwwLDEyMiwxOCwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTcsMTE1LAorICAgIDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsMzIsNDgsMTIyLDMxLDk1LDk1LDExMiw5Nyw5OSwKKyAgICAxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTAsMTExLDExNiwzMiwxMTUsMTAxLDExNiwzMiwxMTYsCisgICAgMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDEyMiw2MSw4MCw5NywxMTQsMTAxLAorICAgIDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsMTEwLAorICAgIDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCw0NCwzMiw5OSw5NywxMTAsMTEwLDExMSwKKyAgICAxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsCisgICAgMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMjIsMTcsNjksMTA5LDExMiwxMTYsMTIxLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDc4LDQxLDksMjE4LAorICAgIDEwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMjE4LDMsMTE1LDExNiwxMTQsCisgICAgMjE4LDksODQsMTIxLDExMiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw1MCwwLDAsMCwKKyAgICAxMTQsMTMsMCwwLDAsMTE0LDE2OCwwLDAsMCwxMTQsMTQsMCwwLDAsMTE0LAorICAgIDIxLDAsMCwwLDIxOCwxMSw4MywxMjEsMTE1LDExNiwxMDEsMTA5LDY5LDExNCwxMTQsMTExLAorICAgIDExNCw0MSw0LDExNCwxNSwwLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwxNzAsMCwKKyAgICAwLDAsMTE0LDE0NywwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwKKyAgICAwLDExNCwxMSwwLDAsMCwyMTgsMTMsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSwKKyAgICA5OSwxMDQsMTAxLDk5LDEwNywxNTEsMywwLDAsMTE1LDI0LDAsMCwwLDAsMiwKKyAgICAxNSwxLDI3LDEsMTIsMSwxMiwxLDEyLDEsMTUsMSwxNSwxLDE1LDEsCisgICAgNiwyLDIxLDEsMTksMSwxMTQsMTgxLDAsMCwwLDEyMiwxNiw3OCwxMTEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEyMiw0LDEyMywKKyAgICAzMywxMTQsMTI1LDk5LDIsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLAorICAgIDEyLDAsMCwwLDY3LDAsMCwwLDExNSw0MCwxLDAsMCwxMDAsMCwwLAorICAgIDEyNSwyLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMDAsCisgICAgMiwwLDI1LDEyNSwzLDAsMTI0LDMsMCwxMTQsMTc1LDAsMTI0LDMsMCwxMTYsCisgICAgMSwwLDEwNiwyLDAsMTA3LDcsMCwxMTQsNTksMCwxMTYsMywwLDEyNCwxLAorICAgIDAsMTI0LDMsMCwxMzEsMiwwLDEsMTI0LDAsMCwxMTYsMSwwLDEwNiwyLAorICAgIDAsMTA3LDYsMCwxMTQsODUsMCwxMTYsMSwwLDEwNiwyLDAsMTI0LDAsMCwKKyAgICAyNSw4MywxMTYsMSwwLDEwNiwyLDAsMTI0LDMsMCwyNSwxMjUsNCwwLDEyMSwKKyAgICAxMywwLDEyNCw0LDAsMTA2LDQsMCwxMjUsMiwwLDg3LDExMCw2MSwwLDQsCisgICAgMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTc0LDAsMSwxLDEsMTE2LDYsMCwxMDAsCisgICAgMywwLDIzLDEwNiw3LDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTI1LAorICAgIDUsMCwxMTYsOCwwLDEyNCw1LDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLAorICAgIDEsMTAwLDAsMCwxMzAsMiwwLDg5LDExMCwxLDAsODgsMTE2LDksMCwxMjQsCisgICAgMCwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsNiwwLDEyNCw2LDAsMTAwLDAsCisgICAgMCwxMDcsOCwwLDExNCwyMzIsMCwxMTYsOCwwLDExNiw2LDAsMTA2LDcsMCwKKyAgICAxMjQsMCwwLDEzMSwxLDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLAorICAgIDEsMCwxMTAsMTIsMCwxMTYsMTAsMCwxMjQsNiwwLDEzMSwxLDAsMTI1LDcsCisgICAgMCwxMjQsMywwLDExNCwzNiwxLDExNiwxLDAsMTA2LDIsMCwxMjQsMywwLAorICAgIDI1LDEyNSw0LDAsMTE2LDExLDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTAwLDEsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI0LDcsMCwxMzEsMywwLAorICAgIDEsMTI0LDcsMCw4Myw0MSw2LDc4LDExNCwxMjEsMCwwLDAsMTE0LDMzLDAsCisgICAgMCwwLDEyMiwyMyw1OSwzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsCisgICAgMTE2LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTQsMTUsMCwwLDAsCisgICAgMTE0LDE0MCwwLDAsMCw0MSwxMiwxMTQsMTIyLDAsMCwwLDExNCwxNCwwLDAsCisgICAgMCwxMTQsMjEsMCwwLDAsMTE0LDY1LDAsMCwwLDExNCwxMzEsMCwwLDAsCisgICAgMTE0LDk2LDAsMCwwLDIxOCw4LDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLDExNCwKKyAgICA1MCwwLDAsMCwxMTQsNzcsMCwwLDAsMTE0LDE3NiwwLDAsMCwxMTQsMTQ5LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDQxLDgsMTE0LDE1LDAsMCwwLDIxOCwKKyAgICA3LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDExNCwxNTIsMCwwLDAsMTE0LDEyMywwLAorICAgIDAsMCw5MCwxMywxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDExNCwxNDcsMCwwLDAsMTE0LDg4LDAsMCwwLDExNCw4OSwwLDAsMCwKKyAgICAxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsCisgICAgMjMsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsCisgICAgMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDE3MSwzLDAsMCwxMTUsNDIsMCwwLAorICAgIDAsMCwxLDYsMSwxOSwxLDYsMSwxNSwxLDEzLDIsMTUsMSwxMSwKKyAgICAxLDEzLDEsMywxLDEzLDEsMTMsMSwyMiwxLDI2LDEsMTUsMSwxMiwKKyAgICAxLDMwLDIsMTIsMSw2LDIsMTMsMSwyOSwxLDExNCwxODQsMCwwLDAsCisgICAgOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTAsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDM3LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwKKyAgICAxMzEsMSwwLDE0MywxOCwwLDEsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLDAsCisgICAgMTMxLDIsMCw4Myw4NywxMDAsMSwwLDgxLDgyLDg4LDEwMCwxLDAsODMsNDEsCisgICAgMiwxMjIsNTQsNzAsMTA1LDExMCwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsMTAwLAorICAgIDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQxLDIsMTE0LDU0LDAsMCwKKyAgICAwLDExNCwxODQsMCwwLDAsNDEsMiwxMTQsMTUsMCwwLDAsMTE0LDE4MywwLAorICAgIDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsCisgICAgMCwyMTgsMTQsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywKKyAgICAxMDAsMTk4LDMsMCwwLDExNSw0LDAsMCwwLDAsMiwxMywxLDExNCwxODUsCisgICAgMCwwLDAsMTE0LDMzLDAsMCwwLDk5LDMsMCwwLDAsMCwwLDAsCisgICAgMCw1LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE2NiwwLAorICAgIDAsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLAorICAgIDAsMSwxMjQsMiwwLDEwMCwxLDAsMTA3LDQsMCwxMTQsNDYsMCwxMTYsMSwKKyAgICAwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLDAsMTI1LDAsMCwKKyAgICAxMTYsMiwwLDEwNiwzLDAsMTMxLDAsMCwxLDEyNCwwLDAsMTE2LDQsMCwKKyAgICAxMDYsNSwwLDEwNyw3LDAsMTE0LDg0LDAsMTE2LDYsMCwxMjQsMCwwLDExNiwKKyAgICA3LDAsMTMxLDIsMCw4MywxMTYsNCwwLDEwNiw1LDAsMTI0LDAsMCwyNSwKKyAgICAxMjUsMywwLDEyNCwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNTIsMCwxMTYsCisgICAgMiwwLDEwNiw4LDAsMTMxLDAsMCwxLDEwMCwzLDAsMTA2LDksMCwxMjQsCisgICAgMCwwLDEzMSwxLDAsMTI1LDQsMCwxMTYsMTAsMCwxMjQsNCwwLDEwMCw0LAorICAgIDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwxLDAsMTE2LDExLDAsMTI0LDAsMCwKKyAgICAxMzEsMSwwLDEsMTI0LDMsMCw4Myw0MSw1LDk3LDUwLDEsMCwwLDczLAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCw5NywxMTUsMTAxLAorICAgIDEwMCwzMiwxMTEsMTEwLDMyLDEwNSwxMTYsMTE1LDMyLDExMCw5NywxMDksMTAxLDQ0LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKKyAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLAorICAgIDMyLDEwOSw5NywxMDAsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSw0NCwzMiw5NywxMTAsMTAwLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsOTcsMTAwLDEwNiwxMTcsMTE1LDExNiwKKyAgICAxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCisgICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKKyAgICAxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTE0LDEwMSw5NywxMTYsMTAxLDExNSwxMTYsCisgICAgMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiwxMDAsMTAxLDExMCwxMTEsMTA5LDEwNSwxMTAsOTcsCisgICAgMTE2LDExMSwxMTQsMzIsMTExLDEwMiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsOTcsCisgICAgMTA4LDEwNSwxMTYsMTIxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LAorICAgIDExMCwxMDAsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsNDYsMzIsODQsCisgICAgMTA0LDEwNSwxMTUsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDEsMTE1LDMyLDExNSwxMDEsMTE2LAorICAgIDExNiwxMDUsMTEwLDEwMywzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsCisgICAgMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDMyLDEwMCwxMDUsMTAwLDMyLDExMCwxMTEsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDExNCwzMywwLDAsMCw3OCwxMjIsNDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsCisgICAgMTExLDEwMiwzMiwxMjMsMTI1LDMyLDEwNCw5NywxMDgsMTE2LDEwMSwxMDAsNTksMzIsNzgsMTExLAorICAgIDExMCwxMDEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMTUsMTE0LDE1LDAsMCwwLDQxLDEyLDExNCwxODEsMCwwLDAsMTE0LDE3MSwwLAorICAgIDAsMCwxMTQsNTcsMCwwLDAsMTE0LDE0NSwwLDAsMCwxMTQsMTQsMCwwLAorICAgIDAsMTE0LDIxLDAsMCwwLDExNCwxODUsMCwwLDAsMjE4LDExLDk1LDEwMyw5OSwKKyAgICAxMDAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE0LDU4LDAsMCwwLDExNCw1MCwwLAorICAgIDAsMCwxMTQsNzcsMCwwLDAsMTE0LDYzLDAsMCwwLDQxLDUsMTE0LDE1LAorICAgIDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsODksMCwKKyAgICAwLDAsMTE0LDc0LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLAorICAgIDAsMTE0LDExLDAsMCwwLDExNCwxODYsMCwwLDAsMjA0LDMsMCwwLDExNSwKKyAgICAyOCwwLDAsMCwwLDksMTYsMSwxMiwxLDE4LDEsMTAsMSwxNSwxLAorICAgIDEzLDEsMTMsMSwxMiwxLDEwLDEsNiwxLDksMSwxOCwxLDEwLDEsCisgICAgMTE0LDE4NiwwLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLAorICAgIDAsMCwxNywwLDAsMCw2NywwLDAsMCwxMTUsMjM5LDAsMCwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDIzNSwwLDEwMCwyLAorICAgIDAsMTI0LDEsMCwxMDcsNiwwLDExNCw4MywwLDExNiwxLDAsMTI0LDEsMCwKKyAgICAxMzEsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLAorICAgIDEsMCwxLDExNiwwLDAsMTI0LDAsMCwxMDAsMywwLDEzMSwyLDAsMTE0LAorICAgIDgzLDAsMTI0LDEsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwKKyAgICAwLDEsMTIwLDE0OSwwLDEyNCwxLDAsNjgsOTMsMTQxLDAsMTI1LDMsMCwxMTYsCisgICAgMCwwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLDExNSw5MCwwLDEwMCw0LAorICAgIDAsMTA2LDUsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsMCwxMzEsMiwwLAorICAgIDEyNSw0LDAsMTIxLDE3LDAsMTE2LDcsMCwxMjQsMiwwLDEyNCw0LDAsMTMxLAorICAgIDIsMCwxLDg3LDExMyw5MCwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMjMwLAorICAgIDAsMSwxMjUsNSwwLDEsMTIyLDQ3LDAsMTE2LDksMCwxMjQsNSwwLDEzMSwKKyAgICAxLDAsMTA2LDEwLDAsMTE2LDExLDAsMTMxLDEsMCwxMTQsMjA5LDAsMTI0LDUsCisgICAgMCwxMDYsMTIsMCwxMjQsNCwwLDEwNywyLDAsMTE0LDIwOSwwLDExOSw5MCwwLAorICAgIDEzMCwwLDAsODcsODksMTAwLDUsMCwxMDAsNSwwLDEyNSw1LDAsMTI2LDUsCisgICAgMCw4OCwxMTMsOTAsMCw4OCwxMTMsOTAsMCw4NywxMjQsMCwwLDgzLDQxLDYsCisgICAgMTIyLDIzOCw3MCwxMDUsMTAzLDExNywxMTQsMTAxLDMyLDExMSwxMTcsMTE2LDMyLDExOSwxMDQsOTcsCisgICAgMTE2LDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDMyLDExNSwxMDQsMTExLAorICAgIDExNywxMDgsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDg0LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMzIsMTEyLDk3LDExNCwKKyAgICA5NywxMDksMTAxLDExNiwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCwKKyAgICA5Nyw5OCwxMDgsMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsOTcsMTA3LDEwMSwxMTUsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDQ2LDMyLDczLDExNiwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwKKyAgICAxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDk5LDExMSwxMTcsMTEyLDEwOCwxMDEsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKKyAgICA5NywxMTUsMTE1LDExNywxMDksMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAorICAgIDEwNSw5OCwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsCisgICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwKKyAgICAxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LDExNCwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDExNCwxMzEsMCwwLDAsMjUwLDEsNDIsMjE4LDcsOTUsOTUsOTcsMTA4LDEwOCw5NSwKKyAgICA5NSwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsNzgsNDEsMTMsMTE0LDQsMCwwLDAsCisgICAgMTE0LDEzMCwwLDAsMCwyMTgsNiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwyMTgsNiwxMDEsCisgICAgMTIwLDExNiwxMDEsMTEwLDEwMCwxMTQsMTg4LDAsMCwwLDExNCw1MCwwLDAsMCwxMTQsCisgICAgMSwwLDAsMCwxMTQsNjUsMCwwLDAsMTE0LDc3LDAsMCwwLDExNCwxNzgsCisgICAgMCwwLDAsMTE0LDcxLDAsMCwwLDIxOCwxNSw5NSw2OSw4Miw4Miw5NSw3NywKKyAgICA4Myw3MSw5NSw4MCw4Miw2OSw3MCw3Myw4OCwxMTQsMTUsMCwwLDAsNDEsNiwKKyAgICAxMTQsODksMCwwLDAsMjE4LDgsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwxMTQsCisgICAgMTgzLDAsMCwwLDIxOCwxLDEyMCw5MCw5LDEwMiwxMTQsMTExLDEwOSw5NSwxMTAsOTcsCisgICAgMTA5LDEwMSw5MCwzLDEwMSwxMjAsOTksMTE0LDEwLDAsMCwwLDExNCwxMCwwLDAsCisgICAgMCwxMTQsMTEsMCwwLDAsMjE4LDE2LDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsCisgICAgMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwyMjgsMywwLDAsMTE1LDM0LDAsMCwKKyAgICAwLDAsMTAsMTUsMSwxMiwxLDEyLDEsMTMsMSwxNSwxLDE2LDEsMTMsCisgICAgMSwxNSwxLDIxLDEsMywxLDE3LDEsMTgsNCwyMSwxLDE1LDEsMywKKyAgICAxLDI2LDEsMTE0LDE5NCwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw3MiwwLAogICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMzEsMSwwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDc0LDAsMTI0LDAsMCwKKyAgICAwLDEyNCwxLDAsMTAwLDIsMCwxMDcsOCwwLDExNCw2OCwwLDEyNCwwLDAsCiAgICAgMTAwLDMsMCwyNSwxMjUsMSwwLDEwMCw0LDAsMTI0LDAsMCwxMDcsNywwLAotICAgIDExNCw3NCwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsNSwwLDEzMSwxLDAsMTAwLAotICAgIDYsMCwyNSwxMjUsMSwwLDExMyw3NCwwLDExMCwwLDAsMTI0LDEsMCw4MywKLSAgICA0MSw3LDEyMiwxNjcsNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwzMiwxMTksMTA0LAotICAgIDk3LDExNiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTE1LAotICAgIDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsCi0gICAgMTE2LDMyLDEwMywxMTcsOTcsMTE0LDk3LDExMCwxMTYsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwKLSAgICA5OCwxMDEsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDMyLDExMSwxMTQsMzIsOTksMTExLAotICAgIDExNywxMDgsMTAwLDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDc4LDExMSwKLSAgICAxMTAsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsCi0gICAgMTAxLDExMCwxMTYsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDExNCwxMTEsCi0gICAgMTEyLDEwMSwxMTQsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE3LDExMCwxMDcsCi0gICAgMTEwLDExMSwxMTksMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCwyNTEsMCwwLDAsCi0gICAgNzgsMTE0LDU3LDAsMCwwLDExNCwyNDcsMCwwLDAsMTE0LDExNiwwLDAsMCwKLSAgICAxMTQsODQsMCwwLDAsNDEsMiwxMTQsOTMsMCwwLDAsMTE0LDMyLDAsMCwKLSAgICAwLDQxLDIsMjE4LDcsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTQsMTAzLDEsMCwKLSAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAotICAgIDIxOCwxNyw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDk1LDk1LDI0OCw4LDAsMCwxMTUsMTIsMCwwLDAsMCw3LDE1LDEsCi0gICAgMTIsMSwxMCwxLDEyLDEsMjUsMSwxMTQsMTI0LDEsMCwwLDk5LDAsMCwKLSAgICAwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDU1LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMDYsMiwwLAotICAgIDEzMSwwLDAsMTAyLDIsMCwxMjUsMCwwLDExNiwzLDAsMTE2LDQsMCwxMDIsCi0gICAgMiwwLDEyNSwxLDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsMTI1LDIsCi0gICAgMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMDMsMywwLDgzLDQxLDEsCi0gICAgMTIyLDk1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDEwOCwxMDUsMTE1LDExNiwKLSAgICAzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw2OSw5Nyw5OSwxMDQsMzIsMTA1LDExNiwxMDEsMTA5LDMyLDEwNSwxMTUsCi0gICAgMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDQ0LDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsNDEsNDYsMTAsMzIsMzIsMzIsCi0gICAgMzIsNDEsNywxMTQsNTcsMSwwLDAsMTE0LDEwNiwwLDAsMCwyMTgsMTgsMTAxLAotICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLAotICAgIDExNSwxMTQsOSwxLDAsMCwxMTQsMTM1LDAsMCwwLDExNCw4LDEsMCwwLAotICAgIDExNCwyMzMsMCwwLDAsNDEsMyw5MCwxMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCwxMTUsOTAsNiwxMTUsMTExLDExNywxMTQsOTksMTAxLDkwLDgsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDUsMCwwLDAsMTE0LDI0MSwwLDAsMCw3LDksMCwwLDExNSw4LDAsCi0gICAgMCwwLDAsNSwxOCwxLDEyLDEsMTIsMSwxMTQsMjQxLDAsMCwwLDk5LAotICAgIDUsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDUsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDIyNywwLDAsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LAotICAgIDIsMCwxMTQsMjcsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNSwKLSAgICAwLDExMCw1NCwwLDEyNCwxLDAsMTAwLDIsMCwxMDcsOSwwLDExNCw0NSwwLAotICAgIDEyNCwxLDAsMTEwLDMsMCwxMDUsMCwwLDEyNSw2LDAsMTE2LDEsMCwxMjQsCi0gICAgNiwwLDEzMSwxLDAsMTI1LDcsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LDcsCi0gICAgMCwxMjQsNCwwLDEzMSwzLDAsMTI1LDUsMCwxMjQsMywwLDExNSwyMDcsMCwKLSAgICAxMjQsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMTIyLDAsMTE2LDAsMCwxMjQsCi0gICAgMCwwLDEwNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLAotICAgIDEsMCw4MywxMjQsMCwwLDExNSwxMzIsMCwxMjQsNSwwLDgzLDExNiwzLDAsCi0gICAgMTI0LDAsMCwxMzEsMSwwLDExNiwzLDAsMTI0LDAsMCwxMDYsMiwwLDEwMCwKLSAgICAzLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMjQsMTI1LDgsMCwKLSAgICAxMTYsNCwwLDEwNiw1LDAsMTI0LDUsMCwxMDYsNiwwLDEwMCwyLDAsMTE2LAotICAgIDMsMCwxMjQsNSwwLDEwNiw2LDAsMTMxLDEsMCwxMjQsOCwwLDI0LDEzMywKLSAgICAyLDAsMjUsMjUsODMsMTEwLDE2LDAsMTE2LDcsMCwxMjQsNSwwLDEyNCwzLAotICAgIDAsMTE2LDAsMCwxMzEsMywwLDgzLDEwMCwyLDAsODMsNDEsNCw5NywyMTQsCi0gICAgMSwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwMywxMDgsCi0gICAgMTExLDk4LDk3LDEwOCwxMTUsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLAotICAgIDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA1LDExMCwxMDIsMTAxLDExNCwKLSAgICAzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDMyLDEwNSwxMTUsMzIsMTExLDk5LDk5LDExNywxMTQsMTA1LDExMCwxMDMsMzIsMTAyLDExNCwKLSAgICAxMTEsMTA5LDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwKLSAgICAzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTE1LDQ2LDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LDExMSw5OSw5NywxMDgsMTE1LDM5LDMyLAotICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDEwNSwxMDMsMTEwLDExMSwKLSAgICAxMTQsMTAxLDEwMCw0NiwzMiw4NCwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDM5LDEwMiwxMTQsCi0gICAgMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LAotICAgIDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMTUsMzIsMTE5LDEwNCw5NywxMTYsMzIsCi0gICAgMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwzMiw5NywxMTUsMzIsCi0gICAgOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsCi0gICAgMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDQwLDEwMSw0NiwxMDMsCi0gICAgNDYsMzIsOTYsOTYsMTAyLDExNCwxMTEsMTA5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDYwLDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsCi0gICAgNjIsOTYsOTYsNDEsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDgsMTAxLDExOCwxMDEsCi0gICAgMTA4LDM5LDEwLDMyLDMyLDMyLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwKLSAgICAxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLAotICAgIDExNiwxMTEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEwNSwKLSAgICAxMTAsMzIsOTcsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsCi0gICAgMTAyLDExNCwxMTEsMTA5LDMyLDQ2LDQ2LDExMiwxMDcsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDMyLDEwOSwxMTEsMTAwLDk2LDk2LDMyLDExOSwxMTEsMTE3LDEwOCwxMDAsMzIsMTA0LDk3LAotICAgIDExOCwxMDEsMzIsOTcsMzIsMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwzMiwxMTEsMTAyLDMyLAotICAgIDUwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCw4NCwwLDAsMCw3OCwxMTQsCi0gICAgMTE2LDAsMCwwLDQxLDgsMTE0LDExNiwxLDAsMCwxMTQsMTI0LDEsMCwwLAotICAgIDExNCwxMzQsMCwwLDAsMTE0LDMxLDAsMCwwLDExNCw3LDAsMCwwLDExNCwKLSAgICA3MywwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDEyMiwxLDAsMCw0MSw5LAotICAgIDExNCw2NywwLDAsMCwxMTQsMTIzLDEsMCwwLDIxOCw2LDEwOCwxMTEsOTksOTcsCi0gICAgMTA4LDExNSwxMTQsMTIxLDEsMCwwLDExNCwxMDQsMSwwLDAsMTE0LDE4MCwwLDAsCi0gICAgMCw5MCw4LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsOTUsMTE0LDEwMywxLDAsMCwKLSAgICA5MCw3LDk5LDExNywxMTYsOTUsMTExLDEwMiwxMDIsMTE0LDQsMCwwLDAsMTE0LDQsCi0gICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LDk1LDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDk1LDk1LDE4LDksMCwwLDExNSwyNiwwLDAsMCwwLDExLDEyLAotICAgIDEsMTUsMiwyNCwxLDEyLDEsMTgsMSw2LDMsMTIsMSwyMywxLDYsCi0gICAgMSw0LDQsMzUsMyw0MCwyLDExNCwxMjcsMSwwLDAsOTksMSwwLDAsCi0gICAgMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNjgsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLAotICAgIDEsMCwxMjUsMSwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw0NiwKLSAgICAwLDExNiwyLDAsMTAwLDEsMCwxMjQsMCwwLDIzLDEzMSwxLDAsMTMwLDEsCi0gICAgMCwxMTAsMCwwLDExNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsCi0gICAgMTI0LDIsMCwxMDYsNCwwLDEzMSwwLDAsODMsNDEsMiw3OCwxMjIsMjUsMTEwLAorICAgIDExNCw2OCwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsNSwwLDEzMSwxLDAsMTAwLAorICAgIDYsMCwyNSwxMjUsMSwwLDEyNCwxLDAsODMsNDEsNywxMjIsMTY3LDY3LDk3LAorICAgIDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMzIsMTE5LDEwNCw5NywxMTYsMzIsOTUsOTUsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLAorICAgIDk4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAorICAgIDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDMsMTE3LDk3LDExNCwKKyAgICA5NywxMTAsMTE2LDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDEwMCwxMDEsMTAyLAorICAgIDEwNSwxMTAsMTAxLDEwMCwzMiwxMTEsMTE0LDMyLDk5LDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsCisgICAgMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiw3OCwxMTEsMTEwLDEwMSwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMTYsMTExLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LDMyLDExNiwxMDQsCisgICAgOTcsMTE2LDMyLDEwNSwxMTYsMTE1LDMyLDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDMyLDExOCw5NywKKyAgICAxMDgsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNywxMTAsMTA3LDExMCwxMTEsMTE5LDExMCw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMTQsMTM0LDAsMCwwLDc4LDExNCwxLDAsMCwwLAorICAgIDExNCwxMzEsMCwwLDAsMTE0LDEyMSwwLDAsMCwxMTQsMzMsMCwwLDAsNDEsCisgICAgMiwxMTQsNDIsMCwwLDAsMTE0LDEyMiwwLDAsMCw0MSwyLDIxOCw3LDEwMywKKyAgICAxMDgsMTExLDk4LDk3LDEwOCwxMTUsMTE0LDE2OSwwLDAsMCwxMTQsMTAsMCwwLDAsCisgICAgMTE0LDEwLDAsMCwwLDExNCwxMSwwLDAsMCwyMTgsMTcsOTUsOTksOTcsMTA4LAorICAgIDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSw0LDQsMCwKKyAgICAwLDExNSwxMiwwLDAsMCwwLDcsMTUsMSwxMiwxLDEwLDEsMTIsMSwKKyAgICAxOSwxLDExNCwxOTYsMCwwLDAsOTksNSwwLDAsMCwwLDAsMCwwLAorICAgIDksMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMjI3LDAsMCwKKyAgICAwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyNywwLDExNiwwLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDEyNSw1LDAsMTEwLDU0LDAsMTI0LDEsMCwxMDAsCisgICAgMiwwLDEwNyw5LDAsMTE0LDQ1LDAsMTI0LDEsMCwxMTAsMywwLDEwNSwwLAorICAgIDAsMTI1LDYsMCwxMTYsMSwwLDEyNCw2LDAsMTMxLDEsMCwxMjUsNywwLAorICAgIDExNiwwLDAsMTI0LDAsMCwxMjQsNywwLDEyNCw0LDAsMTMxLDMsMCwxMjUsCisgICAgNSwwLDEyNCwzLDAsMTE1LDIwNywwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwKKyAgICAwLDExNCwxMjIsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDIsMCwxMDAsMywwLAorICAgIDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsMSwwLDgzLDEyNCwwLDAsMTE1LDEzMiwKKyAgICAwLDEyNCw1LDAsODMsMTE2LDMsMCwxMjQsMCwwLDEzMSwxLDAsMTE2LDMsCisgICAgMCwxMjQsMCwwLDEwNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEwMCwxLDAsCisgICAgMjUsMTMxLDEsMCwyNCwxMjUsOCwwLDExNiw0LDAsMTA2LDUsMCwxMjQsNSwKKyAgICAwLDEwNiw2LDAsMTAwLDIsMCwxMTYsMywwLDEyNCw1LDAsMTA2LDYsMCwKKyAgICAxMzEsMSwwLDEyNCw4LDAsMjQsMTMzLDIsMCwyNSwyNSw4MywxMTAsMTYsMCwKKyAgICAxMTYsNywwLDEyNCw1LDAsMTI0LDMsMCwxMTYsMCwwLDEzMSwzLDAsODMsCisgICAgMTAwLDIsMCw4Myw0MSw0LDk3LDIxNSwxLDAsMCw3MywxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDg0LDEwNCwxMDEsMzIsMzksMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwzOSwzMiw5NywKKyAgICAxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsCisgICAgMTE2LDExMSwzMiwxMDUsMTEwLDEwMiwxMDEsMTE0LDMyLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwxMTEsOTksOTksCisgICAgMTE3LDExNCwxMTQsMTA1LDExMCwxMDMsMzIsMTAyLDExNCwxMTEsMTA5LDEwLDMyLDMyLDMyLDMyLAorICAgIDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LAorICAgIDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE1LDQ2LDMyLDg0LDEwNCwxMDEsMzIsCisgICAgMzksMTA4LDExMSw5OSw5NywxMDgsMTE1LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLAorICAgIDExNiwzMiwxMDUsMTE1LDMyLDEwNSwxMDMsMTEwLDExMSwxMTQsMTAxLDEwMCw0NiwzMiw4NCwxMDQsCisgICAgMTAxLDEwLDMyLDMyLDMyLDMyLDM5LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMzksCisgICAgMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsCisgICAgMTA1LDEwMSwxMTUsMzIsMTE5LDEwNCw5NywxMTYsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsCisgICAgMTAxLDEyMCwxMDUsMTE1LDExNiwzMiw5NywxMTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywKKyAgICAxMTYsMTAxLDExNSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwxMDEsMTAwLDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsMTAyLDExNCwxMTEsCisgICAgMTA5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLAorICAgIDYwLDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsNjIsOTYsOTYsNDEsNDYsMzIsMzIsCisgICAgODQsMTA0LDEwMSwzMiwzOSwxMDgsMTAxLDExOCwxMDEsMTA4LDM5LDEwLDMyLDMyLDMyLDMyLAorICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsCisgICAgMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLAorICAgIDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEwNSwxMTAsMzIsOTcsMzIsMTE0LDEwMSwxMDgsCisgICAgOTcsMTE2LDEwNSwxMTgsMTAxLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsMTAyLDExNCwxMTEsMTA5LDMyLDQ2LDQ2LAorICAgIDExMiwxMDcsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSwxMTEsMTAwLDk2LDk2LAorICAgIDMyLDExOSwxMTEsMTE3LDEwOCwxMDAsMzIsMTA0LDk3LDExOCwxMDEsMzIsOTcsMzIsMzksMTA4LAorICAgIDEwMSwxMTgsMTAxLDEwOCwzOSwzMiwxMTEsMTAyLDMyLDUwLDQxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDExNCwzMywwLDAsMCw3OCwxMTQsMTIxLDAsMCwwLDQxLDgsMTE0LAorICAgIDE4NiwwLDAsMCwxMTQsMTk2LDAsMCwwLDIxOCw5LDExMiw5NywxMTQsMTE2LDEwNSwKKyAgICAxMTYsMTA1LDExMSwxMTAsMTE0LDE2NywwLDAsMCwxMTQsMTQsMCwwLDAsMTE0LDIxLAorICAgIDAsMCwwLDExNCwxLDAsMCwwLDExNCwxOTQsMCwwLDAsNDEsOSwxMTQsCisgICAgMTUsMCwwLDAsMTE0LDE5NSwwLDAsMCwyMTgsNiwxMDgsMTExLDk5LDk3LDEwOCwKKyAgICAxMTUsMTE0LDE5MiwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCw4OSwwLDAsMCwKKyAgICA5MCw4LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsOTUsMTE0LDE2OSwwLDAsMCw5MCwKKyAgICA3LDk5LDExNywxMTYsOTUsMTExLDEwMiwxMDIsMTE0LDEwLDAsMCwwLDExNCwxMCwwLAorICAgIDAsMCwxMTQsMTEsMCwwLDAsMjE4LDEwLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDk1LDk1LDE5LDQsMCwwLDExNSwyNiwwLDAsMCwwLDExLDEyLDEsCisgICAgMTUsMiwyNCwxLDEyLDEsMTgsMSw2LDMsMTIsMSwyMywxLDYsMSwKKyAgICA0LDQsMzUsMyw0MCwyLDExNCwxOTksMCwwLDAsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsNTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLDEsCisgICAgMCwxMjUsMSwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw0MywwLAorICAgIDExNiwyLDAsMTAwLDEsMCwxMjQsMCwwLDIzLDEzMSwxLDAsMTMwLDEsMCwKKyAgICAxMTYsMywwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwyNSwxMTAsCiAgICAgMTExLDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiw0MSw1LDExNCwxMSwxLDAsMCwxMTQsCi0gICAgMTQsMSwwLDAsMTE0LDE1NCwwLDAsMCwxMTQsMTc1LDAsMCwwLDExNCw3LAotICAgIDEsMCwwLDQxLDMsMTE0LDY3LDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LAotICAgIDE3OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKLSAgICAwLDAsMCwyMTgsMTgsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTAyLDExNCwKLSAgICAxMTEsMTA5LDk1LDExMCw5NywxMDksMTAxLDUzLDksMCwwLDExNSwxMCwwLDAsMCwKLSAgICAwLDEsMTUsMSwxMiwxLDE5LDEsMTIsMSwxMTQsMTI4LDEsMCwwLDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwxOSwwLDAsMCwxMiwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMjMyLDIsMCwwLDEyNCwxLDAsOTcsMCwwLDEyNCwKLSAgICAwLDAsOTcsMSwwLDExNiwxLDAsMTA2LDIsMCwxMDYsMywwLDExNCwzMywKLSAgICAwLDExNiw0LDAsOTcsNSwwLDExMCw2LDAsMTE2LDYsMCw5Nyw1LDAsCi0gICAgMTE2LDcsMCwxMTYsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjAsMTM4LDAsMTE2LAotICAgIDEsMCwxMDYsOCwwLDEwNiw5LDAsMTMxLDAsMCw2OCw5MywxMjEsMCw5MiwKLSAgICAyLDAsMTI1LDMsMCwxMjUsNCwwLDExNiwxMCwwLDEyNCw0LDAsMTI0LDIsCi0gICAgMCwxMzEsMiwwLDExNCw2NywwLDEyNCwzLDAsMTE2LDEsMCwxMDYsMTEsMCwKLSAgICAxMDcsNiwwLDExNCwxMTgsMCwxMTYsMTIsMCwxMjUsNSwwLDExMCwyNywwLDExNiwKLSAgICAwLDAsMTA2LDEzLDAsMTI0LDMsMCwxMzEsMSwwLDExNCw2NywwLDExNiwxNCwKLSAgICAwLDEyNSw1LDAsMTEwLDMsMCwxMTMsNjcsMCwxMTYsMTUsMCwxMjQsNCwwLAotICAgIDEyNCw1LDAsMTMxLDIsMCwxMjUsNiwwLDExNiwxNiwwLDEyNCw2LDAsMTMxLAotICAgIDEsMCwxMjUsNywwLDEyNCw3LDAsMTA2LDE3LDAsMTI0LDQsMCwxMzEsMSwKLSAgICAwLDEsMTEzLDY3LDAsMTEzLDY3LDAsODcsMTE2LDEsMCwxMDYsOCwwLDExNiwKLSAgICAxOCwwLDI1LDEyNSw4LDAsMTIwLDczLDAsMTAwLDI2LDAsNjgsOTMsNjUsMCwKLSAgICAxMjUsOSwwLDEyNCw5LDAsMTE2LDEsMCwxMDYsOCwwLDEwNyw3LDAsMTE0LAotICAgIDI0OCwwLDExNiwxOSwwLDEyNCw5LDAsMTMxLDEsMCwxMjUsMTAsMCwxMTAsMTMsCi0gICAgMCwxMTYsMSwwLDEwNiw4LDAsMTI0LDksMCwyNSwxMjUsMTAsMCwxMTYsMjAsCi0gICAgMCwxMjQsOCwwLDEyNCw5LDAsMTI0LDEwLDAsMTMxLDMsMCwxLDExMywyMTIsCi0gICAgMCw4NywxMDAsNSwwLDEwMCw2LDAsMTAzLDEsMCwxMDIsMiwwLDEwMCw3LAotICAgIDAsMTAwLDgsMCwxMDAsNiwwLDEwMywyLDAsMTAyLDIsMCwxMDIsMiwwLAotICAgIDEyNSwxMSwwLDEyMCwxNDYsMCwxMjQsMTEsMCw2OCw5MywxMjYsMCw5MiwyLDAsCi0gICAgMTI1LDEyLDAsMTI1LDEzLDAsMTE2LDIxLDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsCi0gICAgMCwwLDEyNCwxMywwLDY4LDEzMSwxLDAsMTMxLDEsMCwxMTUsMTA4LDEsMTE2LAotICAgIDIyLDAsMTMwLDEsMCwxMjQsMTMsMCwxMDAsMTEsMCwyNSwxMjUsMTQsMCwxMjQsCi0gICAgMTIsMCwxMTYsMSwwLDEwNiw4LDAsMTA3LDYsMCwxMTQsMTUwLDEsMTE2LDEsCi0gICAgMCwxMDYsOCwwLDEyNCwxMiwwLDI1LDEyNSwxNSwwLDgwLDExMyw2NSwxLDEyMSwKLSAgICAxNywwLDExNiwxOSwwLDEyNCwxMiwwLDEzMSwxLDAsMTI1LDE1LDAsODAsODcsCi0gICAgMTEzLDY1LDEsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMTkwLDEsMSwxLDEsCi0gICAgMTE5LDY1LDEsODksMTEzLDY1LDEsODgsMTEzLDY1LDEsODcsMTE2LDIzLDAsMTAwLAotICAgIDEyLDAsMTMxLDEsMCwxMzAsMSwwLDExNiwyMCwwLDEyNCw4LDAsMTAwLDEzLAotICAgIDAsMTI0LDE1LDAsMTMxLDMsMCwxLDExNiwyMCwwLDEyNCw4LDAsMTAwLDE0LAotICAgIDAsMTI0LDE0LDAsMTMxLDMsMCwxLDExNiwyMCwwLDEyNCw4LDAsMTAwLDE1LAotICAgIDAsMTAwLDE2LDAsMTA2LDI0LDAsMTI0LDEzLDAsMTMxLDEsMCwxMzEsMywwLAotICAgIDEsMTIxLDE2LDAsMTE2LDE5LDAsMTAwLDE3LDAsMTMxLDEsMCwxMjUsMTYsMCwKLSAgICA4NywxMTAsMjQsMCw0LDExNiwyMywwLDEwNywxMCwwLDExNCw1MCwyLDEsMSwKLSAgICAxLDEwMCwxOCwwLDEyNSwxNiwwLDg5LDExMCwxLDAsODgsMTE2LDIwLDAsMTI0LAotICAgIDgsMCwxMDAsMTcsMCwxMjQsMTYsMCwxMzEsMywwLDEsMTE2LDE5LDAsMTAwLAotICAgIDE5LDAsMTMxLDEsMCwxMjUsMTcsMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxOSwKLSAgICAwLDEyNCwxNywwLDEzMSwzLDAsMSwxMjQsMTIsMCwxMDAsNywwLDEwNywyLAotICAgIDAsMTE0LDEzOCwyLDExNiwxOSwwLDEwMCwyMCwwLDEzMSwxLDAsMTI1LDE4LDAsCi0gICAgMTE2LDIwLDAsMTI0LDgsMCwxMDAsMjEsMCwxMjQsMTgsMCwxMzEsMywwLDEsCi0gICAgMTEwLDAsMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwyMiwwLDExNiwyNSwwLDEzMSwKLSAgICAwLDAsMTMxLDMsMCwxLDExNiwyNiwwLDEwNiwyNywwLDExNiwwLDAsMTA2LAotICAgIDI4LDAsMTMxLDAsMCwxMzEsMSwwLDEsMTI0LDEyLDAsMTAwLDcsMCwxMDcsCi0gICAgMiwwLDExNCwyMjgsMiwxMTYsMjksMCwxMDYsMzAsMCwxMDAsMjMsMCwxMzEsMSwKLSAgICAwLDEsMTAwLDI0LDAsMTE2LDI2LDAsMTA3LDYsMCwxMTQsMjI4LDIsMTAwLDI1LAotICAgIDAsMTE2LDMxLDAsOTUsMzIsMCwxMTMsMjI4LDIsMTEwLDAsMCwxMDAsMTgsMCwKLSAgICA4Myw0MSwyNywxMjIsMjUwLDgzLDEwMSwxMTYsMTE3LDExMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDMyLDk4LDEyMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLAotICAgIDEwMywzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LAotICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMDUsMTEwLAotICAgIDEwNiwxMDEsOTksMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDEwOSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LAotICAgIDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDY1LDExNSwzMiwxMTUsMTIxLDExNSwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsCi0gICAgMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNSwzMiw5Nyw5OSw5OSwxMDEsMTE1LDExNSwzMiw5NywxMTAsMTAwLDMyLDk1LDEwNSwxMDksCi0gICAgMTEyLDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDgsCi0gICAgMTExLDk3LDEwMCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMTEsMTE1LDEwMSwzMiwKLSAgICAxMTYsMTE5LDExMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LAotICAgIDMyLDk4LDEwMSwzMiwxMDEsMTIwLDExMiwxMDgsMTA1LDk5LDEwNSwxMTYsMTA4LDEyMSwzMiwxMTIsCi0gICAgOTcsMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LAotICAgIDQ5LDAsMCwwLDExNCwxNjcsMCwwLDAsMjE4LDgsOTgsMTE3LDEwNSwxMDgsMTE2LAotICAgIDEwNSwxMTAsMTE1LDExNCwxOTIsMCwwLDAsOTAsNSwxMTIsMTExLDExNSwxMDUsMTIwLDI1MCwKLSAgICAxLDQ3LDIxOCwyLDExMCwxMTYsMjUwLDEsOTIsOTksMSwwLDAsMCwwLDAsCi0gICAgMCwwLDIsMCwwLDAsMywwLDAsMCwxMTUsMCwwLDAsMTE1LDMzLAotICAgIDAsMCwwLDEyNCwwLDAsOTMsMjMsMCwxMjUsMSwwLDExNiwwLDAsMTI0LAotICAgIDEsMCwxMzEsMSwwLDEwMCwwLDAsMTA3LDIsMCw4NiwxLDExMywzLDAsCi0gICAgMTAwLDEsMCw4Myw0MSwyLDExNCwyOSwwLDAsMCw3OCw0MSwxLDExNCwzMSwKLSAgICAwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwxMTQsMTI5LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NywKLSAgICAwLDAsMCwxMDUsOSwwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiwyNSwKLSAgICA5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwKLSAgICA2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE0LDg0LDAsMCwwLDEyMiwzMCwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwxMTEsMTE0LDMyLDExMCwxMTYsMTE0LDMsCi0gICAgMCwwLDAsMTE0LDI1LDAsMCwwLDExNCwyMSwwLDAsMCwxMTQsMzAsMCwKLSAgICAwLDAsMTE0LDg1LDAsMCwwLDc4LDExNCwxMTEsMCwwLDAsOTAsNiwxMTksCi0gICAgMTA1LDExMCwxMTQsMTAxLDEwMywxMTQsMjQsMSwwLDAsMTE0LDYsMCwwLDAsMTIyLAotICAgIDQsNDYsMTEyLDEyMSwxMTksMTIyLDYsOTUsMTAwLDQ2LDExMiwxMjEsMTAwLDg0LDQxLDQsCi0gICAgMTIyLDMsOTUsMTA1LDExMSwxMjIsOSw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsCi0gICAgMTIyLDgsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE1LDEyMiw3LDEwOSw5NywxMTQsMTE1LAotICAgIDEwNCw5NywxMDgsNDEsMzMsMTE0LDEwNiwwLDAsMCwxMTQsNywwLDAsMCwxMTQsCi0gICAgMTE3LDAsMCwwLDExNCwxMTgsMCwwLDAsMTE0LDEyMCwwLDAsMCwxMTQsMjMzLAotICAgIDAsMCwwLDExNCwxMTksMCwwLDAsMTE0LDY2LDAsMCwwLDExNCw3MywwLAotICAgIDAsMCwyMTgsNSwxMDUsMTE2LDEwMSwxMDksMTE1LDExNCwxOTMsMCwwLDAsMTE0LDE1OCwKLSAgICAwLDAsMCwxMTQsMTEsMSwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMjAsMSwKLSAgICAwLDAsMTE0LDI0OCwwLDAsMCwxMTQsMTc1LDAsMCwwLDExNCwyNTUsMCwwLAotICAgIDAsMTE0LDU3LDAsMCwwLDExNCwxMjgsMSwwLDAsMTE0LDYxLDAsMCwwLAotICAgIDIxOCwzLDk3LDEwOCwxMDgsMTE0LDEwMCwwLDAsMCwxMTQsMTU0LDAsMCwwLDExNCwKLSAgICAyNiwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDYwLDEsMCwwLDExNCwxOTgsCi0gICAgMCwwLDAsMTE0LDEyNSwxLDAsMCwxMTQsMTM1LDAsMCwwLDExNCwyMjQsMCwKLSAgICAwLDAsMTE0LDIzLDEsMCwwLDExNCwyNywxLDAsMCw0MSwxOSwyMTgsMTAsCi0gICAgMTE1LDEyMSwxMTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjE4LDExLDk1LDEwNSwxMDksMTEyLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDExLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDExNiwxMjEsMTEyLDEwMSwxMTQsNjcsMCwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsMTcwLAotICAgIDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDE3OSwwLDAsMCw5MCwxMSwxMTUsCi0gICAgMTAxLDEwOCwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTIsOTgsMTE3LDEwNSwxMDgsCi0gICAgMTE2LDEwNSwxMTAsOTUsMTEwLDk3LDEwOSwxMDEsOTAsMTQsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKLSAgICAxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTAsMTExLDExNSw5NSwxMDAsMTAxLDExNiwKLSAgICA5NywxMDUsMTA4LDExNSw5MCwxMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTEsMTE1LAotICAgIDExNCwyMSwwLDAsMCwxMTQsMjUsMCwwLDAsOTAsOSwxMTEsMTE1LDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDkwLDEzLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTAsMTQsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMjE4LDYsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw2MSw5LDAsMCwxMTUsMTA4LAotICAgIDAsMCwwLDAsOSw2LDEsNiwyLDEyLDEsOSwyLDYsMywxMiwKLSAgICAxLDI4LDEsMTUsMSwxNSwxLDksMSwxNSwxLDksMiwzLDEsMTUsCi0gICAgMSwxMiwxLDIwLDMsMTMsMSwxMywxLDE1LDEsMTUsMiwxMywxLDIwLAotICAgIDMsMzMsMSwxOSwyLDMxLDEsMTAsMSwxNSwxLDEzLDEsNCwyLDMsCi0gICAgMSwxMiwxLDUsMSwxMywxLDEyLDIsMTIsMSwxNiwxLDE2LDEsMjUsCi0gICAgMywzLDEsMTYsMSwxMywyLDExLDEsMTYsMywxMiwxLDE2LDMsMTIsCi0gICAgMSwxMiwxLDE5LDMsMTksMSwxOSwxLDEyLDEsMTMsMSwxMiwxLDExNCwKLSAgICAxMzcsMSwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLAotICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTM2LDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMSwxMTYsMSwwLDEzMSwwLAotICAgIDAsMTI1LDIsMCwxMTYsMiwwLDEwNiwzLDAsMTA2LDQsMCwxMTYsNSwwLAotICAgIDEwNiw2LDAsMTI0LDIsMCwxNDAsMCwwLDEwMywxLDAsMTMxLDEsMCwxLAotICAgIDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiw5LDAsMTMxLDEsMCwxLAotICAgIDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxMCwwLDEzMSwxLDAsMSwKLSAgICAxMTYsMTEsMCwxMDYsMTIsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDExNiwwLDExNiwKLSAgICAyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxMywwLDEzMSwxLDAsMSwxMTAsCi0gICAgMCwwLDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxNCwwLDEzMSwxLAotICAgIDAsMSwxMDAsMiwwLDgzLDQxLDMsMTIyLDUwLDczLDExMCwxMTUsMTE2LDk3LDEwOCwKLSAgICAxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5NywxMTUsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsCi0gICAgMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMTE0LDEzMSwxLDAsCi0gICAgMCw3OCw0MSwxNSwxMTQsMTM3LDEsMCwwLDExNCwyNDEsMCwwLDAsMTE0LDcsCi0gICAgMCwwLDAsMTE0LDc5LDEsMCwwLDExNCwxOTgsMCwwLDAsMTE0LDg3LDEsCi0gICAgMCwwLDExNCwxMDEsMSwwLDAsMTE0LDEwNywxLDAsMCwxMTQsMjI0LDAsMCwKLSAgICAwLDExNCwxMSwxLDAsMCwxMTQsMjAsMSwwLDAsMTE0LDMsMCwwLDAsCi0gICAgMTE0LDU3LDAsMCwwLDExNCwyMywxLDAsMCwxMTQsNzQsMSwwLDAsNDEsCi0gICAgMywxMTQsMTM1LDEsMCwwLDExNCwxMzYsMSwwLDAsOTAsMTcsMTE1LDExNywxMTIsCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDQsCi0gICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsCi0gICAgMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTQ4LDksMCwwLDExNSwxNiwwLDAsMCwKLSAgICAwLDIsMTMsMSw5LDEsMjgsMSwxNiwxLDE2LDEsMTUsMSwxOSwxLAotICAgIDExNCwxMzgsMSwwLDAsNDEsMywxMjIsMywxMTksMTA1LDExMCwxMTQsMSwwLDAsCi0gICAgMCwxMTQsMiwwLDAsMCw0MSw5MiwxMTQsNTksMCwwLDAsMTE0LDEwLDAsCi0gICAgMCwwLDExNCwxMSwwLDAsMCwxMTQsMTcsMCwwLDAsMTE0LDE5LDAsMCwKLSAgICAwLDExNCwyOCwwLDAsMCwxMTQsMzgsMCwwLDAsMTE0LDM5LDAsMCwwLAotICAgIDExNCw0MywwLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDQ2LDAsMCwwLDExNCwKLSAgICA1NSwwLDAsMCwxMTQsNjUsMCwwLDAsMTE0LDY4LDAsMCwwLDExNCw2NiwKLSAgICAwLDAsMCwyMTgsOCw5NSw5NSw5OSwxMTEsMTAwLDEwMSw5NSw5NSwxMTQsMTk0LDAsCi0gICAgMCwwLDExNCw2OSwwLDAsMCwxMTQsMTA5LDAsMCwwLDExNCw5MiwwLDAsCi0gICAgMCwxMTQsOTksMCwwLDAsMTE0LDgyLDAsMCwwLDExNCw4MywwLDAsMCwKLSAgICAxMTQsMTAyLDAsMCwwLDExNCwxMDMsMCwwLDAsMTE0LDEwNSwwLDAsMCwxMTQsCi0gICAgMTEyLDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDE1LDAsMCwwLDExNCwxODYsCi0gICAgMCwwLDAsMTE0LDE0LDAsMCwwLDExNCwxOCwwLDAsMCw5MCwxNyw5NSwKLSAgICA4Miw2NSw4Nyw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwKLSAgICAxMTQsMTI0LDAsMCwwLDExNCwxMzUsMCwwLDAsMTE0LDExOSwwLDAsMCwxMTQsCi0gICAgMTIwLDAsMCwwLDExNCwxMzIsMCwwLDAsMTE0LDEzNiwwLDAsMCwxMTQsMTQzLAotICAgIDAsMCwwLDExNCwxNDUsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsMTU3LDAsCi0gICAgMCwwLDExNCwxNjIsMCwwLDAsMTE0LDE2NSwwLDAsMCwxMTQsMTczLDAsMCwKLSAgICAwLDExNCwxODEsMCwwLDAsMTE0LDE5MSwwLDAsMCwxMTQsMTk2LDAsMCwwLAotICAgIDExNCwxOTksMCwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsMjEyLDAsMCwwLDExNCwKLSAgICAyMTMsMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMTc0LDAsMCwwLDIxOCw2LAotICAgIDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTQsMjQyLDAsMCwwLDExNCwyNDAsMCwwLDAsCi0gICAgMTE0LDI0OCwwLDAsMCwxMTQsMTc1LDAsMCwwLDExNCwxMCwxLDAsMCwxMTQsCi0gICAgMTEsMSwwLDAsMTE0LDIwLDEsMCwwLDExNCwyMywxLDAsMCwxMTQsMzMsCi0gICAgMSwwLDAsMTE0LDM0LDEsMCwwLDExNCw0OSwxLDAsMCwxMTQsOSwxLAotICAgIDAsMCwxMTQsOCwxLDAsMCwxMTQsNjAsMSwwLDAsMTE0LDU3LDEsMCwKLSAgICAwLDExNCw2MSwxLDAsMCwxMTQsMjUyLDAsMCwwLDExNCw3NCwxLDAsMCwKLSAgICAxMTQsODcsMSwwLDAsMTE0LDEwMiwxLDAsMCwxMTQsMTA1LDEsMCwwLDExNCwKLSAgICAxMDYsMSwwLDAsMTE0LDEwOCwxLDAsMCwxMTQsMTExLDEsMCwwLDExNCwxMjAsCi0gICAgMSwwLDAsMTE0LDExMiwxLDAsMCwxMTQsMTE0LDEsMCwwLDExNCwxMTUsMSwKLSAgICAwLDAsMTE0LDExNiwxLDAsMCwxMTQsMTIyLDEsMCwwLDExNCwxMjQsMSwwLAotICAgIDAsMTE0LDI0MSwwLDAsMCwxMTQsMTI3LDEsMCwwLDExNCwxMjgsMSwwLDAsCi0gICAgMTE0LDEzNywxLDAsMCwxMTQsMTM4LDEsMCwwLDExNCw0LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw4LAotICAgIDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDYyLDgsMCwwLDAsMTE1LDE3MCwwLDAsCi0gICAgMCw2LDE3LDYsMywxMiwxMiwxMiw1LDEyLDUsMTIsNiwxMiwxMiwxMiwKLSAgICAxMCwxMiw5LDEyLDUsMTIsNywxNSwyMiwxMiw4LDEyLDQsMTUsNCwxOSwKLSAgICAyMCw2LDIsNiwzLDIyLDQsMTksNjgsMTksMjEsMTksMTksMTIsMTksMTIsCi0gICAgMjAsMTIsMTE0LDIyLDEsMTgsMiw2LDIsOSwyLDksMSw5LDIsMTUsCi0gICAgMjcsMTIsMjMsMTIsMTksMTIsMTIsMTgsOCwxMiwxOCwxMiwxMSwxMiwxMSwxMiwKLSAgICAxNywxMiwxNiwyMSw1NSwyMSwxMiwxOCwxMCwxMiwxNCwxMiwzNiwxOSwyNywxOSwKLSAgICAxMDYsMjQsMjIsOSwzLDEyLDEsMTUsNjMsMTgsNDUsMTksMjMwLDE1LDI1LDE5LAotICAgIDcwLDE5LDcxLDE5LDYzLDE5LDI0LDIyLDExMCwxOSw0MSwyNSw0MywyNSwxNiw2LAotICAgIDMsMTksNTcsMTksNTcsMTksMzgsMTksMTI5LDE5LDE0NiwxOSwxMywxMiw5LDEyLAotICAgIDksMTUsNDAsMTIsMTcsNiwxLDEwLDIsMTIsMjcsMTIsNiwxOCwyNCwxMiwKLSAgICAzMiwxMiwxNSwxMiwxMSwyNCwzNSwxMiw4LDEyLDg3LAorICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsNDEsNCwxMTQsMTUwLDAsMCwwLDExNCwKKyAgICAxNTQsMCwwLDAsMTE0LDc3LDAsMCwwLDExNCwxNDksMCwwLDAsNDEsMiwKKyAgICAxMTQsMTUsMCwwLDAsMTE0LDg4LDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsCisgICAgMTAsMCwwLDAsMTE0LDExLDAsMCwwLDIxOCwxOCw5NSw5OCwxMTcsMTA1LDEwOCwKKyAgICAxMTYsMTA1LDExMCw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTEwLDk3LDEwOSwxMDEsNTQsNCwwLAorICAgIDAsMTE1LDgsMCwwLDAsMCwxLDE1LDEsMTIsMSwxNiwxLDExNCwyMDAsCisgICAgMCwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLAorICAgIDEyLDAsMCwwLDY3LDAsMCwwLDExNSw3NCwxLDAsMCwxMjQsMSwwLAorICAgIDk3LDAsMCwxMjQsMCwwLDk3LDEsMCwxMTYsMiwwLDExNiwxLDAsMTMxLAorICAgIDEsMCwxMjUsMiwwLDEyMCwxMjMsMCwxMTYsMSwwLDEwNiwzLDAsMTA2LDQsCisgICAgMCwxMzEsMCwwLDY4LDkzLDEwNiwwLDkyLDIsMCwxMjUsMywwLDEyNSw0LAorICAgIDAsMTE2LDUsMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsNDAsMCwKKyAgICAxMjQsMywwLDExNiwxLDAsMTA2LDYsMCwxMDcsNiwwLDExNCw5MSwwLDExNiwKKyAgICA3LDAsMTI1LDUsMCwxMTAsMjcsMCwxMTYsMCwwLDEwNiw4LDAsMTI0LDMsCisgICAgMCwxMzEsMSwwLDExNCw0MCwwLDExNiw5LDAsMTI1LDUsMCwxMTAsMywwLAorICAgIDExMyw0MCwwLDExNiwxMCwwLDEyNCw0LDAsMTI0LDUsMCwxMzEsMiwwLDEyNSwKKyAgICA2LDAsMTE2LDExLDAsMTI0LDYsMCwxMjQsNCwwLDEzMSwyLDAsMSwxMTMsCisgICAgNDAsMCw4NywxMTYsMSwwLDEwNiwzLDAsMTE2LDEyLDAsMjUsMTI1LDcsMCwKKyAgICAxMjAsNzMsMCwxMDAsNSwwLDY4LDkzLDY1LDAsMTI1LDgsMCwxMjQsOCwwLAorICAgIDExNiwxLDAsMTA2LDMsMCwxMDcsNywwLDExNCwyMDYsMCwxMTYsMTMsMCwxMjQsCisgICAgOCwwLDEzMSwxLDAsMTI1LDksMCwxMTAsMTMsMCwxMTYsMSwwLDEwNiwzLAorICAgIDAsMTI0LDgsMCwyNSwxMjUsOSwwLDExNiwxNCwwLDEyNCw3LDAsMTI0LDgsCisgICAgMCwxMjQsOSwwLDEzMSwzLDAsMSwxMTMsMTcwLDAsODcsMTIxLDE2LDAsMTE2LAorICAgIDEzLDAsMTAwLDIsMCwxMzEsMSwwLDEyNSwxMCwwLDg3LDExMCwyNCwwLDQsCisgICAgMTE2LDE1LDAsMTA3LDEwLDAsMTE0LDI1LDEsMSwxLDEsMTAwLDMsMCwxMjUsCisgICAgMTAsMCw4OSwxMTAsMSwwLDg4LDExNiwxNCwwLDEyNCw3LDAsMTAwLDIsMCwKKyAgICAxMjQsMTAsMCwxMzEsMywwLDEsMTE2LDEzLDAsMTAwLDQsMCwxMzEsMSwwLAorICAgIDEyNSwxMSwwLDExNiwxNCwwLDEyNCw3LDAsMTAwLDQsMCwxMjQsMTEsMCwxMzEsCisgICAgMywwLDEsMTAwLDMsMCw4Myw0MSw2LDEyMiwyNTAsODMsMTAxLDExNiwxMTcsMTEyLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTgsMTIxLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDk4LAorICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwKKyAgICA5NywxMTAsMTAwLDMyLDEwNSwxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwKKyAgICAxMDEsMTA5LDEwLDMyLDMyLDMyLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDMsMTA4LDExMSw5OCw5NywxMDgsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsMTE1LDMyLDExNSwxMjEsMTE1LDMyLDEwNSwxMTUsCisgICAgMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTE1LDEyMSwxMTUsNDYsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDk5LDk5LDEwMSwxMTUsMTE1LDMyLDk3LAorICAgIDExMCwxMDAsMzIsOTUsMTA1LDEwOSwxMTIsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAorICAgIDEwMCwzMiwxMTYsMTExLDMyLDEwOCwxMTEsOTcsMTAwLDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwKKyAgICAxMDUsMTEwLDEwLDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NCwzMiwKKyAgICAxMTYsMTA0LDExMSwxMTUsMTAxLDMyLDExNiwxMTksMTExLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDEwMSwxMjAsMTEyLDEwOCwxMDUsOTksCisgICAgMTA1LDExNiwxMDgsMTIxLDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMTQsMTQxLDAsMCwwLDExNCwzNCwwLDAsMCw3OCwKKyAgICAxMTQsNjIsMCwwLDAsNDEsMSwxMjIsOSw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLAorICAgIDEwMywxMTUsNDEsMTYsMTE0LDU3LDAsMCwwLDExNCwxNCwwLDAsMCwxMTQsMTMsCisgICAgMCwwLDAsMTE0LDIxLDAsMCwwLDIxOCw1LDEwNSwxMTYsMTAxLDEwOSwxMTUsMTE0LAorICAgIDE3NywwLDAsMCwxMTQsNzYsMCwwLDAsMTE0LDE1MCwwLDAsMCwxMTQsODIsCisgICAgMCwwLDAsMTE0LDE2MCwwLDAsMCwxMTQsMTMyLDAsMCwwLDExNCwxMzcsMCwKKyAgICAwLDAsMTE0LDEsMCwwLDAsMTE0LDIwMCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsNzcsMCwwLDAsNDEsMTIsMjE4LDEwLDExNSwxMjEsMTE1LDk1LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDIxOCwxMSw5NSwxMDUsMTA5LDExMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw5MCwxMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE0LDE1LAorICAgIDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsOTksMCwwLDAsMTE0LDg4LDAsCisgICAgMCwwLDkwLDExLDExNSwxMDEsMTA4LDEwMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwKKyAgICAxMiw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSw5MCwxNCw5OCwKKyAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMywxMTYsCisgICAgMTA0LDExNCwxMDEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDE0LDExOSwxMDEsCisgICAgOTcsMTA3LDExNCwxMDEsMTAyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCwxMCwwLDAsCisgICAgMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsMCwwLDIxOCw2LDk1LDExNSwxMDEsCisgICAgMTE2LDExNywxMTIsNjEsNCwwLDAsMTE1LDUwLDAsMCwwLDAsOSw2LDEsCisgICAgNiwzLDEyLDEsMjgsMSwxNSwxLDE1LDEsOSwxLDE1LDEsOSwyLAorICAgIDMsMSwxNSwxLDE3LDMsMTMsMSwxMywxLDE1LDEsMTUsMiwxMywxLAorICAgIDIwLDMsMywxLDE2LDEsMTMsMiwxMSwxLDE2LDMsMTIsMSwxMTQsMjA0LAorICAgIDAsMCwwLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDMsMCwwLDAsNjcsMCwwLDAsMTE1LDg3LDAsMCwwLDExNiwwLDAsCisgICAgMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMSwxMTYsMSwwLDEwNiwyLDAsCisgICAgMTA2LDMsMCwxMTYsNCwwLDEzMSwxLDAsMSwxMTYsMSwwLDEwNiwyLDAsCisgICAgMTA2LDMsMCwxMTYsNSwwLDEzMSwxLDAsMSwxMDAsMSwwLDEwMCwyLDAsCisgICAgMTA4LDYsMCwxMjUsMiwwLDEyNCwyLDAsOTcsNywwLDEyNCwyLDAsMTA2LAorICAgIDgsMCwxMTYsMSwwLDEwNiw5LDAsMTE2LDEwLDAsMjUsMTMxLDEsMCwxLAorICAgIDEwMCwyLDAsODMsNDEsMywxMjIsNTAsNzMsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsCisgICAgMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NiwxMTQsMzMsMCwwLDAsNzgsCisgICAgNDEsMTEsMTE0LDIwNCwwLDAsMCwxMTQsMTQsMCwwLDAsMTE0LDE3NCwwLDAsCisgICAgMCwxMTQsMTEzLDAsMCwwLDExNCwxNTAsMCwwLDAsMTE0LDE2MCwwLDAsMCwKKyAgICAyMTgsMjYsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTA4LDEwNSw5OCw5NSwxMDEsMTIwLDExNiwxMDEsMTE0LDExMCw5NywxMDgsMTE0LDExOSwwLDAsCisgICAgMCwyMTgsOCw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxMTQsMjEsMCwwLDAsCisgICAgMTE0LDEsMCwwLDAsNDEsMywxMTQsMjAyLDAsMCwwLDExNCwyMDMsMCwwLAorICAgIDAsMTE0LDIwNSwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDEwLDAsMCwwLAorICAgIDExNCwxMSwwLDAsMCwxMTQsMjA2LDAsMCwwLDEwOCw0LDAsMCwxMTUsMTIsCisgICAgMCwwLDAsMCwyLDEzLDIsMTYsMSwxNiwzLDEyLDEsNiwxLDExNCwKKyAgICAyMDYsMCwwLDAsNDEsNTEsMTE0LDMsMCwwLDAsMTE0LDExOSwwLDAsMCwKKyAgICAxMTQsMTIsMCwwLDAsMTE0LDE2LDAsMCwwLDExNCwxNywwLDAsMCwxMTQsCisgICAgNTksMCwwLDAsMTE0LDQxLDAsMCwwLDExNCw0OCwwLDAsMCwxMTQsMzEsCisgICAgMCwwLDAsMTE0LDMyLDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNTQsMCwKKyAgICAwLDAsMTE0LDU2LDAsMCwwLDExNCw2MywwLDAsMCwxMTQsNjUsMCwwLAorICAgIDAsMTE0LDc1LDAsMCwwLDExNCw4MSwwLDAsMCwxMTQsODQsMCwwLDAsCisgICAgMTE0LDkwLDAsMCwwLDExNCwxMDEsMCwwLDAsMTE0LDEwMiwwLDAsMCwxMTQsCisgICAgMTA2LDAsMCwwLDExNCw4NSwwLDAsMCwyMTgsNiwxMTEsOTgsMTA2LDEwMSw5OSwKKyAgICAxMTYsOTAsOSw5NSw4MCw3OSw4MCw4NSw3Niw2NSw4NCw2OSwxMTQsMTMyLDAsMCwKKyAgICAwLDExNCwxMzcsMCwwLDAsMTE0LDE0NCwwLDAsMCwxMTQsOTcsMCwwLDAsCisgICAgMTE0LDg2LDAsMCwwLDExNCwxNDgsMCwwLDAsMTE0LDE0OSwwLDAsMCwxMTQsCisgICAgODcsMCwwLDAsMTE0LDE1MCwwLDAsMCwxMTQsMTYwLDAsMCwwLDExNCwxNjUsCisgICAgMCwwLDAsMTE0LDE3MSwwLDAsMCwxMTQsMTczLDAsMCwwLDExNCwxNzYsMCwKKyAgICAwLDAsMTE0LDE4MSwwLDAsMCwxMTQsMTkxLDAsMCwwLDExNCwxODIsMCwwLAorICAgIDAsMTE0LDE4NCwwLDAsMCwxMTQsMTg1LDAsMCwwLDExNCwxODYsMCwwLDAsCisgICAgMTE0LDE5NCwwLDAsMCwxMTQsMTk2LDAsMCwwLDExNCwxOTksMCwwLDAsMTE0LAorICAgIDIwMCwwLDAsMCwxMTQsMjA0LDAsMCwwLDExNCwyMDYsMCwwLDAsMTE0LDEwLAorICAgIDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMCwwLDAsMTE0LDExLDAsCisgICAgMCwwLDIxOCw4LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDYyLDgsMCwwLDAsCisgICAgMTE1LDk2LDAsMCwwLDYsMTcsNiwyLDEyLDgsMTIsNCwxOSwyMCw2LAorICAgIDIsNiwzLDIyLDQsMTksNjgsMTksMjEsMTksMTksMTIsMTksMTIsMTksMTIsCisgICAgMTEsMTgsOCwxMiwxMSwxMiwxMiwxMiwxNiwxMiwzNiwxOSwyNywxOSwxMDEsMjQsCisgICAgMjYsOSwzLDE4LDQ1LDE4LDYwLDEyLDE4LDEyLDE3LDEyLDI1LDEyLDI5LDEyLAorICAgIDIzLDEyLDE2LDE5LDczLDE5LDc3LDE5LDEzLDEyLDksMTIsOSwxNSw0MCwxMiwKKyAgICAxNyw2LDEsMTAsMiwxMiwyNywxMiw2LDE4LDI0LDEyLDMyLDEyLDE1LDI0LAorICAgIDM1LDEyLDcsMTIsNDcsCiB9OwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGxpYl9leHRlcm5hbC5oIGIvUHl0aG9uL2ltcG9ydGxpYl9leHRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDdjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vaW1wb3J0bGliX2V4dGVybmFsLmgKQEAgLTAsMCArMSwyNjA2IEBACisvKiBBdXRvLWdlbmVyYXRlZCBieSBQcm9ncmFtcy9fZnJlZXplX2ltcG9ydGxpYi5jICovCitjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJfZXh0ZXJuYWxbXSA9IHsKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwyNDQsMiwwLDAsMTAwLDAsMCw5MCwwLDAsCisgICAgMTAwLDk2LDAsOTAsMSwwLDEwMCw5NywwLDkwLDIsMCwxMDEsMiwwLDEwMSwKKyAgICAxLDAsMjMsOTAsMywwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLAorICAgIDQsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDgsCisgICAgMCwxMDAsOSwwLDEzMiwwLDAsOTAsNiwwLDEwMCwxMCwwLDEwMCwxMSwwLAorICAgIDEzMiwwLDAsOTAsNywwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsCisgICAgOCwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsOSwwLDEwMCwxNiwKKyAgICAwLDEwMCwxNywwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTgsMCwxMDAsMTksMCwKKyAgICAxMzIsMCwwLDkwLDExLDAsMTAwLDIwLDAsMTAwLDIxLDAsMTMyLDAsMCw5MCwKKyAgICAxMiwwLDEwMCwyMiwwLDEwMCwyMywwLDEwMCwyNCwwLDEzMiwxLDAsOTAsMTMsCisgICAgMCwxMDEsMTQsMCwxMDEsMTMsMCwxMDYsMTUsMCwxMzEsMSwwLDkwLDE2LDAsCisgICAgMTAwLDI1LDAsMTA2LDE3LDAsMTAwLDI2LDAsMTAwLDI3LDAsMTMxLDIsMCwxMDAsCisgICAgMjgsMCwyMyw5MCwxOCwwLDEwMSwxOSwwLDEwNiwyMCwwLDEwMSwxOCwwLDEwMCwKKyAgICAyNywwLDEzMSwyLDAsOTAsMjEsMCwxMDAsMjksMCw5MCwyMiwwLDEwMCwzMCwKKyAgICAwLDkwLDIzLDAsMTAwLDMxLDAsMTAzLDEsMCw5MCwyNCwwLDEwMCwzMiwwLAorICAgIDEwMywxLDAsOTAsMjUsMCwxMDEsMjUsMCw0LDkwLDI2LDAsOTAsMjcsMCwKKyAgICAxMDAsMzMsMCwxMDAsMzQsMCwxMDAsMzMsMCwxMDAsMzUsMCwxMDAsMzYsMCwxMzIsCisgICAgMSwxLDkwLDI4LDAsMTAwLDM3LDAsMTAwLDM4LDAsMTMyLDAsMCw5MCwyOSwKKyAgICAwLDEwMCwzOSwwLDEwMCw0MCwwLDEzMiwwLDAsOTAsMzAsMCwxMDAsNDEsMCwKKyAgICAxMDAsNDIsMCwxMzIsMCwwLDkwLDMxLDAsMTAwLDQzLDAsMTAwLDQ0LDAsMTMyLAorICAgIDAsMCw5MCwzMiwwLDEwMCw0NSwwLDEwMCw0NiwwLDEwMCw0NywwLDEwMCw0OCwKKyAgICAwLDEzMiwwLDEsOTAsMzMsMCwxMDAsNDksMCwxMDAsNTAsMCwxMzIsMCwwLAorICAgIDkwLDM0LDAsMTAwLDUxLDAsMTAwLDUyLDAsMTMyLDAsMCw5MCwzNSwwLDEwMCwKKyAgICAzMywwLDEwMCwzMywwLDEwMCwzMywwLDEwMCw1MywwLDEwMCw1NCwwLDEzMiwzLAorICAgIDAsOTAsMzYsMCwxMDAsMzMsMCwxMDAsMzMsMCwxMDAsMzMsMCwxMDAsNTUsMCwKKyAgICAxMDAsNTYsMCwxMzIsMywwLDkwLDM3LDAsMTAwLDU3LDAsMTAwLDU3LDAsMTAwLAorICAgIDU4LDAsMTAwLDU5LDAsMTMyLDIsMCw5MCwzOCwwLDEwMCw2MCwwLDEwMCw2MSwKKyAgICAwLDEzMiwwLDAsOTAsMzksMCwxMDEsNDAsMCwxMzEsMCwwLDkwLDQxLDAsCisgICAgMTAwLDMzLDAsMTAwLDYyLDAsMTAwLDMzLDAsMTAwLDYzLDAsMTAxLDQxLDAsMTAwLAorICAgIDY0LDAsMTAwLDY1LDAsMTMyLDEsMiw5MCw0MiwwLDcxLDEwMCw2NiwwLDEwMCwKKyAgICA2NywwLDEzMiwwLDAsMTAwLDY3LDAsMTMxLDIsMCw5MCw0MywwLDcxLDEwMCwKKyAgICA2OCwwLDEwMCw2OSwwLDEzMiwwLDAsMTAwLDY5LDAsMTMxLDIsMCw5MCw0NCwKKyAgICAwLDcxLDEwMCw3MCwwLDEwMCw3MSwwLDEzMiwwLDAsMTAwLDcxLDAsMTAxLDQ0LAorICAgIDAsMTMxLDMsMCw5MCw0NSwwLDcxLDEwMCw3MiwwLDEwMCw3MywwLDEzMiwwLAorICAgIDAsMTAwLDczLDAsMTMxLDIsMCw5MCw0NiwwLDcxLDEwMCw3NCwwLDEwMCw3NSwKKyAgICAwLDEzMiwwLDAsMTAwLDc1LDAsMTAxLDQ2LDAsMTAxLDQ1LDAsMTMxLDQsMCwKKyAgICA5MCw0NywwLDcxLDEwMCw3NiwwLDEwMCw3NywwLDEzMiwwLDAsMTAwLDc3LDAsCisgICAgMTAxLDQ2LDAsMTAxLDQ0LDAsMTMxLDQsMCw5MCw0OCwwLDEwMywwLDAsOTAsCisgICAgNDksMCw3MSwxMDAsNzgsMCwxMDAsNzksMCwxMzIsMCwwLDEwMCw3OSwwLDEwMSwKKyAgICA0NiwwLDEwMSw0NCwwLDEzMSw0LDAsOTAsNTAsMCw3MSwxMDAsODAsMCwxMDAsCisgICAgODEsMCwxMzIsMCwwLDEwMCw4MSwwLDEzMSwyLDAsOTAsNTEsMCw3MSwxMDAsCisgICAgODIsMCwxMDAsODMsMCwxMzIsMCwwLDEwMCw4MywwLDEzMSwyLDAsOTAsNTIsCisgICAgMCw3MSwxMDAsODQsMCwxMDAsODUsMCwxMzIsMCwwLDEwMCw4NSwwLDEzMSwyLAorICAgIDAsOTAsNTMsMCw3MSwxMDAsODYsMCwxMDAsODcsMCwxMzIsMCwwLDEwMCw4NywKKyAgICAwLDEzMSwyLDAsOTAsNTQsMCwxMDAsMzMsMCwxMDAsODgsMCwxMDAsODksMCwKKyAgICAxMzIsMSwwLDkwLDU1LDAsMTAwLDkwLDAsMTAwLDkxLDAsMTMyLDAsMCw5MCwKKyAgICA1NiwwLDEwMCw5MiwwLDEwMCw5MywwLDEzMiwwLDAsOTAsNTcsMCwxMDAsOTQsCisgICAgMCwxMDAsOTUsMCwxMzIsMCwwLDkwLDU4LDAsMTAwLDMzLDAsODMsNDEsOTgsCisgICAgOTcsOTQsMSwwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTEyLDk3LDExNiwxMDQsCisgICAgNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMTAsMTAsCisgICAgODQsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw3OCwKKyAgICA3OSw4NCwzMiwxMDksMTAxLDk3LDExMCwxMTYsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTAwLAorICAgIDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsCisgICAgMzMsMzIsNzMsMTE2LDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsMTAwLDEwMSwKKyAgICAxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTUsMTE3LDk5LDEwNCwxMCwxMTYsMTA0LDk3LDExNiwKKyAgICAzMiwxMDUsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTgsMTExLDExMSwxMTYsMTE1LAorICAgIDExNiwxMTQsOTcsMTEyLDExMiwxMDEsMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiw4MCwxMjEsMTE2LAorICAgIDEwNCwxMTEsMTEwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLAorICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiw0NiwzMiw2NSwxMTUsMTAsMTE1LDExNyw5OSwxMDQsMzIsMTA1LDExNiwzMiwKKyAgICAxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMTAsMTA2LAorICAgIDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLAorICAgIDEwNSw5OSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiw5NywKKyAgICAxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTExLDExNCwxMDAsCisgICAgMTAxLDExNCwzMiwxMTYsMTExLDEwLDExOSwxMTEsMTE0LDEwNyw0NiwzMiw3OSwxMTAsMTAxLDMyLAorICAgIDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTcsOTgsMTA4LAorICAgIDEwNSw5OSw0NSwxMDIsOTcsOTksMTA1LDExMCwxMDMsMzIsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsCisgICAgMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQ2LDEwLDEwLDIxOCwzLDExOSwxMDUsMTEwLDIxOCw2LDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsCisgICAgMjE4LDYsMTAwLDk3LDExNCwxMTksMTA1LDExMCw5OSwwLDAsMCwwLDAsMCwwLAorICAgIDAsMSwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDg4LDAsCisgICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDExNiwzLDAsMTMxLDEsCisgICAgMCwxMTQsNzIsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMTYsNCwwLAorICAgIDEzMSwxLDAsMTE0LDQ1LDAsMTAwLDEsMCwxMzcsMCwwLDExMCw2LDAsMTAwLAorICAgIDIsMCwxMzcsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMywwLDEwMCw0LAorICAgIDAsMTM0LDAsMCwxMjUsMCwwLDExMCwxMiwwLDEwMCw1LDAsMTAwLDQsMCwKKyAgICAxMzIsMCwwLDEyNSwwLDAsMTI0LDAsMCw4Myw0MSw2LDc4LDkwLDEyLDgwLAorICAgIDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LDc1LDExNSwxMiwwLDAsMCwKKyAgICA4MCw4OSw4NCw3Miw3OSw3OCw2Nyw2NSw4Myw2OSw3OSw3NSw5OSwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDE5LDAsMCwKKyAgICAwLDExNSwxMywwLDAsMCwxMzYsMCwwLDExNiwwLDAsMTA2LDEsMCwxMDcsCisgICAgNiwwLDgzLDQxLDEsMTIyLDUzLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLAorICAgIDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLAorICAgIDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLAorICAgIDExNSwxMDEsMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsNDEsMiwyMTgsMywKKyAgICA5NSwxMTEsMTE1LDkwLDcsMTAxLDExMCwxMTgsMTA1LDExNCwxMTEsMTEwLDE2OSwwLDQxLDEsCisgICAgMjE4LDMsMTA3LDEwMSwxMjEsMTE0LDQsMCwwLDAsMjUwLDM4LDYwLDEwMiwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCisgICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDk1LDEwMSwxMjAsMTE2LDEwMSwxMTQsMTEwLDk3LAorICAgIDEwOCw2MiwyMTgsMTEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMzcsCisgICAgMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwzNyw5NSwxMDksOTcsMTA3LAorICAgIDEwMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw0Niw2MCwxMDgsMTExLAorICAgIDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwKKyAgICAxMDEsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLAorICAgIDAsMCw4MywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLAorICAgIDIsMTIyLDUzLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCwKKyAgICA5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LDEwNCwxMDEsCisgICAgOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsMTEwLDExNSwKKyAgICAxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsNzAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwKKyAgICAwLDAsMTE0LDcsMCwwLDAsNDEsMCwwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwyLDQxLDUsMjE4LDMsMTE1LDEyMSwxMTUsMjE4LDgsMTEyLDEwOCw5NywxMTYsMTAyLAorICAgIDExMSwxMTQsMTA5LDIxOCwxMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwyMTgsCisgICAgMjcsOTUsNjcsNjUsODMsNjksOTUsNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsCisgICAgODYsNjksOTUsODAsNzYsNjUsODQsNzAsNzksODIsNzcsODMsMjE4LDM1LDk1LDY3LAorICAgIDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LAorICAgIDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LDgzLDk1LDgzLDg0LDgyLDk1LDc1LDY5LAorICAgIDg5LDQxLDEsMTE0LDcsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsCisgICAgNSwwLDAsMCwxMTQsNiwwLDAsMCwyMTgsMTYsOTUsMTA5LDk3LDEwNywxMDEsCisgICAgOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMzAsMCwwLDAsMTE1LAorICAgIDE0LDAsMCwwLDAsMSwxOCwxLDE4LDEsOSwyLDYsMiwyMSw0LAorICAgIDEyLDMsMTE0LDEzLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDI2LDAsMCwKKyAgICAwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEwMCwxLDAsNjQsMTA2LDEsCisgICAgMCwxMDAsMiwwLDEwMCwzLDAsMTMxLDIsMCw4Myw0MSw0LDEyMiw0Miw2NywKKyAgICAxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw5NywzMiw1MSw1MCw0NSw5OCwxMDUsMTE2LDMyLAorICAgIDEwNSwxMTAsMTE2LDEwMSwxMDMsMTAxLDExNCwzMiwxMTYsMTExLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsCisgICAgMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywxMTAsNDYsMTA4LDMsMCwwLDAsMjU1LDEyNywKKyAgICAyNTUsMTI3LDMsMCwyMzMsNCwwLDAsMCwyMTgsNiwxMDgsMTA1LDExNiwxMTYsMTA4LAorICAgIDEwMSw0MSwyLDIxOCwzLDEwNSwxMTAsMTE2LDIxOCw4LDExNiwxMTEsOTUsOTgsMTIxLDExNiwKKyAgICAxMDEsMTE1LDQxLDEsMjE4LDEsMTIwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw2LDAsMCwwLDIxOCw3LDk1LDExOSw5NSwxMDgsMTExLDExMCwxMDMsNDcsCisgICAgMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNCwxOSwwLDAsMCw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LAorICAgIDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDEsMiwxMjIsNDcsNjcsMTExLDExMCwKKyAgICAxMTgsMTAxLDExNCwxMTYsMzIsNTIsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsCisgICAgMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LDExMCwzMiwxMTYsMTExLAorICAgIDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNiwxMDEsMTAzLDEwMSwxMTQsNDYsMTE0LDE1LDAsMCwKKyAgICAwLDQxLDIsMTE0LDE2LDAsMCwwLDIxOCwxMCwxMDIsMTE0LDExMSwxMDksOTUsOTgsCisgICAgMTIxLDExNiwxMDEsMTE1LDQxLDEsOTAsOSwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwKKyAgICAxMTUsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLDAsCisgICAgMjE4LDcsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw1MiwwLDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDIsMTE0LDIxLDAsMCwwLDk5LDAsMCwwLDAsMCwwLAorICAgIDAsMCwxLDAsMCwwLDMsMCwwLDAsNzEsMCwwLDAsMTE1LDI2LAorICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLAorICAgIDAsMCwxMjQsMCwwLDY4LDEzMSwxLDAsMTMxLDEsMCw4Myw0MSwzLDEyMiwKKyAgICAzMSw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA2LDExMSwxMDUsMTEwLDQwLDQxLDQ2LAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLAorICAgIDAsODMsMCwwLDAsMTE1LDM3LDAsMCwwLDEwMywwLDAsMTI0LDAsMCwKKyAgICA5MywyNywwLDEyNSwxLDAsMTI0LDEsMCwxMTQsNiwwLDEyNCwxLDAsMTA2LAorICAgIDAsMCwxMTYsMSwwLDEzMSwxLDAsMTQ1LDIsMCwxMTMsNiwwLDgzLDExNCwKKyAgICA0LDAsMCwwLDQxLDIsMjE4LDYsMTE0LDExNSwxMTYsMTE0LDEwNSwxMTIsMjE4LDE1LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsNDEsCisgICAgMiwyMTgsMiw0Niw0OCwyMTgsNCwxMTIsOTcsMTE0LDExNiwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwyNTAsMTAsNjAsMTA4LDEwNSwxMTUsCisgICAgMTE2LDk5LDExMSwxMDksMTEyLDYyLDU5LDAsMCwwLDExNSwyLDAsMCwwLDksCisgICAgMSwxMjIsMzAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDQ2LDYwLDEwOCwKKyAgICAxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDgsMTA1LDExNSwxMTYsOTksMTExLDEwOSwxMTIsCisgICAgNjIsNDEsMiwyMTgsOCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwyMTgsNCwxMDYsCisgICAgMTExLDEwNSwxMTAsNDEsMSwyMTgsMTAsMTEyLDk3LDExNiwxMDQsOTUsMTEyLDk3LDExNCwxMTYsCisgICAgMTE1LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLAorICAgIDIxOCwxMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsNTcsMCwwLDAsCisgICAgMTE1LDQsMCwwLDAsMCwyLDE1LDEsMTE0LDMwLDAsMCwwLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDUsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDEzNCwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTMxLDEsCisgICAgMCwxMDAsMSwwLDEwNywyLDAsMTE0LDUyLDAsMTI0LDAsMCwxMDYsMiwwLAorICAgIDExNiwzLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwKKyAgICAzLDAsMTI0LDEsMCwxMjQsMywwLDEwMiwyLDAsODMsMTIwLDY5LDAsMTE2LAorICAgIDQsMCwxMjQsMCwwLDEzMSwxLDAsNjgsOTMsNTUsMCwxMjUsNCwwLDEyNCwKKyAgICA0LDAsMTE2LDEsMCwxMDcsNiwwLDExNCw2NSwwLDEyNCwwLDAsMTA2LDUsCisgICAgMCwxMjQsNCwwLDEwMCwyLDAsMTAwLDEsMCwxMzEsMSwxLDkyLDIsMCwKKyAgICAxMjUsMSwwLDEyNSwzLDAsMTI0LDEsMCwxMjQsMywwLDEwMiwyLDAsODMsCisgICAgMTEzLDY1LDAsODcsMTAwLDMsMCwxMjQsMCwwLDEwMiwyLDAsODMsNDEsNCwKKyAgICAxMjIsMzIsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLAorICAgIDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDExNSwxMTIsMTA4LDEwNSwxMTYsNDAsCisgICAgNDEsNDYsMjMzLDEsMCwwLDAsOTAsOCwxMDksOTcsMTIwLDExNSwxMTIsMTA4LDEwNSwKKyAgICAxMTYsMjE4LDAsNDEsNiwyMTgsMywxMDgsMTAxLDExMCwxMTQsMjMsMCwwLDAsMjE4LAorICAgIDEwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNCwyNywwLDAsMCwKKyAgICAyMTgsOCwxMTQsMTAxLDExOCwxMDEsMTE0LDExNSwxMDEsMTAwLDIxOCw2LDExNCwxMTUsMTEyLDEwOCwKKyAgICAxMDUsMTE2LDQxLDUsMjE4LDQsMTEyLDk3LDExNiwxMDQsOTAsNSwxMDIsMTE0LDExMSwxMTAsCisgICAgMTE2LDIxOCwxLDk1LDIxOCw0LDExNiw5NywxMDUsMTA4LDExNCwxOCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwyMTgsMTEsCisgICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiw2MywwLDAsMCwxMTUsCisgICAgMTYsMCwwLDAsMCwyLDE4LDEsMjQsMSwxMCwxLDE5LDEsMTIsMSwKKyAgICAyNywxLDE0LDEsMTE0LDQwLDAsMCwwLDk5LDEsMCwwLDAsMCwwLAorICAgIDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLAorICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsODMsCisgICAgNDEsMSwxMjIsMTI2LDgzLDExNiw5NywxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwKKyAgICAxMDQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzcsOTcsMTAwLDEwMSwzMiw5NywzMiwxMTUsCisgICAgMTAxLDExMiw5NywxMTQsOTcsMTE2LDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsCisgICAgMzIsMTE2LDExMSwzMiwxMDksOTcsMTA3LDEwMSwzMiwxMDUsMTE2LDMyLDEwMSw5NywxMTUsMTA1LAorICAgIDEwMSwxMTQsMzIsMTE2LDExMSwzMiwxMTEsMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLDEwNSwKKyAgICAxMTAsMzIsMTAxLDEyMCwxMTIsMTAxLDExNCwxMDUsMTA5LDEwMSwxMTAsMTE2LDExNSwxMCwzMiwzMiwKKyAgICAzMiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk5LDk3LDk5LDEwNCwxMDEsMzIsMTE1LDExNiwKKyAgICA5NywxMTYsMzIsMTE0LDEwMSwxMTUsMTE3LDEwOCwxMTYsMTE1LDQxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDQxLDIsMTE0LDMsMCwwLDAsOTAsNCwxMTUsMTE2LDk3LDExNiw0MSwKKyAgICAxLDExNCwzNywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNiwwLDAsMCwyMTgsMTAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywKKyAgICAxMTYsNzUsMCwwLDAsMTE1LDIsMCwwLDAsMCw3LDExNCw0MSwwLDAsCisgICAgMCw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxMSwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNTgsMCwwLDAsMTIxLDE2LDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMTAsMjIsMCw0LDExNiwKKyAgICAxLDAsMTA3LDEwLDAsMTE0LDQwLDAsMSwxLDEsMTAwLDEsMCw4Myw4OSwKKyAgICAxMTAsMSwwLDg4LDEyNCwyLDAsMTA2LDIsMCwxMDAsMiwwLDY0LDEyNCwxLAorICAgIDAsMTA3LDIsMCw4Myw0MSwzLDEyMiw0OSw4NCwxMDEsMTE1LDExNiwzMiwxMTksMTA0LAorICAgIDEwMSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LAorICAgIDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLAorICAgIDEwOSwxMTEsMTAwLDEwMSwzMiwxMTYsMTIxLDExMiwxMDEsNDYsNzAsMTA1LDAsMjQwLDAsMCwKKyAgICA0MSwzLDExNCw0MSwwLDAsMCwyMTgsNyw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsCisgICAgMjE4LDcsMTE1LDExNiw5NSwxMDksMTExLDEwMCwxMDEsNDEsMywxMTQsMzcsMCwwLDAsCisgICAgMjE4LDQsMTA5LDExMSwxMDAsMTAxLDkwLDksMTE1LDExNiw5NywxMTYsOTUsMTA1LDExMCwxMDIsCisgICAgMTExLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLAorICAgIDIxOCwxOCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwKKyAgICAxMTYsMTIxLDExMiwxMDEsODUsMCwwLDAsMTE1LDEwLDAsMCwwLDAsMiwzLAorICAgIDEsMTYsMSwxMywxLDksMSwxMTQsNDUsMCwwLDAsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwMCwxLDAsMTMxLAorICAgIDIsMCw4Myw0MSwyLDEyMiwzMSw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwKKyAgICAxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LAorICAgIDExNSwxMDIsMTA1LDEwOCwxMDEsNDYsMTA1LDAsMTI4LDAsMCw0MSwxLDExNCw0NSwwLAorICAgIDAsMCw0MSwxLDExNCwzNywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNiwwLDAsMCwyMTgsMTIsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsOTQsMCwwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICAyLDExNCw0NiwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzMSwwLDAsMCwKKyAgICAxMjQsMCwwLDExNSwxOCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEyNSwKKyAgICAwLDAsMTE2LDIsMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MSwKKyAgICAyLDEyMiwzMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwKKyAgICAxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDAsMTA1LDExNCwKKyAgICA0NiwxMDUsMCw2NCwwLDAsNDEsMywxMTQsMywwLDAsMCwyMTgsNiwxMDMsCisgICAgMTAxLDExNiw5OSwxMTksMTAwLDExNCw0NSwwLDAsMCw0MSwxLDExNCwzNywwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwKKyAgICAyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCw5OSwwLDAsCisgICAgMCwxMTUsNiwwLDAsMCwwLDIsNiwxLDEyLDEsMTE0LDQ4LDAsMCwKKyAgICAwLDEwNSwxODIsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDYsCisgICAgMCwwLDAsMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDE5MywwLDAsMCwKKyAgICAxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCwxMzEsMiwwLDEyNSwzLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLAorICAgIDAsMTE2LDIsMCwxMDYsNCwwLDExNiwyLDAsMTA2LDUsMCw2NiwxMTYsMiwKKyAgICAwLDEwNiw2LDAsNjYsMTI0LDIsMCwxMDAsMiwwLDY0LDEzMSwzLDAsMTI1LAorICAgIDQsMCwxMjEsNjEsMCwxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsMywKKyAgICAwLDEzMSwyLDAsMTQzLDIwLDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw5LDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDEsODcsMTAwLDQsMCw4MSw4Miw4OCwxMTYsMiwKKyAgICAwLDEwNiwxMCwwLDEyNCwzLDAsMTI0LDAsMCwxMzEsMiwwLDEsODcsMTEwLAorICAgIDU5LDAsNCwxMTYsMTEsMCwxMDcsMTAsMCwxMTQsMTg4LDAsMSwxLDEsMTIxLAorICAgIDE3LDAsMTE2LDIsMCwxMDYsMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywKKyAgICAxMTAsMTgsMCw0LDExNiwxMSwwLDEwNywxMCwwLDExNCwxODAsMCwxLDEsMSwKKyAgICA4OSwxMTAsMSwwLDg4LDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLAorICAgIDgzLDQxLDUsMTIyLDE2Miw2NiwxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LDExNiwKKyAgICAzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LDEwNSwKKyAgICAxMTYsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiw5NywxMTYsMTExLDEwOSwxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsMzIsCisgICAgMzIsMzIsNjYsMTAxLDMyLDExMiwxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsMTExLAorICAgIDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksMTIwLAorICAgIDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsMTEwLAorICAgIDk5LDExNywxMTQsMTE0LDEwMSwxMTAsMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwKKyAgICAxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwxMTEsCisgICAgMTE0LDk3LDExNCwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LDExNiwKKyAgICAxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCw0NiwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsMTA1LDE4MiwKKyAgICAxLDAsMCw5MCwyLDExOSw5OCw3OCw0MSwxMywyMTgsNiwxMDIsMTExLDExNCwxMDksCisgICAgOTcsMTE2LDIxOCwyLDEwNSwxMDAsMTE0LDMsMCwwLDAsOTAsNCwxMTEsMTEyLDEwMSwKKyAgICAxMTAsOTAsNiw3OSw5NSw2OSw4OCw2Nyw3Niw5MCw3LDc5LDk1LDY3LDgyLDY5LAorICAgIDY1LDg0LDkwLDgsNzksOTUsODcsODIsNzksNzgsNzYsODksMjE4LDMsOTUsMTA1LAorICAgIDExMSwyMTgsNiw3MCwxMDUsMTA4LDEwMSw3Myw3OSwyMTgsNSwxMTksMTE0LDEwNSwxMTYsMTAxLAorICAgIDIxOCw3LDExNCwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTE0LDQyLDAsMCwwLDkwLDYsCisgICAgMTE3LDExMCwxMDgsMTA1LDExMCwxMDcsNDEsNiwxMTQsMzcsMCwwLDAsMjE4LDQsMTAwLAorICAgIDk3LDExNiw5NywxMTQsNDQsMCwwLDAsOTAsOCwxMTIsOTcsMTE2LDEwNCw5NSwxMTYsCisgICAgMTA5LDExMiw5MCwyLDEwMiwxMDAsMjE4LDQsMTAyLDEwNSwxMDgsMTAxLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxMyw5NSwxMTksMTE0LAorICAgIDEwNSwxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSwxMDYsMCwwLDAsMTE1LDI2LAorICAgIDAsMCwwLDAsNSwyNCwxLDksMSwzMywxLDMsMywyMSwxLDIwLAorICAgIDEsMjAsMSwxMywxLDMsMSwxNywxLDEzLDEsNSwxLDExNCw1NywwLAorICAgIDAsMCwxMDUsMjMsMTMsMCwwLDIzMywyLDAsMCwwLDExNCwxNSwwLDAsCisgICAgMCwxMTUsMiwwLDAsMCwxMywxMCw5MCwxMSw5NSw5NSwxMTIsMTIxLDk5LDk3LAorICAgIDk5LDEwNCwxMDEsOTUsOTUsMTIyLDQsMTExLDExMiwxMTYsNDUsMTIyLDMsNDYsMTEyLDEyMSwKKyAgICAxMjIsNCw0NiwxMTIsMTIxLDk5LDc4LDIxOCwxMiwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsCisgICAgOTcsMTE2LDEwNSwxMTEsMTEwLDk5LDIsMCwwLDAsMSwwLDAsMCwxMSwwLAorICAgIDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSw4NywxLDAsMCwxMjQsCisgICAgMSwwLDEwMCwxLDAsMTA3LDksMCwxMTQsNzYsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTAwLDIsMCwxMTYsMiwwLDEzMSwyLDAsMSwxMjQsMiwwLDEwMCwxLAorICAgIDAsMTA3LDksMCwxMTQsNTgsMCwxMDAsMywwLDEyNSwzLDAsMTE2LDMsMCwKKyAgICAxMjQsMywwLDEzMSwxLDAsMTMwLDEsMCwxMjQsMSwwLDExNCw3MCwwLDEwMCwKKyAgICA0LDAsMTEwLDMsMCwxMDAsNSwwLDEyNSwyLDAsMTE2LDQsMCwxMjQsMCwKKyAgICAwLDEzMSwxLDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsNSwwLAorICAgIDEwNiw1LDAsMTAwLDYsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNiwwLDEyNSwKKyAgICA3LDAsMTI1LDgsMCwxMTYsNiwwLDEwNiw3LDAsMTA2LDgsMCwxMjUsOSwKKyAgICAwLDEyNCw5LDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxNTQsMCwxMTYsOSwwLAorICAgIDEwMCw3LDAsMTMxLDEsMCwxMzAsMSwwLDEwMCw0LDAsMTA2LDEwLDAsMTI0LAorICAgIDYsMCwxMTQsMTcyLDAsMTI0LDYsMCwxMTAsMywwLDEyNCw4LDAsMTI0LDcsCisgICAgMCwxMjQsOSwwLDEwMywzLDAsMTMxLDEsMCwxMjUsMTAsMCwxMjQsMiwwLAorICAgIDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQxLDAsMTE2LDYsMCwxMDYsMTEsMCwxMDYsCisgICAgMTIsMCwxMDAsOCwwLDEwNywyLDAsMTE0LDIyOSwwLDEwMCw0LDAsMTI1LDIsCisgICAgMCwxMTAsMTIsMCwxMTYsNiwwLDEwNiwxMSwwLDEwNiwxMiwwLDEyNSwyLDAsCisgICAgMTE2LDEzLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMDAsCisgICAgNCwwLDEwNywzLDAsMTE0LDYzLDEsMTI0LDIsMCwxMDYsMTQsMCwxMzEsMCwKKyAgICAwLDExNSw0MiwxLDExNiwxNSwwLDEwMCw5LDAsMTA2LDE2LDAsMTI0LDIsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMDAsMTAsMCwxMDYsMTYsMCwxMjQsCisgICAgMTAsMCwxMTYsMTcsMCwxMjQsMiwwLDEzMSwzLDAsMTI1LDEwLDAsMTE2LDE4LAorICAgIDAsMTI0LDQsMCwxMTYsMTksMCwxMjQsMTAsMCwxMTYsMjAsMCwxMDAsOCwwLAorICAgIDI1LDIzLDEzMSwzLDAsODMsNDEsMTEsOTcsMjU0LDIsMCwwLDcxLDEwNSwxMTgsCisgICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LAorICAgIDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwKKyAgICAxMTUsMzIsNDYsMTEyLDEyMSw5OSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsCisgICAgMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsCisgICAgMTAxLDEyMCwxMDUsMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLAorICAgIDEwOCwxMjEsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwKKyAgICA5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsNDYsCisgICAgMTEyLDEyMSw5OSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsCisgICAgMTE2LDEwMSwxMDAsMzIsOTcsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLAorICAgIDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE5LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwKKyAgICAxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsOTcsMTE2LDEwNSwxMTEsMTEwLDM5LDMyLDExMiw5NywKKyAgICAxMTQsOTcsMTA5LDEwMSwxMTYsMTAxLDExNCwzMiw5OSwxMTEsMTEwLDExNiwxMTQsMTExLDEwOCwxMTUsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDExNCwxMDEsMTE1LDExNywxMDksMTAxLDEwMCwzMiwxMTEsMTEyLAorICAgIDExNiwxMDUsMTA5LDEwNSwxMjIsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwOCwxMDEsMTE4LDEwMSwxMDgsCisgICAgMzIsMTExLDEwMiwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiw5OCwxMjEsMTE2LDEwMSwKKyAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMzIsNzMsMTAyLDMyLDM5LDExMSwKKyAgICAxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiw5NywxMTYsMTA1LDExMSwxMTAsMzksMzIsMTA1LDExNSwzMiwKKyAgICAxMTAsMTExLDExNiwzMiw3OCwxMTEsMTEwLDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTE2LAorICAgIDExNCwxMDUsMTEwLDEwMywzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsMTAsMzIsMzIsMzIsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw5NywKKyAgICAxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMTYsOTcsMTA3LDEwMSwxMTAsCisgICAgMzIsOTcsMTEwLDEwMCwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDExNiwxMTEsCisgICAgMzIsOTgsMTAxLDMyLDk3LDEwOCwxMTIsMTA0LDk3LDExMCwxMTcsMTA5LDEwMSwxMTQsMTA1LDk5LAorICAgIDMyLDQwLDEwMSwxMDgsMTE1LDEwMSwzMiw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwKKyAgICAxMTQsMTAsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQxLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAwLDEwMSw5OCwxMTcsMTAzLAorICAgIDk1LDExMSwxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTEyLDk3LDExNCw5NywxMDksMTAxLAorICAgIDExNiwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLAorICAgIDEwMCw0NiwzMiw3MywxMDIsMzIsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwxMTgsMTAxLDExNCwKKyAgICAxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw3OCwxMTEsMTEwLDEwMSwKKyAgICA0NCwxMCwzMiwzMiwzMiwzMiw5NywzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMTgsOTcsMTA4LAorICAgIDExNywxMDEsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsOTcsMTA5LDEwMSwzMiw5NywKKyAgICAxMTUsMzIsMTE1LDEwMSwxMTYsMTE2LDEwNSwxMTAsMTAzLDMyLDM5LDExMSwxMTIsMTE2LDEwNSwxMDksCisgICAgMTA1LDEyMiw5NywxMTYsMTA1LDExMSwxMTAsMzksMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDEsMTA5LDExMiwxMTYsMTIxLDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLAorICAgIDMyLDExOSwxMDQsMTA1LDEwOCwxMDEsMzIsOTcsMzIsNzAsOTcsMTA4LDExNSwxMDEsMzIsMTE4LAorICAgIDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTAxLDExMywxMTcsMTA1LDExOCw5NywxMDgsMTAxLAorICAgIDExMCwxMTYsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDExNiwxMTYsMTA1LDExMCwxMDMsMzIsMzksMTExLAorICAgIDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDk3LDExNiwxMDUsMTExLDExMCwzOSwzMiwxMTYsMTExLDMyLAorICAgIDM5LDQ5LDM5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTUsMTIxLDExNSwKKyAgICA0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsCisgICAgOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwKKyAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwKKyAgICAxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywKKyAgICAxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsMTIyLDcwLDExNiwxMDQsCisgICAgMTAxLDMyLDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLAorICAgIDMyLDExMiw5NywxMTQsOTcsMTA5LDEwMSwxMTYsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsCisgICAgMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNTksMzIsMTE3LDExNSwxMDEsMzIsMzksMTExLAorICAgIDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDk3LDExNiwxMDUsMTExLDExMCwzOSwzMiwxMDUsMTEwLDExNSwKKyAgICAxMTYsMTAxLDk3LDEwMCwxMjIsNTAsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwxMTgsMTAxLDExNCwKKyAgICAxMTQsMTA1LDEwMCwxMDEsMzIsMTExLDExNCwzMiwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsOTcsCisgICAgMTE2LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsCisgICAgMzIsMTE2LDExMSwzMiw3OCwxMTEsMTEwLDEwMSwxMTQsMzIsMCwwLDAsMTE0LDMxLDAsCisgICAgMCwwLDIxOCwxLDQ2LDEyMiwzNiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLAorICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwKKyAgICAxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMjMzLDAsMCwwLDAsCisgICAgMTIyLDI0LDEyMywzMywxMTQsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTA4LAorICAgIDExMiwxMDQsOTcsMTEwLDExNywxMDksMTAxLDExNCwxMDUsOTksMTIyLDcsMTIzLDEyNSw0NiwxMjMsCisgICAgMTI1LDEyMywxMjUsNDEsMjEsMjE4LDksOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LAorICAgIDIxOCw0LDExOSw5NywxMTQsMTEwLDIxOCwxOCw2OCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDg3LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMjE4LDksODQsMTIxLDExMiwxMDEsCisgICAgNjksMTE0LDExNCwxMTEsMTE0LDExNCw0MCwwLDAsMCwxMTQsMzQsMCwwLDAsMTE0LAorICAgIDgsMCwwLDAsMjE4LDE0LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LAorICAgIDExNiwxMDUsMTExLDExMCwyMTgsOSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMjE4LAorICAgIDE5LDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LAorICAgIDExNCwxMTQsMTExLDExNCwxMTQsMjgsMCwwLDAsMjE4LDUsMTAyLDEwOCw5NywxMDMsMTE1LAorICAgIDIxOCw4LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMjE4LDMsMTE1LDExNiwxMTQsMjE4LAorICAgIDcsMTA1LDExNSw5NywxMDgsMTEwLDExNywxMDksMjE4LDEwLDg2LDk3LDEwOCwxMTcsMTAxLDY5LAorICAgIDExNCwxMTQsMTExLDExNCwxMTQsNDksMCwwLDAsMjE4LDQsOTUsNzksODAsODQsMTE0LAorICAgIDMwLDAsMCwwLDIxOCw4LDk1LDgwLDg5LDY3LDY1LDY3LDcyLDY5LDIxOCwxNywKKyAgICA2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSwKKyAgICA4Myw0MSwxMSwxMTQsMzcsMCwwLDAsOTAsMTQsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LAorICAgIDExMSwxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMTE0LDU5LDAsMCwwLDIxOCw3LDEwOSwKKyAgICAxMDEsMTE1LDExNSw5NywxMDMsMTAxLDIxOCw0LDEwNCwxMDEsOTcsMTAwLDExNCwzOSwwLDAsCisgICAgMCw5MCw0LDk4LDk3LDExNSwxMDEsMjE4LDMsMTE1LDEwMSwxMTIsMjE4LDQsMTE0LDEwMSwKKyAgICAxMTUsMTE2LDkwLDMsMTE2LDk3LDEwMyw5MCwxNSw5NywxMDgsMTA5LDExMSwxMTUsMTE2LDk1LAorICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNiwwLDAsMCwyMTgsMTcsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsCisgICAgMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwyNTQsMCwwLDAsMTE1LDQ2LAorICAgIDAsMCwwLDAsMTgsMTIsMSw5LDEsNywxLDEyLDEsNiwxLDEyLAorICAgIDEsMTgsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLDEyLDEsMzYsMSwxMiwKKyAgICAxLDE4LDEsOSwyLDEyLDEsMTIsMSwxMiwxLDEyLDEsMjEsMSwyMSwKKyAgICAxLDExNCw4MSwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsOCwKKyAgICAwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw2MiwxLDAsMCwKKyAgICAxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LAorICAgIDMwLDAsMTE2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTYsNCwKKyAgICAwLDEyNCwwLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDEsMCwxMjUsMiwwLAorICAgIDExNiw0LDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMSwwLDEyNSwKKyAgICAzLDAsMTI0LDMsMCwxMTYsNSwwLDEwNywzLDAsMTE0LDEwMiwwLDExNiw2LAorICAgIDAsMTAwLDMsMCwxMDYsNywwLDExNiw1LDAsMTI0LDAsMCwxMzEsMiwwLAorICAgIDEzMSwxLDAsMTMwLDEsMCwxMjQsMiwwLDEwNiw4LDAsMTAwLDQsMCwxMzEsCisgICAgMSwwLDEyNSw0LDAsMTI0LDQsMCwxMDAsMTEsMCwxMDcsNywwLDExNCwxNTMsCisgICAgMCwxMTYsNiwwLDEwMCw3LDAsMTA2LDcsMCwxMjQsMiwwLDEzMSwxLDAsCisgICAgMTMxLDEsMCwxMzAsMSwwLDExMCwxMjUsMCwxMjQsNCwwLDEwMCw2LDAsMTA3LAorICAgIDIsMCwxMTQsMjIsMSwxMjQsMiwwLDEwNiw5LDAsMTAwLDQsMCwxMDAsNSwKKyAgICAwLDEzMSwyLDAsMTAwLDEyLDAsMjUsMTI1LDUsMCwxMjQsNSwwLDEwNiwxMCwKKyAgICAwLDExNiwxMSwwLDEzMSwxLDAsMTE1LDIyMywwLDExNiw2LDAsMTAwLDgsMCwKKyAgICAxMDYsNywwLDExNiwxMSwwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLDEyNCwKKyAgICA1LDAsMTE2LDEyLDAsMTE2LDExLDAsMTMxLDEsMCwxMDAsMSwwLDEzMywyLAorICAgIDAsMjUsMTI1LDYsMCwxMjQsNiwwLDEwNiwxMywwLDEzMSwwLDAsMTE1LDIyLAorICAgIDEsMTE2LDYsMCwxMDAsOSwwLDEwNiw3LDAsMTI0LDUsMCwxMzEsMSwwLAorICAgIDEzMSwxLDAsMTMwLDEsMCwxMjQsMiwwLDEwNiwxNCwwLDEwMCw0LDAsMTMxLAorICAgIDEsMCwxMDAsMTAsMCwyNSwxMjUsNywwLDExNiwxNSwwLDEyNCwxLDAsMTI0LAorICAgIDcsMCwxMTYsMTYsMCwxMDAsMTAsMCwyNSwyMywxMzEsMiwwLDgzLDQxLDEzLAorICAgIDk3LDExMCwxLDAsMCw3MSwxMDUsMTE4LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAorICAgIDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiw0NiwxMTIsMTIxLDk5LDQ2LDMyLDEwMiwKKyAgICAxMDUsMTA4LDEwMSw0NCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwxMjEsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsNDYsCisgICAgMTEyLDEyMSw5OSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAwLDExMSwxMDEsMTE1LDMyLDExMCwxMTEsCisgICAgMTE2LDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsNTksCisgICAgMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTIxLDMyLDExNCwxMDEsMTE2LAorICAgIDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLAorICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsCisgICAgMTAxLDMyLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTAwLDMyLDExNiwxMTEsMzIsCisgICAgOTksMTExLDExNCwxMTQsMTAxLDExNSwxMTIsMTExLDExMCwxMDAsMzIsMTE2LDExMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiw0NiwxMTIsMTIxLDk5LDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwzMiwzMiw3MywxMDIsCisgICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAwLDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwKKyAgICAxMTEsMTE2LDMyLDk5LDExMSwxMTAsMTAyLDExMSwxMTQsMTA5LDMyLDExNiwxMTEsMzIsODAsNjksCisgICAgODAsMzIsNTEsNDksNTIsNTUsNDcsNTIsNTYsNTYsMzIsMTAyLDExMSwxMTQsMTA5LDk3LAorICAgIDExNiw0NCwzMiw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTE5LDEwNSwKKyAgICAxMDgsMTA4LDMyLDk4LDEwMSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDMyLDczLDEwMiwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCisgICAgMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsCisgICAgMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDc4LAorICAgIDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsCisgICAgMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsNzgsMTIyLDM2LDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAorICAgIDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiwKKyAgICA5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwxMjIsMzcsMTIzLDEyNSwzMiwxMTAsCisgICAgMTExLDExNiwzMiw5OCwxMTEsMTE2LDExNiwxMTEsMTA5LDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsCisgICAgMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsCisgICAgMTI1LDExNCw2MCwwLDAsMCwxMTQsNTgsMCwwLDAsMjMzLDMsMCwwLDAsCisgICAgMTIyLDMzLDEwMSwxMjAsMTEyLDEwMSw5OSwxMTYsMTAxLDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsCisgICAgNTAsMzIsMTExLDExNCwzMiw1MSwzMiwxMDAsMTExLDExNiwxMTUsMzIsMTA1LDExMCwzMiwxMjMsCisgICAgMzMsMTE0LDEyNSwxMjIsNTcsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDk3LDExNiwxMDUsMTExLAorICAgIDExMCwzMiwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDIsMTA1LDEwOCwKKyAgICAxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTAwLDExMSwxMDEsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExNSwKKyAgICAxMTYsOTcsMTE0LDExNiwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTIzLDMzLDExNCwxMjUsMTIyLDUyLAorICAgIDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTA4LDEwMSwxMTgsCisgICAgMTAxLDEwOCwzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LAorICAgIDExMCwzMiw5NywxMDgsMTEyLDEwNCw5NywxMTAsMTE3LDEwOSwxMDEsMTE0LDEwNSw5OSwzMiwxMTgsCisgICAgOTcsMTA4LDExNywxMDEsMTE0LDYxLDAsMCwwLDYyLDIsMCwwLDAsMTE0LDU4LAorICAgIDAsMCwwLDExNCw4MiwwLDAsMCwyMzMsMjU0LDI1NSwyNTUsMjU1LDQxLDE3LDExNCwKKyAgICA4LDAsMCwwLDExNCw2NiwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDY4LAorICAgIDAsMCwwLDExNCw0MCwwLDAsMCwxMTQsNzUsMCwwLDAsMTE0LDczLDAsCisgICAgMCwwLDExNCw0OSwwLDAsMCwyMTgsNSw5OSwxMTEsMTE3LDExMCwxMTYsMTE0LDM2LAorICAgIDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsNzQsMCwwLDAsMTE0LDMzLDAsCisgICAgMCwwLDExNCw3MiwwLDAsMCwyMTgsOSwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDExNCwzMCwwLDAsMCwyMTgsMTUsODMsNzksODUsODIsNjcsNjksOTUsCisgICAgODMsODUsNzAsNzAsNzMsODgsNjksODMsNDEsOCwxMTQsMzcsMCwwLDAsMTE0LAorICAgIDc4LDAsMCwwLDkwLDE2LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTA1LAorICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTAsNywxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTAsCisgICAgOSwxMDAsMTExLDExNiw5NSw5OSwxMTEsMTE3LDExMCwxMTYsMTE0LDU5LDAsMCwwLDkwLAorICAgIDksMTExLDExMiwxMTYsOTUsMTA4LDEwMSwxMTgsMTAxLDEwOCw5MCwxMyw5OCw5NywxMTUsMTAxLAorICAgIDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNiwwLDAsMCwyMTgsMTcsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICA5NSwxMDIsMTE0LDExMSwxMDksOTUsOTksOTcsOTksMTA0LDEwMSw0MiwxLDAsMCwxMTUsCisgICAgNDQsMCwwLDAsMCw5LDE4LDEsMTIsMSwxOCwxLDE4LDEsMTIsMSwKKyAgICA5LDEsMTUsMSwxNSwxLDEyLDEsOSwxLDE1LDEsMTIsMSwyMiwxLAorICAgIDE1LDEsOSwxLDEyLDEsMjIsMSwxMiwxLDksMSwxMiwxLDE5LDEsCisgICAgMTE0LDg3LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsCisgICAgMCwwLDEyLDAsMCwwLDY3LDAsMCwwLDExNSwxNjQsMCwwLDAsMTE2LAorICAgIDAsMCwxMjQsMCwwLDEzMSwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyMiwKKyAgICAwLDEwMCwyLDAsODMsMTI0LDAsMCwxMDYsMSwwLDEwMCwzLDAsMTMxLDEsCisgICAgMCw5MiwzLDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDEsMCwKKyAgICAxMiwxMTUsODEsMCwxMjQsMywwLDEwNiwyLDAsMTMxLDAsMCwxMDAsNywwLAorICAgIDEwMCw4LDAsMTMzLDIsMCwyNSwxMDAsNiwwLDEwNywzLDAsMTE0LDg1LDAsCisgICAgMTI0LDAsMCw4MywxMjEsMTYsMCwxMTYsMywwLDEyNCwwLDAsMTMxLDEsMCwKKyAgICAxMjUsNCwwLDg3LDExMCw0MCwwLDQsMTE2LDQsMCwxMTYsNSwwLDEwMiwyLAorICAgIDAsMTA3LDEwLDAsMTE0LDE0MywwLDEsMSwxLDEyNCwwLDAsMTAwLDIsMCwKKyAgICAxMDAsOSwwLDEzMywyLDAsMjUsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDExNiwKKyAgICA2LDAsMTI0LDQsMCwxMzEsMSwwLDExNCwxNjAsMCwxMjQsNCwwLDgzLDEyNCwKKyAgICAwLDAsODMsNDEsMTAsMTIyLDE4OCw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw5NywKKyAgICAzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLAorICAgIDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDQwLDEwNSwxMDIsMzIsMTEyLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsCisgICAgMTAxLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsCisgICAgMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDExNSwzMiwxMTIsMTE3LAorICAgIDExNCwxMDEsMTA4LDEyMSwzMiwxMDIsMTExLDExNCwzMiw5OCw5Nyw5OSwxMDcsMTE5LDk3LDExNCwKKyAgICAxMDAsMTE1LDQ1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsMTA1LDEwOCwxMDUsMTE2LDEyMSwKKyAgICAzMiwxMDIsMTExLDExNCwxMCwzMiwzMiwzMiwzMiw4MCwxMjEsNzMsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiw5NSw2OSwxMjAsMTAxLDk5LDY3LDExMSwxMDAsMTAxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgODcsMTA1LDExNiwxMDQsNzAsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDQwLDQxLDMyLAorICAgIDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsNjcsMzIsNjUsODAsNzMsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMTE0LDYxLDAsMCwwLDc4LDExNCw2MCwwLDAsMCwxMTQsODIsCisgICAgMCwwLDAsMTE0LDMxLDAsMCwwLDkwLDIsMTEyLDEyMSwyMzMsMjUzLDI1NSwyNTUsCisgICAgMjU1LDIzMywyNTUsMjU1LDI1NSwyNTUsMTE0LDg5LDAsMCwwLDQxLDcsMTE0LDMzLDAsCisgICAgMCwwLDExNCwzNCwwLDAsMCwyMTgsNSwxMDgsMTExLDExOSwxMDEsMTE0LDExNCw4NywKKyAgICAwLDAsMCwxMTQsNjgsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw0NiwwLAorICAgIDAsMCw0MSw1LDIxOCwxMyw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsCisgICAgOTcsMTE2LDEwNCwxMTQsODAsMCwwLDAsMTE0LDM4LDAsMCwwLDkwLDksMTAxLAorICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMjE4LDExLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgOTUsMTEyLDk3LDExNiwxMDQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDYsMCwwLDAsMjE4LDE1LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsMTAyLDEwNSwxMDgsMTAxLDc1LDEsMCwwLDExNSwyMCwwLDAsMCwwLDcsCisgICAgMTgsMSw0LDEsMjQsMSwzNSwxLDQsMSwzLDEsMTYsMSwxOSwxLAorICAgIDIxLDEsMTE0LDkzLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAxLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSw5MiwwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTE2LDEsMCwxMTYsMiwwLDEzMSwxLDAsCisgICAgMTMxLDEsMCwxMTQsNTksMCwxMjEsMTQsMCwxMTYsMywwLDEyNCwwLDAsMTMxLAorICAgIDEsMCw4Myw4NywxMTMsODgsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDU1LAorICAgIDAsMSwxLDEsODksMTEzLDg4LDAsODgsMTEwLDI5LDAsMTI0LDAsMCwxMDYsCisgICAgMCwwLDExNiwxLDAsMTE2LDUsMCwxMzEsMSwwLDEzMSwxLDAsMTE0LDg0LAorICAgIDAsMTI0LDAsMCw4MywxMDAsMCwwLDgzLDEwMCwwLDAsODMsNDEsMSw3OCwKKyAgICA0MSw2LDIxOCw4LDEwMSwxMTAsMTAwLDExNSwxMTksMTA1LDExNiwxMDQsMjE4LDUsMTE2LDExNywKKyAgICAxMTIsMTA4LDEwMSwxMTQsODYsMCwwLDAsMTE0LDgxLDAsMCwwLDExNCw2OCwwLAorICAgIDAsMCwxMTQsNzYsMCwwLDAsNDEsMSwyMTgsOCwxMDIsMTA1LDEwOCwxMDEsMTEwLAorICAgIDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwKKyAgICAwLDAsMjE4LDExLDk1LDEwMywxMDEsMTE2LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk0LAorICAgIDEsMCwwLDExNSwxNiwwLDAsMCwwLDEsMjEsMSwzLDEsMTQsMSwKKyAgICAxMywxLDgsMSwyMSwxLDQsMiwxMTQsOTcsMCwwLDAsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDYwLDAsMCwwLDEyMSwxOSwwLDExNiwwLDAsMTI0LDAsMCwKKyAgICAxMzEsMSwwLDEwNiwxLDAsMTI1LDEsMCw4NywxMTAsMjQsMCw0LDExNiwyLAorICAgIDAsMTA3LDEwLDAsMTE0LDQ1LDAsMSwxLDEsMTAwLDEsMCwxMjUsMSwwLAorICAgIDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMiwwLDc5LDEyNSwxLDAsMTI0LAorICAgIDEsMCw4Myw0MSwzLDEyMiw1MSw2Nyw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTIsMTAxLDExNCwxMDksMTA1LDExNSwKKyAgICAxMTUsMTA1LDExMSwxMTAsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDk4LDEyMSwxMTYsMTAxLAorICAgIDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMDUsMTgyLDEsMCwwLDIzMywKKyAgICAxMjgsMCwwLDAsNDEsMywxMTQsNDEsMCwwLDAsMTE0LDQzLDAsMCwwLAorICAgIDExNCw0MiwwLDAsMCw0MSwyLDExNCwzNywwLDAsMCwxMTQsNDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLDAsCisgICAgMjE4LDEwLDk1LDk5LDk3LDEwOCw5OSw5NSwxMDksMTExLDEwMCwxMDEsMTA2LDEsMCwwLAorICAgIDExNSwxMiwwLDAsMCwwLDIsMywxLDE5LDEsMTMsMSwxMSwzLDEwLAorICAgIDEsMTE0LDk5LDAsMCwwLDIxOCw5LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTA1LDExNiwKKyAgICAxMjEsMTE0LDMxLDAsMCwwLDk5LDEsMCwwLDAsMSwwLDAsMCwzLAorICAgIDAsMCwwLDQsMCwwLDAsNzEsMCwwLDAsMTE1LDc1LDAsMCwwLAorICAgIDExNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTA3LDUsMCwxMTQsCisgICAgNzEsMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDYsMCwxMzEsMSwwLDExNSw0MywKKyAgICAwLDEwMCwzLDAsMTI0LDAsMCwyMywxMjUsMCwwLDExNiw0LDAsMTI0LDAsCisgICAgMCwxMDYsNSwwLDEyNCwyLDAsMTQwLDAsMCwxMDAsNCwwLDExNiwwLDAsCisgICAgMTA2LDYsMCwxMzEsMSwxLDEsMTAwLDUsMCw4Myw0MSw3LDEyMiw2MSw4MCwKKyAgICAxMTQsMTA1LDExMCwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsCisgICAgMzIsMTE2LDExMSwzMiwxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCwzMiwxMDUsMTAyLDMyLDQ1LDExOCwKKyAgICA0Nyw4MCw4OSw4NCw3Miw3OSw3OCw4Niw2OSw4Miw2Niw3OSw4Myw2OSwzMiwxMDUsCisgICAgMTE1LDMyLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDExMSwxMTAsNDYsMjUwLDEsMzUsMjUwLAorICAgIDcsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTIyLDIsMzUsMzIsMTE0LDU2LDAsMCwKKyAgICAwLDc4LDQxLDIsMTE0LDEwMSwwLDAsMCwxMTQsMTAyLDAsMCwwLDQxLDcsCisgICAgMTE0LDgsMCwwLDAsMTE0LDY5LDAsMCwwLDIxOCw3LDExOCwxMDEsMTE0LDk4LAorICAgIDExMSwxMTUsMTAxLDExNCwxMCwwLDAsMCwyMTgsNSwxMTIsMTE0LDEwNSwxMTAsMTE2LDExNCwKKyAgICA0OSwwLDAsMCwyMTgsNiwxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCw0MSwzLDExNCw3NywKKyAgICAwLDAsMCwxMTQsMTAwLDAsMCwwLDIxOCw0LDk3LDExNCwxMDMsMTE1LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxNiw5NSwKKyAgICAxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTgsCisgICAgMSwwLDAsMTE1LDgsMCwwLDAsMCwyLDE4LDEsMTUsMSwxMCwxLAorICAgIDExNCwxMDcsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsMTEsMCwwLDAsMywwLDAsMCwxMTUsODQsMCwwLDAsMTAwLAorICAgIDEsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzNCwxLAorICAgIDAsMTI1LDEsMCwxMjEsMTMsMCwxMTYsMCwwLDEwNiwxLDAsMTI1LDIsMCwKKyAgICA4NywxMTAsMzAsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDY2LDAsMSwxLAorICAgIDEsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsMTI1LDIsMCw4OSwxMTAsMSwKKyAgICAwLDg4LDEyNCwyLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsCisgICAgMSwwLDgzLDQxLDYsMTIyLDI1Miw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwKKyAgICAzMiwxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsOTcsMTE2LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTQsMTAxLDExMywxMTcsMTAxLDExNSwxMTYsMTAxLDEwMCwzMiwxMDksOTcsMTE2LDk5LDEwNCwKKyAgICAxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLAorICAgIDMyLDMyLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTksOTcsMTEwLDMyLDEwNCw5NywKKyAgICAxMTAsMTAwLDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDIsCisgICAgMTA1LDExNCwxMTUsMTE2LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiw0MCwxMTUsCisgICAgMTAxLDEwOCwxMDIsNDEsMzIsMTA5LDExNywxMTUsMTE2LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLAorICAgIDMyLDk1LDExMCw5NywxMDksMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTUsMTAxLDk5LDExMSwxMTAsMTAwLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwKKyAgICAzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDEsMTAwLAorICAgIDMyLDk3LDEwMyw5NywxMDUsMTEwLDExNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDk5LDExMSwxMDksMTEyLDk3LDExNCwxMDUsMTE1LDExMSwxMTAsMzIsMTAyLDk3LDEwNSwxMDgsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDExMCwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsCisgICAgMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsNzgsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLAorICAgIDAsNSwwLDAsMCwzMSwwLDAsMCwxMTUsODksMCwwLDAsMTI0LDEsCisgICAgMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDI0LDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDEyNSwxLDAsMTEwLDQ2LDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA3LAorICAgIDMsMCwxMTQsNzAsMCwxMTYsMSwwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMCwKKyAgICAwLDEyNCwxLDAsMTAyLDIsMCwyMiwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsCisgICAgMSwxMzAsMSwwLDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsCisgICAgMTI0LDMsMCwxNDIsMiwwLDgzLDQxLDMsNzgsMTIyLDMwLDEwOCwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMzcsMTE1LDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwKKyAgICAzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDM3LDExNSwyMTgsNCwxMTAsOTcsMTA5LDEwMSwKKyAgICA0MSwyLDExNCwxMDgsMCwwLDAsMjE4LDExLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksCisgICAgMTE0LDExNCwxMTEsMTE0LDQxLDQsMjE4LDQsMTE1LDEwMSwxMDgsMTAyLDExNCwxMDgsMCwwLAorICAgIDAsMTE0LDEwNiwwLDAsMCw5MCw2LDEwNywxMTksOTcsMTE0LDEwMywxMTUsNDEsMSwKKyAgICAyMTgsNiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTQsNCwwLDAsMCwxMTQsNiwwLAorICAgIDAsMCwyMTgsMTksOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsCisgICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMTM0LDEsMCwwLDExNSwxMiwwLDAsMCwKKyAgICAwLDEsMTIsMSwxMiwxLDE1LDEsNiwxLDI1LDEsMTIyLDQwLDk1LDk5LAorICAgIDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LAorICAgIDExNSw2Miw0Niw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSw5NSwxMTksCisgICAgMTE0LDk3LDExMiwxMTIsMTAxLDExNCw5OSwyLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCw3LDAsMCwwLDgzLDAsMCwwLDExNSw5MiwwLDAsMCwKKyAgICAxMjAsNjYsMCwxMDAsMSwwLDEwMCwyLDAsMTAwLDMsMCwxMDAsNCwwLDEwMywKKyAgICA0LDAsNjgsOTMsNDYsMCwxMjUsMiwwLDExNiwwLDAsMTI0LDEsMCwxMjQsCisgICAgMiwwLDEzMSwyLDAsMTE0LDE5LDAsMTE2LDEsMCwxMjQsMCwwLDEyNCwyLAorICAgIDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMzEsMywwLAorICAgIDEsMTEzLDE5LDAsODcsMTI0LDAsMCwxMDYsMywwLDEwNiw0LDAsMTI0LDEsCisgICAgMCwxMDYsMywwLDEzMSwxLDAsMSwxMDAsMCwwLDgzLDQxLDUsNzgsMjE4LAorICAgIDEwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDIxOCw4LDk1LDk1LDExMCwKKyAgICA5NywxMDksMTAxLDk1LDk1LDIxOCwxMiw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LAorICAgIDEwMSw5NSw5NSwyMTgsNyw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDQxLDUsMjE4LDcsCisgICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwyMTgsNywxMTUsMTAxLDExNiw5NywxMTYsMTE2LDExNCwKKyAgICAyMTgsNywxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwyMTgsOCw5NSw5NSwxMDAsMTA1LDk5LAorICAgIDExNiw5NSw5NSwyMTgsNiwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDQxLDMsOTAsMywxMTAsCisgICAgMTAxLDExOSw5MCwzLDExMSwxMDgsMTAwLDExNCw1NCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwyMTgsNSw5NSwxMTksMTE0LAorICAgIDk3LDExMiwxNDUsMSwwLDAsMTE1LDgsMCwwLDAsMCwxLDI1LDEsMTUsCisgICAgMSwyOSwxLDEyMiwyNiw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSwKKyAgICA0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE5LDExNCw5NywxMTIsNDEsCisgICAgMywyMTgsMTAsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExNCwxMjIsMCwKKyAgICAwLDAsMjE4LDksNzgsOTcsMTA5LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsNDEsMywxMTQsCisgICAgMTExLDAsMCwwLDExNCwxMTIsMCwwLDAsMTE0LDEyMiwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCw0MSwxLDExNCwxMTEsMCwwLDAsMTE0LDYsMCwwLDAsMjE4LAorICAgIDExLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDEyNiwxLDAsMCwKKyAgICAxMTUsMTQsMCwwLDAsMCw4LDIxLDcsMywxLDEzLDEsMTMsMiwxNywKKyAgICA1LDEzLDEsMTE0LDEyNSwwLDAsMCw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw4NCwwLAorICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsCisgICAgMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsCisgICAgMTE0LDgwLDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgwLDAsMTAwLAorICAgIDIsMCwxMjUsNCwwLDExNiwyLDAsMTA2LDMsMCwxMjQsNCwwLDEwNiw0LAorICAgIDAsMTI0LDMsMCwxMDAsMywwLDI1LDEzMSwxLDAsMTE2LDUsMCwxMzEsMiwKKyAgICAwLDEsMTI0LDIsMCw4Myw0MSw0LDEyMiwxNTUsODQsMTE0LDEyMSwzMiwxMTYsMTExLAorICAgIDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwKKyAgICAxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsMTIxLDMyLDEwMCwxMDEsMTA4LDEwMSwxMDMsCisgICAgOTcsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE1LDEwMSwxMDgsCisgICAgMTAyLDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLDQxLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCisgICAgMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCwzMiwKKyAgICAxMDUsMTEwLDMyLDEwMiw5NywxMTgsMTExLDExNCwzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTEwLDEwMCwKKyAgICAxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw0MCw0MSw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiw3OCwxMjIsNDQsNzgsMTExLDExNiwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwxMDUsMTEwLDEwMywzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLAorICAgIDEyMywxMjUsNTgsMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDk1LDk1LDEwNSwxMTAsCisgICAgMTA1LDExNiw5NSw5NSwxMTQsNjEsMCwwLDAsNDEsNiwyMTgsMTEsMTAyLDEwNSwxMTAsCisgICAgMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE0LDMzLDAsMCwwLDExNCw2MiwwLAorICAgIDAsMCwxMTQsNjMsMCwwLDAsMTE0LDQ5LDAsMCwwLDIxOCwxMyw3MywxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDg3LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsNDEsNSwxMTQsMTEwLDAsCisgICAgMCwwLDIxOCw4LDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwyMTgsNiwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDIxOCw4LDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsMjE4LDMsCisgICAgMTA5LDExNSwxMDMsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwKKyAgICAwLDAsMjE4LDE3LDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA5NSwxMTUsMTA0LDEwNSwxMDksMTU0LDEsMCwwLDExNSwxMCwwLDAsMCwwLDEwLAorICAgIDIxLDEsMjQsMSw2LDEsMjksMSwxMTQsMTMyLDAsMCwwLDk5LDQsMCwKKyAgICAwLDAsMCwwLDAsMCwxMSwwLDAsMCwxOSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMjQwLDEsMCwwLDEwNSwwLDAsMTI1LDQsMCwxMjQsMiwwLAorICAgIDEwMCwxLDAsMTA3LDksMCwxMTQsMzEsMCwxMjQsMiwwLDEyNCw0LDAsMTAwLAorICAgIDIsMCw2MCwxMTAsNiwwLDEwMCwzLDAsMTI1LDIsMCwxMjQsMywwLDEwMCwKKyAgICAxLDAsMTA3LDksMCwxMTQsNTksMCwxMjQsMywwLDEyNCw0LDAsMTAwLDQsCisgICAgMCw2MCwxMjQsMCwwLDEwMCwxLDAsMTAwLDUsMCwxMzMsMiwwLDI1LDEyNSwKKyAgICA1LDAsMTI0LDAsMCwxMDAsNSwwLDEwMCw2LDAsMTMzLDIsMCwyNSwxMjUsCisgICAgNiwwLDEyNCwwLDAsMTAwLDYsMCwxMDAsNywwLDEzMywyLDAsMjUsMTI1LAorICAgIDcsMCwxMjQsNSwwLDExNiwwLDAsMTA3LDMsMCwxMTQsMTY4LDAsMTAwLDgsCisgICAgMCwxMDYsMSwwLDEyNCwyLDAsMTI0LDUsMCwxMzEsMiwwLDEyNSw4LDAsCisgICAgMTE2LDIsMCwxMDAsOSwwLDEyNCw4LDAsMTMxLDIsMCwxLDExNiwzLDAsCisgICAgMTI0LDgsMCwxMjQsNCwwLDE0MSwxLDAsMTMwLDEsMCwxMTAsMTE5LDAsMTE2LAorICAgIDQsMCwxMjQsNiwwLDEzMSwxLDAsMTAwLDUsMCwxMDcsMywwLDExNCwyMjksCisgICAgMCwxMDAsMTAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsOCwwLAorICAgIDExNiwyLDAsMTAwLDksMCwxMjQsOCwwLDEzMSwyLDAsMSwxMTYsNSwwLAorICAgIDEyNCw4LDAsMTMxLDEsMCwxMzAsMSwwLDExMCw1OCwwLDExNiw0LDAsMTI0LAorICAgIDcsMCwxMzEsMSwwLDEwMCw1LDAsMTA3LDMsMCwxMTQsMzEsMSwxMDAsMTEsCisgICAgMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsOCwwLDExNiwyLDAsCisgICAgMTAwLDksMCwxMjQsOCwwLDEzMSwyLDAsMSwxMTYsNSwwLDEyNCw4LDAsCisgICAgMTMxLDEsMCwxMzAsMSwwLDEyNCwxLDAsMTAwLDEsMCwxMDcsOSwwLDExNCwKKyAgICAyMjYsMSwxMjEsMjAsMCwxMTYsNiwwLDEyNCwxLDAsMTAwLDEyLDAsMjUsMTMxLAorICAgIDEsMCwxMjUsOSwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsMTAsMCwKKyAgICAxMTQsODMsMSwxLDEsMSw4OSwxMTAsNjIsMCw4OCwxMTYsOCwwLDEyNCw2LAorICAgIDAsMTMxLDEsMCwxMjQsOSwwLDEwNywzLDAsMTE0LDE0NSwxLDEwMCwxMywwLAorICAgIDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LDIsMCwxMDAsCisgICAgOSwwLDEyNCw4LDAsMTMxLDIsMCwxLDExNiwzLDAsMTI0LDgsMCwxMjQsCisgICAgNCwwLDE0MSwxLDAsMTMwLDEsMCwxMjEsMTgsMCwxMjQsMSwwLDEwMCwxNCwKKyAgICAwLDI1LDEwMCwxNSwwLDY0LDEyNSwxMCwwLDg3LDExMCwxOCwwLDQsMTE2LDcsCisgICAgMCwxMDcsMTAsMCwxMTQsMTgzLDEsMSwxLDEsODksMTEwLDQzLDAsODgsMTE2LAorICAgIDgsMCwxMjQsNywwLDEzMSwxLDAsMTI0LDEwLDAsMTA3LDMsMCwxMTQsMjI2LAorICAgIDEsMTE2LDMsMCwxMDAsMTMsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwKKyAgICAxMjQsNCwwLDE0MSwxLDAsMTMwLDEsMCwxMjQsMCwwLDEwMCw3LDAsMTAwLAorICAgIDEsMCwxMzMsMiwwLDI1LDgzLDQxLDE2LDk3LDEyMiwxLDAsMCw4Niw5NywKKyAgICAxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNCwxMDEsOTcsMTAwLDEwMSwKKyAgICAxMTQsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDQ1LAorICAgIDEwNSwxMTAsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsOTcsMTAzLDk3LDEwNSwKKyAgICAxMTAsMTE1LDExNiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LDExNSwKKyAgICAzMiw0MCwxMDUsMTAyLDEwLDMyLDMyLDMyLDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsNDEsMzIsCisgICAgOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LAorICAgIDEwMSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwKKyAgICA5OSw5NywxMTAsMzIsOTgsMTAxLDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDEwMCwzMiwKKyAgICA5OCwxMjEsMzIsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsNDAsNDEsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMTEsMTE2LDEwNCwxMDEsMTE0LDMyLDk3LDExNCwxMDMsCisgICAgMTE3LDEwOSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsCisgICAgMTE2LDExMSwzMiwxMDEsMTEwLDEwNCw5NywxMTAsOTksMTAxLDMyLDEwMSwxMTQsMTE0LDExMSwxMTQsCisgICAgMzIsMTE0LDEwMSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwxMDMsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwKKyAgICAxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksOTcsMTAzLDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsCisgICAgMTA1LDExMCw5OSwxMTEsMTE0LDExNCwxMDEsOTksMTE2LDMyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDExNSwxMTYsOTcsCisgICAgMTA4LDEwMSw0NiwzMiw2OSw3OSw3MCw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwKKyAgICAxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDAsOTcsMTE2LDk3LDMyLDEwNSwxMTUsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiwxMTYsMTExLAorICAgIDMyLDk4LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTE0LDExNywxMTAsOTksOTcsMTE2LDEwMSwKKyAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsMTE0LDEwOCwwLDAsMCwxMjIsMTAsCisgICAgNjAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNjIsMTE0LDM3LDAsMCwwLDExNCwKKyAgICAxNCwwLDAsMCwyMzMsOCwwLDAsMCwyMzMsMTIsMCwwLDAsMTIyLDMwLAorICAgIDk4LDk3LDEwMCwzMiwxMDksOTcsMTAzLDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LAorICAgIDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsMTIyLDIsCisgICAgMTIzLDEyNSwxMjIsNDMsMTE0LDEwMSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiw2OSw3OSw3MCwzMiwKKyAgICAxMTksMTA0LDEwNSwxMDgsMTAxLDMyLDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDUsCisgICAgMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMjIsCisgICAgNDgsMTE0LDEwMSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiw2OSw3OSw3MCwzMiwxMTksMTA0LDEwNSwKKyAgICAxMDgsMTAxLDMyLDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwxMDUsMTIyLDEwMSwzMiwKKyAgICAxMTEsMTAyLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LAorICAgIDEyNSwyMTgsNSwxMDksMTE2LDEwNSwxMDksMTAxLDEyMiwyNiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsCisgICAgMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDExNSwxMTYsOTcsMTA4LDEwMSwzMiwxMDIsMTExLDExNCwzMiwKKyAgICAxMjMsMzMsMTE0LDEyNSwyMTgsNCwxMTUsMTA1LDEyMiwxMDEsMTA4LDMsMCwwLDAsMjU1LAorICAgIDEyNywyNTUsMTI3LDMsMCw0MSw5LDIxOCwxMiw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCwKKyAgICA4NSw3Nyw2Niw2OSw4MiwxMTQsNDksMCwwLDAsMTE0LDEwNywwLDAsMCwxMTQsCisgICAgMTA5LDAsMCwwLDExNCwzMywwLDAsMCwyMTgsOCw2OSw3OSw3MCw2OSwxMTQsCisgICAgMTE0LDExMSwxMTQsMTE0LDE2LDAsMCwwLDIxOCw4LDc1LDEwMSwxMjEsNjksMTE0LDExNCwKKyAgICAxMTEsMTE0LDExNCwyMSwwLDAsMCw0MSwxMSwxMTQsNTUsMCwwLDAsMjE4LDEyLAorICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNCwxMDgsMCwwLAorICAgIDAsMTE0LDM3LDAsMCwwLDkwLDExLDEwMSwxMjAsOTksOTUsMTAwLDEwMSwxMTYsOTcsCisgICAgMTA1LDEwOCwxMTUsOTAsNSwxMDksOTcsMTAzLDEwNSw5OSw5MCwxMywxMTQsOTcsMTE5LDk1LAorICAgIDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsOTAsOCwxMTQsOTcsMTE5LDk1LDExNSwKKyAgICAxMDUsMTIyLDEwMSwxMTQsNzcsMCwwLDAsMjE4LDEyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwyMTgsMTEsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsCisgICAgMTA1LDEyMiwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwKKyAgICAwLDAsMjE4LDI1LDk1LDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk4LDEyMSwKKyAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDEwNCwxMDEsOTcsMTAwLDEwMSwxMTQsMTcxLDEsMCwKKyAgICAwLDExNSw3NiwwLDAsMCwwLDExLDYsMSwxMiwxLDEzLDMsNiwxLAorICAgIDEyLDEsMTAsMSwxNiwxLDE2LDEsMTYsMSwxMiwxLDE4LDEsMTMsMSwKKyAgICAxOCwxLDE4LDEsMTUsMSwxMywxLDE1LDEsMTgsMSwxNSwxLDEzLDEsCisgICAgMTIsMSwxMiwxLDMsMSwyMCwxLDEzLDEsNSwyLDE4LDEsMTUsMSwKKyAgICAxMywxLDE1LDEsMywxLDE4LDEsMTMsMSw1LDIsMTgsMSwxNSwxLAorICAgIDksMSwxMTQsMTQzLDAsMCwwLDk5LDQsMCwwLDAsMCwwLDAsMCwKKyAgICA1LDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsMTE1LDExMiwwLDAsCisgICAgMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw0LDAsCisgICAgMTE2LDIsMCwxMjQsNCwwLDExNiwzLDAsMTMxLDIsMCwxMTQsNzUsMCwxMTYsCisgICAgNCwwLDEwMCwxLDAsMTI0LDIsMCwxMzEsMiwwLDEsMTI0LDMsMCwxMDAsCisgICAgMiwwLDEwNyw5LDAsMTE0LDcxLDAsMTE2LDUsMCwxMDYsNiwwLDEyNCw0LAorICAgIDAsMTI0LDMsMCwxMzEsMiwwLDEsMTI0LDQsMCw4MywxMTYsNywwLDEwMCwKKyAgICAzLDAsMTA2LDgsMCwxMjQsMiwwLDEzMSwxLDAsMTAwLDQsMCwxMjQsMSwKKyAgICAwLDEwMCw1LDAsMTI0LDIsMCwxMzEsMSwyLDEzMCwxLDAsMTAwLDIsMCwKKyAgICA4Myw0MSw2LDEyMiw2MCw2NywxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwzMiw5OCwxMjEsMTE2LAorICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwzMiw5NywxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLAorICAgIDEwMCwzMiw5OCwxMjEsMzIsOTUsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTA0LDEwMSw5NywxMDAsMTAxLDExNCw0MCw0MSwKKyAgICA0NiwxMjIsMjEsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwKKyAgICAxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw3OCwxMjIsMjMsNzgsMTExLDExMCw0NSw5OSwKKyAgICAxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwzMiwxMjMsMzMsCisgICAgMTE0LDEyNSwxMTQsMTA4LDAsMCwwLDExNCwzNywwLDAsMCw0MSw5LDIxOCw3LAorICAgIDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsOTAsNSwxMDgsMTExLDk3LDEwMCwxMTUsMjE4LDEwLAorICAgIDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMjE4LDEwLDk1LDk5LDExMSwxMDAsCisgICAgMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTQsMTA3LDAsMCwwLDIxOCw0LDk1LDEwNSwxMDksCisgICAgMTEyLDkwLDE2LDk1LDEwMiwxMDUsMTIwLDk1LDk5LDExMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLAorICAgIDk3LDEwOSwxMDEsMTE0LDEwOSwwLDAsMCwxMTQsNDksMCwwLDAsNDEsNSwxMTQsCisgICAgNTUsMCwwLDAsMTE0LDEwOCwwLDAsMCwxMTQsOTEsMCwwLDAsMTE0LDkyLAorICAgIDAsMCwwLDIxOCw0LDk5LDExMSwxMDAsMTAxLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxNyw5NSw5OSwxMTEsMTA5LDExMiwxMDUsCisgICAgMTA4LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwyMjYsMSwwLDAsMTE1LAorICAgIDE2LDAsMCwwLDAsMiwxNSwxLDE1LDEsMTMsMSwxMiwxLDE2LDEsCisgICAgNCwyLDE4LDEsMTE0LDE0OSwwLDAsMCwxMTQsNjEsMCwwLDAsOTksMywKKyAgICAwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsNzYsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwxLAorICAgIDAsMTI1LDMsMCwxMjQsMywwLDEwNiwyLDAsMTE2LDMsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMTMxLDEsMCwxLDEyNCwzLDAsMTA2LDIsMCwxMTYsMywwLAorICAgIDEyNCwyLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDMsMCwxMDYsMiwwLAorICAgIDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDEsMCwxLAorICAgIDEyNCwzLDAsODMsNDEsMSwxMjIsODAsNjcsMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMzIsCisgICAgOTcsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsCisgICAgMTE2LDExMSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTExLDExNCwzMiwKKyAgICAxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDExNywxMTYsMzIsMTE2LDExMSwzMiw5NywKKyAgICAzMiw5OCwxMjEsMTE2LDEwMSw0NSw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMTAsMzIsCisgICAgMzIsMzIsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDQxLDYsMjE4LDksOTgsMTIxLDExNiwxMDEsCisgICAgOTcsMTE0LDExNCw5NywxMjEsMTE0LDEzNywwLDAsMCwyMTgsNiwxMDEsMTIwLDExNiwxMDEsCisgICAgMTEwLDEwMCwxMTQsMTksMCwwLDAsMTE0LDE0NCwwLDAsMCw5MCw1LDEwMCwxMTcsCisgICAgMTA5LDExMiwxMTUsNDEsNCwxMTQsMTQ4LDAsMCwwLDExNCwxMzUsMCwwLDAsMTE0LAorICAgIDE0MiwwLDAsMCwxMTQsNTUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDYsMCwwLDAsMjE4LDE3LDk1LDk5LDExMSwxMDAsMTAxLDk1LAorICAgIDExNiwxMTEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMjM4LDEsMCwwLDExNSwKKyAgICAxMCwwLDAsMCwwLDMsMTIsMSwxOSwxLDE5LDEsMjIsMSwxMTQsMTUyLAorICAgIDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAorICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDg5LDAsMCwwLDEwMCwxLDAsCisgICAgMTAwLDIsMCwxMDgsMCwwLDEyNSwxLDAsMTE2LDEsMCwxMDYsMiwwLDEyNCwKKyAgICAwLDAsMTMxLDEsMCwxMDYsMywwLDEyNSwyLDAsMTI0LDEsMCwxMDYsNCwKKyAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDExNiwxLDAsMTA2LDUsMCwKKyAgICAxMDAsMiwwLDEwMCwzLDAsMTMxLDIsMCwxMjUsNCwwLDEyNCw0LDAsMTA2LAorICAgIDYsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsMCwxMDAsMSwwLDI1LDEzMSwKKyAgICAxLDAsMTMxLDEsMCw4Myw0MSw0LDEyMiwxMjEsNjgsMTAxLDk5LDExMSwxMDAsMTAxLAorICAgIDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLAorICAgIDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAorICAgIDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODUsMTEwLDEwNSwxMTgsCisgICAgMTAxLDExNCwxMTUsOTcsMTA4LDMyLDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSwzMiwxMTUsMTE3LAorICAgIDExMiwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsNDYsMTAsMzIsCisgICAgMzIsMzIsMzIsMTE0LDYxLDAsMCwwLDc4LDg0LDQxLDcsMjE4LDgsMTE2LDExMSwKKyAgICAxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTQsNTEsMCwwLDAsOTAsNyw2NiwxMjEsMTE2LAorICAgIDEwMSwxMTUsNzMsNzksOTAsOCwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsOTAsMTUsCisgICAgMTAwLDEwMSwxMTYsMTAxLDk5LDExNiw5NSwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsOTAsCisgICAgMjUsNzMsMTEwLDk5LDExNCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDEwOCw3OCwxMDEsMTE5LDEwOCwKKyAgICAxMDUsMTEwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDIxOCw2LDEwMCwxMDEsOTksMTExLAorICAgIDEwMCwxMDEsNDEsNSwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwxMjEsMTE2LAorICAgIDEwMSwxMTUsMTE0LDE1MywwLDAsMCw5MCwyMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LAorICAgIDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsMjE4LDgsCisgICAgMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDkwLDE1LDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLAorICAgIDEwMSw5NSwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNiwwLDAsMCwyMTgsMTMsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwKKyAgICA5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDI0OCwxLDAsMCwxMTUsMTAsMCwwLDAsCisgICAgMCw1LDEyLDEsMTgsMSwxNSwxLDE4LDEsMTE0LDE1NywwLDAsMCwxMTQsCisgICAgMTI5LDAsMCwwLDIxOCwyNiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAorICAgIDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsCisgICAgOTksMiwwLDAsMCwyLDAsMCwwLDksMCwwLDAsMTksMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDg5LDEsMCwwLDEyNCwxLDAsMTAwLDEsMCwKKyAgICAxMDcsOCwwLDExNCw3MywwLDEwMCwyLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwKKyAgICAyLDAsMTAwLDMsMCwxMzEsMiwwLDExNCw3MywwLDEyMSwxOSwwLDEyNCwyLAorICAgIDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDEsMCw4NywxMTAsMTgsCisgICAgMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsODksMTEwLAorICAgIDEsMCw4OCwxMTYsMywwLDEwNiw0LDAsMTI0LDAsMCwxMjQsMiwwLDEwMCwKKyAgICA0LDAsMTI0LDEsMCwxMzEsMiwxLDEyNSw0LDAsMTAwLDUsMCwxMjQsNCwKKyAgICAwLDk1LDUsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMTk0LDAsCisgICAgMTIwLDczLDAsMTE2LDYsMCwxMzEsMCwwLDY4LDkzLDU4LDAsOTIsMiwwLAorICAgIDEyNSw1LDAsMTI1LDYsMCwxMjQsMSwwLDEwNiw3LDAsMTE2LDgsMCwxMjQsCisgICAgNiwwLDEzMSwxLDAsMTMxLDEsMCwxMTQsMTI4LDAsMTI0LDUsMCwxMjQsMCwKKyAgICAwLDEyNCwxLDAsMTMxLDIsMCwxMjUsMiwwLDEyNCwyLDAsMTI0LDQsMCwKKyAgICA5NSw5LDAsODAsMTEzLDEyOCwwLDg3LDEwMCwxLDAsODMsMTI0LDMsMCwxMTYsCisgICAgMTAsMCwxMDcsOCwwLDExNCwyMywxLDExNiwwLDAsMTI0LDIsMCwxMDAsNiwKKyAgICAwLDEzMSwyLDAsMTE0LDMyLDEsMTIxLDE5LDAsMTI0LDIsMCwxMDYsMTEsMCwKKyAgICAxMjQsMCwwLDEzMSwxLDAsMTI1LDcsMCw4NywxMTAsMTgsMCw0LDExNiwyLAorICAgIDAsMTA3LDEwLDAsMTE0LDQsMSwxLDEsMSw4OSwxMTMsMzIsMSw4OCwxMjQsCisgICAgNywwLDExNCwzMiwxLDEwMywwLDAsMTI0LDQsMCw5NSwxMiwwLDExMCw5LAorICAgIDAsMTI0LDMsMCwxMjQsNCwwLDk1LDEyLDAsMTI0LDQsMCwxMDYsMTIsMCwKKyAgICAxMDMsMCwwLDEwNywyLDAsMTE0LDg1LDEsMTI0LDEsMCwxMTQsODUsMSwxMTYsCisgICAgMTMsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDcsMCwyNSwxMjUsOCwwLDEyNCwKKyAgICA0LDAsMTA2LDEyLDAsMTA2LDE0LDAsMTI0LDgsMCwxMzEsMSwwLDEsMTI0LAorICAgIDQsMCw4Myw0MSw4LDk3LDYxLDEsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTgsCisgICAgOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA4LAorICAgIDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTExLAorICAgIDMyLDEwNSwxMTAsMTAwLDEwNSw5OSw5NywxMTYsMTAxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ0LDMyLDExNSwxMDEsMTE2LDEwLDMyLDMyLDMyLDMyLAorICAgIDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LAorICAgIDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSwzMiwxMTYsMTExLDMyLDk3LDMyLAorICAgIDEwOCwxMDUsMTE1LDExNiwzMiwxMTEsMTAyLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwKKyAgICAxMjEsMzIsMTEyLDk3LDExNiwxMDQsMTE1LDQ2LDMyLDMyLDY1LDExMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMDEsMTA5LDExMiwxMTYsMTIxLDMyLDEwOCwxMDUsMTE1LDExNiwzMiwxMDUsMTE1LDMyLDExNSwKKyAgICAxMTcsMTAyLDEwMiwxMDUsOTksMTA1LDEwMSwxMTAsMTE2LDQ0LDMyLDExNiwxMDQsMTExLDExNywxMDMsCisgICAgMTA0LDMyLDEwNSwxMTYsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExMSwxMTYsMTA0LDEwMSwxMTQsMTE5LAorICAgIDEwNSwxMTUsMTAxLDMyLDExNywxMTUsMTAxLDEwMiwxMTcsMTA4LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwKKyAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTE1LDEyMSwxMTUsCisgICAgMTE2LDEwMSwxMDksNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDMyLDEwOSwxMTcsMTE1LDExNiwzMiwxMTYsOTcsMTA3LDEwMSwzMiw5NywKKyAgICAzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTUsMzIsMTA1LDExNiwxMTUsMzIsMTExLDExMCwxMDgsCisgICAgMTIxLDMyLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0MCw0MSwzMiw5NywxMTQsMTAzLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDEyMiw5LDYwLDExNywxMTAsMTA3LDExMCwxMTEsCisgICAgMTE5LDExMCw2MiwyMTgsMTIsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksCisgICAgMTAxLDIxOCw2LDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDg0LDIxOCwxMCwxMDUsMTE1LDk1LDExMiwKKyAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTQsNjEsMCwwLDAsNDEsMTUsMTE0LDExNywwLAorICAgIDAsMCwxMTQsMTU5LDAsMCwwLDExNCwxMDksMCwwLDAsMTE0LDEyMywwLDAsCisgICAgMCwyMTgsMTAsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDkwLDEzLDk1LAorICAgIDExNSwxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSw5NywxMTYsMTE2LDExNCwyMTgsMjcsOTUsMTAzLAorICAgIDEwMSwxMTYsOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsCisgICAgMTAxLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNCw5NCwwLDAsMCwxMTQsOTUsCisgICAgMCwwLDAsMTE0LDEyOSwwLDAsMCwyMTgsOSw5NSw4MCw3OSw4MCw4NSw3NiwKKyAgICA2NSw4NCw2OSwxMTQsMTYxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDQwLDAsCisgICAgMCwwLDIxOCw2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNDEsOSwxMTQsMTA4LDAsMCwKKyAgICAwLDkwLDgsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LDEyOSwwLDAsMCwKKyAgICAxMTQsMTU4LDAsMCwwLDIxOCw0LDExNSwxMTIsMTAxLDk5LDIxOCwxMiwxMDgsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDk1LDk5LDEwOCw5NywxMTUsMTE1LDIxOCw4LDExNSwxMTcsMTAyLDEwMiwxMDUsCisgICAgMTIwLDEwMSwxMTUsMTE0LDE2MSwwLDAsMCw5MCw3LDEwMCwxMDUsMTE0LDExMCw5NywxMDksCisgICAgMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLAorICAgIDIxOCwyMywxMTUsMTEyLDEwMSw5OSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTAyLDEwNSwxMDgsMTAxLAorICAgIDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDksMiwwLDAsMTE1LDYwLDAsCisgICAgMCwwLDAsMTIsMTIsNCw2LDEsMTUsMiwzLDEsMTksMSwxMywxLAorICAgIDUsOCwyNCwxLDksMywxMiwxLDIyLDEsMjEsMSwxNSwxLDksMSwKKyAgICA1LDIsNCwzLDEyLDIsMTUsMSwzLDEsMTksMSwxMywxLDUsMiwKKyAgICA2LDEsMTIsMiw5LDEsMTUsMSw2LDEsMTYsMSwxNiwyLDExNCwxNjksCisgICAgMCwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgNSwwLDAsMCw2NCwwLDAsMCwxMTUsMTIxLDAsMCwwLDEwMSwwLDAsCisgICAgOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwKKyAgICAyLDAsOTAsNCwwLDEwMCwzLDAsOTAsNSwwLDEwMCw0LDAsOTAsNiwKKyAgICAwLDEwMSw3LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsMTMxLDEsMCwKKyAgICA5MCw4LDAsMTAxLDcsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCwxMzEsCisgICAgMSwwLDkwLDksMCwxMDEsNywwLDEwMCw5LDAsMTAwLDksMCwxMDAsMTAsCisgICAgMCwxMDAsMTEsMCwxMzIsMiwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNywwLAorICAgIDEwMCw5LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDEsMCwxMzEsMSwwLDkwLAorICAgIDExLDAsMTAwLDksMCw4Myw0MSwxNCwyMTgsMjEsODcsMTA1LDExMCwxMDAsMTExLDExOSwKKyAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTIyLAorICAgIDYyLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMDEsCisgICAgOTksMTA4LDk3LDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsODcsMTA1LAorICAgIDExMCwxMDAsMTExLDExOSwxMTUsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0NiwxMjIsCisgICAgNTksODMsMTExLDEwMiwxMTYsMTE5LDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCwKKyAgICA5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSwKKyAgICA5NSwxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMTE1LDkyLDEyMywxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDEyMiw2NSw4MywxMTEsCisgICAgMTAyLDExNiwxMTksOTcsMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwKKyAgICAxMTYsMTA0LDExMSwxMTAsNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsCisgICAgMTE0LDExNSwxMDUsMTExLDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLAorICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMjUsOTIsNjgsMTAxLDk4LDExNywxMDMsNzAsCisgICAgOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDY3LDAsMCwwLDEyMSwyMywwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMTYsMCwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMiwwLDgzLAorICAgIDg3LDExMCwzNywwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNjIsMCwxLDEsCisgICAgMSwxMTYsMCwwLDEwNiwxLDAsMTE2LDAsMCwxMDYsNCwwLDEyNCwxLDAsCisgICAgMTMxLDIsMCw4Myw4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsMSw3OCwKKyAgICA0MSw1LDIxOCw3LDk1LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDkwLDcsNzksMTEyLDEwMSwKKyAgICAxMTAsNzUsMTAxLDEyMSw5MCwxNyw3Miw3NSw2OSw4OSw5NSw2Nyw4NSw4Miw4Miw2OSwKKyAgICA3OCw4NCw5NSw4NSw4Myw2OSw4MiwxMTQsNDIsMCwwLDAsOTAsMTgsNzIsNzUsCisgICAgNjksODksOTUsNzYsNzksNjcsNjUsNzYsOTUsNzcsNjUsNjcsNzIsNzMsNzgsNjksCisgICAgNDEsMiwyMTgsMyw5OSwxMDgsMTE1LDExNCw1LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxNCw5NSwxMTEsMTEyLAorICAgIDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw4NywyLDAsMCwxMTUsCisgICAgOCwwLDAsMCwwLDIsMywxLDIzLDEsMTMsMSwxMjIsMzYsODcsMTA1LAorICAgIDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsCisgICAgMTAwLDEwMSwxMTQsNDYsOTUsMTExLDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LAorICAgIDExNCwxMjEsOTksMiwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTYsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE0MywwLDAsMCwxMjQsMCwwLDEwNiwKKyAgICAwLDAsMTE0LDIxLDAsMTI0LDAsMCwxMDYsMSwwLDEyNSwyLDAsMTEwLDksCisgICAgMCwxMjQsMCwwLDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLDEwNiwzLDAsCisgICAgMTAwLDEsMCwxMjQsMSwwLDEwMCwyLDAsMTE2LDQsMCwxMDYsNSwwLDEwMCwKKyAgICAwLDAsMTAwLDMsMCwxMzMsMiwwLDI1LDEzMSwwLDIsMTI1LDMsMCwxMjEsCisgICAgNDcsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsMCwxMzEsMSwwLDE0MywyNSwKKyAgICAwLDEyNSw0LDAsMTE2LDcsMCwxMDYsOCwwLDEyNCw0LDAsMTAwLDQsMCwKKyAgICAxMzEsMiwwLDEyNSw1LDAsODcsMTAwLDAsMCw4MSw4Miw4OCw4NywxMTAsMjIsCisgICAgMCw0LDExNiw5LDAsMTA3LDEwLDAsMTE0LDEzOCwwLDEsMSwxLDEwMCwwLAorICAgIDAsODMsODksMTEwLDEsMCw4OCwxMjQsNSwwLDgzLDQxLDUsNzgsMTE0LDEyOCwKKyAgICAwLDAsMCw5MCwxMSwxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsCisgICAgMTE0LDgyLDAsMCwwLDExNCwzMiwwLDAsMCw0MSwxMCwyMTgsMTEsNjgsNjksCisgICAgNjYsODUsNzEsOTUsNjYsODUsNzMsNzYsNjgsMjE4LDE4LDgyLDY5LDcxLDczLDgzLAorICAgIDg0LDgyLDg5LDk1LDc1LDY5LDg5LDk1LDY4LDY5LDY2LDg1LDcxLDIxOCwxMiw4MiwKKyAgICA2OSw3MSw3Myw4Myw4NCw4Miw4OSw5NSw3NSw2OSw4OSwxMTQsNDksMCwwLDAsCisgICAgMTE0LDgsMCwwLDAsMjE4LDcsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNCwxNzMsCisgICAgMCwwLDAsMTE0LDE3MSwwLDAsMCw5MCwxMCw4MSwxMTcsMTAxLDExNCwxMjEsODYsCisgICAgOTcsMTA4LDExNywxMDEsMTE0LDQyLDAsMCwwLDQxLDYsMTE0LDE3MiwwLDAsMCwKKyAgICAxMTQsMTI4LDAsMCwwLDkwLDEyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTUsCisgICAgMTA3LDEwMSwxMjEsMTE0LDUsMCwwLDAsOTAsNCwxMDQsMTA3LDEwMSwxMjEsMjE4LDgsCisgICAgMTAyLDEwNSwxMDgsMTAxLDExMiw5NywxMTYsMTA0LDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw2LDAsMCwwLDIxOCwxNiw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsCisgICAgOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5NCwyLDAsMCwxMTUsMjIsMCwKKyAgICAwLDAsMCwyLDksMSwxMiwyLDksMSwxNSwxLDIyLDEsMywxLAorICAgIDE4LDEsMjksMSwxMywxLDksMSwxMjIsMzgsODcsMTA1LDExMCwxMDAsMTExLDExOSwKKyAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCisgICAgOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsCisgICAgNzgsOTksNCwwLDAsMCwwLDAsMCwwLDgsMCwwLDAsMTQsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDE1OCwwLDAsMCwxMjQsMCwwLDEwNiwwLAorICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTI0LDQsMCwxMDAsMCwwLAorICAgIDEwNyw4LDAsMTE0LDMxLDAsMTAwLDAsMCw4MywxMjEsMTQsMCwxMTYsMSwwLAorICAgIDEyNCw0LDAsMTMxLDEsMCwxLDg3LDExMCwyMiwwLDQsMTE2LDIsMCwxMDcsCisgICAgMTAsMCwxMTQsNjksMCwxLDEsMSwxMDAsMCwwLDgzLDg5LDExMCwxLDAsCisgICAgODgsMTIwLDgxLDAsMTE2LDMsMCwxMzEsMCwwLDY4LDkzLDcwLDAsOTIsMiwKKyAgICAwLDEyNSw1LDAsMTI1LDYsMCwxMjQsNCwwLDEwNiw0LDAsMTE2LDUsMCwKKyAgICAxMjQsNiwwLDEzMSwxLDAsMTMxLDEsMCwxMTQsODAsMCwxMTYsNiwwLDEwNiwKKyAgICA3LDAsMTI0LDEsMCwxMjQsNSwwLDEyNCwxLDAsMTI0LDQsMCwxMzEsMiwKKyAgICAwLDEwMCwxLDAsMTI0LDQsMCwxMzEsMiwxLDEyNSw3LDAsMTI0LDcsMCwKKyAgICA4MywxMTMsODAsMCw4NywxMDAsMCwwLDgzLDQxLDIsNzgsMTE0LDE2MCwwLDAsCisgICAgMCw0MSw4LDExNCwxNzksMCwwLDAsMTE0LDQxLDAsMCwwLDExNCw0MiwwLAorICAgIDAsMCwxMTQsMTYzLDAsMCwwLDExNCw5NCwwLDAsMCwxMTQsOTUsMCwwLAorICAgIDAsMTE0LDEyMywwLDAsMCwyMTgsMTYsMTE1LDExMiwxMDEsOTksOTUsMTAyLDExNCwxMTEsCisgICAgMTA5LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDEsOCwxMTQsMTcyLDAsMCwwLDExNCwKKyAgICAxMjgsMCwwLDAsMTE0LDM3LDAsMCwwLDIxOCw2LDExNiw5NywxMTQsMTAzLDEwMSwKKyAgICAxMTYsMTE0LDE3OCwwLDAsMCwxMTQsMTI5LDAsMCwwLDExNCwxNjgsMCwwLDAsCisgICAgMTE0LDE2NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNiwwLDAsMCwyMTgsOSwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksMTA5LAorICAgIDIsMCwwLDExNSwyNiwwLDAsMCwwLDIsMTUsMSwxMiwxLDQsMSwKKyAgICAzLDEsMTQsMSwxMywxLDksMSwyMiwxLDIxLDEsOSwxLDE1LDEsCisgICAgOSwxLDEyMiwzMSw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsCisgICAgMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LAorICAgIDExMiwxMDEsOTksOTksMywwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgMywwLDAsMCw2NywwLDAsMCwxMTUsNDUsMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDEyNSwzLDAsMTI0LAorICAgIDMsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDM3LDAsMTI0LDMsMCwxMDYsMSwKKyAgICAwLDgzLDEwMCwxLDAsODMsMTAwLDEsMCw4Myw0MSwyLDEyMiwxMDgsNzAsMTA1LAorICAgIDExMCwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLAorICAgIDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsCisgICAgMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwyLDExNCwxODIsMCwKKyAgICAwLDAsMTE0LDEyOSwwLDAsMCw0MSw0LDExNCwxNzIsMCwwLDAsMTE0LDEyOCwKKyAgICAwLDAsMCwxMTQsMzcsMCwwLDAsMTE0LDE2NiwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwyMTgsMTEsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEyNSwyLDAsMCwxMTUsOCwwLAorICAgIDAsMCwwLDcsMTgsMSwxMiwxLDcsMiwxMjIsMzMsODcsMTA1LDExMCwxMDAsCisgICAgMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQxLDEyLDExNCwKKyAgICAxMTQsMCwwLDAsMTE0LDExMywwLDAsMCwxMTQsMTE1LDAsMCwwLDExNCwxMTYsCisgICAgMCwwLDAsMTE0LDE3NiwwLDAsMCwxMTQsMTc1LDAsMCwwLDExNCwxNzQsMCwKKyAgICAwLDAsMjE4LDExLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCwKKyAgICAxNzMsMCwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsMTgyLDAsMCwwLDExNCwxODMsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDYsMCwwLDAsMTE0LDE3MCwwLDAsMCw3NSwyLDAsMCwKKyAgICAxMTUsMjAsMCwwLDAsMTIsMiw2LDMsNiwzLDYsMiw2LDIsMTgsCisgICAgNywxOCwxNSwzLDEsMjEsMTUsMywxLDExNCwxNzAsMCwwLDAsOTksMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwKKyAgICAwLDAsMCwxMTUsNzAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsCisgICAgMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLAorICAgIDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLAorICAgIDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsCisgICAgMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDgzLDQxLDExLAorICAgIDIxOCwxMyw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsMTIyLAorICAgIDgzLDY2LDk3LDExNSwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDEwMiwzMiw5OSwKKyAgICAxMTEsMTA5LDEwOSwxMTEsMTEwLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsCisgICAgMTAwLDMyLDk4LDEyMSwzMiw5OCwxMTEsMTE2LDEwNCwzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsMzIsODMsCisgICAgMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLAorICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsODgsMCwwLDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEzMSwxLDAsCisgICAgMTAwLDEsMCwyNSwxMjUsMiwwLDEyNCwyLDAsMTA2LDIsMCwxMDAsMiwwLAorICAgIDEwMCwxLDAsMTMxLDIsMCwxMDAsMywwLDI1LDEyNSwzLDAsMTI0LDEsMCwKKyAgICAxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsNCwwLDI1LDEyNSw0LDAsCisgICAgMTI0LDMsMCwxMDAsNSwwLDEwNywyLDAsMTExLDg3LDAsMTI0LDQsMCwxMDAsCisgICAgNSwwLDEwNywzLDAsODMsNDEsNiwxMjIsMTQxLDY3LDExMSwxMTAsOTksMTE0LDEwMSwKKyAgICAxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLAorICAgIDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDk4LDEyMSwKKyAgICAzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDUsMTEwLDEwMywzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNCwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsCisgICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMDQsOTcsMTE1LDMyLDk3LDMyLDEwMiwxMDUsMTA4LAorICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDM5LDk1LDk1LDEwNSwxMTAsMTA1LDExNiwKKyAgICA5NSw5NSw0NiwxMTIsMTIxLDM5LDQ2LDExNCwzMSwwLDAsMCwxMTQsNjAsMCwwLAorICAgIDAsMTE0LDYxLDAsMCwwLDExNCw1OCwwLDAsMCwyMTgsOCw5NSw5NSwxMDUsCisgICAgMTEwLDEwNSwxMTYsOTUsOTUsNDEsNCwxMTQsNDAsMCwwLDAsMTE0LDE1OSwwLDAsCisgICAgMCwxMTQsMzYsMCwwLDAsMTE0LDM0LDAsMCwwLDQxLDUsMTE0LDExMCwwLAorICAgIDAsMCwxMTQsMTI4LDAsMCwwLDExNCw5NiwwLDAsMCw5MCwxMywxMDIsMTA1LAorICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTUsOTgsOTcsMTE1LDEwMSw5MCw5LDExNiw5NywxMDUsCisgICAgMTA4LDk1LDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw2LDAsMCwwLDExNCwxNjEsMCwwLDAsMTQ0LDIsMCwwLDExNSw4LAorICAgIDAsMCwwLDAsMywyNSwxLDIyLDEsMTksMSwxMjIsMjQsOTUsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LAorICAgIDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLAorICAgIDEsMCw4Myw0MSwyLDEyMiw0Miw4NSwxMTUsMTAxLDMyLDEwMCwxMDEsMTAyLDk3LDExNywKKyAgICAxMDgsMTE2LDMyLDExNSwxMDEsMTA5LDk3LDExMCwxMTYsMTA1LDk5LDExNSwzMiwxMDIsMTExLDExNCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDUsMTExLDExMCwKKyAgICA0Niw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwxMTAsMCwwLDAsMTE0LDE2NiwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLAorICAgIDAsMCwyMTgsMTMsOTksMTE0LDEwMSw5NywxMTYsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDE1MiwyLDAsMCwxMTUsMCwwLDAsMCwxMjIsMjcsOTUsNzYsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSwKKyAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCisgICAgMywwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw4MCwwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsCisgICAgMTI1LDIsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNTQsMCwxMTYsCisgICAgMiwwLDEwMCwyLDAsMTA2LDMsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsCisgICAgMCwxMzEsMSwwLDEzMCwxLDAsMTE2LDQsMCwxMDYsNSwwLDExNiw2LDAsCisgICAgMTI0LDIsMCwxMjQsMSwwLDEwNiw3LDAsMTMxLDMsMCwxLDEwMCwxLDAsCisgICAgODMsNDEsMywxMjIsMTksNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMjIsNTIsOTksOTcsMTEwLDExMCwxMTEsCisgICAgMTE2LDMyLDEwOCwxMTEsOTcsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywKKyAgICAxMTQsMTI1LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwKKyAgICA0MCw0MSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsNzgsMTExLDExMCwxMDEsNDEsCisgICAgOCwyMTgsOCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTQsMTE0LDAsMCwwLAorICAgIDExNCwxMDksMCwwLDAsMTE0LDQ5LDAsMCwwLDExNCwxMjMsMCwwLDAsMjE4LAorICAgIDI1LDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAorICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDIxOCw0LDEwMSwxMjAsMTAxLDk5LAorICAgIDExNCwxMjAsMCwwLDAsNDEsMywxMTQsMTEwLDAsMCwwLDIxOCw2LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDExNCwxNDgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDYsMCwwLDAsMjE4LDExLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDE1NSwyLDAsMCwxMTUsMTAsMCwwLDAsMCwyLAorICAgIDE4LDEsMTIsMSw5LDEsMTUsMSwxMjIsMjUsOTUsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MSwxLDc4LAorICAgIDQxLDIsMTE0LDEyMywwLDAsMCwyMTgsMTcsOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDQxLDIsMTE0LDExMCwwLDAsCisgICAgMCwxMTQsMTI4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw2LDAsMCwwLDIxOCwxMSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxNjMsMiwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTA4LDExMSw5NywKKyAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDEsOCwxMTQsMTE0LDAsMCwwLAorICAgIDExNCwxMTMsMCwwLDAsMTE0LDExNSwwLDAsMCwxMTQsMTE2LDAsMCwwLDExNCwKKyAgICAxNjEsMCwwLDAsMTE0LDE4NywwLDAsMCwxMTQsMTkyLDAsMCwwLDExNCwxOTQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDYsMCwwLDAsMTE0LDE4NSwwLDAsMCwxMzksMiwwLDAsCisgICAgMTE1LDEwLDAsMCwwLDEyLDMsNiwyLDEyLDgsMTIsMywxMiw4LDExNCwKKyAgICAxODUsMCwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsNCwwLDAsMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLAorICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwKKyAgICAxMzIsMCwwLDkwLDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCw5MCwKKyAgICA0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LAorICAgIDAsMTAwLDgsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOSwwLDEwMCwxMCwwLAorICAgIDEzMiwwLDAsOTAsNywwLDEwMCwxMSwwLDEwMCwxOCwwLDEwMCwxMywwLDEwMCwKKyAgICAxNCwwLDEzMiwwLDEsOTAsOCwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLAorICAgIDAsOTAsOSwwLDEwMCwxNywwLDgzLDQxLDE5LDIxOCwxMiw4MywxMTEsMTE3LDExNCwKKyAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDEwLDAsCisgICAgMCwwLDExNiwwLDAsMTMwLDEsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDE3OCwKKyAgICA3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwKKyAgICAxMTYsMTA0LDk3LDExNiwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMDUsCisgICAgMTA5LDEwMSwzMiw0MCw5NywxMTAsMzIsMTA1LDExMCwxMTYsNDEsMzIsMTAyLDExMSwxMTQsMzIsCisgICAgMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksCisgICAgMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMTIsOTcsMTE2LDEwNCw0NCwzMiwxMTksMTA0LDEwMSwxMTQsCisgICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsOTcsMTA1LDExNSwxMDEsMTE1LAorICAgIDMyLDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk4LDEwMSwKKyAgICAzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw3OCw0MSwxLDIxOCw3LDczLDc5LDY5LDExNCwxMTQsMTExLDExNCw0MSwyLAorICAgIDExNCwxMTAsMCwwLDAsMTE0LDM3LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDksMTE2LDEwNSwxMDksMTAxLDE2OSwyLDAsMCwxMTUsMiwwLDAsMCwwLDYsCisgICAgMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxOSwKKyAgICAwLDAsMCwxMDAsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsMTA1LDEsMCw4Myw0MSwyLDk3LDE3MCwxLDAsMCw3OSwxMTIsMTE2LAorICAgIDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTQsMTAxLDExNiwKKyAgICAxMTcsMTE0LDExMCwxMDUsMTEwLDEwMywzMiw5NywzMiwxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LAorICAgIDk3LDMyLDEwMCwxMDUsOTksMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwKKyAgICAxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTEyLDk3LDExNiwxMDQsMzIsNDAsMTE1LDExNiwxMTQsNDEsNDYsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsODAsMTExLDExNSwxMTUsMTA1LDk4LDEwOCwxMDEsMzIsMTA3LDEwMSwxMjEsCisgICAgMTE1LDU4LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDEwOSwxMTYsCisgICAgMTA1LDEwOSwxMDEsMzksMzIsNDAsMTA5LDk3LDExMCwxMDAsOTcsMTE2LDExMSwxMTQsMTIxLDQxLAorICAgIDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDExNywxMDksMTAxLDExNCwxMDUsOTksMzIsCisgICAgMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwzMiwxMTEsMTAyLDMyLDEwOCw5NywxMTUsCisgICAgMTE2LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsOTksMTExLDEwMCwxMDEsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsCisgICAgMTE2LDEwNSwxMTEsMTEwLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQ1LDMyLAorICAgIDM5LDExNSwxMDUsMTIyLDEwMSwzOSwzMiw0MCwxMTEsMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsCisgICAgNDEsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTA1LDEyMiwxMDEsMzIsMTA1LDExMCwKKyAgICAzMiw5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLAorICAgIDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsCisgICAgMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsCisgICAgMTExLDExOSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTYsCisgICAgMTExLDMyLDExNCwxMDEsOTcsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwxMTUsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsCisgICAgOTcsMTA1LDExNSwxMDEsMTE1LDMyLDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA0LAorICAgIDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTEwLDExMCwKKyAgICAxMTEsMTE2LDMyLDk4LDEwMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDEwMCw0NiwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMTM1LDAsMCwwLDQxLDEsMTE0LDE5NywKKyAgICAwLDAsMCw0MSwyLDExNCwxMTAsMCwwLDAsMTE0LDM3LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxMCwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTc3LDIsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMTEsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsCisgICAgMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDE2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMiwKKyAgICAwLDEyNCwzLDAsMTMxLDIsMCw4Myw0MSwxLDEyMiwyMjgsNzksMTEyLDExNiwxMDUsCisgICAgMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksCisgICAgMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsCisgICAgMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCisgICAgMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLAorICAgIDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LAorICAgIDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLAorICAgIDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLAorICAgIDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsOTksMTE2LAorICAgIDEwOCwxMjEsMzIsMTE2LDExNCw5NywxMTAsMTE1LDEwMiwxMDEsMTE0LDMyLDExMiwxMDEsMTE0LDEwOSwKKyAgICAxMDUsMTE1LDExNSwxMDUsMTExLDExMCwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgNDEsMSwyMTgsOCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQxLDQsMTE0LDExMCwKKyAgICAwLDAsMCwxMTQsOTIsMCwwLDAsOTAsMTAsOTksOTcsOTksMTA0LDEwMSw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCwxMTQsNTUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDYsMCwwLDAsMjE4LDE1LDk1LDk5LDk3LDk5LDEwNCwxMDEsCisgICAgOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTkwLDIsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsOCwxMjIsMjgsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKKyAgICAxMDAsMTAxLDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKKyAgICA0MSwyLDEyMiwxNTAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsCisgICAgMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LAorICAgIDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsCisgICAgMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLAorICAgIDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLAorICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LAorICAgIDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwKKyAgICAxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSwKKyAgICA0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwxMTQsNCwwLDAsMCwKKyAgICA0MSwzLDExNCwxMTAsMCwwLDAsMTE0LDM3LDAsMCwwLDExNCw1NSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwKKyAgICAxMTQsMTk5LDAsMCwwLDIwMCwyLDAsMCwxMTUsMCwwLDAsMCwxMjIsMjEsCisgICAgODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiwKKyAgICA5NSwxMDAsOTcsMTE2LDk3LDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsCisgICAgMCwwLDE2LDAsMCwwLDY3LDAsMCwwLDExNSwxMDUsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyMSwxOSwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwKKyAgICA4NywxMTAsNTgsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDk0LDAsMSwxMjUsCisgICAgNCwwLDEsMTIyLDI2LDAsMTE2LDMsMCwxMDAsMSwwLDEwMCwyLDAsMTI0LAorICAgIDEsMCwxMzEsMSwxLDEyNCw0LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMywwLAorICAgIDEwMCwzLDAsMTI1LDQsMCwxMjYsNCwwLDg4LDExMCwxLDAsODgsMTE2LDQsCisgICAgMCwxMjQsMywwLDEzMSwxLDAsODMsNDEsNCwxMjIsNTIsNjcsMTExLDExMCw5OSwKKyAgICAxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwxMTIsMTAxLDk5LDExNiw3NiwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0NiwKKyAgICAxMjIsMzksMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTAsMTExLDExNiwzMiw5NywxMTgsOTcsCisgICAgMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLDMyLDExNiwxMDQsMTE0LDExMSwxMTcsMTAzLDEwNCwzMiwxMDMsCisgICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQwLDQxLDExNCwxMDgsMCwwLDAsNzgsNDEsCisgICAgNSwxMTQsMTU5LDAsMCwwLDIxOCw4LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCisgICAgMTE0LDQyLDAsMCwwLDExNCwxMDksMCwwLDAsMTE0LDE1NywwLDAsMCw0MSwKKyAgICA1LDExNCwxMTAsMCwwLDAsMTE0LDEyOCwwLDAsMCwxMTQsMzcsMCwwLDAsCisgICAgMTE0LDE1NSwwLDAsMCwyMTgsMywxMDEsMTIwLDk5LDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxMCwxMDMsMTAxLDExNiw5NSwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDIwNywyLDAsMCwxMTUsMTQsMCwwLDAsMCwyLAorICAgIDE1LDEsMywxLDE5LDEsMTgsMSw5LDEsMzEsMSwxMjIsMjMsODMsMTExLAorICAgIDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDIxOCw5LDk1LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsCisgICAgMTE0LDMxLDAsMCwwLDk5LDMsMCwwLDAsMSwwLDAsMCw0LDAsCisgICAgMCwwLDksMCwwLDAsNjcsMCwwLDAsMTE1LDM0LDAsMCwwLDExNiwKKyAgICAwLDAsMTA2LDEsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwxMDAsMSwKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMDAsNCwwLDEyNCwzLDAsMTMxLDQsMiwKKyAgICA4Myw0MSw1LDEyMiwxMzAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsOTksMTExLDEwOSwxMTIsCisgICAgMTA1LDEwOCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksCisgICAgMTAwLDk3LDExNiw5NywzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsOTksCisgICAgOTcsMTEwLDMyLDk4LDEwMSwzMiw5NywxMTAsMTIxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwKKyAgICAzMiwxMTYsMTIxLDExMiwxMDEsMzIsMTE2LDEwNCw5NywxMTYsMzIsOTksMTExLDEwOSwxMTIsMTA1LAorICAgIDEwOCwxMDEsNDAsNDEsMzIsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDExNSw0NiwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMTkwLDAsMCwwLDIxOCwxMiwxMDAsMTExLAorICAgIDExMCwxMTYsOTUsMTA1LDExMCwxMDQsMTAxLDExNCwxMDUsMTE2LDg0LDExNCw3MCwwLDAsMCwKKyAgICA0MSwzLDExNCwxMjMsMCwwLDAsMTE0LDE4OSwwLDAsMCwyMTgsNyw5OSwxMTEsCisgICAgMTA5LDExMiwxMDUsMTA4LDEwMSw0MSw0LDExNCwxMTAsMCwwLDAsMTE0LDU1LDAsMCwKKyAgICAwLDExNCwzNywwLDAsMCwxMTQsMjA0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxNCwxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDk1LDExNiwxMTEsOTUsOTksMTExLDEwMCwxMDEsMjE3LDIsMCwwLDExNSw0LAorICAgIDAsMCwwLDAsNSwyMSwxLDEyMiwyNyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE2LDExMSw5NSwKKyAgICA5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMTAsMCwwLAorICAgIDAsNDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE3NCwxLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTAwLDEsMCwKKyAgICAxMjUsMywwLDEyMSwxNiwwLDExNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwKKyAgICA0LDAsODcsMTEwLDI0LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw2MywwLAorICAgIDEsMSwxLDEwMCwxLDAsMTI1LDQsMCw4OSwxMTAsMjAyLDAsODgsMTIxLDE5LAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNSwwLAorICAgIDg3LDExMCwxOCwwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsMTAzLDAsMSwxLAorICAgIDEsODksMTEwLDE2MiwwLDg4LDExNiw1LDAsMTI0LDUsMCwxMDAsMiwwLDI1LAorICAgIDEzMSwxLDAsMTI1LDMsMCwxMjEsMTksMCwxMjQsMCwwLDEwNiw2LDAsMTI0LAorICAgIDQsMCwxMzEsMSwwLDEyNSw2LDAsODcsMTEwLDE4LDAsNCwxMTYsNywwLAorICAgIDEwNywxMCwwLDExNCwxNTksMCwxLDEsMSw4OSwxMTAsMTA2LDAsODgsMTIxLDM0LAorICAgIDAsMTE2LDgsMCwxMjQsNiwwLDEwMCwzLDAsMTI0LDUsMCwxMDAsNCwwLAorICAgIDEyNCwxLDAsMTAwLDUsMCwxMjQsNCwwLDEzMSwxLDMsMTI1LDcsMCw4NywKKyAgICAxMTAsMjQsMCw0LDExNiw5LDAsMTE2LDEwLDAsMTAyLDIsMCwxMDcsMTAsMCwKKyAgICAxMTQsMjIwLDAsMSwxLDEsODksMTEwLDQ1LDAsODgsMTE2LDExLDAsMTAwLDYsCisgICAgMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDMsMCwxLDExNiwxMiwwLDEyNCw3LAorICAgIDAsMTAwLDQsMCwxMjQsMSwwLDEwMCw3LDAsMTI0LDQsMCwxMDAsOCwwLAorICAgIDEyNCwyLDAsMTMxLDEsMyw4MywxMjQsMCwwLDEwNiw2LDAsMTI0LDIsMCwKKyAgICAxMzEsMSwwLDEyNSw4LDAsMTI0LDAsMCwxMDYsMTMsMCwxMjQsOCwwLDEyNCwKKyAgICAyLDAsMTMxLDIsMCwxMjUsOSwwLDExNiwxMSwwLDEwMCw5LDAsMTI0LDIsCisgICAgMCwxMzEsMiwwLDEsMTE2LDE0LDAsMTA2LDE1LDAsMTIsMTE0LDE3MCwxLDEyNCwKKyAgICA0LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxNzAsMSwxMjQsMywwLDEwMCwxLAorICAgIDAsMTA3LDksMCwxMTQsMTcwLDEsMTE2LDE2LDAsMTI0LDksMCwxMjQsMywwLAorICAgIDExNiwxNywwLDEyNCw4LDAsMTMxLDEsMCwxMzEsMywwLDEyNSw2LDAsMTIxLAorICAgIDM2LDAsMTI0LDAsMCwxMDYsMTgsMCwxMjQsMiwwLDEyNCw0LDAsMTI0LDYsCisgICAgMCwxMzEsMywwLDEsMTE2LDExLDAsMTAwLDEwLDAsMTI0LDQsMCwxMzEsMiwKKyAgICAwLDEsODcsMTEwLDE4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCwxNjksMSwKKyAgICAxLDEsMSw4OSwxMTAsMSwwLDg4LDEyNCw5LDAsODMsNDEsMTEsMTIyLDE5MCwKKyAgICA2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCisgICAgMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LDExMiwxMDEsCisgICAgOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAorICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MiwxMDEsOTcsMTAwLAorICAgIDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsCisgICAgMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LAorICAgIDk3LDExNiwxMTUsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwzMiw4NCwxMTEsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwKKyAgICA0NCwzMiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDMyLDEwOSwxMTcsMTE1LDExNiwzMiwKKyAgICA5NywxMDgsMTE1LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwKKyAgICAxMTYsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwxMTQsCisgICAgMTM1LDAsMCwwLDExNCwxNDAsMCwwLDAsMTE0LDEwOCwwLDAsMCwxMTQsMzcsCisgICAgMCwwLDAsMTIyLDEzLDEyMywxMjUsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwKKyAgICAxMjMsMTI1LDExNCw5MSwwLDAsMCwxMTQsOTIsMCwwLDAsMTIyLDE5LDk5LDExMSwKKyAgICAxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLAorICAgIDEyNSwxMjIsMTAsMTE5LDExNCwxMTEsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw0MSwxOSwxMTQsCisgICAgMTU5LDAsMCwwLDExNCw4MSwwLDAsMCwxMTQsNjgsMCwwLDAsMTE0LDE5OCwKKyAgICAwLDAsMCwxMTQsMTk2LDAsMCwwLDExNCwxNiwwLDAsMCwxMTQsMjAxLDAsCisgICAgMCwwLDExNCw0MiwwLDAsMCwxMTQsMTQzLDAsMCwwLDExNCwxMDksMCwwLAorICAgIDAsMTE0LDEzOCwwLDAsMCwxMTQsMTA3LDAsMCwwLDExNCwxNDksMCwwLDAsCisgICAgMTE0LDIwNywwLDAsMCwxMTQsOCwwLDAsMCwyMTgsMTksMTAwLDExMSwxMTAsMTE2LAorICAgIDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE0LAorICAgIDE1MiwwLDAsMCwxMTQsMzMsMCwwLDAsMTE0LDIwMCwwLDAsMCw0MSwxMCwKKyAgICAxMTQsMTEwLDAsMCwwLDExNCwxMjgsMCwwLDAsMTE0LDkyLDAsMCwwLDExNCwKKyAgICAxNDEsMCwwLDAsMTE0LDkxLDAsMCwwLDIxOCwyLDExNSwxMTYsMTE0LDU1LDAsCisgICAgMCwwLDIxOCwxMCw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAwLDk3LDExNiw5NywxMTQsMTU1LAorICAgIDAsMCwwLDkwLDExLDk5LDExMSwxMDAsMTAxLDk1LDExMSw5OCwxMDYsMTAxLDk5LDExNiwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsCisgICAgMTg4LDAsMCwwLDIyNSwyLDAsMCwxMTUsNzgsMCwwLDAsMCw3LDE1LAorICAgIDEsNiwxLDMsMSwxNiwxLDEzLDEsMTEsMiwzLDEsMTksMSwxMywKKyAgICAxLDUsMiwxNiwxLDMsMSwxOSwxLDEzLDEsNSwyLDMsMSw5LAorICAgIDEsMTIsMSwxMywxLDE5LDEsNSwyLDksMSw3LDEsMTUsMSw2LAorICAgIDEsNywxLDE1LDEsMTgsMSwxMywxLDIyLDEsMTIsMSw5LDEsMTUsCisgICAgMSwzLDEsMTksMSwxNywxLDEzLDEsNSwxLDEyMiwyMSw4MywxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwKKyAgICAxMDAsMTAxLDc4LDExNCw4OSwwLDAsMCw0MSwxMCwxMTQsMTE0LDAsMCwwLDExNCwKKyAgICAxMTMsMCwwLDAsMTE0LDExNSwwLDAsMCwxMTQsMTk3LDAsMCwwLDExNCwxOTgsCisgICAgMCwwLDAsMTE0LDIwMCwwLDAsMCwxMTQsMTk5LDAsMCwwLDExNCwyMDMsMCwKKyAgICAwLDAsMTE0LDIwNywwLDAsMCwxMTQsMTg4LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLAorICAgIDExNCwxOTUsMCwwLDAsMTY3LDIsMCwwLDExNSwxNCwwLDAsMCwxMiwyLAorICAgIDEyLDgsMTIsMTMsMTIsMTAsMTIsNywxMiwxMCwxOCw4LDExNCwxOTUsMCwwLAorICAgIDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLAorICAgIDAsMCwwLDAsMCwwLDExNSwxMTIsMCwwLDAsMTAxLDAsMCw5MCwxLAorICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwKKyAgICAxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsCisgICAgMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LAorICAgIDAsMTAxLDcsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDgsMCwxMDAsOSwwLAorICAgIDEzNCwwLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDcsMCwxMDAsMTAsMCwxMDAsCisgICAgMTEsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOSwwLDEwMCwxMiwwLDEwMCwxMywKKyAgICAwLDEzMiwwLDAsOTAsMTAsMCwxMzUsMCwwLDgzLDQxLDE0LDIxOCwxMCw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLDEwMyw2Niw5NywxMTUsMTAxLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsCisgICAgMTE1LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLAorICAgIDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTIsMTE0LAorICAgIDExMSwxMTYsMTExLDk5LDExMSwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwKKyAgICAxMDQsOTcsMTE2LDEwLDMyLDMyLDMyLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsMTE3LDExNSw5NywxMDMsCisgICAgMTAxLDQ2LDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsMTI0LAorICAgIDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMDAsMSwKKyAgICAwLDgzLDQxLDIsMTIyLDc1LDY3LDk3LDk5LDEwNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsOTcsMTEwLDEwMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LAorICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0Niw3OCw0MSwyLDExNCwxMDgsMCwwLDAsMTE0LDM3LDAsMCwwLDQxLDMsCisgICAgMTE0LDExMCwwLDAsMCwxMTQsMTI4LDAsMCwwLDExNCwzNywwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMTg2LAorICAgIDAsMCwwLDI2LDMsMCwwLDExNSw0LDAsMCwwLDAsMyw5LDEsCisgICAgMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsCisgICAgMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMzQsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDAsMCwxMDcsMiwwLDExMSwzMywKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNiwxLDAsMTA3LDIsMCwKKyAgICA4Myw0MSwxLDc4LDQxLDIsMjE4LDksOTUsOTUsOTksMTA4LDk3LDExNSwxMTUsOTUsCisgICAgOTUsMTE0LDEyMCwwLDAsMCw0MSwyLDExNCwxMTAsMCwwLDAsMjE4LDUsMTExLAorICAgIDExNiwxMDQsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwKKyAgICAwLDAsMCwyMTgsNiw5NSw5NSwxMDEsMTEzLDk1LDk1LDMyLDMsMCwwLDExNSwKKyAgICA0LDAsMCwwLDAsMSwxOCwxLDEyMiwxNyw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTAxLDExMyw5NSw5NSw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwyNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwKKyAgICAwLDExNiwwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwxLDAsNjUsODMsNDEsCisgICAgMSw3OCw0MSwzLDIxOCw0LDEwNCw5NywxMTUsMTA0LDExNCwxMDgsMCwwLDAsMTE0LAorICAgIDM3LDAsMCwwLDQxLDEsMTE0LDExMCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwyMTgsOCw5NSw5NSwxMDQsOTcsCisgICAgMTE1LDEwNCw5NSw5NSwzNiwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLAorICAgIDE5LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDQsOTcsCisgICAgMTE1LDEwNCw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDIyLDAsMCwwLDExNiwwLAorICAgIDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwyLDAsMTA2LDIsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsODMsNDEsMSwxMjIsMTAwLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDk3LDMyLDEwMiwxMDUsMTA4LAorICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwKKyAgICAzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsCisgICAgOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSwKKyAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LAorICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw0MSwzLDIxOCw1LAorICAgIDExNSwxMTcsMTEyLDEwMSwxMTQsMTE0LDIxMSwwLDAsMCwxMTQsMTk0LDAsMCwwLDQxLAorICAgIDIsMTE0LDExMCwwLDAsMCwxMTQsMTI4LDAsMCwwLDQxLDEsMTE0LDIxMiwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMTk0LDAsMCwKKyAgICAwLDM5LDMsMCwwLDExNSwyLDAsMCwwLDAsMTAsMTIyLDIyLDcwLDEwNSwKKyAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw3LDAsMCwwLDEyNCwwLAorICAgIDAsMTA2LDAsMCw4Myw0MSwxLDEyMiw1OCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTcsMTE1LDMyLDEwMiwKKyAgICAxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwKKyAgICAxMDEsMTE0LDQ2LDQxLDEsMTE0LDM3LDAsMCwwLDQxLDIsMTE0LDExMCwwLDAsCisgICAgMCwxMTQsMTI4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw2LDAsMCwwLDExNCwxNTksMCwwLDAsNTEsMywwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwzLDEyMiwyMyw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDksMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDQyLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwKKyAgICAwLDEwMCwxLDAsMTMxLDIsMCwxNDMsMTcsMCwxMjUsMiwwLDEyNCwyLDAsCisgICAgMTA2LDIsMCwxMzEsMCwwLDgzLDg3LDEwMCwyLDAsODEsODIsODgsMTAwLDIsCisgICAgMCw4Myw0MSwzLDEyMiwzOSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwMCw5NywxMTYsOTcsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExMiw5NywxMTYsMTA0LDMyLAorICAgIDk3LDExNSwzMiwxMTQsOTcsMTE5LDMyLDk4LDEyMSwxMTYsMTAxLDExNSw0NiwyMTgsMSwxMTQsCisgICAgNzgsNDEsMywxMTQsNTEsMCwwLDAsMTE0LDUyLDAsMCwwLDkwLDQsMTE0LAorICAgIDEwMSw5NywxMDAsNDEsMywxMTQsMTEwLDAsMCwwLDExNCwzNywwLDAsMCwxMTQsCisgICAgNTYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsCisgICAgMCwwLDAsMTE0LDIwMSwwLDAsMCw1NiwzLDAsMCwxMTUsNCwwLDAsCisgICAgMCwwLDIsMjEsMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDEsMTEsMTE0LDExNCwwLDAsCisgICAgMCwxMTQsMTEzLDAsMCwwLDExNCwxMTUsMCwwLDAsMTE0LDExNiwwLDAsMCwKKyAgICAxMTQsMTg2LDAsMCwwLDExNCwyMTQsMCwwLDAsMTE0LDIxNiwwLDAsMCwxMTQsCisgICAgMTI1LDAsMCwwLDExNCwxOTQsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMjAxLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LAorICAgIDIxMiwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMjExLDAsMCwwLDIxLDMsCisgICAgMCwwLDExNSwxNCwwLDAsMCwxMiwzLDYsMiwxMiw2LDEyLDQsMTIsCisgICAgMywyNCwxMiwxOCw1LDExNCwyMTEsMCwwLDAsOTksMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsNCwwLDAsMCw2NCwwLDAsMCwxMTUsCisgICAgNjQsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsCisgICAgMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsCisgICAgNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwKKyAgICAwLDEwMCw3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDEsOTAsNiwwLAorICAgIDEwMCwxMCwwLDgzLDQxLDExLDIxOCwxNiw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEyMiw2Miw2NywxMTEsMTEwLDk5LDExNCwxMDEsCisgICAgMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsMzIsMTExLDEwMiwzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAorICAgIDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDQ2LDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwzLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDM0LDAsCisgICAgMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTAwLDEsCisgICAgMCwxMjQsMiwwLDEwNiwxLDAsMTAwLDIsMCwxMjQsMiwwLDEwNiwyLDAsCisgICAgMTA1LDIsMCw4Myw0MSwzLDEyMiwzMyw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsOTcsMzIsMTAyLDExMSwxMTQsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDYsMTE0LDEzNSwwLDAsMCwxMTQsMTM2LAorICAgIDAsMCwwLDQxLDMsMTE0LDQxLDAsMCwwLDIxOCw4LDExNSwxMTYsOTUsMTA5LAorICAgIDExNiwxMDUsMTA5LDEwMSw5MCw3LDExNSwxMTYsOTUsMTE1LDEwNSwxMjIsMTAxLDQxLDMsMTE0LAorICAgIDExMCwwLDAsMCwxMTQsMzcsMCwwLDAsMTE0LDIwOSwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMTk4LDAsCisgICAgMCwwLDY2LDMsMCwwLDExNSw0LDAsMCwwLDAsMiwxMiwxLDEyMiwKKyAgICAyNyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSw5OSw0LDAsMCwKKyAgICAwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwzNCwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsCisgICAgNCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTAwLDEsCisgICAgMCwxMjQsNCwwLDEzMSwyLDEsODMsNDEsMiw3OCwyMTgsNSw5NSwxMDksMTExLAorICAgIDEwMCwxMDEsNDEsMiwxMTQsOTksMCwwLDAsMTE0LDE5OSwwLDAsMCw0MSw1LAorICAgIDExNCwxMTAsMCwwLDAsMTE0LDkyLDAsMCwwLDExNCw5MSwwLDAsMCwxMTQsCisgICAgNTUsMCwwLDAsMTE0LDQ0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw2LDAsMCwwLDExNCwyMDAsMCwwLDAsNzEsMywwLAorICAgIDAsMTE1LDQsMCwwLDAsMCwyLDEyLDEsMTIyLDMyLDgzLDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMjIxLDAsMCwKKyAgICAwLDEwNSwxODIsMSwwLDAsOTksMywwLDAsMCwxLDAsMCwwLDksCisgICAgMCwwLDAsMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDEsMCwwLAorICAgIDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsNCwwLDEyNSwKKyAgICA1LDAsMTAzLDAsMCwxMjUsNiwwLDEyMCw1NCwwLDEyNCw0LDAsMTE0LDgwLAorICAgIDAsMTE2LDEsMCwxMjQsNCwwLDEzMSwxLDAsMTIsMTE0LDgwLDAsMTE2LDAsCisgICAgMCwxMjQsNCwwLDEzMSwxLDAsOTIsMiwwLDEyNSw0LDAsMTI1LDcsMCwKKyAgICAxMjQsNiwwLDEwNiwyLDAsMTI0LDcsMCwxMzEsMSwwLDEsMTEzLDI3LDAsCisgICAgODcsMTIwLDEzMiwwLDExNiwzLDAsMTI0LDYsMCwxMzEsMSwwLDY4LDkzLDExOCwKKyAgICAwLDEyNSw3LDAsMTE2LDQsMCwxMjQsNCwwLDEyNCw3LDAsMTMxLDIsMCwKKyAgICAxMjUsNCwwLDEyMSwxNywwLDExNiw1LDAsMTA2LDYsMCwxMjQsNCwwLDEzMSwKKyAgICAxLDAsMSw4NywxMTMsOTQsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDE1NSwKKyAgICAwLDEsMSwxLDExOSw5NCwwLDg5LDExMyw5NCwwLDQsMTE2LDgsMCwxMDcsCisgICAgMTAsMCwxMTQsMjExLDAsMSwxMjUsOCwwLDEsMTIyLDI1LDAsMTE2LDksMCwKKyAgICAxMDAsMSwwLDEyNCw0LDAsMTI0LDgsMCwxMzEsMywwLDEsMTAwLDIsMCwKKyAgICA4Myw4Nyw4OSwxMDAsMiwwLDEwMCwyLDAsMTI1LDgsMCwxMjYsOCwwLDg4LAorICAgIDExMyw5NCwwLDg4LDExMyw5NCwwLDg3LDEyMSwzMywwLDExNiwxMCwwLDEyNCwxLAorICAgIDAsMTI0LDIsMCwxMjQsMywwLDEzMSwzLDAsMSwxMTYsOSwwLDEwMCwzLAorICAgIDAsMTI0LDEsMCwxMzEsMiwwLDEsODcsMTEwLDUzLDAsNCwxMTYsOCwwLAorICAgIDEwNywxMCwwLDExNCw0OCwxLDEsMTI1LDgsMCwxLDEyMiwyMSwwLDExNiw5LAorICAgIDAsMTAwLDEsMCwxMjQsMSwwLDEyNCw4LDAsMTMxLDMsMCwxLDg3LDg5LAorICAgIDEwMCwyLDAsMTAwLDIsMCwxMjUsOCwwLDEyNiw4LDAsODgsMTEwLDEsMCwKKyAgICA4OCwxMDAsMiwwLDgzLDQxLDQsMTIyLDI3LDg3LDExNCwxMDUsMTE2LDEwMSwzMiw5OCwKKyAgICAxMjEsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwKKyAgICAxMDUsMTA4LDEwMSw0NiwxMjIsMjcsOTksMTExLDExNywxMDgsMTAwLDMyLDExMCwxMTEsMTE2LDMyLAorICAgIDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw1OCwzMiwxMjMsMzMsMTE0LAorICAgIDEyNSw3OCwxMjIsMTIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDEwMCwzMiwxMjMsMzMsMTE0LDEyNSwKKyAgICA0MSwxMSwxMTQsNDAsMCwwLDAsMTE0LDQ4LDAsMCwwLDExNCwxNjUsMCwwLAorICAgIDAsMTE0LDM1LDAsMCwwLDExNCwzMCwwLDAsMCwxMTQsMywwLDAsMCwKKyAgICA5MCw1LDEwOSwxMDcsMTAwLDEwNSwxMTQsMjE4LDE1LDcwLDEwNSwxMDgsMTAxLDY5LDEyMCwxMDUsCisgICAgMTE1LDExNiwxMTUsNjksMTE0LDExNCwxMTEsMTE0LDExNCw0MiwwLDAsMCwxMTQsMTA3LDAsCisgICAgMCwwLDExNCw1NywwLDAsMCw0MSw5LDExNCwxMTAsMCwwLDAsMTE0LDM3LAorICAgIDAsMCwwLDExNCw1NSwwLDAsMCwxMTQsMjIxLDAsMCwwLDIxOCw2LDExMiwKKyAgICA5NywxMTQsMTAxLDExMCwxMTYsMTE0LDk2LDAsMCwwLDExNCwyOSwwLDAsMCwxMTQsCisgICAgMjUsMCwwLDAsMTE0LDIwMiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMTk5LDAsMCwwLDc2LDMsMCwKKyAgICAwLDExNSwzOCwwLDAsMCwwLDIsMTgsMSw2LDIsMjIsMSwxOCwxLAorICAgIDE3LDIsMTksMSwxNSwxLDMsMSwxNywxLDEzLDIsNywxLDE4LDMsCisgICAgMTYsMSwyNywxLDMsMSwxNiwxLDE3LDEsMTgsMiwxMjIsMjUsODMsMTExLAorICAgIDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsCisgICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDc4LDQxLDcsMTE0LDExNCwwLDAsMCwxMTQsCisgICAgMTEzLDAsMCwwLDExNCwxMTUsMCwwLDAsMTE0LDExNiwwLDAsMCwxMTQsMTk4LAorICAgIDAsMCwwLDExNCwyMDAsMCwwLDAsMTE0LDE5OSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsCisgICAgMCwxMTQsMjE5LDAsMCwwLDYyLDMsMCwwLDExNSw4LDAsMCwwLDEyLAorICAgIDIsNiwyLDEyLDUsMTIsNSwxMTQsMjE5LDAsMCwwLDk5LDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLAorICAgIDAsMTE1LDQ2LDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsCisgICAgMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwKKyAgICAwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsCisgICAgMTAwLDYsMCw4Myw0MSw3LDIxOCwyMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwKKyAgICAxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsNDUsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsCisgICAgMTAxLDExNSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwzMiwxMDIsMTA1LAorICAgIDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE1LDQ2LDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCw1LDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDc2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLAorICAgIDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLAorICAgIDEyNSwzLDAsMTE2LDIsMCwxMjQsMywwLDEwMCwxLDAsMTI0LDEsMCwxMDAsCisgICAgMiwwLDEyNCwyLDAsMTMxLDEsMiwxMjUsNCwwLDExNiwzLDAsMTI0LDQsCisgICAgMCwxMDAsMSwwLDEyNCwxLDAsMTAwLDMsMCwxMjQsMiwwLDEzMSwxLDIsCisgICAgODMsNDEsNCw3OCwxMTQsMTA4LDAsMCwwLDExNCwzNywwLDAsMCwxMTQsOTEsCisgICAgMCwwLDAsNDEsNCwxMTQsMTU5LDAsMCwwLDExNCwyMDEsMCwwLDAsMTE0LAorICAgIDE0MywwLDAsMCwxMTQsMTQ5LDAsMCwwLDQxLDUsMTE0LDExMCwwLDAsMCwKKyAgICAxMTQsMTI4LDAsMCwwLDExNCwzNywwLDAsMCwxMTQsNTUsMCwwLDAsMTE0LAorICAgIDIxMCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwKKyAgICAwLDAsMCwxMTQsMTg4LDAsMCwwLDEwOSwzLDAsMCwxMTUsOCwwLDAsCisgICAgMCwwLDEsMTUsMSwxNSwxLDI0LDEsMTIyLDI5LDgzLDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAorICAgIDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwKKyAgICAwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiwzOSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwKKyAgICAxMTUsMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLAorICAgIDQ2LDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDExMCwwLDAsMCwxMTQsMTI4LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsCisgICAgMCwwLDExNCwyMDMsMCwwLDAsMTE1LDMsMCwwLDExNSwyLDAsMCwwLAorICAgIDAsMiwxMjIsMzEsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCisgICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw3OCw0MSw2LDExNCwxMTQsMCwwLDAsMTE0LDExMywwLDAsMCwKKyAgICAxMTQsMTE1LDAsMCwwLDExNCwxMTYsMCwwLDAsMTE0LDE4OCwwLDAsMCwxMTQsCisgICAgMjAzLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw2LDAsMCwwLDExNCwyMjQsMCwwLDAsMTA1LDMsMCwKKyAgICAwLDExNSw2LDAsMCwwLDEyLDIsNiwyLDEyLDYsMTE0LDIyNCwwLDAsCisgICAgMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsCisgICAgMCwwLDY0LDAsMCwwLDExNSwxMzYsMCwwLDAsMTAxLDAsMCw5MCwxLAorICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwKKyAgICAxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsCisgICAgMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LAorICAgIDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLAorICAgIDEwMCwxMSwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwKKyAgICAwLDAsOTAsOSwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsCisgICAgMCwxMDAsMTYsMCwxMDAsMTcsMCwxMzIsMCwwLDkwLDExLDAsMTAxLDEyLDAsCisgICAgMTAwLDE4LDAsMTAwLDE5LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDEzLDAsMTAwLAorICAgIDIwLDAsODMsNDEsMjEsMjE4LDE5LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsCisgICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEyMiw5Myw3NiwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LAorICAgIDEwNCwxMDEsMzIsOTksMTExLDExMCwxMTUsMTE2LDExNCwxMTcsOTksMTE2LDExMSwxMTQsMzIsMTA1LAorICAgIDExNSwzMiwxMDAsMTAxLDExNSwxMDUsMTAzLDExMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTE5LDExMSwKKyAgICAxMTQsMTA3LDMyLDExOSwxMDUsMTE2LDEwNCwzMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKKyAgICAxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LDMsMCwwLDAsMCwwLAorICAgIDAsMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLAorICAgIDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsCisgICAgMCwwLDk1LDEsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsMTA4LAorICAgIDAsMCwwLDExNCwzNywwLDAsMCw0MSwzLDExNCwxMTAsMCwwLDAsMTE0LAorICAgIDEwOCwwLDAsMCwxMTQsMzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDYsMCwwLDAsMTE0LDE4NiwwLDAsMCwxMzIsMywwLAorICAgIDAsMTE1LDQsMCwwLDAsMCwxLDksMSwxMjIsMjgsNjksMTIwLDExNiwxMDEsCisgICAgMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDM0LDAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwwLDAsMTA3LDIsCisgICAgMCwxMTEsMzMsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMDYsMSwwLAorICAgIDEwNywyLDAsODMsNDEsMSw3OCw0MSwyLDExNCwyMTIsMCwwLDAsMTE0LDEyMCwKKyAgICAwLDAsMCw0MSwyLDExNCwxMTAsMCwwLDAsMTE0LDIxMywwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMjE0LAorICAgIDAsMCwwLDEzNiwzLDAsMCwxMTUsNCwwLDAsMCwwLDEsMTgsMSwKKyAgICAxMjIsMjYsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTAxLDExMyw5NSw5NSw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwyNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsCisgICAgMSwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwxLDAsNjUsODMsCisgICAgNDEsMSw3OCw0MSwzLDExNCwyMTUsMCwwLDAsMTE0LDEwOCwwLDAsMCwxMTQsCisgICAgMzcsMCwwLDAsNDEsMSwxMTQsMTEwLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDExNCwyMTYsMCwwLDAsMTQwLAorICAgIDMsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsNjksMTIwLDExNiwxMDEsCisgICAgMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwKKyAgICAwLDMsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsNDcsMCwKKyAgICAwLDAsMTE2LDAsMCwxMDYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwKKyAgICAwLDEzMSwyLDAsMTI1LDIsMCwxMTYsNCwwLDEwMCwxLDAsMTI0LDEsMCwKKyAgICAxMDYsNSwwLDEyNCwwLDAsMTA2LDYsMCwxMzEsMywwLDEsMTI0LDIsMCwKKyAgICA4Myw0MSwyLDEyMiwzOCw2NywxMTQsMTAxLDk3LDExNiwxMDEsMzIsOTcsMTEwLDMyLDExNywKKyAgICAxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLDEwMCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLAorICAgIDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMjIsMzgsMTAxLDEyMCwxMTYsCisgICAgMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLAorICAgIDExNCwxMjUsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLAorICAgIDMzLDExNCwxMjUsNDEsNywxMTQsMTIzLDAsMCwwLDExNCwxODksMCwwLDAsMTE0LAorICAgIDE0NywwLDAsMCw5MCwxNCw5OSwxMTQsMTAxLDk3LDExNiwxMDEsOTUsMTAwLDEyMSwxMTAsCisgICAgOTcsMTA5LDEwNSw5OSwxMTQsMTA3LDAsMCwwLDExNCwxMDgsMCwwLDAsMTE0LDM3LAorICAgIDAsMCwwLDQxLDMsMTE0LDExMCwwLDAsMCwxMTQsMTY2LDAsMCwwLDExNCwKKyAgICAxOTEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsCisgICAgMCwwLDAsMTE0LDE4NywwLDAsMCwxNDMsMywwLDAsMTE1LDEwLDAsMCwKKyAgICAwLDAsMiw2LDEsMTUsMSw2LDEsMTYsMSwxMjIsMzMsNjksMTIwLDExNiwKKyAgICAxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsOTksMTE0LDEwMSw5NywxMTYsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDQ1LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMTYsMiwKKyAgICAwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMiwwLDEsMTE2LDQsMCwxMDAsMSwKKyAgICAwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMCwwLDEwNiw2LDAsMTMxLDMsMCwKKyAgICAxLDEwMCwyLDAsODMsNDEsMywxMjIsMzAsNzMsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwKKyAgICAxMDUsMTIyLDEwMSwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTIyLDQwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKKyAgICAxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDEwMSwKKyAgICAxMjAsMTAxLDk5LDExNywxMTYsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwKKyAgICAxMjUsNzgsNDEsNywxMTQsMTIzLDAsMCwwLDExNCwxODksMCwwLDAsMTE0LDE0NywKKyAgICAwLDAsMCw5MCwxMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDAsMTIxLDExMCw5NywxMDksMTA1LAorICAgIDk5LDExNCwxMDcsMCwwLDAsMTE0LDEwOCwwLDAsMCwxMTQsMzcsMCwwLDAsCisgICAgNDEsMiwxMTQsMTEwLDAsMCwwLDExNCwxOTEsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLDAsMTE0LDE5MiwwLDAsMCwKKyAgICAxNTEsMywwLDAsMTE1LDYsMCwwLDAsMCwyLDE5LDEsNiwxLDEyMiwKKyAgICAzMSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw0NiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwKKyAgICAwLDMsMCwwLDAsMTE1LDQ4LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMSwwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMzcsMCwwLDExNiwyLDAsCisgICAgMTM1LDAsMCwxMDIsMSwwLDEwMCwyLDAsMTAwLDMsMCwxMzQsMCwwLDExNiwKKyAgICAzLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDgzLDQxLDQsMTIyLDQ5LDgyLDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NiwxMTQsCisgICAgMzEsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsNCwwLDAsMCw1MSwwLDAsMCwxMTUsMzEsMCwwLDAsMTI0LDAsCisgICAgMCw5MywyMSwwLDEyNSwxLDAsMTM2LDAsMCwxMDAsMCwwLDEyNCwxLDAsCisgICAgMjMsMTA3LDIsMCw4NiwxLDExMywzLDAsMTAwLDEsMCw4Myw0MSwyLDExNCwKKyAgICAxODYsMCwwLDAsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjQsMCwwLAorICAgIDAsMjE4LDYsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDEsMSwyMTgsOSwxMDIsMTA1LDEwOCwKKyAgICAxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLDAsCisgICAgMjUwLDksNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDE2MCwzLDAsMCwxMTUsCisgICAgMiwwLDAsMCw2LDEsMTIyLDQ5LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKKyAgICAxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwKKyAgICA2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsNDEsNCwxMTQsNDAsMCwwLDAsCisgICAgMTE0LDM3LDAsMCwwLDIxOCwzLDk3LDExMCwxMjEsMjE4LDE4LDY5LDg4LDg0LDY5LAorICAgIDc4LDgzLDczLDc5LDc4LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQxLDIsCisgICAgMTE0LDExMCwwLDAsMCwxMTQsMTI4LDAsMCwwLDExNCw0LDAsMCwwLDQxLAorICAgIDEsMTE0LDIyNywwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMTYxLDAsMCwwLAorICAgIDE1NywzLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTksMSwxOCwxLDEyMiwKKyAgICAzMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsCisgICAgNjMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsCisgICAgOTcsMTEwLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLDk3LDExNiwKKyAgICAxMDEsMzIsOTcsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ2LAorICAgIDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDExMCwwLDAsMCwxMTQsMTI4LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwKKyAgICAwLDExNCwxODgsMCwwLDAsMTYzLDMsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgMiwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLAorICAgIDUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLAorICAgIDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDExNSwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMTEwLAorICAgIDAsMCwwLDExNCwxMjgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDYsMCwwLDAsMTE0LDIwMywwLDAsMCwxNjcsMywwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwyLDEyMiwzMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKKyAgICAxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiwKKyAgICA5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDcsMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDgzLDQxLDEsMTIyLDU4LDgyLDEwMSwxMTYsMTE3LAorICAgIDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5NywKKyAgICAxMTUsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsNDEsMSwxMTQsMzcsMCwwLDAsNDEsMiwxMTQsCisgICAgMTEwLDAsMCwwLDExNCwxMjgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDYsMCwwLDAsMTE0LDE1OSwwLDAsMCwxNzEsMywwLAorICAgIDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwzMiw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LAorICAgIDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLAorICAgIDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNzgsNDEsMTQsMTE0LDExNCwwLAorICAgIDAsMCwxMTQsMTEzLDAsMCwwLDExNCwxMTUsMCwwLDAsMTE0LDExNiwwLDAsCisgICAgMCwxMTQsMTg2LDAsMCwwLDExNCwyMTQsMCwwLDAsMTE0LDIxNiwwLDAsMCwKKyAgICAxMTQsMTg3LDAsMCwwLDExNCwxOTIsMCwwLDAsMTE0LDE2MSwwLDAsMCwxMTQsCisgICAgMTg4LDAsMCwwLDExNCwyMDMsMCwwLDAsMTE0LDEyNSwwLDAsMCwxMTQsMTU5LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw2LDAsMCwwLDExNCwyMjUsMCwwLDAsMTI0LDMsMCwwLAorICAgIDExNSwyMCwwLDAsMCwxMiw2LDYsMiwxMiw0LDEyLDQsMTIsMywxMiwKKyAgICA4LDEyLDYsMTIsNiwxMiw0LDEyLDQsMTE0LDIyNSwwLDAsMCw5OSwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LAorICAgIDAsMCwwLDExNSwxMzAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsCisgICAgMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLAorICAgIDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLAorICAgIDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsCisgICAgMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwxMSwwLAorICAgIDEzMiwwLDAsOTAsOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsCisgICAgOSwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTYsCisgICAgMCwxMDAsMTcsMCwxMzIsMCwwLDkwLDExLDAsMTAwLDE4LDAsMTAwLDE5LDAsCisgICAgMTMyLDAsMCw5MCwxMiwwLDEwMCwyMCwwLDgzLDQxLDIxLDIxOCwxNCw5NSw3OCwKKyAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsOTcsMzgsMSwwLAorICAgIDAsODIsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsMzIsMTEwLDk3LAorICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDM5LAorICAgIDExNSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwzMiwzMiw3MywxMTYsMzIsMTE3LDExNSwxMDEsMTE1LAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLAorICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDEwNSwxMTYsMTE1LAorICAgIDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsCisgICAgOTcsMTEwLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsCisgICAgMTE2LDMyLDEwOCwxMTEsMTExLDEwNywxMTUsMzIsMTE3LDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCisgICAgOTcsMTE0LDEwMSwxMTAsMTE2LDM5LDExNSwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSw5NSw0NiwzMiwzMiw4NywxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsCisgICAgMzIsOTksMTA0LDk3LDExMCwxMDMsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTExLDExOSwxMTAsMzIsMTEyLDk3LDExNiwxMDQsMzIsCisgICAgMTA1LDExNSwzMiwxMTQsMTAxLDk5LDExMSwxMDksMTEyLDExNywxMTYsMTAxLDEwMCw0NCwxMCwzMiwKKyAgICAzMiwzMiwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDMyLDMyLDcwLDExMSwxMTQsMzIsMTE2LDExMSwxMTIsNDUsMTA4LAorICAgIDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwKKyAgICAxMTUsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwxMTUsMTIxLAorICAgIDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0Niw5OSw0LDAsMCwwLDAsMCwwLDAsCisgICAgNCwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw1MiwwLDAsCisgICAgMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCwKKyAgICA5NSwxLDAsMTE2LDIsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDAsMCwxMzEsCisgICAgMSwwLDEyNCwwLDAsOTUsNCwwLDEyNCwzLDAsMTI0LDAsMCw5NSw1LAorICAgIDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDYsMjE4LDUsOTUsMTEwLDk3LDEwOSwKKyAgICAxMDEsMjE4LDUsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDk1LDAsMCwwLDIxOCwxNiw5NSwKKyAgICAxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDIxOCwKKyAgICAxNyw5NSwxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywKKyAgICAxMTYsMTA0LDIxOCwxMiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0MSw0LDExNCwxMTAsMCwwLDAsMTE0LDEwOCwwLDAsMCwxMTQsMzcsMCwwLAorICAgIDAsMjE4LDExLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDExNCwxODYsMCwKKyAgICAwLDAsMTg0LDMsMCwwLDExNSw4LDAsMCwwLDAsMSw5LDEsOSwKKyAgICAxLDIxLDEsMTIyLDIzLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsCisgICAgOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNTMsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTAwLAorICAgIDEsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMSwwLDEyNSwyLDAsMTI1LDMsCisgICAgMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsNDMsMCwxMDAsNiwwLAorICAgIDgzLDEyNCwxLDAsMTAwLDUsMCwxMDIsMiwwLDgzLDQxLDcsMTIyLDYyLDgyLAorICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsMzIsMTExLAorICAgIDEwMiwzMiw0MCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQ1LDExMCw5NywxMDksMTAxLDQ0LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDUsMTEyLDk3LAorICAgIDExNiwxMDQsNDUsOTcsMTE2LDExNiwxMTQsNDUsMTEwLDk3LDEwOSwxMDEsNDEsMTE0LDYwLDAsCisgICAgMCwwLDExNCwzMiwwLDAsMCwxMTQsOCwwLDAsMCwxMTQsMzcsMCwwLAorICAgIDAsOTAsOCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0MSwyLDEyMiwzLDExNSwKKyAgICAxMjEsMTE1LDEyMiw0LDExMiw5NywxMTYsMTA0LDQxLDIsMTE0LDIzMiwwLDAsMCwxMTQsCisgICAgMzQsMCwwLDAsNDEsNCwxMTQsMTEwLDAsMCwwLDExNCwyMjMsMCwwLDAsCisgICAgMjE4LDMsMTAwLDExMSwxMTYsOTAsMiwxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw2LDAsMCwwLDIxOCwyMyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsCisgICAgMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwKKyAgICAxMTUsMTkwLDMsMCwwLDExNSw4LDAsMCwwLDAsMiwyNywxLDEyLDIsCisgICAgNCwzLDEyMiwzOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LAorICAgIDExNiwxMDQsNDYsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDM4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwwLDkyLDIsMCwKKyAgICAxMjUsMSwwLDEyNSwyLDAsMTE2LDEsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LAorICAgIDEsMCwyNSwxMjQsMiwwLDEzMSwyLDAsODMsNDEsMSw3OCw0MSw0LDExNCwKKyAgICAyMzksMCwwLDAsMTE0LDExOSwwLDAsMCwxMTQsOCwwLDAsMCwyMTgsNywKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDEsMywxMTQsMTEwLDAsMCwwLDkwLDE4LAorICAgIDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LAorICAgIDEwOSwxMDEsOTAsMTQsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwxMTQsOTUsMTEwLDk3LAorICAgIDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLAorICAgIDAsMTE0LDIzNCwwLDAsMCwyMDAsMywwLDAsMTE1LDQsMCwwLDAsMCwKKyAgICAxLDE4LDEsMTIyLDMxLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsCisgICAgOTcsMTE2LDEwNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LAorICAgIDExMiw5NywxMTYsMTA0LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwKKyAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDExOCwwLDAsMCwxMTYsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsMTI1LDEsMCwKKyAgICAxMjQsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMDcsMywwLDExNCwxMTEsMCwxMjQsCisgICAgMCwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwxLDAsMTMxLDIsCisgICAgMCwxMjUsMiwwLDEyNCwyLDAsMTAwLDAsMCwxMDcsOSwwLDExNCwxMDIsMCwKKyAgICAxMjQsMiwwLDEwNiw1LDAsMTAwLDAsMCwxMDcsOCwwLDExNCwxMDIsMCwxMjQsCisgICAgMiwwLDEwNiw2LDAsMTE0LDEwMiwwLDEyNCwyLDAsMTA2LDYsMCwxMjQsMCwKKyAgICAwLDk1LDcsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMiwwLDEyNCwwLDAsCisgICAgMTA2LDcsMCw4Myw0MSwxLDc4LDQxLDgsMTE0LDk1LDAsMCwwLDExNCwyMzQsCisgICAgMCwwLDAsMTE0LDIzNSwwLDAsMCwxMTQsMjM2LDAsMCwwLDExNCwyMzIsMCwKKyAgICAwLDAsMTE0LDEyOSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwyMzMsMCwwLAorICAgIDAsNDEsMywxMTQsMTEwLDAsMCwwLDkwLDExLDExMiw5NywxMTQsMTAxLDExMCwxMTYsCisgICAgOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE2NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNiwwLDAsMCwyMTgsMTIsOTUsMTE0LDEwMSw5OSw5NywKKyAgICAxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDIwNCwzLDAsMCwxMTUsMTYsMCwwLDAsCisgICAgMCwyLDE4LDEsMTUsMSwyMSwzLDI3LDEsOSwxLDEyLDEsOSwxLAorICAgIDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCisgICAgNDYsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDk5LDEsMCwKKyAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLAorICAgIDEzMSwwLDAsMTMxLDEsMCw4Myw0MSwxLDc4LDQxLDIsMjE4LDQsMTA1LDExNiwKKyAgICAxMDEsMTE0LDExNCwyNDEsMCwwLDAsNDEsMSwxMTQsMTEwLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCw4LDk1LAorICAgIDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSwyMTcsMywwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwxLDEyMiwyMyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LAorICAgIDExNiwxMDQsNDYsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLAorICAgIDAsMTMxLDEsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDMzLDAsMCwwLDExNCwKKyAgICAyNDEsMCwwLDAsNDEsMSwxMTQsMTEwLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCw3LDk1LDk1LDEwOCwxMDEsCisgICAgMTEwLDk1LDk1LDIyMCwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIyLAorICAgIDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwKKyAgICA5NSwxMDgsMTAxLDExMCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwKKyAgICAxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsCisgICAgNDEsMiw3OCwxMjIsMjAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCwKKyAgICA5NywxMTYsMTA0LDQwLDEyMywzMywxMTQsMTI1LDQxLDQxLDIsMTE0LDQ5LDAsMCwwLAorICAgIDExNCwyMzMsMCwwLDAsNDEsMSwxMTQsMTEwLDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCw4LDk1LDk1LDExNCwKKyAgICAxMDEsMTEyLDExNCw5NSw5NSwyMjMsMywwLDAsMTE1LDIsMCwwLDAsMCwxLAorICAgIDEyMiwyMyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCisgICAgNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LAorICAgIDAsMCwwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLDAsMTA3LAorICAgIDYsMCw4Myw0MSwxLDc4LDQxLDEsMTE0LDI0MSwwLDAsMCw0MSwyLDExNCwKKyAgICAxMTAsMCwwLDAsMjE4LDQsMTA1LDExNiwxMDEsMTA5LDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw2LDAsMCwwLDIxOCwxMiw5NSw5NSw5OSwxMTEsMTEwLAorICAgIDExNiw5NywxMDUsMTEwLDExNSw5NSw5NSwyMjYsMywwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LAorICAgIDExNiwxMDQsNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwxMTUsOTUsOTUsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwKKyAgICAxLDAsMTI0LDEsMCwxMzEsMSwwLDEsMTAwLDAsMCw4Myw0MSwxLDc4LAorICAgIDQxLDIsMTE0LDIzMywwLDAsMCwxMTQsMTY1LDAsMCwwLDQxLDIsMTE0LDExMCwKKyAgICAwLDAsMCwxMTQsMjQ2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw2LDAsMCwwLDExNCwxNjUsMCwwLDAsMjI5LDMsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMSwxMjIsMjEsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAorICAgIDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNzgsNDEsCisgICAgMTMsMTE0LDExNCwwLDAsMCwxMTQsMTEzLDAsMCwwLDExNCwxMTUsMCwwLDAsCisgICAgMTE0LDExNiwwLDAsMCwxMTQsMTg2LDAsMCwwLDExNCwyMzksMCwwLDAsMTE0LAorICAgIDIzNCwwLDAsMCwxMTQsMjQxLDAsMCwwLDExNCwyNDMsMCwwLDAsMTE0LDI0NCwKKyAgICAwLDAsMCwxMTQsMjQ1LDAsMCwwLDExNCwyNDcsMCwwLDAsMTE0LDE2NSwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNiwwLDAsMCwxMTQsMjMxLDAsMCwwLDE3NywzLDAsMCwxMTUsCisgICAgMjAsMCwwLDAsMTIsNSw2LDIsMTIsNiwxMiwxMCwxMiw0LDEyLDEzLAorICAgIDEyLDMsMTIsMywxMiwzLDEyLDMsMTE0LDIzMSwwLDAsMCw5OSwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDY0LDAsCisgICAgMCwwLDExNSwxMTgsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCwKKyAgICA5MCwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMSwKKyAgICA0LDAsMTAwLDMsMCwxMDAsNCwwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LAorICAgIDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNiwwLDEwMCw3LDAsCisgICAgMTAwLDgsMCwxMzIsMCwwLDkwLDcsMCwxMDAsOSwwLDEwMCwxMCwwLDEzMiwKKyAgICAwLDAsOTAsOCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsOTAsOSwKKyAgICAwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTUsMCwKKyAgICAxMDAsMTYsMCwxMzIsMCwwLDkwLDExLDAsMTAwLDE3LDAsODMsNDEsMTgsMjE4LAorICAgIDE2LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDk5LDQsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDQsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDExNiwwLDAsMTI0LDEsCisgICAgMCwxMjQsMiwwLDEyNCwzLDAsMTMxLDMsMCwxMjQsMCwwLDk1LDEsMCwKKyAgICAxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsMjMxLDAsMCwwLDExNCwyMzMsCisgICAgMCwwLDAsNDEsNCwxMTQsMTEwLDAsMCwwLDExNCwxMDgsMCwwLDAsMTE0LAorICAgIDM3LDAsMCwwLDExNCwyMzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDYsMCwwLDAsMTE0LDE4NiwwLDAsMCwyMzUsMywwLAorICAgIDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSw3OCw5NywxMDksMTAxLDExNSwKKyAgICAxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKKyAgICAxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwKKyAgICAxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsMTIyLAorICAgIDExNSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwzMiwxMDIsMTExLDExNCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAorICAgIDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwKKyAgICAzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSw5Nyw5OSwxMDQsCisgICAgMTA1LDExMCwxMDEsMTE0LDEyMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA2LAorICAgIDExMSw5OCwzMiwxMDUsMTE2LDExNSwxMDEsMTA4LDEwMiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwxMjIsMjUsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLAorICAgIDExNCwxMjUsMzIsNDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNDEsNjIsNDEsCisgICAgMiwxMTQsNDksMCwwLDAsMTE0LDExNCwwLDAsMCw0MSwyLDExNCwxNzIsMCwKKyAgICAwLDAsMTE0LDE5MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNiwwLDAsMCwyMTgsMTEsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LAorICAgIDEwMSwxMTIsMTE0LDIzOCwzLDAsMCwxMTUsMiwwLDAsMCwwLDcsMTIyLDI4LAorICAgIDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiw3OCw4NCwxMTQsNCwKKyAgICAwLDAsMCw0MSwyLDExNCwxMTAsMCwwLDAsMTE0LDEyOCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMTYxLAorICAgIDAsMCwwLDI0NywzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDI3LAorICAgIDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDc4LDExNCwzMiwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCw0MSwyLDExNCwxMTAsMCwwLDAsMTE0LDEyOCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsCisgICAgMCwxMTQsMjAzLDAsMCwwLDI1MCwzLDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDEsMTIyLDI3LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNiwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMjIsMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEwMCwyLAorICAgIDAsMTAwLDMsMCwxMDAsNCwwLDEwMCw1LDAsMTMxLDMsMSw4Myw0MSw2LAorICAgIDc4LDExNCwzMiwwLDAsMCwxMjIsOCw2MCwxMTUsMTE2LDExNCwxMDUsMTEwLDEwMyw2MiwKKyAgICAxMTQsMTkwLDAsMCwwLDExNCwyMDUsMCwwLDAsODQsNDEsMSwxMTQsMjA2LDAsCisgICAgMCwwLDQxLDIsMTE0LDExMCwwLDAsMCwxMTQsMTI4LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDExNCwxODgsMCwKKyAgICAwLDAsMjUzLDMsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjUsOTUsCisgICAgNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLAorICAgIDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDQyLDg1LDExNSwxMDEsMzIsMTAwLDEwMSwKKyAgICAxMDIsOTcsMTE3LDEwOCwxMTYsMzIsMTE1LDEwMSwxMDksOTcsMTEwLDExNiwxMDUsOTksMTE1LDMyLAorICAgIDEwMiwxMTEsMTE0LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk5LDExNCwxMDEsOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDQ2LDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDExMCwwLDAsCisgICAgMCwxMTQsMTY2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw2LDAsMCwwLDExNCwxODcsMCwwLDAsMCw0LDAsMCwxMTUsMCwKKyAgICAwLDAsMCwxMjIsMzAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTksMTE0LDEwMSw5NywxMTYsMTAxLDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDAsMCwKKyAgICA4Myw0MSwxLDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDExMCwwLDAsMCwKKyAgICAxMTQsMTkxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA2LDAsMCwwLDExNCwxOTIsMCwwLDAsMyw0LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDEsMTIyLDI4LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDMyLDAsMCwwLDExNiwwLDAsMTAwLAorICAgIDEsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDIsMCwxLDExNiwyLDAsMTA2LAorICAgIDMsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MSwyLDEyMiw5OCwKKyAgICA3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsCisgICAgMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsCisgICAgMTAxLDMyLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDQxLDMyLAorICAgIDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDEyMiwzOCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMjMsMzMsMTE0LDEyNSw0MSw0LDExNCwxMDcsMCwwLAorICAgIDAsMTE0LDIzMywwLDAsMCwxMTQsMTIzLDAsMCwwLDExNCwxOTMsMCwwLDAsCisgICAgNDEsMiwxMTQsMTEwLDAsMCwwLDExNCwxMjgsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLDAsMTE0LDE5NCwwLDAsMCwKKyAgICA2LDQsMCwwLDExNSw0LDAsMCwwLDAsNywxNiwxLDEyMiwyOCw5NSwKKyAgICA3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKKyAgICAxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MSwxMiwxMTQsMTE0LAorICAgIDAsMCwwLDExNCwxMTMsMCwwLDAsMTE0LDExNSwwLDAsMCwxMTQsMTg2LDAsCisgICAgMCwwLDExNCwxODQsMCwwLDAsMTE0LDI0OSwwLDAsMCwxMTQsMTYxLDAsMCwKKyAgICAwLDExNCwyMDMsMCwwLDAsMTE0LDE4OCwwLDAsMCwxMTQsMTg3LDAsMCwwLAorICAgIDExNCwxOTIsMCwwLDAsMTE0LDE5NCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMjQ4LAorICAgIDAsMCwwLDIzNCwzLDAsMCwxMTUsMTYsMCwwLDAsMTIsMSwxMiwzLAorICAgIDE4LDksMTIsMywxMiwzLDEyLDMsMTIsMywxMiwzLDExNCwyNDgsMCwwLAorICAgIDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLAorICAgIDAsMCw2NCwwLDAsMCwxMTUsMTYwLDAsMCwwLDEwMSwwLDAsOTAsMSwKKyAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsCisgICAgMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLAorICAgIDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDYsCisgICAgMCwxMDEsNCwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDEzMSwxLDAsCisgICAgOTAsNywwLDEwMSw0LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsMTMxLAorICAgIDEsMCw5MCw4LDAsMTAxLDQsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMDAsMTIsCisgICAgMCwxMzIsMSwwLDEzMSwxLDAsOTAsOSwwLDEwMSw0LDAsMTAwLDEwLDAsCisgICAgMTAwLDEwLDAsMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDIsMCwxMzEsMSwwLDkwLAorICAgIDEwLDAsMTAxLDQsMCwxMDAsMTAsMCwxMDAsMTUsMCwxMDAsMTYsMCwxMzIsMSwKKyAgICAwLDEzMSwxLDAsOTAsMTEsMCwxMDAsMTAsMCw4Myw0MSwxNywyMTgsMTAsODAsCisgICAgOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDEyMiw2Miw3NywxMDEsMTE2LDk3LDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLAorICAgIDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDMyLDk3LDExMCwxMDAsMzIsMTEyLDk3LDk5LAorICAgIDEwNyw5NywxMDMsMTAxLDMyLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDMyLDk3LDExNiwKKyAgICAxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsNDYsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsNTUsCisgICAgMCwwLDAsMTIwLDQ4LDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTMxLAorICAgIDAsMCw2OCw5MywzMSwwLDEyNSwxLDAsMTE2LDMsMCwxMjQsMSwwLDEwMCwKKyAgICAxLDAsMTMxLDIsMCwxMTQsMTYsMCwxMjQsMSwwLDEwNiw0LDAsMTMxLDAsCisgICAgMCwxLDExMywxNiwwLDg3LDEwMCwyLDAsODMsNDEsMywxMjIsMTI1LDY3LDk3LAorICAgIDEwOCwxMDgsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LAorICAgIDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw0MCw0MSwzMiwxMDksMTAxLDExNiwxMDQsMTExLAorICAgIDEwMCwzMiwxMTEsMTEwLDMyLDk3LDEwOCwxMDgsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwKKyAgICAxMTYsMTE0LDEyMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTUsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMTE1LDExNiwxMTEsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTUsMTIxLAorICAgIDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LAorICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE1LDMyLDQwLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0MSw0NiwyMTgsMTcsMTA1LDExMCwxMTgsCisgICAgOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw3OCw0MSwKKyAgICA1LDExNCw4LDAsMCwwLDIxOCwxOSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjE4LDYsMTE4LDk3LDEwOCwKKyAgICAxMTcsMTAxLDExNSwxMTQsMTE3LDAsMCwwLDExNCwyNTEsMCwwLDAsNDEsMiwxMTQsCisgICAgMTcyLDAsMCwwLDIxOCw2LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDExNCwyNTEsMCwwLDAsCisgICAgMjMsNCwwLDAsMTE1LDYsMCwwLDAsMCw0LDIyLDEsMTUsMSwxMjIsCisgICAgMjgsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LAorICAgIDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDMsMCwwLDAsMTIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDEwNywwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTAwLDEsMCwKKyAgICAxMDcsOSwwLDExNCw0MSwwLDExNiwwLDAsMTA2LDEsMCwxMiwxMTQsNDEsMCwKKyAgICAxMTYsMiwwLDEwNiwzLDAsMTAwLDIsMCwxMTYsNCwwLDEzMSwyLDAsMSwKKyAgICAxMjAsNTksMCwxMTYsMCwwLDEwNiwxLDAsNjgsOTMsNDQsMCwxMjUsMiwwLAorICAgIDEyMSwxNCwwLDEyNCwyLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDg3LDExMyw1MSwKKyAgICAwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsOTQsMCwxLDEsMSwxMTksNTEsCisgICAgMCw4OSwxMTMsNTEsMCw4OCwxMTMsNTEsMCw4NywxMDAsMSwwLDgzLDEwMCwxLAorICAgIDAsODMsNDEsMywxMjIsMTEzLDgzLDEwMSw5NywxMTQsOTksMTA0LDMyLDExNSwxMDEsMTEzLAorICAgIDExNywxMDEsMTEwLDk5LDEwMSwzMiwxMTEsMTAyLDMyLDEwNCwxMTEsMTExLDEwNywxMTUsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsOTcsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsCisgICAgMzksMTEyLDk3LDExNiwxMDQsMzksNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNzMsMTAyLDMyLDM5LDEwNCwxMTEsMTExLDEwNywxMTUsMzksMzIsMTA1LDExNSwzMiwxMDIsCisgICAgOTcsMTA4LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDExNywxMTUsMTAxLDMyLDExNSwxMjEsCisgICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsMTIyLDIzLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsMTA1LDExNSwzMiwxMDEsMTA5LDExMiwxMTYsCisgICAgMTIxLDQxLDYsMTE0LDgsMCwwLDAsMjE4LDEwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwKKyAgICAxMTEsMTExLDEwNywxMTUsMTE0LDYyLDAsMCwwLDExNCw2MywwLDAsMCwxMTQsMTI3LAorICAgIDAsMCwwLDExNCwxMDksMCwwLDAsNDEsMywxMTQsMTcyLDAsMCwwLDExNCwKKyAgICAzNywwLDAsMCw5MCw0LDEwNCwxMTEsMTExLDEwNywxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNiwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMSw0LDAsMCwxMTUsMTYsMCwwLDAsMCwKKyAgICA3LDI1LDEsMTYsMSwxNiwxLDMsMSwxNCwxLDEzLDEsMTIsMiwxMjIsCisgICAgMjIsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDMsMCwwLDAsMTksMCwwLDAsNjcsMCwwLDAsMTE1LDEyMywwLDAsCisgICAgMCwxMjQsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsNTMsMCwxMjEsMTYsMCwKKyAgICAxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwwLDg3LDExMCwyMiwwLAorICAgIDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNTIsMCwxLDEsMSwxMDAsMiwwLAorICAgIDgzLDg5LDExMCwxLDAsODgsMTIxLDE3LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwKKyAgICAxLDAsMjUsMTI1LDIsMCw4NywxMTAsNDYsMCw0LDExNiw1LDAsMTA3LDEwLAorICAgIDAsMTE0LDExOCwwLDEsMSwxLDEyNCwwLDAsMTA2LDYsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNiwzLDAsMTA2LDQsMCwxMjQsCisgICAgMSwwLDYwLDg5LDExMCwxLDAsODgsMTI0LDIsMCw4Myw0MSwzLDEyMiwyMTAsCisgICAgNzEsMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsCisgICAgMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsCisgICAgMTIxLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsMTA1LDExNSwzMiwxMTAsMTExLAorICAgIDExNiwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsNDQsMzIsCisgICAgMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDExMSwxMTIsMTE0LAorICAgIDEwNSw5NywxMTYsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDk3LDExMCwxMDAsMzIsOTksOTcsOTksMTA0LDEwMSwzMiwxMDUsMTE2LAorICAgIDQ2LDMyLDczLDEwMiwzMiwxMTAsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwNSwKKyAgICAxMTUsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSw0NCwzMiwxMTUsMTE2LDExMSwKKyAgICAxMTQsMTAxLDMyLDc4LDExMSwxMTAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDExNCwzMiwwLDAsMCw3OCw0MSw3LDExNCwzLDAsMCwwLDExNCwKKyAgICA0NywwLDAsMCwyMTgsMTcsNzAsMTA1LDEwOCwxMDEsNzgsMTExLDExNiw3MCwxMTEsMTE3LAorICAgIDExMCwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNCw4LDAsMCwwLDExNCwyNTIsMCwwLAorICAgIDAsMTE0LDEzOSwwLDAsMCwxMTQsMCwxLDAsMCw0MSwzLDExNCwxNzIsMCwKKyAgICAwLDAsMTE0LDM3LDAsMCwwLDExNCwyNTQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLDAsMjE4LDIwLDk1LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LAorICAgIDEwMSw0OCw0LDAsMCwxMTUsMjIsMCwwLDAsMCw4LDEyLDEsMywxLAorICAgIDE2LDEsMTMsMyw5LDEsMywxLDE3LDEsMTMsMSwxNSwxLDE4LDEsCisgICAgMTIyLDMxLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMywwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTE5LDAsMCwwLDExNiwwLDAsMTI0LDIsCisgICAgMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDM5LDAsMTI0LDIsMCwxMDYsMSwwLAorICAgIDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDMsMCwxMjUsNCwwLDExMCwKKyAgICAyMSwwLDEyNCwyLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsCisgICAgMCwxMDMsMCwwLDEyNSw0LDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw5LDAsCisgICAgMTE0LDg4LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTI0LDMsMCwxMzEsCisgICAgMiwwLDgzLDExNiwzLDAsMTA2LDUsMCwxMjQsMSwwLDEwMCwwLDAsMTMxLAorICAgIDIsMCwxMjUsNSwwLDEyNCw0LDAsMTI0LDUsMCw5NSw2LDAsMTI0LDUsCisgICAgMCw4Myw0MSwyLDc4LDExNCwxMjYsMCwwLDAsNDEsNywxMTQsMTE3LDAsMCwKKyAgICAwLDExNCwxMjYsMCwwLDAsMTE0LDE4MywwLDAsMCwxMTQsMTIzLDAsMCwwLAorICAgIDExNCwxODAsMCwwLDAsMTE0LDE2MiwwLDAsMCwxMTQsMTU4LDAsMCwwLDQxLAorICAgIDYsMTE0LDE3MiwwLDAsMCwxMTQsMTI4LDAsMCwwLDExNCwyNTQsMCwwLDAsCisgICAgMTE0LDEyOSwwLDAsMCwxMTQsMTMwLDAsMCwwLDExNCwxNjYsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLDAsMjE4LDE2LAorICAgIDk1LDEwOCwxMDEsMTAzLDk3LDk5LDEyMSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSwKKyAgICA3MCw0LDAsMCwxMTUsMTgsMCwwLDAsMCw0LDE1LDEsMjQsMiwxNSwKKyAgICAxLDYsMSwxMiwxLDE2LDEsMTgsMSw5LDEsMTIyLDI3LDgwLDk3LDExNiwKKyAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDgsMTAxLDEwMyw5Nyw5OSwxMjEsOTUsCisgICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksNzgsOTksNCwwLDAsMCwwLDAsCisgICAgMCwwLDksMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMjQzLAorICAgIDAsMCwwLDEwMywwLDAsMTI1LDQsMCwxMjAsMjMwLDAsMTI0LDIsMCw2OCwKKyAgICA5MywxOTEsMCwxMjUsNSwwLDExNiwwLDAsMTI0LDUsMCwxMTYsMSwwLDExNiwKKyAgICAyLDAsMTAyLDIsMCwxMzEsMiwwLDExNSw0MywwLDExMywxMywwLDEyNCwwLAorICAgIDAsMTA2LDMsMCwxMjQsNSwwLDEzMSwxLDAsMTI1LDYsMCwxMjQsNiwwLAorICAgIDEwMCwxLDAsMTA3LDksMCwxMTQsMTMsMCwxMTYsNCwwLDEyNCw2LDAsMTAwLAorICAgIDIsMCwxMzEsMiwwLDExNCwxMDYsMCwxMjQsNiwwLDEwNiw1LDAsMTI0LDEsCisgICAgMCwxMjQsMywwLDEzMSwyLDAsMTI1LDcsMCwxMTAsMTgsMCwxMjQsMCwwLAorICAgIDEwNiw2LDAsMTI0LDEsMCwxMjQsNiwwLDEzMSwyLDAsMTI1LDcsMCwxMjQsCisgICAgNywwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMTM5LDAsMTEzLDEzLDAsMTI0LDcsCisgICAgMCwxMDYsNywwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTU4LDAsMTI0LDcsMCwKKyAgICA4MywxMjQsNywwLDEwNiw4LDAsMTI1LDgsMCwxMjQsOCwwLDEwMCwxLDAsCisgICAgMTA3LDgsMCwxMTQsMTkxLDAsMTE2LDksMCwxMDAsMywwLDEzMSwxLDAsMTMwLAorICAgIDEsMCwxMjQsNCwwLDEwNiwxMCwwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywKKyAgICAxMywwLDg3LDExNiwxMSwwLDEwNiwxMiwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsCisgICAgMiwwLDEyNSw3LDAsMTI0LDQsMCwxMjQsNywwLDk1LDgsMCwxMjQsNywKKyAgICAwLDgzLDEwMCwxLDAsODMsNDEsNCwxMjIsNjMsNzAsMTA1LDExMCwxMDAsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTEsMTE0LDMyLDExMCw5NywxMDksCisgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMTEsMTE0LDMyLAorICAgIDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NywxMTIsOTcsOTksMTA3LAorICAgIDk3LDEwMywxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsNzgsMTE0LDE4MiwwLDAsMCwxMjIsCisgICAgMTksMTE1LDExMiwxMDEsOTksMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDEsMTMsMTE0LDE0NSwwLDAsMCwxMTQsNzEsMCwwLDAsCisgICAgMjE4LDUsOTgsMTIxLDExNiwxMDEsMTE1LDExNCwyLDEsMCwwLDExNCwxMTcsMCwwLAorICAgIDAsMTE0LDE4MiwwLDAsMCwxMTQsMywxLDAsMCwxMTQsMTI5LDAsMCwwLAorICAgIDExNCwxNTgsMCwwLDAsMTE0LDEwOSwwLDAsMCwxMTQsMTUxLDAsMCwwLDExNCwKKyAgICAxMjMsMCwwLDAsMTE0LDE2MiwwLDAsMCw0MSw5LDExNCwxNzIsMCwwLDAsCisgICAgMTE0LDEyOCwwLDAsMCwxMTQsMzcsMCwwLDAsMTE0LDE4MSwwLDAsMCwyMTgsCisgICAgMTQsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsOTAsCisgICAgNSwxMDEsMTEwLDExNiwxMTQsMTIxLDExNCwyNTQsMCwwLDAsMTE0LDE2NiwwLDAsMCwKKyAgICAxMTQsMTMwLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA2LDAsMCwwLDIxOCw5LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDg1LAorICAgIDQsMCwwLDExNSw0MCwwLDAsMCwwLDUsNiwxLDEzLDEsMjEsMSwKKyAgICAzLDEsMTUsMSwxMiwxLDE1LDEsMjEsMiwxOCwxLDEyLDEsMywxLAorICAgIDE1LDEsNCwxLDksMSwxMiwxLDEyLDUsMTcsMiwxOCwxLDksMSwKKyAgICAxMjIsMjAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMywxMDEsCisgICAgMTE2LDk1LDExNSwxMTIsMTAxLDk5LDk5LDQsMCwwLDAsMCwwLDAsMCw2LAorICAgIDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE0MCwwLDAsMCwKKyAgICAxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjEsMCwxMTYsMCwwLDEwNiwKKyAgICAxLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDEsMCwxMjQsMiwKKyAgICAwLDEyNCwzLDAsMTMxLDMsMCwxMjUsNCwwLDEyNCw0LDAsMTAwLDEsMCwKKyAgICAxMDcsOCwwLDExNCw1OCwwLDEwMCwxLDAsODMsMTI0LDQsMCwxMDYsMywwLAorICAgIDEwMCwxLDAsMTA3LDgsMCwxMTQsMTMyLDAsMTI0LDQsMCwxMDYsNCwwLDEyNSwKKyAgICA1LDAsMTI0LDUsMCwxMTQsMTI1LDAsMTAwLDIsMCwxMjQsNCwwLDk1LDUsCisgICAgMCwxMTYsNiwwLDEyNCwxLDAsMTI0LDUsMCwxMjQsMCwwLDEwNiwyLDAsCisgICAgMTMxLDMsMCwxMjQsNCwwLDk1LDQsMCwxMjQsNCwwLDgzLDEwMCwxLDAsCisgICAgODMsMTEwLDQsMCwxMjQsNCwwLDgzLDEwMCwxLDAsODMsNDEsMywxMjIsOTgsCisgICAgMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAorICAgIDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwzOSwKKyAgICAxMTIsOTcsMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNSwKKyAgICAxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsMTEwLAorICAgIDEwMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsNDYsNzgsOTAsOSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0MSw3LAorICAgIDExNCw4LDAsMCwwLDExNCwzNywwLDAsMCwxMTQsNiwxLDAsMCwxMTQsCisgICAgMTI5LDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDE2MCwwLDAsMCwxMTQsMjMxLAorICAgIDAsMCwwLDQxLDYsMTE0LDE3MiwwLDAsMCwxMTQsMTI4LDAsMCwwLDExNCwKKyAgICAzNywwLDAsMCwxMTQsMTgxLDAsMCwwLDExNCwxNjYsMCwwLDAsMTE0LDUsCisgICAgMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwKKyAgICAwLDAsMTE0LDE4MiwwLDAsMCwxMTcsNCwwLDAsMTE1LDI2LDAsMCwwLAorICAgIDAsNCwxMiwxLDksMSwyMSwxLDEyLDEsNCwxLDE1LDEsOSwxLAorICAgIDYsMyw5LDEsMjQsMSw0LDIsNywyLDEyMiwyMCw4MCw5NywxMTYsMTA0LAorICAgIDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LAorICAgIDk5LDMsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsMywwLDEyNCwzLDAsMTAwLAorICAgIDEsMCwxMDcsOCwwLDExNCwzNCwwLDEwMCwxLDAsODMsMTI0LDMsMCwxMDYsCisgICAgMSwwLDgzLDQxLDIsMTIyLDE3MCwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwKKyAgICAxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LAorICAgIDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsCisgICAgMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsCisgICAgMTE1LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksNDAsNDEsMzIsMTA1LAorICAgIDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNzgsNDEsMiwxMTQsMTgyLDAsMCwwLDExNCwxMjksMCwwLDAsNDEsNCwKKyAgICAxMTQsMTcyLDAsMCwwLDExNCwxMjgsMCwwLDAsMTE0LDM3LDAsMCwwLDExNCwKKyAgICAxNjYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsCisgICAgMCwwLDAsMTE0LDE4MywwLDAsMCwxMzksNCwwLDAsMTE1LDgsMCwwLAorICAgIDAsMCw4LDE4LDEsMTIsMSw0LDEsMTIyLDIyLDgwLDk3LDExNiwxMDQsNzAsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDEsMTIsMTE0LDExNCwwLDAsMCwxMTQsMTEzLDAsMCwwLDExNCwxMTUsMCwKKyAgICAwLDAsMTE0LDExNiwwLDAsMCwxMTQsMTg0LDAsMCwwLDExNCwyNTEsMCwwLAorICAgIDAsMTE0LDAsMSwwLDAsMTE0LDIsMSwwLDAsMTE0LDMsMSwwLDAsCisgICAgMTE0LDYsMSwwLDAsMTE0LDE4MiwwLDAsMCwxMTQsMTgzLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LAorICAgIDAsMCwwLDExNCwyNTAsMCwwLDAsMTksNCwwLDAsMTE1LDIyLDAsMCwKKyAgICAwLDEyLDIsNiwyLDE4LDgsMTgsMTcsMTgsMjIsMTgsMTUsMywxLDE4LAorICAgIDMxLDMsMSwyMSwyMSwzLDEsMTE0LDI1MCwwLDAsMCw5OSwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDY0LDAsMCwKKyAgICAwLDExNSwxMzMsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwKKyAgICAyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLAorICAgIDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwKKyAgICAxMDEsNiwwLDkwLDcsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCwKKyAgICA4LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsOSwwLDEwMCwxMCwKKyAgICAwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwxLDAsOTAsMTAsMCwxMDAsMTMsMCwKKyAgICAxMDAsMTQsMCwxMzIsMCwwLDkwLDExLDAsMTAxLDEyLDAsMTAwLDE1LDAsMTAwLAorICAgIDE2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDEzLDAsMTAwLDE3LDAsMTAwLDE4LAorICAgIDAsMTMyLDAsMCw5MCwxNCwwLDEwMCwxMCwwLDgzLDQxLDE5LDIxOCwxMCw3MCwKKyAgICAxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDEyMiwxNzIsNzAsMTA1LDEwOCwxMDEsNDUsCisgICAgOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsMTE0LDk3LDk5LDExNiwxMDUsMTExLDExMCwxMTUsMzIsCisgICAgMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLAorICAgIDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsMTAwLDMyLAorICAgIDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LDEwMiwxMTEsMTE0LDEwOSw5NywxMTAsOTksMTAxLDQ0LAorICAgIDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwzMiwzMiwzMiwzMiwxMTQsMTAxLDEwMiwxMTQsMTAxLAorICAgIDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwKKyAgICAxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsCisgICAgMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDUsMTEwLDEwMywzMiwxMDQsCisgICAgOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LDEwMSwxMDAsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDUsMCwwLDAsNSwwLDAsMCw3LDAsMCwwLDExNSwxMjIsMCwwLAorICAgIDAsMTAzLDAsMCwxMjUsMywwLDEyMCw1MiwwLDEyNCwyLDAsNjgsOTMsNDQsCisgICAgMCw5MiwyLDAsMTM3LDAsMCwxMjUsNCwwLDEyNCwzLDAsMTA2LDAsMCwKKyAgICAxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI0LAorICAgIDQsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMSwxMTMsMTMsMCw4NywxMjQsMywKKyAgICAwLDEyNCwwLDAsOTUsMSwwLDEyNCwxLDAsMTEyLDc5LDAsMTAwLDMsMCwKKyAgICAxMjQsMCwwLDk1LDIsMCwxMDAsNiwwLDEyNCwwLDAsOTUsMywwLDExNiwKKyAgICA0LDAsMTMxLDAsMCwxMjQsMCwwLDk1LDUsMCwxMTYsNCwwLDEzMSwwLAorICAgIDAsMTI0LDAsMCw5NSw2LDAsMTAwLDUsMCw4Myw0MSw3LDEyMiwxNTQsNzMsCisgICAgMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwKKyAgICAxMDQsMzIsMTExLDExMCwzMiw5NywxMTAsMTAwLDMyLDk3LDMyLDExOCw5NywxMTQsMTA1LDk3LAorICAgIDk4LDEwOCwxMDEsMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMTEsMTAyLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDUwLDQ1LDExNiwxMTcsMTEyLDEwOCwxMDEsMTE1LDMyLDk5LAorICAgIDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LAorICAgIDEwMSwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDEwMSwKKyAgICA5OSwxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsNDYsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMywwLDAsMCw1MSwwLDAsMCwxMTUsMjcsCisgICAgMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LDEsMCwxMzYsCisgICAgMCwwLDEwMiwyLDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsNDEsMSwKKyAgICA3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyNCwwLDAsMCwxMTQsMjI2LDAsCisgICAgMCwwLDQxLDEsMTE0LDEyOSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwKKyAgICAwLDAsMCwxMTQsMjI4LDAsMCwwLDE2OCw0LDAsMCwxMTUsMiwwLDAsCisgICAgMCw2LDAsMTIyLDM4LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCisgICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSwKKyAgICA2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE0LDYwLDAsMCwwLAorICAgIDExNCwzMSwwLDAsMCw3OCwxMTQsODksMCwwLDAsNDEsNywxMTQsMTUxLDAsCisgICAgMCwwLDIxOCw4LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNCwzNywwLDAsCisgICAgMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwyMTgsMywKKyAgICAxMTUsMTAxLDExNiwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwKKyAgICAyMTgsMTksOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDEwMSwxMDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgOTksOTcsOTksMTA0LDEwMSw0MSw1LDExNCwxMTAsMCwwLDAsMTE0LDM3LDAsMCwKKyAgICAwLDIxOCwxNCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsCisgICAgMTE1LDkwLDcsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDE2OCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCw0MSwxLDExNCwxMjksMCwwLDAsMTE0LDYsMCwwLDAsCisgICAgMTE0LDE4NiwwLDAsMCwxNjIsNCwwLDAsMTE1LDE2LDAsMCwwLDAsNCwKKyAgICA2LDEsMTksMSwzNiwxLDksMiwxNSwxLDksMSwxMiwxLDEyMiwxOSwKKyAgICA3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LAorICAgIDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKKyAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMDAsMywwLAorICAgIDEyNCwwLDAsOTUsMCwwLDEwMCwyLDAsODMsNDEsNCwxMjIsMzEsNzMsMTEwLAorICAgIDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDUsMTE0LAorICAgIDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTA5LDExNiwxMDUsMTA5LDEwMSw0NiwxMTQsMzEsMCwKKyAgICAwLDAsNzgsMTE0LDg5LDAsMCwwLDQxLDEsMTE0LDksMSwwLDAsNDEsCisgICAgMSwxMTQsMTEwLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw2LDAsMCwwLDExNCwyNTEsMCwwLDAsMTc2LDQsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMiwxMjIsMjgsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLAorICAgIDExNCw0NiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LAorICAgIDEwNCwxMDEsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDU5LDAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLDEwMCwKKyAgICAxLDAsMTA3LDgsMCwxMTQsMzcsMCwxMDAsMSwwLDEwMywwLDAsMTAyLDIsCisgICAgMCw4MywxMjQsMiwwLDEwNiwxLDAsMTI0LDIsMCwxMDYsMiwwLDExMiw1NSwKKyAgICAwLDEwMywwLDAsMTAyLDIsMCw4Myw0MSwyLDEyMiwxOTcsODQsMTE0LDEyMSwzMiwKKyAgICAxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LAorICAgIDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsMTExLDExNCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTEyLDExMSwxMTQsMTE2LAorICAgIDEwNSwxMTEsMTEwLDExNSw0NiwzMiw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw0MCwxMDgsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ0LDMyLDEwOCwxMDUsMTE1LDExNiw0NSwxMTEsMTAyLDQ1LDExMiwKKyAgICAxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LAorICAgIDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LAorICAgIDExNSwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDMyLDEwNSwKKyAgICAxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDc4LDQxLDMsMTE0LDE4MiwwLDAsMCwxMTQsMTI5LDAsMCwwLDExNCwxNTgsCisgICAgMCwwLDAsNDEsMywxMTQsMTEwLDAsMCwwLDExNCwxMjgsMCwwLDAsMTE0LAorICAgIDE2NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwKKyAgICAwLDAsMCwxMTQsMTI2LDAsMCwwLDE4Miw0LDAsMCwxMTUsOCwwLDAsCisgICAgMCwwLDcsMTUsMSwxMiwxLDEwLDEsMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDcwLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsOTksNiwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsNywwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNDAsMCwwLDAsMTI0LDEsMCwxMjQsMiwKKyAgICAwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNiwwLDExNiwwLDAsMTI0LDIsMCwKKyAgICAxMjQsMywwLDEwMCwxLDAsMTI0LDYsMCwxMDAsMiwwLDEyNCw0LDAsMTMxLAorICAgIDIsMiw4Myw0MSwzLDc4LDExNCwxMjksMCwwLDAsMTE0LDE1OCwwLDAsMCwKKyAgICA0MSwxLDExNCwxNjksMCwwLDAsNDEsNywxMTQsMTEwLDAsMCwwLDExNCwxNjcsCisgICAgMCwwLDAsMTE0LDEyOCwwLDAsMCwxMTQsMzcsMCwwLDAsOTAsNCwxMTUsCisgICAgMTA5LDExNSwxMDgsMTE0LDE4MSwwLDAsMCwxMTQsMTI5LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLDExNCw2LDEsMCwKKyAgICAwLDE5NCw0LDAsMCwxMTUsNiwwLDAsMCwwLDEsMTUsMSwxOCwxLAorICAgIDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMywxMDEsCisgICAgMTE2LDk1LDExNSwxMTIsMTAxLDk5LDc4LDk5LDMsMCwwLDAsMCwwLDAsMCwKKyAgICAxNCwwLDAsMCwxNSwwLDAsMCw2NywwLDAsMCwxMTUsMjM0LDEsMCwKKyAgICAwLDEwMCwxLDAsMTI1LDMsMCwxMjQsMSwwLDEwNiwwLDAsMTAwLDIsMCwKKyAgICAxMzEsMSwwLDEwMCwzLDAsMjUsMTI1LDQsMCwxMjEsMzQsMCwxMTYsMSwwLAorICAgIDEyNCwwLDAsMTA2LDIsMCwxMTIsNDksMCwxMTYsMywwLDEwNiw0LDAsMTMxLAorICAgIDAsMCwxMzEsMSwwLDEwNiw1LDAsMTI1LDUsMCw4NywxMTAsMjQsMCw0LAorICAgIDExNiw2LDAsMTA3LDEwLDAsMTE0LDg1LDAsMSwxLDEsMTAwLDEwLDAsMTI1LAorICAgIDUsMCw4OSwxMTAsMSwwLDg4LDEyNCw1LDAsMTI0LDAsMCwxMDYsNywwLAorICAgIDEwNywzLDAsMTE0LDEyMCwwLDEyNCwwLDAsMTA2LDgsMCwxMzEsMCwwLDEsCisgICAgMTI0LDUsMCwxMjQsMCwwLDk1LDcsMCwxMTYsOSwwLDEzMSwwLDAsMTE0LAorICAgIDE1MywwLDEyNCwwLDAsMTA2LDEwLDAsMTI1LDYsMCwxMjQsNCwwLDEwNiwxMSwKKyAgICAwLDEzMSwwLDAsMTI1LDcsMCwxMTAsMTUsMCwxMjQsMCwwLDEwNiwxMiwwLAorICAgIDEyNSw2LDAsMTI0LDQsMCwxMjUsNywwLDEyNCw3LDAsMTI0LDYsMCwxMDcsCisgICAgNiwwLDExNCw0NSwxLDExNiwxMywwLDEyNCwwLDAsMTA2LDIsMCwxMjQsNCwKKyAgICAwLDEzMSwyLDAsMTI1LDgsMCwxMjAsMTAwLDAsMTI0LDAsMCwxMDYsMTQsMCwKKyAgICA2OCw5Myw3NywwLDkyLDIsMCwxMjUsOSwwLDEyNSwxMCwwLDEwMCw1LDAsCisgICAgMTI0LDksMCwyMywxMjUsMTEsMCwxMTYsMTMsMCwxMjQsOCwwLDEyNCwxMSwwLAorICAgIDEzMSwyLDAsMTI1LDEyLDAsMTE2LDE1LDAsMTI0LDEyLDAsMTMxLDEsMCwxMTQsCisgICAgMjA4LDAsMTI0LDAsMCwxMDYsMTYsMCwxMjQsMTAsMCwxMjQsMSwwLDEyNCwxMiwKKyAgICAwLDEyNCw4LDAsMTAzLDEsMCwxMjQsMiwwLDEzMSw1LDAsODMsMTEzLDIwOCwKKyAgICAwLDg3LDExNiwxNywwLDEyNCw4LDAsMTMxLDEsMCwxMjUsMywwLDEyMCwxMjMsCisgICAgMCwxMjQsMCwwLDEwNiwxNCwwLDY4LDkzLDExMiwwLDkyLDIsMCwxMjUsOSwKKyAgICAwLDEyNSwxMCwwLDExNiwxMywwLDEyNCwwLDAsMTA2LDIsMCwxMjQsNCwwLAorICAgIDEyNCw5LDAsMjMsMTMxLDIsMCwxMjUsMTIsMCwxMTYsMTgsMCwxMDAsNiwwLAorICAgIDEwNiwxOSwwLDEyNCwxMiwwLDEzMSwxLDAsMTAwLDcsMCwxMDAsMywwLDEzMSwKKyAgICAxLDEsMSwxMjQsNywwLDEyNCw5LDAsMjMsMTI0LDYsMCwxMDcsNiwwLAorICAgIDExNCw1NSwxLDExNiwxNSwwLDEyNCwxMiwwLDEzMSwxLDAsMTE0LDU1LDEsMTI0LAorICAgIDAsMCwxMDYsMTYsMCwxMjQsMTAsMCwxMjQsMSwwLDEyNCwxMiwwLDEwMCw4LAorICAgIDAsMTI0LDIsMCwxMzEsNSwwLDgzLDExMyw1NSwxLDg3LDEyNCwzLDAsMTE0LAorICAgIDIzMCwxLDExNiwxOCwwLDEwMCw5LDAsMTA2LDE5LDAsMTI0LDgsMCwxMzEsMSwKKyAgICAwLDEzMSwxLDAsMSwxMTYsMjAsMCwxMDYsMjEsMCwxMjQsMSwwLDEwMCw4LAorICAgIDAsMTMxLDIsMCwxMjUsMTMsMCwxMjQsOCwwLDEwMywxLDAsMTI0LDEzLDAsCisgICAgOTUsMjIsMCwxMjQsMTMsMCw4MywxMDAsOCwwLDgzLDQxLDExLDEyMiwxMDIsODQsCisgICAgMTE0LDEyMSwzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMTUsMTEyLDEwMSwKKyAgICA5OSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLAorICAgIDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDMyLDMyLDgyLDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDEwOSw5NywxMTYsOTksMTA0LDEwNSwxMTAsMTAzLDMyLDExNSwxMTIsMTAxLDk5LDQ0LDMyLAorICAgIDExMSwxMTQsMzIsNzgsMTExLDExMCwxMDEsMzIsMTA1LDEwMiwzMiwxMTAsMTExLDExNiwzMiwxMDIsCisgICAgMTExLDExNywxMTAsMTAwLDQ2LDcwLDExNCw2MCwwLDAsMCwxMTQsNTgsMCwwLDAsCisgICAgMTE0LDMxLDAsMCwwLDExNCwxODYsMCwwLDAsMTIyLDksMTE2LDExNCwxMjEsMTA1LAorICAgIDExMCwxMDMsMzIsMTIzLDEyNSwxMTQsMTAwLDAsMCwwLDc4LDEyMiwyNSwxMTIsMTExLDExNSwKKyAgICAxMTUsMTA1LDk4LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsCisgICAgMTAyLDExMSwxMTQsMzIsMTIzLDEyNSwxMTQsODksMCwwLDAsNDEsMjMsMTE0LDM0LDAsCisgICAgMCwwLDExNCw0MSwwLDAsMCwxMTQsMzcsMCwwLDAsMTE0LDMsMCwwLAorICAgIDAsMTE0LDQ3LDAsMCwwLDExNCwyMjAsMCwwLDAsMTE0LDQyLDAsMCwwLAorICAgIDExNCw5LDEsMCwwLDIxOCwxMSw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksCisgICAgMTA0LDEwMSwxMTQsNywwLDAsMCwxMTQsMTIsMSwwLDAsMTE0LDkwLDAsMCwKKyAgICAwLDExNCwxMSwxLDAsMCwxMTQsMzAsMCwwLDAsMTE0LDgsMSwwLDAsCisgICAgMTE0LDQ2LDAsMCwwLDExNCw2LDEsMCwwLDExNCw0OCwwLDAsMCwxMTQsCisgICAgMTA3LDAsMCwwLDExNCw0OSwwLDAsMCwxMTQsMTIzLDAsMCwwLDExNCwxNjIsCisgICAgMCwwLDAsMTE0LDE1OCwwLDAsMCw0MSwxNCwxMTQsMTEwLDAsMCwwLDExNCwKKyAgICAxMjgsMCwwLDAsMTE0LDE4MSwwLDAsMCw5MCwxMiwxMDUsMTE1LDk1LDExMCw5NywKKyAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDkwLDExLDExNiw5NywxMDUsMTA4LDk1LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDExNCwxMzUsMCwwLDAsOTAsNSw5OSw5Nyw5OSwxMDQsMTAxLAorICAgIDkwLDEyLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsOSwKKyAgICA5OCw5NywxMTUsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCwyMjYsMCwwLDAsMTE0LDE2NywKKyAgICAwLDAsMCw5MCwxMywxMDUsMTEwLDEwNSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKKyAgICAxMDksMTAxLDkwLDksMTAyLDExNywxMDgsMTA4LDk1LDExMiw5NywxMTYsMTA0LDExNCwxNjYsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLAorICAgIDAsMTE0LDE4MiwwLDAsMCwxOTksNCwwLDAsMTE1LDY4LDAsMCwwLDAsCisgICAgMyw2LDEsMTksMSwzLDEsMzQsMSwxMywxLDExLDEsMTUsMSwxMCwKKyAgICAxLDksMiw5LDEsOSwxLDE1LDIsOSwxLDYsMiwxMiwxLDE4LAorICAgIDEsMjIsMSwxMCwxLDE1LDEsMTIsMSwzMiw0LDEyLDIsMjIsMSwyMiwKKyAgICAxLDI1LDEsMTYsMSwxMiwxLDI5LDEsNiwxLDE5LDEsMTgsMSwxMiwKKyAgICAxLDQsMSwxMjIsMjAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwKKyAgICAxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDksMCwwLDAsMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDExLAorICAgIDEsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwwLDEyMSwzMSwwLDExNiwKKyAgICAxLDAsMTA2LDIsMCwxMjQsMSwwLDExMiwzMywwLDExNiwxLDAsMTA2LDMsCisgICAgMCwxMzEsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMTAsMzMsMCw0LDExNiwKKyAgICA0LDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwzLDAsMTA3LDEwLDAsMTE0LDc1LAorICAgIDAsMSwxLDEsMTAzLDAsMCwxMjUsMiwwLDg5LDExMCwxLDAsODgsMTE2LAorICAgIDcsMCwxMDYsOCwwLDEwNiw5LDAsMTAwLDEsMCwxMzEsMSwwLDExNSwxMTIsCisgICAgMCwxMTYsMTAsMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxMSwwLAorICAgIDExMCwxMTEsMCwxMTYsMTAsMCwxMzEsMCwwLDEyNSwzLDAsMTIwLDkwLDAsMTI0LAorICAgIDIsMCw2OCw5Myw4MiwwLDEyNSw0LDAsMTI0LDQsMCwxMDYsMTIsMCwxMDAsCisgICAgMiwwLDEzMSwxLDAsOTIsMywwLDEyNSw1LDAsMTI1LDYsMCwxMjUsNywKKyAgICAwLDEyNCw2LDAsMTE0LDE5MSwwLDEwMCwzLDAsMTA2LDEzLDAsMTI0LDUsMCwKKyAgICAxMjQsNywwLDEwNiwxNCwwLDEzMSwwLDAsMTMxLDIsMCwxMjUsOCwwLDExMCwKKyAgICA2LDAsMTI0LDUsMCwxMjUsOCwwLDEyNCwzLDAsMTA2LDE1LDAsMTI0LDgsCisgICAgMCwxMzEsMSwwLDEsMTEzLDEyOCwwLDg3LDEyNCwzLDAsMTI0LDAsMCw5NSwKKyAgICAxMSwwLDExNiw3LDAsMTA2LDgsMCwxMDYsOSwwLDExNiwxNiwwLDEzMSwxLAorICAgIDAsMTE0LDcsMSwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwxMjQsMiwwLAorICAgIDY4LDEzMSwxLDAsMTI0LDAsMCw5NSwxNywwLDEwMCw2LDAsODMsNDEsNywKKyAgICAxMjIsNjgsNzAsMTA1LDEwOCwxMDgsMzIsMTE2LDEwNCwxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwKKyAgICAzMiwxMTEsMTAyLDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTAwLDEwNSwxMTQsMTAxLAorICAgIDk5LDExNiwxMTEsMTE0LDEyMSw0NiwxMTQsMCwwLDAsMCwxMTQsNjAsMCwwLDAsCisgICAgMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDMsMCwwLDAsODMsMCwwLDAsMTE1LDI4LDAsMCwKKyAgICAwLDEwNCwwLDAsMTI0LDAsMCw5MywxOCwwLDEyNSwxLDAsMTI0LDEsMCwKKyAgICAxMDYsMCwwLDEzMSwwLDAsMTQ2LDIsMCwxMTMsNiwwLDgzLDExNCw0LDAsCisgICAgMCwwLDQxLDEsMTE0LDkwLDAsMCwwLDQxLDIsMTE0LDI0LDAsMCwwLAorICAgIDkwLDIsMTAyLDExMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwKKyAgICAwLDAsMCwyNTAsOSw2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2MiwxNyw1LAorICAgIDAsMCwxMTUsMiwwLDAsMCw5LDAsMTIyLDQxLDcwLDEwNSwxMDgsMTAxLDcwLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDExNSwxMDEsMTE2LDk5LAorICAgIDExMSwxMDksMTEyLDYyLDc4LDQxLDE4LDExNCwzNywwLDAsMCwxMTQsMywwLDAsCisgICAgMCw5MCw3LDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LDExNCwxMTQsNDcsMCwwLDAsMTE0LAorICAgIDEsMSwwLDAsMjE4LDE1LDgwLDEwMSwxMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLAorICAgIDY5LDExNCwxMTQsMTExLDExNCwyMTgsMTgsNzgsMTExLDExNiw2NSw2OCwxMDUsMTE0LDEwMSw5OSwKKyAgICAxMTYsMTExLDExNCwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw4LDAsMCwwLDExNCw5LAorICAgIDAsMCwwLDExNCwxMCwwLDAsMCwxMTQsMTAsMSwwLDAsMTE0LDExLDEsCisgICAgMCwwLDExNCw4NSwwLDAsMCwxMTQsNDksMCwwLDAsMTE0LDkwLDAsMCwKKyAgICAwLDIxOCwzLDk3LDEwMCwxMDAsMTE0LDExLDAsMCwwLDExNCwxMiwxLDAsMCwKKyAgICA0MSw5LDExNCwxMTAsMCwwLDAsMTE0LDM3LDAsMCwwLDkwLDgsOTksMTExLAorICAgIDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDkwLDIxLDEwOCwxMTEsMTE5LDEwMSwxMTQsOTUsMTE1LDExNywKKyAgICAxMDIsMTAyLDEwNSwxMjAsOTUsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDExNCwyNDYsMCwKKyAgICAwLDAsMTE0LDEwOCwwLDAsMCwxMTQsMjM4LDAsMCwwLDExNCwyMjYsMCwwLAorICAgIDAsOTAsOCwxMTAsMTAxLDExOSw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsMTQsMSwwLDAsMjQ0LAorICAgIDQsMCwwLDExNSwzNCwwLDAsMCwwLDIsOSwxLDMsMSwzMSwxLAorICAgIDIyLDMsMTEsMywxOCwxLDE4LDcsOSwxLDEzLDEsMjQsMSw2LDEsCisgICAgMjcsMiw2LDEsMTcsMSw5LDEsMTgsMSwxMjIsMjIsNzAsMTA1LDEwOCwxMDEsCisgICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksCisgICAgMTA0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLAorICAgIDAsMCwwLDcsMCwwLDAsMTE1LDI1LDAsMCwwLDEzNSwwLDAsMTM1LAorICAgIDEsMCwxMDIsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwyLAorICAgIDAsMTI0LDIsMCw4Myw0MSwzLDk3LDIwLDEsMCwwLDY1LDMyLDk5LDEwOCwKKyAgICA5NywxMTUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwKKyAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsOTksMTA4LDExMSwxMTUsMTE3LAorICAgIDExNCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LAorICAgIDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDExNCwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwKKyAgICAzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwKKyAgICAxMDIsMTA1LDEwMSwxMDAsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMzIsOTcsMTEwLDEwMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICA5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsCisgICAgMTA4LDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDExMSwxMTUsCisgICAgMTE3LDExNCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDAsMTA1LDExNCwKKyAgICAxMDEsOTksMTE2LDExMSwxMTQsMTIxLDQ0LDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LAorICAgIDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LAorICAgIDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwKKyAgICAwLDE5LDAsMCwwLDExNSw0MywwLDAsMCwxMTYsMCwwLDEyNCwwLDAsCisgICAgMTMxLDEsMCwxMTUsMzAsMCwxMTYsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMjQsCisgICAgMCwwLDEzMSwxLDEsMTMwLDEsMCwxMzYsMCwwLDEyNCwwLDAsMTM2LDEsCisgICAgMCwxNDAsMSwwLDgzLDQxLDMsMTIyLDQ1LDgwLDk3LDExNiwxMDQsMzIsMTA0LDExMSwKKyAgICAxMTEsMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCisgICAgNDYsMTA5LDk3LDk5LDEwNCwxMDUsMTEwLDEwMSwxMTQsMTIxLDQ2LDcwLDEwNSwxMDgsMTAxLDcwLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTIyLDMwLDExMSwxMTAsMTA4LDEyMSwzMiwxMDAsMTA1LDExNCwKKyAgICAxMDEsOTksMTE2LDExMSwxMTQsMTA1LDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTUsMTE3LDExMiwKKyAgICAxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwxMTQsMzcsMCwwLDAsNDEsMiwxMTQsNDgsMCwKKyAgICAwLDAsMTE0LDEwOSwwLDAsMCw0MSwxLDExNCwzNywwLDAsMCw0MSwyLAorICAgIDExNCwxNzIsMCwwLDAsMTE0LDEzLDEsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA2LDAsMCwwLDIxOCwyNCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTUsCisgICAgMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwyOSw1LAorICAgIDAsMCwxMTUsNiwwLDAsMCwwLDIsMTIsMSwxOCwxLDEyMiw1NCw3MCwKKyAgICAxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwKKyAgICAxMTEsMTExLDEwNyw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsNDEsMywxMTQsMTcyLDAsMCwKKyAgICAwLDExNCwxMywxLDAsMCwxMTQsMTksMSwwLDAsMTE0LDQsMCwwLDAsCisgICAgNDEsMiwxMTQsMTcyLDAsMCwwLDExNCwxMywxLDAsMCwxMTQsNiwwLDAsCisgICAgMCwyMTgsOSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTksNSwwLDAsCisgICAgMTE1LDQsMCwwLDAsMCwxMCwyMSw2LDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwKKyAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LAorICAgIDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMTYsNzAsMTA1LAorICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwxMjMsMzMsMTE0LDEyNSw0MSw0MSwyLAorICAgIDExNCw0OSwwLDAsMCwxMTQsMzcsMCwwLDAsNDEsMSwxMTQsMTEwLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsMCwwLAorICAgIDExNCwyNDUsMCwwLDAsMzcsNSwwLDAsMTE1LDIsMCwwLDAsMCwxLAorICAgIDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDExNCwKKyAgICAxMDEsMTEyLDExNCw5NSw5NSw0MSwxNSwxMTQsMTE0LDAsMCwwLDExNCwxMTMsMCwwLAorICAgIDAsMTE0LDExNSwwLDAsMCwxMTQsMTE2LDAsMCwwLDExNCwxODYsMCwwLDAsCisgICAgMTE0LDI1MSwwLDAsMCwxMTQsMTMyLDAsMCwwLDExNCwxODMsMCwwLDAsMTE0LAorICAgIDEyNiwwLDAsMCwxMTQsNiwxLDAsMCwxMTQsMTgyLDAsMCwwLDExNCwxNCwKKyAgICAxLDAsMCwxMTQsMTg0LDAsMCwwLDExNCwyMCwxLDAsMCwxMTQsMjQ1LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw2LDAsMCwwLDExNCw3LDEsMCwwLDE1Myw0LDAsMCwxMTUsCisgICAgMjAsMCwwLDAsMTIsNyw2LDIsMTIsMTQsMTIsNCw2LDIsMTIsMTIsCisgICAgMTIsNSwxNSw0NSwxMiwzMSwxOCwxOCwxMTQsNywxLDAsMCw5OSw0LDAsCisgICAgMCwwLDAsMCwwLDAsNiwwLDAsMCwxMSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTk1LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLAorICAgIDEzMSwxLDAsMTI1LDQsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDIsMCwxMzEsCisgICAgMSwwLDEyNSw1LDAsMTI0LDQsMCwxMTUsOTksMCwxMjQsNSwwLDExNCw1NCwKKyAgICAwLDEyNCw1LDAsMTA2LDEsMCwxMjUsNCwwLDExMCw0NSwwLDEyNCwyLDAsCisgICAgMTI0LDMsMCwxMDcsMiwwLDExNCw4NCwwLDExNiwyLDAsMTI0LDEsMCwxMjQsCisgICAgMiwwLDEzMSwyLDAsMTI1LDQsMCwxMTAsMTUsMCwxMTYsMywwLDEyNCwxLAorICAgIDAsMTI0LDIsMCwxMzEsMiwwLDEyNSw0LDAsMTI0LDUsMCwxMTUsMTI2LDAsCisgICAgMTE2LDQsMCwxMjQsMSwwLDEyNCwyLDAsMTAwLDMsMCwxMjQsNCwwLDEzMSwKKyAgICAyLDEsMTI1LDUsMCwxMjEsNDQsMCwxMjQsNSwwLDEyNCwwLDAsMTAwLDIsCisgICAgMCw2MCwxMjQsNCwwLDEyNCwwLDAsMTAwLDEsMCw2MCwxMjQsMiwwLDEyNCwKKyAgICAwLDAsMTAwLDQsMCw2MCwxMjQsMywwLDEyNCwwLDAsMTAwLDUsMCw2MCwKKyAgICA4NywxMTAsMTgsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE5MCwwLDEsMSwKKyAgICAxLDg5LDExMCwxLDAsODgsMTAwLDAsMCw4Myw0MSw2LDc4LDIxOCwxMCw5NSwKKyAgICA5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDIxOCw4LDk1LDk1LDExNSwxMTIsMTAxLAorICAgIDk5LDk1LDk1LDExNCwxMjksMCwwLDAsOTAsOCw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsCisgICAgOTUsOTUsOTAsMTAsOTUsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsNDEsNiwKKyAgICAyMTgsMywxMDMsMTAxLDExNiwxMTQsMTI5LDAsMCwwLDExNCwyMjQsMCwwLDAsMTE0LAorICAgIDIxOSwwLDAsMCwxMTQsMTY5LDAsMCwwLDIxOCw5LDY5LDEyMCw5OSwxMDEsMTEyLAorICAgIDExNiwxMDUsMTExLDExMCw0MSw2LDkwLDIsMTEwLDExNSwxMTQsMTA4LDAsMCwwLDkwLAorICAgIDgsMTEyLDk3LDExNiwxMDQsMTEwLDk3LDEwOSwxMDEsOTAsOSw5OSwxMTIsOTcsMTE2LDEwNCwKKyAgICAxMTAsOTcsMTA5LDEwMSwxMTQsMTI5LDAsMCwwLDExNCwxNjYsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwwLDAsMjE4LDE0LDk1LAorICAgIDEwMiwxMDUsMTIwLDk1LDExNywxMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDMsNSwwLAorICAgIDAsMTE1LDM0LDAsMCwwLDAsMiwxNSwxLDE1LDEsNiwxLDYsMSwKKyAgICAxMiwxLDEyLDEsMTgsMiwxNSwxLDYsMSwyMSwxLDMsMSwxMCwxLAorICAgIDEwLDEsMTAsMSwxNCwxLDEzLDIsMTE0LDI1LDEsMCwwLDk5LDAsMCwKKyAgICAwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDU1LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMDYsMiwwLAorICAgIDEzMSwwLDAsMTAyLDIsMCwxMjUsMCwwLDExNiwzLDAsMTE2LDQsMCwxMDIsCisgICAgMiwwLDEyNSwxLDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsMTI1LDIsCisgICAgMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMDMsMywwLDgzLDQxLDEsCisgICAgMTIyLDk1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDEwOCwxMDUsMTE1LDExNiwKKyAgICAzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw2OSw5Nyw5OSwxMDQsMzIsMTA1LDExNiwxMDEsMTA5LDMyLDEwNSwxMTUsCisgICAgMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ0LDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsNDEsNDYsMTAsMzIsMzIsMzIsCisgICAgMzIsNDEsNywxMTQsMjI1LDAsMCwwLDExNCwxNDcsMCwwLDAsMjE4LDE4LDEwMSwKKyAgICAxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDk1LDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwKKyAgICAxMTUsMTE0LDIxOSwwLDAsMCwxMTQsODYsMCwwLDAsMTE0LDIyNCwwLDAsMCwKKyAgICAxMTQsNzYsMCwwLDAsNDEsMyw5MCwxMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCwxMTUsOTAsNiwxMTUsMTExLDExNywxMTQsOTksMTAxLDkwLDgsOTgsMTIxLDExNiwKKyAgICAxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDYsMCwwLDAsMTE0LDE2MywwLDAsMCw2Niw1LDAsMCwxMTUsOCwwLAorICAgIDAsMCwwLDUsMTgsMSwxMiwxLDEyLDEsMTE0LDE2MywwLDAsMCw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMTIsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDcwLDIsMCwwLDEyNCwwLDAsOTcsMCwwLDExNiwKKyAgICAwLDAsMTA2LDEsMCw5NywxLDAsMTE2LDAsMCwxMDYsMiwwLDk3LDIsCisgICAgMCwxMTYsMSwwLDEwNiwzLDAsMTE2LDQsMCwyNSwxMjUsMSwwLDEyMCw3NiwKKyAgICAwLDEwMCwyNiwwLDY4LDkzLDY4LDAsMTI1LDIsMCwxMjQsMiwwLDExNiwxLAorICAgIDAsMTA2LDMsMCwxMDcsNywwLDExNCw4MywwLDExNiwwLDAsMTA2LDUsMCwKKyAgICAxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwxMTAsMTMsMCwxMTYsMSwwLDEwNiwKKyAgICAzLDAsMTI0LDIsMCwyNSwxMjUsMywwLDExNiw2LDAsMTI0LDEsMCwxMjQsCisgICAgMiwwLDEyNCwzLDAsMTMxLDMsMCwxLDExMyw0NCwwLDg3LDEwMCw1LDAsCisgICAgMTAwLDYsMCwxMDMsMSwwLDEwMiwyLDAsMTAwLDcsMCwxMDAsOCwwLDEwMCwKKyAgICA2LDAsMTAzLDIsMCwxMDIsMiwwLDEwMiwyLDAsMTI1LDQsMCwxMjAsMTQ5LAorICAgIDAsMTI0LDQsMCw2OCw5MywxMjksMCw5MiwyLDAsMTI1LDUsMCwxMjUsNiwKKyAgICAwLDExNiw3LDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDEyNCw2LDAsCisgICAgNjgsMTMxLDEsMCwxMzEsMSwwLDExNSwxOTksMCwxMTYsOCwwLDEzMCwxLDAsCisgICAgMTI0LDYsMCwxMDAsMTEsMCwyNSwxMjUsNywwLDEyNCw1LDAsMTE2LDEsMCwKKyAgICAxMDYsMywwLDEwNyw2LDAsMTE0LDI0MSwwLDExNiwxLDAsMTA2LDMsMCwxMjQsCisgICAgNSwwLDI1LDEyNSw4LDAsODAsMTEzLDE1NiwwLDEyMSwyMCwwLDExNiwwLDAsCisgICAgMTA2LDUsMCwxMjQsNSwwLDEzMSwxLDAsMTI1LDgsMCw4MCw4NywxMTMsMTU2LAorICAgIDAsNCwxMTYsOSwwLDEwNywxMCwwLDExNCwyOCwxLDEsMSwxLDExOSwxNTYsCisgICAgMCw4OSwxMTMsMTU2LDAsODgsMTEzLDE1NiwwLDg3LDExNiw5LDAsMTAwLDEyLDAsCisgICAgMTMxLDEsMCwxMzAsMSwwLDExNiw2LDAsMTI0LDEsMCwxMDAsMTMsMCwxMjQsCisgICAgOCwwLDEzMSwzLDAsMSwxMTYsNiwwLDEyNCwxLDAsMTAwLDE0LDAsMTI0LAorICAgIDcsMCwxMzEsMywwLDEsMTE2LDYsMCwxMjQsMSwwLDEwMCwxNSwwLDEwMCwKKyAgICAxNiwwLDEwNiwxMCwwLDEyNCw2LDAsMTMxLDEsMCwxMzEsMywwLDEsMTIxLAorICAgIDE5LDAsMTE2LDAsMCwxMDYsNSwwLDEwMCwxNywwLDEzMSwxLDAsMTI1LDksCisgICAgMCw4NywxMTAsMjQsMCw0LDExNiw5LDAsMTA3LDEwLDAsMTE0LDE0NywxLDEsCisgICAgMSwxLDEwMCwxOCwwLDEyNSw5LDAsODksMTEwLDEsMCw4OCwxMTYsNiwwLAorICAgIDEyNCwxLDAsMTAwLDE3LDAsMTI0LDksMCwxMzEsMywwLDEsMTE2LDAsMCwKKyAgICAxMDYsNSwwLDEwMCwxOSwwLDEzMSwxLDAsMTI1LDEwLDAsMTE2LDYsMCwxMjQsCisgICAgMSwwLDEwMCwxOSwwLDEyNCwxMCwwLDEzMSwzLDAsMSwxMjQsNSwwLDEwMCwKKyAgICA3LDAsMTA3LDIsMCwxMTQsMjM4LDEsMTE2LDAsMCwxMDYsNSwwLDEwMCwyMCwKKyAgICAwLDEzMSwxLDAsMTI1LDExLDAsMTE2LDYsMCwxMjQsMSwwLDEwMCwyMSwwLAorICAgIDEyNCwxMSwwLDEzMSwzLDAsMSwxMTYsNiwwLDEyNCwxLDAsMTAwLDIyLDAsCisgICAgMTE2LDExLDAsMTMxLDAsMCwxMzEsMywwLDEsMTE2LDEyLDAsMTA2LDEzLDAsCisgICAgMTE2LDIsMCwxMDYsMTQsMCwxMzEsMCwwLDEzMSwxLDAsMSwxMjQsNSwwLAorICAgIDEwMCw3LDAsMTA3LDIsMCwxMTQsNjYsMiwxMTYsMTUsMCwxMDYsMTYsMCwxMDAsCisgICAgMjMsMCwxMzEsMSwwLDEsMTAwLDI0LDAsMTE2LDEyLDAsMTA3LDYsMCwxMTQsCisgICAgNjYsMiwxMDAsMjUsMCwxMTYsMTcsMCw5NSwxOCwwLDEwMCwxOCwwLDgzLDQxLAorICAgIDI3LDEyMiwyMDUsODMsMTAxLDExNiwxMTcsMTEyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCisgICAgMTA0LDQ1LDk4LDk3LDExNSwxMDEsMTAwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCisgICAgMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsCisgICAgOTgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDExMCwxMDEsMTAxLAorICAgIDEwMCwxMDEsMTAwLDEwLDMyLDMyLDMyLDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDEwNSwxMTAsMTA2LAorICAgIDEwMSw5OSwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMTA5LDMyLDEwNSwxMTAsMTE2LDExMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTA4LDExMSw5OCw5NywxMDgsMzIsMTEwLDk3LDEwOSwxMDEsCisgICAgMTE1LDExMiw5Nyw5OSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzksMTE2LDEwNCwxMDEsCisgICAgMTE0LDMyLDk5LDExMSwxMDksMTEyLDExMSwxMTAsMTAxLDExMCwxMTYsMTE1LDMyLDk3LDExNCwxMDEsCisgICAgMzIsMTAxLDEyMCwxMTYsMTE0LDk3LDk5LDExNiwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiw5OSwxMTEsMTE0LDEwMSwzMiw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKKyAgICA5NywxMTIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMTE0LDUxLDAsMCwwLDExNCw2MiwwLDAsMCwyMTgsOCw5OCwxMTcsMTA1LDEwOCwKKyAgICAxMTYsMTA1LDExMCwxMTUsMTE0LDE0NCwwLDAsMCw5MCw1LDExMiwxMTEsMTE1LDEwNSwxMjAsCisgICAgMjUwLDEsNDcsMjE4LDIsMTEwLDExNiwyNTAsMSw5Miw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwwLDAsMCwxMTUsCisgICAgMzMsMCwwLDAsMTI0LDAsMCw5MywyMywwLDEyNSwxLDAsMTE2LDAsMCwKKyAgICAxMjQsMSwwLDEzMSwxLDAsMTAwLDAsMCwxMDcsMiwwLDg2LDEsMTEzLDMsCisgICAgMCwxMDAsMSwwLDgzLDQxLDIsMTE0LDMxLDAsMCwwLDc4LDQxLDEsMTE0LAorICAgIDMzLDAsMCwwLDQxLDIsMTE0LDI0LDAsMCwwLDExNCw3OSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwxMTQsCisgICAgMjI4LDAsMCwwLDEwMiw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsMTIyLAorICAgIDI1LDk1LDExNSwxMDEsMTE2LDExNywxMTIsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAorICAgIDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTQsNjEsMCwwLDAsMTIyLAorICAgIDMwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwKKyAgICAxMTQsMTAxLDExNSwzMiwxMTIsMTExLDExNSwxMDUsMTIwLDMyLDExMSwxMTQsMzIsMTEwLDExNiwxMTQsCisgICAgMywwLDAsMCwxMTQsMjcsMCwwLDAsMTE0LDIzLDAsMCwwLDExNCwzMiwKKyAgICAwLDAsMCw5MCw3LDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsNzgsOTAsOCw5NSwKKyAgICAxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5MCw2LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDExNCwKKyAgICAxNzEsMCwwLDAsMTE0LDcsMCwwLDAsMTIyLDQsNDYsMTEyLDEyMSwxMTksMTIyLAorICAgIDYsOTUsMTAwLDQ2LDExMiwxMjEsMTAwLDg0LDQxLDQsMTIyLDMsOTUsMTA1LDExMSwxMjIsCisgICAgOSw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMTIyLDgsOTgsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsMTE1LDEyMiw3LDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsNDEsMTksMTE0LAorICAgIDEyMywwLDAsMCwxMTQsOCwwLDAsMCwxMTQsMTQ3LDAsMCwwLDExNCwyNDAsCisgICAgMCwwLDAsMTE0LDExNCwwLDAsMCw5MCwxOCw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsCisgICAgMTA1LDExMCw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDExOCwwLDAsCisgICAgMCwyMTgsMyw5NywxMDgsMTA4LDIxOCwxNCw2NSwxMTUsMTE1LDEwMSwxMTQsMTE2LDEwNSwxMTEsCisgICAgMTEwLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMTA5LDAsMCwwLDExNCwyOCwwLDAsMCwKKyAgICAxMTQsMTMsMCwwLDAsMTE0LDIzMCwwLDAsMCwxMTQsMTUxLDAsMCwwLDExNCwKKyAgICAyNiwxLDAsMCwxMTQsODYsMCwwLDAsMTE0LDE2NSwwLDAsMCwxMTQsMTcwLAorICAgIDAsMCwwLDExNCwxNzQsMCwwLDAsNDEsMTIsMjE4LDE3LDk1LDk4LDExMSwxMTEsCisgICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMSwxMTUsCisgICAgMTAxLDEwOCwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTIsOTgsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsOTUsMTEwLDk3LDEwOSwxMDEsOTAsMTQsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKKyAgICAxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTAsMTExLDExNSw5NSwxMDAsMTAxLDExNiwKKyAgICA5NywxMDUsMTA4LDExNSw5MCwxMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTEsMTE1LAorICAgIDExNCwyMywwLDAsMCwxMTQsMjcsMCwwLDAsOTAsOSwxMTEsMTE1LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDkwLDEzLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTAsMTQsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDYsMCwKKyAgICAwLDAsMjE4LDYsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw3Nyw1LDAsMCwxMTUsODIsCisgICAgMCwwLDAsMCw4LDYsMSw5LDEsOSwzLDEzLDEsMTMsMSwxNSwKKyAgICAxLDE4LDIsMTMsMSwyMCwzLDMzLDEsMTksMiwzMSwxLDEwLDEsMTUsCisgICAgMSwxMywxLDQsMiwzLDEsMTUsMSw1LDEsMTMsMSwxMiwyLDEyLAorICAgIDEsMTYsMSwxNiwxLDI1LDMsMywxLDE5LDEsMTMsMiwxMSwxLDE2LAorICAgIDMsMTUsMSwxNiwzLDEyLDEsMTUsMSwxNiwzLDE5LDEsMTksMSwxMiwKKyAgICAxLDEzLDEsMTIsMSwxMTQsMzQsMSwwLDAsOTksMSwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTE2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEsMTE2LDEsCisgICAgMCwxMzEsMCwwLDEyNSwxLDAsMTE2LDIsMCwxMDYsMywwLDEwNiw0LDAsCisgICAgMTE2LDUsMCwxMDYsNiwwLDEyNCwxLDAsMTQwLDAsMCwxMDMsMSwwLDEzMSwKKyAgICAxLDAsMSwxMTYsNywwLDEwNiw4LDAsMTAwLDEsMCwxMDcsMiwwLDExNCwKKyAgICA3OCwwLDExNiwyLDAsMTA2LDksMCwxMDYsMTAsMCwxMTYsMTEsMCwxMzEsMSwKKyAgICAwLDEsMTE2LDIsMCwxMDYsOSwwLDEwNiwxMCwwLDExNiwxMiwwLDEzMSwxLAorICAgIDAsMSwxMTYsNSwwLDEyNCwwLDAsOTUsNSwwLDExNiwxMywwLDEyNCwwLAorICAgIDAsOTUsMTMsMCwxMDAsMiwwLDgzLDQxLDMsMTIyLDQxLDczLDExMCwxMTUsMTE2LAorICAgIDk3LDEwOCwxMDgsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDUsOTgsOTcsMTE1LAorICAgIDEwMSwxMDAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTksMTExLDEwOSwxMTIsMTExLDExMCwKKyAgICAxMDEsMTEwLDExNiwxMTUsNDYsMTE0LDI5LDEsMCwwLDc4LDQxLDE0LDExNCwzNCwxLAorICAgIDAsMCwxMTQsMTYzLDAsMCwwLDExNCw4LDAsMCwwLDExNCwyNTUsMCwwLAorICAgIDAsMTE0LDE1MSwwLDAsMCwxMTQsNywxLDAsMCwxMTQsMjAsMSwwLDAsCisgICAgMTE0LDMsMCwwLDAsMTE0LDExNCwwLDAsMCwyMTgsOSwxMDksMTAxLDExNiw5NywKKyAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTY1LDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LAorICAgIDI1MCwwLDAsMCwxMTQsMjE5LDAsMCwwLDQxLDIsMTE0LDMzLDEsMCwwLAorICAgIDkwLDE3LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsMTE1LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw2LDAsCisgICAgMCwwLDIxOCw4LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDE0NSw1LDAsMCwKKyAgICAxMTUsMTYsMCwwLDAsMCwyLDEwLDEsOSwxLDI4LDEsMTUsMSwxNiwKKyAgICAxLDE2LDQsOSwxLDExNCwzNiwxLDAsMCw0MSwxLDEyMiwzLDExOSwxMDUsCisgICAgMTEwLDQxLDIsMTE0LDEsMCwwLDAsMTE0LDIsMCwwLDAsNDEsNTksMTE0LAorICAgIDExNiwwLDAsMCwxMTQsMTIsMCwwLDAsOTAsMzcsOTUsNjcsNjUsODMsNjksCisgICAgOTUsNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsODYsNjksOTUsODAsNzYsNjUsCisgICAgODQsNzAsNzksODIsNzcsODMsOTUsNjYsODksODQsNjksODMsOTUsNzUsNjksODksCisgICAgMTE0LDExLDAsMCwwLDExNCwxMywwLDAsMCwxMTQsMTksMCwwLDAsMTE0LAorICAgIDIxLDAsMCwwLDExNCwzMCwwLDAsMCwxMTQsNDAsMCwwLDAsMTE0LDQxLAorICAgIDAsMCwwLDExNCw0NSwwLDAsMCwxMTQsNDYsMCwwLDAsMTE0LDQ4LDAsCisgICAgMCwwLDExNCw1NywwLDAsMCwyMTgsNCwxMTYsMTIxLDExMiwxMDEsMjE4LDgsOTUsCisgICAgOTUsOTksMTExLDEwMCwxMDEsOTUsOTUsMTE0LDE0NiwwLDAsMCwxMTQsMTcsMCwwLAorICAgIDAsMTE0LDEzNywwLDAsMCwxMTQsMTYsMCwwLDAsMTE0LDIwLDAsMCwwLAorICAgIDkwLDE3LDk1LDgyLDY1LDg3LDk1LDc3LDY1LDcxLDczLDY3LDk1LDc4LDg1LDc3LAorICAgIDY2LDY5LDgyLDExNCw3NSwwLDAsMCwxMTQsNzQsMCwwLDAsMTE0LDg2LDAsCisgICAgMCwwLDExNCw3NiwwLDAsMCw5MCwyMyw2OCw2OSw2Niw4NSw3MSw5NSw2NiwKKyAgICA4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKKyAgICA5MCwyNyw3OSw4MCw4NCw3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2Niw4OSw4NCw2OSwKKyAgICA2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTQsODEsMCwKKyAgICAwLDAsMTE0LDg3LDAsMCwwLDExNCw5MywwLDAsMCwxMTQsOTcsMCwwLAorICAgIDAsMTE0LDk5LDAsMCwwLDExNCwxMDcsMCwwLDAsMTE0LDEyNSwwLDAsMCwKKyAgICAxMTQsMTMyLDAsMCwwLDExNCwxNDMsMCwwLDAsMTE0LDE0OSwwLDAsMCwxMTQsCisgICAgMTUyLDAsMCwwLDExNCwxNTcsMCwwLDAsMjE4LDYsMTExLDk4LDEwNiwxMDEsOTksCisgICAgMTE2LDExNCwxNjQsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMTcwLDAsMCwwLAorICAgIDExNCwxODUsMCwwLDAsMTE0LDE5NSwwLDAsMCwxMTQsMjExLDAsMCwwLDExNCwKKyAgICAyMTksMCwwLDAsMTE0LDIyNCwwLDAsMCwxMTQsMjMwLDAsMCwwLDExNCwyMjUsCisgICAgMCwwLDAsMTE0LDIzMSwwLDAsMCwxMTQsMjQ4LDAsMCwwLDExNCwyNTAsMCwKKyAgICAwLDAsMTE0LDcsMSwwLDAsMTE0LDI1LDEsMCwwLDExNCwxNjMsMCwwLAorICAgIDAsMTE0LDM0LDEsMCwwLDExNCwzNiwxLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNiwwLDAsMCwyMTgsCisgICAgOCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw2Miw4LDAsMCwwLDExNSwxMDYsMCwKKyAgICAwLDAsNiwxNiw2LDEsNiwxLDMsMSw3LDMsMTIsMTcsMTIsNSwKKyAgICAxMiw1LDEyLDYsMTIsMTIsMTIsMTAsMTIsOSwxMiw1LDEyLDcsMTUsMjIsCisgICAgMTUsMTE0LDIyLDEsMTgsMiw2LDEsNiwyLDksMiw5LDIsMTAsMiwKKyAgICAyMSw0NCwxMiwzMywxMiwxOSwxMiwxMiwxMiwxMiwxOCw4LDEyLDI4LDEyLDE3LAorICAgIDIxLDU1LDIxLDEyLDE4LDEwLDEyLDE0LDksMywxMiwxLDE1LDY1LDE5LDY0LAorICAgIDE5LDI4LDIyLDExMCwxOSw0MSwyNSw0MywyNSwxNiw2LDMsMjUsNTMsMTksNTcsCisgICAgMTksNDEsMTksMTM0LDE5LDE0NiwxNSwyMywxMiwxMSwxMiw2OCwKK307CmRpZmYgLS1naXQgYS9QeXRob24vbWFyc2hhbC5jIGIvUHl0aG9uL21hcnNoYWwuYwppbmRleCA2ZjBlZTVlLi41YjhkZTk5IDEwMDY0NAotLS0gYS9QeXRob24vbWFyc2hhbC5jCisrKyBiL1B5dGhvbi9tYXJzaGFsLmMKQEAgLTEyLDggKzEyLDcgQEAKICNpbmNsdWRlICJsb25naW50cmVwci5oIgogI2luY2x1ZGUgImNvZGUuaCIKICNpbmNsdWRlICJtYXJzaGFsLmgiCi0KLSNkZWZpbmUgQUJTKHgpICgoeCkgPCAwID8gLSh4KSA6ICh4KSkKKyNpbmNsdWRlICIuLi9Nb2R1bGVzL2hhc2h0YWJsZS5oIgogCiAvKiBIaWdoIHdhdGVyIG1hcmsgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIG1hcnNoYWxsZWQgb2JqZWN0IGlzIGRhbmdlcm91c2x5IGRlZXAKICAqIGFuZCByaXNrcyBjb3JpbmcgdGhlIGludGVycHJldGVyLiAgV2hlbiB0aGUgb2JqZWN0IHN0YWNrIGdldHMgdGhpcyBkZWVwLApAQCAtMjEsNyArMjAsNyBAQAogICogT24gV2luZG93cyBkZWJ1ZyBidWlsZHMsIHJlZHVjZSB0aGlzIHZhbHVlLgogICovCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiBkZWZpbmVkKF9ERUJVRykKLSNkZWZpbmUgTUFYX01BUlNIQUxfU1RBQ0tfREVQVEggMTUwMAorI2RlZmluZSBNQVhfTUFSU0hBTF9TVEFDS19ERVBUSCAxMDAwCiAjZWxzZQogI2RlZmluZSBNQVhfTUFSU0hBTF9TVEFDS19ERVBUSCAyMDAwCiAjZW5kaWYKQEAgLTY2LDU0ICs2NSw4MyBAQAogICAgIEZJTEUgKmZwOwogICAgIGludCBlcnJvcjsgIC8qIHNlZSBXRkVSUl8qIHZhbHVlcyAqLwogICAgIGludCBkZXB0aDsKLSAgICAvKiBJZiBmcCA9PSBOVUxMLCB0aGUgZm9sbG93aW5nIGFyZSB2YWxpZDogKi8KLSAgICBQeU9iamVjdCAqcmVhZGFibGU7ICAgIC8qIFN0cmVhbS1saWtlIG9iamVjdCBiZWluZyByZWFkIGZyb20gKi8KICAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpjdXJyZW50X2ZpbGVuYW1lOwogICAgIGNoYXIgKnB0cjsKICAgICBjaGFyICplbmQ7CiAgICAgY2hhciAqYnVmOwotICAgIFB5X3NzaXplX3QgYnVmX3NpemU7Ci0gICAgUHlPYmplY3QgKnJlZnM7IC8qIGRpY3Qgb24gbWFyc2hhbCwgbGlzdCBvbiB1bm1hcnNoYWwgKi8KKyAgICBfUHlfaGFzaHRhYmxlX3QgKmhhc2h0YWJsZTsKICAgICBpbnQgdmVyc2lvbjsKIH0gV0ZJTEU7CiAKLSNkZWZpbmUgd19ieXRlKGMsIHApIGlmICgoKHApLT5mcCkpIHB1dGMoKGMpLCAocCktPmZwKTsgXAotICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwKS0+cHRyICE9IChwKS0+ZW5kKSAqKHApLT5wdHIrKyA9IChjKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB3X21vcmUoKGMpLCBwKQorI2RlZmluZSB3X2J5dGUoYywgcCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgocCktPnB0ciAhPSAocCktPmVuZCB8fCB3X3Jlc2VydmUoKHApLCAxKSkgIFwKKyAgICAgICAgICAgICoocCktPnB0cisrID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKIAogc3RhdGljIHZvaWQKLXdfbW9yZShjaGFyIGMsIFdGSUxFICpwKQord19mbHVzaChXRklMRSAqcCkKIHsKLSAgICBQeV9zc2l6ZV90IHNpemUsIG5ld3NpemU7Ci0gICAgaWYgKHAtPnN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm47IC8qIEFuIGVycm9yIGFscmVhZHkgb2NjdXJyZWQgKi8KLSAgICBzaXplID0gUHlCeXRlc19TaXplKHAtPnN0cik7Ci0gICAgbmV3c2l6ZSA9IHNpemUgKyBzaXplICsgMTAyNDsKLSAgICBpZiAobmV3c2l6ZSA+IDMyKjEwMjQqMTAyNCkgewotICAgICAgICBuZXdzaXplID0gc2l6ZSArIChzaXplID4+IDMpOyAgICAgICAgICAgLyogMTIuNSUgb3ZlcmFsbG9jYXRpb24gKi8KKyAgICBhc3NlcnQocC0+ZnAgIT0gTlVMTCk7CisgICAgZndyaXRlKHAtPmJ1ZiwgMSwgcC0+cHRyIC0gcC0+YnVmLCBwLT5mcCk7CisgICAgcC0+cHRyID0gcC0+YnVmOworfQorCitzdGF0aWMgaW50Cit3X3Jlc2VydmUoV0ZJTEUgKnAsIFB5X3NzaXplX3QgbmVlZGVkKQoreworICAgIFB5X3NzaXplX3QgcG9zLCBzaXplLCBkZWx0YTsKKyAgICBpZiAocC0+cHRyID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOyAvKiBBbiBlcnJvciBhbHJlYWR5IG9jY3VycmVkICovCisgICAgaWYgKHAtPmZwICE9IE5VTEwpIHsKKyAgICAgICAgd19mbHVzaChwKTsKKyAgICAgICAgcmV0dXJuIG5lZWRlZCA8PSBwLT5lbmQgLSBwLT5wdHI7CiAgICAgfQotICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnAtPnN0ciwgbmV3c2l6ZSkgIT0gMCkgewotICAgICAgICBwLT5wdHIgPSBwLT5lbmQgPSBOVUxMOworICAgIGFzc2VydChwLT5zdHIgIT0gTlVMTCk7CisgICAgcG9zID0gcC0+cHRyIC0gcC0+YnVmOworICAgIHNpemUgPSBQeUJ5dGVzX1NpemUocC0+c3RyKTsKKyAgICBpZiAoc2l6ZSA+IDE2KjEwMjQqMTAyNCkKKyAgICAgICAgZGVsdGEgPSAoc2l6ZSA+PiAzKTsgICAgICAgICAgICAvKiAxMi41JSBvdmVyYWxsb2NhdGlvbiAqLworICAgIGVsc2UKKyAgICAgICAgZGVsdGEgPSBzaXplICsgMTAyNDsKKyAgICBkZWx0YSA9IFB5X01BWChkZWx0YSwgbmVlZGVkKTsKKyAgICBpZiAoZGVsdGEgPiBQWV9TU0laRV9UX01BWCAtIHNpemUpIHsKKyAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9OT01FTU9SWTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHNpemUgKz0gZGVsdGE7CisgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcC0+c3RyLCBzaXplKSAhPSAwKSB7CisgICAgICAgIHAtPnB0ciA9IHAtPmJ1ZiA9IHAtPmVuZCA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcC0+cHRyID0gUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKilwLT5zdHIpICsgc2l6ZTsKLSAgICAgICAgcC0+ZW5kID0KLSAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopcC0+c3RyKSArIG5ld3NpemU7Ci0gICAgICAgICpwLT5wdHIrKyA9IGM7CisgICAgICAgIHAtPmJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHAtPnN0cik7CisgICAgICAgIHAtPnB0ciA9IHAtPmJ1ZiArIHBvczsKKyAgICAgICAgcC0+ZW5kID0gcC0+YnVmICsgc2l6ZTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZAogd19zdHJpbmcoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBuLCBXRklMRSAqcCkKIHsKKyAgICBQeV9zc2l6ZV90IG07CisgICAgaWYgKCFuIHx8IHAtPnB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgbSA9IHAtPmVuZCAtIHAtPnB0cjsKICAgICBpZiAocC0+ZnAgIT0gTlVMTCkgewotICAgICAgICBmd3JpdGUocywgMSwgbiwgcC0+ZnApOworICAgICAgICBpZiAobiA8PSBtKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkocC0+cHRyLCBzLCBuKTsKKyAgICAgICAgICAgIHAtPnB0ciArPSBuOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd19mbHVzaChwKTsKKyAgICAgICAgICAgIGZ3cml0ZShzLCAxLCBuLCBwLT5mcCk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHdoaWxlICgtLW4gPj0gMCkgewotICAgICAgICAgICAgd19ieXRlKCpzLCBwKTsKLSAgICAgICAgICAgIHMrKzsKKyAgICAgICAgaWYgKG4gPD0gbSB8fCB3X3Jlc2VydmUocCwgbiAtIG0pKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkocC0+cHRyLCBzLCBuKTsKKyAgICAgICAgICAgIHAtPnB0ciArPSBuOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTkyLDcgKzIyMCw3IEBACiAgICAgfQogCiAgICAgLyogc2V0IGwgdG8gbnVtYmVyIG9mIGJhc2UgUHlMb25nX01BUlNIQUxfQkFTRSBkaWdpdHMgKi8KLSAgICBuID0gQUJTKFB5X1NJWkUob2IpKTsKKyAgICBuID0gUHlfQUJTKFB5X1NJWkUob2IpKTsKICAgICBsID0gKG4tMSkgKiBQeUxvbmdfTUFSU0hBTF9SQVRJTzsKICAgICBkID0gb2ItPm9iX2RpZ2l0W24tMV07CiAgICAgYXNzZXJ0KGQgIT0gMCk7IC8qIGEgUHlMb25nIGlzIGFsd2F5cyBub3JtYWxpemVkICovCkBAIC0yMjUsNDYgKzI1MywzOCBAQAogc3RhdGljIGludAogd19yZWYoUHlPYmplY3QgKnYsIGNoYXIgKmZsYWcsIFdGSUxFICpwKQogewotICAgIFB5T2JqZWN0ICppZDsKLSAgICBQeU9iamVjdCAqaWR4OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgaW50IHc7CiAKLSAgICBpZiAocC0+dmVyc2lvbiA8IDMgfHwgcC0+cmVmcyA9PSBOVUxMKQorICAgIGlmIChwLT52ZXJzaW9uIDwgMyB8fCBwLT5oYXNodGFibGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7IC8qIG5vdCB3cml0aW5nIG9iamVjdCByZWZlcmVuY2VzICovCiAKICAgICAvKiBpZiBpdCBoYXMgb25seSBvbmUgcmVmZXJlbmNlLCBpdCBkZWZpbml0ZWx5IGlzbid0IHNoYXJlZCAqLwogICAgIGlmIChQeV9SRUZDTlQodikgPT0gMSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZCA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCopdik7Ci0gICAgaWYgKGlkID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyOwotICAgIGlkeCA9IFB5RGljdF9HZXRJdGVtKHAtPnJlZnMsIGlkKTsKLSAgICBpZiAoaWR4ICE9IE5VTEwpIHsKKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KHAtPmhhc2h0YWJsZSwgdik7CisgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKICAgICAgICAgLyogd3JpdGUgdGhlIHJlZmVyZW5jZSBpbmRleCB0byB0aGUgc3RyZWFtICovCi0gICAgICAgIGxvbmcgdyA9IFB5TG9uZ19Bc0xvbmcoaWR4KTsKLSAgICAgICAgUHlfREVDUkVGKGlkKTsKLSAgICAgICAgaWYgKHcgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgICAgIH0KKyAgICAgICAgX1B5X0hBU0hUQUJMRV9FTlRSWV9SRUFEX0RBVEEocC0+aGFzaHRhYmxlLCAmdywgc2l6ZW9mKHcpLCBlbnRyeSk7CiAgICAgICAgIC8qIHdlIGRvbid0IHN0b3JlICJsb25nIiBpbmRpY2VzIGluIHRoZSBkaWN0ICovCiAgICAgICAgIGFzc2VydCgwIDw9IHcgJiYgdyA8PSAweDdmZmZmZmZmKTsKICAgICAgICAgd19ieXRlKFRZUEVfUkVGLCBwKTsKICAgICAgICAgd19sb25nKHcsIHApOwogICAgICAgICByZXR1cm4gMTsKICAgICB9IGVsc2UgewotICAgICAgICBpbnQgb2s7Ci0gICAgICAgIFB5X3NzaXplX3QgcyA9IFB5RGljdF9TaXplKHAtPnJlZnMpOworICAgICAgICBzaXplX3QgcyA9IHAtPmhhc2h0YWJsZS0+ZW50cmllczsKICAgICAgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBsb25nIGluZGljZXMgKi8KICAgICAgICAgaWYgKHMgPj0gMHg3ZmZmZmZmZikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0b28gbWFueSBvYmplY3RzIik7CiAgICAgICAgICAgICBnb3RvIGVycjsKICAgICAgICAgfQotICAgICAgICBpZHggPSBQeUxvbmdfRnJvbVNzaXplX3Qocyk7Ci0gICAgICAgIG9rID0gaWR4ICYmIFB5RGljdF9TZXRJdGVtKHAtPnJlZnMsIGlkLCBpZHgpID09IDA7Ci0gICAgICAgIFB5X0RFQ1JFRihpZCk7Ci0gICAgICAgIFB5X1hERUNSRUYoaWR4KTsKLSAgICAgICAgaWYgKCFvaykKKyAgICAgICAgdyA9IChpbnQpczsKKyAgICAgICAgUHlfSU5DUkVGKHYpOworICAgICAgICBpZiAoX1B5X0hBU0hUQUJMRV9TRVQocC0+aGFzaHRhYmxlLCB2LCB3KSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CiAgICAgICAgICpmbGFnIHw9IEZMQUdfUkVGOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC01NDcsMzcgKzU2Nyw4MSBAQAogICAgIH0KIH0KIAorc3RhdGljIGludAord19pbml0X3JlZnMoV0ZJTEUgKndmLCBpbnQgdmVyc2lvbikKK3sKKyAgICBpZiAodmVyc2lvbiA+PSAzKSB7CisgICAgICAgIHdmLT5oYXNodGFibGUgPSBfUHlfaGFzaHRhYmxlX25ldyhzaXplb2YoaW50KSwgX1B5X2hhc2h0YWJsZV9oYXNoX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9kaXJlY3QpOworICAgICAgICBpZiAod2YtPmhhc2h0YWJsZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3X2RlY3JlZl9lbnRyeShfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICpQeV9VTlVTRUQoZGF0YSkpCit7CisgICAgUHlfWERFQ1JFRihlbnRyeS0+a2V5KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3dfY2xlYXJfcmVmcyhXRklMRSAqd2YpCit7CisgICAgaWYgKHdmLT5oYXNodGFibGUgIT0gTlVMTCkgeworICAgICAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2god2YtPmhhc2h0YWJsZSwgd19kZWNyZWZfZW50cnksIE5VTEwpOworICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3kod2YtPmhhc2h0YWJsZSk7CisgICAgfQorfQorCiAvKiB2ZXJzaW9uIGN1cnJlbnRseSBoYXMgbm8gZWZmZWN0IGZvciB3cml0aW5nIGludHMuICovCiB2b2lkCiBQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlKGxvbmcgeCwgRklMRSAqZnAsIGludCB2ZXJzaW9uKQogeworICAgIGNoYXIgYnVmWzRdOwogICAgIFdGSUxFIHdmOworICAgIG1lbXNldCgmd2YsIDAsIHNpemVvZih3ZikpOwogICAgIHdmLmZwID0gZnA7CisgICAgd2YucHRyID0gd2YuYnVmID0gYnVmOworICAgIHdmLmVuZCA9IHdmLnB0ciArIHNpemVvZihidWYpOwogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7Ci0gICAgd2YuZGVwdGggPSAwOwotICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHdfbG9uZyh4LCAmd2YpOworICAgIHdfZmx1c2goJndmKTsKIH0KIAogdm9pZAogUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlKFB5T2JqZWN0ICp4LCBGSUxFICpmcCwgaW50IHZlcnNpb24pCiB7CisgICAgY2hhciBidWZbQlVGU0laXTsKICAgICBXRklMRSB3ZjsKKyAgICBtZW1zZXQoJndmLCAwLCBzaXplb2Yod2YpKTsKICAgICB3Zi5mcCA9IGZwOworICAgIHdmLnB0ciA9IHdmLmJ1ZiA9IGJ1ZjsKKyAgICB3Zi5lbmQgPSB3Zi5wdHIgKyBzaXplb2YoYnVmKTsKICAgICB3Zi5lcnJvciA9IFdGRVJSX09LOwotICAgIHdmLmRlcHRoID0gMDsKLSAgICBpZiAodmVyc2lvbiA+PSAzKSB7Ci0gICAgICAgIGlmICgod2YucmVmcyA9IFB5RGljdF9OZXcoKSkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybjsgLyogY2FsbGVyIG11c2ggY2hlY2sgUHlFcnJfT2NjdXJyZWQoKSAqLwotICAgIH0gZWxzZQotICAgICAgICB3Zi5yZWZzID0gTlVMTDsKICAgICB3Zi52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICBpZiAod19pbml0X3JlZnMoJndmLCB2ZXJzaW9uKSkKKyAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgbXVzaCBjaGVjayBQeUVycl9PY2N1cnJlZCgpICovCiAgICAgd19vYmplY3QoeCwgJndmKTsKLSAgICBQeV9YREVDUkVGKHdmLnJlZnMpOworICAgIHdfY2xlYXJfcmVmcygmd2YpOworICAgIHdfZmx1c2goJndmKTsKIH0KIAotdHlwZWRlZiBXRklMRSBSRklMRTsgLyogU2FtZSBzdHJ1Y3Qgd2l0aCBkaWZmZXJlbnQgaW52YXJpYW50cyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEZJTEUgKmZwOworICAgIGludCBkZXB0aDsKKyAgICBQeU9iamVjdCAqcmVhZGFibGU7ICAvKiBTdHJlYW0tbGlrZSBvYmplY3QgYmVpbmcgcmVhZCBmcm9tICovCisgICAgUHlPYmplY3QgKmN1cnJlbnRfZmlsZW5hbWU7CisgICAgY2hhciAqcHRyOworICAgIGNoYXIgKmVuZDsKKyAgICBjaGFyICpidWY7CisgICAgUHlfc3NpemVfdCBidWZfc2l6ZTsKKyAgICBQeU9iamVjdCAqcmVmczsgIC8qIGEgbGlzdCAqLworfSBSRklMRTsKIAogc3RhdGljIGNoYXIgKgogcl9zdHJpbmcoUHlfc3NpemVfdCBuLCBSRklMRSAqcCkKQEAgLTcyNyw4ICs3OTEsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzaXplID0gMSArIChBQlMobikgLSAxKSAvIFB5TG9uZ19NQVJTSEFMX1JBVElPOwotICAgIHNob3J0c19pbl90b3BfZGlnaXQgPSAxICsgKEFCUyhuKSAtIDEpICUgUHlMb25nX01BUlNIQUxfUkFUSU87CisgICAgc2l6ZSA9IDEgKyAoUHlfQUJTKG4pIC0gMSkgLyBQeUxvbmdfTUFSU0hBTF9SQVRJTzsKKyAgICBzaG9ydHNfaW5fdG9wX2RpZ2l0ID0gMSArIChQeV9BQlMobikgLSAxKSAlIFB5TG9uZ19NQVJTSEFMX1JBVElPOwogICAgIG9iID0gX1B5TG9uZ19OZXcoc2l6ZSk7CiAgICAgaWYgKG9iID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTQxNywxOCArMTQ4MSwyMCBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLSNpZmRlZiBIQVZFX0ZTVEFUCi0vKiBSZXR1cm4gc2l6ZSBvZiBmaWxlIGluIGJ5dGVzOyA8IDAgaWYgdW5rbm93bi4gKi8KKy8qIFJldHVybiBzaXplIG9mIGZpbGUgaW4gYnl0ZXM7IDwgMCBpZiB1bmtub3duIG9yIElOVF9NQVggaWYgdG9vIGJpZyAqLwogc3RhdGljIG9mZl90CiBnZXRmaWxlc2l6ZShGSUxFICpmcCkKIHsKLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKLSAgICBpZiAoZnN0YXQoZmlsZW5vKGZwKSwgJnN0KSAhPSAwKQorICAgIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3Qgc3Q7CisgICAgaWYgKF9QeV9mc3RhdF9ub3JhaXNlKGZpbGVubyhmcCksICZzdCkgIT0gMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHN0LnN0X3NpemU7Ci19CisjaWYgU0laRU9GX09GRl9UID09IDQKKyAgICBlbHNlIGlmIChzdC5zdF9zaXplID49IElOVF9NQVgpCisgICAgICAgIHJldHVybiAob2ZmX3QpSU5UX01BWDsKICNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIChvZmZfdClzdC5zdF9zaXplOworfQogCiAvKiBJZiB3ZSBjYW4gZ2V0IHRoZSBzaXplIG9mIHRoZSBmaWxlIHVwLWZyb250LCBhbmQgaXQncyByZWFzb25hYmx5IHNtYWxsLAogICogcmVhZCBpdCBpbiBvbmUgZ3VscCBhbmQgZGVsZWdhdGUgdG8gLi4uRnJvbVN0cmluZygpIGluc3RlYWQuICBNdWNoIHF1aWNrZXIKQEAgLTE0NDEsNyArMTUwNyw2IEBACiB7CiAvKiBSRUFTT05BQkxFX0ZJTEVfTElNSVQgaXMgYnkgZGVmbiBzb21ldGhpbmcgYmlnIGVub3VnaCBmb3IgVGtpbnRlci5weWMuICovCiAjZGVmaW5lIFJFQVNPTkFCTEVfRklMRV9MSU1JVCAoMUwgPDwgMTgpCi0jaWZkZWYgSEFWRV9GU1RBVAogICAgIG9mZl90IGZpbGVzaXplOwogICAgIGZpbGVzaXplID0gZ2V0ZmlsZXNpemUoZnApOwogICAgIGlmIChmaWxlc2l6ZSA+IDAgJiYgZmlsZXNpemUgPD0gUkVBU09OQUJMRV9GSUxFX0xJTUlUKSB7CkBAIC0xNDU0LDcgKzE1MTksNiBAQAogICAgICAgICB9CiAKICAgICB9Ci0jZW5kaWYKICAgICAvKiBXZSBkb24ndCBoYXZlIGZzdGF0LCBvciB3ZSBkbyBidXQgdGhlIGZpbGUgaXMgbGFyZ2VyIHRoYW4KICAgICAgKiBSRUFTT05BQkxFX0ZJTEVfTElNSVQgb3IgbWFsbG9jIGZhaWxlZCAtLSByZWFkIGEgYnl0ZSBhdCBhIHRpbWUuCiAgICAgICovCkBAIC0xNTExLDI1ICsxNTc1LDIwIEBACiB7CiAgICAgV0ZJTEUgd2Y7CiAKLSAgICB3Zi5mcCA9IE5VTEw7Ci0gICAgd2YucmVhZGFibGUgPSBOVUxMOworICAgIG1lbXNldCgmd2YsIDAsIHNpemVvZih3ZikpOwogICAgIHdmLnN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCA1MCk7CiAgICAgaWYgKHdmLnN0ciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB3Zi5wdHIgPSBQeUJ5dGVzX0FTX1NUUklORygoUHlCeXRlc09iamVjdCAqKXdmLnN0cik7CisgICAgd2YucHRyID0gd2YuYnVmID0gUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKil3Zi5zdHIpOwogICAgIHdmLmVuZCA9IHdmLnB0ciArIFB5Qnl0ZXNfU2l6ZSh3Zi5zdHIpOwogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7Ci0gICAgd2YuZGVwdGggPSAwOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwotICAgIGlmICh2ZXJzaW9uID49IDMpIHsKLSAgICAgICAgaWYgKCh3Zi5yZWZzID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYod2Yuc3RyKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHdmLnJlZnMgPSBOVUxMOworICAgIGlmICh3X2luaXRfcmVmcygmd2YsIHZlcnNpb24pKSB7CisgICAgICAgIFB5X0RFQ1JFRih3Zi5zdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgd19vYmplY3QoeCwgJndmKTsKLSAgICBQeV9YREVDUkVGKHdmLnJlZnMpOworICAgIHdfY2xlYXJfcmVmcygmd2YpOwogICAgIGlmICh3Zi5zdHIgIT0gTlVMTCkgewogICAgICAgICBjaGFyICpiYXNlID0gUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKil3Zi5zdHIpOwogICAgICAgICBpZiAod2YucHRyIC0gYmFzZSA+IFBZX1NTSVpFX1RfTUFYKSB7CkBAIC0xNTg1LDcgKzE2NDQsNyBAQAogb3BlbigpIG9yIG9zLnBvcGVuKCkuIEl0IG11c3QgYmUgb3BlbmVkIGluIGJpbmFyeSBtb2RlICgnd2InIG9yICd3K2InKS5cblwKIFxuXAogSWYgdGhlIHZhbHVlIGhhcyAob3IgY29udGFpbnMgYW4gb2JqZWN0IHRoYXQgaGFzKSBhbiB1bnN1cHBvcnRlZCB0eXBlLCBhXG5cCi1WYWx1ZUVycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQg4oCUIGJ1dCBnYXJiYWdlIGRhdGEgd2lsbCBhbHNvIGJlIHdyaXR0ZW5cblwKK1ZhbHVlRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZCAtIGJ1dCBnYXJiYWdlIGRhdGEgd2lsbCBhbHNvIGJlIHdyaXR0ZW5cblwKIHRvIHRoZSBmaWxlLiBUaGUgb2JqZWN0IHdpbGwgbm90IGJlIHByb3Blcmx5IHJlYWQgYmFjayBieSBsb2FkKClcblwKIFxuXAogVGhlIHZlcnNpb24gYXJndW1lbnQgaW5kaWNhdGVzIHRoZSBkYXRhIGZvcm1hdCB0aGF0IGR1bXAgc2hvdWxkIHVzZS4iKTsKQEAgLTE2MzYsNyArMTY5NSw3IEBACiAibG9hZChmaWxlKVxuXAogXG5cCiBSZWFkIG9uZSB2YWx1ZSBmcm9tIHRoZSBvcGVuIGZpbGUgYW5kIHJldHVybiBpdC4gSWYgbm8gdmFsaWQgdmFsdWUgaXNcblwKLXJlYWQgKGUuZy4gYmVjYXVzZSB0aGUgZGF0YSBoYXMgYSBkaWZmZXJlbnQgUHl0aG9uIHZlcnNpb27igJlzXG5cCityZWFkIChlLmcuIGJlY2F1c2UgdGhlIGRhdGEgaGFzIGEgZGlmZmVyZW50IFB5dGhvbiB2ZXJzaW9uJ3NcblwKIGluY29tcGF0aWJsZSBtYXJzaGFsIGZvcm1hdCksIHJhaXNlIEVPRkVycm9yLCBWYWx1ZUVycm9yIG9yIFR5cGVFcnJvci5cblwKIFRoZSBmaWxlIG11c3QgYmUgYW4gb3BlbiBmaWxlIG9iamVjdCBvcGVuZWQgaW4gYmluYXJ5IG1vZGUgKCdyYicgb3JcblwKICdyK2InKS5cblwKZGlmZiAtLWdpdCBhL1B5dGhvbi9tb2RzdXBwb3J0LmMgYi9QeXRob24vbW9kc3VwcG9ydC5jCmluZGV4IDZjOTM4ZGQuLjBkMDkzNzEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9tb2RzdXBwb3J0LmMKKysrIGIvUHl0aG9uL21vZHN1cHBvcnQuYwpAQCAtNjMsNDggKzYzLDg0IEBACiBzdGF0aWMgUHlPYmplY3QgKmRvX21rdmFsdWUoY29uc3QgY2hhcioqLCB2YV9saXN0ICosIGludCk7CiAKIAorc3RhdGljIHZvaWQKK2RvX2lnbm9yZShjb25zdCBjaGFyICoqcF9mb3JtYXQsIHZhX2xpc3QgKnBfdmEsIGludCBlbmRjaGFyLCBpbnQgbiwgaW50IGZsYWdzKQoreworICAgIFB5T2JqZWN0ICp2OworICAgIGludCBpOworICAgIGFzc2VydChQeUVycl9PY2N1cnJlZCgpKTsKKyAgICB2ID0gUHlUdXBsZV9OZXcobik7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdmFsdWUsICp0YiwgKnc7CisKKyAgICAgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOworICAgICAgICB3ID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOworICAgICAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKKyAgICAgICAgaWYgKHcgIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHYgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odiwgaSwgdyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfWERFQ1JFRih2KTsKKyAgICBpZiAoKipwX2Zvcm1hdCAhPSBlbmRjaGFyKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJVbm1hdGNoZWQgcGFyZW4gaW4gZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGVuZGNoYXIpCisgICAgICAgICsrKnBfZm9ybWF0OworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogZG9fbWtkaWN0KGNvbnN0IGNoYXIgKipwX2Zvcm1hdCwgdmFfbGlzdCAqcF92YSwgaW50IGVuZGNoYXIsIGludCBuLCBpbnQgZmxhZ3MpCiB7CiAgICAgUHlPYmplY3QgKmQ7CiAgICAgaW50IGk7Ci0gICAgaW50IGl0ZW1mYWlsZWQgPSAwOwogICAgIGlmIChuIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKChkID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKQorICAgIGlmIChuICUgMikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQmFkIGRpY3QgZm9ybWF0Iik7CisgICAgICAgIGRvX2lnbm9yZShwX2Zvcm1hdCwgcF92YSwgZW5kY2hhciwgbiwgZmxhZ3MpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgLyogTm90ZSB0aGF0IHdlIGNhbid0IGJhaWwgaW1tZWRpYXRlbHkgb24gZXJyb3IgYXMgdGhpcyB3aWxsIGxlYWsKICAgICAgICByZWZjb3VudHMgb24gYW55ICdOJyBhcmd1bWVudHMuICovCisgICAgaWYgKChkID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKSB7CisgICAgICAgIGRvX2lnbm9yZShwX2Zvcm1hdCwgcF92YSwgZW5kY2hhciwgbiwgZmxhZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrPSAyKSB7CiAgICAgICAgIFB5T2JqZWN0ICprLCAqdjsKLSAgICAgICAgaW50IGVycjsKKwogICAgICAgICBrID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOwogICAgICAgICBpZiAoayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpdGVtZmFpbGVkID0gMTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIGsgPSBQeV9Ob25lOwotICAgICAgICB9Ci0gICAgICAgIHYgPSBkb19ta3ZhbHVlKHBfZm9ybWF0LCBwX3ZhLCBmbGFncyk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGl0ZW1mYWlsZWQgPSAxOwotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgdiA9IFB5X05vbmU7Ci0gICAgICAgIH0KLSAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oZCwgaywgdik7Ci0gICAgICAgIFB5X0RFQ1JFRihrKTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICBpZiAoZXJyIDwgMCB8fCBpdGVtZmFpbGVkKSB7CisgICAgICAgICAgICBkb19pZ25vcmUocF9mb3JtYXQsIHBfdmEsIGVuZGNoYXIsIG4gLSBpIC0gMSwgZmxhZ3MpOwogICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgdiA9IGRvX21rdmFsdWUocF9mb3JtYXQsIHBfdmEsIGZsYWdzKTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCB8fCBQeURpY3RfU2V0SXRlbShkLCBrLCB2KSA8IDApIHsKKyAgICAgICAgICAgIGRvX2lnbm9yZShwX2Zvcm1hdCwgcF92YSwgZW5kY2hhciwgbiAtIGkgLSAyLCBmbGFncyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoayk7CisgICAgICAgICAgICBQeV9YREVDUkVGKHYpOworICAgICAgICAgICAgUHlfREVDUkVGKGQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGspOworICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgfQotICAgIGlmIChkICE9IE5VTEwgJiYgKipwX2Zvcm1hdCAhPSBlbmRjaGFyKSB7CisgICAgaWYgKCoqcF9mb3JtYXQgIT0gZW5kY2hhcikgewogICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgIGQgPSBOVUxMOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVW5tYXRjaGVkIHBhcmVuIGluIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoZW5kY2hhcikKKyAgICBpZiAoZW5kY2hhcikKICAgICAgICAgKysqcF9mb3JtYXQ7CiAgICAgcmV0dXJuIGQ7CiB9CkBAIC0xMTQsMjkgKzE1MCwyNCBAQAogewogICAgIFB5T2JqZWN0ICp2OwogICAgIGludCBpOwotICAgIGludCBpdGVtZmFpbGVkID0gMDsKICAgICBpZiAobiA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHYgPSBQeUxpc3RfTmV3KG4pOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIE5vdGUgdGhhdCB3ZSBjYW4ndCBiYWlsIGltbWVkaWF0ZWx5IG9uIGVycm9yIGFzIHRoaXMgd2lsbCBsZWFrCiAgICAgICAgcmVmY291bnRzIG9uIGFueSAnTicgYXJndW1lbnRzLiAqLworICAgIHYgPSBQeUxpc3RfTmV3KG4pOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgZG9faWdub3JlKHBfZm9ybWF0LCBwX3ZhLCBlbmRjaGFyLCBuLCBmbGFncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICp3ID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOwogICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpdGVtZmFpbGVkID0gMTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHcgPSBQeV9Ob25lOworICAgICAgICAgICAgZG9faWdub3JlKHBfZm9ybWF0LCBwX3ZhLCBlbmRjaGFyLCBuIC0gaSAtIDEsIGZsYWdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIFB5TGlzdF9TRVRfSVRFTSh2LCBpLCB3KTsKICAgICB9Ci0KLSAgICBpZiAoaXRlbWZhaWxlZCkgewotICAgICAgICAvKiBkb19ta3ZhbHVlKCkgc2hvdWxkIGhhdmUgYWxyZWFkeSBzZXQgYW4gZXJyb3IgKi8KLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgaWYgKCoqcF9mb3JtYXQgIT0gZW5kY2hhcikgewogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTE1MywzNyArMTg0LDIzIEBACiB7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgaW50IGk7Ci0gICAgaW50IGl0ZW1mYWlsZWQgPSAwOwogICAgIGlmIChuIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCh2ID0gUHlUdXBsZV9OZXcobikpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIE5vdGUgdGhhdCB3ZSBjYW4ndCBiYWlsIGltbWVkaWF0ZWx5IG9uIGVycm9yIGFzIHRoaXMgd2lsbCBsZWFrCiAgICAgICAgcmVmY291bnRzIG9uIGFueSAnTicgYXJndW1lbnRzLiAqLworICAgIGlmICgodiA9IFB5VHVwbGVfTmV3KG4pKSA9PSBOVUxMKSB7CisgICAgICAgIGRvX2lnbm9yZShwX2Zvcm1hdCwgcF92YSwgZW5kY2hhciwgbiwgZmxhZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBQeU9iamVjdCAqdzsKLQotICAgICAgICBpZiAoaXRlbWZhaWxlZCkgewotICAgICAgICAgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7Ci0gICAgICAgICAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7Ci0gICAgICAgICAgICB3ID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOwotICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB3ID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOwotICAgICAgICB9CisgICAgICAgIFB5T2JqZWN0ICp3ID0gZG9fbWt2YWx1ZShwX2Zvcm1hdCwgcF92YSwgZmxhZ3MpOwogICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpdGVtZmFpbGVkID0gMTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHcgPSBQeV9Ob25lOworICAgICAgICAgICAgZG9faWdub3JlKHBfZm9ybWF0LCBwX3ZhLCBlbmRjaGFyLCBuIC0gaSAtIDEsIGZsYWdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odiwgaSwgdyk7CiAgICAgfQotICAgIGlmIChpdGVtZmFpbGVkKSB7Ci0gICAgICAgIC8qIGRvX21rdmFsdWUoKSBzaG91bGQgaGF2ZSBhbHJlYWR5IHNldCBhbiBlcnJvciAqLwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBpZiAoKipwX2Zvcm1hdCAhPSBlbmRjaGFyKSB7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLApkaWZmIC0tZ2l0IGEvUHl0aG9uL29wY29kZV90YXJnZXRzLmggYi9QeXRob24vb3Bjb2RlX3RhcmdldHMuaAppbmRleCBmOTBhMTdhLi4xOTI1OWUxIDEwMDY0NAotLS0gYS9QeXRob24vb3Bjb2RlX3RhcmdldHMuaAorKysgYi9QeXRob24vb3Bjb2RlX3RhcmdldHMuaApAQCAtMTUsOCArMTUsOCBAQAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmVEFSR0VUX1VOQVJZX0lOVkVSVCwKLSAgICAmJl91bmtub3duX29wY29kZSwKLSAgICAmJl91bmtub3duX29wY29kZSwKKyAgICAmJlRBUkdFVF9CSU5BUllfTUFUUklYX01VTFRJUExZLAorICAgICYmVEFSR0VUX0lOUExBQ0VfTUFUUklYX01VTFRJUExZLAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmVEFSR0VUX0JJTkFSWV9QT1dFUiwKICAgICAmJlRBUkdFVF9CSU5BUllfTVVMVElQTFksCkBAIC00OSwxMSArNDksMTEgQEAKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJl91bmtub3duX29wY29kZSwKKyAgICAmJlRBUkdFVF9HRVRfQUlURVIsCisgICAgJiZUQVJHRVRfR0VUX0FORVhULAorICAgICYmVEFSR0VUX0JFRk9SRV9BU1lOQ19XSVRILAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmX3Vua25vd25fb3Bjb2RlLAotICAgICYmX3Vua25vd25fb3Bjb2RlLAotICAgICYmX3Vua25vd25fb3Bjb2RlLAotICAgICYmVEFSR0VUX1NUT1JFX01BUCwKICAgICAmJlRBUkdFVF9JTlBMQUNFX0FERCwKICAgICAmJlRBUkdFVF9JTlBMQUNFX1NVQlRSQUNULAogICAgICYmVEFSR0VUX0lOUExBQ0VfTVVMVElQTFksCkBAIC02OCwxMSArNjgsMTEgQEAKICAgICAmJlRBUkdFVF9CSU5BUllfT1IsCiAgICAgJiZUQVJHRVRfSU5QTEFDRV9QT1dFUiwKICAgICAmJlRBUkdFVF9HRVRfSVRFUiwKLSAgICAmJl91bmtub3duX29wY29kZSwKKyAgICAmJlRBUkdFVF9HRVRfWUlFTERfRlJPTV9JVEVSLAogICAgICYmVEFSR0VUX1BSSU5UX0VYUFIsCiAgICAgJiZUQVJHRVRfTE9BRF9CVUlMRF9DTEFTUywKICAgICAmJlRBUkdFVF9ZSUVMRF9GUk9NLAotICAgICYmX3Vua25vd25fb3Bjb2RlLAorICAgICYmVEFSR0VUX0dFVF9BV0FJVEFCTEUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZUQVJHRVRfSU5QTEFDRV9MU0hJRlQsCiAgICAgJiZUQVJHRVRfSU5QTEFDRV9SU0hJRlQsCkBAIC04MCw4ICs4MCw4IEBACiAgICAgJiZUQVJHRVRfSU5QTEFDRV9YT1IsCiAgICAgJiZUQVJHRVRfSU5QTEFDRV9PUiwKICAgICAmJlRBUkdFVF9CUkVBS19MT09QLAotICAgICYmVEFSR0VUX1dJVEhfQ0xFQU5VUCwKLSAgICAmJl91bmtub3duX29wY29kZSwKKyAgICAmJlRBUkdFVF9XSVRIX0NMRUFOVVBfU1RBUlQsCisgICAgJiZUQVJHRVRfV0lUSF9DTEVBTlVQX0ZJTklTSCwKICAgICAmJlRBUkdFVF9SRVRVUk5fVkFMVUUsCiAgICAgJiZUQVJHRVRfSU1QT1JUX1NUQVIsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCkBAIC0xNDgsMTIgKzE0OCwxMiBAQAogICAgICYmVEFSR0VUX1NFVF9BREQsCiAgICAgJiZUQVJHRVRfTUFQX0FERCwKICAgICAmJlRBUkdFVF9MT0FEX0NMQVNTREVSRUYsCi0gICAgJiZfdW5rbm93bl9vcGNvZGUsCi0gICAgJiZfdW5rbm93bl9vcGNvZGUsCi0gICAgJiZfdW5rbm93bl9vcGNvZGUsCi0gICAgJiZfdW5rbm93bl9vcGNvZGUsCi0gICAgJiZfdW5rbm93bl9vcGNvZGUsCi0gICAgJiZfdW5rbm93bl9vcGNvZGUsCisgICAgJiZUQVJHRVRfQlVJTERfTElTVF9VTlBBQ0ssCisgICAgJiZUQVJHRVRfQlVJTERfTUFQX1VOUEFDSywKKyAgICAmJlRBUkdFVF9CVUlMRF9NQVBfVU5QQUNLX1dJVEhfQ0FMTCwKKyAgICAmJlRBUkdFVF9CVUlMRF9UVVBMRV9VTlBBQ0ssCisgICAgJiZUQVJHRVRfQlVJTERfU0VUX1VOUEFDSywKKyAgICAmJlRBUkdFVF9TRVRVUF9BU1lOQ19XSVRILAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmX3Vua25vd25fb3Bjb2RlLApkaWZmIC0tZ2l0IGEvUHl0aG9uL3BlZXBob2xlLmMgYi9QeXRob24vcGVlcGhvbGUuYwppbmRleCBjNTZjOGZjLi40ZTY1N2ZhIDEwMDY0NAotLS0gYS9QeXRob24vcGVlcGhvbGUuYworKysgYi9QeXRob24vcGVlcGhvbGUuYwpAQCAtMTgsNyArMTgsMTEgQEAKICAgICB8fCBvcD09SlVNUF9JRl9GQUxTRV9PUl9QT1AgfHwgb3A9PUpVTVBfSUZfVFJVRV9PUl9QT1ApCiAjZGVmaW5lIEpVTVBTX09OX1RSVUUob3ApIChvcD09UE9QX0pVTVBfSUZfVFJVRSB8fCBvcD09SlVNUF9JRl9UUlVFX09SX1BPUCkKICNkZWZpbmUgR0VUSlVNUFRHVChhcnIsIGkpIChHRVRBUkcoYXJyLGkpICsgKEFCU09MVVRFX0pVTVAoYXJyW2ldKSA/IDAgOiBpKzMpKQotI2RlZmluZSBTRVRBUkcoYXJyLCBpLCB2YWwpIGFycltpKzJdID0gdmFsPj44OyBhcnJbaSsxXSA9IHZhbCAmIDI1NQorI2RlZmluZSBTRVRBUkcoYXJyLCBpLCB2YWwpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFzc2VydCgwIDw9IHZhbCAmJiB2YWwgPD0gMHhmZmZmKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFycltpKzJdID0gKHVuc2lnbmVkIGNoYXIpKCgodW5zaWduZWQgaW50KXZhbCk+PjgpOyAgICAgXAorICAgIGFycltpKzFdID0gKHVuc2lnbmVkIGNoYXIpKCgodW5zaWduZWQgaW50KXZhbCkgJiAyNTUpOyAgXAorfSB3aGlsZSgwKQogI2RlZmluZSBDT0RFU0laRShvcCkgIChIQVNfQVJHKG9wKSA/IDMgOiAxKQogI2RlZmluZSBJU0JBU0lDQkxPQ0soYmxvY2tzLCBzdGFydCwgYnl0ZXMpIFwKICAgICAoYmxvY2tzW3N0YXJ0XT09YmxvY2tzW3N0YXJ0K2J5dGVzLTFdKQpAQCAtMzE1LDYgKzMxOSw3IEBACiAgICAgICAgICAgICBjYXNlIFNFVFVQX0VYQ0VQVDoKICAgICAgICAgICAgIGNhc2UgU0VUVVBfRklOQUxMWToKICAgICAgICAgICAgIGNhc2UgU0VUVVBfV0lUSDoKKyAgICAgICAgICAgIGNhc2UgU0VUVVBfQVNZTkNfV0lUSDoKICAgICAgICAgICAgICAgICBqID0gR0VUSlVNUFRHVChjb2RlLCBpKTsKICAgICAgICAgICAgICAgICBibG9ja3Nbal0gPSAxOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzM5LDcgKzM0NCw3IEBACiAgICBhcHBlYXIgYmVmb3JlIE1BS0VfRlVOQ1RJT047IGluIHRoaXMgY2FzZSBib3RoIG9wY29kZXMgYXJlIHNraXBwZWQuCiAgICBFWFRFTkRFRF9BUkcgcHJlY2VkaW5nIGFueSBvdGhlciBvcGNvZGUgY2F1c2VzIHRoZSBvcHRpbWl6ZXIgdG8gYmFpbC4KIAotICAgT3B0aW1pemF0aW9ucyBhcmUgcmVzdHJpY3RlZCB0byBzaW1wbGUgdHJhbnNmb3JtYXRpb25zIG9jY3VyaW5nIHdpdGhpbiBhCisgICBPcHRpbWl6YXRpb25zIGFyZSByZXN0cmljdGVkIHRvIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbnMgb2NjdXJyaW5nIHdpdGhpbiBhCiAgICBzaW5nbGUgYmFzaWMgYmxvY2suICBBbGwgdHJhbnNmb3JtYXRpb25zIGtlZXAgdGhlIGNvZGUgc2l6ZSB0aGUgc2FtZSBvcgogICAgc21hbGxlci4gIEZvciB0aG9zZSB0aGF0IHJlZHVjZSBzaXplLCB0aGUgZ2FwcyBhcmUgaW5pdGlhbGx5IGZpbGxlZCB3aXRoCiAgICBOT1BzLiAgTGF0ZXIgdGhvc2UgTk9QcyBhcmUgcmVtb3ZlZCBhbmQgdGhlIGp1bXAgYWRkcmVzc2VzIHJldGFyZ2V0ZWQgaW4KQEAgLTM1NSw3ICszNjAsOCBAQAogICAgIHVuc2lnbmVkIGNoYXIgKmNvZGVzdHIgPSBOVUxMOwogICAgIHVuc2lnbmVkIGNoYXIgKmxpbmVubzsKICAgICBpbnQgKmFkZHJtYXAgPSBOVUxMOwotICAgIGludCBuZXdfbGluZSwgY3VtX29yaWdfbGluZSwgbGFzdF9saW5lLCB0YWJzaXo7CisgICAgaW50IG5ld19saW5lLCBjdW1fb3JpZ19saW5lLCBsYXN0X2xpbmU7CisgICAgUHlfc3NpemVfdCB0YWJzaXo7CiAgICAgUHlPYmplY3QgKipjb25zdF9zdGFjayA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCAqbG9hZF9jb25zdF9zdGFjayA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBjb25zdF9zdGFja190b3AgPSAtMTsKQEAgLTYxNSw2ICs2MjEsNyBAQAogICAgICAgICAgICAgY2FzZSBTRVRVUF9FWENFUFQ6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0ZJTkFMTFk6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX1dJVEg6CisgICAgICAgICAgICBjYXNlIFNFVFVQX0FTWU5DX1dJVEg6CiAgICAgICAgICAgICAgICAgdGd0ID0gR0VUSlVNUFRHVChjb2Rlc3RyLCBpKTsKICAgICAgICAgICAgICAgICAvKiBSZXBsYWNlIEpVTVBfKiB0byBhIFJFVFVSTiBpbnRvIGp1c3QgYSBSRVRVUk4gKi8KICAgICAgICAgICAgICAgICBpZiAoVU5DT05ESVRJT05BTF9KVU1QKG9wY29kZSkgJiYKQEAgLTY2MCw3ICs2NjcsOCBAQAogCiAgICAgLyogRml4dXAgbGluZW5vdGFiICovCiAgICAgZm9yIChpPTAsIG5vcHM9MCA7IGk8Y29kZWxlbiA7IGkgKz0gQ09ERVNJWkUoY29kZXN0cltpXSkpIHsKLSAgICAgICAgYWRkcm1hcFtpXSA9IGkgLSBub3BzOworICAgICAgICBhc3NlcnQoaSAtIG5vcHMgPD0gSU5UX01BWCk7CisgICAgICAgIGFkZHJtYXBbaV0gPSAoaW50KShpIC0gbm9wcyk7CiAgICAgICAgIGlmIChjb2Rlc3RyW2ldID09IE5PUCkKICAgICAgICAgICAgIG5vcHMrKzsKICAgICB9CkBAIC02OTgsNiArNzA2LDcgQEAKICAgICAgICAgICAgIGNhc2UgU0VUVVBfRVhDRVBUOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9GSU5BTExZOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9XSVRIOgorICAgICAgICAgICAgY2FzZSBTRVRVUF9BU1lOQ19XSVRIOgogICAgICAgICAgICAgICAgIGogPSBhZGRybWFwW0dFVEFSRyhjb2Rlc3RyLCBpKSArIGkgKyAzXSAtIGFkZHJtYXBbaV0gLSAzOwogICAgICAgICAgICAgICAgIFNFVEFSRyhjb2Rlc3RyLCBpLCBqKTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1B5dGhvbi9weWZwZS5jIGIvUHl0aG9uL3B5ZnBlLmMKaW5kZXggNGI3ZjViYS4uYWIwZWY4MyAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5ZnBlLmMKKysrIGIvUHl0aG9uL3B5ZnBlLmMKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHljb25maWcuaCIKICNpbmNsdWRlICJweWZwZS5oIgotLyogCisvKgogICogVGhlIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdGUEUgaXMgYWN0dWFsbHkgZGVjbGFyZWQgaW4gYW4gZXh0ZXJuYWwKICAqIG1vZHVsZSBmcGVjdGwsIG9yIGFzIHByZWZlcnJlZCBieSB0aGUgdXNlci4gIFRoZXNlIHZhcmlhYmxlCiAgKiBkZWZpbml0aW9ucyBhcmUgcmVxdWlyZWQgaW4gb3JkZXIgdG8gY29tcGlsZSBQeXRob24gd2l0aG91dApAQCAtMTMsNyArMTMsNyBAQAogaW50IFB5RlBFX2NvdW50ZXIgPSAwOwogI2VuZGlmCiAKLS8qIEhhdmUgdGhpcyBvdXRzaWRlIHRoZSBhYm92ZSAjaWZkZWYsIHNpbmNlIHNvbWUgcGlja3kgQU5TSSBjb21waWxlcnMgaXNzdWUgYSAKKy8qIEhhdmUgdGhpcyBvdXRzaWRlIHRoZSBhYm92ZSAjaWZkZWYsIHNpbmNlIHNvbWUgcGlja3kgQU5TSSBjb21waWxlcnMgaXNzdWUgYQogICAgd2FybmluZyB3aGVuIGNvbXBpbGluZyBhbiBlbXB0eSBmaWxlLiAqLwogCiBkb3VibGUKZGlmZiAtLWdpdCBhL1B5dGhvbi9weWxpZmVjeWNsZS5jIGIvUHl0aG9uL3B5bGlmZWN5Y2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1Mjk5MAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9weWxpZmVjeWNsZS5jCkBAIC0wLDAgKzEsMTU5NyBAQAorLyogUHl0aG9uIGludGVycHJldGVyIHRvcC1sZXZlbCByb3V0aW5lcywgaW5jbHVkaW5nIGluaXQvZXhpdCAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKyNpbmNsdWRlICJQeXRob24tYXN0LmgiCisjdW5kZWYgWWllbGQgLyogdW5kZWZpbmUgbWFjcm8gY29uZmxpY3Rpbmcgd2l0aCB3aW5iYXNlLmggKi8KKyNpbmNsdWRlICJncmFtbWFyLmgiCisjaW5jbHVkZSAibm9kZS5oIgorI2luY2x1ZGUgInRva2VuLmgiCisjaW5jbHVkZSAicGFyc2V0b2suaCIKKyNpbmNsdWRlICJlcnJjb2RlLmgiCisjaW5jbHVkZSAiY29kZS5oIgorI2luY2x1ZGUgInN5bXRhYmxlLmgiCisjaW5jbHVkZSAiYXN0LmgiCisjaW5jbHVkZSAibWFyc2hhbC5oIgorI2luY2x1ZGUgIm9zZGVmcy5oIgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaWZkZWYgSEFWRV9TSUdOQUxfSAorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VuZGlmCisKKyNpZmRlZiBNU19XSU5ET1dTCisjaW5jbHVkZSAibWFsbG9jLmgiIC8qIGZvciBhbGxvY2EgKi8KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MQU5HSU5GT19ICisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNlbmRpZgorCisjaWZkZWYgTVNfV0lORE9XUworI3VuZGVmIEJZVEUKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisjZW5kaWYKKworX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIobmFtZSk7CitfUHlfSURFTlRJRklFUihzdGRpbik7CitfUHlfSURFTlRJRklFUihzdGRvdXQpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitleHRlcm4gd2NoYXJfdCAqUHlfR2V0UGF0aCh2b2lkKTsKKworZXh0ZXJuIGdyYW1tYXIgX1B5UGFyc2VyX0dyYW1tYXI7IC8qIEZyb20gZ3JhbWluaXQuYyAqLworCisvKiBGb3J3YXJkICovCitzdGF0aWMgdm9pZCBpbml0bWFpbihQeUludGVycHJldGVyU3RhdGUgKmludGVycCk7CitzdGF0aWMgaW50IGluaXRmc2VuY29kaW5nKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwKTsKK3N0YXRpYyB2b2lkIGluaXRzaXRlKHZvaWQpOworc3RhdGljIGludCBpbml0c3RkaW8odm9pZCk7CitzdGF0aWMgdm9pZCBpbml0c2lncyh2b2lkKTsKK3N0YXRpYyB2b2lkIGNhbGxfcHlfZXhpdGZ1bmNzKHZvaWQpOworc3RhdGljIHZvaWQgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKHZvaWQpOworc3RhdGljIHZvaWQgY2FsbF9sbF9leGl0ZnVuY3Modm9pZCk7CitleHRlcm4gaW50IF9QeVVuaWNvZGVfSW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX1B5U3RydWN0U2VxdWVuY2VfSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9QeVVuaWNvZGVfRmluaSh2b2lkKTsKK2V4dGVybiBpbnQgX1B5TG9uZ19Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHlMb25nX0Zpbmkodm9pZCk7CitleHRlcm4gaW50IF9QeUZhdWx0aGFuZGxlcl9Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX1B5RmF1bHRoYW5kbGVyX0Zpbmkodm9pZCk7CitleHRlcm4gdm9pZCBfUHlIYXNoX0Zpbmkodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0luaXQodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0Zpbmkodm9pZCk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorZXh0ZXJuIHZvaWQgX1B5R0lMU3RhdGVfSW5pdChQeUludGVycHJldGVyU3RhdGUgKiwgUHlUaHJlYWRTdGF0ZSAqKTsKK2V4dGVybiB2b2lkIF9QeUdJTFN0YXRlX0Zpbmkodm9pZCk7CisjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KKworLyogR2xvYmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZGVjbGFyYXRpb25zIGFyZSBpbiBweWRlYnVnLmggKi8KKy8qIFhYWCAobmNvZ2hsYW4pOiBtb3ZlIHRob3NlIGRlY2xhcmF0aW9ucyB0byBweWxpZmVjeWNsZS5oPyAqLworaW50IFB5X0RlYnVnRmxhZzsgLyogTmVlZGVkIGJ5IHBhcnNlci5jICovCitpbnQgUHlfVmVyYm9zZUZsYWc7IC8qIE5lZWRlZCBieSBpbXBvcnQuYyAqLworaW50IFB5X1F1aWV0RmxhZzsgLyogTmVlZGVkIGJ5IHN5c21vZHVsZS5jICovCitpbnQgUHlfSW50ZXJhY3RpdmVGbGFnOyAvKiBOZWVkZWQgYnkgUHlfRmRJc0ludGVyYWN0aXZlKCkgYmVsb3cgKi8KK2ludCBQeV9JbnNwZWN0RmxhZzsgLyogTmVlZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGV4aXQgYXQgU3lzdGVtRXhpdCAqLworaW50IFB5X09wdGltaXplRmxhZyA9IDA7IC8qIE5lZWRlZCBieSBjb21waWxlLmMgKi8KK2ludCBQeV9Ob1NpdGVGbGFnOyAvKiBTdXBwcmVzcyAnaW1wb3J0IHNpdGUnICovCitpbnQgUHlfQnl0ZXNXYXJuaW5nRmxhZzsgLyogV2FybiBvbiBzdHIoYnl0ZXMpIGFuZCBzdHIoYnVmZmVyKSAqLworaW50IFB5X1VzZUNsYXNzRXhjZXB0aW9uc0ZsYWcgPSAxOyAvKiBOZWVkZWQgYnkgYmx0aW5tb2R1bGUuYzogZGVwcmVjYXRlZCAqLworaW50IFB5X0Zyb3plbkZsYWc7IC8qIE5lZWRlZCBieSBnZXRwYXRoLmMgKi8KK2ludCBQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWc7IC8qIGUuZy4gUFlUSE9OUEFUSCwgUFlUSE9OSE9NRSAqLworaW50IFB5X0RvbnRXcml0ZUJ5dGVjb2RlRmxhZzsgLyogU3VwcHJlc3Mgd3JpdGluZyBieXRlY29kZSBmaWxlcyAoKi5weVtjb10pICovCitpbnQgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSA9IDA7IC8qIGZvciAtcyBhbmQgc2l0ZS5weSAqLworaW50IFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWcgPSAwOyAvKiBVbmJ1ZmZlcmVkIGJpbmFyeSBzdGR7aW4sb3V0LGVycn0gKi8KK2ludCBQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcgPSAwOyAvKiBmb3IgLVIgYW5kIFBZVEhPTkhBU0hTRUVEICovCitpbnQgUHlfSXNvbGF0ZWRGbGFnID0gMDsgLyogZm9yIC1JLCBpc29sYXRlIGZyb20gdXNlcidzIGVudiAqLworCitQeVRocmVhZFN0YXRlICpfUHlfRmluYWxpemluZyA9IE5VTEw7CisKKy8qIEhhY2sgdG8gZm9yY2UgbG9hZGluZyBvZiBvYmplY3QgZmlsZXMgKi8KK2ludCAoKl9QeU9TX215c3RybmljbXBfaGFjaykoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIFB5X3NzaXplX3QpID0gXAorICAgIFB5T1NfbXlzdHJuaWNtcDsgLyogUHl0aG9uL3B5c3RyY21wLm8gKi8KKworLyogUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBhcyBvZiAyLjYKK3NpbmNlIF93YXJuaW5ncyBpcyBidWlsdGluLiAgVGhpcyBBUEkgc2hvdWxkIG5vdCBiZSB1c2VkLiAqLworUHlPYmplY3QgKgorUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUodm9pZCkKK3sKKyAgICByZXR1cm4gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJ3YXJuaW5ncyIpOworfQorCitzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworLyogQVBJIHRvIGFjY2VzcyB0aGUgaW5pdGlhbGl6ZWQgZmxhZyAtLSB1c2VmdWwgZm9yIGVzb3RlcmljIHVzZSAqLworCitpbnQKK1B5X0lzSW5pdGlhbGl6ZWQodm9pZCkKK3sKKyAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7Cit9CisKKy8qIEhlbHBlciB0byBhbGxvdyBhbiBlbWJlZGRpbmcgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlIG5vcm1hbAorICogbWVjaGFuaXNtIHRoYXQgYXR0ZW1wdHMgdG8gZmlndXJlIG91dCBhbiBhcHByb3ByaWF0ZSBJTyBlbmNvZGluZworICovCisKK3N0YXRpYyBjaGFyICpfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzID0gTlVMTDsKKworaW50CitQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgaWYgKFB5X0lzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICAvKiBUaGlzIGlzIHRvbyBsYXRlIHRvIGhhdmUgYW55IGVmZmVjdCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIENhbid0IGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBlcnJvcnMsIGFzIFB5dGhvbiBoYXNuJ3QgYmVlbgorICAgICAqIGluaXRpYWxpc2VkIHlldC4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIsIHRoZSByYXcgbWVtb3J5IGFsbG9jYXRvcnMgYXJlIGluaXRpYWxpc2VkIGFwcHJvcHJpYXRlbHkKKyAgICAgKiBhcyBDIHN0YXRpYyB2YXJpYWJsZXMsIHNvIF9QeU1lbV9SYXdTdHJkdXAgaXMgT0sgZXZlbiB0aG91Z2gKKyAgICAgKiBQeV9Jbml0aWFsaXplIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuCisgICAgICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gX1B5TWVtX1Jhd1N0cmR1cChlbmNvZGluZyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IF9QeU1lbV9SYXdTdHJkdXAoZXJyb3JzKTsKKyAgICAgICAgaWYgKCFfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZykgeworICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBHbG9iYWwgaW5pdGlhbGl6YXRpb25zLiAgQ2FuIGJlIHVuZG9uZSBieSBQeV9GaW5hbGl6ZSgpLiAgRG9uJ3QKKyAgIGNhbGwgdGhpcyB0d2ljZSB3aXRob3V0IGFuIGludGVydmVuaW5nIFB5X0ZpbmFsaXplKCkgY2FsbC4gIFdoZW4KKyAgIGluaXRpYWxpemF0aW9ucyBmYWlsLCBhIGZhdGFsIGVycm9yIGlzIGlzc3VlZCBhbmQgdGhlIGZ1bmN0aW9uIGRvZXMKKyAgIG5vdCByZXR1cm4uICBPbiByZXR1cm4sIHRoZSBmaXJzdCB0aHJlYWQgYW5kIGludGVycHJldGVyIHN0YXRlIGhhdmUKKyAgIGJlZW4gY3JlYXRlZC4KKworICAgTG9ja2luZzogeW91IG11c3QgaG9sZCB0aGUgaW50ZXJwcmV0ZXIgbG9jayB3aGlsZSBjYWxsaW5nIHRoaXMuCisgICAoSWYgdGhlIGxvY2sgaGFzIG5vdCB5ZXQgYmVlbiBpbml0aWFsaXplZCwgdGhhdCdzIGVxdWl2YWxlbnQgdG8KKyAgIGhhdmluZyB0aGUgbG9jaywgYnV0IHlvdSBjYW5ub3QgdXNlIG11bHRpcGxlIHRocmVhZHMuKQorCisqLworCitzdGF0aWMgaW50CithZGRfZmxhZyhpbnQgZmxhZywgY29uc3QgY2hhciAqZW52cykKK3sKKyAgICBpbnQgZW52ID0gYXRvaShlbnZzKTsKKyAgICBpZiAoZmxhZyA8IGVudikKKyAgICAgICAgZmxhZyA9IGVudjsKKyAgICBpZiAoZmxhZyA8IDEpCisgICAgICAgIGZsYWcgPSAxOworICAgIHJldHVybiBmbGFnOworfQorCitzdGF0aWMgY2hhcioKK2dldF9jb2RlY19uYW1lKGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreworICAgIGNoYXIgKm5hbWVfdXRmOCwgKm5hbWVfc3RyOworICAgIFB5T2JqZWN0ICpjb2RlYywgKm5hbWUgPSBOVUxMOworCisgICAgY29kZWMgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOworICAgIGlmICghY29kZWMpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBuYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChjb2RlYywgJlB5SWRfbmFtZSk7CisgICAgUHlfQ0xFQVIoY29kZWMpOworICAgIGlmICghbmFtZSkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIG5hbWVfdXRmOCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobmFtZSk7CisgICAgaWYgKG5hbWVfdXRmOCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIG5hbWVfc3RyID0gX1B5TWVtX1Jhd1N0cmR1cChuYW1lX3V0ZjgpOworICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICBpZiAobmFtZV9zdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG5hbWVfc3RyOworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKGNvZGVjKTsKKyAgICBQeV9YREVDUkVGKG5hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY2hhcioKK2dldF9sb2NhbGVfZW5jb2Rpbmcodm9pZCkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgY2hhciBjb2RlcGFnZVsxMDBdOworICAgIFB5T1Nfc25wcmludGYoY29kZXBhZ2UsIHNpemVvZihjb2RlcGFnZSksICJjcCVkIiwgR2V0QUNQKCkpOworICAgIHJldHVybiBnZXRfY29kZWNfbmFtZShjb2RlcGFnZSk7CisjZWxpZiBkZWZpbmVkKEhBVkVfTEFOR0lORk9fSCkgJiYgZGVmaW5lZChDT0RFU0VUKQorICAgIGNoYXIqIGNvZGVzZXQgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsKKyAgICBpZiAoIWNvZGVzZXQgfHwgY29kZXNldFswXSA9PSAnXDAnKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQ09ERVNFVCBpcyBub3Qgc2V0IG9yIGVtcHR5Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZ2V0X2NvZGVjX25hbWUoY29kZXNldCk7CisjZWxzZQorICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcik7CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK2ltcG9ydF9pbml0KFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwLCBQeU9iamVjdCAqc3lzbW9kKQoreworICAgIFB5T2JqZWN0ICppbXBvcnRsaWI7CisgICAgUHlPYmplY3QgKmltcG1vZDsKKyAgICBQeU9iamVjdCAqc3lzX21vZHVsZXM7CisgICAgUHlPYmplY3QgKnZhbHVlOworCisgICAgLyogSW1wb3J0IF9pbXBvcnRsaWIgdGhyb3VnaCBpdHMgZnJvemVuIHZlcnNpb24sIF9mcm96ZW5faW1wb3J0bGliLiAqLworICAgIGlmIChQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoIl9mcm96ZW5faW1wb3J0bGliIikgPD0gMCkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbXBvcnQgX2Zyb3plbl9pbXBvcnRsaWIiKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlfVmVyYm9zZUZsYWcpIHsKKyAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCJpbXBvcnQgX2Zyb3plbl9pbXBvcnRsaWIgIyBmcm96ZW5cbiIpOworICAgIH0KKyAgICBpbXBvcnRsaWIgPSBQeUltcG9ydF9BZGRNb2R1bGUoIl9mcm96ZW5faW1wb3J0bGliIik7CisgICAgaWYgKGltcG9ydGxpYiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNvdWxkbid0IGdldCBfZnJvemVuX2ltcG9ydGxpYiBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAic3lzLm1vZHVsZXMiKTsKKyAgICB9CisgICAgaW50ZXJwLT5pbXBvcnRsaWIgPSBpbXBvcnRsaWI7CisgICAgUHlfSU5DUkVGKGludGVycC0+aW1wb3J0bGliKTsKKworICAgIC8qIEltcG9ydCB0aGUgX2ltcCBtb2R1bGUgKi8KKyAgICBpbXBtb2QgPSBQeUluaXRfaW1wKCk7CisgICAgaWYgKGltcG1vZCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGltcG9ydCBfaW1wIik7CisgICAgfQorICAgIGVsc2UgaWYgKFB5X1ZlcmJvc2VGbGFnKSB7CisgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiaW1wb3J0IF9pbXAgIyBidWlsdGluXG4iKTsKKyAgICB9CisgICAgc3lzX21vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7CisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKSB7CisgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiaW1wb3J0IHN5cyAjIGJ1aWx0aW5cbiIpOworICAgIH0KKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzX21vZHVsZXMsICJfaW1wIiwgaW1wbW9kKSA8IDApIHsKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3Qgc2F2ZSBfaW1wIHRvIHN5cy5tb2R1bGVzIik7CisgICAgfQorCisgICAgLyogSW5zdGFsbCBpbXBvcnRsaWIgYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGltcG9ydCAqLworICAgIHZhbHVlID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbXBvcnRsaWIsICJfaW5zdGFsbCIsICJPTyIsIHN5c21vZCwgaW1wbW9kKTsKKyAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9QcmludCgpOworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBpbXBvcnRsaWIgaW5zdGFsbCBmYWlsZWQiKTsKKyAgICB9CisgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICBQeV9ERUNSRUYoaW1wbW9kKTsKKworICAgIF9QeUltcG9ydFppcF9Jbml0KCk7Cit9CisKKwordm9pZAorX1B5X0luaXRpYWxpemVFeF9Qcml2YXRlKGludCBpbnN0YWxsX3NpZ3MsIGludCBpbnN0YWxsX2ltcG9ydGxpYikKK3sKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycDsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CisgICAgUHlPYmplY3QgKmJpbW9kLCAqc3lzbW9kLCAqcHN0ZGVycjsKKyAgICBjaGFyICpwOworICAgIGV4dGVybiB2b2lkIF9QeV9SZWFkeVR5cGVzKHZvaWQpOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgaW5pdGlhbGl6ZWQgPSAxOworICAgIF9QeV9GaW5hbGl6aW5nID0gTlVMTDsKKworI2lmIGRlZmluZWQoSEFWRV9MQU5HSU5GT19IKSAmJiBkZWZpbmVkKEhBVkVfU0VUTE9DQUxFKQorICAgIC8qIFNldCB1cCB0aGUgTENfQ1RZUEUgbG9jYWxlLCBzbyB3ZSBjYW4gb2J0YWluCisgICAgICAgdGhlIGxvY2FsZSdzIGNoYXJzZXQgd2l0aG91dCBoYXZpbmcgdG8gc3dpdGNoCisgICAgICAgbG9jYWxlcy4gKi8KKyAgICBzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKyNlbmRpZgorCisgICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05ERUJVRyIpKSAmJiAqcCAhPSAnXDAnKQorICAgICAgICBQeV9EZWJ1Z0ZsYWcgPSBhZGRfZmxhZyhQeV9EZWJ1Z0ZsYWcsIHApOworICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OVkVSQk9TRSIpKSAmJiAqcCAhPSAnXDAnKQorICAgICAgICBQeV9WZXJib3NlRmxhZyA9IGFkZF9mbGFnKFB5X1ZlcmJvc2VGbGFnLCBwKTsKKyAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTk9QVElNSVpFIikpICYmICpwICE9ICdcMCcpCisgICAgICAgIFB5X09wdGltaXplRmxhZyA9IGFkZF9mbGFnKFB5X09wdGltaXplRmxhZywgcCk7CisgICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05ET05UV1JJVEVCWVRFQ09ERSIpKSAmJiAqcCAhPSAnXDAnKQorICAgICAgICBQeV9Eb250V3JpdGVCeXRlY29kZUZsYWcgPSBhZGRfZmxhZyhQeV9Eb250V3JpdGVCeXRlY29kZUZsYWcsIHApOworICAgIC8qIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHRlc3RlZCBmb3IgZXhpc3RlbmNlIGhlcmU7IF9QeVJhbmRvbV9Jbml0IHdpbGwKKyAgICAgICBjaGVjayBpdHMgdmFsdWUgZnVydGhlci4gKi8KKyAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTkhBU0hTRUVEIikpICYmICpwICE9ICdcMCcpCisgICAgICAgIFB5X0hhc2hSYW5kb21pemF0aW9uRmxhZyA9IGFkZF9mbGFnKFB5X0hhc2hSYW5kb21pemF0aW9uRmxhZywgcCk7CisKKyAgICBfUHlSYW5kb21fSW5pdCgpOworCisgICAgaW50ZXJwID0gUHlJbnRlcnByZXRlclN0YXRlX05ldygpOworICAgIGlmIChpbnRlcnAgPT0gTlVMTCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgbWFrZSBmaXJzdCBpbnRlcnByZXRlciIpOworCisgICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9OZXcoaW50ZXJwKTsKKyAgICBpZiAodHN0YXRlID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IG1ha2UgZmlyc3QgdGhyZWFkIik7CisgICAgKHZvaWQpIFB5VGhyZWFkU3RhdGVfU3dhcCh0c3RhdGUpOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICAvKiBXZSBjYW4ndCBjYWxsIF9QeUV2YWxfRmluaVRocmVhZHMoKSBpbiBQeV9GaW5hbGl6ZSBiZWNhdXNlCisgICAgICAgZGVzdHJveWluZyB0aGUgR0lMIG1pZ2h0IGZhaWwgd2hlbiBpdCBpcyBiZWluZyByZWZlcmVuY2VkIGZyb20KKyAgICAgICBhbm90aGVyIHJ1bm5pbmcgdGhyZWFkIChzZWUgaXNzdWUgIzk5MDEpLgorICAgICAgIEluc3RlYWQgd2UgZGVzdHJveSB0aGUgcHJldmlvdXNseSBjcmVhdGVkIEdJTCBoZXJlLCB3aGljaCBlbnN1cmVzCisgICAgICAgdGhhdCB3ZSBjYW4gY2FsbCBQeV9Jbml0aWFsaXplIC8gUHlfRmluYWxpemUgbXVsdGlwbGUgdGltZXMuICovCisgICAgX1B5RXZhbF9GaW5pVGhyZWFkcygpOworCisgICAgLyogQXV0by10aHJlYWQtc3RhdGUgQVBJICovCisgICAgX1B5R0lMU3RhdGVfSW5pdChpbnRlcnAsIHRzdGF0ZSk7CisjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KKworICAgIF9QeV9SZWFkeVR5cGVzKCk7CisKKyAgICBpZiAoIV9QeUZyYW1lX0luaXQoKSkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdCBmcmFtZXMiKTsKKworICAgIGlmICghX1B5TG9uZ19Jbml0KCkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgbG9uZ3MiKTsKKworICAgIGlmICghUHlCeXRlQXJyYXlfSW5pdCgpKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGJ5dGVhcnJheSIpOworCisgICAgaWYgKCFfUHlGbG9hdF9Jbml0KCkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgZmxvYXQiKTsKKworICAgIGludGVycC0+bW9kdWxlcyA9IFB5RGljdF9OZXcoKTsKKyAgICBpZiAoaW50ZXJwLT5tb2R1bGVzID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IG1ha2UgbW9kdWxlcyBkaWN0aW9uYXJ5Iik7CisKKyAgICAvKiBJbml0IFVuaWNvZGUgaW1wbGVtZW50YXRpb247IHJlbGllcyBvbiB0aGUgY29kZWMgcmVnaXN0cnkgKi8KKyAgICBpZiAoX1B5VW5pY29kZV9Jbml0KCkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHVuaWNvZGUiKTsKKyAgICBpZiAoX1B5U3RydWN0U2VxdWVuY2VfSW5pdCgpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzdHJ1Y3RzZXEiKTsKKworICAgIGJpbW9kID0gX1B5QnVpbHRpbl9Jbml0KCk7CisgICAgaWYgKGJpbW9kID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgYnVpbHRpbnMgbW9kdWxlcyIpOworICAgIF9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oYmltb2QsICJidWlsdGlucyIpOworICAgIGludGVycC0+YnVpbHRpbnMgPSBQeU1vZHVsZV9HZXREaWN0KGJpbW9kKTsKKyAgICBpZiAoaW50ZXJwLT5idWlsdGlucyA9PSBOVUxMKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIGJ1aWx0aW5zIGRpY3QiKTsKKyAgICBQeV9JTkNSRUYoaW50ZXJwLT5idWlsdGlucyk7CisKKyAgICAvKiBpbml0aWFsaXplIGJ1aWx0aW4gZXhjZXB0aW9ucyAqLworICAgIF9QeUV4Y19Jbml0KGJpbW9kKTsKKworICAgIHN5c21vZCA9IF9QeVN5c19Jbml0KCk7CisgICAgaWYgKHN5c21vZCA9PSBOVUxMKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHN5cyIpOworICAgIGludGVycC0+c3lzZGljdCA9IFB5TW9kdWxlX0dldERpY3Qoc3lzbW9kKTsKKyAgICBpZiAoaW50ZXJwLT5zeXNkaWN0ID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgc3lzIGRpY3QiKTsKKyAgICBQeV9JTkNSRUYoaW50ZXJwLT5zeXNkaWN0KTsKKyAgICBfUHlJbXBvcnRfRml4dXBCdWlsdGluKHN5c21vZCwgInN5cyIpOworICAgIFB5U3lzX1NldFBhdGgoUHlfR2V0UGF0aCgpKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPnN5c2RpY3QsICJtb2R1bGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnAtPm1vZHVsZXMpOworCisgICAgLyogU2V0IHVwIGEgcHJlbGltaW5hcnkgc3RkZXJyIHByaW50ZXIgdW50aWwgd2UgaGF2ZSBlbm91Z2gKKyAgICAgICBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGlvIG1vZHVsZSBpbiBwbGFjZS4gKi8KKyAgICBwc3RkZXJyID0gUHlGaWxlX05ld1N0ZFByaW50ZXIoZmlsZW5vKHN0ZGVycikpOworICAgIGlmIChwc3RkZXJyID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKKyAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBwc3RkZXJyKTsKKyAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBwc3RkZXJyKTsKKyAgICBQeV9ERUNSRUYocHN0ZGVycik7CisKKyAgICBfUHlJbXBvcnRfSW5pdCgpOworCisgICAgX1B5SW1wb3J0SG9va3NfSW5pdCgpOworCisgICAgLyogSW5pdGlhbGl6ZSBfd2FybmluZ3MuICovCisgICAgX1B5V2FybmluZ3NfSW5pdCgpOworCisgICAgaWYgKCFpbnN0YWxsX2ltcG9ydGxpYikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKF9QeVRpbWVfSW5pdCgpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSB0aW1lIik7CisKKyAgICBpbXBvcnRfaW5pdChpbnRlcnAsIHN5c21vZCk7CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlICovCisgICAgaWYgKF9QeUZhdWx0aGFuZGxlcl9Jbml0KCkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgZmF1bHRoYW5kbGVyIik7CisKKyAgICBpZiAoaW5pdGZzZW5jb2RpbmcoaW50ZXJwKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IHVuYWJsZSB0byBsb2FkIHRoZSBmaWxlIHN5c3RlbSBjb2RlYyIpOworCisgICAgaWYgKGluc3RhbGxfc2lncykKKyAgICAgICAgaW5pdHNpZ3MoKTsgLyogU2lnbmFsIGhhbmRsaW5nIHN0dWZmLCBpbmNsdWRpbmcgaW5pdGludHIoKSAqLworCisgICAgaWYgKF9QeVRyYWNlTWFsbG9jX0luaXQoKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgdHJhY2VtYWxsb2MiKTsKKworICAgIGluaXRtYWluKGludGVycCk7IC8qIE1vZHVsZSBfX21haW5fXyAqLworICAgIGlmIChpbml0c3RkaW8oKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoCisgICAgICAgICAgICAiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzeXMgc3RhbmRhcmQgc3RyZWFtcyIpOworCisgICAgLyogSW5pdGlhbGl6ZSB3YXJuaW5ncy4gKi8KKyAgICBpZiAoUHlTeXNfSGFzV2Fybk9wdGlvbnMoKSkgeworICAgICAgICBQeU9iamVjdCAqd2FybmluZ3NfbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJ3YXJuaW5ncyIpOworICAgICAgICBpZiAod2FybmluZ3NfbW9kdWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJ2ltcG9ydCB3YXJuaW5ncycgZmFpbGVkOyB0cmFjZWJhY2s6XG4iKTsKKyAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIH0KKyAgICAgICAgUHlfWERFQ1JFRih3YXJuaW5nc19tb2R1bGUpOworICAgIH0KKworICAgIGlmICghUHlfTm9TaXRlRmxhZykKKyAgICAgICAgaW5pdHNpdGUoKTsgLyogTW9kdWxlIHNpdGUgKi8KK30KKwordm9pZAorUHlfSW5pdGlhbGl6ZUV4KGludCBpbnN0YWxsX3NpZ3MpCit7CisgICAgX1B5X0luaXRpYWxpemVFeF9Qcml2YXRlKGluc3RhbGxfc2lncywgMSk7Cit9CisKK3ZvaWQKK1B5X0luaXRpYWxpemUodm9pZCkKK3sKKyAgICBQeV9Jbml0aWFsaXplRXgoMSk7Cit9CisKKworI2lmZGVmIENPVU5UX0FMTE9DUworZXh0ZXJuIHZvaWQgZHVtcF9jb3VudHMoRklMRSopOworI2VuZGlmCisKKy8qIEZsdXNoIHN0ZG91dCBhbmQgc3RkZXJyICovCisKK3N0YXRpYyBpbnQKK2ZpbGVfaXNfY2xvc2VkKFB5T2JqZWN0ICpmb2JqKQoreworICAgIGludCByOworICAgIFB5T2JqZWN0ICp0bXAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGZvYmosICJjbG9zZWQiKTsKKyAgICBpZiAodG1wID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHIgPSBQeU9iamVjdF9Jc1RydWUodG1wKTsKKyAgICBQeV9ERUNSRUYodG1wKTsKKyAgICBpZiAociA8IDApCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgcmV0dXJuIHIgPiAwOworfQorCitzdGF0aWMgdm9pZAorZmx1c2hfc3RkX2ZpbGVzKHZvaWQpCit7CisgICAgUHlPYmplY3QgKmZvdXQgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICBQeU9iamVjdCAqZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOworICAgIFB5T2JqZWN0ICp0bXA7CisKKyAgICBpZiAoZm91dCAhPSBOVUxMICYmIGZvdXQgIT0gUHlfTm9uZSAmJiAhZmlsZV9pc19jbG9zZWQoZm91dCkpIHsKKyAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmb3V0LCAmUHlJZF9mbHVzaCwgIiIpOworICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZm91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOworICAgIH0KKworICAgIGlmIChmZXJyICE9IE5VTEwgJiYgZmVyciAhPSBQeV9Ob25lICYmICFmaWxlX2lzX2Nsb3NlZChmZXJyKSkgeworICAgICAgICB0bXAgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGZlcnIsICZQeUlkX2ZsdXNoLCAiIik7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOworICAgIH0KK30KKworLyogVW5kbyB0aGUgZWZmZWN0IG9mIFB5X0luaXRpYWxpemUoKS4KKworICAgQmV3YXJlOiBpZiBtdWx0aXBsZSBpbnRlcnByZXRlciBhbmQvb3IgdGhyZWFkIHN0YXRlcyBleGlzdCwgdGhlc2UKKyAgIGFyZSBub3Qgd2lwZWQgb3V0OyBvbmx5IHRoZSBjdXJyZW50IHRocmVhZCBhbmQgaW50ZXJwcmV0ZXIgc3RhdGUKKyAgIGFyZSBkZWxldGVkLiAgQnV0IHNpbmNlIGV2ZXJ5dGhpbmcgZWxzZSBpcyBkZWxldGVkLCB0aG9zZSBvdGhlcgorICAgaW50ZXJwcmV0ZXIgYW5kIHRocmVhZCBzdGF0ZXMgc2hvdWxkIG5vIGxvbmdlciBiZSB1c2VkLgorCisgICAoWFhYIFdlIHNob3VsZCBkbyBiZXR0ZXIsIGUuZy4gd2lwZSBvdXQgYWxsIGludGVycHJldGVycyBhbmQKKyAgIHRocmVhZHMuKQorCisgICBMb2NraW5nOiBhcyBhYm92ZS4KKworKi8KKwordm9pZAorUHlfRmluYWxpemUodm9pZCkKK3sKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycDsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CisKKyAgICBpZiAoIWluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAgICB3YWl0X2Zvcl90aHJlYWRfc2h1dGRvd24oKTsKKworICAgIC8qIFRoZSBpbnRlcnByZXRlciBpcyBzdGlsbCBlbnRpcmVseSBpbnRhY3QgYXQgdGhpcyBwb2ludCwgYW5kIHRoZQorICAgICAqIGV4aXQgZnVuY3MgbWF5IGJlIHJlbHlpbmcgb24gdGhhdC4gIEluIHBhcnRpY3VsYXIsIGlmIHNvbWUgdGhyZWFkCisgICAgICogb3IgZXhpdCBmdW5jIGlzIHN0aWxsIHdhaXRpbmcgdG8gZG8gYW4gaW1wb3J0LCB0aGUgaW1wb3J0IG1hY2hpbmVyeQorICAgICAqIGV4cGVjdHMgUHlfSXNJbml0aWFsaXplZCgpIHRvIHJldHVybiB0cnVlLiAgU28gZG9uJ3Qgc2F5IHRoZQorICAgICAqIGludGVycHJldGVyIGlzIHVuaW5pdGlhbGl6ZWQgdW50aWwgYWZ0ZXIgdGhlIGV4aXQgZnVuY3MgaGF2ZSBydW4uCisgICAgICogTm90ZSB0aGF0IFRocmVhZGluZy5weSB1c2VzIGFuIGV4aXQgZnVuYyB0byBkbyBhIGpvaW4gb24gYWxsIHRoZQorICAgICAqIHRocmVhZHMgY3JlYXRlZCB0aHJ1IGl0LCBzbyB0aGlzIGFsc28gcHJvdGVjdHMgcGVuZGluZyBpbXBvcnRzIGluCisgICAgICogdGhlIHRocmVhZHMgY3JlYXRlZCB2aWEgVGhyZWFkaW5nLgorICAgICAqLworICAgIGNhbGxfcHlfZXhpdGZ1bmNzKCk7CisKKyAgICAvKiBHZXQgY3VycmVudCB0aHJlYWQgc3RhdGUgYW5kIGludGVycHJldGVyIHBvaW50ZXIgKi8KKyAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIGludGVycCA9IHRzdGF0ZS0+aW50ZXJwOworCisgICAgLyogUmVtYWluaW5nIHRocmVhZHMgKGUuZy4gZGFlbW9uIHRocmVhZHMpIHdpbGwgYXV0b21hdGljYWxseSBleGl0CisgICAgICAgYWZ0ZXIgdGFraW5nIHRoZSBHSUwgKGluIFB5RXZhbF9SZXN0b3JlVGhyZWFkKCkpLiAqLworICAgIF9QeV9GaW5hbGl6aW5nID0gdHN0YXRlOworICAgIGluaXRpYWxpemVkID0gMDsKKworICAgIC8qIEZsdXNoIHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnIgKi8KKyAgICBmbHVzaF9zdGRfZmlsZXMoKTsKKworICAgIC8qIERpc2FibGUgc2lnbmFsIGhhbmRsaW5nICovCisgICAgUHlPU19GaW5pSW50ZXJydXB0cygpOworCisgICAgLyogQ29sbGVjdCBnYXJiYWdlLiAgVGhpcyBtYXkgY2FsbCBmaW5hbGl6ZXJzOyBpdCdzIG5pY2UgdG8gY2FsbCB0aGVzZQorICAgICAqIGJlZm9yZSBhbGwgbW9kdWxlcyBhcmUgZGVzdHJveWVkLgorICAgICAqIFhYWCBJZiBhIF9fZGVsX18gb3Igd2Vha3JlZiBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgaGVyZSwgYW5kIHRyaWVzIHRvCisgICAgICogWFhYIGltcG9ydCBhIG1vZHVsZSwgYmFkIHRoaW5ncyBjYW4gaGFwcGVuLCBiZWNhdXNlIFB5dGhvbiBubworICAgICAqIFhYWCBsb25nZXIgYmVsaWV2ZXMgaXQncyBpbml0aWFsaXplZC4KKyAgICAgKiBYWFggICAgIEZhdGFsIFB5dGhvbiBlcnJvcjogSW50ZXJwcmV0ZXIgbm90IGluaXRpYWxpemVkICh2ZXJzaW9uIG1pc21hdGNoPykKKyAgICAgKiBYWFggaXMgZWFzeSB0byBwcm92b2tlIHRoYXQgd2F5LiAgSSd2ZSBhbHNvIHNlZW4sIGUuZy4sCisgICAgICogWFhYICAgICBFeGNlcHRpb24gZXhjZXB0aW9ucy5JbXBvcnRFcnJvcjogJ05vIG1vZHVsZSBuYW1lZCBzaGEnCisgICAgICogWFhYICAgICAgICAgaW4gPGZ1bmN0aW9uIGNhbGxiYWNrIGF0IDB4MDA4RjU3MTg+IGlnbm9yZWQKKyAgICAgKiBYWFggYnV0IEknbSB1bmNsZWFyIG9uIGV4YWN0bHkgaG93IHRoYXQgb25lIGhhcHBlbnMuICBJbiBhbnkgY2FzZSwKKyAgICAgKiBYWFggSSBoYXZlbid0IHNlZW4gYSByZWFsLWxpZmUgcmVwb3J0IG9mIGVpdGhlciBvZiB0aGVzZS4KKyAgICAgKi8KKyAgICBQeUdDX0NvbGxlY3QoKTsKKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAvKiBXaXRoIENPVU5UX0FMTE9DUywgaXQgaGVscHMgdG8gcnVuIEdDIG11bHRpcGxlIHRpbWVzOgorICAgICAgIGVhY2ggY29sbGVjdGlvbiBtaWdodCByZWxlYXNlIHNvbWUgdHlwZXMgZnJvbSB0aGUgdHlwZQorICAgICAgIGxpc3QsIHNvIHRoZXkgYmVjb21lIGdhcmJhZ2UuICovCisgICAgd2hpbGUgKFB5R0NfQ29sbGVjdCgpID4gMCkKKyAgICAgICAgLyogbm90aGluZyAqLzsKKyNlbmRpZgorICAgIC8qIERlc3Ryb3kgYWxsIG1vZHVsZXMgKi8KKyAgICBQeUltcG9ydF9DbGVhbnVwKCk7CisKKyAgICAvKiBGbHVzaCBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyIChhZ2FpbiwgaW4gY2FzZSBtb3JlIHdhcyBwcmludGVkKSAqLworICAgIGZsdXNoX3N0ZF9maWxlcygpOworCisgICAgLyogQ29sbGVjdCBmaW5hbCBnYXJiYWdlLiAgVGhpcyBkaXNwb3NlcyBvZiBjeWNsZXMgY3JlYXRlZCBieQorICAgICAqIGNsYXNzIGRlZmluaXRpb25zLCBmb3IgZXhhbXBsZS4KKyAgICAgKiBYWFggVGhpcyBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IGNhdXNlZCB0b28gbWFueSBwcm9ibGVtcy4gIElmCisgICAgICogWFhYIGEgX19kZWxfXyBvciB3ZWFrcmVmIGNhbGxiYWNrIHRyaWdnZXJzIGhlcmUsIFB5dGhvbiBjb2RlIGhhcworICAgICAqIFhYWCBhIGhhcmQgdGltZSBydW5uaW5nLCBiZWNhdXNlIGV2ZW4gdGhlIHN5cyBtb2R1bGUgaGFzIGJlZW4KKyAgICAgKiBYWFggY2xlYXJlZCBvdXQgKHN5cy5zdGRvdXQgaXMgZ29uZSwgc3lzLmV4Y2VwdGhvb2sgaXMgZ29uZSwgZXRjKS4KKyAgICAgKiBYWFggT25lIHN5bXB0b20gaXMgYSBzZXF1ZW5jZSBvZiBpbmZvcm1hdGlvbi1mcmVlIG1lc3NhZ2VzCisgICAgICogWFhYIGNvbWluZyBmcm9tIHRocmVhZHMgKGlmIGEgX19kZWxfXyBvciBjYWxsYmFjayBpcyBpbnZva2VkLAorICAgICAqIFhYWCBvdGhlciB0aHJlYWRzIGNhbiBleGVjdXRlIHRvbywgYW5kIGFueSBleGNlcHRpb24gdGhleSBlbmNvdW50ZXIKKyAgICAgKiBYWFggdHJpZ2dlcnMgYSBjb21lZHkgb2YgZXJyb3JzIGFzIHN1YnN5c3RlbSBhZnRlciBzdWJzeXN0ZW0KKyAgICAgKiBYWFggZmFpbHMgdG8gZmluZCB3aGF0IGl0ICpleHBlY3RzKiB0byBmaW5kIGluIHN5cyB0byBoZWxwIHJlcG9ydAorICAgICAqIFhYWCB0aGUgZXhjZXB0aW9uIGFuZCBjb25zZXF1ZW50IHVuZXhwZWN0ZWQgZmFpbHVyZXMpLiAgSSd2ZSBhbHNvCisgICAgICogWFhYIHNlZW4gc2VnZmF1bHRzIHRoZW4sIGFmdGVyIGFkZGluZyBwcmludCBzdGF0ZW1lbnRzIHRvIHRoZQorICAgICAqIFhYWCBQeXRob24gY29kZSBnZXR0aW5nIGNhbGxlZC4KKyAgICAgKi8KKyNpZiAwCisgICAgUHlHQ19Db2xsZWN0KCk7CisjZW5kaWYKKworICAgIC8qIERpc2FibGUgdHJhY2VtYWxsb2MgYWZ0ZXIgYWxsIFB5dGhvbiBvYmplY3RzIGhhdmUgYmVlbiBkZXN0cm95ZWQsCisgICAgICAgc28gaXQgaXMgcG9zc2libGUgdG8gdXNlIHRyYWNlbWFsbG9jIGluIG9iamVjdHMgZGVzdHJ1Y3Rvci4gKi8KKyAgICBfUHlUcmFjZU1hbGxvY19GaW5pKCk7CisKKyAgICAvKiBEZXN0cm95IHRoZSBkYXRhYmFzZSB1c2VkIGJ5IF9QeUltcG9ydF97Rml4dXAsRmluZH1FeHRlbnNpb24gKi8KKyAgICBfUHlJbXBvcnRfRmluaSgpOworCisgICAgLyogQ2xlYW51cCB0eXBlb2JqZWN0LmMncyBpbnRlcm5hbCBjYWNoZXMuICovCisgICAgX1B5VHlwZV9GaW5pKCk7CisKKyAgICAvKiB1bmxvYWQgZmF1bHRoYW5kbGVyIG1vZHVsZSAqLworICAgIF9QeUZhdWx0aGFuZGxlcl9GaW5pKCk7CisKKyAgICAvKiBEZWJ1Z2dpbmcgc3R1ZmYgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICBkdW1wX2NvdW50cyhzdGRvdXQpOworI2VuZGlmCisgICAgLyogZHVtcCBoYXNoIHN0YXRzICovCisgICAgX1B5SGFzaF9GaW5pKCk7CisKKyAgICBfUFlfREVCVUdfUFJJTlRfVE9UQUxfUkVGUygpOworCisjaWZkZWYgUHlfVFJBQ0VfUkVGUworICAgIC8qIERpc3BsYXkgYWxsIG9iamVjdHMgc3RpbGwgYWxpdmUgLS0gdGhpcyBjYW4gaW52b2tlIGFyYml0cmFyeQorICAgICAqIF9fcmVwcl9fIG92ZXJyaWRlcywgc28gcmVxdWlyZXMgYSBtb3N0bHktaW50YWN0IGludGVycHJldGVyLgorICAgICAqIEFsYXMsIGEgbG90IG9mIHN0dWZmIG1heSBzdGlsbCBiZSBhbGl2ZSBub3cgdGhhdCB3aWxsIGJlIGNsZWFuZWQKKyAgICAgKiB1cCBsYXRlci4KKyAgICAgKi8KKyAgICBpZiAoUHlfR0VURU5WKCJQWVRIT05EVU1QUkVGUyIpKQorICAgICAgICBfUHlfUHJpbnRSZWZlcmVuY2VzKHN0ZGVycik7CisjZW5kaWYgLyogUHlfVFJBQ0VfUkVGUyAqLworCisgICAgLyogQ2xlYXIgaW50ZXJwcmV0ZXIgc3RhdGUgYW5kIGFsbCB0aHJlYWQgc3RhdGVzLiAqLworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcihpbnRlcnApOworCisgICAgLyogTm93IHdlIGRlY3JlZiB0aGUgZXhjZXB0aW9uIGNsYXNzZXMuICBBZnRlciB0aGlzIHBvaW50IG5vdGhpbmcKKyAgICAgICBjYW4gcmFpc2UgYW4gZXhjZXB0aW9uLiAgVGhhdCdzIG9rYXksIGJlY2F1c2UgZWFjaCBGaW5pKCkgbWV0aG9kCisgICAgICAgYmVsb3cgaGFzIGJlZW4gY2hlY2tlZCB0byBtYWtlIHN1cmUgbm8gZXhjZXB0aW9ucyBhcmUgZXZlcgorICAgICAgIHJhaXNlZC4KKyAgICAqLworCisgICAgX1B5RXhjX0ZpbmkoKTsKKworICAgIC8qIFN1bmRyeSBmaW5hbGl6ZXJzICovCisgICAgUHlNZXRob2RfRmluaSgpOworICAgIFB5RnJhbWVfRmluaSgpOworICAgIFB5Q0Z1bmN0aW9uX0ZpbmkoKTsKKyAgICBQeVR1cGxlX0ZpbmkoKTsKKyAgICBQeUxpc3RfRmluaSgpOworICAgIFB5U2V0X0ZpbmkoKTsKKyAgICBQeUJ5dGVzX0ZpbmkoKTsKKyAgICBQeUJ5dGVBcnJheV9GaW5pKCk7CisgICAgUHlMb25nX0ZpbmkoKTsKKyAgICBQeUZsb2F0X0ZpbmkoKTsKKyAgICBQeURpY3RfRmluaSgpOworICAgIFB5U2xpY2VfRmluaSgpOworICAgIF9QeUdDX0ZpbmkoKTsKKyAgICBfUHlSYW5kb21fRmluaSgpOworCisgICAgLyogQ2xlYW51cCBVbmljb2RlIGltcGxlbWVudGF0aW9uICovCisgICAgX1B5VW5pY29kZV9GaW5pKCk7CisKKyAgICAvKiByZXNldCBmaWxlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nICovCisgICAgaWYgKCFQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nICYmIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSgoY2hhciopUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyk7CisgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBOVUxMOworICAgIH0KKworICAgIC8qIFhYWCBTdGlsbCBhbGxvY2F0ZWQ6CisgICAgICAgLSB2YXJpb3VzIHN0YXRpYyBhZC1ob2MgcG9pbnRlcnMgdG8gaW50ZXJuZWQgc3RyaW5ncworICAgICAgIC0gaW50IGFuZCBmbG9hdCBmcmVlIGxpc3QgYmxvY2tzCisgICAgICAgLSB3aGF0ZXZlciB2YXJpb3VzIG1vZHVsZXMgYW5kIGxpYnJhcmllcyBhbGxvY2F0ZQorICAgICovCisKKyAgICBQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzKCZfUHlQYXJzZXJfR3JhbW1hcik7CisKKyAgICAvKiBDbGVhbnVwIGF1dG8tdGhyZWFkLXN0YXRlICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBfUHlHSUxTdGF0ZV9GaW5pKCk7CisjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KKworICAgIC8qIERlbGV0ZSBjdXJyZW50IHRocmVhZC4gQWZ0ZXIgdGhpcywgbWFueSBDIEFQSSBjYWxscyBiZWNvbWUgY3Jhc2h5LiAqLworICAgIFB5VGhyZWFkU3RhdGVfU3dhcChOVUxMKTsKKyAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKGludGVycCk7CisKKyNpZmRlZiBQeV9UUkFDRV9SRUZTCisgICAgLyogRGlzcGxheSBhZGRyZXNzZXMgKCYgcmVmY250cykgb2YgYWxsIG9iamVjdHMgc3RpbGwgYWxpdmUuCisgICAgICogQW4gYWRkcmVzcyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSByZXByIG9mIHRoZSBvYmplY3QsIHByaW50ZWQKKyAgICAgKiBhYm92ZSBieSBfUHlfUHJpbnRSZWZlcmVuY2VzLgorICAgICAqLworICAgIGlmIChQeV9HRVRFTlYoIlBZVEhPTkRVTVBSRUZTIikpCisgICAgICAgIF9QeV9QcmludFJlZmVyZW5jZUFkZHJlc3NlcyhzdGRlcnIpOworI2VuZGlmIC8qIFB5X1RSQUNFX1JFRlMgKi8KKyNpZmRlZiBQWU1BTExPQ19ERUJVRworICAgIGlmIChQeV9HRVRFTlYoIlBZVEhPTk1BTExPQ1NUQVRTIikpCisgICAgICAgIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKHN0ZGVycik7CisjZW5kaWYKKworICAgIGNhbGxfbGxfZXhpdGZ1bmNzKCk7Cit9CisKKy8qIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBpbnRlcnByZXRlciBhbmQgdGhyZWFkLCBhbmQgcmV0dXJuIHRoZQorICAgbmV3IHRocmVhZC4gIFRoaXMgcmVxdWlyZXMgdGhhdCBQeV9Jbml0aWFsaXplKCkgaGFzIGJlZW4gY2FsbGVkCisgICBmaXJzdC4KKworICAgVW5zdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uIHlpZWxkcyBhIE5VTEwgcG9pbnRlci4gIE5vdGUgdGhhdCAqbm8qCisgICBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGV2ZW4gaW4gdGhpcyBjYXNlIC0tIHRoZQorICAgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIGhlbGQgaW4gdGhlIHRocmVhZCwgYW5kIHRoZXJlIGlzIG5vCisgICB0aHJlYWQuCisKKyAgIExvY2tpbmc6IGFzIGFib3ZlLgorCisqLworCitQeVRocmVhZFN0YXRlICoKK1B5X05ld0ludGVycHJldGVyKHZvaWQpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCAqc2F2ZV90c3RhdGU7CisgICAgUHlPYmplY3QgKmJpbW9kLCAqc3lzbW9kOworCisgICAgaWYgKCFpbml0aWFsaXplZCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfTmV3SW50ZXJwcmV0ZXI6IGNhbGwgUHlfSW5pdGlhbGl6ZSBmaXJzdCIpOworCisgICAgaW50ZXJwID0gUHlJbnRlcnByZXRlclN0YXRlX05ldygpOworICAgIGlmIChpbnRlcnAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX05ldyhpbnRlcnApOworICAgIGlmICh0c3RhdGUgPT0gTlVMTCkgeworICAgICAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKGludGVycCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNhdmVfdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9Td2FwKHRzdGF0ZSk7CisKKyAgICAvKiBYWFggVGhlIGZvbGxvd2luZyBpcyBsYXggaW4gZXJyb3IgY2hlY2tpbmcgKi8KKworICAgIGludGVycC0+bW9kdWxlcyA9IFB5RGljdF9OZXcoKTsKKworICAgIGJpbW9kID0gX1B5SW1wb3J0X0ZpbmRCdWlsdGluKCJidWlsdGlucyIpOworICAgIGlmIChiaW1vZCAhPSBOVUxMKSB7CisgICAgICAgIGludGVycC0+YnVpbHRpbnMgPSBQeU1vZHVsZV9HZXREaWN0KGJpbW9kKTsKKyAgICAgICAgaWYgKGludGVycC0+YnVpbHRpbnMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICBQeV9JTkNSRUYoaW50ZXJwLT5idWlsdGlucyk7CisgICAgfQorCisgICAgLyogaW5pdGlhbGl6ZSBidWlsdGluIGV4Y2VwdGlvbnMgKi8KKyAgICBfUHlFeGNfSW5pdChiaW1vZCk7CisKKyAgICBzeXNtb2QgPSBfUHlJbXBvcnRfRmluZEJ1aWx0aW4oInN5cyIpOworICAgIGlmIChiaW1vZCAhPSBOVUxMICYmIHN5c21vZCAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpwc3RkZXJyOworCisgICAgICAgIGludGVycC0+c3lzZGljdCA9IFB5TW9kdWxlX0dldERpY3Qoc3lzbW9kKTsKKyAgICAgICAgaWYgKGludGVycC0+c3lzZGljdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgIFB5X0lOQ1JFRihpbnRlcnAtPnN5c2RpY3QpOworICAgICAgICBQeVN5c19TZXRQYXRoKFB5X0dldFBhdGgoKSk7CisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+c3lzZGljdCwgIm1vZHVsZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnAtPm1vZHVsZXMpOworICAgICAgICAvKiBTZXQgdXAgYSBwcmVsaW1pbmFyeSBzdGRlcnIgcHJpbnRlciB1bnRpbCB3ZSBoYXZlIGVub3VnaAorICAgICAgICAgICBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGlvIG1vZHVsZSBpbiBwbGFjZS4gKi8KKyAgICAgICAgcHN0ZGVyciA9IFB5RmlsZV9OZXdTdGRQcmludGVyKGZpbGVubyhzdGRlcnIpKTsKKyAgICAgICAgaWYgKHBzdGRlcnIgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZGVyciwgcHN0ZGVycik7CisgICAgICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOworICAgICAgICBQeV9ERUNSRUYocHN0ZGVycik7CisKKyAgICAgICAgX1B5SW1wb3J0SG9va3NfSW5pdCgpOworCisgICAgICAgIGltcG9ydF9pbml0KGludGVycCwgc3lzbW9kKTsKKworICAgICAgICBpZiAoaW5pdGZzZW5jb2RpbmcoaW50ZXJwKSA8IDApCisgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKworICAgICAgICBpZiAoaW5pdHN0ZGlvKCkgPCAwKQorICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKKyAgICAgICAgICAgICJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHN5cyBzdGFuZGFyZCBzdHJlYW1zIik7CisgICAgICAgIGluaXRtYWluKGludGVycCk7CisgICAgICAgIGlmICghUHlfTm9TaXRlRmxhZykKKyAgICAgICAgICAgIGluaXRzaXRlKCk7CisgICAgfQorCisgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gdHN0YXRlOworCitoYW5kbGVfZXJyb3I6CisgICAgLyogT29wcywgaXQgZGlkbid0IHdvcmsuICBVbmRvIGl0IGFsbC4gKi8KKworICAgIFB5RXJyX1ByaW50RXgoMCk7CisgICAgUHlUaHJlYWRTdGF0ZV9DbGVhcih0c3RhdGUpOworICAgIFB5VGhyZWFkU3RhdGVfU3dhcChzYXZlX3RzdGF0ZSk7CisgICAgUHlUaHJlYWRTdGF0ZV9EZWxldGUodHN0YXRlKTsKKyAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKGludGVycCk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogRGVsZXRlIGFuIGludGVycHJldGVyIGFuZCBpdHMgbGFzdCB0aHJlYWQuICBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlCisgICBnaXZlbiB0aHJlYWQgc3RhdGUgaXMgY3VycmVudCwgdGhhdCB0aGUgdGhyZWFkIGhhcyBubyByZW1haW5pbmcKKyAgIGZyYW1lcywgYW5kIHRoYXQgaXQgaXMgaXRzIGludGVycHJldGVyJ3Mgb25seSByZW1haW5pbmcgdGhyZWFkLgorICAgSXQgaXMgYSBmYXRhbCBlcnJvciB0byB2aW9sYXRlIHRoZXNlIGNvbnN0cmFpbnRzLgorCisgICAoUHlfRmluYWxpemUoKSBkb2Vzbid0IGhhdmUgdGhlc2UgY29uc3RyYWludHMgLS0gaXQgemFwcworICAgZXZlcnl0aGluZywgcmVnYXJkbGVzcy4pCisKKyAgIExvY2tpbmc6IGFzIGFib3ZlLgorCisqLworCit2b2lkCitQeV9FbmRJbnRlcnByZXRlcihQeVRocmVhZFN0YXRlICp0c3RhdGUpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSB0c3RhdGUtPmludGVycDsKKworICAgIGlmICh0c3RhdGUgIT0gUHlUaHJlYWRTdGF0ZV9HRVQoKSkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IHRocmVhZCBpcyBub3QgY3VycmVudCIpOworICAgIGlmICh0c3RhdGUtPmZyYW1lICE9IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiB0aHJlYWQgc3RpbGwgaGFzIGEgZnJhbWUiKTsKKworICAgIHdhaXRfZm9yX3RocmVhZF9zaHV0ZG93bigpOworCisgICAgaWYgKHRzdGF0ZSAhPSBpbnRlcnAtPnRzdGF0ZV9oZWFkIHx8IHRzdGF0ZS0+bmV4dCAhPSBOVUxMKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogbm90IHRoZSBsYXN0IHRocmVhZCIpOworCisgICAgUHlJbXBvcnRfQ2xlYW51cCgpOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcihpbnRlcnApOworICAgIFB5VGhyZWFkU3RhdGVfU3dhcChOVUxMKTsKKyAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKGludGVycCk7Cit9CisKKyNpZmRlZiBNU19XSU5ET1dTCitzdGF0aWMgd2NoYXJfdCAqcHJvZ25hbWUgPSBMInB5dGhvbiI7CisjZWxzZQorc3RhdGljIHdjaGFyX3QgKnByb2duYW1lID0gTCJweXRob24zIjsKKyNlbmRpZgorCit2b2lkCitQeV9TZXRQcm9ncmFtTmFtZSh3Y2hhcl90ICpwbikKK3sKKyAgICBpZiAocG4gJiYgKnBuKQorICAgICAgICBwcm9nbmFtZSA9IHBuOworfQorCit3Y2hhcl90ICoKK1B5X0dldFByb2dyYW1OYW1lKHZvaWQpCit7CisgICAgcmV0dXJuIHByb2duYW1lOworfQorCitzdGF0aWMgd2NoYXJfdCAqZGVmYXVsdF9ob21lID0gTlVMTDsKK3N0YXRpYyB3Y2hhcl90IGVudl9ob21lW01BWFBBVEhMRU4rMV07CisKK3ZvaWQKK1B5X1NldFB5dGhvbkhvbWUod2NoYXJfdCAqaG9tZSkKK3sKKyAgICBkZWZhdWx0X2hvbWUgPSBob21lOworfQorCit3Y2hhcl90ICoKK1B5X0dldFB5dGhvbkhvbWUodm9pZCkKK3sKKyAgICB3Y2hhcl90ICpob21lID0gZGVmYXVsdF9ob21lOworICAgIGlmIChob21lID09IE5VTEwgJiYgIVB5X0lnbm9yZUVudmlyb25tZW50RmxhZykgeworICAgICAgICBjaGFyKiBjaG9tZSA9IFB5X0dFVEVOVigiUFlUSE9OSE9NRSIpOworICAgICAgICBpZiAoY2hvbWUpIHsKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gUHlfQVJSQVlfTEVOR1RIKGVudl9ob21lKTsKKyAgICAgICAgICAgIHNpemVfdCByID0gbWJzdG93Y3MoZW52X2hvbWUsIGNob21lLCBzaXplKTsKKyAgICAgICAgICAgIGlmIChyICE9IChzaXplX3QpLTEgJiYgciA8IHNpemUpCisgICAgICAgICAgICAgICAgaG9tZSA9IGVudl9ob21lOworICAgICAgICB9CisKKyAgICB9CisgICAgcmV0dXJuIGhvbWU7Cit9CisKKy8qIENyZWF0ZSBfX21haW5fXyBtb2R1bGUgKi8KKworc3RhdGljIHZvaWQKK2luaXRtYWluKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwKQoreworICAgIFB5T2JqZWN0ICptLCAqZCwgKmxvYWRlcjsKKyAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGNyZWF0ZSBfX21haW5fXyBtb2R1bGUiKTsKKyAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKKyAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZCwgIl9fYnVpbHRpbnNfXyIpID09IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKmJpbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJidWlsdGlucyIpOworICAgICAgICBpZiAoYmltb2QgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIHJldHJpZXZlIGJ1aWx0aW5zIG1vZHVsZSIpOworICAgICAgICB9CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19idWlsdGluc19fIiwgYmltb2QpIDwgMCkgeworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgX19tYWluX18uX19idWlsdGluc19fIik7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGJpbW9kKTsKKyAgICB9CisgICAgLyogTWFpbiBpcyBhIGxpdHRsZSBzcGVjaWFsIC0gaW1wLmlzX2J1aWx0aW4oIl9fbWFpbl9fIikgd2lsbCByZXR1cm4KKyAgICAgKiBGYWxzZSwgYnV0IEJ1aWx0aW5JbXBvcnRlciBpcyBzdGlsbCB0aGUgbW9zdCBhcHByb3ByaWF0ZSBpbml0aWFsCisgICAgICogc2V0dGluZyBmb3IgaXRzIF9fbG9hZGVyX18gYXR0cmlidXRlLiBBIG1vcmUgc3VpdGFibGUgdmFsdWUgd2lsbAorICAgICAqIGJlIHNldCBpZiBfX21haW5fXyBnZXRzIGZ1cnRoZXIgaW5pdGlhbGl6ZWQgbGF0ZXIgaW4gdGhlIHN0YXJ0dXAKKyAgICAgKiBwcm9jZXNzLgorICAgICAqLworICAgIGxvYWRlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGQsICJfX2xvYWRlcl9fIik7CisgICAgaWYgKGxvYWRlciA9PSBOVUxMIHx8IGxvYWRlciA9PSBQeV9Ob25lKSB7CisgICAgICAgIFB5T2JqZWN0ICpsb2FkZXIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVpbHRpbkltcG9ydGVyIik7CisgICAgICAgIGlmIChsb2FkZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIHJldHJpZXZlIEJ1aWx0aW5JbXBvcnRlciIpOworICAgICAgICB9CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIsIGxvYWRlcikgPCAwKSB7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBfX21haW5fXy5fX2xvYWRlcl9fIik7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGxvYWRlcik7CisgICAgfQorfQorCitzdGF0aWMgaW50Citpbml0ZnNlbmNvZGluZyhQeUludGVycHJldGVyU3RhdGUgKmludGVycCkKK3sKKyAgICBQeU9iamVjdCAqY29kZWM7CisKKyAgICBpZiAoUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9IGdldF9sb2NhbGVfZW5jb2RpbmcoKTsKKyAgICAgICAgaWYgKFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IFVuYWJsZSB0byBnZXQgdGhlIGxvY2FsZSBlbmNvZGluZyIpOworCisgICAgICAgIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAwOworICAgICAgICBpbnRlcnAtPmZzY29kZWNfaW5pdGlhbGl6ZWQgPSAxOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiB0aGUgZW5jb2RpbmcgaXMgbWJjcywgdXRmLTggb3IgYXNjaWkgKi8KKyAgICBjb2RlYyA9IF9QeUNvZGVjX0xvb2t1cChQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKKyAgICBpZiAoIWNvZGVjKSB7CisgICAgICAgIC8qIFN1Y2ggZXJyb3IgY2FuIG9ubHkgb2NjdXJzIGluIGNyaXRpY2FsIHNpdHVhdGlvbnM6IG5vIG1vcmUKKyAgICAgICAgICogbWVtb3J5LCBpbXBvcnQgYSBtb2R1bGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgZmFpbGVkLAorICAgICAgICAgKiBldGMuICovCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUHlfREVDUkVGKGNvZGVjKTsKKyAgICBpbnRlcnAtPmZzY29kZWNfaW5pdGlhbGl6ZWQgPSAxOworICAgIHJldHVybiAwOworfQorCisvKiBJbXBvcnQgdGhlIHNpdGUgbW9kdWxlIChub3QgaW50byBfX21haW5fXyB0aG91Z2gpICovCisKK3N0YXRpYyB2b2lkCitpbml0c2l0ZSh2b2lkKQoreworICAgIFB5T2JqZWN0ICptOworICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInNpdGUiKTsKKyAgICBpZiAobSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGltcG9ydCB0aGUgc2l0ZSBtb2R1bGVcbiIpOworICAgICAgICBQeUVycl9QcmludCgpOworICAgICAgICBQeV9GaW5hbGl6ZSgpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgIH0KK30KKworLyogQ2hlY2sgaWYgYSBmaWxlIGRlc2NyaXB0b3IgaXMgdmFsaWQgb3Igbm90LgorICAgUmV0dXJuIDAgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBpbnZhbGlkLCByZXR1cm4gbm9uLXplcm8gb3RoZXJ3aXNlLiAqLworc3RhdGljIGludAoraXNfdmFsaWRfZmQoaW50IGZkKQoreworICAgIGludCBmZDI7CisgICAgaWYgKGZkIDwgMCB8fCAhX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgX1B5X0JFR0lOX1NVUFBSRVNTX0lQSAorICAgIGZkMiA9IGR1cChmZCk7CisgICAgaWYgKGZkMiA+PSAwKQorICAgICAgICBjbG9zZShmZDIpOworICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICisgICAgcmV0dXJuIGZkMiA+PSAwOworfQorCisvKiByZXR1cm5zIFB5X05vbmUgaWYgdGhlIGZkIGlzIG5vdCB2YWxpZCAqLworc3RhdGljIFB5T2JqZWN0KgorY3JlYXRlX3N0ZGlvKFB5T2JqZWN0KiBpbywKKyAgICBpbnQgZmQsIGludCB3cml0ZV9tb2RlLCBjaGFyKiBuYW1lLAorICAgIGNoYXIqIGVuY29kaW5nLCBjaGFyKiBlcnJvcnMpCit7CisgICAgUHlPYmplY3QgKmJ1ZiA9IE5VTEwsICpzdHJlYW0gPSBOVUxMLCAqdGV4dCA9IE5VTEwsICpyYXcgPSBOVUxMLCAqcmVzOworICAgIGNvbnN0IGNoYXIqIG1vZGU7CisgICAgY29uc3QgY2hhciogbmV3bGluZTsKKyAgICBQeU9iamVjdCAqbGluZV9idWZmZXJpbmc7CisgICAgaW50IGJ1ZmZlcmluZywgaXNhdHR5OworICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOworICAgIF9QeV9JREVOVElGSUVSKGlzYXR0eSk7CisgICAgX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7CisgICAgX1B5X0lERU5USUZJRVIobW9kZSk7CisKKyAgICBpZiAoIWlzX3ZhbGlkX2ZkKGZkKSkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICAvKiBzdGRpbiBpcyBhbHdheXMgb3BlbmVkIGluIGJ1ZmZlcmVkIG1vZGUsIGZpcnN0IGJlY2F1c2UgaXQgc2hvdWxkbid0CisgICAgICAgbWFrZSBhIGRpZmZlcmVuY2UgaW4gY29tbW9uIHVzZSBjYXNlcywgc2Vjb25kIGJlY2F1c2UgVGV4dElPV3JhcHBlcgorICAgICAgIGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIGEgcmVhZDEoKSBtZXRob2Qgd2hpY2ggb25seSBleGlzdHMgb24KKyAgICAgICBidWZmZXJlZCBzdHJlYW1zLgorICAgICovCisgICAgaWYgKFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWcgJiYgd3JpdGVfbW9kZSkKKyAgICAgICAgYnVmZmVyaW5nID0gMDsKKyAgICBlbHNlCisgICAgICAgIGJ1ZmZlcmluZyA9IC0xOworICAgIGlmICh3cml0ZV9tb2RlKQorICAgICAgICBtb2RlID0gIndiIjsKKyAgICBlbHNlCisgICAgICAgIG1vZGUgPSAicmIiOworICAgIGJ1ZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoaW8sICZQeUlkX29wZW4sICJpc2lPT09pIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLCBtb2RlLCBidWZmZXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lLCBQeV9Ob25lLCBQeV9Ob25lLCAwKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAoYnVmZmVyaW5nKSB7CisgICAgICAgIF9QeV9JREVOVElGSUVSKHJhdyk7CisgICAgICAgIHJhdyA9IF9QeU9iamVjdF9HZXRBdHRySWQoYnVmLCAmUHlJZF9yYXcpOworICAgICAgICBpZiAocmF3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmF3ID0gYnVmOworICAgICAgICBQeV9JTkNSRUYocmF3KTsKKyAgICB9CisKKyAgICB0ZXh0ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobmFtZSk7CisgICAgaWYgKHRleHQgPT0gTlVMTCB8fCBfUHlPYmplY3RfU2V0QXR0cklkKHJhdywgJlB5SWRfbmFtZSwgdGV4dCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHJlcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQocmF3LCAmUHlJZF9pc2F0dHksICIiKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaXNhdHR5ID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKGlzYXR0eSA9PSAtMSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoaXNhdHR5IHx8IFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWcpCisgICAgICAgIGxpbmVfYnVmZmVyaW5nID0gUHlfVHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIGxpbmVfYnVmZmVyaW5nID0gUHlfRmFsc2U7CisKKyAgICBQeV9DTEVBUihyYXcpOworICAgIFB5X0NMRUFSKHRleHQpOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIC8qIHN5cy5zdGRpbjogZW5hYmxlIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUsIHRyYW5zbGF0ZSAiXHJcbiIgYW5kICJcciIKKyAgICAgICBuZXdsaW5lcyB0byAiXG4iLgorICAgICAgIHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnI6IHRyYW5zbGF0ZSAiXG4iIHRvICJcclxuIi4gKi8KKyAgICBuZXdsaW5lID0gTlVMTDsKKyNlbHNlCisgICAgLyogc3lzLnN0ZGluOiBzcGxpdCBsaW5lcyBhdCAiXG4iLgorICAgICAgIHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnI6IGRvbid0IHRyYW5zbGF0ZSBuZXdsaW5lcyAodXNlICJcbiIpLiAqLworICAgIG5ld2xpbmUgPSAiXG4iOworI2VuZGlmCisKKyAgICBzdHJlYW0gPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGlvLCAmUHlJZF9UZXh0SU9XcmFwcGVyLCAiT3Nzc08iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBlbmNvZGluZywgZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZSwgbGluZV9idWZmZXJpbmcpOworICAgIFB5X0NMRUFSKGJ1Zik7CisgICAgaWYgKHN0cmVhbSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgaWYgKHdyaXRlX21vZGUpCisgICAgICAgIG1vZGUgPSAidyI7CisgICAgZWxzZQorICAgICAgICBtb2RlID0gInIiOworICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2RlKTsKKyAgICBpZiAoIXRleHQgfHwgX1B5T2JqZWN0X1NldEF0dHJJZChzdHJlYW0sICZQeUlkX21vZGUsIHRleHQpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBQeV9DTEVBUih0ZXh0KTsKKyAgICByZXR1cm4gc3RyZWFtOworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKGJ1Zik7CisgICAgUHlfWERFQ1JFRihzdHJlYW0pOworICAgIFB5X1hERUNSRUYodGV4dCk7CisgICAgUHlfWERFQ1JFRihyYXcpOworCisgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT1NFcnJvcikgJiYgIWlzX3ZhbGlkX2ZkKGZkKSkgeworICAgICAgICAvKiBJc3N1ZSAjMjQ4OTE6IHRoZSBmaWxlIGRlc2NyaXB0b3Igd2FzIGNsb3NlZCBhZnRlciB0aGUgZmlyc3QKKyAgICAgICAgICAgaXNfdmFsaWRfZmQoKSBjaGVjayB3YXMgY2FsbGVkLiBJZ25vcmUgdGhlIE9TRXJyb3IgYW5kIHNldCB0aGUKKyAgICAgICAgICAgc3RyZWFtIHRvIE5vbmUuICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogSW5pdGlhbGl6ZSBzeXMuc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGFuZCBidWlsdGlucy5vcGVuICovCitzdGF0aWMgaW50Citpbml0c3RkaW8odm9pZCkKK3sKKyAgICBQeU9iamVjdCAqaW9tb2QgPSBOVUxMLCAqd3JhcHBlcjsKKyAgICBQeU9iamVjdCAqYmltb2QgPSBOVUxMOworICAgIFB5T2JqZWN0ICptOworICAgIFB5T2JqZWN0ICpzdGQgPSBOVUxMOworICAgIGludCBzdGF0dXMgPSAwLCBmZDsKKyAgICBQeU9iamVjdCAqIGVuY29kaW5nX2F0dHI7CisgICAgY2hhciAqcHl0aG9uaW9lbmNvZGluZyA9IE5VTEwsICplbmNvZGluZywgKmVycm9yczsKKworICAgIC8qIEhhY2sgdG8gYXZvaWQgYSBuYXN0eSByZWN1cnNpb24gaXNzdWUgd2hlbiBQeXRob24gaXMgaW52b2tlZAorICAgICAgIGluIHZlcmJvc2UgbW9kZTogcHJlLWltcG9ydCB0aGUgTGF0aW4tMSBhbmQgVVRGLTggY29kZWNzICovCisgICAgaWYgKChtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJlbmNvZGluZ3MudXRmXzgiKSkgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9ERUNSRUYobSk7CisKKyAgICBpZiAoIShtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJlbmNvZGluZ3MubGF0aW5fMSIpKSkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9ERUNSRUYobSk7CisKKyAgICBpZiAoIShiaW1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiYnVpbHRpbnMiKSkpIHsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoIShpb21vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiaW8iKSkpIHsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgaWYgKCEod3JhcHBlciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoaW9tb2QsICJPcGVuV3JhcHBlciIpKSkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIC8qIFNldCBidWlsdGlucy5vcGVuICovCisgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoYmltb2QsICJvcGVuIiwgd3JhcHBlcikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHdyYXBwZXIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9ERUNSRUYod3JhcHBlcik7CisKKyAgICBlbmNvZGluZyA9IF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nOworICAgIGVycm9ycyA9IF9QeV9TdGFuZGFyZFN0cmVhbUVycm9yczsKKyAgICBpZiAoIWVuY29kaW5nIHx8ICFlcnJvcnMpIHsKKyAgICAgICAgcHl0aG9uaW9lbmNvZGluZyA9IFB5X0dFVEVOVigiUFlUSE9OSU9FTkNPRElORyIpOworICAgICAgICBpZiAocHl0aG9uaW9lbmNvZGluZykgeworICAgICAgICAgICAgY2hhciAqZXJyOworICAgICAgICAgICAgcHl0aG9uaW9lbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAocHl0aG9uaW9lbmNvZGluZyk7CisgICAgICAgICAgICBpZiAocHl0aG9uaW9lbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJyID0gc3RyY2hyKHB5dGhvbmlvZW5jb2RpbmcsICc6Jyk7CisgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgKmVyciA9ICdcMCc7CisgICAgICAgICAgICAgICAgZXJyKys7CisgICAgICAgICAgICAgICAgaWYgKCplcnIgJiYgIWVycm9ycykgeworICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCpweXRob25pb2VuY29kaW5nICYmICFlbmNvZGluZykgeworICAgICAgICAgICAgICAgIGVuY29kaW5nID0gcHl0aG9uaW9lbmNvZGluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWVycm9ycyAmJiAhKHB5dGhvbmlvZW5jb2RpbmcgJiYgKnB5dGhvbmlvZW5jb2RpbmcpKSB7CisgICAgICAgICAgICAvKiBXaGVuIHRoZSBMQ19DVFlQRSBsb2NhbGUgaXMgdGhlIFBPU0lYIGxvY2FsZSAoIkMgbG9jYWxlIiksCisgICAgICAgICAgICAgICBzdGRpbiBhbmQgc3Rkb3V0IHVzZSB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIgYnkKKyAgICAgICAgICAgICAgIGRlZmF1bHQsIGluc3RlYWQgb2YgdGhlIHN0cmljdCBlcnJvciBoYW5kbGVyLiAqLworICAgICAgICAgICAgY2hhciAqbG9jID0gc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChsb2MgIT0gTlVMTCAmJiBzdHJjbXAobG9jLCAiQyIpID09IDApCisgICAgICAgICAgICAgICAgZXJyb3JzID0gInN1cnJvZ2F0ZWVzY2FwZSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBTZXQgc3lzLnN0ZGluICovCisgICAgZmQgPSBmaWxlbm8oc3RkaW4pOworICAgIC8qIFVuZGVyIHNvbWUgY29uZGl0aW9ucyBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgbWF5IG5vdCBiZSBjb25uZWN0ZWQKKyAgICAgKiBhbmQgZmlsZW5vKCkgbWF5IHBvaW50IHRvIGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yLiBGb3IgZXhhbXBsZQorICAgICAqIEdVSSBhcHBzIGRvbid0IGhhdmUgdmFsaWQgc3RhbmRhcmQgc3RyZWFtcyBieSBkZWZhdWx0LgorICAgICAqLworICAgIHN0ZCA9IGNyZWF0ZV9zdGRpbyhpb21vZCwgZmQsIDAsICI8c3RkaW4+IiwgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgaWYgKHN0ZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRpbl9fIiwgc3RkKTsKKyAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4sIHN0ZCk7CisgICAgUHlfREVDUkVGKHN0ZCk7CisKKyAgICAvKiBTZXQgc3lzLnN0ZG91dCAqLworICAgIGZkID0gZmlsZW5vKHN0ZG91dCk7CisgICAgc3RkID0gY3JlYXRlX3N0ZGlvKGlvbW9kLCBmZCwgMSwgIjxzdGRvdXQ+IiwgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgaWYgKHN0ZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRvdXRfXyIsIHN0ZCk7CisgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZG91dCwgc3RkKTsKKyAgICBQeV9ERUNSRUYoc3RkKTsKKworI2lmIDEgLyogRGlzYWJsZSB0aGlzIGlmIHlvdSBoYXZlIHRyb3VibGUgZGVidWdnaW5nIGJvb3RzdHJhcCBzdHVmZiAqLworICAgIC8qIFNldCBzeXMuc3RkZXJyLCByZXBsYWNlcyB0aGUgcHJlbGltaW5hcnkgc3RkZXJyICovCisgICAgZmQgPSBmaWxlbm8oc3RkZXJyKTsKKyAgICBzdGQgPSBjcmVhdGVfc3RkaW8oaW9tb2QsIGZkLCAxLCAiPHN0ZGVycj4iLCBlbmNvZGluZywgImJhY2tzbGFzaHJlcGxhY2UiKTsKKyAgICBpZiAoc3RkID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAvKiBTYW1lIGFzIGhhY2sgYWJvdmUsIHByZS1pbXBvcnQgc3RkZXJyJ3MgY29kZWMgdG8gYXZvaWQgcmVjdXJzaW9uCisgICAgICAgd2hlbiBpbXBvcnQuYyB0cmllcyB0byB3cml0ZSB0byBzdGRlcnIgaW4gdmVyYm9zZSBtb2RlLiAqLworICAgIGVuY29kaW5nX2F0dHIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHN0ZCwgImVuY29kaW5nIik7CisgICAgaWYgKGVuY29kaW5nX2F0dHIgIT0gTlVMTCkgeworICAgICAgICBjb25zdCBjaGFyICogc3RkX2VuY29kaW5nOworICAgICAgICBzdGRfZW5jb2RpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGVuY29kaW5nX2F0dHIpOworICAgICAgICBpZiAoc3RkX2VuY29kaW5nICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlY19pbmZvID0gX1B5Q29kZWNfTG9va3VwKHN0ZF9lbmNvZGluZyk7CisgICAgICAgICAgICBQeV9YREVDUkVGKGNvZGVjX2luZm8pOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZ19hdHRyKTsKKyAgICB9CisgICAgUHlFcnJfQ2xlYXIoKTsgIC8qIE5vdCBhIGZhdGFsIGVycm9yIGlmIGNvZGVjIGlzbid0IGF2YWlsYWJsZSAqLworCisgICAgaWYgKFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHN0ZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdGQpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBpZiAoX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZGVyciwgc3RkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHN0ZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0RFQ1JFRihzdGQpOworI2VuZGlmCisKKyAgICBpZiAoMCkgeworICBlcnJvcjoKKyAgICAgICAgc3RhdHVzID0gLTE7CisgICAgfQorCisgICAgLyogV2Ugd29uJ3QgbmVlZCB0aGVtIGFueW1vcmUuICovCisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CisgICAgfQorICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB5dGhvbmlvZW5jb2RpbmcpOworICAgIFB5X1hERUNSRUYoYmltb2QpOworICAgIFB5X1hERUNSRUYoaW9tb2QpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIHZvaWQKK19QeV9GYXRhbEVycm9yX0R1bXBUcmFjZWJhY2tzKGludCBmZCkKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIC8qIFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCkgd29ya3MgZXZlbiBpZiB0aGUgR0lMIHdhcyByZWxlYXNlZCAqLworICAgIHRzdGF0ZSA9IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCk7CisjZWxzZQorICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisjZW5kaWYKKyAgICBpZiAodHN0YXRlID09IE5VTEwpIHsKKyAgICAgICAgLyogX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKCkgcmVxdWlyZXMgdGhlIHRocmVhZCBzdGF0ZSB0byBkaXNwbGF5CisgICAgICAgICAqIGZyYW1lcyAqLworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKKworICAgIC8qIGRpc3BsYXkgdGhlIGN1cnJlbnQgUHl0aG9uIHN0YWNrICovCisgICAgX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKGZkLCB0c3RhdGUtPmludGVycCwgdHN0YXRlKTsKK30KKworLyogUHJpbnQgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIChpZiBhbiBleGNlcHRpb24gaXMgc2V0KSB3aXRoIGl0cyB0cmFjZWJhY2ssCisgICBvciBkaXNwbGF5IHRoZSBjdXJyZW50IFB5dGhvbiBzdGFjay4KKworICAgRG9uJ3QgY2FsbCBQeUVycl9QcmludEV4KCkgYW5kIHRoZSBleGNlcHQgaG9vaywgYmVjYXVzZSBQeV9GYXRhbEVycm9yKCkgaXMKKyAgIGNhbGxlZCBvbiBjYXRhc3Ryb3BoaWMgY2FzZXMuCisKKyAgIFJldHVybiAxIGlmIHRoZSB0cmFjZWJhY2sgd2FzIGRpc3BsYXllZCwgMCBvdGhlcndpc2UuICovCisKK3N0YXRpYyBpbnQKK19QeV9GYXRhbEVycm9yX1ByaW50RXhjKGludCBmZCkKK3sKKyAgICBQeU9iamVjdCAqZmVyciwgKnJlczsKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdiwgKnRiOworICAgIGludCBoYXNfdGI7CisKKyAgICBpZiAoUHlUaHJlYWRTdGF0ZV9HRVQoKSA9PSBOVUxMKSB7CisgICAgICAgIC8qIFRoZSBHSUwgaXMgcmVsZWFzZWQ6IHRyeWluZyB0byBhY3F1aXJlIGl0IGlzIGxpa2VseSB0byBkZWFkbG9jaywKKyAgICAgICAgICAganVzdCBnaXZlIHVwLiAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdiwgJnRiKTsKKyAgICBpZiAoZXhjZXB0aW9uID09IE5VTEwpIHsKKyAgICAgICAgLyogTm8gY3VycmVudCBleGNlcHRpb24gKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOworICAgIGlmIChmZXJyID09IE5VTEwgfHwgZmVyciA9PSBQeV9Ob25lKSB7CisgICAgICAgIC8qIHN5cy5zdGRlcnIgaXMgbm90IHNldCB5ZXQgb3Igc2V0IHRvIE5vbmUsCisgICAgICAgICAgIG5vIG5lZWQgdG8gdHJ5IHRvIGRpc3BsYXkgdGhlIGV4Y2VwdGlvbiAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJmV4Y2VwdGlvbiwgJnYsICZ0Yik7CisgICAgaWYgKHRiID09IE5VTEwpIHsKKyAgICAgICAgdGIgPSBQeV9Ob25lOworICAgICAgICBQeV9JTkNSRUYodGIpOworICAgIH0KKyAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodiwgdGIpOworICAgIGlmIChleGNlcHRpb24gPT0gTlVMTCkgeworICAgICAgICAvKiBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oKSBmYWlsZWQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaGFzX3RiID0gKHRiICE9IFB5X05vbmUpOworICAgIFB5RXJyX0Rpc3BsYXkoZXhjZXB0aW9uLCB2LCB0Yik7CisgICAgUHlfWERFQ1JFRihleGNlcHRpb24pOworICAgIFB5X1hERUNSRUYodik7CisgICAgUHlfWERFQ1JFRih0Yik7CisKKyAgICAvKiBzeXMuc3RkZXJyIG1heSBiZSBidWZmZXJlZDogY2FsbCBzeXMuc3RkZXJyLmZsdXNoKCkgKi8KKyAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGZlcnIsICZQeUlkX2ZsdXNoLCAiIik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGVsc2UKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisKKyAgICByZXR1cm4gaGFzX3RiOworfQorCisvKiBQcmludCBmYXRhbCBlcnJvciBtZXNzYWdlIGFuZCBhYm9ydCAqLworCit2b2lkCitQeV9GYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICBjb25zdCBpbnQgZmQgPSBmaWxlbm8oc3RkZXJyKTsKKyAgICBzdGF0aWMgaW50IHJlZW50cmFudCA9IDA7CisjaWZkZWYgTVNfV0lORE9XUworICAgIHNpemVfdCBsZW47CisgICAgV0NIQVIqIGJ1ZmZlcjsKKyAgICBzaXplX3QgaTsKKyNlbmRpZgorCisgICAgaWYgKHJlZW50cmFudCkgeworICAgICAgICAvKiBQeV9GYXRhbEVycm9yKCkgY2F1c2VkIGEgc2Vjb25kIGZhdGFsIGVycm9yLgorICAgICAgICAgICBFeGFtcGxlOiBmbHVzaF9zdGRfZmlsZXMoKSByYWlzZXMgYSByZWN1cnNpb24gZXJyb3IuICovCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcmVlbnRyYW50ID0gMTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAlc1xuIiwgbXNnKTsKKyAgICBmZmx1c2goc3RkZXJyKTsgLyogaXQgaGVscHMgaW4gV2luZG93cyBkZWJ1ZyBidWlsZCAqLworCisgICAgLyogUHJpbnQgdGhlIGV4Y2VwdGlvbiAoaWYgYW4gZXhjZXB0aW9uIGlzIHNldCkgd2l0aCBpdHMgdHJhY2ViYWNrLAorICAgICAqIG9yIGRpc3BsYXkgdGhlIGN1cnJlbnQgUHl0aG9uIHN0YWNrLiAqLworICAgIGlmICghX1B5X0ZhdGFsRXJyb3JfUHJpbnRFeGMoZmQpKQorICAgICAgICBfUHlfRmF0YWxFcnJvcl9EdW1wVHJhY2ViYWNrcyhmZCk7CisKKyAgICAvKiBUaGUgbWFpbiBwdXJwb3NlIG9mIGZhdWx0aGFuZGxlciBpcyB0byBkaXNwbGF5IHRoZSB0cmFjZWJhY2suIFdlIGFscmVhZHkKKyAgICAgKiBkaWQgb3VyIGJlc3QgdG8gZGlzcGxheSBpdC4gU28gZmF1bHRoYW5kbGVyIGNhbiBub3cgYmUgZGlzYWJsZWQuCisgICAgICogKERvbid0IHRyaWdnZXIgaXQgb24gYWJvcnQoKS4pICovCisgICAgX1B5RmF1bHRoYW5kbGVyX0ZpbmkoKTsKKworICAgIC8qIENoZWNrIGlmIHRoZSBjdXJyZW50IFB5dGhvbiB0aHJlYWQgaG9sZCB0aGUgR0lMICovCisgICAgaWYgKFB5VGhyZWFkU3RhdGVfR0VUKCkgIT0gTlVMTCkgeworICAgICAgICAvKiBGbHVzaCBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyICovCisgICAgICAgIGZsdXNoX3N0ZF9maWxlcygpOworICAgIH0KKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBsZW4gPSBzdHJsZW4obXNnKTsKKworICAgIC8qIENvbnZlcnQgdGhlIG1lc3NhZ2UgdG8gd2NoYXJfdC4gVGhpcyB1c2VzIGEgc2ltcGxlIG9uZS10by1vbmUKKyAgICBjb252ZXJzaW9uLCBhc3N1bWluZyB0aGF0IHRoZSB0aGlzIGVycm9yIG1lc3NhZ2UgYWN0dWFsbHkgdXNlcyBBU0NJSQorICAgIG9ubHkuIElmIHRoaXMgY2Vhc2VzIHRvIGJlIHRydWUsIHdlIHdpbGwgaGF2ZSB0byBjb252ZXJ0LiAqLworICAgIGJ1ZmZlciA9IGFsbG9jYSggKGxlbisxKSAqIChzaXplb2YgKmJ1ZmZlcikpOworICAgIGZvciggaT0wOyBpPD1sZW47ICsraSkKKyAgICAgICAgYnVmZmVyW2ldID0gbXNnW2ldOworICAgIE91dHB1dERlYnVnU3RyaW5nVyhMIkZhdGFsIFB5dGhvbiBlcnJvcjogIik7CisgICAgT3V0cHV0RGVidWdTdHJpbmdXKGJ1ZmZlcik7CisgICAgT3V0cHV0RGVidWdTdHJpbmdXKEwiXG4iKTsKKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCisKK2V4aXQ6CisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiBkZWZpbmVkKF9ERUJVRykKKyAgICBEZWJ1Z0JyZWFrKCk7CisjZW5kaWYKKyAgICBhYm9ydCgpOworfQorCisvKiBDbGVhbiB1cCBhbmQgZXhpdCAqLworCisjaWZkZWYgV0lUSF9USFJFQUQKKyNpbmNsdWRlICJweXRocmVhZC5oIgorI2VuZGlmCisKK3N0YXRpYyB2b2lkICgqcHlleGl0ZnVuYykodm9pZCkgPSBOVUxMOworLyogRm9yIHRoZSBhdGV4aXQgbW9kdWxlLiAqLwordm9pZCBfUHlfUHlBdEV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKQoreworICAgIHB5ZXhpdGZ1bmMgPSBmdW5jOworfQorCitzdGF0aWMgdm9pZAorY2FsbF9weV9leGl0ZnVuY3Modm9pZCkKK3sKKyAgICBpZiAocHlleGl0ZnVuYyA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAoKnB5ZXhpdGZ1bmMpKCk7CisgICAgUHlFcnJfQ2xlYXIoKTsKK30KKworLyogV2FpdCB1bnRpbCB0aHJlYWRpbmcuX3NodXRkb3duIGNvbXBsZXRlcywgcHJvdmlkZWQKKyAgIHRoZSB0aHJlYWRpbmcgbW9kdWxlIHdhcyBpbXBvcnRlZCBpbiB0aGUgZmlyc3QgcGxhY2UuCisgICBUaGUgc2h1dGRvd24gcm91dGluZSB3aWxsIHdhaXQgdW50aWwgYWxsIG5vbi1kYWVtb24KKyAgICJ0aHJlYWRpbmciIHRocmVhZHMgaGF2ZSBjb21wbGV0ZWQuICovCitzdGF0aWMgdm9pZAord2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKHZvaWQpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBfUHlfSURFTlRJRklFUihfc2h1dGRvd24pOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeU9iamVjdCAqdGhyZWFkaW5nID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcodHN0YXRlLT5pbnRlcnAtPm1vZHVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aHJlYWRpbmciKTsKKyAgICBpZiAodGhyZWFkaW5nID09IE5VTEwpIHsKKyAgICAgICAgLyogdGhyZWFkaW5nIG5vdCBpbXBvcnRlZCAqLworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodGhyZWFkaW5nLCAmUHlJZF9fc2h1dGRvd24sICIiKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHRocmVhZGluZyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgICAgUHlfREVDUkVGKHRocmVhZGluZyk7CisjZW5kaWYKK30KKworI2RlZmluZSBORVhJVEZVTkNTIDMyCitzdGF0aWMgdm9pZCAoKmV4aXRmdW5jc1tORVhJVEZVTkNTXSkodm9pZCk7CitzdGF0aWMgaW50IG5leGl0ZnVuY3MgPSAwOworCitpbnQgUHlfQXRFeGl0KHZvaWQgKCpmdW5jKSh2b2lkKSkKK3sKKyAgICBpZiAobmV4aXRmdW5jcyA+PSBORVhJVEZVTkNTKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZXhpdGZ1bmNzW25leGl0ZnVuY3MrK10gPSBmdW5jOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2FsbF9sbF9leGl0ZnVuY3Modm9pZCkKK3sKKyAgICB3aGlsZSAobmV4aXRmdW5jcyA+IDApCisgICAgICAgICgqZXhpdGZ1bmNzWy0tbmV4aXRmdW5jc10pKCk7CisKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBmZmx1c2goc3RkZXJyKTsKK30KKwordm9pZAorUHlfRXhpdChpbnQgc3RzKQoreworICAgIFB5X0ZpbmFsaXplKCk7CisKKyAgICBleGl0KHN0cyk7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0c2lncyh2b2lkKQoreworI2lmZGVmIFNJR1BJUEUKKyAgICBQeU9TX3NldHNpZyhTSUdQSVBFLCBTSUdfSUdOKTsKKyNlbmRpZgorI2lmZGVmIFNJR1hGWgorICAgIFB5T1Nfc2V0c2lnKFNJR1hGWiwgU0lHX0lHTik7CisjZW5kaWYKKyNpZmRlZiBTSUdYRlNaCisgICAgUHlPU19zZXRzaWcoU0lHWEZTWiwgU0lHX0lHTik7CisjZW5kaWYKKyAgICBQeU9TX0luaXRJbnRlcnJ1cHRzKCk7IC8qIE1heSBpbXBseSBpbml0c2lnbmFsKCkgKi8KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbXBvcnQgc2lnbmFsIik7CisgICAgfQorfQorCisKKy8qIFJlc3RvcmUgc2lnbmFscyB0aGF0IHRoZSBpbnRlcnByZXRlciBoYXMgY2FsbGVkIFNJR19JR04gb24gdG8gU0lHX0RGTC4KKyAqCisgKiBBbGwgb2YgdGhlIGNvZGUgaW4gdGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgdXNlIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9ucywKKyAqIGxpc3RlZCBhdCBgbWFuIDcgc2lnbmFsYCBvcgorICogaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwuCisgKi8KK3ZvaWQKK19QeV9SZXN0b3JlU2lnbmFscyh2b2lkKQoreworI2lmZGVmIFNJR1BJUEUKKyAgICBQeU9TX3NldHNpZyhTSUdQSVBFLCBTSUdfREZMKTsKKyNlbmRpZgorI2lmZGVmIFNJR1hGWgorICAgIFB5T1Nfc2V0c2lnKFNJR1hGWiwgU0lHX0RGTCk7CisjZW5kaWYKKyNpZmRlZiBTSUdYRlNaCisgICAgUHlPU19zZXRzaWcoU0lHWEZTWiwgU0lHX0RGTCk7CisjZW5kaWYKK30KKworCisvKgorICogVGhlIGZpbGUgZGVzY3JpcHRvciBmZCBpcyBjb25zaWRlcmVkIGBgaW50ZXJhY3RpdmUnJyBpZiBlaXRoZXIKKyAqICAgYSkgaXNhdHR5KGZkKSBpcyBUUlVFLCBvcgorICogICBiKSB0aGUgLWkgZmxhZyB3YXMgZ2l2ZW4sIGFuZCB0aGUgZmlsZW5hbWUgYXNzb2NpYXRlZCB3aXRoCisgKiAgICAgIHRoZSBkZXNjcmlwdG9yIGlzIE5VTEwgb3IgIjxzdGRpbj4iIG9yICI/Pz8iLgorICovCitpbnQKK1B5X0ZkSXNJbnRlcmFjdGl2ZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgaWYgKGlzYXR0eSgoaW50KWZpbGVubyhmcCkpKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoIVB5X0ludGVyYWN0aXZlRmxhZykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIChmaWxlbmFtZSA9PSBOVUxMKSB8fAorICAgICAgICAgICAoc3RyY21wKGZpbGVuYW1lLCAiPHN0ZGluPiIpID09IDApIHx8CisgICAgICAgICAgIChzdHJjbXAoZmlsZW5hbWUsICI/Pz8iKSA9PSAwKTsKK30KKworCisvKiBXcmFwcGVycyBhcm91bmQgc2lnYWN0aW9uKCkgb3Igc2lnbmFsKCkuICovCisKK1B5T1Nfc2lnaGFuZGxlcl90CitQeU9TX2dldHNpZyhpbnQgc2lnKQoreworI2lmZGVmIEhBVkVfU0lHQUNUSU9OCisgICAgc3RydWN0IHNpZ2FjdGlvbiBjb250ZXh0OworICAgIGlmIChzaWdhY3Rpb24oc2lnLCBOVUxMLCAmY29udGV4dCkgPT0gLTEpCisgICAgICAgIHJldHVybiBTSUdfRVJSOworICAgIHJldHVybiBjb250ZXh0LnNhX2hhbmRsZXI7CisjZWxzZQorICAgIFB5T1Nfc2lnaGFuZGxlcl90IGhhbmRsZXI7CisvKiBTcGVjaWFsIHNpZ25hbCBoYW5kbGluZyBmb3IgdGhlIHNlY3VyZSBDUlQgaW4gVmlzdWFsIFN0dWRpbyAyMDA1ICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTQwMAorICAgIHN3aXRjaCAoc2lnKSB7CisgICAgLyogT25seSB0aGVzZSBzaWduYWxzIGFyZSB2YWxpZCAqLworICAgIGNhc2UgU0lHSU5UOgorICAgIGNhc2UgU0lHSUxMOgorICAgIGNhc2UgU0lHRlBFOgorICAgIGNhc2UgU0lHU0VHVjoKKyAgICBjYXNlIFNJR1RFUk06CisgICAgY2FzZSBTSUdCUkVBSzoKKyAgICBjYXNlIFNJR0FCUlQ6CisgICAgICAgIGJyZWFrOworICAgIC8qIERvbid0IGNhbGwgc2lnbmFsKCkgd2l0aCBvdGhlciB2YWx1ZXMgb3IgaXQgd2lsbCBhc3NlcnQgKi8KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU0lHX0VSUjsKKyAgICB9CisjZW5kaWYgLyogX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMCAqLworICAgIGhhbmRsZXIgPSBzaWduYWwoc2lnLCBTSUdfSUdOKTsKKyAgICBpZiAoaGFuZGxlciAhPSBTSUdfRVJSKQorICAgICAgICBzaWduYWwoc2lnLCBoYW5kbGVyKTsKKyAgICByZXR1cm4gaGFuZGxlcjsKKyNlbmRpZgorfQorCisvKgorICogQWxsIG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IHVzZSBhc3luYy1zaWduYWwtc2FmZSBmdW5jdGlvbnMsCisgKiBsaXN0ZWQgYXQgYG1hbiA3IHNpZ25hbGAgb3IKKyAqIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sLgorICovCitQeU9TX3NpZ2hhbmRsZXJfdAorUHlPU19zZXRzaWcoaW50IHNpZywgUHlPU19zaWdoYW5kbGVyX3QgaGFuZGxlcikKK3sKKyNpZmRlZiBIQVZFX1NJR0FDVElPTgorICAgIC8qIFNvbWUgY29kZSBpbiBNb2R1bGVzL3NpZ25hbG1vZHVsZS5jIGRlcGVuZHMgb24gc2lnYWN0aW9uKCkgYmVpbmcKKyAgICAgKiB1c2VkIGhlcmUgaWYgSEFWRV9TSUdBQ1RJT04gaXMgZGVmaW5lZC4gIEZpeCB0aGF0IGlmIHRoaXMgY29kZQorICAgICAqIGNoYW5nZXMgdG8gaW52YWxpZGF0ZSB0aGF0IGFzc3VtcHRpb24uCisgICAgICovCisgICAgc3RydWN0IHNpZ2FjdGlvbiBjb250ZXh0LCBvY29udGV4dDsKKyAgICBjb250ZXh0LnNhX2hhbmRsZXIgPSBoYW5kbGVyOworICAgIHNpZ2VtcHR5c2V0KCZjb250ZXh0LnNhX21hc2spOworICAgIGNvbnRleHQuc2FfZmxhZ3MgPSAwOworICAgIGlmIChzaWdhY3Rpb24oc2lnLCAmY29udGV4dCwgJm9jb250ZXh0KSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIFNJR19FUlI7CisgICAgcmV0dXJuIG9jb250ZXh0LnNhX2hhbmRsZXI7CisjZWxzZQorICAgIFB5T1Nfc2lnaGFuZGxlcl90IG9sZGhhbmRsZXI7CisgICAgb2xkaGFuZGxlciA9IHNpZ25hbChzaWcsIGhhbmRsZXIpOworI2lmZGVmIEhBVkVfU0lHSU5URVJSVVBUCisgICAgc2lnaW50ZXJydXB0KHNpZywgMSk7CisjZW5kaWYKKyAgICByZXR1cm4gb2xkaGFuZGxlcjsKKyNlbmRpZgorfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5c3RhdGUuYyBiL1B5dGhvbi9weXN0YXRlLmMKaW5kZXggMmFjMmZkNS4uNmQxYzZkMCAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5c3RhdGUuYworKysgYi9QeXRob24vcHlzdGF0ZS5jCkBAIC0zLDYgKzMsMTQgQEAKIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCisjZGVmaW5lIEdFVF9UU1RBVEUoKSBcCisgICAgKChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkpCisjZGVmaW5lIFNFVF9UU1RBVEUodmFsdWUpIFwKKyAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQsIChQeV91aW50cHRyX3QpKHZhbHVlKSkKKyNkZWZpbmUgR0VUX0lOVEVSUF9TVEFURSgpIFwKKyAgICAoR0VUX1RTVEFURSgpLT5pbnRlcnApCisKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENBVVRJT04KIApAQCAtNDgsNyArNTYsNyBAQAogCiAvKiBBc3N1bWluZyB0aGUgY3VycmVudCB0aHJlYWQgaG9sZHMgdGhlIEdJTCwgdGhpcyBpcyB0aGUKICAgIFB5VGhyZWFkU3RhdGUgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4gKi8KLV9QeV9hdG9taWNfYWRkcmVzcyBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50ID0ge05VTEx9OworX1B5X2F0b21pY19hZGRyZXNzIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgPSB7MH07CiBQeVRocmVhZEZyYW1lR2V0dGVyIF9QeVRocmVhZFN0YXRlX0dldEZyYW1lID0gTlVMTDsKIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yMTIsNiArMjIwLDkgQEAKICAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUgPSBOVUxMOwogICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhID0gTlVMTDsKIAorICAgICAgICB0c3RhdGUtPmNvcm91dGluZV93cmFwcGVyID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5pbl9jb3JvdXRpbmVfd3JhcHBlciA9IDA7CisKICAgICAgICAgaWYgKGluaXQpCiAgICAgICAgICAgICBfUHlUaHJlYWRTdGF0ZV9Jbml0KHRzdGF0ZSk7CiAKQEAgLTI1MSw4ICsyNjIsMTEgQEAKIFB5U3RhdGVfRmluZE1vZHVsZShzdHJ1Y3QgUHlNb2R1bGVEZWYqIG1vZHVsZSkKIHsKICAgICBQeV9zc2l6ZV90IGluZGV4ID0gbW9kdWxlLT5tX2Jhc2UubV9pbmRleDsKLSAgICBQeUludGVycHJldGVyU3RhdGUgKnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqc3RhdGUgPSBHRVRfSU5URVJQX1NUQVRFKCk7CiAgICAgUHlPYmplY3QgKnJlczsKKyAgICBpZiAobW9kdWxlLT5tX3Nsb3RzKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpZiAoaW5kZXggPT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4ID09IE5VTEwpCkBAIC0yNjYsNyArMjgwLDEzIEBACiBpbnQKIF9QeVN0YXRlX0FkZE1vZHVsZShQeU9iamVjdCogbW9kdWxlLCBzdHJ1Y3QgUHlNb2R1bGVEZWYqIGRlZikKIHsKLSAgICBQeUludGVycHJldGVyU3RhdGUgKnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqc3RhdGU7CisgICAgaWYgKGRlZi0+bV9zbG90cykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHlTdGF0ZV9BZGRNb2R1bGUgY2FsbGVkIG9uIG1vZHVsZSB3aXRoIHNsb3RzIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc3RhdGUgPSBHRVRfSU5URVJQX1NUQVRFKCk7CiAgICAgaWYgKCFkZWYpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoIXN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KSB7CkBAIC0yODYsNyArMzA2LDcgQEAKIFB5U3RhdGVfQWRkTW9kdWxlKFB5T2JqZWN0KiBtb2R1bGUsIHN0cnVjdCBQeU1vZHVsZURlZiogZGVmKQogewogICAgIFB5X3NzaXplX3QgaW5kZXg7Ci0gICAgUHlJbnRlcnByZXRlclN0YXRlICpzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKKyAgICBQeUludGVycHJldGVyU3RhdGUgKnN0YXRlID0gR0VUX0lOVEVSUF9TVEFURSgpOwogICAgIGlmICghZGVmKSB7CiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5U3RhdGVfQWRkTW9kdWxlOiBNb2R1bGUgRGVmaW5pdGlvbiBpcyBOVUxMIik7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTMwNiw4ICszMjYsMTQgQEAKIGludAogUHlTdGF0ZV9SZW1vdmVNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKiBkZWYpCiB7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICpzdGF0ZTsKICAgICBQeV9zc2l6ZV90IGluZGV4ID0gZGVmLT5tX2Jhc2UubV9pbmRleDsKLSAgICBQeUludGVycHJldGVyU3RhdGUgKnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIGlmIChkZWYtPm1fc2xvdHMpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5U3RhdGVfUmVtb3ZlTW9kdWxlIGNhbGxlZCBvbiBtb2R1bGUgd2l0aCBzbG90cyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHN0YXRlID0gR0VUX0lOVEVSUF9TVEFURSgpOwogICAgIGlmIChpbmRleCA9PSAwKSB7CiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5U3RhdGVfUmVtb3ZlTW9kdWxlOiBNb2R1bGUgaW5kZXggaW52YWxpZC4iKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzI3LDcgKzM1Myw3IEBACiB2b2lkCiBfUHlTdGF0ZV9DbGVhck1vZHVsZXModm9pZCkKIHsKLSAgICBQeUludGVycHJldGVyU3RhdGUgKnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqc3RhdGUgPSBHRVRfSU5URVJQX1NUQVRFKCk7CiAgICAgaWYgKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KSB7CiAgICAgICAgIFB5X3NzaXplX3QgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9HRVRfU0laRShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCk7IGkrKykgewpAQCAtMzcyLDYgKzM5OCw4IEBACiAgICAgdHN0YXRlLT5jX3RyYWNlZnVuYyA9IE5VTEw7CiAgICAgUHlfQ0xFQVIodHN0YXRlLT5jX3Byb2ZpbGVvYmopOwogICAgIFB5X0NMRUFSKHRzdGF0ZS0+Y190cmFjZW9iaik7CisKKyAgICBQeV9DTEVBUih0c3RhdGUtPmNvcm91dGluZV93cmFwcGVyKTsKIH0KIAogCkBAIC00MDMsNyArNDMxLDcgQEAKIHZvaWQKIFB5VGhyZWFkU3RhdGVfRGVsZXRlKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIHsKLSAgICBpZiAodHN0YXRlID09IF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KSkKKyAgICBpZiAodHN0YXRlID09IEdFVF9UU1RBVEUoKSkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IHRzdGF0ZSBpcyBzdGlsbCBjdXJyZW50Iik7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoYXV0b0ludGVycHJldGVyU3RhdGUgJiYgUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KSA9PSB0c3RhdGUpCkBAIC00MTcsMTIgKzQ0NSwxMSBAQAogdm9pZAogUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSopX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoCi0gICAgICAgICZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBHRVRfVFNUQVRFKCk7CiAgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudDogbm8gY3VycmVudCB0c3RhdGUiKTsKLSAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQsIE5VTEwpOworICAgIFNFVF9UU1RBVEUoTlVMTCk7CiAgICAgaWYgKGF1dG9JbnRlcnByZXRlclN0YXRlICYmIFB5VGhyZWFkX2dldF9rZXlfdmFsdWUoYXV0b1RMU2tleSkgPT0gdHN0YXRlKQogICAgICAgICBQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpOwogICAgIHRzdGF0ZV9kZWxldGVfY29tbW9uKHRzdGF0ZSk7CkBAIC00NjksMTAgKzQ5NiwxNiBAQAogCiAKIFB5VGhyZWFkU3RhdGUgKgorX1B5VGhyZWFkU3RhdGVfVW5jaGVja2VkR2V0KHZvaWQpCit7CisgICAgcmV0dXJuIEdFVF9UU1RBVEUoKTsKK30KKworCitQeVRocmVhZFN0YXRlICoKIFB5VGhyZWFkU3RhdGVfR2V0KHZvaWQpCiB7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAotICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gR0VUX1RTVEFURSgpOwogICAgIGlmICh0c3RhdGUgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlUaHJlYWRTdGF0ZV9HZXQ6IG5vIGN1cnJlbnQgdGhyZWFkIik7CiAKQEAgLTQ4MywxMCArNTE2LDkgQEAKIFB5VGhyZWFkU3RhdGUgKgogUHlUaHJlYWRTdGF0ZV9Td2FwKFB5VGhyZWFkU3RhdGUgKm5ld3RzKQogewotICAgIFB5VGhyZWFkU3RhdGUgKm9sZHRzID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAotICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CisgICAgUHlUaHJlYWRTdGF0ZSAqb2xkdHMgPSBHRVRfVFNUQVRFKCk7CiAKLSAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQsIG5ld3RzKTsKKyAgICBTRVRfVFNUQVRFKG5ld3RzKTsKICAgICAvKiBJdCBzaG91bGQgbm90IGJlIHBvc3NpYmxlIGZvciBtb3JlIHRoYW4gb25lIHRocmVhZCBzdGF0ZQogICAgICAgIHRvIGJlIHVzZWQgZm9yIGEgdGhyZWFkLiAgQ2hlY2sgdGhpcyB0aGUgYmVzdCB3ZSBjYW4gaW4gZGVidWcKICAgICAgICBidWlsZHMuCkBAIC01MTUsOCArNTQ3LDcgQEAKIFB5T2JqZWN0ICoKIFB5VGhyZWFkU3RhdGVfR2V0RGljdCh2b2lkKQogewotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgKLSAgICAgICAgJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IEdFVF9UU1RBVEUoKTsKICAgICBpZiAodHN0YXRlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC01NDAsOCArNTcxLDcgQEAKIAogaW50CiBQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjKGxvbmcgaWQsIFB5T2JqZWN0ICpleGMpIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBHRVRfSU5URVJQX1NUQVRFKCk7CiAgICAgUHlUaHJlYWRTdGF0ZSAqcDsKIAogICAgIC8qIEFsdGhvdWdoIHRoZSBHSUwgaXMgaGVsZCwgYSBmZXcgQyBBUEkgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQKQEAgLTY2Miw3ICs2OTIsNyBAQAogewogICAgIC8qIE11c3QgYmUgdGhlIHRzdGF0ZSBmb3IgdGhpcyB0aHJlYWQgKi8KICAgICBhc3NlcnQoUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKT09dHN0YXRlKTsKLSAgICByZXR1cm4gdHN0YXRlID09IF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKKyAgICByZXR1cm4gdHN0YXRlID09IEdFVF9UU1RBVEUoKTsKIH0KIAogLyogSW50ZXJuYWwgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIGZ1bmN0aW9ucyBjYWxsZWQgYnkKQEAgLTc1NCw5ICs3ODQsNyBAQAogaW50CiBQeUdJTFN0YXRlX0NoZWNrKHZvaWQpCiB7Ci0gICAgLyogY2FuJ3QgdXNlIFB5VGhyZWFkU3RhdGVfR2V0KCkgc2luY2UgaXQgd2lsbCBhc3NlcnQgdGhhdCBpdCBoYXMgdGhlIEdJTCAqLwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgKLSAgICAgICAgJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IEdFVF9UU1RBVEUoKTsKICAgICByZXR1cm4gdHN0YXRlICYmICh0c3RhdGUgPT0gUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0cmhleC5jIGIvUHl0aG9uL3B5c3RyaGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1OWVkMQotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9weXN0cmhleC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qIGJ5dGVzIHRvIGhleCBpbXBsZW1lbnRhdGlvbiAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKK3N0YXRpYyBQeU9iamVjdCAqX1B5X3N0cmhleF9pbXBsKGNvbnN0IGNoYXIqIGFyZ2J1ZiwgY29uc3QgUHlfc3NpemVfdCBhcmdsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0dXJuX2J5dGVzKQoreworICAgIFB5T2JqZWN0ICpyZXR2YWw7CisgICAgUHlfVUNTMSogcmV0YnVmOworICAgIFB5X3NzaXplX3QgaSwgajsKKworICAgIGFzc2VydChhcmdsZW4gPj0gMCk7CisgICAgaWYgKGFyZ2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisKKyAgICBpZiAocmV0dXJuX2J5dGVzKSB7CisgICAgICAgIC8qIElmIF9QeUJ5dGVzX0Zyb21TaXplKCkgd2VyZSBwdWJsaWMgd2UgY291bGQgYXZvaWQgbWFsbG9jK2NvcHkuICovCisgICAgICAgIHJldGJ1ZiA9IChQeV9VQ1MxKikgUHlNZW1fTWFsbG9jKGFyZ2xlbioyKTsKKwlpZiAoIXJldGJ1ZikKKwkgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHZhbCA9IE5VTEw7ICAvKiBzaWxlbmNlIGEgY29tcGlsZXIgd2FybmluZywgYXNzaWduZWQgbGF0ZXIuICovCisgICAgfSBlbHNlIHsKKwlyZXR2YWwgPSBQeVVuaWNvZGVfTmV3KGFyZ2xlbioyLCAxMjcpOworCWlmICghcmV0dmFsKQorCSAgICByZXR1cm4gTlVMTDsKKwlyZXRidWYgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXR2YWwpOworICAgIH0KKworICAgIC8qIG1ha2UgaGV4IHZlcnNpb24gb2Ygc3RyaW5nLCB0YWtlbiBmcm9tIHNoYW1vZHVsZS5jICovCisgICAgZm9yIChpPWo9MDsgaSA8IGFyZ2xlbjsgaSsrKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKKyAgICAgICAgYyA9IChhcmdidWZbaV0gPj4gNCkgJiAweGY7CisgICAgICAgIHJldGJ1ZltqKytdID0gUHlfaGV4ZGlnaXRzW2NdOworICAgICAgICBjID0gYXJnYnVmW2ldICYgMHhmOworICAgICAgICByZXRidWZbaisrXSA9IFB5X2hleGRpZ2l0c1tjXTsKKyAgICB9CisKKyAgICBpZiAocmV0dXJuX2J5dGVzKSB7CisgICAgICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKilyZXRidWYsIGFyZ2xlbioyKTsKKyAgICAgICAgUHlNZW1fRnJlZShyZXRidWYpOworICAgIH0KKyNpZmRlZiBQeV9ERUJVRworICAgIGVsc2UgeworICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJldHZhbCwgMSkpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlfc3RyaGV4KGNvbnN0IGNoYXIqIGFyZ2J1ZiwgY29uc3QgUHlfc3NpemVfdCBhcmdsZW4pCit7CisgICAgcmV0dXJuIF9QeV9zdHJoZXhfaW1wbChhcmdidWYsIGFyZ2xlbiwgMCk7Cit9CisKKy8qIFNhbWUgYXMgYWJvdmUgYnV0IHJldHVybnMgYSBieXRlcygpIGluc3RlYWQgb2Ygc3RyKCkgdG8gYXZvaWQgdGhlCisgKiBuZWVkIHRvIGRlY29kZSB0aGUgc3RyKCkgd2hlbiBieXRlcyBhcmUgbmVlZGVkLiAqLworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlfc3RyaGV4X2J5dGVzKGNvbnN0IGNoYXIqIGFyZ2J1ZiwgY29uc3QgUHlfc3NpemVfdCBhcmdsZW4pCit7CisgICAgcmV0dXJuIF9QeV9zdHJoZXhfaW1wbChhcmdidWYsIGFyZ2xlbiwgMSk7Cit9CmRpZmYgLS1naXQgYS9QeXRob24vcHl0aG9ucnVuLmMgYi9QeXRob24vcHl0aG9ucnVuLmMKaW5kZXggMDk2N2E0Ny4uN2ZiZjA2ZSAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5dGhvbnJ1bi5jCisrKyBiL1B5dGhvbi9weXRob25ydW4uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgImFzdC5oIgogI2luY2x1ZGUgIm1hcnNoYWwuaCIKICNpbmNsdWRlICJvc2RlZnMuaCIKKyNpbmNsdWRlIDxsb2NhbGUuaD4KIAogI2lmZGVmIEhBVkVfU0lHTkFMX0gKICNpbmNsdWRlIDxzaWduYWwuaD4KQEAgLTI1LDE4ICsyNiwxMiBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKLSNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxsYW5naW5mby5oPgogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCiAjdW5kZWYgQllURQogI2luY2x1ZGUgIndpbmRvd3MuaCIKLSNkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgotI2VuZGlmCi0KLSNpZmRlZiBfX2dudV9odXJkX18KLSNkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgogI2VuZGlmCiAKIF9QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKQEAgLTQ1LDcgKzQwLDYgQEAKIF9QeV9JREVOVElGSUVSKGxhc3RfdHJhY2ViYWNrKTsKIF9QeV9JREVOVElGSUVSKGxhc3RfdHlwZSk7CiBfUHlfSURFTlRJRklFUihsYXN0X3ZhbHVlKTsKLV9QeV9JREVOVElGSUVSKG5hbWUpOwogX1B5X0lERU5USUZJRVIocHMxKTsKIF9QeV9JREVOVElGSUVSKHBzMik7CiBfUHlfSURFTlRJRklFUihzdGRpbik7CkBAIC01Myw0MyArNDcsMTMgQEAKIF9QeV9JREVOVElGSUVSKHN0ZGVycik7CiBfUHlfc3RhdGljX3N0cmluZyhQeUlkX3N0cmluZywgIjxzdHJpbmc+Iik7CiAKLSNpZmRlZiBQeV9SRUZfREVCVUcKLXN0YXRpYwotdm9pZCBfcHJpbnRfdG90YWxfcmVmcyh2b2lkKSB7Ci0gICAgUHlPYmplY3QgKnhvcHRpb25zLCAqdmFsdWU7Ci0gICAgX1B5X0lERU5USUZJRVIoc2hvd3JlZmNvdW50KTsKLQotICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKLSAgICBpZiAoeG9wdGlvbnMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhbHVlID0gX1B5RGljdF9HZXRJdGVtSWQoeG9wdGlvbnMsICZQeUlkX3Nob3dyZWZjb3VudCk7Ci0gICAgaWYgKHZhbHVlID09IFB5X1RydWUpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICJbJSIgUFlfRk9STUFUX1NJWkVfVCAiZCByZWZzLCAiCi0gICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgYmxvY2tzXVxuIiwKLSAgICAgICAgICAgICAgICBfUHlfR2V0UmVmVG90YWwoKSwgX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpKTsKLX0KLSNlbmRpZgotCi0jaWZuZGVmIFB5X1JFRl9ERUJVRwotI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkKLSNlbHNlIC8qIFB5X1JFRl9ERUJVRyAqLwotI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkgX3ByaW50X3RvdGFsX3JlZnMoKQotI2VuZGlmCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotZXh0ZXJuIHdjaGFyX3QgKlB5X0dldFBhdGgodm9pZCk7Ci0KIGV4dGVybiBncmFtbWFyIF9QeVBhcnNlcl9HcmFtbWFyOyAvKiBGcm9tIGdyYW1pbml0LmMgKi8KIAogLyogRm9yd2FyZCAqLwotc3RhdGljIHZvaWQgaW5pdG1haW4oUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApOwotc3RhdGljIGludCBpbml0ZnNlbmNvZGluZyhQeUludGVycHJldGVyU3RhdGUgKmludGVycCk7Ci1zdGF0aWMgdm9pZCBpbml0c2l0ZSh2b2lkKTsKLXN0YXRpYyBpbnQgaW5pdHN0ZGlvKHZvaWQpOwogc3RhdGljIHZvaWQgZmx1c2hfaW8odm9pZCk7CiBzdGF0aWMgUHlPYmplY3QgKnJ1bl9tb2QobW9kX3R5LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKiwgUHlBcmVuYSAqKTsKQEAgLTk3LDExNzcgKzYxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqKTsKIHN0YXRpYyB2b2lkIGVycl9pbnB1dChwZXJyZGV0YWlsICopOwogc3RhdGljIHZvaWQgZXJyX2ZyZWUocGVycmRldGFpbCAqKTsKLXN0YXRpYyB2b2lkIGluaXRzaWdzKHZvaWQpOwotc3RhdGljIHZvaWQgY2FsbF9weV9leGl0ZnVuY3Modm9pZCk7Ci1zdGF0aWMgdm9pZCB3YWl0X2Zvcl90aHJlYWRfc2h1dGRvd24odm9pZCk7Ci1zdGF0aWMgdm9pZCBjYWxsX2xsX2V4aXRmdW5jcyh2b2lkKTsKLWV4dGVybiBpbnQgX1B5VW5pY29kZV9Jbml0KHZvaWQpOwotZXh0ZXJuIGludCBfUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX1B5VW5pY29kZV9GaW5pKHZvaWQpOwotZXh0ZXJuIGludCBfUHlMb25nX0luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBQeUxvbmdfRmluaSh2b2lkKTsKLWV4dGVybiBpbnQgX1B5RmF1bHRoYW5kbGVyX0luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfUHlGYXVsdGhhbmRsZXJfRmluaSh2b2lkKTsKLWV4dGVybiB2b2lkIF9QeUhhc2hfRmluaSh2b2lkKTsKLWV4dGVybiBpbnQgX1B5VHJhY2VNYWxsb2NfSW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgX1B5VHJhY2VNYWxsb2NfRmluaSh2b2lkKTsKLQotI2lmZGVmIFdJVEhfVEhSRUFECi1leHRlcm4gdm9pZCBfUHlHSUxTdGF0ZV9Jbml0KFB5SW50ZXJwcmV0ZXJTdGF0ZSAqLCBQeVRocmVhZFN0YXRlICopOwotZXh0ZXJuIHZvaWQgX1B5R0lMU3RhdGVfRmluaSh2b2lkKTsKLSNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLwotCi1pbnQgUHlfRGVidWdGbGFnOyAvKiBOZWVkZWQgYnkgcGFyc2VyLmMgKi8KLWludCBQeV9WZXJib3NlRmxhZzsgLyogTmVlZGVkIGJ5IGltcG9ydC5jICovCi1pbnQgUHlfUXVpZXRGbGFnOyAvKiBOZWVkZWQgYnkgc3lzbW9kdWxlLmMgKi8KLWludCBQeV9JbnRlcmFjdGl2ZUZsYWc7IC8qIE5lZWRlZCBieSBQeV9GZElzSW50ZXJhY3RpdmUoKSBiZWxvdyAqLwotaW50IFB5X0luc3BlY3RGbGFnOyAvKiBOZWVkZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gZXhpdCBhdCBTeXN0ZW1FeGl0ICovCi1pbnQgUHlfTm9TaXRlRmxhZzsgLyogU3VwcHJlc3MgJ2ltcG9ydCBzaXRlJyAqLwotaW50IFB5X0J5dGVzV2FybmluZ0ZsYWc7IC8qIFdhcm4gb24gc3RyKGJ5dGVzKSBhbmQgc3RyKGJ1ZmZlcikgKi8KLWludCBQeV9Eb250V3JpdGVCeXRlY29kZUZsYWc7IC8qIFN1cHByZXNzIHdyaXRpbmcgYnl0ZWNvZGUgZmlsZXMgKCoucHlbY29dKSAqLwotaW50IFB5X1VzZUNsYXNzRXhjZXB0aW9uc0ZsYWcgPSAxOyAvKiBOZWVkZWQgYnkgYmx0aW5tb2R1bGUuYzogZGVwcmVjYXRlZCAqLwotaW50IFB5X0Zyb3plbkZsYWc7IC8qIE5lZWRlZCBieSBnZXRwYXRoLmMgKi8KLWludCBQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWc7IC8qIGUuZy4gUFlUSE9OUEFUSCwgUFlUSE9OSE9NRSAqLwotaW50IFB5X05vVXNlclNpdGVEaXJlY3RvcnkgPSAwOyAvKiBmb3IgLXMgYW5kIHNpdGUucHkgKi8KLWludCBQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnID0gMDsgLyogVW5idWZmZXJlZCBiaW5hcnkgc3Rke2luLG91dCxlcnJ9ICovCi1pbnQgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnID0gMDsgLyogZm9yIC1SIGFuZCBQWVRIT05IQVNIU0VFRCAqLwotaW50IFB5X0lzb2xhdGVkRmxhZyA9IDA7IC8qIGZvciAtSSwgaXNvbGF0ZSBmcm9tIHVzZXIncyBlbnYgKi8KLQotUHlUaHJlYWRTdGF0ZSAqX1B5X0ZpbmFsaXppbmcgPSBOVUxMOwotCi0vKiBIYWNrIHRvIGZvcmNlIGxvYWRpbmcgb2Ygb2JqZWN0IGZpbGVzICovCi1pbnQgKCpfUHlPU19teXN0cm5pY21wX2hhY2spKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBQeV9zc2l6ZV90KSA9IFwKLSAgICBQeU9TX215c3RybmljbXA7IC8qIFB5dGhvbi9weXN0cmNtcC5vICovCi0KLS8qIFB5TW9kdWxlX0dldFdhcm5pbmdzTW9kdWxlIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgYXMgb2YgMi42Ci1zaW5jZSBfd2FybmluZ3MgaXMgYnVpbHRpbi4gIFRoaXMgQVBJIHNob3VsZCBub3QgYmUgdXNlZC4gKi8KLVB5T2JqZWN0ICoKLVB5TW9kdWxlX0dldFdhcm5pbmdzTW9kdWxlKHZvaWQpCi17Ci0gICAgcmV0dXJuIFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgid2FybmluZ3MiKTsKLX0KLQotc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7Ci0KLS8qIEFQSSB0byBhY2Nlc3MgdGhlIGluaXRpYWxpemVkIGZsYWcgLS0gdXNlZnVsIGZvciBlc290ZXJpYyB1c2UgKi8KLQotaW50Ci1QeV9Jc0luaXRpYWxpemVkKHZvaWQpCi17Ci0gICAgcmV0dXJuIGluaXRpYWxpemVkOwotfQotCi0vKiBIZWxwZXIgdG8gYWxsb3cgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZSBub3JtYWwKLSAqIG1lY2hhbmlzbSB0aGF0IGF0dGVtcHRzIHRvIGZpZ3VyZSBvdXQgYW4gYXBwcm9wcmlhdGUgSU8gZW5jb2RpbmcKLSAqLwotCi1zdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcgPSBOVUxMOwotc3RhdGljIGNoYXIgKl9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IE5VTEw7Ci0KLWludAotUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQotewotICAgIGlmIChQeV9Jc0luaXRpYWxpemVkKCkpIHsKLSAgICAgICAgLyogVGhpcyBpcyB0b28gbGF0ZSB0byBoYXZlIGFueSBlZmZlY3QgKi8KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICAvKiBDYW4ndCBjYWxsIFB5RXJyX05vTWVtb3J5KCkgb24gZXJyb3JzLCBhcyBQeXRob24gaGFzbid0IGJlZW4KLSAgICAgKiBpbml0aWFsaXNlZCB5ZXQuCi0gICAgICoKLSAgICAgKiBIb3dldmVyLCB0aGUgcmF3IG1lbW9yeSBhbGxvY2F0b3JzIGFyZSBpbml0aWFsaXNlZCBhcHByb3ByaWF0ZWx5Ci0gICAgICogYXMgQyBzdGF0aWMgdmFyaWFibGVzLCBzbyBfUHlNZW1fUmF3U3RyZHVwIGlzIE9LIGV2ZW4gdGhvdWdoCi0gICAgICogUHlfSW5pdGlhbGl6ZSBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LgotICAgICAqLwotICAgIGlmIChlbmNvZGluZykgewotICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IF9QeU1lbV9SYXdTdHJkdXAoZW5jb2RpbmcpOwotICAgICAgICBpZiAoIV9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGVycm9ycykgewotICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBfUHlNZW1fUmF3U3RyZHVwKGVycm9ycyk7Ci0gICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzKSB7Ci0gICAgICAgICAgICBpZiAoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKLSAgICAgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtMzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogR2xvYmFsIGluaXRpYWxpemF0aW9ucy4gIENhbiBiZSB1bmRvbmUgYnkgUHlfRmluYWxpemUoKS4gIERvbid0Ci0gICBjYWxsIHRoaXMgdHdpY2Ugd2l0aG91dCBhbiBpbnRlcnZlbmluZyBQeV9GaW5hbGl6ZSgpIGNhbGwuICBXaGVuCi0gICBpbml0aWFsaXphdGlvbnMgZmFpbCwgYSBmYXRhbCBlcnJvciBpcyBpc3N1ZWQgYW5kIHRoZSBmdW5jdGlvbiBkb2VzCi0gICBub3QgcmV0dXJuLiAgT24gcmV0dXJuLCB0aGUgZmlyc3QgdGhyZWFkIGFuZCBpbnRlcnByZXRlciBzdGF0ZSBoYXZlCi0gICBiZWVuIGNyZWF0ZWQuCi0KLSAgIExvY2tpbmc6IHlvdSBtdXN0IGhvbGQgdGhlIGludGVycHJldGVyIGxvY2sgd2hpbGUgY2FsbGluZyB0aGlzLgotICAgKElmIHRoZSBsb2NrIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQsIHRoYXQncyBlcXVpdmFsZW50IHRvCi0gICBoYXZpbmcgdGhlIGxvY2ssIGJ1dCB5b3UgY2Fubm90IHVzZSBtdWx0aXBsZSB0aHJlYWRzLikKLQotKi8KLQotc3RhdGljIGludAotYWRkX2ZsYWcoaW50IGZsYWcsIGNvbnN0IGNoYXIgKmVudnMpCi17Ci0gICAgaW50IGVudiA9IGF0b2koZW52cyk7Ci0gICAgaWYgKGZsYWcgPCBlbnYpCi0gICAgICAgIGZsYWcgPSBlbnY7Ci0gICAgaWYgKGZsYWcgPCAxKQotICAgICAgICBmbGFnID0gMTsKLSAgICByZXR1cm4gZmxhZzsKLX0KLQotc3RhdGljIGNoYXIqCi1nZXRfY29kZWNfbmFtZShjb25zdCBjaGFyICplbmNvZGluZykKLXsKLSAgICBjaGFyICpuYW1lX3V0ZjgsICpuYW1lX3N0cjsKLSAgICBQeU9iamVjdCAqY29kZWMsICpuYW1lID0gTlVMTDsKLQotICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKLSAgICBpZiAoIWNvZGVjKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoY29kZWMsICZQeUlkX25hbWUpOwotICAgIFB5X0NMRUFSKGNvZGVjKTsKLSAgICBpZiAoIW5hbWUpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBuYW1lX3V0ZjggPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpOwotICAgIGlmIChuYW1lX3V0ZjggPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBuYW1lX3N0ciA9IF9QeU1lbV9SYXdTdHJkdXAobmFtZV91dGY4KTsKLSAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBuYW1lX3N0cjsKLQotZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihjb2RlYyk7Ci0gICAgUHlfWERFQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGNoYXIqCi1nZXRfbG9jYWxlX2VuY29kaW5nKHZvaWQpCi17Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgIGNoYXIgY29kZXBhZ2VbMTAwXTsKLSAgICBQeU9TX3NucHJpbnRmKGNvZGVwYWdlLCBzaXplb2YoY29kZXBhZ2UpLCAiY3AlZCIsIEdldEFDUCgpKTsKLSAgICByZXR1cm4gZ2V0X2NvZGVjX25hbWUoY29kZXBhZ2UpOwotI2VsaWYgZGVmaW5lZChIQVZFX0xBTkdJTkZPX0gpICYmIGRlZmluZWQoQ09ERVNFVCkKLSAgICBjaGFyKiBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7Ci0gICAgaWYgKCFjb2Rlc2V0IHx8IGNvZGVzZXRbMF0gPT0gJ1wwJykgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNPREVTRVQgaXMgbm90IHNldCBvciBlbXB0eSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIGdldF9jb2RlY19uYW1lKGNvZGVzZXQpOwotI2Vsc2UKLSAgICBQeUVycl9TZXROb25lKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IpOwotICAgIHJldHVybiBOVUxMOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkCi1pbXBvcnRfaW5pdChQeUludGVycHJldGVyU3RhdGUgKmludGVycCwgUHlPYmplY3QgKnN5c21vZCkKLXsKLSAgICBQeU9iamVjdCAqaW1wb3J0bGliOwotICAgIFB5T2JqZWN0ICppbXBtb2Q7Ci0gICAgUHlPYmplY3QgKnN5c19tb2R1bGVzOwotICAgIFB5T2JqZWN0ICp2YWx1ZTsKLQotICAgIC8qIEltcG9ydCBfaW1wb3J0bGliIHRocm91Z2ggaXRzIGZyb3plbiB2ZXJzaW9uLCBfZnJvemVuX2ltcG9ydGxpYi4gKi8KLSAgICBpZiAoUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKCJfZnJvemVuX2ltcG9ydGxpYiIpIDw9IDApIHsKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW1wb3J0IF9mcm96ZW5faW1wb3J0bGliIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5X1ZlcmJvc2VGbGFnKSB7Ci0gICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiaW1wb3J0IF9mcm96ZW5faW1wb3J0bGliICMgZnJvemVuXG4iKTsKLSAgICB9Ci0gICAgaW1wb3J0bGliID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfZnJvemVuX2ltcG9ydGxpYiIpOwotICAgIGlmIChpbXBvcnRsaWIgPT0gTlVMTCkgewotICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjb3VsZG4ndCBnZXQgX2Zyb3plbl9pbXBvcnRsaWIgZnJvbSAiCi0gICAgICAgICAgICAgICAgICAgICAgInN5cy5tb2R1bGVzIik7Ci0gICAgfQotICAgIGludGVycC0+aW1wb3J0bGliID0gaW1wb3J0bGliOwotICAgIFB5X0lOQ1JFRihpbnRlcnAtPmltcG9ydGxpYik7Ci0KLSAgICAvKiBJbnN0YWxsIF9pbXBvcnRsaWIgYXMgX19pbXBvcnRfXyAqLwotICAgIGltcG1vZCA9IFB5SW5pdF9pbXAoKTsKLSAgICBpZiAoaW1wbW9kID09IE5VTEwpIHsKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW1wb3J0IGltcCIpOwotICAgIH0KLSAgICBlbHNlIGlmIChQeV9WZXJib3NlRmxhZykgewotICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoImltcG9ydCBpbXAgIyBidWlsdGluXG4iKTsKLSAgICB9Ci0gICAgc3lzX21vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7Ci0gICAgaWYgKFB5X1ZlcmJvc2VGbGFnKSB7Ci0gICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiaW1wb3J0IHN5cyAjIGJ1aWx0aW5cbiIpOwotICAgIH0KLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzX21vZHVsZXMsICJfaW1wIiwgaW1wbW9kKSA8IDApIHsKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3Qgc2F2ZSBfaW1wIHRvIHN5cy5tb2R1bGVzIik7Ci0gICAgfQotCi0gICAgdmFsdWUgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGltcG9ydGxpYiwgIl9pbnN0YWxsIiwgIk9PIiwgc3lzbW9kLCBpbXBtb2QpOwotICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1ByaW50KCk7Ci0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGltcG9ydGxpYiBpbnN0YWxsIGZhaWxlZCIpOwotICAgIH0KLSAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIFB5X0RFQ1JFRihpbXBtb2QpOwotCi0gICAgX1B5SW1wb3J0WmlwX0luaXQoKTsKLX0KLQotCi12b2lkCi1fUHlfSW5pdGlhbGl6ZUV4X1ByaXZhdGUoaW50IGluc3RhbGxfc2lncywgaW50IGluc3RhbGxfaW1wb3J0bGliKQotewotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKLSAgICBQeU9iamVjdCAqYmltb2QsICpzeXNtb2QsICpwc3RkZXJyOwotICAgIGNoYXIgKnA7Ci0gICAgZXh0ZXJuIHZvaWQgX1B5X1JlYWR5VHlwZXModm9pZCk7Ci0KLSAgICBpZiAoaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBpbml0aWFsaXplZCA9IDE7Ci0gICAgX1B5X0ZpbmFsaXppbmcgPSBOVUxMOwotCi0jaWYgZGVmaW5lZChIQVZFX0xBTkdJTkZPX0gpICYmIGRlZmluZWQoSEFWRV9TRVRMT0NBTEUpCi0gICAgLyogU2V0IHVwIHRoZSBMQ19DVFlQRSBsb2NhbGUsIHNvIHdlIGNhbiBvYnRhaW4KLSAgICAgICB0aGUgbG9jYWxlJ3MgY2hhcnNldCB3aXRob3V0IGhhdmluZyB0byBzd2l0Y2gKLSAgICAgICBsb2NhbGVzLiAqLwotICAgIHNldGxvY2FsZShMQ19DVFlQRSwgIiIpOwotI2VuZGlmCi0KLSAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTkRFQlVHIikpICYmICpwICE9ICdcMCcpCi0gICAgICAgIFB5X0RlYnVnRmxhZyA9IGFkZF9mbGFnKFB5X0RlYnVnRmxhZywgcCk7Ci0gICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05WRVJCT1NFIikpICYmICpwICE9ICdcMCcpCi0gICAgICAgIFB5X1ZlcmJvc2VGbGFnID0gYWRkX2ZsYWcoUHlfVmVyYm9zZUZsYWcsIHApOwotICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OT1BUSU1JWkUiKSkgJiYgKnAgIT0gJ1wwJykKLSAgICAgICAgUHlfT3B0aW1pemVGbGFnID0gYWRkX2ZsYWcoUHlfT3B0aW1pemVGbGFnLCBwKTsKLSAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTkRPTlRXUklURUJZVEVDT0RFIikpICYmICpwICE9ICdcMCcpCi0gICAgICAgIFB5X0RvbnRXcml0ZUJ5dGVjb2RlRmxhZyA9IGFkZF9mbGFnKFB5X0RvbnRXcml0ZUJ5dGVjb2RlRmxhZywgcCk7Ci0gICAgLyogVGhlIHZhcmlhYmxlIGlzIG9ubHkgdGVzdGVkIGZvciBleGlzdGVuY2UgaGVyZTsgX1B5UmFuZG9tX0luaXQgd2lsbAotICAgICAgIGNoZWNrIGl0cyB2YWx1ZSBmdXJ0aGVyLiAqLwotICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OSEFTSFNFRUQiKSkgJiYgKnAgIT0gJ1wwJykKLSAgICAgICAgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnID0gYWRkX2ZsYWcoUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnLCBwKTsKLQotICAgIF9QeVJhbmRvbV9Jbml0KCk7Ci0KLSAgICBpbnRlcnAgPSBQeUludGVycHJldGVyU3RhdGVfTmV3KCk7Ci0gICAgaWYgKGludGVycCA9PSBOVUxMKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBtYWtlIGZpcnN0IGludGVycHJldGVyIik7Ci0KLSAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX05ldyhpbnRlcnApOwotICAgIGlmICh0c3RhdGUgPT0gTlVMTCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgbWFrZSBmaXJzdCB0aHJlYWQiKTsKLSAgICAodm9pZCkgUHlUaHJlYWRTdGF0ZV9Td2FwKHRzdGF0ZSk7Ci0KLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgIC8qIFdlIGNhbid0IGNhbGwgX1B5RXZhbF9GaW5pVGhyZWFkcygpIGluIFB5X0ZpbmFsaXplIGJlY2F1c2UKLSAgICAgICBkZXN0cm95aW5nIHRoZSBHSUwgbWlnaHQgZmFpbCB3aGVuIGl0IGlzIGJlaW5nIHJlZmVyZW5jZWQgZnJvbQotICAgICAgIGFub3RoZXIgcnVubmluZyB0aHJlYWQgKHNlZSBpc3N1ZSAjOTkwMSkuCi0gICAgICAgSW5zdGVhZCB3ZSBkZXN0cm95IHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgR0lMIGhlcmUsIHdoaWNoIGVuc3VyZXMKLSAgICAgICB0aGF0IHdlIGNhbiBjYWxsIFB5X0luaXRpYWxpemUgLyBQeV9GaW5hbGl6ZSBtdWx0aXBsZSB0aW1lcy4gKi8KLSAgICBfUHlFdmFsX0ZpbmlUaHJlYWRzKCk7Ci0KLSAgICAvKiBBdXRvLXRocmVhZC1zdGF0ZSBBUEkgKi8KLSAgICBfUHlHSUxTdGF0ZV9Jbml0KGludGVycCwgdHN0YXRlKTsKLSNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLwotCi0gICAgX1B5X1JlYWR5VHlwZXMoKTsKLQotICAgIGlmICghX1B5RnJhbWVfSW5pdCgpKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGZyYW1lcyIpOwotCi0gICAgaWYgKCFfUHlMb25nX0luaXQoKSkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdCBsb25ncyIpOwotCi0gICAgaWYgKCFQeUJ5dGVBcnJheV9Jbml0KCkpCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgYnl0ZWFycmF5Iik7Ci0KLSAgICBpZiAoIV9QeUZsb2F0X0luaXQoKSkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdCBmbG9hdCIpOwotCi0gICAgaW50ZXJwLT5tb2R1bGVzID0gUHlEaWN0X05ldygpOwotICAgIGlmIChpbnRlcnAtPm1vZHVsZXMgPT0gTlVMTCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgbWFrZSBtb2R1bGVzIGRpY3Rpb25hcnkiKTsKLQotICAgIC8qIEluaXQgVW5pY29kZSBpbXBsZW1lbnRhdGlvbjsgcmVsaWVzIG9uIHRoZSBjb2RlYyByZWdpc3RyeSAqLwotICAgIGlmIChfUHlVbmljb2RlX0luaXQoKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgdW5pY29kZSIpOwotICAgIGlmIChfUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0KCkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHN0cnVjdHNlcSIpOwotCi0gICAgYmltb2QgPSBfUHlCdWlsdGluX0luaXQoKTsKLSAgICBpZiAoYmltb2QgPT0gTlVMTCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBidWlsdGlucyBtb2R1bGVzIik7Ci0gICAgX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbihiaW1vZCwgImJ1aWx0aW5zIik7Ci0gICAgaW50ZXJwLT5idWlsdGlucyA9IFB5TW9kdWxlX0dldERpY3QoYmltb2QpOwotICAgIGlmIChpbnRlcnAtPmJ1aWx0aW5zID09IE5VTEwpCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgYnVpbHRpbnMgZGljdCIpOwotICAgIFB5X0lOQ1JFRihpbnRlcnAtPmJ1aWx0aW5zKTsKLQotICAgIC8qIGluaXRpYWxpemUgYnVpbHRpbiBleGNlcHRpb25zICovCi0gICAgX1B5RXhjX0luaXQoYmltb2QpOwotCi0gICAgc3lzbW9kID0gX1B5U3lzX0luaXQoKTsKLSAgICBpZiAoc3lzbW9kID09IE5VTEwpCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgc3lzIik7Ci0gICAgaW50ZXJwLT5zeXNkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChzeXNtb2QpOwotICAgIGlmIChpbnRlcnAtPnN5c2RpY3QgPT0gTlVMTCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzeXMgZGljdCIpOwotICAgIFB5X0lOQ1JFRihpbnRlcnAtPnN5c2RpY3QpOwotICAgIF9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oc3lzbW9kLCAic3lzIik7Ci0gICAgUHlTeXNfU2V0UGF0aChQeV9HZXRQYXRoKCkpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+c3lzZGljdCwgIm1vZHVsZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycC0+bW9kdWxlcyk7Ci0KLSAgICAvKiBTZXQgdXAgYSBwcmVsaW1pbmFyeSBzdGRlcnIgcHJpbnRlciB1bnRpbCB3ZSBoYXZlIGVub3VnaAotICAgICAgIGluZnJhc3RydWN0dXJlIGZvciB0aGUgaW8gbW9kdWxlIGluIHBsYWNlLiAqLwotICAgIHBzdGRlcnIgPSBQeUZpbGVfTmV3U3RkUHJpbnRlcihmaWxlbm8oc3RkZXJyKSk7Ci0gICAgaWYgKHBzdGRlcnIgPT0gTlVMTCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3Qgc2V0IHByZWxpbWluYXJ5IHN0ZGVyciIpOwotICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHBzdGRlcnIpOwotICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwotICAgIFB5X0RFQ1JFRihwc3RkZXJyKTsKLQotICAgIF9QeUltcG9ydF9Jbml0KCk7Ci0KLSAgICBfUHlJbXBvcnRIb29rc19Jbml0KCk7Ci0KLSAgICAvKiBJbml0aWFsaXplIF93YXJuaW5ncy4gKi8KLSAgICBfUHlXYXJuaW5nc19Jbml0KCk7Ci0KLSAgICBpZiAoIWluc3RhbGxfaW1wb3J0bGliKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBvcnRfaW5pdChpbnRlcnAsIHN5c21vZCk7Ci0KLSAgICAvKiBpbml0aWFsaXplIHRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlICovCi0gICAgaWYgKF9QeUZhdWx0aGFuZGxlcl9Jbml0KCkpCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgZmF1bHRoYW5kbGVyIik7Ci0KLSAgICBfUHlUaW1lX0luaXQoKTsKLQotICAgIGlmIChpbml0ZnNlbmNvZGluZyhpbnRlcnApIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogdW5hYmxlIHRvIGxvYWQgdGhlIGZpbGUgc3lzdGVtIGNvZGVjIik7Ci0KLSAgICBpZiAoaW5zdGFsbF9zaWdzKQotICAgICAgICBpbml0c2lncygpOyAvKiBTaWduYWwgaGFuZGxpbmcgc3R1ZmYsIGluY2x1ZGluZyBpbml0aW50cigpICovCi0KLSAgICBpZiAoX1B5VHJhY2VNYWxsb2NfSW5pdCgpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSB0cmFjZW1hbGxvYyIpOwotCi0gICAgaW5pdG1haW4oaW50ZXJwKTsgLyogTW9kdWxlIF9fbWFpbl9fICovCi0gICAgaWYgKGluaXRzdGRpbygpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHN5cyBzdGFuZGFyZCBzdHJlYW1zIik7Ci0KLSAgICAvKiBJbml0aWFsaXplIHdhcm5pbmdzLiAqLwotICAgIGlmIChQeVN5c19IYXNXYXJuT3B0aW9ucygpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp3YXJuaW5nc19tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIndhcm5pbmdzIik7Ci0gICAgICAgIGlmICh3YXJuaW5nc19tb2R1bGUgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICInaW1wb3J0IHdhcm5pbmdzJyBmYWlsZWQ7IHRyYWNlYmFjazpcbiIpOwotICAgICAgICAgICAgUHlFcnJfUHJpbnQoKTsKLSAgICAgICAgfQotICAgICAgICBQeV9YREVDUkVGKHdhcm5pbmdzX21vZHVsZSk7Ci0gICAgfQotCi0gICAgaWYgKCFQeV9Ob1NpdGVGbGFnKQotICAgICAgICBpbml0c2l0ZSgpOyAvKiBNb2R1bGUgc2l0ZSAqLwotfQotCi12b2lkCi1QeV9Jbml0aWFsaXplRXgoaW50IGluc3RhbGxfc2lncykKLXsKLSAgICBfUHlfSW5pdGlhbGl6ZUV4X1ByaXZhdGUoaW5zdGFsbF9zaWdzLCAxKTsKLX0KLQotdm9pZAotUHlfSW5pdGlhbGl6ZSh2b2lkKQotewotICAgIFB5X0luaXRpYWxpemVFeCgxKTsKLX0KLQotCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi1leHRlcm4gdm9pZCBkdW1wX2NvdW50cyhGSUxFKik7Ci0jZW5kaWYKLQotLyogRmx1c2ggc3Rkb3V0IGFuZCBzdGRlcnIgKi8KLQotc3RhdGljIGludAotZmlsZV9pc19jbG9zZWQoUHlPYmplY3QgKmZvYmopCi17Ci0gICAgaW50IHI7Ci0gICAgUHlPYmplY3QgKnRtcCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZm9iaiwgImNsb3NlZCIpOwotICAgIGlmICh0bXAgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgciA9IFB5T2JqZWN0X0lzVHJ1ZSh0bXApOwotICAgIFB5X0RFQ1JFRih0bXApOwotICAgIGlmIChyIDwgMCkKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICByZXR1cm4gciA+IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mbHVzaF9zdGRfZmlsZXModm9pZCkKLXsKLSAgICBQeU9iamVjdCAqZm91dCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOwotICAgIFB5T2JqZWN0ICpmZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7Ci0gICAgUHlPYmplY3QgKnRtcDsKLQotICAgIGlmIChmb3V0ICE9IE5VTEwgJiYgZm91dCAhPSBQeV9Ob25lICYmICFmaWxlX2lzX2Nsb3NlZChmb3V0KSkgewotICAgICAgICB0bXAgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGZvdXQsICZQeUlkX2ZsdXNoLCAiIik7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkKLSAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShmb3V0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgfQotCi0gICAgaWYgKGZlcnIgIT0gTlVMTCAmJiBmZXJyICE9IFB5X05vbmUgJiYgIWZpbGVfaXNfY2xvc2VkKGZlcnIpKSB7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZmVyciwgJlB5SWRfZmx1c2gsICIiKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgfQotfQotCi0vKiBVbmRvIHRoZSBlZmZlY3Qgb2YgUHlfSW5pdGlhbGl6ZSgpLgotCi0gICBCZXdhcmU6IGlmIG11bHRpcGxlIGludGVycHJldGVyIGFuZC9vciB0aHJlYWQgc3RhdGVzIGV4aXN0LCB0aGVzZQotICAgYXJlIG5vdCB3aXBlZCBvdXQ7IG9ubHkgdGhlIGN1cnJlbnQgdGhyZWFkIGFuZCBpbnRlcnByZXRlciBzdGF0ZQotICAgYXJlIGRlbGV0ZWQuICBCdXQgc2luY2UgZXZlcnl0aGluZyBlbHNlIGlzIGRlbGV0ZWQsIHRob3NlIG90aGVyCi0gICBpbnRlcnByZXRlciBhbmQgdGhyZWFkIHN0YXRlcyBzaG91bGQgbm8gbG9uZ2VyIGJlIHVzZWQuCi0KLSAgIChYWFggV2Ugc2hvdWxkIGRvIGJldHRlciwgZS5nLiB3aXBlIG91dCBhbGwgaW50ZXJwcmV0ZXJzIGFuZAotICAgdGhyZWFkcy4pCi0KLSAgIExvY2tpbmc6IGFzIGFib3ZlLgotCi0qLwotCi12b2lkCi1QeV9GaW5hbGl6ZSh2b2lkKQotewotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKLQotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdhaXRfZm9yX3RocmVhZF9zaHV0ZG93bigpOwotCi0gICAgLyogVGhlIGludGVycHJldGVyIGlzIHN0aWxsIGVudGlyZWx5IGludGFjdCBhdCB0aGlzIHBvaW50LCBhbmQgdGhlCi0gICAgICogZXhpdCBmdW5jcyBtYXkgYmUgcmVseWluZyBvbiB0aGF0LiAgSW4gcGFydGljdWxhciwgaWYgc29tZSB0aHJlYWQKLSAgICAgKiBvciBleGl0IGZ1bmMgaXMgc3RpbGwgd2FpdGluZyB0byBkbyBhbiBpbXBvcnQsIHRoZSBpbXBvcnQgbWFjaGluZXJ5Ci0gICAgICogZXhwZWN0cyBQeV9Jc0luaXRpYWxpemVkKCkgdG8gcmV0dXJuIHRydWUuICBTbyBkb24ndCBzYXkgdGhlCi0gICAgICogaW50ZXJwcmV0ZXIgaXMgdW5pbml0aWFsaXplZCB1bnRpbCBhZnRlciB0aGUgZXhpdCBmdW5jcyBoYXZlIHJ1bi4KLSAgICAgKiBOb3RlIHRoYXQgVGhyZWFkaW5nLnB5IHVzZXMgYW4gZXhpdCBmdW5jIHRvIGRvIGEgam9pbiBvbiBhbGwgdGhlCi0gICAgICogdGhyZWFkcyBjcmVhdGVkIHRocnUgaXQsIHNvIHRoaXMgYWxzbyBwcm90ZWN0cyBwZW5kaW5nIGltcG9ydHMgaW4KLSAgICAgKiB0aGUgdGhyZWFkcyBjcmVhdGVkIHZpYSBUaHJlYWRpbmcuCi0gICAgICovCi0gICAgY2FsbF9weV9leGl0ZnVuY3MoKTsKLQotICAgIC8qIEdldCBjdXJyZW50IHRocmVhZCBzdGF0ZSBhbmQgaW50ZXJwcmV0ZXIgcG9pbnRlciAqLwotICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7Ci0gICAgaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7Ci0KLSAgICAvKiBSZW1haW5pbmcgdGhyZWFkcyAoZS5nLiBkYWVtb24gdGhyZWFkcykgd2lsbCBhdXRvbWF0aWNhbGx5IGV4aXQKLSAgICAgICBhZnRlciB0YWtpbmcgdGhlIEdJTCAoaW4gUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKSkuICovCi0gICAgX1B5X0ZpbmFsaXppbmcgPSB0c3RhdGU7Ci0gICAgaW5pdGlhbGl6ZWQgPSAwOwotCi0gICAgLyogRmx1c2ggc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciAqLwotICAgIGZsdXNoX3N0ZF9maWxlcygpOwotCi0gICAgLyogRGlzYWJsZSBzaWduYWwgaGFuZGxpbmcgKi8KLSAgICBQeU9TX0ZpbmlJbnRlcnJ1cHRzKCk7Ci0KLSAgICAvKiBDb2xsZWN0IGdhcmJhZ2UuICBUaGlzIG1heSBjYWxsIGZpbmFsaXplcnM7IGl0J3MgbmljZSB0byBjYWxsIHRoZXNlCi0gICAgICogYmVmb3JlIGFsbCBtb2R1bGVzIGFyZSBkZXN0cm95ZWQuCi0gICAgICogWFhYIElmIGEgX19kZWxfXyBvciB3ZWFrcmVmIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCBoZXJlLCBhbmQgdHJpZXMgdG8KLSAgICAgKiBYWFggaW1wb3J0IGEgbW9kdWxlLCBiYWQgdGhpbmdzIGNhbiBoYXBwZW4sIGJlY2F1c2UgUHl0aG9uIG5vCi0gICAgICogWFhYIGxvbmdlciBiZWxpZXZlcyBpdCdzIGluaXRpYWxpemVkLgotICAgICAqIFhYWCAgICAgRmF0YWwgUHl0aG9uIGVycm9yOiBJbnRlcnByZXRlciBub3QgaW5pdGlhbGl6ZWQgKHZlcnNpb24gbWlzbWF0Y2g/KQotICAgICAqIFhYWCBpcyBlYXN5IHRvIHByb3Zva2UgdGhhdCB3YXkuICBJJ3ZlIGFsc28gc2VlbiwgZS5nLiwKLSAgICAgKiBYWFggICAgIEV4Y2VwdGlvbiBleGNlcHRpb25zLkltcG9ydEVycm9yOiAnTm8gbW9kdWxlIG5hbWVkIHNoYScKLSAgICAgKiBYWFggICAgICAgICBpbiA8ZnVuY3Rpb24gY2FsbGJhY2sgYXQgMHgwMDhGNTcxOD4gaWdub3JlZAotICAgICAqIFhYWCBidXQgSSdtIHVuY2xlYXIgb24gZXhhY3RseSBob3cgdGhhdCBvbmUgaGFwcGVucy4gIEluIGFueSBjYXNlLAotICAgICAqIFhYWCBJIGhhdmVuJ3Qgc2VlbiBhIHJlYWwtbGlmZSByZXBvcnQgb2YgZWl0aGVyIG9mIHRoZXNlLgotICAgICAqLwotICAgIFB5R0NfQ29sbGVjdCgpOwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC8qIFdpdGggQ09VTlRfQUxMT0NTLCBpdCBoZWxwcyB0byBydW4gR0MgbXVsdGlwbGUgdGltZXM6Ci0gICAgICAgZWFjaCBjb2xsZWN0aW9uIG1pZ2h0IHJlbGVhc2Ugc29tZSB0eXBlcyBmcm9tIHRoZSB0eXBlCi0gICAgICAgbGlzdCwgc28gdGhleSBiZWNvbWUgZ2FyYmFnZS4gKi8KLSAgICB3aGlsZSAoUHlHQ19Db2xsZWN0KCkgPiAwKQotICAgICAgICAvKiBub3RoaW5nICovOwotI2VuZGlmCi0gICAgLyogRGVzdHJveSBhbGwgbW9kdWxlcyAqLwotICAgIFB5SW1wb3J0X0NsZWFudXAoKTsKLQotICAgIC8qIEZsdXNoIHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnIgKGFnYWluLCBpbiBjYXNlIG1vcmUgd2FzIHByaW50ZWQpICovCi0gICAgZmx1c2hfc3RkX2ZpbGVzKCk7Ci0KLSAgICAvKiBDb2xsZWN0IGZpbmFsIGdhcmJhZ2UuICBUaGlzIGRpc3Bvc2VzIG9mIGN5Y2xlcyBjcmVhdGVkIGJ5Ci0gICAgICogY2xhc3MgZGVmaW5pdGlvbnMsIGZvciBleGFtcGxlLgotICAgICAqIFhYWCBUaGlzIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgY2F1c2VkIHRvbyBtYW55IHByb2JsZW1zLiAgSWYKLSAgICAgKiBYWFggYSBfX2RlbF9fIG9yIHdlYWtyZWYgY2FsbGJhY2sgdHJpZ2dlcnMgaGVyZSwgUHl0aG9uIGNvZGUgaGFzCi0gICAgICogWFhYIGEgaGFyZCB0aW1lIHJ1bm5pbmcsIGJlY2F1c2UgZXZlbiB0aGUgc3lzIG1vZHVsZSBoYXMgYmVlbgotICAgICAqIFhYWCBjbGVhcmVkIG91dCAoc3lzLnN0ZG91dCBpcyBnb25lLCBzeXMuZXhjZXB0aG9vayBpcyBnb25lLCBldGMpLgotICAgICAqIFhYWCBPbmUgc3ltcHRvbSBpcyBhIHNlcXVlbmNlIG9mIGluZm9ybWF0aW9uLWZyZWUgbWVzc2FnZXMKLSAgICAgKiBYWFggY29taW5nIGZyb20gdGhyZWFkcyAoaWYgYSBfX2RlbF9fIG9yIGNhbGxiYWNrIGlzIGludm9rZWQsCi0gICAgICogWFhYIG90aGVyIHRocmVhZHMgY2FuIGV4ZWN1dGUgdG9vLCBhbmQgYW55IGV4Y2VwdGlvbiB0aGV5IGVuY291bnRlcgotICAgICAqIFhYWCB0cmlnZ2VycyBhIGNvbWVkeSBvZiBlcnJvcnMgYXMgc3Vic3lzdGVtIGFmdGVyIHN1YnN5c3RlbQotICAgICAqIFhYWCBmYWlscyB0byBmaW5kIHdoYXQgaXQgKmV4cGVjdHMqIHRvIGZpbmQgaW4gc3lzIHRvIGhlbHAgcmVwb3J0Ci0gICAgICogWFhYIHRoZSBleGNlcHRpb24gYW5kIGNvbnNlcXVlbnQgdW5leHBlY3RlZCBmYWlsdXJlcykuICBJJ3ZlIGFsc28KLSAgICAgKiBYWFggc2VlbiBzZWdmYXVsdHMgdGhlbiwgYWZ0ZXIgYWRkaW5nIHByaW50IHN0YXRlbWVudHMgdG8gdGhlCi0gICAgICogWFhYIFB5dGhvbiBjb2RlIGdldHRpbmcgY2FsbGVkLgotICAgICAqLwotI2lmIDAKLSAgICBQeUdDX0NvbGxlY3QoKTsKLSNlbmRpZgotCi0gICAgLyogRGlzYWJsZSB0cmFjZW1hbGxvYyBhZnRlciBhbGwgUHl0aG9uIG9iamVjdHMgaGF2ZSBiZWVuIGRlc3Ryb3llZCwKLSAgICAgICBzbyBpdCBpcyBwb3NzaWJsZSB0byB1c2UgdHJhY2VtYWxsb2MgaW4gb2JqZWN0cyBkZXN0cnVjdG9yLiAqLwotICAgIF9QeVRyYWNlTWFsbG9jX0ZpbmkoKTsKLQotICAgIC8qIERlc3Ryb3kgdGhlIGRhdGFiYXNlIHVzZWQgYnkgX1B5SW1wb3J0X3tGaXh1cCxGaW5kfUV4dGVuc2lvbiAqLwotICAgIF9QeUltcG9ydF9GaW5pKCk7Ci0KLSAgICAvKiBDbGVhbnVwIHR5cGVvYmplY3QuYydzIGludGVybmFsIGNhY2hlcy4gKi8KLSAgICBfUHlUeXBlX0ZpbmkoKTsKLQotICAgIC8qIHVubG9hZCBmYXVsdGhhbmRsZXIgbW9kdWxlICovCi0gICAgX1B5RmF1bHRoYW5kbGVyX0ZpbmkoKTsKLQotICAgIC8qIERlYnVnZ2luZyBzdHVmZiAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIGR1bXBfY291bnRzKHN0ZG91dCk7Ci0jZW5kaWYKLSAgICAvKiBkdW1wIGhhc2ggc3RhdHMgKi8KLSAgICBfUHlIYXNoX0ZpbmkoKTsKLQotICAgIFBSSU5UX1RPVEFMX1JFRlMoKTsKLQotI2lmZGVmIFB5X1RSQUNFX1JFRlMKLSAgICAvKiBEaXNwbGF5IGFsbCBvYmplY3RzIHN0aWxsIGFsaXZlIC0tIHRoaXMgY2FuIGludm9rZSBhcmJpdHJhcnkKLSAgICAgKiBfX3JlcHJfXyBvdmVycmlkZXMsIHNvIHJlcXVpcmVzIGEgbW9zdGx5LWludGFjdCBpbnRlcnByZXRlci4KLSAgICAgKiBBbGFzLCBhIGxvdCBvZiBzdHVmZiBtYXkgc3RpbGwgYmUgYWxpdmUgbm93IHRoYXQgd2lsbCBiZSBjbGVhbmVkCi0gICAgICogdXAgbGF0ZXIuCi0gICAgICovCi0gICAgaWYgKFB5X0dFVEVOVigiUFlUSE9ORFVNUFJFRlMiKSkKLSAgICAgICAgX1B5X1ByaW50UmVmZXJlbmNlcyhzdGRlcnIpOwotI2VuZGlmIC8qIFB5X1RSQUNFX1JFRlMgKi8KLQotICAgIC8qIENsZWFyIGludGVycHJldGVyIHN0YXRlIGFuZCBhbGwgdGhyZWFkIHN0YXRlcy4gKi8KLSAgICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXIoaW50ZXJwKTsKLQotICAgIC8qIE5vdyB3ZSBkZWNyZWYgdGhlIGV4Y2VwdGlvbiBjbGFzc2VzLiAgQWZ0ZXIgdGhpcyBwb2ludCBub3RoaW5nCi0gICAgICAgY2FuIHJhaXNlIGFuIGV4Y2VwdGlvbi4gIFRoYXQncyBva2F5LCBiZWNhdXNlIGVhY2ggRmluaSgpIG1ldGhvZAotICAgICAgIGJlbG93IGhhcyBiZWVuIGNoZWNrZWQgdG8gbWFrZSBzdXJlIG5vIGV4Y2VwdGlvbnMgYXJlIGV2ZXIKLSAgICAgICByYWlzZWQuCi0gICAgKi8KLQotICAgIF9QeUV4Y19GaW5pKCk7Ci0KLSAgICAvKiBTdW5kcnkgZmluYWxpemVycyAqLwotICAgIFB5TWV0aG9kX0ZpbmkoKTsKLSAgICBQeUZyYW1lX0ZpbmkoKTsKLSAgICBQeUNGdW5jdGlvbl9GaW5pKCk7Ci0gICAgUHlUdXBsZV9GaW5pKCk7Ci0gICAgUHlMaXN0X0ZpbmkoKTsKLSAgICBQeVNldF9GaW5pKCk7Ci0gICAgUHlCeXRlc19GaW5pKCk7Ci0gICAgUHlCeXRlQXJyYXlfRmluaSgpOwotICAgIFB5TG9uZ19GaW5pKCk7Ci0gICAgUHlGbG9hdF9GaW5pKCk7Ci0gICAgUHlEaWN0X0ZpbmkoKTsKLSAgICBQeVNsaWNlX0ZpbmkoKTsKLSAgICBfUHlHQ19GaW5pKCk7Ci0gICAgX1B5UmFuZG9tX0ZpbmkoKTsKLQotICAgIC8qIENsZWFudXAgVW5pY29kZSBpbXBsZW1lbnRhdGlvbiAqLwotICAgIF9QeVVuaWNvZGVfRmluaSgpOwotCi0gICAgLyogcmVzZXQgZmlsZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZyAqLwotICAgIGlmICghUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyAmJiBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKSB7Ci0gICAgICAgIFB5TWVtX1Jhd0ZyZWUoKGNoYXIqKVB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpOwotICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nID0gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBYWFggU3RpbGwgYWxsb2NhdGVkOgotICAgICAgIC0gdmFyaW91cyBzdGF0aWMgYWQtaG9jIHBvaW50ZXJzIHRvIGludGVybmVkIHN0cmluZ3MKLSAgICAgICAtIGludCBhbmQgZmxvYXQgZnJlZSBsaXN0IGJsb2NrcwotICAgICAgIC0gd2hhdGV2ZXIgdmFyaW91cyBtb2R1bGVzIGFuZCBsaWJyYXJpZXMgYWxsb2NhdGUKLSAgICAqLwotCi0gICAgUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycygmX1B5UGFyc2VyX0dyYW1tYXIpOwotCi0gICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLwotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgX1B5R0lMU3RhdGVfRmluaSgpOwotI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCi0KLSAgICAvKiBEZWxldGUgY3VycmVudCB0aHJlYWQuIEFmdGVyIHRoaXMsIG1hbnkgQyBBUEkgY2FsbHMgYmVjb21lIGNyYXNoeS4gKi8KLSAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7Ci0gICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOwotCi0jaWZkZWYgUHlfVFJBQ0VfUkVGUwotICAgIC8qIERpc3BsYXkgYWRkcmVzc2VzICgmIHJlZmNudHMpIG9mIGFsbCBvYmplY3RzIHN0aWxsIGFsaXZlLgotICAgICAqIEFuIGFkZHJlc3MgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgcmVwciBvZiB0aGUgb2JqZWN0LCBwcmludGVkCi0gICAgICogYWJvdmUgYnkgX1B5X1ByaW50UmVmZXJlbmNlcy4KLSAgICAgKi8KLSAgICBpZiAoUHlfR0VURU5WKCJQWVRIT05EVU1QUkVGUyIpKQotICAgICAgICBfUHlfUHJpbnRSZWZlcmVuY2VBZGRyZXNzZXMoc3RkZXJyKTsKLSNlbmRpZiAvKiBQeV9UUkFDRV9SRUZTICovCi0jaWZkZWYgUFlNQUxMT0NfREVCVUcKLSAgICBpZiAoUHlfR0VURU5WKCJQWVRIT05NQUxMT0NTVEFUUyIpKQotICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2NTdGF0cyhzdGRlcnIpOwotI2VuZGlmCi0KLSAgICBjYWxsX2xsX2V4aXRmdW5jcygpOwotfQotCi0vKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgaW50ZXJwcmV0ZXIgYW5kIHRocmVhZCwgYW5kIHJldHVybiB0aGUKLSAgIG5ldyB0aHJlYWQuICBUaGlzIHJlcXVpcmVzIHRoYXQgUHlfSW5pdGlhbGl6ZSgpIGhhcyBiZWVuIGNhbGxlZAotICAgZmlyc3QuCi0KLSAgIFVuc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbiB5aWVsZHMgYSBOVUxMIHBvaW50ZXIuICBOb3RlIHRoYXQgKm5vKgotICAgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBldmVuIGluIHRoaXMgY2FzZSAtLSB0aGUKLSAgIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBoZWxkIGluIHRoZSB0aHJlYWQsIGFuZCB0aGVyZSBpcyBubwotICAgdGhyZWFkLgotCi0gICBMb2NraW5nOiBhcyBhYm92ZS4KLQotKi8KLQotUHlUaHJlYWRTdGF0ZSAqCi1QeV9OZXdJbnRlcnByZXRlcih2b2lkKQotewotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgKnNhdmVfdHN0YXRlOwotICAgIFB5T2JqZWN0ICpiaW1vZCwgKnN5c21vZDsKLQotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X05ld0ludGVycHJldGVyOiBjYWxsIFB5X0luaXRpYWxpemUgZmlyc3QiKTsKLQotICAgIGludGVycCA9IFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcoKTsKLSAgICBpZiAoaW50ZXJwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9OZXcoaW50ZXJwKTsKLSAgICBpZiAodHN0YXRlID09IE5VTEwpIHsKLSAgICAgICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzYXZlX3RzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfU3dhcCh0c3RhdGUpOwotCi0gICAgLyogWFhYIFRoZSBmb2xsb3dpbmcgaXMgbGF4IGluIGVycm9yIGNoZWNraW5nICovCi0KLSAgICBpbnRlcnAtPm1vZHVsZXMgPSBQeURpY3RfTmV3KCk7Ci0KLSAgICBiaW1vZCA9IF9QeUltcG9ydF9GaW5kQnVpbHRpbigiYnVpbHRpbnMiKTsKLSAgICBpZiAoYmltb2QgIT0gTlVMTCkgewotICAgICAgICBpbnRlcnAtPmJ1aWx0aW5zID0gUHlNb2R1bGVfR2V0RGljdChiaW1vZCk7Ci0gICAgICAgIGlmIChpbnRlcnAtPmJ1aWx0aW5zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLSAgICAgICAgUHlfSU5DUkVGKGludGVycC0+YnVpbHRpbnMpOwotICAgIH0KLQotICAgIC8qIGluaXRpYWxpemUgYnVpbHRpbiBleGNlcHRpb25zICovCi0gICAgX1B5RXhjX0luaXQoYmltb2QpOwotCi0gICAgc3lzbW9kID0gX1B5SW1wb3J0X0ZpbmRCdWlsdGluKCJzeXMiKTsKLSAgICBpZiAoYmltb2QgIT0gTlVMTCAmJiBzeXNtb2QgIT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqcHN0ZGVycjsKLQotICAgICAgICBpbnRlcnAtPnN5c2RpY3QgPSBQeU1vZHVsZV9HZXREaWN0KHN5c21vZCk7Ci0gICAgICAgIGlmIChpbnRlcnAtPnN5c2RpY3QgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwotICAgICAgICBQeV9JTkNSRUYoaW50ZXJwLT5zeXNkaWN0KTsKLSAgICAgICAgUHlTeXNfU2V0UGF0aChQeV9HZXRQYXRoKCkpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPnN5c2RpY3QsICJtb2R1bGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwLT5tb2R1bGVzKTsKLSAgICAgICAgLyogU2V0IHVwIGEgcHJlbGltaW5hcnkgc3RkZXJyIHByaW50ZXIgdW50aWwgd2UgaGF2ZSBlbm91Z2gKLSAgICAgICAgICAgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBpbyBtb2R1bGUgaW4gcGxhY2UuICovCi0gICAgICAgIHBzdGRlcnIgPSBQeUZpbGVfTmV3U3RkUHJpbnRlcihmaWxlbm8oc3RkZXJyKSk7Ci0gICAgICAgIGlmIChwc3RkZXJyID09IE5VTEwpCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBzZXQgcHJlbGltaW5hcnkgc3RkZXJyIik7Ci0gICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHBzdGRlcnIpOwotICAgICAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBwc3RkZXJyKTsKLSAgICAgICAgUHlfREVDUkVGKHBzdGRlcnIpOwotCi0gICAgICAgIF9QeUltcG9ydEhvb2tzX0luaXQoKTsKLQotICAgICAgICBpbXBvcnRfaW5pdChpbnRlcnAsIHN5c21vZCk7Ci0KLSAgICAgICAgaWYgKGluaXRmc2VuY29kaW5nKGludGVycCkgPCAwKQotICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7Ci0KLSAgICAgICAgaWYgKGluaXRzdGRpbygpIDwgMCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzeXMgc3RhbmRhcmQgc3RyZWFtcyIpOwotICAgICAgICBpbml0bWFpbihpbnRlcnApOwotICAgICAgICBpZiAoIVB5X05vU2l0ZUZsYWcpCi0gICAgICAgICAgICBpbml0c2l0ZSgpOwotICAgIH0KLQotICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIHRzdGF0ZTsKLQotaGFuZGxlX2Vycm9yOgotICAgIC8qIE9vcHMsIGl0IGRpZG4ndCB3b3JrLiAgVW5kbyBpdCBhbGwuICovCi0KLSAgICBQeUVycl9QcmludEV4KDApOwotICAgIFB5VGhyZWFkU3RhdGVfQ2xlYXIodHN0YXRlKTsKLSAgICBQeVRocmVhZFN0YXRlX1N3YXAoc2F2ZV90c3RhdGUpOwotICAgIFB5VGhyZWFkU3RhdGVfRGVsZXRlKHRzdGF0ZSk7Ci0gICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIERlbGV0ZSBhbiBpbnRlcnByZXRlciBhbmQgaXRzIGxhc3QgdGhyZWFkLiAgVGhpcyByZXF1aXJlcyB0aGF0IHRoZQotICAgZ2l2ZW4gdGhyZWFkIHN0YXRlIGlzIGN1cnJlbnQsIHRoYXQgdGhlIHRocmVhZCBoYXMgbm8gcmVtYWluaW5nCi0gICBmcmFtZXMsIGFuZCB0aGF0IGl0IGlzIGl0cyBpbnRlcnByZXRlcidzIG9ubHkgcmVtYWluaW5nIHRocmVhZC4KLSAgIEl0IGlzIGEgZmF0YWwgZXJyb3IgdG8gdmlvbGF0ZSB0aGVzZSBjb25zdHJhaW50cy4KLQotICAgKFB5X0ZpbmFsaXplKCkgZG9lc24ndCBoYXZlIHRoZXNlIGNvbnN0cmFpbnRzIC0tIGl0IHphcHMKLSAgIGV2ZXJ5dGhpbmcsIHJlZ2FyZGxlc3MuKQotCi0gICBMb2NraW5nOiBhcyBhYm92ZS4KLQotKi8KLQotdm9pZAotUHlfRW5kSW50ZXJwcmV0ZXIoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQotewotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7Ci0KLSAgICBpZiAodHN0YXRlICE9IFB5VGhyZWFkU3RhdGVfR0VUKCkpCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiB0aHJlYWQgaXMgbm90IGN1cnJlbnQiKTsKLSAgICBpZiAodHN0YXRlLT5mcmFtZSAhPSBOVUxMKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogdGhyZWFkIHN0aWxsIGhhcyBhIGZyYW1lIik7Ci0KLSAgICB3YWl0X2Zvcl90aHJlYWRfc2h1dGRvd24oKTsKLQotICAgIGlmICh0c3RhdGUgIT0gaW50ZXJwLT50c3RhdGVfaGVhZCB8fCB0c3RhdGUtPm5leHQgIT0gTlVMTCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IG5vdCB0aGUgbGFzdCB0aHJlYWQiKTsKLQotICAgIFB5SW1wb3J0X0NsZWFudXAoKTsKLSAgICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXIoaW50ZXJwKTsKLSAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7Ci0gICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOwotfQotCi0jaWZkZWYgTVNfV0lORE9XUwotc3RhdGljIHdjaGFyX3QgKnByb2duYW1lID0gTCJweXRob24iOwotI2Vsc2UKLXN0YXRpYyB3Y2hhcl90ICpwcm9nbmFtZSA9IEwicHl0aG9uMyI7Ci0jZW5kaWYKLQotdm9pZAotUHlfU2V0UHJvZ3JhbU5hbWUod2NoYXJfdCAqcG4pCi17Ci0gICAgaWYgKHBuICYmICpwbikKLSAgICAgICAgcHJvZ25hbWUgPSBwbjsKLX0KLQotd2NoYXJfdCAqCi1QeV9HZXRQcm9ncmFtTmFtZSh2b2lkKQotewotICAgIHJldHVybiBwcm9nbmFtZTsKLX0KLQotc3RhdGljIHdjaGFyX3QgKmRlZmF1bHRfaG9tZSA9IE5VTEw7Ci1zdGF0aWMgd2NoYXJfdCBlbnZfaG9tZVtNQVhQQVRITEVOKzFdOwotCi12b2lkCi1QeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKmhvbWUpCi17Ci0gICAgZGVmYXVsdF9ob21lID0gaG9tZTsKLX0KLQotd2NoYXJfdCAqCi1QeV9HZXRQeXRob25Ib21lKHZvaWQpCi17Ci0gICAgd2NoYXJfdCAqaG9tZSA9IGRlZmF1bHRfaG9tZTsKLSAgICBpZiAoaG9tZSA9PSBOVUxMICYmICFQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWcpIHsKLSAgICAgICAgY2hhciogY2hvbWUgPSBQeV9HRVRFTlYoIlBZVEhPTkhPTUUiKTsKLSAgICAgICAgaWYgKGNob21lKSB7Ci0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IFB5X0FSUkFZX0xFTkdUSChlbnZfaG9tZSk7Ci0gICAgICAgICAgICBzaXplX3QgciA9IG1ic3Rvd2NzKGVudl9ob21lLCBjaG9tZSwgc2l6ZSk7Ci0gICAgICAgICAgICBpZiAociAhPSAoc2l6ZV90KS0xICYmIHIgPCBzaXplKQotICAgICAgICAgICAgICAgIGhvbWUgPSBlbnZfaG9tZTsKLSAgICAgICAgfQotCi0gICAgfQotICAgIHJldHVybiBob21lOwotfQotCi0vKiBDcmVhdGUgX19tYWluX18gbW9kdWxlICovCi0KLXN0YXRpYyB2b2lkCi1pbml0bWFpbihQeUludGVycHJldGVyU3RhdGUgKmludGVycCkKLXsKLSAgICBQeU9iamVjdCAqbSwgKmQsICpsb2FkZXI7Ci0gICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKLSAgICBpZiAobSA9PSBOVUxMKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBjcmVhdGUgX19tYWluX18gbW9kdWxlIik7Ci0gICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGQsICJfX2J1aWx0aW5zX18iKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpiaW1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiYnVpbHRpbnMiKTsKLSAgICAgICAgaWYgKGJpbW9kID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkZhaWxlZCB0byByZXRyaWV2ZSBidWlsdGlucyBtb2R1bGUiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fYnVpbHRpbnNfXyIsIGJpbW9kKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIF9fbWFpbl9fLl9fYnVpbHRpbnNfXyIpOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihiaW1vZCk7Ci0gICAgfQotICAgIC8qIE1haW4gaXMgYSBsaXR0bGUgc3BlY2lhbCAtIGltcC5pc19idWlsdGluKCJfX21haW5fXyIpIHdpbGwgcmV0dXJuCi0gICAgICogRmFsc2UsIGJ1dCBCdWlsdGluSW1wb3J0ZXIgaXMgc3RpbGwgdGhlIG1vc3QgYXBwcm9wcmlhdGUgaW5pdGlhbAotICAgICAqIHNldHRpbmcgZm9yIGl0cyBfX2xvYWRlcl9fIGF0dHJpYnV0ZS4gQSBtb3JlIHN1aXRhYmxlIHZhbHVlIHdpbGwKLSAgICAgKiBiZSBzZXQgaWYgX19tYWluX18gZ2V0cyBmdXJ0aGVyIGluaXRpYWxpemVkIGxhdGVyIGluIHRoZSBzdGFydHVwCi0gICAgICogcHJvY2Vzcy4KLSAgICAgKi8KLSAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpOwotICAgIGlmIChsb2FkZXIgPT0gTlVMTCB8fCBsb2FkZXIgPT0gUHlfTm9uZSkgewotICAgICAgICBQeU9iamVjdCAqbG9hZGVyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1aWx0aW5JbXBvcnRlciIpOwotICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkZhaWxlZCB0byByZXRyaWV2ZSBCdWlsdGluSW1wb3J0ZXIiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fbG9hZGVyX18iLCBsb2FkZXIpIDwgMCkgewotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgX19tYWluX18uX19sb2FkZXJfXyIpOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihsb2FkZXIpOwotICAgIH0KLX0KLQotc3RhdGljIGludAotaW5pdGZzZW5jb2RpbmcoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCi17Ci0gICAgUHlPYmplY3QgKmNvZGVjOwotCi0gICAgaWYgKFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBnZXRfbG9jYWxlX2VuY29kaW5nKCk7Ci0gICAgICAgIGlmIChQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nID09IE5VTEwpCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBVbmFibGUgdG8gZ2V0IHRoZSBsb2NhbGUgZW5jb2RpbmciKTsKLQotICAgICAgICBQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nID0gMDsKLSAgICAgICAgaW50ZXJwLT5mc2NvZGVjX2luaXRpYWxpemVkID0gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyogdGhlIGVuY29kaW5nIGlzIG1iY3MsIHV0Zi04IG9yIGFzY2lpICovCi0gICAgY29kZWMgPSBfUHlDb2RlY19Mb29rdXAoUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyk7Ci0gICAgaWYgKCFjb2RlYykgewotICAgICAgICAvKiBTdWNoIGVycm9yIGNhbiBvbmx5IG9jY3VycyBpbiBjcml0aWNhbCBzaXR1YXRpb25zOiBubyBtb3JlCi0gICAgICAgICAqIG1lbW9yeSwgaW1wb3J0IGEgbW9kdWxlIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGZhaWxlZCwKLSAgICAgICAgICogZXRjLiAqLwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihjb2RlYyk7Ci0gICAgaW50ZXJwLT5mc2NvZGVjX2luaXRpYWxpemVkID0gMTsKLSAgICByZXR1cm4gMDsKLX0KLQotLyogSW1wb3J0IHRoZSBzaXRlIG1vZHVsZSAobm90IGludG8gX19tYWluX18gdGhvdWdoKSAqLwotCi1zdGF0aWMgdm9pZAotaW5pdHNpdGUodm9pZCkKLXsKLSAgICBQeU9iamVjdCAqbTsKLSAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJzaXRlIik7Ci0gICAgaWYgKG0gPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBpbXBvcnQgdGhlIHNpdGUgbW9kdWxlXG4iKTsKLSAgICAgICAgUHlFcnJfUHJpbnQoKTsKLSAgICAgICAgUHlfRmluYWxpemUoKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICB9Ci19Ci0KLS8qIENoZWNrIGlmIGEgZmlsZSBkZXNjcmlwdG9yIGlzIHZhbGlkIG9yIG5vdC4KLSAgIFJldHVybiAwIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgaW52YWxpZCwgcmV0dXJuIG5vbi16ZXJvIG90aGVyd2lzZS4gKi8KLXN0YXRpYyBpbnQKLWlzX3ZhbGlkX2ZkKGludCBmZCkKLXsKLSAgICBpbnQgZmQyOwotICAgIGlmIChmZCA8IDAgfHwgIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGZkMiA9IGR1cChmZCk7Ci0gICAgaWYgKGZkMiA+PSAwKQotICAgICAgICBjbG9zZShmZDIpOwotICAgIHJldHVybiBmZDIgPj0gMDsKLX0KLQotLyogcmV0dXJucyBQeV9Ob25lIGlmIHRoZSBmZCBpcyBub3QgdmFsaWQgKi8KLXN0YXRpYyBQeU9iamVjdCoKLWNyZWF0ZV9zdGRpbyhQeU9iamVjdCogaW8sCi0gICAgaW50IGZkLCBpbnQgd3JpdGVfbW9kZSwgY2hhciogbmFtZSwKLSAgICBjaGFyKiBlbmNvZGluZywgY2hhciogZXJyb3JzKQotewotICAgIFB5T2JqZWN0ICpidWYgPSBOVUxMLCAqc3RyZWFtID0gTlVMTCwgKnRleHQgPSBOVUxMLCAqcmF3ID0gTlVMTCwgKnJlczsKLSAgICBjb25zdCBjaGFyKiBtb2RlOwotICAgIGNvbnN0IGNoYXIqIG5ld2xpbmU7Ci0gICAgUHlPYmplY3QgKmxpbmVfYnVmZmVyaW5nOwotICAgIGludCBidWZmZXJpbmcsIGlzYXR0eTsKLSAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKLSAgICBfUHlfSURFTlRJRklFUihpc2F0dHkpOwotICAgIF9QeV9JREVOVElGSUVSKFRleHRJT1dyYXBwZXIpOwotICAgIF9QeV9JREVOVElGSUVSKG1vZGUpOwotCi0gICAgaWYgKCFpc192YWxpZF9mZChmZCkpCi0gICAgICAgIFB5X1JFVFVSTl9OT05FOwotCi0gICAgLyogc3RkaW4gaXMgYWx3YXlzIG9wZW5lZCBpbiBidWZmZXJlZCBtb2RlLCBmaXJzdCBiZWNhdXNlIGl0IHNob3VsZG4ndAotICAgICAgIG1ha2UgYSBkaWZmZXJlbmNlIGluIGNvbW1vbiB1c2UgY2FzZXMsIHNlY29uZCBiZWNhdXNlIFRleHRJT1dyYXBwZXIKLSAgICAgICBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiBhIHJlYWQxKCkgbWV0aG9kIHdoaWNoIG9ubHkgZXhpc3RzIG9uCi0gICAgICAgYnVmZmVyZWQgc3RyZWFtcy4KLSAgICAqLwotICAgIGlmIChQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnICYmIHdyaXRlX21vZGUpCi0gICAgICAgIGJ1ZmZlcmluZyA9IDA7Ci0gICAgZWxzZQotICAgICAgICBidWZmZXJpbmcgPSAtMTsKLSAgICBpZiAod3JpdGVfbW9kZSkKLSAgICAgICAgbW9kZSA9ICJ3YiI7Ci0gICAgZWxzZQotICAgICAgICBtb2RlID0gInJiIjsKLSAgICBidWYgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGlvLCAmUHlJZF9vcGVuLCAiaXNpT09PaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZCwgbW9kZSwgYnVmZmVyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSwgUHlfTm9uZSwgUHlfTm9uZSwgMCk7Ci0gICAgaWYgKGJ1ZiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgaWYgKGJ1ZmZlcmluZykgewotICAgICAgICBfUHlfSURFTlRJRklFUihyYXcpOwotICAgICAgICByYXcgPSBfUHlPYmplY3RfR2V0QXR0cklkKGJ1ZiwgJlB5SWRfcmF3KTsKLSAgICAgICAgaWYgKHJhdyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJhdyA9IGJ1ZjsKLSAgICAgICAgUHlfSU5DUkVGKHJhdyk7Ci0gICAgfQotCi0gICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG5hbWUpOwotICAgIGlmICh0ZXh0ID09IE5VTEwgfHwgX1B5T2JqZWN0X1NldEF0dHJJZChyYXcsICZQeUlkX25hbWUsIHRleHQpIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHJhdywgJlB5SWRfaXNhdHR5LCAiIik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlzYXR0eSA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwotICAgIFB5X0RFQ1JFRihyZXMpOwotICAgIGlmIChpc2F0dHkgPT0gLTEpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKGlzYXR0eSB8fCBQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnKQotICAgICAgICBsaW5lX2J1ZmZlcmluZyA9IFB5X1RydWU7Ci0gICAgZWxzZQotICAgICAgICBsaW5lX2J1ZmZlcmluZyA9IFB5X0ZhbHNlOwotCi0gICAgUHlfQ0xFQVIocmF3KTsKLSAgICBQeV9DTEVBUih0ZXh0KTsKLQotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAvKiBzeXMuc3RkaW46IGVuYWJsZSB1bml2ZXJzYWwgbmV3bGluZSBtb2RlLCB0cmFuc2xhdGUgIlxyXG4iIGFuZCAiXHIiCi0gICAgICAgbmV3bGluZXMgdG8gIlxuIi4KLSAgICAgICBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyOiB0cmFuc2xhdGUgIlxuIiB0byAiXHJcbiIuICovCi0gICAgbmV3bGluZSA9IE5VTEw7Ci0jZWxzZQotICAgIC8qIHN5cy5zdGRpbjogc3BsaXQgbGluZXMgYXQgIlxuIi4KLSAgICAgICBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyOiBkb24ndCB0cmFuc2xhdGUgbmV3bGluZXMgKHVzZSAiXG4iKS4gKi8KLSAgICBuZXdsaW5lID0gIlxuIjsKLSNlbmRpZgotCi0gICAgc3RyZWFtID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChpbywgJlB5SWRfVGV4dElPV3JhcHBlciwgIk9zc3NPIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgZW5jb2RpbmcsIGVycm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmUsIGxpbmVfYnVmZmVyaW5nKTsKLSAgICBQeV9DTEVBUihidWYpOwotICAgIGlmIChzdHJlYW0gPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgIGlmICh3cml0ZV9tb2RlKQotICAgICAgICBtb2RlID0gInciOwotICAgIGVsc2UKLSAgICAgICAgbW9kZSA9ICJyIjsKLSAgICB0ZXh0ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobW9kZSk7Ci0gICAgaWYgKCF0ZXh0IHx8IF9QeU9iamVjdF9TZXRBdHRySWQoc3RyZWFtLCAmUHlJZF9tb2RlLCB0ZXh0KSA8IDApCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIodGV4dCk7Ci0gICAgcmV0dXJuIHN0cmVhbTsKLQotZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihidWYpOwotICAgIFB5X1hERUNSRUYoc3RyZWFtKTsKLSAgICBQeV9YREVDUkVGKHRleHQpOwotICAgIFB5X1hERUNSRUYocmF3KTsKLQotICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX09TRXJyb3IpICYmICFpc192YWxpZF9mZChmZCkpIHsKLSAgICAgICAgLyogSXNzdWUgIzI0ODkxOiB0aGUgZmlsZSBkZXNjcmlwdG9yIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlIGZpcnN0Ci0gICAgICAgICAgIGlzX3ZhbGlkX2ZkKCkgY2hlY2sgd2FzIGNhbGxlZC4gSWdub3JlIHRoZSBPU0Vycm9yIGFuZCBzZXQgdGhlCi0gICAgICAgICAgIHN0cmVhbSB0byBOb25lLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBQeV9SRVRVUk5fTk9ORTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIEluaXRpYWxpemUgc3lzLnN0ZGluLCBzdGRvdXQsIHN0ZGVyciBhbmQgYnVpbHRpbnMub3BlbiAqLwotc3RhdGljIGludAotaW5pdHN0ZGlvKHZvaWQpCi17Ci0gICAgUHlPYmplY3QgKmlvbW9kID0gTlVMTCwgKndyYXBwZXI7Ci0gICAgUHlPYmplY3QgKmJpbW9kID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbTsKLSAgICBQeU9iamVjdCAqc3RkID0gTlVMTDsKLSAgICBpbnQgc3RhdHVzID0gMCwgZmQ7Ci0gICAgUHlPYmplY3QgKiBlbmNvZGluZ19hdHRyOwotICAgIGNoYXIgKnB5dGhvbmlvZW5jb2RpbmcgPSBOVUxMLCAqZW5jb2RpbmcsICplcnJvcnM7Ci0KLSAgICAvKiBIYWNrIHRvIGF2b2lkIGEgbmFzdHkgcmVjdXJzaW9uIGlzc3VlIHdoZW4gUHl0aG9uIGlzIGludm9rZWQKLSAgICAgICBpbiB2ZXJib3NlIG1vZGU6IHByZS1pbXBvcnQgdGhlIExhdGluLTEgYW5kIFVURi04IGNvZGVjcyAqLwotICAgIGlmICgobSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZW5jb2RpbmdzLnV0Zl84IikpID09IE5VTEwpIHsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgUHlfREVDUkVGKG0pOwotCi0gICAgaWYgKCEobSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZW5jb2RpbmdzLmxhdGluXzEiKSkpIHsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgUHlfREVDUkVGKG0pOwotCi0gICAgaWYgKCEoYmltb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImJ1aWx0aW5zIikpKSB7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotCi0gICAgaWYgKCEoaW9tb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImlvIikpKSB7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIGlmICghKHdyYXBwZXIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGlvbW9kLCAiT3BlbldyYXBwZXIiKSkpIHsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KLSAgICAvKiBTZXQgYnVpbHRpbnMub3BlbiAqLwotICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKGJpbW9kLCAib3BlbiIsIHdyYXBwZXIpID09IC0xKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih3cmFwcGVyKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgUHlfREVDUkVGKHdyYXBwZXIpOwotCi0gICAgZW5jb2RpbmcgPSBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZzsKLSAgICBlcnJvcnMgPSBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnM7Ci0gICAgaWYgKCFlbmNvZGluZyB8fCAhZXJyb3JzKSB7Ci0gICAgICAgIHB5dGhvbmlvZW5jb2RpbmcgPSBQeV9HRVRFTlYoIlBZVEhPTklPRU5DT0RJTkciKTsKLSAgICAgICAgaWYgKHB5dGhvbmlvZW5jb2RpbmcpIHsKLSAgICAgICAgICAgIGNoYXIgKmVycjsKLSAgICAgICAgICAgIHB5dGhvbmlvZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKHB5dGhvbmlvZW5jb2RpbmcpOwotICAgICAgICAgICAgaWYgKHB5dGhvbmlvZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IHN0cmNocihweXRob25pb2VuY29kaW5nLCAnOicpOwotICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgICplcnIgPSAnXDAnOwotICAgICAgICAgICAgICAgIGVycisrOwotICAgICAgICAgICAgICAgIGlmICgqZXJyICYmICFlcnJvcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgqcHl0aG9uaW9lbmNvZGluZyAmJiAhZW5jb2RpbmcpIHsKLSAgICAgICAgICAgICAgICBlbmNvZGluZyA9IHB5dGhvbmlvZW5jb2Rpbmc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBTZXQgc3lzLnN0ZGluICovCi0gICAgZmQgPSBmaWxlbm8oc3RkaW4pOwotICAgIC8qIFVuZGVyIHNvbWUgY29uZGl0aW9ucyBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgbWF5IG5vdCBiZSBjb25uZWN0ZWQKLSAgICAgKiBhbmQgZmlsZW5vKCkgbWF5IHBvaW50IHRvIGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yLiBGb3IgZXhhbXBsZQotICAgICAqIEdVSSBhcHBzIGRvbid0IGhhdmUgdmFsaWQgc3RhbmRhcmQgc3RyZWFtcyBieSBkZWZhdWx0LgotICAgICAqLwotICAgIHN0ZCA9IGNyZWF0ZV9zdGRpbyhpb21vZCwgZmQsIDAsICI8c3RkaW4+IiwgZW5jb2RpbmcsIGVycm9ycyk7Ci0gICAgaWYgKHN0ZCA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRpbl9fIiwgc3RkKTsKLSAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4sIHN0ZCk7Ci0gICAgUHlfREVDUkVGKHN0ZCk7Ci0KLSAgICAvKiBTZXQgc3lzLnN0ZG91dCAqLwotICAgIGZkID0gZmlsZW5vKHN0ZG91dCk7Ci0gICAgc3RkID0gY3JlYXRlX3N0ZGlvKGlvbW9kLCBmZCwgMSwgIjxzdGRvdXQ+IiwgZW5jb2RpbmcsIGVycm9ycyk7Ci0gICAgaWYgKHN0ZCA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRvdXRfXyIsIHN0ZCk7Ci0gICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZG91dCwgc3RkKTsKLSAgICBQeV9ERUNSRUYoc3RkKTsKLQotI2lmIDEgLyogRGlzYWJsZSB0aGlzIGlmIHlvdSBoYXZlIHRyb3VibGUgZGVidWdnaW5nIGJvb3RzdHJhcCBzdHVmZiAqLwotICAgIC8qIFNldCBzeXMuc3RkZXJyLCByZXBsYWNlcyB0aGUgcHJlbGltaW5hcnkgc3RkZXJyICovCi0gICAgZmQgPSBmaWxlbm8oc3RkZXJyKTsKLSAgICBzdGQgPSBjcmVhdGVfc3RkaW8oaW9tb2QsIGZkLCAxLCAiPHN0ZGVycj4iLCBlbmNvZGluZywgImJhY2tzbGFzaHJlcGxhY2UiKTsKLSAgICBpZiAoc3RkID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAvKiBTYW1lIGFzIGhhY2sgYWJvdmUsIHByZS1pbXBvcnQgc3RkZXJyJ3MgY29kZWMgdG8gYXZvaWQgcmVjdXJzaW9uCi0gICAgICAgd2hlbiBpbXBvcnQuYyB0cmllcyB0byB3cml0ZSB0byBzdGRlcnIgaW4gdmVyYm9zZSBtb2RlLiAqLwotICAgIGVuY29kaW5nX2F0dHIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHN0ZCwgImVuY29kaW5nIik7Ci0gICAgaWYgKGVuY29kaW5nX2F0dHIgIT0gTlVMTCkgewotICAgICAgICBjb25zdCBjaGFyICogc3RkX2VuY29kaW5nOwotICAgICAgICBzdGRfZW5jb2RpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGVuY29kaW5nX2F0dHIpOwotICAgICAgICBpZiAoc3RkX2VuY29kaW5nICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlY19pbmZvID0gX1B5Q29kZWNfTG9va3VwKHN0ZF9lbmNvZGluZyk7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKGNvZGVjX2luZm8pOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZ19hdHRyKTsKLSAgICB9Ci0gICAgUHlFcnJfQ2xlYXIoKTsgIC8qIE5vdCBhIGZhdGFsIGVycm9yIGlmIGNvZGVjIGlzbid0IGF2YWlsYWJsZSAqLwotCi0gICAgaWYgKFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHN0ZCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzdGQpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBpZiAoX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZGVyciwgc3RkKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHN0ZCk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihzdGQpOwotI2VuZGlmCi0KLSAgICBpZiAoMCkgewotICBlcnJvcjoKLSAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgfQotCi0gICAgLyogV2Ugd29uJ3QgbmVlZCB0aGVtIGFueW1vcmUuICovCi0gICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7Ci0gICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOwotICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKLSAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpOwotICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBOVUxMOwotICAgIH0KLSAgICBQeU1lbV9GcmVlKHB5dGhvbmlvZW5jb2RpbmcpOwotICAgIFB5X1hERUNSRUYoYmltb2QpOwotICAgIFB5X1hERUNSRUYoaW9tb2QpOwotICAgIHJldHVybiBzdGF0dXM7Ci19CiAKIC8qIFBhcnNlIGlucHV0IGZyb20gYSBmaWxlIGFuZCBleGVjdXRlIGl0ICovCiAKQEAgLTEzMTcsNyArMTEwLDcgQEAKICAgICBlcnIgPSAtMTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KGZwLCBmaWxlbmFtZSwgZmxhZ3MpOwotICAgICAgICBQUklOVF9UT1RBTF9SRUZTKCk7CisgICAgICAgIF9QWV9ERUJVR19QUklOVF9UT1RBTF9SRUZTKCk7CiAgICAgICAgIGlmIChyZXQgPT0gRV9FT0YpIHsKICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE0NzIsNyArMjY1LDcgQEAKIHN0YXRpYyBpbnQKIG1heWJlX3B5Y19maWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogZXh0LCBpbnQgY2xvc2VpdCkKIHsKLSAgICBpZiAoc3RyY21wKGV4dCwgIi5weWMiKSA9PSAwIHx8IHN0cmNtcChleHQsICIucHlvIikgPT0gMCkKKyAgICBpZiAoc3RyY21wKGV4dCwgIi5weWMiKSA9PSAwKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIC8qIE9ubHkgbG9vayBpbnRvIHRoZSBmaWxlIGlmIHdlIGFyZSBhbGxvd2VkIHRvIGNsb3NlIGl0LCBzaW5jZQpAQCAtMTUxMSw3ICszMDQsNyBAQAogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWVfb2JqLCAqbG9hZGVyX3R5cGUsICpsb2FkZXI7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lX29iaiwgKmJvb3RzdHJhcCwgKmxvYWRlcl90eXBlID0gTlVMTCwgKmxvYWRlcjsKICAgICBpbnQgcmVzdWx0ID0gMDsKIAogICAgIGZpbGVuYW1lX29iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwpAQCAtMTUyMCw3ICszMTMsMTIgQEAKICAgICAvKiBHZXQgY3VycmVudCB0aHJlYWQgc3RhdGUgYW5kIGludGVycHJldGVyIHBvaW50ZXIgKi8KICAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIGludGVycCA9IHRzdGF0ZS0+aW50ZXJwOwotICAgIGxvYWRlcl90eXBlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwgbG9hZGVyX25hbWUpOworICAgIGJvb3RzdHJhcCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2Jvb3RzdHJhcF9leHRlcm5hbCIpOworICAgIGlmIChib290c3RyYXAgIT0gTlVMTCkgeworICAgICAgICBsb2FkZXJfdHlwZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoYm9vdHN0cmFwLCBsb2FkZXJfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihib290c3RyYXApOworICAgIH0KICAgICBpZiAobG9hZGVyX3R5cGUgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWVfb2JqKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTU3OCw5ICszNzYsNiBAQAogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJweXRob246IENhbid0IHJlb3BlbiAucHljIGZpbGVcbiIpOwogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9Ci0gICAgICAgIC8qIFR1cm4gb24gb3B0aW1pemF0aW9uIGlmIGEgLnB5byBmaWxlIGlzIGdpdmVuICovCi0gICAgICAgIGlmIChzdHJjbXAoZXh0LCAiLnB5byIpID09IDApCi0gICAgICAgICAgICBQeV9PcHRpbWl6ZUZsYWcgPSAxOwogCiAgICAgICAgIGlmIChzZXRfbWFpbl9sb2FkZXIoZCwgZmlsZW5hbWUsICJTb3VyY2VsZXNzRmlsZUxvYWRlciIpIDwgMCkgewogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJweXRob246IGZhaWxlZCB0byBzZXQgX19tYWluX18uX19sb2FkZXJfX1xuIik7CkBAIC0xNzI0LDcgKzUxOSw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChvZmZzZXQgPj0gMCkgewotICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPT0gc3RybGVuKHRleHQpICYmIHRleHRbb2Zmc2V0IC0gMV0gPT0gJ1xuJykKKyAgICAgICAgaWYgKG9mZnNldCA+IDAgJiYgKHNpemVfdClvZmZzZXQgPT0gc3RybGVuKHRleHQpICYmIHRleHRbb2Zmc2V0IC0gMV0gPT0gJ1xuJykKICAgICAgICAgICAgIG9mZnNldC0tOwogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBubCA9IHN0cmNocih0ZXh0LCAnXG4nKTsKQEAgLTE5NzEsOCArNzY2LDExIEBACiAgICAgICAgIC8qIG9ubHkgcHJpbnQgY29sb24gaWYgdGhlIHN0cigpIG9mIHRoZQogICAgICAgICAgICBvYmplY3QgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcKICAgICAgICAgKi8KLSAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIGVyciA9IC0xOworICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI6IDxleGNlcHRpb24gc3RyKCkgZmFpbGVkPiIsIGYpOworICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2socykgfHwKICAgICAgICAgICAgIFB5VW5pY29kZV9HZXRMZW5ndGgocykgIT0gMCkKICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmKTsKQEAgLTE5ODEsNiArNzc5LDkgQEAKICAgICAgICAgUHlfWERFQ1JFRihzKTsKICAgICB9CiAgICAgLyogdHJ5IHRvIHdyaXRlIGEgbmV3bGluZSBpbiBhbnkgY2FzZSAqLworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQogICAgIGVyciArPSBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZik7CiAgICAgUHlfWERFQ1JFRih0Yik7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKQEAgLTIxODgsMTMgKzk4OSwxNyBAQAogCiAgICAgbWFnaWMgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgaWYgKG1hZ2ljICE9IFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyKCkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAiQmFkIG1hZ2ljIG51bWJlciBpbiAucHljIGZpbGUiKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBtYWdpYyBudW1iZXIgaW4gLnB5YyBmaWxlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAvKiBTa2lwIG10aW1lIGFuZCBzaXplICovCiAgICAgKHZvaWQpIFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICAodm9pZCkgUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHYgPSBQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZShmcCk7CiAgICAgaWYgKHYgPT0gTlVMTCB8fCAhUHlDb2RlX0NoZWNrKHYpKSB7CiAgICAgICAgIFB5X1hERUNSRUYodik7CkBAIC0yNTgyLDI3NiArMTM4Nyw2IEBACiAgICAgfQogfQogCi0vKiBQcmludCB0aGUgY3VycmVudCBleGNlcHRpb24gKGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQpIHdpdGggaXRzIHRyYWNlYmFjaywKLSAqIG9yIGRpc3BsYXkgdGhlIGN1cnJlbnQgUHl0aG9uIHN0YWNrLgotICoKLSAqIERvbid0IGNhbGwgUHlFcnJfUHJpbnRFeCgpIGFuZCB0aGUgZXhjZXB0IGhvb2ssIGJlY2F1c2UgUHlfRmF0YWxFcnJvcigpIGlzCi0gKiBjYWxsZWQgb24gY2F0YXN0cm9waGljIGNhc2VzLiAqLwotCi1zdGF0aWMgdm9pZAotX1B5X1ByaW50RmF0YWxFcnJvcihpbnQgZmQpCi17Ci0gICAgUHlPYmplY3QgKmZlcnIsICpyZXM7Ci0gICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnYsICp0YjsKLSAgICBpbnQgaGFzX3RiOwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKLQotICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2LCAmdGIpOwotICAgIGlmIChleGNlcHRpb24gPT0gTlVMTCkgewotICAgICAgICAvKiBObyBjdXJyZW50IGV4Y2VwdGlvbiAqLwotICAgICAgICBnb3RvIGRpc3BsYXlfc3RhY2s7Ci0gICAgfQotCi0gICAgZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwotICAgIGlmIChmZXJyID09IE5VTEwgfHwgZmVyciA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIC8qIHN5cy5zdGRlcnIgaXMgbm90IHNldCB5ZXQgb3Igc2V0IHRvIE5vbmUsCi0gICAgICAgICAgIG5vIG5lZWQgdG8gdHJ5IHRvIGRpc3BsYXkgdGhlIGV4Y2VwdGlvbiAqLwotICAgICAgICBnb3RvIGRpc3BsYXlfc3RhY2s7Ci0gICAgfQotCi0gICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGNlcHRpb24sICZ2LCAmdGIpOwotICAgIGlmICh0YiA9PSBOVUxMKSB7Ci0gICAgICAgIHRiID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHRiKTsKLSAgICB9Ci0gICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHYsIHRiKTsKLSAgICBpZiAoZXhjZXB0aW9uID09IE5VTEwpIHsKLSAgICAgICAgLyogUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCkgZmFpbGVkICovCi0gICAgICAgIGdvdG8gZGlzcGxheV9zdGFjazsKLSAgICB9Ci0KLSAgICBoYXNfdGIgPSAodGIgIT0gTlVMTCAmJiB0YiAhPSBQeV9Ob25lKTsKLSAgICBQeUVycl9EaXNwbGF5KGV4Y2VwdGlvbiwgdiwgdGIpOwotICAgIFB5X1hERUNSRUYoZXhjZXB0aW9uKTsKLSAgICBQeV9YREVDUkVGKHYpOwotICAgIFB5X1hERUNSRUYodGIpOwotCi0gICAgLyogc3lzLnN0ZGVyciBtYXkgYmUgYnVmZmVyZWQ6IGNhbGwgc3lzLnN0ZGVyci5mbHVzaCgpICovCi0gICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmZXJyLCAmUHlJZF9mbHVzaCwgIiIpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICBlbHNlCi0gICAgICAgIFB5X0RFQ1JFRihyZXMpOwotCi0gICAgaWYgKGhhc190YikKLSAgICAgICAgcmV0dXJuOwotCi1kaXNwbGF5X3N0YWNrOgotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgLyogUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKSB3b3JrcyBldmVuIGlmIHRoZSBHSUwgd2FzIHJlbGVhc2VkICovCi0gICAgdHN0YXRlID0gUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKTsKLSNlbHNlCi0gICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKLSNlbmRpZgotICAgIGlmICh0c3RhdGUgPT0gTlVMTCkgewotICAgICAgICAvKiBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHMoKSByZXF1aXJlcyB0aGUgdGhyZWFkIHN0YXRlIHRvIGRpc3BsYXkKLSAgICAgICAgICogZnJhbWVzICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmcHV0YygnXG4nLCBzdGRlcnIpOwotICAgIGZmbHVzaChzdGRlcnIpOwotCi0gICAgLyogZGlzcGxheSB0aGUgY3VycmVudCBQeXRob24gc3RhY2sgKi8KLSAgICBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHMoZmQsIHRzdGF0ZS0+aW50ZXJwLCB0c3RhdGUpOwotfQotCi0vKiBQcmludCBmYXRhbCBlcnJvciBtZXNzYWdlIGFuZCBhYm9ydCAqLwotCi12b2lkCi1QeV9GYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBjb25zdCBpbnQgZmQgPSBmaWxlbm8oc3RkZXJyKTsKLSAgICBzdGF0aWMgaW50IHJlZW50cmFudCA9IDA7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgIHNpemVfdCBsZW47Ci0gICAgV0NIQVIqIGJ1ZmZlcjsKLSAgICBzaXplX3QgaTsKLSNlbmRpZgotCi0gICAgaWYgKHJlZW50cmFudCkgewotICAgICAgICAvKiBQeV9GYXRhbEVycm9yKCkgY2F1c2VkIGEgc2Vjb25kIGZhdGFsIGVycm9yLgotICAgICAgICAgICBFeGFtcGxlOiBmbHVzaF9zdGRfZmlsZXMoKSByYWlzZXMgYSByZWN1cnNpb24gZXJyb3IuICovCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0gICAgcmVlbnRyYW50ID0gMTsKLQotICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAlc1xuIiwgbXNnKTsKLSAgICBmZmx1c2goc3RkZXJyKTsgLyogaXQgaGVscHMgaW4gV2luZG93cyBkZWJ1ZyBidWlsZCAqLwotCi0gICAgLyogUHJpbnQgdGhlIGV4Y2VwdGlvbiAoaWYgYW4gZXhjZXB0aW9uIGlzIHNldCkgd2l0aCBpdHMgdHJhY2ViYWNrLAotICAgICAqIG9yIGRpc3BsYXkgdGhlIGN1cnJlbnQgUHl0aG9uIHN0YWNrLiAqLwotICAgIF9QeV9QcmludEZhdGFsRXJyb3IoZmQpOwotCi0gICAgLyogRmx1c2ggc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciAqLwotICAgIGZsdXNoX3N0ZF9maWxlcygpOwotCi0gICAgLyogVGhlIG1haW4gcHVycG9zZSBvZiBmYXVsdGhhbmRsZXIgaXMgdG8gZGlzcGxheSB0aGUgdHJhY2ViYWNrLiBXZSBhbHJlYWR5Ci0gICAgICogZGlkIG91ciBiZXN0IHRvIGRpc3BsYXkgaXQuIFNvIGZhdWx0aGFuZGxlciBjYW4gbm93IGJlIGRpc2FibGVkLgotICAgICAqIChEb24ndCB0cmlnZ2VyIGl0IG9uIGFib3J0KCkuKSAqLwotICAgIF9QeUZhdWx0aGFuZGxlcl9GaW5pKCk7Ci0KLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgbGVuID0gc3RybGVuKG1zZyk7Ci0KLSAgICAvKiBDb252ZXJ0IHRoZSBtZXNzYWdlIHRvIHdjaGFyX3QuIFRoaXMgdXNlcyBhIHNpbXBsZSBvbmUtdG8tb25lCi0gICAgY29udmVyc2lvbiwgYXNzdW1pbmcgdGhhdCB0aGUgdGhpcyBlcnJvciBtZXNzYWdlIGFjdHVhbGx5IHVzZXMgQVNDSUkKLSAgICBvbmx5LiBJZiB0aGlzIGNlYXNlcyB0byBiZSB0cnVlLCB3ZSB3aWxsIGhhdmUgdG8gY29udmVydC4gKi8KLSAgICBidWZmZXIgPSBhbGxvY2EoIChsZW4rMSkgKiAoc2l6ZW9mICpidWZmZXIpKTsKLSAgICBmb3IoIGk9MDsgaTw9bGVuOyArK2kpCi0gICAgICAgIGJ1ZmZlcltpXSA9IG1zZ1tpXTsKLSAgICBPdXRwdXREZWJ1Z1N0cmluZ1coTCJGYXRhbCBQeXRob24gZXJyb3I6ICIpOwotICAgIE91dHB1dERlYnVnU3RyaW5nVyhidWZmZXIpOwotICAgIE91dHB1dERlYnVnU3RyaW5nVyhMIlxuIik7Ci0jZW5kaWYgLyogTVNfV0lORE9XUyAqLwotCi1leGl0OgotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgZGVmaW5lZChfREVCVUcpCi0gICAgRGVidWdCcmVhaygpOwotI2VuZGlmCi0gICAgYWJvcnQoKTsKLX0KLQotLyogQ2xlYW4gdXAgYW5kIGV4aXQgKi8KLQotI2lmZGVmIFdJVEhfVEhSRUFECi0jaW5jbHVkZSAicHl0aHJlYWQuaCIKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCAoKnB5ZXhpdGZ1bmMpKHZvaWQpID0gTlVMTDsKLS8qIEZvciB0aGUgYXRleGl0IG1vZHVsZS4gKi8KLXZvaWQgX1B5X1B5QXRFeGl0KHZvaWQgKCpmdW5jKSh2b2lkKSkKLXsKLSAgICBweWV4aXRmdW5jID0gZnVuYzsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGxfcHlfZXhpdGZ1bmNzKHZvaWQpCi17Ci0gICAgaWYgKHB5ZXhpdGZ1bmMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgKCpweWV4aXRmdW5jKSgpOwotICAgIFB5RXJyX0NsZWFyKCk7Ci19Ci0KLS8qIFdhaXQgdW50aWwgdGhyZWFkaW5nLl9zaHV0ZG93biBjb21wbGV0ZXMsIHByb3ZpZGVkCi0gICB0aGUgdGhyZWFkaW5nIG1vZHVsZSB3YXMgaW1wb3J0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLgotICAgVGhlIHNodXRkb3duIHJvdXRpbmUgd2lsbCB3YWl0IHVudGlsIGFsbCBub24tZGFlbW9uCi0gICAidGhyZWFkaW5nIiB0aHJlYWRzIGhhdmUgY29tcGxldGVkLiAqLwotc3RhdGljIHZvaWQKLXdhaXRfZm9yX3RocmVhZF9zaHV0ZG93bih2b2lkKQotewotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgX1B5X0lERU5USUZJRVIoX3NodXRkb3duKTsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7Ci0gICAgUHlPYmplY3QgKnRocmVhZGluZyA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHRzdGF0ZS0+aW50ZXJwLT5tb2R1bGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyZWFkaW5nIik7Ci0gICAgaWYgKHRocmVhZGluZyA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIHRocmVhZGluZyBub3QgaW1wb3J0ZWQgKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHRocmVhZGluZywgJlB5SWRfX3NodXRkb3duLCAiIik7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZSh0aHJlYWRpbmcpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgfQotICAgIFB5X0RFQ1JFRih0aHJlYWRpbmcpOwotI2VuZGlmCi19Ci0KLSNkZWZpbmUgTkVYSVRGVU5DUyAzMgotc3RhdGljIHZvaWQgKCpleGl0ZnVuY3NbTkVYSVRGVU5DU10pKHZvaWQpOwotc3RhdGljIGludCBuZXhpdGZ1bmNzID0gMDsKLQotaW50IFB5X0F0RXhpdCh2b2lkICgqZnVuYykodm9pZCkpCi17Ci0gICAgaWYgKG5leGl0ZnVuY3MgPj0gTkVYSVRGVU5DUykKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGV4aXRmdW5jc1tuZXhpdGZ1bmNzKytdID0gZnVuYzsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGxfbGxfZXhpdGZ1bmNzKHZvaWQpCi17Ci0gICAgd2hpbGUgKG5leGl0ZnVuY3MgPiAwKQotICAgICAgICAoKmV4aXRmdW5jc1stLW5leGl0ZnVuY3NdKSgpOwotCi0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgZmZsdXNoKHN0ZGVycik7Ci19Ci0KLXZvaWQKLVB5X0V4aXQoaW50IHN0cykKLXsKLSAgICBQeV9GaW5hbGl6ZSgpOwotCi0gICAgZXhpdChzdHMpOwotfQotCi1zdGF0aWMgdm9pZAotaW5pdHNpZ3Modm9pZCkKLXsKLSNpZmRlZiBTSUdQSVBFCi0gICAgUHlPU19zZXRzaWcoU0lHUElQRSwgU0lHX0lHTik7Ci0jZW5kaWYKLSNpZmRlZiBTSUdYRloKLSAgICBQeU9TX3NldHNpZyhTSUdYRlosIFNJR19JR04pOwotI2VuZGlmCi0jaWZkZWYgU0lHWEZTWgotICAgIFB5T1Nfc2V0c2lnKFNJR1hGU1osIFNJR19JR04pOwotI2VuZGlmCi0gICAgUHlPU19Jbml0SW50ZXJydXB0cygpOyAvKiBNYXkgaW1wbHkgaW5pdHNpZ25hbCgpICovCi0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW1wb3J0IHNpZ25hbCIpOwotICAgIH0KLX0KLQotCi0vKiBSZXN0b3JlIHNpZ25hbHMgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaGFzIGNhbGxlZCBTSUdfSUdOIG9uIHRvIFNJR19ERkwuCi0gKgotICogQWxsIG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IHVzZSBhc3luYy1zaWduYWwtc2FmZSBmdW5jdGlvbnMsCi0gKiBsaXN0ZWQgYXQgYG1hbiA3IHNpZ25hbGAgb3IKLSAqIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sLgotICovCi12b2lkCi1fUHlfUmVzdG9yZVNpZ25hbHModm9pZCkKLXsKLSNpZmRlZiBTSUdQSVBFCi0gICAgUHlPU19zZXRzaWcoU0lHUElQRSwgU0lHX0RGTCk7Ci0jZW5kaWYKLSNpZmRlZiBTSUdYRloKLSAgICBQeU9TX3NldHNpZyhTSUdYRlosIFNJR19ERkwpOwotI2VuZGlmCi0jaWZkZWYgU0lHWEZTWgotICAgIFB5T1Nfc2V0c2lnKFNJR1hGU1osIFNJR19ERkwpOwotI2VuZGlmCi19Ci0KLQotLyoKLSAqIFRoZSBmaWxlIGRlc2NyaXB0b3IgZmQgaXMgY29uc2lkZXJlZCBgYGludGVyYWN0aXZlJycgaWYgZWl0aGVyCi0gKiAgIGEpIGlzYXR0eShmZCkgaXMgVFJVRSwgb3IKLSAqICAgYikgdGhlIC1pIGZsYWcgd2FzIGdpdmVuLCBhbmQgdGhlIGZpbGVuYW1lIGFzc29jaWF0ZWQgd2l0aAotICogICAgICB0aGUgZGVzY3JpcHRvciBpcyBOVUxMIG9yICI8c3RkaW4+IiBvciAiPz8/Ii4KLSAqLwotaW50Ci1QeV9GZElzSW50ZXJhY3RpdmUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotICAgIGlmIChpc2F0dHkoKGludClmaWxlbm8oZnApKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgaWYgKCFQeV9JbnRlcmFjdGl2ZUZsYWcpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoZmlsZW5hbWUgPT0gTlVMTCkgfHwKLSAgICAgICAgICAgKHN0cmNtcChmaWxlbmFtZSwgIjxzdGRpbj4iKSA9PSAwKSB8fAotICAgICAgICAgICAoc3RyY21wKGZpbGVuYW1lLCAiPz8/IikgPT0gMCk7Ci19Ci0KIAogI2lmIGRlZmluZWQoVVNFX1NUQUNLQ0hFQ0spCiAjaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChfTVNDX1ZFUikKQEAgLTI4OTAsNzQgKzE0MjUsNyBAQAogCiAjZW5kaWYgLyogVVNFX1NUQUNLQ0hFQ0sgKi8KIAotCi0vKiBXcmFwcGVycyBhcm91bmQgc2lnYWN0aW9uKCkgb3Igc2lnbmFsKCkuICovCi0KLVB5T1Nfc2lnaGFuZGxlcl90Ci1QeU9TX2dldHNpZyhpbnQgc2lnKQotewotI2lmZGVmIEhBVkVfU0lHQUNUSU9OCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBjb250ZXh0OwotICAgIGlmIChzaWdhY3Rpb24oc2lnLCBOVUxMLCAmY29udGV4dCkgPT0gLTEpCi0gICAgICAgIHJldHVybiBTSUdfRVJSOwotICAgIHJldHVybiBjb250ZXh0LnNhX2hhbmRsZXI7Ci0jZWxzZQotICAgIFB5T1Nfc2lnaGFuZGxlcl90IGhhbmRsZXI7Ci0vKiBTcGVjaWFsIHNpZ25hbCBoYW5kbGluZyBmb3IgdGhlIHNlY3VyZSBDUlQgaW4gVmlzdWFsIFN0dWRpbyAyMDA1ICovCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTQwMAotICAgIHN3aXRjaCAoc2lnKSB7Ci0gICAgLyogT25seSB0aGVzZSBzaWduYWxzIGFyZSB2YWxpZCAqLwotICAgIGNhc2UgU0lHSU5UOgotICAgIGNhc2UgU0lHSUxMOgotICAgIGNhc2UgU0lHRlBFOgotICAgIGNhc2UgU0lHU0VHVjoKLSAgICBjYXNlIFNJR1RFUk06Ci0gICAgY2FzZSBTSUdCUkVBSzoKLSAgICBjYXNlIFNJR0FCUlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIC8qIERvbid0IGNhbGwgc2lnbmFsKCkgd2l0aCBvdGhlciB2YWx1ZXMgb3IgaXQgd2lsbCBhc3NlcnQgKi8KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gU0lHX0VSUjsKLSAgICB9Ci0jZW5kaWYgLyogX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMCAqLwotICAgIGhhbmRsZXIgPSBzaWduYWwoc2lnLCBTSUdfSUdOKTsKLSAgICBpZiAoaGFuZGxlciAhPSBTSUdfRVJSKQotICAgICAgICBzaWduYWwoc2lnLCBoYW5kbGVyKTsKLSAgICByZXR1cm4gaGFuZGxlcjsKLSNlbmRpZgotfQotCi0vKgotICogQWxsIG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IHVzZSBhc3luYy1zaWduYWwtc2FmZSBmdW5jdGlvbnMsCi0gKiBsaXN0ZWQgYXQgYG1hbiA3IHNpZ25hbGAgb3IKLSAqIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMl8wNC5odG1sLgotICovCi1QeU9TX3NpZ2hhbmRsZXJfdAotUHlPU19zZXRzaWcoaW50IHNpZywgUHlPU19zaWdoYW5kbGVyX3QgaGFuZGxlcikKLXsKLSNpZmRlZiBIQVZFX1NJR0FDVElPTgotICAgIC8qIFNvbWUgY29kZSBpbiBNb2R1bGVzL3NpZ25hbG1vZHVsZS5jIGRlcGVuZHMgb24gc2lnYWN0aW9uKCkgYmVpbmcKLSAgICAgKiB1c2VkIGhlcmUgaWYgSEFWRV9TSUdBQ1RJT04gaXMgZGVmaW5lZC4gIEZpeCB0aGF0IGlmIHRoaXMgY29kZQotICAgICAqIGNoYW5nZXMgdG8gaW52YWxpZGF0ZSB0aGF0IGFzc3VtcHRpb24uCi0gICAgICovCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBjb250ZXh0LCBvY29udGV4dDsKLSAgICBjb250ZXh0LnNhX2hhbmRsZXIgPSBoYW5kbGVyOwotICAgIHNpZ2VtcHR5c2V0KCZjb250ZXh0LnNhX21hc2spOwotICAgIGNvbnRleHQuc2FfZmxhZ3MgPSAwOwotICAgIGlmIChzaWdhY3Rpb24oc2lnLCAmY29udGV4dCwgJm9jb250ZXh0KSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIFNJR19FUlI7Ci0gICAgcmV0dXJuIG9jb250ZXh0LnNhX2hhbmRsZXI7Ci0jZWxzZQotICAgIFB5T1Nfc2lnaGFuZGxlcl90IG9sZGhhbmRsZXI7Ci0gICAgb2xkaGFuZGxlciA9IHNpZ25hbChzaWcsIGhhbmRsZXIpOwotI2lmZGVmIEhBVkVfU0lHSU5URVJSVVBUCi0gICAgc2lnaW50ZXJydXB0KHNpZywgMSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gb2xkaGFuZGxlcjsKLSNlbmRpZgotfQotCi0vKiBEZXByZWNhdGVkIEMgQVBJIGZ1bmN0aW9ucyBzdGlsbCBwcm92aWRlZCBmb3IgYmluYXJ5IGNvbXBhdGlibGl0eSAqLworLyogRGVwcmVjYXRlZCBDIEFQSSBmdW5jdGlvbnMgc3RpbGwgcHJvdmlkZWQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5ICovCiAKICN1bmRlZiBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGUKIFB5QVBJX0ZVTkMobm9kZSAqKQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5dGltZS5jIGIvUHl0aG9uL3B5dGltZS5jCmluZGV4IGRlNmE0MWYuLjdmNjU4MjQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXRpbWUuYworKysgYi9QeXRob24vcHl0aW1lLmMKQEAgLTMsMTE1ICszLDI1IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkgJiYgZGVmaW5lZChIQVZFX0ZUSU1FKQotICAvKgotICAgKiBfUHlUaW1lX2dldHRpbWVvZmRheSBmYWxscyBiYWNrIHRvIGZ0aW1lIHdoZW4gZ2V0dHRpbWVvZmRheSBmYWlscyBiZWNhdXNlIHRoZSBsYXR0ZXIKLSAgICogbWlnaHQgZmFpbCBvbiBzb21lIHBsYXRmb3Jtcy4gVGhpcyBmYWxsYmFjayBpcyB1bndhbnRlZCBvbiBNYWNPU1ggYmVjYXVzZQotICAgKiB0aGF0IG1ha2VzIGl0IGltcG9zc2libGUgdG8gdXNlIGEgYmluYXJ5IGJ1aWxkIG9uIE9TWCAxMC40IG9uIGVhcmxpZXIKLSAgICogcmVsZWFzZXMgb2YgdGhlIE9TLiBUaGVyZWZvcmUgY2xhaW0gd2UgZG9uJ3Qgc3VwcG9ydCBmdGltZS4KLSAgICovCi0jIHVuZGVmIEhBVkVfRlRJTUUKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPiAgIC8qIG1hY2hfYWJzb2x1dGVfdGltZSgpLCBtYWNoX3RpbWViYXNlX2luZm8oKSAqLwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfRlRJTUUpICYmICFkZWZpbmVkKE1TX1dJTkRPV1MpCi0jaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci1leHRlcm4gaW50IGZ0aW1lKHN0cnVjdCB0aW1lYiAqKTsKLSNlbmRpZgorLyogVG8gbWlsbGlzZWNvbmQgKDEwXi0zKSAqLworI2RlZmluZSBTRUNfVE9fTVMgMTAwMAogCi1zdGF0aWMgdm9pZAotcHlnZXR0aW1lb2ZkYXkoX1B5VGltZV90aW1ldmFsICp0cCwgX1B5X2Nsb2NrX2luZm9fdCAqaW5mbykKLXsKLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgRklMRVRJTUUgc3lzdGVtX3RpbWU7Ci0gICAgVUxBUkdFX0lOVEVHRVIgbGFyZ2U7Ci0gICAgVUxPTkdMT05HIG1pY3Jvc2Vjb25kczsKKy8qIFRvIG1pY3Jvc2Vjb25kcyAoMTBeLTYpICovCisjZGVmaW5lIE1TX1RPX1VTIDEwMDAKKyNkZWZpbmUgU0VDX1RPX1VTIChTRUNfVE9fTVMgKiBNU19UT19VUykKIAotICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZzeXN0ZW1fdGltZSk7Ci0gICAgbGFyZ2UudS5Mb3dQYXJ0ID0gc3lzdGVtX3RpbWUuZHdMb3dEYXRlVGltZTsKLSAgICBsYXJnZS51LkhpZ2hQYXJ0ID0gc3lzdGVtX3RpbWUuZHdIaWdoRGF0ZVRpbWU7Ci0gICAgLyogMTEsNjQ0LDQ3Myw2MDAsMDAwLDAwMDogbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBiZXR3ZWVuCi0gICAgICAgdGhlIDFzdCBqYW51YXJ5IDE2MDEgYW5kIHRoZSAxc3QgamFudWFyeSAxOTcwICgzNjkgeWVhcnMgKyA4OSBsZWFwCi0gICAgICAgZGF5cykuICovCi0gICAgbWljcm9zZWNvbmRzID0gbGFyZ2UuUXVhZFBhcnQgLyAxMCAtIDExNjQ0NDczNjAwMDAwMDAwOwotICAgIHRwLT50dl9zZWMgPSBtaWNyb3NlY29uZHMgLyAxMDAwMDAwOwotICAgIHRwLT50dl91c2VjID0gbWljcm9zZWNvbmRzICUgMTAwMDAwMDsKLSAgICBpZiAoaW5mbykgewotICAgICAgICBEV09SRCB0aW1lQWRqdXN0bWVudCwgdGltZUluY3JlbWVudDsKLSAgICAgICAgQk9PTCBpc1RpbWVBZGp1c3RtZW50RGlzYWJsZWQ7CisvKiBUbyBuYW5vc2Vjb25kcyAoMTBeLTkpICovCisjZGVmaW5lIFVTX1RPX05TIDEwMDAKKyNkZWZpbmUgTVNfVE9fTlMgKE1TX1RPX1VTICogVVNfVE9fTlMpCisjZGVmaW5lIFNFQ19UT19OUyAoU0VDX1RPX01TICogTVNfVE9fTlMpCiAKLSAgICAgICAgaW5mby0+aW1wbGVtZW50YXRpb24gPSAiR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKSI7Ci0gICAgICAgIGluZm8tPm1vbm90b25pYyA9IDA7Ci0gICAgICAgICh2b2lkKSBHZXRTeXN0ZW1UaW1lQWRqdXN0bWVudCgmdGltZUFkanVzdG1lbnQsICZ0aW1lSW5jcmVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlzVGltZUFkanVzdG1lbnREaXNhYmxlZCk7Ci0gICAgICAgIGluZm8tPnJlc29sdXRpb24gPSB0aW1lSW5jcmVtZW50ICogMWUtNzsKLSAgICAgICAgaW5mby0+YWRqdXN0YWJsZSA9IDE7Ci0gICAgfQotI2Vsc2UKLSAgICAvKiBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBnZXQgdGhlIHRpbWU6Ci0gICAgICAoMSkgZ2V0dGltZW9mZGF5KCkgLS0gcmVzb2x1dGlvbiBpbiBtaWNyb3NlY29uZHMKLSAgICAgICgyKSBmdGltZSgpIC0tIHJlc29sdXRpb24gaW4gbWlsbGlzZWNvbmRzCi0gICAgICAoMykgdGltZSgpIC0tIHJlc29sdXRpb24gaW4gc2Vjb25kcwotICAgICAgSW4gYWxsIGNhc2VzIHRoZSByZXR1cm4gdmFsdWUgaW4gYSB0aW1ldmFsIHN0cnVjdC4KLSAgICAgIFNpbmNlIG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBTQ08gT0RUIDMuMCkgZ2V0dGltZW9mZGF5KCkgbWF5Ci0gICAgICBmYWlsLCBzbyB3ZSBmYWxsIGJhY2sgb24gZnRpbWUoKSBvciB0aW1lKCkuCi0gICAgICBOb3RlOiBjbG9jayByZXNvbHV0aW9uIGRvZXMgbm90IGltcGx5IGNsb2NrIGFjY3VyYWN5ISAqLwotCi0jaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKLSAgICBpbnQgZXJyOwotI2lmZGVmIEdFVFRJTUVPRkRBWV9OT19UWgotICAgIGVyciA9IGdldHRpbWVvZmRheSh0cCk7Ci0jZWxzZQotICAgIGVyciA9IGdldHRpbWVvZmRheSh0cCwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOwotI2VuZGlmCi0gICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgIGlmIChpbmZvKSB7Ci0gICAgICAgICAgICBpbmZvLT5pbXBsZW1lbnRhdGlvbiA9ICJnZXR0aW1lb2ZkYXkoKSI7Ci0gICAgICAgICAgICBpbmZvLT5yZXNvbHV0aW9uID0gMWUtNjsKLSAgICAgICAgICAgIGluZm8tPm1vbm90b25pYyA9IDA7Ci0gICAgICAgICAgICBpbmZvLT5hZGp1c3RhYmxlID0gMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmICAgLyogSEFWRV9HRVRUSU1FT0ZEQVkgKi8KLQotI2lmIGRlZmluZWQoSEFWRV9GVElNRSkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCB0aW1lYiB0OwotICAgICAgICBmdGltZSgmdCk7Ci0gICAgICAgIHRwLT50dl9zZWMgPSB0LnRpbWU7Ci0gICAgICAgIHRwLT50dl91c2VjID0gdC5taWxsaXRtICogMTAwMDsKLSAgICAgICAgaWYgKGluZm8pIHsKLSAgICAgICAgICAgIGluZm8tPmltcGxlbWVudGF0aW9uID0gImZ0aW1lKCkiOwotICAgICAgICAgICAgaW5mby0+cmVzb2x1dGlvbiA9IDFlLTM7Ci0gICAgICAgICAgICBpbmZvLT5tb25vdG9uaWMgPSAwOwotICAgICAgICAgICAgaW5mby0+YWRqdXN0YWJsZSA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZSAvKiAhSEFWRV9GVElNRSAqLwotICAgIHRwLT50dl9zZWMgPSB0aW1lKE5VTEwpOwotICAgIHRwLT50dl91c2VjID0gMDsKLSAgICBpZiAoaW5mbykgewotICAgICAgICBpbmZvLT5pbXBsZW1lbnRhdGlvbiA9ICJ0aW1lKCkiOwotICAgICAgICBpbmZvLT5yZXNvbHV0aW9uID0gMS4wOwotICAgICAgICBpbmZvLT5tb25vdG9uaWMgPSAwOwotICAgICAgICBpbmZvLT5hZGp1c3RhYmxlID0gMTsKLSAgICB9Ci0jZW5kaWYgLyogIUhBVkVfRlRJTUUgKi8KLQotI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KLX0KLQotdm9pZAotX1B5VGltZV9nZXR0aW1lb2ZkYXkoX1B5VGltZV90aW1ldmFsICp0cCkKLXsKLSAgICBweWdldHRpbWVvZmRheSh0cCwgTlVMTCk7Ci19Ci0KLXZvaWQKLV9QeVRpbWVfZ2V0dGltZW9mZGF5X2luZm8oX1B5VGltZV90aW1ldmFsICp0cCwgX1B5X2Nsb2NrX2luZm9fdCAqaW5mbykKLXsKLSAgICBweWdldHRpbWVvZmRheSh0cCwgaW5mbyk7Ci19CisvKiBDb252ZXJzaW9uIGZyb20gbmFub3NlY29uZHMgKi8KKyNkZWZpbmUgTlNfVE9fTVMgKDEwMDAgKiAxMDAwKQorI2RlZmluZSBOU19UT19VUyAoMTAwMCkKIAogc3RhdGljIHZvaWQKIGVycm9yX3RpbWVfdF9vdmVyZmxvdyh2b2lkKQpAQCAtMTY4LDE3ICs3OCwxNSBAQAogICAgICAgICB9CiAKICAgICAgICAgZmxvYXRwYXJ0ICo9IGRlbm9taW5hdG9yOwotICAgICAgICBpZiAocm91bmQgPT0gX1B5VGltZV9ST1VORF9VUCkgewotICAgICAgICAgICAgaWYgKGludHBhcnQgPj0gMCkgewotICAgICAgICAgICAgICAgIGZsb2F0cGFydCA9IGNlaWwoZmxvYXRwYXJ0KTsKLSAgICAgICAgICAgICAgICBpZiAoZmxvYXRwYXJ0ID49IGRlbm9taW5hdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0cGFydCA9IDAuMDsKLSAgICAgICAgICAgICAgICAgICAgaW50cGFydCArPSAxLjA7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAocm91bmQgPT0gX1B5VGltZV9ST1VORF9DRUlMSU5HKSB7CisgICAgICAgICAgICBmbG9hdHBhcnQgPSBjZWlsKGZsb2F0cGFydCk7CisgICAgICAgICAgICBpZiAoZmxvYXRwYXJ0ID49IGRlbm9taW5hdG9yKSB7CisgICAgICAgICAgICAgICAgZmxvYXRwYXJ0ID0gMC4wOworICAgICAgICAgICAgICAgIGludHBhcnQgKz0gMS4wOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmxvYXRwYXJ0ID0gZmxvb3IoZmxvYXRwYXJ0KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZsb2F0cGFydCA9IGZsb29yKGZsb2F0cGFydCk7CiAgICAgICAgIH0KIAogICAgICAgICAqc2VjID0gKHRpbWVfdClpbnRwYXJ0OwpAQCAtMjA3LDEyICsxMTUsMTAgQEAKICAgICAgICAgZG91YmxlIGQsIGludHBhcnQsIGVycjsKIAogICAgICAgICBkID0gUHlGbG9hdF9Bc0RvdWJsZShvYmopOwotICAgICAgICBpZiAocm91bmQgPT0gX1B5VGltZV9ST1VORF9VUCkgewotICAgICAgICAgICAgaWYgKGQgPj0gMCkKLSAgICAgICAgICAgICAgICBkID0gY2VpbChkKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkID0gZmxvb3IoZCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHJvdW5kID09IF9QeVRpbWVfUk9VTkRfQ0VJTElORykKKyAgICAgICAgICAgIGQgPSBjZWlsKGQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkID0gZmxvb3IoZCk7CiAgICAgICAgICh2b2lkKW1vZGYoZCwgJmludHBhcnQpOwogCiAgICAgICAgICpzZWMgPSAodGltZV90KWludHBhcnQ7CkBAIC0yNDUsOCArMTUxLDU0NiBAQAogICAgIHJldHVybiBfUHlUaW1lX09iamVjdFRvRGVub21pbmF0b3Iob2JqLCBzZWMsIHVzZWMsIDFlNiwgcm91bmQpOwogfQogCi12b2lkCi1fUHlUaW1lX0luaXQoKQorc3RhdGljIHZvaWQKK19QeVRpbWVfb3ZlcmZsb3codm9pZCkKIHsKLSAgICAvKiBEbyBub3RoaW5nLiAgTmVlZGVkIHRvIGZvcmNlIGxpbmtpbmcuICovCisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJ0aW1lc3RhbXAgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gQyBfUHlUaW1lX3QiKTsKK30KKworX1B5VGltZV90CitfUHlUaW1lX0Zyb21TZWNvbmRzKGludCBzZWNvbmRzKQoreworICAgIF9QeVRpbWVfdCB0OworICAgIC8qIGVuc3VyZSB0aGF0IGludGVnZXIgb3ZlcmZsb3cgY2Fubm90IGhhcHBlbiwgaW50IHR5cGUgc2hvdWxkIGhhdmUgMzIKKyAgICAgICBiaXRzLCB3aGVyZWFzIF9QeVRpbWVfdCB0eXBlIGhhcyBhdCBsZWFzdCA2NCBiaXRzIChTRUNfVE9fTVMgdGFrZXMgMzAKKyAgICAgICBiaXRzKS4gKi8KKyAgICBhc3NlcnQoKHNlY29uZHMgPj0gMCAmJiBzZWNvbmRzIDw9IF9QeVRpbWVfTUFYIC8gU0VDX1RPX05TKQorICAgICAgICAgICB8fCAoc2Vjb25kcyA8IDAgJiYgc2Vjb25kcyA+PSBfUHlUaW1lX01JTiAvIFNFQ19UT19OUykpOworICAgIHQgPSAoX1B5VGltZV90KXNlY29uZHMgKiBTRUNfVE9fTlM7CisgICAgcmV0dXJuIHQ7Cit9CisKK19QeVRpbWVfdAorX1B5VGltZV9Gcm9tTmFub3NlY29uZHMoUFlfTE9OR19MT05HIG5zKQoreworICAgIF9QeVRpbWVfdCB0OworICAgIGFzc2VydChzaXplb2YoUFlfTE9OR19MT05HKSA8PSBzaXplb2YoX1B5VGltZV90KSk7CisgICAgdCA9IFB5X1NBRkVfRE9XTkNBU1QobnMsIFBZX0xPTkdfTE9ORywgX1B5VGltZV90KTsKKyAgICByZXR1cm4gdDsKK30KKworI2lmZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorc3RhdGljIGludAorX1B5VGltZV9Gcm9tVGltZXNwZWMoX1B5VGltZV90ICp0cCwgc3RydWN0IHRpbWVzcGVjICp0cywgaW50IHJhaXNlKQoreworICAgIF9QeVRpbWVfdCB0OworICAgIGludCByZXMgPSAwOworCisgICAgdCA9IChfUHlUaW1lX3QpdHMtPnR2X3NlYyAqIFNFQ19UT19OUzsKKyAgICBpZiAodCAvIFNFQ19UT19OUyAhPSB0cy0+dHZfc2VjKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIF9QeVRpbWVfb3ZlcmZsb3coKTsKKyAgICAgICAgcmVzID0gLTE7CisgICAgfQorCisgICAgdCArPSB0cy0+dHZfbnNlYzsKKworICAgICp0cCA9IHQ7CisgICAgcmV0dXJuIHJlczsKK30KKyNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCitzdGF0aWMgaW50CitfUHlUaW1lX0Zyb21UaW1ldmFsKF9QeVRpbWVfdCAqdHAsIHN0cnVjdCB0aW1ldmFsICp0diwgaW50IHJhaXNlKQoreworICAgIF9QeVRpbWVfdCB0OworICAgIGludCByZXMgPSAwOworCisgICAgdCA9IChfUHlUaW1lX3QpdHYtPnR2X3NlYyAqIFNFQ19UT19OUzsKKyAgICBpZiAodCAvIFNFQ19UT19OUyAhPSB0di0+dHZfc2VjKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIF9QeVRpbWVfb3ZlcmZsb3coKTsKKyAgICAgICAgcmVzID0gLTE7CisgICAgfQorCisgICAgdCArPSAoX1B5VGltZV90KXR2LT50dl91c2VjICogVVNfVE9fTlM7CisKKyAgICAqdHAgPSB0OworICAgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorX1B5VGltZV9Gcm9tT2JqZWN0KF9QeVRpbWVfdCAqdCwgUHlPYmplY3QgKm9iaiwgX1B5VGltZV9yb3VuZF90IHJvdW5kLAorICAgICAgICAgICAgICAgICAgIGxvbmcgdG9fbmFub3NlY29uZHMpCit7CisgICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgeworICAgICAgICAvKiB2b2xhdGlsZSBhdm9pZHMgdW5zYWZlIG9wdGltaXphdGlvbiBvbiBmbG9hdCBlbmFibGVkIGJ5IGdjYyAtTzMgKi8KKyAgICAgICAgdm9sYXRpbGUgZG91YmxlIGQsIGVycjsKKworICAgICAgICAvKiBjb252ZXJ0IHRvIGEgbnVtYmVyIG9mIG5hbm9zZWNvbmRzICovCisgICAgICAgIGQgPSBQeUZsb2F0X0FzRG91YmxlKG9iaik7CisgICAgICAgIGQgKj0gdG9fbmFub3NlY29uZHM7CisKKyAgICAgICAgaWYgKHJvdW5kID09IF9QeVRpbWVfUk9VTkRfQ0VJTElORykKKyAgICAgICAgICAgIGQgPSBjZWlsKGQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkID0gZmxvb3IoZCk7CisKKyAgICAgICAgKnQgPSAoX1B5VGltZV90KWQ7CisgICAgICAgIGVyciA9IGQgLSAoZG91YmxlKSp0OworICAgICAgICBpZiAoZmFicyhlcnIpID49IDEuMCkgeworICAgICAgICAgICAgX1B5VGltZV9vdmVyZmxvdygpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICBQWV9MT05HX0xPTkcgc2VjOworICAgICAgICBzZWMgPSBQeUxvbmdfQXNMb25nTG9uZyhvYmopOworICAgICAgICBhc3NlcnQoc2l6ZW9mKFBZX0xPTkdfTE9ORykgPD0gc2l6ZW9mKF9QeVRpbWVfdCkpOworI2Vsc2UKKyAgICAgICAgbG9uZyBzZWM7CisgICAgICAgIHNlYyA9IFB5TG9uZ19Bc0xvbmcob2JqKTsKKyAgICAgICAgYXNzZXJ0KHNpemVvZihQWV9MT05HX0xPTkcpIDw9IHNpemVvZihfUHlUaW1lX3QpKTsKKyNlbmRpZgorICAgICAgICBpZiAoc2VjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgICAgIF9QeVRpbWVfb3ZlcmZsb3coKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAqdCA9IHNlYyAqIHRvX25hbm9zZWNvbmRzOworICAgICAgICBpZiAoKnQgLyB0b19uYW5vc2Vjb25kcyAhPSBzZWMpIHsKKyAgICAgICAgICAgIF9QeVRpbWVfb3ZlcmZsb3coKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludAorX1B5VGltZV9Gcm9tU2Vjb25kc09iamVjdChfUHlUaW1lX3QgKnQsIFB5T2JqZWN0ICpvYmosIF9QeVRpbWVfcm91bmRfdCByb3VuZCkKK3sKKyAgICByZXR1cm4gX1B5VGltZV9Gcm9tT2JqZWN0KHQsIG9iaiwgcm91bmQsIFNFQ19UT19OUyk7Cit9CisKK2ludAorX1B5VGltZV9Gcm9tTWlsbGlzZWNvbmRzT2JqZWN0KF9QeVRpbWVfdCAqdCwgUHlPYmplY3QgKm9iaiwgX1B5VGltZV9yb3VuZF90IHJvdW5kKQoreworICAgIHJldHVybiBfUHlUaW1lX0Zyb21PYmplY3QodCwgb2JqLCByb3VuZCwgTVNfVE9fTlMpOworfQorCitkb3VibGUKK19QeVRpbWVfQXNTZWNvbmRzRG91YmxlKF9QeVRpbWVfdCB0KQoreworICAgIF9QeVRpbWVfdCBzZWMsIG5zOworICAgIC8qIERpdmlkZSB1c2luZyBpbnRlZ2VycyB0byBhdm9pZCByb3VuZGluZyBpc3N1ZXMgb24gdGhlIGludGVnZXIgcGFydC4KKyAgICAgICAxZS05IGNhbm5vdCBiZSBzdG9yZWQgZXhhY3RseSBpbiBJRUVFIDY0LWJpdC4gKi8KKyAgICBzZWMgPSB0IC8gU0VDX1RPX05TOworICAgIG5zID0gdCAlIFNFQ19UT19OUzsKKyAgICByZXR1cm4gKGRvdWJsZSlzZWMgKyAoZG91YmxlKW5zICogMWUtOTsKK30KKworUHlPYmplY3QgKgorX1B5VGltZV9Bc05hbm9zZWNvbmRzT2JqZWN0KF9QeVRpbWVfdCB0KQoreworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgYXNzZXJ0KHNpemVvZihQWV9MT05HX0xPTkcpID49IHNpemVvZihfUHlUaW1lX3QpKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKXQpOworI2Vsc2UKKyAgICBhc3NlcnQoc2l6ZW9mKGxvbmcpID49IHNpemVvZihfUHlUaW1lX3QpKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKXQpOworI2VuZGlmCit9CisKK3N0YXRpYyBfUHlUaW1lX3QKK19QeVRpbWVfRGl2aWRlKGNvbnN0IF9QeVRpbWVfdCB0LCBjb25zdCBfUHlUaW1lX3QgaywKKyAgICAgICAgICAgICAgIGNvbnN0IF9QeVRpbWVfcm91bmRfdCByb3VuZCkKK3sKKyAgICBhc3NlcnQoayA+IDEpOworICAgIGlmIChyb3VuZCA9PSBfUHlUaW1lX1JPVU5EX0NFSUxJTkcpIHsKKyAgICAgICAgaWYgKHQgPj0gMCkKKyAgICAgICAgICAgIHJldHVybiAodCArIGsgLSAxKSAvIGs7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB0IC8gazsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICh0ID49IDApCisgICAgICAgICAgICByZXR1cm4gdCAvIGs7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAodCAtIChrIC0gMSkpIC8gazsKKyAgICB9Cit9CisKK19QeVRpbWVfdAorX1B5VGltZV9Bc01pbGxpc2Vjb25kcyhfUHlUaW1lX3QgdCwgX1B5VGltZV9yb3VuZF90IHJvdW5kKQoreworICAgIHJldHVybiBfUHlUaW1lX0RpdmlkZSh0LCBOU19UT19NUywgcm91bmQpOworfQorCitfUHlUaW1lX3QKK19QeVRpbWVfQXNNaWNyb3NlY29uZHMoX1B5VGltZV90IHQsIF9QeVRpbWVfcm91bmRfdCByb3VuZCkKK3sKKyAgICByZXR1cm4gX1B5VGltZV9EaXZpZGUodCwgTlNfVE9fVVMsIHJvdW5kKTsKK30KKworc3RhdGljIGludAorX1B5VGltZV9Bc1RpbWV2YWxfaW1wbChfUHlUaW1lX3QgdCwgX1B5VGltZV90ICpwX3NlY3MsIGludCAqcF91cywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5VGltZV9yb3VuZF90IHJvdW5kKQoreworICAgIF9QeVRpbWVfdCBzZWNzLCBuczsKKyAgICBpbnQgdXNlYzsKKyAgICBpbnQgcmVzID0gMDsKKworICAgIHNlY3MgPSB0IC8gU0VDX1RPX05TOworICAgIG5zID0gdCAlIFNFQ19UT19OUzsKKworICAgIHVzZWMgPSAoaW50KV9QeVRpbWVfRGl2aWRlKG5zLCBVU19UT19OUywgcm91bmQpOworICAgIGlmICh1c2VjIDwgMCkgeworICAgICAgICB1c2VjICs9IFNFQ19UT19VUzsKKyAgICAgICAgaWYgKHNlY3MgIT0gX1B5VGltZV9NSU4pCisgICAgICAgICAgICBzZWNzIC09IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcyA9IC0xOworICAgIH0KKyAgICBlbHNlIGlmICh1c2VjID49IFNFQ19UT19VUykgeworICAgICAgICB1c2VjIC09IFNFQ19UT19VUzsKKyAgICAgICAgaWYgKHNlY3MgIT0gX1B5VGltZV9NQVgpCisgICAgICAgICAgICBzZWNzICs9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcyA9IC0xOworICAgIH0KKyAgICBhc3NlcnQoMCA8PSB1c2VjICYmIHVzZWMgPCBTRUNfVE9fVVMpOworCisgICAgKnBfc2VjcyA9IHNlY3M7CisgICAgKnBfdXMgPSB1c2VjOworCisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAorX1B5VGltZV9Bc1RpbWV2YWxTdHJ1Y3RfaW1wbChfUHlUaW1lX3QgdCwgc3RydWN0IHRpbWV2YWwgKnR2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlUaW1lX3JvdW5kX3Qgcm91bmQsIGludCByYWlzZSkKK3sKKyAgICBfUHlUaW1lX3Qgc2VjczsKKyAgICBpbnQgdXM7CisgICAgaW50IHJlczsKKworICAgIHJlcyA9IF9QeVRpbWVfQXNUaW1ldmFsX2ltcGwodCwgJnNlY3MsICZ1cywgcm91bmQpOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIHR2LT50dl9zZWMgPSAobG9uZylzZWNzOworI2Vsc2UKKyAgICB0di0+dHZfc2VjID0gc2VjczsKKyNlbmRpZgorICAgIHR2LT50dl91c2VjID0gdXM7CisKKyAgICBpZiAocmVzIDwgMCB8fCAoX1B5VGltZV90KXR2LT50dl9zZWMgIT0gc2VjcykgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBlcnJvcl90aW1lX3Rfb3ZlcmZsb3coKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlUaW1lX0FzVGltZXZhbChfUHlUaW1lX3QgdCwgc3RydWN0IHRpbWV2YWwgKnR2LCBfUHlUaW1lX3JvdW5kX3Qgcm91bmQpCit7CisgICAgcmV0dXJuIF9QeVRpbWVfQXNUaW1ldmFsU3RydWN0X2ltcGwodCwgdHYsIHJvdW5kLCAxKTsKK30KKworaW50CitfUHlUaW1lX0FzVGltZXZhbF9ub3JhaXNlKF9QeVRpbWVfdCB0LCBzdHJ1Y3QgdGltZXZhbCAqdHYsIF9QeVRpbWVfcm91bmRfdCByb3VuZCkKK3sKKyAgICByZXR1cm4gX1B5VGltZV9Bc1RpbWV2YWxTdHJ1Y3RfaW1wbCh0LCB0diwgcm91bmQsIDApOworfQorCitpbnQKK19QeVRpbWVfQXNUaW1ldmFsVGltZV90KF9QeVRpbWVfdCB0LCB0aW1lX3QgKnBfc2VjcywgaW50ICp1cywKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfcm91bmRfdCByb3VuZCkKK3sKKyAgICBfUHlUaW1lX3Qgc2VjczsKKyAgICBpbnQgcmVzOworCisgICAgcmVzID0gX1B5VGltZV9Bc1RpbWV2YWxfaW1wbCh0LCAmc2VjcywgdXMsIHJvdW5kKTsKKworICAgICpwX3NlY3MgPSBzZWNzOworCisgICAgaWYgKHJlcyA8IDAgfHwgKF9QeVRpbWVfdCkqcF9zZWNzICE9IHNlY3MpIHsKKyAgICAgICAgZXJyb3JfdGltZV90X292ZXJmbG93KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfQ0xPQ0tfR0VUVElNRSkgfHwgZGVmaW5lZChIQVZFX0tRVUVVRSkKK2ludAorX1B5VGltZV9Bc1RpbWVzcGVjKF9QeVRpbWVfdCB0LCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworICAgIF9QeVRpbWVfdCBzZWNzLCBuc2VjOworCisgICAgc2VjcyA9IHQgLyBTRUNfVE9fTlM7CisgICAgbnNlYyA9IHQgJSBTRUNfVE9fTlM7CisgICAgaWYgKG5zZWMgPCAwKSB7CisgICAgICAgIG5zZWMgKz0gU0VDX1RPX05TOworICAgICAgICBzZWNzIC09IDE7CisgICAgfQorICAgIHRzLT50dl9zZWMgPSAodGltZV90KXNlY3M7CisgICAgaWYgKChfUHlUaW1lX3QpdHMtPnR2X3NlYyAhPSBzZWNzKSB7CisgICAgICAgIF9QeVRpbWVfb3ZlcmZsb3coKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB0cy0+dHZfbnNlYyA9IG5zZWM7CisKKyAgICBhc3NlcnQoMCA8PSB0cy0+dHZfbnNlYyAmJiB0cy0+dHZfbnNlYyA8PSA5OTk5OTk5OTkpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3B5Z2V0dGltZW9mZGF5KF9QeVRpbWVfdCAqdHAsIF9QeV9jbG9ja19pbmZvX3QgKmluZm8sIGludCByYWlzZSkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgRklMRVRJTUUgc3lzdGVtX3RpbWU7CisgICAgVUxBUkdFX0lOVEVHRVIgbGFyZ2U7CisKKyAgICBhc3NlcnQoaW5mbyA9PSBOVUxMIHx8IHJhaXNlKTsKKworICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZzeXN0ZW1fdGltZSk7CisgICAgbGFyZ2UudS5Mb3dQYXJ0ID0gc3lzdGVtX3RpbWUuZHdMb3dEYXRlVGltZTsKKyAgICBsYXJnZS51LkhpZ2hQYXJ0ID0gc3lzdGVtX3RpbWUuZHdIaWdoRGF0ZVRpbWU7CisgICAgLyogMTEsNjQ0LDQ3Myw2MDAsMDAwLDAwMCwwMDA6IG51bWJlciBvZiBuYW5vc2Vjb25kcyBiZXR3ZWVuCisgICAgICAgdGhlIDFzdCBqYW51YXJ5IDE2MDEgYW5kIHRoZSAxc3QgamFudWFyeSAxOTcwICgzNjkgeWVhcnMgKyA4OSBsZWFwCisgICAgICAgZGF5cykuICovCisgICAgKnRwID0gbGFyZ2UuUXVhZFBhcnQgKiAxMDAgLSAxMTY0NDQ3MzYwMDAwMDAwMDAwMDsKKyAgICBpZiAoaW5mbykgeworICAgICAgICBEV09SRCB0aW1lQWRqdXN0bWVudCwgdGltZUluY3JlbWVudDsKKyAgICAgICAgQk9PTCBpc1RpbWVBZGp1c3RtZW50RGlzYWJsZWQsIG9rOworCisgICAgICAgIGluZm8tPmltcGxlbWVudGF0aW9uID0gIkdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCkiOworICAgICAgICBpbmZvLT5tb25vdG9uaWMgPSAwOworICAgICAgICBvayA9IEdldFN5c3RlbVRpbWVBZGp1c3RtZW50KCZ0aW1lQWRqdXN0bWVudCwgJnRpbWVJbmNyZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlzVGltZUFkanVzdG1lbnREaXNhYmxlZCk7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGluZm8tPnJlc29sdXRpb24gPSB0aW1lSW5jcmVtZW50ICogMWUtNzsKKyAgICAgICAgaW5mby0+YWRqdXN0YWJsZSA9IDE7CisgICAgfQorCisjZWxzZSAgIC8qIE1TX1dJTkRPV1MgKi8KKyAgICBpbnQgZXJyOworI2lmZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyNlbHNlCisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisjZW5kaWYKKworICAgIGFzc2VydChpbmZvID09IE5VTEwgfHwgcmFpc2UpOworCisjaWZkZWYgSEFWRV9DTE9DS19HRVRUSU1FCisgICAgZXJyID0gY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoX1B5VGltZV9Gcm9tVGltZXNwZWModHAsICZ0cywgcmFpc2UpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGluZm8pIHsKKyAgICAgICAgc3RydWN0IHRpbWVzcGVjIHJlczsKKyAgICAgICAgaW5mby0+aW1wbGVtZW50YXRpb24gPSAiY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSkiOworICAgICAgICBpbmZvLT5tb25vdG9uaWMgPSAwOworICAgICAgICBpbmZvLT5hZGp1c3RhYmxlID0gMTsKKyAgICAgICAgaWYgKGNsb2NrX2dldHJlcyhDTE9DS19SRUFMVElNRSwgJnJlcykgPT0gMCkKKyAgICAgICAgICAgIGluZm8tPnJlc29sdXRpb24gPSByZXMudHZfc2VjICsgcmVzLnR2X25zZWMgKiAxZS05OworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbmZvLT5yZXNvbHV0aW9uID0gMWUtOTsKKyAgICB9CisjZWxzZSAgIC8qIEhBVkVfQ0xPQ0tfR0VUVElNRSAqLworCisgICAgIC8qIHRlc3QgZ2V0dGltZW9mZGF5KCkgKi8KKyNpZmRlZiBHRVRUSU1FT0ZEQVlfTk9fVFoKKyAgICBlcnIgPSBnZXR0aW1lb2ZkYXkoJnR2KTsKKyNlbHNlCisgICAgZXJyID0gZ2V0dGltZW9mZGF5KCZ0diwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOworI2VuZGlmCisgICAgaWYgKGVycikgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKF9QeVRpbWVfRnJvbVRpbWV2YWwodHAsICZ0diwgcmFpc2UpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGluZm8pIHsKKyAgICAgICAgaW5mby0+aW1wbGVtZW50YXRpb24gPSAiZ2V0dGltZW9mZGF5KCkiOworICAgICAgICBpbmZvLT5yZXNvbHV0aW9uID0gMWUtNjsKKyAgICAgICAgaW5mby0+bW9ub3RvbmljID0gMDsKKyAgICAgICAgaW5mby0+YWRqdXN0YWJsZSA9IDE7CisgICAgfQorI2VuZGlmICAgLyogIUhBVkVfQ0xPQ0tfR0VUVElNRSAqLworI2VuZGlmICAgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gMDsKK30KKworX1B5VGltZV90CitfUHlUaW1lX0dldFN5c3RlbUNsb2NrKHZvaWQpCit7CisgICAgX1B5VGltZV90IHQ7CisgICAgaWYgKHB5Z2V0dGltZW9mZGF5KCZ0LCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgLyogc2hvdWxkIG5vdCBoYXBwZW4sIF9QeVRpbWVfSW5pdCgpIGNoZWNrZWQgdGhlIGNsb2NrIGF0IHN0YXJ0dXAgKi8KKyAgICAgICAgYXNzZXJ0KDApOworCisgICAgICAgIC8qIHVzZSBhIGZpeGVkIHZhbHVlIGluc3RlYWQgb2YgYSByYW5kb20gdmFsdWUgZnJvbSB0aGUgc3RhY2sgKi8KKyAgICAgICAgdCA9IDA7CisgICAgfQorICAgIHJldHVybiB0OworfQorCitpbnQKK19QeVRpbWVfR2V0U3lzdGVtQ2xvY2tXaXRoSW5mbyhfUHlUaW1lX3QgKnQsIF9QeV9jbG9ja19pbmZvX3QgKmluZm8pCit7CisgICAgcmV0dXJuIHB5Z2V0dGltZW9mZGF5KHQsIGluZm8sIDEpOworfQorCisKK3N0YXRpYyBpbnQKK3B5bW9ub3RvbmljKF9QeVRpbWVfdCAqdHAsIF9QeV9jbG9ja19pbmZvX3QgKmluZm8sIGludCByYWlzZSkKK3sKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgVUxPTkdMT05HIHJlc3VsdDsKKworICAgIGFzc2VydChpbmZvID09IE5VTEwgfHwgcmFpc2UpOworCisgICAgcmVzdWx0ID0gR2V0VGlja0NvdW50NjQoKTsKKworICAgICp0cCA9IHJlc3VsdCAqIE1TX1RPX05TOworICAgIGlmICgqdHAgLyBNU19UT19OUyAhPSByZXN1bHQpIHsKKyAgICAgICAgaWYgKHJhaXNlKSB7CisgICAgICAgICAgICBfUHlUaW1lX292ZXJmbG93KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgLyogSGVsbG8sIHRpbWUgdHJhdmVsZXIhICovCisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9CisKKyAgICBpZiAoaW5mbykgeworICAgICAgICBEV09SRCB0aW1lQWRqdXN0bWVudCwgdGltZUluY3JlbWVudDsKKyAgICAgICAgQk9PTCBpc1RpbWVBZGp1c3RtZW50RGlzYWJsZWQsIG9rOworICAgICAgICBpbmZvLT5pbXBsZW1lbnRhdGlvbiA9ICJHZXRUaWNrQ291bnQ2NCgpIjsKKyAgICAgICAgaW5mby0+bW9ub3RvbmljID0gMTsKKyAgICAgICAgb2sgPSBHZXRTeXN0ZW1UaW1lQWRqdXN0bWVudCgmdGltZUFkanVzdG1lbnQsICZ0aW1lSW5jcmVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc1RpbWVBZGp1c3RtZW50RGlzYWJsZWQpOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpbmZvLT5yZXNvbHV0aW9uID0gdGltZUluY3JlbWVudCAqIDFlLTc7CisgICAgICAgIGluZm8tPmFkanVzdGFibGUgPSAwOworICAgIH0KKworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgc3RhdGljIG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2U7CisgICAgdWludDY0X3QgdGltZTsKKworICAgIGlmICh0aW1lYmFzZS5kZW5vbSA9PSAwKSB7CisgICAgICAgIC8qIEFjY29yZGluZyB0byB0aGUgVGVjaG5pY2FsIFEmQSBRQTEzOTgsIG1hY2hfdGltZWJhc2VfaW5mbygpIGNhbm5vdAorICAgICAgICAgICBmYWlsOiBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9tYWMvI3FhL3FhMTM5OC8gKi8KKyAgICAgICAgKHZvaWQpbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1lYmFzZSk7CisgICAgfQorCisgICAgdGltZSA9IG1hY2hfYWJzb2x1dGVfdGltZSgpOworCisgICAgLyogYXBwbHkgdGltZWJhc2UgZmFjdG9yICovCisgICAgdGltZSAqPSB0aW1lYmFzZS5udW1lcjsKKyAgICB0aW1lIC89IHRpbWViYXNlLmRlbm9tOworCisgICAgKnRwID0gdGltZTsKKworICAgIGlmIChpbmZvKSB7CisgICAgICAgIGluZm8tPmltcGxlbWVudGF0aW9uID0gIm1hY2hfYWJzb2x1dGVfdGltZSgpIjsKKyAgICAgICAgaW5mby0+cmVzb2x1dGlvbiA9IChkb3VibGUpdGltZWJhc2UubnVtZXIgLyB0aW1lYmFzZS5kZW5vbSAqIDFlLTk7CisgICAgICAgIGluZm8tPm1vbm90b25pYyA9IDE7CisgICAgICAgIGluZm8tPmFkanVzdGFibGUgPSAwOworICAgIH0KKworI2Vsc2UKKyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisjaWZkZWYgQ0xPQ0tfSElHSFJFUworICAgIGNvbnN0IGNsb2NraWRfdCBjbGtfaWQgPSBDTE9DS19ISUdIUkVTOworICAgIGNvbnN0IGNoYXIgKmltcGxlbWVudGF0aW9uID0gImNsb2NrX2dldHRpbWUoQ0xPQ0tfSElHSFJFUykiOworI2Vsc2UKKyAgICBjb25zdCBjbG9ja2lkX3QgY2xrX2lkID0gQ0xPQ0tfTU9OT1RPTklDOworICAgIGNvbnN0IGNoYXIgKmltcGxlbWVudGF0aW9uID0gImNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDKSI7CisjZW5kaWYKKworICAgIGFzc2VydChpbmZvID09IE5VTEwgfHwgcmFpc2UpOworCisgICAgaWYgKGNsb2NrX2dldHRpbWUoY2xrX2lkLCAmdHMpICE9IDApIHsKKyAgICAgICAgaWYgKHJhaXNlKSB7CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChpbmZvKSB7CisgICAgICAgIHN0cnVjdCB0aW1lc3BlYyByZXM7CisgICAgICAgIGluZm8tPm1vbm90b25pYyA9IDE7CisgICAgICAgIGluZm8tPmltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247CisgICAgICAgIGluZm8tPmFkanVzdGFibGUgPSAwOworICAgICAgICBpZiAoY2xvY2tfZ2V0cmVzKGNsa19pZCwgJnJlcykgIT0gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGluZm8tPnJlc29sdXRpb24gPSByZXMudHZfc2VjICsgcmVzLnR2X25zZWMgKiAxZS05OworICAgIH0KKyAgICBpZiAoX1B5VGltZV9Gcm9tVGltZXNwZWModHAsICZ0cywgcmFpc2UpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK19QeVRpbWVfdAorX1B5VGltZV9HZXRNb25vdG9uaWNDbG9jayh2b2lkKQoreworICAgIF9QeVRpbWVfdCB0OworICAgIGlmIChweW1vbm90b25pYygmdCwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIC8qIHNob3VsZCBub3QgaGFwcGVuLCBfUHlUaW1lX0luaXQoKSBjaGVja2VkIHRoYXQgbW9ub3RvbmljIGNsb2NrIGF0CisgICAgICAgICAgIHN0YXJ0dXAgKi8KKyAgICAgICAgYXNzZXJ0KDApOworCisgICAgICAgIC8qIHVzZSBhIGZpeGVkIHZhbHVlIGluc3RlYWQgb2YgYSByYW5kb20gdmFsdWUgZnJvbSB0aGUgc3RhY2sgKi8KKyAgICAgICAgdCA9IDA7CisgICAgfQorICAgIHJldHVybiB0OworfQorCitpbnQKK19QeVRpbWVfR2V0TW9ub3RvbmljQ2xvY2tXaXRoSW5mbyhfUHlUaW1lX3QgKnRwLCBfUHlfY2xvY2tfaW5mb190ICppbmZvKQoreworICAgIHJldHVybiBweW1vbm90b25pYyh0cCwgaW5mbywgMSk7Cit9CisKK2ludAorX1B5VGltZV9Jbml0KHZvaWQpCit7CisgICAgX1B5VGltZV90IHQ7CisKKyAgICAvKiBlbnN1cmUgdGhhdCB0aGUgc3lzdGVtIGNsb2NrIHdvcmtzICovCisgICAgaWYgKF9QeVRpbWVfR2V0U3lzdGVtQ2xvY2tXaXRoSW5mbygmdCwgTlVMTCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBlbnN1cmUgdGhhdCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBwcm92aWRlcyBhIG1vbm90b25pYyBjbG9jayAqLworICAgIGlmIChfUHlUaW1lX0dldE1vbm90b25pY0Nsb2NrV2l0aEluZm8oJnQsIE5VTEwpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogY2hlY2sgdGhhdCBfUHlUaW1lX0Zyb21TZWNvbmRzKCkgY2Fubm90IG92ZXJmbG93ICovCisgICAgYXNzZXJ0KElOVF9NQVggPD0gX1B5VGltZV9NQVggLyBTRUNfVE9fTlMpOworICAgIGFzc2VydChJTlRfTUlOID49IF9QeVRpbWVfTUlOIC8gU0VDX1RPX05TKTsKKyAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9yYW5kb20uYyBiL1B5dGhvbi9yYW5kb20uYwppbmRleCBhZjNkMGJkLi4zMTE5ODcyIDEwMDY0NAotLS0gYS9QeXRob24vcmFuZG9tLmMKKysrIGIvUHl0aG9uL3JhbmRvbS5jCkBAIC0xLDExICsxLDE5IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaWZkZWYgTVNfV0lORE9XUwotI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCisjICBpbmNsdWRlIDxmY250bC5oPgorIyAgaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjICAgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjICBlbmRpZgorIyAgaWZkZWYgSEFWRV9MSU5VWF9SQU5ET01fSAorIyAgICBpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyMgIGVuZGlmCisjICBpZmRlZiBIQVZFX0dFVFJBTkRPTQorIyAgICBpbmNsdWRlIDxzeXMvcmFuZG9tLmg+CisjICBlbGlmIGRlZmluZWQoSEFWRV9HRVRSQU5ET01fU1lTQ0FMTCkKKyMgICAgaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyMgIGVuZGlmCiAjZW5kaWYKIAogI2lmZGVmIFB5X0RFQlVHCkBAIC02Nyw3ICs3NSw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIElzc3VlICMyNTAwMzogRG9uJyB1c2UgZ2V0ZW50cm9weSgpIG9uIFNvbGFyaXMgKGF2YWlsYWJsZSBzaW5jZQorLyogSXNzdWUgIzI1MDAzOiBEb24ndCB1c2UgZ2V0ZW50cm9weSgpIG9uIFNvbGFyaXMgKGF2YWlsYWJsZSBzaW5jZQogICogU29sYXJpcyAxMS4zKSwgaXQgaXMgYmxvY2tpbmcgd2hlcmVhcyBvcy51cmFuZG9tKCkgc2hvdWxkIG5vdCBibG9jay4gKi8KICNlbGlmIGRlZmluZWQoSEFWRV9HRVRFTlRST1BZKSAmJiAhZGVmaW5lZChzdW4pCiAjZGVmaW5lIFBZX0dFVEVOVFJPUFkgMQpAQCAtMTA3LDEyICsxMTUsMTA5IEBACiB9CiAKICNlbHNlCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUUkFORE9NKSB8fCBkZWZpbmVkKEhBVkVfR0VUUkFORE9NX1NZU0NBTEwpCisjZGVmaW5lIFBZX0dFVFJBTkRPTSAxCisKK3N0YXRpYyBpbnQKK3B5X2dldHJhbmRvbSh2b2lkICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSwgaW50IHJhaXNlKQoreworICAgIC8qIElzIGdldHJhbmRvbSgpIHN1cHBvcnRlZCBieSB0aGUgcnVubmluZyBrZXJuZWw/CisgICAgICogTmVlZCBMaW51eCBrZXJuZWwgMy4xNyBvciBuZXdlciwgb3IgU29sYXJpcyAxMS4zIG9yIG5ld2VyICovCisgICAgc3RhdGljIGludCBnZXRyYW5kb21fd29ya3MgPSAxOworCisgICAgLyogZ2V0cmFuZG9tKCkgb24gTGludXggd2lsbCBibG9jayBpZiBjYWxsZWQgYmVmb3JlIHRoZSBrZXJuZWwgaGFzCisgICAgICogaW5pdGlhbGl6ZWQgdGhlIHVyYW5kb20gZW50cm9weSBwb29sLiBUaGlzIHdpbGwgY2F1c2UgUHl0aG9uCisgICAgICogdG8gaGFuZyBvbiBzdGFydHVwIGlmIGNhbGxlZCB2ZXJ5IGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MgLQorICAgICAqIHNlZSBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI2ODM5LiBUbyBhdm9pZCB0aGlzLCB1c2UgdGhlCisgICAgICogR1JORF9OT05CTE9DSyBmbGFnLiAqLworICAgIGNvbnN0IGludCBmbGFncyA9IEdSTkRfTk9OQkxPQ0s7CisgICAgbG9uZyBuOworCisgICAgaWYgKCFnZXRyYW5kb21fd29ya3MpCisgICAgICAgIHJldHVybiAwOworCisgICAgd2hpbGUgKDAgPCBzaXplKSB7CisjaWZkZWYgc3VuCisgICAgICAgIC8qIElzc3VlICMyNjczNTogT24gU29sYXJpcywgZ2V0cmFuZG9tKCkgaXMgbGltaXRlZCB0byByZXR1cm5pbmcgdXAKKyAgICAgICAgICAgdG8gMTAyNCBieXRlcyAqLworICAgICAgICBuID0gUHlfTUlOKHNpemUsIDEwMjQpOworI2Vsc2UKKyAgICAgICAgbiA9IFB5X01JTihzaXplLCBMT05HX01BWCk7CisjZW5kaWYKKworICAgICAgICBlcnJubyA9IDA7CisjaWZkZWYgSEFWRV9HRVRSQU5ET00KKyAgICAgICAgaWYgKHJhaXNlKSB7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICBuID0gZ2V0cmFuZG9tKGJ1ZmZlciwgbiwgZmxhZ3MpOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG4gPSBnZXRyYW5kb20oYnVmZmVyLCBuLCBmbGFncyk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIC8qIE9uIExpbnV4LCB1c2UgdGhlIHN5c2NhbGwoKSBmdW5jdGlvbiBiZWNhdXNlIHRoZSBHTlUgbGliYyBkb2Vzbid0CisgICAgICAgICAqIGV4cG9zZSB0aGUgTGludXggZ2V0cmFuZG9tKCkgc3lzY2FsbCB5ZXQuIFNlZToKKyAgICAgICAgICogaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTcyNTIgKi8KKyAgICAgICAgaWYgKHJhaXNlKSB7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICBuID0gc3lzY2FsbChTWVNfZ2V0cmFuZG9tLCBidWZmZXIsIG4sIGZsYWdzKTsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBuID0gc3lzY2FsbChTWVNfZ2V0cmFuZG9tLCBidWZmZXIsIG4sIGZsYWdzKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgaWYgKG4gPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PU1lTKSB7CisgICAgICAgICAgICAgICAgZ2V0cmFuZG9tX3dvcmtzID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsKKyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBmYWlsZWQgd2l0aCBFQUdBSU4sIHRoZSBlbnRyb3B5IHBvb2wgd2FzCisgICAgICAgICAgICAgICAgICogdW5pbml0aWFsaXplZC4gSW4gdGhpcyBjYXNlLCB3ZSByZXR1cm4gZmFpbHVyZSB0byBmYWxsCisgICAgICAgICAgICAgICAgICogYmFjayB0byByZWFkaW5nIGZyb20gL2Rldi91cmFuZG9tLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogTm90ZTogSW4gdGhpcyBjYXNlIHRoZSBkYXRhIHJlYWQgd2lsbCBub3QgYmUgcmFuZG9tIHNvCisgICAgICAgICAgICAgICAgICogc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjcnlwdG9ncmFwaGljIHB1cnBvc2VzLiBSZXRhaW5pbmcKKyAgICAgICAgICAgICAgICAgKiB0aGUgZXhpc3Rpbmcgc2VtYW50aWNzIGZvciBwcmFjdGljYWwgcHVycG9zZXMuICovCisgICAgICAgICAgICAgICAgZ2V0cmFuZG9tX3dvcmtzID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0NoZWNrU2lnbmFscygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmFpc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJnZXRyYW5kb20oKSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIHJldHJ5IGdldHJhbmRvbSgpICovCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiZ2V0cmFuZG9tKCkgZmFpbGVkIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXIgKz0gbjsKKyAgICAgICAgc2l6ZSAtPSBuOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHsKICAgICBpbnQgZmQ7CiAgICAgZGV2X3Qgc3RfZGV2OwogICAgIGlub190IHN0X2lubzsKIH0gdXJhbmRvbV9jYWNoZSA9IHsgLTEgfTsKIAorCiAvKiBSZWFkIHNpemUgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20gaW50byBidWZmZXIuCiAgICBDYWxsIFB5X0ZhdGFsRXJyb3IoKSBvbiBlcnJvci4gKi8KIHN0YXRpYyB2b2lkCkBAIC0xMjMsNyArMjI4LDE0IEBACiAKICAgICBhc3NlcnQgKDAgPCBzaXplKTsKIAotICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKyNpZmRlZiBQWV9HRVRSQU5ET00KKyAgICBpZiAocHlfZ2V0cmFuZG9tKGJ1ZmZlciwgc2l6ZSwgMCkgPT0gMSkKKyAgICAgICAgcmV0dXJuOworICAgIC8qIGdldHJhbmRvbSgpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHJ1bm5pbmcga2VybmVsLCBmYWxsIGJhY2sKKyAgICAgKiBvbiByZWFkaW5nIC9kZXYvdXJhbmRvbSAqLworI2VuZGlmCisKKyAgICBmZCA9IF9QeV9vcGVuX25vcmFpc2UoIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJGYWlsZWQgdG8gb3BlbiAvZGV2L3VyYW5kb20iKTsKIApAQCAtMTM5LDcgKzI1MSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBidWZmZXIgKz0gbjsKLSAgICAgICAgc2l6ZSAtPSAoUHlfc3NpemVfdCluOworICAgICAgICBzaXplIC09IG47CiAgICAgfQogICAgIGNsb3NlKGZkKTsKIH0KQEAgLTE1MSwxNCArMjYzLDI3IEBACiB7CiAgICAgaW50IGZkOwogICAgIFB5X3NzaXplX3QgbjsKLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICBzdHJ1Y3QgX1B5X3N0YXRfc3RydWN0IHN0OworI2lmZGVmIFBZX0dFVFJBTkRPTQorICAgIGludCByZXM7CisjZW5kaWYKIAogICAgIGlmIChzaXplIDw9IDApCiAgICAgICAgIHJldHVybiAwOwogCisjaWZkZWYgUFlfR0VUUkFORE9NCisgICAgcmVzID0gcHlfZ2V0cmFuZG9tKGJ1ZmZlciwgc2l6ZSwgMSk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAocmVzID09IDEpCisgICAgICAgIHJldHVybiAwOworICAgIC8qIGdldHJhbmRvbSgpIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHJ1bm5pbmcga2VybmVsLCBmYWxsIGJhY2sKKyAgICAgKiBvbiByZWFkaW5nIC9kZXYvdXJhbmRvbSAqLworI2VuZGlmCisKICAgICBpZiAodXJhbmRvbV9jYWNoZS5mZCA+PSAwKSB7CiAgICAgICAgIC8qIERvZXMgdGhlIGZkIHBvaW50IHRvIHRoZSBzYW1lIHRoaW5nIGFzIGJlZm9yZT8gKGlzc3VlICMyMTIwNykgKi8KLSAgICAgICAgaWYgKGZzdGF0KHVyYW5kb21fY2FjaGUuZmQsICZzdCkKKyAgICAgICAgaWYgKF9QeV9mc3RhdF9ub3JhaXNlKHVyYW5kb21fY2FjaGUuZmQsICZzdCkKICAgICAgICAgICAgIHx8IHN0LnN0X2RldiAhPSB1cmFuZG9tX2NhY2hlLnN0X2RldgogICAgICAgICAgICAgfHwgc3Quc3RfaW5vICE9IHVyYW5kb21fY2FjaGUuc3RfaW5vKSB7CiAgICAgICAgICAgICAvKiBTb21ldGhpbmcgY2hhbmdlZDogZm9yZ2V0IHRoZSBjYWNoZWQgZmQgKGJ1dCBkb24ndCBjbG9zZSBpdCwKQEAgLTE3MCwxNyArMjk1LDEzIEBACiAgICAgaWYgKHVyYW5kb21fY2FjaGUuZmQgPj0gMCkKICAgICAgICAgZmQgPSB1cmFuZG9tX2NhY2hlLmZkOwogICAgIGVsc2UgewotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgaWYgKGZkIDwgMCkKLSAgICAgICAgeworICAgICAgICBpZiAoZmQgPCAwKSB7CiAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOWElPIHx8CiAgICAgICAgICAgICAgICAgZXJybm8gPT0gRU5PREVWIHx8IGVycm5vID09IEVBQ0NFUykKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvdXJhbmRvbSAob3IgZXF1aXZhbGVudCkgbm90IGZvdW5kIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICAgICAgLyogb3RoZXJ3aXNlLCBrZWVwIHRoZSBPU0Vycm9yIGV4Y2VwdGlvbiByYWlzZWQgYnkgX1B5X29wZW4oKSAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGlmICh1cmFuZG9tX2NhY2hlLmZkID49IDApIHsKQEAgLTE5MCw4ICszMTEsNyBAQAogICAgICAgICAgICAgZmQgPSB1cmFuZG9tX2NhY2hlLmZkOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKGZzdGF0KGZkLCAmc3QpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICAgICAgaWYgKF9QeV9mc3RhdChmZCwgJnN0KSkgewogICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBAIC0yMDMsMjkgKzMyMywyMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGRvIHsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbiA9IHJlYWQoZmQsIGJ1ZmZlciwgKHNpemVfdClzaXplKTsKLSAgICAgICAgfSB3aGlsZSAobiA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotICAgICAgICBpZiAobiA8PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGJ1ZmZlciArPSBuOwotICAgICAgICBzaXplIC09IChQeV9zc2l6ZV90KW47Ci0gICAgfSB3aGlsZSAoMCA8IHNpemUpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAobiA8PSAwKQotICAgIHsKLSAgICAgICAgLyogc3RvcCBvbiBlcnJvciBvciBpZiByZWFkKHNpemUpIHJldHVybmVkIDAgKi8KLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwotICAgICAgICBlbHNlCisgICAgICAgIG4gPSBfUHlfcmVhZChmZCwgYnVmZmVyLCAoc2l6ZV90KXNpemUpOworICAgICAgICBpZiAobiA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG4gPT0gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlYWQgJXppIGJ5dGVzIGZyb20gL2Rldi91cmFuZG9tIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZWFkICV6aSBieXRlcyBmcm9tIC9kZXYvdXJhbmRvbSIsCisgICAgICAgICAgICAgICAgICAgIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyICs9IG47CisgICAgICAgIHNpemUgLT0gbjsKKyAgICB9IHdoaWxlICgwIDwgc2l6ZSk7CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjM4LDcgKzM1MCw3IEBACiAgICAgfQogfQogCi0jZW5kaWYgLyogSEFWRV9HRVRFTlRST1BZICovCisjZW5kaWYKIAogLyogRmlsbCBidWZmZXIgd2l0aCBwc2V1ZG8tcmFuZG9tIGJ5dGVzIGdlbmVyYXRlZCBieSBhIGxpbmVhciBjb25ncnVlbnQKICAgIGdlbmVyYXRvciAoTENHKToKZGlmZiAtLWdpdCBhL1B5dGhvbi9zeW10YWJsZS5jIGIvUHl0aG9uL3N5bXRhYmxlLmMKaW5kZXggOTUxMjY3My4uMTU5MWEyMCAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5bXRhYmxlLmMKKysrIGIvUHl0aG9uL3N5bXRhYmxlLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICAgICBzdGUtPnN0ZV9kaXJlY3RpdmVzID0gTlVMTDsKIAogICAgIHN0ZS0+c3RlX3R5cGUgPSBibG9jazsKLSAgICBzdGUtPnN0ZV91bm9wdGltaXplZCA9IDA7CiAgICAgc3RlLT5zdGVfbmVzdGVkID0gMDsKICAgICBzdGUtPnN0ZV9mcmVlID0gMDsKICAgICBzdGUtPnN0ZV92YXJhcmdzID0gMDsKQEAgLTExMyw3ICsxMTIsNiBAQAogICAgIHsic3ltYm9scyIsICBUX09CSkVDVCwgT0ZGKHN0ZV9zeW1ib2xzKSwgUkVBRE9OTFl9LAogICAgIHsidmFybmFtZXMiLCBUX09CSkVDVCwgT0ZGKHN0ZV92YXJuYW1lcyksIFJFQURPTkxZfSwKICAgICB7ImNoaWxkcmVuIiwgVF9PQkpFQ1QsIE9GRihzdGVfY2hpbGRyZW4pLCBSRUFET05MWX0sCi0gICAgeyJvcHRpbWl6ZWQiLFRfSU5ULCAgICBPRkYoc3RlX3Vub3B0aW1pemVkKSwgUkVBRE9OTFl9LAogICAgIHsibmVzdGVkIiwgICBUX0lOVCwgICAgT0ZGKHN0ZV9uZXN0ZWQpLCBSRUFET05MWX0sCiAgICAgeyJ0eXBlIiwgICAgIFRfSU5ULCAgICBPRkYoc3RlX3R5cGUpLCBSRUFET05MWX0sCiAgICAgeyJsaW5lbm8iLCAgIFRfSU5ULCAgICBPRkYoc3RlX2xpbmVubyksIFJFQURPTkxZfSwKQEAgLTE4Miw3ICsxODAsNyBAQAogc3RhdGljIGludCBzeW10YWJsZV92aXNpdF9wYXJhbXMoc3RydWN0IHN5bXRhYmxlICpzdCwgYXNkbF9zZXEgKmFyZ3MpOwogc3RhdGljIGludCBzeW10YWJsZV92aXNpdF9hcmdhbm5vdGF0aW9ucyhzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBhc2RsX3NlcSAqYXJncyk7CiBzdGF0aWMgaW50IHN5bXRhYmxlX2ltcGxpY2l0X2FyZyhzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBpbnQgcG9zKTsKLXN0YXRpYyBpbnQgc3ltdGFibGVfdmlzaXRfYW5ub3RhdGlvbnMoc3RydWN0IHN5bXRhYmxlICpzdCwgc3RtdF90eSBzKTsKK3N0YXRpYyBpbnQgc3ltdGFibGVfdmlzaXRfYW5ub3RhdGlvbnMoc3RydWN0IHN5bXRhYmxlICpzdCwgc3RtdF90eSBzLCBhcmd1bWVudHNfdHksIGV4cHJfdHkpOwogc3RhdGljIGludCBzeW10YWJsZV92aXNpdF93aXRoaXRlbShzdHJ1Y3Qgc3ltdGFibGUgKnN0LCB3aXRoaXRlbV90eSBpdGVtKTsKIAogCkBAIC0yNzEsNyArMjY5LDYgQEAKICAgICB9CiAKICAgICBzdC0+c3RfdG9wID0gc3QtPnN0X2N1cjsKLSAgICBzdC0+c3RfY3VyLT5zdGVfdW5vcHRpbWl6ZWQgPSBPUFRfVE9QTEVWRUw7CiAgICAgc3dpdGNoIChtb2QtPmtpbmQpIHsKICAgICBjYXNlIE1vZHVsZV9raW5kOgogICAgICAgICBzZXEgPSBtb2QtPnYuTW9kdWxlLmJvZHk7CkBAIC0zNzEsMTUgKzM2OCwyMCBAQAogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqZGF0YTsKICAgICBhc3NlcnQoc3RlLT5zdGVfZGlyZWN0aXZlcyk7Ci0gICAgZm9yIChpID0gMDsgOyBpKyspIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X0dFVF9TSVpFKHN0ZS0+c3RlX2RpcmVjdGl2ZXMpOyBpKyspIHsKICAgICAgICAgZGF0YSA9IFB5TGlzdF9HRVRfSVRFTShzdGUtPnN0ZV9kaXJlY3RpdmVzLCBpKTsKICAgICAgICAgYXNzZXJ0KFB5VHVwbGVfQ2hlY2tFeGFjdChkYXRhKSk7Ci0gICAgICAgIGlmIChQeVR1cGxlX0dFVF9JVEVNKGRhdGEsIDApID09IG5hbWUpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVja0V4YWN0KFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMCkpKTsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMCksIG5hbWUpID09IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMikpKTsKKworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gICAKICAgICB9Ci0gICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAxKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZyhQeVR1cGxlX0dFVF9JVEVNKGRhdGEsIDIpKSk7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIkJVRzogaW50ZXJuYWwgZGlyZWN0aXZlIGJvb2trZWVwaW5nIGJyb2tlbiIpOwogICAgIHJldHVybiAwOwogfQogCkBAIC04NTIsNyArODU0LDcgQEAKIAogICAgIC8qIENvcHkgdGhlIGJvdW5kIGFuZCBnbG9iYWwgZGljdGlvbmFyaWVzLgogCi0gICAgICAgVGhlc2UgZGljdGlvbmFyeSBhcmUgdXNlZCBieSBhbGwgYmxvY2tzIGVuY2xvc2VkIGJ5IHRoZQorICAgICAgIFRoZXNlIGRpY3Rpb25hcmllcyBhcmUgdXNlZCBieSBhbGwgYmxvY2tzIGVuY2xvc2VkIGJ5IHRoZQogICAgICAgIGN1cnJlbnQgYmxvY2suICBUaGUgYW5hbHl6ZV9ibG9jaygpIGNhbGwgbW9kaWZpZXMgdGhlc2UKICAgICAgICBkaWN0aW9uYXJpZXMuCiAKQEAgLTEwODYsMTMgKzEwODgsMTMgQEAKICAgICB9IFwKIH0KIAotI2RlZmluZSBWSVNJVF9LV09OTFlERUZBVUxUUyhTVCwgS1dfREVGQVVMVFMpIHsgXAorI2RlZmluZSBWSVNJVF9TRVFfV0lUSF9OVUxMKFNULCBUWVBFLCBTRVEpIHsgICAgIFwKICAgICBpbnQgaSA9IDA7IFwKLSAgICBhc2RsX3NlcSAqc2VxID0gKEtXX0RFRkFVTFRTKTsgLyogYXZvaWQgdmFyaWFibGUgY2FwdHVyZSAqLyBcCisgICAgYXNkbF9zZXEgKnNlcSA9IChTRVEpOyAvKiBhdm9pZCB2YXJpYWJsZSBjYXB0dXJlICovIFwKICAgICBmb3IgKGkgPSAwOyBpIDwgYXNkbF9zZXFfTEVOKHNlcSk7IGkrKykgeyBcCi0gICAgICAgIGV4cHJfdHkgZWx0ID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKHNlcSwgaSk7IFwKKyAgICAgICAgVFlQRSAjIyBfdHkgZWx0ID0gKFRZUEUgIyMgX3R5KWFzZGxfc2VxX0dFVChzZXEsIGkpOyBcCiAgICAgICAgIGlmICghZWx0KSBjb250aW51ZTsgLyogY2FuIGJlIE5VTEwgKi8gXAotICAgICAgICBpZiAoIXN5bXRhYmxlX3Zpc2l0X2V4cHIoKFNUKSwgZWx0KSkgXAorICAgICAgICBpZiAoIXN5bXRhYmxlX3Zpc2l0XyAjIyBUWVBFKChTVCksIGVsdCkpIFwKICAgICAgICAgICAgIFZJU0lUX1FVSVQoKFNUKSwgMCk7ICAgICAgICAgICAgIFwKICAgICB9IFwKIH0KQEAgLTExMTgsMTQgKzExMjAsMTcgQEAKIHN0YXRpYyBpbnQKIHN5bXRhYmxlX3JlY29yZF9kaXJlY3RpdmUoc3RydWN0IHN5bXRhYmxlICpzdCwgaWRlbnRpZmllciBuYW1lLCBzdG10X3R5IHMpCiB7Ci0gICAgUHlPYmplY3QgKmRhdGE7CisgICAgUHlPYmplY3QgKmRhdGEsICptYW5nbGVkOwogICAgIGludCByZXM7CiAgICAgaWYgKCFzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcykgewogICAgICAgICBzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgICAgIGlmICghc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgZGF0YSA9IFB5X0J1aWxkVmFsdWUoIihPaWkpIiwgbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICBtYW5nbGVkID0gX1B5X01hbmdsZShzdC0+c3RfcHJpdmF0ZSwgbmFtZSk7CisgICAgaWYgKCFtYW5nbGVkKQorICAgICAgICByZXR1cm4gMDsKKyAgICBkYXRhID0gUHlfQnVpbGRWYWx1ZSgiKE5paSkiLCBtYW5nbGVkLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmVzID0gUHlMaXN0X0FwcGVuZChzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcywgZGF0YSk7CkBAIC0xMTM4LDcgKzExNDMsNyBAQAogc3ltdGFibGVfdmlzaXRfc3RtdChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBzdG10X3R5IHMpCiB7CiAgICAgaWYgKCsrc3QtPnJlY3Vyc2lvbl9kZXB0aCA+IHN0LT5yZWN1cnNpb25fbGltaXQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1JlY3Vyc2lvbkVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIGR1cmluZyBjb21waWxhdGlvbiIpOwogICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKICAgICB9CkBAIC0xMTQ5LDkgKzExNTQsOSBAQAogICAgICAgICBpZiAocy0+di5GdW5jdGlvbkRlZi5hcmdzLT5kZWZhdWx0cykKICAgICAgICAgICAgIFZJU0lUX1NFUShzdCwgZXhwciwgcy0+di5GdW5jdGlvbkRlZi5hcmdzLT5kZWZhdWx0cyk7CiAgICAgICAgIGlmIChzLT52LkZ1bmN0aW9uRGVmLmFyZ3MtPmt3X2RlZmF1bHRzKQotICAgICAgICAgICAgVklTSVRfS1dPTkxZREVGQVVMVFMoc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+di5GdW5jdGlvbkRlZi5hcmdzLT5rd19kZWZhdWx0cyk7Ci0gICAgICAgIGlmICghc3ltdGFibGVfdmlzaXRfYW5ub3RhdGlvbnMoc3QsIHMpKQorICAgICAgICAgICAgVklTSVRfU0VRX1dJVEhfTlVMTChzdCwgZXhwciwgcy0+di5GdW5jdGlvbkRlZi5hcmdzLT5rd19kZWZhdWx0cyk7CisgICAgICAgIGlmICghc3ltdGFibGVfdmlzaXRfYW5ub3RhdGlvbnMoc3QsIHMsIHMtPnYuRnVuY3Rpb25EZWYuYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT52LkZ1bmN0aW9uRGVmLnJldHVybnMpKQogICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIGlmIChzLT52LkZ1bmN0aW9uRGVmLmRlY29yYXRvcl9saXN0KQogICAgICAgICAgICAgVklTSVRfU0VRKHN0LCBleHByLCBzLT52LkZ1bmN0aW9uRGVmLmRlY29yYXRvcl9saXN0KTsKQEAgLTExNzAsMTAgKzExNzUsNiBAQAogICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIFZJU0lUX1NFUShzdCwgZXhwciwgcy0+di5DbGFzc0RlZi5iYXNlcyk7CiAgICAgICAgIFZJU0lUX1NFUShzdCwga2V5d29yZCwgcy0+di5DbGFzc0RlZi5rZXl3b3Jkcyk7Ci0gICAgICAgIGlmIChzLT52LkNsYXNzRGVmLnN0YXJhcmdzKQotICAgICAgICAgICAgVklTSVQoc3QsIGV4cHIsIHMtPnYuQ2xhc3NEZWYuc3RhcmFyZ3MpOwotICAgICAgICBpZiAocy0+di5DbGFzc0RlZi5rd2FyZ3MpCi0gICAgICAgICAgICBWSVNJVChzdCwgZXhwciwgcy0+di5DbGFzc0RlZi5rd2FyZ3MpOwogICAgICAgICBpZiAocy0+di5DbGFzc0RlZi5kZWNvcmF0b3JfbGlzdCkKICAgICAgICAgICAgIFZJU0lUX1NFUShzdCwgZXhwciwgcy0+di5DbGFzc0RlZi5kZWNvcmF0b3JfbGlzdCk7CiAgICAgICAgIGlmICghc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIHMtPnYuQ2xhc3NEZWYubmFtZSwgQ2xhc3NCbG9jaywKQEAgLTEyNDUsMjEgKzEyNDYsOSBAQAogICAgICAgICBicmVhazsKICAgICBjYXNlIEltcG9ydF9raW5kOgogICAgICAgICBWSVNJVF9TRVEoc3QsIGFsaWFzLCBzLT52LkltcG9ydC5uYW1lcyk7Ci0gICAgICAgIC8qIFhYWCBEb24ndCBoYXZlIHRoZSBsaW5lbm8gYXZhaWxhYmxlIGluc2lkZQotICAgICAgICAgICB2aXNpdF9hbGlhcyAqLwotICAgICAgICBpZiAoc3QtPnN0X2N1ci0+c3RlX3Vub3B0aW1pemVkICYmICFzdC0+c3RfY3VyLT5zdGVfb3B0X2xpbmVubykgewotICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX29wdF9saW5lbm8gPSBzLT5saW5lbm87Ci0gICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfb3B0X2NvbF9vZmZzZXQgPSBzLT5jb2xfb2Zmc2V0OwotICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW1wb3J0RnJvbV9raW5kOgogICAgICAgICBWSVNJVF9TRVEoc3QsIGFsaWFzLCBzLT52LkltcG9ydEZyb20ubmFtZXMpOwotICAgICAgICAvKiBYWFggRG9uJ3QgaGF2ZSB0aGUgbGluZW5vIGF2YWlsYWJsZSBpbnNpZGUKLSAgICAgICAgICAgdmlzaXRfYWxpYXMgKi8KLSAgICAgICAgaWYgKHN0LT5zdF9jdXItPnN0ZV91bm9wdGltaXplZCAmJiAhc3QtPnN0X2N1ci0+c3RlX29wdF9saW5lbm8pIHsKLSAgICAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9vcHRfbGluZW5vID0gcy0+bGluZW5vOwotICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX29wdF9jb2xfb2Zmc2V0ID0gcy0+Y29sX29mZnNldDsKLSAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdsb2JhbF9raW5kOiB7CiAgICAgICAgIGludCBpOwpAQCAtMTMzNSw2ICsxMzI0LDM5IEBACiAgICAgICAgIFZJU0lUX1NFUShzdCwgd2l0aGl0ZW0sIHMtPnYuV2l0aC5pdGVtcyk7CiAgICAgICAgIFZJU0lUX1NFUShzdCwgc3RtdCwgcy0+di5XaXRoLmJvZHkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFzeW5jRnVuY3Rpb25EZWZfa2luZDoKKyAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBzLT52LkFzeW5jRnVuY3Rpb25EZWYubmFtZSwgREVGX0xPQ0FMKSkKKyAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOworICAgICAgICBpZiAocy0+di5Bc3luY0Z1bmN0aW9uRGVmLmFyZ3MtPmRlZmF1bHRzKQorICAgICAgICAgICAgVklTSVRfU0VRKHN0LCBleHByLCBzLT52LkFzeW5jRnVuY3Rpb25EZWYuYXJncy0+ZGVmYXVsdHMpOworICAgICAgICBpZiAocy0+di5Bc3luY0Z1bmN0aW9uRGVmLmFyZ3MtPmt3X2RlZmF1bHRzKQorICAgICAgICAgICAgVklTSVRfU0VRX1dJVEhfTlVMTChzdCwgZXhwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+di5Bc3luY0Z1bmN0aW9uRGVmLmFyZ3MtPmt3X2RlZmF1bHRzKTsKKyAgICAgICAgaWYgKCFzeW10YWJsZV92aXNpdF9hbm5vdGF0aW9ucyhzdCwgcywgcy0+di5Bc3luY0Z1bmN0aW9uRGVmLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+di5Bc3luY0Z1bmN0aW9uRGVmLnJldHVybnMpKQorICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CisgICAgICAgIGlmIChzLT52LkFzeW5jRnVuY3Rpb25EZWYuZGVjb3JhdG9yX2xpc3QpCisgICAgICAgICAgICBWSVNJVF9TRVEoc3QsIGV4cHIsIHMtPnYuQXN5bmNGdW5jdGlvbkRlZi5kZWNvcmF0b3JfbGlzdCk7CisgICAgICAgIGlmICghc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIHMtPnYuQXN5bmNGdW5jdGlvbkRlZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uQmxvY2ssICh2b2lkICopcywgcy0+bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmNvbF9vZmZzZXQpKQorICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CisgICAgICAgIFZJU0lUKHN0LCBhcmd1bWVudHMsIHMtPnYuQXN5bmNGdW5jdGlvbkRlZi5hcmdzKTsKKyAgICAgICAgVklTSVRfU0VRKHN0LCBzdG10LCBzLT52LkFzeW5jRnVuY3Rpb25EZWYuYm9keSk7CisgICAgICAgIGlmICghc3ltdGFibGVfZXhpdF9ibG9jayhzdCwgcykpCisgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBc3luY1dpdGhfa2luZDoKKyAgICAgICAgVklTSVRfU0VRKHN0LCB3aXRoaXRlbSwgcy0+di5Bc3luY1dpdGguaXRlbXMpOworICAgICAgICBWSVNJVF9TRVEoc3QsIHN0bXQsIHMtPnYuQXN5bmNXaXRoLmJvZHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFzeW5jRm9yX2tpbmQ6CisgICAgICAgIFZJU0lUKHN0LCBleHByLCBzLT52LkFzeW5jRm9yLnRhcmdldCk7CisgICAgICAgIFZJU0lUKHN0LCBleHByLCBzLT52LkFzeW5jRm9yLml0ZXIpOworICAgICAgICBWSVNJVF9TRVEoc3QsIHN0bXQsIHMtPnYuQXN5bmNGb3IuYm9keSk7CisgICAgICAgIGlmIChzLT52LkFzeW5jRm9yLm9yZWxzZSkKKyAgICAgICAgICAgIFZJU0lUX1NFUShzdCwgc3RtdCwgcy0+di5Bc3luY0Zvci5vcmVsc2UpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgVklTSVRfUVVJVChzdCwgMSk7CiB9CkBAIC0xMzQzLDcgKzEzNjUsNyBAQAogc3ltdGFibGVfdmlzaXRfZXhwcihzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBleHByX3R5IGUpCiB7CiAgICAgaWYgKCsrc3QtPnJlY3Vyc2lvbl9kZXB0aCA+IHN0LT5yZWN1cnNpb25fbGltaXQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1JlY3Vyc2lvbkVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIGR1cmluZyBjb21waWxhdGlvbiIpOwogICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKICAgICB9CkBAIC0xMzY0LDggKzEzODYsNyBAQAogICAgICAgICBpZiAoZS0+di5MYW1iZGEuYXJncy0+ZGVmYXVsdHMpCiAgICAgICAgICAgICBWSVNJVF9TRVEoc3QsIGV4cHIsIGUtPnYuTGFtYmRhLmFyZ3MtPmRlZmF1bHRzKTsKICAgICAgICAgaWYgKGUtPnYuTGFtYmRhLmFyZ3MtPmt3X2RlZmF1bHRzKQotICAgICAgICAgICAgVklTSVRfS1dPTkxZREVGQVVMVFMoc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT52LkxhbWJkYS5hcmdzLT5rd19kZWZhdWx0cyk7CisgICAgICAgICAgICBWSVNJVF9TRVFfV0lUSF9OVUxMKHN0LCBleHByLCBlLT52LkxhbWJkYS5hcmdzLT5rd19kZWZhdWx0cyk7CiAgICAgICAgIGlmICghc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIGxhbWJkYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbkJsb2NrLCAodm9pZCAqKWUsIGUtPmxpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLT5jb2xfb2Zmc2V0KSkKQEAgLTEzODIsNyArMTQwMyw3IEBACiAgICAgICAgIFZJU0lUKHN0LCBleHByLCBlLT52LklmRXhwLm9yZWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRGljdF9raW5kOgotICAgICAgICBWSVNJVF9TRVEoc3QsIGV4cHIsIGUtPnYuRGljdC5rZXlzKTsKKyAgICAgICAgVklTSVRfU0VRX1dJVEhfTlVMTChzdCwgZXhwciwgZS0+di5EaWN0LmtleXMpOwogICAgICAgICBWSVNJVF9TRVEoc3QsIGV4cHIsIGUtPnYuRGljdC52YWx1ZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldF9raW5kOgpAQCAtMTQxMyw2ICsxNDM0LDEwIEBACiAgICAgICAgIFZJU0lUKHN0LCBleHByLCBlLT52LllpZWxkRnJvbS52YWx1ZSk7CiAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9nZW5lcmF0b3IgPSAxOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEF3YWl0X2tpbmQ6CisgICAgICAgIFZJU0lUKHN0LCBleHByLCBlLT52LkF3YWl0LnZhbHVlKTsKKyAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2dlbmVyYXRvciA9IDE7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGFyZV9raW5kOgogICAgICAgICBWSVNJVChzdCwgZXhwciwgZS0+di5Db21wYXJlLmxlZnQpOwogICAgICAgICBWSVNJVF9TRVEoc3QsIGV4cHIsIGUtPnYuQ29tcGFyZS5jb21wYXJhdG9ycyk7CkBAIC0xNDIwLDExICsxNDQ1LDcgQEAKICAgICBjYXNlIENhbGxfa2luZDoKICAgICAgICAgVklTSVQoc3QsIGV4cHIsIGUtPnYuQ2FsbC5mdW5jKTsKICAgICAgICAgVklTSVRfU0VRKHN0LCBleHByLCBlLT52LkNhbGwuYXJncyk7Ci0gICAgICAgIFZJU0lUX1NFUShzdCwga2V5d29yZCwgZS0+di5DYWxsLmtleXdvcmRzKTsKLSAgICAgICAgaWYgKGUtPnYuQ2FsbC5zdGFyYXJncykKLSAgICAgICAgICAgIFZJU0lUKHN0LCBleHByLCBlLT52LkNhbGwuc3RhcmFyZ3MpOwotICAgICAgICBpZiAoZS0+di5DYWxsLmt3YXJncykKLSAgICAgICAgICAgIFZJU0lUKHN0LCBleHByLCBlLT52LkNhbGwua3dhcmdzKTsKKyAgICAgICAgVklTSVRfU0VRX1dJVEhfTlVMTChzdCwga2V5d29yZCwgZS0+di5DYWxsLmtleXdvcmRzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOdW1fa2luZDoKICAgICBjYXNlIFN0cl9raW5kOgpAQCAtMTUxNywxMCArMTUzOCw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLXN5bXRhYmxlX3Zpc2l0X2Fubm90YXRpb25zKHN0cnVjdCBzeW10YWJsZSAqc3QsIHN0bXRfdHkgcykKK3N5bXRhYmxlX3Zpc2l0X2Fubm90YXRpb25zKHN0cnVjdCBzeW10YWJsZSAqc3QsIHN0bXRfdHkgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c190eSBhLCBleHByX3R5IHJldHVybnMpCiB7Ci0gICAgYXJndW1lbnRzX3R5IGEgPSBzLT52LkZ1bmN0aW9uRGVmLmFyZ3M7Ci0KICAgICBpZiAoYS0+YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfYXJnYW5ub3RhdGlvbnMoc3QsIGEtPmFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoYS0+dmFyYXJnICYmIGEtPnZhcmFyZy0+YW5ub3RhdGlvbikKQEAgLTE1MjksOCArMTU0OSw4IEBACiAgICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZy0+YW5ub3RhdGlvbik7CiAgICAgaWYgKGEtPmt3b25seWFyZ3MgJiYgIXN5bXRhYmxlX3Zpc2l0X2FyZ2Fubm90YXRpb25zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHMtPnYuRnVuY3Rpb25EZWYucmV0dXJucykKLSAgICAgICAgVklTSVQoc3QsIGV4cHIsIHMtPnYuRnVuY3Rpb25EZWYucmV0dXJucyk7CisgICAgaWYgKHJldHVybnMpCisgICAgICAgIFZJU0lUKHN0LCBleHByLCByZXR1cm5zKTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtMTYxNSw3ICsxNjM1LDYgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9yZV9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIHN0LT5zdF9jdXItPnN0ZV91bm9wdGltaXplZCB8PSBPUFRfSU1QT1JUX1NUQVI7CiAgICAgICAgIFB5X0RFQ1JFRihzdG9yZV9uYW1lKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5c21vZHVsZS5jIGIvUHl0aG9uL3N5c21vZHVsZS5jCmluZGV4IDI5MGVlYzEuLjhkN2UwNWEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zeXNtb2R1bGUuYworKysgYi9QeXRob24vc3lzbW9kdWxlLmMKQEAgLTYzMiwxOSArNjMyLDg0IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc3lzX3NldHJlY3Vyc2lvbmxpbWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgbmV3X2xpbWl0OworICAgIGludCBuZXdfbGltaXQsIG1hcms7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOworCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldHJlY3Vyc2lvbmxpbWl0IiwgJm5ld19saW1pdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChuZXdfbGltaXQgPD0gMCkgeworCisgICAgaWYgKG5ld19saW1pdCA8IDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVjdXJzaW9uIGxpbWl0IG11c3QgYmUgcG9zaXRpdmUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZWN1cnNpb24gbGltaXQgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gMSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgICAvKiBJc3N1ZSAjMjUyNzQ6IFdoZW4gdGhlIHJlY3Vyc2lvbiBkZXB0aCBoaXRzIHRoZSByZWN1cnNpb24gbGltaXQgaW4KKyAgICAgICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsKCksIHRoZSBvdmVyZmxvd2VkIGZsYWcgb2YgdGhlIHRocmVhZCBzdGF0ZSBpcworICAgICAgIHNldCB0byAxIGFuZCBhIFJlY3Vyc2lvbkVycm9yIGlzIHJhaXNlZC4gVGhlIG92ZXJmbG93ZWQgZmxhZyBpcyByZXNldAorICAgICAgIHRvIDAgd2hlbiB0aGUgcmVjdXJzaW9uIGRlcHRoIGdvZXMgYmVsb3cgdGhlIGxvdy13YXRlciBtYXJrOiBzZWUKKyAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKS4KKworICAgICAgIFJlamVjdCB0b28gbG93IG5ldyBsaW1pdCBpZiB0aGUgY3VycmVudCByZWN1cnNpb24gZGVwdGggaXMgaGlnaGVyIHRoYW4KKyAgICAgICB0aGUgbmV3IGxvdy13YXRlciBtYXJrLiBPdGhlcndpc2UgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSBhbnltb3JlIHRvCisgICAgICAgcmVzZXQgdGhlIG92ZXJmbG93ZWQgZmxhZyB0byAwLiAqLworICAgIG1hcmsgPSBfUHlfUmVjdXJzaW9uTGltaXRMb3dlcldhdGVyTWFyayhuZXdfbGltaXQpOworICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgaWYgKHRzdGF0ZS0+cmVjdXJzaW9uX2RlcHRoID49IG1hcmspIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1JlY3Vyc2lvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXQgdGhlIHJlY3Vyc2lvbiBsaW1pdCB0byAlaSBhdCAiCisgICAgICAgICAgICAgICAgICAgICAidGhlIHJlY3Vyc2lvbiBkZXB0aCAlaTogdGhlIGxpbWl0IGlzIHRvbyBsb3ciLAorICAgICAgICAgICAgICAgICAgICAgbmV3X2xpbWl0LCB0c3RhdGUtPnJlY3Vyc2lvbl9kZXB0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIFB5X1NldFJlY3Vyc2lvbkxpbWl0KG5ld19saW1pdCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorc3lzX3NldF9jb3JvdXRpbmVfd3JhcHBlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKndyYXBwZXIpCit7CisgICAgaWYgKHdyYXBwZXIgIT0gUHlfTm9uZSkgeworICAgICAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2sod3JhcHBlcikpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNhbGxhYmxlIGV4cGVjdGVkLCBnb3QgJS41MHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUod3JhcHBlciktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgX1B5RXZhbF9TZXRDb3JvdXRpbmVXcmFwcGVyKHdyYXBwZXIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgX1B5RXZhbF9TZXRDb3JvdXRpbmVXcmFwcGVyKE5VTEwpOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHNldF9jb3JvdXRpbmVfd3JhcHBlcl9kb2MsCisic2V0X2Nvcm91dGluZV93cmFwcGVyKHdyYXBwZXIpXG5cCitcblwKK1NldCBhIHdyYXBwZXIgZm9yIGNvcm91dGluZSBvYmplY3RzLiIKKyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzeXNfZ2V0X2Nvcm91dGluZV93cmFwcGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqd3JhcHBlciA9IF9QeUV2YWxfR2V0Q29yb3V0aW5lV3JhcHBlcigpOworICAgIGlmICh3cmFwcGVyID09IE5VTEwpIHsKKyAgICAgICAgd3JhcHBlciA9IFB5X05vbmU7CisgICAgfQorICAgIFB5X0lOQ1JFRih3cmFwcGVyKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworUHlEb2NfU1RSVkFSKGdldF9jb3JvdXRpbmVfd3JhcHBlcl9kb2MsCisiZ2V0X2Nvcm91dGluZV93cmFwcGVyKClcblwKK1xuXAorUmV0dXJuIHRoZSB3cmFwcGVyIGZvciBjb3JvdXRpbmUgb2JqZWN0cyBzZXQgYnkgc3lzLnNldF9jb3JvdXRpbmVfd3JhcHBlci4iCispOworCisKIHN0YXRpYyBQeVR5cGVPYmplY3QgSGFzaF9JbmZvVHlwZTsKIAogUHlEb2NfU1RSVkFSKGhhc2hfaW5mb19kb2MsCkBAIC03NzIsNiArODM3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWEgaW5kZXhpbmcsIHRoZSByZXN0IGFyZSBuYW1lIG9ubHkgKi8KIH07CiAKKy8qIERpc2FibGUgZGVwcmVjYXRpb24gd2FybmluZ3MgYWJvdXQgR2V0VmVyc2lvbkV4IGFzIHRoZSByZXN1bHQgaXMKKyAgIGJlaW5nIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoIHRvIHRoZSBjYWxsZXIsIHdobyBpcyByZXNwb25zaWJsZSBmb3IKKyAgIHVzaW5nIGl0IGNvcnJlY3RseS4gKi8KKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDk5NikKKwogc3RhdGljIFB5T2JqZWN0ICoKIHN5c19nZXR3aW5kb3dzdmVyc2lvbihQeU9iamVjdCAqc2VsZikKIHsKQEAgLTgwMyw2ICs4NzQsOCBAQAogICAgIHJldHVybiB2ZXJzaW9uOwogfQogCisjcHJhZ21hIHdhcm5pbmcocG9wKQorCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAjaWZkZWYgSEFWRV9ETE9QRU4KQEAgLTExMjEsNiArMTE5NCwxNiBAQAogIl9jbGVhcl90eXBlX2NhY2hlKCkgLT4gTm9uZVxuXAogQ2xlYXIgdGhlIGludGVybmFsIHR5cGUgbG9va3VwIGNhY2hlLiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorc3lzX2lzX2ZpbmFsaXppbmcoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoX1B5X0ZpbmFsaXppbmcgIT0gTlVMTCk7Cit9CisKK1B5RG9jX1NUUlZBUihpc19maW5hbGl6aW5nX2RvYywKKyJpc19maW5hbGl6aW5nKClcblwKK1JldHVybiBUcnVlIGlmIFB5dGhvbiBpcyBleGl0aW5nLiIpOworCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBzeXNfbWV0aG9kc1tdID0gewogICAgIC8qIE1pZ2h0IGFzIHdlbGwga2VlcCB0aGlzIGluIGFscGhhYmV0aWMgb3JkZXIgKi8KQEAgLTExNjcsNiArMTI1MCw3IEBACiAgICAgIGdldHdpbmRvd3N2ZXJzaW9uX2RvY30sCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogICAgIHsiaW50ZXJuIiwgICAgICAgICAgc3lzX2ludGVybiwgICAgIE1FVEhfVkFSQVJHUywgaW50ZXJuX2RvY30sCisgICAgeyJpc19maW5hbGl6aW5nIiwgICBzeXNfaXNfZmluYWxpemluZywgTUVUSF9OT0FSR1MsIGlzX2ZpbmFsaXppbmdfZG9jfSwKICNpZmRlZiBVU0VfTUFMTE9QVAogICAgIHsibWRlYnVnIiwgICAgICAgICAgc3lzX21kZWJ1ZywgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgpAQCAtMTE5Niw2ICsxMjgwLDEwIEBACiAgICAgeyJjYWxsX3RyYWNpbmciLCBzeXNfY2FsbF90cmFjaW5nLCBNRVRIX1ZBUkFSR1MsIGNhbGxfdHJhY2luZ19kb2N9LAogICAgIHsiX2RlYnVnbWFsbG9jc3RhdHMiLCBzeXNfZGVidWdtYWxsb2NzdGF0cywgTUVUSF9OT0FSR1MsCiAgICAgIGRlYnVnbWFsbG9jc3RhdHNfZG9jfSwKKyAgICB7InNldF9jb3JvdXRpbmVfd3JhcHBlciIsIHN5c19zZXRfY29yb3V0aW5lX3dyYXBwZXIsIE1FVEhfTywKKyAgICAgc2V0X2Nvcm91dGluZV93cmFwcGVyX2RvY30sCisgICAgeyJnZXRfY29yb3V0aW5lX3dyYXBwZXIiLCBzeXNfZ2V0X2Nvcm91dGluZV93cmFwcGVyLCBNRVRIX05PQVJHUywKKyAgICAgZ2V0X2Nvcm91dGluZV93cmFwcGVyX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTEzMDksNyArMTM5Nyw3IEBACiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICAvKiBObyByZXR1cm4gdmFsdWUsIHRoZXJlZm9yZSBjbGVhciBlcnJvciBzdGF0ZSBpZiBwb3NzaWJsZSAqLwotICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkpCisgICAgaWYgKF9QeVRocmVhZFN0YXRlX1VuY2hlY2tlZEdldCgpKQogICAgICAgICBQeUVycl9DbGVhcigpOwogfQogCkBAIC0xNjcwLDggKzE3NTgsOCBAQAogICAgIHRoZSBzaGVsbCBhbHJlYWR5IHByZXZlbnRzIHRoYXQuICovCiAjaWYgIWRlZmluZWQoTVNfV0lORE9XUykKICAgICB7Ci0gICAgICAgIHN0cnVjdCBzdGF0IHNiOwotICAgICAgICBpZiAoZnN0YXQoZmlsZW5vKHN0ZGluKSwgJnNiKSA9PSAwICYmCisgICAgICAgIHN0cnVjdCBfUHlfc3RhdF9zdHJ1Y3Qgc2I7CisgICAgICAgIGlmIChfUHlfZnN0YXRfbm9yYWlzZShmaWxlbm8oc3RkaW4pLCAmc2IpID09IDAgJiYKICAgICAgICAgICAgIFNfSVNESVIoc2Iuc3RfbW9kZSkpIHsKICAgICAgICAgICAgIC8qIFRoZXJlJ3Mgbm90aGluZyBtb3JlIHdlIGNhbiBkby4gKi8KICAgICAgICAgICAgIC8qIFB5X0ZhdGFsRXJyb3IoKSB3aWxsIGNvcmUgZHVtcCwgc28ganVzdCBleGl0LiAqLwpAQCAtMTY4MSw3ICsxNzY5LDcgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIC8qIHN0ZGluL3N0ZG91dC9zdGRlcnIgYXJlIG5vdyBzZXQgYnkgcHl0aG9ucnVuLmMgKi8KKyAgICAvKiBzdGRpbi9zdGRvdXQvc3RkZXJyIGFyZSBzZXQgaW4gcHlsaWZlY3ljbGUuYyAqLwogCiAgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl9fZGlzcGxheWhvb2tfXyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImRpc3BsYXlob29rIikpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZC5jIGIvUHl0aG9uL3RocmVhZC5jCmluZGV4IDgxMDY5MWYuLjYzZWViMWUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWQuYworKysgYi9QeXRob24vdGhyZWFkLmMKQEAgLTQzMSw3ICs0MzEsNyBAQAogICAgICAmJiBkZWZpbmVkKF9DU19HTlVfTElCUFRIUkVBRF9WRVJTSU9OKSkKICAgICB2YWx1ZSA9IE5VTEw7CiAgICAgbGVuID0gY29uZnN0cihfQ1NfR05VX0xJQlBUSFJFQURfVkVSU0lPTiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgaWYgKDEgPCBsZW4gJiYgbGVuIDwgc2l6ZW9mKGJ1ZmZlcikpIHsKKyAgICBpZiAoMSA8IGxlbiAmJiAoc2l6ZV90KWxlbiA8IHNpemVvZihidWZmZXIpKSB7CiAgICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoYnVmZmVyLCBsZW4tMSk7CiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfZm9vYmFyLmggYi9QeXRob24vdGhyZWFkX2Zvb2Jhci5oCmluZGV4IGQyYjc4YzUuLmVhOTZmOWMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfZm9vYmFyLmgKKysrIGIvUHl0aG9uL3RocmVhZF9mb29iYXIuaApAQCAtMSw0ICsxLDMgQEAKLQogLyoKICAqIEluaXRpYWxpemF0aW9uLgogICovCkBAIC02MSwxMCArNjAsMTggQEAKIGludAogUHlUaHJlYWRfYWNxdWlyZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrLCBpbnQgd2FpdGZsYWcpCiB7CisgICAgcmV0dXJuIFB5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZChsb2NrLCB3YWl0ZmxhZyA/IC0xIDogMCwgMCk7Cit9CisKK1B5TG9ja1N0YXR1cworUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrLCBQWV9USU1FT1VUX1QgbWljcm9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnRyX2ZsYWcpCit7CiAgICAgaW50IHN1Y2Nlc3M7CiAKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLCBsb2NrLCB3YWl0ZmxhZykpOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSAtPiAlZFxuIiwgbG9jaywgd2FpdGZsYWcsIHN1Y2Nlc3MpKTsKKyAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKCVwLCAlbGxkLCAlZCkgY2FsbGVkXG4iLCBsb2NrLCBtaWNyb3NlY29uZHMsIGludHJfZmxhZykpOworICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQoJXAsICVsbGQsICVkKSAtPiAlZFxuIiwKKwkgICAgIGxvY2ssIG1pY3Jvc2Vjb25kcywgaW50cl9mbGFnLCBzdWNjZXNzKSk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAgLTczLDMgKzgwLDUzIEBACiB7CiAgICAgZHByaW50ZigoIlB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgY2FsbGVkXG4iLCBsb2NrKSk7CiB9CisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgbmVlZGVkIGlmIG5hdGl2ZSBUTFMgc3VwcG9ydCBleGlzdHMgKi8KKyNkZWZpbmUgUHlfSEFWRV9OQVRJVkVfVExTCisKKyNpZmRlZiBQeV9IQVZFX05BVElWRV9UTFMKK2ludAorUHlUaHJlYWRfY3JlYXRlX2tleSh2b2lkKQoreworICAgIGludCByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZAorUHlUaHJlYWRfZGVsZXRlX2tleShpbnQga2V5KQoreworCit9CisKK2ludAorUHlUaHJlYWRfc2V0X2tleV92YWx1ZShpbnQga2V5LCB2b2lkICp2YWx1ZSkKK3sKKyAgICBpbnQgb2s7CisKKyAgICAvKiBBIGZhaWx1cmUgaW4gdGhpcyBjYXNlIHJldHVybnMgLTEgKi8KKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKgorUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShpbnQga2V5KQoreworICAgIHZvaWQgKnJlc3VsdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQKK1B5VGhyZWFkX2RlbGV0ZV9rZXlfdmFsdWUoaW50IGtleSkKK3sKKworfQorCit2b2lkCitQeVRocmVhZF9SZUluaXRUTFModm9pZCkKK3sKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfbnQuaCBiL1B5dGhvbi90aHJlYWRfbnQuaAppbmRleCA4NDQ1MmNkLi5iMjliMWI2IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX250LmgKKysrIGIvUHl0aG9uL3RocmVhZF9udC5oCkBAIC0yMzEsNyArMjMxLDcgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgdGhyZWFkIElkIGluc3RlYWQgb2YgYW4gaGFuZGxlLiBUaGUgSWQgaXMgc2FpZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUKKyAqIFJldHVybiB0aGUgdGhyZWFkIElkIGluc3RlYWQgb2YgYSBoYW5kbGUuIFRoZSBJZCBpcyBzYWlkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZQogICogdGhyZWFkIGluIHRoZSBzeXN0ZW0KICAqLwogbG9uZwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAppbmRleCBkOWY3Yzc2Li4yN2UwZGM4IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAorKysgYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaApAQCAtNjA4LDcgKzYwOCwxNSBAQAogewogICAgIHB0aHJlYWRfa2V5X3Qga2V5OwogICAgIGludCBmYWlsID0gcHRocmVhZF9rZXlfY3JlYXRlKCZrZXksIE5VTEwpOwotICAgIHJldHVybiBmYWlsID8gLTEgOiBrZXk7CisgICAgaWYgKGZhaWwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoa2V5ID4gSU5UX01BWCkgeworICAgICAgICAvKiBJc3N1ZSAjMjIyMDY6IGhhbmRsZSBpbnRlZ2VyIG92ZXJmbG93ICovCisgICAgICAgIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gKGludClrZXk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL1B5dGhvbi90cmFjZWJhY2suYyBiL1B5dGhvbi90cmFjZWJhY2suYwppbmRleCA3ZDFmYzJlLi45NDFkMWNiIDEwMDY0NAotLS0gYS9QeXRob24vdHJhY2ViYWNrLmMKKysrIGIvUHl0aG9uL3RyYWNlYmFjay5jCkBAIC0xMyw3ICsxMyw3IEBACiAKICNkZWZpbmUgT0ZGKHgpIG9mZnNldG9mKFB5VHJhY2ViYWNrT2JqZWN0LCB4KQogCi0jZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgKGludClzdHJsZW4oc3RyKSkKKyNkZWZpbmUgUFVUUyhmZCwgc3RyKSBfUHlfd3JpdGVfbm9yYWlzZShmZCwgc3RyLCAoaW50KXN0cmxlbihzdHIpKQogI2RlZmluZSBNQVhfU1RSSU5HX0xFTkdUSCA1MDAKICNkZWZpbmUgTUFYX0ZSQU1FX0RFUFRIIDEwMAogI2RlZmluZSBNQVhfTlRIUkVBRFMgMTAwCkBAIC0yMzEsNyArMjMxLDcgQEAKICAgICAgICAgfQogICAgICAgICBzdHJjcHkobmFtZWJ1ZiwgUHlCeXRlc19BU19TVFJJTkcocGF0aCkpOwogICAgICAgICBQeV9ERUNSRUYocGF0aCk7Ci0gICAgICAgIGlmIChzdHJsZW4obmFtZWJ1ZikgIT0gbGVuKQorICAgICAgICBpZiAoc3RybGVuKG5hbWVidWYpICE9IChzaXplX3QpbGVuKQogICAgICAgICAgICAgY29udGludWU7IC8qIHYgY29udGFpbnMgJ1wwJyAqLwogICAgICAgICBpZiAobGVuID4gMCAmJiBuYW1lYnVmW2xlbi0xXSAhPSBTRVApCiAgICAgICAgICAgICBuYW1lYnVmW2xlbisrXSA9IFNFUDsKQEAgLTUxMiw3ICs1MTIsNyBAQAogICAgICAgICBsZW4rKzsKICAgICB9IHdoaWxlICh2YWx1ZSk7CiAgICAgcmV2ZXJzZV9zdHJpbmcoYnVmZmVyLCBsZW4pOwotICAgIHdyaXRlKGZkLCBidWZmZXIsIGxlbik7CisgICAgX1B5X3dyaXRlX25vcmFpc2UoZmQsIGJ1ZmZlciwgbGVuKTsKIH0KIAogLyogRm9ybWF0IGFuIGludGVnZXIgaW4gcmFuZ2UgWzA7IDB4ZmZmZmZmZmZdIHRvIGhleGFkZWNpbWFsIG9mICd3aWR0aCcgZGlnaXRzLApAQCAtNTMyLDcgKzUzMiw3IEBACiAgICAgICAgIGxlbisrOwogICAgIH0gd2hpbGUgKGxlbiA8IHdpZHRoIHx8IHZhbHVlKTsKICAgICByZXZlcnNlX3N0cmluZyhidWZmZXIsIGxlbik7Ci0gICAgd3JpdGUoZmQsIGJ1ZmZlciwgbGVuKTsKKyAgICBfUHlfd3JpdGVfbm9yYWlzZShmZCwgYnVmZmVyLCBsZW4pOwogfQogCiAvKiBXcml0ZSBhbiB1bmljb2RlIG9iamVjdCBpbnRvIHRoZSBmaWxlIGZkIHVzaW5nIGFzY2lpK2JhY2tzbGFzaHJlcGxhY2UuCkBAIC01ODIsMTUgKzU4MiwxNiBAQAogICAgICAgICAgICAgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2ggPSB3c3RyW2ldOwotICAgICAgICBpZiAoY2ggPCAxMjgpIHsKKyAgICAgICAgaWYgKCcgJyA8PSBjaCAmJiBjaCA8PSAxMjYpIHsKKyAgICAgICAgICAgIC8qIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIgKi8KICAgICAgICAgICAgIGNoYXIgYyA9IChjaGFyKWNoOwotICAgICAgICAgICAgd3JpdGUoZmQsICZjLCAxKTsKKyAgICAgICAgICAgIF9QeV93cml0ZV9ub3JhaXNlKGZkLCAmYywgMSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2ggPCAweGZmKSB7CisgICAgICAgIGVsc2UgaWYgKGNoIDw9IDB4ZmYpIHsKICAgICAgICAgICAgIFBVVFMoZmQsICJcXHgiKTsKICAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsIGNoLCAyKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZmZmZikgeworICAgICAgICBlbHNlIGlmIChjaCA8PSAweGZmZmYpIHsKICAgICAgICAgICAgIFBVVFMoZmQsICJcXHUiKTsKICAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsIGNoLCA0KTsKICAgICAgICAgfQpAQCAtNjE4LDkgKzYxOSw5IEBACiAgICAgaWYgKGNvZGUgIT0gTlVMTCAmJiBjb2RlLT5jb19maWxlbmFtZSAhPSBOVUxMCiAgICAgICAgICYmIFB5VW5pY29kZV9DaGVjayhjb2RlLT5jb19maWxlbmFtZSkpCiAgICAgewotICAgICAgICB3cml0ZShmZCwgIlwiIiwgMSk7CisgICAgICAgIFBVVFMoZmQsICJcIiIpOwogICAgICAgICBkdW1wX2FzY2lpKGZkLCBjb2RlLT5jb19maWxlbmFtZSk7Ci0gICAgICAgIHdyaXRlKGZkLCAiXCIiLCAxKTsKKyAgICAgICAgUFVUUyhmZCwgIlwiIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUFVUUyhmZCwgIj8/PyIpOwogICAgIH0KQEAgLTYzNyw3ICs2MzgsNyBAQAogICAgIGVsc2UKICAgICAgICAgUFVUUyhmZCwgIj8/PyIpOwogCi0gICAgd3JpdGUoZmQsICJcbiIsIDEpOworICAgIFBVVFMoZmQsICJcbiIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjY3LDYgKzY2OCwxMiBAQAogICAgIH0KIH0KIAorLyogRHVtcCB0aGUgdHJhY2ViYWNrIG9mIGEgUHl0aG9uIHRocmVhZCBpbnRvIGZkLiBVc2Ugd3JpdGUoKSB0byB3cml0ZSB0aGUKKyAgIHRyYWNlYmFjayBhbmQgcmV0cnkgaWYgd3JpdGUoKSBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZmFpbGVkIHdpdGgKKyAgIEVJTlRSKSwgYnV0IGRvbid0IGNhbGwgdGhlIFB5dGhvbiBzaWduYWwgaGFuZGxlci4KKworICAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBjYWxsIFB5RXJyX0NoZWNrU2lnbmFscygpIHRvIGNhbGwgUHl0aG9uIHNpZ25hbAorICAgaGFuZGxlcnMgaWYgc2lnbmFscyB3ZXJlIHJlY2VpdmVkLiAqLwogdm9pZAogX1B5X0R1bXBUcmFjZWJhY2soaW50IGZkLCBQeVRocmVhZFN0YXRlICp0c3RhdGUpCiB7CkBAIC02ODUsMTAgKzY5MiwxNiBAQAogICAgICAgICBQVVRTKGZkLCAiQ3VycmVudCB0aHJlYWQgMHgiKTsKICAgICBlbHNlCiAgICAgICAgIFBVVFMoZmQsICJUaHJlYWQgMHgiKTsKLSAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgc2l6ZW9mKGxvbmcpKjIpOworICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsICh1bnNpZ25lZCBsb25nKXRzdGF0ZS0+dGhyZWFkX2lkLCBzaXplb2YodW5zaWduZWQgbG9uZykqMik7CiAgICAgUFVUUyhmZCwgIiAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6XG4iKTsKIH0KIAorLyogRHVtcCB0aGUgdHJhY2ViYWNrIG9mIGFsbCBQeXRob24gdGhyZWFkcyBpbnRvIGZkLiBVc2Ugd3JpdGUoKSB0byB3cml0ZSB0aGUKKyAgIHRyYWNlYmFjayBhbmQgcmV0cnkgaWYgd3JpdGUoKSBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZmFpbGVkIHdpdGgKKyAgIEVJTlRSKSwgYnV0IGRvbid0IGNhbGwgdGhlIFB5dGhvbiBzaWduYWwgaGFuZGxlci4KKworICAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBjYWxsIFB5RXJyX0NoZWNrU2lnbmFscygpIHRvIGNhbGwgUHl0aG9uIHNpZ25hbAorICAgaGFuZGxlcnMgaWYgc2lnbmFscyB3ZXJlIHJlY2VpdmVkLiAqLwogY29uc3QgY2hhcioKIF9QeV9EdW1wVHJhY2ViYWNrVGhyZWFkcyhpbnQgZmQsIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwLAogICAgICAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKmN1cnJlbnRfdGhyZWFkKQpAQCAtNzA0LDEwICs3MTcsMTEgQEAKICAgICAvKiBEdW1wIHRoZSB0cmFjZWJhY2sgb2YgZWFjaCB0aHJlYWQgKi8KICAgICB0c3RhdGUgPSBQeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZChpbnRlcnApOwogICAgIG50aHJlYWRzID0gMDsKKyAgICBfUHlfQkVHSU5fU1VQUFJFU1NfSVBICiAgICAgZG8KICAgICB7CiAgICAgICAgIGlmIChudGhyZWFkcyAhPSAwKQotICAgICAgICAgICAgd3JpdGUoZmQsICJcbiIsIDEpOworICAgICAgICAgICAgUFVUUyhmZCwgIlxuIik7CiAgICAgICAgIGlmIChudGhyZWFkcyA+PSBNQVhfTlRIUkVBRFMpIHsKICAgICAgICAgICAgIFBVVFMoZmQsICIuLi5cbiIpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03MTcsNiArNzMxLDcgQEAKICAgICAgICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9OZXh0KHRzdGF0ZSk7CiAgICAgICAgIG50aHJlYWRzKys7CiAgICAgfSB3aGlsZSAodHN0YXRlICE9IE5VTEwpOworICAgIF9QeV9FTkRfU1VQUFJFU1NfSVBICiAKICAgICByZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCAxYWUxNWE3Li40ODMxMzRkIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xLDEzICsxLDE0IEBACi1UaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuNC41Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuNS4zIHJlbGVhc2UgY2FuZGlkYXRlIDEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsCiAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotUHl0aG9uIDMueCBpcyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBsYW5ndWFnZSwgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIDIueAotbGluZSBvZiByZWxlYXNlcy4gIFRoZSBsYW5ndWFnZSBpcyBtb3N0bHkgdGhlIHNhbWUsIGJ1dCBtYW55IGRldGFpbHMsIGVzcGVjaWFsbHkKLWhvdyBidWlsdC1pbiBvYmplY3RzIGxpa2UgZGljdGlvbmFyaWVzIGFuZCBzdHJpbmdzIHdvcmssIGhhdmUgY2hhbmdlZAotY29uc2lkZXJhYmx5LCBhbmQgYSBsb3Qgb2YgZGVwcmVjYXRlZCBmZWF0dXJlcyBoYXZlIGZpbmFsbHkgYmVlbiByZW1vdmVkLgorUHl0aG9uIDMueCBpcyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBsYW5ndWFnZSwgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCisyLnggbGluZSBvZiByZWxlYXNlcy4gIFRoZSBsYW5ndWFnZSBpcyBtb3N0bHkgdGhlIHNhbWUsIGJ1dCBtYW55IGRldGFpbHMsCitlc3BlY2lhbGx5IGhvdyBidWlsdC1pbiBvYmplY3RzIGxpa2UgZGljdGlvbmFyaWVzIGFuZCBzdHJpbmdzIHdvcmssCitoYXZlIGNoYW5nZWQgY29uc2lkZXJhYmx5LCBhbmQgYSBsb3Qgb2YgZGVwcmVjYXRlZCBmZWF0dXJlcyBoYXZlIGZpbmFsbHkKK2JlZW4gcmVtb3ZlZC4KIAogCiBCdWlsZCBJbnN0cnVjdGlvbnMKQEAgLTE1LDggKzE2LDYgQEAKIAogT24gVW5peCwgTGludXgsIEJTRCwgT1NYLCBhbmQgQ3lnd2luOgogCi1OZXcgdGV4dAotCiAgICAgLi9jb25maWd1cmUKICAgICBtYWtlCiAgICAgbWFrZSB0ZXN0CkBAIC0yOSwxNCArMjgsMTQgQEAKIGVsc2V3aGVyZSBpdCdzIGp1c3QgcHl0aG9uLgogCiBPbiBNYWMgT1MgWCwgaWYgeW91IGhhdmUgY29uZmlndXJlZCBQeXRob24gd2l0aCAtLWVuYWJsZS1mcmFtZXdvcmssIHlvdSBzaG91bGQKLXVzZSAibWFrZSBmcmFtZXdvcmtpbnN0YWxsIiB0byBkbyB0aGUgaW5zdGFsbGF0aW9uLiAgTm90ZSB0aGF0IHRoaXMgaW5zdGFsbHMgdGhlCi1QeXRob24gZXhlY3V0YWJsZSBpbiBhIHBsYWNlIHRoYXQgaXMgbm90IG5vcm1hbGx5IG9uIHlvdXIgUEFUSCwgeW91IG1heSB3YW50IHRvCi1zZXQgdXAgYSBzeW1saW5rIGluIC91c3IvbG9jYWwvYmluLgordXNlICJtYWtlIGZyYW1ld29ya2luc3RhbGwiIHRvIGRvIHRoZSBpbnN0YWxsYXRpb24uICBOb3RlIHRoYXQgdGhpcyBpbnN0YWxscwordGhlIFB5dGhvbiBleGVjdXRhYmxlIGluIGEgcGxhY2UgdGhhdCBpcyBub3Qgbm9ybWFsbHkgb24geW91ciBQQVRILCB5b3UgbWF5Cit3YW50IHRvIHNldCB1cCBhIHN5bWxpbmsgaW4gL3Vzci9sb2NhbC9iaW4uCiAKIE9uIFdpbmRvd3MsIHNlZSBQQ2J1aWxkL3JlYWRtZS50eHQuCiAKLUlmIHlvdSB3aXNoLCB5b3UgY2FuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBhbmQgaW52b2tlIGNvbmZpZ3VyZSBmcm9tIHRoZXJlLiAgRm9yCi1leGFtcGxlOgorSWYgeW91IHdpc2gsIHlvdSBjYW4gY3JlYXRlIGEgc3ViZGlyZWN0b3J5IGFuZCBpbnZva2UgY29uZmlndXJlIGZyb20gdGhlcmUuCitGb3IgZXhhbXBsZToKIAogICAgIG1rZGlyIGRlYnVnCiAgICAgY2QgZGVidWcKQEAgLTQ0LDIxICs0Myw0OSBAQAogICAgIG1ha2UKICAgICBtYWtlIHRlc3QKIAotKFRoaXMgd2lsbCBmYWlsIGlmIHlvdSAqYWxzbyogYnVpbHQgYXQgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuICBZb3Ugc2hvdWxkIGRvIGEKLSJtYWtlIGNsZWFuIiBhdCB0aGUgdG9wbGV2ZWwgZmlyc3QuKQorKFRoaXMgd2lsbCBmYWlsIGlmIHlvdSAqYWxzbyogYnVpbHQgYXQgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCitZb3Ugc2hvdWxkIGRvIGEgIm1ha2UgY2xlYW4iIGF0IHRoZSB0b3BsZXZlbCBmaXJzdC4pCisKK0lmIHlvdSBuZWVkIGFuIG9wdGltaXplZCB2ZXJzaW9uIG9mIFB5dGhvbiwgeW91IHR5cGUgIm1ha2UgcHJvZmlsZS1vcHQiIGluIHRoZQordG9wIGxldmVsIGRpcmVjdG9yeS4gVGhpcyB3aWxsIHJlYnVpbGQgdGhlIGludGVycHJldGVyIGV4ZWN1dGFibGUgdXNpbmcgUHJvZmlsZQorR3VpZGVkIE9wdGltaXphdGlvbiAoUEdPKS4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBzZWN0aW9uIGJlbGxvdy4KKworCitQcm9maWxlIEd1aWRlZCBPcHRpbWl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQR08gdGFrZXMgYWR2YW50YWdlIG9mIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgR0NDIG9yIENsYW5nIGNvbXBpbGVycy4KK0lmIHJhbiwgdGhlICJwcm9maWxlLW9wdCIgcnVsZSB3aWxsIGRvIHNldmVyYWwgc3RlcHMuCisKK0ZpcnN0LCB0aGUgZW50aXJlIFB5dGhvbiBkaXJlY3RvcnkgaXMgY2xlYW5lZCBvZiB0ZW1wb3JhcnkgZmlsZXMgdGhhdAorbWF5IGhhdmUgcmVzdWx0ZWQgaW4gYSBwcmV2aW91cyBjb21waWxhdGlvbi4KKworVGhlbiwgYW4gaW5zdHJ1bWVudGVkIHZlcnNpb24gb2YgdGhlIGludGVycHJldGVyIGlzIGJ1aWx0LCB1c2luZyBzdWl0YWJsZQorY29tcGlsZXIgZmxhZ3MgZm9yIGVhY2ggZmxhdm91ci4gTm90ZSB0aGF0IHRoaXMgaXMganVzdCBhbiBpbnRlcm1lZGlhcnkKK3N0ZXAgYW5kIHRoZSBiaW5hcnkgcmVzdWx0ZWQgYWZ0ZXIgdGhpcyBzdGVwIGlzIG5vdCBnb29kIGZvciByZWFsIGxpZmUKK3dvcmtsb2FkcywgYXMgaXQgaGFzIHByb2ZpbGluZyBpbnN0cnVjdGlvbnMgZW1iZWRkZWQgaW5zaWRlLgorCitBZnRlciB0aGlzIGluc3RydW1lbnRlZCB2ZXJzaW9uIG9mIHRoZSBpbnRlcnByZXRlciBpcyBidWlsdCwgdGhlIE1ha2VmaWxlCit3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIGEgdHJhaW5pbmcgd29ya2xvYWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvCitwcm9maWxlIHRoZSBpbnRlcnByZXRlciBleGVjdXRpb24uIE5vdGUgYWxzbyB0aGF0IGFueSBvdXRwdXQsIGJvdGggc3Rkb3V0CithbmQgc3RkZXJyLCB0aGF0IG1heSBhcHBlYXIgYXQgdGhpcyBzdGVwIGlzIHN1cHJlc3NlZC4KKworRmluYWxseSwgdGhlIGxhc3Qgc3RlcCBpcyB0byByZWJ1aWxkIHRoZSBpbnRlcnByZXRlciwgdXNpbmcgdGhlIGluZm9ybWF0aW9uCitjb2xsZWN0ZWQgaW4gdGhlIHByZXZpb3VzIG9uZS4gVGhlIGVuZCByZXN1bHQgd2lsbCBiZSBhIFB5dGhvbiBiaW5hcnkKK3RoYXQgaXMgb3B0aW1pemVkIGFuZCBzdWl0YWJsZSBmb3IgZGlzdHJpYnV0aW9uIG9yIHByb2R1Y3Rpb24gaW5zdGFsbGF0aW9uLgogCiAKIFdoYXQncyBOZXcKIC0tLS0tLS0tLS0KIAotV2UgdHJ5IHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHRoZSBjaGFuZ2VzIGluIHRoZSAiV2hhdCdzIE5ldyBpbgotUHl0aG9uIDMuNCIgZG9jdW1lbnQsIGZvdW5kIGF0CitXZSBoYXZlIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgIldoYXQncyBOZXcgaW4KK1B5dGhvbiAzLjUiIGRvY3VtZW50LCBmb3VuZCBhdAogCi0gICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvd2hhdHNuZXcvMy40Lmh0bWwKKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNS93aGF0c25ldy8zLjUuaHRtbAogCi1Gb3IgYSBtb3JlIGRldGFpbGVkIGNoYW5nZSBsb2csIHJlYWQgTWlzYy9ORVdTICh0aG91Z2ggdGhpcyBmaWxlLCB0b28sIGlzCi1pbmNvbXBsZXRlLCBhbmQgYWxzbyBkb2Vzbid0IGxpc3QgYW55dGhpbmcgbWVyZ2VkIGluIGZyb20gdGhlIDIuNyByZWxlYXNlIHVuZGVyCi1kZXZlbG9wbWVudCkuCitGb3IgYSBtb3JlIGRldGFpbGVkIGNoYW5nZSBsb2csIHJlYWQgTWlzYy9ORVdTICh0aG91Z2ggdGhpcyBmaWxlLCB0b28sCitpcyBpbmNvbXBsZXRlLCBhbmQgYWxzbyBkb2Vzbid0IGxpc3QgYW55dGhpbmcgbWVyZ2VkIGluIGZyb20gdGhlIDIuNworcmVsZWFzZSB1bmRlciBkZXZlbG9wbWVudCkuCiAKIElmIHlvdSB3YW50IHRvIGluc3RhbGwgbXVsdGlwbGUgdmVyc2lvbnMgb2YgUHl0aG9uIHNlZSB0aGUgc2VjdGlvbiBiZWxvdwogZW50aXRsZWQgIkluc3RhbGxpbmcgbXVsdGlwbGUgdmVyc2lvbnMiLgpAQCAtNjcsOSArOTQsOSBAQAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCi1Eb2N1bWVudGF0aW9uIGZvciBQeXRob24gMy40IGlzIG9ubGluZSwgdXBkYXRlZCBkYWlseToKK0RvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAzLjUgaXMgb25saW5lLCB1cGRhdGVkIGRhaWx5OgogCi0gICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvCisgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjUvCiAKIEl0IGNhbiBhbHNvIGJlIGRvd25sb2FkZWQgaW4gbWFueSBmb3JtYXRzIGZvciBmYXN0ZXIgYWNjZXNzLiAgVGhlIGRvY3VtZW50YXRpb24KIGlzIGRvd25sb2FkYWJsZSBpbiBIVE1MLCBQREYsIGFuZCByZVN0cnVjdHVyZWRUZXh0IGZvcm1hdHM7IHRoZSBsYXR0ZXIgdmVyc2lvbgpAQCAtOTQsMTYgKzEyMSwxNyBAQAogQSBzb3VyY2UtdG8tc291cmNlIHRyYW5zbGF0aW9uIHRvb2wsICIydG8zIiwgY2FuIHRha2UgY2FyZSBvZiB0aGUgbXVuZGFuZSB0YXNrCiBvZiBjb252ZXJ0aW5nIGxhcmdlIGFtb3VudHMgb2Ygc291cmNlIGNvZGUuICBJdCBpcyBub3QgYSBjb21wbGV0ZSBzb2x1dGlvbiBidXQKIGlzIGNvbXBsZW1lbnRlZCBieSB0aGUgZGVwcmVjYXRpb24gd2FybmluZ3MgaW4gMi42LiAgU2VlCi1odHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC9saWJyYXJ5LzJ0bzMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy41L2xpYnJhcnkvMnRvMy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAKIFRlc3RpbmcKIC0tLS0tLS0KIAotVG8gdGVzdCB0aGUgaW50ZXJwcmV0ZXIsIHR5cGUgIm1ha2UgdGVzdCIgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuICBUaGUgdGVzdAotc2V0IHByb2R1Y2VzIHNvbWUgb3V0cHV0LiAgWW91IGNhbiBnZW5lcmFsbHkgaWdub3JlIHRoZSBtZXNzYWdlcyBhYm91dCBza2lwcGVkCi10ZXN0cyBkdWUgdG8gb3B0aW9uYWwgZmVhdHVyZXMgd2hpY2ggY2FuJ3QgYmUgaW1wb3J0ZWQuICBJZiBhIG1lc3NhZ2UgaXMgcHJpbnRlZAotYWJvdXQgYSBmYWlsZWQgdGVzdCBvciBhIHRyYWNlYmFjayBvciBjb3JlIGR1bXAgaXMgcHJvZHVjZWQsIHNvbWV0aGluZyBpcyB3cm9uZy4KK1RvIHRlc3QgdGhlIGludGVycHJldGVyLCB0eXBlICJtYWtlIHRlc3QiIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorVGhlIHRlc3Qgc2V0IHByb2R1Y2VzIHNvbWUgb3V0cHV0LiAgWW91IGNhbiBnZW5lcmFsbHkgaWdub3JlIHRoZSBtZXNzYWdlcworYWJvdXQgc2tpcHBlZCB0ZXN0cyBkdWUgdG8gb3B0aW9uYWwgZmVhdHVyZXMgd2hpY2ggY2FuJ3QgYmUgaW1wb3J0ZWQuCitJZiBhIG1lc3NhZ2UgaXMgcHJpbnRlZCBhYm91dCBhIGZhaWxlZCB0ZXN0IG9yIGEgdHJhY2ViYWNrIG9yIGNvcmUgZHVtcAoraXMgcHJvZHVjZWQsIHNvbWV0aGluZyBpcyB3cm9uZy4KIAogQnkgZGVmYXVsdCwgdGVzdHMgYXJlIHByZXZlbnRlZCBmcm9tIG92ZXJ1c2luZyByZXNvdXJjZXMgbGlrZSBkaXNrIHNwYWNlIGFuZAogbWVtb3J5LiAgVG8gZW5hYmxlIHRoZXNlIHRlc3RzLCBydW4gIm1ha2UgdGVzdGFsbCIuCkBAIC0xMjMsMTYgKzE1MSwxNiBAQAogCiBPbiBVbml4IGFuZCBNYWMgc3lzdGVtcyBpZiB5b3UgaW50ZW5kIHRvIGluc3RhbGwgbXVsdGlwbGUgdmVyc2lvbnMgb2YgUHl0aG9uCiB1c2luZyB0aGUgc2FtZSBpbnN0YWxsYXRpb24gcHJlZml4ICgtLXByZWZpeCBhcmd1bWVudCB0byB0aGUgY29uZmlndXJlIHNjcmlwdCkKLXlvdSBtdXN0IHRha2UgY2FyZSB0aGF0IHlvdXIgcHJpbWFyeSBweXRob24gZXhlY3V0YWJsZSBpcyBub3Qgb3ZlcndyaXR0ZW4gYnkgdGhlCi1pbnN0YWxsYXRpb24gb2YgYSBkaWZmZXJlbnQgdmVyc2lvbi4gIEFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW5zdGFsbGVkIHVzaW5nCi0ibWFrZSBhbHRpbnN0YWxsIiBjb250YWluIHRoZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBhbmQgY2FuIHRodXMgbGl2ZQotc2lkZS1ieS1zaWRlLiAgIm1ha2UgaW5zdGFsbCIgYWxzbyBjcmVhdGVzICR7cHJlZml4fS9iaW4vcHl0aG9uMyB3aGljaCByZWZlcnMgdG8KLSR7cHJlZml4fS9iaW4vcHl0aG9uWC5ZLiAgSWYgeW91IGludGVuZCB0byBpbnN0YWxsIG11bHRpcGxlIHZlcnNpb25zIHVzaW5nIHRoZQotc2FtZSBwcmVmaXggeW91IG11c3QgZGVjaWRlIHdoaWNoIHZlcnNpb24gKGlmIGFueSkgaXMgeW91ciAicHJpbWFyeSIgdmVyc2lvbi4KLUluc3RhbGwgdGhhdCB2ZXJzaW9uIHVzaW5nICJtYWtlIGluc3RhbGwiLiAgSW5zdGFsbCBhbGwgb3RoZXIgdmVyc2lvbnMgdXNpbmcKLSJtYWtlIGFsdGluc3RhbGwiLgoreW91IG11c3QgdGFrZSBjYXJlIHRoYXQgeW91ciBwcmltYXJ5IHB5dGhvbiBleGVjdXRhYmxlIGlzIG5vdCBvdmVyd3JpdHRlbiBieQordGhlIGluc3RhbGxhdGlvbiBvZiBhIGRpZmZlcmVudCB2ZXJzaW9uLiAgQWxsIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbnN0YWxsZWQKK3VzaW5nICJtYWtlIGFsdGluc3RhbGwiIGNvbnRhaW4gdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIGFuZCBjYW4gdGh1cyBsaXZlCitzaWRlLWJ5LXNpZGUuICAibWFrZSBpbnN0YWxsIiBhbHNvIGNyZWF0ZXMgJHtwcmVmaXh9L2Jpbi9weXRob24zIHdoaWNoIHJlZmVycwordG8gJHtwcmVmaXh9L2Jpbi9weXRob25YLlkuICBJZiB5b3UgaW50ZW5kIHRvIGluc3RhbGwgbXVsdGlwbGUgdmVyc2lvbnMgdXNpbmcKK3RoZSBzYW1lIHByZWZpeCB5b3UgbXVzdCBkZWNpZGUgd2hpY2ggdmVyc2lvbiAoaWYgYW55KSBpcyB5b3VyICJwcmltYXJ5IgordmVyc2lvbi4gIEluc3RhbGwgdGhhdCB2ZXJzaW9uIHVzaW5nICJtYWtlIGluc3RhbGwiLiAgSW5zdGFsbCBhbGwgb3RoZXIKK3ZlcnNpb25zIHVzaW5nICJtYWtlIGFsdGluc3RhbGwiLgogCi1Gb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi42LCAyLjcgYW5kIDMuNCB3aXRoIDIuNyBiZWluZyB0aGUKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIFB5dGhvbiAyLjYsIDIuNyBhbmQgMy41IHdpdGggMi43IGJlaW5nIHRoZQogcHJpbWFyeSB2ZXJzaW9uLCB5b3Ugd291bGQgZXhlY3V0ZSAibWFrZSBpbnN0YWxsIiBpbiB5b3VyIDIuNyBidWlsZCBkaXJlY3RvcnkKIGFuZCAibWFrZSBhbHRpbnN0YWxsIiBpbiB0aGUgb3RoZXJzLgogCkBAIC0xNDEsNyArMTY5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXZSdyZSBzb2xpY2l0aW5nIGJ1ZyByZXBvcnRzIGFib3V0IGFsbCBhc3BlY3RzIG9mIHRoZSBsYW5ndWFnZS4gIEZpeGVzIGFyZSBhbHNvCi13ZWxjb21lLCBwcmVmZXJhYmxlIGluIHVuaWZpZWQgZGlmZiBmb3JtYXQuICBQbGVhc2UgdXNlIHRoZSBpc3N1ZSB0cmFja2VyOgord2VsY29tZSwgcHJlZmVyYWJseSBpbiB1bmlmaWVkIGRpZmYgZm9ybWF0LiAgUGxlYXNlIHVzZSB0aGUgaXNzdWUgdHJhY2tlcjoKIAogICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvCiAKQEAgLTE2OCw3ICsxOTYsNyBAQAogUmVsZWFzZSBTY2hlZHVsZQogLS0tLS0tLS0tLS0tLS0tLQogCi1TZWUgUEVQIDQyOSBmb3IgcmVsZWFzZSBkZXRhaWxzOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTA0MjkvCitTZWUgUEVQIDQ3OCBmb3IgcmVsZWFzZSBkZXRhaWxzOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTA0NzgvCiAKIAogQ29weXJpZ2h0IGFuZCBMaWNlbnNlIEluZm9ybWF0aW9uCkBAIC0xODQsMTEgKzIxMiwxMSBAQAogCiBDb3B5cmlnaHQgKGMpIDE5OTEtMTk5NSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi1TZWUgdGhlIGZpbGUgIkxJQ0VOU0UiIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgaGlzdG9yeSBvZiB0aGlzIHNvZnR3YXJlLCB0ZXJtcyAmCi1jb25kaXRpb25zIGZvciB1c2FnZSwgYW5kIGEgRElTQ0xBSU1FUiBPRiBBTEwgV0FSUkFOVElFUy4KK1NlZSB0aGUgZmlsZSAiTElDRU5TRSIgZm9yIGluZm9ybWF0aW9uIG9uIHRoZSBoaXN0b3J5IG9mIHRoaXMgc29mdHdhcmUsCit0ZXJtcyAmIGNvbmRpdGlvbnMgZm9yIHVzYWdlLCBhbmQgYSBESVNDTEFJTUVSIE9GIEFMTCBXQVJSQU5USUVTLgogCi1UaGlzIFB5dGhvbiBkaXN0cmlidXRpb24gY29udGFpbnMgKm5vKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBjb2RlLCBzbwotaXQgbWF5IGJlIHVzZWQgaW4gcHJvcHJpZXRhcnkgcHJvamVjdHMuICBUaGVyZSBhcmUgaW50ZXJmYWNlcyB0byBzb21lIEdOVSBjb2RlCi1idXQgdGhlc2UgYXJlIGVudGlyZWx5IG9wdGlvbmFsLgorVGhpcyBQeXRob24gZGlzdHJpYnV0aW9uIGNvbnRhaW5zICpubyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgY29kZSwKK3NvIGl0IG1heSBiZSB1c2VkIGluIHByb3ByaWV0YXJ5IHByb2plY3RzLiAgVGhlcmUgYXJlIGludGVyZmFjZXMgdG8gc29tZSBHTlUKK2NvZGUgYnV0IHRoZXNlIGFyZSBlbnRpcmVseSBvcHRpb25hbC4KIAogQWxsIHRyYWRlbWFya3MgcmVmZXJlbmNlZCBoZXJlaW4gYXJlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgaG9sZGVycy4KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2J1aWxkbXNpLmJhdCBiL1Rvb2xzL2J1aWxkYm90L2J1aWxkbXNpLmJhdAppbmRleCA0Y2E1NjA0Li5lM2MyZGJkIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9idWlsZG1zaS5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvYnVpbGRtc2kuYmF0CkBAIC0xLDIxICsxLDkgQEAKIEByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgImJ1aWxkbXNpIiBzdGVwLg0KK3NldGxvY2FsDQogDQotY21kIC9jIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdA0KLUByZW0gYnVpbGQgcmVsZWFzZSB2ZXJzaW9ucyBvZiB0aGluZ3MNCi1jYWxsICIlVlMxMDBDT01OVE9PTFMldnN2YXJzMzIuYmF0Ig0KK3B1c2hkDQogDQotQHJlbSBidWlsZCBQeXRob24NCi1tc2J1aWxkIC9wOnVzZWVudj10cnVlIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPVdpbjMyDQorQHJlbSBidWlsZCBib3RoIHNuYXBzaG90IE1TSXMNCitjYWxsICIlfmRwMC4uXG1zaVxidWlsZC5iYXQiIC14ODYgLXg2NA0KIA0KLUByZW0gYnVpbGQgdGhlIGRvY3VtZW50YXRpb24NCi1iYXNoLmV4ZSAtYyAnY2QgRG9jO21ha2UgUFlUSE9OPXB5dGhvbjIuNSB1cGRhdGUgaHRtbGhlbHAnDQotIiVQcm9ncmFtRmlsZXMlXEhUTUwgSGVscCBXb3Jrc2hvcFxoaGMuZXhlIiBEb2NcYnVpbGRcaHRtbGhlbHBccHl0aG9uMjZhMy5oaHANCi0NCi1AcmVtIGJ1aWxkIHRoZSBNU0kgZmlsZQ0KLWNkIFBDDQotbm1ha2UgL2YgaWNvbnMubWFrDQotY2QgLi5cVG9vbHNcbXNpDQotZGVsICoubXNpDQotbm1ha2UgL2YgbXNpc3VwcG9ydC5tYWsNCi0lSE9TVF9QWVRIT04lIG1zaS5weQ0KLQ0KK3BvcGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC90ZXN0LmJhdCBiL1Rvb2xzL2J1aWxkYm90L3Rlc3QuYmF0CmluZGV4IDE1NGRmYTUuLmZmN2QxNjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L3Rlc3QuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L3Rlc3QuYmF0CkBAIC0xLDE1ICsxLDE5IEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJ0ZXN0IiBzdGVwLg0KLUBzZXRsb2NhbA0KK0BlY2hvIG9mZg0KK3JlbSBVc2VkIGJ5IHRoZSBidWlsZGJvdCAidGVzdCIgc3RlcC4NCitzZXRsb2NhbA0KIA0KLUBzZXQgaGVyZT0lfmRwMA0KLUBzZXQgcnRfb3B0cz0tcSAtZA0KK3NldCBoZXJlPSV+ZHAwDQorc2V0IHJ0X29wdHM9LXEgLWQNCitzZXQgcmVncnRlc3RfYXJncz0NCiANCiA6Q2hlY2tPcHRzDQotQGlmICclMSc9PScteDY0JyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCi1AaWYgJyUxJz09Jy1kJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCi1AaWYgJyUxJz09Jy1PJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCi1AaWYgJyUxJz09Jy1xJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCi1AaWYgJyUxJz09JytkJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHM6LWQ9JSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQotQGlmICclMSc9PScrcScgKHNldCBydF9vcHRzPSVydF9vcHRzOi1xPSUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSI9PSIteDY0IiAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJTEiPT0iLWQiIChzZXQgcnRfb3B0cz0lcnRfb3B0cyUgJTEpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSI9PSItTyIgKHNldCBydF9vcHRzPSVydF9vcHRzJSAlMSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIj09Ii1xIiAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJTEiPT0iK2QiIChzZXQgcnRfb3B0cz0lcnRfb3B0czotZD0lKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJTEiPT0iK3EiIChzZXQgcnRfb3B0cz0lcnRfb3B0czotcT0lKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiBOT1QgIiUxIj09IiIgKHNldCByZWdydGVzdF9hcmdzPSVyZWdydGVzdF9hcmdzJSAlMSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQogDQotY2FsbCAiJWhlcmUlLi5cLi5cUENidWlsZFxydC5iYXQiICVydF9vcHRzJSAtdWFsbCAtcndXIC1uIC0tdGltZW91dD0zNjAwICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5DQorZWNobyBvbg0KK2NhbGwgIiVoZXJlJS4uXC4uXFBDYnVpbGRccnQuYmF0IiAlcnRfb3B0cyUgLXVhbGwgLXJ3VyAtLXRpbWVvdXQ9MzYwMCAlcmVncnRlc3RfYXJncyUNCmRpZmYgLS1naXQgYS9Ub29scy9jbGluaWMvY2xpbmljLnB5IGIvVG9vbHMvY2xpbmljL2NsaW5pYy5weQppbmRleCBjNmFjM2I5Li5mNjE1ZWQ5IDEwMDc1NQotLS0gYS9Ub29scy9jbGluaWMvY2xpbmljLnB5CisrKyBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKQEAgLTI2LDggKzI2LDEyIEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdXVpZAogCitmcm9tIHR5cGVzIGltcG9ydCAqCitOb25lVHlwZSA9IHR5cGUoTm9uZSkKKwogIyBUT0RPOgogIwogIyBzb29uOgpAQCAtNjYsNiArNzAsMTAgQEAKIAogdW5rbm93biA9IFVua25vd24oKQogCitzaWdfZW5kX21hcmtlciA9ICctLScKKworCitfdGV4dF9hY2N1bXVsYXRvcl9udCA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIl90ZXh0X2FjY3VtdWxhdG9yIiwgInRleHQgYXBwZW5kIG91dHB1dCIpCiAKIGRlZiBfdGV4dF9hY2N1bXVsYXRvcigpOgogICAgIHRleHQgPSBbXQpAQCAtNzMsOSArODEsMTEgQEAKICAgICAgICAgcyA9ICcnLmpvaW4odGV4dCkKICAgICAgICAgdGV4dC5jbGVhcigpCiAgICAgICAgIHJldHVybiBzCi0gICAgcmV0dXJuIHRleHQsIHRleHQuYXBwZW5kLCBvdXRwdXQKKyAgICByZXR1cm4gX3RleHRfYWNjdW11bGF0b3JfbnQodGV4dCwgdGV4dC5hcHBlbmQsIG91dHB1dCkKIAogCit0ZXh0X2FjY3VtdWxhdG9yX250ID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgidGV4dF9hY2N1bXVsYXRvciIsICJ0ZXh0IGFwcGVuZCIpCisKIGRlZiB0ZXh0X2FjY3VtdWxhdG9yKCk6CiAgICAgIiIiCiAgICAgQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0IGFjY3VtdWxhdG9yIC8gam9pbmVyLgpAQCAtODgsNyArOTgsNyBAQAogICAgICAgIGVtcHRpZXMgdGhlIGFjY3VtdWxhdG9yLgogICAgICIiIgogICAgIHRleHQsIGFwcGVuZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQotICAgIHJldHVybiBhcHBlbmQsIG91dHB1dAorICAgIHJldHVybiB0ZXh0X2FjY3VtdWxhdG9yX250KGFwcGVuZCwgb3V0cHV0KQogCiAKIGRlZiB3YXJuX29yX2ZhaWwoZmFpbD1GYWxzZSwgKmFyZ3MsIGZpbGVuYW1lPU5vbmUsIGxpbmVfbnVtYmVyPU5vbmUpOgpAQCAtMTY2LDYgKzE3NiwxMyBAQAogICAgIHRleHQucG9wKCkKICAgICByZXR1cm4gb3V0cHV0KCkKIAorZGVmIGZvcm1hdF9lc2NhcGUocyk6CisgICAgIyBkb3VibGUgdXAgY3VybHktYnJhY2VzLCB0aGlzIHN0cmluZyB3aWxsIGJlIHVzZWQKKyAgICAjIGFzIHBhcnQgb2YgYSBmb3JtYXRfbWFwKCkgdGVtcGxhdGUgbGF0ZXIKKyAgICBzID0gcy5yZXBsYWNlKCd7JywgJ3t7JykKKyAgICBzID0gcy5yZXBsYWNlKCd9JywgJ319JykKKyAgICByZXR1cm4gcworCiBkZWYgbGluZWFyX2Zvcm1hdChzLCAqKmt3YXJncyk6CiAgICAgIiIiCiAgICAgUGVyZm9ybSBzdHIuZm9ybWF0LWxpa2Ugc3Vic3RpdHV0aW9uLCBleGNlcHQ6CkBAIC0xODksNyArMjA2LDcgQEAKICAgICAgICAgICAgIGFkZCgnXG4nKQogICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICBuYW1lLCBjdXJsLCB0cmFpbGluZyA9IHRyYWlsaW5nLnBhcnRpdGlvbignfScpCisgICAgICAgIG5hbWUsIGN1cmx5LCB0cmFpbGluZyA9IHRyYWlsaW5nLnBhcnRpdGlvbignfScpCiAgICAgICAgIGlmIG5vdCBjdXJseSBvciBuYW1lIG5vdCBpbiBrd2FyZ3M6CiAgICAgICAgICAgICBhZGQobGluZSkKICAgICAgICAgICAgIGFkZCgnXG4nKQpAQCAtNTIxLDYgKzUzOCw1OCBAQAogICAgIHJldHVybiBzCiAKIAorZGVmIHdyYXBfZGVjbGFyYXRpb25zKHRleHQsIGxlbmd0aD03OCk6CisgICAgIiIiCisgICAgQSBzaW1wbGUtbWluZGVkIHRleHQgd3JhcHBlciBmb3IgQyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisKKyAgICBJdCB2aWV3cyBhIGRlY2xhcmF0aW9uIGxpbmUgYXMgbG9va2luZyBsaWtlIHRoaXM6CisgICAgICAgIHh4eHh4eHh4KHh4eHh4eHh4eCx4eHh4eHh4eHgpCisgICAgSWYgY2FsbGVkIHdpdGggbGVuZ3RoPTMwLCBpdCB3b3VsZCB3cmFwIHRoYXQgbGluZSBpbnRvCisgICAgICAgIHh4eHh4eHh4KHh4eHh4eHh4eCwKKyAgICAgICAgICAgICAgICAgeHh4eHh4eHh4KQorICAgIChJZiB0aGUgZGVjbGFyYXRpb24gaGFzIHplcm8gb3Igb25lIHBhcmFtZXRlcnMsIHRoaXMKKyAgICBmdW5jdGlvbiB3b24ndCB3cmFwIGl0LikKKworICAgIElmIHRoaXMgZG9lc24ndCB3b3JrIHByb3Blcmx5LCBpdCdzIHByb2JhYmx5IGJldHRlciB0bworICAgIHN0YXJ0IGZyb20gc2NyYXRjaCB3aXRoIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFsZ29yaXRobSwKKyAgICByYXRoZXIgdGhhbiB0cnkgYW5kIGltcHJvdmUvZGVidWcgdGhpcyBkdW1iIGxpdHRsZSBmdW5jdGlvbi4KKyAgICAiIiIKKyAgICBsaW5lcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gdGV4dC5zcGxpdCgnXG4nKToKKyAgICAgICAgcHJlZml4LCBfLCBhZnRlcl9sX3BhcmVuID0gbGluZS5wYXJ0aXRpb24oJygnKQorICAgICAgICBpZiBub3QgYWZ0ZXJfbF9wYXJlbjoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcGFyYW1ldGVycywgXywgYWZ0ZXJfcl9wYXJlbiA9IGFmdGVyX2xfcGFyZW4ucGFydGl0aW9uKCcpJykKKyAgICAgICAgaWYgbm90IF86CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmICcsJyBub3QgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcGFyYW1ldGVycyA9IFt4LnN0cmlwKCkgKyAiLCAiIGZvciB4IGluIHBhcmFtZXRlcnMuc3BsaXQoJywnKV0KKyAgICAgICAgcHJlZml4ICs9ICIoIgorICAgICAgICBpZiBsZW4ocHJlZml4KSA8IGxlbmd0aDoKKyAgICAgICAgICAgIHNwYWNlcyA9ICIgIiAqIGxlbihwcmVmaXgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGFjZXMgPSAiICIgKiA0CisKKyAgICAgICAgd2hpbGUgcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGxpbmUgPSBwcmVmaXgKKyAgICAgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICAgICAgd2hpbGUgcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBpZiAobm90IGZpcnN0IGFuZAorICAgICAgICAgICAgICAgICAgICAobGVuKGxpbmUpICsgbGVuKHBhcmFtZXRlcnNbMF0pID4gbGVuZ3RoKSk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbGluZSArPSBwYXJhbWV0ZXJzLnBvcCgwKQorICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgiLCAiKSArICIpIiArIGFmdGVyX3JfcGFyZW4KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lLnJzdHJpcCgpKQorICAgICAgICAgICAgcHJlZml4ID0gc3BhY2VzCisgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworCiBjbGFzcyBDTGFuZ3VhZ2UoTGFuZ3VhZ2UpOgogCiAgICAgYm9keV9wcmVmaXggICA9ICIjIgpAQCAtNTU1LDggKzYyNCwxMyBAQAogICAgICAgICAgICAgYWRkKHF1b3RlZF9mb3JfY19zdHJpbmcobGluZSkpCiAgICAgICAgICAgICBhZGQoJ1xcbiJcbicpCiAKLSAgICAgICAgdGV4dC5wb3AoKQotICAgICAgICBhZGQoJyInKQorICAgICAgICBpZiB0ZXh0Wy0yXSA9PSBzaWdfZW5kX21hcmtlcjoKKyAgICAgICAgICAgICMgSWYgd2Ugb25seSBoYXZlIGEgc2lnbmF0dXJlLCBhZGQgdGhlIGJsYW5rIGxpbmUgdGhhdCB0aGUKKyAgICAgICAgICAgICMgX190ZXh0X3NpZ25hdHVyZV9fIGdldHRlciBleHBlY3RzIHRvIGJlIHRoZXJlLgorICAgICAgICAgICAgYWRkKCciXFxuIicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXh0LnBvcCgpCisgICAgICAgICAgICBhZGQoJyInKQogICAgICAgICByZXR1cm4gJycuam9pbih0ZXh0KQogCiAgICAgZGVmIG91dHB1dF90ZW1wbGF0ZXMoc2VsZiwgZik6CkBAIC01ODksOCArNjYzLDYgQEAKICAgICAgICAgbWV0aF9vID0gKGxlbihwYXJhbWV0ZXJzKSA9PSAxIGFuZAogICAgICAgICAgICAgICBwYXJhbWV0ZXJzWzBdLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZIGFuZAogICAgICAgICAgICAgICBub3QgY29udmVydGVyc1swXS5pc19vcHRpb25hbCgpIGFuZAotICAgICAgICAgICAgICBpc2luc3RhbmNlKGNvbnZlcnRlcnNbMF0sIG9iamVjdF9jb252ZXJ0ZXIpIGFuZAotICAgICAgICAgICAgICBjb252ZXJ0ZXJzWzBdLmZvcm1hdF91bml0ID09ICdPJyBhbmQKICAgICAgICAgICAgICAgbm90IG5ld19vcl9pbml0KQogCiAgICAgICAgICMgd2UgaGF2ZSB0byBzZXQgdGhlc2UgdGhpbmdzIGJlZm9yZSB3ZSdyZSBkb25lOgpAQCAtNjk2LDIyICs3NjgsMzggQEAKICAgICAgICAgZWxpZiBtZXRoX286CiAgICAgICAgICAgICBmbGFncyA9ICJNRVRIX08iCiAKLSAgICAgICAgICAgIG1ldGhfb19wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKLSAgICAgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7aW1wbF9wYXJhbWV0ZXJzfSkKLSAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShjb252ZXJ0ZXJzWzBdLCBvYmplY3RfY29udmVydGVyKSBhbmQKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzWzBdLmZvcm1hdF91bml0ID09ICdPJyk6CisgICAgICAgICAgICAgICAgbWV0aF9vX3Byb3RvdHlwZSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICAgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe2ltcGxfcGFyYW1ldGVyc30pCisgICAgICAgICAgICAgICAgICAgICIiIikKIAotICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgotICAgICAgICAgICAgICAgICMgbWFwcyBwZXJmZWN0bHkgdG8gTUVUSF9PLCBkb2Vzbid0IG5lZWQgYSByZXR1cm4gY29udmVydGVyLgotICAgICAgICAgICAgICAgICMgc28gd2Ugc2tpcCBtYWtpbmcgYSBwYXJzZSBmdW5jdGlvbgotICAgICAgICAgICAgICAgICMgYW5kIGNhbGwgZGlyZWN0bHkgaW50byB0aGUgaW1wbCBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICBpbXBsX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfZGVmaW5pdGlvbiA9ICcnCi0gICAgICAgICAgICAgICAgaW1wbF9kZWZpbml0aW9uID0gbWV0aF9vX3Byb3RvdHlwZQorICAgICAgICAgICAgICAgIGlmIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcjoKKyAgICAgICAgICAgICAgICAgICAgIyBtYXBzIHBlcmZlY3RseSB0byBNRVRIX08sIGRvZXNuJ3QgbmVlZCBhIHJldHVybiBjb252ZXJ0ZXIuCisgICAgICAgICAgICAgICAgICAgICMgc28gd2Ugc2tpcCBtYWtpbmcgYSBwYXJzZSBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAjIGFuZCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIGltcGwgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGltcGxfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9kZWZpbml0aW9uID0gJycKKyAgICAgICAgICAgICAgICAgICAgaW1wbF9kZWZpbml0aW9uID0gbWV0aF9vX3Byb3RvdHlwZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgU0xJR0hUIEhBQ0sKKyAgICAgICAgICAgICAgICAgICAgIyB1c2UgaW1wbF9wYXJhbWV0ZXJzIGZvciB0aGUgcGFyc2VyIGhlcmUhCisgICAgICAgICAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBtZXRoX29fcHJvdG90eXBlCisgICAgICAgICAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSkKKwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIFNMSUdIVCBIQUNLCi0gICAgICAgICAgICAgICAgIyB1c2UgaW1wbF9wYXJhbWV0ZXJzIGZvciB0aGUgcGFyc2VyIGhlcmUhCi0gICAgICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IG1ldGhfb19wcm90b3R5cGUKLSAgICAgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUpCisgICAgICAgICAgICAgICAgYXJnbmFtZSA9ICdhcmcnCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyc1swXS5uYW1lID09IGFyZ25hbWU6CisgICAgICAgICAgICAgICAgICAgIGFyZ25hbWUgKz0gJ18nCisgICAgICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICAgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKiVzKQorICAgICAgICAgICAgICAgICAgICAiIiIgJSBhcmduYW1lKQorCisgICAgICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlLCBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZSglcywgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgIiIiICUgYXJnbmFtZSwgaW5kZW50PTQpKQogCiAgICAgICAgIGVsaWYgaGFzX29wdGlvbl9ncm91cHM6CiAgICAgICAgICAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3aXRoIG9wdGlvbiBncm91cHMKQEAgLTc0Niw4ICs4MzQsNyBAQAogICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGVfdmFyYXJncwogCiAgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgICAgICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwKKyAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsCiAgICAgICAgICAgICAgICAgICAgIHtwYXJzZV9hcmd1bWVudHN9KSkKICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQpAQCAtNzU5LDE0ICs4NDYsMTIgQEAKICAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlX2tleXdvcmQKIAogICAgICAgICAgICAgYm9keSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKLSAgICAgICAgICAgICAgICAgICAgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIF9rZXl3b3JkcywKKyAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCBfa2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgIHtwYXJzZV9hcmd1bWVudHN9KSkKICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgIiIiLCBpbmRlbnQ9NCkKICAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAgICAgICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwgX2tleXdvcmRzLAorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIF9rZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICAgICAgIiIiLCBpbmRlbnQ9NCkpCkBAIC04MjAsNyArOTA1LDggQEAKICAgICAgICAgICAgIGNwcF9pZiA9ICIjaWYgIiArIGNvbmRpdGlvbmFsCiAgICAgICAgICAgICBjcHBfZW5kaWYgPSAiI2VuZGlmIC8qICIgKyBjb25kaXRpb25hbCArICIgKi8iCiAKLSAgICAgICAgICAgIGlmIG1ldGhvZGRlZl9kZWZpbmU6CisgICAgICAgICAgICBpZiBtZXRob2RkZWZfZGVmaW5lIGFuZCBmLm5hbWUgbm90IGluIGNsaW5pYy5pZm5kZWZfc3ltYm9sczoKKyAgICAgICAgICAgICAgICBjbGluaWMuaWZuZGVmX3N5bWJvbHMuYWRkKGYubmFtZSkKICAgICAgICAgICAgICAgICBtZXRob2RkZWZfaWZuZGVmID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCiAgICAgICAgICAgICAgICAgICAgICNpZm5kZWYge21ldGhvZGRlZl9uYW1lfQogICAgICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSB7bWV0aG9kZGVmX25hbWV9CkBAIC05MTcsNyArMTAwMyw3IEBACiAgICAgICAgIGNvdW50X21pbiA9IHN5cy5tYXhzaXplCiAgICAgICAgIGNvdW50X21heCA9IC0xCiAKLSAgICAgICAgYWRkKCJzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHt7XG4iKQorICAgICAgICBhZGQoInN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSkge1xuIikKICAgICAgICAgZm9yIHN1YnNldCBpbiBwZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhsZWZ0LCByZXF1aXJlZCwgcmlnaHQpOgogICAgICAgICAgICAgY291bnQgPSBsZW4oc3Vic2V0KQogICAgICAgICAgICAgY291bnRfbWluID0gbWluKGNvdW50X21pbiwgY291bnQpCkBAIC05MzMsNyArMTAxOSw2IEBACiAgICAgICAgICAgICBkID0ge30KICAgICAgICAgICAgIGRbJ2NvdW50J10gPSBjb3VudAogICAgICAgICAgICAgZFsnbmFtZSddID0gZi5uYW1lCi0gICAgICAgICAgICBkWydncm91cHMnXSA9IHNvcnRlZChncm91cF9pZHMpCiAgICAgICAgICAgICBkWydmb3JtYXRfdW5pdHMnXSA9ICIiLmpvaW4ocC5jb252ZXJ0ZXIuZm9ybWF0X3VuaXQgZm9yIHAgaW4gc3Vic2V0KQogCiAgICAgICAgICAgICBwYXJzZV9hcmd1bWVudHMgPSBbXQpAQCAtOTYwLDggKzEwNDUsOCBAQAogICAgICAgICBzID0gJyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInt9IHJlcXVpcmVzIHt9IHRvIHt9IGFyZ3VtZW50cyIpO1xuJwogICAgICAgICBhZGQocy5mb3JtYXQoZi5mdWxsX25hbWUsIGNvdW50X21pbiwgY291bnRfbWF4KSkKICAgICAgICAgYWRkKCcgICAgICAgIGdvdG8gZXhpdDtcbicpCi0gICAgICAgIGFkZCgifX0iKQotICAgICAgICB0ZW1wbGF0ZV9kaWN0WydvcHRpb25fZ3JvdXBfcGFyc2luZyddID0gb3V0cHV0KCkKKyAgICAgICAgYWRkKCJ9IikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnb3B0aW9uX2dyb3VwX3BhcnNpbmcnXSA9IGZvcm1hdF9lc2NhcGUob3V0cHV0KCkpCiAKICAgICBkZWYgcmVuZGVyX2Z1bmN0aW9uKHNlbGYsIGNsaW5pYywgZik6CiAgICAgICAgIGlmIG5vdCBmOgpAQCAtMTAyMCw3ICsxMTA1LDcgQEAKICAgICAgICAgIyBNRVRIX08sIHdlIGhhdmUgZXhhY3RseSBvbmUgYW55d2F5LCBzbyB3ZSBrbm93IGV4YWN0bHkKICAgICAgICAgIyB3aGVyZSBpdCBpcy4KICAgICAgICAgaWYgKCJNRVRIX08iIGluIHRlbXBsYXRlc1snbWV0aG9kZGVmX2RlZmluZSddIGFuZAotICAgICAgICAgICAgbm90IGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgICAgICAgICAne2ltcGxfcGFyYW1ldGVyc30nIGluIHRlbXBsYXRlc1sncGFyc2VyX3Byb3RvdHlwZSddKToKICAgICAgICAgICAgIGRhdGEuZGVjbGFyYXRpb25zLnBvcCgwKQogCiAgICAgICAgIHRlbXBsYXRlX2RpY3QgPSB7fQpAQCAtMTA1Niw3ICsxMTQxLDcgQEAKICAgICAgICAgZi5yZXR1cm5fY29udmVydGVyLnJlbmRlcihmLCBkYXRhKQogICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX3JldHVybl90eXBlJ10gPSBmLnJldHVybl9jb252ZXJ0ZXIudHlwZQogCi0gICAgICAgIHRlbXBsYXRlX2RpY3RbJ2RlY2xhcmF0aW9ucyddID0gIlxuIi5qb2luKGRhdGEuZGVjbGFyYXRpb25zKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydkZWNsYXJhdGlvbnMnXSA9IGZvcm1hdF9lc2NhcGUoIlxuIi5qb2luKGRhdGEuZGVjbGFyYXRpb25zKSkKICAgICAgICAgdGVtcGxhdGVfZGljdFsnaW5pdGlhbGl6ZXJzJ10gPSAiXG5cbiIuam9pbihkYXRhLmluaXRpYWxpemVycykKICAgICAgICAgdGVtcGxhdGVfZGljdFsnbW9kaWZpY2F0aW9ucyddID0gJ1xuXG4nLmpvaW4oZGF0YS5tb2RpZmljYXRpb25zKQogICAgICAgICB0ZW1wbGF0ZV9kaWN0WydrZXl3b3JkcyddID0gJyInICsgJyIsICInLmpvaW4oZGF0YS5rZXl3b3JkcykgKyAnIicKQEAgLTEwNjQsOCArMTE0OSw4IEBACiAgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3BhcnNlX2FyZ3VtZW50cyddID0gJywgJy5qb2luKGRhdGEucGFyc2VfYXJndW1lbnRzKQogICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX3BhcmFtZXRlcnMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfcGFyYW1ldGVycykKICAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9hcmd1bWVudHMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfYXJndW1lbnRzKQotICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddID0gIiIuam9pbihkYXRhLnJldHVybl9jb252ZXJzaW9uKS5yc3RyaXAoKQotICAgICAgICB0ZW1wbGF0ZV9kaWN0WydjbGVhbnVwJ10gPSAiIi5qb2luKGRhdGEuY2xlYW51cCkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncmV0dXJuX2NvbnZlcnNpb24nXSA9IGZvcm1hdF9lc2NhcGUoIiIuam9pbihkYXRhLnJldHVybl9jb252ZXJzaW9uKS5yc3RyaXAoKSkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnY2xlYW51cCddID0gZm9ybWF0X2VzY2FwZSgiIi5qb2luKGRhdGEuY2xlYW51cCkpCiAgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3JldHVybl92YWx1ZSddID0gZGF0YS5yZXR1cm5fdmFsdWUKIAogICAgICAgICAjIHVzZWQgYnkgdW5wYWNrIHR1cGxlIGNvZGUgZ2VuZXJhdG9yCkBAIC0xMDc4LDcgKzExNjMsOCBAQAogICAgICAgICBpZiBoYXNfb3B0aW9uX2dyb3VwczoKICAgICAgICAgICAgIHNlbGYucmVuZGVyX29wdGlvbl9ncm91cF9wYXJzaW5nKGYsIHRlbXBsYXRlX2RpY3QpCiAKLSAgICAgICAgZm9yIG5hbWUsIGRlc3RpbmF0aW9uIGluIGNsaW5pYy5maWVsZF9kZXN0aW5hdGlvbnMuaXRlbXMoKToKKyAgICAgICAgIyBidWZmZXJzLCBub3QgZGVzdGluYXRpb24KKyAgICAgICAgZm9yIG5hbWUsIGRlc3RpbmF0aW9uIGluIGNsaW5pYy5kZXN0aW5hdGlvbl9idWZmZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlc1tuYW1lXQogICAgICAgICAgICAgaWYgaGFzX29wdGlvbl9ncm91cHM6CiAgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBsaW5lYXJfZm9ybWF0KHRlbXBsYXRlLApAQCAtMTEwMCw2ICsxMTg2LDExIEBACiAKICAgICAgICAgICAgIHMgPSB0ZW1wbGF0ZS5mb3JtYXRfbWFwKHRlbXBsYXRlX2RpY3QpCiAKKyAgICAgICAgICAgICMgbWlsZCBoYWNrOgorICAgICAgICAgICAgIyByZWZsb3cgbG9uZyBpbXBsIGRlY2xhcmF0aW9ucworICAgICAgICAgICAgaWYgbmFtZSBpbiB7ImltcGxfcHJvdG90eXBlIiwgImltcGxfZGVmaW5pdGlvbiJ9OgorICAgICAgICAgICAgICAgIHMgPSB3cmFwX2RlY2xhcmF0aW9ucyhzKQorCiAgICAgICAgICAgICBpZiBjbGluaWMubGluZV9wcmVmaXg6CiAgICAgICAgICAgICAgICAgcyA9IGluZGVudF9hbGxfbGluZXMocywgY2xpbmljLmxpbmVfcHJlZml4KQogICAgICAgICAgICAgaWYgY2xpbmljLmxpbmVfc3VmZml4OgpAQCAtMTI1MiwxMCArMTM0MywxMSBAQAogICAgICAgICBtYXRjaCA9IHNlbGYuc3RhcnRfcmUubWF0Y2gobGluZS5sc3RyaXAoKSkKICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQogCi0gICAgZGVmIF9saW5lKHNlbGYpOgorICAgIGRlZiBfbGluZShzZWxmLCBsb29rYWhlYWQ9RmFsc2UpOgogICAgICAgICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKICAgICAgICAgbGluZSA9IHNlbGYuaW5wdXQucG9wKCkKLSAgICAgICAgc2VsZi5sYW5ndWFnZS5wYXJzZV9saW5lKGxpbmUpCisgICAgICAgIGlmIG5vdCBsb29rYWhlYWQ6CisgICAgICAgICAgICBzZWxmLmxhbmd1YWdlLnBhcnNlX2xpbmUobGluZSkKICAgICAgICAgcmV0dXJuIGxpbmUKIAogICAgIGRlZiBwYXJzZV92ZXJiYXRpbV9ibG9jayhzZWxmKToKQEAgLTEzMTEsNyArMTQwMyw3IEBACiAgICAgICAgIG91dHB1dF9hZGQsIG91dHB1dF9vdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKICAgICAgICAgYXJndW1lbnRzID0gTm9uZQogICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgotICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUobG9va2FoZWFkPVRydWUpCiAgICAgICAgICAgICBtYXRjaCA9IGNoZWNrc3VtX3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCiAgICAgICAgICAgICBhcmd1bWVudHMgPSBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKICAgICAgICAgICAgIGlmIGFyZ3VtZW50czoKQEAgLTE0MDIsMTIgKzE0OTQsNDggQEAKICAgICAgICAgc2VsZi5mLndyaXRlKHRleHQpCiAKIAorY2xhc3MgQnVmZmVyU2VyaWVzOgorICAgICIiIgorICAgIEJlaGF2ZXMgbGlrZSBhICJkZWZhdWx0bGlzdCIuCisgICAgV2hlbiB5b3UgYXNrIGZvciBhbiBpbmRleCB0aGF0IGRvZXNuJ3QgZXhpc3QgeWV0LAorICAgIHRoZSBvYmplY3QgZ3Jvd3MgdGhlIGxpc3QgdW50aWwgdGhhdCBpdGVtIGV4aXN0cy4KKyAgICBTbyBvW25dIHdpbGwgYWx3YXlzIHdvcmsuCisKKyAgICBTdXBwb3J0cyBuZWdhdGl2ZSBpbmRpY2VzIGZvciBhY3R1YWwgaXRlbXMuCisgICAgZS5nLiBvWy0xXSBpcyBhbiBlbGVtZW50IGltbWVkaWF0ZWx5IHByZWNlZGluZyBvWzBdLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zdGFydCA9IDAKKyAgICAgICAgc2VsZi5fYXJyYXkgPSBbXQorICAgICAgICBzZWxmLl9jb25zdHJ1Y3RvciA9IF90ZXh0X2FjY3VtdWxhdG9yCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIGkgLT0gc2VsZi5fc3RhcnQKKyAgICAgICAgaWYgaSA8IDA6CisgICAgICAgICAgICBzZWxmLl9zdGFydCArPSBpCisgICAgICAgICAgICBwcmVmaXggPSBbc2VsZi5fY29uc3RydWN0b3IoKSBmb3IgeCBpbiByYW5nZSgtaSldCisgICAgICAgICAgICBzZWxmLl9hcnJheSA9IHByZWZpeCArIHNlbGYuX2FycmF5CisgICAgICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSBpID49IGxlbihzZWxmLl9hcnJheSk6CisgICAgICAgICAgICBzZWxmLl9hcnJheS5hcHBlbmQoc2VsZi5fY29uc3RydWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FycmF5W2ldCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIGZvciB0YSBpbiBzZWxmLl9hcnJheToKKyAgICAgICAgICAgIHRhLl90ZXh0LmNsZWFyKCkKKworICAgIGRlZiBkdW1wKHNlbGYpOgorICAgICAgICB0ZXh0cyA9IFt0YS5vdXRwdXQoKSBmb3IgdGEgaW4gc2VsZi5fYXJyYXldCisgICAgICAgIHJldHVybiAiIi5qb2luKHRleHRzKQorCisKIGNsYXNzIERlc3RpbmF0aW9uOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0eXBlLCBjbGluaWMsICphcmdzKToKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCiAgICAgICAgIHNlbGYuY2xpbmljID0gY2xpbmljCi0gICAgICAgIHZhbGlkX3R5cGVzID0gKCdidWZmZXInLCAnZmlsZScsICdzdXBwcmVzcycsICd0d28tcGFzcycpCisgICAgICAgIHZhbGlkX3R5cGVzID0gKCdidWZmZXInLCAnZmlsZScsICdzdXBwcmVzcycpCiAgICAgICAgIGlmIHR5cGUgbm90IGluIHZhbGlkX3R5cGVzOgogICAgICAgICAgICAgZmFpbCgiSW52YWxpZCBkZXN0aW5hdGlvbiB0eXBlICIgKyByZXByKHR5cGUpICsgIiBmb3IgIiArIG5hbWUgKyAiICwgbXVzdCBiZSAiICsgJywgJy5qb2luKHZhbGlkX3R5cGVzKSkKICAgICAgICAgZXh0cmFfYXJndW1lbnRzID0gMSBpZiB0eXBlID09ICJmaWxlIiBlbHNlIDAKQEAgLTE0MjYsMTAgKzE1NTQsOCBAQAogICAgICAgICAgICAgZFsnYmFzZW5hbWUnXSA9IGJhc2VuYW1lCiAgICAgICAgICAgICBkWydiYXNlbmFtZV9yb290J10sIGRbJ2Jhc2VuYW1lX2V4dGVuc2lvbiddID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBhcmdzWzBdLmZvcm1hdF9tYXAoZCkKLSAgICAgICAgaWYgdHlwZSA9PSAndHdvLXBhc3MnOgotICAgICAgICAgICAgc2VsZi5pZCA9IE5vbmUKIAotICAgICAgICBzZWxmLnRleHQsIHNlbGYuYXBwZW5kLCBzZWxmLl9kdW1wID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBzZWxmLmJ1ZmZlcnMgPSBCdWZmZXJTZXJpZXMoKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ2ZpbGUnOgpAQCAtMTQ0MSwxNSArMTU2NywxMCBAQAogICAgIGRlZiBjbGVhcihzZWxmKToKICAgICAgICAgaWYgc2VsZi50eXBlICE9ICdidWZmZXInOgogICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgY2xlYXIgZGVzdGluYXRpb24iICsgc2VsZi5uYW1lICsgIiAsIGl0J3Mgbm90IG9mIHR5cGUgYnVmZmVyIikKLSAgICAgICAgc2VsZi50ZXh0LmNsZWFyKCkKKyAgICAgICAgc2VsZi5idWZmZXJzLmNsZWFyKCkKIAogICAgIGRlZiBkdW1wKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ3R3by1wYXNzJzoKLSAgICAgICAgICAgIGlmIHNlbGYuaWQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLmlkID0gc3RyKHV1aWQudXVpZDQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pZAotICAgICAgICAgICAgZmFpbCgiWW91IGNhbiBvbmx5IGR1bXAgYSB0d28tcGFzcyBidWZmZXIgZXhhY3RseSBvbmNlISIpCi0gICAgICAgIHJldHVybiBzZWxmLl9kdW1wKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVycy5kdW1wKCkKIAogCiAjIG1hcHMgc3RyaW5ncyB0byBMYW5ndWFnZSBvYmplY3RzLgpAQCAtMTQ4OCw0OSArMTYwOSw0NCBAQAogICAgIHByZXNldHNfdGV4dCA9ICIiIgogcHJlc2V0IGJsb2NrCiBldmVyeXRoaW5nIGJsb2NrCittZXRob2RkZWZfaWZuZGVmIGJ1ZmZlciAxCiBkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCiBwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCiBjcHBfaWYgc3VwcHJlc3MKIGNwcF9lbmRpZiBzdXBwcmVzcwotbWV0aG9kZGVmX2lmbmRlZiBidWZmZXIKIAogcHJlc2V0IG9yaWdpbmFsCiBldmVyeXRoaW5nIGJsb2NrCittZXRob2RkZWZfaWZuZGVmIGJ1ZmZlciAxCiBkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCiBwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCiBjcHBfaWYgc3VwcHJlc3MKIGNwcF9lbmRpZiBzdXBwcmVzcwotbWV0aG9kZGVmX2lmbmRlZiBidWZmZXIKIAogcHJlc2V0IGZpbGUKIGV2ZXJ5dGhpbmcgZmlsZQorbWV0aG9kZGVmX2lmbmRlZiBmaWxlIDEKIGRvY3N0cmluZ19wcm90b3R5cGUgc3VwcHJlc3MKIHBhcnNlcl9wcm90b3R5cGUgc3VwcHJlc3MKIGltcGxfZGVmaW5pdGlvbiBibG9jawogCiBwcmVzZXQgYnVmZmVyCiBldmVyeXRoaW5nIGJ1ZmZlcgorbWV0aG9kZGVmX2lmbmRlZiBidWZmZXIgMQoraW1wbF9kZWZpbml0aW9uIGJsb2NrCiBkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCiBpbXBsX3Byb3RvdHlwZSBzdXBwcmVzcwogcGFyc2VyX3Byb3RvdHlwZSBzdXBwcmVzcwotaW1wbF9kZWZpbml0aW9uIGJsb2NrCiAKIHByZXNldCBwYXJ0aWFsLWJ1ZmZlcgogZXZlcnl0aGluZyBidWZmZXIKK21ldGhvZGRlZl9pZm5kZWYgYnVmZmVyIDEKIGRvY3N0cmluZ19wcm90b3R5cGUgYmxvY2sKIGltcGxfcHJvdG90eXBlIHN1cHByZXNzCiBtZXRob2RkZWZfZGVmaW5lIGJsb2NrCiBwYXJzZXJfcHJvdG90eXBlIGJsb2NrCiBpbXBsX2RlZmluaXRpb24gYmxvY2sKIAotcHJlc2V0IHR3by1wYXNzCi1ldmVyeXRoaW5nIGJ1ZmZlcgotZG9jc3RyaW5nX3Byb3RvdHlwZSB0d28tcGFzcwotaW1wbF9wcm90b3R5cGUgc3VwcHJlc3MKLW1ldGhvZGRlZl9kZWZpbmUgdHdvLXBhc3MKLXBhcnNlcl9wcm90b3R5cGUgdHdvLXBhc3MKLWltcGxfZGVmaW5pdGlvbiBibG9jawotCiAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsYW5ndWFnZSwgcHJpbnRlcj1Ob25lLCAqLCBmb3JjZT1GYWxzZSwgdmVyaWZ5PVRydWUsIGZpbGVuYW1lPU5vbmUpOgpAQCAtMTU1NCwyNSArMTY3MCwyNSBAQAogICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigiYmxvY2siLCAiYnVmZmVyIikKICAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oInN1cHByZXNzIiwgInN1cHByZXNzIikKICAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oImJ1ZmZlciIsICJidWZmZXIiKQotICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigidHdvLXBhc3MiLCAidHdvLXBhc3MiKQogICAgICAgICBpZiBmaWxlbmFtZToKICAgICAgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJmaWxlIiwgImZpbGUiLCAie2Rpcm5hbWV9L2NsaW5pYy97YmFzZW5hbWV9LmgiKQogCi0gICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQKLSAgICAgICAgc2VsZi5maWVsZF9kZXN0aW5hdGlvbnMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgoCi0gICAgICAgICAgICAoJ2NwcF9pZicsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICBkID0gc2VsZi5nZXRfZGVzdGluYXRpb25fYnVmZmVyCisgICAgICAgIHNlbGYuZGVzdGluYXRpb25fYnVmZmVycyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCgKKyAgICAgICAgICAgICgnY3BwX2lmJywgZCgnZmlsZScpKSwKICAgICAgICAgICAgICgnZG9jc3RyaW5nX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAotICAgICAgICAgICAgKCdkb2NzdHJpbmdfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAotICAgICAgICAgICAgKCdtZXRob2RkZWZfZGVmaW5lJywgZCgnYmxvY2snKSksCi0gICAgICAgICAgICAoJ2ltcGxfcHJvdG90eXBlJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ2RvY3N0cmluZ19kZWZpbml0aW9uJywgZCgnZmlsZScpKSwKKyAgICAgICAgICAgICgnbWV0aG9kZGVmX2RlZmluZScsIGQoJ2ZpbGUnKSksCisgICAgICAgICAgICAoJ2ltcGxfcHJvdG90eXBlJywgZCgnZmlsZScpKSwKICAgICAgICAgICAgICgncGFyc2VyX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAotICAgICAgICAgICAgKCdwYXJzZXJfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAotICAgICAgICAgICAgKCdjcHBfZW5kaWYnLCBkKCdzdXBwcmVzcycpKSwKLSAgICAgICAgICAgICgnbWV0aG9kZGVmX2lmbmRlZicsIGQoJ2J1ZmZlcicpKSwKKyAgICAgICAgICAgICgncGFyc2VyX2RlZmluaXRpb24nLCBkKCdmaWxlJykpLAorICAgICAgICAgICAgKCdjcHBfZW5kaWYnLCBkKCdmaWxlJykpLAorICAgICAgICAgICAgKCdtZXRob2RkZWZfaWZuZGVmJywgZCgnZmlsZScsIDEpKSwKICAgICAgICAgICAgICgnaW1wbF9kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCiAgICAgICAgICkpCiAKLSAgICAgICAgc2VsZi5maWVsZF9kZXN0aW5hdGlvbnNfc3RhY2sgPSBbXQorICAgICAgICBzZWxmLmRlc3RpbmF0aW9uX2J1ZmZlcnNfc3RhY2sgPSBbXQorICAgICAgICBzZWxmLmlmbmRlZl9zeW1ib2xzID0gc2V0KCkKIAogICAgICAgICBzZWxmLnByZXNldHMgPSB7fQogICAgICAgICBwcmVzZXQgPSBOb25lCkBAIC0xNTgwLDM3ICsxNjk2LDQzIEBACiAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlLCAqb3B0aW9ucyA9IGxpbmUuc3BsaXQoKQogICAgICAgICAgICAgaWYgbmFtZSA9PSAncHJlc2V0JzoKICAgICAgICAgICAgICAgICBzZWxmLnByZXNldHNbdmFsdWVdID0gcHJlc2V0ID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc2VsZi5nZXRfZGVzdGluYXRpb24odmFsdWUpCisgICAgICAgICAgICBpZiBsZW4ob3B0aW9ucyk6CisgICAgICAgICAgICAgICAgaW5kZXggPSBpbnQob3B0aW9uc1swXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5kZXggPSAwCisgICAgICAgICAgICBidWZmZXIgPSBzZWxmLmdldF9kZXN0aW5hdGlvbl9idWZmZXIodmFsdWUsIGluZGV4KQogCiAgICAgICAgICAgICBpZiBuYW1lID09ICdldmVyeXRoaW5nJzoKLSAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmZpZWxkX2Rlc3RpbmF0aW9uczoKLSAgICAgICAgICAgICAgICAgICAgcHJlc2V0W25hbWVdID0gZGVzdGluYXRpb24KKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmRlc3RpbmF0aW9uX2J1ZmZlcnM6CisgICAgICAgICAgICAgICAgICAgIHByZXNldFtuYW1lXSA9IGJ1ZmZlcgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGFzc2VydCBuYW1lIGluIHNlbGYuZmllbGRfZGVzdGluYXRpb25zCi0gICAgICAgICAgICBwcmVzZXRbbmFtZV0gPSBkZXN0aW5hdGlvbgorICAgICAgICAgICAgYXNzZXJ0IG5hbWUgaW4gc2VsZi5kZXN0aW5hdGlvbl9idWZmZXJzCisgICAgICAgICAgICBwcmVzZXRbbmFtZV0gPSBidWZmZXIKIAogICAgICAgICBnbG9iYWwgY2xpbmljCiAgICAgICAgIGNsaW5pYyA9IHNlbGYKIAotICAgIGRlZiBnZXRfZGVzdGluYXRpb24oc2VsZiwgbmFtZSwgZGVmYXVsdD11bnNwZWNpZmllZCk6Ci0gICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQobmFtZSkKLSAgICAgICAgaWYgbm90IGQ6Ci0gICAgICAgICAgICBpZiBkZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICAgICAgZmFpbCgiRGVzdGluYXRpb24gZG9lcyBub3QgZXhpc3Q6ICIgKyByZXByKG5hbWUpKQotICAgICAgICByZXR1cm4gZAotCiAgICAgZGVmIGFkZF9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCB0eXBlLCAqYXJncyk6CiAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5kZXN0aW5hdGlvbnM6CiAgICAgICAgICAgICBmYWlsKCJEZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0czogIiArIHJlcHIobmFtZSkpCiAgICAgICAgIHNlbGYuZGVzdGluYXRpb25zW25hbWVdID0gRGVzdGluYXRpb24obmFtZSwgdHlwZSwgc2VsZiwgKmFyZ3MpCiAKKyAgICBkZWYgZ2V0X2Rlc3RpbmF0aW9uKHNlbGYsIG5hbWUpOgorICAgICAgICBkID0gc2VsZi5kZXN0aW5hdGlvbnMuZ2V0KG5hbWUpCisgICAgICAgIGlmIG5vdCBkOgorICAgICAgICAgICAgZmFpbCgiRGVzdGluYXRpb24gZG9lcyBub3QgZXhpc3Q6ICIgKyByZXByKG5hbWUpKQorICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIGdldF9kZXN0aW5hdGlvbl9idWZmZXIoc2VsZiwgbmFtZSwgaXRlbT0wKToKKyAgICAgICAgZCA9IHNlbGYuZ2V0X2Rlc3RpbmF0aW9uKG5hbWUpCisgICAgICAgIHJldHVybiBkLmJ1ZmZlcnNbaXRlbV0KKwogICAgIGRlZiBwYXJzZShzZWxmLCBpbnB1dCk6CiAgICAgICAgIHByaW50ZXIgPSBzZWxmLnByaW50ZXIKICAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBCbG9ja1BhcnNlcihpbnB1dCwgc2VsZi5sYW5ndWFnZSwgdmVyaWZ5PXNlbGYudmVyaWZ5KQpAQCAtMTYzMCwxNyArMTc1MiwxMSBAQAogCiAgICAgICAgIHNlY29uZF9wYXNzX3JlcGxhY2VtZW50cyA9IHt9CiAKKyAgICAgICAgIyB0aGVzZSBhcmUgZGVzdGluYXRpb25zIG5vdCBidWZmZXJzCiAgICAgICAgIGZvciBuYW1lLCBkZXN0aW5hdGlvbiBpbiBzZWxmLmRlc3RpbmF0aW9ucy5pdGVtcygpOgogICAgICAgICAgICAgaWYgZGVzdGluYXRpb24udHlwZSA9PSAnc3VwcHJlc3MnOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBvdXRwdXQgPSBkZXN0aW5hdGlvbi5fZHVtcCgpCi0KLSAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ3R3by1wYXNzJzoKLSAgICAgICAgICAgICAgICBpZiBkZXN0aW5hdGlvbi5pZDoKLSAgICAgICAgICAgICAgICAgICAgc2Vjb25kX3Bhc3NfcmVwbGFjZW1lbnRzW2Rlc3RpbmF0aW9uLmlkXSA9IG91dHB1dAotICAgICAgICAgICAgICAgIGVsaWYgb3V0cHV0OgotICAgICAgICAgICAgICAgICAgICBmYWlsKCJUd28tcGFzcyBidWZmZXIgIiArIHJlcHIobmFtZSkgKyAiIG5vdCBlbXB0eSBhdCBlbmQgb2YgZmlsZSEiKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvdXRwdXQgPSBkZXN0aW5hdGlvbi5kdW1wKCkKIAogICAgICAgICAgICAgaWYgb3V0cHV0OgogCkBAIC0xODMyLDYgKzE5NDgsNyBAQAogX19pYW5kX18KIF9faWZsb29yZGl2X18KIF9faWxzaGlmdF9fCitfX2ltYXRtdWxfXwogX19pbW9kX18KIF9faW11bF9fCiBfX2luZGV4X18KQEAgLTE4NDgsNiArMTk2NSw3IEBACiBfX2xlbl9fCiBfX2xzaGlmdF9fCiBfX2x0X18KK19fbWF0bXVsX18KIF9fbW9kX18KIF9fbXVsX18KIF9fbmVnX18KQEAgLTE4NjIsNiArMTk4MCw3IEBACiBfX3JlcHJfXwogX19yZmxvb3JkaXZfXwogX19ybHNoaWZ0X18KK19fcm1hdG11bF9fCiBfX3Jtb2RfXwogX19ybXVsX18KIF9fcm9yX18KQEAgLTIzMjYsMTIgKzI0NDUsNyBAQAogICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCdcblB5X3NzaXplX2NsZWFuX3QgJykKICAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZChzZWxmLmxlbmd0aF9uYW1lKCkpCiAgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoJzsnKQotICAgICAgICBzID0gIiIuam9pbihkZWNsYXJhdGlvbikKLSAgICAgICAgIyBkb3VibGUgdXAgY3VybHktYnJhY2VzLCB0aGlzIHN0cmluZyB3aWxsIGJlIHVzZWQKLSAgICAgICAgIyBhcyBwYXJ0IG9mIGEgZm9ybWF0X21hcCgpIHRlbXBsYXRlIGxhdGVyCi0gICAgICAgIHMgPSBzLnJlcGxhY2UoInsiLCAie3siKQotICAgICAgICBzID0gcy5yZXBsYWNlKCJ9IiwgIn19IikKLSAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oZGVjbGFyYXRpb24pCiAKICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKICAgICAgICAgIiIiCkBAIC0yMzc5LDEyICsyNDkzLDEyIEBACiAKIGNsYXNzIGNoYXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgogICAgIHR5cGUgPSAnY2hhcicKLSAgICBkZWZhdWx0X3R5cGUgPSBzdHIKKyAgICBkZWZhdWx0X3R5cGUgPSAoYnl0ZXMsIGJ5dGVhcnJheSkKICAgICBmb3JtYXRfdW5pdCA9ICdjJwogICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIidcMCciCiAKICAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0LCBzdHIpIGFuZCAobGVuKHNlbGYuZGVmYXVsdCkgIT0gMSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0LCBzZWxmLmRlZmF1bHRfdHlwZSkgYW5kIChsZW4oc2VsZi5kZWZhdWx0KSAhPSAxKToKICAgICAgICAgICAgIGZhaWwoImNoYXJfY29udmVydGVyOiBpbGxlZ2FsIGRlZmF1bHQgdmFsdWUgIiArIHJlcHIoc2VsZi5kZWZhdWx0KSkKIAogCkBAIC0yNDE3LDE4ICsyNTMxLDIwIEBACiAgICAgICAgIGlmIG5vdCBiaXR3aXNlOgogICAgICAgICAgICAgZmFpbCgiVW5zaWduZWQgc2hvcnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKIAotQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0MnLCB0eXBlcz0nc3RyJykKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCdDJywgYWNjZXB0PXtzdHJ9KQogY2xhc3MgaW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKICAgICB0eXBlID0gJ2ludCcKICAgICBkZWZhdWx0X3R5cGUgPSBpbnQKICAgICBmb3JtYXRfdW5pdCA9ICdpJwogICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCiAKLSAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZXM9J2ludCcpOgotICAgICAgICBpZiB0eXBlcyA9PSAnc3RyJzoKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYWNjZXB0PXtpbnR9LCB0eXBlPU5vbmUpOgorICAgICAgICBpZiBhY2NlcHQgPT0ge3N0cn06CiAgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ0MnCi0gICAgICAgIGVsaWYgdHlwZXMgIT0gJ2ludCc6Ci0gICAgICAgICAgICBmYWlsKCJpbnRfY29udmVydGVyOiBpbGxlZ2FsICd0eXBlcycgYXJndW1lbnQiKQorICAgICAgICBlbGlmIGFjY2VwdCAhPSB7aW50fToKKyAgICAgICAgICAgIGZhaWwoImludF9jb252ZXJ0ZXI6IGlsbGVnYWwgJ2FjY2VwdCcgYXJndW1lbnQgIiArIHJlcHIoYWNjZXB0KSkKKyAgICAgICAgaWYgdHlwZSAhPSBOb25lOgorICAgICAgICAgICAgc2VsZi50eXBlID0gdHlwZQogCiBjbGFzcyB1bnNpZ25lZF9pbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgogICAgIHR5cGUgPSAndW5zaWduZWQgaW50JwpAQCAtMjUxNywxMzcgKzI2MzMsMTUzIEBACiAgICAgICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCiAKIAotQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MjJywgbGVuZ3RoPVRydWUpCi1AYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneScsIHR5cGVzPSJieXRlcyIpCi1AYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneSMnLCB0eXBlcz0iYnl0ZXMiLCBsZW5ndGg9VHJ1ZSkKLUBhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6JywgbnVsbGFibGU9VHJ1ZSkKLUBhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6IycsIG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKQorIworIyBXZSBkZWZpbmUgdGhyZWUgY29udmVudGlvbnMgZm9yIGJ1ZmZlciB0eXBlcyBpbiB0aGUgJ2FjY2VwdCcgYXJndW1lbnQ6CisjCisjICBidWZmZXIgIDogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlCisjICByd2J1ZmZlcjogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBiZSB3cml0ZWFibGUKKyMgIHJvYnVmZmVyOiBhbnkgb2JqZWN0IHN1cHBvcnRpbmcgdGhlIGJ1ZmZlciBpbnRlcmZhY2UsIGJ1dCBtdXN0IG5vdCBiZSB3cml0ZWFibGUKKyMKKworY2xhc3MgYnVmZmVyOiBwYXNzCitjbGFzcyByd2J1ZmZlcjogcGFzcworY2xhc3Mgcm9idWZmZXI6IHBhc3MKKworZGVmIHN0cl9jb252ZXJ0ZXJfa2V5KHR5cGVzLCBlbmNvZGluZywgemVyb2VzKToKKyAgICByZXR1cm4gKGZyb3plbnNldCh0eXBlcyksIGJvb2woZW5jb2RpbmcpLCBib29sKHplcm9lcykpCisKK3N0cl9jb252ZXJ0ZXJfYXJndW1lbnRfbWFwID0ge30KKwogY2xhc3Mgc3RyX2NvbnZlcnRlcihDQ29udmVydGVyKToKICAgICB0eXBlID0gJ2NvbnN0IGNoYXIgKicKICAgICBkZWZhdWx0X3R5cGUgPSAoc3RyLCBOdWxsLCBOb25lVHlwZSkKICAgICBmb3JtYXRfdW5pdCA9ICdzJwogCi0gICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGVuY29kaW5nPU5vbmUsIHR5cGVzPSJzdHIiLAotICAgICAgICBsZW5ndGg9RmFsc2UsIG51bGxhYmxlPUZhbHNlLCB6ZXJvZXM9RmFsc2UpOgorICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBhY2NlcHQ9e3N0cn0sIGVuY29kaW5nPU5vbmUsIHplcm9lcz1GYWxzZSk6CiAKLSAgICAgICAgdHlwZXMgPSBzZXQodHlwZXMuc3RyaXAoKS5zcGxpdCgpKQotICAgICAgICBieXRlc190eXBlID0gc2V0KCgiYnl0ZXMiLCkpCi0gICAgICAgIHN0cl90eXBlID0gc2V0KCgic3RyIiwpKQotICAgICAgICBhbGxfM190eXBlID0gc2V0KCgiYnl0ZWFycmF5IiwpKSB8IGJ5dGVzX3R5cGUgfCBzdHJfdHlwZQotICAgICAgICBpc19ieXRlcyA9IHR5cGVzID09IGJ5dGVzX3R5cGUKLSAgICAgICAgaXNfc3RyID0gdHlwZXMgPT0gc3RyX3R5cGUKLSAgICAgICAgaXNfYWxsXzMgPSB0eXBlcyA9PSBhbGxfM190eXBlCi0KLSAgICAgICAgc2VsZi5sZW5ndGggPSBib29sKGxlbmd0aCkKLSAgICAgICAgZm9ybWF0X3VuaXQgPSBOb25lCi0KLSAgICAgICAgaWYgZW5jb2Rpbmc6Ci0gICAgICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKLQotICAgICAgICAgICAgaWYgaXNfc3RyIGFuZCBub3QgKGxlbmd0aCBvciB6ZXJvZXMgb3IgbnVsbGFibGUpOgotICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2VzJwotICAgICAgICAgICAgZWxpZiBpc19hbGxfMyBhbmQgbm90IChsZW5ndGggb3IgemVyb2VzIG9yIG51bGxhYmxlKToKLSAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdldCcKLSAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBsZW5ndGggYW5kIHplcm9lcyBhbmQgbm90IG51bGxhYmxlOgotICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2VzIycKLSAgICAgICAgICAgIGVsaWYgaXNfYWxsXzMgYW5kIGxlbmd0aCBhbmQgbm90IChudWxsYWJsZSBvciB6ZXJvZXMpOgotICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ2V0IycKLQotICAgICAgICAgICAgaWYgZm9ybWF0X3VuaXQuZW5kc3dpdGgoJyMnKToKLSAgICAgICAgICAgICAgICBmYWlsKCJTb3JyeTogY29kZSB1c2luZyBmb3JtYXQgdW5pdCAiLCByZXByKGZvcm1hdF91bml0KSwgInByb2JhYmx5IGRvZXNuJ3Qgd29yayBwcm9wZXJseSB5ZXQuXG5HaXZlIExhcnJ5IHlvdXIgdGVzdCBjYXNlIGFuZCBoZSdsbCBpdC4iKQotICAgICAgICAgICAgICAgICMgVE9ETyBzZXQgcG9pbnRlciB0byBOVUxMCi0gICAgICAgICAgICAgICAgIyBUT0RPIGFkZCBjbGVhbnVwIGZvciBidWZmZXIKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHplcm9lczoKLSAgICAgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyAoemVyb2VzIGlzIG9ubHkgbGVnYWwgd2l0aCBhbiBlbmNvZGluZykiKQotCi0gICAgICAgICAgICBpZiBpc19ieXRlcyBhbmQgbm90IChudWxsYWJsZSBvciBsZW5ndGgpOgotICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3knCi0gICAgICAgICAgICBlbGlmIGlzX2J5dGVzIGFuZCBsZW5ndGggYW5kIG5vdCBudWxsYWJsZToKLSAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5IycKLSAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBub3QgKG51bGxhYmxlIG9yIGxlbmd0aCk6Ci0gICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncycKLSAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBsZW5ndGggYW5kIG5vdCBudWxsYWJsZToKLSAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdzIycKLSAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBudWxsYWJsZSAgYW5kIG5vdCBsZW5ndGg6Ci0gICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneicKLSAgICAgICAgICAgIGVsaWYgaXNfc3RyIGFuZCBudWxsYWJsZSBhbmQgbGVuZ3RoOgotICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3ojJwotCisgICAgICAgIGtleSA9IHN0cl9jb252ZXJ0ZXJfa2V5KGFjY2VwdCwgZW5jb2RpbmcsIHplcm9lcykKKyAgICAgICAgZm9ybWF0X3VuaXQgPSBzdHJfY29udmVydGVyX2FyZ3VtZW50X21hcC5nZXQoa2V5KQogICAgICAgICBpZiBub3QgZm9ybWF0X3VuaXQ6Ci0gICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyIpCisgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyIsIGtleSkKKwogICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKKyAgICAgICAgc2VsZi5sZW5ndGggPSBib29sKHplcm9lcykKKyAgICAgICAgaWYgZW5jb2Rpbmc6CisgICAgICAgICAgICBpZiBzZWxmLmRlZmF1bHQgbm90IGluIChOdWxsLCBOb25lLCB1bnNwZWNpZmllZCk6CisgICAgICAgICAgICAgICAgZmFpbCgic3RyX2NvbnZlcnRlcjogQXJndW1lbnQgQ2xpbmljIGRvZXNuJ3Qgc3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBmb3IgZW5jb2RlZCBzdHJpbmdzIikKKyAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICAgICAgc2VsZi50eXBlID0gJ2NoYXIgKicKKyAgICAgICAgICAgICMgc29ycnksIGNsaW5pYyBjYW4ndCBzdXBwb3J0IHByZWFsbG9jYXRlZCBidWZmZXJzCisgICAgICAgICAgICAjIGZvciBlcyMgYW5kIGV0IworICAgICAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSAiTlVMTCIKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmVuY29kaW5nOgorICAgICAgICAgICAgbmFtZSA9IGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKQorICAgICAgICAgICAgcmV0dXJuICIiLmpvaW4oWyJpZiAoIiwgbmFtZSwgIilcbiAgIFB5TWVtX0ZSRUUoIiwgbmFtZSwgIik7XG4iXSkKKworIworIyBUaGlzIGlzIHRoZSBmb3VydGggb3IgZmlmdGggcmV3cml0ZSBvZiByZWdpc3RlcmluZyBhbGwgdGhlCisjIGNyYXp5IHN0cmluZyBjb252ZXJ0ZXIgZm9ybWF0IHVuaXRzLiAgUHJldmlvdXMgYXBwcm9hY2hlcyBoaWQKKyMgYnVncy0tZ2VuZXJhbGx5IG1pc21hdGNoZXMgYmV0d2VlbiB0aGUgc2VtYW50aWNzIG9mIHRoZSBmb3JtYXQKKyMgdW5pdCBhbmQgdGhlIGFyZ3VtZW50cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRob3NlIHNlbWFudGljcworIyBwcm9wZXJseS4gIEhvcGVmdWxseSB3aXRoIHRoaXMgYXBwcm9hY2ggd2UnbGwgZ2V0IGl0IDEwMCUgcmlnaHQuCisjCisjIFRoZSByKCkgZnVuY3Rpb24gKHNob3J0IGZvciAicmVnaXN0ZXIiKSBib3RoIHJlZ2lzdGVycyB0aGUKKyMgbWFwcGluZyBmcm9tIGFyZ3VtZW50cyB0byBmb3JtYXQgdW5pdCAqYW5kKiByZWdpc3RlcnMgdGhlCisjIGxlZ2FjeSBDIGNvbnZlcnRlciBmb3IgdGhhdCBmb3JtYXQgdW5pdC4KKyMKK2RlZiByKGZvcm1hdF91bml0LCAqLCBhY2NlcHQsIGVuY29kaW5nPUZhbHNlLCB6ZXJvZXM9RmFsc2UpOgorICAgIGlmIG5vdCBlbmNvZGluZyBhbmQgZm9ybWF0X3VuaXQgIT0gJ3MnOgorICAgICAgICAjIGFkZCB0aGUgbGVnYWN5IGMgY29udmVydGVycyBoZXJlIHRvby4KKyAgICAgICAgIworICAgICAgICAjIG5vdGU6IGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIgY2FuJ3Qgd29yayBmb3IKKyAgICAgICAgIyAgIGVzLCBlcyMsIGV0LCBvciBldCMKKyAgICAgICAgIyAgIGJlY2F1c2Ugb2YgdGhlaXIgZXh0cmEgZW5jb2RpbmcgYXJndW1lbnQKKyAgICAgICAgIworICAgICAgICAjIGFsc28gZG9uJ3QgYWRkIHRoZSBjb252ZXJ0ZXIgZm9yICdzJyBiZWNhdXNlCisgICAgICAgICMgdGhlIG1ldGFjbGFzcyBmb3IgQ0NvbnZlcnRlciBhZGRzIGl0IGZvciB1cy4KKyAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgaWYgYWNjZXB0ICE9IHtzdHJ9OgorICAgICAgICAgICAga3dhcmdzWydhY2NlcHQnXSA9IGFjY2VwdAorICAgICAgICBpZiB6ZXJvZXM6CisgICAgICAgICAgICBrd2FyZ3NbJ3plcm9lcyddID0gVHJ1ZQorICAgICAgICBhZGRlZF9mID0gZnVuY3Rvb2xzLnBhcnRpYWwoc3RyX2NvbnZlcnRlciwgKiprd2FyZ3MpCisgICAgICAgIGxlZ2FjeV9jb252ZXJ0ZXJzW2Zvcm1hdF91bml0XSA9IGFkZGVkX2YKKworICAgIGQgPSBzdHJfY29udmVydGVyX2FyZ3VtZW50X21hcAorICAgIGtleSA9IHN0cl9jb252ZXJ0ZXJfa2V5KGFjY2VwdCwgZW5jb2RpbmcsIHplcm9lcykKKyAgICBpZiBrZXkgaW4gZDoKKyAgICAgICAgc3lzLmV4aXQoIkR1cGxpY2F0ZSBrZXlzIHNwZWNpZmllZCBmb3Igc3RyX2NvbnZlcnRlcl9hcmd1bWVudF9tYXAhIikKKyAgICBkW2tleV0gPSBmb3JtYXRfdW5pdAorCityKCdlcycsICBlbmNvZGluZz1UcnVlLCAgICAgICAgICAgICAgYWNjZXB0PXtzdHJ9KQorcignZXMjJywgZW5jb2Rpbmc9VHJ1ZSwgemVyb2VzPVRydWUsIGFjY2VwdD17c3RyfSkKK3IoJ2V0JywgIGVuY29kaW5nPVRydWUsICAgICAgICAgICAgICBhY2NlcHQ9e2J5dGVzLCBieXRlYXJyYXksIHN0cn0pCityKCdldCMnLCBlbmNvZGluZz1UcnVlLCB6ZXJvZXM9VHJ1ZSwgYWNjZXB0PXtieXRlcywgYnl0ZWFycmF5LCBzdHJ9KQorcigncycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD17c3RyfSkKK3IoJ3MjJywgICAgICAgICAgICAgICAgIHplcm9lcz1UcnVlLCBhY2NlcHQ9e3JvYnVmZmVyLCBzdHJ9KQorcigneScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD17cm9idWZmZXJ9KQorcigneSMnLCAgICAgICAgICAgICAgICAgemVyb2VzPVRydWUsIGFjY2VwdD17cm9idWZmZXJ9KQorcigneicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD17c3RyLCBOb25lVHlwZX0pCityKCd6IycsICAgICAgICAgICAgICAgICB6ZXJvZXM9VHJ1ZSwgYWNjZXB0PXtyb2J1ZmZlciwgc3RyLCBOb25lVHlwZX0pCitkZWwgcgogCiAKIGNsYXNzIFB5Qnl0ZXNPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgogICAgIHR5cGUgPSAnUHlCeXRlc09iamVjdCAqJwogICAgIGZvcm1hdF91bml0ID0gJ1MnCisgICAgIyBhY2NlcHQgPSB7Ynl0ZXN9CiAKIGNsYXNzIFB5Qnl0ZUFycmF5T2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKICAgICB0eXBlID0gJ1B5Qnl0ZUFycmF5T2JqZWN0IConCiAgICAgZm9ybWF0X3VuaXQgPSAnWScKKyAgICAjIGFjY2VwdCA9IHtieXRlYXJyYXl9CiAKIGNsYXNzIHVuaWNvZGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgogICAgIHR5cGUgPSAnUHlPYmplY3QgKicKICAgICBkZWZhdWx0X3R5cGUgPSAoc3RyLCBOdWxsLCBOb25lVHlwZSkKICAgICBmb3JtYXRfdW5pdCA9ICdVJwogCi1AYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigndSMnLCBsZW5ndGg9VHJ1ZSkKLUBhZGRfbGVnYWN5X2NfY29udmVydGVyKCdaJywgbnVsbGFibGU9VHJ1ZSkKLUBhZGRfbGVnYWN5X2NfY29udmVydGVyKCdaIycsIG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3UjJywgemVyb2VzPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignWicsIGFjY2VwdD17c3RyLCBOb25lVHlwZX0pCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcignWiMnLCBhY2NlcHQ9e3N0ciwgTm9uZVR5cGV9LCB6ZXJvZXM9VHJ1ZSkKIGNsYXNzIFB5X1VOSUNPREVfY29udmVydGVyKENDb252ZXJ0ZXIpOgogICAgIHR5cGUgPSAnUHlfVU5JQ09ERSAqJwogICAgIGRlZmF1bHRfdHlwZSA9IChzdHIsIE51bGwsIE5vbmVUeXBlKQogICAgIGZvcm1hdF91bml0ID0gJ3UnCiAKLSAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgbnVsbGFibGU9RmFsc2UsIGxlbmd0aD1GYWxzZSk6Ci0gICAgICAgIGZvcm1hdF91bml0ID0gJ1onIGlmIG51bGxhYmxlIGVsc2UgJ3UnCi0gICAgICAgIGlmIGxlbmd0aDoKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYWNjZXB0PXtzdHJ9LCB6ZXJvZXM9RmFsc2UpOgorICAgICAgICBmb3JtYXRfdW5pdCA9ICdaJyBpZiBhY2NlcHQ9PXtzdHIsIE5vbmVUeXBlfSBlbHNlICd1JworICAgICAgICBpZiB6ZXJvZXM6CiAgICAgICAgICAgICBmb3JtYXRfdW5pdCArPSAnIycKICAgICAgICAgICAgIHNlbGYubGVuZ3RoID0gVHJ1ZQogICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKIAotIwotIyBXZSBkZWZpbmUgdGhyZWUgc3RyaW5nIGNvbnZlbnRpb25zIGZvciBidWZmZXIgdHlwZXMgaW4gdGhlICd0eXBlcycgYXJndW1lbnQ6Ci0jICAnYnVmZmVyJyA6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZQotIyAgJ3J3YnVmZmVyJzogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBiZSB3cml0ZWFibGUKLSMgICdyb2J1ZmZlcic6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZSwgYnV0IG11c3Qgbm90IGJlIHdyaXRlYWJsZQotIwotQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MqJywgdHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJykKLUBhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6KicsIHR5cGVzPSdzdHIgYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicsIG51bGxhYmxlPVRydWUpCi1AYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigndyonLCB0eXBlcz0nYnl0ZWFycmF5IHJ3YnVmZmVyJykKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCdzKicsIGFjY2VwdD17c3RyLCBidWZmZXJ9KQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3oqJywgYWNjZXB0PXtzdHIsIGJ1ZmZlciwgTm9uZVR5cGV9KQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3cqJywgYWNjZXB0PXtyd2J1ZmZlcn0pCiBjbGFzcyBQeV9idWZmZXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgogICAgIHR5cGUgPSAnUHlfYnVmZmVyJwogICAgIGZvcm1hdF91bml0ID0gJ3kqJwogICAgIGltcGxfYnlfcmVmZXJlbmNlID0gVHJ1ZQogICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIntOVUxMLCBOVUxMfSIKIAotICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCB0eXBlcz0nYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicsIG51bGxhYmxlPUZhbHNlKToKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYWNjZXB0PXtidWZmZXJ9KToKICAgICAgICAgaWYgc2VsZi5kZWZhdWx0IG5vdCBpbiAodW5zcGVjaWZpZWQsIE5vbmUpOgogICAgICAgICAgICAgZmFpbCgiVGhlIG9ubHkgbGVnYWwgZGVmYXVsdCB2YWx1ZSBmb3IgUHlfYnVmZmVyIGlzIE5vbmUuIikKLSAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBzZWxmLmNfaWdub3JlZF9kZWZhdWx0Ci0gICAgICAgIHR5cGVzID0gc2V0KHR5cGVzLnN0cmlwKCkuc3BsaXQoKSkKLSAgICAgICAgYnl0ZXNfdHlwZSA9IHNldCgoJ2J5dGVzJywpKQotICAgICAgICBieXRlYXJyYXlfdHlwZSA9IHNldCgoJ2J5dGVhcnJheScsKSkKLSAgICAgICAgYnVmZmVyX3R5cGUgPSBzZXQoKCdidWZmZXInLCkpCi0gICAgICAgIHJ3YnVmZmVyX3R5cGUgPSBzZXQoKCdyd2J1ZmZlcicsKSkKLSAgICAgICAgcm9idWZmZXJfdHlwZSA9IHNldCgoJ3JvYnVmZmVyJywpKQotICAgICAgICBzdHJfdHlwZSA9IHNldCgoJ3N0cicsKSkKLSAgICAgICAgYnl0ZXNfYnl0ZWFycmF5X2J1ZmZlcl90eXBlID0gYnl0ZXNfdHlwZSB8IGJ5dGVhcnJheV90eXBlIHwgYnVmZmVyX3R5cGUKIAotICAgICAgICBmb3JtYXRfdW5pdCA9IE5vbmUKLSAgICAgICAgaWYgdHlwZXMgPT0gKHN0cl90eXBlIHwgYnl0ZXNfYnl0ZWFycmF5X2J1ZmZlcl90eXBlKToKLSAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3MqJyBpZiBub3QgbnVsbGFibGUgZWxzZSAneionCisgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gc2VsZi5jX2lnbm9yZWRfZGVmYXVsdAorCisgICAgICAgIGlmIGFjY2VwdCA9PSB7c3RyLCBidWZmZXIsIE5vbmVUeXBlfToKKyAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3oqJworICAgICAgICBlbGlmIGFjY2VwdCA9PSB7c3RyLCBidWZmZXJ9OgorICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyonCisgICAgICAgIGVsaWYgYWNjZXB0ID09IHtidWZmZXJ9OgorICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgICAgIGVsaWYgYWNjZXB0ID09IHtyd2J1ZmZlcn06CisgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd3KicKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIG51bGxhYmxlOgotICAgICAgICAgICAgICAgIGZhaWwoJ1B5X2J1ZmZlcl9jb252ZXJ0ZXI6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChudWxsYWJsZT1UcnVlKScpCi0gICAgICAgICAgICBlbGlmIHR5cGVzID09IChieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUpOgotICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3kqJwotICAgICAgICAgICAgZWxpZiB0eXBlcyA9PSAoYnl0ZWFycmF5X3R5cGUgfCByd2J1ZmZlcl90eXBlKToKLSAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd3KicKLSAgICAgICAgaWYgbm90IGZvcm1hdF91bml0OgogICAgICAgICAgICAgZmFpbCgiUHlfYnVmZmVyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMiKQogCiAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdApAQCAtMjY2MSw3ICsyNzkzLDcgQEAKICAgICBpZiBmLmtpbmQgaW4gKENBTExBQkxFLCBNRVRIT0RfSU5JVCk6CiAgICAgICAgIGlmIGYuY2xzOgogICAgICAgICAgICAgcmV0dXJuICJQeU9iamVjdCAqIiwgInNlbGYiCi0gICAgICAgIHJldHVybiAiUHlNb2R1bGVEZWYgKiIsICJtb2R1bGUiCisgICAgICAgIHJldHVybiAiUHlPYmplY3QgKiIsICJtb2R1bGUiCiAgICAgaWYgZi5raW5kID09IFNUQVRJQ19NRVRIT0Q6CiAgICAgICAgIHJldHVybiAidm9pZCAqIiwgIm51bGwiCiAgICAgaWYgZi5raW5kIGluIChDTEFTU19NRVRIT0QsIE1FVEhPRF9ORVcpOgpAQCAtMjg2MywxMCArMjk5NSwxMSBAQAogICAgIHR5cGUgPSAnbG9uZycKICAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tTG9uZycKICAgICBjYXN0ID0gJycKKyAgICB1bnNpZ25lZF9jYXN0ID0gJycKIAogICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgogICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKLSAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSB7fS0xIi5mb3JtYXQoc2VsZi51bnNpZ25lZF9jYXN0KSwgZGF0YSkKICAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCiAgICAgICAgICAgICAnJy5qb2luKCgncmV0dXJuX3ZhbHVlID0gJywgc2VsZi5jb252ZXJzaW9uX2ZuLCAnKCcsIHNlbGYuY2FzdCwgJ19yZXR1cm5fdmFsdWUpO1xuJykpKQogCkBAIC0yODg3LDEwICszMDIwLDEyIEBACiBjbGFzcyB1bnNpZ25lZF9sb25nX3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKICAgICB0eXBlID0gJ3Vuc2lnbmVkIGxvbmcnCiAgICAgY29udmVyc2lvbl9mbiA9ICdQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZycKKyAgICB1bnNpZ25lZF9jYXN0ID0gJyh1bnNpZ25lZCBsb25nKScKIAogY2xhc3MgdW5zaWduZWRfaW50X3JldHVybl9jb252ZXJ0ZXIodW5zaWduZWRfbG9uZ19yZXR1cm5fY29udmVydGVyKToKICAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKICAgICBjYXN0ID0gJyh1bnNpZ25lZCBsb25nKScKKyAgICB1bnNpZ25lZF9jYXN0ID0gJyh1bnNpZ25lZCBpbnQpJwogCiBjbGFzcyBQeV9zc2l6ZV90X3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKICAgICB0eXBlID0gJ1B5X3NzaXplX3QnCkBAIC0yODk5LDYgKzMwMzQsNyBAQAogY2xhc3Mgc2l6ZV90X3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKICAgICB0eXBlID0gJ3NpemVfdCcKICAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tU2l6ZV90JworICAgIHVuc2lnbmVkX2Nhc3QgPSAnKHNpemVfdCknCiAKIAogY2xhc3MgZG91YmxlX3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CkBAIC0yOTI2LDYgKzMwNjIsMjQgQEAKICAgICAgICAgICAgICdyZXR1cm5fdmFsdWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KF9yZXR1cm5fdmFsdWUpO1xuJykKIAogCitkZWYgZXZhbF9hc3RfZXhwcihub2RlLCBnbG9iYWxzLCAqLCBmaWxlbmFtZT0nLScpOgorICAgICIiIgorICAgIFRha2VzIGFuIGFzdC5FeHByIG5vZGUuICBDb21waWxlcyBhbmQgZXZhbHVhdGVzIGl0LgorICAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbi4KKworICAgIGdsb2JhbHMgcmVwcmVzZW50cyB0aGUgZ2xvYmFscyBkaWN0IHRoZSBleHByZXNzaW9uCisgICAgc2hvdWxkIHNlZS4gIChUaGVyZSdzIG5vIGVxdWl2YWxlbnQgZm9yICJsb2NhbHMiIGhlcmUuKQorICAgICIiIgorCisgICAgaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuRXhwcik6CisgICAgICAgIG5vZGUgPSBub2RlLnZhbHVlCisKKyAgICBub2RlID0gYXN0LkV4cHJlc3Npb24obm9kZSkKKyAgICBjbyA9IGNvbXBpbGUobm9kZSwgZmlsZW5hbWUsICdldmFsJykKKyAgICBmbiA9IHR5cGVzLkZ1bmN0aW9uVHlwZShjbywgZ2xvYmFscykKKyAgICByZXR1cm4gZm4oKQorCisKIGNsYXNzIEluZGVudFN0YWNrOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5pbmRlbnRzID0gW10KQEAgLTMwOTQsNDMgKzMyNDgsNDMgQEAKICAgICAgICAgZmFpbCgidW5rbm93biBkZXN0aW5hdGlvbiBjb21tYW5kIiwgcmVwcihjb21tYW5kKSkKIAogCi0gICAgZGVmIGRpcmVjdGl2ZV9vdXRwdXQoc2VsZiwgZmllbGQsIGRlc3RpbmF0aW9uPScnKToKLSAgICAgICAgZmQgPSBzZWxmLmNsaW5pYy5maWVsZF9kZXN0aW5hdGlvbnMKKyAgICBkZWYgZGlyZWN0aXZlX291dHB1dChzZWxmLCBjb21tYW5kX29yX25hbWUsIGRlc3RpbmF0aW9uPScnKToKKyAgICAgICAgZmQgPSBzZWxmLmNsaW5pYy5kZXN0aW5hdGlvbl9idWZmZXJzCiAKLSAgICAgICAgaWYgZmllbGQgPT0gInByZXNldCI6CisgICAgICAgIGlmIGNvbW1hbmRfb3JfbmFtZSA9PSAicHJlc2V0IjoKICAgICAgICAgICAgIHByZXNldCA9IHNlbGYuY2xpbmljLnByZXNldHMuZ2V0KGRlc3RpbmF0aW9uKQogICAgICAgICAgICAgaWYgbm90IHByZXNldDoKICAgICAgICAgICAgICAgICBmYWlsKCJVbmtub3duIHByZXNldCAiICsgcmVwcihkZXN0aW5hdGlvbikgKyAiISIpCiAgICAgICAgICAgICBmZC51cGRhdGUocHJlc2V0KQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaWYgZmllbGQgPT0gInB1c2giOgotICAgICAgICAgICAgc2VsZi5jbGluaWMuZmllbGRfZGVzdGluYXRpb25zX3N0YWNrLmFwcGVuZChmZC5jb3B5KCkpCisgICAgICAgIGlmIGNvbW1hbmRfb3JfbmFtZSA9PSAicHVzaCI6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5kZXN0aW5hdGlvbl9idWZmZXJzX3N0YWNrLmFwcGVuZChmZC5jb3B5KCkpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpZiBmaWVsZCA9PSAicG9wIjoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsaW5pYy5maWVsZF9kZXN0aW5hdGlvbnNfc3RhY2s6CisgICAgICAgIGlmIGNvbW1hbmRfb3JfbmFtZSA9PSAicG9wIjoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsaW5pYy5kZXN0aW5hdGlvbl9idWZmZXJzX3N0YWNrOgogICAgICAgICAgICAgICAgIGZhaWwoIkNhbid0ICdvdXRwdXQgcG9wJywgc3RhY2sgaXMgZW1wdHkhIikKLSAgICAgICAgICAgIHByZXZpb3VzX2ZkID0gc2VsZi5jbGluaWMuZmllbGRfZGVzdGluYXRpb25zX3N0YWNrLnBvcCgpCisgICAgICAgICAgICBwcmV2aW91c19mZCA9IHNlbGYuY2xpbmljLmRlc3RpbmF0aW9uX2J1ZmZlcnNfc3RhY2sucG9wKCkKICAgICAgICAgICAgIGZkLnVwZGF0ZShwcmV2aW91c19mZCkKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgc2VjcmV0IGNvbW1hbmQgZm9yIGRlYnVnZ2luZyEKLSAgICAgICAgaWYgZmllbGQgPT0gInByaW50IjoKKyAgICAgICAgaWYgY29tbWFuZF9vcl9uYW1lID09ICJwcmludCI6CiAgICAgICAgICAgICBzZWxmLmJsb2NrLm91dHB1dC5hcHBlbmQocHByaW50LnBmb3JtYXQoZmQpKQogICAgICAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKCdcbicpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBkID0gc2VsZi5jbGluaWMuZ2V0X2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogCi0gICAgICAgIGlmIGZpZWxkID09ICJldmVyeXRoaW5nIjoKKyAgICAgICAgaWYgY29tbWFuZF9vcl9uYW1lID09ICJldmVyeXRoaW5nIjoKICAgICAgICAgICAgIGZvciBuYW1lIGluIGxpc3QoZmQpOgogICAgICAgICAgICAgICAgIGZkW25hbWVdID0gZAogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaWYgZmllbGQgbm90IGluIGZkOgotICAgICAgICAgICAgZmFpbCgiSW52YWxpZCBmaWVsZCAiICsgcmVwcihmaWVsZCkgKyAiLCBtdXN0IGJlIG9uZSBvZjpcbiAgcHJlc2V0IHB1c2ggcG9wIHByaW50IGV2ZXJ5dGhpbmcgIiArICIgIi5qb2luKGZkKSkKLSAgICAgICAgZmRbZmllbGRdID0gZAorICAgICAgICBpZiBjb21tYW5kX29yX25hbWUgbm90IGluIGZkOgorICAgICAgICAgICAgZmFpbCgiSW52YWxpZCBjb21tYW5kIC8gZGVzdGluYXRpb24gbmFtZSAiICsgcmVwcihjb21tYW5kX29yX25hbWUpICsgIiwgbXVzdCBiZSBvbmUgb2Y6XG4gIHByZXNldCBwdXNoIHBvcCBwcmludCBldmVyeXRoaW5nICIgKyAiICIuam9pbihmZCkpCisgICAgICAgIGZkW2NvbW1hbmRfb3JfbmFtZV0gPSBkCiAKICAgICBkZWYgZGlyZWN0aXZlX2R1bXAoc2VsZiwgbmFtZSk6CiAgICAgICAgIHNlbGYuYmxvY2sub3V0cHV0LmFwcGVuZChzZWxmLmNsaW5pYy5nZXRfZGVzdGluYXRpb24obmFtZSkuZHVtcCgpKQpAQCAtMzUxMyw3ICszNjY3LDcgQEAKICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgdGhlIGxhc3QgPSB3YXMgcHJvYmFibHkgaW5zaWRlIGEgZnVuY3Rpb24gY2FsbCwgbGlrZQotICAgICAgICAgICAgICAgICMgICBpOiBpbnQobnVsbGFibGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICAjICAgYzogaW50KGFjY2VwdD17c3RyfSkKICAgICAgICAgICAgICAgICAjIHNvIGFzc3VtZSB0aGVyZSB3YXMgbm8gYWN0dWFsIGRlZmF1bHQgdmFsdWUuCiAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IE5vbmUKICAgICAgICAgICAgICAgICBhc3RfaW5wdXQgPSAiZGVmIHgoe30pOiBwYXNzIi5mb3JtYXQobGluZSkKQEAgLTM1MjQsNiArMzY3OCwxNCBAQAogICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIGludmFsaWQgcGFyYW1ldGVyIGRlY2xhcmF0aW9uOlxuXHQiICsgbGluZSkKIAogICAgICAgICBmdW5jdGlvbl9hcmdzID0gbW9kdWxlLmJvZHlbMF0uYXJncworCisgICAgICAgIGlmIGxlbihmdW5jdGlvbl9hcmdzLmFyZ3MpID4gMToKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBpbnZhbGlkIHBhcmFtZXRlciBkZWNsYXJhdGlvbiAoY29tbWE/KTpcblx0IiArIGxpbmUpCisgICAgICAgIGlmIGZ1bmN0aW9uX2FyZ3MuZGVmYXVsdHMgb3IgZnVuY3Rpb25fYXJncy5rd19kZWZhdWx0czoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBpbnZhbGlkIHBhcmFtZXRlciBkZWNsYXJhdGlvbiAoZGVmYXVsdCB2YWx1ZT8pOlxuXHQiICsgbGluZSkKKyAgICAgICAgaWYgZnVuY3Rpb25fYXJncy52YXJhcmcgb3IgZnVuY3Rpb25fYXJncy5rd2FyZzoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBpbnZhbGlkIHBhcmFtZXRlciBkZWNsYXJhdGlvbiAoKmFyZ3M/ICoqa3dhcmdzPyk6XG5cdCIgKyBsaW5lKQorCiAgICAgICAgIHBhcmFtZXRlciA9IGZ1bmN0aW9uX2FyZ3MuYXJnc1swXQogCiAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLmFyZwpAQCAtMzY4Niw3ICszODQ4LDkgQEAKICAgICAgICAgICAgIGZhaWwoIkFubm90YXRpb25zIG11c3QgYmUgZWl0aGVyIGEgbmFtZSwgYSBmdW5jdGlvbiBjYWxsLCBvciBhIHN0cmluZy4iKQogCiAgICAgICAgIG5hbWUgPSBhbm5vdGF0aW9uLmZ1bmMuaWQKLSAgICAgICAga3dhcmdzID0ge25vZGUuYXJnOiBhc3QubGl0ZXJhbF9ldmFsKG5vZGUudmFsdWUpIGZvciBub2RlIGluIGFubm90YXRpb24ua2V5d29yZHN9CisgICAgICAgIHN5bWJvbHMgPSBnbG9iYWxzKCkKKworICAgICAgICBrd2FyZ3MgPSB7bm9kZS5hcmc6IGV2YWxfYXN0X2V4cHIobm9kZS52YWx1ZSwgc3ltYm9scykgZm9yIG5vZGUgaW4gYW5ub3RhdGlvbi5rZXl3b3Jkc30KICAgICAgICAgcmV0dXJuIG5hbWUsIEZhbHNlLCBrd2FyZ3MKIAogICAgIGRlZiBwYXJzZV9zcGVjaWFsX3N5bWJvbChzZWxmLCBzeW1ib2wpOgpAQCAtMzk1OSw3ICs0MTIzLDcgQEAKICAgICAgICAgIyAgICAgYWRkKGYucmV0dXJuX2NvbnZlcnRlci5weV9kZWZhdWx0KQogCiAgICAgICAgIGlmIG5vdCBmLmRvY3N0cmluZ19vbmx5OgotICAgICAgICAgICAgYWRkKCJcbi0tXG4iKQorICAgICAgICAgICAgYWRkKCJcbiIgKyBzaWdfZW5kX21hcmtlciArICJcbiIpCiAKICAgICAgICAgZG9jc3RyaW5nX2ZpcnN0X2xpbmUgPSBvdXRwdXQoKQogCmRpZmYgLS1naXQgYS9Ub29scy9jbGluaWMvY2xpbmljX3Rlc3QucHkgYi9Ub29scy9jbGluaWMvY2xpbmljX3Rlc3QucHkKaW5kZXggY2QyMTAwMC4uYTk0NzlhNiAxMDA2NDQKLS0tIGEvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5CisrKyBiL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weQpAQCAtMyw3ICszLDYgQEAKICMgTGljZW5zZWQgdG8gdGhlIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KICMKIAotaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgY2xpbmljCiBmcm9tIGNsaW5pYyBpbXBvcnQgRFNMUGFyc2VyCiBpbXBvcnQgY29sbGVjdGlvbnMKQEAgLTkxLDcgKzkwLDcgQEAKICAgICAgICAgIyB0aGUgImVuZCBsaW5lIiBmb3IgdGhlIGJsb2NrIGlmIGl0CiAgICAgICAgICMgZGlkbid0IGVuZCBpbiAiXG4iIChhcyBpbiwgdGhlIGxhc3QpCiAgICAgICAgICMgYnl0ZSBvZiB0aGUgZmlsZSB3YXMgJy8nLgotICAgICAgICAjIHNvIGl0IHdvdWRsIHNwaXQgb3V0IGFuIGVuZCBsaW5lIGZvciB5b3UuCisgICAgICAgICMgc28gaXQgd291bGQgc3BpdCBvdXQgYW4gZW5kIGxpbmUgZm9yIHlvdS4KICAgICAgICAgIyBhbmQgc2luY2UgeW91IHJlYWxseSBhbHJlYWR5IGhhZCBvbmUsCiAgICAgICAgICMgdGhlIGxhc3QgbGluZSBvZiB0aGUgYmxvY2sgZ290IGNvcnJ1cHRlZC4KICAgICAgICAgYyA9IGNsaW5pYy5DbGluaWMoY2xpbmljLkNMYW5ndWFnZShOb25lKSkKQEAgLTc0NywxNSArNzQ2LDYgQEAKICAgICBOZXN0ZWQgZG9jc3RyaW5nIGhlcmUsIGdvZXRoLgogIiIiLnN0cmlwKCksIGZ1bmN0aW9uLmRvY3N0cmluZykKIAotICAgIGRlZiB0ZXN0X3BhcnNlcl9yZWdyZXNzaW9uX3NwZWNpYWxfY2hhcmFjdGVyX2luX3BhcmFtZXRlcl9jb2x1bW5fb2ZfZG9jc3RyaW5nX2ZpcnN0X2xpbmUoc2VsZik6Ci0gICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKLW1vZHVsZSBvcwotb3Muc3RhdAotICAgIHBhdGg6IHN0cgotVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEKLSIiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgic3RhdCgkbW9kdWxlLCAvLCBwYXRoKVxuLS1cblxuVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEiLCBmdW5jdGlvbi5kb2NzdHJpbmcpCi0KICAgICBkZWYgdGVzdF9kaXJlY3RpdmUoc2VsZik6CiAgICAgICAgIGMgPSBGYWtlQ2xpbmljKCkKICAgICAgICAgcGFyc2VyID0gRFNMUGFyc2VyKGMpCmRpZmYgLS1naXQgYS9Ub29scy9kZW1vL3JlZGVtby5weSBiL1Rvb2xzL2RlbW8vcmVkZW1vLnB5CmluZGV4IGIxMGIwMzAuLjgzMzVkNGMgMTAwNzU1Ci0tLSBhL1Rvb2xzL2RlbW8vcmVkZW1vLnB5CisrKyBiL1Rvb2xzL2RlbW8vcmVkZW1vLnB5CkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCi0iIiJCYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZGVtb3N0cmF0aW9uIGZhY2lsaXR5IChQZXJsIHN0eWxlIHN5bnRheCkuIiIiCisiIiJCYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZGVtb25zdHJhdGlvbiBmYWNpbGl0eSAoUGVybCBzdHlsZSBzeW50YXgpLiIiIgogCiBmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGltcG9ydCByZQpkaWZmIC0tZ2l0IGEvVG9vbHMvZGVtby9zczEucHkgYi9Ub29scy9kZW1vL3NzMS5weQppbmRleCA2NDk3OTBmLi5jNTFmMDQxIDEwMDc1NQotLS0gYS9Ub29scy9kZW1vL3NzMS5weQorKysgYi9Ub29scy9kZW1vL3NzMS5weQpAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgZGVmIGVuZF9pbnQoc2VsZiwgdGV4dCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYudmFsdWUgPSBpbnQodGV4dCkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLnZhbHVlID0gTm9uZQogCiAgICAgZW5kX2xvbmcgPSBlbmRfaW50CkBAIC0yNjksMTMgKzI2OSwxMyBAQAogICAgIGRlZiBlbmRfZG91YmxlKHNlbGYsIHRleHQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnZhbHVlID0gZmxvYXQodGV4dCkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLnZhbHVlID0gTm9uZQogCiAgICAgZGVmIGVuZF9jb21wbGV4KHNlbGYsIHRleHQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnZhbHVlID0gY29tcGxleCh0ZXh0KQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgIHNlbGYudmFsdWUgPSBOb25lCiAKICAgICBkZWYgZW5kX3N0cmluZyhzZWxmLCB0ZXh0KToKQEAgLTc2Myw3ICs3NjMsNyBAQAogICAgICAgICAgICAgZm9yIGNscyBpbiBpbnQsIGZsb2F0LCBjb21wbGV4OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjbHModGV4dCkKLSAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBOdW1lcmljQ2VsbCh2YWx1ZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9SRUFETUUgYi9Ub29scy9mcmVlemUvUkVBRE1FCmluZGV4IDgxYmUyYzguLjViYzViMDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9SRUFETUUKKysrIGIvVG9vbHMvZnJlZXplL1JFQURNRQpAQCAtMTAwLDggKzEwMCw4IEBACiB0aGVuIGRlY2xhcmUgdGhlc2UgZGlyZWN0b3JpZXMgaW4geW91ciBmcm96ZW4gUHl0aG9uIHByb2dyYW0gdXNpbmcKIHRoZSBUQ0xfTElCUkFSWSwgVEtfTElCUkFSWSBhbmQgVElYX0xJQlJBUlkgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogCi1Gb3IgZXhhbXBsZSwgYXNzdW1lIHlvdSB3aWxsIHNoaXAgeW91ciBmcm96ZW4gcHJvZ3JhbSBpbiB0aGUgZGlyZWN0b3J5IAotPHJvb3Q+L2Jpbi93aW5kb3dzLXg4NiBhbmQgd2lsbCBwbGFjZSB5b3VyIFRjbCBsaWJyYXJ5IGZpbGVzIAorRm9yIGV4YW1wbGUsIGFzc3VtZSB5b3Ugd2lsbCBzaGlwIHlvdXIgZnJvemVuIHByb2dyYW0gaW4gdGhlIGRpcmVjdG9yeQorPHJvb3Q+L2Jpbi93aW5kb3dzLXg4NiBhbmQgd2lsbCBwbGFjZSB5b3VyIFRjbCBsaWJyYXJ5IGZpbGVzCiBpbiA8cm9vdD4vbGliL3RjbDguMiBhbmQgeW91ciBUayBsaWJyYXJ5IGZpbGVzIGluIDxyb290Pi9saWIvdGs4LjIuIFRoZW4KIHBsYWNpbmcgdGhlIGZvbGxvd2luZyBsaW5lcyBpbiB5b3VyIGZyb3plbiBQeXRob24gc2NyaXB0IGJlZm9yZSBpbXBvcnRpbmcKIFRraW50ZXIgb3IgVGl4IHdvdWxkIHNldCB0aGUgZW52aXJvbm1lbnQgY29ycmVjdGx5IGZvciBUY2wvVGsvVGl4OgpAQCAtMTM4LDggKzEzOCw4IEBACiBlbnZpcm9ubWVudCB2YXJpYWJsZSBMRF9MSUJSQVJZX1BBVEggYW5kL29yIHRoZSBzeXN0ZW0KIHNoYXJlZCBsaWJyYXJ5IGNhY2hlIChsZC5zbykuIEFuIGFkZGl0aW9uYWwgcHJlZmVycmVkIGRpcmVjdG9yeSBmb3IKIGZpbmRpbmcgdGhlIGR5bmFtaWMgbGlicmFyaWVzIGlzIGJ1aWx0IGludG8gdGhlIC5kbGwgb3IgLnNvIGZpbGVzIGF0Ci1jb21waWxlIHRpbWUgLSBzZWUgdGhlIExJQl9SVU5USU1FX0RJUiB2YXJpYWJsZSBpbiB0aGUgVGNsIG1ha2VmaWxlLiAKLVRoZSBPUyBtdXN0IGZpbmQgdGhlIGR5bmFtaWMgbGlicmFyaWVzIG9yIHlvdXIgZnJvemVuIHByb2dyYW0gd29uJ3Qgc3RhcnQuIAorY29tcGlsZSB0aW1lIC0gc2VlIHRoZSBMSUJfUlVOVElNRV9ESVIgdmFyaWFibGUgaW4gdGhlIFRjbCBtYWtlZmlsZS4KK1RoZSBPUyBtdXN0IGZpbmQgdGhlIGR5bmFtaWMgbGlicmFyaWVzIG9yIHlvdXIgZnJvemVuIHByb2dyYW0gd29uJ3Qgc3RhcnQuCiBVc3VhbGx5IEkgbWFrZSBzdXJlIHRoYXQgdGhlIC5zbyBvciAuZGxsIGZpbGVzIGFyZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKIGFzIHRoZSBleGVjdXRhYmxlLCBidXQgdGhpcyBtYXkgbm90IGJlIGZvb2xwcm9vZi4KIApAQCAtMTQ5LDggKzE0OSw4IEBACiB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiB3aGVuIHRoZSBwcm9ncmFtIHJ1bnM7IHRoaXMgaXMgY3VycmVudGx5IGxlZnQKIGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLiAgQW4gZWFzaWVyIGFwcHJvYWNoIGlzIHRvIGZyZWV6ZSB0aGUKIFRjbC9Uay9UaXggY29kZSBpbnRvIHRoZSBkeW5hbWljIGxpYnJhcmllcyB1c2luZyB0aGUgVGNsIEVUIGNvZGUsCi1vciB0aGUgVGl4IFN0YW5kLUFsb25lLU1vZHVsZSBjb2RlLiBPZiBjb3Vyc2UsIHlvdSBjYW4gYWxzbyBzaW1wbHkgCi1yZXF1aXJlIHRoYXQgVGNsL1RrIGlzIHJlcXVpcmVkIG9uIHRoZSB0YXJnZXQgaW5zdGFsbGF0aW9uLCBidXQgYmUgCitvciB0aGUgVGl4IFN0YW5kLUFsb25lLU1vZHVsZSBjb2RlLiBPZiBjb3Vyc2UsIHlvdSBjYW4gYWxzbyBzaW1wbHkKK3JlcXVpcmUgdGhhdCBUY2wvVGsgaXMgcmVxdWlyZWQgb24gdGhlIHRhcmdldCBpbnN0YWxsYXRpb24sIGJ1dCBiZQogY2FyZWZ1bCB0aGF0IHRoZSB2ZXJzaW9uIGNvcnJlc3BvbmRzLgogCiBUaGVyZSBhcmUgc29tZSBjYXZlYXRzIHVzaW5nIGZyb3plbiBUa2ludGVyIGFwcGxpY2F0aW9uczoKQEAgLTE2NCw3ICsxNjQsNyBAQAogQSB3YXJuaW5nIGFib3V0IHNoYXJlZCBsaWJyYXJ5IG1vZHVsZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoZW4geW91ciBQeXRob24gaW5zdGFsbGF0aW9uIHVzZXMgc2hhcmVkIGxpYnJhcnkgbW9kdWxlcyBzdWNoIGFzIAorV2hlbiB5b3VyIFB5dGhvbiBpbnN0YWxsYXRpb24gdXNlcyBzaGFyZWQgbGlicmFyeSBtb2R1bGVzIHN1Y2ggYXMKIF90a2ludGVyLnB5ZCwgdGhlc2Ugd2lsbCBub3QgYmUgaW5jb3Jwb3JhdGVkIGluIHRoZSBmcm96ZW4gcHJvZ3JhbS4KICBBZ2FpbiwgdGhlIGZyb3plbiBwcm9ncmFtIHdpbGwgd29yayB3aGVuIHlvdSB0ZXN0IGl0LCBidXQgaXQgd29uJ3QKICB3b3JrIHdoZW4geW91IHNoaXAgaXQgdG8gYSBzaXRlIHdpdGhvdXQgYSBQeXRob24gaW5zdGFsbGF0aW9uLgpAQCAtMjc1LDkgKzI3NSw5IEBACiAgICAgICAgICAgICAgIGFyZSByZWFkIGFuZCB0aGUgLWkgb3B0aW9uIHJlcGxhY2VkIHdpdGggdGhlIHBhcnNlZAogICAgICAgICAgICAgICBwYXJhbXMgKG5vdGUgLSBxdW90aW5nIGFyZ3MgaW4gdGhpcyBmaWxlIGlzIE5PVCBzdXBwb3J0ZWQpCiAKLS1zIHN1YnN5c3RlbTogU3BlY2lmeSB0aGUgc3Vic3lzdGVtIChGb3IgV2luZG93cyBvbmx5Lik7IAorLXMgc3Vic3lzdGVtOiBTcGVjaWZ5IHRoZSBzdWJzeXN0ZW0gKEZvciBXaW5kb3dzIG9ubHkuKTsKICAgICAgICAgICAgICAgJ2NvbnNvbGUnIChkZWZhdWx0KSwgJ3dpbmRvd3MnLCAnc2VydmljZScgb3IgJ2NvbV9kbGwnCi0gICAgICAgICAgICAgIAorCiAtdzogICAgICAgICAgIFRvZ2dsZSBXaW5kb3dzIChOVCBvciA5NSkgYmVoYXZpb3IuCiAgICAgICAgICAgICAgIChGb3IgZGVidWdnaW5nIG9ubHkgLS0gb24gYSB3aW4zMiBwbGF0Zm9ybSwgd2luMzIgYmVoYXZpb3IKICAgICAgICAgICAgICAgaXMgYXV0b21hdGljLikKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkgYi9Ub29scy9mcmVlemUvYmtmaWxlLnB5CmluZGV4IDZhYmFjYzkuLjIwYTcwYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKKysrIGIvVG9vbHMvZnJlZXplL2JrZmlsZS5weQpAQCAtMSw0OSArMSwyNiBAQAogZnJvbSBidWlsdGlucyBpbXBvcnQgb3BlbiBhcyBfb3JpZ19vcGVuCiAKLWNsYXNzIF9Ca0ZpbGU6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGUsIGJ1ZnNpemUpOgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgc2VsZi5fX2ZpbGVuYW1lID0gZmlsZQotICAgICAgICBzZWxmLl9fYmFja3VwID0gZmlsZSArICd+JwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fX2JhY2t1cCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlLCBzZWxmLl9fYmFja3VwKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuX19iYWNrdXAgPSBOb25lCi0gICAgICAgIHNlbGYuX19maWxlID0gX29yaWdfb3BlbihmaWxlLCBtb2RlLCBidWZzaXplKQotICAgICAgICBzZWxmLmNsb3NlZCA9IHNlbGYuX19maWxlLmNsb3NlZAotICAgICAgICBzZWxmLmZpbGVubyA9IHNlbGYuX19maWxlLmZpbGVubwotICAgICAgICBzZWxmLmZsdXNoID0gc2VsZi5fX2ZpbGUuZmx1c2gKLSAgICAgICAgc2VsZi5pc2F0dHkgPSBzZWxmLl9fZmlsZS5pc2F0dHkKLSAgICAgICAgc2VsZi5tb2RlID0gc2VsZi5fX2ZpbGUubW9kZQotICAgICAgICBzZWxmLm5hbWUgPSBzZWxmLl9fZmlsZS5uYW1lCi0gICAgICAgIHNlbGYucmVhZCA9IHNlbGYuX19maWxlLnJlYWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5yZWFkaW50byA9IHNlbGYuX19maWxlLnJlYWRpbnRvCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IHNlbGYuX19maWxlLnJlYWRsaW5lCi0gICAgICAgIHNlbGYucmVhZGxpbmVzID0gc2VsZi5fX2ZpbGUucmVhZGxpbmVzCi0gICAgICAgIHNlbGYuc2VlayA9IHNlbGYuX19maWxlLnNlZWsKLSAgICAgICAgc2VsZi50ZWxsID0gc2VsZi5fX2ZpbGUudGVsbAotICAgICAgICBzZWxmLnRydW5jYXRlID0gc2VsZi5fX2ZpbGUudHJ1bmNhdGUKLSAgICAgICAgc2VsZi53cml0ZSA9IHNlbGYuX19maWxlLndyaXRlCi0gICAgICAgIHNlbGYud3JpdGVsaW5lcyA9IHNlbGYuX19maWxlLndyaXRlbGluZXMKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5fX2ZpbGUuY2xvc2UoKQotICAgICAgICBpZiBzZWxmLl9fYmFja3VwIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaW1wb3J0IGZpbGVjbXAKLSAgICAgICAgaWYgZmlsZWNtcC5jbXAoc2VsZi5fX2JhY2t1cCwgc2VsZi5fX2ZpbGVuYW1lLCBzaGFsbG93ID0gMCk6Ci0gICAgICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9fZmlsZW5hbWUpCi0gICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5fX2JhY2t1cCwgc2VsZi5fX2ZpbGVuYW1lKQotCi1kZWYgb3BlbihmaWxlLCBtb2RlID0gJ3InLCBidWZzaXplID0gLTEpOgorZGVmIG9wZW4oZmlsZSwgbW9kZT0ncicsIGJ1ZnNpemU9LTEpOgogICAgIGlmICd3JyBub3QgaW4gbW9kZToKICAgICAgICAgcmV0dXJuIF9vcmlnX29wZW4oZmlsZSwgbW9kZSwgYnVmc2l6ZSkKLSAgICByZXR1cm4gX0JrRmlsZShmaWxlLCBtb2RlLCBidWZzaXplKQorICAgIGltcG9ydCBvcworICAgIGJhY2t1cCA9IGZpbGUgKyAnficKKyAgICB0cnk6CisgICAgICAgIG9zLnVubGluayhiYWNrdXApCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbmFtZShmaWxlLCBiYWNrdXApCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJldHVybiBfb3JpZ19vcGVuKGZpbGUsIG1vZGUsIGJ1ZnNpemUpCisgICAgZiA9IF9vcmlnX29wZW4oZmlsZSwgbW9kZSwgYnVmc2l6ZSkKKyAgICBfb3JpZ19jbG9zZSA9IGYuY2xvc2UKKyAgICBkZWYgY2xvc2UoKToKKyAgICAgICAgX29yaWdfY2xvc2UoKQorICAgICAgICBpbXBvcnQgZmlsZWNtcAorICAgICAgICBpZiBmaWxlY21wLmNtcChiYWNrdXAsIGZpbGUsIHNoYWxsb3c9RmFsc2UpOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBvcy51bmxpbmsoZmlsZSkKKyAgICAgICAgICAgIG9zLnJlbmFtZShiYWNrdXAsIGZpbGUpCisgICAgZi5jbG9zZSA9IGNsb3NlCisgICAgcmV0dXJuIGYKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9leHRlbnNpb25zX3dpbjMyLmluaSBiL1Rvb2xzL2ZyZWV6ZS9leHRlbnNpb25zX3dpbjMyLmluaQppbmRleCAxZTM2YWJhLi5kMDFmZDZiIDEwMDY0NAotLS0gYS9Ub29scy9mcmVlemUvZXh0ZW5zaW9uc193aW4zMi5pbmkKKysrIGIvVG9vbHMvZnJlZXplL2V4dGVuc2lvbnNfd2luMzIuaW5pCkBAIC02LDcgKzYsNyBAQAogCiA7IFRoaXMgaXMgYWxsIHNldHVwIGZvciBhbGwgdGhlIHdpbjMyIGV4dGVuc2lvbiBtb2R1bGVzCiA7IHJlbGVhc2VkIGJ5IE1hcmsgSGFtbW9uZC4KLTsgWW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBZVEhPTkVYIGlzIHNldCAKKzsgWW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBZVEhPTkVYIGlzIHNldAogOyB0byBwb2ludCB0byB0aGUgcm9vdCB3aW4zMiBleHRlbnNpb25zIGRpcmVjdG9yeQogCiA7IFBZVEhPTlBSRUZJWCBtdXN0IHBvaW50IHRvIHRoZSBQeXRob24gYnVpbGQgcm9vdCBkaXJlY3RvcnkKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogW3psaWJdCiBkc3A9JVBZVEhPTlBSRUZJWCVcUENCdWlsZFx6bGliLmRzcAotY2w9L0kgJVBZVEhPTlBSRUZJWCVcLi5cemxpYi0xLjEuNCAvRCBfV0lORE9XUyAvRCBXSU4zMiAKK2NsPS9JICVQWVRIT05QUkVGSVglXC4uXHpsaWItMS4xLjQgL0QgX1dJTkRPV1MgL0QgV0lOMzIKIGxpYnM9JVBZVEhPTlBSRUZJWCVcLi5cemxpYi0xLjEuNFx6bGliLmxpYiAvbm9kZWZhdWx0bGliOmxpYmMKIAogW3dpbnJlZ10KQEAgLTk1LDcgKzk1LDcgQEAKIGNsPS9JICVQWVRIT05FWCVcd2luMzJcc3JjCiAKIFt3aW4zMmZpbGVdCi1kc3A9JVBZVEhPTkVYJVx3aW4zMlx3aW4zMmZpbGUuZHNwIAorZHNwPSVQWVRIT05FWCVcd2luMzJcd2luMzJmaWxlLmRzcAogY2w9L0kgJVBZVEhPTkVYJVx3aW4zMlxzcmMKIAogW3dpbjMybmV0XQpAQCAtMTA4LDcgKzEwOCw3IEBACiBjbD0vSSAlUFlUSE9ORVglXHdpbjMyXHNyYwogCiBbd2luMzJwaXBlXQotZHNwPSVQWVRIT05FWCVcd2luMzJcd2luMzJwaXBlLmRzcCAKK2RzcD0lUFlUSE9ORVglXHdpbjMyXHdpbjMycGlwZS5kc3AKIGNsPS9JICVQWVRIT05FWCVcd2luMzJcc3JjCiAKIFt3aW4zMnNlY3VyaXR5XQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weSBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKaW5kZXggZTBjNmMyYy4uNDRlZGQ1NyAxMDA3NTUKLS0tIGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQorKysgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgdXNhZ2UoJ2dldG9wdCBlcnJvcjogJyArIHN0cihtc2cpKQogCi0gICAgIyBwcm9jZXMgb3B0aW9uIGFyZ3VtZW50cworICAgICMgcHJvY2VzcyBvcHRpb24gYXJndW1lbnRzCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKICAgICAgICAgaWYgbyA9PSAnLWgnOgogICAgICAgICAgICAgcHJpbnQoX19kb2NfXykKQEAgLTM2Niw4ICszNjYsMTAgQEAKICAgICAgICAgICAgIG1mLmxvYWRfZmlsZShtb2QpCiAKICAgICAjIEFsaWFzICJpbXBvcnRsaWIuX2Jvb3RzdHJhcCIgdG8gIl9mcm96ZW5faW1wb3J0bGliIiBzbyB0aGF0IHRoZQotICAgICMgaW1wb3J0IG1hY2hpbmVyeSBjYW4gYm9vdHN0cmFwLgorICAgICMgaW1wb3J0IG1hY2hpbmVyeSBjYW4gYm9vdHN0cmFwLiAgRG8gdGhlIHNhbWUgZm9yCisgICAgIyBpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbC4KICAgICBtZi5tb2R1bGVzWyJfZnJvemVuX2ltcG9ydGxpYiJdID0gbWYubW9kdWxlc1siaW1wb3J0bGliLl9ib290c3RyYXAiXQorICAgIG1mLm1vZHVsZXNbIl9mcm96ZW5faW1wb3J0bGliX2V4dGVybmFsIl0gPSBtZi5tb2R1bGVzWyJpbXBvcnRsaWIuX2Jvb3RzdHJhcF9leHRlcm5hbCJdCiAKICAgICAjIEFkZCB0aGUgbWFpbiBzY3JpcHQgYXMgZWl0aGVyIF9fbWFpbl9fLCBvciB0aGUgYWN0dWFsIG1vZHVsZSBuYW1lLgogICAgIGlmIHB5dGhvbl9lbnRyeV9pc19tYWluOgpAQCAtNDM5LDI1ICs0NDEsMTcgQEAKICAgICAgICAgICAgICAgICAgZnJvemVuZGxsbWFpbl9jLCBvcy5wYXRoLmJhc2VuYW1lKGV4dGVuc2lvbnNfYyldICsgZmlsZXMKICAgICAgICAgbWFpbmRlZm4gPSBjaGVja2V4dGVuc2lvbnNfd2luMzIuQ0V4dGVuc2lvbiggJ19fbWFpbl9fJywgeHRyYXMgKQogICAgICAgICBmcm96ZW5fZXh0ZW5zaW9ucy5hcHBlbmQoIG1haW5kZWZuICkKLSAgICAgICAgb3V0ZnAgPSBvcGVuKG1ha2VmaWxlLCAndycpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIG91dGZwOgogICAgICAgICAgICAgd2lubWFrZW1ha2VmaWxlLm1ha2VtYWtlZmlsZShvdXRmcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbl9leHRlbnNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHRhcmdldCkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvdXRmcC5jbG9zZSgpCiAgICAgICAgIHJldHVybgogCiAgICAgIyBnZW5lcmF0ZSBjb25maWcuYyBhbmQgTWFrZWZpbGUKICAgICBidWlsdGlucy5zb3J0KCkKLSAgICBpbmZwID0gb3Blbihjb25maWdfY19pbikKLSAgICBvdXRmcCA9IGJrZmlsZS5vcGVuKGNvbmZpZ19jLCAndycpCi0gICAgdHJ5OgorICAgIHdpdGggb3Blbihjb25maWdfY19pbikgYXMgaW5mcCwgYmtmaWxlLm9wZW4oY29uZmlnX2MsICd3JykgYXMgb3V0ZnA6CiAgICAgICAgIG1ha2Vjb25maWcubWFrZWNvbmZpZyhpbmZwLCBvdXRmcCwgYnVpbHRpbnMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3V0ZnAuY2xvc2UoKQotICAgIGluZnAuY2xvc2UoKQogCiAgICAgY2ZsYWdzID0gWyckKE9QVCknXQogICAgIGNwcGZsYWdzID0gZGVmaW5lcyArIGluY2x1ZGVzCkBAIC00NzUsMTEgKzQ2OSw4IEBACiAgICAgICAgICAgICBmaWxlcyArIHN1cHBfc291cmNlcyArICBhZGRmaWxlcyArIGxpYnMgKyBcCiAgICAgICAgICAgICBbJyQoTU9ETElCUyknLCAnJChMSUJTKScsICckKFNZU0xJQlMpJ10KIAotICAgIG91dGZwID0gYmtmaWxlLm9wZW4obWFrZWZpbGUsICd3JykKLSAgICB0cnk6CisgICAgd2l0aCBia2ZpbGUub3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBvdXRmcDoKICAgICAgICAgbWFrZW1ha2VmaWxlLm1ha2VtYWtlZmlsZShvdXRmcCwgc29tZXZhcnMsIGZpbGVzLCBiYXNlX3RhcmdldCkKLSAgICBmaW5hbGx5OgotICAgICAgICBvdXRmcC5jbG9zZSgpCiAKICAgICAjIERvbmUhCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9tYWtlZnJlZXplLnB5IGIvVG9vbHMvZnJlZXplL21ha2VmcmVlemUucHkKaW5kZXggZWYxOGVjNy4uNjRlM2U2YiAxMDA2NDQKLS0tIGEvVG9vbHMvZnJlZXplL21ha2VmcmVlemUucHkKKysrIGIvVG9vbHMvZnJlZXplL21ha2VmcmVlemUucHkKQEAgLTM5LDM2ICszOSwzNCBAQAogICAgICAgICBtYW5nbGVkID0gIl9fIi5qb2luKG1vZC5zcGxpdCgiLiIpKQogICAgICAgICBpZiBtLl9fY29kZV9fOgogICAgICAgICAgICAgZmlsZSA9ICdNXycgKyBtYW5nbGVkICsgJy5jJwotICAgICAgICAgICAgb3V0ZnAgPSBia2ZpbGUub3BlbihiYXNlICsgZmlsZSwgJ3cnKQotICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUpCi0gICAgICAgICAgICBpZiBkZWJ1ZzoKLSAgICAgICAgICAgICAgICBwcmludCgiZnJlZXppbmciLCBtb2QsICIuLi4iKQotICAgICAgICAgICAgc3RyID0gbWFyc2hhbC5kdW1wcyhtLl9fY29kZV9fKQotICAgICAgICAgICAgc2l6ZSA9IGxlbihzdHIpCi0gICAgICAgICAgICBpZiBtLl9fcGF0aF9fOgotICAgICAgICAgICAgICAgICMgSW5kaWNhdGUgcGFja2FnZSBieSBuZWdhdGl2ZSBzaXplCi0gICAgICAgICAgICAgICAgc2l6ZSA9IC1zaXplCi0gICAgICAgICAgICBkb25lLmFwcGVuZCgobW9kLCBtYW5nbGVkLCBzaXplKSkKLSAgICAgICAgICAgIHdyaXRlY29kZShvdXRmcCwgbWFuZ2xlZCwgc3RyKQotICAgICAgICAgICAgb3V0ZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBia2ZpbGUub3BlbihiYXNlICsgZmlsZSwgJ3cnKSBhcyBvdXRmcDoKKyAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImZyZWV6aW5nIiwgbW9kLCAiLi4uIikKKyAgICAgICAgICAgICAgICBzdHIgPSBtYXJzaGFsLmR1bXBzKG0uX19jb2RlX18pCisgICAgICAgICAgICAgICAgc2l6ZSA9IGxlbihzdHIpCisgICAgICAgICAgICAgICAgaWYgbS5fX3BhdGhfXzoKKyAgICAgICAgICAgICAgICAgICAgIyBJbmRpY2F0ZSBwYWNrYWdlIGJ5IG5lZ2F0aXZlIHNpemUKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IC1zaXplCisgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoKG1vZCwgbWFuZ2xlZCwgc2l6ZSkpCisgICAgICAgICAgICAgICAgd3JpdGVjb2RlKG91dGZwLCBtYW5nbGVkLCBzdHIpCiAgICAgaWYgZGVidWc6CiAgICAgICAgIHByaW50KCJnZW5lcmF0aW5nIHRhYmxlIG9mIGZyb3plbiBtb2R1bGVzIikKLSAgICBvdXRmcCA9IGJrZmlsZS5vcGVuKGJhc2UgKyAnZnJvemVuLmMnLCAndycpCi0gICAgZm9yIG1vZCwgbWFuZ2xlZCwgc2l6ZSBpbiBkb25lOgotICAgICAgICBvdXRmcC53cml0ZSgnZXh0ZXJuIHVuc2lnbmVkIGNoYXIgTV8lc1tdO1xuJyAlIG1hbmdsZWQpCi0gICAgb3V0ZnAud3JpdGUoaGVhZGVyKQotICAgIGZvciBtb2QsIG1hbmdsZWQsIHNpemUgaW4gZG9uZToKLSAgICAgICAgb3V0ZnAud3JpdGUoJ1x0eyIlcyIsIE1fJXMsICVkfSxcbicgJSAobW9kLCBtYW5nbGVkLCBzaXplKSkKLSAgICBvdXRmcC53cml0ZSgnXG4nKQotICAgICMgVGhlIGZvbGxvd2luZyBtb2R1bGVzIGhhdmUgYSBOVUxMIGNvZGUgcG9pbnRlciwgaW5kaWNhdGluZwotICAgICMgdGhhdCB0aGUgZnJvemVuIHByb2dyYW0gc2hvdWxkIG5vdCBzZWFyY2ggZm9yIHRoZW0gb24gdGhlIGhvc3QKLSAgICAjIHN5c3RlbS4gSW1wb3J0aW5nIHRoZW0gd2lsbCAqYWx3YXlzKiByYWlzZSBhbiBJbXBvcnRFcnJvci4KLSAgICAjIFRoZSB6ZXJvIHZhbHVlIHNpemUgaXMgbmV2ZXIgdXNlZC4KLSAgICBmb3IgbW9kIGluIGZhaWxfaW1wb3J0OgotICAgICAgICBvdXRmcC53cml0ZSgnXHR7IiVzIiwgTlVMTCwgMH0sXG4nICUgKG1vZCwpKQotICAgIG91dGZwLndyaXRlKHRyYWlsZXIpCi0gICAgb3V0ZnAud3JpdGUoZW50cnlfcG9pbnQpCi0gICAgb3V0ZnAuY2xvc2UoKQorICAgIHdpdGggYmtmaWxlLm9wZW4oYmFzZSArICdmcm96ZW4uYycsICd3JykgYXMgb3V0ZnA6CisgICAgICAgIGZvciBtb2QsIG1hbmdsZWQsIHNpemUgaW4gZG9uZToKKyAgICAgICAgICAgIG91dGZwLndyaXRlKCdleHRlcm4gdW5zaWduZWQgY2hhciBNXyVzW107XG4nICUgbWFuZ2xlZCkKKyAgICAgICAgb3V0ZnAud3JpdGUoaGVhZGVyKQorICAgICAgICBmb3IgbW9kLCBtYW5nbGVkLCBzaXplIGluIGRvbmU6CisgICAgICAgICAgICBvdXRmcC53cml0ZSgnXHR7IiVzIiwgTV8lcywgJWR9LFxuJyAlIChtb2QsIG1hbmdsZWQsIHNpemUpKQorICAgICAgICBvdXRmcC53cml0ZSgnXG4nKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyBoYXZlIGEgTlVMTCBjb2RlIHBvaW50ZXIsIGluZGljYXRpbmcKKyAgICAgICAgIyB0aGF0IHRoZSBmcm96ZW4gcHJvZ3JhbSBzaG91bGQgbm90IHNlYXJjaCBmb3IgdGhlbSBvbiB0aGUgaG9zdAorICAgICAgICAjIHN5c3RlbS4gSW1wb3J0aW5nIHRoZW0gd2lsbCAqYWx3YXlzKiByYWlzZSBhbiBJbXBvcnRFcnJvci4KKyAgICAgICAgIyBUaGUgemVybyB2YWx1ZSBzaXplIGlzIG5ldmVyIHVzZWQuCisgICAgICAgIGZvciBtb2QgaW4gZmFpbF9pbXBvcnQ6CisgICAgICAgICAgICBvdXRmcC53cml0ZSgnXHR7IiVzIiwgTlVMTCwgMH0sXG4nICUgKG1vZCwpKQorICAgICAgICBvdXRmcC53cml0ZSh0cmFpbGVyKQorICAgICAgICBvdXRmcC53cml0ZShlbnRyeV9wb2ludCkKICAgICByZXR1cm4gZmlsZXMKIAogCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvbWFrZW1ha2VmaWxlLnB5IGIvVG9vbHMvZnJlZXplL21ha2VtYWtlZmlsZS5weQppbmRleCAzMmU4MDRjLi5mYTQzZmFmIDEwMDY0NAotLS0gYS9Ub29scy9mcmVlemUvbWFrZW1ha2VmaWxlLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9tYWtlbWFrZWZpbGUucHkKQEAgLTE3LDEyICsxNywxMiBAQAogICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZSkKICAgICAgICAgICAgIGRlc3QgPSBiYXNlWzotMl0gKyAnLm8nCiAgICAgICAgICAgICBvdXRmcC53cml0ZSgiJXM6ICVzXG4iICUgKGRlc3QsIGZpbGUpKQotICAgICAgICAgICAgb3V0ZnAud3JpdGUoIlx0JChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1MpIC1jICVzXG4iICUgZmlsZSkKKyAgICAgICAgICAgIG91dGZwLndyaXRlKCJcdCQoQ0MpICQoUFlfQ0ZMQUdTKSAkKFBZX0NQUEZMQUdTKSAtYyAlc1xuIiAlIGZpbGUpCiAgICAgICAgICAgICBmaWxlc1tpXSA9IGRlc3QKICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRlc3QpCiAKICAgICBvdXRmcC53cml0ZSgiXG4lczogJXNcbiIgJSAodGFyZ2V0LCAnICcuam9pbihkZXBzKSkpCi0gICAgb3V0ZnAud3JpdGUoIlx0JChMSU5LQ0MpICQoTERGTEFHUykgJChMSU5LRk9SU0hBUkVEKSAlcyAtbyAlcyAkKExETEFTVClcbiIgJQorICAgIG91dGZwLndyaXRlKCJcdCQoTElOS0NDKSAkKFBZX0xERkxBR1MpICQoTElOS0ZPUlNIQVJFRCkgJXMgLW8gJXMgJChMRExBU1QpXG4iICUKICAgICAgICAgICAgICAgICAoJyAnLmpvaW4oZmlsZXMpLCB0YXJnZXQpKQogCiAgICAgb3V0ZnAud3JpdGUoIlxuY2xlYW46XG5cdC1ybSAtZiAqLm8gJXNcbiIgJSB0YXJnZXQpCmRpZmYgLS1naXQgYS9Ub29scy9nZGIvbGlicHl0aG9uLnB5IGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQppbmRleCAzMjM0MWU3Li43NWYxY2NiIDEwMDc1NQotLS0gYS9Ub29scy9nZGIvbGlicHl0aG9uLnB5CisrKyBiL1Rvb2xzL2dkYi9saWJweXRob24ucHkKQEAgLTU2LDIwICs1NiwzMyBAQAogICAgIGxvbmcgPSBpbnQKIAogIyBMb29rIHVwIHRoZSBnZGIuVHlwZSBmb3Igc29tZSBzdGFuZGFyZCB0eXBlczoKLV90eXBlX2NoYXJfcHRyID0gZ2RiLmxvb2t1cF90eXBlKCdjaGFyJykucG9pbnRlcigpICMgY2hhcioKLV90eXBlX3Vuc2lnbmVkX2NoYXJfcHRyID0gZ2RiLmxvb2t1cF90eXBlKCd1bnNpZ25lZCBjaGFyJykucG9pbnRlcigpICMgdW5zaWduZWQgY2hhcioKLV90eXBlX3ZvaWRfcHRyID0gZ2RiLmxvb2t1cF90eXBlKCd2b2lkJykucG9pbnRlcigpICMgdm9pZCoKLV90eXBlX3Vuc2lnbmVkX3Nob3J0X3B0ciA9IGdkYi5sb29rdXBfdHlwZSgndW5zaWduZWQgc2hvcnQnKS5wb2ludGVyKCkKLV90eXBlX3Vuc2lnbmVkX2ludF9wdHIgPSBnZGIubG9va3VwX3R5cGUoJ3Vuc2lnbmVkIGludCcpLnBvaW50ZXIoKQorIyBUaG9zZSBuZWVkIHRvIGJlIHJlZnJlc2hlZCBhcyB0eXBlcyAocG9pbnRlciBzaXplcykgbWF5IGNoYW5nZSB3aGVuCisjIGdkYiBsb2FkcyBkaWZmZXJlbnQgZXhlY3V0YWJsZXMKKworZGVmIF90eXBlX2NoYXJfcHRyKCk6CisgICAgcmV0dXJuIGdkYi5sb29rdXBfdHlwZSgnY2hhcicpLnBvaW50ZXIoKSAgIyBjaGFyKgorCisKK2RlZiBfdHlwZV91bnNpZ25lZF9jaGFyX3B0cigpOgorICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUoJ3Vuc2lnbmVkIGNoYXInKS5wb2ludGVyKCkgICMgdW5zaWduZWQgY2hhcioKKworCitkZWYgX3R5cGVfdW5zaWduZWRfc2hvcnRfcHRyKCk6CisgICAgcmV0dXJuIGdkYi5sb29rdXBfdHlwZSgndW5zaWduZWQgc2hvcnQnKS5wb2ludGVyKCkKKworCitkZWYgX3R5cGVfdW5zaWduZWRfaW50X3B0cigpOgorICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUoJ3Vuc2lnbmVkIGludCcpLnBvaW50ZXIoKQorCisKK2RlZiBfc2l6ZW9mX3ZvaWRfcCgpOgorICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUoJ3ZvaWQnKS5wb2ludGVyKCkuc2l6ZW9mCisKIAogIyB2YWx1ZSBjb21wdXRlZCBsYXRlciwgc2VlIFB5VW5pY29kZU9iamVjdFB0ci5wcm94eSgpCiBfaXNfcGVwMzkzID0gTm9uZQogCi1TSVpFT0ZfVk9JRF9QID0gX3R5cGVfdm9pZF9wdHIuc2l6ZW9mCi0KLQogUHlfVFBGTEFHU19IRUFQVFlQRSA9ICgxIDw8IDkpCi0KIFB5X1RQRkxBR1NfTE9OR19TVUJDTEFTUyAgICAgPSAoMSA8PCAyNCkKIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgPSAoMSA8PCAyNSkKIFB5X1RQRkxBR1NfVFVQTEVfU1VCQ0xBU1MgICAgPSAoMSA8PCAyNikKQEAgLTQ2MCw4ICs0NzMsOCBAQAogCiAgICAgcmV0dXJuICggKCB0eXBlb2JqLmZpZWxkKCd0cF9iYXNpY3NpemUnKSArCiAgICAgICAgICAgICAgICBuaXRlbXMgKiB0eXBlb2JqLmZpZWxkKCd0cF9pdGVtc2l6ZScpICsKLSAgICAgICAgICAgICAgIChTSVpFT0ZfVk9JRF9QIC0gMSkKLSAgICAgICAgICAgICApICYgfihTSVpFT0ZfVk9JRF9QIC0gMSkKKyAgICAgICAgICAgICAgIChfc2l6ZW9mX3ZvaWRfcCgpIC0gMSkKKyAgICAgICAgICAgICApICYgfihfc2l6ZW9mX3ZvaWRfcCgpIC0gMSkKICAgICAgICAgICAgKS5jYXN0KF9QeU9iamVjdF9WQVJfU0laRS5fdHlwZV9zaXplX3QpCiBfUHlPYmplY3RfVkFSX1NJWkUuX3R5cGVfc2l6ZV90ID0gTm9uZQogCkBAIC00ODUsOSArNDk4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IF9QeU9iamVjdF9WQVJfU0laRSh0eXBlb2JqLCB0c2l6ZSkKICAgICAgICAgICAgICAgICAgICAgZGljdG9mZnNldCArPSBzaXplCiAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBkaWN0b2Zmc2V0ID4gMAotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZGljdG9mZnNldCAlIFNJWkVPRl9WT0lEX1AgPT0gMAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZGljdG9mZnNldCAlIF9zaXplb2Zfdm9pZF9wKCkgPT0gMAogCi0gICAgICAgICAgICAgICAgZGljdHB0ciA9IHNlbGYuX2dkYnZhbC5jYXN0KF90eXBlX2NoYXJfcHRyKSArIGRpY3RvZmZzZXQKKyAgICAgICAgICAgICAgICBkaWN0cHRyID0gc2VsZi5fZ2RidmFsLmNhc3QoX3R5cGVfY2hhcl9wdHIoKSkgKyBkaWN0b2Zmc2V0CiAgICAgICAgICAgICAgICAgUHlPYmplY3RQdHJQdHIgPSBQeU9iamVjdFB0ci5nZXRfZ2RiX3R5cGUoKS5wb2ludGVyKCkKICAgICAgICAgICAgICAgICBkaWN0cHRyID0gZGljdHB0ci5jYXN0KFB5T2JqZWN0UHRyUHRyKQogICAgICAgICAgICAgICAgIHJldHVybiBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihkaWN0cHRyLmRlcmVmZXJlbmNlKCkpCkBAIC0xMDA0LDcgKzEwMTcsNyBAQAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICBmaWVsZF9vYl9zaXplID0gc2VsZi5maWVsZCgnb2Jfc2l6ZScpCiAgICAgICAgIGZpZWxkX29iX3N2YWwgPSBzZWxmLmZpZWxkKCdvYl9zdmFsJykKLSAgICAgICAgY2hhcl9wdHIgPSBmaWVsZF9vYl9zdmFsLmFkZHJlc3MuY2FzdChfdHlwZV91bnNpZ25lZF9jaGFyX3B0cikKKyAgICAgICAgY2hhcl9wdHIgPSBmaWVsZF9vYl9zdmFsLmFkZHJlc3MuY2FzdChfdHlwZV91bnNpZ25lZF9jaGFyX3B0cigpKQogICAgICAgICByZXR1cm4gJycuam9pbihbY2hyKGNoYXJfcHRyW2ldKSBmb3IgaSBpbiBzYWZlX3JhbmdlKGZpZWxkX29iX3NpemUpXSkKIAogICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKQEAgLTExMzUsMTEgKzExNDgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgZmllbGRfc3RyID0gc2VsZi5maWVsZCgnZGF0YScpWydhbnknXQogICAgICAgICAgICAgICAgIHJlcHJfa2luZCA9IGludChzdGF0ZVsna2luZCddKQogICAgICAgICAgICAgICAgIGlmIHJlcHJfa2luZCA9PSAxOgotICAgICAgICAgICAgICAgICAgICBmaWVsZF9zdHIgPSBmaWVsZF9zdHIuY2FzdChfdHlwZV91bnNpZ25lZF9jaGFyX3B0cikKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfc3RyID0gZmllbGRfc3RyLmNhc3QoX3R5cGVfdW5zaWduZWRfY2hhcl9wdHIoKSkKICAgICAgICAgICAgICAgICBlbGlmIHJlcHJfa2luZCA9PSAyOgotICAgICAgICAgICAgICAgICAgICBmaWVsZF9zdHIgPSBmaWVsZF9zdHIuY2FzdChfdHlwZV91bnNpZ25lZF9zaG9ydF9wdHIpCisgICAgICAgICAgICAgICAgICAgIGZpZWxkX3N0ciA9IGZpZWxkX3N0ci5jYXN0KF90eXBlX3Vuc2lnbmVkX3Nob3J0X3B0cigpKQogICAgICAgICAgICAgICAgIGVsaWYgcmVwcl9raW5kID09IDQ6Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkX3N0ciA9IGZpZWxkX3N0ci5jYXN0KF90eXBlX3Vuc2lnbmVkX2ludF9wdHIpCisgICAgICAgICAgICAgICAgICAgIGZpZWxkX3N0ciA9IGZpZWxkX3N0ci5jYXN0KF90eXBlX3Vuc2lnbmVkX2ludF9wdHIoKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgUHl0aG9uIDMuMiBhbmQgZWFybGllcgogICAgICAgICAgICAgZmllbGRfbGVuZ3RoID0gbG9uZyhzZWxmLmZpZWxkKCdsZW5ndGgnKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5IGIvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKaW5kZXggMTA4ODdjZS4uYzdlY2FjZSAxMDA3NTUKLS0tIGEvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKKysrIGIvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKQEAgLTgsOSArOCwxMiBAQAogIiIiCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgc3lzCitfbG9jYWxlID0gbG9jYWxlCiAKLSMgTG9jYXRpb24gb2YgdGhlIGFsaWFzIGZpbGUKKyMgTG9jYXRpb24gb2YgdGhlIFgxMSBhbGlhcyBmaWxlLgogTE9DQUxFX0FMSUFTID0gJy91c3Ivc2hhcmUvWDExL2xvY2FsZS9sb2NhbGUuYWxpYXMnCisjIExvY2F0aW9uIG9mIHRoZSBnbGliYyBTVVBQT1JURUQgbG9jYWxlcyBmaWxlLgorU1VQUE9SVEVEID0gJy91c3Ivc2hhcmUvaTE4bi9TVVBQT1JURUQnCiAKIGRlZiBwYXJzZShmaWxlbmFtZSk6CiAKQEAgLTQ0LDEwICs0NywzOSBAQAogICAgICAgICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZy5yZXBsYWNlKCctJywgJycpCiAgICAgICAgICAgICBlbmNvZGluZyA9IGVuY29kaW5nLnJlcGxhY2UoJ18nLCAnJykKICAgICAgICAgICAgIGxvY2FsZSA9IGxhbmcgKyAnLicgKyBlbmNvZGluZwotICAgICAgICAgICAgaWYgZW5jb2RpbmcubG93ZXIoKSA9PSAndXRmOCc6Ci0gICAgICAgICAgICAgICAgIyBJZ25vcmUgVVRGLTggbWFwcGluZ3MgLSB0aGlzIGVuY29kaW5nIHNob3VsZCBiZQotICAgICAgICAgICAgICAgICMgYXZhaWxhYmxlIGZvciBhbGwgbG9jYWxlcwotICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGRhdGFbbG9jYWxlXSA9IGFsaWFzCisgICAgcmV0dXJuIGRhdGEKKworZGVmIHBhcnNlX2dsaWJjX3N1cHBvcnRlZChmaWxlbmFtZSk6CisKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsIGVuY29kaW5nPSdsYXRpbjEnKSBhcyBmOgorICAgICAgICBsaW5lcyA9IGxpc3QoZikKKyAgICBkYXRhID0ge30KKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGxpbmVbOjFdID09ICcjJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoJy8nLCAnICcpLnN0cmlwKCkKKyAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCdcXCcpLnJzdHJpcCgpCisgICAgICAgIHdvcmRzID0gbGluZS5zcGxpdCgpCisgICAgICAgIGlmIGxlbih3b3JkcykgIT0gMjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGFsaWFzLCBhbGlhc19lbmNvZGluZyA9IHdvcmRzCisgICAgICAgICMgTG93ZXItY2FzZSBsb2NhbGUKKyAgICAgICAgbG9jYWxlID0gYWxpYXMubG93ZXIoKQorICAgICAgICAjIE5vcm1hbGl6ZSBlbmNvZGluZywgaWYgZ2l2ZW4KKyAgICAgICAgaWYgJy4nIGluIGxvY2FsZToKKyAgICAgICAgICAgIGxhbmcsIGVuY29kaW5nID0gbG9jYWxlLnNwbGl0KCcuJylbOjJdCisgICAgICAgICAgICBlbmNvZGluZyA9IGVuY29kaW5nLnJlcGxhY2UoJy0nLCAnJykKKyAgICAgICAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcucmVwbGFjZSgnXycsICcnKQorICAgICAgICAgICAgbG9jYWxlID0gbGFuZyArICcuJyArIGVuY29kaW5nCisgICAgICAgICMgQWRkIGFuIGVuY29kaW5nIHRvIGFsaWFzCisgICAgICAgIGFsaWFzLCBfLCBtb2RpZmllciA9IGFsaWFzLnBhcnRpdGlvbignQCcpCisgICAgICAgIGFsaWFzID0gX2xvY2FsZS5fcmVwbGFjZV9lbmNvZGluZyhhbGlhcywgYWxpYXNfZW5jb2RpbmcpCisgICAgICAgIGlmIG1vZGlmaWVyIGFuZCBub3QgKG1vZGlmaWVyID09ICdldXJvJyBhbmQgYWxpYXNfZW5jb2RpbmcgPT0gJ0lTTy04ODU5LTE1Jyk6CisgICAgICAgICAgICBhbGlhcyArPSAnQCcgKyBtb2RpZmllcgogICAgICAgICBkYXRhW2xvY2FsZV0gPSBhbGlhcwogICAgIHJldHVybiBkYXRhCiAKQEAgLTkyLDkgKzEyNCwyNSBAQAogICAgIHJldHVybiBlcnJvcnMKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sb2NhbGUtYWxpYXMnLCBkZWZhdWx0PUxPQ0FMRV9BTElBUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2xvY2F0aW9uIG9mIHRoZSBYMTEgYWxpYXMgZmlsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoZGVmYXVsdDogJWEpJyAlIExPQ0FMRV9BTElBUykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWdsaWJjLXN1cHBvcnRlZCcsIGRlZmF1bHQ9U1VQUE9SVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbG9jYXRpb24gb2YgdGhlIGdsaWJjIFNVUFBPUlRFRCBsb2NhbGVzIGZpbGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGRlZmF1bHQ6ICVhKScgJSBTVVBQT1JURUQpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKwogICAgIGRhdGEgPSBsb2NhbGUubG9jYWxlX2FsaWFzLmNvcHkoKQotICAgIGRhdGEudXBkYXRlKHBhcnNlKExPQ0FMRV9BTElBUykpCi0gICAgZGF0YSA9IG9wdGltaXplKGRhdGEpCisgICAgZGF0YS51cGRhdGUocGFyc2VfZ2xpYmNfc3VwcG9ydGVkKGFyZ3MuZ2xpYmNfc3VwcG9ydGVkKSkKKyAgICBkYXRhLnVwZGF0ZShwYXJzZShhcmdzLmxvY2FsZV9hbGlhcykpCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgIyBSZXBlYXQgb3B0aW1pemF0aW9uIHdoaWxlIHRoZSBzaXplIGlzIGRlY3JlYXNlZC4KKyAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICBkYXRhID0gb3B0aW1pemUoZGF0YSkKKyAgICAgICAgaWYgbGVuKGRhdGEpID09IG46CisgICAgICAgICAgICBicmVhawogICAgIHByaW50X2RpZmZlcmVuY2VzKGRhdGEsIGxvY2FsZS5sb2NhbGVfYWxpYXMpCiAgICAgcHJpbnQoKQogICAgIHByaW50KCdsb2NhbGVfYWxpYXMgPSB7JykKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vcHlnZXR0ZXh0LnB5IGIvVG9vbHMvaTE4bi9weWdldHRleHQucHkKaW5kZXggOWZmZWIxNy4uM2M2YzE0YyAxMDA3NTUKLS0tIGEvVG9vbHMvaTE4bi9weWdldHRleHQucHkKKysrIGIvVG9vbHMvaTE4bi9weWdldHRleHQucHkKQEAgLTQ0MSw5ICs0NDEsNyBAQAogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZwKToKICAgICAgICAgb3B0aW9ucyA9IHNlbGYuX19vcHRpb25zCi0gICAgICAgIHRpbWVzdGFtcCA9IHRpbWUuc3RyZnRpbWUoJyVZLSVtLSVkICVIOiVNKyVaJykKLSAgICAgICAgIyBUaGUgdGltZSBzdGFtcCBpbiB0aGUgaGVhZGVyIGRvZXNuJ3QgaGF2ZSB0aGUgc2FtZSBmb3JtYXQgYXMgdGhhdAotICAgICAgICAjIGdlbmVyYXRlZCBieSB4Z2V0dGV4dC4uLgorICAgICAgICB0aW1lc3RhbXAgPSB0aW1lLnN0cmZ0aW1lKCclWS0lbS0lZCAlSDolTSV6JykKICAgICAgICAgZW5jb2RpbmcgPSBmcC5lbmNvZGluZyBpZiBmcC5lbmNvZGluZyBlbHNlICdVVEYtOCcKICAgICAgICAgcHJpbnQocG90X2hlYWRlciAlIHsndGltZSc6IHRpbWVzdGFtcCwgJ3ZlcnNpb24nOiBfX3ZlcnNpb25fXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hhcnNldCc6IGVuY29kaW5nLApkaWZmIC0tZ2l0IGEvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkgYi9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQppbmRleCA2MzVkZDU2Li5lMmVmNzU4IDEwMDY0NAotLS0gYS9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQorKysgYi9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQpAQCAtNSw3ICs1LDYgQEAKIAogIiIiCiBmcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIgaW1wb3J0IHV0aWwKLWZyb20gdGVzdC50ZXN0X2ltcG9ydGxpYi5zb3VyY2UgaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIGltcG9ydCBkZWNpbWFsCiBpbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliCkBAIC02NSwxMSArNjQsMTEgQEAKICAgICB0cnk6CiAgICAgICAgIG5hbWUgPSAnX19pbXBvcnRsaWJfdGVzdF9iZW5jaG1hcmtfXycKICAgICAgICAgIyBDbGVhcnMgb3V0IHN5cy5tb2R1bGVzIGFuZCBwdXRzIGFuIGVudHJ5IGF0IHRoZSBmcm9udCBvZiBzeXMucGF0aC4KLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhuYW1lKSBhcyBtYXBwaW5nOgorICAgICAgICB3aXRoIHV0aWwuY3JlYXRlX21vZHVsZXMobmFtZSkgYXMgbWFwcGluZzoKICAgICAgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pKQogICAgICAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyKQogICAgICAgICAgICAgbG9hZGVyID0gKGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykKICAgICAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKGxvYWRlcikpCiAgICAgICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCkBAIC0xMDIsMTAgKzEwMSwxMCBAQAogICAgICIiIlNvdXJjZSB3cml0aW5nIGJ5dGVjb2RlOiBzbWFsbCIiIgogICAgIGFzc2VydCBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUKICAgICBuYW1lID0gJ19faW1wb3J0bGliX3Rlc3RfYmVuY2htYXJrX18nCi0gICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhuYW1lKSBhcyBtYXBwaW5nOgorICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcyhuYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIpCiAgICAgICAgIGxvYWRlciA9IChpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKQogICAgICAgICBzeXMucGF0aF9ob29rcy5hcHBlbmQoaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vayhsb2FkZXIpKQogICAgICAgICBkZWYgY2xlYW51cCgpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXMucG9wKG5hbWUpCkBAIC0xMzYsMTAgKzEzNSwxMCBAQAogZGVmIHNvdXJjZV91c2luZ19ieXRlY29kZShzZWNvbmRzLCByZXBlYXQpOgogICAgICIiIlNvdXJjZSB3LyBieXRlY29kZTogc21hbGwiIiIKICAgICBuYW1lID0gJ19faW1wb3J0bGliX3Rlc3RfYmVuY2htYXJrX18nCi0gICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhuYW1lKSBhcyBtYXBwaW5nOgorICAgIHdpdGggdXRpbC5jcmVhdGVfbW9kdWxlcyhuYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIpCiAgICAgICAgIGxvYWRlciA9IChpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMsIFRydWUpCisgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykKICAgICAgICAgc3lzLnBhdGhfaG9va3MuYXBwZW5kKGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2sobG9hZGVyKSkKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1tuYW1lXSkpCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvUkVBRE1FLnR4dCBiL1Rvb2xzL21zaS9SRUFETUUudHh0CmluZGV4IGRjNGFlOTAuLjcwMjNiNjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL21zaS9SRUFETUUudHh0CisrKyBiL1Rvb2xzL21zaS9SRUFETUUudHh0CkBAIC0xLDI1ICsxLDUzNSBAQAotUGFja2FnaW5nIFB5dGhvbiBhcyBhIE1pY3Jvc29mdCBJbnN0YWxsZXIgUGFja2FnZSAoTVNJKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUXVpY2sgQnVpbGQgSW5mbworPT09PT09PT09PT09PT09PQogCi1Vc2luZyB0aGlzIGxpYnJhcnksIFB5dGhvbiBjYW4gYmUgcGFja2FnZWQgYXMgYSBNUy1XaW5kb3dzCi1NU0kgZmlsZS4gVG8gZ2VuZXJhdGUgYW4gaW5zdGFsbGVyIHBhY2thZ2UsIHlvdSBuZWVkCi1hIGJ1aWxkIHRyZWUuIEJ5IGRlZmF1bHQsIHRoZSBidWlsZCB0cmVlIHJvb3QgZGlyZWN0b3J5Ci1pcyBhc3N1bWVkIHRvIGJlIGluICIuLi8uLiIuIFRoaXMgbG9jYXRpb24gY2FuIGJlIGNoYW5nZWQKLWJ5IGFkZGluZyBhIGZpbGUgY29uZmlnLnB5OyBzZWUgdGhlIGJlZ2lubmluZyBvZiBtc2kucHkKLWZvciBhZGRpdGlvbmFsIGN1c3RvbWl6YXRpb24gb3B0aW9ucy4KK0ZvciB0ZXN0aW5nLCB0aGUgaW5zdGFsbGVyIHNob3VsZCBiZSBidWlsdCB3aXRoIHRoZSBUb29scy9tc2kvYnVpbGQuYmF0CitzY3JpcHQ6CiAKLVRoZSBwYWNrYWdpbmcgcHJvY2VzcyBhc3N1bWVzIHRoYXQgYmluYXJpZXMgaGF2ZSBiZWVuIAotZ2VuZXJhdGVkIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zIGluIFBDQnVpbGQvUkVBRE1FLnR4dCwKLWFuZCB0aGF0IHlvdSBoYXZlIGVpdGhlciBWaXN1YWwgU3R1ZGlvIG9yIHRoZSBQbGF0Zm9ybSBTREsKLWluc3RhbGxlZC4gSW4gYWRkaXRpb24sIHlvdSBuZWVkIHRoZSBQeXRob24gQ09NIGV4dGVuc2lvbnMsCi1laXRoZXIgZnJvbSBQeXRob25XaW4sIG9yIGZyb20gQWN0aXZlUHl0aG9uLgorICAgIGJ1aWxkLmJhdCBbLXg4Nl0gWy14NjRdIFstLWRvY10KIAotVG8gaW52b2tlIHRoZSBzY3JpcHQsIG9wZW4gYSBjbWQuZXhlIHdpbmRvdyB3aGljaCBoYXMgCi1jYWJhcmMuZXhlIGluIGl0cyBQQVRIIChlLmcuICJWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMwotQ29tbWFuZCBQcm9tcHQiKS4gVGhlbiBpbnZva2UKK0ZvciBhbiBvZmZpY2lhbCByZWxlYXNlLCB0aGUgaW5zdGFsbGVyIHNob3VsZCBiZSBidWlsdCB3aXRoIHRoZQorVG9vbHMvbXNpL2J1aWxkcmVsZWFzZS5iYXQgc2NyaXB0IGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAKLTxwYXRoLXRvLXB5dGhvbi5leGU+IG1zaS5weQorICAgIHNldCBQWVRIT049PHBhdGggdG8gUHl0aG9uIDIuNyBvciAzLjQ+CisgICAgc2V0IFNQSElOWEJVSUxEPTxwYXRoIHRvIHNwaGlueC1idWlsZC5leGU+CisgICAgc2V0IFBBVEg9PHBhdGggdG8gTWVyY3VyaWFsIChoZy5leGUpPjsKKyAgICAgICAgICAgICA8cGF0aCB0byBIVE1MIEhlbHAgQ29tcGlsZXIgKGhoYy5leGUpPjslUEFUSCUKIAotSWYgZXZlcnl0aGluZyBzdWNjZWVkcywgcHl0aG9uWC5ZLloubXNpIGlzIGdlbmVyYXRlZAotaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgIGJ1aWxkcmVsZWFzZS5iYXQgWy14ODZdIFsteDY0XSBbLURdIFstQl0KKyAgICAgICAgWy1vIDxvdXRwdXQgZGlyZWN0b3J5Pl0gWy1jIDxjZXJ0aWZpY2F0ZSBuYW1lPl0KKworU2VlIHRoZSBCdWlsZGluZyB0aGUgSW5zdGFsbGVyIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK092ZXJ2aWV3Cis9PT09PT09PQorCitQeXRob24gaXMgZGlzdHJpYnV0ZWQgb24gV2luZG93cyBhcyBhbiBpbnN0YWxsZXIgdGhhdCB3aWxsIGNvbmZpZ3VyZSB0aGUKK3VzZXIncyBzeXN0ZW0uIFRoaXMgYWxsb3dzIHVzZXJzIHRvIGhhdmUgYSBmdW5jdGlvbmluZyBjb3B5IG9mIFB5dGhvbgord2l0aG91dCBoYXZpbmcgdG8gYnVpbGQgaXQgdGhlbXNlbHZlcy4KKworVGhlIG1haW4gdGFza3Mgb2YgdGhlIGluc3RhbGxlciBhcmU6CisKKyogY29weSByZXF1aXJlZCBmaWxlcyBpbnRvIHRoZSBleHBlY3RlZCBsYXlvdXQKKyogY29uZmlndXJlIHN5c3RlbSBzZXR0aW5ncyBzbyB0aGUgaW5zdGFsbGF0aW9uIGNhbiBiZSBsb2NhdGVkIGJ5CisgIG90aGVyIHByb2dyYW1zCisqIGFkZCBlbnRyeSBwb2ludHMgZm9yIG1vZGlmeWluZywgcmVwYWlyaW5nIGFuZCB1bmluc3RhbGxpbmcgUHl0aG9uCisqIG1ha2UgaXQgZWFzeSB0byBsYXVuY2ggUHl0aG9uLCBpdHMgZG9jdW1lbnRhdGlvbiwgYW5kIElETEUKKworRWFjaCBvZiB0aGVzZSBpcyBkaXNjdXNzZWQgaW4gYSBsYXRlciBzZWN0aW9uIG9mIHRoaXMgZG9jdW1lbnQuCisKK1N0cnVjdHVyZSBvZiB0aGUgSW5zdGFsbGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaW5zdGFsbGVyIGlzIHN0cnVjdHVyZWQgYXMgYSAnbGF5b3V0Jywgd2hpY2ggY29uc2lzdHMgb2YgYSBudW1iZXIgb2YKK0NBQiBhbmQgTVNJIGZpbGVzIGFuZCBhIHNpbmdsZSBFWEUuCisKK1RoZSBFWEUgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgaW50byB0aGUgaW5zdGFsbGVyLiBJdCBjb250YWlucyB0aGUgVUkKK2FuZCBjb21tYW5kLWxpbmUgbG9naWMsIGFzIHdlbGwgYXMgdGhlIGFiaWxpdHkgdG8gbG9jYXRlIGFuZCBvcHRpb25hbGx5Citkb3dubG9hZCBvdGhlciBwYXJ0cyBvZiB0aGUgbGF5b3V0LgorCitFYWNoIE1TSSBjb250YWlucyB0aGUgbG9naWMgcmVxdWlyZWQgdG8gaW5zdGFsbCBhIGNvbXBvbmVudCBvciBmZWF0dXJlCitvZiBQeXRob24uIFRoZXNlIE1TSXMgc2hvdWxkIG5vdCBiZSBsYXVuY2hlZCBkaXJlY3RseSBieSB1c2Vycy4gTVNJcyBjYW4KK2JlIGVtYmVkZGVkIGludG8gdGhlIEVYRSBvciBhdXRvbWF0aWNhbGx5IGRvd25sb2FkZWQgYXMgbmVlZGVkLgorCitFYWNoIENBQiBjb250YWlucyB0aGUgZmlsZXMgbWFraW5nIHVwIGEgUHl0aG9uIGluc3RhbGxhdGlvbi4gQ0FCcyBhcmUKK2VtYmVkZGVkIGludG8gdGhlaXIgYXNzb2NpYXRlZCBNU0kgYW5kIGFyZSBuZXZlciBzZWVuIGJ5IHVzZXJzLgorCitNU0lzIGFyZSBvbmx5IHJlcXVpcmVkIHdoZW4gdGhlIHJlbGF0ZWQgZmVhdHVyZSBvciBjb21wb25lbnQgaXMgYmVpbmcKK2luc3RhbGxlZC4gV2hlbiBjb21wb25lbnRzIGFyZSBub3Qgc2VsZWN0ZWQgZm9yIGluc3RhbGxhdGlvbiwgdGhlCithc3NvY2lhdGVkIE1TSSBpcyBub3QgZG93bmxvYWRlZC4gVGhpcyBhbGxvd3MgdGhlIGluc3RhbGxlciB0byBvZmZlcgorb3B0aW9ucyB0byBpbnN0YWxsIGRlYnVnZ2luZyBzeW1ib2xzIGFuZCBiaW5hcmllcyB3aXRob3V0IGluY3JlYXNpbmcKK3RoZSBpbml0aWFsIGRvd25sb2FkIHNpemUgYnkgc2VwYXJhdGluZyB0aGVtIGludG8gdGhlaXIgb3duIE1TSXMuCisKK0J1aWxkaW5nIHRoZSBJbnN0YWxsZXIKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmVmb3JlIGJ1aWxkaW5nIHRoZSBpbnN0YWxsZXIsIGRvd25sb2FkIGV4dHJhIGJ1aWxkIGRlcGVuZGVuY2llcyB1c2luZworVG9vbHNcbXNpXGdldF9leHRlcm5hbHMuYmF0LiAoTm90ZSB0aGF0IHRoaXMgaXMgaW4gYWRkaXRpb24gdG8gdGhlCitzaW1pbGFybHkgbmFtZWQgZmlsZSBpbiBQQ0J1aWxkLikKKworRm9yIHRlc3RpbmcsIHRoZSBpbnN0YWxsZXIgc2hvdWxkIGJlIGJ1aWx0IHdpdGggdGhlIFRvb2xzL21zaS9idWlsZC5iYXQKK3NjcmlwdDoKKworICAgIGJ1aWxkLmJhdCBbLXg4Nl0gWy14NjRdIFstLWRvY10gWy0tdGVzdC1tYXJrZXJdIFstLXBhY2tdCisKK1RoaXMgc2NyaXB0IHdpbGwgYnVpbGQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIG9mIFB5dGhvbiBhbmQKK2dlbmVyYXRlIGFuIGluc3RhbGxlciBsYXlvdXQgaW4gUENCdWlsZC8od2luMzJ8YW1kNjQpL2VuLXVzLgorCitTcGVjaWZ5IC14ODYgYW5kL29yIC14NjQgdG8gYnVpbGQgZm9yIGVhY2ggcGxhdGZvcm0uIElmIG5laXRoZXIgaXMKK3NwZWNpZmllZCwgYm90aCBwbGF0Zm9ybXMgd2lsbCBiZSBidWlsdC4gQ3VycmVudGx5LCBib3RoIHRoZSBkZWJ1ZyBhbmQKK3JlbGVhc2UgdmVyc2lvbnMgb2YgUHl0aG9uIGFyZSByZXF1aXJlZCBmb3IgdGhlIGluc3RhbGxlci4KKworU3BlY2lmeSAtLWRvYyB0byBidWlsZCB0aGUgZG9jdW1lbnRhdGlvbiAoLmNobSkgZmlsZS4gSWYgdGhlIGZpbGUgaXMgbm90CithdmFpbGFibGUsIGl0IHdpbGwgc2ltcGx5IGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGluc3RhbGxlci4gRW5zdXJlCislUFlUSE9OJSBhbmQgJVNQSElOWEJVSUxEJSBhcmUgc2V0IHdoZW4gcGFzc2luZyB0aGlzIG9wdGlvbi4gWW91IG1heQorYWxzbyBzZXQgJUhUTUxIRUxQJSB0byB0aGUgSHRtbCBIZWxwIENvbXBpbGVyIChoaGMuZXhlKSwgb3IgcHV0IEhIQyBvbgoreW91ciBQQVRIIG9yIGluIGV4dGVybmFscy8uCisKK1NwZWNpZnkgLS10ZXN0LW1hcmtlciB0byBidWlsZCBhbiBpbnN0YWxsZXIgdGhhdCB3b3JrcyBzaWRlLWJ5LXNpZGUgd2l0aAorYW4gb2ZmaWNpYWwgUHl0aG9uIHJlbGVhc2UuIEFsbCByZWdpc3RyeSBrZXlzIGFuZCBpbnN0YWxsIGxvY2F0aW9ucyB3aWxsCitpbmNsdWRlIGFuIGV4dHJhIG1hcmtlciB0byBhdm9pZCBvdmVyd3JpdGluZyBmaWxlcy4gVGhpcyBtYXJrZXIgaXMKK2N1cnJlbnRseSBhbiAneCcgcHJlZml4LCBidXQgbWF5IGNoYW5nZSBhdCBhbnkgdGltZS4KKworU3BlY2lmeSAtLXBhY2sgdG8gYnVpbGQgYW4gaW5zdGFsbGVyIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBhbGwgTVNJcyB0bworYmUgYXZhaWxhYmxlIGFsb25nc2lkZS4gVGhpcyB0YWtlcyBsb25nZXIsIGJ1dCBpcyBlYXNpZXIgdG8gc2hhcmUuCisKKworRm9yIGFuIG9mZmljaWFsIHJlbGVhc2UsIHRoZSBpbnN0YWxsZXIgc2hvdWxkIGJlIGJ1aWx0IHdpdGggdGhlCitUb29scy9tc2kvYnVpbGRyZWxlYXNlLmJhdCBzY3JpcHQ6CisKKyAgICBzZXQgUFlUSE9OPTxwYXRoIHRvIFB5dGhvbiAyLjcgb3IgMy40PgorICAgIHNldCBTUEhJTlhCVUlMRD08cGF0aCB0byBzcGhpbngtYnVpbGQuZXhlPgorICAgIHNldCBQQVRIPTxwYXRoIHRvIE1lcmN1cmlhbCAoaGcuZXhlKT47CisgICAgICAgICAgICAgPHBhdGggdG8gSFRNTCBIZWxwIENvbXBpbGVyIChoaGMuZXhlKT47JVBBVEglCisKKyAgICBidWlsZHJlbGVhc2UuYmF0IFsteDg2XSBbLXg2NF0gWy1EXSBbLUJdCisgICAgICAgIFstbyA8b3V0cHV0IGRpcmVjdG9yeT5dIFstYyA8Y2VydGlmaWNhdGUgbmFtZT5dCisKK1NwZWNpZnkgLXg4NiBhbmQvb3IgLXg2NCB0byBidWlsZCBmb3IgZWFjaCBwbGF0Zm9ybS4gSWYgbmVpdGhlciBpcworc3BlY2lmaWVkLCBib3RoIHBsYXRmb3JtcyB3aWxsIGJlIGJ1aWx0LiBDdXJyZW50bHksIGJvdGggdGhlIGRlYnVnIGFuZAorcmVsZWFzZSB2ZXJzaW9ucyBvZiBQeXRob24gYXJlIHJlcXVpcmVkIGZvciB0aGUgaW5zdGFsbGVyLgorCitTcGVjaWZ5IC1EIHRvIHNraXAgcmVidWlsZGluZyB0aGUgZG9jdW1lbnRhdGlvbi4gVGhlIGRvY3VtZW50YXRpb24gaXMKK3JlcXVpcmVkIGZvciBhIHJlbGVhc2UgYW5kIHRoZSBidWlsZCB3aWxsIGZhaWwgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KKworU3BlY2lmeSAtQiB0byBza2lwIHJlYnVpbGRpbmcgUHl0aG9uLiBUaGlzIGlzIHVzZWZ1bCB0byBvbmx5IHJlYnVpbGQgdGhlCitpbnN0YWxsZXIgbGF5b3V0IGFmdGVyIGEgcHJldmlvdXMgY2FsbCB0byBidWlsZHJlbGVhc2UuYmF0LgorCitTcGVjaWZ5IC1vIHRvIHNldCBhbiBvdXRwdXQgZGlyZWN0b3J5LiBUaGUgaW5zdGFsbGVyIGxheW91dHMgd2lsbCBiZQorY29waWVkIHRvIHBsYXRmb3JtLXNwZWNpZmljIHN1YmRpcmVjdG9yaWVzIG9mIHRoaXMgcGF0aC4KKworU3BlY2lmeSAtYyB0byBjaG9vc2UgYSBjb2RlLXNpZ25pbmcgY2VydGlmaWNhdGUgdG8gYmUgdXNlZCBmb3IgYWxsIHRoZQorc2lnbmFibGUgYmluYXJpZXMgaW4gUHl0aG9uIGFzIHdlbGwgYXMgZWFjaCBmaWxlIG1ha2luZyB1cCB0aGUKK2luc3RhbGxlci4gT2ZmaWNpYWwgcmVsZWFzZXMgb2YgUHl0aG9uIG11c3QgYmUgc2lnbmVkLgorCitFbnN1cmUgJVBZVEhPTiUgYW5kICVTUEhJTlhCVUlMRCUgYXJlIHNldCB3aGVuIHBhc3NpbmcgdGhpcyBvcHRpb24uIFlvdQorbWF5IGFsc28gc2V0ICVIVE1MSEVMUCUgdG8gdGhlIEh0bWwgSGVscCBDb21waWxlciAoaGhjLmV4ZSksIG9yIHB1dCBISEMKK29uIHlvdXIgUEFUSCBvciBpbiBleHRlcm5hbHMvLiBZb3Ugd2lsbCBhbHNvIG5lZWQgTWVyY3VyaWFsIChoZy5leGUpIG9uCit5b3VyIFBBVEguCisKK0lmIFdpWCBpcyBub3QgZm91bmQgb24geW91ciBzeXN0ZW0sIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBkb3dubG9hZGVkCithbmQgZXh0cmFjdGVkIHRvIHRoZSBleHRlcm5hbHMvIGRpcmVjdG9yeS4KKworVG8gbWFudWFsbHkgYnVpbGQgbGF5b3V0cyBvZiB0aGUgaW5zdGFsbGVyLCBidWlsZCBvbmUgb2YgdGhlIHByb2plY3RzIGluCit0aGUgYnVuZGxlIGZvbGRlci4KKworICAgIG1zYnVpbGQgYnVuZGxlXHNuYXBzaG90LndpeHByb2oKKyAgICBtc2J1aWxkIGJ1bmRsZVxyZWxlYXNld2ViLndpeHByb2oKKyAgICBtc2J1aWxkIGJ1bmRsZVxyZWxlYXNlbG9jYWwud2l4cHJvagorICAgIG1zYnVpbGQgYnVuZGxlXGZ1bGwud2l4cHJvagorCitzbmFwc2hvdC53aXhwcm9qIHByb2R1Y2VzIGEgdGVzdCBpbnN0YWxsZXIgdmVyc2lvbmVkIGJhc2VkIG9uIHRoZSBkYXRlLgorCityZWxlYXNld2ViLndpeHByb2ogcHJvZHVjZXMgYSByZWxlYXNlIGluc3RhbGxlciB0aGF0IGRvZXMgbm90IGVtYmVkIGFueQorb2YgdGhlIGxheW91dC4KKworcmVsZWFzZWxvY2FsLndpeHByb2ogcHJvZHVjZXMgYSByZWxlYXNlIGluc3RhbGxlciB0aGF0IGVtYmVkcyB0aGUgZmlsZXMKK3JlcXVpcmVkIGZvciBhIGRlZmF1bHQgaW5zdGFsbGF0aW9uLgorCitmdWxsLndpeHByb2ogcHJvZHVjZXMgYSB0ZXN0IGluc3RhbGxlciB0aGF0IGVtYmVkcyB0aGUgZW50aXJlIGxheW91dC4KKworVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG1heSBiZSBwYXNzZWQgd2hlbiBidWlsZGluZyB0aGVzZSBwcm9qZWN0cy4KKworICAvcDpCdWlsZEZvclJlbGVhc2U9KHRydWV8ZmFsc2UpCisgICAgV2hlbiB0cnVlLCBhZGRzIGV4dHJhIHZlcmlmaWNhdGlvbiB0byBlbnN1cmUgYSBjb21wbGV0ZSBpbnN0YWxsZXIgaXMKKyAgICBwcm9kdWNlZC4gRm9yIGV4YW1wbGUsIGJpbnV0aWxzIGlzIHJlcXVpcmVkIHdoZW4gYnVpbGRpbmcgZm9yIGEgcmVsZWFzZQorICAgIHRvIGdlbmVyYXRlIE1pbkdXLWNvbXBhdGlibGUgbGlicmFyaWVzLCBhbmQgdGhlIGJ1aWxkIHdpbGwgYmUgYWJvcnRlZCBpZgorICAgIHRoaXMgZmFpbHMuIERlZmF1bHRzIHRvIGZhbHNlLgorCisgIC9wOlJlbGVhc2VVcmk9KGFueSBVUkkpCisgICAgVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzIGZvciB0aGUgaW5zdGFsbGVycyB0byBhbGxvdyBzaWRlLWJ5LXNpZGUKKyAgICBpbnN0YWxsYXRpb24uIEZvcmtzIG9mIFB5dGhvbiBjYW4gdXNlIHRoZSBzYW1lIGluc3RhbGxlciBpbmZyYXN0cnVjdHVyZQorICAgIGJ5IHByb3ZpZGluZyBhIHVuaXF1ZSBVUkkgZm9yIHRoaXMgcHJvcGVydHkuIEl0IGRvZXMgbm90IG5lZWQgdG8gYmUgYW4KKyAgICBhY3RpdmUgaW50ZXJuZXQgYWRkcmVzcy4gRGVmYXVsdHMgdG8gJChDb21wdXRlck5hbWUpLgorCisgICAgT2ZmaWNpYWwgcmVsZWFzZXMgdXNlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8oYXJjaGl0ZWN0dXJlIG5hbWUpCisKKyAgL3A6RG93bmxvYWRVcmxCYXNlPShhbnkgVVJJKQorICAgIFNwZWNpZmllcyB0aGUgYmFzZSBvZiBhIFVSTCB3aGVyZSBtaXNzaW5nIHBhcnRzIG9mIHRoZSBpbnN0YWxsZXIgbGF5b3V0CisgICAgY2FuIGJlIGRvd25sb2FkZWQgZnJvbS4gVGhlIGJ1aWxkIHZlcnNpb24gYW5kIGFyY2hpdGVjdHVyZSB3aWxsIGJlCisgICAgYXBwZW5kZWQgdG8gY3JlYXRlIHRoZSBmdWxsIGFkZHJlc3MuIElmIG9taXR0ZWQsIG1pc3NpbmcgY29tcG9uZW50cyB3aWxsCisgICAgbm90IGJlIGF1dG9tYXRpY2FsbHkgZG93bmxvYWRlZC4KKworICAvcDpEb3dubG9hZFVybD0oYW55IFVSSSkKKyAgICBTcGVjaWZpZXMgdGhlIGZ1bGwgVVJMIHdoZXJlIG1pc3NpbmcgcGFydHMgb2YgdGhlIGluc3RhbGxlciBsYXlvdXQgY2FuCisgICAgYmUgZG93bmxvYWRlZCBmcm9tLiBTaG91bGQgbm9ybWFsbHkgaW5jbHVkZSAnezJ9Jywgd2hpY2ggd2lsbCBiZQorICAgIHN1YnN0aXR1dGVkIGZvciB0aGUgZmlsZW5hbWUuIElmIG9taXR0ZWQsIG1pc3NpbmcgY29tcG9uZW50cyB3aWxsIG5vdCBiZQorICAgIGF1dG9tYXRpY2FsbHkgZG93bmxvYWRlZC4gSWYgc3BlY2lmaWVkLCB0aGlzIHZhbHVlIG92ZXJyaWRlcworICAgIERvd25sb2FkVXJsQmFzZS4KKworICAvcDpTaWduaW5nQ2VydGlmaWNhdGU9KGNlcnRpZmljYXRlIG5hbWUpCisgICAgU3BlY2lmaWVzIHRoZSBjZXJ0aWZpY2F0ZSB0byBzaWduIHRoZSBpbnN0YWxsZXIgbGF5b3V0IHdpdGguIElmIG9taXR0ZWQsCisgICAgdGhlIGxheW91dCB3aWxsIG5vdCBiZSBzaWduZWQuCisKKyAgL3A6UmVidWlsZEFsbD0odHJ1ZXxmYWxzZSkKKyAgICBXaGVuIHRydWUsIHJlYnVpbGRzIGFsbCBvZiB0aGUgTVNJcyBtYWtpbmcgdXAgdGhlIGxheW91dC4gRGVmYXVsdHMgdG8KKyAgICB0cnVlLgorCitVcGxvYWRpbmcgdGhlIEluc3RhbGxlcgorPT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIG9mZmljaWFsIHJlbGVhc2VzLCB0aGUgdXBsb2FkcmVsZWFzZS5iYXQgc2NyaXB0IHNob3VsZCBiZSB1c2VkLgorCitZb3Ugd2lsbCByZXF1aXJlIFB1VFRZIHNvIHRoYXQgcGxpbmsuZXhlIGFuZCBwc2NwLmV4ZSBjYW4gYmUgdXNlZCwgYW5kIHlvdXIKK1NTSCBrZXkgY2FuIGJlIGFjdGl2YXRlZCBpbiBwYWdlYW50LmV4ZS4gUHVUVFkgc2hvdWxkIGJlIGVpdGhlciBvbiB5b3VyIHBhdGgKK29yIGluICVQcm9ncmFtRmlsZXMoeDg2KSVcUHVUVFkuCisKK1RvIGluY2x1ZGUgc2lnbmF0dXJlcyBmb3IgZWFjaCB1cGxvYWRlZCBmaWxlLCB5b3Ugd2lsbCBuZWVkIGdwZzIuZXhlIG9uIHlvdXIKK3BhdGggb3IgaGF2ZSBydW4gZ2V0X2V4dGVybmFscy5iYXQuIFlvdSBtYXkgYWxzbyBuZWVkIHRvICJncGcyLmV4ZSAtLWltcG9ydCIKK3lvdXIga2V5IGJlZm9yZSBydW5uaW5nIHRoZSB1cGxvYWQgc2NyaXB0LgorCisgICAgdXBsb2FkcmVsZWFzZS5iYXQgLS1ob3N0IDxob3N0PiAtLXVzZXIgPHVzZXJuYW1lPiBbLS1kcnktcnVuXSBbLS1uby1ncGddCisKK1RoZSBob3N0IGlzIHRoZSBVUkwgdG8gdGhlIHNlcnZlci4gVGhpcyBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIFJlbGVhc2UKK01hbmFnZXIuIFlvdSBzaG91bGQgYmUgYWJsZSB0byBTU0ggdG8gdGhpcyBhZGRyZXNzLgorCitUaGUgdXNlcm5hbWUgaXMgeW91ciBvd24gdXNlcm5hbWUsIHdoaWNoIHlvdSBoYXZlIHBlcm1pc3Npb24gdG8gU1NIIGludG8KK3RoZSBzZXJ2ZXIgY29udGFpbmluZyBkb3dubG9hZHMuCisKK1VzZSAtLWRyeS1ydW4gdG8gZGlzcGxheSB0aGUgZ2VuZXJhdGVkIHVwbG9hZCBjb21tYW5kcyB3aXRob3V0IGV4ZWN1dGluZwordGhlbS4gU2lnbmF0dXJlcyBmb3IgZWFjaCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGJ1dCBub3QgdXBsb2FkZWQgdW5sZXNzCistLW5vLWdwZyBpcyBhbHNvIHBhc3NlZC4KKworVXNlIC0tbm8tZ3BnIHRvIHN1cHByZXNzIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB1cGxvYWQuCisKK1RoZSBkZWZhdWx0IHRhcmdldCBkaXJlY3RvcnkgKHdoaWNoIGFwcGVhcnMgaW4gdXBsb2FkcmVsZWFzZS5wcm9qKSBpcworY29ycmVjdCBmb3Igb2ZmaWNpYWwgUHl0aG9uIHJlbGVhc2VzLCBidXQgbWF5IGJlIG92ZXJyaWRkZW4gd2l0aAorLS10YXJnZXQgPHBhdGg+IGZvciBvdGhlciBwdXJwb3Nlcy4gVGhpcyBwYXRoIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUKK2FueSB2ZXJzaW9uIHNwZWNpZmllciwgYXMgdGhhdCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuCisKK01vZGlmeWluZyB0aGUgSW5zdGFsbGVyCis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY29kZSBmb3IgdGhlIGluc3RhbGxlciBpcyBkaXZpZGVkIGludG8gdGhyZWUgbWFpbiBncm91cHM6IHBhY2thZ2VzLAordGhlIGJ1bmRsZSBhbmQgdGhlIGJvb3RzdHJhcCBhcHBsaWNhdGlvbi4KKworUGFja2FnZXMKKy0tLS0tLS0tCisKK1BhY2thZ2VzIGFwcGVhciBhcyBzdWJkaXJlY3RvcmllcyBvZiBUb29scy9tc2kgKG90aGVyIHRoYW4gdGhlIGJ1bmRsZS8KK2RpcmVjdG9yeSkuIFRoZSBwcm9qZWN0IGZpbGUgaXMgYSAud2l4cHJvaiBhbmQgdGhlIGJ1aWxkIG91dHB1dCBpcyBhCitzaW5nbGUgTVNJLiBQYWNrYWdlcyBhcmUgYnVpbHQgd2l0aCB0aGUgV2lYIFRvb2xzZXQuIFNvbWUgcHJvamVjdCBmaWxlcworc2hhcmUgc291cmNlIGZpbGVzIGFuZCB1c2UgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdG8gZW5hYmxlIHBhcnRpY3VsYXIKK2ZlYXR1cmVzLiBUaGVzZSBhcmUgdHlwaWNhbGx5IHVzZWQgdG8ga2VlcCB0aGUgc291cmNlcyBjbG9zZSB3aGVuIHRoZQorZmlsZXMgYXJlIHJlbGF0ZWQsIGJ1dCBwcm9kdWNlIG11bHRpcGxlIGluZGVwZW5kZW50IHBhY2thZ2VzLgorCitBIHBhY2thZ2UgaXMgdGhlIHNtYWxsZXN0IGVsZW1lbnQgdGhhdCBtYXkgYmUgaW5kZXBlbmRlbnRseSBpbnN0YWxsZWQgb3IKK3VuaW5zdGFsbGVkIChhcyB1c2VkIGluIHRoaXMgaW5zdGFsbGVyKS4gRm9yIGV4YW1wbGUsIHRoZSB0ZXN0IHN1aXRlIGhhcworaXRzIG93biBwYWNrYWdlLCBhcyB1c2VycyBjYW4gY2hvb3NlIHRvIGFkZCBvciByZW1vdmUgaXQgYWZ0ZXIgdGhlCitpbml0aWFsIGluc3RhbGxhdGlvbi4KKworQWxsIHRoZSBmaWxlcyBpbnN0YWxsZWQgYnkgYSBzaW5nbGUgcGFja2FnZSBzaG91bGQgYmUgcmVsYXRlZCwgdGhvdWdoCitzb21lIHBhY2thZ2VzIG1heSBub3QgaW5zdGFsbCBhbnkgZmlsZXMuIEZvciBleGFtcGxlLCB0aGUgcGlwIHBhY2thZ2UKK2V4ZWN1dGVzIHRoZSBlbnN1cmVwaXAgcGFja2FnZSwgYnV0IGRvZXMgbm90IGFkZCBvciByZW1vdmUgYW55IG9mIGl0cworb3duIGZpbGVzLiAoSXQgaXMgcmVwcmVzZW50ZWQgYXMgYSBwYWNrYWdlIGJlY2F1c2Ugb2YgaXRzCitpbnN0YWxsZWQvdW5pbnN0YWxsZWQgbmF0dXJlLCBhcyBvcHBvc2VkIHRvIHRoZSAicHJlY29tcGlsZSBzdGFuZGFyZAorbGlicmFyeSIgb3B0aW9uLCBmb3IgZXhhbXBsZS4pIERlcGVuZGVuY2llcyBiZXR3ZWVuIHBhY2thZ2VzIGFyZSBoYW5kbGVkCitieSB0aGUgYnVuZGxlLCBidXQgcGFja2FnZXMgc2hvdWxkIGRldGVjdCB3aGVuIGRlcGVuZGVuY2llcyBhcmUgbWlzc2luZworYW5kIHJhaXNlIGFuIGVycm9yLgorCitQYWNrYWdlcyB0aGF0IGluY2x1ZGUgYSBsb3Qgb2YgZmlsZXMgbWF5IHVzZSBhbiBJbnN0YWxsRmlsZXMgZWxlbWVudCBpbgordGhlIC53aXhwcm9qIGZpbGUgdG8gZ2VuZXJhdGUgc291cmNlcy4gU2VlIGxpYi9saWIud2l4cHJvaiBmb3IgYW4KK2V4YW1wbGUsIGFuZCBtc2kudGFyZ2V0cyBhbmQgY3N2X3RvX3d4cy5weSBmb3IgdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzCitlbGVtZW50IGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGNvZGUgZm9yIGNsZWFuaW5nIHVwIGFuZAorcmVtb3ZpbmcgX19weWNhY2hlX18gZm9sZGVycyBpbiBhbnkgZGlyZWN0b3J5IGNvbnRhaW5pbmcgLnB5IGZpbGVzLgorCitBbGwgcGFja2FnZXMgYXJlIGJ1aWx0IHdpdGggdGhlIFRvb2xzL21zaS9jb21tb24ud3hzIGZpbGUsIGFuZCBzbyBhbnkKK2RpcmVjdG9yeSBvciBwcm9wZXJ0eSBpbiB0aGlzIGZpbGUgbWF5IGJlIHJlZmVyZW5jZWQuIE9mIHBhcnRpY3VsYXIKK2ludGVyZXN0OgorCisgIFJFR0lTVFJZS0VZIChwcm9wZXJ0eSkKKyAgICBUaGUgcmVnaXN0cnkga2V5IGZvciB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24uCisKKyAgSW5zdGFsbERpcmVjdG9yeSAoZGlyZWN0b3J5KQorICAgIFRoZSByb290IGluc3RhbGwgZGlyZWN0b3J5IGZvciB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24uIFN1YmRpcmVjdG9yaWVzCisgICAgYXJlIGFsc28gc3BlY2lmaWVkIGluIHRoaXMgZmlsZSAoRExMcywgTGliLCBldGMuKQorCisgIE1lbnVEaXIgKGRpcmVjdG9yeSkKKyAgICBUaGUgU3RhcnQgTWVudSBmb2xkZXIgZm9yIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbi4KKworICBVcGdyYWRlVGFibGUgKHByb3BlcnR5KQorICAgIEV2ZXJ5IHBhY2thZ2Ugc2hvdWxkIHJlZmVyZW5jZSB0aGlzIHByb3BlcnR5IHRvIGluY2x1ZGUgdXBncmFkZQorICAgIGluZm9ybWF0aW9uLgorCisgIE9wdGlvbmFsRmVhdHVyZSAoQ29tcG9uZW50KQorICAgIFBhY2thZ2VzIHRoYXQgbWF5IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgc2hvdWxkIHJlZmVyZW5jZSB0aGlzIGNvbXBvbmVudAorICAgIGFuZCBoYXZlIGFuIE9QVElPTkFMX0ZFQVRVUkVTIGVudHJ5IGluIHRoZSBib290c3RyYXAgYXBwbGljYXRpb24gdG8KKyAgICBwcm9wZXJseSBoYW5kbGUgTW9kaWZ5IGFuZCBVcGdyYWRlLgorCitUaGUgLnd4bF90ZW1wbGF0ZSBmaWxlIGlzIHNwZWNpYWxseSBoYW5kbGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gZm9yIHRoaXMKK3Byb2plY3QgdG8gcGVyZm9ybSB7e3N1YnN0aXR1dGlvbnN9fSBhcyBkZWZpbmVkIGluIG1zaS50YXJnZXRzLiBUaGV5CitzaG91bGQgYmUgaW5jbHVkZWQgaW4gcHJvamVjdHMgYXMgPFd4bFRlbXBsYXRlPiBpdGVtcywgd2hlcmUgLnd4bCBmaWxlcworYXJlIG5vcm1hbGx5IGluY2x1ZGVkIGFzIDxFbWJlZGRlZFJlc291cmNlPiBpdGVtcy4KKworQnVuZGxlCistLS0tLS0KKworVGhlIGJ1bmRsZSBpcyBjb21waWxlZCB0byB0aGUgbWFpbiBFWEUgZW50cnkgcG9pbnQgdGhhdCBmb3IgbW9zdCB1c2Vycword2lsbCByZXByZXNlbnQgdGhlIFB5dGhvbiBpbnN0YWxsZXIuIEl0IGlzIGJ1aWx0IGZyb20gVG9vbHMvbXNpL2J1bmRsZQord2l0aCBwYWNrYWdlcyByZWZlcmVuY2VzIGluIFRvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy4KKworQnVpbGQgbG9naWMgZm9yIHRoZSBidW5kbGUgaXMgaW4gYnVuZGxlLnRhcmdldHMsIGJ1dCBzaG91bGQgYmUgaW52b2tlZAordGhyb3VnaCBvbmUgb2YgdGhlIC53aXhwcm9qIGZpbGVzIGFzIGRlc2NyaWJlZCBpbiBCdWlsZGluZyB0aGUKK0luc3RhbGxlci4KKworVGhlIFVJIGlzIHNlcGFyYXRlZCBiZXR3ZWVuIERlZmF1bHQudGhtIChVSSBsYXlvdXQpLCBEZWZhdWx0Lnd4bAorKHN0cmluZ3MpLCBidW5kbGUud3hzIChwcm9wZXJ0aWVzKSBhbmQgdGhlIGJvb3RzdHJhcCBhcHBsaWNhdGlvbi4KK0J1bmRsZS53eHMgYWxzbyBjb250YWlucyB0aGUgY2hhaW4sIHdoaWNoIGlzIHRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvCitpbnN0YWxsIGFuZCB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgaW5zdGFsbGVkIGluLiBUaGVzZSByZWZlciB0byBuYW1lZAorcGFja2FnZSBncm91cHMgaW4gYnVuZGxlL3BhY2thZ2Vncm91cHMuCisKK0VhY2ggcGFja2FnZSBncm91cCBzcGVjaWZpZXMgb25lIG9yIG1vcmUgcGFja2FnZXMgdG8gaW5zdGFsbC4gTW9zdAorcGFja2FnZXMgcmVxdWlyZSB0d28gc2VwYXJhdGUgZW50cmllcyB0byBzdXBwb3J0IGJvdGggcGVyLXVzZXIgYW5kCithbGwtdXNlcnMgaW5zdGFsbGF0aW9ucy4gQmVjYXVzZSB0aGVzZSByZXVzZSB0aGUgc2FtZSBwYWNrYWdlLCBpdCBkb2VzCitub3QgaW5jcmVhc2UgdGhlIG92ZXJhbGwgc2l6ZSBvZiB0aGUgcGFja2FnZS4KKworUGFja2FnZSBncm91cHMgcmVmZXIgdG8gcGF5bG9hZCBncm91cHMsIHdoaWNoIGFsbG93IGJldHRlciBjb250cm9sIG92ZXIKK2VtYmVkZGluZyBhbmQgZG93bmxvYWRpbmcgZmlsZXMgdGhhbiB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gV2hldGhlciBmaWxlcworYXJlIGVtYmVkZGVkIGFuZCB3aGVyZSB0aGV5IGFyZSBkb3dubG9hZGVkIGZyb20gZGVwZW5kcyBvbiBzZXR0aW5ncworY3JlYXRlZCBieSB0aGUgcHJvamVjdCBmaWxlcy4KKworUGFja2FnZSByZWZlcmVuY2VzIGNhbiBpbmNsdWRlIGluc3RhbGwgY29uZGl0aW9ucyB0aGF0IGRldGVybWluZSB3aGVuIHRvCitpbnN0YWxsIHRoZSBwYWNrYWdlLiBXaGVuIGEgcGFja2FnZSBpcyBhIGRlcGVuZGVuY3kgZm9yIG90aGVycywgdGhlCitjb25kaXRpb24gc2hvdWxkIGJlIGNyYWZ0ZWQgdG8gZW5zdXJlIGl0IGlzIGluc3RhbGxlZC4KKworTVNJIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQgb3IgdW5pbnN0YWxsZWQgYmFzZWQgb24gdGhlaXIgY3VycmVudCBzdGF0ZQorYW5kIHRoZSBpbnN0YWxsIGNvbmRpdGlvbi4gVGhpcyBtYWtlcyB0aGVtIG1vc3Qgc3VpdGFibGUgZm9yIGZlYXR1cmVzCit0aGF0IGFyZSBjbGVhcmx5IHByZXNlbnQgb3IgYWJzZW50IGZyb20gdGhlIHVzZXIncyBtYWNoaW5lLgorCitFWEUgcGFja2FnZXMgYXJlIGV4ZWN1dGVkIGJhc2VkIG9uIGEgY3VzdG9taXNhYmxlIGNvbmRpdGlvbiB0aGF0IGNhbiBiZQorb21pdHRlZC4gVGhpcyBtYWtlcyB0aGVtIHN1aXRhYmxlIGZvciBwcmUtIG9yIHBvc3QtaW5zdGFsbCB0YXNrcyB0aGF0CituZWVkIHRvIHJ1biByZWdhcmRsZXNzIG9mIHdoZXRoZXIgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZWQuCisKK0Jvb3RzdHJhcCBBcHBsaWNhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBib290c3RyYXAgYXBwbGljYXRpb24gaXMgYSBDKysgYXBwbGljYXRpb24gdGhhdCBjb250cm9scyB0aGUgVUkgYW5kCitpbnN0YWxsYXRpb24uIFdoaWxlIGl0IGRvZXMgbm90IGRpcmVjdGx5IGNvbXBpbGUgaW50byB0aGUgbWFpbiBFWEUgb2YKK3RoZSBpbnN0YWxsZXIsIGl0IGZvcm1zIHRoZSBtYWluIGFjdGl2ZSBjb21wb25lbnQuIE1vc3Qgb2YgdGhlCitpbnN0YWxsYXRpb24gZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBieSBXaVgsIGFuZCBzbyB0aGUgYm9vdHN0cmFwCithcHBsaWNhdGlvbiBpcyBwcmVkb21pbmFudGx5IHJlc3BvbnNpYmxlIGZvciB0aGUgY29kZSBiZWhpbmQgdGhlIFVJIHRoYXQKK2lzIGRlZmluZWQgaW4gdGhlIERlZmF1bHQudGhtIGZpbGUuIFRoZSBib290c3RyYXAgYXBwbGljYXRpb24gY29kZSBpcyBpbgorYnVuZGxlL2Jvb3RzdHJhcCBhbmQgaXMgYnVpbHQgYXV0b21hdGljYWxseSB3aGVuIGJ1aWxkaW5nIHRoZSBidW5kbGUuCisKK0luc3RhbGxhdGlvbiBMYXlvdXQKKz09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIHR3byBpbnN0YWxsYXRpb24gbGF5b3V0cyBmb3IgUHl0aG9uIG9uIFdpbmRvd3MsIHdpdGggdGhlIG9ubHkKK2RpZmZlcmVuY2VzIGJlaW5nIHN1cHBvcnRpbmcgZmlsZXMuIEEgbGF5b3V0IGlzIHNlbGVjdGVkIGltcGxpY2l0bHkKK2Jhc2VkIG9uIHdoZXRoZXIgdGhlIGluc3RhbGwgaXMgZm9yIGFsbCB1c2VycyBvZiB0aGUgbWFjaGluZSBvciBqdXN0IGZvcgordGhlIHVzZXIgcGVyZm9ybWluZyB0aGUgaW5zdGFsbGF0aW9uLgorCitUaGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gbG9jYXRpb24gd2hlbiBpbnN0YWxsaW5nIGZvciBhbGwgdXNlcnMgaXMKKyIlUHJvZ3JhbUZpbGVzJVxQeXRob24zWCIgZm9yIHRoZSA2NC1iaXQgaW50ZXJwcmV0ZXIgYW5kCisiJVByb2dyYW1GaWxlcyh4ODYpJVxQeXRob24zWC0zMiIgZm9yIHRoZSAzMi1iaXQgaW50ZXJwcmV0ZXIuIChOb3RlIHRoYXQKK3RoZSBsYXR0ZXIgcGF0aCBpcyBlcXVpdmFsZW50IHRvICIlUHJvZ3JhbUZpbGVzJVxQeXRob24zWC0zMiIgd2hlbgorcnVubmluZyBhIDMyLWJpdCB2ZXJzaW9uIG9mIFdpbmRvd3MuKSBUaGlzIGxvY2F0aW9uIHJlcXVpcmVzCithZG1pbmlzdHJhdGl2ZSBwcml2aWxlZ2VzIHRvIGluc3RhbGwgb3IgbGF0ZXIgbW9kaWZ5IHRoZSBpbnN0YWxsYXRpb24uCisKK1RoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBsb2NhdGlvbiB3aGVuIGluc3RhbGxpbmcgZm9yIHRoZSBjdXJyZW50IHVzZXIKK2lzICIlTG9jYWxBcHBEYXRhJVxQcm9ncmFtc1xQeXRob25cUHl0aG9uM1giIGZvciB0aGUgNjQtYml0IGludGVycHJldGVyCithbmQgIiVMb2NhbEFwcERhdGElXFByb2dyYW1zXFB5dGhvblxQeXRob24zWC0zMiIgZm9yIHRoZSAzMi1iaXQKK2ludGVycHJldGVyLiBPbmx5IHRoZSBjdXJyZW50IHVzZXIgY2FuIGFjY2VzcyB0aGlzIGxvY2F0aW9uLiBUaGlzCitwcm92aWRlcyBhIHN1aXRhYmxlIGxldmVsIG9mIHByb3RlY3Rpb24gYWdhaW5zdCBtYWxpY2lvdXMgbW9kaWZpY2F0aW9uCitvZiBQeXRob24ncyBmaWxlcy4KKworKERlZmF1bHQgaW5zdGFsbGF0aW9uIGxvY2F0aW9ucyBhcmUgc2V0IGluIFRvb2xzXG1zaVxidW5kbGVcYnVuZGxlLnd4cy4pCisKK1dpdGhpbiB0aGlzIGluc3RhbGwgZGlyZWN0b3J5IGlzIHRoZSBmb2xsb3dpbmcgYXBwcm94aW1hdGUgbGF5b3V0OgorCisuXHB5dGhvblt3XS5leGUgVGhlIGNvcmUgZXhlY3V0YWJsZSBmaWxlcworLlxETExzICAgICAgICAgIFN0ZGxpYiBleHRlbnNpb25zICgqLnB5ZCkgYW5kIGRlcGVuZGVuY2llcworLlxEb2MgICAgICAgICAgIERvY3VtZW50YXRpb24gKCouY2htKQorLlxpbmNsdWRlICAgICAgIERldmVsb3BtZW50IGhlYWRlcnMgKCouaCkKKy5cTGliICAgICAgICAgICBTdGFuZGFyZCBsaWJyYXJ5CisuXExpYlx0ZXN0ICAgICAgVGVzdCBzdWl0ZQorLlxsaWJzICAgICAgICAgIERldmVsb3BtZW50IGxpYnJhcmllcyAoKi5saWIpCisuXFNjcmlwdHMgICAgICAgTGF1bmNoZXIgc2NyaXB0cyAoKi5leGUsICoucHkpCisuXHRjbCAgICAgICAgICAgVGNsIGRlcGVuZGVuY2llcyAoKi5kbGwsICoudGNsIGFuZCBvdGhlcnMpCisuXFRvb2xzICAgICAgICAgVG9vbCBzY3JpcHRzICgqLnB5KQorCitXaGVuIGluc3RhbGxlZCBmb3IgYWxsIHVzZXJzLCB0aGUgZm9sbG93aW5nIGZpbGVzIGFyZSBpbnN0YWxsZWQgdG8KK2VpdGhlciAiJVN5c3RlbVJvb3QlXFN5c3RlbTMyIiBvciAiJVN5c3RlbVJvb3QlXFN5c1dPVzY0IiBhcworYXBwcm9wcmlhdGUuIEZvciB0aGUgY3VycmVudCB1c2VyLCB0aGV5IGFyZSBpbnN0YWxsZWQgaW4gdGhlIFB5dGhvbgoraW5zdGFsbCBkaXJlY3RvcnkuCisKKy5ccHl0aG9uM3guZGxsICAgICAgVGhlIGNvcmUgaW50ZXJwcmV0ZXIKKy5ccHl0aG9uMy5kbGwgICAgICAgVGhlIHN0YWJsZSBBQkkgcmVmZXJlbmNlCisKK1doZW4gaW5zdGFsbGVkIGZvciBhbGwgdXNlcnMsIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGluc3RhbGxlZCB0bworIiVTeXN0ZW1Sb290JSIgKHR5cGljYWxseSAiQzpcV2luZG93cyIpIHRvIGVuc3VyZSB0aGV5IGFyZSBhbHdheXMKK2F2YWlsYWJsZSBvbiBQQVRILiAoU2VlIExhdW5jaGluZyBQeXRob24gYmVsb3cuKSBGb3IgdGhlIGN1cnJlbnQgdXNlciwKK3RoZXkgYXJlIGluc3RhbGxlZCBpbiAiJUxvY2FsQXBwRGF0YSVcUHJvZ3JhbXNcUHl0aG9uXFB5TGF1bmNoZXIiLgorCisuXHB5W3ddLmV4ZSAgICAgICAgIFBFUCAzOTcgbGF1bmNoZXIKKworU3lzdGVtIFNldHRpbmdzCis9PT09PT09PT09PT09PT0KKworT24gaW5zdGFsbGF0aW9uLCByZWdpc3RyeSBrZXlzIGFyZSBjcmVhdGVkIHNvIHRoYXQgb3RoZXIgYXBwbGljYXRpb25zCitjYW4gbG9jYXRlIGFuZCBpZGVudGlmeSBpbnN0YWxsYXRpb25zIG9mIFB5dGhvbi4gVGhlIGxvY2F0aW9ucyBvZiB0aGVzZQora2V5cyB2YXJ5IGJhc2VkIG9uIHRoZSBpbnN0YWxsIHR5cGUuCisKK0ZvciA2NC1iaXQgaW50ZXJwcmV0ZXJzIGluc3RhbGxlZCBmb3IgYWxsIHVzZXJzLCB0aGUgcm9vdCBrZXkgaXM6CisgICAgSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXDMuWAorCitGb3IgMzItYml0IGludGVycHJldGVycyBpbnN0YWxsZWQgZm9yIGFsbCB1c2VycyBvbiBhIDY0LWJpdCBvcGVyYXRpbmcKK3N5c3RlbSwgdGhlIHJvb3Qga2V5IGlzOgorICAgIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxXb3c2NDMyTm9kZVxQeXRob25cUHl0aG9uQ29yZVwzLlgtMzIKKworRm9yIDMyLWJpdCBpbnRlcnByZXRlcnMgaW5zdGFsbGVkIGZvciBhbGwgdXNlcnMgb24gYSAzMi1iaXQgb3BlcmF0aW5nCitzeXN0ZW0sIHRoZSByb290IGtleSBpczoKKyAgICBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcMy5YLTMyCisKK0ZvciA2NC1iaXQgaW50ZXJwcmV0ZXJzIGluc3RhbGxlZCBmb3IgdGhlIGN1cnJlbnQgdXNlcjoKKyAgICBIS0VZX0NVUlJFTlRfVVNFUlxTb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwzLlgKKworRm9yIDMyLWJpdCBpbnRlcnByZXRlcnMgaW5zdGFsbGVkIGZvciB0aGUgY3VycmVudCB1c2VyOgorICAgIEhLRVlfQ1VSUkVOVF9VU0VSXFNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXDMuWC0zMgorCitXaGVuIHRoZSBjb3JlIFB5dGhvbiBleGVjdXRhYmxlcyBhcmUgaW5zdGFsbGVkLCBhIGtleSAiSW5zdGFsbFBhdGgiIGlzCitjcmVhdGVkIHdpdGhpbiB0aGUgcm9vdCBrZXkgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQgdG8gdGhlCitleGVjdXRhYmxlJ3MgaW5zdGFsbCBkaXJlY3RvcnkuIEEgdmFsdWUgbmFtZWQgIkV4ZWN1dGFibGVQYXRoIiBpcyBhZGRlZAord2l0aCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBtYWluIFB5dGhvbiBpbnRlcnByZXRlciwgYW5kIGEga2V5CisiSW5zdGFsbEdyb3VwIiBpcyBjcmVhdGVkIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUgc2V0IHRvIHRoZSBwcm9kdWN0CituYW1lICJQeXRob24gMy5YIi4KKworV2hlbiB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgaXMgaW5zdGFsbGVkLCBhIGtleSAiUHl0aG9uUGF0aCIgaXMKK2NyZWF0ZWQgd2l0aGluIHRoZSByb290IGtleSB3aXRoIGl0cyBkZWZhdWx0IHZhbHVlIHNldCB0byB0aGUgZnVsbCBwYXRoCit0byB0aGUgTGliIGZvbGRlciBmb2xsb3dlZCBieSB0aGUgcGF0aCB0byB0aGUgRExMcyBmb2xkZXIsIHNlcGFyYXRlZCBieQorYSBzZW1pY29sb24uCisKK1doZW4gdGhlIGRvY3VtZW50YXRpb24gaXMgaW5zdGFsbGVkLCBhIGtleSAiSGVscCIgaXMgY3JlYXRlZCB3aXRoaW4gdGhlCityb290IGtleSwgd2l0aCBhIHN1YmtleSAiTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbiIgd2l0aCBpdHMgZGVmYXVsdAordmFsdWUgc2V0IHRvIHRoZSBmdWxsIHBhdGggdG8gdGhlIGluc3RhbGxlZCBDSE0gZmlsZS4KKworCitUaGUgcHkuZXhlIGxhdW5jaGVyIGlzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIGEgcmVndWxhciBQeXRob24gaW5zdGFsbCwKK2J1dCB1c2luZyBhIHNlcGFyYXRlIG1lY2hhbmlzbSB0aGF0IGFsbG93cyBpdCB0byBtb3JlIGVhc2lseSBzcGFuCit2ZXJzaW9ucyBvZiBQeXRob24uIEFzIGEgcmVzdWx0LCBpdCBoYXMgZGlmZmVyZW50IHJvb3Qga2V5cyBmb3IgaXRzCityZWdpc3RyeSBlbnRyaWVzOgorCitXaGVuIGluc3RhbGxlZCBmb3IgYWxsIHVzZXJzIG9uIGEgNjQtYml0IG9wZXJhdGluZyBzeXN0ZW0sIHRoZQorbGF1bmNoZXIncyByb290IGtleSBpczoKKyAgICBIS0VZX0xPQ0FMX01BQ0hJTkVcU29mdHdhcmVcV293NjQzMk5vZGVcUHl0aG9uXExhdW5jaGVyCisKK1doZW4gaW5zdGFsbGVkIGZvciBhbGwgdXNlcnMgb24gYSAzMi1iaXQgb3BlcmF0aW5nIHN5c3RlbSwgdGhlCitsYXVuY2hlcidzIHJvb3Qga2V5IGlzOgorICAgIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxQeXRob25cTGF1bmNoZXIKKworV2hlbiBpbnN0YWxsZWQgZm9yIHRoZSBjdXJyZW50IHVzZXI6CisgICAgSEtFWV9DVVJSRU5UX1VTRVJcU29mdHdhcmVcUHl0aG9uXExhdW5jaGVyCisKK1doZW4gdGhlIGxhdW5jaGVyIGlzIGluc3RhbGxlZCwgYSBrZXkgIkluc3RhbGxQYXRoIiBpcyBjcmVhdGVkIHdpdGhpbgoraXRzIHJvb3Qga2V5IHdpdGggaXRzIGRlZmF1bHQgdmFsdWUgc2V0IHRvIHRoZSBsYXVuY2hlcidzIGluc3RhbGwKK2RpcmVjdG9yeS4gRmlsZSBhc3NvY2lhdGlvbnMgYXJlIGFsc28gY3JlYXRlZCBmb3IgLnB5LCAucHl3LCAucHljIGFuZAorLnB5byBmaWxlcy4KKworTGF1bmNoaW5nIFB5dGhvbgorPT09PT09PT09PT09PT09PQorCitXaGVuIGEgZmVhdHVyZSBvZmZlcmluZyB1c2VyIGVudHJ5IHBvaW50cyBpbiB0aGUgU3RhcnQgTWVudSBpcworaW5zdGFsbGVkLCBhIGZvbGRlciAiUHl0aG9uIDMuWCIgaXMgY3JlYXRlZC4gRXZlcnkgc2hvcnRjdXQgc2hvdWxkIGJlCitjcmVhdGVkIHdpdGhpbiB0aGlzIGZvbGRlciwgYW5kIGVhY2ggc2hvcnRjdXQgc2hvdWxkIGluY2x1ZGUgdGhlIHZlcnNpb24KK2FuZCBwbGF0Zm9ybSB0byBhbGxvdyB1c2VycyB0byBpZGVudGlmeSB0aGUgc2hvcnRjdXQgaW4gYSBzZWFyY2ggcmVzdWx0cworcGFnZS4KKworVGhlIGNvcmUgUHl0aG9uIGV4ZWN1dGFibGVzIGNyZWF0ZXMgYSBzaG9ydGN1dCAiUHl0aG9uIDMuWCAoMzItYml0KSIgb3IKKyJQeXRob24gMy5YICg2NC1iaXQpIiBkZXBlbmRpbmcgb24gdGhlIGludGVycHJldGVyLgorCitUaGUgZG9jdW1lbnRhdGlvbiBjcmVhdGVzIGEgc2hvcnRjdXQgIlB5dGhvbiAzLlggMzItYml0IE1hbnVhbHMiIG9yCisiUHl0aG9uIDMuWCA2NC1iaXQgTWFudWFscyIuIFRoZSBkb2N1bWVudGF0aW9uIGlzIGlkZW50aWNhbCBmb3IgYWxsCitwbGF0Zm9ybXMsIGJ1dCB0aGUgc2hvcnRjdXRzIG5lZWQgdG8gYmUgc2VwYXJhdGUgdG8gYXZvaWQgdW5pbnN0YWxsYXRpb24KK2NvbmZsaWN0cy4KKworSW5zdGFsbGluZyBJRExFIGNyZWF0ZXMgYSBzaG9ydGN1dCAiSURMRSAoUHl0aG9uIDMuWCAzMi1iaXQpIiBvciAiSURMRQorKFB5dGhvbiAzLlggNjQtYml0KSIgZGVwZW5kaW5nIG9uIHRoZSBpbnRlcnByZXRlci4KKworCitGb3IgdXNlcnMgd2hvIG9mdGVuIGxhdW5jaCBQeXRob24gZnJvbSBhIENvbW1hbmQgUHJvbXB0LCBhbiBvcHRpb24gaXMKK3Byb3ZpZGVkIHRvIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcHl0aG9uLmV4ZSB0byB0aGUgdXNlciBvcgorc3lzdGVtIFBBVEggdmFyaWFibGUuIElmIHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZSBpbnN0YWxsIGRpcmVjdG9yeQorYW5kIHRoZSBTY3JpcHRzIGRpcmVjdG9yeSB3aWxsIGJlIGFkZGVkIGF0IHRoZSBzdGFydCBvZiB0aGUgc3lzdGVtIFBBVEgKK2ZvciBhbiBhbGwgdXNlcnMgaW5zdGFsbCBhbmQgdGhlIHVzZXIgUEFUSCBmb3IgYSBwZXItdXNlciBpbnN0YWxsLgorCitXaGVuIHRoZSB1c2VyIG9ubHkgaGFzIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiBpbnN0YWxsZWQsIHRoaXMgd2lsbCBiZWhhdmUKK2FzIGV4cGVjdGVkLiBIb3dldmVyLCBiZWNhdXNlIFdpbmRvd3Mgc2VhcmNoZXMgdGhlIHN5c3RlbSBQQVRIIGJlZm9yZQordGhlIHVzZXIgUEFUSCwgdXNlcnMgY2Fubm90IG92ZXJyaWRlIGEgc3lzdGVtLXdpZGUgaW5zdGFsbGF0aW9uIG9mCitQeXRob24gb24gdGhlaXIgUEFUSC4gRnVydGhlciwgYmVjYXVzZSB0aGUgaW5zdGFsbGVyIGNhbiBvbmx5IHByZXBlbmQgdG8KK3RoZSBwYXRoLCBsYXRlciBpbnN0YWxsYXRpb25zIG9mIFB5dGhvbiB3aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyCitlYXJsaWVyIGluc3RhbGxhdGlvbnMsIHJlZ2FyZGxlc3Mgb2YgaW50ZXJwcmV0ZXIgdmVyc2lvbi4KKworQmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gYXV0b21hdGljYWxseSBjcmVhdGUgYSBzZW5zaWJsZSBQQVRICitjb25maWd1cmF0aW9uLCB1c2VycyBhcmUgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBweS5leGUgbGF1bmNoZXIgYW5kCittYW51YWxseSBtb2RpZnkgdGhlaXIgUEFUSCB2YXJpYWJsZSB0byBhZGQgU2NyaXB0cyBkaXJlY3RvcmllcyBpbiB0aGVpcgorcHJlZmVycmVkIG9yZGVyLiBTeXN0ZW0td2lkZSBpbnN0YWxsYXRpb25zIG9mIFB5dGhvbiBzaG91bGQgY29uc2lkZXIgbm90Cittb2RpZnlpbmcgUEFUSCwgb3IgdXNpbmcgYW4gYWx0ZXJuYXRpdmUgdGVjaG5vbG9neSB0byBtb2RpZnkgdGhlaXIKK3VzZXJzJyBQQVRIIHZhcmlhYmxlcy4KKworCitUaGUgcHkuZXhlIGxhdW5jaGVyIGlzIHJlY29tbWVuZGVkIGJlY2F1c2UgaXQgdXNlcyBhIGNvbnNpc3RlbnQgYW5kCitzZW5zaWJsZSBzZWFyY2ggb3JkZXIgZm9yIFB5dGhvbiBpbnN0YWxsYXRpb25zLiBVc2VyIGluc3RhbGxhdGlvbnMgYXJlCitwcmVmZXJyZWQgb3ZlciBzeXN0ZW0td2lkZSBpbnN0YWxscywgYW5kIGxhdGVyIHZlcnNpb25zIGFyZSBwcmVmZXJyZWQKK3JlZ2FyZGxlc3Mgb2YgaW5zdGFsbGF0aW9uIG9yZGVyICh3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBweS5leGUKK2N1cnJlbnRseSBwcmVmZXJzIDIueCB2ZXJzaW9ucyBvdmVyIDMueCB2ZXJzaW9ucyB3aXRob3V0IHRoZSAtMyBjb21tYW5kCitsaW5lIGFyZ3VtZW50KS4KKworRm9yIGJvdGggMzItYml0IGFuZCA2NC1iaXQgaW50ZXJwcmV0ZXJzLCB0aGUgMzItYml0IHZlcnNpb24gb2YgdGhlCitsYXVuY2hlciBpcyBpbnN0YWxsZWQuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBzZWFyY2ggb3JkZXIgaXMgYWx3YXlzCitjb25zaXN0ZW50IChhcyB0aGUgNjQtYml0IGxhdW5jaGVyIGlzIHN1YnRseSBkaWZmZXJlbnQgZnJvbSB0aGUgMzItYml0CitsYXVuY2hlcikgYW5kIGFsc28gYXZvaWRzIHRoZSBuZWVkIHRvIGluc3RhbGwgaXQgbXVsdGlwbGUgdGltZXMuIEZ1dHVyZQordmVyc2lvbnMgb2YgUHl0aG9uIHdpbGwgdXBncmFkZSB0aGUgbGF1bmNoZXIgaW4tcGxhY2UsIHVzaW5nIFdpbmRvd3MKK0luc3RhbGxlcidzIHVwZ3JhZGUgZnVuY3Rpb25hbGl0eSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBlYXJsaWVyCitpbnN0YWxsZWQgdmVyc2lvbnMuCisKK1doZW4gaW5zdGFsbGVkLCBmaWxlIGFzc29jaWF0aW9ucyBhcmUgY3JlYXRlZCBmb3IgLnB5LCAucHljIGFuZCAucHlvCitmaWxlcyB0byBsYXVuY2ggd2l0aCBweS5leGUgYW5kIC5weXcgZmlsZXMgdG8gbGF1bmNoIHdpdGggcHl3LmV4ZS4gVGhpcworbWFrZXMgUHl0aG9uIGZpbGVzIHJlc3BlY3Qgc2hlYmFuZyBsaW5lcyBieSBkZWZhdWx0IGFuZCBhbHNvIGF2b2lkcworY29uZmxpY3RzIGJldHdlZW4gbXVsdGlwbGUgUHl0aG9uIGluc3RhbGxhdGlvbnMuCisKKworUmVwYWlyLCBNb2RpZnkgYW5kIFVuaW5zdGFsbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBZnRlciBpbnN0YWxsYXRpb24sIFB5dGhvbiBtYXkgYmUgbW9kaWZpZWQsIHJlcGFpcmVkIG9yIHVuaW5zdGFsbGVkIGJ5CitydW5uaW5nIHRoZSBvcmlnaW5hbCBFWEUgYWdhaW4gb3IgdmlhIHRoZSBQcm9ncmFtcyBhbmQgRmVhdHVyZXMgYXBwbGV0CisoZm9ybWVybHkga25vd24gYXMgQWRkIG9yIFJlbW92ZSBQcm9ncmFtcykuCisKK01vZGlmaWNhdGlvbnMgYWxsb3cgZmVhdHVyZXMgdG8gYmUgYWRkZWQgb3IgcmVtb3ZlZC4gVGhlIGluc3RhbGwKK2RpcmVjdG9yeSBhbmQga2luZCAoYWxsIHVzZXJzL3NpbmdsZSB1c2VyKSBjYW5ub3QgYmUgbW9kaWZpZWQuIEJlY2F1c2UKK1dpbmRvd3MgSW5zdGFsbGVyIGNhY2hlcyBpbnN0YWxsYXRpb24gcGFja2FnZXMsIHJlbW92aW5nIGZlYXR1cmVzIHdpbGwKK25vdCByZXF1aXJlIGludGVybmV0IGFjY2VzcyB1bmxlc3MgdGhlIHBhY2thZ2UgY2FjaGUgaGFzIGJlZW4gY29ycnVwdGVkCitvciBkZWxldGVkLiBBZGRpbmcgZmVhdHVyZXMgdGhhdCB3ZXJlIG5vdCBwcmV2aW91c2x5IGluc3RhbGxlZCBhbmQgYXJlCitub3QgZW1iZWRkZWQgb3Igb3RoZXJ3aXNlIGF2YWlsYWJsZSB3aWxsIHJlcXVpcmUgaW50ZXJuZXQgYWNjZXNzLgorCitSZXBhaXJpbmcgd2lsbCByZXJ1biB0aGUgaW5zdGFsbGF0aW9uIGZvciBhbGwgY3VycmVudGx5IGluc3RhbGxlZAorZmVhdHVyZXMsIHJlc3RvcmluZyBmaWxlcyBhbmQgcmVnaXN0cnkga2V5cyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvcgorcmVtb3ZlZC4gVGhpcyBvcGVyYXRpb24gZ2VuZXJhbGx5IHdpbGwgbm90IHJlZG93bmxvYWQgYW55IGZpbGVzIHVubGVzcwordGhlIGNhY2hlZCBwYWNrYWdlcyBoYXZlIGJlZW4gY29ycnVwdGVkIG9yIGRlbGV0ZWQuCisKK1JlbW92aW5nIFB5dGhvbiB3aWxsIGNsZWFuIHVwIGFsbCB0aGUgZmlsZXMgYW5kIHJlZ2lzdHJ5IGtleXMgdGhhdCB3ZXJlCitjcmVhdGVkIGJ5IHRoZSBpbnN0YWxsZXIsIGFzIHdlbGwgYXMgX19weWNhY2hlX18gZm9sZGVycyB0aGF0IGFyZQorZXhwbGljaXRseSBoYW5kbGVkIGJ5IHRoZSBpbnN0YWxsZXIuIFB5dGhvbiBwYWNrYWdlcyBpbnN0YWxsZWQgbGF0ZXIKK3VzaW5nIGEgdG9vbCBsaWtlIHBpcCB3aWxsIG5vdCBiZSByZW1vdmVkLiBTb21lIGNvbXBvbmVudHMgbWF5IGJlCitpbnN0YWxsZWQgYnkgb3RoZXIgaW5zdGFsbGVycyBhbmQgdGhlc2Ugd2lsbCBub3QgYmUgcmVtb3ZlZCBpZiBhbm90aGVyCitwcm9kdWN0IGhhcyBhIGRlcGVuZGVuY3kgb24gdGhlbS4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1aWxkLmJhdCBiL1Rvb2xzL21zaS9idWlsZC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYxYWNlOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idWlsZC5iYXQKQEAgLTAsMCArMSw3NiBAQAorQGVjaG8gb2ZmDQorc2V0bG9jYWwNCitzZXQgRD0lfmRwMA0KK3NldCBQQ0JVSUxEPSVEJS4uXC4uXFBDQnVpbGRcDQorDQorc2V0IEJVSUxEWDg2PQ0KK3NldCBCVUlMRFg2ND0NCitzZXQgQlVJTERET0M9DQorc2V0IEJVSUxEVEVTVD0tLXRlc3QtbWFya2VyDQorc2V0IEJVSUxEUEFDSz0NCitzZXQgUkVCVUlMRD0NCisNCis6Q2hlY2tPcHRzDQoraWYgIiV+MSIgRVFVICItaCIgZ290byBIZWxwDQoraWYgIiV+MSIgRVFVICIteDg2IiAoc2V0IEJVSUxEWDg2PTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSIgRVFVICIteDY0IiAoc2V0IEJVSUxEWDY0PTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSIgRVFVICItLWRvYyIgKHNldCBCVUlMRERPQz0xKSAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiIEVRVSAiLS1uby10ZXN0LW1hcmtlciIgKHNldCBCVUlMRFRFU1Q9KSAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiIEVRVSAiLS1wYWNrIiAoc2V0IEJVSUxEUEFDSz0xKSAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiIEVRVSAiLXIiIChzZXQgUkVCVUlMRD0tcikgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCisNCitpZiBub3QgZGVmaW5lZCBCVUlMRFg4NiBpZiBub3QgZGVmaW5lZCBCVUlMRFg2NCAoc2V0IEJVSUxEWDg2PTEpICYmIChzZXQgQlVJTERYNjQ9MSkNCisNCitjYWxsICIlRCVnZXRfZXh0ZXJuYWxzLmJhdCINCisNCitjYWxsICIlUENCVUlMRCVlbnYuYmF0IiB4ODYNCisNCitpZiBkZWZpbmVkIEJVSUxEWDg2ICgNCisgICAgY2FsbCAiJVBDQlVJTEQlYnVpbGQuYmF0IiAtZCAtZSAlUkVCVUlMRCUgJUJVSUxEVEVTVCUNCisgICAgaWYgZXJyb3JsZXZlbCAxIGdvdG8gOmVvZg0KKyAgICBjYWxsICIlUENCVUlMRCVidWlsZC5iYXQiIC1lICVSRUJVSUxEJSAlQlVJTERURVNUJQ0KKyAgICBpZiBlcnJvcmxldmVsIDEgZ290byA6ZW9mDQorKQ0KK2lmIGRlZmluZWQgQlVJTERYNjQgKA0KKyAgICBjYWxsICIlUENCVUlMRCVidWlsZC5iYXQiIC1wIHg2NCAtZCAtZSAlUkVCVUlMRCUgJUJVSUxEVEVTVCUNCisgICAgaWYgZXJyb3JsZXZlbCAxIGdvdG8gOmVvZg0KKyAgICBjYWxsICIlUENCVUlMRCVidWlsZC5iYXQiIC1wIHg2NCAtZSAlUkVCVUlMRCUgJUJVSUxEVEVTVCUNCisgICAgaWYgZXJyb3JsZXZlbCAxIGdvdG8gOmVvZg0KKykNCisNCitpZiBkZWZpbmVkIEJVSUxERE9DICgNCisgICAgY2FsbCAiJVBDQlVJTEQlLi5cRG9jXG1ha2UuYmF0IiBodG1saGVscA0KKyAgICBpZiBlcnJvcmxldmVsIDEgZ290byA6ZW9mDQorKQ0KKw0KK3NldCBCVUlMRF9DTUQ9IiVEJWJ1bmRsZVxzbmFwc2hvdC53aXhwcm9qIg0KK2lmIGRlZmluZWQgQlVJTERURVNUICgNCisgICAgc2V0IEJVSUxEX0NNRD0lQlVJTERfQ01EJSAvcDpVc2VUZXN0TWFya2VyPXRydWUNCispDQoraWYgZGVmaW5lZCBCVUlMRFBBQ0sgKA0KKyAgICBzZXQgQlVJTERfQ01EPSVCVUlMRF9DTUQlIC9wOlBhY2s9dHJ1ZQ0KKykNCitpZiBkZWZpbmVkIFJFQlVJTEQgKA0KKyAgICBzZXQgQlVJTERfQ01EPSVCVUlMRF9DTUQlIC90OlJlYnVpbGQNCispDQorDQoraWYgZGVmaW5lZCBCVUlMRFg4NiAoDQorICAgIG1zYnVpbGQgJUJVSUxEX0NNRCUNCisgICAgaWYgZXJyb3JsZXZlbCAxIGdvdG8gOmVvZg0KKykNCitpZiBkZWZpbmVkIEJVSUxEWDY0ICgNCisgICAgbXNidWlsZCAvcDpQbGF0Zm9ybT14NjQgJUJVSUxEX0NNRCUNCisgICAgaWYgZXJyb3JsZXZlbCAxIGdvdG8gOmVvZg0KKykNCisNCitleGl0IC9CIDANCisNCis6SGVscA0KK2VjaG8gYnVpbGQuYmF0IFsteDg2XSBbLXg2NF0gWy0tZG9jXSBbLWhdIFstLW5vLXRlc3QtbWFya2VyXSBbLS1wYWNrXSBbLXJdDQorZWNoby4NCitlY2hvICAgIC14ODYgICAgICAgICAgICAgICAgQnVpbGQgeDg2IGluc3RhbGxlcnMNCitlY2hvICAgIC14NjQgICAgICAgICAgICAgICAgQnVpbGQgeDY0IGluc3RhbGxlcnMNCitlY2hvICAgIC0tZG9jICAgICAgICAgICAgICAgQnVpbGQgQ0hNIGRvY3VtZW50YXRpb24NCitlY2hvICAgIC0tbm8tdGVzdC1tYXJrZXIgICAgQnVpbGQgd2l0aG91dCB0ZXN0IG1hcmtlcnMNCitlY2hvICAgIC0tcGFjayAgICAgICAgICAgICAgRW1iZWQgY29yZSBNU0lzIGludG8gaW5zdGFsbGVyDQorZWNobyAgICAtciAgICAgICAgICAgICAgICAgIFJlYnVpbGQgcmF0aGVyIHRoYW4gaW5jcmVtZW50YWwgYnVpbGQNCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVpbGRyZWxlYXNlLmJhdCBiL1Rvb2xzL21zaS9idWlsZHJlbGVhc2UuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWUwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVpbGRyZWxlYXNlLmJhdApAQCAtMCwwICsxLDIyOCBAQAorQHNldGxvY2FsDQorQGVjaG8gb2ZmDQorDQorcmVtIFRoaXMgc2NyaXB0IGlzIGludGVuZGVkIGZvciBidWlsZGluZyBvZmZpY2lhbCByZWxlYXNlcyBvZiBQeXRob24uDQorcmVtIFRvIHVzZSBpdCB0byBidWlsZCBhbHRlcm5hdGl2ZSByZWxlYXNlcywgeW91IHNob3VsZCBjbG9uZSB0aGlzIGZpbGUNCityZW0gYW5kIG1vZGlmeSB0aGUgZm9sbG93aW5nIHRocmVlIFVSSXMuDQorDQorcmVtIFRoZXNlIHR3byB3aWxsIGVuc3VyZSB0aGF0IHlvdXIgcmVsZWFzZSBjYW4gYmUgaW5zdGFsbGVkDQorcmVtIGFsb25nc2lkZSBhbiBvZmZpY2lhbCBQeXRob24gcmVsZWFzZSwgYnkgbW9kaWZ5aW5nIHRoZSBHVUlEcyB1c2VkDQorcmVtIGZvciBhbGwgY29tcG9uZW50cy4NCityZW0NCityZW0gVGhlIGZvbGxvd2luZyBzdWJzdGl0dXRpb25zIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVsZWFzZSBVUkk6DQorcmVtICAgICBWYXJpYWJsZSAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICBFeGFtcGxlDQorcmVtICAgICB7YXJjaH0gICAgICAgICAgYXJjaGl0ZWN0dXJlICAgICAgICBhbWQ2NCwgd2luMzINCitzZXQgUkVMRUFTRV9VUkk9aHR0cDovL3d3dy5weXRob24ub3JnL3thcmNofQ0KKw0KK3JlbSBUaGlzIGlzIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZG93bmxvYWQgaW5zdGFsbGF0aW9uIGZpbGVzLg0KK3JlbSBUaGUgZmlsZXMgYXZhaWxhYmxlIGZyb20gdGhlIGRlZmF1bHQgVVJMICp3aWxsKiBjb25mbGljdCB3aXRoIHlvdXINCityZW0gaW5zdGFsbGVyLiBUcnVzdCBtZSwgeW91IGRvbid0IHdhbnQgdGhlbSwgZXZlbiBpZiBpdCBzZWVtcyBsaWtlIGENCityZW0gZ29vZCBpZGVhLg0KK3JlbQ0KK3JlbSBUaGUgZm9sbG93aW5nIHN1YnN0aXR1dGlvbnMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBkb3dubG9hZCBVUkw6DQorcmVtICAgICBWYXJpYWJsZSAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICBFeGFtcGxlDQorcmVtICAgICB7dmVyc2lvbn0gICAgICAgdmVyc2lvbiBudW1iZXIgICAgICAzLjUuMA0KK3JlbSAgICAge2FyY2h9ICAgICAgICAgIGFyY2hpdGVjdHVyZSAgICAgICAgYW1kNjQsIHdpbjMyDQorcmVtICAgICB7cmVsZWFzZW5hbWV9ICAgcmVsZWFzZSBuYW1lICAgICAgICBhMSwgYjIsIHJjMyAob3IgYmxhbmsgZm9yIGZpbmFsKQ0KK3JlbSAgICAge21zaX0gICAgICAgICAgIE1TSSBmaWxlbmFtZSAgICAgICAgY29yZS5tc2kNCitzZXQgRE9XTkxPQURfVVJMPWh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi97dmVyc2lvbn0ve2FyY2h9e3JlbGVhc2VuYW1lfS97bXNpfQ0KKw0KK3NldCBEPSV+ZHAwDQorc2V0IFBDQlVJTEQ9JUQlLi5cLi5cUENCdWlsZFwNCitzZXQgRVhURVJOQUxTPSVEJS4uXC4uXGV4dGVybmFsc1x3aW5kb3dzLWluc3RhbGxlclwNCisNCitzZXQgQlVJTERYODY9DQorc2V0IEJVSUxEWDY0PQ0KK3NldCBUQVJHRVQ9UmVidWlsZA0KK3NldCBURVNUVEFSR0VURElSPQ0KK3NldCBQR089DQorDQorDQorOkNoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItaCIgZ290byBIZWxwDQoraWYgIiUxIiBFUVUgIi1jIiAoc2V0IENFUlROQU1FPSV+MikgJiYgc2hpZnQgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLS1jZXJ0aWZpY2F0ZSIgKHNldCBDRVJUTkFNRT0lfjIpICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi1vIiAoc2V0IE9VVERJUj0lfjIpICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi0tb3V0IiAoc2V0IE9VVERJUj0lfjIpICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi1EIiAoc2V0IFNLSVBET0M9MSkgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLS1za2lwLWRvYyIgKHNldCBTS0lQRE9DPTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi1CIiAoc2V0IFNLSVBCVUlMRD0xKSAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItLXNraXAtYnVpbGQiIChzZXQgU0tJUEJVSUxEPTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi0tZG93bmxvYWQiIChzZXQgRE9XTkxPQURfVVJMPSV+MikgJiYgc2hpZnQgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLS10ZXN0IiAoc2V0IFRFU1RUQVJHRVRESVI9JX4yKSAmJiBzaGlmdCAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItYiIgKHNldCBUQVJHRVQ9QnVpbGQpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi0tYnVpbGQiIChzZXQgVEFSR0VUPUJ1aWxkKSAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICIteDg2IiAoc2V0IEJVSUxEWDg2PTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi14NjQiIChzZXQgQlVJTERYNjQ9MSkgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLS1wZ28iIChzZXQgUEdPPSV+MikgJiYgc2hpZnQgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCisNCitpZiAiJTEiIE5FUSAiIiBlY2hvIEludmFsaWQgb3B0aW9uOiAiJTEiICYmIGV4aXQgL0IgMQ0KKw0KK2lmIG5vdCBkZWZpbmVkIEJVSUxEWDg2IGlmIG5vdCBkZWZpbmVkIEJVSUxEWDY0IChzZXQgQlVJTERYODY9MSkgJiYgKHNldCBCVUlMRFg2ND0xKQ0KKw0KK2NhbGwgIiVEJWdldF9leHRlcm5hbHMuYmF0Ig0KKw0KKzpidWlsZGRvYw0KK2lmICIlU0tJUEJVSUxEJSIgRVFVICIxIiBnb3RvIHNraXBkb2MNCitpZiAiJVNLSVBET0MlIiBFUVUgIjEiIGdvdG8gc2tpcGRvYw0KKw0KK2lmIG5vdCBkZWZpbmVkIFBZVEhPTiB3aGVyZSBweSAtcSB8fCBlY2hvIENhbm5vdCBmaW5kIHB5IG9uIHBhdGggYW5kIFBZVEhPTiBpcyBub3Qgc2V0LiAmJiBleGl0IC9CIDENCitpZiBub3QgZGVmaW5lZCBTUEhJTlhCVUlMRCB3aGVyZSBzcGhpbngtYnVpbGQgLXEgfHwgZWNobyBDYW5ub3QgZmluZCBzcGhpbngtYnVpbGQgb24gcGF0aCBhbmQgU1BISU5YQlVJTEQgaXMgbm90IHNldC4gJiYgZXhpdCAvQiAxDQorDQorY2FsbCAiJUQlLi5cLi5cZG9jXG1ha2UuYmF0IiBodG1saGVscA0KK2lmIGVycm9ybGV2ZWwgMSBnb3RvIDplb2YNCis6c2tpcGRvYw0KKw0KK3doZXJlIGhnIC9xIHx8IGVjaG8gQ2Fubm90IGZpbmQgTWVyY3VyaWFsIG9uIFBBVEggJiYgZXhpdCAvQiAxDQorDQord2hlcmUgZGxsdG9vbCAvcSAmJiBnb3RvIHNraXBkbGx0b29sc2VhcmNoDQorc2V0IF9ETExUT09MX1BBVEg9DQord2hlcmUgL1IgIiVFWFRFUk5BTFMlXCIgZGxsdG9vbCA+ICIlVEVNUCVcZGxsdG9vbC5sb2MiIDI+IG51bCAmJiBzZXQgL1AgX0RMTFRPT0xfUEFUSD0gPCAiJVRFTVAlXGRsbHRvb2wubG9jIiAmIGRlbCAiJVRFTVAlXGRsbHRvb2wubG9jIiANCitpZiBub3QgZXhpc3QgIiVfRExMVE9PTF9QQVRIJSIgZWNobyBDYW5ub3QgZmluZCBiaW51dGlscyBvbiBQQVRIIG9yIGluIGV4dGVybmFsICYmIGV4aXQgL0IgMQ0KK2ZvciAlJWYgaW4gKCVfRExMVE9PTF9QQVRIJSkgZG8gc2V0IFBBVEg9JVBBVEglOyUlfmRwZg0KK3NldCBfRExMVE9PTF9QQVRIPQ0KKzpza2lwZGxsdG9vbHNlYXJjaA0KKw0KK2lmIGRlZmluZWQgQlVJTERYODYgKA0KKyAgICBjYWxsIDpidWlsZCB4ODYNCisgICAgaWYgZXJyb3JsZXZlbCAxIGV4aXQgL0INCispDQorDQoraWYgZGVmaW5lZCBCVUlMRFg2NCAoDQorICAgIGNhbGwgOmJ1aWxkIHg2NCAiJVBHTyUiDQorICAgIGlmIGVycm9ybGV2ZWwgMSBleGl0IC9CDQorKQ0KKw0KK2lmIGRlZmluZWQgVEVTVFRBUkdFVERJUiAoDQorICAgIGNhbGwgIiVEJXRlc3RyZWxlYXNlLmJhdCIgLXQgIiVURVNUVEFSR0VURElSJSINCispDQorDQorZXhpdCAvQiAwDQorDQorOmJ1aWxkDQorQHNldGxvY2FsDQorQGVjaG8gb2ZmDQorDQoraWYgIiUxIiBFUVUgIng4NiIgKA0KKyAgICBjYWxsICIlUENCVUlMRCVlbnYuYmF0IiB4ODYNCisgICAgc2V0IEJVSUxEPSVQQ0JVSUxEJXdpbjMyXA0KKyAgICBzZXQgQlVJTERfUExBVD1XaW4zMg0KKyAgICBzZXQgT1VURElSX1BMQVQ9d2luMzINCisgICAgc2V0IE9CSkRJUl9QTEFUPXg4Ng0KKykgZWxzZSBpZiAiJX4yIiBORVEgIiIgKA0KKyAgICBjYWxsICIlUENCVUlMRCVlbnYuYmF0IiBhbWQ2NA0KKyAgICBzZXQgUEdPPSV+Mg0KKyAgICBzZXQgQlVJTEQ9JVBDQlVJTEQlYW1kNjQtcGdvXA0KKyAgICBzZXQgQlVJTERfUExBVD14NjQNCisgICAgc2V0IE9VVERJUl9QTEFUPWFtZDY0DQorICAgIHNldCBPQkpESVJfUExBVD14NjQNCispIGVsc2UgKA0KKyAgICBjYWxsICIlUENCVUlMRCVlbnYuYmF0IiBhbWQ2NA0KKyAgICBzZXQgQlVJTEQ9JVBDQlVJTEQlYW1kNjRcDQorICAgIHNldCBCVUlMRF9QTEFUPXg2NA0KKyAgICBzZXQgT1VURElSX1BMQVQ9YW1kNjQNCisgICAgc2V0IE9CSkRJUl9QTEFUPXg2NA0KKykNCisNCitpZiBleGlzdCAiJUJVSUxEJWVuLXVzIiAoDQorICAgIGVjaG8gRGVsZXRpbmcgJUJVSUxEJWVuLXVzDQorICAgIHJtZGlyIC9xL3MgIiVCVUlMRCVlbi11cyINCisgICAgaWYgZXJyb3JsZXZlbCAxIGV4aXQgL0INCispDQorDQoraWYgZXhpc3QgIiVEJW9ialxSZWxlYXNlXyVPQkpESVJfUExBVCUiICgNCisgICAgZWNobyBEZWxldGluZyAiJUQlb2JqXFJlbGVhc2VfJU9CSkRJUl9QTEFUJSINCisgICAgcm1kaXIgL3EvcyAiJUQlb2JqXFJlbGVhc2VfJU9CSkRJUl9QTEFUJSINCisgICAgaWYgZXJyb3JsZXZlbCAxIGV4aXQgL0INCispDQorDQoraWYgbm90ICIlQ0VSVE5BTUUlIiBFUVUgIiIgKA0KKyAgICBzZXQgQ0VSVE9QVFM9Ii9wOlNpZ25pbmdDZXJ0aWZpY2F0ZT0lQ0VSVE5BTUUlIg0KKykgZWxzZSAoDQorICAgIHNldCBDRVJUT1BUUz0NCispDQorDQoraWYgbm90ICIlU0tJUEJVSUxEJSIgRVFVICIxIiAoDQorICAgIEBjYWxsICIlUENCVUlMRCVidWlsZC5iYXQiIC1lIC1wICVCVUlMRF9QTEFUJSAtZCAtdCAlVEFSR0VUJSAlQ0VSVE9QVFMlDQorICAgIEBpZiBlcnJvcmxldmVsIDEgZXhpdCAvQg0KKyAgICBAcmVtIGJ1aWxkLmJhdCB0dXJucyBlY2hvIGJhY2sgb24sIHNvIHdlIGRpc2FibGUgaXQgYWdhaW4NCisgICAgQGVjaG8gb2ZmDQorICAgIA0KKyAgICBpZiAiJVBHTyUiIEVRVSAiIiAoDQorICAgICAgICBAY2FsbCAiJVBDQlVJTEQlYnVpbGQuYmF0IiAtZSAtcCAlQlVJTERfUExBVCUgLXQgJVRBUkdFVCUgJUNFUlRPUFRTJQ0KKyAgICApIGVsc2UgKA0KKyAgICAgICAgQGNhbGwgIiVQQ0JVSUxEJWJ1aWxkLmJhdCIgLWUgLXAgJUJVSUxEX1BMQVQlIC1jIFBHSW5zdHJ1bWVudCAtdCAlVEFSR0VUJSAlQ0VSVE9QVFMlDQorICAgICAgICBAaWYgZXJyb3JsZXZlbCAxIGV4aXQgL0INCisgICAgICAgIA0KKyAgICAgICAgQGRlbCAiJUJVSUxEJSoucGdjIg0KKyAgICAgICAgaWYgIiVQR08lIiBFUVUgImRlZmF1bHQiICgNCisgICAgICAgICAgICAiJUJVSUxEJXB5dGhvbi5leGUiIC1tIHRlc3QgLXEgLS1wZ28NCisgICAgICAgICkgZWxzZSBpZiAiJVBHTyUiIEVRVSAiZGVmYXVsdDIiICgNCisgICAgICAgICAgICAiJUJVSUxEJXB5dGhvbi5leGUiIC1tIHRlc3QgLXIgLXEgLS1wZ28NCisgICAgICAgICAgICAiJUJVSUxEJXB5dGhvbi5leGUiIC1tIHRlc3QgLXIgLXEgLS1wZ28NCisgICAgICAgICkgZWxzZSBpZiAiJVBHTyUiIEVRVSAiZGVmYXVsdDEwIiAoDQorICAgICAgICAgICAgZm9yIC9MICUlaSBpbiAoMCwgMSwgOSkgZG8gIiVCVUlMRCVweXRob24uZXhlIiAtbSB0ZXN0IC1xIC1yIC0tcGdvDQorICAgICAgICApIGVsc2UgaWYgIiVQR08lIiBFUVUgInB5YmVuY2giICgNCisgICAgICAgICAgICAiJUJVSUxEJXB5dGhvbi5leGUiICIlUENCVUlMRCUuLlxUb29sc1xweWJlbmNoXHB5YmVuY2gucHkiDQorICAgICAgICApIGVsc2UgKA0KKyAgICAgICAgICAgICIlQlVJTEQlcHl0aG9uLmV4ZSIgJVBHTyUNCisgICAgICAgICkNCisgICAgICAgIA0KKyAgICAgICAgQGNhbGwgIiVQQ0JVSUxEJWJ1aWxkLmJhdCIgLWUgLXAgJUJVSUxEX1BMQVQlIC1jIFBHVXBkYXRlIC10IEJ1aWxkICVDRVJUT1BUUyUNCisgICAgKQ0KKyAgICBAaWYgZXJyb3JsZXZlbCAxIGV4aXQgL0INCisgICAgQGVjaG8gb2ZmDQorKQ0KKw0KK3NldCBCVUlMRE9QVFM9L3A6UGxhdGZvcm09JTEgL3A6QnVpbGRGb3JSZWxlYXNlPXRydWUgL3A6RG93bmxvYWRVcmw9JURPV05MT0FEX1VSTCUgL3A6RG93bmxvYWRVcmxCYXNlPSVET1dOTE9BRF9VUkxfQkFTRSUgL3A6UmVsZWFzZVVyaT0lUkVMRUFTRV9VUkklDQoraWYgIiVQR08lIiBORVEgIiIgc2V0IEJVSUxET1BUUz0lQlVJTERPUFRTJSAvcDpQR09CdWlsZFBhdGg9JUJVSUxEJQ0KK21zYnVpbGQgIiVEJWJ1bmRsZVxyZWxlYXNlbG9jYWwud2l4cHJvaiIgL3Q6UmVidWlsZCAlQlVJTERPUFRTJSAlQ0VSVE9QVFMlIC9wOlJlYnVpbGRBbGw9dHJ1ZQ0KK2lmIGVycm9ybGV2ZWwgMSBleGl0IC9CDQorbXNidWlsZCAiJUQlYnVuZGxlXHJlbGVhc2V3ZWIud2l4cHJvaiIgL3Q6UmVidWlsZCAlQlVJTERPUFRTJSAlQ0VSVE9QVFMlIC9wOlJlYnVpbGRBbGw9ZmFsc2UNCitpZiBlcnJvcmxldmVsIDEgZXhpdCAvQg0KKw0KK21zYnVpbGQgIiVEJW1ha2VfemlwLnByb2oiIC90OkJ1aWxkICVCVUlMRE9QVFMlICVDRVJUT1BUUyUNCisNCitpZiBub3QgIiVPVVRESVIlIiBFUVUgIiIgKA0KKyAgICBta2RpciAiJU9VVERJUiVcJU9VVERJUl9QTEFUJSINCisgICAgY29weSAvWSAiJUJVSUxEJWVuLXVzXCouY2FiIiAiJU9VVERJUiVcJU9VVERJUl9QTEFUJSINCisgICAgY29weSAvWSAiJUJVSUxEJWVuLXVzXCouZXhlIiAiJU9VVERJUiVcJU9VVERJUl9QTEFUJSINCisgICAgY29weSAvWSAiJUJVSUxEJWVuLXVzXCoubXNpIiAiJU9VVERJUiVcJU9VVERJUl9QTEFUJSINCisgICAgY29weSAvWSAiJUJVSUxEJWVuLXVzXCoubXN1IiAiJU9VVERJUiVcJU9VVERJUl9QTEFUJSINCispDQorDQorZXhpdCAvQiAwDQorDQorOkhlbHANCitlY2hvIGJ1aWxkcmVsZWFzZS5iYXQgWy0tb3V0IERJUl0gWy14ODZdIFsteDY0XSBbLS1jZXJ0aWZpY2F0ZSBDRVJUTkFNRV0gWy0tYnVpbGRdIFstLXNraXAtYnVpbGRdDQorZWNobyAgICAgICAgICAgICAgICAgIFstLXBnbyBDT01NQU5EXSBbLS1za2lwLWRvY10gWy0tZG93bmxvYWQgRE9XTkxPQUQgVVJMXSBbLS10ZXN0IFRBUkdFVERJUl0NCitlY2hvICAgICAgICAgICAgICAgICAgWy1oXQ0KK2VjaG8uDQorZWNobyAgICAtLW91dCAoLW8pICAgICAgICAgIFNwZWNpZnkgYW4gYWRkaXRpb25hbCBvdXRwdXQgZGlyZWN0b3J5IGZvciBpbnN0YWxsZXJzDQorZWNobyAgICAteDg2ICAgICAgICAgICAgICAgIEJ1aWxkIHg4NiBpbnN0YWxsZXJzDQorZWNobyAgICAteDY0ICAgICAgICAgICAgICAgIEJ1aWxkIHg2NCBpbnN0YWxsZXJzDQorZWNobyAgICAtLWJ1aWxkICgtYikgICAgICAgIEluY3JlbWVudGFsbHkgYnVpbGQgUHl0aG9uIHJhdGhlciB0aGFuIHJlYnVpbGRpbmcNCitlY2hvICAgIC0tc2tpcC1idWlsZCAoLUIpICAgRG8gbm90IGJ1aWxkIFB5dGhvbiAoanVzdCBkbyB0aGUgaW5zdGFsbGVycykNCitlY2hvICAgIC0tc2tpcC1kb2MgKC1EKSAgICAgRG8gbm90IGJ1aWxkIGRvY3VtZW50YXRpb24NCitlY2hvICAgIC0tcGdvICAgICAgICAgICAgICAgQnVpbGQgeDY0IGluc3RhbGxlcnMgdXNpbmcgUEdPDQorZWNobyAgICAtLWRvd25sb2FkICAgICAgICAgIFNwZWNpZnkgdGhlIGZ1bGwgZG93bmxvYWQgVVJMIGZvciBNU0lzDQorZWNobyAgICAtLXRlc3QgICAgICAgICAgICAgIFNwZWNpZnkgdGhlIHRlc3QgZGlyZWN0b3J5IHRvIHJ1biB0aGUgaW5zdGFsbGVyIHRlc3RzDQorZWNobyAgICAtaCAgICAgICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGluZm9ybWF0aW9uDQorZWNoby4NCitlY2hvIElmIG5vIGFyY2hpdGVjdHVyZSBpcyBzcGVjaWZpZWQsIGFsbCBhcmNoaXRlY3R1cmVzIHdpbGwgYmUgYnVpbHQuDQorZWNobyBJZiAtLXRlc3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGluc3RhbGxlciB0ZXN0cyBhcmUgbm90IHJ1bi4NCitlY2hvLg0KK2VjaG8gRm9yIHRoZSAtLXBnbyBvcHRpb24sIGFueSBQeXRob24gY29tbWFuZCBsaW5lIGNhbiBiZSB1c2VkIGFzIHdlbGwgYXMgdGhlDQorZWNobyBmb2xsb3dpbmcgc2hvcnRjdXRzOg0KK2VjaG8gICAgIFNob3J0Y3V0ICAgICAgICBEZXNjcmlwdGlvbg0KK2VjaG8gICAgIGRlZmF1bHQgICAgICAgICBUZXN0IHN1aXRlIHdpdGggLS1wZ28NCitlY2hvICAgICBkZWZhdWx0MiAgICAgICAgMnggdGVzdCBzdWl0ZSB3aXRoIC0tcGdvIGFuZCByYW5kb21pemVkIHRlc3Qgb3JkZXINCitlY2hvICAgICBkZWZhdWx0MTAgICAgICAgMTB4IHRlc3Qgc3VpdGUgd2l0aCAtLXBnbyBhbmQgcmFuZG9taXplZCB0ZXN0IG9yZGVyDQorZWNobyAgICAgcHliZW5jaCAgICAgICAgIHB5YmVuY2ggc2NyaXB0DQorZWNoby4NCitlY2hvIFRoZSBmb2xsb3dpbmcgc3Vic3RpdHV0aW9ucyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGRvd25sb2FkIFVSTDoNCitlY2hvICAgICBWYXJpYWJsZSAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICBFeGFtcGxlDQorZWNobyAgICAge3ZlcnNpb259ICAgICAgIHZlcnNpb24gbnVtYmVyICAgICAgMy41LjANCitlY2hvICAgICB7YXJjaH0gICAgICAgICAgYXJjaGl0ZWN0dXJlICAgICAgICBhbWQ2NCwgd2luMzINCitlY2hvICAgICB7cmVsZWFzZW5hbWV9ICAgcmVsZWFzZSBuYW1lICAgICAgICBhMSwgYjIsIHJjMyAob3IgYmxhbmsgZm9yIGZpbmFsKQ0KK2VjaG8gICAgIHttc2l9ICAgICAgICAgICBNU0kgZmlsZW5hbWUgICAgICAgIGNvcmUubXNpDQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9EZWZhdWx0LnRobSBiL1Rvb2xzL21zaS9idW5kbGUvRGVmYXVsdC50aG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5Yzk3YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvRGVmYXVsdC50aG0KQEAgLTAsMCArMSwxMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8VGhlbWUgeG1sbnM9Imh0dHA6Ly93aXh0b29sc2V0Lm9yZy9zY2hlbWFzL3RobXV0aWwvMjAxMCI+CisgICAgPFdpbmRvdyBXaWR0aD0iNjcwIiBIZWlnaHQ9IjQxMiIgSGV4U3R5bGU9IjEwMGEwMDAwIiBGb250SWQ9IjAiPiMobG9jLkNhcHRpb24pPC9XaW5kb3c+CisgICAgPEZvbnQgSWQ9IjAiIEhlaWdodD0iLTE0IiBXZWlnaHQ9IjUwMCIgRm9yZWdyb3VuZD0iMDAwMDAwIiBCYWNrZ3JvdW5kPSJmZmZmZmYiPlNlZ29lIFVJPC9Gb250PgorICAgIDxGb250IElkPSIxIiBIZWlnaHQ9Ii0yNiIgV2VpZ2h0PSI1MDAiIEZvcmVncm91bmQ9IjAwMDAwMCIgQmFja2dyb3VuZD0iZmZmZmZmIj5TZWdvZSBVSTwvRm9udD4KKyAgICA8Rm9udCBJZD0iMiIgSGVpZ2h0PSItMjQiIFdlaWdodD0iNTAwIiBGb3JlZ3JvdW5kPSI4MDgwODAiIEJhY2tncm91bmQ9ImZmZmZmZiI+U2Vnb2UgVUk8L0ZvbnQ+CisgICAgPEZvbnQgSWQ9IjMiIEhlaWdodD0iLTE0IiBXZWlnaHQ9IjUwMCIgRm9yZWdyb3VuZD0iMDAwMDAwIiBCYWNrZ3JvdW5kPSJmZmZmZmYiPlNlZ29lIFVJPC9Gb250PgorICAgIDxGb250IElkPSI0IiBIZWlnaHQ9Ii0xNCIgV2VpZ2h0PSI1MDAiIEZvcmVncm91bmQ9ImZmMDAwMCIgQmFja2dyb3VuZD0iZmZmZmZmIiBVbmRlcmxpbmU9InllcyI+U2Vnb2UgVUk8L0ZvbnQ+CisgICAgPEZvbnQgSWQ9IjUiIEhlaWdodD0iLTE0IiBXZWlnaHQ9IjUwMCIgRm9yZWdyb3VuZD0iODA4MDgwIiBCYWNrZ3JvdW5kPSJmZmZmZmYiPlNlZ29lIFVJPC9Gb250PgorCisgICAgPFBhZ2UgTmFtZT0iSGVscCI+CisgICAgICAgIDxUZXh0IFg9IjE4NSIgWT0iMTEiIFdpZHRoPSItMTEiIEhlaWdodD0iMzYiIEZvbnRJZD0iMSIgRGlzYWJsZVByZWZpeD0ieWVzIj4jKGxvYy5IZWxwSGVhZGVyKTwvVGV4dD4KKyAgICAgICAgPEltYWdlIFg9IjAiIFk9IjAiIFdpZHRoPSIxNzgiIEhlaWdodD0iMzgyIiBJbWFnZUZpbGU9IlNpZGVCYXIucG5nIi8+CisKKyAgICAgICAgPEh5cGVydGV4dCBYPSIxODUiIFk9IjUwIiBXaWR0aD0iLTExIiBIZWlnaHQ9Ii0zNSIgRm9udElkPSIzIiBEaXNhYmxlUHJlZml4PSJ5ZXMiPiMobG9jLkhlbHBUZXh0KTwvSHlwZXJ0ZXh0PgorICAgICAgICA8QnV0dG9uIE5hbWU9IlN1Y2Nlc3NDYW5jZWxCdXR0b24iIFg9Ii0xMSIgWT0iLTExIiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIwIj4jKGxvYy5DbG9zZUJ1dHRvbik8L0J1dHRvbj4KKyAgICA8L1BhZ2U+CisgICAgPFBhZ2UgTmFtZT0iSW5zdGFsbCI+CisgICAgICAgIDxUZXh0IFg9IjE4NSIgWT0iMTEiIFdpZHRoPSItMTEiIEhlaWdodD0iMzYiIEZvbnRJZD0iMSIgRGlzYWJsZVByZWZpeD0ieWVzIj4jKGxvYy5JbnN0YWxsSGVhZGVyKTwvVGV4dD4KKyAgICAgICAgPEltYWdlIFg9IjAiIFk9IjAiIFdpZHRoPSIxNzgiIEhlaWdodD0iMzgyIiBJbWFnZUZpbGU9IlNpZGVCYXIucG5nIi8+CisKKyAgICAgICAgPFRleHQgWD0iMTg1IiBZPSI1MCIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSI1MCIgRm9udElkPSIzIiBUYWJTdG9wPSJ5ZXMiPiMobG9jLkluc3RhbGxNZXNzYWdlKTwvVGV4dD4KKworICAgICAgICA8QnV0dG9uIE5hbWU9Ikluc3RhbGxCdXR0b24iIFg9IjE4NSIgWT0iMTAxIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjEwOSIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjMiIEhleFN0eWxlPSIweEUiPiMobG9jLkluc3RhbGxCdXR0b24pPC9CdXR0b24+CisgICAgICAgIDxCdXR0b24gTmFtZT0iSW5zdGFsbEN1c3RvbUJ1dHRvbiIgWD0iMTg1IiBZPSIyMjEiIFdpZHRoPSItMTEiIEhlaWdodD0iNTkiIFRhYlN0b3A9InllcyIgRm9udElkPSIzIiBIZXhTdHlsZT0iMHhFIj4jKGxvYy5JbnN0YWxsQ3VzdG9tQnV0dG9uKTwvQnV0dG9uPgorCisgICAgICAgIDxDaGVja2JveCBOYW1lPSJJbnN0YWxsTGF1bmNoZXJBbGxVc2VycyIgWD0iMTg1IiBZPSItMzciIFdpZHRoPSItMTAwIiBIZWlnaHQ9IjI0IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyI+Iyhsb2MuU2hvcnRJbnN0YWxsTGF1bmNoZXJBbGxVc2Vyc0xhYmVsKTwvQ2hlY2tib3g+CisgICAgICAgIDxDaGVja2JveCBOYW1lPSJQcmVwZW5kUGF0aCIgWD0iMTg1IiBZPSItMTMiIFdpZHRoPSItMTAwIiBIZWlnaHQ9IjI0IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyI+Iyhsb2MuU2hvcnRQcmVwZW5kUGF0aExhYmVsKTwvQ2hlY2tib3g+CisKKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJJbnN0YWxsQ2FuY2VsQnV0dG9uIiBYPSItMTEiIFk9Ii0xMSIgV2lkdGg9Ijg1IiBIZWlnaHQ9IjI3IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMCI+Iyhsb2MuQ2FuY2VsQnV0dG9uKTwvQnV0dG9uPgorICAgIDwvUGFnZT4KKyAgICA8UGFnZSBOYW1lPSJVcGdyYWRlIj4KKyAgICAgICAgPFRleHQgWD0iMTg1IiBZPSIxMSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIzNiIgRm9udElkPSIxIiBEaXNhYmxlUHJlZml4PSJ5ZXMiPiMobG9jLkluc3RhbGxVcGdyYWRlSGVhZGVyKTwvVGV4dD4KKyAgICAgICAgPEltYWdlIFg9IjAiIFk9IjAiIFdpZHRoPSIxNzgiIEhlaWdodD0iMzgyIiBJbWFnZUZpbGU9IlNpZGVCYXIucG5nIi8+CisKKyAgICAgICAgPFRleHQgWD0iMTg1IiBZPSI1MCIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSI1MCIgRm9udElkPSIzIiBUYWJTdG9wPSJ5ZXMiPiMobG9jLkluc3RhbGxVcGdyYWRlTWVzc2FnZSk8L1RleHQ+CisKKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJJbnN0YWxsVXBncmFkZUJ1dHRvbiIgWD0iMTg1IiBZPSIxMDEiIFdpZHRoPSItMTEiIEhlaWdodD0iMTI5IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyIgSGV4U3R5bGU9IjB4RSI+Iyhsb2MuSW5zdGFsbFVwZ3JhZGVCdXR0b24pPC9CdXR0b24+CisgICAgICAgIDxCdXR0b24gTmFtZT0iSW5zdGFsbFVwZ3JhZGVDdXN0b21CdXR0b24iIFg9IjE4NSIgWT0iMjQxIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjU5IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyIgSGV4U3R5bGU9IjB4RSI+Iyhsb2MuSW5zdGFsbFVwZ3JhZGVDdXN0b21CdXR0b24pPC9CdXR0b24+CisKKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJJbnN0YWxsQ2FuY2VsQnV0dG9uIiBYPSItMTEiIFk9Ii0xMSIgV2lkdGg9Ijg1IiBIZWlnaHQ9IjI3IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMCI+Iyhsb2MuQ2FuY2VsQnV0dG9uKTwvQnV0dG9uPgorICAgIDwvUGFnZT4KKyAgICA8UGFnZSBOYW1lPSJTaW1wbGVJbnN0YWxsIj4KKyAgICAgICAgPFRleHQgWD0iMTg1IiBZPSIxMSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIzNiIgRm9udElkPSIxIiBEaXNhYmxlUHJlZml4PSJ5ZXMiPiMobG9jLkluc3RhbGxIZWFkZXIpPC9UZXh0PgorICAgICAgICA8SW1hZ2UgWD0iMCIgWT0iMCIgV2lkdGg9IjE3OCIgSGVpZ2h0PSIzODIiIEltYWdlRmlsZT0iU2lkZUJhci5wbmciLz4KKworICAgICAgICA8QnV0dG9uIE5hbWU9Ikluc3RhbGxTaW1wbGVCdXR0b24iIFg9IjE4NSIgWT0iMTAxIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjEyOSIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjMiIEhpZGVXaGVuRGlzYWJsZWQ9InllcyIgSGV4U3R5bGU9IjB4RiI+Iyhsb2MuSW5zdGFsbFNpbXBsZUJ1dHRvbik8L0J1dHRvbj4KKworICAgICAgICA8QnV0dG9uIE5hbWU9Ikluc3RhbGxDYW5jZWxCdXR0b24iIFg9Ii0xMSIgWT0iLTExIiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIwIj4jKGxvYy5DYW5jZWxCdXR0b24pPC9CdXR0b24+CisgICAgPC9QYWdlPgorICAgIDxQYWdlIE5hbWU9IkN1c3RvbTEiPgorICAgICAgICA8VGV4dCBYPSIxODUiIFk9IjExIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjM2IiBGb250SWQ9IjEiIERpc2FibGVQcmVmaXg9InllcyI+Iyhsb2MuQ3VzdG9tMUhlYWRlcik8L1RleHQ+CisgICAgICAgIDxJbWFnZSBYPSIwIiBZPSIwIiBXaWR0aD0iMTc4IiBIZWlnaHQ9IjM4MiIgSW1hZ2VGaWxlPSJTaWRlQmFyLnBuZyIvPgorICAgICAgICAKKyAgICAgICAgPENoZWNrYm94IE5hbWU9IkluY2x1ZGVfZG9jIiBYPSIxODUiIFk9IjUxIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjI0IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyIgSGlkZVdoZW5EaXNhYmxlZD0ieWVzIj4jKGxvYy5JbmNsdWRlX2RvY0xhYmVsKTwvQ2hlY2tib3g+CisgICAgICAgIDxUZXh0IFg9IjIwNSIgWT0iNzYiIFdpZHRoPSItMTEiIEhlaWdodD0iMjQiIFRhYlN0b3A9Im5vIiBGb250SWQ9IjUiPiMobG9jLkluY2x1ZGVfZG9jSGVscExhYmVsKTwvVGV4dD4KKyAgICAgICAgCisgICAgICAgIDxDaGVja2JveCBOYW1lPSJJbmNsdWRlX3BpcCIgWD0iMTg1IiBZPSIxMDEiIFdpZHRoPSItMTEiIEhlaWdodD0iMjQiIFRhYlN0b3A9InllcyIgRm9udElkPSIzIiBIaWRlV2hlbkRpc2FibGVkPSJ5ZXMiPiMobG9jLkluY2x1ZGVfcGlwTGFiZWwpPC9DaGVja2JveD4KKyAgICAgICAgPFRleHQgWD0iMjA1IiBZPSIxMjYiIFdpZHRoPSItMTEiIEhlaWdodD0iMjQiIFRhYlN0b3A9Im5vIiBGb250SWQ9IjUiPiMobG9jLkluY2x1ZGVfcGlwSGVscExhYmVsKTwvVGV4dD4KKyAgICAgICAgCisgICAgICAgIDxDaGVja2JveCBOYW1lPSJJbmNsdWRlX3RjbHRrIiBYPSIxODUiIFk9IjE1MSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIyNCIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjMiIEhpZGVXaGVuRGlzYWJsZWQ9InllcyI+Iyhsb2MuSW5jbHVkZV90Y2x0a0xhYmVsKTwvQ2hlY2tib3g+CisgICAgICAgIDxUZXh0IFg9IjIwNSIgWT0iMTc2IiBXaWR0aD0iLTExIiBIZWlnaHQ9IjI0IiBUYWJTdG9wPSJubyIgRm9udElkPSI1Ij4jKGxvYy5JbmNsdWRlX3RjbHRrSGVscExhYmVsKTwvVGV4dD4KKyAgICAgICAgCisgICAgICAgIDxDaGVja2JveCBOYW1lPSJJbmNsdWRlX3Rlc3QiIFg9IjE4NSIgWT0iMjAxIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjI0IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyIgSGlkZVdoZW5EaXNhYmxlZD0ieWVzIj4jKGxvYy5JbmNsdWRlX3Rlc3RMYWJlbCk8L0NoZWNrYm94PgorICAgICAgICA8VGV4dCBYPSIyMDUiIFk9IjIyNiIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIyNCIgVGFiU3RvcD0ibm8iIEZvbnRJZD0iNSI+Iyhsb2MuSW5jbHVkZV90ZXN0SGVscExhYmVsKTwvVGV4dD4KKworICAgICAgICA8Q2hlY2tib3ggTmFtZT0iSW5jbHVkZV9sYXVuY2hlciIgWD0iMTg1IiBZPSIyNTEiIFdpZHRoPSIxMDAiIEhlaWdodD0iMjQiIFRhYlN0b3A9InllcyIgRm9udElkPSIzIiBIaWRlV2hlbkRpc2FibGVkPSJubyI+Iyhsb2MuSW5jbHVkZV9sYXVuY2hlckxhYmVsKTwvQ2hlY2tib3g+CisgICAgICAgIDxDaGVja2JveCBOYW1lPSJDdXN0b21JbnN0YWxsTGF1bmNoZXJBbGxVc2VycyIgWD0iMjg1IiBZPSIyNTEiIFdpZHRoPSItMTEiIEhlaWdodD0iMjQiIFRhYlN0b3A9InllcyIgRm9udElkPSIzIj4jKGxvYy5JbnN0YWxsTGF1bmNoZXJBbGxVc2Vyc0xhYmVsKTwvQ2hlY2tib3g+CisgICAgICAgIDxUZXh0IE5hbWU9IkluY2x1ZGVfbGF1bmNoZXJIZWxwIiBYPSIyMDUiIFk9IjI3NiIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIyNCIgVGFiU3RvcD0ibm8iIEZvbnRJZD0iNSI+PC9UZXh0PgorCisgICAgICAgIDxCdXR0b24gTmFtZT0iQ3VzdG9tMUJhY2tCdXR0b24iIFg9IjE4NSIgWT0iLTExIiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIwIj4jKGxvYy5DdXN0b21CYWNrQnV0dG9uKTwvQnV0dG9uPgorICAgICAgICA8QnV0dG9uIE5hbWU9IkN1c3RvbU5leHRCdXR0b24iIFg9Ii0xMDEiIFk9Ii0xMSIgV2lkdGg9Ijg1IiBIZWlnaHQ9IjI3IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMCI+Iyhsb2MuQ3VzdG9tTmV4dEJ1dHRvbik8L0J1dHRvbj4KKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJDdXN0b20xQ2FuY2VsQnV0dG9uIiBYPSItMTEiIFk9Ii0xMSIgV2lkdGg9Ijg1IiBIZWlnaHQ9IjI3IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMCI+Iyhsb2MuQ2FuY2VsQnV0dG9uKTwvQnV0dG9uPgorICAgIDwvUGFnZT4KKyAgICA8UGFnZSBOYW1lPSJDdXN0b20yIj4KKyAgICAgICAgPFRleHQgWD0iMTg1IiBZPSIxMSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIzNiIgRm9udElkPSIxIiBEaXNhYmxlUHJlZml4PSJ5ZXMiPiMobG9jLkN1c3RvbTJIZWFkZXIpPC9UZXh0PgorICAgICAgICA8SW1hZ2UgWD0iMCIgWT0iMCIgV2lkdGg9IjE3OCIgSGVpZ2h0PSIzODIiIEltYWdlRmlsZT0iU2lkZUJhci5wbmciLz4KKyAgICAgICAgCisgICAgICAgIDxDaGVja2JveCBOYW1lPSJJbnN0YWxsQWxsVXNlcnMiIFg9IjE4NSIgWT0iNTEiIFdpZHRoPSItMTEiIEhlaWdodD0iMjQiIFRhYlN0b3A9InllcyIgRm9udElkPSIzIiBIaWRlV2hlbkRpc2FibGVkPSJubyI+Iyhsb2MuSW5zdGFsbEFsbFVzZXJzTGFiZWwpPC9DaGVja2JveD4KKyAgICAgICAgPENoZWNrYm94IE5hbWU9IkFzc29jaWF0ZUZpbGVzIiBYPSIxODUiIFk9Ijc2IiBXaWR0aD0iLTExIiBIZWlnaHQ9IjI0IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyIgSGlkZVdoZW5EaXNhYmxlZD0ibm8iPiMobG9jLkFzc29jaWF0ZUZpbGVzTGFiZWwpPC9DaGVja2JveD4KKyAgICAgICAgPENoZWNrYm94IE5hbWU9IlNob3J0Y3V0cyIgWD0iMTg1IiBZPSIxMDEiIFdpZHRoPSItMTEiIEhlaWdodD0iMjQiIFRhYlN0b3A9InllcyIgRm9udElkPSIzIiBIaWRlV2hlbkRpc2FibGVkPSJubyI+Iyhsb2MuU2hvcnRjdXRzTGFiZWwpPC9DaGVja2JveD4KKyAgICAgICAgPENoZWNrYm94IE5hbWU9IlByZXBlbmRQYXRoIiBYPSIxODUiIFk9IjEyNiIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIyNCIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjMiIEhpZGVXaGVuRGlzYWJsZWQ9Im5vIj4jKGxvYy5QcmVwZW5kUGF0aExhYmVsKTwvQ2hlY2tib3g+CisgICAgICAgIDxDaGVja2JveCBOYW1lPSJDb21waWxlQWxsIiBYPSIxODUiIFk9IjE1MSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIyNCIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjMiIEhpZGVXaGVuRGlzYWJsZWQ9Im5vIj4jKGxvYy5QcmVjb21waWxlTGFiZWwpPC9DaGVja2JveD4KKyAgICAgICAgPENoZWNrYm94IE5hbWU9IkluY2x1ZGVfc3ltYm9scyIgWD0iMTg1IiBZPSIxNzYiIFdpZHRoPSItMTEiIEhlaWdodD0iMjQiIFRhYlN0b3A9InllcyIgRm9udElkPSIzIiBIaWRlV2hlbkRpc2FibGVkPSJubyI+Iyhsb2MuSW5jbHVkZV9zeW1ib2xzTGFiZWwpPC9DaGVja2JveD4KKyAgICAgICAgPENoZWNrYm94IE5hbWU9IkluY2x1ZGVfZGVidWciIFg9IjE4NSIgWT0iMjAxIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjI0IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyIgSGlkZVdoZW5EaXNhYmxlZD0ibm8iPiMobG9jLkluY2x1ZGVfZGVidWdMYWJlbCk8L0NoZWNrYm94PgorCisgICAgICAgIDxUZXh0IFg9IjE4NSIgWT0iMjU2IiBXaWR0aD0iLTExIiBIZWlnaHQ9IjE3IiBGb250SWQ9IjMiPiMobG9jLkN1c3RvbUxvY2F0aW9uTGFiZWwpPC9UZXh0PgorICAgICAgICA8RWRpdGJveCBOYW1lPSJUYXJnZXREaXIiIFg9IjE4NSIgWT0iMjc3IiBXaWR0aD0iLTEwMSIgSGVpZ2h0PSIyNyIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjMiIEZpbGVTeXN0ZW1BdXRvQ29tcGxldGU9InllcyIgLz4KKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJDdXN0b21Ccm93c2VCdXR0b24iIFg9Ii0xMSIgWT0iMjc2IiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIzIj4jKGxvYy5DdXN0b21Ccm93c2VCdXR0b24pPC9CdXR0b24+CisgICAgICAgIDxUZXh0IE5hbWU9IkN1c3RvbUJyb3dzZUJ1dHRvbkxhYmVsIiBYPSIxODUiIFk9IjMwNiIgV2lkdGg9Ii05MSIgSGVpZ2h0PSIzNSIgRm9udElkPSI1IiBIaWRlV2hlbkRpc2FibGVkPSJ5ZXMiPiMobG9jLkN1c3RvbUxvY2F0aW9uSGVscExhYmVsKTwvVGV4dD4KKworICAgICAgICA8QnV0dG9uIE5hbWU9IkN1c3RvbTJCYWNrQnV0dG9uIiBYPSIxODUiIFk9Ii0xMSIgV2lkdGg9Ijg1IiBIZWlnaHQ9IjI3IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMCI+Iyhsb2MuQ3VzdG9tQmFja0J1dHRvbik8L0J1dHRvbj4KKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJDdXN0b21JbnN0YWxsQnV0dG9uIiBYPSItMTAxIiBZPSItMTEiIFdpZHRoPSI5NSIgSGVpZ2h0PSIyNyIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjAiPiMobG9jLkN1c3RvbUluc3RhbGxCdXR0b24pPC9CdXR0b24+CisgICAgICAgIDxCdXR0b24gTmFtZT0iQ3VzdG9tMkNhbmNlbEJ1dHRvbiIgWD0iLTExIiBZPSItMTEiIFdpZHRoPSI4NSIgSGVpZ2h0PSIyNyIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjAiPiMobG9jLkNhbmNlbEJ1dHRvbik8L0J1dHRvbj4KKyAgICA8L1BhZ2U+CisgICAgPFBhZ2UgTmFtZT0iUHJvZ3Jlc3MiPgorICAgICAgICA8VGV4dCBYPSIxODUiIFk9IjExIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjM2IiBGb250SWQ9IjEiIERpc2FibGVQcmVmaXg9InllcyI+Iyhsb2MuUHJvZ3Jlc3NIZWFkZXIpPC9UZXh0PgorICAgICAgICA8SW1hZ2UgWD0iMCIgWT0iMCIgV2lkdGg9IjE3OCIgSGVpZ2h0PSIzODIiIEltYWdlRmlsZT0iU2lkZUJhci5wbmciLz4KKworICAgICAgICA8VGV4dCBYPSIxODUiIFk9IjExMSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIyMCIgRm9udElkPSIzIiBEaXNhYmxlUHJlZml4PSJ5ZXMiPiMobG9jLlByb2dyZXNzTGFiZWwpPC9UZXh0PgorICAgICAgICA8VGV4dCBOYW1lPSJPdmVyYWxsUHJvZ3Jlc3NQYWNrYWdlVGV4dCIgWD0iMTg1IiBZPSIxNDYiIFdpZHRoPSItMTEiIEhlaWdodD0iMjAiIEZvbnRJZD0iMyIgRGlzYWJsZVByZWZpeD0ieWVzIj4jKGxvYy5PdmVyYWxsUHJvZ3Jlc3NQYWNrYWdlVGV4dCk8L1RleHQ+CisgICAgICAgIDxQcm9ncmVzc2JhciBOYW1lPSJPdmVyYWxsQ2FsY3VsYXRlZFByb2dyZXNzYmFyIiBYPSIxODUiIFk9IjE3MSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIyNCIgLz4KKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJQcm9ncmVzc0NhbmNlbEJ1dHRvbiIgWD0iLTExIiBZPSItMTEiIFdpZHRoPSI5NSIgSGVpZ2h0PSIyNyIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjAiPiMobG9jLkNhbmNlbEJ1dHRvbik8L0J1dHRvbj4KKyAgICA8L1BhZ2U+CisgICAgPFBhZ2UgTmFtZT0iTW9kaWZ5Ij4KKyAgICAgICAgPFRleHQgWD0iMTg1IiBZPSIxMSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIzNiIgRm9udElkPSIxIiBEaXNhYmxlUHJlZml4PSJ5ZXMiPiMobG9jLk1vZGlmeUhlYWRlcik8L1RleHQ+CisgICAgICAgIDxJbWFnZSBYPSIwIiBZPSIwIiBXaWR0aD0iMTc4IiBIZWlnaHQ9IjM4MiIgSW1hZ2VGaWxlPSJTaWRlQmFyLnBuZyIvPgorCisgICAgICAgIDxCdXR0b24gTmFtZT0iTW9kaWZ5QnV0dG9uIiBYPSIxODUiIFk9IjEwMSIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSI1OSIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjMiIEhleFN0eWxlPSIweEYiPiMobG9jLk1vZGlmeU1vZGlmeUJ1dHRvbik8L0J1dHRvbj4KKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJSZXBhaXJCdXR0b24iIFg9IjE4NSIgWT0iMTcxIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjU5IiBUYWJTdG9wPSJ5ZXMiIEZvbnRJZD0iMyIgSGV4U3R5bGU9IjB4RSI+Iyhsb2MuTW9kaWZ5UmVwYWlyQnV0dG9uKTwvQnV0dG9uPgorICAgICAgICA8QnV0dG9uIE5hbWU9IlVuaW5zdGFsbEJ1dHRvbiIgWD0iMTg1IiBZPSIyNDEiIFdpZHRoPSItMTEiIEhlaWdodD0iNTkiIFRhYlN0b3A9InllcyIgRm9udElkPSIzIiBIZXhTdHlsZT0iMHhFIj4jKGxvYy5Nb2RpZnlVbmluc3RhbGxCdXR0b24pPC9CdXR0b24+CisKKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJNb2RpZnlDYW5jZWxCdXR0b24iIFg9Ii0xMSIgWT0iLTExIiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIwIj4jKGxvYy5DYW5jZWxCdXR0b24pPC9CdXR0b24+CisgICAgPC9QYWdlPgorICAgIDxQYWdlIE5hbWU9IlN1Y2Nlc3MiPgorICAgICAgICA8VGV4dCBYPSIxODUiIFk9IjExIiBXaWR0aD0iLTExIiBIZWlnaHQ9IjM2IiBGb250SWQ9IjEiIERpc2FibGVQcmVmaXg9InllcyI+Iyhsb2MuU3VjY2Vzc0hlYWRlcik8L1RleHQ+CisgICAgICAgIDxJbWFnZSBYPSIwIiBZPSIwIiBXaWR0aD0iMTc4IiBIZWlnaHQ9IjM4MiIgSW1hZ2VGaWxlPSJTaWRlQmFyLnBuZyIvPgorCisgICAgICAgIDxIeXBlcnRleHQgTmFtZT0iU3VjY2Vzc1RleHQiIFg9IjIwNSIgWT0iNzEiIFdpZHRoPSItMzEiIEhlaWdodD0iMTAwIiBGb250SWQ9IjMiIERpc2FibGVQcmVmaXg9InllcyI+PC9IeXBlcnRleHQ+CisKKyAgICAgICAgPFRleHQgTmFtZT0iU3VjY2Vzc1Jlc3RhcnRUZXh0IiBYPSIyMDUiIFk9Ii0xMDAiIFdpZHRoPSItMTEiIEhlaWdodD0iMzQiIEZvbnRJZD0iMyIgSGlkZVdoZW5EaXNhYmxlZD0ieWVzIiBEaXNhYmxlUHJlZml4PSJ5ZXMiPiMobG9jLlN1Y2Nlc3NSZXN0YXJ0VGV4dCk8L1RleHQ+CisgICAgICAgIDxCdXR0b24gTmFtZT0iTGF1bmNoQnV0dG9uIiBYPSIxODUiIFk9Ii01MCIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSI1OSIgVGFiU3RvcD0ieWVzIiBGb250SWQ9IjMiIEhleFN0eWxlPSIweEYiIEhpZGVXaGVuRGlzYWJsZWQ9InllcyI+Iyhsb2MuU3VjY2Vzc0xhdW5jaEJ1dHRvbik8L0J1dHRvbj4KKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJTdWNjZXNzUmVzdGFydEJ1dHRvbiIgWD0iLTEwMSIgWT0iLTExIiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIwIiBIaWRlV2hlbkRpc2FibGVkPSJ5ZXMiPiMobG9jLlN1Y2Nlc3NSZXN0YXJ0QnV0dG9uKTwvQnV0dG9uPgorICAgICAgICA8QnV0dG9uIE5hbWU9IlN1Y2Nlc3NDYW5jZWxCdXR0b24iIFg9Ii0xMSIgWT0iLTExIiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIwIj4jKGxvYy5DbG9zZUJ1dHRvbik8L0J1dHRvbj4KKyAgICA8L1BhZ2U+CisgICAgPFBhZ2UgTmFtZT0iRmFpbHVyZSI+CisgICAgICAgIDxUZXh0IFg9IjE4NSIgWT0iMTEiIFdpZHRoPSItMTEiIEhlaWdodD0iMzYiIEZvbnRJZD0iMSIgRGlzYWJsZVByZWZpeD0ieWVzIj4jKGxvYy5GYWlsdXJlSGVhZGVyKTwvVGV4dD4KKyAgICAgICAgPEltYWdlIFg9IjAiIFk9IjAiIFdpZHRoPSIxNzgiIEhlaWdodD0iMzgyIiBJbWFnZUZpbGU9IlNpZGVCYXIucG5nIi8+CisKKyAgICAgICAgPEh5cGVydGV4dCBOYW1lPSJGYWlsdXJlTG9nRmlsZUxpbmsiIFg9IjIwNSIgWT0iNzEiIFdpZHRoPSItMTEiIEhlaWdodD0iNjAiIEZvbnRJZD0iMyIgVGFiU3RvcD0ieWVzIiBIaWRlV2hlbkRpc2FibGVkPSJ5ZXMiPiMobG9jLkZhaWx1cmVIeXBlcmxpbmtMb2dUZXh0KTwvSHlwZXJ0ZXh0PgorICAgICAgICA8SHlwZXJ0ZXh0IE5hbWU9IkZhaWx1cmVNZXNzYWdlVGV4dCIgWD0iMjA1IiBZPSIxNTEiIFdpZHRoPSItMTEiIEhlaWdodD0iMTIwIiBGb250SWQ9IjMiIFRhYlN0b3A9InllcyIgSGlkZVdoZW5EaXNhYmxlZD0ieWVzIj48L0h5cGVydGV4dD4KKyAgICAgICAgPFRleHQgTmFtZT0iRmFpbHVyZVJlc3RhcnRUZXh0IiBYPSIyMDUiIFk9Ii00MCIgV2lkdGg9Ii0xMSIgSGVpZ2h0PSIzNCIgRm9udElkPSIzIiBIaWRlV2hlbkRpc2FibGVkPSJ5ZXMiIERpc2FibGVQcmVmaXg9InllcyI+Iyhsb2MuRmFpbHVyZVJlc3RhcnRUZXh0KTwvVGV4dD4KKyAgICAgICAgPEJ1dHRvbiBOYW1lPSJGYWlsdXJlUmVzdGFydEJ1dHRvbiIgWD0iLTEwMSIgWT0iLTExIiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIwIiBIaWRlV2hlbkRpc2FibGVkPSJ5ZXMiPiMobG9jLkZhaWx1cmVSZXN0YXJ0QnV0dG9uKTwvQnV0dG9uPgorICAgICAgICA8QnV0dG9uIE5hbWU9IkZhaWx1cmVDYW5jZWxCdXR0b24iIFg9Ii0xMSIgWT0iLTExIiBXaWR0aD0iODUiIEhlaWdodD0iMjciIFRhYlN0b3A9InllcyIgRm9udElkPSIwIj4jKGxvYy5DbG9zZUJ1dHRvbik8L0J1dHRvbj4KKyAgICA8L1BhZ2U+Cis8L1RoZW1lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvRGVmYXVsdC53eGwgYi9Ub29scy9tc2kvYnVuZGxlL0RlZmF1bHQud3hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzA2NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL0RlZmF1bHQud3hsCkBAIC0wLDAgKzEsMTM1IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFdpeExvY2FsaXphdGlvbiBDdWx0dXJlPSJlbi11cyIgTGFuZ3VhZ2U9IjEwMzMiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L2xvY2FsaXphdGlvbiI+CisgIDxTdHJpbmcgSWQ9IkNhcHRpb24iPltXaXhCdW5kbGVOYW1lXSBTZXR1cDwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJUaXRsZSI+W1dpeEJ1bmRsZU5hbWVdPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ikluc3RhbGxpbmciPkluc3RhbGxpbmc8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5zdGFsbGF0aW9uIj5TZXR1cDwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJNb2RpZnlpbmciPlVwZGF0aW5nPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ik1vZGlmaWNhdGlvbiI+TW9kaWZ5PC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IlJlcGFpcmluZyI+UmVwYWlyaW5nPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IlJlcGFpciI+UmVwYWlyPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IlVuaW5zdGFsbGluZyI+UmVtb3Zpbmc8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iVW5pbnN0YWxsYXRpb24iPlVuaW5zdGFsbDwvU3RyaW5nPgorICAKKyAgPFN0cmluZyBJZD0iRWxldmF0ZUZvckNSVEluc3RhbGwiPllvdSB3aWxsIGJlIHByb21wdGVkIGZvciBBZG1pbmlzdHJhdG9yIHByaXZpbGVnZXMgdG8gaW5zdGFsbCBhIEMgUnVudGltZSBMaWJyYXJ5IHVwZGF0ZSAoS0IyOTk5MjI2KS4KKworCitDb250aW51ZT88L1N0cmluZz4KKyAgCisgIDxTdHJpbmcgSWQ9IkNhbmNlbEJ1dHRvbiI+JmFtcDtDYW5jZWw8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iQ2xvc2VCdXR0b24iPiZhbXA7Q2xvc2U8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5zdGFsbEhlYWRlciI+SW5zdGFsbCBbV2l4QnVuZGxlTmFtZV08L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5zdGFsbE1lc3NhZ2UiPlNlbGVjdCBJbnN0YWxsIE5vdyB0byBpbnN0YWxsIFB5dGhvbiB3aXRoIGRlZmF1bHQgc2V0dGluZ3MsIG9yIGNob29zZSBDdXN0b21pemUgdG8gZW5hYmxlIG9yIGRpc2FibGUgZmVhdHVyZXMuPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ikluc3RhbGxWZXJzaW9uIj5WZXJzaW9uIFtXaXhCdW5kbGVWZXJzaW9uXTwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJJbnN0YWxsVXBncmFkZUhlYWRlciI+VXBncmFkZSB0byBbV2l4QnVuZGxlTmFtZV08L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5zdGFsbFVwZ3JhZGVNZXNzYWdlIj5TZWxlY3QgVXBncmFkZSBOb3cgdG8ga2VlcCB5b3VyIGN1cnJlbnQgc2V0dGluZ3MsIG9yIGNob29zZSBDdXN0b21pemUgdG8gZW5hYmxlIG9yIGRpc2FibGUgZmVhdHVyZXMuPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkNvbmZpcm1DYW5jZWxNZXNzYWdlIj5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsPzwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJFeGVjdXRlVXBncmFkZVJlbGF0ZWRCdW5kbGVNZXNzYWdlIj5QcmV2aW91cyB2ZXJzaW9uPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkhlbHBIZWFkZXIiPlNldHVwIEhlbHA8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSGVscFRleHQiPlZpc2l0ICZsdDthIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvW1Nob3J0VmVyc2lvbl0vdXNpbmcvd2luZG93cy5odG1sIiZndDtkb2NzLnB5dGhvbi5vcmcvW1Nob3J0VmVyc2lvbl0vdXNpbmcvd2luZG93cy5odG1sJmx0Oy9hJmd0OyBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBvcHRpb25zLCBpbmNsdWRpbmcgdGhlIGFiaWxpdHkgdG8gZW5hYmxlIGFuZCBkaXNhYmxlIHNwZWNpZmljIGZlYXR1cmVzLgorCisiL3Bhc3NpdmUiIHRvIGRpc3BsYXkgcHJvZ3Jlc3Mgd2l0aG91dCByZXF1aXJpbmcgdXNlciBpbnRlcmFjdGlvbgorCisiL3F1aWV0IiB0byBpbnN0YWxsL3VuaW5zdGFsbCB3aXRob3V0IGRpc3BsYXlpbmcgYW55IFVJCisKKyIvc2ltcGxlIiB0byBwcmV2ZW50IHVzZXIgY3VzdG9taXphdGlvbgorCisiL3VuaW5zdGFsbCIgdG8gcmVtb3ZlIFB5dGhvbiAod2l0aG91dCBjb25maXJtYXRpb24pCisKKyIvbGF5b3V0IFtcW11kaXJlY3RvcnlbXF1dIiB0byBwcmUtZG93bmxvYWQgYWxsIGNvbXBvbmVudHMKKworIi9sb2cgW1xbXWZpbGVuYW1lW1xdXSIgdG8gc3BlY2lmeSBsb2cgZmlsZXMgbG9jYXRpb248L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5zdGFsbExpY2Vuc2VMaW5rVGV4dCI+W1dpeEJ1bmRsZU5hbWVdICZsdDthIGhyZWY9IiMiJmd0O2xpY2Vuc2UgdGVybXMmbHQ7L2EmZ3Q7LjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJJbnN0YWxsQWNjZXB0Q2hlY2tib3giPkkgJmFtcDthZ3JlZSB0byB0aGUgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9uczwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJJbnN0YWxsQnV0dG9uIj4mYW1wO0luc3RhbGwgTm93PC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ikluc3RhbGxCdXR0b25Ob3RlIj5bVGFyZ2V0RGlyXQorCitJbmNsdWRlcyBJRExFLCBwaXAgYW5kIGRvY3VtZW50YXRpb24KK0NyZWF0ZXMgc2hvcnRjdXRzIGFuZCBmaWxlIGFzc29jaWF0aW9uczwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJJbnN0YWxsQ3VzdG9tQnV0dG9uIj5DJmFtcDt1c3RvbWl6ZSBpbnN0YWxsYXRpb248L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5zdGFsbEN1c3RvbUJ1dHRvbk5vdGUiPkNob29zZSBsb2NhdGlvbiBhbmQgZmVhdHVyZXM8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5zdGFsbFNpbXBsZUJ1dHRvbiI+JmFtcDtJbnN0YWxsPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ikluc3RhbGxTaW1wbGVCdXR0b25Ob3RlIj5Vc2Ugc2V0dGluZ3MgcHJlc2VsZWN0ZWQgYnkgeW91ciBhZG1pbmlzdHJhdG9yCisKK1tTaW1wbGVJbnN0YWxsRGVzY3JpcHRpb25dPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ikluc3RhbGxVcGdyYWRlQnV0dG9uIj5VcCZhbXA7Z3JhZGUgTm93PC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ikluc3RhbGxVcGdyYWRlQnV0dG9uTm90ZSI+W1RhcmdldERpcl0KKworUmVwbGFjZXMgeW91ciBleGlzdGluZyBpbnN0YWxsYXRpb24gd2l0aG91dCBjaGFuZ2luZyBzZXR0aW5ncy4KK1NlbGVjdCBDdXN0b21pemUgdG8gcmV2aWV3IGN1cnJlbnQgb3B0aW9ucy48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5zdGFsbFVwZ3JhZGVDdXN0b21CdXR0b24iPkMmYW1wO3VzdG9taXplIGluc3RhbGxhdGlvbjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJJbnN0YWxsVXBncmFkZUN1c3RvbUJ1dHRvbk5vdGUiPkNob29zZSBsb2NhdGlvbiBhbmQgZmVhdHVyZXM8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iQ3VzdG9tMUhlYWRlciI+T3B0aW9uYWwgRmVhdHVyZXM8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iQ3VzdG9tMkhlYWRlciI+QWR2YW5jZWQgT3B0aW9uczwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJDdXN0b21Mb2NhdGlvbkxhYmVsIj5DdXN0b21pemUgaW5zdGFsbCBsb2NhdGlvbjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJDdXN0b21Mb2NhdGlvbkhlbHBMYWJlbCI+WW91IHdpbGwgcmVxdWlyZSB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlbGVjdGVkIGxvY2F0aW9uLjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJDdXN0b21JbnN0YWxsQnV0dG9uIj4mYW1wO0luc3RhbGw8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iQ3VzdG9tTmV4dEJ1dHRvbiI+JmFtcDtOZXh0PC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkN1c3RvbUJhY2tCdXR0b24iPiZhbXA7QmFjazwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJDdXN0b21Ccm93c2VCdXR0b24iPkImYW1wO3Jvd3NlPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkluY2x1ZGVfZG9jTGFiZWwiPiZhbXA7RG9jdW1lbnRhdGlvbjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJJbmNsdWRlX2RvY0hlbHBMYWJlbCI+SW5zdGFsbHMgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGZpbGUuPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkluY2x1ZGVfcGlwTGFiZWwiPiZhbXA7cGlwPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkluY2x1ZGVfcGlwSGVscExhYmVsIj5JbnN0YWxscyBwaXAsIHdoaWNoIGNhbiBkb3dubG9hZCBhbmQgaW5zdGFsbCBvdGhlciBQeXRob24gcGFja2FnZXMuPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkluY2x1ZGVfdGNsdGtMYWJlbCI+dGNsL3RrIGFuZCAmYW1wO0lETEU8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5jbHVkZV90Y2x0a0hlbHBMYWJlbCI+SW5zdGFsbHMgdGtpbnRlciBhbmQgdGhlIElETEUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkluY2x1ZGVfdGVzdExhYmVsIj5QeXRob24gJmFtcDt0ZXN0IHN1aXRlPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkluY2x1ZGVfdGVzdEhlbHBMYWJlbCI+SW5zdGFsbHMgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdGVzdCBzdWl0ZS48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5jbHVkZV9sYXVuY2hlckxhYmVsIj5weSAmYW1wO2xhdW5jaGVyPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkluY2x1ZGVfbGF1bmNoZXJIZWxwIj5JbnN0YWxscyB0aGUgZ2xvYmFsICdweScgbGF1bmNoZXIgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3RhcnQgUHl0aG9uLjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJJbmNsdWRlX2xhdW5jaGVyUmVtb3ZlIj5Vc2UgUHJvZ3JhbXMgYW5kIEZlYXR1cmVzIHRvIHJlbW92ZSB0aGUgJ3B5JyBsYXVuY2hlci48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5jbHVkZV9sYXVuY2hlclVwZ3JhZGUiPlVwZ3JhZGVzIHRoZSBnbG9iYWwgJ3B5JyBsYXVuY2hlciBmcm9tIHRoZSBwcmV2aW91cyB2ZXJzaW9uLjwvU3RyaW5nPgorICAKKyAgPFN0cmluZyBJZD0iQXNzb2NpYXRlRmlsZXNMYWJlbCI+QXNzb2NpYXRlICZhbXA7ZmlsZXMgd2l0aCBQeXRob24gKHJlcXVpcmVzIHRoZSBweSBsYXVuY2hlcik8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iU2hvcnRjdXRzTGFiZWwiPkNyZWF0ZSBzaG9ydGN1dHMgZm9yIGluc3RhbGxlZCBhcHBsaWNhdGlvbnM8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iUHJlcGVuZFBhdGhMYWJlbCI+QWRkIFB5dGhvbiB0byAmYW1wO2Vudmlyb25tZW50IHZhcmlhYmxlczwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJTaG9ydFByZXBlbmRQYXRoTGFiZWwiPkFkZCAmYW1wO1B5dGhvbiBbU2hvcnRWZXJzaW9uXSB0byBQQVRIPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ikluc3RhbGxBbGxVc2Vyc0xhYmVsIj5JbnN0YWxsIGZvciAmYW1wO2FsbCB1c2VyczwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJJbnN0YWxsTGF1bmNoZXJBbGxVc2Vyc0xhYmVsIj5mb3IgJmFtcDthbGwgdXNlcnMgKHJlcXVpcmVzIGVsZXZhdGlvbik8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iU2hvcnRJbnN0YWxsTGF1bmNoZXJBbGxVc2Vyc0xhYmVsIj5JbnN0YWxsICZhbXA7bGF1bmNoZXIgZm9yIGFsbCB1c2VycyAocmVjb21tZW5kZWQpPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IlByZWNvbXBpbGVMYWJlbCI+JmFtcDtQcmVjb21waWxlIHN0YW5kYXJkIGxpYnJhcnk8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5jbHVkZV9zeW1ib2xzTGFiZWwiPkRvd25sb2FkIGRlYnVnZ2luZyAmYW1wO3N5bWJvbHM8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iSW5jbHVkZV9kZWJ1Z0xhYmVsIj5Eb3dubG9hZCBkZWJ1JmFtcDtnIGJpbmFyaWVzIChyZXF1aXJlcyBWUyAyMDE1IG9yIGxhdGVyKTwvU3RyaW5nPgorICAKKyAgPFN0cmluZyBJZD0iUHJvZ3Jlc3NIZWFkZXIiPltBY3Rpb25MaWtlSW5zdGFsbGF0aW9uXSBQcm9ncmVzczwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJQcm9ncmVzc0xhYmVsIj5bQWN0aW9uTGlrZUluc3RhbGxpbmddOjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJPdmVyYWxsUHJvZ3Jlc3NQYWNrYWdlVGV4dCI+SW5pdGlhbGl6aW5nLi4uPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ik1vZGlmeUhlYWRlciI+TW9kaWZ5IFNldHVwPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9Ik1vZGlmeU1vZGlmeUJ1dHRvbiI+JmFtcDtNb2RpZnk8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iTW9kaWZ5QnV0dG9uTm90ZSI+QWRkIG9yIHJlbW92ZSBpbmRpdmlkdWFsIGZlYXR1cmVzLjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJNb2RpZnlSZXBhaXJCdXR0b24iPiZhbXA7UmVwYWlyPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IlJlcGFpckJ1dHRvbk5vdGUiPkVuc3VyZSBhbGwgY3VycmVudCBmZWF0dXJlcyBhcmUgY29ycmVjdGx5IGluc3RhbGxlZC48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iTW9kaWZ5VW5pbnN0YWxsQnV0dG9uIj4mYW1wO1VuaW5zdGFsbDwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJVbmluc3RhbGxCdXR0b25Ob3RlIj5SZW1vdmUgdGhlIGVudGlyZSBbV2l4QnVuZGxlTmFtZV0gaW5zdGFsbGF0aW9uLjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJTdWNjZXNzSGVhZGVyIj5bQWN0aW9uTGlrZUluc3RhbGxhdGlvbl0gd2FzIHN1Y2Nlc3NmdWw8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iU3VjY2Vzc0xhdW5jaEJ1dHRvbiI+JmFtcDtMYXVuY2g8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iU3VjY2Vzc1Jlc3RhcnRUZXh0Ij5Zb3UgbWF5IG5lZWQgdG8gcmVzdGFydCB5b3VyIGNvbXB1dGVyIHRvIGZpbmlzaCB1cGRhdGluZyBmaWxlcy48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iU3VjY2Vzc1Jlc3RhcnRCdXR0b24iPiZhbXA7UmVzdGFydDwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJTdWNjZXNzSW5zdGFsbE1lc3NhZ2UiPlNwZWNpYWwgdGhhbmtzIHRvIE1hcmsgSGFtbW9uZCwgd2l0aG91dCB3aG9zZSB5ZWFycyBvZiBmcmVlbHkgc2hhcmVkIFdpbmRvd3MgZXhwZXJ0aXNlLCBQeXRob24gZm9yIFdpbmRvd3Mgd291bGQgc3RpbGwgYmUgUHl0aG9uIGZvciBET1MuCisKK05ldyB0byBQeXRob24/IFN0YXJ0IHdpdGggdGhlICZsdDthIGhyZWY9Imh0dHBzOi8vZG9jcy5weXRob24ub3JnL1tTaG9ydFZlcnNpb25dL3R1dG9yaWFsL2luZGV4Lmh0bWwiJmd0O29ubGluZSB0dXRvcmlhbCZsdDsvYSZndDsgYW5kICZsdDthIGhyZWY9Imh0dHBzOi8vZG9jcy5weXRob24ub3JnL1tTaG9ydFZlcnNpb25dL2luZGV4Lmh0bWwiJmd0O2RvY3VtZW50YXRpb24mbHQ7L2EmZ3Q7LgorCitTZWUgJmx0O2EgaHJlZj0iaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvW1Nob3J0VmVyc2lvbl0vd2hhdHNuZXcvW1Nob3J0VmVyc2lvbl0uaHRtbCImZ3Q7d2hhdCdzIG5ldyZsdDsvYSZndDsgaW4gdGhpcyByZWxlYXNlLjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJTdWNjZXNzTW9kaWZ5TWVzc2FnZSI+VGhhbmsgeW91IGZvciB1c2luZyBbV2l4QnVuZGxlTmFtZV0uPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IlN1Y2Nlc3NSZXBhaXJNZXNzYWdlIj5UaGFuayB5b3UgZm9yIHVzaW5nIFtXaXhCdW5kbGVOYW1lXS4KKworRmVlbCBmcmVlIHRvIGVtYWlsICZsdDthIGhyZWY9Im1haWx0bzpweXRob24tbGlzdEBweXRob24ub3JnIiZndDtweXRob24tbGlzdEBweXRob24ub3JnJmx0Oy9hJmd0OyBpZiB5b3UgY29udGludWUgdG8gZW5jb3VudGVyIGlzc3Vlcy48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iU3VjY2Vzc1JlbW92ZU1lc3NhZ2UiPlRoYW5rIHlvdSBmb3IgdXNpbmcgW1dpeEJ1bmRsZU5hbWVdLgorCitGZWVsIGZyZWUgdG8gZW1haWwgJmx0O2EgaHJlZj0ibWFpbHRvOnB5dGhvbi1saXN0QHB5dGhvbi5vcmciJmd0O3B5dGhvbi1saXN0QHB5dGhvbi5vcmcmbHQ7L2EmZ3Q7IGlmIHlvdSBlbmNvdW50ZXJlZCBwcm9ibGVtcy48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iRmFpbHVyZUhlYWRlciI+U2V0dXAgZmFpbGVkPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkZhaWx1cmVIeXBlcmxpbmtMb2dUZXh0Ij5PbmUgb3IgbW9yZSBpc3N1ZXMgY2F1c2VkIHRoZSBzZXR1cCB0byBmYWlsLiBQbGVhc2UgZml4IHRoZSBpc3N1ZXMgYW5kIHRoZW4gcmV0cnkgc2V0dXAuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgJmx0O2EgaHJlZj0iIyImZ3Q7bG9nIGZpbGUmbHQ7L2EmZ3Q7LjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJGYWlsdXJlUmVzdGFydFRleHQiPllvdSBtdXN0IHJlc3RhcnQgeW91ciBjb21wdXRlciB0byBjb21wbGV0ZSB0aGUgcm9sbGJhY2sgb2YgdGhlIHNvZnR3YXJlLjwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJGYWlsdXJlUmVzdGFydEJ1dHRvbiI+JmFtcDtSZXN0YXJ0PC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkZhaWx1cmVFeGlzdGluZ0luc3RhbGwiPlVuYWJsZSB0byBpbnN0YWxsIFtXaXhCdW5kbGVOYW1lXSBkdWUgdG8gYW4gZXhpc3RpbmcgaW5zdGFsbC4gVXNlIFByb2dyYW1zIGFuZCBGZWF0dXJlcyB0byBtb2RpZnksIHJlcGFpciBvciByZW1vdmUgW1dpeEJ1bmRsZU5hbWVdLjwvU3RyaW5nPgorICAKKyAgPFN0cmluZyBJZD0iRmFpbHVyZVdpbjdNaXNzaW5nU1AxIj5XaW5kb3dzIDcgU2VydmljZSBQYWNrIDEgYW5kIGFsbCBhcHBsaWNhYmxlIHVwZGF0ZXMgYXJlIHJlcXVpcmVkIHRvIGluc3RhbGwgW1dpeEJ1bmRsZU5hbWVdLgorCitQbGVhc2UgJmx0O2EgaHJlZj0iaHR0cHM6Ly93d3cuYmluZy5jb20vc2VhcmNoP3E9aG93JTIwdG8lMjBpbnN0YWxsJTIwd2luZG93cyUyMDclMjBzZXJ2aWNlJTIwcGFjayUyMDEiJmd0O3VwZGF0ZSB5b3VyIG1hY2hpbmUmbHQ7L2EmZ3Q7IGFuZCB0aGVuIHJlc3RhcnQgdGhlIGluc3RhbGxhdGlvbi48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iRmFpbHVyZVZpc3RhTWlzc2luZ1NQMiI+V2luZG93cyBWaXN0YSBTZXJ2aWNlIFBhY2sgMiBhbmQgYWxsIGFwcGxpY2FibGUgdXBkYXRlcyBhcmUgcmVxdWlyZWQgdG8gaW5zdGFsbCBbV2l4QnVuZGxlTmFtZV0uCisKK1BsZWFzZSAmbHQ7YSBocmVmPSJodHRwczovL3d3dy5iaW5nLmNvbS9zZWFyY2g/cT1ob3clMjB0byUyMGluc3RhbGwlMjB3aW5kb3dzJTIwdmlzdGElMjBzZXJ2aWNlJTIwcGFjayUyMDIiJmd0O3VwZGF0ZSB5b3VyIG1hY2hpbmUmbHQ7L2EmZ3Q7IGFuZCB0aGVuIHJlc3RhcnQgdGhlIGluc3RhbGxhdGlvbi48L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iRmFpbHVyZVhQT3JFYXJsaWVyIj5XaW5kb3dzIFZpc3RhIG9yIGxhdGVyIGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgYW5kIHVzZSBbV2l4QnVuZGxlTmFtZV0uCisKK1Zpc2l0ICZsdDthIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvIiZndDtweXRob24ub3JnJmx0Oy9hJmd0OyB0byBkb3dubG9hZCBQeXRob24gMy40LjwvU3RyaW5nPgorPC9XaXhMb2NhbGl6YXRpb24+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL1NpZGVCYXIucG5nIGIvVG9vbHMvbXNpL2J1bmRsZS9TaWRlQmFyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjNjZTVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9TaWRlQmFyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL2Jvb3RzdHJhcC9MSUNFTlNFLnR4dCBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL0xJQ0VOU0UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTFhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL2Jvb3RzdHJhcC9MSUNFTlNFLnR4dApAQCAtMCwwICsxLDI1IEBACitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgYm9vdHN0cmFwcGVyIGFwcGxpY2F0aW9uIHRoYXQgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBpbnN0YWxsZXIuIEl0IGhhcyBubyBpbXBhY3Qgb24gdGhlIGxpY2Vuc2luZyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGluc3RhbGxlciBvciBQeXRob24gaXRzZWxmLCBhcyBubyBjb2RlIGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlIGV4aXN0cyBpbiBhbnkgb3RoZXIgcGFydCBvZiB0aGUgcHJvZHVjdC4KKworLS0tCisKK01pY3Jvc29mdCBSZWNpcHJvY2FsIExpY2Vuc2UgKE1TLVJMKQorCitUaGlzIGxpY2Vuc2UgZ292ZXJucyB1c2Ugb2YgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGUgc29mdHdhcmUsIHlvdSBhY2NlcHQgdGhpcyBsaWNlbnNlLiBJZiB5b3UgZG8gbm90IGFjY2VwdCB0aGUgbGljZW5zZSwgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisKKzEuIERlZmluaXRpb25zCisgVGhlIHRlcm1zICJyZXByb2R1Y2UsIiAicmVwcm9kdWN0aW9uLCIgImRlcml2YXRpdmUgd29ya3MsIiBhbmQgImRpc3RyaWJ1dGlvbiIgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3LgorIEEgImNvbnRyaWJ1dGlvbiIgaXMgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBvciBhbnkgYWRkaXRpb25zIG9yIGNoYW5nZXMgdG8gdGhlIHNvZnR3YXJlLgorIEEgImNvbnRyaWJ1dG9yIiBpcyBhbnkgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgaXRzIGNvbnRyaWJ1dGlvbiB1bmRlciB0aGlzIGxpY2Vuc2UuCisgIkxpY2Vuc2VkIHBhdGVudHMiIGFyZSBhIGNvbnRyaWJ1dG9yJ3MgcGF0ZW50IGNsYWltcyB0aGF0IHJlYWQgZGlyZWN0bHkgb24gaXRzIGNvbnRyaWJ1dGlvbi4KKworMi4gR3JhbnQgb2YgUmlnaHRzCisgKEEpIENvcHlyaWdodCBHcmFudC0gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgY29uZGl0aW9ucyBhbmQgbGltaXRhdGlvbnMgaW4gc2VjdGlvbiAzLCBlYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UgaXRzIGNvbnRyaWJ1dGlvbiwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGl0cyBjb250cmlidXRpb24sIGFuZCBkaXN0cmlidXRlIGl0cyBjb250cmlidXRpb24gb3IgYW55IGRlcml2YXRpdmUgd29ya3MgdGhhdCB5b3UgY3JlYXRlLgorIChCKSBQYXRlbnQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIGluIHNlY3Rpb24gMywgZWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB1bmRlciBpdHMgbGljZW5zZWQgcGF0ZW50cyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIGl0cyBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlIG9yIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIGNvbnRyaWJ1dGlvbiBpbiB0aGUgc29mdHdhcmUuCisKKzMuIENvbmRpdGlvbnMgYW5kIExpbWl0YXRpb25zCisgKEEpIFJlY2lwcm9jYWwgR3JhbnRzLSBGb3IgYW55IGZpbGUgeW91IGRpc3RyaWJ1dGUgdGhhdCBjb250YWlucyBjb2RlIGZyb20gdGhlIHNvZnR3YXJlIChpbiBzb3VyY2UgY29kZSBvciBiaW5hcnkgZm9ybWF0KSwgeW91IG11c3QgcHJvdmlkZSByZWNpcGllbnRzIHRoZSBzb3VyY2UgY29kZSB0byB0aGF0IGZpbGUgYWxvbmcgd2l0aCBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlLCB3aGljaCBsaWNlbnNlIHdpbGwgZ292ZXJuIHRoYXQgZmlsZS4gWW91IG1heSBsaWNlbnNlIG90aGVyIGZpbGVzIHRoYXQgYXJlIGVudGlyZWx5IHlvdXIgb3duIHdvcmsgYW5kIGRvIG5vdCBjb250YWluIGNvZGUgZnJvbSB0aGUgc29mdHdhcmUgdW5kZXIgYW55IHRlcm1zIHlvdSBjaG9vc2UuCisgKEIpIE5vIFRyYWRlbWFyayBMaWNlbnNlLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHJpZ2h0cyB0byB1c2UgYW55IGNvbnRyaWJ1dG9ycycgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcy4KKyAoQykgSWYgeW91IGJyaW5nIGEgcGF0ZW50IGNsYWltIGFnYWluc3QgYW55IGNvbnRyaWJ1dG9yIG92ZXIgcGF0ZW50cyB0aGF0IHlvdSBjbGFpbSBhcmUgaW5mcmluZ2VkIGJ5IHRoZSBzb2Z0d2FyZSwgeW91ciBwYXRlbnQgbGljZW5zZSBmcm9tIHN1Y2ggY29udHJpYnV0b3IgdG8gdGhlIHNvZnR3YXJlIGVuZHMgYXV0b21hdGljYWxseS4KKyAoRCkgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlLCB5b3UgbXVzdCByZXRhaW4gYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHNvZnR3YXJlLgorIChFKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gc291cmNlIGNvZGUgZm9ybSwgeW91IG1heSBkbyBzbyBvbmx5IHVuZGVyIHRoaXMgbGljZW5zZSBieSBpbmNsdWRpbmcgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgbGljZW5zZSB3aXRoIHlvdXIgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybSwgeW91IG1heSBvbmx5IGRvIHNvIHVuZGVyIGEgbGljZW5zZSB0aGF0IGNvbXBsaWVzIHdpdGggdGhpcyBsaWNlbnNlLgorIChGKSBUaGUgc29mdHdhcmUgaXMgbGljZW5zZWQgImFzLWlzLiIgWW91IGJlYXIgdGhlIHJpc2sgb2YgdXNpbmcgaXQuIFRoZSBjb250cmlidXRvcnMgZ2l2ZSBubyBleHByZXNzIHdhcnJhbnRpZXMsIGd1YXJhbnRlZXMgb3IgY29uZGl0aW9ucy4gWW91IG1heSBoYXZlIGFkZGl0aW9uYWwgY29uc3VtZXIgcmlnaHRzIHVuZGVyIHlvdXIgbG9jYWwgbGF3cyB3aGljaCB0aGlzIGxpY2Vuc2UgY2Fubm90IGNoYW5nZS4gVG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgdW5kZXIgeW91ciBsb2NhbCBsYXdzLCB0aGUgY29udHJpYnV0b3JzIGV4Y2x1ZGUgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9ib290c3RyYXAvUHl0aG9uQm9vdHN0cmFwcGVyQXBwbGljYXRpb24uY3BwIGIvVG9vbHMvbXNpL2J1bmRsZS9ib290c3RyYXAvUHl0aG9uQm9vdHN0cmFwcGVyQXBwbGljYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NjJkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL2Jvb3RzdHJhcC9QeXRob25Cb290c3RyYXBwZXJBcHBsaWNhdGlvbi5jcHAKQEAgLTAsMCArMSwzMjU3IEBACisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIDxjb3B5cmlnaHQgZmlsZT0iV2l4U3RhbmRhcmRCb290c3RyYXBwZXJBcHBsaWNhdGlvbi5jcHAiIGNvbXBhbnk9Ik91dGVyY3VydmUgRm91bmRhdGlvbiI+CisvLyAgIENvcHlyaWdodCAoYykgMjAwNCwgT3V0ZXJjdXJ2ZSBGb3VuZGF0aW9uLgorLy8gICBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1pY3Jvc29mdCBSZWNpcHJvY2FsIExpY2Vuc2UgKE1TLVJMKS4KKy8vICAgVGhlIGxpY2Vuc2UgYW5kIGZ1cnRoZXIgY29weXJpZ2h0IHRleHQgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlCisvLyAgIExJQ0VOU0UuVFhUIGF0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorLy8gPC9jb3B5cmlnaHQ+CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisjaW5jbHVkZSAicGNoLmgiCisKK3N0YXRpYyBjb25zdCBMUENXU1RSIFBZQkFfV0lORE9XX0NMQVNTID0gTCJQeXRob25CQSI7CitzdGF0aWMgY29uc3QgTFBDV1NUUiBQWUJBX1ZBUklBQkxFX0xBVU5DSF9UQVJHRVRfUEFUSCA9IEwiTGF1bmNoVGFyZ2V0IjsKK3N0YXRpYyBjb25zdCBMUENXU1RSIFBZQkFfVkFSSUFCTEVfTEFVTkNIX1RBUkdFVF9FTEVWQVRFRF9JRCA9IEwiTGF1bmNoVGFyZ2V0RWxldmF0ZWRJZCI7CitzdGF0aWMgY29uc3QgTFBDV1NUUiBQWUJBX1ZBUklBQkxFX0xBVU5DSF9BUkdVTUVOVFMgPSBMIkxhdW5jaEFyZ3VtZW50cyI7CitzdGF0aWMgY29uc3QgTFBDV1NUUiBQWUJBX1ZBUklBQkxFX0xBVU5DSF9ISURERU4gPSBMIkxhdW5jaEhpZGRlbiI7CitzdGF0aWMgY29uc3QgRFdPUkQgUFlCQV9BQ1FVSVJFX1BFUkNFTlRBR0UgPSAzMDsKK3N0YXRpYyBjb25zdCBMUENXU1RSIFBZQkFfVkFSSUFCTEVfQlVORExFX0ZJTEVfVkVSU0lPTiA9IEwiV2l4QnVuZGxlRmlsZVZlcnNpb24iOworCitlbnVtIFBZQkFfU1RBVEUgeworICAgIFBZQkFfU1RBVEVfSU5JVElBTElaSU5HLAorICAgIFBZQkFfU1RBVEVfSU5JVElBTElaRUQsCisgICAgUFlCQV9TVEFURV9IRUxQLAorICAgIFBZQkFfU1RBVEVfREVURUNUSU5HLAorICAgIFBZQkFfU1RBVEVfREVURUNURUQsCisgICAgUFlCQV9TVEFURV9QTEFOTklORywKKyAgICBQWUJBX1NUQVRFX1BMQU5ORUQsCisgICAgUFlCQV9TVEFURV9BUFBMWUlORywKKyAgICBQWUJBX1NUQVRFX0NBQ0hJTkcsCisgICAgUFlCQV9TVEFURV9DQUNIRUQsCisgICAgUFlCQV9TVEFURV9FWEVDVVRJTkcsCisgICAgUFlCQV9TVEFURV9FWEVDVVRFRCwKKyAgICBQWUJBX1NUQVRFX0FQUExJRUQsCisgICAgUFlCQV9TVEFURV9GQUlMRUQsCit9OworCitzdGF0aWMgY29uc3QgaW50IFdNX1BZQkFfU0hPV19IRUxQID0gV01fQVBQICsgMTAwOworc3RhdGljIGNvbnN0IGludCBXTV9QWUJBX0RFVEVDVF9QQUNLQUdFUyA9IFdNX0FQUCArIDEwMTsKK3N0YXRpYyBjb25zdCBpbnQgV01fUFlCQV9QTEFOX1BBQ0tBR0VTID0gV01fQVBQICsgMTAyOworc3RhdGljIGNvbnN0IGludCBXTV9QWUJBX0FQUExZX1BBQ0tBR0VTID0gV01fQVBQICsgMTAzOworc3RhdGljIGNvbnN0IGludCBXTV9QWUJBX0NIQU5HRV9TVEFURSA9IFdNX0FQUCArIDEwNDsKK3N0YXRpYyBjb25zdCBpbnQgV01fUFlCQV9TSE9XX0ZBSUxVUkUgPSBXTV9BUFAgKyAxMDU7CisKKy8vIFRoaXMgZW51bSBtdXN0IGJlIGtlcHQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFBBR0VfTkFNRVMgYXJyYXkuCitlbnVtIFBBR0UgeworICAgIFBBR0VfTE9BRElORywKKyAgICBQQUdFX0hFTFAsCisgICAgUEFHRV9JTlNUQUxMLAorICAgIFBBR0VfVVBHUkFERSwKKyAgICBQQUdFX1NJTVBMRV9JTlNUQUxMLAorICAgIFBBR0VfQ1VTVE9NMSwKKyAgICBQQUdFX0NVU1RPTTIsCisgICAgUEFHRV9NT0RJRlksCisgICAgUEFHRV9QUk9HUkVTUywKKyAgICBQQUdFX1BST0dSRVNTX1BBU1NJVkUsCisgICAgUEFHRV9TVUNDRVNTLAorICAgIFBBR0VfRkFJTFVSRSwKKyAgICBDT1VOVF9QQUdFLAorfTsKKworLy8gVGhpcyBhcnJheSBtdXN0IGJlIGtlcHQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFBBR0UgZW51bS4KK3N0YXRpYyBMUENXU1RSIFBBR0VfTkFNRVNbXSA9IHsKKyAgICBMIkxvYWRpbmciLAorICAgIEwiSGVscCIsCisgICAgTCJJbnN0YWxsIiwKKyAgICBMIlVwZ3JhZGUiLAorICAgIEwiU2ltcGxlSW5zdGFsbCIsCisgICAgTCJDdXN0b20xIiwKKyAgICBMIkN1c3RvbTIiLAorICAgIEwiTW9kaWZ5IiwKKyAgICBMIlByb2dyZXNzIiwKKyAgICBMIlByb2dyZXNzUGFzc2l2ZSIsCisgICAgTCJTdWNjZXNzIiwKKyAgICBMIkZhaWx1cmUiLAorfTsKKworZW51bSBDT05UUk9MX0lEIHsKKyAgICAvLyBOb24tcGFnZWQgY29udHJvbHMKKyAgICBJRF9DTE9TRV9CVVRUT04gPSBUSEVNRV9GSVJTVF9BU1NJR05fQ09OVFJPTF9JRCwKKyAgICBJRF9NSU5JTUlaRV9CVVRUT04sCisKKyAgICAvLyBXZWxjb21lIHBhZ2UKKyAgICBJRF9JTlNUQUxMX0JVVFRPTiwKKyAgICBJRF9JTlNUQUxMX0NVU1RPTV9CVVRUT04sCisgICAgSURfSU5TVEFMTF9TSU1QTEVfQlVUVE9OLAorICAgIElEX0lOU1RBTExfVVBHUkFERV9CVVRUT04sCisgICAgSURfSU5TVEFMTF9VUEdSQURFX0NVU1RPTV9CVVRUT04sCisgICAgSURfSU5TVEFMTF9DQU5DRUxfQlVUVE9OLAorICAgIElEX0lOU1RBTExfTEFVTkNIRVJfQUxMX1VTRVJTX0NIRUNLQk9YLAorCisgICAgLy8gQ3VzdG9taXplIFBhZ2UKKyAgICBJRF9UQVJHRVRESVJfRURJVEJPWCwKKyAgICBJRF9DVVNUT01fQVNTT0NJQVRFX0ZJTEVTX0NIRUNLQk9YLAorICAgIElEX0NVU1RPTV9JTlNUQUxMX0FMTF9VU0VSU19DSEVDS0JPWCwKKyAgICBJRF9DVVNUT01fSU5TVEFMTF9MQVVOQ0hFUl9BTExfVVNFUlNfQ0hFQ0tCT1gsCisgICAgSURfQ1VTVE9NX0lOQ0xVREVfTEFVTkNIRVJfSEVMUF9MQUJFTCwKKyAgICBJRF9DVVNUT01fQ09NUElMRV9BTExfQ0hFQ0tCT1gsCisgICAgSURfQ1VTVE9NX0JST1dTRV9CVVRUT04sCisgICAgSURfQ1VTVE9NX0JST1dTRV9CVVRUT05fTEFCRUwsCisgICAgSURfQ1VTVE9NX0lOU1RBTExfQlVUVE9OLAorICAgIElEX0NVU1RPTV9ORVhUX0JVVFRPTiwKKyAgICBJRF9DVVNUT00xX0JBQ0tfQlVUVE9OLAorICAgIElEX0NVU1RPTTJfQkFDS19CVVRUT04sCisgICAgSURfQ1VTVE9NMV9DQU5DRUxfQlVUVE9OLAorICAgIElEX0NVU1RPTTJfQ0FOQ0VMX0JVVFRPTiwKKworICAgIC8vIE1vZGlmeSBwYWdlCisgICAgSURfTU9ESUZZX0JVVFRPTiwKKyAgICBJRF9SRVBBSVJfQlVUVE9OLAorICAgIElEX1VOSU5TVEFMTF9CVVRUT04sCisgICAgSURfTU9ESUZZX0NBTkNFTF9CVVRUT04sCisKKyAgICAvLyBQcm9ncmVzcyBwYWdlCisgICAgSURfQ0FDSEVfUFJPR1JFU1NfUEFDS0FHRV9URVhULAorICAgIElEX0NBQ0hFX1BST0dSRVNTX0JBUiwKKyAgICBJRF9DQUNIRV9QUk9HUkVTU19URVhULAorCisgICAgSURfRVhFQ1VURV9QUk9HUkVTU19QQUNLQUdFX1RFWFQsCisgICAgSURfRVhFQ1VURV9QUk9HUkVTU19CQVIsCisgICAgSURfRVhFQ1VURV9QUk9HUkVTU19URVhULAorICAgIElEX0VYRUNVVEVfUFJPR1JFU1NfQUNUSU9OREFUQV9URVhULAorCisgICAgSURfT1ZFUkFMTF9QUk9HUkVTU19QQUNLQUdFX1RFWFQsCisgICAgSURfT1ZFUkFMTF9QUk9HUkVTU19CQVIsCisgICAgSURfT1ZFUkFMTF9DQUxDVUxBVEVEX1BST0dSRVNTX0JBUiwKKyAgICBJRF9PVkVSQUxMX1BST0dSRVNTX1RFWFQsCisKKyAgICBJRF9QUk9HUkVTU19DQU5DRUxfQlVUVE9OLAorCisgICAgLy8gU3VjY2VzcyBwYWdlCisgICAgSURfTEFVTkNIX0JVVFRPTiwKKyAgICBJRF9TVUNDRVNTX1RFWFQsCisgICAgSURfU1VDQ0VTU19SRVNUQVJUX1RFWFQsCisgICAgSURfU1VDQ0VTU19SRVNUQVJUX0JVVFRPTiwKKyAgICBJRF9TVUNDRVNTX0NBTkNFTF9CVVRUT04sCisKKyAgICAvLyBGYWlsdXJlIHBhZ2UKKyAgICBJRF9GQUlMVVJFX0xPR0ZJTEVfTElOSywKKyAgICBJRF9GQUlMVVJFX01FU1NBR0VfVEVYVCwKKyAgICBJRF9GQUlMVVJFX1JFU1RBUlRfVEVYVCwKKyAgICBJRF9GQUlMVVJFX1JFU1RBUlRfQlVUVE9OLAorICAgIElEX0ZBSUxVUkVfQ0FOQ0VMX0JVVFRPTgorfTsKKworc3RhdGljIFRIRU1FX0FTU0lHTl9DT05UUk9MX0lEIENPTlRST0xfSURfTkFNRVNbXSA9IHsKKyAgICB7IElEX0NMT1NFX0JVVFRPTiwgTCJDbG9zZUJ1dHRvbiIgfSwKKyAgICB7IElEX01JTklNSVpFX0JVVFRPTiwgTCJNaW5pbWl6ZUJ1dHRvbiIgfSwKKworICAgIHsgSURfSU5TVEFMTF9CVVRUT04sIEwiSW5zdGFsbEJ1dHRvbiIgfSwKKyAgICB7IElEX0lOU1RBTExfQ1VTVE9NX0JVVFRPTiwgTCJJbnN0YWxsQ3VzdG9tQnV0dG9uIiB9LAorICAgIHsgSURfSU5TVEFMTF9TSU1QTEVfQlVUVE9OLCBMIkluc3RhbGxTaW1wbGVCdXR0b24iIH0sCisgICAgeyBJRF9JTlNUQUxMX1VQR1JBREVfQlVUVE9OLCBMIkluc3RhbGxVcGdyYWRlQnV0dG9uIiB9LAorICAgIHsgSURfSU5TVEFMTF9VUEdSQURFX0NVU1RPTV9CVVRUT04sIEwiSW5zdGFsbFVwZ3JhZGVDdXN0b21CdXR0b24iIH0sCisgICAgeyBJRF9JTlNUQUxMX0NBTkNFTF9CVVRUT04sIEwiSW5zdGFsbENhbmNlbEJ1dHRvbiIgfSwKKyAgICB7IElEX0lOU1RBTExfTEFVTkNIRVJfQUxMX1VTRVJTX0NIRUNLQk9YLCBMIkluc3RhbGxMYXVuY2hlckFsbFVzZXJzIiB9LAorCisgICAgeyBJRF9UQVJHRVRESVJfRURJVEJPWCwgTCJUYXJnZXREaXIiIH0sCisgICAgeyBJRF9DVVNUT01fQVNTT0NJQVRFX0ZJTEVTX0NIRUNLQk9YLCBMIkFzc29jaWF0ZUZpbGVzIiB9LAorICAgIHsgSURfQ1VTVE9NX0lOU1RBTExfQUxMX1VTRVJTX0NIRUNLQk9YLCBMIkluc3RhbGxBbGxVc2VycyIgfSwKKyAgICB7IElEX0NVU1RPTV9JTlNUQUxMX0xBVU5DSEVSX0FMTF9VU0VSU19DSEVDS0JPWCwgTCJDdXN0b21JbnN0YWxsTGF1bmNoZXJBbGxVc2VycyIgfSwKKyAgICB7IElEX0NVU1RPTV9JTkNMVURFX0xBVU5DSEVSX0hFTFBfTEFCRUwsIEwiSW5jbHVkZV9sYXVuY2hlckhlbHAiIH0sCisgICAgeyBJRF9DVVNUT01fQ09NUElMRV9BTExfQ0hFQ0tCT1gsIEwiQ29tcGlsZUFsbCIgfSwKKyAgICB7IElEX0NVU1RPTV9CUk9XU0VfQlVUVE9OLCBMIkN1c3RvbUJyb3dzZUJ1dHRvbiIgfSwKKyAgICB7IElEX0NVU1RPTV9CUk9XU0VfQlVUVE9OX0xBQkVMLCBMIkN1c3RvbUJyb3dzZUJ1dHRvbkxhYmVsIiB9LAorICAgIHsgSURfQ1VTVE9NX0lOU1RBTExfQlVUVE9OLCBMIkN1c3RvbUluc3RhbGxCdXR0b24iIH0sCisgICAgeyBJRF9DVVNUT01fTkVYVF9CVVRUT04sIEwiQ3VzdG9tTmV4dEJ1dHRvbiIgfSwKKyAgICB7IElEX0NVU1RPTTFfQkFDS19CVVRUT04sIEwiQ3VzdG9tMUJhY2tCdXR0b24iIH0sCisgICAgeyBJRF9DVVNUT00yX0JBQ0tfQlVUVE9OLCBMIkN1c3RvbTJCYWNrQnV0dG9uIiB9LAorICAgIHsgSURfQ1VTVE9NMV9DQU5DRUxfQlVUVE9OLCBMIkN1c3RvbTFDYW5jZWxCdXR0b24iIH0sCisgICAgeyBJRF9DVVNUT00yX0NBTkNFTF9CVVRUT04sIEwiQ3VzdG9tMkNhbmNlbEJ1dHRvbiIgfSwKKworICAgIHsgSURfTU9ESUZZX0JVVFRPTiwgTCJNb2RpZnlCdXR0b24iIH0sCisgICAgeyBJRF9SRVBBSVJfQlVUVE9OLCBMIlJlcGFpckJ1dHRvbiIgfSwKKyAgICB7IElEX1VOSU5TVEFMTF9CVVRUT04sIEwiVW5pbnN0YWxsQnV0dG9uIiB9LAorICAgIHsgSURfTU9ESUZZX0NBTkNFTF9CVVRUT04sIEwiTW9kaWZ5Q2FuY2VsQnV0dG9uIiB9LAorCisgICAgeyBJRF9DQUNIRV9QUk9HUkVTU19QQUNLQUdFX1RFWFQsIEwiQ2FjaGVQcm9ncmVzc1BhY2thZ2VUZXh0IiB9LAorICAgIHsgSURfQ0FDSEVfUFJPR1JFU1NfQkFSLCBMIkNhY2hlUHJvZ3Jlc3NiYXIiIH0sCisgICAgeyBJRF9DQUNIRV9QUk9HUkVTU19URVhULCBMIkNhY2hlUHJvZ3Jlc3NUZXh0IiB9LAorICAgIHsgSURfRVhFQ1VURV9QUk9HUkVTU19QQUNLQUdFX1RFWFQsIEwiRXhlY3V0ZVByb2dyZXNzUGFja2FnZVRleHQiIH0sCisgICAgeyBJRF9FWEVDVVRFX1BST0dSRVNTX0JBUiwgTCJFeGVjdXRlUHJvZ3Jlc3NiYXIiIH0sCisgICAgeyBJRF9FWEVDVVRFX1BST0dSRVNTX1RFWFQsIEwiRXhlY3V0ZVByb2dyZXNzVGV4dCIgfSwKKyAgICB7IElEX0VYRUNVVEVfUFJPR1JFU1NfQUNUSU9OREFUQV9URVhULCBMIkV4ZWN1dGVQcm9ncmVzc0FjdGlvbkRhdGFUZXh0IiB9LAorICAgIHsgSURfT1ZFUkFMTF9QUk9HUkVTU19QQUNLQUdFX1RFWFQsIEwiT3ZlcmFsbFByb2dyZXNzUGFja2FnZVRleHQiIH0sCisgICAgeyBJRF9PVkVSQUxMX1BST0dSRVNTX0JBUiwgTCJPdmVyYWxsUHJvZ3Jlc3NiYXIiIH0sCisgICAgeyBJRF9PVkVSQUxMX0NBTENVTEFURURfUFJPR1JFU1NfQkFSLCBMIk92ZXJhbGxDYWxjdWxhdGVkUHJvZ3Jlc3NiYXIiIH0sCisgICAgeyBJRF9PVkVSQUxMX1BST0dSRVNTX1RFWFQsIEwiT3ZlcmFsbFByb2dyZXNzVGV4dCIgfSwKKyAgICB7IElEX1BST0dSRVNTX0NBTkNFTF9CVVRUT04sIEwiUHJvZ3Jlc3NDYW5jZWxCdXR0b24iIH0sCisKKyAgICB7IElEX0xBVU5DSF9CVVRUT04sIEwiTGF1bmNoQnV0dG9uIiB9LAorICAgIHsgSURfU1VDQ0VTU19URVhULCBMIlN1Y2Nlc3NUZXh0IiB9LAorICAgIHsgSURfU1VDQ0VTU19SRVNUQVJUX1RFWFQsIEwiU3VjY2Vzc1Jlc3RhcnRUZXh0IiB9LAorICAgIHsgSURfU1VDQ0VTU19SRVNUQVJUX0JVVFRPTiwgTCJTdWNjZXNzUmVzdGFydEJ1dHRvbiIgfSwKKyAgICB7IElEX1NVQ0NFU1NfQ0FOQ0VMX0JVVFRPTiwgTCJTdWNjZXNzQ2FuY2VsQnV0dG9uIiB9LAorCisgICAgeyBJRF9GQUlMVVJFX0xPR0ZJTEVfTElOSywgTCJGYWlsdXJlTG9nRmlsZUxpbmsiIH0sCisgICAgeyBJRF9GQUlMVVJFX01FU1NBR0VfVEVYVCwgTCJGYWlsdXJlTWVzc2FnZVRleHQiIH0sCisgICAgeyBJRF9GQUlMVVJFX1JFU1RBUlRfVEVYVCwgTCJGYWlsdXJlUmVzdGFydFRleHQiIH0sCisgICAgeyBJRF9GQUlMVVJFX1JFU1RBUlRfQlVUVE9OLCBMIkZhaWx1cmVSZXN0YXJ0QnV0dG9uIiB9LAorICAgIHsgSURfRkFJTFVSRV9DQU5DRUxfQlVUVE9OLCBMIkZhaWx1cmVDYW5jZWxCdXR0b24iIH0sCit9OworCitzdGF0aWMgc3RydWN0IHsgTFBDV1NUUiByZWdOYW1lOyBMUENXU1RSIHZhcmlhYmxlTmFtZTsgfSBPUFRJT05BTF9GRUFUVVJFU1tdID0geworICAgIHsgTCJjb3JlX2QiLCBMIkluY2x1ZGVfZGVidWciIH0sCisgICAgeyBMImNvcmVfcGRiIiwgTCJJbmNsdWRlX3N5bWJvbHMiIH0sCisgICAgeyBMImRldiIsIEwiSW5jbHVkZV9kZXYiIH0sCisgICAgeyBMImRvYyIsIEwiSW5jbHVkZV9kb2MiIH0sCisgICAgeyBMImV4ZSIsIEwiSW5jbHVkZV9leGUiIH0sCisgICAgeyBMImxpYiIsIEwiSW5jbHVkZV9saWIiIH0sCisgICAgeyBMInBhdGgiLCBMIlByZXBlbmRQYXRoIiB9LAorICAgIHsgTCJwaXAiLCBMIkluY2x1ZGVfcGlwIiB9LAorICAgIHsgTCJ0Y2x0ayIsIEwiSW5jbHVkZV90Y2x0ayIgfSwKKyAgICB7IEwidGVzdCIsIEwiSW5jbHVkZV90ZXN0IiB9LAorICAgIHsgTCJ0b29scyIsIEwiSW5jbHVkZV90b29scyIgfSwKKyAgICB7IEwiU2hvcnRjdXRzIiwgTCJTaG9ydGN1dHMiIH0sCisgICAgLy8gSW5jbHVkZV9sYXVuY2hlciBhbmQgQXNzb2NpYXRlRmlsZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBhbmQgc28gZG8KKyAgICAvLyBub3QgbmVlZCB0byBiZSBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuCisgICAgeyBudWxscHRyLCBudWxscHRyIH0KK307CisKKworCitjbGFzcyBQeXRob25Cb290c3RyYXBwZXJBcHBsaWNhdGlvbiA6IHB1YmxpYyBDQmFsQmFzZUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uIHsKKyAgICB2b2lkIFNob3dQYWdlKERXT1JEIG5ld1BhZ2VJZCkgeworICAgICAgICAvLyBQcm9jZXNzIGVhY2ggY29udHJvbCBmb3Igc3BlY2lhbCBoYW5kbGluZyBpbiB0aGUgbmV3IHBhZ2UuCisgICAgICAgIFByb2Nlc3NQYWdlQ29udHJvbHMoVGhlbWVHZXRQYWdlKF90aGVtZSwgbmV3UGFnZUlkKSk7CisKKyAgICAgICAgLy8gRW5hYmxlIGRpc2FibGUgY29udHJvbHMgcGVyLXBhZ2UuCisgICAgICAgIGlmIChfcGFnZUlkc1tQQUdFX0lOU1RBTExdID09IG5ld1BhZ2VJZCB8fAorICAgICAgICAgICAgX3BhZ2VJZHNbUEFHRV9TSU1QTEVfSU5TVEFMTF0gPT0gbmV3UGFnZUlkIHx8CisgICAgICAgICAgICBfcGFnZUlkc1tQQUdFX1VQR1JBREVdID09IG5ld1BhZ2VJZCkgeworICAgICAgICAgICAgSW5zdGFsbFBhZ2VfU2hvdygpOworICAgICAgICB9IGVsc2UgaWYgKF9wYWdlSWRzW1BBR0VfQ1VTVE9NMV0gPT0gbmV3UGFnZUlkKSB7CisgICAgICAgICAgICBDdXN0b20xUGFnZV9TaG93KCk7CisgICAgICAgIH0gZWxzZSBpZiAoX3BhZ2VJZHNbUEFHRV9DVVNUT00yXSA9PSBuZXdQYWdlSWQpIHsKKyAgICAgICAgICAgIEN1c3RvbTJQYWdlX1Nob3coKTsKKyAgICAgICAgfSBlbHNlIGlmIChfcGFnZUlkc1tQQUdFX01PRElGWV0gPT0gbmV3UGFnZUlkKSB7CisgICAgICAgICAgICBNb2RpZnlQYWdlX1Nob3coKTsKKyAgICAgICAgfSBlbHNlIGlmIChfcGFnZUlkc1tQQUdFX1NVQ0NFU1NdID09IG5ld1BhZ2VJZCkgeworICAgICAgICAgICAgU3VjY2Vzc1BhZ2VfU2hvdygpOworICAgICAgICB9IGVsc2UgaWYgKF9wYWdlSWRzW1BBR0VfRkFJTFVSRV0gPT0gbmV3UGFnZUlkKSB7CisgICAgICAgICAgICBGYWlsdXJlUGFnZV9TaG93KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQcmV2ZW50IHJlcGFpbnRpbmcgd2hpbGUgc3dpdGNoaW5nIHBhZ2UgdG8gYXZvaWQgdWdseSBmbGlja2VyaW5nCisgICAgICAgIF9zdXBwcmVzc1BhaW50ID0gVFJVRTsKKyAgICAgICAgVGhlbWVTaG93UGFnZShfdGhlbWUsIG5ld1BhZ2VJZCwgU1dfU0hPVyk7CisgICAgICAgIFRoZW1lU2hvd1BhZ2UoX3RoZW1lLCBfdmlzaWJsZVBhZ2VJZCwgU1dfSElERSk7CisgICAgICAgIF9zdXBwcmVzc1BhaW50ID0gRkFMU0U7CisgICAgICAgIEludmFsaWRhdGVSZWN0KF90aGVtZS0+aHduZFBhcmVudCwgbnVsbHB0ciwgVFJVRSk7CisgICAgICAgIF92aXNpYmxlUGFnZUlkID0gbmV3UGFnZUlkOworCisgICAgICAgIC8vIE9uIHRoZSBpbnN0YWxsIHBhZ2Ugc2V0IHRoZSBmb2N1cyB0byB0aGUgaW5zdGFsbCBidXR0b24gb3IKKyAgICAgICAgLy8gdGhlIG5leHQgZW5hYmxlZCBjb250cm9sIGlmIGluc3RhbGwgaXMgZGlzYWJsZWQKKyAgICAgICAgaWYgKF9wYWdlSWRzW1BBR0VfSU5TVEFMTF0gPT0gbmV3UGFnZUlkKSB7CisgICAgICAgICAgICBUaGVtZVNldEZvY3VzKF90aGVtZSwgSURfSU5TVEFMTF9CVVRUT04pOworICAgICAgICB9IGVsc2UgaWYgKF9wYWdlSWRzW1BBR0VfU0lNUExFX0lOU1RBTExdID09IG5ld1BhZ2VJZCkgeworICAgICAgICAgICAgVGhlbWVTZXRGb2N1cyhfdGhlbWUsIElEX0lOU1RBTExfU0lNUExFX0JVVFRPTik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIEhhbmRsZXMgY29udHJvbCBjbGlja3MKKyAgICAvLworICAgIHZvaWQgT25Db21tYW5kKENPTlRST0xfSUQgaWQpIHsKKyAgICAgICAgTFBXU1RSIGRlZmF1bHREaXIgPSBudWxscHRyOworICAgICAgICBMUFdTVFIgdGFyZ2V0RGlyID0gbnVsbHB0cjsKKyAgICAgICAgTE9OR0xPTkcgZWxldmF0ZWQsIGNydEluc3RhbGxlZCwgaW5zdGFsbEFsbFVzZXJzOworICAgICAgICBCT09MIGNoZWNrZWQsIGxhdW5jaGVyQ2hlY2tlZDsKKyAgICAgICAgV0NIQVIgd3pQYXRoW01BWF9QQVRIXSA9IHsgfTsKKyAgICAgICAgQlJPV1NFSU5GT1cgYnJvd3NlSW5mbyA9IHsgfTsKKyAgICAgICAgUElETElTVF9BQlNPTFVURSBwaWRsID0gbnVsbHB0cjsKKyAgICAgICAgRFdPUkQgcGFnZUlkOworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgICAgICBzd2l0Y2goaWQpIHsKKyAgICAgICAgY2FzZSBJRF9DTE9TRV9CVVRUT046CisgICAgICAgICAgICBPbkNsaWNrQ2xvc2VCdXR0b24oKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIEluc3RhbGwgY29tbWFuZHMKKyAgICAgICAgY2FzZSBJRF9JTlNUQUxMX1NJTVBMRV9CVVRUT046IF9fZmFsbHRocm91Z2g7CisgICAgICAgIGNhc2UgSURfSU5TVEFMTF9VUEdSQURFX0JVVFRPTjogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgY2FzZSBJRF9JTlNUQUxMX0JVVFRPTjoKKyAgICAgICAgICAgIFNhdmVQYWdlU2V0dGluZ3MoKTsKKworICAgICAgICAgICAgaWYgKCFXaWxsRWxldmF0ZSgpICYmICFRdWVyeUVsZXZhdGVGb3JDcnRJbnN0YWxsKCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaHIgPSBCYWxHZXROdW1lcmljVmFyaWFibGUoTCJJbnN0YWxsQWxsVXNlcnMiLCAmaW5zdGFsbEFsbFVzZXJzKTsKKyAgICAgICAgICAgIEV4aXRPbkZhaWx1cmUoaHIsIEwiRmFpbGVkIHRvIGdldCBpbnN0YWxsIHNjb3BlIik7CisKKyAgICAgICAgICAgIGhyID0gX2VuZ2luZS0+U2V0VmFyaWFibGVOdW1lcmljKEwiQ29tcGlsZUFsbCIsIGluc3RhbGxBbGxVc2Vycyk7CisgICAgICAgICAgICBFeGl0T25GYWlsdXJlKGhyLCBMIkZhaWxlZCB0byB1cGRhdGUgQ29tcGlsZUFsbCIpOworCisgICAgICAgICAgICBociA9IEVuc3VyZVRhcmdldERpcigpOworICAgICAgICAgICAgRXhpdE9uRmFpbHVyZShociwgTCJGYWlsZWQgdG8gc2V0IFRhcmdldERpciIpOworCisgICAgICAgICAgICBPblBsYW4oQk9PVFNUUkFQUEVSX0FDVElPTl9JTlNUQUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSURfQ1VTVE9NMV9CQUNLX0JVVFRPTjoKKyAgICAgICAgICAgIFNhdmVQYWdlU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIGlmIChfbW9kaWZ5aW5nKSB7CisgICAgICAgICAgICAgICAgR29Ub1BhZ2UoUEFHRV9NT0RJRlkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChfdXBncmFkaW5nKSB7CisgICAgICAgICAgICAgICAgR29Ub1BhZ2UoUEFHRV9VUEdSQURFKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgR29Ub1BhZ2UoUEFHRV9JTlNUQUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSURfSU5TVEFMTF9DVVNUT01fQlVUVE9OOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICBjYXNlIElEX0lOU1RBTExfVVBHUkFERV9DVVNUT01fQlVUVE9OOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICBjYXNlIElEX0NVU1RPTTJfQkFDS19CVVRUT046CisgICAgICAgICAgICBTYXZlUGFnZVNldHRpbmdzKCk7CisgICAgICAgICAgICBHb1RvUGFnZShQQUdFX0NVU1RPTTEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJRF9DVVNUT01fTkVYVF9CVVRUT046CisgICAgICAgICAgICBTYXZlUGFnZVNldHRpbmdzKCk7CisgICAgICAgICAgICBHb1RvUGFnZShQQUdFX0NVU1RPTTIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJRF9DVVNUT01fSU5TVEFMTF9CVVRUT046CisgICAgICAgICAgICBTYXZlUGFnZVNldHRpbmdzKCk7CisKKyAgICAgICAgICAgIGhyID0gQmFsR2V0U3RyaW5nVmFyaWFibGUoTCJUYXJnZXREaXIiLCAmdGFyZ2V0RGlyKTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgd2hldGhlciBkaXJlY3RvcnkgZXhpc3RzIGFuZCBjb250YWlucyBhbm90aGVyIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgIFJlbGVhc2VTdHIodGFyZ2V0RGlyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFXaWxsRWxldmF0ZSgpICYmICFRdWVyeUVsZXZhdGVGb3JDcnRJbnN0YWxsKCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT25QbGFuKF9jb21tYW5kLmFjdGlvbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElEX0lOU1RBTExfTEFVTkNIRVJfQUxMX1VTRVJTX0NIRUNLQk9YOgorICAgICAgICAgICAgY2hlY2tlZCA9IFRoZW1lSXNDb250cm9sQ2hlY2tlZChfdGhlbWUsIElEX0lOU1RBTExfTEFVTkNIRVJfQUxMX1VTRVJTX0NIRUNLQk9YKTsKKyAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkluc3RhbGxMYXVuY2hlckFsbFVzZXJzIiwgY2hlY2tlZCk7CisKKyAgICAgICAgICAgIFRoZW1lQ29udHJvbEVsZXZhdGVzKF90aGVtZSwgSURfSU5TVEFMTF9CVVRUT04sIFdpbGxFbGV2YXRlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJRF9DVVNUT01fSU5TVEFMTF9MQVVOQ0hFUl9BTExfVVNFUlNfQ0hFQ0tCT1g6CisgICAgICAgICAgICBjaGVja2VkID0gVGhlbWVJc0NvbnRyb2xDaGVja2VkKF90aGVtZSwgSURfQ1VTVE9NX0lOU1RBTExfTEFVTkNIRVJfQUxMX1VTRVJTX0NIRUNLQk9YKTsKKyAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkluc3RhbGxMYXVuY2hlckFsbFVzZXJzIiwgY2hlY2tlZCk7CisKKyAgICAgICAgICAgIFRoZW1lQ29udHJvbEVsZXZhdGVzKF90aGVtZSwgSURfQ1VTVE9NX0lOU1RBTExfQlVUVE9OLCBXaWxsRWxldmF0ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSURfQ1VTVE9NX0lOU1RBTExfQUxMX1VTRVJTX0NIRUNLQk9YOgorICAgICAgICAgICAgY2hlY2tlZCA9IFRoZW1lSXNDb250cm9sQ2hlY2tlZChfdGhlbWUsIElEX0NVU1RPTV9JTlNUQUxMX0FMTF9VU0VSU19DSEVDS0JPWCk7CisgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoTCJJbnN0YWxsQWxsVXNlcnMiLCBjaGVja2VkKTsKKworICAgICAgICAgICAgVGhlbWVDb250cm9sRWxldmF0ZXMoX3RoZW1lLCBJRF9DVVNUT01fSU5TVEFMTF9CVVRUT04sIFdpbGxFbGV2YXRlKCkpOworICAgICAgICAgICAgVGhlbWVDb250cm9sRW5hYmxlKF90aGVtZSwgSURfQ1VTVE9NX0JST1dTRV9CVVRUT05fTEFCRUwsICFjaGVja2VkKTsKKyAgICAgICAgICAgIGlmIChjaGVja2VkKSB7CisgICAgICAgICAgICAgICAgX2VuZ2luZS0+U2V0VmFyaWFibGVOdW1lcmljKEwiQ29tcGlsZUFsbCIsIDEpOworICAgICAgICAgICAgICAgIFRoZW1lU2VuZENvbnRyb2xNZXNzYWdlKF90aGVtZSwgSURfQ1VTVE9NX0NPTVBJTEVfQUxMX0NIRUNLQk9YLCBCTV9TRVRDSEVDSywgQlNUX0NIRUNLRUQsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVGhlbWVHZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX1RBUkdFVERJUl9FRElUQk9YLCAmdGFyZ2V0RGlyKTsKKyAgICAgICAgICAgIGlmICh0YXJnZXREaXIpIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgY3VycmVudCB2YWx1ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IHRvIHNlZQorICAgICAgICAgICAgICAgIC8vIGlmIHdlIHNob3VsZCBzd2l0Y2ggaXQgYXV0b21hdGljYWxseS4KKyAgICAgICAgICAgICAgICBociA9IEJhbEdldFN0cmluZ1ZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAgICBjaGVja2VkID8gTCJEZWZhdWx0SnVzdEZvck1lVGFyZ2V0RGlyIiA6IEwiRGVmYXVsdEFsbFVzZXJzVGFyZ2V0RGlyIiwKKyAgICAgICAgICAgICAgICAgICAgJmRlZmF1bHREaXIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIGRlZmF1bHREaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgTFBXU1RSIGZvcm1hdHRlZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0RGlyWzBdICYmIFNVQ0NFRURFRChCYWxGb3JtYXRTdHJpbmcoZGVmYXVsdERpciwgJmZvcm1hdHRlZCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2NzY21wKGZvcm1hdHRlZCwgdGFyZ2V0RGlyKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVN0cihkZWZhdWx0RGlyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0RGlyID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlU3RyKGZvcm1hdHRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBociA9IEJhbEdldFN0cmluZ1ZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkID8gTCJEZWZhdWx0QWxsVXNlcnNUYXJnZXREaXIiIDogTCJEZWZhdWx0SnVzdEZvck1lVGFyZ2V0RGlyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlZmF1bHREaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIGRlZmF1bHREaXIgJiYgZGVmYXVsdERpclswXSAmJiBTVUNDRUVERUQoQmFsRm9ybWF0U3RyaW5nKGRlZmF1bHREaXIsICZmb3JtYXR0ZWQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVtZVNldFRleHRDb250cm9sKF90aGVtZSwgSURfVEFSR0VURElSX0VESVRCT1gsIGZvcm1hdHRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VTdHIoZm9ybWF0dGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VTdHIoZm9ybWF0dGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgUmVsZWFzZVN0cihkZWZhdWx0RGlyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElEX0NVU1RPTV9CUk9XU0VfQlVUVE9OOgorICAgICAgICAgICAgYnJvd3NlSW5mby5od25kT3duZXIgPSBfaFduZDsKKyAgICAgICAgICAgIGJyb3dzZUluZm8ucHN6RGlzcGxheU5hbWUgPSB3elBhdGg7CisgICAgICAgICAgICBicm93c2VJbmZvLmxwc3pUaXRsZSA9IF90aGVtZS0+c2N6Q2FwdGlvbjsKKyAgICAgICAgICAgIGJyb3dzZUluZm8udWxGbGFncyA9IEJJRl9SRVRVUk5PTkxZRlNESVJTIHwgQklGX1VTRU5FV1VJOworICAgICAgICAgICAgcGlkbCA9IDo6U0hCcm93c2VGb3JGb2xkZXJXKCZicm93c2VJbmZvKTsKKyAgICAgICAgICAgIGlmIChwaWRsICYmIDo6U0hHZXRQYXRoRnJvbUlETGlzdFcocGlkbCwgd3pQYXRoKSkgeworICAgICAgICAgICAgICAgIFRoZW1lU2V0VGV4dENvbnRyb2woX3RoZW1lLCBJRF9UQVJHRVRESVJfRURJVEJPWCwgd3pQYXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBpZGwpIHsKKyAgICAgICAgICAgICAgICA6OkNvVGFza01lbUZyZWUocGlkbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBNb2RpZnkgY29tbWFuZHMKKyAgICAgICAgY2FzZSBJRF9NT0RJRllfQlVUVE9OOgorICAgICAgICAgICAgLy8gU29tZSB2YXJpYWJsZXMgY2Fubm90IGJlIG1vZGlmaWVkCisgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZVN0cmluZyhMIkluc3RhbGxBbGxVc2Vyc1N0YXRlIiwgTCJkaXNhYmxlIik7CisgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZVN0cmluZyhMIkluc3RhbGxMYXVuY2hlckFsbFVzZXJzU3RhdGUiLCBMImRpc2FibGUiKTsKKyAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlU3RyaW5nKEwiVGFyZ2V0RGlyU3RhdGUiLCBMImRpc2FibGUiKTsKKyAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlU3RyaW5nKEwiQ3VzdG9tQnJvd3NlQnV0dG9uU3RhdGUiLCBMImRpc2FibGUiKTsKKyAgICAgICAgICAgIF9tb2RpZnlpbmcgPSBUUlVFOworICAgICAgICAgICAgR29Ub1BhZ2UoUEFHRV9DVVNUT00xKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSURfUkVQQUlSX0JVVFRPTjoKKyAgICAgICAgICAgIE9uUGxhbihCT09UU1RSQVBQRVJfQUNUSU9OX1JFUEFJUik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElEX1VOSU5TVEFMTF9CVVRUT046CisgICAgICAgICAgICBPblBsYW4oQk9PVFNUUkFQUEVSX0FDVElPTl9VTklOU1RBTEwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIExFeGl0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdm9pZCBJbnN0YWxsUGFnZV9TaG93KCkgeworICAgICAgICAvLyBFbnN1cmUgdGhlIEFsbCBVc2VycyBpbnN0YWxsIGJ1dHRvbiBoYXMgYSBVQUMgc2hpZWxkCisgICAgICAgIEJPT0wgZWxldmF0ZWQgPSBXaWxsRWxldmF0ZSgpOworICAgICAgICBUaGVtZUNvbnRyb2xFbGV2YXRlcyhfdGhlbWUsIElEX0lOU1RBTExfQlVUVE9OLCBlbGV2YXRlZCk7CisgICAgICAgIFRoZW1lQ29udHJvbEVsZXZhdGVzKF90aGVtZSwgSURfSU5TVEFMTF9TSU1QTEVfQlVUVE9OLCBlbGV2YXRlZCk7CisgICAgICAgIFRoZW1lQ29udHJvbEVsZXZhdGVzKF90aGVtZSwgSURfSU5TVEFMTF9VUEdSQURFX0JVVFRPTiwgZWxldmF0ZWQpOworICAgIH0KKworICAgIHZvaWQgQ3VzdG9tMVBhZ2VfU2hvdygpIHsKKyAgICAgICAgTE9OR0xPTkcgaW5zdGFsbExhdW5jaGVyQWxsVXNlcnM7CisKKyAgICAgICAgaWYgKEZBSUxFRChCYWxHZXROdW1lcmljVmFyaWFibGUoTCJJbnN0YWxsTGF1bmNoZXJBbGxVc2VycyIsICZpbnN0YWxsTGF1bmNoZXJBbGxVc2VycykpKSB7CisgICAgICAgICAgICBpbnN0YWxsTGF1bmNoZXJBbGxVc2VycyA9IDA7CisgICAgICAgIH0KKworICAgICAgICBUaGVtZVNlbmRDb250cm9sTWVzc2FnZShfdGhlbWUsIElEX0NVU1RPTV9JTlNUQUxMX0xBVU5DSEVSX0FMTF9VU0VSU19DSEVDS0JPWCwgQk1fU0VUQ0hFQ0ssCisgICAgICAgICAgICBpbnN0YWxsTGF1bmNoZXJBbGxVc2VycyA/IEJTVF9DSEVDS0VEIDogQlNUX1VOQ0hFQ0tFRCwgMCk7CisKKyAgICAgICAgTE9DX1NUUklORyAqcExvY1N0cmluZyA9IG51bGxwdHI7CisgICAgICAgIExQQ1dTVFIgbG9jS2V5ID0gTCIjKGxvYy5JbmNsdWRlX2xhdW5jaGVySGVscCkiOworICAgICAgICBMT05HTE9ORyBkZXRlY3RlZExhdW5jaGVyOworCisgICAgICAgIGlmIChTVUNDRUVERUQoQmFsR2V0TnVtZXJpY1ZhcmlhYmxlKEwiRGV0ZWN0ZWRMYXVuY2hlciIsICZkZXRlY3RlZExhdW5jaGVyKSkgJiYgZGV0ZWN0ZWRMYXVuY2hlcikgeworICAgICAgICAgICAgbG9jS2V5ID0gTCIjKGxvYy5JbmNsdWRlX2xhdW5jaGVyUmVtb3ZlKSI7CisgICAgICAgIH0gZWxzZSBpZiAoU1VDQ0VFREVEKEJhbEdldE51bWVyaWNWYXJpYWJsZShMIkRldGVjdGVkT2xkTGF1bmNoZXIiLCAmZGV0ZWN0ZWRMYXVuY2hlcikpICYmIGRldGVjdGVkTGF1bmNoZXIpIHsKKyAgICAgICAgICAgIGxvY0tleSA9IEwiIyhsb2MuSW5jbHVkZV9sYXVuY2hlclVwZ3JhZGUpIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChTVUNDRUVERUQoTG9jR2V0U3RyaW5nKF93aXhMb2MsIGxvY0tleSwgJnBMb2NTdHJpbmcpKSAmJiBwTG9jU3RyaW5nKSB7CisgICAgICAgICAgICBUaGVtZVNldFRleHRDb250cm9sKF90aGVtZSwgSURfQ1VTVE9NX0lOQ0xVREVfTEFVTkNIRVJfSEVMUF9MQUJFTCwgcExvY1N0cmluZy0+d3pUZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgQ3VzdG9tMlBhZ2VfU2hvdygpIHsKKyAgICAgICAgSFJFU1VMVCBocjsKKyAgICAgICAgTE9OR0xPTkcgaW5zdGFsbEFsbCwgaW5jbHVkZUxhdW5jaGVyOworICAgICAgICAKKyAgICAgICAgaWYgKEZBSUxFRChCYWxHZXROdW1lcmljVmFyaWFibGUoTCJJbnN0YWxsQWxsVXNlcnMiLCAmaW5zdGFsbEFsbCkpKSB7CisgICAgICAgICAgICBpbnN0YWxsQWxsID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChXaWxsRWxldmF0ZSgpKSB7CisgICAgICAgICAgICBUaGVtZUNvbnRyb2xFbGV2YXRlcyhfdGhlbWUsIElEX0NVU1RPTV9JTlNUQUxMX0JVVFRPTiwgVFJVRSk7CisgICAgICAgICAgICBUaGVtZVNob3dDb250cm9sKF90aGVtZSwgSURfQ1VTVE9NX0JST1dTRV9CVVRUT05fTEFCRUwsIFNXX0hJREUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVGhlbWVDb250cm9sRWxldmF0ZXMoX3RoZW1lLCBJRF9DVVNUT01fSU5TVEFMTF9CVVRUT04sIEZBTFNFKTsKKyAgICAgICAgICAgIFRoZW1lU2hvd0NvbnRyb2woX3RoZW1lLCBJRF9DVVNUT01fQlJPV1NFX0JVVFRPTl9MQUJFTCwgU1dfU0hPVyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoU1VDQ0VFREVEKEJhbEdldE51bWVyaWNWYXJpYWJsZShMIkluY2x1ZGVfbGF1bmNoZXIiLCAmaW5jbHVkZUxhdW5jaGVyKSkgJiYgaW5jbHVkZUxhdW5jaGVyKSB7CisgICAgICAgICAgICBUaGVtZUNvbnRyb2xFbmFibGUoX3RoZW1lLCBJRF9DVVNUT01fQVNTT0NJQVRFX0ZJTEVTX0NIRUNLQk9YLCBUUlVFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFRoZW1lU2VuZENvbnRyb2xNZXNzYWdlKF90aGVtZSwgSURfQ1VTVE9NX0FTU09DSUFURV9GSUxFU19DSEVDS0JPWCwgQk1fU0VUQ0hFQ0ssIEJTVF9VTkNIRUNLRUQsIDApOworICAgICAgICAgICAgVGhlbWVDb250cm9sRW5hYmxlKF90aGVtZSwgSURfQ1VTVE9NX0FTU09DSUFURV9GSUxFU19DSEVDS0JPWCwgRkFMU0UpOworICAgICAgICB9CisKKyAgICAgICAgTFBXU1RSIHRhcmdldERpciA9IG51bGxwdHI7CisgICAgICAgIGhyID0gQmFsR2V0U3RyaW5nVmFyaWFibGUoTCJUYXJnZXREaXIiLCAmdGFyZ2V0RGlyKTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgdGFyZ2V0RGlyICYmIHRhcmdldERpclswXSkgeworICAgICAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX1RBUkdFVERJUl9FRElUQk9YLCB0YXJnZXREaXIpOworICAgICAgICAgICAgU3RyRnJlZSh0YXJnZXREaXIpOworICAgICAgICB9IGVsc2UgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgICAgICAgIFN0ckZyZWUodGFyZ2V0RGlyKTsKKyAgICAgICAgICAgIHRhcmdldERpciA9IG51bGxwdHI7CisKKyAgICAgICAgICAgIExQV1NUUiBkZWZhdWx0VGFyZ2V0RGlyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGhyID0gQmFsR2V0U3RyaW5nVmFyaWFibGUoTCJEZWZhdWx0Q3VzdG9tVGFyZ2V0RGlyIiwgJmRlZmF1bHRUYXJnZXREaXIpOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgZGVmYXVsdFRhcmdldERpciAmJiAhZGVmYXVsdFRhcmdldERpclswXSkgeworICAgICAgICAgICAgICAgIFN0ckZyZWUoZGVmYXVsdFRhcmdldERpcik7CisgICAgICAgICAgICAgICAgZGVmYXVsdFRhcmdldERpciA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaHIgPSBCYWxHZXRTdHJpbmdWYXJpYWJsZSgKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFsbEFsbCA/IEwiRGVmYXVsdEFsbFVzZXJzVGFyZ2V0RGlyIiA6IEwiRGVmYXVsdEp1c3RGb3JNZVRhcmdldERpciIsCisgICAgICAgICAgICAgICAgICAgICZkZWZhdWx0VGFyZ2V0RGlyCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIGRlZmF1bHRUYXJnZXREaXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFRhcmdldERpclswXSAmJiBTVUNDRUVERUQoQmFsRm9ybWF0U3RyaW5nKGRlZmF1bHRUYXJnZXREaXIsICZ0YXJnZXREaXIpKSkgeworICAgICAgICAgICAgICAgICAgICBUaGVtZVNldFRleHRDb250cm9sKF90aGVtZSwgSURfVEFSR0VURElSX0VESVRCT1gsIHRhcmdldERpcik7CisgICAgICAgICAgICAgICAgICAgIFN0ckZyZWUodGFyZ2V0RGlyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU3RyRnJlZShkZWZhdWx0VGFyZ2V0RGlyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgTW9kaWZ5UGFnZV9TaG93KCkgeworICAgICAgICBUaGVtZUNvbnRyb2xFbmFibGUoX3RoZW1lLCBJRF9SRVBBSVJfQlVUVE9OLCAhX3N1cHByZXNzUmVwYWlyKTsKKyAgICB9CisKKyAgICB2b2lkIFN1Y2Nlc3NQYWdlX1Nob3coKSB7CisgICAgICAgIC8vIG9uIHRoZSAiU3VjY2VzcyIgcGFnZSwgY2hlY2sgaWYgdGhlIHJlc3RhcnQgb3IgbGF1bmNoIGJ1dHRvbiBzaG91bGQgYmUgZW5hYmxlZC4KKyAgICAgICAgQk9PTCBzaG93UmVzdGFydEJ1dHRvbiA9IEZBTFNFOworICAgICAgICBCT09MIGxhdW5jaFRhcmdldEV4aXN0cyA9IEZBTFNFOworICAgICAgICBMT0NfU1RSSU5HICpzdWNjZXNzVGV4dCA9IG51bGxwdHI7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICAKKyAgICAgICAgaWYgKF9yZXN0YXJ0UmVxdWlyZWQpIHsKKyAgICAgICAgICAgIGlmIChCT09UU1RSQVBQRVJfUkVTVEFSVF9QUk9NUFQgPT0gX2NvbW1hbmQucmVzdGFydCkgeworICAgICAgICAgICAgICAgIHNob3dSZXN0YXJ0QnV0dG9uID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChUaGVtZUNvbnRyb2xFeGlzdHMoX3RoZW1lLCBJRF9MQVVOQ0hfQlVUVE9OKSkgeworICAgICAgICAgICAgbGF1bmNoVGFyZ2V0RXhpc3RzID0gQmFsU3RyaW5nVmFyaWFibGVFeGlzdHMoUFlCQV9WQVJJQUJMRV9MQVVOQ0hfVEFSR0VUX1BBVEgpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChfcGxhbm5lZEFjdGlvbikgeworICAgICAgICBjYXNlIEJPT1RTVFJBUFBFUl9BQ1RJT05fSU5TVEFMTDoKKyAgICAgICAgICAgIGhyID0gTG9jR2V0U3RyaW5nKF93aXhMb2MsIEwiIyhsb2MuU3VjY2Vzc0luc3RhbGxNZXNzYWdlKSIsICZzdWNjZXNzVGV4dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCT09UU1RSQVBQRVJfQUNUSU9OX01PRElGWToKKyAgICAgICAgICAgIGhyID0gTG9jR2V0U3RyaW5nKF93aXhMb2MsIEwiIyhsb2MuU3VjY2Vzc01vZGlmeU1lc3NhZ2UpIiwgJnN1Y2Nlc3NUZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJPT1RTVFJBUFBFUl9BQ1RJT05fUkVQQUlSOgorICAgICAgICAgICAgaHIgPSBMb2NHZXRTdHJpbmcoX3dpeExvYywgTCIjKGxvYy5TdWNjZXNzUmVwYWlyTWVzc2FnZSkiLCAmc3VjY2Vzc1RleHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQk9PVFNUUkFQUEVSX0FDVElPTl9VTklOU1RBTEw6CisgICAgICAgICAgICBociA9IExvY0dldFN0cmluZyhfd2l4TG9jLCBMIiMobG9jLlN1Y2Nlc3NSZW1vdmVNZXNzYWdlKSIsICZzdWNjZXNzVGV4dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdWNjZXNzVGV4dCkgeworICAgICAgICAgICAgTFBXU1RSIGZvcm1hdHRlZFN0cmluZyA9IG51bGxwdHI7CisgICAgICAgICAgICBCYWxGb3JtYXRTdHJpbmcoc3VjY2Vzc1RleHQtPnd6VGV4dCwgJmZvcm1hdHRlZFN0cmluZyk7CisgICAgICAgICAgICBpZiAoZm9ybWF0dGVkU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX1NVQ0NFU1NfVEVYVCwgZm9ybWF0dGVkU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBTdHJGcmVlKGZvcm1hdHRlZFN0cmluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBUaGVtZUNvbnRyb2xFbmFibGUoX3RoZW1lLCBJRF9MQVVOQ0hfQlVUVE9OLCBsYXVuY2hUYXJnZXRFeGlzdHMgJiYgQk9PVFNUUkFQUEVSX0FDVElPTl9VTklOU1RBTEwgPCBfcGxhbm5lZEFjdGlvbik7CisgICAgICAgIFRoZW1lQ29udHJvbEVuYWJsZShfdGhlbWUsIElEX1NVQ0NFU1NfUkVTVEFSVF9URVhULCBzaG93UmVzdGFydEJ1dHRvbik7CisgICAgICAgIFRoZW1lQ29udHJvbEVuYWJsZShfdGhlbWUsIElEX1NVQ0NFU1NfUkVTVEFSVF9CVVRUT04sIHNob3dSZXN0YXJ0QnV0dG9uKTsKKyAgICB9CisKKyAgICB2b2lkIEZhaWx1cmVQYWdlX1Nob3coKSB7CisgICAgICAgIC8vIG9uIHRoZSAiRmFpbHVyZSIgcGFnZSwgc2hvdyBlcnJvciBtZXNzYWdlIGFuZCBjaGVjayBpZiB0aGUgcmVzdGFydCBidXR0b24gc2hvdWxkIGJlIGVuYWJsZWQuCisKKyAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBsb2cgZmlsZSB2YXJpYWJsZSB0aGVuIHdlJ2xsIGFzc3VtZSB0aGUgbG9nIGZpbGUgZXhpc3RzLgorICAgICAgICBCT09MIHNob3dMb2dMaW5rID0gKF9idW5kbGUuc2N6TG9nVmFyaWFibGUgJiYgKl9idW5kbGUuc2N6TG9nVmFyaWFibGUpOworICAgICAgICBCT09MIHNob3dFcnJvck1lc3NhZ2UgPSBGQUxTRTsKKyAgICAgICAgQk9PTCBzaG93UmVzdGFydEJ1dHRvbiA9IEZBTFNFOworCisgICAgICAgIGlmIChGQUlMRUQoX2hyRmluYWwpKSB7CisgICAgICAgICAgICBMUFdTVFIgdW5mb3JtYXR0ZWRUZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIExQV1NUUiB0ZXh0ID0gbnVsbHB0cjsKKworICAgICAgICAgICAgLy8gSWYgd2Uga25vdyB0aGUgZmFpbHVyZSBtZXNzYWdlLCB1c2UgdGhhdC4KKyAgICAgICAgICAgIGlmIChfZmFpbGVkTWVzc2FnZSAmJiAqX2ZhaWxlZE1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAgICBTdHJBbGxvY1N0cmluZygmdW5mb3JtYXR0ZWRUZXh0LCBfZmFpbGVkTWVzc2FnZSwgMCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIHRyeSB0byBnZXQgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGUgZXJyb3IgY29kZS4KKyAgICAgICAgICAgICAgICBTdHJBbGxvY0Zyb21FcnJvcigmdW5mb3JtYXR0ZWRUZXh0LCBfaHJGaW5hbCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgaWYgKCF1bmZvcm1hdHRlZFRleHQgfHwgISp1bmZvcm1hdHRlZFRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyQWxsb2NGcm9tRXJyb3IoJnVuZm9ybWF0dGVkVGV4dCwgRV9GQUlMLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChFX1dJWFNUREJBX0NPTkRJVElPTl9GQUlMRUQgPT0gX2hyRmluYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAodW5mb3JtYXR0ZWRUZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIFN0ckFsbG9jU3RyaW5nKCZ0ZXh0LCB1bmZvcm1hdHRlZFRleHQsIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RyQWxsb2NGb3JtYXR0ZWQoJnRleHQsIEwiMHglMDh4IC0gJWxzIiwgX2hyRmluYWwsIHVuZm9ybWF0dGVkVGV4dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0KSB7CisgICAgICAgICAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX0ZBSUxVUkVfTUVTU0FHRV9URVhULCB0ZXh0KTsKKyAgICAgICAgICAgICAgICBzaG93RXJyb3JNZXNzYWdlID0gVFJVRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVsZWFzZVN0cih0ZXh0KTsKKyAgICAgICAgICAgIFJlbGVhc2VTdHIodW5mb3JtYXR0ZWRUZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfcmVzdGFydFJlcXVpcmVkICYmIEJPT1RTVFJBUFBFUl9SRVNUQVJUX1BST01QVCA9PSBfY29tbWFuZC5yZXN0YXJ0KSB7CisgICAgICAgICAgICBzaG93UmVzdGFydEJ1dHRvbiA9IFRSVUU7CisgICAgICAgIH0KKworICAgICAgICBUaGVtZUNvbnRyb2xFbmFibGUoX3RoZW1lLCBJRF9GQUlMVVJFX0xPR0ZJTEVfTElOSywgc2hvd0xvZ0xpbmspOworICAgICAgICBUaGVtZUNvbnRyb2xFbmFibGUoX3RoZW1lLCBJRF9GQUlMVVJFX01FU1NBR0VfVEVYVCwgc2hvd0Vycm9yTWVzc2FnZSk7CisgICAgICAgIFRoZW1lQ29udHJvbEVuYWJsZShfdGhlbWUsIElEX0ZBSUxVUkVfUkVTVEFSVF9URVhULCBzaG93UmVzdGFydEJ1dHRvbik7CisgICAgICAgIFRoZW1lQ29udHJvbEVuYWJsZShfdGhlbWUsIElEX0ZBSUxVUkVfUkVTVEFSVF9CVVRUT04sIHNob3dSZXN0YXJ0QnV0dG9uKTsKKyAgICB9CisKKworcHVibGljOiAvLyBJQm9vdHN0cmFwcGVyQXBwbGljYXRpb24KKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUCBPblN0YXJ0dXAoKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBEV09SRCBkd1VJVGhyZWFkSWQgPSAwOworCisgICAgICAgIC8vIGNyZWF0ZSBVSSB0aHJlYWQKKyAgICAgICAgX2hVaVRocmVhZCA9IDo6Q3JlYXRlVGhyZWFkKG51bGxwdHIsIDAsIFVpVGhyZWFkUHJvYywgdGhpcywgMCwgJmR3VUlUaHJlYWRJZCk7CisgICAgICAgIGlmICghX2hVaVRocmVhZCkgeworICAgICAgICAgICAgRXhpdFdpdGhMYXN0RXJyb3IoaHIsICJGYWlsZWQgdG8gY3JlYXRlIFVJIHRocmVhZC4iKTsKKyAgICAgICAgfQorCisgICAgTEV4aXQ6CisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKworICAgIHZpcnR1YWwgU1RETUVUSE9ESU1QXyhpbnQpIE9uU2h1dGRvd24oKSB7CisgICAgICAgIGludCBuUmVzdWx0ID0gSUROT0FDVElPTjsKKworICAgICAgICAvLyB3YWl0IGZvciBVSSB0aHJlYWQgdG8gdGVybWluYXRlCisgICAgICAgIGlmIChfaFVpVGhyZWFkKSB7CisgICAgICAgICAgICA6OldhaXRGb3JTaW5nbGVPYmplY3QoX2hVaVRocmVhZCwgSU5GSU5JVEUpOworICAgICAgICAgICAgUmVsZWFzZUhhbmRsZShfaFVpVGhyZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGEgcmVzdGFydCB3YXMgcmVxdWlyZWQuCisgICAgICAgIGlmIChfcmVzdGFydFJlcXVpcmVkICYmIF9hbGxvd1Jlc3RhcnQpIHsKKyAgICAgICAgICAgIG5SZXN1bHQgPSBJRFJFU1RBUlQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gblJlc3VsdDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUF8oaW50KSBPbkRldGVjdFJlbGF0ZWRNc2lQYWNrYWdlKAorICAgICAgICBfX2luX3ogTFBDV1NUUiB3elBhY2thZ2VJZCwKKyAgICAgICAgX19pbl96IExQQ1dTVFIgLyp3elByb2R1Y3RDb2RlKi8sCisgICAgICAgIF9faW4gQk9PTCBmUGVyTWFjaGluZSwKKyAgICAgICAgX19pbiBEV09SRDY0IC8qZHc2NFZlcnNpb24qLywKKyAgICAgICAgX19pbiBCT09UU1RSQVBQRVJfUkVMQVRFRF9PUEVSQVRJT04gb3BlcmF0aW9uCisgICAgKSB7CisgICAgICAgIGlmIChCT09UU1RSQVBQRVJfUkVMQVRFRF9PUEVSQVRJT05fTUFKT1JfVVBHUkFERSA9PSBvcGVyYXRpb24gJiYgCisgICAgICAgICAgICAoQ1NUUl9FUVVBTCA9PSA6OkNvbXBhcmVTdHJpbmdXKExPQ0FMRV9ORVVUUkFMLCAwLCB3elBhY2thZ2VJZCwgLTEsIEwibGF1bmNoZXJfQWxsVXNlcnMiLCAtMSkgfHwKKyAgICAgICAgICAgICBDU1RSX0VRVUFMID09IDo6Q29tcGFyZVN0cmluZ1coTE9DQUxFX05FVVRSQUwsIDAsIHd6UGFja2FnZUlkLCAtMSwgTCJsYXVuY2hlcl9KdXN0Rm9yTWUiLCAtMSkpKSB7CisgICAgICAgICAgICBhdXRvIGhyID0gTG9hZEFzc29jaWF0ZUZpbGVzU3RhdGVGcm9tS2V5KF9lbmdpbmUsIGZQZXJNYWNoaW5lID8gSEtFWV9MT0NBTF9NQUNISU5FIDogSEtFWV9DVVJSRU5UX1VTRVIpOworICAgICAgICAgICAgaWYgKGhyID09IFNfT0spIHsKKyAgICAgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoTCJBc3NvY2lhdGVGaWxlcyIsIDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfRVJST1IsICJGYWlsZWQgdG8gbG9hZCBBc3NvY2lhdGVGaWxlcyBzdGF0ZTogZXJyb3IgY29kZSAweCUwOFgiLCBocik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkluY2x1ZGVfbGF1bmNoZXIiLCAxKTsKKyAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkRldGVjdGVkT2xkTGF1bmNoZXIiLCAxKTsKKyAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkluc3RhbGxMYXVuY2hlckFsbFVzZXJzIiwgZlBlck1hY2hpbmUgPyAxIDogMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENoZWNrQ2FuY2VsZWQoKSA/IElEQ0FOQ0VMIDogSUROT0FDVElPTjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUF8oaW50KSBPbkRldGVjdFJlbGF0ZWRCdW5kbGUoCisgICAgICAgIF9faW4gTFBDV1NUUiB3ekJ1bmRsZUlkLAorICAgICAgICBfX2luIEJPT1RTVFJBUFBFUl9SRUxBVElPTl9UWVBFIHJlbGF0aW9uVHlwZSwKKyAgICAgICAgX19pbiBMUENXU1RSIC8qd3pCdW5kbGVUYWcqLywKKyAgICAgICAgX19pbiBCT09MIGZQZXJNYWNoaW5lLAorICAgICAgICBfX2luIERXT1JENjQgLypkdzY0VmVyc2lvbiovLAorICAgICAgICBfX2luIEJPT1RTVFJBUFBFUl9SRUxBVEVEX09QRVJBVElPTiBvcGVyYXRpb24KKyAgICApIHsKKyAgICAgICAgQmFsSW5mb0FkZFJlbGF0ZWRCdW5kbGVBc1BhY2thZ2UoJl9idW5kbGUucGFja2FnZXMsIHd6QnVuZGxlSWQsIHJlbGF0aW9uVHlwZSwgZlBlck1hY2hpbmUpOworCisgICAgICAgIC8vIFJlbWVtYmVyIHdoZW4gb3VyIGJ1bmRsZSB3b3VsZCBjYXVzZSBhIGRvd25ncmFkZS4KKyAgICAgICAgaWYgKEJPT1RTVFJBUFBFUl9SRUxBVEVEX09QRVJBVElPTl9ET1dOR1JBREUgPT0gb3BlcmF0aW9uKSB7CisgICAgICAgICAgICBfZG93bmdyYWRpbmdPdGhlclZlcnNpb24gPSBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKEJPT1RTVFJBUFBFUl9SRUxBVEVEX09QRVJBVElPTl9NQUpPUl9VUEdSQURFID09IG9wZXJhdGlvbikgeworICAgICAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfU1RBTkRBUkQsICJEZXRlY3RlZCBwcmV2aW91cyB2ZXJzaW9uIC0gcGxhbm5pbmcgdXBncmFkZSIpOworICAgICAgICAgICAgX3VwZ3JhZGluZyA9IFRSVUU7CisKKyAgICAgICAgICAgIExvYWRPcHRpb25hbEZlYXR1cmVTdGF0ZXMoX2VuZ2luZSk7CisgICAgICAgIH0gZWxzZSBpZiAoQk9PVFNUUkFQUEVSX1JFTEFURURfT1BFUkFUSU9OX05PTkUgPT0gb3BlcmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoX2NvbW1hbmQuYWN0aW9uID09IEJPT1RTVFJBUFBFUl9BQ1RJT05fSU5TVEFMTCkgeworICAgICAgICAgICAgICAgIExPQ19TVFJJTkcgKnBMb2NTdHJpbmcgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoTG9jR2V0U3RyaW5nKF93aXhMb2MsIEwiIyhsb2MuRmFpbHVyZUV4aXN0aW5nSW5zdGFsbCkiLCAmcExvY1N0cmluZykpICYmIHBMb2NTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgQmFsRm9ybWF0U3RyaW5nKHBMb2NTdHJpbmctPnd6VGV4dCwgJl9mYWlsZWRNZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBCYWxGb3JtYXRTdHJpbmcoTCJDYW5ub3QgaW5zdGFsbCBbV2l4QnVuZGxlTmFtZV0gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluc3RhbGxlZC4iLCAmX2ZhaWxlZE1lc3NhZ2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBCYWxMb2coCisgICAgICAgICAgICAgICAgICAgIEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICJSZWxhdGVkIGJ1bmRsZSAlbHMgaXMgcHJldmVudGluZyBpbnN0YWxsIiwKKyAgICAgICAgICAgICAgICAgICAgd3pCdW5kbGVJZAorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgU2V0U3RhdGUoUFlCQV9TVEFURV9GQUlMRUQsIEVfV0lYU1REQkFfQ09ORElUSU9OX0ZBSUxFRCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gQ2hlY2tDYW5jZWxlZCgpID8gSURDQU5DRUwgOiBJRE9LOworICAgIH0KKworCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKHZvaWQpIE9uRGV0ZWN0UGFja2FnZUNvbXBsZXRlKAorICAgICAgICBfX2luIExQQ1dTVFIgd3pQYWNrYWdlSWQsCisgICAgICAgIF9faW4gSFJFU1VMVCBoclN0YXR1cywKKyAgICAgICAgX19pbiBCT09UU1RSQVBQRVJfUEFDS0FHRV9TVEFURSBzdGF0ZQorICAgICkgeworICAgICAgICBpZiAoRkFJTEVEKGhyU3RhdHVzKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQk9PTCBkZXRlY3RlZExhdW5jaGVyID0gRkFMU0U7CisgICAgICAgIEhLRVkgaGtleSA9IEhLRVlfTE9DQUxfTUFDSElORTsKKyAgICAgICAgaWYgKENTVFJfRVFVQUwgPT0gOjpDb21wYXJlU3RyaW5nVyhMT0NBTEVfTkVVVFJBTCwgMCwgd3pQYWNrYWdlSWQsIC0xLCBMImxhdW5jaGVyX0FsbFVzZXJzIiwgLTEpKSB7CisgICAgICAgICAgICBpZiAoQk9PVFNUUkFQUEVSX1BBQ0tBR0VfU1RBVEVfUFJFU0VOVCA9PSBzdGF0ZSB8fCBCT09UU1RSQVBQRVJfUEFDS0FHRV9TVEFURV9PQlNPTEVURSA9PSBzdGF0ZSkgeworICAgICAgICAgICAgICAgIGRldGVjdGVkTGF1bmNoZXIgPSBUUlVFOworICAgICAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkluc3RhbGxMYXVuY2hlckFsbFVzZXJzIiwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoQ1NUUl9FUVVBTCA9PSA6OkNvbXBhcmVTdHJpbmdXKExPQ0FMRV9ORVVUUkFMLCAwLCB3elBhY2thZ2VJZCwgLTEsIEwibGF1bmNoZXJfSnVzdEZvck1lIiwgLTEpKSB7CisgICAgICAgICAgICBpZiAoQk9PVFNUUkFQUEVSX1BBQ0tBR0VfU1RBVEVfUFJFU0VOVCA9PSBzdGF0ZSB8fCBCT09UU1RSQVBQRVJfUEFDS0FHRV9TVEFURV9PQlNPTEVURSA9PSBzdGF0ZSkgeworICAgICAgICAgICAgICAgIGRldGVjdGVkTGF1bmNoZXIgPSBUUlVFOworICAgICAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkluc3RhbGxMYXVuY2hlckFsbFVzZXJzIiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGV0ZWN0ZWRMYXVuY2hlcikgeworICAgICAgICAgICAgLyogV2hlbiB3ZSBkZXRlY3QgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbGF1bmNoZXIuICovCisgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoTCJJbmNsdWRlX2xhdW5jaGVyIiwgMSk7CisgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoTCJEZXRlY3RlZExhdW5jaGVyIiwgMSk7CisgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZVN0cmluZyhMIkluY2x1ZGVfbGF1bmNoZXJTdGF0ZSIsIEwiZGlzYWJsZSIpOworICAgICAgICAgICAgX2VuZ2luZS0+U2V0VmFyaWFibGVTdHJpbmcoTCJJbnN0YWxsTGF1bmNoZXJBbGxVc2Vyc1N0YXRlIiwgTCJkaXNhYmxlIik7CisKKyAgICAgICAgICAgIGF1dG8gaHIgPSBMb2FkQXNzb2NpYXRlRmlsZXNTdGF0ZUZyb21LZXkoX2VuZ2luZSwgaGtleSk7CisgICAgICAgICAgICBpZiAoaHIgPT0gU19PSykgeworICAgICAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkFzc29jaWF0ZUZpbGVzIiwgMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9FUlJPUiwgIkZhaWxlZCB0byBsb2FkIEFzc29jaWF0ZUZpbGVzIHN0YXRlOiBlcnJvciBjb2RlIDB4JTA4WCIsIGhyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKHZvaWQpIE9uRGV0ZWN0Q29tcGxldGUoX19pbiBIUkVTVUxUIGhyU3RhdHVzKSB7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHJTdGF0dXMpICYmIF9iYUZ1bmN0aW9uKSB7CisgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9TVEFOREFSRCwgIlJ1bm5pbmcgZGV0ZWN0IGNvbXBsZXRlIEJBIGZ1bmN0aW9uIik7CisgICAgICAgICAgICBfYmFGdW5jdGlvbi0+T25EZXRlY3RDb21wbGV0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChoclN0YXR1cykpIHsKKyAgICAgICAgICAgIGhyU3RhdHVzID0gRXZhbHVhdGVDb25kaXRpb25zKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyU3RhdHVzKSkgeworICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBkZWZhdWx0IHBhdGggaGFzIGJlZW4gc2V0CisgICAgICAgICAgICBoclN0YXR1cyA9IEVuc3VyZVRhcmdldERpcigpOworICAgICAgICB9CisKKyAgICAgICAgU2V0U3RhdGUoUFlCQV9TVEFURV9ERVRFQ1RFRCwgaHJTdGF0dXMpOworCisgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBpbnRlcmFjdGluZyB3aXRoIHRoZSB1c2VyIG9yIHdlJ3JlIGRvaW5nIGEgbGF5b3V0IG9yIHdlJ3JlIGp1c3QgYWZ0ZXIgYSBmb3JjZSByZXN0YXJ0CisgICAgICAgIC8vIHRoZW4gYXV0b21hdGljYWxseSBzdGFydCBwbGFubmluZy4KKyAgICAgICAgaWYgKEJPT1RTVFJBUFBFUl9ESVNQTEFZX0ZVTEwgPiBfY29tbWFuZC5kaXNwbGF5IHx8CisgICAgICAgICAgICBCT09UU1RSQVBQRVJfQUNUSU9OX0xBWU9VVCA9PSBfY29tbWFuZC5hY3Rpb24gfHwKKyAgICAgICAgICAgIEJPT1RTVFJBUFBFUl9BQ1RJT05fVU5JTlNUQUxMID09IF9jb21tYW5kLmFjdGlvbiB8fAorICAgICAgICAgICAgQk9PVFNUUkFQUEVSX1JFU1VNRV9UWVBFX1JFQk9PVCA9PSBfY29tbWFuZC5yZXN1bWVUeXBlKSB7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyU3RhdHVzKSkgeworICAgICAgICAgICAgICAgIDo6UG9zdE1lc3NhZ2VXKF9oV25kLCBXTV9QWUJBX1BMQU5fUEFDS0FHRVMsIDAsIF9jb21tYW5kLmFjdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHZpcnR1YWwgU1RETUVUSE9ESU1QXyhpbnQpIE9uUGxhblJlbGF0ZWRCdW5kbGUoCisgICAgICAgIF9faW5feiBMUENXU1RSIC8qd3pCdW5kbGVJZCovLAorICAgICAgICBfX2lub3V0X3ogQk9PVFNUUkFQUEVSX1JFUVVFU1RfU1RBVEUqIHBSZXF1ZXN0ZWRTdGF0ZQorICAgICkgeworICAgICAgICByZXR1cm4gQ2hlY2tDYW5jZWxlZCgpID8gSURDQU5DRUwgOiBJRE9LOworICAgIH0KKworCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKGludCkgT25QbGFuUGFja2FnZUJlZ2luKAorICAgICAgICBfX2luX3ogTFBDV1NUUiB3elBhY2thZ2VJZCwKKyAgICAgICAgX19pbm91dCBCT09UU1RSQVBQRVJfUkVRVUVTVF9TVEFURSAqcFJlcXVlc3RTdGF0ZQorICAgICkgeworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICAgICAgQkFMX0lORk9fUEFDS0FHRSogcFBhY2thZ2UgPSBudWxscHRyOworCisgICAgICAgIGlmIChfbmV4dFBhY2thZ2VBZnRlclJlc3RhcnQpIHsKKyAgICAgICAgICAgIC8vIEFmdGVyIHJlc3RhcnQgd2UgbmVlZCB0byBmaW5pc2ggdGhlIGRlcGVuZGVuY3kgcmVnaXN0cmF0aW9uIGZvciBvdXIgcGFja2FnZSBzbyBhbGxvdyB0aGUgcGFja2FnZQorICAgICAgICAgICAgLy8gdG8gZ28gcHJlc2VudC4KKyAgICAgICAgICAgIGlmIChDU1RSX0VRVUFMID09IDo6Q29tcGFyZVN0cmluZ1coTE9DQUxFX05FVVRSQUwsIDAsIHd6UGFja2FnZUlkLCAtMSwgX25leHRQYWNrYWdlQWZ0ZXJSZXN0YXJ0LCAtMSkpIHsKKyAgICAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgYSByZXBhaXIgYmVjYXVzZSB0aGF0IGNvdWxkIHB1dCB1cyBpbiBhIHBlcnBldHVhbCByZXN0YXJ0IGxvb3AuCisgICAgICAgICAgICAgICAgaWYgKEJPT1RTVFJBUFBFUl9SRVFVRVNUX1NUQVRFX1JFUEFJUiA9PSAqcFJlcXVlc3RTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAqcFJlcXVlc3RTdGF0ZSA9IEJPT1RTVFJBUFBFUl9SRVFVRVNUX1NUQVRFX1BSRVNFTlQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUmVsZWFzZU51bGxTdHIoX25leHRQYWNrYWdlQWZ0ZXJSZXN0YXJ0KTsgLy8gbm8gbW9yZSBza2lwcGluZyBub3cuCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIG5vdCB0aGUgbWF0Y2hpbmcgcGFja2FnZSwgc28gc2tpcCBpdC4KKyAgICAgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9TVEFOREFSRCwgIlNraXBwaW5nIHBhY2thZ2U6ICVscywgYWZ0ZXIgcmVzdGFydCBiZWNhdXNlIGl0IHdhcyBhcHBsaWVkIGJlZm9yZSB0aGUgcmVzdGFydC4iLCB3elBhY2thZ2VJZCk7CisKKyAgICAgICAgICAgICAgICAqcFJlcXVlc3RTdGF0ZSA9IEJPT1RTVFJBUFBFUl9SRVFVRVNUX1NUQVRFX05PTkU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKF9wbGFubmVkQWN0aW9uID09IEJPT1RTVFJBUFBFUl9BQ1RJT05fSU5TVEFMTCB8fCBfcGxhbm5lZEFjdGlvbiA9PSBCT09UU1RSQVBQRVJfQUNUSU9OX01PRElGWSkgJiYKKyAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQoQmFsSW5mb0ZpbmRQYWNrYWdlQnlJZCgmX2J1bmRsZS5wYWNrYWdlcywgd3pQYWNrYWdlSWQsICZwUGFja2FnZSkpKSB7CisgICAgICAgICAgICBCT09MIGYgPSBGQUxTRTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoX2VuZ2luZS0+RXZhbHVhdGVDb25kaXRpb24ocFBhY2thZ2UtPnNjekluc3RhbGxDb25kaXRpb24sICZmKSkgJiYgZikgeworICAgICAgICAgICAgICAgICpwUmVxdWVzdFN0YXRlID0gQk9PVFNUUkFQUEVSX1JFUVVFU1RfU1RBVEVfUFJFU0VOVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBDaGVja0NhbmNlbGVkKCkgPyBJRENBTkNFTCA6IElET0s7CisgICAgfQorCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKGludCkgT25QbGFuTXNpRmVhdHVyZSgKKyAgICAgICAgX19pbl96IExQQ1dTVFIgd3pQYWNrYWdlSWQsCisgICAgICAgIF9faW5feiBMUENXU1RSIHd6RmVhdHVyZUlkLAorICAgICAgICBfX2lub3V0IEJPT1RTVFJBUFBFUl9GRUFUVVJFX1NUQVRFKiBwUmVxdWVzdGVkU3RhdGUKKyAgICApIHsKKyAgICAgICAgTE9OR0xPTkcgaW5zdGFsbDsKKyAgICAgICAgCisgICAgICAgIGlmICh3Y3NjbXAod3pGZWF0dXJlSWQsIEwiQXNzb2NpYXRlRmlsZXMiKSA9PSAwIHx8IHdjc2NtcCh3ekZlYXR1cmVJZCwgTCJTaG9ydGN1dHMiKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKF9lbmdpbmUtPkdldFZhcmlhYmxlTnVtZXJpYyh3ekZlYXR1cmVJZCwgJmluc3RhbGwpKSAmJiBpbnN0YWxsKSB7CisgICAgICAgICAgICAgICAgKnBSZXF1ZXN0ZWRTdGF0ZSA9IEJPT1RTVFJBUFBFUl9GRUFUVVJFX1NUQVRFX0xPQ0FMOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqcFJlcXVlc3RlZFN0YXRlID0gQk9PVFNUUkFQUEVSX0ZFQVRVUkVfU1RBVEVfQUJTRU5UOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnBSZXF1ZXN0ZWRTdGF0ZSA9IEJPT1RTVFJBUFBFUl9GRUFUVVJFX1NUQVRFX0xPQ0FMOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDaGVja0NhbmNlbGVkKCkgPyBJRENBTkNFTCA6IElETk9BQ1RJT047CisgICAgfQorCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKHZvaWQpIE9uUGxhbkNvbXBsZXRlKF9faW4gSFJFU1VMVCBoclN0YXR1cykgeworICAgICAgICBpZiAoU1VDQ0VFREVEKGhyU3RhdHVzKSAmJiBfYmFGdW5jdGlvbikgeworICAgICAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfU1RBTkRBUkQsICJSdW5uaW5nIHBsYW4gY29tcGxldGUgQkEgZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIF9iYUZ1bmN0aW9uLT5PblBsYW5Db21wbGV0ZSgpOworICAgICAgICB9CisKKyAgICAgICAgU2V0U3RhdGUoUFlCQV9TVEFURV9QTEFOTkVELCBoclN0YXR1cyk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChoclN0YXR1cykpIHsKKyAgICAgICAgICAgIDo6UG9zdE1lc3NhZ2VXKF9oV25kLCBXTV9QWUJBX0FQUExZX1BBQ0tBR0VTLCAwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIF9zdGFydGVkRXhlY3V0aW9uID0gRkFMU0U7CisgICAgICAgIF9jYWxjdWxhdGVkQ2FjaGVQcm9ncmVzcyA9IDA7CisgICAgICAgIF9jYWxjdWxhdGVkRXhlY3V0ZVByb2dyZXNzID0gMDsKKyAgICB9CisKKworICAgIHZpcnR1YWwgU1RETUVUSE9ESU1QXyhpbnQpIE9uQ2FjaGVQYWNrYWdlQmVnaW4oCisgICAgICAgIF9faW5feiBMUENXU1RSIHd6UGFja2FnZUlkLAorICAgICAgICBfX2luIERXT1JEIGNDYWNoZVBheWxvYWRzLAorICAgICAgICBfX2luIERXT1JENjQgZHc2NFBhY2thZ2VDYWNoZVNpemUKKyAgICApIHsKKyAgICAgICAgaWYgKHd6UGFja2FnZUlkICYmICp3elBhY2thZ2VJZCkgeworICAgICAgICAgICAgQkFMX0lORk9fUEFDS0FHRSogcFBhY2thZ2UgPSBudWxscHRyOworICAgICAgICAgICAgSFJFU1VMVCBociA9IEJhbEluZm9GaW5kUGFja2FnZUJ5SWQoJl9idW5kbGUucGFja2FnZXMsIHd6UGFja2FnZUlkLCAmcFBhY2thZ2UpOworICAgICAgICAgICAgTFBDV1NUUiB3eiA9IChTVUNDRUVERUQoaHIpICYmIHBQYWNrYWdlLT5zY3pEaXNwbGF5TmFtZSkgPyBwUGFja2FnZS0+c2N6RGlzcGxheU5hbWUgOiB3elBhY2thZ2VJZDsKKworICAgICAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX0NBQ0hFX1BST0dSRVNTX1BBQ0tBR0VfVEVYVCwgd3opOworCisgICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgc3RhcnRlZCBleGVjdXRpbmcsIGxlYXZlIGl0IGluIHRoZSBvdmVyYWxsIHByb2dyZXNzIHRleHQuCisgICAgICAgICAgICBpZiAoIV9zdGFydGVkRXhlY3V0aW9uKSB7CisgICAgICAgICAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX09WRVJBTExfUFJPR1JFU1NfUEFDS0FHRV9URVhULCB3eik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gX19zdXBlcjo6T25DYWNoZVBhY2thZ2VCZWdpbih3elBhY2thZ2VJZCwgY0NhY2hlUGF5bG9hZHMsIGR3NjRQYWNrYWdlQ2FjaGVTaXplKTsKKyAgICB9CisKKworICAgIHZpcnR1YWwgU1RETUVUSE9ESU1QXyhpbnQpIE9uQ2FjaGVBY3F1aXJlUHJvZ3Jlc3MoCisgICAgICAgIF9faW5feiBMUENXU1RSIHd6UGFja2FnZU9yQ29udGFpbmVySWQsCisgICAgICAgIF9faW5fel9vcHQgTFBDV1NUUiB3elBheWxvYWRJZCwKKyAgICAgICAgX19pbiBEV09SRDY0IGR3NjRQcm9ncmVzcywKKyAgICAgICAgX19pbiBEV09SRDY0IGR3NjRUb3RhbCwKKyAgICAgICAgX19pbiBEV09SRCBkd092ZXJhbGxQZXJjZW50YWdlCisgICAgKSB7CisgICAgICAgIFdDSEFSIHd6UHJvZ3Jlc3NbNV0gPSB7IH07CisKKyNpZmRlZiBERUJVRworICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9TVEFOREFSRCwgIlBZQkE6IE9uQ2FjaGVBY3F1aXJlUHJvZ3Jlc3MoKSAtIGNvbnRhaW5lci9wYWNrYWdlOiAlbHMsIHBheWxvYWQ6ICVscywgcHJvZ3Jlc3M6ICVJNjR1LCB0b3RhbDogJUk2NHUsIG92ZXJhbGwgcHJvZ3Jlc3M6ICV1JSUiLCB3elBhY2thZ2VPckNvbnRhaW5lcklkLCB3elBheWxvYWRJZCwgZHc2NFByb2dyZXNzLCBkdzY0VG90YWwsIGR3T3ZlcmFsbFBlcmNlbnRhZ2UpOworI2VuZGlmCisKKyAgICAgICAgOjpTdHJpbmdDY2hQcmludGZXKHd6UHJvZ3Jlc3MsIGNvdW50b2Yod3pQcm9ncmVzcyksIEwiJXUlJSIsIGR3T3ZlcmFsbFBlcmNlbnRhZ2UpOworICAgICAgICBUaGVtZVNldFRleHRDb250cm9sKF90aGVtZSwgSURfQ0FDSEVfUFJPR1JFU1NfVEVYVCwgd3pQcm9ncmVzcyk7CisKKyAgICAgICAgVGhlbWVTZXRQcm9ncmVzc0NvbnRyb2woX3RoZW1lLCBJRF9DQUNIRV9QUk9HUkVTU19CQVIsIGR3T3ZlcmFsbFBlcmNlbnRhZ2UpOworCisgICAgICAgIF9jYWxjdWxhdGVkQ2FjaGVQcm9ncmVzcyA9IGR3T3ZlcmFsbFBlcmNlbnRhZ2UgKiBQWUJBX0FDUVVJUkVfUEVSQ0VOVEFHRSAvIDEwMDsKKyAgICAgICAgVGhlbWVTZXRQcm9ncmVzc0NvbnRyb2woX3RoZW1lLCBJRF9PVkVSQUxMX0NBTENVTEFURURfUFJPR1JFU1NfQkFSLCBfY2FsY3VsYXRlZENhY2hlUHJvZ3Jlc3MgKyBfY2FsY3VsYXRlZEV4ZWN1dGVQcm9ncmVzcyk7CisKKyAgICAgICAgU2V0VGFza2JhckJ1dHRvblByb2dyZXNzKF9jYWxjdWxhdGVkQ2FjaGVQcm9ncmVzcyArIF9jYWxjdWxhdGVkRXhlY3V0ZVByb2dyZXNzKTsKKworICAgICAgICByZXR1cm4gX19zdXBlcjo6T25DYWNoZUFjcXVpcmVQcm9ncmVzcyh3elBhY2thZ2VPckNvbnRhaW5lcklkLCB3elBheWxvYWRJZCwgZHc2NFByb2dyZXNzLCBkdzY0VG90YWwsIGR3T3ZlcmFsbFBlcmNlbnRhZ2UpOworICAgIH0KKworCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKGludCkgT25DYWNoZUFjcXVpcmVDb21wbGV0ZSgKKyAgICAgICAgX19pbl96IExQQ1dTVFIgd3pQYWNrYWdlT3JDb250YWluZXJJZCwKKyAgICAgICAgX19pbl96X29wdCBMUENXU1RSIHd6UGF5bG9hZElkLAorICAgICAgICBfX2luIEhSRVNVTFQgaHJTdGF0dXMsCisgICAgICAgIF9faW4gaW50IG5SZWNvbW1lbmRhdGlvbgorICAgICkgeworICAgICAgICBTZXRQcm9ncmVzc1N0YXRlKGhyU3RhdHVzKTsKKyAgICAgICAgcmV0dXJuIF9fc3VwZXI6Ok9uQ2FjaGVBY3F1aXJlQ29tcGxldGUod3pQYWNrYWdlT3JDb250YWluZXJJZCwgd3pQYXlsb2FkSWQsIGhyU3RhdHVzLCBuUmVjb21tZW5kYXRpb24pOworICAgIH0KKworCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKGludCkgT25DYWNoZVZlcmlmeUNvbXBsZXRlKAorICAgICAgICBfX2luX3ogTFBDV1NUUiB3elBhY2thZ2VJZCwKKyAgICAgICAgX19pbl96IExQQ1dTVFIgd3pQYXlsb2FkSWQsCisgICAgICAgIF9faW4gSFJFU1VMVCBoclN0YXR1cywKKyAgICAgICAgX19pbiBpbnQgblJlY29tbWVuZGF0aW9uCisgICAgKSB7CisgICAgICAgIFNldFByb2dyZXNzU3RhdGUoaHJTdGF0dXMpOworICAgICAgICByZXR1cm4gX19zdXBlcjo6T25DYWNoZVZlcmlmeUNvbXBsZXRlKHd6UGFja2FnZUlkLCB3elBheWxvYWRJZCwgaHJTdGF0dXMsIG5SZWNvbW1lbmRhdGlvbik7CisgICAgfQorCisKKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUF8odm9pZCkgT25DYWNoZUNvbXBsZXRlKF9faW4gSFJFU1VMVCAvKmhyU3RhdHVzKi8pIHsKKyAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX0NBQ0hFX1BST0dSRVNTX1BBQ0tBR0VfVEVYVCwgTCIiKTsKKyAgICAgICAgU2V0U3RhdGUoUFlCQV9TVEFURV9DQUNIRUQsIFNfT0spOyAvLyB3ZSBhbHdheXMgcmV0dXJuIHN1Y2Nlc3MgaGVyZSBhbmQgbGV0IE9uQXBwbHlDb21wbGV0ZSgpIGRlYWwgd2l0aCB0aGUgZXJyb3IuCisgICAgfQorCisKKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUF8oaW50KSBPbkVycm9yKAorICAgICAgICBfX2luIEJPT1RTVFJBUFBFUl9FUlJPUl9UWVBFIGVycm9yVHlwZSwKKyAgICAgICAgX19pbiBMUENXU1RSIHd6UGFja2FnZUlkLAorICAgICAgICBfX2luIERXT1JEIGR3Q29kZSwKKyAgICAgICAgX19pbl96IExQQ1dTVFIgd3pFcnJvciwKKyAgICAgICAgX19pbiBEV09SRCBkd1VJSGludCwKKyAgICAgICAgX19pbiBEV09SRCAvKmNEYXRhKi8sCisgICAgICAgIF9faW5fZWNvdW50X3pfb3B0KGNEYXRhKSBMUENXU1RSKiAvKnJnd3pEYXRhKi8sCisgICAgICAgIF9faW4gaW50IG5SZWNvbW1lbmRhdGlvbgorICAgICkgeworICAgICAgICBpbnQgblJlc3VsdCA9IG5SZWNvbW1lbmRhdGlvbjsKKyAgICAgICAgTFBXU1RSIHNjekVycm9yID0gbnVsbHB0cjsKKworICAgICAgICBpZiAoQk9PVFNUUkFQUEVSX0RJU1BMQVlfRU1CRURERUQgPT0gX2NvbW1hbmQuZGlzcGxheSkgeworICAgICAgICAgICAgSFJFU1VMVCBociA9IF9lbmdpbmUtPlNlbmRFbWJlZGRlZEVycm9yKGR3Q29kZSwgd3pFcnJvciwgZHdVSUhpbnQsICZuUmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICAgICAgblJlc3VsdCA9IElERVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoQk9PVFNUUkFQUEVSX0RJU1BMQVlfRlVMTCA9PSBfY29tbWFuZC5kaXNwbGF5KSB7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGF1dGhlbnRpY2F0aW9uIGZhaWx1cmUsIGxldCB0aGUgZW5naW5lIHRyeSB0byBoYW5kbGUgaXQgZm9yIHVzLgorICAgICAgICAgICAgaWYgKEJPT1RTVFJBUFBFUl9FUlJPUl9UWVBFX0hUVFBfQVVUSF9TRVJWRVIgPT0gZXJyb3JUeXBlIHx8IEJPT1RTVFJBUFBFUl9FUlJPUl9UWVBFX0hUVFBfQVVUSF9QUk9YWSA9PSBlcnJvclR5cGUpIHsKKyAgICAgICAgICAgICAgICBuUmVzdWx0ID0gSURUUllBR0FJTjsKKyAgICAgICAgICAgIH0gZWxzZSAvLyBzaG93IGEgZ2VuZXJpYyBlcnJvciBtZXNzYWdlIGJveC4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCYWxSZXRyeUVycm9yT2NjdXJyZWQod3pQYWNrYWdlSWQsIGR3Q29kZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIV9zaG93aW5nSW50ZXJuYWxVSVRoaXNQYWNrYWdlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vIGVycm9yIG1lc3NhZ2Ugd2FzIHByb3ZpZGVkLCB1c2UgdGhlIGVycm9yIGNvZGUgdG8gdHJ5IGFuZCBnZXQgYW4gZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3ekVycm9yIHx8ICEqd3pFcnJvciB8fCBCT09UU1RSQVBQRVJfRVJST1JfVFlQRV9XSU5ET1dTX0lOU1RBTExFUiAhPSBlcnJvclR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBTdHJBbGxvY0Zyb21FcnJvcigmc2N6RXJyb3IsIGR3Q29kZSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRkFJTEVEKGhyKSB8fCAhc2N6RXJyb3IgfHwgISpzY3pFcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ckFsbG9jRm9ybWF0dGVkKCZzY3pFcnJvciwgTCIweCV4IiwgZHdDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG5SZXN1bHQgPSA6Ok1lc3NhZ2VCb3hXKF9oV25kLCBzY3pFcnJvciA/IHNjekVycm9yIDogd3pFcnJvciwgX3RoZW1lLT5zY3pDYXB0aW9uLCBkd1VJSGludCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTZXRQcm9ncmVzc1N0YXRlKEhSRVNVTFRfRlJPTV9XSU4zMihkd0NvZGUpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGp1c3QgdGFrZSBub3RlIG9mIHRoZSBlcnJvciBjb2RlIGFuZCBsZXQgdGhpbmdzIGNvbnRpbnVlLgorICAgICAgICAgICAgQmFsUmV0cnlFcnJvck9jY3VycmVkKHd6UGFja2FnZUlkLCBkd0NvZGUpOworICAgICAgICB9CisKKyAgICAgICAgUmVsZWFzZVN0cihzY3pFcnJvcik7CisgICAgICAgIHJldHVybiBuUmVzdWx0OworICAgIH0KKworCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKGludCkgT25FeGVjdXRlTXNpTWVzc2FnZSgKKyAgICAgICAgX19pbl96IExQQ1dTVFIgd3pQYWNrYWdlSWQsCisgICAgICAgIF9faW4gSU5TVEFMTE1FU1NBR0UgbXQsCisgICAgICAgIF9faW4gVUlOVCB1aUZsYWdzLAorICAgICAgICBfX2luX3ogTFBDV1NUUiB3ek1lc3NhZ2UsCisgICAgICAgIF9faW4gRFdPUkQgY0RhdGEsCisgICAgICAgIF9faW5fZWNvdW50X3pfb3B0KGNEYXRhKSBMUENXU1RSKiByZ3d6RGF0YSwKKyAgICAgICAgX19pbiBpbnQgblJlY29tbWVuZGF0aW9uCisgICAgKSB7CisjaWZkZWYgREVCVUcKKyAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfU1RBTkRBUkQsICJQWUJBOiBPbkV4ZWN1dGVNc2lNZXNzYWdlKCkgLSBwYWNrYWdlOiAlbHMsIG1lc3NhZ2U6ICVscyIsIHd6UGFja2FnZUlkLCB3ek1lc3NhZ2UpOworI2VuZGlmCisgICAgICAgIGlmIChCT09UU1RSQVBQRVJfRElTUExBWV9GVUxMID09IF9jb21tYW5kLmRpc3BsYXkgJiYgKElOU1RBTExNRVNTQUdFX1dBUk5JTkcgPT0gbXQgfHwgSU5TVEFMTE1FU1NBR0VfVVNFUiA9PSBtdCkpIHsKKyAgICAgICAgICAgIGludCBuUmVzdWx0ID0gOjpNZXNzYWdlQm94VyhfaFduZCwgd3pNZXNzYWdlLCBfdGhlbWUtPnNjekNhcHRpb24sIHVpRmxhZ3MpOworICAgICAgICAgICAgcmV0dXJuIG5SZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoSU5TVEFMTE1FU1NBR0VfQUNUSU9OU1RBUlQgPT0gbXQpIHsKKyAgICAgICAgICAgIFRoZW1lU2V0VGV4dENvbnRyb2woX3RoZW1lLCBJRF9FWEVDVVRFX1BST0dSRVNTX0FDVElPTkRBVEFfVEVYVCwgd3pNZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBfX3N1cGVyOjpPbkV4ZWN1dGVNc2lNZXNzYWdlKHd6UGFja2FnZUlkLCBtdCwgdWlGbGFncywgd3pNZXNzYWdlLCBjRGF0YSwgcmd3ekRhdGEsIG5SZWNvbW1lbmRhdGlvbik7CisgICAgfQorCisKKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUF8oaW50KSBPblByb2dyZXNzKF9faW4gRFdPUkQgZHdQcm9ncmVzc1BlcmNlbnRhZ2UsIF9faW4gRFdPUkQgZHdPdmVyYWxsUHJvZ3Jlc3NQZXJjZW50YWdlKSB7CisgICAgICAgIFdDSEFSIHd6UHJvZ3Jlc3NbNV0gPSB7IH07CisKKyNpZmRlZiBERUJVRworICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9TVEFOREFSRCwgIlBZQkE6IE9uUHJvZ3Jlc3MoKSAtIHByb2dyZXNzOiAldSUlLCBvdmVyYWxsIHByb2dyZXNzOiAldSUlIiwgZHdQcm9ncmVzc1BlcmNlbnRhZ2UsIGR3T3ZlcmFsbFByb2dyZXNzUGVyY2VudGFnZSk7CisjZW5kaWYKKworICAgICAgICA6OlN0cmluZ0NjaFByaW50Zlcod3pQcm9ncmVzcywgY291bnRvZih3elByb2dyZXNzKSwgTCIldSUlIiwgZHdPdmVyYWxsUHJvZ3Jlc3NQZXJjZW50YWdlKTsKKyAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX09WRVJBTExfUFJPR1JFU1NfVEVYVCwgd3pQcm9ncmVzcyk7CisKKyAgICAgICAgVGhlbWVTZXRQcm9ncmVzc0NvbnRyb2woX3RoZW1lLCBJRF9PVkVSQUxMX1BST0dSRVNTX0JBUiwgZHdPdmVyYWxsUHJvZ3Jlc3NQZXJjZW50YWdlKTsKKyAgICAgICAgU2V0VGFza2JhckJ1dHRvblByb2dyZXNzKGR3T3ZlcmFsbFByb2dyZXNzUGVyY2VudGFnZSk7CisKKyAgICAgICAgcmV0dXJuIF9fc3VwZXI6Ok9uUHJvZ3Jlc3MoZHdQcm9ncmVzc1BlcmNlbnRhZ2UsIGR3T3ZlcmFsbFByb2dyZXNzUGVyY2VudGFnZSk7CisgICAgfQorCisKKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUF8oaW50KSBPbkV4ZWN1dGVQYWNrYWdlQmVnaW4oX19pbl96IExQQ1dTVFIgd3pQYWNrYWdlSWQsIF9faW4gQk9PTCBmRXhlY3V0ZSkgeworICAgICAgICBMUFdTVFIgc2N6Rm9ybWF0dGVkU3RyaW5nID0gbnVsbHB0cjsKKworICAgICAgICBfc3RhcnRlZEV4ZWN1dGlvbiA9IFRSVUU7CisKKyAgICAgICAgaWYgKHd6UGFja2FnZUlkICYmICp3elBhY2thZ2VJZCkgeworICAgICAgICAgICAgQkFMX0lORk9fUEFDS0FHRSogcFBhY2thZ2UgPSBudWxscHRyOworICAgICAgICAgICAgQmFsSW5mb0ZpbmRQYWNrYWdlQnlJZCgmX2J1bmRsZS5wYWNrYWdlcywgd3pQYWNrYWdlSWQsICZwUGFja2FnZSk7CisKKyAgICAgICAgICAgIExQQ1dTVFIgd3ogPSB3elBhY2thZ2VJZDsKKyAgICAgICAgICAgIGlmIChwUGFja2FnZSkgeworICAgICAgICAgICAgICAgIExPQ19TVFJJTkcqIHBMb2NTdHJpbmcgPSBudWxscHRyOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwUGFja2FnZS0+dHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQkFMX0lORk9fUEFDS0FHRV9UWVBFX0JVTkRMRV9BRERPTjoKKyAgICAgICAgICAgICAgICAgICAgTG9jR2V0U3RyaW5nKF93aXhMb2MsIEwiIyhsb2MuRXhlY3V0ZUFkZG9uUmVsYXRlZEJ1bmRsZU1lc3NhZ2UpIiwgJnBMb2NTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQkFMX0lORk9fUEFDS0FHRV9UWVBFX0JVTkRMRV9QQVRDSDoKKyAgICAgICAgICAgICAgICAgICAgTG9jR2V0U3RyaW5nKF93aXhMb2MsIEwiIyhsb2MuRXhlY3V0ZVBhdGNoUmVsYXRlZEJ1bmRsZU1lc3NhZ2UpIiwgJnBMb2NTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgQkFMX0lORk9fUEFDS0FHRV9UWVBFX0JVTkRMRV9VUEdSQURFOgorICAgICAgICAgICAgICAgICAgICBMb2NHZXRTdHJpbmcoX3dpeExvYywgTCIjKGxvYy5FeGVjdXRlVXBncmFkZVJlbGF0ZWRCdW5kbGVNZXNzYWdlKSIsICZwTG9jU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHBMb2NTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHdpeCBkZXZlbG9wZXIgaXMgc2hvd2luZyBhIGhpZGRlbiB2YXJpYWJsZSBpbiB0aGUgVUksIHRoZW4gb2J2aW91c2x5IHRoZXkgZG9uJ3QgY2FyZSBhYm91dCBrZWVwaW5nIGl0IHNhZmUKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gZG9uJ3QgZ28gZG93biB0aGUgcmFiYml0IGhvbGUgb2YgbWFraW5nIHN1cmUgdGhhdCB0aGlzIGlzIHNlY3VyZWx5IGZyZWVkLgorICAgICAgICAgICAgICAgICAgICBCYWxGb3JtYXRTdHJpbmcocExvY1N0cmluZy0+d3pUZXh0LCAmc2N6Rm9ybWF0dGVkU3RyaW5nKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3eiA9IHNjekZvcm1hdHRlZFN0cmluZyA/IHNjekZvcm1hdHRlZFN0cmluZyA6IHBQYWNrYWdlLT5zY3pEaXNwbGF5TmFtZSA/IHBQYWNrYWdlLT5zY3pEaXNwbGF5TmFtZSA6IHd6UGFja2FnZUlkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfc2hvd2luZ0ludGVybmFsVUlUaGlzUGFja2FnZSA9IHBQYWNrYWdlICYmIHBQYWNrYWdlLT5mRGlzcGxheUludGVybmFsVUk7CisKKyAgICAgICAgICAgIFRoZW1lU2V0VGV4dENvbnRyb2woX3RoZW1lLCBJRF9FWEVDVVRFX1BST0dSRVNTX1BBQ0tBR0VfVEVYVCwgd3opOworICAgICAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX09WRVJBTExfUFJPR1JFU1NfUEFDS0FHRV9URVhULCB3eik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBfc2hvd2luZ0ludGVybmFsVUlUaGlzUGFja2FnZSA9IEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgUmVsZWFzZVN0cihzY3pGb3JtYXR0ZWRTdHJpbmcpOworICAgICAgICByZXR1cm4gX19zdXBlcjo6T25FeGVjdXRlUGFja2FnZUJlZ2luKHd6UGFja2FnZUlkLCBmRXhlY3V0ZSk7CisgICAgfQorCisKKyAgICB2aXJ0dWFsIGludCBfX3N0ZGNhbGwgT25FeGVjdXRlUHJvZ3Jlc3MoCisgICAgICAgIF9faW5feiBMUENXU1RSIHd6UGFja2FnZUlkLAorICAgICAgICBfX2luIERXT1JEIGR3UHJvZ3Jlc3NQZXJjZW50YWdlLAorICAgICAgICBfX2luIERXT1JEIGR3T3ZlcmFsbFByb2dyZXNzUGVyY2VudGFnZQorICAgICkgeworICAgICAgICBXQ0hBUiB3elByb2dyZXNzWzhdID0geyB9OworCisjaWZkZWYgREVCVUcKKyAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfU1RBTkRBUkQsICJQWUJBOiBPbkV4ZWN1dGVQcm9ncmVzcygpIC0gcGFja2FnZTogJWxzLCBwcm9ncmVzczogJXUlJSwgb3ZlcmFsbCBwcm9ncmVzczogJXUlJSIsIHd6UGFja2FnZUlkLCBkd1Byb2dyZXNzUGVyY2VudGFnZSwgZHdPdmVyYWxsUHJvZ3Jlc3NQZXJjZW50YWdlKTsKKyNlbmRpZgorCisgICAgICAgIDo6U3RyaW5nQ2NoUHJpbnRmVyh3elByb2dyZXNzLCBjb3VudG9mKHd6UHJvZ3Jlc3MpLCBMIiV1JSUiLCBkd092ZXJhbGxQcm9ncmVzc1BlcmNlbnRhZ2UpOworICAgICAgICBUaGVtZVNldFRleHRDb250cm9sKF90aGVtZSwgSURfRVhFQ1VURV9QUk9HUkVTU19URVhULCB3elByb2dyZXNzKTsKKworICAgICAgICBUaGVtZVNldFByb2dyZXNzQ29udHJvbChfdGhlbWUsIElEX0VYRUNVVEVfUFJPR1JFU1NfQkFSLCBkd092ZXJhbGxQcm9ncmVzc1BlcmNlbnRhZ2UpOworCisgICAgICAgIF9jYWxjdWxhdGVkRXhlY3V0ZVByb2dyZXNzID0gZHdPdmVyYWxsUHJvZ3Jlc3NQZXJjZW50YWdlICogKDEwMCAtIFBZQkFfQUNRVUlSRV9QRVJDRU5UQUdFKSAvIDEwMDsKKyAgICAgICAgVGhlbWVTZXRQcm9ncmVzc0NvbnRyb2woX3RoZW1lLCBJRF9PVkVSQUxMX0NBTENVTEFURURfUFJPR1JFU1NfQkFSLCBfY2FsY3VsYXRlZENhY2hlUHJvZ3Jlc3MgKyBfY2FsY3VsYXRlZEV4ZWN1dGVQcm9ncmVzcyk7CisKKyAgICAgICAgU2V0VGFza2JhckJ1dHRvblByb2dyZXNzKF9jYWxjdWxhdGVkQ2FjaGVQcm9ncmVzcyArIF9jYWxjdWxhdGVkRXhlY3V0ZVByb2dyZXNzKTsKKworICAgICAgICByZXR1cm4gX19zdXBlcjo6T25FeGVjdXRlUHJvZ3Jlc3Mod3pQYWNrYWdlSWQsIGR3UHJvZ3Jlc3NQZXJjZW50YWdlLCBkd092ZXJhbGxQcm9ncmVzc1BlcmNlbnRhZ2UpOworICAgIH0KKworCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKGludCkgT25FeGVjdXRlUGFja2FnZUNvbXBsZXRlKAorICAgICAgICBfX2luX3ogTFBDV1NUUiB3elBhY2thZ2VJZCwKKyAgICAgICAgX19pbiBIUkVTVUxUIGhyRXhpdENvZGUsCisgICAgICAgIF9faW4gQk9PVFNUUkFQUEVSX0FQUExZX1JFU1RBUlQgcmVzdGFydCwKKyAgICAgICAgX19pbiBpbnQgblJlY29tbWVuZGF0aW9uCisgICAgKSB7CisgICAgICAgIFNldFByb2dyZXNzU3RhdGUoaHJFeGl0Q29kZSk7CisKKyAgICAgICAgaWYgKF93Y3NuaWNtcCh3elBhY2thZ2VJZCwgTCJwYXRoXyIsIDUpID09IDAgJiYgU1VDQ0VFREVEKGhyRXhpdENvZGUpKSB7CisgICAgICAgICAgICBTZW5kTWVzc2FnZVRpbWVvdXRXKAorICAgICAgICAgICAgICAgIEhXTkRfQlJPQURDQVNULAorICAgICAgICAgICAgICAgIFdNX1NFVFRJTkdDSEFOR0UsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PExQQVJBTT4oTCJFbnZpcm9ubWVudCIpLAorICAgICAgICAgICAgICAgIFNNVE9fQUJPUlRJRkhVTkcsCisgICAgICAgICAgICAgICAgMTAwMCwKKyAgICAgICAgICAgICAgICBudWxscHRyCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgaW50IG5SZXN1bHQgPSBfX3N1cGVyOjpPbkV4ZWN1dGVQYWNrYWdlQ29tcGxldGUod3pQYWNrYWdlSWQsIGhyRXhpdENvZGUsIHJlc3RhcnQsIG5SZWNvbW1lbmRhdGlvbik7CisKKyAgICAgICAgcmV0dXJuIG5SZXN1bHQ7CisgICAgfQorCisKKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUF8odm9pZCkgT25FeGVjdXRlQ29tcGxldGUoX19pbiBIUkVTVUxUIGhyU3RhdHVzKSB7CisgICAgICAgIFRoZW1lU2V0VGV4dENvbnRyb2woX3RoZW1lLCBJRF9FWEVDVVRFX1BST0dSRVNTX1BBQ0tBR0VfVEVYVCwgTCIiKTsKKyAgICAgICAgVGhlbWVTZXRUZXh0Q29udHJvbChfdGhlbWUsIElEX0VYRUNVVEVfUFJPR1JFU1NfQUNUSU9OREFUQV9URVhULCBMIiIpOworICAgICAgICBUaGVtZVNldFRleHRDb250cm9sKF90aGVtZSwgSURfT1ZFUkFMTF9QUk9HUkVTU19QQUNLQUdFX1RFWFQsIEwiIik7CisgICAgICAgIFRoZW1lQ29udHJvbEVuYWJsZShfdGhlbWUsIElEX1BST0dSRVNTX0NBTkNFTF9CVVRUT04sIEZBTFNFKTsgLy8gbm8gbW9yZSBjYW5jZWwuCisKKyAgICAgICAgU2V0U3RhdGUoUFlCQV9TVEFURV9FWEVDVVRFRCwgU19PSyk7IC8vIHdlIGFsd2F5cyByZXR1cm4gc3VjY2VzcyBoZXJlIGFuZCBsZXQgT25BcHBseUNvbXBsZXRlKCkgZGVhbCB3aXRoIHRoZSBlcnJvci4KKyAgICAgICAgU2V0UHJvZ3Jlc3NTdGF0ZShoclN0YXR1cyk7CisgICAgfQorCisKKyAgICB2aXJ0dWFsIFNURE1FVEhPRElNUF8oaW50KSBPblJlc29sdmVTb3VyY2UoCisgICAgICAgIF9faW5feiBMUENXU1RSIHd6UGFja2FnZU9yQ29udGFpbmVySWQsCisgICAgICAgIF9faW5fel9vcHQgTFBDV1NUUiB3elBheWxvYWRJZCwKKyAgICAgICAgX19pbl96IExQQ1dTVFIgd3pMb2NhbFNvdXJjZSwKKyAgICAgICAgX19pbl96X29wdCBMUENXU1RSIHd6RG93bmxvYWRTb3VyY2UKKyAgICApIHsKKyAgICAgICAgaW50IG5SZXN1bHQgPSBJREVSUk9SOyAvLyBhc3N1bWUgd2Ugd29uJ3QgcmVzb2x2ZSBzb3VyY2UgYW5kIHRoYXQgaXMgdW5leHBlY3RlZC4KKworICAgICAgICBpZiAoQk9PVFNUUkFQUEVSX0RJU1BMQVlfRlVMTCA9PSBfY29tbWFuZC5kaXNwbGF5KSB7CisgICAgICAgICAgICBpZiAod3pEb3dubG9hZFNvdXJjZSkgeworICAgICAgICAgICAgICAgIG5SZXN1bHQgPSBJRERPV05MT0FEOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBwcm9tcHQgdG8gY2hhbmdlIHRoZSBzb3VyY2UgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgT1BFTkZJTEVOQU1FVyBvZm4gPSB7IH07CisgICAgICAgICAgICAgICAgV0NIQVIgd3pGaWxlW01BWF9QQVRIXSA9IHsgfTsKKworICAgICAgICAgICAgICAgIDo6U3RyaW5nQ2NoQ29weVcod3pGaWxlLCBjb3VudG9mKHd6RmlsZSksIHd6TG9jYWxTb3VyY2UpOworCisgICAgICAgICAgICAgICAgb2ZuLmxTdHJ1Y3RTaXplID0gc2l6ZW9mKG9mbik7CisgICAgICAgICAgICAgICAgb2ZuLmh3bmRPd25lciA9IF9oV25kOworICAgICAgICAgICAgICAgIG9mbi5scHN0ckZpbGUgPSB3ekZpbGU7CisgICAgICAgICAgICAgICAgb2ZuLm5NYXhGaWxlID0gY291bnRvZih3ekZpbGUpOworICAgICAgICAgICAgICAgIG9mbi5scHN0ckZpbHRlciA9IEwiQWxsIEZpbGVzXDAqLipcMCI7CisgICAgICAgICAgICAgICAgb2ZuLm5GaWx0ZXJJbmRleCA9IDE7CisgICAgICAgICAgICAgICAgb2ZuLkZsYWdzID0gT0ZOX1BBVEhNVVNURVhJU1QgfCBPRk5fRklMRU1VU1RFWElTVDsKKyAgICAgICAgICAgICAgICBvZm4ubHBzdHJUaXRsZSA9IF90aGVtZS0+c2N6Q2FwdGlvbjsKKworICAgICAgICAgICAgICAgIGlmICg6OkdldE9wZW5GaWxlTmFtZVcoJm9mbikpIHsKKyAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCBociA9IF9lbmdpbmUtPlNldExvY2FsU291cmNlKHd6UGFja2FnZU9yQ29udGFpbmVySWQsIHd6UGF5bG9hZElkLCBvZm4ubHBzdHJGaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgblJlc3VsdCA9IFNVQ0NFRURFRChocikgPyBJRFJFVFJZIDogSURFUlJPUjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuUmVzdWx0ID0gSURDQU5DRUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHd6RG93bmxvYWRTb3VyY2UpIHsKKyAgICAgICAgICAgIC8vIElmIGRvaW5nIGEgbm9uLWludGVyYWN0aXZlIGluc3RhbGwgYW5kIGRvd25sb2FkIHNvdXJjZSBpcyBhdmFpbGFibGUsIGxldCdzIHRyeSBkb3dubG9hZGluZyB0aGUgcGFja2FnZSBzaWxlbnRseQorICAgICAgICAgICAgblJlc3VsdCA9IElERE9XTkxPQUQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gZWxzZSB0aGVyZSdzIG5vdGhpbmcgbW9yZSB3ZSBjYW4gZG8gaW4gbm9uLWludGVyYWN0aXZlIG1vZGUKKworICAgICAgICByZXR1cm4gQ2hlY2tDYW5jZWxlZCgpID8gSURDQU5DRUwgOiBuUmVzdWx0OworICAgIH0KKworCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKGludCkgT25BcHBseUNvbXBsZXRlKF9faW4gSFJFU1VMVCBoclN0YXR1cywgX19pbiBCT09UU1RSQVBQRVJfQVBQTFlfUkVTVEFSVCByZXN0YXJ0KSB7CisgICAgICAgIF9yZXN0YXJ0UmVzdWx0ID0gcmVzdGFydDsgLy8gcmVtZW1iZXIgdGhlIHJlc3RhcnQgcmVzdWx0IHNvIHdlIHJldHVybiB0aGUgY29ycmVjdCBlcnJvciBjb2RlIG5vIG1hdHRlciB3aGF0IHRoZSB1c2VyIGNob29zZXMgdG8gZG8gaW4gdGhlIFVJLgorCisgICAgICAgIC8vIElmIGEgcmVzdGFydCB3YXMgZW5jb3VudGVyZWQgYW5kIHdlIGFyZSBub3Qgc3VwcHJlc3NpbmcgcmVzdGFydHMsIHRoZW4gcmVzdGFydCBpcyByZXF1aXJlZC4KKyAgICAgICAgX3Jlc3RhcnRSZXF1aXJlZCA9IChCT09UU1RSQVBQRVJfQVBQTFlfUkVTVEFSVF9OT05FICE9IHJlc3RhcnQgJiYgQk9PVFNUUkFQUEVSX1JFU1RBUlRfTkVWRVIgPCBfY29tbWFuZC5yZXN0YXJ0KTsKKyAgICAgICAgLy8gSWYgYSByZXN0YXJ0IGlzIHJlcXVpcmVkIGFuZCB3ZSdyZSBub3QgZGlzcGxheWluZyBhIFVJIG9yIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gcHJvbXB0IGZvciByZXN0YXJ0IHRoZW4gYWxsb3cgdGhlIHJlc3RhcnQuCisgICAgICAgIF9hbGxvd1Jlc3RhcnQgPSBfcmVzdGFydFJlcXVpcmVkICYmIChCT09UU1RSQVBQRVJfRElTUExBWV9GVUxMID4gX2NvbW1hbmQuZGlzcGxheSB8fCBCT09UU1RSQVBQRVJfUkVTVEFSVF9QUk9NUFQgPCBfY29tbWFuZC5yZXN0YXJ0KTsKKworICAgICAgICAvLyBJZiB3ZSBhcmUgc2hvd2luZyBVSSwgd2FpdCBhIGJlYXQgYmVmb3JlIG1vdmluZyB0byB0aGUgZmluYWwgc2NyZWVuLgorICAgICAgICBpZiAoQk9PVFNUUkFQUEVSX0RJU1BMQVlfTk9ORSA8IF9jb21tYW5kLmRpc3BsYXkpIHsKKyAgICAgICAgICAgIDo6U2xlZXAoMjUwKTsKKyAgICAgICAgfQorCisgICAgICAgIFNldFN0YXRlKFBZQkFfU1RBVEVfQVBQTElFRCwgaHJTdGF0dXMpOworICAgICAgICBTZXRUYXNrYmFyQnV0dG9uUHJvZ3Jlc3MoMTAwKTsgLy8gc2hvdyBmdWxsIHByb2dyZXNzIGJhciwgZ3JlZW4sIHllbGxvdywgb3IgcmVkCisKKyAgICAgICAgcmV0dXJuIElETk9BQ1RJT047CisgICAgfQorCisgICAgdmlydHVhbCBTVERNRVRIT0RJTVBfKHZvaWQpIE9uTGF1bmNoQXBwcm92ZWRFeGVDb21wbGV0ZShfX2luIEhSRVNVTFQgaHJTdGF0dXMsIF9faW4gRFdPUkQgLypwcm9jZXNzSWQqLykgeworICAgICAgICBpZiAoSFJFU1VMVF9GUk9NX1dJTjMyKEVSUk9SX0FDQ0VTU19ERU5JRUQpID09IGhyU3RhdHVzKSB7CisgICAgICAgICAgICAvL3RyeSB3aXRoIFNoZWxFeGVjIG5leHQgdGltZQorICAgICAgICAgICAgT25DbGlja0xhdW5jaEJ1dHRvbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgOjpQb3N0TWVzc2FnZVcoX2hXbmQsIFdNX0NMT1NFLCAwLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworCitwcml2YXRlOgorICAgIC8vCisgICAgLy8gVWlUaHJlYWRQcm9jIC0gZW50cnlwb2ludCBmb3IgVUkgdGhyZWFkLgorICAgIC8vCisgICAgc3RhdGljIERXT1JEIFdJTkFQSSBVaVRocmVhZFByb2MoX19pbiBMUFZPSUQgcHZDb250ZXh0KSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBQeXRob25Cb290c3RyYXBwZXJBcHBsaWNhdGlvbiogcFRoaXMgPSAoUHl0aG9uQm9vdHN0cmFwcGVyQXBwbGljYXRpb24qKXB2Q29udGV4dDsKKyAgICAgICAgQk9PTCBjb21Jbml0aWFsaXplZCA9IEZBTFNFOworICAgICAgICBCT09MIHJldCA9IEZBTFNFOworICAgICAgICBNU0cgbXNnID0geyB9OworCisgICAgICAgIC8vIEluaXRpYWxpemUgQ09NIGFuZCB0aGVtZS4KKyAgICAgICAgaHIgPSA6OkNvSW5pdGlhbGl6ZShudWxscHRyKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBpbml0aWFsaXplIENPTS4iKTsKKyAgICAgICAgY29tSW5pdGlhbGl6ZWQgPSBUUlVFOworCisgICAgICAgIGhyID0gVGhlbWVJbml0aWFsaXplKHBUaGlzLT5faE1vZHVsZSk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGVtZSBtYW5hZ2VyLiIpOworCisgICAgICAgIGhyID0gcFRoaXMtPkluaXRpYWxpemVEYXRhKCk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkYXRhIGluIGJvb3RzdHJhcHBlciBhcHBsaWNhdGlvbi4iKTsKKworICAgICAgICAvLyBDcmVhdGUgbWFpbiB3aW5kb3cuCisgICAgICAgIHBUaGlzLT5Jbml0aWFsaXplVGFza2JhckJ1dHRvbigpOworICAgICAgICBociA9IHBUaGlzLT5DcmVhdGVNYWluV2luZG93KCk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gY3JlYXRlIG1haW4gd2luZG93LiIpOworCisgICAgICAgIHBUaGlzLT5WYWxpZGF0ZU9wZXJhdGluZ1N5c3RlbSgpOworCisgICAgICAgIGlmIChGQUlMRUQocFRoaXMtPl9ockZpbmFsKSkgeworICAgICAgICAgICAgcFRoaXMtPlNldFN0YXRlKFBZQkFfU1RBVEVfRkFJTEVELCBocik7CisgICAgICAgICAgICA6OlBvc3RNZXNzYWdlVyhwVGhpcy0+X2hXbmQsIFdNX1BZQkFfU0hPV19GQUlMVVJFLCAwLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE9rYXksIHdlJ3JlIHJlYWR5IGZvciBwYWNrYWdlcyBub3cuCisgICAgICAgICAgICBwVGhpcy0+U2V0U3RhdGUoUFlCQV9TVEFURV9JTklUSUFMSVpFRCwgaHIpOworICAgICAgICAgICAgOjpQb3N0TWVzc2FnZVcocFRoaXMtPl9oV25kLCBCT09UU1RSQVBQRVJfQUNUSU9OX0hFTFAgPT0gcFRoaXMtPl9jb21tYW5kLmFjdGlvbiA/IFdNX1BZQkFfU0hPV19IRUxQIDogV01fUFlCQV9ERVRFQ1RfUEFDS0FHRVMsIDAsIDApOworICAgICAgICB9CisKKyAgICAgICAgLy8gbWVzc2FnZSBwdW1wCisgICAgICAgIHdoaWxlICgwICE9IChyZXQgPSA6OkdldE1lc3NhZ2VXKCZtc2csIG51bGxwdHIsIDAsIDApKSkgeworICAgICAgICAgICAgaWYgKC0xID09IHJldCkgeworICAgICAgICAgICAgICAgIGhyID0gRV9VTkVYUEVDVEVEOworICAgICAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJVbmV4cGVjdGVkIHJldHVybiB2YWx1ZSBmcm9tIG1lc3NhZ2UgcHVtcC4iKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIVRoZW1lSGFuZGxlS2V5Ym9hcmRNZXNzYWdlKHBUaGlzLT5fdGhlbWUsIG1zZy5od25kLCAmbXNnKSkgeworICAgICAgICAgICAgICAgIDo6VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKyAgICAgICAgICAgICAgICA6OkRpc3BhdGNoTWVzc2FnZVcoJm1zZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTdWNjZWVkZWQgdGh1cyBmYXIsIGNoZWNrIHRvIHNlZSBpZiBhbnl0aGluZyB3ZW50IHdyb25nIHdoaWxlIGFjdHVhbGx5CisgICAgICAgIC8vIGV4ZWN1dGluZyBjaGFuZ2VzLgorICAgICAgICBpZiAoRkFJTEVEKHBUaGlzLT5faHJGaW5hbCkpIHsKKyAgICAgICAgICAgIGhyID0gcFRoaXMtPl9ockZpbmFsOworICAgICAgICB9IGVsc2UgaWYgKHBUaGlzLT5DaGVja0NhbmNlbGVkKCkpIHsKKyAgICAgICAgICAgIGhyID0gSFJFU1VMVF9GUk9NX1dJTjMyKEVSUk9SX0lOU1RBTExfVVNFUkVYSVQpOworICAgICAgICB9CisKKyAgICBMRXhpdDoKKyAgICAgICAgLy8gZGVzdHJveSBtYWluIHdpbmRvdworICAgICAgICBwVGhpcy0+RGVzdHJveU1haW5XaW5kb3coKTsKKworICAgICAgICAvLyBpbml0aWF0ZSBlbmdpbmUgc2h1dGRvd24KKyAgICAgICAgRFdPUkQgZHdRdWl0ID0gSFJFU1VMVF9DT0RFKGhyKTsKKyAgICAgICAgaWYgKEJPT1RTVFJBUFBFUl9BUFBMWV9SRVNUQVJUX0lOSVRJQVRFRCA9PSBwVGhpcy0+X3Jlc3RhcnRSZXN1bHQpIHsKKyAgICAgICAgICAgIGR3UXVpdCA9IEVSUk9SX1NVQ0NFU1NfUkVCT09UX0lOSVRJQVRFRDsKKyAgICAgICAgfSBlbHNlIGlmIChCT09UU1RSQVBQRVJfQVBQTFlfUkVTVEFSVF9SRVFVSVJFRCA9PSBwVGhpcy0+X3Jlc3RhcnRSZXN1bHQpIHsKKyAgICAgICAgICAgIGR3UXVpdCA9IEVSUk9SX1NVQ0NFU1NfUkVCT09UX1JFUVVJUkVEOworICAgICAgICB9CisgICAgICAgIHBUaGlzLT5fZW5naW5lLT5RdWl0KGR3UXVpdCk7CisKKyAgICAgICAgUmVsZWFzZVRoZW1lKHBUaGlzLT5fdGhlbWUpOworICAgICAgICBUaGVtZVVuaW5pdGlhbGl6ZSgpOworCisgICAgICAgIC8vIHVuaW5pdGlhbGl6ZSBDT00KKyAgICAgICAgaWYgKGNvbUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICA6OkNvVW5pbml0aWFsaXplKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBQYXJzZVZhcmlhYmxlc0Zyb21VbmF0dGVuZFhtbCAtIHJlYWRzIG9wdGlvbnMgZnJvbSB1bmF0dGVuZC54bWwgaWYgaXQKKyAgICAvLyBleGlzdHMKKyAgICAvLworICAgIEhSRVNVTFQgUGFyc2VWYXJpYWJsZXNGcm9tVW5hdHRlbmRYbWwoKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBMUFdTVFIgc2N6VW5hdHRlbmRYbWxQYXRoID0gbnVsbHB0cjsKKyAgICAgICAgSVhNTERPTURvY3VtZW50ICpwaXhkVW5hdHRlbmQgPSBudWxscHRyOworICAgICAgICBJWE1MRE9NTm9kZUxpc3QgKnBOb2RlcyA9IG51bGxwdHI7CisgICAgICAgIElYTUxET01Ob2RlICpwTm9kZSA9IG51bGxwdHI7CisgICAgICAgIGxvbmcgY05vZGVzOworICAgICAgICBEV09SRCBkd0F0dHI7CisgICAgICAgIExQV1NUUiBzY3ogPSBudWxscHRyOworICAgICAgICBCT09MIGJWYWx1ZTsKKyAgICAgICAgaW50IGlWYWx1ZTsKKyAgICAgICAgQk9PTCB0cnlDb252ZXJ0OworICAgICAgICBCU1RSIGJzdHJWYWx1ZSA9IG51bGxwdHI7CisKKyAgICAgICAgaHIgPSBCYWxGb3JtYXRTdHJpbmcoTCJbV2l4QnVuZGxlT3JpZ2luYWxTb3VyY2VGb2xkZXJddW5hdHRlbmQueG1sIiwgJnNjelVuYXR0ZW5kWG1sUGF0aCk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gY2FsY3VsYXRlIHBhdGggdG8gdW5hdHRlbmQueG1sIik7CisKKyAgICAgICAgaWYgKCFGaWxlRXhpc3RzRXgoc2N6VW5hdHRlbmRYbWxQYXRoLCAmZHdBdHRyKSkgeworICAgICAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfVkVSQk9TRSwgIkRpZCBub3QgZmluZCAlbHMiLCBzY3pVbmF0dGVuZFhtbFBhdGgpOworICAgICAgICAgICAgaHIgPSBTX0ZBTFNFOworICAgICAgICAgICAgZ290byBMRXhpdDsKKyAgICAgICAgfQorCisgICAgICAgIGhyID0gWG1sTG9hZERvY3VtZW50RnJvbUZpbGUoc2N6VW5hdHRlbmRYbWxQYXRoLCAmcGl4ZFVuYXR0ZW5kKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gcmVhZCAlbHMiLCBzY3pVbmF0dGVuZFhtbFBhdGgpOworCisgICAgICAgIC8vIGdldCB0aGUgbGlzdCBvZiB2YXJpYWJsZXMgdXNlcnMgaGF2ZSBvdmVycmlkZGVuCisgICAgICAgIGhyID0gWG1sU2VsZWN0Tm9kZXMocGl4ZFVuYXR0ZW5kLCBMIi9PcHRpb25zL09wdGlvbiIsICZwTm9kZXMpOworICAgICAgICBpZiAoU19GQUxTRSA9PSBocikgeworICAgICAgICAgICAgRXhpdEZ1bmN0aW9uMShociA9IFNfT0spOworICAgICAgICB9CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gc2VsZWN0IG9wdGlvbiBub2Rlcy4iKTsKKworICAgICAgICBociA9IHBOb2Rlcy0+Z2V0X2xlbmd0aCgobG9uZyopJmNOb2Rlcyk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gZ2V0IG9wdGlvbiBub2RlIGNvdW50LiIpOworCisgICAgICAgIEJhbExvZyhCT09UU1RSQVBQRVJfTE9HX0xFVkVMX1NUQU5EQVJELCAiUmVhZGluZyBzZXR0aW5ncyBmcm9tICVscyIsIHNjelVuYXR0ZW5kWG1sUGF0aCk7CisKKyAgICAgICAgZm9yIChEV09SRCBpID0gMDsgaSA8IGNOb2RlczsgKytpKSB7CisgICAgICAgICAgICBociA9IFhtbE5leHRFbGVtZW50KHBOb2RlcywgJnBOb2RlLCBudWxscHRyKTsKKyAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gZ2V0IG5leHQgbm9kZS4iKTsKKworICAgICAgICAgICAgLy8gQE5hbWUKKyAgICAgICAgICAgIGhyID0gWG1sR2V0QXR0cmlidXRlRXgocE5vZGUsIEwiTmFtZSIsICZzY3opOworICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBnZXQgQE5hbWUuIik7CisKKyAgICAgICAgICAgIHRyeUNvbnZlcnQgPSBUUlVFOworICAgICAgICAgICAgaHIgPSBYbWxHZXRBdHRyaWJ1dGUocE5vZGUsIEwiVmFsdWUiLCAmYnN0clZhbHVlKTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpIHx8ICFic3RyVmFsdWUgfHwgISpic3RyVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBociA9IFhtbEdldFRleHQocE5vZGUsICZic3RyVmFsdWUpOworICAgICAgICAgICAgICAgIHRyeUNvbnZlcnQgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gZ2V0IEBWYWx1ZS4iKTsKKworICAgICAgICAgICAgaWYgKHRyeUNvbnZlcnQgJiYKKyAgICAgICAgICAgICAgICBDU1RSX0VRVUFMID09IDo6Q29tcGFyZVN0cmluZ1coTE9DQUxFX0lOVkFSSUFOVCwgTk9STV9JR05PUkVDQVNFLCBic3RyVmFsdWUsIC0xLCBMInllcyIsIC0xKSkgeworICAgICAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhzY3osIDEpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0cnlDb252ZXJ0ICYmCisgICAgICAgICAgICAgICAgICAgICAgIENTVFJfRVFVQUwgPT0gOjpDb21wYXJlU3RyaW5nVyhMT0NBTEVfSU5WQVJJQU5ULCBOT1JNX0lHTk9SRUNBU0UsIGJzdHJWYWx1ZSwgLTEsIEwibm8iLCAtMSkpIHsKKyAgICAgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoc2N6LCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHJ5Q29udmVydCAmJiA6OlN0clRvSW50RXhXKGJzdHJWYWx1ZSwgU1RJRl9ERUZBVUxULCAmaVZhbHVlKSkgeworICAgICAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhzY3osIGlWYWx1ZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlU3RyaW5nKHNjeiwgYnN0clZhbHVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVsZWFzZU51bGxCU1RSKGJzdHJWYWx1ZSk7CisgICAgICAgICAgICBSZWxlYXNlTnVsbFN0cihzY3opOworICAgICAgICAgICAgUmVsZWFzZU51bGxPYmplY3QocE5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfU1RBTkRBUkQsICJGaW5pc2hlZCByZWFkaW5nIGZyb20gJWxzIiwgc2N6VW5hdHRlbmRYbWxQYXRoKTsKKworICAgIExFeGl0OgorICAgICAgICBSZWxlYXNlT2JqZWN0KHBOb2RlKTsKKyAgICAgICAgUmVsZWFzZU9iamVjdChwTm9kZXMpOworICAgICAgICBSZWxlYXNlT2JqZWN0KHBpeGRVbmF0dGVuZCk7CisgICAgICAgIFJlbGVhc2VTdHIoc2N6VW5hdHRlbmRYbWxQYXRoKTsKKworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisKKyAgICAvLworICAgIC8vIEluaXRpYWxpemVEYXRhIC0gaW5pdGlhbGl6ZXMgYWxsIHRoZSBwYWNrYWdlIGluZm9ybWF0aW9uLgorICAgIC8vCisgICAgSFJFU1VMVCBJbml0aWFsaXplRGF0YSgpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgICAgIExQV1NUUiBzY3pNb2R1bGVQYXRoID0gbnVsbHB0cjsKKyAgICAgICAgSVhNTERPTURvY3VtZW50ICpwaXhkTWFuaWZlc3QgPSBudWxscHRyOworCisgICAgICAgIGhyID0gQmFsTWFuaWZlc3RMb2FkKF9oTW9kdWxlLCAmcGl4ZE1hbmlmZXN0KTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBsb2FkIGJvb3RzdHJhcHBlciBhcHBsaWNhdGlvbiBtYW5pZmVzdC4iKTsKKworICAgICAgICBociA9IFBhcnNlT3ZlcnJpZGFibGVWYXJpYWJsZXNGcm9tWG1sKHBpeGRNYW5pZmVzdCk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gcmVhZCBvdmVycmlkYWJsZSB2YXJpYWJsZXMuIik7CisKKyAgICAgICAgaHIgPSBQYXJzZVZhcmlhYmxlc0Zyb21VbmF0dGVuZFhtbCgpOworICAgICAgICBFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIHJlYWQgdW5hdHRlbmQuaW5pIGZpbGUuIik7CisKKyAgICAgICAgaHIgPSBQcm9jZXNzQ29tbWFuZExpbmUoJl9sYW5ndWFnZSk7CisgICAgICAgIEV4aXRPbkZhaWx1cmUoaHIsICJVbmtub3duIGNvbW1hbmRsaW5lIHBhcmFtZXRlcnMuIik7CisKKyAgICAgICAgaHIgPSBQYXRoUmVsYXRpdmVUb01vZHVsZSgmc2N6TW9kdWxlUGF0aCwgbnVsbHB0ciwgX2hNb2R1bGUpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGdldCBtb2R1bGUgcGF0aC4iKTsKKworICAgICAgICBociA9IExvYWRMb2NhbGl6YXRpb24oc2N6TW9kdWxlUGF0aCwgX2xhbmd1YWdlKTsKKyAgICAgICAgRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBsb2FkIGxvY2FsaXphdGlvbi4iKTsKKworICAgICAgICBociA9IExvYWRUaGVtZShzY3pNb2R1bGVQYXRoLCBfbGFuZ3VhZ2UpOworICAgICAgICBFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGxvYWQgdGhlbWUuIik7CisKKyAgICAgICAgaHIgPSBCYWxJbmZvUGFyc2VGcm9tWG1sKCZfYnVuZGxlLCBwaXhkTWFuaWZlc3QpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGxvYWQgYnVuZGxlIGluZm9ybWF0aW9uLiIpOworCisgICAgICAgIGhyID0gQmFsQ29uZGl0aW9uc1BhcnNlRnJvbVhtbCgmX2NvbmRpdGlvbnMsIHBpeGRNYW5pZmVzdCwgX3dpeExvYyk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gbG9hZCBjb25kaXRpb25zIGZyb20gWE1MLiIpOworCisgICAgICAgIGhyID0gTG9hZEJvb3RzdHJhcHBlckJBRnVuY3Rpb25zKCk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gbG9hZCBib290c3RyYXBwZXIgZnVuY3Rpb25zLiIpOworCisgICAgICAgIGhyID0gVXBkYXRlVUlTdHJpbmdzKF9jb21tYW5kLmFjdGlvbik7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gbG9hZCBVSSBzdHJpbmdzLiIpOworCisgICAgICAgIGlmIChfY29tbWFuZC5hY3Rpb24gPT0gQk9PVFNUUkFQUEVSX0FDVElPTl9NT0RJRlkpIHsKKyAgICAgICAgICAgIExvYWRPcHRpb25hbEZlYXR1cmVTdGF0ZXMoX2VuZ2luZSk7CisgICAgICAgIH0KKworICAgICAgICBHZXRCdW5kbGVGaWxlVmVyc2lvbigpOworICAgICAgICAvLyBkb24ndCBmYWlsIGlmIHdlIGNvdWxkbid0IGdldCB0aGUgdmVyc2lvbiBpbmZvOyBiZXN0LWVmZm9ydCBvbmx5CisgICAgTEV4aXQ6CisgICAgICAgIFJlbGVhc2VPYmplY3QocGl4ZE1hbmlmZXN0KTsKKyAgICAgICAgUmVsZWFzZVN0cihzY3pNb2R1bGVQYXRoKTsKKworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisKKyAgICAvLworICAgIC8vIFByb2Nlc3NDb21tYW5kTGluZSAtIHByb2Nlc3MgdGhlIHByb3ZpZGVkIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgLy8KKyAgICBIUkVTVUxUIFByb2Nlc3NDb21tYW5kTGluZShfX2lub3V0IExQV1NUUiogcHNjekxhbmd1YWdlKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBpbnQgYXJnYyA9IDA7CisgICAgICAgIExQV1NUUiogYXJndiA9IG51bGxwdHI7CisgICAgICAgIExQV1NUUiBzY3pWYXJpYWJsZU5hbWUgPSBudWxscHRyOworICAgICAgICBMUFdTVFIgc2N6VmFyaWFibGVWYWx1ZSA9IG51bGxwdHI7CisKKyAgICAgICAgaWYgKF9jb21tYW5kLnd6Q29tbWFuZExpbmUgJiYgKl9jb21tYW5kLnd6Q29tbWFuZExpbmUpIHsKKyAgICAgICAgICAgIGFyZ3YgPSA6OkNvbW1hbmRMaW5lVG9Bcmd2VyhfY29tbWFuZC53ekNvbW1hbmRMaW5lLCAmYXJnYyk7CisgICAgICAgICAgICBFeGl0T25OdWxsV2l0aExhc3RFcnJvcihhcmd2LCBociwgIkZhaWxlZCB0byBnZXQgY29tbWFuZCBsaW5lLiIpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChhcmd2W2ldWzBdID09IEwnLScgfHwgYXJndltpXVswXSA9PSBMJy8nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChDU1RSX0VRVUFMID09IDo6Q29tcGFyZVN0cmluZ1coTE9DQUxFX0lOVkFSSUFOVCwgTk9STV9JR05PUkVDQVNFLCAmYXJndltpXVsxXSwgLTEsIEwibGFuZyIsIC0xKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgKyAxID49IGFyZ2MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBociA9IEVfSU5WQUxJREFSRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiTXVzdCBzcGVjaWZ5IGEgbGFuZ3VhZ2UuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICsraTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaHIgPSBTdHJBbGxvY1N0cmluZyhwc2N6TGFuZ3VhZ2UsICZhcmd2W2ldWzBdLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gY29weSBsYW5ndWFnZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChDU1RSX0VRVUFMID09IDo6Q29tcGFyZVN0cmluZ1coTE9DQUxFX0lOVkFSSUFOVCwgTk9STV9JR05PUkVDQVNFLCAmYXJndltpXVsxXSwgLTEsIEwic2ltcGxlIiwgLTEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoTCJTaW1wbGVJbnN0YWxsIiwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9vdmVycmlkYWJsZVZhcmlhYmxlcykgeworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QqIHB3YyA9IHdjc2Nocihhcmd2W2ldLCBMJz0nKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB3YykgeworICAgICAgICAgICAgICAgICAgICAgICAgaHIgPSBTdHJBbGxvY1N0cmluZygmc2N6VmFyaWFibGVOYW1lLCBhcmd2W2ldLCBwd2MgLSBhcmd2W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gY29weSB2YXJpYWJsZSBuYW1lLiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBociA9IERpY3RLZXlFeGlzdHMoX292ZXJyaWRhYmxlVmFyaWFibGVzLCBzY3pWYXJpYWJsZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVfTk9URk9VTkQgPT0gaHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9FUlJPUiwgIklnbm9yaW5nIGF0dGVtcHQgdG8gc2V0IG5vbi1vdmVycmlkYWJsZSB2YXJpYWJsZTogJyVscycuIiwgc2N6VmFyaWFibGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBociA9IFNfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGNoZWNrIHRoZSBkaWN0aW9uYXJ5IG9mIG92ZXJyaWRhYmxlIHZhcmlhYmxlcy4iKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaHIgPSBTdHJBbGxvY1N0cmluZygmc2N6VmFyaWFibGVWYWx1ZSwgKytwd2MsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBjb3B5IHZhcmlhYmxlIHZhbHVlLiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoOjpTdHJUb0ludEV4KHNjelZhcmlhYmxlVmFsdWUsIFNUSUZfREVGQVVMVCwgJnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyID0gX2VuZ2luZS0+U2V0VmFyaWFibGVOdW1lcmljKHNjelZhcmlhYmxlTmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBociA9IF9lbmdpbmUtPlNldFZhcmlhYmxlU3RyaW5nKHNjelZhcmlhYmxlTmFtZSwgc2N6VmFyaWFibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIHNldCB2YXJpYWJsZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbExvZyhCT09UU1RSQVBQRVJfTE9HX0xFVkVMX1NUQU5EQVJELCAiSWdub3JpbmcgdW5rbm93biBhcmd1bWVudDogJWxzIiwgYXJndltpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIExFeGl0OgorICAgICAgICBpZiAoYXJndikgeworICAgICAgICAgICAgOjpMb2NhbEZyZWUoYXJndik7CisgICAgICAgIH0KKworICAgICAgICBSZWxlYXNlU3RyKHNjelZhcmlhYmxlTmFtZSk7CisgICAgICAgIFJlbGVhc2VTdHIoc2N6VmFyaWFibGVWYWx1ZSk7CisKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIEhSRVNVTFQgTG9hZExvY2FsaXphdGlvbihfX2luX3ogTFBDV1NUUiB3ek1vZHVsZVBhdGgsIF9faW5fel9vcHQgTFBDV1NUUiB3ekxhbmd1YWdlKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBMUFdTVFIgc2N6TG9jUGF0aCA9IG51bGxwdHI7CisgICAgICAgIExQQ1dTVFIgd3pMb2NGaWxlTmFtZSA9IEwiRGVmYXVsdC53eGwiOworCisgICAgICAgIGhyID0gTG9jUHJvYmVGb3JGaWxlKHd6TW9kdWxlUGF0aCwgd3pMb2NGaWxlTmFtZSwgd3pMYW5ndWFnZSwgJnNjekxvY1BhdGgpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlMihociwgIkZhaWxlZCB0byBwcm9iZSBmb3IgbG9jIGZpbGU6ICVscyBpbiBwYXRoOiAlbHMiLCB3ekxvY0ZpbGVOYW1lLCB3ek1vZHVsZVBhdGgpOworCisgICAgICAgIGhyID0gTG9jTG9hZEZyb21GaWxlKHNjekxvY1BhdGgsICZfd2l4TG9jKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gbG9hZCBsb2MgZmlsZSBmcm9tIHBhdGg6ICVscyIsIHNjekxvY1BhdGgpOworCisgICAgICAgIGlmIChXSVhfTE9DQUxJWkFUSU9OX0xBTkdVQUdFX05PVF9TRVQgIT0gX3dpeExvYy0+ZHdMYW5nSWQpIHsKKyAgICAgICAgICAgIDo6U2V0VGhyZWFkTG9jYWxlKF93aXhMb2MtPmR3TGFuZ0lkKTsKKyAgICAgICAgfQorCisgICAgICAgIGhyID0gU3RyQWxsb2NTdHJpbmcoJl9jb25maXJtQ2xvc2VNZXNzYWdlLCBMIiMobG9jLkNvbmZpcm1DYW5jZWxNZXNzYWdlKSIsIDApOworICAgICAgICBFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29uZmlybSBtZXNzYWdlIGxvYyBpZGVudGlmaWVyLiIpOworCisgICAgICAgIGhyID0gTG9jTG9jYWxpemVTdHJpbmcoX3dpeExvYywgJl9jb25maXJtQ2xvc2VNZXNzYWdlKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gbG9jYWxpemUgY29uZmlybSBjbG9zZSBtZXNzYWdlOiAlbHMiLCBfY29uZmlybUNsb3NlTWVzc2FnZSk7CisKKyAgICBMRXhpdDoKKyAgICAgICAgUmVsZWFzZVN0cihzY3pMb2NQYXRoKTsKKworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisKKyAgICBIUkVTVUxUIExvYWRUaGVtZShfX2luX3ogTFBDV1NUUiB3ek1vZHVsZVBhdGgsIF9faW5fel9vcHQgTFBDV1NUUiB3ekxhbmd1YWdlKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBMUFdTVFIgc2N6VGhlbWVQYXRoID0gbnVsbHB0cjsKKyAgICAgICAgTFBDV1NUUiB3elRoZW1lRmlsZU5hbWUgPSBMIkRlZmF1bHQudGhtIjsKKyAgICAgICAgTFBXU1RSIHNjekNhcHRpb24gPSBudWxscHRyOworCisgICAgICAgIGhyID0gTG9jUHJvYmVGb3JGaWxlKHd6TW9kdWxlUGF0aCwgd3pUaGVtZUZpbGVOYW1lLCB3ekxhbmd1YWdlLCAmc2N6VGhlbWVQYXRoKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTIoaHIsICJGYWlsZWQgdG8gcHJvYmUgZm9yIHRoZW1lIGZpbGU6ICVscyBpbiBwYXRoOiAlbHMiLCB3elRoZW1lRmlsZU5hbWUsIHd6TW9kdWxlUGF0aCk7CisKKyAgICAgICAgaHIgPSBUaGVtZUxvYWRGcm9tRmlsZShzY3pUaGVtZVBhdGgsICZfdGhlbWUpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlMShociwgIkZhaWxlZCB0byBsb2FkIHRoZW1lIGZyb20gcGF0aDogJWxzIiwgc2N6VGhlbWVQYXRoKTsKKworICAgICAgICBociA9IFRoZW1lTG9jYWxpemUoX3RoZW1lLCBfd2l4TG9jKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gbG9jYWxpemUgdGhlbWU6ICVscyIsIHNjelRoZW1lUGF0aCk7CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBjYXB0aW9uIGlmIHRoZXJlIGFyZSBhbnkgZm9ybWF0dGVkIHN0cmluZ3MgaW4gaXQuCisgICAgICAgIC8vIElmIHRoZSB3aXggZGV2ZWxvcGVyIGlzIHNob3dpbmcgYSBoaWRkZW4gdmFyaWFibGUgaW4gdGhlIFVJLCB0aGVuCisgICAgICAgIC8vIG9idmlvdXNseSB0aGV5IGRvbid0IGNhcmUgYWJvdXQga2VlcGluZyBpdCBzYWZlIHNvIGRvbid0IGdvIGRvd24gdGhlCisgICAgICAgIC8vIHJhYmJpdCBob2xlIG9mIG1ha2luZyBzdXJlIHRoYXQgdGhpcyBpcyBzZWN1cmVseSBmcmVlZC4KKyAgICAgICAgaHIgPSBCYWxGb3JtYXRTdHJpbmcoX3RoZW1lLT5zY3pDYXB0aW9uLCAmc2N6Q2FwdGlvbik7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAgICAgICBUaGVtZVVwZGF0ZUNhcHRpb24oX3RoZW1lLCBzY3pDYXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgTEV4aXQ6CisgICAgICAgIFJlbGVhc2VTdHIoc2N6Q2FwdGlvbik7CisgICAgICAgIFJlbGVhc2VTdHIoc2N6VGhlbWVQYXRoKTsKKworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisKKyAgICBIUkVTVUxUIFBhcnNlT3ZlcnJpZGFibGVWYXJpYWJsZXNGcm9tWG1sKF9faW4gSVhNTERPTURvY3VtZW50KiBwaXhkTWFuaWZlc3QpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgICAgIElYTUxET01Ob2RlKiBwTm9kZSA9IG51bGxwdHI7CisgICAgICAgIElYTUxET01Ob2RlTGlzdCogcE5vZGVzID0gbnVsbHB0cjsKKyAgICAgICAgRFdPUkQgY05vZGVzID0gMDsKKyAgICAgICAgTFBXU1RSIHNjeiA9IG51bGxwdHI7CisgICAgICAgIEJPT0wgaGlkZGVuID0gRkFMU0U7CisKKyAgICAgICAgLy8gZ2V0IHRoZSBsaXN0IG9mIHZhcmlhYmxlcyB1c2VycyBjYW4gb3ZlcnJpZGUgb24gdGhlIGNvbW1hbmQgbGluZQorICAgICAgICBociA9IFhtbFNlbGVjdE5vZGVzKHBpeGRNYW5pZmVzdCwgTCIvQm9vdHN0cmFwcGVyQXBwbGljYXRpb25EYXRhL1dpeFN0ZGJhT3ZlcnJpZGFibGVWYXJpYWJsZSIsICZwTm9kZXMpOworICAgICAgICBpZiAoU19GQUxTRSA9PSBocikgeworICAgICAgICAgICAgRXhpdEZ1bmN0aW9uMShociA9IFNfT0spOworICAgICAgICB9CisgICAgICAgIEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gc2VsZWN0IG92ZXJyaWRhYmxlIHZhcmlhYmxlIG5vZGVzLiIpOworCisgICAgICAgIGhyID0gcE5vZGVzLT5nZXRfbGVuZ3RoKChsb25nKikmY05vZGVzKTsKKyAgICAgICAgRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBnZXQgb3ZlcnJpZGFibGUgdmFyaWFibGUgbm9kZSBjb3VudC4iKTsKKworICAgICAgICBpZiAoY05vZGVzKSB7CisgICAgICAgICAgICBociA9IERpY3RDcmVhdGVTdHJpbmdMaXN0KCZfb3ZlcnJpZGFibGVWYXJpYWJsZXMsIDMyLCBESUNUX0ZMQUdfTk9ORSk7CisgICAgICAgICAgICBFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgc3RyaW5nIGRpY3Rpb25hcnkuIik7CisKKyAgICAgICAgICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCBjTm9kZXM7ICsraSkgeworICAgICAgICAgICAgICAgIGhyID0gWG1sTmV4dEVsZW1lbnQocE5vZGVzLCAmcE5vZGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gZ2V0IG5leHQgbm9kZS4iKTsKKworICAgICAgICAgICAgICAgIC8vIEBOYW1lCisgICAgICAgICAgICAgICAgaHIgPSBYbWxHZXRBdHRyaWJ1dGVFeChwTm9kZSwgTCJOYW1lIiwgJnNjeik7CisgICAgICAgICAgICAgICAgRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBnZXQgQE5hbWUuIik7CisKKyAgICAgICAgICAgICAgICBociA9IFhtbEdldFllc05vQXR0cmlidXRlKHBOb2RlLCBMIkhpZGRlbiIsICZoaWRkZW4pOworCisgICAgICAgICAgICAgICAgaWYgKCFoaWRkZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgaHIgPSBEaWN0QWRkS2V5KF9vdmVycmlkYWJsZVZhcmlhYmxlcywgc2N6KTsKKyAgICAgICAgICAgICAgICAgICAgRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gYWRkIFwiJWxzXCIgdG8gdGhlIHN0cmluZyBkaWN0aW9uYXJ5LiIsIHNjeik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gcHJlcGFyZSBuZXh0IGl0ZXJhdGlvbgorICAgICAgICAgICAgICAgIFJlbGVhc2VOdWxsT2JqZWN0KHBOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgTEV4aXQ6CisgICAgICAgIFJlbGVhc2VPYmplY3QocE5vZGUpOworICAgICAgICBSZWxlYXNlT2JqZWN0KHBOb2Rlcyk7CisgICAgICAgIFJlbGVhc2VTdHIoc2N6KTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBHZXQgdGhlIGZpbGUgdmVyc2lvbiBvZiB0aGUgYm9vdHN0cmFwcGVyIGFuZCByZWNvcmQgaW4gYm9vdHN0cmFwcGVyIGxvZyBmaWxlCisgICAgLy8KKyAgICBIUkVTVUxUIEdldEJ1bmRsZUZpbGVWZXJzaW9uKCkgeworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICAgICAgVUxBUkdFX0lOVEVHRVIgdWxpVmVyc2lvbiA9IHsgfTsKKyAgICAgICAgTFBXU1RSIHNjekN1cnJlbnRQYXRoID0gbnVsbHB0cjsKKworICAgICAgICBociA9IFBhdGhGb3JDdXJyZW50UHJvY2Vzcygmc2N6Q3VycmVudFBhdGgsIG51bGxwdHIpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGdldCBidW5kbGUgcGF0aC4iKTsKKworICAgICAgICBociA9IEZpbGVWZXJzaW9uKHNjekN1cnJlbnRQYXRoLCAmdWxpVmVyc2lvbi5IaWdoUGFydCwgJnVsaVZlcnNpb24uTG93UGFydCk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gZ2V0IGJ1bmRsZSBmaWxlIHZlcnNpb24uIik7CisKKyAgICAgICAgaHIgPSBfZW5naW5lLT5TZXRWYXJpYWJsZVZlcnNpb24oUFlCQV9WQVJJQUJMRV9CVU5ETEVfRklMRV9WRVJTSU9OLCB1bGlWZXJzaW9uLlF1YWRQYXJ0KTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBzZXQgV2l4QnVuZGxlRmlsZVZlcnNpb24gdmFyaWFibGUuIik7CisKKyAgICBMRXhpdDoKKyAgICAgICAgUmVsZWFzZVN0cihzY3pDdXJyZW50UGF0aCk7CisKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBDcmVhdGVNYWluV2luZG93IC0gY3JlYXRlcyB0aGUgbWFpbiBpbnN0YWxsIHdpbmRvdy4KKyAgICAvLworICAgIEhSRVNVTFQgQ3JlYXRlTWFpbldpbmRvdygpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgICAgIEhJQ09OIGhJY29uID0gcmVpbnRlcnByZXRfY2FzdDxISUNPTj4oX3RoZW1lLT5oSWNvbik7CisgICAgICAgIFdORENMQVNTVyB3YyA9IHsgfTsKKyAgICAgICAgRFdPUkQgZHdXaW5kb3dTdHlsZSA9IDA7CisgICAgICAgIGludCB4ID0gQ1dfVVNFREVGQVVMVDsKKyAgICAgICAgaW50IHkgPSBDV19VU0VERUZBVUxUOworICAgICAgICBQT0lOVCBwdEN1cnNvciA9IHsgfTsKKyAgICAgICAgSE1PTklUT1IgaE1vbml0b3IgPSBudWxscHRyOworICAgICAgICBNT05JVE9SSU5GTyBtaSA9IHsgfTsKKyAgICAgICAgQ09MT1JSRUYgZmcsIGJnOworICAgICAgICBIQlJVU0ggYmdCcnVzaDsKKworICAgICAgICAvLyBJZiB0aGUgdGhlbWUgZGlkIG5vdCBwcm92aWRlIGFuIGljb24sIHRyeSB1c2luZyB0aGUgaWNvbiBmcm9tIHRoZSBidW5kbGUgZW5naW5lLgorICAgICAgICBpZiAoIWhJY29uKSB7CisgICAgICAgICAgICBITU9EVUxFIGhCb290c3RyYXBwZXJFbmdpbmUgPSA6OkdldE1vZHVsZUhhbmRsZVcobnVsbHB0cik7CisgICAgICAgICAgICBpZiAoaEJvb3RzdHJhcHBlckVuZ2luZSkgeworICAgICAgICAgICAgICAgIGhJY29uID0gOjpMb2FkSWNvblcoaEJvb3RzdHJhcHBlckVuZ2luZSwgTUFLRUlOVFJFU09VUkNFVygxKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmZyA9IFJHQigwLCAwLCAwKTsKKyAgICAgICAgYmcgPSBSR0IoMjU1LCAyNTUsIDI1NSk7CisgICAgICAgIGJnQnJ1c2ggPSAoSEJSVVNIKShDT0xPUl9XSU5ET1crMSk7CisgICAgICAgIGlmIChfdGhlbWUtPmR3Rm9udElkIDwgX3RoZW1lLT5jRm9udHMpIHsKKyAgICAgICAgICAgIFRIRU1FX0ZPTlQgKmZvbnQgPSAmX3RoZW1lLT5yZ0ZvbnRzW190aGVtZS0+ZHdGb250SWRdOworICAgICAgICAgICAgZmcgPSBmb250LT5jckZvcmVncm91bmQ7CisgICAgICAgICAgICBiZyA9IGZvbnQtPmNyQmFja2dyb3VuZDsKKyAgICAgICAgICAgIGJnQnJ1c2ggPSBmb250LT5oQmFja2dyb3VuZDsKKyAgICAgICAgICAgIFJlbWFwQ29sb3IoJmZnLCAmYmcsICZiZ0JydXNoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSB3aW5kb3cgY2xhc3MgYW5kIGNyZWF0ZSB0aGUgd2luZG93LgorICAgICAgICB3Yy5scGZuV25kUHJvYyA9IFB5dGhvbkJvb3RzdHJhcHBlckFwcGxpY2F0aW9uOjpXbmRQcm9jOworICAgICAgICB3Yy5oSW5zdGFuY2UgPSBfaE1vZHVsZTsKKyAgICAgICAgd2MuaEljb24gPSBoSWNvbjsKKyAgICAgICAgd2MuaEN1cnNvciA9IDo6TG9hZEN1cnNvclcobnVsbHB0ciwgKExQQ1dTVFIpSURDX0FSUk9XKTsKKyAgICAgICAgd2MuaGJyQmFja2dyb3VuZCA9IGJnQnJ1c2g7CisgICAgICAgIHdjLmxwc3pNZW51TmFtZSA9IG51bGxwdHI7CisgICAgICAgIHdjLmxwc3pDbGFzc05hbWUgPSBQWUJBX1dJTkRPV19DTEFTUzsKKyAgICAgICAgaWYgKCE6OlJlZ2lzdGVyQ2xhc3NXKCZ3YykpIHsKKyAgICAgICAgICAgIEV4aXRXaXRoTGFzdEVycm9yKGhyLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHdpbmRvdy4iKTsKKyAgICAgICAgfQorCisgICAgICAgIF9yZWdpc3RlcmVkID0gVFJVRTsKKworICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHdpbmRvdyBzdHlsZSBiYXNlZCBvbiB0aGUgdGhlbWUgc3R5bGUgYW5kIGNvbW1hbmQgZGlzcGxheSB2YWx1ZS4KKyAgICAgICAgZHdXaW5kb3dTdHlsZSA9IF90aGVtZS0+ZHdTdHlsZTsKKyAgICAgICAgaWYgKEJPT1RTVFJBUFBFUl9ESVNQTEFZX05PTkUgPj0gX2NvbW1hbmQuZGlzcGxheSkgeworICAgICAgICAgICAgZHdXaW5kb3dTdHlsZSAmPSB+V1NfVklTSUJMRTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERvbid0IHNob3cgdGhlIHdpbmRvdyBpZiB0aGVyZSBpcyBhIHNwbGFzaCBzY3JlZW4gKGl0IHdpbGwgYmUgbWFkZSB2aXNpYmxlIHdoZW4gdGhlIHNwbGFzaCBzY3JlZW4gaXMgaGlkZGVuKQorICAgICAgICBpZiAoOjpJc1dpbmRvdyhfY29tbWFuZC5od25kU3BsYXNoU2NyZWVuKSkgeworICAgICAgICAgICAgZHdXaW5kb3dTdHlsZSAmPSB+V1NfVklTSUJMRTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENlbnRlciB0aGUgd2luZG93IG9uIHRoZSBtb25pdG9yIHdpdGggdGhlIG1vdXNlLgorICAgICAgICBpZiAoOjpHZXRDdXJzb3JQb3MoJnB0Q3Vyc29yKSkgeworICAgICAgICAgICAgaE1vbml0b3IgPSA6Ok1vbml0b3JGcm9tUG9pbnQocHRDdXJzb3IsIE1PTklUT1JfREVGQVVMVFRPTkVBUkVTVCk7CisgICAgICAgICAgICBpZiAoaE1vbml0b3IpIHsKKyAgICAgICAgICAgICAgICBtaS5jYlNpemUgPSBzaXplb2YobWkpOworICAgICAgICAgICAgICAgIGlmICg6OkdldE1vbml0b3JJbmZvVyhoTW9uaXRvciwgJm1pKSkgeworICAgICAgICAgICAgICAgICAgICB4ID0gbWkucmNXb3JrLmxlZnQgKyAobWkucmNXb3JrLnJpZ2h0IC0gbWkucmNXb3JrLmxlZnQgLSBfdGhlbWUtPm5XaWR0aCkgLyAyOworICAgICAgICAgICAgICAgICAgICB5ID0gbWkucmNXb3JrLnRvcCArIChtaS5yY1dvcmsuYm90dG9tIC0gbWkucmNXb3JrLnRvcCAtIF90aGVtZS0+bkhlaWdodCkgLyAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIF9oV25kID0gOjpDcmVhdGVXaW5kb3dFeFcoCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgd2MubHBzekNsYXNzTmFtZSwKKyAgICAgICAgICAgIF90aGVtZS0+c2N6Q2FwdGlvbiwKKyAgICAgICAgICAgIGR3V2luZG93U3R5bGUsCisgICAgICAgICAgICB4LAorICAgICAgICAgICAgeSwKKyAgICAgICAgICAgIF90aGVtZS0+bldpZHRoLAorICAgICAgICAgICAgX3RoZW1lLT5uSGVpZ2h0LAorICAgICAgICAgICAgSFdORF9ERVNLVE9QLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIF9oTW9kdWxlLAorICAgICAgICAgICAgdGhpcworICAgICAgICApOworICAgICAgICBFeGl0T25OdWxsV2l0aExhc3RFcnJvcihfaFduZCwgaHIsICJGYWlsZWQgdG8gY3JlYXRlIHdpbmRvdy4iKTsKKworICAgICAgICBociA9IFNfT0s7CisKKyAgICBMRXhpdDoKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBJbml0aWFsaXplVGFza2JhckJ1dHRvbiAtIGluaXRpYWxpemVzIHRhc2tiYXIgYnV0dG9uIGZvciBwcm9ncmVzcy4KKyAgICAvLworICAgIHZvaWQgSW5pdGlhbGl6ZVRhc2tiYXJCdXR0b24oKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgICAgIGhyID0gOjpDb0NyZWF0ZUluc3RhbmNlKENMU0lEX1Rhc2tiYXJMaXN0LCBudWxscHRyLCBDTFNDVFhfQUxMLCBfX3V1aWRvZihJVGFza2Jhckxpc3QzKSwgcmVpbnRlcnByZXRfY2FzdDxMUFZPSUQqPigmX3Rhc2tiYXJMaXN0KSk7CisgICAgICAgIGlmIChSRUdEQl9FX0NMQVNTTk9UUkVHID09IGhyKSB7CisgICAgICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGJlZm9yZSBXaW5kb3dzIDcKKyAgICAgICAgICAgIEV4aXRGdW5jdGlvbjEoaHIgPSBTX09LKTsKKyAgICAgICAgfQorICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGNyZWF0ZSBJVGFza2Jhckxpc3QzLiBDb250aW51aW5nLiIpOworCisgICAgICAgIF90YXNrYmFyQnV0dG9uQ3JlYXRlZE1lc3NhZ2UgPSA6OlJlZ2lzdGVyV2luZG93TWVzc2FnZVcoTCJUYXNrYmFyQnV0dG9uQ3JlYXRlZCIpOworICAgICAgICBCYWxFeGl0T25OdWxsV2l0aExhc3RFcnJvcihfdGFza2JhckJ1dHRvbkNyZWF0ZWRNZXNzYWdlLCBociwgIkZhaWxlZCB0byBnZXQgVGFza2JhckJ1dHRvbkNyZWF0ZWQgbWVzc2FnZS4gQ29udGludWluZy4iKTsKKworICAgIExFeGl0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8KKyAgICAvLyBEZXN0cm95TWFpbldpbmRvdyAtIGNsZWFuIHVwIGFsbCB0aGUgd2luZG93IHJlZ2lzdHJhdGlvbi4KKyAgICAvLworICAgIHZvaWQgRGVzdHJveU1haW5XaW5kb3coKSB7CisgICAgICAgIGlmICg6OklzV2luZG93KF9oV25kKSkgeworICAgICAgICAgICAgOjpEZXN0cm95V2luZG93KF9oV25kKTsKKyAgICAgICAgICAgIF9oV25kID0gbnVsbHB0cjsKKyAgICAgICAgICAgIF90YXNrYmFyQnV0dG9uT0sgPSBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfcmVnaXN0ZXJlZCkgeworICAgICAgICAgICAgOjpVbnJlZ2lzdGVyQ2xhc3NXKFBZQkFfV0lORE9XX0NMQVNTLCBfaE1vZHVsZSk7CisgICAgICAgICAgICBfcmVnaXN0ZXJlZCA9IEZBTFNFOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvLworICAgIC8vIFduZFByb2MgLSBzdGFuZGFyZCB3aW5kb3dzIG1lc3NhZ2UgaGFuZGxlci4KKyAgICAvLworICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFduZFByb2MoCisgICAgICAgIF9faW4gSFdORCBoV25kLAorICAgICAgICBfX2luIFVJTlQgdU1zZywKKyAgICAgICAgX19pbiBXUEFSQU0gd1BhcmFtLAorICAgICAgICBfX2luIExQQVJBTSBsUGFyYW0KKyAgICApIHsKKyNwcmFnbWEgd2FybmluZyhzdXBwcmVzczo0MzEyKQorICAgICAgICBhdXRvIHBCQSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHl0aG9uQm9vdHN0cmFwcGVyQXBwbGljYXRpb24qPig6OkdldFdpbmRvd0xvbmdQdHJXKGhXbmQsIEdXTFBfVVNFUkRBVEEpKTsKKworICAgICAgICBzd2l0Y2ggKHVNc2cpIHsKKyAgICAgICAgY2FzZSBXTV9OQ0NSRUFURTogeworICAgICAgICAgICAgTFBDUkVBVEVTVFJVQ1QgbHBjcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBDUkVBVEVTVFJVQ1Q+KGxQYXJhbSk7CisgICAgICAgICAgICBwQkEgPSByZWludGVycHJldF9jYXN0PFB5dGhvbkJvb3RzdHJhcHBlckFwcGxpY2F0aW9uKj4obHBjcy0+bHBDcmVhdGVQYXJhbXMpOworI3ByYWdtYSB3YXJuaW5nKHN1cHByZXNzOjQyNDQpCisgICAgICAgICAgICA6OlNldFdpbmRvd0xvbmdQdHJXKGhXbmQsIEdXTFBfVVNFUkRBVEEsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KHBCQSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFdNX05DREVTVFJPWTogeworICAgICAgICAgICAgTFJFU1VMVCBscmVzID0gVGhlbWVEZWZXaW5kb3dQcm9jKHBCQSA/IHBCQS0+X3RoZW1lIDogbnVsbHB0ciwgaFduZCwgdU1zZywgd1BhcmFtLCBsUGFyYW0pOworICAgICAgICAgICAgOjpTZXRXaW5kb3dMb25nUHRyVyhoV25kLCBHV0xQX1VTRVJEQVRBLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBscmVzOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBXTV9DUkVBVEU6IAorICAgICAgICAgICAgaWYgKCFwQkEtPk9uQ3JlYXRlKGhXbmQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBXTV9RVUVSWUVORFNFU1NJT046CisgICAgICAgICAgICByZXR1cm4gSURDQU5DRUwgIT0gcEJBLT5PblN5c3RlbVNodXRkb3duKHN0YXRpY19jYXN0PERXT1JEPihsUGFyYW0pLCBJRENBTkNFTCk7CisKKyAgICAgICAgY2FzZSBXTV9DTE9TRToKKyAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNob3NlIG5vdCB0byBjbG9zZSwgZG8gKm5vdCogbGV0IHRoZSBkZWZhdWx0IHdpbmRvdyBwcm9jIGhhbmRsZSB0aGUgbWVzc2FnZS4KKyAgICAgICAgICAgIGlmICghcEJBLT5PbkNsb3NlKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV01fREVTVFJPWToKKyAgICAgICAgICAgIDo6UG9zdFF1aXRNZXNzYWdlKDApOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBXTV9QQUlOVDogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgY2FzZSBXTV9FUkFTRUJLR05EOgorICAgICAgICAgICAgaWYgKHBCQSAmJiBwQkEtPl9zdXBwcmVzc1BhaW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFdNX1BZQkFfU0hPV19IRUxQOgorICAgICAgICAgICAgcEJBLT5PblNob3dIZWxwKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBjYXNlIFdNX1BZQkFfREVURUNUX1BBQ0tBR0VTOgorICAgICAgICAgICAgcEJBLT5PbkRldGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBXTV9QWUJBX1BMQU5fUEFDS0FHRVM6CisgICAgICAgICAgICBwQkEtPk9uUGxhbihzdGF0aWNfY2FzdDxCT09UU1RSQVBQRVJfQUNUSU9OPihsUGFyYW0pKTsKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2UgV01fUFlCQV9BUFBMWV9QQUNLQUdFUzoKKyAgICAgICAgICAgIHBCQS0+T25BcHBseSgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBXTV9QWUJBX0NIQU5HRV9TVEFURToKKyAgICAgICAgICAgIHBCQS0+T25DaGFuZ2VTdGF0ZShzdGF0aWNfY2FzdDxQWUJBX1NUQVRFPihsUGFyYW0pKTsKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2UgV01fUFlCQV9TSE9XX0ZBSUxVUkU6CisgICAgICAgICAgICBwQkEtPk9uU2hvd0ZhaWx1cmUoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2UgV01fQ09NTUFORDoKKyAgICAgICAgICAgIHN3aXRjaCAoTE9XT1JEKHdQYXJhbSkpIHsKKyAgICAgICAgICAgIC8vIEN1c3RvbWl6ZSBjb21tYW5kcworICAgICAgICAgICAgLy8gU3VjY2Vzcy9mYWlsdXJlIGNvbW1hbmRzCisgICAgICAgICAgICBjYXNlIElEX0xBVU5DSF9CVVRUT046CisgICAgICAgICAgICAgICAgcEJBLT5PbkNsaWNrTGF1bmNoQnV0dG9uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGNhc2UgSURfU1VDQ0VTU19SRVNUQVJUX0JVVFRPTjogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgSURfRkFJTFVSRV9SRVNUQVJUX0JVVFRPTjoKKyAgICAgICAgICAgICAgICBwQkEtPk9uQ2xpY2tSZXN0YXJ0QnV0dG9uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGNhc2UgSURDQU5DRUw6IF9fZmFsbHRocm91Z2g7CisgICAgICAgICAgICBjYXNlIElEX0lOU1RBTExfQ0FOQ0VMX0JVVFRPTjogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgSURfQ1VTVE9NMV9DQU5DRUxfQlVUVE9OOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgY2FzZSBJRF9DVVNUT00yX0NBTkNFTF9CVVRUT046IF9fZmFsbHRocm91Z2g7CisgICAgICAgICAgICBjYXNlIElEX01PRElGWV9DQU5DRUxfQlVUVE9OOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgY2FzZSBJRF9QUk9HUkVTU19DQU5DRUxfQlVUVE9OOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgY2FzZSBJRF9TVUNDRVNTX0NBTkNFTF9CVVRUT046IF9fZmFsbHRocm91Z2g7CisgICAgICAgICAgICBjYXNlIElEX0ZBSUxVUkVfQ0FOQ0VMX0JVVFRPTjogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgSURfQ0xPU0VfQlVUVE9OOgorICAgICAgICAgICAgICAgIHBCQS0+T25Db21tYW5kKElEX0NMT1NFX0JVVFRPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcEJBLT5PbkNvbW1hbmQoKENPTlRST0xfSUQpTE9XT1JEKHdQYXJhbSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBXTV9OT1RJRlk6CisgICAgICAgICAgICBpZiAobFBhcmFtKSB7CisgICAgICAgICAgICAgICAgTFBOTUhEUiBwbm1oZHIgPSByZWludGVycHJldF9jYXN0PExQTk1IRFI+KGxQYXJhbSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChwbm1oZHItPmNvZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5NX0NMSUNLOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgICAgIGNhc2UgTk1fUkVUVVJOOgorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PERXT1JEPihwbm1oZHItPmlkRnJvbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9GQUlMVVJFX0xPR0ZJTEVfTElOSzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBCQS0+T25DbGlja0xvZ0ZpbGVMaW5rKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV01fQ1RMQ09MT1JTVEFUSUM6CisgICAgICAgIGNhc2UgV01fQ1RMQ09MT1JCVE46CisgICAgICAgICAgICBpZiAocEJBKSB7CisgICAgICAgICAgICAgICAgSEJSVVNIIGJydXNoID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpZiAocEJBLT5TZXRDb250cm9sQ29sb3IoKEhXTkQpbFBhcmFtLCAoSERDKXdQYXJhbSwgJmJydXNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExSRVNVTFQpYnJ1c2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocEJBICYmIHBCQS0+X3Rhc2tiYXJMaXN0ICYmIHVNc2cgPT0gcEJBLT5fdGFza2JhckJ1dHRvbkNyZWF0ZWRNZXNzYWdlKSB7CisgICAgICAgICAgICBwQkEtPl90YXNrYmFyQnV0dG9uT0sgPSBUUlVFOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVGhlbWVEZWZXaW5kb3dQcm9jKHBCQSA/IHBCQS0+X3RoZW1lIDogbnVsbHB0ciwgaFduZCwgdU1zZywgd1BhcmFtLCBsUGFyYW0pOworICAgIH0KKworICAgIC8vCisgICAgLy8gT25DcmVhdGUgLSBmaW5pc2hlcyBsb2FkaW5nIHRoZSB0aGVtZS4KKyAgICAvLworICAgIEJPT0wgT25DcmVhdGUoX19pbiBIV05EIGhXbmQpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAgICAgICAgaHIgPSBUaGVtZUxvYWRDb250cm9scyhfdGhlbWUsIGhXbmQsIENPTlRST0xfSURfTkFNRVMsIGNvdW50b2YoQ09OVFJPTF9JRF9OQU1FUykpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGxvYWQgdGhlbWUgY29udHJvbHMuIik7CisKKyAgICAgICAgQ19BU1NFUlQoQ09VTlRfUEFHRSA9PSBjb3VudG9mKFBBR0VfTkFNRVMpKTsKKyAgICAgICAgQ19BU1NFUlQoY291bnRvZihfcGFnZUlkcykgPT0gY291bnRvZihQQUdFX05BTUVTKSk7CisKKyAgICAgICAgVGhlbWVHZXRQYWdlSWRzKF90aGVtZSwgUEFHRV9OQU1FUywgX3BhZ2VJZHMsIGNvdW50b2YoX3BhZ2VJZHMpKTsKKworICAgICAgICAvLyBJbml0aWFsaXplIHRoZSB0ZXh0IG9uIGFsbCAiYXBwbGljYXRpb24iIChub24tcGFnZSkgY29udHJvbHMuCisgICAgICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCBfdGhlbWUtPmNDb250cm9sczsgKytpKSB7CisgICAgICAgICAgICBUSEVNRV9DT05UUk9MKiBwQ29udHJvbCA9IF90aGVtZS0+cmdDb250cm9scyArIGk7CisgICAgICAgICAgICBMUFdTVFIgdGV4dCA9IG51bGxwdHI7CisKKyAgICAgICAgICAgIGlmICghcENvbnRyb2wtPndQYWdlSWQgJiYgcENvbnRyb2wtPnNjelRleHQgJiYgKnBDb250cm9sLT5zY3pUZXh0KSB7CisgICAgICAgICAgICAgICAgSFJFU1VMVCBockZvcm1hdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgd2l4IGRldmVsb3BlciBpcyBzaG93aW5nIGEgaGlkZGVuIHZhcmlhYmxlIGluIHRoZSBVSSwKKyAgICAgICAgICAgICAgICAvLyB0aGVuIG9idmlvdXNseSB0aGV5IGRvbid0IGNhcmUgYWJvdXQga2VlcGluZyBpdCBzYWZlIHNvIGRvbid0CisgICAgICAgICAgICAgICAgLy8gZ28gZG93biB0aGUgcmFiYml0IGhvbGUgb2YgbWFraW5nIHN1cmUgdGhhdCB0aGlzIGlzIHNlY3VyZWx5CisgICAgICAgICAgICAgICAgLy8gZnJlZWQuCisgICAgICAgICAgICAgICAgaHJGb3JtYXQgPSBCYWxGb3JtYXRTdHJpbmcocENvbnRyb2wtPnNjelRleHQsICZ0ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyRm9ybWF0KSkgeworICAgICAgICAgICAgICAgICAgICBUaGVtZVNldFRleHRDb250cm9sKF90aGVtZSwgcENvbnRyb2wtPndJZCwgdGV4dCk7CisgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VTdHIodGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBMRXhpdDoKKyAgICAgICAgcmV0dXJuIFNVQ0NFRURFRChocik7CisgICAgfQorCisgICAgdm9pZCBSZW1hcENvbG9yKENPTE9SUkVGICpmZywgQ09MT1JSRUYgKmJnLCBIQlJVU0ggKmJnQnJ1c2gpIHsKKyAgICAgICAgaWYgKCpmZyA9PSBSR0IoMCwgMCwgMCkpIHsKKyAgICAgICAgICAgICpmZyA9IEdldFN5c0NvbG9yKENPTE9SX1dJTkRPV1RFWFQpOworICAgICAgICB9IGVsc2UgaWYgKCpmZyA9PSBSR0IoMTI4LCAxMjgsIDEyOCkpIHsKKyAgICAgICAgICAgICpmZyA9IEdldFN5c0NvbG9yKENPTE9SX0dSQVlURVhUKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKmJnQnJ1c2ggJiYgKmJnID09IFJHQigyNTUsIDI1NSwgMjU1KSkgeworICAgICAgICAgICAgKmJnID0gR2V0U3lzQ29sb3IoQ09MT1JfV0lORE9XKTsKKyAgICAgICAgICAgICpiZ0JydXNoID0gR2V0U3lzQ29sb3JCcnVzaChDT0xPUl9XSU5ET1cpOworICAgICAgICB9CisgICAgfQorCisgICAgQk9PTCBTZXRDb250cm9sQ29sb3IoSFdORCBoV25kLCBIREMgaERDLCBIQlJVU0ggKmJydXNoKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3RoZW1lLT5jQ29udHJvbHM7ICsraSkgeworICAgICAgICAgICAgaWYgKF90aGVtZS0+cmdDb250cm9sc1tpXS5oV25kICE9IGhXbmQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRFdPUkQgZm9udElkID0gX3RoZW1lLT5yZ0NvbnRyb2xzW2ldLmR3Rm9udElkOworICAgICAgICAgICAgaWYgKGZvbnRJZCA+IF90aGVtZS0+Y0ZvbnRzKSB7CisgICAgICAgICAgICAgICAgZm9udElkID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRIRU1FX0ZPTlQgKmZudCA9ICZfdGhlbWUtPnJnRm9udHNbZm9udElkXTsKKworICAgICAgICAgICAgQ09MT1JSRUYgZmcgPSBmbnQtPmNyRm9yZWdyb3VuZCwgYmcgPSBmbnQtPmNyQmFja2dyb3VuZDsKKyAgICAgICAgICAgICpicnVzaCA9IGZudC0+aEJhY2tncm91bmQ7CisgICAgICAgICAgICBSZW1hcENvbG9yKCZmZywgJmJnLCBicnVzaCk7CisgICAgICAgICAgICA6OlNldFRleHRDb2xvcihoREMsIGZnKTsKKyAgICAgICAgICAgIDo6U2V0QmtDb2xvcihoREMsIGJnKTsKKworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIC8vCisgICAgLy8gT25TaG93RmFpbHVyZSAtIGRpc3BsYXkgdGhlIGZhaWx1cmUgcGFnZS4KKyAgICAvLworICAgIHZvaWQgT25TaG93RmFpbHVyZSgpIHsKKyAgICAgICAgU2V0U3RhdGUoUFlCQV9TVEFURV9GQUlMRUQsIFNfT0spOworCisgICAgICAgIC8vIElmIHRoZSBVSSBzaG91bGQgYmUgdmlzaWJsZSwgZGlzcGxheSBpdCBub3cgYW5kIGhpZGUgdGhlIHNwbGFzaCBzY3JlZW4KKyAgICAgICAgaWYgKEJPT1RTVFJBUFBFUl9ESVNQTEFZX05PTkUgPCBfY29tbWFuZC5kaXNwbGF5KSB7CisgICAgICAgICAgICA6OlNob3dXaW5kb3coX3RoZW1lLT5od25kUGFyZW50LCBTV19TSE9XKTsKKyAgICAgICAgfQorCisgICAgICAgIF9lbmdpbmUtPkNsb3NlU3BsYXNoU2NyZWVuKCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBPblNob3dIZWxwIC0gZGlzcGxheSB0aGUgaGVscCBwYWdlLgorICAgIC8vCisgICAgdm9pZCBPblNob3dIZWxwKCkgeworICAgICAgICBTZXRTdGF0ZShQWUJBX1NUQVRFX0hFTFAsIFNfT0spOworCisgICAgICAgIC8vIElmIHRoZSBVSSBzaG91bGQgYmUgdmlzaWJsZSwgZGlzcGxheSBpdCBub3cgYW5kIGhpZGUgdGhlIHNwbGFzaCBzY3JlZW4KKyAgICAgICAgaWYgKEJPT1RTVFJBUFBFUl9ESVNQTEFZX05PTkUgPCBfY29tbWFuZC5kaXNwbGF5KSB7CisgICAgICAgICAgICA6OlNob3dXaW5kb3coX3RoZW1lLT5od25kUGFyZW50LCBTV19TSE9XKTsKKyAgICAgICAgfQorCisgICAgICAgIF9lbmdpbmUtPkNsb3NlU3BsYXNoU2NyZWVuKCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBPbkRldGVjdCAtIHN0YXJ0IHRoZSBwcm9jZXNzaW5nIG9mIHBhY2thZ2VzLgorICAgIC8vCisgICAgdm9pZCBPbkRldGVjdCgpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAgICAgICAgaWYgKF9iYUZ1bmN0aW9uKSB7CisgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9TVEFOREFSRCwgIlJ1bm5pbmcgZGV0ZWN0IEJBIGZ1bmN0aW9uIik7CisgICAgICAgICAgICBociA9IF9iYUZ1bmN0aW9uLT5PbkRldGVjdCgpOworICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCBjYWxsaW5nIGRldGVjdCBCQSBmdW5jdGlvbi4iKTsKKyAgICAgICAgfQorCisgICAgICAgIFNldFN0YXRlKFBZQkFfU1RBVEVfREVURUNUSU5HLCBocik7CisKKyAgICAgICAgLy8gSWYgdGhlIFVJIHNob3VsZCBiZSB2aXNpYmxlLCBkaXNwbGF5IGl0IG5vdyBhbmQgaGlkZSB0aGUgc3BsYXNoIHNjcmVlbgorICAgICAgICBpZiAoQk9PVFNUUkFQUEVSX0RJU1BMQVlfTk9ORSA8IF9jb21tYW5kLmRpc3BsYXkpIHsKKyAgICAgICAgICAgIDo6U2hvd1dpbmRvdyhfdGhlbWUtPmh3bmRQYXJlbnQsIFNXX1NIT1cpOworICAgICAgICB9CisKKyAgICAgICAgX2VuZ2luZS0+Q2xvc2VTcGxhc2hTY3JlZW4oKTsKKworICAgICAgICAvLyBUZWxsIHRoZSBjb3JlIHdlJ3JlIHJlYWR5IGZvciB0aGUgcGFja2FnZXMgdG8gYmUgcHJvY2Vzc2VkIG5vdy4KKyAgICAgICAgaHIgPSBfZW5naW5lLT5EZXRlY3QoKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBzdGFydCBkZXRlY3RpbmcgY2hhaW4uIik7CisKKyAgICBMRXhpdDoKKyAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgIFNldFN0YXRlKFBZQkFfU1RBVEVfREVURUNUSU5HLCBocik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSFJFU1VMVCBVcGRhdGVVSVN0cmluZ3MoX19pbiBCT09UU1RSQVBQRVJfQUNUSU9OIGFjdGlvbikgeworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICAgICAgTFBDV1NUUiBsaWtlSW5zdGFsbGluZyA9IG51bGxwdHI7CisgICAgICAgIExQQ1dTVFIgbGlrZUluc3RhbGxhdGlvbiA9IG51bGxwdHI7CisgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgICAgIGNhc2UgQk9PVFNUUkFQUEVSX0FDVElPTl9JTlNUQUxMOgorICAgICAgICAgICAgbGlrZUluc3RhbGxpbmcgPSBMIkluc3RhbGxpbmciOworICAgICAgICAgICAgbGlrZUluc3RhbGxhdGlvbiA9IEwiSW5zdGFsbGF0aW9uIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJPT1RTVFJBUFBFUl9BQ1RJT05fTU9ESUZZOgorICAgICAgICAgICAgLy8gRm9yIG1vZGlmeSwgd2UgYWN0dWFsbHkgd2FudCB0byBwYXNzIElOU1RBTEwKKyAgICAgICAgICAgIGFjdGlvbiA9IEJPT1RTVFJBUFBFUl9BQ1RJT05fSU5TVEFMTDsKKyAgICAgICAgICAgIGxpa2VJbnN0YWxsaW5nID0gTCJNb2RpZnlpbmciOworICAgICAgICAgICAgbGlrZUluc3RhbGxhdGlvbiA9IEwiTW9kaWZpY2F0aW9uIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJPT1RTVFJBUFBFUl9BQ1RJT05fUkVQQUlSOgorICAgICAgICAgICAgbGlrZUluc3RhbGxpbmcgPSBMIlJlcGFpcmluZyI7CisgICAgICAgICAgICBsaWtlSW5zdGFsbGF0aW9uID0gTCJSZXBhaXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQk9PVFNUUkFQUEVSX0FDVElPTl9VTklOU1RBTEw6CisgICAgICAgICAgICBsaWtlSW5zdGFsbGluZyA9IEwiVW5pbnN0YWxsaW5nIjsKKyAgICAgICAgICAgIGxpa2VJbnN0YWxsYXRpb24gPSBMIlVuaW5zdGFsbGF0aW9uIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpa2VJbnN0YWxsaW5nKSB7CisgICAgICAgICAgICBMUFdTVFIgbG9jTmFtZSA9IG51bGxwdHI7CisgICAgICAgICAgICBMT0NfU1RSSU5HICpsb2NUZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGhyID0gU3RyQWxsb2NGb3JtYXR0ZWQoJmxvY05hbWUsIEwiIyhsb2MuJWxzKSIsIGxpa2VJbnN0YWxsaW5nKTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKSB7CisgICAgICAgICAgICAgICAgaHIgPSBMb2NHZXRTdHJpbmcoX3dpeExvYywgbG9jTmFtZSwgJmxvY1RleHQpOworICAgICAgICAgICAgICAgIFJlbGVhc2VTdHIobG9jTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfZW5naW5lLT5TZXRWYXJpYWJsZVN0cmluZygKKyAgICAgICAgICAgICAgICBMIkFjdGlvbkxpa2VJbnN0YWxsaW5nIiwKKyAgICAgICAgICAgICAgICBTVUNDRUVERUQoaHIpICYmIGxvY1RleHQgPyBsb2NUZXh0LT53elRleHQgOiBsaWtlSW5zdGFsbGluZworICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaWtlSW5zdGFsbGF0aW9uKSB7CisgICAgICAgICAgICBMUFdTVFIgbG9jTmFtZSA9IG51bGxwdHI7CisgICAgICAgICAgICBMT0NfU1RSSU5HICpsb2NUZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGhyID0gU3RyQWxsb2NGb3JtYXR0ZWQoJmxvY05hbWUsIEwiIyhsb2MuJWxzKSIsIGxpa2VJbnN0YWxsYXRpb24pOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgICAgICAgICAgICBociA9IExvY0dldFN0cmluZyhfd2l4TG9jLCBsb2NOYW1lLCAmbG9jVGV4dCk7CisgICAgICAgICAgICAgICAgUmVsZWFzZVN0cihsb2NOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlU3RyaW5nKAorICAgICAgICAgICAgICAgIEwiQWN0aW9uTGlrZUluc3RhbGxhdGlvbiIsCisgICAgICAgICAgICAgICAgU1VDQ0VFREVEKGhyKSAmJiBsb2NUZXh0ID8gbG9jVGV4dC0+d3pUZXh0IDogbGlrZUluc3RhbGxhdGlvbgorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgLy8KKyAgICAvLyBPblBsYW4gLSBwbGFuIHRoZSBkZXRlY3RlZCBjaGFuZ2VzLgorICAgIC8vCisgICAgdm9pZCBPblBsYW4oX19pbiBCT09UU1RSQVBQRVJfQUNUSU9OIGFjdGlvbikgeworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgICAgICBfcGxhbm5lZEFjdGlvbiA9IGFjdGlvbjsKKworICAgICAgICBociA9IFVwZGF0ZVVJU3RyaW5ncyhhY3Rpb24pOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIHVwZGF0ZSBzdHJpbmdzIik7CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIGdvaW5nIHRvIGFwcGx5IGEgZG93bmdyYWRlLCBiYWlsLgorICAgICAgICBpZiAoX2Rvd25ncmFkaW5nT3RoZXJWZXJzaW9uICYmIEJPT1RTVFJBUFBFUl9BQ1RJT05fVU5JTlNUQUxMIDwgYWN0aW9uKSB7CisgICAgICAgICAgICBpZiAoX3N1cHByZXNzRG93bmdyYWRlRmFpbHVyZSkgeworICAgICAgICAgICAgICAgIEJhbExvZyhCT09UU1RSQVBQRVJfTE9HX0xFVkVMX1NUQU5EQVJELCAiQSBuZXdlciB2ZXJzaW9uIG9mIHRoaXMgcHJvZHVjdCBpcyBpbnN0YWxsZWQgYnV0IGRvd25ncmFkZSBmYWlsdXJlIGhhcyBiZWVuIHN1cHByZXNzZWQ7IGNvbnRpbnVpbmcuLi4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaHIgPSBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfUFJPRFVDVF9WRVJTSU9OKTsKKyAgICAgICAgICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiQ2Fubm90IGluc3RhbGwgYSBwcm9kdWN0IHdoZW4gYSBuZXdlciB2ZXJzaW9uIGlzIGluc3RhbGxlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFNldFN0YXRlKFBZQkFfU1RBVEVfUExBTk5JTkcsIGhyKTsKKworICAgICAgICBpZiAoX2JhRnVuY3Rpb24pIHsKKyAgICAgICAgICAgIEJhbExvZyhCT09UU1RSQVBQRVJfTE9HX0xFVkVMX1NUQU5EQVJELCAiUnVubmluZyBwbGFuIEJBIGZ1bmN0aW9uIik7CisgICAgICAgICAgICBfYmFGdW5jdGlvbi0+T25QbGFuKCk7CisgICAgICAgIH0KKworICAgICAgICBociA9IF9lbmdpbmUtPlBsYW4oYWN0aW9uKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBzdGFydCBwbGFubmluZyBwYWNrYWdlcy4iKTsKKworICAgIExFeGl0OgorICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgU2V0U3RhdGUoUFlCQV9TVEFURV9QTEFOTklORywgaHIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBPbkFwcGx5IC0gYXBwbHkgdGhlIHBhY2thZ2VzLgorICAgIC8vCisgICAgdm9pZCBPbkFwcGx5KCkgeworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKworICAgICAgICBTZXRTdGF0ZShQWUJBX1NUQVRFX0FQUExZSU5HLCBocik7CisgICAgICAgIFNldFByb2dyZXNzU3RhdGUoaHIpOworICAgICAgICBTZXRUYXNrYmFyQnV0dG9uUHJvZ3Jlc3MoMCk7CisKKyAgICAgICAgaHIgPSBfZW5naW5lLT5BcHBseShfaFduZCk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gc3RhcnQgYXBwbHlpbmcgcGFja2FnZXMuIik7CisKKyAgICAgICAgVGhlbWVDb250cm9sRW5hYmxlKF90aGVtZSwgSURfUFJPR1JFU1NfQ0FOQ0VMX0JVVFRPTiwgVFJVRSk7IC8vIGVuc3VyZSB0aGUgY2FuY2VsIGJ1dHRvbiBpcyBlbmFibGVkIGJlZm9yZSBzdGFydGluZy4KKworICAgIExFeGl0OgorICAgICAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICAgICAgU2V0U3RhdGUoUFlCQV9TVEFURV9BUFBMWUlORywgaHIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBPbkNoYW5nZVN0YXRlIC0gY2hhbmdlIHN0YXRlLgorICAgIC8vCisgICAgdm9pZCBPbkNoYW5nZVN0YXRlKF9faW4gUFlCQV9TVEFURSBzdGF0ZSkgeworICAgICAgICBMUFdTVFIgdW5mb3JtYXR0ZWRUZXh0ID0gbnVsbHB0cjsKKworICAgICAgICBfc3RhdGUgPSBzdGF0ZTsKKworICAgICAgICAvLyBJZiBvdXIgaW5zdGFsbCBpcyBhdCB0aGUgZW5kIChzdWNjZXNzIG9yIGZhaWx1cmUpIGFuZCB3ZSdyZSBub3Qgc2hvd2luZyBmdWxsIFVJCisgICAgICAgIC8vIHRoZW4gZXhpdCAocHJvbXB0IGZvciByZXN0YXJ0IGlmIHJlcXVpcmVkKS4KKyAgICAgICAgaWYgKChQWUJBX1NUQVRFX0FQUExJRUQgPD0gX3N0YXRlICYmIEJPT1RTVFJBUFBFUl9ESVNQTEFZX0ZVTEwgPiBfY29tbWFuZC5kaXNwbGF5KSkgeworICAgICAgICAgICAgLy8gSWYgYSByZXN0YXJ0IHdhcyByZXF1aXJlZCBidXQgd2Ugd2VyZSBub3QgYXV0b21hdGljYWxseSBhbGxvd2VkIHRvCisgICAgICAgICAgICAvLyBhY2NlcHQgdGhlIHJlYm9vdCB0aGVuIGRvIHRoZSBwcm9tcHQuCisgICAgICAgICAgICBpZiAoX3Jlc3RhcnRSZXF1aXJlZCAmJiAhX2FsbG93UmVzdGFydCkgeworICAgICAgICAgICAgICAgIFN0ckFsbG9jRnJvbUVycm9yKCZ1bmZvcm1hdHRlZFRleHQsIEhSRVNVTFRfRlJPTV9XSU4zMihFUlJPUl9TVUNDRVNTX1JFQk9PVF9SRVFVSVJFRCksIG51bGxwdHIpOworCisgICAgICAgICAgICAgICAgX2FsbG93UmVzdGFydCA9IElET0sgPT0gOjpNZXNzYWdlQm94VygKKyAgICAgICAgICAgICAgICAgICAgX2hXbmQsCisgICAgICAgICAgICAgICAgICAgIHVuZm9ybWF0dGVkVGV4dCA/IHVuZm9ybWF0dGVkVGV4dCA6IEwiVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC4gQ2hhbmdlcyB3aWxsIG5vdCBiZSBlZmZlY3RpdmUgdW50aWwgdGhlIHN5c3RlbSBpcyByZWJvb3RlZC4iLAorICAgICAgICAgICAgICAgICAgICBfdGhlbWUtPnNjekNhcHRpb24sCisgICAgICAgICAgICAgICAgICAgIE1CX0lDT05FWENMQU1BVElPTiB8IE1CX09LQ0FOQ0VMCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUXVpZXRseSBleGl0LgorICAgICAgICAgICAgOjpQb3N0TWVzc2FnZVcoX2hXbmQsIFdNX0NMT1NFLCAwLCAwKTsKKyAgICAgICAgfSBlbHNlIHsgLy8gdHJ5IHRvIGNoYW5nZSB0aGUgcGFnZXMuCisgICAgICAgICAgICBEV09SRCBuZXdQYWdlSWQgPSAwOworICAgICAgICAgICAgRGV0ZXJtaW5lUGFnZUlkKF9zdGF0ZSwgJm5ld1BhZ2VJZCk7CisKKyAgICAgICAgICAgIGlmIChfdmlzaWJsZVBhZ2VJZCAhPSBuZXdQYWdlSWQpIHsKKyAgICAgICAgICAgICAgICBTaG93UGFnZShuZXdQYWdlSWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUmVsZWFzZVN0cih1bmZvcm1hdHRlZFRleHQpOworICAgIH0KKworICAgIC8vCisgICAgLy8gQ2FsbGVkIGJlZm9yZSBzaG93aW5nIGEgcGFnZSB0byBoYW5kbGUgYWxsIGNvbnRyb2xzLgorICAgIC8vCisgICAgdm9pZCBQcm9jZXNzUGFnZUNvbnRyb2xzKFRIRU1FX1BBR0UgKnBQYWdlKSB7CisgICAgICAgIGlmICghcFBhZ2UpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCBwUGFnZS0+Y0NvbnRyb2xJbmRpY2VzOyArK2kpIHsKKyAgICAgICAgICAgIFRIRU1FX0NPTlRST0wqIHBDb250cm9sID0gX3RoZW1lLT5yZ0NvbnRyb2xzICsgcFBhZ2UtPnJnZHdDb250cm9sSW5kaWNlc1tpXTsKKyAgICAgICAgICAgIEJPT0wgZW5hYmxlQ29udHJvbCA9IFRSVUU7CisKKyAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBuYW1lZCBjb250cm9sLCB0cnkgdG8gc2V0IGl0cyBkZWZhdWx0IHN0YXRlLgorICAgICAgICAgICAgaWYgKHBDb250cm9sLT5zY3pOYW1lICYmICpwQ29udHJvbC0+c2N6TmFtZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjaGVja2FibGUgY29udHJvbCwgdHJ5IHRvIHNldCBpdHMgZGVmYXVsdCBzdGF0ZQorICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBzdGF0ZSBvZiBhIG1hdGNoaW5nIG5hbWVkIEJ1cm4gdmFyaWFibGUuCisgICAgICAgICAgICAgICAgaWYgKElzQ2hlY2thYmxlKHBDb250cm9sKSkgeworICAgICAgICAgICAgICAgICAgICBMT05HTE9ORyBsbFZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgSFJFU1VMVCBociA9IEJhbEdldE51bWVyaWNWYXJpYWJsZShwQ29udHJvbC0+c2N6TmFtZSwgJmxsVmFsdWUpOworCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjb250cm9sIHZhbHVlIGlzbid0IHNldCB0aGVuIGRpc2FibGUgaXQuCisgICAgICAgICAgICAgICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQ29udHJvbCA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhlbWVTZW5kQ29udHJvbE1lc3NhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDb250cm9sLT53SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk1fU0VUQ0hFQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKGhyKSAmJiBsbFZhbHVlID8gQlNUX0NIRUNLRUQgOiBCU1RfVU5DSEVDS0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBIaWRlIG9yIGRpc2FibGUgY29udHJvbHMgYmFzZWQgb24gdGhlIGNvbnRyb2wgbmFtZSB3aXRoICdTdGF0ZScgYXBwZW5kZWQKKyAgICAgICAgICAgICAgICBMUFdTVFIgY29udHJvbE5hbWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBTdHJBbGxvY0Zvcm1hdHRlZCgmY29udHJvbE5hbWUsIEwiJWxzU3RhdGUiLCBwQ29udHJvbC0+c2N6TmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgICAgICAgICAgICAgICAgTFBXU1RSIGNvbnRyb2xTdGF0ZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIGhyID0gQmFsR2V0U3RyaW5nVmFyaWFibGUoY29udHJvbE5hbWUsICZjb250cm9sU3RhdGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSAmJiBjb250cm9sU3RhdGUgJiYgKmNvbnRyb2xTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xTdGF0ZVswXSA9PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFdTVFIgZm9ybWF0dGVkID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKEJhbEZvcm1hdFN0cmluZyhjb250cm9sU3RhdGUsICZmb3JtYXR0ZWQpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJGcmVlKGNvbnRyb2xTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xTdGF0ZSA9IGZvcm1hdHRlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDU1RSX0VRVUFMID09IDo6Q29tcGFyZVN0cmluZ1coTE9DQUxFX05FVVRSQUwsIDAsIGNvbnRyb2xTdGF0ZSwgLTEsIEwiZGlzYWJsZSIsIC0xKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbExvZyhCT09UU1RSQVBQRVJfTE9HX0xFVkVMX1NUQU5EQVJELCAiRGlzYWJsZSBjb250cm9sICVscyIsIHBDb250cm9sLT5zY3pOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVDb250cm9sID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKENTVFJfRVFVQUwgPT0gOjpDb21wYXJlU3RyaW5nVyhMT0NBTEVfTkVVVFJBTCwgMCwgY29udHJvbFN0YXRlLCAtMSwgTCJoaWRlIiwgLTEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfU1RBTkRBUkQsICJIaWRlIGNvbnRyb2wgJWxzIiwgcENvbnRyb2wtPnNjek5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgZG9lc24ndCB3b3JrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlbWVTaG93Q29udHJvbChfdGhlbWUsIHBDb250cm9sLT53SWQsIFNXX0hJREUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiBleHBsaWNpdCBzdGF0ZSBjYW4gb3ZlcnJpZGUgdGhlIGxhY2sgb2YgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2tpbmcgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQ29udHJvbCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgU3RyRnJlZShjb250cm9sU3RhdGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTdHJGcmVlKGNvbnRyb2xOYW1lKTsKKyAgICAgICAgICAgICAgICBjb250cm9sTmFtZSA9IG51bGxwdHI7CisKKworICAgICAgICAgICAgICAgIC8vIElmIGEgY29tbWFuZCBsaW5rIGhhcyBhIG5vdGUsIHRoZW4gYWRkIGl0LgorICAgICAgICAgICAgICAgIGlmICgocENvbnRyb2wtPmR3U3R5bGUgJiBCU19UWVBFTUFTSykgPT0gQlNfQ09NTUFORExJTksgfHwKKyAgICAgICAgICAgICAgICAgICAgKHBDb250cm9sLT5kd1N0eWxlICYgQlNfVFlQRU1BU0spID09IEJTX0RFRkNPTU1BTkRMSU5LKSB7CisgICAgICAgICAgICAgICAgICAgIGhyID0gU3RyQWxsb2NGb3JtYXR0ZWQoJmNvbnRyb2xOYW1lLCBMIiMobG9jLiVsc05vdGUpIiwgcENvbnRyb2wtPnNjek5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTE9DX1NUUklORyAqbG9jVGV4dCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBociA9IExvY0dldFN0cmluZyhfd2l4TG9jLCBjb250cm9sTmFtZSwgJmxvY1RleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgbG9jVGV4dCAmJiBsb2NUZXh0LT53elRleHQgJiYgbG9jVGV4dC0+d3pUZXh0WzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBXU1RSIHRleHQgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyID0gQmFsRm9ybWF0U3RyaW5nKGxvY1RleHQtPnd6VGV4dCwgJnRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIHRleHQgJiYgdGV4dFswXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVtZVNlbmRDb250cm9sTWVzc2FnZShfdGhlbWUsIHBDb250cm9sLT53SWQsIEJDTV9TRVROT1RFLCAwLCAoTFBBUkFNKXRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlU3RyKHRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlU3RyKGNvbnRyb2xOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBociA9IFNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUaGVtZUNvbnRyb2xFbmFibGUoX3RoZW1lLCBwQ29udHJvbC0+d0lkLCBlbmFibGVDb250cm9sKTsKKworICAgICAgICAgICAgLy8gRm9ybWF0IHRoZSB0ZXh0IGluIGVhY2ggb2YgdGhlIG5ldyBwYWdlJ3MgY29udHJvbHMKKyAgICAgICAgICAgIGlmIChwQ29udHJvbC0+c2N6VGV4dCAmJiAqcENvbnRyb2wtPnNjelRleHQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgd2l4IGRldmVsb3BlciBpcyBzaG93aW5nIGEgaGlkZGVuIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgLy8gaW4gdGhlIFVJLCB0aGVuIG9idmlvdXNseSB0aGV5IGRvbid0IGNhcmUgYWJvdXQKKyAgICAgICAgICAgICAgICAvLyBrZWVwaW5nIGl0IHNhZmUgc28gZG9uJ3QgZ28gZG93biB0aGUgcmFiYml0IGhvbGUKKyAgICAgICAgICAgICAgICAvLyBvZiBtYWtpbmcgc3VyZSB0aGF0IHRoaXMgaXMgc2VjdXJlbHkgZnJlZWQuCisgICAgICAgICAgICAgICAgTFBXU1RSIHRleHQgPSBudWxscHRyOworICAgICAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBCYWxGb3JtYXRTdHJpbmcocENvbnRyb2wtPnNjelRleHQsICZ0ZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkgeworICAgICAgICAgICAgICAgICAgICBUaGVtZVNldFRleHRDb250cm9sKF90aGVtZSwgcENvbnRyb2wtPndJZCwgdGV4dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8KKyAgICAvLyBPbkNsb3NlIC0gY2FsbGVkIHdoZW4gdGhlIHdpbmRvdyBpcyB0cnlpbmcgdG8gYmUgY2xvc2VkLgorICAgIC8vCisgICAgQk9PTCBPbkNsb3NlKCkgeworICAgICAgICBCT09MIGNsb3NlID0gRkFMU0U7CisKKyAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBzdWNjZWVkZWQgb3IgZmFpbGVkIG9yIHNob3dpbmcgdGhlIGhlbHAgcGFnZSwganVzdCBjbG9zZSAocHJvbXB0cyBhcmUgYW5ub3lpbmcgaWYgdGhlIGJvb3RzdHJhcHBlciBpcyBkb25lKS4KKyAgICAgICAgaWYgKFBZQkFfU1RBVEVfQVBQTElFRCA8PSBfc3RhdGUgfHwgUFlCQV9TVEFURV9IRUxQID09IF9zdGF0ZSkgeworICAgICAgICAgICAgY2xvc2UgPSBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gcHJvbXB0IHRoZSB1c2VyIG9yIGZvcmNlIHRoZSBjYW5jZWwgaWYgdGhlcmUgaXMgbm8gVUkuCisgICAgICAgICAgICBjbG9zZSA9IFByb21wdENhbmNlbCgKKyAgICAgICAgICAgICAgICBfaFduZCwKKyAgICAgICAgICAgICAgICBCT09UU1RSQVBQRVJfRElTUExBWV9GVUxMICE9IF9jb21tYW5kLmRpc3BsYXksCisgICAgICAgICAgICAgICAgX2NvbmZpcm1DbG9zZU1lc3NhZ2UgPyBfY29uZmlybUNsb3NlTWVzc2FnZSA6IEwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbD8iLAorICAgICAgICAgICAgICAgIF90aGVtZS0+c2N6Q2FwdGlvbgorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlJ3JlIGRvaW5nIHByb2dyZXNzIHRoZW4gd2UgbmV2ZXIgY2xvc2UsIHdlIGp1c3QgY2FuY2VsIHRvIGxldCByb2xsYmFjayBvY2N1ci4KKyAgICAgICAgaWYgKFBZQkFfU1RBVEVfQVBQTFlJTkcgPD0gX3N0YXRlICYmIFBZQkFfU1RBVEVfQVBQTElFRCA+IF9zdGF0ZSkgeworICAgICAgICAgICAgLy8gSWYgd2UgY2FuY2VsZWQgZGlzYWJsZSBjYW5jZWwgYnV0dG9uIHNpbmNlIGNsaWNraW5nIGl0IGFnYWluIGlzIHNpbGx5LgorICAgICAgICAgICAgaWYgKGNsb3NlKSB7CisgICAgICAgICAgICAgICAgVGhlbWVDb250cm9sRW5hYmxlKF90aGVtZSwgSURfUFJPR1JFU1NfQ0FOQ0VMX0JVVFRPTiwgRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjbG9zZSA9IEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsb3NlOworICAgIH0KKworICAgIC8vCisgICAgLy8gT25DbGlja0Nsb3NlQnV0dG9uIC0gY2xvc2UgdGhlIGFwcGxpY2F0aW9uLgorICAgIC8vCisgICAgdm9pZCBPbkNsaWNrQ2xvc2VCdXR0b24oKSB7CisgICAgICAgIDo6U2VuZE1lc3NhZ2VXKF9oV25kLCBXTV9DTE9TRSwgMCwgMCk7CisgICAgfQorCisKKyAgICAvLworICAgIC8vIE9uQ2xpY2tMYXVuY2hCdXR0b24gLSBsYXVuY2ggdGhlIGFwcCBmcm9tIHRoZSBzdWNjZXNzIHBhZ2UuCisgICAgLy8KKyAgICB2b2lkIE9uQ2xpY2tMYXVuY2hCdXR0b24oKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgICAgICBMUFdTVFIgc2N6VW5mb3JtYXR0ZWRMYXVuY2hUYXJnZXQgPSBudWxscHRyOworICAgICAgICBMUFdTVFIgc2N6TGF1bmNoVGFyZ2V0ID0gbnVsbHB0cjsKKyAgICAgICAgTFBXU1RSIHNjekxhdW5jaFRhcmdldEVsZXZhdGVkSWQgPSBudWxscHRyOworICAgICAgICBMUFdTVFIgc2N6VW5mb3JtYXR0ZWRBcmd1bWVudHMgPSBudWxscHRyOworICAgICAgICBMUFdTVFIgc2N6QXJndW1lbnRzID0gbnVsbHB0cjsKKyAgICAgICAgaW50IG5DbWRTaG93ID0gU1dfU0hPV05PUk1BTDsKKworICAgICAgICBociA9IEJhbEdldFN0cmluZ1ZhcmlhYmxlKFBZQkFfVkFSSUFCTEVfTEFVTkNIX1RBUkdFVF9QQVRILCAmc2N6VW5mb3JtYXR0ZWRMYXVuY2hUYXJnZXQpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlMShociwgIkZhaWxlZCB0byBnZXQgbGF1bmNoIHRhcmdldCB2YXJpYWJsZSAnJWxzJy4iLCBQWUJBX1ZBUklBQkxFX0xBVU5DSF9UQVJHRVRfUEFUSCk7CisKKyAgICAgICAgaHIgPSBCYWxGb3JtYXRTdHJpbmcoc2N6VW5mb3JtYXR0ZWRMYXVuY2hUYXJnZXQsICZzY3pMYXVuY2hUYXJnZXQpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlMShociwgIkZhaWxlZCB0byBmb3JtYXQgbGF1bmNoIHRhcmdldCB2YXJpYWJsZTogJWxzIiwgc2N6VW5mb3JtYXR0ZWRMYXVuY2hUYXJnZXQpOworCisgICAgICAgIGlmIChCYWxTdHJpbmdWYXJpYWJsZUV4aXN0cyhQWUJBX1ZBUklBQkxFX0xBVU5DSF9UQVJHRVRfRUxFVkFURURfSUQpKSB7CisgICAgICAgICAgICBociA9IEJhbEdldFN0cmluZ1ZhcmlhYmxlKFBZQkFfVkFSSUFCTEVfTEFVTkNIX1RBUkdFVF9FTEVWQVRFRF9JRCwgJnNjekxhdW5jaFRhcmdldEVsZXZhdGVkSWQpOworICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gZ2V0IGxhdW5jaCB0YXJnZXQgZWxldmF0ZWQgaWQgJyVscycuIiwgUFlCQV9WQVJJQUJMRV9MQVVOQ0hfVEFSR0VUX0VMRVZBVEVEX0lEKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChCYWxTdHJpbmdWYXJpYWJsZUV4aXN0cyhQWUJBX1ZBUklBQkxFX0xBVU5DSF9BUkdVTUVOVFMpKSB7CisgICAgICAgICAgICBociA9IEJhbEdldFN0cmluZ1ZhcmlhYmxlKFBZQkFfVkFSSUFCTEVfTEFVTkNIX0FSR1VNRU5UUywgJnNjelVuZm9ybWF0dGVkQXJndW1lbnRzKTsKKyAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUxKGhyLCAiRmFpbGVkIHRvIGdldCBsYXVuY2ggYXJndW1lbnRzICclbHMnLiIsIFBZQkFfVkFSSUFCTEVfTEFVTkNIX0FSR1VNRU5UUyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoQmFsU3RyaW5nVmFyaWFibGVFeGlzdHMoUFlCQV9WQVJJQUJMRV9MQVVOQ0hfSElEREVOKSkgeworICAgICAgICAgICAgbkNtZFNob3cgPSBTV19ISURFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjekxhdW5jaFRhcmdldEVsZXZhdGVkSWQgJiYgIV90cmllZFRvTGF1bmNoRWxldmF0ZWQpIHsKKyAgICAgICAgICAgIF90cmllZFRvTGF1bmNoRWxldmF0ZWQgPSBUUlVFOworICAgICAgICAgICAgaHIgPSBfZW5naW5lLT5MYXVuY2hBcHByb3ZlZEV4ZShfaFduZCwgc2N6TGF1bmNoVGFyZ2V0RWxldmF0ZWRJZCwgc2N6VW5mb3JtYXR0ZWRBcmd1bWVudHMsIDApOworICAgICAgICAgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgICAgICAgICBCYWxMb2dFcnJvcihociwgIkZhaWxlZCB0byBsYXVuY2ggZWxldmF0ZWQgdGFyZ2V0OiAlbHMiLCBzY3pMYXVuY2hUYXJnZXRFbGV2YXRlZElkKTsKKworICAgICAgICAgICAgICAgIC8vdHJ5IHdpdGggU2hlbEV4ZWMgbmV4dCB0aW1lCisgICAgICAgICAgICAgICAgT25DbGlja0xhdW5jaEJ1dHRvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNjelVuZm9ybWF0dGVkQXJndW1lbnRzKSB7CisgICAgICAgICAgICAgICAgaHIgPSBCYWxGb3JtYXRTdHJpbmcoc2N6VW5mb3JtYXR0ZWRBcmd1bWVudHMsICZzY3pBcmd1bWVudHMpOworICAgICAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUxKGhyLCAiRmFpbGVkIHRvIGZvcm1hdCBsYXVuY2ggYXJndW1lbnRzIHZhcmlhYmxlOiAlbHMiLCBzY3pVbmZvcm1hdHRlZEFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGhyID0gU2hlbEV4ZWMoc2N6TGF1bmNoVGFyZ2V0LCBzY3pBcmd1bWVudHMsIEwib3BlbiIsIG51bGxwdHIsIG5DbWRTaG93LCBfaFduZCwgbnVsbHB0cik7CisgICAgICAgICAgICBCYWxFeGl0T25GYWlsdXJlMShociwgIkZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0OiAlbHMiLCBzY3pMYXVuY2hUYXJnZXQpOworCisgICAgICAgICAgICA6OlBvc3RNZXNzYWdlVyhfaFduZCwgV01fQ0xPU0UsIDAsIDApOworICAgICAgICB9CisKKyAgICBMRXhpdDoKKyAgICAgICAgU3RyU2VjdXJlWmVyb0ZyZWVTdHJpbmcoc2N6QXJndW1lbnRzKTsKKyAgICAgICAgUmVsZWFzZVN0cihzY3pVbmZvcm1hdHRlZEFyZ3VtZW50cyk7CisgICAgICAgIFJlbGVhc2VTdHIoc2N6TGF1bmNoVGFyZ2V0RWxldmF0ZWRJZCk7CisgICAgICAgIFN0clNlY3VyZVplcm9GcmVlU3RyaW5nKHNjekxhdW5jaFRhcmdldCk7CisgICAgICAgIFJlbGVhc2VTdHIoc2N6VW5mb3JtYXR0ZWRMYXVuY2hUYXJnZXQpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIC8vCisgICAgLy8gT25DbGlja1Jlc3RhcnRCdXR0b24gLSBhbGxvd3MgdGhlIHJlc3RhcnQgYW5kIGNsb3NlcyB0aGUgYXBwLgorICAgIC8vCisgICAgdm9pZCBPbkNsaWNrUmVzdGFydEJ1dHRvbigpIHsKKyAgICAgICAgQXNzZXJ0U3ooX3Jlc3RhcnRSZXF1aXJlZCwgIlJlc3RhcnQgbXVzdCBiZSByZXF1ZXN0ZWQgdG8gYmUgYWJsZSB0byBjbGljayBvbiB0aGUgcmVzdGFydCBidXR0b24uIik7CisKKyAgICAgICAgX2FsbG93UmVzdGFydCA9IFRSVUU7CisgICAgICAgIDo6U2VuZE1lc3NhZ2VXKF9oV25kLCBXTV9DTE9TRSwgMCwgMCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBPbkNsaWNrTG9nRmlsZUxpbmsgLSBzaG93IHRoZSBsb2cgZmlsZS4KKyAgICAvLworICAgIHZvaWQgT25DbGlja0xvZ0ZpbGVMaW5rKCkgeworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICAgICAgTFBXU1RSIHNjekxvZ0ZpbGUgPSBudWxscHRyOworCisgICAgICAgIGhyID0gQmFsR2V0U3RyaW5nVmFyaWFibGUoX2J1bmRsZS5zY3pMb2dWYXJpYWJsZSwgJnNjekxvZ0ZpbGUpOworICAgICAgICBCYWxFeGl0T25GYWlsdXJlMShociwgIkZhaWxlZCB0byBnZXQgbG9nIGZpbGUgdmFyaWFibGUgJyVscycuIiwgX2J1bmRsZS5zY3pMb2dWYXJpYWJsZSk7CisKKyAgICAgICAgaHIgPSBTaGVsRXhlYyhMIm5vdGVwYWQuZXhlIiwgc2N6TG9nRmlsZSwgTCJvcGVuIiwgbnVsbHB0ciwgU1dfU0hPV0RFRkFVTFQsIF9oV25kLCBudWxscHRyKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gb3BlbiBsb2cgZmlsZSB0YXJnZXQ6ICVscyIsIHNjekxvZ0ZpbGUpOworCisgICAgTEV4aXQ6CisgICAgICAgIFJlbGVhc2VTdHIoc2N6TG9nRmlsZSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgLy8KKyAgICAvLyBTZXRTdGF0ZQorICAgIC8vCisgICAgdm9pZCBTZXRTdGF0ZShfX2luIFBZQkFfU1RBVEUgc3RhdGUsIF9faW4gSFJFU1VMVCBoclN0YXR1cykgeworICAgICAgICBpZiAoRkFJTEVEKGhyU3RhdHVzKSkgeworICAgICAgICAgICAgX2hyRmluYWwgPSBoclN0YXR1czsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGQUlMRUQoX2hyRmluYWwpKSB7CisgICAgICAgICAgICBzdGF0ZSA9IFBZQkFfU1RBVEVfRkFJTEVEOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9zdGF0ZSAhPSBzdGF0ZSkgeworICAgICAgICAgICAgOjpQb3N0TWVzc2FnZVcoX2hXbmQsIFdNX1BZQkFfQ0hBTkdFX1NUQVRFLCAwLCBzdGF0ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLworICAgIC8vIEdvVG9QYWdlCisgICAgLy8KKyAgICB2b2lkIEdvVG9QYWdlKF9faW4gUEFHRSBwYWdlKSB7CisgICAgICAgIF9pbnN0YWxsUGFnZSA9IHBhZ2U7CisgICAgICAgIDo6UG9zdE1lc3NhZ2VXKF9oV25kLCBXTV9QWUJBX0NIQU5HRV9TVEFURSwgMCwgX3N0YXRlKTsKKyAgICB9CisKKyAgICB2b2lkIERldGVybWluZVBhZ2VJZChfX2luIFBZQkFfU1RBVEUgc3RhdGUsIF9fb3V0IERXT1JEKiBwZHdQYWdlSWQpIHsKKyAgICAgICAgTE9OR0xPTkcgc2ltcGxlOworCisgICAgICAgIGlmIChCT09UU1RSQVBQRVJfRElTUExBWV9QQVNTSVZFID09IF9jb21tYW5kLmRpc3BsYXkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9JTklUSUFMSVpFRDoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gQk9PVFNUUkFQUEVSX0FDVElPTl9IRUxQID09IF9jb21tYW5kLmFjdGlvbgorICAgICAgICAgICAgICAgICAgICA/IF9wYWdlSWRzW1BBR0VfSEVMUF0KKyAgICAgICAgICAgICAgICAgICAgOiBfcGFnZUlkc1tQQUdFX0xPQURJTkddOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFBZQkFfU1RBVEVfSEVMUDoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gX3BhZ2VJZHNbUEFHRV9IRUxQXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBQWUJBX1NUQVRFX0RFVEVDVElORzoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gX3BhZ2VJZHNbUEFHRV9MT0FESU5HXQorICAgICAgICAgICAgICAgICAgICA/IF9wYWdlSWRzW1BBR0VfTE9BRElOR10KKyAgICAgICAgICAgICAgICAgICAgOiBfcGFnZUlkc1tQQUdFX1BST0dSRVNTX1BBU1NJVkVdCisgICAgICAgICAgICAgICAgICAgICAgICA/IF9wYWdlSWRzW1BBR0VfUFJPR1JFU1NfUEFTU0lWRV0KKyAgICAgICAgICAgICAgICAgICAgICAgIDogX3BhZ2VJZHNbUEFHRV9QUk9HUkVTU107CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9ERVRFQ1RFRDogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9QTEFOTklORzogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9QTEFOTkVEOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgY2FzZSBQWUJBX1NUQVRFX0FQUExZSU5HOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgY2FzZSBQWUJBX1NUQVRFX0NBQ0hJTkc6IF9fZmFsbHRocm91Z2g7CisgICAgICAgICAgICBjYXNlIFBZQkFfU1RBVEVfQ0FDSEVEOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgY2FzZSBQWUJBX1NUQVRFX0VYRUNVVElORzogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9FWEVDVVRFRDoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gX3BhZ2VJZHNbUEFHRV9QUk9HUkVTU19QQVNTSVZFXQorICAgICAgICAgICAgICAgICAgICA/IF9wYWdlSWRzW1BBR0VfUFJPR1JFU1NfUEFTU0lWRV0KKyAgICAgICAgICAgICAgICAgICAgOiBfcGFnZUlkc1tQQUdFX1BST0dSRVNTXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChCT09UU1RSQVBQRVJfRElTUExBWV9GVUxMID09IF9jb21tYW5kLmRpc3BsYXkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9JTklUSUFMSVpJTkc6CisgICAgICAgICAgICAgICAgKnBkd1BhZ2VJZCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9JTklUSUFMSVpFRDoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gQk9PVFNUUkFQUEVSX0FDVElPTl9IRUxQID09IF9jb21tYW5kLmFjdGlvbgorICAgICAgICAgICAgICAgICAgICA/IF9wYWdlSWRzW1BBR0VfSEVMUF0KKyAgICAgICAgICAgICAgICAgICAgOiBfcGFnZUlkc1tQQUdFX0xPQURJTkddOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFBZQkFfU1RBVEVfSEVMUDoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gX3BhZ2VJZHNbUEFHRV9IRUxQXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBQWUJBX1NUQVRFX0RFVEVDVElORzoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gX3BhZ2VJZHNbUEFHRV9MT0FESU5HXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBQWUJBX1NUQVRFX0RFVEVDVEVEOgorICAgICAgICAgICAgICAgIGlmIChfaW5zdGFsbFBhZ2UgPT0gUEFHRV9MT0FESU5HKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbW1hbmQuYWN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQk9PVFNUUkFQUEVSX0FDVElPTl9JTlNUQUxMOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF91cGdyYWRpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFsbFBhZ2UgPSBQQUdFX1VQR1JBREU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNVQ0NFRURFRChCYWxHZXROdW1lcmljVmFyaWFibGUoTCJTaW1wbGVJbnN0YWxsIiwgJnNpbXBsZSkpICYmIHNpbXBsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YWxsUGFnZSA9IFBBR0VfU0lNUExFX0lOU1RBTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YWxsUGFnZSA9IFBBR0VfSU5TVEFMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgQk9PVFNUUkFQUEVSX0FDVElPTl9NT0RJRlk6IF9fZmFsbHRocm91Z2g7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQk9PVFNUUkFQUEVSX0FDVElPTl9SRVBBSVI6IF9fZmFsbHRocm91Z2g7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQk9PVFNUUkFQUEVSX0FDVElPTl9VTklOU1RBTEw6CisgICAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFsbFBhZ2UgPSBQQUdFX01PRElGWTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwZHdQYWdlSWQgPSBfcGFnZUlkc1tfaW5zdGFsbFBhZ2VdOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFBZQkFfU1RBVEVfUExBTk5JTkc6IF9fZmFsbHRocm91Z2g7CisgICAgICAgICAgICBjYXNlIFBZQkFfU1RBVEVfUExBTk5FRDogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9BUFBMWUlORzogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9DQUNISU5HOiBfX2ZhbGx0aHJvdWdoOworICAgICAgICAgICAgY2FzZSBQWUJBX1NUQVRFX0NBQ0hFRDogX19mYWxsdGhyb3VnaDsKKyAgICAgICAgICAgIGNhc2UgUFlCQV9TVEFURV9FWEVDVVRJTkc6IF9fZmFsbHRocm91Z2g7CisgICAgICAgICAgICBjYXNlIFBZQkFfU1RBVEVfRVhFQ1VURUQ6CisgICAgICAgICAgICAgICAgKnBkd1BhZ2VJZCA9IF9wYWdlSWRzW1BBR0VfUFJPR1JFU1NdOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFBZQkFfU1RBVEVfQVBQTElFRDoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gX3BhZ2VJZHNbUEFHRV9TVUNDRVNTXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBQWUJBX1NUQVRFX0ZBSUxFRDoKKyAgICAgICAgICAgICAgICAqcGR3UGFnZUlkID0gX3BhZ2VJZHNbUEFHRV9GQUlMVVJFXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEJPT0wgV2lsbEVsZXZhdGUoKSB7CisgICAgICAgIHN0YXRpYyBCQUxfQ09ORElUSU9OIFdJTExfRUxFVkFURV9DT05ESVRJT04gPSB7CisgICAgICAgICAgICBMIm5vdCBXaXhCdW5kbGVFbGV2YXRlZCBhbmQgKCIKKyAgICAgICAgICAgICAgICAvKkVsZXZhdGUgd2hlbiBpbnN0YWxsaW5nIGZvciBhbGwgdXNlcnMqLworICAgICAgICAgICAgICAgIEwiSW5zdGFsbEFsbFVzZXJzIG9yICIKKyAgICAgICAgICAgICAgICAvKkVsZXZhdGUgd2hlbiBpbnN0YWxsaW5nIHRoZSBsYXVuY2hlciBmb3IgYWxsIHVzZXJzIGFuZCBpdCB3YXMgbm90IGRldGVjdGVkKi8KKyAgICAgICAgICAgICAgICBMIihJbmNsdWRlX2xhdW5jaGVyIGFuZCBJbnN0YWxsTGF1bmNoZXJBbGxVc2VycyBhbmQgbm90IERldGVjdGVkTGF1bmNoZXIpIgorICAgICAgICAgICAgTCIpIiwKKyAgICAgICAgICAgIEwiIgorICAgICAgICB9OworICAgICAgICBCT09MIHJlc3VsdDsKKworICAgICAgICByZXR1cm4gU1VDQ0VFREVEKEJhbENvbmRpdGlvbkV2YWx1YXRlKCZXSUxMX0VMRVZBVEVfQ09ORElUSU9OLCBfZW5naW5lLCAmcmVzdWx0LCBudWxscHRyKSkgJiYgcmVzdWx0OworICAgIH0KKworICAgIEJPT0wgSXNDcnRJbnN0YWxsZWQoKSB7CisgICAgICAgIGlmIChfY3J0SW5zdGFsbGVkVG9rZW4gPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIGlmIChfY3J0SW5zdGFsbGVkVG9rZW4gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGF0IGxlYXN0IENSVCB2MTAuMC4xMDEzNy4wIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgLy8gSXQgc2hvdWxkIG9ubHkgYmUgaW5zdGFsbGVkIGFzIGEgV2luZG93cyBVcGRhdGUgcGFja2FnZSwgd2hpY2ggbWVhbnMKKyAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCAzMi1iaXQvNjQtYml0LgorICAgICAgICBMUENXU1RSIGNydEZpbGUgPSBMInVjcnRiYXNlLmRsbCI7CisKKyAgICAgICAgRFdPUkQgY2JWZXIgPSBHZXRGaWxlVmVyc2lvbkluZm9TaXplVyhjcnRGaWxlLCBudWxscHRyKTsKKyAgICAgICAgaWYgKCFjYlZlcikgeworICAgICAgICAgICAgX2NydEluc3RhbGxlZFRva2VuID0gMDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgKnBEYXRhID0gbWFsbG9jKGNiVmVyKTsKKyAgICAgICAgaWYgKCFwRGF0YSkgeworICAgICAgICAgICAgX2NydEluc3RhbGxlZFRva2VuID0gMDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyhjcnRGaWxlLCAwLCBjYlZlciwgcERhdGEpKSB7CisgICAgICAgICAgICBmcmVlKHBEYXRhKTsKKyAgICAgICAgICAgIF9jcnRJbnN0YWxsZWRUb2tlbiA9IDA7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBWU19GSVhFREZJTEVJTkZPICpmZmk7CisgICAgICAgIFVJTlQgY2I7CisgICAgICAgIEJPT0wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgaWYgKFZlclF1ZXJ5VmFsdWVXKHBEYXRhLCBMIlxcIiwgKExQVk9JRCopJmZmaSwgJmNiKSAmJgorICAgICAgICAgICAgZmZpLT5kd0ZpbGVWZXJzaW9uTVMgPT0gMHgwMDBBMDAwMCAmJiBmZmktPmR3RmlsZVZlcnNpb25MUyA+PSAweDI3OTkwMDAwKSB7CisgICAgICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmcmVlKHBEYXRhKTsKKyAgICAgICAgX2NydEluc3RhbGxlZFRva2VuID0gcmVzdWx0ID8gMSA6IDA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQk9PTCBRdWVyeUVsZXZhdGVGb3JDcnRJbnN0YWxsKCkgeworICAgICAgICAvLyBDYWxsZWQgdG8gcHJvbXB0IHRoZSB1c2VyIHRoYXQgZXZlbiB0aG91Z2ggdGhleSB0aGluayB0aGV5IHdvbid0IG5lZWQKKyAgICAgICAgLy8gdG8gZWxldmF0ZSwgdGhleSBhY3R1YWxseSB3aWxsIGJlY2F1c2Ugb2YgdGhlIENSVCBpbnN0YWxsLgorICAgICAgICBpZiAoSXNDcnRJbnN0YWxsZWQoKSkgeworICAgICAgICAgICAgLy8gQ1JUIGlzIGFscmVhZHkgaW5zdGFsbGVkIC0gbm8gbmVlZCB0byBwcm9tcHQKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMT05HTE9ORyBlbGV2YXRlZDsKKyAgICAgICAgSFJFU1VMVCBociA9IEJhbEdldE51bWVyaWNWYXJpYWJsZShMIldpeEJ1bmRsZUVsZXZhdGVkIiwgJmVsZXZhdGVkKTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChocikgJiYgZWxldmF0ZWQpIHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgZWxldmF0ZWQgLSBubyBuZWVkIHRvIHByb21wdAorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKworICAgICAgICBMT0NfU1RSSU5HICpsb2NTdHI7CisgICAgICAgIGhyID0gTG9jR2V0U3RyaW5nKF93aXhMb2MsIEwiIyhsb2MuRWxldmF0ZUZvckNSVEluc3RhbGwpIiwgJmxvY1N0cik7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICBCYWxMb2dFcnJvcihociwgIkZhaWxlZCB0byBnZXQgRWxldmF0ZUZvckNSVEluc3RhbGwgc3RyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDo6TWVzc2FnZUJveFcoX2hXbmQsIGxvY1N0ci0+d3pUZXh0LCBfdGhlbWUtPnNjekNhcHRpb24sIE1CX1lFU05PKSAhPSBJRE5POworICAgIH0KKworICAgIEhSRVNVTFQgRXZhbHVhdGVDb25kaXRpb25zKCkgeworICAgICAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICAgICAgQk9PTCByZXN1bHQgPSBGQUxTRTsKKworICAgICAgICBmb3IgKERXT1JEIGkgPSAwOyBpIDwgX2NvbmRpdGlvbnMuY0NvbmRpdGlvbnM7ICsraSkgeworICAgICAgICAgICAgQkFMX0NPTkRJVElPTiogcENvbmRpdGlvbiA9IF9jb25kaXRpb25zLnJnQ29uZGl0aW9ucyArIGk7CisKKyAgICAgICAgICAgIGhyID0gQmFsQ29uZGl0aW9uRXZhbHVhdGUocENvbmRpdGlvbiwgX2VuZ2luZSwgJnJlc3VsdCwgJl9mYWlsZWRNZXNzYWdlKTsKKyAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gZXZhbHVhdGUgY29uZGl0aW9uLiIpOworCisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgICAgIC8vIEhvcGUgdGhleSBkaWRuJ3QgaGF2ZSBoaWRkZW4gdmFyaWFibGVzIGluIHRoZWlyIG1lc3NhZ2UsIGJlY2F1c2UgaXQncyBnb2luZyBpbiB0aGUgbG9nIGluIHBsYWludGV4dC4KKyAgICAgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9FUlJPUiwgIiVscyIsIF9mYWlsZWRNZXNzYWdlKTsKKworICAgICAgICAgICAgICAgIGhyID0gRV9XSVhTVERCQV9DT05ESVRJT05fRkFJTEVEOworICAgICAgICAgICAgICAgIC8vIHRvZG86IHJlbW92ZSBpbiBXaVggdjQsIGluIGNhc2UgcGVvcGxlIGFyZSByZWx5aW5nIG9uIHYzLnggbG9nZ2luZyBiZWhhdmlvcgorICAgICAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUxKGhyLCAiQnVuZGxlIGNvbmRpdGlvbiBldmFsdWF0ZWQgdG8gZmFsc2U6ICVscyIsIHBDb25kaXRpb24tPnNjekNvbmRpdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSZWxlYXNlTnVsbFN0clNlY3VyZShfZmFpbGVkTWVzc2FnZSk7CisKKyAgICBMRXhpdDoKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworCisgICAgdm9pZCBTZXRUYXNrYmFyQnV0dG9uUHJvZ3Jlc3MoX19pbiBEV09SRCBkd092ZXJhbGxQZXJjZW50YWdlKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgICAgIGlmIChfdGFza2JhckJ1dHRvbk9LKSB7CisgICAgICAgICAgICBociA9IF90YXNrYmFyTGlzdC0+U2V0UHJvZ3Jlc3NWYWx1ZShfaFduZCwgZHdPdmVyYWxsUGVyY2VudGFnZSwgMTAwVUwpOworICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gc2V0IHRhc2tiYXIgYnV0dG9uIHByb2dyZXNzIHRvOiAlZCUlLiIsIGR3T3ZlcmFsbFBlcmNlbnRhZ2UpOworICAgICAgICB9CisKKyAgICBMRXhpdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgdm9pZCBTZXRUYXNrYmFyQnV0dG9uU3RhdGUoX19pbiBUQlBGTEFHIHRicEZsYWdzKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgICAgIGlmIChfdGFza2JhckJ1dHRvbk9LKSB7CisgICAgICAgICAgICBociA9IF90YXNrYmFyTGlzdC0+U2V0UHJvZ3Jlc3NTdGF0ZShfaFduZCwgdGJwRmxhZ3MpOworICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gc2V0IHRhc2tiYXIgYnV0dG9uIHN0YXRlLiIsIHRicEZsYWdzKTsKKyAgICAgICAgfQorCisgICAgTEV4aXQ6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIHZvaWQgU2V0UHJvZ3Jlc3NTdGF0ZShfX2luIEhSRVNVTFQgaHJTdGF0dXMpIHsKKyAgICAgICAgVEJQRkxBRyBmbGFnID0gVEJQRl9OT1JNQUw7CisKKyAgICAgICAgaWYgKElzQ2FuY2VsZWQoKSB8fCBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfSU5TVEFMTF9VU0VSRVhJVCkgPT0gaHJTdGF0dXMpIHsKKyAgICAgICAgICAgIGZsYWcgPSBUQlBGX1BBVVNFRDsKKyAgICAgICAgfSBlbHNlIGlmIChJc1JvbGxpbmdCYWNrKCkgfHwgRkFJTEVEKGhyU3RhdHVzKSkgeworICAgICAgICAgICAgZmxhZyA9IFRCUEZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBTZXRUYXNrYmFyQnV0dG9uU3RhdGUoZmxhZyk7CisgICAgfQorCisKKyAgICBIUkVTVUxUIExvYWRCb290c3RyYXBwZXJCQUZ1bmN0aW9ucygpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IFNfT0s7CisgICAgICAgIExQV1NUUiBzY3pCYWZQYXRoID0gbnVsbHB0cjsKKworICAgICAgICBociA9IFBhdGhSZWxhdGl2ZVRvTW9kdWxlKCZzY3pCYWZQYXRoLCBMImJhZnVuY3Rpb25zLmRsbCIsIF9oTW9kdWxlKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBnZXQgcGF0aCB0byBCQSBmdW5jdGlvbiBETEwuIik7CisKKyNpZmRlZiBERUJVRworICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9TVEFOREFSRCwgIlBZQkE6IExvYWRCb290c3RyYXBwZXJCQUZ1bmN0aW9ucygpIC0gQkEgZnVuY3Rpb24gRExMICVscyIsIHNjekJhZlBhdGgpOworI2VuZGlmCisKKyAgICAgICAgX2hCQUZNb2R1bGUgPSA6OkxvYWRMaWJyYXJ5VyhzY3pCYWZQYXRoKTsKKyAgICAgICAgaWYgKF9oQkFGTW9kdWxlKSB7CisgICAgICAgICAgICBhdXRvIHBmbkJBRnVuY3Rpb25DcmVhdGUgPSByZWludGVycHJldF9jYXN0PFBGTl9CT09UU1RSQVBQRVJfQkFfRlVOQ1RJT05fQ1JFQVRFPig6OkdldFByb2NBZGRyZXNzKF9oQkFGTW9kdWxlLCAiQ3JlYXRlQm9vdHN0cmFwcGVyQkFGdW5jdGlvbiIpKTsKKyAgICAgICAgICAgIEJhbEV4aXRPbk51bGxXaXRoTGFzdEVycm9yMShwZm5CQUZ1bmN0aW9uQ3JlYXRlLCBociwgIkZhaWxlZCB0byBnZXQgQ3JlYXRlQm9vdHN0cmFwcGVyQkFGdW5jdGlvbiBlbnRyeS1wb2ludCBmcm9tOiAlbHMiLCBzY3pCYWZQYXRoKTsKKworICAgICAgICAgICAgaHIgPSBwZm5CQUZ1bmN0aW9uQ3JlYXRlKF9lbmdpbmUsIF9oQkFGTW9kdWxlLCAmX2JhRnVuY3Rpb24pOworICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBjcmVhdGUgQkEgZnVuY3Rpb24uIik7CisgICAgICAgIH0KKyNpZmRlZiBERUJVRworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEJhbExvZ0Vycm9yKEhSRVNVTFRfRlJPTV9XSU4zMig6OkdldExhc3RFcnJvcigpKSwgIlBZQkE6IExvYWRCb290c3RyYXBwZXJCQUZ1bmN0aW9ucygpIC0gRmFpbGVkIHRvIGxvYWQgRExMICVscyIsIHNjekJhZlBhdGgpOworICAgICAgICB9CisjZW5kaWYKKworICAgIExFeGl0OgorICAgICAgICBpZiAoX2hCQUZNb2R1bGUgJiYgIV9iYUZ1bmN0aW9uKSB7CisgICAgICAgICAgICA6OkZyZWVMaWJyYXJ5KF9oQkFGTW9kdWxlKTsKKyAgICAgICAgICAgIF9oQkFGTW9kdWxlID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBSZWxlYXNlU3RyKHNjekJhZlBhdGgpOworCisgICAgICAgIHJldHVybiBocjsKKyAgICB9CisKKyAgICBCT09MIElzQ2hlY2thYmxlKFRIRU1FX0NPTlRST0wqIHBDb250cm9sKSB7CisgICAgICAgIGlmICghcENvbnRyb2wtPnNjek5hbWUgfHwgIXBDb250cm9sLT5zY3pOYW1lWzBdKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBpZiAocENvbnRyb2wtPnR5cGUgPT0gVEhFTUVfQ09OVFJPTF9UWVBFX0NIRUNLQk9YKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwQ29udHJvbC0+dHlwZSA9PSBUSEVNRV9DT05UUk9MX1RZUEVfQlVUVE9OKSB7CisgICAgICAgICAgICBpZiAoKHBDb250cm9sLT5kd1N0eWxlICYgQlNfVFlQRU1BU0spID09IEJTX0FVVE9SQURJT0JVVFRPTikgeworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgU2F2ZVBhZ2VTZXR0aW5ncygpIHsKKyAgICAgICAgRFdPUkQgcGFnZUlkID0gMDsKKyAgICAgICAgVEhFTUVfUEFHRSogcFBhZ2UgPSBudWxscHRyOworCisgICAgICAgIERldGVybWluZVBhZ2VJZChfc3RhdGUsICZwYWdlSWQpOworICAgICAgICBwUGFnZSA9IFRoZW1lR2V0UGFnZShfdGhlbWUsIHBhZ2VJZCk7CisgICAgICAgIGlmICghcFBhZ2UpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoRFdPUkQgaSA9IDA7IGkgPCBwUGFnZS0+Y0NvbnRyb2xJbmRpY2VzOyArK2kpIHsKKyAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIGNoZWNrYWJsZSBjb250cm9scyBhbmQgc2V0IGEgQnVybiB2YXJpYWJsZQorICAgICAgICAgICAgLy8gd2l0aCB0aGF0IG5hbWUgdG8gdHJ1ZSBvciBmYWxzZS4KKyAgICAgICAgICAgIFRIRU1FX0NPTlRST0wqIHBDb250cm9sID0gX3RoZW1lLT5yZ0NvbnRyb2xzICsgcFBhZ2UtPnJnZHdDb250cm9sSW5kaWNlc1tpXTsKKyAgICAgICAgICAgIGlmIChJc0NoZWNrYWJsZShwQ29udHJvbCkgJiYgVGhlbWVDb250cm9sRW5hYmxlZChfdGhlbWUsIHBDb250cm9sLT53SWQpKSB7CisgICAgICAgICAgICAgICAgQk9PTCBjaGVja2VkID0gVGhlbWVJc0NvbnRyb2xDaGVja2VkKF90aGVtZSwgcENvbnRyb2wtPndJZCk7CisgICAgICAgICAgICAgICAgX2VuZ2luZS0+U2V0VmFyaWFibGVOdW1lcmljKHBDb250cm9sLT5zY3pOYW1lLCBjaGVja2VkID8gMSA6IDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBlZGl0Ym94IGNvbnRyb2xzIHdpdGggbmFtZXMgYW5kIHNldCBhCisgICAgICAgICAgICAvLyBCdXJuIHZhcmlhYmxlIHdpdGggdGhhdCBuYW1lIHRvIHRoZSBjb250ZW50cy4KKyAgICAgICAgICAgIGlmIChUSEVNRV9DT05UUk9MX1RZUEVfRURJVEJPWCA9PSBwQ29udHJvbC0+dHlwZSAmJiBwQ29udHJvbC0+c2N6TmFtZSAmJiAqcENvbnRyb2wtPnNjek5hbWUpIHsKKyAgICAgICAgICAgICAgICBMUFdTVFIgc2N6VmFsdWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIFRoZW1lR2V0VGV4dENvbnRyb2woX3RoZW1lLCBwQ29udHJvbC0+d0lkLCAmc2N6VmFsdWUpOworICAgICAgICAgICAgICAgIF9lbmdpbmUtPlNldFZhcmlhYmxlU3RyaW5nKHBDb250cm9sLT5zY3pOYW1lLCBzY3pWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBJc1RhcmdldFBsYXRmb3JteDY0KF9faW4gSUJvb3RzdHJhcHBlckVuZ2luZSogcEVuZ2luZSkgeworICAgICAgICBXQ0hBUiBwbGF0Zm9ybVs4XTsKKyAgICAgICAgRFdPUkQgcGxhdGZvcm1MZW4gPSA4OworCisgICAgICAgIGlmIChGQUlMRUQocEVuZ2luZS0+R2V0VmFyaWFibGVTdHJpbmcoTCJUYXJnZXRQbGF0Zm9ybSIsIHBsYXRmb3JtLCAmcGxhdGZvcm1MZW4pKSkgeworICAgICAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gOjpDb21wYXJlU3RyaW5nVyhMT0NBTEVfTkVVVFJBTCwgMCwgcGxhdGZvcm0sIC0xLCBMIng2NCIsIC0xKSA9PSBDU1RSX0VRVUFMOworICAgIH0KKworICAgIHN0YXRpYyBIUkVTVUxUIExvYWRPcHRpb25hbEZlYXR1cmVTdGF0ZXNGcm9tS2V5KAorICAgICAgICBfX2luIElCb290c3RyYXBwZXJFbmdpbmUqIHBFbmdpbmUsCisgICAgICAgIF9faW4gSEtFWSBoa0hpdmUsCisgICAgICAgIF9faW4gTFBDV1NUUiBzdWJrZXkKKyAgICApIHsKKyAgICAgICAgSEtFWSBoS2V5OworICAgICAgICBMUkVTVUxUIHJlczsKKworICAgICAgICBpZiAoSXNUYXJnZXRQbGF0Zm9ybXg2NChwRW5naW5lKSkgeworICAgICAgICAgICAgcmVzID0gUmVnT3BlbktleUV4Vyhoa0hpdmUsIHN1YmtleSwgMCwgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVksICZoS2V5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IFJlZ09wZW5LZXlFeFcoaGtIaXZlLCBzdWJrZXksIDAsIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzMyS0VZLCAmaEtleSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlcyA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkgeworICAgICAgICAgICAgcmV0dXJuIFNfRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlcyAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKHJlcyk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8gcCA9IE9QVElPTkFMX0ZFQVRVUkVTOyBwLT5yZWdOYW1lOyArK3ApIHsKKyAgICAgICAgICAgIHJlcyA9IFJlZ1F1ZXJ5VmFsdWVFeFcoaEtleSwgcC0+cmVnTmFtZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAocmVzID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICAgICAgcEVuZ2luZS0+U2V0VmFyaWFibGVOdW1lcmljKHAtPnZhcmlhYmxlTmFtZSwgMCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgcEVuZ2luZS0+U2V0VmFyaWFibGVOdW1lcmljKHAtPnZhcmlhYmxlTmFtZSwgMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5KGhLZXkpOworICAgICAgICAgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIocmVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJlZ0Nsb3NlS2V5KGhLZXkpOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICBzdGF0aWMgSFJFU1VMVCBMb2FkVGFyZ2V0RGlyRnJvbUtleSgKKyAgICAgICAgX19pbiBJQm9vdHN0cmFwcGVyRW5naW5lKiBwRW5naW5lLAorICAgICAgICBfX2luIEhLRVkgaGtIaXZlLAorICAgICAgICBfX2luIExQQ1dTVFIgc3Via2V5CisgICAgKSB7CisgICAgICAgIEhLRVkgaEtleTsKKyAgICAgICAgTFJFU1VMVCByZXM7CisgICAgICAgIERXT1JEIGRhdGFUeXBlOworICAgICAgICBCWVRFIGJ1ZmZlclsxMDI0XTsKKyAgICAgICAgRFdPUkQgYnVmZmVyTGVuID0gc2l6ZW9mKGJ1ZmZlcik7CisKKyAgICAgICAgaWYgKElzVGFyZ2V0UGxhdGZvcm14NjQocEVuZ2luZSkpIHsKKyAgICAgICAgICAgIHJlcyA9IFJlZ09wZW5LZXlFeFcoaGtIaXZlLCBzdWJrZXksIDAsIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzY0S0VZLCAmaEtleSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXMgPSBSZWdPcGVuS2V5RXhXKGhrSGl2ZSwgc3Via2V5LCAwLCBLRVlfUkVBRCB8IEtFWV9XT1c2NF8zMktFWSwgJmhLZXkpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXMgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgICAgIHJldHVybiBTX0ZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChyZXMgIT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgcmV0dXJuIEhSRVNVTFRfRlJPTV9XSU4zMihyZXMpOworICAgICAgICB9CisKKyAgICAgICAgcmVzID0gUmVnUXVlcnlWYWx1ZUV4VyhoS2V5LCBudWxscHRyLCBudWxscHRyLCAmZGF0YVR5cGUsIGJ1ZmZlciwgJmJ1ZmZlckxlbik7CisgICAgICAgIGlmIChyZXMgPT0gRVJST1JfU1VDQ0VTUyAmJiBkYXRhVHlwZSA9PSBSRUdfU1ogJiYgYnVmZmVyTGVuIDwgc2l6ZW9mKGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIHBFbmdpbmUtPlNldFZhcmlhYmxlU3RyaW5nKEwiVGFyZ2V0RGlyIiwgcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oYnVmZmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgUmVnQ2xvc2VLZXkoaEtleSk7CisgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIocmVzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSFJFU1VMVCBMb2FkQXNzb2NpYXRlRmlsZXNTdGF0ZUZyb21LZXkoCisgICAgICAgIF9faW4gSUJvb3RzdHJhcHBlckVuZ2luZSogcEVuZ2luZSwKKyAgICAgICAgX19pbiBIS0VZIGhrSGl2ZQorICAgICkgeworICAgICAgICBjb25zdCBMUENXU1RSIHN1YmtleSA9IEwiU29mdHdhcmVcXFB5dGhvblxcUHlMYXVuY2hlciI7CisgICAgICAgIEhLRVkgaEtleTsKKyAgICAgICAgTFJFU1VMVCByZXM7CisgICAgICAgIEhSRVNVTFQgaHI7CisKKyAgICAgICAgcmVzID0gUmVnT3BlbktleUV4Vyhoa0hpdmUsIHN1YmtleSwgMCwgS0VZX1JFQUQgfCBLRVlfV09XNjRfMzJLRVksICZoS2V5KTsKKworICAgICAgICBpZiAocmVzID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICByZXR1cm4gU19GQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzICE9IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIocmVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcyA9IFJlZ1F1ZXJ5VmFsdWVFeFcoaEtleSwgTCJBc3NvY2lhdGVGaWxlcyIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBpZiAocmVzID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICBociA9IFNfRkFMU0U7CisgICAgICAgIH0gZWxzZSBpZiAocmVzID09IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGhyID0gU19PSzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhyID0gSFJFU1VMVF9GUk9NX1dJTjMyKHJlcyk7CisgICAgICAgIH0KKworICAgICAgICBSZWdDbG9zZUtleShoS2V5KTsKKyAgICAgICAgcmV0dXJuIGhyOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIExvYWRPcHRpb25hbEZlYXR1cmVTdGF0ZXMoX19pbiBJQm9vdHN0cmFwcGVyRW5naW5lKiBwRW5naW5lKSB7CisgICAgICAgIFdDSEFSIHN1YmtleUZtdFsyNTZdOworICAgICAgICBXQ0hBUiBzdWJrZXlbMjU2XTsKKyAgICAgICAgRFdPUkQgc3Via2V5TGVuOworICAgICAgICBIUkVTVUxUIGhyOworICAgICAgICBIS0VZIGhrSGl2ZTsKKworICAgICAgICAvLyBUaGUgbGF1bmNoZXIgaW5zdGFsbGF0aW9uIGlzIHNlcGFyYXRlIGZyb20gdGhlIFB5dGhvbiBpbnN0YWxsLCBzbyB3ZQorICAgICAgICAvLyBjaGVjayBpdHMgc3RhdGUgbGF0ZXIuIEZvciBub3csIGFzc3VtZSB3ZSBkb24ndCB3YW50IHRoZSBsYXVuY2hlciBvcgorICAgICAgICAvLyBmaWxlIGFzc29jaWF0aW9ucywgYW5kIGlmIHRoZXkgaGF2ZSBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkIHRoZW4KKyAgICAgICAgLy8gbG9hZGluZyB0aGUgc3RhdGUgd2lsbCByZWFjdGl2YXRlIHRoZXNlIHNldHRpbmdzLgorICAgICAgICBwRW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoTCJJbmNsdWRlX2xhdW5jaGVyIiwgMCk7CisgICAgICAgIHBFbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkFzc29jaWF0ZUZpbGVzIiwgMCk7CisKKyAgICAgICAgLy8gR2V0IHRoZSByZWdpc3RyeSBrZXkgZnJvbSB0aGUgYnVuZGxlLCB0byBzYXZlIGhhdmluZyB0byBkdXBsaWNhdGUgaXQKKyAgICAgICAgLy8gaW4gbXVsdGlwbGUgcGxhY2VzLgorICAgICAgICBzdWJrZXlMZW4gPSBzaXplb2Yoc3Via2V5Rm10KSAvIHNpemVvZihzdWJrZXlGbXRbMF0pOworICAgICAgICBociA9IHBFbmdpbmUtPkdldFZhcmlhYmxlU3RyaW5nKEwiT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5Iiwgc3Via2V5Rm10LCAmc3Via2V5TGVuKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBsb2NhdGUgcmVnaXN0cnkga2V5Iik7CisgICAgICAgIHN1YmtleUxlbiA9IHNpemVvZihzdWJrZXkpIC8gc2l6ZW9mKHN1YmtleVswXSk7CisgICAgICAgIGhyID0gcEVuZ2luZS0+Rm9ybWF0U3RyaW5nKHN1YmtleUZtdCwgc3Via2V5LCAmc3Via2V5TGVuKTsKKyAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gZm9ybWF0ICVscyIsIHN1YmtleUZtdCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIGN1cnJlbnQgdXNlcidzIHJlZ2lzdHJ5IGZvciBleGlzdGluZyBmZWF0dXJlcworICAgICAgICBoa0hpdmUgPSBIS0VZX0NVUlJFTlRfVVNFUjsKKyAgICAgICAgaHIgPSBMb2FkT3B0aW9uYWxGZWF0dXJlU3RhdGVzRnJvbUtleShwRW5naW5lLCBoa0hpdmUsIHN1YmtleSk7CisgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUxKGhyLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBIS0NVXFwlbHMiLCBzdWJrZXkpOworICAgICAgICBpZiAoaHIgPT0gU19GQUxTRSkgeworICAgICAgICAgICAgLy8gTm93IGNoZWNrIHRoZSBsb2NhbCBtYWNoaW5lIHJlZ2lzdHJ5CisgICAgICAgICAgICBoa0hpdmUgPSBIS0VZX0xPQ0FMX01BQ0hJTkU7CisgICAgICAgICAgICBociA9IExvYWRPcHRpb25hbEZlYXR1cmVTdGF0ZXNGcm9tS2V5KHBFbmdpbmUsIGhrSGl2ZSwgc3Via2V5KTsKKyAgICAgICAgICAgIEJhbEV4aXRPbkZhaWx1cmUxKGhyLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBIS0xNXFwlbHMiLCBzdWJrZXkpOworICAgICAgICAgICAgaWYgKGhyID09IFNfT0spIHsKKyAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIHN5c3RlbS13aWRlIGluc3RhbGwsIHNvIGVuYWJsZSB0aGVzZSBzZXR0aW5ncy4KKyAgICAgICAgICAgICAgICBwRW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoTCJJbnN0YWxsQWxsVXNlcnMiLCAxKTsKKyAgICAgICAgICAgICAgICBwRW5naW5lLT5TZXRWYXJpYWJsZU51bWVyaWMoTCJDb21waWxlQWxsIiwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaHIgPT0gU19PSykgeworICAgICAgICAgICAgLy8gQ2Fubm90IGNoYW5nZSBJbnN0YWxsQWxsVXNlcnNTdGF0ZSB3aGVuIHVwZ3JhZGluZy4gV2hpbGUgdGhlcmUncworICAgICAgICAgICAgLy8gbm8gZ29vZCByZWFzb24gdG8gbm90IGFsbG93IGluc3RhbGxpbmcgYSBwZXItdXNlciBhbmQgYW4gYWxsLXVzZXIKKyAgICAgICAgICAgIC8vIHZlcnNpb24gc2ltdWx0YW5lb3VzbHksIEJ1cm4gY2FuJ3QgaGFuZGxlIHRoZSBzdGF0ZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAvLyBhbmQgd2lsbCBuZWVkIHRvIHVuaW5zdGFsbCB0aGUgb2xkIG9uZS4gCisgICAgICAgICAgICBwRW5naW5lLT5TZXRWYXJpYWJsZVN0cmluZyhMIkluc3RhbGxBbGxVc2Vyc1N0YXRlIiwgTCJkaXNhYmxlIik7CisKKyAgICAgICAgICAgIC8vIEdldCB0aGUgcHJldmlvdXMgaW5zdGFsbCBkaXJlY3RvcnkuIFRoaXMgY2FuIGJlIGNoYW5nZWQgYnkgdGhlCisgICAgICAgICAgICAvLyB1c2VyLgorICAgICAgICAgICAgc3Via2V5TGVuID0gc2l6ZW9mKHN1YmtleUZtdCkgLyBzaXplb2Yoc3Via2V5Rm10WzBdKTsKKyAgICAgICAgICAgIGhyID0gcEVuZ2luZS0+R2V0VmFyaWFibGVTdHJpbmcoTCJUYXJnZXREaXJSZWdpc3RyeUtleSIsIHN1YmtleUZtdCwgJnN1YmtleUxlbik7CisgICAgICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGxvY2F0ZSByZWdpc3RyeSBrZXkiKTsKKyAgICAgICAgICAgIHN1YmtleUxlbiA9IHNpemVvZihzdWJrZXkpIC8gc2l6ZW9mKHN1YmtleVswXSk7CisgICAgICAgICAgICBociA9IHBFbmdpbmUtPkZvcm1hdFN0cmluZyhzdWJrZXlGbXQsIHN1YmtleSwgJnN1YmtleUxlbik7CisgICAgICAgICAgICBCYWxFeGl0T25GYWlsdXJlMShociwgIkZhaWxlZCB0byBmb3JtYXQgJWxzIiwgc3Via2V5Rm10KTsKKyAgICAgICAgICAgIExvYWRUYXJnZXREaXJGcm9tS2V5KHBFbmdpbmUsIGhrSGl2ZSwgc3Via2V5KTsKKyAgICAgICAgfQorCisgICAgTEV4aXQ6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIUkVTVUxUIEVuc3VyZVRhcmdldERpcigpIHsKKyAgICAgICAgTE9OR0xPTkcgaW5zdGFsbEFsbFVzZXJzOworICAgICAgICBMUFdTVFIgdGFyZ2V0RGlyID0gbnVsbHB0ciwgZGVmYXVsdERpciA9IG51bGxwdHI7CisgICAgICAgIEhSRVNVTFQgaHIgPSBCYWxHZXRTdHJpbmdWYXJpYWJsZShMIlRhcmdldERpciIsICZ0YXJnZXREaXIpOworICAgICAgICBpZiAoRkFJTEVEKGhyKSB8fCAhdGFyZ2V0RGlyIHx8ICF0YXJnZXREaXJbMF0pIHsKKyAgICAgICAgICAgIFJlbGVhc2VTdHIodGFyZ2V0RGlyKTsKKyAgICAgICAgICAgIHRhcmdldERpciA9IG51bGxwdHI7CisKKyAgICAgICAgICAgIGhyID0gQmFsR2V0TnVtZXJpY1ZhcmlhYmxlKEwiSW5zdGFsbEFsbFVzZXJzIiwgJmluc3RhbGxBbGxVc2Vycyk7CisgICAgICAgICAgICBFeGl0T25GYWlsdXJlKGhyLCBMIkZhaWxlZCB0byBnZXQgaW5zdGFsbCBzY29wZSIpOworCisgICAgICAgICAgICBociA9IEJhbEdldFN0cmluZ1ZhcmlhYmxlKAorICAgICAgICAgICAgICAgIGluc3RhbGxBbGxVc2VycyA/IEwiRGVmYXVsdEFsbFVzZXJzVGFyZ2V0RGlyIiA6IEwiRGVmYXVsdEp1c3RGb3JNZVRhcmdldERpciIsCisgICAgICAgICAgICAgICAgJmRlZmF1bHREaXIKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBCYWxFeGl0T25GYWlsdXJlKGhyLCAiRmFpbGVkIHRvIGdldCB0aGUgZGVmYXVsdCBpbnN0YWxsIGRpcmVjdG9yeSIpOworCisgICAgICAgICAgICBpZiAoIWRlZmF1bHREaXIgfHwgIWRlZmF1bHREaXJbMF0pIHsKKyAgICAgICAgICAgICAgICBCYWxMb2dFcnJvcihFX0lOVkFMSURBUkcsICJEZWZhdWx0IGluc3RhbGwgZGlyZWN0b3J5IGlzIGJsYW5rIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGhyID0gQmFsRm9ybWF0U3RyaW5nKGRlZmF1bHREaXIsICZ0YXJnZXREaXIpOworICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZTEoaHIsICJGYWlsZWQgdG8gZm9ybWF0ICclbHMnIiwgZGVmYXVsdERpcik7CisKKyAgICAgICAgICAgIGhyID0gX2VuZ2luZS0+U2V0VmFyaWFibGVTdHJpbmcoTCJUYXJnZXREaXIiLCB0YXJnZXREaXIpOworICAgICAgICAgICAgQmFsRXhpdE9uRmFpbHVyZShociwgIkZhaWxlZCB0byBzZXQgaW5zdGFsbCB0YXJnZXQgZGlyZWN0b3J5Iik7CisgICAgICAgIH0KKyAgICBMRXhpdDoKKyAgICAgICAgUmVsZWFzZVN0cihkZWZhdWx0RGlyKTsKKyAgICAgICAgUmVsZWFzZVN0cih0YXJnZXREaXIpOworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorCisgICAgdm9pZCBWYWxpZGF0ZU9wZXJhdGluZ1N5c3RlbSgpIHsKKyAgICAgICAgTE9DX1NUUklORyAqcExvY1N0cmluZyA9IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBpZiAoSXNXaW5kb3dzN1NQMU9yR3JlYXRlcigpKSB7CisgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9FUlJPUiwgIlRhcmdldCBPUyBpcyBXaW5kb3dzIDcgU1AxIG9yIGxhdGVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoSXNXaW5kb3dzN09yR3JlYXRlcigpKSB7CisgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9FUlJPUiwgIkRldGVjdGVkIFdpbmRvd3MgNyBSVE0iKTsKKyAgICAgICAgICAgIEJhbExvZyhCT09UU1RSQVBQRVJfTE9HX0xFVkVMX0VSUk9SLCAiU2VydmljZSBQYWNrIDEgaXMgcmVxdWlyZWQgdG8gY29udGludWUgaW5zdGFsbGF0aW9uIik7CisgICAgICAgICAgICBMb2NHZXRTdHJpbmcoX3dpeExvYywgTCIjKGxvYy5GYWlsdXJlV2luN01pc3NpbmdTUDEpIiwgJnBMb2NTdHJpbmcpOworICAgICAgICB9IGVsc2UgaWYgKElzV2luZG93c1Zpc3RhU1AyT3JHcmVhdGVyKCkpIHsKKyAgICAgICAgICAgIEJhbExvZyhCT09UU1RSQVBQRVJfTE9HX0xFVkVMX0VSUk9SLCAiVGFyZ2V0IE9TIGlzIFdpbmRvd3MgVmlzdGEgU1AyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoSXNXaW5kb3dzVmlzdGFPckdyZWF0ZXIoKSkgeworICAgICAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfRVJST1IsICJEZXRlY3RlZCBXaW5kb3dzIFZpc3RhIFJUTSBvciBTUDEiKTsKKyAgICAgICAgICAgIEJhbExvZyhCT09UU1RSQVBQRVJfTE9HX0xFVkVMX0VSUk9SLCAiU2VydmljZSBQYWNrIDIgaXMgcmVxdWlyZWQgdG8gY29udGludWUgaW5zdGFsbGF0aW9uIik7CisgICAgICAgICAgICBMb2NHZXRTdHJpbmcoX3dpeExvYywgTCIjKGxvYy5GYWlsdXJlVmlzdGFNaXNzaW5nU1AyKSIsICZwTG9jU3RyaW5nKTsKKyAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICBCYWxMb2coQk9PVFNUUkFQUEVSX0xPR19MRVZFTF9FUlJPUiwgIkRldGVjdGVkIFdpbmRvd3MgWFAgb3IgZWFybGllciIpOworICAgICAgICAgICAgQmFsTG9nKEJPT1RTVFJBUFBFUl9MT0dfTEVWRUxfRVJST1IsICJXaW5kb3dzIFZpc3RhIFNQMiBvciBsYXRlciBpcyByZXF1aXJlZCB0byBjb250aW51ZSBpbnN0YWxsYXRpb24iKTsKKyAgICAgICAgICAgIExvY0dldFN0cmluZyhfd2l4TG9jLCBMIiMobG9jLkZhaWx1cmVYUE9yRWFybGllcikiLCAmcExvY1N0cmluZyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocExvY1N0cmluZyAmJiBwTG9jU3RyaW5nLT53elRleHQpIHsKKyAgICAgICAgICAgIEJhbEZvcm1hdFN0cmluZyhwTG9jU3RyaW5nLT53elRleHQsICZfZmFpbGVkTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIF9ockZpbmFsID0gRV9XSVhTVERCQV9DT05ESVRJT05fRkFJTEVEOworICAgIH0KKworcHVibGljOgorICAgIC8vCisgICAgLy8gQ29uc3RydWN0b3IgLSBpbml0aWFsaXplIG1lbWJlciB2YXJpYWJsZXMuCisgICAgLy8KKyAgICBQeXRob25Cb290c3RyYXBwZXJBcHBsaWNhdGlvbigKKyAgICAgICAgX19pbiBITU9EVUxFIGhNb2R1bGUsCisgICAgICAgIF9faW4gQk9PTCBmUHJlcmVxLAorICAgICAgICBfX2luIEhSRVNVTFQgaHJIb3N0SW5pdGlhbGl6YXRpb24sCisgICAgICAgIF9faW4gSUJvb3RzdHJhcHBlckVuZ2luZSogcEVuZ2luZSwKKyAgICAgICAgX19pbiBjb25zdCBCT09UU1RSQVBQRVJfQ09NTUFORCogcENvbW1hbmQKKyAgICApIDogQ0JhbEJhc2VCb290c3RyYXBwZXJBcHBsaWNhdGlvbihwRW5naW5lLCBwQ29tbWFuZCwgMywgMzAwMCkgeworICAgICAgICBfaE1vZHVsZSA9IGhNb2R1bGU7CisgICAgICAgIG1lbWNweV9zKCZfY29tbWFuZCwgc2l6ZW9mKF9jb21tYW5kKSwgcENvbW1hbmQsIHNpemVvZihCT09UU1RSQVBQRVJfQ09NTUFORCkpOworCisgICAgICAgIExPTkdMT05HIGxsSW5zdGFsbGVkID0gMDsKKyAgICAgICAgSFJFU1VMVCBociA9IEJhbEdldE51bWVyaWNWYXJpYWJsZShMIldpeEJ1bmRsZUluc3RhbGxlZCIsICZsbEluc3RhbGxlZCk7CisgICAgICAgIGlmIChTVUNDRUVERUQoaHIpICYmIEJPT1RTVFJBUFBFUl9SRVNVTUVfVFlQRV9SRUJPT1QgIT0gX2NvbW1hbmQucmVzdW1lVHlwZSAmJiAwIDwgbGxJbnN0YWxsZWQgJiYgQk9PVFNUUkFQUEVSX0FDVElPTl9JTlNUQUxMID09IF9jb21tYW5kLmFjdGlvbikgeworICAgICAgICAgICAgX2NvbW1hbmQuYWN0aW9uID0gQk9PVFNUUkFQUEVSX0FDVElPTl9NT0RJRlk7CisgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBsbEluc3RhbGxlZCAmJiAoQk9PVFNUUkFQUEVSX0FDVElPTl9NT0RJRlkgPT0gX2NvbW1hbmQuYWN0aW9uIHx8IEJPT1RTVFJBUFBFUl9BQ1RJT05fUkVQQUlSID09IF9jb21tYW5kLmFjdGlvbikpIHsKKyAgICAgICAgICAgIF9jb21tYW5kLmFjdGlvbiA9IEJPT1RTVFJBUFBFUl9BQ1RJT05fSU5TVEFMTDsKKyAgICAgICAgfQorCisgICAgICAgIF9wbGFubmVkQWN0aW9uID0gQk9PVFNUUkFQUEVSX0FDVElPTl9VTktOT1dOOworCisKKyAgICAgICAgLy8gV2hlbiByZXN1bWluZyBmcm9tIHJlc3RhcnQgZG9pbmcgc29tZSBpbnN0YWxsLWxpa2Ugb3BlcmF0aW9uLCB0cnkgdG8gZmluZCB0aGUgcGFja2FnZSB0aGF0IGZvcmNlZCB0aGUKKyAgICAgICAgLy8gcmVzdGFydC4gV2UnbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gZHVyaW5nIHBsYW5uaW5nLgorICAgICAgICBfbmV4dFBhY2thZ2VBZnRlclJlc3RhcnQgPSBudWxscHRyOworCisgICAgICAgIGlmIChCT09UU1RSQVBQRVJfUkVTVU1FX1RZUEVfUkVCT09UID09IF9jb21tYW5kLnJlc3VtZVR5cGUgJiYgQk9PVFNUUkFQUEVSX0FDVElPTl9VTklOU1RBTEwgPCBfY29tbWFuZC5hY3Rpb24pIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgZm9yY2VkIHJlc3RhcnQgcGFja2FnZSB2YXJpYWJsZSBpcyBudWxsIHdoZW4gaXQgaXMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAgICAgSFJFU1VMVCBociA9IEJhbEdldFN0cmluZ1ZhcmlhYmxlKEwiV2l4QnVuZGxlRm9yY2VkUmVzdGFydFBhY2thZ2UiLCAmX25leHRQYWNrYWdlQWZ0ZXJSZXN0YXJ0KTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHIpIHx8ICFfbmV4dFBhY2thZ2VBZnRlclJlc3RhcnQgfHwgISpfbmV4dFBhY2thZ2VBZnRlclJlc3RhcnQpIHsKKyAgICAgICAgICAgICAgICBSZWxlYXNlTnVsbFN0cihfbmV4dFBhY2thZ2VBZnRlclJlc3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgX2NydEluc3RhbGxlZFRva2VuID0gLTE7CisgICAgICAgIHBFbmdpbmUtPlNldFZhcmlhYmxlTnVtZXJpYyhMIkNSVEluc3RhbGxlZCIsIElzQ3J0SW5zdGFsbGVkKCkgPyAxIDogMCk7CisKKyAgICAgICAgX3dpeExvYyA9IG51bGxwdHI7CisgICAgICAgIG1lbXNldCgmX2J1bmRsZSwgMCwgc2l6ZW9mKF9idW5kbGUpKTsKKyAgICAgICAgbWVtc2V0KCZfY29uZGl0aW9ucywgMCwgc2l6ZW9mKF9jb25kaXRpb25zKSk7CisgICAgICAgIF9jb25maXJtQ2xvc2VNZXNzYWdlID0gbnVsbHB0cjsKKyAgICAgICAgX2ZhaWxlZE1lc3NhZ2UgPSBudWxscHRyOworCisgICAgICAgIF9sYW5ndWFnZSA9IG51bGxwdHI7CisgICAgICAgIF90aGVtZSA9IG51bGxwdHI7CisgICAgICAgIG1lbXNldChfcGFnZUlkcywgMCwgc2l6ZW9mKF9wYWdlSWRzKSk7CisgICAgICAgIF9oVWlUaHJlYWQgPSBudWxscHRyOworICAgICAgICBfcmVnaXN0ZXJlZCA9IEZBTFNFOworICAgICAgICBfaFduZCA9IG51bGxwdHI7CisKKyAgICAgICAgX3N0YXRlID0gUFlCQV9TVEFURV9JTklUSUFMSVpJTkc7CisgICAgICAgIF92aXNpYmxlUGFnZUlkID0gMDsKKyAgICAgICAgX2luc3RhbGxQYWdlID0gUEFHRV9MT0FESU5HOworICAgICAgICBfaHJGaW5hbCA9IGhySG9zdEluaXRpYWxpemF0aW9uOworCisgICAgICAgIF9kb3duZ3JhZGluZ090aGVyVmVyc2lvbiA9IEZBTFNFOworICAgICAgICBfcmVzdGFydFJlc3VsdCA9IEJPT1RTVFJBUFBFUl9BUFBMWV9SRVNUQVJUX05PTkU7CisgICAgICAgIF9yZXN0YXJ0UmVxdWlyZWQgPSBGQUxTRTsKKyAgICAgICAgX2FsbG93UmVzdGFydCA9IEZBTFNFOworCisgICAgICAgIF9zdXBwcmVzc0Rvd25ncmFkZUZhaWx1cmUgPSBGQUxTRTsKKyAgICAgICAgX3N1cHByZXNzUmVwYWlyID0gRkFMU0U7CisgICAgICAgIF9tb2RpZnlpbmcgPSBGQUxTRTsKKyAgICAgICAgX3VwZ3JhZGluZyA9IEZBTFNFOworCisgICAgICAgIF9vdmVycmlkYWJsZVZhcmlhYmxlcyA9IG51bGxwdHI7CisgICAgICAgIF90YXNrYmFyTGlzdCA9IG51bGxwdHI7CisgICAgICAgIF90YXNrYmFyQnV0dG9uQ3JlYXRlZE1lc3NhZ2UgPSBVSU5UX01BWDsKKyAgICAgICAgX3Rhc2tiYXJCdXR0b25PSyA9IEZBTFNFOworICAgICAgICBfc2hvd2luZ0ludGVybmFsVUlUaGlzUGFja2FnZSA9IEZBTFNFOworICAgICAgICBfdHJpZWRUb0xhdW5jaEVsZXZhdGVkID0gRkFMU0U7CisKKyAgICAgICAgX3N1cHByZXNzUGFpbnQgPSBGQUxTRTsKKworICAgICAgICBwRW5naW5lLT5BZGRSZWYoKTsKKyAgICAgICAgX2VuZ2luZSA9IHBFbmdpbmU7CisKKyAgICAgICAgX2hCQUZNb2R1bGUgPSBudWxscHRyOworICAgICAgICBfYmFGdW5jdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisKKyAgICAvLworICAgIC8vIERlc3RydWN0b3IgLSByZWxlYXNlIG1lbWJlciB2YXJpYWJsZXMuCisgICAgLy8KKyAgICB+UHl0aG9uQm9vdHN0cmFwcGVyQXBwbGljYXRpb24oKSB7CisgICAgICAgIEFzc2VydFN6KCE6OklzV2luZG93KF9oV25kKSwgIldpbmRvdyBzaG91bGQgaGF2ZSBiZWVuIGRlc3Ryb3llZCBiZWZvcmUgZGVzdHJ1Y3Rvci4iKTsKKyAgICAgICAgQXNzZXJ0U3ooIV90aGVtZSwgIlRoZW1lIHNob3VsZCBoYXZlIGJlZW4gcmVsZWFzZWQgYmVmb3JlIGRlc3RydWN0b3IuIik7CisKKyAgICAgICAgUmVsZWFzZU9iamVjdChfdGFza2Jhckxpc3QpOworICAgICAgICBSZWxlYXNlRGljdChfb3ZlcnJpZGFibGVWYXJpYWJsZXMpOworICAgICAgICBSZWxlYXNlU3RyKF9mYWlsZWRNZXNzYWdlKTsKKyAgICAgICAgUmVsZWFzZVN0cihfY29uZmlybUNsb3NlTWVzc2FnZSk7CisgICAgICAgIEJhbENvbmRpdGlvbnNVbmluaXRpYWxpemUoJl9jb25kaXRpb25zKTsKKyAgICAgICAgQmFsSW5mb1VuaW5pdGlhbGl6ZSgmX2J1bmRsZSk7CisgICAgICAgIExvY0ZyZWUoX3dpeExvYyk7CisKKyAgICAgICAgUmVsZWFzZVN0cihfbGFuZ3VhZ2UpOworICAgICAgICBSZWxlYXNlU3RyKF9uZXh0UGFja2FnZUFmdGVyUmVzdGFydCk7CisgICAgICAgIFJlbGVhc2VOdWxsT2JqZWN0KF9lbmdpbmUpOworCisgICAgICAgIGlmIChfaEJBRk1vZHVsZSkgeworICAgICAgICAgICAgOjpGcmVlTGlicmFyeShfaEJBRk1vZHVsZSk7CisgICAgICAgICAgICBfaEJBRk1vZHVsZSA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgSE1PRFVMRSBfaE1vZHVsZTsKKyAgICBCT09UU1RSQVBQRVJfQ09NTUFORCBfY29tbWFuZDsKKyAgICBJQm9vdHN0cmFwcGVyRW5naW5lKiBfZW5naW5lOworICAgIEJPT1RTVFJBUFBFUl9BQ1RJT04gX3BsYW5uZWRBY3Rpb247CisKKyAgICBMUFdTVFIgX25leHRQYWNrYWdlQWZ0ZXJSZXN0YXJ0OworCisgICAgV0lYX0xPQ0FMSVpBVElPTiogX3dpeExvYzsKKyAgICBCQUxfSU5GT19CVU5ETEUgX2J1bmRsZTsKKyAgICBCQUxfQ09ORElUSU9OUyBfY29uZGl0aW9uczsKKyAgICBMUFdTVFIgX2ZhaWxlZE1lc3NhZ2U7CisgICAgTFBXU1RSIF9jb25maXJtQ2xvc2VNZXNzYWdlOworCisgICAgTFBXU1RSIF9sYW5ndWFnZTsKKyAgICBUSEVNRSogX3RoZW1lOworICAgIERXT1JEIF9wYWdlSWRzW2NvdW50b2YoUEFHRV9OQU1FUyldOworICAgIEhBTkRMRSBfaFVpVGhyZWFkOworICAgIEJPT0wgX3JlZ2lzdGVyZWQ7CisgICAgSFdORCBfaFduZDsKKworICAgIFBZQkFfU1RBVEUgX3N0YXRlOworICAgIEhSRVNVTFQgX2hyRmluYWw7CisgICAgRFdPUkQgX3Zpc2libGVQYWdlSWQ7CisgICAgUEFHRSBfaW5zdGFsbFBhZ2U7CisKKyAgICBCT09MIF9zdGFydGVkRXhlY3V0aW9uOworICAgIERXT1JEIF9jYWxjdWxhdGVkQ2FjaGVQcm9ncmVzczsKKyAgICBEV09SRCBfY2FsY3VsYXRlZEV4ZWN1dGVQcm9ncmVzczsKKworICAgIEJPT0wgX2Rvd25ncmFkaW5nT3RoZXJWZXJzaW9uOworICAgIEJPT1RTVFJBUFBFUl9BUFBMWV9SRVNUQVJUIF9yZXN0YXJ0UmVzdWx0OworICAgIEJPT0wgX3Jlc3RhcnRSZXF1aXJlZDsKKyAgICBCT09MIF9hbGxvd1Jlc3RhcnQ7CisKKyAgICBCT09MIF9zdXBwcmVzc0Rvd25ncmFkZUZhaWx1cmU7CisgICAgQk9PTCBfc3VwcHJlc3NSZXBhaXI7CisgICAgQk9PTCBfbW9kaWZ5aW5nOworICAgIEJPT0wgX3VwZ3JhZGluZzsKKworICAgIGludCBfY3J0SW5zdGFsbGVkVG9rZW47CisKKyAgICBTVFJJTkdESUNUX0hBTkRMRSBfb3ZlcnJpZGFibGVWYXJpYWJsZXM7CisKKyAgICBJVGFza2Jhckxpc3QzKiBfdGFza2Jhckxpc3Q7CisgICAgVUlOVCBfdGFza2JhckJ1dHRvbkNyZWF0ZWRNZXNzYWdlOworICAgIEJPT0wgX3Rhc2tiYXJCdXR0b25PSzsKKyAgICBCT09MIF9zaG93aW5nSW50ZXJuYWxVSVRoaXNQYWNrYWdlOworICAgIEJPT0wgX3RyaWVkVG9MYXVuY2hFbGV2YXRlZDsKKworICAgIEJPT0wgX3N1cHByZXNzUGFpbnQ7CisKKyAgICBITU9EVUxFIF9oQkFGTW9kdWxlOworICAgIElCb290c3RyYXBwZXJCQUZ1bmN0aW9uKiBfYmFGdW5jdGlvbjsKK307CisKKy8vCisvLyBDcmVhdGVCb290c3RyYXBwZXJBcHBsaWNhdGlvbiAtIGNyZWF0ZXMgYSBuZXcgSUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uIG9iamVjdC4KKy8vCitIUkVTVUxUIENyZWF0ZUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uKAorICAgIF9faW4gSE1PRFVMRSBoTW9kdWxlLAorICAgIF9faW4gQk9PTCBmUHJlcmVxLAorICAgIF9faW4gSFJFU1VMVCBockhvc3RJbml0aWFsaXphdGlvbiwKKyAgICBfX2luIElCb290c3RyYXBwZXJFbmdpbmUqIHBFbmdpbmUsCisgICAgX19pbiBjb25zdCBCT09UU1RSQVBQRVJfQ09NTUFORCogcENvbW1hbmQsCisgICAgX19vdXQgSUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uKiogcHBBcHBsaWNhdGlvbgorICAgICkgeworICAgIEhSRVNVTFQgaHIgPSBTX09LOworCisgICAgaWYgKGZQcmVyZXEpIHsKKyAgICAgICAgaHIgPSBFX0lOVkFMSURBUkc7CisgICAgICAgIEV4aXRXaXRoTGFzdEVycm9yKGhyLCAiRmFpbGVkIHRvIGNyZWF0ZSBVSSB0aHJlYWQuIik7CisgICAgfQorCisgICAgUHl0aG9uQm9vdHN0cmFwcGVyQXBwbGljYXRpb24qIHBBcHBsaWNhdGlvbiA9IG51bGxwdHI7CisKKyAgICBwQXBwbGljYXRpb24gPSBuZXcgUHl0aG9uQm9vdHN0cmFwcGVyQXBwbGljYXRpb24oaE1vZHVsZSwgZlByZXJlcSwgaHJIb3N0SW5pdGlhbGl6YXRpb24sIHBFbmdpbmUsIHBDb21tYW5kKTsKKyAgICBFeGl0T25OdWxsKHBBcHBsaWNhdGlvbiwgaHIsIEVfT1VUT0ZNRU1PUlksICJGYWlsZWQgdG8gY3JlYXRlIG5ldyBzdGFuZGFyZCBib290c3RyYXBwZXIgYXBwbGljYXRpb24gb2JqZWN0LiIpOworCisgICAgKnBwQXBwbGljYXRpb24gPSBwQXBwbGljYXRpb247CisgICAgcEFwcGxpY2F0aW9uID0gbnVsbHB0cjsKKworTEV4aXQ6CisgICAgUmVsZWFzZU9iamVjdChwQXBwbGljYXRpb24pOworICAgIHJldHVybiBocjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3BjaC5jcHAgYi9Ub29scy9tc2kvYnVuZGxlL2Jvb3RzdHJhcC9wY2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOWYzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL2Jvb3RzdHJhcC9wY2guY3BwCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlICJwY2guaCIKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3BjaC5oIGIvVG9vbHMvbXNpL2J1bmRsZS9ib290c3RyYXAvcGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2NmZhNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3BjaC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gPGNvcHlyaWdodCBmaWxlPSJwcmVjb21wLmgiIGNvbXBhbnk9Ik91dGVyY3VydmUgRm91bmRhdGlvbiI+CisvLyAgIENvcHlyaWdodCAoYykgMjAwNCwgT3V0ZXJjdXJ2ZSBGb3VuZGF0aW9uLgorLy8gICBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1pY3Jvc29mdCBSZWNpcHJvY2FsIExpY2Vuc2UgKE1TLVJMKS4KKy8vICAgVGhlIGxpY2Vuc2UgYW5kIGZ1cnRoZXIgY29weXJpZ2h0IHRleHQgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlCisvLyAgIExJQ0VOU0UuVFhUIGF0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorLy8gPC9jb3B5cmlnaHQ+CisvLyAKKy8vIDxzdW1tYXJ5PgorLy8gICAgUHJlY29tcGlsZWQgaGVhZGVyIGZvciBzdGFuZGFyZCBib290c3RyYXBwZXIgYXBwbGljYXRpb24uCisvLyA8L3N1bW1hcnk+CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8Z2RpcGx1cy5oPgorI2luY2x1ZGUgPFV4dGhlbWUuaD4KKyNpbmNsdWRlIDxtc2lxdWVyeS5oPgorI2luY2x1ZGUgPG9iamJhc2UuaD4KKyNpbmNsdWRlIDxzaGxvYmouaD4KKyNpbmNsdWRlIDxzaGx3YXBpLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3Ryc2FmZS5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHZlcnNpb25oZWxwZXJzLmg+CisKKyNpbmNsdWRlICJkdXRpbC5oIgorI2luY2x1ZGUgIm1lbXV0aWwuaCIKKyNpbmNsdWRlICJkaWN0dXRpbC5oIgorI2luY2x1ZGUgImRpcnV0aWwuaCIKKyNpbmNsdWRlICJmaWxldXRpbC5oIgorI2luY2x1ZGUgImxvY3V0aWwuaCIKKyNpbmNsdWRlICJsb2d1dGlsLmgiCisjaW5jbHVkZSAicGF0aHV0aWwuaCIKKyNpbmNsdWRlICJyZXNydXRpbC5oIgorI2luY2x1ZGUgInNoZWx1dGlsLmgiCisjaW5jbHVkZSAic3RydXRpbC5oIgorI2luY2x1ZGUgInRobXV0aWwuaCIKKyNpbmNsdWRlICJ1cml1dGlsLmgiCisjaW5jbHVkZSAieG1sdXRpbC5oIgorCisjaW5jbHVkZSAiSUJvb3RzdHJhcHBlckVuZ2luZS5oIgorI2luY2x1ZGUgIklCb290c3RyYXBwZXJBcHBsaWNhdGlvbi5oIgorCisjaW5jbHVkZSAiQmFsQmFzZUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiYmFsaW5mby5oIgorI2luY2x1ZGUgImJhbGNvbmRpdGlvbi5oIgorCitIUkVTVUxUIENyZWF0ZUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uKAorICAgIF9faW4gSE1PRFVMRSBoTW9kdWxlLAorICAgIF9faW4gQk9PTCBmUHJlcmVxLAorICAgIF9faW4gSFJFU1VMVCBockhvc3RJbml0aWFsaXphdGlvbiwKKyAgICBfX2luIElCb290c3RyYXBwZXJFbmdpbmUqIHBFbmdpbmUsCisgICAgX19pbiBjb25zdCBCT09UU1RSQVBQRVJfQ09NTUFORCogcENvbW1hbmQsCisgICAgX19vdXQgSUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uKiogcHBBcHBsaWNhdGlvbgorKTsKKworI2luY2x1ZGUgIklCb290c3RyYXBwZXJCQUZ1bmN0aW9uLmgiCisKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3B5dGhvbmJhLmNwcCBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3B5dGhvbmJhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2U0NWFkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9ib290c3RyYXAvcHl0aG9uYmEuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gPGNvcHlyaWdodCBmaWxlPSJ3aXhzdGRiYS5jcHAiIGNvbXBhbnk9Ik91dGVyY3VydmUgRm91bmRhdGlvbiI+CisvLyAgIENvcHlyaWdodCAoYykgMjAwNCwgT3V0ZXJjdXJ2ZSBGb3VuZGF0aW9uLgorLy8gICBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1pY3Jvc29mdCBSZWNpcHJvY2FsIExpY2Vuc2UgKE1TLVJMKS4KKy8vICAgVGhlIGxpY2Vuc2UgYW5kIGZ1cnRoZXIgY29weXJpZ2h0IHRleHQgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlCisvLyAgIExJQ0VOU0UuVFhUIGF0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorLy8gPC9jb3B5cmlnaHQ+CisvLworLy8gPHN1bW1hcnk+CisvLyBTZXR1cCBjaGFpbmVyL2Jvb3RzdHJhcHBlciBzdGFuZGFyZCBVSSBmb3IgV2lYIHRvb2xzZXQuCisvLyA8L3N1bW1hcnk+CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2luY2x1ZGUgInBjaC5oIgorCitzdGF0aWMgSElOU1RBTkNFIHZoSW5zdGFuY2UgPSBOVUxMOworCitleHRlcm4gIkMiIEJPT0wgV0lOQVBJIERsbE1haW4oCisgICAgSU4gSElOU1RBTkNFIGhJbnN0YW5jZSwKKyAgICBJTiBEV09SRCBkd1JlYXNvbiwKKyAgICBJTiBMUFZPSUQgLyogcHZSZXNlcnZlZCAqLworICAgICkKK3sKKyAgICBzd2l0Y2goZHdSZWFzb24pCisgICAgeworICAgIGNhc2UgRExMX1BST0NFU1NfQVRUQUNIOgorICAgICAgICA6OkRpc2FibGVUaHJlYWRMaWJyYXJ5Q2FsbHMoaEluc3RhbmNlKTsKKyAgICAgICAgdmhJbnN0YW5jZSA9IGhJbnN0YW5jZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERMTF9QUk9DRVNTX0RFVEFDSDoKKyAgICAgICAgdmhJbnN0YW5jZSA9IE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCisKK2V4dGVybiAiQyIgSFJFU1VMVCBXSU5BUEkgQm9vdHN0cmFwcGVyQXBwbGljYXRpb25DcmVhdGUoCisgICAgX19pbiBJQm9vdHN0cmFwcGVyRW5naW5lKiBwRW5naW5lLAorICAgIF9faW4gY29uc3QgQk9PVFNUUkFQUEVSX0NPTU1BTkQqIHBDb21tYW5kLAorICAgIF9fb3V0IElCb290c3RyYXBwZXJBcHBsaWNhdGlvbioqIHBwQXBwbGljYXRpb24KKyAgICApCit7CisgICAgSFJFU1VMVCBociA9IFNfT0s7CisKKyAgICBCYWxJbml0aWFsaXplKHBFbmdpbmUpOworCisgICAgaHIgPSBDcmVhdGVCb290c3RyYXBwZXJBcHBsaWNhdGlvbih2aEluc3RhbmNlLCBGQUxTRSwgU19PSywgcEVuZ2luZSwgcENvbW1hbmQsIHBwQXBwbGljYXRpb24pOworICAgIEJhbEV4aXRPbkZhaWx1cmUoaHIsICJGYWlsZWQgdG8gY3JlYXRlIGJvb3RzdHJhcHBlciBhcHBsaWNhdGlvbiBpbnRlcmZhY2UuIik7CisKK0xFeGl0OgorICAgIHJldHVybiBocjsKK30KKworCitleHRlcm4gIkMiIHZvaWQgV0lOQVBJIEJvb3RzdHJhcHBlckFwcGxpY2F0aW9uRGVzdHJveSgpCit7CisgICAgQmFsVW5pbml0aWFsaXplKCk7Cit9CisKKworZXh0ZXJuICJDIiBIUkVTVUxUIFdJTkFQSSBNYmFQcmVyZXFCb290c3RyYXBwZXJBcHBsaWNhdGlvbkNyZWF0ZSgKKyAgICBfX2luIEhSRVNVTFQgaHJIb3N0SW5pdGlhbGl6YXRpb24sCisgICAgX19pbiBJQm9vdHN0cmFwcGVyRW5naW5lKiBwRW5naW5lLAorICAgIF9faW4gY29uc3QgQk9PVFNUUkFQUEVSX0NPTU1BTkQqIHBDb21tYW5kLAorICAgIF9fb3V0IElCb290c3RyYXBwZXJBcHBsaWNhdGlvbioqIHBwQXBwbGljYXRpb24KKyAgICApCit7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KKworCitleHRlcm4gIkMiIHZvaWQgV0lOQVBJIE1iYVByZXJlcUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uRGVzdHJveSgpCit7IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3B5dGhvbmJhLmRlZiBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3B5dGhvbmJhLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWIzZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9ib290c3RyYXAvcHl0aG9uYmEuZGVmCkBAIC0wLDAgKzEsMTggQEAKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IDxjb3B5cmlnaHQgZmlsZT0id2l4c3RkYmEuZGVmIiBjb21wYW55PSJPdXRlcmN1cnZlIEZvdW5kYXRpb24iPgorOyAgIENvcHlyaWdodCAoYykgMjAwNCwgT3V0ZXJjdXJ2ZSBGb3VuZGF0aW9uLgorOyAgIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTWljcm9zb2Z0IFJlY2lwcm9jYWwgTGljZW5zZSAoTVMtUkwpLgorOyAgIFRoZSBsaWNlbnNlIGFuZCBmdXJ0aGVyIGNvcHlyaWdodCB0ZXh0IGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZQorOyAgIExJQ0VOU0UuVFhUIGF0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorOyA8L2NvcHlyaWdodD4KKzsgCis7IDxzdW1tYXJ5PgorOyAgICBXaVggU3RhbmRhcmQgQm9vdHN0cmFwcGVyIEFwcGxpY2F0aW9uIERMTCBlbnRyeSBwb2ludHMuCis7IDwvc3VtbWFyeT4KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VYUE9SVFMKKyAgICBCb290c3RyYXBwZXJBcHBsaWNhdGlvbkNyZWF0ZQorICAgIEJvb3RzdHJhcHBlckFwcGxpY2F0aW9uRGVzdHJveQorICAgIE1iYVByZXJlcUJvb3RzdHJhcHBlckFwcGxpY2F0aW9uQ3JlYXRlCisgICAgTWJhUHJlcmVxQm9vdHN0cmFwcGVyQXBwbGljYXRpb25EZXN0cm95CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL2Jvb3RzdHJhcC9weXRob25iYS5zbG4gYi9Ub29scy9tc2kvYnVuZGxlL2Jvb3RzdHJhcC9weXRob25iYS5zbG4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0M2ZlZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3B5dGhvbmJhLnNsbgpAQCAtMCwwICsxLDIyIEBACivvu78KK01pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDEyLjAwCisjIFZpc3VhbCBTdHVkaW8gMjAxMworVmlzdWFsU3R1ZGlvVmVyc2lvbiA9IDEyLjAuMzA1MDEuMAorTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24gPSAxMC4wLjQwMjE5LjEKK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uYmEiLCAicHl0aG9uYmEudmN4cHJvaiIsICJ7N0EwOUIxMzItQjNFRS00OTlCLUE3MDAtQTRCMjE1N0ZFQTNEfSIKK0VuZFByb2plY3QKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzIKKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzIKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwb3N0U29sdXRpb24KKwkJezdBMDlCMTMyLUIzRUUtNDk5Qi1BNzAwLUE0QjIxNTdGRUEzRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzIKKwkJezdBMDlCMTMyLUIzRUUtNDk5Qi1BNzAwLUE0QjIxNTdGRUEzRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyCisJCXs3QTA5QjEzMi1CM0VFLTQ5OUItQTcwMC1BNEIyMTU3RkVBM0R9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgorCQl7N0EwOUIxMzItQjNFRS00OTlCLUE3MDAtQTRCMjE1N0ZFQTNEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCisJRW5kR2xvYmFsU2VjdGlvbgorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCisJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQorCUVuZEdsb2JhbFNlY3Rpb24KK0VuZEdsb2JhbApkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9ib290c3RyYXAvcHl0aG9uYmEudmN4cHJvaiBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3B5dGhvbmJhLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkMzk1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3B5dGhvbmJhLnZjeHByb2oKQEAgLTAsMCArMSw2OSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgPGNvcHlyaWdodCBmaWxlPSJ3aXhzdGRiYS52Y3hwcm9qIiBjb21wYW55PSJPdXRlcmN1cnZlIEZvdW5kYXRpb24iPgorICAgIENvcHlyaWdodCAoYykgMjAwNCwgT3V0ZXJjdXJ2ZSBGb3VuZGF0aW9uLgorICAgIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTWljcm9zb2Z0IFJlY2lwcm9jYWwgTGljZW5zZSAoTVMtUkwpLgorICAgIFRoZSBsaWNlbnNlIGFuZCBmdXJ0aGVyIGNvcHlyaWdodCB0ZXh0IGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZQorICAgIExJQ0VOU0UuVFhUIGF0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorICA8L2NvcHlyaWdodD4KKy0tPgorPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPENvbmZpZ3VyYXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKScgPT0gJyciPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+CisgICAgPFBsYXRmb3JtIENvbmRpdGlvbj0iJyQoUGxhdGZvcm0pJyA9PSAnJyI+V2luMzI8L1BsYXRmb3JtPgorICAgIDxQbGF0Zm9ybVRvb2xzZXQgQ29uZGl0aW9uPSInJChQbGF0Zm9ybVRvb2xzZXQpJyA9PSAnJyBhbmQgJyQoVkNUYXJnZXRzUGF0aDE0KScgIT0gJyciPnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KKyAgICA8UGxhdGZvcm1Ub29sc2V0IENvbmRpdGlvbj0iJyQoUGxhdGZvcm1Ub29sc2V0KScgPT0gJycgYW5kICckKFZDVGFyZ2V0c1BhdGgxMiknICE9ICcnIj52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+CisgICAgPFByb2plY3RHdWlkPns3QTA5QjEzMi1CM0VFLTQ5OUItQTcwMC1BNEIyMTU3RkVBM0R9PC9Qcm9qZWN0R3VpZD4KKyAgICA8VGFyZ2V0TmFtZT5QeXRob25CQTwvVGFyZ2V0TmFtZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8SW1wb3J0IFByb2plY3Q9Ii4uXC4uXHdpeC5wcm9wcyIgLz4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPEludERpcj4kKFB5X0ludERpcilcJChDb25maWd1cmF0aW9uKV8kKFBsYXRmb3JtKV9TZXR1cFxCb290c3RyYXBcPC9JbnREaXI+CisgICAgPE91dERpcj4kKEludERpcik8L091dERpcj4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fQ1JUX1NURElPX0xFR0FDWV9XSURFX1NQRUNJRklFUlM9MTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFdpeEluc3RhbGxQYXRoKXNka1xpbmM8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+VXNlPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlckZpbGU+cGNoLmg8L1ByZWNvbXBpbGVkSGVhZGVyRmlsZT4KKyAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmNvbWN0bDMyLmxpYjtnZGlwbHVzLmxpYjttc2ltZzMyLmxpYjtzaGx3YXBpLmxpYjt3aW5pbmV0LmxpYjtkdXRpbC5saWI7YmFsdXRpbC5saWI7dmVyc2lvbi5saWI7dXh0aGVtZS5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoUGxhdGZvcm1Ub29sc2V0KScgPT0gJ3YxNDAnIj4kKFdpeEluc3RhbGxQYXRoKXNka1x2czIwMTVcbGliXHg4NjwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoUGxhdGZvcm1Ub29sc2V0KScgPT0gJ3YxMjAnIj4kKFdpeEluc3RhbGxQYXRoKXNka1x2czIwMTNcbGliXHg4NjwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxNb2R1bGVEZWZpbml0aW9uRmlsZT5weXRob25iYS5kZWY8L01vZHVsZURlZmluaXRpb25GaWxlPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJz09J0RlYnVnJyI+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iUHl0aG9uQm9vdHN0cmFwcGVyQXBwbGljYXRpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icHl0aG9uYmEuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icGNoLmNwcCI+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+Q3JlYXRlPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSJwY2guaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InJlc291cmNlLmgiIC8+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxOb25lIEluY2x1ZGU9InB5dGhvbmJhLmRlZiIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9ib290c3RyYXAvcmVzb3VyY2UuaCBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjMDNjMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvYm9vdHN0cmFwL3Jlc291cmNlLmgKQEAgLTAsMCArMSwyNSBAQAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyA8Y29weXJpZ2h0IGZpbGU9InJlc291cmNlLmgiIGNvbXBhbnk9Ik91dGVyY3VydmUgRm91bmRhdGlvbiI+CisvLyAgIENvcHlyaWdodCAoYykgMjAwNCwgT3V0ZXJjdXJ2ZSBGb3VuZGF0aW9uLgorLy8gICBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1pY3Jvc29mdCBSZWNpcHJvY2FsIExpY2Vuc2UgKE1TLVJMKS4KKy8vICAgVGhlIGxpY2Vuc2UgYW5kIGZ1cnRoZXIgY29weXJpZ2h0IHRleHQgY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlCisvLyAgIExJQ0VOU0UuVFhUIGF0IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZGlzdHJpYnV0aW9uLgorLy8gPC9jb3B5cmlnaHQ+CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy97e05PX0RFUEVOREVOQ0lFU319CisvLyBNaWNyb3NvZnQgVmlzdWFsIEMrKyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLgorLy8KKyNkZWZpbmUgSURDX1NUQVRJQyAgICAgICAgICAgICAgICAgICAgICAtMQorCisKKy8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBvYmplY3RzCisvLyAKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisjaWZuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKyNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNFX1ZBTFVFICAgICAgICAxMDIKKyNkZWZpbmUgX0FQU19ORVhUX0NPTU1BTkRfVkFMVUUgICAgICAgICA0MDAwMQorI2RlZmluZSBfQVBTX05FWFRfQ09OVFJPTF9WQUxVRSAgICAgICAgIDEwMDMKKyNkZWZpbmUgX0FQU19ORVhUX1NZTUVEX1ZBTFVFICAgICAgICAgICAxMDEKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL2J1bmRsZS5pY28gYi9Ub29scy9tc2kvYnVuZGxlL2J1bmRsZS5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFiNjI5ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvYnVuZGxlLmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL2J1bmRsZS50YXJnZXRzIGIvVG9vbHMvbXNpL2J1bmRsZS9idW5kbGUudGFyZ2V0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWVmZjNiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9idW5kbGUudGFyZ2V0cwpAQCAtMCwwICsxLDExNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiIFRyZWF0QXNMb2NhbFByb3BlcnR5PSJEb3dubG9hZFVybCI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxTY2hlbWFWZXJzaW9uPjIuMDwvU2NoZW1hVmVyc2lvbj4KKyAgICAgICAgPE91dHB1dFR5cGU+QnVuZGxlPC9PdXRwdXRUeXBlPgorICAgICAgICAKKyAgICAgICAgPEJvb3RzdHJhcENvbmZpZ3VyYXRpb24gQ29uZGl0aW9uPSInJChCb290c3RyYXBDb25maWd1cmF0aW9uKScgPT0gJyciPlJlbGVhc2U8L0Jvb3RzdHJhcENvbmZpZ3VyYXRpb24+CisgICAgICAgIDxMaW5rZXJTdXBwcmVzc1NwZWNpZmljV2FybmluZ3M+MTEzMjsxMTM1OzExNDA8L0xpbmtlclN1cHByZXNzU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgICAgPE91dHB1dE5hbWUgQ29uZGl0aW9uPSIkKEJ1aWxkRm9yUmVsZWFzZSkiPiQoT3V0cHV0TmFtZSktJChQeXRob25WZXJzaW9uKTwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dE5hbWUgQ29uZGl0aW9uPSIhJChCdWlsZEZvclJlbGVhc2UpIj4kKE91dHB1dE5hbWUpLSQoTWFqb3JWZXJzaW9uTnVtYmVyKS4kKE1pbm9yVmVyc2lvbk51bWJlcikuJChNaWNyb1ZlcnNpb25OdW1iZXIpLiQoUmV2aXNpb25OdW1iZXIpPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0TmFtZSBDb25kaXRpb249IiQoUGxhdGZvcm0pID09ICd4NjQnIj4kKE91dHB1dE5hbWUpLWFtZDY0PC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0TmFtZSBDb25kaXRpb249IickKE91dHB1dFN1ZmZpeCknICE9ICcnIj4kKE91dHB1dE5hbWUpLSQoT3V0cHV0U3VmZml4KTwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKScgPT0gJ0RlYnVnJyI+JChPdXRwdXROYW1lKS1kPC9PdXRwdXROYW1lPgorICAgICAgICA8VGFyZ2V0TmFtZT4kKE91dHB1dE5hbWUpPC9UYXJnZXROYW1lPgorCisgICAgICAgIDxPdXRwdXRQYXRoPiQoT3V0cHV0UGF0aCllbi11c1w8L091dHB1dFBhdGg+CisgICAgICAgIDxPdXREaXI+JChPdXRwdXRQYXRoKTwvT3V0RGlyPgorICAgICAgICAKKyAgICAgICAgPCEtLSBTZWUgVG9vbHMvbXNpL2J1aWxkcmVsZWFzZS5iYXQgZm9yIGhlbHAgb24gY29uZmlndXJpbmcgdGhlIGRvd25sb2FkIFVSTCAtLT4KKyAgICAgICAgPERvd25sb2FkVXJsIENvbmRpdGlvbj0iJyQoRG93bmxvYWRVcmwpJyA9PSAnJyBhbmQgJyQoRG93bmxvYWRVcmxCYXNlKScgIT0gJyciPiQoRG93bmxvYWRVcmxCYXNlLlRyaW1FbmQoYC9gKSkve3ZlcnNpb259L3thcmNofXtyZWxlYXNlbmFtZX0ve21zaX08L0Rvd25sb2FkVXJsPgorICAgICAgICA8RGVmaW5lQ29uc3RhbnRzIENvbmRpdGlvbj0iJyQoRG93bmxvYWRVcmwpJyAhPSAnJyI+JChEZWZpbmVDb25zdGFudHMpO0Rvd25sb2FkVXJsPSQoRG93bmxvYWRVcmwuUmVwbGFjZShge3ZlcnNpb259YCwgYCQoTWFqb3JWZXJzaW9uTnVtYmVyKS4kKE1pbm9yVmVyc2lvbk51bWJlcikuJChNaWNyb1ZlcnNpb25OdW1iZXIpYCkuUmVwbGFjZShge2FyY2h9YCwgYCQoQXJjaE5hbWUpYCkuUmVwbGFjZShge3JlbGVhc2VuYW1lfWAsIGAkKFJlbGVhc2VMZXZlbE5hbWUpYCkuUmVwbGFjZShge21zaX1gLCBgezJ9YCkpPC9EZWZpbmVDb25zdGFudHM+CisgICAgICAgIDxEZWZpbmVDb25zdGFudHMgQ29uZGl0aW9uPSInJChEb3dubG9hZFVybCknID09ICcnIj4kKERlZmluZUNvbnN0YW50cyk7RG93bmxvYWRVcmw9ezJ9PC9EZWZpbmVDb25zdGFudHM+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIAorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxXaXhFeHRlbnNpb24gSW5jbHVkZT0iV2l4VXRpbEV4dGVuc2lvbiI+CisgICAgICAgICAgICA8SGludFBhdGg+V2l4VXRpbEV4dGVuc2lvbjwvSGludFBhdGg+CisgICAgICAgICAgICA8TmFtZT5XaXhVdGlsRXh0ZW5zaW9uPC9OYW1lPgorICAgICAgICA8L1dpeEV4dGVuc2lvbj4KKyAgICAgICAgPFdpeEV4dGVuc2lvbiBJbmNsdWRlPSJXaXhEZXBlbmRlbmN5RXh0ZW5zaW9uIj4KKyAgICAgICAgICAgIDxIaW50UGF0aD5XaXhEZXBlbmRlbmN5RXh0ZW5zaW9uPC9IaW50UGF0aD4KKyAgICAgICAgICAgIDxOYW1lPldpeERlcGVuZGVuY3lFeHRlbnNpb248L05hbWU+CisgICAgICAgIDwvV2l4RXh0ZW5zaW9uPgorICAgICAgICA8V2l4RXh0ZW5zaW9uIEluY2x1ZGU9IldpeEJhbEV4dGVuc2lvbiI+CisgICAgICAgICAgICA8SGludFBhdGg+V2l4QmFsRXh0ZW5zaW9uPC9IaW50UGF0aD4KKyAgICAgICAgICAgIDxOYW1lPldpeEJhbEV4dGVuc2lvbjwvTmFtZT4KKyAgICAgICAgPC9XaXhFeHRlbnNpb24+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iYnVuZGxlLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0icGFja2FnZWdyb3Vwc1wqLnd4cyIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8Q29udGVudCBJbmNsdWRlPSJEZWZhdWx0LnRobSIgLz4KKyAgICAgICAgPENvbnRlbnQgSW5jbHVkZT0iRGVmYXVsdC53eGwiIC8+CisgICAgICAgIDxDb250ZW50IEluY2x1ZGU9IlNpZGVCYXIucG5nIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxFbWJlZGRlZFJlc291cmNlIEluY2x1ZGU9ImJ1bmRsZS53eGwiIC8+CisgICAgICAgIDxXeGxUZW1wbGF0ZSBJbmNsdWRlPSIqX2VuLVVTLnd4bF90ZW1wbGF0ZSIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8TGlua2VyQmluZElucHV0UGF0aHMgSW5jbHVkZT0iJChPdXRwdXRQYXRoKSI+CisgICAgICAgICAgICA8QmluZE5hbWU+PC9CaW5kTmFtZT4KKyAgICAgICAgPC9MaW5rZXJCaW5kSW5wdXRQYXRocz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICAKKyAgICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICAgICAgPFBhY2thZ2U+CisgICAgICAgICAgICA8UHJvcGVydGllcz5CdWlsZEZvclJlbGVhc2U9JChCdWlsZEZvclJlbGVhc2UpPC9Qcm9wZXJ0aWVzPgorICAgICAgICA8L1BhY2thZ2U+CisgICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxQYWNrYWdlIEluY2x1ZGU9Ii4uXGNvcmVcY29yZSoud2l4cHJvaiIgLz4KKyAgICAgICAgPFBhY2thZ2UgSW5jbHVkZT0iLi5cZGV2XGRldioud2l4cHJvaiIgLz4KKyAgICAgICAgPFBhY2thZ2UgSW5jbHVkZT0iLi5cZG9jXGRvYyoud2l4cHJvaiIgLz4KKyAgICAgICAgPFBhY2thZ2UgSW5jbHVkZT0iLi5cZXhlXGV4ZSoud2l4cHJvaiIgLz4KKyAgICAgICAgPFBhY2thZ2UgSW5jbHVkZT0iLi5cbGliXGxpYioud2l4cHJvaiIgLz4KKyAgICAgICAgPFBhY2thZ2UgSW5jbHVkZT0iLi5ccGF0aFxwYXRoKi53aXhwcm9qIiAvPgorICAgICAgICA8UGFja2FnZSBJbmNsdWRlPSIuLlxwaXBccGlwKi53aXhwcm9qIiAvPgorICAgICAgICA8UGFja2FnZSBJbmNsdWRlPSIuLlx0Y2x0a1x0Y2x0ayoud2l4cHJvaiIgLz4KKyAgICAgICAgPFBhY2thZ2UgSW5jbHVkZT0iLi5cdGVzdFx0ZXN0Ki53aXhwcm9qIiAvPgorICAgICAgICA8UGFja2FnZSBJbmNsdWRlPSIuLlx0b29sc1x0b29scyoud2l4cHJvaiIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICAKKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPEJ1aWxkUGFja2FnZXNUYXJnZXRzPkJ1aWxkPC9CdWlsZFBhY2thZ2VzVGFyZ2V0cz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgCisgICAgPFRhcmdldCBOYW1lPSJfU2V0UmVidWlsZFRhcmdldCIgQmVmb3JlVGFyZ2V0cz0iQmVmb3JlUmVidWlsZCI+CisgICAgICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICAgICAgPEJ1aWxkUGFja2FnZXNUYXJnZXRzPlJlYnVpbGQ8L0J1aWxkUGFja2FnZXNUYXJnZXRzPgorICAgICAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPC9UYXJnZXQ+CisgICAgCisgICAgPFRhcmdldCBOYW1lPSJCdWlsZFBhY2thZ2VzIiBCZWZvcmVUYXJnZXRzPSJCZWZvcmVCdWlsZCIgQ29uZGl0aW9uPSInJChSZWJ1aWxkQWxsKScgIT0gJ2ZhbHNlJyI+CisgICAgICAgIDxNU0J1aWxkIFByb2plY3RzPSJAKFBhY2thZ2UpIiBUYXJnZXRzPSIkKEJ1aWxkUGFja2FnZXNUYXJnZXRzKSIgQnVpbGRJblBhcmFsbGVsPSJ0cnVlIiAvPgorICAgIDwvVGFyZ2V0PgorICAgIAorICAgIDxUYXJnZXQgTmFtZT0iQnVpbGRMYXVuY2hlciIgQmVmb3JlVGFyZ2V0cz0iQmVmb3JlQnVpbGQiIENvbmRpdGlvbj0iJyQoUmVidWlsZEFsbCknICE9ICdmYWxzZSciPgorICAgICAgICA8IS0tCisgICAgICAgIEJ1aWxkIHRoZSBsYXVuY2hlciBNU0kgdXNpbmcgRXhlYyByYXRoZXIgdGhhbiBNU0J1aWxkCisgICAgICAgIEFsc28sIG5ldmVyIHVzZSB0aGUgdGVzdCBtYXJrZXIgZm9yIHRoZSBsYXVuY2hlci4gSXQncyBnb2luZyB0byBjb3JydXB0IHRoaW5ncyBhbnl3YXksIHNvIHdlJ2xsCisgICAgICAgIGp1c3QgZGlzYWJsZSBpdCBieSBkZWZhdWx0LgorICAgICAgICAgLS0+CisgICAgICAgIDxFeGVjIENvbW1hbmQ9J21zYnVpbGQgLi5cbGF1bmNoZXJcbGF1bmNoZXIud2l4cHJvaiAvcDpQbGF0Zm9ybT14ODYgL3A6UmVsZWFzZVVyaT0iJChSZWxlYXNlVXJpKSIgL3A6T3V0cHV0UGF0aD0iJChCdWlsZFBhdGguVHJpbUVuZChgXGApKSIgL3A6T3V0cHV0U3VmZml4PSQoUGxhdGZvcm0pIC9wOkJ1aWxkRm9yUmVsZWFzZT0kKEJ1aWxkRm9yUmVsZWFzZSkgL3A6VXNlVGVzdE1hcmtlcj1mYWxzZScKKyAgICAgICAgICAgICAgQ29udGludWVPbkVycm9yPSJmYWxzZSIgLz4KKyAgICA8L1RhcmdldD4KKyAgICAKKyAgICA8VGFyZ2V0IE5hbWU9IkJ1aWxkQm9vdHN0cmFwQXBwbGljYXRpb24iIEJlZm9yZVRhcmdldHM9IkJlZm9yZUJ1aWxkIj4KKyAgICAgICAgPE1lc3NhZ2UgVGV4dD0iQnVpbGRpbmcgYm9vdHN0cmFwIGFwcCIgSW1wb3J0YW5jZT0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxNU0J1aWxkIFByb2plY3RzPSJib290c3RyYXBccHl0aG9uYmEudmN4cHJvaiIKKyAgICAgICAgICAgICAgICAgVGFyZ2V0cz0iQnVpbGQ7R2V0TmF0aXZlVGFyZ2V0UGF0aCIKKyAgICAgICAgICAgICAgICAgVXNlUmVzdWx0c0NhY2hlPSJ0cnVlIgorICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzPSJDb25maWd1cmF0aW9uPSQoQm9vdHN0cmFwQ29uZmlndXJhdGlvbik7UGxhdGZvcm09V2luMzIiPgorICAgICAgICAgICAgPE91dHB1dCBUYXNrUGFyYW1ldGVyPSJUYXJnZXRPdXRwdXRzIiBQcm9wZXJ0eU5hbWU9IkJvb3RzdHJhcEFwcFBhdGgiIC8+CisgICAgICAgIDwvTVNCdWlsZD4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICAgICAgPERlZmluZUNvbnN0YW50cz4kKERlZmluZUNvbnN0YW50cyk7Qm9vdHN0cmFwQXBwPSQoQm9vdHN0cmFwQXBwUGF0aCk8L0RlZmluZUNvbnN0YW50cz4KKyAgICAgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDwvVGFyZ2V0PgorICAgIAorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9idW5kbGUud3hsIGIvVG9vbHMvbXNpL2J1bmRsZS9idW5kbGUud3hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YTY1YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL2J1bmRsZS53eGwKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFdpeExvY2FsaXphdGlvbiBDdWx0dXJlPSJlbi11cyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvbG9jYWxpemF0aW9uIj4KKyAgPFN0cmluZyBJZD0iQ1JURGVzY3JpcHRpb24iPkMgUnVudGltZSBVcGRhdGUgKEtCMjk5OTIyNik8L1N0cmluZz4KKyAgPFN0cmluZyBJZD0iQ29tcGlsZUFsbERlc2NyaXB0aW9uIj5QcmVjb21waWxpbmcgc3RhbmRhcmQgbGlicmFyeTwvU3RyaW5nPgorICA8U3RyaW5nIElkPSJDb21waWxlQWxsT0Rlc2NyaXB0aW9uIj5QcmVjb21waWxpbmcgc3RhbmRhcmQgbGlicmFyeSAoLU8pPC9TdHJpbmc+CisgIDxTdHJpbmcgSWQ9IkNvbXBpbGVBbGxPT0Rlc2NyaXB0aW9uIj5QcmVjb21waWxpbmcgc3RhbmRhcmQgbGlicmFyeSAoLU9PKTwvU3RyaW5nPgorPC9XaXhMb2NhbGl6YXRpb24+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL2J1bmRsZS53eHMgYi9Ub29scy9tc2kvYnVuZGxlL2J1bmRsZS53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzMDdlMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvYnVuZGxlLnd4cwpAQCAtMCwwICsxLDExMSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIgorICAgICB4bWxuczpiYWw9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4L0JhbEV4dGVuc2lvbiI+CisgIDxCdW5kbGUgTmFtZT0iIShsb2MuRnVsbFByb2R1Y3ROYW1lKSIKKyAgICAgICAgICBVcGdyYWRlQ29kZT0iJCh2YXIuQ29yZVVwZ3JhZGVDb2RlKSIKKyAgICAgICAgICBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIKKyAgICAgICAgICBJY29uU291cmNlRmlsZT0iYnVuZGxlLmljbyIKKyAgICAgICAgICBNYW51ZmFjdHVyZXI9IiEobG9jLk1hbnVmYWN0dXJlcikiCisgICAgICAgICAgQWJvdXRVcmw9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy8iCisgICAgICAgICAgRGlzYWJsZU1vZGlmeT0iYnV0dG9uIgorICAgICAgICAgIENvbXByZXNzZWQ9Im5vIj4KKyAgICA8Qm9vdHN0cmFwcGVyQXBwbGljYXRpb24gSWQ9IlB5dGhvbkJBIiBTb3VyY2VGaWxlPSIkKHZhci5Cb290c3RyYXBBcHApIj4KKyAgICAgICAgPFBheWxvYWQgQ29tcHJlc3NlZD0neWVzJyBTb3VyY2VGaWxlPSdEZWZhdWx0LnRobScgLz4KKyAgICAgICAgPFBheWxvYWQgQ29tcHJlc3NlZD0neWVzJyBTb3VyY2VGaWxlPSdEZWZhdWx0Lnd4bCcgLz4KKyAgICAgICAgPFBheWxvYWQgQ29tcHJlc3NlZD0neWVzJyBTb3VyY2VGaWxlPSdTaWRlQmFyLnBuZycgLz4KKyAgICA8L0Jvb3RzdHJhcHBlckFwcGxpY2F0aW9uPgorCisgICAgPCEtLSBNYXkgYmUgc2V0IHRvICJSZW1vdmluZyIgb3IgIlJlcGFpcmluZyIgLS0+CisgICAgPFZhcmlhYmxlIE5hbWU9IkFjdGlvbkxpa2VJbnN0YWxsaW5nIiBWYWx1ZT0iSW5zdGFsbGluZyIgLz4KKyAgICA8IS0tIE1heSBiZSBzZXQgdG8gIlVuaW5zdGFsbGF0aW9uIiBvciAiUmVwYWlyIiAtLT4KKyAgICA8VmFyaWFibGUgTmFtZT0iQWN0aW9uTGlrZUluc3RhbGxhdGlvbiIgVmFsdWU9IlNldHVwIiAvPgorCisgICAgPFZhcmlhYmxlIE5hbWU9IlNob3J0VmVyc2lvbiIgVmFsdWU9IiQodmFyLk1ham9yVmVyc2lvbk51bWJlcikuJCh2YXIuTWlub3JWZXJzaW9uTnVtYmVyKSIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iU2hvcnRWZXJzaW9uTm9Eb3QiIFZhbHVlPSIkKHZhci5NYWpvclZlcnNpb25OdW1iZXIpJCh2YXIuTWlub3JWZXJzaW9uTnVtYmVyKSIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iV2luVmVyIiBWYWx1ZT0iJCh2YXIuTWFqb3JWZXJzaW9uTnVtYmVyKS4kKHZhci5NaW5vclZlcnNpb25OdW1iZXIpJCh2YXIuUHlBcmNoRXh0KSQodmFyLlB5VGVzdEV4dCkiIC8+CisgICAgPFZhcmlhYmxlIE5hbWU9IldpblZlck5vRG90IiBWYWx1ZT0iJCh2YXIuTWFqb3JWZXJzaW9uTnVtYmVyKSQodmFyLk1pbm9yVmVyc2lvbk51bWJlcikkKHZhci5QeUFyY2hFeHQpJCh2YXIuUHlUZXN0RXh0KSIgLz4KKworICAgIDxWYXJpYWJsZSBOYW1lPSJJbnN0YWxsQWxsVXNlcnMiIFZhbHVlPSIwIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8P2lmICIkKHZhci5QeVRlc3RFeHQpIj0iIiA/PgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbnN0YWxsTGF1bmNoZXJBbGxVc2VycyIgVmFsdWU9IjEiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDw/ZWxzZSA/PgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbnN0YWxsTGF1bmNoZXJBbGxVc2VycyIgVmFsdWU9IjAiIC8+CisgICAgPD9lbmRpZiA/PgorICAgIDxWYXJpYWJsZSBOYW1lPSJUYXJnZXREaXIiIFZhbHVlPSIiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDw/aWYgJCh2YXIuUGxhdGZvcm0pfj0ieDY0IiA/PgorICAgIDxWYXJpYWJsZSBOYW1lPSJEZWZhdWx0QWxsVXNlcnNUYXJnZXREaXIiIFZhbHVlPSJbUHJvZ3JhbUZpbGVzNjRGb2xkZXJdUHl0aG9uW1dpblZlck5vRG90XSIgYmFsOk92ZXJyaWRhYmxlPSJ5ZXMiIC8+CisgICAgPFZhcmlhYmxlIE5hbWU9IlRhcmdldFBsYXRmb3JtIiBWYWx1ZT0ieDY0IiAvPgorICAgIDw/ZWxzZSA/PgorICAgIDxWYXJpYWJsZSBOYW1lPSJEZWZhdWx0QWxsVXNlcnNUYXJnZXREaXIiIFZhbHVlPSJbUHJvZ3JhbUZpbGVzRm9sZGVyXVB5dGhvbltXaW5WZXJOb0RvdF0iIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJUYXJnZXRQbGF0Zm9ybSIgVmFsdWU9Ing4NiIgLz4KKyAgICA8P2VuZGlmID8+CisgICAgPFZhcmlhYmxlIE5hbWU9IkRlZmF1bHRKdXN0Rm9yTWVUYXJnZXREaXIiIFZhbHVlPSJbTG9jYWxBcHBEYXRhRm9sZGVyXVByb2dyYW1zXFB5dGhvblxQeXRob25bV2luVmVyTm9Eb3RdIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5IiBWYWx1ZT0iU29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcW1dpblZlcl1cSW5zdGFsbGVkRmVhdHVyZXMiIC8+CisgICAgPFZhcmlhYmxlIE5hbWU9IlRhcmdldERpclJlZ2lzdHJ5S2V5IiBWYWx1ZT0iU29mdHdhcmVcUHl0aG9uXFB5dGhvbkNvcmVcW1dpblZlcl1cSW5zdGFsbFBhdGgiIC8+CisgICAgCisgICAgPCEtLQorICAgIEFuIGVtcHR5IHN0cmluZyB3aWxsIHVzZSB0aGUgb3RoZXIgZGVmYXVsdHMgYmFzZWQgb24gSW5zdGFsbEFsbFVzZXJzCisgICAgKGFuZCBzd2l0Y2ggZHluYW1pY2FsbHkgaW4gdGhlIFVJKS4gVG8gZ2V0IHRoZSBvbGQgZGVmYXVsdCwgcGFzcworICAgIHRoaXMgcHJvcGVydHkgb24gdGhlIGNvbW1hbmQgbGluZToKKyAgICAgICAgRGVmYXVsdEN1c3RvbVRhcmdldERpcj1bV2luZG93c1ZvbHVtZV1QeXRob25bU2hvcnRWZXJzaW9uTm9Eb3RdCisgICAgLS0+CisgICAgPFZhcmlhYmxlIE5hbWU9IkRlZmF1bHRDdXN0b21UYXJnZXREaXIiIFZhbHVlPSIiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorCisgICAgPFZhcmlhYmxlIE5hbWU9Ikluc3RhbGxBbGxVc2Vyc1N0YXRlIiBWYWx1ZT0iZW5hYmxlZCIgYmFsOk92ZXJyaWRhYmxlPSJ5ZXMiIC8+CisgICAgPD9pZiAiJCh2YXIuUHlUZXN0RXh0KSI9IiIgPz4KKyAgICA8VmFyaWFibGUgTmFtZT0iSW5zdGFsbExhdW5jaGVyQWxsVXNlcnNTdGF0ZSIgVmFsdWU9ImVuYWJsZWQiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDw/ZWxzZSA/PgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbnN0YWxsTGF1bmNoZXJBbGxVc2Vyc1N0YXRlIiBWYWx1ZT0iZGlzYWJsZSIgYmFsOk92ZXJyaWRhYmxlPSJ5ZXMiIC8+CisgICAgPD9lbmRpZiA/PgorICAgIDxWYXJpYWJsZSBOYW1lPSJDdXN0b21JbnN0YWxsTGF1bmNoZXJBbGxVc2Vyc1N0YXRlIiBWYWx1ZT0iW0luc3RhbGxMYXVuY2hlckFsbFVzZXJzU3RhdGVdIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJUYXJnZXREaXJTdGF0ZSIgVmFsdWU9ImVuYWJsZWQiIC8+CisgICAgPFZhcmlhYmxlIE5hbWU9IkN1c3RvbUJyb3dzZUJ1dHRvblN0YXRlIiBWYWx1ZT0iZW5hYmxlZCIgLz4KKworICAgIDxWYXJpYWJsZSBOYW1lPSJJbmNsdWRlX2NvcmUiIFZhbHVlPSIxIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbmNsdWRlX2V4ZSIgVmFsdWU9IjEiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbmNsdWRlX2RldiIgVmFsdWU9IjEiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbmNsdWRlX2xpYiIgVmFsdWU9IjEiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbmNsdWRlX3Rlc3QiIFZhbHVlPSIxIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iSW5jbHVkZV9kb2MiIFZhbHVlPSIxIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iSW5jbHVkZV90b29scyIgVmFsdWU9IjEiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbmNsdWRlX3RjbHRrIiBWYWx1ZT0iMSIgYmFsOk92ZXJyaWRhYmxlPSJ5ZXMiIC8+CisgICAgPFZhcmlhYmxlIE5hbWU9IkluY2x1ZGVfcGlwIiBWYWx1ZT0iMSIgYmFsOk92ZXJyaWRhYmxlPSJ5ZXMiIC8+CisgICAgPD9pZiAiJCh2YXIuUHlUZXN0RXh0KSI9IiIgPz4KKyAgICA8VmFyaWFibGUgTmFtZT0iSW5jbHVkZV9sYXVuY2hlciIgVmFsdWU9IjEiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbmNsdWRlX2xhdW5jaGVyU3RhdGUiIFZhbHVlPSJlbmFibGVkIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8P2Vsc2UgPz4KKyAgICA8VmFyaWFibGUgTmFtZT0iSW5jbHVkZV9sYXVuY2hlciIgVmFsdWU9IjAiIC8+CisgICAgPFZhcmlhYmxlIE5hbWU9IkluY2x1ZGVfbGF1bmNoZXJTdGF0ZSIgVmFsdWU9ImRpc2FibGUiIC8+CisgICAgPD9lbmRpZiA/PgorICAgIDxWYXJpYWJsZSBOYW1lPSJJbmNsdWRlX3N5bWJvbHMiIFZhbHVlPSIwIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iSW5jbHVkZV9kZWJ1ZyIgVmFsdWU9IjAiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIAorICAgIDxWYXJpYWJsZSBOYW1lPSJMYXVuY2hlck9ubHkiIFZhbHVlPSIwIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iRGV0ZWN0ZWRMYXVuY2hlciIgVmFsdWU9IjAiIC8+CisgICAgPFZhcmlhYmxlIE5hbWU9IkRldGVjdGVkT2xkTGF1bmNoZXIiIFZhbHVlPSIwIiAvPgorICAgIAorICAgIDxWYXJpYWJsZSBOYW1lPSJBc3NvY2lhdGVGaWxlcyIgVmFsdWU9IjEiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIDxWYXJpYWJsZSBOYW1lPSJTaG9ydGN1dHMiIFZhbHVlPSIxIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iUHJlcGVuZFBhdGgiIFZhbHVlPSIwIiBiYWw6T3ZlcnJpZGFibGU9InllcyIgLz4KKyAgICA8VmFyaWFibGUgTmFtZT0iQ29tcGlsZUFsbCIgVmFsdWU9IjAiIGJhbDpPdmVycmlkYWJsZT0ieWVzIiAvPgorICAgIAorICAgIDxWYXJpYWJsZSBOYW1lPSJTaW1wbGVJbnN0YWxsIiBWYWx1ZT0iMCIgYmFsOk92ZXJyaWRhYmxlPSJ5ZXMiIC8+CisgICAgPFZhcmlhYmxlIE5hbWU9IlNpbXBsZUluc3RhbGxEZXNjcmlwdGlvbiIgVmFsdWU9IiIgYmFsOk92ZXJyaWRhYmxlPSJ5ZXMiIC8+CisgICAgCisgICAgPENoYWluIFBhcmFsbGVsQ2FjaGU9InllcyI+CisgICAgICA8UGFja2FnZUdyb3VwUmVmIElkPSJjcnQiIC8+CisgICAgICA8UGFja2FnZUdyb3VwUmVmIElkPSJjb3JlIiAvPgorICAgICAgPFBhY2thZ2VHcm91cFJlZiBJZD0iZGV2IiAvPgorICAgICAgPFBhY2thZ2VHcm91cFJlZiBJZD0iZXhlIiAvPgorICAgICAgPFBhY2thZ2VHcm91cFJlZiBJZD0ibGliIiAvPgorICAgICAgPFBhY2thZ2VHcm91cFJlZiBJZD0idGVzdCIgLz4KKyAgICAgIDxQYWNrYWdlR3JvdXBSZWYgSWQ9ImRvYyIgLz4KKyAgICAgIDxQYWNrYWdlR3JvdXBSZWYgSWQ9InRvb2xzIiAvPgorICAgICAgPFBhY2thZ2VHcm91cFJlZiBJZD0idGNsdGsiIC8+CisgICAgICA8UGFja2FnZUdyb3VwUmVmIElkPSJsYXVuY2hlciIgLz4KKyAgICAgIDxQYWNrYWdlR3JvdXBSZWYgSWQ9InBpcCIgLz4KKyAgICAgIDxQYWNrYWdlR3JvdXBSZWYgSWQ9InBhY2thZ2VpbnN0YWxsIiAvPgorICAgICAgPFBhY2thZ2VHcm91cFJlZiBJZD0icG9zdGluc3RhbGwiIC8+CisgICAgPC9DaGFpbj4KKyAgPC9CdW5kbGU+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvZnVsbC53aXhwcm9qIGIvVG9vbHMvbXNpL2J1bmRsZS9mdWxsLndpeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiZGQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvZnVsbC53aXhwcm9qCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPnszRTIwNEFERC0yMzhELTREMTAtODUyQy00Rjg1OTMyNUM4Mzl9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPE91dHB1dE5hbWU+cHl0aG9uPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0U3VmZml4PmZ1bGw8L091dHB1dFN1ZmZpeD4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS5wcm9wcyIgLz4KKworICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8RGVmaW5lQ29uc3RhbnRzPgorICAgICAgICAgICAgJChEZWZpbmVDb25zdGFudHMpOworICAgICAgICAgICAgQ29tcHJlc3NNU0k9eWVzOworICAgICAgICAgICAgQ29tcHJlc3NQREI9eWVzOworICAgICAgICAgICAgQ29tcHJlc3NNU0lfRD15ZXM7CisgICAgICAgIDwvRGVmaW5lQ29uc3RhbnRzPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICAKKyAgICA8SW1wb3J0IFByb2plY3Q9ImJ1bmRsZS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9jb3JlLnd4cyBiL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9jb3JlLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjNkMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2NvcmUud3hzCkBAIC0wLDAgKzEsNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPEZyYWdtZW50PgorICAgICAgICA8UGFja2FnZUdyb3VwIElkPSJjb3JlIj4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJjb3JlX0FsbFVzZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0iY29yZS5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSSkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbnN0YWxsQWxsVXNlcnMgYW5kIChJbmNsdWRlX2NvcmUgb3IgSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0iY29yZV9BbGxVc2Vyc19wZGIiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJjb3JlX3BkYi5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc1BEQikiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbnN0YWxsQWxsVXNlcnMgYW5kIChJbmNsdWRlX2NvcmUgb3IgSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIEluY2x1ZGVfc3ltYm9scyBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJjb3JlX0FsbFVzZXJzX2QiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJjb3JlX2QubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0lfRCkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbnN0YWxsQWxsVXNlcnMgYW5kIChJbmNsdWRlX2NvcmUgb3IgSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIEluY2x1ZGVfZGVidWcgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisKKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJjb3JlX0p1c3RGb3JNZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9ImNvcmUubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgSW5zdGFsbEFsbFVzZXJzIGFuZCAoSW5jbHVkZV9jb3JlIG9yIEluY2x1ZGVfZXhlIG9yIEluY2x1ZGVfbGF1bmNoZXIgb3IgSW5jbHVkZV9waXApIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9ImNvcmVfSnVzdEZvck1lX3BkYiIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9ImNvcmVfcGRiLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzUERCKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgKEluY2x1ZGVfY29yZSBvciBJbmNsdWRlX2V4ZSBvciBJbmNsdWRlX2xhdW5jaGVyIG9yIEluY2x1ZGVfcGlwKSBhbmQgSW5jbHVkZV9zeW1ib2xzIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9ImNvcmVfSnVzdEZvck1lX2QiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJjb3JlX2QubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0lfRCkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Im5vdCBJbnN0YWxsQWxsVXNlcnMgYW5kIChJbmNsdWRlX2NvcmUgb3IgSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIEluY2x1ZGVfZGVidWcgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgIDwvUGFja2FnZUdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvY3J0Lnd4cyBiL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9jcnQud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDA0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvY3J0Lnd4cwpAQCAtMCwwICsxLDQ5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPFBhY2thZ2VHcm91cCBJZD0iY3J0Ij4KKyAgICAgICAgICAgIDxQYWNrYWdlR3JvdXBSZWYgSWQ9ImNydF8xNC4wX3Y2LjAiIC8+CisgICAgICAgICAgICA8UGFja2FnZUdyb3VwUmVmIElkPSJjcnRfMTQuMF92Ni4xIiAvPgorICAgICAgICAgICAgPFBhY2thZ2VHcm91cFJlZiBJZD0iY3J0XzE0LjBfdjYuMiIgLz4KKyAgICAgICAgICAgIDxQYWNrYWdlR3JvdXBSZWYgSWQ9ImNydF8xNC4wX3Y2LjMiIC8+CisgICAgICAgIDwvUGFja2FnZUdyb3VwPgorICAgIDwvRnJhZ21lbnQ+CisKKyAgICA8P2ZvcmVhY2ggdmVyIGluIHY2LjA7djYuMTt2Ni4yO3Y2LjMgPz4KKyAgICA8P2lmICIkKHZhci52ZXIpIiA9ICJ2Ni4wIiA/PgorICAgIDw/ZGVmaW5lIG1zdXZlcj02LjAgPz4KKyAgICA8P2Vsc2VpZiAiJCh2YXIudmVyKSIgPSAidjYuMSIgPz4KKyAgICA8P2RlZmluZSBtc3V2ZXI9Ni4xID8+CisgICAgPD9lbHNlaWYgIiQodmFyLnZlcikiID0gInY2LjIiID8+CisgICAgPD9kZWZpbmUgbXN1dmVyPTgtUlQgPz4KKyAgICA8P2Vsc2VpZiAiJCh2YXIudmVyKSIgPSAidjYuMyIgPz4KKyAgICA8P2RlZmluZSBtc3V2ZXI9OC4xID8+CisgICAgPD9lbHNlID8+CisgICAgPD9lcnJvciB1bmtub3duIHZlcnNpb24gJCh2YXIudmVyKSA/PgorICAgIDw/ZW5kaWYgPz4KKworICAgIDxGcmFnbWVudD4KKyAgICAgICAgPFBhY2thZ2VHcm91cCBJZD0iY3J0XzE0LjBfJCh2YXIudmVyKSI+CisgICAgICAgICAgICA8TXN1UGFja2FnZSBJZD0iY3J0XzE0LjBfJCh2YXIudmVyKV94ODYiCisgICAgICAgICAgICAgICAgICAgICAgICBLQj0iMjk5OTIyNiIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9IiEoYmluZHBhdGgucmVkaXN0KVxXaW5kb3dzJCh2YXIubXN1dmVyKS1LQjI5OTkyMjYteDg2Lm1zdSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlOYW1lPSIhKGxvYy5DUlREZXNjcmlwdGlvbikiCisgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbj0iIShsb2MuQ1JURGVzY3JpcHRpb24pIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Im5vdCBDUlRJbnN0YWxsZWQgYW5kIFZlcnNpb25OVCA9ICQodmFyLnZlcikgYW5kIG5vdCBWZXJzaW9uTlQ2NCBhbmQgKEluY2x1ZGVfY29yZSBvciBJbmNsdWRlX2V4ZSBvciBJbmNsdWRlX2xhdW5jaGVyIG9yIEluY2x1ZGVfcGlwKSBhbmQgbm90IExhdW5jaGVyT25seSIgLz4KKworICAgICAgICAgICAgPE1zdVBhY2thZ2UgSWQ9ImNydF8xNC4wXyQodmFyLnZlcilfeDY0IgorICAgICAgICAgICAgICAgICAgICAgICAgS0I9IjI5OTkyMjYiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSIhKGJpbmRwYXRoLnJlZGlzdClcV2luZG93cyQodmFyLm1zdXZlciktS0IyOTk5MjI2LXg2NC5tc3UiCisgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TmFtZT0iIShsb2MuQ1JURGVzY3JpcHRpb24pIgorICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb249IiEobG9jLkNSVERlc2NyaXB0aW9uKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgQ1JUSW5zdGFsbGVkIGFuZCBWZXJzaW9uTlQ2NCA9ICQodmFyLnZlcikgYW5kIChJbmNsdWRlX2NvcmUgb3IgSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIG5vdCBMYXVuY2hlck9ubHkiIC8+CisgICAgICAgIDwvUGFja2FnZUdyb3VwPgorICAgIDwvRnJhZ21lbnQ+CisKKyAgICA8P3VuZGVmIG1zdXZlciA/PgorICAgIDw/ZW5kZm9yZWFjaCA/PgorPC9XaXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2Rldi53eHMgYi9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvZGV2Lnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjg0ZGJhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2Rldi53eHMKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxQYWNrYWdlR3JvdXAgSWQ9ImRldiI+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0iZGV2X0FsbFVzZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0iZGV2Lm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Ikluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV9kZXYgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0iZGV2X0FsbFVzZXJzX2QiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJkZXZfZC5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSV9EKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Ikluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV9kZXYgYW5kIEluY2x1ZGVfZGVidWcgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisKKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJkZXZfSnVzdEZvck1lIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0iZGV2Lm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV9kZXYgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0iZGV2X0p1c3RGb3JNZV9kIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0iZGV2X2QubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0lfRCkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Im5vdCBJbnN0YWxsQWxsVXNlcnMgYW5kIEluY2x1ZGVfZGV2IGFuZCBJbmNsdWRlX2RlYnVnIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICA8L1BhY2thZ2VHcm91cD4KKyAgICA8L0ZyYWdtZW50PgorPC9XaXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2RvYy53eHMgYi9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvZG9jLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjM5ZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2RvYy53eHMKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxQYWNrYWdlR3JvdXAgSWQ9ImRvYyI+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0iZG9jX0FsbFVzZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0iZG9jLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGVGZWF0dXJlU2VsZWN0aW9uPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Ikluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV9kb2MgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJkb2NfSnVzdEZvck1lIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0iZG9jLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGVGZWF0dXJlU2VsZWN0aW9uPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV9kb2MgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgIDwvUGFja2FnZUdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvZXhlLnd4cyBiL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9leGUud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDY0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvZXhlLnd4cwpAQCAtMCwwICsxLDY0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPFBhY2thZ2VHcm91cCBJZD0iZXhlIj4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJleGVfQWxsVXNlcnMiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJleGUubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSSkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlRmVhdHVyZVNlbGVjdGlvbj0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0iSW5zdGFsbEFsbFVzZXJzIGFuZCAoSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0iZXhlX0FsbFVzZXJzX3BkYiIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9ImV4ZV9wZGIubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc1BEQikiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0iSW5zdGFsbEFsbFVzZXJzIGFuZCAoSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIEluY2x1ZGVfc3ltYm9scyBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJleGVfQWxsVXNlcnNfZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9ImV4ZV9kLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0lfRCkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0iSW5zdGFsbEFsbFVzZXJzIGFuZCAoSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIEluY2x1ZGVfZGVidWcgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJleGVfSnVzdEZvck1lIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0iZXhlLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSSkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlRmVhdHVyZVNlbGVjdGlvbj0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgKEluY2x1ZGVfZXhlIG9yIEluY2x1ZGVfbGF1bmNoZXIgb3IgSW5jbHVkZV9waXApIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9ImV4ZV9KdXN0Rm9yTWVfcGRiIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0iZXhlX3BkYi5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NQREIpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Im5vdCBJbnN0YWxsQWxsVXNlcnMgYW5kIChJbmNsdWRlX2V4ZSBvciBJbmNsdWRlX2xhdW5jaGVyIG9yIEluY2x1ZGVfcGlwKSBhbmQgSW5jbHVkZV9zeW1ib2xzIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9ImV4ZV9KdXN0Rm9yTWVfZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9ImV4ZV9kLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSV9EKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgSW5zdGFsbEFsbFVzZXJzIGFuZCAoSW5jbHVkZV9leGUgb3IgSW5jbHVkZV9sYXVuY2hlciBvciBJbmNsdWRlX3BpcCkgYW5kIEluY2x1ZGVfZGVidWcgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgIDwvUGFja2FnZUdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvbGF1bmNoZXIud3hzIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2xhdW5jaGVyLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQ0ZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2xhdW5jaGVyLnd4cwpAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPFBhY2thZ2VHcm91cCBJZD0ibGF1bmNoZXIiPgorICAgICAgICAgICAgPCEtLSBUaGUgQWxsIFVzZXJzIGxhdW5jaGVyIGlzIGFsd2F5cyB0aGUgMzItYml0IHZlcnNpb24gLS0+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0ibGF1bmNoZXJfQWxsVXNlcnMiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJsYXVuY2hlci5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSSkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGVGZWF0dXJlU2VsZWN0aW9uPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBQZXJtYW5lbnQ9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpc2libGU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249IihJbnN0YWxsQWxsVXNlcnMgb3IgSW5zdGFsbExhdW5jaGVyQWxsVXNlcnMpIGFuZCBJbmNsdWRlX2xhdW5jaGVyIGFuZCBub3QgRGV0ZWN0ZWRMYXVuY2hlciIgLz4KKworICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9ImxhdW5jaGVyX0p1c3RGb3JNZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9ImxhdW5jaGVyLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlRmVhdHVyZVNlbGVjdGlvbj0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgUGVybWFuZW50PSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBWaXNpYmxlPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgKEluc3RhbGxBbGxVc2VycyBvciBJbnN0YWxsTGF1bmNoZXJBbGxVc2VycykgYW5kIEluY2x1ZGVfbGF1bmNoZXIgYW5kIG5vdCBEZXRlY3RlZExhdW5jaGVyIiAvPgorICAgICAgICA8L1BhY2thZ2VHcm91cD4KKyAgICA8L0ZyYWdtZW50PgorPC9XaXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2xpYi53eHMgYi9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvbGliLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNmYmMwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL2xpYi53eHMKQEAgLTAsMCArMSw2MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxQYWNrYWdlR3JvdXAgSWQ9ImxpYiI+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0ibGliX0FsbFVzZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0ibGliLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Ikluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV9saWIgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0ibGliX0FsbFVzZXJzX3BkYiIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9ImxpYl9wZGIubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NQREIpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0iSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX2xpYiBhbmQgSW5jbHVkZV9zeW1ib2xzIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9ImxpYl9BbGxVc2Vyc19kIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0ibGliX2QubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0lfRCkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbnN0YWxsQWxsVXNlcnMgYW5kIEluY2x1ZGVfbGliIGFuZCBJbmNsdWRlX2RlYnVnIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorCisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0ibGliX0p1c3RGb3JNZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9ImxpYi5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSSkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Im5vdCBJbnN0YWxsQWxsVXNlcnMgYW5kIEluY2x1ZGVfbGliIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9ImxpYl9KdXN0Rm9yTWVfcGRiIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0ibGliX3BkYi5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc1BEQikiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Im5vdCBJbnN0YWxsQWxsVXNlcnMgYW5kIEluY2x1ZGVfbGliIGFuZCBJbmNsdWRlX3N5bWJvbHMgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0ibGliX0p1c3RGb3JNZV9kIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0ibGliX2QubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0lfRCkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Im5vdCBJbnN0YWxsQWxsVXNlcnMgYW5kIEluY2x1ZGVfbGliIGFuZCBJbmNsdWRlX2RlYnVnIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICA8L1BhY2thZ2VHcm91cD4KKyAgICA8L0ZyYWdtZW50PgorPC9XaXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2VpbnN0YWxsLnd4cyBiL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlaW5zdGFsbC53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlN2Q0ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlaW5zdGFsbC53eHMKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxQYWNrYWdlR3JvdXAgSWQ9InBhY2thZ2VpbnN0YWxsIj4KKyAgICAgICAgICAgIDwhLS0KKyAgICAgICAgICAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBpbnN0YWxsaW5nIGEgcGFja2FnZSB1c2luZyBwaXAgYXMgcGFydCBvZiBtYWluIGluc3RhbGwuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEZvciBhIG5ldHdvcmstb25seSBpbnN0YWxsLCByZW1vdmUgdGhlIFBheWxvYWQgZWxlbWVudCBhbmQgY2hhbmdlIHRoZSBpbnN0YWxsCisgICAgICAgICAgICBjb21tYW5kIHRvIHNwZWNpZnkgdGhlIHBhY2thZ2UgYW5kIChvcHRpb25hbGx5KSB2ZXJzaW9uIHNwZWNpZmllci4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPEV4ZVBhY2thZ2UgSWQ9InJlcXVlc3RzIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0icHkuZXhlIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheU5hbWU9IiEobG9jLkNvbXBpbGVBbGxEZXNjcmlwdGlvbikiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29tbWFuZD0nLVtXaW5WZXJdIC1tIHBpcCBpbnN0YWxsIHJlcXVlc3RzLTIuNy4wLXB5Mi5weTMtbm9uZS1hbnkud2hsJworICAgICAgICAgICAgICAgICAgICAgICAgVW5pbnN0YWxsQ29tbWFuZD0nLVtXaW5WZXJdIC1tIHBpcCB1bmluc3RhbGwgLXkgcmVxdWVzdHMnCisgICAgICAgICAgICAgICAgICAgICAgICBWaXRhbD0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbmNsdWRlX3BpcCBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPFBheWxvYWQgU291cmNlRmlsZT0icmVxdWVzdHMtMi43LjAtcHkyLnB5My1ub25lLWFueS53aGwiCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiIC8+CisgICAgICAgICAgICA8L0V4ZVBhY2thZ2U+CisgICAgICAgICAgICAtLT4KKyAgICAgICAgPC9QYWNrYWdlR3JvdXA+CisgICAgPC9GcmFnbWVudD4KKzwvV2l4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9waXAud3hzIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL3BpcC53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxYTZjNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9waXAud3hzCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPEZyYWdtZW50PgorICAgICAgICA8UGFja2FnZUdyb3VwIElkPSJwaXAiPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9InBpcF9BbGxVc2VycyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9InBpcC5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSSkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbnN0YWxsQWxsVXNlcnMgYW5kIEluY2x1ZGVfcGlwIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9InBpcF9KdXN0Rm9yTWUiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJwaXAubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX3BpcCBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgPC9QYWNrYWdlR3JvdXA+CisgICAgPC9GcmFnbWVudD4KKzwvV2l4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy9wb3N0aW5zdGFsbC53eHMgYi9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvcG9zdGluc3RhbGwud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYWI2NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvcG9zdGluc3RhbGwud3hzCkBAIC0wLDAgKzEsODggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPEZyYWdtZW50PgorICAgICAgICA8UGFja2FnZUdyb3VwIElkPSJwb3N0aW5zdGFsbCI+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0icGF0aF9BbGxVc2VycyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9InBhdGgubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0iSW5zdGFsbEFsbFVzZXJzIGFuZCBQcmVwZW5kUGF0aCBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJwYXRoX0p1c3RGb3JNZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9InBhdGgubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgSW5zdGFsbEFsbFVzZXJzIGFuZCBQcmVwZW5kUGF0aCBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPD9kZWZpbmUgQ29tcGlsZUFsbENvbW1hbmQ9LUUgLXMgLVdpICJbVGFyZ2V0RGlyXVxMaWJcY29tcGlsZWFsbC5weSIgLWYgLXggImJhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8cHkyX3xsaWIydG8zXFx0ZXN0c3x2ZW52XFxzY3JpcHRzIiAiW1RhcmdldERpcl1cTGliIj8+CisgICAgICAgICAgICA8RXhlUGFja2FnZSBJZD0iY29tcGlsZWFsbF9BbGxVc2VycyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9InB5LmV4ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlOYW1lPSIhKGxvYy5Db21waWxlQWxsRGVzY3JpcHRpb24pIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbW1hbmQ9Jy1bV2luVmVyXSAkKHZhci5Db21waWxlQWxsQ29tbWFuZCknCisgICAgICAgICAgICAgICAgICAgICAgICBSZXBhaXJDb21tYW5kPSctW1dpblZlcl0gJCh2YXIuQ29tcGlsZUFsbENvbW1hbmQpJworICAgICAgICAgICAgICAgICAgICAgICAgUGVybWFuZW50PSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBWaXRhbD0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbnN0YWxsQWxsVXNlcnMgYW5kIENvbXBpbGVBbGwgYW5kIG5vdCBMYXVuY2hlck9ubHkiIC8+CisgICAgICAgICAgICA8RXhlUGFja2FnZSBJZD0iY29tcGlsZWFsbE9fQWxsVXNlcnMiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJweS5leGUiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TmFtZT0iIShsb2MuQ29tcGlsZUFsbE9EZXNjcmlwdGlvbikiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29tbWFuZD0nLVtXaW5WZXJdIC1PICQodmFyLkNvbXBpbGVBbGxDb21tYW5kKScKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGFpckNvbW1hbmQ9Jy1bV2luVmVyXSAtTyAkKHZhci5Db21waWxlQWxsQ29tbWFuZCknCisgICAgICAgICAgICAgICAgICAgICAgICBQZXJtYW5lbnQ9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlck1hY2hpbmU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpdGFsPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Ikluc3RhbGxBbGxVc2VycyBhbmQgQ29tcGlsZUFsbCBhbmQgbm90IExhdW5jaGVyT25seSIgLz4KKyAgICAgICAgICAgIDxFeGVQYWNrYWdlIElkPSJjb21waWxlYWxsT09fQWxsVXNlcnMiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJweS5leGUiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TmFtZT0iIShsb2MuQ29tcGlsZUFsbE9PRGVzY3JpcHRpb24pIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbW1hbmQ9Jy1bV2luVmVyXSAtT08gJCh2YXIuQ29tcGlsZUFsbENvbW1hbmQpJworICAgICAgICAgICAgICAgICAgICAgICAgUmVwYWlyQ29tbWFuZD0nLVtXaW5WZXJdIC1PTyAkKHZhci5Db21waWxlQWxsQ29tbWFuZCknCisgICAgICAgICAgICAgICAgICAgICAgICBQZXJtYW5lbnQ9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlck1hY2hpbmU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpdGFsPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Ikluc3RhbGxBbGxVc2VycyBhbmQgQ29tcGlsZUFsbCBhbmQgbm90IExhdW5jaGVyT25seSIgLz4KKworICAgICAgICAgICAgPEV4ZVBhY2thZ2UgSWQ9ImNvbXBpbGVhbGxfSnVzdEZvck1lIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0icHkuZXhlIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheU5hbWU9IiEobG9jLkNvbXBpbGVBbGxEZXNjcmlwdGlvbikiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29tbWFuZD0nLVtXaW5WZXJdICQodmFyLkNvbXBpbGVBbGxDb21tYW5kKScKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGFpckNvbW1hbmQ9Jy1bV2luVmVyXSAkKHZhci5Db21waWxlQWxsQ29tbWFuZCknCisgICAgICAgICAgICAgICAgICAgICAgICBQZXJtYW5lbnQ9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgVml0YWw9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgQ29tcGlsZUFsbCBhbmQgbm90IExhdW5jaGVyT25seSIgLz4KKyAgICAgICAgICAgIDxFeGVQYWNrYWdlIElkPSJjb21waWxlYWxsT19KdXN0Rm9yTWUiCisgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VGaWxlPSJweS5leGUiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TmFtZT0iIShsb2MuQ29tcGlsZUFsbE9EZXNjcmlwdGlvbikiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29tbWFuZD0nLVtXaW5WZXJdIC1PICQodmFyLkNvbXBpbGVBbGxDb21tYW5kKScKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGFpckNvbW1hbmQ9Jy1bV2luVmVyXSAtTyAkKHZhci5Db21waWxlQWxsQ29tbWFuZCknCisgICAgICAgICAgICAgICAgICAgICAgICBQZXJtYW5lbnQ9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgVml0YWw9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgQ29tcGlsZUFsbCBhbmQgbm90IExhdW5jaGVyT25seSIgLz4KKyAgICAgICAgICAgIDxFeGVQYWNrYWdlIElkPSJjb21waWxlYWxsT09fSnVzdEZvck1lIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0icHkuZXhlIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheU5hbWU9IiEobG9jLkNvbXBpbGVBbGxPT0Rlc2NyaXB0aW9uKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb21tYW5kPSctW1dpblZlcl0gLU9PICQodmFyLkNvbXBpbGVBbGxDb21tYW5kKScKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlcGFpckNvbW1hbmQ9Jy1bV2luVmVyXSAtT08gJCh2YXIuQ29tcGlsZUFsbENvbW1hbmQpJworICAgICAgICAgICAgICAgICAgICAgICAgUGVybWFuZW50PSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBQZXJNYWNoaW5lPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpdGFsPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Im5vdCBJbnN0YWxsQWxsVXNlcnMgYW5kIENvbXBpbGVBbGwgYW5kIG5vdCBMYXVuY2hlck9ubHkiIC8+CisgICAgICAgIDwvUGFja2FnZUdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvdGNsdGsud3hzIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL3RjbHRrLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDAyOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL3RjbHRrLnd4cwpAQCAtMCwwICsxLDY4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPFBhY2thZ2VHcm91cCBJZD0idGNsdGsiPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9InRjbHRrX0FsbFVzZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idGNsdGsubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlRmVhdHVyZVNlbGVjdGlvbj0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0iSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX3RjbHRrIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9InRjbHRrX0FsbFVzZXJzX3BkYiIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9InRjbHRrX3BkYi5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc1BEQikiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGVGZWF0dXJlU2VsZWN0aW9uPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbnN0YWxsQWxsVXNlcnMgYW5kIEluY2x1ZGVfdGNsdGsgYW5kIEluY2x1ZGVfc3ltYm9scyBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJ0Y2x0a19BbGxVc2Vyc19kIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idGNsdGtfZC5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSV9EKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZUZlYXR1cmVTZWxlY3Rpb249InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Ikluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV90Y2x0ayBhbmQgSW5jbHVkZV9kZWJ1ZyBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKworICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9InRjbHRrX0p1c3RGb3JNZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9InRjbHRrLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlRmVhdHVyZVNlbGVjdGlvbj0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV90Y2x0ayBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJ0Y2x0a19KdXN0Rm9yTWVfcGRiIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idGNsdGtfcGRiLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzUERCKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlRmVhdHVyZVNlbGVjdGlvbj0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV90Y2x0ayBhbmQgSW5jbHVkZV9zeW1ib2xzIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9InRjbHRrX0p1c3RGb3JNZV9kIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idGNsdGtfZC5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSV9EKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlRmVhdHVyZVNlbGVjdGlvbj0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0ibm90IEluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV90Y2x0ayBhbmQgSW5jbHVkZV9kZWJ1ZyBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgPC9QYWNrYWdlR3JvdXA+CisgICAgPC9GcmFnbWVudD4KKzwvV2l4PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy90ZXN0Lnd4cyBiL1Rvb2xzL21zaS9idW5kbGUvcGFja2FnZWdyb3Vwcy90ZXN0Lnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmFjYWVmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL3Rlc3Qud3hzCkBAIC0wLDAgKzEsNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPEZyYWdtZW50PgorICAgICAgICA8UGFja2FnZUdyb3VwIElkPSJ0ZXN0Ij4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJ0ZXN0X0FsbFVzZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idGVzdC5tc2kiCisgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2VkPSIkKHZhci5Db21wcmVzc01TSSkiCisgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFVybD0iJCh2YXIuRG93bmxvYWRVcmwpIgorICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2VQZXJNYWNoaW5lPSJ5ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJJbnN0YWxsQWxsVXNlcnMgYW5kIEluY2x1ZGVfdGVzdCBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJ0ZXN0X0FsbFVzZXJzX3BkYiIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9InRlc3RfcGRiLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzUERCKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvd25sb2FkVXJsPSIkKHZhci5Eb3dubG9hZFVybCkiCisgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVBlck1hY2hpbmU9InllcyIKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxDb25kaXRpb249Ikluc3RhbGxBbGxVc2VycyBhbmQgSW5jbHVkZV90ZXN0IGFuZCBJbmNsdWRlX3N5bWJvbHMgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0idGVzdF9BbGxVc2Vyc19kIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idGVzdF9kLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJX0QpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0iSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX3Rlc3QgYW5kIEluY2x1ZGVfZGVidWcgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisKKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJ0ZXN0X0p1c3RGb3JNZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUZpbGU9InRlc3QubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX3Rlc3QgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0idGVzdF9KdXN0Rm9yTWVfcGRiIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idGVzdF9wZGIubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NQREIpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX3Rlc3QgYW5kIEluY2x1ZGVfc3ltYm9scyBhbmQgbm90IExhdW5jaGVyT25seSI+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9IlRBUkdFVERJUiIgVmFsdWU9IltUYXJnZXREaXJdIiAvPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVkiIFZhbHVlPSJbT3B0aW9uYWxGZWF0dXJlc1JlZ2lzdHJ5S2V5XSIgLz4KKyAgICAgICAgICAgIDwvTXNpUGFja2FnZT4KKyAgICAgICAgICAgIDxNc2lQYWNrYWdlIElkPSJ0ZXN0X0p1c3RGb3JNZV9kIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idGVzdF9kLm1zaSIKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzZWQ9IiQodmFyLkNvbXByZXNzTVNJX0QpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX3Rlc3QgYW5kIEluY2x1ZGVfZGVidWcgYW5kIG5vdCBMYXVuY2hlck9ubHkiPgorICAgICAgICAgICAgICAgIDxNc2lQcm9wZXJ0eSBOYW1lPSJUQVJHRVRESVIiIFZhbHVlPSJbVGFyZ2V0RGlyXSIgLz4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iT1BUSU9OQUxGRUFUVVJFU1JFR0lTVFJZS0VZIiBWYWx1ZT0iW09wdGlvbmFsRmVhdHVyZXNSZWdpc3RyeUtleV0iIC8+CisgICAgICAgICAgICA8L01zaVBhY2thZ2U+CisgICAgICAgIDwvUGFja2FnZUdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL3BhY2thZ2Vncm91cHMvdG9vbHMud3hzIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL3Rvb2xzLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDlhYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9wYWNrYWdlZ3JvdXBzL3Rvb2xzLnd4cwpAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPFBhY2thZ2VHcm91cCBJZD0idG9vbHMiPgorICAgICAgICAgICAgPE1zaVBhY2thZ2UgSWQ9InRvb2xzX0FsbFVzZXJzIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idG9vbHMubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ieWVzIgorICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbENvbmRpdGlvbj0iSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX3Rvb2xzIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8TXNpUGFja2FnZSBJZD0idG9vbHNfSnVzdEZvck1lIgorICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlRmlsZT0idG9vbHMubXNpIgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3NlZD0iJCh2YXIuQ29tcHJlc3NNU0kpIgorICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRVcmw9IiQodmFyLkRvd25sb2FkVXJsKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlUGVyTWFjaGluZT0ibm8iCisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YWxsQ29uZGl0aW9uPSJub3QgSW5zdGFsbEFsbFVzZXJzIGFuZCBJbmNsdWRlX3Rvb2xzIGFuZCBub3QgTGF1bmNoZXJPbmx5Ij4KKyAgICAgICAgICAgICAgICA8TXNpUHJvcGVydHkgTmFtZT0iVEFSR0VURElSIiBWYWx1ZT0iW1RhcmdldERpcl0iIC8+CisgICAgICAgICAgICAgICAgPE1zaVByb3BlcnR5IE5hbWU9Ik9QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWSIgVmFsdWU9IltPcHRpb25hbEZlYXR1cmVzUmVnaXN0cnlLZXldIiAvPgorICAgICAgICAgICAgPC9Nc2lQYWNrYWdlPgorICAgICAgICA8L1BhY2thZ2VHcm91cD4KKyAgICA8L0ZyYWdtZW50PgorPC9XaXg+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2J1bmRsZS9yZWxlYXNlbG9jYWwud2l4cHJvaiBiL1Rvb2xzL21zaS9idW5kbGUvcmVsZWFzZWxvY2FsLndpeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzZGVlNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9idW5kbGUvcmVsZWFzZWxvY2FsLndpeHByb2oKQEAgLTAsMCArMSwyMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+e0ZDRDQzQUM5LTk2OUYtNDlBMS04QUM1LUVEQzI3NTk5RDFFQn08L1Byb2plY3RHdWlkPgorICAgICAgICA8T3V0cHV0TmFtZT5weXRob248L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRTdWZmaXg+PC9PdXRwdXRTdWZmaXg+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisKKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPERlZmluZUNvbnN0YW50cz4KKyAgICAgICAgICAgICQoRGVmaW5lQ29uc3RhbnRzKTsKKyAgICAgICAgICAgIENvbXByZXNzTVNJPXllczsKKyAgICAgICAgICAgIENvbXByZXNzUERCPW5vOworICAgICAgICAgICAgQ29tcHJlc3NNU0lfRD1ubworICAgICAgICA8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgCisgICAgPEltcG9ydCBQcm9qZWN0PSJidW5kbGUudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvYnVuZGxlL3JlbGVhc2V3ZWIud2l4cHJvaiBiL1Rvb2xzL21zaS9idW5kbGUvcmVsZWFzZXdlYi53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MGM3MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvYnVuZGxlL3JlbGVhc2V3ZWIud2l4cHJvagpAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57NzFDREUyMTMtQ0IzOS00QkQ5LUI4OUQtQkJCODc4Njg5MTQ0fTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxPdXRwdXROYW1lPnB5dGhvbjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFN1ZmZpeD53ZWJpbnN0YWxsPC9PdXRwdXRTdWZmaXg+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisKKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPERlZmluZUNvbnN0YW50cz4KKyAgICAgICAgICAgICQoRGVmaW5lQ29uc3RhbnRzKTsKKyAgICAgICAgICAgIENvbXByZXNzTVNJPW5vOworICAgICAgICAgICAgQ29tcHJlc3NQREI9bm87CisgICAgICAgICAgICBDb21wcmVzc01TSV9EPW5vCisgICAgICAgIDwvRGVmaW5lQ29uc3RhbnRzPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICAKKyAgICA8SW1wb3J0IFByb2plY3Q9ImJ1bmRsZS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9idW5kbGUvc25hcHNob3Qud2l4cHJvaiBiL1Rvb2xzL21zaS9idW5kbGUvc25hcHNob3Qud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ1MDQzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2J1bmRsZS9zbmFwc2hvdC53aXhwcm9qCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPns4QTRBMTE2Mi00QkY5LTRGRjYtOUE5OC0zMTVGMDFFNDQ5MzJ9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPE91dHB1dE5hbWU+cHl0aG9uPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0U3VmZml4PjwvT3V0cHV0U3VmZml4PgorICAgIDwvUHJvcGVydHlHcm91cD4KKworICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnByb3BzIiAvPgorCisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxEZWZpbmVDb25zdGFudHMgQ29uZGl0aW9uPSInJChQYWNrKScgIT0gJ3RydWUnIj4KKyAgICAgICAgICAgICQoRGVmaW5lQ29uc3RhbnRzKTtDb21wcmVzc01TST1ubzsKKyAgICAgICAgPC9EZWZpbmVDb25zdGFudHM+CisgICAgICAgIDxEZWZpbmVDb25zdGFudHMgQ29uZGl0aW9uPSInJChQYWNrKScgPT0gJ3RydWUnIj4KKyAgICAgICAgICAgICQoRGVmaW5lQ29uc3RhbnRzKTtDb21wcmVzc01TST15ZXM7CisgICAgICAgIDwvRGVmaW5lQ29uc3RhbnRzPgorICAgICAgICA8RGVmaW5lQ29uc3RhbnRzPgorICAgICAgICAgICAgJChEZWZpbmVDb25zdGFudHMpOworICAgICAgICAgICAgQ29tcHJlc3NQREI9bm87CisgICAgICAgICAgICBDb21wcmVzc01TSV9EPW5vOworICAgICAgICA8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgCisgICAgPEltcG9ydCBQcm9qZWN0PSJidW5kbGUudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvY29tbW9uLnd4cyBiL1Rvb2xzL21zaS9jb21tb24ud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZmFkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvY29tbW9uLnd4cwpAQCAtMCwwICsxLDExNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPFByb3BlcnR5IElkPSJSRUdJU1RSWUtFWSIgVmFsdWU9IlNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCQodmFyLlNob3J0VmVyc2lvbikkKHZhci5QeUFyY2hFeHQpJCh2YXIuUHlUZXN0RXh0KSIgLz4KKyAgICA8L0ZyYWdtZW50PgorICAgIAorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudCBJZD0iT3B0aW9uYWxGZWF0dXJlIiBHdWlkPSIqIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiPgorICAgICAgICAgICAgPENvbmRpdGlvbj5PUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVk8L0NvbmRpdGlvbj4KKyAgICAgICAgICAgIDxSZWdpc3RyeUtleSBSb290PSJIS01VIiBLZXk9IltPUFRJT05BTEZFQVRVUkVTUkVHSVNUUllLRVldIj4KKyAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBUeXBlPSJzdHJpbmciIE5hbWU9IiQodmFyLk9wdGlvbmFsRmVhdHVyZU5hbWUpIiBWYWx1ZT0iJCh2YXIuVmVyc2lvbikiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvUmVnaXN0cnlLZXk+CisgICAgICAgIDwvQ29tcG9uZW50PgorICAgIDwvRnJhZ21lbnQ+CisgICAgCisgICAgPEZyYWdtZW50PgorICAgICAgICA8UHJvcGVydHkgSWQ9IlVwZ3JhZGVUYWJsZSIgVmFsdWU9IjEiIC8+CisgICAgICAgIAorICAgICAgICA8VXBncmFkZSBJZD0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgICAgIDxVcGdyYWRlVmVyc2lvbiBQcm9wZXJ0eT0iRE9XTkdSQURFIiBNaW5pbXVtPSIkKHZhci5WZXJzaW9uKSIgSW5jbHVkZU1pbmltdW09Im5vIiBPbmx5RGV0ZWN0PSJ5ZXMiIC8+CisgICAgICAgICAgICA8VXBncmFkZVZlcnNpb24gUHJvcGVydHk9IlVQR1JBREUiIE1pbmltdW09IiQodmFyLlVwZ3JhZGVNaW5pbXVtVmVyc2lvbikiIEluY2x1ZGVNaW5pbXVtPSJ5ZXMiIE1heGltdW09IiQodmFyLlZlcnNpb24pIiBJbmNsdWRlTWF4aW11bT0ibm8iIC8+CisgICAgICAgIDwvVXBncmFkZT4KKyAgICAgICAgCisgICAgICAgIDw/aWZkZWYgQ29yZVVwZ3JhZGVDb2RlID8+CisgICAgICAgIDw/aWYgJCh2YXIuVXBncmFkZUNvZGUpIT0kKHZhci5Db3JlVXBncmFkZUNvZGUpID8+CisgICAgICAgIDxVcGdyYWRlIElkPSIkKHZhci5Db3JlVXBncmFkZUNvZGUpIj4KKyAgICAgICAgICAgIDxVcGdyYWRlVmVyc2lvbiBQcm9wZXJ0eT0iTUlTU0lOR19DT1JFIiBNaW5pbXVtPSIkKHZhci5WZXJzaW9uKSIgSW5jbHVkZU1pbmltdW09InllcyIgTWF4aW11bT0iJCh2YXIuVmVyc2lvbikiIEluY2x1ZGVNYXhpbXVtPSJ5ZXMiIE9ubHlEZXRlY3Q9InllcyIgLz4KKyAgICAgICAgPC9VcGdyYWRlPgorICAgICAgICA8Q29uZGl0aW9uIE1lc3NhZ2U9IiEobG9jLkluY29ycmVjdENvcmUpIj5JbnN0YWxsZWQgT1IgTk9UIE1JU1NJTkdfQ09SRTwvQ29uZGl0aW9uPgorICAgICAgICA8P2VuZGlmID8+CisgICAgICAgIDw/ZW5kaWYgPz4KKyAgICAgICAgCisgICAgICAgIDxDb25kaXRpb24gTWVzc2FnZT0iIShsb2MuTm9Eb3duZ3JhZGUpIj5JbnN0YWxsZWQgT1IgTk9UIERPV05HUkFERTwvQ29uZGl0aW9uPgorICAgICAgICA8Q29uZGl0aW9uIE1lc3NhZ2U9IiEobG9jLk5vVGFyZ2V0RGlyKSI+SW5zdGFsbGVkIE9SIFRBUkdFVERJUiBPUiBTdXBwcmVzc19UQVJHRVRESVJfQ2hlY2s8L0NvbmRpdGlvbj4KKworICAgICAgICA8SW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZT4KKyAgICAgICAgICAgIDxSZW1vdmVFeGlzdGluZ1Byb2R1Y3RzIEFmdGVyPSJJbnN0YWxsSW5pdGlhbGl6ZSIgT3ZlcnJpZGFibGU9InllcyI+VVBHUkFERTwvUmVtb3ZlRXhpc3RpbmdQcm9kdWN0cz4KKyAgICAgICAgPC9JbnN0YWxsRXhlY3V0ZVNlcXVlbmNlPgorICAgIDwvRnJhZ21lbnQ+CisgICAgCisgICAgPEZyYWdtZW50PgorICAgICAgICA8IS0tIEluY2x1ZGUgYW4gaWNvbiBmb3IgdGhlIFByb2dyYW1zIGFuZCBGZWF0dXJlcyBkaWFsb2cgLS0+CisgICAgICAgIDxJY29uIElkPSJBUlBJY29uIiBTb3VyY2VGaWxlPSIhKGJpbmRwYXRoLnNyYylQQ1xweWNvbi5pY28iIC8+CisgICAgICAgIDxQcm9wZXJ0eSBJZD0iQVJQUFJPRFVDVElDT04iIFZhbHVlPSJBUlBJY29uIiAvPgorICAgICAgICA8UHJvcGVydHkgSWQ9IkFSUE5PTU9ESUZZIiBWYWx1ZT0iMSIgLz4KKyAgICAgICAgPFByb3BlcnR5IElkPSJESVNBQkxFQURWVFNIT1JUQ1VUUyIgVmFsdWU9IjEiIC8+CisgICAgPC9GcmFnbWVudD4KKyAgICAKKyAgICA8RnJhZ21lbnQ+CisgICAgPD9pZmRlZiBJbnN0YWxsRGlyZWN0b3J5R3VpZFNlZWQgPz4KKyAgICAgICAgPERpcmVjdG9yeSBJZD0iVEFSR0VURElSIiBOYW1lPSJTb3VyY2VEaXIiPgorICAgICAgICAgICAgPERpcmVjdG9yeSBJZD0iSW5zdGFsbERpcmVjdG9yeSIgQ29tcG9uZW50R3VpZEdlbmVyYXRpb25TZWVkPSIkKHZhci5JbnN0YWxsRGlyZWN0b3J5R3VpZFNlZWQpIiAvPgorICAgICAgICA8L0RpcmVjdG9yeT4KKyAgICA8P2VuZGlmID8+CisgICAgPC9GcmFnbWVudD4KKyAgICAKKyAgICA8IS0tIFRvcC1sZXZlbCBkaXJlY3RvcmllcyAtLT4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxEaXJlY3RvcnlSZWYgSWQ9Ikluc3RhbGxEaXJlY3RvcnkiPgorICAgICAgICAgICAgPERpcmVjdG9yeSBJZD0iRExMcyIgTmFtZT0iRExMcyIgLz4KKyAgICAgICAgPC9EaXJlY3RvcnlSZWY+CisgICAgPC9GcmFnbWVudD4KKworICAgIDxGcmFnbWVudD4KKyAgICAgICAgPERpcmVjdG9yeVJlZiBJZD0iSW5zdGFsbERpcmVjdG9yeSI+CisgICAgICAgICAgICA8RGlyZWN0b3J5IElkPSJEb2MiIE5hbWU9IkRvYyIgLz4KKyAgICAgICAgPC9EaXJlY3RvcnlSZWY+CisgICAgPC9GcmFnbWVudD4KKworICAgIDxGcmFnbWVudD4KKyAgICAgICAgPERpcmVjdG9yeVJlZiBJZD0iSW5zdGFsbERpcmVjdG9yeSI+CisgICAgICAgICAgICA8RGlyZWN0b3J5IElkPSJpbmNsdWRlIiBOYW1lPSJpbmNsdWRlIiAvPgorICAgICAgICA8L0RpcmVjdG9yeVJlZj4KKyAgICA8L0ZyYWdtZW50PgorCisgICAgPEZyYWdtZW50PgorICAgICAgICA8RGlyZWN0b3J5UmVmIElkPSJJbnN0YWxsRGlyZWN0b3J5Ij4KKyAgICAgICAgICAgIDxEaXJlY3RvcnkgSWQ9IkxpYiIgTmFtZT0iTGliIiAvPgorICAgICAgICA8L0RpcmVjdG9yeVJlZj4KKyAgICA8L0ZyYWdtZW50PgorCisgICAgPEZyYWdtZW50PgorICAgICAgICA8RGlyZWN0b3J5UmVmIElkPSJJbnN0YWxsRGlyZWN0b3J5Ij4KKyAgICAgICAgICAgIDxEaXJlY3RvcnkgSWQ9ImxpYnMiIE5hbWU9ImxpYnMiIC8+CisgICAgICAgIDwvRGlyZWN0b3J5UmVmPgorICAgIDwvRnJhZ21lbnQ+CisKKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxEaXJlY3RvcnlSZWYgSWQ9Ikluc3RhbGxEaXJlY3RvcnkiPgorICAgICAgICAgICAgPERpcmVjdG9yeSBJZD0iU2NyaXB0cyIgTmFtZT0iU2NyaXB0cyIgLz4KKyAgICAgICAgPC9EaXJlY3RvcnlSZWY+CisgICAgPC9GcmFnbWVudD4KKworICAgIDxGcmFnbWVudD4KKyAgICAgICAgPERpcmVjdG9yeVJlZiBJZD0iSW5zdGFsbERpcmVjdG9yeSI+CisgICAgICAgICAgICA8RGlyZWN0b3J5IElkPSJ0Y2wiIE5hbWU9InRjbCIgLz4KKyAgICAgICAgPC9EaXJlY3RvcnlSZWY+CisgICAgPC9GcmFnbWVudD4KKworICAgIDxGcmFnbWVudD4KKyAgICAgICAgPERpcmVjdG9yeVJlZiBJZD0iSW5zdGFsbERpcmVjdG9yeSI+CisgICAgICAgICAgICA8RGlyZWN0b3J5IElkPSJUb29scyIgTmFtZT0iVG9vbHMiIC8+CisgICAgICAgIDwvRGlyZWN0b3J5UmVmPgorICAgIDwvRnJhZ21lbnQ+CisgICAgCisgICAgPCEtLSBTdGFydCBNZW51IGZvbGRlciAtLT4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxEaXJlY3RvcnlSZWYgSWQ9IlRBUkdFVERJUiI+CisgICAgICAgICAgICA8RGlyZWN0b3J5IElkPSJQcm9ncmFtTWVudUZvbGRlciI+CisgICAgICAgICAgICAgICAgPERpcmVjdG9yeSBJZD0iTWVudURpciIgTmFtZT0iIShsb2MuUHJvZHVjdE5hbWUpIiAvPgorICAgICAgICAgICAgPC9EaXJlY3Rvcnk+CisgICAgICAgIDwvRGlyZWN0b3J5UmVmPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9jb21tb25fZW4tVVMud3hsX3RlbXBsYXRlIGIvVG9vbHMvbXNpL2NvbW1vbl9lbi1VUy53eGxfdGVtcGxhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQwMzUyNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9jb21tb25fZW4tVVMud3hsX3RlbXBsYXRlCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IkxDSUQiPjEwMzM8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJDdWx0dXJlIj5lbi11czwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IlByb2R1Y3ROYW1lIj5QeXRob24ge3tTaG9ydFZlcnNpb259fTwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IkZ1bGxQcm9kdWN0TmFtZSI+UHl0aG9uIHt7TG9uZ1ZlcnNpb259fSAoe3tCaXRuZXNzfX0pPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iVGl0bGUiPlB5dGhvbiB7e0xvbmdWZXJzaW9ufX0gIShsb2MuRGVzY3JpcHRvcikgKHt7Qml0bmVzc319KTwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IkRlc2NyaXB0aW9uIj5QeXRob24ge3tMb25nVmVyc2lvbn19ICEobG9jLkRlc2NyaXB0b3IpICh7e0JpdG5lc3N9fSk8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJUaXRsZVBkYiI+UHl0aG9uIHt7TG9uZ1ZlcnNpb259fSAhKGxvYy5EZXNjcmlwdG9yKSAoe3tCaXRuZXNzfX0gc3ltYm9scyk8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJEZXNjcmlwdGlvblBkYiI+UHl0aG9uIHt7TG9uZ1ZlcnNpb259fSAhKGxvYy5EZXNjcmlwdG9yKSAoe3tCaXRuZXNzfX0gc3ltYm9scyk8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJUaXRsZV9kIj5QeXRob24ge3tMb25nVmVyc2lvbn19ICEobG9jLkRlc2NyaXB0b3IpICh7e0JpdG5lc3N9fSBkZWJ1Zyk8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJEZXNjcmlwdGlvbl9kIj5QeXRob24ge3tMb25nVmVyc2lvbn19ICEobG9jLkRlc2NyaXB0b3IpICh7e0JpdG5lc3N9fSBkZWJ1Zyk8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJNYW51ZmFjdHVyZXIiPlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iTm9Eb3duZ3JhZGUiPkEgbmV3ZXIgdmVyc2lvbiBvZiAhKGxvYy5Qcm9kdWN0TmFtZSkgaXMgYWxyZWFkeSBpbnN0YWxsZWQuPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iSW5jb3JyZWN0Q29yZSI+QW4gaW5jb3JyZWN0IHZlcnNpb24gb2YgYSBwcmVyZXF1aXNpdGUgcGFja2FnZSBpcyBpbnN0YWxsZWQuIFBsZWFzZSB1bmluc3RhbGwgYW55IG90aGVyIHZlcnNpb25zIG9mICEobG9jLlByb2R1Y3ROYW1lKSBhbmQgdHJ5IGluc3RhbGxpbmcgdGhpcyBhZ2Fpbi48L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJOb1RhcmdldERpciI+VGhlIFRBUkdFVERJUiB2YXJpYWJsZSBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gaW52b2tpbmcgdGhpcyBpbnN0YWxsZXIuPC9TdHJpbmc+Cis8L1dpeExvY2FsaXphdGlvbj4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9jb3JlL2NvcmUud2l4cHJvaiBiL1Rvb2xzL21zaS9jb3JlL2NvcmUud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU4YmFiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2NvcmUvY29yZS53aXhwcm9qCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPnsxQjQ1MDJENS1CNjI3LTRGNTAtQUJFQS00Q0M1QThFODgyNjV9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgorICAgICAgICA8T3V0cHV0TmFtZT5jb3JlPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0VHlwZT5QYWNrYWdlPC9PdXRwdXRUeXBlPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS5wcm9wcyIgLz4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJjb3JlLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iY29yZV9maWxlcy53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEVtYmVkZGVkUmVzb3VyY2UgSW5jbHVkZT0iKi53eGwiIC8+CisgICAgPC9JdGVtR3JvdXA+CisKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9jb3JlL2NvcmUud3hzIGIvVG9vbHMvbXNpL2NvcmUvY29yZS53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0ZmJkZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9jb3JlL2NvcmUud3hzCkBAIC0wLDAgKzEsMTMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8UHJvZHVjdCBJZD0iKiIgTGFuZ3VhZ2U9IiEobG9jLkxDSUQpIiBOYW1lPSIhKGxvYy5UaXRsZSkiIFZlcnNpb249IiQodmFyLlZlcnNpb24pIiBNYW51ZmFjdHVyZXI9IiEobG9jLk1hbnVmYWN0dXJlcikiIFVwZ3JhZGVDb2RlPSIkKHZhci5VcGdyYWRlQ29kZSkiPgorICAgICAgICA8UGFja2FnZSBJbnN0YWxsZXJWZXJzaW9uPSIzMDAiIENvbXByZXNzZWQ9InllcyIgSW5zdGFsbFNjb3BlPSJwZXJVc2VyIiBQbGF0Zm9ybT0iJCh2YXIuUGxhdGZvcm0pIiAvPgorICAgICAgICA8TWVkaWFUZW1wbGF0ZSBFbWJlZENhYj0ieWVzIiBDb21wcmVzc2lvbkxldmVsPSJoaWdoIiAvPgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5UmVmIElkPSJVcGdyYWRlVGFibGUiIC8+CisgICAgICAgIAorICAgICAgICA8RmVhdHVyZSBJZD0iRGVmYXVsdEZlYXR1cmUiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9ImNvcmVfZGxsIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvY29yZS9jb3JlX2Qud2l4cHJvaiBiL1Rvb2xzL21zaS9jb3JlL2NvcmVfZC53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjk2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvY29yZS9jb3JlX2Qud2l4cHJvagpAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57RDM2NzdEQ0YtMDk4QS00Mzk4LTlGQTUtOEU3NEFDMzdFMERGfTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxTY2hlbWFWZXJzaW9uPjIuMDwvU2NoZW1hVmVyc2lvbj4KKyAgICAgICAgPE91dHB1dE5hbWU+Y29yZV9kPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0VHlwZT5QYWNrYWdlPC9PdXRwdXRUeXBlPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS5wcm9wcyIgLz4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJjb3JlX2Qud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJjb3JlX2ZpbGVzLnd4cyIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8RW1iZWRkZWRSZXNvdXJjZSBJbmNsdWRlPSIqLnd4bCIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKworICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2NvcmUvY29yZV9kLnd4cyBiL1Rvb2xzL21zaS9jb3JlL2NvcmVfZC53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMDM5NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9jb3JlL2NvcmVfZC53eHMKQEAgLTAsMCArMSwxNCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxQcm9kdWN0IElkPSIqIiBMYW5ndWFnZT0iIShsb2MuTENJRCkiIE5hbWU9IiEobG9jLlRpdGxlX2QpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgPE1lZGlhVGVtcGxhdGUgRW1iZWRDYWI9InllcyIgQ29tcHJlc3Npb25MZXZlbD0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IkRlYnVnQmluYXJpZXMiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlX2QpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb25fZCkiPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJjb3JlX2RsbF9kIiAvPgorICAgICAgICAgICAgPENvbXBvbmVudFJlZiBJZD0iT3B0aW9uYWxGZWF0dXJlIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvY29yZS9jb3JlX2VuLVVTLnd4bCBiL1Rvb2xzL21zaS9jb3JlL2NvcmVfZW4tVVMud3hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Nzc0NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvY29yZS9jb3JlX2VuLVVTLnd4bApAQCAtMCwwICsxLDUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IkRlc2NyaXB0b3IiPkNvcmUgSW50ZXJwcmV0ZXI8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJTaG9ydERlc2NyaXB0b3IiPmNvcmU8L1N0cmluZz4KKzwvV2l4TG9jYWxpemF0aW9uPgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2NvcmUvY29yZV9maWxlcy53eHMgYi9Ub29scy9tc2kvY29yZS9jb3JlX2ZpbGVzLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDVlMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2NvcmUvY29yZV9maWxlcy53eHMKQEAgLTAsMCArMSwzMSBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJjb3JlX2RsbCI+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJweXRob25fc3RhYmxlLmRsbCIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0icHl0aG9uX3N0YWJsZS5kbGwiIE5hbWU9InB5dGhvbiQodmFyLk1ham9yVmVyc2lvbk51bWJlcikuZGxsIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9InB5dGhvbi5kbGwiIERpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9InB5dGhvbi5kbGwiIE5hbWU9InB5dGhvbiQodmFyLk1ham9yVmVyc2lvbk51bWJlcikkKHZhci5NaW5vclZlcnNpb25OdW1iZXIpLmRsbCIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0iY29yZV9zeW1ib2xzIj4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9InB5dGhvbi5wZGIiIERpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9InB5dGhvbi5wZGIiIE5hbWU9InB5dGhvbiQodmFyLk1ham9yVmVyc2lvbk51bWJlcikkKHZhci5NaW5vclZlcnNpb25OdW1iZXIpLnBkYiIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0iY29yZV9kbGxfZCI+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJweXRob25fc3RhYmxlX2QuZGxsIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJweXRob25fc3RhYmxlX2QuZGxsIiBOYW1lPSJweXRob24kKHZhci5NYWpvclZlcnNpb25OdW1iZXIpX2QuZGxsIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9InB5dGhvbl9kLmRsbCIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0icHl0aG9uX2QuZGxsIiBOYW1lPSJweXRob24kKHZhci5NYWpvclZlcnNpb25OdW1iZXIpJCh2YXIuTWlub3JWZXJzaW9uTnVtYmVyKV9kLmRsbCIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJweXRob25fZC5wZGIiIE5hbWU9InB5dGhvbiQodmFyLk1ham9yVmVyc2lvbk51bWJlcikkKHZhci5NaW5vclZlcnNpb25OdW1iZXIpX2QucGRiIiBLZXlQYXRoPSJubyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9jb3JlL2NvcmVfcGRiLndpeHByb2ogYi9Ub29scy9tc2kvY29yZS9jb3JlX3BkYi53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljODgzODkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvY29yZS9jb3JlX3BkYi53aXhwcm9qCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPntFOThFNzUzOS02NEU3LTREQ0UtQUFDRC0wMUUzQURFNDBFRkR9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgorICAgICAgICA8T3V0cHV0TmFtZT5jb3JlX3BkYjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iY29yZV9wZGIud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJjb3JlX2ZpbGVzLnd4cyIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8RW1iZWRkZWRSZXNvdXJjZSBJbmNsdWRlPSIqLnd4bCIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKworICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2NvcmUvY29yZV9wZGIud3hzIGIvVG9vbHMvbXNpL2NvcmUvY29yZV9wZGIud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYzMxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvY29yZS9jb3JlX3BkYi53eHMKQEAgLTAsMCArMSwxNCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxQcm9kdWN0IElkPSIqIiBMYW5ndWFnZT0iIShsb2MuTENJRCkiIE5hbWU9IiEobG9jLlRpdGxlUGRiKSIgVmVyc2lvbj0iJCh2YXIuVmVyc2lvbikiIE1hbnVmYWN0dXJlcj0iIShsb2MuTWFudWZhY3R1cmVyKSIgVXBncmFkZUNvZGU9IiQodmFyLlVwZ3JhZGVDb2RlKSI+CisgICAgICAgIDxQYWNrYWdlIEluc3RhbGxlclZlcnNpb249IjMwMCIgQ29tcHJlc3NlZD0ieWVzIiBJbnN0YWxsU2NvcGU9InBlclVzZXIiIFBsYXRmb3JtPSIkKHZhci5QbGF0Zm9ybSkiIC8+CisgICAgICAgIDxNZWRpYVRlbXBsYXRlIEVtYmVkQ2FiPSJ5ZXMiIENvbXByZXNzaW9uTGV2ZWw9ImhpZ2giIC8+CisgICAgICAgIAorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlVwZ3JhZGVUYWJsZSIgLz4KKyAgICAgICAgCisgICAgICAgIDxGZWF0dXJlIElkPSJTeW1ib2xzIiBBbGxvd0FkdmVydGlzZT0ibm8iIFRpdGxlPSIhKGxvYy5UaXRsZVBkYikiIERlc2NyaXB0aW9uPSIhKGxvYy5EZXNjcmlwdGlvblBkYikiPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJjb3JlX3N5bWJvbHMiIC8+CisgICAgICAgICAgICA8Q29tcG9uZW50UmVmIElkPSJPcHRpb25hbEZlYXR1cmUiIC8+CisgICAgICAgIDwvRmVhdHVyZT4KKyAgICA8L1Byb2R1Y3Q+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9jc3ZfdG9fd3hzLnB5IGIvVG9vbHMvbXNpL2Nzdl90b193eHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1YzhmOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9jc3ZfdG9fd3hzLnB5CkBAIC0wLDAgKzEsMTI3IEBACisnJycKK1Byb2Nlc3NlcyBhIENTViBmaWxlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGZpbGVzIGludG8gYSBXWFMgZmlsZSB3aXRoCitjb21wb25lbnRzIGZvciBlYWNoIGxpc3RlZCBmaWxlLgorCitUaGUgQ1NWIGNvbHVtbnMgYXJlOgorICAgIHNvdXJjZSBvZiBmaWxlLCB0YXJnZXQgZm9yIGZpbGUsIGdyb3VwIG5hbWUKKworVXNhZ2U6OgorICAgIHB5IHR4dF90b193eHMucHkgW3BhdGggdG8gZmlsZSBsaXN0IC5jc3ZdIFtwYXRoIHRvIGRlc3RpbmF0aW9uIC53eHNdCisKK1RoaXMgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBzdHJ1Y3R1cmVzIHdoZXJlIHNvbWUgZGlyZWN0b3JpZXMgb25seQorY29udGFpbiBvdGhlciBkaXJlY3Rvcmllcy4gTVNCdWlsZCBpcyBub3QgYWJsZSB0byBnZW5lcmF0ZSB0aGUKK0RpcmVjdG9yeSBlbnRyaWVzIGluIHRoZSBXWFMgZmlsZSBjb3JyZWN0bHksIGFzIGl0IG9wZXJhdGVzIG9uIGZpbGVzLgorUHl0aG9uLCBob3dldmVyLCBjYW4gZWFzaWx5IGZpbGwgaW4gdGhlIGdhcC4KKycnJworCitfX2F1dGhvcl9fID0gIlN0ZXZlIERvd2VyIDxzdGV2ZS5kb3dlckBtaWNyb3NvZnQuY29tPiIKKworaW1wb3J0IGNzdgoraW1wb3J0IHJlCitpbXBvcnQgc3lzCisKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0Citmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIHppcF9sb25nZXN0Citmcm9tIHBhdGhsaWIgaW1wb3J0IFB1cmVXaW5kb3dzUGF0aAorZnJvbSB1dWlkIGltcG9ydCB1dWlkMQorCitJRF9DSEFSX1NVQlMgPSB7CisgICAgJy0nOiAnXycsCisgICAgJysnOiAnX1AnLAorfQorCitkZWYgbWFrZV9pZChwYXRoKToKKyAgICByZXR1cm4gcmUuc3ViKAorICAgICAgICByJ1teQS1aYS16MC05Xy5dJywKKyAgICAgICAgbGFtYmRhIG06IElEX0NIQVJfU1VCUy5nZXQobS5ncm91cCgwKSwgJ18nKSwKKyAgICAgICAgc3RyKHBhdGgpLnJzdHJpcCgnL1xcJyksCisgICAgICAgIGZsYWdzPXJlLkkKKyAgICApCisKK0RJUkVDVE9SSUVTID0gc2V0KCkKKworZGVmIG1haW4oZmlsZV9zb3VyY2UsIGluc3RhbGxfdGFyZ2V0KToKKyAgICB3aXRoIG9wZW4oZmlsZV9zb3VyY2UsICdyJywgbmV3bGluZT0nJykgYXMgZjoKKyAgICAgICAgZmlsZXMgPSBsaXN0KGNzdi5yZWFkZXIoZikpCisKKyAgICBhc3NlcnQgbGVuKGZpbGVzKSA9PSBsZW4oc2V0KG1ha2VfaWQoZlsxXSkgZm9yIGYgaW4gZmlsZXMpKSwgIkR1cGxpY2F0ZSBmaWxlIElEcyBleGlzdCIKKworICAgIGRpcmVjdG9yaWVzID0gZGVmYXVsdGRpY3Qoc2V0KQorICAgIGNhY2hlX2RpcmVjdG9yaWVzID0gZGVmYXVsdGRpY3Qoc2V0KQorICAgIGdyb3VwcyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgZm9yIHNvdXJjZSwgdGFyZ2V0LCBncm91cCwgZGlza19pZCwgY29uZGl0aW9uIGluIGZpbGVzOgorICAgICAgICB0YXJnZXQgPSBQdXJlV2luZG93c1BhdGgodGFyZ2V0KQorICAgICAgICBncm91cHNbZ3JvdXBdLmFwcGVuZCgoc291cmNlLCB0YXJnZXQsIGRpc2tfaWQsIGNvbmRpdGlvbikpCisKKyAgICAgICAgaWYgdGFyZ2V0LnN1ZmZpeC5sb3dlcigpIGluIHsiLnB5IiwgIi5weXcifToKKyAgICAgICAgICAgIGNhY2hlX2RpcmVjdG9yaWVzW2dyb3VwXS5hZGQodGFyZ2V0LnBhcmVudCkKKworICAgICAgICBmb3IgZGlybmFtZSBpbiB0YXJnZXQucGFyZW50czoKKyAgICAgICAgICAgIHBhcmVudCA9IG1ha2VfaWQoZGlybmFtZS5wYXJlbnQpCisgICAgICAgICAgICBpZiBwYXJlbnQgYW5kIHBhcmVudCAhPSAnLic6CisgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXNbcGFyZW50XS5hZGQoZGlybmFtZS5uYW1lKQorCisgICAgbGluZXMgPSBbCisgICAgICAgICc8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4nLAorICAgICAgICAnICAgIDxGcmFnbWVudD4nLAorICAgIF0KKyAgICBmb3IgZGlyX3BhcmVudCBpbiBzb3J0ZWQoZGlyZWN0b3JpZXMpOgorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgPERpcmVjdG9yeVJlZiBJZD0ie30iPicuZm9ybWF0KGRpcl9wYXJlbnQpKQorICAgICAgICBmb3IgZGlyX25hbWUgaW4gc29ydGVkKGRpcmVjdG9yaWVzW2Rpcl9wYXJlbnRdKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgPERpcmVjdG9yeSBJZD0ie31fe30iIE5hbWU9Int9IiAvPicuZm9ybWF0KGRpcl9wYXJlbnQsIG1ha2VfaWQoZGlyX25hbWUpLCBkaXJfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICA8L0RpcmVjdG9yeVJlZj4nKQorICAgIGZvciBkaXJfcGFyZW50IGluIChtYWtlX2lkKGQpIGZvciBncm91cCBpbiBjYWNoZV9kaXJlY3Rvcmllcy52YWx1ZXMoKSBmb3IgZCBpbiBncm91cCk6CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICA8RGlyZWN0b3J5UmVmIElkPSJ7fSI+Jy5mb3JtYXQoZGlyX3BhcmVudCkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgPERpcmVjdG9yeSBJZD0ie31fX19weWNhY2hlX18iIE5hbWU9Il9fcHljYWNoZV9fIiAvPicuZm9ybWF0KGRpcl9wYXJlbnQpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgPC9EaXJlY3RvcnlSZWY+JykKKyAgICBsaW5lcy5hcHBlbmQoJyAgICA8L0ZyYWdtZW50PicpCisKKyAgICBmb3IgZ3JvdXAgaW4gc29ydGVkKGdyb3Vwcyk6CisgICAgICAgIGxpbmVzLmV4dGVuZChbCisgICAgICAgICAgICAnICAgIDxGcmFnbWVudD4nLAorICAgICAgICAgICAgJyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJ7fSI+Jy5mb3JtYXQoZ3JvdXApLAorICAgICAgICBdKQorICAgICAgICBmb3Igc291cmNlLCB0YXJnZXQsIGRpc2tfaWQsIGNvbmRpdGlvbiBpbiBncm91cHNbZ3JvdXBdOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJ7fSIgRGlyZWN0b3J5PSJ7fSIgR3VpZD0iKiI+Jy5mb3JtYXQobWFrZV9pZCh0YXJnZXQpLCBtYWtlX2lkKHRhcmdldC5wYXJlbnQpKSkKKyAgICAgICAgICAgIGlmIGNvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICAgICA8Q29uZGl0aW9uPnt9PC9Db25kaXRpb24+Jy5mb3JtYXQoY29uZGl0aW9uKSkKKworICAgICAgICAgICAgaWYgZGlza19pZDoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICAgICA8RmlsZSBJZD0ie30iIE5hbWU9Int9IiBTb3VyY2U9Int9IiBEaXNrSWQ9Int9IiAvPicuZm9ybWF0KG1ha2VfaWQodGFyZ2V0KSwgdGFyZ2V0Lm5hbWUsIHNvdXJjZSwgZGlza19pZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgICAgIDxGaWxlIElkPSJ7fSIgTmFtZT0ie30iIFNvdXJjZT0ie30iIC8+Jy5mb3JtYXQobWFrZV9pZCh0YXJnZXQpLCB0YXJnZXQubmFtZSwgc291cmNlKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgPC9Db21wb25lbnQ+JykKKworICAgICAgICBjcmVhdGVfZm9sZGVycyA9IHttYWtlX2lkKHApICsgIl9fX3B5Y2FjaGVfXyIgZm9yIHAgaW4gY2FjaGVfZGlyZWN0b3JpZXNbZ3JvdXBdfQorICAgICAgICByZW1vdmVfZm9sZGVycyA9IHttYWtlX2lkKHAyKSBmb3IgcDEgaW4gY2FjaGVfZGlyZWN0b3JpZXNbZ3JvdXBdIGZvciBwMiBpbiBjaGFpbigocDEsKSwgcDEucGFyZW50cyl9CisgICAgICAgIGNyZWF0ZV9mb2xkZXJzLmRpc2NhcmQoIi4iKQorICAgICAgICByZW1vdmVfZm9sZGVycy5kaXNjYXJkKCIuIikKKyAgICAgICAgaWYgY3JlYXRlX2ZvbGRlcnMgb3IgcmVtb3ZlX2ZvbGRlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Int9X19weWNhY2hlX19mb2xkZXJzIiBEaXJlY3Rvcnk9IlRBUkdFVERJUiIgR3VpZD0ie30iPicuZm9ybWF0KGdyb3VwLCB1dWlkMSgpKSkKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZCgnICAgICAgICAgICAgICAgIDxDcmVhdGVGb2xkZXIgRGlyZWN0b3J5PSJ7fSIgLz4nLmZvcm1hdChwKSBmb3IgcCBpbiBjcmVhdGVfZm9sZGVycykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZCgnICAgICAgICAgICAgICAgIDxSZW1vdmVGaWxlIElkPSJSZW1vdmVfezB9X2ZpbGVzIiBOYW1lPSIqIiBPbj0idW5pbnN0YWxsIiBEaXJlY3Rvcnk9InswfSIgLz4nLmZvcm1hdChwKSBmb3IgcCBpbiBjcmVhdGVfZm9sZGVycykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZCgnICAgICAgICAgICAgICAgIDxSZW1vdmVGb2xkZXIgSWQ9IlJlbW92ZV97MH1fZm9sZGVyIiBPbj0idW5pbnN0YWxsIiBEaXJlY3Rvcnk9InswfSIgLz4nLmZvcm1hdChwKSBmb3IgcCBpbiBjcmVhdGVfZm9sZGVycyB8IHJlbW92ZV9mb2xkZXJzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICA8L0NvbXBvbmVudD4nKQorCisgICAgICAgIGxpbmVzLmV4dGVuZChbCisgICAgICAgICAgICAnICAgICAgICA8L0NvbXBvbmVudEdyb3VwPicsCisgICAgICAgICAgICAnICAgIDwvRnJhZ21lbnQ+JywKKyAgICAgICAgXSkKKyAgICBsaW5lcy5hcHBlbmQoJzwvV2l4PicpCisKKyAgICAjIENoZWNrIGlmIHRoZSBmaWxlIG1hdGNoZXMuIElmIHNvLCB3ZSBkb24ndCB3YW50IHRvIHRvdWNoIGl0IHNvCisgICAgIyB0aGF0IHdlIGNhbiBza2lwIHJlYnVpbGRpbmcuCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oaW5zdGFsbF90YXJnZXQsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGlmIGFsbCh4LnJzdHJpcCgnXHJcbicpID09IHkgZm9yIHgsIHkgaW4gemlwX2xvbmdlc3QoZiwgbGluZXMpKToKKyAgICAgICAgICAgICAgICBwcmludCgnRmlsZSBpcyB1cCB0byBkYXRlJykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcGFzcworCisgICAgd2l0aCBvcGVuKGluc3RhbGxfdGFyZ2V0LCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGVsaW5lcyhsaW5lICsgJ1xuJyBmb3IgbGluZSBpbiBsaW5lcykKKyAgICBwcmludCgnV3JvdGUge30gbGluZXMgdG8ge30nLmZvcm1hdChsZW4obGluZXMpLCBpbnN0YWxsX3RhcmdldCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbihzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvZGV2L2Rldi53aXhwcm9qIGIvVG9vbHMvbXNpL2Rldi9kZXYud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODJiNjYwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2Rldi9kZXYud2l4cHJvagpAQCAtMCwwICsxLDQ5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57NUYyM0Y2MDgtRDc0Qi00MjU5LUEwQ0UtOERDNjVDQzdGRTUzfTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxTY2hlbWFWZXJzaW9uPjIuMDwvU2NoZW1hVmVyc2lvbj4KKyAgICAgICAgPE91dHB1dE5hbWUgQ29uZGl0aW9uPSInJChPdXRwdXROYW1lKScgPT0gJyciPmRldjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxEZWZpbmVDb25zdGFudHMgQ29uZGl0aW9uPSIkKEJ1aWxkRm9yUmVsZWFzZSkiPgorICAgICAgICAgICAgJChEZWZpbmVDb25zdGFudHMpOworICAgICAgICAgICAgSW5jbHVkZU1pbkdXTGliPTE7CisgICAgICAgIDwvRGVmaW5lQ29uc3RhbnRzPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJkZXYud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJkZXZfZmlsZXMud3hzIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxFbWJlZGRlZFJlc291cmNlIEluY2x1ZGU9Iioud3hsIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxJbnN0YWxsRmlsZXMgSW5jbHVkZT0iJChQeVNvdXJjZVBhdGgpaW5jbHVkZVwqLmgiPgorICAgICAgICAgICAgPFNvdXJjZUJhc2U+JChQeVNvdXJjZVBhdGgpPC9Tb3VyY2VCYXNlPgorICAgICAgICAgICAgPFNvdXJjZT4hKGJpbmRwYXRoLnNyYyk8L1NvdXJjZT4KKyAgICAgICAgICAgIDxUYXJnZXRCYXNlPiQoUHlTb3VyY2VQYXRoKTwvVGFyZ2V0QmFzZT4KKyAgICAgICAgICAgIDxUYXJnZXRfPjwvVGFyZ2V0Xz4KKyAgICAgICAgICAgIDxHcm91cD5kZXZfaW5jbHVkZTwvR3JvdXA+CisgICAgICAgIDwvSW5zdGFsbEZpbGVzPgorICAgIDwvSXRlbUdyb3VwPgorICAgIAorICAgIDxUYXJnZXQgTmFtZT0iQnVpbGRNaW5HV0xpYiIKKyAgICAgICAgICAgIElucHV0cz0iJChCdWlsZFBhdGgpJChQeURsbE5hbWUpLmRsbCIKKyAgICAgICAgICAgIE91dHB1dHM9IiQoQnVpbGRQYXRoKWxpYiQoUHlEbGxOYW1lKS5hIgorICAgICAgICAgICAgQWZ0ZXJUYXJnZXRzPSJQcmVwYXJlRm9yQnVpbGQiCisgICAgICAgICAgICBDb25kaXRpb249IiQoQnVpbGRGb3JSZWxlYXNlKSI+CisgICAgICAgIDwhLS0gQnVpbGQgbGlicHl0aG9uIyMuYSBhcyBwYXJ0IG9mIHRoaXMgcHJvamVjdC4gVGhpcyByZXF1aXJlcyBnZW5kZWYgYW5kIGRsbHRvb2wgb24gdGhlIHBhdGguIC0tPgorICAgICAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgICAgIDxfRGxsVG9vbE9wdHM+LW0gaTM4NiAtLWFzLWZsYWdzPS0tMzI8L19EbGxUb29sT3B0cz4KKyAgICAgICAgICAgIDxfRGxsVG9vbE9wdHMgQ29uZGl0aW9uPSIkKFBsYXRmb3JtKSA9PSAneDY0JyI+LW0gaTM4Njp4ODYtNjQ8L19EbGxUb29sT3B0cz4KKyAgICAgICAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgICAgICAgIDxFeGVjIENvbW1hbmQ9J2dlbmRlZiAtICIkKEJ1aWxkUGF0aCkkKFB5RGxsTmFtZSkuZGxsIiAmZ3Q7ICIkKEludGVybWVkaWF0ZU91dHB1dFBhdGgpbWluZ3dsaWIuZGVmIicgQ29udGludWVPbkVycm9yPSJmYWxzZSIgLz4KKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0nZGxsdG9vbCAtLWRsbG5hbWUgJChQeURsbE5hbWUpLmRsbCAtLWRlZiAiJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKW1pbmd3bGliLmRlZiIgLS1vdXRwdXQtbGliICIkKEJ1aWxkUGF0aClsaWIkKFB5RGxsTmFtZSkuYSIgJChfRGxsVG9vbE9wdHMpJyAvPgorICAgIDwvVGFyZ2V0PgorCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvZGV2L2Rldi53eHMgYi9Ub29scy9tc2kvZGV2L2Rldi53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5ZTEzOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9kZXYvZGV2Lnd4cwpAQCAtMCwwICsxLDE5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPFByb2R1Y3QgSWQ9IioiIExhbmd1YWdlPSIhKGxvYy5MQ0lEKSIgTmFtZT0iIShsb2MuVGl0bGUpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgPE1lZGlhVGVtcGxhdGUgRW1iZWRDYWI9InllcyIgQ29tcHJlc3Npb25MZXZlbD0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IkRlZmF1bHRGZWF0dXJlIiBBbGxvd0FkdmVydGlzZT0ibm8iIFRpdGxlPSIhKGxvYy5UaXRsZSkiIERlc2NyaXB0aW9uPSIhKGxvYy5EZXNjcmlwdGlvbikiPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJkZXZfaW5jbHVkZSIgLz4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0iZGV2X3B5Y29uZmlnIiAvPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJkZXZfbGlicyIgLz4KKzw/aWZkZWYgSW5jbHVkZU1pbkdXTGliID8+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9ImRldl9taW5ndyIgLz4KKzw/ZW5kaWYgPz4KKyAgICAgICAgICAgIDxDb21wb25lbnRSZWYgSWQ9Ik9wdGlvbmFsRmVhdHVyZSIgLz4KKyAgICAgICAgPC9GZWF0dXJlPgorICAgIDwvUHJvZHVjdD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2Rldi9kZXZfZC53aXhwcm9qIGIvVG9vbHMvbXNpL2Rldi9kZXZfZC53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYjA1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvZGV2L2Rldl9kLndpeHByb2oKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+e0MxMUI0OTQ1LTc2QkQtNDEzNy1CMkUzLTY0OTQ2MDExN0E3N308L1Byb2plY3RHdWlkPgorICAgICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+CisgICAgICAgIDxPdXRwdXROYW1lPmRldl9kPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0VHlwZT5QYWNrYWdlPC9PdXRwdXRUeXBlPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS5wcm9wcyIgLz4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJkZXZfZC53eHMiIC8+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9ImRldl9maWxlcy53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEVtYmVkZGVkUmVzb3VyY2UgSW5jbHVkZT0iKi53eGwiIC8+CisgICAgPC9JdGVtR3JvdXA+CisKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9kZXYvZGV2X2Qud3hzIGIvVG9vbHMvbXNpL2Rldi9kZXZfZC53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2N2FhYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9kZXYvZGV2X2Qud3hzCkBAIC0wLDAgKzEsMTMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8UHJvZHVjdCBJZD0iKiIgTGFuZ3VhZ2U9IiEobG9jLkxDSUQpIiBOYW1lPSIhKGxvYy5UaXRsZV9kKSIgVmVyc2lvbj0iJCh2YXIuVmVyc2lvbikiIE1hbnVmYWN0dXJlcj0iIShsb2MuTWFudWZhY3R1cmVyKSIgVXBncmFkZUNvZGU9IiQodmFyLlVwZ3JhZGVDb2RlKSI+CisgICAgICAgIDxQYWNrYWdlIEluc3RhbGxlclZlcnNpb249IjMwMCIgQ29tcHJlc3NlZD0ieWVzIiBJbnN0YWxsU2NvcGU9InBlclVzZXIiIFBsYXRmb3JtPSIkKHZhci5QbGF0Zm9ybSkiIC8+CisgICAgICAgIDxNZWRpYVRlbXBsYXRlIEVtYmVkQ2FiPSJ5ZXMiIENvbXByZXNzaW9uTGV2ZWw9ImhpZ2giIC8+CisgICAgICAgIAorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlVwZ3JhZGVUYWJsZSIgLz4KKyAgICAgICAgCisgICAgICAgIDxGZWF0dXJlIElkPSJEZWJ1Z0JpbmFyaWVzIiBBbGxvd0FkdmVydGlzZT0ibm8iIFRpdGxlPSIhKGxvYy5UaXRsZV9kKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uX2QpIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0iZGV2X2xpYnNfZCIgLz4KKyAgICAgICAgPC9GZWF0dXJlPgorICAgIDwvUHJvZHVjdD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2Rldi9kZXZfZW4tVVMud3hsIGIvVG9vbHMvbXNpL2Rldi9kZXZfZW4tVVMud3hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NDZlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvZGV2L2Rldl9lbi1VUy53eGwKQEAgLTAsMCArMSw1IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFdpeExvY2FsaXphdGlvbiBDdWx0dXJlPSJlbi11cyIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvbG9jYWxpemF0aW9uIj4KKyAgICA8U3RyaW5nIElkPSJEZXNjcmlwdG9yIj5EZXZlbG9wbWVudCBMaWJyYXJpZXM8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJTaG9ydERlc2NyaXB0b3IiPmRldjwvU3RyaW5nPgorPC9XaXhMb2NhbGl6YXRpb24+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvZGV2L2Rldl9maWxlcy53eHMgYi9Ub29scy9tc2kvZGV2L2Rldl9maWxlcy53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1NGQyZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9kZXYvZGV2X2ZpbGVzLnd4cwpAQCAtMCwwICsxLDQyIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPEZyYWdtZW50PgorICAgICAgICA8Q29tcG9uZW50R3JvdXAgSWQ9ImRldl9weWNvbmZpZyI+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJpbmNsdWRlX3B5Y29uZmlnLmgiIERpcmVjdG9yeT0iaW5jbHVkZSIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9ImluY2x1ZGVfcHljb25maWcuaCIgTmFtZT0icHljb25maWcuaCIgU291cmNlPSIhKGJpbmRwYXRoLnNyYylQQ1xweWNvbmZpZy5oIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgPC9Db21wb25lbnRHcm91cD4KKyAgICA8L0ZyYWdtZW50PgorICAgIAorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJkZXZfbGlicyI+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJsaWJzX3B5dGhvbjMubGliIiBEaXJlY3Rvcnk9ImxpYnMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJsaWJzX3B5dGhvbl9zdGFibGUubGliIiBOYW1lPSJweXRob24kKHZhci5NYWpvclZlcnNpb25OdW1iZXIpLmxpYiIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJsaWJzX3B5dGhvbi5saWIiIERpcmVjdG9yeT0ibGlicyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9ImxpYnNfcHl0aG9uLmxpYiIgTmFtZT0icHl0aG9uJCh2YXIuTWFqb3JWZXJzaW9uTnVtYmVyKSQodmFyLk1pbm9yVmVyc2lvbk51bWJlcikubGliIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgPC9Db21wb25lbnRHcm91cD4KKyAgICA8L0ZyYWdtZW50PgorICAgIAorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJkZXZfbGlic19kIj4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9ImxpYnNfcHl0aG9uM19kLmxpYiIgRGlyZWN0b3J5PSJsaWJzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0ibGlic19weXRob25fc3RhYmxlX2QubGliIiBOYW1lPSJweXRob24kKHZhci5NYWpvclZlcnNpb25OdW1iZXIpX2QubGliIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJsaWJzX3B5dGhvbl9kLmxpYiIgRGlyZWN0b3J5PSJsaWJzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0ibGlic19weXRob25fZC5saWIiIE5hbWU9InB5dGhvbiQodmFyLk1ham9yVmVyc2lvbk51bWJlcikkKHZhci5NaW5vclZlcnNpb25OdW1iZXIpX2QubGliIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKyAgICAKKyAgICA8P2lmZGVmIEluY2x1ZGVNaW5HV0xpYiA/PgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJkZXZfbWluZ3ciPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0ibGlic19saWJweXRob24uYSIgRGlyZWN0b3J5PSJsaWJzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0ibGlic19saWJweXRob24uYSIgTmFtZT0ibGlicHl0aG9uJCh2YXIuTWFqb3JWZXJzaW9uTnVtYmVyKSQodmFyLk1pbm9yVmVyc2lvbk51bWJlcikuYSIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKyAgICA8P2VuZGlmID8+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9kb2MvZG9jLndpeHByb2ogYi9Ub29scy9tc2kvZG9jL2RvYy53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOTkyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvZG9jL2RvYy53aXhwcm9qCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPnswRDYyQTJCQi01RjcxLTQ0NDctOEM4Qy05NzA4NDA3QjM2NzR9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgorICAgICAgICA8T3V0cHV0TmFtZT5kb2M8L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRUeXBlPlBhY2thZ2U8L091dHB1dFR5cGU+CisgICAgICAgIDwhLS0gU2hvcnRjdXQgdmFsaWRhdGlvbiBpcyBub3QgbmVjZXNzYXJ5IC0tPgorICAgICAgICA8U3VwcHJlc3NJQ0VzPklDRTQzPC9TdXBwcmVzc0lDRXM+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnByb3BzIiAvPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8RG9jRmlsZW5hbWU+cHl0aG9uJChNYWpvclZlcnNpb25OdW1iZXIpJChNaW5vclZlcnNpb25OdW1iZXIpJChNaWNyb1ZlcnNpb25OdW1iZXIpJChSZWxlYXNlTGV2ZWxOYW1lKS5jaG08L0RvY0ZpbGVuYW1lPgorICAgICAgICA8SW5jbHVkZURvY0ZpbGU+ZmFsc2U8L0luY2x1ZGVEb2NGaWxlPgorICAgICAgICA8SW5jbHVkZURvY0ZpbGUgQ29uZGl0aW9uPSIkKEJ1aWxkRm9yUmVsZWFzZSkgb3IgRXhpc3RzKCckKFB5U291cmNlUGF0aClEb2NcYnVpbGRcaHRtbGhlbHBcJChEb2NGaWxlbmFtZSknKSI+dHJ1ZTwvSW5jbHVkZURvY0ZpbGU+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJChJbmNsdWRlRG9jRmlsZSkiPgorICAgICAgICA8RGVmaW5lQ29uc3RhbnRzPiQoRGVmaW5lQ29uc3RhbnRzKTtEb2NGaWxlbmFtZT0kKERvY0ZpbGVuYW1lKTs8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iZG9jLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iZG9jX2ZpbGVzLnd4cyIgQ29uZGl0aW9uPSIkKEluY2x1ZGVEb2NGaWxlKSIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iZG9jX25vX2ZpbGVzLnd4cyIgQ29uZGl0aW9uPSIhJChJbmNsdWRlRG9jRmlsZSkiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPFd4bFRlbXBsYXRlIEluY2x1ZGU9Iioud3hsX3RlbXBsYXRlIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIAorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2RvYy9kb2Mud3hzIGIvVG9vbHMvbXNpL2RvYy9kb2Mud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDBlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvZG9jL2RvYy53eHMKQEAgLTAsMCArMSwzMyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxQcm9kdWN0IElkPSIqIiBMYW5ndWFnZT0iIShsb2MuTENJRCkiIE5hbWU9IiEobG9jLlRpdGxlKSIgVmVyc2lvbj0iJCh2YXIuVmVyc2lvbikiIE1hbnVmYWN0dXJlcj0iIShsb2MuTWFudWZhY3R1cmVyKSIgVXBncmFkZUNvZGU9IiQodmFyLlVwZ3JhZGVDb2RlKSI+CisgICAgICAgIDxQYWNrYWdlIEluc3RhbGxlclZlcnNpb249IjMwMCIgQ29tcHJlc3NlZD0ieWVzIiBJbnN0YWxsU2NvcGU9InBlclVzZXIiIFBsYXRmb3JtPSIkKHZhci5QbGF0Zm9ybSkiIC8+CisgICAgICAgIDxNZWRpYVRlbXBsYXRlIEVtYmVkQ2FiPSJ5ZXMiIENvbXByZXNzaW9uTGV2ZWw9ImhpZ2giIC8+CisgICAgICAgIAorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlVwZ3JhZGVUYWJsZSIgLz4KKyAgICAgICAgPFByb3BlcnR5UmVmIElkPSJSRUdJU1RSWUtFWSIgLz4KKyAgICAgICAgCisgICAgICAgIDxGZWF0dXJlIElkPSJEZWZhdWx0RmVhdHVyZSIgQWxsb3dBZHZlcnRpc2U9Im5vIiBUaXRsZT0iIShsb2MuVGl0bGUpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb24pIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0iZG9jIiBQcmltYXJ5PSJ5ZXMiIC8+CisgICAgICAgICAgICA8Q29tcG9uZW50UmVmIElkPSJPcHRpb25hbEZlYXR1cmUiIC8+CisgICAgICAgIDwvRmVhdHVyZT4KKyAgICAgICAgPEZlYXR1cmUgSWQ9IlNob3J0Y3V0cyIgQWxsb3dBZHZlcnRpc2U9Im5vIiBUaXRsZT0iIShsb2MuVGl0bGUpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb24pIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0iZG9jIiAvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8P2lmZGVmIERvY0ZpbGVuYW1lID8+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJkb2Nfc2hvcnRjdXQiIERpcmVjdG9yeT0iTWVudURpciIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5S2V5IFJvb3Q9IkhLTVUiIEtleT0iW09QVElPTkFMRkVBVFVSRVNSRUdJU1RSWUtFWV0iPgorICAgICAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBOYW1lPSIkKHZhci5PcHRpb25hbEZlYXR1cmVOYW1lKV9zaG9ydGN1dCIgVHlwZT0ic3RyaW5nIiBWYWx1ZT0iJCh2YXIuVmVyc2lvbikiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgICAgICA8L1JlZ2lzdHJ5S2V5PgorICAgICAgICAgICAgICAgIDxTaG9ydGN1dCBJZD0icHl0aG9uLmNobSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0PSJbI3B5dGhvbi5jaG1dIgorICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSIhKGxvYy5TaG9ydGN1dE5hbWUpIgorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbj0iIShsb2MuU2hvcnRjdXREZXNjcmlwdGlvbikiCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtpbmdEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiIC8+CisgICAgICAgICAgICAgICAgPFJlbW92ZUZvbGRlciBJZD0iUmVtb3ZlX01lbnVEaXIiIE9uPSJ1bmluc3RhbGwiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDw/ZW5kaWYgPz4KKworICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvZG9jL2RvY19lbi1VUy53eGxfdGVtcGxhdGUgYi9Ub29scy9tc2kvZG9jL2RvY19lbi1VUy53eGxfdGVtcGxhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5NTU2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9kb2MvZG9jX2VuLVVTLnd4bF90ZW1wbGF0ZQpAQCAtMCwwICsxLDcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IlNob3J0RGVzY3JpcHRvciI+ZG9jPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iRGVzY3JpcHRvciI+RG9jdW1lbnRhdGlvbjwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IlNob3J0Y3V0TmFtZSI+UHl0aG9uIHt7U2hvcnRWZXJzaW9ufX0gTWFudWFscyAoe3tCaXRuZXNzfX0pPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iU2hvcnRjdXREZXNjcmlwdGlvbiI+VmlldyB0aGUgIShsb2MuUHJvZHVjdE5hbWUpIGRvY3VtZW50YXRpb24uPC9TdHJpbmc+Cis8L1dpeExvY2FsaXphdGlvbj4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9kb2MvZG9jX2ZpbGVzLnd4cyBiL1Rvb2xzL21zaS9kb2MvZG9jX2ZpbGVzLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTA5YWZlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2RvYy9kb2NfZmlsZXMud3hzCkBAIC0wLDAgKzEsMTUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iUkVHSVNUUllLRVkiIC8+CisgICAgICAgIAorICAgICAgICA8Q29tcG9uZW50R3JvdXAgSWQ9ImRvYyI+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJweXRob24uY2htIiBEaXJlY3Rvcnk9IkRvYyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9InB5dGhvbi5jaG0iIE5hbWU9IiQodmFyLkRvY0ZpbGVuYW1lKSIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgICAgIDxSZWdpc3RyeUtleSBSb290PSJIS01VIiBLZXk9IltSRUdJU1RSWUtFWV0iPgorICAgICAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBLZXk9IkhlbHBcTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbiIgVHlwZT0ic3RyaW5nIiBWYWx1ZT0iWyNweXRob24uY2htXSIgLz4KKyAgICAgICAgICAgICAgICA8L1JlZ2lzdHJ5S2V5PgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2RvYy9kb2Nfbm9fZmlsZXMud3hzIGIvVG9vbHMvbXNpL2RvYy9kb2Nfbm9fZmlsZXMud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjdjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvZG9jL2RvY19ub19maWxlcy53eHMKQEAgLTAsMCArMSwxNyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJkb2MiPgorICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIHdoZW4gdGhlIENITSBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICAgICAgCisgICAgICAgICAgICBUaGlzIHdheSwgc25hcHNob3QgYnVpbGRzIGNhbiBzdWNjZWVkIHdpdGhvdXQgaGF2aW5nIHRvCisgICAgICAgICAgICBidWlsZCB0aGUgZG9jcy4KKyAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iRW1wdHlEb2NGb2xkZXIiIERpcmVjdG9yeT0iRG9jIiBHdWlkPSJ7MjJGRDQyREItRUM2Ni00QjFDLUIxRkMtNDRFMENGN0IyNDYyfSI+CisgICAgICAgICAgICAgICAgPENyZWF0ZUZvbGRlciAvPgorICAgICAgICAgICAgICAgIDxSZW1vdmVGb2xkZXIgSWQ9IlJlbW92ZV9FbXB0eURvY0ZvbGRlciIgT249InVuaW5zdGFsbCIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9jcnRsaWNlbnNlLnR4dCBiL1Rvb2xzL21zaS9leGUvY3J0bGljZW5zZS50eHQKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gVG9vbHMvbXNpL2NydGxpY2Vuc2UudHh0CnJlbmFtZSB0byBUb29scy9tc2kvZXhlL2NydGxpY2Vuc2UudHh0CmluZGV4IDkzNmJjNWEuLmY4Njg0MWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL21zaS9jcnRsaWNlbnNlLnR4dAorKysgYi9Ub29scy9tc2kvZXhlL2NydGxpY2Vuc2UudHh0CkBAIC01LDExICs1LDggQEAKIAogVGhpcyBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGFuZCB1c2VzIE1pY3Jvc29mdCBEaXN0cmlidXRhYmxlIENvZGUsCiBjb3B5cmlnaHRlZCBieSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIFRoZSBNaWNyb3NvZnQgRGlzdHJpYnV0YWJsZSBDb2RlCi1pbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZpbGVzOgotCi1tc3ZjcjkwLmRsbAotbXN2Y3A5MC5kbGwKLW1zdmNtOTAuZGxsCitpcyBlbWJlZGRlZCBpbiBlYWNoIC5leGUsIC5kbGwgYW5kIC5weWQgZmlsZSBhcyBhIHJlc3VsdCBvZiBydW5uaW5nCit0aGUgY29kZSB0aHJvdWdoIGEgbGlua2VyLgogCiBJZiB5b3UgZnVydGhlciBkaXN0cmlidXRlIHByb2dyYW1zIHRoYXQgaW5jbHVkZSB0aGUgTWljcm9zb2Z0CiBEaXN0cmlidXRhYmxlIENvZGUsIHlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSByZXN0cmljdGlvbnMgb24KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9leGUvZXhlLndpeHByb2ogYi9Ub29scy9tc2kvZXhlL2V4ZS53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNmE2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvZXhlL2V4ZS53aXhwcm9qCkBAIC0wLDAgKzEsNDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPns2QkQ1MzMwNS1CMDNFLTQ5REMtODVGQi01NTUxQjhDQ0M4NDN9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgorICAgICAgICA8T3V0cHV0TmFtZT5leGU8L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRUeXBlPlBhY2thZ2U8L091dHB1dFR5cGU+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8IS0tIFNob3J0Y3V0IHZhbGlkYXRpb24gaXMgbm90IG5lY2Vzc2FyeSAtLT4KKyAgICAgICAgPFN1cHByZXNzSUNFcz5JQ0U0MzwvU3VwcHJlc3NJQ0VzPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS5wcm9wcyIgLz4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJleGUud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJleGVfZmlsZXMud3hzIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxFbWJlZGRlZFJlc291cmNlIEluY2x1ZGU9Iioud3hsIiAvPgorICAgICAgICA8V3hsVGVtcGxhdGUgSW5jbHVkZT0iKi53eGxfdGVtcGxhdGUiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPFRhcmdldCBOYW1lPSJfR2VuZXJhdGVMaWNlbnNlIiBBZnRlclRhcmdldHM9IlByZXBhcmVGb3JCdWlsZCI+CisgICAgICAgIDxJdGVtR3JvdXA+CisgICAgICAgICAgICA8TGljZW5zZUZpbGVzIEluY2x1ZGU9IiQoUHlTb3VyY2VQYXRoKUxJQ0VOU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNydGxpY2Vuc2UudHh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGJ6MkRpcilMSUNFTlNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG9wZW5zc2xEaXIpTElDRU5TRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0Y2xEaXIpbGljZW5zZS50ZXJtczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0a0RpcilsaWNlbnNlLnRlcm1zOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRpeERpcilsaWNlbnNlLnRlcm1zIiAvPgorICAgICAgICAgICAgPF9MaWNlbnNlRmlsZXMgSW5jbHVkZT0iQChMaWNlbnNlRmlsZXMpIj4KKyAgICAgICAgICAgICAgICA8Q29udGVudD4kKFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCUoRnVsbFBhdGgpKSk8L0NvbnRlbnQ+CisgICAgICAgICAgICA8L19MaWNlbnNlRmlsZXM+CisgICAgICAgIDwvSXRlbUdyb3VwPgorICAgICAgICAKKyAgICAgICAgPFdyaXRlTGluZXNUb0ZpbGUgRmlsZT0iJChCdWlsZFBhdGgpTElDRU5TRSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcndyaXRlPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lcz0iQChfTGljZW5zZUZpbGVzLT4nJShDb250ZW50KScpIiAvPgorICAgIDwvVGFyZ2V0PgorICAgICAgICAKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9leGUvZXhlLnd4cyBiL1Rvb2xzL21zaS9leGUvZXhlLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTRjZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2V4ZS9leGUud3hzCkBAIC0wLDAgKzEsMzMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8UHJvZHVjdCBJZD0iKiIgTGFuZ3VhZ2U9IiEobG9jLkxDSUQpIiBOYW1lPSIhKGxvYy5UaXRsZSkiIFZlcnNpb249IiQodmFyLlZlcnNpb24pIiBNYW51ZmFjdHVyZXI9IiEobG9jLk1hbnVmYWN0dXJlcikiIFVwZ3JhZGVDb2RlPSIkKHZhci5VcGdyYWRlQ29kZSkiPgorICAgICAgICA8UGFja2FnZSBJbnN0YWxsZXJWZXJzaW9uPSIzMDAiIENvbXByZXNzZWQ9InllcyIgSW5zdGFsbFNjb3BlPSJwZXJVc2VyIiBQbGF0Zm9ybT0iJCh2YXIuUGxhdGZvcm0pIiAvPgorICAgICAgICA8TWVkaWFUZW1wbGF0ZSBFbWJlZENhYj0ieWVzIiBDb21wcmVzc2lvbkxldmVsPSJoaWdoIiAvPgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5UmVmIElkPSJVcGdyYWRlVGFibGUiIC8+CisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iUkVHSVNUUllLRVkiIC8+CisgICAgICAgIAorICAgICAgICA8RmVhdHVyZSBJZD0iRGVmYXVsdEZlYXR1cmUiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9ImV4ZV9weXRob24iIFByaW1hcnk9InllcyIgLz4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0iZXhlX3R4dCIgLz4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0iZXhlX2ljb25zIiAvPgorICAgICAgICAgICAgPENvbXBvbmVudFJlZiBJZD0iT3B0aW9uYWxGZWF0dXJlIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IlNob3J0Y3V0cyIgQWxsb3dBZHZlcnRpc2U9Im5vIiBUaXRsZT0iIShsb2MuVGl0bGUpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb24pIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0iZXhlX3B5dGhvbiIgLz4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9ImV4ZV9zaG9ydGN1dCIgRGlyZWN0b3J5PSJNZW51RGlyIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8U2hvcnRjdXQgSWQ9InB5dGhvbi5leGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldD0iWyNweXRob24uZXhlXSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iIShsb2MuU2hvcnRjdXROYW1lKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb249IiEobG9jLlNob3J0Y3V0RGVzY3JpcHRpb24pIgorICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JraW5nRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5IiAvPgorICAgICAgICAgICAgICAgIDxSZW1vdmVGb2xkZXIgSWQ9IlJlbW92ZV9NZW51RGlyIiBEaXJlY3Rvcnk9Ik1lbnVEaXIiIE9uPSJ1bmluc3RhbGwiIC8+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5S2V5IFJvb3Q9IkhLTVUiIEtleT0iW1JFR0lTVFJZS0VZXSI+CisgICAgICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIEtleT0iSW5zdGFsbFBhdGhcSW5zdGFsbEdyb3VwIiBUeXBlPSJzdHJpbmciIFZhbHVlPSIhKGxvYy5Qcm9kdWN0TmFtZSkiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgS2V5PSJJbnN0YWxsZWRGZWF0dXJlcyIgTmFtZT0iU2hvcnRjdXRzIiBUeXBlPSJzdHJpbmciIFZhbHVlPSIkKHZhci5WZXJzaW9uKSIgLz4KKyAgICAgICAgICAgICAgICA8L1JlZ2lzdHJ5S2V5PgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvRmVhdHVyZT4KKyAgICA8L1Byb2R1Y3Q+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9leGUvZXhlX2Qud2l4cHJvaiBiL1Rvb2xzL21zaS9leGUvZXhlX2Qud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzU0NWNhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2V4ZS9leGVfZC53aXhwcm9qCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPntCMUNBNzM5Qy04REIwLTQwM0ItOTAxMC1ENzk1MDc1MDdDRTl9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgorICAgICAgICA8T3V0cHV0TmFtZT5leGVfZDwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iZXhlX2Qud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJleGVfZmlsZXMud3hzIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxFbWJlZGRlZFJlc291cmNlIEluY2x1ZGU9Iioud3hsIiAvPgorICAgICAgICA8V3hsVGVtcGxhdGUgSW5jbHVkZT0iKi53eGxfdGVtcGxhdGUiIC8+CisgICAgPC9JdGVtR3JvdXA+CisKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9leGUvZXhlX2Qud3hzIGIvVG9vbHMvbXNpL2V4ZS9leGVfZC53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkYjZiYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9leGUvZXhlX2Qud3hzCkBAIC0wLDAgKzEsMTMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8UHJvZHVjdCBJZD0iKiIgTGFuZ3VhZ2U9IiEobG9jLkxDSUQpIiBOYW1lPSIhKGxvYy5UaXRsZV9kKSIgVmVyc2lvbj0iJCh2YXIuVmVyc2lvbikiIE1hbnVmYWN0dXJlcj0iIShsb2MuTWFudWZhY3R1cmVyKSIgVXBncmFkZUNvZGU9IiQodmFyLlVwZ3JhZGVDb2RlKSI+CisgICAgICAgIDxQYWNrYWdlIEluc3RhbGxlclZlcnNpb249IjMwMCIgQ29tcHJlc3NlZD0ieWVzIiBJbnN0YWxsU2NvcGU9InBlclVzZXIiIFBsYXRmb3JtPSIkKHZhci5QbGF0Zm9ybSkiIC8+CisgICAgICAgIDxNZWRpYVRlbXBsYXRlIEVtYmVkQ2FiPSJ5ZXMiIENvbXByZXNzaW9uTGV2ZWw9ImhpZ2giIC8+CisgICAgICAgIAorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlVwZ3JhZGVUYWJsZSIgLz4KKyAgICAgICAgCisgICAgICAgIDxGZWF0dXJlIElkPSJEZWJ1Z0JpbmFyaWVzIiBBbGxvd0FkdmVydGlzZT0ibm8iIFRpdGxlPSIhKGxvYy5UaXRsZV9kKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uX2QpIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0iZXhlX3B5dGhvbl9kIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvZXhlL2V4ZV9lbi1VUy53eGxfdGVtcGxhdGUgYi9Ub29scy9tc2kvZXhlL2V4ZV9lbi1VUy53eGxfdGVtcGxhdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3ZmJlNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9leGUvZXhlX2VuLVVTLnd4bF90ZW1wbGF0ZQpAQCAtMCwwICsxLDcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IkRlc2NyaXB0b3IiPkV4ZWN1dGFibGVzPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iU2hvcnREZXNjcmlwdG9yIj5leGVjdXRhYmxlPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iU2hvcnRjdXROYW1lIj5QeXRob24ge3tTaG9ydFZlcnNpb259fSAoe3tCaXRuZXNzfX0pPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iU2hvcnRjdXREZXNjcmlwdGlvbiI+TGF1bmNoZXMgdGhlICEobG9jLlByb2R1Y3ROYW1lKSBpbnRlcnByZXRlci48L1N0cmluZz4KKzwvV2l4TG9jYWxpemF0aW9uPgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2V4ZS9leGVfZmlsZXMud3hzIGIvVG9vbHMvbXNpL2V4ZS9leGVfZmlsZXMud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNDdiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvZXhlL2V4ZV9maWxlcy53eHMKQEAgLTAsMCArMSw3NiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJleGVfdHh0Ij4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9IkxJQ0VOU0UudHh0IiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9IkxJQ0VOU0UudHh0IiBTb3VyY2U9IkxJQ0VOU0UiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iTkVXUy50eHQiIERpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0iTkVXUy50eHQiIFNvdXJjZT0iIShiaW5kcGF0aC5zcmMpTWlzY1xORVdTIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9IlJFQURNRS50eHQiIERpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0iUkVBRE1FLnR4dCIgU291cmNlPSIhKGJpbmRwYXRoLnNyYylSRUFETUUiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+CisKKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iUkVHSVNUUllLRVkiIC8+CisgICAgICAgIAorICAgICAgICA8Q29tcG9uZW50R3JvdXAgSWQ9ImV4ZV9weXRob24iPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0icHl0aG9uLmV4ZSIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSIkKHZhci5QeXRob25FeGVDb21wb25lbnRHdWlkKSI+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0icHl0aG9uLmV4ZSIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxSZWdpc3RyeUtleSBSb290PSJIS01VIiBLZXk9IltSRUdJU1RSWUtFWV0iPgorICAgICAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBLZXk9Ikluc3RhbGxQYXRoIiBUeXBlPSJzdHJpbmciIFZhbHVlPSJbSW5zdGFsbERpcmVjdG9yeV0iIEtleVBhdGg9Im5vIiAvPgorICAgICAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBLZXk9Ikluc3RhbGxQYXRoIiBOYW1lPSJFeGVjdXRhYmxlUGF0aCIgVHlwZT0ic3RyaW5nIiBWYWx1ZT0iWyNweXRob24uZXhlXSIgS2V5UGF0aD0ibm8iIC8+CisgICAgICAgICAgICAgICAgPC9SZWdpc3RyeUtleT4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0icHl0aG9udy5leGUiIERpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iJCh2YXIuUHl0aG9ud0V4ZUNvbXBvbmVudEd1aWQpIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBOYW1lPSJweXRob253LmV4ZSIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJ2Y3J1bnRpbWUxNDAuZGxsIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9InZjcnVudGltZTE0MC5kbGwiIFNvdXJjZT0iIShiaW5kcGF0aC5yZWRpc3QpdmNydW50aW1lMTQwLmRsbCIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKworICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJleGVfcHl0aG9uX3N5bWJvbHMiPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0icHl0aG9uLnBkYiIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBOYW1lPSJweXRob24ucGRiIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJweXRob253LnBkYiIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBOYW1lPSJweXRob253LnBkYiIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+CisgICAgICAgIAorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJleGVfcHl0aG9uX2QiPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0icHl0aG9uX2QuZXhlIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9InB5dGhvbl9kLmV4ZSIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0icHl0aG9uX2QucGRiIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9InB5dGhvbl9kLnBkYiIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0icHl0aG9ud19kLmV4ZSIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBOYW1lPSJweXRob253X2QuZXhlIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJweXRob253X2QucGRiIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9InB5dGhvbndfZC5wZGIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgPC9Db21wb25lbnRHcm91cD4KKyAgICA8L0ZyYWdtZW50PgorICAgIAorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJleGVfaWNvbnMiPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0icHkuaWNvIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9InB5LmljbyIgU291cmNlPSIhKGJpbmRwYXRoLnNyYylQQ1xweS5pY28iIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0icHljLmljbyIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBOYW1lPSJweWMuaWNvIiBTb3VyY2U9IiEoYmluZHBhdGguc3JjKVBDXHB5Yy5pY28iIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9leGUvZXhlX3BkYi53aXhwcm9qIGIvVG9vbHMvbXNpL2V4ZS9leGVfcGRiLndpeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0Yzg2OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9leGUvZXhlX3BkYi53aXhwcm9qCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPns0QTFGNzA0NS04RUUyLTQyNzYtQUJCOC01RTBDNDBFNUYzOEJ9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgorICAgICAgICA8T3V0cHV0TmFtZT5leGVfcGRiPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0VHlwZT5QYWNrYWdlPC9PdXRwdXRUeXBlPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS5wcm9wcyIgLz4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJleGVfcGRiLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iZXhlX2ZpbGVzLnd4cyIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8RW1iZWRkZWRSZXNvdXJjZSBJbmNsdWRlPSIqLnd4bCIgLz4KKyAgICAgICAgPFd4bFRlbXBsYXRlIEluY2x1ZGU9Iioud3hsX3RlbXBsYXRlIiAvPgorICAgIDwvSXRlbUdyb3VwPgorCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvZXhlL2V4ZV9wZGIud3hzIGIvVG9vbHMvbXNpL2V4ZS9leGVfcGRiLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjUwOTRmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2V4ZS9leGVfcGRiLnd4cwpAQCAtMCwwICsxLDEzIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPFByb2R1Y3QgSWQ9IioiIExhbmd1YWdlPSIhKGxvYy5MQ0lEKSIgTmFtZT0iIShsb2MuVGl0bGVQZGIpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgPE1lZGlhVGVtcGxhdGUgRW1iZWRDYWI9InllcyIgQ29tcHJlc3Npb25MZXZlbD0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IlN5bWJvbHMiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlUGRiKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uUGRiKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9ImV4ZV9weXRob25fc3ltYm9scyIgLz4KKyAgICAgICAgPC9GZWF0dXJlPgorICAgIDwvUHJvZHVjdD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2dlbmVyYXRlX21kNS5weSBiL1Rvb2xzL21zaS9nZW5lcmF0ZV9tZDUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0YzE0NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9nZW5lcmF0ZV9tZDUucHkKQEAgLTAsMCArMSwyNyBAQAoraW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitkZWYgbWFpbigpOgorICAgIGZpbGVuYW1lcywgaGFzaGVzLCBzaXplcyA9IFtdLCBbXSwgW10KKworICAgIGZvciBmaWxlIGluIHN5cy5hcmd2WzE6XToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZpbGUpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgbWQ1ID0gaGFzaGxpYi5tZDUoKQorICAgICAgICAgICAgbWQ1LnVwZGF0ZShkYXRhKQorICAgICAgICAgICAgZmlsZW5hbWVzLmFwcGVuZChvcy5wYXRoLnNwbGl0KGZpbGUpWzFdKQorICAgICAgICAgICAgaGFzaGVzLmFwcGVuZChtZDUuaGV4ZGlnZXN0KCkpCisgICAgICAgICAgICBzaXplcy5hcHBlbmQoc3RyKGxlbihkYXRhKSkpCisKKyAgICBwcmludCgnezo0MHN9ICB7OjwzMnN9ICB7Ojw5c30nLmZvcm1hdCgnRmlsZScsICdNRDUnLCAnU2l6ZScpKQorICAgIGZvciBmLCBoLCBzIGluIHppcChmaWxlbmFtZXMsIGhhc2hlcywgc2l6ZXMpOgorICAgICAgICBwcmludCgnezo0MHN9ICB7Oj4zMnN9ICB7Oj45c30nLmZvcm1hdChmLCBoLCBzKSkKKworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQoaW50KG1haW4oKSBvciAwKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9nZXRfZXh0ZXJuYWxzLmJhdCBiL1Rvb2xzL21zaS9nZXRfZXh0ZXJuYWxzLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFkNzVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2dldF9leHRlcm5hbHMuYmF0CkBAIC0wLDAgKzEsMjcgQEAKK0BlY2hvIG9mZg0KK3NldGxvY2FsDQorcmVtIFNpbXBsZSBzY3JpcHQgdG8gZmV0Y2ggc291cmNlIGZvciBleHRlcm5hbCB0b29scw0KKw0KK3doZXJlIC9RIHN2bg0KK2lmIEVSUk9STEVWRUwgMSAoDQorICAgIGVjaG8uc3ZuLmV4ZSBtdXN0IGJlIG9uIHlvdXIgUEFUSCB0byBnZXQgZXh0ZXJuYWwgdG9vbHMuDQorICAgIGVjaG8uVHJ5IFRvcnRvaXNlU1ZOIChodHRwOi8vdG9ydG9pc2Vzdm4ubmV0L14pIGFuZCBiZSBzdXJlIHRvIGNoZWNrIHRoZQ0KKyAgICBlY2hvLmNvbW1hbmQgbGluZSB0b29scyBvcHRpb24uDQorICAgIHBvcGQNCisgICAgZXhpdCAvYiAxDQorKQ0KKw0KK2lmIG5vdCBleGlzdCAiJX5kcDAuLlwuLlxleHRlcm5hbHMiIG1rZGlyICIlfmRwMC4uXC4uXGV4dGVybmFscyINCitwdXNoZCAiJX5kcDAuLlwuLlxleHRlcm5hbHMiDQorDQoraWYgIiVTVk5ST09UJSI9PSIiIHNldCBTVk5ST09UPWh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC8NCisNCitpZiBub3QgZXhpc3QgIndpbmRvd3MtaW5zdGFsbGVyXC5zdm4iICgNCisgICAgZWNoby5DaGVja2luZyBvdXQgaW5zdGFsbGVyIGRlcGVuZGVuY2llcyB0byAlQ0QlXHdpbmRvd3MtaW5zdGFsbGVyDQorICAgIHN2biBjbyAlU1ZOUk9PVCV3aW5kb3dzLWluc3RhbGxlcg0KKykgZWxzZSAoDQorICAgIGVjaG8uVXBkYXRpbmcgaW5zdGFsbGVyIGRlcGVuZGVuY2llcyBpbiAlQ0QlXHdpbmRvd3MtaW5zdGFsbGVyDQorICAgIHN2biB1cCB3aW5kb3dzLWluc3RhbGxlcg0KKykNCisNCitwb3BkDQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2xhdW5jaGVyL2xhdW5jaGVyLndpeHByb2ogYi9Ub29scy9tc2kvbGF1bmNoZXIvbGF1bmNoZXIud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWE5ZGNiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2xhdW5jaGVyL2xhdW5jaGVyLndpeHByb2oKQEAgLTAsMCArMSwzNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+ezkyMUNGMEU2LUFFQkMtNDM3Ni1CQTFELUNENDZFQkZFNkRBNX08L1Byb2plY3RHdWlkPgorICAgICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+CisgICAgICAgIDxPdXRwdXROYW1lPmxhdW5jaGVyPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0VHlwZT5QYWNrYWdlPC9PdXRwdXRUeXBlPgorICAgICAgICA8RGVmaW5lQ29uc3RhbnRzPlVwZ3JhZGVDb2RlPTFCNjhBMEVDLTRERDMtNTEzNC04NDBFLTczODU0QjA4NjNGMTskKERlZmluZUNvbnN0YW50cyk8L0RlZmluZUNvbnN0YW50cz4KKyAgICAgICAgPElnbm9yZUNvbW1vbld4bFRlbXBsYXRlcz50cnVlPC9JZ25vcmVDb21tb25XeGxUZW1wbGF0ZXM+CisgICAgICAgIDxTdXBwcmVzc0lDRXM+SUNFODA8L1N1cHByZXNzSUNFcz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0ibGF1bmNoZXIud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJsYXVuY2hlcl9maWxlcy53eHMiIC8+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9ImxhdW5jaGVyX3JlZy53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEVtYmVkZGVkUmVzb3VyY2UgSW5jbHVkZT0iKi53eGwiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPFRhcmdldCBOYW1lPSJfRW5zdXJlUHlFeDg2IiBDb25kaXRpb249IiFFeGlzdHMoJyQoQnVpbGRQYXRoMzIpcHkuZXhlJykiIEJlZm9yZVRhcmdldHM9IlByZXBhcmVGb3JCdWlsZCI+CisgICAgICAgIDxNU0J1aWxkIFByb2plY3RzPSIkKFB5U291cmNlUGF0aClQQ0J1aWxkXHB5bGF1bmNoZXIudmN4cHJvaiIgUHJvcGVydGllcz0iUGxhdGZvcm09V2luMzIiIC8+CisgICAgPC9UYXJnZXQ+CisgICAgPFRhcmdldCBOYW1lPSJfRW5zdXJlUHl3RXg4NiIgQ29uZGl0aW9uPSIhRXhpc3RzKCckKEJ1aWxkUGF0aDMyKXB5dy5leGUnKSIgQmVmb3JlVGFyZ2V0cz0iUHJlcGFyZUZvckJ1aWxkIj4KKyAgICAgICAgPE1TQnVpbGQgUHJvamVjdHM9IiQoUHlTb3VyY2VQYXRoKVBDQnVpbGRccHl3bGF1bmNoZXIudmN4cHJvaiIgUHJvcGVydGllcz0iUGxhdGZvcm09V2luMzIiIC8+CisgICAgPC9UYXJnZXQ+CisgICAgPFRhcmdldCBOYW1lPSJfRW5zdXJlUHlTaGVsbEV4dDg2IiBDb25kaXRpb249IiFFeGlzdHMoJyQoQnVpbGRQYXRoMzIpcHlzaGVsbGV4dC5kbGwnKSIgQmVmb3JlVGFyZ2V0cz0iUHJlcGFyZUZvckJ1aWxkIj4KKyAgICAgICAgPE1TQnVpbGQgUHJvamVjdHM9IiQoUHlTb3VyY2VQYXRoKVBDQnVpbGRccHlzaGVsbGV4dC52Y3hwcm9qIiBQcm9wZXJ0aWVzPSJQbGF0Zm9ybT1XaW4zMiIgLz4KKyAgICA8L1RhcmdldD4KKyAgICA8VGFyZ2V0IE5hbWU9Il9FbnN1cmVQeVNoZWxsRXh0NjQiIENvbmRpdGlvbj0iIUV4aXN0cygnJChCdWlsZFBhdGg2NClweXNoZWxsZXh0LmRsbCcpIiBCZWZvcmVUYXJnZXRzPSJQcmVwYXJlRm9yQnVpbGQiPgorICAgICAgICA8TVNCdWlsZCBQcm9qZWN0cz0iJChQeVNvdXJjZVBhdGgpUENCdWlsZFxweXNoZWxsZXh0LnZjeHByb2oiIFByb3BlcnRpZXM9IlBsYXRmb3JtPXg2NCIgLz4KKyAgICA8L1RhcmdldD4KKyAgICAKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9sYXVuY2hlci9sYXVuY2hlci53eHMgYi9Ub29scy9tc2kvbGF1bmNoZXIvbGF1bmNoZXIud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZDg3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvbGF1bmNoZXIvbGF1bmNoZXIud3hzCkBAIC0wLDAgKzEsNDMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8UHJvZHVjdCBJZD0iKiIgTGFuZ3VhZ2U9IiEobG9jLkxDSUQpIiBOYW1lPSIhKGxvYy5UaXRsZSkiIFZlcnNpb249IiQodmFyLlZlcnNpb24pIiBNYW51ZmFjdHVyZXI9IiEobG9jLk1hbnVmYWN0dXJlcikiIFVwZ3JhZGVDb2RlPSIkKHZhci5VcGdyYWRlQ29kZSkiPgorICAgICAgICA8UGFja2FnZSBJbnN0YWxsZXJWZXJzaW9uPSIzMDAiIENvbXByZXNzZWQ9InllcyIgSW5zdGFsbFNjb3BlPSJwZXJVc2VyIiBQbGF0Zm9ybT0iJCh2YXIuUGxhdGZvcm0pIiAvPgorICAgICAgICA8TWVkaWFUZW1wbGF0ZSBFbWJlZENhYj0ieWVzIiBDb21wcmVzc2lvbkxldmVsPSJoaWdoIiAvPgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5IElkPSJTdXBwcmVzc19UQVJHRVRESVJfQ2hlY2siIFZhbHVlPSIxIiAvPgorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IkFSUFBST0RVQ1RJQ09OIiAvPgorCisgICAgICAgIDxGZWF0dXJlIElkPSJEZWZhdWx0RmVhdHVyZSIgQWxsb3dBZHZlcnRpc2U9Im5vIiBUaXRsZT0iIShsb2MuVGl0bGUpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb24pIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0ibGF1bmNoZXJfZXhlIiBQcmltYXJ5PSJ5ZXMiIC8+CisgICAgICAgIDwvRmVhdHVyZT4KKyAgICAgICAgPEZlYXR1cmUgSWQ9IkFzc29jaWF0ZUZpbGVzIiBBbGxvd0FkdmVydGlzZT0ibm8iIFRpdGxlPSIhKGxvYy5UaXRsZSkiIERlc2NyaXB0aW9uPSIhKGxvYy5EZXNjcmlwdGlvbikiPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJsYXVuY2hlcl9leGUiIC8+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9ImxhdW5jaGVyX3JlZyIgLz4KKyAgICAgICAgPC9GZWF0dXJlPgorICAgICAgICAKKyAgICAgICAgPERpcmVjdG9yeSBJZD0iVEFSR0VURElSIiBOYW1lPSJTb3VyY2VEaXIiPgorICAgICAgICAgICAgPERpcmVjdG9yeSBJZD0iTGF1bmNoZXJJbnN0YWxsRGlyZWN0b3J5IiAvPgorICAgICAgICA8L0RpcmVjdG9yeT4KKyAgICAgICAgCisgICAgICAgIDxDdXN0b21BY3Rpb24gSWQ9IlNldExhdW5jaGVySW5zdGFsbERpcmVjdG9yeUxNIiBQcm9wZXJ0eT0iTGF1bmNoZXJJbnN0YWxsRGlyZWN0b3J5IiBWYWx1ZT0iW1dpbmRvd3NGb2xkZXJdIiAvPgorICAgICAgICA8Q3VzdG9tQWN0aW9uIElkPSJTZXRMYXVuY2hlckluc3RhbGxEaXJlY3RvcnlDVSIgUHJvcGVydHk9IkxhdW5jaGVySW5zdGFsbERpcmVjdG9yeSIgVmFsdWU9IltMb2NhbEFwcERhdGFGb2xkZXJdUHJvZ3JhbXNcUHl0aG9uXExhdW5jaGVyIiAvPgorICAgICAgICAKKyAgICAgICAgPEluc3RhbGxFeGVjdXRlU2VxdWVuY2U+CisgICAgICAgICAgICA8Q3VzdG9tIEJlZm9yZT0iU2V0TGF1bmNoZXJJbnN0YWxsRGlyZWN0b3J5TE0iIEFjdGlvbj0iU2V0TGF1bmNoZXJJbnN0YWxsRGlyZWN0b3J5Q1UiPk5PVCBJbnN0YWxsZWQgQU5EIE5PVCBBTExVU0VSUz0xPC9DdXN0b20+CisgICAgICAgICAgICA8Q3VzdG9tIEJlZm9yZT0iQ29zdEZpbmFsaXplIiBBY3Rpb249IlNldExhdW5jaGVySW5zdGFsbERpcmVjdG9yeUxNIj5OT1QgSW5zdGFsbGVkIEFORCBBTExVU0VSUz0xPC9DdXN0b20+CisKKyAgICAgICAgICAgIDxSZW1vdmVFeGlzdGluZ1Byb2R1Y3RzIEFmdGVyPSJJbnN0YWxsVmFsaWRhdGUiPlVQR1JBREUgb3IgUkVNT1ZFXzM1MF9MQVVOQ0hFUjwvUmVtb3ZlRXhpc3RpbmdQcm9kdWN0cz4KKyAgICAgICAgPC9JbnN0YWxsRXhlY3V0ZVNlcXVlbmNlPgorCisgICAgICAgIDwhLS0gUHl0aG9uIDMuNS4wIHNoaXBwZWQgd2l0aCBhIGRpZmZlcmVudCBVcGdyYWRlQ29kZSAtLT4KKyAgICAgICAgPFVwZ3JhZGUgSWQ9IkE3MTUzMEI5LUU4OUQtNTNEQi05QzJELUM2RDc1NTE4NzZEOCI+CisgICAgICAgICAgICA8VXBncmFkZVZlcnNpb24gTWluaW11bT0iMC4wLjAuMCIgUHJvcGVydHk9IlJFTU9WRV8zNTBfTEFVTkNIRVIiIC8+CisgICAgICAgIDwvVXBncmFkZT4KKyAgICAgICAgPCEtLSBQeXRob24gMy42LjBhMSBzaGlwcGVkIHdpdGggYSBkaWZmZXJlbnQgVXBncmFkZUNvZGUgLS0+CisgICAgICAgIDxVcGdyYWRlIElkPSIzOTQ3NTBDMC03ODgwLTVBOEYtOTk5Ri05MzM5NjVGQkNGQjQiPgorICAgICAgICAgICAgPFVwZ3JhZGVWZXJzaW9uIE1heGltdW09IiQodmFyLlZlcnNpb24pIiBQcm9wZXJ0eT0iUkVNT1ZFXzM2MEExX0xBVU5DSEVSIiAvPgorICAgICAgICAgICAgPFVwZ3JhZGVWZXJzaW9uIE1pbmltdW09IiQodmFyLlZlcnNpb24pIiBQcm9wZXJ0eT0iQkxPQ0tfMzYwQTFfTEFVTkNIRVIiIC8+CisgICAgICAgIDwvVXBncmFkZT4KKyAgICAgICAgPENvbmRpdGlvbiBNZXNzYWdlPSIhKGxvYy5Ob0Rvd25ncmFkZSkiPkluc3RhbGxlZCBPUiBOT1QgQkxPQ0tfMzYwQTFfTEFVTkNIRVI8L0NvbmRpdGlvbj4KKyAgICA8L1Byb2R1Y3Q+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9sYXVuY2hlci9sYXVuY2hlcl9lbi1VUy53eGwgYi9Ub29scy9tc2kvbGF1bmNoZXIvbGF1bmNoZXJfZW4tVVMud3hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzFhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvbGF1bmNoZXIvbGF1bmNoZXJfZW4tVVMud3hsCkBAIC0wLDAgKzEsMTYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IkxDSUQiPjEwMzM8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJDdWx0dXJlIj5lbi11czwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IlByb2R1Y3ROYW1lIj5QeXRob24gTGF1bmNoZXI8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJUaXRsZSI+UHl0aG9uIExhdW5jaGVyPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iRGVzY3JpcHRpb24iPlB5dGhvbiBMYXVuY2hlcjwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9Ik1hbnVmYWN0dXJlciI+UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJOb0Rvd25ncmFkZSI+QSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBQeXRob24gbGF1bmNoZXIgaXMgYWxyZWFkeSBpbnN0YWxsZWQuPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iTm9UYXJnZXREaXIiPlRoZSBUQVJHRVRESVIgdmFyaWFibGUgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGludm9raW5nIHRoaXMgaW5zdGFsbGVyLjwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IlB5dGhvbkZpbGVEZXNjcmlwdGlvbiI+UHl0aG9uIEZpbGU8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJQeXRob25Ob0NvbkZpbGVEZXNjcmlwdGlvbiI+UHl0aG9uIEZpbGUgKG5vIGNvbnNvbGUpPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iUHl0aG9uQ29tcGlsZWRGaWxlRGVzY3JpcHRpb24iPkNvbXBpbGVkIFB5dGhvbiBGaWxlPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iUHl0aG9uQXJjaGl2ZUZpbGVEZXNjcmlwdGlvbiI+UHl0aG9uIFppcCBBcHBsaWNhdGlvbiBGaWxlPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iUHl0aG9uTm9Db25BcmNoaXZlRmlsZURlc2NyaXB0aW9uIj5QeXRob24gWmlwIEFwcGxpY2F0aW9uIEZpbGUgKG5vIGNvbnNvbGUpPC9TdHJpbmc+Cis8L1dpeExvY2FsaXphdGlvbj4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9sYXVuY2hlci9sYXVuY2hlcl9maWxlcy53eHMgYi9Ub29scy9tc2kvbGF1bmNoZXIvbGF1bmNoZXJfZmlsZXMud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzlkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvbGF1bmNoZXIvbGF1bmNoZXJfZmlsZXMud3hzCkBAIC0wLDAgKzEsMzggQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0ibGF1bmNoZXJfZXhlIj4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9InB5LmV4ZSIgRGlyZWN0b3J5PSJMYXVuY2hlckluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IntCNTEwNzQwMi02OTU4LTQ2MUItOEIwQS00MDM3RDMzMjcxNjB9Ij4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0icHkuZXhlIiBOYW1lPSJweS5leGUiIFNvdXJjZT0icHkuZXhlIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgUm9vdD0iSEtNVSIgS2V5PSJTb2Z0d2FyZVxQeXRob25cUHlMYXVuY2hlciIgVmFsdWU9IlsjcHkuZXhlXSIgVHlwZT0ic3RyaW5nIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJweXcuZXhlIiBEaXJlY3Rvcnk9IkxhdW5jaGVySW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iezhFNTJCOENELTQ4QkItNEQ3NC04NENELTYyMzhCQ0QxMUYyMH0iPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJweXcuZXhlIiBOYW1lPSJweXcuZXhlIiBTb3VyY2U9InB5dy5leGUiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorCisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJsYXVuY2hlcl9wYXRoX2N1IiBEaXJlY3Rvcnk9IkxhdW5jaGVySW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iezk1QUVCOTMwLTM2N0MtNDc1Qy1BMTdFLUE4OUJGQ0Q0QzY3MH0iPgorICAgICAgICAgICAgICAgIDxDb25kaXRpb24+Tk9UIEFMTFVTRVJTPTE8L0NvbmRpdGlvbj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBLZXlQYXRoPSJ5ZXMiIFJvb3Q9IkhLTVUiIEtleT0iU29mdHdhcmVcUHl0aG9uXFB5TGF1bmNoZXIiIE5hbWU9Ikluc3RhbGxEaXIiIFZhbHVlPSJbTGF1bmNoZXJJbnN0YWxsRGlyZWN0b3J5XSIgVHlwZT0ic3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIDxFbnZpcm9ubWVudCBJZD0iUEFUSF9DVSIgQWN0aW9uPSJzZXQiIE5hbWU9IlBBVEgiIFBhcnQ9ImZpcnN0IiBWYWx1ZT0iW0xhdW5jaGVySW5zdGFsbERpcmVjdG9yeV0iIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9ImxhdW5jaGVyX3BhdGhfbG0iIERpcmVjdG9yeT0iTGF1bmNoZXJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSJ7NEE0MUMzNjUtNEUyNy00RDM4LUE2RDEtNEEwMUI0QTY1MDBDfSI+CisgICAgICAgICAgICAgICAgPENvbmRpdGlvbj5BTExVU0VSUz0xPC9Db25kaXRpb24+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgS2V5UGF0aD0ieWVzIiBSb290PSJIS01VIiBLZXk9IlNvZnR3YXJlXFB5dGhvblxQeUxhdW5jaGVyIiBOYW1lPSJJbnN0YWxsRGlyIiBWYWx1ZT0iW0xhdW5jaGVySW5zdGFsbERpcmVjdG9yeV0iIFR5cGU9InN0cmluZyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorCisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJweXNoZWxsZXh0X2FtZDY0LmRsbCIgRGlyZWN0b3J5PSJMYXVuY2hlckluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IntFNzQxMUVGRC1GMURELTQwRUItQjBDNy00QkEwMkJGM0U3NUZ9IiBXaW42ND0ieWVzIj4KKyAgICAgICAgICAgICAgICA8Q29uZGl0aW9uPlZlcnNpb25OVDY0PC9Db25kaXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9InB5c2hlbGxleHRfYW1kNjQuZGxsIiBOYW1lPSJweXNoZWxsZXh0LmFtZDY0LmRsbCIgU291cmNlPSIhKGJpbmRwYXRoLkJ1aWxkNjQpXHB5c2hlbGxleHQuZGxsIj4KKyAgICAgICAgICAgICAgICAgICAgPENsYXNzIElkPSJ7QkVBMjE4RDItNjk1MC00OTdCLTk0MzQtNjE2ODNFQzA2NUZFfSIgQWR2ZXJ0aXNlPSJubyIgQ29udGV4dD0iSW5wcm9jU2VydmVyMzIiIFRocmVhZGluZ01vZGVsPSJhcGFydG1lbnQiIC8+CisgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJweXNoZWxsZXh0X3dpbjMyLmRsbCIgRGlyZWN0b3J5PSJMYXVuY2hlckluc3RhbGxEaXJlY3RvcnkiIEd1aWQ9IntDNTkzNjY5Ni05QTVBLTQ1QTAtQTgzMC1EMTcyQzMzMjkyODJ9Ij4KKyAgICAgICAgICAgICAgICA8Q29uZGl0aW9uPk5PVCBWZXJzaW9uTlQ2NDwvQ29uZGl0aW9uPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJweXNoZWxsZXh0X3dpbjMyLmRsbCIgTmFtZT0icHlzaGVsbGV4dC53aW4zMi5kbGwiIFNvdXJjZT0iIShiaW5kcGF0aC5CdWlsZDMyKVxweXNoZWxsZXh0LmRsbCI+CisgICAgICAgICAgICAgICAgICAgIDxDbGFzcyBJZD0ie0JFQTIxOEQyLTY5NTAtNDk3Qi05NDM0LTYxNjgzRUMwNjVGRX0iIEFkdmVydGlzZT0ibm8iIENvbnRleHQ9IklucHJvY1NlcnZlcjMyIiBUaHJlYWRpbmdNb2RlbD0iYXBhcnRtZW50IiAvPgorICAgICAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9sYXVuY2hlci9sYXVuY2hlcl9yZWcud3hzIGIvVG9vbHMvbXNpL2xhdW5jaGVyL2xhdW5jaGVyX3JlZy53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxOTYxYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9sYXVuY2hlci9sYXVuY2hlcl9yZWcud3hzCkBAIC0wLDAgKzEsNDYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0ibGF1bmNoZXJfcmVnIj4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9ImZpbGVfYXNzb2NpYXRpb24iIERpcmVjdG9yeT0iTGF1bmNoZXJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSJ7NUFGODREOUEtRDgyMC00NTZCLUIyMzAtNkUwMTA1QTUwMjc2fSI+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgS2V5UGF0aD0ieWVzIiBSb290PSJIS01VIiBLZXk9IlNvZnR3YXJlXFB5dGhvblxQeUxhdW5jaGVyIiBOYW1lPSJBc3NvY2lhdGVGaWxlcyIgVmFsdWU9IjEiIFR5cGU9ImludGVnZXIiIC8+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPFByb2dJZCBJZD0iUHl0aG9uLkZpbGUiIERlc2NyaXB0aW9uPSIhKGxvYy5QeXRob25GaWxlRGVzY3JpcHRpb24pIiBBZHZlcnRpc2U9Im5vIiBJY29uPSJweS5leGUiIEljb25JbmRleD0iMSI+CisgICAgICAgICAgICAgICAgICAgIDxFeHRlbnNpb24gSWQ9InB5IiBDb250ZW50VHlwZT0idGV4dC9wbGFpbiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8VmVyYiBJZD0ib3BlbiIgVGFyZ2V0RmlsZT0icHkuZXhlIiBBcmd1bWVudD0iJnF1b3Q7JUwmcXVvdDsgJSoiIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgIDwvUHJvZ0lkPgorICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIFJvb3Q9IkhLQ1IiIEtleT0iUHl0aG9uLkZpbGVcc2hlbGxleFxEcm9wSGFuZGxlciIgVmFsdWU9IntCRUEyMThEMi02OTUwLTQ5N0ItOTQzNC02MTY4M0VDMDY1RkV9IiBUeXBlPSJzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPFByb2dJZCBJZD0iUHl0aG9uLk5vQ29uRmlsZSIgRGVzY3JpcHRpb249IiEobG9jLlB5dGhvbk5vQ29uRmlsZURlc2NyaXB0aW9uKSIgQWR2ZXJ0aXNlPSJubyIgSWNvbj0icHkuZXhlIiBJY29uSW5kZXg9IjEiPgorICAgICAgICAgICAgICAgICAgICA8RXh0ZW5zaW9uIElkPSJweXciIENvbnRlbnRUeXBlPSJ0ZXh0L3BsYWluIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxWZXJiIElkPSJvcGVuIiBUYXJnZXRGaWxlPSJweXcuZXhlIiBBcmd1bWVudD0iJnF1b3Q7JUwmcXVvdDsgJSoiIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgIDwvUHJvZ0lkPgorICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIFJvb3Q9IkhLQ1IiIEtleT0iUHl0aG9uLk5vQ29uRmlsZVxzaGVsbGV4XERyb3BIYW5kbGVyIiBWYWx1ZT0ie0JFQTIxOEQyLTY5NTAtNDk3Qi05NDM0LTYxNjgzRUMwNjVGRX0iIFR5cGU9InN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8UHJvZ0lkIElkPSJQeXRob24uQ29tcGlsZWRGaWxlIiBEZXNjcmlwdGlvbj0iIShsb2MuUHl0aG9uQ29tcGlsZWRGaWxlRGVzY3JpcHRpb24pIiBBZHZlcnRpc2U9Im5vIiBJY29uPSJweS5leGUiIEljb25JbmRleD0iMiI+CisgICAgICAgICAgICAgICAgICAgIDxFeHRlbnNpb24gSWQ9InB5YyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8VmVyYiBJZD0ib3BlbiIgVGFyZ2V0RmlsZT0icHkuZXhlIiBBcmd1bWVudD0iJnF1b3Q7JUwmcXVvdDsgJSoiIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICA8RXh0ZW5zaW9uIElkPSJweW8iIC8+CisgICAgICAgICAgICAgICAgPC9Qcm9nSWQ+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgUm9vdD0iSEtDUiIgS2V5PSJQeXRob24uQ29tcGlsZWRGaWxlXHNoZWxsZXhcRHJvcEhhbmRsZXIiIFZhbHVlPSJ7QkVBMjE4RDItNjk1MC00OTdCLTk0MzQtNjE2ODNFQzA2NUZFfSIgVHlwZT0ic3RyaW5nIiAvPgorCisgICAgICAgICAgICAgICAgPFByb2dJZCBJZD0iUHl0aG9uLkFyY2hpdmVGaWxlIiBEZXNjcmlwdGlvbj0iIShsb2MuUHl0aG9uQXJjaGl2ZUZpbGVEZXNjcmlwdGlvbikiIEFkdmVydGlzZT0ibm8iIEljb249InB5LmV4ZSIgSWNvbkluZGV4PSIxIj4KKyAgICAgICAgICAgICAgICAgICAgPEV4dGVuc2lvbiBJZD0icHl6IiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8VmVyYiBJZD0ib3BlbiIgVGFyZ2V0RmlsZT0icHkuZXhlIiBBcmd1bWVudD0iJnF1b3Q7JUwmcXVvdDsgJSoiIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgIDwvUHJvZ0lkPgorICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIFJvb3Q9IkhLQ1IiIEtleT0iUHl0aG9uLkFyY2hpdmVGaWxlXHNoZWxsZXhcRHJvcEhhbmRsZXIiIFZhbHVlPSJ7QkVBMjE4RDItNjk1MC00OTdCLTk0MzQtNjE2ODNFQzA2NUZFfSIgVHlwZT0ic3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxQcm9nSWQgSWQ9IlB5dGhvbi5Ob0NvbkFyY2hpdmVGaWxlIiBEZXNjcmlwdGlvbj0iIShsb2MuUHl0aG9uTm9Db25BcmNoaXZlRmlsZURlc2NyaXB0aW9uKSIgQWR2ZXJ0aXNlPSJubyIgSWNvbj0icHkuZXhlIiBJY29uSW5kZXg9IjEiPgorICAgICAgICAgICAgICAgICAgICA8RXh0ZW5zaW9uIElkPSJweXp3IiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8VmVyYiBJZD0ib3BlbiIgVGFyZ2V0RmlsZT0icHl3LmV4ZSIgQXJndW1lbnQ9IiZxdW90OyVMJnF1b3Q7ICUqIiAvPgorICAgICAgICAgICAgICAgICAgICA8L0V4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICA8L1Byb2dJZD4KKyAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBSb290PSJIS0NSIiBLZXk9IlB5dGhvbi5Ob0NvbkFyY2hpdmVGaWxlXHNoZWxsZXhcRHJvcEhhbmRsZXIiIFZhbHVlPSJ7QkVBMjE4RDItNjk1MC00OTdCLTk0MzQtNjE2ODNFQzA2NUZFfSIgVHlwZT0ic3RyaW5nIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2xpYi9saWIud2l4cHJvaiBiL1Rvb2xzL21zaS9saWIvbGliLndpeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlNTg3OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9saWIvbGliLndpeHByb2oKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+ezExMzY3RTc2LTMzMzctNDYwMi04RjFFLTc3REI0RjM3MEQ3RX08L1Byb2plY3RHdWlkPgorICAgICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+CisgICAgICAgIDxPdXRwdXROYW1lPmxpYjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0ibGliLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0ibGliX2ZpbGVzLnd4cyIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8RW1iZWRkZWRSZXNvdXJjZSBJbmNsdWRlPSIqLnd4bCIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8RXhjbHVkZUZvbGRlcnMgSW5jbHVkZT0iTGliXHRlc3Q7TGliXHRlc3RzO0xpYlx0a2ludGVyO0xpYlxpZGxlbGliO0xpYlx0dXJ0bGVkZW1vIiAvPgorICAgICAgICA8SW5zdGFsbEZpbGVzIEluY2x1ZGU9IiQoUHlTb3VyY2VQYXRoKUxpYlwqKlwqIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGU9IiQoUHlTb3VyY2VQYXRoKUxpYlwqKlwqLnB5YzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFB5U291cmNlUGF0aClMaWJcKipcKi5weW87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChQeVNvdXJjZVBhdGgpTGliXHNpdGUtcGFja2FnZXNcUkVBRE1FOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAoRXhjbHVkZUZvbGRlcnMtPickKFB5U291cmNlUGF0aCklKElkZW50aXR5KVwqJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQChFeGNsdWRlRm9sZGVycy0+JyQoUHlTb3VyY2VQYXRoKSUoSWRlbnRpdHkpXCoqXConKSI+CisgICAgICAgICAgICA8U291cmNlQmFzZT4kKFB5U291cmNlUGF0aClMaWI8L1NvdXJjZUJhc2U+CisgICAgICAgICAgICA8U291cmNlPiEoYmluZHBhdGguc3JjKUxpYlw8L1NvdXJjZT4KKyAgICAgICAgICAgIDxUYXJnZXRCYXNlPiQoUHlTb3VyY2VQYXRoKUxpYjwvVGFyZ2V0QmFzZT4KKyAgICAgICAgICAgIDxUYXJnZXRfPkxpYlw8L1RhcmdldF8+CisgICAgICAgICAgICA8R3JvdXA+bGliX3B5PC9Hcm91cD4KKyAgICAgICAgPC9JbnN0YWxsRmlsZXM+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbGliL2xpYi53eHMgYi9Ub29scy9tc2kvbGliL2xpYi53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwNGJjYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9saWIvbGliLnd4cwpAQCAtMCwwICsxLDE3IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPFByb2R1Y3QgSWQ9IioiIExhbmd1YWdlPSIhKGxvYy5MQ0lEKSIgTmFtZT0iIShsb2MuVGl0bGUpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgPE1lZGlhVGVtcGxhdGUgRW1iZWRDYWI9InllcyIgQ29tcHJlc3Npb25MZXZlbD0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlJFR0lTVFJZS0VZIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IkRlZmF1bHRGZWF0dXJlIiBBbGxvd0FkdmVydGlzZT0ibm8iIFRpdGxlPSIhKGxvYy5UaXRsZSkiIERlc2NyaXB0aW9uPSIhKGxvYy5EZXNjcmlwdGlvbikiPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJsaWJfcHkiIC8+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9ImxpYl9maWxlcyIgLz4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0ibGliX2V4dGVuc2lvbnMiIC8+CisgICAgICAgICAgICA8Q29tcG9uZW50UmVmIElkPSJPcHRpb25hbEZlYXR1cmUiIC8+CisgICAgICAgIDwvRmVhdHVyZT4KKyAgICA8L1Byb2R1Y3Q+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9saWIvbGliX2Qud2l4cHJvaiBiL1Rvb2xzL21zaS9saWIvbGliX2Qud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdhODJjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2xpYi9saWJfZC53aXhwcm9qCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPns2QzQ0M0NEMy04MjU4LTQzMzUtQkEwMy00OURBOUMzNENFNER9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgorICAgICAgICA8T3V0cHV0TmFtZT5saWJfZDwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0ibGliX2Qud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJsaWJfZmlsZXMud3hzIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxFbWJlZGRlZFJlc291cmNlIEluY2x1ZGU9Iioud3hsIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIAorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL2xpYi9saWJfZC53eHMgYi9Ub29scy9tc2kvbGliL2xpYl9kLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThhNTMwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2xpYi9saWJfZC53eHMKQEAgLTAsMCArMSwxMyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxQcm9kdWN0IElkPSIqIiBMYW5ndWFnZT0iIShsb2MuTENJRCkiIE5hbWU9IiEobG9jLlRpdGxlX2QpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgPE1lZGlhVGVtcGxhdGUgRW1iZWRDYWI9InllcyIgQ29tcHJlc3Npb25MZXZlbD0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IkRlYnVnQmluYXJpZXMiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlX2QpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb25fZCkiPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJsaWJfZXh0ZW5zaW9uc19kIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbGliL2xpYl9lbi1VUy53eGwgYi9Ub29scy9tc2kvbGliL2xpYl9lbi1VUy53eGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1YmNjNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9saWIvbGliX2VuLVVTLnd4bApAQCAtMCwwICsxLDUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IkRlc2NyaXB0b3IiPlN0YW5kYXJkIExpYnJhcnk8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJTaG9ydERlc2NyaXB0b3IiPmxpYjwvU3RyaW5nPgorPC9XaXhMb2NhbGl6YXRpb24+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbGliL2xpYl9maWxlcy53eHMgYi9Ub29scy9tc2kvbGliL2xpYl9maWxlcy53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3OWE4ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9saWIvbGliX2ZpbGVzLnd4cwpAQCAtMCwwICsxLDc5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPD9kZWZpbmUgZXh0cz1weWV4cGF0O3NlbGVjdDt1bmljb2RlZGF0YTt3aW5zb3VuZDtfYnoyO19lbGVtZW50dHJlZTtfc29ja2V0O19zc2w7X21zaTtfY3R5cGVzO19oYXNobGliO19tdWx0aXByb2Nlc3Npbmc7X2x6bWE7X2RlY2ltYWw7X292ZXJsYXBwZWQ7X3NxbGl0ZTMgPz4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0ibGliX2V4dGVuc2lvbnMiPgorICAgICAgICAgICAgPD9mb3JlYWNoIGV4dCBpbiAkKHZhci5leHRzKT8+CisgICAgICAgIAorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iJCh2YXIuZXh0KS5weWQiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0iJCh2YXIuZXh0KS5weWQiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgCisgICAgICAgICAgICA8P2VuZGZvcmVhY2ggPz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0ic3FsaXRlMy5kbGwiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0ic3FsaXRlMy5kbGwiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+CisgICAgCisgICAgPEZyYWdtZW50PgorICAgICAgICA8Q29tcG9uZW50R3JvdXAgSWQ9ImxpYl9leHRlbnNpb25zX3N5bWJvbHMiPgorICAgICAgICAgICAgPD9mb3JlYWNoIGV4dCBpbiAkKHZhci5leHRzKT8+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9IiQodmFyLmV4dCkucGRiIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxDb25kaXRpb24+U1lNQk9MUz0xPC9Db25kaXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0iJCh2YXIuZXh0KS5wZGIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPD9lbmRmb3JlYWNoID8+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9InNxbGl0ZTMucGRiIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9InNxbGl0ZTMucGRiIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKyAgICAKKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0ibGliX2V4dGVuc2lvbnNfZCI+CisgICAgICAgICAgICA8P2ZvcmVhY2ggZXh0IGluICQodmFyLmV4dHMpPz4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iJCh2YXIuZXh0KV9kLnB5ZCIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBOYW1lPSIkKHZhci5leHQpX2QucHlkIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSIkKHZhci5leHQpX2QucGRiIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9IiQodmFyLmV4dClfZC5wZGIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPD9lbmRmb3JlYWNoID8+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9InNxbGl0ZTNfZC5kbGwiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0ic3FsaXRlM19kLmRsbCIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJzcWxpdGUzX2QucGRiIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9InNxbGl0ZTNfZC5wZGIiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+CisgICAgPEZyYWdtZW50PgorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlJFR0lTVFJZS0VZIiAvPgorICAgICAgICAKKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJsaWJfZmlsZXMiPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iUHl0aG9uUGF0aFJlZ2lzdHJ5IiBEaXJlY3Rvcnk9IkxpYiIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5S2V5IFJvb3Q9IkhLTVUiIEtleT0iW1JFR0lTVFJZS0VZXSI+CisgICAgICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIEtleT0iUHl0aG9uUGF0aCIgVHlwZT0ic3RyaW5nIiBWYWx1ZT0iW0xpYl07W0RMTHNdIiAvPgorICAgICAgICAgICAgICAgIDwvUmVnaXN0cnlLZXk+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9IkxpYl9zaXRlX3BhY2thZ2VzX1JFQURNRSIgRGlyZWN0b3J5PSJMaWJfc2l0ZV9wYWNrYWdlcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9IkxpYl9zaXRlX3BhY2thZ2VzX1JFQURNRSIgTmFtZT0iUkVBRE1FLnR4dCIgU291cmNlPSIhKGJpbmRwYXRoLnNyYylMaWJcc2l0ZS1wYWNrYWdlc1xSRUFETUUiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iTGliMnRvM19waWNrbGVfcmVtb3ZlIiBEaXJlY3Rvcnk9IkxpYl9saWIydG8zIiBHdWlkPSIkKHZhci5SZW1vdmVMaWIydG8zUGlja2xlQ29tcG9uZW50R3VpZCkiPgorICAgICAgICAgICAgICAgIDxSZW1vdmVGaWxlIElkPSJMaWIydG8zX3BpY2tsZV9yZW1vdmVfZmlsZXMiIE5hbWU9IioucGlja2xlIiBPbj0idW5pbnN0YWxsIiAvPgorICAgICAgICAgICAgICAgIDxSZW1vdmVGb2xkZXIgSWQ9IkxpYjJ0bzNfcGlja2xlX3JlbW92ZV9mb2xkZXIiIE9uPSJ1bmluc3RhbGwiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgPC9Db21wb25lbnRHcm91cD4KKyAgICAgICAgPERpcmVjdG9yeVJlZiBJZD0iTGliIj4KKyAgICAgICAgICAgIDxEaXJlY3RvcnkgSWQ9IkxpYl9zaXRlX3BhY2thZ2VzIiBOYW1lPSJzaXRlLXBhY2thZ2VzIiAvPgorICAgICAgICA8L0RpcmVjdG9yeVJlZj4KKyAgICA8L0ZyYWdtZW50PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbGliL2xpYl9wZGIud2l4cHJvaiBiL1Rvb2xzL21zaS9saWIvbGliX3BkYi53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvbGliL2xpYl9wZGIud2l4cHJvagpAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57NUUwQkNFOTMtRDFBQy00NTkxLUJCQ0ItM0EyQkU1QTRCM0QxfTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxTY2hlbWFWZXJzaW9uPjIuMDwvU2NoZW1hVmVyc2lvbj4KKyAgICAgICAgPE91dHB1dE5hbWU+bGliX3BkYjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0ibGliX3BkYi53eHMiIC8+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9ImxpYl9maWxlcy53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEVtYmVkZGVkUmVzb3VyY2UgSW5jbHVkZT0iKi53eGwiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbGliL2xpYl9wZGIud3hzIGIvVG9vbHMvbXNpL2xpYi9saWJfcGRiLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODM5ZThhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL2xpYi9saWJfcGRiLnd4cwpAQCAtMCwwICsxLDEzIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPFByb2R1Y3QgSWQ9IioiIExhbmd1YWdlPSIhKGxvYy5MQ0lEKSIgTmFtZT0iIShsb2MuVGl0bGVQZGIpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgPE1lZGlhVGVtcGxhdGUgRW1iZWRDYWI9InllcyIgQ29tcHJlc3Npb25MZXZlbD0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IlN5bWJvbHMiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlUGRiKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uUGRiKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9ImxpYl9leHRlbnNpb25zX3N5bWJvbHMiIC8+CisgICAgICAgIDwvRmVhdHVyZT4KKyAgICA8L1Byb2R1Y3Q+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9tYWtlX3ppcC5wcm9qIGIvVG9vbHMvbXNpL21ha2VfemlwLnByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmNzViYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9tYWtlX3ppcC5wcm9qCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPnsxMDQ4Nzk0NS0xNUQxLTQwOTItQTIxNC0zMzgzOTVDNDExNkJ9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPE91dHB1dE5hbWU+cHl0aG9uPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0U3VmZml4PjwvT3V0cHV0U3VmZml4PgorICAgICAgICA8U3VwcG9ydFNpZ25pbmc+ZmFsc2U8L1N1cHBvcnRTaWduaW5nPgorICAgIDwvUHJvcGVydHlHcm91cD4KKworICAgIDxJbXBvcnQgUHJvamVjdD0ibXNpLnByb3BzIiAvPgorCisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxTaWduT3V0cHV0PmZhbHNlPC9TaWduT3V0cHV0PgorICAgICAgICA8VGFyZ2V0TmFtZT5weXRob24tJChQeXRob25WZXJzaW9uKS1lbWJlZC0kKEFyY2hOYW1lKTwvVGFyZ2V0TmFtZT4KKyAgICAgICAgPFRhcmdldEV4dD4uemlwPC9UYXJnZXRFeHQ+CisgICAgICAgIDxUYXJnZXRQYXRoPiQoT3V0cHV0UGF0aClcZW4tdXNcJChUYXJnZXROYW1lKSQoVGFyZ2V0RXh0KTwvVGFyZ2V0UGF0aD4KKyAgICAgICAgPENsZWFuQ29tbWFuZD5ybWRpciAvcS9zICIkKEludGVybWVkaWF0ZU91dHB1dFBhdGgpXHppcF8kKEFyY2hOYW1lKSI8L0NsZWFuQ29tbWFuZD4KKyAgICAgICAgPEFyZ3VtZW50cz4iJChQeXRob25FeGUpIiAiJChNU0J1aWxkVGhpc0ZpbGVEaXJlY3RvcnkpXG1ha2VfemlwLnB5IjwvQXJndW1lbnRzPgorICAgICAgICA8QXJndW1lbnRzPiQoQXJndW1lbnRzKSAtZSAtbyAiJChUYXJnZXRQYXRoKSIgLXQgIiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aClcemlwXyQoQXJjaE5hbWUpIiAtYiAiJChPdXREaXIuVHJpbUVuZCgnXCcpKSI8L0FyZ3VtZW50cz4KKyAgICAgICAgPEVudmlyb25tZW50PnNldCBET0NfRklMRU5BTUU9cHl0aG9uJChQeXRob25WZXJzaW9uKS5jaG0KK3NldCBWQ1JFRElTVF9QQVRIPSQoVlMxNDBDT01OVE9PTFMpXC4uXC4uXFZDXHJlZGlzdFwkKFBsYXRmb3JtKVxNaWNyb3NvZnQuVkMxNDAuQ1JUPC9FbnZpcm9ubWVudD4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgICA8VGFyZ2V0IE5hbWU9Il9CdWlsZCI+CisgICAgICAgIDxFeGVjIENvbW1hbmQ9InNldGxvY2FsCiskKEVudmlyb25tZW50KQorJChDbGVhbkNvbW1hbmQpCiskKEFyZ3VtZW50cykiIC8+CisgICAgPC9UYXJnZXQ+CisKKyAgICA8VGFyZ2V0IE5hbWU9IkFmdGVyQnVpbGQiIC8+CisgICAgPFRhcmdldCBOYW1lPSJCdWlsZCIgRGVwZW5kc09uVGFyZ2V0cz0iX0J1aWxkO0FmdGVyQnVpbGQiIC8+CisKKyAgICA8VGFyZ2V0IE5hbWU9IlNob3dIYXNoZXMiPgorICAgICAgICA8SXRlbUdyb3VwPgorICAgICAgICAgICAgPFVzZXJGaWxlcyBJbmNsdWRlPSJAKEZpbGUpIiBDb25kaXRpb249IiclKEZpbGUuQ29weVRvKScgPT0gJyQoRVhFVGFyZ2V0KSciIC8+CisgICAgICAgIDwvSXRlbUdyb3VwPgorCisgICAgICAgIDxFeGVjIENvbW1hbmQ9IiZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBnZW5lcmF0ZV9tZDUucHkgQChVc2VyRmlsZXMtPicmcXVvdDslKEZ1bGxQYXRoKSZxdW90OycsJyAnKSIgLz4KKyAgICA8L1RhcmdldD4KKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9tYWtlX3ppcC5weSBiL1Rvb2xzL21zaS9tYWtlX3ppcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZThhNGE2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL21ha2VfemlwLnB5CkBAIC0wLDAgKzEsMjI0IEBACitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBweV9jb21waWxlCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKK2Zyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZSwgWklQX0RFRkxBVEVECitpbXBvcnQgc3VicHJvY2VzcworCitUS1RDTF9SRSA9IHJlLmNvbXBpbGUocideKF8/dGt8dGNsKS4rXC4ocHlkfGRsbCknLCByZS5JR05PUkVDQVNFKQorREVCVUdfUkUgPSByZS5jb21waWxlKHInX2RcLihweWR8ZGxsfGV4ZXxwZGJ8bGliKSQnLCByZS5JR05PUkVDQVNFKQorUFlUSE9OX0RMTF9SRSA9IHJlLmNvbXBpbGUocidweXRob25cZFxkP1wuZGxsJCcsIHJlLklHTk9SRUNBU0UpCisKK0RFQlVHX0ZJTEVTID0geworICAgICdfY3R5cGVzX3Rlc3QnLAorICAgICdfdGVzdGJ1ZmZlcicsCisgICAgJ190ZXN0Y2FwaScsCisgICAgJ190ZXN0aW1wb3J0bXVsdGlwbGUnLAorICAgICdfdGVzdG11bHRpcGhhc2UnLAorICAgICd4eGxpbWl0ZWQnLAorICAgICdweXRob24zX2RzdHViJywKK30KKworRVhDTFVERV9GUk9NX0xJQlJBUlkgPSB7CisgICAgJ19fcHljYWNoZV9fJywKKyAgICAnZW5zdXJlcGlwJywKKyAgICAnaWRsZWxpYicsCisgICAgJ3B5ZG9jX2RhdGEnLAorICAgICdzaXRlLXBhY2thZ2VzJywKKyAgICAndGtpbnRlcicsCisgICAgJ3R1cnRsZWRlbW8nLAorICAgICd2ZW52JywKK30KKworRVhDTFVERV9GSUxFX0ZST01fTElCUkFSWSA9IHsKKyAgICAnYmRpc3Rfd2luaW5zdC5weScsCit9CisKK0VYQ0xVREVfRklMRV9GUk9NX0xJQlMgPSB7CisgICAgJ3NzbGVheScsCisgICAgJ2xpYmVheScsCisgICAgJ3B5dGhvbjNzdHViJywKK30KKworZGVmIGlzX25vdF9kZWJ1ZyhwKToKKyAgICBpZiBERUJVR19SRS5zZWFyY2gocC5uYW1lKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBUS1RDTF9SRS5zZWFyY2gocC5uYW1lKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICByZXR1cm4gcC5zdGVtLmxvd2VyKCkgbm90IGluIERFQlVHX0ZJTEVTCisKK2RlZiBpc19ub3RfZGVidWdfb3JfcHl0aG9uKHApOgorICAgIHJldHVybiBpc19ub3RfZGVidWcocCkgYW5kIG5vdCBQWVRIT05fRExMX1JFLnNlYXJjaChwLm5hbWUpCisKK2RlZiBpbmNsdWRlX2luX2xpYihwKToKKyAgICBuYW1lID0gcC5uYW1lLmxvd2VyKCkKKyAgICBpZiBwLmlzX2RpcigpOgorICAgICAgICBpZiBuYW1lIGluIEVYQ0xVREVfRlJPTV9MSUJSQVJZOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgncGxhdC0nKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBuYW1lID09ICd0ZXN0JyBhbmQgcC5wYXJ0c1stMl0ubG93ZXIoKSA9PSAnbGliJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBuYW1lIGluIHsndGVzdCcsICd0ZXN0cyd9IGFuZCBwLnBhcnRzWy0zXS5sb3dlcigpID09ICdsaWInOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBuYW1lIGluIEVYQ0xVREVfRklMRV9GUk9NX0xJQlJBUlk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgc3VmZml4ID0gcC5zdWZmaXgubG93ZXIoKQorICAgIHJldHVybiBzdWZmaXggbm90IGluIHsnLnB5YycsICcucHlvJywgJy5leGUnfQorCitkZWYgaW5jbHVkZV9pbl9saWJzKHApOgorICAgIGlmIG5vdCBpc19ub3RfZGVidWcocCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIHAuc3RlbS5sb3dlcigpIG5vdCBpbiBFWENMVURFX0ZJTEVfRlJPTV9MSUJTCisKK2RlZiBpbmNsdWRlX2luX3Rvb2xzKHApOgorICAgIGlmIHAuaXNfZGlyKCkgYW5kIHAubmFtZS5sb3dlcigpIGluIHsnc2NyaXB0cycsICdpMThuJywgJ3B5bmNoZScsICdkZW1vJywgJ3BhcnNlcid9OgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIHAuc3VmZml4Lmxvd2VyKCkgaW4geycucHknLCAnLnB5dycsICcudHh0J30KKworRlVMTF9MQVlPVVQgPSBbCisgICAgKCcvJywgJyRidWlsZCcsICdweXRob24uZXhlJywgaXNfbm90X2RlYnVnKSwKKyAgICAoJy8nLCAnJGJ1aWxkJywgJ3B5dGhvbncuZXhlJywgaXNfbm90X2RlYnVnKSwKKyAgICAoJy8nLCAnJGJ1aWxkJywgJ3B5dGhvbnswLm1ham9yfS5kbGwnLmZvcm1hdChzeXMudmVyc2lvbl9pbmZvKSwgaXNfbm90X2RlYnVnKSwKKyAgICAoJy8nLCAnJGJ1aWxkJywgJ3B5dGhvbnswLm1ham9yfXswLm1pbm9yfS5kbGwnLmZvcm1hdChzeXMudmVyc2lvbl9pbmZvKSwgaXNfbm90X2RlYnVnKSwKKyAgICAoJ0RMTHMvJywgJyRidWlsZCcsICcqLnB5ZCcsIGlzX25vdF9kZWJ1ZyksCisgICAgKCdETExzLycsICckYnVpbGQnLCAnKi5kbGwnLCBpc19ub3RfZGVidWdfb3JfcHl0aG9uKSwKKyAgICAoJ2luY2x1ZGUvJywgJ2luY2x1ZGUnLCAnKi5oJywgTm9uZSksCisgICAgKCdpbmNsdWRlLycsICdQQycsICdweWNvbmZpZy5oJywgTm9uZSksCisgICAgKCdMaWIvJywgJ0xpYicsICcqKi8qJywgaW5jbHVkZV9pbl9saWIpLAorICAgICgnbGlicy8nLCAnJGJ1aWxkJywgJyoubGliJywgaW5jbHVkZV9pbl9saWJzKSwKKyAgICAoJ1Rvb2xzLycsICdUb29scycsICcqKi8qJywgaW5jbHVkZV9pbl90b29scyksCitdCisKK0VNQkVEX0xBWU9VVCA9IFsKKyAgICAoJy8nLCAnJGJ1aWxkJywgJ3B5dGhvbiouZXhlJywgaXNfbm90X2RlYnVnKSwKKyAgICAoJy8nLCAnJGJ1aWxkJywgJyoucHlkJywgaXNfbm90X2RlYnVnKSwKKyAgICAoJy8nLCAnJGJ1aWxkJywgJyouZGxsJywgaXNfbm90X2RlYnVnKSwKKyAgICAoJ3B5dGhvbnswLm1ham9yfXswLm1pbm9yfS56aXAnLmZvcm1hdChzeXMudmVyc2lvbl9pbmZvKSwgJ0xpYicsICcqKi8qJywgaW5jbHVkZV9pbl9saWIpLAorXQorCitpZiBvcy5nZXRlbnYoJ0RPQ19GSUxFTkFNRScpOgorICAgIEZVTExfTEFZT1VULmFwcGVuZCgoJ0RvYy8nLCAnRG9jL2J1aWxkL2h0bWxoZWxwJywgb3MuZ2V0ZW52KCdET0NfRklMRU5BTUUnKSwgTm9uZSkpCitpZiBvcy5nZXRlbnYoJ1ZDUkVESVNUX1BBVEgnKToKKyAgICBGVUxMX0xBWU9VVC5hcHBlbmQoKCcvJywgb3MuZ2V0ZW52KCdWQ1JFRElTVF9QQVRIJyksICd2Y3J1bnRpbWUqLmRsbCcsIE5vbmUpKQorICAgIEVNQkVEX0xBWU9VVC5hcHBlbmQoKCcvJywgb3MuZ2V0ZW52KCdWQ1JFRElTVF9QQVRIJyksICd2Y3J1bnRpbWUqLmRsbCcsIE5vbmUpKQorCitkZWYgY29weV90b19sYXlvdXQodGFyZ2V0LCByZWxfc291cmNlcyk6CisgICAgY291bnQgPSAwCisKKyAgICBpZiB0YXJnZXQuc3VmZml4Lmxvd2VyKCkgPT0gJy56aXAnOgorICAgICAgICBpZiB0YXJnZXQuZXhpc3RzKCk6CisgICAgICAgICAgICB0YXJnZXQudW5saW5rKCkKKworICAgICAgICB3aXRoIFppcEZpbGUoc3RyKHRhcmdldCksICd3JywgWklQX0RFRkxBVEVEKSBhcyBmOgorICAgICAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICAgICAgICAgZm9yIHMsIHJlbCBpbiByZWxfc291cmNlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVsLnN1ZmZpeC5sb3dlcigpID09ICcucHknOgorICAgICAgICAgICAgICAgICAgICAgICAgcHljID0gUGF0aCh0bXBkaXIpIC8gcmVsLndpdGhfc3VmZml4KCcucHljJykubmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzdHIocyksIHN0cihweWMpLCBzdHIocmVsKSwgZG9yYWlzZT1UcnVlLCBvcHRpbWl6ZT0yKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHB5X2NvbXBpbGUuUHlDb21waWxlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocyksIHN0cihyZWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHN0cihweWMpLCBzdHIocmVsLndpdGhfc3VmZml4KCcucHljJykpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHIocyksIHN0cihyZWwpKQorICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxCisKKyAgICBlbHNlOgorICAgICAgICBmb3IgcywgcmVsIGluIHJlbF9zb3VyY2VzOgorICAgICAgICAgICAgZGVzdCA9IHRhcmdldCAvIHJlbAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlc3QucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgZGVzdC5pc19maWxlKCk6CisgICAgICAgICAgICAgICAgZGVzdC5jaG1vZChzdGF0LlNfSVdSSVRFKQorICAgICAgICAgICAgc2h1dGlsLmNvcHkoc3RyKHMpLCBzdHIoZGVzdCkpCisgICAgICAgICAgICBpZiBkZXN0LmlzX2ZpbGUoKToKKyAgICAgICAgICAgICAgICBkZXN0LmNobW9kKHN0YXQuU19JV1JJVEUpCisgICAgICAgICAgICBjb3VudCArPSAxCisKKyAgICByZXR1cm4gY291bnQKKworZGVmIHJnbG9iKHJvb3QsIHBhdHRlcm4sIGNvbmRpdGlvbik6CisgICAgZGlycyA9IFtyb290XQorICAgIHJlY3Vyc2UgPSBwYXR0ZXJuWzozXSBpbiB7JyoqLycsICcqKlxcJ30KKyAgICB3aGlsZSBkaXJzOgorICAgICAgICBkID0gZGlycy5wb3AoMCkKKyAgICAgICAgZm9yIGYgaW4gZC5nbG9iKHBhdHRlcm5bMzpdIGlmIHJlY3Vyc2UgZWxzZSBwYXR0ZXJuKToKKyAgICAgICAgICAgIGlmIHJlY3Vyc2UgYW5kIGYuaXNfZGlyKCkgYW5kIChub3QgY29uZGl0aW9uIG9yIGNvbmRpdGlvbihmKSk6CisgICAgICAgICAgICAgICAgZGlycy5hcHBlbmQoZikKKyAgICAgICAgICAgIGVsaWYgZi5pc19maWxlKCkgYW5kIChub3QgY29uZGl0aW9uIG9yIGNvbmRpdGlvbihmKSk6CisgICAgICAgICAgICAgICAgeWllbGQgZiwgZi5yZWxhdGl2ZV90byhyb290KQorCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNvdXJjZScsIG1ldGF2YXI9J2RpcicsIGhlbHA9J1RoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcmVwb3NpdG9yeSByb290JywgdHlwZT1QYXRoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0JywgbWV0YXZhcj0nZmlsZScsIGhlbHA9J1RoZSBuYW1lIG9mIHRoZSBvdXRwdXQgYXJjaGl2ZScsIHR5cGU9UGF0aCwgZGVmYXVsdD1Ob25lKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy10JywgJy0tdGVtcCcsIG1ldGF2YXI9J2RpcicsIGhlbHA9J0EgZGlyZWN0b3J5IHRvIHRlbXBvcmFyaWx5IGV4dHJhY3QgZmlsZXMgaW50bycsIHR5cGU9UGF0aCwgZGVmYXVsdD1Ob25lKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1lJywgJy0tZW1iZWQnLCBoZWxwPSdDcmVhdGUgYW4gZW1iZWRkaW5nIGxheW91dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1idWlsZCcsIGhlbHA9J1NwZWNpZnkgdGhlIGJ1aWxkIGRpcmVjdG9yeScsIHR5cGU9UGF0aCkKKyAgICBucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHNvdXJjZSA9IG5zLnNvdXJjZSBvciAoUGF0aChfX2ZpbGVfXykucmVzb2x2ZSgpLnBhcmVudC5wYXJlbnQucGFyZW50KQorICAgIG91dCA9IG5zLm91dAorICAgIGJ1aWxkID0gbnMuYnVpbGQKKyAgICBhc3NlcnQgaXNpbnN0YW5jZShzb3VyY2UsIFBhdGgpCisgICAgYXNzZXJ0IG5vdCBvdXQgb3IgaXNpbnN0YW5jZShvdXQsIFBhdGgpCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnVpbGQsIFBhdGgpCisKKyAgICBpZiBucy50ZW1wOgorICAgICAgICB0ZW1wID0gbnMudGVtcAorICAgICAgICBkZWxldGVfdGVtcCA9IEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgdGVtcCA9IFBhdGgodGVtcGZpbGUubWtkdGVtcCgpKQorICAgICAgICBkZWxldGVfdGVtcCA9IFRydWUKKworICAgIGlmIG91dDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0LnBhcmVudC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICB0ZW1wLm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICBwYXNzCisKKyAgICBsYXlvdXQgPSBFTUJFRF9MQVlPVVQgaWYgbnMuZW1iZWQgZWxzZSBGVUxMX0xBWU9VVAorCisgICAgdHJ5OgorICAgICAgICBmb3IgdCwgcywgcCwgYyBpbiBsYXlvdXQ6CisgICAgICAgICAgICBpZiBzID09ICckYnVpbGQnOgorICAgICAgICAgICAgICAgIHMgPSBidWlsZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzID0gc291cmNlIC8gcworICAgICAgICAgICAgY29waWVkID0gY29weV90b19sYXlvdXQodGVtcCAvIHQucnN0cmlwKCcvJyksIHJnbG9iKHMsIHAsIGMpKQorICAgICAgICAgICAgcHJpbnQoJ0NvcGllZCB7fSBmaWxlcycuZm9ybWF0KGNvcGllZCkpCisKKyAgICAgICAgd2l0aCBvcGVuKHN0cih0ZW1wIC8gJ3B5dmVudi5jZmcnKSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgcHJpbnQoJ2FwcGxvY2FsID0gdHJ1ZScsIGZpbGU9ZikKKworICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICB0b3RhbCA9IGNvcHlfdG9fbGF5b3V0KG91dCwgcmdsb2IodGVtcCwgJyoqLyonLCBOb25lKSkKKyAgICAgICAgICAgIHByaW50KCdXcm90ZSB7fSBmaWxlcyB0byB7fScuZm9ybWF0KHRvdGFsLCBvdXQpKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGRlbGV0ZV90ZW1wOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wLCBUcnVlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQoaW50KG1haW4oKSBvciAwKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9tc2kucHJvcHMgYi9Ub29scy9tc2kvbXNpLnByb3BzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjdjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvbXNpLnByb3BzCkBAIC0wLDAgKzEsMTc3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiIFRyZWF0QXNMb2NhbFByb3BlcnR5PSJSZWxlYXNlVXJpIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFRhcmdldE5hbWU+JChPdXRwdXROYW1lKTwvVGFyZ2V0TmFtZT4KKyAgICAgICAgPERlZmluZVNvbHV0aW9uUHJvcGVydGllcz5mYWxzZTwvRGVmaW5lU29sdXRpb25Qcm9wZXJ0aWVzPgorICAgICAgICA8VHJlYXRXYXJuaW5nc0FzRXJyb3JzPmZhbHNlPC9UcmVhdFdhcm5pbmdzQXNFcnJvcnM+CisgICAgICAgIDxTdXBwcmVzc0ljZXM+JChTdXBwcmVzc0ljZXMpO0lDRTAzO0lDRTU3O0lDRTYxPC9TdXBwcmVzc0ljZXM+CisgICAgICAgIDxDb21waWxlclN1cHByZXNzU3BlY2lmaWNXYXJuaW5ncz4xMDI2PC9Db21waWxlclN1cHByZXNzU3BlY2lmaWNXYXJuaW5ncz4KKyAgICAgICAgPEJ1aWxkRm9yUmVsZWFzZSBDb25kaXRpb249IickKEJ1aWxkRm9yUmVsZWFzZSknID09ICcnIj5mYWxzZTwvQnVpbGRGb3JSZWxlYXNlPgorICAgICAgICA8U2lnbk91dHB1dCBDb25kaXRpb249IickKFNpZ25pbmdDZXJ0aWZpY2F0ZSknICE9ICcnIj50cnVlPC9TaWduT3V0cHV0PgorICAgICAgICA8Q29uZmlndXJhdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pJyA9PSAnJyI+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgICAgPFBsYXRmb3JtIENvbmRpdGlvbj0iJyQoUGxhdGZvcm0pJyA9PSAnJyI+eDg2PC9QbGF0Zm9ybT4KKyAgICAgICAgPEluc3RhbGxTY29wZSBDb25kaXRpb249IickKEluc3RhbGxTY29wZSknICE9ICdwZXJNYWNoaW5lJyI+cGVyVXNlcjwvSW5zdGFsbFNjb3BlPgorICAgIDwvUHJvcGVydHlHcm91cD4KKworICAgIDxJbXBvcnQgUHJvamVjdD0id2l4LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cLi5cUENCdWlsZFx0Y2x0ay5wcm9wcyIgLz4KKworICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8IS0tCisgICAgICAgIFRoaXMgVVJJIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHZhcmlvdXMgR1VJRHMgdXNlZCBieSB0aGUgaW5zdGFsbGVyLgorICAgICAgICBJbnN0YWxsZXJzIGJ1aWx0IHdpdGggdGhlIHNhbWUgVVJJIHdpbGwgdXBncmFkZSBlYWNoIG90aGVyIG9yIGJsb2NrCisgICAgICAgIHdoZW4gYXR0ZW1wdGluZyB0byBkb3duZ3JhZGUuCisgICAgICAgIAorICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGlzIHRoZSBsb2NhbCBjb21wdXRlciBuYW1lLCB3aGljaCB3aWxsIHByb2R1Y2UKKyAgICAgICAgaW5zdGFsbGVycyB0aGF0IGRvIG5vdCBpbnRlcmZlcmUgd2l0aCBvdGhlciBpbnN0YWxsZXJzLiBQcm9kdWN0cworICAgICAgICB0aGF0IGludGVuZCB0byBidW5kbGUgUHl0aG9uIHNob3VsZCByZWJ1aWxkIHRoZXNlIG1vZHVsZXMgd2l0aCB0aGVpcgorICAgICAgICBvd24gVVJJIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggdGhlIG9mZmljaWFsIHJlbGVhc2VzLgorICAgICAgICAKKyAgICAgICAgVGhlIG9mZmljaWFsIHJlbGVhc2VzIHVzZSAiaHR0cDovL3d3dy5weXRob24ub3JnLyQoQXJjaE5hbWUpIgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIERvd25sb2FkVXJsIHByb3BlcnR5IHVzZWQgaW4gdGhlIGJ1bmRsZQorICAgICAgICBwcm9qZWN0cy4KKyAgICAgICAgLS0+CisgICAgICAgIDxSZWxlYXNlVXJpIENvbmRpdGlvbj0iJyQoUmVsZWFzZVVyaSknID09ICcnIj4kKENvbXB1dGVyTmFtZSkvJChBcmNoTmFtZSkvPC9SZWxlYXNlVXJpPgorICAgICAgICA8UmVsZWFzZVVyaSBDb25kaXRpb249IiEkKFJlbGVhc2VVcmkuRW5kc1dpdGgoYC9gKSkiPiQoUmVsZWFzZVVyaSkvPC9SZWxlYXNlVXJpPgorICAgIDwvUHJvcGVydHlHcm91cD4KKworICAgIAorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9IiQoTVNCdWlsZFRoaXNGaWxlRGlyZWN0b3J5KWNvbW1vbi53eHMiIC8+CisgICAgICAgIDxXeGxUZW1wbGF0ZSBJbmNsdWRlPSIkKE1TQnVpbGRUaGlzRmlsZURpcmVjdG9yeSlcKi53eGxfdGVtcGxhdGUiIENvbmRpdGlvbj0iJChJZ25vcmVDb21tb25XeGxUZW1wbGF0ZXMpICE9ICd0cnVlJyIgLz4KKyAgICAgICAgPFdpeEV4dGVuc2lvbiBJbmNsdWRlPSJXaXhVdGlsRXh0ZW5zaW9uIj4KKyAgICAgICAgICAgIDxIaW50UGF0aD5XaXhVdGlsRXh0ZW5zaW9uPC9IaW50UGF0aD4KKyAgICAgICAgICAgIDxOYW1lPldpeFV0aWxFeHRlbnNpb248L05hbWU+CisgICAgICAgIDwvV2l4RXh0ZW5zaW9uPgorICAgIDwvSXRlbUdyb3VwPgorCisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPiQoUHlfSW50RGlyKVwkKENvbmZpZ3VyYXRpb24pXyQoUGxhdGZvcm0pX1NldHVwXCQoT3V0cHV0TmFtZSk8L0ludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgICAgIDxJbnRlcm1lZGlhdGVPdXRwdXRQYXRoIENvbmRpdGlvbj0iJyQoT3V0cHV0U3VmZml4KScgIT0gJyciPiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aClfJChPdXRwdXRTdWZmaXgpPC9JbnRlcm1lZGlhdGVPdXRwdXRQYXRoPgorICAgICAgICA8T3V0cHV0UGF0aCBDb25kaXRpb249IickKE91dHB1dFBhdGgpJyA9PSAnJyI+JChCdWlsZFBhdGgpPC9PdXRwdXRQYXRoPgorICAgICAgICA8T3V0cHV0UGF0aCBDb25kaXRpb249IiFIYXNUcmFpbGluZ1NsYXNoKCQoT3V0cHV0UGF0aCkpIj4kKE91dHB1dFBhdGgpXDwvT3V0cHV0UGF0aD4KKyAgICAgICAgPE91dERpcj4kKE91dHB1dFBhdGgpPC9PdXREaXI+CisgICAgICAgIDxSZXVzZUNhYmluZXRDYWNoZT50cnVlPC9SZXVzZUNhYmluZXRDYWNoZT4KKyAgICAgICAgPENSVFJlZGlzdCBDb25kaXRpb249IickKENSVFJlZGlzdCknID09ICcnIj4kKEV4dGVybmFsc0Rpcilcd2luZG93cy1pbnN0YWxsZXJccmVkaXN0PC9DUlRSZWRpc3Q+CisgICAgICAgIDxDUlRSZWRpc3QgQ29uZGl0aW9uPSIhRXhpc3RzKCQoQ1JUUmVkaXN0KSkiPjwvQ1JUUmVkaXN0PgorICAgICAgICA8RG9jRmlsZW5hbWU+cHl0aG9uJChNYWpvclZlcnNpb25OdW1iZXIpJChNaW5vclZlcnNpb25OdW1iZXIpJChNaWNyb1ZlcnNpb25OdW1iZXIpJChSZWxlYXNlTGV2ZWxOYW1lKS5jaG08L0RvY0ZpbGVuYW1lPgorCisgICAgICAgIDxJbnN0YWxsZXJWZXJzaW9uPiQoTWFqb3JWZXJzaW9uTnVtYmVyKS4kKE1pbm9yVmVyc2lvbk51bWJlcikuJChGaWVsZDNWYWx1ZSkuMDwvSW5zdGFsbGVyVmVyc2lvbj4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgCisgICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIhJChCdWlsZEZvclJlbGVhc2UpIj4KKyAgICAgICAgPFJldmlzaW9uTnVtYmVyIENvbmRpdGlvbj0iJyQoUmV2aXNpb25OdW1iZXIpJyA9PSAnJyI+JChbU3lzdGVtLk1hdGhdOjpGbG9vcigkKFtTeXN0ZW0uRGF0ZVRpbWVdOjpOb3cuU3VidHJhY3QoJChbU3lzdGVtLkRhdGVUaW1lXTo6bmV3KDIwMDEsIDEsIDEpKSkuVG90YWxEYXlzKSkpPC9SZXZpc2lvbk51bWJlcj4KKyAgICAgICAgPFB5dGhvblZlcnNpb24+JChNYWpvclZlcnNpb25OdW1iZXIpLiQoTWlub3JWZXJzaW9uTnVtYmVyKS4kKE1pY3JvVmVyc2lvbk51bWJlcilkZXYkKFJldmlzaW9uTnVtYmVyKTwvUHl0aG9uVmVyc2lvbj4KKyAgICAgICAgPEluc3RhbGxlclZlcnNpb24+JChNYWpvclZlcnNpb25OdW1iZXIpLiQoTWlub3JWZXJzaW9uTnVtYmVyKS4kKFJldmlzaW9uTnVtYmVyKS4wPC9JbnN0YWxsZXJWZXJzaW9uPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICAKKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPEJpdG5lc3M+MzItYml0PC9CaXRuZXNzPgorICAgICAgICA8Qml0bmVzcyBDb25kaXRpb249IiQoUGxhdGZvcm0pID09ICd4NjQnIj42NC1iaXQ8L0JpdG5lc3M+CisgICAgICAgIDxEZWZpbmVDb25zdGFudHM+CisgICAgICAgICAgICAkKERlZmluZUNvbnN0YW50cyk7CisgICAgICAgICAgICBWZXJzaW9uPSQoSW5zdGFsbGVyVmVyc2lvbik7CisgICAgICAgICAgICBTaG9ydFZlcnNpb249JChNYWpvclZlcnNpb25OdW1iZXIpLiQoTWlub3JWZXJzaW9uTnVtYmVyKTsKKyAgICAgICAgICAgIExvbmdWZXJzaW9uPSQoUHl0aG9uVmVyc2lvbik7CisgICAgICAgICAgICBNYWpvclZlcnNpb25OdW1iZXI9JChNYWpvclZlcnNpb25OdW1iZXIpOworICAgICAgICAgICAgTWlub3JWZXJzaW9uTnVtYmVyPSQoTWlub3JWZXJzaW9uTnVtYmVyKTsKKyAgICAgICAgICAgIFVwZ3JhZGVNaW5pbXVtVmVyc2lvbj0kKE1ham9yVmVyc2lvbk51bWJlcikuJChNaW5vclZlcnNpb25OdW1iZXIpLjAuMDsKKyAgICAgICAgICAgIE5leHRNYWpvclZlcnNpb25OdW1iZXI9JChNYWpvclZlcnNpb25OdW1iZXIpLiQoW21zYnVpbGRdOjpBZGQoJChNaW5vclZlcnNpb25OdW1iZXIpLCAxKSkuMC4wOworICAgICAgICAgICAgQml0bmVzcz0kKEJpdG5lc3MpOworICAgICAgICAgICAgUHlEZWJ1Z0V4dD0kKFB5RGVidWdFeHQpOworICAgICAgICAgICAgUHlBcmNoRXh0PSQoUHlBcmNoRXh0KTsKKyAgICAgICAgICAgIFB5VGVzdEV4dD0kKFB5VGVzdEV4dCk7CisgICAgICAgICAgICBPcHRpb25hbEZlYXR1cmVOYW1lPSQoT3V0cHV0TmFtZSk7CisgICAgICAgIDwvRGVmaW5lQ29uc3RhbnRzPgorICAgICAgICA8RGVmaW5lQ29uc3RhbnRzIENvbmRpdGlvbj0iJyQoQ1JUUmVkaXN0KScgIT0gJyciPgorICAgICAgICAgICAgJChEZWZpbmVDb25zdGFudHMpO0NSVFJlZGlzdD0kKENSVFJlZGlzdCk7CisgICAgICAgIDwvRGVmaW5lQ29uc3RhbnRzPgorICAgICAgICA8RGVmaW5lQ29uc3RhbnRzIENvbmRpdGlvbj0iJChQbGF0Zm9ybSkgIT0gJ3g2NCciPgorICAgICAgICAgICAgJChEZWZpbmVDb25zdGFudHMpO1N1ZmZpeDMyPS0zMjsKKyAgICAgICAgPC9EZWZpbmVDb25zdGFudHM+CisgICAgICAgIDxEZWZpbmVDb25zdGFudHMgQ29uZGl0aW9uPSIkKFBsYXRmb3JtKSA9PSAneDY0JyI+CisgICAgICAgICAgICAkKERlZmluZUNvbnN0YW50cyk7U3VmZml4MzI9OworICAgICAgICA8L0RlZmluZUNvbnN0YW50cz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgICA8SXRlbURlZmluaXRpb25Hcm91cD4KKyAgICAgICAgPEluc3RhbGxGaWxlcz4KKyAgICAgICAgICAgIDxHcm91cD5nZW5lcmF0ZWRfZmlsZWxpc3Q8L0dyb3VwPgorICAgICAgICAgICAgPENvbmRpdGlvbj48L0NvbmRpdGlvbj4KKyAgICAgICAgICAgIDxEaXNrSWQ+PC9EaXNrSWQ+CisgICAgICAgIDwvSW5zdGFsbEZpbGVzPgorICAgICAgICA8TGlua2VyQmluZElucHV0UGF0aHM+CisgICAgICAgICAgICA8VmlzaWJsZT5mYWxzZTwvVmlzaWJsZT4KKyAgICAgICAgPC9MaW5rZXJCaW5kSW5wdXRQYXRocz4KKyAgICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPExpbmtlckJpbmRJbnB1dFBhdGhzIEluY2x1ZGU9IiQoUEdPQnVpbGRQYXRoKTskKEJ1aWxkUGF0aCkiPgorICAgICAgICAgICAgPEJpbmROYW1lPjwvQmluZE5hbWU+CisgICAgICAgIDwvTGlua2VyQmluZElucHV0UGF0aHM+CisgICAgICAgIDxMaW5rZXJCaW5kSW5wdXRQYXRocyBJbmNsdWRlPSIkKFB5U291cmNlUGF0aClEb2NcYnVpbGRcaHRtbGhlbHAiPgorICAgICAgICAgICAgPEJpbmROYW1lPjwvQmluZE5hbWU+CisgICAgICAgIDwvTGlua2VyQmluZElucHV0UGF0aHM+CisgICAgICAgIDxMaW5rZXJCaW5kSW5wdXRQYXRocyBJbmNsdWRlPSIkKFB5U291cmNlUGF0aCkiPgorICAgICAgICAgICAgPEJpbmROYW1lPnNyYzwvQmluZE5hbWU+CisgICAgICAgIDwvTGlua2VyQmluZElucHV0UGF0aHM+CisgICAgICAgIDxMaW5rZXJCaW5kSW5wdXRQYXRocyBJbmNsdWRlPSIkKHRjbHRrRGlyKSI+CisgICAgICAgICAgICA8QmluZE5hbWU+dGNsdGs8L0JpbmROYW1lPgorICAgICAgICA8L0xpbmtlckJpbmRJbnB1dFBhdGhzPgorICAgICAgICA8TGlua2VyQmluZElucHV0UGF0aHMgSW5jbHVkZT0iJChDUlRSZWRpc3QpIiBDb25kaXRpb249IickKENSVFJlZGlzdCknICE9ICcnIj4KKyAgICAgICAgICAgIDxCaW5kTmFtZT5yZWRpc3Q8L0JpbmROYW1lPgorICAgICAgICA8L0xpbmtlckJpbmRJbnB1dFBhdGhzPgorICAgICAgICA8TGlua2VyQmluZElucHV0UGF0aHMgSW5jbHVkZT0iJChWUzE0MENPTU5UT09MUylcLi5cLi5cVkNccmVkaXN0XCQoUGxhdGZvcm0pXE1pY3Jvc29mdC5WQzE0MC5DUlQiPgorICAgICAgICAgICAgPEJpbmROYW1lPnJlZGlzdDwvQmluZE5hbWU+CisgICAgICAgIDwvTGlua2VyQmluZElucHV0UGF0aHM+CisgICAgICAgIDxMaW5rZXJCaW5kSW5wdXRQYXRocyBJbmNsdWRlPSIkKEJ1aWxkUGF0aDMyKSI+CisgICAgICAgICAgICA8QmluZE5hbWU+YnVpbGQzMjwvQmluZE5hbWU+CisgICAgICAgIDwvTGlua2VyQmluZElucHV0UGF0aHM+CisgICAgICAgIDxMaW5rZXJCaW5kSW5wdXRQYXRocyBJbmNsdWRlPSIkKEJ1aWxkUGF0aDY0KSI+CisgICAgICAgICAgICA8QmluZE5hbWU+YnVpbGQ2NDwvQmluZE5hbWU+CisgICAgICAgIDwvTGlua2VyQmluZElucHV0UGF0aHM+CisgICAgPC9JdGVtR3JvdXA+CisKKyAgICA8VGFyZ2V0IE5hbWU9Il9WYWxpZGF0ZU1zaVByb3BzIiBCZWZvcmVUYXJnZXRzPSJQcmVwYXJlRm9yQnVpbGQiPgorICAgICAgICA8RXJyb3IgVGV4dD0iUGxhdGZvcm0gJyQoUGxhdGZvcm0pJyBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgJ3g4Nicgb3IgJ3g2NCcuIiBDb25kaXRpb249IiQoUGxhdGZvcm0pICE9ICd4ODYnIGFuZCAkKFBsYXRmb3JtKSAhPSAneDY0JyIgLz4KKyAgICA8L1RhcmdldD4KKyAgICAKKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8X1V1aWQgSW5jbHVkZT0iQ29yZVVwZ3JhZGVDb2RlIj4KKyAgICAgICAgICAgIDxVcmk+dXBncmFkZWNvZGU8L1VyaT4KKyAgICAgICAgPC9fVXVpZD4KKyAgICAgICAgPF9VdWlkIEluY2x1ZGU9IlVwZ3JhZGVDb2RlIj4KKyAgICAgICAgICAgIDxVcmk+dXBncmFkZWNvZGUvJChPdXRwdXROYW1lKTwvVXJpPgorICAgICAgICA8L19VdWlkPgorICAgICAgICA8X1V1aWQgSW5jbHVkZT0iSW5zdGFsbERpcmVjdG9yeUd1aWRTZWVkIj4KKyAgICAgICAgICAgIDxVcmk+aW5zdGFsbGRpcmVjdG9yeXNlZWQ8L1VyaT4KKyAgICAgICAgPC9fVXVpZD4KKyAgICAgICAgPF9VdWlkIEluY2x1ZGU9IlB5dGhvbkV4ZUNvbXBvbmVudEd1aWQiPgorICAgICAgICAgICAgPFVyaT5weXRob24uZXhlPC9Vcmk+CisgICAgICAgIDwvX1V1aWQ+CisgICAgICAgIDxfVXVpZCBJbmNsdWRlPSJQeXRob253RXhlQ29tcG9uZW50R3VpZCI+CisgICAgICAgICAgICA8VXJpPnB5dGhvbncuZXhlPC9Vcmk+CisgICAgICAgIDwvX1V1aWQ+CisgICAgICAgIDxfVXVpZCBJbmNsdWRlPSJSZW1vdmVMaWIydG8zUGlja2xlQ29tcG9uZW50R3VpZCI+CisgICAgICAgICAgICA8VXJpPmxpYjJ0bzMvcGlja2xlczwvVXJpPgorICAgICAgICA8L19VdWlkPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxUYXJnZXQgTmFtZT0iX0dlbmVyYXRlR3VpZHMiIEFmdGVyVGFyZ2V0cz0iUHJlcGFyZUZvckJ1aWxkIiBDb25kaXRpb249IiQoVGFyZ2V0TmFtZSkgIT0gJ2xhdW5jaGVyJyI+CisgICAgICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICAgICAgPF9VdWlkcz5AKF9VdWlkLT4nKCIlKElkZW50aXR5KSIsICIkKE1ham9yVmVyc2lvbk51bWJlcikuJChNaW5vclZlcnNpb25OdW1iZXIpLyUoVXJpKSIpJywnLCcpPC9fVXVpZHM+CisgICAgICAgICAgICA8X0dlbmVyYXRlQ29tbWFuZD5pbXBvcnQgdXVpZDsgcHJpbnQoJ1xuJy5qb2luKCd7fT17fScuZm9ybWF0KGksIHV1aWQudXVpZDUodXVpZC5VVUlEKCdjOGQ5NzMzZS1hNzBjLTQzZmYtYWIwYy1lMjY0NTZmMTEwODMnKSwgJyQoUmVsZWFzZVVyaS5SZXBsYWNlKGB7YXJjaH1gLCBgJChBcmNoTmFtZSlgKSknICsgaikpIGZvciBpLGogaW4gWyQoX1V1aWRzLlJlcGxhY2UoYCJgLGAnYCkpXSkpPC9fR2VuZXJhdGVDb21tYW5kPgorICAgICAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgICAgIAorICAgICAgICA8RXhlYyBDb21tYW5kPSciJChQeXRob25FeGUpIiAtYyAiJChfR2VuZXJhdGVDb21tYW5kKSIgJmd0OyAiJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKSQoT3V0cHV0TmFtZSlndWlkcy50eHQiJworICAgICAgICAgICAgICBXb3JraW5nRGlyZWN0b3J5PSIkKE1TQnVpbGRUaGlzRmlsZURpcmVjdG9yeSkiCisgICAgICAgICAgICAgIElnbm9yZUV4aXRDb2RlPSJmYWxzZSIgLz4KKyAgICAgICAgCisgICAgICAgIDxSZWFkTGluZXNGcm9tRmlsZSBGaWxlPSIkKEludGVybWVkaWF0ZU91dHB1dFBhdGgpJChPdXRwdXROYW1lKWd1aWRzLnR4dCI+CisgICAgICAgICAgICA8T3V0cHV0IFRhc2tQYXJhbWV0ZXI9IkxpbmVzIiBJdGVtTmFtZT0iX1V1aWRWYWx1ZSIgLz4KKyAgICAgICAgPC9SZWFkTGluZXNGcm9tRmlsZT4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICAgICAgPERlZmluZUNvbnN0YW50cz4kKERlZmluZUNvbnN0YW50cyk7QChfVXVpZFZhbHVlLCc7Jyk7PC9EZWZpbmVDb25zdGFudHM+CisgICAgICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8L1RhcmdldD4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpLnB5IGIvVG9vbHMvbXNpL21zaS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc0NTNhNS4uMDAwMDAwMAotLS0gYS9Ub29scy9tc2kvbXNpLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQ1NiArMCwwIEBACi0jIFB5dGhvbiBNU0kgR2VuZXJhdG9yCi0jIChDKSAyMDAzIE1hcnRpbiB2LiBMb2V3aXMKLSMgU2VlICJGT08iIGluIGNvbW1lbnRzIHJlZmVycyB0byBNU0ROIHNlY3Rpb25zIHdpdGggdGhlIHRpdGxlIEZPTy4KLWltcG9ydCBtc2lsaWIsIHNjaGVtYSwgc2VxdWVuY2UsIG9zLCBnbG9iLCB0aW1lLCByZSwgc2h1dGlsLCB6aXBmaWxlCi1pbXBvcnQgc3VicHJvY2VzcywgdGVtcGZpbGUKLWZyb20gbXNpbGliIGltcG9ydCBGZWF0dXJlLCBDQUIsIERpcmVjdG9yeSwgRGlhbG9nLCBCaW5hcnksIGFkZF9kYXRhCi1pbXBvcnQgdWlzYW1wbGUKLWZyb20gd2luMzJjb20uY2xpZW50IGltcG9ydCBjb25zdGFudHMKLWZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKLQotIyBTZXR0aW5ncyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBjb25maWcucHkgYmVsb3cKLSMgMCBmb3Igb2ZmaWNpYWwgcHl0aG9uLm9yZyByZWxlYXNlcwotIyAxIGZvciBpbnRlcm1lZGlhdGUgcmVsZWFzZXMgYnkgYW55Ym9keSwgd2l0aAotIyBhIG5ldyBwcm9kdWN0IGNvZGUgZm9yIGV2ZXJ5IHBhY2thZ2UuCi1zbmFwc2hvdCA9IDEKLSMgMSBtZWFucyB0aGF0IGZpbGUgZXh0ZW5zaW9uIGlzIHB4LCBub3QgcHksCi0jIGFuZCBiaW5hcmllcyBzdGFydCB3aXRoIHgKLXRlc3RwYWNrYWdlID0gMAotIyBMb2NhdGlvbiBvZiBidWlsZCB0cmVlCi1zcmNkaXIgPSBvcy5wYXRoLmFic3BhdGgoIi4uLy4uIikKLSMgVGV4dCB0byBiZSBkaXNwbGF5ZWQgYXMgdGhlIHZlcnNpb24gaW4gZGlhbG9ncyBldGMuCi0jIGdvZXMgaW50byBmaWxlIG5hbWUgYW5kIFByb2R1Y3RDb2RlLiBEZWZhdWx0cyB0bwotIyBjdXJyZW50X3ZlcnNpb24uZGF5IGZvciBTbmFwc2hvdCwgY3VycmVudF92ZXJzaW9uIG90aGVyd2lzZQotZnVsbF9jdXJyZW50X3ZlcnNpb24gPSBOb25lCi0jIElzIFRjbCBhdmFpbGFibGUgYXQgYWxsPwotaGF2ZV90Y2wgPSBUcnVlCi0jIHBhdGggdG8gUENidWlsZCBkaXJlY3RvcnkKLVBDQlVJTEQ9IlBDYnVpbGQiCi0jIG1zdmNydCB2ZXJzaW9uCi1NU1ZDUiA9ICIxMDAiCi0jIE5hbWUgb2YgY2VydGlmaWNhdGUgaW4gZGVmYXVsdCBzdG9yZSB0byBzaWduIE1TSSB3aXRoCi1jZXJ0bmFtZSA9IE5vbmUKLSMgTWFrZSBhIHppcCBmaWxlIGNvbnRhaW5pbmcgdGhlIFBEQiBmaWxlcyBmb3IgdGhpcyBidWlsZD8KLXBkYnppcCA9IFRydWUKLQotdHJ5OgotICAgIGZyb20gY29uZmlnIGltcG9ydCAqCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotCi0jIEV4dHJhY3QgY3VycmVudCB2ZXJzaW9uIGZyb20gSW5jbHVkZS9wYXRjaGxldmVsLmgKLWxpbmVzID0gb3BlbihzcmNkaXIgKyAiL0luY2x1ZGUvcGF0Y2hsZXZlbC5oIikucmVhZGxpbmVzKCkKLW1ham9yID0gbWlub3IgPSBtaWNybyA9IGxldmVsID0gc2VyaWFsID0gTm9uZQotbGV2ZWxzID0gewotICAgICdQWV9SRUxFQVNFX0xFVkVMX0FMUEhBJzoweEEsCi0gICAgJ1BZX1JFTEVBU0VfTEVWRUxfQkVUQSc6IDB4QiwKLSAgICAnUFlfUkVMRUFTRV9MRVZFTF9HQU1NQSc6MHhDLAotICAgICdQWV9SRUxFQVNFX0xFVkVMX0ZJTkFMJzoweEYKLSAgICB9Ci1mb3IgbCBpbiBsaW5lczoKLSAgICBpZiBub3QgbC5zdGFydHN3aXRoKCIjZGVmaW5lIik6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgbCA9IGwuc3BsaXQoKQotICAgIGlmIGxlbihsKSAhPSAzOgotICAgICAgICBjb250aW51ZQotICAgIF8sIG5hbWUsIHZhbHVlID0gbAotICAgIGlmIG5hbWUgPT0gJ1BZX01BSk9SX1ZFUlNJT04nOiBtYWpvciA9IHZhbHVlCi0gICAgaWYgbmFtZSA9PSAnUFlfTUlOT1JfVkVSU0lPTic6IG1pbm9yID0gdmFsdWUKLSAgICBpZiBuYW1lID09ICdQWV9NSUNST19WRVJTSU9OJzogbWljcm8gPSB2YWx1ZQotICAgIGlmIG5hbWUgPT0gJ1BZX1JFTEVBU0VfTEVWRUwnOiBsZXZlbCA9IGxldmVsc1t2YWx1ZV0KLSAgICBpZiBuYW1lID09ICdQWV9SRUxFQVNFX1NFUklBTCc6IHNlcmlhbCA9IHZhbHVlCi0KLXNob3J0X3ZlcnNpb24gPSBtYWpvcisiLiIrbWlub3IKLSMgU2VlIFBDL21ha2VfdmVyc2lvbmluZm8uYwotRklFTEQzID0gMTAwMCppbnQobWljcm8pICsgMTAqbGV2ZWwgKyBpbnQoc2VyaWFsKQotY3VycmVudF92ZXJzaW9uID0gIiVzLiVkIiAlIChzaG9ydF92ZXJzaW9uLCBGSUVMRDMpCi0KLSMgVGhpcyBzaG91bGQgbmV2ZXIgY2hhbmdlLiBUaGUgVXBncmFkZUNvZGUgb2YgdGhpcyBwYWNrYWdlIGNhbiBiZQotIyB1c2VkIGluIHRoZSBVcGdyYWRlIHRhYmxlIG9mIGZ1dHVyZSBwYWNrYWdlcyB0byBtYWtlIHRoZSBmdXR1cmUKLSMgcGFja2FnZSByZXBsYWNlIHRoaXMgb25lLiBTZWUgIlVwZ3JhZGVDb2RlIFByb3BlcnR5Ii4KLSMgdXBncmFkZV9jb2RlIGdldHMgc2V0IHRvIHVwZ3JhZGVfY29kZV82NCB3aGVuIHdlIGhhdmUgZGV0ZXJtaW5lZAotIyB0aGF0IHRoZSB0YXJnZXQgaXMgV2luNjQuCi11cGdyYWRlX2NvZGVfc25hcHNob3Q9J3s5MkEyNDQ4MS0zRUNCLTQwRkMtODgzNi0wNEI3OTY2RUMwRDV9JwotdXBncmFkZV9jb2RlPSd7NjVFNkRFNDgtQTM1OC00MzRELUFBNEYtNEFGNzJEQjQ3MThGfScKLXVwZ3JhZGVfY29kZV82ND0nezZBOTY1QTBDLTZFRTYtNEUzQS05OTgzLTMyNjNGNTYzMTFFQ30nCi0KLWlmIHNuYXBzaG90OgotICAgIGN1cnJlbnRfdmVyc2lvbiA9ICIlcy4lcy4lcyIgJSAobWFqb3IsIG1pbm9yLCBpbnQodGltZS50aW1lKCkvMzYwMC8yNCkpCi0KLWlmIGZ1bGxfY3VycmVudF92ZXJzaW9uIGlzIE5vbmU6Ci0gICAgZnVsbF9jdXJyZW50X3ZlcnNpb24gPSBjdXJyZW50X3ZlcnNpb24KLQotZXh0ZW5zaW9ucyA9IFsKLSAgICAncHlleHBhdC5weWQnLAotICAgICdzZWxlY3QucHlkJywKLSAgICAndW5pY29kZWRhdGEucHlkJywKLSAgICAnd2luc291bmQucHlkJywKLSAgICAnX2J6Mi5weWQnLAotICAgICdfZWxlbWVudHRyZWUucHlkJywKLSAgICAnX3NvY2tldC5weWQnLAotICAgICdfc3NsLnB5ZCcsCi0gICAgJ190ZXN0Y2FwaS5weWQnLAotICAgICdfdGtpbnRlci5weWQnLAotICAgICdfbXNpLnB5ZCcsCi0gICAgJ19jdHlwZXMucHlkJywKLSAgICAnX2N0eXBlc190ZXN0LnB5ZCcsCi0gICAgJ19zcWxpdGUzLnB5ZCcsCi0gICAgJ19oYXNobGliLnB5ZCcsCi0gICAgJ19tdWx0aXByb2Nlc3NpbmcucHlkJywKLSAgICAnX2x6bWEucHlkJywKLSAgICAnX2RlY2ltYWwucHlkJywKLSAgICAnX3Rlc3RidWZmZXIucHlkJywKLSAgICAnX3Rlc3RpbXBvcnRtdWx0aXBsZS5weWQnLAotICAgICdfb3ZlcmxhcHBlZC5weWQnLAotXQotCi0jIFdlbGwta25vd24gY29tcG9uZW50IFVVSURzCi0jIFRoZXNlIGFyZSBuZWVkZWQgZm9yIFNoYXJlZERMTHMgcmVmZXJlbmNlIGNvdW50ZXI7IGlmCi0jIGEgZGlmZmVyZW50IFVVSUQgd2FzIHVzZWQgZm9yIGVhY2ggaW5jYXJuYXRpb24gb2YsIHNheSwKLSMgcHl0aG9uMjQuZGxsLCBhbiB1cGdyYWRlIHdvdWxkIHNldCB0aGUgcmVmZXJlbmNlIGNvdW50ZXIKLSMgZnJvbSAxIHRvIDIgKGR1ZSB0byB3aGF0IEkgY29uc2lkZXIgYSBidWcgaW4gTVNJKQotIyBVc2luZyB0aGUgc2FtZSBVVUlEIGlzIGZpbmUgc2luY2UgdGhlc2UgZmlsZXMgYXJlIHZlcnNpb25lZCwKLSMgc28gSW5zdGFsbGVyIHdpbGwgYWx3YXlzIGtlZXAgdGhlIG5ld2VzdCB2ZXJzaW9uLgotIyBOT1RFOiBBbGwgdXVpZHMgYXJlIHNlbGYgZ2VuZXJhdGVkLgotcHl0aG9uZGxsX3V1aWQgPSB7Ci0gICAgIjI0IjoiezlCODFFNjE4LTIzMDEtNDAzNS1BQzc3LTc1RDlBQkVCNzMwMX0iLAotICAgICIyNSI6InsyZTQxYjExOC0zOGJkLTRjMWItYTg0MC02OTc3ZWZkMWI5MTF9IiwKLSAgICAiMjYiOiJ7MzRlYmVjYWMtZjA0Ni00ZTFjLWIwZTMtOWJhYzNjZGFhY2ZhfSIsCi0gICAgIjI3IjoiezRmZTIxYzc2LTE3NjAtNDM3Yi1hMmYyLTk5OTA5MTMwYTE3NX0iLAotICAgICIzMCI6Ins2OTUzYmMzYi02NzY4LTQyOTEtODQxMC03OTE0Y2U2ZTJjYTh9IiwKLSAgICAiMzEiOiJ7NGFmY2JhMGItMTNlNC00N2MzLWJlYmUtNDc3NDI4YjQ2OTEzfSIsCi0gICAgIjMyIjoiezNmZjk1MzE1LTEwOTYtNGQzMS1iZDg2LTYwMWQ1NDM4YWQ1ZX0iLAotICAgICIzMyI6IntmNzU4MWNhNC1kMzY4LTRlZWEtOGY4Mi1kNDhjNjRjNGYwNDd9IiwKLSAgICAiMzQiOiJ7N0EwQzU4MTItMjU4My00MEQ5LUJDQkItQ0Q3NDg1RjExMzc3fSIsCi0gICAgfSBbbWFqb3IrbWlub3JdCi0KLSMgQ29tcHV0ZSB0aGUgbmFtZSB0aGF0IFNwaGlueCBnaXZlcyB0byB0aGUgZG9jZmlsZQotZG9jZmlsZSA9IG1pY3JvCi1pZiBsZXZlbCA8IDB4ZjoKLSAgICBpZiBsZXZlbCA9PSAweEM6Ci0gICAgICAgIGRvY2ZpbGUgKz0gInJjJXMiICUgKHNlcmlhbCwpCi0gICAgZWxzZToKLSAgICAgICAgZG9jZmlsZSArPSAnJXglcycgJSAobGV2ZWwsIHNlcmlhbCkKLWRvY2ZpbGUgPSAncHl0aG9uJXMlcyVzLmNobScgJSAobWFqb3IsIG1pbm9yLCBkb2NmaWxlKQotCi0jIEJ1aWxkIHRoZSBtaW5ndyBpbXBvcnQgbGlicmFyeSwgbGlicHl0aG9uWFkuYQotIyBUaGlzIHJlcXVpcmVzICdubScgYW5kICdkbGx0b29sJyBleGVjdXRhYmxlcyBvbiB5b3VyIFBBVEgKLWRlZiBidWlsZF9taW5nd19saWIobGliX2ZpbGUsIGRlZl9maWxlLCBkbGxfZmlsZSwgbWluZ3dfbGliKToKLSAgICB3YXJuaW5nID0gIldBUk5JTkc6ICVzIC0gbGlicHl0aG9uWFguYSBub3QgYnVpbHQiCi0gICAgbm0gPSBmaW5kX2V4ZWN1dGFibGUoJ25tJykKLSAgICBkbGx0b29sID0gZmluZF9leGVjdXRhYmxlKCdkbGx0b29sJykKLQotICAgIGlmIG5vdCBubSBvciBub3QgZGxsdG9vbDoKLSAgICAgICAgcHJpbnQod2FybmluZyAlICJubSBhbmQvb3IgZGxsdG9vbCB3ZXJlIG5vdCBmb3VuZCIpCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgbm1fY29tbWFuZCA9ICclcyAtQ3MgJXMnICUgKG5tLCBsaWJfZmlsZSkKLSAgICBkbGx0b29sX2NvbW1hbmQgPSAiJXMgLS1kbGxuYW1lICVzIC0tZGVmICVzIC0tb3V0cHV0LWxpYiAlcyIgJSBcCi0gICAgICAgIChkbGx0b29sLCBkbGxfZmlsZSwgZGVmX2ZpbGUsIG1pbmd3X2xpYikKLSAgICBleHBvcnRfbWF0Y2ggPSByZS5jb21waWxlKHIiXl9pbXBfXyguKikgaW4gcHl0aG9uXGQrXC5kbGwiKS5tYXRjaAotCi0gICAgZiA9IG9wZW4oZGVmX2ZpbGUsJ3cnKQotICAgIGYud3JpdGUoIkxJQlJBUlkgJXNcbiIgJSBkbGxfZmlsZSkKLSAgICBmLndyaXRlKCJFWFBPUlRTXG4iKQotCi0gICAgbm1fcGlwZSA9IG9zLnBvcGVuKG5tX2NvbW1hbmQpCi0gICAgZm9yIGxpbmUgaW4gbm1fcGlwZS5yZWFkbGluZXMoKToKLSAgICAgICAgbSA9IGV4cG9ydF9tYXRjaChsaW5lKQotICAgICAgICBpZiBtOgotICAgICAgICAgICAgZi53cml0ZShtLmdyb3VwKDEpKyJcbiIpCi0gICAgZi5jbG9zZSgpCi0gICAgZXhpdCA9IG5tX3BpcGUuY2xvc2UoKQotCi0gICAgaWYgZXhpdDoKLSAgICAgICAgcHJpbnQod2FybmluZyAlICJubSBkaWQgbm90IHJ1biBzdWNjZXNzZnVsbHkiKQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGlmIG9zLnN5c3RlbShkbGx0b29sX2NvbW1hbmQpICE9IDA6Ci0gICAgICAgIHByaW50KHdhcm5pbmcgJSAiZGxsdG9vbCBkaWQgbm90IHJ1biBzdWNjZXNzZnVsbHkiKQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIHJldHVybiBUcnVlCi0KLSMgVGFyZ2V0IGZpbGVzICguZGVmIGFuZCAuYSkgZ28gaW4gUENCdWlsZCBkaXJlY3RvcnkKLWxpYl9maWxlID0gb3MucGF0aC5qb2luKHNyY2RpciwgUENCVUlMRCwgInB5dGhvbiVzJXMubGliIiAlIChtYWpvciwgbWlub3IpKQotZGVmX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBQQ0JVSUxELCAicHl0aG9uJXMlcy5kZWYiICUgKG1ham9yLCBtaW5vcikpCi1kbGxfZmlsZSA9ICJweXRob24lcyVzLmRsbCIgJSAobWFqb3IsIG1pbm9yKQotbWluZ3dfbGliID0gb3MucGF0aC5qb2luKHNyY2RpciwgUENCVUlMRCwgImxpYnB5dGhvbiVzJXMuYSIgJSAobWFqb3IsIG1pbm9yKSkKLQotaGF2ZV9taW5ndyA9IGJ1aWxkX21pbmd3X2xpYihsaWJfZmlsZSwgZGVmX2ZpbGUsIGRsbF9maWxlLCBtaW5nd19saWIpCi0KLSMgRGV0ZXJtaW5lIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlCi1pZiBvcy5zeXN0ZW0oIm5tYWtlIC9ub2xvZ28gL2MgL2YgbXNpc3VwcG9ydC5tYWsiKSAhPSAwOgotICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiJ25tYWtlIC9mIG1zaXN1cHBvcnQubWFrJyBmYWlsZWQiKQotZGxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBQQ0JVSUxELCBkbGxfZmlsZSkKLW1zaWxpYi5zZXRfYXJjaF9mcm9tX2ZpbGUoZGxsX3BhdGgpCi1pZiBtc2lsaWIucGVfdHlwZShkbGxfcGF0aCkgIT0gbXNpbGliLnBlX3R5cGUoIm1zaXN1cHBvcnQuZGxsIik6Ci0gICAgcmFpc2UgU3lzdGVtRXJyb3IoIm1zaXN1cHBvcnQuZGxsIGZvciBpbmNvcnJlY3QgYXJjaGl0ZWN0dXJlIikKLQotaWYgbXNpbGliLldpbjY0OgotICAgIHVwZ3JhZGVfY29kZSA9IHVwZ3JhZGVfY29kZV82NAotCi1pZiBzbmFwc2hvdDoKLSAgICBwcm9kdWN0X2NvZGUgPSBtc2lsaWIuZ2VuX3V1aWQoKQotZWxzZToKLSAgICAjIG9mZmljaWFsIHJlbGVhc2U6IGdlbmVyYXRlIFVVSUQgZnJvbSB0aGUgZG93bmxvYWQgbGluayB0aGF0IHRoZSBmaWxlIHdpbGwgaGF2ZQotICAgIGltcG9ydCB1dWlkCi0gICAgcHJvZHVjdF9jb2RlID0gdXVpZC51dWlkMyh1dWlkLk5BTUVTUEFDRV9VUkwsCi0gICAgICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8lcy4lcy4lcy9weXRob24tJXMlcy5tc2knICUKLSAgICAgICAgICAgICAgICAgICAgKG1ham9yLCBtaW5vciwgbWljcm8sIGZ1bGxfY3VycmVudF92ZXJzaW9uLCBtc2lsaWIuYXJjaF9leHQpKQotICAgIHByb2R1Y3RfY29kZSA9ICd7JXN9JyAlIHByb2R1Y3RfY29kZQotCi1pZiB0ZXN0cGFja2FnZToKLSAgICBleHQgPSAncHgnCi0gICAgdGVzdHByZWZpeCA9ICd4JwotZWxzZToKLSAgICBleHQgPSAncHknCi0gICAgdGVzdHByZWZpeCA9ICcnCi0KLWlmIG1zaWxpYi5XaW42NDoKLSAgICBTeXN0ZW1Gb2xkZXJOYW1lID0gIltTeXN0ZW02NEZvbGRlcl0iCi0gICAgcmVnaXN0cnlfY29tcG9uZW50ID0gNHwyNTYKLWVsc2U6Ci0gICAgU3lzdGVtRm9sZGVyTmFtZSA9ICJbU3lzdGVtRm9sZGVyXSIKLSAgICByZWdpc3RyeV9jb21wb25lbnQgPSA0Ci0KLW1zaWxpYi5yZXNldCgpCi0KLSMgY29uZGl0aW9uIGluIHdoaWNoIHRvIGluc3RhbGwgcHl0aG9ueHkuZGxsIGluIHN5c3RlbTMyOgotIyBhKSBpdCBpcyBXaW5kb3dzIDl4IG9yCi0jIGIpIGl0IGlzIE5ULCB0aGUgdXNlciBpcyBwcml2aWxlZ2VkLCBhbmQgaGFzIGNob3NlbiBwZXItbWFjaGluZSBpbnN0YWxsYXRpb24KLXN5czMyY29uZCA9ICIoV2luZG93czl4IG9yIChQcml2aWxlZ2VkIGFuZCBBTExVU0VSUykpIgotCi1kZWYgYnVpbGRfZGF0YWJhc2UoKToKLSAgICAiIiJHZW5lcmF0ZSBhbiBlbXB0eSBkYXRhYmFzZSwgd2l0aCBqdXN0IHRoZSBzY2hlbWEgYW5kIHRoZQotICAgIFN1bW1hcnkgaW5mb3JtYXRpb24gc3RyZWFtLiIiIgotICAgIGlmIHNuYXBzaG90OgotICAgICAgICB1YyA9IHVwZ3JhZGVfY29kZV9zbmFwc2hvdAotICAgIGVsc2U6Ci0gICAgICAgIHVjID0gdXBncmFkZV9jb2RlCi0gICAgaWYgbXNpbGliLldpbjY0OgotICAgICAgICBwcm9kdWN0c3VmZml4ID0gIiAoNjQtYml0KSIKLSAgICBlbHNlOgotICAgICAgICBwcm9kdWN0c3VmZml4ID0gIiIKLSAgICAjIHNjaGVtYSByZXByZXNlbnRzIHRoZSBpbnN0YWxsZXIgMi4wIGRhdGFiYXNlIHNjaGVtYS4KLSAgICAjIHNlcXVlbmNlIGlzIHRoZSBzZXQgb2Ygc3RhbmRhcmQgc2VxdWVuY2VzCi0gICAgIyAodWkvZXhlY3V0ZSwgYWRtaW4vYWR2dC9pbnN0YWxsKQotICAgIG1zaW5hbWUgPSAicHl0aG9uLSVzJXMubXNpIiAlIChmdWxsX2N1cnJlbnRfdmVyc2lvbiwgbXNpbGliLmFyY2hfZXh0KQotICAgIGRiID0gbXNpbGliLmluaXRfZGF0YWJhc2UobXNpbmFtZSwKLSAgICAgICAgICAgICAgICAgIHNjaGVtYSwgUHJvZHVjdE5hbWU9IlB5dGhvbiAiK2Z1bGxfY3VycmVudF92ZXJzaW9uK3Byb2R1Y3RzdWZmaXgsCi0gICAgICAgICAgICAgICAgICBQcm9kdWN0Q29kZT1wcm9kdWN0X2NvZGUsCi0gICAgICAgICAgICAgICAgICBQcm9kdWN0VmVyc2lvbj1jdXJyZW50X3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICBNYW51ZmFjdHVyZXI9dSJQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiIsCi0gICAgICAgICAgICAgICAgICByZXF1ZXN0X3VhYyA9IFRydWUpCi0gICAgIyBUaGUgZGVmYXVsdCBzZXF1ZW5jaW5nIG9mIHRoZSBSZW1vdmVFeGlzdGluZ1Byb2R1Y3RzIGFjdGlvbiBjYXVzZXMKLSAgICAjIHJlbW92YWwgb2YgZmlsZXMgdGhhdCBnb3QganVzdCBpbnN0YWxsZWQuIFBsYWNlIGl0IGFmdGVyCi0gICAgIyBJbnN0YWxsSW5pdGlhbGl6ZSwgc28gd2UgZmlyc3QgdW5pbnN0YWxsIGV2ZXJ5dGhpbmcsIGJ1dCBzdGlsbCByb2xsCi0gICAgIyBiYWNrIGluIGNhc2UgdGhlIGluc3RhbGxhdGlvbiBpcyBpbnRlcnJ1cHRlZAotICAgIG1zaWxpYi5jaGFuZ2Vfc2VxdWVuY2Uoc2VxdWVuY2UuSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZW1vdmVFeGlzdGluZ1Byb2R1Y3RzIiwgMTUxMCkKLSAgICBtc2lsaWIuYWRkX3RhYmxlcyhkYiwgc2VxdWVuY2UpCi0gICAgIyBXZSBjYW5ub3Qgc2V0IEFMTFVTRVJTIGluIHRoZSBwcm9wZXJ0eSB0YWJsZSwgYXMgdGhpcyBjYW5ub3QgYmUKLSAgICAjIHJlc2V0IGlmIHRoZSB1c2VyIGNob3NlcyBhIHBlci11c2VyIGluc3RhbGxhdGlvbi4gSW5zdGVhZCwgd2UKLSAgICAjIG1haW50YWluIFdoaWNoVXNlcnMsIHdoaWNoIGNhbiBiZSAiQUxMIiBvciAiSlVTVE1FIi4gVGhlIFVJIG1hbmFnZXMKLSAgICAjIHRoaXMgcHJvcGVydHksIGFuZCB3aGVuIHRoZSBleGVjdXRpb24gc3RhcnRzLCBBTExVU0VSUyBpcyBzZXQKLSAgICAjIGFjY29yZGluZ2x5LgotICAgIGFkZF9kYXRhKGRiLCAiUHJvcGVydHkiLCBbKCJVcGdyYWRlQ29kZSIsIHVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiV2hpY2hVc2VycyIsICJBTEwiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiUHJvZHVjdExpbmUiLCAiUHl0aG9uJXMlcyIgJSAobWFqb3IsIG1pbm9yKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCi0gICAgZGIuQ29tbWl0KCkKLSAgICByZXR1cm4gZGIsIG1zaW5hbWUKLQotZGVmIHJlbW92ZV9vbGRfdmVyc2lvbnMoZGIpOgotICAgICJGaWxsIHRoZSB1cGdyYWRlIHRhYmxlLiIKLSAgICBzdGFydCA9ICIlcy4lcy4wIiAlIChtYWpvciwgbWlub3IpCi0gICAgIyBUaGlzIHJlcXVlc3RzIHRoYXQgZmVhdHVyZSBzZWxlY3Rpb24gc3RhdGVzIG9mIGFuIG9sZGVyCi0gICAgIyBpbnN0YWxsYXRpb24gc2hvdWxkIGJlIGZvcndhcmRlZCBpbnRvIHRoaXMgb25lLiBVcGdyYWRpbmcKLSAgICAjIHJlcXVpcmVzIHRoYXQgYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IGluc3RhbGxhdGlvbiBhcmUKLSAgICAjIGVpdGhlciBib3RoIHBlci1tYWNoaW5lIG9yIHBlci11c2VyLgotICAgIG1pZ3JhdGVfZmVhdHVyZXMgPSAxCi0gICAgIyBTZWUgIlVwZ3JhZGUgVGFibGUiLiBXZSByZW1vdmUgcmVsZWFzZXMgd2l0aCB0aGUgc2FtZSBtYWpvciBhbmQKLSAgICAjIG1pbm9yIHZlcnNpb24uIEZvciBhbiBzbmFwc2hvdCwgd2UgcmVtb3ZlIGFsbCBlYXJsaWVyIHNuYXBzaG90cy4gRm9yCi0gICAgIyBhIHJlbGVhc2UsIHdlIHJlbW92ZSBhbGwgc25hcHNob3RzLCBhbmQgYWxsIGVhcmxpZXIgcmVsZWFzZXMuCi0gICAgaWYgc25hcHNob3Q6Ci0gICAgICAgIGFkZF9kYXRhKGRiLCAiVXBncmFkZSIsCi0gICAgICAgICAgICBbKHVwZ3JhZGVfY29kZV9zbmFwc2hvdCwgc3RhcnQsCi0gICAgICAgICAgICAgIGN1cnJlbnRfdmVyc2lvbiwKLSAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBsYW5ndWFnZQotICAgICAgICAgICAgICBtaWdyYXRlX2ZlYXR1cmVzLAotICAgICAgICAgICAgICBOb25lLCAgICAgICAgICAgICAgICAgICAgICMgTWlncmF0ZSBBTEwgZmVhdHVyZXMKLSAgICAgICAgICAgICAgIlJFTU9WRU9MRFNOQVBTSE9UIildKQotICAgICAgICBwcm9wcyA9ICJSRU1PVkVPTERTTkFQU0hPVCIKLSAgICBlbHNlOgotICAgICAgICBhZGRfZGF0YShkYiwgIlVwZ3JhZGUiLAotICAgICAgICAgICAgWyh1cGdyYWRlX2NvZGUsIHN0YXJ0LCBjdXJyZW50X3ZlcnNpb24sCi0gICAgICAgICAgICAgIE5vbmUsIG1pZ3JhdGVfZmVhdHVyZXMsIE5vbmUsICJSRU1PVkVPTERWRVJTSU9OIiksCi0gICAgICAgICAgICAgKHVwZ3JhZGVfY29kZV9zbmFwc2hvdCwgc3RhcnQsICIlcy4lZC4wIiAlIChtYWpvciwgaW50KG1pbm9yKSsxKSwKLSAgICAgICAgICAgICAgTm9uZSwgbWlncmF0ZV9mZWF0dXJlcywgTm9uZSwgIlJFTU9WRU9MRFNOQVBTSE9UIildKQotICAgICAgICBwcm9wcyA9ICJSRU1PVkVPTERTTkFQU0hPVDtSRU1PVkVPTERWRVJTSU9OIgotCi0gICAgcHJvcHMgKz0gIjtUQVJHRVRESVI7RExMRElSO0xBVU5DSEVSRElSIgotICAgICMgSW5zdGFsbGVyIGNvbGxlY3RzIHRoZSBwcm9kdWN0IGNvZGVzIG9mIHRoZSBlYXJsaWVyIHJlbGVhc2VzIGluCi0gICAgIyB0aGVzZSBwcm9wZXJ0aWVzLiBJbiBvcmRlciB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgdGhlIHByb3BlcnRpZXMsCi0gICAgIyB0aGV5IG11c3QgYmUgZGVjbGFyZWQgYXMgc2VjdXJlLiBTZWUgIlNlY3VyZUN1c3RvbVByb3BlcnRpZXMgUHJvcGVydHkiCi0gICAgYWRkX2RhdGEoZGIsICJQcm9wZXJ0eSIsIFsoIlNlY3VyZUN1c3RvbVByb3BlcnRpZXMiLCBwcm9wcyldKQotCi1jbGFzcyBQeURpYWxvZyhEaWFsb2cpOgotICAgICIiIkRpYWxvZyBjbGFzcyB3aXRoIGEgZml4ZWQgbGF5b3V0OiBjb250cm9scyBhdCB0aGUgdG9wLCB0aGVuIGEgcnVsZXIsCi0gICAgdGhlbiBhIGxpc3Qgb2YgYnV0dG9uczogYmFjaywgbmV4dCwgY2FuY2VsLiBPcHRpb25hbGx5IGEgYml0bWFwIGF0IHRoZQotICAgIGxlZnQuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKLSAgICAgICAgIiIiRGlhbG9nKGRhdGFiYXNlLCBuYW1lLCB4LCB5LCB3LCBoLCBhdHRyaWJ1dGVzLCB0aXRsZSwgZmlyc3QsCi0gICAgICAgIGRlZmF1bHQsIGNhbmNlbCwgYml0bWFwPXRydWUpIiIiCi0gICAgICAgIERpYWxvZy5fX2luaXRfXyhzZWxmLCAqYXJncykKLSAgICAgICAgcnVsZXIgPSBzZWxmLmggLSAzNgotICAgICAgICBibXdpZHRoID0gMTUyKnJ1bGVyLzMyOAotICAgICAgICBpZiBrdy5nZXQoImJpdG1hcCIsIFRydWUpOgotICAgICAgICAgICAgc2VsZi5iaXRtYXAoIkJpdG1hcCIsIDAsIDAsIGJtd2lkdGgsIHJ1bGVyLCAiUHl0aG9uV2luIikKLSAgICAgICAgc2VsZi5saW5lKCJCb3R0b21MaW5lIiwgMCwgcnVsZXIsIHNlbGYudywgMCkKLQotICAgIGRlZiB0aXRsZShzZWxmLCB0aXRsZSk6Ci0gICAgICAgICJTZXQgdGhlIHRpdGxlIHRleHQgb2YgdGhlIGRpYWxvZyBhdCB0aGUgdG9wLiIKLSAgICAgICAgIyBuYW1lLCB4LCB5LCB3LCBoLCBmbGFncz1WaXNpYmxlfEVuYWJsZWR8VHJhbnNwYXJlbnR8Tm9QcmVmaXgsCi0gICAgICAgICMgdGV4dCwgaW4gVmVyZGFuYUJvbGQxMAotICAgICAgICBzZWxmLnRleHQoIlRpdGxlIiwgMTM1LCAxMCwgMjIwLCA2MCwgMHgzMDAwMywKLSAgICAgICAgICAgICAgICAgIHIie1xWZXJkYW5hQm9sZDEwfSVzIiAlIHRpdGxlKQotCi0gICAgZGVmIGJhY2soc2VsZiwgdGl0bGUsIG5leHQsIG5hbWUgPSAiQmFjayIsIGFjdGl2ZSA9IDEpOgotICAgICAgICAiIiJBZGQgYSBiYWNrIGJ1dHRvbiB3aXRoIGEgZ2l2ZW4gdGl0bGUsIHRoZSB0YWItbmV4dCBidXR0b24sCi0gICAgICAgIGl0cyBuYW1lIGluIHRoZSBDb250cm9sIHRhYmxlLCBwb3NzaWJseSBpbml0aWFsbHkgZGlzYWJsZWQuCi0KLSAgICAgICAgUmV0dXJuIHRoZSBidXR0b24sIHNvIHRoYXQgZXZlbnRzIGNhbiBiZSBhc3NvY2lhdGVkIiIiCi0gICAgICAgIGlmIGFjdGl2ZToKLSAgICAgICAgICAgIGZsYWdzID0gMyAjIFZpc2libGV8RW5hYmxlZAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmxhZ3MgPSAxICMgVmlzaWJsZQotICAgICAgICByZXR1cm4gc2VsZi5wdXNoYnV0dG9uKG5hbWUsIDE4MCwgc2VsZi5oLTI3ICwgNTYsIDE3LCBmbGFncywgdGl0bGUsIG5leHQpCi0KLSAgICBkZWYgY2FuY2VsKHNlbGYsIHRpdGxlLCBuZXh0LCBuYW1lID0gIkNhbmNlbCIsIGFjdGl2ZSA9IDEpOgotICAgICAgICAiIiJBZGQgYSBjYW5jZWwgYnV0dG9uIHdpdGggYSBnaXZlbiB0aXRsZSwgdGhlIHRhYi1uZXh0IGJ1dHRvbiwKLSAgICAgICAgaXRzIG5hbWUgaW4gdGhlIENvbnRyb2wgdGFibGUsIHBvc3NpYmx5IGluaXRpYWxseSBkaXNhYmxlZC4KLQotICAgICAgICBSZXR1cm4gdGhlIGJ1dHRvbiwgc28gdGhhdCBldmVudHMgY2FuIGJlIGFzc29jaWF0ZWQiIiIKLSAgICAgICAgaWYgYWN0aXZlOgotICAgICAgICAgICAgZmxhZ3MgPSAzICMgVmlzaWJsZXxFbmFibGVkCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmbGFncyA9IDEgIyBWaXNpYmxlCi0gICAgICAgIHJldHVybiBzZWxmLnB1c2hidXR0b24obmFtZSwgMzA0LCBzZWxmLmgtMjcsIDU2LCAxNywgZmxhZ3MsIHRpdGxlLCBuZXh0KQotCi0gICAgZGVmIG5leHQoc2VsZiwgdGl0bGUsIG5leHQsIG5hbWUgPSAiTmV4dCIsIGFjdGl2ZSA9IDEpOgotICAgICAgICAiIiJBZGQgYSBOZXh0IGJ1dHRvbiB3aXRoIGEgZ2l2ZW4gdGl0bGUsIHRoZSB0YWItbmV4dCBidXR0b24sCi0gICAgICAgIGl0cyBuYW1lIGluIHRoZSBDb250cm9sIHRhYmxlLCBwb3NzaWJseSBpbml0aWFsbHkgZGlzYWJsZWQuCi0KLSAgICAgICAgUmV0dXJuIHRoZSBidXR0b24sIHNvIHRoYXQgZXZlbnRzIGNhbiBiZSBhc3NvY2lhdGVkIiIiCi0gICAgICAgIGlmIGFjdGl2ZToKLSAgICAgICAgICAgIGZsYWdzID0gMyAjIFZpc2libGV8RW5hYmxlZAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmxhZ3MgPSAxICMgVmlzaWJsZQotICAgICAgICByZXR1cm4gc2VsZi5wdXNoYnV0dG9uKG5hbWUsIDIzNiwgc2VsZi5oLTI3LCA1NiwgMTcsIGZsYWdzLCB0aXRsZSwgbmV4dCkKLQotICAgIGRlZiB4YnV0dG9uKHNlbGYsIG5hbWUsIHRpdGxlLCBuZXh0LCB4cG9zKToKLSAgICAgICAgIiIiQWRkIGEgYnV0dG9uIHdpdGggYSBnaXZlbiB0aXRsZSwgdGhlIHRhYi1uZXh0IGJ1dHRvbiwKLSAgICAgICAgaXRzIG5hbWUgaW4gdGhlIENvbnRyb2wgdGFibGUsIGdpdmluZyBpdHMgeCBwb3NpdGlvbjsgdGhlCi0gICAgICAgIHktcG9zaXRpb24gaXMgYWxpZ25lZCB3aXRoIHRoZSBvdGhlciBidXR0b25zLgotCi0gICAgICAgIFJldHVybiB0aGUgYnV0dG9uLCBzbyB0aGF0IGV2ZW50cyBjYW4gYmUgYXNzb2NpYXRlZCIiIgotICAgICAgICByZXR1cm4gc2VsZi5wdXNoYnV0dG9uKG5hbWUsIGludChzZWxmLncqeHBvcyAtIDI4KSwgc2VsZi5oLTI3LCA1NiwgMTcsIDMsIHRpdGxlLCBuZXh0KQotCi1kZWYgYWRkX3VpKGRiKToKLSAgICB4ID0geSA9IDUwCi0gICAgdyA9IDM3MAotICAgIGggPSAzMDAKLSAgICB0aXRsZSA9ICJbUHJvZHVjdE5hbWVdIFNldHVwIgotCi0gICAgIyBzZWUgIkRpYWxvZyBTdHlsZSBCaXRzIgotICAgIG1vZGFsID0gMyAgICAgICMgdmlzaWJsZSB8IG1vZGFsCi0gICAgbW9kZWxlc3MgPSAxICAgIyB2aXNpYmxlCi0gICAgdHJhY2tfZGlza19zcGFjZSA9IDMyCi0KLSAgICBhZGRfZGF0YShkYiwgJ0FjdGlvblRleHQnLCB1aXNhbXBsZS5BY3Rpb25UZXh0KQotICAgIGFkZF9kYXRhKGRiLCAnVUlUZXh0JywgdWlzYW1wbGUuVUlUZXh0KQotCi0gICAgIyBCaXRtYXBzCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNyY2RpcityIlxQQ1xweXRob25faWNvbi5leGUiKToKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJSdW4gaWNvbnMubWFrIGluIFBDIGRpcmVjdG9yeSIpCi0gICAgYWRkX2RhdGEoZGIsICJCaW5hcnkiLAotICAgICAgICAgICAgIFsoIlB5dGhvbldpbiIsIG1zaWxpYi5CaW5hcnkociIlc1xQQ2J1aWxkXGluc3RhbGxlci5ibXAiICUgc3JjZGlyKSksICMgMTUyeDMyOCBwaXhlbHMKLSAgICAgICAgICAgICAgKCJweS5pY28iLG1zaWxpYi5CaW5hcnkoc3JjZGlyK3IiXFBDXHB5LmljbyIpKSwKLSAgICAgICAgICAgICBdKQotICAgIGFkZF9kYXRhKGRiLCAiSWNvbiIsCi0gICAgICAgICAgICAgWygicHl0aG9uX2ljb24uZXhlIiwgbXNpbGliLkJpbmFyeShzcmNkaXIrciJcUENccHl0aG9uX2ljb24uZXhlIikpXSkKLQotICAgICMgU2NyaXB0cwotICAgICMgQ2hlY2tEaXIgc2V0cyBUYXJnZXRFeGlzdHMgaWYgVEFSR0VURElSIGV4aXN0cy4KLSAgICAjIFVwZGF0ZUVkaXRJRExFIHNldHMgdGhlIFJFR0lTVFJZLnRjbCBjb21wb25lbnQgaW50bwotICAgICMgdGhlIGluc3RhbGxlZC91bmluc3RhbGxlZCBzdGF0ZSBhY2NvcmRpbmcgdG8gYm90aCB0aGUKLSAgICAjIEV4dGVuc2lvbnMgYW5kIFRjbFRrIGZlYXR1cmVzLgotICAgIGFkZF9kYXRhKGRiLCAiQmluYXJ5IiwgWygiU2NyaXB0IiwgbXNpbGliLkJpbmFyeSgibXNpc3VwcG9ydC5kbGwiKSldKQotICAgICMgU2VlICJDdXN0b20gQWN0aW9uIFR5cGUgMSIKLSAgICBpZiBtc2lsaWIuV2luNjQ6Ci0gICAgICAgIENoZWNrRGlyID0gIkNoZWNrRGlyIgotICAgICAgICBVcGRhdGVFZGl0SURMRSA9ICJVcGRhdGVFZGl0SURMRSIKLSAgICBlbHNlOgotICAgICAgICBDaGVja0RpciA9ICAiX0NoZWNrRGlyQDQiCi0gICAgICAgIFVwZGF0ZUVkaXRJRExFID0gIl9VcGRhdGVFZGl0SURMRUA0IgotICAgIGFkZF9kYXRhKGRiLCAiQ3VzdG9tQWN0aW9uIiwKLSAgICAgICAgWygiQ2hlY2tEaXIiLCAxLCAiU2NyaXB0IiwgQ2hlY2tEaXIpXSkKLSAgICBpZiBoYXZlX3RjbDoKLSAgICAgICAgYWRkX2RhdGEoZGIsICJDdXN0b21BY3Rpb24iLAotICAgICAgICBbKCJVcGRhdGVFZGl0SURMRSIsIDEsICJTY3JpcHQiLCBVcGRhdGVFZGl0SURMRSldKQotCi0gICAgIyBVSSBjdXN0b21pemF0aW9uIHByb3BlcnRpZXMKLSAgICBhZGRfZGF0YShkYiwgIlByb3BlcnR5IiwKLSAgICAgICAgICAgICAjIFNlZSAiRGVmYXVsdFVJRm9udCBQcm9wZXJ0eSIKLSAgICAgICAgICAgICBbKCJEZWZhdWx0VUlGb250IiwgIkRsZ0ZvbnQ4IiksCi0gICAgICAgICAgICAgICMgU2VlICJFcnJvckRpYWxvZyBTdHlsZSBCaXQiCi0gICAgICAgICAgICAgICgiRXJyb3JEaWFsb2ciLCAiRXJyb3JEbGciKSwKLSAgICAgICAgICAgICAgKCJQcm9ncmVzczEiLCAiSW5zdGFsbCIpLCAgICMgbW9kaWZpZWQgaW4gbWFpbnRlbmFuY2UgdHlwZSBkbGcKLSAgICAgICAgICAgICAgKCJQcm9ncmVzczIiLCAiaW5zdGFsbHMiKSwKLSAgICAgICAgICAgICAgKCJNYWludGVuYW5jZUZvcm1fQWN0aW9uIiwgIlJlcGFpciIpXSkKLQotICAgICMgRm9udHMsIHNlZSAiVGV4dFN0eWxlIFRhYmxlIgotICAgIGFkZF9kYXRhKGRiLCAiVGV4dFN0eWxlIiwKLSAgICAgICAgICAgICBbKCJEbGdGb250OCIsICJUYWhvbWEiLCA5LCBOb25lLCAwKSwKLSAgICAgICAgICAgICAgKCJEbGdGb250Qm9sZDgiLCAiVGFob21hIiwgOCwgTm9uZSwgMSksICNib2xkCi0gICAgICAgICAgICAgICgiVmVyZGFuYUJvbGQxMCIsICJWZXJkYW5hIiwgMTAsIE5vbmUsIDEpLAotICAgICAgICAgICAgICAoIlZlcmRhbmFSZWQ5IiwgIlZlcmRhbmEiLCA5LCAyNTUsIDApLAotICAgICAgICAgICAgIF0pCi0KLSAgICBjb21waWxlYXJncyA9IHInLVdpICJbVEFSR0VURElSXUxpYlxjb21waWxlYWxsLnB5IiAtZiAteCAiYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xweTJffGxpYjJ0bzNcXHRlc3RzfHZlbnZcXHNjcmlwdHMiICJbVEFSR0VURElSXUxpYiInCi0gICAgbGliMnRvM2FyZ3MgPSByJy1jICJpbXBvcnQgbGliMnRvMy5weWdyYW0sIGxpYjJ0bzMucGF0Y29tcDtsaWIydG8zLnBhdGNvbXAuUGF0dGVybkNvbXBpbGVyKCkiJwotICAgIHVwZGF0ZXBpcGFyZ3MgPSByJy1tIGVuc3VyZXBpcCAtVSAtLWRlZmF1bHQtcGlwJwotICAgIHJlbW92ZXBpcGFyZ3MgPSByJy1CIC1tIGVuc3VyZXBpcC5fdW5pbnN0YWxsJwotICAgICMgU2VlICJDdXN0b21BY3Rpb24gVGFibGUiCi0gICAgYWRkX2RhdGEoZGIsICJDdXN0b21BY3Rpb24iLCBbCi0gICAgICAgICMgbXNpZGJDdXN0b21BY3Rpb25UeXBlRmlyc3RTZXF1ZW5jZSArIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZVRleHREYXRhICsgbXNpZGJDdXN0b21BY3Rpb25UeXBlUHJvcGVydHkKLSAgICAgICAgIyBTZWUgIkN1c3RvbSBBY3Rpb24gVHlwZSA1MSIsCi0gICAgICAgICMgIkN1c3RvbSBBY3Rpb24gRXhlY3V0aW9uIFNjaGVkdWxpbmcgT3B0aW9ucyIKLSAgICAgICAgKCJJbml0aWFsVGFyZ2V0RGlyIiwgMzA3LCAiVEFSR0VURElSIiwKLSAgICAgICAgICJbV2luZG93c1ZvbHVtZV1QeXRob24lcyVzIiAlIChtYWpvciwgbWlub3IpKSwKLSAgICAgICAgKCJTZXRETExEaXJUb1RhcmdldCIsIDMwNywgIkRMTERJUiIsICJbVEFSR0VURElSXSIpLAotICAgICAgICAoIlNldERMTERpclRvU3lzdGVtMzIiLCAzMDcsICJETExESVIiLCBTeXN0ZW1Gb2xkZXJOYW1lKSwKLSAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvVGFyZ2V0IiwgMzA3LCAiTEFVTkNIRVJESVIiLCAiW1RBUkdFVERJUl0iKSwKLSAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvV2luZG93cyIsIDMwNywgIkxBVU5DSEVSRElSIiwgIltXaW5kb3dzRm9sZGVyXSIpLAotICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZUV4ZSArIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZVNvdXJjZUZpbGUKLSAgICAgICAgIyBTZWUgIkN1c3RvbSBBY3Rpb24gVHlwZSAxOCIKLSAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVJblNjcmlwdCAoMTAyNCk7IHJ1biBkdXJpbmcgYWN0dWFsIGluc3RhbGxhdGlvbgotICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZU5vSW1wZXJzb25hdGUgKDIwNDgpOyBydW4gYWN0aW9uIGluIHN5c3RlbSBhY2NvdW50LCBub3QgdXNlciBhY2NvdW50Ci0gICAgICAgICgiQ29tcGlsZVB5YyIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCBjb21waWxlYXJncyksCi0gICAgICAgICgiQ29tcGlsZVB5byIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCAiLU8gIitjb21waWxlYXJncyksCi0gICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAxOCsxMDI0KzIwNDgsICJweXRob24uZXhlIiwgbGliMnRvM2FyZ3MpLAotICAgICAgICAoIlVwZGF0ZVBpcCIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCB1cGRhdGVwaXBhcmdzKSwKLSAgICAgICAgKCJSZW1vdmVQaXAiLCAxOCsxMDI0KzIwNDgsICJweXRob24uZXhlIiwgcmVtb3ZlcGlwYXJncyksCi0gICAgICAgIF0pCi0KLSAgICAjIFVJIFNlcXVlbmNlcywgc2VlICJJbnN0YWxsVUlTZXF1ZW5jZSBUYWJsZSIsICJVc2luZyBhIFNlcXVlbmNlIFRhYmxlIgotICAgICMgTnVtYmVycyBpbmRpY2F0ZSBzZXF1ZW5jZTsgc2VlIHNlcXVlbmNlLnB5IGZvciBob3cgdGhlc2UgYWN0aW9uIGludGVncmF0ZQotICAgIGFkZF9kYXRhKGRiLCAiSW5zdGFsbFVJU2VxdWVuY2UiLAotICAgICAgICAgICAgIFsoIlByZXBhcmVEbGciLCAiTm90IFByaXZpbGVnZWQgb3IgV2luZG93czl4IG9yIEluc3RhbGxlZCIsIDE0MCksCi0gICAgICAgICAgICAgICgiV2hpY2hVc2Vyc0RsZyIsICJQcml2aWxlZ2VkIGFuZCBub3QgV2luZG93czl4IGFuZCBub3QgSW5zdGFsbGVkIiwgMTQxKSwKLSAgICAgICAgICAgICAgKCJJbml0aWFsVGFyZ2V0RGlyIiwgJ1RBUkdFVERJUj0iIicsIDc1MCksCi0gICAgICAgICAgICAgICMgSW4gdGhlIHVzZXIgaW50ZXJmYWNlLCBhc3N1bWUgYWxsLXVzZXJzIGluc3RhbGxhdGlvbiBpZiBwcml2aWxlZ2VkLgotICAgICAgICAgICAgICAoIlNldERMTERpclRvU3lzdGVtMzIiLCAnRExMRElSPSIiIGFuZCAnICsgc3lzMzJjb25kLCA3NTEpLAotICAgICAgICAgICAgICAoIlNldERMTERpclRvVGFyZ2V0IiwgJ0RMTERJUj0iIiBhbmQgbm90ICcgKyBzeXMzMmNvbmQsIDc1MiksCi0gICAgICAgICAgICAgICgiU2V0TGF1bmNoZXJEaXJUb1dpbmRvd3MiLCAnTEFVTkNIRVJESVI9IiIgYW5kICcgKyBzeXMzMmNvbmQsIDc1MyksCi0gICAgICAgICAgICAgICgiU2V0TGF1bmNoZXJEaXJUb1RhcmdldCIsICdMQVVOQ0hFUkRJUj0iIiBhbmQgbm90ICcgKyBzeXMzMmNvbmQsIDc1NCksCi0gICAgICAgICAgICAgICgiU2VsZWN0RGlyZWN0b3J5RGxnIiwgIk5vdCBJbnN0YWxsZWQiLCAxMjMwKSwKLSAgICAgICAgICAgICAgIyBYWFggbm8gc3VwcG9ydCBmb3IgcmVzdW1lIGluc3RhbGxhdGlvbnMgeWV0Ci0gICAgICAgICAgICAgICMoIlJlc3VtZURsZyIsICJJbnN0YWxsZWQgQU5EIChSRVNVTUUgT1IgUHJlc2VsZWN0ZWQpIiwgMTI0MCksCi0gICAgICAgICAgICAgICgiTWFpbnRlbmFuY2VUeXBlRGxnIiwgIkluc3RhbGxlZCBBTkQgTk9UIFJFU1VNRSBBTkQgTk9UIFByZXNlbGVjdGVkIiwgMTI1MCksCi0gICAgICAgICAgICAgICgiUHJvZ3Jlc3NEbGciLCBOb25lLCAxMjgwKV0pCi0gICAgYWRkX2RhdGEoZGIsICJBZG1pblVJU2VxdWVuY2UiLAotICAgICAgICAgICAgIFsoIkluaXRpYWxUYXJnZXREaXIiLCAnVEFSR0VURElSPSIiJywgNzUwKSwKLSAgICAgICAgICAgICAgKCJTZXRETExEaXJUb1RhcmdldCIsICdETExESVI9IiInLCA3NTEpLAotICAgICAgICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9UYXJnZXQiLCAnTEFVTkNIRVJESVI9IiInLCA3NTIpLAotICAgICAgICAgICAgIF0pCi0KLSAgICAjIFByZXBlbmQgVEFSR0VURElSIHRvIHRoZSBzeXN0ZW0gcGF0aCwgYW5kIHJlbW92ZSBpdCBvbiB1bmluc3RhbGwuCi0gICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCi0gICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W1RBUkdFVERJUl1TY3JpcHRzO1t+XSIsICJSRUdJU1RSWS5wYXRoIildKQotCi0gICAgIyBFeGVjdXRlIFNlcXVlbmNlcwotICAgIGFkZF9kYXRhKGRiLCAiSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSIsCi0gICAgICAgICAgICBbKCJJbml0aWFsVGFyZ2V0RGlyIiwgJ1RBUkdFVERJUj0iIicsIDc1MCksCi0gICAgICAgICAgICAgKCJTZXRETExEaXJUb1N5c3RlbTMyIiwgJ0RMTERJUj0iIiBhbmQgJyArIHN5czMyY29uZCwgNzUxKSwKLSAgICAgICAgICAgICAoIlNldERMTERpclRvVGFyZ2V0IiwgJ0RMTERJUj0iIiBhbmQgbm90ICcgKyBzeXMzMmNvbmQsIDc1MiksCi0gICAgICAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvV2luZG93cyIsICdMQVVOQ0hFUkRJUj0iIiBhbmQgJyArIHN5czMyY29uZCwgNzUzKSwKLSAgICAgICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9UYXJnZXQiLCAnTEFVTkNIRVJESVI9IiIgYW5kIG5vdCAnICsgc3lzMzJjb25kLCA3NTQpLAotICAgICAgICAgICAgICgiVXBkYXRlRWRpdElETEUiLCBOb25lLCAxMDUwKSwKLSAgICAgICAgICAgICAjIHJ1biBjb21tYW5kIGlmIGluc3RhbGwgc3RhdGUgb2YgcGlwIGNoYW5nZXMgdG8gSU5TVEFMTFNUQVRFX0xPQ0FMCi0gICAgICAgICAgICAgIyBydW4gYWZ0ZXIgSW5zdGFsbEZpbGVzCi0gICAgICAgICAgICAgKCJVcGRhdGVQaXAiLCAiJnBpcF9mZWF0dXJlPTMiLCA0MDAxKSwKLSAgICAgICAgICAgICAjIHJlbW92ZSBwaXAgd2hlbiBzdGF0ZSBjaGFuZ2VzIHRvIElOU1RBTExTVEFURV9BQlNFTlQKLSAgICAgICAgICAgICAjIHJ1biBiZWZvcmUgUmVtb3ZlRmlsZXMKLSAgICAgICAgICAgICAoIlJlbW92ZVBpcCIsICImcGlwX2ZlYXR1cmU9MiIsIDM0OTkpLAotICAgICAgICAgICAgICgiQ29tcGlsZVB5YyIsICJDT01QSUxFQUxMIiwgNDAwMiksCi0gICAgICAgICAgICAgKCJDb21waWxlUHlvIiwgIkNPTVBJTEVBTEwiLCA0MDAzKSwKLSAgICAgICAgICAgICAoIkNvbXBpbGVHcmFtbWFyIiwgIkNPTVBJTEVBTEwiLCA0MDA0KSwKLSAgICAgICAgICAgIF0pCi0gICAgYWRkX2RhdGEoZGIsICJBZG1pbkV4ZWN1dGVTZXF1ZW5jZSIsCi0gICAgICAgICAgICBbKCJJbml0aWFsVGFyZ2V0RGlyIiwgJ1RBUkdFVERJUj0iIicsIDc1MCksCi0gICAgICAgICAgICAgKCJTZXRETExEaXJUb1RhcmdldCIsICdETExESVI9IiInLCA3NTEpLAotICAgICAgICAgICAgICgiU2V0TGF1bmNoZXJEaXJUb1RhcmdldCIsICdMQVVOQ0hFUkRJUj0iIicsIDc1MiksCi0gICAgICAgICAgICBdKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyBTdGFuZGFyZCBkaWFsb2dzOiBGYXRhbEVycm9yLCBVc2VyRXhpdCwgRXhpdERpYWxvZwotICAgIGZhdGFsPVB5RGlhbG9nKGRiLCAiRmF0YWxFcnJvciIsIHgsIHksIHcsIGgsIG1vZGFsLCB0aXRsZSwKLSAgICAgICAgICAgICAgICAgIkZpbmlzaCIsICJGaW5pc2giLCAiRmluaXNoIikKLSAgICBmYXRhbC50aXRsZSgiW1Byb2R1Y3ROYW1lXSBJbnN0YWxsZXIgZW5kZWQgcHJlbWF0dXJlbHkiKQotICAgIGZhdGFsLmJhY2soIjwgQmFjayIsICJGaW5pc2giLCBhY3RpdmUgPSAwKQotICAgIGZhdGFsLmNhbmNlbCgiQ2FuY2VsIiwgIkJhY2siLCBhY3RpdmUgPSAwKQotICAgIGZhdGFsLnRleHQoIkRlc2NyaXB0aW9uMSIsIDEzNSwgNzAsIDIyMCwgODAsIDB4MzAwMDMsCi0gICAgICAgICAgICAgICAiW1Byb2R1Y3ROYW1lXSBzZXR1cCBlbmRlZCBwcmVtYXR1cmVseSBiZWNhdXNlIG9mIGFuIGVycm9yLiAgWW91ciBzeXN0ZW0gaGFzIG5vdCBiZWVuIG1vZGlmaWVkLiAgVG8gaW5zdGFsbCB0aGlzIHByb2dyYW0gYXQgYSBsYXRlciB0aW1lLCBwbGVhc2UgcnVuIHRoZSBpbnN0YWxsYXRpb24gYWdhaW4uIikKLSAgICBmYXRhbC50ZXh0KCJEZXNjcmlwdGlvbjIiLCAxMzUsIDE1NSwgMjIwLCAyMCwgMHgzMDAwMywKLSAgICAgICAgICAgICAgICJDbGljayB0aGUgRmluaXNoIGJ1dHRvbiB0byBleGl0IHRoZSBJbnN0YWxsZXIuIikKLSAgICBjPWZhdGFsLm5leHQoIkZpbmlzaCIsICJDYW5jZWwiLCBuYW1lPSJGaW5pc2giKQotICAgICMgU2VlICJDb250cm9sRXZlbnQgVGFibGUiLiBQYXJhbWV0ZXJzIGFyZSB0aGUgZXZlbnQsIHRoZSBwYXJhbWV0ZXIKLSAgICAjIHRvIHRoZSBhY3Rpb24sIGFuZCBvcHRpb25hbGx5IHRoZSBjb25kaXRpb24gZm9yIHRoZSBldmVudCwgYW5kIHRoZSBvcmRlcgotICAgICMgb2YgZXZlbnRzLgotICAgIGMuZXZlbnQoIkVuZERpYWxvZyIsICJFeGl0IikKLQotICAgIHVzZXJfZXhpdD1QeURpYWxvZyhkYiwgIlVzZXJFeGl0IiwgeCwgeSwgdywgaCwgbW9kYWwsIHRpdGxlLAotICAgICAgICAgICAgICAgICAiRmluaXNoIiwgIkZpbmlzaCIsICJGaW5pc2giKQotICAgIHVzZXJfZXhpdC50aXRsZSgiW1Byb2R1Y3ROYW1lXSBJbnN0YWxsZXIgd2FzIGludGVycnVwdGVkIikKLSAgICB1c2VyX2V4aXQuYmFjaygiPCBCYWNrIiwgIkZpbmlzaCIsIGFjdGl2ZSA9IDApCi0gICAgdXNlcl9leGl0LmNhbmNlbCgiQ2FuY2VsIiwgIkJhY2siLCBhY3RpdmUgPSAwKQotICAgIHVzZXJfZXhpdC50ZXh0KCJEZXNjcmlwdGlvbjEiLCAxMzUsIDcwLCAyMjAsIDgwLCAweDMwMDAzLAotICAgICAgICAgICAgICAgIltQcm9kdWN0TmFtZV0gc2V0dXAgd2FzIGludGVycnVwdGVkLiAgWW91ciBzeXN0ZW0gaGFzIG5vdCBiZWVuIG1vZGlmaWVkLiAgIgotICAgICAgICAgICAgICAgIlRvIGluc3RhbGwgdGhpcyBwcm9ncmFtIGF0IGEgbGF0ZXIgdGltZSwgcGxlYXNlIHJ1biB0aGUgaW5zdGFsbGF0aW9uIGFnYWluLiIpCi0gICAgdXNlcl9leGl0LnRleHQoIkRlc2NyaXB0aW9uMiIsIDEzNSwgMTU1LCAyMjAsIDIwLCAweDMwMDAzLAotICAgICAgICAgICAgICAgIkNsaWNrIHRoZSBGaW5pc2ggYnV0dG9uIHRvIGV4aXQgdGhlIEluc3RhbGxlci4iKQotICAgIGMgPSB1c2VyX2V4aXQubmV4dCgiRmluaXNoIiwgIkNhbmNlbCIsIG5hbWU9IkZpbmlzaCIpCi0gICAgYy5ldmVudCgiRW5kRGlhbG9nIiwgIkV4aXQiKQotCi0gICAgZXhpdF9kaWFsb2cgPSBQeURpYWxvZyhkYiwgIkV4aXREaWFsb2ciLCB4LCB5LCB3LCBoLCBtb2RhbCwgdGl0bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkZpbmlzaCIsICJGaW5pc2giLCAiRmluaXNoIikKLSAgICBleGl0X2RpYWxvZy50aXRsZSgiQ29tcGxldGUgdGhlIFtQcm9kdWN0TmFtZV0gSW5zdGFsbGVyIikKLSAgICBleGl0X2RpYWxvZy5iYWNrKCI8IEJhY2siLCAiRmluaXNoIiwgYWN0aXZlID0gMCkKLSAgICBleGl0X2RpYWxvZy5jYW5jZWwoIkNhbmNlbCIsICJCYWNrIiwgYWN0aXZlID0gMCkKLSAgICBleGl0X2RpYWxvZy50ZXh0KCJBY2tub3dsZWRnZW1lbnRzIiwgMTM1LCA5NSwgMjIwLCAxMjAsIDB4MzAwMDMsCi0gICAgICAiU3BlY2lhbCBXaW5kb3dzIHRoYW5rcyB0bzpcbiIKLSAgICAgICIgICAgTWFyayBIYW1tb25kLCB3aXRob3V0IHdob3NlIHllYXJzIG9mIGZyZWVseSBcbiIKLSAgICAgICIgICAgc2hhcmVkIFdpbmRvd3MgZXhwZXJ0aXNlLCBQeXRob24gZm9yIFdpbmRvd3MgXG4iCi0gICAgICAiICAgIHdvdWxkIHN0aWxsIGJlIFB5dGhvbiBmb3IgRE9TLiIpCi0KLSAgICBjID0gZXhpdF9kaWFsb2cudGV4dCgid2FybmluZyIsIDEzNSwgMjAwLCAyMjAsIDQwLCAweDMwMDAzLAotICAgICAgICAgICAgIntcXFZlcmRhbmFSZWQ5fVdhcm5pbmc6IFB5dGhvbiAyLjUueCBpcyB0aGUgbGFzdCAiCi0gICAgICAgICAgICAiUHl0aG9uIHJlbGVhc2UgZm9yIFdpbmRvd3MgOXguIikKLSAgICBjLmNvbmRpdGlvbigiSGlkZSIsICJOT1QgVmVyc2lvbjlYIikKLQotICAgIGV4aXRfZGlhbG9nLnRleHQoIkRlc2NyaXB0aW9uIiwgMTM1LCAyMzUsIDIyMCwgMjAsIDB4MzAwMDMsCi0gICAgICAgICAgICAgICAiQ2xpY2sgdGhlIEZpbmlzaCBidXR0b24gdG8gZXhpdCB0aGUgSW5zdGFsbGVyLiIpCi0gICAgYyA9IGV4aXRfZGlhbG9nLm5leHQoIkZpbmlzaCIsICJDYW5jZWwiLCBuYW1lPSJGaW5pc2giKQotICAgIGMuZXZlbnQoIkVuZERpYWxvZyIsICJSZXR1cm4iKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyBSZXF1aXJlZCBkaWFsb2c6IEZpbGVzSW5Vc2UsIEVycm9yRGxnCi0gICAgaW51c2UgPSBQeURpYWxvZyhkYiwgIkZpbGVzSW5Vc2UiLAotICAgICAgICAgICAgICAgICAgICAgeCwgeSwgdywgaCwKLSAgICAgICAgICAgICAgICAgICAgIDE5LCAgICAgICAgICAgICAgICAjIEtlZXBNb2RlbGVzc3xNb2RhbHxWaXNpYmxlCi0gICAgICAgICAgICAgICAgICAgICB0aXRsZSwKLSAgICAgICAgICAgICAgICAgICAgICJSZXRyeSIsICJSZXRyeSIsICJSZXRyeSIsIGJpdG1hcD1GYWxzZSkKLSAgICBpbnVzZS50ZXh0KCJUaXRsZSIsIDE1LCA2LCAyMDAsIDE1LCAweDMwMDAzLAotICAgICAgICAgICAgICAgciJ7XERsZ0ZvbnRCb2xkOH1GaWxlcyBpbiBVc2UiKQotICAgIGludXNlLnRleHQoIkRlc2NyaXB0aW9uIiwgMjAsIDIzLCAyODAsIDIwLCAweDMwMDAzLAotICAgICAgICAgICAgICAgIlNvbWUgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYXJlIGN1cnJlbnRseSBpbiB1c2UuIikKLSAgICBpbnVzZS50ZXh0KCJUZXh0IiwgMjAsIDU1LCAzMzAsIDUwLCAzLAotICAgICAgICAgICAgICAgIlRoZSBmb2xsb3dpbmcgYXBwbGljYXRpb25zIGFyZSB1c2luZyBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZCBieSB0aGlzIHNldHVwLiBDbG9zZSB0aGVzZSBhcHBsaWNhdGlvbnMgYW5kIHRoZW4gY2xpY2sgUmV0cnkgdG8gY29udGludWUgdGhlIGluc3RhbGxhdGlvbiBvciBDYW5jZWwgdG8gZXhpdCBpdC4iKQotICAgIGludXNlLmNvbnRyb2woIkxpc3QiLCAiTGlzdEJveCIsIDIwLCAxMDcsIDMzMCwgMTMwLCA3LCAiRmlsZUluVXNlUHJvY2VzcyIsCi0gICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lKQotICAgIGM9aW51c2UuYmFjaygiRXhpdCIsICJJZ25vcmUiLCBuYW1lPSJFeGl0IikKLSAgICBjLmV2ZW50KCJFbmREaWFsb2ciLCAiRXhpdCIpCi0gICAgYz1pbnVzZS5uZXh0KCJJZ25vcmUiLCAiUmV0cnkiLCBuYW1lPSJJZ25vcmUiKQotICAgIGMuZXZlbnQoIkVuZERpYWxvZyIsICJJZ25vcmUiKQotICAgIGM9aW51c2UuY2FuY2VsKCJSZXRyeSIsICJFeGl0IiwgbmFtZT0iUmV0cnkiKQotICAgIGMuZXZlbnQoIkVuZERpYWxvZyIsIlJldHJ5IikKLQotCi0gICAgIyBTZWUgIkVycm9yIERpYWxvZyIuIFNlZSAiSUNFMjAiIGZvciB0aGUgcmVxdWlyZWQgbmFtZXMgb2YgdGhlIGNvbnRyb2xzLgotICAgIGVycm9yID0gRGlhbG9nKGRiLCAiRXJyb3JEbGciLAotICAgICAgICAgICAgICAgICAgIDUwLCAxMCwgMzMwLCAxMDEsCi0gICAgICAgICAgICAgICAgICAgNjU1NDMsICAgICAgICMgRXJyb3J8TWluaW1pemV8TW9kYWx8VmlzaWJsZQotICAgICAgICAgICAgICAgICAgIHRpdGxlLAotICAgICAgICAgICAgICAgICAgICJFcnJvclRleHQiLCBOb25lLCBOb25lKQotICAgIGVycm9yLnRleHQoIkVycm9yVGV4dCIsIDUwLDksMjgwLDQ4LDMsICIiKQotICAgIGVycm9yLmNvbnRyb2woIkVycm9ySWNvbiIsICJJY29uIiwgMTUsIDksIDI0LCAyNCwgNTI0Mjg4MSwgTm9uZSwgInB5LmljbyIsIE5vbmUsIE5vbmUpCi0gICAgZXJyb3IucHVzaGJ1dHRvbigiTiIsMTIwLDcyLDgxLDIxLDMsIk5vIixOb25lKS5ldmVudCgiRW5kRGlhbG9nIiwiRXJyb3JObyIpCi0gICAgZXJyb3IucHVzaGJ1dHRvbigiWSIsMjQwLDcyLDgxLDIxLDMsIlllcyIsTm9uZSkuZXZlbnQoIkVuZERpYWxvZyIsIkVycm9yWWVzIikKLSAgICBlcnJvci5wdXNoYnV0dG9uKCJBIiwwLDcyLDgxLDIxLDMsIkFib3J0IixOb25lKS5ldmVudCgiRW5kRGlhbG9nIiwiRXJyb3JBYm9ydCIpCi0gICAgZXJyb3IucHVzaGJ1dHRvbigiQyIsNDIsNzIsODEsMjEsMywiQ2FuY2VsIixOb25lKS5ldmVudCgiRW5kRGlhbG9nIiwiRXJyb3JDYW5jZWwiKQotICAgIGVycm9yLnB1c2hidXR0b24oIkkiLDgxLDcyLDgxLDIxLDMsIklnbm9yZSIsTm9uZSkuZXZlbnQoIkVuZERpYWxvZyIsIkVycm9ySWdub3JlIikKLSAgICBlcnJvci5wdXNoYnV0dG9uKCJPIiwxNTksNzIsODEsMjEsMywiT2siLE5vbmUpLmV2ZW50KCJFbmREaWFsb2ciLCJFcnJvck9rIikKLSAgICBlcnJvci5wdXNoYnV0dG9uKCJSIiwxOTgsNzIsODEsMjEsMywiUmV0cnkiLE5vbmUpLmV2ZW50KCJFbmREaWFsb2ciLCJFcnJvclJldHJ5IikKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMgR2xvYmFsICJRdWVyeSBDYW5jZWwiIGRpYWxvZwotICAgIGNhbmNlbCA9IERpYWxvZyhkYiwgIkNhbmNlbERsZyIsIDUwLCAxMCwgMjYwLCA4NSwgMywgdGl0bGUsCi0gICAgICAgICAgICAgICAgICAgICJObyIsICJObyIsICJObyIpCi0gICAgY2FuY2VsLnRleHQoIlRleHQiLCA0OCwgMTUsIDE5NCwgMzAsIDMsCi0gICAgICAgICAgICAgICAgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjYW5jZWwgW1Byb2R1Y3ROYW1lXSBpbnN0YWxsYXRpb24/IikKLSAgICBjYW5jZWwuY29udHJvbCgiSWNvbiIsICJJY29uIiwgMTUsIDE1LCAyNCwgMjQsIDUyNDI4ODEsIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgInB5LmljbyIsIE5vbmUsIE5vbmUpCi0gICAgYz1jYW5jZWwucHVzaGJ1dHRvbigiWWVzIiwgNzIsIDU3LCA1NiwgMTcsIDMsICJZZXMiLCAiTm8iKQotICAgIGMuZXZlbnQoIkVuZERpYWxvZyIsICJFeGl0IikKLQotICAgIGM9Y2FuY2VsLnB1c2hidXR0b24oIk5vIiwgMTMyLCA1NywgNTYsIDE3LCAzLCAiTm8iLCAiWWVzIikKLSAgICBjLmV2ZW50KCJFbmREaWFsb2ciLCAiUmV0dXJuIikKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMgR2xvYmFsICJXYWl0IGZvciBjb3N0aW5nIiBkaWFsb2cKLSAgICBjb3N0aW5nID0gRGlhbG9nKGRiLCAiV2FpdEZvckNvc3RpbmdEbGciLCA1MCwgMTAsIDI2MCwgODUsIG1vZGFsLCB0aXRsZSwKLSAgICAgICAgICAgICAgICAgICAgICJSZXR1cm4iLCAiUmV0dXJuIiwgIlJldHVybiIpCi0gICAgY29zdGluZy50ZXh0KCJUZXh0IiwgNDgsIDE1LCAxOTQsIDMwLCAzLAotICAgICAgICAgICAgICAgICAiUGxlYXNlIHdhaXQgd2hpbGUgdGhlIGluc3RhbGxlciBmaW5pc2hlcyBkZXRlcm1pbmluZyB5b3VyIGRpc2sgc3BhY2UgcmVxdWlyZW1lbnRzLiIpCi0gICAgY29zdGluZy5jb250cm9sKCJJY29uIiwgIkljb24iLCAxNSwgMTUsIDI0LCAyNCwgNTI0Mjg4MSwgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgInB5LmljbyIsIE5vbmUsIE5vbmUpCi0gICAgYyA9IGNvc3RpbmcucHVzaGJ1dHRvbigiUmV0dXJuIiwgMTAyLCA1NywgNTYsIDE3LCAzLCAiUmV0dXJuIiwgTm9uZSkKLSAgICBjLmV2ZW50KCJFbmREaWFsb2ciLCAiRXhpdCIpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIFByZXBhcmF0aW9uIGRpYWxvZzogbm8gdXNlciBpbnB1dCBleGNlcHQgY2FuY2VsbGF0aW9uCi0gICAgcHJlcCA9IFB5RGlhbG9nKGRiLCAiUHJlcGFyZURsZyIsIHgsIHksIHcsIGgsIG1vZGVsZXNzLCB0aXRsZSwKLSAgICAgICAgICAgICAgICAgICAgIkNhbmNlbCIsICJDYW5jZWwiLCAiQ2FuY2VsIikKLSAgICBwcmVwLnRleHQoIkRlc2NyaXB0aW9uIiwgMTM1LCA3MCwgMjIwLCA0MCwgMHgzMDAwMywKLSAgICAgICAgICAgICAgIlBsZWFzZSB3YWl0IHdoaWxlIHRoZSBJbnN0YWxsZXIgcHJlcGFyZXMgdG8gZ3VpZGUgeW91IHRocm91Z2ggdGhlIGluc3RhbGxhdGlvbi4iKQotICAgIHByZXAudGl0bGUoIldlbGNvbWUgdG8gdGhlIFtQcm9kdWN0TmFtZV0gSW5zdGFsbGVyIikKLSAgICBjPXByZXAudGV4dCgiQWN0aW9uVGV4dCIsIDEzNSwgMTEwLCAyMjAsIDIwLCAweDMwMDAzLCAiUG9uZGVyaW5nLi4uIikKLSAgICBjLm1hcHBpbmcoIkFjdGlvblRleHQiLCAiVGV4dCIpCi0gICAgYz1wcmVwLnRleHQoIkFjdGlvbkRhdGEiLCAxMzUsIDEzNSwgMjIwLCAzMCwgMHgzMDAwMywgTm9uZSkKLSAgICBjLm1hcHBpbmcoIkFjdGlvbkRhdGEiLCAiVGV4dCIpCi0gICAgcHJlcC5iYWNrKCJCYWNrIiwgTm9uZSwgYWN0aXZlPTApCi0gICAgcHJlcC5uZXh0KCJOZXh0IiwgTm9uZSwgYWN0aXZlPTApCi0gICAgYz1wcmVwLmNhbmNlbCgiQ2FuY2VsIiwgTm9uZSkKLSAgICBjLmV2ZW50KCJTcGF3bkRpYWxvZyIsICJDYW5jZWxEbGciKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyBUYXJnZXQgZGlyZWN0b3J5IHNlbGVjdGlvbgotICAgIHNlbGRsZyA9IFB5RGlhbG9nKGRiLCAiU2VsZWN0RGlyZWN0b3J5RGxnIiwgeCwgeSwgdywgaCwgbW9kYWwsIHRpdGxlLAotICAgICAgICAgICAgICAgICAgICAiTmV4dCIsICJOZXh0IiwgIkNhbmNlbCIpCi0gICAgc2VsZGxnLnRpdGxlKCJTZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5IikKLSAgICBjID0gc2VsZGxnLnRleHQoIkV4aXN0aW5nIiwgMTM1LCAyNSwgMjM1LCAzMCwgMHgzMDAwMywKLSAgICAgICAgICAgICAgICAgICAgIntcVmVyZGFuYVJlZDl9VGhpcyB1cGRhdGUgd2lsbCByZXBsYWNlIHlvdXIgZXhpc3RpbmcgW1Byb2R1Y3RMaW5lXSBpbnN0YWxsYXRpb24uIikKLSAgICBjLmNvbmRpdGlvbigiSGlkZSIsICdSRU1PVkVPTERWRVJTSU9OPSIiIGFuZCBSRU1PVkVPTERTTkFQU0hPVD0iIicpCi0gICAgc2VsZGxnLnRleHQoIkRlc2NyaXB0aW9uIiwgMTM1LCA1MCwgMjIwLCA0MCwgMHgzMDAwMywKLSAgICAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGEgZGlyZWN0b3J5IGZvciB0aGUgW1Byb2R1Y3ROYW1lXSBmaWxlcy4iKQotCi0gICAgc2VsZGxnLmJhY2soIjwgQmFjayIsIE5vbmUsIGFjdGl2ZT0wKQotICAgIGMgPSBzZWxkbGcubmV4dCgiTmV4dCA+IiwgIkNhbmNlbCIpCi0gICAgYy5ldmVudCgiRG9BY3Rpb24iLCAiQ2hlY2tEaXIiLCAiVGFyZ2V0RXhpc3RzT2s8PjEiLCBvcmRlcj0xKQotICAgICMgSWYgdGhlIHRhcmdldCBleGlzdHMsIGJ1dCB3ZSBmb3VuZCB0aGF0IHdlIGFyZSBnb2luZyB0byByZW1vdmUgb2xkIHZlcnNpb25zLCBkb24ndCBib3RoZXIKLSAgICAjIGNvbmZpcm1pbmcgdGhhdCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIFN0cmljdGx5IHNwZWFraW5nLCB3ZSBzaG91bGQgZGV0ZXJtaW5lIHRoYXQKLSAgICAjIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGlzIGluZGVlZCB0aGUgdGFyZ2V0IG9mIHRoZSBwcm9kdWN0IHRoYXQgd2UgYXJlIGdvaW5nIHRvIHJlbW92ZSwgYnV0Ci0gICAgIyBJIGRvbid0IGtub3cgaG93IHRvIGRvIHRoYXQuCi0gICAgYy5ldmVudCgiU3Bhd25EaWFsb2ciLCAiRXhpc3RpbmdEaXJlY3RvcnlEbGciLCAnVGFyZ2V0RXhpc3RzPTEgYW5kIFJFTU9WRU9MRFZFUlNJT049IiIgYW5kIFJFTU9WRU9MRFNOQVBTSE9UPSIiJywgMikKLSAgICBjLmV2ZW50KCJTZXRUYXJnZXRQYXRoIiwgIlRBUkdFVERJUiIsICdUYXJnZXRFeGlzdHM9MCBvciBSRU1PVkVPTERWRVJTSU9OPD4iIiBvciBSRU1PVkVPTERTTkFQU0hPVDw+IiInLCAzKQotICAgIGMuZXZlbnQoIlNwYXduV2FpdERpYWxvZyIsICJXYWl0Rm9yQ29zdGluZ0RsZyIsICJDb3N0aW5nQ29tcGxldGU9MSIsIDQpCi0gICAgYy5ldmVudCgiTmV3RGlhbG9nIiwgIlNlbGVjdEZlYXR1cmVzRGxnIiwgJ1RhcmdldEV4aXN0cz0wIG9yIFJFTU9WRU9MRFZFUlNJT048PiIiIG9yIFJFTU9WRU9MRFNOQVBTSE9UPD4iIicsIDUpCi0KLSAgICBjID0gc2VsZGxnLmNhbmNlbCgiQ2FuY2VsIiwgIkRpcmVjdG9yeUNvbWJvIikKLSAgICBjLmV2ZW50KCJTcGF3bkRpYWxvZyIsICJDYW5jZWxEbGciKQotCi0gICAgc2VsZGxnLmNvbnRyb2woIkRpcmVjdG9yeUNvbWJvIiwgIkRpcmVjdG9yeUNvbWJvIiwgMTM1LCA3MCwgMTcyLCA4MCwgMzkzMjE5LAotICAgICAgICAgICAgICAgICAgICJUQVJHRVRESVIiLCBOb25lLCAiRGlyZWN0b3J5TGlzdCIsIE5vbmUpCi0gICAgc2VsZGxnLmNvbnRyb2woIkRpcmVjdG9yeUxpc3QiLCAiRGlyZWN0b3J5TGlzdCIsIDEzNSwgOTAsIDIwOCwgMTM2LCAzLCAiVEFSR0VURElSIiwKLSAgICAgICAgICAgICAgICAgICBOb25lLCAiUGF0aEVkaXQiLCBOb25lKQotICAgIHNlbGRsZy5jb250cm9sKCJQYXRoRWRpdCIsICJQYXRoRWRpdCIsIDEzNSwgMjMwLCAyMDYsIDE2LCAzLCAiVEFSR0VURElSIiwgTm9uZSwgIk5leHQiLCBOb25lKQotICAgIGMgPSBzZWxkbGcucHVzaGJ1dHRvbigiVXAiLCAzMDYsIDcwLCAxOCwgMTgsIDMsICJVcCIsIE5vbmUpCi0gICAgYy5ldmVudCgiRGlyZWN0b3J5TGlzdFVwIiwgIjAiKQotICAgIGMgPSBzZWxkbGcucHVzaGJ1dHRvbigiTmV3RGlyIiwgMzI0LCA3MCwgMzAsIDE4LCAzLCAiTmV3IiwgTm9uZSkKLSAgICBjLmV2ZW50KCJEaXJlY3RvcnlMaXN0TmV3IiwgIjAiKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyBTZWxlY3RGZWF0dXJlc0RsZwotICAgIGZlYXR1cmVzID0gUHlEaWFsb2coZGIsICJTZWxlY3RGZWF0dXJlc0RsZyIsIHgsIHksIHcsIGgsIG1vZGFsfHRyYWNrX2Rpc2tfc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSwgIlRyZWUiLCAiTmV4dCIsICJDYW5jZWwiKQotICAgIGZlYXR1cmVzLnRpdGxlKCJDdXN0b21pemUgW1Byb2R1Y3ROYW1lXSIpCi0gICAgZmVhdHVyZXMudGV4dCgiRGVzY3JpcHRpb24iLCAxMzUsIDM1LCAyMjAsIDE1LCAweDMwMDAzLAotICAgICAgICAgICAgICAgICAgIlNlbGVjdCB0aGUgd2F5IHlvdSB3YW50IGZlYXR1cmVzIHRvIGJlIGluc3RhbGxlZC4iKQotICAgIGZlYXR1cmVzLnRleHQoIlRleHQiLCAxMzUsNDUsMjIwLDMwLCAzLAotICAgICAgICAgICAgICAgICAgIkNsaWNrIG9uIHRoZSBpY29ucyBpbiB0aGUgdHJlZSBiZWxvdyB0byBjaGFuZ2UgdGhlIHdheSBmZWF0dXJlcyB3aWxsIGJlIGluc3RhbGxlZC4iKQotCi0gICAgYz1mZWF0dXJlcy5iYWNrKCI8IEJhY2siLCAiTmV4dCIpCi0gICAgYy5ldmVudCgiTmV3RGlhbG9nIiwgIlNlbGVjdERpcmVjdG9yeURsZyIpCi0KLSAgICBjPWZlYXR1cmVzLm5leHQoIk5leHQgPiIsICJDYW5jZWwiKQotICAgIGMubWFwcGluZygiU2VsZWN0aW9uTm9JdGVtcyIsICJFbmFibGVkIikKLSAgICBjLmV2ZW50KCJTcGF3bkRpYWxvZyIsICJEaXNrQ29zdERsZyIsICJPdXRPZkRpc2tTcGFjZT0xIiwgb3JkZXI9MSkKLSAgICBjLmV2ZW50KCJFbmREaWFsb2ciLCAiUmV0dXJuIiwgIk91dE9mRGlza1NwYWNlPD4xIiwgb3JkZXI9MikKLQotICAgIGM9ZmVhdHVyZXMuY2FuY2VsKCJDYW5jZWwiLCAiVHJlZSIpCi0gICAgYy5ldmVudCgiU3Bhd25EaWFsb2ciLCAiQ2FuY2VsRGxnIikKLQotICAgICMgVGhlIGJyb3dzZSBwcm9wZXJ0eSBpcyBub3QgdXNlZCwgc2luY2Ugd2UgaGF2ZSBvbmx5IGEgc2luZ2xlIHRhcmdldCBwYXRoIChzZWxlY3RlZCBhbHJlYWR5KQotICAgIGZlYXR1cmVzLmNvbnRyb2woIlRyZWUiLCAiU2VsZWN0aW9uVHJlZSIsIDEzNSwgNzUsIDIyMCwgOTUsIDcsICJfQnJvd3NlUHJvcGVydHkiLAotICAgICAgICAgICAgICAgICAgICAgIlRyZWUgb2Ygc2VsZWN0aW9ucyIsICJCYWNrIiwgTm9uZSkKLQotICAgICNjPWZlYXR1cmVzLnB1c2hidXR0b24oIlJlc2V0IiwgNDIsIDI0MywgNTYsIDE3LCAzLCAiUmVzZXQiLCAiRGlza0Nvc3QiKQotICAgICNjLm1hcHBpbmcoIlNlbGVjdGlvbk5vSXRlbXMiLCAiRW5hYmxlZCIpCi0gICAgI2MuZXZlbnQoIlJlc2V0IiwgIjAiKQotCi0gICAgZmVhdHVyZXMuY29udHJvbCgiQm94IiwgIkdyb3VwQm94IiwgMTM1LCAxNzAsIDIyNSwgOTAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpCi0KLSAgICBjPWZlYXR1cmVzLnhidXR0b24oIkRpc2tDb3N0IiwgIkRpc2sgJlVzYWdlIiwgTm9uZSwgMC4xMCkKLSAgICBjLm1hcHBpbmcoIlNlbGVjdGlvbk5vSXRlbXMiLCJFbmFibGVkIikKLSAgICBjLmV2ZW50KCJTcGF3bkRpYWxvZyIsICJEaXNrQ29zdERsZyIpCi0KLSAgICBjPWZlYXR1cmVzLnhidXR0b24oIkFkdmFuY2VkIiwgIkFkdmFuY2VkIiwgTm9uZSwgMC4zMCkKLSAgICBjLmV2ZW50KCJTcGF3bkRpYWxvZyIsICJBZHZhbmNlZERsZyIpCi0KLSAgICBjPWZlYXR1cmVzLnRleHQoIkl0ZW1EZXNjcmlwdGlvbiIsIDE0MCwgMTgwLCAyMTAsIDQwLCAzLAotICAgICAgICAgICAgICAgICAgIk11bHRpbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uIikKLSAgICBjLm1hcHBpbmcoIlNlbGVjdGlvbkRlc2NyaXB0aW9uIiwiVGV4dCIpCi0KLSAgICBjPWZlYXR1cmVzLnRleHQoIkl0ZW1TaXplIiwgMTQwLCAyMjUsIDIxMCwgMzMsIDMsCi0gICAgICAgICAgICAgICAgICAgICJUaGUgc2l6ZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uIikKLSAgICBjLm1hcHBpbmcoIlNlbGVjdGlvblNpemUiLCAiVGV4dCIpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIERpc2sgY29zdAotICAgIGNvc3QgPSBQeURpYWxvZyhkYiwgIkRpc2tDb3N0RGxnIiwgeCwgeSwgdywgaCwgbW9kYWwsIHRpdGxlLAotICAgICAgICAgICAgICAgICAgICAiT0siLCAiT0siLCAiT0siLCBiaXRtYXA9RmFsc2UpCi0gICAgY29zdC50ZXh0KCJUaXRsZSIsIDE1LCA2LCAyMDAsIDE1LCAweDMwMDAzLAotICAgICAgICAgICAgICAie1xEbGdGb250Qm9sZDh9RGlzayBTcGFjZSBSZXF1aXJlbWVudHMiKQotICAgIGNvc3QudGV4dCgiRGVzY3JpcHRpb24iLCAyMCwgMjAsIDI4MCwgMjAsIDB4MzAwMDMsCi0gICAgICAgICAgICAgICJUaGUgZGlzayBzcGFjZSByZXF1aXJlZCBmb3IgdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgc2VsZWN0ZWQgZmVhdHVyZXMuIikKLSAgICBjb3N0LnRleHQoIlRleHQiLCAyMCwgNTMsIDMzMCwgNjAsIDMsCi0gICAgICAgICAgICAgICJUaGUgaGlnaGxpZ2h0ZWQgdm9sdW1lcyAoaWYgYW55KSBkbyBub3QgaGF2ZSBlbm91Z2ggZGlzayBzcGFjZSAiCi0gICAgICAgICAgICAgICJhdmFpbGFibGUgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZmVhdHVyZXMuICBZb3UgY2FuIGVpdGhlciAiCi0gICAgICAgICAgICAgICJyZW1vdmUgc29tZSBmaWxlcyBmcm9tIHRoZSBoaWdobGlnaHRlZCB2b2x1bWVzLCBvciBjaG9vc2UgdG8gIgotICAgICAgICAgICAgICAiaW5zdGFsbCBsZXNzIGZlYXR1cmVzIG9udG8gbG9jYWwgZHJpdmUocyksIG9yIHNlbGVjdCBkaWZmZXJlbnQgIgotICAgICAgICAgICAgICAiZGVzdGluYXRpb24gZHJpdmUocykuIikKLSAgICBjb3N0LmNvbnRyb2woIlZvbHVtZUxpc3QiLCAiVm9sdW1lQ29zdExpc3QiLCAyMCwgMTAwLCAzMzAsIDE1MCwgMzkzMjIzLAotICAgICAgICAgICAgICAgICBOb25lLCAiezEyMH17NzB9ezcwfXs3MH17NzB9IiwgTm9uZSwgTm9uZSkKLSAgICBjb3N0LnhidXR0b24oIk9LIiwgIk9rIiwgTm9uZSwgMC41KS5ldmVudCgiRW5kRGlhbG9nIiwgIlJldHVybiIpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIFdoaWNoVXNlcnMgRGlhbG9nLiBPbmx5IGF2YWlsYWJsZSBvbiBOVCwgYW5kIGZvciBwcml2aWxlZ2VkIHVzZXJzLgotICAgICMgVGhpcyBtdXN0IGJlIHJ1biBiZWZvcmUgRmluZFJlbGF0ZWRQcm9kdWN0cywgYmVjYXVzZSB0aGF0IHdpbGwKLSAgICAjIHRha2UgaW50byBhY2NvdW50IHdoZXRoZXIgdGhlIHByZXZpb3VzIGluc3RhbGxhdGlvbiB3YXMgcGVyLXVzZXIKLSAgICAjIG9yIHBlci1tYWNoaW5lLiBXZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBnb2luZyBiYWNrIHRvIHRoaXMKLSAgICAjIGRpYWxvZyBhZnRlciAiTmV4dCIgd2FzIHNlbGVjdGVkOyB0byBzdXBwb3J0IHRoaXMsIHdlIHdvdWxkIG5lZWQgdG8KLSAgICAjIGZpbmQgaG93IHRvIHJlc2V0IHRoZSBBTExVU0VSUyBwcm9wZXJ0eSwgYW5kIGhvdyB0byByZS1ydW4KLSAgICAjIEZpbmRSZWxhdGVkUHJvZHVjdHMuCi0gICAgIyBPbiBXaW5kb3dzOXgsIHRoZSBBTExVU0VSUyBwcm9wZXJ0eSBpcyBpZ25vcmVkIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAgICAjIGFuZCBpbiB0aGUgUHJvcGVydHkgdGFibGUsIGJ1dCBpbnN0YWxsZXIgZmFpbHMgYWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uCi0gICAgIyBpZiBhIGRpYWxvZyBhdHRlbXB0cyB0byBzZXQgQUxMVVNFUlMuCi0gICAgd2hpY2h1c2VycyA9IFB5RGlhbG9nKGRiLCAiV2hpY2hVc2Vyc0RsZyIsIHgsIHksIHcsIGgsIG1vZGFsLCB0aXRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJBZG1pbkluc3RhbGwiLCAiTmV4dCIsICJDYW5jZWwiKQotICAgIHdoaWNodXNlcnMudGl0bGUoIlNlbGVjdCB3aGV0aGVyIHRvIGluc3RhbGwgW1Byb2R1Y3ROYW1lXSBmb3IgYWxsIHVzZXJzIG9mIHRoaXMgY29tcHV0ZXIuIikKLSAgICAjIEEgcmFkaW8gZ3JvdXAgd2l0aCB0d28gb3B0aW9uczogYWxsdXNlcnMsIGp1c3RtZQotICAgIGcgPSB3aGljaHVzZXJzLnJhZGlvZ3JvdXAoIkFkbWluSW5zdGFsbCIsIDEzNSwgNjAsIDIzNSwgODAsIDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2hpY2hVc2VycyIsICIiLCAiTmV4dCIpCi0gICAgZy5jb25kaXRpb24oIkRpc2FibGUiLCAiVmVyc2lvbk5UPTYwMCIpICMgTm90IGF2YWlsYWJsZSBvbiBWaXN0YSBhbmQgV2luZG93cyAyMDA4Ci0gICAgZy5hZGQoIkFMTCIsIDAsIDUsIDE1MCwgMjAsICJJbnN0YWxsIGZvciBhbGwgdXNlcnMiKQotICAgIGcuYWRkKCJKVVNUTUUiLCAwLCAyNSwgMjM1LCAyMCwgIkluc3RhbGwganVzdCBmb3IgbWUgKG5vdCBhdmFpbGFibGUgb24gV2luZG93cyBWaXN0YSkiKQotCi0gICAgd2hpY2h1c2Vycy5iYWNrKCJCYWNrIiwgTm9uZSwgYWN0aXZlPTApCi0KLSAgICBjID0gd2hpY2h1c2Vycy5uZXh0KCJOZXh0ID4iLCAiQ2FuY2VsIikKLSAgICBjLmV2ZW50KCJbQUxMVVNFUlNdIiwgIjEiLCAnV2hpY2hVc2Vycz0iQUxMIicsIDEpCi0gICAgYy5ldmVudCgiRW5kRGlhbG9nIiwgIlJldHVybiIsIG9yZGVyID0gMikKLQotICAgIGMgPSB3aGljaHVzZXJzLmNhbmNlbCgiQ2FuY2VsIiwgIkFkbWluSW5zdGFsbCIpCi0gICAgYy5ldmVudCgiU3Bhd25EaWFsb2ciLCAiQ2FuY2VsRGxnIikKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMgQWR2YW5jZWQgRGlhbG9nLgotICAgIGFkdmFuY2VkID0gUHlEaWFsb2coZGIsICJBZHZhbmNlZERsZyIsIHgsIHksIHcsIGgsIG1vZGFsLCB0aXRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb21waWxlUHljIiwgIk9rIiwgIk9rIikKLSAgICBhZHZhbmNlZC50aXRsZSgiQWR2YW5jZWQgT3B0aW9ucyBmb3IgW1Byb2R1Y3ROYW1lXSIpCi0KLSAgICAjIEEgY2hlY2tib3ggd2hldGhlciB0byBidWlsZCBweWMgZmlsZXMKLSAgICBhZHZhbmNlZC5jaGVja2JveCgiQ29tcGlsZVB5YyIsIDEzNSwgNjAsIDIzMCwgNTAsIDMsCi0gICAgICAgICAgICAgICAgICAgICAgIkNPTVBJTEVBTEwiLCAiQ29tcGlsZSAucHkgZmlsZXMgdG8gYnl0ZSBjb2RlIGFmdGVyIGluc3RhbGxhdGlvbiIsICJPayIpCi0KLSAgICBjID0gYWR2YW5jZWQuY2FuY2VsKCJPayIsICJDb21waWxlUHljIiwgbmFtZT0iT2siKSAjIEJ1dHRvbiBqdXN0IGhhcyBsb2NhdGlvbiBvZiBjYW5jZWwgYnV0dG9uLgotICAgIGMuZXZlbnQoIkVuZERpYWxvZyIsICJSZXR1cm4iKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyBFeGlzdGluZyBEaXJlY3RvcnkgZGlhbG9nCi0gICAgZGxnID0gRGlhbG9nKGRiLCAiRXhpc3RpbmdEaXJlY3RvcnlEbGciLCA1MCwgMzAsIDIwMCwgODAsIG1vZGFsLCB0aXRsZSwKLSAgICAgICAgICAgICAgICAgICAiTm8iLCAiTm8iLCAiTm8iKQotICAgIGRsZy50ZXh0KCJUaXRsZSIsIDEwLCAyMCwgMTgwLCA0MCwgMywKLSAgICAgICAgICAgICAiW1RBUkdFVERJUl0gZXhpc3RzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzPyIpCi0gICAgYz1kbGcucHVzaGJ1dHRvbigiWWVzIiwgMzAsIDYwLCA1NSwgMTcsIDMsICJZZXMiLCAiTm8iKQotICAgIGMuZXZlbnQoIltUYXJnZXRFeGlzdHNdIiwgIjAiLCBvcmRlcj0xKQotICAgIGMuZXZlbnQoIltUYXJnZXRFeGlzdHNPa10iLCAiMSIsIG9yZGVyPTIpCi0gICAgYy5ldmVudCgiRW5kRGlhbG9nIiwgIlJldHVybiIsIG9yZGVyPTMpCi0gICAgYz1kbGcucHVzaGJ1dHRvbigiTm8iLCAxMTUsIDYwLCA1NSwgMTcsIDMsICJObyIsICJZZXMiKQotICAgIGMuZXZlbnQoIkVuZERpYWxvZyIsICJSZXR1cm4iKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyBJbnN0YWxsYXRpb24gUHJvZ3Jlc3MgZGlhbG9nIChtb2RlbGVzcykKLSAgICBwcm9ncmVzcyA9IFB5RGlhbG9nKGRiLCAiUHJvZ3Jlc3NEbGciLCB4LCB5LCB3LCBoLCBtb2RlbGVzcywgdGl0bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ2FuY2VsIiwgIkNhbmNlbCIsICJDYW5jZWwiLCBiaXRtYXA9RmFsc2UpCi0gICAgcHJvZ3Jlc3MudGV4dCgiVGl0bGUiLCAyMCwgMTUsIDIwMCwgMTUsIDB4MzAwMDMsCi0gICAgICAgICAgICAgICAgICAie1xEbGdGb250Qm9sZDh9W1Byb2dyZXNzMV0gW1Byb2R1Y3ROYW1lXSIpCi0gICAgcHJvZ3Jlc3MudGV4dCgiVGV4dCIsIDM1LCA2NSwgMzAwLCAzMCwgMywKLSAgICAgICAgICAgICAgICAgICJQbGVhc2Ugd2FpdCB3aGlsZSB0aGUgSW5zdGFsbGVyIFtQcm9ncmVzczJdIFtQcm9kdWN0TmFtZV0uICIKLSAgICAgICAgICAgICAgICAgICJUaGlzIG1heSB0YWtlIHNldmVyYWwgbWludXRlcy4iKQotICAgIHByb2dyZXNzLnRleHQoIlN0YXR1c0xhYmVsIiwgMzUsIDEwMCwgMzUsIDIwLCAzLCAiU3RhdHVzOiIpCi0KLSAgICBjPXByb2dyZXNzLnRleHQoIkFjdGlvblRleHQiLCA3MCwgMTAwLCB3LTcwLCAyMCwgMywgIlBvbmRlcmluZy4uLiIpCi0gICAgYy5tYXBwaW5nKCJBY3Rpb25UZXh0IiwgIlRleHQiKQotCi0gICAgI2M9cHJvZ3Jlc3MudGV4dCgiQWN0aW9uRGF0YSIsIDM1LCAxNDAsIDMwMCwgMjAsIDMsIE5vbmUpCi0gICAgI2MubWFwcGluZygiQWN0aW9uRGF0YSIsICJUZXh0IikKLQotICAgIGM9cHJvZ3Jlc3MuY29udHJvbCgiUHJvZ3Jlc3NCYXIiLCAiUHJvZ3Jlc3NCYXIiLCAzNSwgMTIwLCAzMDAsIDEwLCA2NTUzNywKLSAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgIlByb2dyZXNzIGRvbmUiLCBOb25lLCBOb25lKQotICAgIGMubWFwcGluZygiU2V0UHJvZ3Jlc3MiLCAiUHJvZ3Jlc3MiKQotCi0gICAgcHJvZ3Jlc3MuYmFjaygiPCBCYWNrIiwgIk5leHQiLCBhY3RpdmU9RmFsc2UpCi0gICAgcHJvZ3Jlc3MubmV4dCgiTmV4dCA+IiwgIkNhbmNlbCIsIGFjdGl2ZT1GYWxzZSkKLSAgICBwcm9ncmVzcy5jYW5jZWwoIkNhbmNlbCIsICJCYWNrIikuZXZlbnQoIlNwYXduRGlhbG9nIiwgIkNhbmNlbERsZyIpCi0KLSAgICAjIE1haW50ZW5hbmNlIHR5cGU6IHJlcGFpci91bmluc3RhbGwKLSAgICBtYWludCA9IFB5RGlhbG9nKGRiLCAiTWFpbnRlbmFuY2VUeXBlRGxnIiwgeCwgeSwgdywgaCwgbW9kYWwsIHRpdGxlLAotICAgICAgICAgICAgICAgICAgICAgIk5leHQiLCAiTmV4dCIsICJDYW5jZWwiKQotICAgIG1haW50LnRpdGxlKCJXZWxjb21lIHRvIHRoZSBbUHJvZHVjdE5hbWVdIFNldHVwIFdpemFyZCIpCi0gICAgbWFpbnQudGV4dCgiQm9keVRleHQiLCAxMzUsIDYzLCAyMzAsIDQyLCAzLAotICAgICAgICAgICAgICAgIlNlbGVjdCB3aGV0aGVyIHlvdSB3YW50IHRvIHJlcGFpciBvciByZW1vdmUgW1Byb2R1Y3ROYW1lXS4iKQotICAgIGc9bWFpbnQucmFkaW9ncm91cCgiUmVwYWlyUmFkaW9Hcm91cCIsIDEzNSwgMTA4LCAyMzAsIDYwLCAzLAotICAgICAgICAgICAgICAgICAgICAgICAgIk1haW50ZW5hbmNlRm9ybV9BY3Rpb24iLCAiIiwgIk5leHQiKQotICAgIGcuYWRkKCJDaGFuZ2UiLCAwLCAwLCAyMDAsIDE3LCAiJkNoYW5nZSBbUHJvZHVjdE5hbWVdIikKLSAgICBnLmFkZCgiUmVwYWlyIiwgMCwgMTgsIDIwMCwgMTcsICImUmVwYWlyIFtQcm9kdWN0TmFtZV0iKQotICAgIGcuYWRkKCJSZW1vdmUiLCAwLCAzNiwgMjAwLCAxNywgIlJlJm1vdmUgW1Byb2R1Y3ROYW1lXSIpCi0KLSAgICBtYWludC5iYWNrKCI8IEJhY2siLCBOb25lLCBhY3RpdmU9RmFsc2UpCi0gICAgYz1tYWludC5uZXh0KCJGaW5pc2giLCAiQ2FuY2VsIikKLSAgICAjIENoYW5nZSBpbnN0YWxsYXRpb246IENoYW5nZSBwcm9ncmVzcyBkaWFsb2cgdG8gIkNoYW5nZSIsIHRoZW4gYXNrCi0gICAgIyBmb3IgZmVhdHVyZSBzZWxlY3Rpb24KLSAgICBjLmV2ZW50KCJbUHJvZ3Jlc3MxXSIsICJDaGFuZ2UiLCAnTWFpbnRlbmFuY2VGb3JtX0FjdGlvbj0iQ2hhbmdlIicsIDEpCi0gICAgYy5ldmVudCgiW1Byb2dyZXNzMl0iLCAiY2hhbmdlcyIsICdNYWludGVuYW5jZUZvcm1fQWN0aW9uPSJDaGFuZ2UiJywgMikKLQotICAgICMgUmVpbnN0YWxsOiBDaGFuZ2UgcHJvZ3Jlc3MgZGlhbG9nIHRvICJSZXBhaXIiLCB0aGVuIGludm9rZSByZWluc3RhbGwKLSAgICAjIEFsc28gc2V0IGxpc3Qgb2YgcmVpbnN0YWxsZWQgZmVhdHVyZXMgdG8gIkFMTCIKLSAgICBjLmV2ZW50KCJbUkVJTlNUQUxMXSIsICJBTEwiLCAnTWFpbnRlbmFuY2VGb3JtX0FjdGlvbj0iUmVwYWlyIicsIDUpCi0gICAgYy5ldmVudCgiW1Byb2dyZXNzMV0iLCAiUmVwYWlyaW5nIiwgJ01haW50ZW5hbmNlRm9ybV9BY3Rpb249IlJlcGFpciInLCA2KQotICAgIGMuZXZlbnQoIltQcm9ncmVzczJdIiwgInJlcGFpcnMiLCAnTWFpbnRlbmFuY2VGb3JtX0FjdGlvbj0iUmVwYWlyIicsIDcpCi0gICAgYy5ldmVudCgiUmVpbnN0YWxsIiwgIkFMTCIsICdNYWludGVuYW5jZUZvcm1fQWN0aW9uPSJSZXBhaXIiJywgOCkKLQotICAgICMgVW5pbnN0YWxsOiBDaGFuZ2UgcHJvZ3Jlc3MgdG8gIlJlbW92ZSIsIHRoZW4gaW52b2tlIHVuaW5zdGFsbAotICAgICMgQWxzbyBzZXQgbGlzdCBvZiByZW1vdmVkIGZlYXR1cmVzIHRvICJBTEwiCi0gICAgYy5ldmVudCgiW1JFTU9WRV0iLCAiQUxMIiwgJ01haW50ZW5hbmNlRm9ybV9BY3Rpb249IlJlbW92ZSInLCAxMSkKLSAgICBjLmV2ZW50KCJbUHJvZ3Jlc3MxXSIsICJSZW1vdmluZyIsICdNYWludGVuYW5jZUZvcm1fQWN0aW9uPSJSZW1vdmUiJywgMTIpCi0gICAgYy5ldmVudCgiW1Byb2dyZXNzMl0iLCAicmVtb3ZlcyIsICdNYWludGVuYW5jZUZvcm1fQWN0aW9uPSJSZW1vdmUiJywgMTMpCi0gICAgYy5ldmVudCgiUmVtb3ZlIiwgIkFMTCIsICdNYWludGVuYW5jZUZvcm1fQWN0aW9uPSJSZW1vdmUiJywgMTQpCi0KLSAgICAjIENsb3NlIGRpYWxvZyB3aGVuIG1haW50ZW5hbmNlIGFjdGlvbiBzY2hlZHVsZWQKLSAgICBjLmV2ZW50KCJFbmREaWFsb2ciLCAiUmV0dXJuIiwgJ01haW50ZW5hbmNlRm9ybV9BY3Rpb248PiJDaGFuZ2UiJywgMjApCi0gICAgYy5ldmVudCgiTmV3RGlhbG9nIiwgIlNlbGVjdEZlYXR1cmVzRGxnIiwgJ01haW50ZW5hbmNlRm9ybV9BY3Rpb249IkNoYW5nZSInLCAyMSkKLQotICAgIG1haW50LmNhbmNlbCgiQ2FuY2VsIiwgIlJlcGFpclJhZGlvR3JvdXAiKS5ldmVudCgiU3Bhd25EaWFsb2ciLCAiQ2FuY2VsRGxnIikKLQotCi0jIFNlZSAiRmVhdHVyZSBUYWJsZSIuIFRoZSBmZWF0dXJlIGxldmVsIGlzIDEgZm9yIGFsbCBmZWF0dXJlcywKLSMgYW5kIHRoZSBmZWF0dXJlIGF0dHJpYnV0ZXMgYXJlIDAgZm9yIHRoZSBEZWZhdWx0RmVhdHVyZSwgYW5kCi0jIEZvbGxvd1BhcmVudCBmb3IgYWxsIG90aGVyIGZlYXR1cmVzLiBUaGUgbnVtYmVycyBhcmUgdGhlIERpc3BsYXkKLSMgY29sdW1uLgotZGVmIGFkZF9mZWF0dXJlcyhkYik6Ci0gICAgIyBmZWF0dXJlIGF0dHJpYnV0ZXM6Ci0gICAgIyBtc2lkYkZlYXR1cmVBdHRyaWJ1dGVzRm9sbG93UGFyZW50ID09IDIKLSAgICAjIG1zaWRiRmVhdHVyZUF0dHJpYnV0ZXNEaXNhbGxvd0FkdmVydGlzZSA9PSA4Ci0gICAgIyBGZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgaW5zdGFsbGVkIHdpdGggdG9nZXRoZXIgd2l0aCB0aGUgbWFpbiBmZWF0dXJlCi0gICAgIyAoaS5lLiBhZGRpdGlvbmFsIFB5dGhvbiBsaWJyYXJpZXMpIG5lZWQgdG8gZm9sbG93IHRoZSBwYXJlbnQgZmVhdHVyZS4KLSAgICAjIEZlYXR1cmVzIHRoYXQgaGF2ZSBubyBhZHZlcnRpc2VtZW50IHRyaWdnZXIgKGUuZy4gdGhlIHRlc3Qgc3VpdGUpCi0gICAgIyBtdXN0IG5vdCBzdXBwb3J0IGFkdmVydGlzZW1lbnQKLSAgICBnbG9iYWwgZGVmYXVsdF9mZWF0dXJlLCB0Y2x0aywgaHRtbGZpbGVzLCB0b29scywgdGVzdHN1aXRlCi0gICAgZ2xvYmFsIGV4dF9mZWF0dXJlLCBwcml2YXRlX2NydCwgcHJlcGVuZF9wYXRoLCBwaXBfZmVhdHVyZQotICAgIGRlZmF1bHRfZmVhdHVyZSA9IEZlYXR1cmUoZGIsICJEZWZhdWx0RmVhdHVyZSIsICJQeXRob24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBJbnRlcnByZXRlciBhbmQgTGlicmFyaWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGRpcmVjdG9yeSA9ICJUQVJHRVRESVIiKQotICAgIHNoYXJlZF9jcnQgPSBGZWF0dXJlKGRiLCAiU2hhcmVkQ1JUIiwgIk1TVkNSVCIsICJDIFJ1bi1UaW1lIChzeXN0ZW0td2lkZSkiLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTApCi0gICAgcHJpdmF0ZV9jcnQgPSBGZWF0dXJlKGRiLCAiUHJpdmF0ZUNSVCIsICJNU1ZDUlQiLCAiQyBSdW4tVGltZSAocHJpdmF0ZSkiLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0wKQotICAgIGFkZF9kYXRhKGRiLCAiQ29uZGl0aW9uIiwgWygiU2hhcmVkQ1JUIiwgMSwgc3lzMzJjb25kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIlByaXZhdGVDUlQiLCAxLCAibm90ICIrc3lzMzJjb25kKV0pCi0gICAgIyBXZSBkb24ndCBzdXBwb3J0IGFkdmVydGlzZW1lbnQgb2YgZXh0ZW5zaW9ucwotICAgIGV4dF9mZWF0dXJlID0gRmVhdHVyZShkYiwgIkV4dGVuc2lvbnMiLCAiUmVnaXN0ZXIgRXh0ZW5zaW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJNYWtlIHRoaXMgUHl0aG9uIGluc3RhbGxhdGlvbiB0aGUgZGVmYXVsdCBQeXRob24gaW5zdGFsbGF0aW9uIiwgMywKLSAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9Mnw4KQotICAgIGlmIGhhdmVfdGNsOgotICAgICAgICB0Y2x0ayA9IEZlYXR1cmUoZGIsICJUY2xUayIsICJUY2wvVGsiLCAiVGtpbnRlciwgSURMRSwgcHlkb2MiLCA1LAotICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9MikKLSAgICBodG1sZmlsZXMgPSBGZWF0dXJlKGRiLCAiRG9jdW1lbnRhdGlvbiIsICJEb2N1bWVudGF0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gSFRNTEhlbHAgRmlsZSIsIDcsIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSkKLSAgICB0b29scyA9IEZlYXR1cmUoZGIsICJUb29scyIsICJVdGlsaXR5IFNjcmlwdHMiLAotICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKSIsIDksCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yKQotICAgICMgcGlwIGluc3RhbGxhdGlvbiBpc24ndCBlbmFibGVkIGJ5IGRlZmF1bHQgdW50aWwgYSBjbGVhbiB1bmluc3RhbGwgcHJvY2VkdXJlCi0gICAgIyBiZWNvbWVzIHBvc3NpYmxlCi0gICAgcGlwX2ZlYXR1cmUgPSBGZWF0dXJlKGRiLCAicGlwX2ZlYXR1cmUiLCAicGlwIiwKLSAgICAgICAgICAgICAgICAgICAgIkluc3RhbGwgKG9yIHVwZ3JhZGUgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24pIHBpcCwgIgotICAgICAgICAgICAgICAgICAgICAiYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuIiwgMTEsCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgpCi0gICAgdGVzdHN1aXRlID0gRmVhdHVyZShkYiwgIlRlc3RzdWl0ZSIsICJUZXN0IHN1aXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKSIsIDEzLAotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTJ8OCkKLSAgICAjIHByZXBlbmRfcGF0aCBpcyBhbiBhZGRpdGlvbmFsIGZlYXR1cmUgd2hpY2ggaXMgdG8gYmUgb2ZmIGJ5IGRlZmF1bHQuCi0gICAgIyBTaW5jZSB0aGUgZGVmYXVsdCBsZXZlbCBmb3IgdGhlIGFib3ZlIGZlYXR1cmVzIGlzIDEsIHRoaXMgbmVlZHMgdG8gYmUKLSAgICAjIGF0IGxlYXN0IGxldmVsIGhpZ2hlci4KLSAgICBwcmVwZW5kX3BhdGggPSBGZWF0dXJlKGRiLCAiUHJlcGVuZFBhdGgiLCAiQWRkIHB5dGhvbi5leGUgdG8gUGF0aCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHJlcGVuZCBbVEFSR0VURElSXSB0byB0aGUgc3lzdGVtIFBhdGggdmFyaWFibGUuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGFsbG93cyB5b3UgdG8gdHlwZSAncHl0aG9uJyBpbnRvIGEgY29tbWFuZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicHJvbXB0IHdpdGhvdXQgbmVlZGluZyB0aGUgZnVsbCBwYXRoLiIsIDE1LAotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTJ8OCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCi0KLWRlZiBleHRyYWN0X21zdmNyMTAwKCk6Ci0gICAgIyBGaW5kIHRoZSByZWRpc3RyaWJ1dGFibGUgZmlsZXMKLSAgICBpZiBtc2lsaWIuV2luNjQ6Ci0gICAgICAgIGFyY2ggPSAieDY0IgotICAgIGVsc2U6Ci0gICAgICAgIGFyY2ggPSAieDg2IgotICAgIGRpciA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydWUzEwMENPTU5UT09MUyddLCByIi4uXC4uXFZDXHJlZGlzdFwlc1xNaWNyb3NvZnQuVkMxMDAuQ1JUIiAlIGFyY2gpCi0KLSAgICByZXN1bHQgPSBbXQotICAgIGluc3RhbGxlciA9IG1zaWxpYi5NYWtlSW5zdGFsbGVyKCkKLSAgICAjIEF0IGxlYXN0IGZvciBWUzIwMTAsIG1hbmlmZXN0cyBhcmUgbm8gbG9uZ2VyIHByb3ZpZGVkCi0gICAgbmFtZSA9ICJtc3ZjcjEwMC5kbGwiCi0gICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXIsIG5hbWUpCi0gICAga3cgPSB7J3NyYyc6cGF0aH0KLSAgICBrd1sndmVyc2lvbiddID0gaW5zdGFsbGVyLkZpbGVWZXJzaW9uKHBhdGgsIDApCi0gICAga3dbJ2xhbmd1YWdlJ10gPSBpbnN0YWxsZXIuRmlsZVZlcnNpb24ocGF0aCwgMSkKLSAgICByZXR1cm4gbmFtZSwga3cKLQotZGVmIGdlbmVyYXRlX2xpY2Vuc2UoKToKLSAgICBpbXBvcnQgc2h1dGlsLCBnbG9iCi0gICAgb3V0ID0gb3BlbigiTElDRU5TRS50eHQiLCAidyIpCi0gICAgc2h1dGlsLmNvcHlmaWxlb2JqKG9wZW4ob3MucGF0aC5qb2luKHNyY2RpciwgIkxJQ0VOU0UiKSksIG91dCkKLSAgICBzaHV0aWwuY29weWZpbGVvYmoob3BlbigiY3J0bGljZW5zZS50eHQiKSwgb3V0KQotICAgIGZvciBuYW1lLCBwYXQsIGZpbGUgaW4gKCgiYnppcDIiLCJiemlwMi0qIiwgIkxJQ0VOU0UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAoIm9wZW5zc2wiLCAib3BlbnNzbC0qIiwgIkxJQ0VOU0UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAoIlRjbCIsICJ0Y2w4KiIsICJsaWNlbnNlLnRlcm1zIiksCi0gICAgICAgICAgICAgICAgICAgICAgKCJUayIsICJ0azgqIiwgImxpY2Vuc2UudGVybXMiKSwKLSAgICAgICAgICAgICAgICAgICAgICAoIlRpeCIsICJ0aXgtKiIsICJsaWNlbnNlLnRlcm1zIikpOgotICAgICAgICBvdXQud3JpdGUoIlxuVGhpcyBjb3B5IG9mIFB5dGhvbiBpbmNsdWRlcyBhIGNvcHkgb2YgJXMsIHdoaWNoIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXM6XG5cbiIgJSBuYW1lKQotICAgICAgICBkaXJzID0gZ2xvYi5nbG9iKHNyY2RpcisiL2V4dGVybmFscy8iK3BhdCkKLSAgICAgICAgaWYgbm90IGRpcnM6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiQ291bGQgbm90IGZpbmQgIitzcmNkaXIrIi9leHRlcm5hbHMvIitwYXQKLSAgICAgICAgaWYgbGVuKGRpcnMpID4gMiBhbmQgbm90IHNuYXBzaG90OgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIk11bHRpcGxlIGNvcGllcyBvZiAiK3BhdAotICAgICAgICBkaXIgPSBkaXJzWzBdCi0gICAgICAgIHNodXRpbC5jb3B5ZmlsZW9iaihvcGVuKG9zLnBhdGguam9pbihkaXIsIGZpbGUpKSwgb3V0KQotICAgIG91dC5jbG9zZSgpCi0KLQotY2xhc3MgUHlEaXJlY3RvcnkoRGlyZWN0b3J5KToKLSAgICAiIiJCeSBkZWZhdWx0LCBhbGwgY29tcG9uZW50cyBpbiB0aGUgUHl0aG9uIGluc3RhbGxlcgotICAgIGNhbiBydW4gZnJvbSBzb3VyY2UuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKLSAgICAgICAgaWYgImNvbXBvbmVudGZsYWdzIiBub3QgaW4ga3c6Ci0gICAgICAgICAgICBrd1snY29tcG9uZW50ZmxhZ3MnXSA9IDIgI21zaWRiQ29tcG9uZW50QXR0cmlidXRlc09wdGlvbmFsCi0gICAgICAgIERpcmVjdG9yeS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKLQotZGVmIGhnbWFuaWZlc3QoKToKLSAgICAjIEZldGNoIGZpbGUgbGlzdCBmcm9tIE1lcmN1cmlhbAotICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFsnaGcnLCAnbWFuaWZlc3QnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQotICAgICMgQ3JlYXRlIG5lc3RlZCBkaXJlY3RvcmllcyBmb3IgZmlsZSB0cmVlCi0gICAgcmVzdWx0ID0ge30KLSAgICBmb3IgbGluZSBpbiBzdGRvdXQuc3BsaXRsaW5lcygpOgotICAgICAgICBjb21wb25lbnRzID0gbGluZS5zcGxpdCgnLycpCi0gICAgICAgIGQgPSByZXN1bHQKLSAgICAgICAgd2hpbGUgbGVuKGNvbXBvbmVudHMpID4gMToKLSAgICAgICAgICAgIGQxID0gZC5zZXRkZWZhdWx0KGNvbXBvbmVudHNbMF0sIHt9KQotICAgICAgICAgICAgZCA9IGQxCi0gICAgICAgICAgICBkZWwgY29tcG9uZW50c1swXQotICAgICAgICBkW2NvbXBvbmVudHNbMF1dID0gTm9uZQotICAgIHJldHVybiByZXN1bHQKLQotCi0jIFNlZSAiRmlsZSBUYWJsZSIsICJDb21wb25lbnQgVGFibGUiLCAiRGlyZWN0b3J5IFRhYmxlIiwKLSMgIkZlYXR1cmVDb21wb25lbnRzIFRhYmxlIgotZGVmIGFkZF9maWxlcyhkYik6Ci0gICAgaW5zdGFsbGVyID0gbXNpbGliLk1ha2VJbnN0YWxsZXIoKQotICAgIGhnZmlsZXMgPSBoZ21hbmlmZXN0KCkKLSAgICBjYWIgPSBDQUIoInB5dGhvbiIpCi0gICAgdG1wZmlsZXMgPSBbXQotICAgICMgQWRkIGFsbCBleGVjdXRhYmxlcywgaWNvbnMsIHRleHQgZmlsZXMgaW50byB0aGUgVEFSR0VURElSIGNvbXBvbmVudAotICAgIHJvb3QgPSBQeURpcmVjdG9yeShkYiwgY2FiLCBOb25lLCBzcmNkaXIsICJUQVJHRVRESVIiLCAiU291cmNlRGlyIikKLSAgICBkZWZhdWx0X2ZlYXR1cmUuc2V0X2N1cnJlbnQoKQotICAgIHJvb3QuYWRkX2ZpbGUoIlJFQURNRS50eHQiLCBzcmM9IlJFQURNRSIpCi0gICAgcm9vdC5hZGRfZmlsZSgiTkVXUy50eHQiLCBzcmM9Ik1pc2MvTkVXUyIpCi0gICAgZ2VuZXJhdGVfbGljZW5zZSgpCi0gICAgcm9vdC5hZGRfZmlsZSgiTElDRU5TRS50eHQiLCBzcmM9b3MucGF0aC5hYnNwYXRoKCJMSUNFTlNFLnR4dCIpKQotICAgIHJvb3Quc3RhcnRfY29tcG9uZW50KCJweXRob24uZXhlIiwga2V5ZmlsZT0icHl0aG9uLmV4ZSIpCi0gICAgcm9vdC5hZGRfZmlsZSgiJXMvcHl0aG9uLmV4ZSIgJSBQQ0JVSUxEKQotICAgIHJvb3Quc3RhcnRfY29tcG9uZW50KCJweXRob253LmV4ZSIsIGtleWZpbGU9InB5dGhvbncuZXhlIikKLSAgICByb290LmFkZF9maWxlKCIlcy9weXRob253LmV4ZSIgJSBQQ0JVSUxEKQotCi0gICAgIyBtc2lkYkNvbXBvbmVudEF0dHJpYnV0ZXNTaGFyZWREbGxSZWZDb3VudCA9IDgsIHNlZSAiQ29tcG9uZW50IFRhYmxlIgotICAgIGRsbGRpciA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHJvb3QsIHNyY2RpciwgIkRMTERJUiIsICIuIikKLSAgICBsYXVuY2hlcmRpciA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHJvb3QsIHNyY2RpciwgIkxBVU5DSEVSRElSIiwgIi4iKQotCi0gICAgIyBtc2lkYkNvbXBvbmVudEF0dHJpYnV0ZXM2NGJpdCA9IDI1NjsgdGhpcyBkaXNhYmxlcyByZWdpc3RyeSByZWRpcmVjdGlvbgotICAgICMgdG8gYWxsb3cgc2V0dGluZyB0aGUgU2hhcmVkRExMcyBrZXkgaW4gdGhlIDY0LWJpdCBwb3J0aW9uIGV2ZW4gZm9yIGEKLSAgICAjIDMyLWJpdCBpbnN0YWxsZXIuCi0gICAgIyBYWFggZG9lcyB0aGlzIHN0aWxsIGFsbG93IHRvIGluc3RhbGwgdGhlIGNvbXBvbmVudCBvbiBhIDMyLWJpdCBzeXN0ZW0/Ci0gICAgIyBQaWNrIHVwIDMyLWJpdCBiaW5hcnkgYWx3YXlzCi0gICAgbGF1bmNoZXJzcmMgPSBQQ0JVSUxECi0gICAgaWYgbGF1bmNoZXJzcmMubG93ZXIoKSA9PSAncGNidWlsZFxceDY0LXBnbyc6Ci0gICAgICAgIGxhdW5jaGVyc3JjID0gJ1BDQnVpbGRcXHdpbjMyLXBnbycKLSAgICBpZiBsYXVuY2hlcnNyYy5sb3dlcigpID09ICdwY2J1aWxkXFxhbWQ2NCc6Ci0gICAgICAgIGxhdW5jaGVyc3JjID0gJ1BDQnVpbGQnCi0gICAgbGF1bmNoZXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBsYXVuY2hlcnNyYywgInB5LmV4ZSIpCi0gICAgbGF1bmNoZXJkaXIuc3RhcnRfY29tcG9uZW50KCJsYXVuY2hlciIsIGZsYWdzID0gOCsyNTYsIGtleWZpbGU9InB5LmV4ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ9IntCNTEwNzQwMi02OTU4LTQ2MUItOEIwQS00MDM3RDMzMjcxNjB9IikKLSAgICBsYXVuY2hlcmRpci5hZGRfZmlsZShsYXVuY2hlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPWluc3RhbGxlci5GaWxlVmVyc2lvbihsYXVuY2hlciwgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9aW5zdGFsbGVyLkZpbGVWZXJzaW9uKGxhdW5jaGVyLCAxKSkKLSAgICBsYXVuY2hlcncgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBsYXVuY2hlcnNyYywgInB5dy5leGUiKQotICAgIGxhdW5jaGVyZGlyLnN0YXJ0X2NvbXBvbmVudCgibGF1bmNoZXJ3IiwgZmxhZ3MgPSA4KzI1Niwga2V5ZmlsZT0icHl3LmV4ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ9Ins4RTUyQjhDRC00OEJCLTRENzQtODRDRC02MjM4QkNEMTFGMjB9IikKLSAgICBsYXVuY2hlcmRpci5hZGRfZmlsZShsYXVuY2hlcncsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj1pbnN0YWxsZXIuRmlsZVZlcnNpb24obGF1bmNoZXJ3LCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZT1pbnN0YWxsZXIuRmlsZVZlcnNpb24obGF1bmNoZXJ3LCAxKSkKLQotICAgIHB5ZGxsID0gInB5dGhvbiVzJXMuZGxsIiAlIChtYWpvciwgbWlub3IpCi0gICAgcHlkbGxzcmMgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBQQ0JVSUxELCBweWRsbCkKLSAgICBkbGxkaXIuc3RhcnRfY29tcG9uZW50KCJETExESVIiLCBmbGFncyA9IDgsIGtleWZpbGUgPSBweWRsbCwgdXVpZCA9IHB5dGhvbmRsbF91dWlkKQotICAgIHB5dmVyc2lvbiA9IGluc3RhbGxlci5GaWxlVmVyc2lvbihweWRsbHNyYywgMCkKLSAgICBpZiBub3Qgc25hcHNob3Q6Ci0gICAgICAgICMgRm9yIHJlbGVhc2VzLCB0aGUgUHl0aG9uIERMTCBoYXMgdGhlIHNhbWUgdmVyc2lvbiBhcyB0aGUKLSAgICAgICAgIyBpbnN0YWxsZXIgcGFja2FnZS4KLSAgICAgICAgYXNzZXJ0IHB5dmVyc2lvbi5zcGxpdCgiLiIpWzozXSA9PSBjdXJyZW50X3ZlcnNpb24uc3BsaXQoIi4iKQotICAgIGRsbGRpci5hZGRfZmlsZSgiJXMvcHl0aG9uJXMlcy5kbGwiICUgKFBDQlVJTEQsIG1ham9yLCBtaW5vciksCi0gICAgICAgICAgICAgICAgICAgIHZlcnNpb249cHl2ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZT1pbnN0YWxsZXIuRmlsZVZlcnNpb24ocHlkbGxzcmMsIDEpKQotICAgIERMTHMgPSBQeURpcmVjdG9yeShkYiwgY2FiLCByb290LCBzcmNkaXIgKyAiLyIgKyBQQ0JVSUxELCAiRExMcyIsICJETExTfERMTHMiKQotCi0gICAgIyBtc3ZjcjkwLmRsbDogTmVlZCB0byBwbGFjZSB0aGUgRExMIGFuZCB0aGUgbWFuaWZlc3QgaW50byB0aGUgcm9vdCBkaXJlY3RvcnksCi0gICAgIyBwbHVzIGFub3RoZXIgY29weSBvZiB0aGUgbWFuaWZlc3QgaW4gdGhlIERMTHMgZGlyZWN0b3J5LCB3aXRoIHRoZSBtYW5pZmVzdAotICAgICMgcG9pbnRpbmcgdG8gdGhlIHJvb3QgZGlyZWN0b3J5Ci0gICAgcm9vdC5zdGFydF9jb21wb25lbnQoIm1zdmNyOTAiLCBmZWF0dXJlPXByaXZhdGVfY3J0KQotICAgICMgUmVzdWx0cyBhcmUgSUQsa2V5d29yZCBwYWlycwotICAgIGNydGRsbCwga3dkcyA9IGV4dHJhY3RfbXN2Y3IxMDAoKQotICAgIHJvb3QuYWRkX2ZpbGUoY3J0ZGxsLCAqKmt3ZHMpCi0gICAgIyBDb3B5IHRoZSBtYW5pZmVzdAotICAgICMgQWN0dWFsbHksIGRvbid0IGRvIHRoYXQgYW55bW9yZSAtIG5vIERMTCBpbiBETExzIHNob3VsZCBoYXZlIGEgbWFuaWZlc3QKLSAgICAjIGRlcGVuZGVuY3kgb24gbXN2Y3I5MC5kbGwgYW55bW9yZSwgc28gdGhpcyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeQotICAgICNtYW5pZmVzdF9kbGxzID0gbWFuaWZlc3RbMF0rIi5yb290IgotICAgICNvcGVuKG1hbmlmZXN0X2RsbHMsICJ3Iikud3JpdGUob3BlbihtYW5pZmVzdFsxXVsnc3JjJ10pLnJlYWQoKS5yZXBsYWNlKCJtc3ZjciIsIi4uL21zdmNyIikpCi0gICAgI0RMTHMuc3RhcnRfY29tcG9uZW50KCJtc3ZjcjkwX2RsbHMiLCBmZWF0dXJlPXByaXZhdGVfY3J0KQotICAgICNETExzLmFkZF9maWxlKG1hbmlmZXN0WzBdLCBzcmM9b3MucGF0aC5hYnNwYXRoKG1hbmlmZXN0X2RsbHMpKQotCi0gICAgIyBOb3cgc3RhcnQgdGhlIG1haW4gY29tcG9uZW50IGZvciB0aGUgRExMcyBkaXJlY3Rvcnk7Ci0gICAgIyBubyByZWd1bGFyIGZpbGVzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgZGlyZWN0b3J5IHlldC4KLSAgICBETExzLnN0YXJ0X2NvbXBvbmVudCgpCi0KLSAgICAjIENoZWNrIGlmIF9jdHlwZXMucHlkIGV4aXN0cwotICAgIGhhdmVfY3R5cGVzID0gb3MucGF0aC5leGlzdHMoc3JjZGlyKyIvJXMvX2N0eXBlcy5weWQiICUgUENCVUlMRCkKLSAgICBpZiBub3QgaGF2ZV9jdHlwZXM6Ci0gICAgICAgIHByaW50KCJXQVJOSU5HOiBfY3R5cGVzLnB5ZCBub3QgZm91bmQsIGN0eXBlcyB3aWxsIG5vdCBiZSBpbmNsdWRlZCIpCi0gICAgICAgIGV4dGVuc2lvbnMucmVtb3ZlKCJfY3R5cGVzLnB5ZCIpCi0KLSAgICAjIEFkZCBhbGwgLnB5IGZpbGVzIGluIExpYiwgZXhjZXB0IHRraW50ZXIsIHRlc3QKLSAgICBkaXJzID0gW10KLSAgICBweWRpcnMgPSBbKHJvb3QsICJMaWIiLCBoZ2ZpbGVzWyJMaWIiXSwgZGVmYXVsdF9mZWF0dXJlKV0KLSAgICB3aGlsZSBweWRpcnM6Ci0gICAgICAgICMgQ29tbWl0IGV2ZXJ5IG5vdyBhbmQgdGhlbiwgb3IgZWxzZSBpbnN0YWxsZXIgd2lsbCBjb21wbGFpbgotICAgICAgICBkYi5Db21taXQoKQotICAgICAgICBwYXJlbnQsIGRpciwgZmlsZXMsIGZlYXR1cmUgPSBweWRpcnMucG9wKCkKLSAgICAgICAgaWYgZGlyLnN0YXJ0c3dpdGgoInBsYXQtIik6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBkaXIgaW4gWyJ0a2ludGVyIiwgImlkbGVsaWIiLCAidHVydGxlZGVtbyJdOgotICAgICAgICAgICAgaWYgbm90IGhhdmVfdGNsOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBmZWF0dXJlID0gdGNsdGsKLSAgICAgICAgICAgIHRjbHRrLnNldF9jdXJyZW50KCkKLSAgICAgICAgZWxpZiBkaXIgaW4gKCd0ZXN0JywgJ3Rlc3RzJyk6Ci0gICAgICAgICAgICBmZWF0dXJlID0gdGVzdHN1aXRlCi0gICAgICAgIGVsaWYgbm90IGhhdmVfY3R5cGVzIGFuZCBkaXIgPT0gImN0eXBlcyI6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBmZWF0dXJlLnNldF9jdXJyZW50KCkKLSAgICAgICAgbGliID0gUHlEaXJlY3RvcnkoZGIsIGNhYiwgcGFyZW50LCBkaXIsIGRpciwgIiVzfCVzIiAlIChwYXJlbnQubWFrZV9zaG9ydChkaXIpLCBkaXIpKQotICAgICAgICBkaXJzLmFwcGVuZChsaWIpCi0gICAgICAgIGhhc19weSA9IEZhbHNlCi0gICAgICAgIGZvciBuYW1lLCBzdWJkaXIgaW4gZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIGlmIHN1YmRpciBpcyBOb25lOgotICAgICAgICAgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4obGliLmFic29sdXRlLCBuYW1lKSkKLSAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdSRUFETUUnOgotICAgICAgICAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoIlJFQURNRS50eHQiLCBzcmM9IlJFQURNRSIpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbGliLmFkZF9maWxlKG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGhhc19weSA9IGhhc19weSBvciBuYW1lLmVuZHN3aXRoKCIucHkiKSBvciBuYW1lLmVuZHN3aXRoKCIucHl3IikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGxpYi5hYnNvbHV0ZSwgbmFtZSkpCi0gICAgICAgICAgICAgICAgcHlkaXJzLmFwcGVuZCgobGliLCBuYW1lLCBzdWJkaXIsIGZlYXR1cmUpKQotCi0gICAgICAgIGlmIGhhc19weToKLSAgICAgICAgICAgIGxpYi5yZW1vdmVfcHljKCkKLSAgICAjIEFkZCBETExzCi0gICAgZGVmYXVsdF9mZWF0dXJlLnNldF9jdXJyZW50KCkKLSAgICBsaWIgPSBETExzCi0gICAgbGliLmFkZF9maWxlKCJweS5pY28iLCBzcmM9c3JjZGlyKyIvUEMvcHkuaWNvIikKLSAgICBsaWIuYWRkX2ZpbGUoInB5Yy5pY28iLCBzcmM9c3JjZGlyKyIvUEMvcHljLmljbyIpCi0gICAgZGxscyA9IFtdCi0gICAgdGNsZmlsZXMgPSBbXQotICAgIGZvciBmIGluIGV4dGVuc2lvbnM6Ci0gICAgICAgIGlmIGY9PSJfdGtpbnRlci5weWQiOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNyY2RpciArICIvIiArIFBDQlVJTEQgKyAiLyIgKyBmKToKLSAgICAgICAgICAgIHByaW50KCJXQVJOSU5HOiBNaXNzaW5nIGV4dGVuc2lvbiIsIGYpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBkbGxzLmFwcGVuZChmKQotICAgICAgICBsaWIuYWRkX2ZpbGUoZikKLSAgICBsaWIuYWRkX2ZpbGUoJ3B5dGhvbjMuZGxsJykKLSAgICAjIEFkZCBzcWxpdGUKLSAgICBpZiBtc2lsaWIubXNpX3R5cGU9PSJJbnRlbDY0OzEwMzMiOgotICAgICAgICBzcWxpdGVfYXJjaCA9ICIvaWE2NCIKLSAgICBlbGlmIG1zaWxpYi5tc2lfdHlwZT09Ing2NDsxMDMzIjoKLSAgICAgICAgc3FsaXRlX2FyY2ggPSAiL2FtZDY0IgotICAgICAgICB0Y2xzdWZmaXggPSAiNjQiCi0gICAgZWxzZToKLSAgICAgICAgc3FsaXRlX2FyY2ggPSAiIgotICAgICAgICB0Y2xzdWZmaXggPSAiIgotICAgIGxpYi5hZGRfZmlsZSgic3FsaXRlMy5kbGwiKQotICAgIGlmIGhhdmVfdGNsOgotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIiVzLyVzL190a2ludGVyLnB5ZCIgJSAoc3JjZGlyLCBQQ0JVSUxEKSk6Ci0gICAgICAgICAgICBwcmludCgiV0FSTklORzogTWlzc2luZyBfdGtpbnRlci5weWQiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGliLnN0YXJ0X2NvbXBvbmVudCgiVGtETExzIiwgdGNsdGspCi0gICAgICAgICAgICBsaWIuYWRkX2ZpbGUoIl90a2ludGVyLnB5ZCIpCi0gICAgICAgICAgICBkbGxzLmFwcGVuZCgiX3RraW50ZXIucHlkIikKLSAgICAgICAgICAgIHRjbGRpciA9IG9zLnBhdGgubm9ybXBhdGgoc3JjZGlyKygiL2V4dGVybmFscy90Y2x0ayVzL2JpbiIgJSB0Y2xzdWZmaXgpKQotICAgICAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iMSh0Y2xkaXIsICIqLmRsbCIpOgotICAgICAgICAgICAgICAgIGxpYi5hZGRfZmlsZShmLCBzcmM9b3MucGF0aC5qb2luKHRjbGRpciwgZikpCi0gICAgIyBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgdW5rbm93biBleHRlbnNpb25zCi0gICAgZm9yIGYgaW4gZ2xvYi5nbG9iMShzcmNkaXIrIi8iK1BDQlVJTEQsICIqLnB5ZCIpOgotICAgICAgICBpZiBmLmVuZHN3aXRoKCJfZC5weWQiKTogY29udGludWUgIyBkZWJ1ZyB2ZXJzaW9uCi0gICAgICAgIGlmIGYgaW4gZGxsczogY29udGludWUKLSAgICAgICAgcHJpbnQoIldBUk5JTkc6IFVua25vd24gZXh0ZW5zaW9uIiwgZikKLQotICAgICMgQWRkIGhlYWRlcnMKLSAgICBkZWZhdWx0X2ZlYXR1cmUuc2V0X2N1cnJlbnQoKQotICAgIGxpYiA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHJvb3QsICJpbmNsdWRlIiwgImluY2x1ZGUiLCAiSU5DTFVERXxpbmNsdWRlIikKLSAgICBsaWIuZ2xvYigiKi5oIikKLSAgICBsaWIuYWRkX2ZpbGUoInB5Y29uZmlnLmgiLCBzcmM9Ii4uL1BDL3B5Y29uZmlnLmgiKQotICAgICMgQWRkIGltcG9ydCBsaWJyYXJpZXMKLSAgICBsaWIgPSBQeURpcmVjdG9yeShkYiwgY2FiLCByb290LCBQQ0JVSUxELCAibGlicyIsICJMSUJTfGxpYnMiKQotICAgIGZvciBmIGluIGRsbHM6Ci0gICAgICAgIGxpYi5hZGRfZmlsZShmLnJlcGxhY2UoJ3B5ZCcsJ2xpYicpKQotICAgIGxpYi5hZGRfZmlsZSgncHl0aG9uJXMlcy5saWInICUgKG1ham9yLCBtaW5vcikpCi0gICAgbGliLmFkZF9maWxlKCdweXRob24zLmxpYicpCi0gICAgIyBBZGQgdGhlIG1pbmd3LWZvcm1hdCBsaWJyYXJ5Ci0gICAgaWYgaGF2ZV9taW5ndzoKLSAgICAgICAgbGliLmFkZF9maWxlKCdsaWJweXRob24lcyVzLmEnICUgKG1ham9yLCBtaW5vcikpCi0gICAgaWYgaGF2ZV90Y2w6Ci0gICAgICAgICMgQWRkIFRjbC9UawotICAgICAgICB0Y2xkaXJzID0gWyhyb290LCAnZXh0ZXJuYWxzL3RjbHRrJXMvbGliJyAlIHRjbHN1ZmZpeCwgJ3RjbCcpXQotICAgICAgICB0Y2x0ay5zZXRfY3VycmVudCgpCi0gICAgICAgIHdoaWxlIHRjbGRpcnM6Ci0gICAgICAgICAgICBwYXJlbnQsIHBoeXMsIGRpciA9IHRjbGRpcnMucG9wKCkKLSAgICAgICAgICAgIGxpYiA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHBhcmVudCwgcGh5cywgZGlyLCAiJXN8JXMiICUgKHBhcmVudC5tYWtlX3Nob3J0KGRpciksIGRpcikpCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGliLmFic29sdXRlKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihsaWIuYWJzb2x1dGUpOgotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGxpYi5hYnNvbHV0ZSwgZikpOgotICAgICAgICAgICAgICAgICAgICB0Y2xkaXJzLmFwcGVuZCgobGliLCBmLCBmKSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoZikKLSAgICAjIEFkZCB0b29scwotICAgIHRvb2xzLnNldF9jdXJyZW50KCkKLSAgICB0b29sZGlyID0gUHlEaXJlY3RvcnkoZGIsIGNhYiwgcm9vdCwgIlRvb2xzIiwgIlRvb2xzIiwgIlRPT0xTfFRvb2xzIikKLSAgICBmb3IgZiBpbiBbJ2kxOG4nLCAncHluY2hlJywgJ1NjcmlwdHMnXToKLSAgICAgICAgbGliID0gUHlEaXJlY3RvcnkoZGIsIGNhYiwgdG9vbGRpciwgZiwgZiwgIiVzfCVzIiAlICh0b29sZGlyLm1ha2Vfc2hvcnQoZiksIGYpKQotICAgICAgICBsaWIuZ2xvYigiKi5weSIpCi0gICAgICAgIGxpYi5nbG9iKCIqLnB5dyIpCi0gICAgICAgIGxpYi5yZW1vdmVfcHljKCkKLSAgICAgICAgbGliLmdsb2IoIioudHh0IikKLSAgICAgICAgaWYgZiA9PSAicHluY2hlIjoKLSAgICAgICAgICAgIHggPSBQeURpcmVjdG9yeShkYiwgY2FiLCBsaWIsICJYIiwgIlgiLCAiWHxYIikKLSAgICAgICAgICAgIHguZ2xvYigiKi50eHQiKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4obGliLmFic29sdXRlLCAiUkVBRE1FIikpOgotICAgICAgICAgICAgbGliLmFkZF9maWxlKCJSRUFETUUudHh0Iiwgc3JjPSJSRUFETUUiKQotICAgICAgICBpZiBmID09ICdTY3JpcHRzJzoKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiMnRvMy5weSIsIHNyYz0iMnRvMyIpCi0gICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInB5ZG9jMy5weSIsIHNyYz0icHlkb2MzIikKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgicHl2ZW52LnB5Iiwgc3JjPSJweXZlbnYiKQotICAgICMgQWRkIGRvY3VtZW50YXRpb24KLSAgICBodG1sZmlsZXMuc2V0X2N1cnJlbnQoKQotICAgIGxpYiA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHJvb3QsICJEb2MiLCAiRG9jIiwgIkRPQ3xEb2MiKQotICAgIGxpYi5zdGFydF9jb21wb25lbnQoImRvY3VtZW50YXRpb24iLCBrZXlmaWxlPWRvY2ZpbGUpCi0gICAgbGliLmFkZF9maWxlKGRvY2ZpbGUsIHNyYz0iYnVpbGQvaHRtbGhlbHAvIitkb2NmaWxlKQotCi0gICAgY2FiLmNvbW1pdChkYikKLQotICAgIGZvciBmIGluIHRtcGZpbGVzOgotICAgICAgICBvcy51bmxpbmsoZikKLQotIyBTZWUgIlJlZ2lzdHJ5IFRhYmxlIiwgIkNvbXBvbmVudCBUYWJsZSIKLWRlZiBhZGRfcmVnaXN0cnkoZGIpOgotICAgICMgRmlsZSBleHRlbnNpb25zLCBhc3NvY2lhdGVkIHdpdGggdGhlIFJFR0lTVFJZLmRlZiBjb21wb25lbnQKLSAgICAjIElETEUgdmVyYnMgZGVwZW5kIG9uIHRoZSB0Y2x0ayBmZWF0dXJlLgotICAgICMgbXNpZGJDb21wb25lbnRBdHRyaWJ1dGVzUmVnaXN0cnlLZXlQYXRoID0gNAotICAgICMgLTEgZm9yIFJvb3Qgc3BlY2lmaWVzICJkZXBlbmRlbnQgb24gQUxMVVNFUlMgcHJvcGVydHkiCi0gICAgdGNsZGF0YSA9IFtdCi0gICAgaWYgaGF2ZV90Y2w6Ci0gICAgICAgIHRjbGRhdGEgPSBbCi0gICAgICAgICAgICAoIlJFR0lTVFJZLnRjbCIsIG1zaWxpYi5nZW5fdXVpZCgpLCAiVEFSR0VURElSIiwgcmVnaXN0cnlfY29tcG9uZW50LCBOb25lLAotICAgICAgICAgICAgICJweS5JRExFIildCi0gICAgYWRkX2RhdGEoZGIsICJDb21wb25lbnQiLAotICAgICAgICAgICAgICMgbXNpZGJDb21wb25lbnRBdHRyaWJ1dGVzUmVnaXN0cnlLZXlQYXRoID0gNAotICAgICAgICAgICAgIFsoIlJFR0lTVFJZIiwgbXNpbGliLmdlbl91dWlkKCksICJUQVJHRVRESVIiLCByZWdpc3RyeV9jb21wb25lbnQsIE5vbmUsCi0gICAgICAgICAgICAgICAiSW5zdGFsbFBhdGgiKSwKLSAgICAgICAgICAgICAgKCJSRUdJU1RSWS5kb2MiLCBtc2lsaWIuZ2VuX3V1aWQoKSwgIlRBUkdFVERJUiIsIHJlZ2lzdHJ5X2NvbXBvbmVudCwgTm9uZSwKLSAgICAgICAgICAgICAgICJEb2N1bWVudGF0aW9uIiksCi0gICAgICAgICAgICAgICgiUkVHSVNUUlkucGF0aCIsIG1zaWxpYi5nZW5fdXVpZCgpLCAiVEFSR0VURElSIiwgcmVnaXN0cnlfY29tcG9uZW50LCBOb25lLAotICAgICAgICAgICAgICBOb25lKSwKLSAgICAgICAgICAgICAgKCJSRUdJU1RSWS5lbnN1cmVwaXAiLCBtc2lsaWIuZ2VuX3V1aWQoKSwgIlRBUkdFVERJUiIsIHJlZ2lzdHJ5X2NvbXBvbmVudCwgIkVuc3VyZVBpcFJ1biIsCi0gICAgICAgICAgICAgIE5vbmUpLAotICAgICAgICAgICAgICAoIlJFR0lTVFJZLmRlZiIsIG1zaWxpYi5nZW5fdXVpZCgpLCAiVEFSR0VURElSIiwgcmVnaXN0cnlfY29tcG9uZW50LAotICAgICAgICAgICAgICAgTm9uZSwgTm9uZSldICsgdGNsZGF0YSkKLSAgICAjIFNlZSAiRmVhdHVyZUNvbXBvbmVudHMgVGFibGUiLgotICAgICMgVGhlIGFzc29jaWF0aW9uIGJldHdlZW4gVGNsVGsgYW5kIHB5dGhvbncuZXhlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIElDRTU5Ci0gICAgIyBoYXBweSwgYmVjYXVzZSB0aGUgaW5zdGFsbGVyIG90aGVyd2lzZSBiZWxpZXZlcyB0aGF0IHRoZSBJRExFIGFuZCBQeURvYwotICAgICMgc2hvcnRjdXRzIG1pZ2h0IGdldCBpbnN0YWxsZWQgd2l0aG91dCBweXRob253LmV4ZSBiZWluZyBpbnN0YWxsLiBUaGlzCi0gICAgIyBpcyBub3QgdHJ1ZSwgc2luY2UgaW5zdGFsbGluZyBUY2xUayB3aWxsIGluc3RhbGwgdGhlIGRlZmF1bHQgZmVhdHVyZSwgd2hpY2gKLSAgICAjIHdpbGwgY2F1c2UgcHl0aG9udy5leGUgdG8gYmUgaW5zdGFsbGVkLgotICAgICMgUkVHSVNUUlkudGNsIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IGZlYXR1cmUsIGFzIGl0IHdpbGwgYmUgcmVxdWVzdGVkCi0gICAgIyB0aHJvdWdoIGEgY3VzdG9tIGFjdGlvbgotICAgIHRjbGRhdGEgPSBbXQotICAgIGlmIGhhdmVfdGNsOgotICAgICAgICB0Y2xkYXRhID0gWyh0Y2x0ay5pZCwgInB5dGhvbncuZXhlIildCi0gICAgYWRkX2RhdGEoZGIsICJGZWF0dXJlQ29tcG9uZW50cyIsCi0gICAgICAgICAgICAgWyhkZWZhdWx0X2ZlYXR1cmUuaWQsICJSRUdJU1RSWSIpLAotICAgICAgICAgICAgICAoaHRtbGZpbGVzLmlkLCAiUkVHSVNUUlkuZG9jIiksCi0gICAgICAgICAgICAgIChwcmVwZW5kX3BhdGguaWQsICJSRUdJU1RSWS5wYXRoIiksCi0gICAgICAgICAgICAgIChwaXBfZmVhdHVyZS5pZCwgIlJFR0lTVFJZLmVuc3VyZXBpcCIpLAotICAgICAgICAgICAgICAoZXh0X2ZlYXR1cmUuaWQsICJSRUdJU1RSWS5kZWYiKV0gKwotICAgICAgICAgICAgICB0Y2xkYXRhCi0gICAgICAgICAgICAgICkKLSAgICAjIEV4dGVuc2lvbnMgYXJlIG5vdCBhZHZlcnRpc2VkLiBGb3IgYWR2ZXJ0aXNlZCBleHRlbnNpb25zLAotICAgICMgd2Ugd291bGQgbmVlZCBzZXBhcmF0ZSBiaW5hcmllcyB0aGF0IGluc3RhbGwgYWxvbmcgd2l0aCB0aGUKLSAgICAjIGV4dGVuc2lvbi4KLSAgICBwYXQgPSByIlNvZnR3YXJlXENsYXNzZXNcJXNQeXRob24uJXNGaWxlXHNoZWxsXCVzXGNvbW1hbmQiCi0gICAgZXdpID0gIkVkaXQgd2l0aCBJRExFIgotICAgIHBhdDIgPSByIlNvZnR3YXJlXENsYXNzZXNcJXNQeXRob24uJXNGaWxlXERlZmF1bHRJY29uIgotICAgIHBhdDMgPSByIlNvZnR3YXJlXENsYXNzZXNcJXNQeXRob24uJXNGaWxlIgotICAgIHBhdDQgPSByIlNvZnR3YXJlXENsYXNzZXNcJXNQeXRob24uJXNGaWxlXHNoZWxsZXhcRHJvcEhhbmRsZXIiCi0gICAgdGNsX3ZlcmJzID0gW10KLSAgICBpZiBoYXZlX3RjbDoKLSAgICAgICAgdGNsX3ZlcmJzPVsKLSAgICAgICAgICAgICAoInB5LklETEUiLCAtMSwgcGF0ICUgKHRlc3RwcmVmaXgsICIiLCBld2kpLCAiIiwKLSAgICAgICAgICAgICAgciciW1RBUkdFVERJUl1weXRob253LmV4ZSIgIltUQVJHRVRESVJdTGliXGlkbGVsaWJcaWRsZS5weXciIC1lICIlMSInLAotICAgICAgICAgICAgICAiUkVHSVNUUlkudGNsIiksCi0gICAgICAgICAgICAgKCJweXcuSURMRSIsIC0xLCBwYXQgJSAodGVzdHByZWZpeCwgIk5vQ29uIiwgZXdpKSwgIiIsCi0gICAgICAgICAgICAgIHInIltUQVJHRVRESVJdcHl0aG9udy5leGUiICJbVEFSR0VURElSXUxpYlxpZGxlbGliXGlkbGUucHl3IiAtZSAiJTEiJywKLSAgICAgICAgICAgICAgIlJFR0lTVFJZLnRjbCIpLAotICAgICAgICBdCi0gICAgYWRkX2RhdGEoZGIsICJSZWdpc3RyeSIsCi0gICAgICAgICAgICBbIyBFeHRlbnNpb25zCi0gICAgICAgICAgICAgKCJweS5leHQiLCAtMSwgciJTb2Z0d2FyZVxDbGFzc2VzXC4iK2V4dCwgIiIsCi0gICAgICAgICAgICAgICJQeXRob24uRmlsZSIsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAoInB5dy5leHQiLCAtMSwgciJTb2Z0d2FyZVxDbGFzc2VzXC4iK2V4dCsndycsICIiLAotICAgICAgICAgICAgICAiUHl0aG9uLk5vQ29uRmlsZSIsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAoInB5Yy5leHQiLCAtMSwgciJTb2Z0d2FyZVxDbGFzc2VzXC4iK2V4dCsnYycsICIiLAotICAgICAgICAgICAgICAiUHl0aG9uLkNvbXBpbGVkRmlsZSIsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAoInB5by5leHQiLCAtMSwgciJTb2Z0d2FyZVxDbGFzc2VzXC4iK2V4dCsnbycsICIiLAotICAgICAgICAgICAgICAiUHl0aG9uLkNvbXBpbGVkRmlsZSIsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAjIE1JTUUgdHlwZXMKLSAgICAgICAgICAgICAoInB5Lm1pbWUiLCAtMSwgciJTb2Z0d2FyZVxDbGFzc2VzXC4iK2V4dCwgIkNvbnRlbnQgVHlwZSIsCi0gICAgICAgICAgICAgICJ0ZXh0L3BsYWluIiwgIlJFR0lTVFJZLmRlZiIpLAotICAgICAgICAgICAgICgicHl3Lm1pbWUiLCAtMSwgciJTb2Z0d2FyZVxDbGFzc2VzXC4iK2V4dCsndycsICJDb250ZW50IFR5cGUiLAotICAgICAgICAgICAgICAidGV4dC9wbGFpbiIsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAjVmVyYnMKLSAgICAgICAgICAgICAoInB5Lm9wZW4iLCAtMSwgcGF0ICUgKHRlc3RwcmVmaXgsICIiLCAib3BlbiIpLCAiIiwKLSAgICAgICAgICAgICAgciciW0xBVU5DSEVSRElSXXB5LmV4ZSIgIiUxIiAlKicsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAoInB5dy5vcGVuIiwgLTEsIHBhdCAlICh0ZXN0cHJlZml4LCAiTm9Db24iLCAib3BlbiIpLCAiIiwKLSAgICAgICAgICAgICAgciciW0xBVU5DSEVSRElSXXB5dy5leGUiICIlMSIgJSonLCAiUkVHSVNUUlkuZGVmIiksCi0gICAgICAgICAgICAgKCJweWMub3BlbiIsIC0xLCBwYXQgJSAodGVzdHByZWZpeCwgIkNvbXBpbGVkIiwgIm9wZW4iKSwgIiIsCi0gICAgICAgICAgICAgIHInIltMQVVOQ0hFUkRJUl1weS5leGUiICIlMSIgJSonLCAiUkVHSVNUUlkuZGVmIiksCi0gICAgICAgICAgICAgXSArIHRjbF92ZXJicyArIFsKLSAgICAgICAgICAgICAjSWNvbnMKLSAgICAgICAgICAgICAoInB5Lmljb24iLCAtMSwgcGF0MiAlICh0ZXN0cHJlZml4LCAiIiksICIiLAotICAgICAgICAgICAgICByJ1tETExzXXB5LmljbycsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAoInB5dy5pY29uIiwgLTEsIHBhdDIgJSAodGVzdHByZWZpeCwgIk5vQ29uIiksICIiLAotICAgICAgICAgICAgICByJ1tETExzXXB5LmljbycsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAoInB5Yy5pY29uIiwgLTEsIHBhdDIgJSAodGVzdHByZWZpeCwgIkNvbXBpbGVkIiksICIiLAotICAgICAgICAgICAgICByJ1tETExzXXB5Yy5pY28nLCAiUkVHSVNUUlkuZGVmIiksCi0gICAgICAgICAgICAgIyBEZXNjcmlwdGlvbnMKLSAgICAgICAgICAgICAoInB5LnR4dCIsIC0xLCBwYXQzICUgKHRlc3RwcmVmaXgsICIiKSwgIiIsCi0gICAgICAgICAgICAgICJQeXRob24gRmlsZSIsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgICAoInB5dy50eHQiLCAtMSwgcGF0MyAlICh0ZXN0cHJlZml4LCAiTm9Db24iKSwgIiIsCi0gICAgICAgICAgICAgICJQeXRob24gRmlsZSAobm8gY29uc29sZSkiLCAiUkVHSVNUUlkuZGVmIiksCi0gICAgICAgICAgICAgKCJweWMudHh0IiwgLTEsIHBhdDMgJSAodGVzdHByZWZpeCwgIkNvbXBpbGVkIiksICIiLAotICAgICAgICAgICAgICAiQ29tcGlsZWQgUHl0aG9uIEZpbGUiLCAiUkVHSVNUUlkuZGVmIiksCi0gICAgICAgICAgICAgIyBEcm9wIEhhbmRsZXIKLSAgICAgICAgICAgICAoInB5LmRyb3AiLCAtMSwgcGF0NCAlICh0ZXN0cHJlZml4LCAiIiksICIiLAotICAgICAgICAgICAgICAiezYwMjU0Q0E1LTk1M0ItMTFDRi04Qzk2LTAwQUEwMEI4NzA4Q30iLCAiUkVHSVNUUlkuZGVmIiksCi0gICAgICAgICAgICAgKCJweXcuZHJvcCIsIC0xLCBwYXQ0ICUgKHRlc3RwcmVmaXgsICJOb0NvbiIpLCAiIiwKLSAgICAgICAgICAgICAgIns2MDI1NENBNS05NTNCLTExQ0YtOEM5Ni0wMEFBMDBCODcwOEN9IiwgIlJFR0lTVFJZLmRlZiIpLAotICAgICAgICAgICAgICgicHljLmRyb3AiLCAtMSwgcGF0NCAlICh0ZXN0cHJlZml4LCAiQ29tcGlsZWQiKSwgIiIsCi0gICAgICAgICAgICAgICJ7NjAyNTRDQTUtOTUzQi0xMUNGLThDOTYtMDBBQTAwQjg3MDhDfSIsICJSRUdJU1RSWS5kZWYiKSwKLSAgICAgICAgICAgIF0pCi0KLSAgICAjIFBBVEhFWFQKLSAgICBhZGRfZGF0YShkYiwgIkVudmlyb25tZW50IiwKLSAgICAgICAgICAgICBbKCJQYXRoRXh0QWRkaXRpb24iLCAiPS0qUGF0aEV4dCIsICJbfl07LlBZIiwgIlJFR0lTVFJZLmRlZiIpXSkKLQotICAgICMgUmVnaXN0cnkga2V5cwotICAgIHByZWZpeCA9IHIiU29mdHdhcmVcJXNQeXRob25cUHl0aG9uQ29yZVwlcyIgJSAodGVzdHByZWZpeCwgc2hvcnRfdmVyc2lvbikKLSAgICBhZGRfZGF0YShkYiwgIlJlZ2lzdHJ5IiwKLSAgICAgICAgICAgICBbKCJJbnN0YWxsUGF0aCIsIC0xLCBwcmVmaXgrciJcSW5zdGFsbFBhdGgiLCAiIiwgIltUQVJHRVRESVJdIiwgIlJFR0lTVFJZIiksCi0gICAgICAgICAgICAgICgiSW5zdGFsbEdyb3VwIiwgLTEsIHByZWZpeCtyIlxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXAiLCAiIiwKLSAgICAgICAgICAgICAgICJQeXRob24gJXMiICUgc2hvcnRfdmVyc2lvbiwgIlJFR0lTVFJZIiksCi0gICAgICAgICAgICAgICgiUHl0aG9uUGF0aCIsIC0xLCBwcmVmaXgrciJcUHl0aG9uUGF0aCIsICIiLAotICAgICAgICAgICAgICAgciJbVEFSR0VURElSXUxpYjtbVEFSR0VURElSXURMTHMiLCAiUkVHSVNUUlkiKSwKLSAgICAgICAgICAgICAgKCJEb2N1bWVudGF0aW9uIiwgLTEsIHByZWZpeCtyIlxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb24iLCAiIiwKLSAgICAgICAgICAgICAgICJbVEFSR0VURElSXURvY1xcIitkb2NmaWxlICwgIlJFR0lTVFJZLmRvYyIpLAotICAgICAgICAgICAgICAoIk1vZHVsZXMiLCAtMSwgcHJlZml4K3IiXE1vZHVsZXMiLCAiKyIsIE5vbmUsICJSRUdJU1RSWSIpLAotICAgICAgICAgICAgICAoIkFwcFBhdGhzIiwgLTEsIHIiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cQXBwIFBhdGhzXFB5dGhvbi5leGUiLAotICAgICAgICAgICAgICAgIiIsIHIiW1RBUkdFVERJUl1QeXRob24uZXhlIiwgIlJFR0lTVFJZLmRlZiIpLAotICAgICAgICAgICAgICAoIkRpc3BsYXlJY29uIiwgLTEsCi0gICAgICAgICAgICAgICByIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlcyIgJSBwcm9kdWN0X2NvZGUsCi0gICAgICAgICAgICAgICAiRGlzcGxheUljb24iLCAiW1RBUkdFVERJUl1weXRob24uZXhlIiwgIlJFR0lTVFJZIiksCi0gICAgICAgICAgICAgICMgRmFrZSByZWdpc3RyeSBlbnRyeSB0byBhbGxvdyBpbnN0YWxsZXIgdG8gdHJhY2sgd2hldGhlciBlbnN1cmVwaXAgaGFzIGJlZW4gcnVuCi0gICAgICAgICAgICAgICgiRW5zdXJlUGlwUnVuIiwgLTEsIHByZWZpeCtyIlxFbnN1cmVQaXBSdW4iLCAiIiwgIiMxIiwgIlJFR0lTVFJZLmVuc3VyZXBpcCIpLAotICAgICAgICAgICAgICBdKQotICAgICMgU2hvcnRjdXRzLCBzZWUgIlNob3J0Y3V0IFRhYmxlIgotICAgIGFkZF9kYXRhKGRiLCAiRGlyZWN0b3J5IiwKLSAgICAgICAgICAgICBbKCJQcm9ncmFtTWVudUZvbGRlciIsICJUQVJHRVRESVIiLCAiLiIpLAotICAgICAgICAgICAgICAoIk1lbnVEaXIiLCAiUHJvZ3JhbU1lbnVGb2xkZXIiLCAiUFklcyVzfCVzUHl0aG9uICVzLiVzIiAlIChtYWpvcixtaW5vcix0ZXN0cHJlZml4LG1ham9yLG1pbm9yKSldKQotICAgIGFkZF9kYXRhKGRiLCAiUmVtb3ZlRmlsZSIsCi0gICAgICAgICAgICAgWygiTWVudURpciIsICJUQVJHRVRESVIiLCBOb25lLCAiTWVudURpciIsIDIpXSkKLSAgICB0Y2x0a3Nob3J0Y3V0cyA9IFtdCi0gICAgaWYgbXNpbGliLldpbjY0OgotICAgICAgICBiaXR0ZWQgPSAiNjQgYml0IgotICAgIGVsc2U6Ci0gICAgICAgIGJpdHRlZCA9ICIzMiBiaXQiCi0gICAgaWYgaGF2ZV90Y2w6Ci0gICAgICAgIHRjbHRrc2hvcnRjdXRzID0gWwotICAgICAgICAgICAgICAoIklETEUiLCAiTWVudURpciIsCi0gICAgICAgICAgICAgICAiSURMRXxJRExFIChQeXRob24gIitzaG9ydF92ZXJzaW9uKyIgR1VJIC0gIitiaXR0ZWQrIikiLAotICAgICAgICAgICAgICAgInB5dGhvbncuZXhlIiwgdGNsdGsuaWQsIHInIltUQVJHRVRESVJdTGliXGlkbGVsaWJcaWRsZS5weXciJywKLSAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAwLCBOb25lLCAiVEFSR0VURElSIiksCi0gICAgICAgICAgICAgIF0KLSAgICBhZGRfZGF0YShkYiwgIlNob3J0Y3V0IiwKLSAgICAgICAgICAgICB0Y2x0a3Nob3J0Y3V0cyArCi0gICAgICAgICAgICAgWyMgQWR2ZXJ0aXNlZCBzaG9ydGN1dHM6IHRhcmdldHMgYXJlIGZlYXR1cmVzLCBub3QgZmlsZXMKLSAgICAgICAgICAgICAgKCJQeXRob24iLCAiTWVudURpciIsCi0gICAgICAgICAgICAgICAiUFlUSE9OfFB5dGhvbiAiK3Nob3J0X3ZlcnNpb24rIiAoY29tbWFuZCBsaW5lIC0gIitiaXR0ZWQrIikiLAotICAgICAgICAgICAgICAgInB5dGhvbi5leGUiLCBkZWZhdWx0X2ZlYXR1cmUuaWQsIE5vbmUsIE5vbmUsIE5vbmUsCi0gICAgICAgICAgICAgICAicHl0aG9uX2ljb24uZXhlIiwgMiwgTm9uZSwgIlRBUkdFVERJUiIpLAotICAgICAgICAgICAgICAjIEFkdmVydGlzaW5nIHRoZSBNYW51YWwgYnJlYWtzIG9uIChzb21lPykgV2luOTgsIGFuZCB0aGUgc2hvcnRjdXQgbGFja3MgYW4KLSAgICAgICAgICAgICAgIyBpY29uIGZpcnN0LgotICAgICAgICAgICAgICAjKCJNYW51YWwiLCAiTWVudURpciIsICJNQU5VQUx8UHl0aG9uIE1hbnVhbHMiLCAiZG9jdW1lbnRhdGlvbiIsCi0gICAgICAgICAgICAgICMgaHRtbGZpbGVzLmlkLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSAgICAgICAgICAgICAgIyMgTm9uLWFkdmVydGlzZWQgc2hvcnRjdXRzOiBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBhIHJlZ2lzdHJ5IGNvbXBvbmVudAotICAgICAgICAgICAgICAoIk1hbnVhbCIsICJNZW51RGlyIiwgIk1BTlVBTHxQeXRob24gIitzaG9ydF92ZXJzaW9uKyIgTWFudWFscyIsCi0gICAgICAgICAgICAgICAiUkVHSVNUUlkuZG9jIiwgIlsjJXNdIiAlIGRvY2ZpbGUsCi0gICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSAgICAgICAgICAgICAgKCJQeURvYyIsICJNZW51RGlyIiwKLSAgICAgICAgICAgICAgICJNT0RET0NTfFB5dGhvbiAiK3Nob3J0X3ZlcnNpb24rIiBEb2NzIFNlcnZlciAocHlkb2MgLSAiKwotICAgICAgICAgICAgICAgYml0dGVkKyIpIiwgInB5dGhvbi5leGUiLCBkZWZhdWx0X2ZlYXR1cmUuaWQsIHInLW0gcHlkb2MgLWInLAotICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgInB5dGhvbl9pY29uLmV4ZSIsIDAsIE5vbmUsICJUQVJHRVRESVIiKSwKLSAgICAgICAgICAgICAgKCJVbmluc3RhbGwiLCAiTWVudURpciIsICJVTklOU1R8VW5pbnN0YWxsIFB5dGhvbiAiKwotICAgICAgICAgICAgICAgc2hvcnRfdmVyc2lvbisiICgiK2JpdHRlZCsiKSIsICJSRUdJU1RSWSIsCi0gICAgICAgICAgICAgICBTeXN0ZW1Gb2xkZXJOYW1lKyJtc2lleGVjIiwgICIveCVzIiAlIHByb2R1Y3RfY29kZSwKLSAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotICAgICAgICAgICAgICBdKQotICAgIGRiLkNvbW1pdCgpCi0KLWRlZiBidWlsZF9wZGJ6aXAoKToKLSAgICBwZGJleGNsdWRlID0gWydraWxsX3B5dGhvbi5wZGInLCAnbWFrZV9idWlsZGluZm8ucGRiJywKLSAgICAgICAgICAgICAgICAgICdtYWtlX3ZlcnNpb25pbmZvLnBkYiddCi0gICAgcGF0aCA9ICJweXRob24tJXMlcy1wZGIuemlwIiAlIChmdWxsX2N1cnJlbnRfdmVyc2lvbiwgbXNpbGliLmFyY2hfZXh0KQotICAgIHBkYnppcCA9IHppcGZpbGUuWmlwRmlsZShwYXRoLCAndycpCi0gICAgZm9yIGYgaW4gZ2xvYi5nbG9iMShvcy5wYXRoLmpvaW4oc3JjZGlyLCBQQ0JVSUxEKSwgIioucGRiIik6Ci0gICAgICAgIGlmIGYgbm90IGluIHBkYmV4Y2x1ZGUgYW5kIG5vdCBmLmVuZHN3aXRoKCdfZC5wZGInKToKLSAgICAgICAgICAgIHBkYnppcC53cml0ZShvcy5wYXRoLmpvaW4oc3JjZGlyLCBQQ0JVSUxELCBmKSwgZikKLSAgICBwZGJ6aXAuY2xvc2UoKQotCi1kYixtc2luYW1lID0gYnVpbGRfZGF0YWJhc2UoKQotdHJ5OgotICAgIGFkZF9mZWF0dXJlcyhkYikKLSAgICBhZGRfdWkoZGIpCi0gICAgYWRkX2ZpbGVzKGRiKQotICAgIGFkZF9yZWdpc3RyeShkYikKLSAgICByZW1vdmVfb2xkX3ZlcnNpb25zKGRiKQotICAgIGRiLkNvbW1pdCgpCi1maW5hbGx5OgotICAgIGRlbCBkYgotCi0jIE1lcmdlIENSVCBpbnRvIE1TSSBmaWxlLiBUaGlzIHJlcXVpcmVzIHRoZSBkYXRhYmFzZSB0byBiZSBjbG9zZWQuCi1tb2RfZGlyID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIlByb2dyYW1GaWxlcyJdLCAiQ29tbW9uIEZpbGVzIiwgIk1lcmdlIE1vZHVsZXMiKQotaWYgbXNpbGliLldpbjY0OgotICAgIG1vZHVsZXMgPSBbIk1pY3Jvc29mdF9WQzEwMF9DUlRfeDY0Lm1zbSJdCi1lbHNlOgotICAgIG1vZHVsZXMgPSBbIk1pY3Jvc29mdF9WQzEwMF9DUlRfeDg2Lm1zbSJdCi0KLWZvciBpLCBuIGluIGVudW1lcmF0ZShtb2R1bGVzKToKLSAgICBtb2R1bGVzW2ldID0gb3MucGF0aC5qb2luKG1vZF9kaXIsIG4pCi0KLWRlZiBtZXJnZShtc2ksIGZlYXR1cmUsIHJvb3RkaXIsIG1vZHVsZXMpOgotICAgIGNhYl9hbmRfZmlsZWNvdW50ID0gW10KLSAgICAjIFN0ZXAgMTogTWVyZ2UgZGF0YWJhc2VzLCBleHRyYWN0IGNhYmZpbGVzCi0gICAgbSA9IG1zaWxpYi5NYWtlTWVyZ2UyKCkKLSAgICBtLk9wZW5Mb2coIm1lcmdlLmxvZyIpCi0gICAgbS5PcGVuRGF0YWJhc2UobXNpKQotICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgcHJpbnQgbW9kdWxlCi0gICAgICAgIG0uT3Blbk1vZHVsZShtb2R1bGUsMCkKLSAgICAgICAgbS5NZXJnZShmZWF0dXJlLCByb290ZGlyKQotICAgICAgICBwcmludCAiRXJyb3JzOiIKLSAgICAgICAgZm9yIGUgaW4gbS5FcnJvcnM6Ci0gICAgICAgICAgICBwcmludCBlLlR5cGUsIGUuTW9kdWxlVGFibGUsIGUuRGF0YWJhc2VUYWJsZQotICAgICAgICAgICAgcHJpbnQgIiAgIE1vZGtleXM6IiwKLSAgICAgICAgICAgIGZvciBzIGluIGUuTW9kdWxlS2V5czogcHJpbnQgcywKLSAgICAgICAgICAgIHByaW50Ci0gICAgICAgICAgICBwcmludCAiICAgREJLZXlzOiIsCi0gICAgICAgICAgICBmb3IgcyBpbiBlLkRhdGFiYXNlS2V5czogcHJpbnQgcywKLSAgICAgICAgICAgIHByaW50Ci0gICAgICAgIGNhYm5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoc3VmZml4PSIuY2FiIikKLSAgICAgICAgbS5FeHRyYWN0Q0FCKGNhYm5hbWUpCi0gICAgICAgIGNhYl9hbmRfZmlsZWNvdW50LmFwcGVuZCgoY2FibmFtZSwgbGVuKG0uTW9kdWxlRmlsZXMpKSkKLSAgICAgICAgbS5DbG9zZU1vZHVsZSgpCi0gICAgbS5DbG9zZURhdGFiYXNlKFRydWUpCi0gICAgbS5DbG9zZUxvZygpCi0KLSAgICAjIFN0ZXAgMjogQWRkIENBQiBmaWxlcwotICAgIGkgPSBtc2lsaWIuTWFrZUluc3RhbGxlcigpCi0gICAgZGIgPSBpLk9wZW5EYXRhYmFzZShtc2ksIGNvbnN0YW50cy5tc2lPcGVuRGF0YWJhc2VNb2RlVHJhbnNhY3QpCi0KLSAgICB2ID0gZGIuT3BlblZpZXcoIlNFTEVDVCBMYXN0U2VxdWVuY2UgRlJPTSBNZWRpYSIpCi0gICAgdi5FeGVjdXRlKE5vbmUpCi0gICAgbWF4bWVkaWEgPSAtMQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHIgPSB2LkZldGNoKCkKLSAgICAgICAgaWYgbm90IHI6IGJyZWFrCi0gICAgICAgIHNlcSA9IHIuSW50ZWdlckRhdGEoMSkKLSAgICAgICAgaWYgc2VxID4gbWF4bWVkaWE6Ci0gICAgICAgICAgICBtYXhtZWRpYSA9IHNlcQotICAgIHByaW50ICJTdGFydCBvZiBNZWRpYSIsIG1heG1lZGlhCi0KLSAgICBmb3IgY2FibmFtZSwgY291bnQgaW4gY2FiX2FuZF9maWxlY291bnQ6Ci0gICAgICAgIHN0cmVhbSA9ICJtZXJnZWQlZCIgJSBtYXhtZWRpYQotICAgICAgICBtc2lsaWIuYWRkX2RhdGEoZGIsICJNZWRpYSIsCi0gICAgICAgICAgICAgICAgWyhtYXhtZWRpYSsxLCBtYXhtZWRpYStjb3VudCwgTm9uZSwgIiMiK3N0cmVhbSwgTm9uZSwgTm9uZSldKQotICAgICAgICBtc2lsaWIuYWRkX3N0cmVhbShkYiwgc3RyZWFtLCAgY2FibmFtZSkKLSAgICAgICAgb3MudW5saW5rKGNhYm5hbWUpCi0gICAgICAgIG1heG1lZGlhICs9IGNvdW50Ci0gICAgIyBUaGUgbWVyZ2UgbW9kdWxlIHNldHMgQUxMVVNFUlMgdG8gMSBpbiB0aGUgcHJvcGVydHkgdGFibGUuCi0gICAgIyBUaGlzIGlzIHVuZGVzaXJlZDsgZGVsZXRlIHRoYXQKLSAgICB2ID0gZGIuT3BlblZpZXcoIkRFTEVURSBGUk9NIFByb3BlcnR5IFdIRVJFIFByb3BlcnR5PSdBTExVU0VSUyciKQotICAgIHYuRXhlY3V0ZShOb25lKQotICAgIHYuQ2xvc2UoKQotICAgIGRiLkNvbW1pdCgpCi0KLW1lcmdlKG1zaW5hbWUsICJTaGFyZWRDUlQiLCAiVEFSR0VURElSIiwgbW9kdWxlcykKLQotIyBjZXJ0bmFtZSAoZnJvbSBjb25maWcucHkpIHNob3VsZCBiZSAoYSBzdWJzdHJpbmcgb2YpCi0jIHRoZSBjZXJ0aWZpY2F0ZSBzdWJqZWN0LCBlLmcuICJQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiIKLWlmIGNlcnRuYW1lOgotICAgIG9zLnN5c3RlbSgnc2lnbnRvb2wgc2lnbiAvbiAiJXMiICcKLSAgICAgICcvdCBodHRwOi8vdGltZXN0YW1wLnZlcmlzaWduLmNvbS9zY3JpcHRzL3RpbWVzdGFtcC5kbGwgJwotICAgICAgJy9kICJQeXRob24gJXMiICcKLSAgICAgICclcycgJSAoY2VydG5hbWUsIGZ1bGxfY3VycmVudF92ZXJzaW9uLCBtc2luYW1lKSkKLQotaWYgcGRiemlwOgotICAgIGJ1aWxkX3BkYnppcCgpCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpLnRhcmdldHMgYi9Ub29scy9tc2kvbXNpLnRhcmdldHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiZTM1YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9tc2kudGFyZ2V0cwpAQCAtMCwwICsxLDYyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorCisgICAgPFRhcmdldCBOYW1lPSJQcm9jZXNzSW5zdGFsbEZpbGVzIiBBZnRlclRhcmdldHM9IlByZXBhcmVGb3JCdWlsZCIgQ29uZGl0aW9uPSJAKEluc3RhbGxGaWxlcykgIT0gJyciPgorICAgICAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgICAgIDxfRmlsZUxpc3RUYXJnZXQ+JChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKSQoTVNCdWlsZFByb2plY3ROYW1lKS5nLmNzdjwvX0ZpbGVMaXN0VGFyZ2V0PgorICAgICAgICAgICAgPF9JbnN0YWxsRmlsZXNUYXJnZXQ+JChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKSQoTVNCdWlsZFByb2plY3ROYW1lKS5nLnd4czwvX0luc3RhbGxGaWxlc1RhcmdldD4KKyAgICAgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgICAgICAKKyAgICAgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgICAgIDxJbnN0YWxsRmlsZXM+CisgICAgICAgICAgICAgICAgPF9Tb3VyY2U+JShTb3VyY2UpJChbbXNidWlsZF06Ok1ha2VSZWxhdGl2ZSglKFNvdXJjZUJhc2UpLCAlKEZ1bGxQYXRoKSkpPC9fU291cmNlPgorICAgICAgICAgICAgICAgIDxfVGFyZ2V0PiUoVGFyZ2V0XykkKFttc2J1aWxkXTo6TWFrZVJlbGF0aXZlKCUoVGFyZ2V0QmFzZSksICUoRnVsbFBhdGgpKSk8L19UYXJnZXQ+CisgICAgICAgICAgICA8L0luc3RhbGxGaWxlcz4KKyAgICAgICAgPC9JdGVtR3JvdXA+CisgICAgICAgIAorICAgICAgICA8V3JpdGVMaW5lc1RvRmlsZSBGaWxlPSIkKF9GaWxlTGlzdFRhcmdldCkiIExpbmVzPSJAKEluc3RhbGxGaWxlcy0+JyZxdW90OyUoX1NvdXJjZSkmcXVvdDssJnF1b3Q7JShfVGFyZ2V0KSZxdW90OywmcXVvdDslKEdyb3VwKSZxdW90OywmcXVvdDslKERpc2tJZCkmcXVvdDssJnF1b3Q7JShDb25kaXRpb24pJnF1b3Q7JykiIE92ZXJ3cml0ZT0idHJ1ZSIgLz4KKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0nIiQoUHl0aG9uRXhlKSIgY3N2X3RvX3d4cy5weSAiJChfRmlsZUxpc3RUYXJnZXQpIiAiJChfSW5zdGFsbEZpbGVzVGFyZ2V0KSInCisgICAgICAgICAgICAgIFdvcmtpbmdEaXJlY3Rvcnk9IiQoTVNCdWlsZFRoaXNGaWxlRGlyZWN0b3J5KSIgLz4KKworICAgICAgICA8SXRlbUdyb3VwPgorICAgICAgICAgICAgPEZpbGVXcml0ZXMgSW5jbHVkZT0iJChfRmlsZUxpc3RUYXJnZXQpOyQoX0luc3RhbGxGaWxlc1RhcmdldCkiIC8+CisgICAgICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSIkKF9JbnN0YWxsRmlsZXNUYXJnZXQpIiAvPgorICAgICAgICA8L0l0ZW1Hcm91cD4KKyAgICA8L1RhcmdldD4KKworICAgIDxUYXJnZXQgTmFtZT0iX1RyYW5zZm9ybVd4bFRlbXBsYXRlcyIgQWZ0ZXJUYXJnZXRzPSJQcmVwYXJlRm9yQnVpbGQiIElucHV0cz0iQChXeGxUZW1wbGF0ZSk7JChQeVNvdXJjZVBhdGgpaW5jbHVkZVxwYXRjaGxldmVsLmgiIE91dHB1dHM9IiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aCklKEZpbGVuYW1lKS53eGwiPgorICAgICAgICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IidAKFd4bFRlbXBsYXRlKScgIT0gJyciPgorICAgICAgICAgICAgPF9Db250ZW50PiQoW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJShXeGxUZW1wbGF0ZS5GdWxsUGF0aCkpLlJlcGxhY2UoYHt7U2hvcnRWZXJzaW9ufX1gLCBgJChNYWpvclZlcnNpb25OdW1iZXIpLiQoTWlub3JWZXJzaW9uTnVtYmVyKSQoUHlUZXN0RXh0KWApLlJlcGxhY2UoYHt7TG9uZ1ZlcnNpb259fWAsIGAkKFB5dGhvblZlcnNpb24pJChQeVRlc3RFeHQpYCkuUmVwbGFjZShge3tCaXRuZXNzfX1gLCBgJChCaXRuZXNzKWApKTwvX0NvbnRlbnQ+CisgICAgICAgICAgICA8X0V4aXN0aW5nQ29udGVudCBDb25kaXRpb249IkV4aXN0cygnJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKSUoV3hsVGVtcGxhdGUuRmlsZW5hbWUpLnd4bCcpIj4kKFtTeXN0ZW0uSU8uRmlsZV06OlJlYWRBbGxUZXh0KCQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aCklKFd4bFRlbXBsYXRlLkZpbGVuYW1lKS53eGwpKTwvX0V4aXN0aW5nQ29udGVudD4KKyAgICAgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgICAgICAKKyAgICAgICAgPFdyaXRlTGluZXNUb0ZpbGUgRmlsZT0iJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKSUoV3hsVGVtcGxhdGUuRmlsZW5hbWUpLnd4bCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZXM9IiQoX0NvbnRlbnQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICBPdmVyd3JpdGU9InRydWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbj0iJChfQ29udGVudCkgIT0gJChfRXhpc3RpbmdDb250ZW50KSIgLz4KKyAgICAgICAgCisgICAgICAgIDxJdGVtR3JvdXAgQ29uZGl0aW9uPSInQChXeGxUZW1wbGF0ZSknICE9ICcnIj4KKyAgICAgICAgICAgIDxFbWJlZGRlZFJlc291cmNlIEluY2x1ZGU9IiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aCklKFd4bFRlbXBsYXRlLkZpbGVuYW1lKS53eGwiIC8+CisgICAgICAgICAgICA8RmlsZVdyaXRlcyBJbmNsdWRlPSIkKEludGVybWVkaWF0ZU91dHB1dFBhdGgpJShXeGxUZW1wbGF0ZS5GaWxlbmFtZSkud3hsIiAvPgorICAgICAgICA8L0l0ZW1Hcm91cD4KKyAgICA8L1RhcmdldD4KKworICAgIDxJbXBvcnQgUHJvamVjdD0iJChXaXhUYXJnZXRzUGF0aCkiIC8+CisKKyAgICA8VGFyZ2V0IE5hbWU9IlNpZ25DYWJzIj4KKyAgICAgICAgPEVycm9yIFRleHQ9IlVuYWJsZSB0byBsb2NhdGUgc2lnbnRvb2wuZXhlLiBTZXQgL3A6U2lnblRvb2xQYXRoIGFuZCByZWJ1aWxkIiBDb25kaXRpb249IickKF9TaWduQ29tbWFuZCknID09ICcnIiAvPgorICAgICAgICA8RXhlYyBDb21tYW5kPSIkKF9TaWduQ29tbWFuZCkgQChTaWduQ2Ficy0+JyZxdW90OyUoRnVsbFBhdGgpJnF1b3Q7JywnICcpIiBDb250aW51ZU9uRXJyb3I9ImZhbHNlIiAvPgorICAgIDwvVGFyZ2V0PgorICAgIDxUYXJnZXQgTmFtZT0iU2lnbk1zaSI+CisgICAgICAgIDxFcnJvciBUZXh0PSJVbmFibGUgdG8gbG9jYXRlIHNpZ250b29sLmV4ZS4gU2V0IC9wOlNpZ25Ub29sUGF0aCBhbmQgcmVidWlsZCIgQ29uZGl0aW9uPSInJChfU2lnbkNvbW1hbmQpJyA9PSAnJyIgLz4KKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0iJChfU2lnbkNvbW1hbmQpIEAoU2lnbk1zaS0+JyZxdW90OyUoRnVsbFBhdGgpJnF1b3Q7JywnICcpIiBDb250aW51ZU9uRXJyb3I9ImZhbHNlIiAvPgorICAgIDwvVGFyZ2V0PgorICAgIDxUYXJnZXQgTmFtZT0iU2lnbkJ1bmRsZUVuZ2luZSI+CisgICAgICAgIDxFcnJvciBUZXh0PSJVbmFibGUgdG8gbG9jYXRlIHNpZ250b29sLmV4ZS4gU2V0IC9wOlNpZ25Ub29sUGF0aCBhbmQgcmVidWlsZCIgQ29uZGl0aW9uPSInJChfU2lnbkNvbW1hbmQpJyA9PSAnJyIgLz4KKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0iJChfU2lnbkNvbW1hbmQpIEAoU2lnbkJ1bmRsZUVuZ2luZS0+JyZxdW90OyUoRnVsbFBhdGgpJnF1b3Q7JywnICcpIiBDb250aW51ZU9uRXJyb3I9ImZhbHNlIiAvPgorICAgIDwvVGFyZ2V0PgorICAgIDxUYXJnZXQgTmFtZT0iU2lnbkJ1bmRsZSI+CisgICAgICAgIDxFcnJvciBUZXh0PSJVbmFibGUgdG8gbG9jYXRlIHNpZ250b29sLmV4ZS4gU2V0IC9wOlNpZ25Ub29sUGF0aCBhbmQgcmVidWlsZCIgQ29uZGl0aW9uPSInJChfU2lnbkNvbW1hbmQpJyA9PSAnJyIgLz4KKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0iJChfU2lnbkNvbW1hbmQpIEAoU2lnbkJ1bmRsZS0+JyZxdW90OyUoRnVsbFBhdGgpJnF1b3Q7JywnICcpIiBDb250aW51ZU9uRXJyb3I9ImZhbHNlIiAvPgorICAgIDwvVGFyZ2V0PgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9tc2lsaWIucHkgYi9Ub29scy9tc2kvbXNpbGliLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjA4YjkxLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21zaS9tc2lsaWIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2NzkgKzAsMCBAQAotIyBNaWNyb3NvZnQgSW5zdGFsbGVyIExpYnJhcnkKLSMgKEMpIDIwMDMgTWFydGluIHYuIExvZXdpcwotCi1pbXBvcnQgd2luMzJjb20uY2xpZW50LmdlbmNhY2hlCi1pbXBvcnQgd2luMzJjb20uY2xpZW50Ci1pbXBvcnQgcHl0aG9uY29tLCBweXdpbnR5cGVzCi1mcm9tIHdpbjMyY29tLmNsaWVudCBpbXBvcnQgY29uc3RhbnRzCi1pbXBvcnQgcmUsIHN0cmluZywgb3MsIHNldHMsIGdsb2IsIHN1YnByb2Nlc3MsIHN5cywgX3dpbnJlZywgc3RydWN0LCBfbXNpCi0KLXRyeToKLSAgICBiYXNlc3RyaW5nCi1leGNlcHQgTmFtZUVycm9yOgotICAgIGJhc2VzdHJpbmcgPSAoc3RyLCB1bmljb2RlKQotCi0jIFBhcnRpYWxseSB0YWtlbiBmcm9tIFdpbmUKLWRhdGFzaXplbWFzaz0gICAgICAweDAwZmYKLXR5cGVfdmFsaWQ9ICAgICAgICAweDAxMDAKLXR5cGVfbG9jYWxpemFibGU9ICAweDAyMDAKLQotdHlwZW1hc2s9ICAgICAgICAgIDB4MGMwMAotdHlwZV9sb25nPSAgICAgICAgIDB4MDAwMAotdHlwZV9zaG9ydD0gICAgICAgIDB4MDQwMAotdHlwZV9zdHJpbmc9ICAgICAgIDB4MGMwMAotdHlwZV9iaW5hcnk9ICAgICAgIDB4MDgwMAotCi10eXBlX251bGxhYmxlPSAgICAgMHgxMDAwCi10eXBlX2tleT0gICAgICAgICAgMHgyMDAwCi0jIFhYWCB0ZW1wb3JhcnksIGxvY2FsaXphYmxlPwota25vd25iaXRzID0gZGF0YXNpemVtYXNrIHwgdHlwZV92YWxpZCB8IHR5cGVfbG9jYWxpemFibGUgfCBcCi0gICAgICAgICAgICB0eXBlbWFzayB8IHR5cGVfbnVsbGFibGUgfCB0eXBlX2tleQotCi0jIFN1bW1hcnkgSW5mbyBQcm9wZXJ0eSBJRHMKLVBJRF9DT0RFUEFHRT0xCi1QSURfVElUTEU9MgotUElEX1NVQkpFQ1Q9MwotUElEX0FVVEhPUj00Ci1QSURfS0VZV09SRFM9NQotUElEX0NPTU1FTlRTPTYKLVBJRF9URU1QTEFURT03Ci1QSURfTEFTVEFVVEhPUj04Ci1QSURfUkVWTlVNQkVSPTkKLVBJRF9MQVNUUFJJTlRFRD0xMQotUElEX0NSRUFURV9EVE09MTIKLVBJRF9MQVNUU0FWRV9EVE09MTMKLVBJRF9QQUdFQ09VTlQ9MTQKLVBJRF9XT1JEQ09VTlQ9MTUKLVBJRF9DSEFSQ09VTlQ9MTYKLVBJRF9BUFBOQU1FPTE4Ci1QSURfU0VDVVJJVFk9MTkKLQotZGVmIHJlc2V0KCk6Ci0gICAgZ2xvYmFsIF9kaXJlY3RvcmllcwotICAgIF9kaXJlY3RvcmllcyA9IHNldHMuU2V0KCkKLQotZGVmIEVuc3VyZU1TSSgpOgotICAgIHdpbjMyY29tLmNsaWVudC5nZW5jYWNoZS5FbnN1cmVNb2R1bGUoJ3swMDBDMTA5Mi0wMDAwLTAwMDAtQzAwMC0wMDAwMDAwMDAwNDZ9JywgMTAzMywgMSwgMCkKLQotZGVmIEVuc3VyZU1TTSgpOgotICAgIHRyeToKLSAgICAgICAgd2luMzJjb20uY2xpZW50LmdlbmNhY2hlLkVuc3VyZU1vZHVsZSgnezBBRERBODJGLTJDMjYtMTFEMi1BRDY1LTAwQTBDOUFGMTFBNn0nLCAwLCAxLCAwKQotICAgIGV4Y2VwdCBweXdpbnR5cGVzLmNvbV9lcnJvcjoKLSAgICAgICAgd2luMzJjb20uY2xpZW50LmdlbmNhY2hlLkVuc3VyZU1vZHVsZSgnezBBRERBODJGLTJDMjYtMTFEMi1BRDY1LTAwQTBDOUFGMTFBNn0nLCAwLCAyLCAwKQotCi1fSW5zdGFsbGVyPU5vbmUKLWRlZiBNYWtlSW5zdGFsbGVyKCk6Ci0gICAgZ2xvYmFsIF9JbnN0YWxsZXIKLSAgICBpZiBfSW5zdGFsbGVyIGlzIE5vbmU6Ci0gICAgICAgIEVuc3VyZU1TSSgpCi0gICAgICAgIF9JbnN0YWxsZXIgPSB3aW4zMmNvbS5jbGllbnQuRGlzcGF0Y2goJ1dpbmRvd3NJbnN0YWxsZXIuSW5zdGFsbGVyJywKLSAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENMU0lEPSd7MDAwQzEwOTAtMDAwMC0wMDAwLUMwMDAtMDAwMDAwMDAwMDQ2fScpCi0gICAgcmV0dXJuIF9JbnN0YWxsZXIKLQotX01lcmdlPU5vbmUKLWRlZiBNYWtlTWVyZ2UyKCk6Ci0gICAgZ2xvYmFsIF9NZXJnZQotICAgIGlmIF9NZXJnZSBpcyBOb25lOgotICAgICAgICBFbnN1cmVNU00oKQotICAgICAgICBfTWVyZ2UgPSB3aW4zMmNvbS5jbGllbnQuRGlzcGF0Y2goIk1zbS5NZXJnZTIuMSIpCi0gICAgcmV0dXJuIF9NZXJnZQotCi1jbGFzcyBUYWJsZToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5maWVsZHMgPSBbXQotCi0gICAgZGVmIGFkZF9maWVsZChzZWxmLCBpbmRleCwgbmFtZSwgdHlwZSk6Ci0gICAgICAgIHNlbGYuZmllbGRzLmFwcGVuZCgoaW5kZXgsbmFtZSx0eXBlKSkKLQotICAgIGRlZiBzcWwoc2VsZik6Ci0gICAgICAgIGZpZWxkcyA9IFtdCi0gICAgICAgIGtleXMgPSBbXQotICAgICAgICBzZWxmLmZpZWxkcy5zb3J0KCkKLSAgICAgICAgZmllbGRzID0gW05vbmVdKmxlbihzZWxmLmZpZWxkcykKLSAgICAgICAgZm9yIGluZGV4LCBuYW1lLCB0eXBlIGluIHNlbGYuZmllbGRzOgotICAgICAgICAgICAgaW5kZXggLT0gMQotICAgICAgICAgICAgdW5rID0gdHlwZSAmIH5rbm93bmJpdHMKLSAgICAgICAgICAgIGlmIHVuazoKLSAgICAgICAgICAgICAgICBwcmludCAiJXMuJXMgdW5rbm93biBiaXRzICV4IiAlIChzZWxmLm5hbWUsIG5hbWUsIHVuaykKLSAgICAgICAgICAgIHNpemUgPSB0eXBlICYgZGF0YXNpemVtYXNrCi0gICAgICAgICAgICBkdHlwZSA9IHR5cGUgJiB0eXBlbWFzawotICAgICAgICAgICAgaWYgZHR5cGUgPT0gdHlwZV9zdHJpbmc6Ci0gICAgICAgICAgICAgICAgaWYgc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgdG5hbWU9IkNIQVIoJWQpIiAlIHNpemUKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0bmFtZT0iQ0hBUiIKLSAgICAgICAgICAgIGVsaWYgZHR5cGUgPT0gdHlwZV9zaG9ydDoKLSAgICAgICAgICAgICAgICBhc3NlcnQgc2l6ZT09MgotICAgICAgICAgICAgICAgIHRuYW1lID0gIlNIT1JUIgotICAgICAgICAgICAgZWxpZiBkdHlwZSA9PSB0eXBlX2xvbmc6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHNpemU9PTQKLSAgICAgICAgICAgICAgICB0bmFtZT0iTE9ORyIKLSAgICAgICAgICAgIGVsaWYgZHR5cGUgPT0gdHlwZV9iaW5hcnk6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHNpemU9PTAKLSAgICAgICAgICAgICAgICB0bmFtZT0iT0JKRUNUIgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0bmFtZT0idW5rbm93biIKLSAgICAgICAgICAgICAgICBwcmludCAiJXMuJXN1bmtub3duIGludGVnZXIgdHlwZSAlZCIgJSAoc2VsZi5uYW1lLCBuYW1lLCBzaXplKQotICAgICAgICAgICAgaWYgdHlwZSAmIHR5cGVfbnVsbGFibGU6Ci0gICAgICAgICAgICAgICAgZmxhZ3MgPSAiIgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmbGFncyA9ICIgTk9UIE5VTEwiCi0gICAgICAgICAgICBpZiB0eXBlICYgdHlwZV9sb2NhbGl6YWJsZToKLSAgICAgICAgICAgICAgICBmbGFncyArPSAiIExPQ0FMSVpBQkxFIgotICAgICAgICAgICAgZmllbGRzW2luZGV4XSA9ICJgJXNgICVzJXMiICUgKG5hbWUsIHRuYW1lLCBmbGFncykKLSAgICAgICAgICAgIGlmIHR5cGUgJiB0eXBlX2tleToKLSAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZCgiYCVzYCIgJSBuYW1lKQotICAgICAgICBmaWVsZHMgPSAiLCAiLmpvaW4oZmllbGRzKQotICAgICAgICBrZXlzID0gIiwgIi5qb2luKGtleXMpCi0gICAgICAgIHJldHVybiAiQ1JFQVRFIFRBQkxFICVzICglcyBQUklNQVJZIEtFWSAlcykiICUgKHNlbGYubmFtZSwgZmllbGRzLCBrZXlzKQotCi0gICAgZGVmIGNyZWF0ZShzZWxmLCBkYik6Ci0gICAgICAgIHYgPSBkYi5PcGVuVmlldyhzZWxmLnNxbCgpKQotICAgICAgICB2LkV4ZWN1dGUoTm9uZSkKLSAgICAgICAgdi5DbG9zZSgpCi0KLWNsYXNzIEJpbmFyeToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZm5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBmbmFtZQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICdtc2lsaWIuQmluYXJ5KG9zLnBhdGguam9pbihkaXJuYW1lLCIlcyIpKScgJSBzZWxmLm5hbWUKLQotZGVmIGdlbl9zY2hlbWEoZGVzdHBhdGgsIHNjaGVtYXBhdGgpOgotICAgIGQgPSBNYWtlSW5zdGFsbGVyKCkKLSAgICBzY2hlbWEgPSBkLk9wZW5EYXRhYmFzZShzY2hlbWFwYXRoLAotICAgICAgICAgICAgd2luMzJjb20uY2xpZW50LmNvbnN0YW50cy5tc2lPcGVuRGF0YWJhc2VNb2RlUmVhZE9ubHkpCi0KLSAgICAjIFhYWCBPUkJFUiBCWQotICAgIHY9c2NoZW1hLk9wZW5WaWV3KCJTRUxFQ1QgKiBGUk9NIF9Db2x1bW5zIikKLSAgICBjdXJ0YWJsZT1Ob25lCi0gICAgdGFibGVzID0gW10KLSAgICB2LkV4ZWN1dGUoTm9uZSkKLSAgICBmID0gb3BlbihkZXN0cGF0aCwgInd0IikKLSAgICBmLndyaXRlKCJmcm9tIG1zaWxpYiBpbXBvcnQgVGFibGVcbiIpCi0gICAgd2hpbGUgMToKLSAgICAgICAgcj12LkZldGNoKCkKLSAgICAgICAgaWYgbm90IHI6YnJlYWsKLSAgICAgICAgbmFtZT1yLlN0cmluZ0RhdGEoMSkKLSAgICAgICAgaWYgY3VydGFibGUgIT0gbmFtZToKLSAgICAgICAgICAgIGYud3JpdGUoIlxuJXMgPSBUYWJsZSgnJXMnKVxuIiAlIChuYW1lLG5hbWUpKQotICAgICAgICAgICAgY3VydGFibGUgPSBuYW1lCi0gICAgICAgICAgICB0YWJsZXMuYXBwZW5kKG5hbWUpCi0gICAgICAgIGYud3JpdGUoIiVzLmFkZF9maWVsZCglZCwnJXMnLCVkKVxuIiAlCi0gICAgICAgICAgICAgICAgKG5hbWUsIHIuSW50ZWdlckRhdGEoMiksIHIuU3RyaW5nRGF0YSgzKSwgci5JbnRlZ2VyRGF0YSg0KSkpCi0gICAgdi5DbG9zZSgpCi0KLSAgICBmLndyaXRlKCJcbnRhYmxlcz1bJXNdXG5cbiIgJSAoIiwgIi5qb2luKHRhYmxlcykpKQotCi0gICAgIyBGaWxsIHRoZSBfVmFsaWRhdGlvbiB0YWJsZQotICAgIGYud3JpdGUoIl9WYWxpZGF0aW9uX3JlY29yZHMgPSBbXG4iKQotICAgIHYgPSBzY2hlbWEuT3BlblZpZXcoIlNFTEVDVCAqIEZST00gX1ZhbGlkYXRpb24iKQotICAgIHYuRXhlY3V0ZShOb25lKQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHIgPSB2LkZldGNoKCkKLSAgICAgICAgaWYgbm90IHI6YnJlYWsKLSAgICAgICAgIyBUYWJsZSwgQ29sdW1uLCBOdWxsYWJsZQotICAgICAgICBmLndyaXRlKCIoJXMsJXMsJXMsIiAlCi0gICAgICAgICAgICAgICAgKGByLlN0cmluZ0RhdGEoMSlgLCBgci5TdHJpbmdEYXRhKDIpYCwgYHIuU3RyaW5nRGF0YSgzKWApKQotICAgICAgICBkZWYgcHV0X2ludChpKToKLSAgICAgICAgICAgIGlmIHIuSXNOdWxsKGkpOmYud3JpdGUoIk5vbmUsICIpCi0gICAgICAgICAgICBlbHNlOmYud3JpdGUoIiVkLCIgJSByLkludGVnZXJEYXRhKGkpKQotICAgICAgICBkZWYgcHV0X3N0cihpKToKLSAgICAgICAgICAgIGlmIHIuSXNOdWxsKGkpOmYud3JpdGUoIk5vbmUsICIpCi0gICAgICAgICAgICBlbHNlOmYud3JpdGUoIiVzLCIgJSBgci5TdHJpbmdEYXRhKGkpYCkKLSAgICAgICAgcHV0X2ludCg0KSAjIE1pblZhbHVlCi0gICAgICAgIHB1dF9pbnQoNSkgIyBNYXhWYWx1ZQotICAgICAgICBwdXRfc3RyKDYpICMgS2V5VGFibGUKLSAgICAgICAgcHV0X2ludCg3KSAjIEtleUNvbHVtbgotICAgICAgICBwdXRfc3RyKDgpICMgQ2F0ZWdvcnkKLSAgICAgICAgcHV0X3N0cig5KSAjIFNldAotICAgICAgICBwdXRfc3RyKDEwKSMgRGVzY3JpcHRpb24KLSAgICAgICAgZi53cml0ZSgiKSxcbiIpCi0gICAgZi53cml0ZSgiXVxuXG4iKQotCi0gICAgZi5jbG9zZSgpCi0KLWRlZiBnZW5fc2VxdWVuY2UoZGVzdHBhdGgsIG1zaXBhdGgpOgotICAgIGRpciA9IG9zLnBhdGguZGlybmFtZShkZXN0cGF0aCkKLSAgICBkID0gTWFrZUluc3RhbGxlcigpCi0gICAgc2VxbXNpID0gZC5PcGVuRGF0YWJhc2UobXNpcGF0aCwKLSAgICAgICAgICAgIHdpbjMyY29tLmNsaWVudC5jb25zdGFudHMubXNpT3BlbkRhdGFiYXNlTW9kZVJlYWRPbmx5KQotCi0gICAgdiA9IHNlcW1zaS5PcGVuVmlldygiU0VMRUNUICogRlJPTSBfVGFibGVzIik7Ci0gICAgdi5FeGVjdXRlKE5vbmUpCi0gICAgZiA9IG9wZW4oZGVzdHBhdGgsICJ3IikKLSAgICBwcmludCA+PmYsICJpbXBvcnQgbXNpbGliLG9zO2Rpcm5hbWU9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSIKLSAgICB0YWJsZXMgPSBbXQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHIgPSB2LkZldGNoKCkKLSAgICAgICAgaWYgbm90IHI6YnJlYWsKLSAgICAgICAgdGFibGUgPSByLlN0cmluZ0RhdGEoMSkKLSAgICAgICAgdGFibGVzLmFwcGVuZCh0YWJsZSkKLSAgICAgICAgZi53cml0ZSgiJXMgPSBbXG4iICUgdGFibGUpCi0gICAgICAgIHYxID0gc2VxbXNpLk9wZW5WaWV3KCJTRUxFQ1QgKiBGUk9NIGAlc2AiICUgdGFibGUpCi0gICAgICAgIHYxLkV4ZWN1dGUoTm9uZSkKLSAgICAgICAgaW5mbyA9IHYxLkNvbHVtbkluZm8oY29uc3RhbnRzLm1zaUNvbHVtbkluZm9UeXBlcykKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHIgPSB2MS5GZXRjaCgpCi0gICAgICAgICAgICBpZiBub3QgcjpicmVhawotICAgICAgICAgICAgcmVjID0gW10KLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsci5GaWVsZENvdW50KzEpOgotICAgICAgICAgICAgICAgIGlmIHIuSXNOdWxsKGkpOgotICAgICAgICAgICAgICAgICAgICByZWMuYXBwZW5kKE5vbmUpCi0gICAgICAgICAgICAgICAgZWxpZiBpbmZvLlN0cmluZ0RhdGEoaSlbMF0gaW4gImlJIjoKLSAgICAgICAgICAgICAgICAgICAgcmVjLmFwcGVuZChyLkludGVnZXJEYXRhKGkpKQotICAgICAgICAgICAgICAgIGVsaWYgaW5mby5TdHJpbmdEYXRhKGkpWzBdIGluICJzbFNMIjoKLSAgICAgICAgICAgICAgICAgICAgcmVjLmFwcGVuZChyLlN0cmluZ0RhdGEoaSkpCi0gICAgICAgICAgICAgICAgZWxpZiBpbmZvLlN0cmluZ0RhdGEoaSlbMF09PSJ2IjoKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHIuRGF0YVNpemUoaSkKLSAgICAgICAgICAgICAgICAgICAgYnl0ZXMgPSByLlJlYWRTdHJlYW0oaSwgc2l6ZSwgY29uc3RhbnRzLm1zaVJlYWRTdHJlYW1CeXRlcykKLSAgICAgICAgICAgICAgICAgICAgYnl0ZXMgPSBieXRlcy5lbmNvZGUoImxhdGluLTEiKSAjIGJpbmFyeSBkYXRhIHJlcHJlc2VudGVkICJhcy1pcyIKLSAgICAgICAgICAgICAgICAgICAgaWYgdGFibGUgPT0gIkJpbmFyeSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IHJlY1swXSsiLmJpbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKGRpcixmbmFtZSksIndiIikud3JpdGUoYnl0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWMuYXBwZW5kKEJpbmFyeShmbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWMuYXBwZW5kKGJ5dGVzKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlICJVbnN1cHBvcnRlZCBjb2x1bW4gdHlwZSIsIGluZm8uU3RyaW5nRGF0YShpKQotICAgICAgICAgICAgZi53cml0ZShyZXByKHR1cGxlKHJlYykpKyIsXG4iKQotICAgICAgICB2MS5DbG9zZSgpCi0gICAgICAgIGYud3JpdGUoIl1cblxuIikKLSAgICB2LkNsb3NlKCkKLSAgICBmLndyaXRlKCJ0YWJsZXM9JXNcbiIgJSByZXByKG1hcChzdHIsdGFibGVzKSkpCi0gICAgZi5jbG9zZSgpCi0KLWNsYXNzIF9VbnNwZWNpZmllZDpwYXNzCi1kZWYgY2hhbmdlX3NlcXVlbmNlKHNlcSwgYWN0aW9uLCBzZXFubz1fVW5zcGVjaWZpZWQsIGNvbmQgPSBfVW5zcGVjaWZpZWQpOgotICAgICJDaGFuZ2UgdGhlIHNlcXVlbmNlIG51bWJlciBvZiBhbiBhY3Rpb24gaW4gYSBzZXF1ZW5jZSBsaXN0IgotICAgIGZvciBpIGluIHJhbmdlKGxlbihzZXEpKToKLSAgICAgICAgaWYgc2VxW2ldWzBdID09IGFjdGlvbjoKLSAgICAgICAgICAgIGlmIGNvbmQgaXMgX1Vuc3BlY2lmaWVkOgotICAgICAgICAgICAgICAgIGNvbmQgPSBzZXFbaV1bMV0KLSAgICAgICAgICAgIGlmIHNlcW5vIGlzIF9VbnNwZWNpZmllZDoKLSAgICAgICAgICAgICAgICBzZXFubyA9IHNlcVtpXVsyXQotICAgICAgICAgICAgc2VxW2ldID0gKGFjdGlvbiwgY29uZCwgc2Vxbm8pCi0gICAgICAgICAgICByZXR1cm4KLSAgICByYWlzZSBWYWx1ZUVycm9yLCAiQWN0aW9uIG5vdCBmb3VuZCBpbiBzZXF1ZW5jZSIKLQotZGVmIGFkZF9kYXRhKGRiLCB0YWJsZSwgdmFsdWVzKToKLSAgICBkID0gTWFrZUluc3RhbGxlcigpCi0gICAgdiA9IGRiLk9wZW5WaWV3KCJTRUxFQ1QgKiBGUk9NIGAlc2AiICUgdGFibGUpCi0gICAgY291bnQgPSB2LkNvbHVtbkluZm8oMCkuRmllbGRDb3VudAotICAgIHIgPSBkLkNyZWF0ZVJlY29yZChjb3VudCkKLSAgICBmb3IgdmFsdWUgaW4gdmFsdWVzOgotICAgICAgICBhc3NlcnQgbGVuKHZhbHVlKSA9PSBjb3VudCwgdmFsdWUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY291bnQpOgotICAgICAgICAgICAgZmllbGQgPSB2YWx1ZVtpXQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWVsZCwgKGludCwgbG9uZykpOgotICAgICAgICAgICAgICAgIHIuU2V0SW50ZWdlckRhdGEoaSsxLGZpZWxkKQotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGZpZWxkLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICByLlNldFN0cmluZ0RhdGEoaSsxLGZpZWxkKQotICAgICAgICAgICAgZWxpZiBmaWVsZCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmaWVsZCwgQmluYXJ5KToKLSAgICAgICAgICAgICAgICByLlNldFN0cmVhbShpKzEsIGZpZWxkLm5hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciwgIlVuc3VwcG9ydGVkIHR5cGUgJXMiICUgZmllbGQuX19jbGFzc19fLl9fbmFtZV9fCi0gICAgICAgIHYuTW9kaWZ5KHdpbjMyY29tLmNsaWVudC5jb25zdGFudHMubXNpVmlld01vZGlmeUluc2VydCwgcikKLSAgICAgICAgci5DbGVhckRhdGEoKQotICAgIHYuQ2xvc2UoKQotCi1kZWYgYWRkX3N0cmVhbShkYiwgbmFtZSwgcGF0aCk6Ci0gICAgZCA9IE1ha2VJbnN0YWxsZXIoKQotICAgIHYgPSBkYi5PcGVuVmlldygiSU5TRVJUIElOVE8gX1N0cmVhbXMgKE5hbWUsIERhdGEpIFZBTFVFUyAoJyVzJywgPykiICUgbmFtZSkKLSAgICByID0gZC5DcmVhdGVSZWNvcmQoMSkKLSAgICByLlNldFN0cmVhbSgxLCBwYXRoKQotICAgIHYuRXhlY3V0ZShyKQotICAgIHYuQ2xvc2UoKQotCi1kZWYgaW5pdF9kYXRhYmFzZShuYW1lLCBzY2hlbWEsCi0gICAgICAgICAgICAgICAgICBQcm9kdWN0TmFtZSwgUHJvZHVjdENvZGUsIFByb2R1Y3RWZXJzaW9uLAotICAgICAgICAgICAgICAgICAgTWFudWZhY3R1cmVyLAotICAgICAgICAgICAgICAgICAgcmVxdWVzdF91YWMgPSBGYWxzZSk6Ci0gICAgdHJ5OgotICAgICAgICBvcy51bmxpbmsobmFtZSkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIFByb2R1Y3RDb2RlID0gUHJvZHVjdENvZGUudXBwZXIoKQotICAgIGQgPSBNYWtlSW5zdGFsbGVyKCkKLSAgICAjIENyZWF0ZSB0aGUgZGF0YWJhc2UKLSAgICBkYiA9IGQuT3BlbkRhdGFiYXNlKG5hbWUsCi0gICAgICAgICB3aW4zMmNvbS5jbGllbnQuY29uc3RhbnRzLm1zaU9wZW5EYXRhYmFzZU1vZGVDcmVhdGUpCi0gICAgIyBDcmVhdGUgdGhlIHRhYmxlcwotICAgIGZvciB0IGluIHNjaGVtYS50YWJsZXM6Ci0gICAgICAgIHQuY3JlYXRlKGRiKQotICAgICMgRmlsbCB0aGUgdmFsaWRhdGlvbiB0YWJsZQotICAgIGFkZF9kYXRhKGRiLCAiX1ZhbGlkYXRpb24iLCBzY2hlbWEuX1ZhbGlkYXRpb25fcmVjb3JkcykKLSAgICAjIEluaXRpYWxpemUgdGhlIHN1bW1hcnkgaW5mb3JtYXRpb24sIGFsbG93aW5nIGF0IG1vc3QgMjAgcHJvcGVydGllcwotICAgIHNpID0gZGIuR2V0U3VtbWFyeUluZm9ybWF0aW9uKDIwKQotICAgIHNpLlNldFByb3BlcnR5KFBJRF9USVRMRSwgIkluc3RhbGxhdGlvbiBEYXRhYmFzZSIpCi0gICAgc2kuU2V0UHJvcGVydHkoUElEX1NVQkpFQ1QsIFByb2R1Y3ROYW1lKQotICAgIHNpLlNldFByb3BlcnR5KFBJRF9BVVRIT1IsIE1hbnVmYWN0dXJlcikKLSAgICBzaS5TZXRQcm9wZXJ0eShQSURfVEVNUExBVEUsIG1zaV90eXBlKQotICAgIHNpLlNldFByb3BlcnR5KFBJRF9SRVZOVU1CRVIsIGdlbl91dWlkKCkpCi0gICAgaWYgcmVxdWVzdF91YWM6Ci0gICAgICAgIHdjID0gMiAjIGxvbmcgZmlsZSBuYW1lcywgY29tcHJlc3NlZCwgb3JpZ2luYWwgbWVkaWEKLSAgICBlbHNlOgotICAgICAgICB3YyA9IDIgfCA4ICMgK25ldmVyIGludm9rZSBVQUMKLSAgICBzaS5TZXRQcm9wZXJ0eShQSURfV09SRENPVU5ULCB3YykKLSAgICBzaS5TZXRQcm9wZXJ0eShQSURfUEFHRUNPVU5ULCAyMDApCi0gICAgc2kuU2V0UHJvcGVydHkoUElEX0FQUE5BTUUsICJQeXRob24gTVNJIExpYnJhcnkiKQotICAgICMgWFhYIG1vcmUgcHJvcGVydGllcwotICAgIHNpLlBlcnNpc3QoKQotICAgIGFkZF9kYXRhKGRiLCAiUHJvcGVydHkiLCBbCi0gICAgICAgICgiUHJvZHVjdE5hbWUiLCBQcm9kdWN0TmFtZSksCi0gICAgICAgICgiUHJvZHVjdENvZGUiLCBQcm9kdWN0Q29kZSksCi0gICAgICAgICgiUHJvZHVjdFZlcnNpb24iLCBQcm9kdWN0VmVyc2lvbiksCi0gICAgICAgICgiTWFudWZhY3R1cmVyIiwgTWFudWZhY3R1cmVyKSwKLSAgICAgICAgKCJQcm9kdWN0TGFuZ3VhZ2UiLCAiMTAzMyIpXSkKLSAgICBkYi5Db21taXQoKQotICAgIHJldHVybiBkYgotCi1kZWYgYWRkX3RhYmxlcyhkYiwgbW9kdWxlKToKLSAgICBmb3IgdGFibGUgaW4gbW9kdWxlLnRhYmxlczoKLSAgICAgICAgYWRkX2RhdGEoZGIsIHRhYmxlLCBnZXRhdHRyKG1vZHVsZSwgdGFibGUpKQotCi1kZWYgbWFrZV9pZChzdHIpOgotICAgICNzdHIgPSBzdHIucmVwbGFjZSgiLiIsICJfIikgIyBjb2xvbnMgYXJlIGFsbG93ZWQKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgiICIsICJfIikKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgiLSIsICJfIikKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgiKyIsICJfIikKLSAgICBpZiBzdHJbMF0gaW4gc3RyaW5nLmRpZ2l0czoKLSAgICAgICAgc3RyID0gIl8iK3N0cgotICAgIGFzc2VydCByZS5tYXRjaCgiXltBLVphLXpfXVtBLVphLXowLTlfLl0qJCIsIHN0ciksICJGSUxFIitzdHIKLSAgICByZXR1cm4gc3RyCi0KLWRlZiBnZW5fdXVpZCgpOgotICAgIHJldHVybiBzdHIocHl0aG9uY29tLkNyZWF0ZUd1aWQoKSkKLQotY2xhc3MgQ0FCOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLmZpbGVzID0gW10KLSAgICAgICAgc2VsZi5maWxlbmFtZXMgPSBzZXRzLlNldCgpCi0gICAgICAgIHNlbGYuaW5kZXggPSAwCi0KLSAgICBkZWYgZ2VuX2lkKHNlbGYsIGRpciwgZmlsZSk6Ci0gICAgICAgIGxvZ2ljYWwgPSBfbG9naWNhbCA9IG1ha2VfaWQoZmlsZSkKLSAgICAgICAgcG9zID0gMQotICAgICAgICB3aGlsZSBsb2dpY2FsIGluIHNlbGYuZmlsZW5hbWVzOgotICAgICAgICAgICAgbG9naWNhbCA9ICIlcy4lZCIgJSAoX2xvZ2ljYWwsIHBvcykKLSAgICAgICAgICAgIHBvcyArPSAxCi0gICAgICAgIHNlbGYuZmlsZW5hbWVzLmFkZChsb2dpY2FsKQotICAgICAgICByZXR1cm4gbG9naWNhbAotCi0gICAgZGVmIGFwcGVuZChzZWxmLCBmdWxsLCBmaWxlLCBsb2dpY2FsID0gTm9uZSk6Ci0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbCk6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IGxvZ2ljYWw6Ci0gICAgICAgICAgICBsb2dpY2FsID0gc2VsZi5nZW5faWQoZGlyLCBmaWxlKQotICAgICAgICBzZWxmLmluZGV4ICs9IDEKLSAgICAgICAgc2VsZi5maWxlcy5hcHBlbmQoKGZ1bGwsIGxvZ2ljYWwpKQotICAgICAgICByZXR1cm4gc2VsZi5pbmRleCwgbG9naWNhbAotCi0gICAgZGVmIGNvbW1pdChzZWxmLCBkYik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVubGluayhzZWxmLm5hbWUrIi5jYWIiKQotICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgX21zaS5GQ0lDcmVhdGUoc2VsZi5uYW1lKyIuY2FiIiwgc2VsZi5maWxlcykKLSAgICAgICAgYWRkX2RhdGEoZGIsICJNZWRpYSIsCi0gICAgICAgICAgICAgICAgWygxLCBzZWxmLmluZGV4LCBOb25lLCAiIyIrc2VsZi5uYW1lLCBOb25lLCBOb25lKV0pCi0gICAgICAgIGFkZF9zdHJlYW0oZGIsIHNlbGYubmFtZSwgc2VsZi5uYW1lKyIuY2FiIikKLSAgICAgICAgb3MudW5saW5rKHNlbGYubmFtZSsiLmNhYiIpCi0gICAgICAgIGRiLkNvbW1pdCgpCi0KLV9kaXJlY3RvcmllcyA9IHNldHMuU2V0KCkKLWNsYXNzIERpcmVjdG9yeToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGIsIGNhYiwgYmFzZWRpciwgcGh5c2ljYWwsIF9sb2dpY2FsLCBkZWZhdWx0LCBjb21wb25lbnRmbGFncz1Ob25lKToKLSAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiB0aGUgRGlyZWN0b3J5IHRhYmxlLiBUaGVyZSBpcyBhIGN1cnJlbnQgY29tcG9uZW50Ci0gICAgICAgIGF0IGVhY2ggcG9pbnQgaW4gdGltZSBmb3IgdGhlIGRpcmVjdG9yeSwgd2hpY2ggaXMgZWl0aGVyIGV4cGxpY2l0bHkgY3JlYXRlZAotICAgICAgICB0aHJvdWdoIHN0YXJ0X2NvbXBvbmVudCwgb3IgaW1wbGljaXRseSB3aGVuIGZpbGVzIGFyZSBhZGRlZCBmb3IgdGhlIGZpcnN0Ci0gICAgICAgIHRpbWUuIEZpbGVzIGFyZSBhZGRlZCBpbnRvIHRoZSBjdXJyZW50IGNvbXBvbmVudCwgYW5kIGludG8gdGhlIGNhYiBmaWxlLgotICAgICAgICBUbyBjcmVhdGUgYSBkaXJlY3RvcnksIGEgYmFzZSBkaXJlY3Rvcnkgb2JqZWN0IG5lZWRzIHRvIGJlIHNwZWNpZmllZCAoY2FuIGJlCi0gICAgICAgIE5vbmUpLCB0aGUgcGF0aCB0byB0aGUgcGh5c2ljYWwgZGlyZWN0b3J5LCBhbmQgYSBsb2dpY2FsIGRpcmVjdG9yeSBuYW1lLgotICAgICAgICBEZWZhdWx0IHNwZWNpZmllcyB0aGUgRGVmYXVsdERpciBzbG90IGluIHRoZSBkaXJlY3RvcnkgdGFibGUuIGNvbXBvbmVudGZsYWdzCi0gICAgICAgIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBmbGFncyB0aGF0IG5ldyBjb21wb25lbnRzIGdldC4iIiIKLSAgICAgICAgaW5kZXggPSAxCi0gICAgICAgIF9sb2dpY2FsID0gbWFrZV9pZChfbG9naWNhbCkKLSAgICAgICAgbG9naWNhbCA9IF9sb2dpY2FsCi0gICAgICAgIHdoaWxlIGxvZ2ljYWwgaW4gX2RpcmVjdG9yaWVzOgotICAgICAgICAgICAgbG9naWNhbCA9ICIlcyVkIiAlIChfbG9naWNhbCwgaW5kZXgpCi0gICAgICAgICAgICBpbmRleCArPSAxCi0gICAgICAgIF9kaXJlY3Rvcmllcy5hZGQobG9naWNhbCkKLSAgICAgICAgc2VsZi5kYiA9IGRiCi0gICAgICAgIHNlbGYuY2FiID0gY2FiCi0gICAgICAgIHNlbGYuYmFzZWRpciA9IGJhc2VkaXIKLSAgICAgICAgc2VsZi5waHlzaWNhbCA9IHBoeXNpY2FsCi0gICAgICAgIHNlbGYubG9naWNhbCA9IGxvZ2ljYWwKLSAgICAgICAgc2VsZi5jb21wb25lbnQgPSBOb25lCi0gICAgICAgIHNlbGYuc2hvcnRfbmFtZXMgPSB7fQotICAgICAgICBzZWxmLmlkcyA9IHNldHMuU2V0KCkKLSAgICAgICAgc2VsZi5rZXlmaWxlcyA9IHt9Ci0gICAgICAgIHNlbGYuY29tcG9uZW50ZmxhZ3MgPSBjb21wb25lbnRmbGFncwotICAgICAgICBpZiBiYXNlZGlyOgotICAgICAgICAgICAgc2VsZi5hYnNvbHV0ZSA9IG9zLnBhdGguam9pbihiYXNlZGlyLmFic29sdXRlLCBwaHlzaWNhbCkKLSAgICAgICAgICAgIGJsb2dpY2FsID0gYmFzZWRpci5sb2dpY2FsCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFic29sdXRlID0gcGh5c2ljYWwKLSAgICAgICAgICAgIGJsb2dpY2FsID0gTm9uZQotICAgICAgICAjIGluaXRpYWxseSBhc3N1bWUgdGhhdCBhbGwgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIHVucGFja2FnZWQKLSAgICAgICAgIyBhcyBmaWxlcyBmcm9tIHNlbGYuYWJzb2x1dGUgZ2V0IGFkZGVkLCB0aGlzIHNldCBpcyByZWR1Y2VkCi0gICAgICAgIHNlbGYudW5wYWNrYWdlZF9maWxlcyA9IHNldCgpCi0gICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoc2VsZi5hYnNvbHV0ZSk6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5hYnNvbHV0ZSwgZikpOgotICAgICAgICAgICAgICAgIHNlbGYudW5wYWNrYWdlZF9maWxlcy5hZGQoZikKLSAgICAgICAgYWRkX2RhdGEoZGIsICJEaXJlY3RvcnkiLCBbKGxvZ2ljYWwsIGJsb2dpY2FsLCBkZWZhdWx0KV0pCi0KLSAgICBkZWYgc3RhcnRfY29tcG9uZW50KHNlbGYsIGNvbXBvbmVudCA9IE5vbmUsIGZlYXR1cmUgPSBOb25lLCBmbGFncyA9IE5vbmUsIGtleWZpbGUgPSBOb25lLCB1dWlkPU5vbmUpOgotICAgICAgICAiIiJBZGQgYW4gZW50cnkgdG8gdGhlIENvbXBvbmVudCB0YWJsZSwgYW5kIG1ha2UgdGhpcyBjb21wb25lbnQgdGhlIGN1cnJlbnQgZm9yIHRoaXMKLSAgICAgICAgZGlyZWN0b3J5LiBJZiBubyBjb21wb25lbnQgbmFtZSBpcyBnaXZlbiwgdGhlIGRpcmVjdG9yeSBuYW1lIGlzIHVzZWQuIElmIG5vIGZlYXR1cmUKLSAgICAgICAgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGZlYXR1cmUgaXMgdXNlZC4gSWYgbm8gZmxhZ3MgYXJlIGdpdmVuLCB0aGUgZGlyZWN0b3J5J3MgZGVmYXVsdAotICAgICAgICBmbGFncyBhcmUgdXNlZC4gSWYgbm8ga2V5ZmlsZSBpcyBnaXZlbiwgdGhlIEtleVBhdGggaXMgbGVmdCBudWxsIGluIHRoZSBDb21wb25lbnQKLSAgICAgICAgdGFibGUuIiIiCi0gICAgICAgIGlmIGZsYWdzIGlzIE5vbmU6Ci0gICAgICAgICAgICBmbGFncyA9IHNlbGYuY29tcG9uZW50ZmxhZ3MKLSAgICAgICAgaWYgdXVpZCBpcyBOb25lOgotICAgICAgICAgICAgdXVpZCA9IGdlbl91dWlkKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHV1aWQgPSB1dWlkLnVwcGVyKCkKLSAgICAgICAgaWYgY29tcG9uZW50IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb21wb25lbnQgPSBzZWxmLmxvZ2ljYWwKLSAgICAgICAgc2VsZi5jb21wb25lbnQgPSBjb21wb25lbnQKLSAgICAgICAgaWYgV2luNjQ6Ci0gICAgICAgICAgICBmbGFncyB8PSAyNTYKLSAgICAgICAgaWYga2V5ZmlsZToKLSAgICAgICAgICAgIGtleWlkID0gc2VsZi5jYWIuZ2VuX2lkKHNlbGYuYWJzb2x1dGUsIGtleWZpbGUpCi0gICAgICAgICAgICBzZWxmLmtleWZpbGVzW2tleWZpbGVdID0ga2V5aWQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGtleWlkID0gTm9uZQotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiQ29tcG9uZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsoY29tcG9uZW50LCB1dWlkLCBzZWxmLmxvZ2ljYWwsIGZsYWdzLCBOb25lLCBrZXlpZCldKQotICAgICAgICBpZiBmZWF0dXJlIGlzIE5vbmU6Ci0gICAgICAgICAgICBmZWF0dXJlID0gY3VycmVudF9mZWF0dXJlCi0gICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJGZWF0dXJlQ29tcG9uZW50cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbKGZlYXR1cmUuaWQsIGNvbXBvbmVudCldKQotCi0gICAgZGVmIG1ha2Vfc2hvcnQoc2VsZiwgZmlsZSk6Ci0gICAgICAgIGxvbmcgPSBmaWxlCi0gICAgICAgIGZpbGUgPSByZS5zdWIocidbXD98Pjw6LyoiKyw7PVxbXF1dJywgJ18nLCBmaWxlKSAjIHJlc3RyaWN0aW9ucyBvbiBzaG9ydCBuYW1lcwotICAgICAgICBwYXJ0cyA9IGZpbGUuc3BsaXQoIi4iLCAxKQotICAgICAgICBpZiBsZW4ocGFydHMpPjE6Ci0gICAgICAgICAgICBzdWZmaXggPSBwYXJ0c1sxXS51cHBlcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzdWZmaXggPSAnJwotICAgICAgICBwcmVmaXggPSBwYXJ0c1swXS51cHBlcigpCi0gICAgICAgIGlmIGxlbihwcmVmaXgpIDw9IDggYW5kICcuJyBub3QgaW4gc3VmZml4IGFuZCBsZW4oc3VmZml4KSA8PSAzOgotICAgICAgICAgICAgaWYgc3VmZml4OgotICAgICAgICAgICAgICAgIGZpbGUgPSBwcmVmaXgrIi4iK3N1ZmZpeAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmaWxlID0gcHJlZml4Ci0gICAgICAgICAgICBhc3NlcnQgZmlsZSBub3QgaW4gc2VsZi5zaG9ydF9uYW1lcywgKGZpbGUsIHNlbGYuc2hvcnRfbmFtZXNbZmlsZV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmVmaXggPSBwcmVmaXhbOjZdCi0gICAgICAgICAgICBpZiBzdWZmaXg6Ci0gICAgICAgICAgICAgICAgIyBsYXN0IHRocmVlIGNoYXJhY3RlcnMgb2YgbGFzdCBzdWZmaXgKLSAgICAgICAgICAgICAgICBzdWZmaXggPSBzdWZmaXgucnNwbGl0KCcuJylbLTFdWzozXQotICAgICAgICAgICAgcG9zID0gMQotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICBpZiBzdWZmaXg6Ci0gICAgICAgICAgICAgICAgICAgIGZpbGUgPSAiJXN+JWQuJXMiICUgKHByZWZpeCwgcG9zLCBzdWZmaXgpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZmlsZSA9ICIlc34lZCIgJSAocHJlZml4LCBwb3MpCi0gICAgICAgICAgICAgICAgaWYgZmlsZSBub3QgaW4gc2VsZi5zaG9ydF9uYW1lczogYnJlYWsKLSAgICAgICAgICAgICAgICBwb3MgKz0gMQotICAgICAgICAgICAgICAgIGFzc2VydCBwb3MgPCAxMDAwMAotICAgICAgICAgICAgICAgIGlmIHBvcyBpbiAoMTAsIDEwMCwgMTAwMCk6Ci0gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeFs6LTFdCi0gICAgICAgIHNlbGYuc2hvcnRfbmFtZXNbZmlsZV0gPSBsb25nCi0gICAgICAgIHJldHVybiBmaWxlCi0KLSAgICBkZWYgYWRkX2ZpbGUoc2VsZiwgZmlsZSwgc3JjPU5vbmUsIHZlcnNpb249Tm9uZSwgbGFuZ3VhZ2U9Tm9uZSk6Ci0gICAgICAgICIiIkFkZCBhIGZpbGUgdG8gdGhlIGN1cnJlbnQgY29tcG9uZW50IG9mIHRoZSBkaXJlY3RvcnksIHN0YXJ0aW5nIGEgbmV3IG9uZQotICAgICAgICBpZiB0aGVyZSBpcyBubyBjdXJyZW50IGNvbXBvbmVudC4gQnkgZGVmYXVsdCwgdGhlIGZpbGUgbmFtZSBpbiB0aGUgc291cmNlCi0gICAgICAgIGFuZCB0aGUgZmlsZSB0YWJsZSB3aWxsIGJlIGlkZW50aWNhbC4gSWYgdGhlIHNyYyBmaWxlIGlzIHNwZWNpZmllZCwgaXQgaXMKLSAgICAgICAgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiBPcHRpb25hbGx5LCBhIHZlcnNpb24gYW5kIGEKLSAgICAgICAgbGFuZ3VhZ2UgY2FuIGJlIHNwZWNpZmllZCBmb3IgdGhlIGVudHJ5IGluIHRoZSBGaWxlIHRhYmxlLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5jb21wb25lbnQ6Ci0gICAgICAgICAgICBzZWxmLnN0YXJ0X2NvbXBvbmVudChzZWxmLmxvZ2ljYWwsIGN1cnJlbnRfZmVhdHVyZSkKLSAgICAgICAgaWYgbm90IHNyYzoKLSAgICAgICAgICAgICMgQWxsb3cgcmVsYXRpdmUgcGF0aHMgZm9yIGZpbGUgaWYgc3JjIGlzIG5vdCBzcGVjaWZpZWQKLSAgICAgICAgICAgIHNyYyA9IGZpbGUKLSAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpCi0gICAgICAgIGFic29sdXRlID0gb3MucGF0aC5qb2luKHNlbGYuYWJzb2x1dGUsIHNyYykKLSAgICAgICAgaWYgYWJzb2x1dGUuc3RhcnRzd2l0aChzZWxmLmFic29sdXRlKToKLSAgICAgICAgICAgICMgbWFyayBmaWxlIGFzIHBhY2thZ2VkCi0gICAgICAgICAgICByZWxhdGl2ZSA9IGFic29sdXRlW2xlbihzZWxmLmFic29sdXRlKSsxOl0KLSAgICAgICAgICAgIGlmIHJlbGF0aXZlIGluIHNlbGYudW5wYWNrYWdlZF9maWxlczoKLSAgICAgICAgICAgICAgICBzZWxmLnVucGFja2FnZWRfZmlsZXMucmVtb3ZlKHJlbGF0aXZlKQotICAgICAgICBhc3NlcnQgbm90IHJlLnNlYXJjaChyJ1tcP3w+PDovKl0iJywgZmlsZSkgIyByZXN0cmljdGlvbnMgb24gbG9uZyBuYW1lcwotICAgICAgICBpZiBzZWxmLmtleWZpbGVzLmhhc19rZXkoZmlsZSk6Ci0gICAgICAgICAgICBsb2dpY2FsID0gc2VsZi5rZXlmaWxlc1tmaWxlXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9naWNhbCA9IE5vbmUKLSAgICAgICAgc2VxdWVuY2UsIGxvZ2ljYWwgPSBzZWxmLmNhYi5hcHBlbmQoYWJzb2x1dGUsIGZpbGUsIGxvZ2ljYWwpCi0gICAgICAgIGFzc2VydCBsb2dpY2FsIG5vdCBpbiBzZWxmLmlkcwotICAgICAgICBzZWxmLmlkcy5hZGQobG9naWNhbCkKLSAgICAgICAgc2hvcnQgPSBzZWxmLm1ha2Vfc2hvcnQoZmlsZSkKLSAgICAgICAgZnVsbCA9ICIlc3wlcyIgJSAoc2hvcnQsIGZpbGUpCi0gICAgICAgIGZpbGVzaXplID0gb3Muc3RhdChhYnNvbHV0ZSkuc3Rfc2l6ZQotICAgICAgICAjIGNvbnN0YW50cy5tc2lkYkZpbGVBdHRyaWJ1dGVzVml0YWwKLSAgICAgICAgIyBDb21wcmVzc2VkIG9taXR0ZWQsIHNpbmNlIGl0IGlzIHRoZSBkYXRhYmFzZSBkZWZhdWx0Ci0gICAgICAgICMgY291bGQgYWRkIHIvbywgc3lzdGVtLCBoaWRkZW4KLSAgICAgICAgYXR0cmlidXRlcyA9IDUxMgotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiRmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbKGxvZ2ljYWwsIHNlbGYuY29tcG9uZW50LCBmdWxsLCBmaWxlc2l6ZSwgdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSwgYXR0cmlidXRlcywgc2VxdWVuY2UpXSkKLSAgICAgICAgaWYgbm90IHZlcnNpb246Ci0gICAgICAgICAgICAjIEFkZCBoYXNoIGlmIHRoZSBmaWxlIGlzIG5vdCB2ZXJzaW9uZWQKLSAgICAgICAgICAgIGZpbGVoYXNoID0gTWFrZUluc3RhbGxlcigpLkZpbGVIYXNoKGFic29sdXRlLCAwKQotICAgICAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIk1zaUZpbGVIYXNoIiwKLSAgICAgICAgICAgICAgICAgICAgIFsobG9naWNhbCwgMCwgZmlsZWhhc2guSW50ZWdlckRhdGEoMSksCi0gICAgICAgICAgICAgICAgICAgICAgIGZpbGVoYXNoLkludGVnZXJEYXRhKDIpLCBmaWxlaGFzaC5JbnRlZ2VyRGF0YSgzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgZmlsZWhhc2guSW50ZWdlckRhdGEoNCkpXSkKLSAgICAgICAgIyBBdXRvbWF0aWNhbGx5IHJlbW92ZSAucHljLy5weW8gZmlsZXMgb24gdW5pbnN0YWxsICgyKQotICAgICAgICAjIFhYWDogYWRkaW5nIHNvIG1hbnkgUmVtb3ZlRmlsZSBlbnRyaWVzIG1ha2VzIGluc3RhbGxlciB1bmJlbGlldmFibHkKLSAgICAgICAgIyBzbG93LiBTbyBpbnN0ZWFkLCB3ZSBoYXZlIHRvIHVzZSB3aWxkY2FyZCByZW1vdmUgZW50cmllcwotICAgICAgICAjIGlmIGZpbGUuZW5kc3dpdGgoIi5weSIpOgotICAgICAgICAjICAgICBhZGRfZGF0YShzZWxmLmRiLCAiUmVtb3ZlRmlsZSIsCi0gICAgICAgICMgICAgICAgICAgICAgIFsobG9naWNhbCsiYyIsIHNlbGYuY29tcG9uZW50LCAiJXNDfCVzYyIgJSAoc2hvcnQsIGZpbGUpLAotICAgICAgICAjICAgICAgICAgICAgICAgIHNlbGYubG9naWNhbCwgMiksCi0gICAgICAgICMgICAgICAgICAgICAgICAobG9naWNhbCsibyIsIHNlbGYuY29tcG9uZW50LCAiJXNPfCVzbyIgJSAoc2hvcnQsIGZpbGUpLAotICAgICAgICAjICAgICAgICAgICAgICAgIHNlbGYubG9naWNhbCwgMildKQotCi0gICAgZGVmIGdsb2Ioc2VsZiwgcGF0dGVybiwgZXhjbHVkZSA9IE5vbmUpOgotICAgICAgICAiIiJBZGQgYSBsaXN0IG9mIGZpbGVzIHRvIHRoZSBjdXJyZW50IGNvbXBvbmVudCBhcyBzcGVjaWZpZWQgaW4gdGhlCi0gICAgICAgIGdsb2IgcGF0dGVybi4gSW5kaXZpZHVhbCBmaWxlcyBjYW4gYmUgZXhjbHVkZWQgaW4gdGhlIGV4Y2x1ZGUgbGlzdC4iIiIKLSAgICAgICAgZmlsZXMgPSBnbG9iLmdsb2IxKHNlbGYuYWJzb2x1dGUsIHBhdHRlcm4pCi0gICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgaWYgZXhjbHVkZSBhbmQgZiBpbiBleGNsdWRlOiBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5hZGRfZmlsZShmKQotICAgICAgICByZXR1cm4gZmlsZXMKLQotICAgIGRlZiByZW1vdmVfcHljKHNlbGYpOgotICAgICAgICAiUmVtb3ZlIC5weWMvLnB5byBmaWxlcyBmcm9tIF9fcHljYWNoZV9fIG9uIHVuaW5zdGFsbCIKLSAgICAgICAgZGlyZWN0b3J5ID0gc2VsZi5sb2dpY2FsICsgIl9weWNhY2hlIgotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiRGlyZWN0b3J5IiwgWyhkaXJlY3RvcnksIHNlbGYubG9naWNhbCwgIl9fUFlDQX4xfF9fcHljYWNoZV9fIildKQotICAgICAgICBmbGFncyA9IDI1NiBpZiBXaW42NCBlbHNlIDAKLSAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkNvbXBvbmVudCIsCi0gICAgICAgICAgICAgICAgWyhkaXJlY3RvcnksIGdlbl91dWlkKCksIGRpcmVjdG9yeSwgZmxhZ3MsIE5vbmUsIE5vbmUpXSkKLSAgICAgICAgYWRkX2RhdGEoc2VsZi5kYiwgIkZlYXR1cmVDb21wb25lbnRzIiwgWyhjdXJyZW50X2ZlYXR1cmUuaWQsIGRpcmVjdG9yeSldKQotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiQ3JlYXRlRm9sZGVyIiwgWyhkaXJlY3RvcnksIGRpcmVjdG9yeSldKQotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiUmVtb3ZlRmlsZSIsCi0gICAgICAgICAgICAgICAgIFsoc2VsZi5jb21wb25lbnQsIHNlbGYuY29tcG9uZW50LCAiKi4qIiwgZGlyZWN0b3J5LCAyKSwKLSAgICAgICAgICAgICAgICAgXSkKLQotICAgIGRlZiByZW1vdmVmaWxlKHNlbGYsIGtleSwgcGF0dGVybik6Ci0gICAgICAgICJBZGQgYSBSZW1vdmVGaWxlIGVudHJ5IgotICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiUmVtb3ZlRmlsZSIsIFsoc2VsZi5jb21wb25lbnQra2V5LCBzZWxmLmNvbXBvbmVudCwgcGF0dGVybiwgc2VsZi5sb2dpY2FsLCAyKV0pCi0KLQotY2xhc3MgRmVhdHVyZToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGIsIGlkLCB0aXRsZSwgZGVzYywgZGlzcGxheSwgbGV2ZWwgPSAxLAotICAgICAgICAgICAgICAgICBwYXJlbnQ9Tm9uZSwgZGlyZWN0b3J5ID0gTm9uZSwgYXR0cmlidXRlcz0wKToKLSAgICAgICAgc2VsZi5pZCA9IGlkCi0gICAgICAgIGlmIHBhcmVudDoKLSAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5pZAotICAgICAgICBhZGRfZGF0YShkYiwgIkZlYXR1cmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgWyhpZCwgcGFyZW50LCB0aXRsZSwgZGVzYywgZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwsIGRpcmVjdG9yeSwgYXR0cmlidXRlcyldKQotICAgIGRlZiBzZXRfY3VycmVudChzZWxmKToKLSAgICAgICAgZ2xvYmFsIGN1cnJlbnRfZmVhdHVyZQotICAgICAgICBjdXJyZW50X2ZlYXR1cmUgPSBzZWxmCi0KLWNsYXNzIENvbnRyb2w6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRsZywgbmFtZSk6Ci0gICAgICAgIHNlbGYuZGxnID0gZGxnCi0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLQotICAgIGRlZiBldmVudChzZWxmLCBldiwgYXJnLCBjb25kID0gIjEiLCBvcmRlciA9IE5vbmUpOgotICAgICAgICBhZGRfZGF0YShzZWxmLmRsZy5kYiwgIkNvbnRyb2xFdmVudCIsCi0gICAgICAgICAgICAgICAgIFsoc2VsZi5kbGcubmFtZSwgc2VsZi5uYW1lLCBldiwgYXJnLCBjb25kLCBvcmRlcildKQotCi0gICAgZGVmIG1hcHBpbmcoc2VsZiwgZXYsIGF0dHIpOgotICAgICAgICBhZGRfZGF0YShzZWxmLmRsZy5kYiwgIkV2ZW50TWFwcGluZyIsCi0gICAgICAgICAgICAgICAgIFsoc2VsZi5kbGcubmFtZSwgc2VsZi5uYW1lLCBldiwgYXR0cildKQotCi0gICAgZGVmIGNvbmRpdGlvbihzZWxmLCBhY3Rpb24sIGNvbmRpdGlvbik6Ci0gICAgICAgIGFkZF9kYXRhKHNlbGYuZGxnLmRiLCAiQ29udHJvbENvbmRpdGlvbiIsCi0gICAgICAgICAgICAgICAgIFsoc2VsZi5kbGcubmFtZSwgc2VsZi5uYW1lLCBhY3Rpb24sIGNvbmRpdGlvbildKQotCi1jbGFzcyBSYWRpb0J1dHRvbkdyb3VwKENvbnRyb2wpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkbGcsIG5hbWUsIHByb3BlcnR5KToKLSAgICAgICAgc2VsZi5kbGcgPSBkbGcKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLnByb3BlcnR5ID0gcHJvcGVydHkKLSAgICAgICAgc2VsZi5pbmRleCA9IDEKLQotICAgIGRlZiBhZGQoc2VsZiwgbmFtZSwgeCwgeSwgdywgaCwgdGV4dCwgdmFsdWUgPSBOb25lKToKLSAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKLSAgICAgICAgICAgIHZhbHVlID0gbmFtZQotICAgICAgICBhZGRfZGF0YShzZWxmLmRsZy5kYiwgIlJhZGlvQnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgWyhzZWxmLnByb3BlcnR5LCBzZWxmLmluZGV4LCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICB4LCB5LCB3LCBoLCB0ZXh0LCBOb25lKV0pCi0gICAgICAgIHNlbGYuaW5kZXggKz0gMQotCi1jbGFzcyBEaWFsb2c6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRiLCBuYW1lLCB4LCB5LCB3LCBoLCBhdHRyLCB0aXRsZSwgZmlyc3QsIGRlZmF1bHQsIGNhbmNlbCk6Ci0gICAgICAgIHNlbGYuZGIgPSBkYgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYueCwgc2VsZi55LCBzZWxmLncsIHNlbGYuaCA9IHgseSx3LGgKLSAgICAgICAgYWRkX2RhdGEoZGIsICJEaWFsb2ciLCBbKG5hbWUsIHgseSx3LGgsYXR0cix0aXRsZSxmaXJzdCxkZWZhdWx0LGNhbmNlbCldKQotCi0gICAgZGVmIGNvbnRyb2woc2VsZiwgbmFtZSwgdHlwZSwgeCwgeSwgdywgaCwgYXR0ciwgcHJvcCwgdGV4dCwgbmV4dCwgaGVscCk6Ci0gICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJDb250cm9sIiwKLSAgICAgICAgICAgICAgICAgWyhzZWxmLm5hbWUsIG5hbWUsIHR5cGUsIHgsIHksIHcsIGgsIGF0dHIsIHByb3AsIHRleHQsIG5leHQsIGhlbHApXSkKLSAgICAgICAgcmV0dXJuIENvbnRyb2woc2VsZiwgbmFtZSkKLQotICAgIGRlZiB0ZXh0KHNlbGYsIG5hbWUsIHgsIHksIHcsIGgsIGF0dHIsIHRleHQpOgotICAgICAgICByZXR1cm4gc2VsZi5jb250cm9sKG5hbWUsICJUZXh0IiwgeCwgeSwgdywgaCwgYXR0ciwgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIHRleHQsIE5vbmUsIE5vbmUpCi0KLSAgICBkZWYgYml0bWFwKHNlbGYsIG5hbWUsIHgsIHksIHcsIGgsIHRleHQpOgotICAgICAgICByZXR1cm4gc2VsZi5jb250cm9sKG5hbWUsICJCaXRtYXAiLCB4LCB5LCB3LCBoLCAxLCBOb25lLCB0ZXh0LCBOb25lLCBOb25lKQotCi0gICAgZGVmIGxpbmUoc2VsZiwgbmFtZSwgeCwgeSwgdywgaCk6Ci0gICAgICAgIHJldHVybiBzZWxmLmNvbnRyb2wobmFtZSwgIkxpbmUiLCB4LCB5LCB3LCBoLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKQotCi0gICAgZGVmIHB1c2hidXR0b24oc2VsZiwgbmFtZSwgeCwgeSwgdywgaCwgYXR0ciwgdGV4dCwgbmV4dCk6Ci0gICAgICAgIHJldHVybiBzZWxmLmNvbnRyb2wobmFtZSwgIlB1c2hCdXR0b24iLCB4LCB5LCB3LCBoLCBhdHRyLCBOb25lLCB0ZXh0LCBuZXh0LCBOb25lKQotCi0gICAgZGVmIHJhZGlvZ3JvdXAoc2VsZiwgbmFtZSwgeCwgeSwgdywgaCwgYXR0ciwgcHJvcCwgdGV4dCwgbmV4dCk6Ci0gICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJDb250cm9sIiwKLSAgICAgICAgICAgICAgICAgWyhzZWxmLm5hbWUsIG5hbWUsICJSYWRpb0J1dHRvbkdyb3VwIiwKLSAgICAgICAgICAgICAgICAgICB4LCB5LCB3LCBoLCBhdHRyLCBwcm9wLCB0ZXh0LCBuZXh0LCBOb25lKV0pCi0gICAgICAgIHJldHVybiBSYWRpb0J1dHRvbkdyb3VwKHNlbGYsIG5hbWUsIHByb3ApCi0KLSAgICBkZWYgY2hlY2tib3goc2VsZiwgbmFtZSwgeCwgeSwgdywgaCwgYXR0ciwgcHJvcCwgdGV4dCwgbmV4dCk6Ci0gICAgICAgIHJldHVybiBzZWxmLmNvbnRyb2wobmFtZSwgIkNoZWNrQm94IiwgeCwgeSwgdywgaCwgYXR0ciwgcHJvcCwgdGV4dCwgbmV4dCwgTm9uZSkKLQotZGVmIHBlX3R5cGUocGF0aCk6Ci0gICAgaGVhZGVyID0gb3BlbihwYXRoLCAicmIiKS5yZWFkKDEwMDApCi0gICAgIyBvZmZzZXQgb2YgUEUgaGVhZGVyIGlzIGF0IG9mZnNldCAweDNjCi0gICAgcGVfb2Zmc2V0ID0gc3RydWN0LnVucGFjaygiPGkiLCBoZWFkZXJbMHgzYzoweDQwXSlbMF0KLSAgICBhc3NlcnQgaGVhZGVyW3BlX29mZnNldDpwZV9vZmZzZXQrNF0gPT0gIlBFXDBcMCIKLSAgICBtYWNoaW5lID0gc3RydWN0LnVucGFjaygiPEgiLCBoZWFkZXJbcGVfb2Zmc2V0KzQ6cGVfb2Zmc2V0KzZdKVswXQotICAgIHJldHVybiBtYWNoaW5lCi0KLWRlZiBzZXRfYXJjaF9mcm9tX2ZpbGUocGF0aCk6Ci0gICAgZ2xvYmFsIG1zaV90eXBlLCBXaW42NCwgYXJjaF9leHQKLSAgICBtYWNoaW5lID0gcGVfdHlwZShwYXRoKQotICAgIGlmIG1hY2hpbmUgPT0gMHgxNGM6Ci0gICAgICAgICMgaTM4NgotICAgICAgICBtc2lfdHlwZSA9ICJJbnRlbCIKLSAgICAgICAgV2luNjQgPSAwCi0gICAgICAgIGFyY2hfZXh0ID0gJycKLSAgICBlbGlmIG1hY2hpbmUgPT0gMHgyMDA6Ci0gICAgICAgICMgSXRhbml1bQotICAgICAgICBtc2lfdHlwZSA9ICJJbnRlbDY0IgotICAgICAgICBXaW42NCA9IDEKLSAgICAgICAgYXJjaF9leHQgPSAnLmlhNjQnCi0gICAgZWxpZiBtYWNoaW5lID09IDB4ODY2NDoKLSAgICAgICAgIyBBTUQ2NAotICAgICAgICBtc2lfdHlwZSA9ICJ4NjQiCi0gICAgICAgIFdpbjY0ID0gMQotICAgICAgICBhcmNoX2V4dCA9ICcuYW1kNjQnCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIlVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSIKLSAgICBtc2lfdHlwZSArPSAiOzEwMzMiCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpc3VwcG9ydC5jIGIvVG9vbHMvbXNpL21zaXN1cHBvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZkMmVlNC4uMDAwMDAwMAotLS0gYS9Ub29scy9tc2kvbXNpc3VwcG9ydC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotI2luY2x1ZGUgIndpbmRvd3MuaCIKLSNpbmNsdWRlICJtc2lxdWVyeS5oIgotCi0vKiBQcmludCBhIGRlYnVnIG1lc3NhZ2UgdG8gdGhlIGluc3RhbGxlciBsb2cgZmlsZS4KLSAqIFRvIHNlZSB0aGUgZGVidWcgbWVzc2FnZXMsIGluc3RhbGwgd2l0aAotICogbXNpZXhlYyAvaSBweXRob254eS5tc2kgL2wqdiBweXRob24ubG9nCi0gKi8KLXN0YXRpYyBVSU5UIGRlYnVnKE1TSUhBTkRMRSBoSW5zdGFsbCwgTFBDU1RSIG1zZykKLXsKLSAgICBNU0lIQU5ETEUgaFJlYyA9IE1zaUNyZWF0ZVJlY29yZCgxKTsKLSAgICBpZiAoIWhSZWMgfHwgTXNpUmVjb3JkU2V0U3RyaW5nQShoUmVjLCAxLCBtc2cpICE9IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX0lOU1RBTExfRkFJTFVSRTsKLSAgICB9Ci0gICAgTXNpUHJvY2Vzc01lc3NhZ2UoaEluc3RhbGwsIElOU1RBTExNRVNTQUdFX0lORk8sIGhSZWMpOwotICAgIE1zaUNsb3NlSGFuZGxlKGhSZWMpOwotICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOwotfQotCi0vKiBDaGVjayB3aGV0aGVyIHRoZSBUQVJHRVRESVIgZXhpc3RzIGFuZCBpcyBhIGRpcmVjdG9yeS4KLSAqIFNldCBUYXJnZXRFeGlzdHMgYXBwcm9wcmlhdGVseS4KLSAqLwotVUlOVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgX19zdGRjYWxsIENoZWNrRGlyKE1TSUhBTkRMRSBoSW5zdGFsbCkKLXsKLSNkZWZpbmUgUFNJWkUgMTAyNAotICAgIFdDSEFSIHdwYXRoW1BTSVpFXTsKLSAgICBjaGFyIHBhdGhbUFNJWkVdOwotICAgIFVJTlQgcmVzdWx0OwotICAgIERXT1JEIHNpemUgPSBQU0laRTsKLSAgICBEV09SRCBhdHRyaWJ1dGVzOwotCi0KLSAgICByZXN1bHQgPSBNc2lHZXRQcm9wZXJ0eVcoaEluc3RhbGwsIEwiVEFSR0VURElSIiwgd3BhdGgsICZzaXplKTsKLSAgICBpZiAocmVzdWx0ICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgd3BhdGhbc2l6ZV0gPSBMJ1wwJzsKLSAgICBwYXRoW3NpemVdID0gTCdcMCc7Ci0KLSAgICBhdHRyaWJ1dGVzID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHdwYXRoKTsKLSAgICBpZiAoYXR0cmlidXRlcyA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyB8fAotICAgICAgICAhKGF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1zaVNldFByb3BlcnR5QShoSW5zdGFsbCwgIlRhcmdldEV4aXN0cyIsICIwIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE1zaVNldFByb3BlcnR5QShoSW5zdGFsbCwgIlRhcmdldEV4aXN0cyIsICIxIik7Ci0gICAgfQotfQotCi0vKiBVcGRhdGUgdGhlIHN0YXRlIG9mIHRoZSBSRUdJU1RSWS50Y2wgY29tcG9uZW50IGFjY29yZGluZyB0byB0aGUKLSAqIEV4dGVuc2lvbiBhbmQgVGNsVGsgZmVhdHVyZXMuIFJFR0lTVFJZLnRjbCBtdXN0IGJlIGluc3RhbGxlZAotICogaWYgYm90aCBmZWF0dXJlcyBhcmUgaW5zdGFsbGVkLCBhbmQgbXVzdCBiZSBhYnNlbnQgb3RoZXJ3aXNlLgotICovCi1VSU5UIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBfX3N0ZGNhbGwgVXBkYXRlRWRpdElETEUoTVNJSEFORExFIGhJbnN0YWxsKQotewotICAgIElOU1RBTExTVEFURSBleHRfb2xkLCBleHRfbmV3LCB0Y2xfb2xkLCB0Y2xfbmV3LCByZWdfbmV3OwotICAgIFVJTlQgcmVzdWx0OwotCi0gICAgcmVzdWx0ID0gTXNpR2V0RmVhdHVyZVN0YXRlQShoSW5zdGFsbCwgIkV4dGVuc2lvbnMiLCAmZXh0X29sZCwgJmV4dF9uZXcpOwotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXN1bHQgPSBNc2lHZXRGZWF0dXJlU3RhdGVBKGhJbnN0YWxsLCAiVGNsVGsiLCAmdGNsX29sZCwgJnRjbF9uZXcpOwotICAgIGlmIChyZXN1bHQgIT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8qIElmIHRoZSBjdXJyZW50IHN0YXRlIGlzIEFic2VudCwgYW5kIHRoZSB1c2VyIGRpZCBub3Qgc2VsZWN0Ci0gICAgICAgdGhlIGZlYXR1cmUgaW4gdGhlIFVJLCBJbnN0YWxsZXIgYXBwYXJlbnRseSBzZXRzIHRoZSAic2VsZWN0ZWQiCi0gICAgICAgc3RhdGUgdG8gdW5rbm93bi4gVXBkYXRlIGl0IHRvIHRoZSBjdXJyZW50IHZhbHVlLCB0aGVuLiAqLwotICAgIGlmIChleHRfbmV3ID09IElOU1RBTExTVEFURV9VTktOT1dOKQotICAgICAgICBleHRfbmV3ID0gZXh0X29sZDsKLSAgICBpZiAodGNsX25ldyA9PSBJTlNUQUxMU1RBVEVfVU5LTk9XTikKLSAgICAgICAgdGNsX25ldyA9IHRjbF9vbGQ7Ci0KLSAgICAvLyBYWFggY29uc2lkZXIgY3VycmVudCBzdGF0ZSBvZiBSRUdJU1RSWS50Y2w/Ci0gICAgaWYgKCgodGNsX25ldyA9PSBJTlNUQUxMU1RBVEVfTE9DQUwpIHx8Ci0gICAgICAgICAgICAgKHRjbF9uZXcgPT0gSU5TVEFMTFNUQVRFX1NPVVJDRSkgfHwKLSAgICAgICAgICAgICAodGNsX25ldyA9PSBJTlNUQUxMU1RBVEVfREVGQVVMVCkpICYmCi0gICAgICAgICgoZXh0X25ldyA9PSBJTlNUQUxMU1RBVEVfTE9DQUwpIHx8Ci0gICAgICAgICAoZXh0X25ldyA9PSBJTlNUQUxMU1RBVEVfU09VUkNFKSB8fAotICAgICAgICAgKGV4dF9uZXcgPT0gSU5TVEFMTFNUQVRFX0RFRkFVTFQpKSkgewotICAgICAgICByZWdfbmV3ID0gSU5TVEFMTFNUQVRFX1NPVVJDRTsKLSAgICB9IGVsc2UgewotICAgICAgICByZWdfbmV3ID0gSU5TVEFMTFNUQVRFX0FCU0VOVDsKLSAgICB9Ci0gICAgcmVzdWx0ID0gTXNpU2V0Q29tcG9uZW50U3RhdGVBKGhJbnN0YWxsLCAiUkVHSVNUUlkudGNsIiwgcmVnX25ldyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQk9PTCBBUElFTlRSWSBEbGxNYWluKEhBTkRMRSBoTW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgIERXT1JEICB1bF9yZWFzb25fZm9yX2NhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIGxwUmVzZXJ2ZWQpCi17Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9tc2lzdXBwb3J0Lm1hayBiL1Rvb2xzL21zaS9tc2lzdXBwb3J0Lm1hawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwNWRiZS4uMDAwMDAwMAotLS0gYS9Ub29scy9tc2kvbXNpc3VwcG9ydC5tYWsKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSMgL09QVDogUkVGIGFuZCBJQ0YgYXJlIGFkZGVkIGJ5IFZTLk5FVCBieSBkZWZhdWx0Ci1tc2lzdXBwb3J0LmRsbDoJbXNpc3VwcG9ydC5vYmoKLQlsaW5rLmV4ZSAvT1VUOm1zaXN1cHBvcnQuZGxsIC9JTkNSRU1FTlRBTDpOTyAvTk9MT0dPIC9ETEwgL1NVQlNZU1RFTTpXSU5ET1dTIC9PUFQ6UkVGIC9PUFQ6SUNGIG1zaXN1cHBvcnQub2JqIG1zaS5saWIga2VybmVsMzIubGliCi0KLSMgV2UgcmVxdWVzdCBhIHN0YXRpYyBDUlQsIHNvIHRoYXQgdGhlcmUgd2lsbCBiZSBubyBDUlQgZGVwZW5kZW5jaWVzCi0jIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gV2UgY2Fubm90IGRvIHdpdGhvdXQgYSBDUlQsIHNpbmNlIGl0IHByb3ZpZGVzCi0jIHRoZSBETEwgZW50cnkgcG9pbnQuCi1tc2lzdXBwb3J0Lm9iajoJbXNpc3VwcG9ydC5jCi0JY2wgL08yIC9EIFdJTjMyIC9EIE5ERUJVRyAvRCBfV0lORE9XUyAvTVQgL1czIC9jIG1zaXN1cHBvcnQuYwpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3BhdGgvcGF0aC53aXhwcm9qIGIvVG9vbHMvbXNpL3BhdGgvcGF0aC53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OTJlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvcGF0aC9wYXRoLndpeHByb2oKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+ezkxQzk5Mjk4LThFMkUtNDQyMi1BNUFGLUNDNEZGRjlBNThEM308L1Byb2plY3RHdWlkPgorICAgICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+CisgICAgICAgIDxPdXRwdXROYW1lPnBhdGg8L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRUeXBlPlBhY2thZ2U8L091dHB1dFR5cGU+CisgICAgICAgIDxTdXBwcmVzc0ljZXM+SUNFNzE8L1N1cHByZXNzSWNlcz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iKi53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEVtYmVkZGVkUmVzb3VyY2UgSW5jbHVkZT0iKi53eGwiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvcGF0aC9wYXRoLnd4cyBiL1Rvb2xzL21zaS9wYXRoL3BhdGgud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMzc5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvcGF0aC9wYXRoLnd4cwpAQCAtMCwwICsxLDM5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPFByb2R1Y3QgSWQ9IioiIExhbmd1YWdlPSIhKGxvYy5MQ0lEKSIgTmFtZT0iIShsb2MuVGl0bGUpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlJFR0lTVFJZS0VZIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IkRlZmF1bHRGZWF0dXJlIiBBbGxvd0FkdmVydGlzZT0ibm8iIFRpdGxlPSIhKGxvYy5UaXRsZSkiIERlc2NyaXB0aW9uPSIhKGxvYy5EZXNjcmlwdGlvbikiPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iUHJlcGVuZFBhdGhfQ1UiIERpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPENvbmRpdGlvbj5OT1QgQUxMVVNFUlM9MTwvQ29uZGl0aW9uPgorICAgICAgICAgICAgICAgIDxSZWdpc3RyeUtleSBSb290PSJIS0NVIiBLZXk9IltSRUdJU1RSWUtFWV0iPgorICAgICAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBLZXlQYXRoPSJ5ZXMiIEtleT0iSW5zdGFsbGVkRmVhdHVyZXMiIE5hbWU9IiQodmFyLk9wdGlvbmFsRmVhdHVyZU5hbWUpIiBWYWx1ZT0iJCh2YXIuVmVyc2lvbikiIFR5cGU9InN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICA8L1JlZ2lzdHJ5S2V5PgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxDcmVhdGVGb2xkZXIgRGlyZWN0b3J5PSJTY3JpcHRzIiAvPgorICAgICAgICAgICAgICAgIDxSZW1vdmVGb2xkZXIgSWQ9IlJlbW92ZV9TY3JpcHRzX0NVIiBEaXJlY3Rvcnk9IlNjcmlwdHMiIE9uPSJ1bmluc3RhbGwiIC8+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPEVudmlyb25tZW50IElkPSJQQVRIX0NVIiBBY3Rpb249InNldCIgTmFtZT0iUEFUSCIgUGFydD0iZmlyc3QiIFZhbHVlPSJbSW5zdGFsbERpcmVjdG9yeV0iIC8+CisgICAgICAgICAgICAgICAgPEVudmlyb25tZW50IElkPSJTQ1JJUFRTX1BBVEhfQ1UiIEFjdGlvbj0ic2V0IiBOYW1lPSJQQVRIIiBQYXJ0PSJmaXJzdCIgVmFsdWU9IltTY3JpcHRzXSIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iUHJlcGVuZFBhdGhfTE0iIERpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPENvbmRpdGlvbj5BTExVU0VSUz0xPC9Db25kaXRpb24+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5S2V5IFJvb3Q9IkhLTE0iIEtleT0iW1JFR0lTVFJZS0VZXSI+CisgICAgICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIEtleVBhdGg9InllcyIgS2V5PSJJbnN0YWxsZWRGZWF0dXJlcyIgTmFtZT0iJCh2YXIuT3B0aW9uYWxGZWF0dXJlTmFtZSkiIFZhbHVlPSIkKHZhci5WZXJzaW9uKSIgVHlwZT0ic3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIDwvUmVnaXN0cnlLZXk+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPENyZWF0ZUZvbGRlciBEaXJlY3Rvcnk9IlNjcmlwdHMiIC8+CisgICAgICAgICAgICAgICAgPFJlbW92ZUZvbGRlciBJZD0iUmVtb3ZlX1NjcmlwdHNfTE0iIERpcmVjdG9yeT0iU2NyaXB0cyIgT249InVuaW5zdGFsbCIgLz4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8RW52aXJvbm1lbnQgSWQ9IlBBVEhfTE0iIEFjdGlvbj0ic2V0IiBOYW1lPSJQQVRIIiBQYXJ0PSJmaXJzdCIgVmFsdWU9IltJbnN0YWxsRGlyZWN0b3J5XSIgU3lzdGVtPSJ5ZXMiIC8+CisgICAgICAgICAgICAgICAgPEVudmlyb25tZW50IElkPSJTQ1JJUFRTX1BBVEhfTE0iIEFjdGlvbj0ic2V0IiBOYW1lPSJQQVRIIiBQYXJ0PSJmaXJzdCIgVmFsdWU9IltTY3JpcHRzXSIgU3lzdGVtPSJ5ZXMiIC8+CisgICAgICAgICAgICAgICAgPEVudmlyb25tZW50IElkPSJQWV9QQVRIRVhUX0xNIiBBY3Rpb249InNldCIgTmFtZT0iUEFUSEVYVCIgUGFydD0ibGFzdCIgVmFsdWU9Ii5QWSIgU3lzdGVtPSJ5ZXMiIC8+CisgICAgICAgICAgICAgICAgPEVudmlyb25tZW50IElkPSJQWVdfUEFUSEVYVF9MTSIgQWN0aW9uPSJzZXQiIE5hbWU9IlBBVEhFWFQiIFBhcnQ9Imxhc3QiIFZhbHVlPSIuUFlXIiBTeXN0ZW09InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CisKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9wYXRoL3BhdGhfZW4tVVMud3hsIGIvVG9vbHMvbXNpL3BhdGgvcGF0aF9lbi1VUy53eGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhNzg4NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9wYXRoL3BhdGhfZW4tVVMud3hsCkBAIC0wLDAgKzEsNiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxXaXhMb2NhbGl6YXRpb24gQ3VsdHVyZT0iZW4tdXMiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L2xvY2FsaXphdGlvbiI+CisgICAgPFN0cmluZyBJZD0iRGVzY3JpcHRvciI+QWRkIHRvIFBhdGg8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJTaG9ydERlc2NyaXB0b3IiPlBhdGg8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJOb1B5dGhvbiI+Tm8gIShsb2MuUHJvZHVjdE5hbWUpIGluc3RhbGxhdGlvbiB3YXMgZGV0ZWN0ZWQuPC9TdHJpbmc+Cis8L1dpeExvY2FsaXphdGlvbj4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9waXAvcGlwLndpeHByb2ogYi9Ub29scy9tc2kvcGlwL3BpcC53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOGMwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvcGlwL3BpcC53aXhwcm9qCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPFByb2plY3RHdWlkPns5MUM5OTI5OC04RTJFLTQ0MjItQTVBRi1DQzRGRkY5QTU4RDN9PC9Qcm9qZWN0R3VpZD4KKyAgICAgICAgPFNjaGVtYVZlcnNpb24+Mi4wPC9TY2hlbWFWZXJzaW9uPgorICAgICAgICA8T3V0cHV0TmFtZT5waXA8L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRUeXBlPlBhY2thZ2U8L091dHB1dFR5cGU+CisgICAgICAgIDxTdXBwcmVzc0ljZXM+SUNFNzE8L1N1cHByZXNzSWNlcz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0iKi53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEVtYmVkZGVkUmVzb3VyY2UgSW5jbHVkZT0iKi53eGwiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvcGlwL3BpcC53eHMgYi9Ub29scy9tc2kvcGlwL3BpcC53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllOWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9waXAvcGlwLnd4cwpAQCAtMCwwICsxLDM5IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPFByb2R1Y3QgSWQ9IioiIExhbmd1YWdlPSIhKGxvYy5MQ0lEKSIgTmFtZT0iIShsb2MuVGl0bGUpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlJFR0lTVFJZS0VZIiAvPgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5IElkPSJQWVRIT05fRVhFIiBTZWN1cmU9InllcyI+CisgICAgICAgICAgICA8Q29tcG9uZW50U2VhcmNoIElkPSJQeXRob25FeGUiIEd1aWQ9IiQodmFyLlB5dGhvbkV4ZUNvbXBvbmVudEd1aWQpIj4KKyAgICAgICAgICAgICAgICA8RmlsZVNlYXJjaCBOYW1lPSJweXRob24uZXhlIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnRTZWFyY2g+CisgICAgICAgIDwvUHJvcGVydHk+CisKKyAgICAgICAgPENvbmRpdGlvbiBNZXNzYWdlPSIhKGxvYy5Ob1B5dGhvbikiPlBZVEhPTl9FWEU8L0NvbmRpdGlvbj4KKyAgICAgICAgCisgICAgICAgIDxGZWF0dXJlIElkPSJEZWZhdWx0RmVhdHVyZSIgQWxsb3dBZHZlcnRpc2U9Im5vIiBUaXRsZT0iIShsb2MuVGl0bGUpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb24pIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRSZWYgSWQ9Ik9wdGlvbmFsRmVhdHVyZSIgLz4KKyAgICAgICAgPC9GZWF0dXJlPgorICAgICAgICAKKyAgICAgICAgPD9pZiAkKHZhci5QbGF0Zm9ybSl+PSJ4NjQiID8+CisgICAgICAgIDxDdXN0b21BY3Rpb24gSWQ9IlVwZGF0ZVBpcCIgQmluYXJ5S2V5PSJXaXhDQSIgRGxsRW50cnk9IkNBUXVpZXRFeGVjNjQiIEV4ZWN1dGU9ImRlZmVycmVkIiBSZXR1cm49Imlnbm9yZSIvPgorICAgICAgICA8P2Vsc2UgPz4KKyAgICAgICAgPEN1c3RvbUFjdGlvbiBJZD0iVXBkYXRlUGlwIiBCaW5hcnlLZXk9IldpeENBIiBEbGxFbnRyeT0iQ0FRdWlldEV4ZWMiIEV4ZWN1dGU9ImRlZmVycmVkIiBSZXR1cm49Imlnbm9yZSIvPgorICAgICAgICA8P2VuZGlmID8+CisgICAgICAgIAorICAgICAgICA8IS0tIEluc3RhbGwvdW5pbnN0YWxsIHBpcCAtLT4KKyAgICAgICAgPEN1c3RvbUFjdGlvbiBJZD0iU2V0VXBkYXRlUGlwQ29tbWFuZExpbmUiIFByb3BlcnR5PSJVcGRhdGVQaXAiIFZhbHVlPSciW1BZVEhPTl9FWEVdIiAtRSAtcyAtbSBlbnN1cmVwaXAgLVUgLS1kZWZhdWx0LXBpcCcgRXhlY3V0ZT0iaW1tZWRpYXRlIiAvPgorICAgICAgICA8Q3VzdG9tQWN0aW9uIElkPSJTZXRSZW1vdmVQaXBDb21tYW5kTGluZSIgUHJvcGVydHk9IlVwZGF0ZVBpcCIgVmFsdWU9JyJbUFlUSE9OX0VYRV0iIC1FIC1zIC1CIC1tIGVuc3VyZXBpcC5fdW5pbnN0YWxsJyBFeGVjdXRlPSJpbW1lZGlhdGUiIC8+CisgICAgICAgIAorICAgICAgICA8SW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZT4KKyAgICAgICAgICAgIDxDdXN0b20gQWN0aW9uPSJTZXRVcGRhdGVQaXBDb21tYW5kTGluZSIgQmVmb3JlPSJVcGRhdGVQaXAiPigmYW1wO0RlZmF1bHRGZWF0dXJlPTMpIEFORCBOT1QgKCFEZWZhdWx0RmVhdHVyZT0zKTwvQ3VzdG9tPgorICAgICAgICAgICAgPEN1c3RvbSBBY3Rpb249IlNldFJlbW92ZVBpcENvbW1hbmRMaW5lIiBCZWZvcmU9IlVwZGF0ZVBpcCI+KCZhbXA7RGVmYXVsdEZlYXR1cmU9MikgQU5EICghRGVmYXVsdEZlYXR1cmU9Myk8L0N1c3RvbT4KKworICAgICAgICAgICAgPEN1c3RvbSBBY3Rpb249IlVwZGF0ZVBpcCIgQmVmb3JlPSJJbnN0YWxsRmluYWxpemUiPlVwZGF0ZVBpcDwvQ3VzdG9tPgorICAgICAgICA8L0luc3RhbGxFeGVjdXRlU2VxdWVuY2U+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CisKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9waXAvcGlwX2VuLVVTLnd4bCBiL1Rvb2xzL21zaS9waXAvcGlwX2VuLVVTLnd4bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDBkOWVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3BpcC9waXBfZW4tVVMud3hsCkBAIC0wLDAgKzEsNiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxXaXhMb2NhbGl6YXRpb24gQ3VsdHVyZT0iZW4tdXMiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L2xvY2FsaXphdGlvbiI+CisgICAgPFN0cmluZyBJZD0iRGVzY3JpcHRvciI+cGlwIEJvb3RzdHJhcDwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IlNob3J0RGVzY3JpcHRvciI+cGlwPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iTm9QeXRob24iPk5vICEobG9jLlByb2R1Y3ROYW1lKSBpbnN0YWxsYXRpb24gd2FzIGRldGVjdGVkLjwvU3RyaW5nPgorPC9XaXhMb2NhbGl6YXRpb24+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvcHVyZ2UucHkgYi9Ub29scy9tc2kvcHVyZ2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkYmM0OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS9wdXJnZS5weQpAQCAtMCwwICsxLDc0IEBACisjIFB1cmdlcyB0aGUgRmFzdGx5IGNhY2hlIGZvciBXaW5kb3dzIGRvd25sb2FkIGZpbGVzCisjCisjIFVzYWdlOgorIyAgIHB5IC0zIHB1cmdlLnB5IDMuNS4xcmMxCisjCisKK19fYXV0aG9yX18gPSAnU3RldmUgRG93ZXIgPHN0ZXZlLmRvd2VyQHB5dGhvbi5vcmc+JworX192ZXJzaW9uX18gPSAnMS4wLjAnCisKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCAqCisKK1ZFUlNJT05fUkUgPSByZS5jb21waWxlKHInKFxkK1wuXGQrXC5cZCspKFx3K1xkKyk/JCcpCisKK3RyeToKKyAgICBtID0gVkVSU0lPTl9SRS5tYXRjaChzeXMuYXJndlsxXSkKKyAgICBpZiBub3QgbToKKyAgICAgICAgcHJpbnQoJ0ludmFsaWQgdmVyc2lvbjonLCBzeXMuYXJndlsxXSkKKyAgICAgICAgcHJpbnQoJ0V4cGVjdGVkIHNvbWV0aGluZyBsaWtlICIzLjUuMXJjMSInKQorICAgICAgICBzeXMuZXhpdCgxKQorZXhjZXB0IExvb2t1cEVycm9yOgorICAgIHByaW50KCdNaXNzaW5nIHZlcnNpb24gYXJndW1lbnQuIEV4cGVjdGVkIHNvbWV0aGluZyBsaWtlICIzLjUuMXJjMSInKQorICAgIHN5cy5leGl0KDEpCisKK1VSTCA9ICJodHRwczovL3d3dy5weXRob24ub3JnL2Z0cC9weXRob24ve30vIi5mb3JtYXQobS5ncm91cCgxKSkKKworCitGSUxFUyA9IFsKKyAgICAiY29yZS5tc2kiLAorICAgICJjb3JlX2QubXNpIiwKKyAgICAiY29yZV9wZGIubXNpIiwKKyAgICAiZGV2Lm1zaSIsCisgICAgImRldl9kLm1zaSIsCisgICAgImRvYy5tc2kiLAorICAgICJleGUubXNpIiwKKyAgICAiZXhlX2QubXNpIiwKKyAgICAiZXhlX3BkYi5tc2kiLAorICAgICJsYXVuY2hlci5tc2kiLAorICAgICJsaWIubXNpIiwKKyAgICAibGliX2QubXNpIiwKKyAgICAibGliX3BkYi5tc2kiLAorICAgICJwYXRoLm1zaSIsCisgICAgInBpcC5tc2kiLAorICAgICJ0Y2x0ay5tc2kiLAorICAgICJ0Y2x0a19kLm1zaSIsCisgICAgInRjbHRrX3BkYi5tc2kiLAorICAgICJ0ZXN0Lm1zaSIsCisgICAgInRlc3RfZC5tc2kiLAorICAgICJ0ZXN0X3BkYi5tc2kiLAorICAgICJ0b29scy5tc2kiLAorICAgICJXaW5kb3dzNi4wLUtCMjk5OTIyNi14NjQubXN1IiwKKyAgICAiV2luZG93czYuMC1LQjI5OTkyMjYteDg2Lm1zdSIsCisgICAgIldpbmRvd3M2LjEtS0IyOTk5MjI2LXg2NC5tc3UiLAorICAgICJXaW5kb3dzNi4xLUtCMjk5OTIyNi14ODYubXN1IiwKKyAgICAiV2luZG93czguMS1LQjI5OTkyMjYteDY0Lm1zdSIsCisgICAgIldpbmRvd3M4LjEtS0IyOTk5MjI2LXg4Ni5tc3UiLAorICAgICJXaW5kb3dzOC1SVC1LQjI5OTkyMjYteDY0Lm1zdSIsCisgICAgIldpbmRvd3M4LVJULUtCMjk5OTIyNi14ODYubXN1IiwKK10KK1BBVEhTID0gWworICAgICJweXRob24te30uZXhlIi5mb3JtYXQobS5ncm91cCgwKSksCisgICAgInB5dGhvbi17fS13ZWJpbnN0YWxsLmV4ZSIuZm9ybWF0KG0uZ3JvdXAoMCkpLAorICAgICJweXRob24te30tYW1kNjQuZXhlIi5mb3JtYXQobS5ncm91cCgwKSksCisgICAgInB5dGhvbi17fS1hbWQ2NC13ZWJpbnN0YWxsLmV4ZSIuZm9ybWF0KG0uZ3JvdXAoMCkpLAorXSArIFsid2luMzJ7fS97fSIuZm9ybWF0KG0uZ3JvdXAoMiksIGYpIGZvciBmIGluIEZJTEVTXSArIFsiYW1kNjR7fS97fSIuZm9ybWF0KG0uZ3JvdXAoMiksIGYpIGZvciBmIGluIEZJTEVTXQorCitwcmludCgnUHVyZ2VkOicpCitmb3IgbiBpbiBQQVRIUzoKKyAgICB1ID0gVVJMICsgbgorICAgIHdpdGggdXJsb3BlbihSZXF1ZXN0KHUsIG1ldGhvZD0nUFVSR0UnLCBoZWFkZXJzPXsnRmFzdGx5LVNvZnQtUHVyZ2UnOiAxfSkpIGFzIHI6CisgICAgICAgIHIucmVhZCgpCisgICAgcHJpbnQoJyAgJywgdSkKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9zY2hlbWEucHkgYi9Ub29scy9tc2kvc2NoZW1hLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjcyZTVhLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21zaS9zY2hlbWEucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDA3ICswLDAgQEAKLWZyb20gbXNpbGliIGltcG9ydCBUYWJsZQotCi1fVmFsaWRhdGlvbiA9IFRhYmxlKCdfVmFsaWRhdGlvbicpCi1fVmFsaWRhdGlvbi5hZGRfZmllbGQoMSwnVGFibGUnLDExNTUyKQotX1ZhbGlkYXRpb24uYWRkX2ZpZWxkKDIsJ0NvbHVtbicsMTE1NTIpCi1fVmFsaWRhdGlvbi5hZGRfZmllbGQoMywnTnVsbGFibGUnLDMzMzIpCi1fVmFsaWRhdGlvbi5hZGRfZmllbGQoNCwnTWluVmFsdWUnLDQzNTYpCi1fVmFsaWRhdGlvbi5hZGRfZmllbGQoNSwnTWF4VmFsdWUnLDQzNTYpCi1fVmFsaWRhdGlvbi5hZGRfZmllbGQoNiwnS2V5VGFibGUnLDc2NzkpCi1fVmFsaWRhdGlvbi5hZGRfZmllbGQoNywnS2V5Q29sdW1uJyw1Mzc4KQotX1ZhbGlkYXRpb24uYWRkX2ZpZWxkKDgsJ0NhdGVnb3J5Jyw3NDU2KQotX1ZhbGlkYXRpb24uYWRkX2ZpZWxkKDksJ1NldCcsNzY3OSkKLV9WYWxpZGF0aW9uLmFkZF9maWVsZCgxMCwnRGVzY3JpcHRpb24nLDc2NzkpCi0KLUFjdGlvblRleHQgPSBUYWJsZSgnQWN0aW9uVGV4dCcpCi1BY3Rpb25UZXh0LmFkZF9maWVsZCgxLCdBY3Rpb24nLDExNTkyKQotQWN0aW9uVGV4dC5hZGRfZmllbGQoMiwnRGVzY3JpcHRpb24nLDc5MzYpCi1BY3Rpb25UZXh0LmFkZF9maWVsZCgzLCdUZW1wbGF0ZScsNzkzNikKLQotQWRtaW5FeGVjdXRlU2VxdWVuY2UgPSBUYWJsZSgnQWRtaW5FeGVjdXRlU2VxdWVuY2UnKQotQWRtaW5FeGVjdXRlU2VxdWVuY2UuYWRkX2ZpZWxkKDEsJ0FjdGlvbicsMHgyREZGKQotQWRtaW5FeGVjdXRlU2VxdWVuY2UuYWRkX2ZpZWxkKDIsJ0NvbmRpdGlvbicsNzY3OSkKLUFkbWluRXhlY3V0ZVNlcXVlbmNlLmFkZF9maWVsZCgzLCdTZXF1ZW5jZScsNTM3OCkKLQotQ29uZGl0aW9uID0gVGFibGUoJ0NvbmRpdGlvbicpCi1Db25kaXRpb24uYWRkX2ZpZWxkKDEsJ0ZlYXR1cmVfJywxMTU1OCkKLUNvbmRpdGlvbi5hZGRfZmllbGQoMiwnTGV2ZWwnLDk0NzQpCi1Db25kaXRpb24uYWRkX2ZpZWxkKDMsJ0NvbmRpdGlvbicsNzY3OSkKLQotQWRtaW5VSVNlcXVlbmNlID0gVGFibGUoJ0FkbWluVUlTZXF1ZW5jZScpCi1BZG1pblVJU2VxdWVuY2UuYWRkX2ZpZWxkKDEsJ0FjdGlvbicsMHgyREZGKQotQWRtaW5VSVNlcXVlbmNlLmFkZF9maWVsZCgyLCdDb25kaXRpb24nLDc2NzkpCi1BZG1pblVJU2VxdWVuY2UuYWRkX2ZpZWxkKDMsJ1NlcXVlbmNlJyw1Mzc4KQotCi1BZHZ0RXhlY3V0ZVNlcXVlbmNlID0gVGFibGUoJ0FkdnRFeGVjdXRlU2VxdWVuY2UnKQotQWR2dEV4ZWN1dGVTZXF1ZW5jZS5hZGRfZmllbGQoMSwnQWN0aW9uJywweDJERkYpCi1BZHZ0RXhlY3V0ZVNlcXVlbmNlLmFkZF9maWVsZCgyLCdDb25kaXRpb24nLDc2NzkpCi1BZHZ0RXhlY3V0ZVNlcXVlbmNlLmFkZF9maWVsZCgzLCdTZXF1ZW5jZScsNTM3OCkKLQotQWR2dFVJU2VxdWVuY2UgPSBUYWJsZSgnQWR2dFVJU2VxdWVuY2UnKQotQWR2dFVJU2VxdWVuY2UuYWRkX2ZpZWxkKDEsJ0FjdGlvbicsMTE1OTIpCi1BZHZ0VUlTZXF1ZW5jZS5hZGRfZmllbGQoMiwnQ29uZGl0aW9uJyw3Njc5KQotQWR2dFVJU2VxdWVuY2UuYWRkX2ZpZWxkKDMsJ1NlcXVlbmNlJyw1Mzc4KQotCi1BcHBJZCA9IFRhYmxlKCdBcHBJZCcpCi1BcHBJZC5hZGRfZmllbGQoMSwnQXBwSWQnLDExNTU4KQotQXBwSWQuYWRkX2ZpZWxkKDIsJ1JlbW90ZVNlcnZlck5hbWUnLDc2NzkpCi1BcHBJZC5hZGRfZmllbGQoMywnTG9jYWxTZXJ2aWNlJyw3Njc5KQotQXBwSWQuYWRkX2ZpZWxkKDQsJ1NlcnZpY2VQYXJhbWV0ZXJzJyw3Njc5KQotQXBwSWQuYWRkX2ZpZWxkKDUsJ0RsbFN1cnJvZ2F0ZScsNzY3OSkKLUFwcElkLmFkZF9maWVsZCg2LCdBY3RpdmF0ZUF0U3RvcmFnZScsNTM3OCkKLUFwcElkLmFkZF9maWVsZCg3LCdSdW5Bc0ludGVyYWN0aXZlVXNlcicsNTM3OCkKLQotQXBwU2VhcmNoID0gVGFibGUoJ0FwcFNlYXJjaCcpCi1BcHBTZWFyY2guYWRkX2ZpZWxkKDEsJ1Byb3BlcnR5JywxMTU5MikKLUFwcFNlYXJjaC5hZGRfZmllbGQoMiwnU2lnbmF0dXJlXycsMTE1OTIpCi0KLVByb3BlcnR5ID0gVGFibGUoJ1Byb3BlcnR5JykKLVByb3BlcnR5LmFkZF9maWVsZCgxLCdQcm9wZXJ0eScsMTE1OTIpCi1Qcm9wZXJ0eS5hZGRfZmllbGQoMiwnVmFsdWUnLDM4NDApCi0KLUJCQ29udHJvbCA9IFRhYmxlKCdCQkNvbnRyb2wnKQotQkJDb250cm9sLmFkZF9maWVsZCgxLCdCaWxsYm9hcmRfJywxMTU3MCkKLUJCQ29udHJvbC5hZGRfZmllbGQoMiwnQkJDb250cm9sJywxMTU3MCkKLUJCQ29udHJvbC5hZGRfZmllbGQoMywnVHlwZScsMzM3OCkKLUJCQ29udHJvbC5hZGRfZmllbGQoNCwnWCcsMTI4MikKLUJCQ29udHJvbC5hZGRfZmllbGQoNSwnWScsMTI4MikKLUJCQ29udHJvbC5hZGRfZmllbGQoNiwnV2lkdGgnLDEyODIpCi1CQkNvbnRyb2wuYWRkX2ZpZWxkKDcsJ0hlaWdodCcsMTI4MikKLUJCQ29udHJvbC5hZGRfZmllbGQoOCwnQXR0cmlidXRlcycsNDM1NikKLUJCQ29udHJvbC5hZGRfZmllbGQoOSwnVGV4dCcsNzk4NikKLQotQmlsbGJvYXJkID0gVGFibGUoJ0JpbGxib2FyZCcpCi1CaWxsYm9hcmQuYWRkX2ZpZWxkKDEsJ0JpbGxib2FyZCcsMTE1NzApCi1CaWxsYm9hcmQuYWRkX2ZpZWxkKDIsJ0ZlYXR1cmVfJywzMzY2KQotQmlsbGJvYXJkLmFkZF9maWVsZCgzLCdBY3Rpb24nLDc0NzQpCi1CaWxsYm9hcmQuYWRkX2ZpZWxkKDQsJ09yZGVyaW5nJyw1Mzc4KQotCi1GZWF0dXJlID0gVGFibGUoJ0ZlYXR1cmUnKQotRmVhdHVyZS5hZGRfZmllbGQoMSwnRmVhdHVyZScsMTE1NTgpCi1GZWF0dXJlLmFkZF9maWVsZCgyLCdGZWF0dXJlX1BhcmVudCcsNzQ2MikKLUZlYXR1cmUuYWRkX2ZpZWxkKDMsJ1RpdGxlJyw4MDAwKQotRmVhdHVyZS5hZGRfZmllbGQoNCwnRGVzY3JpcHRpb24nLDgxOTEpCi1GZWF0dXJlLmFkZF9maWVsZCg1LCdEaXNwbGF5Jyw1Mzc4KQotRmVhdHVyZS5hZGRfZmllbGQoNiwnTGV2ZWwnLDEyODIpCi1GZWF0dXJlLmFkZF9maWVsZCg3LCdEaXJlY3RvcnlfJywweDFERkYpCi1GZWF0dXJlLmFkZF9maWVsZCg4LCdBdHRyaWJ1dGVzJywxMjgyKQotCi1CaW5hcnkgPSBUYWJsZSgnQmluYXJ5JykKLUJpbmFyeS5hZGRfZmllbGQoMSwnTmFtZScsMTE1OTIpCi1CaW5hcnkuYWRkX2ZpZWxkKDIsJ0RhdGEnLDIzMDQpCi0KLUJpbmRJbWFnZSA9IFRhYmxlKCdCaW5kSW1hZ2UnKQotQmluZEltYWdlLmFkZF9maWVsZCgxLCdGaWxlXycsMHgyREZGKQotQmluZEltYWdlLmFkZF9maWVsZCgyLCdQYXRoJyw3Njc5KQotCi1GaWxlID0gVGFibGUoJ0ZpbGUnKQotRmlsZS5hZGRfZmllbGQoMSwnRmlsZScsMHgyREZGKQotRmlsZS5hZGRfZmllbGQoMiwnQ29tcG9uZW50XycsMHhERkYpCi1GaWxlLmFkZF9maWVsZCgzLCdGaWxlTmFtZScsNDA5NSkKLUZpbGUuYWRkX2ZpZWxkKDQsJ0ZpbGVTaXplJywyNjApCi1GaWxlLmFkZF9maWVsZCg1LCdWZXJzaW9uJywweDFERkYpCi1GaWxlLmFkZF9maWVsZCg2LCdMYW5ndWFnZScsNzQ0NCkKLUZpbGUuYWRkX2ZpZWxkKDcsJ0F0dHJpYnV0ZXMnLDUzNzgpCi1GaWxlLmFkZF9maWVsZCg4LCdTZXF1ZW5jZScsMTI4MikKLQotQ0NQU2VhcmNoID0gVGFibGUoJ0NDUFNlYXJjaCcpCi1DQ1BTZWFyY2guYWRkX2ZpZWxkKDEsJ1NpZ25hdHVyZV8nLDExNTkyKQotCi1DaGVja0JveCA9IFRhYmxlKCdDaGVja0JveCcpCi1DaGVja0JveC5hZGRfZmllbGQoMSwnUHJvcGVydHknLDExNTkyKQotQ2hlY2tCb3guYWRkX2ZpZWxkKDIsJ1ZhbHVlJyw3NDg4KQotCi1DbGFzcyA9IFRhYmxlKCdDbGFzcycpCi1DbGFzcy5hZGRfZmllbGQoMSwnQ0xTSUQnLDExNTU4KQotQ2xhc3MuYWRkX2ZpZWxkKDIsJ0NvbnRleHQnLDExNTUyKQotQ2xhc3MuYWRkX2ZpZWxkKDMsJ0NvbXBvbmVudF8nLDB4MkRGRikKLUNsYXNzLmFkZF9maWVsZCg0LCdQcm9nSWRfRGVmYXVsdCcsNzY3OSkKLUNsYXNzLmFkZF9maWVsZCg1LCdEZXNjcmlwdGlvbicsODE5MSkKLUNsYXNzLmFkZF9maWVsZCg2LCdBcHBJZF8nLDc0NjIpCi1DbGFzcy5hZGRfZmllbGQoNywnRmlsZVR5cGVNYXNrJyw3Njc5KQotQ2xhc3MuYWRkX2ZpZWxkKDgsJ0ljb25fJyw3NDk2KQotQ2xhc3MuYWRkX2ZpZWxkKDksJ0ljb25JbmRleCcsNTM3OCkKLUNsYXNzLmFkZF9maWVsZCgxMCwnRGVmSW5wcm9jSGFuZGxlcicsNzQ1NikKLUNsYXNzLmFkZF9maWVsZCgxMSwnQXJndW1lbnQnLDc2NzkpCi1DbGFzcy5hZGRfZmllbGQoMTIsJ0ZlYXR1cmVfJywzMzY2KQotQ2xhc3MuYWRkX2ZpZWxkKDEzLCdBdHRyaWJ1dGVzJyw1Mzc4KQotCi1Db21wb25lbnQgPSBUYWJsZSgnQ29tcG9uZW50JykKLUNvbXBvbmVudC5hZGRfZmllbGQoMSwnQ29tcG9uZW50JywweDJERkYpCi1Db21wb25lbnQuYWRkX2ZpZWxkKDIsJ0NvbXBvbmVudElkJyw3NDYyKQotQ29tcG9uZW50LmFkZF9maWVsZCgzLCdEaXJlY3RvcnlfJywweERGRikKLUNvbXBvbmVudC5hZGRfZmllbGQoNCwnQXR0cmlidXRlcycsMTI4MikKLUNvbXBvbmVudC5hZGRfZmllbGQoNSwnQ29uZGl0aW9uJyw3Njc5KQotQ29tcG9uZW50LmFkZF9maWVsZCg2LCdLZXlQYXRoJywweDFERkYpCi0KLUljb24gPSBUYWJsZSgnSWNvbicpCi1JY29uLmFkZF9maWVsZCgxLCdOYW1lJywxMTU5MikKLUljb24uYWRkX2ZpZWxkKDIsJ0RhdGEnLDIzMDQpCi0KLVByb2dJZCA9IFRhYmxlKCdQcm9nSWQnKQotUHJvZ0lkLmFkZF9maWVsZCgxLCdQcm9nSWQnLDExNzc1KQotUHJvZ0lkLmFkZF9maWVsZCgyLCdQcm9nSWRfUGFyZW50Jyw3Njc5KQotUHJvZ0lkLmFkZF9maWVsZCgzLCdDbGFzc18nLDc0NjIpCi1Qcm9nSWQuYWRkX2ZpZWxkKDQsJ0Rlc2NyaXB0aW9uJyw4MTkxKQotUHJvZ0lkLmFkZF9maWVsZCg1LCdJY29uXycsNzQ5NikKLVByb2dJZC5hZGRfZmllbGQoNiwnSWNvbkluZGV4Jyw1Mzc4KQotCi1Db21ib0JveCA9IFRhYmxlKCdDb21ib0JveCcpCi1Db21ib0JveC5hZGRfZmllbGQoMSwnUHJvcGVydHknLDExNTkyKQotQ29tYm9Cb3guYWRkX2ZpZWxkKDIsJ09yZGVyJyw5NDc0KQotQ29tYm9Cb3guYWRkX2ZpZWxkKDMsJ1ZhbHVlJywzMzkyKQotQ29tYm9Cb3guYWRkX2ZpZWxkKDQsJ1RleHQnLDgwMDApCi0KLUNvbXBMb2NhdG9yID0gVGFibGUoJ0NvbXBMb2NhdG9yJykKLUNvbXBMb2NhdG9yLmFkZF9maWVsZCgxLCdTaWduYXR1cmVfJywxMTU5MikKLUNvbXBMb2NhdG9yLmFkZF9maWVsZCgyLCdDb21wb25lbnRJZCcsMzM2NikKLUNvbXBMb2NhdG9yLmFkZF9maWVsZCgzLCdUeXBlJyw1Mzc4KQotCi1Db21wbHVzID0gVGFibGUoJ0NvbXBsdXMnKQotQ29tcGx1cy5hZGRfZmllbGQoMSwnQ29tcG9uZW50XycsMHgyREZGKQotQ29tcGx1cy5hZGRfZmllbGQoMiwnRXhwVHlwZScsMTM1NzApCi0KLURpcmVjdG9yeSA9IFRhYmxlKCdEaXJlY3RvcnknKQotRGlyZWN0b3J5LmFkZF9maWVsZCgxLCdEaXJlY3RvcnknLDB4MkRGRikKLURpcmVjdG9yeS5hZGRfZmllbGQoMiwnRGlyZWN0b3J5X1BhcmVudCcsMHgxREZGKQotRGlyZWN0b3J5LmFkZF9maWVsZCgzLCdEZWZhdWx0RGlyJyw0MDk1KQotCi1Db250cm9sID0gVGFibGUoJ0NvbnRyb2wnKQotQ29udHJvbC5hZGRfZmllbGQoMSwnRGlhbG9nXycsMTE1OTIpCi1Db250cm9sLmFkZF9maWVsZCgyLCdDb250cm9sJywxMTU3MCkKLUNvbnRyb2wuYWRkX2ZpZWxkKDMsJ1R5cGUnLDMzNDgpCi1Db250cm9sLmFkZF9maWVsZCg0LCdYJywxMjgyKQotQ29udHJvbC5hZGRfZmllbGQoNSwnWScsMTI4MikKLUNvbnRyb2wuYWRkX2ZpZWxkKDYsJ1dpZHRoJywxMjgyKQotQ29udHJvbC5hZGRfZmllbGQoNywnSGVpZ2h0JywxMjgyKQotQ29udHJvbC5hZGRfZmllbGQoOCwnQXR0cmlidXRlcycsNDM1NikKLUNvbnRyb2wuYWRkX2ZpZWxkKDksJ1Byb3BlcnR5Jyw3NDc0KQotQ29udHJvbC5hZGRfZmllbGQoMTAsJ1RleHQnLDc5MzYpCi1Db250cm9sLmFkZF9maWVsZCgxMSwnQ29udHJvbF9OZXh0Jyw3NDc0KQotQ29udHJvbC5hZGRfZmllbGQoMTIsJ0hlbHAnLDc5ODYpCi0KLURpYWxvZyA9IFRhYmxlKCdEaWFsb2cnKQotRGlhbG9nLmFkZF9maWVsZCgxLCdEaWFsb2cnLDExNTkyKQotRGlhbG9nLmFkZF9maWVsZCgyLCdIQ2VudGVyaW5nJywxMjgyKQotRGlhbG9nLmFkZF9maWVsZCgzLCdWQ2VudGVyaW5nJywxMjgyKQotRGlhbG9nLmFkZF9maWVsZCg0LCdXaWR0aCcsMTI4MikKLURpYWxvZy5hZGRfZmllbGQoNSwnSGVpZ2h0JywxMjgyKQotRGlhbG9nLmFkZF9maWVsZCg2LCdBdHRyaWJ1dGVzJyw0MzU2KQotRGlhbG9nLmFkZF9maWVsZCg3LCdUaXRsZScsODA2NCkKLURpYWxvZy5hZGRfZmllbGQoOCwnQ29udHJvbF9GaXJzdCcsMzM3OCkKLURpYWxvZy5hZGRfZmllbGQoOSwnQ29udHJvbF9EZWZhdWx0Jyw3NDc0KQotRGlhbG9nLmFkZF9maWVsZCgxMCwnQ29udHJvbF9DYW5jZWwnLDc0NzQpCi0KLUNvbnRyb2xDb25kaXRpb24gPSBUYWJsZSgnQ29udHJvbENvbmRpdGlvbicpCi1Db250cm9sQ29uZGl0aW9uLmFkZF9maWVsZCgxLCdEaWFsb2dfJywxMTU5MikKLUNvbnRyb2xDb25kaXRpb24uYWRkX2ZpZWxkKDIsJ0NvbnRyb2xfJywxMTU3MCkKLUNvbnRyb2xDb25kaXRpb24uYWRkX2ZpZWxkKDMsJ0FjdGlvbicsMTE1NzApCi1Db250cm9sQ29uZGl0aW9uLmFkZF9maWVsZCg0LCdDb25kaXRpb24nLDExNzc1KQotCi1Db250cm9sRXZlbnQgPSBUYWJsZSgnQ29udHJvbEV2ZW50JykKLUNvbnRyb2xFdmVudC5hZGRfZmllbGQoMSwnRGlhbG9nXycsMTE1OTIpCi1Db250cm9sRXZlbnQuYWRkX2ZpZWxkKDIsJ0NvbnRyb2xfJywxMTU3MCkKLUNvbnRyb2xFdmVudC5hZGRfZmllbGQoMywnRXZlbnQnLDExNTcwKQotQ29udHJvbEV2ZW50LmFkZF9maWVsZCg0LCdBcmd1bWVudCcsMTE3NzUpCi1Db250cm9sRXZlbnQuYWRkX2ZpZWxkKDUsJ0NvbmRpdGlvbicsMTU4NzEpCi1Db250cm9sRXZlbnQuYWRkX2ZpZWxkKDYsJ09yZGVyaW5nJyw1Mzc4KQotCi1DcmVhdGVGb2xkZXIgPSBUYWJsZSgnQ3JlYXRlRm9sZGVyJykKLUNyZWF0ZUZvbGRlci5hZGRfZmllbGQoMSwnRGlyZWN0b3J5XycsMHgyREZGKQotQ3JlYXRlRm9sZGVyLmFkZF9maWVsZCgyLCdDb21wb25lbnRfJywweDJERkYpCi0KLUN1c3RvbUFjdGlvbiA9IFRhYmxlKCdDdXN0b21BY3Rpb24nKQotQ3VzdG9tQWN0aW9uLmFkZF9maWVsZCgxLCdBY3Rpb24nLDB4MkRGRikKLUN1c3RvbUFjdGlvbi5hZGRfZmllbGQoMiwnVHlwZScsMTI4MikKLUN1c3RvbUFjdGlvbi5hZGRfZmllbGQoMywnU291cmNlJywweDFERkYpCi1DdXN0b21BY3Rpb24uYWRkX2ZpZWxkKDQsJ1RhcmdldCcsNzY3OSkKLQotRHJMb2NhdG9yID0gVGFibGUoJ0RyTG9jYXRvcicpCi1EckxvY2F0b3IuYWRkX2ZpZWxkKDEsJ1NpZ25hdHVyZV8nLDExNTkyKQotRHJMb2NhdG9yLmFkZF9maWVsZCgyLCdQYXJlbnQnLDE1Njg4KQotRHJMb2NhdG9yLmFkZF9maWVsZCgzLCdQYXRoJywxNTg3MSkKLURyTG9jYXRvci5hZGRfZmllbGQoNCwnRGVwdGgnLDUzNzgpCi0KLUR1cGxpY2F0ZUZpbGUgPSBUYWJsZSgnRHVwbGljYXRlRmlsZScpCi1EdXBsaWNhdGVGaWxlLmFkZF9maWVsZCgxLCdGaWxlS2V5JywxMTU5MikKLUR1cGxpY2F0ZUZpbGUuYWRkX2ZpZWxkKDIsJ0NvbXBvbmVudF8nLDB4REZGKQotRHVwbGljYXRlRmlsZS5hZGRfZmllbGQoMywnRmlsZV8nLDB4REZGKQotRHVwbGljYXRlRmlsZS5hZGRfZmllbGQoNCwnRGVzdE5hbWUnLDgxOTEpCi1EdXBsaWNhdGVGaWxlLmFkZF9maWVsZCg1LCdEZXN0Rm9sZGVyJyw3NDk2KQotCi1FbnZpcm9ubWVudCA9IFRhYmxlKCdFbnZpcm9ubWVudCcpCi1FbnZpcm9ubWVudC5hZGRfZmllbGQoMSwnRW52aXJvbm1lbnQnLDExNTkyKQotRW52aXJvbm1lbnQuYWRkX2ZpZWxkKDIsJ05hbWUnLDQwOTUpCi1FbnZpcm9ubWVudC5hZGRfZmllbGQoMywnVmFsdWUnLDgxOTEpCi1FbnZpcm9ubWVudC5hZGRfZmllbGQoNCwnQ29tcG9uZW50XycsMHhERkYpCi0KLUVycm9yID0gVGFibGUoJ0Vycm9yJykKLUVycm9yLmFkZF9maWVsZCgxLCdFcnJvcicsOTQ3NCkKLUVycm9yLmFkZF9maWVsZCgyLCdNZXNzYWdlJyw3OTM2KQotCi1FdmVudE1hcHBpbmcgPSBUYWJsZSgnRXZlbnRNYXBwaW5nJykKLUV2ZW50TWFwcGluZy5hZGRfZmllbGQoMSwnRGlhbG9nXycsMTE1OTIpCi1FdmVudE1hcHBpbmcuYWRkX2ZpZWxkKDIsJ0NvbnRyb2xfJywxMTU3MCkKLUV2ZW50TWFwcGluZy5hZGRfZmllbGQoMywnRXZlbnQnLDExNTcwKQotRXZlbnRNYXBwaW5nLmFkZF9maWVsZCg0LCdBdHRyaWJ1dGUnLDMzNzgpCi0KLUV4dGVuc2lvbiA9IFRhYmxlKCdFeHRlbnNpb24nKQotRXh0ZW5zaW9uLmFkZF9maWVsZCgxLCdFeHRlbnNpb24nLDExNzc1KQotRXh0ZW5zaW9uLmFkZF9maWVsZCgyLCdDb21wb25lbnRfJywweDJERkYpCi1FeHRlbnNpb24uYWRkX2ZpZWxkKDMsJ1Byb2dJZF8nLDc2NzkpCi1FeHRlbnNpb24uYWRkX2ZpZWxkKDQsJ01JTUVfJyw3NDg4KQotRXh0ZW5zaW9uLmFkZF9maWVsZCg1LCdGZWF0dXJlXycsMzM2NikKLQotTUlNRSA9IFRhYmxlKCdNSU1FJykKLU1JTUUuYWRkX2ZpZWxkKDEsJ0NvbnRlbnRUeXBlJywxMTU4NCkKLU1JTUUuYWRkX2ZpZWxkKDIsJ0V4dGVuc2lvbl8nLDM1ODMpCi1NSU1FLmFkZF9maWVsZCgzLCdDTFNJRCcsNzQ2MikKLQotRmVhdHVyZUNvbXBvbmVudHMgPSBUYWJsZSgnRmVhdHVyZUNvbXBvbmVudHMnKQotRmVhdHVyZUNvbXBvbmVudHMuYWRkX2ZpZWxkKDEsJ0ZlYXR1cmVfJywxMTU1OCkKLUZlYXR1cmVDb21wb25lbnRzLmFkZF9maWVsZCgyLCdDb21wb25lbnRfJywweDJERkYpCi0KLUZpbGVTRlBDYXRhbG9nID0gVGFibGUoJ0ZpbGVTRlBDYXRhbG9nJykKLUZpbGVTRlBDYXRhbG9nLmFkZF9maWVsZCgxLCdGaWxlXycsMHgyREZGKQotRmlsZVNGUENhdGFsb2cuYWRkX2ZpZWxkKDIsJ1NGUENhdGFsb2dfJywxMTc3NSkKLQotU0ZQQ2F0YWxvZyA9IFRhYmxlKCdTRlBDYXRhbG9nJykKLVNGUENhdGFsb2cuYWRkX2ZpZWxkKDEsJ1NGUENhdGFsb2cnLDExNzc1KQotU0ZQQ2F0YWxvZy5hZGRfZmllbGQoMiwnQ2F0YWxvZycsMjMwNCkKLVNGUENhdGFsb2cuYWRkX2ZpZWxkKDMsJ0RlcGVuZGVuY3knLDc0MjQpCi0KLUZvbnQgPSBUYWJsZSgnRm9udCcpCi1Gb250LmFkZF9maWVsZCgxLCdGaWxlXycsMHgyREZGKQotRm9udC5hZGRfZmllbGQoMiwnRm9udFRpdGxlJyw3NTUyKQotCi1JbmlGaWxlID0gVGFibGUoJ0luaUZpbGUnKQotSW5pRmlsZS5hZGRfZmllbGQoMSwnSW5pRmlsZScsMTE1OTIpCi1JbmlGaWxlLmFkZF9maWVsZCgyLCdGaWxlTmFtZScsNDA5NSkKLUluaUZpbGUuYWRkX2ZpZWxkKDMsJ0RpclByb3BlcnR5Jyw3NDk2KQotSW5pRmlsZS5hZGRfZmllbGQoNCwnU2VjdGlvbicsMzkzNikKLUluaUZpbGUuYWRkX2ZpZWxkKDUsJ0tleScsMzk2OCkKLUluaUZpbGUuYWRkX2ZpZWxkKDYsJ1ZhbHVlJyw0MDk1KQotSW5pRmlsZS5hZGRfZmllbGQoNywnQWN0aW9uJywxMjgyKQotSW5pRmlsZS5hZGRfZmllbGQoOCwnQ29tcG9uZW50XycsMHhERkYpCi0KLUluaUxvY2F0b3IgPSBUYWJsZSgnSW5pTG9jYXRvcicpCi1JbmlMb2NhdG9yLmFkZF9maWVsZCgxLCdTaWduYXR1cmVfJywxMTU5MikKLUluaUxvY2F0b3IuYWRkX2ZpZWxkKDIsJ0ZpbGVOYW1lJywzNTgzKQotSW5pTG9jYXRvci5hZGRfZmllbGQoMywnU2VjdGlvbicsMzQyNCkKLUluaUxvY2F0b3IuYWRkX2ZpZWxkKDQsJ0tleScsMzQ1NikKLUluaUxvY2F0b3IuYWRkX2ZpZWxkKDUsJ0ZpZWxkJyw1Mzc4KQotSW5pTG9jYXRvci5hZGRfZmllbGQoNiwnVHlwZScsNTM3OCkKLQotSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSA9IFRhYmxlKCdJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlJykKLUluc3RhbGxFeGVjdXRlU2VxdWVuY2UuYWRkX2ZpZWxkKDEsJ0FjdGlvbicsMHgyREZGKQotSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZS5hZGRfZmllbGQoMiwnQ29uZGl0aW9uJyw3Njc5KQotSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZS5hZGRfZmllbGQoMywnU2VxdWVuY2UnLDUzNzgpCi0KLUluc3RhbGxVSVNlcXVlbmNlID0gVGFibGUoJ0luc3RhbGxVSVNlcXVlbmNlJykKLUluc3RhbGxVSVNlcXVlbmNlLmFkZF9maWVsZCgxLCdBY3Rpb24nLDB4MkRGRikKLUluc3RhbGxVSVNlcXVlbmNlLmFkZF9maWVsZCgyLCdDb25kaXRpb24nLDc2NzkpCi1JbnN0YWxsVUlTZXF1ZW5jZS5hZGRfZmllbGQoMywnU2VxdWVuY2UnLDUzNzgpCi0KLUlzb2xhdGVkQ29tcG9uZW50ID0gVGFibGUoJ0lzb2xhdGVkQ29tcG9uZW50JykKLUlzb2xhdGVkQ29tcG9uZW50LmFkZF9maWVsZCgxLCdDb21wb25lbnRfU2hhcmVkJywweDJERkYpCi1Jc29sYXRlZENvbXBvbmVudC5hZGRfZmllbGQoMiwnQ29tcG9uZW50X0FwcGxpY2F0aW9uJywweDJERkYpCi0KLUxhdW5jaENvbmRpdGlvbiA9IFRhYmxlKCdMYXVuY2hDb25kaXRpb24nKQotTGF1bmNoQ29uZGl0aW9uLmFkZF9maWVsZCgxLCdDb25kaXRpb24nLDExNzc1KQotTGF1bmNoQ29uZGl0aW9uLmFkZF9maWVsZCgyLCdEZXNjcmlwdGlvbicsNDA5NSkKLQotTGlzdEJveCA9IFRhYmxlKCdMaXN0Qm94JykKLUxpc3RCb3guYWRkX2ZpZWxkKDEsJ1Byb3BlcnR5JywxMTU5MikKLUxpc3RCb3guYWRkX2ZpZWxkKDIsJ09yZGVyJyw5NDc0KQotTGlzdEJveC5hZGRfZmllbGQoMywnVmFsdWUnLDMzOTIpCi1MaXN0Qm94LmFkZF9maWVsZCg0LCdUZXh0Jyw4MDAwKQotCi1MaXN0VmlldyA9IFRhYmxlKCdMaXN0VmlldycpCi1MaXN0Vmlldy5hZGRfZmllbGQoMSwnUHJvcGVydHknLDExNTkyKQotTGlzdFZpZXcuYWRkX2ZpZWxkKDIsJ09yZGVyJyw5NDc0KQotTGlzdFZpZXcuYWRkX2ZpZWxkKDMsJ1ZhbHVlJywzMzkyKQotTGlzdFZpZXcuYWRkX2ZpZWxkKDQsJ1RleHQnLDgwMDApCi1MaXN0Vmlldy5hZGRfZmllbGQoNSwnQmluYXJ5XycsNzQ5NikKLQotTG9ja1Blcm1pc3Npb25zID0gVGFibGUoJ0xvY2tQZXJtaXNzaW9ucycpCi1Mb2NrUGVybWlzc2lvbnMuYWRkX2ZpZWxkKDEsJ0xvY2tPYmplY3QnLDExNTkyKQotTG9ja1Blcm1pc3Npb25zLmFkZF9maWVsZCgyLCdUYWJsZScsMTE1NTIpCi1Mb2NrUGVybWlzc2lvbnMuYWRkX2ZpZWxkKDMsJ0RvbWFpbicsMTU4NzEpCi1Mb2NrUGVybWlzc2lvbnMuYWRkX2ZpZWxkKDQsJ1VzZXInLDExNzc1KQotTG9ja1Blcm1pc3Npb25zLmFkZF9maWVsZCg1LCdQZXJtaXNzaW9uJyw0MzU2KQotCi1NZWRpYSA9IFRhYmxlKCdNZWRpYScpCi1NZWRpYS5hZGRfZmllbGQoMSwnRGlza0lkJyw5NDc0KQotTWVkaWEuYWRkX2ZpZWxkKDIsJ0xhc3RTZXF1ZW5jZScsMTI4MikKLU1lZGlhLmFkZF9maWVsZCgzLCdEaXNrUHJvbXB0Jyw4MDAwKQotTWVkaWEuYWRkX2ZpZWxkKDQsJ0NhYmluZXQnLDc2NzkpCi1NZWRpYS5hZGRfZmllbGQoNSwnVm9sdW1lTGFiZWwnLDc0NTYpCi1NZWRpYS5hZGRfZmllbGQoNiwnU291cmNlJyw3NDk2KQotCi1Nb3ZlRmlsZSA9IFRhYmxlKCdNb3ZlRmlsZScpCi1Nb3ZlRmlsZS5hZGRfZmllbGQoMSwnRmlsZUtleScsMTE1OTIpCi1Nb3ZlRmlsZS5hZGRfZmllbGQoMiwnQ29tcG9uZW50XycsMHhERkYpCi1Nb3ZlRmlsZS5hZGRfZmllbGQoMywnU291cmNlTmFtZScsODE5MSkKLU1vdmVGaWxlLmFkZF9maWVsZCg0LCdEZXN0TmFtZScsODE5MSkKLU1vdmVGaWxlLmFkZF9maWVsZCg1LCdTb3VyY2VGb2xkZXInLDc0OTYpCi1Nb3ZlRmlsZS5hZGRfZmllbGQoNiwnRGVzdEZvbGRlcicsMzQwMCkKLU1vdmVGaWxlLmFkZF9maWVsZCg3LCdPcHRpb25zJywxMjgyKQotCi1Nc2lBc3NlbWJseSA9IFRhYmxlKCdNc2lBc3NlbWJseScpCi1Nc2lBc3NlbWJseS5hZGRfZmllbGQoMSwnQ29tcG9uZW50XycsMHgyREZGKQotTXNpQXNzZW1ibHkuYWRkX2ZpZWxkKDIsJ0ZlYXR1cmVfJywzMzY2KQotTXNpQXNzZW1ibHkuYWRkX2ZpZWxkKDMsJ0ZpbGVfTWFuaWZlc3QnLDB4MURGRikKLU1zaUFzc2VtYmx5LmFkZF9maWVsZCg0LCdGaWxlX0FwcGxpY2F0aW9uJywweDFERkYpCi1Nc2lBc3NlbWJseS5hZGRfZmllbGQoNSwnQXR0cmlidXRlcycsNTM3OCkKLQotTXNpQXNzZW1ibHlOYW1lID0gVGFibGUoJ01zaUFzc2VtYmx5TmFtZScpCi1Nc2lBc3NlbWJseU5hbWUuYWRkX2ZpZWxkKDEsJ0NvbXBvbmVudF8nLDB4MkRGRikKLU1zaUFzc2VtYmx5TmFtZS5hZGRfZmllbGQoMiwnTmFtZScsMTE3NzUpCi1Nc2lBc3NlbWJseU5hbWUuYWRkX2ZpZWxkKDMsJ1ZhbHVlJywzNTgzKQotCi1Nc2lEaWdpdGFsQ2VydGlmaWNhdGUgPSBUYWJsZSgnTXNpRGlnaXRhbENlcnRpZmljYXRlJykKLU1zaURpZ2l0YWxDZXJ0aWZpY2F0ZS5hZGRfZmllbGQoMSwnRGlnaXRhbENlcnRpZmljYXRlJywxMTU5MikKLU1zaURpZ2l0YWxDZXJ0aWZpY2F0ZS5hZGRfZmllbGQoMiwnQ2VydERhdGEnLDIzMDQpCi0KLU1zaURpZ2l0YWxTaWduYXR1cmUgPSBUYWJsZSgnTXNpRGlnaXRhbFNpZ25hdHVyZScpCi1Nc2lEaWdpdGFsU2lnbmF0dXJlLmFkZF9maWVsZCgxLCdUYWJsZScsMTE1NTIpCi1Nc2lEaWdpdGFsU2lnbmF0dXJlLmFkZF9maWVsZCgyLCdTaWduT2JqZWN0JywxMTU5MikKLU1zaURpZ2l0YWxTaWduYXR1cmUuYWRkX2ZpZWxkKDMsJ0RpZ2l0YWxDZXJ0aWZpY2F0ZV8nLDM0MDApCi1Nc2lEaWdpdGFsU2lnbmF0dXJlLmFkZF9maWVsZCg0LCdIYXNoJyw2NDAwKQotCi1Nc2lGaWxlSGFzaCA9IFRhYmxlKCdNc2lGaWxlSGFzaCcpCi1Nc2lGaWxlSGFzaC5hZGRfZmllbGQoMSwnRmlsZV8nLDB4MkRGRikKLU1zaUZpbGVIYXNoLmFkZF9maWVsZCgyLCdPcHRpb25zJywxMjgyKQotTXNpRmlsZUhhc2guYWRkX2ZpZWxkKDMsJ0hhc2hQYXJ0MScsMjYwKQotTXNpRmlsZUhhc2guYWRkX2ZpZWxkKDQsJ0hhc2hQYXJ0MicsMjYwKQotTXNpRmlsZUhhc2guYWRkX2ZpZWxkKDUsJ0hhc2hQYXJ0MycsMjYwKQotTXNpRmlsZUhhc2guYWRkX2ZpZWxkKDYsJ0hhc2hQYXJ0NCcsMjYwKQotCi1Nc2lQYXRjaEhlYWRlcnMgPSBUYWJsZSgnTXNpUGF0Y2hIZWFkZXJzJykKLU1zaVBhdGNoSGVhZGVycy5hZGRfZmllbGQoMSwnU3RyZWFtUmVmJywxMTU1OCkKLU1zaVBhdGNoSGVhZGVycy5hZGRfZmllbGQoMiwnSGVhZGVyJywyMzA0KQotCi1PREJDQXR0cmlidXRlID0gVGFibGUoJ09EQkNBdHRyaWJ1dGUnKQotT0RCQ0F0dHJpYnV0ZS5hZGRfZmllbGQoMSwnRHJpdmVyXycsMTE1OTIpCi1PREJDQXR0cmlidXRlLmFkZF9maWVsZCgyLCdBdHRyaWJ1dGUnLDExNTYwKQotT0RCQ0F0dHJpYnV0ZS5hZGRfZmllbGQoMywnVmFsdWUnLDgxOTEpCi0KLU9EQkNEcml2ZXIgPSBUYWJsZSgnT0RCQ0RyaXZlcicpCi1PREJDRHJpdmVyLmFkZF9maWVsZCgxLCdEcml2ZXInLDExNTkyKQotT0RCQ0RyaXZlci5hZGRfZmllbGQoMiwnQ29tcG9uZW50XycsMHhERkYpCi1PREJDRHJpdmVyLmFkZF9maWVsZCgzLCdEZXNjcmlwdGlvbicsMzU4MykKLU9EQkNEcml2ZXIuYWRkX2ZpZWxkKDQsJ0ZpbGVfJywweERGRikKLU9EQkNEcml2ZXIuYWRkX2ZpZWxkKDUsJ0ZpbGVfU2V0dXAnLDB4MURGRikKLQotT0RCQ0RhdGFTb3VyY2UgPSBUYWJsZSgnT0RCQ0RhdGFTb3VyY2UnKQotT0RCQ0RhdGFTb3VyY2UuYWRkX2ZpZWxkKDEsJ0RhdGFTb3VyY2UnLDB4MkRGRikKLU9EQkNEYXRhU291cmNlLmFkZF9maWVsZCgyLCdDb21wb25lbnRfJywweERGRikKLU9EQkNEYXRhU291cmNlLmFkZF9maWVsZCgzLCdEZXNjcmlwdGlvbicsMzU4MykKLU9EQkNEYXRhU291cmNlLmFkZF9maWVsZCg0LCdEcml2ZXJEZXNjcmlwdGlvbicsMzU4MykKLU9EQkNEYXRhU291cmNlLmFkZF9maWVsZCg1LCdSZWdpc3RyYXRpb24nLDEyODIpCi0KLU9EQkNTb3VyY2VBdHRyaWJ1dGUgPSBUYWJsZSgnT0RCQ1NvdXJjZUF0dHJpYnV0ZScpCi1PREJDU291cmNlQXR0cmlidXRlLmFkZF9maWVsZCgxLCdEYXRhU291cmNlXycsMTE1OTIpCi1PREJDU291cmNlQXR0cmlidXRlLmFkZF9maWVsZCgyLCdBdHRyaWJ1dGUnLDExNTUyKQotT0RCQ1NvdXJjZUF0dHJpYnV0ZS5hZGRfZmllbGQoMywnVmFsdWUnLDgxOTEpCi0KLU9EQkNUcmFuc2xhdG9yID0gVGFibGUoJ09EQkNUcmFuc2xhdG9yJykKLU9EQkNUcmFuc2xhdG9yLmFkZF9maWVsZCgxLCdUcmFuc2xhdG9yJywxMTU5MikKLU9EQkNUcmFuc2xhdG9yLmFkZF9maWVsZCgyLCdDb21wb25lbnRfJywweERGRikKLU9EQkNUcmFuc2xhdG9yLmFkZF9maWVsZCgzLCdEZXNjcmlwdGlvbicsMzU4MykKLU9EQkNUcmFuc2xhdG9yLmFkZF9maWVsZCg0LCdGaWxlXycsMHhERkYpCi1PREJDVHJhbnNsYXRvci5hZGRfZmllbGQoNSwnRmlsZV9TZXR1cCcsMHgxREZGKQotCi1QYXRjaCA9IFRhYmxlKCdQYXRjaCcpCi1QYXRjaC5hZGRfZmllbGQoMSwnRmlsZV8nLDExNTkyKQotUGF0Y2guYWRkX2ZpZWxkKDIsJ1NlcXVlbmNlJyw5NDc0KQotUGF0Y2guYWRkX2ZpZWxkKDMsJ1BhdGNoU2l6ZScsMjYwKQotUGF0Y2guYWRkX2ZpZWxkKDQsJ0F0dHJpYnV0ZXMnLDEyODIpCi1QYXRjaC5hZGRfZmllbGQoNSwnSGVhZGVyJyw2NDAwKQotUGF0Y2guYWRkX2ZpZWxkKDYsJ1N0cmVhbVJlZl8nLDc0NjIpCi0KLVBhdGNoUGFja2FnZSA9IFRhYmxlKCdQYXRjaFBhY2thZ2UnKQotUGF0Y2hQYWNrYWdlLmFkZF9maWVsZCgxLCdQYXRjaElkJywxMTU1OCkKLVBhdGNoUGFja2FnZS5hZGRfZmllbGQoMiwnTWVkaWFfJywxMjgyKQotCi1QdWJsaXNoQ29tcG9uZW50ID0gVGFibGUoJ1B1Ymxpc2hDb21wb25lbnQnKQotUHVibGlzaENvbXBvbmVudC5hZGRfZmllbGQoMSwnQ29tcG9uZW50SWQnLDExNTU4KQotUHVibGlzaENvbXBvbmVudC5hZGRfZmllbGQoMiwnUXVhbGlmaWVyJywxMTc3NSkKLVB1Ymxpc2hDb21wb25lbnQuYWRkX2ZpZWxkKDMsJ0NvbXBvbmVudF8nLDB4MkRGRikKLVB1Ymxpc2hDb21wb25lbnQuYWRkX2ZpZWxkKDQsJ0FwcERhdGEnLDgxOTEpCi1QdWJsaXNoQ29tcG9uZW50LmFkZF9maWVsZCg1LCdGZWF0dXJlXycsMzM2NikKLQotUmFkaW9CdXR0b24gPSBUYWJsZSgnUmFkaW9CdXR0b24nKQotUmFkaW9CdXR0b24uYWRkX2ZpZWxkKDEsJ1Byb3BlcnR5JywxMTU5MikKLVJhZGlvQnV0dG9uLmFkZF9maWVsZCgyLCdPcmRlcicsOTQ3NCkKLVJhZGlvQnV0dG9uLmFkZF9maWVsZCgzLCdWYWx1ZScsMzM5MikKLVJhZGlvQnV0dG9uLmFkZF9maWVsZCg0LCdYJywxMjgyKQotUmFkaW9CdXR0b24uYWRkX2ZpZWxkKDUsJ1knLDEyODIpCi1SYWRpb0J1dHRvbi5hZGRfZmllbGQoNiwnV2lkdGgnLDEyODIpCi1SYWRpb0J1dHRvbi5hZGRfZmllbGQoNywnSGVpZ2h0JywxMjgyKQotUmFkaW9CdXR0b24uYWRkX2ZpZWxkKDgsJ1RleHQnLDgwMDApCi1SYWRpb0J1dHRvbi5hZGRfZmllbGQoOSwnSGVscCcsNzk4NikKLQotUmVnaXN0cnkgPSBUYWJsZSgnUmVnaXN0cnknKQotUmVnaXN0cnkuYWRkX2ZpZWxkKDEsJ1JlZ2lzdHJ5JywweDJERkYpCi1SZWdpc3RyeS5hZGRfZmllbGQoMiwnUm9vdCcsMTI4MikKLVJlZ2lzdHJ5LmFkZF9maWVsZCgzLCdLZXknLDQwOTUpCi1SZWdpc3RyeS5hZGRfZmllbGQoNCwnTmFtZScsODE5MSkKLVJlZ2lzdHJ5LmFkZF9maWVsZCg1LCdWYWx1ZScsNzkzNikKLVJlZ2lzdHJ5LmFkZF9maWVsZCg2LCdDb21wb25lbnRfJywweERGRikKLQotUmVnTG9jYXRvciA9IFRhYmxlKCdSZWdMb2NhdG9yJykKLVJlZ0xvY2F0b3IuYWRkX2ZpZWxkKDEsJ1NpZ25hdHVyZV8nLDExNTkyKQotUmVnTG9jYXRvci5hZGRfZmllbGQoMiwnUm9vdCcsMTI4MikKLVJlZ0xvY2F0b3IuYWRkX2ZpZWxkKDMsJ0tleScsMzU4MykKLVJlZ0xvY2F0b3IuYWRkX2ZpZWxkKDQsJ05hbWUnLDc2NzkpCi1SZWdMb2NhdG9yLmFkZF9maWVsZCg1LCdUeXBlJyw1Mzc4KQotCi1SZW1vdmVGaWxlID0gVGFibGUoJ1JlbW92ZUZpbGUnKQotUmVtb3ZlRmlsZS5hZGRfZmllbGQoMSwnRmlsZUtleScsMTE1OTIpCi1SZW1vdmVGaWxlLmFkZF9maWVsZCgyLCdDb21wb25lbnRfJywweERGRikKLVJlbW92ZUZpbGUuYWRkX2ZpZWxkKDMsJ0ZpbGVOYW1lJyw4MTkxKQotUmVtb3ZlRmlsZS5hZGRfZmllbGQoNCwnRGlyUHJvcGVydHknLDM0MDApCi1SZW1vdmVGaWxlLmFkZF9maWVsZCg1LCdJbnN0YWxsTW9kZScsMTI4MikKLQotUmVtb3ZlSW5pRmlsZSA9IFRhYmxlKCdSZW1vdmVJbmlGaWxlJykKLVJlbW92ZUluaUZpbGUuYWRkX2ZpZWxkKDEsJ1JlbW92ZUluaUZpbGUnLDExNTkyKQotUmVtb3ZlSW5pRmlsZS5hZGRfZmllbGQoMiwnRmlsZU5hbWUnLDQwOTUpCi1SZW1vdmVJbmlGaWxlLmFkZF9maWVsZCgzLCdEaXJQcm9wZXJ0eScsNzQ5NikKLVJlbW92ZUluaUZpbGUuYWRkX2ZpZWxkKDQsJ1NlY3Rpb24nLDM5MzYpCi1SZW1vdmVJbmlGaWxlLmFkZF9maWVsZCg1LCdLZXknLDM5NjgpCi1SZW1vdmVJbmlGaWxlLmFkZF9maWVsZCg2LCdWYWx1ZScsODE5MSkKLVJlbW92ZUluaUZpbGUuYWRkX2ZpZWxkKDcsJ0FjdGlvbicsMTI4MikKLVJlbW92ZUluaUZpbGUuYWRkX2ZpZWxkKDgsJ0NvbXBvbmVudF8nLDB4REZGKQotCi1SZW1vdmVSZWdpc3RyeSA9IFRhYmxlKCdSZW1vdmVSZWdpc3RyeScpCi1SZW1vdmVSZWdpc3RyeS5hZGRfZmllbGQoMSwnUmVtb3ZlUmVnaXN0cnknLDExNTkyKQotUmVtb3ZlUmVnaXN0cnkuYWRkX2ZpZWxkKDIsJ1Jvb3QnLDEyODIpCi1SZW1vdmVSZWdpc3RyeS5hZGRfZmllbGQoMywnS2V5Jyw0MDk1KQotUmVtb3ZlUmVnaXN0cnkuYWRkX2ZpZWxkKDQsJ05hbWUnLDgxOTEpCi1SZW1vdmVSZWdpc3RyeS5hZGRfZmllbGQoNSwnQ29tcG9uZW50XycsMHhERkYpCi0KLVJlc2VydmVDb3N0ID0gVGFibGUoJ1Jlc2VydmVDb3N0JykKLVJlc2VydmVDb3N0LmFkZF9maWVsZCgxLCdSZXNlcnZlS2V5JywxMTU5MikKLVJlc2VydmVDb3N0LmFkZF9maWVsZCgyLCdDb21wb25lbnRfJywweERGRikKLVJlc2VydmVDb3N0LmFkZF9maWVsZCgzLCdSZXNlcnZlRm9sZGVyJyw3NDk2KQotUmVzZXJ2ZUNvc3QuYWRkX2ZpZWxkKDQsJ1Jlc2VydmVMb2NhbCcsMjYwKQotUmVzZXJ2ZUNvc3QuYWRkX2ZpZWxkKDUsJ1Jlc2VydmVTb3VyY2UnLDI2MCkKLQotU2VsZlJlZyA9IFRhYmxlKCdTZWxmUmVnJykKLVNlbGZSZWcuYWRkX2ZpZWxkKDEsJ0ZpbGVfJywweDJERkYpCi1TZWxmUmVnLmFkZF9maWVsZCgyLCdDb3N0Jyw1Mzc4KQotCi1TZXJ2aWNlQ29udHJvbCA9IFRhYmxlKCdTZXJ2aWNlQ29udHJvbCcpCi1TZXJ2aWNlQ29udHJvbC5hZGRfZmllbGQoMSwnU2VydmljZUNvbnRyb2wnLDExNTkyKQotU2VydmljZUNvbnRyb2wuYWRkX2ZpZWxkKDIsJ05hbWUnLDQwOTUpCi1TZXJ2aWNlQ29udHJvbC5hZGRfZmllbGQoMywnRXZlbnQnLDEyODIpCi1TZXJ2aWNlQ29udHJvbC5hZGRfZmllbGQoNCwnQXJndW1lbnRzJyw4MTkxKQotU2VydmljZUNvbnRyb2wuYWRkX2ZpZWxkKDUsJ1dhaXQnLDUzNzgpCi1TZXJ2aWNlQ29udHJvbC5hZGRfZmllbGQoNiwnQ29tcG9uZW50XycsMHhERkYpCi0KLVNlcnZpY2VJbnN0YWxsID0gVGFibGUoJ1NlcnZpY2VJbnN0YWxsJykKLVNlcnZpY2VJbnN0YWxsLmFkZF9maWVsZCgxLCdTZXJ2aWNlSW5zdGFsbCcsMTE1OTIpCi1TZXJ2aWNlSW5zdGFsbC5hZGRfZmllbGQoMiwnTmFtZScsMzU4MykKLVNlcnZpY2VJbnN0YWxsLmFkZF9maWVsZCgzLCdEaXNwbGF5TmFtZScsODE5MSkKLVNlcnZpY2VJbnN0YWxsLmFkZF9maWVsZCg0LCdTZXJ2aWNlVHlwZScsMjYwKQotU2VydmljZUluc3RhbGwuYWRkX2ZpZWxkKDUsJ1N0YXJ0VHlwZScsMjYwKQotU2VydmljZUluc3RhbGwuYWRkX2ZpZWxkKDYsJ0Vycm9yQ29udHJvbCcsMjYwKQotU2VydmljZUluc3RhbGwuYWRkX2ZpZWxkKDcsJ0xvYWRPcmRlckdyb3VwJyw3Njc5KQotU2VydmljZUluc3RhbGwuYWRkX2ZpZWxkKDgsJ0RlcGVuZGVuY2llcycsNzY3OSkKLVNlcnZpY2VJbnN0YWxsLmFkZF9maWVsZCg5LCdTdGFydE5hbWUnLDc2NzkpCi1TZXJ2aWNlSW5zdGFsbC5hZGRfZmllbGQoMTAsJ1Bhc3N3b3JkJyw3Njc5KQotU2VydmljZUluc3RhbGwuYWRkX2ZpZWxkKDExLCdBcmd1bWVudHMnLDc2NzkpCi1TZXJ2aWNlSW5zdGFsbC5hZGRfZmllbGQoMTIsJ0NvbXBvbmVudF8nLDB4REZGKQotU2VydmljZUluc3RhbGwuYWRkX2ZpZWxkKDEzLCdEZXNjcmlwdGlvbicsODE5MSkKLQotU2hvcnRjdXQgPSBUYWJsZSgnU2hvcnRjdXQnKQotU2hvcnRjdXQuYWRkX2ZpZWxkKDEsJ1Nob3J0Y3V0JywxMTU5MikKLVNob3J0Y3V0LmFkZF9maWVsZCgyLCdEaXJlY3RvcnlfJywweERGRikKLVNob3J0Y3V0LmFkZF9maWVsZCgzLCdOYW1lJywzOTY4KQotU2hvcnRjdXQuYWRkX2ZpZWxkKDQsJ0NvbXBvbmVudF8nLDB4REZGKQotU2hvcnRjdXQuYWRkX2ZpZWxkKDUsJ1RhcmdldCcsMzQwMCkKLVNob3J0Y3V0LmFkZF9maWVsZCg2LCdBcmd1bWVudHMnLDc2NzkpCi1TaG9ydGN1dC5hZGRfZmllbGQoNywnRGVzY3JpcHRpb24nLDgxOTEpCi1TaG9ydGN1dC5hZGRfZmllbGQoOCwnSG90a2V5Jyw1Mzc4KQotU2hvcnRjdXQuYWRkX2ZpZWxkKDksJ0ljb25fJyw3NDk2KQotU2hvcnRjdXQuYWRkX2ZpZWxkKDEwLCdJY29uSW5kZXgnLDUzNzgpCi1TaG9ydGN1dC5hZGRfZmllbGQoMTEsJ1Nob3dDbWQnLDUzNzgpCi1TaG9ydGN1dC5hZGRfZmllbGQoMTIsJ1drRGlyJyw3NDk2KQotCi1TaWduYXR1cmUgPSBUYWJsZSgnU2lnbmF0dXJlJykKLVNpZ25hdHVyZS5hZGRfZmllbGQoMSwnU2lnbmF0dXJlJywxMTU5MikKLVNpZ25hdHVyZS5hZGRfZmllbGQoMiwnRmlsZU5hbWUnLDM1ODMpCi1TaWduYXR1cmUuYWRkX2ZpZWxkKDMsJ01pblZlcnNpb24nLDc0NDQpCi1TaWduYXR1cmUuYWRkX2ZpZWxkKDQsJ01heFZlcnNpb24nLDc0NDQpCi1TaWduYXR1cmUuYWRkX2ZpZWxkKDUsJ01pblNpemUnLDQzNTYpCi1TaWduYXR1cmUuYWRkX2ZpZWxkKDYsJ01heFNpemUnLDQzNTYpCi1TaWduYXR1cmUuYWRkX2ZpZWxkKDcsJ01pbkRhdGUnLDQzNTYpCi1TaWduYXR1cmUuYWRkX2ZpZWxkKDgsJ01heERhdGUnLDQzNTYpCi1TaWduYXR1cmUuYWRkX2ZpZWxkKDksJ0xhbmd1YWdlcycsNzY3OSkKLQotVGV4dFN0eWxlID0gVGFibGUoJ1RleHRTdHlsZScpCi1UZXh0U3R5bGUuYWRkX2ZpZWxkKDEsJ1RleHRTdHlsZScsMTE1OTIpCi1UZXh0U3R5bGUuYWRkX2ZpZWxkKDIsJ0ZhY2VOYW1lJywzMzYwKQotVGV4dFN0eWxlLmFkZF9maWVsZCgzLCdTaXplJywxMjgyKQotVGV4dFN0eWxlLmFkZF9maWVsZCg0LCdDb2xvcicsNDM1NikKLVRleHRTdHlsZS5hZGRfZmllbGQoNSwnU3R5bGVCaXRzJyw1Mzc4KQotCi1UeXBlTGliID0gVGFibGUoJ1R5cGVMaWInKQotVHlwZUxpYi5hZGRfZmllbGQoMSwnTGliSUQnLDExNTU4KQotVHlwZUxpYi5hZGRfZmllbGQoMiwnTGFuZ3VhZ2UnLDk0NzQpCi1UeXBlTGliLmFkZF9maWVsZCgzLCdDb21wb25lbnRfJywweDJERkYpCi1UeXBlTGliLmFkZF9maWVsZCg0LCdWZXJzaW9uJyw0MzU2KQotVHlwZUxpYi5hZGRfZmllbGQoNSwnRGVzY3JpcHRpb24nLDgwNjQpCi1UeXBlTGliLmFkZF9maWVsZCg2LCdEaXJlY3RvcnlfJywweDFERkYpCi1UeXBlTGliLmFkZF9maWVsZCg3LCdGZWF0dXJlXycsMzM2NikKLVR5cGVMaWIuYWRkX2ZpZWxkKDgsJ0Nvc3QnLDQzNTYpCi0KLVVJVGV4dCA9IFRhYmxlKCdVSVRleHQnKQotVUlUZXh0LmFkZF9maWVsZCgxLCdLZXknLDExNTkyKQotVUlUZXh0LmFkZF9maWVsZCgyLCdUZXh0Jyw4MTkxKQotCi1VcGdyYWRlID0gVGFibGUoJ1VwZ3JhZGUnKQotVXBncmFkZS5hZGRfZmllbGQoMSwnVXBncmFkZUNvZGUnLDExNTU4KQotVXBncmFkZS5hZGRfZmllbGQoMiwnVmVyc2lvbk1pbicsMTU2MzYpCi1VcGdyYWRlLmFkZF9maWVsZCgzLCdWZXJzaW9uTWF4JywxNTYzNikKLVVwZ3JhZGUuYWRkX2ZpZWxkKDQsJ0xhbmd1YWdlJywxNTg3MSkKLVVwZ3JhZGUuYWRkX2ZpZWxkKDUsJ0F0dHJpYnV0ZXMnLDg0NTIpCi1VcGdyYWRlLmFkZF9maWVsZCg2LCdSZW1vdmUnLDc2NzkpCi1VcGdyYWRlLmFkZF9maWVsZCg3LCdBY3Rpb25Qcm9wZXJ0eScsMzQwMCkKLQotVmVyYiA9IFRhYmxlKCdWZXJiJykKLVZlcmIuYWRkX2ZpZWxkKDEsJ0V4dGVuc2lvbl8nLDExNzc1KQotVmVyYi5hZGRfZmllbGQoMiwnVmVyYicsMTE1NTIpCi1WZXJiLmFkZF9maWVsZCgzLCdTZXF1ZW5jZScsNTM3OCkKLVZlcmIuYWRkX2ZpZWxkKDQsJ0NvbW1hbmQnLDgxOTEpCi1WZXJiLmFkZF9maWVsZCg1LCdBcmd1bWVudCcsODE5MSkKLQotdGFibGVzPVtfVmFsaWRhdGlvbiwgQWN0aW9uVGV4dCwgQWRtaW5FeGVjdXRlU2VxdWVuY2UsIENvbmRpdGlvbiwgQWRtaW5VSVNlcXVlbmNlLCBBZHZ0RXhlY3V0ZVNlcXVlbmNlLCBBZHZ0VUlTZXF1ZW5jZSwgQXBwSWQsIEFwcFNlYXJjaCwgUHJvcGVydHksIEJCQ29udHJvbCwgQmlsbGJvYXJkLCBGZWF0dXJlLCBCaW5hcnksIEJpbmRJbWFnZSwgRmlsZSwgQ0NQU2VhcmNoLCBDaGVja0JveCwgQ2xhc3MsIENvbXBvbmVudCwgSWNvbiwgUHJvZ0lkLCBDb21ib0JveCwgQ29tcExvY2F0b3IsIENvbXBsdXMsIERpcmVjdG9yeSwgQ29udHJvbCwgRGlhbG9nLCBDb250cm9sQ29uZGl0aW9uLCBDb250cm9sRXZlbnQsIENyZWF0ZUZvbGRlciwgQ3VzdG9tQWN0aW9uLCBEckxvY2F0b3IsIER1cGxpY2F0ZUZpbGUsIEVudmlyb25tZW50LCBFcnJvciwgRXZlbnRNYXBwaW5nLCBFeHRlbnNpb24sIE1JTUUsIEZlYXR1cmVDb21wb25lbnRzLCBGaWxlU0ZQQ2F0YWxvZywgU0ZQQ2F0YWxvZywgRm9udCwgSW5pRmlsZSwgSW5pTG9jYXRvciwgSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSwgSW5zdGFsbFVJU2VxdWVuY2UsIElzb2xhdGVkQ29tcG9uZW50LCBMYXVuY2hDb25kaXRpb24sIExpc3RCb3gsIExpc3RWaWV3LCBMb2NrUGVybWlzc2lvbnMsIE1lZGlhLCBNb3ZlRmlsZSwgTXNpQXNzZW1ibHksIE1zaUFzc2VtYmx5TmFtZSwgTXNpRGlnaXRhbENlcnRpZmljYXRlLCBNc2lEaWdpdGFsU2lnbmF0dXJlLCBNc2lGaWxlSGFzaCwgTXNpUGF0Y2hIZWFkZXJzLCBPREJDQXR0cmlidXRlLCBPREJDRHJpdmVyLCBPREJDRGF0YVNvdXJjZSwgT0RCQ1NvdXJjZUF0dHJpYnV0ZSwgT0RCQ1RyYW5zbGF0b3IsIFBhdGNoLCBQYXRjaFBhY2thZ2UsIFB1Ymxpc2hDb21wb25lbnQsIFJhZGlvQnV0dG9uLCBSZWdpc3RyeSwgUmVnTG9jYXRvciwgUmVtb3ZlRmlsZSwgUmVtb3ZlSW5pRmlsZSwgUmVtb3ZlUmVnaXN0cnksIFJlc2VydmVDb3N0LCBTZWxmUmVnLCBTZXJ2aWNlQ29udHJvbCwgU2VydmljZUluc3RhbGwsIFNob3J0Y3V0LCBTaWduYXR1cmUsIFRleHRTdHlsZSwgVHlwZUxpYiwgVUlUZXh0LCBVcGdyYWRlLCBWZXJiXQotCi1fVmFsaWRhdGlvbl9yZWNvcmRzID0gWwotKHUnX1ZhbGlkYXRpb24nLHUnVGFibGUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J05hbWUgb2YgdGFibGUnLCksCi0odSdfVmFsaWRhdGlvbicsdSdDb2x1bW4nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J05hbWUgb2YgY29sdW1uJywpLAotKHUnX1ZhbGlkYXRpb24nLHUnRGVzY3JpcHRpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J0Rlc2NyaXB0aW9uIG9mIGNvbHVtbicsKSwKLSh1J19WYWxpZGF0aW9uJyx1J1NldCcsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnU2V0IG9mIHZhbHVlcyB0aGF0IGFyZSBwZXJtaXR0ZWQnLCksCi0odSdfVmFsaWRhdGlvbicsdSdDYXRlZ29yeScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQ7Rm9ybWF0dGVkO1RlbXBsYXRlO0NvbmRpdGlvbjtHdWlkO1BhdGg7VmVyc2lvbjtMYW5ndWFnZTtJZGVudGlmaWVyO0JpbmFyeTtVcHBlckNhc2U7TG93ZXJDYXNlO0ZpbGVuYW1lO1BhdGhzO0FueVBhdGg7V2lsZENhcmRGaWxlbmFtZTtSZWdQYXRoO0tleUZvcm1hdHRlZDtDdXN0b21Tb3VyY2U7UHJvcGVydHk7Q2FiaW5ldDtTaG9ydGN1dDtVUkwnLHUnU3RyaW5nIGNhdGVnb3J5JywpLAotKHUnX1ZhbGlkYXRpb24nLHUnS2V5Q29sdW1uJyx1J1knLDEsMzIsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb2x1bW4gdG8gd2hpY2ggZm9yZWlnbiBrZXkgY29ubmVjdHMnLCksCi0odSdfVmFsaWRhdGlvbicsdSdLZXlUYWJsZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnRm9yIGZvcmVpZ24ga2V5LCBOYW1lIG9mIHRhYmxlIHRvIHdoaWNoIGRhdGEgbXVzdCBsaW5rJywpLAotKHUnX1ZhbGlkYXRpb24nLHUnTWF4VmFsdWUnLHUnWScsLTIxNDc0ODM2NDcsMjE0NzQ4MzY0NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J01heGltdW0gdmFsdWUgYWxsb3dlZCcsKSwKLSh1J19WYWxpZGF0aW9uJyx1J01pblZhbHVlJyx1J1knLC0yMTQ3NDgzNjQ3LDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdNaW5pbXVtIHZhbHVlIGFsbG93ZWQnLCksCi0odSdfVmFsaWRhdGlvbicsdSdOdWxsYWJsZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1k7TjtAJyx1J1doZXRoZXIgdGhlIGNvbHVtbiBpcyBudWxsYWJsZScsKSwKLSh1J0FjdGlvblRleHQnLHUnRGVzY3JpcHRpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J0xvY2FsaXplZCBkZXNjcmlwdGlvbiBkaXNwbGF5ZWQgaW4gcHJvZ3Jlc3MgZGlhbG9nIGFuZCBsb2cgd2hlbiBhY3Rpb24gaXMgZXhlY3V0aW5nLicsKSwKLSh1J0FjdGlvblRleHQnLHUnQWN0aW9uJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdOYW1lIG9mIGFjdGlvbiB0byBiZSBkZXNjcmliZWQuJywpLAotKHUnQWN0aW9uVGV4dCcsdSdUZW1wbGF0ZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RlbXBsYXRlJyxOb25lLCB1J09wdGlvbmFsIGxvY2FsaXplZCBmb3JtYXQgdGVtcGxhdGUgdXNlZCB0byBmb3JtYXQgYWN0aW9uIGRhdGEgcmVjb3JkcyBmb3IgZGlzcGxheSBkdXJpbmcgYWN0aW9uIGV4ZWN1dGlvbi4nLCksCi0odSdBZG1pbkV4ZWN1dGVTZXF1ZW5jZScsdSdBY3Rpb24nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J05hbWUgb2YgYWN0aW9uIHRvIGludm9rZSwgZWl0aGVyIGluIHRoZSBlbmdpbmUgb3IgdGhlIGhhbmRsZXIgRExMLicsKSwKLSh1J0FkbWluRXhlY3V0ZVNlcXVlbmNlJyx1J0NvbmRpdGlvbicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsTm9uZSwgdSdPcHRpb25hbCBleHByZXNzaW9uIHdoaWNoIHNraXBzIHRoZSBhY3Rpb24gaWYgZXZhbHVhdGVzIHRvIGV4cEZhbHNlLklmIHRoZSBleHByZXNzaW9uIHN5bnRheCBpcyBpbnZhbGlkLCB0aGUgZW5naW5lIHdpbGwgdGVybWluYXRlLCByZXR1cm5pbmcgaWVzQmFkQWN0aW9uRGF0YS4nLCksCi0odSdBZG1pbkV4ZWN1dGVTZXF1ZW5jZScsdSdTZXF1ZW5jZScsdSdZJywtNCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J051bWJlciB0aGF0IGRldGVybWluZXMgdGhlIHNvcnQgb3JkZXIgaW4gd2hpY2ggdGhlIGFjdGlvbnMgYXJlIHRvIGJlIGV4ZWN1dGVkLiAgTGVhdmUgYmxhbmsgdG8gc3VwcHJlc3MgYWN0aW9uLicsKSwKLSh1J0NvbmRpdGlvbicsdSdDb25kaXRpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb25kaXRpb24nLE5vbmUsIHUnRXhwcmVzc2lvbiBldmFsdWF0ZWQgdG8gZGV0ZXJtaW5lIGlmIExldmVsIGluIHRoZSBGZWF0dXJlIHRhYmxlIGlzIHRvIGNoYW5nZS4nLCksCi0odSdDb25kaXRpb24nLHUnRmVhdHVyZV8nLHUnTicsTm9uZSwgTm9uZSwgdSdGZWF0dXJlJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdSZWZlcmVuY2UgdG8gYSBGZWF0dXJlIGVudHJ5IGluIEZlYXR1cmUgdGFibGUuJywpLAotKHUnQ29uZGl0aW9uJyx1J0xldmVsJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdOZXcgc2VsZWN0aW9uIExldmVsIHRvIHNldCBpbiBGZWF0dXJlIHRhYmxlIGlmIENvbmRpdGlvbiBldmFsdWF0ZXMgdG8gVFJVRS4nLCksCi0odSdBZG1pblVJU2VxdWVuY2UnLHUnQWN0aW9uJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdOYW1lIG9mIGFjdGlvbiB0byBpbnZva2UsIGVpdGhlciBpbiB0aGUgZW5naW5lIG9yIHRoZSBoYW5kbGVyIERMTC4nLCksCi0odSdBZG1pblVJU2VxdWVuY2UnLHUnQ29uZGl0aW9uJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQ29uZGl0aW9uJyxOb25lLCB1J09wdGlvbmFsIGV4cHJlc3Npb24gd2hpY2ggc2tpcHMgdGhlIGFjdGlvbiBpZiBldmFsdWF0ZXMgdG8gZXhwRmFsc2UuSWYgdGhlIGV4cHJlc3Npb24gc3ludGF4IGlzIGludmFsaWQsIHRoZSBlbmdpbmUgd2lsbCB0ZXJtaW5hdGUsIHJldHVybmluZyBpZXNCYWRBY3Rpb25EYXRhLicsKSwKLSh1J0FkbWluVUlTZXF1ZW5jZScsdSdTZXF1ZW5jZScsdSdZJywtNCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J051bWJlciB0aGF0IGRldGVybWluZXMgdGhlIHNvcnQgb3JkZXIgaW4gd2hpY2ggdGhlIGFjdGlvbnMgYXJlIHRvIGJlIGV4ZWN1dGVkLiAgTGVhdmUgYmxhbmsgdG8gc3VwcHJlc3MgYWN0aW9uLicsKSwKLSh1J0FkdnRFeGVjdXRlU2VxdWVuY2UnLHUnQWN0aW9uJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdOYW1lIG9mIGFjdGlvbiB0byBpbnZva2UsIGVpdGhlciBpbiB0aGUgZW5naW5lIG9yIHRoZSBoYW5kbGVyIERMTC4nLCksCi0odSdBZHZ0RXhlY3V0ZVNlcXVlbmNlJyx1J0NvbmRpdGlvbicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsTm9uZSwgdSdPcHRpb25hbCBleHByZXNzaW9uIHdoaWNoIHNraXBzIHRoZSBhY3Rpb24gaWYgZXZhbHVhdGVzIHRvIGV4cEZhbHNlLklmIHRoZSBleHByZXNzaW9uIHN5bnRheCBpcyBpbnZhbGlkLCB0aGUgZW5naW5lIHdpbGwgdGVybWluYXRlLCByZXR1cm5pbmcgaWVzQmFkQWN0aW9uRGF0YS4nLCksCi0odSdBZHZ0RXhlY3V0ZVNlcXVlbmNlJyx1J1NlcXVlbmNlJyx1J1knLC00LDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTnVtYmVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc29ydCBvcmRlciBpbiB3aGljaCB0aGUgYWN0aW9ucyBhcmUgdG8gYmUgZXhlY3V0ZWQuICBMZWF2ZSBibGFuayB0byBzdXBwcmVzcyBhY3Rpb24uJywpLAotKHUnQWR2dFVJU2VxdWVuY2UnLHUnQWN0aW9uJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdOYW1lIG9mIGFjdGlvbiB0byBpbnZva2UsIGVpdGhlciBpbiB0aGUgZW5naW5lIG9yIHRoZSBoYW5kbGVyIERMTC4nLCksCi0odSdBZHZ0VUlTZXF1ZW5jZScsdSdDb25kaXRpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb25kaXRpb24nLE5vbmUsIHUnT3B0aW9uYWwgZXhwcmVzc2lvbiB3aGljaCBza2lwcyB0aGUgYWN0aW9uIGlmIGV2YWx1YXRlcyB0byBleHBGYWxzZS5JZiB0aGUgZXhwcmVzc2lvbiBzeW50YXggaXMgaW52YWxpZCwgdGhlIGVuZ2luZSB3aWxsIHRlcm1pbmF0ZSwgcmV0dXJuaW5nIGllc0JhZEFjdGlvbkRhdGEuJywpLAotKHUnQWR2dFVJU2VxdWVuY2UnLHUnU2VxdWVuY2UnLHUnWScsLTQsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdOdW1iZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSBzb3J0IG9yZGVyIGluIHdoaWNoIHRoZSBhY3Rpb25zIGFyZSB0byBiZSBleGVjdXRlZC4gIExlYXZlIGJsYW5rIHRvIHN1cHByZXNzIGFjdGlvbi4nLCksCi0odSdBcHBJZCcsdSdBcHBJZCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0d1aWQnLE5vbmUsIE5vbmUsICksCi0odSdBcHBJZCcsdSdBY3RpdmF0ZUF0U3RvcmFnZScsdSdZJywwLDEsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgKSwKLSh1J0FwcElkJyx1J0RsbFN1cnJvZ2F0ZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIE5vbmUsICksCi0odSdBcHBJZCcsdSdMb2NhbFNlcnZpY2UnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCBOb25lLCApLAotKHUnQXBwSWQnLHUnUmVtb3RlU2VydmVyTmFtZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgTm9uZSwgKSwKLSh1J0FwcElkJyx1J1J1bkFzSW50ZXJhY3RpdmVVc2VyJyx1J1knLDAsMSxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCApLAotKHUnQXBwSWQnLHUnU2VydmljZVBhcmFtZXRlcnMnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCBOb25lLCApLAotKHUnQXBwU2VhcmNoJyx1J1Byb3BlcnR5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdUaGUgcHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIGEgU2lnbmF0dXJlJywpLAotKHUnQXBwU2VhcmNoJyx1J1NpZ25hdHVyZV8nLHUnTicsTm9uZSwgTm9uZSwgdSdTaWduYXR1cmU7UmVnTG9jYXRvcjtJbmlMb2NhdG9yO0RyTG9jYXRvcjtDb21wTG9jYXRvcicsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnVGhlIFNpZ25hdHVyZV8gcmVwcmVzZW50cyBhIHVuaXF1ZSBmaWxlIHNpZ25hdHVyZSBhbmQgaXMgYWxzbyB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIFNpZ25hdHVyZSwgIFJlZ0xvY2F0b3IsIEluaUxvY2F0b3IsIENvbXBMb2NhdG9yIGFuZCB0aGUgRHJMb2NhdG9yIHRhYmxlcy4nLCksCi0odSdQcm9wZXJ0eScsdSdQcm9wZXJ0eScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnTmFtZSBvZiBwcm9wZXJ0eSwgdXBwZXJjYXNlIGlmIHNldHRhYmxlIGJ5IGxhdW5jaGVyIG9yIGxvYWRlci4nLCksCi0odSdQcm9wZXJ0eScsdSdWYWx1ZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnU3RyaW5nIHZhbHVlIGZvciBwcm9wZXJ0eS4gIE5ldmVyIG51bGwgb3IgZW1wdHkuJywpLAotKHUnQkJDb250cm9sJyx1J1R5cGUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1RoZSB0eXBlIG9mIHRoZSBjb250cm9sLicsKSwKLSh1J0JCQ29udHJvbCcsdSdZJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdWZXJ0aWNhbCBjb29yZGluYXRlIG9mIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLicsKSwKLSh1J0JCQ29udHJvbCcsdSdUZXh0Jyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdBIHN0cmluZyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB0ZXh0IGNvbnRhaW5lZCB3aXRoaW4gYSBjb250cm9sIChpZiBhcHByb3ByaWF0ZSkuJywpLAotKHUnQkJDb250cm9sJyx1J0JCQ29udHJvbCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnTmFtZSBvZiB0aGUgY29udHJvbC4gVGhpcyBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGJpbGxib2FyZCwgYnV0IGNhbiByZXBlYXQgb24gZGlmZmVyZW50IGJpbGxib2FyZC4nLCksCi0odSdCQkNvbnRyb2wnLHUnQXR0cmlidXRlcycsdSdZJywwLDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIDMyLWJpdCB3b3JkIHRoYXQgc3BlY2lmaWVzIHRoZSBhdHRyaWJ1dGUgZmxhZ3MgdG8gYmUgYXBwbGllZCB0byB0aGlzIGNvbnRyb2wuJywpLAotKHUnQkJDb250cm9sJyx1J0JpbGxib2FyZF8nLHUnTicsTm9uZSwgTm9uZSwgdSdCaWxsYm9hcmQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0V4dGVybmFsIGtleSB0byB0aGUgQmlsbGJvYXJkIHRhYmxlLCBuYW1lIG9mIHRoZSBiaWxsYm9hcmQuJywpLAotKHUnQkJDb250cm9sJyx1J0hlaWdodCcsdSdOJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSGVpZ2h0IG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuJywpLAotKHUnQkJDb250cm9sJyx1J1dpZHRoJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdXaWR0aCBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLicsKSwKLSh1J0JCQ29udHJvbCcsdSdYJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdIb3Jpem9udGFsIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuJywpLAotKHUnQmlsbGJvYXJkJyx1J0FjdGlvbicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnVGhlIG5hbWUgb2YgYW4gYWN0aW9uLiBUaGUgYmlsbGJvYXJkIGlzIGRpc3BsYXllZCBkdXJpbmcgdGhlIHByb2dyZXNzIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gdGhpcyBhY3Rpb24uJywpLAotKHUnQmlsbGJvYXJkJyx1J0JpbGxib2FyZCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnTmFtZSBvZiB0aGUgYmlsbGJvYXJkLicsKSwKLSh1J0JpbGxib2FyZCcsdSdGZWF0dXJlXycsdSdOJyxOb25lLCBOb25lLCB1J0ZlYXR1cmUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0FuIGV4dGVybmFsIGtleSB0byB0aGUgRmVhdHVyZSBUYWJsZS4gVGhlIGJpbGxib2FyZCBpcyBzaG93biBvbmx5IGlmIHRoaXMgZmVhdHVyZSBpcyBiZWluZyBpbnN0YWxsZWQuJywpLAotKHUnQmlsbGJvYXJkJyx1J09yZGVyaW5nJyx1J1knLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIHBvc2l0aXZlIGludGVnZXIuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYmlsbGJvYXJkIGNvcnJlc3BvbmRpbmcgdG8gYW4gYWN0aW9uIHRoZXkgd2lsbCBiZSBzaG93biBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGlzIGNvbHVtbi4nLCksCi0odSdGZWF0dXJlJyx1J0Rlc2NyaXB0aW9uJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdMb25nZXIgZGVzY3JpcHRpdmUgdGV4dCBkZXNjcmliaW5nIGEgdmlzaWJsZSBmZWF0dXJlIGl0ZW0uJywpLAotKHUnRmVhdHVyZScsdSdBdHRyaWJ1dGVzJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnMDsxOzI7NDs1OzY7ODs5OzEwOzE2OzE3OzE4OzIwOzIxOzIyOzI0OzI1OzI2OzMyOzMzOzM0OzM2OzM3OzM4OzQ4OzQ5OzUwOzUyOzUzOzU0Jyx1J0ZlYXR1cmUgYXR0cmlidXRlcycsKSwKLSh1J0ZlYXR1cmUnLHUnRmVhdHVyZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnUHJpbWFyeSBrZXkgdXNlZCB0byBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZmVhdHVyZSByZWNvcmQuJywpLAotKHUnRmVhdHVyZScsdSdEaXJlY3RvcnlfJyx1J1knLE5vbmUsIE5vbmUsIHUnRGlyZWN0b3J5JywxLHUnVXBwZXJDYXNlJyxOb25lLCB1J1RoZSBuYW1lIG9mIHRoZSBEaXJlY3RvcnkgdGhhdCBjYW4gYmUgY29uZmlndXJlZCBieSB0aGUgVUkuIEEgbm9uLW51bGwgdmFsdWUgd2lsbCBlbmFibGUgdGhlIGJyb3dzZSBidXR0b24uJywpLAotKHUnRmVhdHVyZScsdSdMZXZlbCcsdSdOJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGluc3RhbGwgbGV2ZWwgYXQgd2hpY2ggcmVjb3JkIHdpbGwgYmUgaW5pdGlhbGx5IHNlbGVjdGVkLiBBbiBpbnN0YWxsIGxldmVsIG9mIDAgd2lsbCBkaXNhYmxlIGFuIGl0ZW0gYW5kIHByZXZlbnQgaXRzIGRpc3BsYXkuJywpLAotKHUnRmVhdHVyZScsdSdUaXRsZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnU2hvcnQgdGV4dCBpZGVudGlmeWluZyBhIHZpc2libGUgZmVhdHVyZSBpdGVtLicsKSwKLSh1J0ZlYXR1cmUnLHUnRGlzcGxheScsdSdZJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTnVtZXJpYyBzb3J0IG9yZGVyLCB1c2VkIHRvIGZvcmNlIGEgc3BlY2lmaWMgZGlzcGxheSBvcmRlcmluZy4nLCksCi0odSdGZWF0dXJlJyx1J0ZlYXR1cmVfUGFyZW50Jyx1J1knLE5vbmUsIE5vbmUsIHUnRmVhdHVyZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnT3B0aW9uYWwga2V5IG9mIGEgcGFyZW50IHJlY29yZCBpbiB0aGUgc2FtZSB0YWJsZS4gSWYgdGhlIHBhcmVudCBpcyBub3Qgc2VsZWN0ZWQsIHRoZW4gdGhlIHJlY29yZCB3aWxsIG5vdCBiZSBpbnN0YWxsZWQuIE51bGwgaW5kaWNhdGVzIGEgcm9vdCBpdGVtLicsKSwKLSh1J0JpbmFyeScsdSdOYW1lJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdVbmlxdWUga2V5IGlkZW50aWZ5aW5nIHRoZSBiaW5hcnkgZGF0YS4nLCksCi0odSdCaW5hcnknLHUnRGF0YScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0JpbmFyeScsTm9uZSwgdSdUaGUgdW5mb3JtYXR0ZWQgYmluYXJ5IGRhdGEuJywpLAotKHUnQmluZEltYWdlJyx1J0ZpbGVfJyx1J04nLE5vbmUsIE5vbmUsIHUnRmlsZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnVGhlIGluZGV4IGludG8gdGhlIEZpbGUgdGFibGUuIFRoaXMgbXVzdCBiZSBhbiBleGVjdXRhYmxlIGZpbGUuJywpLAotKHUnQmluZEltYWdlJyx1J1BhdGgnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdQYXRocycsTm9uZSwgdSdBIGxpc3Qgb2YgOyAgZGVsaW1pdGVkIHBhdGhzIHRoYXQgcmVwcmVzZW50IHRoZSBwYXRocyB0byBiZSBzZWFyY2hlZCBmb3IgdGhlIGltcG9ydCBETExTLiBUaGUgbGlzdCBpcyB1c3VhbGx5IGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGVhY2ggZW5jbG9zZWQgd2l0aGluIHNxdWFyZSBicmFja2V0cyBbXSAuJywpLAotKHUnRmlsZScsdSdTZXF1ZW5jZScsdSdOJywxLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnU2VxdWVuY2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBtZWRpYSBpbWFnZXM7IG9yZGVyIG11c3QgdHJhY2sgY2FiaW5ldCBvcmRlci4nLCksCi0odSdGaWxlJyx1J0F0dHJpYnV0ZXMnLHUnWScsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ludGVnZXIgY29udGFpbmluZyBiaXQgZmxhZ3MgcmVwcmVzZW50aW5nIGZpbGUgYXR0cmlidXRlcyAod2l0aCB0aGUgZGVjaW1hbCB2YWx1ZSBvZiBlYWNoIGJpdCBwb3NpdGlvbiBpbiBwYXJlbnRoZXNlcyknLCksCi0odSdGaWxlJyx1J0ZpbGUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5LCBub24tbG9jYWxpemVkIHRva2VuLCBtdXN0IG1hdGNoIGlkZW50aWZpZXIgaW4gY2FiaW5ldC4gIEZvciB1bmNvbXByZXNzZWQgZmlsZXMsIHRoaXMgZmllbGQgaXMgaWdub3JlZC4nLCksCi0odSdGaWxlJyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIENvbXBvbmVudCB0aGF0IGNvbnRyb2xzIHRoZSBmaWxlLicsKSwKLSh1J0ZpbGUnLHUnRmlsZU5hbWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsTm9uZSwgdSdGaWxlIG5hbWUgdXNlZCBmb3IgaW5zdGFsbGF0aW9uLCBtYXkgYmUgbG9jYWxpemVkLiAgVGhpcyBtYXkgY29udGFpbiBhICJzaG9ydCBuYW1lfGxvbmcgbmFtZSIgcGFpci4nLCksCi0odSdGaWxlJyx1J0ZpbGVTaXplJyx1J04nLDAsMjE0NzQ4MzY0NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1NpemUgb2YgZmlsZSBpbiBieXRlcyAobG9uZyBpbnRlZ2VyKS4nLCksCi0odSdGaWxlJyx1J0xhbmd1YWdlJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTGFuZ3VhZ2UnLE5vbmUsIHUnTGlzdCBvZiBkZWNpbWFsIGxhbmd1YWdlIElkcywgY29tbWEtc2VwYXJhdGVkIGlmIG1vcmUgdGhhbiBvbmUuJywpLAotKHUnRmlsZScsdSdWZXJzaW9uJyx1J1knLE5vbmUsIE5vbmUsIHUnRmlsZScsMSx1J1ZlcnNpb24nLE5vbmUsIHUnVmVyc2lvbiBzdHJpbmcgZm9yIHZlcnNpb25lZCBmaWxlczsgIEJsYW5rIGZvciB1bnZlcnNpb25lZCBmaWxlcy4nLCksCi0odSdDQ1BTZWFyY2gnLHUnU2lnbmF0dXJlXycsdSdOJyxOb25lLCBOb25lLCB1J1NpZ25hdHVyZTtSZWdMb2NhdG9yO0luaUxvY2F0b3I7RHJMb2NhdG9yO0NvbXBMb2NhdG9yJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdUaGUgU2lnbmF0dXJlXyByZXByZXNlbnRzIGEgdW5pcXVlIGZpbGUgc2lnbmF0dXJlIGFuZCBpcyBhbHNvIHRoZSBmb3JlaWduIGtleSBpbiB0aGUgU2lnbmF0dXJlLCAgUmVnTG9jYXRvciwgSW5pTG9jYXRvciwgQ29tcExvY2F0b3IgYW5kIHRoZSBEckxvY2F0b3IgdGFibGVzLicsKSwKLSh1J0NoZWNrQm94Jyx1J1Byb3BlcnR5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdBIG5hbWVkIHByb3BlcnR5IHRvIGJlIHRpZWQgdG8gdGhlIGl0ZW0uJywpLAotKHUnQ2hlY2tCb3gnLHUnVmFsdWUnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIHZhbHVlIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZW0uJywpLAotKHUnQ2xhc3MnLHUnRGVzY3JpcHRpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J0xvY2FsaXplZCBkZXNjcmlwdGlvbiBmb3IgdGhlIENsYXNzLicsKSwKLSh1J0NsYXNzJyx1J0F0dHJpYnV0ZXMnLHUnWScsTm9uZSwgMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDbGFzcyByZWdpc3RyYXRpb24gYXR0cmlidXRlcy4nLCksCi0odSdDbGFzcycsdSdGZWF0dXJlXycsdSdOJyxOb25lLCBOb25lLCB1J0ZlYXR1cmUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J1JlcXVpcmVkIGZvcmVpZ24ga2V5IGludG8gdGhlIEZlYXR1cmUgVGFibGUsIHNwZWNpZnlpbmcgdGhlIGZlYXR1cmUgdG8gdmFsaWRhdGUgb3IgaW5zdGFsbCBpbiBvcmRlciBmb3IgdGhlIENMU0lEIGZhY3RvcnkgdG8gYmUgb3BlcmF0aW9uYWwuJywpLAotKHUnQ2xhc3MnLHUnQXBwSWRfJyx1J1knLE5vbmUsIE5vbmUsIHUnQXBwSWQnLDEsdSdHdWlkJyxOb25lLCB1J09wdGlvbmFsIEFwcElEIGNvbnRhaW5pbmcgRENPTSBpbmZvcm1hdGlvbiBmb3IgYXNzb2NpYXRlZCBhcHBsaWNhdGlvbiAoc3RyaW5nIEdVSUQpLicsKSwKLSh1J0NsYXNzJyx1J0FyZ3VtZW50Jyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J29wdGlvbmFsIGFyZ3VtZW50IGZvciBMb2NhbFNlcnZlcnMuJywpLAotKHUnQ2xhc3MnLHUnQ0xTSUQnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdHdWlkJyxOb25lLCB1J1RoZSBDTFNJRCBvZiBhbiBPTEUgZmFjdG9yeS4nLCksCi0odSdDbGFzcycsdSdDb21wb25lbnRfJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdSZXF1aXJlZCBmb3JlaWduIGtleSBpbnRvIHRoZSBDb21wb25lbnQgVGFibGUsIHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBmb3Igd2hpY2ggdG8gcmV0dXJuIGEgcGF0aCB3aGVuIGNhbGxlZCB0aHJvdWdoIExvY2F0ZUNvbXBvbmVudC4nLCksCi0odSdDbGFzcycsdSdDb250ZXh0Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdUaGUgbnVtZXJpYyBzZXJ2ZXIgY29udGV4dCBmb3IgdGhpcyBzZXJ2ZXIuIENMU0NUWF94eHh4JywpLAotKHUnQ2xhc3MnLHUnRGVmSW5wcm9jSGFuZGxlcicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ZpbGVuYW1lJyx1JzE7MjszJyx1J09wdGlvbmFsIGRlZmF1bHQgaW5wcm9jIGhhbmRsZXIuICBPbmx5IG9wdGlvbmFsbHkgcHJvdmlkZWQgaWYgQ29udGV4dD1DTFNDVFhfTE9DQUxfU0VSVkVSLiAgVHlwaWNhbGx5ICJvbGUzMi5kbGwiIG9yICJtYXBpMzIuZGxsIicsKSwKLSh1J0NsYXNzJyx1J0ZpbGVUeXBlTWFzaycsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnT3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBIS0NSdGhpcyBDTFNJRCkga2V5LiBJZiBtdWx0aXBsZSBwYXR0ZXJucyBleGlzdCwgdGhleSBtdXN0IGJlIGRlbGltaXRlZCBieSBhIHNlbWljb2xvbiwgYW5kIG51bWVyaWMgc3Via2V5cyB3aWxsIGJlIGdlbmVyYXRlZDogMCwxLDIuLi4nLCksCi0odSdDbGFzcycsdSdJY29uXycsdSdZJyxOb25lLCBOb25lLCB1J0ljb24nLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J09wdGlvbmFsIGZvcmVpZ24ga2V5IGludG8gdGhlIEljb24gVGFibGUsIHNwZWNpZnlpbmcgdGhlIGljb24gZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBDTFNJRC4gV2lsbCBiZSB3cml0dGVuIHVuZGVyIHRoZSBEZWZhdWx0SWNvbiBrZXkuJywpLAotKHUnQ2xhc3MnLHUnSWNvbkluZGV4Jyx1J1knLC0zMjc2NywzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J09wdGlvbmFsIGljb24gaW5kZXguJywpLAotKHUnQ2xhc3MnLHUnUHJvZ0lkX0RlZmF1bHQnLHUnWScsTm9uZSwgTm9uZSwgdSdQcm9nSWQnLDEsdSdUZXh0JyxOb25lLCB1J09wdGlvbmFsIFByb2dJZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBDTFNJRC4nLCksCi0odSdDb21wb25lbnQnLHUnQ29uZGl0aW9uJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQ29uZGl0aW9uJyxOb25lLCB1IkEgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRoYXQgd2lsbCBkaXNhYmxlIHRoaXMgY29tcG9uZW50IGlmIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0aGUgJ1RydWUnIHN0YXRlLiBJZiBhIGNvbXBvbmVudCBpcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgYmUgaW5zdGFsbGVkLCByZWdhcmRsZXNzIG9mIHRoZSAnQWN0aW9uJyBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudC4iLCksCi0odSdDb21wb25lbnQnLHUnQXR0cmlidXRlcycsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1JlbW90ZSBleGVjdXRpb24gb3B0aW9uLCBvbmUgb2YgaXJzRW51bScsKSwKLSh1J0NvbXBvbmVudCcsdSdDb21wb25lbnQnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5IHVzZWQgdG8gaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGNvbXBvbmVudCByZWNvcmQuJywpLAotKHUnQ29tcG9uZW50Jyx1J0NvbXBvbmVudElkJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnR3VpZCcsTm9uZSwgdSdBIHN0cmluZyBHVUlEIHVuaXF1ZSB0byB0aGlzIGNvbXBvbmVudCwgdmVyc2lvbiwgYW5kIGxhbmd1YWdlLicsKSwKLSh1J0NvbXBvbmVudCcsdSdEaXJlY3RvcnlfJyx1J04nLE5vbmUsIE5vbmUsIHUnRGlyZWN0b3J5JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdSZXF1aXJlZCBrZXkgb2YgYSBEaXJlY3RvcnkgdGFibGUgcmVjb3JkLiBUaGlzIGlzIGFjdHVhbGx5IGEgcHJvcGVydHkgbmFtZSB3aG9zZSB2YWx1ZSBjb250YWlucyB0aGUgYWN0dWFsIHBhdGgsIHNldCBlaXRoZXIgYnkgdGhlIEFwcFNlYXJjaCBhY3Rpb24gb3Igd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9idGFpbmVkIGZyb20gdGhlIERpcmVjdG9yeSB0YWJsZS4nLCksCi0odSdDb21wb25lbnQnLHUnS2V5UGF0aCcsdSdZJyxOb25lLCBOb25lLCB1J0ZpbGU7UmVnaXN0cnk7T0RCQ0RhdGFTb3VyY2UnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0VpdGhlciB0aGUgcHJpbWFyeSBrZXkgaW50byB0aGUgRmlsZSB0YWJsZSwgUmVnaXN0cnkgdGFibGUsIG9yIE9EQkNEYXRhU291cmNlIHRhYmxlLiBUaGlzIGV4dHJhY3QgcGF0aCBpcyBzdG9yZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluc3RhbGxlZCwgYW5kIGlzIHVzZWQgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiB0aGUgY29tcG9uZW50IGFuZCB0byByZXR1cm4gdGhlIHBhdGggdG8gaXQuJywpLAotKHUnSWNvbicsdSdOYW1lJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdQcmltYXJ5IGtleS4gTmFtZSBvZiB0aGUgaWNvbiBmaWxlLicsKSwKLSh1J0ljb24nLHUnRGF0YScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0JpbmFyeScsTm9uZSwgdSdCaW5hcnkgc3RyZWFtLiBUaGUgYmluYXJ5IGljb24gZGF0YSBpbiBQRSAoLkRMTCBvciAuRVhFKSBvciBpY29uICguSUNPKSBmb3JtYXQuJywpLAotKHUnUHJvZ0lkJyx1J0Rlc2NyaXB0aW9uJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdMb2NhbGl6ZWQgZGVzY3JpcHRpb24gZm9yIHRoZSBQcm9ncmFtIGlkZW50aWZpZXIuJywpLAotKHUnUHJvZ0lkJyx1J0ljb25fJyx1J1knLE5vbmUsIE5vbmUsIHUnSWNvbicsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnT3B0aW9uYWwgZm9yZWlnbiBrZXkgaW50byB0aGUgSWNvbiBUYWJsZSwgc3BlY2lmeWluZyB0aGUgaWNvbiBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFByb2dJZC4gV2lsbCBiZSB3cml0dGVuIHVuZGVyIHRoZSBEZWZhdWx0SWNvbiBrZXkuJywpLAotKHUnUHJvZ0lkJyx1J0ljb25JbmRleCcsdSdZJywtMzI3NjcsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdPcHRpb25hbCBpY29uIGluZGV4LicsKSwKLSh1J1Byb2dJZCcsdSdQcm9nSWQnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoZSBQcm9ncmFtIElkZW50aWZpZXIuIFByaW1hcnkga2V5LicsKSwKLSh1J1Byb2dJZCcsdSdDbGFzc18nLHUnWScsTm9uZSwgTm9uZSwgdSdDbGFzcycsMSx1J0d1aWQnLE5vbmUsIHUnVGhlIENMU0lEIG9mIGFuIE9MRSBmYWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFByb2dJZC4nLCksCi0odSdQcm9nSWQnLHUnUHJvZ0lkX1BhcmVudCcsdSdZJyxOb25lLCBOb25lLCB1J1Byb2dJZCcsMSx1J1RleHQnLE5vbmUsIHUnVGhlIFBhcmVudCBQcm9ncmFtIElkZW50aWZpZXIuIElmIHNwZWNpZmllZCwgdGhlIFByb2dJZCBjb2x1bW4gYmVjb21lcyBhIHZlcnNpb24gaW5kZXBlbmRlbnQgcHJvZyBpZC4nLCksCi0odSdDb21ib0JveCcsdSdUZXh0Jyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J1RoZSB2aXNpYmxlIHRleHQgdG8gYmUgYXNzaWduZWQgdG8gdGhlIGl0ZW0uIE9wdGlvbmFsLiBJZiB0aGlzIGVudHJ5IG9yIHRoZSBlbnRpcmUgY29sdW1uIGlzIG1pc3NpbmcsIHRoZSB0ZXh0IGlzIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZS4nLCksCi0odSdDb21ib0JveCcsdSdQcm9wZXJ0eScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnQSBuYW1lZCBwcm9wZXJ0eSB0byBiZSB0aWVkIHRvIHRoaXMgaXRlbS4gQWxsIHRoZSBpdGVtcyB0aWVkIHRvIHRoZSBzYW1lIHByb3BlcnR5IGJlY29tZSBwYXJ0IG9mIHRoZSBzYW1lIGNvbWJvYm94LicsKSwKLSh1J0NvbWJvQm94Jyx1J1ZhbHVlJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J1RoZSB2YWx1ZSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlbS4gU2VsZWN0aW5nIHRoZSBsaW5lIHdpbGwgc2V0IHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IHRvIHRoaXMgdmFsdWUuJywpLAotKHUnQ29tYm9Cb3gnLHUnT3JkZXInLHUnTicsMSwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgcG9zaXRpdmUgaW50ZWdlciB1c2VkIHRvIGRldGVybWluZSB0aGUgb3JkZXJpbmcgb2YgdGhlIGl0ZW1zIHdpdGhpbiBvbmUgbGlzdC5cdFRoZSBpbnRlZ2VycyBkbyBub3QgaGF2ZSB0byBiZSBjb25zZWN1dGl2ZS4nLCksCi0odSdDb21wTG9jYXRvcicsdSdUeXBlJyx1J1knLDAsMSxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgYm9vbGVhbiB2YWx1ZSB0aGF0IGRldGVybWluZXMgaWYgdGhlIHJlZ2lzdHJ5IHZhbHVlIGlzIGEgZmlsZW5hbWUgb3IgYSBkaXJlY3RvcnkgbG9jYXRpb24uJywpLAotKHUnQ29tcExvY2F0b3InLHUnU2lnbmF0dXJlXycsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnVGhlIHRhYmxlIGtleS4gVGhlIFNpZ25hdHVyZV8gcmVwcmVzZW50cyBhIHVuaXF1ZSBmaWxlIHNpZ25hdHVyZSBhbmQgaXMgYWxzbyB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIFNpZ25hdHVyZSB0YWJsZS4nLCksCi0odSdDb21wTG9jYXRvcicsdSdDb21wb25lbnRJZCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0d1aWQnLE5vbmUsIHUnQSBzdHJpbmcgR1VJRCB1bmlxdWUgdG8gdGhpcyBjb21wb25lbnQsIHZlcnNpb24sIGFuZCBsYW5ndWFnZS4nLCksCi0odSdDb21wbHVzJyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIENvbXBvbmVudCB0aGF0IGNvbnRyb2xzIHRoZSBDb21QbHVzIGNvbXBvbmVudC4nLCksCi0odSdDb21wbHVzJyx1J0V4cFR5cGUnLHUnWScsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbVBsdXMgY29tcG9uZW50IGF0dHJpYnV0ZXMuJywpLAotKHUnRGlyZWN0b3J5Jyx1J0RpcmVjdG9yeScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnVW5pcXVlIGlkZW50aWZpZXIgZm9yIGRpcmVjdG9yeSBlbnRyeSwgcHJpbWFyeSBrZXkuIElmIGEgcHJvcGVydHkgYnkgdGhpcyBuYW1lIGlzIGRlZmluZWQsIGl0IGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRpcmVjdG9yeS4nLCksCi0odSdEaXJlY3RvcnknLHUnRGVmYXVsdERpcicsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0RlZmF1bHREaXInLE5vbmUsIHUiVGhlIGRlZmF1bHQgc3ViLXBhdGggdW5kZXIgcGFyZW50J3MgcGF0aC4iLCksCi0odSdEaXJlY3RvcnknLHUnRGlyZWN0b3J5X1BhcmVudCcsdSdZJyxOb25lLCBOb25lLCB1J0RpcmVjdG9yeScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUmVmZXJlbmNlIHRvIHRoZSBlbnRyeSBpbiB0aGlzIHRhYmxlIHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQgcGFyZW50IGRpcmVjdG9yeS4gQSByZWNvcmQgcGFyZW50ZWQgdG8gaXRzZWxmIG9yIHdpdGggYSBOdWxsIHBhcmVudCByZXByZXNlbnRzIGEgcm9vdCBvZiB0aGUgaW5zdGFsbCB0cmVlLicsKSwKLSh1J0NvbnRyb2wnLHUnVHlwZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnVGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wuJywpLAotKHUnQ29udHJvbCcsdSdZJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdWZXJ0aWNhbCBjb29yZGluYXRlIG9mIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLicsKSwKLSh1J0NvbnRyb2wnLHUnVGV4dCcsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdBIHN0cmluZyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB0ZXh0IGNvbnRhaW5lZCB3aXRoaW4gYSBjb250cm9sIChpZiBhcHByb3ByaWF0ZSkuJywpLAotKHUnQ29udHJvbCcsdSdQcm9wZXJ0eScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnVGhlIG5hbWUgb2YgYSBkZWZpbmVkIHByb3BlcnR5IHRvIGJlIGxpbmtlZCB0byB0aGlzIGNvbnRyb2wuICcsKSwKLSh1J0NvbnRyb2wnLHUnQXR0cmlidXRlcycsdSdZJywwLDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIDMyLWJpdCB3b3JkIHRoYXQgc3BlY2lmaWVzIHRoZSBhdHRyaWJ1dGUgZmxhZ3MgdG8gYmUgYXBwbGllZCB0byB0aGlzIGNvbnRyb2wuJywpLAotKHUnQ29udHJvbCcsdSdIZWlnaHQnLHUnTicsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0hlaWdodCBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLicsKSwKLSh1J0NvbnRyb2wnLHUnV2lkdGgnLHUnTicsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1dpZHRoIG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuJywpLAotKHUnQ29udHJvbCcsdSdYJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdIb3Jpem9udGFsIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuJywpLAotKHUnQ29udHJvbCcsdSdDb250cm9sJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdOYW1lIG9mIHRoZSBjb250cm9sLiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgZGlhbG9nLCBidXQgY2FuIHJlcGVhdCBvbiBkaWZmZXJlbnQgZGlhbG9ncy4gJywpLAotKHUnQ29udHJvbCcsdSdDb250cm9sX05leHQnLHUnWScsTm9uZSwgTm9uZSwgdSdDb250cm9sJywyLHUnSWRlbnRpZmllcicsTm9uZSwgdSdUaGUgbmFtZSBvZiBhbiBvdGhlciBjb250cm9sIG9uIHRoZSBzYW1lIGRpYWxvZy4gVGhpcyBsaW5rIGRlZmluZXMgdGhlIHRhYiBvcmRlciBvZiB0aGUgY29udHJvbHMuIFRoZSBsaW5rcyBoYXZlIHRvIGZvcm0gb25lIG9yIG1vcmUgY3ljbGVzIScsKSwKLSh1J0NvbnRyb2wnLHUnRGlhbG9nXycsdSdOJyxOb25lLCBOb25lLCB1J0RpYWxvZycsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnRXh0ZXJuYWwga2V5IHRvIHRoZSBEaWFsb2cgdGFibGUsIG5hbWUgb2YgdGhlIGRpYWxvZy4nLCksCi0odSdDb250cm9sJyx1J0hlbHAnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoZSBoZWxwIHN0cmluZ3MgdXNlZCB3aXRoIHRoZSBidXR0b24uIFRoZSB0ZXh0IGlzIG9wdGlvbmFsLiAnLCksCi0odSdEaWFsb2cnLHUnQXR0cmlidXRlcycsdSdZJywwLDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIDMyLWJpdCB3b3JkIHRoYXQgc3BlY2lmaWVzIHRoZSBhdHRyaWJ1dGUgZmxhZ3MgdG8gYmUgYXBwbGllZCB0byB0aGlzIGRpYWxvZy4nLCksCi0odSdEaWFsb2cnLHUnSGVpZ2h0Jyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdIZWlnaHQgb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgZGlhbG9nLicsKSwKLSh1J0RpYWxvZycsdSdXaWR0aCcsdSdOJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnV2lkdGggb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgZGlhbG9nLicsKSwKLSh1J0RpYWxvZycsdSdEaWFsb2cnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J05hbWUgb2YgdGhlIGRpYWxvZy4nLCksCi0odSdEaWFsb2cnLHUnQ29udHJvbF9DYW5jZWwnLHUnWScsTm9uZSwgTm9uZSwgdSdDb250cm9sJywyLHUnSWRlbnRpZmllcicsTm9uZSwgdSdEZWZpbmVzIHRoZSBjYW5jZWwgY29udHJvbC4gSGl0dGluZyBlc2NhcGUgb3IgY2xpY2tpbmcgb24gdGhlIGNsb3NlIGljb24gb24gdGhlIGRpYWxvZyBpcyBlcXVpdmFsZW50IHRvIHB1c2hpbmcgdGhpcyBidXR0b24uJywpLAotKHUnRGlhbG9nJyx1J0NvbnRyb2xfRGVmYXVsdCcsdSdZJyxOb25lLCBOb25lLCB1J0NvbnRyb2wnLDIsdSdJZGVudGlmaWVyJyxOb25lLCB1J0RlZmluZXMgdGhlIGRlZmF1bHQgY29udHJvbC4gSGl0dGluZyByZXR1cm4gaXMgZXF1aXZhbGVudCB0byBwdXNoaW5nIHRoaXMgYnV0dG9uLicsKSwKLSh1J0RpYWxvZycsdSdDb250cm9sX0ZpcnN0Jyx1J04nLE5vbmUsIE5vbmUsIHUnQ29udHJvbCcsMix1J0lkZW50aWZpZXInLE5vbmUsIHUnRGVmaW5lcyB0aGUgY29udHJvbCB0aGF0IGhhcyB0aGUgZm9jdXMgd2hlbiB0aGUgZGlhbG9nIGlzIGNyZWF0ZWQuJywpLAotKHUnRGlhbG9nJyx1J0hDZW50ZXJpbmcnLHUnTicsMCwxMDAsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdIb3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cgb24gYSAwLTEwMCBzY2FsZS4gMCBtZWFucyBsZWZ0IGVuZCwgMTAwIG1lYW5zIHJpZ2h0IGVuZCBvZiB0aGUgc2NyZWVuLCA1MCBjZW50ZXIuJywpLAotKHUnRGlhbG9nJyx1J1RpdGxlJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1IkEgdGV4dCBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdGl0bGUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0aXRsZSBiYXIgb2YgdGhlIGRpYWxvZydzIHdpbmRvdy4iLCksCi0odSdEaWFsb2cnLHUnVkNlbnRlcmluZycsdSdOJywwLDEwMCxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1ZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cgb24gYSAwLTEwMCBzY2FsZS4gMCBtZWFucyB0b3AgZW5kLCAxMDAgbWVhbnMgYm90dG9tIGVuZCBvZiB0aGUgc2NyZWVuLCA1MCBjZW50ZXIuJywpLAotKHUnQ29udHJvbENvbmRpdGlvbicsdSdBY3Rpb24nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdEZWZhdWx0O0Rpc2FibGU7RW5hYmxlO0hpZGU7U2hvdycsdSdUaGUgZGVzaXJlZCBhY3Rpb24gdG8gYmUgdGFrZW4gb24gdGhlIHNwZWNpZmllZCBjb250cm9sLicsKSwKLSh1J0NvbnRyb2xDb25kaXRpb24nLHUnQ29uZGl0aW9uJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQ29uZGl0aW9uJyxOb25lLCB1J0Egc3RhbmRhcmQgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRoYXQgc3BlY2lmaWVzIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhlIGFjdGlvbiBzaG91bGQgYmUgdHJpZ2dlcmVkLicsKSwKLSh1J0NvbnRyb2xDb25kaXRpb24nLHUnRGlhbG9nXycsdSdOJyxOb25lLCBOb25lLCB1J0RpYWxvZycsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnQSBmb3JlaWduIGtleSB0byB0aGUgRGlhbG9nIHRhYmxlLCBuYW1lIG9mIHRoZSBkaWFsb2cuJywpLAotKHUnQ29udHJvbENvbmRpdGlvbicsdSdDb250cm9sXycsdSdOJyxOb25lLCBOb25lLCB1J0NvbnRyb2wnLDIsdSdJZGVudGlmaWVyJyxOb25lLCB1J0EgZm9yZWlnbiBrZXkgdG8gdGhlIENvbnRyb2wgdGFibGUsIG5hbWUgb2YgdGhlIGNvbnRyb2wuJywpLAotKHUnQ29udHJvbEV2ZW50Jyx1J0NvbmRpdGlvbicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsTm9uZSwgdSdBIHN0YW5kYXJkIGNvbmRpdGlvbmFsIHN0YXRlbWVudCB0aGF0IHNwZWNpZmllcyB1bmRlciB3aGljaCBjb25kaXRpb25zIGFuIGV2ZW50IHNob3VsZCBiZSB0cmlnZ2VyZWQuJywpLAotKHUnQ29udHJvbEV2ZW50Jyx1J09yZGVyaW5nJyx1J1knLDAsMjE0NzQ4MzY0NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0FuIGludGVnZXIgdXNlZCB0byBvcmRlciBzZXZlcmFsIGV2ZW50cyB0aWVkIHRvIHRoZSBzYW1lIGNvbnRyb2wuIENhbiBiZSBsZWZ0IGJsYW5rLicsKSwKLSh1J0NvbnRyb2xFdmVudCcsdSdBcmd1bWVudCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdBIHZhbHVlIHRvIGJlIHVzZWQgYXMgYSBtb2RpZmllciB3aGVuIHRyaWdnZXJpbmcgYSBwYXJ0aWN1bGFyIGV2ZW50LicsKSwKLSh1J0NvbnRyb2xFdmVudCcsdSdEaWFsb2dfJyx1J04nLE5vbmUsIE5vbmUsIHUnRGlhbG9nJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdBIGZvcmVpZ24ga2V5IHRvIHRoZSBEaWFsb2cgdGFibGUsIG5hbWUgb2YgdGhlIGRpYWxvZy4nLCksCi0odSdDb250cm9sRXZlbnQnLHUnQ29udHJvbF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb250cm9sJywyLHUnSWRlbnRpZmllcicsTm9uZSwgdSdBIGZvcmVpZ24ga2V5IHRvIHRoZSBDb250cm9sIHRhYmxlLCBuYW1lIG9mIHRoZSBjb250cm9sJywpLAotKHUnQ29udHJvbEV2ZW50Jyx1J0V2ZW50Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J0FuIGlkZW50aWZpZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIGV2ZW50IHRoYXQgc2hvdWxkIHRha2UgcGxhY2Ugd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBjb250cm9sIHNwZWNpZmllZCBieSB0aGUgZmlyc3QgdHdvIGVudHJpZXMuJywpLAotKHUnQ3JlYXRlRm9sZGVyJyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIENvbXBvbmVudCB0YWJsZS4nLCksCi0odSdDcmVhdGVGb2xkZXInLHUnRGlyZWN0b3J5XycsdSdOJyxOb25lLCBOb25lLCB1J0RpcmVjdG9yeScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUHJpbWFyeSBrZXksIGNvdWxkIGJlIGZvcmVpZ24ga2V5IGludG8gdGhlIERpcmVjdG9yeSB0YWJsZS4nLCksCi0odSdDdXN0b21BY3Rpb24nLHUnVHlwZScsdSdOJywxLDE2MzgzLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIG51bWVyaWMgY3VzdG9tIGFjdGlvbiB0eXBlLCBjb25zaXN0aW5nIG9mIHNvdXJjZSBsb2NhdGlvbiwgY29kZSB0eXBlLCBlbnRyeSwgb3B0aW9uIGZsYWdzLicsKSwKLSh1J0N1c3RvbUFjdGlvbicsdSdBY3Rpb24nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5LCBuYW1lIG9mIGFjdGlvbiwgbm9ybWFsbHkgYXBwZWFycyBpbiBzZXF1ZW5jZSB0YWJsZSB1bmxlc3MgcHJpdmF0ZSB1c2UuJywpLAotKHUnQ3VzdG9tQWN0aW9uJyx1J1NvdXJjZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0N1c3RvbVNvdXJjZScsTm9uZSwgdSdUaGUgdGFibGUgcmVmZXJlbmNlIG9mIHRoZSBzb3VyY2Ugb2YgdGhlIGNvZGUuJywpLAotKHUnQ3VzdG9tQWN0aW9uJyx1J1RhcmdldCcsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdFeGNlY3V0aW9uIHBhcmFtZXRlciwgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBjdXN0b20gYWN0aW9uJywpLAotKHUnRHJMb2NhdG9yJyx1J1NpZ25hdHVyZV8nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1RoZSBTaWduYXR1cmVfIHJlcHJlc2VudHMgYSB1bmlxdWUgZmlsZSBzaWduYXR1cmUgYW5kIGlzIGFsc28gdGhlIGZvcmVpZ24ga2V5IGluIHRoZSBTaWduYXR1cmUgdGFibGUuJywpLAotKHUnRHJMb2NhdG9yJyx1J1BhdGgnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBbnlQYXRoJyxOb25lLCB1J1RoZSBwYXRoIG9uIHRoZSB1c2VyIHN5c3RlbS4gVGhpcyBpcyBhIGVpdGhlciBhIHN1YnBhdGggYmVsb3cgdGhlIHZhbHVlIG9mIHRoZSBQYXJlbnQgb3IgYSBmdWxsIHBhdGguIFRoZSBwYXRoIG1heSBjb250YWluIHByb3BlcnRpZXMgZW5jbG9zZWQgd2l0aGluIFsgXSB0aGF0IHdpbGwgYmUgZXhwYW5kZWQuJywpLAotKHUnRHJMb2NhdG9yJyx1J0RlcHRoJyx1J1knLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgZGVwdGggYmVsb3cgdGhlIHBhdGggdG8gd2hpY2ggdGhlIFNpZ25hdHVyZV8gaXMgcmVjdXJzaXZlbHkgc2VhcmNoZWQuIElmIGFic2VudCwgdGhlIGRlcHRoIGlzIGFzc3VtZWQgdG8gYmUgMC4nLCksCi0odSdEckxvY2F0b3InLHUnUGFyZW50Jyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdUaGUgcGFyZW50IGZpbGUgc2lnbmF0dXJlLiBJdCBpcyBhbHNvIGEgZm9yZWlnbiBrZXkgaW4gdGhlIFNpZ25hdHVyZSB0YWJsZS4gSWYgbnVsbCBhbmQgdGhlIFBhdGggY29sdW1uIGRvZXMgbm90IGV4cGFuZCB0byBhIGZ1bGwgcGF0aCwgdGhlbiBhbGwgdGhlIGZpeGVkIGRyaXZlcyBvZiB0aGUgdXNlciBzeXN0ZW0gYXJlIHNlYXJjaGVkIHVzaW5nIHRoZSBQYXRoLicsKSwKLSh1J0R1cGxpY2F0ZUZpbGUnLHUnRmlsZV8nLHUnTicsTm9uZSwgTm9uZSwgdSdGaWxlJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSByZWZlcmVuY2luZyB0aGUgc291cmNlIGZpbGUgdG8gYmUgZHVwbGljYXRlZC4nLCksCi0odSdEdXBsaWNhdGVGaWxlJyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIENvbXBvbmVudCB0aGF0IGNvbnRyb2xzIHRoZSBkdXBsaWNhdGUgZmlsZS4nLCksCi0odSdEdXBsaWNhdGVGaWxlJyx1J0Rlc3RGb2xkZXInLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J05hbWUgb2YgYSBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBpcyBhc3N1bWVkIHRvIHJlc29sdmUgdG8gdGhlIGZ1bGwgcGF0aG5hbWUgdG8gYSBkZXN0aW5hdGlvbiBmb2xkZXIuJywpLAotKHUnRHVwbGljYXRlRmlsZScsdSdEZXN0TmFtZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ZpbGVuYW1lJyxOb25lLCB1J0ZpbGVuYW1lIHRvIGJlIGdpdmVuIHRvIHRoZSBkdXBsaWNhdGUgZmlsZS4nLCksCi0odSdEdXBsaWNhdGVGaWxlJyx1J0ZpbGVLZXknLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5IHVzZWQgdG8gaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGZpbGUgZW50cnknLCksCi0odSdFbnZpcm9ubWVudCcsdSdOYW1lJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRhbCB2YWx1ZS4nLCksCi0odSdFbnZpcm9ubWVudCcsdSdWYWx1ZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdUaGUgdmFsdWUgdG8gc2V0IGluIHRoZSBlbnZpcm9ubWVudGFsIHNldHRpbmdzLicsKSwKLSh1J0Vudmlyb25tZW50Jyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIENvbXBvbmVudCB0YWJsZSByZWZlcmVuY2luZyBjb21wb25lbnQgdGhhdCBjb250cm9scyB0aGUgaW5zdGFsbGluZyBvZiB0aGUgZW52aXJvbm1lbnRhbCB2YWx1ZS4nLCksCi0odSdFbnZpcm9ubWVudCcsdSdFbnZpcm9ubWVudCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlIHNldHRpbmcnLCksCi0odSdFcnJvcicsdSdFcnJvcicsdSdOJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSW50ZWdlciBlcnJvciBudW1iZXIsIG9idGFpbmVkIGZyb20gaGVhZGVyIGZpbGUgSUVycm9yKC4uLikgbWFjcm9zLicsKSwKLSh1J0Vycm9yJyx1J01lc3NhZ2UnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZW1wbGF0ZScsTm9uZSwgdSdFcnJvciBmb3JtYXR0aW5nIHRlbXBsYXRlLCBvYnRhaW5lZCBmcm9tIHVzZXIgZWQuIG9yIGxvY2FsaXplcnMuJywpLAotKHUnRXZlbnRNYXBwaW5nJyx1J0RpYWxvZ18nLHUnTicsTm9uZSwgTm9uZSwgdSdEaWFsb2cnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0EgZm9yZWlnbiBrZXkgdG8gdGhlIERpYWxvZyB0YWJsZSwgbmFtZSBvZiB0aGUgRGlhbG9nLicsKSwKLSh1J0V2ZW50TWFwcGluZycsdSdDb250cm9sXycsdSdOJyxOb25lLCBOb25lLCB1J0NvbnRyb2wnLDIsdSdJZGVudGlmaWVyJyxOb25lLCB1J0EgZm9yZWlnbiBrZXkgdG8gdGhlIENvbnRyb2wgdGFibGUsIG5hbWUgb2YgdGhlIGNvbnRyb2wuJywpLAotKHUnRXZlbnRNYXBwaW5nJyx1J0V2ZW50Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdBbiBpZGVudGlmaWVyIHRoYXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBldmVudCB0aGF0IHRoZSBjb250cm9sIHN1YnNjcmliZXMgdG8uJywpLAotKHUnRXZlbnRNYXBwaW5nJyx1J0F0dHJpYnV0ZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnVGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgYXR0cmlidXRlLCB0aGF0IGlzIHNldCB3aGVuIHRoaXMgZXZlbnQgaXMgcmVjZWl2ZWQuJywpLAotKHUnRXh0ZW5zaW9uJyx1J0ZlYXR1cmVfJyx1J04nLE5vbmUsIE5vbmUsIHUnRmVhdHVyZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUmVxdWlyZWQgZm9yZWlnbiBrZXkgaW50byB0aGUgRmVhdHVyZSBUYWJsZSwgc3BlY2lmeWluZyB0aGUgZmVhdHVyZSB0byB2YWxpZGF0ZSBvciBpbnN0YWxsIGluIG9yZGVyIGZvciB0aGUgQ0xTSUQgZmFjdG9yeSB0byBiZSBvcGVyYXRpb25hbC4nLCksCi0odSdFeHRlbnNpb24nLHUnQ29tcG9uZW50XycsdSdOJyxOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUmVxdWlyZWQgZm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IFRhYmxlLCBzcGVjaWZ5aW5nIHRoZSBjb21wb25lbnQgZm9yIHdoaWNoIHRvIHJldHVybiBhIHBhdGggd2hlbiBjYWxsZWQgdGhyb3VnaCBMb2NhdGVDb21wb25lbnQuJywpLAotKHUnRXh0ZW5zaW9uJyx1J0V4dGVuc2lvbicsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnVGhlIGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlIHJvdy4nLCksCi0odSdFeHRlbnNpb24nLHUnTUlNRV8nLHUnWScsTm9uZSwgTm9uZSwgdSdNSU1FJywxLHUnVGV4dCcsTm9uZSwgdSdPcHRpb25hbCBDb250ZXh0IGlkZW50aWZpZXIsIHR5cGljYWxseSAidHlwZS9mb3JtYXQiIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXh0ZW5zaW9uJywpLAotKHUnRXh0ZW5zaW9uJyx1J1Byb2dJZF8nLHUnWScsTm9uZSwgTm9uZSwgdSdQcm9nSWQnLDEsdSdUZXh0JyxOb25lLCB1J09wdGlvbmFsIFByb2dJZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBleHRlbnNpb24uJywpLAotKHUnTUlNRScsdSdDTFNJRCcsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0d1aWQnLE5vbmUsIHUnT3B0aW9uYWwgYXNzb2NpYXRlZCBDTFNJRC4nLCksCi0odSdNSU1FJyx1J0NvbnRlbnRUeXBlJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdQcmltYXJ5IGtleS4gQ29udGV4dCBpZGVudGlmaWVyLCB0eXBpY2FsbHkgInR5cGUvZm9ybWF0Ii4nLCksCi0odSdNSU1FJyx1J0V4dGVuc2lvbl8nLHUnTicsTm9uZSwgTm9uZSwgdSdFeHRlbnNpb24nLDEsdSdUZXh0JyxOb25lLCB1J09wdGlvbmFsIGFzc29jaWF0ZWQgZXh0ZW5zaW9uICh3aXRob3V0IGRvdCknLCksCi0odSdGZWF0dXJlQ29tcG9uZW50cycsdSdGZWF0dXJlXycsdSdOJyxOb25lLCBOb25lLCB1J0ZlYXR1cmUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gRmVhdHVyZSB0YWJsZS4nLCksCi0odSdGZWF0dXJlQ29tcG9uZW50cycsdSdDb21wb25lbnRfJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIENvbXBvbmVudCB0YWJsZS4nLCksCi0odSdGaWxlU0ZQQ2F0YWxvZycsdSdGaWxlXycsdSdOJyxOb25lLCBOb25lLCB1J0ZpbGUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYXRhbG9nJywpLAotKHUnRmlsZVNGUENhdGFsb2cnLHUnU0ZQQ2F0YWxvZ18nLHUnTicsTm9uZSwgTm9uZSwgdSdTRlBDYXRhbG9nJywxLHUnRmlsZW5hbWUnLE5vbmUsIHUnQ2F0YWxvZyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUnLCksCi0odSdTRlBDYXRhbG9nJyx1J1NGUENhdGFsb2cnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsTm9uZSwgdSdGaWxlIG5hbWUgZm9yIHRoZSBjYXRhbG9nLicsKSwKLSh1J1NGUENhdGFsb2cnLHUnQ2F0YWxvZycsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0JpbmFyeScsTm9uZSwgdSdTRlAgQ2F0YWxvZycsKSwKLSh1J1NGUENhdGFsb2cnLHUnRGVwZW5kZW5jeScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdQYXJlbnQgY2F0YWxvZyAtIG9ubHkgdXNlZCBieSBTRlAnLCksCi0odSdGb250Jyx1J0ZpbGVfJyx1J04nLE5vbmUsIE5vbmUsIHUnRmlsZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUHJpbWFyeSBrZXksIGZvcmVpZ24ga2V5IGludG8gRmlsZSB0YWJsZSByZWZlcmVuY2luZyBmb250IGZpbGUuJywpLAotKHUnRm9udCcsdSdGb250VGl0bGUnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J0ZvbnQgbmFtZS4nLCksCi0odSdJbmlGaWxlJyx1J0FjdGlvbicsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1JzA7MTszJyx1J1RoZSB0eXBlIG9mIG1vZGlmaWNhdGlvbiB0byBiZSBtYWRlLCBvbmUgb2YgaWlmRW51bScsKSwKLSh1J0luaUZpbGUnLHUnVmFsdWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4uJywpLAotKHUnSW5pRmlsZScsdSdDb21wb25lbnRfJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBDb21wb25lbnQgdGFibGUgcmVmZXJlbmNpbmcgY29tcG9uZW50IHRoYXQgY29udHJvbHMgdGhlIGluc3RhbGxpbmcgb2YgdGhlIC5JTkkgdmFsdWUuJywpLAotKHUnSW5pRmlsZScsdSdGaWxlTmFtZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ZpbGVuYW1lJyxOb25lLCB1J1RoZSAuSU5JIGZpbGUgbmFtZSBpbiB3aGljaCB0byB3cml0ZSB0aGUgaW5mb3JtYXRpb24nLCksCi0odSdJbmlGaWxlJyx1J0luaUZpbGUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5LCBub24tbG9jYWxpemVkIHRva2VuLicsKSwKLSh1J0luaUZpbGUnLHUnRGlyUHJvcGVydHknLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIERpcmVjdG9yeSB0YWJsZSBkZW5vdGluZyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSAuSU5JIGZpbGUgaXMuJywpLAotKHUnSW5pRmlsZScsdSdLZXknLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIC5JTkkgZmlsZSBrZXkgYmVsb3cgU2VjdGlvbi4nLCksCi0odSdJbmlGaWxlJyx1J1NlY3Rpb24nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIC5JTkkgZmlsZSBTZWN0aW9uLicsKSwKLSh1J0luaUxvY2F0b3InLHUnVHlwZScsdSdZJywwLDIsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBbiBpbnRlZ2VyIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyBpZiB0aGUgLklOSSB2YWx1ZSByZWFkIGlzIGEgZmlsZW5hbWUgb3IgYSBkaXJlY3RvcnkgbG9jYXRpb24gb3IgdG8gYmUgdXNlZCBhcyBpcyB3L28gaW50ZXJwcmV0YXRpb24uJywpLAotKHUnSW5pTG9jYXRvcicsdSdTaWduYXR1cmVfJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdUaGUgdGFibGUga2V5LiBUaGUgU2lnbmF0dXJlXyByZXByZXNlbnRzIGEgdW5pcXVlIGZpbGUgc2lnbmF0dXJlIGFuZCBpcyBhbHNvIHRoZSBmb3JlaWduIGtleSBpbiB0aGUgU2lnbmF0dXJlIHRhYmxlLicsKSwKLSh1J0luaUxvY2F0b3InLHUnRmlsZU5hbWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsTm9uZSwgdSdUaGUgLklOSSBmaWxlIG5hbWUuJywpLAotKHUnSW5pTG9jYXRvcicsdSdLZXknLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J0tleSB2YWx1ZSAoZm9sbG93ZWQgYnkgYW4gZXF1YWxzIHNpZ24gaW4gSU5JIGZpbGUpLicsKSwKLSh1J0luaUxvY2F0b3InLHUnU2VjdGlvbicsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnU2VjdGlvbiBuYW1lIHdpdGhpbiBpbiBmaWxlICh3aXRoaW4gc3F1YXJlIGJyYWNrZXRzIGluIElOSSBmaWxlKS4nLCksCi0odSdJbmlMb2NhdG9yJyx1J0ZpZWxkJyx1J1knLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgZmllbGQgaW4gdGhlIC5JTkkgbGluZS4gSWYgRmllbGQgaXMgbnVsbCBvciAwIHRoZSBlbnRpcmUgbGluZSBpcyByZWFkLicsKSwKLSh1J0luc3RhbGxFeGVjdXRlU2VxdWVuY2UnLHUnQWN0aW9uJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdOYW1lIG9mIGFjdGlvbiB0byBpbnZva2UsIGVpdGhlciBpbiB0aGUgZW5naW5lIG9yIHRoZSBoYW5kbGVyIERMTC4nLCksCi0odSdJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlJyx1J0NvbmRpdGlvbicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsTm9uZSwgdSdPcHRpb25hbCBleHByZXNzaW9uIHdoaWNoIHNraXBzIHRoZSBhY3Rpb24gaWYgZXZhbHVhdGVzIHRvIGV4cEZhbHNlLklmIHRoZSBleHByZXNzaW9uIHN5bnRheCBpcyBpbnZhbGlkLCB0aGUgZW5naW5lIHdpbGwgdGVybWluYXRlLCByZXR1cm5pbmcgaWVzQmFkQWN0aW9uRGF0YS4nLCksCi0odSdJbnN0YWxsRXhlY3V0ZVNlcXVlbmNlJyx1J1NlcXVlbmNlJyx1J1knLC00LDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTnVtYmVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc29ydCBvcmRlciBpbiB3aGljaCB0aGUgYWN0aW9ucyBhcmUgdG8gYmUgZXhlY3V0ZWQuICBMZWF2ZSBibGFuayB0byBzdXBwcmVzcyBhY3Rpb24uJywpLAotKHUnSW5zdGFsbFVJU2VxdWVuY2UnLHUnQWN0aW9uJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdOYW1lIG9mIGFjdGlvbiB0byBpbnZva2UsIGVpdGhlciBpbiB0aGUgZW5naW5lIG9yIHRoZSBoYW5kbGVyIERMTC4nLCksCi0odSdJbnN0YWxsVUlTZXF1ZW5jZScsdSdDb25kaXRpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb25kaXRpb24nLE5vbmUsIHUnT3B0aW9uYWwgZXhwcmVzc2lvbiB3aGljaCBza2lwcyB0aGUgYWN0aW9uIGlmIGV2YWx1YXRlcyB0byBleHBGYWxzZS5JZiB0aGUgZXhwcmVzc2lvbiBzeW50YXggaXMgaW52YWxpZCwgdGhlIGVuZ2luZSB3aWxsIHRlcm1pbmF0ZSwgcmV0dXJuaW5nIGllc0JhZEFjdGlvbkRhdGEuJywpLAotKHUnSW5zdGFsbFVJU2VxdWVuY2UnLHUnU2VxdWVuY2UnLHUnWScsLTQsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdOdW1iZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSBzb3J0IG9yZGVyIGluIHdoaWNoIHRoZSBhY3Rpb25zIGFyZSB0byBiZSBleGVjdXRlZC4gIExlYXZlIGJsYW5rIHRvIHN1cHByZXNzIGFjdGlvbi4nLCksCi0odSdJc29sYXRlZENvbXBvbmVudCcsdSdDb21wb25lbnRfQXBwbGljYXRpb24nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0tleSB0byBDb21wb25lbnQgdGFibGUgaXRlbSBmb3IgYXBwbGljYXRpb24nLCksCi0odSdJc29sYXRlZENvbXBvbmVudCcsdSdDb21wb25lbnRfU2hhcmVkJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdLZXkgdG8gQ29tcG9uZW50IHRhYmxlIGl0ZW0gdG8gYmUgaXNvbGF0ZWQnLCksCi0odSdMYXVuY2hDb25kaXRpb24nLHUnRGVzY3JpcHRpb24nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnTG9jYWxpemFibGUgdGV4dCB0byBkaXNwbGF5IHdoZW4gY29uZGl0aW9uIGZhaWxzIGFuZCBpbnN0YWxsIG11c3QgYWJvcnQuJywpLAotKHUnTGF1bmNoQ29uZGl0aW9uJyx1J0NvbmRpdGlvbicsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsTm9uZSwgdSdFeHByZXNzaW9uIHdoaWNoIG11c3QgZXZhbHVhdGUgdG8gVFJVRSBpbiBvcmRlciBmb3IgaW5zdGFsbCB0byBjb21tZW5jZS4nLCksCi0odSdMaXN0Qm94Jyx1J1RleHQnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoZSB2aXNpYmxlIHRleHQgdG8gYmUgYXNzaWduZWQgdG8gdGhlIGl0ZW0uIE9wdGlvbmFsLiBJZiB0aGlzIGVudHJ5IG9yIHRoZSBlbnRpcmUgY29sdW1uIGlzIG1pc3NpbmcsIHRoZSB0ZXh0IGlzIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZS4nLCksCi0odSdMaXN0Qm94Jyx1J1Byb3BlcnR5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdBIG5hbWVkIHByb3BlcnR5IHRvIGJlIHRpZWQgdG8gdGhpcyBpdGVtLiBBbGwgdGhlIGl0ZW1zIHRpZWQgdG8gdGhlIHNhbWUgcHJvcGVydHkgYmVjb21lIHBhcnQgb2YgdGhlIHNhbWUgbGlzdGJveC4nLCksCi0odSdMaXN0Qm94Jyx1J1ZhbHVlJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J1RoZSB2YWx1ZSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlbS4gU2VsZWN0aW5nIHRoZSBsaW5lIHdpbGwgc2V0IHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IHRvIHRoaXMgdmFsdWUuJywpLAotKHUnTGlzdEJveCcsdSdPcmRlcicsdSdOJywxLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQSBwb3NpdGl2ZSBpbnRlZ2VyIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBvcmRlcmluZyBvZiB0aGUgaXRlbXMgd2l0aGluIG9uZSBsaXN0Li5UaGUgaW50ZWdlcnMgZG8gbm90IGhhdmUgdG8gYmUgY29uc2VjdXRpdmUuJywpLAotKHUnTGlzdFZpZXcnLHUnVGV4dCcsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnVGhlIHZpc2libGUgdGV4dCB0byBiZSBhc3NpZ25lZCB0byB0aGUgaXRlbS4gT3B0aW9uYWwuIElmIHRoaXMgZW50cnkgb3IgdGhlIGVudGlyZSBjb2x1bW4gaXMgbWlzc2luZywgdGhlIHRleHQgaXMgdGhlIHNhbWUgYXMgdGhlIHZhbHVlLicsKSwKLSh1J0xpc3RWaWV3Jyx1J1Byb3BlcnR5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdBIG5hbWVkIHByb3BlcnR5IHRvIGJlIHRpZWQgdG8gdGhpcyBpdGVtLiBBbGwgdGhlIGl0ZW1zIHRpZWQgdG8gdGhlIHNhbWUgcHJvcGVydHkgYmVjb21lIHBhcnQgb2YgdGhlIHNhbWUgbGlzdHZpZXcuJywpLAotKHUnTGlzdFZpZXcnLHUnVmFsdWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1RoZSB2YWx1ZSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlbS4gU2VsZWN0aW5nIHRoZSBsaW5lIHdpbGwgc2V0IHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IHRvIHRoaXMgdmFsdWUuJywpLAotKHUnTGlzdFZpZXcnLHUnT3JkZXInLHUnTicsMSwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgcG9zaXRpdmUgaW50ZWdlciB1c2VkIHRvIGRldGVybWluZSB0aGUgb3JkZXJpbmcgb2YgdGhlIGl0ZW1zIHdpdGhpbiBvbmUgbGlzdC4uVGhlIGludGVnZXJzIGRvIG5vdCBoYXZlIHRvIGJlIGNvbnNlY3V0aXZlLicsKSwKLSh1J0xpc3RWaWV3Jyx1J0JpbmFyeV8nLHUnWScsTm9uZSwgTm9uZSwgdSdCaW5hcnknLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J1RoZSBuYW1lIG9mIHRoZSBpY29uIHRvIGJlIGRpc3BsYXllZCB3aXRoIHRoZSBpY29uLiBUaGUgYmluYXJ5IGluZm9ybWF0aW9uIGlzIGxvb2tlZCB1cCBmcm9tIHRoZSBCaW5hcnkgVGFibGUuJywpLAotKHUnTG9ja1Blcm1pc3Npb25zJyx1J1RhYmxlJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsdSdEaXJlY3Rvcnk7RmlsZTtSZWdpc3RyeScsdSdSZWZlcmVuY2UgdG8gYW5vdGhlciB0YWJsZSBuYW1lJywpLAotKHUnTG9ja1Blcm1pc3Npb25zJyx1J0RvbWFpbicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdEb21haW4gbmFtZSBmb3IgdXNlciB3aG9zZSBwZXJtaXNzaW9ucyBhcmUgYmVpbmcgc2V0LiAodXN1YWxseSBhIHByb3BlcnR5KScsKSwKLSh1J0xvY2tQZXJtaXNzaW9ucycsdSdMb2NrT2JqZWN0Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIFJlZ2lzdHJ5IG9yIEZpbGUgdGFibGUnLCksCi0odSdMb2NrUGVybWlzc2lvbnMnLHUnUGVybWlzc2lvbicsdSdZJywtMjE0NzQ4MzY0NywyMTQ3NDgzNjQ3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUGVybWlzc2lvbiBBY2Nlc3MgbWFzay4gIEZ1bGwgQ29udHJvbCA9IDI2ODQzNTQ1NiAoR0VORVJJQ19BTEwgPSAweDEwMDAwMDAwKScsKSwKLSh1J0xvY2tQZXJtaXNzaW9ucycsdSdVc2VyJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J1VzZXIgZm9yIHBlcm1pc3Npb25zIHRvIGJlIHNldC4gICh1c3VhbGx5IGEgcHJvcGVydHkpJywpLAotKHUnTWVkaWEnLHUnU291cmNlJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUHJvcGVydHknLE5vbmUsIHUnVGhlIHByb3BlcnR5IGRlZmluaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FiaW5ldCBmaWxlLicsKSwKLSh1J01lZGlhJyx1J0NhYmluZXQnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDYWJpbmV0JyxOb25lLCB1J0lmIHNvbWUgb3IgYWxsIG9mIHRoZSBmaWxlcyBzdG9yZWQgb24gdGhlIG1lZGlhIGFyZSBjb21wcmVzc2VkIGluIGEgY2FiaW5ldCwgdGhlIG5hbWUgb2YgdGhhdCBjYWJpbmV0LicsKSwKLSh1J01lZGlhJyx1J0Rpc2tJZCcsdSdOJywxLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUHJpbWFyeSBrZXksIGludGVnZXIgdG8gZGV0ZXJtaW5lIHNvcnQgb3JkZXIgZm9yIHRhYmxlLicsKSwKLSh1J01lZGlhJyx1J0Rpc2tQcm9tcHQnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J0Rpc2sgbmFtZTogdGhlIHZpc2libGUgdGV4dCBhY3R1YWxseSBwcmludGVkIG9uIHRoZSBkaXNrLiAgVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJvbXB0IHRoZSB1c2VyIHdoZW4gdGhpcyBkaXNrIG5lZWRzIHRvIGJlIGluc2VydGVkLicsKSwKLSh1J01lZGlhJyx1J0xhc3RTZXF1ZW5jZScsdSdOJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRmlsZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoZSBsYXN0IGZpbGUgZm9yIHRoaXMgbWVkaWEuJywpLAotKHUnTWVkaWEnLHUnVm9sdW1lTGFiZWwnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoZSBsYWJlbCBhdHRyaWJ1dGVkIHRvIHRoZSB2b2x1bWUuJywpLAotKHUnTW9kdWxlQ29tcG9uZW50cycsdSdDb21wb25lbnQnLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0NvbXBvbmVudCBjb250YWluZWQgaW4gdGhlIG1vZHVsZS4nLCksCi0odSdNb2R1bGVDb21wb25lbnRzJyx1J0xhbmd1YWdlJyx1J04nLE5vbmUsIE5vbmUsIHUnTW9kdWxlU2lnbmF0dXJlJywyLE5vbmUsIE5vbmUsIHUnRGVmYXVsdCBsYW5ndWFnZSBJRCBmb3IgbW9kdWxlIChtYXkgYmUgY2hhbmdlZCBieSB0cmFuc2Zvcm0pLicsKSwKLSh1J01vZHVsZUNvbXBvbmVudHMnLHUnTW9kdWxlSUQnLHUnTicsTm9uZSwgTm9uZSwgdSdNb2R1bGVTaWduYXR1cmUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J01vZHVsZSBjb250YWluaW5nIHRoZSBjb21wb25lbnQuJywpLAotKHUnTW9kdWxlU2lnbmF0dXJlJyx1J0xhbmd1YWdlJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRGVmYXVsdCBkZWNpbWFsIGxhbmd1YWdlIG9mIG1vZHVsZS4nLCksCi0odSdNb2R1bGVTaWduYXR1cmUnLHUnVmVyc2lvbicsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1ZlcnNpb24nLE5vbmUsIHUnVmVyc2lvbiBvZiB0aGUgbW9kdWxlLicsKSwKLSh1J01vZHVsZVNpZ25hdHVyZScsdSdNb2R1bGVJRCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnTW9kdWxlIGlkZW50aWZpZXIgKFN0cmluZy5HVUlEKS4nLCksCi0odSdNb2R1bGVEZXBlbmRlbmN5Jyx1J01vZHVsZUlEJyx1J04nLE5vbmUsIE5vbmUsIHUnTW9kdWxlU2lnbmF0dXJlJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdNb2R1bGUgcmVxdWlyaW5nIHRoZSBkZXBlbmRlbmN5LicsKSwKLSh1J01vZHVsZURlcGVuZGVuY3knLHUnTW9kdWxlTGFuZ3VhZ2UnLHUnTicsTm9uZSwgTm9uZSwgdSdNb2R1bGVTaWduYXR1cmUnLDIsTm9uZSwgTm9uZSwgdSdMYW5ndWFnZSBvZiBtb2R1bGUgcmVxdWlyaW5nIHRoZSBkZXBlbmRlbmN5LicsKSwKLSh1J01vZHVsZURlcGVuZGVuY3knLHUnUmVxdWlyZWRJRCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1N0cmluZy5HVUlEIG9mIHJlcXVpcmVkIG1vZHVsZS4nLCksCi0odSdNb2R1bGVEZXBlbmRlbmN5Jyx1J1JlcXVpcmVkTGFuZ3VhZ2UnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdMYW5ndWFnZUlEIG9mIHRoZSByZXF1aXJlZCBtb2R1bGUuJywpLAotKHUnTW9kdWxlRGVwZW5kZW5jeScsdSdSZXF1aXJlZFZlcnNpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdWZXJzaW9uJyxOb25lLCB1J1ZlcnNpb24gb2YgdGhlIHJlcXVpcmVkIHZlcnNpb24uJywpLAotKHUnTW9kdWxlRXhjbHVzaW9uJyx1J01vZHVsZUlEJyx1J04nLE5vbmUsIE5vbmUsIHUnTW9kdWxlU2lnbmF0dXJlJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdTdHJpbmcuR1VJRCBvZiBtb2R1bGUgd2l0aCBleGNsdXNpb24gcmVxdWlyZW1lbnQuJywpLAotKHUnTW9kdWxlRXhjbHVzaW9uJyx1J01vZHVsZUxhbmd1YWdlJyx1J04nLE5vbmUsIE5vbmUsIHUnTW9kdWxlU2lnbmF0dXJlJywyLE5vbmUsIE5vbmUsIHUnTGFuZ3VhZ2VJRCBvZiBtb2R1bGUgd2l0aCBleGNsdXNpb24gcmVxdWlyZW1lbnQuJywpLAotKHUnTW9kdWxlRXhjbHVzaW9uJyx1J0V4Y2x1ZGVkSUQnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdTdHJpbmcuR1VJRCBvZiBleGNsdWRlZCBtb2R1bGUuJywpLAotKHUnTW9kdWxlRXhjbHVzaW9uJyx1J0V4Y2x1ZGVkTGFuZ3VhZ2UnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdMYW5ndWFnZSBvZiBleGNsdWRlZCBtb2R1bGUuJywpLAotKHUnTW9kdWxlRXhjbHVzaW9uJyx1J0V4Y2x1ZGVkTWF4VmVyc2lvbicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1ZlcnNpb24nLE5vbmUsIHUnTWF4aW11bSB2ZXJzaW9uIG9mIGV4Y2x1ZGVkIG1vZHVsZS4nLCksCi0odSdNb2R1bGVFeGNsdXNpb24nLHUnRXhjbHVkZWRNaW5WZXJzaW9uJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVmVyc2lvbicsTm9uZSwgdSdNaW5pbXVtIHZlcnNpb24gb2YgZXhjbHVkZWQgbW9kdWxlLicsKSwKLSh1J01vdmVGaWxlJyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0lmIHRoaXMgY29tcG9uZW50IGlzIG5vdCAic2VsZWN0ZWQiIGZvciBpbnN0YWxsYXRpb24gb3IgcmVtb3ZhbCwgbm8gYWN0aW9uIHdpbGwgYmUgdGFrZW4gb24gdGhlIGFzc29jaWF0ZWQgTW92ZUZpbGUgZW50cnknLCksCi0odSdNb3ZlRmlsZScsdSdEZXN0Rm9sZGVyJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdOYW1lIG9mIGEgcHJvcGVydHkgd2hvc2UgdmFsdWUgaXMgYXNzdW1lZCB0byByZXNvbHZlIHRvIHRoZSBmdWxsIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeScsKSwKLSh1J01vdmVGaWxlJyx1J0Rlc3ROYW1lJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRmlsZW5hbWUnLE5vbmUsIHUnTmFtZSB0byBiZSBnaXZlbiB0byB0aGUgb3JpZ2luYWwgZmlsZSBhZnRlciBpdCBpcyBtb3ZlZCBvciBjb3BpZWQuICBJZiBibGFuaywgdGhlIGRlc3RpbmF0aW9uIGZpbGUgd2lsbCBiZSBnaXZlbiB0aGUgc2FtZSBuYW1lIGFzIHRoZSBzb3VyY2UgZmlsZScsKSwKLSh1J01vdmVGaWxlJyx1J0ZpbGVLZXknLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyBhIHBhcnRpY3VsYXIgTW92ZUZpbGUgcmVjb3JkJywpLAotKHUnTW92ZUZpbGUnLHUnT3B0aW9ucycsdSdOJywwLDEsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJbnRlZ2VyIHZhbHVlIHNwZWNpZnlpbmcgdGhlIE1vdmVGaWxlIG9wZXJhdGluZyBtb2RlLCBvbmUgb2YgaW1mb0VudW0nLCksCi0odSdNb3ZlRmlsZScsdSdTb3VyY2VGb2xkZXInLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J05hbWUgb2YgYSBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBpcyBhc3N1bWVkIHRvIHJlc29sdmUgdG8gdGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIGRpcmVjdG9yeScsKSwKLSh1J01vdmVGaWxlJyx1J1NvdXJjZU5hbWUnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1Ik5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlKHMpIHRvIGJlIG1vdmVkIG9yIGNvcGllZC4gIENhbiBjb250YWluIHRoZSAnKicgb3IgJz8nIHdpbGRjYXJkcy4iLCksCi0odSdNc2lBc3NlbWJseScsdSdBdHRyaWJ1dGVzJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQXNzZW1ibHkgYXR0cmlidXRlcycsKSwKLSh1J01zaUFzc2VtYmx5Jyx1J0ZlYXR1cmVfJyx1J04nLE5vbmUsIE5vbmUsIHUnRmVhdHVyZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byBGZWF0dXJlIHRhYmxlLicsKSwKLSh1J01zaUFzc2VtYmx5Jyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gQ29tcG9uZW50IHRhYmxlLicsKSwKLSh1J01zaUFzc2VtYmx5Jyx1J0ZpbGVfQXBwbGljYXRpb24nLHUnWScsTm9uZSwgTm9uZSwgdSdGaWxlJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIEZpbGUgdGFibGUsIGRlbm90aW5nIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IGZvciBwcml2YXRlIGFzc2VtYmxpZXMuIE51bGwgZm9yIGdsb2JhbCBhc3NlbWJsaWVzLicsKSwKLSh1J01zaUFzc2VtYmx5Jyx1J0ZpbGVfTWFuaWZlc3QnLHUnWScsTm9uZSwgTm9uZSwgdSdGaWxlJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBGaWxlIHRhYmxlIGRlbm90aW5nIHRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgYXNzZW1ibHkuJywpLAotKHUnTXNpQXNzZW1ibHlOYW1lJyx1J05hbWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoZSBuYW1lIHBhcnQgb2YgdGhlIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBhc3NlbWJseSBuYW1lLicsKSwKLSh1J01zaUFzc2VtYmx5TmFtZScsdSdWYWx1ZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnVGhlIHZhbHVlIHBhcnQgb2YgdGhlIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBhc3NlbWJseSBuYW1lLicsKSwKLSh1J01zaUFzc2VtYmx5TmFtZScsdSdDb21wb25lbnRfJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIENvbXBvbmVudCB0YWJsZS4nLCksCi0odSdNc2lEaWdpdGFsQ2VydGlmaWNhdGUnLHUnQ2VydERhdGEnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdCaW5hcnknLE5vbmUsIHUnQSBjZXJ0aWZpY2F0ZSBjb250ZXh0IGJsb2IgZm9yIGEgc2lnbmVyIGNlcnRpZmljYXRlJywpLAotKHUnTXNpRGlnaXRhbENlcnRpZmljYXRlJyx1J0RpZ2l0YWxDZXJ0aWZpY2F0ZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJvdycsKSwKLSh1J01zaURpZ2l0YWxTaWduYXR1cmUnLHUnVGFibGUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdNZWRpYScsdSdSZWZlcmVuY2UgdG8gYW5vdGhlciB0YWJsZSBuYW1lIChvbmx5IE1lZGlhIHRhYmxlIGlzIHN1cHBvcnRlZCknLCksCi0odSdNc2lEaWdpdGFsU2lnbmF0dXJlJyx1J0RpZ2l0YWxDZXJ0aWZpY2F0ZV8nLHUnTicsTm9uZSwgTm9uZSwgdSdNc2lEaWdpdGFsQ2VydGlmaWNhdGUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IHRvIE1zaURpZ2l0YWxDZXJ0aWZpY2F0ZSB0YWJsZSBpZGVudGlmeWluZyB0aGUgc2lnbmVyIGNlcnRpZmljYXRlJywpLAotKHUnTXNpRGlnaXRhbFNpZ25hdHVyZScsdSdIYXNoJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQmluYXJ5JyxOb25lLCB1J1RoZSBlbmNvZGVkIGhhc2ggYmxvYiBmcm9tIHRoZSBkaWdpdGFsIHNpZ25hdHVyZScsKSwKLSh1J01zaURpZ2l0YWxTaWduYXR1cmUnLHUnU2lnbk9iamVjdCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnRm9yZWlnbiBrZXkgdG8gTWVkaWEgdGFibGUnLCksCi0odSdNc2lGaWxlSGFzaCcsdSdGaWxlXycsdSdOJyxOb25lLCBOb25lLCB1J0ZpbGUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5LCBmb3JlaWduIGtleSBpbnRvIEZpbGUgdGFibGUgcmVmZXJlbmNpbmcgZmlsZSB3aXRoIHRoaXMgaGFzaCcsKSwKLSh1J01zaUZpbGVIYXNoJyx1J09wdGlvbnMnLHUnTicsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1ZhcmlvdXMgb3B0aW9ucyBhbmQgYXR0cmlidXRlcyBmb3IgdGhpcyBoYXNoLicsKSwKLSh1J01zaUZpbGVIYXNoJyx1J0hhc2hQYXJ0MScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1NpemUgb2YgZmlsZSBpbiBieXRlcyAobG9uZyBpbnRlZ2VyKS4nLCksCi0odSdNc2lGaWxlSGFzaCcsdSdIYXNoUGFydDInLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdTaXplIG9mIGZpbGUgaW4gYnl0ZXMgKGxvbmcgaW50ZWdlcikuJywpLAotKHUnTXNpRmlsZUhhc2gnLHUnSGFzaFBhcnQzJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnU2l6ZSBvZiBmaWxlIGluIGJ5dGVzIChsb25nIGludGVnZXIpLicsKSwKLSh1J01zaUZpbGVIYXNoJyx1J0hhc2hQYXJ0NCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1NpemUgb2YgZmlsZSBpbiBieXRlcyAobG9uZyBpbnRlZ2VyKS4nLCksCi0odSdNc2lQYXRjaEhlYWRlcnMnLHUnU3RyZWFtUmVmJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdQcmltYXJ5IGtleS4gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJvdy4nLCksCi0odSdNc2lQYXRjaEhlYWRlcnMnLHUnSGVhZGVyJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQmluYXJ5JyxOb25lLCB1J0JpbmFyeSBzdHJlYW0uIFRoZSBwYXRjaCBoZWFkZXIsIHVzZWQgZm9yIHBhdGNoIHZhbGlkYXRpb24uJywpLAotKHUnT0RCQ0F0dHJpYnV0ZScsdSdWYWx1ZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnVmFsdWUgZm9yIE9EQkMgZHJpdmVyIGF0dHJpYnV0ZScsKSwKLSh1J09EQkNBdHRyaWJ1dGUnLHUnQXR0cmlidXRlJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdOYW1lIG9mIE9EQkMgZHJpdmVyIGF0dHJpYnV0ZScsKSwKLSh1J09EQkNBdHRyaWJ1dGUnLHUnRHJpdmVyXycsdSdOJyxOb25lLCBOb25lLCB1J09EQkNEcml2ZXInLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J1JlZmVyZW5jZSB0byBPREJDIGRyaXZlciBpbiBPREJDRHJpdmVyIHRhYmxlJywpLAotKHUnT0RCQ0RyaXZlcicsdSdEZXNjcmlwdGlvbicsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnVGV4dCB1c2VkIGFzIHJlZ2lzdGVyZWQgbmFtZSBmb3IgZHJpdmVyLCBub24tbG9jYWxpemVkJywpLAotKHUnT0RCQ0RyaXZlcicsdSdGaWxlXycsdSdOJyxOb25lLCBOb25lLCB1J0ZpbGUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J1JlZmVyZW5jZSB0byBrZXkgZHJpdmVyIGZpbGUnLCksCi0odSdPREJDRHJpdmVyJyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J1JlZmVyZW5jZSB0byBhc3NvY2lhdGVkIGNvbXBvbmVudCcsKSwKLSh1J09EQkNEcml2ZXInLHUnRHJpdmVyJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdQcmltYXJ5IGtleSwgbm9uLWxvY2FsaXplZC5pbnRlcm5hbCB0b2tlbiBmb3IgZHJpdmVyJywpLAotKHUnT0RCQ0RyaXZlcicsdSdGaWxlX1NldHVwJyx1J1knLE5vbmUsIE5vbmUsIHUnRmlsZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnT3B0aW9uYWwgcmVmZXJlbmNlIHRvIGtleSBkcml2ZXIgc2V0dXAgRExMJywpLAotKHUnT0RCQ0RhdGFTb3VyY2UnLHUnRGVzY3JpcHRpb24nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RleHQgdXNlZCBhcyByZWdpc3RlcmVkIG5hbWUgZm9yIGRhdGEgc291cmNlJywpLAotKHUnT0RCQ0RhdGFTb3VyY2UnLHUnQ29tcG9uZW50XycsdSdOJyxOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUmVmZXJlbmNlIHRvIGFzc29jaWF0ZWQgY29tcG9uZW50JywpLAotKHUnT0RCQ0RhdGFTb3VyY2UnLHUnRGF0YVNvdXJjZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnUHJpbWFyeSBrZXksIG5vbi1sb2NhbGl6ZWQuaW50ZXJuYWwgdG9rZW4gZm9yIGRhdGEgc291cmNlJywpLAotKHUnT0RCQ0RhdGFTb3VyY2UnLHUnRHJpdmVyRGVzY3JpcHRpb24nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1JlZmVyZW5jZSB0byBkcml2ZXIgZGVzY3JpcHRpb24sIG1heSBiZSBleGlzdGluZyBkcml2ZXInLCksCi0odSdPREJDRGF0YVNvdXJjZScsdSdSZWdpc3RyYXRpb24nLHUnTicsMCwxLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUmVnaXN0cmF0aW9uIG9wdGlvbjogMD1tYWNoaW5lLCAxPXVzZXIsIG90aGVycyB0LmIuZC4nLCksCi0odSdPREJDU291cmNlQXR0cmlidXRlJyx1J1ZhbHVlJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdWYWx1ZSBmb3IgT0RCQyBkYXRhIHNvdXJjZSBhdHRyaWJ1dGUnLCksCi0odSdPREJDU291cmNlQXR0cmlidXRlJyx1J0F0dHJpYnV0ZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnTmFtZSBvZiBPREJDIGRhdGEgc291cmNlIGF0dHJpYnV0ZScsKSwKLSh1J09EQkNTb3VyY2VBdHRyaWJ1dGUnLHUnRGF0YVNvdXJjZV8nLHUnTicsTm9uZSwgTm9uZSwgdSdPREJDRGF0YVNvdXJjZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUmVmZXJlbmNlIHRvIE9EQkMgZGF0YSBzb3VyY2UgaW4gT0RCQ0RhdGFTb3VyY2UgdGFibGUnLCksCi0odSdPREJDVHJhbnNsYXRvcicsdSdEZXNjcmlwdGlvbicsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnVGV4dCB1c2VkIGFzIHJlZ2lzdGVyZWQgbmFtZSBmb3IgdHJhbnNsYXRvcicsKSwKLSh1J09EQkNUcmFuc2xhdG9yJyx1J0ZpbGVfJyx1J04nLE5vbmUsIE5vbmUsIHUnRmlsZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUmVmZXJlbmNlIHRvIGtleSB0cmFuc2xhdG9yIGZpbGUnLCksCi0odSdPREJDVHJhbnNsYXRvcicsdSdDb21wb25lbnRfJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdSZWZlcmVuY2UgdG8gYXNzb2NpYXRlZCBjb21wb25lbnQnLCksCi0odSdPREJDVHJhbnNsYXRvcicsdSdGaWxlX1NldHVwJyx1J1knLE5vbmUsIE5vbmUsIHUnRmlsZScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnT3B0aW9uYWwgcmVmZXJlbmNlIHRvIGtleSB0cmFuc2xhdG9yIHNldHVwIERMTCcsKSwKLSh1J09EQkNUcmFuc2xhdG9yJyx1J1RyYW5zbGF0b3InLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5LCBub24tbG9jYWxpemVkLmludGVybmFsIHRva2VuIGZvciB0cmFuc2xhdG9yJywpLAotKHUnUGF0Y2gnLHUnU2VxdWVuY2UnLHUnTicsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1ByaW1hcnkga2V5LCBzZXF1ZW5jZSB3aXRoIHJlc3BlY3QgdG8gdGhlIG1lZGlhIGltYWdlczsgb3JkZXIgbXVzdCB0cmFjayBjYWJpbmV0IG9yZGVyLicsKSwKLSh1J1BhdGNoJyx1J0F0dHJpYnV0ZXMnLHUnTicsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ludGVnZXIgY29udGFpbmluZyBiaXQgZmxhZ3MgcmVwcmVzZW50aW5nIHBhdGNoIGF0dHJpYnV0ZXMnLCksCi0odSdQYXRjaCcsdSdGaWxlXycsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnUHJpbWFyeSBrZXksIG5vbi1sb2NhbGl6ZWQgdG9rZW4sIGZvcmVpZ24ga2V5IHRvIEZpbGUgdGFibGUsIG11c3QgbWF0Y2ggaWRlbnRpZmllciBpbiBjYWJpbmV0LicsKSwKLSh1J1BhdGNoJyx1J0hlYWRlcicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0JpbmFyeScsTm9uZSwgdSdCaW5hcnkgc3RyZWFtLiBUaGUgcGF0Y2ggaGVhZGVyLCB1c2VkIGZvciBwYXRjaCB2YWxpZGF0aW9uLicsKSwKLSh1J1BhdGNoJyx1J1BhdGNoU2l6ZScsdSdOJywwLDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdTaXplIG9mIHBhdGNoIGluIGJ5dGVzIChsb25nIGludGVnZXIpLicsKSwKLSh1J1BhdGNoJyx1J1N0cmVhbVJlZl8nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J0lkZW50aWZpZXIuIEZvcmVpZ24ga2V5IHRvIHRoZSBTdHJlYW1SZWYgY29sdW1uIG9mIHRoZSBNc2lQYXRjaEhlYWRlcnMgdGFibGUuJywpLAotKHUnUGF0Y2hQYWNrYWdlJyx1J01lZGlhXycsdSdOJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9yZWlnbiBrZXkgdG8gRGlza0lkIGNvbHVtbiBvZiBNZWRpYSB0YWJsZS4gSW5kaWNhdGVzIHRoZSBkaXNrIGNvbnRhaW5pbmcgdGhlIHBhdGNoIHBhY2thZ2UuJywpLAotKHUnUGF0Y2hQYWNrYWdlJyx1J1BhdGNoSWQnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdHdWlkJyxOb25lLCB1J0EgdW5pcXVlIHN0cmluZyBHVUlEIHJlcHJlc2VudGluZyB0aGlzIHBhdGNoLicsKSwKLSh1J1B1Ymxpc2hDb21wb25lbnQnLHUnRmVhdHVyZV8nLHUnTicsTm9uZSwgTm9uZSwgdSdGZWF0dXJlJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBGZWF0dXJlIHRhYmxlLicsKSwKLSh1J1B1Ymxpc2hDb21wb25lbnQnLHUnQ29tcG9uZW50XycsdSdOJyxOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IHRhYmxlLicsKSwKLSh1J1B1Ymxpc2hDb21wb25lbnQnLHUnQ29tcG9uZW50SWQnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdHdWlkJyxOb25lLCB1J0Egc3RyaW5nIEdVSUQgdGhhdCByZXByZXNlbnRzIHRoZSBjb21wb25lbnQgaWQgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCBieSB0aGUgYWxpZW4gcHJvZHVjdC4nLCksCi0odSdQdWJsaXNoQ29tcG9uZW50Jyx1J0FwcERhdGEnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoaXMgaXMgbG9jYWxpc2FibGUgQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBRdWFsaWZpZWQgQ29tcG9uZW50LicsKSwKLSh1J1B1Ymxpc2hDb21wb25lbnQnLHUnUXVhbGlmaWVyJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdUaGlzIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSBDb21wb25lbnRJZCBjb2x1bW4gaXMgYW4gUXVhbGlmaWVkIENvbXBvbmVudCBJZC4gVGhpcyBpcyB0aGUgUXVhbGlmaWVyIGZvciBQcm92aWRlQ29tcG9uZW50SW5kaXJlY3QuJywpLAotKHUnUmFkaW9CdXR0b24nLHUnWScsdSdOJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgb2YgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIHJhZGlvIGJ1dHRvbi4nLCksCi0odSdSYWRpb0J1dHRvbicsdSdUZXh0Jyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdUaGUgdmlzaWJsZSB0aXRsZSB0byBiZSBhc3NpZ25lZCB0byB0aGUgcmFkaW8gYnV0dG9uLicsKSwKLSh1J1JhZGlvQnV0dG9uJyx1J1Byb3BlcnR5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdBIG5hbWVkIHByb3BlcnR5IHRvIGJlIHRpZWQgdG8gdGhpcyByYWRpbyBidXR0b24uIEFsbCB0aGUgYnV0dG9ucyB0aWVkIHRvIHRoZSBzYW1lIHByb3BlcnR5IGJlY29tZSBwYXJ0IG9mIHRoZSBzYW1lIGdyb3VwLicsKSwKLSh1J1JhZGlvQnV0dG9uJyx1J0hlaWdodCcsdSdOJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGhlaWdodCBvZiB0aGUgYnV0dG9uLicsKSwKLSh1J1JhZGlvQnV0dG9uJyx1J1dpZHRoJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgd2lkdGggb2YgdGhlIGJ1dHRvbi4nLCksCi0odSdSYWRpb0J1dHRvbicsdSdYJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIG9mIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSByYWRpbyBidXR0b24uJywpLAotKHUnUmFkaW9CdXR0b24nLHUnVmFsdWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIHZhbHVlIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBidXR0b24uIFNlbGVjdGluZyB0aGUgYnV0dG9uIHdpbGwgc2V0IHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IHRvIHRoaXMgdmFsdWUuJywpLAotKHUnUmFkaW9CdXR0b24nLHUnT3JkZXInLHUnTicsMSwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgcG9zaXRpdmUgaW50ZWdlciB1c2VkIHRvIGRldGVybWluZSB0aGUgb3JkZXJpbmcgb2YgdGhlIGl0ZW1zIHdpdGhpbiBvbmUgbGlzdC4uVGhlIGludGVnZXJzIGRvIG5vdCBoYXZlIHRvIGJlIGNvbnNlY3V0aXZlLicsKSwKLSh1J1JhZGlvQnV0dG9uJyx1J0hlbHAnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoZSBoZWxwIHN0cmluZ3MgdXNlZCB3aXRoIHRoZSBidXR0b24uIFRoZSB0ZXh0IGlzIG9wdGlvbmFsLicsKSwKLSh1J1JlZ2lzdHJ5Jyx1J05hbWUnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIHJlZ2lzdHJ5IHZhbHVlIG5hbWUuJywpLAotKHUnUmVnaXN0cnknLHUnVmFsdWUnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIHJlZ2lzdHJ5IHZhbHVlLicsKSwKLSh1J1JlZ2lzdHJ5Jyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIENvbXBvbmVudCB0YWJsZSByZWZlcmVuY2luZyBjb21wb25lbnQgdGhhdCBjb250cm9scyB0aGUgaW5zdGFsbGluZyBvZiB0aGUgcmVnaXN0cnkgdmFsdWUuJywpLAotKHUnUmVnaXN0cnknLHUnS2V5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUmVnUGF0aCcsTm9uZSwgdSdUaGUga2V5IGZvciB0aGUgcmVnaXN0cnkgdmFsdWUuJywpLAotKHUnUmVnaXN0cnknLHUnUmVnaXN0cnknLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5LCBub24tbG9jYWxpemVkIHRva2VuLicsKSwKLSh1J1JlZ2lzdHJ5Jyx1J1Jvb3QnLHUnTicsLTEsMyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBwcmVkZWZpbmVkIHJvb3Qga2V5IGZvciB0aGUgcmVnaXN0cnkgdmFsdWUsIG9uZSBvZiBycmtFbnVtLicsKSwKLSh1J1JlZ0xvY2F0b3InLHUnTmFtZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdUaGUgcmVnaXN0cnkgdmFsdWUgbmFtZS4nLCksCi0odSdSZWdMb2NhdG9yJyx1J1R5cGUnLHUnWScsMCwxOCxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0FuIGludGVnZXIgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSByZWdpc3RyeSB2YWx1ZSBpcyBhIGZpbGVuYW1lIG9yIGEgZGlyZWN0b3J5IGxvY2F0aW9uIG9yIHRvIGJlIHVzZWQgYXMgaXMgdy9vIGludGVycHJldGF0aW9uLicsKSwKLSh1J1JlZ0xvY2F0b3InLHUnU2lnbmF0dXJlXycsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnVGhlIHRhYmxlIGtleS4gVGhlIFNpZ25hdHVyZV8gcmVwcmVzZW50cyBhIHVuaXF1ZSBmaWxlIHNpZ25hdHVyZSBhbmQgaXMgYWxzbyB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIFNpZ25hdHVyZSB0YWJsZS4gSWYgdGhlIHR5cGUgaXMgMCwgdGhlIHJlZ2lzdHJ5IHZhbHVlcyByZWZlcnMgYSBkaXJlY3RvcnksIGFuZCBfU2lnbmF0dXJlIGlzIG5vdCBhIGZvcmVpZ24ga2V5LicsKSwKLSh1J1JlZ0xvY2F0b3InLHUnS2V5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUmVnUGF0aCcsTm9uZSwgdSdUaGUga2V5IGZvciB0aGUgcmVnaXN0cnkgdmFsdWUuJywpLAotKHUnUmVnTG9jYXRvcicsdSdSb290Jyx1J04nLDAsMyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBwcmVkZWZpbmVkIHJvb3Qga2V5IGZvciB0aGUgcmVnaXN0cnkgdmFsdWUsIG9uZSBvZiBycmtFbnVtLicsKSwKLSh1J1JlbW92ZUZpbGUnLHUnQ29tcG9uZW50XycsdSdOJyxOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnRm9yZWlnbiBrZXkgcmVmZXJlbmNpbmcgQ29tcG9uZW50IHRoYXQgY29udHJvbHMgdGhlIGZpbGUgdG8gYmUgcmVtb3ZlZC4nLCksCi0odSdSZW1vdmVGaWxlJyx1J0ZpbGVLZXknLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5IHVzZWQgdG8gaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGZpbGUgZW50cnknLCksCi0odSdSZW1vdmVGaWxlJyx1J0ZpbGVOYW1lJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnV2lsZENhcmRGaWxlbmFtZScsTm9uZSwgdSdOYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHJlbW92ZWQuJywpLAotKHUnUmVtb3ZlRmlsZScsdSdEaXJQcm9wZXJ0eScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnTmFtZSBvZiBhIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzIGFzc3VtZWQgdG8gcmVzb2x2ZSB0byB0aGUgZnVsbCBwYXRobmFtZSB0byB0aGUgZm9sZGVyIG9mIHRoZSBmaWxlIHRvIGJlIHJlbW92ZWQuJywpLAotKHUnUmVtb3ZlRmlsZScsdSdJbnN0YWxsTW9kZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1JzE7MjszJyx1J0luc3RhbGxhdGlvbiBvcHRpb24sIG9uZSBvZiBpaW1FbnVtLicsKSwKLSh1J1JlbW92ZUluaUZpbGUnLHUnQWN0aW9uJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnMjs0Jyx1J1RoZSB0eXBlIG9mIG1vZGlmaWNhdGlvbiB0byBiZSBtYWRlLCBvbmUgb2YgaWlmRW51bS4nLCksCi0odSdSZW1vdmVJbmlGaWxlJyx1J1ZhbHVlJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J1RoZSB2YWx1ZSB0byBiZSBkZWxldGVkLiBUaGUgdmFsdWUgaXMgcmVxdWlyZWQgd2hlbiBBY3Rpb24gaXMgaWlmSW5pUmVtb3ZlVGFnJywpLAotKHUnUmVtb3ZlSW5pRmlsZScsdSdDb21wb25lbnRfJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBDb21wb25lbnQgdGFibGUgcmVmZXJlbmNpbmcgY29tcG9uZW50IHRoYXQgY29udHJvbHMgdGhlIGRlbGV0aW9uIG9mIHRoZSAuSU5JIHZhbHVlLicsKSwKLSh1J1JlbW92ZUluaUZpbGUnLHUnRmlsZU5hbWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsTm9uZSwgdSdUaGUgLklOSSBmaWxlIG5hbWUgaW4gd2hpY2ggdG8gZGVsZXRlIHRoZSBpbmZvcm1hdGlvbicsKSwKLSh1J1JlbW92ZUluaUZpbGUnLHUnRGlyUHJvcGVydHknLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIERpcmVjdG9yeSB0YWJsZSBkZW5vdGluZyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSAuSU5JIGZpbGUgaXMuJywpLAotKHUnUmVtb3ZlSW5pRmlsZScsdSdLZXknLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIC5JTkkgZmlsZSBrZXkgYmVsb3cgU2VjdGlvbi4nLCksCi0odSdSZW1vdmVJbmlGaWxlJyx1J1NlY3Rpb24nLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnVGhlIC5JTkkgZmlsZSBTZWN0aW9uLicsKSwKLSh1J1JlbW92ZUluaUZpbGUnLHUnUmVtb3ZlSW5pRmlsZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnUHJpbWFyeSBrZXksIG5vbi1sb2NhbGl6ZWQgdG9rZW4uJywpLAotKHUnUmVtb3ZlUmVnaXN0cnknLHUnTmFtZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdUaGUgcmVnaXN0cnkgdmFsdWUgbmFtZS4nLCksCi0odSdSZW1vdmVSZWdpc3RyeScsdSdDb21wb25lbnRfJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBDb21wb25lbnQgdGFibGUgcmVmZXJlbmNpbmcgY29tcG9uZW50IHRoYXQgY29udHJvbHMgdGhlIGRlbGV0aW9uIG9mIHRoZSByZWdpc3RyeSB2YWx1ZS4nLCksCi0odSdSZW1vdmVSZWdpc3RyeScsdSdLZXknLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdSZWdQYXRoJyxOb25lLCB1J1RoZSBrZXkgZm9yIHRoZSByZWdpc3RyeSB2YWx1ZS4nLCksCi0odSdSZW1vdmVSZWdpc3RyeScsdSdSb290Jyx1J04nLC0xLDMsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgcHJlZGVmaW5lZCByb290IGtleSBmb3IgdGhlIHJlZ2lzdHJ5IHZhbHVlLCBvbmUgb2YgcnJrRW51bScsKSwKLSh1J1JlbW92ZVJlZ2lzdHJ5Jyx1J1JlbW92ZVJlZ2lzdHJ5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdQcmltYXJ5IGtleSwgbm9uLWxvY2FsaXplZCB0b2tlbi4nLCksCi0odSdSZXNlcnZlQ29zdCcsdSdDb21wb25lbnRfJyx1J04nLE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdSZXNlcnZlIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBzcGFjZSBpZiB0aGlzIGNvbXBvbmVudCBpcyB0byBiZSBpbnN0YWxsZWQuJywpLAotKHUnUmVzZXJ2ZUNvc3QnLHUnUmVzZXJ2ZUZvbGRlcicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnTmFtZSBvZiBhIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzIGFzc3VtZWQgdG8gcmVzb2x2ZSB0byB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnknLCksCi0odSdSZXNlcnZlQ29zdCcsdSdSZXNlcnZlS2V5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdQcmltYXJ5IGtleSB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyIFJlc2VydmVDb3N0IHJlY29yZCcsKSwKLSh1J1Jlc2VydmVDb3N0Jyx1J1Jlc2VydmVMb2NhbCcsdSdOJywwLDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdEaXNrIHNwYWNlIHRvIHJlc2VydmUgaWYgbGlua2VkIGNvbXBvbmVudCBpcyBpbnN0YWxsZWQgbG9jYWxseS4nLCksCi0odSdSZXNlcnZlQ29zdCcsdSdSZXNlcnZlU291cmNlJyx1J04nLDAsMjE0NzQ4MzY0NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Rpc2sgc3BhY2UgdG8gcmVzZXJ2ZSBpZiBsaW5rZWQgY29tcG9uZW50IGlzIGluc3RhbGxlZCB0byBydW4gZnJvbSB0aGUgc291cmNlIGxvY2F0aW9uLicsKSwKLSh1J1NlbGZSZWcnLHUnRmlsZV8nLHUnTicsTm9uZSwgTm9uZSwgdSdGaWxlJywxLHUnSWRlbnRpZmllcicsTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBGaWxlIHRhYmxlIGRlbm90aW5nIHRoZSBtb2R1bGUgdGhhdCBuZWVkcyB0byBiZSByZWdpc3RlcmVkLicsKSwKLSh1J1NlbGZSZWcnLHUnQ29zdCcsdSdZJywwLDMyNzY3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGNvc3Qgb2YgcmVnaXN0ZXJpbmcgdGhlIG1vZHVsZS4nLCksCi0odSdTZXJ2aWNlQ29udHJvbCcsdSdOYW1lJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J05hbWUgb2YgYSBzZXJ2aWNlLiAvLCBcXCwgY29tbWEgYW5kIHNwYWNlIGFyZSBpbnZhbGlkJywpLAotKHUnU2VydmljZUNvbnRyb2wnLHUnQ29tcG9uZW50XycsdSdOJyxOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUmVxdWlyZWQgZm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IFRhYmxlIHRoYXQgY29udHJvbHMgdGhlIHN0YXJ0dXAgb2YgdGhlIHNlcnZpY2UnLCksCi0odSdTZXJ2aWNlQ29udHJvbCcsdSdFdmVudCcsdSdOJywwLDE4NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0JpdCBmaWVsZDogIEluc3RhbGw6ICAweDEgPSBTdGFydCwgMHgyID0gU3RvcCwgMHg4ID0gRGVsZXRlLCBVbmluc3RhbGw6IDB4MTAgPSBTdGFydCwgMHgyMCA9IFN0b3AsIDB4ODAgPSBEZWxldGUnLCksCi0odSdTZXJ2aWNlQ29udHJvbCcsdSdTZXJ2aWNlQ29udHJvbCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnUHJpbWFyeSBrZXksIG5vbi1sb2NhbGl6ZWQgdG9rZW4uJywpLAotKHUnU2VydmljZUNvbnRyb2wnLHUnQXJndW1lbnRzJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J0FyZ3VtZW50cyBmb3IgdGhlIHNlcnZpY2UuICBTZXBhcmF0ZSBieSBbfl0uJywpLAotKHUnU2VydmljZUNvbnRyb2wnLHUnV2FpdCcsdSdZJywwLDEsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdCb29sZWFuIGZvciB3aGV0aGVyIHRvIHdhaXQgZm9yIHRoZSBzZXJ2aWNlIHRvIGZ1bGx5IHN0YXJ0JywpLAotKHUnU2VydmljZUluc3RhbGwnLHUnTmFtZScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdJbnRlcm5hbCBOYW1lIG9mIHRoZSBTZXJ2aWNlJywpLAotKHUnU2VydmljZUluc3RhbGwnLHUnRGVzY3JpcHRpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J0Rlc2NyaXB0aW9uIG9mIHNlcnZpY2UuJywpLAotKHUnU2VydmljZUluc3RhbGwnLHUnQ29tcG9uZW50XycsdSdOJyxOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnUmVxdWlyZWQgZm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IFRhYmxlIHRoYXQgY29udHJvbHMgdGhlIHN0YXJ0dXAgb2YgdGhlIHNlcnZpY2UnLCksCi0odSdTZXJ2aWNlSW5zdGFsbCcsdSdBcmd1bWVudHMnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnQXJndW1lbnRzIHRvIGluY2x1ZGUgaW4gZXZlcnkgc3RhcnQgb2YgdGhlIHNlcnZpY2UsIHBhc3NlZCB0byBXaW5NYWluJywpLAotKHUnU2VydmljZUluc3RhbGwnLHUnU2VydmljZUluc3RhbGwnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J1ByaW1hcnkga2V5LCBub24tbG9jYWxpemVkIHRva2VuLicsKSwKLSh1J1NlcnZpY2VJbnN0YWxsJyx1J0RlcGVuZGVuY2llcycsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdPdGhlciBzZXJ2aWNlcyB0aGlzIGRlcGVuZHMgb24gdG8gc3RhcnQuICBTZXBhcmF0ZSBieSBbfl0sIGFuZCBlbmQgd2l0aCBbfl1bfl0nLCksCi0odSdTZXJ2aWNlSW5zdGFsbCcsdSdEaXNwbGF5TmFtZScsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdFeHRlcm5hbCBOYW1lIG9mIHRoZSBTZXJ2aWNlJywpLAotKHUnU2VydmljZUluc3RhbGwnLHUnRXJyb3JDb250cm9sJyx1J04nLC0yMTQ3NDgzNjQ3LDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdTZXZlcml0eSBvZiBlcnJvciBpZiBzZXJ2aWNlIGZhaWxzIHRvIHN0YXJ0JywpLAotKHUnU2VydmljZUluc3RhbGwnLHUnTG9hZE9yZGVyR3JvdXAnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnTG9hZE9yZGVyR3JvdXAnLCksCi0odSdTZXJ2aWNlSW5zdGFsbCcsdSdQYXNzd29yZCcsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdwYXNzd29yZCB0byBydW4gc2VydmljZSB3aXRoLiAgKHdpdGggU3RhcnROYW1lKScsKSwKLSh1J1NlcnZpY2VJbnN0YWxsJyx1J1NlcnZpY2VUeXBlJyx1J04nLC0yMTQ3NDgzNjQ3LDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUeXBlIG9mIHRoZSBzZXJ2aWNlJywpLAotKHUnU2VydmljZUluc3RhbGwnLHUnU3RhcnROYW1lJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J1VzZXIgb3Igb2JqZWN0IG5hbWUgdG8gcnVuIHNlcnZpY2UgYXMnLCksCi0odSdTZXJ2aWNlSW5zdGFsbCcsdSdTdGFydFR5cGUnLHUnTicsMCw0LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVHlwZSBvZiB0aGUgc2VydmljZScsKSwKLSh1J1Nob3J0Y3V0Jyx1J05hbWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsTm9uZSwgdSdUaGUgbmFtZSBvZiB0aGUgc2hvcnRjdXQgdG8gYmUgY3JlYXRlZC4nLCksCi0odSdTaG9ydGN1dCcsdSdEZXNjcmlwdGlvbicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLE5vbmUsIHUnVGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgc2hvcnRjdXQuJywpLAotKHUnU2hvcnRjdXQnLHUnQ29tcG9uZW50XycsdSdOJyxOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IHRhYmxlIGRlbm90aW5nIHRoZSBjb21wb25lbnQgd2hvc2Ugc2VsZWN0aW9uIGdhdGVzIHRoZSBzaG9ydGN1dCBjcmVhdGlvbi9kZWxldGlvbi4nLCksCi0odSdTaG9ydGN1dCcsdSdJY29uXycsdSdZJyxOb25lLCBOb25lLCB1J0ljb24nLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIEZpbGUgdGFibGUgZGVub3RpbmcgdGhlIGV4dGVybmFsIGljb24gZmlsZSBmb3IgdGhlIHNob3J0Y3V0LicsKSwKLSh1J1Nob3J0Y3V0Jyx1J0ljb25JbmRleCcsdSdZJywtMzI3NjcsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgaWNvbiBpbmRleCBmb3IgdGhlIHNob3J0Y3V0LicsKSwKLSh1J1Nob3J0Y3V0Jyx1J0RpcmVjdG9yeV8nLHUnTicsTm9uZSwgTm9uZSwgdSdEaXJlY3RvcnknLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIERpcmVjdG9yeSB0YWJsZSBkZW5vdGluZyB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBzaG9ydGN1dCBmaWxlIGlzIGNyZWF0ZWQuJywpLAotKHUnU2hvcnRjdXQnLHUnVGFyZ2V0Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnU2hvcnRjdXQnLE5vbmUsIHUnVGhlIHNob3J0Y3V0IHRhcmdldC4gVGhpcyBpcyB1c3VhbGx5IGEgcHJvcGVydHkgdGhhdCBpcyBleHBhbmRlZCB0byBhIGZpbGUgb3IgYSBmb2xkZXIgdGhhdCB0aGUgc2hvcnRjdXQgcG9pbnRzIHRvLicsKSwKLSh1J1Nob3J0Y3V0Jyx1J0FyZ3VtZW50cycsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsTm9uZSwgdSdUaGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBmb3IgdGhlIHNob3J0Y3V0LicsKSwKLSh1J1Nob3J0Y3V0Jyx1J1Nob3J0Y3V0Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdQcmltYXJ5IGtleSwgbm9uLWxvY2FsaXplZCB0b2tlbi4nLCksCi0odSdTaG9ydGN1dCcsdSdIb3RrZXknLHUnWScsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBob3RrZXkgZm9yIHRoZSBzaG9ydGN1dC4gSXQgaGFzIHRoZSB2aXJ0dWFsLWtleSBjb2RlIGZvciB0aGUga2V5IGluIHRoZSBsb3ctb3JkZXIgYnl0ZSwgYW5kIHRoZSBtb2RpZmllciBmbGFncyBpbiB0aGUgaGlnaC1vcmRlciBieXRlLiAnLCksCi0odSdTaG9ydGN1dCcsdSdTaG93Q21kJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnMTszOzcnLHUnVGhlIHNob3cgY29tbWFuZCBmb3IgdGhlIGFwcGxpY2F0aW9uIHdpbmRvdy5UaGUgZm9sbG93aW5nIHZhbHVlcyBtYXkgYmUgdXNlZC4nLCksCi0odSdTaG9ydGN1dCcsdSdXa0RpcicsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLE5vbmUsIHUnTmFtZSBvZiBwcm9wZXJ0eSBkZWZpbmluZyBsb2NhdGlvbiBvZiB3b3JraW5nIGRpcmVjdG9yeS4nLCksCi0odSdTaWduYXR1cmUnLHUnRmlsZU5hbWUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsTm9uZSwgdSdUaGUgbmFtZSBvZiB0aGUgZmlsZS4gVGhpcyBtYXkgY29udGFpbiBhICJzaG9ydCBuYW1lfGxvbmcgbmFtZSIgcGFpci4nLCksCi0odSdTaWduYXR1cmUnLHUnU2lnbmF0dXJlJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdUaGUgdGFibGUga2V5LiBUaGUgU2lnbmF0dXJlIHJlcHJlc2VudHMgYSB1bmlxdWUgZmlsZSBzaWduYXR1cmUuJywpLAotKHUnU2lnbmF0dXJlJyx1J0xhbmd1YWdlcycsdSdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0xhbmd1YWdlJyxOb25lLCB1J1RoZSBsYW5ndWFnZXMgc3VwcG9ydGVkIGJ5IHRoZSBmaWxlLicsKSwKLSh1J1NpZ25hdHVyZScsdSdNYXhEYXRlJyx1J1knLDAsMjE0NzQ4MzY0NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBtYXhpbXVtIGNyZWF0aW9uIGRhdGUgb2YgdGhlIGZpbGUuJywpLAotKHUnU2lnbmF0dXJlJyx1J01heFNpemUnLHUnWScsMCwyMTQ3NDgzNjQ3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZmlsZS4gJywpLAotKHUnU2lnbmF0dXJlJyx1J01heFZlcnNpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoZSBtYXhpbXVtIHZlcnNpb24gb2YgdGhlIGZpbGUuJywpLAotKHUnU2lnbmF0dXJlJyx1J01pbkRhdGUnLHUnWScsMCwyMTQ3NDgzNjQ3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIG1pbmltdW0gY3JlYXRpb24gZGF0ZSBvZiB0aGUgZmlsZS4nLCksCi0odSdTaWduYXR1cmUnLHUnTWluU2l6ZScsdSdZJywwLDIxNDc0ODM2NDcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlLicsKSwKLSh1J1NpZ25hdHVyZScsdSdNaW5WZXJzaW9uJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBmaWxlLicsKSwKLSh1J1RleHRTdHlsZScsdSdUZXh0U3R5bGUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJyxOb25lLCB1J05hbWUgb2YgdGhlIHN0eWxlLiBUaGUgcHJpbWFyeSBrZXkgb2YgdGhpcyB0YWJsZS4gVGhpcyBuYW1lIGlzIGVtYmVkZGVkIGluIHRoZSB0ZXh0cyB0byBpbmRpY2F0ZSBhIHN0eWxlIGNoYW5nZS4nLCksCi0odSdUZXh0U3R5bGUnLHUnQ29sb3InLHUnWScsMCwxNjc3NzIxNSxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgbG9uZyBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIGNvbG9yIG9mIHRoZSBzdHJpbmcgaW4gdGhlIFJHQiBmb3JtYXQgKFJlZCwgR3JlZW4sIEJsdWUgZWFjaCAwLTI1NSwgUkdCID0gUiArIDI1NipHICsgMjU2XjIqQikuJywpLAotKHUnVGV4dFN0eWxlJyx1J0ZhY2VOYW1lJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBuYW1lIG9mIHRoZSBmb250IHVzZWQuIFJlcXVpcmVkLiBUaGUgc3RyaW5nIG11c3QgYmUgYXQgbW9zdCAzMSBjaGFyYWN0ZXJzIGxvbmcuJywpLAotKHUnVGV4dFN0eWxlJyx1J1NpemUnLHUnTicsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBzaXplIG9mIHRoZSBmb250IHVzZWQuIFRoaXMgc2l6ZSBpcyBnaXZlbiBpbiBvdXIgdW5pdHMgKDEvMTIgb2YgdGhlIHN5c3RlbSBmb250IGhlaWdodCkuIEFzc3VtaW5nIHRoYXQgdGhlIHN5c3RlbSBmb250IGlzIHNldCB0byAxMiBwb2ludCBzaXplLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHBvaW50IHNpemUuJywpLAotKHUnVGV4dFN0eWxlJyx1J1N0eWxlQml0cycsdSdZJywwLDE1LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQSBjb21iaW5hdGlvbiBvZiBzdHlsZSBiaXRzLicsKSwKLSh1J1R5cGVMaWInLHUnRGVzY3JpcHRpb24nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCBOb25lLCApLAotKHUnVHlwZUxpYicsdSdGZWF0dXJlXycsdSdOJyxOb25lLCBOb25lLCB1J0ZlYXR1cmUnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J1JlcXVpcmVkIGZvcmVpZ24ga2V5IGludG8gdGhlIEZlYXR1cmUgVGFibGUsIHNwZWNpZnlpbmcgdGhlIGZlYXR1cmUgdG8gdmFsaWRhdGUgb3IgaW5zdGFsbCBpbiBvcmRlciBmb3IgdGhlIHR5cGUgbGlicmFyeSB0byBiZSBvcGVyYXRpb25hbC4nLCksCi0odSdUeXBlTGliJyx1J0NvbXBvbmVudF8nLHUnTicsTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLDEsdSdJZGVudGlmaWVyJyxOb25lLCB1J1JlcXVpcmVkIGZvcmVpZ24ga2V5IGludG8gdGhlIENvbXBvbmVudCBUYWJsZSwgc3BlY2lmeWluZyB0aGUgY29tcG9uZW50IGZvciB3aGljaCB0byByZXR1cm4gYSBwYXRoIHdoZW4gY2FsbGVkIHRocm91Z2ggTG9jYXRlQ29tcG9uZW50LicsKSwKLSh1J1R5cGVMaWInLHUnRGlyZWN0b3J5XycsdSdZJyxOb25lLCBOb25lLCB1J0RpcmVjdG9yeScsMSx1J0lkZW50aWZpZXInLE5vbmUsIHUnT3B0aW9uYWwuIFRoZSBmb3JlaWduIGtleSBpbnRvIHRoZSBEaXJlY3RvcnkgdGFibGUgZGVub3RpbmcgdGhlIHBhdGggdG8gdGhlIGhlbHAgZmlsZSBmb3IgdGhlIHR5cGUgbGlicmFyeS4nLCksCi0odSdUeXBlTGliJyx1J0xhbmd1YWdlJyx1J04nLDAsMzI3NjcsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGxpYnJhcnkuJywpLAotKHUnVHlwZUxpYicsdSdWZXJzaW9uJyx1J1knLDAsMTY3NzcyMTUsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gVGhlIG1pbm9yIHZlcnNpb24gaXMgaW4gdGhlIGxvd2VyIDggYml0cyBvZiB0aGUgaW50ZWdlci4gVGhlIG1ham9yIHZlcnNpb24gaXMgaW4gdGhlIG5leHQgMTYgYml0cy4gJywpLAotKHUnVHlwZUxpYicsdSdDb3N0Jyx1J1knLDAsMjE0NzQ4MzY0NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBjb3N0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSB0eXBlbGliLiBUaGlzIGNvbHVtbiBpcyBjdXJyZW50bHkgb3B0aW9uYWwuJywpLAotKHUnVHlwZUxpYicsdSdMaWJJRCcsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0d1aWQnLE5vbmUsIHUnVGhlIEdVSUQgdGhhdCByZXByZXNlbnRzIHRoZSBsaWJyYXJ5LicsKSwKLSh1J1VJVGV4dCcsdSdUZXh0Jyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdUaGUgbG9jYWxpemVkIHZlcnNpb24gb2YgdGhlIHN0cmluZy4nLCksCi0odSdVSVRleHQnLHUnS2V5Jyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsTm9uZSwgdSdBIHVuaXF1ZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSBwYXJ0aWN1bGFyIHN0cmluZy4nLCksCi0odSdVcGdyYWRlJyx1J0F0dHJpYnV0ZXMnLHUnTicsMCwyMTQ3NDgzNjQ3LE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGF0dHJpYnV0ZXMgb2YgdGhpcyBwcm9kdWN0IHNldC4nLCksCi0odSdVcGdyYWRlJyx1J0xhbmd1YWdlJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTGFuZ3VhZ2UnLE5vbmUsIHUnQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBsYW5ndWFnZXMgZm9yIGVpdGhlciBwcm9kdWN0cyBpbiB0aGlzIHNldCBvciBwcm9kdWN0cyBub3QgaW4gdGhpcyBzZXQuJywpLAotKHUnVXBncmFkZScsdSdBY3Rpb25Qcm9wZXJ0eScsdSdOJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1VwcGVyQ2FzZScsTm9uZSwgdSdUaGUgcHJvcGVydHkgdG8gc2V0IHdoZW4gYSBwcm9kdWN0IGluIHRoaXMgc2V0IGlzIGZvdW5kLicsKSwKLSh1J1VwZ3JhZGUnLHUnUmVtb3ZlJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J1RoZSBsaXN0IG9mIGZlYXR1cmVzIHRvIHJlbW92ZSB3aGVuIHVuaW5zdGFsbGluZyBhIHByb2R1Y3QgZnJvbSB0aGlzIHNldC4gIFRoZSBkZWZhdWx0IGlzICJBTEwiLicsKSwKLSh1J1VwZ3JhZGUnLHUnVXBncmFkZUNvZGUnLHUnTicsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdHdWlkJyxOb25lLCB1J1RoZSBVcGdyYWRlQ29kZSBHVUlEIGJlbG9uZ2luZyB0byB0aGUgcHJvZHVjdHMgaW4gdGhpcyBzZXQuJywpLAotKHUnVXBncmFkZScsdSdWZXJzaW9uTWF4Jyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdUaGUgbWF4aW11bSBQcm9kdWN0VmVyc2lvbiBvZiB0aGUgcHJvZHVjdHMgaW4gdGhpcyBzZXQuICBUaGUgc2V0IG1heSBvciBtYXkgbm90IGluY2x1ZGUgcHJvZHVjdHMgd2l0aCB0aGlzIHBhcnRpY3VsYXIgdmVyc2lvbi4nLCksCi0odSdVcGdyYWRlJyx1J1ZlcnNpb25NaW4nLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JyxOb25lLCB1J1RoZSBtaW5pbXVtIFByb2R1Y3RWZXJzaW9uIG9mIHRoZSBwcm9kdWN0cyBpbiB0aGlzIHNldC4gIFRoZSBzZXQgbWF5IG9yIG1heSBub3QgaW5jbHVkZSBwcm9kdWN0cyB3aXRoIHRoaXMgcGFydGljdWxhciB2ZXJzaW9uLicsKSwKLSh1J1ZlcmInLHUnU2VxdWVuY2UnLHUnWScsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J09yZGVyIHdpdGhpbiB0aGUgdmVyYnMgZm9yIGEgcGFydGljdWxhciBleHRlbnNpb24uIEFsc28gdXNlZCBzaW1wbHkgdG8gc3BlY2lmeSB0aGUgZGVmYXVsdCB2ZXJiLicsKSwKLSh1J1ZlcmInLHUnQXJndW1lbnQnLHUnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLE5vbmUsIHUnT3B0aW9uYWwgdmFsdWUgZm9yIHRoZSBjb21tYW5kIGFyZ3VtZW50cy4nLCksCi0odSdWZXJiJyx1J0V4dGVuc2lvbl8nLHUnTicsTm9uZSwgTm9uZSwgdSdFeHRlbnNpb24nLDEsdSdUZXh0JyxOb25lLCB1J1RoZSBleHRlbnNpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZSByb3cuJywpLAotKHUnVmVyYicsdSdWZXJiJyx1J04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsTm9uZSwgdSdUaGUgdmVyYiBmb3IgdGhlIGNvbW1hbmQuJywpLAotKHUnVmVyYicsdSdDb21tYW5kJyx1J1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJyxOb25lLCB1J1RoZSBjb21tYW5kIHRleHQuJywpLAotXQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3NlcXVlbmNlLnB5IGIvVG9vbHMvbXNpL3NlcXVlbmNlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTM4ZjdhLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21zaS9zZXF1ZW5jZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi1BZG1pbkV4ZWN1dGVTZXF1ZW5jZSA9IFsKLSh1J0luc3RhbGxJbml0aWFsaXplJywgTm9uZSwgMTUwMCksCi0odSdJbnN0YWxsRmluYWxpemUnLCBOb25lLCA2NjAwKSwKLSh1J0luc3RhbGxGaWxlcycsIE5vbmUsIDQwMDApLAotKHUnSW5zdGFsbEFkbWluUGFja2FnZScsIE5vbmUsIDM5MDApLAotKHUnRmlsZUNvc3QnLCBOb25lLCA5MDApLAotKHUnQ29zdEluaXRpYWxpemUnLCBOb25lLCA4MDApLAotKHUnQ29zdEZpbmFsaXplJywgTm9uZSwgMTAwMCksCi0odSdJbnN0YWxsVmFsaWRhdGUnLCBOb25lLCAxNDAwKSwKLV0KLQotQWRtaW5VSVNlcXVlbmNlID0gWwotKHUnRmlsZUNvc3QnLCBOb25lLCA5MDApLAotKHUnQ29zdEluaXRpYWxpemUnLCBOb25lLCA4MDApLAotKHUnQ29zdEZpbmFsaXplJywgTm9uZSwgMTAwMCksCi0odSdFeGVjdXRlQWN0aW9uJywgTm9uZSwgMTMwMCksCi0odSdFeGl0RGlhbG9nJywgTm9uZSwgLTEpLAotKHUnRmF0YWxFcnJvcicsIE5vbmUsIC0zKSwKLSh1J1VzZXJFeGl0JywgTm9uZSwgLTIpLAotXQotCi1BZHZ0RXhlY3V0ZVNlcXVlbmNlID0gWwotKHUnSW5zdGFsbEluaXRpYWxpemUnLCBOb25lLCAxNTAwKSwKLSh1J0luc3RhbGxGaW5hbGl6ZScsIE5vbmUsIDY2MDApLAotKHUnQ29zdEluaXRpYWxpemUnLCBOb25lLCA4MDApLAotKHUnQ29zdEZpbmFsaXplJywgTm9uZSwgMTAwMCksCi0odSdJbnN0YWxsVmFsaWRhdGUnLCBOb25lLCAxNDAwKSwKLSh1J0NyZWF0ZVNob3J0Y3V0cycsIE5vbmUsIDQ1MDApLAotKHUnTXNpUHVibGlzaEFzc2VtYmxpZXMnLCBOb25lLCA2MjUwKSwKLSh1J1B1Ymxpc2hDb21wb25lbnRzJywgTm9uZSwgNjIwMCksCi0odSdQdWJsaXNoRmVhdHVyZXMnLCBOb25lLCA2MzAwKSwKLSh1J1B1Ymxpc2hQcm9kdWN0JywgTm9uZSwgNjQwMCksCi0odSdSZWdpc3RlckNsYXNzSW5mbycsIE5vbmUsIDQ2MDApLAotKHUnUmVnaXN0ZXJFeHRlbnNpb25JbmZvJywgTm9uZSwgNDcwMCksCi0odSdSZWdpc3Rlck1JTUVJbmZvJywgTm9uZSwgNDkwMCksCi0odSdSZWdpc3RlclByb2dJZEluZm8nLCBOb25lLCA0ODAwKSwKLV0KLQotSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSA9IFsKLSh1J0luc3RhbGxJbml0aWFsaXplJywgTm9uZSwgMTUwMCksCi0odSdJbnN0YWxsRmluYWxpemUnLCBOb25lLCA2NjAwKSwKLSh1J0luc3RhbGxGaWxlcycsIE5vbmUsIDQwMDApLAotKHUnRmlsZUNvc3QnLCBOb25lLCA5MDApLAotKHUnQ29zdEluaXRpYWxpemUnLCBOb25lLCA4MDApLAotKHUnQ29zdEZpbmFsaXplJywgTm9uZSwgMTAwMCksCi0odSdJbnN0YWxsVmFsaWRhdGUnLCBOb25lLCAxNDAwKSwKLSh1J0NyZWF0ZVNob3J0Y3V0cycsIE5vbmUsIDQ1MDApLAotKHUnTXNpUHVibGlzaEFzc2VtYmxpZXMnLCBOb25lLCA2MjUwKSwKLSh1J1B1Ymxpc2hDb21wb25lbnRzJywgTm9uZSwgNjIwMCksCi0odSdQdWJsaXNoRmVhdHVyZXMnLCBOb25lLCA2MzAwKSwKLSh1J1B1Ymxpc2hQcm9kdWN0JywgTm9uZSwgNjQwMCksCi0odSdSZWdpc3RlckNsYXNzSW5mbycsIE5vbmUsIDQ2MDApLAotKHUnUmVnaXN0ZXJFeHRlbnNpb25JbmZvJywgTm9uZSwgNDcwMCksCi0odSdSZWdpc3Rlck1JTUVJbmZvJywgTm9uZSwgNDkwMCksCi0odSdSZWdpc3RlclByb2dJZEluZm8nLCBOb25lLCA0ODAwKSwKLSh1J0FsbG9jYXRlUmVnaXN0cnlTcGFjZScsIHUnTk9UIEluc3RhbGxlZCcsIDE1NTApLAotKHUnQXBwU2VhcmNoJywgTm9uZSwgNDAwKSwKLSh1J0JpbmRJbWFnZScsIE5vbmUsIDQzMDApLAotKHUnQ0NQU2VhcmNoJywgdSdOT1QgSW5zdGFsbGVkJywgNTAwKSwKLSh1J0NyZWF0ZUZvbGRlcnMnLCBOb25lLCAzNzAwKSwKLSh1J0RlbGV0ZVNlcnZpY2VzJywgdSdWZXJzaW9uTlQnLCAyMDAwKSwKLSh1J0R1cGxpY2F0ZUZpbGVzJywgTm9uZSwgNDIxMCksCi0odSdGaW5kUmVsYXRlZFByb2R1Y3RzJywgTm9uZSwgMjAwKSwKLSh1J0luc3RhbGxPREJDJywgTm9uZSwgNTQwMCksCi0odSdJbnN0YWxsU2VydmljZXMnLCB1J1ZlcnNpb25OVCcsIDU4MDApLAotKHUnSXNvbGF0ZUNvbXBvbmVudHMnLCBOb25lLCA5NTApLAotKHUnTGF1bmNoQ29uZGl0aW9ucycsIE5vbmUsIDEwMCksCi0odSdNaWdyYXRlRmVhdHVyZVN0YXRlcycsIE5vbmUsIDEyMDApLAotKHUnTW92ZUZpbGVzJywgTm9uZSwgMzgwMCksCi0odSdQYXRjaEZpbGVzJywgTm9uZSwgNDA5MCksCi0odSdQcm9jZXNzQ29tcG9uZW50cycsIE5vbmUsIDE2MDApLAotKHUnUmVnaXN0ZXJDb21QbHVzJywgTm9uZSwgNTcwMCksCi0odSdSZWdpc3RlckZvbnRzJywgTm9uZSwgNTMwMCksCi0odSdSZWdpc3RlclByb2R1Y3QnLCBOb25lLCA2MTAwKSwKLSh1J1JlZ2lzdGVyVHlwZUxpYnJhcmllcycsIE5vbmUsIDU1MDApLAotKHUnUmVnaXN0ZXJVc2VyJywgTm9uZSwgNjAwMCksCi0odSdSZW1vdmVEdXBsaWNhdGVGaWxlcycsIE5vbmUsIDM0MDApLAotKHUnUmVtb3ZlRW52aXJvbm1lbnRTdHJpbmdzJywgTm9uZSwgMzMwMCksCi0odSdSZW1vdmVFeGlzdGluZ1Byb2R1Y3RzJywgTm9uZSwgNjcwMCksCi0odSdSZW1vdmVGaWxlcycsIE5vbmUsIDM1MDApLAotKHUnUmVtb3ZlRm9sZGVycycsIE5vbmUsIDM2MDApLAotKHUnUmVtb3ZlSW5pVmFsdWVzJywgTm9uZSwgMzEwMCksCi0odSdSZW1vdmVPREJDJywgTm9uZSwgMjQwMCksCi0odSdSZW1vdmVSZWdpc3RyeVZhbHVlcycsIE5vbmUsIDI2MDApLAotKHUnUmVtb3ZlU2hvcnRjdXRzJywgTm9uZSwgMzIwMCksCi0odSdSTUNDUFNlYXJjaCcsIHUnTk9UIEluc3RhbGxlZCcsIDYwMCksCi0odSdTZWxmUmVnTW9kdWxlcycsIE5vbmUsIDU2MDApLAotKHUnU2VsZlVucmVnTW9kdWxlcycsIE5vbmUsIDIyMDApLAotKHUnU2V0T0RCQ0ZvbGRlcnMnLCBOb25lLCAxMTAwKSwKLSh1J1N0YXJ0U2VydmljZXMnLCB1J1ZlcnNpb25OVCcsIDU5MDApLAotKHUnU3RvcFNlcnZpY2VzJywgdSdWZXJzaW9uTlQnLCAxOTAwKSwKLSh1J01zaVVucHVibGlzaEFzc2VtYmxpZXMnLCBOb25lLCAxNzUwKSwKLSh1J1VucHVibGlzaENvbXBvbmVudHMnLCBOb25lLCAxNzAwKSwKLSh1J1VucHVibGlzaEZlYXR1cmVzJywgTm9uZSwgMTgwMCksCi0odSdVbnJlZ2lzdGVyQ2xhc3NJbmZvJywgTm9uZSwgMjcwMCksCi0odSdVbnJlZ2lzdGVyQ29tUGx1cycsIE5vbmUsIDIxMDApLAotKHUnVW5yZWdpc3RlckV4dGVuc2lvbkluZm8nLCBOb25lLCAyODAwKSwKLSh1J1VucmVnaXN0ZXJGb250cycsIE5vbmUsIDI1MDApLAotKHUnVW5yZWdpc3Rlck1JTUVJbmZvJywgTm9uZSwgMzAwMCksCi0odSdVbnJlZ2lzdGVyUHJvZ0lkSW5mbycsIE5vbmUsIDI5MDApLAotKHUnVW5yZWdpc3RlclR5cGVMaWJyYXJpZXMnLCBOb25lLCAyMzAwKSwKLSh1J1ZhbGlkYXRlUHJvZHVjdElEJywgTm9uZSwgNzAwKSwKLSh1J1dyaXRlRW52aXJvbm1lbnRTdHJpbmdzJywgTm9uZSwgNTIwMCksCi0odSdXcml0ZUluaVZhbHVlcycsIE5vbmUsIDUxMDApLAotKHUnV3JpdGVSZWdpc3RyeVZhbHVlcycsIE5vbmUsIDUwMDApLAotXQotCi1JbnN0YWxsVUlTZXF1ZW5jZSA9IFsKLSh1J0ZpbGVDb3N0JywgTm9uZSwgOTAwKSwKLSh1J0Nvc3RJbml0aWFsaXplJywgTm9uZSwgODAwKSwKLSh1J0Nvc3RGaW5hbGl6ZScsIE5vbmUsIDEwMDApLAotKHUnRXhlY3V0ZUFjdGlvbicsIE5vbmUsIDEzMDApLAotKHUnRXhpdERpYWxvZycsIE5vbmUsIC0xKSwKLSh1J0ZhdGFsRXJyb3InLCBOb25lLCAtMyksCi0odSdVc2VyRXhpdCcsIE5vbmUsIC0yKSwKLSh1J0FwcFNlYXJjaCcsIE5vbmUsIDQwMCksCi0odSdDQ1BTZWFyY2gnLCB1J05PVCBJbnN0YWxsZWQnLCA1MDApLAotKHUnRmluZFJlbGF0ZWRQcm9kdWN0cycsIE5vbmUsIDIwMCksCi0odSdJc29sYXRlQ29tcG9uZW50cycsIE5vbmUsIDk1MCksCi0odSdMYXVuY2hDb25kaXRpb25zJywgTm9uZSwgMTAwKSwKLSh1J01pZ3JhdGVGZWF0dXJlU3RhdGVzJywgTm9uZSwgMTIwMCksCi0odSdSTUNDUFNlYXJjaCcsIHUnTk9UIEluc3RhbGxlZCcsIDYwMCksCi0odSdWYWxpZGF0ZVByb2R1Y3RJRCcsIE5vbmUsIDcwMCksCi1dCi0KLXRhYmxlcz1bJ0FkbWluRXhlY3V0ZVNlcXVlbmNlJywgJ0FkbWluVUlTZXF1ZW5jZScsICdBZHZ0RXhlY3V0ZVNlcXVlbmNlJywgJ0luc3RhbGxFeGVjdXRlU2VxdWVuY2UnLCAnSW5zdGFsbFVJU2VxdWVuY2UnXQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3RjbHRrL3RjbHRrLndpeHByb2ogYi9Ub29scy9tc2kvdGNsdGsvdGNsdGsud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjZmYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrLndpeHByb2oKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+e0RCMzUwNjAwLTE4NkMtNEU1Mi1CQTk4LTI2QTdDRUNCMDY3Rn08L1Byb2plY3RHdWlkPgorICAgICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+CisgICAgICAgIDxPdXRwdXROYW1lPnRjbHRrPC9PdXRwdXROYW1lPgorICAgICAgICA8T3V0cHV0VHlwZT5QYWNrYWdlPC9PdXRwdXRUeXBlPgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPCEtLSBTaG9ydGN1dCB2YWxpZGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkgLS0+CisgICAgICAgIDxTdXBwcmVzc0lDRXM+SUNFNDM8L1N1cHByZXNzSUNFcz4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0idGNsdGsud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJ0Y2x0a19maWxlcy53eHMiIC8+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9InRjbHRrX3JlZy53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPFd4bFRlbXBsYXRlIEluY2x1ZGU9Iioud3hsX3RlbXBsYXRlIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxJbnN0YWxsRmlsZXMgSW5jbHVkZT0iJCh0Y2x0a0RpciliaW5cKi5kbGwiIEV4Y2x1ZGU9IiQodGNsdGtEaXIpYmluXCpnLmRsbCI+CisgICAgICAgICAgICA8U291cmNlQmFzZT4kKHRjbHRrRGlyKTwvU291cmNlQmFzZT4KKyAgICAgICAgICAgIDxTb3VyY2U+IShiaW5kcGF0aC50Y2x0ayk8L1NvdXJjZT4KKyAgICAgICAgICAgIDxUYXJnZXRCYXNlPiQodGNsdGtEaXIpYmluPC9UYXJnZXRCYXNlPgorICAgICAgICAgICAgPFRhcmdldF8+RExMc1w8L1RhcmdldF8+CisgICAgICAgICAgICA8R3JvdXA+dGNsdGtfZGxsczwvR3JvdXA+CisgICAgICAgIDwvSW5zdGFsbEZpbGVzPgorCisgICAgICAgIDxJbnN0YWxsRmlsZXMgSW5jbHVkZT0iJCh0Y2x0a0RpcilsaWJcKipcKiI+CisgICAgICAgICAgICA8U291cmNlQmFzZT4kKHRjbHRrRGlyKTwvU291cmNlQmFzZT4KKyAgICAgICAgICAgIDxTb3VyY2U+IShiaW5kcGF0aC50Y2x0ayk8L1NvdXJjZT4KKyAgICAgICAgICAgIDxUYXJnZXRCYXNlPiQodGNsdGtEaXIpbGliPC9UYXJnZXRCYXNlPgorICAgICAgICAgICAgPFRhcmdldF8+dGNsXDwvVGFyZ2V0Xz4KKyAgICAgICAgICAgIDxHcm91cD50Y2x0a19saWI8L0dyb3VwPgorICAgICAgICA8L0luc3RhbGxGaWxlcz4KKworICAgICAgICA8SW5zdGFsbEZpbGVzIEluY2x1ZGU9IiQoUHlTb3VyY2VQYXRoKUxpYlx0a2ludGVyXCoqXCo7JChQeVNvdXJjZVBhdGgpTGliXGlkbGVsaWJcKipcKjskKFB5U291cmNlUGF0aClMaWJcdHVydGxlZGVtb1wqKlwqIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGU9IiQoUHlTb3VyY2VQYXRoKUxpYlwqKlwqLnB5YzskKFB5U291cmNlUGF0aClMaWJcKipcKi5weW8iPgorICAgICAgICAgICAgPFNvdXJjZUJhc2U+JChQeVNvdXJjZVBhdGgpPC9Tb3VyY2VCYXNlPgorICAgICAgICAgICAgPFNvdXJjZT4hKGJpbmRwYXRoLnNyYyk8L1NvdXJjZT4KKyAgICAgICAgICAgIDxUYXJnZXRCYXNlPiQoUHlTb3VyY2VQYXRoKTwvVGFyZ2V0QmFzZT4KKyAgICAgICAgICAgIDxUYXJnZXRfPjwvVGFyZ2V0Xz4KKyAgICAgICAgICAgIDxHcm91cD50a2ludGVyX2xpYjwvR3JvdXA+CisgICAgICAgIDwvSW5zdGFsbEZpbGVzPgorICAgIDwvSXRlbUdyb3VwPgorICAgIAorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3RjbHRrL3RjbHRrLnd4cyBiL1Rvb2xzL21zaS90Y2x0ay90Y2x0ay53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhZThlOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS90Y2x0ay90Y2x0ay53eHMKQEAgLTAsMCArMSw2NiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxQcm9kdWN0IElkPSIqIiBMYW5ndWFnZT0iIShsb2MuTENJRCkiIE5hbWU9IiEobG9jLlRpdGxlKSIgVmVyc2lvbj0iJCh2YXIuVmVyc2lvbikiIE1hbnVmYWN0dXJlcj0iIShsb2MuTWFudWZhY3R1cmVyKSIgVXBncmFkZUNvZGU9IiQodmFyLlVwZ3JhZGVDb2RlKSI+CisgICAgICAgIDxQYWNrYWdlIEluc3RhbGxlclZlcnNpb249IjMwMCIgQ29tcHJlc3NlZD0ieWVzIiBJbnN0YWxsU2NvcGU9InBlclVzZXIiIFBsYXRmb3JtPSIkKHZhci5QbGF0Zm9ybSkiIC8+CisgICAgICAgIDxNZWRpYVRlbXBsYXRlIEVtYmVkQ2FiPSJ5ZXMiIENvbXByZXNzaW9uTGV2ZWw9ImhpZ2giIC8+CisgICAgICAgIAorICAgICAgICA8UHJvcGVydHlSZWYgSWQ9IlVwZ3JhZGVUYWJsZSIgLz4KKyAgICAgICAgPFByb3BlcnR5UmVmIElkPSJSRUdJU1RSWUtFWSIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eSBJZD0iUFlUSE9OX0VYRSIgU2VjdXJlPSJ5ZXMiPgorICAgICAgICAgICAgPENvbXBvbmVudFNlYXJjaCBJZD0iUHl0aG9uRXhlIiBHdWlkPSIkKHZhci5QeXRob25FeGVDb21wb25lbnRHdWlkKSI+CisgICAgICAgICAgICAgICAgPEZpbGVTZWFyY2ggTmFtZT0icHl0aG9uLmV4ZSIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50U2VhcmNoPgorICAgICAgICA8L1Byb3BlcnR5PgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5IElkPSJQWVRIT05XX0VYRSIgU2VjdXJlPSJ5ZXMiPgorICAgICAgICAgICAgPENvbXBvbmVudFNlYXJjaCBJZD0iUHl0aG9ud0V4ZSIgR3VpZD0iJCh2YXIuUHl0aG9ud0V4ZUNvbXBvbmVudEd1aWQpIj4KKyAgICAgICAgICAgICAgICA8RmlsZVNlYXJjaCBOYW1lPSJweXRob253LmV4ZSIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50U2VhcmNoPgorICAgICAgICA8L1Byb3BlcnR5PgorICAgICAgICAKKyAgICAgICAgPENvbmRpdGlvbiBNZXNzYWdlPSIhKGxvYy5Ob1B5dGhvbikiPlBZVEhPTl9FWEUgYW5kIFBZVEhPTldfRVhFPC9Db25kaXRpb24+CisKKyAgICAgICAgPEZlYXR1cmUgSWQ9IkRlZmF1bHRGZWF0dXJlIiBBbGxvd0FkdmVydGlzZT0ibm8iIFRpdGxlPSIhKGxvYy5UaXRsZSkiIERlc2NyaXB0aW9uPSIhKGxvYy5EZXNjcmlwdGlvbikiPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJ0a2ludGVyX2V4dGVuc2lvbiIgLz4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0idGNsdGtfZGxscyIgLz4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0idGNsdGtfbGliIiAvPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJ0a2ludGVyX2xpYiIgUHJpbWFyeT0ieWVzIiAvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJpZGxlX3JlZyIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5Ij4KKyAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBLZXlQYXRoPSJ5ZXMiIFJvb3Q9IkhLTVUiIEtleT0iW1JFR0lTVFJZS0VZXVxJZGxlIiBUeXBlPSJzdHJpbmciIFZhbHVlPSJbI0xpYl9pZGxlbGliX2lkbGUucHl3XSIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudFJlZiBJZD0iT3B0aW9uYWxGZWF0dXJlIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgICAgIDxGZWF0dXJlIElkPSJBc3NvY2lhdGVGaWxlcyIgQWxsb3dBZHZlcnRpc2U9Im5vIiBUaXRsZT0iIShsb2MuVGl0bGUpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb24pIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0idGtpbnRlcl9saWIiIC8+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9ImlkbGVfcmVnIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgICAgIDxGZWF0dXJlIElkPSJTaG9ydGN1dHMiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9InRraW50ZXJfbGliIiAvPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJpZGxlX3Nob3J0Y3V0IiBEaXJlY3Rvcnk9Ik1lbnVEaXIiPgorICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIFJvb3Q9IkhLTVUiIEtleT0iW1JFR0lTVFJZS0VZXVxJZGxlU2hvcnRjdXRzIiBUeXBlPSJpbnRlZ2VyIiBWYWx1ZT0iMSIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgICAgIDxSZW1vdmVGb2xkZXIgSWQ9IlJlbW92ZV9NZW51RGlyIiBPbj0idW5pbnN0YWxsIiAvPgorCisgICAgICAgICAgICAgICAgPFNob3J0Y3V0IElkPSJJRExFIgorICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJlY3Rvcnk9Ik1lbnVEaXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IiEobG9jLlNob3J0Y3V0TmFtZSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uPSIhKGxvYy5TaG9ydGN1dERlc2NyaXB0aW9uKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0PSJbUFlUSE9OV19FWEVdIgorICAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHM9JyJbI0xpYl9pZGxlbGliX2lkbGUucHl3XSInCisgICAgICAgICAgICAgICAgICAgICAgICAgIEljb249ImlkbGUuZXhlIgorICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JraW5nRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5Ij4KKyAgICAgICAgICAgICAgICAgICAgPEljb24gSWQ9ImlkbGUuZXhlIiBTb3VyY2VGaWxlPSIhKGJpbmRwYXRoLnNyYylMaWJcaWRsZWxpYlxJY29uc1xpZGxlLmljbyIgLz4KKyAgICAgICAgICAgICAgICA8L1Nob3J0Y3V0PgorICAgICAgICAgICAgICAgIDxTaG9ydGN1dCBJZD0icHlkb2MucHkiCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldD0iW1BZVEhPTl9FWEVdIgorICAgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHM9Jy1tIHB5ZG9jIC1iJworICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSIhKGxvYy5QeURvY1Nob3J0Y3V0TmFtZSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uPSIhKGxvYy5QeURvY1Nob3J0Y3V0RGVzY3JpcHRpb24pIgorICAgICAgICAgICAgICAgICAgICAgICAgICBJY29uPSJpZGxlLmV4ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya2luZ0RpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdGNsdGsvdGNsdGtfZC53aXhwcm9qIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX2Qud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY2MTkwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX2Qud2l4cHJvagpAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57RURBMUZBNUEtRTJBQS00RUFGLUI0OUItODdEOTgxQ0QwRjE2fTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxTY2hlbWFWZXJzaW9uPjIuMDwvU2NoZW1hVmVyc2lvbj4KKyAgICAgICAgPE91dHB1dE5hbWU+dGNsdGtfZDwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0idGNsdGtfZC53eHMiIC8+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9InRjbHRrX2ZpbGVzLnd4cyIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8V3hsVGVtcGxhdGUgSW5jbHVkZT0iKi53eGxfdGVtcGxhdGUiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEluc3RhbGxGaWxlcyBJbmNsdWRlPSIkKHRjbHRrRGlyKWJpblwqZy5kbGwiPgorICAgICAgICAgICAgPFNvdXJjZUJhc2U+JCh0Y2x0a0Rpcik8L1NvdXJjZUJhc2U+CisgICAgICAgICAgICA8U291cmNlPiEoYmluZHBhdGgudGNsdGspPC9Tb3VyY2U+CisgICAgICAgICAgICA8VGFyZ2V0QmFzZT4kKHRjbHRrRGlyKWJpbjwvVGFyZ2V0QmFzZT4KKyAgICAgICAgICAgIDxUYXJnZXRfPkRMTHNcPC9UYXJnZXRfPgorICAgICAgICAgICAgPEdyb3VwPnRjbHRrX2RsbHNfZDwvR3JvdXA+CisgICAgICAgIDwvSW5zdGFsbEZpbGVzPgorICAgIDwvSXRlbUdyb3VwPgorICAgIAorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnRhcmdldHMiIC8+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX2Qud3hzIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX2Qud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZDBkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvdGNsdGsvdGNsdGtfZC53eHMKQEAgLTAsMCArMSwxNCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxQcm9kdWN0IElkPSIqIiBMYW5ndWFnZT0iIShsb2MuTENJRCkiIE5hbWU9IiEobG9jLlRpdGxlX2QpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgPE1lZGlhVGVtcGxhdGUgRW1iZWRDYWI9InllcyIgQ29tcHJlc3Npb25MZXZlbD0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IkRlYnVnQmluYXJpZXMiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlX2QpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb25fZCkiPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJ0a2ludGVyX2V4dGVuc2lvbl9kIiAvPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJ0Y2x0a19kbGxzX2QiIC8+CisgICAgICAgIDwvRmVhdHVyZT4KKyAgICA8L1Byb2R1Y3Q+Cis8L1dpeD4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS90Y2x0ay90Y2x0a19lbi1VUy53eGxfdGVtcGxhdGUgYi9Ub29scy9tc2kvdGNsdGsvdGNsdGtfZW4tVVMud3hsX3RlbXBsYXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MGZkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvdGNsdGsvdGNsdGtfZW4tVVMud3hsX3RlbXBsYXRlCkBAIC0wLDAgKzEsMTIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IkRlc2NyaXB0b3IiPlRjbC9UayBTdXBwb3J0PC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iU2hvcnREZXNjcmlwdG9yIj50Y2x0azwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9Ik5vUHl0aG9uIj5ObyAhKGxvYy5Qcm9kdWN0TmFtZSkgaW5zdGFsbGF0aW9uIHdhcyBkZXRlY3RlZC48L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJTaG9ydGN1dE5hbWUiPklETEUgKFB5dGhvbiB7e1Nob3J0VmVyc2lvbn19IHt7Qml0bmVzc319KTwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IlNob3J0Y3V0RGVzY3JpcHRpb24iPkxhdW5jaGVzIElETEUsIHRoZSBpbnRlcmFjdGl2ZSBlbnZpcm9ubWVudCBmb3IgIShsb2MuUHJvZHVjdE5hbWUpLjwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IlB5RG9jU2hvcnRjdXROYW1lIj5QeXRob24ge3tTaG9ydFZlcnNpb259fSBNb2R1bGUgRG9jcyAoe3tCaXRuZXNzfX0pPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iUHlEb2NTaG9ydGN1dERlc2NyaXB0aW9uIj5TdGFydCB0aGUgIShsb2MuUHJvZHVjdE5hbWUpIGRvY3VtZW50YXRpb24gc2VydmVyLjwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IkVkaXRNZW51Ij4mYW1wO0VkaXQgd2l0aCBJRExFPC9TdHJpbmc+CisgICAgPFN0cmluZyBJZD0iRWRpdFN1Yk1lbnUiPkVkaXQgd2l0aCBJRExFIHt7U2hvcnRWZXJzaW9ufX0gKHt7Qml0bmVzc319KTwvU3RyaW5nPgorPC9XaXhMb2NhbGl6YXRpb24+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdGNsdGsvdGNsdGtfZmlsZXMud3hzIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX2ZpbGVzLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDFiNGE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX2ZpbGVzLnd4cwpAQCAtMCwwICsxLDM1IEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPEZyYWdtZW50PgorICAgICAgICA8Q29tcG9uZW50R3JvdXAgSWQ9InRraW50ZXJfZXh0ZW5zaW9uIj4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90a2ludGVyLnB5ZCIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBOYW1lPSJfdGtpbnRlci5weWQiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX3RraW50ZXIubGliIiBEaXJlY3Rvcnk9ImxpYnMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9Il90a2ludGVyLmxpYiIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKyAgICAKKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0idGtpbnRlcl9leHRlbnNpb25fc3ltYm9scyI+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJfdGtpbnRlci5wZGIiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0iX3RraW50ZXIucGRiIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKyAgICAKKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0idGtpbnRlcl9leHRlbnNpb25fZCI+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJfdGtpbnRlcl9kLnB5ZCIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBOYW1lPSJfdGtpbnRlcl9kLnB5ZCIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX3RraW50ZXJfZC5saWIiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgTmFtZT0iX3RraW50ZXJfZC5saWIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90a2ludGVyX2QucGRiIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIE5hbWU9Il90a2ludGVyX2QucGRiIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX3BkYi53aXhwcm9qIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX3BkYi53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNzA3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvdGNsdGsvdGNsdGtfcGRiLndpeHByb2oKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+ezAyMDUzQUZBLTE4MzEtNDk5QS1CM0VBLUQ4QjIyM0QzQzQwRH08L1Byb2plY3RHdWlkPgorICAgICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+CisgICAgICAgIDxPdXRwdXROYW1lPnRjbHRrX3BkYjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0idGNsdGtfcGRiLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0idGNsdGtfZmlsZXMud3hzIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxXeGxUZW1wbGF0ZSBJbmNsdWRlPSIqLnd4bF90ZW1wbGF0ZSIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICAKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS90Y2x0ay90Y2x0a19wZGIud3hzIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX3BkYi53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0NTRmMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS90Y2x0ay90Y2x0a19wZGIud3hzCkBAIC0wLDAgKzEsMTMgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8UHJvZHVjdCBJZD0iKiIgTGFuZ3VhZ2U9IiEobG9jLkxDSUQpIiBOYW1lPSIhKGxvYy5UaXRsZVBkYikiIFZlcnNpb249IiQodmFyLlZlcnNpb24pIiBNYW51ZmFjdHVyZXI9IiEobG9jLk1hbnVmYWN0dXJlcikiIFVwZ3JhZGVDb2RlPSIkKHZhci5VcGdyYWRlQ29kZSkiPgorICAgICAgICA8UGFja2FnZSBJbnN0YWxsZXJWZXJzaW9uPSIzMDAiIENvbXByZXNzZWQ9InllcyIgSW5zdGFsbFNjb3BlPSJwZXJVc2VyIiBQbGF0Zm9ybT0iJCh2YXIuUGxhdGZvcm0pIiAvPgorICAgICAgICA8TWVkaWFUZW1wbGF0ZSBFbWJlZENhYj0ieWVzIiBDb21wcmVzc2lvbkxldmVsPSJoaWdoIiAvPgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5UmVmIElkPSJVcGdyYWRlVGFibGUiIC8+CisgICAgICAgIAorICAgICAgICA8RmVhdHVyZSBJZD0iU3ltYm9scyIgQWxsb3dBZHZlcnRpc2U9Im5vIiBUaXRsZT0iIShsb2MuVGl0bGVQZGIpIiBEZXNjcmlwdGlvbj0iIShsb2MuRGVzY3JpcHRpb25QZGIpIj4KKyAgICAgICAgICAgIDxDb21wb25lbnRHcm91cFJlZiBJZD0idGtpbnRlcl9leHRlbnNpb25fc3ltYm9scyIgLz4KKyAgICAgICAgPC9GZWF0dXJlPgorICAgIDwvUHJvZHVjdD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX3JlZy53eHMgYi9Ub29scy9tc2kvdGNsdGsvdGNsdGtfcmVnLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzc4YmNjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3RjbHRrL3RjbHRrX3JlZy53eHMKQEAgLTAsMCArMSw0OCBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJpZGxlX3JlZyI+CisgICAgICAgICAgICA8IS0tIFdlIGZpeCB0aGUgZ3VpZCBvZiB0aGUgU3ViY29tbWFuZHMga2V5IHNvIHRoYXQgaXQgaXMgY29ycmVjdGx5IHJlZmVyZW5jZSBjb3VudGVkIC0tPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iYXNzb2Nfc3ViY29tbWFuZHMiIERpcmVjdG9yeT0iSW5zdGFsbERpcmVjdG9yeSIgR3VpZD0iezU3RDQ3QjRDLTk2RTYtNDBBMC1BOTU4LTU3MDgzRDc0NDIzRn0iPgorICAgICAgICAgICAgICAgIDxDb25kaXRpb24+VmVyc2lvbk5UID4gNjAwPC9Db25kaXRpb24+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgUm9vdD0iSEtDUiIgS2V5PSJQeXRob24uRmlsZVxTaGVsbFxlZGl0d2l0aGlkbGUkKHZhci5QeVRlc3RFeHQpIiBOYW1lPSJNVUlWZXJiIiBWYWx1ZT0iIShsb2MuRWRpdE1lbnUpIiBUeXBlPSJzdHJpbmciIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBSb290PSJIS0NSIiBLZXk9IlB5dGhvbi5GaWxlXFNoZWxsXGVkaXR3aXRoaWRsZSQodmFyLlB5VGVzdEV4dCkiIE5hbWU9IlN1YmNvbW1hbmRzIiBWYWx1ZT0iIiBUeXBlPSJzdHJpbmciIEtleVBhdGg9Im5vIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJhc3NvY19zdWJjb21tYW5kc19ub2NvbiIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5IiBHdWlkPSJ7MDcwNjFEODUtOTE1MS00RkM0LUJCNzgtMTM2MjgwMjBEMDI2fSI+CisgICAgICAgICAgICAgICAgPENvbmRpdGlvbj5WZXJzaW9uTlQgPiA2MDA8L0NvbmRpdGlvbj4KKyAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBSb290PSJIS0NSIiBLZXk9IlB5dGhvbi5Ob0NvbkZpbGVcU2hlbGxcZWRpdHdpdGhpZGxlJCh2YXIuUHlUZXN0RXh0KSIgTmFtZT0iTVVJVmVyYiIgVmFsdWU9IiEobG9jLkVkaXRNZW51KSIgVHlwZT0ic3RyaW5nIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgUm9vdD0iSEtDUiIgS2V5PSJQeXRob24uTm9Db25GaWxlXFNoZWxsXGVkaXR3aXRoaWRsZSQodmFyLlB5VGVzdEV4dCkiIE5hbWU9IlN1YmNvbW1hbmRzIiBWYWx1ZT0iIiBUeXBlPSJzdHJpbmciIEtleVBhdGg9Im5vIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9ImFzc29jX2VkaXR3aXRoaWRsZSIgRGlyZWN0b3J5PSJJbnN0YWxsRGlyZWN0b3J5Ij4KKyAgICAgICAgICAgICAgICA8Q29uZGl0aW9uPlZlcnNpb25OVCA+IDYwMDwvQ29uZGl0aW9uPgorICAgICAgICAgICAgICAgIDxSZWdpc3RyeUtleSBSb290PSJIS0NSIiBLZXk9IlB5dGhvbi5GaWxlXFNoZWxsXGVkaXR3aXRoaWRsZVxzaGVsbFxlZGl0JCh2YXIuTWFqb3JWZXJzaW9uTnVtYmVyKSQodmFyLk1pbm9yVmVyc2lvbk51bWJlcikkKHZhci5QeUFyY2hFeHQpJCh2YXIuUHlUZXN0RXh0KSI+CisgICAgICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIE5hbWU9Ik1VSVZlcmIiIFZhbHVlPSIhKGxvYy5FZGl0U3ViTWVudSkiIFR5cGU9InN0cmluZyIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBLZXk9ImNvbW1hbmQiIFZhbHVlPSciW1BZVEhPTldfRVhFXSIgLW0gaWRsZWxpYiAiJUwiICUqJyBUeXBlPSJzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC9SZWdpc3RyeUtleT4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iYXNzb2NfZWRpdHdpdGhpZGxlX25vY29uIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiPgorICAgICAgICAgICAgICAgIDxDb25kaXRpb24+VmVyc2lvbk5UID4gNjAwPC9Db25kaXRpb24+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5S2V5IFJvb3Q9IkhLQ1IiIEtleT0iUHl0aG9uLk5vQ29uRmlsZVxTaGVsbFxlZGl0d2l0aGlkbGVcc2hlbGxcZWRpdCQodmFyLk1ham9yVmVyc2lvbk51bWJlcikkKHZhci5NaW5vclZlcnNpb25OdW1iZXIpJCh2YXIuUHlBcmNoRXh0KSQodmFyLlB5VGVzdEV4dCkiPgorICAgICAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBOYW1lPSJNVUlWZXJiIiBWYWx1ZT0iIShsb2MuRWRpdFN1Yk1lbnUpIiBUeXBlPSJzdHJpbmciIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgS2V5PSJjb21tYW5kIiBWYWx1ZT0nIltQWVRIT05XX0VYRV0iIC1tIGlkbGVsaWIgIiVMIiAlKicgVHlwZT0ic3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIDwvUmVnaXN0cnlLZXk+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iYXNzb2NfZWRpdHdpdGhpZGxlX3Zpc3RhIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiPgorICAgICAgICAgICAgICAgIDxDb25kaXRpb24+VmVyc2lvbk5UID0gNjAwPC9Db25kaXRpb24+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5S2V5IFJvb3Q9IkhLQ1IiIEtleT0iUHl0aG9uLkZpbGVcU2hlbGxcZWRpdHdpdGhpZGxlJCh2YXIuTWFqb3JWZXJzaW9uTnVtYmVyKSQodmFyLk1pbm9yVmVyc2lvbk51bWJlcikkKHZhci5QeUFyY2hFeHQpJCh2YXIuUHlUZXN0RXh0KSI+CisgICAgICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIFZhbHVlPSIhKGxvYy5FZGl0U3ViTWVudSkiIFR5cGU9InN0cmluZyIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgICAgICAgICA8UmVnaXN0cnlWYWx1ZSBLZXk9ImNvbW1hbmQiIFZhbHVlPSciW1BZVEhPTldfRVhFXSIgLW0gaWRsZWxpYiAiJUwiICUqJyBUeXBlPSJzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC9SZWdpc3RyeUtleT4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iYXNzb2NfZWRpdHdpdGhpZGxlX25vY29uX3Zpc3RhIiBEaXJlY3Rvcnk9Ikluc3RhbGxEaXJlY3RvcnkiPgorICAgICAgICAgICAgICAgIDxDb25kaXRpb24+VmVyc2lvbk5UID0gNjAwPC9Db25kaXRpb24+CisgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5S2V5IFJvb3Q9IkhLQ1IiIEtleT0iUHl0aG9uLk5vQ29uRmlsZVxTaGVsbFxlZGl0d2l0aGlkbGUkKHZhci5NYWpvclZlcnNpb25OdW1iZXIpJCh2YXIuTWlub3JWZXJzaW9uTnVtYmVyKSQodmFyLlB5QXJjaEV4dCkkKHZhci5QeVRlc3RFeHQpIj4KKyAgICAgICAgICAgICAgICAgICAgPFJlZ2lzdHJ5VmFsdWUgVmFsdWU9IiEobG9jLkVkaXRTdWJNZW51KSIgVHlwZT0ic3RyaW5nIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICAgICAgICAgIDxSZWdpc3RyeVZhbHVlIEtleT0iY29tbWFuZCIgVmFsdWU9JyJbUFlUSE9OV19FWEVdIiAtbSBpZGxlbGliICIlTCIgJSonIFR5cGU9InN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICA8L1JlZ2lzdHJ5S2V5PgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3Rlc3QvdGVzdC53aXhwcm9qIGIvVG9vbHMvbXNpL3Rlc3QvdGVzdC53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDdlM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvdGVzdC90ZXN0LndpeHByb2oKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+e0RFMEI3Q0MyLTQzNTgtNDEzMS1CM0Y0LUMzMUM3RjJDRDQ2OH08L1Byb2plY3RHdWlkPgorICAgICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+CisgICAgICAgIDxPdXRwdXROYW1lPnRlc3Q8L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRUeXBlPlBhY2thZ2U8L091dHB1dFR5cGU+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnByb3BzIiAvPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9InRlc3Qud3hzIiAvPgorICAgICAgICA8Q29tcGlsZSBJbmNsdWRlPSJ0ZXN0X2ZpbGVzLnd4cyIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8RW1iZWRkZWRSZXNvdXJjZSBJbmNsdWRlPSIqLnd4bCIgLz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8SW5zdGFsbEZpbGVzIEluY2x1ZGU9IiQoUHlTb3VyY2VQYXRoKUxpYlx0ZXN0XCoqXCoiCisgICAgICAgICAgICAgICAgICAgICAgRXhjbHVkZT0iJChQeVNvdXJjZVBhdGgpTGliXCoqXCoucHljOyQoUHlTb3VyY2VQYXRoKUxpYlwqKlwqLnB5byI+CisgICAgICAgICAgICA8U291cmNlQmFzZT4kKFB5U291cmNlUGF0aCk8L1NvdXJjZUJhc2U+CisgICAgICAgICAgICA8U291cmNlPiEoYmluZHBhdGguc3JjKTwvU291cmNlPgorICAgICAgICAgICAgPFRhcmdldEJhc2U+JChQeVNvdXJjZVBhdGgpPC9UYXJnZXRCYXNlPgorICAgICAgICAgICAgPFRhcmdldF8+PC9UYXJnZXRfPgorICAgICAgICAgICAgPEdyb3VwPnRlc3RfcHk8L0dyb3VwPgorICAgICAgICA8L0luc3RhbGxGaWxlcz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICAKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS90ZXN0L3Rlc3Qud3hzIGIvVG9vbHMvbXNpL3Rlc3QvdGVzdC53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlZDY0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS90ZXN0L3Rlc3Qud3hzCkBAIC0wLDAgKzEsMTYgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8UHJvZHVjdCBJZD0iKiIgTGFuZ3VhZ2U9IiEobG9jLkxDSUQpIiBOYW1lPSIhKGxvYy5UaXRsZSkiIFZlcnNpb249IiQodmFyLlZlcnNpb24pIiBNYW51ZmFjdHVyZXI9IiEobG9jLk1hbnVmYWN0dXJlcikiIFVwZ3JhZGVDb2RlPSIkKHZhci5VcGdyYWRlQ29kZSkiPgorICAgICAgICA8UGFja2FnZSBJbnN0YWxsZXJWZXJzaW9uPSIzMDAiIENvbXByZXNzZWQ9InllcyIgSW5zdGFsbFNjb3BlPSJwZXJVc2VyIiBQbGF0Zm9ybT0iJCh2YXIuUGxhdGZvcm0pIiAvPgorICAgICAgICA8TWVkaWFUZW1wbGF0ZSBFbWJlZENhYj0ieWVzIiBDb21wcmVzc2lvbkxldmVsPSJoaWdoIiAvPgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5UmVmIElkPSJVcGdyYWRlVGFibGUiIC8+CisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iUkVHSVNUUllLRVkiIC8+CisgICAgICAgIAorICAgICAgICA8RmVhdHVyZSBJZD0iRGVmYXVsdEZlYXR1cmUiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9InRlc3RfcHkiIC8+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9InRlc3RfZXh0ZW5zaW9ucyIgLz4KKyAgICAgICAgICAgIDxDb21wb25lbnRSZWYgSWQ9Ik9wdGlvbmFsRmVhdHVyZSIgLz4KKyAgICAgICAgPC9GZWF0dXJlPgorICAgIDwvUHJvZHVjdD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3Rlc3QvdGVzdF9kLndpeHByb2ogYi9Ub29scy9tc2kvdGVzdC90ZXN0X2Qud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2IwNGJlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3Rlc3QvdGVzdF9kLndpeHByb2oKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+ezQxRjVBRThELTI0Q0QtNEQwMy1CRTc1LUFBNkY3RkFCNDA5N308L1Byb2plY3RHdWlkPgorICAgICAgICA8U2NoZW1hVmVyc2lvbj4yLjA8L1NjaGVtYVZlcnNpb24+CisgICAgICAgIDxPdXRwdXROYW1lPnRlc3RfZDwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFR5cGU+UGFja2FnZTwvT3V0cHV0VHlwZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kucHJvcHMiIC8+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0idGVzdF9kLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0idGVzdF9maWxlcy53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEVtYmVkZGVkUmVzb3VyY2UgSW5jbHVkZT0iKi53eGwiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdGVzdC90ZXN0X2Qud3hzIGIvVG9vbHMvbXNpL3Rlc3QvdGVzdF9kLnd4cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTU0ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3Rlc3QvdGVzdF9kLnd4cwpAQCAtMCwwICsxLDEzIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPFByb2R1Y3QgSWQ9IioiIExhbmd1YWdlPSIhKGxvYy5MQ0lEKSIgTmFtZT0iIShsb2MuVGl0bGVfZCkiIFZlcnNpb249IiQodmFyLlZlcnNpb24pIiBNYW51ZmFjdHVyZXI9IiEobG9jLk1hbnVmYWN0dXJlcikiIFVwZ3JhZGVDb2RlPSIkKHZhci5VcGdyYWRlQ29kZSkiPgorICAgICAgICA8UGFja2FnZSBJbnN0YWxsZXJWZXJzaW9uPSIzMDAiIENvbXByZXNzZWQ9InllcyIgSW5zdGFsbFNjb3BlPSJwZXJVc2VyIiBQbGF0Zm9ybT0iJCh2YXIuUGxhdGZvcm0pIiAvPgorICAgICAgICA8TWVkaWFUZW1wbGF0ZSBFbWJlZENhYj0ieWVzIiBDb21wcmVzc2lvbkxldmVsPSJoaWdoIiAvPgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5UmVmIElkPSJVcGdyYWRlVGFibGUiIC8+CisgICAgICAgIAorICAgICAgICA8RmVhdHVyZSBJZD0iRGVidWdCaW5hcmllcyIgQWxsb3dBZHZlcnRpc2U9Im5vIiBUaXRsZT0iIShsb2MuVGl0bGVfZCkiIERlc2NyaXB0aW9uPSIhKGxvYy5EZXNjcmlwdGlvbl9kKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9InRlc3RfZXh0ZW5zaW9uc19kIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdGVzdC90ZXN0X2VuLVVTLnd4bCBiL1Rvb2xzL21zaS90ZXN0L3Rlc3RfZW4tVVMud3hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MTVjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvdGVzdC90ZXN0X2VuLVVTLnd4bApAQCAtMCwwICsxLDcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IkRlc2NyaXB0b3IiPlRlc3QgU3VpdGU8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJTaG9ydERlc2NyaXB0b3IiPnRlc3Q8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJOYXRpdmVNb2R1bGVzVGl0bGUiPiEobG9jLkZ1bGxQcm9kdWN0TmFtZSkgbmF0aXZlIGxpYnRlc3Q8L1N0cmluZz4KKyAgICA8U3RyaW5nIElkPSJOYXRpdmVNb2R1bGVzRGVzY3JpcHRpb24iPiEobG9jLlByb2R1Y3ROYW1lKSBOYXRpdmUgVGVzdCBNb2R1bGVzPC9TdHJpbmc+Cis8L1dpeExvY2FsaXphdGlvbj4KZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS90ZXN0L3Rlc3RfZmlsZXMud3hzIGIvVG9vbHMvbXNpL3Rlc3QvdGVzdF9maWxlcy53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwM2FhMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS90ZXN0L3Rlc3RfZmlsZXMud3hzCkBAIC0wLDAgKzEsNzcgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0idGVzdF9leHRlbnNpb25zIj4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0Y2FwaS5weWQiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9Il90ZXN0Y2FwaS5weWQiIE5hbWU9Il90ZXN0Y2FwaS5weWQiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX2N0eXBlc190ZXN0LnB5ZCIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX2N0eXBlc190ZXN0LnB5ZCIgTmFtZT0iX2N0eXBlc190ZXN0LnB5ZCIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgICAgICA8Q29tcG9uZW50IElkPSJfdGVzdGJ1ZmZlci5weWQiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9Il90ZXN0YnVmZmVyLnB5ZCIgTmFtZT0iX3Rlc3RidWZmZXIucHlkIiBLZXlQYXRoPSJ5ZXMiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0aW1wb3J0bXVsdGlwbGUucHlkIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJfdGVzdGltcG9ydG11bHRpcGxlLnB5ZCIgTmFtZT0iX3Rlc3RpbXBvcnRtdWx0aXBsZS5weWQiIEtleVBhdGg9InllcyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX3Rlc3RtdWx0aXBoYXNlLnB5ZCIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX3Rlc3RtdWx0aXBoYXNlLnB5ZCIgTmFtZT0iX3Rlc3RtdWx0aXBoYXNlLnB5ZCIgS2V5UGF0aD0ieWVzIiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKyAgICAKKyAgICA8RnJhZ21lbnQ+CisgICAgICAgIDxDb21wb25lbnRHcm91cCBJZD0idGVzdF9leHRlbnNpb25zX3N5bWJvbHMiPgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX3Rlc3RjYXBpLnBkYiIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX3Rlc3RjYXBpLnBkYiIgTmFtZT0iX3Rlc3RjYXBpLnBkYiIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX2N0eXBlc190ZXN0LnBkYiIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX2N0eXBlc190ZXN0LnBkYiIgTmFtZT0iX2N0eXBlc190ZXN0LnBkYiIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX3Rlc3RidWZmZXIucGRiIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJfdGVzdGJ1ZmZlci5wZGIiIE5hbWU9Il90ZXN0YnVmZmVyLnBkYiIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX3Rlc3RpbXBvcnRtdWx0aXBsZS5wZGIiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9Il90ZXN0aW1wb3J0bXVsdGlwbGUucGRiIiBOYW1lPSJfdGVzdGltcG9ydG11bHRpcGxlLnBkYiIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iX3Rlc3RtdWx0aXBoYXNlLnBkYiIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX3Rlc3RtdWx0aXBoYXNlLnBkYiIgTmFtZT0iX3Rlc3RtdWx0aXBoYXNlLnBkYiIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICA8L0NvbXBvbmVudEdyb3VwPgorICAgIDwvRnJhZ21lbnQ+CisgICAgCisgICAgPEZyYWdtZW50PgorICAgICAgICA8Q29tcG9uZW50R3JvdXAgSWQ9InRlc3RfZXh0ZW5zaW9uc19kIj4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0Y2FwaV9kLnB5ZCIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX3Rlc3RjYXBpX2QucHlkIiBOYW1lPSJfdGVzdGNhcGlfZC5weWQiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il9jdHlwZXNfdGVzdF9kLnB5ZCIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX2N0eXBlc190ZXN0X2QucHlkIiBOYW1lPSJfY3R5cGVzX3Rlc3RfZC5weWQiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0YnVmZmVyX2QucHlkIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJfdGVzdGJ1ZmZlcl9kLnB5ZCIgTmFtZT0iX3Rlc3RidWZmZXJfZC5weWQiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0aW1wb3J0bXVsdGlwbGVfZC5weWQiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9Il90ZXN0aW1wb3J0bXVsdGlwbGVfZC5weWQiIE5hbWU9Il90ZXN0aW1wb3J0bXVsdGlwbGVfZC5weWQiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0bXVsdGlwaGFzZV9kLnB5ZCIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX3Rlc3RtdWx0aXBoYXNlX2QucHlkIiBOYW1lPSJfdGVzdG11bHRpcGhhc2VfZC5weWQiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0Y2FwaV9kLnBkYiIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX3Rlc3RjYXBpX2QucGRiIiBOYW1lPSJfdGVzdGNhcGlfZC5wZGIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il9jdHlwZXNfdGVzdF9kLnBkYiIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX2N0eXBlc190ZXN0X2QucGRiIiBOYW1lPSJfY3R5cGVzX3Rlc3RfZC5wZGIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0YnVmZmVyX2QucGRiIiBEaXJlY3Rvcnk9IkRMTHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJfdGVzdGJ1ZmZlcl9kLnBkYiIgTmFtZT0iX3Rlc3RidWZmZXJfZC5wZGIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0aW1wb3J0bXVsdGlwbGVfZC5wZGIiIERpcmVjdG9yeT0iRExMcyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9Il90ZXN0aW1wb3J0bXVsdGlwbGVfZC5wZGIiIE5hbWU9Il90ZXN0aW1wb3J0bXVsdGlwbGVfZC5wZGIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9Il90ZXN0bXVsdGlwaGFzZV9kLnBkYiIgRGlyZWN0b3J5PSJETExzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iX3Rlc3RtdWx0aXBoYXNlX2QucGRiIiBOYW1lPSJfdGVzdG11bHRpcGhhc2VfZC5wZGIiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgPC9Db21wb25lbnRHcm91cD4KKyAgICA8L0ZyYWdtZW50PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdGVzdC90ZXN0X3BkYi53aXhwcm9qIGIvVG9vbHMvbXNpL3Rlc3QvdGVzdF9wZGIud2l4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjVmMGVkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3Rlc3QvdGVzdF9wZGIud2l4cHJvagpAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57N0NGNDhBREQtQ0ZBQS00OTlGLTlBMDUtQkExODQ0MEEzMzQ0fTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxTY2hlbWFWZXJzaW9uPjIuMDwvU2NoZW1hVmVyc2lvbj4KKyAgICAgICAgPE91dHB1dE5hbWU+dGVzdF9wZGI8L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRUeXBlPlBhY2thZ2U8L091dHB1dFR5cGU+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnByb3BzIiAvPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9InRlc3RfcGRiLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0idGVzdF9maWxlcy53eHMiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgPEl0ZW1Hcm91cD4KKyAgICAgICAgPEVtYmVkZGVkUmVzb3VyY2UgSW5jbHVkZT0iKi53eGwiIC8+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPEltcG9ydCBQcm9qZWN0PSIuLlxtc2kudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdGVzdC90ZXN0X3BkYi53eHMgYi9Ub29scy9tc2kvdGVzdC90ZXN0X3BkYi53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2MzRhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS90ZXN0L3Rlc3RfcGRiLnd4cwpAQCAtMCwwICsxLDEzIEBACivvu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPFdpeCB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi93aSI+CisgICAgPFByb2R1Y3QgSWQ9IioiIExhbmd1YWdlPSIhKGxvYy5MQ0lEKSIgTmFtZT0iIShsb2MuVGl0bGVQZGIpIiBWZXJzaW9uPSIkKHZhci5WZXJzaW9uKSIgTWFudWZhY3R1cmVyPSIhKGxvYy5NYW51ZmFjdHVyZXIpIiBVcGdyYWRlQ29kZT0iJCh2YXIuVXBncmFkZUNvZGUpIj4KKyAgICAgICAgPFBhY2thZ2UgSW5zdGFsbGVyVmVyc2lvbj0iMzAwIiBDb21wcmVzc2VkPSJ5ZXMiIEluc3RhbGxTY29wZT0icGVyVXNlciIgUGxhdGZvcm09IiQodmFyLlBsYXRmb3JtKSIgLz4KKyAgICAgICAgPE1lZGlhVGVtcGxhdGUgRW1iZWRDYWI9InllcyIgQ29tcHJlc3Npb25MZXZlbD0iaGlnaCIgLz4KKyAgICAgICAgCisgICAgICAgIDxQcm9wZXJ0eVJlZiBJZD0iVXBncmFkZVRhYmxlIiAvPgorICAgICAgICAKKyAgICAgICAgPEZlYXR1cmUgSWQ9IlN5bWJvbHMiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlUGRiKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uUGRiKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9InRlc3RfZXh0ZW5zaW9uc19zeW1ib2xzIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdGVzdHJlbGVhc2UuYmF0IGIvVG9vbHMvbXNpL3Rlc3RyZWxlYXNlLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTg5NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3Rlc3RyZWxlYXNlLmJhdApAQCAtMCwwICsxLDExNyBAQAorQHNldGxvY2FsIGVuYWJsZWV4dGVuc2lvbnMNCitAZWNobyBvZmYNCisNCitzZXQgRD0lfmRwMA0KK3NldCBQQ0JVSUxEPSVEJS4uXC4uXFBDQnVpbGRcDQorDQorc2V0IFRBUkdFVERJUj0lVEVNUCUNCitzZXQgVEVTVFg4Nj0NCitzZXQgVEVTVFg2ND0NCitzZXQgVEVTVEFMTFVTRVI9DQorc2V0IFRFU1RQRVJVU0VSPQ0KKw0KKzpDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLWgiIGdvdG8gSGVscA0KK2lmICIlMSIgRVFVICIteDg2IiAoc2V0IFRFU1RYODY9MSkgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLXg2NCIgKHNldCBURVNUWDY0PTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi10IiAoc2V0IFRBUkdFVERJUj0lfjIpICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi0tdGFyZ2V0IiAoc2V0IFRBUkdFVERJUj0lfjIpICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi1hIiAoc2V0IFRFU1RBTExVU0VSPTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi0tYWxsdXNlciIgKHNldCBURVNUQUxMVVNFUj0xKSAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItcCIgKHNldCBURVNUUEVSVVNFUj0xKSAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItLXBlcnVzZXIiIChzZXQgVEVTVFBFUlVTRVI9MSkgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCisNCitpZiBub3QgZGVmaW5lZCBURVNUWDg2IGlmIG5vdCBkZWZpbmVkIFRFU1RYNjQgKHNldCBURVNUWDg2PTEpICYmIChzZXQgVEVTVFg2ND0xKQ0KK2lmIG5vdCBkZWZpbmVkIFRFU1RBTExVU0VSIGlmIG5vdCBkZWZpbmVkIFRFU1RQRVJVU0VSIChzZXQgVEVTVEFMTFVTRVI9MSkgJiYgKHNldCBURVNUUEVSVVNFUj0xKQ0KKw0KKw0KK2lmIGRlZmluZWQgVEVTVFg4NiAoDQorICAgIGZvciAlJWYgaW4gKCIlUENCVUlMRCV3aW4zMlxlbi11c1wqLmV4ZSIpIGRvICgNCisgICAgICAgIGlmIGRlZmluZWQgVEVTVEFMTFVTRVIgY2FsbCA6dGVzdCAiJSV+ZmYiICIlVEFSR0VURElSJVwlJX5uZi1hbGx1c2VyIiAiSW5zdGFsbEFsbFVzZXJzPTEgQ29tcGlsZUFsbD0xIg0KKyAgICAgICAgaWYgZXJyb3JsZXZlbCAxIGV4aXQgL0INCisgICAgICAgIGlmIGRlZmluZWQgVEVTVFBFUlVTRVIgY2FsbCA6dGVzdCAiJSV+ZmYiICIlVEFSR0VURElSJVwlJX5uZi1wZXJ1c2VyIiAiSW5zdGFsbEFsbFVzZXJzPTAgQ29tcGlsZUFsbD0wIg0KKyAgICAgICAgaWYgZXJyb3JsZXZlbCAxIGV4aXQgL0INCisgICAgKQ0KKykNCisNCitpZiBkZWZpbmVkIFRFU1RYNjQgKA0KKyAgICBmb3IgJSVmIGluICgiJVBDQlVJTEQlYW1kNjRcZW4tdXNcKi5leGUiKSBkbyAoDQorICAgICAgICBpZiBkZWZpbmVkIFRFU1RBTExVU0VSIGNhbGwgOnRlc3QgIiUlfmZmIiAiJVRBUkdFVERJUiVcJSV+bmYtYWxsdXNlciIgIkluc3RhbGxBbGxVc2Vycz0xIENvbXBpbGVBbGw9MSINCisgICAgICAgIGlmIGVycm9ybGV2ZWwgMSBleGl0IC9CDQorICAgICAgICBpZiBkZWZpbmVkIFRFU1RQRVJVU0VSIGNhbGwgOnRlc3QgIiUlfmZmIiAiJVRBUkdFVERJUiVcJSV+bmYtcGVydXNlciIgIkluc3RhbGxBbGxVc2Vycz0wIENvbXBpbGVBbGw9MCINCisgICAgICAgIGlmIGVycm9ybGV2ZWwgMSBleGl0IC9CDQorICAgICkNCispDQorDQorZXhpdCAvQiAwDQorDQorOnRlc3QNCitAc2V0bG9jYWwNCitAZWNobyBvbg0KKw0KK0BpZiBub3QgZXhpc3QgIiV+MSIgZXhpdCAvQiAxDQorDQorQHNldCBFWEU9JX4xDQorQGlmIG5vdCAiJUVYRTplbWJlZD0lIj09IiVFWEUlIiBleGl0IC9CIDANCisNCitAc2V0IEVYSVRDT0RFPTANCitAZWNobyBJbnN0YWxsaW5nICUxIGludG8gJTINCisiJX4xIiAvcGFzc2l2ZSAvbG9nICIlfjJcaW5zdGFsbFxsb2cudHh0IiBUYXJnZXREaXI9IiV+MlxQeXRob24iIEluY2x1ZGVfZGVidWc9MSBJbmNsdWRlX3N5bWJvbHM9MSAlfjMNCisNCitAaWYgbm90IGVycm9ybGV2ZWwgMSAoDQorICAgIEBlY2hvIFByaW50aW5nIHZlcnNpb24NCisgICAgIiV+MlxQeXRob25ccHl0aG9uLmV4ZSIgLWMgImltcG9ydCBzeXM7IHByaW50KHN5cy52ZXJzaW9uKSIgPiAiJX4yXHZlcnNpb24udHh0IiAyPiYxDQorKQ0KKw0KK0BpZiBub3QgZXJyb3JsZXZlbCAxICgNCisgICAgQGVjaG8gQ2FwdHVyaW5nIFN0YXJ0IE1lbnUNCisgICAgQGRpciAvcy9iICIlUFJPR1JBTURBVEElXE1pY3Jvc29mdFxXaW5kb3dzXFN0YXJ0IE1lbnVcUHJvZ3JhbXMiIHwgZmluZHN0ciAvaWM6InB5dGhvbiIgPiAiJX4yXHN0YXJ0bWVudS50eHQiIDI+JjENCisgICAgQGRpciAvcy9iICIlQVBQREFUQSVcTWljcm9zb2Z0XFdpbmRvd3NcU3RhcnQgTWVudVxQcm9ncmFtcyIgfCBmaW5kc3RyIC9pYzoicHl0aG9uIiAgPj4gIiV+MlxzdGFydG1lbnUudHh0IiAyPiYxDQorDQorICAgIEBlY2hvIENhcHR1cmluZyByZWdpc3RyeQ0KKyAgICBAZm9yIC9GICJ1c2ViYWNrcSIgJSVmIGluIChgcmVnIHF1ZXJ5IEhLQ1IgL3MgL2YgcHl0aG9uIC9rYCkgZG8gQCgNCisgICAgICAgIGVjaG8gJSVmID4+ICIlfjJcaGtjci50eHQiDQorICAgICAgICByZWcgcXVlcnkgIiUlZiIgL3MgPj4gIiV+Mlxoa2NyLnR4dCIgMj4mMQ0KKyAgICApDQorICAgIEByZWcgcXVlcnkgSEtDVVxTb2Z0d2FyZVxQeXRob24gL3MgPiAiJX4yXGhrY3UudHh0IiAyPiYxDQorICAgIEByZWcgcXVlcnkgSEtMTVxTb2Z0d2FyZVxQeXRob24gL3JlZzozMiAvcyA+ICIlfjJcaGtsbS50eHQiIDI+JjENCisgICAgQHJlZyBxdWVyeSBIS0xNXFNvZnR3YXJlXFB5dGhvbiAvcmVnOjY0IC9zID4+ICIlfjJcaGtsbS50eHQiIDI+JjENCisgICAgY21kIC9rIGV4aXQgMA0KKykNCisNCitAaWYgbm90IGVycm9ybGV2ZWwgMSAoDQorICAgIEBlY2hvIEluc3RhbGxpbmcgcGFja2FnZQ0KKyAgICAiJX4yXFB5dGhvblxweXRob24uZXhlIiAtbSBwaXAgaW5zdGFsbCAiYXp1cmU8MC4xMCIgPiAiJX4yXHBpcC50eHQiIDI+JjENCisgICAgQGlmIG5vdCBlcnJvcmxldmVsIDEgKA0KKyAgICAgICAgIiV+MlxQeXRob25ccHl0aG9uLmV4ZSIgLW0gcGlwIHVuaW5zdGFsbCAteSBhenVyZSBweXRob24tZGF0ZXV0aWwgc2l4ID4+ICIlfjJccGlwLnR4dCIgMj4mMQ0KKyAgICApDQorKQ0KK0BpZiBub3QgZXJyb3JsZXZlbCAxICgNCisgICAgQGVjaG8gVGVzdGluZyBUY2wvdGsNCisgICAgQHNldCBUQ0xfTElCUkFSWT0lfjJcUHl0aG9uXHRjbFx0Y2w4LjYNCisgICAgIiV+MlxQeXRob25ccHl0aG9uLmV4ZSIgLW0gdGVzdCAtdWFsbCAtdiB0ZXN0X3R0a19ndWlvbmx5IHRlc3RfdGsgdGVzdF9pZGxlID4gIiV+Mlx0Y2x0ay50eHQiIDI+JjENCisgICAgQHNldCBUQ0xfTElCUkFSWT0NCispDQorDQorQHNldCBFWElUQ09ERT0lRVJST1JMRVZFTCUNCisNCitAZWNobyBSZXN1bHQgd2FzICVFWElUQ09ERSUNCitAZWNobyBSZW1vdmluZyAlMQ0KKyIlfjEiIC9wYXNzaXZlIC91bmluc3RhbGwgL2xvZyAiJX4yXHVuaW5zdGFsbFxsb2cudHh0Ig0KKw0KK0BlY2hvIG9mZg0KK2V4aXQgL0IgJUVYSVRDT0RFJQ0KKw0KKzpIZWxwDQorZWNobyB0ZXN0cmVsZWFzZS5iYXQgWy0tdGFyZ2V0IFRBUkdFVF0gWy14ODZdIFsteDY0XSBbLS1hbGx1c2VyXSBbLS1wZXJ1c2VyXSBbLWhdDQorZWNoby4NCitlY2hvICAgIC0tdGFyZ2V0ICgtdCkgICBTcGVjaWZ5IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGZvciBpbnN0YWxscyBhbmQgbG9ncw0KK2VjaG8gICAgLXg4NiAgICAgICAgICAgIFJ1biB0ZXN0cyBmb3IgeDg2IGluc3RhbGxlcnMNCitlY2hvICAgIC14NjQgICAgICAgICAgICBSdW4gdGVzdHMgZm9yIHg2NCBpbnN0YWxsZXJzDQorZWNobyAgICAtLWFsbHVzZXIgKC1hKSAgUnVuIHRlc3RzIGZvciBhbGwtdXNlciBpbnN0YWxscyAocmVxdWlyZXMgQWRtaW5pc3RyYXRvcikNCitlY2hvICAgIC0tcGVydXNlciAoLXApICBSdW4gdGVzdHMgZm9yIHBlci11c2VyIGluc3RhbGxzDQorZWNobyAgICAtaCAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAgaW5mb3JtYXRpb24NCitlY2hvLg0KK2VjaG8gSWYgbm8gdGVzdCBhcmNoaXRlY3R1cmUgaXMgc3BlY2lmaWVkLCBhbGwgYXJjaGl0ZWN0dXJlcyB3aWxsIGJlIHRlc3RlZC4NCitlY2hvIElmIG5vIGluc3RhbGwgdHlwZSBpcyBzZWxlY3RlZCwgYWxsIGluc3RhbGwgdHlwZXMgd2lsbCBiZSB0ZXN0ZWQuDQorZWNoby4NCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdG9vbHMvdG9vbHMud2l4cHJvaiBiL1Rvb2xzL21zaS90b29scy90b29scy53aXhwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0M2NmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvdG9vbHMvdG9vbHMud2l4cHJvagpAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57MjRDQkVCOTUtQkMxRS00RUE5LUFFQTktMzM4MzRCQ0NEMEVDfTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxTY2hlbWFWZXJzaW9uPjIuMDwvU2NoZW1hVmVyc2lvbj4KKyAgICAgICAgPE91dHB1dE5hbWU+dG9vbHM8L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRUeXBlPlBhY2thZ2U8L091dHB1dFR5cGU+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpLnByb3BzIiAvPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxDb21waWxlIEluY2x1ZGU9InRvb2xzLnd4cyIgLz4KKyAgICAgICAgPENvbXBpbGUgSW5jbHVkZT0idG9vbHNfZmlsZXMud3hzIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxFbWJlZGRlZFJlc291cmNlIEluY2x1ZGU9Iioud3hsIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxUb29sRGlyZWN0b3JpZXMgSW5jbHVkZT0ic2NyaXB0cztpMThuO3B5bmNoZTtweW5jaGVcWDtkZW1vIiAvPgorICAgIDwvSXRlbUdyb3VwPgorICAgIDxJdGVtR3JvdXA+CisgICAgICAgIDxJbnN0YWxsRmlsZXMgSW5jbHVkZT0iJChQeVNvdXJjZVBhdGgpVG9vbHNcc2NyaXB0c1wqKlwqLnB5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoUHlTb3VyY2VQYXRoKVRvb2xzXHNjcmlwdHNcKipcKi5weXc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChQeVNvdXJjZVBhdGgpVG9vbHNcc2NyaXB0c1wqKlwqLnR4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFB5U291cmNlUGF0aClUb29sc1xpMThuXCoqXCoucHk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChQeVNvdXJjZVBhdGgpVG9vbHNcaTE4blwqKlwqLnB5dzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFB5U291cmNlUGF0aClUb29sc1xpMThuXCoqXCoudHh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoUHlTb3VyY2VQYXRoKVRvb2xzXHB5bmNoZVwqKlwqLnB5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoUHlTb3VyY2VQYXRoKVRvb2xzXHB5bmNoZVwqKlwqLnB5dzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFB5U291cmNlUGF0aClUb29sc1xweW5jaGVcKipcKi50eHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChQeVNvdXJjZVBhdGgpVG9vbHNcZGVtb1wqKlwqLnB5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoUHlTb3VyY2VQYXRoKVRvb2xzXGRlbW9cKipcKi5weXc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChQeVNvdXJjZVBhdGgpVG9vbHNcZGVtb1wqKlwqLnR4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFB5U291cmNlUGF0aClUb29sc1xwYXJzZXJcKipcKi5weSI+CisgICAgICAgICAgICAgICAgPFNvdXJjZUJhc2U+JChQeVNvdXJjZVBhdGgpPC9Tb3VyY2VCYXNlPgorICAgICAgICAgICAgICAgIDxTb3VyY2U+IShiaW5kcGF0aC5zcmMpPC9Tb3VyY2U+CisgICAgICAgICAgICAgICAgPFRhcmdldEJhc2U+JChQeVNvdXJjZVBhdGgpPC9UYXJnZXRCYXNlPgorICAgICAgICAgICAgICAgIDxUYXJnZXRfPjwvVGFyZ2V0Xz4KKyAgICAgICAgICAgICAgICA8R3JvdXA+dG9vbHNfcHk8L0dyb3VwPgorICAgICAgICA8L0luc3RhbGxGaWxlcz4KKyAgICA8L0l0ZW1Hcm91cD4KKyAgICAKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaS50YXJnZXRzIiAvPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS90b29scy90b29scy53eHMgYi9Ub29scy9tc2kvdG9vbHMvdG9vbHMud3hzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmODQxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9tc2kvdG9vbHMvdG9vbHMud3hzCkBAIC0wLDAgKzEsMTUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8V2l4IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpeC8yMDA2L3dpIj4KKyAgICA8UHJvZHVjdCBJZD0iKiIgTGFuZ3VhZ2U9IiEobG9jLkxDSUQpIiBOYW1lPSIhKGxvYy5UaXRsZSkiIFZlcnNpb249IiQodmFyLlZlcnNpb24pIiBNYW51ZmFjdHVyZXI9IiEobG9jLk1hbnVmYWN0dXJlcikiIFVwZ3JhZGVDb2RlPSIkKHZhci5VcGdyYWRlQ29kZSkiPgorICAgICAgICA8UGFja2FnZSBJbnN0YWxsZXJWZXJzaW9uPSIzMDAiIENvbXByZXNzZWQ9InllcyIgSW5zdGFsbFNjb3BlPSJwZXJVc2VyIiBQbGF0Zm9ybT0iJCh2YXIuUGxhdGZvcm0pIiAvPgorICAgICAgICA8TWVkaWFUZW1wbGF0ZSBFbWJlZENhYj0ieWVzIiBDb21wcmVzc2lvbkxldmVsPSJoaWdoIiAvPgorICAgICAgICAKKyAgICAgICAgPFByb3BlcnR5UmVmIElkPSJVcGdyYWRlVGFibGUiIC8+CisgICAgICAgIAorICAgICAgICA8RmVhdHVyZSBJZD0iRGVmYXVsdEZlYXR1cmUiIEFsbG93QWR2ZXJ0aXNlPSJubyIgVGl0bGU9IiEobG9jLlRpdGxlKSIgRGVzY3JpcHRpb249IiEobG9jLkRlc2NyaXB0aW9uKSI+CisgICAgICAgICAgICA8Q29tcG9uZW50R3JvdXBSZWYgSWQ9InRvb2xzX3B5IiAvPgorICAgICAgICAgICAgPENvbXBvbmVudEdyb3VwUmVmIElkPSJ0b29sc19zY3JpcHRzIiAvPgorICAgICAgICAgICAgPENvbXBvbmVudFJlZiBJZD0iT3B0aW9uYWxGZWF0dXJlIiAvPgorICAgICAgICA8L0ZlYXR1cmU+CisgICAgPC9Qcm9kdWN0PgorPC9XaXg+CmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdG9vbHMvdG9vbHNfZW4tVVMud3hsIGIvVG9vbHMvbXNpL3Rvb2xzL3Rvb2xzX2VuLVVTLnd4bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTM4NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3Rvb2xzL3Rvb2xzX2VuLVVTLnd4bApAQCAtMCwwICsxLDUgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8V2l4TG9jYWxpemF0aW9uIEN1bHR1cmU9ImVuLXVzIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93aXgvMjAwNi9sb2NhbGl6YXRpb24iPgorICAgIDxTdHJpbmcgSWQ9IkRlc2NyaXB0b3IiPlV0aWxpdHkgU2NyaXB0czwvU3RyaW5nPgorICAgIDxTdHJpbmcgSWQ9IlNob3J0RGVzY3JpcHRvciI+dG9vbHM8L1N0cmluZz4KKzwvV2l4TG9jYWxpemF0aW9uPgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3Rvb2xzL3Rvb2xzX2ZpbGVzLnd4cyBiL1Rvb2xzL21zaS90b29scy90b29sc19maWxlcy53eHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlMGRiMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS90b29scy90b29sc19maWxlcy53eHMKQEAgLTAsMCArMSwxNiBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxXaXggeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2l4LzIwMDYvd2kiPgorICAgIDxGcmFnbWVudD4KKyAgICAgICAgPENvbXBvbmVudEdyb3VwIElkPSJ0b29sc19zY3JpcHRzIj4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9IlRvb2xzX3NjcmlwdHNfMnRvMy5weSIgRGlyZWN0b3J5PSJUb29sc19zY3JpcHRzIiBHdWlkPSIqIj4KKyAgICAgICAgICAgICAgICA8RmlsZSBJZD0iVG9vbHNfc2NyaXB0c18ydG8zLnB5IiBOYW1lPSIydG8zLnB5IiBTb3VyY2U9IiEoYmluZHBhdGguc3JjKVRvb2xzXHNjcmlwdHNcMnRvMyIgLz4KKyAgICAgICAgICAgIDwvQ29tcG9uZW50PgorICAgICAgICAgICAgPENvbXBvbmVudCBJZD0iVG9vbHNfc2NyaXB0c19weWRvYzMucHkiIERpcmVjdG9yeT0iVG9vbHNfc2NyaXB0cyIgR3VpZD0iKiI+CisgICAgICAgICAgICAgICAgPEZpbGUgSWQ9IlRvb2xzX3NjcmlwdHNfcHlkb2MzLnB5IiBOYW1lPSJweWRvYzMucHkiIFNvdXJjZT0iIShiaW5kcGF0aC5zcmMpVG9vbHNcc2NyaXB0c1xweWRvYzMiIC8+CisgICAgICAgICAgICA8L0NvbXBvbmVudD4KKyAgICAgICAgICAgIDxDb21wb25lbnQgSWQ9IlRvb2xzX3NjcmlwdHNfcHl2ZW52LnB5IiBEaXJlY3Rvcnk9IlRvb2xzX3NjcmlwdHMiIEd1aWQ9IioiPgorICAgICAgICAgICAgICAgIDxGaWxlIElkPSJUb29sc19zY3JpcHRzX3B5dmVudi5weSIgTmFtZT0icHl2ZW52LnB5IiBTb3VyY2U9IiEoYmluZHBhdGguc3JjKVRvb2xzXHNjcmlwdHNccHl2ZW52IiAvPgorICAgICAgICAgICAgPC9Db21wb25lbnQ+CisgICAgICAgIDwvQ29tcG9uZW50R3JvdXA+CisgICAgPC9GcmFnbWVudD4KKzwvV2l4PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3Vpc2FtcGxlLnB5IGIvVG9vbHMvbXNpL3Vpc2FtcGxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDMwODA1Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21zaS91aXNhbXBsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0MDAgKzAsMCBAQAotCi1pbXBvcnQgbXNpbGliLG9zO2Rpcm5hbWU9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotQWRtaW5FeGVjdXRlU2VxdWVuY2UgPSBbCi0odSdJbnN0YWxsVmFsaWRhdGUnLCBOb25lLCAxNDAwKSwKLSh1J0luc3RhbGxJbml0aWFsaXplJywgTm9uZSwgMTUwMCksCi0odSdJbnN0YWxsRmluYWxpemUnLCBOb25lLCA2NjAwKSwKLSh1J0luc3RhbGxGaWxlcycsIE5vbmUsIDQwMDApLAotKHUnSW5zdGFsbEFkbWluUGFja2FnZScsIE5vbmUsIDM5MDApLAotKHUnRmlsZUNvc3QnLCBOb25lLCA5MDApLAotKHUnQ29zdEluaXRpYWxpemUnLCBOb25lLCA4MDApLAotKHUnQ29zdEZpbmFsaXplJywgTm9uZSwgMTAwMCksCi1dCi0KLUFkbWluVUlTZXF1ZW5jZSA9IFsKLSh1J0FkbWluV2VsY29tZURsZycsIE5vbmUsIDEyMzApLAotKHUnRmlsZUNvc3QnLCBOb25lLCA5MDApLAotKHUnQ29zdEluaXRpYWxpemUnLCBOb25lLCA4MDApLAotKHUnQ29zdEZpbmFsaXplJywgTm9uZSwgMTAwMCksCi0odSdFeGVjdXRlQWN0aW9uJywgTm9uZSwgMTMwMCksCi0odSdFeGl0RGlhbG9nJywgTm9uZSwgLTEpLAotKHUnRmF0YWxFcnJvcicsIE5vbmUsIC0zKSwKLSh1J1ByZXBhcmVEbGcnLCBOb25lLCAxNDApLAotKHUnUHJvZ3Jlc3NEbGcnLCBOb25lLCAxMjgwKSwKLSh1J1VzZXJFeGl0JywgTm9uZSwgLTIpLAotXQotCi1BZHZ0RXhlY3V0ZVNlcXVlbmNlID0gWwotKHUnSW5zdGFsbFZhbGlkYXRlJywgTm9uZSwgMTQwMCksCi0odSdJbnN0YWxsSW5pdGlhbGl6ZScsIE5vbmUsIDE1MDApLAotKHUnSW5zdGFsbEZpbmFsaXplJywgTm9uZSwgNjYwMCksCi0odSdDb3N0SW5pdGlhbGl6ZScsIE5vbmUsIDgwMCksCi0odSdDb3N0RmluYWxpemUnLCBOb25lLCAxMDAwKSwKLSh1J0NyZWF0ZVNob3J0Y3V0cycsIE5vbmUsIDQ1MDApLAotKHUnUHVibGlzaENvbXBvbmVudHMnLCBOb25lLCA2MjAwKSwKLSh1J1B1Ymxpc2hGZWF0dXJlcycsIE5vbmUsIDYzMDApLAotKHUnUHVibGlzaFByb2R1Y3QnLCBOb25lLCA2NDAwKSwKLSh1J1JlZ2lzdGVyQ2xhc3NJbmZvJywgTm9uZSwgNDYwMCksCi0odSdSZWdpc3RlckV4dGVuc2lvbkluZm8nLCBOb25lLCA0NzAwKSwKLSh1J1JlZ2lzdGVyTUlNRUluZm8nLCBOb25lLCA0OTAwKSwKLSh1J1JlZ2lzdGVyUHJvZ0lkSW5mbycsIE5vbmUsIDQ4MDApLAotXQotCi1CQkNvbnRyb2wgPSBbCi1dCi0KLUJpbGxib2FyZCA9IFsKLV0KLQotQmluYXJ5ID0gWwotKHUnYmFubnJibXAnLCBtc2lsaWIuQmluYXJ5KG9zLnBhdGguam9pbihkaXJuYW1lLCJiYW5ucmJtcC5iaW4iKSkpLAotKHUnY29tcGxldGknLCBtc2lsaWIuQmluYXJ5KG9zLnBhdGguam9pbihkaXJuYW1lLCJjb21wbGV0aS5iaW4iKSkpLAotKHUnY3VzdGljb24nLCBtc2lsaWIuQmluYXJ5KG9zLnBhdGguam9pbihkaXJuYW1lLCJjdXN0aWNvbi5iaW4iKSkpLAotKHUnZGxnYm1wJywgbXNpbGliLkJpbmFyeShvcy5wYXRoLmpvaW4oZGlybmFtZSwiZGxnYm1wLmJpbiIpKSksCi0odSdleGNsYW1pYycsIG1zaWxpYi5CaW5hcnkob3MucGF0aC5qb2luKGRpcm5hbWUsImV4Y2xhbWljLmJpbiIpKSksCi0odSdpbmZvJywgbXNpbGliLkJpbmFyeShvcy5wYXRoLmpvaW4oZGlybmFtZSwiaW5mby5iaW4iKSkpLAotKHUnaW5zdGljb24nLCBtc2lsaWIuQmluYXJ5KG9zLnBhdGguam9pbihkaXJuYW1lLCJpbnN0aWNvbi5iaW4iKSkpLAotKHUnTmV3JywgbXNpbGliLkJpbmFyeShvcy5wYXRoLmpvaW4oZGlybmFtZSwiTmV3LmJpbiIpKSksCi0odSdyZW1vdmljbycsIG1zaWxpYi5CaW5hcnkob3MucGF0aC5qb2luKGRpcm5hbWUsInJlbW92aWNvLmJpbiIpKSksCi0odSdyZXBhaXJpYycsIG1zaWxpYi5CaW5hcnkob3MucGF0aC5qb2luKGRpcm5hbWUsInJlcGFpcmljLmJpbiIpKSksCi0odSdVcCcsIG1zaWxpYi5CaW5hcnkob3MucGF0aC5qb2luKGRpcm5hbWUsIlVwLmJpbiIpKSksCi1dCi0KLUNoZWNrQm94ID0gWwotXQotCi1Qcm9wZXJ0eSA9IFsKLSh1J0Jhbm5lckJpdG1hcCcsIHUnYmFubnJibXAnKSwKLSh1J0lBZ3JlZScsIHUnTm8nKSwKLSh1J1Byb2R1Y3RJRCcsIHUnbm9uZScpLAotKHUnQVJQSEVMUExJTksnLCB1J2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9tYW5hZ2VtZW50JyksCi0odSdCdXR0b25UZXh0X0JhY2snLCB1JzwgJkJhY2snKSwKLSh1J0J1dHRvblRleHRfQnJvd3NlJywgdSdCciZvd3NlJyksCi0odSdCdXR0b25UZXh0X0NhbmNlbCcsIHUnQ2FuY2VsJyksCi0odSdCdXR0b25UZXh0X0V4aXQnLCB1JyZFeGl0JyksCi0odSdCdXR0b25UZXh0X0ZpbmlzaCcsIHUnJkZpbmlzaCcpLAotKHUnQnV0dG9uVGV4dF9JZ25vcmUnLCB1JyZJZ25vcmUnKSwKLSh1J0J1dHRvblRleHRfSW5zdGFsbCcsIHUnJkluc3RhbGwnKSwKLSh1J0J1dHRvblRleHRfTmV4dCcsIHUnJk5leHQgPicpLAotKHUnQnV0dG9uVGV4dF9ObycsIHUnJk5vJyksCi0odSdCdXR0b25UZXh0X09LJywgdSdPSycpLAotKHUnQnV0dG9uVGV4dF9SZW1vdmUnLCB1JyZSZW1vdmUnKSwKLSh1J0J1dHRvblRleHRfUmVwYWlyJywgdScmUmVwYWlyJyksCi0odSdCdXR0b25UZXh0X1Jlc2V0JywgdScmUmVzZXQnKSwKLSh1J0J1dHRvblRleHRfUmVzdW1lJywgdScmUmVzdW1lJyksCi0odSdCdXR0b25UZXh0X1JldHJ5JywgdScmUmV0cnknKSwKLSh1J0J1dHRvblRleHRfUmV0dXJuJywgdScmUmV0dXJuJyksCi0odSdCdXR0b25UZXh0X1llcycsIHUnJlllcycpLAotKHUnQ29tcGxldGVTZXR1cEljb24nLCB1J2NvbXBsZXRpJyksCi0odSdDb21wb25lbnREb3dubG9hZCcsIHUnZnRwOi8vYW5vbnltb3VzQG1pY3Jvc29mdC5jb20vY29tcG9uZW50cy8nKSwKLSh1J0N1c3RvbVNldHVwSWNvbicsIHUnY3VzdGljb24nKSwKLSh1J0RlZmF1bHRVSUZvbnQnLCB1J0RsZ0ZvbnQ4JyksCi0odSdEaWFsb2dCaXRtYXAnLCB1J2RsZ2JtcCcpLAotKHUnRGxnVGl0bGVGb250JywgdSd7JkRsZ0ZvbnRCb2xkOH0nKSwKLSh1J0Vycm9yRGlhbG9nJywgdSdFcnJvckRsZycpLAotKHUnRXhjbGFtYXRpb25JY29uJywgdSdleGNsYW1pYycpLAotKHUnSW5mb0ljb24nLCB1J2luZm8nKSwKLSh1J0luc3RhbGxlckljb24nLCB1J2luc3RpY29uJyksCi0odSdJTlNUQUxMTEVWRUwnLCB1JzMnKSwKLSh1J0luc3RhbGxNb2RlJywgdSdUeXBpY2FsJyksCi0odSdQSURUZW1wbGF0ZScsIHUnMTIzNDU8IyMjLSUlJSUlJSU+QEBAQEAnKSwKLSModSdQcm9kdWN0TGFuZ3VhZ2UnLCB1JzEwMzMnKSwKLSh1J1Byb2dyZXNzMScsIHUnSW5zdGFsbGluZycpLAotKHUnUHJvZ3Jlc3MyJywgdSdpbnN0YWxscycpLAotKHUnUFJPTVBUUk9MTEJBQ0tDT1NUJywgdSdQJyksCi0odSdSZW1vdmVJY29uJywgdSdyZW1vdmljbycpLAotKHUnUmVwYWlySWNvbicsIHUncmVwYWlyaWMnKSwKLSh1J1NldHVwJywgdSdTZXR1cCcpLAotKHUnU2hvd1VzZXJSZWdpc3RyYXRpb25EbGcnLCB1JzEnKSwKLSh1J1dpemFyZCcsIHUnU2V0dXAgV2l6YXJkJyksCi1dCi0KLUNvbWJvQm94ID0gWwotXQotCi1Db250cm9sID0gWwotKHUnQWRtaW5XZWxjb21lRGxnJywgdSdCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3MCwgMjM0LCAxLCBOb25lLCB1J1tEaWFsb2dCaXRtYXBdJywgdSdCYWNrJywgTm9uZSksCi0odSdBZG1pbldlbGNvbWVEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdBZG1pbldlbGNvbWVEbGcnLCB1J0NhbmNlbCcsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfQ2FuY2VsXScsIHUnQml0bWFwJywgTm9uZSksCi0odSdBZG1pbldlbGNvbWVEbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMTM1LCA3MCwgMjIwLCAzMCwgMTk2NjExLCBOb25lLCB1J1RoZSBbV2l6YXJkXSB3aWxsIGNyZWF0ZSBhIHNlcnZlciBpbWFnZSBvZiBbUHJvZHVjdE5hbWVdLCBhdCBhIHNwZWNpZmllZCBuZXR3b3JrIGxvY2F0aW9uLiAgQ2xpY2sgTmV4dCB0byBjb250aW51ZSBvciBDYW5jZWwgdG8gZXhpdCB0aGUgW1dpemFyZF0uJywgTm9uZSwgTm9uZSksCi0odSdBZG1pbldlbGNvbWVEbGcnLCB1J1RpdGxlJywgdSdUZXh0JywgMTM1LCAyMCwgMjIwLCA2MCwgMTk2NjExLCBOb25lLCB1J3tcXFZlcmRhbmFCb2xkMTN9V2VsY29tZSB0byB0aGUgW1Byb2R1Y3ROYW1lXSBbV2l6YXJkXScsIE5vbmUsIE5vbmUpLAotKHUnQWRtaW5XZWxjb21lRGxnJywgdSdCYWNrJywgdSdQdXNoQnV0dG9uJywgMTgwLCAyNDMsIDU2LCAxNywgMSwgTm9uZSwgdSdbQnV0dG9uVGV4dF9CYWNrXScsIHUnTmV4dCcsIE5vbmUpLAotKHUnQWRtaW5XZWxjb21lRGxnJywgdSdOZXh0JywgdSdQdXNoQnV0dG9uJywgMjM2LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9OZXh0XScsIHUnQ2FuY2VsJywgTm9uZSksCi0odSdFeGl0RGlhbG9nJywgdSdCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3MCwgMjM0LCAxLCBOb25lLCB1J1tEaWFsb2dCaXRtYXBdJywgdSdCYWNrJywgTm9uZSksCi0odSdFeGl0RGlhbG9nJywgdSdCb3R0b21MaW5lJywgdSdMaW5lJywgMCwgMjM0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnRXhpdERpYWxvZycsIHUnQ2FuY2VsJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMSwgTm9uZSwgdSdbQnV0dG9uVGV4dF9DYW5jZWxdJywgdSdCaXRtYXAnLCBOb25lKSwKLSh1J0V4aXREaWFsb2cnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMTM1LCA3MCwgMjIwLCAyMCwgMTk2NjExLCBOb25lLCB1J0NsaWNrIHRoZSBGaW5pc2ggYnV0dG9uIHRvIGV4aXQgdGhlIFtXaXphcmRdLicsIE5vbmUsIE5vbmUpLAotKHUnRXhpdERpYWxvZycsIHUnVGl0bGUnLCB1J1RleHQnLCAxMzUsIDIwLCAyMjAsIDYwLCAxOTY2MTEsIE5vbmUsIHUne1xcVmVyZGFuYUJvbGQxM31Db21wbGV0aW5nIHRoZSBbUHJvZHVjdE5hbWVdIFtXaXphcmRdJywgTm9uZSwgTm9uZSksCi0odSdFeGl0RGlhbG9nJywgdSdCYWNrJywgdSdQdXNoQnV0dG9uJywgMTgwLCAyNDMsIDU2LCAxNywgMSwgTm9uZSwgdSdbQnV0dG9uVGV4dF9CYWNrXScsIHUnRmluaXNoJywgTm9uZSksCi0odSdFeGl0RGlhbG9nJywgdSdGaW5pc2gnLCB1J1B1c2hCdXR0b24nLCAyMzYsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0ZpbmlzaF0nLCB1J0NhbmNlbCcsIE5vbmUpLAotKHUnRmF0YWxFcnJvcicsIHUnQml0bWFwJywgdSdCaXRtYXAnLCAwLCAwLCAzNzAsIDIzNCwgMSwgTm9uZSwgdSdbRGlhbG9nQml0bWFwXScsIHUnQmFjaycsIE5vbmUpLAotKHUnRmF0YWxFcnJvcicsIHUnQm90dG9tTGluZScsIHUnTGluZScsIDAsIDIzNCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0ZhdGFsRXJyb3InLCB1J0NhbmNlbCcsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDEsIE5vbmUsIHUnW0J1dHRvblRleHRfQ2FuY2VsXScsIHUnQml0bWFwJywgTm9uZSksCi0odSdGYXRhbEVycm9yJywgdSdUaXRsZScsIHUnVGV4dCcsIDEzNSwgMjAsIDIyMCwgNjAsIDE5NjYxMSwgTm9uZSwgdSd7XFxWZXJkYW5hQm9sZDEzfVtQcm9kdWN0TmFtZV0gW1dpemFyZF0gZW5kZWQgcHJlbWF0dXJlbHknLCBOb25lLCBOb25lKSwKLSh1J0ZhdGFsRXJyb3InLCB1J0JhY2snLCB1J1B1c2hCdXR0b24nLCAxODAsIDI0MywgNTYsIDE3LCAxLCBOb25lLCB1J1tCdXR0b25UZXh0X0JhY2tdJywgdSdGaW5pc2gnLCBOb25lKSwKLSh1J0ZhdGFsRXJyb3InLCB1J0ZpbmlzaCcsIHUnUHVzaEJ1dHRvbicsIDIzNiwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfRmluaXNoXScsIHUnQ2FuY2VsJywgTm9uZSksCi0odSdGYXRhbEVycm9yJywgdSdEZXNjcmlwdGlvbjEnLCB1J1RleHQnLCAxMzUsIDcwLCAyMjAsIDQwLCAxOTY2MTEsIE5vbmUsIHUnW1Byb2R1Y3ROYW1lXSBzZXR1cCBlbmRlZCBwcmVtYXR1cmVseSBiZWNhdXNlIG9mIGFuIGVycm9yLiAgWW91ciBzeXN0ZW0gaGFzIG5vdCBiZWVuIG1vZGlmaWVkLiAgVG8gaW5zdGFsbCB0aGlzIHByb2dyYW0gYXQgYSBsYXRlciB0aW1lLCBwbGVhc2UgcnVuIHRoZSBpbnN0YWxsYXRpb24gYWdhaW4uJywgTm9uZSwgTm9uZSksCi0odSdGYXRhbEVycm9yJywgdSdEZXNjcmlwdGlvbjInLCB1J1RleHQnLCAxMzUsIDExNSwgMjIwLCAyMCwgMTk2NjExLCBOb25lLCB1J0NsaWNrIHRoZSBGaW5pc2ggYnV0dG9uIHRvIGV4aXQgdGhlIFtXaXphcmRdLicsIE5vbmUsIE5vbmUpLAotKHUnUHJlcGFyZURsZycsIHUnQml0bWFwJywgdSdCaXRtYXAnLCAwLCAwLCAzNzAsIDIzNCwgMSwgTm9uZSwgdSdbRGlhbG9nQml0bWFwXScsIHUnQ2FuY2VsJywgTm9uZSksCi0odSdQcmVwYXJlRGxnJywgdSdCb3R0b21MaW5lJywgdSdMaW5lJywgMCwgMjM0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnUHJlcGFyZURsZycsIHUnQ2FuY2VsJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9DYW5jZWxdJywgdSdCaXRtYXAnLCBOb25lKSwKLSh1J1ByZXBhcmVEbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMTM1LCA3MCwgMjIwLCAyMCwgMTk2NjExLCBOb25lLCB1J1BsZWFzZSB3YWl0IHdoaWxlIHRoZSBbV2l6YXJkXSBwcmVwYXJlcyB0byBndWlkZSB5b3UgdGhyb3VnaCB0aGUgaW5zdGFsbGF0aW9uLicsIE5vbmUsIE5vbmUpLAotKHUnUHJlcGFyZURsZycsIHUnVGl0bGUnLCB1J1RleHQnLCAxMzUsIDIwLCAyMjAsIDYwLCAxOTY2MTEsIE5vbmUsIHUne1xcVmVyZGFuYUJvbGQxM31XZWxjb21lIHRvIHRoZSBbUHJvZHVjdE5hbWVdIFtXaXphcmRdJywgTm9uZSwgTm9uZSksCi0odSdQcmVwYXJlRGxnJywgdSdCYWNrJywgdSdQdXNoQnV0dG9uJywgMTgwLCAyNDMsIDU2LCAxNywgMSwgTm9uZSwgdSdbQnV0dG9uVGV4dF9CYWNrXScsIE5vbmUsIE5vbmUpLAotKHUnUHJlcGFyZURsZycsIHUnTmV4dCcsIHUnUHVzaEJ1dHRvbicsIDIzNiwgMjQzLCA1NiwgMTcsIDEsIE5vbmUsIHUnW0J1dHRvblRleHRfTmV4dF0nLCBOb25lLCBOb25lKSwKLSh1J1ByZXBhcmVEbGcnLCB1J0FjdGlvbkRhdGEnLCB1J1RleHQnLCAxMzUsIDEyNSwgMjIwLCAzMCwgMTk2NjExLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J1ByZXBhcmVEbGcnLCB1J0FjdGlvblRleHQnLCB1J1RleHQnLCAxMzUsIDEwMCwgMjIwLCAyMCwgMTk2NjExLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J1Byb2dyZXNzRGxnJywgdSdUZXh0JywgdSdUZXh0JywgMzUsIDY1LCAzMDAsIDIwLCAzLCBOb25lLCB1J1BsZWFzZSB3YWl0IHdoaWxlIHRoZSBbV2l6YXJkXSBbUHJvZ3Jlc3MyXSBbUHJvZHVjdE5hbWVdLiAgVGhpcyBtYXkgdGFrZSBzZXZlcmFsIG1pbnV0ZXMuJywgTm9uZSwgTm9uZSksCi0odSdQcm9ncmVzc0RsZycsIHUnQmFubmVyQml0bWFwJywgdSdCaXRtYXAnLCAwLCAwLCAzNzQsIDQ0LCAxLCBOb25lLCB1J1tCYW5uZXJCaXRtYXBdJywgdSdCYWNrJywgTm9uZSksCi0odSdQcm9ncmVzc0RsZycsIHUnQmFubmVyTGluZScsIHUnTGluZScsIDAsIDQ0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnUHJvZ3Jlc3NEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdQcm9ncmVzc0RsZycsIHUnQ2FuY2VsJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9DYW5jZWxdJywgdSdCYW5uZXJCaXRtYXAnLCBOb25lKSwKLSh1J1Byb2dyZXNzRGxnJywgdSdUaXRsZScsIHUnVGV4dCcsIDIwLCAxNSwgMjAwLCAxNSwgMTk2NjExLCBOb25lLCB1J1tEbGdUaXRsZUZvbnRdW1Byb2dyZXNzMV0gW1Byb2R1Y3ROYW1lXScsIE5vbmUsIE5vbmUpLAotKHUnUHJvZ3Jlc3NEbGcnLCB1J0JhY2snLCB1J1B1c2hCdXR0b24nLCAxODAsIDI0MywgNTYsIDE3LCAxLCBOb25lLCB1J1tCdXR0b25UZXh0X0JhY2tdJywgdSdOZXh0JywgTm9uZSksCi0odSdQcm9ncmVzc0RsZycsIHUnTmV4dCcsIHUnUHVzaEJ1dHRvbicsIDIzNiwgMjQzLCA1NiwgMTcsIDEsIE5vbmUsIHUnW0J1dHRvblRleHRfTmV4dF0nLCB1J0NhbmNlbCcsIE5vbmUpLAotKHUnUHJvZ3Jlc3NEbGcnLCB1J0FjdGlvblRleHQnLCB1J1RleHQnLCA3MCwgMTAwLCAyNjUsIDEwLCAzLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J1Byb2dyZXNzRGxnJywgdSdQcm9ncmVzc0JhcicsIHUnUHJvZ3Jlc3NCYXInLCAzNSwgMTE1LCAzMDAsIDEwLCA2NTUzNywgTm9uZSwgdSdQcm9ncmVzcyBkb25lJywgTm9uZSwgTm9uZSksCi0odSdQcm9ncmVzc0RsZycsIHUnU3RhdHVzTGFiZWwnLCB1J1RleHQnLCAzNSwgMTAwLCAzNSwgMTAsIDMsIE5vbmUsIHUnU3RhdHVzOicsIE5vbmUsIE5vbmUpLAotKHUnVXNlckV4aXQnLCB1J0JpdG1hcCcsIHUnQml0bWFwJywgMCwgMCwgMzcwLCAyMzQsIDEsIE5vbmUsIHUnW0RpYWxvZ0JpdG1hcF0nLCB1J0JhY2snLCBOb25lKSwKLSh1J1VzZXJFeGl0JywgdSdCb3R0b21MaW5lJywgdSdMaW5lJywgMCwgMjM0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnVXNlckV4aXQnLCB1J0NhbmNlbCcsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDEsIE5vbmUsIHUnW0J1dHRvblRleHRfQ2FuY2VsXScsIHUnQml0bWFwJywgTm9uZSksCi0odSdVc2VyRXhpdCcsIHUnVGl0bGUnLCB1J1RleHQnLCAxMzUsIDIwLCAyMjAsIDYwLCAxOTY2MTEsIE5vbmUsIHUne1xcVmVyZGFuYUJvbGQxM31bUHJvZHVjdE5hbWVdIFtXaXphcmRdIHdhcyBpbnRlcnJ1cHRlZCcsIE5vbmUsIE5vbmUpLAotKHUnVXNlckV4aXQnLCB1J0JhY2snLCB1J1B1c2hCdXR0b24nLCAxODAsIDI0MywgNTYsIDE3LCAxLCBOb25lLCB1J1tCdXR0b25UZXh0X0JhY2tdJywgdSdGaW5pc2gnLCBOb25lKSwKLSh1J1VzZXJFeGl0JywgdSdGaW5pc2gnLCB1J1B1c2hCdXR0b24nLCAyMzYsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0ZpbmlzaF0nLCB1J0NhbmNlbCcsIE5vbmUpLAotKHUnVXNlckV4aXQnLCB1J0Rlc2NyaXB0aW9uMScsIHUnVGV4dCcsIDEzNSwgNzAsIDIyMCwgNDAsIDE5NjYxMSwgTm9uZSwgdSdbUHJvZHVjdE5hbWVdIHNldHVwIHdhcyBpbnRlcnJ1cHRlZC4gIFlvdXIgc3lzdGVtIGhhcyBub3QgYmVlbiBtb2RpZmllZC4gIFRvIGluc3RhbGwgdGhpcyBwcm9ncmFtIGF0IGEgbGF0ZXIgdGltZSwgcGxlYXNlIHJ1biB0aGUgaW5zdGFsbGF0aW9uIGFnYWluLicsIE5vbmUsIE5vbmUpLAotKHUnVXNlckV4aXQnLCB1J0Rlc2NyaXB0aW9uMicsIHUnVGV4dCcsIDEzNSwgMTE1LCAyMjAsIDIwLCAxOTY2MTEsIE5vbmUsIHUnQ2xpY2sgdGhlIEZpbmlzaCBidXR0b24gdG8gZXhpdCB0aGUgW1dpemFyZF0uJywgTm9uZSwgTm9uZSksCi0odSdBZG1pbkJyb3dzZURsZycsIHUnVXAnLCB1J1B1c2hCdXR0b24nLCAyOTgsIDU1LCAxOSwgMTksIDM2NzAwMTksIE5vbmUsIHUnVXAnLCB1J05ld0ZvbGRlcicsIHUnVXAgT25lIExldmVsfCcpLAotKHUnQWRtaW5Ccm93c2VEbGcnLCB1J0Jhbm5lckJpdG1hcCcsIHUnQml0bWFwJywgMCwgMCwgMzc0LCA0NCwgMSwgTm9uZSwgdSdbQmFubmVyQml0bWFwXScsIHUnUGF0aEVkaXQnLCBOb25lKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdQYXRoRWRpdCcsIHUnUGF0aEVkaXQnLCA4NCwgMjAyLCAyNjEsIDE3LCAzLCB1J1RBUkdFVERJUicsIE5vbmUsIHUnT0snLCBOb25lKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdCYW5uZXJMaW5lJywgdSdMaW5lJywgMCwgNDQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdBZG1pbkJyb3dzZURsZycsIHUnQm90dG9tTGluZScsIHUnTGluZScsIDAsIDIzNCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdDYW5jZWwnLCB1J1B1c2hCdXR0b24nLCAyNDAsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0NhbmNlbF0nLCB1J0NvbWJvTGFiZWwnLCBOb25lKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdDb21ib0xhYmVsJywgdSdUZXh0JywgMjUsIDU4LCA0NCwgMTAsIDMsIE5vbmUsIHUnJkxvb2sgaW46JywgdSdEaXJlY3RvcnlDb21ibycsIE5vbmUpLAotKHUnQWRtaW5Ccm93c2VEbGcnLCB1J0RpcmVjdG9yeUNvbWJvJywgdSdEaXJlY3RvcnlDb21ibycsIDcwLCA1NSwgMjIwLCA4MCwgNDU4NzU1LCB1J1RBUkdFVERJUicsIE5vbmUsIHUnVXAnLCBOb25lKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdEZXNjcmlwdGlvbicsIHUnVGV4dCcsIDI1LCAyMywgMjgwLCAxNSwgMTk2NjExLCBOb25lLCB1J0Jyb3dzZSB0byB0aGUgZGVzdGluYXRpb24gZm9sZGVyJywgTm9uZSwgTm9uZSksCi0odSdBZG1pbkJyb3dzZURsZycsIHUnRGlyZWN0b3J5TGlzdCcsIHUnRGlyZWN0b3J5TGlzdCcsIDI1LCA4MywgMzIwLCAxMTAsIDcsIHUnVEFSR0VURElSJywgTm9uZSwgdSdQYXRoTGFiZWwnLCBOb25lKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdQYXRoTGFiZWwnLCB1J1RleHQnLCAyNSwgMjA1LCA1OSwgMTAsIDMsIE5vbmUsIHUnJkZvbGRlciBuYW1lOicsIHUnQmFubmVyQml0bWFwJywgTm9uZSksCi0odSdBZG1pbkJyb3dzZURsZycsIHUnTmV3Rm9sZGVyJywgdSdQdXNoQnV0dG9uJywgMzI1LCA1NSwgMTksIDE5LCAzNjcwMDE5LCBOb25lLCB1J05ldycsIHUnRGlyZWN0b3J5TGlzdCcsIHUnQ3JlYXRlIEEgTmV3IEZvbGRlcnwnKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdPSycsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfT0tdJywgdSdDYW5jZWwnLCBOb25lKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdUaXRsZScsIHUnVGV4dCcsIDE1LCA2LCAyMDAsIDE1LCAxOTY2MTEsIE5vbmUsIHUnW0RsZ1RpdGxlRm9udF1DaGFuZ2UgY3VycmVudCBkZXN0aW5hdGlvbiBmb2xkZXInLCBOb25lLCBOb25lKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdUZXh0JywgdSdUZXh0JywgMjUsIDgwLCAzMjAsIDEwLCAzLCBOb25lLCB1JyZFbnRlciBhIG5ldyBuZXR3b3JrIGxvY2F0aW9uIG9yIGNsaWNrIEJyb3dzZSB0byBicm93c2UgdG8gb25lLicsIHUnUGF0aEVkaXQnLCBOb25lKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdCYW5uZXJCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3NCwgNDQsIDEsIE5vbmUsIHUnW0Jhbm5lckJpdG1hcF0nLCB1J1RleHQnLCBOb25lKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdQYXRoRWRpdCcsIHUnUGF0aEVkaXQnLCAyNSwgOTMsIDMyMCwgMTgsIDMsIHUnVEFSR0VURElSJywgTm9uZSwgdSdCcm93c2UnLCBOb25lKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdCYW5uZXJMaW5lJywgdSdMaW5lJywgMCwgNDQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdBZG1pbkluc3RhbGxQb2ludERsZycsIHUnQm90dG9tTGluZScsIHUnTGluZScsIDAsIDIzNCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdDYW5jZWwnLCB1J1B1c2hCdXR0b24nLCAzMDQsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0NhbmNlbF0nLCB1J0Jhbm5lckJpdG1hcCcsIE5vbmUpLAotKHUnQWRtaW5JbnN0YWxsUG9pbnREbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMjUsIDIwLCAyODAsIDIwLCAxOTY2MTEsIE5vbmUsIHUnUGxlYXNlIHNwZWNpZnkgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciB0aGUgc2VydmVyIGltYWdlIG9mIFtQcm9kdWN0TmFtZV0gcHJvZHVjdCcsIE5vbmUsIE5vbmUpLAotKHUnQWRtaW5JbnN0YWxsUG9pbnREbGcnLCB1J1RpdGxlJywgdSdUZXh0JywgMTUsIDYsIDIwMCwgMTUsIDE5NjYxMSwgTm9uZSwgdSdbRGxnVGl0bGVGb250XU5ldHdvcmsgTG9jYXRpb24nLCBOb25lLCBOb25lKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdCYWNrJywgdSdQdXNoQnV0dG9uJywgMTgwLCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9CYWNrXScsIHUnTmV4dCcsIE5vbmUpLAotKHUnQWRtaW5JbnN0YWxsUG9pbnREbGcnLCB1J05leHQnLCB1J1B1c2hCdXR0b24nLCAyMzYsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X05leHRdJywgdSdDYW5jZWwnLCBOb25lKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdCcm93c2UnLCB1J1B1c2hCdXR0b24nLCAyODksIDExOSwgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0Jyb3dzZV0nLCB1J0JhY2snLCBOb25lKSwKLSh1J0FkbWluUmVnaXN0cmF0aW9uRGxnJywgdSdCYW5uZXJCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3NCwgNDQsIDEsIE5vbmUsIHUnW0Jhbm5lckJpdG1hcF0nLCB1J09yZ2FuaXphdGlvbkxhYmVsJywgTm9uZSksCi0odSdBZG1pblJlZ2lzdHJhdGlvbkRsZycsIHUnQmFubmVyTGluZScsIHUnTGluZScsIDAsIDQ0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnQWRtaW5SZWdpc3RyYXRpb25EbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdBZG1pblJlZ2lzdHJhdGlvbkRsZycsIHUnQ2FuY2VsJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9DYW5jZWxdJywgdSdCYW5uZXJCaXRtYXAnLCBOb25lKSwKLSh1J0FkbWluUmVnaXN0cmF0aW9uRGxnJywgdSdEZXNjcmlwdGlvbicsIHUnVGV4dCcsIDI1LCAyMywgMjgwLCAxNSwgMTk2NjExLCBOb25lLCB1J1BsZWFzZSBlbnRlciB5b3VyIGNvbXBhbnkgaW5mb3JtYXRpb24nLCBOb25lLCBOb25lKSwKLSh1J0FkbWluUmVnaXN0cmF0aW9uRGxnJywgdSdUaXRsZScsIHUnVGV4dCcsIDE1LCA2LCAyMDAsIDE1LCAxOTY2MTEsIE5vbmUsIHUnW0RsZ1RpdGxlRm9udF1Db21wYW55IEluZm9ybWF0aW9uJywgTm9uZSwgTm9uZSksCi0odSdBZG1pblJlZ2lzdHJhdGlvbkRsZycsIHUnQmFjaycsIHUnUHVzaEJ1dHRvbicsIDE4MCwgMjQzLCA1NiwgMTcsIDY1NTM5LCBOb25lLCB1J1tCdXR0b25UZXh0X0JhY2tdJywgdSdOZXh0JywgTm9uZSksCi0odSdBZG1pblJlZ2lzdHJhdGlvbkRsZycsIHUnTmV4dCcsIHUnUHVzaEJ1dHRvbicsIDIzNiwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfTmV4dF0nLCB1J0NhbmNlbCcsIE5vbmUpLAotKHUnQWRtaW5SZWdpc3RyYXRpb25EbGcnLCB1J09yZ2FuaXphdGlvbkxhYmVsJywgdSdUZXh0JywgNDUsIDcxLCAyODUsIDMwLCAzLCBOb25lLCB1JyZQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgeW91ciBvcmdhbml6YXRpb24gaW4gdGhlIGJveCBiZWxvdy4gIFRoaXMgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgY29tcGFueSBuYW1lIGZvciBzdWJzZXF1ZW50IGluc3RhbGxhdGlvbnMgb2YgW1Byb2R1Y3ROYW1lXTonLCB1J09yZ2FuaXphdGlvbkVkaXQnLCBOb25lKSwKLSh1J0FkbWluUmVnaXN0cmF0aW9uRGxnJywgdSdDREtleUVkaXQnLCB1J01hc2tlZEVkaXQnLCA0NSwgMTQzLCAyNTAsIDE2LCAzLCB1J1BJREtFWScsIHUnW1BJRFRlbXBsYXRlXScsIHUnQmFjaycsIE5vbmUpLAotKHUnQWRtaW5SZWdpc3RyYXRpb25EbGcnLCB1J0NES2V5TGFiZWwnLCB1J1RleHQnLCA0NSwgMTMwLCA1MCwgMTAsIDMsIE5vbmUsIHUnQ0QgJktleTonLCB1J0NES2V5RWRpdCcsIE5vbmUpLAotKHUnQWRtaW5SZWdpc3RyYXRpb25EbGcnLCB1J09yZ2FuaXphdGlvbkVkaXQnLCB1J0VkaXQnLCA0NSwgMTA1LCAyMjAsIDE4LCAzLCB1J0NPTVBBTllOQU1FJywgdSd7ODB9JywgdSdDREtleUxhYmVsJywgTm9uZSksCi0odSdCcm93c2VEbGcnLCB1J1VwJywgdSdQdXNoQnV0dG9uJywgMjk4LCA1NSwgMTksIDE5LCAzNjcwMDE5LCBOb25lLCB1J1VwJywgdSdOZXdGb2xkZXInLCB1J1VwIE9uZSBMZXZlbHwnKSwKLSh1J0Jyb3dzZURsZycsIHUnQmFubmVyQml0bWFwJywgdSdCaXRtYXAnLCAwLCAwLCAzNzQsIDQ0LCAxLCBOb25lLCB1J1tCYW5uZXJCaXRtYXBdJywgdSdQYXRoRWRpdCcsIE5vbmUpLAotKHUnQnJvd3NlRGxnJywgdSdQYXRoRWRpdCcsIHUnUGF0aEVkaXQnLCA4NCwgMjAyLCAyNjEsIDE4LCAxMSwgdSdfQnJvd3NlUHJvcGVydHknLCBOb25lLCB1J09LJywgTm9uZSksCi0odSdCcm93c2VEbGcnLCB1J0Jhbm5lckxpbmUnLCB1J0xpbmUnLCAwLCA0NCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0Jyb3dzZURsZycsIHUnQm90dG9tTGluZScsIHUnTGluZScsIDAsIDIzNCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0Jyb3dzZURsZycsIHUnQ2FuY2VsJywgdSdQdXNoQnV0dG9uJywgMjQwLCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9DYW5jZWxdJywgdSdDb21ib0xhYmVsJywgTm9uZSksCi0odSdCcm93c2VEbGcnLCB1J0NvbWJvTGFiZWwnLCB1J1RleHQnLCAyNSwgNTgsIDQ0LCAxMCwgMywgTm9uZSwgdScmTG9vayBpbjonLCB1J0RpcmVjdG9yeUNvbWJvJywgTm9uZSksCi0odSdCcm93c2VEbGcnLCB1J0RpcmVjdG9yeUNvbWJvJywgdSdEaXJlY3RvcnlDb21ibycsIDcwLCA1NSwgMjIwLCA4MCwgMzkzMjI3LCB1J19Ccm93c2VQcm9wZXJ0eScsIE5vbmUsIHUnVXAnLCBOb25lKSwKLSh1J0Jyb3dzZURsZycsIHUnRGVzY3JpcHRpb24nLCB1J1RleHQnLCAyNSwgMjMsIDI4MCwgMTUsIDE5NjYxMSwgTm9uZSwgdSdCcm93c2UgdG8gdGhlIGRlc3RpbmF0aW9uIGZvbGRlcicsIE5vbmUsIE5vbmUpLAotKHUnQnJvd3NlRGxnJywgdSdEaXJlY3RvcnlMaXN0JywgdSdEaXJlY3RvcnlMaXN0JywgMjUsIDgzLCAzMjAsIDExMCwgMTUsIHUnX0Jyb3dzZVByb3BlcnR5JywgTm9uZSwgdSdQYXRoTGFiZWwnLCBOb25lKSwKLSh1J0Jyb3dzZURsZycsIHUnUGF0aExhYmVsJywgdSdUZXh0JywgMjUsIDIwNSwgNTksIDEwLCAzLCBOb25lLCB1JyZGb2xkZXIgbmFtZTonLCB1J0Jhbm5lckJpdG1hcCcsIE5vbmUpLAotKHUnQnJvd3NlRGxnJywgdSdOZXdGb2xkZXInLCB1J1B1c2hCdXR0b24nLCAzMjUsIDU1LCAxOSwgMTksIDM2NzAwMTksIE5vbmUsIHUnTmV3JywgdSdEaXJlY3RvcnlMaXN0JywgdSdDcmVhdGUgQSBOZXcgRm9sZGVyfCcpLAotKHUnQnJvd3NlRGxnJywgdSdPSycsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfT0tdJywgdSdDYW5jZWwnLCBOb25lKSwKLSh1J0Jyb3dzZURsZycsIHUnVGl0bGUnLCB1J1RleHQnLCAxNSwgNiwgMjAwLCAxNSwgMTk2NjExLCBOb25lLCB1J1tEbGdUaXRsZUZvbnRdQ2hhbmdlIGN1cnJlbnQgZGVzdGluYXRpb24gZm9sZGVyJywgTm9uZSwgTm9uZSksCi0odSdDYW5jZWxEbGcnLCB1J1RleHQnLCB1J1RleHQnLCA0OCwgMTUsIDE5NCwgMzAsIDMsIE5vbmUsIHUnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbCBbUHJvZHVjdE5hbWVdIGluc3RhbGxhdGlvbj8nLCBOb25lLCBOb25lKSwKLSh1J0NhbmNlbERsZycsIHUnSWNvbicsIHUnSWNvbicsIDE1LCAxNSwgMjQsIDI0LCA1MjQyODgxLCBOb25lLCB1J1tJbmZvSWNvbl0nLCBOb25lLCB1J0luZm9ybWF0aW9uIGljb258JyksCi0odSdDYW5jZWxEbGcnLCB1J05vJywgdSdQdXNoQnV0dG9uJywgMTMyLCA1NywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X05vXScsIHUnWWVzJywgTm9uZSksCi0odSdDYW5jZWxEbGcnLCB1J1llcycsIHUnUHVzaEJ1dHRvbicsIDcyLCA1NywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X1llc10nLCB1J05vJywgTm9uZSksCi0odSdDdXN0b21pemVEbGcnLCB1J1RleHQnLCB1J1RleHQnLCAyNSwgNTUsIDMyMCwgMjAsIDMsIE5vbmUsIHUnQ2xpY2sgb24gdGhlIGljb25zIGluIHRoZSB0cmVlIGJlbG93IHRvIGNoYW5nZSB0aGUgd2F5IGZlYXR1cmVzIHdpbGwgYmUgaW5zdGFsbGVkLicsIE5vbmUsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdCYW5uZXJCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3NCwgNDQsIDEsIE5vbmUsIHUnW0Jhbm5lckJpdG1hcF0nLCB1J1RyZWUnLCBOb25lKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnQmFubmVyTGluZScsIHUnTGluZScsIDAsIDQ0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdCb3R0b21MaW5lJywgdSdMaW5lJywgMCwgMjM0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdDYW5jZWwnLCB1J1B1c2hCdXR0b24nLCAzMDQsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0NhbmNlbF0nLCB1J0Jhbm5lckJpdG1hcCcsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdEZXNjcmlwdGlvbicsIHUnVGV4dCcsIDI1LCAyMywgMjgwLCAxNSwgMTk2NjExLCBOb25lLCB1J1NlbGVjdCB0aGUgd2F5IHlvdSB3YW50IGZlYXR1cmVzIHRvIGJlIGluc3RhbGxlZC4nLCBOb25lLCBOb25lKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnVGl0bGUnLCB1J1RleHQnLCAxNSwgNiwgMjAwLCAxNSwgMTk2NjExLCBOb25lLCB1J1tEbGdUaXRsZUZvbnRdQ3VzdG9tIFNldHVwJywgTm9uZSwgTm9uZSksCi0odSdDdXN0b21pemVEbGcnLCB1J0JhY2snLCB1J1B1c2hCdXR0b24nLCAxODAsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0JhY2tdJywgdSdOZXh0JywgTm9uZSksCi0odSdDdXN0b21pemVEbGcnLCB1J05leHQnLCB1J1B1c2hCdXR0b24nLCAyMzYsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X05leHRdJywgdSdDYW5jZWwnLCBOb25lKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnQnJvd3NlJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyMDAsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9Ccm93c2VdJywgdSdSZXNldCcsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdUcmVlJywgdSdTZWxlY3Rpb25UcmVlJywgMjUsIDg1LCAxNzUsIDk1LCA3LCB1J19Ccm93c2VQcm9wZXJ0eScsIHUnVHJlZSBvZiBzZWxlY3Rpb25zJywgdSdCcm93c2UnLCBOb25lKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnQm94JywgdSdHcm91cEJveCcsIDIxMCwgODEsIDE0MCwgOTgsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdSZXNldCcsIHUnUHVzaEJ1dHRvbicsIDQyLCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9SZXNldF0nLCB1J0Rpc2tDb3N0JywgTm9uZSksCi0odSdDdXN0b21pemVEbGcnLCB1J0Rpc2tDb3N0JywgdSdQdXNoQnV0dG9uJywgMTExLCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdEaXNrICZVc2FnZScsIHUnQmFjaycsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdJdGVtRGVzY3JpcHRpb24nLCB1J1RleHQnLCAyMTUsIDkwLCAxMzEsIDMwLCAzLCBOb25lLCB1J011bHRpbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uJywgTm9uZSwgTm9uZSksCi0odSdDdXN0b21pemVEbGcnLCB1J0l0ZW1TaXplJywgdSdUZXh0JywgMjE1LCAxMzAsIDEzMSwgNDUsIDMsIE5vbmUsIHUnVGhlIHNpemUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLicsIE5vbmUsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdMb2NhdGlvbicsIHUnVGV4dCcsIDc1LCAyMDAsIDIxNSwgMjAsIDMsIE5vbmUsIHUiPFRoZSBzZWxlY3Rpb24ncyBwYXRoPiIsIE5vbmUsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdMb2NhdGlvbkxhYmVsJywgdSdUZXh0JywgMjUsIDIwMCwgNTAsIDEwLCAzLCBOb25lLCB1J0xvY2F0aW9uOicsIE5vbmUsIE5vbmUpLAotKHUnRGlza0Nvc3REbGcnLCB1J1RleHQnLCB1J1RleHQnLCAyMCwgNTMsIDMzMCwgNDAsIDMsIE5vbmUsIHUnVGhlIGhpZ2hsaWdodGVkIHZvbHVtZXMgKGlmIGFueSkgZG8gbm90IGhhdmUgZW5vdWdoIGRpc2sgc3BhY2UgYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZlYXR1cmVzLiAgWW91IGNhbiBlaXRoZXIgcmVtb3ZlIHNvbWUgZmlsZXMgZnJvbSB0aGUgaGlnaGxpZ2h0ZWQgdm9sdW1lcywgb3IgY2hvb3NlIHRvIGluc3RhbGwgbGVzcyBmZWF0dXJlcyBvbnRvIGxvY2FsIGRyaXZlKHMpLCBvciBzZWxlY3QgZGlmZmVyZW50IGRlc3RpbmF0aW9uIGRyaXZlKHMpLicsIE5vbmUsIE5vbmUpLAotKHUnRGlza0Nvc3REbGcnLCB1J0Jhbm5lckJpdG1hcCcsIHUnQml0bWFwJywgMCwgMCwgMzc0LCA0NCwgMSwgTm9uZSwgdSdbQmFubmVyQml0bWFwXScsIHUnT0snLCBOb25lKSwKLSh1J0Rpc2tDb3N0RGxnJywgdSdCYW5uZXJMaW5lJywgdSdMaW5lJywgMCwgNDQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdEaXNrQ29zdERsZycsIHUnQm90dG9tTGluZScsIHUnTGluZScsIDAsIDIzNCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0Rpc2tDb3N0RGxnJywgdSdEZXNjcmlwdGlvbicsIHUnVGV4dCcsIDIwLCAyMCwgMjgwLCAyMCwgMTk2NjExLCBOb25lLCB1J1RoZSBkaXNrIHNwYWNlIHJlcXVpcmVkIGZvciB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBzZWxlY3RlZCBmZWF0dXJlcy4nLCBOb25lLCBOb25lKSwKLSh1J0Rpc2tDb3N0RGxnJywgdSdPSycsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfT0tdJywgdSdCYW5uZXJCaXRtYXAnLCBOb25lKSwKLSh1J0Rpc2tDb3N0RGxnJywgdSdUaXRsZScsIHUnVGV4dCcsIDE1LCA2LCAyMDAsIDE1LCAxOTY2MTEsIE5vbmUsIHUnW0RsZ1RpdGxlRm9udF1EaXNrIFNwYWNlIFJlcXVpcmVtZW50cycsIE5vbmUsIE5vbmUpLAotKHUnRGlza0Nvc3REbGcnLCB1J1ZvbHVtZUxpc3QnLCB1J1ZvbHVtZUNvc3RMaXN0JywgMjAsIDEwMCwgMzMwLCAxMjAsIDM5MzIyMywgTm9uZSwgdSd7MTIwfXs3MH17NzB9ezcwfXs3MH0nLCBOb25lLCBOb25lKSwKLSh1J0Vycm9yRGxnJywgdSdZJywgdSdQdXNoQnV0dG9uJywgMTAwLCA4MCwgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X1llc10nLCBOb25lLCBOb25lKSwKLSh1J0Vycm9yRGxnJywgdSdBJywgdSdQdXNoQnV0dG9uJywgMTAwLCA4MCwgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0NhbmNlbF0nLCBOb25lLCBOb25lKSwKLSh1J0Vycm9yRGxnJywgdSdDJywgdSdQdXNoQnV0dG9uJywgMTAwLCA4MCwgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0NhbmNlbF0nLCBOb25lLCBOb25lKSwKLSh1J0Vycm9yRGxnJywgdSdFcnJvckljb24nLCB1J0ljb24nLCAxNSwgMTUsIDI0LCAyNCwgNTI0Mjg4MSwgTm9uZSwgdSdbSW5mb0ljb25dJywgTm9uZSwgdSdJbmZvcm1hdGlvbiBpY29ufCcpLAotKHUnRXJyb3JEbGcnLCB1J0Vycm9yVGV4dCcsIHUnVGV4dCcsIDQ4LCAxNSwgMjA1LCA2MCwgMywgTm9uZSwgdSdJbmZvcm1hdGlvbiB0ZXh0JywgTm9uZSwgTm9uZSksCi0odSdFcnJvckRsZycsIHUnSScsIHUnUHVzaEJ1dHRvbicsIDEwMCwgODAsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9JZ25vcmVdJywgTm9uZSwgTm9uZSksCi0odSdFcnJvckRsZycsIHUnTicsIHUnUHVzaEJ1dHRvbicsIDEwMCwgODAsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9Ob10nLCBOb25lLCBOb25lKSwKLSh1J0Vycm9yRGxnJywgdSdPJywgdSdQdXNoQnV0dG9uJywgMTAwLCA4MCwgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X09LXScsIE5vbmUsIE5vbmUpLAotKHUnRXJyb3JEbGcnLCB1J1InLCB1J1B1c2hCdXR0b24nLCAxMDAsIDgwLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfUmV0cnldJywgTm9uZSwgTm9uZSksCi0odSdGaWxlc0luVXNlJywgdSdUZXh0JywgdSdUZXh0JywgMjAsIDU1LCAzMzAsIDMwLCAzLCBOb25lLCB1J1RoZSBmb2xsb3dpbmcgYXBwbGljYXRpb25zIGFyZSB1c2luZyBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZCBieSB0aGlzIHNldHVwLiBDbG9zZSB0aGVzZSBhcHBsaWNhdGlvbnMgYW5kIHRoZW4gY2xpY2sgUmV0cnkgdG8gY29udGludWUgdGhlIGluc3RhbGxhdGlvbiBvciBDYW5jZWwgdG8gZXhpdCBpdC4nLCBOb25lLCBOb25lKSwKLSh1J0ZpbGVzSW5Vc2UnLCB1J0Jhbm5lckJpdG1hcCcsIHUnQml0bWFwJywgMCwgMCwgMzc0LCA0NCwgMSwgTm9uZSwgdSdbQmFubmVyQml0bWFwXScsIHUnUmV0cnknLCBOb25lKSwKLSh1J0ZpbGVzSW5Vc2UnLCB1J0Jhbm5lckxpbmUnLCB1J0xpbmUnLCAwLCA0NCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0ZpbGVzSW5Vc2UnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdGaWxlc0luVXNlJywgdSdEZXNjcmlwdGlvbicsIHUnVGV4dCcsIDIwLCAyMywgMjgwLCAyMCwgMTk2NjExLCBOb25lLCB1J1NvbWUgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYXJlIGN1cnJlbnRseSBpbiB1c2UuJywgTm9uZSwgTm9uZSksCi0odSdGaWxlc0luVXNlJywgdSdUaXRsZScsIHUnVGV4dCcsIDE1LCA2LCAyMDAsIDE1LCAxOTY2MTEsIE5vbmUsIHUnW0RsZ1RpdGxlRm9udF1GaWxlcyBpbiBVc2UnLCBOb25lLCBOb25lKSwKLSh1J0ZpbGVzSW5Vc2UnLCB1J1JldHJ5JywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9SZXRyeV0nLCB1J0lnbm9yZScsIE5vbmUpLAotKHUnRmlsZXNJblVzZScsIHUnRXhpdCcsIHUnUHVzaEJ1dHRvbicsIDE2NiwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfRXhpdF0nLCB1J0Jhbm5lckJpdG1hcCcsIE5vbmUpLAotKHUnRmlsZXNJblVzZScsIHUnSWdub3JlJywgdSdQdXNoQnV0dG9uJywgMjM1LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9JZ25vcmVdJywgdSdFeGl0JywgTm9uZSksCi0odSdGaWxlc0luVXNlJywgdSdMaXN0JywgdSdMaXN0Qm94JywgMjAsIDg3LCAzMzAsIDEzMCwgNywgdSdGaWxlSW5Vc2VQcm9jZXNzJywgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdSdCYW5uZXJCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3NCwgNDQsIDEsIE5vbmUsIHUnW0Jhbm5lckJpdG1hcF0nLCB1J0FncmVlbWVudFRleHQnLCBOb25lKSwKLSh1J0xpY2Vuc2VBZ3JlZW1lbnREbGcnLCB1J0Jhbm5lckxpbmUnLCB1J0xpbmUnLCAwLCA0NCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0xpY2Vuc2VBZ3JlZW1lbnREbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdSdDYW5jZWwnLCB1J1B1c2hCdXR0b24nLCAzMDQsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0NhbmNlbF0nLCB1J0Jhbm5lckJpdG1hcCcsIE5vbmUpLAotKHUnTGljZW5zZUFncmVlbWVudERsZycsIHUnRGVzY3JpcHRpb24nLCB1J1RleHQnLCAyNSwgMjMsIDI4MCwgMTUsIDE5NjYxMSwgTm9uZSwgdSdQbGVhc2UgcmVhZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50IGNhcmVmdWxseScsIE5vbmUsIE5vbmUpLAotKHUnTGljZW5zZUFncmVlbWVudERsZycsIHUnVGl0bGUnLCB1J1RleHQnLCAxNSwgNiwgMjAwLCAxNSwgMTk2NjExLCBOb25lLCB1J1tEbGdUaXRsZUZvbnRdRW5kLVVzZXIgTGljZW5zZSBBZ3JlZW1lbnQnLCBOb25lLCBOb25lKSwKLSh1J0xpY2Vuc2VBZ3JlZW1lbnREbGcnLCB1J0JhY2snLCB1J1B1c2hCdXR0b24nLCAxODAsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0JhY2tdJywgdSdOZXh0JywgTm9uZSksCi0odSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdSdOZXh0JywgdSdQdXNoQnV0dG9uJywgMjM2LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9OZXh0XScsIHUnQ2FuY2VsJywgTm9uZSksCi0odSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdSdBZ3JlZW1lbnRUZXh0JywgdSdTY3JvbGxhYmxlVGV4dCcsIDIwLCA2MCwgMzMwLCAxMjAsIDcsIE5vbmUsIHUne1xccnRmMVxcYW5zaVxcYW5zaWNwZzEyNTJcXGRlZmYwXFxkZWZ0YWI3MjB7XFxmb250dGJse1xcZjBcXGZyb21hblxcZnBycTIgVGltZXMgTmV3IFJvbWFuO319e1xcY29sb3J0YmxcXHJlZDBcXGdyZWVuMFxcYmx1ZTA7fSBcXGRlZmxhbmcxMDMzXFxob3J6ZG9je1xcKlxcZmNoYXJzIH17XFwqXFxsY2hhcnMgfVxccGFyZFxccGxhaW5cXGYwXFxmczIwIDxZb3VyIGxpY2Vuc2UgYWdyZWVtZW50IHNob3VsZCBnbyBoZXJlLj5cXHBhciB9JywgdSdCdXR0b25zJywgTm9uZSksCi0odSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdSdCdXR0b25zJywgdSdSYWRpb0J1dHRvbkdyb3VwJywgMjAsIDE4NywgMzMwLCA0MCwgMywgdSdJQWdyZWUnLCBOb25lLCB1J0JhY2snLCBOb25lKSwKLSh1J01haW50ZW5hbmNlVHlwZURsZycsIHUnQmFubmVyQml0bWFwJywgdSdCaXRtYXAnLCAwLCAwLCAzNzQsIDQ0LCAxLCBOb25lLCB1J1tCYW5uZXJCaXRtYXBdJywgdSdDaGFuZ2VMYWJlbCcsIE5vbmUpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdCYW5uZXJMaW5lJywgdSdMaW5lJywgMCwgNDQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J0NhbmNlbCcsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfQ2FuY2VsXScsIHUnQmFubmVyQml0bWFwJywgTm9uZSksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMjUsIDIzLCAyODAsIDIwLCAxOTY2MTEsIE5vbmUsIHUnU2VsZWN0IHRoZSBvcGVyYXRpb24geW91IHdpc2ggdG8gcGVyZm9ybS4nLCBOb25lLCBOb25lKSwKLSh1J01haW50ZW5hbmNlVHlwZURsZycsIHUnVGl0bGUnLCB1J1RleHQnLCAxNSwgNiwgMjQwLCAxNSwgMTk2NjExLCBOb25lLCB1J1tEbGdUaXRsZUZvbnRdTW9kaWZ5LCBSZXBhaXIgb3IgUmVtb3ZlIGluc3RhbGxhdGlvbicsIE5vbmUsIE5vbmUpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdCYWNrJywgdSdQdXNoQnV0dG9uJywgMTgwLCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9CYWNrXScsIHUnTmV4dCcsIE5vbmUpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdOZXh0JywgdSdQdXNoQnV0dG9uJywgMjM2LCAyNDMsIDU2LCAxNywgMSwgTm9uZSwgdSdbQnV0dG9uVGV4dF9OZXh0XScsIHUnQ2FuY2VsJywgTm9uZSksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J0NoYW5nZUxhYmVsJywgdSdUZXh0JywgMTA1LCA2NSwgMTAwLCAxMCwgMywgTm9uZSwgdSdbRGxnVGl0bGVGb250XSZNb2RpZnknLCB1J0NoYW5nZUJ1dHRvbicsIE5vbmUpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdDaGFuZ2VCdXR0b24nLCB1J1B1c2hCdXR0b24nLCA1MCwgNjUsIDM4LCAzOCwgNTc2NzE3MSwgTm9uZSwgdSdbQ3VzdG9tU2V0dXBJY29uXScsIHUnUmVwYWlyTGFiZWwnLCB1J01vZGlmeSBJbnN0YWxsYXRpb258JyksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J1JlcGFpckxhYmVsJywgdSdUZXh0JywgMTA1LCAxMTQsIDEwMCwgMTAsIDMsIE5vbmUsIHUnW0RsZ1RpdGxlRm9udF1SZSZwYWlyJywgdSdSZXBhaXJCdXR0b24nLCBOb25lKSwKLSh1J01haW50ZW5hbmNlVHlwZURsZycsIHUnQ2hhbmdlVGV4dCcsIHUnVGV4dCcsIDEwNSwgNzgsIDIzMCwgMjAsIDMsIE5vbmUsIHUnQWxsb3dzIHVzZXJzIHRvIGNoYW5nZSB0aGUgd2F5IGZlYXR1cmVzIGFyZSBpbnN0YWxsZWQuJywgTm9uZSwgTm9uZSksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J1JlbW92ZUJ1dHRvbicsIHUnUHVzaEJ1dHRvbicsIDUwLCAxNjMsIDM4LCAzOCwgNTc2NzE3MSwgTm9uZSwgdSdbUmVtb3ZlSWNvbl0nLCB1J0JhY2snLCB1J1JlbW92ZSBJbnN0YWxsYXRpb258JyksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J1JlbW92ZUxhYmVsJywgdSdUZXh0JywgMTA1LCAxNjMsIDEwMCwgMTAsIDMsIE5vbmUsIHUnW0RsZ1RpdGxlRm9udF0mUmVtb3ZlJywgdSdSZW1vdmVCdXR0b24nLCBOb25lKSwKLSh1J01haW50ZW5hbmNlVHlwZURsZycsIHUnUmVtb3ZlVGV4dCcsIHUnVGV4dCcsIDEwNSwgMTc2LCAyMzAsIDIwLCAzLCBOb25lLCB1J1JlbW92ZXMgW1Byb2R1Y3ROYW1lXSBmcm9tIHlvdXIgY29tcHV0ZXIuJywgTm9uZSwgTm9uZSksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J1JlcGFpckJ1dHRvbicsIHUnUHVzaEJ1dHRvbicsIDUwLCAxMTQsIDM4LCAzOCwgNTc2NzE3MSwgTm9uZSwgdSdbUmVwYWlySWNvbl0nLCB1J1JlbW92ZUxhYmVsJywgdSdSZXBhaXIgSW5zdGFsbGF0aW9ufCcpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdSZXBhaXJUZXh0JywgdSdUZXh0JywgMTA1LCAxMjcsIDIzMCwgMzAsIDMsIE5vbmUsIHUnUmVwYWlycyBlcnJvcnMgaW4gdGhlIG1vc3QgcmVjZW50IGluc3RhbGxhdGlvbiBzdGF0ZSAtIGZpeGVzIG1pc3Npbmcgb3IgY29ycnVwdCBmaWxlcywgc2hvcnRjdXRzIGFuZCByZWdpc3RyeSBlbnRyaWVzLicsIE5vbmUsIE5vbmUpLAotKHUnTWFpbnRlbmFuY2VXZWxjb21lRGxnJywgdSdCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3MCwgMjM0LCAxLCBOb25lLCB1J1tEaWFsb2dCaXRtYXBdJywgdSdCYWNrJywgTm9uZSksCi0odSdNYWludGVuYW5jZVdlbGNvbWVEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdNYWludGVuYW5jZVdlbGNvbWVEbGcnLCB1J0NhbmNlbCcsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfQ2FuY2VsXScsIHUnQml0bWFwJywgTm9uZSksCi0odSdNYWludGVuYW5jZVdlbGNvbWVEbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMTM1LCA3MCwgMjIwLCA2MCwgMTk2NjExLCBOb25lLCB1J1RoZSBbV2l6YXJkXSB3aWxsIGFsbG93IHlvdSB0byBjaGFuZ2UgdGhlIHdheSBbUHJvZHVjdE5hbWVdIGZlYXR1cmVzIGFyZSBpbnN0YWxsZWQgb24geW91ciBjb21wdXRlciBvciBldmVuIHRvIHJlbW92ZSBbUHJvZHVjdE5hbWVdIGZyb20geW91ciBjb21wdXRlci4gIENsaWNrIE5leHQgdG8gY29udGludWUgb3IgQ2FuY2VsIHRvIGV4aXQgdGhlIFtXaXphcmRdLicsIE5vbmUsIE5vbmUpLAotKHUnTWFpbnRlbmFuY2VXZWxjb21lRGxnJywgdSdUaXRsZScsIHUnVGV4dCcsIDEzNSwgMjAsIDIyMCwgNjAsIDE5NjYxMSwgTm9uZSwgdSd7XFxWZXJkYW5hQm9sZDEzfVdlbGNvbWUgdG8gdGhlIFtQcm9kdWN0TmFtZV0gW1dpemFyZF0nLCBOb25lLCBOb25lKSwKLSh1J01haW50ZW5hbmNlV2VsY29tZURsZycsIHUnQmFjaycsIHUnUHVzaEJ1dHRvbicsIDE4MCwgMjQzLCA1NiwgMTcsIDEsIE5vbmUsIHUnW0J1dHRvblRleHRfQmFja10nLCB1J05leHQnLCBOb25lKSwKLSh1J01haW50ZW5hbmNlV2VsY29tZURsZycsIHUnTmV4dCcsIHUnUHVzaEJ1dHRvbicsIDIzNiwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfTmV4dF0nLCB1J0NhbmNlbCcsIE5vbmUpLAotKHUnT3V0T2ZEaXNrRGxnJywgdSdUZXh0JywgdSdUZXh0JywgMjAsIDUzLCAzMzAsIDQwLCAzLCBOb25lLCB1J1RoZSBoaWdobGlnaHRlZCB2b2x1bWVzIGRvIG5vdCBoYXZlIGVub3VnaCBkaXNrIHNwYWNlIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmZWF0dXJlcy4gIFlvdSBjYW4gZWl0aGVyIHJlbW92ZSBzb21lIGZpbGVzIGZyb20gdGhlIGhpZ2hsaWdodGVkIHZvbHVtZXMsIG9yIGNob29zZSB0byBpbnN0YWxsIGxlc3MgZmVhdHVyZXMgb250byBsb2NhbCBkcml2ZShzKSwgb3Igc2VsZWN0IGRpZmZlcmVudCBkZXN0aW5hdGlvbiBkcml2ZShzKS4nLCBOb25lLCBOb25lKSwKLSh1J091dE9mRGlza0RsZycsIHUnQmFubmVyQml0bWFwJywgdSdCaXRtYXAnLCAwLCAwLCAzNzQsIDQ0LCAxLCBOb25lLCB1J1tCYW5uZXJCaXRtYXBdJywgdSdPSycsIE5vbmUpLAotKHUnT3V0T2ZEaXNrRGxnJywgdSdCYW5uZXJMaW5lJywgdSdMaW5lJywgMCwgNDQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdPdXRPZkRpc2tEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdPdXRPZkRpc2tEbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMjAsIDIwLCAyODAsIDIwLCAxOTY2MTEsIE5vbmUsIHUnRGlzayBzcGFjZSByZXF1aXJlZCBmb3IgdGhlIGluc3RhbGxhdGlvbiBleGNlZWRzIGF2YWlsYWJsZSBkaXNrIHNwYWNlLicsIE5vbmUsIE5vbmUpLAotKHUnT3V0T2ZEaXNrRGxnJywgdSdPSycsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfT0tdJywgdSdCYW5uZXJCaXRtYXAnLCBOb25lKSwKLSh1J091dE9mRGlza0RsZycsIHUnVGl0bGUnLCB1J1RleHQnLCAxNSwgNiwgMjAwLCAxNSwgMTk2NjExLCBOb25lLCB1J1tEbGdUaXRsZUZvbnRdT3V0IG9mIERpc2sgU3BhY2UnLCBOb25lLCBOb25lKSwKLSh1J091dE9mRGlza0RsZycsIHUnVm9sdW1lTGlzdCcsIHUnVm9sdW1lQ29zdExpc3QnLCAyMCwgMTAwLCAzMzAsIDEyMCwgMzkzMjIzLCBOb25lLCB1J3sxMjB9ezcwfXs3MH17NzB9ezcwfScsIE5vbmUsIE5vbmUpLAotKHUnT3V0T2ZSYkRpc2tEbGcnLCB1J1RleHQnLCB1J1RleHQnLCAyMCwgNTMsIDMzMCwgNDAsIDMsIE5vbmUsIHUnVGhlIGhpZ2hsaWdodGVkIHZvbHVtZXMgZG8gbm90IGhhdmUgZW5vdWdoIGRpc2sgc3BhY2UgYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZlYXR1cmVzLiAgWW91IGNhbiBlaXRoZXIgcmVtb3ZlIHNvbWUgZmlsZXMgZnJvbSB0aGUgaGlnaGxpZ2h0ZWQgdm9sdW1lcywgb3IgY2hvb3NlIHRvIGluc3RhbGwgbGVzcyBmZWF0dXJlcyBvbnRvIGxvY2FsIGRyaXZlKHMpLCBvciBzZWxlY3QgZGlmZmVyZW50IGRlc3RpbmF0aW9uIGRyaXZlKHMpLicsIE5vbmUsIE5vbmUpLAotKHUnT3V0T2ZSYkRpc2tEbGcnLCB1J0Jhbm5lckJpdG1hcCcsIHUnQml0bWFwJywgMCwgMCwgMzc0LCA0NCwgMSwgTm9uZSwgdSdbQmFubmVyQml0bWFwXScsIHUnTm8nLCBOb25lKSwKLSh1J091dE9mUmJEaXNrRGxnJywgdSdCYW5uZXJMaW5lJywgdSdMaW5lJywgMCwgNDQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdPdXRPZlJiRGlza0RsZycsIHUnQm90dG9tTGluZScsIHUnTGluZScsIDAsIDIzNCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J091dE9mUmJEaXNrRGxnJywgdSdEZXNjcmlwdGlvbicsIHUnVGV4dCcsIDIwLCAyMCwgMjgwLCAyMCwgMTk2NjExLCBOb25lLCB1J0Rpc2sgc3BhY2UgcmVxdWlyZWQgZm9yIHRoZSBpbnN0YWxsYXRpb24gZXhjZWVkcyBhdmFpbGFibGUgZGlzayBzcGFjZS4nLCBOb25lLCBOb25lKSwKLSh1J091dE9mUmJEaXNrRGxnJywgdSdUaXRsZScsIHUnVGV4dCcsIDE1LCA2LCAyMDAsIDE1LCAxOTY2MTEsIE5vbmUsIHUnW0RsZ1RpdGxlRm9udF1PdXQgb2YgRGlzayBTcGFjZScsIE5vbmUsIE5vbmUpLAotKHUnT3V0T2ZSYkRpc2tEbGcnLCB1J05vJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9Ob10nLCB1J1llcycsIE5vbmUpLAotKHUnT3V0T2ZSYkRpc2tEbGcnLCB1J1llcycsIHUnUHVzaEJ1dHRvbicsIDI0MCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfWWVzXScsIHUnQmFubmVyQml0bWFwJywgTm9uZSksCi0odSdPdXRPZlJiRGlza0RsZycsIHUnVm9sdW1lTGlzdCcsIHUnVm9sdW1lQ29zdExpc3QnLCAyMCwgMTQwLCAzMzAsIDgwLCA0NTg3NTI3LCBOb25lLCB1J3sxMjB9ezcwfXs3MH17NzB9ezcwfScsIE5vbmUsIE5vbmUpLAotKHUnT3V0T2ZSYkRpc2tEbGcnLCB1J1RleHQyJywgdSdUZXh0JywgMjAsIDk0LCAzMzAsIDQwLCAzLCBOb25lLCB1IkFsdGVybmF0aXZlbHksIHlvdSBtYXkgY2hvb3NlIHRvIGRpc2FibGUgdGhlIGluc3RhbGxlcidzIHJvbGxiYWNrIGZ1bmN0aW9uYWxpdHkuICBUaGlzIGFsbG93cyB0aGUgaW5zdGFsbGVyIHRvIHJlc3RvcmUgeW91ciBjb21wdXRlcidzIG9yaWdpbmFsIHN0YXRlIHNob3VsZCB0aGUgaW5zdGFsbGF0aW9uIGJlIGludGVycnVwdGVkIGluIGFueSB3YXkuICBDbGljayBZZXMgaWYgeW91IHdpc2ggdG8gdGFrZSB0aGUgcmlzayB0byBkaXNhYmxlIHJvbGxiYWNrLiIsIE5vbmUsIE5vbmUpLAotKHUnUmVzdW1lRGxnJywgdSdCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3MCwgMjM0LCAxLCBOb25lLCB1J1tEaWFsb2dCaXRtYXBdJywgdSdCYWNrJywgTm9uZSksCi0odSdSZXN1bWVEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdSZXN1bWVEbGcnLCB1J0NhbmNlbCcsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfQ2FuY2VsXScsIHUnQml0bWFwJywgTm9uZSksCi0odSdSZXN1bWVEbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMTM1LCA3MCwgMjIwLCAzMCwgMTk2NjExLCBOb25lLCB1J1RoZSBbV2l6YXJkXSB3aWxsIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgW1Byb2R1Y3ROYW1lXSBvbiB5b3VyIGNvbXB1dGVyLiAgQ2xpY2sgSW5zdGFsbCB0byBjb250aW51ZSBvciBDYW5jZWwgdG8gZXhpdCB0aGUgW1dpemFyZF0uJywgTm9uZSwgTm9uZSksCi0odSdSZXN1bWVEbGcnLCB1J1RpdGxlJywgdSdUZXh0JywgMTM1LCAyMCwgMjIwLCA2MCwgMTk2NjExLCBOb25lLCB1J3tcXFZlcmRhbmFCb2xkMTN9UmVzdW1pbmcgdGhlIFtQcm9kdWN0TmFtZV0gW1dpemFyZF0nLCBOb25lLCBOb25lKSwKLSh1J1Jlc3VtZURsZycsIHUnQmFjaycsIHUnUHVzaEJ1dHRvbicsIDE4MCwgMjQzLCA1NiwgMTcsIDEsIE5vbmUsIHUnW0J1dHRvblRleHRfQmFja10nLCB1J0luc3RhbGwnLCBOb25lKSwKLSh1J1Jlc3VtZURsZycsIHUnSW5zdGFsbCcsIHUnUHVzaEJ1dHRvbicsIDIzNiwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfSW5zdGFsbF0nLCB1J0NhbmNlbCcsIE5vbmUpLAotKHUnU2V0dXBUeXBlRGxnJywgdSdCYW5uZXJCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3NCwgNDQsIDEsIE5vbmUsIHUnW0Jhbm5lckJpdG1hcF0nLCB1J1R5cGljYWxMYWJlbCcsIE5vbmUpLAotKHUnU2V0dXBUeXBlRGxnJywgdSdCYW5uZXJMaW5lJywgdSdMaW5lJywgMCwgNDQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J0NhbmNlbCcsIHUnUHVzaEJ1dHRvbicsIDMwNCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfQ2FuY2VsXScsIHUnQmFubmVyQml0bWFwJywgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMjUsIDIzLCAyODAsIDE1LCAxOTY2MTEsIE5vbmUsIHUnQ2hvb3NlIHRoZSBzZXR1cCB0eXBlIHRoYXQgYmVzdCBzdWl0cyB5b3VyIG5lZWRzJywgTm9uZSwgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J1RpdGxlJywgdSdUZXh0JywgMTUsIDYsIDIwMCwgMTUsIDE5NjYxMSwgTm9uZSwgdSdbRGxnVGl0bGVGb250XUNob29zZSBTZXR1cCBUeXBlJywgTm9uZSwgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J0JhY2snLCB1J1B1c2hCdXR0b24nLCAxODAsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0JhY2tdJywgdSdOZXh0JywgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J05leHQnLCB1J1B1c2hCdXR0b24nLCAyMzYsIDI0MywgNTYsIDE3LCAxLCBOb25lLCB1J1tCdXR0b25UZXh0X05leHRdJywgdSdDYW5jZWwnLCBOb25lKSwKLSh1J1NldHVwVHlwZURsZycsIHUnVHlwaWNhbExhYmVsJywgdSdUZXh0JywgMTA1LCA2NSwgMTAwLCAxMCwgMywgTm9uZSwgdSdbRGxnVGl0bGVGb250XSZUeXBpY2FsJywgdSdUeXBpY2FsQnV0dG9uJywgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J0NvbXBsZXRlQnV0dG9uJywgdSdQdXNoQnV0dG9uJywgNTAsIDE3MSwgMzgsIDM4LCA1NzY3MTcxLCBOb25lLCB1J1tDb21wbGV0ZVNldHVwSWNvbl0nLCB1J0JhY2snLCB1J0NvbXBsZXRlIEluc3RhbGxhdGlvbnwnKSwKLSh1J1NldHVwVHlwZURsZycsIHUnQ29tcGxldGVMYWJlbCcsIHUnVGV4dCcsIDEwNSwgMTcxLCAxMDAsIDEwLCAzLCBOb25lLCB1J1tEbGdUaXRsZUZvbnRdQyZvbXBsZXRlJywgdSdDb21wbGV0ZUJ1dHRvbicsIE5vbmUpLAotKHUnU2V0dXBUeXBlRGxnJywgdSdDb21wbGV0ZVRleHQnLCB1J1RleHQnLCAxMDUsIDE4NCwgMjMwLCAyMCwgMywgTm9uZSwgdSdBbGwgcHJvZ3JhbSBmZWF0dXJlcyB3aWxsIGJlIGluc3RhbGxlZC4gIChSZXF1aXJlcyBtb3N0IGRpc2sgc3BhY2UpJywgTm9uZSwgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J0N1c3RvbUJ1dHRvbicsIHUnUHVzaEJ1dHRvbicsIDUwLCAxMTgsIDM4LCAzOCwgNTc2NzE3MSwgTm9uZSwgdSdbQ3VzdG9tU2V0dXBJY29uXScsIHUnQ29tcGxldGVMYWJlbCcsIHUnQ3VzdG9tIEluc3RhbGxhdGlvbnwnKSwKLSh1J1NldHVwVHlwZURsZycsIHUnQ3VzdG9tTGFiZWwnLCB1J1RleHQnLCAxMDUsIDExOCwgMTAwLCAxMCwgMywgTm9uZSwgdSdbRGxnVGl0bGVGb250XUMmdXN0b20nLCB1J0N1c3RvbUJ1dHRvbicsIE5vbmUpLAotKHUnU2V0dXBUeXBlRGxnJywgdSdDdXN0b21UZXh0JywgdSdUZXh0JywgMTA1LCAxMzEsIDIzMCwgMzAsIDMsIE5vbmUsIHUnQWxsb3dzIHVzZXJzIHRvIGNob29zZSB3aGljaCBwcm9ncmFtIGZlYXR1cmVzIHdpbGwgYmUgaW5zdGFsbGVkIGFuZCB3aGVyZSB0aGV5IHdpbGwgYmUgaW5zdGFsbGVkLiBSZWNvbW1lbmRlZCBmb3IgYWR2YW5jZWQgdXNlcnMuJywgTm9uZSwgTm9uZSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J1R5cGljYWxCdXR0b24nLCB1J1B1c2hCdXR0b24nLCA1MCwgNjUsIDM4LCAzOCwgNTc2NzE3MSwgTm9uZSwgdSdbSW5zdGFsbGVySWNvbl0nLCB1J0N1c3RvbUxhYmVsJywgdSdUeXBpY2FsIEluc3RhbGxhdGlvbnwnKSwKLSh1J1NldHVwVHlwZURsZycsIHUnVHlwaWNhbFRleHQnLCB1J1RleHQnLCAxMDUsIDc4LCAyMzAsIDIwLCAzLCBOb25lLCB1J0luc3RhbGxzIHRoZSBtb3N0IGNvbW1vbiBwcm9ncmFtIGZlYXR1cmVzLiBSZWNvbW1lbmRlZCBmb3IgbW9zdCB1c2Vycy4nLCBOb25lLCBOb25lKSwKLSh1J1VzZXJSZWdpc3RyYXRpb25EbGcnLCB1J0Jhbm5lckJpdG1hcCcsIHUnQml0bWFwJywgMCwgMCwgMzc0LCA0NCwgMSwgTm9uZSwgdSdbQmFubmVyQml0bWFwXScsIHUnTmFtZUxhYmVsJywgTm9uZSksCi0odSdVc2VyUmVnaXN0cmF0aW9uRGxnJywgdSdCYW5uZXJMaW5lJywgdSdMaW5lJywgMCwgNDQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdVc2VyUmVnaXN0cmF0aW9uRGxnJywgdSdCb3R0b21MaW5lJywgdSdMaW5lJywgMCwgMjM0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIHUnQ2FuY2VsJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9DYW5jZWxdJywgdSdCYW5uZXJCaXRtYXAnLCBOb25lKSwKLSh1J1VzZXJSZWdpc3RyYXRpb25EbGcnLCB1J0Rlc2NyaXB0aW9uJywgdSdUZXh0JywgMjUsIDIzLCAyODAsIDE1LCAxOTY2MTEsIE5vbmUsIHUnUGxlYXNlIGVudGVyIHlvdXIgY3VzdG9tZXIgaW5mb3JtYXRpb24nLCBOb25lLCBOb25lKSwKLSh1J1VzZXJSZWdpc3RyYXRpb25EbGcnLCB1J1RpdGxlJywgdSdUZXh0JywgMTUsIDYsIDIwMCwgMTUsIDE5NjYxMSwgTm9uZSwgdSdbRGxnVGl0bGVGb250XUN1c3RvbWVyIEluZm9ybWF0aW9uJywgTm9uZSwgTm9uZSksCi0odSdVc2VyUmVnaXN0cmF0aW9uRGxnJywgdSdCYWNrJywgdSdQdXNoQnV0dG9uJywgMTgwLCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9CYWNrXScsIHUnTmV4dCcsIE5vbmUpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIHUnTmV4dCcsIHUnUHVzaEJ1dHRvbicsIDIzNiwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfTmV4dF0nLCB1J0NhbmNlbCcsIE5vbmUpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIHUnT3JnYW5pemF0aW9uTGFiZWwnLCB1J1RleHQnLCA0NSwgMTEwLCAxMDAsIDE1LCAzLCBOb25lLCB1JyZPcmdhbml6YXRpb246JywgdSdPcmdhbml6YXRpb25FZGl0JywgTm9uZSksCi0odSdVc2VyUmVnaXN0cmF0aW9uRGxnJywgdSdDREtleUVkaXQnLCB1J01hc2tlZEVkaXQnLCA0NSwgMTU5LCAyNTAsIDE2LCAzLCB1J1BJREtFWScsIHUnW1BJRFRlbXBsYXRlXScsIHUnQmFjaycsIE5vbmUpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIHUnQ0RLZXlMYWJlbCcsIHUnVGV4dCcsIDQ1LCAxNDcsIDUwLCAxMCwgMywgTm9uZSwgdSdDRCAmS2V5OicsIHUnQ0RLZXlFZGl0JywgTm9uZSksCi0odSdVc2VyUmVnaXN0cmF0aW9uRGxnJywgdSdPcmdhbml6YXRpb25FZGl0JywgdSdFZGl0JywgNDUsIDEyMiwgMjIwLCAxOCwgMywgdSdDT01QQU5ZTkFNRScsIHUnezgwfScsIHUnQ0RLZXlMYWJlbCcsIE5vbmUpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIHUnTmFtZUxhYmVsJywgdSdUZXh0JywgNDUsIDczLCAxMDAsIDE1LCAzLCBOb25lLCB1JyZVc2VyIE5hbWU6JywgdSdOYW1lRWRpdCcsIE5vbmUpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIHUnTmFtZUVkaXQnLCB1J0VkaXQnLCA0NSwgODUsIDIyMCwgMTgsIDMsIHUnVVNFUk5BTUUnLCB1J3s4MH0nLCB1J09yZ2FuaXphdGlvbkxhYmVsJywgTm9uZSksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnVGV4dCcsIHUnVGV4dCcsIDI1LCA3MCwgMzIwLCAyMCwgMywgTm9uZSwgdSdDbGljayBJbnN0YWxsIHRvIGJlZ2luIHRoZSBpbnN0YWxsYXRpb24uICBJZiB5b3Ugd2FudCB0byByZXZpZXcgb3IgY2hhbmdlIGFueSBvZiB5b3VyIGluc3RhbGxhdGlvbiBzZXR0aW5ncywgY2xpY2sgQmFjay4gIENsaWNrIENhbmNlbCB0byBleGl0IHRoZSB3aXphcmQuJywgTm9uZSwgTm9uZSksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnQmFubmVyQml0bWFwJywgdSdCaXRtYXAnLCAwLCAwLCAzNzQsIDQ0LCAxLCBOb25lLCB1J1tCYW5uZXJCaXRtYXBdJywgdSdCYWNrJywgTm9uZSksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnQmFubmVyTGluZScsIHUnTGluZScsIDAsIDQ0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnVmVyaWZ5UmVhZHlEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnQ2FuY2VsJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9DYW5jZWxdJywgdSdCYW5uZXJCaXRtYXAnLCBOb25lKSwKLSh1J1ZlcmlmeVJlYWR5RGxnJywgdSdEZXNjcmlwdGlvbicsIHUnVGV4dCcsIDI1LCAyMywgMjgwLCAxNSwgMTk2NjExLCBOb25lLCB1J1RoZSBbV2l6YXJkXSBpcyByZWFkeSB0byBiZWdpbiB0aGUgW0luc3RhbGxNb2RlXSBpbnN0YWxsYXRpb24nLCBOb25lLCBOb25lKSwKLSh1J1ZlcmlmeVJlYWR5RGxnJywgdSdUaXRsZScsIHUnVGV4dCcsIDE1LCA2LCAyMDAsIDE1LCAxOTY2MTEsIE5vbmUsIHUnW0RsZ1RpdGxlRm9udF1SZWFkeSB0byBJbnN0YWxsJywgTm9uZSwgTm9uZSksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnQmFjaycsIHUnUHVzaEJ1dHRvbicsIDE4MCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfQmFja10nLCB1J0luc3RhbGwnLCBOb25lKSwKLSh1J1ZlcmlmeVJlYWR5RGxnJywgdSdJbnN0YWxsJywgdSdQdXNoQnV0dG9uJywgMjM2LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9JbnN0YWxsXScsIHUnQ2FuY2VsJywgTm9uZSksCi0odSdWZXJpZnlSZW1vdmVEbGcnLCB1J1RleHQnLCB1J1RleHQnLCAyNSwgNzAsIDMyMCwgMzAsIDMsIE5vbmUsIHUnQ2xpY2sgUmVtb3ZlIHRvIHJlbW92ZSBbUHJvZHVjdE5hbWVdIGZyb20geW91ciBjb21wdXRlci4gIElmIHlvdSB3YW50IHRvIHJldmlldyBvciBjaGFuZ2UgYW55IG9mIHlvdXIgaW5zdGFsbGF0aW9uIHNldHRpbmdzLCBjbGljayBCYWNrLiAgQ2xpY2sgQ2FuY2VsIHRvIGV4aXQgdGhlIHdpemFyZC4nLCBOb25lLCBOb25lKSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnQmFubmVyQml0bWFwJywgdSdCaXRtYXAnLCAwLCAwLCAzNzQsIDQ0LCAxLCBOb25lLCB1J1tCYW5uZXJCaXRtYXBdJywgdSdCYWNrJywgTm9uZSksCi0odSdWZXJpZnlSZW1vdmVEbGcnLCB1J0Jhbm5lckxpbmUnLCB1J0xpbmUnLCAwLCA0NCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnQm90dG9tTGluZScsIHUnTGluZScsIDAsIDIzNCwgMzc0LCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnQ2FuY2VsJywgdSdQdXNoQnV0dG9uJywgMzA0LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9DYW5jZWxdJywgdSdCYW5uZXJCaXRtYXAnLCBOb25lKSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnRGVzY3JpcHRpb24nLCB1J1RleHQnLCAyNSwgMjMsIDI4MCwgMTUsIDE5NjYxMSwgTm9uZSwgdSdZb3UgaGF2ZSBjaG9zZW4gdG8gcmVtb3ZlIHRoZSBwcm9ncmFtIGZyb20geW91ciBjb21wdXRlci4nLCBOb25lLCBOb25lKSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnVGl0bGUnLCB1J1RleHQnLCAxNSwgNiwgMjAwLCAxNSwgMTk2NjExLCBOb25lLCB1J1tEbGdUaXRsZUZvbnRdUmVtb3ZlIFtQcm9kdWN0TmFtZV0nLCBOb25lLCBOb25lKSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnQmFjaycsIHUnUHVzaEJ1dHRvbicsIDE4MCwgMjQzLCA1NiwgMTcsIDMsIE5vbmUsIHUnW0J1dHRvblRleHRfQmFja10nLCB1J1JlbW92ZScsIE5vbmUpLAotKHUnVmVyaWZ5UmVtb3ZlRGxnJywgdSdSZW1vdmUnLCB1J1B1c2hCdXR0b24nLCAyMzYsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X1JlbW92ZV0nLCB1J0NhbmNlbCcsIE5vbmUpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdUZXh0JywgdSdUZXh0JywgMjUsIDcwLCAzMjAsIDMwLCAzLCBOb25lLCB1J0NsaWNrIFJlcGFpciB0byByZXBhaXIgdGhlIGluc3RhbGxhdGlvbiBvZiBbUHJvZHVjdE5hbWVdLiAgSWYgeW91IHdhbnQgdG8gcmV2aWV3IG9yIGNoYW5nZSBhbnkgb2YgeW91ciBpbnN0YWxsYXRpb24gc2V0dGluZ3MsIGNsaWNrIEJhY2suICBDbGljayBDYW5jZWwgdG8gZXhpdCB0aGUgd2l6YXJkLicsIE5vbmUsIE5vbmUpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdCYW5uZXJCaXRtYXAnLCB1J0JpdG1hcCcsIDAsIDAsIDM3NCwgNDQsIDEsIE5vbmUsIHUnW0Jhbm5lckJpdG1hcF0nLCB1J0JhY2snLCBOb25lKSwKLSh1J1ZlcmlmeVJlcGFpckRsZycsIHUnQmFubmVyTGluZScsIHUnTGluZScsIDAsIDQ0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdCb3R0b21MaW5lJywgdSdMaW5lJywgMCwgMjM0LCAzNzQsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdDYW5jZWwnLCB1J1B1c2hCdXR0b24nLCAzMDQsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0NhbmNlbF0nLCB1J0Jhbm5lckJpdG1hcCcsIE5vbmUpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdEZXNjcmlwdGlvbicsIHUnVGV4dCcsIDI1LCAyMywgMjgwLCAxNSwgMTk2NjExLCBOb25lLCB1J1RoZSBbV2l6YXJkXSBpcyByZWFkeSB0byBiZWdpbiB0aGUgcmVwYWlyIG9mIFtQcm9kdWN0TmFtZV0uJywgTm9uZSwgTm9uZSksCi0odSdWZXJpZnlSZXBhaXJEbGcnLCB1J1RpdGxlJywgdSdUZXh0JywgMTUsIDYsIDIwMCwgMTUsIDE5NjYxMSwgTm9uZSwgdSdbRGxnVGl0bGVGb250XVJlcGFpciBbUHJvZHVjdE5hbWVdJywgTm9uZSwgTm9uZSksCi0odSdWZXJpZnlSZXBhaXJEbGcnLCB1J0JhY2snLCB1J1B1c2hCdXR0b24nLCAxODAsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0JhY2tdJywgdSdSZXBhaXInLCBOb25lKSwKLSh1J1ZlcmlmeVJlcGFpckRsZycsIHUnUmVwYWlyJywgdSdQdXNoQnV0dG9uJywgMjM2LCAyNDMsIDU2LCAxNywgMywgTm9uZSwgdSdbQnV0dG9uVGV4dF9SZXBhaXJdJywgdSdDYW5jZWwnLCBOb25lKSwKLSh1J1dhaXRGb3JDb3N0aW5nRGxnJywgdSdUZXh0JywgdSdUZXh0JywgNDgsIDE1LCAxOTQsIDMwLCAzLCBOb25lLCB1J1BsZWFzZSB3YWl0IHdoaWxlIHRoZSBpbnN0YWxsZXIgZmluaXNoZXMgZGV0ZXJtaW5pbmcgeW91ciBkaXNrIHNwYWNlIHJlcXVpcmVtZW50cy4nLCBOb25lLCBOb25lKSwKLSh1J1dhaXRGb3JDb3N0aW5nRGxnJywgdSdJY29uJywgdSdJY29uJywgMTUsIDE1LCAyNCwgMjQsIDUyNDI4ODEsIE5vbmUsIHUnW0V4Y2xhbWF0aW9uSWNvbl0nLCBOb25lLCB1J0V4Y2xhbWF0aW9uIGljb258JyksCi0odSdXYWl0Rm9yQ29zdGluZ0RsZycsIHUnUmV0dXJuJywgdSdQdXNoQnV0dG9uJywgMTAyLCA1NywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X1JldHVybl0nLCBOb25lLCBOb25lKSwKLSh1J1dlbGNvbWVEbGcnLCB1J0JpdG1hcCcsIHUnQml0bWFwJywgMCwgMCwgMzcwLCAyMzQsIDEsIE5vbmUsIHUnW0RpYWxvZ0JpdG1hcF0nLCB1J0JhY2snLCBOb25lKSwKLSh1J1dlbGNvbWVEbGcnLCB1J0JvdHRvbUxpbmUnLCB1J0xpbmUnLCAwLCAyMzQsIDM3NCwgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0odSdXZWxjb21lRGxnJywgdSdDYW5jZWwnLCB1J1B1c2hCdXR0b24nLCAzMDQsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X0NhbmNlbF0nLCB1J0JpdG1hcCcsIE5vbmUpLAotKHUnV2VsY29tZURsZycsIHUnRGVzY3JpcHRpb24nLCB1J1RleHQnLCAxMzUsIDcwLCAyMjAsIDMwLCAxOTY2MTEsIE5vbmUsIHUnVGhlIFtXaXphcmRdIHdpbGwgaW5zdGFsbCBbUHJvZHVjdE5hbWVdIG9uIHlvdXIgY29tcHV0ZXIuICBDbGljayBOZXh0IHRvIGNvbnRpbnVlIG9yIENhbmNlbCB0byBleGl0IHRoZSBbV2l6YXJkXS4nLCBOb25lLCBOb25lKSwKLSh1J1dlbGNvbWVEbGcnLCB1J1RpdGxlJywgdSdUZXh0JywgMTM1LCAyMCwgMjIwLCA2MCwgMTk2NjExLCBOb25lLCB1J3tcXFZlcmRhbmFCb2xkMTN9V2VsY29tZSB0byB0aGUgW1Byb2R1Y3ROYW1lXSBbV2l6YXJkXScsIE5vbmUsIE5vbmUpLAotKHUnV2VsY29tZURsZycsIHUnQmFjaycsIHUnUHVzaEJ1dHRvbicsIDE4MCwgMjQzLCA1NiwgMTcsIDEsIE5vbmUsIHUnW0J1dHRvblRleHRfQmFja10nLCB1J05leHQnLCBOb25lKSwKLSh1J1dlbGNvbWVEbGcnLCB1J05leHQnLCB1J1B1c2hCdXR0b24nLCAyMzYsIDI0MywgNTYsIDE3LCAzLCBOb25lLCB1J1tCdXR0b25UZXh0X05leHRdJywgdSdDYW5jZWwnLCBOb25lKSwKLV0KLQotTGlzdEJveCA9IFsKLV0KLQotQWN0aW9uVGV4dCA9IFsKLSh1J0luc3RhbGxWYWxpZGF0ZScsIHUnVmFsaWRhdGluZyBpbnN0YWxsJywgTm9uZSksCi0odSdJbnN0YWxsRmlsZXMnLCB1J0NvcHlpbmcgbmV3IGZpbGVzJywgdSdGaWxlOiBbMV0sICBEaXJlY3Rvcnk6IFs5XSwgIFNpemU6IFs2XScpLAotKHUnSW5zdGFsbEFkbWluUGFja2FnZScsIHUnQ29weWluZyBuZXR3b3JrIGluc3RhbGwgZmlsZXMnLCB1J0ZpbGU6IFsxXSwgRGlyZWN0b3J5OiBbOV0sIFNpemU6IFs2XScpLAotKHUnRmlsZUNvc3QnLCB1J0NvbXB1dGluZyBzcGFjZSByZXF1aXJlbWVudHMnLCBOb25lKSwKLSh1J0Nvc3RJbml0aWFsaXplJywgdSdDb21wdXRpbmcgc3BhY2UgcmVxdWlyZW1lbnRzJywgTm9uZSksCi0odSdDb3N0RmluYWxpemUnLCB1J0NvbXB1dGluZyBzcGFjZSByZXF1aXJlbWVudHMnLCBOb25lKSwKLSh1J0NyZWF0ZVNob3J0Y3V0cycsIHUnQ3JlYXRpbmcgc2hvcnRjdXRzJywgdSdTaG9ydGN1dDogWzFdJyksCi0odSdQdWJsaXNoQ29tcG9uZW50cycsIHUnUHVibGlzaGluZyBRdWFsaWZpZWQgQ29tcG9uZW50cycsIHUnQ29tcG9uZW50IElEOiBbMV0sIFF1YWxpZmllcjogWzJdJyksCi0odSdQdWJsaXNoRmVhdHVyZXMnLCB1J1B1Ymxpc2hpbmcgUHJvZHVjdCBGZWF0dXJlcycsIHUnRmVhdHVyZTogWzFdJyksCi0odSdQdWJsaXNoUHJvZHVjdCcsIHUnUHVibGlzaGluZyBwcm9kdWN0IGluZm9ybWF0aW9uJywgTm9uZSksCi0odSdSZWdpc3RlckNsYXNzSW5mbycsIHUnUmVnaXN0ZXJpbmcgQ2xhc3Mgc2VydmVycycsIHUnQ2xhc3MgSWQ6IFsxXScpLAotKHUnUmVnaXN0ZXJFeHRlbnNpb25JbmZvJywgdSdSZWdpc3RlcmluZyBleHRlbnNpb24gc2VydmVycycsIHUnRXh0ZW5zaW9uOiBbMV0nKSwKLSh1J1JlZ2lzdGVyTUlNRUluZm8nLCB1J1JlZ2lzdGVyaW5nIE1JTUUgaW5mbycsIHUnTUlNRSBDb250ZW50IFR5cGU6IFsxXSwgRXh0ZW5zaW9uOiBbMl0nKSwKLSh1J1JlZ2lzdGVyUHJvZ0lkSW5mbycsIHUnUmVnaXN0ZXJpbmcgcHJvZ3JhbSBpZGVudGlmaWVycycsIHUnUHJvZ0lkOiBbMV0nKSwKLSh1J0FsbG9jYXRlUmVnaXN0cnlTcGFjZScsIHUnQWxsb2NhdGluZyByZWdpc3RyeSBzcGFjZScsIHUnRnJlZSBzcGFjZTogWzFdJyksCi0odSdBcHBTZWFyY2gnLCB1J1NlYXJjaGluZyBmb3IgaW5zdGFsbGVkIGFwcGxpY2F0aW9ucycsIHUnUHJvcGVydHk6IFsxXSwgU2lnbmF0dXJlOiBbMl0nKSwKLSh1J0JpbmRJbWFnZScsIHUnQmluZGluZyBleGVjdXRhYmxlcycsIHUnRmlsZTogWzFdJyksCi0odSdDQ1BTZWFyY2gnLCB1J1NlYXJjaGluZyBmb3IgcXVhbGlmeWluZyBwcm9kdWN0cycsIE5vbmUpLAotKHUnQ3JlYXRlRm9sZGVycycsIHUnQ3JlYXRpbmcgZm9sZGVycycsIHUnRm9sZGVyOiBbMV0nKSwKLSh1J0RlbGV0ZVNlcnZpY2VzJywgdSdEZWxldGluZyBzZXJ2aWNlcycsIHUnU2VydmljZTogWzFdJyksCi0odSdEdXBsaWNhdGVGaWxlcycsIHUnQ3JlYXRpbmcgZHVwbGljYXRlIGZpbGVzJywgdSdGaWxlOiBbMV0sICBEaXJlY3Rvcnk6IFs5XSwgIFNpemU6IFs2XScpLAotKHUnRmluZFJlbGF0ZWRQcm9kdWN0cycsIHUnU2VhcmNoaW5nIGZvciByZWxhdGVkIGFwcGxpY2F0aW9ucycsIHUnRm91bmQgYXBwbGljYXRpb246IFsxXScpLAotKHUnSW5zdGFsbE9EQkMnLCB1J0luc3RhbGxpbmcgT0RCQyBjb21wb25lbnRzJywgTm9uZSksCi0odSdJbnN0YWxsU2VydmljZXMnLCB1J0luc3RhbGxpbmcgbmV3IHNlcnZpY2VzJywgdSdTZXJ2aWNlOiBbMl0nKSwKLSh1J0xhdW5jaENvbmRpdGlvbnMnLCB1J0V2YWx1YXRpbmcgbGF1bmNoIGNvbmRpdGlvbnMnLCBOb25lKSwKLSh1J01pZ3JhdGVGZWF0dXJlU3RhdGVzJywgdSdNaWdyYXRpbmcgZmVhdHVyZSBzdGF0ZXMgZnJvbSByZWxhdGVkIGFwcGxpY2F0aW9ucycsIHUnQXBwbGljYXRpb246IFsxXScpLAotKHUnTW92ZUZpbGVzJywgdSdNb3ZpbmcgZmlsZXMnLCB1J0ZpbGU6IFsxXSwgIERpcmVjdG9yeTogWzldLCAgU2l6ZTogWzZdJyksCi0odSdQYXRjaEZpbGVzJywgdSdQYXRjaGluZyBmaWxlcycsIHUnRmlsZTogWzFdLCAgRGlyZWN0b3J5OiBbMl0sICBTaXplOiBbM10nKSwKLSh1J1Byb2Nlc3NDb21wb25lbnRzJywgdSdVcGRhdGluZyBjb21wb25lbnQgcmVnaXN0cmF0aW9uJywgTm9uZSksCi0odSdSZWdpc3RlckNvbVBsdXMnLCB1J1JlZ2lzdGVyaW5nIENPTSsgQXBwbGljYXRpb25zIGFuZCBDb21wb25lbnRzJywgdSdBcHBJZDogWzFde3ssIEFwcFR5cGU6IFsyXSwgVXNlcnM6IFszXSwgUlNOOiBbNF19fScpLAotKHUnUmVnaXN0ZXJGb250cycsIHUnUmVnaXN0ZXJpbmcgZm9udHMnLCB1J0ZvbnQ6IFsxXScpLAotKHUnUmVnaXN0ZXJQcm9kdWN0JywgdSdSZWdpc3RlcmluZyBwcm9kdWN0JywgdSdbMV0nKSwKLSh1J1JlZ2lzdGVyVHlwZUxpYnJhcmllcycsIHUnUmVnaXN0ZXJpbmcgdHlwZSBsaWJyYXJpZXMnLCB1J0xpYklEOiBbMV0nKSwKLSh1J1JlZ2lzdGVyVXNlcicsIHUnUmVnaXN0ZXJpbmcgdXNlcicsIHUnWzFdJyksCi0odSdSZW1vdmVEdXBsaWNhdGVGaWxlcycsIHUnUmVtb3ZpbmcgZHVwbGljYXRlZCBmaWxlcycsIHUnRmlsZTogWzFdLCBEaXJlY3Rvcnk6IFs5XScpLAotKHUnUmVtb3ZlRW52aXJvbm1lbnRTdHJpbmdzJywgdSdVcGRhdGluZyBlbnZpcm9ubWVudCBzdHJpbmdzJywgdSdOYW1lOiBbMV0sIFZhbHVlOiBbMl0sIEFjdGlvbiBbM10nKSwKLSh1J1JlbW92ZUV4aXN0aW5nUHJvZHVjdHMnLCB1J1JlbW92aW5nIGFwcGxpY2F0aW9ucycsIHUnQXBwbGljYXRpb246IFsxXSwgQ29tbWFuZCBsaW5lOiBbMl0nKSwKLSh1J1JlbW92ZUZpbGVzJywgdSdSZW1vdmluZyBmaWxlcycsIHUnRmlsZTogWzFdLCBEaXJlY3Rvcnk6IFs5XScpLAotKHUnUmVtb3ZlRm9sZGVycycsIHUnUmVtb3ZpbmcgZm9sZGVycycsIHUnRm9sZGVyOiBbMV0nKSwKLSh1J1JlbW92ZUluaVZhbHVlcycsIHUnUmVtb3ZpbmcgSU5JIGZpbGVzIGVudHJpZXMnLCB1J0ZpbGU6IFsxXSwgIFNlY3Rpb246IFsyXSwgIEtleTogWzNdLCBWYWx1ZTogWzRdJyksCi0odSdSZW1vdmVPREJDJywgdSdSZW1vdmluZyBPREJDIGNvbXBvbmVudHMnLCBOb25lKSwKLSh1J1JlbW92ZVJlZ2lzdHJ5VmFsdWVzJywgdSdSZW1vdmluZyBzeXN0ZW0gcmVnaXN0cnkgdmFsdWVzJywgdSdLZXk6IFsxXSwgTmFtZTogWzJdJyksCi0odSdSZW1vdmVTaG9ydGN1dHMnLCB1J1JlbW92aW5nIHNob3J0Y3V0cycsIHUnU2hvcnRjdXQ6IFsxXScpLAotKHUnUk1DQ1BTZWFyY2gnLCB1J1NlYXJjaGluZyBmb3IgcXVhbGlmeWluZyBwcm9kdWN0cycsIE5vbmUpLAotKHUnU2VsZlJlZ01vZHVsZXMnLCB1J1JlZ2lzdGVyaW5nIG1vZHVsZXMnLCB1J0ZpbGU6IFsxXSwgRm9sZGVyOiBbMl0nKSwKLSh1J1NlbGZVbnJlZ01vZHVsZXMnLCB1J1VucmVnaXN0ZXJpbmcgbW9kdWxlcycsIHUnRmlsZTogWzFdLCBGb2xkZXI6IFsyXScpLAotKHUnU2V0T0RCQ0ZvbGRlcnMnLCB1J0luaXRpYWxpemluZyBPREJDIGRpcmVjdG9yaWVzJywgTm9uZSksCi0odSdTdGFydFNlcnZpY2VzJywgdSdTdGFydGluZyBzZXJ2aWNlcycsIHUnU2VydmljZTogWzFdJyksCi0odSdTdG9wU2VydmljZXMnLCB1J1N0b3BwaW5nIHNlcnZpY2VzJywgdSdTZXJ2aWNlOiBbMV0nKSwKLSh1J1VucHVibGlzaENvbXBvbmVudHMnLCB1J1VucHVibGlzaGluZyBRdWFsaWZpZWQgQ29tcG9uZW50cycsIHUnQ29tcG9uZW50IElEOiBbMV0sIFF1YWxpZmllcjogWzJdJyksCi0odSdVbnB1Ymxpc2hGZWF0dXJlcycsIHUnVW5wdWJsaXNoaW5nIFByb2R1Y3QgRmVhdHVyZXMnLCB1J0ZlYXR1cmU6IFsxXScpLAotKHUnVW5yZWdpc3RlckNsYXNzSW5mbycsIHUnVW5yZWdpc3RlciBDbGFzcyBzZXJ2ZXJzJywgdSdDbGFzcyBJZDogWzFdJyksCi0odSdVbnJlZ2lzdGVyQ29tUGx1cycsIHUnVW5yZWdpc3RlcmluZyBDT00rIEFwcGxpY2F0aW9ucyBhbmQgQ29tcG9uZW50cycsIHUnQXBwSWQ6IFsxXXt7LCBBcHBUeXBlOiBbMl19fScpLAotKHUnVW5yZWdpc3RlckV4dGVuc2lvbkluZm8nLCB1J1VucmVnaXN0ZXJpbmcgZXh0ZW5zaW9uIHNlcnZlcnMnLCB1J0V4dGVuc2lvbjogWzFdJyksCi0odSdVbnJlZ2lzdGVyRm9udHMnLCB1J1VucmVnaXN0ZXJpbmcgZm9udHMnLCB1J0ZvbnQ6IFsxXScpLAotKHUnVW5yZWdpc3Rlck1JTUVJbmZvJywgdSdVbnJlZ2lzdGVyaW5nIE1JTUUgaW5mbycsIHUnTUlNRSBDb250ZW50IFR5cGU6IFsxXSwgRXh0ZW5zaW9uOiBbMl0nKSwKLSh1J1VucmVnaXN0ZXJQcm9nSWRJbmZvJywgdSdVbnJlZ2lzdGVyaW5nIHByb2dyYW0gaWRlbnRpZmllcnMnLCB1J1Byb2dJZDogWzFdJyksCi0odSdVbnJlZ2lzdGVyVHlwZUxpYnJhcmllcycsIHUnVW5yZWdpc3RlcmluZyB0eXBlIGxpYnJhcmllcycsIHUnTGliSUQ6IFsxXScpLAotKHUnV3JpdGVFbnZpcm9ubWVudFN0cmluZ3MnLCB1J1VwZGF0aW5nIGVudmlyb25tZW50IHN0cmluZ3MnLCB1J05hbWU6IFsxXSwgVmFsdWU6IFsyXSwgQWN0aW9uIFszXScpLAotKHUnV3JpdGVJbmlWYWx1ZXMnLCB1J1dyaXRpbmcgSU5JIGZpbGVzIHZhbHVlcycsIHUnRmlsZTogWzFdLCAgU2VjdGlvbjogWzJdLCAgS2V5OiBbM10sIFZhbHVlOiBbNF0nKSwKLSh1J1dyaXRlUmVnaXN0cnlWYWx1ZXMnLCB1J1dyaXRpbmcgc3lzdGVtIHJlZ2lzdHJ5IHZhbHVlcycsIHUnS2V5OiBbMV0sIE5hbWU6IFsyXSwgVmFsdWU6IFszXScpLAotKHUnQWR2ZXJ0aXNlJywgdSdBZHZlcnRpc2luZyBhcHBsaWNhdGlvbicsIE5vbmUpLAotKHUnR2VuZXJhdGVTY3JpcHQnLCB1J0dlbmVyYXRpbmcgc2NyaXB0IG9wZXJhdGlvbnMgZm9yIGFjdGlvbjonLCB1J1sxXScpLAotKHUnSW5zdGFsbFNGUENhdGFsb2dGaWxlJywgdSdJbnN0YWxsaW5nIHN5c3RlbSBjYXRhbG9nJywgdSdGaWxlOiBbMV0sICBEZXBlbmRlbmNpZXM6IFsyXScpLAotKHUnTXNpUHVibGlzaEFzc2VtYmxpZXMnLCB1J1B1Ymxpc2hpbmcgYXNzZW1ibHkgaW5mb3JtYXRpb24nLCB1J0FwcGxpY2F0aW9uIENvbnRleHQ6WzFdLCBBc3NlbWJseSBOYW1lOlsyXScpLAotKHUnTXNpVW5wdWJsaXNoQXNzZW1ibGllcycsIHUnVW5wdWJsaXNoaW5nIGFzc2VtYmx5IGluZm9ybWF0aW9uJywgdSdBcHBsaWNhdGlvbiBDb250ZXh0OlsxXSwgQXNzZW1ibHkgTmFtZTpbMl0nKSwKLSh1J1JvbGxiYWNrJywgdSdSb2xsaW5nIGJhY2sgYWN0aW9uOicsIHUnWzFdJyksCi0odSdSb2xsYmFja0NsZWFudXAnLCB1J1JlbW92aW5nIGJhY2t1cCBmaWxlcycsIHUnRmlsZTogWzFdJyksCi0odSdVbm1vdmVGaWxlcycsIHUnUmVtb3ZpbmcgbW92ZWQgZmlsZXMnLCB1J0ZpbGU6IFsxXSwgRGlyZWN0b3J5OiBbOV0nKSwKLSh1J1VucHVibGlzaFByb2R1Y3QnLCB1J1VucHVibGlzaGluZyBwcm9kdWN0IGluZm9ybWF0aW9uJywgTm9uZSksCi1dCi0KLUNvbnRyb2xDb25kaXRpb24gPSBbCi0odSdDdXN0b21pemVEbGcnLCB1J0Jyb3dzZScsIHUnSGlkZScsIHUnSW5zdGFsbGVkJyksCi0odSdDdXN0b21pemVEbGcnLCB1J0xvY2F0aW9uJywgdSdIaWRlJywgdSdJbnN0YWxsZWQnKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnTG9jYXRpb25MYWJlbCcsIHUnSGlkZScsIHUnSW5zdGFsbGVkJyksCi0odSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdSdOZXh0JywgdSdEaXNhYmxlJywgdSdJQWdyZWUgPD4gIlllcyInKSwKLSh1J0xpY2Vuc2VBZ3JlZW1lbnREbGcnLCB1J05leHQnLCB1J0VuYWJsZScsIHUnSUFncmVlID0gIlllcyInKSwKLV0KLQotQ29udHJvbEV2ZW50ID0gWwotKHUnQWRtaW5XZWxjb21lRGxnJywgdSdDYW5jZWwnLCB1J1NwYXduRGlhbG9nJywgdSdDYW5jZWxEbGcnLCB1JzEnLCBOb25lKSwKLSh1J0FkbWluV2VsY29tZURsZycsIHUnTmV4dCcsIHUnTmV3RGlhbG9nJywgdSdBZG1pblJlZ2lzdHJhdGlvbkRsZycsIHUnMScsIDIpLAotKHUnQWRtaW5XZWxjb21lRGxnJywgdSdOZXh0JywgdSdbSW5zdGFsbE1vZGVdJywgdSdTZXJ2ZXIgSW1hZ2UnLCB1JzEnLCAxKSwKLSh1J0V4aXREaWFsb2cnLCB1J0ZpbmlzaCcsIHUnRW5kRGlhbG9nJywgdSdSZXR1cm4nLCB1JzEnLCBOb25lKSwKLSh1J0ZhdGFsRXJyb3InLCB1J0ZpbmlzaCcsIHUnRW5kRGlhbG9nJywgdSdFeGl0JywgdScxJywgTm9uZSksCi0odSdQcmVwYXJlRGxnJywgdSdDYW5jZWwnLCB1J1NwYXduRGlhbG9nJywgdSdDYW5jZWxEbGcnLCB1JzEnLCBOb25lKSwKLSh1J1Byb2dyZXNzRGxnJywgdSdDYW5jZWwnLCB1J1NwYXduRGlhbG9nJywgdSdDYW5jZWxEbGcnLCB1JzEnLCBOb25lKSwKLSh1J1VzZXJFeGl0JywgdSdGaW5pc2gnLCB1J0VuZERpYWxvZycsIHUnRXhpdCcsIHUnMScsIE5vbmUpLAotKHUnQWRtaW5Ccm93c2VEbGcnLCB1J1VwJywgdSdEaXJlY3RvcnlMaXN0VXAnLCB1JzAnLCB1JzEnLCBOb25lKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdDYW5jZWwnLCB1J1Jlc2V0JywgdScwJywgdScxJywgMSksCi0odSdBZG1pbkJyb3dzZURsZycsIHUnQ2FuY2VsJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnMScsIDIpLAotKHUnQWRtaW5Ccm93c2VEbGcnLCB1J05ld0ZvbGRlcicsIHUnRGlyZWN0b3J5TGlzdE5ldycsIHUnMCcsIHUnMScsIE5vbmUpLAotKHUnQWRtaW5Ccm93c2VEbGcnLCB1J09LJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnMScsIDIpLAotKHUnQWRtaW5Ccm93c2VEbGcnLCB1J09LJywgdSdTZXRUYXJnZXRQYXRoJywgdSdUQVJHRVRESVInLCB1JzEnLCAxKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdDYW5jZWwnLCB1J1NwYXduRGlhbG9nJywgdSdDYW5jZWxEbGcnLCB1JzEnLCBOb25lKSwKLSh1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdCYWNrJywgdSdOZXdEaWFsb2cnLCB1J0FkbWluUmVnaXN0cmF0aW9uRGxnJywgdScxJywgTm9uZSksCi0odSdBZG1pbkluc3RhbGxQb2ludERsZycsIHUnTmV4dCcsIHUnU2V0VGFyZ2V0UGF0aCcsIHUnVEFSR0VURElSJywgdScxJywgMSksCi0odSdBZG1pbkluc3RhbGxQb2ludERsZycsIHUnTmV4dCcsIHUnTmV3RGlhbG9nJywgdSdWZXJpZnlSZWFkeURsZycsIHUnMScsIDIpLAotKHUnQWRtaW5JbnN0YWxsUG9pbnREbGcnLCB1J0Jyb3dzZScsIHUnU3Bhd25EaWFsb2cnLCB1J0FkbWluQnJvd3NlRGxnJywgdScxJywgTm9uZSksCi0odSdBZG1pblJlZ2lzdHJhdGlvbkRsZycsIHUnQ2FuY2VsJywgdSdTcGF3bkRpYWxvZycsIHUnQ2FuY2VsRGxnJywgdScxJywgTm9uZSksCi0odSdBZG1pblJlZ2lzdHJhdGlvbkRsZycsIHUnQmFjaycsIHUnTmV3RGlhbG9nJywgdSdBZG1pbldlbGNvbWVEbGcnLCB1JzEnLCBOb25lKSwKLSh1J0FkbWluUmVnaXN0cmF0aW9uRGxnJywgdSdOZXh0JywgdSdOZXdEaWFsb2cnLCB1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdQcm9kdWN0SUQnLCAyKSwKLSh1J0FkbWluUmVnaXN0cmF0aW9uRGxnJywgdSdOZXh0JywgdSdWYWxpZGF0ZVByb2R1Y3RJRCcsIHUnMCcsIHUnMCcsIDEpLAotKHUnQnJvd3NlRGxnJywgdSdVcCcsIHUnRGlyZWN0b3J5TGlzdFVwJywgdScwJywgdScxJywgTm9uZSksCi0odSdCcm93c2VEbGcnLCB1J0NhbmNlbCcsIHUnUmVzZXQnLCB1JzAnLCB1JzEnLCAxKSwKLSh1J0Jyb3dzZURsZycsIHUnQ2FuY2VsJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnMScsIDIpLAotKHUnQnJvd3NlRGxnJywgdSdOZXdGb2xkZXInLCB1J0RpcmVjdG9yeUxpc3ROZXcnLCB1JzAnLCB1JzEnLCBOb25lKSwKLSh1J0Jyb3dzZURsZycsIHUnT0snLCB1J0VuZERpYWxvZycsIHUnUmV0dXJuJywgdScxJywgMiksCi0odSdCcm93c2VEbGcnLCB1J09LJywgdSdTZXRUYXJnZXRQYXRoJywgdSdbX0Jyb3dzZVByb3BlcnR5XScsIHUnMScsIDEpLAotKHUnQ2FuY2VsRGxnJywgdSdObycsIHUnRW5kRGlhbG9nJywgdSdSZXR1cm4nLCB1JzEnLCBOb25lKSwKLSh1J0NhbmNlbERsZycsIHUnWWVzJywgdSdFbmREaWFsb2cnLCB1J0V4aXQnLCB1JzEnLCBOb25lKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnQ2FuY2VsJywgdSdTcGF3bkRpYWxvZycsIHUnQ2FuY2VsRGxnJywgdScxJywgTm9uZSksCi0odSdDdXN0b21pemVEbGcnLCB1J0JhY2snLCB1J05ld0RpYWxvZycsIHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdJbnN0YWxsTW9kZSA9ICJDaGFuZ2UiJywgTm9uZSksCi0odSdDdXN0b21pemVEbGcnLCB1J0JhY2snLCB1J05ld0RpYWxvZycsIHUnU2V0dXBUeXBlRGxnJywgdSdJbnN0YWxsTW9kZSA9ICJDdXN0b20iJywgTm9uZSksCi0odSdDdXN0b21pemVEbGcnLCB1J05leHQnLCB1J05ld0RpYWxvZycsIHUnVmVyaWZ5UmVhZHlEbGcnLCB1JzEnLCBOb25lKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnQnJvd3NlJywgdSdTZWxlY3Rpb25Ccm93c2UnLCB1J0Jyb3dzZURsZycsIHUnMScsIE5vbmUpLAotKHUnQ3VzdG9taXplRGxnJywgdSdSZXNldCcsIHUnUmVzZXQnLCB1JzAnLCB1JzEnLCBOb25lKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnRGlza0Nvc3QnLCB1J1NwYXduRGlhbG9nJywgdSdEaXNrQ29zdERsZycsIHUnMScsIDIpLAotKHUnRGlza0Nvc3REbGcnLCB1J09LJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnMScsIE5vbmUpLAotKHUnRXJyb3JEbGcnLCB1J1knLCB1J0VuZERpYWxvZycsIHUnRXJyb3JZZXMnLCB1JzEnLCBOb25lKSwKLSh1J0Vycm9yRGxnJywgdSdBJywgdSdFbmREaWFsb2cnLCB1J0Vycm9yQWJvcnQnLCB1JzEnLCBOb25lKSwKLSh1J0Vycm9yRGxnJywgdSdDJywgdSdFbmREaWFsb2cnLCB1J0Vycm9yQ2FuY2VsJywgdScxJywgTm9uZSksCi0odSdFcnJvckRsZycsIHUnSScsIHUnRW5kRGlhbG9nJywgdSdFcnJvcklnbm9yZScsIHUnMScsIE5vbmUpLAotKHUnRXJyb3JEbGcnLCB1J04nLCB1J0VuZERpYWxvZycsIHUnRXJyb3JObycsIHUnMScsIE5vbmUpLAotKHUnRXJyb3JEbGcnLCB1J08nLCB1J0VuZERpYWxvZycsIHUnRXJyb3JPaycsIHUnMScsIE5vbmUpLAotKHUnRXJyb3JEbGcnLCB1J1InLCB1J0VuZERpYWxvZycsIHUnRXJyb3JSZXRyeScsIHUnMScsIE5vbmUpLAotKHUnRmlsZXNJblVzZScsIHUnUmV0cnknLCB1J0VuZERpYWxvZycsIHUnUmV0cnknLCB1JzEnLCBOb25lKSwKLSh1J0ZpbGVzSW5Vc2UnLCB1J0V4aXQnLCB1J0VuZERpYWxvZycsIHUnRXhpdCcsIHUnMScsIE5vbmUpLAotKHUnRmlsZXNJblVzZScsIHUnSWdub3JlJywgdSdFbmREaWFsb2cnLCB1J0lnbm9yZScsIHUnMScsIE5vbmUpLAotKHUnTGljZW5zZUFncmVlbWVudERsZycsIHUnQ2FuY2VsJywgdSdTcGF3bkRpYWxvZycsIHUnQ2FuY2VsRGxnJywgdScxJywgTm9uZSksCi0odSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdSdCYWNrJywgdSdOZXdEaWFsb2cnLCB1J1dlbGNvbWVEbGcnLCB1JzEnLCBOb25lKSwKLSh1J0xpY2Vuc2VBZ3JlZW1lbnREbGcnLCB1J05leHQnLCB1J05ld0RpYWxvZycsIHUnU2V0dXBUeXBlRGxnJywgdSdJQWdyZWUgPSAiWWVzIiBBTkQgU2hvd1VzZXJSZWdpc3RyYXRpb25EbGcgPD4gMScsIDMpLAotKHUnTGljZW5zZUFncmVlbWVudERsZycsIHUnTmV4dCcsIHUnTmV3RGlhbG9nJywgdSdVc2VyUmVnaXN0cmF0aW9uRGxnJywgdSdJQWdyZWUgPSAiWWVzIiBBTkQgU2hvd1VzZXJSZWdpc3RyYXRpb25EbGcgPSAxJywgMSksCi0odSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdSdOZXh0JywgdSdTcGF3bldhaXREaWFsb2cnLCB1J1dhaXRGb3JDb3N0aW5nRGxnJywgdSdDb3N0aW5nQ29tcGxldGUgPSAxJywgMiksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J0NhbmNlbCcsIHUnU3Bhd25EaWFsb2cnLCB1J0NhbmNlbERsZycsIHUnMScsIE5vbmUpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdCYWNrJywgdSdOZXdEaWFsb2cnLCB1J01haW50ZW5hbmNlV2VsY29tZURsZycsIHUnMScsIE5vbmUpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdDaGFuZ2VCdXR0b24nLCB1J05ld0RpYWxvZycsIHUnQ3VzdG9taXplRGxnJywgdScxJywgNCksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J0NoYW5nZUJ1dHRvbicsIHUnW0luc3RhbGxNb2RlXScsIHUnQ2hhbmdlJywgdScxJywgMSksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J0NoYW5nZUJ1dHRvbicsIHUnW1Byb2dyZXNzMV0nLCB1J0NoYW5naW5nJywgdScxJywgMiksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J0NoYW5nZUJ1dHRvbicsIHUnW1Byb2dyZXNzMl0nLCB1J2NoYW5nZXMnLCB1JzEnLCAzKSwKLSh1J01haW50ZW5hbmNlVHlwZURsZycsIHUnUmVtb3ZlQnV0dG9uJywgdSdOZXdEaWFsb2cnLCB1J1ZlcmlmeVJlbW92ZURsZycsIHUnMScsIDQpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdSZW1vdmVCdXR0b24nLCB1J1tJbnN0YWxsTW9kZV0nLCB1J1JlbW92ZScsIHUnMScsIDEpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdSZW1vdmVCdXR0b24nLCB1J1tQcm9ncmVzczFdJywgdSdSZW1vdmluZycsIHUnMScsIDIpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdSZW1vdmVCdXR0b24nLCB1J1tQcm9ncmVzczJdJywgdSdyZW1vdmVzJywgdScxJywgMyksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J1JlcGFpckJ1dHRvbicsIHUnTmV3RGlhbG9nJywgdSdWZXJpZnlSZXBhaXJEbGcnLCB1JzEnLCA0KSwKLSh1J01haW50ZW5hbmNlVHlwZURsZycsIHUnUmVwYWlyQnV0dG9uJywgdSdbSW5zdGFsbE1vZGVdJywgdSdSZXBhaXInLCB1JzEnLCAxKSwKLSh1J01haW50ZW5hbmNlVHlwZURsZycsIHUnUmVwYWlyQnV0dG9uJywgdSdbUHJvZ3Jlc3MxXScsIHUnUmVwYWlyaW5nJywgdScxJywgMiksCi0odSdNYWludGVuYW5jZVR5cGVEbGcnLCB1J1JlcGFpckJ1dHRvbicsIHUnW1Byb2dyZXNzMl0nLCB1J3JlcGFpcnMnLCB1JzEnLCAzKSwKLSh1J01haW50ZW5hbmNlV2VsY29tZURsZycsIHUnQ2FuY2VsJywgdSdTcGF3bkRpYWxvZycsIHUnQ2FuY2VsRGxnJywgdScxJywgTm9uZSksCi0odSdNYWludGVuYW5jZVdlbGNvbWVEbGcnLCB1J05leHQnLCB1J05ld0RpYWxvZycsIHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdScxJywgMiksCi0odSdNYWludGVuYW5jZVdlbGNvbWVEbGcnLCB1J05leHQnLCB1J1NwYXduV2FpdERpYWxvZycsIHUnV2FpdEZvckNvc3RpbmdEbGcnLCB1J0Nvc3RpbmdDb21wbGV0ZSA9IDEnLCAxKSwKLSh1J091dE9mRGlza0RsZycsIHUnT0snLCB1J0VuZERpYWxvZycsIHUnUmV0dXJuJywgdScxJywgTm9uZSksCi0odSdPdXRPZlJiRGlza0RsZycsIHUnTm8nLCB1J0VuZERpYWxvZycsIHUnUmV0dXJuJywgdScxJywgTm9uZSksCi0odSdPdXRPZlJiRGlza0RsZycsIHUnWWVzJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnMScsIDIpLAotKHUnT3V0T2ZSYkRpc2tEbGcnLCB1J1llcycsIHUnRW5hYmxlUm9sbGJhY2snLCB1J0ZhbHNlJywgdScxJywgMSksCi0odSdSZXN1bWVEbGcnLCB1J0NhbmNlbCcsIHUnU3Bhd25EaWFsb2cnLCB1J0NhbmNlbERsZycsIHUnMScsIE5vbmUpLAotKHUnUmVzdW1lRGxnJywgdSdJbnN0YWxsJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnT3V0T2ZEaXNrU3BhY2UgPSAxIEFORCBPdXRPZk5vUmJEaXNrU3BhY2UgPSAwIEFORCBQUk9NUFRST0xMQkFDS0NPU1Q9IkQiJywgNCksCi0odSdSZXN1bWVEbGcnLCB1J0luc3RhbGwnLCB1J0VuZERpYWxvZycsIHUnUmV0dXJuJywgdSdPdXRPZkRpc2tTcGFjZSA8PiAxJywgMiksCi0odSdSZXN1bWVEbGcnLCB1J0luc3RhbGwnLCB1J1NwYXduRGlhbG9nJywgdSdPdXRPZkRpc2tEbGcnLCB1JyhPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDEpIE9SIChPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIFBST01QVFJPTExCQUNLQ09TVD0iRiIpJywgNiksCi0odSdSZXN1bWVEbGcnLCB1J0luc3RhbGwnLCB1J1NwYXduRGlhbG9nJywgdSdPdXRPZlJiRGlza0RsZycsIHUnT3V0T2ZEaXNrU3BhY2UgPSAxIEFORCBPdXRPZk5vUmJEaXNrU3BhY2UgPSAwIEFORCAoUFJPTVBUUk9MTEJBQ0tDT1NUPSJQIiBPUiBOT1QgUFJPTVBUUk9MTEJBQ0tDT1NUKScsIDMpLAotKHUnUmVzdW1lRGxnJywgdSdJbnN0YWxsJywgdSdTcGF3bldhaXREaWFsb2cnLCB1J1dhaXRGb3JDb3N0aW5nRGxnJywgdSdDb3N0aW5nQ29tcGxldGUgPSAxJywgMSksCi0odSdSZXN1bWVEbGcnLCB1J0luc3RhbGwnLCB1J0VuYWJsZVJvbGxiYWNrJywgdSdGYWxzZScsIHUnT3V0T2ZEaXNrU3BhY2UgPSAxIEFORCBPdXRPZk5vUmJEaXNrU3BhY2UgPSAwIEFORCBQUk9NUFRST0xMQkFDS0NPU1Q9IkQiJywgNSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J0NhbmNlbCcsIHUnU3Bhd25EaWFsb2cnLCB1J0NhbmNlbERsZycsIHUnMScsIE5vbmUpLAotKHUnU2V0dXBUeXBlRGxnJywgdSdCYWNrJywgdSdOZXdEaWFsb2cnLCB1J0xpY2Vuc2VBZ3JlZW1lbnREbGcnLCB1J1Nob3dVc2VyUmVnaXN0cmF0aW9uRGxnIDw+IDEnLCBOb25lKSwKLSh1J1NldHVwVHlwZURsZycsIHUnQmFjaycsIHUnTmV3RGlhbG9nJywgdSdVc2VyUmVnaXN0cmF0aW9uRGxnJywgdSdTaG93VXNlclJlZ2lzdHJhdGlvbkRsZyA9IDEnLCBOb25lKSwKLSh1J1NldHVwVHlwZURsZycsIHUnQ29tcGxldGVCdXR0b24nLCB1J05ld0RpYWxvZycsIHUnVmVyaWZ5UmVhZHlEbGcnLCB1JzEnLCAzKSwKLSh1J1NldHVwVHlwZURsZycsIHUnQ29tcGxldGVCdXR0b24nLCB1J1tJbnN0YWxsTW9kZV0nLCB1J0NvbXBsZXRlJywgdScxJywgMSksCi0odSdTZXR1cFR5cGVEbGcnLCB1J0NvbXBsZXRlQnV0dG9uJywgdSdTZXRJbnN0YWxsTGV2ZWwnLCB1JzEwMDAnLCB1JzEnLCAyKSwKLSh1J1NldHVwVHlwZURsZycsIHUnQ3VzdG9tQnV0dG9uJywgdSdOZXdEaWFsb2cnLCB1J0N1c3RvbWl6ZURsZycsIHUnMScsIDIpLAotKHUnU2V0dXBUeXBlRGxnJywgdSdDdXN0b21CdXR0b24nLCB1J1tJbnN0YWxsTW9kZV0nLCB1J0N1c3RvbScsIHUnMScsIDEpLAotKHUnU2V0dXBUeXBlRGxnJywgdSdUeXBpY2FsQnV0dG9uJywgdSdOZXdEaWFsb2cnLCB1J1ZlcmlmeVJlYWR5RGxnJywgdScxJywgMyksCi0odSdTZXR1cFR5cGVEbGcnLCB1J1R5cGljYWxCdXR0b24nLCB1J1tJbnN0YWxsTW9kZV0nLCB1J1R5cGljYWwnLCB1JzEnLCAxKSwKLSh1J1NldHVwVHlwZURsZycsIHUnVHlwaWNhbEJ1dHRvbicsIHUnU2V0SW5zdGFsbExldmVsJywgdSczJywgdScxJywgMiksCi0odSdVc2VyUmVnaXN0cmF0aW9uRGxnJywgdSdDYW5jZWwnLCB1J1NwYXduRGlhbG9nJywgdSdDYW5jZWxEbGcnLCB1JzEnLCBOb25lKSwKLSh1J1VzZXJSZWdpc3RyYXRpb25EbGcnLCB1J0JhY2snLCB1J05ld0RpYWxvZycsIHUnTGljZW5zZUFncmVlbWVudERsZycsIHUnMScsIE5vbmUpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIHUnTmV4dCcsIHUnTmV3RGlhbG9nJywgdSdTZXR1cFR5cGVEbGcnLCB1J1Byb2R1Y3RJRCcsIDMpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIHUnTmV4dCcsIHUnVmFsaWRhdGVQcm9kdWN0SUQnLCB1JzAnLCB1JzAnLCAxKSwKLSh1J1VzZXJSZWdpc3RyYXRpb25EbGcnLCB1J05leHQnLCB1J1NwYXduV2FpdERpYWxvZycsIHUnV2FpdEZvckNvc3RpbmdEbGcnLCB1J0Nvc3RpbmdDb21wbGV0ZSA9IDEnLCAyKSwKLSh1J1ZlcmlmeVJlYWR5RGxnJywgdSdDYW5jZWwnLCB1J1NwYXduRGlhbG9nJywgdSdDYW5jZWxEbGcnLCB1JzEnLCBOb25lKSwKLSh1J1ZlcmlmeVJlYWR5RGxnJywgdSdCYWNrJywgdSdOZXdEaWFsb2cnLCB1J0FkbWluSW5zdGFsbFBvaW50RGxnJywgdSdJbnN0YWxsTW9kZSA9ICJTZXJ2ZXIgSW1hZ2UiJywgTm9uZSksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnQmFjaycsIHUnTmV3RGlhbG9nJywgdSdDdXN0b21pemVEbGcnLCB1J0luc3RhbGxNb2RlID0gIkN1c3RvbSIgT1IgSW5zdGFsbE1vZGUgPSAiQ2hhbmdlIicsIE5vbmUpLAotKHUnVmVyaWZ5UmVhZHlEbGcnLCB1J0JhY2snLCB1J05ld0RpYWxvZycsIHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdSdJbnN0YWxsTW9kZSA9ICJSZXBhaXIiJywgTm9uZSksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnQmFjaycsIHUnTmV3RGlhbG9nJywgdSdTZXR1cFR5cGVEbGcnLCB1J0luc3RhbGxNb2RlID0gIlR5cGljYWwiIE9SIEluc3RhbGxNb2RlID0gIkNvbXBsZXRlIicsIE5vbmUpLAotKHUnVmVyaWZ5UmVhZHlEbGcnLCB1J0luc3RhbGwnLCB1J0VuZERpYWxvZycsIHUnUmV0dXJuJywgdSdPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDAgQU5EIFBST01QVFJPTExCQUNLQ09TVD0iRCInLCAzKSwKLSh1J1ZlcmlmeVJlYWR5RGxnJywgdSdJbnN0YWxsJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnT3V0T2ZEaXNrU3BhY2UgPD4gMScsIDEpLAotKHUnVmVyaWZ5UmVhZHlEbGcnLCB1J0luc3RhbGwnLCB1J1NwYXduRGlhbG9nJywgdSdPdXRPZkRpc2tEbGcnLCB1JyhPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDEpIE9SIChPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIFBST01QVFJPTExCQUNLQ09TVD0iRiIpJywgNSksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnSW5zdGFsbCcsIHUnU3Bhd25EaWFsb2cnLCB1J091dE9mUmJEaXNrRGxnJywgdSdPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDAgQU5EIChQUk9NUFRST0xMQkFDS0NPU1Q9IlAiIE9SIE5PVCBQUk9NUFRST0xMQkFDS0NPU1QpJywgMiksCi0odSdWZXJpZnlSZWFkeURsZycsIHUnSW5zdGFsbCcsIHUnRW5hYmxlUm9sbGJhY2snLCB1J0ZhbHNlJywgdSdPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDAgQU5EIFBST01QVFJPTExCQUNLQ09TVD0iRCInLCA0KSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnQ2FuY2VsJywgdSdTcGF3bkRpYWxvZycsIHUnQ2FuY2VsRGxnJywgdScxJywgTm9uZSksCi0odSdWZXJpZnlSZW1vdmVEbGcnLCB1J0JhY2snLCB1J05ld0RpYWxvZycsIHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgdScxJywgTm9uZSksCi0odSdWZXJpZnlSZW1vdmVEbGcnLCB1J1JlbW92ZScsIHUnUmVtb3ZlJywgdSdBbGwnLCB1J091dE9mRGlza1NwYWNlIDw+IDEnLCAxKSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnUmVtb3ZlJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnT3V0T2ZEaXNrU3BhY2UgPSAxIEFORCBPdXRPZk5vUmJEaXNrU3BhY2UgPSAwIEFORCBQUk9NUFRST0xMQkFDS0NPU1Q9IkQiJywgNCksCi0odSdWZXJpZnlSZW1vdmVEbGcnLCB1J1JlbW92ZScsIHUnRW5kRGlhbG9nJywgdSdSZXR1cm4nLCB1J091dE9mRGlza1NwYWNlIDw+IDEnLCAyKSwKLSh1J1ZlcmlmeVJlbW92ZURsZycsIHUnUmVtb3ZlJywgdSdTcGF3bkRpYWxvZycsIHUnT3V0T2ZEaXNrRGxnJywgdScoT3V0T2ZEaXNrU3BhY2UgPSAxIEFORCBPdXRPZk5vUmJEaXNrU3BhY2UgPSAxKSBPUiAoT3V0T2ZEaXNrU3BhY2UgPSAxIEFORCBQUk9NUFRST0xMQkFDS0NPU1Q9IkYiKScsIDYpLAotKHUnVmVyaWZ5UmVtb3ZlRGxnJywgdSdSZW1vdmUnLCB1J1NwYXduRGlhbG9nJywgdSdPdXRPZlJiRGlza0RsZycsIHUnT3V0T2ZEaXNrU3BhY2UgPSAxIEFORCBPdXRPZk5vUmJEaXNrU3BhY2UgPSAwIEFORCAoUFJPTVBUUk9MTEJBQ0tDT1NUPSJQIiBPUiBOT1QgUFJPTVBUUk9MTEJBQ0tDT1NUKScsIDMpLAotKHUnVmVyaWZ5UmVtb3ZlRGxnJywgdSdSZW1vdmUnLCB1J0VuYWJsZVJvbGxiYWNrJywgdSdGYWxzZScsIHUnT3V0T2ZEaXNrU3BhY2UgPSAxIEFORCBPdXRPZk5vUmJEaXNrU3BhY2UgPSAwIEFORCBQUk9NUFRST0xMQkFDS0NPU1Q9IkQiJywgNSksCi0odSdWZXJpZnlSZXBhaXJEbGcnLCB1J0NhbmNlbCcsIHUnU3Bhd25EaWFsb2cnLCB1J0NhbmNlbERsZycsIHUnMScsIE5vbmUpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdCYWNrJywgdSdOZXdEaWFsb2cnLCB1J01haW50ZW5hbmNlVHlwZURsZycsIHUnMScsIE5vbmUpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdSZXBhaXInLCB1J0VuZERpYWxvZycsIHUnUmV0dXJuJywgdSdPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDAgQU5EIFBST01QVFJPTExCQUNLQ09TVD0iRCInLCA1KSwKLSh1J1ZlcmlmeVJlcGFpckRsZycsIHUnUmVwYWlyJywgdSdFbmREaWFsb2cnLCB1J1JldHVybicsIHUnT3V0T2ZEaXNrU3BhY2UgPD4gMScsIDMpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdSZXBhaXInLCB1J1NwYXduRGlhbG9nJywgdSdPdXRPZkRpc2tEbGcnLCB1JyhPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDEpIE9SIChPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIFBST01QVFJPTExCQUNLQ09TVD0iRiIpJywgNyksCi0odSdWZXJpZnlSZXBhaXJEbGcnLCB1J1JlcGFpcicsIHUnU3Bhd25EaWFsb2cnLCB1J091dE9mUmJEaXNrRGxnJywgdSdPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDAgQU5EIChQUk9NUFRST0xMQkFDS0NPU1Q9IlAiIE9SIE5PVCBQUk9NUFRST0xMQkFDS0NPU1QpJywgNCksCi0odSdWZXJpZnlSZXBhaXJEbGcnLCB1J1JlcGFpcicsIHUnRW5hYmxlUm9sbGJhY2snLCB1J0ZhbHNlJywgdSdPdXRPZkRpc2tTcGFjZSA9IDEgQU5EIE91dE9mTm9SYkRpc2tTcGFjZSA9IDAgQU5EIFBST01QVFJPTExCQUNLQ09TVD0iRCInLCA2KSwKLSh1J1ZlcmlmeVJlcGFpckRsZycsIHUnUmVwYWlyJywgdSdSZWluc3RhbGwnLCB1J0FsbCcsIHUnT3V0T2ZEaXNrU3BhY2UgPD4gMScsIDIpLAotKHUnVmVyaWZ5UmVwYWlyRGxnJywgdSdSZXBhaXInLCB1J1JlaW5zdGFsbE1vZGUnLCB1J2VjbXVzJywgdSdPdXRPZkRpc2tTcGFjZSA8PiAxJywgMSksCi0odSdXYWl0Rm9yQ29zdGluZ0RsZycsIHUnUmV0dXJuJywgdSdFbmREaWFsb2cnLCB1J0V4aXQnLCB1JzEnLCBOb25lKSwKLSh1J1dlbGNvbWVEbGcnLCB1J0NhbmNlbCcsIHUnU3Bhd25EaWFsb2cnLCB1J0NhbmNlbERsZycsIHUnMScsIE5vbmUpLAotKHUnV2VsY29tZURsZycsIHUnTmV4dCcsIHUnTmV3RGlhbG9nJywgdSdMaWNlbnNlQWdyZWVtZW50RGxnJywgdScxJywgTm9uZSksCi1dCi0KLURpYWxvZyA9IFsKLSh1J0FkbWluV2VsY29tZURsZycsIDUwLCA1MCwgMzcwLCAyNzAsIDMsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdOZXh0JywgdSdOZXh0JywgdSdDYW5jZWwnKSwKLSh1J0V4aXREaWFsb2cnLCA1MCwgNTAsIDM3MCwgMjcwLCAzLCB1J1tQcm9kdWN0TmFtZV0gW1NldHVwXScsIHUnRmluaXNoJywgdSdGaW5pc2gnLCB1J0ZpbmlzaCcpLAotKHUnRmF0YWxFcnJvcicsIDUwLCA1MCwgMzcwLCAyNzAsIDMsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdGaW5pc2gnLCB1J0ZpbmlzaCcsIHUnRmluaXNoJyksCi0odSdQcmVwYXJlRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMSwgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J0NhbmNlbCcsIHUnQ2FuY2VsJywgdSdDYW5jZWwnKSwKLSh1J1Byb2dyZXNzRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMSwgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J0NhbmNlbCcsIHUnQ2FuY2VsJywgdSdDYW5jZWwnKSwKLSh1J1VzZXJFeGl0JywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J0ZpbmlzaCcsIHUnRmluaXNoJywgdSdGaW5pc2gnKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J1BhdGhFZGl0JywgdSdPSycsIHUnQ2FuY2VsJyksCi0odSdBZG1pbkluc3RhbGxQb2ludERsZycsIDUwLCA1MCwgMzcwLCAyNzAsIDMsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdUZXh0JywgdSdOZXh0JywgdSdDYW5jZWwnKSwKLSh1J0FkbWluUmVnaXN0cmF0aW9uRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J09yZ2FuaXphdGlvbkxhYmVsJywgdSdOZXh0JywgdSdDYW5jZWwnKSwKLSh1J0Jyb3dzZURsZycsIDUwLCA1MCwgMzcwLCAyNzAsIDMsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdQYXRoRWRpdCcsIHUnT0snLCB1J0NhbmNlbCcpLAotKHUnQ2FuY2VsRGxnJywgNTAsIDEwLCAyNjAsIDg1LCAzLCB1J1tQcm9kdWN0TmFtZV0gW1NldHVwXScsIHUnTm8nLCB1J05vJywgdSdObycpLAotKHUnQ3VzdG9taXplRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMzUsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdUcmVlJywgdSdOZXh0JywgdSdDYW5jZWwnKSwKLSh1J0Rpc2tDb3N0RGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J09LJywgdSdPSycsIHUnT0snKSwKLSh1J0Vycm9yRGxnJywgNTAsIDEwLCAyNzAsIDEwNSwgNjU1MzksIHUnSW5zdGFsbGVyIEluZm9ybWF0aW9uJywgdSdFcnJvclRleHQnLCBOb25lLCBOb25lKSwKLSh1J0ZpbGVzSW5Vc2UnLCA1MCwgNTAsIDM3MCwgMjcwLCAxOSwgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J1JldHJ5JywgdSdSZXRyeScsIHUnUmV0cnknKSwKLSh1J0xpY2Vuc2VBZ3JlZW1lbnREbGcnLCA1MCwgNTAsIDM3MCwgMjcwLCAzLCB1J1tQcm9kdWN0TmFtZV0gTGljZW5zZSBBZ3JlZW1lbnQnLCB1J0J1dHRvbnMnLCB1J05leHQnLCB1J0NhbmNlbCcpLAotKHUnTWFpbnRlbmFuY2VUeXBlRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J0NoYW5nZUxhYmVsJywgdSdDaGFuZ2VCdXR0b24nLCB1J0NhbmNlbCcpLAotKHUnTWFpbnRlbmFuY2VXZWxjb21lRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J05leHQnLCB1J05leHQnLCB1J0NhbmNlbCcpLAotKHUnT3V0T2ZEaXNrRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J09LJywgdSdPSycsIHUnT0snKSwKLSh1J091dE9mUmJEaXNrRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J05vJywgdSdObycsIHUnTm8nKSwKLSh1J1Jlc3VtZURsZycsIDUwLCA1MCwgMzcwLCAyNzAsIDMsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdJbnN0YWxsJywgdSdJbnN0YWxsJywgdSdDYW5jZWwnKSwKLSh1J1NldHVwVHlwZURsZycsIDUwLCA1MCwgMzcwLCAyNzAsIDMsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdUeXBpY2FsTGFiZWwnLCB1J1R5cGljYWxCdXR0b24nLCB1J0NhbmNlbCcpLAotKHUnVXNlclJlZ2lzdHJhdGlvbkRsZycsIDUwLCA1MCwgMzcwLCAyNzAsIDMsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdOYW1lTGFiZWwnLCB1J05leHQnLCB1J0NhbmNlbCcpLAotKHUnVmVyaWZ5UmVhZHlEbGcnLCA1MCwgNTAsIDM3MCwgMjcwLCAzNSwgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J0luc3RhbGwnLCB1J0luc3RhbGwnLCB1J0NhbmNlbCcpLAotKHUnVmVyaWZ5UmVtb3ZlRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMzUsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdCYWNrJywgdSdCYWNrJywgdSdDYW5jZWwnKSwKLSh1J1ZlcmlmeVJlcGFpckRsZycsIDUwLCA1MCwgMzcwLCAyNzAsIDM1LCB1J1tQcm9kdWN0TmFtZV0gW1NldHVwXScsIHUnUmVwYWlyJywgdSdSZXBhaXInLCB1J0NhbmNlbCcpLAotKHUnV2FpdEZvckNvc3RpbmdEbGcnLCA1MCwgMTAsIDI2MCwgODUsIDMsIHUnW1Byb2R1Y3ROYW1lXSBbU2V0dXBdJywgdSdSZXR1cm4nLCB1J1JldHVybicsIHUnUmV0dXJuJyksCi0odSdXZWxjb21lRGxnJywgNTAsIDUwLCAzNzAsIDI3MCwgMywgdSdbUHJvZHVjdE5hbWVdIFtTZXR1cF0nLCB1J05leHQnLCB1J05leHQnLCB1J0NhbmNlbCcpLAotXQotCi1FdmVudE1hcHBpbmcgPSBbCi0odSdQcmVwYXJlRGxnJywgdSdBY3Rpb25EYXRhJywgdSdBY3Rpb25EYXRhJywgdSdUZXh0JyksCi0odSdQcmVwYXJlRGxnJywgdSdBY3Rpb25UZXh0JywgdSdBY3Rpb25UZXh0JywgdSdUZXh0JyksCi0odSdQcm9ncmVzc0RsZycsIHUnQWN0aW9uVGV4dCcsIHUnQWN0aW9uVGV4dCcsIHUnVGV4dCcpLAotKHUnUHJvZ3Jlc3NEbGcnLCB1J1Byb2dyZXNzQmFyJywgdSdTZXRQcm9ncmVzcycsIHUnUHJvZ3Jlc3MnKSwKLSh1J0FkbWluQnJvd3NlRGxnJywgdSdEaXJlY3RvcnlDb21ibycsIHUnSWdub3JlQ2hhbmdlJywgdSdJZ25vcmVDaGFuZ2UnKSwKLSh1J0Jyb3dzZURsZycsIHUnRGlyZWN0b3J5Q29tYm8nLCB1J0lnbm9yZUNoYW5nZScsIHUnSWdub3JlQ2hhbmdlJyksCi0odSdDdXN0b21pemVEbGcnLCB1J05leHQnLCB1J1NlbGVjdGlvbk5vSXRlbXMnLCB1J0VuYWJsZWQnKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnUmVzZXQnLCB1J1NlbGVjdGlvbk5vSXRlbXMnLCB1J0VuYWJsZWQnKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnRGlza0Nvc3QnLCB1J1NlbGVjdGlvbk5vSXRlbXMnLCB1J0VuYWJsZWQnKSwKLSh1J0N1c3RvbWl6ZURsZycsIHUnSXRlbURlc2NyaXB0aW9uJywgdSdTZWxlY3Rpb25EZXNjcmlwdGlvbicsIHUnVGV4dCcpLAotKHUnQ3VzdG9taXplRGxnJywgdSdJdGVtU2l6ZScsIHUnU2VsZWN0aW9uU2l6ZScsIHUnVGV4dCcpLAotKHUnQ3VzdG9taXplRGxnJywgdSdMb2NhdGlvbicsIHUnU2VsZWN0aW9uUGF0aCcsIHUnVGV4dCcpLAotKHUnQ3VzdG9taXplRGxnJywgdSdMb2NhdGlvbicsIHUnU2VsZWN0aW9uUGF0aE9uJywgdSdWaXNpYmxlJyksCi0odSdDdXN0b21pemVEbGcnLCB1J0xvY2F0aW9uTGFiZWwnLCB1J1NlbGVjdGlvblBhdGhPbicsIHUnVmlzaWJsZScpLAotXQotCi1JbnN0YWxsRXhlY3V0ZVNlcXVlbmNlID0gWwotKHUnSW5zdGFsbFZhbGlkYXRlJywgTm9uZSwgMTQwMCksCi0odSdJbnN0YWxsSW5pdGlhbGl6ZScsIE5vbmUsIDE1MDApLAotKHUnSW5zdGFsbEZpbmFsaXplJywgTm9uZSwgNjYwMCksCi0odSdJbnN0YWxsRmlsZXMnLCBOb25lLCA0MDAwKSwKLSh1J0ZpbGVDb3N0JywgTm9uZSwgOTAwKSwKLSh1J0Nvc3RJbml0aWFsaXplJywgTm9uZSwgODAwKSwKLSh1J0Nvc3RGaW5hbGl6ZScsIE5vbmUsIDEwMDApLAotKHUnQ3JlYXRlU2hvcnRjdXRzJywgTm9uZSwgNDUwMCksCi0odSdQdWJsaXNoQ29tcG9uZW50cycsIE5vbmUsIDYyMDApLAotKHUnUHVibGlzaEZlYXR1cmVzJywgTm9uZSwgNjMwMCksCi0odSdQdWJsaXNoUHJvZHVjdCcsIE5vbmUsIDY0MDApLAotKHUnUmVnaXN0ZXJDbGFzc0luZm8nLCBOb25lLCA0NjAwKSwKLSh1J1JlZ2lzdGVyRXh0ZW5zaW9uSW5mbycsIE5vbmUsIDQ3MDApLAotKHUnUmVnaXN0ZXJNSU1FSW5mbycsIE5vbmUsIDQ5MDApLAotKHUnUmVnaXN0ZXJQcm9nSWRJbmZvJywgTm9uZSwgNDgwMCksCi0odSdWYWxpZGF0ZVByb2R1Y3RJRCcsIE5vbmUsIDcwMCksCi0odSdBbGxvY2F0ZVJlZ2lzdHJ5U3BhY2UnLCB1J05PVCBJbnN0YWxsZWQnLCAxNTUwKSwKLSh1J0FwcFNlYXJjaCcsIE5vbmUsIDQwMCksCi0odSdCaW5kSW1hZ2UnLCBOb25lLCA0MzAwKSwKLSh1J0NDUFNlYXJjaCcsIHUnTk9UIEluc3RhbGxlZCcsIDUwMCksCi0odSdDcmVhdGVGb2xkZXJzJywgTm9uZSwgMzcwMCksCi0odSdEZWxldGVTZXJ2aWNlcycsIHUnVmVyc2lvbk5UJywgMjAwMCksCi0odSdEdXBsaWNhdGVGaWxlcycsIE5vbmUsIDQyMTApLAotKHUnRmluZFJlbGF0ZWRQcm9kdWN0cycsIE5vbmUsIDIwMCksCi0odSdJbnN0YWxsT0RCQycsIE5vbmUsIDU0MDApLAotKHUnSW5zdGFsbFNlcnZpY2VzJywgdSdWZXJzaW9uTlQnLCA1ODAwKSwKLSh1J0xhdW5jaENvbmRpdGlvbnMnLCBOb25lLCAxMDApLAotKHUnTWlncmF0ZUZlYXR1cmVTdGF0ZXMnLCBOb25lLCAxMjAwKSwKLSh1J01vdmVGaWxlcycsIE5vbmUsIDM4MDApLAotKHUnUGF0Y2hGaWxlcycsIE5vbmUsIDQwOTApLAotKHUnUHJvY2Vzc0NvbXBvbmVudHMnLCBOb25lLCAxNjAwKSwKLSh1J1JlZ2lzdGVyQ29tUGx1cycsIE5vbmUsIDU3MDApLAotKHUnUmVnaXN0ZXJGb250cycsIE5vbmUsIDUzMDApLAotKHUnUmVnaXN0ZXJQcm9kdWN0JywgTm9uZSwgNjEwMCksCi0odSdSZWdpc3RlclR5cGVMaWJyYXJpZXMnLCBOb25lLCA1NTAwKSwKLSh1J1JlZ2lzdGVyVXNlcicsIE5vbmUsIDYwMDApLAotKHUnUmVtb3ZlRHVwbGljYXRlRmlsZXMnLCBOb25lLCAzNDAwKSwKLSh1J1JlbW92ZUVudmlyb25tZW50U3RyaW5ncycsIE5vbmUsIDMzMDApLAotKHUnUmVtb3ZlRXhpc3RpbmdQcm9kdWN0cycsIE5vbmUsIDY3MDApLAotKHUnUmVtb3ZlRmlsZXMnLCBOb25lLCAzNTAwKSwKLSh1J1JlbW92ZUZvbGRlcnMnLCBOb25lLCAzNjAwKSwKLSh1J1JlbW92ZUluaVZhbHVlcycsIE5vbmUsIDMxMDApLAotKHUnUmVtb3ZlT0RCQycsIE5vbmUsIDI0MDApLAotKHUnUmVtb3ZlUmVnaXN0cnlWYWx1ZXMnLCBOb25lLCAyNjAwKSwKLSh1J1JlbW92ZVNob3J0Y3V0cycsIE5vbmUsIDMyMDApLAotKHUnUk1DQ1BTZWFyY2gnLCB1J05PVCBJbnN0YWxsZWQnLCA2MDApLAotKHUnU2VsZlJlZ01vZHVsZXMnLCBOb25lLCA1NjAwKSwKLSh1J1NlbGZVbnJlZ01vZHVsZXMnLCBOb25lLCAyMjAwKSwKLSh1J1NldE9EQkNGb2xkZXJzJywgTm9uZSwgMTEwMCksCi0odSdTdGFydFNlcnZpY2VzJywgdSdWZXJzaW9uTlQnLCA1OTAwKSwKLSh1J1N0b3BTZXJ2aWNlcycsIHUnVmVyc2lvbk5UJywgMTkwMCksCi0odSdVbnB1Ymxpc2hDb21wb25lbnRzJywgTm9uZSwgMTcwMCksCi0odSdVbnB1Ymxpc2hGZWF0dXJlcycsIE5vbmUsIDE4MDApLAotKHUnVW5yZWdpc3RlckNsYXNzSW5mbycsIE5vbmUsIDI3MDApLAotKHUnVW5yZWdpc3RlckNvbVBsdXMnLCBOb25lLCAyMTAwKSwKLSh1J1VucmVnaXN0ZXJFeHRlbnNpb25JbmZvJywgTm9uZSwgMjgwMCksCi0odSdVbnJlZ2lzdGVyRm9udHMnLCBOb25lLCAyNTAwKSwKLSh1J1VucmVnaXN0ZXJNSU1FSW5mbycsIE5vbmUsIDMwMDApLAotKHUnVW5yZWdpc3RlclByb2dJZEluZm8nLCBOb25lLCAyOTAwKSwKLSh1J1VucmVnaXN0ZXJUeXBlTGlicmFyaWVzJywgTm9uZSwgMjMwMCksCi0odSdXcml0ZUVudmlyb25tZW50U3RyaW5ncycsIE5vbmUsIDUyMDApLAotKHUnV3JpdGVJbmlWYWx1ZXMnLCBOb25lLCA1MTAwKSwKLSh1J1dyaXRlUmVnaXN0cnlWYWx1ZXMnLCBOb25lLCA1MDAwKSwKLV0KLQotSW5zdGFsbFVJU2VxdWVuY2UgPSBbCi0jKHUnRmlsZUNvc3QnLCBOb25lLCA5MDApLAotIyh1J0Nvc3RJbml0aWFsaXplJywgTm9uZSwgODAwKSwKLSModSdDb3N0RmluYWxpemUnLCBOb25lLCAxMDAwKSwKLSModSdFeGVjdXRlQWN0aW9uJywgTm9uZSwgMTMwMCksCi0jKHUnRXhpdERpYWxvZycsIE5vbmUsIC0xKSwKLSModSdGYXRhbEVycm9yJywgTm9uZSwgLTMpLAotKHUnUHJlcGFyZURsZycsIE5vbmUsIDE0MCksCi0odSdQcm9ncmVzc0RsZycsIE5vbmUsIDEyODApLAotIyh1J1VzZXJFeGl0JywgTm9uZSwgLTIpLAotKHUnTWFpbnRlbmFuY2VXZWxjb21lRGxnJywgdSdJbnN0YWxsZWQgQU5EIE5PVCBSRVNVTUUgQU5EIE5PVCBQcmVzZWxlY3RlZCcsIDEyNTApLAotKHUnUmVzdW1lRGxnJywgdSdJbnN0YWxsZWQgQU5EIChSRVNVTUUgT1IgUHJlc2VsZWN0ZWQpJywgMTI0MCksCi0odSdXZWxjb21lRGxnJywgdSdOT1QgSW5zdGFsbGVkJywgMTIzMCksCi0jKHUnQXBwU2VhcmNoJywgTm9uZSwgNDAwKSwKLSModSdDQ1BTZWFyY2gnLCB1J05PVCBJbnN0YWxsZWQnLCA1MDApLAotIyh1J0ZpbmRSZWxhdGVkUHJvZHVjdHMnLCBOb25lLCAyMDApLAotIyh1J0xhdW5jaENvbmRpdGlvbnMnLCBOb25lLCAxMDApLAotIyh1J01pZ3JhdGVGZWF0dXJlU3RhdGVzJywgTm9uZSwgMTIwMCksCi0jKHUnUk1DQ1BTZWFyY2gnLCB1J05PVCBJbnN0YWxsZWQnLCA2MDApLAotXQotCi1MaXN0VmlldyA9IFsKLV0KLQotUmFkaW9CdXR0b24gPSBbCi0odSdJQWdyZWUnLCAxLCB1J1llcycsIDUsIDAsIDI1MCwgMTUsIHUne1xcRGxnRm9udDh9SSAmYWNjZXB0IHRoZSB0ZXJtcyBpbiB0aGUgTGljZW5zZSBBZ3JlZW1lbnQnLCBOb25lKSwKLSh1J0lBZ3JlZScsIDIsIHUnTm8nLCA1LCAyMCwgMjUwLCAxNSwgdSd7XFxEbGdGb250OH1JICZkbyBub3QgYWNjZXB0IHRoZSB0ZXJtcyBpbiB0aGUgTGljZW5zZSBBZ3JlZW1lbnQnLCBOb25lKSwKLV0KLQotVGV4dFN0eWxlID0gWwotKHUnRGxnRm9udDgnLCB1J1RhaG9tYScsIDgsIE5vbmUsIDApLAotKHUnRGxnRm9udEJvbGQ4JywgdSdUYWhvbWEnLCA4LCBOb25lLCAxKSwKLSh1J1ZlcmRhbmFCb2xkMTMnLCB1J1ZlcmRhbmEnLCAxMywgTm9uZSwgMSksCi1dCi0KLVVJVGV4dCA9IFsKLSh1J0Fic2VudFBhdGgnLCBOb25lKSwKLSh1J2J5dGVzJywgdSdieXRlcycpLAotKHUnR0InLCB1J0dCJyksCi0odSdLQicsIHUnS0InKSwKLSh1J01CJywgdSdNQicpLAotKHUnTWVudUFic2VudCcsIHUnRW50aXJlIGZlYXR1cmUgd2lsbCBiZSB1bmF2YWlsYWJsZScpLAotKHUnTWVudUFkdmVydGlzZScsIHUnRmVhdHVyZSB3aWxsIGJlIGluc3RhbGxlZCB3aGVuIHJlcXVpcmVkJyksCi0odSdNZW51QWxsQ0QnLCB1J0VudGlyZSBmZWF0dXJlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIHJ1biBmcm9tIENEJyksCi0odSdNZW51QWxsTG9jYWwnLCB1J0VudGlyZSBmZWF0dXJlIHdpbGwgYmUgaW5zdGFsbGVkIG9uIGxvY2FsIGhhcmQgZHJpdmUnKSwKLSh1J01lbnVBbGxOZXR3b3JrJywgdSdFbnRpcmUgZmVhdHVyZSB3aWxsIGJlIGluc3RhbGxlZCB0byBydW4gZnJvbSBuZXR3b3JrJyksCi0odSdNZW51Q0QnLCB1J1dpbGwgYmUgaW5zdGFsbGVkIHRvIHJ1biBmcm9tIENEJyksCi0odSdNZW51TG9jYWwnLCB1J1dpbGwgYmUgaW5zdGFsbGVkIG9uIGxvY2FsIGhhcmQgZHJpdmUnKSwKLSh1J01lbnVOZXR3b3JrJywgdSdXaWxsIGJlIGluc3RhbGxlZCB0byBydW4gZnJvbSBuZXR3b3JrJyksCi0odSdTY3JpcHRJblByb2dyZXNzJywgdSdHYXRoZXJpbmcgcmVxdWlyZWQgaW5mb3JtYXRpb24uLi4nKSwKLSh1J1NlbEFic2VudEFic2VudCcsIHUnVGhpcyBmZWF0dXJlIHdpbGwgcmVtYWluIHVuaW5zdGFsbGVkJyksCi0odSdTZWxBYnNlbnRBZHZlcnRpc2UnLCB1J1RoaXMgZmVhdHVyZSB3aWxsIGJlIHNldCB0byBiZSBpbnN0YWxsZWQgd2hlbiByZXF1aXJlZCcpLAotKHUnU2VsQWJzZW50Q0QnLCB1J1RoaXMgZmVhdHVyZSB3aWxsIGJlIGluc3RhbGxlZCB0byBydW4gZnJvbSBDRCcpLAotKHUnU2VsQWJzZW50TG9jYWwnLCB1J1RoaXMgZmVhdHVyZSB3aWxsIGJlIGluc3RhbGxlZCBvbiB0aGUgbG9jYWwgaGFyZCBkcml2ZScpLAotKHUnU2VsQWJzZW50TmV0d29yaycsIHUnVGhpcyBmZWF0dXJlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIHJ1biBmcm9tIHRoZSBuZXR3b3JrJyksCi0odSdTZWxBZHZlcnRpc2VBYnNlbnQnLCB1J1RoaXMgZmVhdHVyZSB3aWxsIGJlY29tZSB1bmF2YWlsYWJsZScpLAotKHUnU2VsQWR2ZXJ0aXNlQWR2ZXJ0aXNlJywgdSdXaWxsIGJlIGluc3RhbGxlZCB3aGVuIHJlcXVpcmVkJyksCi0odSdTZWxBZHZlcnRpc2VDRCcsIHUnVGhpcyBmZWF0dXJlIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHJ1biBmcm9tIENEJyksCi0odSdTZWxBZHZlcnRpc2VMb2NhbCcsIHUnVGhpcyBmZWF0dXJlIHdpbGwgYmUgaW5zdGFsbGVkIG9uIHlvdXIgbG9jYWwgaGFyZCBkcml2ZScpLAotKHUnU2VsQWR2ZXJ0aXNlTmV0d29yaycsIHUnVGhpcyBmZWF0dXJlIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHJ1biBmcm9tIHRoZSBuZXR3b3JrJyksCi0odSdTZWxDREFic2VudCcsIHUiVGhpcyBmZWF0dXJlIHdpbGwgYmUgdW5pbnN0YWxsZWQgY29tcGxldGVseSwgeW91IHdvbid0IGJlIGFibGUgdG8gcnVuIGl0IGZyb20gQ0QiKSwKLSh1J1NlbENEQWR2ZXJ0aXNlJywgdSdUaGlzIGZlYXR1cmUgd2lsbCBjaGFuZ2UgZnJvbSBydW4gZnJvbSBDRCBzdGF0ZSB0byBzZXQgdG8gYmUgaW5zdGFsbGVkIHdoZW4gcmVxdWlyZWQnKSwKLSh1J1NlbENEQ0QnLCB1J1RoaXMgZmVhdHVyZSB3aWxsIHJlbWFpbiB0byBiZSBydW4gZnJvbSBDRCcpLAotKHUnU2VsQ0RMb2NhbCcsIHUnVGhpcyBmZWF0dXJlIHdpbGwgY2hhbmdlIGZyb20gcnVuIGZyb20gQ0Qgc3RhdGUgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBsb2NhbCBoYXJkIGRyaXZlJyksCi0odSdTZWxDaGlsZENvc3ROZWcnLCB1J1RoaXMgZmVhdHVyZSBmcmVlcyB1cCBbMV0gb24geW91ciBoYXJkIGRyaXZlLicpLAotKHUnU2VsQ2hpbGRDb3N0UG9zJywgdSdUaGlzIGZlYXR1cmUgcmVxdWlyZXMgWzFdIG9uIHlvdXIgaGFyZCBkcml2ZS4nKSwKLSh1J1NlbENvc3RQZW5kaW5nJywgdSdDb21waWxpbmcgY29zdCBmb3IgdGhpcyBmZWF0dXJlLi4uJyksCi0odSdTZWxMb2NhbEFic2VudCcsIHUnVGhpcyBmZWF0dXJlIHdpbGwgYmUgY29tcGxldGVseSByZW1vdmVkJyksCi0odSdTZWxMb2NhbEFkdmVydGlzZScsIHUnVGhpcyBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHlvdXIgbG9jYWwgaGFyZCBkcml2ZSwgYnV0IHdpbGwgYmUgc2V0IHRvIGJlIGluc3RhbGxlZCB3aGVuIHJlcXVpcmVkJyksCi0odSdTZWxMb2NhbENEJywgdSdUaGlzIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGZyb20geW91ciBsb2NhbCBoYXJkIGRyaXZlLCBidXQgd2lsbCBiZSBzdGlsbCBhdmFpbGFibGUgdG8gcnVuIGZyb20gQ0QnKSwKLSh1J1NlbExvY2FsTG9jYWwnLCB1J1RoaXMgZmVhdHVyZSB3aWxsIHJlbWFpbiBvbiB5b3UgbG9jYWwgaGFyZCBkcml2ZScpLAotKHUnU2VsTG9jYWxOZXR3b3JrJywgdSdUaGlzIGZlYXR1cmUgd2lsbCBiZSByZW1vdmVkIGZyb20geW91ciBsb2NhbCBoYXJkIGRyaXZlLCBidXQgd2lsbCBiZSBzdGlsbCBhdmFpbGFibGUgdG8gcnVuIGZyb20gdGhlIG5ldHdvcmsnKSwKLSh1J1NlbE5ldHdvcmtBYnNlbnQnLCB1IlRoaXMgZmVhdHVyZSB3aWxsIGJlIHVuaW5zdGFsbGVkIGNvbXBsZXRlbHksIHlvdSB3b24ndCBiZSBhYmxlIHRvIHJ1biBpdCBmcm9tIHRoZSBuZXR3b3JrIiksCi0odSdTZWxOZXR3b3JrQWR2ZXJ0aXNlJywgdSdUaGlzIGZlYXR1cmUgd2lsbCBjaGFuZ2UgZnJvbSBydW4gZnJvbSBuZXR3b3JrIHN0YXRlIHRvIHNldCB0byBiZSBpbnN0YWxsZWQgd2hlbiByZXF1aXJlZCcpLAotKHUnU2VsTmV0d29ya0xvY2FsJywgdSdUaGlzIGZlYXR1cmUgd2lsbCBjaGFuZ2UgZnJvbSBydW4gZnJvbSBuZXR3b3JrIHN0YXRlIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgbG9jYWwgaGFyZCBkcml2ZScpLAotKHUnU2VsTmV0d29ya05ldHdvcmsnLCB1J1RoaXMgZmVhdHVyZSB3aWxsIHJlbWFpbiB0byBiZSBydW4gZnJvbSB0aGUgbmV0d29yaycpLAotKHUnU2VsUGFyZW50Q29zdE5lZ05lZycsIHUnVGhpcyBmZWF0dXJlIGZyZWVzIHVwIFsxXSBvbiB5b3VyIGhhcmQgZHJpdmUuIEl0IGhhcyBbMl0gb2YgWzNdIHN1YmZlYXR1cmVzIHNlbGVjdGVkLiBUaGUgc3ViZmVhdHVyZXMgZnJlZSB1cCBbNF0gb24geW91ciBoYXJkIGRyaXZlLicpLAotKHUnU2VsUGFyZW50Q29zdE5lZ1BvcycsIHUnVGhpcyBmZWF0dXJlIGZyZWVzIHVwIFsxXSBvbiB5b3VyIGhhcmQgZHJpdmUuIEl0IGhhcyBbMl0gb2YgWzNdIHN1YmZlYXR1cmVzIHNlbGVjdGVkLiBUaGUgc3ViZmVhdHVyZXMgcmVxdWlyZSBbNF0gb24geW91ciBoYXJkIGRyaXZlLicpLAotKHUnU2VsUGFyZW50Q29zdFBvc05lZycsIHUnVGhpcyBmZWF0dXJlIHJlcXVpcmVzIFsxXSBvbiB5b3VyIGhhcmQgZHJpdmUuIEl0IGhhcyBbMl0gb2YgWzNdIHN1YmZlYXR1cmVzIHNlbGVjdGVkLiBUaGUgc3ViZmVhdHVyZXMgZnJlZSB1cCBbNF0gb24geW91ciBoYXJkIGRyaXZlLicpLAotKHUnU2VsUGFyZW50Q29zdFBvc1BvcycsIHUnVGhpcyBmZWF0dXJlIHJlcXVpcmVzIFsxXSBvbiB5b3VyIGhhcmQgZHJpdmUuIEl0IGhhcyBbMl0gb2YgWzNdIHN1YmZlYXR1cmVzIHNlbGVjdGVkLiBUaGUgc3ViZmVhdHVyZXMgcmVxdWlyZSBbNF0gb24geW91ciBoYXJkIGRyaXZlLicpLAotKHUnVGltZVJlbWFpbmluZycsIHUnVGltZSByZW1haW5pbmc6IHtbMV0gbWludXRlcyB9e1syXSBzZWNvbmRzfScpLAotKHUnVm9sdW1lQ29zdEF2YWlsYWJsZScsIHUnQXZhaWxhYmxlJyksCi0odSdWb2x1bWVDb3N0RGlmZmVyZW5jZScsIHUnRGlmZmVyZW5jZScpLAotKHUnVm9sdW1lQ29zdFJlcXVpcmVkJywgdSdSZXF1aXJlZCcpLAotKHUnVm9sdW1lQ29zdFNpemUnLCB1J0Rpc2sgU2l6ZScpLAotKHUnVm9sdW1lQ29zdFZvbHVtZScsIHUnVm9sdW1lJyksCi1dCi0KLV9WYWxpZGF0aW9uID0gWwotKHUnQWRtaW5FeGVjdXRlU2VxdWVuY2UnLCB1J0FjdGlvbicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiBhY3Rpb24gdG8gaW52b2tlLCBlaXRoZXIgaW4gdGhlIGVuZ2luZSBvciB0aGUgaGFuZGxlciBETEwuJyksCi0odSdBZG1pbkV4ZWN1dGVTZXF1ZW5jZScsIHUnU2VxdWVuY2UnLCB1J1knLCAtNCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTnVtYmVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc29ydCBvcmRlciBpbiB3aGljaCB0aGUgYWN0aW9ucyBhcmUgdG8gYmUgZXhlY3V0ZWQuICBMZWF2ZSBibGFuayB0byBzdXBwcmVzcyBhY3Rpb24uJyksCi0odSdBZG1pbkV4ZWN1dGVTZXF1ZW5jZScsIHUnQ29uZGl0aW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb25kaXRpb24nLCBOb25lLCB1J09wdGlvbmFsIGV4cHJlc3Npb24gd2hpY2ggc2tpcHMgdGhlIGFjdGlvbiBpZiBldmFsdWF0ZXMgdG8gZXhwRmFsc2UuSWYgdGhlIGV4cHJlc3Npb24gc3ludGF4IGlzIGludmFsaWQsIHRoZSBlbmdpbmUgd2lsbCB0ZXJtaW5hdGUsIHJldHVybmluZyBpZXNCYWRBY3Rpb25EYXRhLicpLAotKHUnQWRtaW5VSVNlcXVlbmNlJywgdSdBY3Rpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J05hbWUgb2YgYWN0aW9uIHRvIGludm9rZSwgZWl0aGVyIGluIHRoZSBlbmdpbmUgb3IgdGhlIGhhbmRsZXIgRExMLicpLAotKHUnQWRtaW5VSVNlcXVlbmNlJywgdSdTZXF1ZW5jZScsIHUnWScsIC00LCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdOdW1iZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSBzb3J0IG9yZGVyIGluIHdoaWNoIHRoZSBhY3Rpb25zIGFyZSB0byBiZSBleGVjdXRlZC4gIExlYXZlIGJsYW5rIHRvIHN1cHByZXNzIGFjdGlvbi4nKSwKLSh1J0FkbWluVUlTZXF1ZW5jZScsIHUnQ29uZGl0aW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb25kaXRpb24nLCBOb25lLCB1J09wdGlvbmFsIGV4cHJlc3Npb24gd2hpY2ggc2tpcHMgdGhlIGFjdGlvbiBpZiBldmFsdWF0ZXMgdG8gZXhwRmFsc2UuSWYgdGhlIGV4cHJlc3Npb24gc3ludGF4IGlzIGludmFsaWQsIHRoZSBlbmdpbmUgd2lsbCB0ZXJtaW5hdGUsIHJldHVybmluZyBpZXNCYWRBY3Rpb25EYXRhLicpLAotKHUnQ29uZGl0aW9uJywgdSdDb25kaXRpb24nLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsIE5vbmUsIHUnRXhwcmVzc2lvbiBldmFsdWF0ZWQgdG8gZGV0ZXJtaW5lIGlmIExldmVsIGluIHRoZSBGZWF0dXJlIHRhYmxlIGlzIHRvIGNoYW5nZS4nKSwKLSh1J0NvbmRpdGlvbicsIHUnRmVhdHVyZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZlYXR1cmUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlZmVyZW5jZSB0byBhIEZlYXR1cmUgZW50cnkgaW4gRmVhdHVyZSB0YWJsZS4nKSwKLSh1J0NvbmRpdGlvbicsIHUnTGV2ZWwnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdOZXcgc2VsZWN0aW9uIExldmVsIHRvIHNldCBpbiBGZWF0dXJlIHRhYmxlIGlmIENvbmRpdGlvbiBldmFsdWF0ZXMgdG8gVFJVRS4nKSwKLSh1J0FkdnRFeGVjdXRlU2VxdWVuY2UnLCB1J0FjdGlvbicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiBhY3Rpb24gdG8gaW52b2tlLCBlaXRoZXIgaW4gdGhlIGVuZ2luZSBvciB0aGUgaGFuZGxlciBETEwuJyksCi0odSdBZHZ0RXhlY3V0ZVNlcXVlbmNlJywgdSdTZXF1ZW5jZScsIHUnWScsIC00LCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdOdW1iZXIgdGhhdCBkZXRlcm1pbmVzIHRoZSBzb3J0IG9yZGVyIGluIHdoaWNoIHRoZSBhY3Rpb25zIGFyZSB0byBiZSBleGVjdXRlZC4gIExlYXZlIGJsYW5rIHRvIHN1cHByZXNzIGFjdGlvbi4nKSwKLSh1J0FkdnRFeGVjdXRlU2VxdWVuY2UnLCB1J0NvbmRpdGlvbicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQ29uZGl0aW9uJywgTm9uZSwgdSdPcHRpb25hbCBleHByZXNzaW9uIHdoaWNoIHNraXBzIHRoZSBhY3Rpb24gaWYgZXZhbHVhdGVzIHRvIGV4cEZhbHNlLklmIHRoZSBleHByZXNzaW9uIHN5bnRheCBpcyBpbnZhbGlkLCB0aGUgZW5naW5lIHdpbGwgdGVybWluYXRlLCByZXR1cm5pbmcgaWVzQmFkQWN0aW9uRGF0YS4nKSwKLSh1J0JCQ29udHJvbCcsIHUnVHlwZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVGhlIHR5cGUgb2YgdGhlIGNvbnRyb2wuJyksCi0odSdCQkNvbnRyb2wnLCB1J0JCQ29udHJvbCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiB0aGUgY29udHJvbC4gVGhpcyBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGJpbGxib2FyZCwgYnV0IGNhbiByZXBlYXQgb24gZGlmZmVyZW50IGJpbGxib2FyZC4nKSwKLSh1J0JCQ29udHJvbCcsIHUnQmlsbGJvYXJkXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnQmlsbGJvYXJkJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdFeHRlcm5hbCBrZXkgdG8gdGhlIEJpbGxib2FyZCB0YWJsZSwgbmFtZSBvZiB0aGUgYmlsbGJvYXJkLicpLAotKHUnQkJDb250cm9sJywgdSdYJywgdSdOJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSG9yaXpvbnRhbCBjb29yZGluYXRlIG9mIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLicpLAotKHUnQkJDb250cm9sJywgdSdZJywgdSdOJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVmVydGljYWwgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgY29udHJvbC4nKSwKLSh1J0JCQ29udHJvbCcsIHUnV2lkdGgnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdXaWR0aCBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLicpLAotKHUnQkJDb250cm9sJywgdSdIZWlnaHQnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdIZWlnaHQgb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgY29udHJvbC4nKSwKLSh1J0JCQ29udHJvbCcsIHUnQXR0cmlidXRlcycsIHUnWScsIDAsIDIxNDc0ODM2NDcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQSAzMi1iaXQgd29yZCB0aGF0IHNwZWNpZmllcyB0aGUgYXR0cmlidXRlIGZsYWdzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBjb250cm9sLicpLAotKHUnQkJDb250cm9sJywgdSdUZXh0JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdBIHN0cmluZyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB0ZXh0IGNvbnRhaW5lZCB3aXRoaW4gYSBjb250cm9sIChpZiBhcHByb3ByaWF0ZSkuJyksCi0odSdCaWxsYm9hcmQnLCB1J0FjdGlvbicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVGhlIG5hbWUgb2YgYW4gYWN0aW9uLiBUaGUgYmlsbGJvYXJkIGlzIGRpc3BsYXllZCBkdXJpbmcgdGhlIHByb2dyZXNzIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gdGhpcyBhY3Rpb24uJyksCi0odSdCaWxsYm9hcmQnLCB1J0JpbGxib2FyZCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiB0aGUgYmlsbGJvYXJkLicpLAotKHUnQmlsbGJvYXJkJywgdSdGZWF0dXJlXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRmVhdHVyZScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnQW4gZXh0ZXJuYWwga2V5IHRvIHRoZSBGZWF0dXJlIFRhYmxlLiBUaGUgYmlsbGJvYXJkIGlzIHNob3duIG9ubHkgaWYgdGhpcyBmZWF0dXJlIGlzIGJlaW5nIGluc3RhbGxlZC4nKSwKLSh1J0JpbGxib2FyZCcsIHUnT3JkZXJpbmcnLCB1J1knLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIHBvc2l0aXZlIGludGVnZXIuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYmlsbGJvYXJkIGNvcnJlc3BvbmRpbmcgdG8gYW4gYWN0aW9uIHRoZXkgd2lsbCBiZSBzaG93biBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGlzIGNvbHVtbi4nKSwKLSh1J0JpbmFyeScsIHUnTmFtZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVW5pcXVlIGtleSBpZGVudGlmeWluZyB0aGUgYmluYXJ5IGRhdGEuJyksCi0odSdCaW5hcnknLCB1J0RhdGEnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0JpbmFyeScsIE5vbmUsIHUnVGhlIHVuZm9ybWF0dGVkIGJpbmFyeSBkYXRhLicpLAotKHUnQ2hlY2tCb3gnLCB1J1Byb3BlcnR5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdBIG5hbWVkIHByb3BlcnR5IHRvIGJlIHRpZWQgdG8gdGhlIGl0ZW0uJyksCi0odSdDaGVja0JveCcsIHUnVmFsdWUnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVGhlIHZhbHVlIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhlIGl0ZW0uJyksCi0odSdQcm9wZXJ0eScsIHUnUHJvcGVydHknLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J05hbWUgb2YgcHJvcGVydHksIHVwcGVyY2FzZSBpZiBzZXR0YWJsZSBieSBsYXVuY2hlciBvciBsb2FkZXIuJyksCi0odSdQcm9wZXJ0eScsIHUnVmFsdWUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1N0cmluZyB2YWx1ZSBmb3IgcHJvcGVydHkuICBOZXZlciBudWxsIG9yIGVtcHR5LicpLAotKHUnQ29tYm9Cb3gnLCB1J1RleHQnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVGhlIHZpc2libGUgdGV4dCB0byBiZSBhc3NpZ25lZCB0byB0aGUgaXRlbS4gT3B0aW9uYWwuIElmIHRoaXMgZW50cnkgb3IgdGhlIGVudGlyZSBjb2x1bW4gaXMgbWlzc2luZywgdGhlIHRleHQgaXMgdGhlIHNhbWUgYXMgdGhlIHZhbHVlLicpLAotKHUnQ29tYm9Cb3gnLCB1J1Byb3BlcnR5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdBIG5hbWVkIHByb3BlcnR5IHRvIGJlIHRpZWQgdG8gdGhpcyBpdGVtLiBBbGwgdGhlIGl0ZW1zIHRpZWQgdG8gdGhlIHNhbWUgcHJvcGVydHkgYmVjb21lIHBhcnQgb2YgdGhlIHNhbWUgY29tYm9ib3guJyksCi0odSdDb21ib0JveCcsIHUnVmFsdWUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVGhlIHZhbHVlIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpdGVtLiBTZWxlY3RpbmcgdGhlIGxpbmUgd2lsbCBzZXQgdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgdG8gdGhpcyB2YWx1ZS4nKSwKLSh1J0NvbWJvQm94JywgdSdPcmRlcicsIHUnTicsIDEsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgcG9zaXRpdmUgaW50ZWdlciB1c2VkIHRvIGRldGVybWluZSB0aGUgb3JkZXJpbmcgb2YgdGhlIGl0ZW1zIHdpdGhpbiBvbmUgbGlzdC5cdFRoZSBpbnRlZ2VycyBkbyBub3QgaGF2ZSB0byBiZSBjb25zZWN1dGl2ZS4nKSwKLSh1J0NvbnRyb2wnLCB1J1R5cGUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSB0eXBlIG9mIHRoZSBjb250cm9sLicpLAotKHUnQ29udHJvbCcsIHUnWCcsIHUnTicsIDAsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0hvcml6b250YWwgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgY29udHJvbC4nKSwKLSh1J0NvbnRyb2wnLCB1J1knLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdWZXJ0aWNhbCBjb29yZGluYXRlIG9mIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLicpLAotKHUnQ29udHJvbCcsIHUnV2lkdGgnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdXaWR0aCBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLicpLAotKHUnQ29udHJvbCcsIHUnSGVpZ2h0JywgdSdOJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSGVpZ2h0IG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuJyksCi0odSdDb250cm9sJywgdSdBdHRyaWJ1dGVzJywgdSdZJywgMCwgMjE0NzQ4MzY0NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIDMyLWJpdCB3b3JkIHRoYXQgc3BlY2lmaWVzIHRoZSBhdHRyaWJ1dGUgZmxhZ3MgdG8gYmUgYXBwbGllZCB0byB0aGlzIGNvbnRyb2wuJyksCi0odSdDb250cm9sJywgdSdUZXh0JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J0Egc3RyaW5nIHVzZWQgdG8gc2V0IHRoZSBpbml0aWFsIHRleHQgY29udGFpbmVkIHdpdGhpbiBhIGNvbnRyb2wgKGlmIGFwcHJvcHJpYXRlKS4nKSwKLSh1J0NvbnRyb2wnLCB1J1Byb3BlcnR5JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdUaGUgbmFtZSBvZiBhIGRlZmluZWQgcHJvcGVydHkgdG8gYmUgbGlua2VkIHRvIHRoaXMgY29udHJvbC4gJyksCi0odSdDb250cm9sJywgdSdDb250cm9sJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdOYW1lIG9mIHRoZSBjb250cm9sLiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgZGlhbG9nLCBidXQgY2FuIHJlcGVhdCBvbiBkaWZmZXJlbnQgZGlhbG9ncy4gJyksCi0odSdDb250cm9sJywgdSdEaWFsb2dfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdEaWFsb2cnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0V4dGVybmFsIGtleSB0byB0aGUgRGlhbG9nIHRhYmxlLCBuYW1lIG9mIHRoZSBkaWFsb2cuJyksCi0odSdDb250cm9sJywgdSdDb250cm9sX05leHQnLCB1J1knLCBOb25lLCBOb25lLCB1J0NvbnRyb2wnLCAyLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSBuYW1lIG9mIGFuIG90aGVyIGNvbnRyb2wgb24gdGhlIHNhbWUgZGlhbG9nLiBUaGlzIGxpbmsgZGVmaW5lcyB0aGUgdGFiIG9yZGVyIG9mIHRoZSBjb250cm9scy4gVGhlIGxpbmtzIGhhdmUgdG8gZm9ybSBvbmUgb3IgbW9yZSBjeWNsZXMhJyksCi0odSdDb250cm9sJywgdSdIZWxwJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdUaGUgaGVscCBzdHJpbmdzIHVzZWQgd2l0aCB0aGUgYnV0dG9uLiBUaGUgdGV4dCBpcyBvcHRpb25hbC4gJyksCi0odSdJY29uJywgdSdOYW1lJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleS4gTmFtZSBvZiB0aGUgaWNvbiBmaWxlLicpLAotKHUnSWNvbicsIHUnRGF0YScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQmluYXJ5JywgTm9uZSwgdSdCaW5hcnkgc3RyZWFtLiBUaGUgYmluYXJ5IGljb24gZGF0YSBpbiBQRSAoLkRMTCBvciAuRVhFKSBvciBpY29uICguSUNPKSBmb3JtYXQuJyksCi0odSdMaXN0Qm94JywgdSdUZXh0JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdUaGUgdmlzaWJsZSB0ZXh0IHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBpdGVtLiBPcHRpb25hbC4gSWYgdGhpcyBlbnRyeSBvciB0aGUgZW50aXJlIGNvbHVtbiBpcyBtaXNzaW5nLCB0aGUgdGV4dCBpcyB0aGUgc2FtZSBhcyB0aGUgdmFsdWUuJyksCi0odSdMaXN0Qm94JywgdSdQcm9wZXJ0eScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnQSBuYW1lZCBwcm9wZXJ0eSB0byBiZSB0aWVkIHRvIHRoaXMgaXRlbS4gQWxsIHRoZSBpdGVtcyB0aWVkIHRvIHRoZSBzYW1lIHByb3BlcnR5IGJlY29tZSBwYXJ0IG9mIHRoZSBzYW1lIGxpc3Rib3guJyksCi0odSdMaXN0Qm94JywgdSdWYWx1ZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJywgTm9uZSwgdSdUaGUgdmFsdWUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGl0ZW0uIFNlbGVjdGluZyB0aGUgbGluZSB3aWxsIHNldCB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0eSB0byB0aGlzIHZhbHVlLicpLAotKHUnTGlzdEJveCcsIHUnT3JkZXInLCB1J04nLCAxLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIHBvc2l0aXZlIGludGVnZXIgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG9yZGVyaW5nIG9mIHRoZSBpdGVtcyB3aXRoaW4gb25lIGxpc3QuLlRoZSBpbnRlZ2VycyBkbyBub3QgaGF2ZSB0byBiZSBjb25zZWN1dGl2ZS4nKSwKLSh1J0FjdGlvblRleHQnLCB1J0FjdGlvbicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiBhY3Rpb24gdG8gYmUgZGVzY3JpYmVkLicpLAotKHUnQWN0aW9uVGV4dCcsIHUnRGVzY3JpcHRpb24nLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J0xvY2FsaXplZCBkZXNjcmlwdGlvbiBkaXNwbGF5ZWQgaW4gcHJvZ3Jlc3MgZGlhbG9nIGFuZCBsb2cgd2hlbiBhY3Rpb24gaXMgZXhlY3V0aW5nLicpLAotKHUnQWN0aW9uVGV4dCcsIHUnVGVtcGxhdGUnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RlbXBsYXRlJywgTm9uZSwgdSdPcHRpb25hbCBsb2NhbGl6ZWQgZm9ybWF0IHRlbXBsYXRlIHVzZWQgdG8gZm9ybWF0IGFjdGlvbiBkYXRhIHJlY29yZHMgZm9yIGRpc3BsYXkgZHVyaW5nIGFjdGlvbiBleGVjdXRpb24uJyksCi0odSdDb250cm9sQ29uZGl0aW9uJywgdSdBY3Rpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0RlZmF1bHQ7RGlzYWJsZTtFbmFibGU7SGlkZTtTaG93JywgdSdUaGUgZGVzaXJlZCBhY3Rpb24gdG8gYmUgdGFrZW4gb24gdGhlIHNwZWNpZmllZCBjb250cm9sLicpLAotKHUnQ29udHJvbENvbmRpdGlvbicsIHUnQ29uZGl0aW9uJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb25kaXRpb24nLCBOb25lLCB1J0Egc3RhbmRhcmQgY29uZGl0aW9uYWwgc3RhdGVtZW50IHRoYXQgc3BlY2lmaWVzIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgdGhlIGFjdGlvbiBzaG91bGQgYmUgdHJpZ2dlcmVkLicpLAotKHUnQ29udHJvbENvbmRpdGlvbicsIHUnRGlhbG9nXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRGlhbG9nJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdBIGZvcmVpZ24ga2V5IHRvIHRoZSBEaWFsb2cgdGFibGUsIG5hbWUgb2YgdGhlIGRpYWxvZy4nKSwKLSh1J0NvbnRyb2xDb25kaXRpb24nLCB1J0NvbnRyb2xfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb250cm9sJywgMiwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdBIGZvcmVpZ24ga2V5IHRvIHRoZSBDb250cm9sIHRhYmxlLCBuYW1lIG9mIHRoZSBjb250cm9sLicpLAotKHUnQ29udHJvbEV2ZW50JywgdSdDb25kaXRpb24nLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsIE5vbmUsIHUnQSBzdGFuZGFyZCBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGhhdCBzcGVjaWZpZXMgdW5kZXIgd2hpY2ggY29uZGl0aW9ucyBhbiBldmVudCBzaG91bGQgYmUgdHJpZ2dlcmVkLicpLAotKHUnQ29udHJvbEV2ZW50JywgdSdPcmRlcmluZycsIHUnWScsIDAsIDIxNDc0ODM2NDcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQW4gaW50ZWdlciB1c2VkIHRvIG9yZGVyIHNldmVyYWwgZXZlbnRzIHRpZWQgdG8gdGhlIHNhbWUgY29udHJvbC4gQ2FuIGJlIGxlZnQgYmxhbmsuJyksCi0odSdDb250cm9sRXZlbnQnLCB1J0RpYWxvZ18nLCB1J04nLCBOb25lLCBOb25lLCB1J0RpYWxvZycsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnQSBmb3JlaWduIGtleSB0byB0aGUgRGlhbG9nIHRhYmxlLCBuYW1lIG9mIHRoZSBkaWFsb2cuJyksCi0odSdDb250cm9sRXZlbnQnLCB1J0NvbnRyb2xfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb250cm9sJywgMiwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdBIGZvcmVpZ24ga2V5IHRvIHRoZSBDb250cm9sIHRhYmxlLCBuYW1lIG9mIHRoZSBjb250cm9sJyksCi0odSdDb250cm9sRXZlbnQnLCB1J0V2ZW50JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J0FuIGlkZW50aWZpZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIGV2ZW50IHRoYXQgc2hvdWxkIHRha2UgcGxhY2Ugd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBjb250cm9sIHNwZWNpZmllZCBieSB0aGUgZmlyc3QgdHdvIGVudHJpZXMuJyksCi0odSdDb250cm9sRXZlbnQnLCB1J0FyZ3VtZW50JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J0EgdmFsdWUgdG8gYmUgdXNlZCBhcyBhIG1vZGlmaWVyIHdoZW4gdHJpZ2dlcmluZyBhIHBhcnRpY3VsYXIgZXZlbnQuJyksCi0odSdEaWFsb2cnLCB1J1dpZHRoJywgdSdOJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnV2lkdGggb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgZGlhbG9nLicpLAotKHUnRGlhbG9nJywgdSdIZWlnaHQnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdIZWlnaHQgb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgZGlhbG9nLicpLAotKHUnRGlhbG9nJywgdSdBdHRyaWJ1dGVzJywgdSdZJywgMCwgMjE0NzQ4MzY0NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIDMyLWJpdCB3b3JkIHRoYXQgc3BlY2lmaWVzIHRoZSBhdHRyaWJ1dGUgZmxhZ3MgdG8gYmUgYXBwbGllZCB0byB0aGlzIGRpYWxvZy4nKSwKLSh1J0RpYWxvZycsIHUnVGl0bGUnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUiQSB0ZXh0IHN0cmluZyBzcGVjaWZ5aW5nIHRoZSB0aXRsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRpdGxlIGJhciBvZiB0aGUgZGlhbG9nJ3Mgd2luZG93LiIpLAotKHUnRGlhbG9nJywgdSdEaWFsb2cnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J05hbWUgb2YgdGhlIGRpYWxvZy4nKSwKLSh1J0RpYWxvZycsIHUnSENlbnRlcmluZycsIHUnTicsIDAsIDEwMCwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdIb3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cgb24gYSAwLTEwMCBzY2FsZS4gMCBtZWFucyBsZWZ0IGVuZCwgMTAwIG1lYW5zIHJpZ2h0IGVuZCBvZiB0aGUgc2NyZWVuLCA1MCBjZW50ZXIuJyksCi0odSdEaWFsb2cnLCB1J1ZDZW50ZXJpbmcnLCB1J04nLCAwLCAxMDAsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGRpYWxvZyBvbiBhIDAtMTAwIHNjYWxlLiAwIG1lYW5zIHRvcCBlbmQsIDEwMCBtZWFucyBib3R0b20gZW5kIG9mIHRoZSBzY3JlZW4sIDUwIGNlbnRlci4nKSwKLSh1J0RpYWxvZycsIHUnQ29udHJvbF9GaXJzdCcsIHUnTicsIE5vbmUsIE5vbmUsIHUnQ29udHJvbCcsIDIsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRGVmaW5lcyB0aGUgY29udHJvbCB0aGF0IGhhcyB0aGUgZm9jdXMgd2hlbiB0aGUgZGlhbG9nIGlzIGNyZWF0ZWQuJyksCi0odSdEaWFsb2cnLCB1J0NvbnRyb2xfRGVmYXVsdCcsIHUnWScsIE5vbmUsIE5vbmUsIHUnQ29udHJvbCcsIDIsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRGVmaW5lcyB0aGUgZGVmYXVsdCBjb250cm9sLiBIaXR0aW5nIHJldHVybiBpcyBlcXVpdmFsZW50IHRvIHB1c2hpbmcgdGhpcyBidXR0b24uJyksCi0odSdEaWFsb2cnLCB1J0NvbnRyb2xfQ2FuY2VsJywgdSdZJywgTm9uZSwgTm9uZSwgdSdDb250cm9sJywgMiwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdEZWZpbmVzIHRoZSBjYW5jZWwgY29udHJvbC4gSGl0dGluZyBlc2NhcGUgb3IgY2xpY2tpbmcgb24gdGhlIGNsb3NlIGljb24gb24gdGhlIGRpYWxvZyBpcyBlcXVpdmFsZW50IHRvIHB1c2hpbmcgdGhpcyBidXR0b24uJyksCi0odSdFdmVudE1hcHBpbmcnLCB1J0RpYWxvZ18nLCB1J04nLCBOb25lLCBOb25lLCB1J0RpYWxvZycsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnQSBmb3JlaWduIGtleSB0byB0aGUgRGlhbG9nIHRhYmxlLCBuYW1lIG9mIHRoZSBEaWFsb2cuJyksCi0odSdFdmVudE1hcHBpbmcnLCB1J0NvbnRyb2xfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb250cm9sJywgMiwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdBIGZvcmVpZ24ga2V5IHRvIHRoZSBDb250cm9sIHRhYmxlLCBuYW1lIG9mIHRoZSBjb250cm9sLicpLAotKHUnRXZlbnRNYXBwaW5nJywgdSdFdmVudCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnQW4gaWRlbnRpZmllciB0aGF0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgZXZlbnQgdGhhdCB0aGUgY29udHJvbCBzdWJzY3JpYmVzIHRvLicpLAotKHUnRXZlbnRNYXBwaW5nJywgdSdBdHRyaWJ1dGUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSBuYW1lIG9mIHRoZSBjb250cm9sIGF0dHJpYnV0ZSwgdGhhdCBpcyBzZXQgd2hlbiB0aGlzIGV2ZW50IGlzIHJlY2VpdmVkLicpLAotKHUnSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZScsIHUnQWN0aW9uJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdOYW1lIG9mIGFjdGlvbiB0byBpbnZva2UsIGVpdGhlciBpbiB0aGUgZW5naW5lIG9yIHRoZSBoYW5kbGVyIERMTC4nKSwKLSh1J0luc3RhbGxFeGVjdXRlU2VxdWVuY2UnLCB1J1NlcXVlbmNlJywgdSdZJywgLTQsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J051bWJlciB0aGF0IGRldGVybWluZXMgdGhlIHNvcnQgb3JkZXIgaW4gd2hpY2ggdGhlIGFjdGlvbnMgYXJlIHRvIGJlIGV4ZWN1dGVkLiAgTGVhdmUgYmxhbmsgdG8gc3VwcHJlc3MgYWN0aW9uLicpLAotKHUnSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZScsIHUnQ29uZGl0aW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb25kaXRpb24nLCBOb25lLCB1J09wdGlvbmFsIGV4cHJlc3Npb24gd2hpY2ggc2tpcHMgdGhlIGFjdGlvbiBpZiBldmFsdWF0ZXMgdG8gZXhwRmFsc2UuSWYgdGhlIGV4cHJlc3Npb24gc3ludGF4IGlzIGludmFsaWQsIHRoZSBlbmdpbmUgd2lsbCB0ZXJtaW5hdGUsIHJldHVybmluZyBpZXNCYWRBY3Rpb25EYXRhLicpLAotKHUnQXBwU2VhcmNoJywgdSdQcm9wZXJ0eScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVGhlIHByb3BlcnR5IGFzc29jaWF0ZWQgd2l0aCBhIFNpZ25hdHVyZScpLAotKHUnQXBwU2VhcmNoJywgdSdTaWduYXR1cmVfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdTaWduYXR1cmU7UmVnTG9jYXRvcjtJbmlMb2NhdG9yO0RyTG9jYXRvcjtDb21wTG9jYXRvcicsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVGhlIFNpZ25hdHVyZV8gcmVwcmVzZW50cyBhIHVuaXF1ZSBmaWxlIHNpZ25hdHVyZSBhbmQgaXMgYWxzbyB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIFNpZ25hdHVyZSwgIFJlZ0xvY2F0b3IsIEluaUxvY2F0b3IsIENvbXBMb2NhdG9yIGFuZCB0aGUgRHJMb2NhdG9yIHRhYmxlcy4nKSwKLSh1J0JpbmRJbWFnZScsIHUnRmlsZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZpbGUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSBpbmRleCBpbnRvIHRoZSBGaWxlIHRhYmxlLiBUaGlzIG11c3QgYmUgYW4gZXhlY3V0YWJsZSBmaWxlLicpLAotKHUnQmluZEltYWdlJywgdSdQYXRoJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdQYXRocycsIE5vbmUsIHUnQSBsaXN0IG9mIDsgIGRlbGltaXRlZCBwYXRocyB0aGF0IHJlcHJlc2VudCB0aGUgcGF0aHMgdG8gYmUgc2VhcmNoZWQgZm9yIHRoZSBpbXBvcnQgRExMUy4gVGhlIGxpc3QgaXMgdXN1YWxseSBhIGxpc3Qgb2YgcHJvcGVydGllcyBlYWNoIGVuY2xvc2VkIHdpdGhpbiBzcXVhcmUgYnJhY2tldHMgW10gLicpLAotKHUnQ0NQU2VhcmNoJywgdSdTaWduYXR1cmVfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdTaWduYXR1cmU7UmVnTG9jYXRvcjtJbmlMb2NhdG9yO0RyTG9jYXRvcjtDb21wTG9jYXRvcicsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVGhlIFNpZ25hdHVyZV8gcmVwcmVzZW50cyBhIHVuaXF1ZSBmaWxlIHNpZ25hdHVyZSBhbmQgaXMgYWxzbyB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIFNpZ25hdHVyZSwgIFJlZ0xvY2F0b3IsIEluaUxvY2F0b3IsIENvbXBMb2NhdG9yIGFuZCB0aGUgRHJMb2NhdG9yIHRhYmxlcy4nKSwKLSh1J0luc3RhbGxVSVNlcXVlbmNlJywgdSdBY3Rpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J05hbWUgb2YgYWN0aW9uIHRvIGludm9rZSwgZWl0aGVyIGluIHRoZSBlbmdpbmUgb3IgdGhlIGhhbmRsZXIgRExMLicpLAotKHUnSW5zdGFsbFVJU2VxdWVuY2UnLCB1J1NlcXVlbmNlJywgdSdZJywgLTQsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J051bWJlciB0aGF0IGRldGVybWluZXMgdGhlIHNvcnQgb3JkZXIgaW4gd2hpY2ggdGhlIGFjdGlvbnMgYXJlIHRvIGJlIGV4ZWN1dGVkLiAgTGVhdmUgYmxhbmsgdG8gc3VwcHJlc3MgYWN0aW9uLicpLAotKHUnSW5zdGFsbFVJU2VxdWVuY2UnLCB1J0NvbmRpdGlvbicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQ29uZGl0aW9uJywgTm9uZSwgdSdPcHRpb25hbCBleHByZXNzaW9uIHdoaWNoIHNraXBzIHRoZSBhY3Rpb24gaWYgZXZhbHVhdGVzIHRvIGV4cEZhbHNlLklmIHRoZSBleHByZXNzaW9uIHN5bnRheCBpcyBpbnZhbGlkLCB0aGUgZW5naW5lIHdpbGwgdGVybWluYXRlLCByZXR1cm5pbmcgaWVzQmFkQWN0aW9uRGF0YS4nKSwKLSh1J0xpc3RWaWV3JywgdSdUZXh0JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdUaGUgdmlzaWJsZSB0ZXh0IHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBpdGVtLiBPcHRpb25hbC4gSWYgdGhpcyBlbnRyeSBvciB0aGUgZW50aXJlIGNvbHVtbiBpcyBtaXNzaW5nLCB0aGUgdGV4dCBpcyB0aGUgc2FtZSBhcyB0aGUgdmFsdWUuJyksCi0odSdMaXN0VmlldycsIHUnUHJvcGVydHknLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0EgbmFtZWQgcHJvcGVydHkgdG8gYmUgdGllZCB0byB0aGlzIGl0ZW0uIEFsbCB0aGUgaXRlbXMgdGllZCB0byB0aGUgc2FtZSBwcm9wZXJ0eSBiZWNvbWUgcGFydCBvZiB0aGUgc2FtZSBsaXN0dmlldy4nKSwKLSh1J0xpc3RWaWV3JywgdSdWYWx1ZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVGhlIHZhbHVlIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpdGVtLiBTZWxlY3RpbmcgdGhlIGxpbmUgd2lsbCBzZXQgdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgdG8gdGhpcyB2YWx1ZS4nKSwKLSh1J0xpc3RWaWV3JywgdSdPcmRlcicsIHUnTicsIDEsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgcG9zaXRpdmUgaW50ZWdlciB1c2VkIHRvIGRldGVybWluZSB0aGUgb3JkZXJpbmcgb2YgdGhlIGl0ZW1zIHdpdGhpbiBvbmUgbGlzdC4uVGhlIGludGVnZXJzIGRvIG5vdCBoYXZlIHRvIGJlIGNvbnNlY3V0aXZlLicpLAotKHUnTGlzdFZpZXcnLCB1J0JpbmFyeV8nLCB1J1knLCBOb25lLCBOb25lLCB1J0JpbmFyeScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVGhlIG5hbWUgb2YgdGhlIGljb24gdG8gYmUgZGlzcGxheWVkIHdpdGggdGhlIGljb24uIFRoZSBiaW5hcnkgaW5mb3JtYXRpb24gaXMgbG9va2VkIHVwIGZyb20gdGhlIEJpbmFyeSBUYWJsZS4nKSwKLSh1J1JhZGlvQnV0dG9uJywgdSdYJywgdSdOJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgcmFkaW8gYnV0dG9uLicpLAotKHUnUmFkaW9CdXR0b24nLCB1J1knLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgdmVydGljYWwgY29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgcmFkaW8gYnV0dG9uLicpLAotKHUnUmFkaW9CdXR0b24nLCB1J1dpZHRoJywgdSdOJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIHdpZHRoIG9mIHRoZSBidXR0b24uJyksCi0odSdSYWRpb0J1dHRvbicsIHUnSGVpZ2h0JywgdSdOJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGhlaWdodCBvZiB0aGUgYnV0dG9uLicpLAotKHUnUmFkaW9CdXR0b24nLCB1J1RleHQnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1RoZSB2aXNpYmxlIHRpdGxlIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSByYWRpbyBidXR0b24uJyksCi0odSdSYWRpb0J1dHRvbicsIHUnUHJvcGVydHknLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0EgbmFtZWQgcHJvcGVydHkgdG8gYmUgdGllZCB0byB0aGlzIHJhZGlvIGJ1dHRvbi4gQWxsIHRoZSBidXR0b25zIHRpZWQgdG8gdGhlIHNhbWUgcHJvcGVydHkgYmVjb21lIHBhcnQgb2YgdGhlIHNhbWUgZ3JvdXAuJyksCi0odSdSYWRpb0J1dHRvbicsIHUnVmFsdWUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVGhlIHZhbHVlIHN0cmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBidXR0b24uIFNlbGVjdGluZyB0aGUgYnV0dG9uIHdpbGwgc2V0IHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IHRvIHRoaXMgdmFsdWUuJyksCi0odSdSYWRpb0J1dHRvbicsIHUnT3JkZXInLCB1J04nLCAxLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIHBvc2l0aXZlIGludGVnZXIgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG9yZGVyaW5nIG9mIHRoZSBpdGVtcyB3aXRoaW4gb25lIGxpc3QuLlRoZSBpbnRlZ2VycyBkbyBub3QgaGF2ZSB0byBiZSBjb25zZWN1dGl2ZS4nKSwKLSh1J1JhZGlvQnV0dG9uJywgdSdIZWxwJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdUaGUgaGVscCBzdHJpbmdzIHVzZWQgd2l0aCB0aGUgYnV0dG9uLiBUaGUgdGV4dCBpcyBvcHRpb25hbC4nKSwKLSh1J1RleHRTdHlsZScsIHUnVGV4dFN0eWxlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdOYW1lIG9mIHRoZSBzdHlsZS4gVGhlIHByaW1hcnkga2V5IG9mIHRoaXMgdGFibGUuIFRoaXMgbmFtZSBpcyBlbWJlZGRlZCBpbiB0aGUgdGV4dHMgdG8gaW5kaWNhdGUgYSBzdHlsZSBjaGFuZ2UuJyksCi0odSdUZXh0U3R5bGUnLCB1J0ZhY2VOYW1lJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBuYW1lIG9mIHRoZSBmb250IHVzZWQuIFJlcXVpcmVkLiBUaGUgc3RyaW5nIG11c3QgYmUgYXQgbW9zdCAzMSBjaGFyYWN0ZXJzIGxvbmcuJyksCi0odSdUZXh0U3R5bGUnLCB1J1NpemUnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgc2l6ZSBvZiB0aGUgZm9udCB1c2VkLiBUaGlzIHNpemUgaXMgZ2l2ZW4gaW4gb3VyIHVuaXRzICgxLzEyIG9mIHRoZSBzeXN0ZW0gZm9udCBoZWlnaHQpLiBBc3N1bWluZyB0aGF0IHRoZSBzeXN0ZW0gZm9udCBpcyBzZXQgdG8gMTIgcG9pbnQgc2l6ZSwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBwb2ludCBzaXplLicpLAotKHUnVGV4dFN0eWxlJywgdSdDb2xvcicsIHUnWScsIDAsIDE2Nzc3MjE1LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgbG9uZyBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIGNvbG9yIG9mIHRoZSBzdHJpbmcgaW4gdGhlIFJHQiBmb3JtYXQgKFJlZCwgR3JlZW4sIEJsdWUgZWFjaCAwLTI1NSwgUkdCID0gUiArIDI1NipHICsgMjU2XjIqQikuJyksCi0odSdUZXh0U3R5bGUnLCB1J1N0eWxlQml0cycsIHUnWScsIDAsIDE1LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0EgY29tYmluYXRpb24gb2Ygc3R5bGUgYml0cy4nKSwKLSh1J1VJVGV4dCcsIHUnVGV4dCcsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIGxvY2FsaXplZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuJyksCi0odSdVSVRleHQnLCB1J0tleScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnQSB1bmlxdWUga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgcGFydGljdWxhciBzdHJpbmcuJyksCi0odSdfVmFsaWRhdGlvbicsIHUnVGFibGUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J05hbWUgb2YgdGFibGUnKSwKLSh1J19WYWxpZGF0aW9uJywgdSdEZXNjcmlwdGlvbicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnRGVzY3JpcHRpb24gb2YgY29sdW1uJyksCi0odSdfVmFsaWRhdGlvbicsIHUnQ29sdW1uJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdOYW1lIG9mIGNvbHVtbicpLAotKHUnX1ZhbGlkYXRpb24nLCB1J051bGxhYmxlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdZO047QCcsIHUnV2hldGhlciB0aGUgY29sdW1uIGlzIG51bGxhYmxlJyksCi0odSdfVmFsaWRhdGlvbicsIHUnTWluVmFsdWUnLCB1J1knLCAtMjE0NzQ4MzY0NywgMjE0NzQ4MzY0NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdNaW5pbXVtIHZhbHVlIGFsbG93ZWQnKSwKLSh1J19WYWxpZGF0aW9uJywgdSdNYXhWYWx1ZScsIHUnWScsIC0yMTQ3NDgzNjQ3LCAyMTQ3NDgzNjQ3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J01heGltdW0gdmFsdWUgYWxsb3dlZCcpLAotKHUnX1ZhbGlkYXRpb24nLCB1J0tleVRhYmxlJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3IgZm9yZWlnbiBrZXksIE5hbWUgb2YgdGFibGUgdG8gd2hpY2ggZGF0YSBtdXN0IGxpbmsnKSwKLSh1J19WYWxpZGF0aW9uJywgdSdLZXlDb2x1bW4nLCB1J1knLCAxLCAzMiwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb2x1bW4gdG8gd2hpY2ggZm9yZWlnbiBrZXkgY29ubmVjdHMnKSwKLSh1J19WYWxpZGF0aW9uJywgdSdDYXRlZ29yeScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dDtGb3JtYXR0ZWQ7VGVtcGxhdGU7Q29uZGl0aW9uO0d1aWQ7UGF0aDtWZXJzaW9uO0xhbmd1YWdlO0lkZW50aWZpZXI7QmluYXJ5O1VwcGVyQ2FzZTtMb3dlckNhc2U7RmlsZW5hbWU7UGF0aHM7QW55UGF0aDtXaWxkQ2FyZEZpbGVuYW1lO1JlZ1BhdGg7S2V5Rm9ybWF0dGVkO0N1c3RvbVNvdXJjZTtQcm9wZXJ0eTtDYWJpbmV0O1Nob3J0Y3V0O1VSTCcsIHUnU3RyaW5nIGNhdGVnb3J5JyksCi0odSdfVmFsaWRhdGlvbicsIHUnU2V0JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdTZXQgb2YgdmFsdWVzIHRoYXQgYXJlIHBlcm1pdHRlZCcpLAotKHUnQWR2dFVJU2VxdWVuY2UnLCB1J0FjdGlvbicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiBhY3Rpb24gdG8gaW52b2tlLCBlaXRoZXIgaW4gdGhlIGVuZ2luZSBvciB0aGUgaGFuZGxlciBETEwuJyksCi0odSdBZHZ0VUlTZXF1ZW5jZScsIHUnU2VxdWVuY2UnLCB1J1knLCAtNCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTnVtYmVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc29ydCBvcmRlciBpbiB3aGljaCB0aGUgYWN0aW9ucyBhcmUgdG8gYmUgZXhlY3V0ZWQuICBMZWF2ZSBibGFuayB0byBzdXBwcmVzcyBhY3Rpb24uJyksCi0odSdBZHZ0VUlTZXF1ZW5jZScsIHUnQ29uZGl0aW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb25kaXRpb24nLCBOb25lLCB1J09wdGlvbmFsIGV4cHJlc3Npb24gd2hpY2ggc2tpcHMgdGhlIGFjdGlvbiBpZiBldmFsdWF0ZXMgdG8gZXhwRmFsc2UuSWYgdGhlIGV4cHJlc3Npb24gc3ludGF4IGlzIGludmFsaWQsIHRoZSBlbmdpbmUgd2lsbCB0ZXJtaW5hdGUsIHJldHVybmluZyBpZXNCYWRBY3Rpb25EYXRhLicpLAotKHUnQXBwSWQnLCB1J0FwcElkJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdHdWlkJywgTm9uZSwgTm9uZSksCi0odSdBcHBJZCcsIHUnQWN0aXZhdGVBdFN0b3JhZ2UnLCB1J1knLCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKLSh1J0FwcElkJywgdSdEbGxTdXJyb2dhdGUnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCBOb25lKSwKLSh1J0FwcElkJywgdSdMb2NhbFNlcnZpY2UnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCBOb25lKSwKLSh1J0FwcElkJywgdSdSZW1vdGVTZXJ2ZXJOYW1lJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCBOb25lKSwKLSh1J0FwcElkJywgdSdSdW5Bc0ludGVyYWN0aXZlVXNlcicsIHUnWScsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAotKHUnQXBwSWQnLCB1J1NlcnZpY2VQYXJhbWV0ZXJzJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgTm9uZSksCi0odSdGZWF0dXJlJywgdSdBdHRyaWJ1dGVzJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdScwOzE7Mjs0OzU7Njs4Ozk7MTA7MTY7MTc7MTg7MjA7MjE7MjI7MjQ7MjU7MjY7MzI7MzM7MzQ7MzY7Mzc7Mzg7NDg7NDk7NTA7NTI7NTM7NTQnLCB1J0ZlYXR1cmUgYXR0cmlidXRlcycpLAotKHUnRmVhdHVyZScsIHUnRGVzY3JpcHRpb24nLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J0xvbmdlciBkZXNjcmlwdGl2ZSB0ZXh0IGRlc2NyaWJpbmcgYSB2aXNpYmxlIGZlYXR1cmUgaXRlbS4nKSwKLSh1J0ZlYXR1cmUnLCB1J1RpdGxlJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdTaG9ydCB0ZXh0IGlkZW50aWZ5aW5nIGEgdmlzaWJsZSBmZWF0dXJlIGl0ZW0uJyksCi0odSdGZWF0dXJlJywgdSdGZWF0dXJlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSB1c2VkIHRvIGlkZW50aWZ5IGEgcGFydGljdWxhciBmZWF0dXJlIHJlY29yZC4nKSwKLSh1J0ZlYXR1cmUnLCB1J0RpcmVjdG9yeV8nLCB1J1knLCBOb25lLCBOb25lLCB1J0RpcmVjdG9yeScsIDEsIHUnVXBwZXJDYXNlJywgTm9uZSwgdSdUaGUgbmFtZSBvZiB0aGUgRGlyZWN0b3J5IHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgdGhlIFVJLiBBIG5vbi1udWxsIHZhbHVlIHdpbGwgZW5hYmxlIHRoZSBicm93c2UgYnV0dG9uLicpLAotKHUnRmVhdHVyZScsIHUnTGV2ZWwnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgaW5zdGFsbCBsZXZlbCBhdCB3aGljaCByZWNvcmQgd2lsbCBiZSBpbml0aWFsbHkgc2VsZWN0ZWQuIEFuIGluc3RhbGwgbGV2ZWwgb2YgMCB3aWxsIGRpc2FibGUgYW4gaXRlbSBhbmQgcHJldmVudCBpdHMgZGlzcGxheS4nKSwKLSh1J0ZlYXR1cmUnLCB1J0Rpc3BsYXknLCB1J1knLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdOdW1lcmljIHNvcnQgb3JkZXIsIHVzZWQgdG8gZm9yY2UgYSBzcGVjaWZpYyBkaXNwbGF5IG9yZGVyaW5nLicpLAotKHUnRmVhdHVyZScsIHUnRmVhdHVyZV9QYXJlbnQnLCB1J1knLCBOb25lLCBOb25lLCB1J0ZlYXR1cmUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J09wdGlvbmFsIGtleSBvZiBhIHBhcmVudCByZWNvcmQgaW4gdGhlIHNhbWUgdGFibGUuIElmIHRoZSBwYXJlbnQgaXMgbm90IHNlbGVjdGVkLCB0aGVuIHRoZSByZWNvcmQgd2lsbCBub3QgYmUgaW5zdGFsbGVkLiBOdWxsIGluZGljYXRlcyBhIHJvb3QgaXRlbS4nKSwKLSh1J0ZpbGUnLCB1J1NlcXVlbmNlJywgdSdOJywgMSwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnU2VxdWVuY2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBtZWRpYSBpbWFnZXM7IG9yZGVyIG11c3QgdHJhY2sgY2FiaW5ldCBvcmRlci4nKSwKLSh1J0ZpbGUnLCB1J0F0dHJpYnV0ZXMnLCB1J1knLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJbnRlZ2VyIGNvbnRhaW5pbmcgYml0IGZsYWdzIHJlcHJlc2VudGluZyBmaWxlIGF0dHJpYnV0ZXMgKHdpdGggdGhlIGRlY2ltYWwgdmFsdWUgb2YgZWFjaCBiaXQgcG9zaXRpb24gaW4gcGFyZW50aGVzZXMpJyksCi0odSdGaWxlJywgdSdGaWxlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSwgbm9uLWxvY2FsaXplZCB0b2tlbiwgbXVzdCBtYXRjaCBpZGVudGlmaWVyIGluIGNhYmluZXQuICBGb3IgdW5jb21wcmVzc2VkIGZpbGVzLCB0aGlzIGZpZWxkIGlzIGlnbm9yZWQuJyksCi0odSdGaWxlJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIENvbXBvbmVudCB0aGF0IGNvbnRyb2xzIHRoZSBmaWxlLicpLAotKHUnRmlsZScsIHUnRmlsZU5hbWUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ZpbGVuYW1lJywgTm9uZSwgdSdGaWxlIG5hbWUgdXNlZCBmb3IgaW5zdGFsbGF0aW9uLCBtYXkgYmUgbG9jYWxpemVkLiAgVGhpcyBtYXkgY29udGFpbiBhICJzaG9ydCBuYW1lfGxvbmcgbmFtZSIgcGFpci4nKSwKLSh1J0ZpbGUnLCB1J0ZpbGVTaXplJywgdSdOJywgMCwgMjE0NzQ4MzY0NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdTaXplIG9mIGZpbGUgaW4gYnl0ZXMgKGxvbmcgaW50ZWdlcikuJyksCi0odSdGaWxlJywgdSdMYW5ndWFnZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTGFuZ3VhZ2UnLCBOb25lLCB1J0xpc3Qgb2YgZGVjaW1hbCBsYW5ndWFnZSBJZHMsIGNvbW1hLXNlcGFyYXRlZCBpZiBtb3JlIHRoYW4gb25lLicpLAotKHUnRmlsZScsIHUnVmVyc2lvbicsIHUnWScsIE5vbmUsIE5vbmUsIHUnRmlsZScsIDEsIHUnVmVyc2lvbicsIE5vbmUsIHUnVmVyc2lvbiBzdHJpbmcgZm9yIHZlcnNpb25lZCBmaWxlczsgIEJsYW5rIGZvciB1bnZlcnNpb25lZCBmaWxlcy4nKSwKLSh1J0NsYXNzJywgdSdBdHRyaWJ1dGVzJywgdSdZJywgTm9uZSwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQ2xhc3MgcmVnaXN0cmF0aW9uIGF0dHJpYnV0ZXMuJyksCi0odSdDbGFzcycsIHUnRmVhdHVyZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZlYXR1cmUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlcXVpcmVkIGZvcmVpZ24ga2V5IGludG8gdGhlIEZlYXR1cmUgVGFibGUsIHNwZWNpZnlpbmcgdGhlIGZlYXR1cmUgdG8gdmFsaWRhdGUgb3IgaW5zdGFsbCBpbiBvcmRlciBmb3IgdGhlIENMU0lEIGZhY3RvcnkgdG8gYmUgb3BlcmF0aW9uYWwuJyksCi0odSdDbGFzcycsIHUnRGVzY3JpcHRpb24nLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J0xvY2FsaXplZCBkZXNjcmlwdGlvbiBmb3IgdGhlIENsYXNzLicpLAotKHUnQ2xhc3MnLCB1J0FyZ3VtZW50JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J29wdGlvbmFsIGFyZ3VtZW50IGZvciBMb2NhbFNlcnZlcnMuJyksCi0odSdDbGFzcycsIHUnQXBwSWRfJywgdSdZJywgTm9uZSwgTm9uZSwgdSdBcHBJZCcsIDEsIHUnR3VpZCcsIE5vbmUsIHUnT3B0aW9uYWwgQXBwSUQgY29udGFpbmluZyBEQ09NIGluZm9ybWF0aW9uIGZvciBhc3NvY2lhdGVkIGFwcGxpY2F0aW9uIChzdHJpbmcgR1VJRCkuJyksCi0odSdDbGFzcycsIHUnQ0xTSUQnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0d1aWQnLCBOb25lLCB1J1RoZSBDTFNJRCBvZiBhbiBPTEUgZmFjdG9yeS4nKSwKLSh1J0NsYXNzJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlcXVpcmVkIGZvcmVpZ24ga2V5IGludG8gdGhlIENvbXBvbmVudCBUYWJsZSwgc3BlY2lmeWluZyB0aGUgY29tcG9uZW50IGZvciB3aGljaCB0byByZXR1cm4gYSBwYXRoIHdoZW4gY2FsbGVkIHRocm91Z2ggTG9jYXRlQ29tcG9uZW50LicpLAotKHUnQ2xhc3MnLCB1J0NvbnRleHQnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSBudW1lcmljIHNlcnZlciBjb250ZXh0IGZvciB0aGlzIHNlcnZlci4gQ0xTQ1RYX3h4eHgnKSwKLSh1J0NsYXNzJywgdSdEZWZJbnByb2NIYW5kbGVyJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsIHUnMTsyOzMnLCB1J09wdGlvbmFsIGRlZmF1bHQgaW5wcm9jIGhhbmRsZXIuICBPbmx5IG9wdGlvbmFsbHkgcHJvdmlkZWQgaWYgQ29udGV4dD1DTFNDVFhfTE9DQUxfU0VSVkVSLiAgVHlwaWNhbGx5ICJvbGUzMi5kbGwiIG9yICJtYXBpMzIuZGxsIicpLAotKHUnQ2xhc3MnLCB1J0ZpbGVUeXBlTWFzaycsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnT3B0aW9uYWwgc3RyaW5nIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBIS0NSdGhpcyBDTFNJRCkga2V5LiBJZiBtdWx0aXBsZSBwYXR0ZXJucyBleGlzdCwgdGhleSBtdXN0IGJlIGRlbGltaXRlZCBieSBhIHNlbWljb2xvbiwgYW5kIG51bWVyaWMgc3Via2V5cyB3aWxsIGJlIGdlbmVyYXRlZDogMCwxLDIuLi4nKSwKLSh1J0NsYXNzJywgdSdJY29uXycsIHUnWScsIE5vbmUsIE5vbmUsIHUnSWNvbicsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnT3B0aW9uYWwgZm9yZWlnbiBrZXkgaW50byB0aGUgSWNvbiBUYWJsZSwgc3BlY2lmeWluZyB0aGUgaWNvbiBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIENMU0lELiBXaWxsIGJlIHdyaXR0ZW4gdW5kZXIgdGhlIERlZmF1bHRJY29uIGtleS4nKSwKLSh1J0NsYXNzJywgdSdJY29uSW5kZXgnLCB1J1knLCAtMzI3NjcsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J09wdGlvbmFsIGljb24gaW5kZXguJyksCi0odSdDbGFzcycsIHUnUHJvZ0lkX0RlZmF1bHQnLCB1J1knLCBOb25lLCBOb25lLCB1J1Byb2dJZCcsIDEsIHUnVGV4dCcsIE5vbmUsIHUnT3B0aW9uYWwgUHJvZ0lkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIENMU0lELicpLAotKHUnQ29tcG9uZW50JywgdSdDb25kaXRpb24nLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsIE5vbmUsIHUiQSBjb25kaXRpb25hbCBzdGF0ZW1lbnQgdGhhdCB3aWxsIGRpc2FibGUgdGhpcyBjb21wb25lbnQgaWYgdGhlIHNwZWNpZmllZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRoZSAnVHJ1ZScgc3RhdGUuIElmIGEgY29tcG9uZW50IGlzIGRpc2FibGVkLCBpdCB3aWxsIG5vdCBiZSBpbnN0YWxsZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlICdBY3Rpb24nIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50LiIpLAotKHUnQ29tcG9uZW50JywgdSdBdHRyaWJ1dGVzJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdSZW1vdGUgZXhlY3V0aW9uIG9wdGlvbiwgb25lIG9mIGlyc0VudW0nKSwKLSh1J0NvbXBvbmVudCcsIHUnQ29tcG9uZW50JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSB1c2VkIHRvIGlkZW50aWZ5IGEgcGFydGljdWxhciBjb21wb25lbnQgcmVjb3JkLicpLAotKHUnQ29tcG9uZW50JywgdSdDb21wb25lbnRJZCcsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnR3VpZCcsIE5vbmUsIHUnQSBzdHJpbmcgR1VJRCB1bmlxdWUgdG8gdGhpcyBjb21wb25lbnQsIHZlcnNpb24sIGFuZCBsYW5ndWFnZS4nKSwKLSh1J0NvbXBvbmVudCcsIHUnRGlyZWN0b3J5XycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRGlyZWN0b3J5JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdSZXF1aXJlZCBrZXkgb2YgYSBEaXJlY3RvcnkgdGFibGUgcmVjb3JkLiBUaGlzIGlzIGFjdHVhbGx5IGEgcHJvcGVydHkgbmFtZSB3aG9zZSB2YWx1ZSBjb250YWlucyB0aGUgYWN0dWFsIHBhdGgsIHNldCBlaXRoZXIgYnkgdGhlIEFwcFNlYXJjaCBhY3Rpb24gb3Igd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9idGFpbmVkIGZyb20gdGhlIERpcmVjdG9yeSB0YWJsZS4nKSwKLSh1J0NvbXBvbmVudCcsIHUnS2V5UGF0aCcsIHUnWScsIE5vbmUsIE5vbmUsIHUnRmlsZTtSZWdpc3RyeTtPREJDRGF0YVNvdXJjZScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRWl0aGVyIHRoZSBwcmltYXJ5IGtleSBpbnRvIHRoZSBGaWxlIHRhYmxlLCBSZWdpc3RyeSB0YWJsZSwgb3IgT0RCQ0RhdGFTb3VyY2UgdGFibGUuIFRoaXMgZXh0cmFjdCBwYXRoIGlzIHN0b3JlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5zdGFsbGVkLCBhbmQgaXMgdXNlZCB0byBkZXRlY3QgdGhlIHByZXNlbmNlIG9mIHRoZSBjb21wb25lbnQgYW5kIHRvIHJldHVybiB0aGUgcGF0aCB0byBpdC4nKSwKLSh1J1Byb2dJZCcsIHUnRGVzY3JpcHRpb24nLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J0xvY2FsaXplZCBkZXNjcmlwdGlvbiBmb3IgdGhlIFByb2dyYW0gaWRlbnRpZmllci4nKSwKLSh1J1Byb2dJZCcsIHUnSWNvbl8nLCB1J1knLCBOb25lLCBOb25lLCB1J0ljb24nLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J09wdGlvbmFsIGZvcmVpZ24ga2V5IGludG8gdGhlIEljb24gVGFibGUsIHNwZWNpZnlpbmcgdGhlIGljb24gZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBQcm9nSWQuIFdpbGwgYmUgd3JpdHRlbiB1bmRlciB0aGUgRGVmYXVsdEljb24ga2V5LicpLAotKHUnUHJvZ0lkJywgdSdJY29uSW5kZXgnLCB1J1knLCAtMzI3NjcsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J09wdGlvbmFsIGljb24gaW5kZXguJyksCi0odSdQcm9nSWQnLCB1J1Byb2dJZCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIFByb2dyYW0gSWRlbnRpZmllci4gUHJpbWFyeSBrZXkuJyksCi0odSdQcm9nSWQnLCB1J0NsYXNzXycsIHUnWScsIE5vbmUsIE5vbmUsIHUnQ2xhc3MnLCAxLCB1J0d1aWQnLCBOb25lLCB1J1RoZSBDTFNJRCBvZiBhbiBPTEUgZmFjdG9yeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBQcm9nSWQuJyksCi0odSdQcm9nSWQnLCB1J1Byb2dJZF9QYXJlbnQnLCB1J1knLCBOb25lLCBOb25lLCB1J1Byb2dJZCcsIDEsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIFBhcmVudCBQcm9ncmFtIElkZW50aWZpZXIuIElmIHNwZWNpZmllZCwgdGhlIFByb2dJZCBjb2x1bW4gYmVjb21lcyBhIHZlcnNpb24gaW5kZXBlbmRlbnQgcHJvZyBpZC4nKSwKLSh1J0NvbXBMb2NhdG9yJywgdSdUeXBlJywgdSdZJywgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdBIGJvb2xlYW4gdmFsdWUgdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSByZWdpc3RyeSB2YWx1ZSBpcyBhIGZpbGVuYW1lIG9yIGEgZGlyZWN0b3J5IGxvY2F0aW9uLicpLAotKHUnQ29tcExvY2F0b3InLCB1J1NpZ25hdHVyZV8nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSB0YWJsZSBrZXkuIFRoZSBTaWduYXR1cmVfIHJlcHJlc2VudHMgYSB1bmlxdWUgZmlsZSBzaWduYXR1cmUgYW5kIGlzIGFsc28gdGhlIGZvcmVpZ24ga2V5IGluIHRoZSBTaWduYXR1cmUgdGFibGUuJyksCi0odSdDb21wTG9jYXRvcicsIHUnQ29tcG9uZW50SWQnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0d1aWQnLCBOb25lLCB1J0Egc3RyaW5nIEdVSUQgdW5pcXVlIHRvIHRoaXMgY29tcG9uZW50LCB2ZXJzaW9uLCBhbmQgbGFuZ3VhZ2UuJyksCi0odSdDb21wbHVzJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIENvbXBvbmVudCB0aGF0IGNvbnRyb2xzIHRoZSBDb21QbHVzIGNvbXBvbmVudC4nKSwKLSh1J0NvbXBsdXMnLCB1J0V4cFR5cGUnLCB1J1knLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdDb21QbHVzIGNvbXBvbmVudCBhdHRyaWJ1dGVzLicpLAotKHUnRGlyZWN0b3J5JywgdSdEaXJlY3RvcnknLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1VuaXF1ZSBpZGVudGlmaWVyIGZvciBkaXJlY3RvcnkgZW50cnksIHByaW1hcnkga2V5LiBJZiBhIHByb3BlcnR5IGJ5IHRoaXMgbmFtZSBpcyBkZWZpbmVkLCBpdCBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkuJyksCi0odSdEaXJlY3RvcnknLCB1J0RlZmF1bHREaXInLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0RlZmF1bHREaXInLCBOb25lLCB1IlRoZSBkZWZhdWx0IHN1Yi1wYXRoIHVuZGVyIHBhcmVudCdzIHBhdGguIiksCi0odSdEaXJlY3RvcnknLCB1J0RpcmVjdG9yeV9QYXJlbnQnLCB1J1knLCBOb25lLCBOb25lLCB1J0RpcmVjdG9yeScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUmVmZXJlbmNlIHRvIHRoZSBlbnRyeSBpbiB0aGlzIHRhYmxlIHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQgcGFyZW50IGRpcmVjdG9yeS4gQSByZWNvcmQgcGFyZW50ZWQgdG8gaXRzZWxmIG9yIHdpdGggYSBOdWxsIHBhcmVudCByZXByZXNlbnRzIGEgcm9vdCBvZiB0aGUgaW5zdGFsbCB0cmVlLicpLAotKHUnQ3JlYXRlRm9sZGVyJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIENvbXBvbmVudCB0YWJsZS4nKSwKLSh1J0NyZWF0ZUZvbGRlcicsIHUnRGlyZWN0b3J5XycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRGlyZWN0b3J5JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSwgY291bGQgYmUgZm9yZWlnbiBrZXkgaW50byB0aGUgRGlyZWN0b3J5IHRhYmxlLicpLAotKHUnQ3VzdG9tQWN0aW9uJywgdSdUeXBlJywgdSdOJywgMSwgMTYzODMsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIG51bWVyaWMgY3VzdG9tIGFjdGlvbiB0eXBlLCBjb25zaXN0aW5nIG9mIHNvdXJjZSBsb2NhdGlvbiwgY29kZSB0eXBlLCBlbnRyeSwgb3B0aW9uIGZsYWdzLicpLAotKHUnQ3VzdG9tQWN0aW9uJywgdSdBY3Rpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1ByaW1hcnkga2V5LCBuYW1lIG9mIGFjdGlvbiwgbm9ybWFsbHkgYXBwZWFycyBpbiBzZXF1ZW5jZSB0YWJsZSB1bmxlc3MgcHJpdmF0ZSB1c2UuJyksCi0odSdDdXN0b21BY3Rpb24nLCB1J1NvdXJjZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQ3VzdG9tU291cmNlJywgTm9uZSwgdSdUaGUgdGFibGUgcmVmZXJlbmNlIG9mIHRoZSBzb3VyY2Ugb2YgdGhlIGNvZGUuJyksCi0odSdDdXN0b21BY3Rpb24nLCB1J1RhcmdldCcsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJywgTm9uZSwgdSdFeGNlY3V0aW9uIHBhcmFtZXRlciwgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBjdXN0b20gYWN0aW9uJyksCi0odSdEckxvY2F0b3InLCB1J1NpZ25hdHVyZV8nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSBTaWduYXR1cmVfIHJlcHJlc2VudHMgYSB1bmlxdWUgZmlsZSBzaWduYXR1cmUgYW5kIGlzIGFsc28gdGhlIGZvcmVpZ24ga2V5IGluIHRoZSBTaWduYXR1cmUgdGFibGUuJyksCi0odSdEckxvY2F0b3InLCB1J1BhdGgnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0FueVBhdGgnLCBOb25lLCB1J1RoZSBwYXRoIG9uIHRoZSB1c2VyIHN5c3RlbS4gVGhpcyBpcyBhIGVpdGhlciBhIHN1YnBhdGggYmVsb3cgdGhlIHZhbHVlIG9mIHRoZSBQYXJlbnQgb3IgYSBmdWxsIHBhdGguIFRoZSBwYXRoIG1heSBjb250YWluIHByb3BlcnRpZXMgZW5jbG9zZWQgd2l0aGluIFsgXSB0aGF0IHdpbGwgYmUgZXhwYW5kZWQuJyksCi0odSdEckxvY2F0b3InLCB1J0RlcHRoJywgdSdZJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGRlcHRoIGJlbG93IHRoZSBwYXRoIHRvIHdoaWNoIHRoZSBTaWduYXR1cmVfIGlzIHJlY3Vyc2l2ZWx5IHNlYXJjaGVkLiBJZiBhYnNlbnQsIHRoZSBkZXB0aCBpcyBhc3N1bWVkIHRvIGJlIDAuJyksCi0odSdEckxvY2F0b3InLCB1J1BhcmVudCcsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnVGhlIHBhcmVudCBmaWxlIHNpZ25hdHVyZS4gSXQgaXMgYWxzbyBhIGZvcmVpZ24ga2V5IGluIHRoZSBTaWduYXR1cmUgdGFibGUuIElmIG51bGwgYW5kIHRoZSBQYXRoIGNvbHVtbiBkb2VzIG5vdCBleHBhbmQgdG8gYSBmdWxsIHBhdGgsIHRoZW4gYWxsIHRoZSBmaXhlZCBkcml2ZXMgb2YgdGhlIHVzZXIgc3lzdGVtIGFyZSBzZWFyY2hlZCB1c2luZyB0aGUgUGF0aC4nKSwKLSh1J0R1cGxpY2F0ZUZpbGUnLCB1J0ZpbGVfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdGaWxlJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSByZWZlcmVuY2luZyB0aGUgc291cmNlIGZpbGUgdG8gYmUgZHVwbGljYXRlZC4nKSwKLSh1J0R1cGxpY2F0ZUZpbGUnLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgcmVmZXJlbmNpbmcgQ29tcG9uZW50IHRoYXQgY29udHJvbHMgdGhlIGR1cGxpY2F0ZSBmaWxlLicpLAotKHUnRHVwbGljYXRlRmlsZScsIHUnRGVzdEZvbGRlcicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiBhIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzIGFzc3VtZWQgdG8gcmVzb2x2ZSB0byB0aGUgZnVsbCBwYXRobmFtZSB0byBhIGRlc3RpbmF0aW9uIGZvbGRlci4nKSwKLSh1J0R1cGxpY2F0ZUZpbGUnLCB1J0Rlc3ROYW1lJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsIE5vbmUsIHUnRmlsZW5hbWUgdG8gYmUgZ2l2ZW4gdG8gdGhlIGR1cGxpY2F0ZSBmaWxlLicpLAotKHUnRHVwbGljYXRlRmlsZScsIHUnRmlsZUtleScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUHJpbWFyeSBrZXkgdXNlZCB0byBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZmlsZSBlbnRyeScpLAotKHUnRW52aXJvbm1lbnQnLCB1J05hbWUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1RoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudGFsIHZhbHVlLicpLAotKHUnRW52aXJvbm1lbnQnLCB1J1ZhbHVlJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1RoZSB2YWx1ZSB0byBzZXQgaW4gdGhlIGVudmlyb25tZW50YWwgc2V0dGluZ3MuJyksCi0odSdFbnZpcm9ubWVudCcsIHUnQ29tcG9uZW50XycsIHUnTicsIE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBDb21wb25lbnQgdGFibGUgcmVmZXJlbmNpbmcgY29tcG9uZW50IHRoYXQgY29udHJvbHMgdGhlIGluc3RhbGxpbmcgb2YgdGhlIGVudmlyb25tZW50YWwgdmFsdWUuJyksCi0odSdFbnZpcm9ubWVudCcsIHUnRW52aXJvbm1lbnQnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1VuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBzZXR0aW5nJyksCi0odSdFcnJvcicsIHUnRXJyb3InLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJbnRlZ2VyIGVycm9yIG51bWJlciwgb2J0YWluZWQgZnJvbSBoZWFkZXIgZmlsZSBJRXJyb3IoLi4uKSBtYWNyb3MuJyksCi0odSdFcnJvcicsIHUnTWVzc2FnZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGVtcGxhdGUnLCBOb25lLCB1J0Vycm9yIGZvcm1hdHRpbmcgdGVtcGxhdGUsIG9idGFpbmVkIGZyb20gdXNlciBlZC4gb3IgbG9jYWxpemVycy4nKSwKLSh1J0V4dGVuc2lvbicsIHUnRmVhdHVyZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZlYXR1cmUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlcXVpcmVkIGZvcmVpZ24ga2V5IGludG8gdGhlIEZlYXR1cmUgVGFibGUsIHNwZWNpZnlpbmcgdGhlIGZlYXR1cmUgdG8gdmFsaWRhdGUgb3IgaW5zdGFsbCBpbiBvcmRlciBmb3IgdGhlIENMU0lEIGZhY3RvcnkgdG8gYmUgb3BlcmF0aW9uYWwuJyksCi0odSdFeHRlbnNpb24nLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUmVxdWlyZWQgZm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IFRhYmxlLCBzcGVjaWZ5aW5nIHRoZSBjb21wb25lbnQgZm9yIHdoaWNoIHRvIHJldHVybiBhIHBhdGggd2hlbiBjYWxsZWQgdGhyb3VnaCBMb2NhdGVDb21wb25lbnQuJyksCi0odSdFeHRlbnNpb24nLCB1J0V4dGVuc2lvbicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlIHJvdy4nKSwKLSh1J0V4dGVuc2lvbicsIHUnTUlNRV8nLCB1J1knLCBOb25lLCBOb25lLCB1J01JTUUnLCAxLCB1J1RleHQnLCBOb25lLCB1J09wdGlvbmFsIENvbnRleHQgaWRlbnRpZmllciwgdHlwaWNhbGx5ICJ0eXBlL2Zvcm1hdCIgYXNzb2NpYXRlZCB3aXRoIHRoZSBleHRlbnNpb24nKSwKLSh1J0V4dGVuc2lvbicsIHUnUHJvZ0lkXycsIHUnWScsIE5vbmUsIE5vbmUsIHUnUHJvZ0lkJywgMSwgdSdUZXh0JywgTm9uZSwgdSdPcHRpb25hbCBQcm9nSWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXh0ZW5zaW9uLicpLAotKHUnTUlNRScsIHUnQ0xTSUQnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0d1aWQnLCBOb25lLCB1J09wdGlvbmFsIGFzc29jaWF0ZWQgQ0xTSUQuJyksCi0odSdNSU1FJywgdSdDb250ZW50VHlwZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnUHJpbWFyeSBrZXkuIENvbnRleHQgaWRlbnRpZmllciwgdHlwaWNhbGx5ICJ0eXBlL2Zvcm1hdCIuJyksCi0odSdNSU1FJywgdSdFeHRlbnNpb25fJywgdSdOJywgTm9uZSwgTm9uZSwgdSdFeHRlbnNpb24nLCAxLCB1J1RleHQnLCBOb25lLCB1J09wdGlvbmFsIGFzc29jaWF0ZWQgZXh0ZW5zaW9uICh3aXRob3V0IGRvdCknKSwKLSh1J0ZlYXR1cmVDb21wb25lbnRzJywgdSdGZWF0dXJlXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRmVhdHVyZScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byBGZWF0dXJlIHRhYmxlLicpLAotKHUnRmVhdHVyZUNvbXBvbmVudHMnLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byBDb21wb25lbnQgdGFibGUuJyksCi0odSdGaWxlU0ZQQ2F0YWxvZycsIHUnRmlsZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZpbGUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYXRhbG9nJyksCi0odSdGaWxlU0ZQQ2F0YWxvZycsIHUnU0ZQQ2F0YWxvZ18nLCB1J04nLCBOb25lLCBOb25lLCB1J1NGUENhdGFsb2cnLCAxLCB1J0ZpbGVuYW1lJywgTm9uZSwgdSdDYXRhbG9nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZScpLAotKHUnU0ZQQ2F0YWxvZycsIHUnU0ZQQ2F0YWxvZycsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRmlsZW5hbWUnLCBOb25lLCB1J0ZpbGUgbmFtZSBmb3IgdGhlIGNhdGFsb2cuJyksCi0odSdTRlBDYXRhbG9nJywgdSdDYXRhbG9nJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdCaW5hcnknLCBOb25lLCB1J1NGUCBDYXRhbG9nJyksCi0odSdTRlBDYXRhbG9nJywgdSdEZXBlbmRlbmN5JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1BhcmVudCBjYXRhbG9nIC0gb25seSB1c2VkIGJ5IFNGUCcpLAotKHUnRm9udCcsIHUnRmlsZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZpbGUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1ByaW1hcnkga2V5LCBmb3JlaWduIGtleSBpbnRvIEZpbGUgdGFibGUgcmVmZXJlbmNpbmcgZm9udCBmaWxlLicpLAotKHUnRm9udCcsIHUnRm9udFRpdGxlJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdGb250IG5hbWUuJyksCi0odSdJbmlGaWxlJywgdSdBY3Rpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1JzA7MTszJywgdSdUaGUgdHlwZSBvZiBtb2RpZmljYXRpb24gdG8gYmUgbWFkZSwgb25lIG9mIGlpZkVudW0nKSwKLSh1J0luaUZpbGUnLCB1J1ZhbHVlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1RoZSB2YWx1ZSB0byBiZSB3cml0dGVuLicpLAotKHUnSW5pRmlsZScsIHUnS2V5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1RoZSAuSU5JIGZpbGUga2V5IGJlbG93IFNlY3Rpb24uJyksCi0odSdJbmlGaWxlJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIENvbXBvbmVudCB0YWJsZSByZWZlcmVuY2luZyBjb21wb25lbnQgdGhhdCBjb250cm9scyB0aGUgaW5zdGFsbGluZyBvZiB0aGUgLklOSSB2YWx1ZS4nKSwKLSh1J0luaUZpbGUnLCB1J0ZpbGVOYW1lJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsIE5vbmUsIHUnVGhlIC5JTkkgZmlsZSBuYW1lIGluIHdoaWNoIHRvIHdyaXRlIHRoZSBpbmZvcm1hdGlvbicpLAotKHUnSW5pRmlsZScsIHUnSW5pRmlsZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUHJpbWFyeSBrZXksIG5vbi1sb2NhbGl6ZWQgdG9rZW4uJyksCi0odSdJbmlGaWxlJywgdSdEaXJQcm9wZXJ0eScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byB0aGUgRGlyZWN0b3J5IHRhYmxlIGRlbm90aW5nIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIC5JTkkgZmlsZSBpcy4nKSwKLSh1J0luaUZpbGUnLCB1J1NlY3Rpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVGhlIC5JTkkgZmlsZSBTZWN0aW9uLicpLAotKHUnSW5pTG9jYXRvcicsIHUnVHlwZScsIHUnWScsIDAsIDIsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQW4gaW50ZWdlciB2YWx1ZSB0aGF0IGRldGVybWluZXMgaWYgdGhlIC5JTkkgdmFsdWUgcmVhZCBpcyBhIGZpbGVuYW1lIG9yIGEgZGlyZWN0b3J5IGxvY2F0aW9uIG9yIHRvIGJlIHVzZWQgYXMgaXMgdy9vIGludGVycHJldGF0aW9uLicpLAotKHUnSW5pTG9jYXRvcicsIHUnS2V5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdLZXkgdmFsdWUgKGZvbGxvd2VkIGJ5IGFuIGVxdWFscyBzaWduIGluIElOSSBmaWxlKS4nKSwKLSh1J0luaUxvY2F0b3InLCB1J1NpZ25hdHVyZV8nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSB0YWJsZSBrZXkuIFRoZSBTaWduYXR1cmVfIHJlcHJlc2VudHMgYSB1bmlxdWUgZmlsZSBzaWduYXR1cmUgYW5kIGlzIGFsc28gdGhlIGZvcmVpZ24ga2V5IGluIHRoZSBTaWduYXR1cmUgdGFibGUuJyksCi0odSdJbmlMb2NhdG9yJywgdSdGaWxlTmFtZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRmlsZW5hbWUnLCBOb25lLCB1J1RoZSAuSU5JIGZpbGUgbmFtZS4nKSwKLSh1J0luaUxvY2F0b3InLCB1J1NlY3Rpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1NlY3Rpb24gbmFtZSB3aXRoaW4gaW4gZmlsZSAod2l0aGluIHNxdWFyZSBicmFja2V0cyBpbiBJTkkgZmlsZSkuJyksCi0odSdJbmlMb2NhdG9yJywgdSdGaWVsZCcsIHUnWScsIDAsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBmaWVsZCBpbiB0aGUgLklOSSBsaW5lLiBJZiBGaWVsZCBpcyBudWxsIG9yIDAgdGhlIGVudGlyZSBsaW5lIGlzIHJlYWQuJyksCi0odSdJc29sYXRlZENvbXBvbmVudCcsIHUnQ29tcG9uZW50X0FwcGxpY2F0aW9uJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0tleSB0byBDb21wb25lbnQgdGFibGUgaXRlbSBmb3IgYXBwbGljYXRpb24nKSwKLSh1J0lzb2xhdGVkQ29tcG9uZW50JywgdSdDb21wb25lbnRfU2hhcmVkJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0tleSB0byBDb21wb25lbnQgdGFibGUgaXRlbSB0byBiZSBpc29sYXRlZCcpLAotKHUnTGF1bmNoQ29uZGl0aW9uJywgdSdDb25kaXRpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NvbmRpdGlvbicsIE5vbmUsIHUnRXhwcmVzc2lvbiB3aGljaCBtdXN0IGV2YWx1YXRlIHRvIFRSVUUgaW4gb3JkZXIgZm9yIGluc3RhbGwgdG8gY29tbWVuY2UuJyksCi0odSdMYXVuY2hDb25kaXRpb24nLCB1J0Rlc2NyaXB0aW9uJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J0xvY2FsaXphYmxlIHRleHQgdG8gZGlzcGxheSB3aGVuIGNvbmRpdGlvbiBmYWlscyBhbmQgaW5zdGFsbCBtdXN0IGFib3J0LicpLAotKHUnTG9ja1Blcm1pc3Npb25zJywgdSdUYWJsZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIHUnRGlyZWN0b3J5O0ZpbGU7UmVnaXN0cnknLCB1J1JlZmVyZW5jZSB0byBhbm90aGVyIHRhYmxlIG5hbWUnKSwKLSh1J0xvY2tQZXJtaXNzaW9ucycsIHUnRG9tYWluJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J0RvbWFpbiBuYW1lIGZvciB1c2VyIHdob3NlIHBlcm1pc3Npb25zIGFyZSBiZWluZyBzZXQuICh1c3VhbGx5IGEgcHJvcGVydHkpJyksCi0odSdMb2NrUGVybWlzc2lvbnMnLCB1J0xvY2tPYmplY3QnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gUmVnaXN0cnkgb3IgRmlsZSB0YWJsZScpLAotKHUnTG9ja1Blcm1pc3Npb25zJywgdSdQZXJtaXNzaW9uJywgdSdZJywgLTIxNDc0ODM2NDcsIDIxNDc0ODM2NDcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUGVybWlzc2lvbiBBY2Nlc3MgbWFzay4gIEZ1bGwgQ29udHJvbCA9IDI2ODQzNTQ1NiAoR0VORVJJQ19BTEwgPSAweDEwMDAwMDAwKScpLAotKHUnTG9ja1Blcm1pc3Npb25zJywgdSdVc2VyJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1VzZXIgZm9yIHBlcm1pc3Npb25zIHRvIGJlIHNldC4gICh1c3VhbGx5IGEgcHJvcGVydHkpJyksCi0odSdNZWRpYScsIHUnU291cmNlJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdQcm9wZXJ0eScsIE5vbmUsIHUnVGhlIHByb3BlcnR5IGRlZmluaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FiaW5ldCBmaWxlLicpLAotKHUnTWVkaWEnLCB1J0NhYmluZXQnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0NhYmluZXQnLCBOb25lLCB1J0lmIHNvbWUgb3IgYWxsIG9mIHRoZSBmaWxlcyBzdG9yZWQgb24gdGhlIG1lZGlhIGFyZSBjb21wcmVzc2VkIGluIGEgY2FiaW5ldCwgdGhlIG5hbWUgb2YgdGhhdCBjYWJpbmV0LicpLAotKHUnTWVkaWEnLCB1J0Rpc2tJZCcsIHUnTicsIDEsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1ByaW1hcnkga2V5LCBpbnRlZ2VyIHRvIGRldGVybWluZSBzb3J0IG9yZGVyIGZvciB0YWJsZS4nKSwKLSh1J01lZGlhJywgdSdEaXNrUHJvbXB0JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdEaXNrIG5hbWU6IHRoZSB2aXNpYmxlIHRleHQgYWN0dWFsbHkgcHJpbnRlZCBvbiB0aGUgZGlzay4gIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByb21wdCB0aGUgdXNlciB3aGVuIHRoaXMgZGlzayBuZWVkcyB0byBiZSBpbnNlcnRlZC4nKSwKLSh1J01lZGlhJywgdSdMYXN0U2VxdWVuY2UnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlIHNlcXVlbmNlIG51bWJlciBmb3IgdGhlIGxhc3QgZmlsZSBmb3IgdGhpcyBtZWRpYS4nKSwKLSh1J01lZGlhJywgdSdWb2x1bWVMYWJlbCcsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIGxhYmVsIGF0dHJpYnV0ZWQgdG8gdGhlIHZvbHVtZS4nKSwKLSh1J01vZHVsZUNvbXBvbmVudHMnLCB1J0NvbXBvbmVudCcsIHUnTicsIE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdDb21wb25lbnQgY29udGFpbmVkIGluIHRoZSBtb2R1bGUuJyksCi0odSdNb2R1bGVDb21wb25lbnRzJywgdSdMYW5ndWFnZScsIHUnTicsIE5vbmUsIE5vbmUsIHUnTW9kdWxlU2lnbmF0dXJlJywgMiwgTm9uZSwgTm9uZSwgdSdEZWZhdWx0IGxhbmd1YWdlIElEIGZvciBtb2R1bGUgKG1heSBiZSBjaGFuZ2VkIGJ5IHRyYW5zZm9ybSkuJyksCi0odSdNb2R1bGVDb21wb25lbnRzJywgdSdNb2R1bGVJRCcsIHUnTicsIE5vbmUsIE5vbmUsIHUnTW9kdWxlU2lnbmF0dXJlJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdNb2R1bGUgY29udGFpbmluZyB0aGUgY29tcG9uZW50LicpLAotKHUnTW9kdWxlU2lnbmF0dXJlJywgdSdMYW5ndWFnZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRGVmYXVsdCBkZWNpbWFsIGxhbmd1YWdlIG9mIG1vZHVsZS4nKSwKLSh1J01vZHVsZVNpZ25hdHVyZScsIHUnVmVyc2lvbicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVmVyc2lvbicsIE5vbmUsIHUnVmVyc2lvbiBvZiB0aGUgbW9kdWxlLicpLAotKHUnTW9kdWxlU2lnbmF0dXJlJywgdSdNb2R1bGVJRCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTW9kdWxlIGlkZW50aWZpZXIgKFN0cmluZy5HVUlEKS4nKSwKLSh1J01vZHVsZURlcGVuZGVuY3knLCB1J01vZHVsZUlEJywgdSdOJywgTm9uZSwgTm9uZSwgdSdNb2R1bGVTaWduYXR1cmUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J01vZHVsZSByZXF1aXJpbmcgdGhlIGRlcGVuZGVuY3kuJyksCi0odSdNb2R1bGVEZXBlbmRlbmN5JywgdSdNb2R1bGVMYW5ndWFnZScsIHUnTicsIE5vbmUsIE5vbmUsIHUnTW9kdWxlU2lnbmF0dXJlJywgMiwgTm9uZSwgTm9uZSwgdSdMYW5ndWFnZSBvZiBtb2R1bGUgcmVxdWlyaW5nIHRoZSBkZXBlbmRlbmN5LicpLAotKHUnTW9kdWxlRGVwZW5kZW5jeScsIHUnUmVxdWlyZWRJRCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnU3RyaW5nLkdVSUQgb2YgcmVxdWlyZWQgbW9kdWxlLicpLAotKHUnTW9kdWxlRGVwZW5kZW5jeScsIHUnUmVxdWlyZWRMYW5ndWFnZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTGFuZ3VhZ2VJRCBvZiB0aGUgcmVxdWlyZWQgbW9kdWxlLicpLAotKHUnTW9kdWxlRGVwZW5kZW5jeScsIHUnUmVxdWlyZWRWZXJzaW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdWZXJzaW9uJywgTm9uZSwgdSdWZXJzaW9uIG9mIHRoZSByZXF1aXJlZCB2ZXJzaW9uLicpLAotKHUnTW9kdWxlRXhjbHVzaW9uJywgdSdNb2R1bGVJRCcsIHUnTicsIE5vbmUsIE5vbmUsIHUnTW9kdWxlU2lnbmF0dXJlJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdTdHJpbmcuR1VJRCBvZiBtb2R1bGUgd2l0aCBleGNsdXNpb24gcmVxdWlyZW1lbnQuJyksCi0odSdNb2R1bGVFeGNsdXNpb24nLCB1J01vZHVsZUxhbmd1YWdlJywgdSdOJywgTm9uZSwgTm9uZSwgdSdNb2R1bGVTaWduYXR1cmUnLCAyLCBOb25lLCBOb25lLCB1J0xhbmd1YWdlSUQgb2YgbW9kdWxlIHdpdGggZXhjbHVzaW9uIHJlcXVpcmVtZW50LicpLAotKHUnTW9kdWxlRXhjbHVzaW9uJywgdSdFeGNsdWRlZElEJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdTdHJpbmcuR1VJRCBvZiBleGNsdWRlZCBtb2R1bGUuJyksCi0odSdNb2R1bGVFeGNsdXNpb24nLCB1J0V4Y2x1ZGVkTGFuZ3VhZ2UnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0xhbmd1YWdlIG9mIGV4Y2x1ZGVkIG1vZHVsZS4nKSwKLSh1J01vZHVsZUV4Y2x1c2lvbicsIHUnRXhjbHVkZWRNYXhWZXJzaW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdWZXJzaW9uJywgTm9uZSwgdSdNYXhpbXVtIHZlcnNpb24gb2YgZXhjbHVkZWQgbW9kdWxlLicpLAotKHUnTW9kdWxlRXhjbHVzaW9uJywgdSdFeGNsdWRlZE1pblZlcnNpb24nLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1ZlcnNpb24nLCBOb25lLCB1J01pbmltdW0gdmVyc2lvbiBvZiBleGNsdWRlZCBtb2R1bGUuJyksCi0odSdNb3ZlRmlsZScsIHUnQ29tcG9uZW50XycsIHUnTicsIE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdJZiB0aGlzIGNvbXBvbmVudCBpcyBub3QgInNlbGVjdGVkIiBmb3IgaW5zdGFsbGF0aW9uIG9yIHJlbW92YWwsIG5vIGFjdGlvbiB3aWxsIGJlIHRha2VuIG9uIHRoZSBhc3NvY2lhdGVkIE1vdmVGaWxlIGVudHJ5JyksCi0odSdNb3ZlRmlsZScsIHUnRGVzdEZvbGRlcicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiBhIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzIGFzc3VtZWQgdG8gcmVzb2x2ZSB0byB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnknKSwKLSh1J01vdmVGaWxlJywgdSdEZXN0TmFtZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRmlsZW5hbWUnLCBOb25lLCB1J05hbWUgdG8gYmUgZ2l2ZW4gdG8gdGhlIG9yaWdpbmFsIGZpbGUgYWZ0ZXIgaXQgaXMgbW92ZWQgb3IgY29waWVkLiAgSWYgYmxhbmssIHRoZSBkZXN0aW5hdGlvbiBmaWxlIHdpbGwgYmUgZ2l2ZW4gdGhlIHNhbWUgbmFtZSBhcyB0aGUgc291cmNlIGZpbGUnKSwKLSh1J01vdmVGaWxlJywgdSdGaWxlS2V5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyIE1vdmVGaWxlIHJlY29yZCcpLAotKHUnTW92ZUZpbGUnLCB1J09wdGlvbnMnLCB1J04nLCAwLCAxLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ludGVnZXIgdmFsdWUgc3BlY2lmeWluZyB0aGUgTW92ZUZpbGUgb3BlcmF0aW5nIG1vZGUsIG9uZSBvZiBpbWZvRW51bScpLAotKHUnTW92ZUZpbGUnLCB1J1NvdXJjZUZvbGRlcicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnTmFtZSBvZiBhIHByb3BlcnR5IHdob3NlIHZhbHVlIGlzIGFzc3VtZWQgdG8gcmVzb2x2ZSB0byB0aGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5JyksCi0odSdNb3ZlRmlsZScsIHUnU291cmNlTmFtZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUiTmFtZSBvZiB0aGUgc291cmNlIGZpbGUocykgdG8gYmUgbW92ZWQgb3IgY29waWVkLiAgQ2FuIGNvbnRhaW4gdGhlICcqJyBvciAnPycgd2lsZGNhcmRzLiIpLAotKHUnTXNpQXNzZW1ibHknLCB1J0F0dHJpYnV0ZXMnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Fzc2VtYmx5IGF0dHJpYnV0ZXMnKSwKLSh1J01zaUFzc2VtYmx5JywgdSdGZWF0dXJlXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRmVhdHVyZScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byBGZWF0dXJlIHRhYmxlLicpLAotKHUnTXNpQXNzZW1ibHknLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byBDb21wb25lbnQgdGFibGUuJyksCi0odSdNc2lBc3NlbWJseScsIHUnRmlsZV9BcHBsaWNhdGlvbicsIHUnWScsIE5vbmUsIE5vbmUsIHUnRmlsZScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byBGaWxlIHRhYmxlLCBkZW5vdGluZyB0aGUgYXBwbGljYXRpb24gY29udGV4dCBmb3IgcHJpdmF0ZSBhc3NlbWJsaWVzLiBOdWxsIGZvciBnbG9iYWwgYXNzZW1ibGllcy4nKSwKLSh1J01zaUFzc2VtYmx5JywgdSdGaWxlX01hbmlmZXN0JywgdSdZJywgTm9uZSwgTm9uZSwgdSdGaWxlJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBGaWxlIHRhYmxlIGRlbm90aW5nIHRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgYXNzZW1ibHkuJyksCi0odSdNc2lBc3NlbWJseU5hbWUnLCB1J05hbWUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1RoZSBuYW1lIHBhcnQgb2YgdGhlIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBhc3NlbWJseSBuYW1lLicpLAotKHUnTXNpQXNzZW1ibHlOYW1lJywgdSdWYWx1ZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIHZhbHVlIHBhcnQgb2YgdGhlIG5hbWUtdmFsdWUgcGFpcnMgZm9yIHRoZSBhc3NlbWJseSBuYW1lLicpLAotKHUnTXNpQXNzZW1ibHlOYW1lJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gQ29tcG9uZW50IHRhYmxlLicpLAotKHUnTXNpRGlnaXRhbENlcnRpZmljYXRlJywgdSdDZXJ0RGF0YScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQmluYXJ5JywgTm9uZSwgdSdBIGNlcnRpZmljYXRlIGNvbnRleHQgYmxvYiBmb3IgYSBzaWduZXIgY2VydGlmaWNhdGUnKSwKLSh1J01zaURpZ2l0YWxDZXJ0aWZpY2F0ZScsIHUnRGlnaXRhbENlcnRpZmljYXRlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcm93JyksCi0odSdNc2lEaWdpdGFsU2lnbmF0dXJlJywgdSdUYWJsZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnTWVkaWEnLCB1J1JlZmVyZW5jZSB0byBhbm90aGVyIHRhYmxlIG5hbWUgKG9ubHkgTWVkaWEgdGFibGUgaXMgc3VwcG9ydGVkKScpLAotKHUnTXNpRGlnaXRhbFNpZ25hdHVyZScsIHUnRGlnaXRhbENlcnRpZmljYXRlXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnTXNpRGlnaXRhbENlcnRpZmljYXRlJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSB0byBNc2lEaWdpdGFsQ2VydGlmaWNhdGUgdGFibGUgaWRlbnRpZnlpbmcgdGhlIHNpZ25lciBjZXJ0aWZpY2F0ZScpLAotKHUnTXNpRGlnaXRhbFNpZ25hdHVyZScsIHUnSGFzaCcsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQmluYXJ5JywgTm9uZSwgdSdUaGUgZW5jb2RlZCBoYXNoIGJsb2IgZnJvbSB0aGUgZGlnaXRhbCBzaWduYXR1cmUnKSwKLSh1J01zaURpZ2l0YWxTaWduYXR1cmUnLCB1J1NpZ25PYmplY3QnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J0ZvcmVpZ24ga2V5IHRvIE1lZGlhIHRhYmxlJyksCi0odSdNc2lGaWxlSGFzaCcsIHUnRmlsZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZpbGUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1ByaW1hcnkga2V5LCBmb3JlaWduIGtleSBpbnRvIEZpbGUgdGFibGUgcmVmZXJlbmNpbmcgZmlsZSB3aXRoIHRoaXMgaGFzaCcpLAotKHUnTXNpRmlsZUhhc2gnLCB1J09wdGlvbnMnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdWYXJpb3VzIG9wdGlvbnMgYW5kIGF0dHJpYnV0ZXMgZm9yIHRoaXMgaGFzaC4nKSwKLSh1J01zaUZpbGVIYXNoJywgdSdIYXNoUGFydDEnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1NpemUgb2YgZmlsZSBpbiBieXRlcyAobG9uZyBpbnRlZ2VyKS4nKSwKLSh1J01zaUZpbGVIYXNoJywgdSdIYXNoUGFydDInLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1NpemUgb2YgZmlsZSBpbiBieXRlcyAobG9uZyBpbnRlZ2VyKS4nKSwKLSh1J01zaUZpbGVIYXNoJywgdSdIYXNoUGFydDMnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1NpemUgb2YgZmlsZSBpbiBieXRlcyAobG9uZyBpbnRlZ2VyKS4nKSwKLSh1J01zaUZpbGVIYXNoJywgdSdIYXNoUGFydDQnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1NpemUgb2YgZmlsZSBpbiBieXRlcyAobG9uZyBpbnRlZ2VyKS4nKSwKLSh1J01zaVBhdGNoSGVhZGVycycsIHUnU3RyZWFtUmVmJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleS4gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJvdy4nKSwKLSh1J01zaVBhdGNoSGVhZGVycycsIHUnSGVhZGVyJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdCaW5hcnknLCBOb25lLCB1J0JpbmFyeSBzdHJlYW0uIFRoZSBwYXRjaCBoZWFkZXIsIHVzZWQgZm9yIHBhdGNoIHZhbGlkYXRpb24uJyksCi0odSdPREJDQXR0cmlidXRlJywgdSdWYWx1ZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVmFsdWUgZm9yIE9EQkMgZHJpdmVyIGF0dHJpYnV0ZScpLAotKHUnT0RCQ0F0dHJpYnV0ZScsIHUnQXR0cmlidXRlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdOYW1lIG9mIE9EQkMgZHJpdmVyIGF0dHJpYnV0ZScpLAotKHUnT0RCQ0F0dHJpYnV0ZScsIHUnRHJpdmVyXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnT0RCQ0RyaXZlcicsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUmVmZXJlbmNlIHRvIE9EQkMgZHJpdmVyIGluIE9EQkNEcml2ZXIgdGFibGUnKSwKLSh1J09EQkNEcml2ZXInLCB1J0Rlc2NyaXB0aW9uJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdUZXh0IHVzZWQgYXMgcmVnaXN0ZXJlZCBuYW1lIGZvciBkcml2ZXIsIG5vbi1sb2NhbGl6ZWQnKSwKLSh1J09EQkNEcml2ZXInLCB1J0ZpbGVfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdGaWxlJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdSZWZlcmVuY2UgdG8ga2V5IGRyaXZlciBmaWxlJyksCi0odSdPREJDRHJpdmVyJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlZmVyZW5jZSB0byBhc3NvY2lhdGVkIGNvbXBvbmVudCcpLAotKHUnT0RCQ0RyaXZlcicsIHUnRHJpdmVyJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSwgbm9uLWxvY2FsaXplZC5pbnRlcm5hbCB0b2tlbiBmb3IgZHJpdmVyJyksCi0odSdPREJDRHJpdmVyJywgdSdGaWxlX1NldHVwJywgdSdZJywgTm9uZSwgTm9uZSwgdSdGaWxlJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdPcHRpb25hbCByZWZlcmVuY2UgdG8ga2V5IGRyaXZlciBzZXR1cCBETEwnKSwKLSh1J09EQkNEYXRhU291cmNlJywgdSdEZXNjcmlwdGlvbicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVGV4dCB1c2VkIGFzIHJlZ2lzdGVyZWQgbmFtZSBmb3IgZGF0YSBzb3VyY2UnKSwKLSh1J09EQkNEYXRhU291cmNlJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlZmVyZW5jZSB0byBhc3NvY2lhdGVkIGNvbXBvbmVudCcpLAotKHUnT0RCQ0RhdGFTb3VyY2UnLCB1J0RhdGFTb3VyY2UnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1ByaW1hcnkga2V5LCBub24tbG9jYWxpemVkLmludGVybmFsIHRva2VuIGZvciBkYXRhIHNvdXJjZScpLAotKHUnT0RCQ0RhdGFTb3VyY2UnLCB1J0RyaXZlckRlc2NyaXB0aW9uJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdSZWZlcmVuY2UgdG8gZHJpdmVyIGRlc2NyaXB0aW9uLCBtYXkgYmUgZXhpc3RpbmcgZHJpdmVyJyksCi0odSdPREJDRGF0YVNvdXJjZScsIHUnUmVnaXN0cmF0aW9uJywgdSdOJywgMCwgMSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdSZWdpc3RyYXRpb24gb3B0aW9uOiAwPW1hY2hpbmUsIDE9dXNlciwgb3RoZXJzIHQuYi5kLicpLAotKHUnT0RCQ1NvdXJjZUF0dHJpYnV0ZScsIHUnVmFsdWUnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1ZhbHVlIGZvciBPREJDIGRhdGEgc291cmNlIGF0dHJpYnV0ZScpLAotKHUnT0RCQ1NvdXJjZUF0dHJpYnV0ZScsIHUnQXR0cmlidXRlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdOYW1lIG9mIE9EQkMgZGF0YSBzb3VyY2UgYXR0cmlidXRlJyksCi0odSdPREJDU291cmNlQXR0cmlidXRlJywgdSdEYXRhU291cmNlXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnT0RCQ0RhdGFTb3VyY2UnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlZmVyZW5jZSB0byBPREJDIGRhdGEgc291cmNlIGluIE9EQkNEYXRhU291cmNlIHRhYmxlJyksCi0odSdPREJDVHJhbnNsYXRvcicsIHUnRGVzY3JpcHRpb24nLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1RleHQgdXNlZCBhcyByZWdpc3RlcmVkIG5hbWUgZm9yIHRyYW5zbGF0b3InKSwKLSh1J09EQkNUcmFuc2xhdG9yJywgdSdGaWxlXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRmlsZScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUmVmZXJlbmNlIHRvIGtleSB0cmFuc2xhdG9yIGZpbGUnKSwKLSh1J09EQkNUcmFuc2xhdG9yJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlZmVyZW5jZSB0byBhc3NvY2lhdGVkIGNvbXBvbmVudCcpLAotKHUnT0RCQ1RyYW5zbGF0b3InLCB1J0ZpbGVfU2V0dXAnLCB1J1knLCBOb25lLCBOb25lLCB1J0ZpbGUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J09wdGlvbmFsIHJlZmVyZW5jZSB0byBrZXkgdHJhbnNsYXRvciBzZXR1cCBETEwnKSwKLSh1J09EQkNUcmFuc2xhdG9yJywgdSdUcmFuc2xhdG9yJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSwgbm9uLWxvY2FsaXplZC5pbnRlcm5hbCB0b2tlbiBmb3IgdHJhbnNsYXRvcicpLAotKHUnUGF0Y2gnLCB1J1NlcXVlbmNlJywgdSdOJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUHJpbWFyeSBrZXksIHNlcXVlbmNlIHdpdGggcmVzcGVjdCB0byB0aGUgbWVkaWEgaW1hZ2VzOyBvcmRlciBtdXN0IHRyYWNrIGNhYmluZXQgb3JkZXIuJyksCi0odSdQYXRjaCcsIHUnQXR0cmlidXRlcycsIHUnTicsIDAsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ludGVnZXIgY29udGFpbmluZyBiaXQgZmxhZ3MgcmVwcmVzZW50aW5nIHBhdGNoIGF0dHJpYnV0ZXMnKSwKLSh1J1BhdGNoJywgdSdGaWxlXycsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUHJpbWFyeSBrZXksIG5vbi1sb2NhbGl6ZWQgdG9rZW4sIGZvcmVpZ24ga2V5IHRvIEZpbGUgdGFibGUsIG11c3QgbWF0Y2ggaWRlbnRpZmllciBpbiBjYWJpbmV0LicpLAotKHUnUGF0Y2gnLCB1J0hlYWRlcicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQmluYXJ5JywgTm9uZSwgdSdCaW5hcnkgc3RyZWFtLiBUaGUgcGF0Y2ggaGVhZGVyLCB1c2VkIGZvciBwYXRjaCB2YWxpZGF0aW9uLicpLAotKHUnUGF0Y2gnLCB1J1BhdGNoU2l6ZScsIHUnTicsIDAsIDIxNDc0ODM2NDcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnU2l6ZSBvZiBwYXRjaCBpbiBieXRlcyAobG9uZyBpbnRlZ2VyKS4nKSwKLSh1J1BhdGNoJywgdSdTdHJlYW1SZWZfJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdJZGVudGlmaWVyLiBGb3JlaWduIGtleSB0byB0aGUgU3RyZWFtUmVmIGNvbHVtbiBvZiB0aGUgTXNpUGF0Y2hIZWFkZXJzIHRhYmxlLicpLAotKHUnUGF0Y2hQYWNrYWdlJywgdSdNZWRpYV8nLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JlaWduIGtleSB0byBEaXNrSWQgY29sdW1uIG9mIE1lZGlhIHRhYmxlLiBJbmRpY2F0ZXMgdGhlIGRpc2sgY29udGFpbmluZyB0aGUgcGF0Y2ggcGFja2FnZS4nKSwKLSh1J1BhdGNoUGFja2FnZScsIHUnUGF0Y2hJZCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnR3VpZCcsIE5vbmUsIHUnQSB1bmlxdWUgc3RyaW5nIEdVSUQgcmVwcmVzZW50aW5nIHRoaXMgcGF0Y2guJyksCi0odSdQdWJsaXNoQ29tcG9uZW50JywgdSdGZWF0dXJlXycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRmVhdHVyZScsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byB0aGUgRmVhdHVyZSB0YWJsZS4nKSwKLSh1J1B1Ymxpc2hDb21wb25lbnQnLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IHRhYmxlLicpLAotKHUnUHVibGlzaENvbXBvbmVudCcsIHUnQ29tcG9uZW50SWQnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0d1aWQnLCBOb25lLCB1J0Egc3RyaW5nIEdVSUQgdGhhdCByZXByZXNlbnRzIHRoZSBjb21wb25lbnQgaWQgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCBieSB0aGUgYWxpZW4gcHJvZHVjdC4nKSwKLSh1J1B1Ymxpc2hDb21wb25lbnQnLCB1J0FwcERhdGEnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1RoaXMgaXMgbG9jYWxpc2FibGUgQXBwbGljYXRpb24gc3BlY2lmaWMgZGF0YSB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBRdWFsaWZpZWQgQ29tcG9uZW50LicpLAotKHUnUHVibGlzaENvbXBvbmVudCcsIHUnUXVhbGlmaWVyJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdUaGlzIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSBDb21wb25lbnRJZCBjb2x1bW4gaXMgYW4gUXVhbGlmaWVkIENvbXBvbmVudCBJZC4gVGhpcyBpcyB0aGUgUXVhbGlmaWVyIGZvciBQcm92aWRlQ29tcG9uZW50SW5kaXJlY3QuJyksCi0odSdSZWdpc3RyeScsIHUnTmFtZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJywgTm9uZSwgdSdUaGUgcmVnaXN0cnkgdmFsdWUgbmFtZS4nKSwKLSh1J1JlZ2lzdHJ5JywgdSdWYWx1ZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJywgTm9uZSwgdSdUaGUgcmVnaXN0cnkgdmFsdWUuJyksCi0odSdSZWdpc3RyeScsIHUnS2V5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdSZWdQYXRoJywgTm9uZSwgdSdUaGUga2V5IGZvciB0aGUgcmVnaXN0cnkgdmFsdWUuJyksCi0odSdSZWdpc3RyeScsIHUnQ29tcG9uZW50XycsIHUnTicsIE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBDb21wb25lbnQgdGFibGUgcmVmZXJlbmNpbmcgY29tcG9uZW50IHRoYXQgY29udHJvbHMgdGhlIGluc3RhbGxpbmcgb2YgdGhlIHJlZ2lzdHJ5IHZhbHVlLicpLAotKHUnUmVnaXN0cnknLCB1J1JlZ2lzdHJ5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSwgbm9uLWxvY2FsaXplZCB0b2tlbi4nKSwKLSh1J1JlZ2lzdHJ5JywgdSdSb290JywgdSdOJywgLTEsIDMsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIHByZWRlZmluZWQgcm9vdCBrZXkgZm9yIHRoZSByZWdpc3RyeSB2YWx1ZSwgb25lIG9mIHJya0VudW0uJyksCi0odSdSZWdMb2NhdG9yJywgdSdOYW1lJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1RoZSByZWdpc3RyeSB2YWx1ZSBuYW1lLicpLAotKHUnUmVnTG9jYXRvcicsIHUnVHlwZScsIHUnWScsIDAsIDE4LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0FuIGludGVnZXIgdmFsdWUgdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSByZWdpc3RyeSB2YWx1ZSBpcyBhIGZpbGVuYW1lIG9yIGEgZGlyZWN0b3J5IGxvY2F0aW9uIG9yIHRvIGJlIHVzZWQgYXMgaXMgdy9vIGludGVycHJldGF0aW9uLicpLAotKHUnUmVnTG9jYXRvcicsIHUnS2V5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdSZWdQYXRoJywgTm9uZSwgdSdUaGUga2V5IGZvciB0aGUgcmVnaXN0cnkgdmFsdWUuJyksCi0odSdSZWdMb2NhdG9yJywgdSdTaWduYXR1cmVfJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdUaGUgdGFibGUga2V5LiBUaGUgU2lnbmF0dXJlXyByZXByZXNlbnRzIGEgdW5pcXVlIGZpbGUgc2lnbmF0dXJlIGFuZCBpcyBhbHNvIHRoZSBmb3JlaWduIGtleSBpbiB0aGUgU2lnbmF0dXJlIHRhYmxlLiBJZiB0aGUgdHlwZSBpcyAwLCB0aGUgcmVnaXN0cnkgdmFsdWVzIHJlZmVycyBhIGRpcmVjdG9yeSwgYW5kIF9TaWduYXR1cmUgaXMgbm90IGEgZm9yZWlnbiBrZXkuJyksCi0odSdSZWdMb2NhdG9yJywgdSdSb290JywgdSdOJywgMCwgMywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgcHJlZGVmaW5lZCByb290IGtleSBmb3IgdGhlIHJlZ2lzdHJ5IHZhbHVlLCBvbmUgb2YgcnJrRW51bS4nKSwKLSh1J1JlbW92ZUZpbGUnLCB1J0luc3RhbGxNb2RlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdScxOzI7MycsIHUnSW5zdGFsbGF0aW9uIG9wdGlvbiwgb25lIG9mIGlpbUVudW0uJyksCi0odSdSZW1vdmVGaWxlJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIENvbXBvbmVudCB0aGF0IGNvbnRyb2xzIHRoZSBmaWxlIHRvIGJlIHJlbW92ZWQuJyksCi0odSdSZW1vdmVGaWxlJywgdSdGaWxlS2V5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSB1c2VkIHRvIGlkZW50aWZ5IGEgcGFydGljdWxhciBmaWxlIGVudHJ5JyksCi0odSdSZW1vdmVGaWxlJywgdSdGaWxlTmFtZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnV2lsZENhcmRGaWxlbmFtZScsIE5vbmUsIHUnTmFtZSBvZiB0aGUgZmlsZSB0byBiZSByZW1vdmVkLicpLAotKHUnUmVtb3ZlRmlsZScsIHUnRGlyUHJvcGVydHknLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J05hbWUgb2YgYSBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBpcyBhc3N1bWVkIHRvIHJlc29sdmUgdG8gdGhlIGZ1bGwgcGF0aG5hbWUgdG8gdGhlIGZvbGRlciBvZiB0aGUgZmlsZSB0byBiZSByZW1vdmVkLicpLAotKHUnUmVtb3ZlSW5pRmlsZScsIHUnQWN0aW9uJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdScyOzQnLCB1J1RoZSB0eXBlIG9mIG1vZGlmaWNhdGlvbiB0byBiZSBtYWRlLCBvbmUgb2YgaWlmRW51bS4nKSwKLSh1J1JlbW92ZUluaUZpbGUnLCB1J1ZhbHVlJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1RoZSB2YWx1ZSB0byBiZSBkZWxldGVkLiBUaGUgdmFsdWUgaXMgcmVxdWlyZWQgd2hlbiBBY3Rpb24gaXMgaWlmSW5pUmVtb3ZlVGFnJyksCi0odSdSZW1vdmVJbmlGaWxlJywgdSdLZXknLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVGhlIC5JTkkgZmlsZSBrZXkgYmVsb3cgU2VjdGlvbi4nKSwKLSh1J1JlbW92ZUluaUZpbGUnLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IHRhYmxlIHJlZmVyZW5jaW5nIGNvbXBvbmVudCB0aGF0IGNvbnRyb2xzIHRoZSBkZWxldGlvbiBvZiB0aGUgLklOSSB2YWx1ZS4nKSwKLSh1J1JlbW92ZUluaUZpbGUnLCB1J0ZpbGVOYW1lJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGaWxlbmFtZScsIE5vbmUsIHUnVGhlIC5JTkkgZmlsZSBuYW1lIGluIHdoaWNoIHRvIGRlbGV0ZSB0aGUgaW5mb3JtYXRpb24nKSwKLSh1J1JlbW92ZUluaUZpbGUnLCB1J0RpclByb3BlcnR5JywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBEaXJlY3RvcnkgdGFibGUgZGVub3RpbmcgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgLklOSSBmaWxlIGlzLicpLAotKHUnUmVtb3ZlSW5pRmlsZScsIHUnU2VjdGlvbicsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJywgTm9uZSwgdSdUaGUgLklOSSBmaWxlIFNlY3Rpb24uJyksCi0odSdSZW1vdmVJbmlGaWxlJywgdSdSZW1vdmVJbmlGaWxlJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdQcmltYXJ5IGtleSwgbm9uLWxvY2FsaXplZCB0b2tlbi4nKSwKLSh1J1JlbW92ZVJlZ2lzdHJ5JywgdSdOYW1lJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1RoZSByZWdpc3RyeSB2YWx1ZSBuYW1lLicpLAotKHUnUmVtb3ZlUmVnaXN0cnknLCB1J0tleScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnUmVnUGF0aCcsIE5vbmUsIHUnVGhlIGtleSBmb3IgdGhlIHJlZ2lzdHJ5IHZhbHVlLicpLAotKHUnUmVtb3ZlUmVnaXN0cnknLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnRm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IHRhYmxlIHJlZmVyZW5jaW5nIGNvbXBvbmVudCB0aGF0IGNvbnRyb2xzIHRoZSBkZWxldGlvbiBvZiB0aGUgcmVnaXN0cnkgdmFsdWUuJyksCi0odSdSZW1vdmVSZWdpc3RyeScsIHUnUm9vdCcsIHUnTicsIC0xLCAzLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBwcmVkZWZpbmVkIHJvb3Qga2V5IGZvciB0aGUgcmVnaXN0cnkgdmFsdWUsIG9uZSBvZiBycmtFbnVtJyksCi0odSdSZW1vdmVSZWdpc3RyeScsIHUnUmVtb3ZlUmVnaXN0cnknLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1ByaW1hcnkga2V5LCBub24tbG9jYWxpemVkIHRva2VuLicpLAotKHUnUmVzZXJ2ZUNvc3QnLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUmVzZXJ2ZSBhIHNwZWNpZmllZCBhbW91bnQgb2Ygc3BhY2UgaWYgdGhpcyBjb21wb25lbnQgaXMgdG8gYmUgaW5zdGFsbGVkLicpLAotKHUnUmVzZXJ2ZUNvc3QnLCB1J1Jlc2VydmVGb2xkZXInLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J05hbWUgb2YgYSBwcm9wZXJ0eSB3aG9zZSB2YWx1ZSBpcyBhc3N1bWVkIHRvIHJlc29sdmUgdG8gdGhlIGZ1bGwgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5JyksCi0odSdSZXNlcnZlQ29zdCcsIHUnUmVzZXJ2ZUtleScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUHJpbWFyeSBrZXkgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEgcGFydGljdWxhciBSZXNlcnZlQ29zdCByZWNvcmQnKSwKLSh1J1Jlc2VydmVDb3N0JywgdSdSZXNlcnZlTG9jYWwnLCB1J04nLCAwLCAyMTQ3NDgzNjQ3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Rpc2sgc3BhY2UgdG8gcmVzZXJ2ZSBpZiBsaW5rZWQgY29tcG9uZW50IGlzIGluc3RhbGxlZCBsb2NhbGx5LicpLAotKHUnUmVzZXJ2ZUNvc3QnLCB1J1Jlc2VydmVTb3VyY2UnLCB1J04nLCAwLCAyMTQ3NDgzNjQ3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Rpc2sgc3BhY2UgdG8gcmVzZXJ2ZSBpZiBsaW5rZWQgY29tcG9uZW50IGlzIGluc3RhbGxlZCB0byBydW4gZnJvbSB0aGUgc291cmNlIGxvY2F0aW9uLicpLAotKHUnU2VsZlJlZycsIHUnRmlsZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZpbGUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J0ZvcmVpZ24ga2V5IGludG8gdGhlIEZpbGUgdGFibGUgZGVub3RpbmcgdGhlIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQuJyksCi0odSdTZWxmUmVnJywgdSdDb3N0JywgdSdZJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGNvc3Qgb2YgcmVnaXN0ZXJpbmcgdGhlIG1vZHVsZS4nKSwKLSh1J1NlcnZpY2VDb250cm9sJywgdSdOYW1lJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J05hbWUgb2YgYSBzZXJ2aWNlLiAvLCBcXCwgY29tbWEgYW5kIHNwYWNlIGFyZSBpbnZhbGlkJyksCi0odSdTZXJ2aWNlQ29udHJvbCcsIHUnRXZlbnQnLCB1J04nLCAwLCAxODcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQml0IGZpZWxkOiAgSW5zdGFsbDogIDB4MSA9IFN0YXJ0LCAweDIgPSBTdG9wLCAweDggPSBEZWxldGUsIFVuaW5zdGFsbDogMHgxMCA9IFN0YXJ0LCAweDIwID0gU3RvcCwgMHg4MCA9IERlbGV0ZScpLAotKHUnU2VydmljZUNvbnRyb2wnLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUmVxdWlyZWQgZm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IFRhYmxlIHRoYXQgY29udHJvbHMgdGhlIHN0YXJ0dXAgb2YgdGhlIHNlcnZpY2UnKSwKLSh1J1NlcnZpY2VDb250cm9sJywgdSdTZXJ2aWNlQ29udHJvbCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUHJpbWFyeSBrZXksIG5vbi1sb2NhbGl6ZWQgdG9rZW4uJyksCi0odSdTZXJ2aWNlQ29udHJvbCcsIHUnQXJndW1lbnRzJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J0FyZ3VtZW50cyBmb3IgdGhlIHNlcnZpY2UuICBTZXBhcmF0ZSBieSBbfl0uJyksCi0odSdTZXJ2aWNlQ29udHJvbCcsIHUnV2FpdCcsIHUnWScsIDAsIDEsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnQm9vbGVhbiBmb3Igd2hldGhlciB0byB3YWl0IGZvciB0aGUgc2VydmljZSB0byBmdWxseSBzdGFydCcpLAotKHUnU2VydmljZUluc3RhbGwnLCB1J05hbWUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnSW50ZXJuYWwgTmFtZSBvZiB0aGUgU2VydmljZScpLAotKHUnU2VydmljZUluc3RhbGwnLCB1J0Rlc2NyaXB0aW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdEZXNjcmlwdGlvbiBvZiBzZXJ2aWNlLicpLAotKHUnU2VydmljZUluc3RhbGwnLCB1J0NvbXBvbmVudF8nLCB1J04nLCBOb25lLCBOb25lLCB1J0NvbXBvbmVudCcsIDEsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUmVxdWlyZWQgZm9yZWlnbiBrZXkgaW50byB0aGUgQ29tcG9uZW50IFRhYmxlIHRoYXQgY29udHJvbHMgdGhlIHN0YXJ0dXAgb2YgdGhlIHNlcnZpY2UnKSwKLSh1J1NlcnZpY2VJbnN0YWxsJywgdSdBcmd1bWVudHMnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnQXJndW1lbnRzIHRvIGluY2x1ZGUgaW4gZXZlcnkgc3RhcnQgb2YgdGhlIHNlcnZpY2UsIHBhc3NlZCB0byBXaW5NYWluJyksCi0odSdTZXJ2aWNlSW5zdGFsbCcsIHUnU2VydmljZUluc3RhbGwnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1ByaW1hcnkga2V5LCBub24tbG9jYWxpemVkIHRva2VuLicpLAotKHUnU2VydmljZUluc3RhbGwnLCB1J0RlcGVuZGVuY2llcycsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJywgTm9uZSwgdSdPdGhlciBzZXJ2aWNlcyB0aGlzIGRlcGVuZHMgb24gdG8gc3RhcnQuICBTZXBhcmF0ZSBieSBbfl0sIGFuZCBlbmQgd2l0aCBbfl1bfl0nKSwKLSh1J1NlcnZpY2VJbnN0YWxsJywgdSdEaXNwbGF5TmFtZScsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRm9ybWF0dGVkJywgTm9uZSwgdSdFeHRlcm5hbCBOYW1lIG9mIHRoZSBTZXJ2aWNlJyksCi0odSdTZXJ2aWNlSW5zdGFsbCcsIHUnRXJyb3JDb250cm9sJywgdSdOJywgLTIxNDc0ODM2NDcsIDIxNDc0ODM2NDcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnU2V2ZXJpdHkgb2YgZXJyb3IgaWYgc2VydmljZSBmYWlscyB0byBzdGFydCcpLAotKHUnU2VydmljZUluc3RhbGwnLCB1J0xvYWRPcmRlckdyb3VwJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J0xvYWRPcmRlckdyb3VwJyksCi0odSdTZXJ2aWNlSW5zdGFsbCcsIHUnUGFzc3dvcmQnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUncGFzc3dvcmQgdG8gcnVuIHNlcnZpY2Ugd2l0aC4gICh3aXRoIFN0YXJ0TmFtZSknKSwKLSh1J1NlcnZpY2VJbnN0YWxsJywgdSdTZXJ2aWNlVHlwZScsIHUnTicsIC0yMTQ3NDgzNjQ3LCAyMTQ3NDgzNjQ3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1R5cGUgb2YgdGhlIHNlcnZpY2UnKSwKLSh1J1NlcnZpY2VJbnN0YWxsJywgdSdTdGFydE5hbWUnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVXNlciBvciBvYmplY3QgbmFtZSB0byBydW4gc2VydmljZSBhcycpLAotKHUnU2VydmljZUluc3RhbGwnLCB1J1N0YXJ0VHlwZScsIHUnTicsIDAsIDQsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVHlwZSBvZiB0aGUgc2VydmljZScpLAotKHUnU2hvcnRjdXQnLCB1J05hbWUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0ZpbGVuYW1lJywgTm9uZSwgdSdUaGUgbmFtZSBvZiB0aGUgc2hvcnRjdXQgdG8gYmUgY3JlYXRlZC4nKSwKLSh1J1Nob3J0Y3V0JywgdSdEZXNjcmlwdGlvbicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgc2hvcnRjdXQuJyksCi0odSdTaG9ydGN1dCcsIHUnQ29tcG9uZW50XycsIHUnTicsIE5vbmUsIE5vbmUsIHUnQ29tcG9uZW50JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBDb21wb25lbnQgdGFibGUgZGVub3RpbmcgdGhlIGNvbXBvbmVudCB3aG9zZSBzZWxlY3Rpb24gZ2F0ZXMgdGhlIHNob3J0Y3V0IGNyZWF0aW9uL2RlbGV0aW9uLicpLAotKHUnU2hvcnRjdXQnLCB1J0ljb25fJywgdSdZJywgTm9uZSwgTm9uZSwgdSdJY29uJywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBGaWxlIHRhYmxlIGRlbm90aW5nIHRoZSBleHRlcm5hbCBpY29uIGZpbGUgZm9yIHRoZSBzaG9ydGN1dC4nKSwKLSh1J1Nob3J0Y3V0JywgdSdJY29uSW5kZXgnLCB1J1knLCAtMzI3NjcsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBpY29uIGluZGV4IGZvciB0aGUgc2hvcnRjdXQuJyksCi0odSdTaG9ydGN1dCcsIHUnRGlyZWN0b3J5XycsIHUnTicsIE5vbmUsIE5vbmUsIHUnRGlyZWN0b3J5JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdGb3JlaWduIGtleSBpbnRvIHRoZSBEaXJlY3RvcnkgdGFibGUgZGVub3RpbmcgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2hvcnRjdXQgZmlsZSBpcyBjcmVhdGVkLicpLAotKHUnU2hvcnRjdXQnLCB1J1RhcmdldCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnU2hvcnRjdXQnLCBOb25lLCB1J1RoZSBzaG9ydGN1dCB0YXJnZXQuIFRoaXMgaXMgdXN1YWxseSBhIHByb3BlcnR5IHRoYXQgaXMgZXhwYW5kZWQgdG8gYSBmaWxlIG9yIGEgZm9sZGVyIHRoYXQgdGhlIHNob3J0Y3V0IHBvaW50cyB0by4nKSwKLSh1J1Nob3J0Y3V0JywgdSdBcmd1bWVudHMnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9yIHRoZSBzaG9ydGN1dC4nKSwKLSh1J1Nob3J0Y3V0JywgdSdTaG9ydGN1dCcsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnSWRlbnRpZmllcicsIE5vbmUsIHUnUHJpbWFyeSBrZXksIG5vbi1sb2NhbGl6ZWQgdG9rZW4uJyksCi0odSdTaG9ydGN1dCcsIHUnSG90a2V5JywgdSdZJywgMCwgMzI3NjcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGhvdGtleSBmb3IgdGhlIHNob3J0Y3V0LiBJdCBoYXMgdGhlIHZpcnR1YWwta2V5IGNvZGUgZm9yIHRoZSBrZXkgaW4gdGhlIGxvdy1vcmRlciBieXRlLCBhbmQgdGhlIG1vZGlmaWVyIGZsYWdzIGluIHRoZSBoaWdoLW9yZGVyIGJ5dGUuICcpLAotKHUnU2hvcnRjdXQnLCB1J1Nob3dDbWQnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1JzE7Mzs3JywgdSdUaGUgc2hvdyBjb21tYW5kIGZvciB0aGUgYXBwbGljYXRpb24gd2luZG93LlRoZSBmb2xsb3dpbmcgdmFsdWVzIG1heSBiZSB1c2VkLicpLAotKHUnU2hvcnRjdXQnLCB1J1drRGlyJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdOYW1lIG9mIHByb3BlcnR5IGRlZmluaW5nIGxvY2F0aW9uIG9mIHdvcmtpbmcgZGlyZWN0b3J5LicpLAotKHUnU2lnbmF0dXJlJywgdSdGaWxlTmFtZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnRmlsZW5hbWUnLCBOb25lLCB1J1RoZSBuYW1lIG9mIHRoZSBmaWxlLiBUaGlzIG1heSBjb250YWluIGEgInNob3J0IG5hbWV8bG9uZyBuYW1lIiBwYWlyLicpLAotKHUnU2lnbmF0dXJlJywgdSdTaWduYXR1cmUnLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1RoZSB0YWJsZSBrZXkuIFRoZSBTaWduYXR1cmUgcmVwcmVzZW50cyBhIHVuaXF1ZSBmaWxlIHNpZ25hdHVyZS4nKSwKLSh1J1NpZ25hdHVyZScsIHUnTGFuZ3VhZ2VzJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdMYW5ndWFnZScsIE5vbmUsIHUnVGhlIGxhbmd1YWdlcyBzdXBwb3J0ZWQgYnkgdGhlIGZpbGUuJyksCi0odSdTaWduYXR1cmUnLCB1J01heERhdGUnLCB1J1knLCAwLCAyMTQ3NDgzNjQ3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBtYXhpbXVtIGNyZWF0aW9uIGRhdGUgb2YgdGhlIGZpbGUuJyksCi0odSdTaWduYXR1cmUnLCB1J01heFNpemUnLCB1J1knLCAwLCAyMTQ3NDgzNjQ3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGZpbGUuICcpLAotKHUnU2lnbmF0dXJlJywgdSdNYXhWZXJzaW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdUaGUgbWF4aW11bSB2ZXJzaW9uIG9mIHRoZSBmaWxlLicpLAotKHUnU2lnbmF0dXJlJywgdSdNaW5EYXRlJywgdSdZJywgMCwgMjE0NzQ4MzY0NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgbWluaW11bSBjcmVhdGlvbiBkYXRlIG9mIHRoZSBmaWxlLicpLAotKHUnU2lnbmF0dXJlJywgdSdNaW5TaXplJywgdSdZJywgMCwgMjE0NzQ4MzY0NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgbWluaW11bSBzaXplIG9mIHRoZSBmaWxlLicpLAotKHUnU2lnbmF0dXJlJywgdSdNaW5WZXJzaW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgdSdUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBmaWxlLicpLAotKHUnVHlwZUxpYicsIHUnRmVhdHVyZV8nLCB1J04nLCBOb25lLCBOb25lLCB1J0ZlYXR1cmUnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlcXVpcmVkIGZvcmVpZ24ga2V5IGludG8gdGhlIEZlYXR1cmUgVGFibGUsIHNwZWNpZnlpbmcgdGhlIGZlYXR1cmUgdG8gdmFsaWRhdGUgb3IgaW5zdGFsbCBpbiBvcmRlciBmb3IgdGhlIHR5cGUgbGlicmFyeSB0byBiZSBvcGVyYXRpb25hbC4nKSwKLSh1J1R5cGVMaWInLCB1J0Rlc2NyaXB0aW9uJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUZXh0JywgTm9uZSwgTm9uZSksCi0odSdUeXBlTGliJywgdSdDb21wb25lbnRfJywgdSdOJywgTm9uZSwgTm9uZSwgdSdDb21wb25lbnQnLCAxLCB1J0lkZW50aWZpZXInLCBOb25lLCB1J1JlcXVpcmVkIGZvcmVpZ24ga2V5IGludG8gdGhlIENvbXBvbmVudCBUYWJsZSwgc3BlY2lmeWluZyB0aGUgY29tcG9uZW50IGZvciB3aGljaCB0byByZXR1cm4gYSBwYXRoIHdoZW4gY2FsbGVkIHRocm91Z2ggTG9jYXRlQ29tcG9uZW50LicpLAotKHUnVHlwZUxpYicsIHUnRGlyZWN0b3J5XycsIHUnWScsIE5vbmUsIE5vbmUsIHUnRGlyZWN0b3J5JywgMSwgdSdJZGVudGlmaWVyJywgTm9uZSwgdSdPcHRpb25hbC4gVGhlIGZvcmVpZ24ga2V5IGludG8gdGhlIERpcmVjdG9yeSB0YWJsZSBkZW5vdGluZyB0aGUgcGF0aCB0byB0aGUgaGVscCBmaWxlIGZvciB0aGUgdHlwZSBsaWJyYXJ5LicpLAotKHUnVHlwZUxpYicsIHUnTGFuZ3VhZ2UnLCB1J04nLCAwLCAzMjc2NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGxpYnJhcnkuJyksCi0odSdUeXBlTGliJywgdSdWZXJzaW9uJywgdSdZJywgMCwgMTY3NzcyMTUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuIFRoZSBtaW5vciB2ZXJzaW9uIGlzIGluIHRoZSBsb3dlciA4IGJpdHMgb2YgdGhlIGludGVnZXIuIFRoZSBtYWpvciB2ZXJzaW9uIGlzIGluIHRoZSBuZXh0IDE2IGJpdHMuICcpLAotKHUnVHlwZUxpYicsIHUnQ29zdCcsIHUnWScsIDAsIDIxNDc0ODM2NDcsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGhlIGNvc3QgYXNzb2NpYXRlZCB3aXRoIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIHR5cGVsaWIuIFRoaXMgY29sdW1uIGlzIGN1cnJlbnRseSBvcHRpb25hbC4nKSwKLSh1J1R5cGVMaWInLCB1J0xpYklEJywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdHdWlkJywgTm9uZSwgdSdUaGUgR1VJRCB0aGF0IHJlcHJlc2VudHMgdGhlIGxpYnJhcnkuJyksCi0odSdVcGdyYWRlJywgdSdBdHRyaWJ1dGVzJywgdSdOJywgMCwgMjE0NzQ4MzY0NywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdUaGUgYXR0cmlidXRlcyBvZiB0aGlzIHByb2R1Y3Qgc2V0LicpLAotKHUnVXBncmFkZScsIHUnUmVtb3ZlJywgdSdZJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdGb3JtYXR0ZWQnLCBOb25lLCB1J1RoZSBsaXN0IG9mIGZlYXR1cmVzIHRvIHJlbW92ZSB3aGVuIHVuaW5zdGFsbGluZyBhIHByb2R1Y3QgZnJvbSB0aGlzIHNldC4gIFRoZSBkZWZhdWx0IGlzICJBTEwiLicpLAotKHUnVXBncmFkZScsIHUnTGFuZ3VhZ2UnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0xhbmd1YWdlJywgTm9uZSwgdSdBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGxhbmd1YWdlcyBmb3IgZWl0aGVyIHByb2R1Y3RzIGluIHRoaXMgc2V0IG9yIHByb2R1Y3RzIG5vdCBpbiB0aGlzIHNldC4nKSwKLSh1J1VwZ3JhZGUnLCB1J0FjdGlvblByb3BlcnR5JywgdSdOJywgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgdSdVcHBlckNhc2UnLCBOb25lLCB1J1RoZSBwcm9wZXJ0eSB0byBzZXQgd2hlbiBhIHByb2R1Y3QgaW4gdGhpcyBzZXQgaXMgZm91bmQuJyksCi0odSdVcGdyYWRlJywgdSdVcGdyYWRlQ29kZScsIHUnTicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnR3VpZCcsIE5vbmUsIHUnVGhlIFVwZ3JhZGVDb2RlIEdVSUQgYmVsb25naW5nIHRvIHRoZSBwcm9kdWN0cyBpbiB0aGlzIHNldC4nKSwKLSh1J1VwZ3JhZGUnLCB1J1ZlcnNpb25NYXgnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1RoZSBtYXhpbXVtIFByb2R1Y3RWZXJzaW9uIG9mIHRoZSBwcm9kdWN0cyBpbiB0aGlzIHNldC4gIFRoZSBzZXQgbWF5IG9yIG1heSBub3QgaW5jbHVkZSBwcm9kdWN0cyB3aXRoIHRoaXMgcGFydGljdWxhciB2ZXJzaW9uLicpLAotKHUnVXBncmFkZScsIHUnVmVyc2lvbk1pbicsIHUnWScsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIG1pbmltdW0gUHJvZHVjdFZlcnNpb24gb2YgdGhlIHByb2R1Y3RzIGluIHRoaXMgc2V0LiAgVGhlIHNldCBtYXkgb3IgbWF5IG5vdCBpbmNsdWRlIHByb2R1Y3RzIHdpdGggdGhpcyBwYXJ0aWN1bGFyIHZlcnNpb24uJyksCi0odSdWZXJiJywgdSdTZXF1ZW5jZScsIHUnWScsIDAsIDMyNzY3LCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J09yZGVyIHdpdGhpbiB0aGUgdmVyYnMgZm9yIGEgcGFydGljdWxhciBleHRlbnNpb24uIEFsc28gdXNlZCBzaW1wbHkgdG8gc3BlY2lmeSB0aGUgZGVmYXVsdCB2ZXJiLicpLAotKHUnVmVyYicsIHUnQXJndW1lbnQnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnT3B0aW9uYWwgdmFsdWUgZm9yIHRoZSBjb21tYW5kIGFyZ3VtZW50cy4nKSwKLSh1J1ZlcmInLCB1J0V4dGVuc2lvbl8nLCB1J04nLCBOb25lLCBOb25lLCB1J0V4dGVuc2lvbicsIDEsIHUnVGV4dCcsIE5vbmUsIHUnVGhlIGV4dGVuc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlIHJvdy4nKSwKLSh1J1ZlcmInLCB1J1ZlcmInLCB1J04nLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J1RleHQnLCBOb25lLCB1J1RoZSB2ZXJiIGZvciB0aGUgY29tbWFuZC4nKSwKLSh1J1ZlcmInLCB1J0NvbW1hbmQnLCB1J1knLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCB1J0Zvcm1hdHRlZCcsIE5vbmUsIHUnVGhlIGNvbW1hbmQgdGV4dC4nKSwKLV0KLQotRXJyb3IgPSBbCi0oMCwgdSd7e0ZhdGFsIGVycm9yOiB9fScpLAotKDEsIHUne3tFcnJvciBbMV0uIH19JyksCi0oMiwgdSdXYXJuaW5nIFsxXS4gJyksCi0oMywgTm9uZSksCi0oNCwgdSdJbmZvIFsxXS4gJyksCi0oNSwgdSdUaGUgaW5zdGFsbGVyIGhhcyBlbmNvdW50ZXJlZCBhbiB1bmV4cGVjdGVkIGVycm9yIGluc3RhbGxpbmcgdGhpcyBwYWNrYWdlLiBUaGlzIG1heSBpbmRpY2F0ZSBhIHByb2JsZW0gd2l0aCB0aGlzIHBhY2thZ2UuIFRoZSBlcnJvciBjb2RlIGlzIFsxXS4ge3tUaGUgYXJndW1lbnRzIGFyZTogWzJdLCBbM10sIFs0XX19JyksCi0oNiwgTm9uZSksCi0oNywgdSd7e0Rpc2sgZnVsbDogfX0nKSwKLSg4LCB1J0FjdGlvbiBbVGltZV06IFsxXS4gWzJdJyksCi0oOSwgdSdbUHJvZHVjdE5hbWVdJyksCi0oMTAsIHUne1syXX17LCBbM119eywgWzRdfScpLAotKDExLCB1J01lc3NhZ2UgdHlwZTogWzFdLCBBcmd1bWVudDogWzJdJyksCi0oMTIsIHUnPT09IExvZ2dpbmcgc3RhcnRlZDogW0RhdGVdICBbVGltZV0gPT09JyksCi0oMTMsIHUnPT09IExvZ2dpbmcgc3RvcHBlZDogW0RhdGVdICBbVGltZV0gPT09JyksCi0oMTQsIHUnQWN0aW9uIHN0YXJ0IFtUaW1lXTogWzFdLicpLAotKDE1LCB1J0FjdGlvbiBlbmRlZCBbVGltZV06IFsxXS4gUmV0dXJuIHZhbHVlIFsyXS4nKSwKLSgxNiwgdSdUaW1lIHJlbWFpbmluZzoge1sxXSBtaW51dGVzIH17WzJdIHNlY29uZHN9JyksCi0oMTcsIHUnT3V0IG9mIG1lbW9yeS4gU2h1dCBkb3duIG90aGVyIGFwcGxpY2F0aW9ucyBiZWZvcmUgcmV0cnlpbmcuJyksCi0oMTgsIHUnSW5zdGFsbGVyIGlzIG5vIGxvbmdlciByZXNwb25kaW5nLicpLAotKDE5LCB1J0luc3RhbGxlciBzdG9wcGVkIHByZW1hdHVyZWx5LicpLAotKDIwLCB1J1BsZWFzZSB3YWl0IHdoaWxlIFdpbmRvd3MgY29uZmlndXJlcyBbUHJvZHVjdE5hbWVdJyksCi0oMjEsIHUnR2F0aGVyaW5nIHJlcXVpcmVkIGluZm9ybWF0aW9uLi4uJyksCi0oMjIsIHUnUmVtb3Zpbmcgb2xkZXIgdmVyc2lvbnMgb2YgdGhpcyBhcHBsaWNhdGlvbi4uLicpLAotKDIzLCB1J1ByZXBhcmluZyB0byByZW1vdmUgb2xkZXIgdmVyc2lvbnMgb2YgdGhpcyBhcHBsaWNhdGlvbi4uLicpLAotKDMyLCB1J3tbUHJvZHVjdE5hbWVdIH1TZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LicpLAotKDMzLCB1J3tbUHJvZHVjdE5hbWVdIH1TZXR1cCBmYWlsZWQuJyksCi0oMTEwMSwgdSdFcnJvciByZWFkaW5nIGZyb20gZmlsZTogWzJdLiB7eyBTeXN0ZW0gZXJyb3IgWzNdLn19ICBWZXJpZnkgdGhhdCB0aGUgZmlsZSBleGlzdHMgYW5kIHRoYXQgeW91IGNhbiBhY2Nlc3MgaXQuJyksCi0oMTMwMSwgdSJDYW5ub3QgY3JlYXRlIHRoZSBmaWxlICdbMl0nLiAgQSBkaXJlY3Rvcnkgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuICBDYW5jZWwgdGhlIGluc3RhbGwgYW5kIHRyeSBpbnN0YWxsaW5nIHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uLiIpLAotKDEzMDIsIHUnUGxlYXNlIGluc2VydCB0aGUgZGlzazogWzJdJyksCi0oMTMwMywgdSdUaGUgaW5zdGFsbGVyIGhhcyBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlcyB0byBhY2Nlc3MgdGhpcyBkaXJlY3Rvcnk6IFsyXS4gIFRoZSBpbnN0YWxsYXRpb24gY2Fubm90IGNvbnRpbnVlLiAgTG9nIG9uIGFzIGFkbWluaXN0cmF0b3Igb3IgY29udGFjdCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yLicpLAotKDEzMDQsIHUnRXJyb3Igd3JpdGluZyB0byBmaWxlOiBbMl0uICBWZXJpZnkgdGhhdCB5b3UgaGF2ZSBhY2Nlc3MgdG8gdGhhdCBkaXJlY3RvcnkuJyksCi0oMTMwNSwgdSdFcnJvciByZWFkaW5nIGZyb20gZmlsZSBbMl0uIHt7IFN5c3RlbSBlcnJvciBbM10ufX0gVmVyaWZ5IHRoYXQgdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IHlvdSBjYW4gYWNjZXNzIGl0LicpLAotKDEzMDYsIHUiQW5vdGhlciBhcHBsaWNhdGlvbiBoYXMgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgZmlsZSAnWzJdJy4gIFBsZWFzZSBzaHV0IGRvd24gYWxsIG90aGVyIGFwcGxpY2F0aW9ucywgdGhlbiBjbGljayBSZXRyeS4iKSwKLSgxMzA3LCB1J1RoZXJlIGlzIG5vdCBlbm91Z2ggZGlzayBzcGFjZSB0byBpbnN0YWxsIHRoaXMgZmlsZTogWzJdLiAgRnJlZSBzb21lIGRpc2sgc3BhY2UgYW5kIGNsaWNrIFJldHJ5LCBvciBjbGljayBDYW5jZWwgdG8gZXhpdC4nKSwKLSgxMzA4LCB1J1NvdXJjZSBmaWxlIG5vdCBmb3VuZDogWzJdLiAgVmVyaWZ5IHRoYXQgdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IHlvdSBjYW4gYWNjZXNzIGl0LicpLAotKDEzMDksIHUnRXJyb3IgcmVhZGluZyBmcm9tIGZpbGU6IFszXS4ge3sgU3lzdGVtIGVycm9yIFsyXS59fSAgVmVyaWZ5IHRoYXQgdGhlIGZpbGUgZXhpc3RzIGFuZCB0aGF0IHlvdSBjYW4gYWNjZXNzIGl0LicpLAotKDEzMTAsIHUnRXJyb3Igd3JpdGluZyB0byBmaWxlOiBbM10uIHt7IFN5c3RlbSBlcnJvciBbMl0ufX0gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeS4nKSwKLSgxMzExLCB1J1NvdXJjZSBmaWxlIG5vdCBmb3VuZHt7KGNhYmluZXQpfX06IFsyXS4gIFZlcmlmeSB0aGF0IHRoZSBmaWxlIGV4aXN0cyBhbmQgdGhhdCB5b3UgY2FuIGFjY2VzcyBpdC4nKSwKLSgxMzEyLCB1IkNhbm5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSAnWzJdJy4gIEEgZmlsZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4gIFBsZWFzZSByZW5hbWUgb3IgcmVtb3ZlIHRoZSBmaWxlIGFuZCBjbGljayByZXRyeSwgb3IgY2xpY2sgQ2FuY2VsIHRvIGV4aXQuIiksCi0oMTMxMywgdSdUaGUgdm9sdW1lIFsyXSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUuICBQbGVhc2Ugc2VsZWN0IGFub3RoZXIuJyksCi0oMTMxNCwgdSJUaGUgc3BlY2lmaWVkIHBhdGggJ1syXScgaXMgdW5hdmFpbGFibGUuIiksCi0oMTMxNSwgdSdVbmFibGUgdG8gd3JpdGUgdG8gdGhlIHNwZWNpZmllZCBmb2xkZXI6IFsyXS4nKSwKLSgxMzE2LCB1J0EgbmV0d29yayBlcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSB0aGUgZmlsZTogWzJdJyksCi0oMTMxNywgdSdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiBbMl0nKSwKLSgxMzE4LCB1J0EgbmV0d29yayBlcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5OiBbMl0nKSwKLSgxMzE5LCB1J0EgbmV0d29yayBlcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIG9wZW4gdGhlIHNvdXJjZSBmaWxlIGNhYmluZXQ6IFsyXScpLAotKDEzMjAsIHUnVGhlIHNwZWNpZmllZCBwYXRoIGlzIHRvbyBsb25nOiBbMl0nKSwKLSgxMzIxLCB1J1RoZSBJbnN0YWxsZXIgaGFzIGluc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIG1vZGlmeSB0aGlzIGZpbGU6IFsyXS4nKSwKLSgxMzIyLCB1IkEgcG9ydGlvbiBvZiB0aGUgZm9sZGVyIHBhdGggJ1syXScgaXMgaW52YWxpZC4gIEl0IGlzIGVpdGhlciBlbXB0eSBvciBleGNlZWRzIHRoZSBsZW5ndGggYWxsb3dlZCBieSB0aGUgc3lzdGVtLiIpLAotKDEzMjMsIHUiVGhlIGZvbGRlciBwYXRoICdbMl0nIGNvbnRhaW5zIHdvcmRzIHRoYXQgYXJlIG5vdCB2YWxpZCBpbiBmb2xkZXIgcGF0aHMuIiksCi0oMTMyNCwgdSJUaGUgZm9sZGVyIHBhdGggJ1syXScgY29udGFpbnMgYW4gaW52YWxpZCBjaGFyYWN0ZXIuIiksCi0oMTMyNSwgdSInWzJdJyBpcyBub3QgYSB2YWxpZCBzaG9ydCBmaWxlIG5hbWUuIiksCi0oMTMyNiwgdSdFcnJvciBnZXR0aW5nIGZpbGUgc2VjdXJpdHk6IFszXSBHZXRMYXN0RXJyb3I6IFsyXScpLAotKDEzMjcsIHUnSW52YWxpZCBEcml2ZTogWzJdJyksCi0oMTMyOCwgdSdFcnJvciBhcHBseWluZyBwYXRjaCB0byBmaWxlIFsyXS4gIEl0IGhhcyBwcm9iYWJseSBiZWVuIHVwZGF0ZWQgYnkgb3RoZXIgbWVhbnMsIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjb250YWN0IHlvdXIgcGF0Y2ggdmVuZG9yLiAge3tTeXN0ZW0gRXJyb3I6IFszXX19JyksCi0oMTMyOSwgdSdBIGZpbGUgdGhhdCBpcyByZXF1aXJlZCBjYW5ub3QgYmUgaW5zdGFsbGVkIGJlY2F1c2UgdGhlIGNhYmluZXQgZmlsZSBbMl0gaXMgbm90IGRpZ2l0YWxseSBzaWduZWQuICBUaGlzIG1heSBpbmRpY2F0ZSB0aGF0IHRoZSBjYWJpbmV0IGZpbGUgaXMgY29ycnVwdC4nKSwKLSgxMzMwLCB1J0EgZmlsZSB0aGF0IGlzIHJlcXVpcmVkIGNhbm5vdCBiZSBpbnN0YWxsZWQgYmVjYXVzZSB0aGUgY2FiaW5ldCBmaWxlIFsyXSBoYXMgYW4gaW52YWxpZCBkaWdpdGFsIHNpZ25hdHVyZS4gIFRoaXMgbWF5IGluZGljYXRlIHRoYXQgdGhlIGNhYmluZXQgZmlsZSBpcyBjb3JydXB0Lnt7ICBFcnJvciBbM10gd2FzIHJldHVybmVkIGJ5IFdpblZlcmlmeVRydXN0Ln19JyksCi0oMTMzMSwgdSdGYWlsZWQgdG8gY29ycmVjdGx5IGNvcHkgWzJdIGZpbGU6IENSQyBlcnJvci4nKSwKLSgxMzMyLCB1J0ZhaWxlZCB0byBjb3JyZWN0bHkgbW92ZSBbMl0gZmlsZTogQ1JDIGVycm9yLicpLAotKDEzMzMsIHUnRmFpbGVkIHRvIGNvcnJlY3RseSBwYXRjaCBbMl0gZmlsZTogQ1JDIGVycm9yLicpLAotKDEzMzQsIHUiVGhlIGZpbGUgJ1syXScgY2Fubm90IGJlIGluc3RhbGxlZCBiZWNhdXNlIHRoZSBmaWxlIGNhbm5vdCBiZSBmb3VuZCBpbiBjYWJpbmV0IGZpbGUgJ1szXScuIFRoaXMgY291bGQgaW5kaWNhdGUgYSBuZXR3b3JrIGVycm9yLCBhbiBlcnJvciByZWFkaW5nIGZyb20gdGhlIENELVJPTSwgb3IgYSBwcm9ibGVtIHdpdGggdGhpcyBwYWNrYWdlLiIpLAotKDEzMzUsIHUiVGhlIGNhYmluZXQgZmlsZSAnWzJdJyByZXF1aXJlZCBmb3IgdGhpcyBpbnN0YWxsYXRpb24gaXMgY29ycnVwdCBhbmQgY2Fubm90IGJlIHVzZWQuIFRoaXMgY291bGQgaW5kaWNhdGUgYSBuZXR3b3JrIGVycm9yLCBhbiBlcnJvciByZWFkaW5nIGZyb20gdGhlIENELVJPTSwgb3IgYSBwcm9ibGVtIHdpdGggdGhpcyBwYWNrYWdlLiIpLAotKDEzMzYsIHUnVGhlcmUgd2FzIGFuIGVycm9yIGNyZWF0aW5nIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdCBpcyBuZWVkZWQgdG8gY29tcGxldGUgdGhpcyBpbnN0YWxsYXRpb24ue3sgIEZvbGRlcjogWzNdLiBTeXN0ZW0gZXJyb3IgY29kZTogWzJdfX0nKSwKLSgxNDAxLCB1J0NvdWxkIG5vdCBjcmVhdGUga2V5OiBbMl0uIHt7IFN5c3RlbSBlcnJvciBbM10ufX0gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIHN1ZmZpY2llbnQgYWNjZXNzIHRvIHRoYXQga2V5LCBvciBjb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuICcpLAotKDE0MDIsIHUnQ291bGQgbm90IG9wZW4ga2V5OiBbMl0uIHt7IFN5c3RlbSBlcnJvciBbM10ufX0gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIHN1ZmZpY2llbnQgYWNjZXNzIHRvIHRoYXQga2V5LCBvciBjb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuICcpLAotKDE0MDMsIHUnQ291bGQgbm90IGRlbGV0ZSB2YWx1ZSBbMl0gZnJvbSBrZXkgWzNdLiB7eyBTeXN0ZW0gZXJyb3IgWzRdLn19ICBWZXJpZnkgdGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IGFjY2VzcyB0byB0aGF0IGtleSwgb3IgY29udGFjdCB5b3VyIHN1cHBvcnQgcGVyc29ubmVsLiAnKSwKLSgxNDA0LCB1J0NvdWxkIG5vdCBkZWxldGUga2V5IFsyXS4ge3sgU3lzdGVtIGVycm9yIFszXS59fSAgVmVyaWZ5IHRoYXQgeW91IGhhdmUgc3VmZmljaWVudCBhY2Nlc3MgdG8gdGhhdCBrZXksIG9yIGNvbnRhY3QgeW91ciBzdXBwb3J0IHBlcnNvbm5lbC4gJyksCi0oMTQwNSwgdSdDb3VsZCBub3QgcmVhZCB2YWx1ZSBbMl0gZnJvbSBrZXkgWzNdLiB7eyBTeXN0ZW0gZXJyb3IgWzRdLn19ICBWZXJpZnkgdGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IGFjY2VzcyB0byB0aGF0IGtleSwgb3IgY29udGFjdCB5b3VyIHN1cHBvcnQgcGVyc29ubmVsLiAnKSwKLSgxNDA2LCB1J0NvdWxkIG5vdCB3cml0ZSB2YWx1ZSBbMl0gdG8ga2V5IFszXS4ge3sgU3lzdGVtIGVycm9yIFs0XS59fSAgVmVyaWZ5IHRoYXQgeW91IGhhdmUgc3VmZmljaWVudCBhY2Nlc3MgdG8gdGhhdCBrZXksIG9yIGNvbnRhY3QgeW91ciBzdXBwb3J0IHBlcnNvbm5lbC4nKSwKLSgxNDA3LCB1J0NvdWxkIG5vdCBnZXQgdmFsdWUgbmFtZXMgZm9yIGtleSBbMl0uIHt7IFN5c3RlbSBlcnJvciBbM10ufX0gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIHN1ZmZpY2llbnQgYWNjZXNzIHRvIHRoYXQga2V5LCBvciBjb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuJyksCi0oMTQwOCwgdSdDb3VsZCBub3QgZ2V0IHN1YiBrZXkgbmFtZXMgZm9yIGtleSBbMl0uIHt7IFN5c3RlbSBlcnJvciBbM10ufX0gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIHN1ZmZpY2llbnQgYWNjZXNzIHRvIHRoYXQga2V5LCBvciBjb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuJyksCi0oMTQwOSwgdSdDb3VsZCBub3QgcmVhZCBzZWN1cml0eSBpbmZvcm1hdGlvbiBmb3Iga2V5IFsyXS4ge3sgU3lzdGVtIGVycm9yIFszXS59fSAgVmVyaWZ5IHRoYXQgeW91IGhhdmUgc3VmZmljaWVudCBhY2Nlc3MgdG8gdGhhdCBrZXksIG9yIGNvbnRhY3QgeW91ciBzdXBwb3J0IHBlcnNvbm5lbC4nKSwKLSgxNDEwLCB1J0NvdWxkIG5vdCBpbmNyZWFzZSB0aGUgYXZhaWxhYmxlIHJlZ2lzdHJ5IHNwYWNlLiBbMl0gS0Igb2YgZnJlZSByZWdpc3RyeSBzcGFjZSBpcyByZXF1aXJlZCBmb3IgdGhlIGluc3RhbGxhdGlvbiBvZiB0aGlzIGFwcGxpY2F0aW9uLicpLAotKDE1MDAsIHUnQW5vdGhlciBpbnN0YWxsYXRpb24gaXMgaW4gcHJvZ3Jlc3MuIFlvdSBtdXN0IGNvbXBsZXRlIHRoYXQgaW5zdGFsbGF0aW9uIGJlZm9yZSBjb250aW51aW5nIHRoaXMgb25lLicpLAotKDE1MDEsIHUnRXJyb3IgYWNjZXNzaW5nIHNlY3VyZWQgZGF0YS4gUGxlYXNlIG1ha2Ugc3VyZSB0aGUgV2luZG93cyBJbnN0YWxsZXIgaXMgY29uZmlndXJlZCBwcm9wZXJseSBhbmQgdHJ5IHRoZSBpbnN0YWxsIGFnYWluLicpLAotKDE1MDIsIHUiVXNlciAnWzJdJyBoYXMgcHJldmlvdXNseSBpbml0aWF0ZWQgYW4gaW5zdGFsbCBmb3IgcHJvZHVjdCAnWzNdJy4gIFRoYXQgdXNlciB3aWxsIG5lZWQgdG8gcnVuIHRoYXQgaW5zdGFsbCBhZ2FpbiBiZWZvcmUgdGhleSBjYW4gdXNlIHRoYXQgcHJvZHVjdC4gIFlvdXIgY3VycmVudCBpbnN0YWxsIHdpbGwgbm93IGNvbnRpbnVlLiIpLAotKDE1MDMsIHUiVXNlciAnWzJdJyBoYXMgcHJldmlvdXNseSBpbml0aWF0ZWQgYW4gaW5zdGFsbCBmb3IgcHJvZHVjdCAnWzNdJy4gIFRoYXQgdXNlciB3aWxsIG5lZWQgdG8gcnVuIHRoYXQgaW5zdGFsbCBhZ2FpbiBiZWZvcmUgdGhleSBjYW4gdXNlIHRoYXQgcHJvZHVjdC4iKSwKLSgxNjAxLCB1Ik91dCBvZiBkaXNrIHNwYWNlIC0tIFZvbHVtZTogJ1syXSc7IHJlcXVpcmVkIHNwYWNlOiBbM10gS0I7IGF2YWlsYWJsZSBzcGFjZTogWzRdIEtCLiAgRnJlZSBzb21lIGRpc2sgc3BhY2UgYW5kIHJldHJ5LiIpLAotKDE2MDIsIHUnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbD8nKSwKLSgxNjAzLCB1IlRoZSBmaWxlIFsyXVszXSBpcyBiZWluZyBoZWxkIGluIHVzZXsgYnkgdGhlIGZvbGxvd2luZyBwcm9jZXNzOiBOYW1lOiBbNF0sIElkOiBbNV0sIFdpbmRvdyBUaXRsZTogJ1s2XSd9LiAgQ2xvc2UgdGhhdCBhcHBsaWNhdGlvbiBhbmQgcmV0cnkuIiksCi0oMTYwNCwgdSJUaGUgcHJvZHVjdCAnWzJdJyBpcyBhbHJlYWR5IGluc3RhbGxlZCwgcHJldmVudGluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoaXMgcHJvZHVjdC4gIFRoZSB0d28gcHJvZHVjdHMgYXJlIGluY29tcGF0aWJsZS4iKSwKLSgxNjA1LCB1IlRoZXJlIGlzIG5vdCBlbm91Z2ggZGlzayBzcGFjZSBvbiB0aGUgdm9sdW1lICdbMl0nIHRvIGNvbnRpbnVlIHRoZSBpbnN0YWxsIHdpdGggcmVjb3ZlcnkgZW5hYmxlZC4gWzNdIEtCIGFyZSByZXF1aXJlZCwgYnV0IG9ubHkgWzRdIEtCIGFyZSBhdmFpbGFibGUuIENsaWNrIElnbm9yZSB0byBjb250aW51ZSB0aGUgaW5zdGFsbCB3aXRob3V0IHNhdmluZyByZWNvdmVyeSBpbmZvcm1hdGlvbiwgY2xpY2sgUmV0cnkgdG8gY2hlY2sgZm9yIGF2YWlsYWJsZSBzcGFjZSBhZ2Fpbiwgb3IgY2xpY2sgQ2FuY2VsIHRvIHF1aXQgdGhlIGluc3RhbGxhdGlvbi4iKSwKLSgxNjA2LCB1J0NvdWxkIG5vdCBhY2Nlc3MgbmV0d29yayBsb2NhdGlvbiBbMl0uJyksCi0oMTYwNywgdSdUaGUgZm9sbG93aW5nIGFwcGxpY2F0aW9ucyBzaG91bGQgYmUgY2xvc2VkIGJlZm9yZSBjb250aW51aW5nIHRoZSBpbnN0YWxsOicpLAotKDE2MDgsIHUnQ291bGQgbm90IGZpbmQgYW55IHByZXZpb3VzbHkgaW5zdGFsbGVkIGNvbXBsaWFudCBwcm9kdWN0cyBvbiB0aGUgbWFjaGluZSBmb3IgaW5zdGFsbGluZyB0aGlzIHByb2R1Y3QuJyksCi0oMTYwOSwgdSJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhcHBseWluZyBzZWN1cml0eSBzZXR0aW5ncy4gWzJdIGlzIG5vdCBhIHZhbGlkIHVzZXIgb3IgZ3JvdXAuIFRoaXMgY291bGQgYmUgYSBwcm9ibGVtIHdpdGggdGhlIHBhY2thZ2UsIG9yIGEgcHJvYmxlbSBjb25uZWN0aW5nIHRvIGEgZG9tYWluIGNvbnRyb2xsZXIgb24gdGhlIG5ldHdvcmsuIENoZWNrIHlvdXIgbmV0d29yayBjb25uZWN0aW9uIGFuZCBjbGljayBSZXRyeSwgb3IgQ2FuY2VsIHRvIGVuZCB0aGUgaW5zdGFsbC4ge3tVbmFibGUgdG8gbG9jYXRlIHRoZSB1c2VyJ3MgU0lELCBzeXN0ZW0gZXJyb3IgWzNdfX0iKSwKLSgxNzAxLCB1J1RoZSBrZXkgWzJdIGlzIG5vdCB2YWxpZC4gIFZlcmlmeSB0aGF0IHlvdSBlbnRlcmVkIHRoZSBjb3JyZWN0IGtleS4nKSwKLSgxNzAyLCB1J1RoZSBpbnN0YWxsZXIgbXVzdCByZXN0YXJ0IHlvdXIgc3lzdGVtIGJlZm9yZSBjb25maWd1cmF0aW9uIG9mIFsyXSBjYW4gY29udGludWUuICBDbGljayBZZXMgdG8gcmVzdGFydCBub3cgb3IgTm8gaWYgeW91IHBsYW4gdG8gbWFudWFsbHkgcmVzdGFydCBsYXRlci4nKSwKLSgxNzAzLCB1J1lvdSBtdXN0IHJlc3RhcnQgeW91ciBzeXN0ZW0gZm9yIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgbWFkZSB0byBbMl0gdG8gdGFrZSBlZmZlY3QuIENsaWNrIFllcyB0byByZXN0YXJ0IG5vdyBvciBObyBpZiB5b3UgcGxhbiB0byBtYW51YWxseSByZXN0YXJ0IGxhdGVyLicpLAotKDE3MDQsIHUnQW4gaW5zdGFsbGF0aW9uIGZvciBbMl0gaXMgY3VycmVudGx5IHN1c3BlbmRlZC4gIFlvdSBtdXN0IHVuZG8gdGhlIGNoYW5nZXMgbWFkZSBieSB0aGF0IGluc3RhbGxhdGlvbiB0byBjb250aW51ZS4gIERvIHlvdSB3YW50IHRvIHVuZG8gdGhvc2UgY2hhbmdlcz8nKSwKLSgxNzA1LCB1J0EgcHJldmlvdXMgaW5zdGFsbGF0aW9uIGZvciB0aGlzIHByb2R1Y3QgaXMgaW4gcHJvZ3Jlc3MuICBZb3UgbXVzdCB1bmRvIHRoZSBjaGFuZ2VzIG1hZGUgYnkgdGhhdCBpbnN0YWxsYXRpb24gdG8gY29udGludWUuICBEbyB5b3Ugd2FudCB0byB1bmRvIHRob3NlIGNoYW5nZXM/JyksCi0oMTcwNiwgdSJBbiBpbnN0YWxsYXRpb24gcGFja2FnZSBmb3IgdGhlIHByb2R1Y3QgWzJdIGNhbm5vdCBiZSBmb3VuZC4gVHJ5IHRoZSBpbnN0YWxsYXRpb24gYWdhaW4gdXNpbmcgYSB2YWxpZCBjb3B5IG9mIHRoZSBpbnN0YWxsYXRpb24gcGFja2FnZSAnWzNdJy4iKSwKLSgxNzA3LCB1J0luc3RhbGxhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LicpLAotKDE3MDgsIHUnSW5zdGFsbGF0aW9uIGZhaWxlZC4nKSwKLSgxNzA5LCB1J1Byb2R1Y3Q6IFsyXSAtLSBbM10nKSwKLSgxNzEwLCB1J1lvdSBtYXkgZWl0aGVyIHJlc3RvcmUgeW91ciBjb21wdXRlciB0byBpdHMgcHJldmlvdXMgc3RhdGUgb3IgY29udGludWUgdGhlIGluc3RhbGwgbGF0ZXIuIFdvdWxkIHlvdSBsaWtlIHRvIHJlc3RvcmU/JyksCi0oMTcxMSwgdSdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB3cml0aW5nIGluc3RhbGxhdGlvbiBpbmZvcm1hdGlvbiB0byBkaXNrLiAgQ2hlY2sgdG8gbWFrZSBzdXJlIGVub3VnaCBkaXNrIHNwYWNlIGlzIGF2YWlsYWJsZSwgYW5kIGNsaWNrIFJldHJ5LCBvciBDYW5jZWwgdG8gZW5kIHRoZSBpbnN0YWxsLicpLAotKDE3MTIsIHUnT25lIG9yIG1vcmUgb2YgdGhlIGZpbGVzIHJlcXVpcmVkIHRvIHJlc3RvcmUgeW91ciBjb21wdXRlciB0byBpdHMgcHJldmlvdXMgc3RhdGUgY291bGQgbm90IGJlIGZvdW5kLiAgUmVzdG9yYXRpb24gd2lsbCBub3QgYmUgcG9zc2libGUuJyksCi0oMTcxMywgdSdbMl0gY2Fubm90IGluc3RhbGwgb25lIG9mIGl0cyByZXF1aXJlZCBwcm9kdWN0cy4gQ29udGFjdCB5b3VyIHRlY2huaWNhbCBzdXBwb3J0IGdyb3VwLiAge3tTeXN0ZW0gRXJyb3I6IFszXS59fScpLAotKDE3MTQsIHUnVGhlIG9sZGVyIHZlcnNpb24gb2YgWzJdIGNhbm5vdCBiZSByZW1vdmVkLiAgQ29udGFjdCB5b3VyIHRlY2huaWNhbCBzdXBwb3J0IGdyb3VwLiAge3tTeXN0ZW0gRXJyb3IgWzNdLn19JyksCi0oMTcxNSwgdSdJbnN0YWxsZWQgWzJdJyksCi0oMTcxNiwgdSdDb25maWd1cmVkIFsyXScpLAotKDE3MTcsIHUnUmVtb3ZlZCBbMl0nKSwKLSgxNzE4LCB1J0ZpbGUgWzJdIHdhcyByZWplY3RlZCBieSBkaWdpdGFsIHNpZ25hdHVyZSBwb2xpY3kuJyksCi0oMTcxOSwgdSdUaGUgV2luZG93cyBJbnN0YWxsZXIgU2VydmljZSBjb3VsZCBub3QgYmUgYWNjZXNzZWQuIFRoaXMgY2FuIG9jY3VyIGlmIHlvdSBhcmUgcnVubmluZyBXaW5kb3dzIGluIHNhZmUgbW9kZSwgb3IgaWYgdGhlIFdpbmRvd3MgSW5zdGFsbGVyIGlzIG5vdCBjb3JyZWN0bHkgaW5zdGFsbGVkLiBDb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwgZm9yIGFzc2lzdGFuY2UuJyksCi0oMTcyMCwgdSdUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGlzIFdpbmRvd3MgSW5zdGFsbGVyIHBhY2thZ2UuIEEgc2NyaXB0IHJlcXVpcmVkIGZvciB0aGlzIGluc3RhbGwgdG8gY29tcGxldGUgY291bGQgbm90IGJlIHJ1bi4gQ29udGFjdCB5b3VyIHN1cHBvcnQgcGVyc29ubmVsIG9yIHBhY2thZ2UgdmVuZG9yLiAge3tDdXN0b20gYWN0aW9uIFsyXSBzY3JpcHQgZXJyb3IgWzNdLCBbNF06IFs1XSBMaW5lIFs2XSwgQ29sdW1uIFs3XSwgWzhdIH19JyksCi0oMTcyMSwgdSdUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGlzIFdpbmRvd3MgSW5zdGFsbGVyIHBhY2thZ2UuIEEgcHJvZ3JhbSByZXF1aXJlZCBmb3IgdGhpcyBpbnN0YWxsIHRvIGNvbXBsZXRlIGNvdWxkIG5vdCBiZSBydW4uIENvbnRhY3QgeW91ciBzdXBwb3J0IHBlcnNvbm5lbCBvciBwYWNrYWdlIHZlbmRvci4ge3tBY3Rpb246IFsyXSwgbG9jYXRpb246IFszXSwgY29tbWFuZDogWzRdIH19JyksCi0oMTcyMiwgdSdUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGlzIFdpbmRvd3MgSW5zdGFsbGVyIHBhY2thZ2UuIEEgcHJvZ3JhbSBydW4gYXMgcGFydCBvZiB0aGUgc2V0dXAgZGlkIG5vdCBmaW5pc2ggYXMgZXhwZWN0ZWQuIENvbnRhY3QgeW91ciBzdXBwb3J0IHBlcnNvbm5lbCBvciBwYWNrYWdlIHZlbmRvci4gIHt7QWN0aW9uIFsyXSwgbG9jYXRpb246IFszXSwgY29tbWFuZDogWzRdIH19JyksCi0oMTcyMywgdSdUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGlzIFdpbmRvd3MgSW5zdGFsbGVyIHBhY2thZ2UuIEEgRExMIHJlcXVpcmVkIGZvciB0aGlzIGluc3RhbGwgdG8gY29tcGxldGUgY291bGQgbm90IGJlIHJ1bi4gQ29udGFjdCB5b3VyIHN1cHBvcnQgcGVyc29ubmVsIG9yIHBhY2thZ2UgdmVuZG9yLiAge3tBY3Rpb24gWzJdLCBlbnRyeTogWzNdLCBsaWJyYXJ5OiBbNF0gfX0nKSwKLSgxNzI0LCB1J1JlbW92YWwgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4nKSwKLSgxNzI1LCB1J1JlbW92YWwgZmFpbGVkLicpLAotKDE3MjYsIHUnQWR2ZXJ0aXNlbWVudCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LicpLAotKDE3MjcsIHUnQWR2ZXJ0aXNlbWVudCBmYWlsZWQuJyksCi0oMTcyOCwgdSdDb25maWd1cmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuJyksCi0oMTcyOSwgdSdDb25maWd1cmF0aW9uIGZhaWxlZC4nKSwKLSgxNzMwLCB1J1lvdSBtdXN0IGJlIGFuIEFkbWluaXN0cmF0b3IgdG8gcmVtb3ZlIHRoaXMgYXBwbGljYXRpb24uIFRvIHJlbW92ZSB0aGlzIGFwcGxpY2F0aW9uLCB5b3UgY2FuIGxvZyBvbiBhcyBhbiBBZG1pbmlzdHJhdG9yLCBvciBjb250YWN0IHlvdXIgdGVjaG5pY2FsIHN1cHBvcnQgZ3JvdXAgZm9yIGFzc2lzdGFuY2UuJyksCi0oMTgwMSwgdSdUaGUgcGF0aCBbMl0gaXMgbm90IHZhbGlkLiAgUGxlYXNlIHNwZWNpZnkgYSB2YWxpZCBwYXRoLicpLAotKDE4MDIsIHUnT3V0IG9mIG1lbW9yeS4gU2h1dCBkb3duIG90aGVyIGFwcGxpY2F0aW9ucyBiZWZvcmUgcmV0cnlpbmcuJyksCi0oMTgwMywgdSdUaGVyZSBpcyBubyBkaXNrIGluIGRyaXZlIFsyXS4gUGxlYXNlIGluc2VydCBvbmUgYW5kIGNsaWNrIFJldHJ5LCBvciBjbGljayBDYW5jZWwgdG8gZ28gYmFjayB0byB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCB2b2x1bWUuJyksCi0oMTgwNCwgdSdUaGVyZSBpcyBubyBkaXNrIGluIGRyaXZlIFsyXS4gUGxlYXNlIGluc2VydCBvbmUgYW5kIGNsaWNrIFJldHJ5LCBvciBjbGljayBDYW5jZWwgdG8gcmV0dXJuIHRvIHRoZSBicm93c2UgZGlhbG9nIGFuZCBzZWxlY3QgYSBkaWZmZXJlbnQgdm9sdW1lLicpLAotKDE4MDUsIHUnVGhlIGZvbGRlciBbMl0gZG9lcyBub3QgZXhpc3QuICBQbGVhc2UgZW50ZXIgYSBwYXRoIHRvIGFuIGV4aXN0aW5nIGZvbGRlci4nKSwKLSgxODA2LCB1J1lvdSBoYXZlIGluc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIHJlYWQgdGhpcyBmb2xkZXIuJyksCi0oMTgwNywgdSdBIHZhbGlkIGRlc3RpbmF0aW9uIGZvbGRlciBmb3IgdGhlIGluc3RhbGwgY291bGQgbm90IGJlIGRldGVybWluZWQuJyksCi0oMTkwMSwgdSdFcnJvciBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSB0aGUgc291cmNlIGluc3RhbGwgZGF0YWJhc2U6IFsyXS4nKSwKLSgxOTAyLCB1J1NjaGVkdWxpbmcgcmVib290IG9wZXJhdGlvbjogUmVuYW1pbmcgZmlsZSBbMl0gdG8gWzNdLiBNdXN0IHJlYm9vdCB0byBjb21wbGV0ZSBvcGVyYXRpb24uJyksCi0oMTkwMywgdSdTY2hlZHVsaW5nIHJlYm9vdCBvcGVyYXRpb246IERlbGV0aW5nIGZpbGUgWzJdLiBNdXN0IHJlYm9vdCB0byBjb21wbGV0ZSBvcGVyYXRpb24uJyksCi0oMTkwNCwgdSdNb2R1bGUgWzJdIGZhaWxlZCB0byByZWdpc3Rlci4gIEhSRVNVTFQgWzNdLiAgQ29udGFjdCB5b3VyIHN1cHBvcnQgcGVyc29ubmVsLicpLAotKDE5MDUsIHUnTW9kdWxlIFsyXSBmYWlsZWQgdG8gdW5yZWdpc3Rlci4gIEhSRVNVTFQgWzNdLiAgQ29udGFjdCB5b3VyIHN1cHBvcnQgcGVyc29ubmVsLicpLAotKDE5MDYsIHUnRmFpbGVkIHRvIGNhY2hlIHBhY2thZ2UgWzJdLiBFcnJvcjogWzNdLiBDb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuJyksCi0oMTkwNywgdSdDb3VsZCBub3QgcmVnaXN0ZXIgZm9udCBbMl0uICBWZXJpZnkgdGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGluc3RhbGwgZm9udHMsIGFuZCB0aGF0IHRoZSBzeXN0ZW0gc3VwcG9ydHMgdGhpcyBmb250LicpLAotKDE5MDgsIHUnQ291bGQgbm90IHVucmVnaXN0ZXIgZm9udCBbMl0uIFZlcmlmeSB0aGF0IHlvdSB0aGF0IHlvdSBoYXZlIHN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gcmVtb3ZlIGZvbnRzLicpLAotKDE5MDksIHUnQ291bGQgbm90IGNyZWF0ZSBTaG9ydGN1dCBbMl0uIFZlcmlmeSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgZXhpc3RzIGFuZCB0aGF0IHlvdSBjYW4gYWNjZXNzIGl0LicpLAotKDE5MTAsIHUnQ291bGQgbm90IHJlbW92ZSBTaG9ydGN1dCBbMl0uIFZlcmlmeSB0aGF0IHRoZSBzaG9ydGN1dCBmaWxlIGV4aXN0cyBhbmQgdGhhdCB5b3UgY2FuIGFjY2VzcyBpdC4nKSwKLSgxOTExLCB1J0NvdWxkIG5vdCByZWdpc3RlciB0eXBlIGxpYnJhcnkgZm9yIGZpbGUgWzJdLiAgQ29udGFjdCB5b3VyIHN1cHBvcnQgcGVyc29ubmVsLicpLAotKDE5MTIsIHUnQ291bGQgbm90IHVucmVnaXN0ZXIgdHlwZSBsaWJyYXJ5IGZvciBmaWxlIFsyXS4gIENvbnRhY3QgeW91ciBzdXBwb3J0IHBlcnNvbm5lbC4nKSwKLSgxOTEzLCB1J0NvdWxkIG5vdCB1cGRhdGUgdGhlIGluaSBmaWxlIFsyXVszXS4gIFZlcmlmeSB0aGF0IHRoZSBmaWxlIGV4aXN0cyBhbmQgdGhhdCB5b3UgY2FuIGFjY2VzcyBpdC4nKSwKLSgxOTE0LCB1J0NvdWxkIG5vdCBzY2hlZHVsZSBmaWxlIFsyXSB0byByZXBsYWNlIGZpbGUgWzNdIG9uIHJlYm9vdC4gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIHRvIGZpbGUgWzNdLicpLAotKDE5MTUsIHUnRXJyb3IgcmVtb3ZpbmcgT0RCQyBkcml2ZXIgbWFuYWdlciwgT0RCQyBlcnJvciBbMl06IFszXS4gQ29udGFjdCB5b3VyIHN1cHBvcnQgcGVyc29ubmVsLicpLAotKDE5MTYsIHUnRXJyb3IgaW5zdGFsbGluZyBPREJDIGRyaXZlciBtYW5hZ2VyLCBPREJDIGVycm9yIFsyXTogWzNdLiBDb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuJyksCi0oMTkxNywgdSdFcnJvciByZW1vdmluZyBPREJDIGRyaXZlcjogWzRdLCBPREJDIGVycm9yIFsyXTogWzNdLiBWZXJpZnkgdGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHByaXZpbGVnZXMgdG8gcmVtb3ZlIE9EQkMgZHJpdmVycy4nKSwKLSgxOTE4LCB1J0Vycm9yIGluc3RhbGxpbmcgT0RCQyBkcml2ZXI6IFs0XSwgT0RCQyBlcnJvciBbMl06IFszXS4gVmVyaWZ5IHRoYXQgdGhlIGZpbGUgWzRdIGV4aXN0cyBhbmQgdGhhdCB5b3UgY2FuIGFjY2VzcyBpdC4nKSwKLSgxOTE5LCB1J0Vycm9yIGNvbmZpZ3VyaW5nIE9EQkMgZGF0YSBzb3VyY2U6IFs0XSwgT0RCQyBlcnJvciBbMl06IFszXS4gVmVyaWZ5IHRoYXQgdGhlIGZpbGUgWzRdIGV4aXN0cyBhbmQgdGhhdCB5b3UgY2FuIGFjY2VzcyBpdC4nKSwKLSgxOTIwLCB1IlNlcnZpY2UgJ1syXScgKFszXSkgZmFpbGVkIHRvIHN0YXJ0LiAgVmVyaWZ5IHRoYXQgeW91IGhhdmUgc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIHN0YXJ0IHN5c3RlbSBzZXJ2aWNlcy4iKSwKLSgxOTIxLCB1IlNlcnZpY2UgJ1syXScgKFszXSkgY291bGQgbm90IGJlIHN0b3BwZWQuICBWZXJpZnkgdGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHByaXZpbGVnZXMgdG8gc3RvcCBzeXN0ZW0gc2VydmljZXMuIiksCi0oMTkyMiwgdSJTZXJ2aWNlICdbMl0nIChbM10pIGNvdWxkIG5vdCBiZSBkZWxldGVkLiAgVmVyaWZ5IHRoYXQgeW91IGhhdmUgc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIHJlbW92ZSBzeXN0ZW0gc2VydmljZXMuIiksCi0oMTkyMywgdSJTZXJ2aWNlICdbMl0nIChbM10pIGNvdWxkIG5vdCBiZSBpbnN0YWxsZWQuICBWZXJpZnkgdGhhdCB5b3UgaGF2ZSBzdWZmaWNpZW50IHByaXZpbGVnZXMgdG8gaW5zdGFsbCBzeXN0ZW0gc2VydmljZXMuIiksCi0oMTkyNCwgdSJDb3VsZCBub3QgdXBkYXRlIGVudmlyb25tZW50IHZhcmlhYmxlICdbMl0nLiAgVmVyaWZ5IHRoYXQgeW91IGhhdmUgc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIG1vZGlmeSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIiksCi0oMTkyNSwgdSdZb3UgZG8gbm90IGhhdmUgc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIGNvbXBsZXRlIHRoaXMgaW5zdGFsbGF0aW9uIGZvciBhbGwgdXNlcnMgb2YgdGhlIG1hY2hpbmUuICBMb2cgb24gYXMgYWRtaW5pc3RyYXRvciBhbmQgdGhlbiByZXRyeSB0aGlzIGluc3RhbGxhdGlvbi4nKSwKLSgxOTI2LCB1IkNvdWxkIG5vdCBzZXQgZmlsZSBzZWN1cml0eSBmb3IgZmlsZSAnWzNdJy4gRXJyb3I6IFsyXS4gIFZlcmlmeSB0aGF0IHlvdSBoYXZlIHN1ZmZpY2llbnQgcHJpdmlsZWdlcyB0byBtb2RpZnkgdGhlIHNlY3VyaXR5IHBlcm1pc3Npb25zIGZvciB0aGlzIGZpbGUuIiksCi0oMTkyNywgdSdDb21wb25lbnQgU2VydmljZXMgKENPTSsgMS4wKSBhcmUgbm90IGluc3RhbGxlZCBvbiB0aGlzIGNvbXB1dGVyLiAgVGhpcyBpbnN0YWxsYXRpb24gcmVxdWlyZXMgQ29tcG9uZW50IFNlcnZpY2VzIGluIG9yZGVyIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4gIENvbXBvbmVudCBTZXJ2aWNlcyBhcmUgYXZhaWxhYmxlIG9uIFdpbmRvd3MgMjAwMC4nKSwKLSgxOTI4LCB1J0Vycm9yIHJlZ2lzdGVyaW5nIENPTSsgQXBwbGljYXRpb24uICBDb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyksCi0oMTkyOSwgdSdFcnJvciB1bnJlZ2lzdGVyaW5nIENPTSsgQXBwbGljYXRpb24uICBDb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyksCi0oMTkzMCwgdSJUaGUgZGVzY3JpcHRpb24gZm9yIHNlcnZpY2UgJ1syXScgKFszXSkgY291bGQgbm90IGJlIGNoYW5nZWQuIiksCi0oMTkzMSwgdSdUaGUgV2luZG93cyBJbnN0YWxsZXIgc2VydmljZSBjYW5ub3QgdXBkYXRlIHRoZSBzeXN0ZW0gZmlsZSBbMl0gYmVjYXVzZSB0aGUgZmlsZSBpcyBwcm90ZWN0ZWQgYnkgV2luZG93cy4gIFlvdSBtYXkgbmVlZCB0byB1cGRhdGUgeW91ciBvcGVyYXRpbmcgc3lzdGVtIGZvciB0aGlzIHByb2dyYW0gdG8gd29yayBjb3JyZWN0bHkuIHt7UGFja2FnZSB2ZXJzaW9uOiBbM10sIE9TIFByb3RlY3RlZCB2ZXJzaW9uOiBbNF19fScpLAotKDE5MzIsIHUnVGhlIFdpbmRvd3MgSW5zdGFsbGVyIHNlcnZpY2UgY2Fubm90IHVwZGF0ZSB0aGUgcHJvdGVjdGVkIFdpbmRvd3MgZmlsZSBbMl0uIHt7UGFja2FnZSB2ZXJzaW9uOiBbM10sIE9TIFByb3RlY3RlZCB2ZXJzaW9uOiBbNF0sIFNGUCBFcnJvcjogWzVdfX0nKSwKLSgxOTMzLCB1J1RoZSBXaW5kb3dzIEluc3RhbGxlciBzZXJ2aWNlIGNhbm5vdCB1cGRhdGUgb25lIG9yIG1vcmUgcHJvdGVjdGVkIFdpbmRvd3MgZmlsZXMuIHt7U0ZQIEVycm9yOiBbMl0uICBMaXN0IG9mIHByb3RlY3RlZCBmaWxlczpcXHJcXG5bM119fScpLAotKDE5MzQsIHUnVXNlciBpbnN0YWxsYXRpb25zIGFyZSBkaXNhYmxlZCB2aWEgcG9saWN5IG9uIHRoZSBtYWNoaW5lLicpLAotKDE5MzUsIHUnQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gb2YgYXNzZW1ibHkgY29tcG9uZW50IFsyXS4gSFJFU1VMVDogWzNdLiB7e2Fzc2VtYmx5IGludGVyZmFjZTogWzRdLCBmdW5jdGlvbjogWzVdLCBhc3NlbWJseSBuYW1lOiBbNl19fScpLAotXQotCi10YWJsZXM9WydBZG1pbkV4ZWN1dGVTZXF1ZW5jZScsICdBZG1pblVJU2VxdWVuY2UnLCAnQWR2dEV4ZWN1dGVTZXF1ZW5jZScsICdCQkNvbnRyb2wnLCAnQmlsbGJvYXJkJywgJ0JpbmFyeScsICdDaGVja0JveCcsICdQcm9wZXJ0eScsICdDb21ib0JveCcsICdDb250cm9sJywgJ0xpc3RCb3gnLCAnQWN0aW9uVGV4dCcsICdDb250cm9sQ29uZGl0aW9uJywgJ0NvbnRyb2xFdmVudCcsICdEaWFsb2cnLCAnRXZlbnRNYXBwaW5nJywgJ0luc3RhbGxFeGVjdXRlU2VxdWVuY2UnLCAnSW5zdGFsbFVJU2VxdWVuY2UnLCAnTGlzdFZpZXcnLCAnUmFkaW9CdXR0b24nLCAnVGV4dFN0eWxlJywgJ1VJVGV4dCcsICdfVmFsaWRhdGlvbicsICdFcnJvciddCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdXBsb2FkcmVsZWFzZS5iYXQgYi9Ub29scy9tc2kvdXBsb2FkcmVsZWFzZS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzMTljZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS91cGxvYWRyZWxlYXNlLmJhdApAQCAtMCwwICsxLDYzIEBACitAc2V0bG9jYWwNCitAZWNobyBvZmYNCisNCitzZXQgRD0lfmRwMA0KK3NldCBQQ0JVSUxEPSVEJS4uXC4uXFBDQnVpbGRcDQorDQorc2V0IEhPU1Q9DQorc2V0IFVTRVI9DQorc2V0IFRBUkdFVD0NCitzZXQgRFJZUlVOPWZhbHNlDQorc2V0IE5PR1BHPQ0KKw0KKzpDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLWgiIGdvdG8gSGVscA0KK2lmICIlMSIgRVFVICItbyIgKHNldCBIT1NUPSV+MikgJiYgc2hpZnQgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLS1ob3N0IiAoc2V0IEhPU1Q9JX4yKSAmJiBzaGlmdCAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItdSIgKHNldCBVU0VSPSV+MikgJiYgc2hpZnQgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCitpZiAiJTEiIEVRVSAiLS11c2VyIiAoc2V0IFVTRVI9JX4yKSAmJiBzaGlmdCAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItdCIgKHNldCBUQVJHRVQ9JX4yKSAmJiBzaGlmdCAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItLXRhcmdldCIgKHNldCBUQVJHRVQ9JX4yKSAmJiBzaGlmdCAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSIgRVFVICItLWRyeS1ydW4iIChzZXQgRFJZUlVOPXRydWUpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiUxIiBFUVUgIi0tbm8tZ3BnIiAoc2V0IE5PR1BHPXRydWUpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQorDQoraWYgbm90IGRlZmluZWQgUExJTksgd2hlcmUgcGxpbmsgPiAiJVRFTVAlXHBsaW5rLmxvYyIgMj4gbnVsICYmIHNldCAvUCBQTElOSz0gPCAiJVRFTVAlXHBsaW5rLmxvYyIgJiBkZWwgIiVURU1QJVxwbGluay5sb2MiDQoraWYgbm90IGRlZmluZWQgUExJTksgd2hlcmUgL1IgIiVQcm9ncmFtRmlsZXMoeDg2KSVcUHVUVFkiIHBsaW5rID4gIiVURU1QJVxwbGluay5sb2MiIDI+IG51bCAmJiBzZXQgL1AgUExJTks9IDwgIiVURU1QJVxwbGluay5sb2MiICYgZGVsICIlVEVNUCVccGxpbmsubG9jIg0KK2lmIG5vdCBkZWZpbmVkIFBMSU5LIHdoZXJlIC9SICIlUHJvZ3JhbUZpbGVzKHg4NiklIiBwbGluayA+ICIlVEVNUCVccGxpbmsubG9jIiAyPiBudWwgJiYgc2V0IC9QIFBMSU5LPSA8ICIlVEVNUCVccGxpbmsubG9jIiAmIGRlbCAiJVRFTVAlXHBsaW5rLmxvYyINCitpZiBub3QgZGVmaW5lZCBQTElOSyBlY2hvIENhbm5vdCBsb2NhdGUgcGxpbmsuZXhlICYgZXhpdCAvQiAxDQorZWNobyBGb3VuZCBwbGluay5leGUgYXQgJVBMSU5LJQ0KKw0KK2lmIG5vdCBkZWZpbmVkIFBTQ1Agd2hlcmUgcHNjcCA+ICIlVEVNUCVccHNjcC5sb2MiIDI+IG51bCAmJiBzZXQgL1AgcHNjcD0gPCAiJVRFTVAlXHBzY3AubG9jIiAmIGRlbCAiJVRFTVAlXHBzY3AubG9jIg0KK2lmIG5vdCBkZWZpbmVkIFBTQ1Agd2hlcmUgL1IgIiVQcm9ncmFtRmlsZXMoeDg2KSVcUHVUVFkiIHBzY3AgPiAiJVRFTVAlXHBzY3AubG9jIiAyPiBudWwgJiYgc2V0IC9QIHBzY3A9IDwgIiVURU1QJVxwc2NwLmxvYyIgJiBkZWwgIiVURU1QJVxwc2NwLmxvYyINCitpZiBub3QgZGVmaW5lZCBQU0NQIHdoZXJlIC9SICIlUHJvZ3JhbUZpbGVzKHg4NiklIiBwc2NwID4gIiVURU1QJVxwc2NwLmxvYyIgMj4gbnVsICYmIHNldCAvUCBwc2NwPSA8ICIlVEVNUCVccHNjcC5sb2MiICYgZGVsICIlVEVNUCVccHNjcC5sb2MiDQoraWYgbm90IGRlZmluZWQgUFNDUCBlY2hvIENhbm5vdCBsb2NhdGUgcHNjcC5leGUgJiBleGl0IC9CIDENCitlY2hvIEZvdW5kIHBzY3AuZXhlIGF0ICVQU0NQJQ0KKw0KK2lmIGRlZmluZWQgTk9HUEcgKA0KKyAgICBzZXQgR1BHPQ0KKyAgICBlY2hvIFNraXBwaW5nIEdQRyBzaWduYXR1cmUgZ2VuZXJhdGlvbiBiZWNhdXNlIG9mIC0tbm8tZ3BnDQorKSBlbHNlICAoDQorICAgIGlmIG5vdCBkZWZpbmVkIEdQRyB3aGVyZSBncGcyID4gIiVURU1QJVxncGcubG9jIiAyPiBudWwgJiYgc2V0IC9QIEdQRz0gPCAiJVRFTVAlXGdwZy5sb2MiICYgZGVsICIlVEVNUCVcZ3BnLmxvYyINCisgICAgaWYgbm90IGRlZmluZWQgR1BHIHdoZXJlIC9SICIlUENCVUlMRCUuLlxleHRlcm5hbHNcd2luZG93cy1pbnN0YWxsZXIiIGdwZzIgPiAiJVRFTVAlXGdwZy5sb2MiIDI+IG51bCAmJiBzZXQgL1AgR1BHPSA8ICIlVEVNUCVcZ3BnLmxvYyIgJiBkZWwgIiVURU1QJVxncGcubG9jIg0KKyAgICBpZiBub3QgZGVmaW5lZCBHUEcgZWNobyBDYW5ub3QgbG9jYXRlIGdwZzIuZXhlLiBTaWduYXR1cmVzIHdpbGwgbm90IGJlIHVwbG9hZGVkICYgcGF1c2UNCisgICAgZWNobyBGb3VuZCBncGcyLmV4ZSBhdCAlR1BHJQ0KKykNCisNCitjYWxsICIlUENCVUlMRCVlbnYuYmF0IiA+IG51bCAyPiBudWwNCitwdXNoZCAiJUQlIg0KK21zYnVpbGQgL3Y6bSAvbm9sb2dvIHVwbG9hZHJlbGVhc2UucHJvaiAvdDpVcGxvYWQgL3A6UGxhdGZvcm09eDg2DQorbXNidWlsZCAvdjptIC9ub2xvZ28gdXBsb2FkcmVsZWFzZS5wcm9qIC90OlVwbG9hZCAvcDpQbGF0Zm9ybT14NjQgL3A6SW5jbHVkZURvYz1mYWxzZQ0KK21zYnVpbGQgL3Y6bSAvbm9sb2dvIHVwbG9hZHJlbGVhc2UucHJvaiAvdDpTaG93SGFzaGVzIC9wOlBsYXRmb3JtPXg4Ng0KK21zYnVpbGQgL3Y6bSAvbm9sb2dvIHVwbG9hZHJlbGVhc2UucHJvaiAvdDpTaG93SGFzaGVzIC9wOlBsYXRmb3JtPXg2NCAvcDpJbmNsdWRlRG9jPWZhbHNlDQorcG9wZA0KK2V4aXQgL0IgMA0KKw0KKzpIZWxwDQorZWNobyB1cGxvYWRyZWxlYXNlLmJhdCAtLWhvc3QgSE9TVCAtLXVzZXIgVVNFUk5BTUUgWy0tdGFyZ2V0IFRBUkdFVF0gWy0tZHJ5LXJ1bl0gWy1oXQ0KK2VjaG8uDQorZWNobyAgICAtLWhvc3QgKC1vKSAgICAgU3BlY2lmeSB0aGUgdXBsb2FkIGhvc3QgKHJlcXVpcmVkKQ0KK2VjaG8gICAgLS11c2VyICgtdSkgICAgIFNwZWNpZnkgdGhlIHVzZXIgb24gdGhlIGhvc3QgKHJlcXVpcmVkKQ0KK2VjaG8gICAgLS10YXJnZXQgKC10KSAgIFNwZWNpZnkgdGhlIHRhcmdldCBkaXJlY3Rvcnkgb24gdGhlIGhvc3QNCitlY2hvICAgIC0tZHJ5LXJ1biAgICAgICBEaXNwbGF5IGNvbW1hbmRzIGFuZCBmaWxlbmFtZXMgd2l0aG91dCBleGVjdXRpbmcgdGhlbQ0KK2VjaG8gICAgLWggICAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwIGluZm9ybWF0aW9uDQorZWNoby4NCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvdXBsb2FkcmVsZWFzZS5wcm9qIGIvVG9vbHMvbXNpL3VwbG9hZHJlbGVhc2UucHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDQ3MmRlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbXNpL3VwbG9hZHJlbGVhc2UucHJvagpAQCAtMCwwICsxLDgwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57MkQ2OUYyQUItRDVEMC00MzQ0LTg0QjUtRUY2REIzNEE5QkM5fTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxPdXRwdXROYW1lPnB5dGhvbjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFN1ZmZpeD48L091dHB1dFN1ZmZpeD4KKyAgICAgICAgCisgICAgICAgIDxEb3dubG9hZFVybEJhc2UgQ29uZGl0aW9uPSInJChEb3dubG9hZFVybEJhc2UpJyA9PSAnJyI+JChUQVJHRVQpPC9Eb3dubG9hZFVybEJhc2U+CisgICAgICAgIDxEb3dubG9hZFVybEJhc2UgQ29uZGl0aW9uPSInJChEb3dubG9hZFVybEJhc2UpJyA9PSAnJyI+L3Nydi93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uPC9Eb3dubG9hZFVybEJhc2U+CisgICAgICAgIDxJbmNsdWRlRG9jIENvbmRpdGlvbj0iJyQoSW5jbHVkZURvYyknID09ICcnIj50cnVlPC9JbmNsdWRlRG9jPgorICAgICAgICA8RHJ5UnVuIENvbmRpdGlvbj0iJyQoRHJ5UnVuKScgPT0gJyciPmZhbHNlPC9EcnlSdW4+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgICAgPEltcG9ydCBQcm9qZWN0PSJtc2kucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJidW5kbGVcYnVuZGxlLnRhcmdldHMiIC8+CisgICAgCisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxFWEVUYXJnZXQ+JChEb3dubG9hZFVybEJhc2UuVHJpbUVuZChgL2ApKS8kKE1ham9yVmVyc2lvbk51bWJlcikuJChNaW5vclZlcnNpb25OdW1iZXIpLiQoTWljcm9WZXJzaW9uTnVtYmVyKTwvRVhFVGFyZ2V0PgorICAgICAgICA8TVNJVGFyZ2V0PiQoRG93bmxvYWRVcmwuUmVwbGFjZShge3ZlcnNpb259YCwgYCQoTWFqb3JWZXJzaW9uTnVtYmVyKS4kKE1pbm9yVmVyc2lvbk51bWJlcikuJChNaWNyb1ZlcnNpb25OdW1iZXIpYCkuUmVwbGFjZShge2FyY2h9YCwgYCQoQXJjaE5hbWUpYCkuUmVwbGFjZShge3JlbGVhc2VuYW1lfWAsIGAkKFJlbGVhc2VMZXZlbE5hbWUpYCkuUmVwbGFjZShge21zaX1gLCBgYCkuVHJpbUVuZChgL2ApKTwvTVNJVGFyZ2V0PgorICAgIDwvUHJvcGVydHlHcm91cD4KKyAgICAKKyAgICA8SXRlbUdyb3VwPgorICAgICAgICA8RmlsZSBJbmNsdWRlPSIkKE91dHB1dFBhdGgpXCoubXNpOyQoT3V0cHV0UGF0aClcKi5tc3UiPgorICAgICAgICAgICAgPENvcHlUbz4kKE1TSVRhcmdldCk8L0NvcHlUbz4KKyAgICAgICAgPC9GaWxlPgorICAgICAgICA8RmlsZSBJbmNsdWRlPSIkKE91dHB1dFBhdGgpXCouZXhlOyQoT3V0cHV0UGF0aClcKi56aXAiPgorICAgICAgICAgICAgPENvcHlUbz4kKEVYRVRhcmdldCk8L0NvcHlUbz4KKyAgICAgICAgPC9GaWxlPgorICAgICAgICA8RmlsZSBJbmNsdWRlPSIkKFB5U291cmNlUGF0aClEb2NcYnVpbGRcaHRtbGhlbHBccHl0aG9uJChNYWpvclZlcnNpb25OdW1iZXIpJChNaW5vclZlcnNpb25OdW1iZXIpJChNaWNyb1ZlcnNpb25OdW1iZXIpJChSZWxlYXNlTGV2ZWxOYW1lKS5jaG0iIENvbmRpdGlvbj0iJChJbmNsdWRlRG9jKSI+CisgICAgICAgICAgICA8Q29weVRvPiQoRVhFVGFyZ2V0KTwvQ29weVRvPgorICAgICAgICA8L0ZpbGU+CisgICAgPC9JdGVtR3JvdXA+CisgICAgCisgICAgPFRhcmdldCBOYW1lPSJfVmFsaWRhdGVQcm9wZXJ0aWVzIj4KKyAgICAgICAgPEVycm9yIFRleHQ9Ik5vIHZhbHVlIGZvciBIb3N0IHByb3ZpZGVkIiBDb25kaXRpb249IickKEhvc3QpJyA9PSAnJyIgLz4KKyAgICAgICAgPEVycm9yIFRleHQ9Ik5vIHZhbHVlIGZvciBVc2VyIHByb3ZpZGVkIiBDb25kaXRpb249IickKFVzZXIpJyA9PSAnJyIgLz4KKyAgICAgICAgPEVycm9yIFRleHQ9Ik5vIHBhdGggZm9yIFBTQ1AgcHJvdmlkZWQiIENvbmRpdGlvbj0iJyQoUFNDUCknID09ICcnIiAvPgorICAgICAgICA8RXJyb3IgVGV4dD0iTm8gcGF0aCBmb3IgUExJTksgcHJvdmlkZWQiIENvbmRpdGlvbj0iJyQoUExJTkspJyA9PSAnJyIgLz4KKyAgICA8L1RhcmdldD4KKyAgICAKKyAgICA8VGFyZ2V0IE5hbWU9Il9SdW5HcGciIENvbmRpdGlvbj0iJyQoR1BHKScgIT0gJyciIElucHV0cz0iQChGaWxlKSIgT3V0cHV0cz0iJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKVxncGdcJShGaWxlTmFtZSklKEV4dGVuc2lvbikuYXNjIj4KKyAgICAgICAgPE1ha2VEaXIgRGlyZWN0b3JpZXM9IiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aClncGciIC8+CisgICAgICAgIDxEZWxldGUgRmlsZXM9IiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aClcZ3BnXCUoRmlsZS5GaWxlTmFtZSklKEZpbGUuRXh0ZW5zaW9uKS5hc2MiIENvbmRpdGlvbj0iRXhpc3RzKCckKEludGVybWVkaWF0ZU91dHB1dFBhdGgpXGdwZ1wlKEZpbGUuRmlsZU5hbWUpJShGaWxlLkV4dGVuc2lvbikuYXNjJykiIC8+CisgICAgICAgIDxFeGVjIENvbW1hbmQ9IiZxdW90OyQoR1BHKSZxdW90OyAtYmEgLW8gJnF1b3Q7JChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKVxncGdcJShGaWxlLkZpbGVOYW1lKSUoRmlsZS5FeHRlbnNpb24pLmFzYyZxdW90OyAmcXVvdDslKEZpbGUuRnVsbFBhdGgpJnF1b3Q7IiAvPgorICAgICAgICA8SXRlbUdyb3VwPgorICAgICAgICAgICAgPEZpbGUgSW5jbHVkZT0iJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKVxncGdcJShGaWxlLkZpbGVOYW1lKSUoRmlsZS5FeHRlbnNpb24pLmFzYyI+CisgICAgICAgICAgICAgICAgPENvcHlUbz4lKEZpbGUuQ29weVRvKTwvQ29weVRvPgorICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICA8L0l0ZW1Hcm91cD4KKyAgICA8L1RhcmdldD4KKyAgICAKKyAgICA8VGFyZ2V0IE5hbWU9Il9VcGxvYWQiIENvbmRpdGlvbj0iISQoRHJ5UnVuKSI+CisgICAgICAgIDxFeGVjIENvbW1hbmQ9IiZxdW90OyQoUExJTkspJnF1b3Q7ICQoVXNlcilAJChIb3N0KSBta2RpciAlKEZpbGUuQ29weVRvKSBeJmFtcDteJmFtcDsgY2hncnAgZG93bmxvYWRzICUoRmlsZS5Db3B5VG8pIF4mYW1wO14mYW1wOyBjaG1vZCBnLXcsbytyeCAlKEZpbGUuQ29weVRvKQorJnF1b3Q7JChQU0NQKSZxdW90OyBAKEZpbGUsJyAnKSAkKFVzZXIpQCQoSG9zdCk6JShGaWxlLkNvcHlUbykKKyZxdW90OyQoUExJTkspJnF1b3Q7ICQoVXNlcilAJChIb3N0KSBjaGdycCBkb3dubG9hZHMgJShGaWxlLkNvcHlUbykvKjsgY2htb2QgZy13LG8rciAlKEZpbGUuQ29weVRvKS8qCisiIC8+CisgICAgPC9UYXJnZXQ+CisgICAgCisgICAgPFRhcmdldCBOYW1lPSJfUHJpbnROYW1lcyIgQ29uZGl0aW9uPSIkKERyeVJ1bikiPgorICAgICAgICA8RXhlYyBDb21tYW5kPSJlY2hvICZxdW90OyQoUExJTkspJnF1b3Q7ICQoVXNlcilAJChIb3N0KSBta2RpciAlKEZpbGUuQ29weVRvKSBeJmFtcDteJmFtcDsgY2hncnAgZG93bmxvYWRzICUoRmlsZS5Db3B5VG8pIF4mYW1wO14mYW1wOyBjaG1vZCBnLXcsbytyeCAlKEZpbGUuQ29weVRvKQorZWNobyAmcXVvdDskKFBTQ1ApJnF1b3Q7IEAoRmlsZSwnICcpICQoVXNlcilAJChIb3N0KTolKEZpbGUuQ29weVRvKQorZWNobyAmcXVvdDskKFBMSU5LKSZxdW90OyAkKFVzZXIpQCQoSG9zdCkgY2hncnAgZG93bmxvYWRzICUoRmlsZS5Db3B5VG8pLyo7IGNobW9kIGctdyxvK3IgJShGaWxlLkNvcHlUbykvKgorZWNoby4KK2VjaG8uIiAvPgorICAgIDwvVGFyZ2V0PgorICAgIAorICAgIDxUYXJnZXQgTmFtZT0iVXBsb2FkIiBEZXBlbmRzT25UYXJnZXRzPSJfVmFsaWRhdGVQcm9wZXJ0aWVzO19SdW5HcGc7X1ByaW50TmFtZXM7X1VwbG9hZCIgLz4KKyAgICAKKyAgICA8VGFyZ2V0IE5hbWU9IlNob3dIYXNoZXMiPgorICAgICAgICA8SXRlbUdyb3VwPgorICAgICAgICAgICAgPFVzZXJGaWxlcyBJbmNsdWRlPSJAKEZpbGUpIiBDb25kaXRpb249IiclKEZpbGUuQ29weVRvKScgPT0gJyQoRVhFVGFyZ2V0KSciIC8+CisgICAgICAgIDwvSXRlbUdyb3VwPgorICAgICAgICAKKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0iJnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGdlbmVyYXRlX21kNS5weSBAKFVzZXJGaWxlcy0+JyZxdW90OyUoRnVsbFBhdGgpJnF1b3Q7JywnICcpIiAvPgorICAgIDwvVGFyZ2V0PgorICAgIAorICAgIDxUYXJnZXQgTmFtZT0iQnVpbGQiPgorICAgICAgICA8RXJyb3IgVGV4dD0iVGhpcyBzY3JpcHQgc2hvdWxkIGJlIGludm9rZWQgdXNpbmcgdXBsb2FkcmVsZWFzZS5iYXQuIiAvPgorICAgIDwvVGFyZ2V0PgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL3dpeC5wcm9wcyBiL1Rvb2xzL21zaS93aXgucHJvcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiMmQxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL21zaS93aXgucHJvcHMKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEltcG9ydCBQcm9qZWN0PSIuLlwuLlxQQ0J1aWxkXHB5dGhvbi5wcm9wcyIgLz4KKyAgCisgIDxQcm9wZXJ0eUdyb3VwPgorICAgIDxXaXhJbnN0YWxsUGF0aCBDb25kaXRpb249IickKFdpeEluc3RhbGxQYXRoKScgPT0gJycgYW5kIEV4aXN0cygnJChNU0J1aWxkVGhpc0ZpbGVEaXJlY3RvcnkpXFdpeCcpIj4kKE1TQnVpbGRUaGlzRmlsZURpcmVjdG9yeSlcV2l4XDwvV2l4SW5zdGFsbFBhdGg+CisgICAgPFdpeEluc3RhbGxQYXRoIENvbmRpdGlvbj0iJyQoV2l4SW5zdGFsbFBhdGgpJyA9PSAnJyBhbmQgRXhpc3RzKCckKEV4dGVybmFsc0Rpcilcd2luZG93cy1pbnN0YWxsZXJcd2l4JykiPiQoRXh0ZXJuYWxzRGlyKVx3aW5kb3dzLWluc3RhbGxlclx3aXhcPC9XaXhJbnN0YWxsUGF0aD4KKyAgICA8V2l4SW5zdGFsbFBhdGggQ29uZGl0aW9uPSInJChXaXhJbnN0YWxsUGF0aCknID09ICcnIj4kKFJlZ2lzdHJ5OkhLRVlfTE9DQUxfTUFDSElORVxTT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93cyBJbnN0YWxsZXIgWE1MXDMuMTBASW5zdGFsbFJvb3QpPC9XaXhJbnN0YWxsUGF0aD4KKyAgICA8V2l4SW5zdGFsbFBhdGggQ29uZGl0aW9uPSInJChXaXhJbnN0YWxsUGF0aCknID09ICcnIj4kKFJlZ2lzdHJ5OkhLRVlfTE9DQUxfTUFDSElORVxTT0ZUV0FSRVxXb3c2NDMyTm9kZVxNaWNyb3NvZnRcV2luZG93cyBJbnN0YWxsZXIgWE1MXDMuMTBASW5zdGFsbFJvb3QpPC9XaXhJbnN0YWxsUGF0aD4KKyAgICA8V2l4VGFyZ2V0c1BhdGg+JChXaXhJbnN0YWxsUGF0aClcV2l4LnRhcmdldHM8L1dpeFRhcmdldHNQYXRoPgorICA8L1Byb3BlcnR5R3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvbnVnZXQvYnVpbGQuYmF0IGIvVG9vbHMvbnVnZXQvYnVpbGQuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMGIzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9udWdldC9idWlsZC5iYXQKQEAgLTAsMCArMSw1NSBAQAorQGVjaG8gb2ZmDQorc2V0bG9jYWwNCitzZXQgRD0lfmRwMA0KK3NldCBQQ0JVSUxEPSVEJS4uXC4uXFBDQnVpbGRcDQorDQorc2V0IEJVSUxEWDg2PQ0KK3NldCBCVUlMRFg2ND0NCitzZXQgUkVCVUlMRD0NCitzZXQgT1VUUFVUPQ0KK3NldCBQQUNLQUdFUz0NCisNCis6Q2hlY2tPcHRzDQoraWYgIiV+MSIgRVFVICItaCIgZ290byBIZWxwDQoraWYgIiV+MSIgRVFVICIteDg2IiAoc2V0IEJVSUxEWDg2PTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSIgRVFVICIteDY0IiAoc2V0IEJVSUxEWDY0PTEpICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSIgRVFVICItciIgKHNldCBSRUJVSUxEPS1yKSAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlfjEiIEVRVSAiLW8iIChzZXQgT1VUUFVUPSIvcDpPdXRwdXRQYXRoPSV+MiIpICYmIHNoaWZ0ICYmIHNoaWZ0ICYmIGdvdG8gQ2hlY2tPcHRzDQoraWYgIiV+MSIgRVFVICItLW91dCIgKHNldCBPVVRQVVQ9Ii9wOk91dHB1dFBhdGg9JX4yIikgJiYgc2hpZnQgJiYgc2hpZnQgJiYgZ290byBDaGVja09wdHMNCitpZiAiJX4xIiBFUVUgIi1wIiAoc2V0IFBBQ0tBR0VTPSVQQUNLQUdFUyUgJX4yKSAmJiBzaGlmdCAmJiBzaGlmdCAmJiBnb3RvIENoZWNrT3B0cw0KKw0KK2lmIG5vdCBkZWZpbmVkIEJVSUxEWDg2IGlmIG5vdCBkZWZpbmVkIEJVSUxEWDY0IChzZXQgQlVJTERYODY9MSkgJiYgKHNldCBCVUlMRFg2ND0xKQ0KKw0KK2NhbGwgIiVEJS4uXG1zaVxnZXRfZXh0ZXJuYWxzLmJhdCINCitjYWxsICIlUENCVUlMRCVlbnYuYmF0IiB4ODYNCisNCitpZiBkZWZpbmVkIFBBQ0tBR0VTIHNldCBQQUNLQUdFUz0iL3A6UGFja2FnZXM9JVBBQ0tBR0VTJSINCisNCitpZiBkZWZpbmVkIEJVSUxEWDg2ICgNCisgICAgaWYgZGVmaW5lZCBSRUJVSUxEICggY2FsbCAiJVBDQlVJTEQlYnVpbGQuYmF0IiAtZSAtcg0KKyAgICApIGVsc2UgaWYgbm90IGV4aXN0ICIlUENCVUlMRCV3aW4zMlxweXRob24uZXhlIiBjYWxsICIlUENCVUlMRCVidWlsZC5iYXQiIC1lDQorICAgIGlmIGVycm9ybGV2ZWwgMSBnb3RvIDplb2YNCisNCisgICAgbXNidWlsZCAiJUQlbWFrZV9wa2cucHJvaiIgL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPXg4NiAlT1VUUFVUJSAlUEFDS0FHRVMlDQorICAgIGlmIGVycm9ybGV2ZWwgMSBnb3RvIDplb2YNCispDQorDQoraWYgZGVmaW5lZCBCVUlMRFg2NCAoDQorICAgIGlmIGRlZmluZWQgUkVCVUlMRCAoIGNhbGwgIiVQQ0JVSUxEJWJ1aWxkLmJhdCIgLXAgeDY0IC1lIC1yDQorICAgICkgZWxzZSBpZiBub3QgZXhpc3QgIiVQQ0JVSUxEJWFtZDY0XHB5dGhvbi5leGUiIGNhbGwgIiVQQ0JVSUxEJWJ1aWxkLmJhdCIgLXAgeDY0IC1lDQorICAgIGlmIGVycm9ybGV2ZWwgMSBnb3RvIDplb2YNCisNCisgICAgbXNidWlsZCAiJUQlbWFrZV9wa2cucHJvaiIgL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPXg2NCAlT1VUUFVUJSAlUEFDS0FHRVMlDQorICAgIGlmIGVycm9ybGV2ZWwgMSBnb3RvIDplb2YNCispDQorDQorZXhpdCAvQiAwDQorDQorOkhlbHANCitlY2hvIGJ1aWxkLmJhdCBbLXg4Nl0gWy14NjRdIFstLW91dCBESVJdIFstcl0gWy1oXQ0KK2VjaG8uDQorZWNobyAgICAteDg2ICAgICAgICAgICAgICAgIEJ1aWxkIHg4NiBpbnN0YWxsZXJzDQorZWNobyAgICAteDY0ICAgICAgICAgICAgICAgIEJ1aWxkIHg2NCBpbnN0YWxsZXJzDQorZWNobyAgICAtciAgICAgICAgICAgICAgICAgIFJlYnVpbGQgcmF0aGVyIHRoYW4gaW5jcmVtZW50YWwgYnVpbGQNCitlY2hvICAgIC0tb3V0IFtESVJdICAgICAgICAgT3ZlcnJpZGUgb3V0cHV0IGRpcmVjdG9yeQ0KK2VjaG8gICAgLWggICAgICAgICAgICAgICAgICBTaG93IHVzYWdlDQpkaWZmIC0tZ2l0IGEvVG9vbHMvbnVnZXQvbWFrZV9wa2cucHJvaiBiL1Rvb2xzL251Z2V0L21ha2VfcGtnLnByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyYmYwNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL251Z2V0L21ha2VfcGtnLnByb2oKQEAgLTAsMCArMSw1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgorICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8UHJvamVjdEd1aWQ+ezEwNDg3OTQ1LTE1RDEtNDA5Mi1BMjE0LTMzODM5NUM0MTE2Qn08L1Byb2plY3RHdWlkPgorICAgICAgICA8T3V0cHV0TmFtZT5weXRob248L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXROYW1lIENvbmRpdGlvbj0iJChQbGF0Zm9ybSkgPT0gJ3g4NiciPiQoT3V0cHV0TmFtZSl4ODY8L091dHB1dE5hbWU+CisgICAgICAgIDxPdXRwdXRTdWZmaXg+PC9PdXRwdXRTdWZmaXg+CisgICAgICAgIDxTdXBwb3J0U2lnbmluZz5mYWxzZTwvU3VwcG9ydFNpZ25pbmc+CisgICAgICAgIDxCdWlsZEZvclJlbGVhc2UgQ29uZGl0aW9uPSIkKEJ1aWxkRm9yUmVsZWFzZSkgPT0gJyciPnRydWU8L0J1aWxkRm9yUmVsZWFzZT4KKyAgICA8L1Byb3BlcnR5R3JvdXA+CisKKyAgICA8SW1wb3J0IFByb2plY3Q9Ii4uXG1zaVxtc2kucHJvcHMiIC8+CisKKyAgICA8UHJvcGVydHlHcm91cD4KKyAgICAgICAgPE51Z2V0IENvbmRpdGlvbj0iJChOdWdldCkgPT0gJyciPiQoRXh0ZXJuYWxzRGlyKVx3aW5kb3dzLWluc3RhbGxlclxudWdldFxudWdldC5leGU8L051Z2V0PgorICAgICAgICA8TnVzcGVjVmVyc2lvbj4kKE1ham9yVmVyc2lvbk51bWJlcikuJChNaW5vclZlcnNpb25OdW1iZXIpLiQoTWljcm9WZXJzaW9uTnVtYmVyKTwvTnVzcGVjVmVyc2lvbj4KKyAgICAgICAgPFNpZ25PdXRwdXQ+ZmFsc2U8L1NpZ25PdXRwdXQ+CisgICAgICAgIDxUYXJnZXROYW1lPiQoT3V0cHV0TmFtZSkuJChOdXNwZWNWZXJzaW9uKTwvVGFyZ2V0TmFtZT4KKyAgICAgICAgPFRhcmdldEV4dD4ubnVwa2c8L1RhcmdldEV4dD4KKyAgICAgICAgPFRhcmdldFBhdGg+JChPdXRwdXRQYXRoKVwkKFRhcmdldE5hbWUpJChUYXJnZXRFeHQpPC9UYXJnZXRQYXRoPgorICAgICAgICA8SW50ZXJtZWRpYXRlT3V0cHV0UGF0aD4kKEludGVybWVkaWF0ZU91dHB1dFBhdGgpXG51Z2V0XyQoQXJjaE5hbWUpPC9JbnRlcm1lZGlhdGVPdXRwdXRQYXRoPgorICAgICAgICAKKyAgICAgICAgPENsZWFuQ29tbWFuZD5ybWRpciAvcS9zICIkKEludGVybWVkaWF0ZU91dHB1dFBhdGgpIjwvQ2xlYW5Db21tYW5kPgorICAgICAgICAKKyAgICAgICAgPFB5dGhvbkFyZ3VtZW50cz4iJChQeXRob25FeGUpIiAiJChNU0J1aWxkVGhpc0ZpbGVEaXJlY3RvcnkpXC4uXG1zaVxtYWtlX3ppcC5weSI8L1B5dGhvbkFyZ3VtZW50cz4KKyAgICAgICAgPFB5dGhvbkFyZ3VtZW50cz4kKFB5dGhvbkFyZ3VtZW50cykgLXQgIiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aCkiIC1hICQoQXJjaE5hbWUpPC9QeXRob25Bcmd1bWVudHM+CisgICAgICAgIAorICAgICAgICA8UGlwQXJndW1lbnRzPiIkKEludGVybWVkaWF0ZU91dHB1dFBhdGgpXHB5dGhvbi5leGUiIC1CIC1jICJpbXBvcnQgc3lzOyBzeXMucGF0aC5hcHBlbmQocickKFB5U291cmNlUGF0aClcTGliJyk7IGltcG9ydCBlbnN1cmVwaXA7IGVuc3VyZXBpcC5fbWFpbigpIjwvUGlwQXJndW1lbnRzPgorICAgICAgICA8UGFja2FnZUFyZ3VtZW50cyBDb25kaXRpb249IiQoUGFja2FnZXMpICE9ICcnIj4iJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKVxweXRob24uZXhlIiAtQiAtbSBwaXAgaW5zdGFsbCAtVSAkKFBhY2thZ2VzKTwvUGFja2FnZUFyZ3VtZW50cz4KKyAgICAgICAgCisgICAgICAgIDxOdWdldEFyZ3VtZW50cz4iJChOdWdldCkiIHBhY2sgIiQoTVNCdWlsZFRoaXNGaWxlRGlyZWN0b3J5KVwkKE91dHB1dE5hbWUpLm51c3BlYyI8L051Z2V0QXJndW1lbnRzPgorICAgICAgICA8TnVnZXRBcmd1bWVudHM+JChOdWdldEFyZ3VtZW50cykgLUJhc2VQYXRoICIkKEludGVybWVkaWF0ZU91dHB1dFBhdGgpIjwvTnVnZXRBcmd1bWVudHM+CisgICAgICAgIDxOdWdldEFyZ3VtZW50cz4kKE51Z2V0QXJndW1lbnRzKSAtT3V0cHV0RGlyZWN0b3J5ICIkKE91dHB1dFBhdGguVHJpbShgXGApKSI8L051Z2V0QXJndW1lbnRzPgorICAgICAgICA8TnVnZXRBcmd1bWVudHM+JChOdWdldEFyZ3VtZW50cykgLVZlcnNpb24gIiQoTnVzcGVjVmVyc2lvbikiPC9OdWdldEFyZ3VtZW50cz4KKyAgICAgICAgPE51Z2V0QXJndW1lbnRzPiQoTnVnZXRBcmd1bWVudHMpIC1Ob1BhY2thZ2VBbmFseXNpcyAtTm9uSW50ZXJhY3RpdmU8L051Z2V0QXJndW1lbnRzPgorICAgICAgICAKKyAgICAgICAgPEVudmlyb25tZW50PnNldGxvY2FsCitzZXQgRE9DX0ZJTEVOQU1FPXB5dGhvbiQoUHl0aG9uVmVyc2lvbikuY2htCitzZXQgVkNSRURJU1RfUEFUSD0kKFZTMTQwQ09NTlRPT0xTKVwuLlwuLlxWQ1xyZWRpc3RcJChQbGF0Zm9ybSlcTWljcm9zb2Z0LlZDMTQwLkNSVDwvRW52aXJvbm1lbnQ+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgICAgPFRhcmdldCBOYW1lPSJfTnVnZXRNaXNzaW5nIiBCZWZvcmVUYXJnZXRzPSJfQnVpbGQiIENvbmRpdGlvbj0iIUV4aXN0cygkKE51Z2V0KSkiPgorICAgICAgICA8RXJyb3IgVGV4dD0iJChOdWdldCkgY291bGQgbm90IGJlIGZvdW5kLiBFaXRoZXIgYXZvaWQgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgb3IgdXBkYXRlIHlvdXIgZXh0ZXJuYWxzL3dpbmRvd3MtaW5zdGFsbGVyIGZpbGVzLiIgLz4KKyAgICA8L1RhcmdldD4KKworICAgIDxUYXJnZXQgTmFtZT0iX0J1aWxkIj4KKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0iJChDbGVhbkNvbW1hbmQpIiAvPgorICAgICAgICA8RXhlYyBDb21tYW5kPSIkKEVudmlyb25tZW50KQorJChQeXRob25Bcmd1bWVudHMpIiAvPgorICAgICAgICA8RXhlYyBDb21tYW5kPSIkKFBpcEFyZ3VtZW50cykiIC8+CisgICAgICAgIDxFeGVjIENvbW1hbmQ9IiQoUGFja2FnZUFyZ3VtZW50cykiIENvbmRpdGlvbj0iJChQYWNrYWdlQXJndW1lbnRzKSAhPSAnJyIgLz4KKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0iJChOdWdldEFyZ3VtZW50cykiIC8+CisgICAgPC9UYXJnZXQ+CisKKyAgICA8VGFyZ2V0IE5hbWU9IkFmdGVyQnVpbGQiIC8+CisgICAgPFRhcmdldCBOYW1lPSJCdWlsZCIgRGVwZW5kc09uVGFyZ2V0cz0iX0J1aWxkO0FmdGVyQnVpbGQiIC8+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9Ub29scy9udWdldC9weXRob24ubnVzcGVjIGIvVG9vbHMvbnVnZXQvcHl0aG9uLm51c3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2M1YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbnVnZXQvcHl0aG9uLm51c3BlYwpAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxwYWNrYWdlID4KKyAgPG1ldGFkYXRhPgorICAgIDxpZD5weXRob248L2lkPgorICAgIDx0aXRsZT5QeXRob248L3RpdGxlPgorICAgIDx2ZXJzaW9uPjAuMC4wLjA8L3ZlcnNpb24+CisgICAgPGF1dGhvcnM+UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L2F1dGhvcnM+CisgICAgPGxpY2Vuc2VVcmw+aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWNlbnNlLmh0bWw8L2xpY2Vuc2VVcmw+CisgICAgPHByb2plY3RVcmw+aHR0cHM6Ly93d3cucHl0aG9uLm9yZy88L3Byb2plY3RVcmw+CisgICAgPHJlcXVpcmVMaWNlbnNlQWNjZXB0YW5jZT5mYWxzZTwvcmVxdWlyZUxpY2Vuc2VBY2NlcHRhbmNlPgorICAgIDxkZXNjcmlwdGlvbj5JbnN0YWxscyA2NC1iaXQgUHl0aG9uIGZvciB1c2UgaW4gYnVpbGQgc2NlbmFyaW9zLjwvZGVzY3JpcHRpb24+CisgICAgPGljb25Vcmw+aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9zdGF0aWMvZmF2aWNvbi5pY288L2ljb25Vcmw+CisgICAgPHRhZ3M+cHl0aG9uPC90YWdzPgorICA8L21ldGFkYXRhPgorICA8ZmlsZXM+CisgICAgPGZpbGUgc3JjPSIqKlwqIiB0YXJnZXQ9InRvb2xzIiAvPgorICA8L2ZpbGVzPgorPC9wYWNrYWdlPgpkaWZmIC0tZ2l0IGEvVG9vbHMvbnVnZXQvcHl0aG9ueDg2Lm51c3BlYyBiL1Rvb2xzL251Z2V0L3B5dGhvbng4Ni5udXNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1Yzg3OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL251Z2V0L3B5dGhvbng4Ni5udXNwZWMKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8cGFja2FnZSA+CisgIDxtZXRhZGF0YT4KKyAgICA8aWQ+cHl0aG9ueDg2PC9pZD4KKyAgICA8dGl0bGU+UHl0aG9uICgzMi1iaXQpPC90aXRsZT4KKyAgICA8YXV0aG9ycz5QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjwvYXV0aG9ycz4KKyAgICA8dmVyc2lvbj4wLjAuMC4wPC92ZXJzaW9uPgorICAgIDxsaWNlbnNlVXJsPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGljZW5zZS5odG1sPC9saWNlbnNlVXJsPgorICAgIDxwcm9qZWN0VXJsPmh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvPC9wcm9qZWN0VXJsPgorICAgIDxyZXF1aXJlTGljZW5zZUFjY2VwdGFuY2U+ZmFsc2U8L3JlcXVpcmVMaWNlbnNlQWNjZXB0YW5jZT4KKyAgICA8ZGVzY3JpcHRpb24+SW5zdGFsbHMgMzItYml0IFB5dGhvbiBmb3IgdXNlIGluIGJ1aWxkIHNjZW5hcmlvcy48L2Rlc2NyaXB0aW9uPgorICAgIDxpY29uVXJsPmh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvc3RhdGljL2Zhdmljb24uaWNvPC9pY29uVXJsPgorICAgIDx0YWdzPnB5dGhvbjwvdGFncz4KKyAgPC9tZXRhZGF0YT4KKyAgPGZpbGVzPgorICAgIDxmaWxlIHNyYz0iKipcKiIgdGFyZ2V0PSJ0b29scyIgLz4KKyAgPC9maWxlcz4KKzwvcGFja2FnZT4KZGlmZiAtLWdpdCBhL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5IGIvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKaW5kZXggODM3Y2Q4MS4uMjg1MDMwZSAxMDA2NDQKLS0tIGEvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKKysrIGIvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKQEAgLTEzOCw2ICsxMzgsMTQgQEAKICAgICAgICAgc2VsZi5maWxsKCJub25sb2NhbCAiKQogICAgICAgICBpbnRlcmxlYXZlKGxhbWJkYTogc2VsZi53cml0ZSgiLCAiKSwgc2VsZi53cml0ZSwgdC5uYW1lcykKIAorICAgIGRlZiBfQXdhaXQoc2VsZiwgdCk6CisgICAgICAgIHNlbGYud3JpdGUoIigiKQorICAgICAgICBzZWxmLndyaXRlKCJhd2FpdCIpCisgICAgICAgIGlmIHQudmFsdWU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCIgIikKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC52YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZSgiKSIpCisKICAgICBkZWYgX1lpZWxkKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCIoIikKICAgICAgICAgc2VsZi53cml0ZSgieWllbGQiKQpAQCAtMjExLDE2ICsyMTksNiBAQAogICAgICAgICAgICAgaWYgY29tbWE6IHNlbGYud3JpdGUoIiwgIikKICAgICAgICAgICAgIGVsc2U6IGNvbW1hID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChlKQotICAgICAgICBpZiB0LnN0YXJhcmdzOgotICAgICAgICAgICAgaWYgY29tbWE6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIGVsc2U6IGNvbW1hID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKiIpCi0gICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQuc3RhcmFyZ3MpCi0gICAgICAgIGlmIHQua3dhcmdzOgotICAgICAgICAgICAgaWYgY29tbWE6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIGVsc2U6IGNvbW1hID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKioiKQotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lmt3YXJncykKICAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKICAgICAgICAgc2VsZi5lbnRlcigpCkBAIC0yMjgsMTEgKzIyNiwxOCBAQAogICAgICAgICBzZWxmLmxlYXZlKCkKIAogICAgIGRlZiBfRnVuY3Rpb25EZWYoc2VsZiwgdCk6CisgICAgICAgIHNlbGYuX19GdW5jdGlvbkRlZl9oZWxwZXIodCwgImRlZiIpCisKKyAgICBkZWYgX0FzeW5jRnVuY3Rpb25EZWYoc2VsZiwgdCk6CisgICAgICAgIHNlbGYuX19GdW5jdGlvbkRlZl9oZWxwZXIodCwgImFzeW5jIGRlZiIpCisKKyAgICBkZWYgX19GdW5jdGlvbkRlZl9oZWxwZXIoc2VsZiwgdCwgZmlsbF9zdWZmaXgpOgogICAgICAgICBzZWxmLndyaXRlKCJcbiIpCiAgICAgICAgIGZvciBkZWNvIGluIHQuZGVjb3JhdG9yX2xpc3Q6CiAgICAgICAgICAgICBzZWxmLmZpbGwoIkAiKQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChkZWNvKQotICAgICAgICBzZWxmLmZpbGwoImRlZiAiK3QubmFtZSArICIoIikKKyAgICAgICAgZGVmX3N0ciA9IGZpbGxfc3VmZml4KyIgIit0Lm5hbWUgKyAiKCIKKyAgICAgICAgc2VsZi5maWxsKGRlZl9zdHIpCiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5hcmdzKQogICAgICAgICBzZWxmLndyaXRlKCIpIikKICAgICAgICAgaWYgdC5yZXR1cm5zOgpAQCAtMjQzLDcgKzI0OCwxMyBAQAogICAgICAgICBzZWxmLmxlYXZlKCkKIAogICAgIGRlZiBfRm9yKHNlbGYsIHQpOgotICAgICAgICBzZWxmLmZpbGwoImZvciAiKQorICAgICAgICBzZWxmLl9fRm9yX2hlbHBlcigiZm9yICIsIHQpCisKKyAgICBkZWYgX0FzeW5jRm9yKHNlbGYsIHQpOgorICAgICAgICBzZWxmLl9fRm9yX2hlbHBlcigiYXN5bmMgZm9yICIsIHQpCisKKyAgICBkZWYgX19Gb3JfaGVscGVyKHNlbGYsIGZpbGwsIHQpOgorICAgICAgICBzZWxmLmZpbGwoZmlsbCkKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnRhcmdldCkKICAgICAgICAgc2VsZi53cml0ZSgiIGluICIpCiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5pdGVyKQpAQCAtMjk3LDYgKzMwOCwxMyBAQAogICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYm9keSkKICAgICAgICAgc2VsZi5sZWF2ZSgpCiAKKyAgICBkZWYgX0FzeW5jV2l0aChzZWxmLCB0KToKKyAgICAgICAgc2VsZi5maWxsKCJhc3luYyB3aXRoICIpCisgICAgICAgIGludGVybGVhdmUobGFtYmRhOiBzZWxmLndyaXRlKCIsICIpLCBzZWxmLmRpc3BhdGNoLCB0Lml0ZW1zKQorICAgICAgICBzZWxmLmVudGVyKCkKKyAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCisgICAgICAgIHNlbGYubGVhdmUoKQorCiAgICAgIyBleHByCiAgICAgZGVmIF9CeXRlcyhzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZShyZXByKHQucykpCkBAIC0zNzUsMTIgKzM5MywyMSBAQAogCiAgICAgZGVmIF9EaWN0KHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCJ7IikKLSAgICAgICAgZGVmIHdyaXRlX3BhaXIocGFpcik6Ci0gICAgICAgICAgICAoaywgdikgPSBwYWlyCisgICAgICAgIGRlZiB3cml0ZV9rZXlfdmFsdWVfcGFpcihrLCB2KToKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goaykKICAgICAgICAgICAgIHNlbGYud3JpdGUoIjogIikKICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godikKLSAgICAgICAgaW50ZXJsZWF2ZShsYW1iZGE6IHNlbGYud3JpdGUoIiwgIiksIHdyaXRlX3BhaXIsIHppcCh0LmtleXMsIHQudmFsdWVzKSkKKworICAgICAgICBkZWYgd3JpdGVfaXRlbShpdGVtKToKKyAgICAgICAgICAgIGssIHYgPSBpdGVtCisgICAgICAgICAgICBpZiBrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBmb3IgZGljdGlvbmFyeSB1bnBhY2tpbmcgb3BlcmF0b3IgaW4gZGljdHMgeyoqeyd5JzogMn19CisgICAgICAgICAgICAgICAgIyBzZWUgUEVQIDQ0OCBmb3IgZGV0YWlscworICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIioqIikKKyAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdyaXRlX2tleV92YWx1ZV9wYWlyKGssIHYpCisgICAgICAgIGludGVybGVhdmUobGFtYmRhOiBzZWxmLndyaXRlKCIsICIpLCB3cml0ZV9pdGVtLCB6aXAodC5rZXlzLCB0LnZhbHVlcykpCiAgICAgICAgIHNlbGYud3JpdGUoIn0iKQogCiAgICAgZGVmIF9UdXBsZShzZWxmLCB0KToKQEAgLTQwMSw3ICs0MjgsNyBAQAogICAgICAgICBzZWxmLmRpc3BhdGNoKHQub3BlcmFuZCkKICAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKLSAgICBiaW5vcCA9IHsgIkFkZCI6IisiLCAiU3ViIjoiLSIsICJNdWx0IjoiKiIsICJEaXYiOiIvIiwgIk1vZCI6IiUiLAorICAgIGJpbm9wID0geyAiQWRkIjoiKyIsICJTdWIiOiItIiwgIk11bHQiOiIqIiwgIk1hdE11bHQiOiJAIiwgIkRpdiI6Ii8iLCAiTW9kIjoiJSIsCiAgICAgICAgICAgICAgICAgICAgICJMU2hpZnQiOiI8PCIsICJSU2hpZnQiOiI+PiIsICJCaXRPciI6InwiLCAiQml0WG9yIjoiXiIsICJCaXRBbmQiOiImIiwKICAgICAgICAgICAgICAgICAgICAgIkZsb29yRGl2IjoiLy8iLCAiUG93IjogIioqIn0KICAgICBkZWYgX0Jpbk9wKHNlbGYsIHQpOgpAQCAtNDUwLDE2ICs0NzcsNiBAQAogICAgICAgICAgICAgaWYgY29tbWE6IHNlbGYud3JpdGUoIiwgIikKICAgICAgICAgICAgIGVsc2U6IGNvbW1hID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChlKQotICAgICAgICBpZiB0LnN0YXJhcmdzOgotICAgICAgICAgICAgaWYgY29tbWE6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIGVsc2U6IGNvbW1hID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKiIpCi0gICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQuc3RhcmFyZ3MpCi0gICAgICAgIGlmIHQua3dhcmdzOgotICAgICAgICAgICAgaWYgY29tbWE6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIGVsc2U6IGNvbW1hID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKioiKQotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lmt3YXJncykKICAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKICAgICBkZWYgX1N1YnNjcmlwdChzZWxmLCB0KToKQEAgLTU0Myw4ICs1NjAsMTEgQEAKICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQua3dhcmcuYW5ub3RhdGlvbikKIAogICAgIGRlZiBfa2V5d29yZChzZWxmLCB0KToKLSAgICAgICAgc2VsZi53cml0ZSh0LmFyZykKLSAgICAgICAgc2VsZi53cml0ZSgiPSIpCisgICAgICAgIGlmIHQuYXJnIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLndyaXRlKCIqKiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndyaXRlKHQuYXJnKQorICAgICAgICAgICAgc2VsZi53cml0ZSgiPSIpCiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC52YWx1ZSkKIAogICAgIGRlZiBfTGFtYmRhKHNlbGYsIHQpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvcHliZW5jaC9SRUFETUUgYi9Ub29scy9weWJlbmNoL1JFQURNRQppbmRleCBlNTllNmMwLi40MGY3ZWVjIDEwMDY0NAotLS0gYS9Ub29scy9weWJlbmNoL1JFQURNRQorKysgYi9Ub29scy9weWJlbmNoL1JFQURNRQpAQCAtNCw3ICs0LDcgQEAKIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogCiAgICAgIEV4dGVuZGFibGUgc3VpdGUgb2YgbG93LWxldmVsIGJlbmNobWFya3MgZm9yIG1lYXN1cmluZwotICAgICAgICAgIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIAorICAgICAgICAgIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgIChpbnRlcnByZXRlciwgY29tcGlsZXIgb3IgVk0pLgogCiBweWJlbmNoIGlzIGEgY29sbGVjdGlvbiBvZiB0ZXN0cyB0aGF0IHByb3ZpZGVzIGEgc3RhbmRhcmRpemVkIHdheSB0bwpAQCAtMzQsMTEgKzM0LDExIEBACiAKIEl0IGlzIHVzdWFsbHkgYSBnb29kIGlkZWEgdG8gcnVuIHB5YmVuY2gucHkgbXVsdGlwbGUgdGltZXMgdG8gc2VlCiB3aGV0aGVyIHRoZSBlbnZpcm9ubWVudCwgdGltZXJzIGFuZCBiZW5jaG1hcmsgcnVuLXRpbWVzIGFyZSBzdWl0YWJsZQotZm9yIGRvaW5nIGJlbmNobWFyayB0ZXN0cy4gCitmb3IgZG9pbmcgYmVuY2htYXJrIHRlc3RzLgogCiBZb3UgY2FuIHVzZSB0aGUgY29tcGFyaXNvbiBmZWF0dXJlIG9mIHB5YmVuY2gucHkgKCdweWJlbmNoLnB5IC1jCiA8ZmlsZT4nKSB0byBjaGVjayBob3cgd2VsbCB0aGUgc3lzdGVtIGJlaGF2ZXMgaW4gY29tcGFyaXNvbiB0byBhCi1yZWZlcmVuY2UgcnVuLiAKK3JlZmVyZW5jZSBydW4uCiAKIElmIHRoZSBkaWZmZXJlbmNlcyBhcmUgd2VsbCBiZWxvdyAxMCUgZm9yIGVhY2ggdGVzdCwgdGhlbiB5b3UgaGF2ZSBhCiBzeXN0ZW0gdGhhdCBpcyBnb29kIGZvciBkb2luZyBiZW5jaG1hcmsgdGVzdGluZ3MuICBPZiB5b3UgZ2V0IHJhbmRvbQpAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgIyBmb3IgY29tcGFyaXNvbnMgb2YgYmVuY2htYXJrIHJ1bnMgLSB0ZXN0cyB3aXRoIHVuZXF1YWwgdmVyc2lvbgogICAgICMgbnVtYmVyIHdpbGwgbm90IGdldCBjb21wYXJlZC4KICAgICB2ZXJzaW9uID0gMS4wCi0gICAgCisKICAgICAjIFRoZSBudW1iZXIgb2YgYWJzdHJhY3Qgb3BlcmF0aW9ucyBkb25lIGluIGVhY2ggcm91bmQgb2YgdGhlCiAgICAgIyB0ZXN0LiBBbiBvcGVyYXRpb24gaXMgdGhlIGJhc2ljIHVuaXQgb2Ygd2hhdCB5b3Ugd2FudCB0bwogICAgICMgbWVhc3VyZS4gVGhlIGJlbmNobWFyayB3aWxsIG91dHB1dCB0aGUgYW1vdW50IG9mIHJ1bi10aW1lIHBlcgpAQCAtMjY0LDcgKzI2NCw3IEBACiAKICAgICAgICAgICAgICMgUmVwZWF0IHRoZSBvcGVyYXRpb25zIHBlciByb3VuZCB0byByYWlzZSB0aGUgcnVuLXRpbWUKICAgICAgICAgICAgICMgcGVyIG9wZXJhdGlvbiBzaWduaWZpY2FudGx5IGFib3ZlIHRoZSBub2lzZSBsZXZlbCBvZiB0aGUKLSAgICAgICAgICAgICMgZm9yLWxvb3Agb3ZlcmhlYWQuIAorICAgICAgICAgICAgIyBmb3ItbG9vcCBvdmVyaGVhZC4KIAogCSAgICAjIEV4ZWN1dGUgMjAgb3BlcmF0aW9ucyAoYSArPSAxKToKICAgICAgICAgICAgIGEgKz0gMQpAQCAtMzU4LDggKzM1OCw4IEBACiAgICAgICAgIC0gY2hhbmdlZCB0aGUgb3V0cHV0IGZvcm1hdCBhIGJpdCB0byBtYWtlIGl0IGxvb2sKICAgICAgICAgICBuaWNlcgogICAgICAgICAtIHJlZmFjdG9yZWQgdGhlIEFQSXMgc29tZXdoYXQKLSAgMS4zKzogU3RldmUgSG9sZGVuIGFkZGVkIHRoZSBOZXdJbnN0YW5jZXMgdGVzdCBhbmQgdGhlIGZpbHRlcmluZyAKLSAgICAgICBvcHRpb24gZHVyaW5nIHRoZSBOZWVkRm9yU3BlZWQgc3ByaW50OyB0aGlzIGFsc28gdHJpZ2dlcmVkIGEgbG9uZyAKKyAgMS4zKzogU3RldmUgSG9sZGVuIGFkZGVkIHRoZSBOZXdJbnN0YW5jZXMgdGVzdCBhbmQgdGhlIGZpbHRlcmluZworICAgICAgIG9wdGlvbiBkdXJpbmcgdGhlIE5lZWRGb3JTcGVlZCBzcHJpbnQ7IHRoaXMgYWxzbyB0cmlnZ2VyZWQgYSBsb25nCiAgICAgICAgZGlzY3Vzc2lvbiBvbiBob3cgdG8gaW1wcm92ZSBiZW5jaG1hcmsgdGltaW5nIGFuZCBmaW5hbGx5CiAgICAgICAgcmVzdWx0ZWQgaW4gdGhlIHJlbGVhc2Ugb2YgMi4wCiAgIDEuMzogaW5pdGlhbCBjaGVja2luIGludG8gdGhlIFB5dGhvbiBTVk4gcmVwb3NpdG9yeQpkaWZmIC0tZ2l0IGEvVG9vbHMvcHluY2hlL1JFQURNRSBiL1Rvb2xzL3B5bmNoZS9SRUFETUUKaW5kZXggZDIwZWZjMy4uZTAyNjE1OSAxMDA2NDQKLS0tIGEvVG9vbHMvcHluY2hlL1JFQURNRQorKysgYi9Ub29scy9weW5jaGUvUkVBRE1FCkBAIC00OCw3ICs0OCw3IEBACiAKICAgICAtLWluaXRmaWxlIGZpbGUKICAgICAtaSBmaWxlCi0gICAgICAgIEFsdGVybmF0ZSBsb2NhdGlvbiBvZiB0aGUgcGVyc2lzdGVudCBpbml0aWFsaXphdGlvbiBmaWxlLiAgU2VlIAorICAgICAgICBBbHRlcm5hdGUgbG9jYXRpb24gb2YgdGhlIHBlcnNpc3RlbnQgaW5pdGlhbGl6YXRpb24gZmlsZS4gIFNlZQogICAgICAgICB0aGUgc2VjdGlvbiBvbiBQZXJzaXN0ZW5jeSBiZWxvdy4KIAogICAgIC0taWdub3JlCkBAIC04MCw3ICs4MCw3IEBACiAKICAgICAgICAgcHlDb2xvckNob29zZXIuYXNrY29sb3IoKQogCi0gICAgd2hpY2ggd2lsbCBwb3B1cCBQeW5jaGUgYXMgYSBtb2RhbCBkaWFsb2csIGFuZCByZXR1cm4gdGhlIHNlbGVjdGVkIAorICAgIHdoaWNoIHdpbGwgcG9wdXAgUHluY2hlIGFzIGEgbW9kYWwgZGlhbG9nLCBhbmQgcmV0dXJuIHRoZSBzZWxlY3RlZAogICAgIGNvbG9yLgogCiAgICAgVGhlcmUgYXJlIHNvbWUgVUkgZGlmZmVyZW5jZXMgd2hlbiBydW5uaW5nIGFzIGEgbW9kYWwKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiAgICAgICAgIG1hc3RlclsqXQogICAgICAgICAgICAgdGhlIG1hc3RlciB3aW5kb3cgdG8gdXNlIGFzIHRoZSBwYXJlbnQgb2YgdGhlIG1vZGFsCi0gICAgICAgICAgICBkaWFsb2cuICBXaXRob3V0IHRoaXMgYXJndW1lbnQsIHB5Q29sb3JDaG9vc2VyIHdpbGwgY3JlYXRlIAorICAgICAgICAgICAgZGlhbG9nLiAgV2l0aG91dCB0aGlzIGFyZ3VtZW50LCBweUNvbG9yQ2hvb3NlciB3aWxsIGNyZWF0ZQogICAgICAgICAgICAgaXRzIG93biBUa2ludGVyLlRrIGluc3RhbmNlIGFzIHRoZSBtYXN0ZXIuICBUaGlzIG1heSBub3QKICAgICAgICAgICAgIGJlIHdoYXQgeW91IHdhbnQuCiAKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgIFNlbGVjdGVkIGNoaXAgY29sb3IgZXhhY3RseSBtYXRjaGVzIHRoZSBOZWFyZXN0IGNoaXAgY29sb3IsIHlvdQogICAgIHdpbGwgc2VlIHRoZSBjb2xvciBuYW1lIGFwcGVhciBiZWxvdyB0aGUgY29sb3Igc3BlY2lmaWNhdGlvbiBmb3IKICAgICB0aGUgU2VsZWN0ZWQgY2hpcC4KLSAgICAKKwogICAgIENsaWNraW5nIG9uIHRoZSBOZWFyZXN0IGNvbG9yIGNoaXAgc2VsZWN0cyB0aGF0IGNvbG9yLiAgQ29sb3IKICAgICBkaXN0YW5jZSBpcyBjYWxjdWxhdGVkIGluIHRoZSAzRCBzcGFjZSBvZiB0aGUgUkdCIGNvbG9yIHNvbGlkIGFuZAogICAgIGlmIG1vcmUgdGhhbiBvbmUgY29sb3IgbmFtZSBpcyB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoZSBzZWxlY3RlZApAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgZm9ybWF0IGZvciBib3RoIHZhbHVlcyBhbmQgbmFtZXMKIAogICAgIHdlYmNvbG9ycy50eHQgLS0gVGhlIDE0MCBjb2xvciBuYW1lcyB0aGF0IFRpbSBQZXRlcnMgYW5kIGhpcwotICAgIHNpc3RlciBzYXkgTlMgYW5kIE1TSUUgYm90aCB1bmRlcnN0YW5kICh3aXRoIHNvbWUgY29udHJvdmVyc3kgb3ZlciAKKyAgICBzaXN0ZXIgc2F5IE5TIGFuZCBNU0lFIGJvdGggdW5kZXJzdGFuZCAod2l0aCBzb21lIGNvbnRyb3ZlcnN5IG92ZXIKICAgICBBbGljZUJsdWUpLgogCiAgICAgbmFtZWRjb2xvcnMudHh0IC0tIGFuIGFsdGVybmF0aXZlIHNldCBvZiBOZXRzY2FwZSBjb2xvcnMuCkBAIC0zNjksOCArMzY5LDggQEAKICAgICBZb3UgY2FuIHN3aXRjaCBiZXR3ZWVuIGZpbGVzIGJ5IGNob29zaW5nICJMb2FkIHBhbGV0dGUuLi4iIGZyb20KICAgICB0aGUgIkZpbGUiIG1lbnUuICBUaGlzIGJyaW5ncyB1cCBhIHN0YW5kYXJkIFRrIGZpbGUgZGlhbG9nLgogICAgIENob29zZSB0aGUgZmlsZSB5b3Ugd2FudCBhbmQgdGhlbiBjbGljayAiT2siLiAgSWYgUHluY2hlCi0gICAgdW5kZXJzdGFuZHMgdGhlIGZvcm1hdCBpbiB0aGlzIGZpbGUsIGl0IHdpbGwgbG9hZCB0aGUgZGF0YWJhc2UgYW5kIAotICAgIHVwZGF0ZSB0aGUgYXBwcm9wcmlhdGUgd2luZG93cy4gIElmIG5vdCwgaXQgd2lsbCBicmluZyB1cCBhbiBlcnJvciAKKyAgICB1bmRlcnN0YW5kcyB0aGUgZm9ybWF0IGluIHRoaXMgZmlsZSwgaXQgd2lsbCBsb2FkIHRoZSBkYXRhYmFzZSBhbmQKKyAgICB1cGRhdGUgdGhlIGFwcHJvcHJpYXRlIHdpbmRvd3MuICBJZiBub3QsIGl0IHdpbGwgYnJpbmcgdXAgYW4gZXJyb3IKICAgICBkaWFsb2cuCiAKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9kaWZmLnB5IGIvVG9vbHMvc2NyaXB0cy9kaWZmLnB5CmluZGV4IDhiZTUyN2YuLjk3MjBhNDMgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZGlmZi5weQorKysgYi9Ub29scy9zY3JpcHRzL2RpZmYucHkKQEAgLTgsNyArOCw3IEBACiAKICIiIgogCi1pbXBvcnQgc3lzLCBvcywgdGltZSwgZGlmZmxpYiwgb3B0cGFyc2UKK2ltcG9ydCBzeXMsIG9zLCB0aW1lLCBkaWZmbGliLCBhcmdwYXJzZQogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWV6b25lCiAKIGRlZiBmaWxlX210aW1lKHBhdGgpOgpAQCAtMTgsMjMgKzE4LDI1IEBACiAKIGRlZiBtYWluKCk6CiAKLSAgICB1c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIGZyb21maWxlIHRvZmlsZSIKLSAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2UpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1jIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nUHJvZHVjZSBhIGNvbnRleHQgZm9ybWF0IGRpZmYgKGRlZmF1bHQpJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbigiLXUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdQcm9kdWNlIGEgdW5pZmllZCBmb3JtYXQgZGlmZicpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0nUHJvZHVjZSBIVE1MIHNpZGUgYnkgc2lkZSBkaWZmIChjYW4gdXNlIC1jIGFuZCAtbCBpbiBjb25qdW5jdGlvbiknKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J1Byb2R1Y2UgYSBuZGlmZiBmb3JtYXQgZGlmZicpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oIi1sIiwgIi0tbGluZXMiLCB0eXBlPSJpbnQiLCBkZWZhdWx0PTMsIGhlbHA9J1NldCBudW1iZXIgb2YgY29udGV4dCBsaW5lcyAoZGVmYXVsdCAzKScpCi0gICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotCi0gICAgaWYgbGVuKGFyZ3MpID09IDA6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBpZiBsZW4oYXJncykgIT0gMjoKLSAgICAgICAgcGFyc2VyLmVycm9yKCJuZWVkIHRvIHNwZWNpZnkgYm90aCBhIGZyb21maWxlIGFuZCB0b2ZpbGUiKQorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQcm9kdWNlIGEgY29udGV4dCBmb3JtYXQgZGlmZiAoZGVmYXVsdCknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy11JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Byb2R1Y2UgYSB1bmlmaWVkIGZvcm1hdCBkaWZmJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQcm9kdWNlIEhUTUwgc2lkZSBieSBzaWRlIGRpZmYgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGNhbiB1c2UgLWMgYW5kIC1sIGluIGNvbmp1bmN0aW9uKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW4nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUHJvZHVjZSBhIG5kaWZmIGZvcm1hdCBkaWZmJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbCcsICctLWxpbmVzJywgdHlwZT1pbnQsIGRlZmF1bHQ9MywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NldCBudW1iZXIgb2YgY29udGV4dCBsaW5lcyAoZGVmYXVsdCAzKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZnJvbWZpbGUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3RvZmlsZScpCisgICAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKIAogICAgIG4gPSBvcHRpb25zLmxpbmVzCi0gICAgZnJvbWZpbGUsIHRvZmlsZSA9IGFyZ3MKKyAgICBmcm9tZmlsZSA9IG9wdGlvbnMuZnJvbWZpbGUKKyAgICB0b2ZpbGUgPSBvcHRpb25zLnRvZmlsZQogCiAgICAgZnJvbWRhdGUgPSBmaWxlX210aW1lKGZyb21maWxlKQogICAgIHRvZGF0ZSA9IGZpbGVfbXRpbWUodG9maWxlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9kdXRyZWUuZG9jIGIvVG9vbHMvc2NyaXB0cy9kdXRyZWUuZG9jCmluZGV4IDJhMDk0MjYuLjk3YmQyZTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZHV0cmVlLmRvYworKysgYi9Ub29scy9zY3JpcHRzL2R1dHJlZS5kb2MKQEAgLTM0LDEzICszNCwxMyBAQAogOiAgICAgIHwgICAgICAgMSBzbS5iYWsKIAogQXQgZmlyc3QgSSB0aG91Z2h0IEkgY291bGQganVzdCBrZWVwIG9uZSBsb2NhbCBsaXN0IGFyb3VuZAotYXQgb25jZSwgYnV0IHRoaXMgc2VlbXMgaW5oZXJlbnRseSByZWN1cnNpdmUuICBXaGljaCBtZWFucyAKK2F0IG9uY2UsIGJ1dCB0aGlzIHNlZW1zIGluaGVyZW50bHkgcmVjdXJzaXZlLiAgV2hpY2ggbWVhbnMKIEkgbmVlZCBhbiByZWFsIHJlY3Vyc2l2ZSBkYXRhIHN0cnVjdHVyZS4gIE1heWJlIHlvdSBjb3VsZAogZG8gaXQgd2l0aCBvbmUgb2YgdGhlICVhc3NvYyBhcnJheXMgTGFycnkgdXNlcyBpbiB0aGUgYmVnYXQKIHByb2dyYW1zLCBidXQgSSBicm9rZSBkb3duIGFuZCBnb3QgZGlydHkuICBJIHRoaW5rIHRoZSBoYXJkZXN0Ci1wYXJ0IHdhcyBtYXRjaGluZyBGZWxpeCdzIGRlc2lyZWQgb3V0cHV0IGV4YWN0bHkuICBJdCdzIG5vdCAKK3BhcnQgd2FzIG1hdGNoaW5nIEZlbGl4J3MgZGVzaXJlZCBvdXRwdXQgZXhhY3RseS4gIEl0J3Mgbm90CiBibGF6aW5nbHkgZmFzdDogSSBzaG91bGQgcHJvYmFibHkgaW5saW5lIHRoZSAmY2hpbGRvZiByb3V0aW5lLAotYnV0IGl0ICp3YXMqIGZhc3RlciB0byB3cml0ZSB0aGFuIEkgY291bGQgaGF2ZSB3cml0dGVuIHRoZSAKK2J1dCBpdCAqd2FzKiBmYXN0ZXIgdG8gd3JpdGUgdGhhbiBJIGNvdWxkIGhhdmUgd3JpdHRlbiB0aGUKIGVxdWl2YWxlbnQgQyBwcm9ncmFtLgogCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZXB0YWdzLnB5IGIvVG9vbHMvc2NyaXB0cy9lcHRhZ3MucHkKaW5kZXggNjcxZmYxMS4uNDAxYWM3ZSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9lcHRhZ3MucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9lcHRhZ3MucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAiIiJBcHBlbmQgdGFncyBmb3VuZCBpbiBmaWxlIG5hbWVkICdmaWxlbmFtZScgdG8gdGhlIG9wZW4gZmlsZSAnb3V0ZnAnIiIiCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICBleGNlcHQ6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0Nhbm5vdCBvcGVuICVzXG4nJWZpbGVuYW1lKQogICAgICAgICByZXR1cm4KICAgICBjaGFybm8gPSAwCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRfcmVjdXJzaW9ubGltaXQucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRfcmVjdXJzaW9ubGltaXQucHkKaW5kZXggMTE3MTE0Ni4uYjI4NDJhNiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kX3JlY3Vyc2lvbmxpbWl0LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZF9yZWN1cnNpb25saW1pdC5weQpAQCAtOTIsNyArOTIsNyBAQAogZGVmIHRlc3RfY29tcGlsZXJfcmVjdXJzaW9uKCk6CiAgICAgIyBUaGUgY29tcGlsZXIgdXNlcyBhIHNjYWxpbmcgZmFjdG9yIHRvIHN1cHBvcnQgYWRkaXRpb25hbCBsZXZlbHMKICAgICAjIG9mIHJlY3Vyc2lvbi4gVGhpcyBpcyBhIHNhbml0eSBjaGVjayBvZiB0aGF0IHNjYWxpbmcgdG8gZW5zdXJlCi0gICAgIyBpdCBzdGlsbCByYWlzZXMgUnVudGltZUVycm9yIGV2ZW4gYXQgaGlnaGVyIHJlY3Vyc2lvbiBsaW1pdHMKKyAgICAjIGl0IHN0aWxsIHJhaXNlcyBSZWN1cnNpb25FcnJvciBldmVuIGF0IGhpZ2hlciByZWN1cnNpb24gbGltaXRzCiAgICAgY29tcGlsZSgiKCkiICogKDEwICogc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCkpLCAiPHNpbmdsZT4iLCAic2luZ2xlIikKIAogZGVmIGNoZWNrX2xpbWl0KG4sIHRlc3RfZnVuY19uYW1lKToKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICMgQXR0cmlidXRlRXJyb3IgY2FuIGJlIHJhaXNlZCBiZWNhdXNlIG9mIHRoZSB3YXkgZS5nLiBQeURpY3RfR2V0SXRlbSgpCiAgICAgIyBzaWxlbmNlcyBhbGwgZXhjZXB0aW9ucyBhbmQgcmV0dXJucyBOVUxMLCB3aGljaCBpcyB1c3VhbGx5IGludGVycHJldGVkCiAgICAgIyBhcyAibWlzc2luZyBhdHRyaWJ1dGUiLgotICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChSZWN1cnNpb25FcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICBwYXNzCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQoIllpa2VzISIpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRub2NvZGluZy5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZG5vY29kaW5nLnB5CmluZGV4IDVmMzc5NWUuLjZjMTZiMWMgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZG5vY29kaW5nLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZG5vY29kaW5nLnB5CkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHNvcGhpc3RpY2F0ZWQgUHl0aG9uIHNvdXJjZSBmaWxlIHNlYXJjaCB3aWxsIGJlIGRvbmUuIiwgZmlsZT1zeXMuc3RkZXJyKQogCiAKLWRlY2xfcmUgPSByZS5jb21waWxlKHJiJ15bIFx0XGZdKiMuKmNvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknKQorZGVjbF9yZSA9IHJlLmNvbXBpbGUocmInXlsgXHRcZl0qIy4qP2NvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknKQogYmxhbmtfcmUgPSByZS5jb21waWxlKHJiJ15bIFx0XGZdKig/OlsjXHJcbl18JCknKQogCiBkZWYgZ2V0X2RlY2xhcmF0aW9uKGxpbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9nZW5lcmF0ZV9vcGNvZGVfaC5weSBiL1Rvb2xzL3NjcmlwdHMvZ2VuZXJhdGVfb3Bjb2RlX2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyZjlhNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvZ2VuZXJhdGVfb3Bjb2RlX2gucHkKQEAgLTAsMCArMSw1NCBAQAorIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgdGhlIG9wY29kZS5oIGhlYWRlciBmaWxlLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CisKK2ltcG9ydCBzeXMKK2hlYWRlciA9ICIiIi8qIEF1dG8tZ2VuZXJhdGVkIGJ5IFRvb2xzL3NjcmlwdHMvZ2VuZXJhdGVfb3Bjb2RlX2gucHkgKi8KKyNpZm5kZWYgUHlfT1BDT0RFX0gKKyNkZWZpbmUgUHlfT1BDT0RFX0gKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisgICAgLyogSW5zdHJ1Y3Rpb24gb3Bjb2RlcyBmb3IgY29tcGlsZWQgY29kZSAqLworIiIiCisKK2Zvb3RlciA9ICIiIgorLyogRVhDRVBUX0hBTkRMRVIgaXMgYSBzcGVjaWFsLCBpbXBsaWNpdCBibG9jayB0eXBlIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbgorICAgZW50ZXJpbmcgYW4gZXhjZXB0IGhhbmRsZXIuIEl0IGlzIG5vdCBhbiBvcGNvZGUgYnV0IHdlIGRlZmluZSBpdCBoZXJlCisgICBhcyB3ZSB3YW50IGl0IHRvIGJlIGF2YWlsYWJsZSB0byBib3RoIGZyYW1lb2JqZWN0LmMgYW5kIGNldmFsLmMsIHdoaWxlCisgICByZW1haW5pbmcgcHJpdmF0ZS4qLworI2RlZmluZSBFWENFUFRfSEFORExFUiAyNTcKKworCitlbnVtIGNtcF9vcCB7UHlDbXBfTFQ9UHlfTFQsIFB5Q21wX0xFPVB5X0xFLCBQeUNtcF9FUT1QeV9FUSwgUHlDbXBfTkU9UHlfTkUsCisgICAgICAgICAgICAgICAgUHlDbXBfR1Q9UHlfR1QsIFB5Q21wX0dFPVB5X0dFLCBQeUNtcF9JTiwgUHlDbXBfTk9UX0lOLAorICAgICAgICAgICAgICAgIFB5Q21wX0lTLCBQeUNtcF9JU19OT1QsIFB5Q21wX0VYQ19NQVRDSCwgUHlDbXBfQkFEfTsKKworI2RlZmluZSBIQVNfQVJHKG9wKSAoKG9wKSA+PSBIQVZFX0FSR1VNRU5UKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qICFQeV9PUENPREVfSCAqLworIiIiCisKKworZGVmIG1haW4ob3Bjb2RlX3B5LCBvdXRmaWxlPSdJbmNsdWRlL29wY29kZS5oJyk6CisgICAgb3Bjb2RlID0ge30KKyAgICBleGVjKG9wZW4ob3Bjb2RlX3B5KS5yZWFkKCksIG9wY29kZSkKKyAgICBvcG1hcCA9IG9wY29kZVsnb3BtYXAnXQorICAgIHdpdGggb3BlbihvdXRmaWxlLCAndycpIGFzIGZvYmo6CisgICAgICAgIGZvYmoud3JpdGUoaGVhZGVyKQorICAgICAgICBmb3IgbmFtZSBpbiBvcGNvZGVbJ29wbmFtZSddOgorICAgICAgICAgICAgaWYgbmFtZSBpbiBvcG1hcDoKKyAgICAgICAgICAgICAgICBmb2JqLndyaXRlKCIjZGVmaW5lICUtMjNzICUzc1xuIiAlIChuYW1lLCBvcG1hcFtuYW1lXSkpCisgICAgICAgICAgICBpZiBuYW1lID09ICdQT1BfRVhDRVBUJzogIyBTcGVjaWFsIGVudHJ5IGZvciBIQVZFX0FSR1VNRU5UCisgICAgICAgICAgICAgICAgZm9iai53cml0ZSgiI2RlZmluZSAlLTIzcyAlM2RcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnSEFWRV9BUkdVTUVOVCcsIG9wY29kZVsnSEFWRV9BUkdVTUVOVCddKSkKKyAgICAgICAgZm9iai53cml0ZShmb290ZXIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcnVuX3Rlc3RzLnB5IGIvVG9vbHMvc2NyaXB0cy9ydW5fdGVzdHMucHkKaW5kZXggYTZjNWRhMy4uYjU4MmUxMyAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9ydW5fdGVzdHMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9ydW5fdGVzdHMucHkKQEAgLTMzLDggKzMzLDYgQEAKICAgICAjIEFsbG93IHVzZXItc3BlY2lmaWVkIGludGVycHJldGVyIG9wdGlvbnMgdG8gb3ZlcnJpZGUgb3VyIGRlZmF1bHRzLgogICAgIGFyZ3MuZXh0ZW5kKHRlc3Quc3VwcG9ydC5hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKSkKIAotICAgICMgV29ya2Fyb3VuZCBmb3IgaXNzdWUgIzIwMzU1Ci0gICAgb3MuZW52aXJvbi5wb3AoIlBZVEhPTldBUk5JTkdTIiwgTm9uZSkKICAgICAjIFdvcmthcm91bmQgZm9yIGlzc3VlICMyMDM2MQogICAgIGFyZ3MuZXh0ZW5kKFsnLVcnLCAnZXJyb3I6OkJ5dGVzV2FybmluZyddKQogCkBAIC01MCw3ICs0OCwxMSBAQAogICAgICAgICBhcmdzLmV4dGVuZChbJy11JywgJ2FsbCwtbGFyZ2VmaWxlLC1hdWRpbywtZ3VpJ10pCiAgICAgYXJncy5leHRlbmQocmVncnRlc3RfYXJncykKICAgICBwcmludCgnICcuam9pbihhcmdzKSkKLSAgICBvcy5leGVjdihzeXMuZXhlY3V0YWJsZSwgYXJncykKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBjYWxsCisgICAgICAgIHN5cy5leGl0KGNhbGwoYXJncykpCisgICAgZWxzZToKKyAgICAgICAgb3MuZXhlY3Yoc3lzLmV4ZWN1dGFibGUsIGFyZ3MpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5IGIvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKaW5kZXggYzg1YmVhNS4uMWM5YWVkYyAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKKysrIGIvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkKQEAgLTIyLDcgKzIyLDggQEAKICAgICBzY3JpcHRzID0gb3MucGF0aC5qb2luKHB5dGhvbnBhdGgsICJTY3JpcHRzIikKICAgICBhcHBkYXRhID0gb3MuZW52aXJvblsiQVBQREFUQSJdCiAgICAgaWYgaGFzYXR0cihzaXRlLCAiVVNFUl9TSVRFIik6Ci0gICAgICAgIHVzZXJwYXRoID0gc2l0ZS5VU0VSX1NJVEUucmVwbGFjZShhcHBkYXRhLCAiJUFQUERBVEElIikKKyAgICAgICAgdXNlcnNpdGUgPSBzaXRlLlVTRVJfU0lURS5yZXBsYWNlKGFwcGRhdGEsICIlQVBQREFUQSUiKQorICAgICAgICB1c2VycGF0aCA9IG9zLnBhdGguZGlybmFtZSh1c2Vyc2l0ZSkKICAgICAgICAgdXNlcnNjcmlwdHMgPSBvcy5wYXRoLmpvaW4odXNlcnBhdGgsICJTY3JpcHRzIikKICAgICBlbHNlOgogICAgICAgICB1c2Vyc2NyaXB0cyA9IE5vbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL3NzbC9zc2xzcGVlZC52Y3hwcm9qIGIvVG9vbHMvc3NsL3NzbHNwZWVkLnZjeHByb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjNDEwNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NzbC9zc2xzcGVlZC52Y3hwcm9qCkBAIC0wLDAgKzEsNzAgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8eDY0Ij4KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgorICAgIDxQcm9qZWN0R3VpZD57RjA2OEJDQ0YtQzBENi00NzhELUEyQzUtMjZCQTMyMzdDOTkyfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+c3Nsc3BlZWQ8L1Jvb3ROYW1lc3BhY2U+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgCisgIDxJbXBvcnQgUHJvamVjdD0iLi5cLi5cUENCdWlsZFxweXRob24ucHJvcHMiIC8+CisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CisgIDxJbXBvcnQgUHJvamVjdD0iLi5cLi5cUENCdWlsZFxvcGVuc3NsLnByb3BzIiAvPgorICAKKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxPcmlnaW5hbE91dERpcj4kKE91dERpcik8L09yaWdpbmFsT3V0RGlyPgorICAgIDxPdXREaXI+JChNU0J1aWxkUHJvamVjdERpcmVjdG9yeSlcJChBcmNoTmFtZSlcPC9PdXREaXI+CisgICAgPEludERpcj4kKE1TQnVpbGRQcm9qZWN0RGlyZWN0b3J5KVwkKEFyY2hOYW1lKVxvYmpcPC9JbnREaXI+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIAorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KKyAgCisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKG9wZW5zc2xEaXIpYXBwc1xzcGVlZC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChvcGVuc3NsRGlyKWFwcHNcYXBwcy5jIiAvPgorICA8L0l0ZW1Hcm91cD4KKyAgCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChvcGVuc3NsSW5jRGlyKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjtsaWJlYXkkKFB5RGVidWdFeHQpLmxpYjtzc2xlYXkkKFB5RGVidWdFeHQpLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChPcmlnaW5hbE91dERpcik7JShBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorCisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0iLi5cLi5cUENCdWlsZFxzc2xlYXkudmN4cHJvaiI+CisgICAgICA8UHJvamVjdD57MTA2MTViMjQtNzNiZi00ZWZhLTkzYWEtMjM2OTE2MzIxMzE3fTwvUHJvamVjdD4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+CisgICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgorICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Ii4uXC4uXFBDQnVpbGRcbGliZWF5LnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2U1YjA0Y2MwLWViNGMtNDJhYi1iNGRjLTE4ZWY5NWY4NjRiMH08L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisKKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KKzwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5IGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQppbmRleCA5OGIzOTc1Li40YzIxNDY5IDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICByZXR1cm4gJ05vbmUnCiAgICAgdHJ5OgogICAgICAgICBsZW4odCkKLSAgICBleGNlcHQ6CisgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgcmV0dXJuICcweCUwKlgnICUgKHByZWNpc2lvbiwgdCkKICAgICB0cnk6CiAgICAgICAgIHJldHVybiAnKCcgKyAnLCAnLmpvaW4oWycweCUwKlgnICUgKHByZWNpc2lvbiwgaXRlbSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5IGIvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKaW5kZXggNzYzNmE5NS4uNzEzZTE3NSAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKKysrIGIvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKQEAgLTQyLDcgKzQyLDcgQEAKICMgICAqIERvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdCwgYW5kCiAjICAgKiBEb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKICMgICAqIERvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QgKHR3byBvY2N1cnJlbmNlcykKLVVOSURBVEFfVkVSU0lPTiA9ICI2LjMuMCIKK1VOSURBVEFfVkVSU0lPTiA9ICI4LjAuMCIKIFVOSUNPREVfREFUQSA9ICJVbmljb2RlRGF0YSVzLnR4dCIKIENPTVBPU0lUSU9OX0VYQ0xVU0lPTlMgPSAiQ29tcG9zaXRpb25FeGNsdXNpb25zJXMudHh0IgogRUFTVEFTSUFOX1dJRFRIID0gIkVhc3RBc2lhbldpZHRoJXMudHh0IgpAQCAtOTksMTAgKzk5LDExIEBACiAjIHRoZXNlIHJhbmdlcyBuZWVkIHRvIG1hdGNoIHVuaWNvZGVkYXRhLmM6aXNfdW5pZmllZF9pZGVvZ3JhcGgKIGNqa19yYW5nZXMgPSBbCiAgICAgKCczNDAwJywgJzREQjUnKSwKLSAgICAoJzRFMDAnLCAnOUZDQycpLAorICAgICgnNEUwMCcsICc5RkQ1JyksCiAgICAgKCcyMDAwMCcsICcyQTZENicpLAogICAgICgnMkE3MDAnLCAnMkI3MzQnKSwKLSAgICAoJzJCNzQwJywgJzJCODFEJykKKyAgICAoJzJCNzQwJywgJzJCODFEJyksCisgICAgKCcyQjgyMCcsICcyQ0VBMScpLAogXQogCiBkZWYgbWFrZXRhYmxlcyh0cmFjZT0wKToKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaXR0ZXN0Z3VpL1JFQURNRS50eHQgYi9Ub29scy91bml0dGVzdGd1aS9SRUFETUUudHh0CmluZGV4IDRkODA5ZGYuLjBhNDc3ZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaXR0ZXN0Z3VpL1JFQURNRS50eHQKKysrIGIvVG9vbHMvdW5pdHRlc3RndWkvUkVBRE1FLnR4dApAQCAtMSw1ICsxLDUgQEAKLXVuaXR0ZXN0Z3VpLnB5IGlzIEdVSSBmcmFtZXdvcmsgYW5kIGFwcGxpY2F0aW9uIGZvciB1c2Ugd2l0aCBQeXRob24gdW5pdCAKLXRlc3RpbmcgZnJhbWV3b3JrLiBJdCBleGVjdXRlcyB0ZXN0cyB3cml0dGVuIHVzaW5nIHRoZSBmcmFtZXdvcmsgcHJvdmlkZWQgCit1bml0dGVzdGd1aS5weSBpcyBHVUkgZnJhbWV3b3JrIGFuZCBhcHBsaWNhdGlvbiBmb3IgdXNlIHdpdGggUHl0aG9uIHVuaXQKK3Rlc3RpbmcgZnJhbWV3b3JrLiBJdCBleGVjdXRlcyB0ZXN0cyB3cml0dGVuIHVzaW5nIHRoZSBmcmFtZXdvcmsgcHJvdmlkZWQKIGJ5IHRoZSAndW5pdHRlc3QnIG1vZHVsZS4KIAogQmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5IFN0ZXZlIFB1cmNlbGwsIGZyb206CmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNAppbmRleCA3ZDI1ZmI5Li4yYTc0NWU1IDEwMDY0NAotLS0gYS9hY2xvY2FsLm00CisrKyBiL2FjbG9jYWwubTQKQEAgLTEsNiArMSw2IEBACi0jIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xNC4xIC0qLSBBdXRvY29uZiAtKi0KKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjE1IC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTEyLDMyICsxMiw2MyBAQAogIyBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKIG00X2lmbmRlZihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbbTRfZGVmdW4oW19BTV9DT05GSUdfTUFDUk9fRElSU10sIFtdKW00X2RlZnVuKFtBQ19DT05GSUdfTUFDUk9fRElSU10sIFtfQU1fQ09ORklHX01BQ1JPX0RJUlMoJEApXSldKQotIyBwa2cubTQgLSBNYWNyb3MgdG8gbG9jYXRlIGFuZCB1dGlsaXNlIHBrZy1jb25maWcuICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQotIyBzZXJpYWwgMSAocGtnLWNvbmZpZy0wLjI0KQotIyAKLSMgQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorZG5sIHBrZy5tNCAtIE1hY3JvcyB0byBsb2NhdGUgYW5kIHV0aWxpc2UgcGtnLWNvbmZpZy4gICAtKi0gQXV0b2NvbmYgLSotCitkbmwgc2VyaWFsIDExIChwa2ctY29uZmlnLTAuMjkuMSkKK2RubAorZG5sIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4uCitkbmwgQ29weXJpZ2h0IMKpIDIwMTItMjAxNSBEYW4gTmljaG9sc29uIDxkYm4ubGlzdHNAZ21haWwuY29tPgorZG5sCitkbmwgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorZG5sIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCitkbmwgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitkbmwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK2RubCBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKK2RubCAwMjExMS0xMzA3LCBVU0EuCitkbmwKK2RubCBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CitkbmwgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCitkbmwgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CitkbmwgcHJvZ3JhbS4KIAotIyBQS0dfUFJPR19QS0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQS0dfUFJFUkVRKE1JTi1WRVJTSU9OKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2luY2U6IDAuMjkKK2RubAorZG5sIFZlcmlmeSB0aGF0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwa2ctY29uZmlnIG1hY3JvcyBhcmUgYXQgbGVhc3QKK2RubCBNSU4tVkVSU0lPTi4gVW5saWtlIFBLR19QUk9HX1BLR19DT05GSUcsIHdoaWNoIGNoZWNrcyB0aGUgdXNlcidzCitkbmwgaW5zdGFsbGVkIHZlcnNpb24gb2YgcGtnLWNvbmZpZywgdGhpcyBjaGVja3MgdGhlIGRldmVsb3BlcidzIHZlcnNpb24KK2RubCBvZiBwa2cubTQgd2hlbiBnZW5lcmF0aW5nIGNvbmZpZ3VyZS4KK2RubAorZG5sIFRvIGVuc3VyZSB0aGF0IHRoaXMgbWFjcm8gaXMgZGVmaW5lZCwgYWxzbyBhZGQ6CitkbmwgbTRfaWZuZGVmKFtQS0dfUFJFUkVRXSwKK2RubCAgICAgW200X2ZhdGFsKFttdXN0IGluc3RhbGwgcGtnLWNvbmZpZyAwLjI5IG9yIGxhdGVyIGJlZm9yZSBydW5uaW5nIGF1dG9jb25mL2F1dG9nZW5dKV0pCitkbmwKK2RubCBTZWUgdGhlICJTaW5jZSIgY29tbWVudCBmb3IgZWFjaCBtYWNybyB5b3UgdXNlIHRvIHNlZSB3aGF0IHZlcnNpb24KK2RubCBvZiB0aGUgbWFjcm9zIHlvdSByZXF1aXJlLgorbTRfZGVmdW4oW1BLR19QUkVSRVFdLAorW200X2RlZmluZShbUEtHX01BQ1JPU19WRVJTSU9OXSwgWzAuMjkuMV0pCittNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUoUEtHX01BQ1JPU19WRVJTSU9OLCBbJDFdKSwgLTEsCisgICAgW200X2ZhdGFsKFtwa2cubTQgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWQgYnV0IF1QS0dfTUFDUk9TX1ZFUlNJT05bIGZvdW5kXSldKQorXSlkbmwgUEtHX1BSRVJFUQorCitkbmwgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4xNgorZG5sCitkbmwgU2VhcmNoIGZvciB0aGUgcGtnLWNvbmZpZyB0b29sIGFuZCBzZXQgdGhlIFBLR19DT05GSUcgdmFyaWFibGUgdG8KK2RubCBmaXJzdCBmb3VuZCBpbiB0aGUgcGF0aC4gQ2hlY2tzIHRoYXQgdGhlIHZlcnNpb24gb2YgcGtnLWNvbmZpZyBmb3VuZAorZG5sIGlzIGF0IGxlYXN0IE1JTi1WRVJTSU9OLiBJZiBNSU4tVkVSU0lPTiBpcyBub3Qgc3BlY2lmaWVkLCAwLjkuMCBpcworZG5sIHVzZWQgc2luY2UgdGhhdCdzIHRoZSBmaXJzdCB2ZXJzaW9uIHdoZXJlIG1vc3QgY3VycmVudCBmZWF0dXJlcyBvZgorZG5sIHBrZy1jb25maWcgZXhpc3RlZC4KIEFDX0RFRlVOKFtQS0dfUFJPR19QS0dfQ09ORklHXSwKIFttNF9wYXR0ZXJuX2ZvcmJpZChbXl8/UEtHX1tBLVpfXSskXSkKIG00X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHKF8oUEFUSHxMSUJESVJ8U1lTUk9PVF9ESVJ8QUxMT1dfU1lTVEVNXyhDRkxBR1N8TElCUykpKT8kXSkKQEAgLTU5LDE4ICs5MCwxOSBAQAogCQlQS0dfQ09ORklHPSIiCiAJZmkKIGZpW11kbmwKLV0pIyBQS0dfUFJPR19QS0dfQ09ORklHCitdKWRubCBQS0dfUFJPR19QS0dfQ09ORklHCiAKLSMgUEtHX0NIRUNLX0VYSVNUUyhNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQotIwotIyBDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLiAgU2ltaWxhcgotIyB0byBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCi0jCi0jIFBsZWFzZSByZW1lbWJlciB0aGF0IG00IGV4cGFuZHMgQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCi0jIG9ubHkgYXQgdGhlIGZpcnN0IG9jY3VyZW5jZSBpbiBjb25maWd1cmUuYWMsIHNvIGlmIHRoZSBmaXJzdCBwbGFjZQotIyBpdCdzIGNhbGxlZCBtaWdodCBiZSBza2lwcGVkIChzdWNoIGFzIGlmIGl0IGlzIHdpdGhpbiBhbiAiaWYiLCB5b3UKLSMgaGF2ZSB0byBjYWxsIFBLR19DSEVDS19FWElTVFMgbWFudWFsbHkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBQS0dfQ0hFQ0tfRVhJU1RTKE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNpbmNlOiAwLjE4CitkbmwKK2RubCBDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLiBTaW1pbGFyIHRvCitkbmwgUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMgb3IgcHJpbnQgZXJyb3JzLgorZG5sCitkbmwgUGxlYXNlIHJlbWVtYmVyIHRoYXQgbTQgZXhwYW5kcyBBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKK2RubCBvbmx5IGF0IHRoZSBmaXJzdCBvY2N1cmVuY2UgaW4gY29uZmlndXJlLmFjLCBzbyBpZiB0aGUgZmlyc3QgcGxhY2UKK2RubCBpdCdzIGNhbGxlZCBtaWdodCBiZSBza2lwcGVkIChzdWNoIGFzIGlmIGl0IGlzIHdpdGhpbiBhbiAiaWYiLCB5b3UKK2RubCBoYXZlIHRvIGNhbGwgUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseQogQUNfREVGVU4oW1BLR19DSEVDS19FWElTVFNdLAogW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAogaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKQEAgLTgwLDggKzExMiwxMCBAQAogICAkM10pZG5sCiBmaV0pCiAKLSMgX1BLR19DT05GSUcoW1ZBUklBQkxFXSwgW0NPTU1BTkRdLCBbTU9EVUxFU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEludGVybmFsIHdyYXBwZXIgY2FsbGluZyBwa2ctY29uZmlnIHZpYSBQS0dfQ09ORklHIGFuZCBzZXR0aW5nCitkbmwgcGtnX2ZhaWxlZCBiYXNlZCBvbiB0aGUgcmVzdWx0LgogbTRfZGVmaW5lKFtfUEtHX0NPTkZJR10sCiBbaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgogICAgIHBrZ19jdl9bXSQxPSIkJDEiCkBAIC05MywxMCArMTI3LDExIEBACiAgZWxzZQogICAgIHBrZ19mYWlsZWQ9dW50cmllZAogZmlbXWRubAotXSkjIF9QS0dfQ09ORklHCitdKWRubCBfUEtHX0NPTkZJRwogCi0jIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEludGVybmFsIGNoZWNrIHRvIHNlZSBpZiBwa2ctY29uZmlnIHN1cHBvcnRzIHNob3J0IGVycm9ycy4KIEFDX0RFRlVOKFtfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURURdLAogW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQogaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KQEAgLTEwNCwxOSArMTM5LDE3IEBACiBlbHNlCiAgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubwogZmlbXWRubAotXSkjIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorXSlkbmwgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECiAKIAotIyBQS0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLAotIyBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCi0jCi0jCi0jIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCi0jIFBLR19DSEVDS19NT0RVTEVTIG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCi0jIGV4cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyIGNvbmZpZ3VyZS5hYwotIwotIwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCitkbmwgICBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC40LjAKK2RubAorZG5sIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCitkbmwgUEtHX0NIRUNLX01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUgYW4KK2RubCBleHBsaWNpdCBjYWxsIHRvIFBLR19QUk9HX1BLR19DT05GSUcgaW4geW91ciBjb25maWd1cmUuYWMKIEFDX0RFRlVOKFtQS0dfQ0hFQ0tfTU9EVUxFU10sCiBbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCiBBQ19BUkdfVkFSKFskMV1bX0NGTEFHU10sIFtDIGNvbXBpbGVyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKQEAgLTE3MCwxNiArMjAzLDQwIEBACiAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCiAJJDMKIGZpW11kbmwKLV0pIyBQS0dfQ0hFQ0tfTU9EVUxFUworXSlkbmwgUEtHX0NIRUNLX01PRFVMRVMKIAogCi0jIFBLR19JTlNUQUxMRElSKERJUkVDVE9SWSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTdWJzdGl0dXRlcyB0aGUgdmFyaWFibGUgcGtnY29uZmlnZGlyIGFzIHRoZSBsb2NhdGlvbiB3aGVyZSBhIG1vZHVsZQotIyBzaG91bGQgaW5zdGFsbCBwa2ctY29uZmlnIC5wYyBmaWxlcy4gQnkgZGVmYXVsdCB0aGUgZGlyZWN0b3J5IGlzCi0jICRsaWJkaXIvcGtnY29uZmlnLCBidXQgdGhlIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgYnkgcGFzc2luZwotIyBESVJFQ1RPUlkuIFRoZSB1c2VyIGNhbiBvdmVycmlkZSB0aHJvdWdoIHRoZSAtLXdpdGgtcGtnY29uZmlnZGlyCi0jIHBhcmFtZXRlci4KK2RubCBQS0dfQ0hFQ0tfTU9EVUxFU19TVEFUSUMoVkFSSUFCTEUtUFJFRklYLCBNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwKK2RubCAgIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4yOQorZG5sCitkbmwgQ2hlY2tzIGZvciBleGlzdGVuY2Ugb2YgTU9EVUxFUyBhbmQgZ2F0aGVycyBpdHMgYnVpbGQgZmxhZ3Mgd2l0aAorZG5sIHN0YXRpYyBsaWJyYXJpZXMgZW5hYmxlZC4gU2V0cyBWQVJJQUJMRS1QUkVGSVhfQ0ZMQUdTIGZyb20gLS1jZmxhZ3MKK2RubCBhbmQgVkFSSUFCTEUtUFJFRklYX0xJQlMgZnJvbSAtLWxpYnMuCitkbmwKK2RubCBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGUgZmlyc3QgY2FsbCB0bworZG5sIFBLR19DSEVDS19NT0RVTEVTX1NUQVRJQyBtaWdodCBub3QgaGFwcGVuLCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG8KK2RubCBpbmNsdWRlIGFuIGV4cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyCitkbmwgY29uZmlndXJlLmFjLgorQUNfREVGVU4oW1BLR19DSEVDS19NT0RVTEVTX1NUQVRJQ10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitfc2F2ZV9QS0dfQ09ORklHPSRQS0dfQ09ORklHCitQS0dfQ09ORklHPSIkUEtHX0NPTkZJRyAtLXN0YXRpYyIKK1BLR19DSEVDS19NT0RVTEVTKCRAKQorUEtHX0NPTkZJRz0kX3NhdmVfUEtHX0NPTkZJR1tdZG5sCitdKWRubCBQS0dfQ0hFQ0tfTU9EVUxFU19TVEFUSUMKKworCitkbmwgUEtHX0lOU1RBTExESVIoW0RJUkVDVE9SWV0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNpbmNlOiAwLjI3CitkbmwKK2RubCBTdWJzdGl0dXRlcyB0aGUgdmFyaWFibGUgcGtnY29uZmlnZGlyIGFzIHRoZSBsb2NhdGlvbiB3aGVyZSBhIG1vZHVsZQorZG5sIHNob3VsZCBpbnN0YWxsIHBrZy1jb25maWcgLnBjIGZpbGVzLiBCeSBkZWZhdWx0IHRoZSBkaXJlY3RvcnkgaXMKK2RubCAkbGliZGlyL3BrZ2NvbmZpZywgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkIGJ5IHBhc3NpbmcKK2RubCBESVJFQ1RPUlkuIFRoZSB1c2VyIGNhbiBvdmVycmlkZSB0aHJvdWdoIHRoZSAtLXdpdGgtcGtnY29uZmlnZGlyCitkbmwgcGFyYW1ldGVyLgogQUNfREVGVU4oW1BLR19JTlNUQUxMRElSXSwKIFttNF9wdXNoZGVmKFtwa2dfZGVmYXVsdF0sIFttNF9kZWZhdWx0KFskMV0sIFsnJHtsaWJkaXJ9L3BrZ2NvbmZpZyddKV0pCiBtNF9wdXNoZGVmKFtwa2dfZGVzY3JpcHRpb25dLApAQCAtMTkwLDE2ICsyNDcsMTggQEAKIEFDX1NVQlNUKFtwa2djb25maWdkaXJdLCBbJHdpdGhfcGtnY29uZmlnZGlyXSkKIG00X3BvcGRlZihbcGtnX2RlZmF1bHRdKQogbTRfcG9wZGVmKFtwa2dfZGVzY3JpcHRpb25dKQotXSkgZG5sIFBLR19JTlNUQUxMRElSCitdKWRubCBQS0dfSU5TVEFMTERJUgogCiAKLSMgUEtHX05PQVJDSF9JTlNUQUxMRElSKERJUkVDVE9SWSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTdWJzdGl0dXRlcyB0aGUgdmFyaWFibGUgbm9hcmNoX3BrZ2NvbmZpZ2RpciBhcyB0aGUgbG9jYXRpb24gd2hlcmUgYQotIyBtb2R1bGUgc2hvdWxkIGluc3RhbGwgYXJjaC1pbmRlcGVuZGVudCBwa2ctY29uZmlnIC5wYyBmaWxlcy4gQnkKLSMgZGVmYXVsdCB0aGUgZGlyZWN0b3J5IGlzICRkYXRhZGlyL3BrZ2NvbmZpZywgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZQotIyBjaGFuZ2VkIGJ5IHBhc3NpbmcgRElSRUNUT1JZLiBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhyb3VnaCB0aGUKLSMgLS13aXRoLW5vYXJjaC1wa2djb25maWdkaXIgcGFyYW1ldGVyLgorZG5sIFBLR19OT0FSQ0hfSU5TVEFMTERJUihbRElSRUNUT1JZXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNpbmNlOiAwLjI3CitkbmwKK2RubCBTdWJzdGl0dXRlcyB0aGUgdmFyaWFibGUgbm9hcmNoX3BrZ2NvbmZpZ2RpciBhcyB0aGUgbG9jYXRpb24gd2hlcmUgYQorZG5sIG1vZHVsZSBzaG91bGQgaW5zdGFsbCBhcmNoLWluZGVwZW5kZW50IHBrZy1jb25maWcgLnBjIGZpbGVzLiBCeQorZG5sIGRlZmF1bHQgdGhlIGRpcmVjdG9yeSBpcyAkZGF0YWRpci9wa2djb25maWcsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUKK2RubCBjaGFuZ2VkIGJ5IHBhc3NpbmcgRElSRUNUT1JZLiBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhyb3VnaCB0aGUKK2RubCAtLXdpdGgtbm9hcmNoLXBrZ2NvbmZpZ2RpciBwYXJhbWV0ZXIuCiBBQ19ERUZVTihbUEtHX05PQVJDSF9JTlNUQUxMRElSXSwKIFttNF9wdXNoZGVmKFtwa2dfZGVmYXVsdF0sIFttNF9kZWZhdWx0KFskMV0sIFsnJHtkYXRhZGlyfS9wa2djb25maWcnXSldKQogbTRfcHVzaGRlZihbcGtnX2Rlc2NyaXB0aW9uXSwKQEAgLTIxMCwxMyArMjY5LDE1IEBACiBBQ19TVUJTVChbbm9hcmNoX3BrZ2NvbmZpZ2Rpcl0sIFskd2l0aF9ub2FyY2hfcGtnY29uZmlnZGlyXSkKIG00X3BvcGRlZihbcGtnX2RlZmF1bHRdKQogbTRfcG9wZGVmKFtwa2dfZGVzY3JpcHRpb25dKQotXSkgZG5sIFBLR19OT0FSQ0hfSU5TVEFMTERJUgorXSlkbmwgUEtHX05PQVJDSF9JTlNUQUxMRElSCiAKIAotIyBQS0dfQ0hFQ0tfVkFSKFZBUklBQkxFLCBNT0RVTEUsIENPTkZJRy1WQVJJQUJMRSwKLSMgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBwa2ctY29uZmlnIHZhcmlhYmxlIGZvciB0aGUgZ2l2ZW4gbW9kdWxlLgorZG5sIFBLR19DSEVDS19WQVIoVkFSSUFCTEUsIE1PRFVMRSwgQ09ORklHLVZBUklBQkxFLAorZG5sIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNpbmNlOiAwLjI4CitkbmwKK2RubCBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBwa2ctY29uZmlnIHZhcmlhYmxlIGZvciB0aGUgZ2l2ZW4gbW9kdWxlLgogQUNfREVGVU4oW1BLR19DSEVDS19WQVJdLAogW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAogQUNfQVJHX1ZBUihbJDFdLCBbdmFsdWUgb2YgJDMgZm9yICQyLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubApAQCAtMjI1LDUgKzI4Niw1IEBACiBBU19WQVJfQ09QWShbJDFdLCBbcGtnX2N2X11bJDFdKQogCiBBU19WQVJfSUYoWyQxXSwgWyIiXSwgWyQ1XSwgWyQ0XSlkbmwKLV0pIyBQS0dfQ0hFQ0tfVkFSCitdKWRubCBQS0dfQ0hFQ0tfVkFSCiAKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCA3YjkxZjkxLi5iYjg5YTVhIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDYgKzEsNiBAQAogIyEgL2Jpbi9zaAogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIHB5dGhvbiAzLjQuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcHl0aG9uIDMuNS4KICMKICMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvPi4KICMKQEAgLTU4MCw4ICs1ODAsOCBAQAogIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCiBQQUNLQUdFX05BTUU9J3B5dGhvbicKIFBBQ0tBR0VfVEFSTkFNRT0ncHl0aG9uJwotUEFDS0FHRV9WRVJTSU9OPSczLjQnCi1QQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuNCcKK1BBQ0tBR0VfVkVSU0lPTj0nMy41JworUEFDS0FHRV9TVFJJTkc9J3B5dGhvbiAzLjUnCiBQQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL2J1Z3MucHl0aG9uLm9yZy8nCiBQQUNLQUdFX1VSTD0nJwogCkBAIC02NjcsMTQgKzY2NywxOSBAQAogQ0ZMQUdTX05PRElTVAogQkFTRUNGTEFHUwogT1BUCitMTFZNX1BST0ZfRk9VTkQKK0xMVk1fUFJPRl9FUlIKK0xMVk1fUFJPRl9GSUxFCitMTFZNX1BST0ZfTUVSR0VSCitQR09fUFJPRl9VU0VfRkxBRworUEdPX1BST0ZfR0VOX0ZMQUcKK0xUT0ZMQUdTCiBBQklGTEFHUwogTE4KIE1LRElSX1AKIElOU1RBTExfREFUQQogSU5TVEFMTF9TQ1JJUFQKIElOU1RBTExfUFJPR1JBTQotUFlUSE9OCi1BU0RMR0VOCiBhY19jdF9SRUFERUxGCiBSRUFERUxGCiBBUkZMQUdTCkBAIC02OTMsMTUgKzY5OCwxNyBAQAogRExMTElCUkFSWQogTERMSUJSQVJZCiBMSUJSQVJZCi1NVUxUSUFSQ0gKIEJVSUxERVhFRVhUCiBFR1JFUAotR1JFUAotQ1BQCiBOT19BU19ORUVERUQKK1BMQVRGT1JNX1RSSVBMRVQKK1BMQVRESVIKK01VTFRJQVJDSAogYWNfY3RfQ1hYCiBNQUlOQ0MKIENYWAorR1JFUAorQ1BQCiBPQkpFWFQKIEVYRUVYVAogYWNfY3RfQ0MKQEAgLTcxMSw3ICs3MTgsNiBAQAogQ0MKIEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKIENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLVBMQVRESVIKIFNHSV9BQkkKIF9QWVRIT05fSE9TVF9QTEFURk9STQogTUFDSERFUApAQCAtNzMzLDcgKzczOSw5IEBACiBDT05GSUdfQVJHUwogU09WRVJTSU9OCiBWRVJTSU9OCitQR0VOX0RFUEVOREVOQ1kKIFBZVEhPTl9GT1JfQlVJTEQKK1BZVEhPTl9GT1JfR0VOCiBob3N0X29zCiBob3N0X3ZlbmRvcgogaG9zdF9jcHUKQEAgLTc0Miw2ICs3NTAsNyBAQAogYnVpbGRfdmVuZG9yCiBidWlsZF9jcHUKIGJ1aWxkCitjcm9zc19jb21waWxpbmcKIEhBU19IRwogSEdCUkFOQ0gKIEhHVEFHCkBAIC03OTMsMTIgKzgwMiwxNSBAQAogd2l0aF9mcmFtZXdvcmtfbmFtZQogZW5hYmxlX2ZyYW1ld29yawogd2l0aF9nY2MKK3dpdGhfaWNjCiB3aXRoX2N4eF9tYWluCiB3aXRoX3N1ZmZpeAogZW5hYmxlX3NoYXJlZAogZW5hYmxlX3Byb2ZpbGluZwogd2l0aF9weWRlYnVnCit3aXRoX2x0bwogd2l0aF9oYXNoX2FsZ29yaXRobQord2l0aF9hZGRyZXNzX3Nhbml0aXplcgogd2l0aF9saWJzCiB3aXRoX3N5c3RlbV9leHBhdAogd2l0aF9zeXN0ZW1fZmZpCkBAIC0xMzc1LDcgKzEzODcsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAzLjQgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuNSB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xNDQwLDcgKzE0NTIsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjQ6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMy41OiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTE0NzEsMTMgKzE0ODMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBhbiBhbHRlcm5hdGUgbmFtZSBvZiB0aGUgZnJhbWV3b3JrIGJ1aWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggLS1lbmFibGUtZnJhbWV3b3JrCiAgIC0td2l0aG91dC1nY2MgICAgICAgICAgIG5ldmVyIHVzZSBnY2MKKyAgLS13aXRoLWljYyAgICAgICAgICAgICAgYnVpbGQgd2l0aCBpY2MKICAgLS13aXRoLWN4eC1tYWluPTxjb21waWxlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSBtYWluKCkgYW5kIGxpbmsgcHl0aG9uIGV4ZWN1dGFibGUgd2l0aCBDKysKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIKICAgLS13aXRoLXN1ZmZpeD0uZXhlICAgICAgc2V0IGV4ZWN1dGFibGUgc3VmZml4CiAgIC0td2l0aC1weWRlYnVnICAgICAgICAgIGJ1aWxkIHdpdGggUHlfREVCVUcgZGVmaW5lZAorICAtLXdpdGgtbHRvICAgICAgICAgICAgICBFbmFibGUgTGluayBUaW1lIE9wdGltaXphdGlvbiBpbiBQR08gYnVpbGRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlZCBieSBkZWZhdWx0LgogICAtLXdpdGgtaGFzaC1hbGdvcml0aG09W2ZudnxzaXBoYXNoMjRdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBoYXNoIGFsZ29yaXRobQorICAtLXdpdGgtYWRkcmVzcy1zYW5pdGl6ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlIEFkZHJlc3NTYW5pdGl6ZXIKICAgLS13aXRoLWxpYnM9J2xpYjEgLi4uJyAgbGluayBhZ2FpbnN0IGFkZGl0aW9uYWwgbGlicwogICAtLXdpdGgtc3lzdGVtLWV4cGF0ICAgICBidWlsZCBweWV4cGF0IG1vZHVsZSB1c2luZyBhbiBpbnN0YWxsZWQgZXhwYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeQpAQCAtMTU5Miw3ICsxNjA5LDcgQEAKIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1weXRob24gY29uZmlndXJlIDMuNAorcHl0aG9uIGNvbmZpZ3VyZSAzLjUKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQogCiBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC0xNjQ0LDYgKzE2NjEsNDMgQEAKIAogfSAjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUKIAorIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgeworCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCiAjIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KQEAgLTE2OTAsNDMgKzE3NDQsNiBAQAogCiB9ICMgYWNfZm5fY190cnlfbGluawogCi0jIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCi1hY19mbl9jX3RyeV9jcHAgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCi0gIGFjX3N0YXR1cz0kPwotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCi0gIGZpCi0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuIDoKLSAgYWNfcmV0dmFsPTAKLWVsc2UKLSAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgICBhY19yZXR2YWw9MQotZmkKLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fY190cnlfY3BwCi0KICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKQEAgLTI0MzEsNyArMjQ0OCw3IEBACiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAotSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjQsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjUsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQApAQCAtMjg1OCw2ICsyODc1LDcgQEAKIGFjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgcHljb25maWcuaCIKIAogCisKIGFjX2F1eF9kaXI9CiBmb3IgYWNfZGlyIGluICIkc3JjZGlyIiAiJHNyY2Rpci8uLiIgIiRzcmNkaXIvLi4vLi4iOyBkbwogICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCkBAIC0yOTY0LDYgKzI5ODIsNTYgQEAKICMgcHlidWlsZGRpci50eHQgd2lsbCBiZSBjcmVhdGVkIGJ5IC0tZ2VuZXJhdGUtcG9zaXgtdmFycyBpbiB0aGUgTWFrZWZpbGUKIHJtIC1mIHB5YnVpbGRkaXIudHh0CiAKK2ZvciBhY19wcm9nIGluIHB5dGhvbiRQQUNLQUdFX1ZFUlNJT04gcHl0aG9uMyBweXRob24KK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19QWVRIT05fRk9SX0dFTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRQWVRIT05fRk9SX0dFTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19QWVRIT05fRk9SX0dFTj0iJFBZVEhPTl9GT1JfR0VOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfUFlUSE9OX0ZPUl9HRU49IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1BZVEhPTl9GT1JfR0VOPSRhY19jdl9wcm9nX1BZVEhPTl9GT1JfR0VOCitpZiB0ZXN0IC1uICIkUFlUSE9OX0ZPUl9HRU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUFlUSE9OX0ZPUl9HRU4iID4mNQorJGFzX2VjaG8gIiRQWVRIT05fRk9SX0dFTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRQWVRIT05fRk9SX0dFTiIgJiYgYnJlYWsKK2RvbmUKK3Rlc3QgLW4gIiRQWVRIT05fRk9SX0dFTiIgfHwgUFlUSE9OX0ZPUl9HRU49Im5vdC1mb3VuZCIKKworaWYgdGVzdCAiJFBZVEhPTl9GT1JfR0VOIiA9IG5vdC1mb3VuZDsgdGhlbgorICAgIFBZVEhPTl9GT1JfR0VOPSdAZWNobyAiQ2Fubm90IGdlbmVyYXRlICRALCBweXRob24gbm90IGZvdW5kICEiICYmIFwKKyAgICBlY2hvICJUbyBza2lwIHJlLWdlbmVyYXRpb24gb2YgJEAgcnVuIDxtYWtlIHRvdWNoPiBvciA8bWFrZSAtdCAkQD4uIiAmJiBcCisgICAgZWNobyAiT3RoZXJ3aXNlLCBzZXQgcHl0aG9uIGluIFBBVEggYW5kIHJ1biBjb25maWd1cmUgb3IgcnVuIDxtYWtlIFBZVEhPTl9GT1JfR0VOPXB5dGhvbj4uIiAmJiBmYWxzZSAmJicKK2ZpCisKKwogaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBweXRob24gaW50ZXJwcmV0ZXIgZm9yIGNyb3NzIGJ1aWxkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24gaW50ZXJwcmV0ZXIgZm9yIGNyb3NzIGJ1aWxkLi4uICIgPiY2OyB9CkBAIC0yOTgyLDE0ICszMDUwLDE3IEBACiAkYXNfZWNobyAiJGludGVycCIgPiY2OyB9CiAJUFlUSE9OX0ZPUl9CVUlMRD0nX1BZVEhPTl9QUk9KRUNUX0JBU0U9JChhYnNfYnVpbGRkaXIpIF9QWVRIT05fSE9TVF9QTEFURk9STT0kKF9QWVRIT05fSE9TVF9QTEFURk9STSkgUFlUSE9OUEFUSD0kKHNoZWxsIHRlc3QgLWYgcHlidWlsZGRpci50eHQgJiYgZWNobyAkKGFic19idWlsZGRpcikvYGNhdCBweWJ1aWxkZGlyLnR4dGA6KSQoc3JjZGlyKS9MaWI6JChzcmNkaXIpL0xpYi8kKFBMQVRESVIpICckaW50ZXJwCiAgICAgZmkKKyAgICBQR0VOX0RFUEVOREVOQ1k9JycKIGVsaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgogICAgIGFzX2ZuX2Vycm9yICQ/ICJDcm9zcyBjb21waWxpbmcgcmVxdWlyZWQgLS1ob3N0PUhPU1QtVFVQTEUgYW5kIC0tYnVpbGQ9QVJDSCIgIiRMSU5FTk8iIDUKIGVsc2UKICAgICBQWVRIT05fRk9SX0JVSUxEPScuLyQoQlVJTERQWVRIT04pIC1FJworICAgIFBHRU5fREVQRU5ERU5DWT0nJChQR0VOKScKIGZpCiAKIAogCisKIGlmIHRlc3QgIiRwcmVmaXgiICE9ICIvIjsgdGhlbgogICAgIHByZWZpeD1gZWNobyAiJHByZWZpeCIgfCBzZWQgLWUgJ3MvXC8kLy9nJ2AKIGZpCkBAIC0zMDA0LDcgKzMwNzUsNyBAQAogbXYgY29uZmRlZnMuaC5uZXcgY29uZmRlZnMuaAogCiAKLVZFUlNJT049My40CitWRVJTSU9OPTMuNQogCiAjIFZlcnNpb24gbnVtYmVyIG9mIFB5dGhvbidzIG93biBzaGFyZWQgbGlicmFyeSBmaWxlLgogCkBAIC0zNDc4LDcgKzM1NDksNyBAQAogIwogIyBTR0kgY29tcGlsZXJzIGFsbG93IHRoZSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBib3RoIHRoZSBBQkkgYW5kIHRoZQogIyBJU0Egb24gdGhlIGNvbW1hbmQgbGluZS4gIERlcGVuZGluZyBvbiB0aGUgdmFsdWVzIG9mIHRoZXNlIHN3aXRjaGVzLAotIyBkaWZmZXJlbnQgYW5kIG9mdGVuIGluY29tcGF0YWJsZSBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkLgorIyBkaWZmZXJlbnQgYW5kIG9mdGVuIGluY29tcGF0aWJsZSBjb2RlIHdpbGwgYmUgZ2VuZXJhdGVkLgogIwogIyBUaGUgU0dJX0FCSSB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIENDIGFuZCBMREZMQUdTIGFuZAogIyB0aHVzIHN1cHBseSBzdXBwb3J0IGZvciB2YXJpb3VzIEFCSS9JU0EgY29tYmluYXRpb25zLiAgVGhlIE1BQ0hERVAKQEAgLTM0OTQsOSArMzU2NSw2IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BQ0hERVAiID4mNQogJGFzX2VjaG8gIiRNQUNIREVQIiA+JjY7IH0KIAotCi1QTEFURElSPXBsYXQtJE1BQ0hERVAKLQogIyBSZWNvcmQgdGhlIGNvbmZpZ3VyZS10aW1lIHZhbHVlIG9mIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCwKICMgaXQgbWF5IGluZmx1ZW5jZSB0aGUgd2F5IHdlIGNhbiBidWlsZCBleHRlbnNpb25zLCBzbyBkaXN0dXRpbHMKICMgbmVlZHMgdG8gY2hlY2sgaXQKQEAgLTM1NDEsNiArMzYwOSwyOSBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRob3V0X2djYyIgPiY1CiAkYXNfZWNobyAiJHdpdGhvdXRfZ2NjIiA+JjY7IH0KIAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLWljYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLWljYy4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWljYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaWNjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9pY2M7CisJY2FzZSAkd2l0aHZhbCBpbgorCW5vKQlDQz0ke0NDOi1jY30KKwkJd2l0aF9pY2M9bm87OworCXllcykJQ0M9aWNjCisJCUNYWD1pY3BjCisJCXdpdGhfaWNjPXllczs7CisJKikJQ0M9JHdpdGh2YWwKKwkJd2l0aF9pY2M9JHdpdGh2YWw7OworCWVzYWMKK2Vsc2UKKworCXdpdGhfaWNjPW5vCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfaWNjIiA+JjUKKyRhc19lY2hvICIkd2l0aF9pY2MiID4mNjsgfQorCiAjIElmIHRoZSB1c2VyIHN3aXRjaGVzIGNvbXBpbGVycywgd2UgY2FuJ3QgYmVsaWV2ZSB0aGUgY2FjaGUKIGlmIHRlc3QgISAteiAiJGFjX2N2X3Byb2dfQ0MiIC1hICEgLXogIiRDQyIgLWEgIiRDQyIgIT0gIiRhY19jdl9wcm9nX0NDIgogdGhlbgpAQCAtNDQwMyw2ICs0NDk0LDIwNiBAQAogYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKIAorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYWNfcGF0aF9HUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCiAKIAogCkBAIC00NzMzLDYgKzUwMjQsMTA0IEBACiAgIENYWD0iJGFjX2N2X3BhdGhfQ1hYIgogZmkKICA7OworICAgICAgICBpY2N8Ki9pY2MpICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9aWNwYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1pY3BjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRDWFggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiBub3Rmb3VuZAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9DWFg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitDWFg9JGFjX2N2X3BhdGhfQ1hYCitpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWCIgPiY1CiskYXNfZWNobyAiJENYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfQ1hYIjsgdGhlbgorICBhY19wdF9DWFg9JENYWAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImljcGMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGljcGM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX2FjX3B0X0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X0NYWCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9DWFg9IiRhY19wdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluIG5vdGZvdW5kCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X0NYWD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X0NYWD0kYWNfY3ZfcGF0aF9hY19wdF9DWFgKK2lmIHRlc3QgLW4gIiRhY19wdF9DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfQ1hYIiA+JjUKKyRhc19lY2hvICIkYWNfcHRfQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfQ1hYIiA9IHg7IHRoZW4KKyAgICBDWFg9ImljcGMiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ1hYPSRhY19wdF9DWFgKKyAgZmkKK2Vsc2UKKyAgQ1hYPSIkYWNfY3ZfcGF0aF9DWFgiCitmaQorIDs7CiAgICAgICAgIGVzYWMKIAlpZiB0ZXN0ICIkQ1hYIiA9ICJub3Rmb3VuZCIKIAl0aGVuCkBAIC00ODYxLDYgKzUyNTAsMTQ1IEBACiBmaQogCiAKK01VTFRJQVJDSD0kKCRDQyAtLXByaW50LW11bHRpYXJjaCAyPi9kZXYvbnVsbCkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aGUgcGxhdGZvcm0gdHJpcGxldCBiYXNlZCBvbiBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwbGF0Zm9ybSB0cmlwbGV0IGJhc2VkIG9uIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQorY2F0ID4+IGNvbmZ0ZXN0LmMgPDxFT0YKKyN1bmRlZiBiZmluCisjdW5kZWYgY3JpcworI3VuZGVmIGZyMzAKKyN1bmRlZiBsaW51eAorI3VuZGVmIGhwcGEKKyN1bmRlZiBocHV4CisjdW5kZWYgaTM4NgorI3VuZGVmIG1pcHMKKyN1bmRlZiBwb3dlcnBjCisjdW5kZWYgc3BhcmMKKyN1bmRlZiB1bml4CisjaWYgZGVmaW5lZChfX2xpbnV4X18pCisjIGlmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX0xQNjRfXykKKyAgICAgICAgeDg2XzY0LWxpbnV4LWdudQorIyBlbGlmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZChfX0lMUDMyX18pCisgICAgICAgIHg4Nl82NC1saW51eC1nbnV4MzIKKyMgZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQorICAgICAgICBpMzg2LWxpbnV4LWdudQorIyBlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUxfXykKKyMgIGlmIGRlZmluZWQoX19JTFAzMl9fKQorICAgICAgICBhYXJjaDY0X2lscDMyLWxpbnV4LWdudQorIyAgZWxzZQorICAgICAgICBhYXJjaDY0LWxpbnV4LWdudQorIyAgZW5kaWYKKyMgZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKSAmJiBkZWZpbmVkKF9fQUFSQ0g2NEVCX18pCisjICBpZiBkZWZpbmVkKF9fSUxQMzJfXykKKyAgICAgICAgYWFyY2g2NF9iZV9pbHAzMi1saW51eC1nbnUKKyMgIGVsc2UKKyAgICAgICAgYWFyY2g2NF9iZS1saW51eC1nbnUKKyMgIGVuZGlmCisjIGVsaWYgZGVmaW5lZChfX2FscGhhX18pCisgICAgICAgIGFscGhhLWxpbnV4LWdudQorIyBlbGlmIGRlZmluZWQoX19BUk1fRUFCSV9fKSAmJiBkZWZpbmVkKF9fQVJNX1BDU19WRlApCisjICBpZiBkZWZpbmVkKF9fQVJNRUxfXykKKyAgICAgICAgYXJtLWxpbnV4LWdudWVhYmloZgorIyAgZWxzZQorICAgICAgICBhcm1lYi1saW51eC1nbnVlYWJpaGYKKyMgIGVuZGlmCisjIGVsaWYgZGVmaW5lZChfX0FSTV9FQUJJX18pICYmICFkZWZpbmVkKF9fQVJNX1BDU19WRlApCisjICBpZiBkZWZpbmVkKF9fQVJNRUxfXykKKyAgICAgICAgYXJtLWxpbnV4LWdudWVhYmkKKyMgIGVsc2UKKyAgICAgICAgYXJtZWItbGludXgtZ251ZWFiaQorIyAgZW5kaWYKKyMgZWxpZiBkZWZpbmVkKF9faHBwYV9fKQorICAgICAgICBocHBhLWxpbnV4LWdudQorIyBlbGlmIGRlZmluZWQoX19pYTY0X18pCisgICAgICAgIGlhNjQtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX202OGtfXykgJiYgIWRlZmluZWQoX19tY29sZGZpcmVfXykKKyAgICAgICAgbTY4ay1saW51eC1nbnUKKyMgZWxpZiBkZWZpbmVkKF9fbWlwc19oYXJkX2Zsb2F0KSAmJiBkZWZpbmVkKF9NSVBTRUwpCisjICBpZiBfTUlQU19TSU0gPT0gX0FCSU8zMgorICAgICAgICBtaXBzZWwtbGludXgtZ251CisjICBlbGlmIF9NSVBTX1NJTSA9PSBfQUJJTjMyCisgICAgICAgIG1pcHM2NGVsLWxpbnV4LWdudWFiaW4zMgorIyAgZWxpZiBfTUlQU19TSU0gPT0gX0FCSTY0CisgICAgICAgIG1pcHM2NGVsLWxpbnV4LWdudWFiaTY0CisjICBlbHNlCisjICAgZXJyb3IgdW5rbm93biBwbGF0Zm9ybSB0cmlwbGV0CisjICBlbmRpZgorIyBlbGlmIGRlZmluZWQoX19taXBzX2hhcmRfZmxvYXQpCisjICBpZiBfTUlQU19TSU0gPT0gX0FCSU8zMgorICAgICAgICBtaXBzLWxpbnV4LWdudQorIyAgZWxpZiBfTUlQU19TSU0gPT0gX0FCSU4zMgorICAgICAgICBtaXBzNjQtbGludXgtZ251YWJpbjMyCisjICBlbGlmIF9NSVBTX1NJTSA9PSBfQUJJNjQKKyAgICAgICAgbWlwczY0LWxpbnV4LWdudWFiaTY0CisjICBlbHNlCisjICAgZXJyb3IgdW5rbm93biBwbGF0Zm9ybSB0cmlwbGV0CisjICBlbmRpZgorIyBlbGlmIGRlZmluZWQoX19vcjFrX18pCisgICAgICAgIG9yMWstbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgJiYgZGVmaW5lZChfX1NQRV9fKQorICAgICAgICBwb3dlcnBjLWxpbnV4LWdudXNwZQorIyBlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXykKKyMgIGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCisgICAgICAgIHBvd2VycGM2NGxlLWxpbnV4LWdudQorIyAgZWxzZQorICAgICAgICBwb3dlcnBjNjQtbGludXgtZ251CisjICBlbmRpZgorIyBlbGlmIGRlZmluZWQoX19wb3dlcnBjX18pCisgICAgICAgIHBvd2VycGMtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX3MzOTB4X18pCisgICAgICAgIHMzOTB4LWxpbnV4LWdudQorIyBlbGlmIGRlZmluZWQoX19zMzkwX18pCisgICAgICAgIHMzOTAtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX3NoX18pICYmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCisgICAgICAgIHNoNC1saW51eC1nbnUKKyMgZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorICAgICAgICBzcGFyYzY0LWxpbnV4LWdudQorIyBlbGlmIGRlZmluZWQoX19zcGFyY19fKQorICAgICAgICBzcGFyYy1saW51eC1nbnUKKyMgZWxzZQorIyAgIGVycm9yIHVua25vd24gcGxhdGZvcm0gdHJpcGxldAorIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCisjIGlmIGRlZmluZWQoX19MUDY0X18pCisgICAgICAgIHg4Nl82NC1rZnJlZWJzZC1nbnUKKyMgZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQorICAgICAgICBpMzg2LWtmcmVlYnNkLWdudQorIyBlbHNlCisjICAgZXJyb3IgdW5rbm93biBwbGF0Zm9ybSB0cmlwbGV0CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fZ251X2h1cmRfXykKKyAgICAgICAgaTM4Ni1nbnUKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorICAgICAgICBkYXJ3aW4KKyNlbHNlCisjIGVycm9yIHVua25vd24gcGxhdGZvcm0gdHJpcGxldAorI2VuZGlmCisKK0VPRgorCitpZiAkQ1BQICRDUFBGTEFHUyBjb25mdGVzdC5jID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGw7IHRoZW4KKyAgUExBVEZPUk1fVFJJUExFVD1gZ3JlcCAtdiAnXiMnIGNvbmZ0ZXN0Lm91dCB8IGdyZXAgLXYgJ14gKiQnIHwgdHIgLWQgJyAJJ2AKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQTEFURk9STV9UUklQTEVUIiA+JjUKKyRhc19lY2hvICIkUExBVEZPUk1fVFJJUExFVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCitybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0Lm91dAorCitpZiB0ZXN0IHgkUExBVEZPUk1fVFJJUExFVCAhPSB4ICYmIHRlc3QgeCRNVUxUSUFSQ0ggIT0geDsgdGhlbgorICBpZiB0ZXN0IHgkUExBVEZPUk1fVFJJUExFVCAhPSB4JE1VTFRJQVJDSDsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnRlcm5hbCBjb25maWd1cmUgZXJyb3IgZm9yIHRoZSBwbGF0Zm9ybSB0cmlwbGV0LCBwbGVhc2UgZmlsZSBhIGJ1ZyByZXBvcnQiICIkTElORU5PIiA1CisgIGZpCitmaQorUExBVERJUj1wbGF0LSRNQUNIREVQCisKKworCisKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1XbCwtLW5vLWFzLW5lZWRlZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLVdsLC0tbm8tYXMtbmVlZGVkLi4uICIgPiY2OyB9CiBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgpAQCAtNDg5MywyMDYgKzU0MjEsNiBAQAogCiAKICMgY2hlY2tzIGZvciBVTklYIHZhcmlhbnRzIHRoYXQgc2V0IEMgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcwotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQotIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KLWlmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCi0gIENQUD0KLWZpCi1pZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgotICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAotICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCi0gICAgZG8KLSAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgotICBicmVhawotZmkKLQotICAgIGRvbmUKLSAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCi0KLWZpCi0gIENQUD0kYWNfY3ZfcHJvZ19DUFAKLWVsc2UKLSAgYWNfY3ZfcHJvZ19DUFA9JENQUAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKLSRhc19lY2hvICIkQ1BQIiA+JjY7IH0KLWFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgotCi1lbHNlCi0gIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCi0gIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQotICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0dSRVAiIHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCi1jYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCi0qR05VKikKLSAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7Ci0qKQotICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgotICB3aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCi0gICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKLSAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhawotICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKLSAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCi0gICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKLSAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMwotICAgIGRvbmUKLSAgZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0gIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KLSBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgotCiAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQpAQCAtNTQxMiwxMCArNTc0MCw2IEBACiAgICAgZXNhYzs7CiBlc2FjCiAKLU1VTFRJQVJDSD0kKCRDQyAtLXByaW50LW11bHRpYXJjaCAyPi9kZXYvbnVsbCkKLQotCi0KIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBMSUJSQVJZIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIExJQlJBUlkuLi4gIiA+JjY7IH0KQEAgLTU2NTQsMTEgKzU5NzgsNiBAQAogCSAgTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc28nCiAJICBCTERMSUJSQVJZPSctTC4gLWxweXRob24kKExEVkVSU0lPTiknCiAJICBSVU5TSEFSRUQ9TERfTElCUkFSWV9QQVRIPWBwd2RgJHtMRF9MSUJSQVJZX1BBVEg6Kzoke0xEX0xJQlJBUllfUEFUSH19Ci0JICBjYXNlICRhY19zeXNfc3lzdGVtIGluCi0JICAgICAgRnJlZUJTRCopCi0JCVNPVkVSU0lPTj1gZWNobyAkU09WRVJTSU9OfGN1dCAtZCAiLiIgLWYgMWAKLQkJOzsKLQkgIGVzYWMKIAkgIElOU1RTT05BTUU9IiRMRExJQlJBUlkiLiRTT1ZFUlNJT04KIAkgIGlmIHRlc3QgIiR3aXRoX3B5ZGVidWciICE9IHllcwogICAgICAgICAgIHRoZW4KQEAgLTYwMTYsNTYgKzYzMzUsNiBAQAogCiAKIAotZm9yIGFjX3Byb2cgaW4gcHl0aG9uJFBBQ0tBR0VfVkVSU0lPTiBweXRob24zIHB5dGhvbgotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX1BZVEhPTis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRQWVRIT04iOyB0aGVuCi0gIGFjX2N2X3Byb2dfUFlUSE9OPSIkUFlUSE9OIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfUFlUSE9OPSIkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1QWVRIT049JGFjX2N2X3Byb2dfUFlUSE9OCi1pZiB0ZXN0IC1uICIkUFlUSE9OIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBZVEhPTiIgPiY1Ci0kYXNfZWNobyAiJFBZVEhPTiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRQWVRIT04iICYmIGJyZWFrCi1kb25lCi10ZXN0IC1uICIkUFlUSE9OIiB8fCBQWVRIT049Im5vdC1mb3VuZCIKLQotaWYgdGVzdCAiJFBZVEhPTiIgPSBub3QtZm91bmQ7IHRoZW4KLSAgICBBU0RMR0VOPSJAZWNobyBweXRob246ICRQWVRIT04hIGNhbm5vdCBydW4gXCQoc3JjZGlyKS9QYXJzZXIvYXNkbF9jLnB5ICMiCi1lbHNlCi0gICAgQVNETEdFTj0iJFBZVEhPTiIKLWZpCi0KLQogY2FzZSAkTUFDSERFUCBpbgogYnNkb3MqfGhwKnxIUCopCiAJIyBpbnN0YWxsIC1kIGRvZXMgbm90IHdvcmsgb24gQlNESSBvciBIUC1VWApAQCAtNjI0OCw2ICs2NTE3LDEzNCBAQAogZmkKIAogCisjIEVuYWJsZSBMVE8gZmxhZ3MKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLWx0byIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLWx0by4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWx0byB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbHRvK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9sdG87CitpZiB0ZXN0ICIkd2l0aHZhbCIgIT0gbm8KK3RoZW4KKyAgUHlfTFRPPSd0cnVlJworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsKK2Vsc2UKKyAgUHlfTFRPPSdmYWxzZScKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9OworZmkKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCitpZiB0ZXN0ICIkUHlfTFRPIiA9ICd0cnVlJyA7IHRoZW4KKyAgY2FzZSAkQ0MgaW4KKyAgICAqY2xhbmcqKQorICAgICAgIyBBbnkgY2hhbmdlcyBtYWRlIGhlcmUgc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiB0aGUgR0NDK0RhcndpbiBjYXNlIGJlbG93CisgICAgICBMVE9GTEFHUz0iLWZsdG8iCisgICAgICA7OworICAgICpnY2MqKQorICAgICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorICAgICAgICBEYXJ3aW4qKQorICAgICAgICAgIExUT0ZMQUdTPSItZmx0byIKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIExUT0ZMQUdTPSItZmx0byAtZnVzZS1saW5rZXItcGx1Z2luIC1mZmF0LWx0by1vYmplY3RzIC1mbHRvLXBhcnRpdGlvbj1ub25lIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCitmaQorCisjIEVuYWJsZSBQR08gZmxhZ3MuCisKKworCisKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxsdm0tcHJvZmRhdGEiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxsdm0tcHJvZmRhdGE7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0xMVk1fUFJPRl9GT1VORCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRMTFZNX1BST0ZfRk9VTkQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTExWTV9QUk9GX0ZPVU5EPSIkTExWTV9QUk9GX0ZPVU5EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfTExWTV9QUk9GX0ZPVU5EPSJmb3VuZCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MTFZNX1BST0ZfRk9VTkQiICYmIGFjX2N2X3Byb2dfTExWTV9QUk9GX0ZPVU5EPSJub3QtZm91bmQiCitmaQorZmkKK0xMVk1fUFJPRl9GT1VORD0kYWNfY3ZfcHJvZ19MTFZNX1BST0ZfRk9VTkQKK2lmIHRlc3QgLW4gIiRMTFZNX1BST0ZfRk9VTkQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTExWTV9QUk9GX0ZPVU5EIiA+JjUKKyRhc19lY2hvICIkTExWTV9QUk9GX0ZPVU5EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK0xMVk1fUFJPRl9FUlI9bm8KK2Nhc2UgJENDIGluCisgICpjbGFuZyopCisgICAgIyBBbnkgY2hhbmdlcyBtYWRlIGhlcmUgc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiB0aGUgR0NDK0RhcndpbiBjYXNlIGJlbG93CisgICAgUEdPX1BST0ZfR0VOX0ZMQUc9Ii1mcHJvZmlsZS1pbnN0ci1nZW5lcmF0ZSIKKyAgICBQR09fUFJPRl9VU0VfRkxBRz0iLWZwcm9maWxlLWluc3RyLXVzZT1jb2RlLnByb2ZjbGFuZ2QiCisgICAgTExWTV9QUk9GX01FUkdFUj0ibGx2bS1wcm9mZGF0YSBtZXJnZSAtb3V0cHV0PWNvZGUucHJvZmNsYW5nZCAqLnByb2ZjbGFuZ3IiCisgICAgTExWTV9QUk9GX0ZJTEU9IkxMVk1fUFJPRklMRV9GSUxFPVwiY29kZS0lcC5wcm9mY2xhbmdyXCIiCisgICAgaWYgdGVzdCAkTExWTV9QUk9GX0ZPVU5EID0gbm90LWZvdW5kCisgICAgdGhlbgorICAgICAgTExWTV9QUk9GX0VSUj15ZXMKKyAgICBmaQorICAgIDs7CisgICpnY2MqKQorICAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KKyAgICAgIERhcndpbiopCisgICAgICAgIFBHT19QUk9GX0dFTl9GTEFHPSItZnByb2ZpbGUtaW5zdHItZ2VuZXJhdGUiCisgICAgICAgIFBHT19QUk9GX1VTRV9GTEFHPSItZnByb2ZpbGUtaW5zdHItdXNlPWNvZGUucHJvZmNsYW5nZCIKKyAgICAgICAgTExWTV9QUk9GX01FUkdFUj0ibGx2bS1wcm9mZGF0YSBtZXJnZSAtb3V0cHV0PWNvZGUucHJvZmNsYW5nZCAqLnByb2ZjbGFuZ3IiCisgICAgICAgIExMVk1fUFJPRl9GSUxFPSJMTFZNX1BST0ZJTEVfRklMRT1cImNvZGUtJXAucHJvZmNsYW5nclwiIgorICAgICAgICBpZiB0ZXN0ICRMTFZNX1BST0ZfRk9VTkQgPSBub3QtZm91bmQKKyAgICAgICAgdGhlbgorICAgICAgICAgIExMVk1fUFJPRl9FUlI9eWVzCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBQR09fUFJPRl9HRU5fRkxBRz0iLWZwcm9maWxlLWdlbmVyYXRlIgorICAgICAgICBQR09fUFJPRl9VU0VfRkxBRz0iLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKKyAgICAgICAgTExWTV9QUk9GX01FUkdFUj0idHJ1ZSIKKyAgICAgICAgTExWTV9QUk9GX0ZJTEU9IiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKmljYyopCisgICAgUEdPX1BST0ZfR0VOX0ZMQUc9Ii1wcm9mLWdlbiIKKyAgICBQR09fUFJPRl9VU0VfRkxBRz0iLXByb2YtdXNlIgorICAgIExMVk1fUFJPRl9NRVJHRVI9InRydWUiCisgICAgTExWTV9QUk9GX0ZJTEU9IiIKKyAgICA7OworZXNhYworCiAjIFhYWCBTaG91bGRuJ3QgdGhlIGNvZGUgYWJvdmUgdGhhdCBmaWRkbGVzIHdpdGggQkFTRUNGTEFHUyBhbmQgT1BUIGJlCiAjIG1lcmdlZCB3aXRoIHRoaXMgY2h1bmsgb2YgY29kZT8KIApAQCAtNjM5Miw2ICs2Nzg5LDEzIEBACiAgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIKICAgICBmaQogCisgICAgIyBJQ0MgZG9lc24ndCByZWNvZ25pemUgdGhlIG9wdGlvbiwgYnV0IG9ubHkgZW1pdHMgYSB3YXJuaW5nCisgICAgIyMgWFhYIGRvZXMgaXQgZW1pdCBhbiB1bnVzZWQgcmVzdWx0IHdhcm5pbmcgYW5kIGNhbiBpdCBiZSBkaXNhYmxlZD8KKyAgICBjYXNlICIkQ0MiIGluCisgICAgKmljYyopCisgICAgYWNfY3ZfZGlzYWJsZV91bnVzZWRfcmVzdWx0X3dhcm5pbmc9bm8KKyAgICA7OworICAgICopCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gdHVybiBvZmYgJENDIHVudXNlZCByZXN1bHQgd2FybmluZyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gdHVybiBvZmYgJENDIHVudXNlZCByZXN1bHQgd2FybmluZy4uLiAiID4mNjsgfQogICAgICBhY19zYXZlX2NjPSIkQ0MiCkBAIC02NDI5LDYgKzY4MzMsOCBAQAogICAgICBDQz0iJGFjX3NhdmVfY2MiCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9kaXNhYmxlX3VudXNlZF9yZXN1bHRfd2FybmluZyIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2Rpc2FibGVfdW51c2VkX3Jlc3VsdF93YXJuaW5nIiA+JjY7IH0KKyAgICA7OworICAgIGVzYWMKIAogICAgIGlmIHRlc3QgJGFjX2N2X2Rpc2FibGVfdW51c2VkX3Jlc3VsdF93YXJuaW5nID0geWVzCiAgICAgdGhlbgpAQCAtNjQ3OCw2ICs2ODg0LDEwMyBAQAogICAgICAgQ0ZMQUdTX05PRElTVD0iJENGTEFHU19OT0RJU1QgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCiAgICAgZmkKIAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIHR1cm4gb24gJENDIG1peGVkIHNpZ24gY29tcGFyaXNvbiB3YXJuaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiB0dXJuIG9uICRDQyBtaXhlZCBzaWduIGNvbXBhcmlzb24gd2FybmluZy4uLiAiID4mNjsgfQorICAgICBhY19zYXZlX2NjPSIkQ0MiCisgICAgIENDPSIkQ0MgLVdzaWduLWNvbXBhcmUiCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBpZiAke2FjX2N2X2VuYWJsZV9zaWduX2NvbXBhcmVfd2FybmluZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworICAgICAgICAgICBhY19jdl9lbmFibGVfc2lnbl9jb21wYXJlX3dhcm5pbmc9eWVzCisKK2Vsc2UKKworICAgICAgICAgICBhY19jdl9lbmFibGVfc2lnbl9jb21wYXJlX3dhcm5pbmc9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgQ0M9IiRhY19zYXZlX2NjIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZW5hYmxlX3NpZ25fY29tcGFyZV93YXJuaW5nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZW5hYmxlX3NpZ25fY29tcGFyZV93YXJuaW5nIiA+JjY7IH0KKworICAgIGlmIHRlc3QgJGFjX2N2X2VuYWJsZV9zaWduX2NvbXBhcmVfd2FybmluZyA9IHllcworICAgIHRoZW4KKyAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1Xc2lnbi1jb21wYXJlIgorICAgIGZpCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiB0dXJuIG9uICRDQyB1bnJlYWNoYWJsZSBjb2RlIHdhcm5pbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIHR1cm4gb24gJENDIHVucmVhY2hhYmxlIGNvZGUgd2FybmluZy4uLiAiID4mNjsgfQorICAgICBhY19zYXZlX2NjPSIkQ0MiCisgICAgIENDPSIkQ0MgLVd1bnJlYWNoYWJsZS1jb2RlIgorICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgaWYgJHthY19jdl9lbmFibGVfdW5yZWFjaGFibGVfY29kZV93YXJuaW5nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgIGFjX2N2X2VuYWJsZV91bnJlYWNoYWJsZV9jb2RlX3dhcm5pbmc9eWVzCisKK2Vsc2UKKworICAgICAgICAgICBhY19jdl9lbmFibGVfdW5yZWFjaGFibGVfY29kZV93YXJuaW5nPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKyAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgIENDPSIkYWNfc2F2ZV9jYyIKKworICAgICMgRG9uJ3QgZW5hYmxlIHVucmVhY2hhYmxlIGNvZGUgd2FybmluZyBpbiBkZWJ1ZyBtb2RlLCBzaW5jZSBpdCB1c3VhbGx5CisgICAgIyByZXN1bHRzIGluIG5vbi1zdGFuZGFyZCBjb2RlIHBhdGhzLgorICAgICMgSXNzdWUgIzI0MzI0OiBVbmZvcnR1bmF0ZWx5LCB0aGUgdW5yZWFjaGFibGUgY29kZSB3YXJuaW5nIGRvZXMgbm90IHdvcmsKKyAgICAjIGNvcnJlY3RseSBvbiBnY2MgYW5kIGhhcyBiZWVuIHNpbGVudGx5IHJlbW92ZWQgZnJvbSB0aGUgY29tcGlsZXIuCisgICAgIyBJdCBpcyBzdXBwb3J0ZWQgb24gY2xhbmcgYnV0IG9uIE9TIFggc3lzdGVtcyBnY2MgbWF5IGJlIGFuIGFsaWFzCisgICAgIyBmb3IgY2xhbmcuICBUcnkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb21waWxlciBpcyBub3QgcmVhbGx5IGdjYyBhbmQsCisgICAgIyBpZiBzbywgb25seSB0aGVuIGVuYWJsZSB0aGUgd2FybmluZy4KKyAgICBpZiB0ZXN0ICRhY19jdl9lbmFibGVfdW5yZWFjaGFibGVfY29kZV93YXJuaW5nID0geWVzICYmIFwKKyAgICAgICAgdGVzdCAiJFB5X0RFQlVHIiAhPSAidHJ1ZSIgJiYgXAorICAgICAgICB0ZXN0IC16ICJgJENDIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IGdyZXAgJ0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidgIgorICAgIHRoZW4KKyAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1XdW5yZWFjaGFibGUtY29kZSIKKyAgICBlbHNlCisgICAgICBhY19jdl9lbmFibGVfdW5yZWFjaGFibGVfY29kZV93YXJuaW5nPW5vCisgICAgZmkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2VuYWJsZV91bnJlYWNoYWJsZV9jb2RlX3dhcm5pbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9lbmFibGVfdW5yZWFjaGFibGVfY29kZV93YXJuaW5nIiA+JjY7IH0KKwogICAgICMgaWYgdXNpbmcgZ2NjIG9uIGFscGhhLCB1c2UgLW1pZWVlIHRvIGdldCAobmVhcikgZnVsbCBJRUVFIDc1NAogICAgICMgc3VwcG9ydC4gIFdpdGhvdXQgdGhpcywgdHJlYXRtZW50IG9mIHN1Ym5vcm1hbHMgZG9lc24ndCBmb2xsb3cKICAgICAjIHRoZSBzdGFuZGFyZC4KQEAgLTY2MzAsNiArNzEzMywxMyBAQAogICAgIDs7CiBlc2FjCiAKKyMgSUNDIG5lZWRzIC1mcC1tb2RlbCBzdHJpY3Qgb3IgZmxvYXRzIGJlaGF2ZSBiYWRseQorY2FzZSAiJENDIiBpbgorKmljYyopCisgICAgQ0ZMQUdTX05PRElTVD0iJENGTEFHU19OT0RJU1QgLWZwLW1vZGVsIHN0cmljdCIKKyAgICA7OworZXNhYworCiBpZiB0ZXN0ICIkUHlfREVCVUciID0gJ3RydWUnOyB0aGVuCiAgIDoKIGVsc2UKQEAgLTcwMTAsNyArNzUyMCw3IEBACiBzeXMvc3RhdC5oIHN5cy9zeXNjYWxsLmggc3lzL3N5c19kb21haW4uaCBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdWlvLmggc3lzL3VuLmggc3lzL3V0c25hbWUuaCBzeXMvd2FpdC5oIHB0eS5oIFwKIGxpYnV0aWwuaCBzeXMvcmVzb3VyY2UuaCBuZXRwYWNrZXQvcGFja2V0Lmggc3lzZXhpdHMuaCBibHVldG9vdGguaCBcCi1ibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK2JsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggbGludXgvcmFuZG9tLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmggZW5kaWFuLmggXAogc3lzL2VuZGlhbi5oCiBkbyA6CiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKQEAgLTg5MjEsNDggKzk0MzEsNiBAQAogCiBmaQogCSMgRHluYW1pYyBsaW5raW5nIGZvciBIUC1VWAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUkFORF9lZ2QgaW4gLWxjcnlwdG8iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFJBTkRfZWdkIGluIC1sY3J5cHRvLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9jcnlwdG9fUkFORF9lZ2QrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGNyeXB0byAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgUkFORF9lZ2QgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBSQU5EX2VnZCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkPXllcwotZWxzZQotICBhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdG9fUkFORF9lZ2QiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19SQU5EX2VnZCIgPSB4eWVzOyB0aGVuIDoKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9SQU5EX0VHRCAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLQogCiAjIG9ubHkgY2hlY2sgZm9yIHNlbV9pbml0IGlmIHRocmVhZCBzdXBwb3J0IGlzIHJlcXVlc3RlZAogaWYgdGVzdCAiJHdpdGhfdGhyZWFkcyIgPSAieWVzIiAtbyAteiAiJHdpdGhfdGhyZWFkcyI7IHRoZW4KQEAgLTkxODAsNiArOTY0OCwyMyBAQAogZmkKIAogCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtYWRkcmVzcy1zYW5pdGl6ZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1hZGRyZXNzLXNhbml0aXplci4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFkZHJlc3Nfc2FuaXRpemVyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hZGRyZXNzX3Nhbml0aXplcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYWRkcmVzc19zYW5pdGl6ZXI7Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gIiR3aXRodmFsIiA+JjY7IH0KK0JBU0VDRkxBR1M9Ii1mc2FuaXRpemU9YWRkcmVzcyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAkQkFTRUNGTEFHUyIKK0xERkxBR1M9Ii1mc2FuaXRpemU9YWRkcmVzcyAkTERGTEFHUyIKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKwogIyBNb3N0IFNWUjQgcGxhdGZvcm1zIChlLmcuIFNvbGFyaXMpIG5lZWQgLWxzb2NrZXQgYW5kIC1sbnNsLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdF9vcGVuIGluIC1sbnNsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0X29wZW4gaW4gLWxuc2wuLi4gIiA+JjY7IH0KQEAgLTEwMzQwLDYgKzEwODI1LDM2IEBACiAJZmkKIGZpCiAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIENBTl9SQVdfRkRfRlJBTUVTIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBDQU5fUkFXX0ZEX0ZSQU1FUy4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworIC8qIENBTl9SQVdfRkRfRlJBTUVTIGF2YWlsYWJsZSBjaGVjayAqLworI2luY2x1ZGUgPGxpbnV4L2Nhbi9yYXcuaD4KK2ludAorbWFpbiAoKQoreworaW50IGNhbl9yYXdfZmRfZnJhbWVzID0gQ0FOX1JBV19GRF9GUkFNRVM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJTlVYX0NBTl9SQVdfRkRfRlJBTUVTIDEiID4+Y29uZmRlZnMuaAorCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2Vsc2UKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBPU1ggMTAuNSBTREsgb3IgbGF0ZXIiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE9TWCAxMC41IFNESyBvciBsYXRlci4uLiAiID4mNjsgfQogY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTE4MjYsNiArMTIzNDEsNyBAQAogJGFzX2VjaG8gIiRhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lIiA9IHh5ZXM7IHRoZW4gOgogCisgICAgICAgIExJQlM9IiRMSUJTIC1scnQiCiAgICAgICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxIiA+PmNvbmZkZWZzLmgKIAogCkBAIC0xMjMxMCwxOSArMTI4MjYsOSBAQAogX0FDRU9GCiAKIAotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVF9CTE9DS1MgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgZmlsZWJsb2Nrcy4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZmlsZWJsb2Nrcy4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCi0KIGZpCiAKIAotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aW1lLmggdGhhdCBkZWZpbmVzIGFsdHpvbmUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRpbWUuaCB0aGF0IGRlZmluZXMgYWx0em9uZS4uLiAiID4mNjsgfQogaWYgJHthY19jdl9oZWFkZXJfdGltZV9hbHR6b25lKzp9IGZhbHNlOyB0aGVuIDoKQEAgLTEzMDc4LDEyICsxMzU4NCwxMyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBoYXZlX2djY19hc21fZm9yX3g2ND15ZXMKIGVsc2UKICAgaGF2ZV9nY2NfYXNtX2Zvcl94NjQ9bm8KIGZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfZ2NjX2FzbV9mb3JfeDY0IiA+JjUKICRhc19lY2hvICIkaGF2ZV9nY2NfYXNtX2Zvcl94NjQiID4mNjsgfQogaWYgdGVzdCAiJGhhdmVfZ2NjX2FzbV9mb3JfeDY0IiA9IHllcwpAQCAtMTMyNTQsMTIgKzEzNzYxLDEzIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGhhdmVfZ2NjX2FzbV9mb3JfeDg3PXllcwogZWxzZQogICBoYXZlX2djY19hc21fZm9yX3g4Nz1ubwogZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9nY2NfYXNtX2Zvcl94ODciID4mNQogJGFzX2VjaG8gIiRoYXZlX2djY19hc21fZm9yX3g4NyIgPiY2OyB9CiBpZiB0ZXN0ICIkaGF2ZV9nY2NfYXNtX2Zvcl94ODciID0geWVzCkBAIC0xMzI2OSw2ICsxMzc3NywzOSBAQAogCiBmaQogCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgY2FuIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCBtYzY4ODgxIGZwY3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IG1jNjg4ODEgZnBjci4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICB1bnNpZ25lZCBpbnQgZnBjcjsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbW92ZS5sICUlZnBjciwlMCIgOiAiPWciIChmcGNyKSk7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm1vdmUubCAlMCwlJWZwY3IiIDogOiAiZyIgKGZwY3IpKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGhhdmVfZ2NjX2FzbV9mb3JfbWM2ODg4MT15ZXMKK2Vsc2UKKyAgaGF2ZV9nY2NfYXNtX2Zvcl9tYzY4ODgxPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9nY2NfYXNtX2Zvcl9tYzY4ODgxIiA+JjUKKyRhc19lY2hvICIkaGF2ZV9nY2NfYXNtX2Zvcl9tYzY4ODgxIiA+JjY7IH0KK2lmIHRlc3QgIiRoYXZlX2djY19hc21fZm9yX21jNjg4ODEiID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0NDX0FTTV9GT1JfTUM2ODg4MSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKwogIyBEZXRlY3Qgd2hldGhlciBzeXN0ZW0gYXJpdGhtZXRpYyBpcyBzdWJqZWN0IHRvIHg4Ny1zdHlsZSBkb3VibGUKICMgcm91bmRpbmcgaXNzdWVzLiAgVGhlIHJlc3VsdCBvZiB0aGlzIHRlc3QgaGFzIGxpdHRsZSBtZWFuaW5nIG9uIG5vbgogIyBJRUVFIDc1NCBwbGF0Zm9ybXMuICBPbiBJRUVFIDc1NCwgdGVzdCBzaG91bGQgcmV0dXJuIDEgaWYgcm91bmRpbmcKQEAgLTE0MDExLDEzICsxNDU1MiwxMyBAQAogJGFzX2VjaG8gIiRBQklGTEFHUyIgPiY2OyB9CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIFNPQUJJIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIFNPQUJJLi4uICIgPiY2OyB9Ci1TT0FCST0nY3B5dGhvbi0nYGVjaG8gJFZFUlNJT04gfCB0ciAtZCAuYCR7QUJJRkxBR1N9CitTT0FCST0nY3B5dGhvbi0nYGVjaG8gJFZFUlNJT04gfCB0ciAtZCAuYCR7QUJJRkxBR1N9JHtQTEFURk9STV9UUklQTEVUOistJFBMQVRGT1JNX1RSSVBMRVR9CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNPQUJJIiA+JjUKICRhc19lY2hvICIkU09BQkkiID4mNjsgfQogCiAKIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KLSAgICBMaW51eCp8R05VKikKKyAgICBMaW51eCp8R05VKnxEYXJ3aW4pCiAJRVhUX1NVRkZJWD0uJHtTT0FCSX0ke1NITElCX1NVRkZJWH07OwogICAgICopCiAJRVhUX1NVRkZJWD0ke1NITElCX1NVRkZJWH07OwpAQCAtMTQzNDUsNiArMTQ4ODYsNTAgQEAKIGZpCiAKIAorIyBhbHNvIGluIDQuMCwgYnV0IG5vdCBpbiBlZGl0bGluZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmxfcmVzaXplX3Rlcm1pbmFsIGluIC1scmVhZGxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJsX3Jlc2l6ZV90ZXJtaW5hbCBpbiAtbHJlYWRsaW5lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9yZWFkbGluZV9ybF9yZXNpemVfdGVybWluYWwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHJlYWRsaW5lICRSRUFETElORV9MSUJTICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJsX3Jlc2l6ZV90ZXJtaW5hbCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJsX3Jlc2l6ZV90ZXJtaW5hbCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcmVhZGxpbmVfcmxfcmVzaXplX3Rlcm1pbmFsPXllcworZWxzZQorICBhY19jdl9saWJfcmVhZGxpbmVfcmxfcmVzaXplX3Rlcm1pbmFsPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZWFkbGluZV9ybF9yZXNpemVfdGVybWluYWwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcmVhZGxpbmVfcmxfcmVzaXplX3Rlcm1pbmFsIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3JlYWRsaW5lX3JsX3Jlc2l6ZV90ZXJtaW5hbCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKwogIyBjaGVjayBmb3IgcmVhZGxpbmUgNC4yCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBybF9jb21wbGV0aW9uX21hdGNoZXMgaW4gLWxyZWFkbGluZSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcmxfY29tcGxldGlvbl9tYXRjaGVzIGluIC1scmVhZGxpbmUuLi4gIiA+JjY7IH0KQEAgLTE0NDE4LDYgKzE1MDAzLDQ5IEBACiAKIGZpCiAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFwcGVuZF9oaXN0b3J5IGluIC1scmVhZGxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFwcGVuZF9oaXN0b3J5IGluIC1scmVhZGxpbmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3JlYWRsaW5lX2FwcGVuZF9oaXN0b3J5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZWFkbGluZSAkUkVBRExJTkVfTElCUyAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBhcHBlbmRfaGlzdG9yeSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGFwcGVuZF9oaXN0b3J5ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9yZWFkbGluZV9hcHBlbmRfaGlzdG9yeT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3JlYWRsaW5lX2FwcGVuZF9oaXN0b3J5PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZWFkbGluZV9hcHBlbmRfaGlzdG9yeSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9yZWFkbGluZV9hcHBlbmRfaGlzdG9yeSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9hcHBlbmRfaGlzdG9yeSIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9STF9BUFBFTkRfSElTVE9SWSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCiAjIEVuZCBvZiByZWFkbGluZSBjaGVja3M6IHJlc3RvcmUgTElCUwogTElCUz0kTElCU19ub19yZWFkbGluZQogCkBAIC0xNTMzNCw3ICsxNTk2Miw3IEBACiBkb25lCiAKIAotU1JDRElSUz0iUGFyc2VyIEdyYW1tYXIgT2JqZWN0cyBQeXRob24gTW9kdWxlcyBNYWMiCitTUkNESVJTPSJQYXJzZXIgR3JhbW1hciBPYmplY3RzIFB5dGhvbiBNb2R1bGVzIE1hYyBQcm9ncmFtcyIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGJ1aWxkIGRpcmVjdG9yaWVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBidWlsZCBkaXJlY3Rvcmllcy4uLiAiID4mNjsgfQogZm9yIGRpciBpbiAkU1JDRElSUzsgZG8KQEAgLTE1NDc1LDYgKzE2MTAzLDcyIEBACiAgICAgZXNhYwogZmkKIAorIyBDaGVjayBmb3Igc3RkYXRvbWljLmgKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGF0b21pYy5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGRhdG9taWMuaC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyAgICAjaW5jbHVkZSA8c3RkYXRvbWljLmg+CisgICAgYXRvbWljX2ludCB2YWx1ZSA9IEFUT01JQ19WQVJfSU5JVCgxKTsKKyAgICBfQXRvbWljIHZvaWQgKnB5X2F0b21pY19hZGRyZXNzID0gKHZvaWQqKSAmdmFsdWU7CisgICAgaW50IG1haW4oKSB7CisgICAgICBpbnQgbG9hZGVkX3ZhbHVlID0gYXRvbWljX2xvYWQoJnZhbHVlKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaGF2ZV9zdGRhdG9taWNfaD15ZXMKK2Vsc2UKKyAgaGF2ZV9zdGRhdG9taWNfaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zdGRhdG9taWNfaCIgPiY1CiskYXNfZWNobyAiJGhhdmVfc3RkYXRvbWljX2giID4mNjsgfQorCitpZiB0ZXN0ICIkaGF2ZV9zdGRhdG9taWNfaCIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVERfQVRPTUlDIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIGZvciBHQ0MgPj0gNC43IF9fYXRvbWljIGJ1aWx0aW5zCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHQ0MgPj0gNC43IF9fYXRvbWljIGJ1aWx0aW5zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHQ0MgPj0gNC43IF9fYXRvbWljIGJ1aWx0aW5zLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgIHZvbGF0aWxlIGludCB2YWwgPSAxOworICAgIGludCBtYWluKCkgeworICAgICAgX19hdG9taWNfbG9hZF9uKCZ2YWwsIF9fQVRPTUlDX1NFUV9DU1QpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBoYXZlX2J1aWx0aW5fYXRvbWljPXllcworZWxzZQorICBoYXZlX2J1aWx0aW5fYXRvbWljPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX2J1aWx0aW5fYXRvbWljIiA+JjUKKyRhc19lY2hvICIkaGF2ZV9idWlsdGluX2F0b21pYyIgPiY2OyB9CisKK2lmIHRlc3QgIiRoYXZlX2J1aWx0aW5fYXRvbWljIiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0JVSUxUSU5fQVRPTUlDIDEiID4+Y29uZmRlZnMuaAorCitmaQorCiAjIGVuc3VyZXBpcCBvcHRpb24KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVuc3VyZXBpcCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZW5zdXJlcGlwLi4uICIgPiY2OyB9CkBAIC0xNTUwMCw2ICsxNjE5NCwxMTMgQEAKICRhc19lY2hvICIkRU5TVVJFUElQIiA+JjY7IH0KIAogCisjIGNoZWNrIGlmIHRoZSBkaXJlbnQgc3RydWN0dXJlIG9mIGEgZF90eXBlIGZpZWxkIGFuZCBEVF9VTktOT1dOIGlzIGRlZmluZWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGRpcmVudCBzdHJ1Y3R1cmUgb2YgYSBkX3R5cGUgZmllbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGRpcmVudCBzdHJ1Y3R1cmUgb2YgYSBkX3R5cGUgZmllbGQuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgI2luY2x1ZGUgPGRpcmVudC5oPgorCisgICAgaW50IG1haW4oKSB7CisgICAgICBzdHJ1Y3QgZGlyZW50IGVudHJ5OworICAgICAgcmV0dXJuIGVudHJ5LmRfdHlwZSA9PSBEVF9VTktOT1dOOworICAgIH0KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaGF2ZV9kaXJlbnRfZF90eXBlPXllcworZWxzZQorICBoYXZlX2RpcmVudF9kX3R5cGU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXZlX2RpcmVudF9kX3R5cGUiID4mNQorJGFzX2VjaG8gIiRoYXZlX2RpcmVudF9kX3R5cGUiID4mNjsgfQorCitpZiB0ZXN0ICIkaGF2ZV9kaXJlbnRfZF90eXBlIiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RJUkVOVF9EX1RZUEUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgY2hlY2sgaWYgdGhlIExpbnV4IGdldHJhbmRvbSgpIHN5c2NhbGwgaXMgYXZhaWxhYmxlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0aGUgTGludXggZ2V0cmFuZG9tKCkgc3lzY2FsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIExpbnV4IGdldHJhbmRvbSgpIHN5c2NhbGwuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCisgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICAgICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorICAgICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworICAgIGludCBtYWluKCkgeworICAgICAgICBjaGFyIGJ1ZmZlclsxXTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJ1ZmxlbiA9IHNpemVvZihidWZmZXIpOworICAgICAgICBjb25zdCBpbnQgZmxhZ3MgPSBHUk5EX05PTkJMT0NLOworICAgICAgICAvKiBpZ25vcmUgdGhlIHJlc3VsdCwgUHl0aG9uIGNoZWNrcyBmb3IgRU5PU1lTIGFuZCBFQUdBSU4gYXQgcnVudGltZSAqLworICAgICAgICAodm9pZClzeXNjYWxsKFNZU19nZXRyYW5kb20sIGJ1ZmZlciwgYnVmbGVuLCBmbGFncyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaGF2ZV9nZXRyYW5kb21fc3lzY2FsbD15ZXMKK2Vsc2UKKyAgaGF2ZV9nZXRyYW5kb21fc3lzY2FsbD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfZ2V0cmFuZG9tX3N5c2NhbGwiID4mNQorJGFzX2VjaG8gIiRoYXZlX2dldHJhbmRvbV9zeXNjYWxsIiA+JjY7IH0KKworaWYgdGVzdCAiJGhhdmVfZ2V0cmFuZG9tX3N5c2NhbGwiID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUUkFORE9NX1NZU0NBTEwgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgY2hlY2sgaWYgdGhlIGdldHJhbmRvbSgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZQorIyB0aGUgdGVzdCB3YXMgd3JpdHRlbiBmb3IgdGhlIFNvbGFyaXMgZnVuY3Rpb24gb2YgPHN5cy9yYW5kb20uaD4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRoZSBnZXRyYW5kb20oKSBmdW5jdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGdldHJhbmRvbSgpIGZ1bmN0aW9uLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworICAgICNpbmNsdWRlIDxzeXMvcmFuZG9tLmg+CisKKyAgICBpbnQgbWFpbigpIHsKKyAgICAgICAgY2hhciBidWZmZXJbMV07CisgICAgICAgIGNvbnN0IHNpemVfdCBidWZsZW4gPSBzaXplb2YoYnVmZmVyKTsKKyAgICAgICAgY29uc3QgaW50IGZsYWdzID0gMDsKKyAgICAgICAgLyogaWdub3JlIHRoZSByZXN1bHQsIFB5dGhvbiBjaGVja3MgZm9yIEVOT1NZUyBhdCBydW50aW1lICovCisgICAgICAgICh2b2lkKWdldHJhbmRvbShidWZmZXIsIGJ1ZmxlbiwgZmxhZ3MpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGhhdmVfZ2V0cmFuZG9tPXllcworZWxzZQorICBoYXZlX2dldHJhbmRvbT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfZ2V0cmFuZG9tIiA+JjUKKyRhc19lY2hvICIkaGF2ZV9nZXRyYW5kb20iID4mNjsgfQorCitpZiB0ZXN0ICIkaGF2ZV9nZXRyYW5kb20iID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUUkFORE9NIDEiID4+Y29uZmRlZnMuaAorCitmaQorCiAjIGdlbmVyYXRlIG91dHB1dCBmaWxlcwogYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyBNaXNjL3B5dGhvbi5wYyBNaXNjL3B5dGhvbi1jb25maWcuc2giCiAKQEAgLTE2MDEyLDcgKzE2ODEzLDcgQEAKICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgogIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KIGFjX2xvZz0iCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgcHl0aG9uICRhc19tZSAzLjUsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwpAQCAtMTYwNzQsNyArMTY4NzUsNyBAQAogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBhY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgogYWNfY3NfdmVyc2lvbj0iXFwKLXB5dGhvbiBjb25maWcuc3RhdHVzIDMuNAorcHl0aG9uIGNvbmZpZy5zdGF0dXMgMy41CiBjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjksCiAgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggMzM5NGQ4NC4uODEzNWM3MSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMyw3ICszLDcgQEAKIGRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAjIFNldCBWRVJTSU9OIHNvIHdlIG9ubHkgbmVlZCB0byBlZGl0IGluIG9uZSBwbGFjZSAoaS5lLiwgaGVyZSkKLW00X2RlZmluZShQWVRIT05fVkVSU0lPTiwgMy40KQorbTRfZGVmaW5lKFBZVEhPTl9WRVJTSU9OLCAzLjUpCiAKIEFDX1BSRVJFUSgyLjY1KQogCkBAIC00OSw2ICs0OSw3IEBACiBBQ19DT05GSUdfU1JDRElSKFtJbmNsdWRlL29iamVjdC5oXSkKIEFDX0NPTkZJR19IRUFERVIocHljb25maWcuaCkKIAorQUNfU1VCU1QoY3Jvc3NfY29tcGlsaW5nKQogQUNfQ0FOT05JQ0FMX0hPU1QKIEFDX1NVQlNUKGJ1aWxkKQogQUNfU1VCU1QoaG9zdCkKQEAgLTU2LDYgKzU3LDE0IEBACiAjIHB5YnVpbGRkaXIudHh0IHdpbGwgYmUgY3JlYXRlZCBieSAtLWdlbmVyYXRlLXBvc2l4LXZhcnMgaW4gdGhlIE1ha2VmaWxlCiBybSAtZiBweWJ1aWxkZGlyLnR4dAogCitBQ19DSEVDS19QUk9HUyhQWVRIT05fRk9SX0dFTiwgcHl0aG9uJFBBQ0tBR0VfVkVSU0lPTiBweXRob24zIHB5dGhvbiwgbm90LWZvdW5kKQoraWYgdGVzdCAiJFBZVEhPTl9GT1JfR0VOIiA9IG5vdC1mb3VuZDsgdGhlbgorICAgIFBZVEhPTl9GT1JfR0VOPSdAZWNobyAiQ2Fubm90IGdlbmVyYXRlICRALCBweXRob24gbm90IGZvdW5kICEiICYmIFwKKyAgICBlY2hvICJUbyBza2lwIHJlLWdlbmVyYXRpb24gb2YgJEAgcnVuIDxtYWtlIHRvdWNoPiBvciA8bWFrZSAtdCAkQD4uIiAmJiBcCisgICAgZWNobyAiT3RoZXJ3aXNlLCBzZXQgcHl0aG9uIGluIFBBVEggYW5kIHJ1biBjb25maWd1cmUgb3IgcnVuIDxtYWtlIFBZVEhPTl9GT1JfR0VOPXB5dGhvbj4uIiAmJiBmYWxzZSAmJicKK2ZpCitBQ19TVUJTVChQWVRIT05fRk9SX0dFTikKKwogaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBweXRob24gaW50ZXJwcmV0ZXIgZm9yIGNyb3NzIGJ1aWxkXSkKICAgICBpZiB0ZXN0IC16ICIkUFlUSE9OX0ZPUl9CVUlMRCI7IHRoZW4KQEAgLTcyLDEyICs4MSwxNSBAQAogICAgICAgICBBQ19NU0dfUkVTVUxUKCRpbnRlcnApCiAJUFlUSE9OX0ZPUl9CVUlMRD0nX1BZVEhPTl9QUk9KRUNUX0JBU0U9JChhYnNfYnVpbGRkaXIpIF9QWVRIT05fSE9TVF9QTEFURk9STT0kKF9QWVRIT05fSE9TVF9QTEFURk9STSkgUFlUSE9OUEFUSD0kKHNoZWxsIHRlc3QgLWYgcHlidWlsZGRpci50eHQgJiYgZWNobyAkKGFic19idWlsZGRpcikvYGNhdCBweWJ1aWxkZGlyLnR4dGA6KSQoc3JjZGlyKS9MaWI6JChzcmNkaXIpL0xpYi8kKFBMQVRESVIpICckaW50ZXJwCiAgICAgZmkKKyAgICBQR0VOX0RFUEVOREVOQ1k9JycKIGVsaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgogICAgIEFDX01TR19FUlJPUihbQ3Jvc3MgY29tcGlsaW5nIHJlcXVpcmVkIC0taG9zdD1IT1NULVRVUExFIGFuZCAtLWJ1aWxkPUFSQ0hdKQogZWxzZQogICAgIFBZVEhPTl9GT1JfQlVJTEQ9Jy4vJChCVUlMRFBZVEhPTikgLUUnCisgICAgUEdFTl9ERVBFTkRFTkNZPSckKFBHRU4pJwogZmkKIEFDX1NVQlNUKFBZVEhPTl9GT1JfQlVJTEQpCitBQ19TVUJTVChQR0VOX0RFUEVOREVOQ1kpCiAKIGRubCBFbnN1cmUgdGhhdCBpZiBwcmVmaXggaXMgc3BlY2lmaWVkLCBpdCBkb2VzIG5vdCBlbmQgaW4gYSBzbGFzaC4gSWYKIGRubCBpdCBkb2VzLCB3ZSBnZXQgcGF0aCBuYW1lcyBjb250YWluaW5nICcvLycgd2hpY2ggaXMgYm90aCB1Z2x5IGFuZApAQCAtODYsNyArOTgsNyBAQAogZG5sIExhc3Qgc2xhc2ggc2hvdWxkbid0IGJlIHN0cmlwcGVkIGlmIHByZWZpeD0vCiBpZiB0ZXN0ICIkcHJlZml4IiAhPSAiLyI7IHRoZW4KICAgICBwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkIC1lICdzL1wvJC8vZydgCi1maSAgICAKK2ZpCiAKIGRubCBUaGlzIGlzIGZvciBzdHVmZiB0aGF0IGFic29sdXRlbHkgbXVzdCBlbmQgdXAgaW4gcHljb25maWcuaC4KIGRubCBQbGVhc2UgdXNlIHB5cG9ydC5oIGluc3RlYWQsIGlmIHBvc3NpYmxlLgpAQCAtMTc4LDcgKzE5MCw3IEBACiAJCWZpCiAJCTs7CiAJZXNhYwotCQorCiBdLFsKICAgIAlVTklWRVJTQUxTREs9CiAJZW5hYmxlX3VuaXZlcnNhbHNkaz0KQEAgLTI0MCw3ICsyNTIsNyBAQAogICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZnJhbWV3b3JrQDw6QD1JTlNUQUxMRElSQDo+QF0sIFtCdWlsZCAoTWFjT1NYfERhcndpbikgZnJhbWV3b3JrXSksCiBbCiAJY2FzZSAkZW5hYmxldmFsIGluCi0JeWVzKSAKKwl5ZXMpCiAJCWVuYWJsZXZhbD0vTGlicmFyeS9GcmFtZXdvcmtzCiAJZXNhYwogCWNhc2UgJGVuYWJsZXZhbCBpbgpAQCAtMjk3LDcgKzMwOSw3IEBACiAJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iJHtNRElSfS9BcHBsaWNhdGlvbnMiCiAKIAkJCWlmIHRlc3QgIiR7cHJlZml4fSIgPSAiTk9ORSI7IHRoZW4KLQkJCQkjIFVzZXIgaGFzbid0IHNwZWNpZmllZCB0aGUgCisJCQkJIyBVc2VyIGhhc24ndCBzcGVjaWZpZWQgdGhlCiAJCQkJIyAtLXByZWZpeCBvcHRpb24sIGJ1dCB3YW50cyB0byBpbnN0YWxsCiAJCQkJIyB0aGUgZnJhbWV3b3JrIGluIGEgbm9uLWRlZmF1bHQgbG9jYXRpb24sCiAJCQkJIyBlbnN1cmUgdGhhdCB0aGUgY29tcGF0aWJpbGl0eSBsaW5rcyBnZXQKQEAgLTQyNSw3ICs0MzcsNyBAQAogCWVzYWMKIAlfUFlUSE9OX0hPU1RfUExBVEZPUk09IiRNQUNIREVQJHtfaG9zdF9jcHU6Ky0kX2hvc3RfY3B1fSIKIGZpCi0JCisKICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBzdGFuZCBfWE9QRU5fU09VUkNFIGJlaW5nIGRlZmluZWQgYXQgYWxsOyB0aGV5CiAjIGRpc2FibGUgZmVhdHVyZXMgaWYgaXQgaXMgZGVmaW5lZCwgd2l0aG91dCBhbnkgbWVhbnMgdG8gYWNjZXNzIHRoZXNlCiAjIGZlYXR1cmVzIGFzIGV4dGVuc2lvbnMuIEZvciB0aGVzZSBzeXN0ZW1zLCB3ZSBza2lwIHRoZSBkZWZpbml0aW9uIG9mCkBAIC00NDIsNyArNDU0LDcgQEAKICAgIyBSZWNvbmZpcm1lZCBmb3IgT3BlbkJTRCAzLjMgYnkgWmFjaGFyeSBIYW1tLCBmb3IgMy40IGJ5IEphc29uIElzaC4KICAgIyBJbiBhZGRpdGlvbiwgU3RlZmFuIEtyYWggY29uZmlybXMgdGhhdCBpc3N1ZSAjMTI0NDYxMCBleGlzdHMgdGhyb3VnaAogICAjIE9wZW5CU0QgNC42LCBidXQgaXMgZml4ZWQgaW4gNC43LgotICBPcGVuQlNELzIuKiB8IE9wZW5CU0QvMy4qIHwgT3BlbkJTRC80LkA8OkAwMTIzNDU2QDo+QCkgCisgIE9wZW5CU0QvMi4qIHwgT3BlbkJTRC8zLiogfCBPcGVuQlNELzQuQDw6QDAxMjM0NTZAOj5AKQogICAgIGRlZmluZV94b3Blbl9zb3VyY2U9bm8KICAgICAjIE9wZW5CU0QgdW5kb2VzIG91ciBkZWZpbml0aW9uIG9mIF9fQlNEX1ZJU0lCTEUgaWYgX1hPUEVOX1NPVVJDRSBpcwogICAgICMgYWxzbyBkZWZpbmVkLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nIF9CU0RfU09VUkNFCkBAIC00ODAsMTIgKzQ5MiwxMiBAQAogICAjIHdpdGggX1hPUEVOX1NPVVJDRSBhbmQgX19CU0RfVklTSUJMRSBkb2VzIG5vdCByZS1lbmFibGUgdGhlbS4KICAgRnJlZUJTRC80LiopCiAgICAgZGVmaW5lX3hvcGVuX3NvdXJjZT1ubzs7Ci0gICMgT24gTWFjT1MgWCAxMC4yLCBhIGJ1ZyBpbiBuY3Vyc2VzLmggbWVhbnMgdGhhdCBpdCBjcmFwcyBvdXQgaWYgCisgICMgT24gTWFjT1MgWCAxMC4yLCBhIGJ1ZyBpbiBuY3Vyc2VzLmggbWVhbnMgdGhhdCBpdCBjcmFwcyBvdXQgaWYKICAgIyBfWE9QRU5fRVhURU5ERURfU09VUkNFIGlzIGRlZmluZWQuIEFwcGFyZW50bHksIHRoaXMgaXMgZml4ZWQgaW4gMTAuMywgd2hpY2gKICAgIyBpZGVudGlmaWVzIGl0c2VsZiBhcyBEYXJ3aW4vNy4qCiAgICMgT24gTWFjIE9TIFggMTAuNCwgZGVmaW5pbmcgX1BPU0lYX0NfU09VUkNFIG9yIF9YT1BFTl9TT1VSQ0UKICAgIyBkaXNhYmxlcyBwbGF0Zm9ybSBzcGVjaWZpYyBmZWF0dXJlcyBiZXlvbmQgcmVwYWlyLgotICAjIE9uIE1hYyBPUyBYIDEwLjMsIGRlZmluaW5nIF9QT1NJWF9DX1NPVVJDRSBvciBfWE9QRU5fU09VUkNFIAorICAjIE9uIE1hYyBPUyBYIDEwLjMsIGRlZmluaW5nIF9QT1NJWF9DX1NPVVJDRSBvciBfWE9QRU5fU09VUkNFCiAgICMgaGFzIG5vIGVmZmVjdCwgZG9uJ3QgYm90aGVyIGRlZmluaW5nIHRoZW0KICAgRGFyd2luL0A8OkA2Nzg5QDo+QC4qKQogICAgIGRlZmluZV94b3Blbl9zb3VyY2U9bm87OwpAQCAtNTQxLDcgKzU1Myw3IEBACiAjCiAjIFNHSSBjb21waWxlcnMgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGJvdGggdGhlIEFCSSBhbmQgdGhlCiAjIElTQSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugc3dpdGNoZXMsCi0jIGRpZmZlcmVudCBhbmQgb2Z0ZW4gaW5jb21wYXRhYmxlIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQuCisjIGRpZmZlcmVudCBhbmQgb2Z0ZW4gaW5jb21wYXRpYmxlIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQuCiAjCiAjIFRoZSBTR0lfQUJJIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgQ0MgYW5kIExERkxBR1MgYW5kCiAjIHRodXMgc3VwcGx5IHN1cHBvcnQgZm9yIHZhcmlvdXMgQUJJL0lTQSBjb21iaW5hdGlvbnMuICBUaGUgTUFDSERFUApAQCAtNTU2LDkgKzU2OCw2IEBACiBmaQogQUNfTVNHX1JFU1VMVCgkTUFDSERFUCkKIAotQUNfU1VCU1QoUExBVERJUikKLVBMQVRESVI9cGxhdC0kTUFDSERFUAotCiAjIFJlY29yZCB0aGUgY29uZmlndXJlLXRpbWUgdmFsdWUgb2YgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULAogIyBpdCBtYXkgaW5mbHVlbmNlIHRoZSB3YXkgd2UgY2FuIGJ1aWxkIGV4dGVuc2lvbnMsIHNvIGRpc3R1dGlscwogIyBuZWVkcyB0byBjaGVjayBpdApAQCAtNTk2LDYgKzYwNSwyMiBAQAogCWVzYWNdKQogQUNfTVNHX1JFU1VMVCgkd2l0aG91dF9nY2MpCiAKK0FDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWljYykKK0FDX0FSR19XSVRIKGljYywKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtaWNjXSwgW2J1aWxkIHdpdGggaWNjXSksCitbCisJY2FzZSAkd2l0aHZhbCBpbgorCW5vKQlDQz0ke0NDOi1jY30KKwkJd2l0aF9pY2M9bm87OworCXllcykJQ0M9aWNjCisJCUNYWD1pY3BjCisJCXdpdGhfaWNjPXllczs7CisJKikJQ0M9JHdpdGh2YWwKKwkJd2l0aF9pY2M9JHdpdGh2YWw7OworCWVzYWNdLCBbCisJd2l0aF9pY2M9bm9dKQorQUNfTVNHX1JFU1VMVCgkd2l0aF9pY2MpCisKICMgSWYgdGhlIHVzZXIgc3dpdGNoZXMgY29tcGlsZXJzLCB3ZSBjYW4ndCBiZWxpZXZlIHRoZSBjYWNoZQogaWYgdGVzdCAhIC16ICIkYWNfY3ZfcHJvZ19DQyIgLWEgISAteiAiJENDIiAtYSAiJENDIiAhPSAiJGFjX2N2X3Byb2dfQ0MiCiB0aGVuCkBAIC02NjcsNiArNjkyLDggQEAKIAlmaQogZmkKIEFDX1BST0dfQ0MKK0FDX1BST0dfQ1BQCitBQ19QUk9HX0dSRVAKIAogQUNfU1VCU1QoQ1hYKQogQUNfU1VCU1QoTUFJTkNDKQpAQCAtNjc1LDcgKzcwMiw3IEBACiAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWN4eC1tYWluPTxjb21waWxlcj5dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBpbGUgbWFpbigpIGFuZCBsaW5rIHB5dGhvbiBleGVjdXRhYmxlIHdpdGggQysrIGNvbXBpbGVyXSksCiBbCi0JCisKIAljYXNlICR3aXRodmFsIGluCiAJbm8pCXdpdGhfY3h4X21haW49bm8KIAkJTUFJTkNDPSckKENDKSc7OwpAQCAtNzAwLDYgKzcyNyw3IEBACiAgICAgICAgIGdjYykgICAgQUNfUEFUSF9UT09MKENYWCwgW2crK10sIFtnKytdLCBbbm90Zm91bmRdKSA7OwogICAgICAgICBjYykgICAgIEFDX1BBVEhfVE9PTChDWFgsIFtjKytdLCBbYysrXSwgW25vdGZvdW5kXSkgOzsKICAgICAgICAgY2xhbmd8Ki9jbGFuZykgICAgIEFDX1BBVEhfVE9PTChDWFgsIFtjbGFuZysrXSwgW2NsYW5nKytdLCBbbm90Zm91bmRdKSA7OworICAgICAgICBpY2N8Ki9pY2MpICAgICAgICAgQUNfUEFUSF9UT09MKENYWCwgW2ljcGNdLCBbaWNwY10sIFtub3Rmb3VuZF0pIDs7CiAgICAgICAgIGVzYWMKIAlpZiB0ZXN0ICIkQ1hYIiA9ICJub3Rmb3VuZCIKIAl0aGVuCkBAIC03MjQsNiArNzUyLDE0MiBAQAogZmkKIAogCitNVUxUSUFSQ0g9JCgkQ0MgLS1wcmludC1tdWx0aWFyY2ggMj4vZGV2L251bGwpCitBQ19TVUJTVChNVUxUSUFSQ0gpCisKK0FDX01TR19DSEVDS0lORyhbZm9yIHRoZSBwbGF0Zm9ybSB0cmlwbGV0IGJhc2VkIG9uIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljc10pCitjYXQgPj4gY29uZnRlc3QuYyA8PEVPRgorI3VuZGVmIGJmaW4KKyN1bmRlZiBjcmlzCisjdW5kZWYgZnIzMAorI3VuZGVmIGxpbnV4CisjdW5kZWYgaHBwYQorI3VuZGVmIGhwdXgKKyN1bmRlZiBpMzg2CisjdW5kZWYgbWlwcworI3VuZGVmIHBvd2VycGMKKyN1bmRlZiBzcGFyYworI3VuZGVmIHVuaXgKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyMgaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fTFA2NF9fKQorICAgICAgICB4ODZfNjQtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiBkZWZpbmVkKF9fSUxQMzJfXykKKyAgICAgICAgeDg2XzY0LWxpbnV4LWdudXgzMgorIyBlbGlmIGRlZmluZWQoX19pMzg2X18pCisgICAgICAgIGkzODYtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKQorIyAgaWYgZGVmaW5lZChfX0lMUDMyX18pCisgICAgICAgIGFhcmNoNjRfaWxwMzItbGludXgtZ251CisjICBlbHNlCisgICAgICAgIGFhcmNoNjQtbGludXgtZ251CisjICBlbmRpZgorIyBlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pICYmIGRlZmluZWQoX19BQVJDSDY0RUJfXykKKyMgIGlmIGRlZmluZWQoX19JTFAzMl9fKQorICAgICAgICBhYXJjaDY0X2JlX2lscDMyLWxpbnV4LWdudQorIyAgZWxzZQorICAgICAgICBhYXJjaDY0X2JlLWxpbnV4LWdudQorIyAgZW5kaWYKKyMgZWxpZiBkZWZpbmVkKF9fYWxwaGFfXykKKyAgICAgICAgYWxwaGEtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX0FSTV9FQUJJX18pICYmIGRlZmluZWQoX19BUk1fUENTX1ZGUCkKKyMgIGlmIGRlZmluZWQoX19BUk1FTF9fKQorICAgICAgICBhcm0tbGludXgtZ251ZWFiaWhmCisjICBlbHNlCisgICAgICAgIGFybWViLWxpbnV4LWdudWVhYmloZgorIyAgZW5kaWYKKyMgZWxpZiBkZWZpbmVkKF9fQVJNX0VBQklfXykgJiYgIWRlZmluZWQoX19BUk1fUENTX1ZGUCkKKyMgIGlmIGRlZmluZWQoX19BUk1FTF9fKQorICAgICAgICBhcm0tbGludXgtZ251ZWFiaQorIyAgZWxzZQorICAgICAgICBhcm1lYi1saW51eC1nbnVlYWJpCisjICBlbmRpZgorIyBlbGlmIGRlZmluZWQoX19ocHBhX18pCisgICAgICAgIGhwcGEtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX2lhNjRfXykKKyAgICAgICAgaWE2NC1saW51eC1nbnUKKyMgZWxpZiBkZWZpbmVkKF9fbTY4a19fKSAmJiAhZGVmaW5lZChfX21jb2xkZmlyZV9fKQorICAgICAgICBtNjhrLWxpbnV4LWdudQorIyBlbGlmIGRlZmluZWQoX19taXBzX2hhcmRfZmxvYXQpICYmIGRlZmluZWQoX01JUFNFTCkKKyMgIGlmIF9NSVBTX1NJTSA9PSBfQUJJTzMyCisgICAgICAgIG1pcHNlbC1saW51eC1nbnUKKyMgIGVsaWYgX01JUFNfU0lNID09IF9BQklOMzIKKyAgICAgICAgbWlwczY0ZWwtbGludXgtZ251YWJpbjMyCisjICBlbGlmIF9NSVBTX1NJTSA9PSBfQUJJNjQKKyAgICAgICAgbWlwczY0ZWwtbGludXgtZ251YWJpNjQKKyMgIGVsc2UKKyMgICBlcnJvciB1bmtub3duIHBsYXRmb3JtIHRyaXBsZXQKKyMgIGVuZGlmCisjIGVsaWYgZGVmaW5lZChfX21pcHNfaGFyZF9mbG9hdCkKKyMgIGlmIF9NSVBTX1NJTSA9PSBfQUJJTzMyCisgICAgICAgIG1pcHMtbGludXgtZ251CisjICBlbGlmIF9NSVBTX1NJTSA9PSBfQUJJTjMyCisgICAgICAgIG1pcHM2NC1saW51eC1nbnVhYmluMzIKKyMgIGVsaWYgX01JUFNfU0lNID09IF9BQkk2NAorICAgICAgICBtaXBzNjQtbGludXgtZ251YWJpNjQKKyMgIGVsc2UKKyMgICBlcnJvciB1bmtub3duIHBsYXRmb3JtIHRyaXBsZXQKKyMgIGVuZGlmCisjIGVsaWYgZGVmaW5lZChfX29yMWtfXykKKyAgICAgICAgb3Ixay1saW51eC1nbnUKKyMgZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSAmJiBkZWZpbmVkKF9fU1BFX18pCisgICAgICAgIHBvd2VycGMtbGludXgtZ251c3BlCisjIGVsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorIyAgaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKKyAgICAgICAgcG93ZXJwYzY0bGUtbGludXgtZ251CisjICBlbHNlCisgICAgICAgIHBvd2VycGM2NC1saW51eC1nbnUKKyMgIGVuZGlmCisjIGVsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKKyAgICAgICAgcG93ZXJwYy1saW51eC1nbnUKKyMgZWxpZiBkZWZpbmVkKF9fczM5MHhfXykKKyAgICAgICAgczM5MHgtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX3MzOTBfXykKKyAgICAgICAgczM5MC1saW51eC1nbnUKKyMgZWxpZiBkZWZpbmVkKF9fc2hfXykgJiYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKKyAgICAgICAgc2g0LWxpbnV4LWdudQorIyBlbGlmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCisgICAgICAgIHNwYXJjNjQtbGludXgtZ251CisjIGVsaWYgZGVmaW5lZChfX3NwYXJjX18pCisgICAgICAgIHNwYXJjLWxpbnV4LWdudQorIyBlbHNlCisjICAgZXJyb3IgdW5rbm93biBwbGF0Zm9ybSB0cmlwbGV0CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykKKyMgaWYgZGVmaW5lZChfX0xQNjRfXykKKyAgICAgICAgeDg2XzY0LWtmcmVlYnNkLWdudQorIyBlbGlmIGRlZmluZWQoX19pMzg2X18pCisgICAgICAgIGkzODYta2ZyZWVic2QtZ251CisjIGVsc2UKKyMgICBlcnJvciB1bmtub3duIHBsYXRmb3JtIHRyaXBsZXQKKyMgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19nbnVfaHVyZF9fKQorICAgICAgICBpMzg2LWdudQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgICAgIGRhcndpbgorI2Vsc2UKKyMgZXJyb3IgdW5rbm93biBwbGF0Zm9ybSB0cmlwbGV0CisjZW5kaWYKKworRU9GCisKK2lmICRDUFAgJENQUEZMQUdTIGNvbmZ0ZXN0LmMgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbDsgdGhlbgorICBQTEFURk9STV9UUklQTEVUPWBncmVwIC12ICdeIycgY29uZnRlc3Qub3V0IHwgZ3JlcCAtdiAnXiAqJCcgfCB0ciAtZCAnIAknYAorICBBQ19NU0dfUkVTVUxUKFskUExBVEZPUk1fVFJJUExFVF0pCitlbHNlCisgIEFDX01TR19SRVNVTFQoW25vbmVdKQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3Qub3V0CisKK2lmIHRlc3QgeCRQTEFURk9STV9UUklQTEVUICE9IHggJiYgdGVzdCB4JE1VTFRJQVJDSCAhPSB4OyB0aGVuCisgIGlmIHRlc3QgeCRQTEFURk9STV9UUklQTEVUICE9IHgkTVVMVElBUkNIOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtpbnRlcm5hbCBjb25maWd1cmUgZXJyb3IgZm9yIHRoZSBwbGF0Zm9ybSB0cmlwbGV0LCBwbGVhc2UgZmlsZSBhIGJ1ZyByZXBvcnRdKQorICBmaQorZmkKK1BMQVRESVI9cGxhdC0kTUFDSERFUAorQUNfU1VCU1QoUExBVERJUikKK0FDX1NVQlNUKFBMQVRGT1JNX1RSSVBMRVQpCisKKwogQUNfTVNHX0NIRUNLSU5HKFtmb3IgLVdsLC0tbm8tYXMtbmVlZGVkXSkKIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCiBMREZMQUdTPSIkTERGTEFHUyAtV2wsLS1uby1hcy1uZWVkZWQiCkBAIC03OTEsMTAgKzk1NSw2IEBACiAgICAgZXNhYzs7CiBlc2FjCiAKLU1VTFRJQVJDSD0kKCRDQyAtLXByaW50LW11bHRpYXJjaCAyPi9kZXYvbnVsbCkKLUFDX1NVQlNUKE1VTFRJQVJDSCkKLQotCiBBQ19TVUJTVChMSUJSQVJZKQogQUNfTVNHX0NIRUNLSU5HKExJQlJBUlkpCiBpZiB0ZXN0IC16ICIkTElCUkFSWSIKQEAgLTgxMSw3ICs5NzEsNyBAQAogIyBzeXN0ZW1zIHdpdGhvdXQgc2hhcmVkIGxpYnJhcmllcywgTERMSUJSQVJZIGlzIHRoZSBzYW1lIGFzIExJQlJBUlkKICMgKGRlZmluZWQgaW4gdGhlIE1ha2VmaWxlcykuIE9uIEN5Z3dpbiBMRExJQlJBUlkgaXMgdGhlIGltcG9ydCBsaWJyYXJ5LAogIyBETExMSUJSQVJZIGlzIHRoZSBzaGFyZWQgKGkuZS4sIERMTCkgbGlicmFyeS4KLSMgCisjCiAjIFJVTlNIQVJFRCBpcyB1c2VkIHRvIHJ1biBzaGFyZWQgcHl0aG9uIHdpdGhvdXQgaW5zdGFsbGVkIGxpYnJhcmllcwogIwogIyBJTlNUU09OQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB0aGF0IHdpbGwgYmUgdXNlIHRvIGluc3RhbGwKQEAgLTgzOSw3ICs5OTksNyBAQAogIyBJZiBDWFggaXMgc2V0LCBhbmQgaWYgaXQgaXMgbmVlZGVkIHRvIGxpbmsgYSBtYWluIGZ1bmN0aW9uIHRoYXQgd2FzCiAjIGNvbXBpbGVkIHdpdGggQ1hYLCBMSU5LQ0MgaXMgQ1hYIGluc3RlYWQuIEFsd2F5cyB1c2luZyBDWFggaXMgdW5kZXNpcmFibGU6CiAjIHB5dGhvbiBtaWdodCB0aGVuIGRlcGVuZCBvbiB0aGUgQysrIHJ1bnRpbWUKLSMgVGhpcyBpcyBhbHRlcmVkIGZvciBBSVggaW4gb3JkZXIgdG8gYnVpbGQgdGhlIGV4cG9ydCBsaXN0IGJlZm9yZSAKKyMgVGhpcyBpcyBhbHRlcmVkIGZvciBBSVggaW4gb3JkZXIgdG8gYnVpbGQgdGhlIGV4cG9ydCBsaXN0IGJlZm9yZQogIyBsaW5raW5nLgogQUNfU1VCU1QoTElOS0NDKQogQUNfTVNHX0NIRUNLSU5HKExJTktDQykKQEAgLTg5Myw3ICsxMDUzLDcgQEAKICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZF0sIFtkaXNhYmxlL2VuYWJsZSBidWlsZGluZyBzaGFyZWQgcHl0aG9uIGxpYnJhcnldKSkKIAogaWYgdGVzdCAteiAiJGVuYWJsZV9zaGFyZWQiCi10aGVuIAordGhlbgogICBjYXNlICRhY19zeXNfc3lzdGVtIGluCiAgIENZR1dJTiopCiAgICAgZW5hYmxlX3NoYXJlZD0ieWVzIjs7CkBAIC05MzgsNyArMTA5OCw3IEBACiAgIEJMRExJQlJBUlk9JycKIGVsc2UKICAgQkxETElCUkFSWT0nJChMRExJQlJBUlkpJwotZmkgIAorZmkKIAogIyBPdGhlciBwbGF0Zm9ybXMgZm9sbG93CiBpZiB0ZXN0ICRlbmFibGVfc2hhcmVkID0gInllcyI7IHRoZW4KQEAgLTk2MywxMSArMTEyMyw2IEBACiAJICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKIAkgIEJMRExJQlJBUlk9Jy1MLiAtbHB5dGhvbiQoTERWRVJTSU9OKScKIAkgIFJVTlNIQVJFRD1MRF9MSUJSQVJZX1BBVEg9YHB3ZGAke0xEX0xJQlJBUllfUEFUSDorOiR7TERfTElCUkFSWV9QQVRIfX0KLQkgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KLQkgICAgICBGcmVlQlNEKikKLQkJU09WRVJTSU9OPWBlY2hvICRTT1ZFUlNJT058Y3V0IC1kICIuIiAtZiAxYAotCQk7OwotCSAgZXNhYwogCSAgSU5TVFNPTkFNRT0iJExETElCUkFSWSIuJFNPVkVSU0lPTgogCSAgaWYgdGVzdCAiJHdpdGhfcHlkZWJ1ZyIgIT0geWVzCiAgICAgICAgICAgdGhlbgpAQCAtMTAzNCwxNCArMTE4OSw2IEBACiBmaQogQUNfU1VCU1QoUkVBREVMRikKIAotQUNfU1VCU1QoQVNETEdFTikKLUFDX0NIRUNLX1BST0dTKFBZVEhPTiwgcHl0aG9uJFBBQ0tBR0VfVkVSU0lPTiBweXRob24zIHB5dGhvbiwgbm90LWZvdW5kKQotaWYgdGVzdCAiJFBZVEhPTiIgPSBub3QtZm91bmQ7IHRoZW4KLSAgICBBU0RMR0VOPSJAZWNobyBweXRob246ICRQWVRIT04hIGNhbm5vdCBydW4gXCQoc3JjZGlyKS9QYXJzZXIvYXNkbF9jLnB5ICMiCi1lbHNlCi0gICAgQVNETEdFTj0iJFBZVEhPTiIKLWZpCi0KIAogY2FzZSAkTUFDSERFUCBpbgogYnNkb3MqfGhwKnxIUCopCkBAIC0xMDY5LDIwICsxMjE2LDEwMiBAQAogCiAjIENoZWNrIGZvciAtLXdpdGgtcHlkZWJ1ZwogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtcHlkZWJ1ZykKLUFDX0FSR19XSVRIKHB5ZGVidWcsIAorQUNfQVJHX1dJVEgocHlkZWJ1ZywKICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcHlkZWJ1Z10sIFtidWlsZCB3aXRoIFB5X0RFQlVHIGRlZmluZWRdKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiAhPSBubwotdGhlbiAKLSAgQUNfREVGSU5FKFB5X0RFQlVHLCAxLCAKLSAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byBidWlsZCBhbiBpbnRlcnByZXRlciB3aXRoIG1hbnkgcnVuLXRpbWUgY2hlY2tzLl0pIAotICBBQ19NU0dfUkVTVUxUKHllcyk7IAordGhlbgorICBBQ19ERUZJTkUoUHlfREVCVUcsIDEsCisgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4gaW50ZXJwcmV0ZXIgd2l0aCBtYW55IHJ1bi10aW1lIGNoZWNrcy5dKQorICBBQ19NU0dfUkVTVUxUKHllcyk7CiAgIFB5X0RFQlVHPSd0cnVlJwogICBBQklGTEFHUz0iJHtBQklGTEFHU31kIgogZWxzZSBBQ19NU0dfUkVTVUxUKG5vKTsgUHlfREVCVUc9J2ZhbHNlJwogZmldLAogW0FDX01TR19SRVNVTFQobm8pXSkKIAorIyBFbmFibGUgTFRPIGZsYWdzCitBQ19TVUJTVChMVE9GTEFHUykKK0FDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWx0bykKK0FDX0FSR19XSVRIKGx0bywgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1sdG9dLCBbRW5hYmxlIExpbmsgVGltZSBPcHRpbWl6YXRpb24gaW4gUEdPIGJ1aWxkcy4gRGlzYWJsZWQgYnkgZGVmYXVsdC5dKSwKK1sKK2lmIHRlc3QgIiR3aXRodmFsIiAhPSBubwordGhlbgorICBQeV9MVE89J3RydWUnCisgIEFDX01TR19SRVNVTFQoeWVzKTsKK2Vsc2UKKyAgUHlfTFRPPSdmYWxzZScKKyAgQUNfTVNHX1JFU1VMVChubyk7CitmaV0sCitbQUNfTVNHX1JFU1VMVChubyldKQoraWYgdGVzdCAiJFB5X0xUTyIgPSAndHJ1ZScgOyB0aGVuCisgIGNhc2UgJENDIGluCisgICAgKmNsYW5nKikKKyAgICAgICMgQW55IGNoYW5nZXMgbWFkZSBoZXJlIHNob3VsZCBiZSByZWZsZWN0ZWQgaW4gdGhlIEdDQytEYXJ3aW4gY2FzZSBiZWxvdworICAgICAgTFRPRkxBR1M9Ii1mbHRvIgorICAgICAgOzsKKyAgICAqZ2NjKikKKyAgICAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KKyAgICAgICAgRGFyd2luKikKKyAgICAgICAgICBMVE9GTEFHUz0iLWZsdG8iCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBMVE9GTEFHUz0iLWZsdG8gLWZ1c2UtbGlua2VyLXBsdWdpbiAtZmZhdC1sdG8tb2JqZWN0cyAtZmx0by1wYXJ0aXRpb249bm9uZSIKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgZXNhYworZmkKKworIyBFbmFibGUgUEdPIGZsYWdzLgorQUNfU1VCU1QoUEdPX1BST0ZfR0VOX0ZMQUcpCitBQ19TVUJTVChQR09fUFJPRl9VU0VfRkxBRykKK0FDX1NVQlNUKExMVk1fUFJPRl9NRVJHRVIpCitBQ19TVUJTVChMTFZNX1BST0ZfRklMRSkKK0FDX1NVQlNUKExMVk1fUFJPRl9FUlIpCitBQ19TVUJTVChMTFZNX1BST0ZfRk9VTkQpCitBQ19DSEVDS19QUk9HKExMVk1fUFJPRl9GT1VORCwgbGx2bS1wcm9mZGF0YSwgZm91bmQsIG5vdC1mb3VuZCkKK0xMVk1fUFJPRl9FUlI9bm8KK2Nhc2UgJENDIGluCisgICpjbGFuZyopCisgICAgIyBBbnkgY2hhbmdlcyBtYWRlIGhlcmUgc2hvdWxkIGJlIHJlZmxlY3RlZCBpbiB0aGUgR0NDK0RhcndpbiBjYXNlIGJlbG93CisgICAgUEdPX1BST0ZfR0VOX0ZMQUc9Ii1mcHJvZmlsZS1pbnN0ci1nZW5lcmF0ZSIKKyAgICBQR09fUFJPRl9VU0VfRkxBRz0iLWZwcm9maWxlLWluc3RyLXVzZT1jb2RlLnByb2ZjbGFuZ2QiCisgICAgTExWTV9QUk9GX01FUkdFUj0ibGx2bS1wcm9mZGF0YSBtZXJnZSAtb3V0cHV0PWNvZGUucHJvZmNsYW5nZCAqLnByb2ZjbGFuZ3IiCisgICAgTExWTV9QUk9GX0ZJTEU9IkxMVk1fUFJPRklMRV9GSUxFPVwiY29kZS0lcC5wcm9mY2xhbmdyXCIiCisgICAgaWYgdGVzdCAkTExWTV9QUk9GX0ZPVU5EID0gbm90LWZvdW5kCisgICAgdGhlbgorICAgICAgTExWTV9QUk9GX0VSUj15ZXMKKyAgICBmaQorICAgIDs7CisgICpnY2MqKQorICAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KKyAgICAgIERhcndpbiopCisgICAgICAgIFBHT19QUk9GX0dFTl9GTEFHPSItZnByb2ZpbGUtaW5zdHItZ2VuZXJhdGUiCisgICAgICAgIFBHT19QUk9GX1VTRV9GTEFHPSItZnByb2ZpbGUtaW5zdHItdXNlPWNvZGUucHJvZmNsYW5nZCIKKyAgICAgICAgTExWTV9QUk9GX01FUkdFUj0ibGx2bS1wcm9mZGF0YSBtZXJnZSAtb3V0cHV0PWNvZGUucHJvZmNsYW5nZCAqLnByb2ZjbGFuZ3IiCisgICAgICAgIExMVk1fUFJPRl9GSUxFPSJMTFZNX1BST0ZJTEVfRklMRT1cImNvZGUtJXAucHJvZmNsYW5nclwiIgorICAgICAgICBpZiB0ZXN0ICRMTFZNX1BST0ZfRk9VTkQgPSBub3QtZm91bmQKKyAgICAgICAgdGhlbgorICAgICAgICAgIExMVk1fUFJPRl9FUlI9eWVzCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBQR09fUFJPRl9HRU5fRkxBRz0iLWZwcm9maWxlLWdlbmVyYXRlIgorICAgICAgICBQR09fUFJPRl9VU0VfRkxBRz0iLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKKyAgICAgICAgTExWTV9QUk9GX01FUkdFUj0idHJ1ZSIKKyAgICAgICAgTExWTV9QUk9GX0ZJTEU9IiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKmljYyopCisgICAgUEdPX1BST0ZfR0VOX0ZMQUc9Ii1wcm9mLWdlbiIKKyAgICBQR09fUFJPRl9VU0VfRkxBRz0iLXByb2YtdXNlIgorICAgIExMVk1fUFJPRl9NRVJHRVI9InRydWUiCisgICAgTExWTV9QUk9GX0ZJTEU9IiIKKyAgICA7OworZXNhYworCiAjIFhYWCBTaG91bGRuJ3QgdGhlIGNvZGUgYWJvdmUgdGhhdCBmaWRkbGVzIHdpdGggQkFTRUNGTEFHUyBhbmQgT1BUIGJlCiAjIG1lcmdlZCB3aXRoIHRoaXMgY2h1bmsgb2YgY29kZT8KIApAQCAtMTE5Miw2ICsxNDIxLDEzIEBACiAgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtZm5vLXN0cmljdC1hbGlhc2luZyIKICAgICBmaQogCisgICAgIyBJQ0MgZG9lc24ndCByZWNvZ25pemUgdGhlIG9wdGlvbiwgYnV0IG9ubHkgZW1pdHMgYSB3YXJuaW5nCisgICAgIyMgWFhYIGRvZXMgaXQgZW1pdCBhbiB1bnVzZWQgcmVzdWx0IHdhcm5pbmcgYW5kIGNhbiBpdCBiZSBkaXNhYmxlZD8KKyAgICBjYXNlICIkQ0MiIGluCisgICAgKmljYyopCisgICAgYWNfY3ZfZGlzYWJsZV91bnVzZWRfcmVzdWx0X3dhcm5pbmc9bm8KKyAgICA7OworICAgICopCiAgICAgQUNfTVNHX0NIRUNLSU5HKGlmIHdlIGNhbiB0dXJuIG9mZiAkQ0MgdW51c2VkIHJlc3VsdCB3YXJuaW5nKQogICAgICBhY19zYXZlX2NjPSIkQ0MiCiAgICAgIENDPSIkQ0MgLVd1bnVzZWQtcmVzdWx0IC1XZXJyb3IiCkBAIC0xMjA4LDYgKzE0NDQsOCBAQAogICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKICAgICAgQ0M9IiRhY19zYXZlX2NjIgogICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2Rpc2FibGVfdW51c2VkX3Jlc3VsdF93YXJuaW5nKQorICAgIDs7CisgICAgZXNhYwogCiAgICAgaWYgdGVzdCAkYWNfY3ZfZGlzYWJsZV91bnVzZWRfcmVzdWx0X3dhcm5pbmcgPSB5ZXMKICAgICB0aGVuCkBAIC0xMjM2LDYgKzE0NzQsNjEgQEAKICAgICAgIENGTEFHU19OT0RJU1Q9IiRDRkxBR1NfTk9ESVNUIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgogICAgIGZpCiAKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIHR1cm4gb24gJENDIG1peGVkIHNpZ24gY29tcGFyaXNvbiB3YXJuaW5nKQorICAgICBhY19zYXZlX2NjPSIkQ0MiCisgICAgIENDPSIkQ0MgLVdzaWduLWNvbXBhcmUiCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfZW5hYmxlX3NpZ25fY29tcGFyZV93YXJuaW5nLAorICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgWworCSAgIEFDX0xBTkdfUFJPR1JBTShbW11dLCBbW11dKQorCSBdLFsKKyAgICAgICAgICAgYWNfY3ZfZW5hYmxlX3NpZ25fY29tcGFyZV93YXJuaW5nPXllcworCSBdLFsKKyAgICAgICAgICAgYWNfY3ZfZW5hYmxlX3NpZ25fY29tcGFyZV93YXJuaW5nPW5vCisJIF0pKQorICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgQ0M9IiRhY19zYXZlX2NjIgorICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2VuYWJsZV9zaWduX2NvbXBhcmVfd2FybmluZykKKworICAgIGlmIHRlc3QgJGFjX2N2X2VuYWJsZV9zaWduX2NvbXBhcmVfd2FybmluZyA9IHllcworICAgIHRoZW4KKyAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1Xc2lnbi1jb21wYXJlIgorICAgIGZpCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgd2UgY2FuIHR1cm4gb24gJENDIHVucmVhY2hhYmxlIGNvZGUgd2FybmluZykKKyAgICAgYWNfc2F2ZV9jYz0iJENDIgorICAgICBDQz0iJENDIC1XdW5yZWFjaGFibGUtY29kZSIKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9lbmFibGVfdW5yZWFjaGFibGVfY29kZV93YXJuaW5nLAorICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgWworCSAgIEFDX0xBTkdfUFJPR1JBTShbW11dLCBbW11dKQorCSBdLFsKKyAgICAgICAgICAgYWNfY3ZfZW5hYmxlX3VucmVhY2hhYmxlX2NvZGVfd2FybmluZz15ZXMKKwkgXSxbCisgICAgICAgICAgIGFjX2N2X2VuYWJsZV91bnJlYWNoYWJsZV9jb2RlX3dhcm5pbmc9bm8KKwkgXSkpCisgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICBDQz0iJGFjX3NhdmVfY2MiCisKKyAgICAjIERvbid0IGVuYWJsZSB1bnJlYWNoYWJsZSBjb2RlIHdhcm5pbmcgaW4gZGVidWcgbW9kZSwgc2luY2UgaXQgdXN1YWxseQorICAgICMgcmVzdWx0cyBpbiBub24tc3RhbmRhcmQgY29kZSBwYXRocy4KKyAgICAjIElzc3VlICMyNDMyNDogVW5mb3J0dW5hdGVseSwgdGhlIHVucmVhY2hhYmxlIGNvZGUgd2FybmluZyBkb2VzIG5vdCB3b3JrCisgICAgIyBjb3JyZWN0bHkgb24gZ2NjIGFuZCBoYXMgYmVlbiBzaWxlbnRseSByZW1vdmVkIGZyb20gdGhlIGNvbXBpbGVyLgorICAgICMgSXQgaXMgc3VwcG9ydGVkIG9uIGNsYW5nIGJ1dCBvbiBPUyBYIHN5c3RlbXMgZ2NjIG1heSBiZSBhbiBhbGlhcworICAgICMgZm9yIGNsYW5nLiAgVHJ5IHRvIGRldGVybWluZSBpZiB0aGUgY29tcGlsZXIgaXMgbm90IHJlYWxseSBnY2MgYW5kLAorICAgICMgaWYgc28sIG9ubHkgdGhlbiBlbmFibGUgdGhlIHdhcm5pbmcuCisgICAgaWYgdGVzdCAkYWNfY3ZfZW5hYmxlX3VucmVhY2hhYmxlX2NvZGVfd2FybmluZyA9IHllcyAmJiBcCisgICAgICAgIHRlc3QgIiRQeV9ERUJVRyIgIT0gInRydWUiICYmIFwKKyAgICAgICAgdGVzdCAteiAiYCRDQyAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwICdGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24nYCIKKyAgICB0aGVuCisgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV3VucmVhY2hhYmxlLWNvZGUiCisgICAgZWxzZQorICAgICAgYWNfY3ZfZW5hYmxlX3VucmVhY2hhYmxlX2NvZGVfd2FybmluZz1ubworICAgIGZpCisgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZW5hYmxlX3VucmVhY2hhYmxlX2NvZGVfd2FybmluZykKKwogICAgICMgaWYgdXNpbmcgZ2NjIG9uIGFscGhhLCB1c2UgLW1pZWVlIHRvIGdldCAobmVhcikgZnVsbCBJRUVFIDc1NAogICAgICMgc3VwcG9ydC4gIFdpdGhvdXQgdGhpcywgdHJlYXRtZW50IG9mIHN1Ym5vcm1hbHMgZG9lc24ndCBmb2xsb3cKICAgICAjIHRoZSBzdGFuZGFyZC4KQEAgLTEzODQsNiArMTY3NywxMyBAQAogICAgIDs7CiBlc2FjCiAKKyMgSUNDIG5lZWRzIC1mcC1tb2RlbCBzdHJpY3Qgb3IgZmxvYXRzIGJlaGF2ZSBiYWRseQorY2FzZSAiJENDIiBpbgorKmljYyopCisgICAgQ0ZMQUdTX05PRElTVD0iJENGTEFHU19OT0RJU1QgLWZwLW1vZGVsIHN0cmljdCIKKyAgICA7OworZXNhYworCiBpZiB0ZXN0ICIkUHlfREVCVUciID0gJ3RydWUnOyB0aGVuCiAgIDoKIGVsc2UKQEAgLTE0MjQsNyArMTcyNCw3IEBACiBBQ19NU0dfUkVTVUxUKCRhY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQpCiAKIAotaWYgdGVzdCAkYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0ID0geWVzIAoraWYgdGVzdCAkYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0ID0geWVzCiB0aGVuCiAgIGFjX2N2X2twdGhyZWFkPW5vCiBlbHNlCkBAIC0xNTIzLDE0ICsxODIzLDE0IEBACiAKIGlmIHRlc3QgIiRhY19jdl9rcHRocmVhZCIgPSAieWVzIgogdGhlbgotICBDWFg9IiRDWFggLUtwdGhyZWFkIiAgCisgIENYWD0iJENYWCAtS3B0aHJlYWQiCiAgIGFjX2N2X2N4eF90aHJlYWQ9eWVzCiBlbGlmIHRlc3QgIiRhY19jdl9rdGhyZWFkIiA9ICJ5ZXMiCiB0aGVuCiAgIENYWD0iJENYWCAtS3RocmVhZCIKICAgYWNfY3ZfY3h4X3RocmVhZD15ZXMKIGVsaWYgdGVzdCAiJGFjX2N2X3B0aHJlYWQiID0gInllcyIKLXRoZW4gCit0aGVuCiAgIENYWD0iJENYWCAtcHRocmVhZCIKICAgYWNfY3ZfY3h4X3RocmVhZD15ZXMKIGZpCkBAIC0xNTc1LDcgKzE4NzUsNyBAQAogc3lzL3N0YXQuaCBzeXMvc3lzY2FsbC5oIHN5cy9zeXNfZG9tYWluLmggc3lzL3Rlcm1pby5oIHN5cy90aW1lLmggXAogc3lzL3RpbWVzLmggc3lzL3R5cGVzLmggc3lzL3Vpby5oIHN5cy91bi5oIHN5cy91dHNuYW1lLmggc3lzL3dhaXQuaCBwdHkuaCBcCiBsaWJ1dGlsLmggc3lzL3Jlc291cmNlLmggbmV0cGFja2V0L3BhY2tldC5oIHN5c2V4aXRzLmggYmx1ZXRvb3RoLmggXAotYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCBhbGxvY2EuaCBlbmRpYW4uaCBcCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIGxpbnV4L3JhbmRvbS5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKIHN5cy9lbmRpYW4uaCkKIEFDX0hFQURFUl9ESVJFTlQKIEFDX0hFQURFUl9NQUpPUgpAQCAtMTY3OCwxMSArMTk3OCwxMSBAQAogIyBUaGVzZSBtYXkgYWZmZWN0IHNvbWUgdHlwZWRlZnMKIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiBBSVgqKQotICAgIEFDX0RFRklORShfTEFSR0VfRklMRVMsIDEsIAorICAgIEFDX0RFRklORShfTEFSR0VfRklMRVMsIDEsCiAgICAgW1RoaXMgbXVzdCBiZSBkZWZpbmVkIG9uIEFJWCBzeXN0ZW1zIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQuXSkKICAgICA7OwogZXNhYwotQUNfREVGSU5FKF9MQVJHRUZJTEVfU09VUkNFLCAxLCAKK0FDX0RFRklORShfTEFSR0VGSUxFX1NPVVJDRSwgMSwKIFtUaGlzIG11c3QgYmUgZGVmaW5lZCBvbiBzb21lIHN5c3RlbXMgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydC5dKQogQUNfREVGSU5FKF9GSUxFX09GRlNFVF9CSVRTLCA2NCwKIFtUaGlzIG11c3QgYmUgc2V0IHRvIDY0IG9uIHNvbWUgc3lzdGVtcyB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0Ll0pCkBAIC0xNzQ2LDcgKzIwNDYsNyBAQAogQUNfTVNHX0NIRUNLSU5HKGZvciBsb25nIGxvbmcgc3VwcG9ydCkKIGhhdmVfbG9uZ19sb25nPW5vCiBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbbG9uZyBsb25nIHg7IHggPSAobG9uZyBsb25nKTA7XV0pXSxbCi0gIEFDX0RFRklORShIQVZFX0xPTkdfTE9ORywgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSB0eXBlIGxvbmcgbG9uZy5dKSAKKyAgQUNfREVGSU5FKEhBVkVfTE9OR19MT05HLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBsb25nLl0pCiAgIGhhdmVfbG9uZ19sb25nPXllcwogXSxbXSkKIEFDX01TR19SRVNVTFQoJGhhdmVfbG9uZ19sb25nKQpAQCAtMTc1Nyw3ICsyMDU3LDcgQEAKIEFDX01TR19DSEVDS0lORyhmb3IgbG9uZyBkb3VibGUgc3VwcG9ydCkKIGhhdmVfbG9uZ19kb3VibGU9bm8KIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tsb25nIGRvdWJsZSB4OyB4ID0gKGxvbmcgZG91YmxlKTA7XV0pXSxbCi0gIEFDX0RFRklORShIQVZFX0xPTkdfRE9VQkxFLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBkb3VibGUuXSkgCisgIEFDX0RFRklORShIQVZFX0xPTkdfRE9VQkxFLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBkb3VibGUuXSkKICAgaGF2ZV9sb25nX2RvdWJsZT15ZXMKIF0sW10pCiBBQ19NU0dfUkVTVUxUKCRoYXZlX2xvbmdfZG91YmxlKQpAQCAtMTc2OSw3ICsyMDY5LDcgQEAKIEFDX01TR19DSEVDS0lORyhmb3IgX0Jvb2wgc3VwcG9ydCkKIGhhdmVfYzk5X2Jvb2w9bm8KIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tfQm9vbCB4OyB4ID0gKF9Cb29sKTA7XV0pXSxbCi0gIEFDX0RFRklORShIQVZFX0M5OV9CT09MLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgX0Jvb2wuXSkgCisgIEFDX0RFRklORShIQVZFX0M5OV9CT09MLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgX0Jvb2wuXSkKICAgaGF2ZV9jOTlfYm9vbD15ZXMKIF0sW10pCiBBQ19NU0dfUkVTVUxUKCRoYXZlX2M5OV9ib29sKQpAQCAtMTc3Nyw4ICsyMDc3LDggQEAKIEFDX0NIRUNLX1NJWkVPRihfQm9vbCwgMSkKIGZpCiAKLUFDX0NIRUNLX1RZUEVTKHVpbnRwdHJfdCwgCi0gICBbQUNfQ0hFQ0tfU0laRU9GKHVpbnRwdHJfdCwgNCldLCAKK0FDX0NIRUNLX1RZUEVTKHVpbnRwdHJfdCwKKyAgIFtBQ19DSEVDS19TSVpFT0YodWludHB0cl90LCA0KV0sCiAgICBbXSwgWyNpZmRlZiBIQVZFX1NURElOVF9ICiAgICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD4KICAgICAgICAgI2VuZGlmCkBAIC0xNzk3LDcgKzIwOTcsNyBAQAogdGhlbgogaWYgdGVzdCAiJGFjX2N2X3NpemVvZl9vZmZfdCIgLWd0ICIkYWNfY3Zfc2l6ZW9mX2xvbmciIC1hIFwKIAkiJGFjX2N2X3NpemVvZl9sb25nX2xvbmciIC1nZSAiJGFjX2N2X3NpemVvZl9vZmZfdCI7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQsIDEsIAorICBBQ19ERUZJTkUoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCwgMSwKICAgW0RlZmluZWQgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydCB3aGVuIGFuIG9mZl90IGlzIGJpZ2dlciB0aGFuIGEgbG9uZwogICAgYW5kIGxvbmcgbG9uZyBpcyBhdmFpbGFibGUgYW5kIGF0IGxlYXN0IGFzIGJpZyBhcyBhbiBvZmZfdC4gWW91IG1heSBuZWVkCiAgICB0byBhZGQgc29tZSBmbGFncyBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29tcGlsYXRpb24gdG8gZW5hYmxlIHRoaXMgbW9kZS4KQEAgLTE4NDYsNyArMjE0Niw3IEBACiAKIEFDX1NVQlNUKE9USEVSX0xJQlRPT0xfT1BUKQogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KLSAgRGFyd2luL0A8OkAwMTU2N0A6PkBcLi4qKSAKKyAgRGFyd2luL0A8OkAwMTU2N0A6PkBcLi4qKQogICAgIE9USEVSX0xJQlRPT0xfT1BUPSItcHJlYmluZCAtc2VnMWFkZHIgMHgxMDAwMDAwMCIKICAgICA7OwogICBEYXJ3aW4vKikKQEAgLTE4NTcsNyArMjE1Nyw3IEBACiAKIEFDX1NVQlNUKExJQlRPT0xfQ1JVRlQpCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgotICBEYXJ3aW4vQDw6QDAxNTY3QDo+QFwuLiopIAorICBEYXJ3aW4vQDw6QDAxNTY3QDo+QFwuLiopCiAgICAgTElCVE9PTF9DUlVGVD0iLWZyYW1ld29yayBTeXN0ZW0gLWxjY19keW5hbWljIgogICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCiAJICAgIDoKQEAgLTE4NzEsNyArMjE3MSw3IEBACiAgICAgaWYgdGVzdCAke2djY192ZXJzaW9ufSAnPCcgNC4wCiAgICAgICAgIHRoZW4KICAgICAgICAgICAgIExJQlRPT0xfQ1JVRlQ9Ii1sY2NfZHluYW1pYyIKLSAgICAgICAgZWxzZSAKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgTElCVE9PTF9DUlVGVD0iIgogICAgIGZpCiAgICAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKQEAgLTE4ODUsMTQgKzIxODUsMTQgQEAKICAgICAgIH0KICAgICB9CiAgICAgXV0pXSxbYWNfb3N4XzMyYml0PXllc10sW2FjX29zeF8zMmJpdD1ub10sW2FjX29zeF8zMmJpdD15ZXNdKQotICAgIAorCiAgICAgaWYgdGVzdCAiJHthY19vc3hfMzJiaXR9IiA9ICJ5ZXMiOyB0aGVuCiAgICAgCWNhc2UgYC91c3IvYmluL2FyY2hgIGluCi0gICAgCWkzODYpIAotICAgIAkJTUFDT1NYX0RFRkFVTFRfQVJDSD0iaTM4NiIgCisgICAgCWkzODYpCisgICAgCQlNQUNPU1hfREVGQVVMVF9BUkNIPSJpMzg2IgogICAgIAkJOzsKLSAgICAJcHBjKSAKLSAgICAJCU1BQ09TWF9ERUZBVUxUX0FSQ0g9InBwYyIgCisgICAgCXBwYykKKyAgICAJCU1BQ09TWF9ERUZBVUxUX0FSQ0g9InBwYyIKICAgICAJCTs7CiAgICAgCSopCiAgICAgCQlBQ19NU0dfRVJST1IoW1VuZXhwZWN0ZWQgb3V0cHV0IG9mICdhcmNoJyBvbiBPU1hdKQpAQCAtMTkwMCwxMSArMjIwMCwxMSBAQAogICAgIAllc2FjCiAgICAgZWxzZQogICAgIAljYXNlIGAvdXNyL2Jpbi9hcmNoYCBpbgotICAgIAlpMzg2KSAKLSAgICAJCU1BQ09TWF9ERUZBVUxUX0FSQ0g9Ing4Nl82NCIgCisgICAgCWkzODYpCisgICAgCQlNQUNPU1hfREVGQVVMVF9BUkNIPSJ4ODZfNjQiCiAgICAgCQk7OwotICAgIAlwcGMpIAotICAgIAkJTUFDT1NYX0RFRkFVTFRfQVJDSD0icHBjNjQiIAorICAgIAlwcGMpCisgICAgCQlNQUNPU1hfREVGQVVMVF9BUkNIPSJwcGM2NCIKICAgICAJCTs7CiAgICAgCSopCiAgICAgCQlBQ19NU0dfRVJST1IoW1VuZXhwZWN0ZWQgb3V0cHV0IG9mICdhcmNoJyBvbiBPU1hdKQpAQCAtMTkyMSw5ICsyMjIxLDkgQEAKIGlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogdGhlbgogCUJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1mbm8tY29tbW9uIC1keW5hbWljIgotCSMgLUYuIGlzIG5lZWRlZCB0byBhbGxvdyBsaW5raW5nIHRvIHRoZSBmcmFtZXdvcmsgd2hpbGUgCisJIyAtRi4gaXMgbmVlZGVkIHRvIGFsbG93IGxpbmtpbmcgdG8gdGhlIGZyYW1ld29yayB3aGlsZQogCSMgaW4gdGhlIGJ1aWxkIGxvY2F0aW9uLgotCUFDX0RFRklORShXSVRIX05FWFRfRlJBTUVXT1JLLCAxLCAKKwlBQ19ERUZJTkUoV0lUSF9ORVhUX0ZSQU1FV09SSywgMSwKICAgICAgICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gcHJvZHVjZSBhbiBPcGVuU3RlcC9SaGFwc29keSBmcmFtZXdvcmsKICAgICAgICAgIChzaGFyZWQgbGlicmFyeSBwbHVzIGFjY2Vzc29yeSBmaWxlcykuXSkKIAlBQ19NU0dfUkVTVUxUKHllcykKQEAgLTE5MzgsNyArMjIzOCw3IEBACiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGR5bGQpCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vKikKLSAgCUFDX0RFRklORShXSVRIX0RZTEQsIDEsIAorICAJQUNfREVGSU5FKFdJVEhfRFlMRCwgMSwKICAgICAgICAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIG5ldy1zdHlsZSAoT3BlbnN0ZXAsIFJoYXBzb2R5LCBNYWNPUykKICAgICAgICAgIGR5bmFtaWMgbGlua2VyIChkeWxkKSBpbnN0ZWFkIG9mIHRoZSBvbGQtc3R5bGUgKE5leHRTdGVwKSBkeW5hbWljCiAgICAgICAgICBsaW5rZXIgKHJsZCkuIER5bGQgaXMgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgZnJhbWV3b3Jrcy5dKQpAQCAtMTk4OCw3ICsyMjg4LDcgQEAKIAkJOzsKIAlJUklYLzUqKSBMRFNIQVJFRD0ibGQgLXNoYXJlZCI7OwogCUlSSVgqLzYqKSBMRFNIQVJFRD0ibGQgJHtTR0lfQUJJfSAtc2hhcmVkIC1hbGwiOzsKLQlTdW5PUy81KikgCisJU3VuT1MvNSopCiAJCWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCiAJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKIAkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKQEAgLTIxNjQsNyArMjQ2NCw3IEBACiAJQlNEL09TLzQqKSBMSU5LRk9SU0hBUkVEPSItWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMiOzsKIAlMaW51eCp8R05VKikgTElOS0ZPUlNIQVJFRD0iLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljIjs7CiAJIyAtdSBsaWJzeXNfcyBwdWxscyBpbiBhbGwgc3ltYm9scyBpbiBsaWJzeXMKLQlEYXJ3aW4vKikgCisJRGFyd2luLyopCiAJCUxJTktGT1JTSEFSRUQ9IiRleHRyYV91bmRlZnMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKIAogCQkjIElzc3VlICMxODA3NTogdGhlIGRlZmF1bHQgbWF4aW11bSBzdGFjayBzaXplICg4TUJ5dGVzKSBpcyB0b28KQEAgLTIxODAsNyArMjQ4MCw3IEBACiAJT3BlblVOSVgqfFVuaXhXYXJlKikgTElOS0ZPUlNIQVJFRD0iLVdsLC1CZXhwb3J0Ijs7CiAJU0NPX1NWKikgTElOS0ZPUlNIQVJFRD0iLVdsLC1CZXhwb3J0Ijs7CiAJUmVsaWFudFVOSVgqKSBMSU5LRk9SU0hBUkVEPSItVzEgLUJsYXJnZWR5bnN5bSI7OwotCUZyZWVCU0QqfE5ldEJTRCp8T3BlbkJTRCp8RHJhZ29uRmx5KikgCisJRnJlZUJTRCp8TmV0QlNEKnxPcGVuQlNEKnxEcmFnb25GbHkqKQogCQlpZiBbWyAiYCRDQyAtZE0gLUUgLSA8L2Rldi9udWxsIHwgZ3JlcCBfX0VMRl9fYCIgIT0gIiIgXV0KIAkJdGhlbgogCQkJTElOS0ZPUlNIQVJFRD0iLVdsLC0tZXhwb3J0LWR5bmFtaWMiCkBAIC0yMjQ1LDkgKzI1NDUsNiBAQAogQUNfQ0hFQ0tfTElCKHNlbmRmaWxlLCBzZW5kZmlsZSkKIEFDX0NIRUNLX0xJQihkbCwgZGxvcGVuKQkjIER5bmFtaWMgbGlua2luZyBmb3IgU3VuT1MvU29sYXJpcyBhbmQgU1lTVgogQUNfQ0hFQ0tfTElCKGRsZCwgc2hsX2xvYWQpCSMgRHluYW1pYyBsaW5raW5nIGZvciBIUC1VWAotQUNfQ0hFQ0tfTElCKGNyeXB0bywgUkFORF9lZ2QsCi0gICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfUkFORF9FR0QsIDEsCi0gICAgICAgICAgICAgW0RlZmluZSBpZiB0aGUgbGliY3J5cHRvIGhhcyBSQU5EX2VnZF0pKQogCiAjIG9ubHkgY2hlY2sgZm9yIHNlbV9pbml0IGlmIHRocmVhZCBzdXBwb3J0IGlzIHJlcXVlc3RlZAogaWYgdGVzdCAiJHdpdGhfdGhyZWFkcyIgPSAieWVzIiAtbyAteiAiJHdpdGhfdGhyZWFkcyI7IHRoZW4KQEAgLTIzMzIsNiArMjYyOSwxNyBAQAogXSwKIFtBQ19NU0dfUkVTVUxUKGRlZmF1bHQpXSkKIAorQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtYWRkcmVzcy1zYW5pdGl6ZXIpCitBQ19BUkdfV0lUSChhZGRyZXNzX3Nhbml0aXplciwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtYWRkcmVzcy1zYW5pdGl6ZXJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBBZGRyZXNzU2FuaXRpemVyXSksCitbCitBQ19NU0dfUkVTVUxUKCR3aXRodmFsKQorQkFTRUNGTEFHUz0iLWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyICRCQVNFQ0ZMQUdTIgorTERGTEFHUz0iLWZzYW5pdGl6ZT1hZGRyZXNzICRMREZMQUdTIgorXSwKK1tBQ19NU0dfUkVTVUxUKG5vKV0pCisKICMgTW9zdCBTVlI0IHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBuZWVkIC1sc29ja2V0IGFuZCAtbG5zbC4KIEFDX0NIRUNLX0xJQihuc2wsIHRfb3BlbiwgW0xJQlM9Ii1sbnNsICRMSUJTIl0pICMgU1ZSNAogQUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0LCBbTElCUz0iLWxzb2NrZXQgJExJQlMiXSwgW10sICRMSUJTKSAjIFNWUjQgc29ja2V0cwpAQCAtMjQ5NSw3ICsyODAzLDcgQEAKICAgICAjIERlZmluaW5nIF9SRUVOVFJBTlQgb24gc3lzdGVtIHdpdGggUE9TSVggdGhyZWFkcyBzaG91bGQgbm90IGh1cnQuCiAgICAgQUNfREVGSU5FKF9SRUVOVFJBTlQpCiAgICAgcG9zaXhfdGhyZWFkcz15ZXMKLSAgICBUSFJFQURPQko9IlB5dGhvbi90aHJlYWQubyIgICAgCisgICAgVEhSRUFET0JKPSJQeXRob24vdGhyZWFkLm8iCiBlbGlmIHRlc3QgIiRhY19jdl9rcHRocmVhZCIgPSAieWVzIgogdGhlbgogICAgIENDPSIkQ0MgLUtwdGhyZWFkIgpAQCAtMjU4OSw3ICsyODk3LDcgQEAKICAgICBUSFJFQURPQko9IlB5dGhvbi90aHJlYWQubyIKICAgICBVU0VfVEhSRUFEX01PRFVMRT0iIl0pCiAKLSAgICBpZiB0ZXN0ICIkcG9zaXhfdGhyZWFkcyIgIT0gInllcyI7IHRoZW4gICAgIAorICAgIGlmIHRlc3QgIiRwb3NpeF90aHJlYWRzIiAhPSAieWVzIjsgdGhlbgogICAgICAgQUNfQ0hFQ0tfTElCKHRocmVhZCwgdGhyX2NyZWF0ZSwgW0FDX0RFRklORShXSVRIX1RIUkVBRCkKICAgICAgIExJQlM9IiRMSUJTIC1sdGhyZWFkIgogICAgICAgVEhSRUFET0JKPSJQeXRob24vdGhyZWFkLm8iCkBAIC0yNjAwLDcgKzI5MDgsNyBAQAogaWYgdGVzdCAiJHBvc2l4X3RocmVhZHMiID0gInllcyI7IHRoZW4KICAgICAgIGlmIHRlc3QgIiR1bmlzdGRfZGVmaW5lc19wdGhyZWFkcyIgPSAibm8iOyB0aGVuCiAgICAgICAgICBBQ19ERUZJTkUoX1BPU0lYX1RIUkVBRFMsIDEsCi0gICAgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMsIAorICAgICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSBQT1NJWCB0aHJlYWRzLAogICAgICAgICAgIGFuZCB5b3VyIHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgdGhhdC5dKQogICAgICAgZmkKIApAQCAtMjgxNSw2ICszMTIzLDE2IEBACiAJZmkKIGZpCiAKK0FDX01TR19DSEVDS0lORyhmb3IgQ0FOX1JBV19GRF9GUkFNRVMpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbIC8qIENBTl9SQVdfRkRfRlJBTUVTIGF2YWlsYWJsZSBjaGVjayAqLworI2luY2x1ZGUgPGxpbnV4L2Nhbi9yYXcuaD5dXSwKK1tbaW50IGNhbl9yYXdfZmRfZnJhbWVzID0gQ0FOX1JBV19GRF9GUkFNRVM7XV0pXSxbCisgIEFDX0RFRklORShIQVZFX0xJTlVYX0NBTl9SQVdfRkRfRlJBTUVTLCAxLCBbRGVmaW5lIGlmIGNvbXBpbGluZyB1c2luZyBMaW51eCAzLjYgb3IgbGF0ZXIuXSkKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCitdLFsKKyAgQUNfTVNHX1JFU1VMVChubykKK10pCisKIEFDX01TR19DSEVDS0lORyhmb3IgT1NYIDEwLjUgU0RLIG9yIGxhdGVyKQogQUNfQ09NUElMRV9JRkVMU0UoWwogICBBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPl1dLCBbW0ZTSU9SZWZOdW0gZlJlZiA9IDBdXSkKQEAgLTI4NDUsOSArMzE2Myw5IEBACiBBQ19BUkdfV0lUSCh0c2MsCiAJICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgob3V0KS10c2NdLFtlbmFibGUvZGlzYWJsZSB0aW1lc3RhbXAgY291bnRlciBwcm9maWxlXSksWwogaWYgdGVzdCAiJHdpdGh2YWwiICE9IG5vCi10aGVuIAotICBBQ19ERUZJTkUoV0lUSF9UU0MsIDEsIAotICAgIFtEZWZpbmUgdG8gcHJvZmlsZSB3aXRoIHRoZSBQZW50aXVtIHRpbWVzdGFtcCBjb3VudGVyXSkgCit0aGVuCisgIEFDX0RFRklORShXSVRIX1RTQywgMSwKKyAgICBbRGVmaW5lIHRvIHByb2ZpbGUgd2l0aCB0aGUgUGVudGl1bSB0aW1lc3RhbXAgY291bnRlcl0pCiAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCiBlbHNlIEFDX01TR19SRVNVTFQobm8pCiBmaV0sCkBAIC0yODY0LDcgKzMxODIsNyBAQAogZmkKIGlmIHRlc3QgIiR3aXRoX3B5bWFsbG9jIiAhPSAibm8iCiB0aGVuCi0gICAgQUNfREVGSU5FKFdJVEhfUFlNQUxMT0MsIDEsIAorICAgIEFDX0RFRklORShXSVRIX1BZTUFMTE9DLCAxLAogICAgICBbRGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgaW4gUHl0aG9uLXNwZWNpZmljIG1hbGxvY3NdKQogICAgIEFCSUZMQUdTPSIke0FCSUZMQUdTfW0iCiBmaQpAQCAtMzE1MSwxMiArMzQ2OSwxMiBAQAogZG5sIHRvIHJldmVydCB0byBhIG1vcmUgdHJhZGl0aW9uYWwgdW5peCBiZWhhdmlvdXIgYW5kIG1ha2UgaXQgcG9zc2libGUgdG8KIGRubCBvdmVycmlkZSB0aGUgc3lzdGVtIGxpYnogd2l0aCBhIGxvY2FsIHN0YXRpYyBsaWJyYXJ5IG9mIGxpYnouIFRlbXBvcmFyaWx5CiBkbmwgYWRkIHRoYXQgZmxhZyB0byBvdXIgQ0ZMQUdTIGFzIHdlbGwgdG8gZW5zdXJlIHRoYXQgd2UgY2hlY2sgdGhlIHZlcnNpb24KLWRubCBvZiBsaWJ6IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHNldHVwLnB5LiAKLWRubCBUaGUgLUwvdXNyL2xvY2FsL2xpYiBpcyBuZWVkZWQgYXMgd2VsIHRvIGdldCB0aGUgc2FtZSBjb21waWxhdGlvbiAKK2RubCBvZiBsaWJ6IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHNldHVwLnB5LgorZG5sIFRoZSAtTC91c3IvbG9jYWwvbGliIGlzIG5lZWRlZCBhcyB3ZWwgdG8gZ2V0IHRoZSBzYW1lIGNvbXBpbGF0aW9uCiBkbmwgZW52aXJvbm1lbnQgYXMgc2V0dXAucHkgKGFuZCBsZWF2aW5nIGl0IG91dCBjYW4gY2F1c2UgY29uZmlndXJlIHRvIHVzZSB0aGUKIGRubCB3cm9uZyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5KQogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KLURhcndpbi8qKSAKK0Rhcndpbi8qKQogCV9DVVJfQ0ZMQUdTPSIke0NGTEFHU30iCiAJX0NVUl9MREZMQUdTPSIke0xERkxBR1N9IgogCUNGTEFHUz0iJHtDRkxBR1N9IC1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0IgpAQCAtMzE2Nyw3ICszNDg1LDcgQEAKIEFDX0NIRUNLX0xJQih6LCBpbmZsYXRlQ29weSwgQUNfREVGSU5FKEhBVkVfWkxJQl9DT1BZLCAxLCBbRGVmaW5lIGlmIHRoZSB6bGliIGxpYnJhcnkgaGFzIGluZmxhdGVDb3B5XSkpCiAKIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCi1EYXJ3aW4vKikgCitEYXJ3aW4vKikKIAlDRkxBR1M9IiR7X0NVUl9DRkxBR1N9IgogCUxERkxBR1M9IiR7X0NVUl9MREZMQUdTfSIKIAk7OwpAQCAtMzIyMSwxNCArMzUzOSwxNCBAQAogCiAjIGNoZWNrIGZvciBvcGVucHR5IGFuZCBmb3JrcHR5CiAKLUFDX0NIRUNLX0ZVTkNTKG9wZW5wdHksLCAKK0FDX0NIRUNLX0ZVTkNTKG9wZW5wdHksLAogICAgQUNfQ0hFQ0tfTElCKHV0aWwsb3BlbnB0eSwKICAgICAgW0FDX0RFRklORShIQVZFX09QRU5QVFkpIExJQlM9IiRMSUJTIC1sdXRpbCJdLAogICAgICBBQ19DSEVDS19MSUIoYnNkLG9wZW5wdHksIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZKSBMSUJTPSIkTElCUyAtbGJzZCJdKQogICAgKQogKQotQUNfQ0hFQ0tfRlVOQ1MoZm9ya3B0eSwsIAotICAgQUNfQ0hFQ0tfTElCKHV0aWwsZm9ya3B0eSwgCitBQ19DSEVDS19GVU5DUyhmb3JrcHR5LCwKKyAgIEFDX0NIRUNLX0xJQih1dGlsLGZvcmtwdHksCiAgICAgIFtBQ19ERUZJTkUoSEFWRV9GT1JLUFRZKSBMSUJTPSIkTElCUyAtbHV0aWwiXSwKICAgICAgQUNfQ0hFQ0tfTElCKGJzZCxmb3JrcHR5LCBbQUNfREVGSU5FKEhBVkVfRk9SS1BUWSkgTElCUz0iJExJQlMgLWxic2QiXSkKICAgICkKQEAgLTMyNDEsNyArMzU1OSw3IEBACiBBQ19DSEVDS19GVU5DUyhmc2VlazY0IGZzZWVrbyBmc3RhdHZmcyBmdGVsbDY0IGZ0ZWxsbyBzdGF0dmZzKQogCiBBQ19SRVBMQUNFX0ZVTkNTKGR1cDIgc3RyZHVwKQotQUNfQ0hFQ0tfRlVOQ1MoZ2V0cGdycCwgCitBQ19DSEVDS19GVU5DUyhnZXRwZ3JwLAogICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW2dldHBncnAoMCk7XV0pXSwKICAgICBbQUNfREVGSU5FKEdFVFBHUlBfSEFWRV9BUkcsIDEsIFtEZWZpbmUgaWYgZ2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIGdldHBncnAoMCkuXSldLAogICAgIFtdKQpAQCAtMzI1MSw3ICszNTY5LDcgQEAKICAgICBbQUNfREVGSU5FKFNFVFBHUlBfSEFWRV9BUkcsIDEsIFtEZWZpbmUgaWYgc2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIHNldHBncnAoMCwgMCkuXSldLAogICAgIFtdKQogKQotQUNfQ0hFQ0tfRlVOQ1MoZ2V0dGltZW9mZGF5LCAKK0FDX0NIRUNLX0ZVTkNTKGdldHRpbWVvZmRheSwKICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvdGltZS5oPl1dLAogICAJCQkJICAgICBbW2dldHRpbWVvZmRheSgoc3RydWN0IHRpbWV2YWwqKTAsKHN0cnVjdCB0aW1lem9uZSopMCk7XV0pXSwKICAgICBbXSwKQEAgLTMyNjMsNiArMzU4MSw3IEBACiAKIEFDX0NIRUNLX0ZVTkNTKGNsb2NrX2dldHRpbWUsIFtdLCBbCiAgICAgQUNfQ0hFQ0tfTElCKHJ0LCBjbG9ja19nZXR0aW1lLCBbCisgICAgICAgIExJQlM9IiRMSUJTIC1scnQiCiAgICAgICAgIEFDX0RFRklORShIQVZFX0NMT0NLX0dFVFRJTUUsIDEpCiAgICAgICAgIEFDX0RFRklORShUSU1FTU9EVUxFX0xJQiwgW3J0XSwKICAgICAgICAgICAgICAgICAgIFtMaWJyYXJ5IG5lZWRlZCBieSB0aW1lbW9kdWxlLmM6IGxpYnJ0IG1heSBiZSBuZWVkZWQgZm9yIGNsb2NrX2dldHRpbWUoKV0pCkBAIC0zMjk1LDcgKzM2MTQsNyBAQAogXSkKIAogIyBPbiBPU0YvMSBWNS4xLCBnZXRhZGRyaW5mbyBpcyBhdmFpbGFibGUsIGJ1dCBhIGRlZmluZQotIyBmb3IgW25vXWdldGFkZHJpbmZvIGluIG5ldGRiLmguIAorIyBmb3IgW25vXWdldGFkZHJpbmZvIGluIG5ldGRiLmguCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGdldGFkZHJpbmZvKQogQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMzQzMyw3ICszNzUyLDcgQEAKIEFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzdGF0LnN0X2ZsYWdzXSkKIEFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzdGF0LnN0X2dlbl0pCiBBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdC5zdF9iaXJ0aHRpbWVdKQotQUNfU1RSVUNUX1NUX0JMT0NLUworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHN0YXQuc3RfYmxvY2tzXSkKIAogQUNfTVNHX0NIRUNLSU5HKGZvciB0aW1lLmggdGhhdCBkZWZpbmVzIGFsdHpvbmUpCiBBQ19DQUNIRV9WQUwoYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZSxbCkBAIC0zNDU1LDcgKzM3NzQsNyBAQAogXV0sIFtbO11dKV0sWwogICBBQ19ERUZJTkUoU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FLCAxLAogICBbRGVmaW5lIGlmICB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy9zZWxlY3QuaD4gYW5kIDxzeXMvdGltZS5oPgotICAgKHdoaWNoIHlvdSBjYW4ndCBvbiBTQ08gT0RUIDMuMCkuXSkgCisgICAod2hpY2ggeW91IGNhbid0IG9uIFNDTyBPRFQgMy4wKS5dKQogICB3YXNfaXRfZGVmaW5lZD15ZXMKIF0sW10pCiBBQ19NU0dfUkVTVUxUKCR3YXNfaXRfZGVmaW5lZCkKQEAgLTM1MDYsOCArMzgyNSw4IEBACiBoYXZlX3Byb3RvdHlwZXM9bm8KIEFDX01TR19DSEVDS0lORyhmb3IgcHJvdG90eXBlcykKIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tpbnQgZm9vKGludCB4KSB7IHJldHVybiAwOyB9XV0sIFtbcmV0dXJuIGZvbygxMCk7XV0pXSwKLSAgW0FDX0RFRklORShIQVZFX1BST1RPVFlQRVMsIDEsIAotICAgICBbRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gcHJvdG90eXBlXSkgCisgIFtBQ19ERUZJTkUoSEFWRV9QUk9UT1RZUEVTLCAxLAorICAgICBbRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gcHJvdG90eXBlXSkKICAgIGhhdmVfcHJvdG90eXBlcz15ZXNdLAogICBbXQogKQpAQCAtMzUyOCw3ICszODQ3LDcgQEAKIF1dLCBbW3JldHVybiBmb28oMTAsICIiLCAzLjE0KTtdXSldLFsKICAgQUNfREVGSU5FKEhBVkVfU1REQVJHX1BST1RPVFlQRVMsIDEsCiAgICBbRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgdmFyaWFibGUgbGVuZ3RoIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAgIChlLmcuIHZvaWQgZnByaW50ZihGSUxFICosIGNoYXIgKiwgLi4uKTspICphbmQqIDxzdGRhcmcuaD5dKSAKKyAgIChlLmcuIHZvaWQgZnByaW50ZihGSUxFICosIGNoYXIgKiwgLi4uKTspICphbmQqIDxzdGRhcmcuaD5dKQogICB3b3Jrcz15ZXMKIF0sW10pCiBBQ19NU0dfUkVTVUxUKCR3b3JrcykKQEAgLTM1NjMsNyArMzg4Miw3IEBACiAjaW5jbHVkZSA8dmFyYXJncy5oPgogI2VuZGlmCiBdXSwgW1t2YV9saXN0IGxpc3QxLCBsaXN0MjsgbGlzdDEgPSBsaXN0MjtdXSldLFtdLFsKLSBBQ19ERUZJTkUoVkFfTElTVF9JU19BUlJBWSwgMSwgW0RlZmluZSBpZiBhIHZhX2xpc3QgaXMgYW4gYXJyYXkgb2Ygc29tZSBraW5kXSkgCisgQUNfREVGSU5FKFZBX0xJU1RfSVNfQVJSQVksIDEsIFtEZWZpbmUgaWYgYSB2YV9saXN0IGlzIGFuIGFycmF5IG9mIHNvbWUga2luZF0pCiAgdmFfbGlzdF9pc19hcnJheT15ZXMKIF0pCiBBQ19NU0dfUkVTVUxUKCR2YV9saXN0X2lzX2FycmF5KQpAQCAtMzY1OCw5ICszOTc3LDkgQEAKICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnBlY3RsXSwgW2VuYWJsZSBTSUdGUEUgY2F0Y2hpbmddKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiAhPSBubwotdGhlbiAKK3RoZW4KICAgQUNfREVGSU5FKFdBTlRfU0lHRlBFX0hBTkRMRVIsIDEsCi0gIFtEZWZpbmUgaWYgeW91IHdhbnQgU0lHRlBFIGhhbmRsZWQgKHNlZSBJbmNsdWRlL3B5ZnBlLmgpLl0pIAorICBbRGVmaW5lIGlmIHlvdSB3YW50IFNJR0ZQRSBoYW5kbGVkIChzZWUgSW5jbHVkZS9weWZwZS5oKS5dKQogICBBQ19NU0dfUkVTVUxUKHllcykKIGVsc2UgQUNfTVNHX1JFU1VMVChubykKIGZpXSwKQEAgLTM3MDcsNyArNDAyNiw3IEBACiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIEFDX01TR19DSEVDS0lORyhmb3IgeDY0IGdjYyBpbmxpbmUgYXNzZW1ibGVyKQotQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworQUNfTElOS19JRkVMU0UoICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWwogICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdnEgJXJjeCwgJXJheCIpOwogXV0pXSxbaGF2ZV9nY2NfYXNtX2Zvcl94NjQ9eWVzXSxbaGF2ZV9nY2NfYXNtX2Zvcl94NjQ9bm9dKQogQUNfTVNHX1JFU1VMVCgkaGF2ZV9nY2NfYXNtX2Zvcl94NjQpCkBAIC0zODA1LDcgKzQxMjQsNyBAQAogIyBzbyB3ZSB0cnkgaXQgb24gYWxsIHBsYXRmb3Jtcy4KIAogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgd2UgY2FuIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCB4ODcgY29udHJvbCB3b3JkKQotQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworQUNfTElOS19JRkVMU0UoICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWwogICB1bnNpZ25lZCBzaG9ydCBjdzsKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY3cpKTsKICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoY3cpKTsKQEAgLTM4MTcsNiArNDEzNiwxOSBAQAogICAgIFtEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCB4ODcgY29udHJvbCB3b3JkXSkKIGZpCiAKK0FDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgbWM2ODg4MSBmcGNyKQorQUNfTElOS19JRkVMU0UoICAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWworICB1bnNpZ25lZCBpbnQgZnBjcjsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbW92ZS5sICUlZnBjciwlMCIgOiAiPWciIChmcGNyKSk7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm1vdmUubCAlMCwlJWZwY3IiIDogOiAiZyIgKGZwY3IpKTsKK11dKV0sW2hhdmVfZ2NjX2FzbV9mb3JfbWM2ODg4MT15ZXNdLFtoYXZlX2djY19hc21fZm9yX21jNjg4ODE9bm9dKQorQUNfTVNHX1JFU1VMVCgkaGF2ZV9nY2NfYXNtX2Zvcl9tYzY4ODgxKQoraWYgdGVzdCAiJGhhdmVfZ2NjX2FzbV9mb3JfbWM2ODg4MSIgPSB5ZXMKK3RoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9HQ0NfQVNNX0ZPUl9NQzY4ODgxLCAxLAorICAgIFtEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCBtYzY4ODgxIGZwY3JdKQorZmkKKwogIyBEZXRlY3Qgd2hldGhlciBzeXN0ZW0gYXJpdGhtZXRpYyBpcyBzdWJqZWN0IHRvIHg4Ny1zdHlsZSBkb3VibGUKICMgcm91bmRpbmcgaXNzdWVzLiAgVGhlIHJlc3VsdCBvZiB0aGlzIHRlc3QgaGFzIGxpdHRsZSBtZWFuaW5nIG9uIG5vbgogIyBJRUVFIDc1NCBwbGF0Zm9ybXMuICBPbiBJRUVFIDc1NCwgdGVzdCBzaG91bGQgcmV0dXJuIDEgaWYgcm91bmRpbmcKQEAgLTQwMTgsOCArNDM1MCw4IEBACiAKICMgY2hlY2sgZm9yIHdjaGFyLmgKIEFDX0NIRUNLX0hFQURFUih3Y2hhci5oLCBbCi0gIEFDX0RFRklORShIQVZFX1dDSEFSX0gsIDEsIAotICBbRGVmaW5lIGlmIHRoZSBjb21waWxlciBwcm92aWRlcyBhIHdjaGFyLmggaGVhZGVyIGZpbGUuXSkgCisgIEFDX0RFRklORShIQVZFX1dDSEFSX0gsIDEsCisgIFtEZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIGEgd2NoYXIuaCBoZWFkZXIgZmlsZS5dKQogICB3Y2hhcl9oPSJ5ZXMiCiBdLAogd2NoYXJfaD0ibm8iCkBAIC00MDk4LDEyICs0NDMwLDEyIEBACiBBQ19NU0dfQ0hFQ0tJTkcoQUJJRkxBR1MpCiBBQ19NU0dfUkVTVUxUKCRBQklGTEFHUykKIEFDX01TR19DSEVDS0lORyhTT0FCSSkKLVNPQUJJPSdjcHl0aG9uLSdgZWNobyAkVkVSU0lPTiB8IHRyIC1kIC5gJHtBQklGTEFHU30KK1NPQUJJPSdjcHl0aG9uLSdgZWNobyAkVkVSU0lPTiB8IHRyIC1kIC5gJHtBQklGTEFHU30ke1BMQVRGT1JNX1RSSVBMRVQ6Ky0kUExBVEZPUk1fVFJJUExFVH0KIEFDX01TR19SRVNVTFQoJFNPQUJJKQogCiBBQ19TVUJTVChFWFRfU1VGRklYKQogY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgotICAgIExpbnV4KnxHTlUqKQorICAgIExpbnV4KnxHTlUqfERhcndpbikKIAlFWFRfU1VGRklYPS4ke1NPQUJJfSR7U0hMSUJfU1VGRklYfTs7CiAgICAgKikKIAlFWFRfU1VGRklYPSR7U0hMSUJfU1VGRklYfTs7CkBAIC00MjIwLDYgKzQ1NTIsMTEgQEAKIAlBQ19ERUZJTkUoSEFWRV9STF9DT01QTEVUSU9OX0RJU1BMQVlfTUFUQ0hFU19IT09LLCAxLAogICAgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHJlYWRsaW5lIDQuMF0pLCAsJFJFQURMSU5FX0xJQlMpCiAKKyMgYWxzbyBpbiA0LjAsIGJ1dCBub3QgaW4gZWRpdGxpbmUKK0FDX0NIRUNLX0xJQihyZWFkbGluZSwgcmxfcmVzaXplX3Rlcm1pbmFsLAorCUFDX0RFRklORShIQVZFX1JMX1JFU0laRV9URVJNSU5BTCwgMSwKKyAgICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSByZWFkbGluZSA0LjBdKSwgLCRSRUFETElORV9MSUJTKQorCiAjIGNoZWNrIGZvciByZWFkbGluZSA0LjIKIEFDX0NIRUNLX0xJQihyZWFkbGluZSwgcmxfY29tcGxldGlvbl9tYXRjaGVzLAogCUFDX0RFRklORShIQVZFX1JMX0NPTVBMRVRJT05fTUFUQ0hFUywgMSwKQEAgLTQyMzgsNiArNDU3NSwxMCBAQAogICBbRGVmaW5lIGlmIHlvdSBjYW4gdHVybiBvZmYgcmVhZGxpbmUncyBzaWduYWwgaGFuZGxpbmcuXSksICkKIGZpCiAKK0FDX0NIRUNLX0xJQihyZWFkbGluZSwgYXBwZW5kX2hpc3RvcnksCisJQUNfREVGSU5FKEhBVkVfUkxfQVBQRU5EX0hJU1RPUlksIDEsCisgICAgICAgIFtEZWZpbmUgaWYgcmVhZGxpbmUgc3VwcG9ydHMgYXBwZW5kX2hpc3RvcnldKSwgLCRSRUFETElORV9MSUJTKQorCiAjIEVuZCBvZiByZWFkbGluZSBjaGVja3M6IHJlc3RvcmUgTElCUwogTElCUz0kTElCU19ub19yZWFkbGluZQogCkBAIC00MjkzLDcgKzQ2MzQsNyBAQAogICAgICAgW0RlZmluZSBpZiBwb2xsKCkgc2V0cyBlcnJubyBvbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcnMuXSkKIGZpCiAKLSMgQmVmb3JlIHdlIGNhbiB0ZXN0IHR6c2V0LCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHN0cnVjdCB0bSBoYXMgYSB0bV96b25lIAorIyBCZWZvcmUgd2UgY2FuIHRlc3QgdHpzZXQsIHdlIG5lZWQgdG8gY2hlY2sgaWYgc3RydWN0IHRtIGhhcyBhIHRtX3pvbmUKICMgKHdoaWNoIGlzIG5vdCByZXF1aXJlZCBieSBJU08gQyBvciBVTklYIHNwZWMpIGFuZC9vciBpZiB3ZSBzdXBwb3J0CiAjIHR6bmFtZVtdCiBBQ19TVFJVQ1RfVElNRVpPTkUKQEAgLTQzMTksNyArNDY2MCw3IEBACiAJICAgdG0tPnRtX3pvbmUgZG9lcyBub3QgZXhpc3Qgc2luY2UgaXQgaXMgdGhlIGFsdGVybmF0aXZlIHdheQogCSAgIG9mIGdldHRpbmcgdGltZXpvbmUgaW5mby4KIAotCSAgIFJlZCBIYXQgNi4yIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgc291dGhlcm4gaGVtaXNwaGVyZSAKKwkgICBSZWQgSGF0IDYuMiBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIHNvdXRoZXJuIGhlbWlzcGhlcmUKIAkgICBhZnRlciBOZXcgWWVhcidzIERheS4KIAkqLwogCkBAIC00MzMyLDcgKzQ2NzMsNyBAQAogCSAgICBleGl0KDEpOwogI2lmIEhBVkVfVFpOQU1FCiAJLyogRm9yIFVUQywgdHpuYW1lWzFdIGlzIHNvbWV0aW1lcyAiIiwgc29tZXRpbWVzICIgICAiICovCi0JaWYgKHN0cmNtcCh0em5hbWVbMF0sICJVVEMiKSB8fCAKKwlpZiAoc3RyY21wKHR6bmFtZVswXSwgIlVUQyIpIHx8CiAJCSh0em5hbWVbMV1bMF0gIT0gMCAmJiB0em5hbWVbMV1bMF0gIT0gJyAnKSkKIAkgICAgZXhpdCgxKTsKICNlbmRpZgpAQCAtNDQ1MCw3ICs0NzkxLDcgQEAKIAogaWYgdGVzdCAiJGFjX2N2X3dpbmRvd19oYXNfZmxhZ3MiID0geWVzCiB0aGVuCi0gIEFDX0RFRklORShXSU5ET1dfSEFTX0ZMQUdTLCAxLCAKKyAgQUNfREVGSU5FKFdJTkRPV19IQVNfRkxBR1MsIDEsCiAgIFtEZWZpbmUgaWYgV0lORE9XIGluIGN1cnNlcy5oIG9mZmVycyBhIGZpZWxkIF9mbGFncy5dKQogZmkKIApAQCAtNDY0OSw3ICs0OTkwLDcgQEAKIGlmIHRlc3QgIiRhY19jdl9icm9rZW5fbWJzdG93Y3MiID0geWVzCiB0aGVuCiAgIEFDX0RFRklORShIQVZFX0JST0tFTl9NQlNUT1dDUywgMSwKLSAgW0RlZmluZSBpZiBtYnN0b3djcyhOVUxMLCAidGV4dCIsIDApIGRvZXMgbm90IHJldHVybiB0aGUgbnVtYmVyIG9mIAorICBbRGVmaW5lIGlmIG1ic3Rvd2NzKE5VTEwsICJ0ZXh0IiwgMCkgZG9lcyBub3QgcmV0dXJuIHRoZSBudW1iZXIgb2YKICAgIHdpZGUgY2hhcnMgdGhhdCB3b3VsZCBiZSBjb252ZXJ0ZWQuXSkKIGZpCiAKQEAgLTQ2NjAsMTUgKzUwMDEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVc2UgY29tcHV0ZWQgZ290b3MgaW4gZXZhbHVhdGlvbiBsb29wIChlbmFibGVkIGJ5IGRlZmF1bHQgb24gc3VwcG9ydGVkIGNvbXBpbGVycyldKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllcwotdGhlbiAKK3RoZW4KICAgQUNfREVGSU5FKFVTRV9DT01QVVRFRF9HT1RPUywgMSwKLSAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byB1c2UgY29tcHV0ZWQgZ290b3MgaW4gY2V2YWwuYy5dKSAKKyAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byB1c2UgY29tcHV0ZWQgZ290b3MgaW4gY2V2YWwuYy5dKQogICBBQ19NU0dfUkVTVUxUKHllcykKIGZpCiBpZiB0ZXN0ICIkd2l0aHZhbCIgPSBubwotdGhlbiAKK3RoZW4KICAgQUNfREVGSU5FKFVTRV9DT01QVVRFRF9HT1RPUywgMCwKLSAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byB1c2UgY29tcHV0ZWQgZ290b3MgaW4gY2V2YWwuYy5dKSAKKyAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byB1c2UgY29tcHV0ZWQgZ290b3MgaW4gY2V2YWwuYy5dKQogICBBQ19NU0dfUkVTVUxUKG5vKQogZmkKIF0sCkBAIC00NzAyLDcgKzUwNDMsNyBAQAogZXNhYwogCiBjYXNlICRhY19zeXNfc3lzdGVtIGluCi1BSVgqKSAgIAorQUlYKikKICAgQUNfREVGSU5FKEhBVkVfQlJPS0VOX1BJUEVfQlVGLCAxLCBbRGVmaW5lIGlmIHRoZSBzeXN0ZW0gcmVwb3J0cyBhbiBpbnZhbGlkIFBJUEVfQlVGIHZhbHVlLl0pIDs7CiBlc2FjCiAKQEAgLTQ3MTUsNyArNTA1Niw3IEBACiBkb25lCiAKIEFDX1NVQlNUKFNSQ0RJUlMpCi1TUkNESVJTPSJQYXJzZXIgR3JhbW1hciBPYmplY3RzIFB5dGhvbiBNb2R1bGVzIE1hYyIKK1NSQ0RJUlM9IlBhcnNlciBHcmFtbWFyIE9iamVjdHMgUHl0aG9uIE1vZHVsZXMgTWFjIFByb2dyYW1zIgogQUNfTVNHX0NIRUNLSU5HKGZvciBidWlsZCBkaXJlY3RvcmllcykKIGZvciBkaXIgaW4gJFNSQ0RJUlM7IGRvCiAgICAgaWYgdGVzdCAhIC1kICRkaXI7IHRoZW4KQEAgLTQ4MDcsNiArNTE0OCw0NyBAQAogICAgIGVzYWMKIGZpCiAKKyMgQ2hlY2sgZm9yIHN0ZGF0b21pYy5oCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHN0ZGF0b21pYy5oKQorQUNfTElOS19JRkVMU0UoCitbCisgIEFDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHN0ZGF0b21pYy5oPgorICAgIGF0b21pY19pbnQgdmFsdWUgPSBBVE9NSUNfVkFSX0lOSVQoMSk7CisgICAgX0F0b21pYyB2b2lkICpweV9hdG9taWNfYWRkcmVzcyA9ICh2b2lkKikgJnZhbHVlOworICAgIGludCBtYWluKCkgeworICAgICAgaW50IGxvYWRlZF92YWx1ZSA9IGF0b21pY19sb2FkKCZ2YWx1ZSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIF1dKQorXSxbaGF2ZV9zdGRhdG9taWNfaD15ZXNdLFtoYXZlX3N0ZGF0b21pY19oPW5vXSkKKworQUNfTVNHX1JFU1VMVCgkaGF2ZV9zdGRhdG9taWNfaCkKKworaWYgdGVzdCAiJGhhdmVfc3RkYXRvbWljX2giID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfU1REX0FUT01JQywgMSwKKyAgICAgICAgICAgICAgW0hhcyBzdGRhdG9taWMuaCwgYXRvbWljX2ludCBhbmQgX0F0b21pYyB2b2lkKiB0eXBlcyB3b3JrXSkKK2ZpCisKKyMgQ2hlY2sgZm9yIEdDQyA+PSA0LjcgX19hdG9taWMgYnVpbHRpbnMKK0FDX01TR19DSEVDS0lORyhmb3IgR0NDID49IDQuNyBfX2F0b21pYyBidWlsdGlucykKK0FDX0xJTktfSUZFTFNFKAorWworICBBQ19MQU5HX1NPVVJDRShbWworICAgIHZvbGF0aWxlIGludCB2YWwgPSAxOworICAgIGludCBtYWluKCkgeworICAgICAgX19hdG9taWNfbG9hZF9uKCZ2YWwsIF9fQVRPTUlDX1NFUV9DU1QpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBdXSkKK10sW2hhdmVfYnVpbHRpbl9hdG9taWM9eWVzXSxbaGF2ZV9idWlsdGluX2F0b21pYz1ub10pCisKK0FDX01TR19SRVNVTFQoJGhhdmVfYnVpbHRpbl9hdG9taWMpCisKK2lmIHRlc3QgIiRoYXZlX2J1aWx0aW5fYXRvbWljIiA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0JVSUxUSU5fQVRPTUlDLCAxLCBbSGFzIGJ1aWx0aW4gYXRvbWljc10pCitmaQorCiAjIGVuc3VyZXBpcCBvcHRpb24KIEFDX01TR19DSEVDS0lORyhmb3IgZW5zdXJlcGlwKQogQUNfQVJHX1dJVEgoZW5zdXJlcGlwLApAQCAtNDgyMiw2ICs1MjA0LDc3IEBACiBBQ19NU0dfUkVTVUxUKCRFTlNVUkVQSVApCiBBQ19TVUJTVChFTlNVUkVQSVApCiAKKyMgY2hlY2sgaWYgdGhlIGRpcmVudCBzdHJ1Y3R1cmUgb2YgYSBkX3R5cGUgZmllbGQgYW5kIERUX1VOS05PV04gaXMgZGVmaW5lZAorQUNfTVNHX0NIRUNLSU5HKGlmIHRoZSBkaXJlbnQgc3RydWN0dXJlIG9mIGEgZF90eXBlIGZpZWxkKQorQUNfTElOS19JRkVMU0UoCitbCisgIEFDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPGRpcmVudC5oPgorCisgICAgaW50IG1haW4oKSB7CisgICAgICBzdHJ1Y3QgZGlyZW50IGVudHJ5OworICAgICAgcmV0dXJuIGVudHJ5LmRfdHlwZSA9PSBEVF9VTktOT1dOOworICAgIH0KKyAgXV0pCitdLFtoYXZlX2RpcmVudF9kX3R5cGU9eWVzXSxbaGF2ZV9kaXJlbnRfZF90eXBlPW5vXSkKK0FDX01TR19SRVNVTFQoJGhhdmVfZGlyZW50X2RfdHlwZSkKKworaWYgdGVzdCAiJGhhdmVfZGlyZW50X2RfdHlwZSIgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9ESVJFTlRfRF9UWVBFLCAxLAorICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIGRpcmVudCBzdHJ1Y3R1cmUgaGFzIGEgZF90eXBlIGZpZWxkXSkKK2ZpCisKKyMgY2hlY2sgaWYgdGhlIExpbnV4IGdldHJhbmRvbSgpIHN5c2NhbGwgaXMgYXZhaWxhYmxlCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRoZSBMaW51eCBnZXRyYW5kb20oKSBzeXNjYWxsKQorQUNfTElOS19JRkVMU0UoCitbCisgIEFDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICAgICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorICAgICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworICAgIGludCBtYWluKCkgeworICAgICAgICBjaGFyIGJ1ZmZlclsxXTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJ1ZmxlbiA9IHNpemVvZihidWZmZXIpOworICAgICAgICBjb25zdCBpbnQgZmxhZ3MgPSBHUk5EX05PTkJMT0NLOworICAgICAgICAvKiBpZ25vcmUgdGhlIHJlc3VsdCwgUHl0aG9uIGNoZWNrcyBmb3IgRU5PU1lTIGFuZCBFQUdBSU4gYXQgcnVudGltZSAqLworICAgICAgICAodm9pZClzeXNjYWxsKFNZU19nZXRyYW5kb20sIGJ1ZmZlciwgYnVmbGVuLCBmbGFncyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgXV0pCitdLFtoYXZlX2dldHJhbmRvbV9zeXNjYWxsPXllc10sW2hhdmVfZ2V0cmFuZG9tX3N5c2NhbGw9bm9dKQorQUNfTVNHX1JFU1VMVCgkaGF2ZV9nZXRyYW5kb21fc3lzY2FsbCkKKworaWYgdGVzdCAiJGhhdmVfZ2V0cmFuZG9tX3N5c2NhbGwiID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfR0VUUkFORE9NX1NZU0NBTEwsIDEsCisgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB0aGUgTGludXggZ2V0cmFuZG9tKCkgc3lzY2FsbCBpcyBhdmFpbGFibGVdKQorZmkKKworIyBjaGVjayBpZiB0aGUgZ2V0cmFuZG9tKCkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlCisjIHRoZSB0ZXN0IHdhcyB3cml0dGVuIGZvciB0aGUgU29sYXJpcyBmdW5jdGlvbiBvZiA8c3lzL3JhbmRvbS5oPgorQUNfTVNHX0NIRUNLSU5HKGZvciB0aGUgZ2V0cmFuZG9tKCkgZnVuY3Rpb24pCitBQ19MSU5LX0lGRUxTRSgKK1sKKyAgQUNfTEFOR19TT1VSQ0UoW1sKKyAgICAjaW5jbHVkZSA8c3lzL3JhbmRvbS5oPgorCisgICAgaW50IG1haW4oKSB7CisgICAgICAgIGNoYXIgYnVmZmVyWzFdOworICAgICAgICBjb25zdCBzaXplX3QgYnVmbGVuID0gc2l6ZW9mKGJ1ZmZlcik7CisgICAgICAgIGNvbnN0IGludCBmbGFncyA9IDA7CisgICAgICAgIC8qIGlnbm9yZSB0aGUgcmVzdWx0LCBQeXRob24gY2hlY2tzIGZvciBFTk9TWVMgYXQgcnVudGltZSAqLworICAgICAgICAodm9pZClnZXRyYW5kb20oYnVmZmVyLCBidWZsZW4sIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICBdXSkKK10sW2hhdmVfZ2V0cmFuZG9tPXllc10sW2hhdmVfZ2V0cmFuZG9tPW5vXSkKK0FDX01TR19SRVNVTFQoJGhhdmVfZ2V0cmFuZG9tKQorCitpZiB0ZXN0ICIkaGF2ZV9nZXRyYW5kb20iID0geWVzOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfR0VUUkFORE9NLCAxLAorICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIGdldHJhbmRvbSgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZV0pCitmaQorCiAjIGdlbmVyYXRlIG91dHB1dCBmaWxlcwogQUNfQ09ORklHX0ZJTEVTKE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyBNaXNjL3B5dGhvbi5wYyBNaXNjL3B5dGhvbi1jb25maWcuc2gpCiBBQ19DT05GSUdfRklMRVMoW01vZHVsZXMvbGRfc29fYWl4XSwgW2NobW9kICt4IE1vZHVsZXMvbGRfc29fYWl4XSkKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IDg1NDkwYzguLmJmNGJhNWIgMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtMTAxLDYgKzEwMSw5IEBACiAvKiBEZWZpbmUgaWYgYHVuc2V0ZW52YCBkb2VzIG5vdCByZXR1cm4gYW4gaW50LiAqLwogI3VuZGVmIEhBVkVfQlJPS0VOX1VOU0VURU5WCiAKKy8qIEhhcyBidWlsdGluIGF0b21pY3MgKi8KKyN1bmRlZiBIQVZFX0JVSUxUSU5fQVRPTUlDCisKIC8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSB0eXBlIF9Cb29sLiAqLwogI3VuZGVmIEhBVkVfQzk5X0JPT0wKIApAQCAtMTgwLDYgKzE4Myw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0RJUkVDVF9ICiAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBkaXJlbnQgc3RydWN0dXJlIGhhcyBhIGRfdHlwZSBmaWVsZCAqLworI3VuZGVmIEhBVkVfRElSRU5UX0RfVFlQRQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuCiAgICAqLwogI3VuZGVmIEhBVkVfRElSRU5UX0gKQEAgLTMxMyw2ICszMTksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnYW1tYScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HQU1NQQogCisvKiBEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCBtYzY4ODgxIGZwY3IgKi8KKyN1bmRlZiBIQVZFX0dDQ19BU01fRk9SX01DNjg4ODEKKwogLyogRGVmaW5lIGlmIHdlIGNhbiB1c2UgeDY0IGdjYyBpbmxpbmUgYXNzZW1ibGVyICovCiAjdW5kZWYgSEFWRV9HQ0NfQVNNX0ZPUl9YNjQKIApAQCAtMzg2LDYgKzM5NSwxMiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwd2VudCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRQV0VOVAogCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgZ2V0cmFuZG9tKCkgZnVuY3Rpb24gaXMgYXZhaWxhYmxlICovCisjdW5kZWYgSEFWRV9HRVRSQU5ET00KKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIExpbnV4IGdldHJhbmRvbSgpIHN5c2NhbGwgaXMgYXZhaWxhYmxlICovCisjdW5kZWYgSEFWRV9HRVRSQU5ET01fU1lTQ0FMTAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJlc2dpZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRSRVNHSUQKIApAQCAtNTE5LDEyICs1MzQsMTggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElOVVhfQ0FOX0gKIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB1c2luZyBMaW51eCAzLjYgb3IgbGF0ZXIuICovCisjdW5kZWYgSEFWRV9MSU5VWF9DQU5fUkFXX0ZEX0ZSQU1FUworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi9yYXcuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9MSU5VWF9DQU5fUkFXX0gKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9uZXRsaW5rLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElOVVhfTkVUTElOS19ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvcmFuZG9tLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElOVVhfUkFORE9NX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC90aXBjLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElOVVhfVElQQ19ICiAKQEAgLTY3NSw5ICs2OTYsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwd3JpdGUnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUFdSSVRFCiAKLS8qIERlZmluZSBpZiB0aGUgbGliY3J5cHRvIGhhcyBSQU5EX2VnZCAqLwotI3VuZGVmIEhBVkVfUkFORF9FR0QKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkbGluaycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9SRUFETElOSwogCkBAIC02OTMsNiArNzExLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVuYW1lYXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUkVOQU1FQVQKIAorLyogRGVmaW5lIGlmIHJlYWRsaW5lIHN1cHBvcnRzIGFwcGVuZF9oaXN0b3J5ICovCisjdW5kZWYgSEFWRV9STF9BUFBFTkRfSElTVE9SWQorCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgMi4xICovCiAjdW5kZWYgSEFWRV9STF9DQUxMQkFDSwogCkBAIC03MTQsNiArNzM1LDkgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSByZWFkbGluZSA0LjAgKi8KICN1bmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCiAKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSByZWFkbGluZSA0LjAgKi8KKyN1bmRlZiBIQVZFX1JMX1JFU0laRV9URVJNSU5BTAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJvdW5kJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1JPVU5ECiAKQEAgLTg3MSw2ICs4OTUsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TVERMSUJfSAogCisvKiBIYXMgc3RkYXRvbWljLmgsIGF0b21pY19pbnQgYW5kIF9BdG9taWMgdm9pZCogdHlwZXMgd29yayAqLworI3VuZGVmIEhBVkVfU1REX0FUT01JQworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmR1cCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TVFJEVVAKIApAQCAtOTEwLDEwICs5MzcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgYHRtX3pvbmUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdG0nLiAqLwogI3VuZGVmIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91ciBgc3RydWN0IHN0YXQnIGhhcyBgc3RfYmxvY2tzJy4gRGVwcmVjYXRlZCwgdXNlCi0gICBgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTE9DS1MnIGluc3RlYWQuICovCi0jdW5kZWYgSEFWRV9TVF9CTE9DS1MKLQogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc3ltbGluaycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TWU1MSU5LCiAKZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKaW5kZXggMjc3OTY1OC4uMTc0Y2U3MiAxMDA2NDQKLS0tIGEvc2V0dXAucHkKKysrIGIvc2V0dXAucHkKQEAgLTI1LDYgKzI1LDExIEBACiBweV9jZmxhZ3Nfbm9kaXN0ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWV9DRkxBR1NfTk9ESVNUJykKIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSBjZmxhZ3MgKyAnICcgKyBweV9jZmxhZ3Nfbm9kaXN0CiAKK2NsYXNzIER1bW15OgorICAgICIiIkhhY2sgZm9yIHBhcmFsbGVsIGJ1aWxkIiIiCisgICAgUHJvY2Vzc1Bvb2xFeGVjdXRvciA9IE5vbmUKK3N5cy5tb2R1bGVzWydjb25jdXJyZW50LmZ1dHVyZXMucHJvY2VzcyddID0gRHVtbXkKKwogZGVmIGdldF9wbGF0Zm9ybSgpOgogICAgICMgY3Jvc3MgYnVpbGQKICAgICBpZiAiX1BZVEhPTl9IT1NUX1BMQVRGT1JNIiBpbiBvcy5lbnZpcm9uOgpAQCAtMTMxLDYgKzEzNiwyMiBAQAogICAgICAgICBwID0gcC5yc3RyaXAob3Muc2VwKQogCiAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2RhcndpbicgYW5kIGlzX21hY29zeF9zZGtfcGF0aChwKToKKyAgICAgICAgICAgICMgTm90ZSB0aGF0LCBhcyBvZiBYY29kZSA3LCBBcHBsZSBTREtzIG1heSBjb250YWluIHRleHR1YWwgc3R1YgorICAgICAgICAgICAgIyBsaWJyYXJpZXMgd2l0aCAudGJkIGV4dGVuc2lvbnMgcmF0aGVyIHRoYW4gdGhlIG5vcm1hbCAuZHlsaWIKKyAgICAgICAgICAgICMgc2hhcmVkIGxpYnJhcmllcyBpbnN0YWxsZWQgaW4gLy4gIFRoZSBBcHBsZSBjb21waWxlciB0b29sCisgICAgICAgICAgICAjIGNoYWluIGhhbmRsZXMgdGhpcyB0cmFuc3BhcmVudGx5IGJ1dCBpdCBjYW4gY2F1c2UgcHJvYmxlbXMKKyAgICAgICAgICAgICMgZm9yIHByb2dyYW1zIHRoYXQgYXJlIGJlaW5nIGJ1aWx0IHdpdGggYW4gU0RLIGFuZCBzZWFyY2hpbmcKKyAgICAgICAgICAgICMgZm9yIHNwZWNpZmljIGxpYnJhcmllcy4gIERpc3R1dGlscyBmaW5kX2xpYnJhcnlfZmlsZSgpIG5vdworICAgICAgICAgICAgIyBrbm93cyB0byBhbHNvIHNlYXJjaCBmb3IgYW5kIHJldHVybiAudGJkIGZpbGVzLiAgQnV0IGNhbGxlcnMKKyAgICAgICAgICAgICMgb2YgZmluZF9saWJyYXJ5X2ZpbGUgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgYmFzZSBmaWxlbmFtZQorICAgICAgICAgICAgIyBvZiB0aGUgcmV0dXJuZWQgU0RLIGxpYnJhcnkgZmlsZSBtaWdodCBoYXZlIGEgZGlmZmVyZW50IGV4dGVuc2lvbgorICAgICAgICAgICAgIyBmcm9tIHRoYXQgb2YgdGhlIGxpYnJhcnkgZmlsZSBpbnN0YWxsZWQgb24gdGhlIHJ1bm5pbmcgc3lzdGVtLAorICAgICAgICAgICAgIyBmb3IgZXhhbXBsZToKKyAgICAgICAgICAgICMgICAvQXBwbGljYXRpb25zL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvUGxhdGZvcm1zLworICAgICAgICAgICAgIyAgICAgICBNYWNPU1gucGxhdGZvcm0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuMTEuc2RrLworICAgICAgICAgICAgIyAgICAgICB1c3IvbGliL2xpYmVkaXQudGJkCisgICAgICAgICAgICAjIHZzCisgICAgICAgICAgICAjICAgL3Vzci9saWIvbGliZWRpdC5keWxpYgogICAgICAgICAgICAgaWYgb3MucGF0aC5qb2luKHN5c3Jvb3QsIHBbMTpdKSA9PSBkaXJuYW1lOgogICAgICAgICAgICAgICAgIHJldHVybiBbIF0KIApAQCAtMTczLDYgKzE5NCw5IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpc3QpOgogICAgICAgICBidWlsZF9leHQuX19pbml0X18oc2VsZiwgZGlzdCkKICAgICAgICAgc2VsZi5mYWlsZWQgPSBbXQorICAgICAgICBzZWxmLmZhaWxlZF9vbl9pbXBvcnQgPSBbXQorICAgICAgICBpZiAnLWonIGluIG9zLmVudmlyb24uZ2V0KCdNQUtFRkxBR1MnLCAnJyk6CisgICAgICAgICAgICBzZWxmLnBhcmFsbGVsID0gVHJ1ZQogCiAgICAgZGVmIGJ1aWxkX2V4dGVuc2lvbnMoc2VsZik6CiAKQEAgLTI1Miw5ICsyNzYsMTMgQEAKIAogICAgICAgICBidWlsZF9leHQuYnVpbGRfZXh0ZW5zaW9ucyhzZWxmKQogCisgICAgICAgIGZvciBleHQgaW4gc2VsZi5leHRlbnNpb25zOgorICAgICAgICAgICAgc2VsZi5jaGVja19leHRlbnNpb25faW1wb3J0KGV4dCkKKwogICAgICAgICBsb25nZXN0ID0gbWF4KFtsZW4oZS5uYW1lKSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdLCBkZWZhdWx0PTApCi0gICAgICAgIGlmIHNlbGYuZmFpbGVkOgotICAgICAgICAgICAgbG9uZ2VzdCA9IG1heChsb25nZXN0LCBtYXgoW2xlbihuYW1lKSBmb3IgbmFtZSBpbiBzZWxmLmZhaWxlZF0pKQorICAgICAgICBpZiBzZWxmLmZhaWxlZCBvciBzZWxmLmZhaWxlZF9vbl9pbXBvcnQ6CisgICAgICAgICAgICBhbGxfZmFpbGVkID0gc2VsZi5mYWlsZWQgKyBzZWxmLmZhaWxlZF9vbl9pbXBvcnQKKyAgICAgICAgICAgIGxvbmdlc3QgPSBtYXgobG9uZ2VzdCwgbWF4KFtsZW4obmFtZSkgZm9yIG5hbWUgaW4gYWxsX2ZhaWxlZF0pKQogCiAgICAgICAgIGRlZiBwcmludF90aHJlZV9jb2x1bW4obHN0KToKICAgICAgICAgICAgIGxzdC5zb3J0KGtleT1zdHIubG93ZXIpCkBAIC0yODIsNiArMzEwLDE0IEBACiAgICAgICAgICAgICBwcmludF90aHJlZV9jb2x1bW4oZmFpbGVkKQogICAgICAgICAgICAgcHJpbnQoKQogCisgICAgICAgIGlmIHNlbGYuZmFpbGVkX29uX2ltcG9ydDoKKyAgICAgICAgICAgIGZhaWxlZCA9IHNlbGYuZmFpbGVkX29uX2ltcG9ydFs6XQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQoIkZvbGxvd2luZyBtb2R1bGVzIGJ1aWx0IHN1Y2Nlc3NmdWxseSIKKyAgICAgICAgICAgICAgICAgICIgYnV0IHdlcmUgcmVtb3ZlZCBiZWNhdXNlIHRoZXkgY291bGQgbm90IGJlIGltcG9ydGVkOiIpCisgICAgICAgICAgICBwcmludF90aHJlZV9jb2x1bW4oZmFpbGVkKQorICAgICAgICAgICAgcHJpbnQoKQorCiAgICAgZGVmIGJ1aWxkX2V4dGVuc2lvbihzZWxmLCBleHQpOgogCiAgICAgICAgIGlmIGV4dC5uYW1lID09ICdfY3R5cGVzJzoKQEAgLTI5NSw2ICszMzEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4dC5uYW1lLCBzeXMuZXhjX2luZm8oKVsxXSkpCiAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCiAgICAgICAgICAgICByZXR1cm4KKworICAgIGRlZiBjaGVja19leHRlbnNpb25faW1wb3J0KHNlbGYsIGV4dCk6CisgICAgICAgICMgRG9uJ3QgdHJ5IHRvIGltcG9ydCBhbiBleHRlbnNpb24gdGhhdCBoYXMgZmFpbGVkIHRvIGNvbXBpbGUKKyAgICAgICAgaWYgZXh0Lm5hbWUgaW4gc2VsZi5mYWlsZWQ6CisgICAgICAgICAgICBzZWxmLmFubm91bmNlKAorICAgICAgICAgICAgICAgICdXQVJOSU5HOiBza2lwcGluZyBpbXBvcnQgY2hlY2sgZm9yIGZhaWxlZCBidWlsZCAiJXMiJyAlCisgICAgICAgICAgICAgICAgZXh0Lm5hbWUsIGxldmVsPTEpCisgICAgICAgICAgICByZXR1cm4KKwogICAgICAgICAjIFdvcmthcm91bmQgZm9yIE1hYyBPUyBYOiBUaGUgQ2FyYm9uLWJhc2VkIG1vZHVsZXMgY2Fubm90IGJlCiAgICAgICAgICMgcmVsaWFibHkgaW1wb3J0ZWQgaW50byBhIGNvbW1hbmQtbGluZSBQeXRob24KICAgICAgICAgaWYgJ0NhcmJvbicgaW4gZXh0LmV4dHJhX2xpbmtfYXJnczoKQEAgLTMzOCw5ICszODMsOSBAQAogICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oZXh0Lm5hbWUsIGV4dF9maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9sb2FkKHNwZWMpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCisgICAgICAgICAgICBzZWxmLmZhaWxlZF9vbl9pbXBvcnQuYXBwZW5kKGV4dC5uYW1lKQogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnKioqIFdBUk5JTkc6IHJlbmFtaW5nICIlcyIgc2luY2UgaW1wb3J0aW5nIGl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJXMnICUgKGV4dC5uYW1lLCB3aHkpLCBsZXZlbD0zKQogICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmlucGxhY2UKQEAgLTM1MCwxNyArMzk1LDYgQEAKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUobmV3bmFtZSkKICAgICAgICAgICAgIG9zLnJlbmFtZShleHRfZmlsZW5hbWUsIG5ld25hbWUpCiAKLSAgICAgICAgICAgICMgWFhYIC0tIFRoaXMgcmVsaWVzIG9uIGEgVmlsZSBIQUNLIGluCi0gICAgICAgICAgICAjIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2V4dC5idWlsZF9leHRlbnNpb24oKS4gIFRoZQotICAgICAgICAgICAgIyBfYnVpbHRfb2JqZWN0cyBhdHRyaWJ1dGUgaXMgc3RvcmVkIHRoZXJlIHN0cmljdGx5IGZvcgotICAgICAgICAgICAgIyB1c2UgaGVyZS4KLSAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgYSBmYWlsdXJlLCBfYnVpbHRfb2JqZWN0cyBtYXkgbm90IGJlIHRoZXJlLAotICAgICAgICAgICAgIyBzbyBjYXRjaCB0aGUgQXR0cmlidXRlRXJyb3IgYW5kIG1vdmUgb24uCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuX2J1aWx0X29iamVjdHM6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCd1bmFibGUgdG8gcmVtb3ZlIGZpbGVzIChpZ25vcmVkKScpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIGV4Y190eXBlLCB3aHksIHRiID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoJyoqKiBXQVJOSU5HOiBpbXBvcnRpbmcgZXh0ZW5zaW9uICIlcyIgJwpAQCAtNDQ2LDYgKzQ4MCwxMyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MudW5saW5rKHRtcGZpbGUpCiAKKyAgICBkZWYgZGV0ZWN0X21hdGhfbGlicyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBmb3IgTWFjT1MgWCwgd2hpY2ggZG9lc24ndCBuZWVkIGxpYm0uYSBhdCBhbGwKKyAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFsnbSddCisKICAgICBkZWYgZGV0ZWN0X21vZHVsZXMoc2VsZik6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgL3Vzci9sb2NhbCBpcyBhbHdheXMgdXNlZCwgYnV0IHRoZSBsb2NhbCBidWlsZAogICAgICAgICAjIGRpcmVjdG9yaWVzIChpLmUuICcuJyBhbmQgJ0luY2x1ZGUnKSBtdXN0IGJlIGZpcnN0LiAgU2VlIGlzc3VlCkBAIC01NTAsMTAgKzU5MSw3IEBACiAgICAgICAgICAgICAgICAgaWYgaXRlbS5zdGFydHN3aXRoKCctTCcpOgogICAgICAgICAgICAgICAgICAgICBsaWJfZGlycy5hcHBlbmQoaXRlbVsyOl0pCiAKLSAgICAgICAgIyBDaGVjayBmb3IgTWFjT1MgWCwgd2hpY2ggZG9lc24ndCBuZWVkIGxpYm0uYSBhdCBhbGwKLSAgICAgICAgbWF0aF9saWJzID0gWydtJ10KLSAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgIG1hdGhfbGlicyA9IFtdCisgICAgICAgIG1hdGhfbGlicyA9IHNlbGYuZGV0ZWN0X21hdGhfbGlicygpCiAKICAgICAgICAgIyBYWFggT21pdHRlZCBtb2R1bGVzOiBnbCwgcHVyZSwgZGwsIFNHSS1zcGVjaWZpYyBtb2R1bGVzCiAKQEAgLTU2NCwxMyArNjAyLDE3IEBACiAKICAgICAgICAgIyBhcnJheSBvYmplY3RzCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2FycmF5JywgWydhcnJheW1vZHVsZS5jJ10pICkKKworICAgICAgICBzaGFyZWRfbWF0aCA9ICdNb2R1bGVzL19tYXRoLm8nCiAgICAgICAgICMgY29tcGxleCBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2NtYXRoJywgWydjbWF0aG1vZHVsZS5jJywgJ19tYXRoLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnX21hdGguaCddLAorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdjbWF0aCcsIFsnY21hdGhtb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX29iamVjdHM9W3NoYXJlZF9tYXRoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnX21hdGguaCcsIHNoYXJlZF9tYXRoXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bWF0aF9saWJzKSApCiAgICAgICAgICMgbWF0aCBsaWJyYXJ5IGZ1bmN0aW9ucywgZS5nLiBzaW4oKQotICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdtYXRoJywgIFsnbWF0aG1vZHVsZS5jJywgJ19tYXRoLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnX21hdGguaCddLAorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdtYXRoJywgIFsnbWF0aG1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfb2JqZWN0cz1bc2hhcmVkX21hdGhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9WydfbWF0aC5oJywgc2hhcmVkX21hdGhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1tYXRoX2xpYnMpICkKIAogICAgICAgICAjIHRpbWUgbGlicmFyaWVzOiBsaWJydCBtYXkgYmUgbmVlZGVkIGZvciBjbG9ja19nZXR0aW1lKCkKQEAgLTU4Miw3ICs2MjQsMTAgQEAKICAgICAgICAgIyB0aW1lIG9wZXJhdGlvbnMgYW5kIHZhcmlhYmxlcwogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCd0aW1lJywgWyd0aW1lbW9kdWxlLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9dGltZV9saWJzKSApCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19kYXRldGltZScsIFsnX2RhdGV0aW1lbW9kdWxlLmMnXSkgKQorICAgICAgICAjIG1hdGhfbGlicyBpcyBuZWVkZWQgYnkgZGVsdGFfbmV3KCkgdGhhdCB1c2VzIHJvdW5kKCkgYW5kIGJ5IGFjY3VtKCkKKyAgICAgICAgIyB0aGF0IHVzZXMgbW9kZigpLgorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfZGF0ZXRpbWUnLCBbJ19kYXRldGltZW1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPW1hdGhfbGlicykgKQogICAgICAgICAjIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGltcGxlbWVudGVkIGluIEMKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigiX3JhbmRvbSIsIFsiX3JhbmRvbW1vZHVsZS5jIl0pICkKICAgICAgICAgIyBiaXNlY3QKQEAgLTYwMiw2ICs2NDcsOCBAQAogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfdGVzdGJ1ZmZlcicsIFsnX3Rlc3RidWZmZXIuYyddKSApCiAgICAgICAgICMgVGVzdCBsb2FkaW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgY29tcGlsZWQgZmlsZSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE2NDIxKQogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfdGVzdGltcG9ydG11bHRpcGxlJywgWydfdGVzdGltcG9ydG11bHRpcGxlLmMnXSkgKQorICAgICAgICAjIFRlc3QgbXVsdGktcGhhc2UgZXh0ZW5zaW9uIG1vZHVsZSBpbml0IChQRVAgNDg5KQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfdGVzdG11bHRpcGhhc2UnLCBbJ190ZXN0bXVsdGlwaGFzZS5jJ10pICkKICAgICAgICAgIyBwcm9maWxlciAoX2xzcHJvZiBpcyBmb3IgY1Byb2ZpbGUucHkpCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19sc3Byb2YnLCBbJ19sc3Byb2YuYycsICdyb3RhdGluZ3RyZWUuYyddKSApCiAgICAgICAgICMgc3RhdGljIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlCkBAIC02NTEsMTEgKzY5OCwxNCBAQAogICAgICAgICAjIE11bHRpbWVkaWEgbW9kdWxlcwogICAgICAgICAjIFRoZXNlIGRvbid0IHdvcmsgZm9yIDY0LWJpdCBwbGF0Zm9ybXMhISEKICAgICAgICAgIyBUaGVzZSByZXByZXNlbnQgYXVkaW8gc2FtcGxlcyBvciBpbWFnZXMgYXMgc3RyaW5nczoKLQorICAgICAgICAjCiAgICAgICAgICMgT3BlcmF0aW9ucyBvbiBhdWRpbyBzYW1wbGVzCiAgICAgICAgICMgQWNjb3JkaW5nIHRvICM5OTMxNzMsIHRoaXMgb25lIHNob3VsZCBhY3R1YWxseSB3b3JrIGZpbmUgb24KICAgICAgICAgIyA2NC1iaXQgcGxhdGZvcm1zLgotICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdhdWRpb29wJywgWydhdWRpb29wLmMnXSkgKQorICAgICAgICAjCisgICAgICAgICMgYXVkaW9vcCBuZWVkcyBtYXRoX2xpYnMgZm9yIGZsb29yKCkgaW4gbXVsdGlwbGUgZnVuY3Rpb25zLgorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdhdWRpb29wJywgWydhdWRpb29wLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bWF0aF9saWJzKSApCiAKICAgICAgICAgIyByZWFkbGluZQogICAgICAgICBkb19yZWFkbGluZSA9IHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdyZWFkbGluZScpCkBAIC03MTgsNyArNzY4LDcgQEAKICAgICAgICAgICAgICAgICAjIEluIGV2ZXJ5IGRpcmVjdG9yeSBvbiB0aGUgc2VhcmNoIHBhdGggc2VhcmNoIGZvciBhIGR5bmFtaWMKICAgICAgICAgICAgICAgICAjIGxpYnJhcnkgYW5kIHRoZW4gYSBzdGF0aWMgbGlicmFyeSwgaW5zdGVhZCBvZiBmaXJzdCBsb29raW5nCiAgICAgICAgICAgICAgICAgIyBmb3IgZHluYW1pYyBsaWJyYXJpZXMgb24gdGhlIGVudGlyZSBwYXRoLgotICAgICAgICAgICAgICAgICMgVGhpcyB3YXkgYSBzdGF0aWNseSBsaW5rZWQgY3VzdG9tIHJlYWRsaW5lIGdldHMgcGlja2VkIHVwCisgICAgICAgICAgICAgICAgIyBUaGlzIHdheSBhIHN0YXRpY2FsbHkgbGlua2VkIGN1c3RvbSByZWFkbGluZSBnZXRzIHBpY2tlZCB1cAogICAgICAgICAgICAgICAgICMgYmVmb3JlIHRoZSAocG9zc2libHkgYnJva2VuKSBkeW5hbWljIGxpYnJhcnkgaW4gL3Vzci9saWIuCiAgICAgICAgICAgICAgICAgcmVhZGxpbmVfZXh0cmFfbGlua19hcmdzID0gKCctV2wsLXNlYXJjaF9wYXRoc19maXJzdCcsKQogICAgICAgICAgICAgZWxzZToKQEAgLTE1NTcsNyArMTYwNyw3IEBACiAKICAgICAgICAgaWYgJ2QnIG5vdCBpbiBzeXMuYWJpZmxhZ3M6CiAgICAgICAgICAgICBleHQgPSBFeHRlbnNpb24oJ3h4bGltaXRlZCcsIFsneHhsaW1pdGVkLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsoJ1B5X0xJTUlURURfQVBJJywgJzB4MDMwNDAwMDAnKV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3Jvcz1bKCdQeV9MSU1JVEVEX0FQSScsICcweDAzMDUwMDAwJyldKQogICAgICAgICAgICAgc2VsZi5leHRlbnNpb25zLmFwcGVuZChleHQpCiAKICAgICAgICAgcmV0dXJuIG1pc3NpbmcKQEAgLTE1NzIsNyArMTYyMiw3IEBACiAgICAgICAgICMgICAgIC0td2l0aC10Y2x0ay1saWJzPSItTC9wYXRoL3RvL3RjbGxpYnMgLWx0Y2xtLm4gXAogICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgLUwvcGF0aC90by90a2xpYnMgLWx0a20ubiIKICAgICAgICAgIwotICAgICAgICAjIFRoZXNlIHZhbHVlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgb3Igb3ZlcnJpZGVuIHZpYSBtYWtlOgorICAgICAgICAjIFRoZXNlIHZhbHVlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgb3Igb3ZlcnJpZGRlbiB2aWEgbWFrZToKICAgICAgICAgIyAgICBtYWtlIFRDTFRLX0lOQ0xVREVTPSIuLi4iIFRDTFRLX0xJQlM9Ii4uLiIKICAgICAgICAgIwogICAgICAgICAjIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgYnVpbGRpbmcgYW5kIHRlc3RpbmcgdGtpbnRlciB3aXRoIG11bHRpcGxlCkBAIC0xODk3LDYgKzE5NDcsNyBAQAogICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL3N0Z2RpY3QuYycsCiAgICAgICAgICAgICAgICAgICAgJ19jdHlwZXMvY2ZpZWxkLmMnXQogICAgICAgICBkZXBlbmRzID0gWydfY3R5cGVzL2N0eXBlcy5oJ10KKyAgICAgICAgbWF0aF9saWJzID0gc2VsZi5kZXRlY3RfbWF0aF9saWJzKCkKIAogICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgc291cmNlcy5hcHBlbmQoJ19jdHlwZXMvbWFsbG9jX2Nsb3N1cmUuYycpCkBAIC0xOTI3LDggKzE5NzgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1bXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXM9c291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9ZGVwZW5kcykKKyAgICAgICAgIyBmdW5jdGlvbiBteV9zcXJ0KCkgbmVlZHMgbWF0aCBsaWJyYXJ5IGZvciBzcXJ0KCkKICAgICAgICAgZXh0X3Rlc3QgPSBFeHRlbnNpb24oJ19jdHlwZXNfdGVzdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXM9WydfY3R5cGVzL19jdHlwZXNfdGVzdC5jJ10pCisgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzPVsnX2N0eXBlcy9fY3R5cGVzX3Rlc3QuYyddLAorICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPW1hdGhfbGlicykKICAgICAgICAgc2VsZi5leHRlbnNpb25zLmV4dGVuZChbZXh0LCBleHRfdGVzdF0pCiAKICAgICAgICAgaWYgbm90ICctLXdpdGgtc3lzdGVtLWZmaScgaW4gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDT05GSUdfQVJHUyIpOgo=